diff -pruN 2.23.6-1/.changes/2.23.10.json 2.31.35-1/.changes/2.23.10.json
--- 2.23.6-1/.changes/2.23.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "awscrt",
+    "description": "Update awscrt version requirement to 0.23.8",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ecr-public``",
+    "description": "Temporarily updating dualstack endpoint support",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "You can now use the CreateTable API operation to create tables with schemas by adding an optional metadata argument.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "Temporarily updating dualstack endpoint support",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Adds options for configuring how MediaTailor conditions ads before inserting them into the content stream. Based on the new settings, MediaTailor will either transcode ads to match the content stream as it has in the past, or it will insert ads without first transcoding them.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Add a 'reason' field to InternalServerException",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Added APIs to manage QBusiness user subscriptions",
+    "type": "api-change"
+  },
+  {
+    "category": "``appstream``",
+    "description": "Add support for managing admin consent requirement on selected domains for OneDrive Storage Connectors in AppStream2.0.",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Adds Cedar JSON format support for entities and context data in authorization requests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.11.json 2.31.35-1/.changes/2.23.11.json
--- 2.23.6-1/.changes/2.23.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``codebuild``",
+    "description": "Added support for CodeBuild self-hosted Buildkite runner builds",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Updates to Aurora MySQL and Aurora PostgreSQL API pages with instance log type in the create and modify DB Cluster.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "This change is to deprecate the existing citation field under RetrieveAndGenerateStream API response in lieu of GeneratedResponsePart and RetrievedReferences",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add support for sending metrics to cross account and CMCK AMP workspaces through RoleConfiguration on Create/Update Scraper.",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-routes``",
+    "description": "The OptimizeWaypoints API now supports 50 waypoints per request (20 with constraints like AccessHours or AppointmentTime). It adds waypoint clustering via Clustering and ClusteringIndex for better optimization. Also, total distance validation is removed for greater flexibility.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release introduces a new valid value in InstanceType parameter: p5en.48xlarge, in ProductionVariant.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.12.json 2.31.35-1/.changes/2.23.12.json
--- 2.23.6-1/.changes/2.23.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``mediatailor``",
+    "description": "Add support for CloudWatch Vended Logs which allows for delivery of customer logs to CloudWatch Logs, S3, or Firehose.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.13.json 2.31.35-1/.changes/2.23.13.json
--- 2.23.6-1/.changes/2.23.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``neptune-graph``",
+    "description": "Added argument to `list-export` to filter by graph ID",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "This release adds support for accepting encrypted SAML assertions. Customers can now configure their identity provider to encrypt the SAML assertions it sends to IAM.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Adds functionality to enable/disable a new Q Business Chat orchestration feature. If enabled, Q Business can orchestrate over datasources and plugins without the need for customers to select specific chat modes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "IPv6 support for Hyperpod clusters",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Introduces TargetDataSettings with the TablePreparationMode option available for data migrations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "Doc-only update to provide more information on using Kerberos authentication with SMB locations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.14.json 2.31.35-1/.changes/2.23.14.json
--- 2.23.6-1/.changes/2.23.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``rds``",
+    "description": "Documentation updates to clarify the description for the parameter AllocatedStorage for the DB cluster data type, the description for the parameter DeleteAutomatedBackups for the DeleteDBCluster API operation, and removing an outdated note for the CreateDBParameterGroup API operation.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.15.json 2.31.35-1/.changes/2.23.15.json
--- 2.23.6-1/.changes/2.23.15.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.15.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``cost-optimization-hub``",
+    "description": "This release enables AWS Cost Optimization Hub to show cost optimization recommendations for Amazon Auto Scaling Groups, including those with single and mixed instance types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Updated list of the valid AWS Region values for the LocationConstraint parameter for general purpose buckets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "This release adds the ability to conditionally require fields on a template. Check public documentation for more information.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "We added 5 new stack refactoring APIs: CreateStackRefactor, ExecuteStackRefactor, ListStackRefactors, DescribeStackRefactor, ListStackRefactorActions.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.7.json 2.31.35-1/.changes/2.23.7.json
--- 2.23.6-1/.changes/2.23.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``iot``",
+    "description": "Raised the documentParameters size limit to 30 KB for AWS IoT Device Management - Jobs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds support for dynamic audio configuration and the ability to disable the deblocking filter for h265 encodes.",
+    "type": "api-change"
+  },
+  {
+    "category": "Signing",
+    "description": "No longer sign transfer-encoding header for SigV4",
+    "type": "bugfix"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Add support for the prompt caching feature for Bedrock Prompt Management",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Minor fix to ARN validation for Lambda functions passed to S3 Batch Operations",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.8.json 2.31.35-1/.changes/2.23.8.json
--- 2.23.6-1/.changes/2.23.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``firehose``",
+    "description": "For AppendOnly streams, Firehose will automatically scale to match your throughput.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "feature: Deadline: Add support for limiting the concurrent usage of external resources, like floating licenses, using limits and the ability to constrain the maximum number of workers that work on a job",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Add stash and outErrors to EvaluateCode/EvaluateMappingTemplate response",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release changes the CreateFleet CLI and SDK's such that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-influxdb``",
+    "description": "Adds 'allocatedStorage' parameter to UpdateDbInstance API that allows increasing the database instance storage size and 'dbStorageType' parameter to UpdateDbInstance API that allows changing the storage type of the database instance",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "AWS DataSync now supports the Kerberos authentication protocol for SMB locations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.23.9.json 2.31.35-1/.changes/2.23.9.json
--- 2.23.6-1/.changes/2.23.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.23.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``ecr``",
+    "description": "Add support for Dualstack and Dualstack-with-FIPS Endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-pricing-calculator``",
+    "description": "Added ConflictException error type in DeleteBillScenario, BatchDeleteBillScenarioCommitmentModification, BatchDeleteBillScenarioUsageModification, BatchUpdateBillScenarioUsageModification, and BatchUpdateBillScenarioCommitmentModification API operations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr-public``",
+    "description": "Add support for Dualstack Endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Change the type of MpuObjectSize in CompleteMultipartUploadRequest from int to long.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "This release includes a new feature for Amazon SES Mail Manager which allows customers to specify known addresses and domains and make use of those in traffic policies and rules actions to distinguish between known and unknown entries.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.0.json 2.31.35-1/.changes/2.24.0.json
--- 2.23.6-1/.changes/2.24.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``ecr``",
+    "description": "Adds support to handle the new basic scanning daily quota.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pi``",
+    "description": "Adds documentation for dimension groups and dimensions to analyze locks for Database Insights.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Introduce versionStatus field to take place of status field in EKS DescribeClusterVersions API",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "This release adds support for the Clinical Note Template Customization feature for the AWS HealthScribe APIs within Amazon Transcribe.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-containers``",
+    "description": "Add custom ``create-role-associations`` and ``delete-role-associations`` commands to create/delete role associations for EMR service accounts and provided IAM role.",
+    "type": "feature"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds support for Animated GIF output, forced chroma sample positioning metadata, and Extensible Wave Container format",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.1.json 2.31.35-1/.changes/2.24.1.json
--- 2.23.6-1/.changes/2.24.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``connect``",
+    "description": "Updated the CreateContact API documentation to indicate that it only applies to EMAIL contacts.",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewayv2``",
+    "description": "Documentation updates for Amazon API Gateway",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Doc-only update that adds defaults for CloudFront VpcOriginEndpointConfig values.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "New vendors for DMS Data Providers: DB2 LUW and DB2 for z/OS",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.10.json 2.31.35-1/.changes/2.24.10.json
--- 2.23.6-1/.changes/2.24.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``bedrock-agent``",
+    "description": "Introduce a new parameter which represents the user-agent header value used by the Bedrock Knowledge Base Web Connector.",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Update bundled Python interpreter version to 3.12.9",
+    "type": "enhancement"
+  },
+  {
+    "category": "``appstream``",
+    "description": "Added support for Certificate-Based Authentication on AppStream 2.0 multi-session fleets.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.11.json 2.31.35-1/.changes/2.24.11.json
--- 2.23.6-1/.changes/2.24.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``elasticache``",
+    "description": "Documentation update, adding clarity and rephrasing.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "This release adds Reasoning Content support to Converse and ConverseStream APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "This release improves support for newer models in Amazon Bedrock Flows.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Adding support for ReasoningContent fields in Pre-Processing, Post-Processing and Orchestration Trace outputs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``elastic-inference``",
+    "description": "The elastic-inference client has been removed following the deprecation of the service.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.12.json 2.31.35-1/.changes/2.24.12.json
--- 2.23.6-1/.changes/2.24.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``iot``",
+    "description": "AWS IoT - AWS IoT Device Defender adds support for a new Device Defender Audit Check that monitors device certificate age and custom threshold configurations for both the new device certificate age check and existing device certificate expiry check.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Adding \"reportArns\" field in output of BatchGetBuildBatches API. \"reportArns\" is an array that contains the ARNs of reports created by merging reports from builds associated with the batch build.",
+    "type": "api-change"
+  },
+  {
+    "category": "``devicefarm``",
+    "description": "Add an optional configuration to the ScheduleRun and CreateRemoteAccessSession API to set a device level http/s proxy.",
+    "type": "api-change"
+  },
+  {
+    "category": "openssl",
+    "description": "Update bundled OpenSSL version to 1.1.1zb for Linux installers",
+    "type": "enhancement"
+  },
+  {
+    "category": "``taxsettings``",
+    "description": "PutTaxRegistration API changes for Egypt, Greece, Vietnam countries",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Adds support for time-based EBS-backed AMI copy operations. Time-based copy ensures that EBS-backed AMIs are copied within and across Regions in a specified timeframe.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.13.json 2.31.35-1/.changes/2.24.13.json
--- 2.23.6-1/.changes/2.24.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``cloudfront``",
+    "description": "Documentation update for VPC origin config.",
+    "type": "api-change"
+  },
+  {
+    "category": "``oam``",
+    "description": "This release adds support for sharing AWS::ApplicationSignals::Service and AWS::ApplicationSignals::ServiceLevelObjective resources.",
+    "type": "api-change"
+  },
+  {
+    "category": "configure",
+    "description": "Clarify prompt titles and default values in the ``aws configure sso`` wizard",
+    "type": "enhancement"
+  },
+  {
+    "category": "``iotfleetwise``",
+    "description": "This release adds an optional listResponseScope request parameter in certain list API requests to limit the response to metadata only.",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime``",
+    "description": "Removes the Amazon Chime SDK APIs from the \"chime\" namespace.  Amazon Chime SDK APIs continue to be available in the AWS SDK via the dedicated Amazon Chime SDK namespaces: chime-sdk-identity, chime-sdk-mediapipelines, chime-sdk-meetings, chime-sdk-messaging, and chime-sdk-voice.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "AWS Batch: Resource Aware Scheduling feature support",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "AWS SageMaker InferenceComponents now support rolling update deployments for Inference Components.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Amazon EC2 Fleet customers can now override the Block Device Mapping specified in the Launch Template when creating a new Fleet request, saving the effort of creating and associating new Launch Templates to customize the Block Device Mapping.",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "This release adds API support for reading Service Level Objectives and Services from monitoring accounts, from SLO and Service-scoped operations, including ListServices and ListServiceLevelObjectives.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.14.json 2.31.35-1/.changes/2.24.14.json
--- 2.23.6-1/.changes/2.24.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``emr``",
+    "description": "Definition update for EbsConfiguration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``storagegateway``",
+    "description": "This release adds support to invoke a process that cleans the specified file share's cache of file entries that are failing upload to Amazon S3.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "This release supports deleting attachments from conversations.",
+    "type": "api-change"
+  },
+  {
+    "category": "dependency",
+    "description": "Upgrade pyinstaller from 5.13.2 to 6.11.1.",
+    "type": "enhancement"
+  },
+  {
+    "category": "encoding",
+    "description": "Adds support for the ``AWS_CLI_OUTPUT_ENCODING`` environment variable, which can be used to override the locale's preferred encoding when the CLI is writing output.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Introduces Sessions (preview) to enable stateful conversations in GenAI applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift-serverless``",
+    "description": "Add track support for Redshift Serverless workgroup.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "SageMaker HubService is introducing support for creating Training Jobs in Curated Hub (Private Hub). Additionally, it is introducing two new APIs: UpdateHubContent and UpdateHubContentReference.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.15.json 2.31.35-1/.changes/2.24.15.json
--- 2.23.6-1/.changes/2.24.15.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.15.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``pricing``",
+    "description": "Update GetProducts and DescribeServices API request input validations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Renamed and added new StandardConfiguration enums. Added support to update EncryptionConfiguration in UpdateBlueprint and UpdateDataAutomation APIs. Changed HttpStatus code for DeleteBlueprint and DeleteDataAutomationProject APIs to 200 from 204. Added APIs to support tagging.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Add skipped status to the Result Statistics of an Assessment Run",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "Systems Manager doc-only updates for Feb. 2025.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation-runtime``",
+    "description": "Added a mandatory parameter DataAutomationProfileArn to support for cross region inference for InvokeDataAutomationAsync API. Renamed DataAutomationArn to DataAutomationProjectArn. Added APIs to support tagging.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Adding licenses to EKS Anywhere Subscription operations response.",
+    "type": "api-change"
+  },
+  {
+    "category": "dependency",
+    "description": "Revert PyInstaller from 6.11.1 back to 5.13.2 due to `#9331 <https://github.com/aws/aws-cli/issues/9331>`__.",
+    "type": "bugfix"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "This release lets Amazon Bedrock Flows support newer models by increasing the maximum length of output in a prompt configuration. This release also increases the maximum number of prompt variables to 20 and the maximum number of node inputs to 20.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "The AWS MediaConvert Probe API allows you to analyze media files and retrieve detailed metadata about their content, format, and structure.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.16.json 2.31.35-1/.changes/2.24.16.json
--- 2.23.6-1/.changes/2.24.16.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.16.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "configuration",
+    "description": "Add support for disabling host prefix injection via the ``AWS_DISABLE_HOST_PREFIX_INJECTION`` environment variable or the ``disable_host_prefix_injection`` parameter in the shared aws configuration file.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Add DomainId to CreateDomainResponse",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Adds support for the ingestion of audio and video files by Q Business, which can be configured with the mediaExtractionConfiguration parameter.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "Added the capacity to return available challenges in admin authentication and to set version 3 of the pre token generation event for M2M ATC.",
+    "type": "api-change"
+  },
+  {
+    "category": "``awscrt``",
+    "description": "Fix urlencoding issues for request signing with the awscrt.",
+    "type": "bugfix"
+  },
+  {
+    "category": "``rum``",
+    "description": "Add support for PutResourcePolicy, GetResourcePolicy and DeleteResourcePolicy to support resource based policies for AWS CloudWatch RUM",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "Updating documentation for post call analytics job queueing.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Update the DescribeVpcs response",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.17.json 2.31.35-1/.changes/2.24.17.json
--- 2.23.6-1/.changes/2.24.17.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.17.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``iotsitewise``",
+    "description": "AWS IoT SiteWise now supports MQTT-enabled, V3 gateways. Configure data destinations for real-time ingestion into AWS IoT SiteWise or buffered ingestion using Amazon S3 storage. You can also use path filters for precise data collection from specific MQTT topics.",
+    "type": "api-change"
+  },
+  {
+    "category": "``elasticache``",
+    "description": "Doc only update, listing 'valkey7' and 'valkey8' as engine options for parameter groups.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Note support for Database Insights for Amazon RDS.",
+    "type": "api-change"
+  },
+  {
+    "category": "useragent",
+    "description": "Update user agent string to include client feature use.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``iot-managed-integrations``",
+    "description": "Adding managed integrations APIs for IoT Device Management to setup and control devices across different manufacturers and connectivity protocols. APIs include managedthing operations, credential and provisioning profile management, notification configuration, and OTA update.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.18.json 2.31.35-1/.changes/2.24.18.json
--- 2.23.6-1/.changes/2.24.18.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.18.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``iotfleetwise``",
+    "description": "This release adds floating point support for CAN/OBD signals and adds support for signed OBD signals.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "AWS DataSync now supports modifying ServerHostname while updating locations SMB, NFS, and ObjectStorage.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Added DeviceTypeWorkSpacesThinClient type to allow users to access their WorkSpaces through a WorkSpaces Thin Client.",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "New Service: Amazon GameLift Streams delivers low-latency game streaming from AWS global infrastructure to virtually any device with a browser at up to 1080p resolution and 60 fps.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "This releases adds support for Custom Prompt Router ARN",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.19.json 2.31.35-1/.changes/2.24.19.json
--- 2.23.6-1/.changes/2.24.19.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.19.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``wafv2``",
+    "description": "You can now perform an exact match or rate limit aggregation against the web request's JA4 fingerprint.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This releases adds support for Custom Prompt Router",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Added a new ModifyEndpointEncryptionMode API for managing endpoint encryption settings.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivs-realtime``",
+    "description": "IVS Real-Time now offers customers the ability to merge fragmented recordings in the event of a participant disconnect.",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkflowmonitor``",
+    "description": "This release contains 2 changes. 1: DeleteScope/GetScope/UpdateScope operations now return 404 instead of 500 when the resource does not exist. 2: Expected string format for clientToken fields of CreateMonitorInput/CreateScopeInput/UpdateMonitorInput have been updated to be an UUID based string.",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift-data``",
+    "description": "This release adds support for ListStatements API to filter statements by ClusterIdentifier, WorkgroupName, and Database.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudtrail``",
+    "description": "Doc-only update for CloudTrail.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.2.json 2.31.35-1/.changes/2.24.2.json
--- 2.23.6-1/.changes/2.24.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``pi``",
+    "description": "Documentation only update for RDS Performance Insights dimensions for execution plans and locking analysis.",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm-pca``",
+    "description": "Private Certificate Authority service now supports Partitioned CRL as a revocation configuration option.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Add support for operation level caching",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Adding support for the new fullSnapshotSizeInBytes field in the response of the EC2 EBS DescribeSnapshots API. This field represents the size of all the blocks that were written to the source volume at the time the snapshot was created.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.20.json 2.31.35-1/.changes/2.24.20.json
--- 2.23.6-1/.changes/2.24.20.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.20.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``neptune-graph``",
+    "description": "Several small updates to resolve customer requests.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Documentation updates for Amazon CloudFront.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Introduces support for Neptune Analytics as a vector data store and adds Context Enrichment Configurations, enabling use cases such as GraphRAG.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add serviceManaged field to DescribeAddresses API response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``elbv2``",
+    "description": "This release adds support for assigning IP addresses to Application Load Balancers from VPC IP Address Manager pools.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Support Multi Agent Collaboration within Inline Agents",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.21.json 2.31.35-1/.changes/2.24.21.json
--- 2.23.6-1/.changes/2.24.21.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.21.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``ce``",
+    "description": "Releasing minor partition endpoint updates.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Add support for computer use tools",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Add support for contact transfers in external voice systems.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pca-connector-ad``",
+    "description": "PrivateCA Connector for Active Directory now supports dual stack endpoints. This release adds the IpAddressType option to the VpcInformation on a Connector which determines whether the endpoint supports IPv4 only or IPv4 and IPv6 traffic.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-influxdb``",
+    "description": "This release updates the default value of pprof-disabled from false to true.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Adds defaultFontSize and defaultLineHeight as options in the EbuTtDDestinationSettings within the caption descriptions for an output stream.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Add support for computer use tools",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "This release adds new StandardsControlsUpdatable field to the StandardsSubscription resource",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.22.json 2.31.35-1/.changes/2.24.22.json
--- 2.23.6-1/.changes/2.24.22.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.22.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds the GroupLongName field to the response of the DescribeAvailabilityZones API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Add an enum option DISABLED for Output Locking Mode under Global Configuration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "This release adds Amazon ECR to Amazon ECR pull through cache rules support.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only update for Amazon ECS to address various tickets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector2``",
+    "description": "Adding componentArn to network reachability details",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.23.json 2.31.35-1/.changes/2.24.23.json
--- 2.23.6-1/.changes/2.24.23.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.23.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,62 @@
+[
+  {
+    "category": "``s3control``",
+    "description": "Updating GetDataAccess response for S3 Access Grants to include the matched Grantee for the requested prefix",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "Updated CreateLogAnomalyDetector to accept only kms key arn",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Introduced support for Skew Protection. Added enableSkewProtection field to createBranch and updateBranch API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm-pca``",
+    "description": "Private Certificate Authority service now supports P521 and RSA3072 key algorithms.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivs-realtime``",
+    "description": "IVS Real-Time now offers customers the ability to adjust the participant & composition recording segment duration",
+    "type": "api-change"
+  },
+  {
+    "category": "parsers",
+    "description": "Minor Parser updates to support the new smithy-generated protocol tests.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "AWS CodeBuild now supports webhook filtering by organization name",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release changes the CreateLaunchTemplate, CreateLaunchTemplateVersion, ModifyLaunchTemplate CLI and SDKs such that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.",
+    "type": "api-change"
+  },
+  {
+    "category": "parsers",
+    "description": "Adds support for parsing int/long types in rest-json response headers.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "This release adds the ResetChannelState and ResetOriginEndpointState operation to reset MediaPackage V2 channel and origin endpoint. This release also adds a new field, UrlEncodeChildManifest, for HLS/LL-HLS to allow URL-encoding child manifest query string based on the requirements of AWS SigV4.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Generate account endpoints for DynamoDB requests using ARN-sourced account ID when available",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release adds support to update projects and environments",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.24.json 2.31.35-1/.changes/2.24.24.json
--- 2.23.6-1/.changes/2.24.24.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.24.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``lakeformation``",
+    "description": "This release added \"condition\" to LakeFormation OptIn APIs, also added WithPrivilegedAccess flag to RegisterResource and DescribeResource.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "Minor description updates to API parameters",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "This release added AllowFullTableExternalDataAccess to glue catalog resource.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-identity``",
+    "description": "Updated API model build artifacts for identity pools",
+    "type": "api-change"
+  },
+  {
+    "category": "parser",
+    "description": "Fixes bug when trying to parse an integer in the `code` part of the response body.",
+    "type": "bugfix"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.25.json 2.31.35-1/.changes/2.24.25.json
--- 2.23.6-1/.changes/2.24.25.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.25.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``wafv2``",
+    "description": "AWS WAF now lets you inspect fragments of request URIs. You can specify the scope of the URI to inspect and narrow the set of URI fragments.",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-maps``",
+    "description": "Provide support for vector map styles in the GetStaticMap operation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "This release adds support for adding, removing, and listing SLO time exclusion windows with the BatchUpdateExclusionWindows and ListServiceLevelObjectiveExclusionWindows APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rum``",
+    "description": "CloudWatch RUM now supports unminification of JS error stack traces.",
+    "type": "api-change"
+  },
+  {
+    "category": "``taxsettings``",
+    "description": "Adjust Vietnam PaymentVoucherNumber regex and minor API change.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.26.json 2.31.35-1/.changes/2.24.26.json
--- 2.23.6-1/.changes/2.24.26.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.26.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds support for AVC passthrough, the ability to specify PTS offset without padding, and an A/V segment matching feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53``",
+    "description": "Amazon Route 53 now supports the iso-f regions for private DNS Amazon VPCs and cloudwatch healthchecks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Providing Tagging support for DomainName in AppSync",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "This release adds support for PySpark jobs. Customers can now analyze data by running jobs using approved PySpark analysis templates.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.27.json 2.31.35-1/.changes/2.24.27.json
--- 2.23.6-1/.changes/2.24.27.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.27.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``mediaconnect``",
+    "description": "This release adds support for NDI flow outputs in AWS Elemental MediaConnect. You can now send content from your MediaConnect transport streams directly to your NDI environment using the new NDI output type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune-graph``",
+    "description": "Update IAM Role ARN Validation to Support Role Paths",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Add Ruby 3.4 (ruby3.4) support to AWS Lambda.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Support custom prompt routers for evaluation jobs",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Doc-only updates for EC2 for March 2025.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Added support for g6, g6e, m6i, c6i instance types in SageMaker Processing Jobs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.3.json 2.31.35-1/.changes/2.24.3.json
--- 2.23.6-1/.changes/2.24.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``fsx``",
+    "description": "Support for in-place Lustre version upgrades",
+    "type": "api-change"
+  },
+  {
+    "category": "``b2bi``",
+    "description": "Allow spaces in the following fields in the Partnership resource: ISA 06 - Sender ID, ISA 08 - Receiver ID, GS 02 - Application Sender Code, GS 03 - Application Receiver Code",
+    "type": "api-change"
+  },
+  {
+    "category": "``polly``",
+    "description": "Added support for the new voice - Jasmine (en-SG). Jasmine is available as a Neural voice only.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "This releases adds the additionalModelRequestFields field to the InvokeInlineAgent operation. Use additionalModelRequestFields to specify  additional inference parameters for a model beyond the base inference parameters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "This releases adds the additionalModelRequestFields field to the CreateAgent and UpdateAgent operations. Use additionalModelRequestFields to specify  additional inference parameters for a model beyond the base inference parameters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearchserverless``",
+    "description": "Custom OpenSearchServerless Entity ID for SAML Config.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Add note for the RUNNER_BUILDKITE_BUILD buildType.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Adds a RequestId parameter to all MediaLive Workflow Monitor create operations.  The RequestId parameter allows idempotent operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.4.json 2.31.35-1/.changes/2.24.4.json
--- 2.23.6-1/.changes/2.24.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``acm-pca``",
+    "description": "Private Certificate Authority (PCA) documentation updates",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only release to support migrating Amazon ECS service ARNs to the long ARN format.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Adds additional values to the InferenceAmiVersion parameter in the ProductionVariant data type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``fis``",
+    "description": "Adds auto-pagination for the following operations: ListActions, ListExperimentTemplates, ListTargetAccountConfigurations, ListExperiments, ListExperimentResolvedTargets, ListTargetResourceTypes. Reduces length constraints of prefixes for logConfiguration and experimentReportConfiguration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``accessanalyzer``",
+    "description": "This release introduces the getFindingsStatistics API, enabling users to retrieve aggregated finding statistics for IAM Access Analyzer's external access and unused access analysis features. Updated service API and documentation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``storagegateway``",
+    "description": "This release adds support for generating cache reports on S3 File Gateways for files that fail to upload.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.5.json 2.31.35-1/.changes/2.24.5.json
--- 2.23.6-1/.changes/2.24.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``codebuild``",
+    "description": "Added test suite names to test case metadata",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Release Notes: 1) Analytics API enhancements: Added new ListAnalyticsDataLakeDataSets API. 2)  Onboarding API Idempotency: Adds ClientToken to instance creation and management APIs to support idempotency.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Update Environment and Device name field definitions",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds-data``",
+    "description": "Add support for Stop DB feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Introduces premigration assessment feature to DMS Serverless API for start-replication and describe-replications",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Added support for Content-Range header in HeadObject response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "The WAFv2 API now supports configuring data protection in webACLs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.6.json 2.31.35-1/.changes/2.24.6.json
--- 2.23.6-1/.changes/2.24.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``dms``",
+    "description": "Support replicationConfigArn in DMS DescribeApplicableIndividualAssessments API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-influxdb``",
+    "description": "This release introduces APIs to manage DbClusters and adds support for read replicas",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Add ComputeRoleArn to CreateApp, UpdateApp, CreateBranch, and UpdateBranch, allowing caller to specify a role to be assumed by Amplify Hosting for server-side rendered applications.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.7.json 2.31.35-1/.changes/2.24.7.json
--- 2.23.6-1/.changes/2.24.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "protocols",
+    "description": "Added support for multiple protocols within a service based on performance priority.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``batch``",
+    "description": "This documentation-only update corrects some typos.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Adds support for creating CloudWatchAlarmTemplates for AWS Elemental MediaTailor Playback Configuration resources.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-containers``",
+    "description": "EMR on EKS StartJobRun Api will be supporting the configuration of log storage in AWS by using \"managedLogs\" under \"MonitoringConfiguration\".",
+    "type": "api-change"
+  },
+  {
+    "category": "protocol",
+    "description": "The CLI no longer validates payload size for event streams. This is to facilitate varying payload requirements across AWS services.",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.8.json 2.31.35-1/.changes/2.24.8.json
--- 2.23.6-1/.changes/2.24.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``location``",
+    "description": "Adds support for larger property maps for tracking and geofence positions changes. It increases the maximum number of items from 3 to 4, and the maximum value length from 40 to 150.",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "This release introduces Network Firewall's Automated Domain List feature. New APIs include UpdateFirewallAnalysisSettings, StartAnalysisReport, GetAnalysisReportResults, and ListAnalysisReports. These allow customers to enable analysis on firewalls to identify and report frequently accessed domain.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "This release adds the ability for outbound email sent with SES to preserve emails to a Mail Manager archive.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only release for Amazon ECS that supports the CPU task limit increase.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lightsail``",
+    "description": "Documentation updates for Amazon Lightsail.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Adds r8g instance type support to SageMaker Realtime Endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "This release adds additional metadata fields in Mail Manager archive searches to show email source and details about emails that were archived when being sent with SES.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codepipeline``",
+    "description": "Add environment variables to codepipeline action declaration.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.24.9.json 2.31.35-1/.changes/2.24.9.json
--- 2.23.6-1/.changes/2.24.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.24.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``rds``",
+    "description": "CloudWatch Database Insights now supports Amazon RDS.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-web``",
+    "description": "Add support for toolbar configuration under user settings.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Add webhook status and status message to AWS CodeBuild webhooks",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Added new capability in the UpdateCluster operation to remove instance groups from your SageMaker HyperPod cluster.",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager-user-subscriptions``",
+    "description": "Updates entity to include Microsoft RDS SAL as a valid type of user subscription.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Reduce the minimum number of required attack sequence signals from 2 to 1",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.0.json 2.31.35-1/.changes/2.25.0.json
--- 2.23.6-1/.changes/2.25.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "Endpoints",
+    "description": "Generate and use AWS-account-based endpoints for compatible services when the account ID is available. At launch, DynamoDB is the first and only compatible service. The new endpoint URL pattern will be ``https://<account-id>.ddb.<region>.amazonaws.com``. Additional services may be added in the future. See the documentation for details: https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html",
+    "type": "feature"
+  },
+  {
+    "category": "dependency",
+    "description": "Upgrade pyinstaller from 5.13.2 to 6.11.1.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``controlcatalog``",
+    "description": "Add ExemptAssumeRoot parameter to adapt for new AWS AssumeRoot capability.",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "You can now use flow operations to either flush or capture traffic monitored in your firewall's flow table.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "With this release, Bedrock Evaluation will now support bring your own inference responses.",
+    "type": "api-change"
+  },
+  {
+    "category": "dependency",
+    "description": "Set ``PYINSTALLER_RESET_ENVIRONMENT`` if not already set when starting child processes. This supports using the CLI as a credential process for itself.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "Amazon SES Mail Manager. Extended rule string and boolean expressions to support analysis in condition evaluation. Extended ingress point string expression to support analysis in condition evaluation",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Added appId field to Webhook responses",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.1.json 2.31.35-1/.changes/2.25.1.json
--- 2.23.6-1/.changes/2.25.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``datazone``",
+    "description": "Add support for overriding selection of default AWS IAM Identity Center instance as part of Amazon DataZone domain APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release does the following: 1.) Adds DurationHours as a required field to the SearchTrainingPlanOfferings action in the SageMaker AI API; 2.) Adds support for G6e instance types for SageMaker AI inference optimization jobs.",
+    "type": "api-change"
+  },
+  {
+    "category": "Protocol",
+    "description": "Adds support for the smithy-rpc-v2-cbor protocol.  If a service supports smithy-rpc-v2-cbor, this protocol will automatically be used.  For more information, see https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html",
+    "type": "enhancement"
+  },
+  {
+    "category": "``route53-recovery-control-config``",
+    "description": "Adds dual-stack (IPv4 and IPv6) endpoint support for route53-recovery-control-config operations, opt-in dual-stack addresses for cluster endpoints, and UpdateCluster API to update the network-type of clusters between IPv4 and dual-stack.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "A CustomModelUnit(CMU) is an abstract view of the hardware utilization that Bedrock needs to host a a single copy of your custom imported model. Bedrock determines the number of CMUs that a model copy needs when you import the custom model. You can use CMUs to estimate the cost of Inference's.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.10.json 2.31.35-1/.changes/2.25.10.json
--- 2.23.6-1/.changes/2.25.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``route53``",
+    "description": "Added us-gov-east-1 and us-gov-west-1 as valid Latency Based Routing regions for change-resource-record-sets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Adds support for i3en, m7i, r7i instance types for SageMaker Hyperpod",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Added optional \"customMetadataField\" for Amazon Aurora knowledge bases, allowing single-column metadata. Also added optional \"textIndexName\" for MongoDB Atlas knowledge bases, enabling hybrid search support.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearch``",
+    "description": "Improve descriptions for various API commands and data types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-voice``",
+    "description": "Added FOC date as an attribute of PhoneNumberOrder, added AccessDeniedException as a possible return type of ValidateE911Address",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "This Feature Adds Support for the \"zh-HK\" Locale for Batch Operations",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "Add support for Dual_Stack and PrivateLink types of IngressPoint. For configuration requests, SES Mail Manager will now accept both IPv4/IPv6 dual-stack endpoints and AWS PrivateLink VPC endpoints for email receiving.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "This release enables customers to provide attachments in the SESv2 SendEmail and SendBulkEmail APIs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.11.json 2.31.35-1/.changes/2.25.11.json
--- 2.23.6-1/.changes/2.25.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``ds-data``",
+    "description": "Doc only update - fixed broken links.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Updated max size of Prefixes parameter of Scope data type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Doc-only updates for Amazon EC2",
+    "type": "api-change"
+  },
+  {
+    "category": "``events``",
+    "description": "Amazon EventBridge adds support for customer-managed keys on Archives and validations for two fields: eventSourceArn and kmsKeyIdentifier.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.12.json 2.31.35-1/.changes/2.25.12.json
--- 2.23.6-1/.changes/2.25.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``medialive``",
+    "description": "AWS Elemental MediaLive now supports SDI inputs to MediaLive Anywhere Channels in workflows that use AWS SDKs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Add input validations for multiple Glue APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "New options for how to handle harmful content detected by Amazon Bedrock Guardrails.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "AWS CodeBuild now offers an enhanced debugging experience.",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize``",
+    "description": "Add support for eventsConfig for CreateSolution, UpdateSolution, DescribeSolution, DescribeSolutionVersion. Add support for GetSolutionMetrics to return weighted NDCG metrics when eventsConfig is enabled for the solution.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transfer``",
+    "description": "This launch enables customers to manage contents of their remote directories, by deleting old files or moving files to archive folders in remote servers once they have been retrieved. Customers will be able to automate the process using event-driven architecture.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "New options for how to handle harmful content detected by Amazon Bedrock Guardrails.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.13.json 2.31.35-1/.changes/2.25.13.json
--- 2.23.6-1/.changes/2.25.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``taxsettings``",
+    "description": "Uzbekistan Launch on TaxSettings Page",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "Documentation updates for AWS Security Hub.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotfleetwise``",
+    "description": "This release adds the option to update the strategy of state templates already associated to a vehicle, without the need to remove and re-add them.",
+    "type": "api-change"
+  },
+  {
+    "category": "``storagegateway``",
+    "description": "Added new ActiveDirectoryStatus value, ListCacheReports paginator, and support for longer pagination tokens.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "This release introduces our latest bedrock runtime API, InvokeModelWithBidirectionalStream. The API supports both input and output streams and is supported by only HTTP2.0.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cost-optimization-hub``",
+    "description": "This release adds resource type \"MemoryDbReservedInstances\" and resource type \"DynamoDbReservedCapacity\" to the GetRecommendation, ListRecommendations, and ListRecommendationSummaries APIs to support new MemoryDB and DynamoDB RI recommendations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "This release supports Pagination traits on Cost Anomaly Detection APIs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.14.json 2.31.35-1/.changes/2.25.14.json
--- 2.23.6-1/.changes/2.25.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``dynamodb``",
+    "description": "Documentation update for secondary indexes and Create_Table.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transfer``",
+    "description": "This launch includes 2 enhancements to SFTP connectors user-experience: 1) Customers can self-serve concurrent connections setting for their connectors, and 2) Customers can discover the public host key of remote servers using their SFTP connectors.",
+    "type": "api-change"
+  },
+  {
+    "category": "``controlcatalog``",
+    "description": "The GetControl API now surfaces a control's Severity, CreateTime, and Identifier for a control's Implementation. The ListControls API now surfaces a control's Behavior, Severity, CreateTime, and Identifier for a control's Implementation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``groundstation``",
+    "description": "Support tagging Agents and adjust input field validations",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "The TableOptimizer APIs in AWS Glue now return the DpuHours field in each TableOptimizerRun, providing clients visibility to the DPU-hours used for billing in managed Apache Iceberg table compaction optimization.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.2.json 2.31.35-1/.changes/2.25.2.json
--- 2.23.6-1/.changes/2.25.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``pcs``",
+    "description": "ClusterName/ClusterIdentifier, ComputeNodeGroupName/ComputeNodeGroupIdentifier, and QueueName/QueueIdentifier can now have 10 characters, and a minimum of 3 characters. The TagResource API action can now return ServiceQuotaExceededException.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotwireless``",
+    "description": "Mark EutranCid under LteNmr optional.",
+    "type": "api-change"
+  },
+  {
+    "category": "dependency",
+    "description": "Relax symlink verification when building MacOS executables",
+    "type": "bugfix"
+  },
+  {
+    "category": "``ssm``",
+    "description": "This release adds the AvailableSecurityUpdatesComplianceStatus field to patch baseline operations, as well as the AvailableSecurityUpdateCount and InstancesWithAvailableSecurityUpdates to patch state operations. Applies to Windows Server managed nodes only.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qconnect``",
+    "description": "Provides the correct value for supported model ID.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.3.json 2.31.35-1/.changes/2.25.3.json
--- 2.23.6-1/.changes/2.25.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Deprecate tags field in Get API responses",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Added support to override upgrade-blocking readiness checks via force flag when updating a cluster.",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "Minor updates to improve developer experience.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Adding support for Amazon OpenSearch Managed clusters as a vector database in Knowledge Bases for Amazon Bedrock",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-entitlement``",
+    "description": "This release enhances the GetEntitlements API to support new filter CUSTOMER_AWS_ACCOUNT_ID in request and CustomerAWSAccountId field in response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspaces``",
+    "description": "Removing replication region limitation for Amazon Keyspaces Multi-Region Replication APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso``",
+    "description": "Updates legacy token auth flow to check if cached legacy tokens are expired according to the local clock. If expired, it will raise an ``UnauthorizedSSOTokenError`` instead of sending an expired token to Identity Center's ``GetRoleCredentials`` API.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds support for customer-managed KMS keys in Amazon SageMaker Partner AI Apps",
+    "type": "api-change"
+  },
+  {
+    "category": "``meteringmarketplace``",
+    "description": "This release enhances the BatchMeterUsage API to support new field CustomerAWSAccountId in request and response and making CustomerIdentifier optional. CustomerAWSAccountId or CustomerIdentifier must be provided in request but not both.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.4.json 2.31.35-1/.changes/2.25.4.json
--- 2.23.6-1/.changes/2.25.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``arc-zonal-shift``",
+    "description": "Add new shiftType field for ARC zonal shifts.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Add note about the Availability Zone where RDS restores the DB cluster for the RestoreDBClusterToPointInTime operation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``directconnect``",
+    "description": "With this release, AWS Direct Connect allows you to tag your Direct Connect gateways. Tags are metadata that you can create and use to manage your Direct Connect gateways. For more information about tagging, see AWS Tagging Strategies.",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "This release adds the ability to associate an AWS WAF v2 web ACL with an AWS Amplify App.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Add support for log filtering which allow customers to filter out selected event types from logs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds a configurable Quality Level setting for the top rendition of Auto ABR jobs",
+    "type": "api-change"
+  },
+  {
+    "category": "``polly``",
+    "description": "Added support for the new voice - Jihye (ko-KR). Jihye is available as a Neural voice only.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.5.json 2.31.35-1/.changes/2.25.5.json
--- 2.23.6-1/.changes/2.25.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``gamelift``",
+    "description": "Amazon GameLift Servers add support for additional instance types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "add: recovery mode for SageMaker Studio apps",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Update IAM dual-stack endpoints for BJS, IAD and PDT partitions",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "bedrock flow now support node action trace.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "Adding support for the new parameter \"ScanFilters\" in the CloudFormation StartResourceScan API. When this parameter is included, the StartResourceScan API will initiate a scan limited to the resource types specified by the parameter.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release adds new action type of Create Listing Changeset for the Metadata Enforcement Rule feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-oidc``",
+    "description": "This release adds AwsAdditionalDetails in the CreateTokenWithIAM API response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Added support for BOTTLEROCKET FIPS AMIs to AMI types in US regions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-pricing-calculator``",
+    "description": "Added standaloneAccountRateTypeSelections for GetPreferences and UpdatePreferences APIs. Added STALE enum value to status attribute in GetBillScenario and UpdateBillScenario APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "This release will enable two features: Firelens log driver, and Execute Command on Batch jobs on ECS. Both features will be passed through to ECS.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.6.json 2.31.35-1/.changes/2.25.6.json
--- 2.23.6-1/.changes/2.25.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Launching Multi-modality Content Filter for Amazon Bedrock Guardrails.",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigateway``",
+    "description": "Adds support for setting the IP address type to allow dual-stack or IPv4 address types to invoke your APIs or domain names.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "TransformAmiVersion for Batch Transform and SageMaker Search Service Aggregate Search API Extension",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "The service adds support for transferring AES-256 and other keys between the service and other service providers and HSMs. This feature uses ECDH to derive a one-time key transport key to enable these secure key exchanges.",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewayv2``",
+    "description": "Adds support for setting the IP address type to allow dual-stack or IPv4 address types to invoke your APIs or domain names.",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkmanager``",
+    "description": "Add support for NetworkManager Dualstack endpoints.",
+    "type": "api-change"
+  },
+  {
+    "category": "``meteringmarketplace``",
+    "description": "Add support for Marketplace Metering Service dual-stack endpoints.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "This release adds support for cacheNamespace in ProjectCache",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is an Amazon ECS documentation only release that addresses tickets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "RLS permission dataset with userAs: RLS_RULES flag, Q in QuickSight/Threshold Alerts/Schedules/Snapshots in QS embedding, toggle dataset refresh email alerts via API, transposed table with options: column width, type and index, toggle Q&A on dashboards, Oracle Service Name when creating data source.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.7.json 2.31.35-1/.changes/2.25.7.json
--- 2.23.6-1/.changes/2.25.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Release VPC Route Server, a new feature allowing dynamic routing in VPCs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add support for updating RemoteNetworkConfig for hybrid nodes on EKS UpdateClusterConfig API",
+    "type": "api-change"
+  },
+  {
+    "category": "``outposts``",
+    "description": "Enabling Asset Level Capacity Management feature, which allows customers to create a Capacity Task for a single Asset on their active Outpost.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "Add dual-stack support to global endpoints.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "With this release you can use a new field to specify the search term match type. Search term match types currently support fuzzy and contains matching.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Amazon S3 adds support for S3 Access Points for directory buckets in AWS Dedicated Local Zones",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-entitlement``",
+    "description": "Add support for Marketplace Entitlement Service dual-stack endpoints.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transfer``",
+    "description": "Add WebAppEndpointPolicy support for WebApps",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Amazon S3 adds support for S3 Access Points for directory buckets in AWS Dedicated Local Zones",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Add Prompt Caching support to Converse and ConverseStream APIs",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.8.json 2.31.35-1/.changes/2.25.8.json
--- 2.23.6-1/.changes/2.25.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Added tagging support for SageMaker notebook instance lifecycle configurations",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "This release adds support for updating the analytics engine of a collaboration.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.25.9.json 2.31.35-1/.changes/2.25.9.json
--- 2.23.6-1/.changes/2.25.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.25.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``ecs``",
+    "description": "This is an Amazon ECS documentation only update to address various tickets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "This release adds support for environment type WINDOWS_SERVER_2022_CONTAINER in ProjectEnvironment",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "Fix for customer issues related to AWS account ID and size limitation for token.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Added support for SMPTE 2110 inputs when running a channel in a MediaLive Anywhere cluster. This feature enables ingestion of SMPTE 2110-compliant video, audio, and ancillary streams by reading SDP files that AWS Elemental MediaLive can retrieve from a network source.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lexv2-models``",
+    "description": "Release feature of errorlogging for lex bot, customer can config this feature in bot version to generate log for error exception which helps debug",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2instanceconnect``",
+    "description": "Replace cryptographic functions from ``cryptography`` with ``awscrt`` for the ``ssh`` command.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "Application Signals now supports creating Service Level Objectives on service dependencies. Users can now create or update SLOs on discovered service dependencies to monitor their standard application metrics.",
+    "type": "api-change"
+  },
+  {
+    "category": "awscrt",
+    "description": "Update awscrt version requirement to 0.25.4",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.0.json 2.31.35-1/.changes/2.26.0.json
--- 2.23.6-1/.changes/2.26.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``elasticache``",
+    "description": "AWS ElastiCache SDK now supports using MemcachedUpgradeConfig parameter with ModifyCacheCluster API to enable updating Memcached cache node types. Please refer to updated AWS ElastiCache public documentation for detailed information on API usage and implementation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Add support to analysis and sheet level highlighting in QuickSight.",
+    "type": "api-change"
+  },
+  {
+    "category": "``m2``",
+    "description": "Introduce three new APIs: CreateDataSetExportTask, GetDataSetExportTask and ListDataSetExportHistory. Add support for batch restart for Blu Age applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Drop support for Python 3.8",
+    "type": "feature"
+  },
+  {
+    "category": "Python",
+    "description": "Update bundled Python interpreter to 3.13.2",
+    "type": "enhancement"
+  },
+  {
+    "category": "``medialive``",
+    "description": "AWS Elemental MediaLive / Features : Add support for CMAF Ingest CaptionLanguageMappings, TimedMetadataId3 settings, and Link InputResolution.",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-autoscaling``",
+    "description": "Application Auto Scaling now supports horizontal scaling for Elasticache Memcached self-designed clusters using target tracking scaling policies and scheduled scaling.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Adds functionality to enable/disable a new Q Business Hallucination Reduction feature. If enabled, Q Business will detect and attempt to remove Hallucinations from certain Chat requests.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.1.json 2.31.35-1/.changes/2.26.1.json
--- 2.23.6-1/.changes/2.26.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``marketplace-entitlement``",
+    "description": "Add support for Marketplace Entitlement Service dual-stack endpoints for CN and GOV regions",
+    "type": "api-change"
+  },
+  {
+    "category": "``detective``",
+    "description": "Add support for Detective DualStack endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Changed the minimum length of clusterIdentifier, computeNodeGroupIdentifier, and queueIdentifier to 3.",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Adds deletion protection support to policy stores. Deletion protection is disabled by default, can be enabled via the CreatePolicyStore or UpdatePolicyStore APIs, and is visible in GetPolicyStore.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect-contact-lens``",
+    "description": "Making sentiment optional for ListRealtimeContactAnalysisSegments Response depending on conversational analytics configuration",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Doc only update for API descriptions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Raise hard limit of authorized principals per SubscriptionTarget from 10 to 20.",
+    "type": "api-change"
+  },
+  {
+    "category": "``meteringmarketplace``",
+    "description": "Add support for Marketplace Metering Service dual-stack endpoints for CN regions",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.2.json 2.31.35-1/.changes/2.26.2.json
--- 2.23.6-1/.changes/2.26.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``taxsettings``",
+    "description": "Indonesia SOR Tax Registration Launch",
+    "type": "api-change"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "This is to add new metrics to our GetIdMappingJob API and also update uniqueId naming for batchDeleteUniqueIds API to be more accurate",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.3.json 2.31.35-1/.changes/2.26.3.json
--- 2.23.6-1/.changes/2.26.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``servicecatalog``",
+    "description": "Updated default value for the access-level-filter in SearchProvisionedProducts API to Account. For access to userLevel or roleLevel, the user must provide access-level-filter parameter.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "S3 Tables now supports setting encryption configurations on table buckets and tables. Encryption configurations can use server side encryption using AES256 or KMS customer-managed keys.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dsql``",
+    "description": "Added GetClusterEndpointService API. The new API allows retrieving endpoint service name specific to a cluster.",
+    "type": "api-change"
+  },
+  {
+    "category": "Formatter",
+    "description": "Update JSON formatter to encode raw bytes as UTF-8.",
+    "type": "bugfix"
+  },
+  {
+    "category": "``events``",
+    "description": "Adding support for KmsKeyIdentifer in CreateConnection, UpdateConnection and DescribeConnection APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``resource-groups``",
+    "description": "Resource Groups: TagSyncTasks can be created with ResourceQuery",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Added support for new AL2023 ARM64 NVIDIA AMIs to the supported AMITypes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "This feature provides capabilities to help track and meet service level agreements (SLAs) on cases programmatically. It allows configuring a new related item of type `Sla` on a case using CreateRelatedItem API and provides the ability to search for this new related item using SearchRelatedItems API.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.4.json 2.31.35-1/.changes/2.26.4.json
--- 2.23.6-1/.changes/2.26.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``bedrock``",
+    "description": "With this release, Bedrock Evaluation will now support custom metrics for evaluation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``omics``",
+    "description": "Add versioning for HealthOmics workflows",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotfleetwise``",
+    "description": "We've added stricter parameter validations to AWS IoT FleetWise signal catalog, model manifest, and decoder manifest APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add Workspace Configuration APIs for Amazon Prometheus",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release adds following capabilities to Contact Lens Rules APIs 1/ 'ASSIGN_SLA' action and  '$.Case.TemplateId' comparison value for 'OnCaseCreate' and 'OnCaseUpdate' event sources 2/ 'OnSlaBreach' Cases event source which supports '$.RelatedItem.SlaConfiguration.Name' comparison value",
+    "type": "api-change"
+  },
+  {
+    "category": "``memorydb``",
+    "description": "Added support for IPv6 and dual stack for Valkey and Redis clusters. Customers can now launch new Valkey and Redis clusters with IPv6 and dual stack networking support.",
+    "type": "api-change"
+  },
+  {
+    "category": "``accessanalyzer``",
+    "description": "Added new resource types to evaluate for public access in resource policies and added support for S3 directory bucket access points.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Adds a new AccountSetting - defaultLogDriverMode for ECS.",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling``",
+    "description": "Doc only update for EC2 Auto Scaling.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.5.json 2.31.35-1/.changes/2.26.5.json
--- 2.23.6-1/.changes/2.26.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``qconnect``",
+    "description": "This release adds support for the following capabilities: Chunking generative answer replies from Amazon Q in Connect. Integration support for the use of additional LLM models with Amazon Q in Connect.",
+    "type": "api-change"
+  },
+  {
+    "category": "``service-quotas``",
+    "description": "Add new optional SupportCaseAllowed query parameter to the RequestServiceQuotaIncrease API",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds a new Neuron driver option in InferenceAmiVersion parameter for ProductionVariant. Additionally, it adds support for fetching model lifecycle status in the ListModelPackages API. Users can now use this API to view the lifecycle stage of models that have been shared with them.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.6.json 2.31.35-1/.changes/2.26.6.json
--- 2.23.6-1/.changes/2.26.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``firehose``",
+    "description": "Documentation update regarding the number of streams you can create using the CreateDeliveryStream API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "The CheckDocumentAccess API for Amazon Q Business is a self-service debugging API that allows administrators to verify document access permissions and review Access Control List (ACL) configurations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``arc-zonal-shift``",
+    "description": "Updates to documentation and exception types for Zonal Autoshift",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Added support for Recurring Prefetch and Traffic Shaping on both Single and Recurring Prefetch. ListPrefetchSchedules now return single prefetchs by default and can be provided scheduleType of SINGLE, RECURRING, AND ALL.",
+    "type": "api-change"
+  },
+  {
+    "category": "``budgets``",
+    "description": "Releasing the new Budget FilterExpression and Metrics fields to support more granular filtering options. These new fields are intended to replace CostFilters and CostTypes, which are deprecated as of 2025/18/04.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.26.7.json 2.31.35-1/.changes/2.26.7.json
--- 2.23.6-1/.changes/2.26.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.26.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``mq``",
+    "description": "You can now delete Amazon MQ broker configurations using the DeleteConfiguration API. For more information, see Configurations in the Amazon MQ API Reference.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Fix endpoint resolution test cases",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift-serverless``",
+    "description": "Provides new and updated API members to support the Redshift Serverless reservations feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "This release adds refresh token rotation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Added support for  ClientRouteEnforcementOptions flag in CreateClientVpnEndpoint and ModifyClientVpnEndpoint requests and DescribeClientVpnEndpoints responses",
+    "type": "api-change"
+  },
+  {
+    "category": "``account``",
+    "description": "AWS Account Management now supports account name update via IAM principals.",
+    "type": "api-change"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "To expand support for matching records using digital identifiers with TransUnion",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.0.json 2.31.35-1/.changes/2.27.0.json
--- 2.23.6-1/.changes/2.27.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``imagebuilder``",
+    "description": "Add all ``imagebuilder`` modeled paginators that are currently supported by AWS CLI v2.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Add support to roll back an In_Progress ECS Service Deployment",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Add support for custom instance type for reserved capacity fleets",
+    "type": "api-change"
+  },
+  {
+    "category": "``resource-explorer-2``",
+    "description": "Documentation-only update for CreateView option correction",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add assume-role-arn option to update-kubeconfig command for cross-account access",
+    "type": "feature"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.1.json 2.31.35-1/.changes/2.27.1.json
--- 2.23.6-1/.changes/2.27.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``ecs``",
+    "description": "Documentation only release for Amazon ECS",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Add support for ARN-sourced account endpoint generation for TransactWriteItems. This will generate account endpoints for DynamoDB TransactWriteItems requests using ARN-sourced account ID when available.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Add data source support to Event APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Documentation-only update: added valid values for the version property of the Scheduler and SchedulerRequest data types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "This Amazon RDS release adds support for managed master user passwords for Oracle CDBs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Remove redundant validation check.",
+    "type": "api-change"
+  },
+  {
+    "category": "``apprunner``",
+    "description": "AWS App Runner adds Node.js 22 runtime.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Added support for modality routing and modality enablement on CreateDataAutomationProject and UpdateDataAutomationProject APIs",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.10.json 2.31.35-1/.changes/2.27.10.json
--- 2.23.6-1/.changes/2.27.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds API support for Path Component Exclusion (Filter Out ARN) for Reachability Analyzer",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "SageMaker AI Studio users can now migrate to SageMaker Unified Studio, which offers a unified web-based development experience that integrates AWS data, analytics, artificial intelligence (AI), and machine learning (ML) services, as well as additional tools and resource",
+    "type": "api-change"
+  },
+  {
+    "category": "``imagebuilder``",
+    "description": "Updated the CreateImageRecipeRequest ParentImage description to include all valid values as updated with the SSM Parameters project.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Enables Updating Anywhere Settings on a MediaLive Anywhere Channel.",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Add support to test a canary update by invoking a dry run of a canary. This behavior can be used via the new StartCanaryDryRun API along with new fields in UpdateCanary to apply dry run changes. Also includes changes in GetCanary and GetCanaryRuns to support retrieving dry run configurations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.11.json 2.31.35-1/.changes/2.27.11.json
--- 2.23.6-1/.changes/2.27.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``codepipeline``",
+    "description": "Add support for Secrets Manager and Plaintext environment variable types in Commands action",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-admin``",
+    "description": "Update PutPermissionBoundaryToPermissionSet API's managedPolicyArn pattern to allow valid ARN only. Update ApplicationName to allow white spaces.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Launching the feature to support ENA queues offering flexibility to support multiple queues per Enhanced Network Interface (ENI)",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Update bundled Python interpreter to 3.13.3",
+    "type": "enhancement"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Doc-only update for CloudFront. These changes include customer-reported issues.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Updated description of a data structure.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "This new release supports customizable RefreshInterval for all Saas ZETL integrations from 15 minutes to 6 days.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.12.json 2.31.35-1/.changes/2.27.12.json
--- 2.23.6-1/.changes/2.27.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``athena``",
+    "description": "Minor API documentation updates",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "We are pleased to announce limit increases to our grok processor logs transformation feature. Now you can define 20 Grok patterns in their configurations, with an expanded total pattern matching limit of 512 characters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Add support to retry a canary automatically after schedule run failures. Users can enable this feature by configuring the RetryConfig field when calling the CreateCanary or UpdateCanary API. Also includes changes in GetCanary and GetCanaryRuns to support retrieving retry configurations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Remove parameter EnableWorkDocs from WorkSpacesServiceModel due to end of support of Amazon WorkDocs service.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.13.json 2.31.35-1/.changes/2.27.13.json
--- 2.23.6-1/.changes/2.27.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``supplychain``",
+    "description": "Launch new AWS Supply Chain public APIs for DataIntegrationEvent, DataIntegrationFlowExecution and DatasetNamespace. Also add more capabilities to existing public APIs to support direct dataset event publish, data deduplication in DataIntegrationFlow, partition specification of custom datasets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "No API changes from previous release. This release migrated the model to Smithy keeping all features unchanged.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Updating the endpoint list for the Identity and access management (IAM) service",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "AWS Deadline Cloud service-managed fleets now support configuration scripts. Configuration scripts make it easy to install additional software, like plugins and packages, onto a worker.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "EC2 - Adding support for AvailabilityZoneId",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Add support to the AV1 rate control mode",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Updates to support S3 Express zonal endpoints for directory buckets in AWS CLI",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Documenting that EnabledLoggingStrategies is always present in responses of PlaybackConfiguration read operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.14.json 2.31.35-1/.changes/2.27.14.json
--- 2.23.6-1/.changes/2.27.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Changes for enhanced metadata in trace",
+    "type": "api-change"
+  },
+  {
+    "category": "``dsql``",
+    "description": "CreateMultiRegionClusters and DeleteMultiRegionClusters APIs marked as deprecated. Introduced new multi-Region clusters creation experience through multiRegionProperties parameter in CreateCluster API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Enable cross-Region inference for Amazon Bedrock Guardrails by using the crossRegionConfig parameter when calling the CreateGuardrail or UpdateGuardrail operation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``controltower``",
+    "description": "AWS Control Tower now reports the inheritance drift status for EnabledBaselines through the GetEnabledBaseline and ListEnabledBaselines APIs. You can now filter EnabledBaselines by their enablement and drift status using the ListEnabledBaselines API to view accounts and OUs that require attention.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This release extends functionality for Amazon EBS volumes attached to Amazon ECS tasks by adding support for the new EBS volumeInitializationRate parameter in ECS RunTask/StartTask/CreateService/UpdateService APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager``",
+    "description": "Add Tagging feature to resources in the Managed Entitlements service. License and Grant resources can now be tagged.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.15.json 2.31.35-1/.changes/2.27.15.json
--- 2.23.6-1/.changes/2.27.15.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.15.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``logs``",
+    "description": "This release adds a new API \"ListLogGroups\" and an improvement in API \"DescribeLogGroups\"",
+    "type": "api-change"
+  },
+  {
+    "category": "``firehose``",
+    "description": "This release adds catalogARN support for s3 tables multi-catalog catalogARNs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This update enables cropping for video overlays and adds a new STL to Teletext upconversion toggle to preserve styling.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "Add exceptions to WebAuthn operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.16.json 2.31.35-1/.changes/2.27.16.json
--- 2.23.6-1/.changes/2.27.16.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.16.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``workspaces``",
+    "description": "Added the new AlwaysOn running mode for WorkSpaces Pools. Customers can now choose between AlwaysOn (for instant access, with hourly usage billing regardless of connection status), or AutoStop (to optimize cost, with a brief startup delay) for their pools.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "AWS CodeBuild now supports Docker Server capability",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "This release adds support for Slurm accounting. For more information, see the Slurm accounting topic in the AWS PCS User Guide. Slurm accounting is supported for Slurm 24.11 and later. This release also adds 24.11 as a valid value for the version parameter of the Scheduler data type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Amazon Bedrock Flows introduces DoWhile loops nodes, parallel node executions, and enhancements to knowledge base nodes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``controltower``",
+    "description": "Updated the descriptions for the AWS Control Tower Baseline APIs to make them more intuitive.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Introduces Data Resync feature to describe-table-statistics and IAM database authentication for MariaDB, MySQL, and PostgreSQL.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.17.json 2.31.35-1/.changes/2.27.17.json
--- 2.23.6-1/.changes/2.27.17.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.17.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``glue``",
+    "description": "Changes include (1) Excel as S3 Source type and XML and Tableau's Hyper as S3 Sink types, (2) targeted number of partitions parameter in S3 sinks and (3) new compression types in CSV/JSON and Parquet S3 sinks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is an Amazon ECs documentation only release to support the change of the container exit \"reason\" field from 255 characters to 1024 characters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``service-quotas``",
+    "description": "This release introduces CreateSupportCase operation to SDK.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Add support for VIDEO modality to BlueprintType enum.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codepipeline``",
+    "description": "CodePipeline now supports new API ListDeployActionExecutionTargets that lists the deployment target details for deploy action executions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune``",
+    "description": "This release adds Global Cluster Switchover capability which enables you to change your global cluster's primary AWS Region, the region that serves writes, while preserving the replication between all regions in the global cluster.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation-runtime``",
+    "description": "Add AssetProcessingConfiguration for video segment to InputConfiguration",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr``",
+    "description": "Added APIs for managing Application UIs: Access Persistent (serverless) UIs via CreatePersistentAppUI DescribePersistentAppUI & GetPersistentAppUIPresignedURL, and Cluster-based UIs through GetOnClusterAppUIPresignedURL. Supports Yarn, Spark History, and TEZ interfaces.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.18.json 2.31.35-1/.changes/2.27.18.json
--- 2.23.6-1/.changes/2.27.18.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.18.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``dsql``",
+    "description": "CreateMultiRegionCluster and DeleteMultiRegionCluster APIs removed",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release includes new APIs for System Integrity Protection (SIP) configuration and automated root volume ownership delegation for EC2 Mac instances.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "This release adds support for DVB-DASH, EBU-TT-D subtitle format, and non-compacted manifests for DASH in MediaPackage v2 Origin Endpoints.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.19.json 2.31.35-1/.changes/2.27.19.json
--- 2.23.6-1/.changes/2.27.19.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.19.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``inspector2``",
+    "description": "This release adds GetClustersForImage API and filter updates as part of the mapping of container images to running containers feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "This release introduces the new DescribeDBMajorEngineVersions API for describing the properties of specific major versions of database engines.",
+    "type": "api-change"
+  },
+  {
+    "category": "``privatenetworks``",
+    "description": "The privatenetworks client has been removed following the deprecation of the service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Enhanced AWS Glue ListConnectionTypes API Model with additional metadata fields.",
+    "type": "api-change"
+  },
+  {
+    "category": "``oam``",
+    "description": "Add IncludeTags field to GetLink, GetSink and UpdateLink API",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "Remove Discovery APIs from the DataSync service",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release expands the ModifyInstanceMaintenanceOptions API to enable or disable instance migration during customer-initiated reboots for EC2 Scheduled Reboot Events.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.2.json 2.31.35-1/.changes/2.27.2.json
--- 2.23.6-1/.changes/2.27.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``ecs``",
+    "description": "Documentation only release for Amazon ECS.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "You can now reference images and documents stored in Amazon S3 when using InvokeModel and Converse APIs with Amazon Nova Lite and Nova Pro. This enables direct integration of S3-stored multimedia assets in your model requests without manual downloading or base64 encoding.",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-deployment``",
+    "description": "Doc only update for the AWS Marketplace Deployment Service that fixes several customer-reported issues.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.20.json 2.31.35-1/.changes/2.27.20.json
--- 2.23.6-1/.changes/2.27.20.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.20.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Release of Dualstack and Ipv6-only EC2 Public DNS hostnames",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-autoscaling``",
+    "description": "Doc only update that addresses a customer reported issue.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Amazon Bedrock introduces asynchronous flows (in preview), which let you run flows for longer durations and yield control so that your application can perform other tasks and you don't have to actively monitor the flow's progress.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudwatch``",
+    "description": "Adds support for setting up Contributor Insight rules on logs transformed via Logs Transformation feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``partnercentral-selling``",
+    "description": "Modified validation to allow expectedCustomerSpend array with zero elements in Partner Opportunity operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.21.json 2.31.35-1/.changes/2.27.21.json
--- 2.23.6-1/.changes/2.27.21.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.21.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``dsql``",
+    "description": "Features: support for customer managed encryption keys",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "This release supports additional ConversionSpec parameter as part of IntegrationPartition Structure in CreateIntegrationTableProperty API. This parameter is referred to apply appropriate column transformation for columns that are used for timestamp based partitioning",
+    "type": "api-change"
+  },
+  {
+    "category": "s3transfer",
+    "description": "Validate ETag of stored object during multipart downloads",
+    "type": "bugfix"
+  },
+  {
+    "category": "``auditmanager``",
+    "description": "With this release, the AssessmentControl description field has been deprecated, as of May 19, 2025. Additionally, the UpdateAssessment API can now return a ServiceQuotaExceededException when applicable service quotas are exceeded.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add QueryLoggingConfiguration APIs for Amazon Managed Prometheus",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.22.json 2.31.35-1/.changes/2.27.22.json
--- 2.23.6-1/.changes/2.27.22.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.22.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``security-ir``",
+    "description": "Update PrincipalId pattern documentation to reflect what user should receive back from the API call",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for the C7i-flex, M7i-flex, I7i, I7ie, I8g, P6-b200, Trn2, C8gd, M8gd and R8gd instances",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.23.json 2.31.35-1/.changes/2.27.23.json
--- 2.23.6-1/.changes/2.27.23.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.23.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds three features - option to store AWS Site-to-Site VPN pre-shared keys in AWS Secrets Manager, GetActiveVpnTunnelStatus API to check the in-use VPN algorithms, and SampleType option in GetVpnConnectionDeviceSampleConfiguration API to get recommended sample configs for VPN devices.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "AWS Deadline Cloud service-managed fleets now support storage profiles. With storage profiles, you can map file paths between a workstation and the worker hosts running the job.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "This release introduces Cost Comparison feature (GetCostAndUsageComparisons, GetCostComparisonDrivers) allowing you find cost variations across multiple dimensions and identify key drivers of spending changes.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.24.json 2.31.35-1/.changes/2.27.24.json
--- 2.23.6-1/.changes/2.27.24.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.24.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``events``",
+    "description": "Allow for more than 2 characters for location codes in EventBridge ARNs",
+    "type": "api-change"
+  },
+  {
+    "category": "``cost-optimization-hub``",
+    "description": "This release allows customers to modify their preferred commitment term and payment options.",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Add support to change ephemeral storage. Add a new field \"TestResult\" under CanaryRunStatus.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Enable the option to automatically delete underlying Amazon EBS snapshots when deregistering Amazon Machine Images (AMIs)",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "You can now use VPC endpoint associations to create multiple firewall endpoints for a single firewall.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.25.json 2.31.35-1/.changes/2.27.25.json
--- 2.23.6-1/.changes/2.27.25.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.25.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,62 @@
+[
+  {
+    "category": "``fsx``",
+    "description": "FSx API changes to support the public launch of new Intelligent Tiering storage class on Amazon FSx for Lustre",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "AgentArns field is made optional for Object Storage and Azure Blob location create requests. Location credentials are now managed via Secrets Manager, and may be encrypted with service managed or customer managed keys. Authentication is now optional for Azure Blob locations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivs-realtime``",
+    "description": "IVS Real-Time now offers customers the participant replication that allow customers to copy a participant from one stage to another.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dataexchange``",
+    "description": "This release adds Tag support for Event Action resource, through which customers can create event actions with Tags and retrieve event actions with Tags.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-pricing-calculator``",
+    "description": "Add AFTER_DISCOUNTS_AND_COMMITMENTS to Workload Estimate Rate Type. Set ListWorkLoadEstimateUsage maxResults range to minimum of 0 and maximum of 300.",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling``",
+    "description": "Add support for \"apple\" CpuManufacturer in ABIS",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Add maintenance status field to DescribeMlflowTrackingServer API response",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Amazon Connect Service Feature: Email Recipient Limit Increase",
+    "type": "api-change"
+  },
+  {
+    "category": "``mwaa``",
+    "description": "Amazon MWAA now lets you choose a worker replacement strategy when updating an environment. This release adds two worker replacement strategies: FORCED (default), which stops workers immediately, and GRACEFUL, which allows workers to finish current tasks before shutting down.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Adding checksum support for S3 PutBucketOwnershipControls API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Add support for customizable build instance sizes. CreateApp and UpdateApp operations now accept a new JobConfig parameter composed of BuildComputeType.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudtrail``",
+    "description": "CloudTrail Feature Release: Support for Enriched Events with Configurable Context for Event Data Store",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.26.json 2.31.35-1/.changes/2.27.26.json
--- 2.23.6-1/.changes/2.27.26.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.26.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``emr-serverless``",
+    "description": "This release adds the capability for users to specify an optional Execution IAM policy in the StartJobRun action. The resulting permissions assumed by the job run is the intersection of the permissions in the Execution Role and the specified Execution IAM Policy.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Release new parameter CapacityReservationConfig in ProductionVariant",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.27.json 2.31.35-1/.changes/2.27.27.json
--- 2.23.6-1/.changes/2.27.27.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.27.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``pcs``",
+    "description": "Introduces SUSPENDING and SUSPENDED states for clusters, compute node groups, and queues.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "This release adds the Agent Lifecycle Paused State feature to Amazon Bedrock agents. By using an agent's alias, you can temporarily suspend agent operations during maintenance, updates, or other situations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``compute-optimizer``",
+    "description": "This release enables AWS Compute Optimizer to analyze Amazon Aurora database clusters and generate Aurora I/O-Optimized recommendations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Support for Java runtime handler pattern.",
+    "type": "api-change"
+  },
+  {
+    "category": "``athena``",
+    "description": "Add support for the managed query result in the workgroup APIs. The managed query result configuration enables users to store query results to Athena owned storage.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add support for filtering ListInsights API calls on MISCONFIGURATION insight category",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Updates Amazon ECS documentation to include note for upcoming default log driver mode change.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cost-optimization-hub``",
+    "description": "Support recommendations for Aurora instance and Aurora cluster storage.",
+    "type": "api-change"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "Add support for generating match IDs in near real-time.",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "You can now subscribe to Amazon SNS notifications and Amazon EventBridge events for backup indexing. You can now receive notifications when a backup index is created, deleted, or fails to create, enhancing your ability to monitor and track your backup operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.28.json 2.31.35-1/.changes/2.27.28.json
--- 2.23.6-1/.changes/2.27.28.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.28.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``apigatewayv2``",
+    "description": "Adds support to create routing rules and set the routing mode for a custom domain name.",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigateway``",
+    "description": "Adds support to set the routing mode for a custom domain name.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-serverless``",
+    "description": "AWS EMR Serverless: Adds a new option in the CancelJobRun API in EMR 7.9.0+, to cancel a job with grace period. This feature is enabled by default with a 120-second grace period for streaming jobs and is not enabled by default for batch jobs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.29.json 2.31.35-1/.changes/2.27.29.json
--- 2.23.6-1/.changes/2.27.29.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.29.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``mediaconnect``",
+    "description": "This release updates the DescribeFlow API to show peer IP addresses. You can now identify the peer IP addresses of devices connected to your sources and outputs. This helps you to verify and troubleshoot your flow's active connections.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Update documentation for cacheConfig in CreateApp API",
+    "type": "api-change"
+  },
+  {
+    "category": "dependency",
+    "description": "Remove cryptography as a dependency",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Added support for p6-b200 instance type in SageMaker Training Jobs and Training Plans.",
+    "type": "api-change"
+  },
+  {
+    "category": "``evs``",
+    "description": "Amazon Elastic VMware Service (Amazon EVS) allows you to run VMware Cloud Foundation (VCF) directly within your Amazon VPC including simplified self-managed migration experience with guided workflow in AWS console or via AWS CLI, get full access to their VCF deployment and VCF license portability.",
+    "type": "api-change"
+  },
+  {
+    "category": "``invoicing``",
+    "description": "Added new Invoicing ListInvoiceSummaries API Operation",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "You can now monitor flow and alert log metrics from the Network Firewall console.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release includes support for embedding and signing C2PA content credentials in MP4 outputs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "AWS Healthscribe now supports new templates for the clinical note summary: BIRP, SIRP, DAP, BEHAVIORAL_SOAP, and PHYSICAL_SOAP",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.3.json 2.31.35-1/.changes/2.27.3.json
--- 2.23.6-1/.changes/2.27.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``imagebuilder``",
+    "description": "Add integration with SSM Parameter Store to Image Builder.",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm``",
+    "description": "Add support for file-based HTTP domain control validation, available through Amazon CloudFront.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Add distribution tenant, connection group, and multi-tenant distribution APIs to the CloudFront SDK.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "This release adds native h2 support for the bedrock runtime API, the support is only limited to SDKs that support h2 requests natively.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Doc only update for GSI descriptions.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.30.json 2.31.35-1/.changes/2.27.30.json
--- 2.23.6-1/.changes/2.27.30.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.30.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``wafv2``",
+    "description": "AWS WAF adds support for ASN-based traffic filtering and support for ASN-based rate limiting.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "AWS KMS announces the support for on-demand rotation of symmetric-encryption KMS keys with imported key material (EXTERNAL origin).",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "Add new warning type 'EXCLUDED_PROPERTIES'",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-pricing-calculator``",
+    "description": "Updating the minimum for List APIs to be 1 (instead of 0)",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.31.json 2.31.35-1/.changes/2.27.31.json
--- 2.23.6-1/.changes/2.27.31.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.31.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``kms``",
+    "description": "Remove unpopulated KeyMaterialId from Encrypt Response",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Include Global Cluster Identifier in DBCluster if the DBCluster is a Global Cluster Member.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "S3 Tables now supports getting details about a table via its table ARN.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rekognition``",
+    "description": "Adds support for defining an ordered preference list of different Rekognition Face Liveness challenge types when calling CreateFaceLivenessSession.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "This release introduces the `PromptCreationConfigurations` input parameter, which includes fields to control prompt population for `InvokeAgent` or `InvokeInlineAgent` requests.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53``",
+    "description": "Amazon Route 53 now supports the Asia Pacific (Taipei) Region (ap-east-2) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.32.json 2.31.35-1/.changes/2.27.32.json
--- 2.23.6-1/.changes/2.27.32.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.32.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``cloudformation``",
+    "description": "High-level Cloudformation commands such as ``deploy`` and ``package`` will now fallback to SHA256 for checksumming if MD5 isn't present on the host",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Release to support Elastic VMware Service (Amazon EVS) Subnet and Amazon EVS Network Interface Types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``customer-profiles``",
+    "description": "This release introduces capability of Profile Explorer, using correct ingestion timestamp & using historical data for computing calculated attributes, and new standard objects for T&H as part of Amazon Connect Customer Profiles service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``efs``",
+    "description": "Added support for Internet Protocol Version 6 (IPv6) on EFS Service APIs and mount targets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Add ConflictException to UpdateEnvironment API",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "Support dual-stack endpoints for ce api",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-catalog``",
+    "description": "The ListEntities API now supports the EntityID, LastModifiedDate, ProductTitle, and Visibility filters for machine learning products. You can also sort using all of those filters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Deprecate `atRestEncryptionEnabled` and `transitEncryptionEnabled` attributes in `CreateApiCache` action. Encryption is always enabled for new caches.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.33.json 2.31.35-1/.changes/2.27.33.json
--- 2.23.6-1/.changes/2.27.33.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.33.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``gameliftstreams``",
+    "description": "Documentation updates for Amazon GameLift Streams to address formatting errors, correct resource ID examples, and update links to other guides",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.34.json 2.31.35-1/.changes/2.27.34.json
--- 2.23.6-1/.changes/2.27.34.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.34.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``controlcatalog``",
+    "description": "Introduced ListControlMappings API that retrieves control mappings. Added control aliases and governed resources fields in GetControl and ListControls APIs. New filtering capability in ListControls API, with implementation identifiers and implementation types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "WAF now provides two DDoS protection options: resource-level monitoring for Application Load Balancers and the AWSManagedRulesAntiDDoSRuleSet managed rule group for CloudFront distributions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lexv2-models``",
+    "description": "Add support for the Assisted NLU feature to improve bot performance",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Release for EKS Pod Identity Cross Account feature and disableSessionTags flag.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Updates Amazon RDS documentation for Amazon RDS for Db2 cross-Region replicas in standby mode.",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkmanager``",
+    "description": "Add support for public DNS hostname resolution to private IP addresses across Cloud WAN-managed VPCs. Add support for security group referencing across Cloud WAN-managed VPCs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.35.json 2.31.35-1/.changes/2.27.35.json
--- 2.23.6-1/.changes/2.27.35.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.35.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``connectcampaignsv2``",
+    "description": "Added PutInstanceCommunicationLimits and GetInstanceCommunicationLimits APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewayv2``",
+    "description": "Documentation updates for Amazon API Gateway",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigateway``",
+    "description": "Documentation updates for Amazon API Gateway",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-serverless``",
+    "description": "This release adds support for retrieval of the optional executionIamPolicy field in the GetJobRun API response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This Amazon ECS  release supports updating the capacityProviderStrategy parameter in update-service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotfleetwise``",
+    "description": "Add new status READY_FOR_CHECKIN used for vehicle synchronisation",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Fixed regex patterns for ARN fields.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "AWS KMS announces the support of ML-DSA key pairs that creates post-quantum safe digital signatures.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.36.json 2.31.35-1/.changes/2.27.36.json
--- 2.23.6-1/.changes/2.27.36.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.36.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``bedrock``",
+    "description": "This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a Amazon SageMaker trained Amazon Nova model into Amazon Bedrock for inference.",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "You can now create firewalls using a Transit Gateway instead of a VPC, resulting in a TGW attachment.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release 1) adds a new S3DataType Converse for SageMaker training 2)adds C8g R7gd M8g C6in P6 P6e instance type for SageMaker endpoint 3) adds m7i, r7i, c7i instance type for SageMaker Training and Processing.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "The `DescribeImageScanning` API now includes `lastInUseAt` and `InUseCount` fields that can be used to prioritize vulnerability remediation for images that are actively being used.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.37.json 2.31.35-1/.changes/2.27.37.json
--- 2.23.6-1/.changes/2.27.37.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.37.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,72 @@
+[
+  {
+    "category": "``network-firewall``",
+    "description": "Release of Active Threat Defense in Network Firewall",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "Adds operations, structures, and exceptions required for public preview release of Security Hub V2.",
+    "type": "api-change"
+  },
+  {
+    "category": "``organizations``",
+    "description": "Add support for policy operations on the SECURITYHUB_POLICY policy type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mpa``",
+    "description": "This release enables customers to create Multi-party approval teams and approval requests to protect supported operations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "AWS WAF can now suggest protection packs for you based on the application information you provide when you create a webACL.",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector2``",
+    "description": "Add Code Repository Scanning as part of AWS InspectorV2",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "AWS Backup is adding support for integration of its logically air-gapped vaults with the AWS Organizations Multi-party approval capability.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a trained model into Amazon Bedrock for inference.",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm``",
+    "description": "Adds support for Exportable Public Certificates",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Update bundled Python interpreter to 3.13.4",
+    "type": "enhancement"
+  },
+  {
+    "category": "``accessanalyzer``",
+    "description": "We are launching a new analyzer type, internal access analyzer. The new analyzer will generate internal access findings, which help customers understand who within their AWS organization or AWS Account has access to their critical AWS resources.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Add \"Virtual\" field to Data Provider as well as \"S3Path\" and \"S3AccessRoleArn\" fields to DataProvider settings",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Adding support for extended threat detection for EKS Audit Logs and EKS Runtime Monitoring.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sts``",
+    "description": "The AWS Security Token Service APIs AssumeRoleWithSAML and AssumeRoleWithWebIdentity can now be invoked without pre-configured AWS credentials in the SDK configuration.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.38.json 2.31.35-1/.changes/2.27.38.json
--- 2.23.6-1/.changes/2.27.38.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.38.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``logs``",
+    "description": "Added CloudWatch Logs Transformer support for converting CloudTrail, VPC Flow, EKS Audit, AWS WAF and Route53 Resolver logs to OCSF v1.1 format.",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling``",
+    "description": "Add IncludeInstances parameter to DescribeAutoScalingGroups API",
+    "type": "api-change"
+  },
+  {
+    "category": "``imagebuilder``",
+    "description": "Added paginators for ``imagebuilder``.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Added support for renaming objects within the same bucket using the new RenameObject API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Add support for p6-b200 instance type for SageMaker Hyperpod",
+    "type": "api-change"
+  },
+  {
+    "category": "``aiops``",
+    "description": "This is the initial SDK release for Amazon AI Operations (AIOps). AIOps is a generative AI-powered assistant that helps you respond to incidents in your system by scanning your system's telemetry and quickly surface suggestions that might be related to your issue.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.39.json 2.31.35-1/.changes/2.27.39.json
--- 2.23.6-1/.changes/2.27.39.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.39.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``payment-cryptography-data``",
+    "description": "Additional support for managing HMAC keys that adheres to changes documented in X9.143-2021 and provides better interoperability for key import/export",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a trained model into Amazon Bedrock for inference.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Support Schema Registry feature for Kafka Event Source Mapping. Customers can now configure a Schema Registry to enable schema validation and filtering for Avro, Protobuf, and JSON-formatted events in Lambda for Kafka Event Source.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-serverless``",
+    "description": "This release adds the capability to enable IAM IdentityCenter Trusted Identity Propagation for users running Interactive Sessions on EMR Serverless Applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "Additional support for managing HMAC keys that adheres to changes documented in X9.143-2021 and provides better interoperability for key import/export",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release introduces alternative support for utilizing CFN templates from S3 for SageMaker Projects.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.4.json 2.31.35-1/.changes/2.27.4.json
--- 2.23.6-1/.changes/2.27.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``qbusiness``",
+    "description": "Add support for anonymous user access for Q Business applications",
+    "type": "api-change"
+  },
+  {
+    "category": "awscrt",
+    "description": "Update awscrt version requirement to 0.26.1",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ssm``",
+    "description": "This release adds support for just-In-time node access in AWS Systems Manager. Just-in-time node access enables customers to move towards zero standing privileges by requiring operators to request access and obtain approval before remotely connecting to nodes managed by the SSM Agent.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "Introduces CustomEntity as part of the UserUnion data type. This field is used to indicate the entity who is performing the API action.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis``",
+    "description": "Amazon KDS now supports tagging and attribute-based access control (ABAC) for enhanced fan-out consumers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Introduced support for P5en instance types on SageMaker Studio for JupyterLab and CodeEditor applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-metrics``",
+    "description": "SageMaker Metrics Service now supports FIPS endpoint in all US and Canada Commercial regions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint-sms-voice-v2``",
+    "description": "AWS End User Messaging has added MONITOR and FILTER functionality to SMS Protect.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Replace cryptographic functions from ``cryptography`` with ``awscrt`` for the ``sign`` command. Fixes `#9258 <https://github.com/aws/aws-cli/issues/9258>`__.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ssm-guiconnect``",
+    "description": "This release adds API support for the connection recording GUI Connect feature of AWS Systems Manager",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.40.json 2.31.35-1/.changes/2.27.40.json
--- 2.23.6-1/.changes/2.27.40.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.40.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``geo-places``",
+    "description": "Geocode, ReverseGeocode, and GetPlace APIs added Intersections and SecondaryAddresses. To use, add to the AdditionalFeatures list in your request. This provides info about nearby intersections and secondary addresses that are associated with a main address. Also added MainAddress and ParsedQuery.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Add ECS support for Windows Server 2025",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Add support for tiers in Content Filters and Denied Topics for Amazon Bedrock Guardrails.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds a new SPECIFIED_OPTIMAL option for handling DDS when using DVB-Sub with high resolution video.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue Data Quality now provides aggregated metrics in evaluation results when publishAggregatedMetrics with row-level results are enabled. These metrics include summary statistics showing total counts of processed, passed, and failed rows and rules in a single view.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.41.json 2.31.35-1/.changes/2.27.41.json
--- 2.23.6-1/.changes/2.27.41.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.41.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``s3tables``",
+    "description": "S3 Tables now supports sort and z-order compaction strategies for Iceberg tables in addition to binpack.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-instances``",
+    "description": "Added support for Amazon WorkSpaces Instances API",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue now supports sort and z-order strategy for managed automated compaction for Iceberg tables in addition to binpack.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.42.json 2.31.35-1/.changes/2.27.42.json
--- 2.23.6-1/.changes/2.27.42.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.42.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``gamelift``",
+    "description": "Add support for UDP ping beacons to ListLocations API, including new PingBeacon and UDPEndpoint data types within its Locations return value. Use UDP ping beacon endpoints to help measure real-time network latency for multiplayer games.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "We are making ListFoundationModelAgreementOffers, DeleteFoundationModelAgreement, CreateFoundationModelAgreement, GetFoundationModelAvailability, PutUseCaseForModelAccess and GetUseCaseForModelAccess APIs public, previously they were console.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release allows you to create and register AMIs while maintaining their underlying EBS snapshots within Local Zones.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Add userdataType to LaunchTemplateSpecification and LaunchTemplateSpecificationOverride.",
+    "type": "api-change"
+  },
+  {
+    "category": "``aiops``",
+    "description": "Adds support for cross account investigations for CloudWatch investigations AI Operations (AIOps).",
+    "type": "api-change"
+  },
+  {
+    "category": "``elbv2``",
+    "description": "Add Paginator for DescribeAccountLimits, and fix Paginators for DescribeTrustStoreAssociations, DescribeTrustStoreRevocations, and DescribeTrustStores",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager``",
+    "description": "AWS License Manager now supports license type conversions for AWS Marketplace products. Customers can provide Marketplace codes in the source license context or destination license context in the CreateLicenseConversionTaskForResource requests.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "This Feature Adds Support for the \"et-EE\" Locale for Batch Operations",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Adding support for RDS on Dedicated Local Zones, including local backup target, snapshot availability zone and snapshot target",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53resolver``",
+    "description": "Add support for iterative DNS queries through the new INBOUND_DELEGATION endpoint. Add delegation support through the Outbound Endpoints with DELEGATE rules.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.43.json 2.31.35-1/.changes/2.27.43.json
--- 2.23.6-1/.changes/2.27.43.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.43.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``fsx``",
+    "description": "Add support for the ability to create Amazon S3 Access Points for Amazon FSx for OpenZFS file systems.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Add support for the ability to use Amazon S3 Access Points with Amazon FSx for OpenZFS file systems.",
+    "type": "api-change"
+  },
+  {
+    "category": "``textract``",
+    "description": "Add RotationAngle field to Geometry of WORD blocks for Textract AnalyzeDocument API",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Updates for change to Amazon ECS default log driver mode from blocking to non-blocking",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Adds support for additional server-side encryption mode and storage class values for accessing Amazon FSx data from Amazon S3 using S3 Access Points",
+    "type": "api-change"
+  },
+  {
+    "category": "``storagegateway``",
+    "description": "This release adds IPv6 support to the Storage Gateway APIs. APIs that previously only accept or return IPv4 address will now accept or return both IPv4 and IPv6 addresses.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Remove Tags field from Get API responses",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.44.json 2.31.35-1/.changes/2.27.44.json
--- 2.23.6-1/.changes/2.27.44.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.44.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``deadline``",
+    "description": "Added fields to track cumulative task retry attempts for steps and jobs",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-managed-integrations``",
+    "description": "Adding managed integrations APIs for IoT Device Management to onboard and control devices across different manufacturers, connectivity protocols and third party vendor clouds. APIs include managed thing operations, provisioning profile management, and cloud connector operations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspaces``",
+    "description": "This release provides change data capture (CDC) streams support through updates to the Amazon Keyspaces API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Updated modifyStreamingProperties to support PrivateLink VPC endpoints for directories",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "This release updates AWS CLI examples for KMS APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for OdbNetworkArn as a target in VPC Route Tables",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspacesstreams``",
+    "description": "This release adds change data capture (CDC) streams support through the new Amazon Keyspaces Streams API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Added support for App level authentication for QBusiness DataAccessor using AWS IAM Identity center Trusted Token issuer",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.45.json 2.31.35-1/.changes/2.27.45.json
--- 2.23.6-1/.changes/2.27.45.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.45.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``sesv2``",
+    "description": "Added support for new SES regions",
+    "type": "api-change"
+  },
+  {
+    "category": "``qconnect``",
+    "description": "Adding UnauthorizedException to public SDK",
+    "type": "api-change"
+  },
+  {
+    "category": "``config``",
+    "description": "Added important considerations to the PutConformancePack and PutOrganizationConformancPack APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "StartDBCluster and StopDBCluster can now throw InvalidDBShardGroupStateFault.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Update JSON target for Kubernetes workload resource type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release adds the following value to an InitiateAs enum: COMPLETED",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue now supports schema, partition and sort management of Apache Iceberg tables using Glue SDK",
+    "type": "api-change"
+  },
+  {
+    "category": "User Agent",
+    "description": "Append session id to user agent string",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.46.json 2.31.35-1/.changes/2.27.46.json
--- 2.23.6-1/.changes/2.27.46.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.46.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,102 @@
+[
+  {
+    "category": "``transfer``",
+    "description": "Added support for dual-stack (IPv4 and IPv6) endpoints for SFTP public endpoints and VPC-internal endpoints (SFTP, FTPS, FTP, and AS2), enabling customers to configure new servers with IPv4 or dual-stack mode, convert existing servers to dual-stack, and use IPv6 with service APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Add support for API Keys, Re-Ranker, implicit filter for RAG / KB evaluation for Bedrock APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "Introduces AccessType, a new filter value for the DescribeSessions API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``events``",
+    "description": "Added support for EventBridge Dualstack endpoints in AWS GovCloud (US) regions (us-gov-east-1 and us-gov-west-1). The dualstack endpoints are identical for both FIPS and non-FIPS configurations, following the format: events.{region}.api.aws",
+    "type": "api-change"
+  },
+  {
+    "category": "``medical-imaging``",
+    "description": "Added new fields to support the concept of primary image sets within the storage hierarchy.",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "Increase minimum length of queryId parameter to 1 character.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release introduces ChatMetrics to the model, providing comprehensive analytics insights for Amazon Connect chat conversations. Users can access these detailed metrics through the AWS Connect API by using the DescribeContact operation with their specific instance and contact IDs",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Updated IAM ServiceSpecificCredential support to include expiration, API Key output format instead of username and password for services that will support API keys, and the ability to list credentials for all users in the account for a given service configuration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Add API Key and document citations support for Bedrock Runtime APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``arc-zonal-shift``",
+    "description": "Added support for on-demand practice runs and balanced capacity checks in ARC autoshift practice.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Fixed the validation pattern for an instance profile Amazon Resource Name (ARN) in AWS PCS.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Introduced custom permission capabilities for reporting content. Added menu option in exploration to preserve configuration data when textbox menu option is used. Added support for Athena trusted identity propagation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkflowmonitor``",
+    "description": "Add ConflictExceptions to UpdateScope and DeleteScope operations for scopes being mutated.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dataexchange``",
+    "description": "This release updates resource Id with alphanumeric constraint, including Asset id, Revision id, Data Set id, Job id, and Event Action id.",
+    "type": "api-change"
+  },
+  {
+    "category": "``b2bi``",
+    "description": "Updated APIs to support inbound EDI split capabilities and additional Partnership-level configurations of generated EDI files' contents and format.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "releasing source processing properties to support source properties for ODB integrations",
+    "type": "api-change"
+  },
+  {
+    "category": "``config``",
+    "description": "Updated ResourceType enum with new resource types onboarded by AWS Config as of June 2025",
+    "type": "api-change"
+  },
+  {
+    "category": "``outposts``",
+    "description": "Make ContactName and ContactPhoneNumber required fields when creating and updating Outpost Site Addresses.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "This change adds support for witnesses in global tables. It also adds a new table status, REPLICATION_NOT_AUTHORIZED. This status will indicate scenarios where global replicas table can't be utilized for data plane operations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "Added support for UNKNOWN drift status.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.47.json 2.31.35-1/.changes/2.27.47.json
--- 2.23.6-1/.changes/2.27.47.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.47.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``odb``",
+    "description": "This release adds API operations for Oracle Database@AWS. You can use the APIs to create Exadata infrastructure, ODB networks, and Exadata and Autonomous VM clusters inside AWS data centers. The infrastructure is managed by OCI. You can integrate these resources with AWS services.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Updated field validation requirements for InstanceGroups.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanroomsml``",
+    "description": "This release introduces support for incremental training and distributed training for custom models in AWS Clean Rooms ML.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Amazon RDS Custom for Oracle now supports multi-AZ database instances.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add Context to GetInstanceTypesFromInstanceRequirements API",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Add support for the new optional domain-unit-id parameter in the UpdateProject API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "New ChatResponseConfiguration to Customize Q Business chat responses for specific use cases and communication needs. Updated Boosting capability allowing admins to provide preference on date attributes for recency and/or provide a preferred data source.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.48.json 2.31.35-1/.changes/2.27.48.json
--- 2.23.6-1/.changes/2.27.48.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.48.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``s3control``",
+    "description": "Added TagResource, UntagResource, and ListTagsForResource support for directory bucket",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "AWS Site-to-Site VPN now supports IPv6 addresses on outer tunnel IPs, making it easier for customers to build or transition to IPv6-only networks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "This release adds DeleteCase and DeleteRelatedItem APIs, which enable deleting cases and comments, undoing contact association, and removing service level agreements (SLAs) from cases. Contact center admins can use these APIs to delete cases when requested by customers and correct agent errors.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Added support for directory bucket creation with tags and bucket ARN retrieval in CreateBucket, ListDirectoryBuckets, and HeadBucket operations",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.49.json 2.31.35-1/.changes/2.27.49.json
--- 2.23.6-1/.changes/2.27.49.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.49.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``customer-profiles``",
+    "description": "This release introduces capability of create Segments via importing a CSV file directly. This consumes the CSV file and creates/updates corresponding profiles for the particular domain.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53``",
+    "description": "Amazon Route 53 now supports the iso-e regions for private DNS Amazon VPCs and cloudwatch healthchecks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "Added fields for output manifest reporting and task chunking parameters",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Changes include new StartSession API for SageMaker Studio spaces and CreateHubContentPresignedUrls API for SageMaker JumpStart.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "This release adds support for Microsoft Smooth Streaming (MSS) and allows users to exclude DRM segment Metadata in MediaPackage v2 Origin Endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds GroupOwnerId as a response member to the DescribeSecurityGroupVpcAssociations API and also adds waiters for SecurityGroupVpcAssociations (SecurityGroupVpcAssociationAssociated and SecurityGroupVpcAssociationDisassociated).",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.5.json 2.31.35-1/.changes/2.27.5.json
--- 2.23.6-1/.changes/2.27.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,57 @@
+[
+  {
+    "category": "``deadline``",
+    "description": "Adds support for tag management on workers and tag inheritance from fleets to their associated workers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Features:    Add inline code node to prompt flow",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Support for Custom Orchestration within InlineAgents",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "This release adds support for ProtectedQuery results to be delivered to more than one collaboration member via the new distribute output configuration in StartProtectedQuery.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "Adds dualstack support for Amazon Elastic Container Registry (Amazon ECR).",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Launch of cost distribution feature for IPAM owners to distribute costs to internal teams.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "Introducing new RuleSet rule PublishToSns action, which allows customers to publish email notifications to an Amazon SNS topic. New PublishToSns action enables customers to easily integrate their email workflows via Amazon SNS, allowing them to notify other systems about important email events.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "You can now specify a cross region inference profile as a teacher model for the CreateModelCustomizationJob API. Additionally, the GetModelCustomizationJob API has been enhanced to return the sub-task statuses of a customization job within the StatusDetails response field.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr-public``",
+    "description": "Adds dualstack support for Amazon Elastic Container Registry Public (Amazon ECR Public).",
+    "type": "api-change"
+  },
+  {
+    "category": "socialmessaging",
+    "description": "Renames the incorrectly named delete-whatsapp-media-message command to the correct name of delete-whatsapp-message-media",
+    "type": "bugfix"
+  },
+  {
+    "category": "``logs``",
+    "description": "CloudWatch Logs supports \"DELIVERY\" log class. This log class is used only for delivering AWS Lambda logs to Amazon S3 or Amazon Data Firehose.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.50.json 2.31.35-1/.changes/2.27.50.json
--- 2.23.6-1/.changes/2.27.50.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.50.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``freetier``",
+    "description": "This release introduces four new APIs: GetAccountPlanState and UpgradeAccountPlan for AWS account plan management; ListAccountActivities and GetAccountActivity that provide activity tracking capabilities.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Adds support to Capacity Blocks for ML for purchasing EC2 P6e-GB200 UltraServers. Customers can now purchase u-p6e-gb200x72 and u-p6e-gb200x36 UltraServers. Adds new DescribeCapacityBlocks andDescribeCapacityBlockStatus APIs. Adds support for CapacityBlockId to DescribeInstanceTopology.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opsworkscm``",
+    "description": "Removing content that refers to an S3 bucket that is no longer in use.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.51.json 2.31.35-1/.changes/2.27.51.json
--- 2.23.6-1/.changes/2.27.51.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.51.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,77 @@
+[
+  {
+    "category": "``s3``",
+    "description": "Amazon S3 Metadata live inventory tables provide a queryable inventory of all the objects in your general purpose bucket so that you can determine the latest state of your data. To help minimize your storage costs, use journal table record expiration to set a retention period for your records.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Amazon ECS supports native blue/green deployments, allowing you to validate new service revisions before directing production traffic to them.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Introduced custom instructions for topics.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pricing``",
+    "description": "This release adds support for new filter types in GetProducts API, including EQUALS, CONTAINS, ANY_OF, and NONE_OF.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearch``",
+    "description": "AWS Opensearch adds support for enabling s3 vector engine options. After enabling this option, customers will be able to create indices with s3 vector engine.",
+    "type": "api-change"
+  },
+  {
+    "category": "``repostspace``",
+    "description": "This release introduces Channels functionality with CreateChannel, GetChannel, ListChannels, and UpdateChannel operations. Channels provide dedicated collaboration spaces where teams can organize discussions and knowledge by projects, business units, or areas of responsibility.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3vectors``",
+    "description": "Amazon S3 Vectors provides cost-effective, elastic, and durable vector storage for queries based on semantic meaning and similarity.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodbstreams``",
+    "description": "Added support for optional shard filter parameter in DescribeStream api that allows customers to fetch child shards of a read_only parent shard.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "Adds table bucket type to ListTableBucket and GetTableBucket API operations",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Removing restriction of environment profile identifier as required field, S3 feature release",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Add support for S3 Vectors as a vector store.",
+    "type": "api-change"
+  },
+  {
+    "category": "``events``",
+    "description": "Add customer-facing logging for the EventBridge Event Bus, enabling customers to better observe their events and extract insights about their EventBridge usage.",
+    "type": "api-change"
+  },
+  {
+    "category": "Dockerfile",
+    "description": "Update base image for AWS CLI v2 Docker image to Amazon Linux 2023",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for volume initialization status, which enables you to monitor when the initialization process for an EBS volume is completed. This release also adds IPv6 support to EC2 Instance Connect Endpoints, allowing you to connect to your EC2 Instance via a private IPv6 address.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds support for a new Restricted instance group type to enable a specialized environment for running Nova customization jobs on SageMaker HyperPod clusters. This release also adds support for SageMaker pipeline versioning.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.52.json 2.31.35-1/.changes/2.27.52.json
--- 2.23.6-1/.changes/2.27.52.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.52.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``ecs``",
+    "description": "This release removes hookDetails for the Amazon ECS native blue/green deployments.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.53.json 2.31.35-1/.changes/2.27.53.json
--- 2.23.6-1/.changes/2.27.53.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.53.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,67 @@
+[
+  {
+    "category": "``glue``",
+    "description": "AWS Glue now supports schema, partition and sort management of Apache Iceberg tables using Glue SDK",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This release adds support for on-demand custom model inference through CustomModelDeployment APIs for Amazon Bedrock.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "This release adds support for CDN Authentication using Static Headers in MediaPackage v2.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotwireless``",
+    "description": "FuotaTaskId is not a valid IdentifierType for EventConfiguration and is being removed from possible IdentifierType values.",
+    "type": "api-change"
+  },
+  {
+    "category": "``stepfunctions``",
+    "description": "Doc-only update to introduction, and edits to clarify input parameter and the set of control characters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Initial release of Amazon Bedrock AgentCore SDK including Runtime, Built-In Tools, Memory, Gateway and Identity.",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkflowmonitor``",
+    "description": "Introducing 2 new scope status types - DEACTIVATING and DEACTIVATED.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Add expectedBucketOwner parameter to ThreatIntel and IPSet APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "document update to support on demand custom model.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "AWS DataSync now supports IPv6 address inputs and outputs in create, update, and describe operations for NFS, SMB, and Object Storage locations",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography-data``",
+    "description": "Expand length of message data field for Mac generation and validation to 8192 characters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Initial release of Amazon Bedrock AgentCore SDK including Runtime, Built-In Tools, Memory, Gateway and Identity.",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "CloudWatch Logs updates: Added X-Ray tracing for Amazon Bedrock Agent resources. Logs introduced Log Group level resource policies (managed through Put/Delete/Describe Resource Policy APIs). For more information, see CloudWatch Logs API documentation.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.54.json 2.31.35-1/.changes/2.27.54.json
--- 2.23.6-1/.changes/2.27.54.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.54.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``synthetics``",
+    "description": "This feature allows AWS Synthetics customers to provide code dependencies using lambda layer while creating a canary",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release expands the range of supported audio outputs to include xHE, 192khz FLAC and the deprecation of dual mono for AC3.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Doc only update for CloudFront that fixes some customer-reported issues",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspacesstreams``",
+    "description": "Doc only update for the Amazon Keyspaces Streams API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "Allow underscores in the local part of the input of the \"Email recipients rewrite\" action in rule sets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``stepfunctions``",
+    "description": "Align input with style guidelines.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "AWS Free Tier Version2 Support",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanroomsml``",
+    "description": "This release introduces Parquet result format support for ML Input Channel models in AWS Clean Rooms ML.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.55.json 2.31.35-1/.changes/2.27.55.json
--- 2.23.6-1/.changes/2.27.55.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.55.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds support for TAMS server integration with MediaConvert inputs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "CloudWatchLogs launches GetLogObject API with streaming support for efficient log data retrieval. Logs added support for new AccountPolicy type METRIC_EXTRACTION_POLICY. For more information, see CloudWatch Logs API documentation",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "July 2025 doc-only updates for Systems Manager.",
+    "type": "api-change"
+  },
+  {
+    "category": "``auditmanager``",
+    "description": "Updated error handling for RegisterOrganizationAdminAccount API to properly translate TooManyExceptions to HTTP 429 status code. This enhancement improves error handling consistency and provides clearer feedback when request limits are exceeded.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "Added IP Visibility support for managed dedicated pools. Enhanced GetDedicatedIp and GetDedicatedIps APIs to return managed IP addresses.",
+    "type": "api-change"
+  },
+  {
+    "category": "``outposts``",
+    "description": "Add AWS Outposts API to surface customer billing information",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.56.json 2.31.35-1/.changes/2.27.56.json
--- 2.23.6-1/.changes/2.27.56.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.56.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for C8gn, F2 and P6e-GB200 Instance types",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Add dualstack endpoint support",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-influxdb``",
+    "description": "Timestream for InfluxDB adds support for db.influx.24xlarge instance type. This enhancement enables higher compute capacity for demanding workloads through CreateDbInstance, CreateDbCluster, UpdateDbInstance, and UpdateDbCluster APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "Add support for VPC resource endpoints in Service Managed Fleets",
+    "type": "api-change"
+  },
+  {
+    "category": "cloudfront",
+    "description": "This release adds automatic pagination to the list-origin-access-controls command.  To disable this behavior, please use the --no-paginate flag.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds 1/ Support for S3FileSystem in CustomFileSystems 2/ The ability for a customer to select their preferred IpAddressType for use with private Workforces 3/ Support for p4de instance type in SageMaker Training Plans",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.57.json 2.31.35-1/.changes/2.27.57.json
--- 2.23.6-1/.changes/2.27.57.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.57.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "EMR",
+    "description": "Updated create-cluster and describe-cluster commands to support --extended-support and --no-extended-support arguments",
+    "type": "enhancement"
+  },
+  {
+    "category": "``neptunedata``",
+    "description": "This release updates the supported regions for Neptune API to include current AWS regions.",
+    "type": "api-change"
+  },
+  {
+    "category": "Dockerfile",
+    "description": "Include ``findutils`` and ``jq`` in Docker image",
+    "type": "enhancement"
+  },
+  {
+    "category": "``lambda``",
+    "description": "This release migrated the model to Smithy keeping all features unchanged.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "Add support for Image Tag Mutability Exception feature, allowing repositories to define wildcard-based patterns that override the default image tag mutability settings.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr``",
+    "description": "This release adds new parameter 'ExtendedSupport' in AWS EMR RunJobFlow, ModifyCluster and DescribeCluster API.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.58.json 2.31.35-1/.changes/2.27.58.json
--- 2.23.6-1/.changes/2.27.58.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.58.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Added the lastUserId parameter to the ListDevices and GetDevice API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue now supports dynamic session policies for job executions. This feature allows you to specify custom, fine-grained permissions for each job run without creating multiple IAM roles.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Added support for skip-os-shutdown option for the EC2 instance stop and terminate operations. This feature enables customers to bypass the graceful OS shutdown, supporting faster state transitions when instance data preservation isn't critical.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.59.json 2.31.35-1/.changes/2.27.59.json
--- 2.23.6-1/.changes/2.27.59.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.59.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``datazone``",
+    "description": "This release adds support for 1) highlighting relevant text in returned results for Search and SearchListings APIs and 2) returning aggregated counts of values for specified attributes for SearchListings API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``omics``",
+    "description": "Add Git integration and README support for HealthOmics workflows",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.6.json 2.31.35-1/.changes/2.27.6.json
--- 2.23.6-1/.changes/2.27.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Feature - Adding support for Scheduled and Rolling Update Software in Sagemaker Hyperpod.",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Amazon Verified Permissions / Features : Adds support for tagging policy stores.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appconfig``",
+    "description": "Adding waiter support for deployments and environments; documentation updates",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release adds the following fields to DescribeContact: DisconnectReason, AgentInitiatedHoldDuration, AfterContactWorkStartTimestamp, AfterContactWorkEndTimestamp, AfterContactWorkDuration, StateTransitions, Recordings, ContactDetails, ContactEvaluations, Attributes",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.60.json 2.31.35-1/.changes/2.27.60.json
--- 2.23.6-1/.changes/2.27.60.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.60.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Transit Gateway native integration with AWS Network Firewall. Adding new enum value for the new Transit Gateway Attachment type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appintegrations``",
+    "description": "Amazon AppIntegrations introduces new configuration capabilities to enable customers to manage iframe permissions, control application refresh behavior (per contact or per browser/cross-contact), and run background applications (service).",
+    "type": "api-change"
+  },
+  {
+    "category": "``config``",
+    "description": "Documentation improvements have been made to the EvaluationModel and DescribeConfigurationRecorders APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "Doc only update: fixed grammatical errors.",
+    "type": "api-change"
+  },
+  {
+    "category": "``socialmessaging``",
+    "description": "This release introduces new WhatsApp template management APIs that enable customers to programmatically create and submit templates for approval, monitor approval status, and manage the complete template lifecycle",
+    "type": "api-change"
+  },
+  {
+    "category": "``sqs``",
+    "description": "Documentation updates for Amazon SQS fair queues feature.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "This release adds support for specifying a preferred input for channels using CMAF ingest.",
+    "type": "api-change"
+  },
+  {
+    "category": "``budgets``",
+    "description": "Adds IPv6 and PrivateLink support for AWS Budgets in IAD.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.61.json 2.31.35-1/.changes/2.27.61.json
--- 2.23.6-1/.changes/2.27.61.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.61.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``directconnect``",
+    "description": "Enable MACSec support and features on Interconnects.",
+    "type": "api-change"
+  },
+  {
+    "category": "``osis``",
+    "description": "Add Pipeline Role Arn as an optional parameter to the create / update pipeline APIs as an alternative to passing in the pipeline configuration body",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsitewise``",
+    "description": "Add support for native anomaly detection in IoT SiteWise using new Computation Model APIs",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.62.json 2.31.35-1/.changes/2.27.62.json
--- 2.23.6-1/.changes/2.27.62.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.62.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``cleanrooms``",
+    "description": "This feature provides the ability to update the table reference and allowed columns on an existing configured table.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "Adds support for tag management on monitors.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearchserverless``",
+    "description": "This is to support Granular access control support for SAML with IAMFedraton in AOSS",
+    "type": "api-change"
+  },
+  {
+    "category": "``location``",
+    "description": "This release 1) adds support for multi-polygon geofences with disconnected territories, and 2) enables polygon exclusion zones within geofences for more accurate representation of real-world boundaries.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "AWS Batch for SageMaker Training jobs feature support.  Includes new APIs for service job submission (e.g., SubmitServiceJob) and managing service environments (e.g., CreateServiceEnvironment) that enable queueing SageMaker Training jobs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.63.json 2.31.35-1/.changes/2.27.63.json
--- 2.23.6-1/.changes/2.27.63.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.63.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``ds``",
+    "description": "This release adds support for AWS Managed Microsoft AD Hybrid Edition, introducing new operations: StartADAssessment, DescribeADAssessment, ListADAssessments, DeleteADAssessment, CreateHybridAD, UpdateHybridAD, and DescribeHybridADUpdate; and updated existing operation: DescribeDirectories.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotwireless``",
+    "description": "Added TxPowerIndexMin, TxPowerIndexMax, NbTransMin and NbTransMax params to ServiceProfile.",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb``",
+    "description": "Add support for setting Serverless Scaling Configuration on clusters.",
+    "type": "api-change"
+  },
+  {
+    "category": "autocomplete",
+    "description": "Add completion model for ``dsql``",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Release to show the next hop IP address for routes propagated by VPC Route Server into VPC route tables.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "This release adds new origin timeout options: 1) ResponseCompletionTimeout and 2) OriginReadTimeout (for S3 origins)",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.7.json 2.31.35-1/.changes/2.27.7.json
--- 2.23.6-1/.changes/2.27.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``ds``",
+    "description": "Doc only update - fixed typos.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Added support for Custom output and blueprints for AUDIO data types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis``",
+    "description": "Marking ResourceARN as required for Amazon Kinesis Data Streams APIs TagResource, UntagResource, and ListTagsForResource.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.8.json 2.31.35-1/.changes/2.27.8.json
--- 2.23.6-1/.changes/2.27.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``devicefarm``",
+    "description": "Add an optional parameter to the GetDevicePoolCompatibility API to pass in project information to check device pool compatibility.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Add support to roll back an In_Progress ECS Service Deployment",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This update introduces API operations to manage and create local gateway VIF and VIF groups. It also includes API operations to describe Outpost LAGs and service link VIFs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release adds a new authorization policy to control the usage of custom AssetType when creating an Asset. Customer can now add new grant(s) of policyType USE_ASSET_TYPE for custom AssetTypes to apply authorization policy to projects members and domain unit owners.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds an optional sidecar per-frame video quality metrics report and an ALL_PCM option for audio selectors. It also changes the data type for Probe API response fields related to video and audio bitrate from integer to double.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.27.9.json 2.31.35-1/.changes/2.27.9.json
--- 2.23.6-1/.changes/2.27.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.27.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``servicecatalog``",
+    "description": "ServiceCatalog's APIs (DeleteServiceAction, DisassociateServiceActionFromProvisioningArtifact, AssociateServiceActionWithProvisioningArtifact) now throw InvalidParametersException when IdempotencyToken is invalid.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-write``",
+    "description": "Add dualstack endpoints support.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for Amazon EBS Provisioned Rate for Volume Initialization, which lets you specify a volume initialization rate to ensure that your EBS volumes are initialized in a predictable amount of time.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-query``",
+    "description": "Add dualstack endpoints support and correct us-gov-west-1 FIPS endpoint.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.0.json 2.31.35-1/.changes/2.28.0.json
--- 2.23.6-1/.changes/2.28.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,67 @@
+[
+  {
+    "category": "``workspaces-web``",
+    "description": "Added ability to log session activity on a portal to an S3 bucket.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Added Impala connector support",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Added support for the force option for the EC2 instance terminate command. This feature enables customers to recover resources associated with an instance stuck in the shutting-down state as a result of rare issues caused by a frozen operating system or an underlying hardware problem.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Added support for Route node, S3 Iceberg sources/targets, catalog Iceberg sources, DynamoDB ELT connector, AutoDataQuality evaluation, enhanced PII detection with redaction, Kinesis fan-out support, and new R-series worker types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot``",
+    "description": "This release allows AWS IoT Core users to use their own AWS KMS keys for data protection",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Add Tags field to CreateAccessPoint",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Add support for retrieving a Bearer token from environment variables to enable bearer authentication with Bedrock services.",
+    "type": "feature"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "Add support for creating advanced rule-based matching workflows in AWS Entity Resolution.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "This release introduces support for Multi-tenant management",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector2``",
+    "description": "Extend usage to include agentless hours and add CODE_REPOSITORY to aggregation resource type",
+    "type": "api-change"
+  },
+  {
+    "category": "``elbv2``",
+    "description": "This release enables secondary IP addresses for Network Load Balancers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``customer-profiles``",
+    "description": "The release updates standard profile with 2 new fields that supports account-level engagement. Updated APIs include CreateProfile, UpdateProfile, MergeProfiles, SearchProfiles, BatchGetProfile, GetSegmentMembership, CreateSegmentDefinition, CreateSegmentEstimate.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearch``",
+    "description": "Granular access control support for NEO-SAML with IAMFederation for AOS data source",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.1.json 2.31.35-1/.changes/2.28.1.json
--- 2.23.6-1/.changes/2.28.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``auditmanager``",
+    "description": "Added a note to Framework APIs (CreateAssessmentFramework, GetAssessmentFramework, UpdateAssessmentFramework) clarifying that the Controls object returns a partial response when called through Framework APIs. Added documentation that the Framework's controlSources parameter is no longer supported.",
+    "type": "api-change"
+  },
+  {
+    "category": "``observabilityadmin``",
+    "description": "CloudWatch Observability Admin adds the ability to enable telemetry on AWS resources such as Amazon VPCs (Flow Logs) in customers AWS Accounts and Organizations. The release introduces new APIs to manage telemetry rules, which define telemetry settings to be applied on AWS resources.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Add support for IPv6 Networking for Clusters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sns``",
+    "description": "Amazon SNS support for Amazon SQS fair queues",
+    "type": "api-change"
+  },
+  {
+    "category": "``aiops``",
+    "description": "This release includes fix for InvestigationGroup timestamp conversion issue.",
+    "type": "api-change"
+  },
+  {
+    "category": "``arc-region-switch``",
+    "description": "This is the initial SDK release for Region switch",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm-pca``",
+    "description": "Doc-only update to add more information to GetCertificate action.",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "Release new resource detail type CodeRepository",
+    "type": "api-change"
+  },
+  {
+    "category": "``lightsail``",
+    "description": "This release adds support for the Asia Pacific (Jakarta) (ap-southeast-3) Region.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.10.json 2.31.35-1/.changes/2.28.10.json
--- 2.23.6-1/.changes/2.28.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,72 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds ModifyInstanceConnectEndpoint API to update configurations on existing EC2 Instance Connect Endpoints and improves IPv6 support through dualstack DNS names for EC2 Instance Connect Endpoints.",
+    "type": "api-change"
+  },
+  {
+    "category": "configure",
+    "description": "Improved error messaging for `aws configure import --csv` command to clarify file",
+    "type": "enhancement"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "This release 1/ Adds support for throttled keys mode for CloudWatch Contributor Insights, 2/ Adds throttling reasons to exceptions across dataplane APIs. 3/ Explicitly models ThrottlingException as a class in statically typed languages. Refer to the launch day blog post for more details.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Updated the regex pattern and description of iamInstanceProfileArn in the CreateComputeNodeGroup and UpdateComputeNodeGroup API actions. Name and path requirements apply to the ARN of the IAM role associated with the instance profile and not the ARN of the instance profile.",
+    "type": "api-change"
+  },
+  {
+    "category": "``fsx``",
+    "description": "Amazon FSx for NetApp ONTAP 2nd generation file systems now support decreasing SSD storage capacity.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue now supports Trusted Identity Propagation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "CMAF Ingest output groups in MediaLive can now accept one additional destination url for single pipeline channels and up to two additional destination urls for standard channels.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "New APIs introduced to import WorkSpaces BYOL image using a new process that leveraged EC2 Image Builder. WorkSpaces tests and fixes your image's compatibility issues and supports customized VM images.",
+    "type": "api-change"
+  },
+  {
+    "category": "``directconnect``",
+    "description": "Added pagination support for DescribeHostedConnections, DescribeVirtualInterfaces, DescribeConnections, DescribeInterconnects, DescribeLags. Added asnLong support for BGP peer operations which supports a large range.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Added support for entity lists.",
+    "type": "api-change"
+  },
+  {
+    "category": "``arc-region-switch``",
+    "description": "Endpoint rule test and documentation update.",
+    "type": "api-change"
+  },
+  {
+    "category": "``servicediscovery``",
+    "description": "Added support for cross account through Id parameter overloading with ARN and allow owner account for some APIs instead of ARN",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-recommended-actions``",
+    "description": "Initial SDK release for AWS Billing and Cost Management Recommended Actions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qapps``",
+    "description": "Documentation update for Amazon Q Apps API Reference",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.11.json 2.31.35-1/.changes/2.28.11.json
--- 2.23.6-1/.changes/2.28.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``amp``",
+    "description": "Add Resource-based Policy APIs for Amazon Prometheus",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "AWS Glue Zero ETL now supports On-demand snapshot load",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "This release adds support for saving Bedrock Flows while node configuration is still in progress, even if the Flow is not yet able to be invoked",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.12.json 2.31.35-1/.changes/2.28.12.json
--- 2.23.6-1/.changes/2.28.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``connect``",
+    "description": "Amazon Connect Service Feature: Add support to enable multi-user in-app, web, and video calling.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Customer managed keys now available for volume encryption of SageMaker HyperPod clusters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Added default_x86_64 and default_arm64 as values to the instanceTypes field.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-dashboards``",
+    "description": "Billing and Cost Management Dashboards enables users to create dashboards that combine multiple visualizations of cost and usage data. Users can create, manage, and share dashboards. Tags are also available for dashboards.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectparticipant``",
+    "description": "Amazon Connect Service Feature: Add support to enable multi-user in-app, web, and video calling.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Adds support for Compute checksum functionality in Amazon S3 Batch Operations. You can now calculate checksums for a list of objects using supported algorithms in Amazon S3, without requiring a restore or download",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.13.json 2.31.35-1/.changes/2.28.13.json
--- 2.23.6-1/.changes/2.28.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``cleanrooms``",
+    "description": "Support error message configuration for analysis templates",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add support for \"warning\" volume status.",
+    "type": "api-change"
+  },
+  {
+    "category": "``polly``",
+    "description": "Added support for new output format - Opus.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.14.json 2.31.35-1/.changes/2.28.14.json
--- 2.23.6-1/.changes/2.28.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,57 @@
+[
+  {
+    "category": "``pinpoint-sms-voice-v2``",
+    "description": "This change added InternationalSendingEnbaled as part of describe/Update/Request phone number API response, and as part of update/Request phone number API request",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "This release adds support for the new Terms APIs which allow displaying Terms of Use and Privacy Policy on the Managed Login user-registration page.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "EKS Add-ons Custom Namespace Support",
+    "type": "api-change"
+  },
+  {
+    "category": "``billing``",
+    "description": "Clarify IPv4 and IPv6 endpoints",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisanalyticsv2``",
+    "description": "Adds Key Management Service (KMS) support allowing customer-managed key (CMK) encryption for Flink application data.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds 1/ Launch ml.p5.4xlarge instance in Processing jobs, Training jobs and Training Plan 2/ Makes S3Uri to be required for S3FileSystem and S3FileSystemConfig.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release supports policy grant identifier for cloud formation integration",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53-recovery-control-config``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Launch CountTokens API to allow token counting",
+    "type": "api-change"
+  },
+  {
+    "category": "``detective``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.15.json 2.31.35-1/.changes/2.28.15.json
--- 2.23.6-1/.changes/2.28.15.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.15.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,152 @@
+[
+  {
+    "category": "``greengrassv2``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr-public``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotthingsgraph``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudhsm``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lookoutmetrics``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ebs``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup-gateway``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotevents``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lexv2-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Added support for preprocessing queries in Data Quality operations through new DataQualityGlueTable structure.",
+    "type": "api-change"
+  },
+  {
+    "category": "``panorama``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-contacts``",
+    "description": "Doc-only updates for Incident Manager Contacts August 2025",
+    "type": "api-change"
+  },
+  {
+    "category": "``es``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackage``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-signaling``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Remove Pattern trait from email field",
+    "type": "api-change"
+  },
+  {
+    "category": "``managedblockchain``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint-email``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``appfabric``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "The default application in a stream group can now be changed at any time using UpdateStreamGroup to update the DefaultApplicationIdentifier.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotdeviceadvisor``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewaymanagementapi``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``comprehend``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3outposts``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only release that adds additional information for the update-service request parameters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``forecastquery``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotevents-data``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-identity``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``resource-groups``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``elasticbeanstalk``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.16.json 2.31.35-1/.changes/2.28.16.json
--- 2.23.6-1/.changes/2.28.16.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.16.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,112 @@
+[
+  {
+    "category": "``qldb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Correct Scan and Scanned Count values when resuming a scan or query with a ``--starting-token``",
+    "type": "bugfix"
+  },
+  {
+    "category": "``elb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53-recovery-readiness``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "AWS Elemental MediaLive now has a field called \"SubtitleRows\" for controlling subtitle row count for DVB-Sub and Burn-In captions outputs",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplacecommerceanalytics``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Update bundled Python interpreter to 3.13.7",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sagemaker-a2i-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``proton``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``clouddirectory``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``qconnect``",
+    "description": "Releasing model ID support for UpdateAIPrompt",
+    "type": "api-change"
+  },
+  {
+    "category": "``healthlake``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-sync``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "test and verified, safe to release",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Launch SageMaker Notebook Instances support for AL2023 along with P6-B200 instance type and Rootless Docker support for SageMaker Studio.",
+    "type": "api-change"
+  },
+  {
+    "category": "``memorydb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotanalytics``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Added multi browser support for synthetics canaries, Increased ephemeral storage limit from 5GB to 10GB",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``macie2``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Updates Amazon RDS documentation for Db2 read-only replicas.",
+    "type": "api-change"
+  },
+  {
+    "category": "``simspaceweaver``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.17.json 2.31.35-1/.changes/2.28.17.json
--- 2.23.6-1/.changes/2.28.17.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.17.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,207 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Added IPv6 support for AWS Client VPN.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lookoutequipment``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-archived-media``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``dax``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kendra``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``devops-guru``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-edge``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``forecast``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeartifact``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``snowball``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisanalytics``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-containers``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``translate``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``finspace-data``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudsearch``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotfleethub``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-media-pipelines``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``appflow``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-messaging``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediastore``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``resourcegroupstaggingapi``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackage-vod``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``sqs``",
+    "description": "Documentation update for Amazon SQS Supports Large Payload Message feature",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudtrail-data``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``support-app``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``wellarchitected``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-featurestore-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``shield``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codestar-notifications``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``serverlessrepo``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lex-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``b2bi``",
+    "description": "Updated APIs to support custom validation rules.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds support for input rendition selection for HLS input, adds new Share API to enable sharing jobs with AWS Support for support investigations, and adds INCLUDE_AS_TS to iFrameOnlyManifest setting for HLS outputs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-influxdb``",
+    "description": "Add MAINTENANCE status for DbInstance and DbCluster",
+    "type": "api-change"
+  },
+  {
+    "category": "``cur``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``support``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Releasing the following features - Asset classification that lets users use restricted terms for classifying assets if they have the right permissions. Also adding a new enum value \"Moving\" to project status.",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "The Amazon Q Business GetDocumentContent operation now supports retrieval of the extracted text content in JSON format.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-runtime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguru-security``",
+    "description": "Documentation update to notify users of the discontinuation of Amazon CodeGuru Security.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.18.json 2.31.35-1/.changes/2.28.18.json
--- 2.23.6-1/.changes/2.28.18.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.18.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,152 @@
+[
+  {
+    "category": "``mq``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``dlm``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectparticipant``",
+    "description": "Amazon Connect Participant Service: Remove unused fields from WebRTCConnection",
+    "type": "api-change"
+  },
+  {
+    "category": "``waf-regional``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``rbin``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``arc-zonal-shift``",
+    "description": "This release adds new API options to enable allowed windows and multiple alarms for practice runs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ram``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``elastictranscoder``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53-recovery-cluster``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``apprunner``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lookoutvision``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize-events``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codestar-connections``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add new APIs for viewing how your shared AMIs are used by other accounts, and identify resources in your account that are dependent on particular AMIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-routes``",
+    "description": "Added RouteFerryNotice PotentialViolatedVehicleRestrictionUsage value for CalculateRoutes. This value indicates when the Route is potentially forbidden for the given vehicle profile.",
+    "type": "api-change"
+  },
+  {
+    "category": "``greengrass``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-geospatial``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``globalaccelerator``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``identitystore``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``signer``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kafka``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codecommit``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsecuretunneling``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``finspace``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``mgh``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``comprehendmedical``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``migration-hub-refactor-spaces``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``glacier``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``servicecatalog-appregistry``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.19.json 2.31.35-1/.changes/2.28.19.json
--- 2.23.6-1/.changes/2.28.19.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.19.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,182 @@
+[
+  {
+    "category": "``migrationhub-config``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-media``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-insights``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``pi``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add support for on-demand refresh of EKS cluster insights",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-voice``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Added ECS_AL2023_NVIDIA as an option for Ec2Configuration.imageType.",
+    "type": "api-change"
+  },
+  {
+    "category": "``evidently``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-meetings``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune-graph``",
+    "description": "Add StartGraph and StopGraph operations to Neptune Analytics",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds support for AutoScaling on SageMaker HyperPod.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguruprofiler``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-identity``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lakeformation``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``workdocs``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-write``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``frauddetector``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``workmail``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ds``",
+    "description": "Add APIs for CA AutoEnrollment support: DescribeCAEnrollmentPolicy, EnableCAEnrollmentPolicy and DisableCAEnrollmentPolicy.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opsworks-cm``",
+    "description": "The opsworks-cm client has been removed following the deprecation of the service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``elasticache``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``datapipeline``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplifybackend``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``discovery``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``schemas``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisvideo``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``snow-device-management``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``robomaker``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``qldb-session``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``lex-models``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``opsworks``",
+    "description": "The opsworks client has been removed following the deprecation of the service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``voice-id``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.2.json 2.31.35-1/.changes/2.28.2.json
--- 2.23.6-1/.changes/2.28.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "This release adds the ability for customers to attach and detach their EBS volumes to EKS-orchestrated HyperPod cluster nodes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsitewise``",
+    "description": "Support Interface for IoT SiteWise Asset Modeling",
+    "type": "api-change"
+  },
+  {
+    "category": "``awscrt``",
+    "description": "Update awscrt version to 0.27.5.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``codeconnections``",
+    "description": "New integration with Azure DevOps provider type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Remove superfluous field from API",
+    "type": "api-change"
+  },
+  {
+    "category": "``evs``",
+    "description": "TagResource API now throws ServiceQuotaExceededException when the number of tags on the Amazon EVS resource exceeds the maximum allowed. TooManyTagsException is deprecated.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.20.json 2.31.35-1/.changes/2.28.20.json
--- 2.23.6-1/.changes/2.28.20.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.20.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,172 @@
+[
+  {
+    "category": "``mturk``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Added RDS HTTP Endpoint feature support flag to DescribeOrderableDBInstanceOptions API",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguru-reviewer``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``healthlake``",
+    "description": "Add ValidationLevel parameter to StartFHIRImportJob API, allowing users to specify a FHIR validation level for their asynchronous import jobs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workmailmessageflow``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for copying Amazon EBS snapshot and AMIs to and from Local Zones.",
+    "type": "api-change"
+  },
+  {
+    "category": "``scheduler``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2-instance-connect``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Adding support to fetch TargetDatabase field during GetDatabases with AttributesToGet",
+    "type": "api-change"
+  },
+  {
+    "category": "``omics``",
+    "description": "Adds Amazon ECR pull through cache support to AWS HealthOmics, so you can more easily use container images from external sources.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloud9``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``applicationcostprofiler``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``xray``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodb``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``fis``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-maps``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``savingsplans``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``fms``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudsearchdomain``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudhsmv2``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-sap``",
+    "description": "Added support for Configuration Checks on SAP HANA Applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-query``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53domains``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``osis``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``ses``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``apprunner``",
+    "description": "Doc only updates for APIs and and datatypes related to IPAddressType and Subnets for IPv6 dualstack support.",
+    "type": "api-change"
+  },
+  {
+    "category": "``databrew``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "AgentStatusDrillDown feature in GetCurrentMetricData API. Adding AGENT_STATUS as filter and grouping in GetCurrentMetricData API",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediastore-data``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``codedeploy``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``machinelearning``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``waf``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling-plans``",
+    "description": "Remove incorrect endpoint tests",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.21.json 2.31.35-1/.changes/2.28.21.json
--- 2.23.6-1/.changes/2.28.21.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.21.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Release shows new route types such as filtered and advertisement.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Fixed stop sequence limit for converse API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``xray``",
+    "description": "AWS X-Ray Features: Support Sampling Rate Boost On Anomaly",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.22.json 2.31.35-1/.changes/2.28.22.json
--- 2.23.6-1/.changes/2.28.22.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.22.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``notifications``",
+    "description": "Added Org support for notifications:  - `ListMemberAccounts` gets member accounts list, `AssociateOrganizationalUnit` links OU to notification configuration, `DisassociateOrganizationalUnit` removes OU from notification configuration, `ListOrganizationalUnits` shows OUs configured for notifications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune``",
+    "description": "Removed the deprecated marker from publiclyAccessible parameter from DbInstance, CreateDbInstance and ModifyDbInstance and added relevant usage information for the parameter.",
+    "type": "api-change"
+  },
+  {
+    "category": "``workmail``",
+    "description": "Make RoleArn an optional parameter for the PutEmailMonitoringConfiguration API, and add UnsupportedOperationException to RegisterToWorkMail.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "MaximumEbsAttachments and AttachmentLimitType fields added to DescribeInstanceTypesResponse. G6f, Gr6f, R8i, R8i-flex and p5.4xlarge instance types added to InstanceTypes enum.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.23.json 2.31.35-1/.changes/2.28.23.json
--- 2.23.6-1/.changes/2.28.23.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.23.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``awscrt``",
+    "description": "Update awscrt version to 0.27.6",
+    "type": "enhancement"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "Added support for adding new data provider members to an existing collaboration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanroomsml``",
+    "description": "AWS Clean Rooms ML adds log sanitization for privacy-enhanced error summaries, supports new instance types for custom models providing better performance and lower costs, and deprecates P3-series instances.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53``",
+    "description": "Amazon Route 53 now supports the Asia Pacific (New Zealand) Region (ap-southeast-6) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53domains``",
+    "description": "Added new ExtraParams AU_ELIGIBILITY_TYPE, AU_POLICY_REASON, and AU_REGISTRANT_NAME",
+    "type": "api-change"
+  },
+  {
+    "category": "``mq``",
+    "description": "Add CONFIG_MANAGED as a supported AuthenticationStrategy for Amazon MQ for RabbitMQ brokers. Make username and password optional on broker creation for CONFIG_MANAGED brokers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Adding an optional field IpAddressType in CustomOriginConfig",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "This release adds support for MasterUserAuthenticationType parameter on CreateDBInstance, ModifyDBInstance, CreateDBCluster, and ModifyDBCluster operations.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.24.json 2.31.35-1/.changes/2.28.24.json
--- 2.23.6-1/.changes/2.28.24.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.24.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Add m8i, m8i-flex and i8ge instance types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "ListHookResults API now supports retrieving invocation results for all CloudFormation Hooks (previously limited to create change set and Cloud Control operations) with new optional parameters for filtering by Hook status and ARN.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "Add support for configurable compute sizes for PySpark jobs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Added new EndpointNetworkType and TargetConnectionNetworkType fields in Proxy APIs to support IPv6",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Amazon Verified Permissions / Features : Adds support for datetime and duration attribute values.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearchserverless``",
+    "description": "Add support for Federal Information Processing Standards (FIPS) and Federal Risk and Authorization Management Program (FedRAMP) compliance",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.25.json 2.31.35-1/.changes/2.28.25.json
--- 2.23.6-1/.changes/2.28.25.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.25.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Release IPv6 support with dualstack in SageMaker Notebooks, Tiered Storage Checkpointing Support in SageMaker HyperPod and P5.4xlarge instance type for SageMaker Hosting.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only release that adds additional information for Amazon ECS Availability Zone rebalancing.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Documentation-only update to add AccountingStorageEnforce to SlurmCustomSetting.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.26.json 2.31.35-1/.changes/2.28.26.json
--- 2.23.6-1/.changes/2.28.26.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.26.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``s3``",
+    "description": "This release includes backward compatibility work on the \"Expires\" parameter.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsitewise``",
+    "description": "Add ComputationModelVersion support in IoT SiteWise APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "This release adds the RESOURCE_NOT_FOUND error code as a possible value in responses to the following operations: BatchGetStandardsControlAssociations, BatchUpdateStandardsControlAssociations, and BatchGetSecurityControls.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.3.json 2.31.35-1/.changes/2.28.3.json
--- 2.23.6-1/.changes/2.28.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Add support for SageMaker Hyperpod continuous scaling and custom AMI; Introduce new APIs: ListClusterEvents, DescribeClusterEvent, BatchAddClusterNodes",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Adds a new Aurora Serverless v2 attribute to the DBCluster resource to expose the platform version. Also updates the attribute to be part of both the engine version and platform version descriptions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "This release adds support for Automated Reasoning checks output models for the Amazon Bedrock Guardrails ApplyGuardrail API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This release introduces Automated Reasoning checks for Amazon Bedrock Guardrails. The feature adds new APIs for policy building, refinement, version management, and testing. Guardrail APIs now support Automated Reasoning policy configuration and validation output.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add support for deletion protection on EKS clusters",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.4.json 2.31.35-1/.changes/2.28.4.json
--- 2.23.6-1/.changes/2.28.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``budgets``",
+    "description": "Adds support for billing views. Billing views let you control access to cost and usage data through an AWS resource, streamlining the process of sharing cost and usage data across account boundaries. With this release, you can now create and view budgets based on billing views.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appstream``",
+    "description": "Added support for G6 instances",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Mark Elastic Inference Accelerators and Elastic Graphics Processor parameters as deprecated on the RunInstances and LaunchTemplate APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearchserverless``",
+    "description": "Features: add Index APIs in OpenSearchServerless to support managed semantic enrichment",
+    "type": "api-change"
+  },
+  {
+    "category": "openssl",
+    "description": "Update bundled OpenSSL version to 1.1.1zc for Linux installers",
+    "type": "enhancement"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Amazon Q Business now supports the GetDocumentContent() API that enables customers to securely access the source documents through clickable citation links at query time",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.5.json 2.31.35-1/.changes/2.28.5.json
--- 2.23.6-1/.changes/2.28.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``glue``",
+    "description": "AWS Glue Data Catalog now supports Iceberg Optimization settings at the Catalog level, and supports new options to control the optimization job run rate.",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "Adds Proton 9.0-2 to the list of runtime environment options available when creating an Amazon GameLift Streams application",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Added support for VPC owner account ID associated with DNS request in the GuardDuty finding.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "AWS CodeBuild now supports comment-based pull request control.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Added new viewer security policy, TLSv1.3_2025, for CloudFront.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "This feature allows customers to use AWS Batch with Linux with ARM64 CPU Architecture with Fargate Spot compute support.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.6.json 2.31.35-1/.changes/2.28.6.json
--- 2.23.6-1/.changes/2.28.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``connect``",
+    "description": "This release adds a new API GetContactMetrics for Amazon Connect.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Adds support for GB200 UltraServers in Amazon SageMaker training jobs, training plans, and HyperPod clusters",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-data``",
+    "description": "Adding DeleteConnection API to IoT Data Plane",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector2``",
+    "description": "Add CVSSV4 to Vulnerability Search API and update enable/disable account id list length to 5",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "Update documentation to use key ARN only in OutputEncryptionKMSKeyId request parameter",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.7.json 2.31.35-1/.changes/2.28.7.json
--- 2.23.6-1/.changes/2.28.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "``sso``",
+    "description": "Clarify ``aws sso login`` to only suggest a different device when using ``--use-device-code``.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``evs``",
+    "description": "Update for general availability of Amazon Elastic VMware Service (EVS).",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "This release includes model updates and enhanced SDK documentation for union fields in automated reasoning policy components. Added docs cover policy definitions, mutations (add/update for rules/types/variables), build assets, workflow sources, test results, and tag exception handling.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds AvailabilityZoneId support for CreateVolume, DescribeVolume, LaunchTemplates, RunInstances, DescribeInstances, CreateDefaultSubnet, SpotInstances, and CreateDefaultSubnet APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Doc-only update for Lambda that updates the maximum payload size for response streaming invocations to 200 MB.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Add RowAxisDisplayOptions and ColumnAxisDisplayOptions to HeatMapConfiguration, add Actions to PluginVisual, increase limit for CalculatedFields list",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "Remove SigV4 auth requirement for GetTokensFromRefreshToken",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-admin``",
+    "description": "Added support for managing user background session for applications",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "Adds support for Wait and Save feature in service-managed fleets",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Updating SearchUserHierarchyGroups API",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.8.json 2.31.35-1/.changes/2.28.8.json
--- 2.23.6-1/.changes/2.28.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``organizations``",
+    "description": "This release introduces 2 new APIs in Organizations: 1. ListAccountsWithInvalidEffectivePolicy 2. ListEffectivePolicyValidationErrors",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "IAM Identity Center trusted identity propagation is now supported in SageMaker Studio.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "AWS HealthScribe now supports specifying preferred patient pronouns through the MedicalScribeContext parameter for use in the generated clinical notes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Release to allow route table association with a PublicIpv4Pool.",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "AWS CodeBuild now supports PullRequestBuildPolicy in webhook object.",
+    "type": "api-change"
+  },
+  {
+    "category": "``backupsearch``",
+    "description": "Using recommended smithy trait to generate regional endpoints for Backup Search",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.28.9.json 2.31.35-1/.changes/2.28.9.json
--- 2.23.6-1/.changes/2.28.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.28.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``datazone``",
+    "description": "Adds support for account pools and project profile account decoupling",
+    "type": "api-change"
+  },
+  {
+    "category": "``security-ir``",
+    "description": "Added support for Organizational Unit-level Membership configuration and the ability to resume a cancelled membership.",
+    "type": "api-change"
+  },
+  {
+    "category": "``braket``",
+    "description": "Add support for Braket program sets.",
+    "type": "api-change"
+  },
+  {
+    "category": "``partnercentral-selling``",
+    "description": "Add Tagging Support for Opportunity resources",
+    "type": "api-change"
+  },
+  {
+    "category": "``fsx``",
+    "description": "Add Dual-Stack support for Amazon FSx for OpenZFS file systems",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "This release introduces compute quota for GPU, Trainium accelerators, vCPU, and vCPU memory utilization across teams in HyperPod clusters",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.29.0.json 2.31.35-1/.changes/2.29.0.json
--- 2.23.6-1/.changes/2.29.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.29.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``autoscaling``",
+    "description": "Added WaitForTransitioningInstances parameter to the CancelInstanceRefresh API, allowing the caller to cancel an instance refresh without waiting for on-going launches and terminations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "Added CUE tag SCTE output to MediaPackageV2 HLS and LL-HLS manifests.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Released IPv6 support with dual-stack domain options on SageMaker Studio and introduced support for p6-b200.48xlarge instance type on SageMaker Studio for JupyterLab and CodeEditor applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Adds support for custom blueprints",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudwatch``",
+    "description": "Added a new API - DescribeAlarmContributors API, to retrieve alarm contributors in ALARM state. Added support in DescribeAlarmHistory API to query alarm contributor history",
+    "type": "api-change"
+  },
+  {
+    "category": "s3 download",
+    "description": "Validate requested range matches content range in response for multipart downloads",
+    "type": "feature"
+  },
+  {
+    "category": "``connect``",
+    "description": "SDK release for user defined predefined attributes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``organizations``",
+    "description": "Documentation updates for AWS Organizations APIs.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.29.1.json 2.31.35-1/.changes/2.29.1.json
--- 2.23.6-1/.changes/2.29.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.29.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``networkflowmonitor``",
+    "description": "Added new enum value (AWS::Region) for type field under MonitorLocalResource and MonitorRemoteResource. Workload Insights and Monitor top contributors queries now support a new DestinationCategory (INTER_REGION).",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "AWS Payment Cryptography Service now supports Multi-Region key replication. Customers can choose to automatically distribute keys across AWS Regions.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.0.json 2.31.35-1/.changes/2.30.0.json
--- 2.23.6-1/.changes/2.30.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+[
+  {
+    "category": "installer",
+    "description": "Added universal binary support for AWS CLI v2 on macOS",
+    "type": "feature"
+  },
+  {
+    "category": "``evs``",
+    "description": "CreateEnvironment API now supports parameters (isHcxPublic & hcxNetworkAclId) for HCX migration via public internet, adding flexibility for migration scenarios. New APIs have been added for associating (AssociateEipToVlan) & disassociating (DisassociateEipFromVlan) Elastic IP (EIP) addresses.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add Vended Logs APIs for Amazon Prometheus Managed Collector",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "This release adds support for Account level custom permissions, additional Dashboard Options, and Null support for Q&A.",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Updated Java SDK implementation of entity set status in GuardDuty API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "adding IAM principal id to IAM user profile details",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-containers``",
+    "description": "Added nodeLabel support in container provider to aid hardware isolation support for virtual cluster and security configuration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "AWS Elemental MediaLive adds a new feature in MediaPackage output group that enables MediaPackage V2 users to control HLS-related parameters directly in MediaLive. These parameter settings are then reflected in MediaPackage outputs, providing more streamlined control over HLS configurations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This release supports hook details for Amazon ECS lifecycle hooks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Adds support for end-to-end IAM authentication in RDS Proxy for MySQL, MariaDB, and PostgreSQL engines.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.1.json 2.31.35-1/.changes/2.30.1.json
--- 2.23.6-1/.changes/2.30.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``s3``",
+    "description": "Expose S3 transfer config's ``io_chunksize`` in shared config file",
+    "type": "enhancement"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "Add support for certificates to be signed by 3rd party certificate authorities.  New API GetCertificateSigningRequest API and support for providing certificates at run-time for tr-34 import/export",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.2.json 2.31.35-1/.changes/2.30.2.json
--- 2.23.6-1/.changes/2.30.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``medical-imaging``",
+    "description": "Added support for OpenID Connect (OIDC) custom authorizer",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Introduce three new encryption filters: EncryptionType (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C, NOT-SSE), KmsKeyArn (for SSE-KMS and DSSE-KMS), and BucketKeyEnabled (for SSE-KMS).",
+    "type": "api-change"
+  },
+  {
+    "category": "``sms``",
+    "description": "The sms client has been removed following the deprecation of the service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "Added endpoint support for eusc-de-east-1 region.",
+    "type": "api-change"
+  },
+  {
+    "category": "``observabilityadmin``",
+    "description": "CloudWatch Observability Admin adds the ability to enable telemetry centralization in customers' Organizations. The release introduces new APIs to manage centralization rules, which define settings to replicate telemetry data to a central destination in the customers' Organization.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.3.json 2.31.35-1/.changes/2.30.3.json
--- 2.23.6-1/.changes/2.30.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``logs``",
+    "description": "Cloudwatch Logs added support for 2 new API parameters in metric and subscription filter APIs to filter log events based on system field values and emit system field values as dimensions and send them to customer destination as additional metadata.",
+    "type": "api-change"
+  },
+  {
+    "category": "``configure``",
+    "description": "Added the new ``aws configure mfa-login`` command, which creates a profile with temporary credentials corresponding to an IAM user with an MFA code.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``ivs-realtime``",
+    "description": "IVS now offers customers the ability to control the positioning of participants in both grid and PiP layouts based on custom attribute values in participant tokens.",
+    "type": "api-change"
+  },
+  {
+    "category": "``osis``",
+    "description": "Adds support for cross-account ingestion for push-based sources. This includes resource policies for sharing pipelines across accounts and features for managing pipeline endpoints which enable accessing pipelines across different VPCs, including VPCs in other accounts.",
+    "type": "api-change"
+  },
+  {
+    "category": "macOS",
+    "description": "Added explicit architecture support in PKG installer for universal builds on Macs to prevent Rosetta requirement prompt.",
+    "type": "enhancement"
+  },
+  {
+    "category": "``budgets``",
+    "description": "Add support for custom time periods in budget configuration",
+    "type": "api-change"
+  },
+  {
+    "category": "``configure``",
+    "description": "Added support for temporary credentials with ``aws configure``. The CLI will prompt for an ``aws_session_token`` if the provided access key ID is temporary.",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.4.json 2.31.35-1/.changes/2.30.4.json
--- 2.23.6-1/.changes/2.30.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Add mac-m4.metal and mac-m4pro.metal instance types.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Add support for Amazon EC2 Capacity Blocks for ML",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "Network Firewall now prevents TLS handshakes with the target server until after the Server Name Indication (SNI) has been seen and verified. The monitoring dashboard now provides deeper insights into PrivateLink endpoint candidates and offers filters based on IP addresses and protocol.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.5.json 2.31.35-1/.changes/2.30.5.json
--- 2.23.6-1/.changes/2.30.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``budgets``",
+    "description": "Added BillingViewHealthStatus Exception which is thrown when a Budget is created or updated with a Billing View that is not in the HEALTHY status",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Release includes an increase to the maximum policy build document size, an update to DeleteAutomatedReasoningPolicyBuildWorkflow to add ResourceInUseException, and corrections to UpdateAutomatedReasoningPolicyTestCaseRequest.",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-messaging``",
+    "description": "Amazon Chime SDK Messaging GetMessagingSessionEndpoint API now returns dual-stack WebSocket endpoints supporting IPv4/IPv6.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Allowed AMIs adds support for four new parameters - marketplaceProductCodes, deprecationTimeCondition, creationDateCondition and imageNames",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.6.json 2.31.35-1/.changes/2.30.6.json
--- 2.23.6-1/.changes/2.30.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``config``",
+    "description": "Add UNKNOWN state to RemediationExecutionState and add IN_PROGRESS/EXITED/UNKNOWN states to RemediationExecutionStepState.",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager-user-subscriptions``",
+    "description": "Added support for cross-account Active Directories.",
+    "type": "api-change"
+  },
+  {
+    "category": "ec2-instance-connect",
+    "description": "Allow ec2-instance-connect ssh and open-tunnel commands to connect to update-complete, update-in-progress, and update-failed EC2 Instance Connect Endpoints. Fixes `#9715 <https://github.com/aws/aws-cli/issues/9715>`__",
+    "type": "enhancement"
+  },
+  {
+    "category": "``kendra-ranking``",
+    "description": "Model whitespace change - no client difference",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Add tagging and VPC support to AgentCore Runtime, Code Interpreter, and Browser resources. Add support for configuring request headers in Runtime. Fix AgentCore Runtime shape names.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Add MinBitrate for QVBR mode under H264/H265/AV1 output codec. Add GopBReference, GopNumBFrames, SubGopLength fields under H265 output codec.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release adds a persistent connection field to UserPhoneConfig that maintains agent's softphone media connection for faster call connections.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sqs``",
+    "description": "Update invalid character handling documentation for SQS SendMessage API",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.30.7.json 2.31.35-1/.changes/2.30.7.json
--- 2.23.6-1/.changes/2.30.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.30.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``imagebuilder``",
+    "description": "Version ARNs are no longer required for the EC2 Image Builder list-image-build-version, list-component-build-version, and list-workflow-build-version APIs. Calling these APIs without the ARN returns all build versions for the given resource type in the requesting account.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint-sms-voice``",
+    "description": "Update pinpoint-sms-voice client and endpoint tests to latest version.",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Adds support for RepairConfig overrides and configurations in EKS Managed Node Groups.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Starting in JAN 2026, AWS Batch will change the default AMI for new Amazon ECS compute environments from Amazon Linux 2 to Amazon Linux 2023. We recommend migrating AWS Batch Amazon ECS compute environments to Amazon Linux 2023 to maintain optimal performance and security.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.0.json 2.31.35-1/.changes/2.31.0.json
--- 2.23.6-1/.changes/2.31.0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,67 @@
+[
+  {
+    "category": "help",
+    "description": "Update message formatting when entering an invalid command to improve identification of an error (aws/aws-cli`#9737 <https://github.com/aws/aws-cli/issues/9737>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "Added support for running incremental ID mapping for rule-based workflows.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add Amazon EC2 R8gn instance types",
+    "type": "api-change"
+  },
+  {
+    "category": "documentation",
+    "description": "Display required constraints to top level and nested parameters (aws/aws-cli`#9463 <https://github.com/aws/aws-cli/issues/9463>`__, aws/aws-cli`#9491 <https://github.com/aws/aws-cli/issues/9491>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "help",
+    "description": "Reduce output from help when entering an invalid command (aws/aws-cli`#9457 <https://github.com/aws/aws-cli/issues/9457>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "documentation",
+    "description": "Add documentation for API parameter constraints (aws/aws-cli`#9444 <https://github.com/aws/aws-cli/issues/9444>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "``s3``",
+    "description": "Add controls over progress status message frequency and multiline printing (aws/aws-cli`#9545 <https://github.com/aws/aws-cli/issues/9545>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "configuration",
+    "description": "Improve accessibility of table output for ``configure list`` command (aws/aws-cli`#9547 <https://github.com/aws/aws-cli/issues/9547>`__)",
+    "type": "enhancement"
+  },
+  {
+    "category": "``sso-oidc``",
+    "description": "This release includes exception definition and documentation updates.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-admin``",
+    "description": "Add support for encryption at rest with Customer Managed KMS Key in AWS IAM Identity Center",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "Added Dualstack support to GetDeployablePatchSnapshotForInstance",
+    "type": "api-change"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "Support incremental id mapping workflow for AWS Entity Resolution",
+    "type": "api-change"
+  },
+  {
+    "category": "help",
+    "description": "Add ability to view help in a web browser or print the URL to the remote documentation website (aws/aws-cli`#9496 <https://github.com/aws/aws-cli/issues/9496>`__)",
+    "type": "feature"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.1.json 2.31.35-1/.changes/2.31.1.json
--- 2.23.6-1/.changes/2.31.1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``appstream``",
+    "description": "G6f instance support for AppStream 2.0",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune``",
+    "description": "Doc-only update to address customer use.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dax``",
+    "description": "This release adds support for IPv6-only, DUAL_STACK DAX instances",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudwatch``",
+    "description": "Fix default dualstack FIPS endpoints in AWS GovCloud(US) regions",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "Documentation only updates for KMS.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.10.json 2.31.35-1/.changes/2.31.10.json
--- 2.23.6-1/.changes/2.31.10.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.10.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``proton``",
+    "description": "Deprecating APIs in AWS Proton namespace.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.11.json 2.31.35-1/.changes/2.31.11.json
--- 2.23.6-1/.changes/2.31.11.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.11.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``outposts``",
+    "description": "This release adds the new StartOutpostDecommission API, which starts the decommission process to return Outposts racks or servers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``service-quotas``",
+    "description": "introduces Service Quotas Automatic Management. Users can opt-in to monitoring and managing service quotas, receive notifications when quota usage reaches thresholds, configure notification channels, subscribe to EventBridge events for automation, and view notifications in the AWS Health dashboard.",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager-user-subscriptions``",
+    "description": "Released support for IPv6 and dual-stack active directories",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Adding support for authorizer type AWS_IAM to AgentCore Control Gateway.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.12.json 2.31.35-1/.changes/2.31.12.json
--- 2.23.6-1/.changes/2.31.12.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.12.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``wafv2``",
+    "description": "This release adds the ability to throw WafLimitsExceededException when the maximum number of Application Load Balancer (ALB) associations per AWS WAF v2 WebACL is exceeded.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "This release adds support for ActionConnector and Flow, which are new resources associated with Amazon Quick Suite. Additional updates include expanded Data Source options, further branding customization, and new capabilities that can be restricted by Admins.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.13.json 2.31.35-1/.changes/2.31.13.json
--- 2.23.6-1/.changes/2.31.13.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.13.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Bedrock AgentCore release for Runtime, and Memory.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Added new viewer security policy, TLSv1.2_2025, for CloudFront.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Addition of AuditContext in GetTable/GetTables Request",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Updated the text in the Important section of the ModifyDBClusterParameterGroup page.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Bedrock AgentCore release for Gateway, and Memory including Self-Managed Strategies support for Memory.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Add InvokedViaFunctionUrl context key to limit invocations to only FURL invokes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``odb``",
+    "description": "This release adds APIs that allow you to specify CIDR ranges in your ODB peering connection.",
+    "type": "api-change"
+  },
+  {
+    "category": "openssl",
+    "description": "Update bundled OpenSSL version to 1.1.1zd for Linux installers",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.14.json 2.31.35-1/.changes/2.31.14.json
--- 2.23.6-1/.changes/2.31.14.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.14.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``observabilityadmin``",
+    "description": "CloudWatch Observability Admin adds the ability to enable Resource tags for telemetry in a customer account. The release introduces new APIs to enable, disable and describe the status of Resource tags for telemetry feature. This new capability simplifies monitoring AWS resources using tags.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Updated http status code in control plane apis of agentcore runtime, tools and identity. Additional included provider types for AgentCore Identity",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Release Amazon EC2 c8i, c8i-flex, m8a, and r8gb",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Updated InvokeAgentRuntime API to accept account id optionally and added CompleteResourceTokenAuth API.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.15.json 2.31.35-1/.changes/2.31.15.json
--- 2.23.6-1/.changes/2.31.15.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.15.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``connect``",
+    "description": "SDK release for TaskTemplateInfo in Contact for DescribeContact response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds support for creating instant, point-in-time copies of EBS volumes within the same Availability Zone",
+    "type": "api-change"
+  },
+  {
+    "category": "``transfer``",
+    "description": "SFTP connectors now support routing connections via customers' VPC. This enables connections to remote servers that are only accessible in a customer's VPC environment, and to servers that are accessible over the internet but need connections coming from an IP address in a customer VPC's CIDR range.",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "The AWS Backup job attribute extension enhancement helps customers better understand the plan that initiated each job, and the properties of the resource each job creates.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transcribe``",
+    "description": "Move UntagResource API body member to query parameter",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Support creating scoped and trustedIdentityPropagation enabled connections.",
+    "type": "api-change"
+  },
+  {
+    "category": "setuptools",
+    "description": "Upgrade pinned setuptools to version 78.1.1",
+    "type": "enhancement"
+  },
+  {
+    "category": "``appstream``",
+    "description": "This release introduces support for Microsoft license included applications streaming.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.16.json 2.31.35-1/.changes/2.31.16.json
--- 2.23.6-1/.changes/2.31.16.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.16.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``timestream-influxdb``",
+    "description": "This release adds support for creating and managing InfluxDB 3 Core and Enterprise DbClusters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Introducing EC2 Capacity Manager for monitoring and analyzing capacity usage across On-Demand Instances, Spot Instances, and Capacity Reservations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb``",
+    "description": "Add support for NetworkType field in CreateDbCluster, ModifyDbCluster, RestoreDbClusterFromSnapshot and RestoreDbClusterToPointInTime for DocumentDB.",
+    "type": "api-change"
+  },
+  {
+    "category": "``lightsail``",
+    "description": "Add support for manage Lightsail Bucket CORS configuration",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Added default pagination value for ListMalwareProtectionPlans API and updated UpdateFindingsFeedback API",
+    "type": "api-change"
+  },
+  {
+    "category": "``elbv2``",
+    "description": "This release expands Listener Rule Conditions to support RegexValues and adds support for a new Transforms field in Listener Rules.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Amazon Bedrock Automated Reasoning Policy now offers enhanced AWS KMS integration. The CreateAutomatedReasoningPolicy API includes a new kmsKeyId field, allowing customers to specify their preferred KMS key for encryption, improving control and compliance with AWS encryption mandates.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.17.json 2.31.35-1/.changes/2.31.17.json
--- 2.23.6-1/.changes/2.31.17.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.17.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,247 @@
+[
+  {
+    "category": "``route53-recovery-control-config``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplify``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-query``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``migrationhub-config``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``qldb-session``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``identitystore``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackagev2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lex-models``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-routes``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-guiconnect``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``memorydb``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewaymanagementapi``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``osis``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lexv2-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``billingconductor``",
+    "description": "New feature: service flat CLI and first AWS managed pricing plan (BasicPricingPlan)",
+    "type": "api-change"
+  },
+  {
+    "category": "``kafka``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-web``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``machinelearning``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lookoutequipment``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``globalaccelerator``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``m2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pricing``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``freetier``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``grafana``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dataexchange``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dlm``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivs-realtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``apptest``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``polly``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``apprunner``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``databrew``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm-pca``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspaces``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``voice-id``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``medical-imaging``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-data-exports``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-entitlement``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkflowmonitor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``customer-profiles``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``gamelift``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling-plans``",
+    "description": "Updated FIPS endpoints for US GovCloud regions",
+    "type": "api-change"
+  },
+  {
+    "category": "``qldb``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-contacts``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.18.json 2.31.35-1/.changes/2.31.18.json
--- 2.23.6-1/.changes/2.31.18.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.18.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,252 @@
+[
+  {
+    "category": "``arc-zonal-shift``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``finspace-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``wellarchitected``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ds``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``tnb``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager-user-subscriptions``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-media``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-recommended-actions``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-catalog``",
+    "description": "The ListEntities API now supports two new CAPI filters: DeliveryOptionTypes for SaaS products and CompatibleAWSServices for Container products.",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lakeformation``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codestar-notifications``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconnect``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pi``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkmanager``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotthingsgraph``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``controlcatalog``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-geospatial``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-meetings``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iottwinmaker``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``appconfigdata``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kendra-ranking``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``es``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "Updates documentation to clarify valid application binaries for an Amazon GameLift Streams application and provide descriptions of stream session error status reasons",
+    "type": "api-change"
+  },
+  {
+    "category": "``rolesanywhere``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53-recovery-readiness``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``finspace``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``timestream-write``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``qapps``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``evidently``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``swf``",
+    "description": "Releasing minor endpoint updates.",
+    "type": "api-change"
+  },
+  {
+    "category": "``migration-hub-refactor-spaces``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``organizations``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``imagebuilder``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``events``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dsql``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``signer``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-maps``",
+    "description": "Added support for optional style parameters in maps, including Terrain, ContourDensity, Traffic, and TravelModes.",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-insights``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplifybackend``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``appintegrations``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotdeviceadvisor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront-keyvaluestore``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Documentation updates for Amazon EC2.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.19.json 2.31.35-1/.changes/2.31.19.json
--- 2.23.6-1/.changes/2.31.19.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.19.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``dynamodb``",
+    "description": "Add AccountID based endpoint metric to endpoint rules.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "This release adds the ability to set resolution for the black video generator and also adds the StartJobsQuery and GetJobsQueryResults APIs which allow asynchronous search of job history using new filters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr``",
+    "description": "Added RECONFIGURING to the InstanceFleetState convenience enum.",
+    "type": "api-change"
+  },
+  {
+    "category": "``meteringmarketplace``",
+    "description": "Added ClientToken parameter to MeterUsage API for specifying idempotent requests.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.2.json 2.31.35-1/.changes/2.31.2.json
--- 2.23.6-1/.changes/2.31.2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+[
+  {
+    "category": "``lightsail``",
+    "description": "Attribute HTTP binding update for Get/Delete operations",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Update GetConnection(s) API to return KmsKeyArn & Add 63 missing connection types",
+    "type": "api-change"
+  },
+  {
+    "category": "``network-firewall``",
+    "description": "Network Firewall now introduces Reject and Alert action support for stateful domain list rule groups, providing customers with more granular control over their network traffic.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.20.json 2.31.35-1/.changes/2.31.20.json
--- 2.23.6-1/.changes/2.31.20.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.20.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,247 @@
+[
+  {
+    "category": "``workmail``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotanalytics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectparticipant``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "Add 3 API operations for fetching alerts: ListAlerts (Channels), ListClusterAlerts (MediaLive Anywhere), and ListMultiplexAlerts",
+    "type": "api-change"
+  },
+  {
+    "category": "``lexv2-models``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ds-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``oam``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``directconnect``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``autoscaling``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "This release added support for email address alias configuration and outbound campaign preview mode.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-a2i-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-agreement``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``notificationscontacts``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``forecastquery``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcampaignsv2``",
+    "description": "Updated Amazon Connect Outbound Campaigns V2 SDK to support Preview Outbound Mode",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-incidents``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chatbot``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudhsm``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguru-reviewer``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsecuretunneling``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ivschat``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workdocs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53-recovery-cluster``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2-instance-connect``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mailmanager``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-dashboards``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sns``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint-sms-voice-v2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rtbfabric``",
+    "description": "Update for general availability of AWS RTB Fabric service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisanalyticsv2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-identity``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudhsmv2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mwaa``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotsitewise``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release adds AvailabilityZoneId support for CreateNetworkInterface and DescribeNetworkInterfaces APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``b2bi``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``devicefarm``",
+    "description": "This release adds support for optionally including an app as part of a CreateRemoteAccessSession request",
+    "type": "api-change"
+  },
+  {
+    "category": "``appfabric``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotfleetwise``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``comprehendmedical``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Updated OIDC and SAML apis to reject multiple simultaneous requests to change a unique object.",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53``",
+    "description": "Amazon Route 53 now supports the ISOB West Region for private DNS for Amazon VPCs and cloudwatch healthchecks.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.21.json 2.31.35-1/.changes/2.31.21.json
--- 2.23.6-1/.changes/2.31.21.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.21.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,252 @@
+[
+  {
+    "category": "``rum``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Fixing the service documentation name",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codebuild``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint-email``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Add NodeJs 24 (nodejs24.x) support to AWS Lambda.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-voice``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``networkmonitor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``macie2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``drs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mgh``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sesv2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``internetmonitor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``securitylake``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mgn``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplacecommerceanalytics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr-public``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``savingsplans``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``managedblockchain-query``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pca-connector-scep``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-autoscaling``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-archived-media``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``resiliencehub``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``healthlake``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``personalize-events``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb-elastic``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudtrail-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mpa``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptunedata``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-webrtc-storage``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``account``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``discovery``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearchserverless``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-edge``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codestar-connections``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-jobs-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Fixing the service documentation name",
+    "type": "api-change"
+  },
+  {
+    "category": "``config``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``odb``",
+    "description": "Doc-only update that removes duplicate values from descriptions of ODB peering APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotevents``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecr``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``omics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ebs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cur``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``storagegateway``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect-contact-lens``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dsql``",
+    "description": "Add support for resource-based policies for Aurora DSQL clusters. This will enable you to implement Block Public Access (BPA) which will help restrict access to your Aurora DSQL public or VPC endpoints.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.22.json 2.31.35-1/.changes/2.31.22.json
--- 2.23.6-1/.changes/2.31.22.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.22.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,257 @@
+[
+  {
+    "category": "``datapipeline``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``vpc-lattice``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-messaging``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``budgets``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``snow-device-management``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``elb``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``location``",
+    "description": "Added support for mobile app restrictions in Amazon Location API keys.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amplifyuibuilder``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis-video-signaling``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``qbusiness``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``robomaker``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-thin-client``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``evs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-oidc``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``inspector``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediastore``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53domains``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``wisdom``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``securityhub``",
+    "description": "Release 3 layer filter support in GetFindingsV2, GetFindingStatisticsV2, GetResourcesV2,GetResourcesStatisticsV2, AutomationRule V2 APIs. Update filter casing in GetResourcesV2, GetResourcesStatisticsV2 APIs. Add new filters in GetFindingsV2, GetFindingStatisticsV2, AutomationRule V2 APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackage``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``fis``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rtbfabric``",
+    "description": "Add support for custom rate limits.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-metrics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``supplychain``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotwireless``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release adds support for MLflow connections Creation in DataZone",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisanalytics``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``servicediscovery``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodbstreams``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lookoutvision``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Added inference components model data caching feature",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediastore-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mq``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``billing``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-managed-integrations``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``translate``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``panorama``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``migrationhubstrategy``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-maps``",
+    "description": "Added support for optional AdditionalFeatures parameter in the V2 GetTile API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudtrail``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codepipeline``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pca-connector-ad``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "Add status reasons for TERMINATED stream sessions",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.23.json 2.31.35-1/.changes/2.31.23.json
--- 2.23.6-1/.changes/2.31.23.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.23.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,252 @@
+[
+  {
+    "category": "``accessanalyzer``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``stepfunctions``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lex-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-media-pipelines``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``socialmessaging``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeartifact``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup-gateway``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``aiops``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cost-optimization-hub``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcampaigns``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rbin``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``dax``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3vectors``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``comprehend``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``repostspace``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``waf-regional``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-idp``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``controltower``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``braket``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift-serverless``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``simspaceweaver``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53resolver``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``scheduler``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso-admin``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune-graph``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguruprofiler``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pinpoint``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``athena``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``outposts``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``secretsmanager``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Fixed missing SummaryMap keys in GetAccountSummary response that were being filtered out during deserialization in AWS Java SDK v2",
+    "type": "api-change"
+  },
+  {
+    "category": "``managedblockchain``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``launch-wizard``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workmailmessageflow``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``greengrass``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``elasticbeanstalk``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ses``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``forecast``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-identity``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``route53profiles``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis``",
+    "description": "Adds support for record sizes up to 10MiB and introduces new UpdateMaxRecordSize API to modify stream record size limits. Adds record size parameters to existing CreateStream and DescribeStreamSummary APIs for request and response payloads respectively.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mturk``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rekognition``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-sap``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``invoicing``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "Updated endpoint for eusc-de-east-1 region.",
+    "type": "api-change"
+  },
+  {
+    "category": "``entityresolution``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``shield``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.24.json 2.31.35-1/.changes/2.31.24.json
--- 2.23.6-1/.changes/2.31.24.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.24.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,247 @@
+[
+  {
+    "category": "``inspector-scan``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``pipes``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``migrationhuborchestrator``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sqs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``elastictranscoder``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bcm-pricing-calculator``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kendra``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-deployment``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces``",
+    "description": "Added IPv6 address support for WorkSpaces using Dual-Stack subnets",
+    "type": "api-change"
+  },
+  {
+    "category": "``efs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigatewayv2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``organizations``",
+    "description": "Added Account State field to the ListDelegatedAdministrators API response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearch``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudsearchdomain``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``support-app``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Amazon Simple Storage Service / Features: Add conditional writes in CopyObject on destination key to prevent unintended object modifications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This released the DescribeCapacityReservationTopology API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesisvideo``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Amazon ECS supports native linear and canary service deployments, allowing you to shift traffic in increments for more control.",
+    "type": "api-change"
+  },
+  {
+    "category": "``trustedadvisor``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeguru-security``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Amazon SageMaker now supports deleting training and processing jobs in a terminal status.",
+    "type": "api-change"
+  },
+  {
+    "category": "``detective``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3control``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloud9``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``workspaces-instances``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codeconnections``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``glacier``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "Added support for CloudWatch Synthetics Canary resources in ListAuditFindings API. This enhancement allows customers to retrieve audit findings specifically for CloudWatch Synthetics canaries and enables service-canary correlation analysis.",
+    "type": "api-change"
+  },
+  {
+    "category": "``servicecatalog-appregistry``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ram``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``resource-groups``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``taxsettings``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``partnercentral-selling``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kafkaconnect``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-containers``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``security-ir``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``notifications``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``gameliftstreams``",
+    "description": "Add stream group expiration date and expired status",
+    "type": "api-change"
+  },
+  {
+    "category": "``backupsearch``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``groundstation``",
+    "description": "Enable use of AzEl ephemerides",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanroomsml``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediapackage-vod``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "clients",
+    "description": "The following clients have been removed per deprecation of the services - qldb, qldbsession, robomaker, lookoutmetrics, lookoutvision, iotfleethub, apptest",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Added SerializedRequestEntityTooLargeException to Lambda Invoke API",
+    "type": "api-change"
+  },
+  {
+    "category": "``xray``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-featurestore-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.25.json 2.31.35-1/.changes/2.31.25.json
--- 2.23.6-1/.changes/2.31.25.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.25.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+[
+  {
+    "category": "``bedrock-runtime``",
+    "description": "Add support for system tool and web citation response.",
+    "type": "api-change"
+  },
+  {
+    "category": "Python",
+    "description": "Upgrade bundled Python interpreter to 3.13.9",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.26.json 2.31.35-1/.changes/2.31.26.json
--- 2.23.6-1/.changes/2.31.26.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.26.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,252 @@
+[
+  {
+    "category": "``elasticache``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codecatalyst``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudwatch``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``auditmanager``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Amazon ECS Service Connect now supports Envoy access logs, providing deeper observability into request-level traffic patterns and service interactions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``deadline``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``appmesh``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``marketplace-reporting``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``apigateway``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudsearch``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "Added support for advanced Spark configurations to optimize SQL performance",
+    "type": "api-change"
+  },
+  {
+    "category": "``docdb``",
+    "description": "Adding FailoverState and TagList to GlobalCluster and SynchronizationStatus to GlobalClusterMember.",
+    "type": "api-change"
+  },
+  {
+    "category": "``devops-guru``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iot-managed-integrations``",
+    "description": "Add a new GetManagedThingCertificate API to expose Iot ManagedIntegrations (MI) device certificate, and add  \"-\"  support for name, properties, actions and events in the CapabilityReportCapability object.",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add Anomaly Detection APIs for Amazon Managed Prometheus",
+    "type": "api-change"
+  },
+  {
+    "category": "``neptune``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks-auth``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``frauddetector``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3outposts``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``firehose``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``greengrassv2``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``appflow``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker-runtime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``servicecatalog``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``serverlessrepo``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``sso``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "This release adds the capability to enable User Background Sessions for customers running Trusted Identity Propagation enabled Interactive Sessions on AWS Glue.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sts``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "Add cross account VPC endpoint service connectivity support to CustomKeyStore.",
+    "type": "api-change"
+  },
+  {
+    "category": "``clouddirectory``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``license-manager-linux-subscriptions``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cognito-sync``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codecommit``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``keyspacesstreams``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``iotevents-data``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr-serverless``",
+    "description": "This release adds the capability to enable User Background Sessions for customers running Trusted Identity Propagation enabled Interactive Sessions on EMR Serverless Applications.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Web-Bot-Auth support for AgentCore Browser tool to help reduce captcha challenges.",
+    "type": "api-change"
+  },
+  {
+    "category": "``appconfig``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``artifact``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``geo-places``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``schemas``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``applicationcostprofiler``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudcontrol``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``codedeploy``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``compute-optimizer``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``appsync``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``rtbfabric``",
+    "description": "RTB Fabric documentation update.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.27.json 2.31.35-1/.changes/2.31.27.json
--- 2.23.6-1/.changes/2.31.27.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.27.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,107 @@
+[
+  {
+    "category": "``marketplace-catalog``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``savingsplans``",
+    "description": "Add dual-stack endpoint support for Savings Plans",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm-quicksetup``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``textract``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``emr``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``snowball``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``logs``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Amazon VPC IP Address Manager (IPAM) now supports automated prefix list management, allowing you to create rules that automatically populate customer-managed prefix lists with CIDRs from your IPAM pools or AWS resources based on tags, Regions, or other criteria.",
+    "type": "api-change"
+  },
+  {
+    "category": "``resourcegroupstaggingapi``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconvert``",
+    "description": "Adds SlowPalPitchCorrection to audio pitch correction settings. Enables opacity for VideoOverlays. Adds REMUX_ALL option to enable multi-rendition passthrough to VideoSelector for allow listed accounts.",
+    "type": "api-change"
+  },
+  {
+    "category": "``health``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``fsx``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``lambda``",
+    "description": "Add Python3.14 (python3.14) and Java 25 (java25) support to AWS Lambda",
+    "type": "api-change"
+  },
+  {
+    "category": "``waf``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``omics``",
+    "description": "Added WDL_LENIENT engine type that enables implicit typecasting of variable values to its compatible declared types",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``fms``",
+    "description": "Update endpoint ruleset parameters casing",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography``",
+    "description": "Allow additional characters in the CertificateSubject for GetCertificateSigningRequest API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Allow update of platform identifier via UpdateNotebookInstance operation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "Added two new case rule types: Parent Child Field Options (restricts child field options based on parent field value) and Hidden (controls child field visibility based on parent field value). Both enable dynamic field behavior within templates.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.28.json 2.31.35-1/.changes/2.31.28.json
--- 2.23.6-1/.changes/2.31.28.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.28.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``budgets``",
+    "description": "Fix the AWS Budgets endpoint for the aws-eusc partition.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "Documentation-only update for LINEAR and CANARY deployment strategies.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add Amazon EC2 trn2.3xlarge instance type.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Adds support for direct code deploy with CreateAgentRuntime and UpdateAgentRuntime",
+    "type": "api-change"
+  },
+  {
+    "category": "``kinesis``",
+    "description": "Adds support for MinimumThroughputBillingCommitment with new UpdateAccountSettings API. Adds support to configure warm throughput for on-demand streams in new UpdateStreamWarmThroughput API and existing CreateStream API and UpdateStreamMode API.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.29.json 2.31.35-1/.changes/2.31.29.json
--- 2.23.6-1/.changes/2.31.29.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.29.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7 @@
+[
+  {
+    "category": "``pinpoint-sms-voice-v2``",
+    "description": "This release adds support for the CarrierLookup API, which returns information about a destination phone number including if the number is valid, the carrier, and more.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.3.json 2.31.35-1/.changes/2.31.3.json
--- 2.23.6-1/.changes/2.31.3.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.3.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``billing``",
+    "description": "Add ability to combine custom billing views to create new consolidated views.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Added support for configurable Speaker Labeling and Channel Labeling features for Audio modality.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agent-runtime``",
+    "description": "This release enhances the information provided through Flow Traces. New information includes source/next node tracking, execution chains for complex nodes, dependency action (operation) details, and dependency traces.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "This release includes documentation updates for Amazon EBS General Purpose SSD (gp3) volumes with larger size and higher IOPS and throughput.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Adds supports for manual contact picking (WorkList) operations on Routing Profiles, Agent Management and SearchContacts APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``dynamodbstreams``",
+    "description": "Added support for IPv6 compatible endpoints for DynamoDB Streams.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ce``",
+    "description": "Support for payer account dimension and billing view health status.",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift``",
+    "description": "Support tagging and tag propagation to IAM Identity Center for Redshift Idc Applications",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.30.json 2.31.35-1/.changes/2.31.30.json
--- 2.23.6-1/.changes/2.31.30.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.30.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "This release adds AvailabilityZoneId support for DescribeFastSnapshotRestores, DisableFastSnapshotRestores, and EnableFastSnapshotRestores APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``fsx``",
+    "description": "Amazon FSx now enables secure management of Active Directory credentials through AWS Secrets Manager integration. Customers can use Secret ARNs instead of direct credentials when joining resources to Active Directory domains.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudfront``",
+    "description": "This release adds new and updated API operations. You can now use the IpAddressType field to specify either ipv4 or dualstack for your Anycast static IP list. You can also enable cross-account resource sharing to share your VPC origins with other AWS accounts",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Launch IPv6 dual-stack support for S3 Express",
+    "type": "api-change"
+  },
+  {
+    "category": "``groundstation``",
+    "description": "Introduce CreateDataflowEndpointGroupV2 action",
+    "type": "api-change"
+  },
+  {
+    "category": "``sagemaker``",
+    "description": "Add new fields in SageMaker Hyperpod DescribeCluster API response: TargetStateCount, SoftwareUpdateStatus and ActiveSoftwareDeploymentConfig to provide AMI update progress visibility .",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Added support for Project Resource Tags",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.31.json 2.31.35-1/.changes/2.31.31.json
--- 2.23.6-1/.changes/2.31.31.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.31.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,62 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Added NodeProvisioningMode parameter to UpdateCluster API to determine how instance provisioning is handled during cluster operations; in Continuous mode. Added VpcId field in UpdateDomain request for SageMaker Unified Studio domains with no VPC to add a customer VPC.",
+    "type": "api-change"
+  },
+  {
+    "category": "``accessanalyzer``",
+    "description": "New field totalActiveErrors added to getFindingsStatistics response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Added support for Conditional Questions in Evaluation Forms. Introduced Auto Evaluation capability for Evaluation Forms and Contact Evaluations. Added new API operations: SearchEvaluationForms and SearchContactEvaluations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ssm``",
+    "description": "Provides NoLongerSupportedException error message",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "Adds support for tagging APIs for S3 Tables",
+    "type": "api-change"
+  },
+  {
+    "category": "``identitystore``",
+    "description": "IdentityStore API: added new KMSExceptionReason fields to the Exception object; added multiple new fields to the User APIs - UserStatus, Birthdate, Website and Photos; added multiple new metadata fields for User, Groups and Membership APIs - CreatedAt, CreatedBy, UpdatedAt and UpdatedBy.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Add Amazon EC2 R8a instance types",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Support for New Data Prep Experience",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3vectors``",
+    "description": "Amazon S3 Vectors provides cost-effective, elastic, and durable vector storage for queries based on semantic meaning and similarity.",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "AWS Backup now supports customer-managed keys (CMK) for logically air-gapped vaults, enabling customers to maintain full control over their encryption key lifecycle. This feature helps organizations meet specific internal governance requirements or external regulatory compliance standards.",
+    "type": "api-change"
+  },
+  {
+    "category": "``gamelift``",
+    "description": "Amazon GameLift Servers now supports game builds that use the Windows 2022 operating system.",
+    "type": "api-change"
+  },
+  {
+    "category": "``awscrt``",
+    "description": "Update awscrt version to 0.28.4",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.32.json 2.31.35-1/.changes/2.31.32.json
--- 2.23.6-1/.changes/2.31.32.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.32.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+[
+  {
+    "category": "``ec2``",
+    "description": "Adds PrivateDnsPreference and PrivateDnsSpecifiedDomains to control private DNS resolution for resource and service network VPC endpoints and IpamScopeExternalAuthorityConfiguration to integrate Amazon VPC IPAM with a third-party IPAM service",
+    "type": "api-change"
+  },
+  {
+    "category": "``kms``",
+    "description": "Added support for new ECC_NIST_EDWARDS25519 AWS KMS key spec",
+    "type": "api-change"
+  },
+  {
+    "category": "``controltower``",
+    "description": "Added Parent Identifier support to ListEnabledControls and GetEnabledControl API. Implemented RemediationType support for Landing Zone operations: CreateLandingZone, UpdateLandingZone and GetLandingZone APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``vpc-lattice``",
+    "description": "Amazon VPC Lattice now supports custom domain name for resource configurations",
+    "type": "api-change"
+  },
+  {
+    "category": "``opensearch``",
+    "description": "This release introduces the Default Application feature, allowing users to set, change, or unset a preferred OpenSearch UI application on a per-region basis for a streamlined and consistent user experience.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.33.json 2.31.35-1/.changes/2.31.33.json
--- 2.23.6-1/.changes/2.31.33.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.33.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,77 @@
+[
+  {
+    "category": "``guardduty``",
+    "description": "Include tags filed in CreatePublishingDestinationRequest and DescribePublishingDestinationResponse.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Amazon EC2 Fleet customers can now filter instance types based on encryption-in-transit support using Attribute-Based Instance Type Selection (ABIS), eliminating the manual effort of identifying and selecting compatible instance types for security-sensitive workloads.",
+    "type": "api-change"
+  },
+  {
+    "category": "``acm-pca``",
+    "description": "Private Certificate Authority service now supports ML-DSA key algorithms.",
+    "type": "api-change"
+  },
+  {
+    "category": "``verifiedpermissions``",
+    "description": "Amazon Verified Permissions / Features : Adds support for entity Cedar tags.",
+    "type": "api-change"
+  },
+  {
+    "category": "awscrt",
+    "description": "Exposes new CRT options for S3 file IO",
+    "type": "enhancement"
+  },
+  {
+    "category": "``appstream``",
+    "description": "AWS Appstream support for IPv6",
+    "type": "api-change"
+  },
+  {
+    "category": "``wafv2``",
+    "description": "AWS WAF now supports CLOUDWATCH_TELEMETRY_RULE_MANAGED as a LogScope option, enabling automated logging configuration through Amazon CloudWatch Logs for telemetry data collection and analysis.",
+    "type": "api-change"
+  },
+  {
+    "category": "``sts``",
+    "description": "Added GetDelegatedAccessToken API, which is not available for general use at this time.",
+    "type": "api-change"
+  },
+  {
+    "category": "``iam``",
+    "description": "Added CreateDelegationRequest API, which is not available for general use at this time.",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "Remove trackingServerName from DataZone Connection MLflowProperties",
+    "type": "api-change"
+  },
+  {
+    "category": "``dsql``",
+    "description": "Cluster endpoint added to CreateCluster and GetCluster API responses",
+    "type": "api-change"
+  },
+  {
+    "category": "``invoicing``",
+    "description": "Added new invoicing get-invoice-pdf API Operation",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "AWS Backup supports backups of Amazon EKS clusters, including Kubernetes cluster state and persistent storage attached to the EKS cluster via a persistent volume claim (EBS volumes, EFS file systems, and S3 buckets).",
+    "type": "api-change"
+  },
+  {
+    "category": "``kafka``",
+    "description": "Amazon MSK now supports intelligent rebalancing for MSK Express brokers.",
+    "type": "api-change"
+  },
+  {
+    "category": "``braket``",
+    "description": "Adds ExperimentalCapabilities field to CreateQuantumTask request and GetQuantumTask response objects. Enables use of experimental software capabilities when creating quantum tasks.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.34.json 2.31.35-1/.changes/2.31.34.json
--- 2.23.6-1/.changes/2.31.34.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.34.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``medical-imaging``",
+    "description": "Added new fields in existing APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rtbfabric``",
+    "description": "Added LogSettings and LinkAttribute fields to external links",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "AWS Site-to-Site VPN now supports VPN connections with up to 5 Gbps bandwidth per tunnel, a 4x improvement from existing limit of 1.25 Gbps.",
+    "type": "api-change"
+  },
+  {
+    "category": "``security-ir``",
+    "description": "Added support for configuring communication preferences as well as clearly displaying case comment author identities.",
+    "type": "api-change"
+  },
+  {
+    "category": "``batch``",
+    "description": "Documentation-only update: update API and doc descriptions per EKS ImageType default value switch from AL2 to AL2023.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-data-automation``",
+    "description": "Added support for Language Expansion feature for BDA Audio modality.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.35.json 2.31.35-1/.changes/2.31.35.json
--- 2.23.6-1/.changes/2.31.35.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.35.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``sagemaker``",
+    "description": "Add support for trn2.3xlarge instance type for SageMaker Hyperpod",
+    "type": "api-change"
+  },
+  {
+    "category": "``connect``",
+    "description": "Updated Authentication Profile APIs to add support for automatic logout on user inactivity",
+    "type": "api-change"
+  },
+  {
+    "category": "``amp``",
+    "description": "Add VPC source configuration support enabling Amazon Managed Service for Prometheus Collector to collect metrics from MSK clusters.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ec2``",
+    "description": "Adds complete AMI ancestry tracing from immediate parent through each preceding generation back to the root AMI",
+    "type": "api-change"
+  },
+  {
+    "category": "``dms``",
+    "description": "Added support of SQL statements creation, metadata model discovery and selection rules transformation.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3tables``",
+    "description": "Adds support for request metrics metrics APIs for S3 Tables",
+    "type": "api-change"
+  },
+  {
+    "category": "``redshift``",
+    "description": "Added GetIdentityCenterAuthToken API to retrieve encrypted authentication tokens for Identity Center integrated applications. This API enables programmatic access to secure Identity Center tokens with proper error handling and parameter validation across supported SDK languages.",
+    "type": "api-change"
+  },
+  {
+    "category": "``elbv2``",
+    "description": "This release expands ALB Authentication to support JWT verification and adds support for a new JWT validation action in listener rule.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.4.json 2.31.35-1/.changes/2.31.4.json
--- 2.23.6-1/.changes/2.31.4.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.4.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``vpc-lattice``",
+    "description": "Adds support for specifying the number of IPv4 addresses in each ENI for the resource gateway for VPC Lattice.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock``",
+    "description": "Release for fixing GetFoundationModel API behavior. Imported and custom models have their own exclusive API and GetFM should not accept those ARNS as input",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-runtime``",
+    "description": "New stop reason for Converse and ConverseStream",
+    "type": "api-change"
+  },
+  {
+    "category": "``imagebuilder``",
+    "description": "This release introduces several new features and improvements to enhance pipeline management, logging, and resource configuration.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.5.json 2.31.35-1/.changes/2.31.5.json
--- 2.23.6-1/.changes/2.31.5.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.5.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,72 @@
+[
+  {
+    "category": "``fsx``",
+    "description": "Add Dual-Stack support for Amazon FSx for NetApp ONTAP and Windows File Server",
+    "type": "api-change"
+  },
+  {
+    "category": "``datasync``",
+    "description": "Added support for FIPS VPC endpoints in FIPS-enabled AWS Regions.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Tagging support for AgentCore Gateway",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "This release adds support for two new related item types: ConnectCase for linking Amazon Connect cases and Custom for user-defined related items with configurable fields.",
+    "type": "api-change"
+  },
+  {
+    "category": "``rds``",
+    "description": "Enhanced RDS error handling: Added DBProxyEndpointNotFoundFault, DBShardGroupNotFoundFault, KMSKeyNotAccessibleFault for snapshots/restores/backups, NetworkTypeNotSupported, StorageTypeNotSupportedFault for restores, and granular state validation faults. Changed DBInstanceNotReadyFault to HTTP 400.",
+    "type": "api-change"
+  },
+  {
+    "category": "``transfer``",
+    "description": "Add support for updating server identity provider type",
+    "type": "api-change"
+  },
+  {
+    "category": "``datazone``",
+    "description": "This release adds support for creation of EMR on EKS Connections in Amazon DataZone.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ds``",
+    "description": "AWS Directory service now supports IPv6-native and dual-stack configurations for AWS Managed Microsoft AD, AD Connector, and Simple AD (dual-stack only). Additionally, AWS Managed Microsoft AD Standard Edition directories can be upgraded to Enterprise Edition directories through a single API call.",
+    "type": "api-change"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This release adds support for Managed Instances on Amazon ECS.",
+    "type": "api-change"
+  },
+  {
+    "category": "``customer-profiles``",
+    "description": "This release introduces ListProfileHistoryRecords and GetProfileHistoryRecord APIs for comprehensive profile history tracking with complete audit trails of creation, updates, merges, deletions, and data ingestion events.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "added warnings to a few CLI pages",
+    "type": "api-change"
+  },
+  {
+    "category": "``chime-sdk-voice``",
+    "description": "Added support for IPv4-only and dual-stack network configurations for VoiceConnector and CreateVoiceConnector API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``application-signals``",
+    "description": "Amazon CloudWatch Application Signals is introducing the Application Map to give users a more comprehensive view of their service health. Users will now be able to group services, track their latest deployments, and view automated audit findings concerning service performance.",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediatailor``",
+    "description": "Adding TPS Traffic Shaping to Prefetch Schedules",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.6.json 2.31.35-1/.changes/2.31.6.json
--- 2.23.6-1/.changes/2.31.6.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.6.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,42 @@
+[
+  {
+    "category": "``dms``",
+    "description": "This is a doc-only update, revising text for kms-key-arns.",
+    "type": "api-change"
+  },
+  {
+    "category": "``botocore``",
+    "description": "Fix HTTP 100 Continue parsing to accept optional reason phrase",
+    "type": "bugfix"
+  },
+  {
+    "category": "``ecs``",
+    "description": "This is a documentation only Amazon ECS release that adds additional information for health checks.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "This release introduces data access budgets to control how many times a table can be used for queries and jobs in a collaboration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``s3``",
+    "description": "Fix CancelledError retry loops to enable immediate S3 upload cancellation",
+    "type": "bugfix"
+  },
+  {
+    "category": "``chime-sdk-meetings``",
+    "description": "Add support to receive dual stack MediaPlacement URLs in Chime Meetings SDK",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanroomsml``",
+    "description": "This release introduces data access budgets to view how many times an input channel can be used for ML jobs in a collaboration.",
+    "type": "api-change"
+  },
+  {
+    "category": "``pcs``",
+    "description": "Added the UpdateCluster API action to modify cluster configurations, and Slurm custom settings for queues.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.7.json 2.31.35-1/.changes/2.31.7.json
--- 2.23.6-1/.changes/2.31.7.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.7.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+[
+  {
+    "category": "``dynamodb``",
+    "description": "Add support for dual-stack account endpoint generation",
+    "type": "api-change"
+  },
+  {
+    "category": "``cloudformation``",
+    "description": "Add new warning type 'EXCLUDED_RESOURCES'",
+    "type": "api-change"
+  },
+  {
+    "category": "``guardduty``",
+    "description": "Updated descriptions for the Location parameter in CreateTrustedEntitySet and CreateThreatEntitySet.",
+    "type": "api-change"
+  },
+  {
+    "category": "``synthetics``",
+    "description": "Adds support to configure canaries with pre-configured blueprint code on supported runtime versions.  This behavior can be controlled via the new BlueprintTypes property exposed in the CreateCanary and UpdateCanary APIs.",
+    "type": "api-change"
+  },
+  {
+    "category": "``connectcases``",
+    "description": "New Search All Related Items API enables searching related items across cases",
+    "type": "api-change"
+  },
+  {
+    "category": "``eks``",
+    "description": "Add ``proxy-url`` to ``aws eks update-kubeconfig``",
+    "type": "enhancement"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.8.json 2.31.35-1/.changes/2.31.8.json
--- 2.23.6-1/.changes/2.31.8.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.8.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+[
+  {
+    "category": "``qconnect``",
+    "description": "Updated Amazon Q in Connect APIs to support Email Contact Recommendations.",
+    "type": "api-change"
+  },
+  {
+    "category": "``payment-cryptography-data``",
+    "description": "Added a new API - translateKeyMaterial; allows keys wrapped by ECDH derived keys to be rewrapped under a static AES keyblock without first importing the key into the service.",
+    "type": "api-change"
+  },
+  {
+    "category": "``medialive``",
+    "description": "AWS Elemental MediaLive enables Mediapackage V2 users to configure ID3, KLV, Nielsen ID3, and Segment Length related parameters through the Mediapackage output group.",
+    "type": "api-change"
+  },
+  {
+    "category": "``cleanrooms``",
+    "description": "Added support for reading data sources across regions, and results delivery to allowedlisted regions.",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.changes/2.31.9.json 2.31.35-1/.changes/2.31.9.json
--- 2.23.6-1/.changes/2.31.9.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/.changes/2.31.9.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+[
+  {
+    "category": "``rds``",
+    "description": "Documentation updates to the CreateDBClusterMessage$PubliclyAccessible and CreateDBInstanceMessage$PubliclyAccessible properties.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore-control``",
+    "description": "Add support for VM lifecycle configuration parameters and A2A protocol",
+    "type": "api-change"
+  },
+  {
+    "category": "``mediaconnect``",
+    "description": "Enabling Tag-on-Create for AWS Elemental MediaConnect flow-based resource types",
+    "type": "api-change"
+  },
+  {
+    "category": "``backup``",
+    "description": "Adds optional MaxScheduledRunsPreview input to GetBackupPlan API to provide a preview of up to 10 next scheduled backup plan runs in the GetBackupPlan response.",
+    "type": "api-change"
+  },
+  {
+    "category": "``quicksight``",
+    "description": "Documentation improvements for QuickSight API documentation to clarify that delete operation APIs are global.",
+    "type": "api-change"
+  },
+  {
+    "category": "``glue``",
+    "description": "Adds labeling for DataQualityRuleResult for GetDataQualityResult and PublishDataQualityResult APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``resource-explorer-2``",
+    "description": "Add new AWS Resource Explorer APIs",
+    "type": "api-change"
+  },
+  {
+    "category": "``memorydb``",
+    "description": "Support for DescribeMultiRegionParameterGroups and DescribeMultiRegionParameters API.",
+    "type": "api-change"
+  },
+  {
+    "category": "``bedrock-agentcore``",
+    "description": "Add support for batch memory management, agent card retrieval and session termination",
+    "type": "api-change"
+  }
+]
\ No newline at end of file
diff -pruN 2.23.6-1/.github/dependabot.yml 2.31.35-1/.github/dependabot.yml
--- 2.23.6-1/.github/dependabot.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/dependabot.yml	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,6 @@ updates:
       - dependency-name: "flit_core"
       - dependency-name: "colorama"
       - dependency-name: "docutils"
-      - dependency-name: "cryptography"
       - dependency-name: "awscrt"
       - dependency-name: "ruamel.yaml"
       - dependency-name: "ruamel.yaml.clib"
diff -pruN 2.23.6-1/.github/workflows/changelog.yml 2.31.35-1/.github/workflows/changelog.yml
--- 2.23.6-1/.github/workflows/changelog.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/changelog.yml	2025-11-12 19:17:29.000000000 +0000
@@ -53,7 +53,7 @@ jobs:
     - name: Set up Python ${{ matrix.python-version }}
       uses: actions/setup-python@v5
       with:
-        python-version: "3.12"
+        python-version: "3.13"
     - name: Create changelog
       run: |
         python scripts/new-change -t '${{ github.event.inputs.type }}' -c '${{ github.event.inputs.category }}' -d '${{ github.event.inputs.description }}'
diff -pruN 2.23.6-1/.github/workflows/handle-stale-discussions.yml 2.31.35-1/.github/workflows/handle-stale-discussions.yml
--- 2.23.6-1/.github/workflows/handle-stale-discussions.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/handle-stale-discussions.yml	2025-11-12 19:17:29.000000000 +0000
@@ -7,6 +7,7 @@ on:
 
 jobs:
   handle-stale-discussions:
+    if: ${{ github.event.repository.fork == false || github.event_name != 'schedule' }}
     name: Handle stale discussions
     runs-on: ubuntu-latest
     permissions:
diff -pruN 2.23.6-1/.github/workflows/run-dep-tests.yml 2.31.35-1/.github/workflows/run-dep-tests.yml
--- 2.23.6-1/.github/workflows/run-dep-tests.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/run-dep-tests.yml	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,8 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
-        # macOS pinned to 13 due to 14+ defaulting to arm64 hardware
-        os: [ubuntu-latest, macOS-13, windows-latest]
+        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
+        os: [ubuntu-latest, macOS-latest, windows-latest]
 
     steps:
     - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
diff -pruN 2.23.6-1/.github/workflows/run-tests.yml 2.31.35-1/.github/workflows/run-tests.yml
--- 2.23.6-1/.github/workflows/run-tests.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/run-tests.yml	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
+        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
         os: [ubuntu-latest, macOS-latest, windows-latest]
 
     steps:
diff -pruN 2.23.6-1/.github/workflows/source-dist-tests.yml 2.31.35-1/.github/workflows/source-dist-tests.yml
--- 2.23.6-1/.github/workflows/source-dist-tests.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/source-dist-tests.yml	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,12 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
-        # macOS pinned to 13 due to 14+ defaulting to arm64 hardware
-        os: [ubuntu-latest, macOS-13, windows-latest]
-
+        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
+        os: [ubuntu-latest, macOS-latest, windows-latest]
     steps:
     - uses: actions/checkout@v2
     - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v2
+      uses: actions/setup-python@v5
       with:
         python-version: ${{ matrix.python-version }}
     - name: Install dependencies
diff -pruN 2.23.6-1/.github/workflows/stale_issue.yml 2.31.35-1/.github/workflows/stale_issue.yml
--- 2.23.6-1/.github/workflows/stale_issue.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/stale_issue.yml	2025-11-12 19:17:29.000000000 +0000
@@ -7,6 +7,7 @@ on:
 
 jobs:
   cleanup:
+    if: github.event.repository.fork == false
     permissions:
       issues: write
       contents: read
diff -pruN 2.23.6-1/.github/workflows/update-lockfiles.yml 2.31.35-1/.github/workflows/update-lockfiles.yml
--- 2.23.6-1/.github/workflows/update-lockfiles.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.github/workflows/update-lockfiles.yml	2025-11-12 19:17:29.000000000 +0000
@@ -27,7 +27,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.12"]
+        python-version: ["3.13"]
         os: [macOS-latest, windows-latest]
 
     steps:
diff -pruN 2.23.6-1/.gitignore 2.31.35-1/.gitignore
--- 2.23.6-1/.gitignore	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.gitignore	2025-11-12 19:17:29.000000000 +0000
@@ -77,4 +77,4 @@ autom4te.cache
 /depcomp
 /install-sh
 /missing
-/stamp-h1
\ No newline at end of file
+/stamp-h1
diff -pruN 2.23.6-1/.pre-commit-config.yaml 2.31.35-1/.pre-commit-config.yaml
--- 2.23.6-1/.pre-commit-config.yaml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/.pre-commit-config.yaml	2025-11-12 19:17:29.000000000 +0000
@@ -2,17 +2,22 @@ exclude: "\
     ^(\
     .changes|\
     .github|\
+    CHANGELOG.rst|\
+    configure|\
     awscli/examples|\
     awscli/topics|\
-    awscli/botocore|\
-    awscli/s3transfer|\
-    awscli/doc|\
+    awscli/botocore/data|\
+    awscli/botocore/vendored|\
+    awscli/botocore/compat.py|\
+    awscli/s3transfer/compat.py|\
+    doc/source/guzzle_sphinx_theme|\
     exe/assets|\
+    tests/functional/botocore/endpoint-rules|\
     tests/functional/cloudformation/deploy_templates/booleans/input.yml|\
     tests/functional/cloudformation/deploy_templates/nested-tag/input.yml|\
-    tests/|\
-    CHANGELOG.rst|\
-    configure\
+    tests/unit/botocore/auth/aws4_testsuite|\
+    tests/unit/botocore/data/endpoints/|\
+    tests/unit/botocore/response_parsing/xml\
     )"
 repos:
   - repo: 'https://github.com/pre-commit/pre-commit-hooks'
diff -pruN 2.23.6-1/CHANGELOG.rst 2.31.35-1/CHANGELOG.rst
--- 2.23.6-1/CHANGELOG.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/CHANGELOG.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,2734 @@
 CHANGELOG
 =========
 
+2.31.35
+=======
+
+* api-change:``sagemaker``: Add support for trn2.3xlarge instance type for SageMaker Hyperpod
+* api-change:``connect``: Updated Authentication Profile APIs to add support for automatic logout on user inactivity
+* api-change:``amp``: Add VPC source configuration support enabling Amazon Managed Service for Prometheus Collector to collect metrics from MSK clusters.
+* api-change:``ec2``: Adds complete AMI ancestry tracing from immediate parent through each preceding generation back to the root AMI
+* api-change:``dms``: Added support of SQL statements creation, metadata model discovery and selection rules transformation.
+* api-change:``s3tables``: Adds support for request metrics metrics APIs for S3 Tables
+* api-change:``redshift``: Added GetIdentityCenterAuthToken API to retrieve encrypted authentication tokens for Identity Center integrated applications. This API enables programmatic access to secure Identity Center tokens with proper error handling and parameter validation across supported SDK languages.
+* api-change:``elbv2``: This release expands ALB Authentication to support JWT verification and adds support for a new JWT validation action in listener rule.
+
+
+2.31.34
+=======
+
+* api-change:``medical-imaging``: Added new fields in existing APIs.
+* api-change:``rtbfabric``: Added LogSettings and LinkAttribute fields to external links
+* api-change:``ec2``: AWS Site-to-Site VPN now supports VPN connections with up to 5 Gbps bandwidth per tunnel, a 4x improvement from existing limit of 1.25 Gbps.
+* api-change:``security-ir``: Added support for configuring communication preferences as well as clearly displaying case comment author identities.
+* api-change:``batch``: Documentation-only update: update API and doc descriptions per EKS ImageType default value switch from AL2 to AL2023.
+* api-change:``bedrock-data-automation``: Added support for Language Expansion feature for BDA Audio modality.
+
+
+2.31.33
+=======
+
+* api-change:``guardduty``: Include tags filed in CreatePublishingDestinationRequest and DescribePublishingDestinationResponse.
+* api-change:``ec2``: Amazon EC2 Fleet customers can now filter instance types based on encryption-in-transit support using Attribute-Based Instance Type Selection (ABIS), eliminating the manual effort of identifying and selecting compatible instance types for security-sensitive workloads.
+* api-change:``acm-pca``: Private Certificate Authority service now supports ML-DSA key algorithms.
+* api-change:``verifiedpermissions``: Amazon Verified Permissions / Features : Adds support for entity Cedar tags.
+* enhancement:awscrt: Exposes new CRT options for S3 file IO
+* api-change:``appstream``: AWS Appstream support for IPv6
+* api-change:``wafv2``: AWS WAF now supports CLOUDWATCH_TELEMETRY_RULE_MANAGED as a LogScope option, enabling automated logging configuration through Amazon CloudWatch Logs for telemetry data collection and analysis.
+* api-change:``sts``: Added GetDelegatedAccessToken API, which is not available for general use at this time.
+* api-change:``iam``: Added CreateDelegationRequest API, which is not available for general use at this time.
+* api-change:``datazone``: Remove trackingServerName from DataZone Connection MLflowProperties
+* api-change:``dsql``: Cluster endpoint added to CreateCluster and GetCluster API responses
+* api-change:``invoicing``: Added new invoicing get-invoice-pdf API Operation
+* api-change:``backup``: AWS Backup supports backups of Amazon EKS clusters, including Kubernetes cluster state and persistent storage attached to the EKS cluster via a persistent volume claim (EBS volumes, EFS file systems, and S3 buckets).
+* api-change:``kafka``: Amazon MSK now supports intelligent rebalancing for MSK Express brokers.
+* api-change:``braket``: Adds ExperimentalCapabilities field to CreateQuantumTask request and GetQuantumTask response objects. Enables use of experimental software capabilities when creating quantum tasks.
+
+
+2.31.32
+=======
+
+* api-change:``ec2``: Adds PrivateDnsPreference and PrivateDnsSpecifiedDomains to control private DNS resolution for resource and service network VPC endpoints and IpamScopeExternalAuthorityConfiguration to integrate Amazon VPC IPAM with a third-party IPAM service
+* api-change:``kms``: Added support for new ECC_NIST_EDWARDS25519 AWS KMS key spec
+* api-change:``controltower``: Added Parent Identifier support to ListEnabledControls and GetEnabledControl API. Implemented RemediationType support for Landing Zone operations: CreateLandingZone, UpdateLandingZone and GetLandingZone APIs
+* api-change:``vpc-lattice``: Amazon VPC Lattice now supports custom domain name for resource configurations
+* api-change:``opensearch``: This release introduces the Default Application feature, allowing users to set, change, or unset a preferred OpenSearch UI application on a per-region basis for a streamlined and consistent user experience.
+
+
+2.31.31
+=======
+
+* api-change:``sagemaker``: Added NodeProvisioningMode parameter to UpdateCluster API to determine how instance provisioning is handled during cluster operations; in Continuous mode. Added VpcId field in UpdateDomain request for SageMaker Unified Studio domains with no VPC to add a customer VPC.
+* api-change:``accessanalyzer``: New field totalActiveErrors added to getFindingsStatistics response.
+* api-change:``connect``: Added support for Conditional Questions in Evaluation Forms. Introduced Auto Evaluation capability for Evaluation Forms and Contact Evaluations. Added new API operations: SearchEvaluationForms and SearchContactEvaluations.
+* api-change:``ssm``: Provides NoLongerSupportedException error message
+* api-change:``s3tables``: Adds support for tagging APIs for S3 Tables
+* api-change:``identitystore``: IdentityStore API: added new KMSExceptionReason fields to the Exception object; added multiple new fields to the User APIs - UserStatus, Birthdate, Website and Photos; added multiple new metadata fields for User, Groups and Membership APIs - CreatedAt, CreatedBy, UpdatedAt and UpdatedBy.
+* api-change:``ec2``: Add Amazon EC2 R8a instance types
+* api-change:``quicksight``: Support for New Data Prep Experience
+* api-change:``s3vectors``: Amazon S3 Vectors provides cost-effective, elastic, and durable vector storage for queries based on semantic meaning and similarity.
+* api-change:``backup``: AWS Backup now supports customer-managed keys (CMK) for logically air-gapped vaults, enabling customers to maintain full control over their encryption key lifecycle. This feature helps organizations meet specific internal governance requirements or external regulatory compliance standards.
+* api-change:``gamelift``: Amazon GameLift Servers now supports game builds that use the Windows 2022 operating system.
+* enhancement:``awscrt``: Update awscrt version to 0.28.4
+
+
+2.31.30
+=======
+
+* api-change:``ec2``: This release adds AvailabilityZoneId support for DescribeFastSnapshotRestores, DisableFastSnapshotRestores, and EnableFastSnapshotRestores APIs.
+* api-change:``fsx``: Amazon FSx now enables secure management of Active Directory credentials through AWS Secrets Manager integration. Customers can use Secret ARNs instead of direct credentials when joining resources to Active Directory domains.
+* api-change:``cloudfront``: This release adds new and updated API operations. You can now use the IpAddressType field to specify either ipv4 or dualstack for your Anycast static IP list. You can also enable cross-account resource sharing to share your VPC origins with other AWS accounts
+* api-change:``s3``: Launch IPv6 dual-stack support for S3 Express
+* api-change:``groundstation``: Introduce CreateDataflowEndpointGroupV2 action
+* api-change:``sagemaker``: Add new fields in SageMaker Hyperpod DescribeCluster API response: TargetStateCount, SoftwareUpdateStatus and ActiveSoftwareDeploymentConfig to provide AMI update progress visibility .
+* api-change:``datazone``: Added support for Project Resource Tags
+
+
+2.31.29
+=======
+
+* api-change:``pinpoint-sms-voice-v2``: This release adds support for the CarrierLookup API, which returns information about a destination phone number including if the number is valid, the carrier, and more.
+
+
+2.31.28
+=======
+
+* api-change:``budgets``: Fix the AWS Budgets endpoint for the aws-eusc partition.
+* api-change:``ecs``: Documentation-only update for LINEAR and CANARY deployment strategies.
+* api-change:``ec2``: Add Amazon EC2 trn2.3xlarge instance type.
+* api-change:``bedrock-agentcore-control``: Adds support for direct code deploy with CreateAgentRuntime and UpdateAgentRuntime
+* api-change:``kinesis``: Adds support for MinimumThroughputBillingCommitment with new UpdateAccountSettings API. Adds support to configure warm throughput for on-demand streams in new UpdateStreamWarmThroughput API and existing CreateStream API and UpdateStreamMode API.
+
+
+2.31.27
+=======
+
+* api-change:``marketplace-catalog``: Update endpoint ruleset parameters casing
+* api-change:``savingsplans``: Add dual-stack endpoint support for Savings Plans
+* api-change:``ssm-quicksetup``: Update endpoint ruleset parameters casing
+* api-change:``redshift``: Update endpoint ruleset parameters casing
+* api-change:``textract``: Update endpoint ruleset parameters casing
+* api-change:``emr``: Update endpoint ruleset parameters casing
+* api-change:``snowball``: Update endpoint ruleset parameters casing
+* api-change:``logs``: Update endpoint ruleset parameters casing
+* api-change:``ec2``: Amazon VPC IP Address Manager (IPAM) now supports automated prefix list management, allowing you to create rules that automatically populate customer-managed prefix lists with CIDRs from your IPAM pools or AWS resources based on tags, Regions, or other criteria.
+* api-change:``resourcegroupstaggingapi``: Update endpoint ruleset parameters casing
+* api-change:``mediaconvert``: Adds SlowPalPitchCorrection to audio pitch correction settings. Enables opacity for VideoOverlays. Adds REMUX_ALL option to enable multi-rendition passthrough to VideoSelector for allow listed accounts.
+* api-change:``health``: Update endpoint ruleset parameters casing
+* api-change:``fsx``: Update endpoint ruleset parameters casing
+* api-change:``lambda``: Add Python3.14 (python3.14) and Java 25 (java25) support to AWS Lambda
+* api-change:``waf``: Update endpoint ruleset parameters casing
+* api-change:``omics``: Added WDL_LENIENT engine type that enables implicit typecasting of variable values to its compatible declared types
+* api-change:``kinesis``: Update endpoint ruleset parameters casing
+* api-change:``fms``: Update endpoint ruleset parameters casing
+* api-change:``payment-cryptography``: Allow additional characters in the CertificateSubject for GetCertificateSigningRequest API.
+* api-change:``sagemaker``: Allow update of platform identifier via UpdateNotebookInstance operation.
+* api-change:``connectcases``: Added two new case rule types: Parent Child Field Options (restricts child field options based on parent field value) and Hidden (controls child field visibility based on parent field value). Both enable dynamic field behavior within templates.
+
+
+2.31.26
+=======
+
+* api-change:``elasticache``: Update endpoint ruleset parameters casing
+* api-change:``codecatalyst``: Update endpoint ruleset parameters casing
+* api-change:``cloudwatch``: Update endpoint ruleset parameters casing
+* api-change:``auditmanager``: Update endpoint ruleset parameters casing
+* api-change:``ecs``: Amazon ECS Service Connect now supports Envoy access logs, providing deeper observability into request-level traffic patterns and service interactions.
+* api-change:``deadline``: Update endpoint ruleset parameters casing
+* api-change:``appmesh``: Update endpoint ruleset parameters casing
+* api-change:``marketplace-reporting``: Update endpoint ruleset parameters casing
+* api-change:``apigateway``: Update endpoint ruleset parameters casing
+* api-change:``cloudsearch``: Update endpoint ruleset parameters casing
+* api-change:``cleanrooms``: Added support for advanced Spark configurations to optimize SQL performance
+* api-change:``docdb``: Adding FailoverState and TagList to GlobalCluster and SynchronizationStatus to GlobalClusterMember.
+* api-change:``devops-guru``: Update endpoint ruleset parameters casing
+* api-change:``iot-managed-integrations``: Add a new GetManagedThingCertificate API to expose Iot ManagedIntegrations (MI) device certificate, and add  "-"  support for name, properties, actions and events in the CapabilityReportCapability object.
+* api-change:``amp``: Add Anomaly Detection APIs for Amazon Managed Prometheus
+* api-change:``neptune``: Update endpoint ruleset parameters casing
+* api-change:``eks-auth``: Update endpoint ruleset parameters casing
+* api-change:``frauddetector``: Update endpoint ruleset parameters casing
+* api-change:``s3outposts``: Update endpoint ruleset parameters casing
+* api-change:``connectcases``: Update endpoint ruleset parameters casing
+* api-change:``firehose``: Update endpoint ruleset parameters casing
+* api-change:``greengrassv2``: Update endpoint ruleset parameters casing
+* api-change:``appflow``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker-runtime``: Update endpoint ruleset parameters casing
+* api-change:``servicecatalog``: Update endpoint ruleset parameters casing
+* api-change:``serverlessrepo``: Update endpoint ruleset parameters casing
+* api-change:``sso``: Update endpoint ruleset parameters casing
+* api-change:``glue``: This release adds the capability to enable User Background Sessions for customers running Trusted Identity Propagation enabled Interactive Sessions on AWS Glue.
+* api-change:``sts``: Update endpoint ruleset parameters casing
+* api-change:``chime``: Update endpoint ruleset parameters casing
+* api-change:``kms``: Add cross account VPC endpoint service connectivity support to CustomKeyStore.
+* api-change:``clouddirectory``: Update endpoint ruleset parameters casing
+* api-change:``license-manager-linux-subscriptions``: Update endpoint ruleset parameters casing
+* api-change:``cognito-sync``: Update endpoint ruleset parameters casing
+* api-change:``codecommit``: Update endpoint ruleset parameters casing
+* api-change:``keyspacesstreams``: Update endpoint ruleset parameters casing
+* api-change:``iotevents-data``: Update endpoint ruleset parameters casing
+* api-change:``emr-serverless``: This release adds the capability to enable User Background Sessions for customers running Trusted Identity Propagation enabled Interactive Sessions on EMR Serverless Applications.
+* api-change:``bedrock-agentcore-control``: Web-Bot-Auth support for AgentCore Browser tool to help reduce captcha challenges.
+* api-change:``appconfig``: Update endpoint ruleset parameters casing
+* api-change:``artifact``: Update endpoint ruleset parameters casing
+* api-change:``geo-places``: Update endpoint ruleset parameters casing
+* api-change:``schemas``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-agent``: Update endpoint ruleset parameters casing
+* api-change:``applicationcostprofiler``: Update endpoint ruleset parameters casing
+* api-change:``cloudcontrol``: Update endpoint ruleset parameters casing
+* api-change:``codedeploy``: Update endpoint ruleset parameters casing
+* api-change:``compute-optimizer``: Update endpoint ruleset parameters casing
+* api-change:``appsync``: Update endpoint ruleset parameters casing
+* api-change:``rtbfabric``: RTB Fabric documentation update.
+
+
+2.31.25
+=======
+
+* api-change:``bedrock-runtime``: Add support for system tool and web citation response.
+* enhancement:Python: Upgrade bundled Python interpreter to 3.13.9
+
+
+2.31.24
+=======
+
+* api-change:``inspector-scan``: Update endpoint ruleset parameters casing
+* api-change:``pipes``: Update endpoint ruleset parameters casing
+* api-change:``migrationhuborchestrator``: Update endpoint ruleset parameters casing
+* api-change:``sqs``: Update endpoint ruleset parameters casing
+* api-change:``elastictranscoder``: Update endpoint ruleset parameters casing
+* api-change:``bcm-pricing-calculator``: Update endpoint ruleset parameters casing
+* api-change:``kendra``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-runtime``: Update endpoint ruleset parameters casing
+* api-change:``marketplace-deployment``: Update endpoint ruleset parameters casing
+* api-change:``workspaces``: Added IPv6 address support for WorkSpaces using Dual-Stack subnets
+* api-change:``efs``: Update endpoint ruleset parameters casing
+* api-change:``apigatewayv2``: Update endpoint ruleset parameters casing
+* api-change:``organizations``: Added Account State field to the ListDelegatedAdministrators API response.
+* api-change:``opensearch``: Update endpoint ruleset parameters casing
+* api-change:``cloudsearchdomain``: Update endpoint ruleset parameters casing
+* api-change:``support-app``: Update endpoint ruleset parameters casing
+* api-change:``s3``: Amazon Simple Storage Service / Features: Add conditional writes in CopyObject on destination key to prevent unintended object modifications.
+* api-change:``ec2``: This released the DescribeCapacityReservationTopology API.
+* api-change:``kinesisvideo``: Update endpoint ruleset parameters casing
+* api-change:``ecs``: Amazon ECS supports native linear and canary service deployments, allowing you to shift traffic in increments for more control.
+* api-change:``trustedadvisor``: Update endpoint ruleset parameters casing
+* api-change:``codeguru-security``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker``: Amazon SageMaker now supports deleting training and processing jobs in a terminal status.
+* api-change:``detective``: Update endpoint ruleset parameters casing
+* api-change:``s3control``: Update endpoint ruleset parameters casing
+* api-change:``cloud9``: Update endpoint ruleset parameters casing
+* api-change:``workspaces-instances``: Update endpoint ruleset parameters casing
+* api-change:``codeconnections``: Update endpoint ruleset parameters casing
+* api-change:``glacier``: Update endpoint ruleset parameters casing
+* api-change:``application-signals``: Added support for CloudWatch Synthetics Canary resources in ListAuditFindings API. This enhancement allows customers to retrieve audit findings specifically for CloudWatch Synthetics canaries and enables service-canary correlation analysis.
+* api-change:``servicecatalog-appregistry``: Update endpoint ruleset parameters casing
+* api-change:``ram``: Update endpoint ruleset parameters casing
+* api-change:``resource-groups``: Update endpoint ruleset parameters casing
+* api-change:``taxsettings``: Update endpoint ruleset parameters casing
+* api-change:``partnercentral-selling``: Update endpoint ruleset parameters casing
+* api-change:``kafkaconnect``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-agent-runtime``: Update endpoint ruleset parameters casing
+* api-change:``emr-containers``: Update endpoint ruleset parameters casing
+* api-change:``security-ir``: Update endpoint ruleset parameters casing
+* api-change:``notifications``: Update endpoint ruleset parameters casing
+* api-change:``gameliftstreams``: Add stream group expiration date and expired status
+* api-change:``backupsearch``: Update endpoint ruleset parameters casing
+* api-change:``groundstation``: Enable use of AzEl ephemerides
+* api-change:``cleanroomsml``: Update endpoint ruleset parameters casing
+* api-change:``mediapackage-vod``: Update endpoint ruleset parameters casing
+* api-change:clients: The following clients have been removed per deprecation of the services - qldb, qldbsession, robomaker, lookoutmetrics, lookoutvision, iotfleethub, apptest
+* api-change:``lambda``: Added SerializedRequestEntityTooLargeException to Lambda Invoke API
+* api-change:``xray``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker-featurestore-runtime``: Update endpoint ruleset parameters casing
+
+
+2.31.23
+=======
+
+* api-change:``accessanalyzer``: Update endpoint ruleset parameters casing
+* api-change:``stepfunctions``: Update endpoint ruleset parameters casing
+* api-change:``lex-runtime``: Update endpoint ruleset parameters casing
+* api-change:``chime-sdk-media-pipelines``: Update endpoint ruleset parameters casing
+* api-change:``socialmessaging``: Update endpoint ruleset parameters casing
+* api-change:``codeartifact``: Update endpoint ruleset parameters casing
+* api-change:``backup-gateway``: Update endpoint ruleset parameters casing
+* api-change:``aiops``: Update endpoint ruleset parameters casing
+* api-change:``cost-optimization-hub``: Update endpoint ruleset parameters casing
+* api-change:``connectcampaigns``: Update endpoint ruleset parameters casing
+* api-change:``rbin``: Update endpoint ruleset parameters casing
+* api-change:``dax``: Update endpoint ruleset parameters casing
+* api-change:``s3vectors``: Update endpoint ruleset parameters casing
+* api-change:``comprehend``: Update endpoint ruleset parameters casing
+* api-change:``repostspace``: Update endpoint ruleset parameters casing
+* api-change:``waf-regional``: Update endpoint ruleset parameters casing
+* api-change:``cognito-idp``: Update endpoint ruleset parameters casing
+* api-change:``controltower``: Update endpoint ruleset parameters casing
+* api-change:``braket``: Update endpoint ruleset parameters casing
+* api-change:``redshift-serverless``: Update endpoint ruleset parameters casing
+* api-change:``simspaceweaver``: Update endpoint ruleset parameters casing
+* api-change:``rds-data``: Update endpoint ruleset parameters casing
+* api-change:``route53resolver``: Update endpoint ruleset parameters casing
+* api-change:``scheduler``: Update endpoint ruleset parameters casing
+* api-change:``sso-admin``: Update endpoint ruleset parameters casing
+* api-change:``neptune-graph``: Update endpoint ruleset parameters casing
+* api-change:``codeguruprofiler``: Update endpoint ruleset parameters casing
+* api-change:``pinpoint``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-data-automation``: Update endpoint ruleset parameters casing
+* api-change:``athena``: Update endpoint ruleset parameters casing
+* api-change:``outposts``: Update endpoint ruleset parameters casing
+* api-change:``secretsmanager``: Update endpoint ruleset parameters casing
+* api-change:``iam``: Fixed missing SummaryMap keys in GetAccountSummary response that were being filtered out during deserialization in AWS Java SDK v2
+* api-change:``managedblockchain``: Update endpoint ruleset parameters casing
+* api-change:``launch-wizard``: Update endpoint ruleset parameters casing
+* api-change:``workmailmessageflow``: Update endpoint ruleset parameters casing
+* api-change:``greengrass``: Update endpoint ruleset parameters casing
+* api-change:``elasticbeanstalk``: Update endpoint ruleset parameters casing
+* api-change:``ses``: Update endpoint ruleset parameters casing
+* api-change:``forecast``: Update endpoint ruleset parameters casing
+* api-change:``chime-sdk-identity``: Update endpoint ruleset parameters casing
+* api-change:``route53profiles``: Update endpoint ruleset parameters casing
+* api-change:``kinesis``: Adds support for record sizes up to 10MiB and introduces new UpdateMaxRecordSize API to modify stream record size limits. Adds record size parameters to existing CreateStream and DescribeStreamSummary APIs for request and response payloads respectively.
+* api-change:``mturk``: Update endpoint ruleset parameters casing
+* api-change:``rekognition``: Update endpoint ruleset parameters casing
+* api-change:``ssm-sap``: Update endpoint ruleset parameters casing
+* api-change:``invoicing``: Update endpoint ruleset parameters casing
+* api-change:``ce``: Updated endpoint for eusc-de-east-1 region.
+* api-change:``entityresolution``: Update endpoint ruleset parameters casing
+* api-change:``shield``: Update endpoint ruleset parameters casing
+
+
+2.31.22
+=======
+
+* api-change:``datapipeline``: Update endpoint ruleset parameters casing
+* api-change:``vpc-lattice``: Update endpoint ruleset parameters casing
+* api-change:``chime-sdk-messaging``: Update endpoint ruleset parameters casing
+* api-change:``docdb``: Update endpoint ruleset parameters casing
+* api-change:``budgets``: Update endpoint ruleset parameters casing
+* api-change:``acm``: Update endpoint ruleset parameters casing
+* api-change:``snow-device-management``: Update endpoint ruleset parameters casing
+* api-change:``elb``: Update endpoint ruleset parameters casing
+* api-change:``payment-cryptography``: Update endpoint ruleset parameters casing
+* api-change:``location``: Added support for mobile app restrictions in Amazon Location API keys.
+* api-change:``amplifyuibuilder``: Update endpoint ruleset parameters casing
+* api-change:``kinesis-video-signaling``: Update endpoint ruleset parameters casing
+* api-change:``qbusiness``: Update endpoint ruleset parameters casing
+* api-change:``robomaker``: Update endpoint ruleset parameters casing
+* api-change:``workspaces-thin-client``: Update endpoint ruleset parameters casing
+* api-change:``evs``: Update endpoint ruleset parameters casing
+* api-change:``eks``: Update endpoint ruleset parameters casing
+* api-change:``sso-oidc``: Update endpoint ruleset parameters casing
+* api-change:``inspector``: Update endpoint ruleset parameters casing
+* api-change:``mediastore``: Update endpoint ruleset parameters casing
+* api-change:``route53domains``: Update endpoint ruleset parameters casing
+* api-change:``wisdom``: Update endpoint ruleset parameters casing
+* api-change:``verifiedpermissions``: Update endpoint ruleset parameters casing
+* api-change:``securityhub``: Release 3 layer filter support in GetFindingsV2, GetFindingStatisticsV2, GetResourcesV2,GetResourcesStatisticsV2, AutomationRule V2 APIs. Update filter casing in GetResourcesV2, GetResourcesStatisticsV2 APIs. Add new filters in GetFindingsV2, GetFindingStatisticsV2, AutomationRule V2 APIs.
+* api-change:``mediapackage``: Update endpoint ruleset parameters casing
+* api-change:``fis``: Update endpoint ruleset parameters casing
+* api-change:``rtbfabric``: Add support for custom rate limits.
+* api-change:``sagemaker-metrics``: Update endpoint ruleset parameters casing
+* api-change:``supplychain``: Update endpoint ruleset parameters casing
+* api-change:``iotwireless``: Update endpoint ruleset parameters casing
+* api-change:``datazone``: This release adds support for MLflow connections Creation in DataZone
+* api-change:``kinesisanalytics``: Update endpoint ruleset parameters casing
+* api-change:``servicediscovery``: Update endpoint ruleset parameters casing
+* api-change:``dynamodbstreams``: Update endpoint ruleset parameters casing
+* api-change:``lookoutvision``: Update endpoint ruleset parameters casing
+* api-change:``application-signals``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker``: Added inference components model data caching feature
+* api-change:``mediastore-data``: Update endpoint ruleset parameters casing
+* api-change:``mq``: Update endpoint ruleset parameters casing
+* api-change:``billing``: Update endpoint ruleset parameters casing
+* api-change:``iot-managed-integrations``: Update endpoint ruleset parameters casing
+* api-change:``translate``: Update endpoint ruleset parameters casing
+* api-change:``panorama``: Update endpoint ruleset parameters casing
+* api-change:``s3tables``: Update endpoint ruleset parameters casing
+* api-change:``migrationhubstrategy``: Update endpoint ruleset parameters casing
+* api-change:``geo-maps``: Added support for optional AdditionalFeatures parameter in the V2 GetTile API.
+* api-change:``cloudtrail``: Update endpoint ruleset parameters casing
+* api-change:``codepipeline``: Update endpoint ruleset parameters casing
+* api-change:``pca-connector-ad``: Update endpoint ruleset parameters casing
+* api-change:``gameliftstreams``: Add status reasons for TERMINATED stream sessions
+* api-change:``payment-cryptography-data``: Update endpoint ruleset parameters casing
+
+
+2.31.21
+=======
+
+* api-change:``rum``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-agentcore``: Fixing the service documentation name
+* api-change:``synthetics``: Update endpoint ruleset parameters casing
+* api-change:``codebuild``: Update endpoint ruleset parameters casing
+* api-change:``pinpoint-email``: Update endpoint ruleset parameters casing
+* api-change:``lambda``: Add NodeJs 24 (nodejs24.x) support to AWS Lambda.
+* api-change:``sagemaker``: Update endpoint ruleset parameters casing
+* api-change:``chime-sdk-voice``: Update endpoint ruleset parameters casing
+* api-change:``networkmonitor``: Update endpoint ruleset parameters casing
+* api-change:``macie2``: Update endpoint ruleset parameters casing
+* api-change:``drs``: Update endpoint ruleset parameters casing
+* api-change:``mgh``: Update endpoint ruleset parameters casing
+* api-change:``sesv2``: Update endpoint ruleset parameters casing
+* api-change:``internetmonitor``: Update endpoint ruleset parameters casing
+* api-change:``securitylake``: Update endpoint ruleset parameters casing
+* api-change:``mgn``: Update endpoint ruleset parameters casing
+* api-change:``marketplacecommerceanalytics``: Update endpoint ruleset parameters casing
+* api-change:``ecr-public``: Update endpoint ruleset parameters casing
+* api-change:``savingsplans``: Update endpoint ruleset parameters casing
+* api-change:``managedblockchain-query``: Update endpoint ruleset parameters casing
+* api-change:``pca-connector-scep``: Update endpoint ruleset parameters casing
+* api-change:``application-autoscaling``: Update endpoint ruleset parameters casing
+* api-change:``kinesis-video-archived-media``: Update endpoint ruleset parameters casing
+* api-change:``resiliencehub``: Update endpoint ruleset parameters casing
+* api-change:``healthlake``: Update endpoint ruleset parameters casing
+* api-change:``dms``: Update endpoint ruleset parameters casing
+* api-change:``mediatailor``: Update endpoint ruleset parameters casing
+* api-change:``personalize-events``: Update endpoint ruleset parameters casing
+* api-change:``docdb-elastic``: Update endpoint ruleset parameters casing
+* api-change:``cloudtrail-data``: Update endpoint ruleset parameters casing
+* api-change:``mpa``: Update endpoint ruleset parameters casing
+* api-change:``neptunedata``: Update endpoint ruleset parameters casing
+* api-change:``kinesis-video-webrtc-storage``: Update endpoint ruleset parameters casing
+* api-change:``account``: Update endpoint ruleset parameters casing
+* api-change:``discovery``: Update endpoint ruleset parameters casing
+* api-change:``opensearchserverless``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker-edge``: Update endpoint ruleset parameters casing
+* api-change:``codestar-connections``: Update endpoint ruleset parameters casing
+* api-change:``iot-jobs-data``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-agentcore-control``: Fixing the service documentation name
+* api-change:``config``: Update endpoint ruleset parameters casing
+* api-change:``odb``: Doc-only update that removes duplicate values from descriptions of ODB peering APIs.
+* api-change:``iotevents``: Update endpoint ruleset parameters casing
+* api-change:``ecr``: Update endpoint ruleset parameters casing
+* api-change:``omics``: Update endpoint ruleset parameters casing
+* api-change:``ebs``: Update endpoint ruleset parameters casing
+* api-change:``cur``: Update endpoint ruleset parameters casing
+* api-change:``storagegateway``: Update endpoint ruleset parameters casing
+* api-change:``connect-contact-lens``: Update endpoint ruleset parameters casing
+* api-change:``dsql``: Add support for resource-based policies for Aurora DSQL clusters. This will enable you to implement Block Public Access (BPA) which will help restrict access to your Aurora DSQL public or VPC endpoints.
+
+
+2.31.20
+=======
+
+* api-change:``workmail``: Update endpoint ruleset parameters casing
+* api-change:``iotanalytics``: Update endpoint ruleset parameters casing
+* api-change:``connectparticipant``: Update endpoint ruleset parameters casing
+* api-change:``medialive``: Add 3 API operations for fetching alerts: ListAlerts (Channels), ListClusterAlerts (MediaLive Anywhere), and ListMultiplexAlerts
+* api-change:``lexv2-models``: Update endpoint ruleset parameters casing
+* api-change:``ds-data``: Update endpoint ruleset parameters casing
+* api-change:``oam``: Update endpoint ruleset parameters casing
+* api-change:``cloudformation``: Update endpoint ruleset parameters casing
+* api-change:``directconnect``: Update endpoint ruleset parameters casing
+* api-change:``workspaces``: Update endpoint ruleset parameters casing
+* api-change:``autoscaling``: Update endpoint ruleset parameters casing
+* api-change:``connect``: This release added support for email address alias configuration and outbound campaign preview mode.
+* api-change:``pcs``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker-a2i-runtime``: Update endpoint ruleset parameters casing
+* api-change:``marketplace-agreement``: Update endpoint ruleset parameters casing
+* api-change:``notificationscontacts``: Update endpoint ruleset parameters casing
+* api-change:``forecastquery``: Update endpoint ruleset parameters casing
+* api-change:``connectcampaignsv2``: Updated Amazon Connect Outbound Campaigns V2 SDK to support Preview Outbound Mode
+* api-change:``ssm-incidents``: Update endpoint ruleset parameters casing
+* api-change:``redshift-data``: Update endpoint ruleset parameters casing
+* api-change:``chatbot``: Update endpoint ruleset parameters casing
+* api-change:``cloudhsm``: Update endpoint ruleset parameters casing
+* api-change:``codeguru-reviewer``: Update endpoint ruleset parameters casing
+* api-change:``iotsecuretunneling``: Update endpoint ruleset parameters casing
+* api-change:``ivschat``: Update endpoint ruleset parameters casing
+* api-change:``workdocs``: Update endpoint ruleset parameters casing
+* api-change:``route53-recovery-cluster``: Update endpoint ruleset parameters casing
+* api-change:``ec2-instance-connect``: Update endpoint ruleset parameters casing
+* api-change:``mailmanager``: Update endpoint ruleset parameters casing
+* api-change:``iot``: Update endpoint ruleset parameters casing
+* api-change:``bcm-dashboards``: Update endpoint ruleset parameters casing
+* api-change:``sns``: Update endpoint ruleset parameters casing
+* api-change:``pinpoint-sms-voice-v2``: Update endpoint ruleset parameters casing
+* api-change:``inspector2``: Update endpoint ruleset parameters casing
+* api-change:``rtbfabric``: Update for general availability of AWS RTB Fabric service.
+* api-change:``kinesisanalyticsv2``: Update endpoint ruleset parameters casing
+* api-change:``ce``: Update endpoint ruleset parameters casing
+* api-change:``cognito-identity``: Update endpoint ruleset parameters casing
+* api-change:``cloudhsmv2``: Update endpoint ruleset parameters casing
+* api-change:``mwaa``: Update endpoint ruleset parameters casing
+* api-change:``iotsitewise``: Update endpoint ruleset parameters casing
+* api-change:``ec2``: This release adds AvailabilityZoneId support for CreateNetworkInterface and DescribeNetworkInterfaces APIs.
+* api-change:``b2bi``: Update endpoint ruleset parameters casing
+* api-change:``devicefarm``: This release adds support for optionally including an app as part of a CreateRemoteAccessSession request
+* api-change:``appfabric``: Update endpoint ruleset parameters casing
+* api-change:``iotfleetwise``: Update endpoint ruleset parameters casing
+* api-change:``comprehendmedical``: Update endpoint ruleset parameters casing
+* api-change:``iam``: Updated OIDC and SAML apis to reject multiple simultaneous requests to change a unique object.
+* api-change:``route53``: Amazon Route 53 now supports the ISOB West Region for private DNS for Amazon VPCs and cloudwatch healthchecks.
+
+
+2.31.19
+=======
+
+* api-change:``dynamodb``: Add AccountID based endpoint metric to endpoint rules.
+* api-change:``mediaconvert``: This release adds the ability to set resolution for the black video generator and also adds the StartJobsQuery and GetJobsQueryResults APIs which allow asynchronous search of job history using new filters.
+* api-change:``emr``: Added RECONFIGURING to the InstanceFleetState convenience enum.
+* api-change:``meteringmarketplace``: Added ClientToken parameter to MeterUsage API for specifying idempotent requests.
+
+
+2.31.18
+=======
+
+* api-change:``arc-zonal-shift``: Update endpoint ruleset parameters casing
+* api-change:``finspace-data``: Update endpoint ruleset parameters casing
+* api-change:``wellarchitected``: Update endpoint ruleset parameters casing
+* api-change:``ds``: Update endpoint ruleset parameters casing
+* api-change:``amp``: Update endpoint ruleset parameters casing
+* api-change:``bedrock-data-automation-runtime``: Update endpoint ruleset parameters casing
+* api-change:``tnb``: Update endpoint ruleset parameters casing
+* api-change:``license-manager-user-subscriptions``: Update endpoint ruleset parameters casing
+* api-change:``kinesis-video-media``: Update endpoint ruleset parameters casing
+* api-change:``bcm-recommended-actions``: Update endpoint ruleset parameters casing
+* api-change:``marketplace-catalog``: The ListEntities API now supports two new CAPI filters: DeliveryOptionTypes for SaaS products and CompatibleAWSServices for Container products.
+* api-change:``license-manager``: Update endpoint ruleset parameters casing
+* api-change:``lakeformation``: Update endpoint ruleset parameters casing
+* api-change:``codestar-notifications``: Update endpoint ruleset parameters casing
+* api-change:``network-firewall``: Update endpoint ruleset parameters casing
+* api-change:``mediaconnect``: Update endpoint ruleset parameters casing
+* api-change:``pi``: Update endpoint ruleset parameters casing
+* api-change:``networkmanager``: Update endpoint ruleset parameters casing
+* api-change:``iotthingsgraph``: Update endpoint ruleset parameters casing
+* api-change:``controlcatalog``: Update endpoint ruleset parameters casing
+* api-change:``sagemaker-geospatial``: Update endpoint ruleset parameters casing
+* api-change:``chime-sdk-meetings``: Update endpoint ruleset parameters casing
+* api-change:``iottwinmaker``: Update endpoint ruleset parameters casing
+* api-change:``appconfigdata``: Update endpoint ruleset parameters casing
+* api-change:``kendra-ranking``: Update endpoint ruleset parameters casing
+* api-change:``es``: Update endpoint ruleset parameters casing
+* api-change:``gameliftstreams``: Updates documentation to clarify valid application binaries for an Amazon GameLift Streams application and provide descriptions of stream session error status reasons
+* api-change:``rolesanywhere``: Update endpoint ruleset parameters casing
+* api-change:``datasync``: Update endpoint ruleset parameters casing
+* api-change:``route53-recovery-readiness``: Update endpoint ruleset parameters casing
+* api-change:``finspace``: Update endpoint ruleset parameters casing
+* api-change:``timestream-write``: Update endpoint ruleset parameters casing
+* api-change:``qapps``: Update endpoint ruleset parameters casing
+* api-change:``evidently``: Update endpoint ruleset parameters casing
+* api-change:``swf``: Releasing minor endpoint updates.
+* api-change:``migration-hub-refactor-spaces``: Update endpoint ruleset parameters casing
+* api-change:``organizations``: Update endpoint ruleset parameters casing
+* api-change:``imagebuilder``: Update endpoint ruleset parameters casing
+* api-change:``events``: Update endpoint ruleset parameters casing
+* api-change:``dsql``: Update endpoint ruleset parameters casing
+* api-change:``cloudfront``: Update endpoint ruleset parameters casing
+* api-change:``signer``: Update endpoint ruleset parameters casing
+* api-change:``geo-maps``: Added support for optional style parameters in maps, including Terrain, ContourDensity, Traffic, and TravelModes.
+* api-change:``application-insights``: Update endpoint ruleset parameters casing
+* api-change:``amplifybackend``: Update endpoint ruleset parameters casing
+* api-change:``appintegrations``: Update endpoint ruleset parameters casing
+* api-change:``iot-data``: Update endpoint ruleset parameters casing
+* api-change:``iotdeviceadvisor``: Update endpoint ruleset parameters casing
+* api-change:``cloudfront-keyvaluestore``: Update endpoint ruleset parameters casing
+* api-change:``ec2``: Documentation updates for Amazon EC2.
+
+
+2.31.17
+=======
+
+* api-change:``route53-recovery-control-config``: Update endpoint ruleset parameters casing
+* api-change:``amplify``: Update endpoint ruleset parameters casing
+* api-change:``timestream-query``: Update endpoint ruleset parameters casing
+* api-change:``migrationhub-config``: Update endpoint ruleset parameters casing
+* api-change:``qldb-session``: Update endpoint ruleset parameters casing
+* api-change:``personalize-runtime``: Update endpoint ruleset parameters casing
+* api-change:``ssm``: Update endpoint ruleset parameters casing
+* api-change:``identitystore``: Update endpoint ruleset parameters casing
+* api-change:``mediapackagev2``: Update endpoint ruleset parameters casing
+* api-change:``lex-models``: Update endpoint ruleset parameters casing
+* api-change:``geo-routes``: Update endpoint ruleset parameters casing
+* api-change:``ssm-guiconnect``: Update endpoint ruleset parameters casing
+* api-change:``memorydb``: Update endpoint ruleset parameters casing
+* api-change:``apigatewaymanagementapi``: Update endpoint ruleset parameters casing
+* api-change:``osis``: Update endpoint ruleset parameters casing
+* api-change:``lexv2-runtime``: Update endpoint ruleset parameters casing
+* api-change:``billingconductor``: New feature: service flat CLI and first AWS managed pricing plan (BasicPricingPlan)
+* api-change:``kafka``: Update endpoint ruleset parameters casing
+* api-change:``workspaces-web``: Update endpoint ruleset parameters casing
+* api-change:``machinelearning``: Update endpoint ruleset parameters casing
+* api-change:``lookoutequipment``: Update endpoint ruleset parameters casing
+* api-change:``globalaccelerator``: Update endpoint ruleset parameters casing
+* api-change:``m2``: Update endpoint ruleset parameters casing
+* api-change:``pricing``: Update endpoint ruleset parameters casing
+* api-change:``freetier``: Update endpoint ruleset parameters casing
+* api-change:``grafana``: Update endpoint ruleset parameters casing
+* api-change:``dataexchange``: Update endpoint ruleset parameters casing
+* api-change:``dlm``: Update endpoint ruleset parameters casing
+* api-change:``ivs-realtime``: Update endpoint ruleset parameters casing
+* api-change:``apptest``: Update endpoint ruleset parameters casing
+* api-change:``polly``: Update endpoint ruleset parameters casing
+* api-change:``apprunner``: Update endpoint ruleset parameters casing
+* api-change:``databrew``: Update endpoint ruleset parameters casing
+* api-change:``kms``: Update endpoint ruleset parameters casing
+* api-change:``acm-pca``: Update endpoint ruleset parameters casing
+* api-change:``keyspaces``: Update endpoint ruleset parameters casing
+* api-change:``voice-id``: Update endpoint ruleset parameters casing
+* api-change:``medical-imaging``: Update endpoint ruleset parameters casing
+* api-change:``bcm-data-exports``: Update endpoint ruleset parameters casing
+* api-change:``batch``: Update endpoint ruleset parameters casing
+* api-change:``marketplace-entitlement``: Update endpoint ruleset parameters casing
+* api-change:``ivs``: Update endpoint ruleset parameters casing
+* api-change:``personalize``: Update endpoint ruleset parameters casing
+* api-change:``networkflowmonitor``: Update endpoint ruleset parameters casing
+* api-change:``customer-profiles``: Update endpoint ruleset parameters casing
+* api-change:``gamelift``: Update endpoint ruleset parameters casing
+* api-change:``autoscaling-plans``: Updated FIPS endpoints for US GovCloud regions
+* api-change:``qldb``: Update endpoint ruleset parameters casing
+* api-change:``ssm-contacts``: Update endpoint ruleset parameters casing
+
+
+2.31.16
+=======
+
+* api-change:``timestream-influxdb``: This release adds support for creating and managing InfluxDB 3 Core and Enterprise DbClusters.
+* api-change:``ec2``: Introducing EC2 Capacity Manager for monitoring and analyzing capacity usage across On-Demand Instances, Spot Instances, and Capacity Reservations.
+* api-change:``docdb``: Add support for NetworkType field in CreateDbCluster, ModifyDbCluster, RestoreDbClusterFromSnapshot and RestoreDbClusterToPointInTime for DocumentDB.
+* api-change:``lightsail``: Add support for manage Lightsail Bucket CORS configuration
+* api-change:``guardduty``: Added default pagination value for ListMalwareProtectionPlans API and updated UpdateFindingsFeedback API
+* api-change:``elbv2``: This release expands Listener Rule Conditions to support RegexValues and adds support for a new Transforms field in Listener Rules.
+* api-change:``bedrock``: Amazon Bedrock Automated Reasoning Policy now offers enhanced AWS KMS integration. The CreateAutomatedReasoningPolicy API includes a new kmsKeyId field, allowing customers to specify their preferred KMS key for encryption, improving control and compliance with AWS encryption mandates.
+
+
+2.31.15
+=======
+
+* api-change:``connect``: SDK release for TaskTemplateInfo in Contact for DescribeContact response.
+* api-change:``ec2``: This release adds support for creating instant, point-in-time copies of EBS volumes within the same Availability Zone
+* api-change:``transfer``: SFTP connectors now support routing connections via customers' VPC. This enables connections to remote servers that are only accessible in a customer's VPC environment, and to servers that are accessible over the internet but need connections coming from an IP address in a customer VPC's CIDR range.
+* api-change:``backup``: The AWS Backup job attribute extension enhancement helps customers better understand the plan that initiated each job, and the properties of the resource each job creates.
+* api-change:``transcribe``: Move UntagResource API body member to query parameter
+* api-change:``datazone``: Support creating scoped and trustedIdentityPropagation enabled connections.
+* enhancement:setuptools: Upgrade pinned setuptools to version 78.1.1
+* api-change:``appstream``: This release introduces support for Microsoft license included applications streaming.
+
+
+2.31.14
+=======
+
+* api-change:``observabilityadmin``: CloudWatch Observability Admin adds the ability to enable Resource tags for telemetry in a customer account. The release introduces new APIs to enable, disable and describe the status of Resource tags for telemetry feature. This new capability simplifies monitoring AWS resources using tags.
+* api-change:``bedrock-agentcore-control``: Updated http status code in control plane apis of agentcore runtime, tools and identity. Additional included provider types for AgentCore Identity
+* api-change:``ec2``: Release Amazon EC2 c8i, c8i-flex, m8a, and r8gb
+* api-change:``bedrock-agentcore``: Updated InvokeAgentRuntime API to accept account id optionally and added CompleteResourceTokenAuth API.
+
+
+2.31.13
+=======
+
+* api-change:``bedrock-agentcore``: Bedrock AgentCore release for Runtime, and Memory.
+* api-change:``cloudfront``: Added new viewer security policy, TLSv1.2_2025, for CloudFront.
+* api-change:``glue``: Addition of AuditContext in GetTable/GetTables Request
+* api-change:``rds``: Updated the text in the Important section of the ModifyDBClusterParameterGroup page.
+* api-change:``bedrock-agentcore-control``: Bedrock AgentCore release for Gateway, and Memory including Self-Managed Strategies support for Memory.
+* api-change:``lambda``: Add InvokedViaFunctionUrl context key to limit invocations to only FURL invokes.
+* api-change:``odb``: This release adds APIs that allow you to specify CIDR ranges in your ODB peering connection.
+* enhancement:openssl: Update bundled OpenSSL version to 1.1.1zd for Linux installers
+
+
+2.31.12
+=======
+
+* api-change:``wafv2``: This release adds the ability to throw WafLimitsExceededException when the maximum number of Application Load Balancer (ALB) associations per AWS WAF v2 WebACL is exceeded.
+* api-change:``quicksight``: This release adds support for ActionConnector and Flow, which are new resources associated with Amazon Quick Suite. Additional updates include expanded Data Source options, further branding customization, and new capabilities that can be restricted by Admins.
+
+
+2.31.11
+=======
+
+* api-change:``outposts``: This release adds the new StartOutpostDecommission API, which starts the decommission process to return Outposts racks or servers.
+* api-change:``service-quotas``: introduces Service Quotas Automatic Management. Users can opt-in to monitoring and managing service quotas, receive notifications when quota usage reaches thresholds, configure notification channels, subscribe to EventBridge events for automation, and view notifications in the AWS Health dashboard.
+* api-change:``license-manager-user-subscriptions``: Released support for IPv6 and dual-stack active directories
+* api-change:``bedrock-agentcore-control``: Adding support for authorizer type AWS_IAM to AgentCore Control Gateway.
+
+
+2.31.10
+=======
+
+* api-change:``proton``: Deprecating APIs in AWS Proton namespace.
+
+
+2.31.9
+======
+
+* api-change:``rds``: Documentation updates to the CreateDBClusterMessage$PubliclyAccessible and CreateDBInstanceMessage$PubliclyAccessible properties.
+* api-change:``bedrock-agentcore-control``: Add support for VM lifecycle configuration parameters and A2A protocol
+* api-change:``mediaconnect``: Enabling Tag-on-Create for AWS Elemental MediaConnect flow-based resource types
+* api-change:``backup``: Adds optional MaxScheduledRunsPreview input to GetBackupPlan API to provide a preview of up to 10 next scheduled backup plan runs in the GetBackupPlan response.
+* api-change:``quicksight``: Documentation improvements for QuickSight API documentation to clarify that delete operation APIs are global.
+* api-change:``glue``: Adds labeling for DataQualityRuleResult for GetDataQualityResult and PublishDataQualityResult APIs
+* api-change:``resource-explorer-2``: Add new AWS Resource Explorer APIs
+* api-change:``memorydb``: Support for DescribeMultiRegionParameterGroups and DescribeMultiRegionParameters API.
+* api-change:``bedrock-agentcore``: Add support for batch memory management, agent card retrieval and session termination
+
+
+2.31.8
+======
+
+* api-change:``qconnect``: Updated Amazon Q in Connect APIs to support Email Contact Recommendations.
+* api-change:``payment-cryptography-data``: Added a new API - translateKeyMaterial; allows keys wrapped by ECDH derived keys to be rewrapped under a static AES keyblock without first importing the key into the service.
+* api-change:``medialive``: AWS Elemental MediaLive enables Mediapackage V2 users to configure ID3, KLV, Nielsen ID3, and Segment Length related parameters through the Mediapackage output group.
+* api-change:``cleanrooms``: Added support for reading data sources across regions, and results delivery to allowedlisted regions.
+
+
+2.31.7
+======
+
+* api-change:``dynamodb``: Add support for dual-stack account endpoint generation
+* api-change:``cloudformation``: Add new warning type 'EXCLUDED_RESOURCES'
+* api-change:``guardduty``: Updated descriptions for the Location parameter in CreateTrustedEntitySet and CreateThreatEntitySet.
+* api-change:``synthetics``: Adds support to configure canaries with pre-configured blueprint code on supported runtime versions.  This behavior can be controlled via the new BlueprintTypes property exposed in the CreateCanary and UpdateCanary APIs.
+* api-change:``connectcases``: New Search All Related Items API enables searching related items across cases
+* enhancement:``eks``: Add ``proxy-url`` to ``aws eks update-kubeconfig``
+
+
+2.31.6
+======
+
+* api-change:``dms``: This is a doc-only update, revising text for kms-key-arns.
+* bugfix:``botocore``: Fix HTTP 100 Continue parsing to accept optional reason phrase
+* api-change:``ecs``: This is a documentation only Amazon ECS release that adds additional information for health checks.
+* api-change:``cleanrooms``: This release introduces data access budgets to control how many times a table can be used for queries and jobs in a collaboration.
+* bugfix:``s3``: Fix CancelledError retry loops to enable immediate S3 upload cancellation
+* api-change:``chime-sdk-meetings``: Add support to receive dual stack MediaPlacement URLs in Chime Meetings SDK
+* api-change:``cleanroomsml``: This release introduces data access budgets to view how many times an input channel can be used for ML jobs in a collaboration.
+* api-change:``pcs``: Added the UpdateCluster API action to modify cluster configurations, and Slurm custom settings for queues.
+
+
+2.31.5
+======
+
+* api-change:``fsx``: Add Dual-Stack support for Amazon FSx for NetApp ONTAP and Windows File Server
+* api-change:``datasync``: Added support for FIPS VPC endpoints in FIPS-enabled AWS Regions.
+* api-change:``bedrock-agentcore-control``: Tagging support for AgentCore Gateway
+* api-change:``connectcases``: This release adds support for two new related item types: ConnectCase for linking Amazon Connect cases and Custom for user-defined related items with configurable fields.
+* api-change:``rds``: Enhanced RDS error handling: Added DBProxyEndpointNotFoundFault, DBShardGroupNotFoundFault, KMSKeyNotAccessibleFault for snapshots/restores/backups, NetworkTypeNotSupported, StorageTypeNotSupportedFault for restores, and granular state validation faults. Changed DBInstanceNotReadyFault to HTTP 400.
+* api-change:``transfer``: Add support for updating server identity provider type
+* api-change:``datazone``: This release adds support for creation of EMR on EKS Connections in Amazon DataZone.
+* api-change:``ds``: AWS Directory service now supports IPv6-native and dual-stack configurations for AWS Managed Microsoft AD, AD Connector, and Simple AD (dual-stack only). Additionally, AWS Managed Microsoft AD Standard Edition directories can be upgraded to Enterprise Edition directories through a single API call.
+* api-change:``ecs``: This release adds support for Managed Instances on Amazon ECS.
+* api-change:``customer-profiles``: This release introduces ListProfileHistoryRecords and GetProfileHistoryRecord APIs for comprehensive profile history tracking with complete audit trails of creation, updates, merges, deletions, and data ingestion events.
+* api-change:``quicksight``: added warnings to a few CLI pages
+* api-change:``chime-sdk-voice``: Added support for IPv4-only and dual-stack network configurations for VoiceConnector and CreateVoiceConnector API.
+* api-change:``application-signals``: Amazon CloudWatch Application Signals is introducing the Application Map to give users a more comprehensive view of their service health. Users will now be able to group services, track their latest deployments, and view automated audit findings concerning service performance.
+* api-change:``mediatailor``: Adding TPS Traffic Shaping to Prefetch Schedules
+
+
+2.31.4
+======
+
+* api-change:``vpc-lattice``: Adds support for specifying the number of IPv4 addresses in each ENI for the resource gateway for VPC Lattice.
+* api-change:``bedrock``: Release for fixing GetFoundationModel API behavior. Imported and custom models have their own exclusive API and GetFM should not accept those ARNS as input
+* api-change:``bedrock-runtime``: New stop reason for Converse and ConverseStream
+* api-change:``imagebuilder``: This release introduces several new features and improvements to enhance pipeline management, logging, and resource configuration.
+
+
+2.31.3
+======
+
+* api-change:``billing``: Add ability to combine custom billing views to create new consolidated views.
+* api-change:``bedrock-data-automation``: Added support for configurable Speaker Labeling and Channel Labeling features for Audio modality.
+* api-change:``bedrock-agent-runtime``: This release enhances the information provided through Flow Traces. New information includes source/next node tracking, execution chains for complex nodes, dependency action (operation) details, and dependency traces.
+* api-change:``ec2``: This release includes documentation updates for Amazon EBS General Purpose SSD (gp3) volumes with larger size and higher IOPS and throughput.
+* api-change:``connect``: Adds supports for manual contact picking (WorkList) operations on Routing Profiles, Agent Management and SearchContacts APIs.
+* api-change:``dynamodbstreams``: Added support for IPv6 compatible endpoints for DynamoDB Streams.
+* api-change:``ce``: Support for payer account dimension and billing view health status.
+* api-change:``redshift``: Support tagging and tag propagation to IAM Identity Center for Redshift Idc Applications
+
+
+2.31.2
+======
+
+* api-change:``lightsail``: Attribute HTTP binding update for Get/Delete operations
+* api-change:``glue``: Update GetConnection(s) API to return KmsKeyArn & Add 63 missing connection types
+* api-change:``network-firewall``: Network Firewall now introduces Reject and Alert action support for stateful domain list rule groups, providing customers with more granular control over their network traffic.
+
+
+2.31.1
+======
+
+* api-change:``appstream``: G6f instance support for AppStream 2.0
+* api-change:``neptune``: Doc-only update to address customer use.
+* api-change:``dax``: This release adds support for IPv6-only, DUAL_STACK DAX instances
+* api-change:``cloudwatch``: Fix default dualstack FIPS endpoints in AWS GovCloud(US) regions
+* api-change:``kms``: Documentation only updates for KMS.
+
+
+2.31.0
+======
+
+* enhancement:help: Update message formatting when entering an invalid command to improve identification of an error (aws/aws-cli`#9737 <https://github.com/aws/aws-cli/issues/9737>`__)
+* api-change:``cleanrooms``: Added support for running incremental ID mapping for rule-based workflows.
+* api-change:``ec2``: Add Amazon EC2 R8gn instance types
+* enhancement:documentation: Display required constraints to top level and nested parameters (aws/aws-cli`#9463 <https://github.com/aws/aws-cli/issues/9463>`__, aws/aws-cli`#9491 <https://github.com/aws/aws-cli/issues/9491>`__)
+* enhancement:help: Reduce output from help when entering an invalid command (aws/aws-cli`#9457 <https://github.com/aws/aws-cli/issues/9457>`__)
+* enhancement:documentation: Add documentation for API parameter constraints (aws/aws-cli`#9444 <https://github.com/aws/aws-cli/issues/9444>`__)
+* enhancement:``s3``: Add controls over progress status message frequency and multiline printing (aws/aws-cli`#9545 <https://github.com/aws/aws-cli/issues/9545>`__)
+* enhancement:configuration: Improve accessibility of table output for ``configure list`` command (aws/aws-cli`#9547 <https://github.com/aws/aws-cli/issues/9547>`__)
+* api-change:``sso-oidc``: This release includes exception definition and documentation updates.
+* api-change:``sso-admin``: Add support for encryption at rest with Customer Managed KMS Key in AWS IAM Identity Center
+* api-change:``ssm``: Added Dualstack support to GetDeployablePatchSnapshotForInstance
+* api-change:``entityresolution``: Support incremental id mapping workflow for AWS Entity Resolution
+* feature:help: Add ability to view help in a web browser or print the URL to the remote documentation website (aws/aws-cli`#9496 <https://github.com/aws/aws-cli/issues/9496>`__)
+
+
+2.30.7
+======
+
+* api-change:``imagebuilder``: Version ARNs are no longer required for the EC2 Image Builder list-image-build-version, list-component-build-version, and list-workflow-build-version APIs. Calling these APIs without the ARN returns all build versions for the given resource type in the requesting account.
+* api-change:``pinpoint-sms-voice``: Update pinpoint-sms-voice client and endpoint tests to latest version.
+* api-change:``eks``: Adds support for RepairConfig overrides and configurations in EKS Managed Node Groups.
+* api-change:``batch``: Starting in JAN 2026, AWS Batch will change the default AMI for new Amazon ECS compute environments from Amazon Linux 2 to Amazon Linux 2023. We recommend migrating AWS Batch Amazon ECS compute environments to Amazon Linux 2023 to maintain optimal performance and security.
+
+
+2.30.6
+======
+
+* api-change:``config``: Add UNKNOWN state to RemediationExecutionState and add IN_PROGRESS/EXITED/UNKNOWN states to RemediationExecutionStepState.
+* api-change:``license-manager-user-subscriptions``: Added support for cross-account Active Directories.
+* enhancement:ec2-instance-connect: Allow ec2-instance-connect ssh and open-tunnel commands to connect to update-complete, update-in-progress, and update-failed EC2 Instance Connect Endpoints. Fixes `#9715 <https://github.com/aws/aws-cli/issues/9715>`__
+* api-change:``kendra-ranking``: Model whitespace change - no client difference
+* api-change:``bedrock-agentcore-control``: Add tagging and VPC support to AgentCore Runtime, Code Interpreter, and Browser resources. Add support for configuring request headers in Runtime. Fix AgentCore Runtime shape names.
+* api-change:``medialive``: Add MinBitrate for QVBR mode under H264/H265/AV1 output codec. Add GopBReference, GopNumBFrames, SubGopLength fields under H265 output codec.
+* api-change:``connect``: This release adds a persistent connection field to UserPhoneConfig that maintains agent's softphone media connection for faster call connections.
+* api-change:``sqs``: Update invalid character handling documentation for SQS SendMessage API
+
+
+2.30.5
+======
+
+* api-change:``budgets``: Added BillingViewHealthStatus Exception which is thrown when a Budget is created or updated with a Billing View that is not in the HEALTHY status
+* api-change:``bedrock``: Release includes an increase to the maximum policy build document size, an update to DeleteAutomatedReasoningPolicyBuildWorkflow to add ResourceInUseException, and corrections to UpdateAutomatedReasoningPolicyTestCaseRequest.
+* api-change:``chime-sdk-messaging``: Amazon Chime SDK Messaging GetMessagingSessionEndpoint API now returns dual-stack WebSocket endpoints supporting IPv4/IPv6.
+* api-change:``ec2``: Allowed AMIs adds support for four new parameters - marketplaceProductCodes, deprecationTimeCondition, creationDateCondition and imageNames
+
+
+2.30.4
+======
+
+* api-change:``ec2``: Add mac-m4.metal and mac-m4pro.metal instance types.
+* api-change:``pcs``: Add support for Amazon EC2 Capacity Blocks for ML
+* api-change:``network-firewall``: Network Firewall now prevents TLS handshakes with the target server until after the Server Name Indication (SNI) has been seen and verified. The monitoring dashboard now provides deeper insights into PrivateLink endpoint candidates and offers filters based on IP addresses and protocol.
+
+
+2.30.3
+======
+
+* api-change:``logs``: Cloudwatch Logs added support for 2 new API parameters in metric and subscription filter APIs to filter log events based on system field values and emit system field values as dimensions and send them to customer destination as additional metadata.
+* enhancement:``configure``: Added the new ``aws configure mfa-login`` command, which creates a profile with temporary credentials corresponding to an IAM user with an MFA code.
+* api-change:``ivs-realtime``: IVS now offers customers the ability to control the positioning of participants in both grid and PiP layouts based on custom attribute values in participant tokens.
+* api-change:``osis``: Adds support for cross-account ingestion for push-based sources. This includes resource policies for sharing pipelines across accounts and features for managing pipeline endpoints which enable accessing pipelines across different VPCs, including VPCs in other accounts.
+* enhancement:macOS: Added explicit architecture support in PKG installer for universal builds on Macs to prevent Rosetta requirement prompt.
+* api-change:``budgets``: Add support for custom time periods in budget configuration
+* enhancement:``configure``: Added support for temporary credentials with ``aws configure``. The CLI will prompt for an ``aws_session_token`` if the provided access key ID is temporary.
+
+
+2.30.2
+======
+
+* api-change:``medical-imaging``: Added support for OpenID Connect (OIDC) custom authorizer
+* api-change:``s3control``: Introduce three new encryption filters: EncryptionType (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C, NOT-SSE), KmsKeyArn (for SSE-KMS and DSSE-KMS), and BucketKeyEnabled (for SSE-KMS).
+* api-change:``sms``: The sms client has been removed following the deprecation of the service.
+* api-change:``ce``: Added endpoint support for eusc-de-east-1 region.
+* api-change:``observabilityadmin``: CloudWatch Observability Admin adds the ability to enable telemetry centralization in customers' Organizations. The release introduces new APIs to manage centralization rules, which define settings to replicate telemetry data to a central destination in the customers' Organization.
+
+
+2.30.1
+======
+
+* enhancement:``s3``: Expose S3 transfer config's ``io_chunksize`` in shared config file
+* api-change:``payment-cryptography``: Add support for certificates to be signed by 3rd party certificate authorities.  New API GetCertificateSigningRequest API and support for providing certificates at run-time for tr-34 import/export
+
+
+2.30.0
+======
+
+* feature:installer: Added universal binary support for AWS CLI v2 on macOS
+* api-change:``evs``: CreateEnvironment API now supports parameters (isHcxPublic & hcxNetworkAclId) for HCX migration via public internet, adding flexibility for migration scenarios. New APIs have been added for associating (AssociateEipToVlan) & disassociating (DisassociateEipFromVlan) Elastic IP (EIP) addresses.
+* api-change:``amp``: Add Vended Logs APIs for Amazon Prometheus Managed Collector
+* api-change:``quicksight``: This release adds support for Account level custom permissions, additional Dashboard Options, and Null support for Q&A.
+* api-change:``guardduty``: Updated Java SDK implementation of entity set status in GuardDuty API.
+* api-change:``datazone``: adding IAM principal id to IAM user profile details
+* api-change:``emr-containers``: Added nodeLabel support in container provider to aid hardware isolation support for virtual cluster and security configuration.
+* api-change:``medialive``: AWS Elemental MediaLive adds a new feature in MediaPackage output group that enables MediaPackage V2 users to control HLS-related parameters directly in MediaLive. These parameter settings are then reflected in MediaPackage outputs, providing more streamlined control over HLS configurations.
+* api-change:``ecs``: This release supports hook details for Amazon ECS lifecycle hooks.
+* api-change:``rds``: Adds support for end-to-end IAM authentication in RDS Proxy for MySQL, MariaDB, and PostgreSQL engines.
+
+
+2.29.1
+======
+
+* api-change:``networkflowmonitor``: Added new enum value (AWS::Region) for type field under MonitorLocalResource and MonitorRemoteResource. Workload Insights and Monitor top contributors queries now support a new DestinationCategory (INTER_REGION).
+* api-change:``payment-cryptography``: AWS Payment Cryptography Service now supports Multi-Region key replication. Customers can choose to automatically distribute keys across AWS Regions.
+
+
+2.29.0
+======
+
+* api-change:``autoscaling``: Added WaitForTransitioningInstances parameter to the CancelInstanceRefresh API, allowing the caller to cancel an instance refresh without waiting for on-going launches and terminations.
+* api-change:``mediapackagev2``: Added CUE tag SCTE output to MediaPackageV2 HLS and LL-HLS manifests.
+* api-change:``sagemaker``: Released IPv6 support with dual-stack domain options on SageMaker Studio and introduced support for p6-b200.48xlarge instance type on SageMaker Studio for JupyterLab and CodeEditor applications.
+* api-change:``datazone``: Adds support for custom blueprints
+* api-change:``cloudwatch``: Added a new API - DescribeAlarmContributors API, to retrieve alarm contributors in ALARM state. Added support in DescribeAlarmHistory API to query alarm contributor history
+* feature:s3 download: Validate requested range matches content range in response for multipart downloads
+* api-change:``connect``: SDK release for user defined predefined attributes.
+* api-change:``organizations``: Documentation updates for AWS Organizations APIs.
+
+
+2.28.26
+=======
+
+* api-change:``s3``: This release includes backward compatibility work on the "Expires" parameter.
+* api-change:``iotsitewise``: Add ComputationModelVersion support in IoT SiteWise APIs
+* api-change:``securityhub``: This release adds the RESOURCE_NOT_FOUND error code as a possible value in responses to the following operations: BatchGetStandardsControlAssociations, BatchUpdateStandardsControlAssociations, and BatchGetSecurityControls.
+
+
+2.28.25
+=======
+
+* api-change:``sagemaker``: Release IPv6 support with dualstack in SageMaker Notebooks, Tiered Storage Checkpointing Support in SageMaker HyperPod and P5.4xlarge instance type for SageMaker Hosting.
+* api-change:``ecs``: This is a documentation only release that adds additional information for Amazon ECS Availability Zone rebalancing.
+* api-change:``pcs``: Documentation-only update to add AccountingStorageEnforce to SlurmCustomSetting.
+
+
+2.28.24
+=======
+
+* api-change:``ec2``: Add m8i, m8i-flex and i8ge instance types.
+* api-change:``cloudformation``: ListHookResults API now supports retrieving invocation results for all CloudFormation Hooks (previously limited to create change set and Cloud Control operations) with new optional parameters for filtering by Hook status and ARN.
+* api-change:``cleanrooms``: Add support for configurable compute sizes for PySpark jobs.
+* api-change:``rds``: Added new EndpointNetworkType and TargetConnectionNetworkType fields in Proxy APIs to support IPv6
+* api-change:``verifiedpermissions``: Amazon Verified Permissions / Features : Adds support for datetime and duration attribute values.
+* api-change:``opensearchserverless``: Add support for Federal Information Processing Standards (FIPS) and Federal Risk and Authorization Management Program (FedRAMP) compliance
+
+
+2.28.23
+=======
+
+* enhancement:``awscrt``: Update awscrt version to 0.27.6
+* api-change:``cleanrooms``: Added support for adding new data provider members to an existing collaboration.
+* api-change:``cleanroomsml``: AWS Clean Rooms ML adds log sanitization for privacy-enhanced error summaries, supports new instance types for custom models providing better performance and lower costs, and deprecates P3-series instances.
+* api-change:``route53``: Amazon Route 53 now supports the Asia Pacific (New Zealand) Region (ap-southeast-6) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.
+* api-change:``route53domains``: Added new ExtraParams AU_ELIGIBILITY_TYPE, AU_POLICY_REASON, and AU_REGISTRANT_NAME
+* api-change:``mq``: Add CONFIG_MANAGED as a supported AuthenticationStrategy for Amazon MQ for RabbitMQ brokers. Make username and password optional on broker creation for CONFIG_MANAGED brokers.
+* api-change:``cloudfront``: Adding an optional field IpAddressType in CustomOriginConfig
+* api-change:``rds``: This release adds support for MasterUserAuthenticationType parameter on CreateDBInstance, ModifyDBInstance, CreateDBCluster, and ModifyDBCluster operations.
+
+
+2.28.22
+=======
+
+* api-change:``notifications``: Added Org support for notifications:  - `ListMemberAccounts` gets member accounts list, `AssociateOrganizationalUnit` links OU to notification configuration, `DisassociateOrganizationalUnit` removes OU from notification configuration, `ListOrganizationalUnits` shows OUs configured for notifications.
+* api-change:``neptune``: Removed the deprecated marker from publiclyAccessible parameter from DbInstance, CreateDbInstance and ModifyDbInstance and added relevant usage information for the parameter.
+* api-change:``workmail``: Make RoleArn an optional parameter for the PutEmailMonitoringConfiguration API, and add UnsupportedOperationException to RegisterToWorkMail.
+* api-change:``ec2``: MaximumEbsAttachments and AttachmentLimitType fields added to DescribeInstanceTypesResponse. G6f, Gr6f, R8i, R8i-flex and p5.4xlarge instance types added to InstanceTypes enum.
+
+
+2.28.21
+=======
+
+* api-change:``ec2``: Release shows new route types such as filtered and advertisement.
+* api-change:``bedrock-runtime``: Fixed stop sequence limit for converse API.
+* api-change:``xray``: AWS X-Ray Features: Support Sampling Rate Boost On Anomaly
+
+
+2.28.20
+=======
+
+* api-change:``mturk``: Remove incorrect endpoint tests
+* api-change:``sso``: Remove incorrect endpoint tests
+* api-change:``rds``: Added RDS HTTP Endpoint feature support flag to DescribeOrderableDBInstanceOptions API
+* api-change:``codeguru-reviewer``: Remove incorrect endpoint tests
+* api-change:``healthlake``: Add ValidationLevel parameter to StartFHIRImportJob API, allowing users to specify a FHIR validation level for their asynchronous import jobs.
+* api-change:``workmailmessageflow``: Remove incorrect endpoint tests
+* api-change:``ec2``: This release adds support for copying Amazon EBS snapshot and AMIs to and from Local Zones.
+* api-change:``scheduler``: Remove incorrect endpoint tests
+* api-change:``ec2-instance-connect``: Remove incorrect endpoint tests
+* api-change:``glue``: Adding support to fetch TargetDatabase field during GetDatabases with AttributesToGet
+* api-change:``omics``: Adds Amazon ECR pull through cache support to AWS HealthOmics, so you can more easily use container images from external sources.
+* api-change:``cloud9``: Remove incorrect endpoint tests
+* api-change:``applicationcostprofiler``: Remove incorrect endpoint tests
+* api-change:``xray``: Remove incorrect endpoint tests
+* api-change:``dynamodb``: Remove incorrect endpoint tests
+* api-change:``fis``: Remove incorrect endpoint tests
+* api-change:``geo-maps``: Remove incorrect endpoint tests
+* api-change:``savingsplans``: Remove incorrect endpoint tests
+* api-change:``fms``: Remove incorrect endpoint tests
+* api-change:``cloudsearchdomain``: Remove incorrect endpoint tests
+* api-change:``cloudhsmv2``: Remove incorrect endpoint tests
+* api-change:``ssm-sap``: Added support for Configuration Checks on SAP HANA Applications.
+* api-change:``timestream-query``: Remove incorrect endpoint tests
+* api-change:``route53domains``: Remove incorrect endpoint tests
+* api-change:``osis``: Remove incorrect endpoint tests
+* api-change:``ses``: Remove incorrect endpoint tests
+* api-change:``apprunner``: Doc only updates for APIs and and datatypes related to IPAddressType and Subnets for IPv6 dualstack support.
+* api-change:``databrew``: Remove incorrect endpoint tests
+* api-change:``connect``: AgentStatusDrillDown feature in GetCurrentMetricData API. Adding AGENT_STATUS as filter and grouping in GetCurrentMetricData API
+* api-change:``mediastore-data``: Remove incorrect endpoint tests
+* api-change:``codedeploy``: Remove incorrect endpoint tests
+* api-change:``machinelearning``: Remove incorrect endpoint tests
+* api-change:``waf``: Remove incorrect endpoint tests
+* api-change:``autoscaling-plans``: Remove incorrect endpoint tests
+
+
+2.28.19
+=======
+
+* api-change:``migrationhub-config``: Remove incorrect endpoint tests
+* api-change:``kinesis-video-media``: Remove incorrect endpoint tests
+* api-change:``application-insights``: Remove incorrect endpoint tests
+* api-change:``pi``: Remove incorrect endpoint tests
+* api-change:``eks``: Add support for on-demand refresh of EKS cluster insights
+* api-change:``chime``: Remove incorrect endpoint tests
+* api-change:``chime-sdk-voice``: Remove incorrect endpoint tests
+* api-change:``batch``: Added ECS_AL2023_NVIDIA as an option for Ec2Configuration.imageType.
+* api-change:``evidently``: Remove incorrect endpoint tests
+* api-change:``chime-sdk-meetings``: Remove incorrect endpoint tests
+* api-change:``neptune-graph``: Add StartGraph and StopGraph operations to Neptune Analytics
+* api-change:``sagemaker``: This release adds support for AutoScaling on SageMaker HyperPod.
+* api-change:``codeguruprofiler``: Remove incorrect endpoint tests
+* api-change:``chime-sdk-identity``: Remove incorrect endpoint tests
+* api-change:``lakeformation``: Remove incorrect endpoint tests
+* api-change:``workdocs``: Remove incorrect endpoint tests
+* api-change:``timestream-write``: Remove incorrect endpoint tests
+* api-change:``frauddetector``: Remove incorrect endpoint tests
+* api-change:``workmail``: Remove incorrect endpoint tests
+* api-change:``ds``: Add APIs for CA AutoEnrollment support: DescribeCAEnrollmentPolicy, EnableCAEnrollmentPolicy and DisableCAEnrollmentPolicy.
+* api-change:``opsworks-cm``: The opsworks-cm client has been removed following the deprecation of the service.
+* api-change:``elasticache``: Remove incorrect endpoint tests
+* api-change:``datapipeline``: Remove incorrect endpoint tests
+* api-change:``amplifybackend``: Remove incorrect endpoint tests
+* api-change:``discovery``: Remove incorrect endpoint tests
+* api-change:``redshift``: Remove incorrect endpoint tests
+* api-change:``schemas``: Remove incorrect endpoint tests
+* api-change:``kinesisvideo``: Remove incorrect endpoint tests
+* api-change:``inspector``: Remove incorrect endpoint tests
+* api-change:``snow-device-management``: Remove incorrect endpoint tests
+* api-change:``robomaker``: Remove incorrect endpoint tests
+* api-change:``personalize``: Remove incorrect endpoint tests
+* api-change:``qldb-session``: Remove incorrect endpoint tests
+* api-change:``lex-models``: Remove incorrect endpoint tests
+* api-change:``opsworks``: The opsworks client has been removed following the deprecation of the service.
+* api-change:``voice-id``: Remove incorrect endpoint tests
+
+
+2.28.18
+=======
+
+* api-change:``mq``: Remove incorrect endpoint tests
+* api-change:``dlm``: Remove incorrect endpoint tests
+* api-change:``connectparticipant``: Amazon Connect Participant Service: Remove unused fields from WebRTCConnection
+* api-change:``waf-regional``: Remove incorrect endpoint tests
+* api-change:``rbin``: Remove incorrect endpoint tests
+* api-change:``arc-zonal-shift``: This release adds new API options to enable allowed windows and multiple alarms for practice runs.
+* api-change:``ram``: Remove incorrect endpoint tests
+* api-change:``elastictranscoder``: Remove incorrect endpoint tests
+* api-change:``route53-recovery-cluster``: Remove incorrect endpoint tests
+* api-change:``apprunner``: Remove incorrect endpoint tests
+* api-change:``lookoutvision``: Remove incorrect endpoint tests
+* api-change:``personalize-events``: Remove incorrect endpoint tests
+* api-change:``codestar-connections``: Remove incorrect endpoint tests
+* api-change:``ec2``: Add new APIs for viewing how your shared AMIs are used by other accounts, and identify resources in your account that are dependent on particular AMIs
+* api-change:``geo-routes``: Added RouteFerryNotice PotentialViolatedVehicleRestrictionUsage value for CalculateRoutes. This value indicates when the Route is potentially forbidden for the given vehicle profile.
+* api-change:``greengrass``: Remove incorrect endpoint tests
+* api-change:``sagemaker-geospatial``: Remove incorrect endpoint tests
+* api-change:``globalaccelerator``: Remove incorrect endpoint tests
+* api-change:``identitystore``: Remove incorrect endpoint tests
+* api-change:``signer``: Remove incorrect endpoint tests
+* api-change:``kafka``: Remove incorrect endpoint tests
+* api-change:``codecommit``: Remove incorrect endpoint tests
+* api-change:``pinpoint``: Remove incorrect endpoint tests
+* api-change:``iotsecuretunneling``: Remove incorrect endpoint tests
+* api-change:``finspace``: Remove incorrect endpoint tests
+* api-change:``mgh``: Remove incorrect endpoint tests
+* api-change:``comprehendmedical``: Remove incorrect endpoint tests
+* api-change:``migration-hub-refactor-spaces``: Remove incorrect endpoint tests
+* api-change:``glacier``: Remove incorrect endpoint tests
+* api-change:``servicecatalog-appregistry``: Remove incorrect endpoint tests
+
+
+2.28.17
+=======
+
+* api-change:``ec2``: Added IPv6 support for AWS Client VPN.
+* api-change:``lookoutequipment``: Remove incorrect endpoint tests
+* api-change:``kinesis-video-archived-media``: Remove incorrect endpoint tests
+* api-change:``dax``: Remove incorrect endpoint tests
+* api-change:``kendra``: Remove incorrect endpoint tests
+* api-change:``devops-guru``: Remove incorrect endpoint tests
+* api-change:``sagemaker-edge``: Remove incorrect endpoint tests
+* api-change:``personalize-runtime``: Remove incorrect endpoint tests
+* api-change:``forecast``: Remove incorrect endpoint tests
+* api-change:``codeartifact``: Remove incorrect endpoint tests
+* api-change:``snowball``: Remove incorrect endpoint tests
+* api-change:``kinesisanalytics``: Remove incorrect endpoint tests
+* api-change:``emr-containers``: Remove incorrect endpoint tests
+* api-change:``translate``: Remove incorrect endpoint tests
+* api-change:``finspace-data``: Remove incorrect endpoint tests
+* api-change:``cloudsearch``: Remove incorrect endpoint tests
+* api-change:``iotfleethub``: Remove incorrect endpoint tests
+* api-change:``chime-sdk-media-pipelines``: Remove incorrect endpoint tests
+* api-change:``appflow``: Remove incorrect endpoint tests
+* api-change:``chime-sdk-messaging``: Remove incorrect endpoint tests
+* api-change:``mediastore``: Remove incorrect endpoint tests
+* api-change:``resourcegroupstaggingapi``: Remove incorrect endpoint tests
+* api-change:``mediapackage-vod``: Remove incorrect endpoint tests
+* api-change:``sqs``: Documentation update for Amazon SQS Supports Large Payload Message feature
+* api-change:``cloudtrail-data``: Remove incorrect endpoint tests
+* api-change:``support-app``: Remove incorrect endpoint tests
+* api-change:``wellarchitected``: Remove incorrect endpoint tests
+* api-change:``sagemaker-featurestore-runtime``: Remove incorrect endpoint tests
+* api-change:``shield``: Remove incorrect endpoint tests
+* api-change:``codestar-notifications``: Remove incorrect endpoint tests
+* api-change:``serverlessrepo``: Remove incorrect endpoint tests
+* api-change:``lex-runtime``: Remove incorrect endpoint tests
+* api-change:``b2bi``: Updated APIs to support custom validation rules.
+* api-change:``mediaconvert``: This release adds support for input rendition selection for HLS input, adds new Share API to enable sharing jobs with AWS Support for support investigations, and adds INCLUDE_AS_TS to iFrameOnlyManifest setting for HLS outputs.
+* api-change:``timestream-influxdb``: Add MAINTENANCE status for DbInstance and DbCluster
+* api-change:``cur``: Remove incorrect endpoint tests
+* api-change:``support``: Remove incorrect endpoint tests
+* api-change:``datazone``: Releasing the following features - Asset classification that lets users use restricted terms for classifying assets if they have the right permissions. Also adding a new enum value "Moving" to project status.
+* api-change:``qbusiness``: The Amazon Q Business GetDocumentContent operation now supports retrieval of the extracted text content in JSON format.
+* api-change:``sagemaker-runtime``: Remove incorrect endpoint tests
+* api-change:``codeguru-security``: Documentation update to notify users of the discontinuation of Amazon CodeGuru Security.
+
+
+2.28.16
+=======
+
+* api-change:``qldb``: Remove incorrect endpoint tests
+* bugfix:``dynamodb``: Correct Scan and Scanned Count values when resuming a scan or query with a ``--starting-token``
+* api-change:``elb``: Remove incorrect endpoint tests
+* api-change:``route53-recovery-readiness``: Remove incorrect endpoint tests
+* api-change:``medialive``: AWS Elemental MediaLive now has a field called "SubtitleRows" for controlling subtitle row count for DVB-Sub and Burn-In captions outputs
+* api-change:``marketplacecommerceanalytics``: Remove incorrect endpoint tests
+* enhancement:Python: Update bundled Python interpreter to 3.13.7
+* api-change:``sagemaker-a2i-runtime``: Remove incorrect endpoint tests
+* api-change:``proton``: Remove incorrect endpoint tests
+* api-change:``clouddirectory``: Remove incorrect endpoint tests
+* api-change:``qconnect``: Releasing model ID support for UpdateAIPrompt
+* api-change:``healthlake``: Remove incorrect endpoint tests
+* api-change:``cognito-sync``: Remove incorrect endpoint tests
+* api-change:``wafv2``: test and verified, safe to release
+* api-change:``sagemaker``: Launch SageMaker Notebook Instances support for AL2023 along with P6-B200 instance type and Rootless Docker support for SageMaker Studio.
+* api-change:``memorydb``: Remove incorrect endpoint tests
+* api-change:``iotanalytics``: Remove incorrect endpoint tests
+* api-change:``synthetics``: Added multi browser support for synthetics canaries, Increased ephemeral storage limit from 5GB to 10GB
+* api-change:``docdb``: Remove incorrect endpoint tests
+* api-change:``macie2``: Remove incorrect endpoint tests
+* api-change:``rds``: Updates Amazon RDS documentation for Db2 read-only replicas.
+* api-change:``simspaceweaver``: Remove incorrect endpoint tests
+
+
+2.28.15
+=======
+
+* api-change:``greengrassv2``: Remove incorrect endpoint tests
+* api-change:``ecr-public``: Remove incorrect endpoint tests
+* api-change:``iotthingsgraph``: Remove incorrect endpoint tests
+* api-change:``cloudhsm``: Remove incorrect endpoint tests
+* api-change:``lookoutmetrics``: Remove incorrect endpoint tests
+* api-change:``ebs``: Remove incorrect endpoint tests
+* api-change:``backup-gateway``: Remove incorrect endpoint tests
+* api-change:``iotevents``: Remove incorrect endpoint tests
+* api-change:``lexv2-runtime``: Remove incorrect endpoint tests
+* api-change:``glue``: Added support for preprocessing queries in Data Quality operations through new DataQualityGlueTable structure.
+* api-change:``panorama``: Remove incorrect endpoint tests
+* api-change:``ssm-contacts``: Doc-only updates for Incident Manager Contacts August 2025
+* api-change:``es``: Remove incorrect endpoint tests
+* api-change:``mediapackage``: Remove incorrect endpoint tests
+* api-change:``kinesis-video-signaling``: Remove incorrect endpoint tests
+* api-change:``guardduty``: Remove Pattern trait from email field
+* api-change:``managedblockchain``: Remove incorrect endpoint tests
+* api-change:``pinpoint-email``: Remove incorrect endpoint tests
+* api-change:``appfabric``: Remove incorrect endpoint tests
+* api-change:``gameliftstreams``: The default application in a stream group can now be changed at any time using UpdateStreamGroup to update the DefaultApplicationIdentifier.
+* api-change:``iotdeviceadvisor``: Remove incorrect endpoint tests
+* api-change:``apigatewaymanagementapi``: Remove incorrect endpoint tests
+* api-change:``comprehend``: Remove incorrect endpoint tests
+* api-change:``s3outposts``: Remove incorrect endpoint tests
+* api-change:``ecs``: This is a documentation only release that adds additional information for the update-service request parameters.
+* api-change:``forecastquery``: Remove incorrect endpoint tests
+* api-change:``iotevents-data``: Remove incorrect endpoint tests
+* api-change:``cognito-identity``: Remove incorrect endpoint tests
+* api-change:``resource-groups``: Remove incorrect endpoint tests
+* api-change:``elasticbeanstalk``: Remove incorrect endpoint tests
+
+
+2.28.14
+=======
+
+* api-change:``pinpoint-sms-voice-v2``: This change added InternationalSendingEnbaled as part of describe/Update/Request phone number API response, and as part of update/Request phone number API request
+* api-change:``cognito-idp``: This release adds support for the new Terms APIs which allow displaying Terms of Use and Privacy Policy on the Managed Login user-registration page.
+* api-change:``eks``: EKS Add-ons Custom Namespace Support
+* api-change:``billing``: Clarify IPv4 and IPv6 endpoints
+* api-change:``kinesisanalyticsv2``: Adds Key Management Service (KMS) support allowing customer-managed key (CMK) encryption for Flink application data.
+* api-change:``sagemaker``: This release adds 1/ Launch ml.p5.4xlarge instance in Processing jobs, Training jobs and Training Plan 2/ Makes S3Uri to be required for S3FileSystem and S3FileSystemConfig.
+* api-change:``datazone``: This release supports policy grant identifier for cloud formation integration
+* api-change:``route53-recovery-control-config``: Remove incorrect endpoint tests
+* api-change:``bedrock-runtime``: Launch CountTokens API to allow token counting
+* api-change:``detective``: Remove incorrect endpoint tests
+* api-change:``dynamodb``: Remove incorrect endpoint tests
+
+
+2.28.13
+=======
+
+* api-change:``cleanrooms``: Support error message configuration for analysis templates
+* api-change:``ec2``: Add support for "warning" volume status.
+* api-change:``polly``: Added support for new output format - Opus.
+
+
+2.28.12
+=======
+
+* api-change:``connect``: Amazon Connect Service Feature: Add support to enable multi-user in-app, web, and video calling.
+* api-change:``sagemaker``: Customer managed keys now available for volume encryption of SageMaker HyperPod clusters.
+* api-change:``batch``: Added default_x86_64 and default_arm64 as values to the instanceTypes field.
+* api-change:``bcm-dashboards``: Billing and Cost Management Dashboards enables users to create dashboards that combine multiple visualizations of cost and usage data. Users can create, manage, and share dashboards. Tags are also available for dashboards.
+* api-change:``connectparticipant``: Amazon Connect Service Feature: Add support to enable multi-user in-app, web, and video calling.
+* api-change:``s3control``: Adds support for Compute checksum functionality in Amazon S3 Batch Operations. You can now calculate checksums for a list of objects using supported algorithms in Amazon S3, without requiring a restore or download
+
+
+2.28.11
+=======
+
+* api-change:``amp``: Add Resource-based Policy APIs for Amazon Prometheus
+* api-change:``glue``: AWS Glue Zero ETL now supports On-demand snapshot load
+* api-change:``bedrock-agent``: This release adds support for saving Bedrock Flows while node configuration is still in progress, even if the Flow is not yet able to be invoked
+
+
+2.28.10
+=======
+
+* api-change:``ec2``: This release adds ModifyInstanceConnectEndpoint API to update configurations on existing EC2 Instance Connect Endpoints and improves IPv6 support through dualstack DNS names for EC2 Instance Connect Endpoints.
+* enhancement:configure: Improved error messaging for `aws configure import --csv` command to clarify file
+* api-change:``dynamodb``: This release 1/ Adds support for throttled keys mode for CloudWatch Contributor Insights, 2/ Adds throttling reasons to exceptions across dataplane APIs. 3/ Explicitly models ThrottlingException as a class in statically typed languages. Refer to the launch day blog post for more details.
+* api-change:``pcs``: Updated the regex pattern and description of iamInstanceProfileArn in the CreateComputeNodeGroup and UpdateComputeNodeGroup API actions. Name and path requirements apply to the ARN of the IAM role associated with the instance profile and not the ARN of the instance profile.
+* api-change:``fsx``: Amazon FSx for NetApp ONTAP 2nd generation file systems now support decreasing SSD storage capacity.
+* api-change:``glue``: AWS Glue now supports Trusted Identity Propagation.
+* api-change:``medialive``: CMAF Ingest output groups in MediaLive can now accept one additional destination url for single pipeline channels and up to two additional destination urls for standard channels.
+* api-change:``workspaces``: New APIs introduced to import WorkSpaces BYOL image using a new process that leveraged EC2 Image Builder. WorkSpaces tests and fixes your image's compatibility issues and supports customized VM images.
+* api-change:``directconnect``: Added pagination support for DescribeHostedConnections, DescribeVirtualInterfaces, DescribeConnections, DescribeInterconnects, DescribeLags. Added asnLong support for BGP peer operations which supports a large range.
+* api-change:``guardduty``: Added support for entity lists.
+* api-change:``arc-region-switch``: Endpoint rule test and documentation update.
+* api-change:``servicediscovery``: Added support for cross account through Id parameter overloading with ARN and allow owner account for some APIs instead of ARN
+* api-change:``bcm-recommended-actions``: Initial SDK release for AWS Billing and Cost Management Recommended Actions.
+* api-change:``qapps``: Documentation update for Amazon Q Apps API Reference
+
+
+2.28.9
+======
+
+* api-change:``datazone``: Adds support for account pools and project profile account decoupling
+* api-change:``security-ir``: Added support for Organizational Unit-level Membership configuration and the ability to resume a cancelled membership.
+* api-change:``braket``: Add support for Braket program sets.
+* api-change:``partnercentral-selling``: Add Tagging Support for Opportunity resources
+* api-change:``fsx``: Add Dual-Stack support for Amazon FSx for OpenZFS file systems
+* api-change:``sagemaker``: This release introduces compute quota for GPU, Trainium accelerators, vCPU, and vCPU memory utilization across teams in HyperPod clusters
+
+
+2.28.8
+======
+
+* api-change:``organizations``: This release introduces 2 new APIs in Organizations: 1. ListAccountsWithInvalidEffectivePolicy 2. ListEffectivePolicyValidationErrors
+* api-change:``sagemaker``: IAM Identity Center trusted identity propagation is now supported in SageMaker Studio.
+* api-change:``transcribe``: AWS HealthScribe now supports specifying preferred patient pronouns through the MedicalScribeContext parameter for use in the generated clinical notes.
+* api-change:``ec2``: Release to allow route table association with a PublicIpv4Pool.
+* api-change:``codebuild``: AWS CodeBuild now supports PullRequestBuildPolicy in webhook object.
+* api-change:``backupsearch``: Using recommended smithy trait to generate regional endpoints for Backup Search
+
+
+2.28.7
+======
+
+* enhancement:``sso``: Clarify ``aws sso login`` to only suggest a different device when using ``--use-device-code``.
+* api-change:``evs``: Update for general availability of Amazon Elastic VMware Service (EVS).
+* api-change:``bedrock``: This release includes model updates and enhanced SDK documentation for union fields in automated reasoning policy components. Added docs cover policy definitions, mutations (add/update for rules/types/variables), build assets, workflow sources, test results, and tag exception handling.
+* api-change:``ec2``: This release adds AvailabilityZoneId support for CreateVolume, DescribeVolume, LaunchTemplates, RunInstances, DescribeInstances, CreateDefaultSubnet, SpotInstances, and CreateDefaultSubnet APIs.
+* api-change:``lambda``: Doc-only update for Lambda that updates the maximum payload size for response streaming invocations to 200 MB.
+* api-change:``quicksight``: Add RowAxisDisplayOptions and ColumnAxisDisplayOptions to HeatMapConfiguration, add Actions to PluginVisual, increase limit for CalculatedFields list
+* api-change:``cognito-idp``: Remove SigV4 auth requirement for GetTokensFromRefreshToken
+* api-change:``sso-admin``: Added support for managing user background session for applications
+* api-change:``deadline``: Adds support for Wait and Save feature in service-managed fleets
+* api-change:``connect``: Updating SearchUserHierarchyGroups API
+
+
+2.28.6
+======
+
+* api-change:``connect``: This release adds a new API GetContactMetrics for Amazon Connect.
+* api-change:``sagemaker``: Adds support for GB200 UltraServers in Amazon SageMaker training jobs, training plans, and HyperPod clusters
+* api-change:``iot-data``: Adding DeleteConnection API to IoT Data Plane
+* api-change:``inspector2``: Add CVSSV4 to Vulnerability Search API and update enable/disable account id list length to 5
+* api-change:``transcribe``: Update documentation to use key ARN only in OutputEncryptionKMSKeyId request parameter
+
+
+2.28.5
+======
+
+* api-change:``glue``: AWS Glue Data Catalog now supports Iceberg Optimization settings at the Catalog level, and supports new options to control the optimization job run rate.
+* api-change:``gameliftstreams``: Adds Proton 9.0-2 to the list of runtime environment options available when creating an Amazon GameLift Streams application
+* api-change:``guardduty``: Added support for VPC owner account ID associated with DNS request in the GuardDuty finding.
+* api-change:``codebuild``: AWS CodeBuild now supports comment-based pull request control.
+* api-change:``cloudfront``: Added new viewer security policy, TLSv1.3_2025, for CloudFront.
+* api-change:``batch``: This feature allows customers to use AWS Batch with Linux with ARM64 CPU Architecture with Fargate Spot compute support.
+
+
+2.28.4
+======
+
+* api-change:``budgets``: Adds support for billing views. Billing views let you control access to cost and usage data through an AWS resource, streamlining the process of sharing cost and usage data across account boundaries. With this release, you can now create and view budgets based on billing views.
+* api-change:``appstream``: Added support for G6 instances
+* api-change:``ec2``: Mark Elastic Inference Accelerators and Elastic Graphics Processor parameters as deprecated on the RunInstances and LaunchTemplate APIs.
+* api-change:``opensearchserverless``: Features: add Index APIs in OpenSearchServerless to support managed semantic enrichment
+* enhancement:openssl: Update bundled OpenSSL version to 1.1.1zc for Linux installers
+* api-change:``qbusiness``: Amazon Q Business now supports the GetDocumentContent() API that enables customers to securely access the source documents through clickable citation links at query time
+
+
+2.28.3
+======
+
+* api-change:``sagemaker``: Add support for SageMaker Hyperpod continuous scaling and custom AMI; Introduce new APIs: ListClusterEvents, DescribeClusterEvent, BatchAddClusterNodes
+* api-change:``rds``: Adds a new Aurora Serverless v2 attribute to the DBCluster resource to expose the platform version. Also updates the attribute to be part of both the engine version and platform version descriptions.
+* api-change:``bedrock-runtime``: This release adds support for Automated Reasoning checks output models for the Amazon Bedrock Guardrails ApplyGuardrail API.
+* api-change:``bedrock``: This release introduces Automated Reasoning checks for Amazon Bedrock Guardrails. The feature adds new APIs for policy building, refinement, version management, and testing. Guardrail APIs now support Automated Reasoning policy configuration and validation output.
+* api-change:``eks``: Add support for deletion protection on EKS clusters
+
+
+2.28.2
+======
+
+* api-change:``sagemaker``: This release adds the ability for customers to attach and detach their EBS volumes to EKS-orchestrated HyperPod cluster nodes.
+* api-change:``iotsitewise``: Support Interface for IoT SiteWise Asset Modeling
+* enhancement:``awscrt``: Update awscrt version to 0.27.5.
+* api-change:``codeconnections``: New integration with Azure DevOps provider type.
+* api-change:``bedrock-agentcore``: Remove superfluous field from API
+* api-change:``evs``: TagResource API now throws ServiceQuotaExceededException when the number of tags on the Amazon EVS resource exceeds the maximum allowed. TooManyTagsException is deprecated.
+
+
+2.28.1
+======
+
+* api-change:``auditmanager``: Added a note to Framework APIs (CreateAssessmentFramework, GetAssessmentFramework, UpdateAssessmentFramework) clarifying that the Controls object returns a partial response when called through Framework APIs. Added documentation that the Framework's controlSources parameter is no longer supported.
+* api-change:``observabilityadmin``: CloudWatch Observability Admin adds the ability to enable telemetry on AWS resources such as Amazon VPCs (Flow Logs) in customers AWS Accounts and Organizations. The release introduces new APIs to manage telemetry rules, which define telemetry settings to be applied on AWS resources.
+* api-change:``pcs``: Add support for IPv6 Networking for Clusters.
+* api-change:``sns``: Amazon SNS support for Amazon SQS fair queues
+* api-change:``aiops``: This release includes fix for InvestigationGroup timestamp conversion issue.
+* api-change:``arc-region-switch``: This is the initial SDK release for Region switch
+* api-change:``acm-pca``: Doc-only update to add more information to GetCertificate action.
+* api-change:``securityhub``: Release new resource detail type CodeRepository
+* api-change:``lightsail``: This release adds support for the Asia Pacific (Jakarta) (ap-southeast-3) Region.
+
+
+2.28.0
+======
+
+* api-change:``workspaces-web``: Added ability to log session activity on a portal to an S3 bucket.
+* api-change:``quicksight``: Added Impala connector support
+* api-change:``ec2``: Added support for the force option for the EC2 instance terminate command. This feature enables customers to recover resources associated with an instance stuck in the shutting-down state as a result of rare issues caused by a frozen operating system or an underlying hardware problem.
+* api-change:``glue``: Added support for Route node, S3 Iceberg sources/targets, catalog Iceberg sources, DynamoDB ELT connector, AutoDataQuality evaluation, enhanced PII detection with redaction, Kinesis fan-out support, and new R-series worker types.
+* api-change:``iot``: This release allows AWS IoT Core users to use their own AWS KMS keys for data protection
+* api-change:``s3control``: Add Tags field to CreateAccessPoint
+* feature:``bedrock``: Add support for retrieving a Bearer token from environment variables to enable bearer authentication with Bedrock services.
+* api-change:``entityresolution``: Add support for creating advanced rule-based matching workflows in AWS Entity Resolution.
+* api-change:``sesv2``: This release introduces support for Multi-tenant management
+* api-change:``inspector2``: Extend usage to include agentless hours and add CODE_REPOSITORY to aggregation resource type
+* api-change:``elbv2``: This release enables secondary IP addresses for Network Load Balancers.
+* api-change:``customer-profiles``: The release updates standard profile with 2 new fields that supports account-level engagement. Updated APIs include CreateProfile, UpdateProfile, MergeProfiles, SearchProfiles, BatchGetProfile, GetSegmentMembership, CreateSegmentDefinition, CreateSegmentEstimate.
+* api-change:``opensearch``: Granular access control support for NEO-SAML with IAMFederation for AOS data source
+
+
+2.27.63
+=======
+
+* api-change:``ds``: This release adds support for AWS Managed Microsoft AD Hybrid Edition, introducing new operations: StartADAssessment, DescribeADAssessment, ListADAssessments, DeleteADAssessment, CreateHybridAD, UpdateHybridAD, and DescribeHybridADUpdate; and updated existing operation: DescribeDirectories.
+* api-change:``iotwireless``: Added TxPowerIndexMin, TxPowerIndexMax, NbTransMin and NbTransMax params to ServiceProfile.
+* api-change:``docdb``: Add support for setting Serverless Scaling Configuration on clusters.
+* enhancement:autocomplete: Add completion model for ``dsql``
+* api-change:``ec2``: Release to show the next hop IP address for routes propagated by VPC Route Server into VPC route tables.
+* api-change:``cloudfront``: This release adds new origin timeout options: 1) ResponseCompletionTimeout and 2) OriginReadTimeout (for S3 origins)
+
+
+2.27.62
+=======
+
+* api-change:``cleanrooms``: This feature provides the ability to update the table reference and allowed columns on an existing configured table.
+* api-change:``deadline``: Adds support for tag management on monitors.
+* api-change:``opensearchserverless``: This is to support Granular access control support for SAML with IAMFedraton in AOSS
+* api-change:``location``: This release 1) adds support for multi-polygon geofences with disconnected territories, and 2) enables polygon exclusion zones within geofences for more accurate representation of real-world boundaries.
+* api-change:``batch``: AWS Batch for SageMaker Training jobs feature support.  Includes new APIs for service job submission (e.g., SubmitServiceJob) and managing service environments (e.g., CreateServiceEnvironment) that enable queueing SageMaker Training jobs.
+
+
+2.27.61
+=======
+
+* api-change:``directconnect``: Enable MACSec support and features on Interconnects.
+* api-change:``osis``: Add Pipeline Role Arn as an optional parameter to the create / update pipeline APIs as an alternative to passing in the pipeline configuration body
+* api-change:``iotsitewise``: Add support for native anomaly detection in IoT SiteWise using new Computation Model APIs
+
+
+2.27.60
+=======
+
+* api-change:``ec2``: Transit Gateway native integration with AWS Network Firewall. Adding new enum value for the new Transit Gateway Attachment type.
+* api-change:``appintegrations``: Amazon AppIntegrations introduces new configuration capabilities to enable customers to manage iframe permissions, control application refresh behavior (per contact or per browser/cross-contact), and run background applications (service).
+* api-change:``config``: Documentation improvements have been made to the EvaluationModel and DescribeConfigurationRecorders APIs.
+* api-change:``kms``: Doc only update: fixed grammatical errors.
+* api-change:``socialmessaging``: This release introduces new WhatsApp template management APIs that enable customers to programmatically create and submit templates for approval, monitor approval status, and manage the complete template lifecycle
+* api-change:``sqs``: Documentation updates for Amazon SQS fair queues feature.
+* api-change:``mediapackagev2``: This release adds support for specifying a preferred input for channels using CMAF ingest.
+* api-change:``budgets``: Adds IPv6 and PrivateLink support for AWS Budgets in IAD.
+
+
+2.27.59
+=======
+
+* api-change:``datazone``: This release adds support for 1) highlighting relevant text in returned results for Search and SearchListings APIs and 2) returning aggregated counts of values for specified attributes for SearchListings API.
+* api-change:``omics``: Add Git integration and README support for HealthOmics workflows
+
+
+2.27.58
+=======
+
+* api-change:``workspaces-thin-client``: Added the lastUserId parameter to the ListDevices and GetDevice API.
+* api-change:``glue``: AWS Glue now supports dynamic session policies for job executions. This feature allows you to specify custom, fine-grained permissions for each job run without creating multiple IAM roles.
+* api-change:``ec2``: Added support for skip-os-shutdown option for the EC2 instance stop and terminate operations. This feature enables customers to bypass the graceful OS shutdown, supporting faster state transitions when instance data preservation isn't critical.
+
+
+2.27.57
+=======
+
+* enhancement:EMR: Updated create-cluster and describe-cluster commands to support --extended-support and --no-extended-support arguments
+* api-change:``neptunedata``: This release updates the supported regions for Neptune API to include current AWS regions.
+* enhancement:Dockerfile: Include ``findutils`` and ``jq`` in Docker image
+* api-change:``lambda``: This release migrated the model to Smithy keeping all features unchanged.
+* api-change:``ecr``: Add support for Image Tag Mutability Exception feature, allowing repositories to define wildcard-based patterns that override the default image tag mutability settings.
+* api-change:``emr``: This release adds new parameter 'ExtendedSupport' in AWS EMR RunJobFlow, ModifyCluster and DescribeCluster API.
+
+
+2.27.56
+=======
+
+* api-change:``ec2``: This release adds support for C8gn, F2 and P6e-GB200 Instance types
+* api-change:``cloudfront``: Add dualstack endpoint support
+* api-change:``timestream-influxdb``: Timestream for InfluxDB adds support for db.influx.24xlarge instance type. This enhancement enables higher compute capacity for demanding workloads through CreateDbInstance, CreateDbCluster, UpdateDbInstance, and UpdateDbCluster APIs.
+* api-change:``deadline``: Add support for VPC resource endpoints in Service Managed Fleets
+* enhancement:cloudfront: This release adds automatic pagination to the list-origin-access-controls command.  To disable this behavior, please use the --no-paginate flag.
+* api-change:``sagemaker``: This release adds 1/ Support for S3FileSystem in CustomFileSystems 2/ The ability for a customer to select their preferred IpAddressType for use with private Workforces 3/ Support for p4de instance type in SageMaker Training Plans
+
+
+2.27.55
+=======
+
+* api-change:``mediaconvert``: This release adds support for TAMS server integration with MediaConvert inputs.
+* api-change:``logs``: CloudWatchLogs launches GetLogObject API with streaming support for efficient log data retrieval. Logs added support for new AccountPolicy type METRIC_EXTRACTION_POLICY. For more information, see CloudWatch Logs API documentation
+* api-change:``ssm``: July 2025 doc-only updates for Systems Manager.
+* api-change:``auditmanager``: Updated error handling for RegisterOrganizationAdminAccount API to properly translate TooManyExceptions to HTTP 429 status code. This enhancement improves error handling consistency and provides clearer feedback when request limits are exceeded.
+* api-change:``sesv2``: Added IP Visibility support for managed dedicated pools. Enhanced GetDedicatedIp and GetDedicatedIps APIs to return managed IP addresses.
+* api-change:``outposts``: Add AWS Outposts API to surface customer billing information
+
+
+2.27.54
+=======
+
+* api-change:``synthetics``: This feature allows AWS Synthetics customers to provide code dependencies using lambda layer while creating a canary
+* api-change:``mediaconvert``: This release expands the range of supported audio outputs to include xHE, 192khz FLAC and the deprecation of dual mono for AC3.
+* api-change:``cloudfront``: Doc only update for CloudFront that fixes some customer-reported issues
+* api-change:``keyspacesstreams``: Doc only update for the Amazon Keyspaces Streams API.
+* api-change:``mailmanager``: Allow underscores in the local part of the input of the "Email recipients rewrite" action in rule sets.
+* api-change:``stepfunctions``: Align input with style guidelines.
+* api-change:``ec2``: AWS Free Tier Version2 Support
+* api-change:``cleanroomsml``: This release introduces Parquet result format support for ML Input Channel models in AWS Clean Rooms ML.
+
+
+2.27.53
+=======
+
+* api-change:``glue``: AWS Glue now supports schema, partition and sort management of Apache Iceberg tables using Glue SDK
+* api-change:``bedrock``: This release adds support for on-demand custom model inference through CustomModelDeployment APIs for Amazon Bedrock.
+* api-change:``mediapackagev2``: This release adds support for CDN Authentication using Static Headers in MediaPackage v2.
+* api-change:``iotwireless``: FuotaTaskId is not a valid IdentifierType for EventConfiguration and is being removed from possible IdentifierType values.
+* api-change:``stepfunctions``: Doc-only update to introduction, and edits to clarify input parameter and the set of control characters.
+* api-change:``bedrock-agentcore``: Initial release of Amazon Bedrock AgentCore SDK including Runtime, Built-In Tools, Memory, Gateway and Identity.
+* api-change:``networkflowmonitor``: Introducing 2 new scope status types - DEACTIVATING and DEACTIVATED.
+* api-change:``guardduty``: Add expectedBucketOwner parameter to ThreatIntel and IPSet APIs.
+* api-change:``bedrock-runtime``: document update to support on demand custom model.
+* api-change:``datasync``: AWS DataSync now supports IPv6 address inputs and outputs in create, update, and describe operations for NFS, SMB, and Object Storage locations
+* api-change:``payment-cryptography-data``: Expand length of message data field for Mac generation and validation to 8192 characters.
+* api-change:``bedrock-agentcore-control``: Initial release of Amazon Bedrock AgentCore SDK including Runtime, Built-In Tools, Memory, Gateway and Identity.
+* api-change:``logs``: CloudWatch Logs updates: Added X-Ray tracing for Amazon Bedrock Agent resources. Logs introduced Log Group level resource policies (managed through Put/Delete/Describe Resource Policy APIs). For more information, see CloudWatch Logs API documentation.
+
+
+2.27.52
+=======
+
+* api-change:``ecs``: This release removes hookDetails for the Amazon ECS native blue/green deployments.
+
+
+2.27.51
+=======
+
+* api-change:``s3``: Amazon S3 Metadata live inventory tables provide a queryable inventory of all the objects in your general purpose bucket so that you can determine the latest state of your data. To help minimize your storage costs, use journal table record expiration to set a retention period for your records.
+* api-change:``ecs``: Amazon ECS supports native blue/green deployments, allowing you to validate new service revisions before directing production traffic to them.
+* api-change:``quicksight``: Introduced custom instructions for topics.
+* api-change:``pricing``: This release adds support for new filter types in GetProducts API, including EQUALS, CONTAINS, ANY_OF, and NONE_OF.
+* api-change:``opensearch``: AWS Opensearch adds support for enabling s3 vector engine options. After enabling this option, customers will be able to create indices with s3 vector engine.
+* api-change:``repostspace``: This release introduces Channels functionality with CreateChannel, GetChannel, ListChannels, and UpdateChannel operations. Channels provide dedicated collaboration spaces where teams can organize discussions and knowledge by projects, business units, or areas of responsibility.
+* api-change:``s3vectors``: Amazon S3 Vectors provides cost-effective, elastic, and durable vector storage for queries based on semantic meaning and similarity.
+* api-change:``dynamodbstreams``: Added support for optional shard filter parameter in DescribeStream api that allows customers to fetch child shards of a read_only parent shard.
+* api-change:``s3tables``: Adds table bucket type to ListTableBucket and GetTableBucket API operations
+* api-change:``datazone``: Removing restriction of environment profile identifier as required field, S3 feature release
+* api-change:``bedrock-agent``: Add support for S3 Vectors as a vector store.
+* api-change:``events``: Add customer-facing logging for the EventBridge Event Bus, enabling customers to better observe their events and extract insights about their EventBridge usage.
+* enhancement:Dockerfile: Update base image for AWS CLI v2 Docker image to Amazon Linux 2023
+* api-change:``ec2``: This release adds support for volume initialization status, which enables you to monitor when the initialization process for an EBS volume is completed. This release also adds IPv6 support to EC2 Instance Connect Endpoints, allowing you to connect to your EC2 Instance via a private IPv6 address.
+* api-change:``sagemaker``: This release adds support for a new Restricted instance group type to enable a specialized environment for running Nova customization jobs on SageMaker HyperPod clusters. This release also adds support for SageMaker pipeline versioning.
+
+
+2.27.50
+=======
+
+* api-change:``freetier``: This release introduces four new APIs: GetAccountPlanState and UpgradeAccountPlan for AWS account plan management; ListAccountActivities and GetAccountActivity that provide activity tracking capabilities.
+* api-change:``ec2``: Adds support to Capacity Blocks for ML for purchasing EC2 P6e-GB200 UltraServers. Customers can now purchase u-p6e-gb200x72 and u-p6e-gb200x36 UltraServers. Adds new DescribeCapacityBlocks andDescribeCapacityBlockStatus APIs. Adds support for CapacityBlockId to DescribeInstanceTopology.
+* api-change:``opsworkscm``: Removing content that refers to an S3 bucket that is no longer in use.
+
+
+2.27.49
+=======
+
+* api-change:``customer-profiles``: This release introduces capability of create Segments via importing a CSV file directly. This consumes the CSV file and creates/updates corresponding profiles for the particular domain.
+* api-change:``route53``: Amazon Route 53 now supports the iso-e regions for private DNS Amazon VPCs and cloudwatch healthchecks.
+* api-change:``deadline``: Added fields for output manifest reporting and task chunking parameters
+* api-change:``sagemaker``: Changes include new StartSession API for SageMaker Studio spaces and CreateHubContentPresignedUrls API for SageMaker JumpStart.
+* api-change:``mediapackagev2``: This release adds support for Microsoft Smooth Streaming (MSS) and allows users to exclude DRM segment Metadata in MediaPackage v2 Origin Endpoints
+* api-change:``ec2``: This release adds GroupOwnerId as a response member to the DescribeSecurityGroupVpcAssociations API and also adds waiters for SecurityGroupVpcAssociations (SecurityGroupVpcAssociationAssociated and SecurityGroupVpcAssociationDisassociated).
+
+
+2.27.48
+=======
+
+* api-change:``s3control``: Added TagResource, UntagResource, and ListTagsForResource support for directory bucket
+* api-change:``ec2``: AWS Site-to-Site VPN now supports IPv6 addresses on outer tunnel IPs, making it easier for customers to build or transition to IPv6-only networks.
+* api-change:``connectcases``: This release adds DeleteCase and DeleteRelatedItem APIs, which enable deleting cases and comments, undoing contact association, and removing service level agreements (SLAs) from cases. Contact center admins can use these APIs to delete cases when requested by customers and correct agent errors.
+* api-change:``s3``: Added support for directory bucket creation with tags and bucket ARN retrieval in CreateBucket, ListDirectoryBuckets, and HeadBucket operations
+
+
+2.27.47
+=======
+
+* api-change:``odb``: This release adds API operations for Oracle Database@AWS. You can use the APIs to create Exadata infrastructure, ODB networks, and Exadata and Autonomous VM clusters inside AWS data centers. The infrastructure is managed by OCI. You can integrate these resources with AWS services.
+* api-change:``sagemaker``: Updated field validation requirements for InstanceGroups.
+* api-change:``cleanroomsml``: This release introduces support for incremental training and distributed training for custom models in AWS Clean Rooms ML.
+* api-change:``rds``: Amazon RDS Custom for Oracle now supports multi-AZ database instances.
+* api-change:``ec2``: Add Context to GetInstanceTypesFromInstanceRequirements API
+* api-change:``datazone``: Add support for the new optional domain-unit-id parameter in the UpdateProject API.
+* api-change:``qbusiness``: New ChatResponseConfiguration to Customize Q Business chat responses for specific use cases and communication needs. Updated Boosting capability allowing admins to provide preference on date attributes for recency and/or provide a preferred data source.
+
+
+2.27.46
+=======
+
+* api-change:``transfer``: Added support for dual-stack (IPv4 and IPv6) endpoints for SFTP public endpoints and VPC-internal endpoints (SFTP, FTPS, FTP, and AS2), enabling customers to configure new servers with IPv4 or dual-stack mode, convert existing servers to dual-stack, and use IPv6 with service APIs.
+* api-change:``bedrock``: Add support for API Keys, Re-Ranker, implicit filter for RAG / KB evaluation for Bedrock APIs.
+* api-change:``ssm``: Introduces AccessType, a new filter value for the DescribeSessions API.
+* api-change:``events``: Added support for EventBridge Dualstack endpoints in AWS GovCloud (US) regions (us-gov-east-1 and us-gov-west-1). The dualstack endpoints are identical for both FIPS and non-FIPS configurations, following the format: events.{region}.api.aws
+* api-change:``medical-imaging``: Added new fields to support the concept of primary image sets within the storage hierarchy.
+* api-change:``logs``: Increase minimum length of queryId parameter to 1 character.
+* api-change:``connect``: This release introduces ChatMetrics to the model, providing comprehensive analytics insights for Amazon Connect chat conversations. Users can access these detailed metrics through the AWS Connect API by using the DescribeContact operation with their specific instance and contact IDs
+* api-change:``iam``: Updated IAM ServiceSpecificCredential support to include expiration, API Key output format instead of username and password for services that will support API keys, and the ability to list credentials for all users in the account for a given service configuration.
+* api-change:``bedrock-runtime``: Add API Key and document citations support for Bedrock Runtime APIs
+* api-change:``arc-zonal-shift``: Added support for on-demand practice runs and balanced capacity checks in ARC autoshift practice.
+* api-change:``pcs``: Fixed the validation pattern for an instance profile Amazon Resource Name (ARN) in AWS PCS.
+* api-change:``quicksight``: Introduced custom permission capabilities for reporting content. Added menu option in exploration to preserve configuration data when textbox menu option is used. Added support for Athena trusted identity propagation.
+* api-change:``networkflowmonitor``: Add ConflictExceptions to UpdateScope and DeleteScope operations for scopes being mutated.
+* api-change:``dataexchange``: This release updates resource Id with alphanumeric constraint, including Asset id, Revision id, Data Set id, Job id, and Event Action id.
+* api-change:``b2bi``: Updated APIs to support inbound EDI split capabilities and additional Partnership-level configurations of generated EDI files' contents and format.
+* api-change:``glue``: releasing source processing properties to support source properties for ODB integrations
+* api-change:``config``: Updated ResourceType enum with new resource types onboarded by AWS Config as of June 2025
+* api-change:``outposts``: Make ContactName and ContactPhoneNumber required fields when creating and updating Outpost Site Addresses.
+* api-change:``dynamodb``: This change adds support for witnesses in global tables. It also adds a new table status, REPLICATION_NOT_AUTHORIZED. This status will indicate scenarios where global replicas table can't be utilized for data plane operations.
+* api-change:``cloudformation``: Added support for UNKNOWN drift status.
+
+
+2.27.45
+=======
+
+* api-change:``sesv2``: Added support for new SES regions
+* api-change:``qconnect``: Adding UnauthorizedException to public SDK
+* api-change:``config``: Added important considerations to the PutConformancePack and PutOrganizationConformancPack APIs.
+* api-change:``rds``: StartDBCluster and StopDBCluster can now throw InvalidDBShardGroupStateFault.
+* api-change:``guardduty``: Update JSON target for Kubernetes workload resource type.
+* api-change:``connect``: This release adds the following value to an InitiateAs enum: COMPLETED
+* api-change:``glue``: AWS Glue now supports schema, partition and sort management of Apache Iceberg tables using Glue SDK
+* enhancement:User Agent: Append session id to user agent string
+
+
+2.27.44
+=======
+
+* api-change:``deadline``: Added fields to track cumulative task retry attempts for steps and jobs
+* api-change:``iot-managed-integrations``: Adding managed integrations APIs for IoT Device Management to onboard and control devices across different manufacturers, connectivity protocols and third party vendor clouds. APIs include managed thing operations, provisioning profile management, and cloud connector operations.
+* api-change:``keyspaces``: This release provides change data capture (CDC) streams support through updates to the Amazon Keyspaces API.
+* api-change:``workspaces``: Updated modifyStreamingProperties to support PrivateLink VPC endpoints for directories
+* api-change:``kms``: This release updates AWS CLI examples for KMS APIs.
+* api-change:``ec2``: This release adds support for OdbNetworkArn as a target in VPC Route Tables
+* api-change:``keyspacesstreams``: This release adds change data capture (CDC) streams support through the new Amazon Keyspaces Streams API.
+* api-change:``qbusiness``: Added support for App level authentication for QBusiness DataAccessor using AWS IAM Identity center Trusted Token issuer
+
+
+2.27.43
+=======
+
+* api-change:``fsx``: Add support for the ability to create Amazon S3 Access Points for Amazon FSx for OpenZFS file systems.
+* api-change:``s3control``: Add support for the ability to use Amazon S3 Access Points with Amazon FSx for OpenZFS file systems.
+* api-change:``textract``: Add RotationAngle field to Geometry of WORD blocks for Textract AnalyzeDocument API
+* api-change:``ecs``: Updates for change to Amazon ECS default log driver mode from blocking to non-blocking
+* api-change:``s3``: Adds support for additional server-side encryption mode and storage class values for accessing Amazon FSx data from Amazon S3 using S3 Access Points
+* api-change:``storagegateway``: This release adds IPv6 support to the Storage Gateway APIs. APIs that previously only accept or return IPv4 address will now accept or return both IPv4 and IPv6 addresses.
+* api-change:``workspaces-thin-client``: Remove Tags field from Get API responses
+
+
+2.27.42
+=======
+
+* api-change:``gamelift``: Add support for UDP ping beacons to ListLocations API, including new PingBeacon and UDPEndpoint data types within its Locations return value. Use UDP ping beacon endpoints to help measure real-time network latency for multiplayer games.
+* api-change:``bedrock``: We are making ListFoundationModelAgreementOffers, DeleteFoundationModelAgreement, CreateFoundationModelAgreement, GetFoundationModelAvailability, PutUseCaseForModelAccess and GetUseCaseForModelAccess APIs public, previously they were console.
+* api-change:``ec2``: This release allows you to create and register AMIs while maintaining their underlying EBS snapshots within Local Zones.
+* api-change:``batch``: Add userdataType to LaunchTemplateSpecification and LaunchTemplateSpecificationOverride.
+* api-change:``aiops``: Adds support for cross account investigations for CloudWatch investigations AI Operations (AIOps).
+* api-change:``elbv2``: Add Paginator for DescribeAccountLimits, and fix Paginators for DescribeTrustStoreAssociations, DescribeTrustStoreRevocations, and DescribeTrustStores
+* api-change:``license-manager``: AWS License Manager now supports license type conversions for AWS Marketplace products. Customers can provide Marketplace codes in the source license context or destination license context in the CreateLicenseConversionTaskForResource requests.
+* api-change:``transcribe``: This Feature Adds Support for the "et-EE" Locale for Batch Operations
+* api-change:``rds``: Adding support for RDS on Dedicated Local Zones, including local backup target, snapshot availability zone and snapshot target
+* api-change:``route53resolver``: Add support for iterative DNS queries through the new INBOUND_DELEGATION endpoint. Add delegation support through the Outbound Endpoints with DELEGATE rules.
+
+
+2.27.41
+=======
+
+* api-change:``s3tables``: S3 Tables now supports sort and z-order compaction strategies for Iceberg tables in addition to binpack.
+* api-change:``workspaces-instances``: Added support for Amazon WorkSpaces Instances API
+* api-change:``glue``: AWS Glue now supports sort and z-order strategy for managed automated compaction for Iceberg tables in addition to binpack.
+
+
+2.27.40
+=======
+
+* api-change:``geo-places``: Geocode, ReverseGeocode, and GetPlace APIs added Intersections and SecondaryAddresses. To use, add to the AdditionalFeatures list in your request. This provides info about nearby intersections and secondary addresses that are associated with a main address. Also added MainAddress and ParsedQuery.
+* api-change:``ecs``: Add ECS support for Windows Server 2025
+* api-change:``bedrock``: Add support for tiers in Content Filters and Denied Topics for Amazon Bedrock Guardrails.
+* api-change:``mediaconvert``: This release adds a new SPECIFIED_OPTIMAL option for handling DDS when using DVB-Sub with high resolution video.
+* api-change:``glue``: AWS Glue Data Quality now provides aggregated metrics in evaluation results when publishAggregatedMetrics with row-level results are enabled. These metrics include summary statistics showing total counts of processed, passed, and failed rows and rules in a single view.
+
+
+2.27.39
+=======
+
+* api-change:``payment-cryptography-data``: Additional support for managing HMAC keys that adheres to changes documented in X9.143-2021 and provides better interoperability for key import/export
+* api-change:``bedrock``: This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a trained model into Amazon Bedrock for inference.
+* api-change:``lambda``: Support Schema Registry feature for Kafka Event Source Mapping. Customers can now configure a Schema Registry to enable schema validation and filtering for Avro, Protobuf, and JSON-formatted events in Lambda for Kafka Event Source.
+* api-change:``emr-serverless``: This release adds the capability to enable IAM IdentityCenter Trusted Identity Propagation for users running Interactive Sessions on EMR Serverless Applications.
+* api-change:``payment-cryptography``: Additional support for managing HMAC keys that adheres to changes documented in X9.143-2021 and provides better interoperability for key import/export
+* api-change:``sagemaker``: This release introduces alternative support for utilizing CFN templates from S3 for SageMaker Projects.
+
+
+2.27.38
+=======
+
+* api-change:``logs``: Added CloudWatch Logs Transformer support for converting CloudTrail, VPC Flow, EKS Audit, AWS WAF and Route53 Resolver logs to OCSF v1.1 format.
+* api-change:``autoscaling``: Add IncludeInstances parameter to DescribeAutoScalingGroups API
+* api-change:``imagebuilder``: Added paginators for ``imagebuilder``.
+* api-change:``s3``: Added support for renaming objects within the same bucket using the new RenameObject API.
+* api-change:``sagemaker``: Add support for p6-b200 instance type for SageMaker Hyperpod
+* api-change:``aiops``: This is the initial SDK release for Amazon AI Operations (AIOps). AIOps is a generative AI-powered assistant that helps you respond to incidents in your system by scanning your system's telemetry and quickly surface suggestions that might be related to your issue.
+
+
+2.27.37
+=======
+
+* api-change:``network-firewall``: Release of Active Threat Defense in Network Firewall
+* api-change:``securityhub``: Adds operations, structures, and exceptions required for public preview release of Security Hub V2.
+* api-change:``organizations``: Add support for policy operations on the SECURITYHUB_POLICY policy type.
+* api-change:``mpa``: This release enables customers to create Multi-party approval teams and approval requests to protect supported operations.
+* api-change:``wafv2``: AWS WAF can now suggest protection packs for you based on the application information you provide when you create a webACL.
+* api-change:``inspector2``: Add Code Repository Scanning as part of AWS InspectorV2
+* api-change:``backup``: AWS Backup is adding support for integration of its logically air-gapped vaults with the AWS Organizations Multi-party approval capability.
+* api-change:``bedrock``: This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a trained model into Amazon Bedrock for inference.
+* api-change:``acm``: Adds support for Exportable Public Certificates
+* enhancement:Python: Update bundled Python interpreter to 3.13.4
+* api-change:``accessanalyzer``: We are launching a new analyzer type, internal access analyzer. The new analyzer will generate internal access findings, which help customers understand who within their AWS organization or AWS Account has access to their critical AWS resources.
+* api-change:``dms``: Add "Virtual" field to Data Provider as well as "S3Path" and "S3AccessRoleArn" fields to DataProvider settings
+* api-change:``guardduty``: Adding support for extended threat detection for EKS Audit Logs and EKS Runtime Monitoring.
+* api-change:``sts``: The AWS Security Token Service APIs AssumeRoleWithSAML and AssumeRoleWithWebIdentity can now be invoked without pre-configured AWS credentials in the SDK configuration.
+
+
+2.27.36
+=======
+
+* api-change:``bedrock``: This release of the SDK has the API and documentation for the createcustommodel API. This feature lets you copy a Amazon SageMaker trained Amazon Nova model into Amazon Bedrock for inference.
+* api-change:``network-firewall``: You can now create firewalls using a Transit Gateway instead of a VPC, resulting in a TGW attachment.
+* api-change:``sagemaker``: This release 1) adds a new S3DataType Converse for SageMaker training 2)adds C8g R7gd M8g C6in P6 P6e instance type for SageMaker endpoint 3) adds m7i, r7i, c7i instance type for SageMaker Training and Processing.
+* api-change:``ecr``: The `DescribeImageScanning` API now includes `lastInUseAt` and `InUseCount` fields that can be used to prioritize vulnerability remediation for images that are actively being used.
+
+
+2.27.35
+=======
+
+* api-change:``connectcampaignsv2``: Added PutInstanceCommunicationLimits and GetInstanceCommunicationLimits APIs
+* api-change:``apigatewayv2``: Documentation updates for Amazon API Gateway
+* api-change:``apigateway``: Documentation updates for Amazon API Gateway
+* api-change:``emr-serverless``: This release adds support for retrieval of the optional executionIamPolicy field in the GetJobRun API response.
+* api-change:``ecs``: This Amazon ECS  release supports updating the capacityProviderStrategy parameter in update-service.
+* api-change:``iotfleetwise``: Add new status READY_FOR_CHECKIN used for vehicle synchronisation
+* api-change:``pcs``: Fixed regex patterns for ARN fields.
+* api-change:``kms``: AWS KMS announces the support of ML-DSA key pairs that creates post-quantum safe digital signatures.
+
+
+2.27.34
+=======
+
+* api-change:``controlcatalog``: Introduced ListControlMappings API that retrieves control mappings. Added control aliases and governed resources fields in GetControl and ListControls APIs. New filtering capability in ListControls API, with implementation identifiers and implementation types.
+* api-change:``wafv2``: WAF now provides two DDoS protection options: resource-level monitoring for Application Load Balancers and the AWSManagedRulesAntiDDoSRuleSet managed rule group for CloudFront distributions.
+* api-change:``lexv2-models``: Add support for the Assisted NLU feature to improve bot performance
+* api-change:``eks``: Release for EKS Pod Identity Cross Account feature and disableSessionTags flag.
+* api-change:``rds``: Updates Amazon RDS documentation for Amazon RDS for Db2 cross-Region replicas in standby mode.
+* api-change:``networkmanager``: Add support for public DNS hostname resolution to private IP addresses across Cloud WAN-managed VPCs. Add support for security group referencing across Cloud WAN-managed VPCs.
+
+
+2.27.33
+=======
+
+* api-change:``gameliftstreams``: Documentation updates for Amazon GameLift Streams to address formatting errors, correct resource ID examples, and update links to other guides
+
+
+2.27.32
+=======
+
+* enhancement:``cloudformation``: High-level Cloudformation commands such as ``deploy`` and ``package`` will now fallback to SHA256 for checksumming if MD5 isn't present on the host
+* api-change:``ec2``: Release to support Elastic VMware Service (Amazon EVS) Subnet and Amazon EVS Network Interface Types.
+* api-change:``customer-profiles``: This release introduces capability of Profile Explorer, using correct ingestion timestamp & using historical data for computing calculated attributes, and new standard objects for T&H as part of Amazon Connect Customer Profiles service.
+* api-change:``efs``: Added support for Internet Protocol Version 6 (IPv6) on EFS Service APIs and mount targets.
+* api-change:``workspaces-thin-client``: Add ConflictException to UpdateEnvironment API
+* api-change:``ce``: Support dual-stack endpoints for ce api
+* api-change:``marketplace-catalog``: The ListEntities API now supports the EntityID, LastModifiedDate, ProductTitle, and Visibility filters for machine learning products. You can also sort using all of those filters.
+* api-change:``appsync``: Deprecate `atRestEncryptionEnabled` and `transitEncryptionEnabled` attributes in `CreateApiCache` action. Encryption is always enabled for new caches.
+
+
+2.27.31
+=======
+
+* api-change:``kms``: Remove unpopulated KeyMaterialId from Encrypt Response
+* api-change:``rds``: Include Global Cluster Identifier in DBCluster if the DBCluster is a Global Cluster Member.
+* api-change:``s3tables``: S3 Tables now supports getting details about a table via its table ARN.
+* api-change:``rekognition``: Adds support for defining an ordered preference list of different Rekognition Face Liveness challenge types when calling CreateFaceLivenessSession.
+* api-change:``bedrock-agent-runtime``: This release introduces the `PromptCreationConfigurations` input parameter, which includes fields to control prompt population for `InvokeAgent` or `InvokeInlineAgent` requests.
+* api-change:``route53``: Amazon Route 53 now supports the Asia Pacific (Taipei) Region (ap-east-2) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region.
+
+
+2.27.30
+=======
+
+* api-change:``wafv2``: AWS WAF adds support for ASN-based traffic filtering and support for ASN-based rate limiting.
+* api-change:``kms``: AWS KMS announces the support for on-demand rotation of symmetric-encryption KMS keys with imported key material (EXTERNAL origin).
+* api-change:``cloudformation``: Add new warning type 'EXCLUDED_PROPERTIES'
+* api-change:``bcm-pricing-calculator``: Updating the minimum for List APIs to be 1 (instead of 0)
+
+
+2.27.29
+=======
+
+* api-change:``mediaconnect``: This release updates the DescribeFlow API to show peer IP addresses. You can now identify the peer IP addresses of devices connected to your sources and outputs. This helps you to verify and troubleshoot your flow's active connections.
+* api-change:``amplify``: Update documentation for cacheConfig in CreateApp API
+* enhancement:dependency: Remove cryptography as a dependency
+* api-change:``sagemaker``: Added support for p6-b200 instance type in SageMaker Training Jobs and Training Plans.
+* api-change:``evs``: Amazon Elastic VMware Service (Amazon EVS) allows you to run VMware Cloud Foundation (VCF) directly within your Amazon VPC including simplified self-managed migration experience with guided workflow in AWS console or via AWS CLI, get full access to their VCF deployment and VCF license portability.
+* api-change:``invoicing``: Added new Invoicing ListInvoiceSummaries API Operation
+* api-change:``network-firewall``: You can now monitor flow and alert log metrics from the Network Firewall console.
+* api-change:``mediaconvert``: This release includes support for embedding and signing C2PA content credentials in MP4 outputs.
+* api-change:``transcribe``: AWS Healthscribe now supports new templates for the clinical note summary: BIRP, SIRP, DAP, BEHAVIORAL_SOAP, and PHYSICAL_SOAP
+
+
+2.27.28
+=======
+
+* api-change:``apigatewayv2``: Adds support to create routing rules and set the routing mode for a custom domain name.
+* api-change:``apigateway``: Adds support to set the routing mode for a custom domain name.
+* api-change:``emr-serverless``: AWS EMR Serverless: Adds a new option in the CancelJobRun API in EMR 7.9.0+, to cancel a job with grace period. This feature is enabled by default with a 120-second grace period for streaming jobs and is not enabled by default for batch jobs.
+
+
+2.27.27
+=======
+
+* api-change:``pcs``: Introduces SUSPENDING and SUSPENDED states for clusters, compute node groups, and queues.
+* api-change:``bedrock-agent``: This release adds the Agent Lifecycle Paused State feature to Amazon Bedrock agents. By using an agent's alias, you can temporarily suspend agent operations during maintenance, updates, or other situations.
+* api-change:``compute-optimizer``: This release enables AWS Compute Optimizer to analyze Amazon Aurora database clusters and generate Aurora I/O-Optimized recommendations.
+* api-change:``synthetics``: Support for Java runtime handler pattern.
+* api-change:``athena``: Add support for the managed query result in the workgroup APIs. The managed query result configuration enables users to store query results to Athena owned storage.
+* api-change:``eks``: Add support for filtering ListInsights API calls on MISCONFIGURATION insight category
+* api-change:``ecs``: Updates Amazon ECS documentation to include note for upcoming default log driver mode change.
+* api-change:``cost-optimization-hub``: Support recommendations for Aurora instance and Aurora cluster storage.
+* api-change:``entityresolution``: Add support for generating match IDs in near real-time.
+* api-change:``backup``: You can now subscribe to Amazon SNS notifications and Amazon EventBridge events for backup indexing. You can now receive notifications when a backup index is created, deleted, or fails to create, enhancing your ability to monitor and track your backup operations.
+
+
+2.27.26
+=======
+
+* api-change:``emr-serverless``: This release adds the capability for users to specify an optional Execution IAM policy in the StartJobRun action. The resulting permissions assumed by the job run is the intersection of the permissions in the Execution Role and the specified Execution IAM Policy.
+* api-change:``sagemaker``: Release new parameter CapacityReservationConfig in ProductionVariant
+
+
+2.27.25
+=======
+
+* api-change:``fsx``: FSx API changes to support the public launch of new Intelligent Tiering storage class on Amazon FSx for Lustre
+* api-change:``datasync``: AgentArns field is made optional for Object Storage and Azure Blob location create requests. Location credentials are now managed via Secrets Manager, and may be encrypted with service managed or customer managed keys. Authentication is now optional for Azure Blob locations.
+* api-change:``ivs-realtime``: IVS Real-Time now offers customers the participant replication that allow customers to copy a participant from one stage to another.
+* api-change:``dataexchange``: This release adds Tag support for Event Action resource, through which customers can create event actions with Tags and retrieve event actions with Tags.
+* api-change:``bcm-pricing-calculator``: Add AFTER_DISCOUNTS_AND_COMMITMENTS to Workload Estimate Rate Type. Set ListWorkLoadEstimateUsage maxResults range to minimum of 0 and maximum of 300.
+* api-change:``autoscaling``: Add support for "apple" CpuManufacturer in ABIS
+* api-change:``sagemaker``: Add maintenance status field to DescribeMlflowTrackingServer API response
+* api-change:``connect``: Amazon Connect Service Feature: Email Recipient Limit Increase
+* api-change:``mwaa``: Amazon MWAA now lets you choose a worker replacement strategy when updating an environment. This release adds two worker replacement strategies: FORCED (default), which stops workers immediately, and GRACEFUL, which allows workers to finish current tasks before shutting down.
+* api-change:``s3``: Adding checksum support for S3 PutBucketOwnershipControls API.
+* api-change:``amplify``: Add support for customizable build instance sizes. CreateApp and UpdateApp operations now accept a new JobConfig parameter composed of BuildComputeType.
+* api-change:``cloudtrail``: CloudTrail Feature Release: Support for Enriched Events with Configurable Context for Event Data Store
+
+
+2.27.24
+=======
+
+* api-change:``events``: Allow for more than 2 characters for location codes in EventBridge ARNs
+* api-change:``cost-optimization-hub``: This release allows customers to modify their preferred commitment term and payment options.
+* api-change:``synthetics``: Add support to change ephemeral storage. Add a new field "TestResult" under CanaryRunStatus.
+* api-change:``ec2``: Enable the option to automatically delete underlying Amazon EBS snapshots when deregistering Amazon Machine Images (AMIs)
+* api-change:``network-firewall``: You can now use VPC endpoint associations to create multiple firewall endpoints for a single firewall.
+
+
+2.27.23
+=======
+
+* api-change:``ec2``: This release adds three features - option to store AWS Site-to-Site VPN pre-shared keys in AWS Secrets Manager, GetActiveVpnTunnelStatus API to check the in-use VPN algorithms, and SampleType option in GetVpnConnectionDeviceSampleConfiguration API to get recommended sample configs for VPN devices.
+* api-change:``deadline``: AWS Deadline Cloud service-managed fleets now support storage profiles. With storage profiles, you can map file paths between a workstation and the worker hosts running the job.
+* api-change:``ce``: This release introduces Cost Comparison feature (GetCostAndUsageComparisons, GetCostComparisonDrivers) allowing you find cost variations across multiple dimensions and identify key drivers of spending changes.
+
+
+2.27.22
+=======
+
+* api-change:``security-ir``: Update PrincipalId pattern documentation to reflect what user should receive back from the API call
+* api-change:``ec2``: This release adds support for the C7i-flex, M7i-flex, I7i, I7ie, I8g, P6-b200, Trn2, C8gd, M8gd and R8gd instances
+
+
+2.27.21
+=======
+
+* api-change:``dsql``: Features: support for customer managed encryption keys
+* api-change:``glue``: This release supports additional ConversionSpec parameter as part of IntegrationPartition Structure in CreateIntegrationTableProperty API. This parameter is referred to apply appropriate column transformation for columns that are used for timestamp based partitioning
+* bugfix:s3transfer: Validate ETag of stored object during multipart downloads
+* api-change:``auditmanager``: With this release, the AssessmentControl description field has been deprecated, as of May 19, 2025. Additionally, the UpdateAssessment API can now return a ServiceQuotaExceededException when applicable service quotas are exceeded.
+* api-change:``amp``: Add QueryLoggingConfiguration APIs for Amazon Managed Prometheus
+
+
+2.27.20
+=======
+
+* api-change:``ec2``: Release of Dualstack and Ipv6-only EC2 Public DNS hostnames
+* api-change:``application-autoscaling``: Doc only update that addresses a customer reported issue.
+* api-change:``bedrock-agent-runtime``: Amazon Bedrock introduces asynchronous flows (in preview), which let you run flows for longer durations and yield control so that your application can perform other tasks and you don't have to actively monitor the flow's progress.
+* api-change:``cloudwatch``: Adds support for setting up Contributor Insight rules on logs transformed via Logs Transformation feature.
+* api-change:``partnercentral-selling``: Modified validation to allow expectedCustomerSpend array with zero elements in Partner Opportunity operations.
+
+
+2.27.19
+=======
+
+* api-change:``inspector2``: This release adds GetClustersForImage API and filter updates as part of the mapping of container images to running containers feature.
+* api-change:``rds``: This release introduces the new DescribeDBMajorEngineVersions API for describing the properties of specific major versions of database engines.
+* api-change:``privatenetworks``: The privatenetworks client has been removed following the deprecation of the service.
+* api-change:``glue``: Enhanced AWS Glue ListConnectionTypes API Model with additional metadata fields.
+* api-change:``oam``: Add IncludeTags field to GetLink, GetSink and UpdateLink API
+* api-change:``datasync``: Remove Discovery APIs from the DataSync service
+* api-change:``ec2``: This release expands the ModifyInstanceMaintenanceOptions API to enable or disable instance migration during customer-initiated reboots for EC2 Scheduled Reboot Events.
+
+
+2.27.18
+=======
+
+* api-change:``dsql``: CreateMultiRegionCluster and DeleteMultiRegionCluster APIs removed
+* api-change:``ec2``: This release includes new APIs for System Integrity Protection (SIP) configuration and automated root volume ownership delegation for EC2 Mac instances.
+* api-change:``mediapackagev2``: This release adds support for DVB-DASH, EBU-TT-D subtitle format, and non-compacted manifests for DASH in MediaPackage v2 Origin Endpoints.
+
+
+2.27.17
+=======
+
+* api-change:``glue``: Changes include (1) Excel as S3 Source type and XML and Tableau's Hyper as S3 Sink types, (2) targeted number of partitions parameter in S3 sinks and (3) new compression types in CSV/JSON and Parquet S3 sinks.
+* api-change:``ecs``: This is an Amazon ECs documentation only release to support the change of the container exit "reason" field from 255 characters to 1024 characters.
+* api-change:``service-quotas``: This release introduces CreateSupportCase operation to SDK.
+* api-change:``bedrock-data-automation``: Add support for VIDEO modality to BlueprintType enum.
+* api-change:``codepipeline``: CodePipeline now supports new API ListDeployActionExecutionTargets that lists the deployment target details for deploy action executions.
+* api-change:``neptune``: This release adds Global Cluster Switchover capability which enables you to change your global cluster's primary AWS Region, the region that serves writes, while preserving the replication between all regions in the global cluster.
+* api-change:``bedrock-data-automation-runtime``: Add AssetProcessingConfiguration for video segment to InputConfiguration
+* api-change:``emr``: Added APIs for managing Application UIs: Access Persistent (serverless) UIs via CreatePersistentAppUI DescribePersistentAppUI & GetPersistentAppUIPresignedURL, and Cluster-based UIs through GetOnClusterAppUIPresignedURL. Supports Yarn, Spark History, and TEZ interfaces.
+
+
+2.27.16
+=======
+
+* api-change:``workspaces``: Added the new AlwaysOn running mode for WorkSpaces Pools. Customers can now choose between AlwaysOn (for instant access, with hourly usage billing regardless of connection status), or AutoStop (to optimize cost, with a brief startup delay) for their pools.
+* api-change:``codebuild``: AWS CodeBuild now supports Docker Server capability
+* api-change:``pcs``: This release adds support for Slurm accounting. For more information, see the Slurm accounting topic in the AWS PCS User Guide. Slurm accounting is supported for Slurm 24.11 and later. This release also adds 24.11 as a valid value for the version parameter of the Scheduler data type.
+* api-change:``bedrock-agent``: Amazon Bedrock Flows introduces DoWhile loops nodes, parallel node executions, and enhancements to knowledge base nodes.
+* api-change:``controltower``: Updated the descriptions for the AWS Control Tower Baseline APIs to make them more intuitive.
+* api-change:``dms``: Introduces Data Resync feature to describe-table-statistics and IAM database authentication for MariaDB, MySQL, and PostgreSQL.
+
+
+2.27.15
+=======
+
+* api-change:``logs``: This release adds a new API "ListLogGroups" and an improvement in API "DescribeLogGroups"
+* api-change:``firehose``: This release adds catalogARN support for s3 tables multi-catalog catalogARNs.
+* api-change:``mediaconvert``: This update enables cropping for video overlays and adds a new STL to Teletext upconversion toggle to preserve styling.
+* api-change:``cognito-idp``: Add exceptions to WebAuthn operations.
+
+
+2.27.14
+=======
+
+* api-change:``bedrock-agent-runtime``: Changes for enhanced metadata in trace
+* api-change:``dsql``: CreateMultiRegionClusters and DeleteMultiRegionClusters APIs marked as deprecated. Introduced new multi-Region clusters creation experience through multiRegionProperties parameter in CreateCluster API.
+* api-change:``bedrock``: Enable cross-Region inference for Amazon Bedrock Guardrails by using the crossRegionConfig parameter when calling the CreateGuardrail or UpdateGuardrail operation.
+* api-change:``controltower``: AWS Control Tower now reports the inheritance drift status for EnabledBaselines through the GetEnabledBaseline and ListEnabledBaselines APIs. You can now filter EnabledBaselines by their enablement and drift status using the ListEnabledBaselines API to view accounts and OUs that require attention.
+* api-change:``ecs``: This release extends functionality for Amazon EBS volumes attached to Amazon ECS tasks by adding support for the new EBS volumeInitializationRate parameter in ECS RunTask/StartTask/CreateService/UpdateService APIs.
+* api-change:``license-manager``: Add Tagging feature to resources in the Managed Entitlements service. License and Grant resources can now be tagged.
+
+
+2.27.13
+=======
+
+* api-change:``supplychain``: Launch new AWS Supply Chain public APIs for DataIntegrationEvent, DataIntegrationFlowExecution and DatasetNamespace. Also add more capabilities to existing public APIs to support direct dataset event publish, data deduplication in DataIntegrationFlow, partition specification of custom datasets.
+* api-change:``sagemaker``: No API changes from previous release. This release migrated the model to Smithy keeping all features unchanged.
+* api-change:``iam``: Updating the endpoint list for the Identity and access management (IAM) service
+* api-change:``deadline``: AWS Deadline Cloud service-managed fleets now support configuration scripts. Configuration scripts make it easy to install additional software, like plugins and packages, onto a worker.
+* api-change:``ec2``: EC2 - Adding support for AvailabilityZoneId
+* api-change:``medialive``: Add support to the AV1 rate control mode
+* api-change:``s3control``: Updates to support S3 Express zonal endpoints for directory buckets in AWS CLI
+* api-change:``mediatailor``: Documenting that EnabledLoggingStrategies is always present in responses of PlaybackConfiguration read operations.
+
+
+2.27.12
+=======
+
+* api-change:``athena``: Minor API documentation updates
+* api-change:``logs``: We are pleased to announce limit increases to our grok processor logs transformation feature. Now you can define 20 Grok patterns in their configurations, with an expanded total pattern matching limit of 512 characters.
+* api-change:``synthetics``: Add support to retry a canary automatically after schedule run failures. Users can enable this feature by configuring the RetryConfig field when calling the CreateCanary or UpdateCanary API. Also includes changes in GetCanary and GetCanaryRuns to support retrieving retry configurations.
+* api-change:``workspaces``: Remove parameter EnableWorkDocs from WorkSpacesServiceModel due to end of support of Amazon WorkDocs service.
+
+
+2.27.11
+=======
+
+* api-change:``codepipeline``: Add support for Secrets Manager and Plaintext environment variable types in Commands action
+* api-change:``sso-admin``: Update PutPermissionBoundaryToPermissionSet API's managedPolicyArn pattern to allow valid ARN only. Update ApplicationName to allow white spaces.
+* api-change:``ec2``: Launching the feature to support ENA queues offering flexibility to support multiple queues per Enhanced Network Interface (ENI)
+* enhancement:Python: Update bundled Python interpreter to 3.13.3
+* api-change:``cloudfront``: Doc-only update for CloudFront. These changes include customer-reported issues.
+* api-change:``guardduty``: Updated description of a data structure.
+* api-change:``glue``: This new release supports customizable RefreshInterval for all Saas ZETL integrations from 15 minutes to 6 days.
+
+
+2.27.10
+=======
+
+* api-change:``ec2``: This release adds API support for Path Component Exclusion (Filter Out ARN) for Reachability Analyzer
+* api-change:``sagemaker``: SageMaker AI Studio users can now migrate to SageMaker Unified Studio, which offers a unified web-based development experience that integrates AWS data, analytics, artificial intelligence (AI), and machine learning (ML) services, as well as additional tools and resource
+* api-change:``imagebuilder``: Updated the CreateImageRecipeRequest ParentImage description to include all valid values as updated with the SSM Parameters project.
+* api-change:``medialive``: Enables Updating Anywhere Settings on a MediaLive Anywhere Channel.
+* api-change:``synthetics``: Add support to test a canary update by invoking a dry run of a canary. This behavior can be used via the new StartCanaryDryRun API along with new fields in UpdateCanary to apply dry run changes. Also includes changes in GetCanary and GetCanaryRuns to support retrieving dry run configurations.
+
+
+2.27.9
+======
+
+* api-change:``servicecatalog``: ServiceCatalog's APIs (DeleteServiceAction, DisassociateServiceActionFromProvisioningArtifact, AssociateServiceActionWithProvisioningArtifact) now throw InvalidParametersException when IdempotencyToken is invalid.
+* api-change:``timestream-write``: Add dualstack endpoints support.
+* api-change:``ec2``: This release adds support for Amazon EBS Provisioned Rate for Volume Initialization, which lets you specify a volume initialization rate to ensure that your EBS volumes are initialized in a predictable amount of time.
+* api-change:``timestream-query``: Add dualstack endpoints support and correct us-gov-west-1 FIPS endpoint.
+
+
+2.27.8
+======
+
+* api-change:``devicefarm``: Add an optional parameter to the GetDevicePoolCompatibility API to pass in project information to check device pool compatibility.
+* api-change:``ecs``: Add support to roll back an In_Progress ECS Service Deployment
+* api-change:``ec2``: This update introduces API operations to manage and create local gateway VIF and VIF groups. It also includes API operations to describe Outpost LAGs and service link VIFs.
+* api-change:``datazone``: This release adds a new authorization policy to control the usage of custom AssetType when creating an Asset. Customer can now add new grant(s) of policyType USE_ASSET_TYPE for custom AssetTypes to apply authorization policy to projects members and domain unit owners.
+* api-change:``mediaconvert``: This release adds an optional sidecar per-frame video quality metrics report and an ALL_PCM option for audio selectors. It also changes the data type for Probe API response fields related to video and audio bitrate from integer to double.
+
+
+2.27.7
+======
+
+* api-change:``ds``: Doc only update - fixed typos.
+* api-change:``bedrock-data-automation``: Added support for Custom output and blueprints for AUDIO data types.
+* api-change:``kinesis``: Marking ResourceARN as required for Amazon Kinesis Data Streams APIs TagResource, UntagResource, and ListTagsForResource.
+
+
+2.27.6
+======
+
+* api-change:``sagemaker``: Feature - Adding support for Scheduled and Rolling Update Software in Sagemaker Hyperpod.
+* api-change:``verifiedpermissions``: Amazon Verified Permissions / Features : Adds support for tagging policy stores.
+* api-change:``appconfig``: Adding waiter support for deployments and environments; documentation updates
+* api-change:``connect``: This release adds the following fields to DescribeContact: DisconnectReason, AgentInitiatedHoldDuration, AfterContactWorkStartTimestamp, AfterContactWorkEndTimestamp, AfterContactWorkDuration, StateTransitions, Recordings, ContactDetails, ContactEvaluations, Attributes
+
+
+2.27.5
+======
+
+* api-change:``deadline``: Adds support for tag management on workers and tag inheritance from fleets to their associated workers.
+* api-change:``bedrock-agent``: Features:    Add inline code node to prompt flow
+* api-change:``bedrock-agent-runtime``: Support for Custom Orchestration within InlineAgents
+* api-change:``cleanrooms``: This release adds support for ProtectedQuery results to be delivered to more than one collaboration member via the new distribute output configuration in StartProtectedQuery.
+* api-change:``ecr``: Adds dualstack support for Amazon Elastic Container Registry (Amazon ECR).
+* api-change:``ec2``: Launch of cost distribution feature for IPAM owners to distribute costs to internal teams.
+* api-change:``mailmanager``: Introducing new RuleSet rule PublishToSns action, which allows customers to publish email notifications to an Amazon SNS topic. New PublishToSns action enables customers to easily integrate their email workflows via Amazon SNS, allowing them to notify other systems about important email events.
+* api-change:``bedrock``: You can now specify a cross region inference profile as a teacher model for the CreateModelCustomizationJob API. Additionally, the GetModelCustomizationJob API has been enhanced to return the sub-task statuses of a customization job within the StatusDetails response field.
+* api-change:``ecr-public``: Adds dualstack support for Amazon Elastic Container Registry Public (Amazon ECR Public).
+* bugfix:socialmessaging: Renames the incorrectly named delete-whatsapp-media-message command to the correct name of delete-whatsapp-message-media
+* api-change:``logs``: CloudWatch Logs supports "DELIVERY" log class. This log class is used only for delivering AWS Lambda logs to Amazon S3 or Amazon Data Firehose.
+
+
+2.27.4
+======
+
+* api-change:``qbusiness``: Add support for anonymous user access for Q Business applications
+* enhancement:awscrt: Update awscrt version requirement to 0.26.1
+* api-change:``ssm``: This release adds support for just-In-time node access in AWS Systems Manager. Just-in-time node access enables customers to move towards zero standing privileges by requiring operators to request access and obtain approval before remotely connecting to nodes managed by the SSM Agent.
+* api-change:``connectcases``: Introduces CustomEntity as part of the UserUnion data type. This field is used to indicate the entity who is performing the API action.
+* api-change:``kinesis``: Amazon KDS now supports tagging and attribute-based access control (ABAC) for enhanced fan-out consumers.
+* api-change:``sagemaker``: Introduced support for P5en instance types on SageMaker Studio for JupyterLab and CodeEditor applications.
+* api-change:``sagemaker-metrics``: SageMaker Metrics Service now supports FIPS endpoint in all US and Canada Commercial regions.
+* api-change:``pinpoint-sms-voice-v2``: AWS End User Messaging has added MONITOR and FILTER functionality to SMS Protect.
+* enhancement:``cloudfront``: Replace cryptographic functions from ``cryptography`` with ``awscrt`` for the ``sign`` command. Fixes `#9258 <https://github.com/aws/aws-cli/issues/9258>`__.
+* api-change:``ssm-guiconnect``: This release adds API support for the connection recording GUI Connect feature of AWS Systems Manager
+
+
+2.27.3
+======
+
+* api-change:``imagebuilder``: Add integration with SSM Parameter Store to Image Builder.
+* api-change:``acm``: Add support for file-based HTTP domain control validation, available through Amazon CloudFront.
+* api-change:``cloudfront``: Add distribution tenant, connection group, and multi-tenant distribution APIs to the CloudFront SDK.
+* api-change:``bedrock-runtime``: This release adds native h2 support for the bedrock runtime API, the support is only limited to SDKs that support h2 requests natively.
+* api-change:``dynamodb``: Doc only update for GSI descriptions.
+
+
+2.27.2
+======
+
+* api-change:``ecs``: Documentation only release for Amazon ECS.
+* api-change:``bedrock-runtime``: You can now reference images and documents stored in Amazon S3 when using InvokeModel and Converse APIs with Amazon Nova Lite and Nova Pro. This enables direct integration of S3-stored multimedia assets in your model requests without manual downloading or base64 encoding.
+* api-change:``marketplace-deployment``: Doc only update for the AWS Marketplace Deployment Service that fixes several customer-reported issues.
+
+
+2.27.1
+======
+
+* api-change:``ecs``: Documentation only release for Amazon ECS
+* api-change:``dynamodb``: Add support for ARN-sourced account endpoint generation for TransactWriteItems. This will generate account endpoints for DynamoDB TransactWriteItems requests using ARN-sourced account ID when available.
+* api-change:``appsync``: Add data source support to Event APIs
+* api-change:``pcs``: Documentation-only update: added valid values for the version property of the Scheduler and SchedulerRequest data types.
+* api-change:``rds``: This Amazon RDS release adds support for managed master user passwords for Oracle CDBs.
+* api-change:``codebuild``: Remove redundant validation check.
+* api-change:``apprunner``: AWS App Runner adds Node.js 22 runtime.
+* api-change:``bedrock-data-automation``: Added support for modality routing and modality enablement on CreateDataAutomationProject and UpdateDataAutomationProject APIs
+
+
+2.27.0
+======
+
+* api-change:``imagebuilder``: Add all ``imagebuilder`` modeled paginators that are currently supported by AWS CLI v2.
+* api-change:``ecs``: Add support to roll back an In_Progress ECS Service Deployment
+* api-change:``codebuild``: Add support for custom instance type for reserved capacity fleets
+* api-change:``resource-explorer-2``: Documentation-only update for CreateView option correction
+* feature:``eks``: Add assume-role-arn option to update-kubeconfig command for cross-account access
+
+
+2.26.7
+======
+
+* api-change:``mq``: You can now delete Amazon MQ broker configurations using the DeleteConfiguration API. For more information, see Configurations in the Amazon MQ API Reference.
+* api-change:``s3control``: Fix endpoint resolution test cases
+* api-change:``redshift-serverless``: Provides new and updated API members to support the Redshift Serverless reservations feature.
+* api-change:``cognito-idp``: This release adds refresh token rotation.
+* api-change:``ec2``: Added support for  ClientRouteEnforcementOptions flag in CreateClientVpnEndpoint and ModifyClientVpnEndpoint requests and DescribeClientVpnEndpoints responses
+* api-change:``account``: AWS Account Management now supports account name update via IAM principals.
+* api-change:``entityresolution``: To expand support for matching records using digital identifiers with TransUnion
+
+
+2.26.6
+======
+
+* api-change:``firehose``: Documentation update regarding the number of streams you can create using the CreateDeliveryStream API.
+* api-change:``qbusiness``: The CheckDocumentAccess API for Amazon Q Business is a self-service debugging API that allows administrators to verify document access permissions and review Access Control List (ACL) configurations.
+* api-change:``arc-zonal-shift``: Updates to documentation and exception types for Zonal Autoshift
+* api-change:``mediatailor``: Added support for Recurring Prefetch and Traffic Shaping on both Single and Recurring Prefetch. ListPrefetchSchedules now return single prefetchs by default and can be provided scheduleType of SINGLE, RECURRING, AND ALL.
+* api-change:``budgets``: Releasing the new Budget FilterExpression and Metrics fields to support more granular filtering options. These new fields are intended to replace CostFilters and CostTypes, which are deprecated as of 2025/18/04.
+
+
+2.26.5
+======
+
+* api-change:``qconnect``: This release adds support for the following capabilities: Chunking generative answer replies from Amazon Q in Connect. Integration support for the use of additional LLM models with Amazon Q in Connect.
+* api-change:``service-quotas``: Add new optional SupportCaseAllowed query parameter to the RequestServiceQuotaIncrease API
+* api-change:``sagemaker``: This release adds a new Neuron driver option in InferenceAmiVersion parameter for ProductionVariant. Additionally, it adds support for fetching model lifecycle status in the ListModelPackages API. Users can now use this API to view the lifecycle stage of models that have been shared with them.
+
+
+2.26.4
+======
+
+* api-change:``bedrock``: With this release, Bedrock Evaluation will now support custom metrics for evaluation.
+* api-change:``omics``: Add versioning for HealthOmics workflows
+* api-change:``iotfleetwise``: We've added stricter parameter validations to AWS IoT FleetWise signal catalog, model manifest, and decoder manifest APIs.
+* api-change:``amp``: Add Workspace Configuration APIs for Amazon Prometheus
+* api-change:``connect``: This release adds following capabilities to Contact Lens Rules APIs 1/ 'ASSIGN_SLA' action and  '$.Case.TemplateId' comparison value for 'OnCaseCreate' and 'OnCaseUpdate' event sources 2/ 'OnSlaBreach' Cases event source which supports '$.RelatedItem.SlaConfiguration.Name' comparison value
+* api-change:``memorydb``: Added support for IPv6 and dual stack for Valkey and Redis clusters. Customers can now launch new Valkey and Redis clusters with IPv6 and dual stack networking support.
+* api-change:``accessanalyzer``: Added new resource types to evaluate for public access in resource policies and added support for S3 directory bucket access points.
+* api-change:``ecs``: Adds a new AccountSetting - defaultLogDriverMode for ECS.
+* api-change:``autoscaling``: Doc only update for EC2 Auto Scaling.
+
+
+2.26.3
+======
+
+* api-change:``servicecatalog``: Updated default value for the access-level-filter in SearchProvisionedProducts API to Account. For access to userLevel or roleLevel, the user must provide access-level-filter parameter.
+* api-change:``s3tables``: S3 Tables now supports setting encryption configurations on table buckets and tables. Encryption configurations can use server side encryption using AES256 or KMS customer-managed keys.
+* api-change:``dsql``: Added GetClusterEndpointService API. The new API allows retrieving endpoint service name specific to a cluster.
+* bugfix:Formatter: Update JSON formatter to encode raw bytes as UTF-8.
+* api-change:``events``: Adding support for KmsKeyIdentifer in CreateConnection, UpdateConnection and DescribeConnection APIs
+* api-change:``resource-groups``: Resource Groups: TagSyncTasks can be created with ResourceQuery
+* api-change:``eks``: Added support for new AL2023 ARM64 NVIDIA AMIs to the supported AMITypes.
+* api-change:``connectcases``: This feature provides capabilities to help track and meet service level agreements (SLAs) on cases programmatically. It allows configuring a new related item of type `Sla` on a case using CreateRelatedItem API and provides the ability to search for this new related item using SearchRelatedItems API.
+
+
+2.26.2
+======
+
+* api-change:``taxsettings``: Indonesia SOR Tax Registration Launch
+* api-change:``entityresolution``: This is to add new metrics to our GetIdMappingJob API and also update uniqueId naming for batchDeleteUniqueIds API to be more accurate
+
+
+2.26.1
+======
+
+* api-change:``marketplace-entitlement``: Add support for Marketplace Entitlement Service dual-stack endpoints for CN and GOV regions
+* api-change:``detective``: Add support for Detective DualStack endpoints
+* api-change:``pcs``: Changed the minimum length of clusterIdentifier, computeNodeGroupIdentifier, and queueIdentifier to 3.
+* api-change:``verifiedpermissions``: Adds deletion protection support to policy stores. Deletion protection is disabled by default, can be enabled via the CreatePolicyStore or UpdatePolicyStore APIs, and is visible in GetPolicyStore.
+* api-change:``connect-contact-lens``: Making sentiment optional for ListRealtimeContactAnalysisSegments Response depending on conversational analytics configuration
+* api-change:``dynamodb``: Doc only update for API descriptions.
+* api-change:``datazone``: Raise hard limit of authorized principals per SubscriptionTarget from 10 to 20.
+* api-change:``meteringmarketplace``: Add support for Marketplace Metering Service dual-stack endpoints for CN regions
+
+
+2.26.0
+======
+
+* api-change:``elasticache``: AWS ElastiCache SDK now supports using MemcachedUpgradeConfig parameter with ModifyCacheCluster API to enable updating Memcached cache node types. Please refer to updated AWS ElastiCache public documentation for detailed information on API usage and implementation.
+* api-change:``quicksight``: Add support to analysis and sheet level highlighting in QuickSight.
+* api-change:``m2``: Introduce three new APIs: CreateDataSetExportTask, GetDataSetExportTask and ListDataSetExportHistory. Add support for batch restart for Blu Age applications.
+* feature:Python: Drop support for Python 3.8
+* enhancement:Python: Update bundled Python interpreter to 3.13.2
+* api-change:``medialive``: AWS Elemental MediaLive / Features : Add support for CMAF Ingest CaptionLanguageMappings, TimedMetadataId3 settings, and Link InputResolution.
+* api-change:``application-autoscaling``: Application Auto Scaling now supports horizontal scaling for Elasticache Memcached self-designed clusters using target tracking scaling policies and scheduled scaling.
+* api-change:``qbusiness``: Adds functionality to enable/disable a new Q Business Hallucination Reduction feature. If enabled, Q Business will detect and attempt to remove Hallucinations from certain Chat requests.
+
+
+2.25.14
+=======
+
+* api-change:``dynamodb``: Documentation update for secondary indexes and Create_Table.
+* api-change:``transfer``: This launch includes 2 enhancements to SFTP connectors user-experience: 1) Customers can self-serve concurrent connections setting for their connectors, and 2) Customers can discover the public host key of remote servers using their SFTP connectors.
+* api-change:``controlcatalog``: The GetControl API now surfaces a control's Severity, CreateTime, and Identifier for a control's Implementation. The ListControls API now surfaces a control's Behavior, Severity, CreateTime, and Identifier for a control's Implementation.
+* api-change:``groundstation``: Support tagging Agents and adjust input field validations
+* api-change:``glue``: The TableOptimizer APIs in AWS Glue now return the DpuHours field in each TableOptimizerRun, providing clients visibility to the DPU-hours used for billing in managed Apache Iceberg table compaction optimization.
+
+
+2.25.13
+=======
+
+* api-change:``taxsettings``: Uzbekistan Launch on TaxSettings Page
+* api-change:``securityhub``: Documentation updates for AWS Security Hub.
+* api-change:``iotfleetwise``: This release adds the option to update the strategy of state templates already associated to a vehicle, without the need to remove and re-add them.
+* api-change:``storagegateway``: Added new ActiveDirectoryStatus value, ListCacheReports paginator, and support for longer pagination tokens.
+* api-change:``bedrock-runtime``: This release introduces our latest bedrock runtime API, InvokeModelWithBidirectionalStream. The API supports both input and output streams and is supported by only HTTP2.0.
+* api-change:``cost-optimization-hub``: This release adds resource type "MemoryDbReservedInstances" and resource type "DynamoDbReservedCapacity" to the GetRecommendation, ListRecommendations, and ListRecommendationSummaries APIs to support new MemoryDB and DynamoDB RI recommendations.
+* api-change:``ce``: This release supports Pagination traits on Cost Anomaly Detection APIs.
+
+
+2.25.12
+=======
+
+* api-change:``medialive``: AWS Elemental MediaLive now supports SDI inputs to MediaLive Anywhere Channels in workflows that use AWS SDKs.
+* api-change:``glue``: Add input validations for multiple Glue APIs
+* api-change:``bedrock-runtime``: New options for how to handle harmful content detected by Amazon Bedrock Guardrails.
+* api-change:``codebuild``: AWS CodeBuild now offers an enhanced debugging experience.
+* api-change:``personalize``: Add support for eventsConfig for CreateSolution, UpdateSolution, DescribeSolution, DescribeSolutionVersion. Add support for GetSolutionMetrics to return weighted NDCG metrics when eventsConfig is enabled for the solution.
+* api-change:``transfer``: This launch enables customers to manage contents of their remote directories, by deleting old files or moving files to archive folders in remote servers once they have been retrieved. Customers will be able to automate the process using event-driven architecture.
+* api-change:``bedrock``: New options for how to handle harmful content detected by Amazon Bedrock Guardrails.
+
+
+2.25.11
+=======
+
+* api-change:``ds-data``: Doc only update - fixed broken links.
+* api-change:``s3control``: Updated max size of Prefixes parameter of Scope data type.
+* api-change:``ec2``: Doc-only updates for Amazon EC2
+* api-change:``events``: Amazon EventBridge adds support for customer-managed keys on Archives and validations for two fields: eventSourceArn and kmsKeyIdentifier.
+
+
+2.25.10
+=======
+
+* api-change:``route53``: Added us-gov-east-1 and us-gov-west-1 as valid Latency Based Routing regions for change-resource-record-sets.
+* api-change:``sagemaker``: Adds support for i3en, m7i, r7i instance types for SageMaker Hyperpod
+* api-change:``bedrock-agent``: Added optional "customMetadataField" for Amazon Aurora knowledge bases, allowing single-column metadata. Also added optional "textIndexName" for MongoDB Atlas knowledge bases, enabling hybrid search support.
+* api-change:``opensearch``: Improve descriptions for various API commands and data types.
+* api-change:``chime-sdk-voice``: Added FOC date as an attribute of PhoneNumberOrder, added AccessDeniedException as a possible return type of ValidateE911Address
+* api-change:``transcribe``: This Feature Adds Support for the "zh-HK" Locale for Batch Operations
+* api-change:``mailmanager``: Add support for Dual_Stack and PrivateLink types of IngressPoint. For configuration requests, SES Mail Manager will now accept both IPv4/IPv6 dual-stack endpoints and AWS PrivateLink VPC endpoints for email receiving.
+* api-change:``sesv2``: This release enables customers to provide attachments in the SESv2 SendEmail and SendBulkEmail APIs.
+
+
+2.25.9
+======
+
+* api-change:``ecs``: This is an Amazon ECS documentation only update to address various tickets.
+* api-change:``codebuild``: This release adds support for environment type WINDOWS_SERVER_2022_CONTAINER in ProjectEnvironment
+* api-change:``ecr``: Fix for customer issues related to AWS account ID and size limitation for token.
+* api-change:``medialive``: Added support for SMPTE 2110 inputs when running a channel in a MediaLive Anywhere cluster. This feature enables ingestion of SMPTE 2110-compliant video, audio, and ancillary streams by reading SDP files that AWS Elemental MediaLive can retrieve from a network source.
+* api-change:``lexv2-models``: Release feature of errorlogging for lex bot, customer can config this feature in bot version to generate log for error exception which helps debug
+* enhancement:``ec2instanceconnect``: Replace cryptographic functions from ``cryptography`` with ``awscrt`` for the ``ssh`` command.
+* api-change:``application-signals``: Application Signals now supports creating Service Level Objectives on service dependencies. Users can now create or update SLOs on discovered service dependencies to monitor their standard application metrics.
+* enhancement:awscrt: Update awscrt version requirement to 0.25.4
+
+
+2.25.8
+======
+
+* api-change:``sagemaker``: Added tagging support for SageMaker notebook instance lifecycle configurations
+* api-change:``cleanrooms``: This release adds support for updating the analytics engine of a collaboration.
+
+
+2.25.7
+======
+
+* api-change:``ec2``: Release VPC Route Server, a new feature allowing dynamic routing in VPCs.
+* api-change:``eks``: Add support for updating RemoteNetworkConfig for hybrid nodes on EKS UpdateClusterConfig API
+* api-change:``outposts``: Enabling Asset Level Capacity Management feature, which allows customers to create a Capacity Task for a single Asset on their active Outpost.
+* api-change:``sesv2``: Add dual-stack support to global endpoints.
+* api-change:``deadline``: With this release you can use a new field to specify the search term match type. Search term match types currently support fuzzy and contains matching.
+* api-change:``s3``: Amazon S3 adds support for S3 Access Points for directory buckets in AWS Dedicated Local Zones
+* api-change:``marketplace-entitlement``: Add support for Marketplace Entitlement Service dual-stack endpoints.
+* api-change:``transfer``: Add WebAppEndpointPolicy support for WebApps
+* api-change:``s3control``: Amazon S3 adds support for S3 Access Points for directory buckets in AWS Dedicated Local Zones
+* api-change:``bedrock-runtime``: Add Prompt Caching support to Converse and ConverseStream APIs
+
+
+2.25.6
+======
+
+* api-change:``bedrock-runtime``: Launching Multi-modality Content Filter for Amazon Bedrock Guardrails.
+* api-change:``apigateway``: Adds support for setting the IP address type to allow dual-stack or IPv4 address types to invoke your APIs or domain names.
+* api-change:``sagemaker``: TransformAmiVersion for Batch Transform and SageMaker Search Service Aggregate Search API Extension
+* api-change:``payment-cryptography``: The service adds support for transferring AES-256 and other keys between the service and other service providers and HSMs. This feature uses ECDH to derive a one-time key transport key to enable these secure key exchanges.
+* api-change:``apigatewayv2``: Adds support for setting the IP address type to allow dual-stack or IPv4 address types to invoke your APIs or domain names.
+* api-change:``networkmanager``: Add support for NetworkManager Dualstack endpoints.
+* api-change:``meteringmarketplace``: Add support for Marketplace Metering Service dual-stack endpoints.
+* api-change:``codebuild``: This release adds support for cacheNamespace in ProjectCache
+* api-change:``ecs``: This is an Amazon ECS documentation only release that addresses tickets.
+* api-change:``quicksight``: RLS permission dataset with userAs: RLS_RULES flag, Q in QuickSight/Threshold Alerts/Schedules/Snapshots in QS embedding, toggle dataset refresh email alerts via API, transposed table with options: column width, type and index, toggle Q&A on dashboards, Oracle Service Name when creating data source.
+
+
+2.25.5
+======
+
+* api-change:``gamelift``: Amazon GameLift Servers add support for additional instance types.
+* api-change:``sagemaker``: add: recovery mode for SageMaker Studio apps
+* api-change:``iam``: Update IAM dual-stack endpoints for BJS, IAD and PDT partitions
+* api-change:``bedrock-agent-runtime``: bedrock flow now support node action trace.
+* api-change:``cloudformation``: Adding support for the new parameter "ScanFilters" in the CloudFormation StartResourceScan API. When this parameter is included, the StartResourceScan API will initiate a scan limited to the resource types specified by the parameter.
+* api-change:``datazone``: This release adds new action type of Create Listing Changeset for the Metadata Enforcement Rule feature.
+* api-change:``sso-oidc``: This release adds AwsAdditionalDetails in the CreateTokenWithIAM API response.
+* api-change:``eks``: Added support for BOTTLEROCKET FIPS AMIs to AMI types in US regions.
+* api-change:``bcm-pricing-calculator``: Added standaloneAccountRateTypeSelections for GetPreferences and UpdatePreferences APIs. Added STALE enum value to status attribute in GetBillScenario and UpdateBillScenario APIs.
+* api-change:``batch``: This release will enable two features: Firelens log driver, and Execute Command on Batch jobs on ECS. Both features will be passed through to ECS.
+
+
+2.25.4
+======
+
+* api-change:``arc-zonal-shift``: Add new shiftType field for ARC zonal shifts.
+* api-change:``rds``: Add note about the Availability Zone where RDS restores the DB cluster for the RestoreDBClusterToPointInTime operation.
+* api-change:``directconnect``: With this release, AWS Direct Connect allows you to tag your Direct Connect gateways. Tags are metadata that you can create and use to manage your Direct Connect gateways. For more information about tagging, see AWS Tagging Strategies.
+* api-change:``wafv2``: This release adds the ability to associate an AWS WAF v2 web ACL with an AWS Amplify App.
+* api-change:``mediatailor``: Add support for log filtering which allow customers to filter out selected event types from logs.
+* api-change:``mediaconvert``: This release adds a configurable Quality Level setting for the top rendition of Auto ABR jobs
+* api-change:``polly``: Added support for the new voice - Jihye (ko-KR). Jihye is available as a Neural voice only.
+
+
+2.25.3
+======
+
+* api-change:``workspaces-thin-client``: Deprecate tags field in Get API responses
+* api-change:``eks``: Added support to override upgrade-blocking readiness checks via force flag when updating a cluster.
+* api-change:``gameliftstreams``: Minor updates to improve developer experience.
+* api-change:``bedrock-agent``: Adding support for Amazon OpenSearch Managed clusters as a vector database in Knowledge Bases for Amazon Bedrock
+* api-change:``marketplace-entitlement``: This release enhances the GetEntitlements API to support new filter CUSTOMER_AWS_ACCOUNT_ID in request and CustomerAWSAccountId field in response.
+* api-change:``keyspaces``: Removing replication region limitation for Amazon Keyspaces Multi-Region Replication APIs.
+* enhancement:``sso``: Updates legacy token auth flow to check if cached legacy tokens are expired according to the local clock. If expired, it will raise an ``UnauthorizedSSOTokenError`` instead of sending an expired token to Identity Center's ``GetRoleCredentials`` API.
+* api-change:``sagemaker``: This release adds support for customer-managed KMS keys in Amazon SageMaker Partner AI Apps
+* api-change:``meteringmarketplace``: This release enhances the BatchMeterUsage API to support new field CustomerAWSAccountId in request and response and making CustomerIdentifier optional. CustomerAWSAccountId or CustomerIdentifier must be provided in request but not both.
+
+
+2.25.2
+======
+
+* api-change:``pcs``: ClusterName/ClusterIdentifier, ComputeNodeGroupName/ComputeNodeGroupIdentifier, and QueueName/QueueIdentifier can now have 10 characters, and a minimum of 3 characters. The TagResource API action can now return ServiceQuotaExceededException.
+* api-change:``iotwireless``: Mark EutranCid under LteNmr optional.
+* bugfix:dependency: Relax symlink verification when building MacOS executables
+* api-change:``ssm``: This release adds the AvailableSecurityUpdatesComplianceStatus field to patch baseline operations, as well as the AvailableSecurityUpdateCount and InstancesWithAvailableSecurityUpdates to patch state operations. Applies to Windows Server managed nodes only.
+* api-change:``qconnect``: Provides the correct value for supported model ID.
+
+
+2.25.1
+======
+
+* api-change:``datazone``: Add support for overriding selection of default AWS IAM Identity Center instance as part of Amazon DataZone domain APIs.
+* api-change:``sagemaker``: This release does the following: 1.) Adds DurationHours as a required field to the SearchTrainingPlanOfferings action in the SageMaker AI API; 2.) Adds support for G6e instance types for SageMaker AI inference optimization jobs.
+* enhancement:Protocol: Adds support for the smithy-rpc-v2-cbor protocol.  If a service supports smithy-rpc-v2-cbor, this protocol will automatically be used.  For more information, see https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html
+* api-change:``route53-recovery-control-config``: Adds dual-stack (IPv4 and IPv6) endpoint support for route53-recovery-control-config operations, opt-in dual-stack addresses for cluster endpoints, and UpdateCluster API to update the network-type of clusters between IPv4 and dual-stack.
+* api-change:``bedrock``: A CustomModelUnit(CMU) is an abstract view of the hardware utilization that Bedrock needs to host a a single copy of your custom imported model. Bedrock determines the number of CMUs that a model copy needs when you import the custom model. You can use CMUs to estimate the cost of Inference's.
+
+
+2.25.0
+======
+
+* feature:Endpoints: Generate and use AWS-account-based endpoints for compatible services when the account ID is available. At launch, DynamoDB is the first and only compatible service. The new endpoint URL pattern will be ``https://<account-id>.ddb.<region>.amazonaws.com``. Additional services may be added in the future. See the documentation for details: https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html
+* enhancement:dependency: Upgrade pyinstaller from 5.13.2 to 6.11.1.
+* api-change:``controlcatalog``: Add ExemptAssumeRoot parameter to adapt for new AWS AssumeRoot capability.
+* api-change:``network-firewall``: You can now use flow operations to either flush or capture traffic monitored in your firewall's flow table.
+* api-change:``bedrock``: With this release, Bedrock Evaluation will now support bring your own inference responses.
+* enhancement:dependency: Set ``PYINSTALLER_RESET_ENVIRONMENT`` if not already set when starting child processes. This supports using the CLI as a credential process for itself.
+* api-change:``mailmanager``: Amazon SES Mail Manager. Extended rule string and boolean expressions to support analysis in condition evaluation. Extended ingress point string expression to support analysis in condition evaluation
+* api-change:``amplify``: Added appId field to Webhook responses
+
+
+2.24.27
+=======
+
+* api-change:``mediaconnect``: This release adds support for NDI flow outputs in AWS Elemental MediaConnect. You can now send content from your MediaConnect transport streams directly to your NDI environment using the new NDI output type.
+* api-change:``neptune-graph``: Update IAM Role ARN Validation to Support Role Paths
+* api-change:``lambda``: Add Ruby 3.4 (ruby3.4) support to AWS Lambda.
+* api-change:``bedrock``: Support custom prompt routers for evaluation jobs
+* api-change:``ec2``: Doc-only updates for EC2 for March 2025.
+* api-change:``sagemaker``: Added support for g6, g6e, m6i, c6i instance types in SageMaker Processing Jobs.
+
+
+2.24.26
+=======
+
+* api-change:``mediaconvert``: This release adds support for AVC passthrough, the ability to specify PTS offset without padding, and an A/V segment matching feature.
+* api-change:``route53``: Amazon Route 53 now supports the iso-f regions for private DNS Amazon VPCs and cloudwatch healthchecks.
+* api-change:``appsync``: Providing Tagging support for DomainName in AppSync
+* api-change:``cleanrooms``: This release adds support for PySpark jobs. Customers can now analyze data by running jobs using approved PySpark analysis templates.
+
+
+2.24.25
+=======
+
+* api-change:``wafv2``: AWS WAF now lets you inspect fragments of request URIs. You can specify the scope of the URI to inspect and narrow the set of URI fragments.
+* api-change:``geo-maps``: Provide support for vector map styles in the GetStaticMap operation.
+* api-change:``application-signals``: This release adds support for adding, removing, and listing SLO time exclusion windows with the BatchUpdateExclusionWindows and ListServiceLevelObjectiveExclusionWindows APIs.
+* api-change:``rum``: CloudWatch RUM now supports unminification of JS error stack traces.
+* api-change:``taxsettings``: Adjust Vietnam PaymentVoucherNumber regex and minor API change.
+
+
+2.24.24
+=======
+
+* api-change:``lakeformation``: This release added "condition" to LakeFormation OptIn APIs, also added WithPrivilegedAccess flag to RegisterResource and DescribeResource.
+* api-change:``cognito-idp``: Minor description updates to API parameters
+* api-change:``glue``: This release added AllowFullTableExternalDataAccess to glue catalog resource.
+* api-change:``cognito-identity``: Updated API model build artifacts for identity pools
+* bugfix:parser: Fixes bug when trying to parse an integer in the `code` part of the response body.
+
+
+2.24.23
+=======
+
+* api-change:``s3control``: Updating GetDataAccess response for S3 Access Grants to include the matched Grantee for the requested prefix
+* api-change:``logs``: Updated CreateLogAnomalyDetector to accept only kms key arn
+* api-change:``amplify``: Introduced support for Skew Protection. Added enableSkewProtection field to createBranch and updateBranch API.
+* api-change:``acm-pca``: Private Certificate Authority service now supports P521 and RSA3072 key algorithms.
+* api-change:``ivs-realtime``: IVS Real-Time now offers customers the ability to adjust the participant & composition recording segment duration
+* enhancement:parsers: Minor Parser updates to support the new smithy-generated protocol tests.
+* api-change:``codebuild``: AWS CodeBuild now supports webhook filtering by organization name
+* api-change:``ec2``: This release changes the CreateLaunchTemplate, CreateLaunchTemplateVersion, ModifyLaunchTemplate CLI and SDKs such that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.
+* enhancement:parsers: Adds support for parsing int/long types in rest-json response headers.
+* api-change:``mediapackagev2``: This release adds the ResetChannelState and ResetOriginEndpointState operation to reset MediaPackage V2 channel and origin endpoint. This release also adds a new field, UrlEncodeChildManifest, for HLS/LL-HLS to allow URL-encoding child manifest query string based on the requirements of AWS SigV4.
+* api-change:``dynamodb``: Generate account endpoints for DynamoDB requests using ARN-sourced account ID when available
+* api-change:``datazone``: This release adds support to update projects and environments
+
+
+2.24.22
+=======
+
+* api-change:``ec2``: This release adds the GroupLongName field to the response of the DescribeAvailabilityZones API.
+* api-change:``medialive``: Add an enum option DISABLED for Output Locking Mode under Global Configuration.
+* api-change:``ecr``: This release adds Amazon ECR to Amazon ECR pull through cache rules support.
+* api-change:``ecs``: This is a documentation only update for Amazon ECS to address various tickets.
+* api-change:``inspector2``: Adding componentArn to network reachability details
+
+
+2.24.21
+=======
+
+* api-change:``ce``: Releasing minor partition endpoint updates.
+* api-change:``bedrock-agent-runtime``: Add support for computer use tools
+* api-change:``connect``: Add support for contact transfers in external voice systems.
+* api-change:``pca-connector-ad``: PrivateCA Connector for Active Directory now supports dual stack endpoints. This release adds the IpAddressType option to the VpcInformation on a Connector which determines whether the endpoint supports IPv4 only or IPv4 and IPv6 traffic.
+* api-change:``timestream-influxdb``: This release updates the default value of pprof-disabled from false to true.
+* api-change:``medialive``: Adds defaultFontSize and defaultLineHeight as options in the EbuTtDDestinationSettings within the caption descriptions for an output stream.
+* api-change:``bedrock-agent``: Add support for computer use tools
+* api-change:``securityhub``: This release adds new StandardsControlsUpdatable field to the StandardsSubscription resource
+
+
+2.24.20
+=======
+
+* api-change:``neptune-graph``: Several small updates to resolve customer requests.
+* api-change:``cloudfront``: Documentation updates for Amazon CloudFront.
+* api-change:``bedrock-agent``: Introduces support for Neptune Analytics as a vector data store and adds Context Enrichment Configurations, enabling use cases such as GraphRAG.
+* api-change:``ec2``: Add serviceManaged field to DescribeAddresses API response.
+* api-change:``elbv2``: This release adds support for assigning IP addresses to Application Load Balancers from VPC IP Address Manager pools.
+* api-change:``bedrock-agent-runtime``: Support Multi Agent Collaboration within Inline Agents
+
+
+2.24.19
+=======
+
+* api-change:``wafv2``: You can now perform an exact match or rate limit aggregation against the web request's JA4 fingerprint.
+* api-change:``bedrock``: This releases adds support for Custom Prompt Router
+* api-change:``workspaces``: Added a new ModifyEndpointEncryptionMode API for managing endpoint encryption settings.
+* api-change:``ivs-realtime``: IVS Real-Time now offers customers the ability to merge fragmented recordings in the event of a participant disconnect.
+* api-change:``networkflowmonitor``: This release contains 2 changes. 1: DeleteScope/GetScope/UpdateScope operations now return 404 instead of 500 when the resource does not exist. 2: Expected string format for clientToken fields of CreateMonitorInput/CreateScopeInput/UpdateMonitorInput have been updated to be an UUID based string.
+* api-change:``redshift-data``: This release adds support for ListStatements API to filter statements by ClusterIdentifier, WorkgroupName, and Database.
+* api-change:``cloudtrail``: Doc-only update for CloudTrail.
+
+
+2.24.18
+=======
+
+* api-change:``iotfleetwise``: This release adds floating point support for CAN/OBD signals and adds support for signed OBD signals.
+* api-change:``datasync``: AWS DataSync now supports modifying ServerHostname while updating locations SMB, NFS, and ObjectStorage.
+* api-change:``workspaces``: Added DeviceTypeWorkSpacesThinClient type to allow users to access their WorkSpaces through a WorkSpaces Thin Client.
+* api-change:``gameliftstreams``: New Service: Amazon GameLift Streams delivers low-latency game streaming from AWS global infrastructure to virtually any device with a browser at up to 1080p resolution and 60 fps.
+* api-change:``bedrock-runtime``: This releases adds support for Custom Prompt Router ARN
+
+
+2.24.17
+=======
+
+* api-change:``iotsitewise``: AWS IoT SiteWise now supports MQTT-enabled, V3 gateways. Configure data destinations for real-time ingestion into AWS IoT SiteWise or buffered ingestion using Amazon S3 storage. You can also use path filters for precise data collection from specific MQTT topics.
+* api-change:``elasticache``: Doc only update, listing 'valkey7' and 'valkey8' as engine options for parameter groups.
+* api-change:``rds``: Note support for Database Insights for Amazon RDS.
+* enhancement:useragent: Update user agent string to include client feature use.
+* api-change:``iot-managed-integrations``: Adding managed integrations APIs for IoT Device Management to setup and control devices across different manufacturers and connectivity protocols. APIs include managedthing operations, credential and provisioning profile management, notification configuration, and OTA update.
+
+
+2.24.16
+=======
+
+* enhancement:configuration: Add support for disabling host prefix injection via the ``AWS_DISABLE_HOST_PREFIX_INJECTION`` environment variable or the ``disable_host_prefix_injection`` parameter in the shared aws configuration file.
+* api-change:``sagemaker``: Add DomainId to CreateDomainResponse
+* api-change:``qbusiness``: Adds support for the ingestion of audio and video files by Q Business, which can be configured with the mediaExtractionConfiguration parameter.
+* api-change:``cognito-idp``: Added the capacity to return available challenges in admin authentication and to set version 3 of the pre token generation event for M2M ATC.
+* bugfix:``awscrt``: Fix urlencoding issues for request signing with the awscrt.
+* api-change:``rum``: Add support for PutResourcePolicy, GetResourcePolicy and DeleteResourcePolicy to support resource based policies for AWS CloudWatch RUM
+* api-change:``transcribe``: Updating documentation for post call analytics job queueing.
+* api-change:``ec2``: Update the DescribeVpcs response
+
+
+2.24.15
+=======
+
+* api-change:``pricing``: Update GetProducts and DescribeServices API request input validations.
+* api-change:``bedrock-data-automation``: Renamed and added new StandardConfiguration enums. Added support to update EncryptionConfiguration in UpdateBlueprint and UpdateDataAutomation APIs. Changed HttpStatus code for DeleteBlueprint and DeleteDataAutomationProject APIs to 200 from 204. Added APIs to support tagging.
+* api-change:``dms``: Add skipped status to the Result Statistics of an Assessment Run
+* api-change:``ssm``: Systems Manager doc-only updates for Feb. 2025.
+* api-change:``bedrock-data-automation-runtime``: Added a mandatory parameter DataAutomationProfileArn to support for cross region inference for InvokeDataAutomationAsync API. Renamed DataAutomationArn to DataAutomationProjectArn. Added APIs to support tagging.
+* api-change:``eks``: Adding licenses to EKS Anywhere Subscription operations response.
+* bugfix:dependency: Revert PyInstaller from 6.11.1 back to 5.13.2 due to `#9331 <https://github.com/aws/aws-cli/issues/9331>`__.
+* api-change:``bedrock-agent``: This release lets Amazon Bedrock Flows support newer models by increasing the maximum length of output in a prompt configuration. This release also increases the maximum number of prompt variables to 20 and the maximum number of node inputs to 20.
+* api-change:``mediaconvert``: The AWS MediaConvert Probe API allows you to analyze media files and retrieve detailed metadata about their content, format, and structure.
+
+
+2.24.14
+=======
+
+* api-change:``emr``: Definition update for EbsConfiguration.
+* api-change:``storagegateway``: This release adds support to invoke a process that cleans the specified file share's cache of file entries that are failing upload to Amazon S3.
+* api-change:``qbusiness``: This release supports deleting attachments from conversations.
+* enhancement:dependency: Upgrade pyinstaller from 5.13.2 to 6.11.1.
+* enhancement:encoding: Adds support for the ``AWS_CLI_OUTPUT_ENCODING`` environment variable, which can be used to override the locale's preferred encoding when the CLI is writing output.
+* api-change:``bedrock-agent-runtime``: Introduces Sessions (preview) to enable stateful conversations in GenAI applications.
+* api-change:``redshift-serverless``: Add track support for Redshift Serverless workgroup.
+* api-change:``sagemaker``: SageMaker HubService is introducing support for creating Training Jobs in Curated Hub (Private Hub). Additionally, it is introducing two new APIs: UpdateHubContent and UpdateHubContentReference.
+
+
+2.24.13
+=======
+
+* api-change:``cloudfront``: Documentation update for VPC origin config.
+* api-change:``oam``: This release adds support for sharing AWS::ApplicationSignals::Service and AWS::ApplicationSignals::ServiceLevelObjective resources.
+* enhancement:configure: Clarify prompt titles and default values in the ``aws configure sso`` wizard
+* api-change:``iotfleetwise``: This release adds an optional listResponseScope request parameter in certain list API requests to limit the response to metadata only.
+* api-change:``chime``: Removes the Amazon Chime SDK APIs from the "chime" namespace.  Amazon Chime SDK APIs continue to be available in the AWS SDK via the dedicated Amazon Chime SDK namespaces: chime-sdk-identity, chime-sdk-mediapipelines, chime-sdk-meetings, chime-sdk-messaging, and chime-sdk-voice.
+* api-change:``batch``: AWS Batch: Resource Aware Scheduling feature support
+* api-change:``sagemaker``: AWS SageMaker InferenceComponents now support rolling update deployments for Inference Components.
+* api-change:``ec2``: Amazon EC2 Fleet customers can now override the Block Device Mapping specified in the Launch Template when creating a new Fleet request, saving the effort of creating and associating new Launch Templates to customize the Block Device Mapping.
+* api-change:``application-signals``: This release adds API support for reading Service Level Objectives and Services from monitoring accounts, from SLO and Service-scoped operations, including ListServices and ListServiceLevelObjectives.
+
+
+2.24.12
+=======
+
+* api-change:``iot``: AWS IoT - AWS IoT Device Defender adds support for a new Device Defender Audit Check that monitors device certificate age and custom threshold configurations for both the new device certificate age check and existing device certificate expiry check.
+* api-change:``codebuild``: Adding "reportArns" field in output of BatchGetBuildBatches API. "reportArns" is an array that contains the ARNs of reports created by merging reports from builds associated with the batch build.
+* api-change:``devicefarm``: Add an optional configuration to the ScheduleRun and CreateRemoteAccessSession API to set a device level http/s proxy.
+* enhancement:openssl: Update bundled OpenSSL version to 1.1.1zb for Linux installers
+* api-change:``taxsettings``: PutTaxRegistration API changes for Egypt, Greece, Vietnam countries
+* api-change:``ec2``: Adds support for time-based EBS-backed AMI copy operations. Time-based copy ensures that EBS-backed AMIs are copied within and across Regions in a specified timeframe.
+
+
+2.24.11
+=======
+
+* api-change:``elasticache``: Documentation update, adding clarity and rephrasing.
+* api-change:``bedrock-runtime``: This release adds Reasoning Content support to Converse and ConverseStream APIs
+* api-change:``bedrock-agent``: This release improves support for newer models in Amazon Bedrock Flows.
+* api-change:``bedrock-agent-runtime``: Adding support for ReasoningContent fields in Pre-Processing, Post-Processing and Orchestration Trace outputs.
+* api-change:``elastic-inference``: The elastic-inference client has been removed following the deprecation of the service.
+
+
+2.24.10
+=======
+
+* api-change:``bedrock-agent``: Introduce a new parameter which represents the user-agent header value used by the Bedrock Knowledge Base Web Connector.
+* enhancement:Python: Update bundled Python interpreter version to 3.12.9
+* api-change:``appstream``: Added support for Certificate-Based Authentication on AppStream 2.0 multi-session fleets.
+
+
+2.24.9
+======
+
+* api-change:``rds``: CloudWatch Database Insights now supports Amazon RDS.
+* api-change:``workspaces-web``: Add support for toolbar configuration under user settings.
+* api-change:``codebuild``: Add webhook status and status message to AWS CodeBuild webhooks
+* api-change:``sagemaker``: Added new capability in the UpdateCluster operation to remove instance groups from your SageMaker HyperPod cluster.
+* api-change:``license-manager-user-subscriptions``: Updates entity to include Microsoft RDS SAL as a valid type of user subscription.
+* api-change:``guardduty``: Reduce the minimum number of required attack sequence signals from 2 to 1
+
+
+2.24.8
+======
+
+* api-change:``location``: Adds support for larger property maps for tracking and geofence positions changes. It increases the maximum number of items from 3 to 4, and the maximum value length from 40 to 150.
+* api-change:``network-firewall``: This release introduces Network Firewall's Automated Domain List feature. New APIs include UpdateFirewallAnalysisSettings, StartAnalysisReport, GetAnalysisReportResults, and ListAnalysisReports. These allow customers to enable analysis on firewalls to identify and report frequently accessed domain.
+* api-change:``sesv2``: This release adds the ability for outbound email sent with SES to preserve emails to a Mail Manager archive.
+* api-change:``ecs``: This is a documentation only release for Amazon ECS that supports the CPU task limit increase.
+* api-change:``lightsail``: Documentation updates for Amazon Lightsail.
+* api-change:``sagemaker``: Adds r8g instance type support to SageMaker Realtime Endpoints
+* api-change:``mailmanager``: This release adds additional metadata fields in Mail Manager archive searches to show email source and details about emails that were archived when being sent with SES.
+* api-change:``codepipeline``: Add environment variables to codepipeline action declaration.
+
+
+2.24.7
+======
+
+* enhancement:protocols: Added support for multiple protocols within a service based on performance priority.
+* api-change:``batch``: This documentation-only update corrects some typos.
+* api-change:``medialive``: Adds support for creating CloudWatchAlarmTemplates for AWS Elemental MediaTailor Playback Configuration resources.
+* api-change:``emr-containers``: EMR on EKS StartJobRun Api will be supporting the configuration of log storage in AWS by using "managedLogs" under "MonitoringConfiguration".
+* enhancement:protocol: The CLI no longer validates payload size for event streams. This is to facilitate varying payload requirements across AWS services.
+
+
+2.24.6
+======
+
+* api-change:``dms``: Support replicationConfigArn in DMS DescribeApplicableIndividualAssessments API.
+* api-change:``timestream-influxdb``: This release introduces APIs to manage DbClusters and adds support for read replicas
+* api-change:``amplify``: Add ComputeRoleArn to CreateApp, UpdateApp, CreateBranch, and UpdateBranch, allowing caller to specify a role to be assumed by Amplify Hosting for server-side rendered applications.
+
+
+2.24.5
+======
+
+* api-change:``codebuild``: Added test suite names to test case metadata
+* api-change:``connect``: Release Notes: 1) Analytics API enhancements: Added new ListAnalyticsDataLakeDataSets API. 2)  Onboarding API Idempotency: Adds ClientToken to instance creation and management APIs to support idempotency.
+* api-change:``workspaces-thin-client``: Update Environment and Device name field definitions
+* api-change:``rds-data``: Add support for Stop DB feature.
+* api-change:``dms``: Introduces premigration assessment feature to DMS Serverless API for start-replication and describe-replications
+* api-change:``s3``: Added support for Content-Range header in HeadObject response.
+* api-change:``wafv2``: The WAFv2 API now supports configuring data protection in webACLs.
+
+
+2.24.4
+======
+
+* api-change:``acm-pca``: Private Certificate Authority (PCA) documentation updates
+* api-change:``ecs``: This is a documentation only release to support migrating Amazon ECS service ARNs to the long ARN format.
+* api-change:``sagemaker``: Adds additional values to the InferenceAmiVersion parameter in the ProductionVariant data type.
+* api-change:``fis``: Adds auto-pagination for the following operations: ListActions, ListExperimentTemplates, ListTargetAccountConfigurations, ListExperiments, ListExperimentResolvedTargets, ListTargetResourceTypes. Reduces length constraints of prefixes for logConfiguration and experimentReportConfiguration.
+* api-change:``accessanalyzer``: This release introduces the getFindingsStatistics API, enabling users to retrieve aggregated finding statistics for IAM Access Analyzer's external access and unused access analysis features. Updated service API and documentation.
+* api-change:``storagegateway``: This release adds support for generating cache reports on S3 File Gateways for files that fail to upload.
+
+
+2.24.3
+======
+
+* api-change:``fsx``: Support for in-place Lustre version upgrades
+* api-change:``b2bi``: Allow spaces in the following fields in the Partnership resource: ISA 06 - Sender ID, ISA 08 - Receiver ID, GS 02 - Application Sender Code, GS 03 - Application Receiver Code
+* api-change:``polly``: Added support for the new voice - Jasmine (en-SG). Jasmine is available as a Neural voice only.
+* api-change:``bedrock-agent-runtime``: This releases adds the additionalModelRequestFields field to the InvokeInlineAgent operation. Use additionalModelRequestFields to specify  additional inference parameters for a model beyond the base inference parameters.
+* api-change:``bedrock-agent``: This releases adds the additionalModelRequestFields field to the CreateAgent and UpdateAgent operations. Use additionalModelRequestFields to specify  additional inference parameters for a model beyond the base inference parameters.
+* api-change:``opensearchserverless``: Custom OpenSearchServerless Entity ID for SAML Config.
+* api-change:``codebuild``: Add note for the RUNNER_BUILDKITE_BUILD buildType.
+* api-change:``medialive``: Adds a RequestId parameter to all MediaLive Workflow Monitor create operations.  The RequestId parameter allows idempotent operations.
+
+
+2.24.2
+======
+
+* api-change:``pi``: Documentation only update for RDS Performance Insights dimensions for execution plans and locking analysis.
+* api-change:``acm-pca``: Private Certificate Authority service now supports Partitioned CRL as a revocation configuration option.
+* api-change:``appsync``: Add support for operation level caching
+* api-change:``ec2``: Adding support for the new fullSnapshotSizeInBytes field in the response of the EC2 EBS DescribeSnapshots API. This field represents the size of all the blocks that were written to the source volume at the time the snapshot was created.
+
+
+2.24.1
+======
+
+* api-change:``connect``: Updated the CreateContact API documentation to indicate that it only applies to EMAIL contacts.
+* api-change:``apigatewayv2``: Documentation updates for Amazon API Gateway
+* api-change:``cloudfront``: Doc-only update that adds defaults for CloudFront VpcOriginEndpointConfig values.
+* api-change:``dms``: New vendors for DMS Data Providers: DB2 LUW and DB2 for z/OS
+
+
+2.24.0
+======
+
+* api-change:``ecr``: Adds support to handle the new basic scanning daily quota.
+* api-change:``pi``: Adds documentation for dimension groups and dimensions to analyze locks for Database Insights.
+* api-change:``eks``: Introduce versionStatus field to take place of status field in EKS DescribeClusterVersions API
+* api-change:``transcribe``: This release adds support for the Clinical Note Template Customization feature for the AWS HealthScribe APIs within Amazon Transcribe.
+* feature:``emr-containers``: Add custom ``create-role-associations`` and ``delete-role-associations`` commands to create/delete role associations for EMR service accounts and provided IAM role.
+* api-change:``mediaconvert``: This release adds support for Animated GIF output, forced chroma sample positioning metadata, and Extensible Wave Container format
+
+
+2.23.15
+=======
+
+* api-change:``cost-optimization-hub``: This release enables AWS Cost Optimization Hub to show cost optimization recommendations for Amazon Auto Scaling Groups, including those with single and mixed instance types.
+* api-change:``s3``: Updated list of the valid AWS Region values for the LocationConstraint parameter for general purpose buckets.
+* api-change:``connectcases``: This release adds the ability to conditionally require fields on a template. Check public documentation for more information.
+* api-change:``cloudformation``: We added 5 new stack refactoring APIs: CreateStackRefactor, ExecuteStackRefactor, ListStackRefactors, DescribeStackRefactor, ListStackRefactorActions.
+
+
+2.23.14
+=======
+
+* api-change:``rds``: Documentation updates to clarify the description for the parameter AllocatedStorage for the DB cluster data type, the description for the parameter DeleteAutomatedBackups for the DeleteDBCluster API operation, and removing an outdated note for the CreateDBParameterGroup API operation.
+
+
+2.23.13
+=======
+
+* api-change:``neptune-graph``: Added argument to `list-export` to filter by graph ID
+* api-change:``iam``: This release adds support for accepting encrypted SAML assertions. Customers can now configure their identity provider to encrypt the SAML assertions it sends to IAM.
+* api-change:``qbusiness``: Adds functionality to enable/disable a new Q Business Chat orchestration feature. If enabled, Q Business can orchestrate over datasources and plugins without the need for customers to select specific chat modes.
+* api-change:``sagemaker``: IPv6 support for Hyperpod clusters
+* api-change:``dms``: Introduces TargetDataSettings with the TablePreparationMode option available for data migrations.
+* api-change:``datasync``: Doc-only update to provide more information on using Kerberos authentication with SMB locations.
+
+
+2.23.12
+=======
+
+* api-change:``mediatailor``: Add support for CloudWatch Vended Logs which allows for delivery of customer logs to CloudWatch Logs, S3, or Firehose.
+
+
+2.23.11
+=======
+
+* api-change:``codebuild``: Added support for CodeBuild self-hosted Buildkite runner builds
+* api-change:``rds``: Updates to Aurora MySQL and Aurora PostgreSQL API pages with instance log type in the create and modify DB Cluster.
+* api-change:``bedrock-agent-runtime``: This change is to deprecate the existing citation field under RetrieveAndGenerateStream API response in lieu of GeneratedResponsePart and RetrievedReferences
+* api-change:``amp``: Add support for sending metrics to cross account and CMCK AMP workspaces through RoleConfiguration on Create/Update Scraper.
+* api-change:``geo-routes``: The OptimizeWaypoints API now supports 50 waypoints per request (20 with constraints like AccessHours or AppointmentTime). It adds waypoint clustering via Clustering and ClusteringIndex for better optimization. Also, total distance validation is removed for greater flexibility.
+* api-change:``sagemaker``: This release introduces a new valid value in InstanceType parameter: p5en.48xlarge, in ProductionVariant.
+
+
+2.23.10
+=======
+
+* enhancement:awscrt: Update awscrt version requirement to 0.23.8
+* api-change:``ecr-public``: Temporarily updating dualstack endpoint support
+* api-change:``s3tables``: You can now use the CreateTable API operation to create tables with schemas by adding an optional metadata argument.
+* api-change:``ecr``: Temporarily updating dualstack endpoint support
+* api-change:``mediatailor``: Adds options for configuring how MediaTailor conditions ads before inserting them into the content stream. Based on the new settings, MediaTailor will either transcode ads to match the content stream as it has in the past, or it will insert ads without first transcoding them.
+* api-change:``bedrock-agent-runtime``: Add a 'reason' field to InternalServerException
+* api-change:``qbusiness``: Added APIs to manage QBusiness user subscriptions
+* api-change:``appstream``: Add support for managing admin consent requirement on selected domains for OneDrive Storage Connectors in AppStream2.0.
+* api-change:``verifiedpermissions``: Adds Cedar JSON format support for entities and context data in authorization requests
+
+
+2.23.9
+======
+
+* api-change:``ecr``: Add support for Dualstack and Dualstack-with-FIPS Endpoints
+* api-change:``bcm-pricing-calculator``: Added ConflictException error type in DeleteBillScenario, BatchDeleteBillScenarioCommitmentModification, BatchDeleteBillScenarioUsageModification, BatchUpdateBillScenarioUsageModification, and BatchUpdateBillScenarioCommitmentModification API operations.
+* api-change:``ecr-public``: Add support for Dualstack Endpoints
+* api-change:``s3``: Change the type of MpuObjectSize in CompleteMultipartUploadRequest from int to long.
+* api-change:``mailmanager``: This release includes a new feature for Amazon SES Mail Manager which allows customers to specify known addresses and domains and make use of those in traffic policies and rules actions to distinguish between known and unknown entries.
+
+
+2.23.8
+======
+
+* api-change:``firehose``: For AppendOnly streams, Firehose will automatically scale to match your throughput.
+* api-change:``deadline``: feature: Deadline: Add support for limiting the concurrent usage of external resources, like floating licenses, using limits and the ability to constrain the maximum number of workers that work on a job
+* api-change:``appsync``: Add stash and outErrors to EvaluateCode/EvaluateMappingTemplate response
+* api-change:``ec2``: This release changes the CreateFleet CLI and SDK's such that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.
+* api-change:``timestream-influxdb``: Adds 'allocatedStorage' parameter to UpdateDbInstance API that allows increasing the database instance storage size and 'dbStorageType' parameter to UpdateDbInstance API that allows changing the storage type of the database instance
+* api-change:``datasync``: AWS DataSync now supports the Kerberos authentication protocol for SMB locations.
+
+
+2.23.7
+======
+
+* api-change:``iot``: Raised the documentParameters size limit to 30 KB for AWS IoT Device Management - Jobs.
+* api-change:``mediaconvert``: This release adds support for dynamic audio configuration and the ability to disable the deblocking filter for h265 encodes.
+* bugfix:Signing: No longer sign transfer-encoding header for SigV4
+* api-change:``bedrock-agent``: Add support for the prompt caching feature for Bedrock Prompt Management
+* api-change:``s3control``: Minor fix to ARN validation for Lambda functions passed to S3 Batch Operations
+
+
 2.23.6
 ======
 
diff -pruN 2.23.6-1/LICENSE.txt 2.31.35-1/LICENSE.txt
--- 2.23.6-1/LICENSE.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/LICENSE.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-Copyright 2012-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License"). You
 may not use this file except in compliance with the License. A copy of
diff -pruN 2.23.6-1/README.rst 2.31.35-1/README.rst
--- 2.23.6-1/README.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/README.rst	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@ This package provides a unified command
 
 The aws-cli package works on Python versions:
 
-* 3.8.x
 * 3.9.x
 * 3.10.x
 * 3.11.x
 * 3.12.x
+* 3.13.x
 
 .. attention::
    We recommend that all customers regularly monitor the
@@ -371,11 +371,11 @@ The latest changes to the CLI are in the
 to make sure you ``git checkout v2``.
 
 If you just want to install a snapshot of the latest development version of
-the CLI, you can use the ``requirements-dev.txt`` file included in this repo.
+the CLI, you can use the ``requirements-dev-lock.txt`` file included in this repo.
 This file points to the development version of our dependencies::
 
     $ cd <path_to_awscli> && git checkout v2
-    $ pip install -r requirements-dev.txt
+    $ pip install -r requirements-dev-lock.txt
     $ pip install -e .
 
 Verify that the AWS CLI is correctly installed. Note that the word ``source`` should appear in the output::
diff -pruN 2.23.6-1/awscli/__init__.py 2.31.35-1/awscli/__init__.py
--- 2.23.6-1/awscli/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,11 +15,12 @@ AWSCLI
 ----
 A Universal Command Line Environment for Amazon Web Services.
 """
-import os
+
 import importlib.abc
+import os
 import sys
 
-__version__ = '2.23.6'
+__version__ = '2.31.35'
 
 #
 # Get our data path to be added to botocore's search path
@@ -36,10 +37,18 @@ _awscli_data_path.append(
 os.environ['AWS_DATA_PATH'] = os.pathsep.join(_awscli_data_path)
 
 
-SCALAR_TYPES = set([
-    'string', 'float', 'integer', 'long', 'boolean', 'double',
-    'blob', 'timestamp'
-])
+SCALAR_TYPES = set(
+    [
+        'string',
+        'float',
+        'integer',
+        'long',
+        'boolean',
+        'double',
+        'blob',
+        'timestamp',
+    ]
+)
 COMPLEX_TYPES = set(['structure', 'map', 'list'])
 
 
@@ -57,13 +66,14 @@ class TopLevelImportAliasFinder(importli
     Note: That this import alias only comes into affect if anything is
     imported from the awscli package.
     """
+
     _PACKAGES = [
         'botocore',
         's3transfer',
     ]
     _TARGET_FINDERS = [
         'pyimod02_importers.PyiFrozenImporter',  # Pyinstaller injected finder
-        '_frozen_importlib_external.PathFinder'  # Built-in path finder
+        '_frozen_importlib_external.PathFinder',  # Built-in path finder
     ]
 
     def __init__(self, underlying_finder):
@@ -84,7 +94,7 @@ class TopLevelImportAliasFinder(importli
                 finder_name = finder.__class__.__name__
             full_cls_name = f'{finder.__module__}.{finder_name}'
             if full_cls_name in cls._TARGET_FINDERS:
-                meta_path[i] = cls(finder)
+                meta_path.insert(i, cls(finder))
                 return
 
     def find_spec(self, fullname, path, target=None):
@@ -94,3 +104,5 @@ class TopLevelImportAliasFinder(importli
 
 
 TopLevelImportAliasFinder.add_alias_finder(sys.meta_path)
+
+_DEFAULT_BASE_REMOTE_URL = f"https://awscli.amazonaws.com/v2/documentation/api/{__version__}"   # noqa
diff -pruN 2.23.6-1/awscli/__main__.py 2.31.35-1/awscli/__main__.py
--- 2.23.6-1/awscli/__main__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/__main__.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,5 @@ import sys
 
 from awscli.clidriver import main
 
-
 if __name__ == "__main__":
     sys.exit(main())
diff -pruN 2.23.6-1/awscli/alias.py 2.31.35-1/awscli/alias.py
--- 2.23.6-1/awscli/alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,11 +17,10 @@ import subprocess
 
 from botocore.configloader import raw_config_parse
 
-from awscli.compat import compat_shell_quote
 from awscli.commands import CLICommand
+from awscli.compat import compat_shell_quote
 from awscli.utils import emit_top_level_args_parsed_event
 
-
 LOG = logging.getLogger(__name__)
 
 
@@ -41,10 +40,13 @@ class InvalidAliasException(Exception):
     pass
 
 
-class AliasLoader(object):
-    def __init__(self,
-                 alias_filename=os.path.expanduser(
-                     os.path.join('~', '.aws', 'cli', 'alias'))):
+class AliasLoader:
+    def __init__(
+        self,
+        alias_filename=os.path.expanduser(
+            os.path.join('~', '.aws', 'cli', 'alias')
+        ),
+    ):
         """Interface for loading and interacting with alias file
 
         :param alias_filename: The name of the file to load aliases from.
@@ -60,8 +62,7 @@ class AliasLoader(object):
     def _load_aliases(self):
         parsed = {}
         if os.path.exists(self._filename):
-            parsed = raw_config_parse(
-                self._filename, parse_subsections=False)
+            parsed = raw_config_parse(self._filename, parse_subsections=False)
         self._normalize_key_names(parsed)
         return parsed
 
@@ -94,7 +95,7 @@ class AliasLoader(object):
         return self._aliases.get(key, {})
 
 
-class BaseAliasCommandInjector(object):
+class BaseAliasCommandInjector:
     def __init__(self, alias_loader):
         self._alias_loader = alias_loader
 
@@ -106,7 +107,8 @@ class BaseAliasCommandInjector(object):
 
     def _inject_external_alias(self, alias_name, alias_value, command_table):
         command_table[alias_name] = ExternalAliasCommand(
-            alias_name, alias_value)
+            alias_name, alias_value
+        )
 
 
 class AliasCommandInjector(BaseAliasCommandInjector):
@@ -125,20 +127,23 @@ class AliasCommandInjector(BaseAliasComm
     def inject_aliases(self, command_table, parser):
         for alias_name, alias_value in self._get_alias_items():
             if self._is_external_alias(alias_value):
-                self._inject_external_alias(alias_name, alias_value,
-                                            command_table)
+                self._inject_external_alias(
+                    alias_name, alias_value, command_table
+                )
             else:
                 service_alias_cmd_args = [
-                    alias_name, alias_value, self._session, command_table,
-                    parser
+                    alias_name,
+                    alias_value,
+                    self._session,
+                    command_table,
+                    parser,
                 ]
                 # If the alias name matches something already in the
                 # command table provide the command it is about
                 # to clobber as a possible reference that it will
                 # need to proxy to.
                 if alias_name in command_table:
-                    service_alias_cmd_args.append(
-                        command_table[alias_name])
+                    service_alias_cmd_args.append(command_table[alias_name])
                 alias_cmd = ServiceAliasCommand(*service_alias_cmd_args)
                 command_table[alias_name] = alias_cmd
 
@@ -153,14 +158,18 @@ class AliasSubCommandInjector(BaseAliasC
         if self._global_args_parser is None:
             if self._global_cmd_driver is not None:
                 command_table = self._global_cmd_driver.subcommand_table
-                self._global_args_parser = \
+                self._global_args_parser = (
                     self._global_cmd_driver.create_parser(command_table)
+                )
         return self._global_args_parser
 
-    def on_building_command_table(self, command_table, event_name,
-                                  command_object, session, **kwargs):
-        if not isinstance(command_object, CLICommand) and \
-                event_name == 'building-command-table.main':
+    def on_building_command_table(
+        self, command_table, event_name, command_object, session, **kwargs
+    ):
+        if (
+            not isinstance(command_object, CLICommand)
+            and event_name == 'building-command-table.main'
+        ):
             self._global_cmd_driver = command_object
             return
         # We have to transform the event name to figure out what the
@@ -185,14 +194,18 @@ class AliasSubCommandInjector(BaseAliasC
         for alias_name, alias_value in aliases_for_cmd.items():
             if self._is_external_alias(alias_value):
                 self._inject_external_alias(
-                    alias_name, alias_value, command_table)
+                    alias_name, alias_value, command_table
+                )
             else:
                 proxied_sub_command = command_table.get(alias_name)
                 command_table[alias_name] = InternalAliasSubCommand(
-                    alias_name, alias_value, command_object,
+                    alias_name,
+                    alias_value,
+                    command_object,
                     self._retrieve_global_args_parser(),
                     session=session,
-                    proxied_sub_command=proxied_sub_command)
+                    proxied_sub_command=proxied_sub_command,
+                )
 
 
 class BaseAliasCommand(CLICommand):
@@ -233,10 +246,7 @@ class BaseAliasCommand(CLICommand):
 
 
 class BaseInternalAliasCommand(BaseAliasCommand):
-    UNSUPPORTED_GLOBAL_PARAMETERS = [
-        'debug',
-        'profile'
-    ]
+    UNSUPPORTED_GLOBAL_PARAMETERS = ['debug', 'profile']
 
     def __init__(self, alias_name, alias_value, session):
         super(BaseInternalAliasCommand, self).__init__(alias_name, alias_value)
@@ -248,21 +258,25 @@ class BaseInternalAliasCommand(BaseAlias
         except ValueError as e:
             raise InvalidAliasException(
                 'Value of alias "%s" could not be parsed. '
-                'Received error: %s when parsing:\n%s' % (
-                    self._alias_name, e, self._alias_value)
+                'Received error: %s when parsing:\n%s'
+                % (self._alias_name, e, self._alias_value)
             )
 
         alias_args = [arg.strip(os.linesep) for arg in alias_args]
         LOG.debug(
             'Expanded subcommand alias %r with value: %r to: %r',
-            self._alias_name, self._alias_value, alias_args
+            self._alias_name,
+            self._alias_value,
+            alias_args,
         )
         return alias_args
 
-    def _update_parsed_globals(self, arg_parser, parsed_alias_args,
-                               parsed_globals):
+    def _update_parsed_globals(
+        self, arg_parser, parsed_alias_args, parsed_globals
+    ):
         global_params_to_update = self._get_global_parameters_to_update(
-            arg_parser, parsed_alias_args)
+            arg_parser, parsed_alias_args
+        )
         # Emit the top level args parsed event to ensure all possible
         # customizations that typically get applied are applied to the
         # global parameters provided in the alias before updating
@@ -288,16 +302,24 @@ class BaseInternalAliasCommand(BaseAlias
                 if parsed_param in self.UNSUPPORTED_GLOBAL_PARAMETERS:
                     raise InvalidAliasException(
                         'Global parameter "--%s" detected in alias "%s" '
-                        'which is not support in subcommand aliases.' % (
-                            parsed_param, self._alias_name))
+                        'which is not supported in subcommand aliases.'
+                        % (parsed_param, self._alias_name)
+                    )
                 else:
                     global_params_to_update.append(parsed_param)
         return global_params_to_update
 
 
 class ServiceAliasCommand(BaseInternalAliasCommand):
-    def __init__(self, alias_name, alias_value, session, command_table,
-                 parser, shadow_proxy_command=None):
+    def __init__(
+        self,
+        alias_name,
+        alias_value,
+        session,
+        command_table,
+        parser,
+        shadow_proxy_command=None,
+    ):
         """Command for a `toplevel` subcommand alias
 
         :type alias_name: string
@@ -329,7 +351,8 @@ class ServiceAliasCommand(BaseInternalAl
             table
         """
         super(ServiceAliasCommand, self).__init__(
-            alias_name, alias_value, session)
+            alias_name, alias_value, session
+        )
         self._command_table = command_table
         self._parser = parser
         self._shadow_proxy_command = shadow_proxy_command
@@ -337,15 +360,20 @@ class ServiceAliasCommand(BaseInternalAl
     def __call__(self, args, parsed_globals):
         alias_args = self._get_alias_args()
         parsed_alias_args, remaining = self._parser.parse_known_args(
-            alias_args)
-        self._update_parsed_globals(self._parser, parsed_alias_args,
-                                    parsed_globals)
+            alias_args
+        )
+        self._update_parsed_globals(
+            self._parser, parsed_alias_args, parsed_globals
+        )
         # Take any of the remaining arguments that were not parsed out and
         # prepend them to the remaining args provided to the alias.
         remaining.extend(args)
         LOG.debug(
             'Alias %r passing on arguments: %r to %r command',
-            self._alias_name, remaining, parsed_alias_args.command)
+            self._alias_name,
+            remaining,
+            parsed_alias_args.command,
+        )
         # Pass the update remaining args and global args to the service command
         # the alias proxied to.
         command = self._command_table[parsed_alias_args.command]
@@ -356,9 +384,9 @@ class ServiceAliasCommand(BaseInternalAl
             # a built-in command.
             if shadow_name == parsed_alias_args.command:
                 LOG.debug(
-                    'Using shadowed command object: %s '
-                    'for alias: %s', self._shadow_proxy_command,
-                    self._alias_name
+                    'Using shadowed command object: %s for alias: %s',
+                    self._shadow_proxy_command,
+                    self._alias_name,
                 )
                 command = self._shadow_proxy_command
         return command(remaining, parsed_globals)
@@ -386,32 +414,40 @@ class ExternalAliasCommand(BaseAliasComm
         self._invoker = invoker
 
     def __call__(self, args, parsed_globals):
-        command_components = [
-            self._alias_value[1:]
-        ]
+        command_components = [self._alias_value[1:]]
         command_components.extend(compat_shell_quote(a) for a in args)
         command = ' '.join(command_components)
         LOG.debug(
             'Using external alias %r with value: %r to run: %r',
-            self._alias_name, self._alias_value, command)
+            self._alias_name,
+            self._alias_value,
+            command,
+        )
         return self._invoker(command, shell=True)
 
 
 class InternalAliasSubCommand(BaseInternalAliasCommand):
-
-    def __init__(self, alias_name, alias_value, command_object,
-                 global_args_parser, session,
-                 proxied_sub_command=None):
+    def __init__(
+        self,
+        alias_name,
+        alias_value,
+        command_object,
+        global_args_parser,
+        session,
+        proxied_sub_command=None,
+    ):
         super(InternalAliasSubCommand, self).__init__(
-            alias_name, alias_value, session)
+            alias_name, alias_value, session
+        )
         self._command_object = command_object
         self._global_args_parser = global_args_parser
         self._proxied_sub_command = proxied_sub_command
 
     def _process_global_args(self, arg_parser, alias_args, parsed_globals):
         globally_parseable_args = [parsed_globals.command] + alias_args
-        alias_globals, remaining = arg_parser\
-            .parse_known_args(globally_parseable_args)
+        alias_globals, remaining = arg_parser.parse_known_args(
+            globally_parseable_args
+        )
         self._update_parsed_globals(arg_parser, alias_globals, parsed_globals)
         return remaining
 
@@ -429,7 +465,8 @@ class InternalAliasSubCommand(BaseIntern
         #  embedded as part of the alias value (i.e defined in the alias file)
         alias_args = self._get_alias_args()
         cmd_specific_args = self._process_global_args(
-            self._global_args_parser, alias_args, parsed_globals)
+            self._global_args_parser, alias_args, parsed_globals
+        )
         cmd_specific_args.extend(args)
         if self._proxied_sub_command is not None:
             # If we overwrote an existing command, we just delegate to that
@@ -438,8 +475,10 @@ class InternalAliasSubCommand(BaseIntern
             # command so we remove that value before delegating to the
             # proxied command.
             cmd_specific_args = cmd_specific_args[1:]
-            LOG.debug("Delegating to proxy sub-command with new alias "
-                      "args: %s", alias_args)
+            LOG.debug(
+                "Delegating to proxy sub-command with new alias args: %s",
+                alias_args,
+            )
             return self._proxied_sub_command(cmd_specific_args, parsed_globals)
         else:
             return self._command_object(cmd_specific_args, parsed_globals)
diff -pruN 2.23.6-1/awscli/argparser.py 2.31.35-1/awscli/argparser.py
--- 2.23.6-1/awscli/argparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/argparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ import copy
 import sys
 from difflib import get_close_matches
 
-
 HELP_BLURB = (
     "To see help text, you can run:\n"
     "\n"
@@ -25,7 +24,7 @@ HELP_BLURB = (
 )
 USAGE = (
     "aws [options] <command> <subcommand> [<subcommand> ...] [parameters]\n"
-    "%s" % HELP_BLURB
+    f"{HELP_BLURB}"
 )
 
 
@@ -40,11 +39,10 @@ class CommandAction(argparse.Action):
     are dynamically retrieved from the keys of the referenced command
     table
     """
+
     def __init__(self, option_strings, dest, command_table, **kwargs):
         self.command_table = command_table
-        super(CommandAction, self).__init__(
-            option_strings, dest, choices=self.choices, **kwargs
-        )
+        super().__init__(option_strings, dest, choices=self.choices, **kwargs)
 
     def __call__(self, parser, namespace, values, option_string=None):
         setattr(namespace, self.dest, values)
@@ -65,10 +63,6 @@ class CommandAction(argparse.Action):
 class CLIArgParser(argparse.ArgumentParser):
     Formatter = argparse.RawTextHelpFormatter
 
-    # When displaying invalid choice error messages,
-    # this controls how many options to show per line.
-    ChoicesPerLine = 2
-
     def _check_value(self, action, value):
         """
         It's probably not a great idea to override a "hidden" method
@@ -77,22 +71,17 @@ class CLIArgParser(argparse.ArgumentPars
         """
         # converted value must be one of the choices (if specified)
         if action.choices is not None and value not in action.choices:
-            msg = ['Invalid choice, valid choices are:\n']
-            for i in range(len(action.choices))[::self.ChoicesPerLine]:
-                current = []
-                for choice in action.choices[i:i+self.ChoicesPerLine]:
-                    current.append('%-40s' % choice)
-                msg.append(' | '.join(current))
+            msg = [f"Found invalid choice '{value}'\n"]
             possible = get_close_matches(value, action.choices, cutoff=0.8)
             if possible:
-                extra = ['\n\nInvalid choice: %r, maybe you meant:\n' % value]
+                extra = ['Maybe you meant:\n']
                 for word in possible:
-                    extra.append('  * %s' % word)
+                    extra.append(f'  * {word}')
                 msg.extend(extra)
             raise argparse.ArgumentError(action, '\n'.join(msg))
 
     def parse_known_args(self, args, namespace=None):
-        parsed, remaining = super(CLIArgParser, self).parse_known_args(args, namespace)
+        parsed, remaining = super().parse_known_args(args, namespace)
         terminal_encoding = getattr(sys.stdin, 'encoding', 'utf-8')
         if terminal_encoding is None:
             # In some cases, sys.stdin won't have an encoding set,
@@ -124,55 +113,67 @@ class CLIArgParser(argparse.ArgumentPars
         should raise an exception.
         """
         usage_message = self.format_usage()
-        error_message = f'{self.prog}: error: {message}\n'
-        raise ArgParseException(f'{usage_message}\n{error_message}')
+        error_message = f'{self.prog}: [ERROR]: {message}'
+        raise ArgParseException(f'{error_message}\n\n{usage_message}')
 
 
 class MainArgParser(CLIArgParser):
     Formatter = argparse.RawTextHelpFormatter
 
-    def __init__(self, command_table, version_string,
-                 description, argument_table, prog=None):
-        super(MainArgParser, self).__init__(
+    def __init__(
+        self,
+        command_table,
+        version_string,
+        description,
+        argument_table,
+        prog=None,
+    ):
+        super().__init__(
             formatter_class=self.Formatter,
             add_help=False,
             conflict_handler='resolve',
             description=description,
             usage=USAGE,
-            prog=prog)
+            prog=prog,
+        )
         self._build(command_table, version_string, argument_table)
 
     def _create_choice_help(self, choices):
         help_str = ''
         for choice in sorted(choices):
-            help_str += '* %s\n' % choice
+            help_str += f'* {choice}\n'
         return help_str
 
     def _build(self, command_table, version_string, argument_table):
         for argument_name in argument_table:
             argument = argument_table[argument_name]
             argument.add_to_parser(self)
-        self.add_argument('--version', action="version",
-                          version=version_string,
-                          help='Display the version of this tool')
-        self.add_argument('command', action=CommandAction,
-                          command_table=command_table)
+        self.add_argument(
+            '--version',
+            action="version",
+            version=version_string,
+            help='Display the version of this tool',
+        )
+        self.add_argument(
+            'command', action=CommandAction, command_table=command_table
+        )
 
 
 class ServiceArgParser(CLIArgParser):
-
     def __init__(self, operations_table, service_name):
-        super(ServiceArgParser, self).__init__(
+        super().__init__(
             formatter_class=argparse.RawTextHelpFormatter,
             add_help=False,
             conflict_handler='resolve',
-            usage=USAGE)
+            usage=USAGE,
+        )
         self._build(operations_table)
         self._service_name = service_name
 
     def _build(self, operations_table):
-        self.add_argument('operation', action=CommandAction,
-                          command_table=operations_table)
+        self.add_argument(
+            'operation', action=CommandAction, command_table=operations_table
+        )
 
 
 class ArgTableArgParser(CLIArgParser):
@@ -182,11 +183,12 @@ class ArgTableArgParser(CLIArgParser):
         # command_table is an optional subcommand_table.  If it's passed
         # in, then we'll update the argparse to parse a 'subcommand' argument
         # and populate the choices field with the command table keys.
-        super(ArgTableArgParser, self).__init__(
+        super().__init__(
             formatter_class=self.Formatter,
             add_help=False,
             usage=USAGE,
-            conflict_handler='resolve')
+            conflict_handler='resolve',
+        )
         if command_table is None:
             command_table = {}
         self._build(argument_table, command_table)
@@ -196,8 +198,12 @@ class ArgTableArgParser(CLIArgParser):
             argument = argument_table[arg_name]
             argument.add_to_parser(self)
         if command_table:
-            self.add_argument('subcommand', action=CommandAction,
-                              command_table=command_table, nargs='?')
+            self.add_argument(
+                'subcommand',
+                action=CommandAction,
+                command_table=command_table,
+                nargs='?',
+            )
 
     def parse_known_args(self, args, namespace=None):
         if len(args) == 1 and args[0] == 'help':
@@ -205,8 +211,7 @@ class ArgTableArgParser(CLIArgParser):
             namespace.help = 'help'
             return namespace, []
         else:
-            return super(ArgTableArgParser, self).parse_known_args(
-                args, namespace)
+            return super().parse_known_args(args, namespace)
 
 
 class SubCommandArgParser(ArgTableArgParser):
@@ -219,8 +224,7 @@ class SubCommandArgParser(ArgTableArgPar
     """
 
     def parse_known_args(self, args, namespace=None):
-        parsed_args, remaining = super(
-            SubCommandArgParser, self).parse_known_args(args, namespace)
+        parsed_args, remaining = super().parse_known_args(args, namespace)
         if getattr(parsed_args, 'subcommand', None) is not None:
             new_args = self._remove_subcommand(args, parsed_args)
             return new_args, parsed_args.subcommand
@@ -256,14 +260,17 @@ class SubCommandArgParser(ArgTableArgPar
         # fail if any of the required args aren't provided.  We don't
         # want to mutate the arg table that's provided to us, so we
         # make a copy of it and then set all the required to not required.
-        non_required_arg_table = self._non_required_arg_table(
-            argument_table)
+        non_required_arg_table = self._non_required_arg_table(argument_table)
         for arg_name in non_required_arg_table:
             argument = non_required_arg_table[arg_name]
             argument.add_to_parser(self)
         if command_table:
-            self.add_argument('subcommand', action=CommandAction,
-                              command_table=command_table, nargs='?')
+            self.add_argument(
+                'subcommand',
+                action=CommandAction,
+                command_table=command_table,
+                nargs='?',
+            )
 
     def _non_required_arg_table(self, argument_table):
         arg_table_copy = {}
diff -pruN 2.23.6-1/awscli/argprocess.py 2.31.35-1/awscli/argprocess.py
--- 2.23.6-1/awscli/argprocess.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/argprocess.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,18 +11,19 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """Module for processing CLI args."""
-import os
+
 import logging
+import os
 
 from botocore.compat import OrderedDict, json
+from botocore.utils import is_json_value_header
 
-from awscli import SCALAR_TYPES, COMPLEX_TYPES
-from awscli import shorthand
+from awscli import COMPLEX_TYPES, SCALAR_TYPES, shorthand
 from awscli.utils import (
-    find_service_and_method_in_event_name, is_document_type,
-    is_document_type_container
+    find_service_and_method_in_event_name,
+    is_document_type,
+    is_document_type_container,
 )
-from botocore.utils import is_json_value_header
 
 LOG = logging.getLogger('awscli.argprocess')
 
@@ -40,8 +41,7 @@ class ParamError(Exception):
         :param message: The error message to display to the user.
 
         """
-        full_message = ("Error parsing parameter '%s': %s" %
-                        (cli_name, message))
+        full_message = "Error parsing parameter '%s': %s" % (cli_name, message)
         super(ParamError, self).__init__(full_message)
         self.cli_name = cli_name
         self.message = message
@@ -54,9 +54,7 @@ class ParamSyntaxError(Exception):
 class ParamUnknownKeyError(Exception):
     def __init__(self, key, valid_keys):
         valid_keys = ', '.join(valid_keys)
-        full_message = (
-            "Unknown key '%s', valid choices "
-            "are: %s" % (key, valid_keys))
+        full_message = f"Unknown key '{key}', valid choices are: {valid_keys}"
         super(ParamUnknownKeyError, self).__init__(full_message)
 
 
@@ -64,7 +62,9 @@ class TooComplexError(Exception):
     pass
 
 
-def unpack_argument(session, service_name, operation_name, cli_argument, value):
+def unpack_argument(
+    session, service_name, operation_name, cli_argument, value
+):
     """
     Unpack an argument's value from the commandline. This is part one of a two
     step process in handling commandline arguments. Emits the load-cli-arg
@@ -76,11 +76,12 @@ def unpack_argument(session, service_nam
     param_name = getattr(cli_argument, 'name', 'anonymous')
 
     value_override = session.emit_first_non_none_response(
-        'load-cli-arg.%s.%s.%s' % (service_name,
-                                   operation_name,
-                                   param_name),
-        param=cli_argument, value=value, service_name=service_name,
-        operation_name=operation_name)
+        'load-cli-arg.%s.%s.%s' % (service_name, operation_name, param_name),
+        param=cli_argument,
+        value=value,
+        service_name=service_name,
+        operation_name=operation_name,
+    )
 
     if value_override is not None:
         value = value_override
@@ -102,8 +103,10 @@ def _detect_shape_structure(param, stack
         if param.type_name in SCALAR_TYPES:
             return 'scalar'
         elif param.type_name == 'structure':
-            sub_types = [_detect_shape_structure(p, stack)
-                        for p in param.members.values()]
+            sub_types = [
+                _detect_shape_structure(p, stack)
+                for p in param.members.values()
+            ]
             # We're distinguishing between structure(scalar)
             # and structure(scalars), because for the case of
             # a single scalar in a structure we can simplify
@@ -141,29 +144,31 @@ def unpack_cli_arg(cli_argument, value):
     :return: The "unpacked" argument than can be sent to the `Operation`
         object in python.
     """
-    return _unpack_cli_arg(cli_argument.argument_model, value,
-                           cli_argument.cli_name)
+    return _unpack_cli_arg(
+        cli_argument.argument_model, value, cli_argument.cli_name
+    )
 
 
 def _special_type(model):
     # check if model is jsonvalue header and that value is serializable
-    if model.serialization.get('jsonvalue') and \
-       model.serialization.get('location') == 'header' and \
-       model.type_name == 'string':
+    if (
+        model.serialization.get('jsonvalue')
+        and model.serialization.get('location') == 'header'
+        and model.type_name == 'string'
+    ):
         return True
     return False
 
 
 def _unpack_cli_arg(argument_model, value, cli_name):
-    if is_json_value_header(argument_model) or \
-            is_document_type(argument_model):
+    if is_json_value_header(argument_model) or is_document_type(
+        argument_model
+    ):
         return _unpack_json_cli_arg(argument_model, value, cli_name)
     elif argument_model.type_name in SCALAR_TYPES:
-        return unpack_scalar_cli_arg(
-            argument_model, value, cli_name)
+        return unpack_scalar_cli_arg(argument_model, value, cli_name)
     elif argument_model.type_name in COMPLEX_TYPES:
-        return _unpack_complex_cli_arg(
-            argument_model, value, cli_name)
+        return _unpack_complex_cli_arg(argument_model, value, cli_name)
     else:
         return str(value)
 
@@ -173,8 +178,8 @@ def _unpack_json_cli_arg(argument_model,
         return json.loads(value, object_pairs_hook=OrderedDict)
     except ValueError as e:
         raise ParamError(
-            cli_name, "Invalid JSON: %s\nJSON received: %s"
-            % (e, value))
+            cli_name, "Invalid JSON: %s\nJSON received: %s" % (e, value)
+        )
 
 
 def _unpack_complex_cli_arg(argument_model, value, cli_name):
@@ -198,9 +203,10 @@ def _unpack_complex_cli_arg(argument_mod
             # 2. It's possible this is a list of json objects:
             # --filters '{"Name": ..}' '{"Name": ...}'
             member_shape_model = argument_model.member
-            return [_unpack_cli_arg(member_shape_model, v, cli_name)
-                    for v in value]
-        except (ValueError, TypeError) as e:
+            return [
+                _unpack_cli_arg(member_shape_model, v, cli_name) for v in value
+            ]
+        except (ValueError, TypeError):
             # The list params don't have a name/cli_name attached to them
             # so they will have bad error messages.  We're going to
             # attach the parent parameter to this error message to provide
@@ -211,13 +217,21 @@ def _unpack_complex_cli_arg(argument_mod
 def unpack_scalar_cli_arg(argument_model, value, cli_name=''):
     # Note the cli_name is used strictly for error reporting.  It's
     # not required to use unpack_scalar_cli_arg
-    if argument_model.type_name == 'integer' or argument_model.type_name == 'long':
+    if (
+        argument_model.type_name == 'integer'
+        or argument_model.type_name == 'long'
+    ):
         return int(value)
-    elif argument_model.type_name == 'float' or argument_model.type_name == 'double':
+    elif (
+        argument_model.type_name == 'float'
+        or argument_model.type_name == 'double'
+    ):
         # TODO: losing precision on double types
         return float(value)
-    elif argument_model.type_name == 'blob' and \
-            argument_model.serialization.get('streaming'):
+    elif (
+        argument_model.type_name == 'blob'
+        and argument_model.serialization.get('streaming')
+    ):
         file_path = os.path.expandvars(value)
         file_path = os.path.expanduser(file_path)
         if not os.path.isfile(file_path):
@@ -256,8 +270,7 @@ def _is_complex_shape(model):
     return True
 
 
-class ParamShorthand(object):
-
+class ParamShorthand:
     def _uses_old_list_case(self, command_name, operation_name, argument_name):
         """
         Determines whether a given operation for a service needs to use the
@@ -265,27 +278,24 @@ class ParamShorthand(object):
         a single member.
         """
         cases = {
-            'firehose': {
-                'put-record-batch': ['records']
-            },
+            'firehose': {'put-record-batch': ['records']},
             'workspaces': {
                 'reboot-workspaces': ['reboot-workspace-requests'],
                 'rebuild-workspaces': ['rebuild-workspace-requests'],
-                'terminate-workspaces': ['terminate-workspace-requests']
+                'terminate-workspaces': ['terminate-workspace-requests'],
             },
             'elb': {
                 'remove-tags': ['tags'],
                 'describe-instance-health': ['instances'],
                 'deregister-instances-from-load-balancer': ['instances'],
-                'register-instances-with-load-balancer': ['instances']
-            }
+                'register-instances-with-load-balancer': ['instances'],
+            },
         }
         cases = cases.get(command_name, {}).get(operation_name, [])
         return argument_name in cases
 
 
 class ParamShorthandParser(ParamShorthand):
-
     def __init__(self):
         self._parser = shorthand.ShorthandParser()
         self._visitor = shorthand.BackCompatVisitor()
@@ -321,18 +331,21 @@ class ParamShorthandParser(ParamShorthan
         if not self._should_parse_as_shorthand(cli_argument, value):
             return
         else:
-            command_name, operation_name = \
+            command_name, operation_name = (
                 find_service_and_method_in_event_name(event_name)
+            )
             return self._parse_as_shorthand(
-                cli_argument, value, command_name, operation_name)
+                cli_argument, value, command_name, operation_name
+            )
 
-    def _parse_as_shorthand(self, cli_argument, value, command_name,
-                            operation_name):
+    def _parse_as_shorthand(
+        self, cli_argument, value, command_name, operation_name
+    ):
         try:
-            LOG.debug("Parsing param %s as shorthand",
-                        cli_argument.cli_name)
+            LOG.debug("Parsing param %s as shorthand", cli_argument.cli_name)
             handled_value = self._handle_special_cases(
-                cli_argument, value, command_name, operation_name)
+                cli_argument, value, command_name, operation_name
+            )
             if handled_value is not None:
                 return handled_value
             if isinstance(value, list):
@@ -357,15 +370,20 @@ class ParamShorthandParser(ParamShorthan
             raise ParamError(cli_argument.cli_name, str(e))
         return parsed
 
-    def _handle_special_cases(self, cli_argument, value, command_name,
-                              operation_name):
+    def _handle_special_cases(
+        self, cli_argument, value, command_name, operation_name
+    ):
         # We need to handle a few special cases that the previous
         # parser handled in order to stay backwards compatible.
         model = cli_argument.argument_model
-        if model.type_name == 'list' and \
-           model.member.type_name == 'structure' and \
-           len(model.member.members) == 1 and \
-           self._uses_old_list_case(command_name, operation_name, cli_argument.name):
+        if (
+            model.type_name == 'list'
+            and model.member.type_name == 'structure'
+            and len(model.member.members) == 1
+            and self._uses_old_list_case(
+                command_name, operation_name, cli_argument.name
+            )
+        ):
             # First special case is handling a list of structures
             # of a single element such as:
             #
@@ -378,11 +396,13 @@ class ParamShorthandParser(ParamShorthan
             key_name = list(model.member.members.keys())[0]
             new_values = [{key_name: v} for v in value]
             return new_values
-        elif model.type_name == 'structure' and \
-                len(model.members) == 1 and \
-                'Value' in model.members and \
-                model.members['Value'].type_name == 'string' and \
-                '=' not in value:
+        elif (
+            model.type_name == 'structure'
+            and len(model.members) == 1
+            and 'Value' in model.members
+            and model.members['Value'].type_name == 'string'
+            and '=' not in value
+        ):
             # Second special case is where a structure of a single
             # value whose member name is "Value" can be specified
             # as:
@@ -401,9 +421,13 @@ class ParamShorthandParser(ParamShorthan
         else:
             check_val = value
         if isinstance(check_val, str) and check_val.strip().startswith(
-                ('[', '{')):
-            LOG.debug("Param %s looks like JSON, not considered for "
-                      "param shorthand.", cli_argument.py_name)
+            ('[', '{')
+        ):
+            LOG.debug(
+                "Param %s looks like JSON, not considered for "
+                "param shorthand.",
+                cli_argument.py_name,
+            )
             return False
         model = cli_argument.argument_model
         return _supports_shorthand_syntax(model)
@@ -421,8 +445,9 @@ class ParamShorthandDocGen(ParamShorthan
             return _supports_shorthand_syntax(argument_model)
         return False
 
-    def generate_shorthand_example(self, cli_argument, command_name,
-                                   operation_name):
+    def generate_shorthand_example(
+        self, cli_argument, command_name, operation_name
+    ):
         """Generate documentation for a CLI argument.
 
         :type cli_argument: awscli.arguments.BaseCLIArgument
@@ -437,7 +462,8 @@ class ParamShorthandDocGen(ParamShorthan
 
         """
         docstring = self._handle_special_cases(
-            cli_argument, command_name, operation_name)
+            cli_argument, command_name, operation_name
+        )
         if docstring is self._DONT_DOC:
             return None
         elif docstring:
@@ -455,24 +481,35 @@ class ParamShorthandDocGen(ParamShorthan
         except TooComplexError:
             return ''
 
-    def _handle_special_cases(self, cli_argument, command_name, operation_name):
+    def _handle_special_cases(
+        self, cli_argument, command_name, operation_name
+    ):
         model = cli_argument.argument_model
-        if model.type_name == 'list' and \
-                model.member.type_name == 'structure' and \
-                len(model.member.members) == 1 and \
-                self._uses_old_list_case(
-                    command_name, operation_name, cli_argument.name):
+        if (
+            model.type_name == 'list'
+            and model.member.type_name == 'structure'
+            and len(model.member.members) == 1
+            and self._uses_old_list_case(
+                command_name, operation_name, cli_argument.name
+            )
+        ):
             member_name = list(model.member.members)[0]
             # Handle special case where the min/max is exactly one.
             metadata = model.metadata
             if metadata.get('min') == 1 and metadata.get('max') == 1:
                 return '%s %s1' % (cli_argument.cli_name, member_name)
-            return '%s %s1 %s2 %s3' % (cli_argument.cli_name, member_name,
-                                       member_name, member_name)
-        elif model.type_name == 'structure' and \
-                len(model.members) == 1 and \
-                'Value' in model.members and \
-                model.members['Value'].type_name == 'string':
+            return '%s %s1 %s2 %s3' % (
+                cli_argument.cli_name,
+                member_name,
+                member_name,
+                member_name,
+            )
+        elif (
+            model.type_name == 'structure'
+            and len(model.members) == 1
+            and 'Value' in model.members
+            and model.members['Value'].type_name == 'string'
+        ):
             return self._DONT_DOC
         return ''
 
diff -pruN 2.23.6-1/awscli/arguments.py 2.31.35-1/awscli/arguments.py
--- 2.23.6-1/awscli/arguments.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/arguments.py	2025-11-12 19:17:29.000000000 +0000
@@ -36,15 +36,14 @@ Arguments generally fall into one of sev
   user input and maps the input value to several API parameters.
 
 """
+
 import logging
 
-from botocore import xform_name
+from botocore import model, xform_name
 from botocore.hooks import first_non_none_response
 
 from awscli.argprocess import unpack_cli_arg
 from awscli.schema import SchemaTransformer
-from botocore import model
-
 
 LOG = logging.getLogger('awscli.arguments')
 
@@ -66,7 +65,7 @@ def create_argument_model_from_schema(sc
     return arg_shape
 
 
-class BaseCLIArgument(object):
+class BaseCLIArgument:
     """Interface for CLI argument.
 
     This class represents the interface used for representing CLI
@@ -203,11 +202,24 @@ class CustomArgument(BaseCLIArgument):
 
     """
 
-    def __init__(self, name, help_text='', dest=None, default=None,
-                 action=None, required=None, choices=None, nargs=None,
-                 cli_type_name=None, group_name=None, positional_arg=False,
-                 no_paramfile=False, argument_model=None, synopsis='',
-                 const=None):
+    def __init__(
+        self,
+        name,
+        help_text='',
+        dest=None,
+        default=None,
+        action=None,
+        required=None,
+        choices=None,
+        nargs=None,
+        cli_type_name=None,
+        group_name=None,
+        positional_arg=False,
+        no_paramfile=False,
+        argument_model=None,
+        synopsis='',
+        const=None,
+    ):
         self._name = name
         self._help = help_text
         self._dest = dest
@@ -235,8 +247,10 @@ class CustomArgument(BaseCLIArgument):
 
         # If the top level element is a list then set nargs to
         # accept multiple values seperated by a space.
-        if self.argument_model is not None and \
-                self.argument_model.type_name == 'list':
+        if (
+            self.argument_model is not None
+            and self.argument_model.type_name == 'list'
+        ):
             self._nargs = '+'
 
     def _create_scalar_argument_model(self):
@@ -337,9 +351,7 @@ class CustomArgument(BaseCLIArgument):
 
 
 class CLIArgument(BaseCLIArgument):
-    """Represents a CLI argument that maps to a service parameter.
-
-    """
+    """Represents a CLI argument that maps to a service parameter."""
 
     TYPE_MAP = {
         'structure': str,
@@ -352,12 +364,18 @@ class CLIArgument(BaseCLIArgument):
         'long': int,
         'boolean': bool,
         'double': float,
-        'blob': str
+        'blob': str,
     }
 
-    def __init__(self, name, argument_model, operation_model,
-                 event_emitter, is_required=False,
-                 serialized_name=None):
+    def __init__(
+        self,
+        name,
+        argument_model,
+        operation_model,
+        event_emitter,
+        is_required=False,
+        serialized_name=None,
+    ):
         """
 
         :type name: str
@@ -433,7 +451,8 @@ class CLIArgument(BaseCLIArgument):
             cli_name,
             help=self.documentation,
             type=self.cli_type,
-            required=self.required)
+            required=self.required,
+        )
 
     def add_to_params(self, parameters, value):
         if value is None:
@@ -451,16 +470,23 @@ class CLIArgument(BaseCLIArgument):
             # below.  Sometimes this can be more complicated, and subclasses
             # can customize as they need.
             unpacked = self._unpack_argument(value)
-            LOG.debug('Unpacked value of %r for parameter "%s": %r', value,
-                      self.py_name, unpacked)
+            LOG.debug(
+                'Unpacked value of %r for parameter "%s": %r',
+                value,
+                self.py_name,
+                unpacked,
+            )
             parameters[self._serialized_name] = unpacked
 
     def _unpack_argument(self, value):
         service_name = self._operation_model.service_model.service_name
         operation_name = xform_name(self._operation_model.name, '-')
-        override = self._emit_first_response('process-cli-arg.%s.%s' % (
-            service_name, operation_name), param=self.argument_model,
-            cli_argument=self, value=value)
+        override = self._emit_first_response(
+            'process-cli-arg.%s.%s' % (service_name, operation_name),
+            param=self.argument_model,
+            cli_argument=self,
+            value=value,
+        )
         if override is not None:
             # A plugin supplied an alternate conversion,
             # use it instead.
@@ -478,17 +504,18 @@ class CLIArgument(BaseCLIArgument):
 
 
 class ListArgument(CLIArgument):
-
     @property
     def nargs(self):
         return '*'
 
     def add_to_parser(self, parser):
         cli_name = self.cli_name
-        parser.add_argument(cli_name,
-                            nargs=self.nargs,
-                            type=self.cli_type,
-                            required=self.required)
+        parser.add_argument(
+            cli_name,
+            nargs=self.nargs,
+            type=self.cli_type,
+            required=self.required,
+        )
 
 
 class BooleanArgument(CLIArgument):
@@ -508,17 +535,27 @@ class BooleanArgument(CLIArgument):
 
     """
 
-    def __init__(self, name, argument_model, operation_model,
-                 event_emitter,
-                 is_required=False, action='store_true', dest=None,
-                 group_name=None, default=None,
-                 serialized_name=None):
-        super(BooleanArgument, self).__init__(name,
-                                              argument_model,
-                                              operation_model,
-                                              event_emitter,
-                                              is_required,
-                                              serialized_name=serialized_name)
+    def __init__(
+        self,
+        name,
+        argument_model,
+        operation_model,
+        event_emitter,
+        is_required=False,
+        action='store_true',
+        dest=None,
+        group_name=None,
+        default=None,
+        serialized_name=None,
+    ):
+        super(BooleanArgument, self).__init__(
+            name,
+            argument_model,
+            operation_model,
+            event_emitter,
+            is_required,
+            serialized_name=serialized_name,
+        )
         self._mutex_group = None
         self._action = action
         if dest is None:
@@ -549,18 +586,25 @@ class BooleanArgument(CLIArgument):
         argument_table[self.name] = self
         negative_name = 'no-%s' % self.name
         negative_version = self.__class__(
-            negative_name, self.argument_model,
-            self._operation_model, self._event_emitter,
-            action='store_false', dest=self._destination,
-            group_name=self.group_name, serialized_name=self._serialized_name)
+            negative_name,
+            self.argument_model,
+            self._operation_model,
+            self._event_emitter,
+            action='store_false',
+            dest=self._destination,
+            group_name=self.group_name,
+            serialized_name=self._serialized_name,
+        )
         argument_table[negative_name] = negative_version
 
     def add_to_parser(self, parser):
-        parser.add_argument(self.cli_name,
-                            help=self.documentation,
-                            action=self._action,
-                            default=self._default,
-                            dest=self._destination)
+        parser.add_argument(
+            self.cli_name,
+            help=self.documentation,
+            action=self._action,
+            default=self._default,
+            dest=self._destination,
+        )
 
     @property
     def group_name(self):
diff -pruN 2.23.6-1/awscli/autocomplete/__init__.py 2.31.35-1/awscli/autocomplete/__init__.py
--- 2.23.6-1/awscli/autocomplete/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -28,7 +28,7 @@ def lazy_call(import_name, **kwargs):
     return getattr(module, callable_name)(**kwargs)
 
 
-class LazyClientCreator(object):
+class LazyClientCreator:
     """Lazy create a botocore client.
 
     This class will defer creating a client until the create_client method
@@ -40,21 +40,24 @@ class LazyClientCreator(object):
     a client.  This class manages this process.
 
     """
-    def __init__(self,
-                 import_name='awscli.clidriver.create_clidriver'):
+
+    def __init__(self, import_name='awscli.clidriver.create_clidriver'):
         self._import_name = import_name
         self._session_cache = {}
 
-    def create_client(self, service_name, parsed_region=None,
-                      parsed_profile=None, **kwargs):
+    def create_client(
+        self, service_name, parsed_region=None, parsed_profile=None, **kwargs
+    ):
         if self._session_cache.get(parsed_profile) is None:
             session = self.create_session()
             session.set_config_variable('profile', parsed_profile)
             self._session_cache[parsed_profile] = session
         self._session_cache[parsed_profile].set_config_variable(
-            'region', parsed_region)
+            'region', parsed_region
+        )
         return self._session_cache[parsed_profile].create_client(
-                                                        service_name, **kwargs)
+            service_name, **kwargs
+        )
 
     def create_session(self):
         return lazy_call(self._import_name).session
diff -pruN 2.23.6-1/awscli/autocomplete/autogen.py 2.31.35-1/awscli/autocomplete/autogen.py
--- 2.23.6-1/awscli/autocomplete/autogen.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/autogen.py	2025-11-12 19:17:29.000000000 +0000
@@ -5,17 +5,25 @@ server side autocompletions based on upd
 It can also be used to regen completion data as new heuristics are added.
 
 """
+
 import logging
+from collections import defaultdict, namedtuple
 from difflib import SequenceMatcher
-from collections import namedtuple, defaultdict
-
 
 LOG = logging.getLogger(__name__)
-Resource = namedtuple('Resource', ['resource_name', 'ident_name',
-                                   'input_parameters', 'operation', 'jp_expr'])
+Resource = namedtuple(
+    'Resource',
+    [
+        'resource_name',
+        'ident_name',
+        'input_parameters',
+        'operation',
+        'jp_expr',
+    ],
+)
 
 
-class ServerCompletionHeuristic(object):
+class ServerCompletionHeuristic:
     # Prefix that typically indicates listing resources,
     # e.g ListResources, DescribeResources, etc.
     _RESOURCE_VERB_PREFIX = ('list', 'describe')
@@ -26,8 +34,9 @@ class ServerCompletionHeuristic(object):
             singularize = BasicSingularize()
         self._singularize = singularize
 
-    def generate_completion_descriptions(self, service_model,
-                                         prune_completions=True):
+    def generate_completion_descriptions(
+        self, service_model, prune_completions=True
+    ):
         """
 
         :param service_model: A botocore.model.ServiceModel.
@@ -48,10 +57,13 @@ class ServerCompletionHeuristic(object):
             if op_name.lower().startswith(self._RESOURCE_VERB_PREFIX):
                 candidates.append(op_name)
         all_resources = self._generate_resource_descriptions(
-            candidates, service_model)
+            candidates, service_model
+        )
         all_operations = self._generate_operations(
             self._filter_operation_names(service_model.operation_names),
-            all_resources, service_model)
+            all_resources,
+            service_model,
+        )
         if prune_completions:
             self._prune_resource_identifiers(all_resources, all_operations)
         return {
@@ -61,14 +73,18 @@ class ServerCompletionHeuristic(object):
         }
 
     def _filter_operation_names(self, op_names):
-        return [name for name in op_names
-                if not name.lower().startswith(self._OPERATION_EXCLUDES)]
+        return [
+            name
+            for name in op_names
+            if not name.lower().startswith(self._OPERATION_EXCLUDES)
+        ]
 
     def _generate_resource_descriptions(self, candidates, service_model):
         all_resources = {}
         for op_name in candidates:
             resources = self._resource_for_single_operation(
-                op_name, service_model)
+                op_name, service_model
+            )
             if resources is not None:
                 for resource in resources:
                     self._inject_resource(all_resources, resource)
@@ -97,15 +113,17 @@ class ServerCompletionHeuristic(object):
             )
         return op_map
 
-    def _add_completion_data_for_operation(self, op_map, op_name,
-                                           service_model, reverse_mapping):
+    def _add_completion_data_for_operation(
+        self, op_map, op_name, service_model, reverse_mapping
+    ):
         op_model = service_model.operation_model(op_name)
         input_shape = op_model.input_shape
         if not input_shape:
             return
         for member in input_shape.members:
             member_name = self._find_matching_member_name(
-                member, reverse_mapping)
+                member, reverse_mapping
+            )
             if member_name is None:
                 continue
             resource_name = self._find_matching_op_name(
@@ -114,9 +132,11 @@ class ServerCompletionHeuristic(object):
             op = op_map.setdefault(op_name, {})
             param = op.setdefault(member, {})
             param['completions'] = [
-                {'parameters': {},
-                 'resourceName': resource_name,
-                 'resourceIdentifier': member_name}
+                {
+                    'parameters': {},
+                    'resourceName': resource_name,
+                    'resourceIdentifier': member_name,
+                }
             ]
 
     def _find_matching_op_name(self, op_name, candidates):
@@ -139,9 +159,7 @@ class ServerCompletionHeuristic(object):
             matcher.set_seq1(candidate)
             match_ratio = matcher.ratio()
             matching_score.append((match_ratio, candidate))
-        return sorted(
-            matching_score, key=lambda x: x[0], reverse=True
-        )[0][1]
+        return sorted(matching_score, key=lambda x: x[0], reverse=True)[0][1]
 
     def _find_matching_member_name(self, member, reverse_mapping):
         # Try to find something in the reverse mapping that's close
@@ -174,11 +192,18 @@ class ServerCompletionHeuristic(object):
         # conventions.
         op_model = service_model.operation_model(op_name)
         output = op_model.output_shape
-        list_members = [member for member, shape in output.members.items()
-                        if shape.type_name == 'list']
+        list_members = [
+            member
+            for member, shape in output.members.items()
+            if shape.type_name == 'list'
+        ]
         if len(list_members) != 1:
-            LOG.debug("Operation does not have exactly one list member, "
-                      "skipping: %s (%s)", op_name, list_members)
+            LOG.debug(
+                "Operation does not have exactly one list member, "
+                "skipping: %s (%s)",
+                op_name,
+                list_members,
+            )
             return
         resource_member_name = list_members[0]
         list_member = output.members[resource_member_name].member
@@ -187,52 +212,59 @@ class ServerCompletionHeuristic(object):
             required_members = op_model.input_shape.required_members
         if list_member.type_name == 'structure':
             return self._resource_from_structure(
-                op_name, resource_member_name, list_member, required_members)
+                op_name, resource_member_name, list_member, required_members
+            )
         elif list_member.type_name == 'string':
-            return [self._resource_from_string(
-                op_name, resource_member_name, required_members,
-            )]
-
-    def _resource_from_structure(self, op_name,
-                                 resource_member_name, list_member,
-                                 required_members):
+            return [
+                self._resource_from_string(
+                    op_name,
+                    resource_member_name,
+                    required_members,
+                )
+            ]
+
+    def _resource_from_structure(
+        self, op_name, resource_member_name, list_member, required_members
+    ):
         op_with_prefix_removed = self._remove_verb_prefix(op_name)
-        singular_name = self._singularize.make_singular(
-            op_with_prefix_removed)
+        singular_name = self._singularize.make_singular(op_with_prefix_removed)
         resources = []
         for member_name in list_member.members:
-            jp_expr = (
-                '{resource_member_name}[].{member_name}').format(
-                    resource_member_name=resource_member_name,
-                    member_name=member_name)
-            r = Resource(singular_name, member_name, required_members,
-                         op_name, jp_expr)
+            jp_expr = f'{resource_member_name}[].{member_name}'
+            r = Resource(
+                singular_name, member_name, required_members, op_name, jp_expr
+            )
             resources.append(r)
         return resources
 
-    def _resource_from_string(self, op_name, resource_member_name,
-                              required_members):
+    def _resource_from_string(
+        self, op_name, resource_member_name, required_members
+    ):
         op_with_prefix_removed = self._remove_verb_prefix(op_name)
-        singular_name = self._singularize.make_singular(
-            op_with_prefix_removed)
+        singular_name = self._singularize.make_singular(op_with_prefix_removed)
         singular_member_name = self._singularize.make_singular(
-            resource_member_name)
-        r = Resource(singular_name, singular_member_name, required_members,
-                     op_name,
-                     '{resource_member_name}[]'.format(
-                         resource_member_name=resource_member_name))
+            resource_member_name
+        )
+        r = Resource(
+            singular_name,
+            singular_member_name,
+            required_members,
+            op_name,
+            f'{resource_member_name}[]',
+        )
         return r
 
     def _remove_verb_prefix(self, op_name):
         for prefix in self._RESOURCE_VERB_PREFIX:
             # 'ListResources' -> 'Resources'
             if op_name.lower().startswith(prefix):
-                op_with_prefix_removed = op_name[len(prefix):]
+                op_with_prefix_removed = op_name[len(prefix) :]
                 return op_with_prefix_removed
 
     def _prune_resource_identifiers(self, all_resources, all_operations):
         used_identifiers = self._get_identifiers_referenced_by_operations(
-            all_operations)
+            all_operations
+        )
         for resource, resource_data in list(all_resources.items()):
             identifiers = resource_data['resourceIdentifier']
             known_ids_for_resource = used_identifiers.get(resource, set())
@@ -249,7 +281,8 @@ class ServerCompletionHeuristic(object):
         used_identifiers = {}
         for completion in self._all_completions(operations):
             used_identifiers.setdefault(completion['resourceName'], set()).add(
-                completion['resourceIdentifier'])
+                completion['resourceIdentifier']
+            )
         return used_identifiers
 
     def _all_completions(self, operations):
@@ -259,7 +292,7 @@ class ServerCompletionHeuristic(object):
                     yield completion
 
 
-class BasicSingularize(object):
+class BasicSingularize:
     """Simple implementation of making a word singular.
 
     Where possible, you should use nltk.stem.WordNetLemmatizer.
diff -pruN 2.23.6-1/awscli/autocomplete/completer.py 2.31.35-1/awscli/autocomplete/completer.py
--- 2.23.6-1/awscli/autocomplete/completer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/completer.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,13 +12,14 @@
 # language governing permissions and limitations under the License.
 
 
-class AutoCompleter(object):
+class AutoCompleter:
     """Main auto-completer object for the AWS CLI.
 
     This object delegates to concrete completers that can perform
     completions for specific cases (e.g model-based completions,
     server-side completions, etc).
     """
+
     def __init__(self, parser, completers):
         """
 
@@ -47,15 +48,23 @@ class AutoCompleter(object):
         return []
 
 
-class CompletionResult(object):
+class CompletionResult:
     """A data object for a single completion result.
 
     In addition to storing the completion string, this object also
     stores metadata about the completion.
 
     """
-    def __init__(self, name, starting_index=0, required=False,
-                 cli_type_name='', help_text='', display_text=None):
+
+    def __init__(
+        self,
+        name,
+        starting_index=0,
+        required=False,
+        cli_type_name='',
+        help_text='',
+        display_text=None,
+    ):
         self.name = name
         self.starting_index = starting_index
         self.required = required
@@ -65,20 +74,25 @@ class CompletionResult(object):
 
     def __eq__(self, other):
         return (
-            isinstance(other, self.__class__) and
-            self.name == other.name and
-            self.starting_index == other.starting_index and
-            self.display_text == other.display_text
+            isinstance(other, self.__class__)
+            and self.name == other.name
+            and self.starting_index == other.starting_index
+            and self.display_text == other.display_text
         )
 
     def __repr__(self):
-        return '%s(%s, %s, %s, %s, %s, %s)' % (self.__class__.__name__, self.name,
-                                           self.starting_index, self.required,
-                                           self.cli_type_name, self.help_text,
-                                           self.display_text)
+        return '%s(%s, %s, %s, %s, %s, %s)' % (
+            self.__class__.__name__,
+            self.name,
+            self.starting_index,
+            self.required,
+            self.cli_type_name,
+            self.help_text,
+            self.display_text,
+        )
 
 
-class BaseCompleter(object):
+class BaseCompleter:
     def complete(self, parsed):
         """Attempt to autocomplete parsed on parsed result.
 
diff -pruN 2.23.6-1/awscli/autocomplete/custom.py 2.31.35-1/awscli/autocomplete/custom.py
--- 2.23.6-1/awscli/autocomplete/custom.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/custom.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.autocomplete.serverside.custom_completers.ddb.autocomplete import add_ddb_completers
-from awscli.autocomplete.serverside.custom_completers.logs.autocomplete import add_log_completers
+from awscli.autocomplete.serverside.custom_completers.ddb.autocomplete import (
+    add_ddb_completers,
+)
+from awscli.autocomplete.serverside.custom_completers.logs.autocomplete import (
+    add_log_completers,
+)
 
 
 def get_custom_completers():
diff -pruN 2.23.6-1/awscli/autocomplete/db.py 2.31.35-1/awscli/autocomplete/db.py
--- 2.23.6-1/awscli/autocomplete/db.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/db.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,9 @@
-import os
 import logging
+import os
 import sqlite3
 
 from awscli import __version__ as cli_version
 
-
 LOG = logging.getLogger(__name__)
 
 # We may eventually include a pre-generated version of this index as part
@@ -14,7 +13,8 @@ INDEX_DIR = os.path.expanduser(os.path.j
 INDEX_FILE = os.path.join(INDEX_DIR, '%s.index' % cli_version)
 BUILTIN_INDEX_FILE = os.path.join(
     os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
-    'data', 'ac.index'
+    'data',
+    'ac.index',
 )
 
 
@@ -22,7 +22,7 @@ BUILTIN_INDEX_FILE = os.path.join(
 # I'd like to reuse code, but we also have the contraint that we don't
 # want to import anything outside of awscli.autocomplete to ensure
 # our startup time is as minimal as possible.
-class DatabaseConnection(object):
+class DatabaseConnection:
     _JOURNAL_MODE_OFF = 'PRAGMA journal_mode=OFF'
 
     def __init__(self, db_filename=None):
@@ -34,10 +34,7 @@ class DatabaseConnection(object):
     @property
     def _connection(self):
         if self._db_conn is None:
-            kwargs = {
-                'check_same_thread': False,
-                'isolation_level': None
-            }
+            kwargs = {'check_same_thread': False, 'isolation_level': None}
             if self._db_filename.startswith('file::memory:'):
                 # This statement was added because old versions of sqlite
                 # don't support 'uri' but we use it for tests and because
diff -pruN 2.23.6-1/awscli/autocomplete/filters.py 2.31.35-1/awscli/autocomplete/filters.py
--- 2.23.6-1/awscli/autocomplete/filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,26 +37,29 @@ def fuzzy_filter(prefix, completions):
             matches = list(regex.finditer(name))
             if matches:
                 # Prefer the match, closest to the left, then shortest.
-                best = min(matches, key=lambda m: (m.start(),
-                                                   len(m.group(1))))
-                fuzzy_matches.append(_FuzzyMatch(
-                    len(best.group(1)),
-                    best.start(),
-                    completion)
+                best = min(matches, key=lambda m: (m.start(), len(m.group(1))))
+                fuzzy_matches.append(
+                    _FuzzyMatch(len(best.group(1)), best.start(), completion)
                 )
-        return [x for _, _, x in sorted(
-                    fuzzy_matches,
-                    key=lambda match: (
-                        match.match_length, match.start_pos,
-                        match.completion.display_text,
-                        match.completion.name)
-                )]
+        return [
+            x
+            for _, _, x in sorted(
+                fuzzy_matches,
+                key=lambda match: (
+                    match.match_length,
+                    match.start_pos,
+                    match.completion.display_text,
+                    match.completion.name,
+                ),
+            )
+        ]
     return completions
 
 
 def startswith_filter(prefix, completions):
     return [
-        completion for completion in completions
+        completion
+        for completion in completions
         if (completion.display_text or completion.name).startswith(prefix)
     ]
 
diff -pruN 2.23.6-1/awscli/autocomplete/generator.py 2.31.35-1/awscli/autocomplete/generator.py
--- 2.23.6-1/awscli/autocomplete/generator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/generator.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """Generates auto completion index."""
+
 import os
 
+from awscli import clidriver
+from awscli.autocomplete import db
 from awscli.autocomplete.local import indexer
 from awscli.autocomplete.serverside.indexer import APICallIndexer
-from awscli.autocomplete import db
-from awscli import clidriver
 
 
 def generate_index(filename):
@@ -55,7 +56,7 @@ def _do_generate_index(filename):
         db_connection.close()
 
 
-class IndexGenerator(object):
+class IndexGenerator:
     """Generates auto completion index.
 
     This will generate an auto completion index for all the low level
@@ -64,6 +65,7 @@ class IndexGenerator(object):
     indices.
 
     """
+
     def __init__(self, indexers):
         self._indexers = indexers
 
diff -pruN 2.23.6-1/awscli/autocomplete/local/basic.py 2.31.35-1/awscli/autocomplete/local/basic.py
--- 2.23.6-1/awscli/autocomplete/local/basic.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/local/basic.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,9 @@
 import os
 import re
 
-from awscli.autocomplete.completer import BaseCompleter
-from awscli.autocomplete.completer import CompletionResult
-from awscli.autocomplete.filters import startswith_filter
 from awscli.autocomplete import LazyClientCreator
+from awscli.autocomplete.completer import BaseCompleter, CompletionResult
+from awscli.autocomplete.filters import startswith_filter
 
 
 def strip_html_tags_and_newlines(text):
@@ -25,8 +24,12 @@ def strip_html_tags_and_newlines(text):
 
 
 class ProfileCompleter(BaseCompleter):
-    def __init__(self, session=None, response_filter=startswith_filter,
-                 session_creator=None):
+    def __init__(
+        self,
+        session=None,
+        response_filter=startswith_filter,
+        session_creator=None,
+    ):
         self._session = session
         self._filter = response_filter
         self._session_creator = session_creator
@@ -34,15 +37,17 @@ class ProfileCompleter(BaseCompleter):
             self._session_creator = LazyClientCreator()
 
     def complete(self, parsed):
-        if parsed.current_param == 'profile' \
-                and parsed.current_fragment is not None:
+        if (
+            parsed.current_param == 'profile'
+            and parsed.current_fragment is not None
+        ):
             return self._filter(parsed.current_fragment, self._get_profiles())
 
     def _get_profiles(self):
         return map(
             lambda x: CompletionResult(name=x),
-            self._get_session().available_profiles
-         )
+            self._get_session().available_profiles,
+        )
 
     def _get_session(self):
         if self._session is None:
@@ -51,8 +56,12 @@ class ProfileCompleter(BaseCompleter):
 
 
 class RegionCompleter(BaseCompleter):
-    def __init__(self, session=None, response_filter=startswith_filter,
-                 session_creator=None):
+    def __init__(
+        self,
+        session=None,
+        response_filter=startswith_filter,
+        session_creator=None,
+    ):
         self._session = session
         self._filter = response_filter
         self._session_creator = session_creator
@@ -60,27 +69,28 @@ class RegionCompleter(BaseCompleter):
             self._session_creator = LazyClientCreator()
 
     def complete(self, parsed):
-        if parsed.current_param == 'region' \
-                and parsed.current_fragment is not None:
+        if (
+            parsed.current_param == 'region'
+            and parsed.current_fragment is not None
+        ):
             if len(parsed.lineage) > 1:
                 service_name = parsed.lineage[1]
             else:
                 service_name = 'ec2'
-            return self._filter(parsed.current_fragment,
-                                self._get_region_completions(service_name))
+            return self._filter(
+                parsed.current_fragment,
+                self._get_region_completions(service_name),
+            )
 
     def _get_region_completions(self, service_name):
         return map(
-            lambda x: CompletionResult(name=x),
-            self._get_regions(service_name)
+            lambda x: CompletionResult(name=x), self._get_regions(service_name)
         )
 
     def _get_regions(self, service_name):
         if self._session is None:
             self._session = self._session_creator.create_session()
-        return self._session.get_available_regions(
-                service_name=service_name
-            )
+        return self._session.get_available_regions(service_name=service_name)
 
 
 class FilePathCompleter(BaseCompleter):
@@ -92,16 +102,19 @@ class FilePathCompleter(BaseCompleter):
     def path_completer(self):
         if self._path_completer is None:
             from prompt_toolkit.completion import PathCompleter
+
             self._path_completer = PathCompleter(expanduser=True)
         return self._path_completer
 
     def complete(self, parsed):
-        if parsed.current_fragment and \
-                parsed.current_fragment.startswith(('file://', 'fileb://')):
+        if parsed.current_fragment and parsed.current_fragment.startswith(
+            ('file://', 'fileb://')
+        ):
             from prompt_toolkit.document import Document
+
             for prefix in ['file://', 'fileb://']:
                 if parsed.current_fragment.startswith(prefix):
-                    filename_part = parsed.current_fragment[len(prefix):]
+                    filename_part = parsed.current_fragment[len(prefix) :]
                     break
             # PathCompleter makes really strange suggestions for lonely ~
             # "username/", so in this case we handle it by ourselves
@@ -110,29 +123,32 @@ class FilePathCompleter(BaseCompleter):
             dirname = os.path.dirname(filename_part)
             if dirname and dirname != os.sep:
                 dirname = f'{dirname}{os.sep}'
-            document = Document(
-                text=dirname,
-                cursor_position=len(dirname))
+            document = Document(text=dirname, cursor_position=len(dirname))
             completions = self.path_completer.get_completions(document, None)
             results = [
                 CompletionResult(
                     f'{prefix}'
                     f'{os.path.join(dirname, completion.display[0][1])}',
-                    display_text=completion.display[0][1])
-                for completion in completions]
+                    display_text=completion.display[0][1],
+                )
+                for completion in completions
+            ]
             return self._filter(os.path.basename(filename_part), results)
 
 
 class ModelIndexCompleter(BaseCompleter):
-    def __init__(self, index, cli_driver_fetcher=None,
-                 response_filter=startswith_filter):
+    def __init__(
+        self, index, cli_driver_fetcher=None, response_filter=startswith_filter
+    ):
         self._index = index
         self._cli_driver_fetcher = cli_driver_fetcher
         self._filter = response_filter
 
     def complete(self, parsed):
-        are_unparsed_items_paths = [bool(re.search('[./\\\\:]|(--)', item))
-                                    for item in parsed.unparsed_items]
+        are_unparsed_items_paths = [
+            bool(re.search('[./\\\\:]|(--)', item))
+            for item in parsed.unparsed_items
+        ]
         if parsed.unparsed_items and all(are_unparsed_items_paths):
             # If all the unparsed items are file paths, then we auto-complete
             # options for the current fragment. This is to provide
@@ -146,11 +162,15 @@ class ModelIndexCompleter(BaseCompleter)
             # instead.
             if not parsed.current_fragment:
                 parsed.current_fragment = parsed.current_command
-            return self._filter(parsed.current_fragment,
-                                self._complete_options(parsed))
+            return self._filter(
+                parsed.current_fragment, self._complete_options(parsed)
+            )
 
-        elif parsed.unparsed_items or parsed.current_fragment is None or \
-                parsed.current_param:
+        elif (
+            parsed.unparsed_items
+            or parsed.current_fragment is None
+            or parsed.current_param
+        ):
             # If there's ever any unparsed items, then the parser
             # encountered something it didn't understand.  We won't
             # attempt to auto-complete anything here.
@@ -171,17 +191,18 @@ class ModelIndexCompleter(BaseCompleter)
             # more commands to complete.
             commands = self._complete_command(parsed)
             if not commands:
-                return self._filter(parsed.current_fragment,
-                                    self._complete_options(parsed))
+                return self._filter(
+                    parsed.current_fragment, self._complete_options(parsed)
+                )
             return self._filter(parsed.current_fragment, commands)
 
     def _complete_command(self, parsed):
         lineage = parsed.lineage + [parsed.current_command]
         offset = -len(parsed.current_fragment)
-        result = [CompletionResult(name,
-                                   help_text=full_name,
-                                   starting_index=offset)
-                  for name, full_name in self._index.commands_with_full_name(lineage)]
+        result = [
+            CompletionResult(name, help_text=full_name, starting_index=offset)
+            for name, full_name in self._index.commands_with_full_name(lineage)
+        ]
         return result
 
     def _outfile_filter(self, completion):
@@ -194,17 +215,19 @@ class ModelIndexCompleter(BaseCompleter)
         # '--endpoint' -> 'endpoint'
         offset = -len(parsed.current_fragment)
         is_in_global_scope = (
-                parsed.lineage == [] and
-                parsed.current_command == 'aws'
+            parsed.lineage == [] and parsed.current_command == 'aws'
         )
         arg_names = self._index.arg_names(
-            lineage=parsed.lineage, command_name=parsed.current_command)
+            lineage=parsed.lineage, command_name=parsed.current_command
+        )
         results = []
         if not is_in_global_scope:
             for arg_name in arg_names:
                 arg_data = self._index.get_argument_data(
                     lineage=parsed.lineage,
-                    command_name=parsed.current_command, arg_name=arg_name)
+                    command_name=parsed.current_command,
+                    arg_name=arg_name,
+                )
                 help_text = None
                 if self._cli_driver_fetcher:
                     help_text = strip_html_tags_and_newlines(
@@ -212,20 +235,25 @@ class ModelIndexCompleter(BaseCompleter)
                             parsed.lineage, parsed.current_command, arg_name
                         )
                     )
-                results.append(self._outfile_filter(
-                                    CompletionResult(
-                                        '--%s' % arg_name,
-                                        starting_index=offset,
-                                        required=arg_data.required,
-                                        cli_type_name=arg_data.type_name,
-                                        help_text=help_text)
-                                    )
+                results.append(
+                    self._outfile_filter(
+                        CompletionResult(
+                            '--%s' % arg_name,
+                            starting_index=offset,
+                            required=arg_data.required,
+                            cli_type_name=arg_data.type_name,
+                            help_text=help_text,
+                        )
+                    )
                 )
         # Global params apply to any scope
         self._inject_global_params(parsed, results)
-        return [result for result in results
-                if result.name.strip('--') not in (list(parsed.parsed_params) +
-                                                   list(parsed.global_params))]
+        return [
+            result
+            for result in results
+            if result.name.strip('--')
+            not in (list(parsed.parsed_params) + list(parsed.global_params))
+        ]
 
     def _inject_global_params(self, parsed, results):
         offset = -len(parsed.current_fragment)
@@ -240,31 +268,27 @@ class ModelIndexCompleter(BaseCompleter)
                     )
                 )
             global_param_completions.append(
-                CompletionResult('--%s' % arg_name,
-                                 starting_index=offset,
-                                 required=False,
-                                 cli_type_name=type_name,
-                                 help_text=help_text)
+                CompletionResult(
+                    '--%s' % arg_name,
+                    starting_index=offset,
+                    required=False,
+                    cli_type_name=type_name,
+                    help_text=help_text,
+                )
             )
         results.extend(global_param_completions)
 
 
 class ShorthandCompleter(BaseCompleter):
-    _PARENS = {
-        "[": "]",
-        "{": "}"
-    }
+    _PARENS = {"[": "]", "{": "}"}
     _DUMMY_KEY_VALUE = 'cli_placeholder_for_key_value_replacement'
     _DUMMY_VALUE = 'cli_placeholder_for_value_replacement'
     _DUMMY_EQ_VALUE = 'cli_placeholder_for_key_eq_replacement'
-    _VALUE_PREFIXES = {
-        'structure': '{',
-        'list': '[',
-        'map': '{'
-    }
+    _VALUE_PREFIXES = {'structure': '{', 'list': '[', 'map': '{'}
 
-    def __init__(self, cli_driver_fetcher=None,
-                 response_filter=startswith_filter):
+    def __init__(
+        self, cli_driver_fetcher=None, response_filter=startswith_filter
+    ):
         self._filter = response_filter
         self._cli_driver_fetcher = cli_driver_fetcher
         self._shorthand_parser = None
@@ -273,6 +297,7 @@ class ShorthandCompleter(BaseCompleter):
     def shorthand_parser(self):
         if self._shorthand_parser is None:
             from awscli.shorthand import ShorthandParser
+
             self._shorthand_parser = ShorthandParser()
         return self._shorthand_parser
 
@@ -284,7 +309,8 @@ class ShorthandCompleter(BaseCompleter):
             )
             if arg_model is None:
                 results = self._get_prompt_for_global_arg(
-                    parsed.current_param, parsed.current_fragment)
+                    parsed.current_param, parsed.current_fragment
+                )
                 return results
             parsed_input = self._parse_fragment(parsed.current_fragment)
             if parsed_input is not None:
@@ -306,8 +332,10 @@ class ShorthandCompleter(BaseCompleter):
         if choices and prefix is not None:
             results = self._filter(
                 prefix,
-                [CompletionResult(prefix, display_text=choice)
-                 for choice in choices]
+                [
+                    CompletionResult(prefix, display_text=choice)
+                    for choice in choices
+                ],
             )
             return self._set_results_name(results, prefix)
 
@@ -316,7 +344,7 @@ class ShorthandCompleter(BaseCompleter):
             name_part_len = len(fragment) - len(result.name)
             result.name = "%s%s" % (
                 fragment[:name_part_len],
-                result.display_text
+                result.display_text,
             )
         return results
 
@@ -352,6 +380,7 @@ class ShorthandCompleter(BaseCompleter):
         # and make one more attempt
         # --option foo={bar -> foo={bar=DUMMY_EQ_VALUE
         from awscli.shorthand import ShorthandParseError
+
         if fragment is None:
             return None
         if fragment == '':
@@ -369,7 +398,8 @@ class ShorthandCompleter(BaseCompleter):
         except ShorthandParseError:
             if attempt == 1:
                 return self._parse_fragment(
-                    f'{fragment}={self._DUMMY_EQ_VALUE}', attempt + 1)
+                    f'{fragment}={self._DUMMY_EQ_VALUE}', attempt + 1
+                )
         # if we get here it means that we can't make it parsable and can't
         # suggest anything so the only solution is to wait till user enter more
 
@@ -423,7 +453,7 @@ class ShorthandCompleter(BaseCompleter):
         if close_brackets:
             return CompletionResult(
                 f'{fragment}{close_brackets}',
-                display_text='Autoclose brackets'
+                display_text='Autoclose brackets',
             )
 
     def _get_prompt_for_string(self, arg_model, parsed_input):
@@ -437,18 +467,26 @@ class ShorthandCompleter(BaseCompleter):
                 prefix = list(prefix.keys())[0]
             if prefix == self._DUMMY_VALUE:
                 prefix = ''
-            return self._filter(prefix,
-                                [CompletionResult(prefix, display_text=enum)
-                                 for enum in arg_model.enum])
+            return self._filter(
+                prefix,
+                [
+                    CompletionResult(prefix, display_text=enum)
+                    for enum in arg_model.enum
+                ],
+            )
 
     def _get_prompt_for_boolean(self, arg_model, parsed_input):
         all_results = ['true', 'false']
         prefix = parsed_input
         if prefix == self._DUMMY_VALUE:
             prefix = ''
-        return self._filter(prefix,
-                            [CompletionResult(prefix, display_text=result)
-                             for result in all_results])
+        return self._filter(
+            prefix,
+            [
+                CompletionResult(prefix, display_text=result)
+                for result in all_results
+            ],
+        )
 
     def _get_prompt_for_list(self, arg_model, parsed_input):
         # we have two way we can enter lists:
@@ -481,13 +519,14 @@ class ShorthandCompleter(BaseCompleter):
                 # key exists but we don't have such key in model
                 return None
             return self._get_completion(
-                arg_model.members[last_key], last_value)
+                arg_model.members[last_key], last_value
+            )
         entered_keys = set(parsed_input) - set([last_key])
         return self._get_struct_keys_completions(
-            arg_model, entered_keys, last_key)
+            arg_model, entered_keys, last_key
+        )
 
-    def _get_struct_keys_completions(self, arg_model, entered_keys,
-                                     last_key):
+    def _get_struct_keys_completions(self, arg_model, entered_keys, last_key):
         # get suggestions for the structure keys, as CompletionResult.name
         # we return only part of the suggestion that has not been entered yet
         results = []
@@ -495,22 +534,25 @@ class ShorthandCompleter(BaseCompleter):
             if member_name not in entered_keys:
                 display_text = '%s=%s' % (
                     member_name,
-                    self._VALUE_PREFIXES.get(member.type_name, '')
+                    self._VALUE_PREFIXES.get(member.type_name, ''),
                 )
-                results.append(CompletionResult(
-                    last_key,
-                    help_text=strip_html_tags_and_newlines(member.documentation),
-                    cli_type_name=member.type_name,
-                    display_text=display_text
+                results.append(
+                    CompletionResult(
+                        last_key,
+                        help_text=strip_html_tags_and_newlines(
+                            member.documentation
+                        ),
+                        cli_type_name=member.type_name,
+                        display_text=display_text,
                     )
                 )
         return self._filter(last_key, results)
 
 
 class QueryCompleter(BaseCompleter):
-
-    def __init__(self, cli_driver_fetcher=None,
-                 response_filter=startswith_filter):
+    def __init__(
+        self, cli_driver_fetcher=None, response_filter=startswith_filter
+    ):
         self._filter = response_filter
         self._cli_driver_fetcher = cli_driver_fetcher
         self._argument_generator = None
@@ -520,6 +562,7 @@ class QueryCompleter(BaseCompleter):
     def jmespath(self):
         if self._jmespath is None:
             import jmespath
+
             self._jmespath = jmespath
         return self._jmespath
 
@@ -527,19 +570,24 @@ class QueryCompleter(BaseCompleter):
     def argument_generator(self):
         if self._argument_generator is None:
             from botocore.utils import ArgumentGenerator
+
             self._argument_generator = ArgumentGenerator
         return self._argument_generator
 
     def complete(self, parsed):
         if self._cli_driver_fetcher is None:
             return
-        if parsed.current_param == 'query' and \
-                parsed.current_fragment is not None:
+        if (
+            parsed.current_param == 'query'
+            and parsed.current_fragment is not None
+        ):
             operation_model = self._cli_driver_fetcher.get_operation_model(
-                parsed.lineage, parsed.current_command)
+                parsed.lineage, parsed.current_command
+            )
             if operation_model:
-                return self._get_completions(parsed.current_fragment,
-                                             operation_model)
+                return self._get_completions(
+                    parsed.current_fragment, operation_model
+                )
 
     def _get_query_and_last_key(self, query):
         # Because output example has only 1 element in any list if
@@ -552,14 +600,16 @@ class QueryCompleter(BaseCompleter):
     def _create_completions(self, results, last_key, fragment):
         completions = self._filter(
             last_key,
-            [CompletionResult(last_key, display_text=result)
-             for result in results]
+            [
+                CompletionResult(last_key, display_text=result)
+                for result in results
+            ],
         )
         for completion in completions:
             name_part_len = len(fragment) - len(completion.name)
             completion.name = "%s%s" % (
                 fragment[:name_part_len],
-                completion.display_text
+                completion.display_text,
             )
         return completions
 
@@ -567,18 +617,19 @@ class QueryCompleter(BaseCompleter):
         is_last_child_field = False
         is_field = expression.parsed['type'] == 'field'
         if expression.parsed['children']:
-            is_last_child_field = \
+            is_last_child_field = (
                 expression.parsed['children'][-1]['type'] == 'field'
+            )
         return is_field or is_last_child_field
 
     def _get_completions(self, fragment, operation_model):
         results = []
         last_key = fragment
         if operation_model.output_shape:
-            argument_generator = self.argument_generator(
-                use_member_names=True)
+            argument_generator = self.argument_generator(use_member_names=True)
             response = argument_generator.generate_skeleton(
-                operation_model.output_shape)
+                operation_model.output_shape
+            )
             if '.' not in fragment:
                 if isinstance(response, dict):
                     results = response.keys()
@@ -587,8 +638,11 @@ class QueryCompleter(BaseCompleter):
                     query, last_key = self._get_query_and_last_key(fragment)
                     expression = self.jmespath.compile(query)
                     parsed_response = expression.search(response)
-                    if parsed_response and isinstance(parsed_response, list) \
-                            and not self._is_field_expression(expression):
+                    if (
+                        parsed_response
+                        and isinstance(parsed_response, list)
+                        and not self._is_field_expression(expression)
+                    ):
                         parsed_response = parsed_response[0]
                     if isinstance(parsed_response, dict):
                         results = parsed_response.keys()
diff -pruN 2.23.6-1/awscli/autocomplete/local/fetcher.py 2.31.35-1/awscli/autocomplete/local/fetcher.py
--- 2.23.6-1/awscli/autocomplete/local/fetcher.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/local/fetcher.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,6 @@
 
 
 class CliDriverFetcher:
-
     def __init__(self, cli_driver):
         self._cli_driver = cli_driver
 
@@ -35,12 +34,18 @@ class CliDriverFetcher:
             return command.create_help_command().obj
 
     def get_argument_model(self, lineage, current_command, arg_name):
-        return getattr(self._get_argument(
-            lineage, current_command, arg_name), 'argument_model', None)
+        return getattr(
+            self._get_argument(lineage, current_command, arg_name),
+            'argument_model',
+            None,
+        )
 
     def get_argument_documentation(self, lineage, current_command, arg_name):
-        return getattr(self._get_argument(
-            lineage, current_command, arg_name), 'documentation', '')
+        return getattr(
+            self._get_argument(lineage, current_command, arg_name),
+            'documentation',
+            '',
+        )
 
     def get_global_arg_documentation(self, arg_name):
         return self._cli_driver.arg_table[arg_name].documentation
diff -pruN 2.23.6-1/awscli/autocomplete/local/indexer.py 2.31.35-1/awscli/autocomplete/local/indexer.py
--- 2.23.6-1/awscli/autocomplete/local/indexer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/local/indexer.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,18 +18,18 @@ def create_model_indexer(filename):
     return index
 
 
-class ModelIndexer(object):
+class ModelIndexer:
     # TODO add full names to custom commands to get rid of this map
     _HIGH_LEVEL_SERVICE_FULL_NAMES = {
         's3': 'High level S3 commands',
-        'ddb': 'High level DynamoDB commands'
+        'ddb': 'High level DynamoDB commands',
     }
 
     _NON_SERVICE_COMMANDS = ['configure', 'history', 'cli-dev']
 
     _CREATE_CMD_TABLE = """\
         CREATE TABLE IF NOT EXISTS command_table (
-          command TEXT, 
+          command TEXT,
           full_name TEXT,
           parent TEXT REFERENCES command_table,
           PRIMARY KEY (command, parent)
@@ -51,12 +51,12 @@ class ModelIndexer(object):
     """
 
     _CREATE_COMMAND_TABLE_INDEX = """\
-        CREATE INDEX parent_index 
+        CREATE INDEX parent_index
             ON command_table(parent);
     """
 
     _CREATE_PARAM_TABLE_INDEX = """\
-        CREATE INDEX parent_command_index 
+        CREATE INDEX parent_command_index
             ON param_table(parent, command);
     """
 
@@ -74,10 +74,12 @@ class ModelIndexer(object):
         )
         help_command_table = clidriver.create_help_command().command_table
         command_table = clidriver.subcommand_table
-        self._generate_arg_index(command=parent, parent='',
-                                 arg_table=clidriver.arg_table)
-        self._generate_command_index(command_table, parent=parent,
-                                     help_command_table=help_command_table)
+        self._generate_arg_index(
+            command=parent, parent='', arg_table=clidriver.arg_table
+        )
+        self._generate_command_index(
+            command_table, parent=parent, help_command_table=help_command_table
+        )
 
         self._generate_table_indexes()
 
@@ -95,10 +97,13 @@ class ModelIndexer(object):
                 'required)'
                 ' VALUES (:argname, :type_name, :command, :parent, :nargs, '
                 '         :positional_arg, :required)',
-                argname=name, type_name=value.cli_type_name,
-                command=command, parent=parent,
-                nargs=value.nargs, positional_arg=value.positional_arg,
-                required=required
+                argname=name,
+                type_name=value.cli_type_name,
+                command=command,
+                parent=parent,
+                nargs=value.nargs,
+                positional_arg=value.positional_arg,
+                required=required,
             )
 
     def _get_service_full_name(self, name, help_command_table):
@@ -109,19 +114,24 @@ class ModelIndexer(object):
             if service:
                 return service.service_model.metadata['serviceFullName']
 
-    def _generate_command_index(self, command_table,
-                                parent, help_command_table=None):
+    def _generate_command_index(
+        self, command_table, parent, help_command_table=None
+    ):
         for name, command in command_table.items():
             full_name = self._get_service_full_name(name, help_command_table)
             self._db_connection.execute(
                 'INSERT INTO command_table (command, parent, full_name) '
                 'VALUES (:command, :parent, :full_name)',
-                command=name, parent=parent, full_name=full_name
+                command=name,
+                parent=parent,
+                full_name=full_name,
+            )
+            self._generate_arg_index(
+                command=name, parent=parent, arg_table=command.arg_table
+            )
+            self._generate_command_index(
+                command.subcommand_table, parent='%s.%s' % (parent, name)
             )
-            self._generate_arg_index(command=name, parent=parent,
-                                     arg_table=command.arg_table)
-            self._generate_command_index(command.subcommand_table,
-                                         parent='%s.%s' % (parent, name))
 
     def _generate_table_indexes(self):
         self._db_connection.execute(self._CREATE_COMMAND_TABLE_INDEX)
diff -pruN 2.23.6-1/awscli/autocomplete/local/model.py 2.31.35-1/awscli/autocomplete/local/model.py
--- 2.23.6-1/awscli/autocomplete/local/model.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/local/model.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,9 @@ This provides autocompletion based on in
 in the `service-2.json` files.
 
 """
+
 from collections import namedtuple
+
 from awscli.autocomplete import db
 
 # This module and the awscli.autocomplete.db module are imported
@@ -26,12 +28,21 @@ from awscli.autocomplete import db
 # the sqlite3 cache file.
 
 
-CLIArgument = namedtuple('CLIArgument', ['argname', 'type_name',
-                                         'command', 'parent', 'nargs',
-                                         'positional_arg', 'required'])
+CLIArgument = namedtuple(
+    'CLIArgument',
+    [
+        'argname',
+        'type_name',
+        'command',
+        'parent',
+        'nargs',
+        'positional_arg',
+        'required',
+    ],
+)
 
 
-class ModelIndex(object):
+class ModelIndex:
     """Retrieve command/param names through querying an index.
 
     This class provides methods for retrieving valid command
@@ -39,6 +50,7 @@ class ModelIndex(object):
     the model based autocompleter.
 
     """
+
     _COMMAND_NAME_QUERY = """
         SELECT command, full_name FROM command_table
         WHERE parent = :parent
@@ -74,8 +86,7 @@ class ModelIndex(object):
 
     def _get_db_connection(self):
         if self._db_connection is None:
-            self._db_connection = db.DatabaseConnection(
-                self._db_filename)
+            self._db_connection = db.DatabaseConnection(self._db_filename)
         return self._db_connection
 
     def command_names(self, lineage):
@@ -118,9 +129,12 @@ class ModelIndex(object):
         """
         db = self._get_db_connection()
         parent = '.'.join(lineage)
-        results = db.execute(self._ARG_NAME_QUERY,
-                             parent=parent, command=command_name,
-                             positional_arg=positional_arg)
+        results = db.execute(
+            self._ARG_NAME_QUERY,
+            parent=parent,
+            command=command_name,
+            positional_arg=positional_arg,
+        )
         return [row[0] for row in results]
 
     def get_argument_data(self, lineage, command_name, arg_name):
@@ -141,8 +155,12 @@ class ModelIndex(object):
         """
         db = self._get_db_connection()
         parent = '.'.join(lineage)
-        results = db.execute(self._ARG_DATA_QUERY, parent=parent,
-                             command=command_name, argname=arg_name)
+        results = db.execute(
+            self._ARG_DATA_QUERY,
+            parent=parent,
+            command=command_name,
+            argname=arg_name,
+        )
         match = results.fetchone()
         if match is not None:
             return CLIArgument(*match)
diff -pruN 2.23.6-1/awscli/autocomplete/main.py 2.31.35-1/awscli/autocomplete/main.py
--- 2.23.6-1/awscli/autocomplete/main.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/main.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,14 +16,16 @@
 # everytime a user hits <TAB>.  Try to avoid any expensive module level
 # work or really heavyweight imports.  Prefer to lazy load as much as possible.
 
-from awscli.autocomplete import parser, completer, filters
-from awscli.autocomplete.local import model, basic, fetcher
-from awscli.autocomplete import serverside
-from awscli.autocomplete import custom
+from awscli.autocomplete import completer, custom, filters, parser, serverside
+from awscli.autocomplete.local import basic, fetcher, model
 
 
-def create_autocompleter(index_filename=None, custom_completers=None,
-                         driver=None, response_filter=None):
+def create_autocompleter(
+    index_filename=None,
+    custom_completers=None,
+    driver=None,
+    response_filter=None,
+):
     if response_filter is None:
         response_filter = filters.startswith_filter
     if custom_completers is None:
@@ -36,15 +38,19 @@ def create_autocompleter(index_filename=
     completers = [
         basic.RegionCompleter(response_filter=response_filter),
         basic.ProfileCompleter(response_filter=response_filter),
-        basic.ModelIndexCompleter(index, cli_driver_fetcher,
-                                  response_filter=response_filter),
+        basic.ModelIndexCompleter(
+            index, cli_driver_fetcher, response_filter=response_filter
+        ),
         basic.FilePathCompleter(response_filter=response_filter),
         serverside.create_server_side_completer(
-            index_filename, response_filter=response_filter),
-        basic.ShorthandCompleter(cli_driver_fetcher,
-                                 response_filter=response_filter),
-        basic.QueryCompleter(cli_driver_fetcher,
-                             response_filter=response_filter),
+            index_filename, response_filter=response_filter
+        ),
+        basic.ShorthandCompleter(
+            cli_driver_fetcher, response_filter=response_filter
+        ),
+        basic.QueryCompleter(
+            cli_driver_fetcher, response_filter=response_filter
+        ),
     ] + custom_completers
     cli_completer = completer.AutoCompleter(cli_parser, completers)
     return cli_completer
diff -pruN 2.23.6-1/awscli/autocomplete/parser.py 2.31.35-1/awscli/autocomplete/parser.py
--- 2.23.6-1/awscli/autocomplete/parser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/parser.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,17 @@
 WORD_BOUNDARY = ''
 
 
-class ParsedResult(object):
-    def __init__(self, current_command=None, current_param=None,
-                 global_params=None, parsed_params=None,
-                 lineage=None, current_fragment=None, unparsed_items=None):
+class ParsedResult:
+    def __init__(
+        self,
+        current_command=None,
+        current_param=None,
+        global_params=None,
+        parsed_params=None,
+        lineage=None,
+        current_fragment=None,
+        unparsed_items=None,
+    ):
         """
 
         :param current_command: The name of the leaf command; the most
@@ -89,7 +96,7 @@ class ParsedResult(object):
         return self.__dict__ == other.__dict__
 
 
-class ParseState(object):
+class ParseState:
     def __init__(self):
         self._current_command = None
         self.current_param = None
@@ -116,7 +123,7 @@ class ParseState(object):
         return self._lineage + [self.current_command]
 
 
-class CLIParser(object):
+class CLIParser:
     """Parses AWS CLI command.
 
     This is different from the parser used when actually invoking CLI commands
@@ -126,6 +133,7 @@ class CLIParser(object):
     not a general purpose AWS CLI parser.
 
     """
+
     def __init__(self, index, return_first_command_match=False):
         self._index = index
         self._return_first_command_match = return_first_command_match
@@ -149,18 +157,26 @@ class CLIParser(object):
         while remaining_parts:
             current = remaining_parts.pop(0)
             if current.startswith('--'):
-                self._handle_option(current, remaining_parts,
-                                    current_args, global_args, parsed, state)
+                self._handle_option(
+                    current,
+                    remaining_parts,
+                    current_args,
+                    global_args,
+                    parsed,
+                    state,
+                )
             else:
                 current_args = self._handle_positional(
-                    current, state, remaining_parts, parsed)
+                    current, state, remaining_parts, parsed
+                )
         parsed.current_command = state.current_command
         parsed.current_param = state.current_param
         parsed.lineage = state.lineage
         return parsed
 
-    def _consume_value(self, remaining_parts, option_name,
-                       lineage, current_command, state):
+    def _consume_value(
+        self, remaining_parts, option_name, lineage, current_command, state
+    ):
         # We have a special case where a user is trying to complete
         # a value for an option, which is the last fragment of the command,
         # e.g. 'aws ec2 describe-instances --instance-ids '
@@ -205,8 +221,9 @@ class CLIParser(object):
             # an empty list being returned.  This is acceptable
             # for auto-completion purposes.
             value = []
-            while len(remaining_parts) > 0 and \
-                    not remaining_parts == [WORD_BOUNDARY]:
+            while len(remaining_parts) > 0 and not remaining_parts == [
+                WORD_BOUNDARY
+            ]:
                 if remaining_parts[0].startswith('--'):
                     state.current_param = None
                     break
@@ -243,8 +260,15 @@ class CLIParser(object):
             state.current_command = 'aws'
         return state, parts
 
-    def _handle_option(self, current, remaining_parts, current_args,
-                       global_args, parsed, state):
+    def _handle_option(
+        self,
+        current,
+        remaining_parts,
+        current_args,
+        global_args,
+        parsed,
+        state,
+    ):
         if current_args is None:
             # If there are no arguments found for this current scope,
             # it usually indicates we've encounted a command we don't know.
@@ -257,15 +281,21 @@ class CLIParser(object):
         if option_name in global_args:
             state.current_param = option_name
             value = self._consume_value(
-                remaining_parts, option_name, lineage=[],
+                remaining_parts,
+                option_name,
+                lineage=[],
                 state=state,
-                current_command='aws')
+                current_command='aws',
+            )
             parsed.global_params[option_name] = value
         elif option_name in current_args:
             state.current_param = option_name
             value = self._consume_value(
-                remaining_parts, option_name, state.lineage,
-                state.current_command, state=state,
+                remaining_parts,
+                option_name,
+                state.lineage,
+                state.current_command,
+                state=state,
             )
             parsed.parsed_params[option_name] = value
         elif self._is_last_word(remaining_parts, current):
@@ -284,8 +314,10 @@ class CLIParser(object):
         return not remaining_parts and current
 
     def _is_part_of_command(self, current, command_names):
-        return any(command.startswith(current) and command != current
-                   for command in command_names)
+        return any(
+            command.startswith(current) and command != current
+            for command in command_names
+        )
 
     def _is_command_name(self, current, remaining_parts, command_names):
         # If _return_first_command_match is True
@@ -323,16 +355,18 @@ class CLIParser(object):
             state.current_command = current
             # We also need to get the next set of command line options.
             current_args = self._index.arg_names(
-                lineage=state.lineage,
-                command_name=state.current_command)
+                lineage=state.lineage, command_name=state.current_command
+            )
             return current_args
         if not command_names:
             # If there are no more command names check. See if the command
             # has a positional argument. This will require an additional
             # select on the argument index.
             positional_argname = self._get_positional_argname(state)
-        if (positional_argname and
-            positional_argname not in parsed.parsed_params):
+        if (
+            positional_argname
+            and positional_argname not in parsed.parsed_params
+        ):
             # Parse the current string to be a positional argument
             # if the command has the a positional arg and the positional arg
             # has not already been parsed.
@@ -347,8 +381,8 @@ class CLIParser(object):
                 parsed.parsed_params[positional_argname] = current
                 state.current_param = None
             return self._index.arg_names(
-                lineage=state.lineage,
-                command_name=state.current_command)
+                lineage=state.lineage, command_name=state.current_command
+            )
         else:
             if not remaining_parts:
                 # If this is the last chunk of the command line but
@@ -371,7 +405,8 @@ class CLIParser(object):
                     state.current_param = None
                     return self._index.arg_names(
                         lineage=state.lineage,
-                        command_name=state.current_command)
+                        command_name=state.current_command,
+                    )
                 else:
                     # Otherwise this is some command we don't know about
                     # so we add it to the list of unparsed_items.
@@ -382,7 +417,7 @@ class CLIParser(object):
         positional_args = self._index.arg_names(
             lineage=state.lineage,
             command_name=state.current_command,
-            positional_arg=True
+            positional_arg=True,
         )
         if positional_args:
             # We are assuming there is only ever one positional
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/__init__.py 2.31.35-1/awscli/autocomplete/serverside/__init__.py
--- 2.23.6-1/awscli/autocomplete/serverside/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,14 +14,13 @@
 # NOTE: This file is imported whenever a user hits TAB.  There should not
 # be any expensive imports in this file.  If necessary, use lazy imports
 # to ensure we only import heavyweight modules when we know we need them.
-from awscli.autocomplete.serverside import servercomp
-from awscli.autocomplete.serverside import model
 from awscli.autocomplete import db
+from awscli.autocomplete.serverside import model, servercomp
 
 
 def create_server_side_completer(index_filename, response_filter=None):
     return servercomp.ServerSideCompleter(
-        model.DBCompletionLookup(
-            db.DatabaseConnection(index_filename)
-        ),
-        servercomp.LazyClientCreator(), response_filter)
+        model.DBCompletionLookup(db.DatabaseConnection(index_filename)),
+        servercomp.LazyClientCreator(),
+        response_filter,
+    )
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/custom_completers/__init__.py 2.31.35-1/awscli/autocomplete/serverside/custom_completers/__init__.py
--- 2.23.6-1/awscli/autocomplete/serverside/custom_completers/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/custom_completers/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the "license" file accompanying this file. This file is
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/custom_completers/ddb/__init__.py 2.31.35-1/awscli/autocomplete/serverside/custom_completers/ddb/__init__.py
--- 2.23.6-1/awscli/autocomplete/serverside/custom_completers/ddb/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/custom_completers/ddb/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the "license" file accompanying this file. This file is
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/custom_completers/ddb/autocomplete.py 2.31.35-1/awscli/autocomplete/serverside/custom_completers/ddb/autocomplete.py
--- 2.23.6-1/awscli/autocomplete/serverside/custom_completers/ddb/autocomplete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/custom_completers/ddb/autocomplete.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,7 +25,4 @@ class TableNameCompleter(servercomp.Base
     def _get_remote_results(self, parsed):
         client = self._get_client('dynamodb', parsed)
         response = self._invoke_api(client, 'list_tables', {})
-        return [
-            table_name for table_name in response.get('TableNames', [])
-        ]
-
+        return [table_name for table_name in response.get('TableNames', [])]
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/custom_completers/logs/__init__.py 2.31.35-1/awscli/autocomplete/serverside/custom_completers/logs/__init__.py
--- 2.23.6-1/awscli/autocomplete/serverside/custom_completers/logs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/custom_completers/logs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the "license" file accompanying this file. This file is
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/indexer.py 2.31.35-1/awscli/autocomplete/serverside/indexer.py
--- 2.23.6-1/awscli/autocomplete/serverside/indexer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/indexer.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 import json
 
-from botocore.exceptions import UnknownServiceError
 from botocore import xform_name
+from botocore.exceptions import UnknownServiceError
 
 import awscli.clidriver
 from awscli.autocomplete.db import DatabaseConnection
@@ -24,7 +24,7 @@ def create_apicall_indexer(filename):
     return index
 
 
-class APICallIndexer(object):
+class APICallIndexer:
     _CREATE_APICALL_TABLE = """\
         CREATE TABLE IF NOT EXISTS apicall_table (
           apicall_data TEXT,
@@ -79,7 +79,8 @@ class APICallIndexer(object):
         service_name = op_model.service_model.service_name
         try:
             completions = loader.load_service_model(
-                service_name, type_name='completions-1')
+                service_name, type_name='completions-1'
+            )
         except UnknownServiceError:
             return None
         # The completions-1 file is for the entire service.  We need
@@ -96,8 +97,10 @@ class APICallIndexer(object):
                 continue
             # At this point we know there's completion info we need.
             transformed = self._transform_completion_data(
-                completion_for_op[api_casing], completions['resources'],
-                service_name)
+                completion_for_op[api_casing],
+                completions['resources'],
+                service_name,
+            )
             self._insert_into_db(transformed, arg_name, command)
 
     def _insert_into_db(self, transformed, arg_name, command):
@@ -110,8 +113,9 @@ class APICallIndexer(object):
             parent=parent,
         )
 
-    def _transform_completion_data(self, completions_for_op, resources,
-                                   service_name):
+    def _transform_completion_data(
+        self, completions_for_op, resources, service_name
+    ):
         # The completions-1.json data is strictly model based.  That is,
         # it's based entirely on the service API and has no mention of CLI
         # commands, parameters, etc.  This method attempts to map
@@ -133,10 +137,13 @@ class APICallIndexer(object):
         for completion in completions_for_op['completions']:
             resource = resources[completion['resourceName']]
             jp_expr = resource['resourceIdentifier'][
-                completion['resourceIdentifier']]
-            transformed = {'parameters': completion['parameters'],
-                           'service': service_name,
-                           'operation': xform_name(resource['operation']),
-                           'jp_expr': jp_expr}
+                completion['resourceIdentifier']
+            ]
+            transformed = {
+                'parameters': completion['parameters'],
+                'service': service_name,
+                'operation': xform_name(resource['operation']),
+                'jp_expr': jp_expr,
+            }
             completions.append(transformed)
         return {'completions': completions}
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/model.py 2.31.35-1/awscli/autocomplete/serverside/model.py
--- 2.23.6-1/awscli/autocomplete/serverside/model.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/model.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,9 @@
-"""Placeholder module for fleshing out the server side model interface.
+"""Placeholder module for fleshing out the server side model interface."""
 
-"""
 import json
 
 
-class DBCompletionLookup(object):
+class DBCompletionLookup:
     _QUERY = """\
         SELECT apicall_data from apicall_table
         INNER JOIN param_table
@@ -21,8 +20,11 @@ class DBCompletionLookup(object):
     def get_server_completion_data(self, lineage, command_name, param_name):
         parent = '.'.join(lineage)
         results = self._db_connection.execute(
-            self._QUERY, argname=param_name,
-            command=command_name, parent=parent)
+            self._QUERY,
+            argname=param_name,
+            command=command_name,
+            parent=parent,
+        )
         match = results.fetchone()
         if match is not None:
             return json.loads(match[0])
diff -pruN 2.23.6-1/awscli/autocomplete/serverside/servercomp.py 2.31.35-1/awscli/autocomplete/serverside/servercomp.py
--- 2.23.6-1/awscli/autocomplete/serverside/servercomp.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autocomplete/serverside/servercomp.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,16 +12,17 @@
 # language governing permissions and limitations under the License.
 import logging
 
-from awscli.autocomplete.completer import BaseCompleter, CompletionResult
 from awscli.autocomplete import LazyClientCreator
+from awscli.autocomplete.completer import BaseCompleter, CompletionResult
 from awscli.autocomplete.filters import startswith_filter
 
 LOG = logging.getLogger(__name__)
 
 
 class ServerSideCompleter(BaseCompleter):
-    def __init__(self, completion_lookup, client_creator,
-                 response_filter=None):
+    def __init__(
+        self, completion_lookup, client_creator, response_filter=None
+    ):
         self._completion_lookup = completion_lookup
         self._client_creator = client_creator
         self._jmespath = None
@@ -33,6 +34,7 @@ class ServerSideCompleter(BaseCompleter)
     def jmespath(self):
         if self._jmespath is None:
             import jmespath
+
             self._jmespath = jmespath
         return self._jmespath
 
@@ -52,7 +54,9 @@ class ServerSideCompleter(BaseCompleter)
         if not self._on_cli_option_value_fragment(parsed):
             return
         completion_data = self._completion_lookup.get_server_completion_data(
-            parsed.lineage, parsed.current_command, parsed.current_param,
+            parsed.lineage,
+            parsed.current_command,
+            parsed.current_param,
         )
         if completion_data is None:
             return
@@ -62,10 +66,11 @@ class ServerSideCompleter(BaseCompleter)
         # list element.  We'll need to update this once we support completions
         # with a 'parameters' key.
         raw_results = self._retrieve_remote_completion_data(
-            parsed, completion_data['completions'][0])
+            parsed, completion_data['completions'][0]
+        )
         return self._filter(
             parsed.current_fragment,
-            self._convert_to_completion_data(raw_results, parsed)
+            self._convert_to_completion_data(raw_results, parsed),
         )
 
     def _convert_to_completion_data(self, raw_results, parsed):
@@ -81,7 +86,7 @@ class ServerSideCompleter(BaseCompleter)
         return self._client_creator.create_client(
             service_name,
             parsed_region=parsed.global_params.get('region'),
-            parsed_profile=parsed.global_params.get('profile')
+            parsed_profile=parsed.global_params.get('profile'),
         )
 
     def _retrieve_remote_completion_data(self, parsed, completion_data):
@@ -104,8 +109,12 @@ class ServerSideCompleter(BaseCompleter)
         except Exception:
             # We don't want tracebacks to propagate back out to the user
             # so the best we can do is log the exception.
-            LOG.debug("Exception raised when calling %s on client %s",
-                      client, py_name, exc_info=True)
+            LOG.debug(
+                "Exception raised when calling %s on client %s",
+                client,
+                py_name,
+                exc_info=True,
+            )
             return {}
 
     def _map_command_to_api_params(self, parsed, completion_data):
@@ -134,15 +143,16 @@ class BaseCustomServerSideCompleter(Serv
             if remote_result.startswith(parsed.current_fragment):
                 completion_results.append(
                     CompletionResult(
-                        remote_result, -len(parsed.current_fragment))
+                        remote_result, -len(parsed.current_fragment)
+                    )
                 )
         return completion_results
 
     def _is_value_for_param(self, parsed):
         return (
-            parsed.lineage == self._LINEAGE and
-            parsed.current_command in self._COMMAND_NAMES and
-            parsed.current_param == self._PARAM_NAME
+            parsed.lineage == self._LINEAGE
+            and parsed.current_command in self._COMMAND_NAMES
+            and parsed.current_param == self._PARAM_NAME
         )
 
     def _get_remote_results(self, parsed):
diff -pruN 2.23.6-1/awscli/autoprompt/core.py 2.31.35-1/awscli/autoprompt/core.py
--- 2.23.6-1/awscli/autoprompt/core.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/core.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,10 @@
 # language governing permissions and limitations under the License.
 from botocore.exceptions import ProfileNotFound
 
-from awscli.customizations.exceptions import ParamValidationError
-from awscli.autoprompt.prompttoolkit import PromptToolkitPrompter
-from awscli.autocomplete.main import create_autocompleter
 from awscli.autocomplete.filters import fuzzy_filter
+from awscli.autocomplete.main import create_autocompleter
+from awscli.autoprompt.prompttoolkit import PromptToolkitPrompter
+from awscli.customizations.exceptions import ParamValidationError
 from awscli.errorhandler import SilenceParamValidationMsgErrorHandler
 
 
diff -pruN 2.23.6-1/awscli/autoprompt/doc.py 2.31.35-1/awscli/autoprompt/doc.py
--- 2.23.6-1/awscli/autoprompt/doc.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/doc.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import io
+
 from docutils.core import publish_string
 
 from awscli.bcdoc import docevents, textwriter
diff -pruN 2.23.6-1/awscli/autoprompt/factory.py 2.31.35-1/awscli/autoprompt/factory.py
--- 2.23.6-1/awscli/autoprompt/factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,34 +15,34 @@ import os
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.document import Document
 from prompt_toolkit.key_binding import KeyBindings
+from prompt_toolkit.key_binding.bindings.focus import focus_next
 from prompt_toolkit.keys import Keys
-from prompt_toolkit.layout import Float, FloatContainer, HSplit, Window, VSplit
+from prompt_toolkit.layout import Float, FloatContainer, HSplit, VSplit, Window
 from prompt_toolkit.layout.controls import BufferControl
 from prompt_toolkit.layout.dimension import Dimension
-from prompt_toolkit.layout.layout import Layout, ConditionalContainer
+from prompt_toolkit.layout.layout import ConditionalContainer, Layout
 from prompt_toolkit.layout.menus import (
     CompletionsMenu,
     MultiColumnCompletionsMenu,
 )
 from prompt_toolkit.layout.processors import BeforeInput
 from prompt_toolkit.widgets import SearchToolbar, VerticalLine
-from prompt_toolkit.key_binding.bindings.focus import focus_next
 
-from awscli.autoprompt.history import HistoryDriver, HistoryCompleter
-from awscli.autoprompt.widgets import (
-    HelpPanelWidget,
-    ToolbarWidget,
-    DebugPanelWidget,
-    TitleLine,
-)
 from awscli.autoprompt.filters import (
-    is_one_column,
-    is_multi_column,
     doc_section_visible,
-    output_section_visible,
-    input_buffer_has_focus,
     doc_window_has_focus,
+    input_buffer_has_focus,
     is_history_mode,
+    is_multi_column,
+    is_one_column,
+    output_section_visible,
+)
+from awscli.autoprompt.history import HistoryCompleter, HistoryDriver
+from awscli.autoprompt.widgets import (
+    DebugPanelWidget,
+    HelpPanelWidget,
+    TitleLine,
+    ToolbarWidget,
 )
 
 
diff -pruN 2.23.6-1/awscli/autoprompt/history.py 2.31.35-1/awscli/autoprompt/history.py
--- 2.23.6-1/awscli/autoprompt/history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/history.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import logging
 import json
+import logging
 import os
 
-from prompt_toolkit.completion import Completion, Completer
+from prompt_toolkit.completion import Completer, Completion
 from prompt_toolkit.history import FileHistory
 
 from awscli.autocomplete.completer import CompletionResult
 from awscli.autocomplete.filters import fuzzy_filter
 
-
 LOG = logging.getLogger(__name__)
 
 
@@ -33,7 +32,7 @@ class HistoryDriver(FileHistory):
 
     def load_history_strings(self):
         try:
-            with open(self.filename, 'r') as f:
+            with open(self.filename) as f:
                 commands = json.load(f).get('commands', [])
             return reversed(commands)
         except Exception as e:
@@ -46,7 +45,7 @@ class HistoryDriver(FileHistory):
         history = {'version': self.HISTORY_VERSION, 'commands': []}
         try:
             if os.path.exists(self.filename):
-                with open(self.filename, 'r') as f:
+                with open(self.filename) as f:
                     history = json.load(f)
             elif not os.path.exists(os.path.dirname(self.filename)):
                 os.makedirs(os.path.dirname(self.filename))
diff -pruN 2.23.6-1/awscli/autoprompt/logger.py 2.31.35-1/awscli/autoprompt/logger.py
--- 2.23.6-1/awscli/autoprompt/logger.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/logger.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 import logging
 
-from prompt_toolkit.document import Document
 from prompt_toolkit.application import get_app
+from prompt_toolkit.document import Document
 
 
 class PromptToolkitHandler(logging.StreamHandler):
diff -pruN 2.23.6-1/awscli/autoprompt/output.py 2.31.35-1/awscli/autoprompt/output.py
--- 2.23.6-1/awscli/autoprompt/output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/output.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,16 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import argparse
-import logging
 import io
+import logging
 import re
 
 import jmespath
 from botocore.utils import ArgumentGenerator
 
-from awscli.formatter import get_formatter
 from awscli.autocomplete.local.fetcher import CliDriverFetcher
-
+from awscli.formatter import get_formatter
 
 LOG = logging.getLogger(__name__)
 
diff -pruN 2.23.6-1/awscli/autoprompt/prompttoolkit.py 2.31.35-1/awscli/autoprompt/prompttoolkit.py
--- 2.23.6-1/awscli/autoprompt/prompttoolkit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/prompttoolkit.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,21 +13,19 @@
 import logging
 import shlex
 import sys
-from contextlib import nullcontext, contextmanager
+from contextlib import contextmanager, nullcontext
 
 from prompt_toolkit.application import Application
-from prompt_toolkit.completion import Completer, ThreadedCompleter
-from prompt_toolkit.completion import Completion
+from prompt_toolkit.completion import Completer, Completion, ThreadedCompleter
 from prompt_toolkit.document import Document
 
-from awscli.logger import LOG_FORMAT, disable_crt_logging
 from awscli.autocomplete import parser
 from awscli.autocomplete.local import model
 from awscli.autoprompt.doc import DocsGetter
-from awscli.autoprompt.output import OutputGetter
 from awscli.autoprompt.factory import PromptToolkitFactory
 from awscli.autoprompt.logger import PromptToolkitHandler
-
+from awscli.autoprompt.output import OutputGetter
+from awscli.logger import LOG_FORMAT, disable_crt_logging
 
 LOG = logging.getLogger(__name__)
 
diff -pruN 2.23.6-1/awscli/autoprompt/widgets.py 2.31.35-1/awscli/autoprompt/widgets.py
--- 2.23.6-1/awscli/autoprompt/widgets.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/autoprompt/widgets.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,41 +14,41 @@ import os
 from functools import partial
 
 from prompt_toolkit.application import get_app
+from prompt_toolkit.buffer import Buffer
+from prompt_toolkit.document import Document
 from prompt_toolkit.filters import has_focus
 from prompt_toolkit.formatted_text import HTML, to_formatted_text
 from prompt_toolkit.formatted_text.utils import fragment_list_to_text
-from prompt_toolkit.buffer import Buffer
-from prompt_toolkit.document import Document
 from prompt_toolkit.key_binding import KeyBindings
 from prompt_toolkit.keys import Keys
-from prompt_toolkit.layout.controls import BufferControl
-from prompt_toolkit.layout.dimension import Dimension
-from prompt_toolkit.layout.processors import Processor, Transformation
 from prompt_toolkit.layout import (
+    ConditionalContainer,
+    Float,
+    FloatContainer,
     HSplit,
-    Window,
     VSplit,
-    FloatContainer,
-    Float,
-    ConditionalContainer,
+    Window,
 )
+from prompt_toolkit.layout.controls import BufferControl
+from prompt_toolkit.layout.dimension import Dimension
+from prompt_toolkit.layout.processors import Processor, Transformation
 from prompt_toolkit.widgets import (
+    Button,
+    Dialog,
     Frame,
     HorizontalLine,
-    Dialog,
-    Button,
-    TextArea,
     Label,
+    TextArea,
 )
 from prompt_toolkit.widgets.base import Border
 
 from awscli.autoprompt.filters import (
-    help_section_visible,
     doc_window_has_focus,
-    search_input_has_focus,
+    help_section_visible,
     input_buffer_has_focus,
-    is_history_mode,
     is_debug_mode,
+    is_history_mode,
+    search_input_has_focus,
 )
 
 
diff -pruN 2.23.6-1/awscli/bcdoc/docevents.py 2.31.35-1/awscli/bcdoc/docevents.py
--- 2.23.6-1/awscli/bcdoc/docevents.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/bcdoc/docevents.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 
 
 DOC_EVENTS = {
+    'doc-meta-description': '.%s',
     'doc-breadcrumbs': '.%s',
     'doc-title': '.%s',
     'doc-description': '.%s',
@@ -31,76 +32,118 @@ DOC_EVENTS = {
     'doc-subitems-end': '.%s',
     'doc-relateditems-start': '.%s',
     'doc-relateditem': '.%s.%s',
-    'doc-relateditems-end': '.%s'
-    }
+    'doc-relateditems-end': '.%s',
+}
 
 
 def generate_events(session, help_command):
     # Now generate the documentation events
-    session.emit('doc-breadcrumbs.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-title.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-description.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-synopsis-start.%s' % help_command.event_class,
-                 help_command=help_command)
+    session.emit(
+        'doc-breadcrumbs.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-meta-description.%s' % help_command.event_class,
+        help_command=help_command
+    )
+    session.emit(
+        'doc-title.%s' % help_command.event_class, help_command=help_command
+    )
+    session.emit(
+        'doc-description.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-synopsis-start.%s' % help_command.event_class,
+        help_command=help_command,
+    )
     if help_command.arg_table:
         for arg_name in help_command.arg_table:
             # An argument can set an '_UNDOCUMENTED' attribute
             # to True to indicate a parameter that exists
             # but shouldn't be documented.  This can be used
             # for backwards compatibility of deprecated arguments.
-            if getattr(help_command.arg_table[arg_name],
-                       '_UNDOCUMENTED', False):
+            if getattr(
+                help_command.arg_table[arg_name], '_UNDOCUMENTED', False
+            ):
                 continue
             session.emit(
-                'doc-synopsis-option.%s.%s' % (help_command.event_class,
-                                               arg_name),
-                arg_name=arg_name, help_command=help_command)
-    session.emit('doc-synopsis-end.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-options-start.%s' % help_command.event_class,
-                 help_command=help_command)
+                'doc-synopsis-option.%s.%s'
+                % (help_command.event_class, arg_name),
+                arg_name=arg_name,
+                help_command=help_command,
+            )
+    session.emit(
+        'doc-synopsis-end.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-options-start.%s' % help_command.event_class,
+        help_command=help_command,
+    )
     if help_command.arg_table:
         for arg_name in help_command.arg_table:
-            if getattr(help_command.arg_table[arg_name],
-                       '_UNDOCUMENTED', False):
+            if getattr(
+                help_command.arg_table[arg_name], '_UNDOCUMENTED', False
+            ):
                 continue
-            session.emit('doc-option.%s.%s' % (help_command.event_class,
-                                               arg_name),
-                         arg_name=arg_name, help_command=help_command)
-            session.emit('doc-option-example.%s.%s' %
-                         (help_command.event_class, arg_name),
-                         arg_name=arg_name, help_command=help_command)
-    session.emit('doc-options-end.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-global-option.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-subitems-start.%s' % help_command.event_class,
-                 help_command=help_command)
+            session.emit(
+                'doc-option.%s.%s' % (help_command.event_class, arg_name),
+                arg_name=arg_name,
+                help_command=help_command,
+            )
+            session.emit(
+                'doc-option-example.%s.%s'
+                % (help_command.event_class, arg_name),
+                arg_name=arg_name,
+                help_command=help_command,
+            )
+    session.emit(
+        'doc-options-end.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-global-option.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-subitems-start.%s' % help_command.event_class,
+        help_command=help_command,
+    )
     if help_command.command_table:
         for command_name in sorted(help_command.command_table.keys()):
-            if hasattr(help_command.command_table[command_name],
-                       '_UNDOCUMENTED'):
+            if hasattr(
+                help_command.command_table[command_name], '_UNDOCUMENTED'
+            ):
                 continue
-            session.emit('doc-subitem.%s.%s'
-                         % (help_command.event_class, command_name),
-                         command_name=command_name,
-                         help_command=help_command)
-    session.emit('doc-subitems-end.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-examples.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-output.%s' % help_command.event_class,
-                 help_command=help_command)
-    session.emit('doc-relateditems-start.%s' % help_command.event_class,
-                 help_command=help_command)
+            session.emit(
+                'doc-subitem.%s.%s' % (help_command.event_class, command_name),
+                command_name=command_name,
+                help_command=help_command,
+            )
+    session.emit(
+        'doc-subitems-end.%s' % help_command.event_class,
+        help_command=help_command,
+    )
+    session.emit(
+        'doc-examples.%s' % help_command.event_class, help_command=help_command
+    )
+    session.emit(
+        'doc-output.%s' % help_command.event_class, help_command=help_command
+    )
+    session.emit(
+        'doc-relateditems-start.%s' % help_command.event_class,
+        help_command=help_command,
+    )
     if help_command.related_items:
         for related_item in sorted(help_command.related_items):
-            session.emit('doc-relateditem.%s.%s'
-                         % (help_command.event_class, related_item),
-                         help_command=help_command,
-                         related_item=related_item)
-    session.emit('doc-relateditems-end.%s' % help_command.event_class,
-                 help_command=help_command)
+            session.emit(
+                'doc-relateditem.%s.%s'
+                % (help_command.event_class, related_item),
+                help_command=help_command,
+                related_item=related_item,
+            )
+    session.emit(
+        'doc-relateditems-end.%s' % help_command.event_class,
+        help_command=help_command,
+    )
diff -pruN 2.23.6-1/awscli/bcdoc/docstringparser.py 2.31.35-1/awscli/bcdoc/docstringparser.py
--- 2.23.6-1/awscli/bcdoc/docstringparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/bcdoc/docstringparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -51,12 +51,13 @@ class DocStringParser(HTMLParser):
         self.tree.add_data(data)
 
 
-class HTMLTree(object):
+class HTMLTree:
     """
     A tree which handles HTML nodes. Designed to work with a python HTML parser,
     meaning that the current_node will be the most recently opened tag. When
     a tag is closed, the current_node moves up to the parent node.
     """
+
     def __init__(self, doc):
         self.doc = doc
         self.head = StemNode()
@@ -93,7 +94,7 @@ class HTMLTree(object):
         self.head.write(self.doc)
 
 
-class Node(object):
+class Node:
     def __init__(self, parent=None):
         self.parent = parent
 
@@ -122,6 +123,7 @@ class TagNode(StemNode):
     """
     A generic Tag node. It will verify that handlers exist before writing.
     """
+
     def __init__(self, tag, attrs=None, parent=None):
         super(TagNode, self).__init__(parent)
         self.attrs = attrs
@@ -174,6 +176,7 @@ class DataNode(Node):
     """
     A Node that contains only string data.
     """
+
     def __init__(self, data, parent=None):
         super(DataNode, self).__init__(parent)
         if not isinstance(data, str):
diff -pruN 2.23.6-1/awscli/bcdoc/restdoc.py 2.31.35-1/awscli/bcdoc/restdoc.py
--- 2.23.6-1/awscli/bcdoc/restdoc.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/bcdoc/restdoc.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,14 @@
 import logging
 
 from botocore.compat import OrderedDict
+
 from awscli.bcdoc.docstringparser import DocStringParser
 from awscli.bcdoc.style import ReSTStyle
 
 LOG = logging.getLogger('bcdocs')
 
 
-class ReSTDocument(object):
-
+class ReSTDocument:
     def __init__(self, target='man'):
         self.style = ReSTStyle(self)
         self.target = target
@@ -120,7 +120,7 @@ class ReSTDocument(object):
             del self._writes[start:end]
 
     def write_from_file(self, filename):
-        with open(filename, 'r') as f:
+        with open(filename) as f:
             for line in f.readlines():
                 self.writeln(line.strip())
 
@@ -194,8 +194,9 @@ class DocumentStructure(ReSTDocument):
             to the document structure it was instantiated from.
         """
         # Add a new section
-        section = self.__class__(name=name, target=self.target,
-                                 context=context)
+        section = self.__class__(
+            name=name, target=self.target, context=context
+        )
         section.path = self.path + [name]
         # Indent the section apporpriately as well
         section.style.indentation = self.style.indentation
diff -pruN 2.23.6-1/awscli/bcdoc/style.py 2.31.35-1/awscli/bcdoc/style.py
--- 2.23.6-1/awscli/bcdoc/style.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/bcdoc/style.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,8 +16,7 @@ import logging
 logger = logging.getLogger('bcdocs')
 
 
-class BaseStyle(object):
-
+class BaseStyle:
     def __init__(self, doc, indent_width=2):
         self.doc = doc
         self.indent_width = indent_width
@@ -65,7 +64,6 @@ class BaseStyle(object):
 
 
 class ReSTStyle(BaseStyle):
-
     def __init__(self, doc, indent_width=2):
         BaseStyle.__init__(self, doc, indent_width)
         self.do_p = True
diff -pruN 2.23.6-1/awscli/bcdoc/textwriter.py 2.31.35-1/awscli/bcdoc/textwriter.py
--- 2.23.6-1/awscli/bcdoc/textwriter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/bcdoc/textwriter.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,13 @@
-# -*- coding: utf-8 -*-
 """
 
-    Custom docutils writer for plain text.
-    Based heavily on the Sphinx text writer.  See copyright below.
+Custom docutils writer for plain text.
+Based heavily on the Sphinx text writer.  See copyright below.
 
-    :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
-    :license: BSD, see LICENSE for details.
+:copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+:license: BSD, see LICENSE for details.
 
 """
+
 import os
 import re
 import textwrap
@@ -19,10 +19,11 @@ class TextWrapper(textwrap.TextWrapper):
     """Custom subclass that uses a different word separator regex."""
 
     wordsep_re = re.compile(
-        r'(\s+|'                                  # any whitespace
-        r'(?<=\s)(?::[a-z-]+:)?`\S+|'             # interpreted text start
-        r'[^\s\w]*\w+[a-zA-Z]-(?=\w+[a-zA-Z])|'   # hyphenated words
-        r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))')   # em-dash
+        r'(\s+|'  # any whitespace
+        r'(?<=\s)(?::[a-z-]+:)?`\S+|'  # interpreted text start
+        r'[^\s\w]*\w+[a-zA-Z]-(?=\w+[a-zA-Z])|'  # hyphenated words
+        r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))'
+    )  # em-dash
 
 
 MAXWIDTH = 70
@@ -81,12 +82,13 @@ class TextTranslator(nodes.NodeVisitor):
             if not toformat:
                 return
             if wrap:
-                res = my_wrap(''.join(toformat), width=MAXWIDTH-maxindent)
+                res = my_wrap(''.join(toformat), width=MAXWIDTH - maxindent)
             else:
                 res = ''.join(toformat).splitlines()
             if end:
                 res += end
             result.append((indent, res))
+
         for itemindent, item in content:
             if itemindent == -1:
                 toformat.append(item)
@@ -107,9 +109,11 @@ class TextTranslator(nodes.NodeVisitor):
 
     def depart_document(self, node):
         self.end_state()
-        self.body = self.nl.join(line and (' '*indent + line)
-                                 for indent, lines in self.states[0]
-                                 for line in lines)
+        self.body = self.nl.join(
+            line and (' ' * indent + line)
+            for indent, lines in self.states[0]
+            for line in lines
+        )
         # XXX header/footer?
 
     def visit_highlightlang(self, node):
@@ -153,7 +157,7 @@ class TextTranslator(nodes.NodeVisitor):
 
     def visit_title(self, node):
         if isinstance(node.parent, nodes.Admonition):
-            self.add_text(node.astext()+': ')
+            self.add_text(node.astext() + ': ')
             raise nodes.SkipNode
         self.new_state(0)
 
@@ -280,7 +284,7 @@ class TextTranslator(nodes.NodeVisitor):
                 self.add_text(production['tokenname'].ljust(maxlen) + ' ::=')
                 lastname = production['tokenname']
             else:
-                self.add_text('%s    ' % (' '*len(lastname)))
+                self.add_text('%s    ' % (' ' * len(lastname)))
             self.add_text(production.astext() + self.nl)
         self.end_state(wrap=False)
         raise nodes.SkipNode
@@ -391,8 +395,9 @@ class TextTranslator(nodes.NodeVisitor):
 
     def visit_entry(self, node):
         if 'morerows' in node or 'morecols' in node:
-            raise NotImplementedError('Column or row spanning cells are '
-                                      'not implemented.')
+            raise NotImplementedError(
+                'Column or row spanning cells are not implemented.'
+            )
         self.new_state(0)
 
     def depart_entry(self, node):
@@ -431,7 +436,7 @@ class TextTranslator(nodes.NodeVisitor):
         def writesep(char='-'):
             out = ['+']
             for width in realwidths:
-                out.append(char * (width+2))
+                out.append(char * (width + 2))
                 out.append('+')
             self.add_text(''.join(out) + self.nl)
 
@@ -441,7 +446,7 @@ class TextTranslator(nodes.NodeVisitor):
                 out = ['|']
                 for i, cell in enumerate(line):
                     if cell:
-                        out.append(' ' + cell.ljust(realwidths[i]+1))
+                        out.append(' ' + cell.ljust(realwidths[i] + 1))
                     else:
                         out.append(' ' * (realwidths[i] + 2))
                     out.append('|')
@@ -460,7 +465,8 @@ class TextTranslator(nodes.NodeVisitor):
     def visit_acks(self, node):
         self.new_state(0)
         self.add_text(
-            ', '.join(n.astext() for n in node.children[0].children) + '.')
+            ', '.join(n.astext() for n in node.children[0].children) + '.'
+        )
         self.end_state()
         raise nodes.SkipNode
 
@@ -516,8 +522,9 @@ class TextTranslator(nodes.NodeVisitor):
             self.end_state(first='%s. ' % self.list_counter[-1], end=None)
 
     def visit_definition_list_item(self, node):
-        self._li_has_classifier = len(node) >= 2 and \
-                                  isinstance(node[1], nodes.classifier)
+        self._li_has_classifier = len(node) >= 2 and isinstance(
+            node[1], nodes.classifier
+        )
 
     def depart_definition_list_item(self, node):
         pass
@@ -774,6 +781,7 @@ class TextTranslator(nodes.NodeVisitor):
     def _make_depart_admonition(name):
         def depart_admonition(self, node):
             self.end_state(first=name.capitalize() + ': ')
+
         return depart_admonition
 
     visit_attention = _visit_admonition
diff -pruN 2.23.6-1/awscli/botocore/__init__.py 2.31.35-1/awscli/botocore/__init__.py
--- 2.23.6-1/awscli/botocore/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,7 @@ class NullHandler(logging.Handler):
     def emit(self, record):
         pass
 
+
 # Configure default logger to do nothing
 log = logging.getLogger('botocore')
 log.addHandler(NullHandler())
@@ -60,24 +61,82 @@ _xform_cache = {
         'AssociateWhatsAppBusinessAccount',
         '-',
     ): 'associate-whatsapp-business-account',
-    ('DeleteWhatsAppMessageMedia', '_'): 'delete_whatsapp_media_message',
-    ('DeleteWhatsAppMessageMedia', '-'): 'delete-whatsapp-media-message',
-    ('DisassociateWhatsAppBusinessAccount', '_'): 'disassociate_whatsapp_business_account',
-    ('DisassociateWhatsAppBusinessAccount', '-'):'disassociate-whatsapp-business-account',
-    ('GetLinkedWhatsAppBusinessAccount', '_'): 'get_linked_whatsapp_business_account',
-    ('GetLinkedWhatsAppBusinessAccount', '-'): 'get-linked-whatsapp-business-account',
-    ('GetLinkedWhatsAppBusinessAccountPhoneNumber', '_'): 'get_linked_whatsapp_business_account_phone_number',
-    ('GetLinkedWhatsAppBusinessAccountPhoneNumber', '-'): 'get-linked-whatsapp-business-account-phone-number',
+    ('CreateWhatsAppMessageTemplate', '_'): 'create_whatsapp_message_template',
+    ('CreateWhatsAppMessageTemplate', '-'): 'create-whatsapp-message-template',
+    (
+        'CreateWhatsAppMessageTemplateFromLibrary',
+        '_',
+    ): 'create_whatsapp_message_template_from_library',
+    (
+        'CreateWhatsAppMessageTemplateFromLibrary',
+        '-',
+    ): 'create-whatsapp-message-template-from-library',
+    (
+        'CreateWhatsAppMessageTemplateMedia',
+        '_',
+    ): 'create_whatsapp_message_template_media',
+    (
+        'CreateWhatsAppMessageTemplateMedia',
+        '-',
+    ): 'create-whatsapp-message-template-media',
+    ('DeleteWhatsAppMessageMedia', '_'): 'delete_whatsapp_message_media',
+    ('DeleteWhatsAppMessageMedia', '-'): 'delete-whatsapp-message-media',
+    ('DeleteWhatsAppMessageTemplate', '_'): 'delete_whatsapp_message_template',
+    ('DeleteWhatsAppMessageTemplate', '-'): 'delete-whatsapp-message-template',
+    (
+        'DisassociateWhatsAppBusinessAccount',
+        '_',
+    ): 'disassociate_whatsapp_business_account',
+    (
+        'DisassociateWhatsAppBusinessAccount',
+        '-',
+    ): 'disassociate-whatsapp-business-account',
+    (
+        'GetLinkedWhatsAppBusinessAccount',
+        '_',
+    ): 'get_linked_whatsapp_business_account',
+    (
+        'GetLinkedWhatsAppBusinessAccount',
+        '-',
+    ): 'get-linked-whatsapp-business-account',
+    (
+        'GetLinkedWhatsAppBusinessAccountPhoneNumber',
+        '_',
+    ): 'get_linked_whatsapp_business_account_phone_number',
+    (
+        'GetLinkedWhatsAppBusinessAccountPhoneNumber',
+        '-',
+    ): 'get-linked-whatsapp-business-account-phone-number',
     ('GetWhatsAppMessageMedia', '_'): 'get_whatsapp_message_media',
     ('GetWhatsAppMessageMedia', '-'): 'get-whatsapp-message-media',
-    ('ListLinkedWhatsAppBusinessAccounts', '_'): 'list_linked_whatsapp_business_accounts',
-    ('ListLinkedWhatsAppBusinessAccounts', '-'): 'list-linked-whatsapp-business-accounts',
+    ('GetWhatsAppMessageTemplate', '_'): 'get_whatsapp_message_template',
+    ('GetWhatsAppMessageTemplate', '-'): 'get-whatsapp-message-template',
+    (
+        'ListLinkedWhatsAppBusinessAccounts',
+        '_',
+    ): 'list_linked_whatsapp_business_accounts',
+    (
+        'ListLinkedWhatsAppBusinessAccounts',
+        '-',
+    ): 'list-linked-whatsapp-business-accounts',
+    ('ListWhatsAppMessageTemplates', '_'): 'list_whatsapp_message_templates',
+    ('ListWhatsAppMessageTemplates', '-'): 'list-whatsapp-message-templates',
+    ('ListWhatsAppTemplateLibrary', '_'): 'list_whatsapp_template_library',
+    ('ListWhatsAppTemplateLibrary', '-'): 'list-whatsapp-template-library',
     ('PostWhatsAppMessageMedia', '_'): 'post_whatsapp_message_media',
     ('PostWhatsAppMessageMedia', '-'): 'post-whatsapp-message-media',
-    ('PutWhatsAppBusinessAccountEventDestinations', '_'): 'put_whatsapp_business_account_event_destinations',
-    ('PutWhatsAppBusinessAccountEventDestinations', '-'): 'put-whatsapp-business-account-event-destinations',
+    (
+        'PutWhatsAppBusinessAccountEventDestinations',
+        '_',
+    ): 'put_whatsapp_business_account_event_destinations',
+    (
+        'PutWhatsAppBusinessAccountEventDestinations',
+        '-',
+    ): 'put-whatsapp-business-account-event-destinations',
     ('SendWhatsAppMessage', '_'): 'send_whatsapp_message',
     ('SendWhatsAppMessage', '-'): 'send-whatsapp-message',
+    ('UpdateWhatsAppMessageTemplate', '_'): 'update_whatsapp_message_template',
+    ('UpdateWhatsAppMessageTemplate', '-'): 'update-whatsapp-message-template',
 }
 ScalarTypes = ('string', 'integer', 'boolean', 'timestamp', 'float', 'double')
 
@@ -85,7 +144,7 @@ BOTOCORE_ROOT = os.path.realpath(os.path
 
 
 # Used to specify anonymous (unsigned) request signature
-class UNSIGNED(object):
+class UNSIGNED:
     def __copy__(self):
         return self
 
@@ -113,7 +172,7 @@ def xform_name(name, sep='_', _xform_cac
             is_special = _special_case_transform.search(name)
             matched = is_special.group()
             # Replace something like ARNs, ACLs with _arns, _acls.
-            name = name[:-len(matched)] + sep + matched.lower()
+            name = name[: -len(matched)] + sep + matched.lower()
         s1 = _first_cap_regex.sub(r'\1' + sep + r'\2', name)
         transformed = _end_cap_regex.sub(r'\1' + sep + r'\2', s1).lower()
         _xform_cache[key] = transformed
diff -pruN 2.23.6-1/awscli/botocore/args.py 2.31.35-1/awscli/botocore/args.py
--- 2.23.6-1/awscli/botocore/args.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/args.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,7 @@ This module (and all function/classes wi
 considered internal, and *not* a public API.
 
 """
+
 import copy
 import logging
 import socket
@@ -27,8 +28,12 @@ from botocore.endpoint import EndpointCr
 from botocore.regions import EndpointResolverBuiltins as EPRBuiltins
 from botocore.regions import EndpointRulesetResolver
 from botocore.signers import RequestSigner
-from botocore.useragent import UserAgentString
-from botocore.utils import ensure_boolean, is_s3_accelerate_url
+from botocore.useragent import UserAgentString, register_feature_id
+from botocore.utils import (
+    PRIORITY_ORDERED_SUPPORTED_PROTOCOLS,  # noqa: F401
+    ensure_boolean,
+    is_s3_accelerate_url,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -45,9 +50,25 @@ VALID_RESPONSE_CHECKSUM_VALIDATION_CONFI
     "when_required",
 )
 
-class ClientArgsCreator(object):
-    def __init__(self, event_emitter, user_agent, response_parser_factory,
-                 loader, exceptions_factory, config_store, user_agent_creator=None):
+
+VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIG = (
+    'preferred',
+    'disabled',
+    'required',
+)
+
+
+class ClientArgsCreator:
+    def __init__(
+        self,
+        event_emitter,
+        user_agent,
+        response_parser_factory,
+        loader,
+        exceptions_factory,
+        config_store,
+        user_agent_creator=None,
+    ):
         self._event_emitter = event_emitter
         self._response_parser_factory = response_parser_factory
         self._loader = loader
@@ -59,25 +80,31 @@ class ClientArgsCreator(object):
             self._session_ua_creator = user_agent_creator
 
     def get_client_args(
-            self,
+        self,
+        service_model,
+        region_name,
+        is_secure,
+        endpoint_url,
+        verify,
+        credentials,
+        scoped_config,
+        client_config,
+        endpoint_bridge,
+        auth_token=None,
+        endpoints_ruleset_data=None,
+        partition_data=None,
+    ):
+        final_args = self.compute_client_args(
             service_model,
+            client_config,
+            endpoint_bridge,
             region_name,
-            is_secure,
             endpoint_url,
-            verify,
-            credentials,
+            is_secure,
             scoped_config,
-            client_config,
-            endpoint_bridge,
-            auth_token=None,
-            endpoints_ruleset_data=None,
-            partition_data=None,
-    ):
-        final_args = self.compute_client_args(
-            service_model, client_config, endpoint_bridge, region_name,
-            endpoint_url, is_secure, scoped_config)
+        )
 
-        service_name = final_args['service_name']
+        service_name = final_args['service_name']  # noqa
         parameter_validation = final_args['parameter_validation']
         endpoint_config = final_args['endpoint_config']
         protocol = final_args['protocol']
@@ -88,13 +115,17 @@ class ClientArgsCreator(object):
         configured_endpoint_url = final_args['configured_endpoint_url']
         signing_region = endpoint_config['signing_region']
         endpoint_region_name = endpoint_config['region_name']
+        account_id_endpoint_mode = config_kwargs['account_id_endpoint_mode']
 
         event_emitter = copy.copy(self._event_emitter)
         signer = RequestSigner(
-            service_model.service_id, signing_region,
+            service_model.service_id,
+            signing_region,
             endpoint_config['signing_name'],
             endpoint_config['signature_version'],
-            credentials, event_emitter, auth_token
+            credentials,
+            event_emitter,
+            auth_token,
         )
 
         config_kwargs['s3'] = s3_config
@@ -102,18 +133,22 @@ class ClientArgsCreator(object):
         endpoint_creator = EndpointCreator(event_emitter)
 
         endpoint = endpoint_creator.create_endpoint(
-            service_model, region_name=endpoint_region_name,
-            endpoint_url=endpoint_config['endpoint_url'], verify=verify,
+            service_model,
+            region_name=endpoint_region_name,
+            endpoint_url=endpoint_config['endpoint_url'],
+            verify=verify,
             response_parser_factory=self._response_parser_factory,
             max_pool_connections=new_config.max_pool_connections,
             proxies=new_config.proxies,
             timeout=(new_config.connect_timeout, new_config.read_timeout),
             socket_options=socket_options,
             client_cert=new_config.client_cert,
-            proxies_config=new_config.proxies_config)
+            proxies_config=new_config.proxies_config,
+        )
 
         serializer = botocore.serialize.create_serializer(
-            protocol, parameter_validation)
+            protocol, parameter_validation
+        )
         response_parser = botocore.parsers.create_parser(protocol)
 
         ruleset_resolver = self._build_endpoint_resolver(
@@ -128,6 +163,8 @@ class ClientArgsCreator(object):
             is_secure,
             endpoint_bridge,
             event_emitter,
+            credentials,
+            account_id_endpoint_mode,
         )
 
         # Copy the session's user agent factory and adds client configuration.
@@ -152,11 +189,18 @@ class ClientArgsCreator(object):
             'user_agent_creator': client_ua_creator,
         }
 
-    def compute_client_args(self, service_model, client_config,
-                            endpoint_bridge, region_name, endpoint_url,
-                            is_secure, scoped_config):
+    def compute_client_args(
+        self,
+        service_model,
+        client_config,
+        endpoint_bridge,
+        region_name,
+        endpoint_url,
+        is_secure,
+        scoped_config,
+    ):
         service_name = service_model.endpoint_prefix
-        protocol = service_model.metadata['protocol']
+        protocol = service_model.resolved_protocol
         parameter_validation = True
         if client_config and not client_config.parameter_validation:
             parameter_validation = False
@@ -171,6 +215,8 @@ class ClientArgsCreator(object):
             client_config=client_config,
             endpoint_url=endpoint_url,
         )
+        if configured_endpoint_url is not None:
+            register_feature_id('ENDPOINT_OVERRIDE')
 
         endpoint_config = self._compute_endpoint_config(
             service_name=service_name,
@@ -198,7 +244,8 @@ class ClientArgsCreator(object):
         config_kwargs = dict(
             region_name=endpoint_config['region_name'],
             signature_version=endpoint_config['signature_version'],
-            user_agent=preliminary_ua_string)
+            user_agent=preliminary_ua_string,
+        )
         if 'dualstack' in endpoint_variant_tags:
             config_kwargs.update(use_dualstack_endpoint=True)
         if 'fips' in endpoint_variant_tags:
@@ -230,12 +277,20 @@ class ClientArgsCreator(object):
                 response_checksum_validation=(
                     client_config.response_checksum_validation
                 ),
+                account_id_endpoint_mode=client_config.account_id_endpoint_mode,
+                auth_scheme_preference=client_config.auth_scheme_preference,
             )
         self._compute_retry_config(config_kwargs)
         self._compute_request_compression_config(config_kwargs)
         self._compute_user_agent_appid_config(config_kwargs)
         self._compute_sigv4a_signing_region_set_config(config_kwargs)
         self._compute_checksum_config(config_kwargs)
+        self._compute_inject_host_prefix(client_config, config_kwargs)
+        self._compute_account_id_endpoint_mode_config(config_kwargs)
+        self._compute_auth_scheme_preference_config(
+            client_config, config_kwargs
+        )
+        self._compute_signature_version_config(client_config, config_kwargs)
         s3_config = self.compute_s3_config(client_config)
 
         is_s3_service = self._is_s3_service(service_name)
@@ -253,9 +308,28 @@ class ClientArgsCreator(object):
             'protocol': protocol,
             'config_kwargs': config_kwargs,
             's3_config': s3_config,
-            'socket_options': self._compute_socket_options(scoped_config)
+            'socket_options': self._compute_socket_options(scoped_config),
         }
 
+    def _compute_inject_host_prefix(self, client_config, config_kwargs):
+        # In the cases that a Config object was not provided, or the private value
+        # remained UNSET, we should resolve the value from the config store.
+        if (
+            client_config is None
+            or client_config._inject_host_prefix == 'UNSET'
+        ):
+            configured_disable_host_prefix_injection = (
+                self._config_store.get_config_variable(
+                    'disable_host_prefix_injection'
+                )
+            )
+            if configured_disable_host_prefix_injection is not None:
+                config_kwargs[
+                    'inject_host_prefix'
+                ] = not configured_disable_host_prefix_injection
+            else:
+                config_kwargs['inject_host_prefix'] = True
+
     def _compute_configured_endpoint_url(self, client_config, endpoint_url):
         if endpoint_url is not None:
             return endpoint_url
@@ -306,8 +380,15 @@ class ClientArgsCreator(object):
         """
         return service_name in ['s3', 's3-control']
 
-    def _compute_endpoint_config(self, service_name, region_name, endpoint_url,
-                                 is_secure, endpoint_bridge, s3_config):
+    def _compute_endpoint_config(
+        self,
+        service_name,
+        region_name,
+        endpoint_url,
+        is_secure,
+        endpoint_bridge,
+        s3_config,
+    ):
         resolve_endpoint_kwargs = {
             'service_name': service_name,
             'region_name': region_name,
@@ -317,31 +398,44 @@ class ClientArgsCreator(object):
         }
         if service_name == 's3':
             return self._compute_s3_endpoint_config(
-                s3_config=s3_config, **resolve_endpoint_kwargs)
+                s3_config=s3_config, **resolve_endpoint_kwargs
+            )
         return self._resolve_endpoint(**resolve_endpoint_kwargs)
 
-    def _compute_s3_endpoint_config(self, s3_config,
-                                    **resolve_endpoint_kwargs):
+    def _compute_s3_endpoint_config(
+        self, s3_config, **resolve_endpoint_kwargs
+    ):
         endpoint_config = self._resolve_endpoint(**resolve_endpoint_kwargs)
         self._set_region_if_custom_s3_endpoint(
-            endpoint_config, resolve_endpoint_kwargs['endpoint_bridge'])
+            endpoint_config, resolve_endpoint_kwargs['endpoint_bridge']
+        )
         return endpoint_config
 
-    def _set_region_if_custom_s3_endpoint(self, endpoint_config,
-                                          endpoint_bridge):
+    def _set_region_if_custom_s3_endpoint(
+        self, endpoint_config, endpoint_bridge
+    ):
         # If a user is providing a custom URL, the endpoint resolver will
         # refuse to infer a signing region. If we want to default to s3v4,
         # we have to account for this.
-        if endpoint_config['signing_region'] is None \
-                and endpoint_config['region_name'] is None:
+        if (
+            endpoint_config['signing_region'] is None
+            and endpoint_config['region_name'] is None
+        ):
             endpoint = endpoint_bridge.resolve('s3')
             endpoint_config['signing_region'] = endpoint['signing_region']
             endpoint_config['region_name'] = endpoint['region_name']
 
-    def _resolve_endpoint(self, service_name, region_name,
-                          endpoint_url, is_secure, endpoint_bridge):
+    def _resolve_endpoint(
+        self,
+        service_name,
+        region_name,
+        endpoint_url,
+        is_secure,
+        endpoint_bridge,
+    ):
         return endpoint_bridge.resolve(
-            service_name, region_name, endpoint_url, is_secure)
+            service_name, region_name, endpoint_url, is_secure
+        )
 
     def _compute_socket_options(self, scoped_config):
         # This disables Nagle's algorithm and is the default socket options
@@ -351,7 +445,8 @@ class ClientArgsCreator(object):
             # Enables TCP Keepalive if specified in shared config file.
             if self._ensure_boolean(scoped_config.get('tcp_keepalive', False)):
                 socket_options.append(
-                    (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1))
+                    (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+                )
         return socket_options
 
     def _compute_retry_config(self, config_kwargs):
@@ -453,6 +548,8 @@ class ClientArgsCreator(object):
         is_secure,
         endpoint_bridge,
         event_emitter,
+        credentials,
+        account_id_endpoint_mode,
     ):
         if endpoints_ruleset_data is None:
             return None
@@ -477,6 +574,8 @@ class ClientArgsCreator(object):
             endpoint_bridge=endpoint_bridge,
             client_endpoint_url=endpoint_url,
             legacy_endpoint_url=endpoint.host,
+            credentials=credentials,
+            account_id_endpoint_mode=account_id_endpoint_mode,
         )
         # botocore does not support client context parameters generically
         # for every service. Instead, the s3 config section entries are
@@ -510,6 +609,8 @@ class ClientArgsCreator(object):
         endpoint_bridge,
         client_endpoint_url,
         legacy_endpoint_url,
+        credentials,
+        account_id_endpoint_mode,
     ):
         # EndpointRulesetResolver rulesets may accept an "SDK::Endpoint" as
         # input. If the endpoint_url argument of create_client() is set, it
@@ -576,6 +677,12 @@ class ClientArgsCreator(object):
                 's3_disable_multiregion_access_points', False
             ),
             EPRBuiltins.SDK_ENDPOINT: given_endpoint,
+            EPRBuiltins.ACCOUNT_ID: credentials.get_deferred_property(
+                'account_id'
+            )
+            if credentials
+            else None,
+            EPRBuiltins.ACCOUNT_ID_ENDPOINT_MODE: account_id_endpoint_mode,
         }
 
     def _compute_user_agent_appid_config(self, config_kwargs):
@@ -635,4 +742,100 @@ class ClientArgsCreator(object):
                 config_value=value,
                 valid_options=valid_options,
             )
-        config_kwargs[config_key] = value
\ No newline at end of file
+        self._register_checksum_config_feature_ids(value, config_key)
+        config_kwargs[config_key] = value
+
+    def _register_checksum_config_feature_ids(self, value, config_key):
+        checksum_config_feature_id = None
+        if config_key == "request_checksum_calculation":
+            checksum_config_feature_id = (
+                f"FLEXIBLE_CHECKSUMS_REQ_{value.upper()}"
+            )
+        elif config_key == "response_checksum_validation":
+            checksum_config_feature_id = (
+                f"FLEXIBLE_CHECKSUMS_RES_{value.upper()}"
+            )
+        if checksum_config_feature_id is not None:
+            register_feature_id(checksum_config_feature_id)
+
+    def _compute_account_id_endpoint_mode_config(self, config_kwargs):
+        config_key = 'account_id_endpoint_mode'
+
+        # Disable account id based endpoint routing for unsigned requests
+        # since there are no credentials to resolve.
+        signature_version = config_kwargs.get('signature_version')
+        if signature_version is botocore.UNSIGNED:
+            config_kwargs[config_key] = 'disabled'
+            return
+
+        account_id_endpoint_mode = config_kwargs.get(config_key)
+        if account_id_endpoint_mode is None:
+            account_id_endpoint_mode = self._config_store.get_config_variable(
+                config_key
+            )
+
+        if isinstance(account_id_endpoint_mode, str):
+            account_id_endpoint_mode = account_id_endpoint_mode.lower()
+
+        if (
+            account_id_endpoint_mode
+            not in VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIG
+        ):
+            raise botocore.exceptions.InvalidConfigError(
+                error_msg=f"The configured value '{account_id_endpoint_mode}' for '{config_key}' is "
+                f"invalid. Valid values are: {VALID_ACCOUNT_ID_ENDPOINT_MODE_CONFIG}."
+            )
+
+        config_kwargs[config_key] = account_id_endpoint_mode
+
+    def _compute_auth_scheme_preference_config(
+        self, client_config, config_kwargs
+    ):
+        config_key = 'auth_scheme_preference'
+        set_in_config_object = False
+
+        if client_config and client_config.auth_scheme_preference:
+            value = client_config.auth_scheme_preference
+            set_in_config_object = True
+        else:
+            value = self._config_store.get_config_variable(config_key)
+
+        if value is None:
+            config_kwargs[config_key] = None
+            return
+
+        if not isinstance(value, str):
+            raise botocore.exceptions.InvalidConfigError(
+                error_msg=(
+                    f"{config_key} must be a comma-delimited string. "
+                    f"Received {type(value)} instead: {value}."
+                )
+            )
+
+        value = ','.join(
+            item.replace(' ', '').replace('\t', '')
+            for item in value.split(',')
+            if item.strip()
+        )
+
+        if set_in_config_object:
+            value = ClientConfigString(value)
+
+        config_kwargs[config_key] = value
+
+    def _compute_signature_version_config(self, client_config, config_kwargs):
+        if client_config and client_config.signature_version:
+            value = client_config.signature_version
+            if isinstance(value, str):
+                config_kwargs['signature_version'] = ClientConfigString(value)
+
+
+class ConfigObjectWrapper:
+    """Base class to mark values set via in-code Config object."""
+
+    pass
+
+
+class ClientConfigString(str, ConfigObjectWrapper):
+    def __new__(cls, value=None):
+        return super().__new__(cls, value)
diff -pruN 2.23.6-1/awscli/botocore/auth.py 2.31.35-1/awscli/botocore/auth.py
--- 2.23.6-1/awscli/botocore/auth.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/auth.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,7 +22,7 @@ from email.utils import formatdate
 from hashlib import sha256
 
 from botocore.compat import (
-    MD5_AVAILABLE,
+    MD5_AVAILABLE,  # noqa
     HTTPHeaders,
     encodebytes,
     ensure_unicode,
@@ -48,7 +48,8 @@ logger = logging.getLogger(__name__)
 
 
 EMPTY_SHA256_HASH = (
-    'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
+    'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+)
 # This is the buffer size used when calculating sha256 checksums.
 # Experimenting with various buffer sizes showed that this value generally
 # gave the best result (in terms of performance).
@@ -57,6 +58,7 @@ ISO8601 = '%Y-%m-%dT%H:%M:%SZ'
 SIGV4_TIMESTAMP = '%Y%m%dT%H%M%SZ'
 SIGNED_HEADERS_BLACKLIST = [
     'expect',
+    'transfer-encoding',
     'user-agent',
     'x-amzn-trace-id',
 ]
@@ -76,10 +78,7 @@ def _host_from_url(url):
         # brackets as per RFC 3986 3.2.2.
         host = f'[{host}]'
 
-    default_ports = {
-        'http': 80,
-        'https': 443
-    }
+    default_ports = {'http': 80, 'https': 443}
     if url_parts.port is not None:
         if url_parts.port != default_ports.get(url_parts.scheme):
             host = '%s:%d' % (host, url_parts.port)
@@ -99,7 +98,7 @@ def _get_body_as_dict(request):
     return data
 
 
-class BaseSigner(object):
+class BaseSigner:
     REQUIRES_REGION = False
     REQUIRES_TOKEN = False
 
@@ -131,11 +130,10 @@ class SigV2Auth(BaseSigner):
         path = split.path
         if len(path) == 0:
             path = '/'
-        string_to_sign = '%s\n%s\n%s\n' % (request.method,
-                                           split.netloc,
-                                           path)
-        lhmac = hmac.new(self.credentials.secret_key.encode('utf-8'),
-                         digestmod=sha256)
+        string_to_sign = f'{request.method}\n{split.netloc}\n{path}\n'
+        lhmac = hmac.new(
+            self.credentials.secret_key.encode('utf-8'), digestmod=sha256
+        )
         pairs = []
         for key in sorted(params):
             # Any previous signature should not be a part of this
@@ -144,8 +142,11 @@ class SigV2Auth(BaseSigner):
             if key == 'Signature':
                 continue
             value = str(params[key])
-            pairs.append(quote(key.encode('utf-8'), safe='') + '=' +
-                         quote(value.encode('utf-8'), safe='-_~'))
+            pairs.append(
+                quote(key.encode('utf-8'), safe='')
+                + '='
+                + quote(value.encode('utf-8'), safe='-_~')
+            )
         qs = '&'.join(pairs)
         string_to_sign += qs
         logger.debug('String to sign: %s', string_to_sign)
@@ -192,13 +193,18 @@ class SigV3Auth(BaseSigner):
             if 'X-Amz-Security-Token' in request.headers:
                 del request.headers['X-Amz-Security-Token']
             request.headers['X-Amz-Security-Token'] = self.credentials.token
-        new_hmac = hmac.new(self.credentials.secret_key.encode('utf-8'),
-                            digestmod=sha256)
+        new_hmac = hmac.new(
+            self.credentials.secret_key.encode('utf-8'), digestmod=sha256
+        )
         new_hmac.update(request.headers['Date'].encode('utf-8'))
         encoded_signature = encodebytes(new_hmac.digest()).strip()
-        signature = ('AWS3-HTTPS AWSAccessKeyId=%s,Algorithm=%s,Signature=%s' %
-                     (self.credentials.access_key, 'HmacSHA256',
-                      encoded_signature.decode('utf-8')))
+        signature = (
+            'AWS3-HTTPS AWSAccessKeyId={},Algorithm={},Signature={}'.format(
+                self.credentials.access_key,
+                'HmacSHA256',
+                encoded_signature.decode('utf-8'),
+            )
+        )
         if 'X-Amzn-Authorization' in request.headers:
             del request.headers['X-Amzn-Authorization']
         request.headers['X-Amzn-Authorization'] = signature
@@ -208,6 +214,7 @@ class SigV4Auth(BaseSigner):
     """
     Sign a request with Signature V4.
     """
+
     REQUIRES_REGION = True
 
     def __init__(self, credentials, service_name, region_name):
@@ -256,13 +263,14 @@ class SigV4Auth(BaseSigner):
         key_val_pairs = []
         for key in params:
             value = str(params[key])
-            key_val_pairs.append((quote(key, safe='-_.~'),
-                                  quote(value, safe='-_.~')))
+            key_val_pairs.append(
+                (quote(key, safe='-_.~'), quote(value, safe='-_.~'))
+            )
         sorted_key_vals = []
         # Sort by the URI-encoded key names, and in the case of
         # repeated keys, then sort by the value.
         for key, value in sorted(key_val_pairs):
-            sorted_key_vals.append('%s=%s' % (key, value))
+            sorted_key_vals.append(f'{key}={value}')
         canonical_query_string = '&'.join(sorted_key_vals)
         return canonical_query_string
 
@@ -278,7 +286,7 @@ class SigV4Auth(BaseSigner):
             # Sort by the URI-encoded key names, and in the case of
             # repeated keys, then sort by the value.
             for key, value in sorted(key_val_pairs):
-                sorted_key_vals.append('%s=%s' % (key, value))
+                sorted_key_vals.append(f'{key}={value}')
             canonical_query_string = '&'.join(sorted_key_vals)
         return canonical_query_string
 
@@ -292,9 +300,10 @@ class SigV4Auth(BaseSigner):
         headers = []
         sorted_header_names = sorted(set(headers_to_sign))
         for key in sorted_header_names:
-            value = ','.join(self._header_value(v) for v in
-                             headers_to_sign.get_all(key))
-            headers.append('%s:%s' % (key, ensure_unicode(value)))
+            value = ','.join(
+                self._header_value(v) for v in headers_to_sign.get_all(key)
+            )
+            headers.append(f'{key}:{ensure_unicode(value)}')
         return '\n'.join(headers)
 
     def _header_value(self, value):
@@ -306,9 +315,8 @@ class SigV4Auth(BaseSigner):
         return ' '.join(value.split())
 
     def signed_headers(self, headers_to_sign):
-        l = ['%s' % n.lower().strip() for n in set(headers_to_sign)]
-        l = sorted(l)
-        return ';'.join(l)
+        headers = sorted(n.lower().strip() for n in set(headers_to_sign))
+        return ';'.join(headers)
 
     def _is_streaming_checksum_payload(self, request):
         checksum_context = request.context.get('checksum', {})
@@ -325,8 +333,9 @@ class SigV4Auth(BaseSigner):
         request_body = request.body
         if request_body and hasattr(request_body, 'seek'):
             position = request_body.tell()
-            read_chunksize = functools.partial(request_body.read,
-                                               PAYLOAD_BUFFER)
+            read_chunksize = functools.partial(
+                request_body.read, PAYLOAD_BUFFER
+            )
             checksum = sha256()
             for chunk in iter(read_chunksize, b''):
                 checksum.update(chunk)
@@ -399,8 +408,9 @@ class SigV4Auth(BaseSigner):
 
     def signature(self, string_to_sign, request):
         key = self.credentials.secret_key
-        k_date = self._sign(('AWS4' + key).encode('utf-8'),
-                            request.context['timestamp'][0:8])
+        k_date = self._sign(
+            ('AWS4' + key).encode('utf-8'), request.context['timestamp'][0:8]
+        )
         k_region = self._sign(k_date, self._region_name)
         k_service = self._sign(k_region, self._service_name)
         k_signing = self._sign(k_service, 'aws4_request')
@@ -425,11 +435,13 @@ class SigV4Auth(BaseSigner):
         self._inject_signature_to_request(request, signature)
 
     def _inject_signature_to_request(self, request, signature):
-        l = ['AWS4-HMAC-SHA256 Credential=%s' % self.scope(request)]
+        auth_str = [f'AWS4-HMAC-SHA256 Credential={self.scope(request)}']
         headers_to_sign = self.headers_to_sign(request)
-        l.append('SignedHeaders=%s' % self.signed_headers(headers_to_sign))
-        l.append('Signature=%s' % signature)
-        request.headers['Authorization'] = ', '.join(l)
+        auth_str.append(
+            f"SignedHeaders={self.signed_headers(headers_to_sign)}"
+        )
+        auth_str.append(f'Signature={signature}')
+        request.headers['Authorization'] = ', '.join(auth_str)
         return request
 
     def _modify_request_before_signing(self, request):
@@ -453,9 +465,11 @@ class SigV4Auth(BaseSigner):
         if 'Date' in request.headers:
             del request.headers['Date']
             datetime_timestamp = datetime.datetime.strptime(
-                request.context['timestamp'], SIGV4_TIMESTAMP)
+                request.context['timestamp'], SIGV4_TIMESTAMP
+            )
             request.headers['Date'] = formatdate(
-                int(calendar.timegm(datetime_timestamp.timetuple())))
+                int(calendar.timegm(datetime_timestamp.timetuple()))
+            )
             if 'X-Amz-Date' in request.headers:
                 del request.headers['X-Amz-Date']
         else:
@@ -466,7 +480,7 @@ class SigV4Auth(BaseSigner):
 
 class S3SigV4Auth(SigV4Auth):
     def _modify_request_before_signing(self, request):
-        super(S3SigV4Auth, self)._modify_request_before_signing(request)
+        super()._modify_request_before_signing(request)
         if 'X-Amz-Content-SHA256' in request.headers:
             del request.headers['X-Amz-Content-SHA256']
 
@@ -499,8 +513,10 @@ class S3SigV4Auth(SigV4Auth):
         algorithm = checksum_context.get('request_algorithm')
         if isinstance(algorithm, dict) and algorithm.get('in') == 'header':
             checksum_header = algorithm['name']
-        if not request.url.startswith('https') or \
-                checksum_header not in request.headers:
+        if (
+            not request.url.startswith('https')
+            or checksum_header not in request.headers
+        ):
             return True
 
         # If the input is streaming we disable body signing by default.
@@ -509,7 +525,7 @@ class S3SigV4Auth(SigV4Auth):
 
         # If the S3-specific checks had no results, delegate to the generic
         # checks.
-        return super(S3SigV4Auth, self)._should_sha256_sign_payload(request)
+        return super()._should_sha256_sign_payload(request)
 
     def _normalize_url_path(self, path):
         # For S3, we do not normalize the path.
@@ -672,7 +688,7 @@ class S3ExpressQueryAuth(S3ExpressAuth):
         # Rather than calculating an "Authorization" header, for the query
         # param quth, we just append an 'X-Amz-Signature' param to the end
         # of the query string.
-        request.url += '&X-Amz-Signature=%s' % signature
+        request.url += f'&X-Amz-Signature={signature}'
 
     def _normalize_url_path(self, path):
         # For S3, we do not normalize the path.
@@ -689,10 +705,10 @@ class S3ExpressQueryAuth(S3ExpressAuth):
 class SigV4QueryAuth(SigV4Auth):
     DEFAULT_EXPIRES = 3600
 
-    def __init__(self, credentials, service_name, region_name,
-                 expires=DEFAULT_EXPIRES):
-        super(SigV4QueryAuth, self).__init__(credentials, service_name,
-                                             region_name)
+    def __init__(
+        self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES
+    ):
+        super().__init__(credentials, service_name, region_name)
         self._expires = expires
 
     def _modify_request_before_signing(self, request):
@@ -726,8 +742,13 @@ class SigV4QueryAuth(SigV4Auth):
         # have repeated keys so we know we have single element lists which we
         # can convert back to scalar values.
         query_dict = dict(
-            [(k, v[0]) for k, v in
-             parse_qs(url_parts.query, keep_blank_values=True).items()])
+            [
+                (k, v[0])
+                for k, v in parse_qs(
+                    url_parts.query, keep_blank_values=True
+                ).items()
+            ]
+        )
         # The spec is particular about this.  It *has* to be:
         # https://<endpoint>?<operation params>&<auth params>
         # You can't mix the two types of params together, i.e just keep doing
@@ -742,8 +763,9 @@ class SigV4QueryAuth(SigV4Auth):
             request.data = ''
         if query_dict:
             operation_params = percent_encode_sequence(query_dict) + '&'
-        new_query_string = (operation_params +
-                            percent_encode_sequence(auth_params))
+        new_query_string = operation_params + percent_encode_sequence(
+            auth_params
+        )
         # url_parts is a tuple (and therefore immutable) so we need to create
         # a new url_parts with the new query string.
         # <part>   - <index>
@@ -760,7 +782,7 @@ class SigV4QueryAuth(SigV4Auth):
         # Rather than calculating an "Authorization" header, for the query
         # param quth, we just append an 'X-Amz-Signature' param to the end
         # of the query string.
-        request.url += '&X-Amz-Signature=%s' % signature
+        request.url += f'&X-Amz-Signature={signature}'
 
 
 class S3SigV4QueryAuth(SigV4QueryAuth):
@@ -774,6 +796,7 @@ class S3SigV4QueryAuth(SigV4QueryAuth):
     http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
 
     """
+
     def _normalize_url_path(self, path):
         # For S3, we do not normalize the path.
         return path
@@ -793,6 +816,7 @@ class S3SigV4PostAuth(SigV4Auth):
     Implementation doc here:
     http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
     """
+
     def add_auth(self, request):
         datetime_now = datetime.datetime.utcnow()
         request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP)
@@ -824,7 +848,8 @@ class S3SigV4PostAuth(SigV4Auth):
 
         # Dump the base64 encoded policy into the fields dictionary.
         fields['policy'] = base64.b64encode(
-            json.dumps(policy).encode('utf-8')).decode('utf-8')
+            json.dumps(policy).encode('utf-8')
+        ).decode('utf-8')
 
         fields['x-amz-signature'] = self.signature(fields['policy'], request)
 
@@ -854,7 +879,8 @@ class BearerAuth(TokenSigner):
 # the botocore.crt.auth module imports functions/classes defined above from
 # this module. In the future, we should isolate those functions/classes into
 # a separate utility module to avoid any potential circular import.
-import botocore.crt.auth
+import botocore.crt.auth  # noqa
+
 
 def resolve_auth_type(auth_trait):
     for auth_type in auth_trait:
@@ -869,6 +895,38 @@ def resolve_auth_type(auth_trait):
     raise UnsupportedSignatureVersionError(signature_version=auth_trait)
 
 
+def resolve_auth_scheme_preference(preference_list, auth_options):
+    service_supported = [scheme.split('#')[-1] for scheme in auth_options]
+
+    unsupported = [
+        scheme
+        for scheme in preference_list
+        if scheme not in AUTH_PREF_TO_SIGNATURE_VERSION
+    ]
+    if unsupported:
+        logger.debug(
+            f"Unsupported auth schemes in preference list: {', '.join(unsupported)}"
+        )
+
+    combined = preference_list + service_supported
+    prioritized_schemes = [
+        scheme
+        for scheme in dict.fromkeys(combined)
+        if scheme in service_supported
+    ]
+
+    for scheme in prioritized_schemes:
+        if scheme == 'noAuth':
+            return AUTH_PREF_TO_SIGNATURE_VERSION[scheme]
+        sig_version = AUTH_PREF_TO_SIGNATURE_VERSION.get(scheme)
+        if sig_version in AUTH_TYPE_MAPS:
+            return sig_version
+
+    raise UnsupportedSignatureVersionError(
+        signature_version=', '.join(sorted(service_supported))
+    )
+
+
 # Defined at the bottom instead of the top of the module because the Auth
 # classes weren't defined yet.
 AUTH_TYPE_MAPS = {
@@ -894,4 +952,14 @@ AUTH_TYPE_TO_SIGNATURE_VERSION = {
     'aws.auth#sigv4a': 'v4a',
     'smithy.api#httpBearerAuth': 'bearer',
     'smithy.api#noAuth': 'none',
-}
\ No newline at end of file
+}
+
+
+# Mapping used specifically for resolving user-configured auth scheme preferences.
+# This is similar to AUTH_TYPE_TO_SIGNATURE_VERSION, but uses simplified keys by
+# stripping the auth trait prefixes ('smithy.api#httpBearerAuth' → 'httpBearerAuth').
+# These simplified keys match what customers are expected to provide in configuration.
+AUTH_PREF_TO_SIGNATURE_VERSION = {
+    auth_scheme.split('#')[-1]: sig_version
+    for auth_scheme, sig_version in AUTH_TYPE_TO_SIGNATURE_VERSION.items()
+}
diff -pruN 2.23.6-1/awscli/botocore/awsrequest.py 2.31.35-1/awscli/botocore/awsrequest.py
--- 2.23.6-1/awscli/botocore/awsrequest.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/awsrequest.py	2025-11-12 19:17:29.000000000 +0000
@@ -50,7 +50,7 @@ class AWSHTTPResponse(HTTPResponse):
             return HTTPResponse._read_status(self)
 
 
-class AWSConnection(object):
+class AWSConnection:
     """Mixin for HTTPConnection that supports Expect 100-continue.
 
     This when mixed with a subclass of httplib.HTTPConnection (though
@@ -62,8 +62,9 @@ class AWSConnection(object):
     this against AWS services.
 
     """
+
     def __init__(self, *args, **kwargs):
-        super(AWSConnection, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self._original_response_cls = self.response_class
         # We'd ideally hook into httplib's states, but they're all
         # __mangled_vars so we use our own state var.  This variable is set
@@ -77,7 +78,7 @@ class AWSConnection(object):
         self._expect_header_set = False
 
     def close(self):
-        super(AWSConnection, self).close()
+        super().close()
         # Reset all of our instance state we were tracking.
         self._response_received = False
         self._expect_header_set = False
@@ -90,8 +91,9 @@ class AWSConnection(object):
         else:
             self._expect_header_set = False
             self.response_class = self._original_response_cls
-        rval = super(AWSConnection, self)._send_request(
-            method, url, body, headers, *args, **kwargs)
+        rval = super()._send_request(
+            method, url, body, headers, *args, **kwargs
+        )
         self._expect_header_set = False
         return rval
 
@@ -137,8 +139,10 @@ class AWSConnection(object):
                 # server (possibly via a proxy) from which it has never seen a
                 # 100 (Continue) status, the client SHOULD NOT wait for an
                 # indefinite period before sending the request body.
-                logger.debug("No response seen from server, continuing to "
-                             "send the response body.")
+                logger.debug(
+                    "No response seen from server, continuing to "
+                    "send the response body."
+                )
         if message_body is not None:
             # message_body was not a string (i.e. it is a file), and
             # we must run the risk of Nagle.
@@ -166,8 +170,9 @@ class AWSConnection(object):
             parts = maybe_status_line.split(None, 2)
             if self._is_100_continue_status(maybe_status_line):
                 self._consume_headers(fp)
-                logger.debug("100 Continue response seen, "
-                             "now sending request body.")
+                logger.debug(
+                    "100 Continue response seen, " "now sending request body."
+                )
                 self._send_message_body(message_body)
             elif len(parts) == 3 and parts[0].startswith(b'HTTP/'):
                 # From the RFC:
@@ -182,12 +187,18 @@ class AWSConnection(object):
                 # So if we don't get a 100 Continue response, then
                 # whatever the server has sent back is the final response
                 # and don't send the message_body.
-                logger.debug("Received a non 100 Continue response "
-                             "from the server, NOT sending request body.")
-                status_tuple = (parts[0].decode('ascii'),
-                                int(parts[1]), parts[2].decode('ascii'))
+                logger.debug(
+                    "Received a non 100 Continue response "
+                    "from the server, NOT sending request body."
+                )
+                status_tuple = (
+                    parts[0].decode('ascii'),
+                    int(parts[1]),
+                    parts[2].decode('ascii'),
+                )
                 response_class = functools.partial(
-                    AWSHTTPResponse, status_tuple=status_tuple)
+                    AWSHTTPResponse, status_tuple=status_tuple
+                )
                 self.response_class = response_class
                 self._response_received = True
         finally:
@@ -199,25 +210,29 @@ class AWSConnection(object):
 
     def send(self, str):
         if self._response_received:
-            logger.debug("send() called, but reseponse already received. "
-                         "Not sending data.")
+            logger.debug(
+                "send() called, but reseponse already received. "
+                "Not sending data."
+            )
             return
-        return super(AWSConnection, self).send(str)
+        return super().send(str)
 
     def _is_100_continue_status(self, maybe_status_line):
         parts = maybe_status_line.split(None, 2)
         # Check for HTTP/<version> 100 Continue\r\n
         return (
-            len(parts) >= 3 and parts[0].startswith(b'HTTP/') and
-            parts[1] == b'100')
+            len(parts) >= 2
+            and parts[0].startswith(b'HTTP/')
+            and parts[1] == b'100'
+        )
 
 
 class AWSHTTPConnection(AWSConnection, HTTPConnection):
-    """ An HTTPConnection that supports 100 Continue behavior. """
+    """An HTTPConnection that supports 100 Continue behavior."""
 
 
 class AWSHTTPSConnection(AWSConnection, VerifiedHTTPSConnection):
-    """ An HTTPSConnection that supports 100 Continue behavior. """
+    """An HTTPSConnection that supports 100 Continue behavior."""
 
 
 class AWSHTTPConnectionPool(HTTPConnectionPool):
@@ -228,8 +243,9 @@ class AWSHTTPSConnectionPool(HTTPSConnec
     ConnectionCls = AWSHTTPSConnection
 
 
-def prepare_request_dict(request_dict, endpoint_url, context=None,
-                         user_agent=None):
+def prepare_request_dict(
+    request_dict, endpoint_url, context=None, user_agent=None
+):
     """
     This method prepares a request dict to be created into an
     AWSRequestObject. This prepares the request dict by adding the
@@ -259,9 +275,9 @@ def prepare_request_dict(request_dict, e
         percent_encode_sequence = botocore.utils.percent_encode_sequence
         encoded_query_string = percent_encode_sequence(r['query_string'])
         if '?' not in url:
-            url += '?%s' % encoded_query_string
+            url += f'?{encoded_query_string}'
         else:
-            url += '&%s' % encoded_query_string
+            url += f'&{encoded_query_string}'
     r['url'] = url
     r['context'] = context
     if context is None:
@@ -321,7 +337,7 @@ def _urljoin(endpoint_url, url_path, hos
     return reconstructed
 
 
-class AWSRequestPreparer(object):
+class AWSRequestPreparer:
     """
     This class performs preparation on AWSRequest objects similar to that of
     the PreparedRequest class does in the requests library. However, the logic
@@ -341,6 +357,7 @@ class AWSRequestPreparer(object):
 
         This class does not prepare the method, auth or cookies.
     """
+
     def prepare(self, original):
         method = original.method
         url = self._prepare_url(original)
@@ -354,7 +371,7 @@ class AWSRequestPreparer(object):
         url = original.url
         if original.params:
             params = urlencode(list(original.params.items()), doseq=True)
-            url = '%s?%s' % (url, params)
+            url = f'{url}?{params}'
         return url
 
     def _prepare_headers(self, original, prepared_body=None):
@@ -402,7 +419,7 @@ class AWSRequestPreparer(object):
         return botocore.utils.determine_content_length(body)
 
 
-class AWSRequest(object):
+class AWSRequest:
     """Represents the elements of an HTTP request.
 
     This class was originally inspired by requests.models.Request, but has been
@@ -412,15 +429,16 @@ class AWSRequest(object):
 
     _REQUEST_PREPARER_CLS = AWSRequestPreparer
 
-    def __init__(self,
-                 method=None,
-                 url=None,
-                 headers=None,
-                 data=None,
-                 params=None,
-                 auth_path=None,
-                 stream_output=False):
-
+    def __init__(
+        self,
+        method=None,
+        url=None,
+        headers=None,
+        data=None,
+        params=None,
+        auth_path=None,
+        stream_output=False,
+    ):
         self._request_preparer = self._REQUEST_PREPARER_CLS()
 
         # Default empty dicts for dict params.
@@ -459,7 +477,7 @@ class AWSRequest(object):
         return body
 
 
-class AWSPreparedRequest(object):
+class AWSPreparedRequest:
     """A data class representing a finalized request to be sent over the wire.
 
     Requests at this stage should be treated as final, and the properties of
@@ -471,6 +489,7 @@ class AWSPreparedRequest(object):
     :ivar body: The HTTP body.
     :ivar stream_output: If the response for this request should be streamed.
     """
+
     def __init__(self, method, url, headers, body, stream_output):
         self.method = method
         self.url = url
@@ -509,7 +528,7 @@ class AWSPreparedRequest(object):
             raise UnseekableStreamError(stream_object=self.body)
 
 
-class AWSResponse(object):
+class AWSResponse:
     """A data class representing an HTTP response.
 
     This class was originally inspired by requests.models.Response, but has
@@ -539,7 +558,7 @@ class AWSResponse(object):
             # NOTE: requests would attempt to call stream and fall back
             # to a custom generator that would call read in a loop, but
             # we don't rely on this behavior
-            self._content = bytes().join(self.raw.stream()) or bytes()
+            self._content = b''.join(self.raw.stream()) or b''
 
         return self._content
 
@@ -558,7 +577,7 @@ class AWSResponse(object):
             return self.content.decode('utf-8')
 
 
-class _HeaderKey(object):
+class _HeaderKey:
     def __init__(self, key):
         self._key = key
         self._lower = key.lower()
@@ -577,7 +596,8 @@ class _HeaderKey(object):
 
 
 class HeadersDict(MutableMapping):
-    """A case-insenseitive dictionary to represent HTTP headers. """
+    """A case-insenseitive dictionary to represent HTTP headers."""
+
     def __init__(self, *args, **kwargs):
         self._dict = {}
         self.update(*args, **kwargs)
diff -pruN 2.23.6-1/awscli/botocore/client.py 2.31.35-1/awscli/botocore/client.py
--- 2.23.6-1/awscli/botocore/client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/client.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,20 @@
 import functools
 import logging
 
-from botocore import UNSIGNED, waiter, xform_name
+from botocore import (
+    UNSIGNED,  # noqa
+    waiter,
+    xform_name,
+)
 from botocore.args import ClientArgsCreator
 from botocore.auth import AUTH_TYPE_MAPS, resolve_auth_type
 from botocore.awsrequest import prepare_request_dict
 from botocore.compress import maybe_compress_request
-from botocore.config import Config
 
 # Keep this imported.  There's pre-existing code that uses
 # "from botocore.client import UNSIGNED".
 from botocore.config import Config
+from botocore.context import with_current_context
 from botocore.credentials import RefreshableCredentials
 from botocore.discovery import (
     EndpointDiscoveryHandler,
@@ -31,7 +35,7 @@ from botocore.discovery import (
 )
 from botocore.docs.docstring import ClientMethodDocstring, PaginatorDocstring
 from botocore.exceptions import (
-    ClientError,
+    ClientError,  # noqa
     DataNotFoundError,
     InvalidEndpointDiscoveryConfigurationError,
     OperationNotPageableError,
@@ -47,7 +51,7 @@ from botocore.httpchecksum import (
 from botocore.model import ServiceModel
 from botocore.paginate import Paginator
 from botocore.retries import adaptive, standard
-from botocore.useragent import UserAgentString
+from botocore.useragent import UserAgentString, register_feature_id
 from botocore.utils import (
     CachedProperty,
     EventbridgeSignerSetter,
@@ -58,27 +62,25 @@ from botocore.utils import (
     get_service_module_name,
 )
 
-_LEGACY_SIGNATURE_VERSIONS = frozenset(
-    (
-        'v2',
-        'v3',
-        'v3https',
-        'v4',
-        's3',
-        's3v4',
-    )
-)
-
-
 logger = logging.getLogger(__name__)
 history_recorder = get_global_history_recorder()
 
 
-class ClientCreator(object):
+class ClientCreator:
     """Creates client objects for a service."""
-    def __init__(self, loader, endpoint_resolver, user_agent, event_emitter,
-                 response_parser_factory=None, exceptions_factory=None,
-                 config_store=None, user_agent_creator=None):
+
+    def __init__(
+        self,
+        loader,
+        endpoint_resolver,
+        user_agent,
+        event_emitter,
+        response_parser_factory=None,
+        exceptions_factory=None,
+        config_store=None,
+        user_agent_creator=None,
+        auth_token_resolver=None,
+    ):
         self._loader = loader
         self._endpoint_resolver = endpoint_resolver
         self._user_agent = user_agent
@@ -91,13 +93,23 @@ class ClientCreator(object):
         # future).
         self._config_store = config_store
         self._user_agent_creator = user_agent_creator
+        self._auth_token_resolver = auth_token_resolver
 
-    def create_client(self, service_name, region_name, is_secure=True,
-                      endpoint_url=None, verify=None,
-                      credentials=None, scoped_config=None,
-                      client_config=None, auth_token=None):
+    def create_client(
+        self,
+        service_name,
+        region_name,
+        is_secure=True,
+        endpoint_url=None,
+        verify=None,
+        credentials=None,
+        scoped_config=None,
+        client_config=None,
+        auth_token=None,
+    ):
         responses = self._event_emitter.emit(
-            'choose-service-name', service_name=service_name)
+            'choose-service-name', service_name=service_name
+        )
         service_name = first_non_none_response(responses, default=service_name)
         service_model = self._load_service_model(service_name)
 
@@ -117,7 +129,8 @@ class ClientCreator(object):
 
         cls = self._create_client_class(service_name, service_model)
         region_name, client_config = self._normalize_fips_region(
-            region_name, client_config)
+            region_name, client_config
+        )
         if auth := service_model.metadata.get('auth'):
             service_signature_version = resolve_auth_type(auth)
         else:
@@ -125,13 +138,22 @@ class ClientCreator(object):
                 'signatureVersion'
             )
         endpoint_bridge = ClientEndpointBridge(
-            self._endpoint_resolver, scoped_config, client_config,
+            self._endpoint_resolver,
+            scoped_config,
+            client_config,
             service_signing_name=service_model.metadata.get('signingName'),
             config_store=self._config_store,
             service_signature_version=service_signature_version,
         )
+        if token := self._evaluate_client_specific_token(
+            service_model.signing_name
+        ):
+            auth_token = token
         client_args = self._get_client_args(
-            service_model, region_name, is_secure, endpoint_url,
+            service_model,
+            region_name,
+            is_secure,
+            endpoint_url,
             verify,
             credentials,
             scoped_config,
@@ -146,6 +168,7 @@ class ClientCreator(object):
         self._register_s3_events(service_client, client_config, scoped_config)
         self._register_s3express_events(client=service_client)
         self._register_s3_control_events(service_client)
+        self._register_importexport_events(client=service_client)
         self._register_endpoint_discovery(
             service_client, endpoint_url, client_config
         )
@@ -162,38 +185,37 @@ class ClientCreator(object):
         bases = [BaseClient]
         service_id = service_model.service_id.hyphenize()
         self._event_emitter.emit(
-            'creating-client-class.%s' % service_id,
+            f'creating-client-class.{service_id}',
             class_attributes=class_attributes,
-            base_classes=bases)
+            base_classes=bases,
+        )
         class_name = get_service_module_name(service_model)
         cls = type(str(class_name), tuple(bases), class_attributes)
         return cls
 
-    def _normalize_fips_region(self, region_name,
-                               client_config):
+    def _normalize_fips_region(self, region_name, client_config):
         if region_name is not None:
-            normalized_region_name = region_name.replace(
-                'fips-', '').replace('-fips', '')
+            normalized_region_name = region_name.replace('fips-', '').replace(
+                '-fips', ''
+            )
             # If region has been transformed then set flag
             if normalized_region_name != region_name:
                 config_use_fips_endpoint = Config(use_fips_endpoint=True)
                 if client_config:
                     # Keeping endpoint setting client specific
                     client_config = client_config.merge(
-                        config_use_fips_endpoint)
+                        config_use_fips_endpoint
+                    )
                 else:
                     client_config = config_use_fips_endpoint
                 logger.warning(
-                    'transforming region from %s to %s and setting '
+                    f'transforming region from {region_name} to {normalized_region_name} and setting '
                     'use_fips_endpoint to true. client should not '
-                    'be configured with a fips psuedo region.' % (
-                        region_name, normalized_region_name
-                    )
+                    'be configured with a fips psuedo region.'
                 )
                 region_name = normalized_region_name
         return region_name, client_config
 
-
     def _load_service_model(self, service_name):
         json_model = self._loader.load_service_model(service_name, 'service-2')
         service_model = ServiceModel(json_model, service_name=service_name)
@@ -201,7 +223,8 @@ class ClientCreator(object):
 
     def _load_service_endpoints_ruleset(self, service_name):
         return self._loader.load_service_model(
-            service_name, 'endpoint-rule-set-1',
+            service_name,
+            'endpoint-rule-set-1',
         )
 
     def _register_retries(self, client):
@@ -211,6 +234,9 @@ class ClientCreator(object):
         elif retry_mode == 'adaptive':
             self._register_v2_standard_retries(client)
             self._register_v2_adaptive_retries(client)
+        else:
+            return
+        register_feature_id(f'RETRY_MODE_{retry_mode.upper()}')
 
     def _register_v2_standard_retries(self, client):
         max_attempts = client.meta.config.retries.get('max_attempts')
@@ -236,17 +262,22 @@ class ClientCreator(object):
             enabled = config.endpoint_discovery_enabled
         elif self._config_store:
             enabled = self._config_store.get_config_variable(
-                'endpoint_discovery_enabled')
+                'endpoint_discovery_enabled'
+            )
 
         enabled = self._normalize_endpoint_discovery_config(enabled)
         if enabled and self._requires_endpoint_discovery(client, enabled):
             discover = enabled is True
-            manager = EndpointDiscoveryManager(client, always_discover=discover)
+            manager = EndpointDiscoveryManager(
+                client, always_discover=discover
+            )
             handler = EndpointDiscoveryHandler(manager)
             handler.register(events, service_id)
         else:
-            events.register('before-parameter-build',
-                            block_endpoint_discovery_required_operations)
+            events.register(
+                'before-parameter-build',
+                block_endpoint_discovery_required_operations,
+            )
 
     def _normalize_endpoint_discovery_config(self, enabled):
         """Config must either be a boolean-string or string-literal 'auto'"""
@@ -274,7 +305,7 @@ class ClientCreator(object):
         EventbridgeSignerSetter(
             endpoint_resolver=self._endpoint_resolver,
             region=client.meta.region_name,
-            endpoint_url=endpoint_url
+            endpoint_url=endpoint_url,
         ).register(client.meta.events)
 
     def _register_s3express_events(
@@ -299,26 +330,66 @@ class ClientCreator(object):
             return
         S3ControlArnParamHandlerv2().register(client.meta.events)
 
+    def _register_importexport_events(
+        self,
+        client,
+        endpoint_bridge=None,
+        endpoint_url=None,
+        client_config=None,
+        scoped_config=None,
+    ):
+        if client.meta.service_model.service_name != 'importexport':
+            return
+        self._set_importexport_signature_version(
+            client.meta, client_config, scoped_config
+        )
+
+    def _set_importexport_signature_version(
+        self, client_meta, client_config, scoped_config
+    ):
+        # This will return the manually configured signature version, or None
+        # if none was manually set. If a customer manually sets the signature
+        # version, we always want to use what they set.
+        configured_signature_version = _get_configured_signature_version(
+            'importexport', client_config, scoped_config
+        )
+        if configured_signature_version is not None:
+            return
+
+        # importexport has a modeled signatureVersion of v2, but we
+        # previously switched to v4 via endpoint.json before endpoint rulesets.
+        # Override the model's signatureVersion for backwards compatability.
+        client_meta.events.register(
+            'choose-signer.importexport', self._default_signer_to_sigv4
+        )
+
+    def _default_signer_to_sigv4(self, signature_version, **kwargs):
+        return 'v4'
+
     def _get_client_args(
-            self,
-            service_model,
-            region_name,
-            is_secure,
-            endpoint_url,
-            verify,
-            credentials,
-            scoped_config,
-            client_config,
-            endpoint_bridge,
-            auth_token,
-            endpoints_ruleset_data,
-            partition_data,
+        self,
+        service_model,
+        region_name,
+        is_secure,
+        endpoint_url,
+        verify,
+        credentials,
+        scoped_config,
+        client_config,
+        endpoint_bridge,
+        auth_token,
+        endpoints_ruleset_data,
+        partition_data,
     ):
         args_creator = ClientArgsCreator(
-            self._event_emitter, self._user_agent,
-            self._response_parser_factory, self._loader,
-            self._exceptions_factory, config_store=self._config_store,
-            user_agent_creator=self._user_agent_creator)
+            self._event_emitter,
+            self._user_agent,
+            self._response_parser_factory,
+            self._loader,
+            self._exceptions_factory,
+            config_store=self._config_store,
+            user_agent_creator=self._user_agent_creator,
+        )
         return args_creator.get_client_args(
             service_model,
             region_name,
@@ -339,7 +410,8 @@ class ClientCreator(object):
         for operation_name in service_model.operation_names:
             py_operation_name = xform_name(operation_name)
             op_dict[py_operation_name] = self._create_api_method(
-                py_operation_name, operation_name, service_model)
+                py_operation_name, operation_name, service_model
+            )
         return op_dict
 
     def _create_name_mapping(self, service_model):
@@ -351,15 +423,17 @@ class ClientCreator(object):
             mapping[py_operation_name] = operation_name
         return mapping
 
-    def _create_api_method(self, py_operation_name, operation_name,
-                           service_model):
+    def _create_api_method(
+        self, py_operation_name, operation_name, service_model
+    ):
         def _api_call(self, *args, **kwargs):
             # We're accepting *args so that we can give a more helpful
             # error message than TypeError: _api_call takes exactly
             # 1 argument.
             if args:
                 raise TypeError(
-                    "%s() only accepts keyword arguments." % py_operation_name)
+                    f"{py_operation_name}() only accepts keyword arguments."
+                )
             # The "self" in this scope is referring to the BaseClient.
             return self._make_api_call(operation_name, kwargs)
 
@@ -372,14 +446,23 @@ class ClientCreator(object):
             method_name=operation_name,
             event_emitter=self._event_emitter,
             method_description=operation_model.documentation,
-            example_prefix='response = client.%s' % py_operation_name,
-            include_signature=False
+            example_prefix=f'response = client.{py_operation_name}',
+            include_signature=False,
         )
         _api_call.__doc__ = docstring
         return _api_call
 
+    def _evaluate_client_specific_token(self, signing_name):
+        # Resolves an auth_token for the given signing_name.
+        # Returns None if no resolver is set or if resolution fails.
+        resolver = self._auth_token_resolver
+        if not resolver or not signing_name:
+            return None
+
+        return resolver(signing_name=signing_name)
 
-class ClientEndpointBridge(object):
+
+class ClientEndpointBridge:
     """Bridges endpoint data and client creation
 
     This class handles taking out the relevant arguments from the endpoint
@@ -393,10 +476,16 @@ class ClientEndpointBridge(object):
     DEFAULT_ENDPOINT = '{service}.{region}.amazonaws.com'
     _DUALSTACK_CUSTOMIZED_SERVICES = ['s3', 's3-control']
 
-    def __init__(self, endpoint_resolver, scoped_config=None,
-                 client_config=None, default_endpoint=None,
-                 service_signing_name=None, config_store=None,
-                 service_signature_version=None):
+    def __init__(
+        self,
+        endpoint_resolver,
+        scoped_config=None,
+        client_config=None,
+        default_endpoint=None,
+        service_signing_name=None,
+        config_store=None,
+        service_signature_version=None,
+    ):
         self.service_signing_name = service_signing_name
         self.endpoint_resolver = endpoint_resolver
         self.scoped_config = scoped_config
@@ -405,16 +494,19 @@ class ClientEndpointBridge(object):
         self.config_store = config_store
         self.service_signature_version = service_signature_version
 
-    def resolve(self, service_name, region_name=None, endpoint_url=None,
-                is_secure=True):
+    def resolve(
+        self, service_name, region_name=None, endpoint_url=None, is_secure=True
+    ):
         region_name = self._check_default_region(service_name, region_name)
         use_dualstack_endpoint = self._resolve_use_dualstack_endpoint(
-            service_name)
+            service_name
+        )
         use_fips_endpoint = self._resolve_endpoint_variant_config_var(
             'use_fips_endpoint'
         )
         resolved = self.endpoint_resolver.construct_endpoint(
-            service_name, region_name,
+            service_name,
+            region_name,
             use_dualstack_endpoint=use_dualstack_endpoint,
             use_fips_endpoint=use_fips_endpoint,
         )
@@ -425,17 +517,21 @@ class ClientEndpointBridge(object):
             # TODO: fallback partition_name should be configurable in the
             # future for users to define as needed.
             resolved = self.endpoint_resolver.construct_endpoint(
-                service_name, region_name, partition_name='aws',
+                service_name,
+                region_name,
+                partition_name='aws',
                 use_dualstack_endpoint=use_dualstack_endpoint,
                 use_fips_endpoint=use_fips_endpoint,
             )
 
         if resolved:
             return self._create_endpoint(
-                resolved, service_name, region_name, endpoint_url, is_secure)
+                resolved, service_name, region_name, endpoint_url, is_secure
+            )
         else:
-            return self._assume_endpoint(service_name, region_name,
-                                         endpoint_url, is_secure)
+            return self._assume_endpoint(
+                service_name, region_name, endpoint_url, is_secure
+            )
 
     def resolver_uses_builtin_data(self):
         return self.endpoint_resolver.uses_builtin_data
@@ -447,23 +543,31 @@ class ClientEndpointBridge(object):
         if self.client_config and self.client_config.region_name is not None:
             return self.client_config.region_name
 
-    def _create_endpoint(self, resolved, service_name, region_name,
-                         endpoint_url, is_secure):
+    def _create_endpoint(
+        self, resolved, service_name, region_name, endpoint_url, is_secure
+    ):
         region_name, signing_region = self._pick_region_values(
-            resolved, region_name, endpoint_url)
+            resolved, region_name, endpoint_url
+        )
         if endpoint_url is None:
             endpoint_url = self._make_url(
-                resolved.get('hostname'), is_secure,
-                resolved.get('protocols', [])
+                resolved.get('hostname'),
+                is_secure,
+                resolved.get('protocols', []),
             )
         signature_version = self._resolve_signature_version(
-            service_name, resolved)
+            service_name, resolved
+        )
         signing_name = self._resolve_signing_name(service_name, resolved)
         return self._create_result(
-            service_name=service_name, region_name=region_name,
-            signing_region=signing_region, signing_name=signing_name,
-            endpoint_url=endpoint_url, metadata=resolved,
-            signature_version=signature_version)
+            service_name=service_name,
+            region_name=region_name,
+            signing_region=signing_region,
+            signing_name=signing_name,
+            endpoint_url=endpoint_url,
+            metadata=resolved,
+            signature_version=signature_version,
+        )
 
     def _resolve_endpoint_variant_config_var(self, config_var):
         client_config = self.client_config
@@ -482,7 +586,8 @@ class ClientEndpointBridge(object):
         if s3_dualstack_mode is not None:
             return s3_dualstack_mode
         return self._resolve_endpoint_variant_config_var(
-            'use_dualstack_endpoint')
+            'use_dualstack_endpoint'
+        )
 
     def _is_s3_dualstack_mode(self, service_name):
         if service_name not in self._DUALSTACK_CUSTOMIZED_SERVICES:
@@ -492,39 +597,62 @@ class ClientEndpointBridge(object):
         # ClientArgsCreator.  _resolve_signature_version also has similarly
         # duplicated logic.
         client_config = self.client_config
-        if client_config is not None and client_config.s3 is not None and \
-                'use_dualstack_endpoint' in client_config.s3:
+        if (
+            client_config is not None
+            and client_config.s3 is not None
+            and 'use_dualstack_endpoint' in client_config.s3
+        ):
             # Client config trumps scoped config.
             return client_config.s3['use_dualstack_endpoint']
         if self.scoped_config is not None:
             enabled = self.scoped_config.get('s3', {}).get(
-                'use_dualstack_endpoint')
+                'use_dualstack_endpoint'
+            )
             if enabled in [True, 'True', 'true']:
                 return True
 
-    def _assume_endpoint(self, service_name, region_name, endpoint_url,
-                         is_secure):
+    def _assume_endpoint(
+        self, service_name, region_name, endpoint_url, is_secure
+    ):
         if endpoint_url is None:
             # Expand the default hostname URI template.
             hostname = self.default_endpoint.format(
-                service=service_name, region=region_name)
-            endpoint_url = self._make_url(hostname, is_secure,
-                                          ['http', 'https'])
-        logger.debug('Assuming an endpoint for %s, %s: %s',
-                     service_name, region_name, endpoint_url)
+                service=service_name, region=region_name
+            )
+            endpoint_url = self._make_url(
+                hostname, is_secure, ['http', 'https']
+            )
+        logger.debug(
+            'Assuming an endpoint for %s, %s: %s',
+            service_name,
+            region_name,
+            endpoint_url,
+        )
         # We still want to allow the user to provide an explicit version.
         signature_version = self._resolve_signature_version(
-            service_name, {'signatureVersions': ['v4']})
+            service_name, {'signatureVersions': ['v4']}
+        )
         signing_name = self._resolve_signing_name(service_name, resolved={})
         return self._create_result(
-            service_name=service_name, region_name=region_name,
-            signing_region=region_name, signing_name=signing_name,
-            signature_version=signature_version, endpoint_url=endpoint_url,
-            metadata={})
-
-    def _create_result(self, service_name, region_name, signing_region,
-                       signing_name, endpoint_url, signature_version,
-                       metadata):
+            service_name=service_name,
+            region_name=region_name,
+            signing_region=region_name,
+            signing_name=signing_name,
+            signature_version=signature_version,
+            endpoint_url=endpoint_url,
+            metadata={},
+        )
+
+    def _create_result(
+        self,
+        service_name,
+        region_name,
+        signing_region,
+        signing_name,
+        endpoint_url,
+        signature_version,
+        metadata,
+    ):
         return {
             'service_name': service_name,
             'region_name': region_name,
@@ -532,7 +660,7 @@ class ClientEndpointBridge(object):
             'signing_name': signing_name,
             'endpoint_url': endpoint_url,
             'signature_version': signature_version,
-            'metadata': metadata
+            'metadata': metadata,
         }
 
     def _make_url(self, hostname, is_secure, supported_protocols):
@@ -540,12 +668,14 @@ class ClientEndpointBridge(object):
             scheme = 'https'
         else:
             scheme = 'http'
-        return '%s://%s' % (scheme, hostname)
+        return f'{scheme}://{hostname}'
 
     def _resolve_signing_name(self, service_name, resolved):
         # CredentialScope overrides everything else.
-        if 'credentialScope' in resolved \
-                and 'service' in resolved['credentialScope']:
+        if (
+            'credentialScope' in resolved
+            and 'service' in resolved['credentialScope']
+        ):
             return resolved['credentialScope']['service']
         # Use the signingName from the model if present.
         if self.service_signing_name:
@@ -568,44 +698,48 @@ class ClientEndpointBridge(object):
             # custom endpoints.
             region_name = resolved['endpointName']
             signing_region = region_name
-            if 'credentialScope' in resolved \
-                    and 'region' in resolved['credentialScope']:
+            if (
+                'credentialScope' in resolved
+                and 'region' in resolved['credentialScope']
+            ):
                 signing_region = resolved['credentialScope']['region']
         return region_name, signing_region
 
     def _resolve_signature_version(self, service_name, resolved):
         configured_version = _get_configured_signature_version(
-            service_name, self.client_config, self.scoped_config)
+            service_name, self.client_config, self.scoped_config
+        )
         if configured_version is not None:
             return configured_version
 
-        potential_versions = resolved.get('signatureVersions', [])
-        if (
-            self.service_signature_version is not None
-            and self.service_signature_version
-            not in _LEGACY_SIGNATURE_VERSIONS
-        ):
-            # Prefer the service model as most specific
-            # source of truth for new signature versions.
-            potential_versions = [self.service_signature_version]
+        # These have since added the "auth" key to the service model
+        # with "aws.auth#sigv4", but preserve existing behavior from
+        # when we preferred endpoints.json over the service models
+        if service_name in ('s3', 's3-control'):
+            return 's3v4'
 
-        # Pick a signature version from the endpoint metadata if present.
-        if 'signatureVersions' in resolved:
-            if service_name == 's3':
-                return 's3v4'
+        if self.service_signature_version is not None:
+            # Prefer the service model
+            potential_versions = [self.service_signature_version]
+        else:
+            # Fall back to endpoints.json to preserve existing behavior, which
+            # may be useful for users who have custom service models
+            potential_versions = resolved.get('signatureVersions', [])
+            # This was added for the V2 -> V4 transition,
+            # for services that added V4 after V2 in endpoints.json
             if 'v4' in potential_versions:
                 return 'v4'
-            # Now just iterate over the signature versions in order until we
-            # find the first one that is known to Botocore.
-            for known in potential_versions:
-                if known in AUTH_TYPE_MAPS:
-                    return known
+        # Now just iterate over the signature versions in order until we
+        # find the first one that is known to Botocore.
+        for known in potential_versions:
+            if known in AUTH_TYPE_MAPS:
+                return known
         raise UnknownSignatureVersionError(
             signature_version=potential_versions
         )
 
 
-class BaseClient(object):
+class BaseClient:
     # This is actually reassigned with the py->op_name mapping
     # when the client creator creates the subclass.  This value is used
     # because calls such as client.get_paginator('list_objects') use the
@@ -614,10 +748,21 @@ class BaseClient(object):
     # we need the reverse mapping here.
     _PY_TO_OP_NAME = {}
 
-    def __init__(self, serializer, endpoint, response_parser,
-                 event_emitter, request_signer, service_model, loader,
-                 client_config, partition, exceptions_factory,
-                 endpoint_ruleset_resolver, user_agent_creator=None):
+    def __init__(
+        self,
+        serializer,
+        endpoint,
+        response_parser,
+        event_emitter,
+        request_signer,
+        service_model,
+        loader,
+        client_config,
+        partition,
+        exceptions_factory,
+        endpoint_ruleset_resolver,
+        user_agent_creator=None,
+    ):
         self._serializer = serializer
         self._endpoint = endpoint
         self._ruleset_resolver = endpoint_ruleset_resolver
@@ -626,9 +771,14 @@ class BaseClient(object):
         self._cache = {}
         self._loader = loader
         self._client_config = client_config
-        self.meta = ClientMeta(event_emitter, self._client_config,
-                               endpoint.host, service_model,
-                               self._PY_TO_OP_NAME, partition)
+        self.meta = ClientMeta(
+            event_emitter,
+            self._client_config,
+            endpoint.host,
+            service_model,
+            self._PY_TO_OP_NAME,
+            partition,
+        )
         self._exceptions_factory = exceptions_factory
         self._exceptions = None
         self._user_agent_creator = user_agent_creator
@@ -641,49 +791,60 @@ class BaseClient(object):
         self._register_handlers()
 
     def __getattr__(self, item):
-        event_name = 'getattr.%s.%s' % (
-            self._service_model.service_id.hyphenize(), item
+        event_name = (
+            f'getattr.{self._service_model.service_id.hyphenize()}.{item}'
         )
         handler, event_response = self.meta.events.emit_until_response(
-            event_name, client=self)
+            event_name, client=self
+        )
 
         if event_response is not None:
             return event_response
 
         raise AttributeError(
-            "'%s' object has no attribute '%s'" % (
-                self.__class__.__name__, item)
+            f"'{self.__class__.__name__}' object has no attribute '{item}'"
         )
 
     def _register_handlers(self):
         # Register the handler required to sign requests.
         service_id = self.meta.service_model.service_id.hyphenize()
         self.meta.events.register(
-            'request-created.%s' % service_id,
-            self._request_signer.handler
+            f'request-created.{service_id}', self._request_signer.handler
+        )
+        # Rebuild user agent string right before request is sent
+        # to ensure all registered features are included.
+        self.meta.events.register_last(
+            f"request-created.{service_id}",
+            self._user_agent_creator.rebuild_and_replace_user_agent_handler,
         )
 
     @property
     def _service_model(self):
         return self.meta.service_model
 
+    @with_current_context()
     def _make_api_call(self, operation_name, api_params):
         operation_model = self._service_model.operation_model(operation_name)
         service_name = self._service_model.service_name
-        history_recorder.record('API_CALL', {
-            'service': service_name,
-            'operation': operation_name,
-            'params': api_params,
-        })
+        history_recorder.record(
+            'API_CALL',
+            {
+                'service': service_name,
+                'operation': operation_name,
+                'params': api_params,
+            },
+        )
         if operation_model.deprecated:
-            logger.debug('Warning: %s.%s() is deprecated',
-                         service_name, operation_name)
+            logger.debug(
+                'Warning: %s.%s() is deprecated', service_name, operation_name
+            )
         request_context = {
             'client_region': self.meta.region_name,
             'client_config': self.meta.config,
             'has_streaming_input': operation_model.has_streaming_input,
             'auth_type': operation_model.resolved_auth_type,
             'unsigned_payload': operation_model.unsigned_payload,
+            'auth_options': self._service_model.metadata.get('auth'),
         }
 
         api_params = self._emit_api_params(
@@ -714,11 +875,12 @@ class BaseClient(object):
 
         service_id = self._service_model.service_id.hyphenize()
         handler, event_response = self.meta.events.emit_until_response(
-            'before-call.{service_id}.{operation_name}'.format(
-                service_id=service_id,
-                operation_name=operation_name),
-            model=operation_model, params=request_dict,
-            request_signer=self._request_signer, context=request_context)
+            f'before-call.{service_id}.{operation_name}',
+            model=operation_model,
+            params=request_dict,
+            request_signer=self._request_signer,
+            context=request_context,
+        )
 
         if event_response is not None:
             http, parsed_response = event_response
@@ -728,14 +890,15 @@ class BaseClient(object):
             )
             apply_request_checksum(request_dict)
             http, parsed_response = self._make_request(
-                operation_model, request_dict, request_context)
+                operation_model, request_dict, request_context
+            )
 
         self.meta.events.emit(
-            'after-call.{service_id}.{operation_name}'.format(
-                service_id=service_id,
-                operation_name=operation_name),
-            http_response=http, parsed=parsed_response,
-            model=operation_model, context=request_context
+            f'after-call.{service_id}.{operation_name}',
+            http_response=http,
+            parsed=parsed_response,
+            model=operation_model,
+            context=request_context,
         )
 
         if http.status_code >= 300:
@@ -750,24 +913,24 @@ class BaseClient(object):
             return self._endpoint.make_request(operation_model, request_dict)
         except Exception as e:
             self.meta.events.emit(
-                'after-call-error.{service_id}.{operation_name}'.format(
-                    service_id=self._service_model.service_id.hyphenize(),
-                    operation_name=operation_model.name),
-                exception=e, context=request_context
+                f'after-call-error.{self._service_model.service_id.hyphenize()}.{operation_model.name}',
+                exception=e,
+                context=request_context,
             )
             raise
 
     def _convert_to_request_dict(
-            self,
-            api_params,
-            operation_model,
-            endpoint_url,
-            context=None,
-            headers=None,
-            set_user_agent_header=True,
+        self,
+        api_params,
+        operation_model,
+        endpoint_url,
+        context=None,
+        headers=None,
+        set_user_agent_header=True,
     ):
         request_dict = self._serializer.serialize_to_request(
-            api_params, operation_model)
+            api_params, operation_model
+        )
         if not self._client_config.inject_host_prefix:
             request_dict.pop('host_prefix', None)
         if headers is not None:
@@ -794,19 +957,22 @@ class BaseClient(object):
         # parameters or return a new set of parameters to use.
         service_id = self._service_model.service_id.hyphenize()
         responses = self.meta.events.emit(
-            'provide-client-params.{service_id}.{operation_name}'.format(
-                service_id=service_id,
-                operation_name=operation_name),
-            params=api_params, model=operation_model, context=context)
+            f'provide-client-params.{service_id}.{operation_name}',
+            params=api_params,
+            model=operation_model,
+            context=context,
+        )
         api_params = first_non_none_response(responses, default=api_params)
 
-        event_name = (
-            'before-parameter-build.{service_id}.{operation_name}')
+        event_name = 'before-parameter-build.{service_id}.{operation_name}'
         self.meta.events.emit(
             event_name.format(
-                service_id=service_id,
-                operation_name=operation_name),
-            params=api_params, model=operation_model, context=context)
+                service_id=service_id, operation_name=operation_name
+            ),
+            params=api_params,
+            model=operation_model,
+            context=context,
+        )
         return api_params
 
     def _resolve_endpoint_ruleset(
@@ -892,30 +1058,35 @@ class BaseClient(object):
                 return Paginator.paginate(self, **kwargs)
 
             paginator_config = self._cache['page_config'][
-                actual_operation_name]
+                actual_operation_name
+            ]
             # Add the docstring for the paginate method.
             paginate.__doc__ = PaginatorDocstring(
                 paginator_name=actual_operation_name,
                 event_emitter=self.meta.events,
                 service_model=self.meta.service_model,
                 paginator_config=paginator_config,
-                include_signature=False
+                include_signature=False,
             )
 
             # Rename the paginator class based on the type of paginator.
-            paginator_class_name = str('%s.Paginator.%s' % (
-                get_service_module_name(self.meta.service_model),
-                actual_operation_name))
+            paginator_class_name = str(
+                f'{get_service_module_name(self.meta.service_model)}.Paginator.{actual_operation_name}'
+            )
 
             # Create the new paginator class
             documented_paginator_cls = type(
-                paginator_class_name, (Paginator,), {'paginate': paginate})
+                paginator_class_name, (Paginator,), {'paginate': paginate}
+            )
 
-            operation_model = self._service_model.operation_model(actual_operation_name)
+            operation_model = self._service_model.operation_model(
+                actual_operation_name
+            )
             paginator = documented_paginator_cls(
                 getattr(self, operation_name),
                 paginator_config,
-                operation_model)
+                operation_model,
+            )
             return paginator
 
     def can_paginate(self, operation_name):
@@ -936,8 +1107,8 @@ class BaseClient(object):
         if 'page_config' not in self._cache:
             try:
                 page_config = self._loader.load_service_model(
-                    self._service_model.service_name,
-                    'paginators-1')['pagination']
+                    self._service_model.service_name, 'paginators-1'
+                )['pagination']
                 self._cache['page_config'] = page_config
             except DataNotFoundError:
                 self._cache['page_config'] = {}
@@ -948,8 +1119,8 @@ class BaseClient(object):
         if 'waiter_config' not in self._cache:
             try:
                 waiter_config = self._loader.load_service_model(
-                    self._service_model.service_name,
-                    'waiters-2')
+                    self._service_model.service_name, 'waiters-2'
+                )
                 self._cache['waiter_config'] = waiter_config
             except DataNotFoundError:
                 self._cache['waiter_config'] = {}
@@ -967,16 +1138,17 @@ class BaseClient(object):
         """
         config = self._get_waiter_config()
         if not config:
-            raise ValueError("Waiter does not exist: %s" % waiter_name)
+            raise ValueError(f"Waiter does not exist: {waiter_name}")
         model = waiter.WaiterModel(config)
         mapping = {}
         for name in model.waiter_names:
             mapping[xform_name(name)] = name
         if waiter_name not in mapping:
-            raise ValueError("Waiter does not exist: %s" % waiter_name)
+            raise ValueError(f"Waiter does not exist: {waiter_name}")
 
         return waiter.create_waiter_with_client(
-            mapping[waiter_name], model, self)
+            mapping[waiter_name], model, self
+        )
 
     @CachedProperty
     def waiter_names(self):
@@ -997,10 +1169,11 @@ class BaseClient(object):
 
     def _load_exceptions(self):
         return self._exceptions_factory.create_client_exceptions(
-            self._service_model)
+            self._service_model
+        )
 
 
-class ClientMeta(object):
+class ClientMeta:
     """Holds additional client methods.
 
     This class holds additional information for clients.  It exists for
@@ -1013,8 +1186,15 @@ class ClientMeta(object):
 
     """
 
-    def __init__(self, events, client_config, endpoint_url, service_model,
-                 method_to_api_mapping, partition):
+    def __init__(
+        self,
+        events,
+        client_config,
+        endpoint_url,
+        service_model,
+        method_to_api_mapping,
+        partition,
+    ):
         self.events = events
         self._client_config = client_config
         self._endpoint_url = endpoint_url
@@ -1047,8 +1227,9 @@ class ClientMeta(object):
         return self._partition
 
 
-def _get_configured_signature_version(service_name, client_config,
-                                      scoped_config):
+def _get_configured_signature_version(
+    service_name, client_config, scoped_config
+):
     """
     Gets the manually configured signature version.
 
@@ -1070,6 +1251,8 @@ def _get_configured_signature_version(se
                 logger.debug(
                     "Switching signature version for service %s "
                     "to version %s based on config file override.",
-                    service_name, version)
+                    service_name,
+                    version,
+                )
                 return version
     return None
diff -pruN 2.23.6-1/awscli/botocore/compress.py 2.31.35-1/awscli/botocore/compress.py
--- 2.23.6-1/awscli/botocore/compress.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/compress.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,6 +22,7 @@ from gzip import GzipFile
 from gzip import compress as gzip_compress
 
 from botocore.compat import urlencode
+from botocore.useragent import register_feature_id
 from botocore.utils import determine_content_length
 
 logger = logging.getLogger(__name__)
@@ -88,6 +89,7 @@ def _get_body_size(body):
 
 
 def _gzip_compress_body(body):
+    register_feature_id('GZIP_REQUEST_COMPRESSION')
     if isinstance(body, str):
         return gzip_compress(body.encode('utf-8'))
     elif isinstance(body, (bytes, bytearray)):
diff -pruN 2.23.6-1/awscli/botocore/config.py 2.31.35-1/awscli/botocore/config.py
--- 2.23.6-1/awscli/botocore/config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/config.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,7 +22,7 @@ from botocore.exceptions import (
 )
 
 
-class Config(object):
+class Config:
     """Advanced configuration for Botocore clients.
 
     :type region_name: str
@@ -151,11 +151,14 @@ class Config(object):
     :type inject_host_prefix: bool
     :param inject_host_prefix: Whether host prefix injection should occur.
 
-        Defaults to True.
+        Defaults to None.
 
+        The default of None is equivalent to setting to True, which enables
+        the injection of operation parameters into the prefix of the hostname.
         Setting this to False disables the injection of operation parameters
-        into the prefix of the hostname. This is useful for clients providing
-        custom endpoints that should not have their host prefix modified.
+        into the prefix of the hostname. Setting this to False is useful for
+        clients providing custom endpoints that should not have their host
+        prefix modified.
 
     :type use_dualstack_endpoint: bool
     :param use_dualstack_endpoint: Setting to True enables dualstack
@@ -225,37 +228,87 @@ class Config(object):
           supported and the ``requestValidationModeMember`` member is set to ``ENABLED``.
 
         Defaults to None.
+
+    :type account_id_endpoint_mode: str
+    :param account_id_endpoint_mode: The value used to determine the client's
+        behavior for account ID based endpoint routing. Valid values are:
+
+        * ``preferred`` - The endpoint should include account ID if available.
+        * ``disabled`` - A resolved endpoint does not include account ID.
+        * ``required`` - The endpoint must include account ID. If the account ID
+          isn't available, an exception will be raised.
+
+        If a value is not provided, the client will default to ``preferred``.
+
+        Defaults to None.
+
+    :type auth_scheme_preference: str
+    :param auth_scheme_preference: A comma-delimited string of case-sensitive
+        auth scheme names used to determine the client's auth scheme preference.
+
+        Defaults to None.
     """
-    OPTION_DEFAULTS = OrderedDict([
-        ('region_name', None),
-        ('signature_version', None),
-        ('user_agent', None),
-        ('user_agent_extra', None),
-        ('user_agent_appid', None),
-        ('connect_timeout', DEFAULT_TIMEOUT),
-        ('read_timeout', DEFAULT_TIMEOUT),
-        ('parameter_validation', True),
-        ('max_pool_connections', MAX_POOL_CONNECTIONS),
-        ('proxies', None),
-        ('proxies_config', None),
-        ('s3', None),
-        ('retries', None),
-        ('client_cert', None),
-        ('inject_host_prefix', True),
-        ('endpoint_discovery_enabled', None),
-        ('use_dualstack_endpoint', None),
-        ('use_fips_endpoint', None),
-        ('ignore_configured_endpoint_urls', None),
-        ('request_min_compression_size_bytes', None),
-        ('disable_request_compression', None),
-        ('sigv4a_signing_region_set', None),
-        ('request_checksum_calculation', None),
-        ('response_checksum_validation', None),
-    ])
+
+    OPTION_DEFAULTS = OrderedDict(
+        [
+            ('region_name', None),
+            ('signature_version', None),
+            ('user_agent', None),
+            ('user_agent_extra', None),
+            ('user_agent_appid', None),
+            ('connect_timeout', DEFAULT_TIMEOUT),
+            ('read_timeout', DEFAULT_TIMEOUT),
+            ('parameter_validation', True),
+            ('max_pool_connections', MAX_POOL_CONNECTIONS),
+            ('proxies', None),
+            ('proxies_config', None),
+            ('s3', None),
+            ('retries', None),
+            ('client_cert', None),
+            ('inject_host_prefix', None),
+            ('endpoint_discovery_enabled', None),
+            ('use_dualstack_endpoint', None),
+            ('use_fips_endpoint', None),
+            ('ignore_configured_endpoint_urls', None),
+            ('request_min_compression_size_bytes', None),
+            ('disable_request_compression', None),
+            ('sigv4a_signing_region_set', None),
+            ('request_checksum_calculation', None),
+            ('response_checksum_validation', None),
+            ('account_id_endpoint_mode', None),
+            ('auth_scheme_preference', None),
+        ]
+    )
+
+    # The original default value of the inject_host_prefix parameter was True.
+    # This prevented the ability to override the value from other locations in
+    # the parameter provider chain, like env vars or the shared configuration
+    # file. TO accomplish this, we need to disambiguate when the value was set
+    # by the user or not. This overrides the parameter with a property so the
+    # default value of inject_host_prefix is still True if it is not set by the
+    # user.
+    @property
+    def inject_host_prefix(self):
+        if self._inject_host_prefix == "UNSET":
+            return True
+
+        return self._inject_host_prefix
+
+    # Override the setter for the case where the user does supply a value;
+    # _inject_host_prefix will no longer be "UNSET".
+    @inject_host_prefix.setter
+    def inject_host_prefix(self, value):
+        self._inject_host_prefix = value
 
     def __init__(self, *args, **kwargs):
         self._user_provided_options = self._record_user_provided_options(
-            args, kwargs)
+            args, kwargs
+        )
+
+        # By default, we use a value that indicates the user did not
+        # set it. This value MUST persist on the Config object to be used
+        # elsewhere.
+        self._inject_host_prefix = 'UNSET'
 
         # Merge the user_provided options onto the default options
         config_vars = copy.copy(self.OPTION_DEFAULTS)
@@ -263,6 +316,15 @@ class Config(object):
 
         # Set the attributes based on the config_vars
         for key, value in config_vars.items():
+            # Default values for the Config object are set here. We don't want
+            # to use `setattr` in the case where the user already supplied a
+            # value.
+            if (
+                key == 'inject_host_prefix'
+                and 'inject_host_prefix'
+                not in self._user_provided_options.keys()
+            ):
+                continue
             setattr(self, key, value)
 
         # Validate the s3 options
@@ -281,15 +343,14 @@ class Config(object):
                 user_provided_options[key] = value
             # The key must exist in the available options
             else:
-                raise TypeError(
-                    'Got unexpected keyword argument \'%s\'' % key)
+                raise TypeError(f'Got unexpected keyword argument \'{key}\'')
 
         # The number of args should not be longer than the allowed
         # options
         if len(args) > len(option_order):
             raise TypeError(
-                'Takes at most %s arguments (%s given)' % (
-                    len(option_order), len(args)))
+                f'Takes at most {len(option_order)} arguments ({len(args)} given)'
+            )
 
         # Iterate through the args passed through to the constructor and map
         # them to appropriate keys.
@@ -297,8 +358,8 @@ class Config(object):
             # If it a kwarg was specified for the arg, then error out
             if option_order[i] in user_provided_options:
                 raise TypeError(
-                    'Got multiple values for keyword argument \'%s\'' % (
-                        option_order[i]))
+                    f'Got multiple values for keyword argument \'{option_order[i]}\''
+                )
             user_provided_options[option_order[i]] = arg
 
         return user_provided_options
@@ -308,22 +369,22 @@ class Config(object):
             addressing_style = s3.get('addressing_style')
             if addressing_style not in ['virtual', 'auto', 'path', None]:
                 raise InvalidS3AddressingStyleError(
-                    s3_addressing_style=addressing_style)
+                    s3_addressing_style=addressing_style
+                )
 
     def _validate_retry_configuration(self, retries):
         if retries is not None:
             for key, value in retries.items():
                 if key not in ['max_attempts', 'mode']:
                     raise InvalidRetryConfigurationError(
-                        retry_config_option=key)
+                        retry_config_option=key
+                    )
                 if key == 'max_attempts' and value < 1:
                     raise InvalidMaxRetryAttemptsError(
                         provided_max_attempts=value
                     )
                 if key == 'mode' and value not in ['standard', 'adaptive']:
-                    raise InvalidRetryModeError(
-                        provided_retry_mode=value
-                    )
+                    raise InvalidRetryModeError(provided_retry_mode=value)
 
     def merge(self, other_config):
         """Merges the config object with another config object
diff -pruN 2.23.6-1/awscli/botocore/configloader.py 2.31.35-1/awscli/botocore/configloader.py
--- 2.23.6-1/awscli/botocore/configloader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/configloader.py	2025-11-12 19:17:29.000000000 +0000
@@ -148,7 +148,8 @@ def raw_config_parse(config_filename, pa
             cp.read([path])
         except (configparser.Error, UnicodeDecodeError):
             raise botocore.exceptions.ConfigParseError(
-                path=_unicode_path(path))
+                path=_unicode_path(path)
+            )
         else:
             for section in cp.sections():
                 config[section] = {}
@@ -162,7 +163,8 @@ def raw_config_parse(config_filename, pa
                             config_value = _parse_nested(config_value)
                         except ValueError:
                             raise botocore.exceptions.ConfigParseError(
-                                path=_unicode_path(path))
+                                path=_unicode_path(path)
+                            )
                     config[section][option] = config_value
     return config
 
diff -pruN 2.23.6-1/awscli/botocore/configprovider.py 2.31.35-1/awscli/botocore/configprovider.py
--- 2.23.6-1/awscli/botocore/configprovider.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/configprovider.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 """This module contains the interface for controlling how configuration
 is loaded.
 """
+
 import copy
 import logging
 import os
@@ -54,31 +55,42 @@ BOTOCORE_DEFAUT_SESSION_VARIABLES = {
     'data_path': ('data_path', 'AWS_DATA_PATH', None, None),
     'config_file': (None, 'AWS_CONFIG_FILE', '~/.aws/config', None),
     'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE', None, None),
-
     # This is the shared credentials file amongst sdks.
-    'credentials_file': (None, 'AWS_SHARED_CREDENTIALS_FILE',
-                         '~/.aws/credentials', None),
-
+    'credentials_file': (
+        None,
+        'AWS_SHARED_CREDENTIALS_FILE',
+        '~/.aws/credentials',
+        None,
+    ),
     # These variables only exist in the config file.
-
     # This is the number of seconds until we time out a request to
     # the instance metadata service.
     'metadata_service_timeout': (
         'metadata_service_timeout',
-        'AWS_METADATA_SERVICE_TIMEOUT', 1, int),
+        'AWS_METADATA_SERVICE_TIMEOUT',
+        1,
+        int,
+    ),
     # This is the number of request attempts we make until we give
     # up trying to retrieve data from the instance metadata service.
     'metadata_service_num_attempts': (
         'metadata_service_num_attempts',
-        'AWS_METADATA_SERVICE_NUM_ATTEMPTS', 1, int),
+        'AWS_METADATA_SERVICE_NUM_ATTEMPTS',
+        1,
+        int,
+    ),
     'ec2_metadata_service_endpoint': (
         'ec2_metadata_service_endpoint',
         'AWS_EC2_METADATA_SERVICE_ENDPOINT',
-        None, None),
+        None,
+        None,
+    ),
     'ec2_metadata_service_endpoint_mode': (
         'ec2_metadata_service_endpoint_mode',
         'AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE',
-        None, None),
+        None,
+        None,
+    ),
     'ec2_metadata_v1_disabled': (
         'ec2_metadata_v1_disabled',
         'AWS_EC2_METADATA_V1_DISABLED',
@@ -88,15 +100,21 @@ BOTOCORE_DEFAUT_SESSION_VARIABLES = {
     'imds_use_ipv6': (
         'imds_use_ipv6',
         'AWS_IMDS_USE_IPV6',
-        False, utils.ensure_boolean),
+        False,
+        utils.ensure_boolean,
+    ),
     'use_dualstack_endpoint': (
         'use_dualstack_endpoint',
         'AWS_USE_DUALSTACK_ENDPOINT',
-        None, utils.ensure_boolean),
+        None,
+        utils.ensure_boolean,
+    ),
     'use_fips_endpoint': (
         'use_fips_endpoint',
         'AWS_USE_FIPS_ENDPOINT',
-        None, utils.ensure_boolean),
+        None,
+        utils.ensure_boolean,
+    ),
     'ignore_configured_endpoint_urls': (
         'ignore_configured_endpoint_urls',
         'AWS_IGNORE_CONFIGURED_ENDPOINT_URLS',
@@ -108,14 +126,21 @@ BOTOCORE_DEFAUT_SESSION_VARIABLES = {
     # Note: These configurations are considered internal to botocore.
     # Do not use them until publicly documented.
     'csm_enabled': (
-            'csm_enabled', 'AWS_CSM_ENABLED', False, utils.ensure_boolean),
+        'csm_enabled',
+        'AWS_CSM_ENABLED',
+        False,
+        utils.ensure_boolean,
+    ),
     'csm_host': ('csm_host', 'AWS_CSM_HOST', '127.0.0.1', None),
     'csm_port': ('csm_port', 'AWS_CSM_PORT', 31000, int),
     'csm_client_id': ('csm_client_id', 'AWS_CSM_CLIENT_ID', '', None),
     # Endpoint discovery configuration
     'endpoint_discovery_enabled': (
-        'endpoint_discovery_enabled', 'AWS_ENDPOINT_DISCOVERY_ENABLED',
-        'auto', None),
+        'endpoint_discovery_enabled',
+        'AWS_ENDPOINT_DISCOVERY_ENABLED',
+        'auto',
+        None,
+    ),
     'retry_mode': ('retry_mode', 'AWS_RETRY_MODE', 'standard', None),
     'max_attempts': ('max_attempts', 'AWS_MAX_ATTEMPTS', 3, int),
     'user_agent_appid': ('sdk_ua_app_id', 'AWS_SDK_UA_APP_ID', None, None),
@@ -149,30 +174,59 @@ BOTOCORE_DEFAUT_SESSION_VARIABLES = {
         "when_supported",
         None,
     ),
+    'account_id_endpoint_mode': (
+        'account_id_endpoint_mode',
+        'AWS_ACCOUNT_ID_ENDPOINT_MODE',
+        'preferred',
+        None,
+    ),
+    'disable_host_prefix_injection': (
+        'disable_host_prefix_injection',
+        'AWS_DISABLE_HOST_PREFIX_INJECTION',
+        None,
+        utils.ensure_boolean,
+    ),
+    'auth_scheme_preference': (
+        'auth_scheme_preference',
+        'AWS_AUTH_SCHEME_PREFERENCE',
+        None,
+        None,
+    ),
 }
 # A mapping for the s3 specific configuration vars. These are the configuration
 # vars that typically go in the s3 section of the config file. This mapping
 # follows the same schema as the previous session variable mapping.
 DEFAULT_S3_CONFIG_VARS = {
-    'addressing_style': (
-        ('s3', 'addressing_style'), None, None, None),
+    'addressing_style': (('s3', 'addressing_style'), None, None, None),
     'use_accelerate_endpoint': (
-        ('s3', 'use_accelerate_endpoint'), None, None, utils.ensure_boolean
+        ('s3', 'use_accelerate_endpoint'),
+        None,
+        None,
+        utils.ensure_boolean,
     ),
     'use_dualstack_endpoint': (
-        ('s3', 'use_dualstack_endpoint'), None, None, utils.ensure_boolean
+        ('s3', 'use_dualstack_endpoint'),
+        None,
+        None,
+        utils.ensure_boolean,
     ),
     'payload_signing_enabled': (
-        ('s3', 'payload_signing_enabled'), None, None, utils.ensure_boolean
+        ('s3', 'payload_signing_enabled'),
+        None,
+        None,
+        utils.ensure_boolean,
     ),
     'use_arn_region': (
-        ['s3_use_arn_region',
-         ('s3', 'use_arn_region')],
-        'AWS_S3_USE_ARN_REGION', None, utils.ensure_boolean
+        ['s3_use_arn_region', ('s3', 'use_arn_region')],
+        'AWS_S3_USE_ARN_REGION',
+        None,
+        utils.ensure_boolean,
     ),
     's3_disable_multiregion_access_points': (
         ('s3', 's3_disable_multiregion_access_points'),
-        'AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS', None, utils.ensure_boolean
+        'AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS',
+        None,
+        utils.ensure_boolean,
     ),
 }
 # A mapping for the proxy specific configuration vars. These are
@@ -182,20 +236,30 @@ DEFAULT_PROXIES_CONFIG_VARS = {
     'proxy_ca_bundle': ('proxy_ca_bundle', None, None, None),
     'proxy_client_cert': ('proxy_client_cert', None, None, None),
     'proxy_use_forwarding_for_https': (
-        'proxy_use_forwarding_for_https', None, None, utils.normalize_boolean),
+        'proxy_use_forwarding_for_https',
+        None,
+        None,
+        utils.normalize_boolean,
+    ),
 }
 
+
 def create_botocore_default_config_mapping(session):
     chain_builder = ConfigChainFactory(session=session)
     config_mapping = _create_config_chain_mapping(
-        chain_builder, BOTOCORE_DEFAUT_SESSION_VARIABLES)
+        chain_builder, BOTOCORE_DEFAUT_SESSION_VARIABLES
+    )
     config_mapping['s3'] = SectionConfigProvider(
-        's3', session, _create_config_chain_mapping(
-            chain_builder, DEFAULT_S3_CONFIG_VARS)
+        's3',
+        session,
+        _create_config_chain_mapping(chain_builder, DEFAULT_S3_CONFIG_VARS),
     )
     config_mapping['proxies_config'] = SectionConfigProvider(
-        'proxies_config', session, _create_config_chain_mapping(
-            chain_builder, DEFAULT_PROXIES_CONFIG_VARS)
+        'proxies_config',
+        session,
+        _create_config_chain_mapping(
+            chain_builder, DEFAULT_PROXIES_CONFIG_VARS
+        ),
     )
     return config_mapping
 
@@ -208,18 +272,19 @@ def _create_config_chain_mapping(chain_b
             env_var_names=config[1],
             config_property_names=config[0],
             default=config[2],
-            conversion_func=config[3]
+            conversion_func=config[3],
         )
     return mapping
 
 
-class ConfigChainFactory(object):
+class ConfigChainFactory:
     """Factory class to create our most common configuration chain case.
 
     This is a convenience class to construct configuration chains that follow
     our most common pattern. This is to prevent ordering them incorrectly,
     and to make the config chain construction more readable.
     """
+
     def __init__(self, session, environ=None):
         """Initialize a ConfigChainFactory.
 
@@ -236,9 +301,14 @@ class ConfigChainFactory(object):
             environ = os.environ
         self._environ = environ
 
-    def create_config_chain(self, instance_name=None, env_var_names=None,
-                            config_property_names=None, default=None,
-                            conversion_func=None):
+    def create_config_chain(
+        self,
+        instance_name=None,
+        env_var_names=None,
+        config_property_names=None,
+        default=None,
+        conversion_func=None,
+    ):
         """Build a config chain following the standard botocore pattern.
 
         In botocore most of our config chains follow the the precendence:
@@ -280,8 +350,7 @@ class ConfigChainFactory(object):
         if instance_name is not None:
             providers.append(
                 InstanceVarProvider(
-                    instance_var=instance_name,
-                    session=self._session
+                    instance_var=instance_name, session=self._session
                 )
             )
         if env_var_names is not None:
@@ -322,8 +391,9 @@ class ConfigChainFactory(object):
         return scoped_config_providers
 
 
-class ConfigValueStore(object):
+class ConfigValueStore:
     """The ConfigValueStore object stores configuration values."""
+
     def __init__(self, mapping=None):
         """Initialize a ConfigValueStore.
 
@@ -441,12 +511,13 @@ class ConfigValueStore(object):
         self._mapping[logical_name] = provider
 
 
-class BaseProvider(object):
+class BaseProvider:
     """Base class for configuration value providers.
 
     A configuration provider has some method of providing a configuration
     value.
     """
+
     def provide(self):
         """Provide a config value."""
         raise NotImplementedError('provide')
@@ -458,6 +529,7 @@ class ChainProvider(BaseProvider):
     Each provider in the chain is called, the first one returning a non-None
     value is then returned.
     """
+
     def __init__(self, providers=None, conversion_func=None):
         """Initalize a ChainProvider.
 
@@ -494,11 +566,12 @@ class ChainProvider(BaseProvider):
         return value
 
     def __repr__(self):
-        return '[%s]' % ', '.join([str(p) for p in self._providers])
+        return '[{}]'.format(', '.join([str(p) for p in self._providers]))
 
 
 class InstanceVarProvider(BaseProvider):
     """This class loads config values from the session instance vars."""
+
     def __init__(self, instance_var, session):
         """Initialize InstanceVarProvider.
 
@@ -519,10 +592,7 @@ class InstanceVarProvider(BaseProvider):
         return value
 
     def __repr__(self):
-        return 'InstanceVarProvider(instance_var=%s, session=%s)' % (
-            self._instance_var,
-            self._session,
-        )
+        return f'InstanceVarProvider(instance_var={self._instance_var}, session={self._session})'
 
 
 class ScopedConfigProvider(BaseProvider):
@@ -553,14 +623,12 @@ class ScopedConfigProvider(BaseProvider)
         return scoped_config.get(self._config_var_name)
 
     def __repr__(self):
-        return 'ScopedConfigProvider(config_var_name=%s, session=%s)' % (
-            self._config_var_name,
-            self._session,
-        )
+        return f'ScopedConfigProvider(config_var_name={self._config_var_name}, session={self._session})'
 
 
 class EnvironmentProvider(BaseProvider):
     """This class loads config values from environment variables."""
+
     def __init__(self, name, env):
         """Initialize with the keys in the dictionary to check.
 
@@ -580,7 +648,7 @@ class EnvironmentProvider(BaseProvider):
         return None
 
     def __repr__(self):
-        return 'EnvironmentProvider(name=%s, env=%s)' % (self._name, self._env)
+        return f'EnvironmentProvider(name={self._name}, env={self._env})'
 
 
 class SectionConfigProvider(BaseProvider):
@@ -589,11 +657,13 @@ class SectionConfigProvider(BaseProvider
     This is useful for retrieving scoped config variables (i.e. s3) that have
     their own set of config variables and resolving logic.
     """
+
     def __init__(self, section_name, session, override_providers=None):
         self._section_name = section_name
         self._session = session
         self._scoped_config_provider = ScopedConfigProvider(
-            self._section_name, self._session)
+            self._section_name, self._session
+        )
         self._override_providers = override_providers
         if self._override_providers is None:
             self._override_providers = {}
@@ -601,9 +671,12 @@ class SectionConfigProvider(BaseProvider
     def provide(self):
         section_config = self._scoped_config_provider.provide()
         if section_config and not isinstance(section_config, dict):
-            logger.debug("The %s config key is not a dictionary type, "
-                         "ignoring its value of: %s", self._section_name,
-                         section_config)
+            logger.debug(
+                "The %s config key is not a dictionary type, "
+                "ignoring its value of: %s",
+                self._section_name,
+                section_config,
+            )
             return None
         for section_config_var, provider in self._override_providers.items():
             provider_val = provider.provide()
@@ -615,16 +688,14 @@ class SectionConfigProvider(BaseProvider
 
     def __repr__(self):
         return (
-            'SectionConfigProvider(section_name=%s, '
-            'session=%s, override_providers=%s)' % (
-                self._section_name, self._session,
-                self._override_providers,
-            )
+            f'SectionConfigProvider(section_name={self._section_name}, '
+            f'session={self._session}, override_providers={self._override_providers})'
         )
 
 
 class ConstantProvider(BaseProvider):
     """This provider provides a constant value."""
+
     def __init__(self, value):
         self._value = value
 
@@ -633,7 +704,7 @@ class ConstantProvider(BaseProvider):
         return self._value
 
     def __repr__(self):
-        return 'ConstantProvider(value=%s)' % self._value
+        return f'ConstantProvider(value={self._value})'
 
 
 class ConfiguredEndpointProvider(BaseProvider):
diff -pruN 2.23.6-1/awscli/botocore/context.py 2.31.35-1/awscli/botocore/context.py
--- 2.23.6-1/awscli/botocore/context.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/context.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,128 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+"""
+NOTE: All classes and functions in this module are considered private and are
+subject to abrupt breaking changes. Please do not use them directly.
+"""
+
+from contextlib import contextmanager
+from contextvars import ContextVar
+from copy import deepcopy
+from dataclasses import dataclass, field
+from functools import wraps
+from typing import Set
+
+
+@dataclass
+class ClientContext:
+    """
+    Encapsulation of objects tracked within the ``_context`` context variable.
+
+    ``features`` is a set responsible for storing features used during
+    preparation of an AWS request. ``botocore.useragent.register_feature_id``
+    is used to add to this set.
+    """
+
+    features: Set[str] = field(default_factory=set)
+
+
+_context = ContextVar("_context")
+
+
+def get_context():
+    """Get the current ``_context`` context variable if set, else None."""
+    return _context.get(None)
+
+
+def set_context(ctx):
+    """Set the current ``_context`` context variable.
+
+    :type ctx: ClientContext
+    :param ctx: Client context object to set as the current context variable.
+
+    :rtype: contextvars.Token
+    :returns: Token object used to revert the context variable to what it was
+        before the corresponding set.
+    """
+    token = _context.set(ctx)
+    return token
+
+
+def reset_context(token):
+    """Reset the current ``_context`` context variable.
+
+    :type token: contextvars.Token
+    :param token: Token object to reset the context variable.
+    """
+    _context.reset(token)
+
+
+@contextmanager
+def start_as_current_context(ctx=None):
+    """
+    Context manager that copies the passed or current context object and sets
+    it as the current context variable. If no context is found, a new
+    ``ClientContext`` object is created. It mainly ensures the context variable
+    is reset to the previous value once the executed code returns.
+
+    Example usage:
+
+        def my_feature():
+            with start_as_current_context():
+                register_feature_id('MY_FEATURE')
+                pass
+
+    :type ctx: ClientContext
+    :param ctx: The client context object to set as the new context variable.
+        If not provided, the current or a new context variable is used.
+    """
+    current = ctx or get_context()
+    if current is None:
+        new = ClientContext()
+    else:
+        new = deepcopy(current)
+    token = set_context(new)
+    try:
+        yield
+    finally:
+        reset_context(token)
+
+
+def with_current_context(hook=None):
+    """
+    Decorator that wraps ``start_as_current_context`` and optionally invokes a
+    hook within the newly-set context. This is just syntactic sugar to avoid
+    indenting existing code under the context manager.
+
+    Example usage:
+
+        @with_current_context(partial(register_feature_id, 'MY_FEATURE'))
+        def my_feature():
+            pass
+
+    :type hook: callable
+    :param hook: A callable that will be invoked within the scope of the
+        ``start_as_current_context`` context manager.
+    """
+
+    def decorator(func):
+        @wraps(func)
+        def wrapper(*args, **kwargs):
+            with start_as_current_context():
+                if hook:
+                    hook()
+                return func(*args, **kwargs)
+
+        return wrapper
+
+    return decorator
diff -pruN 2.23.6-1/awscli/botocore/credentials.py 2.31.35-1/awscli/botocore/credentials.py
--- 2.23.6-1/awscli/botocore/credentials.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/credentials.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,7 @@ from hashlib import sha1
 
 import botocore.compat
 import botocore.configloader
+import dateutil.parser
 from botocore import UNSIGNED
 from botocore.compat import compat_shell_split, total_seconds
 from botocore.config import Config
@@ -40,7 +41,9 @@ from botocore.exceptions import (
     UnknownCredentialError,
 )
 from botocore.tokens import SSOTokenProvider
+from botocore.useragent import register_feature_id, register_feature_ids
 from botocore.utils import (
+    ArnParser,
     ContainerMetadataFetcher,
     FileWebIdentityTokenLoader,
     InstanceMetadataFetcher,
@@ -54,8 +57,11 @@ from dateutil.parser import parse
 from dateutil.tz import tzlocal, tzutc
 
 logger = logging.getLogger(__name__)
-ReadOnlyCredentials = namedtuple('ReadOnlyCredentials',
-                                 ['access_key', 'secret_key', 'token'])
+ReadOnlyCredentials = namedtuple(
+    'ReadOnlyCredentials',
+    ['access_key', 'secret_key', 'token', 'account_id'],
+    defaults=(None,),
+)
 
 _DEFAULT_MANDATORY_REFRESH_TIMEOUT = 10 * 60  # 10 min
 _DEFAULT_ADVISORY_REFRESH_TIMEOUT = 15 * 60  # 15 min
@@ -76,9 +82,11 @@ def create_credential_resolver(session,
 
     imds_config = {
         'ec2_metadata_service_endpoint': session.get_config_variable(
-            'ec2_metadata_service_endpoint'),
+            'ec2_metadata_service_endpoint'
+        ),
         'ec2_metadata_service_endpoint_mode': resolve_imds_endpoint_mode(
-            session),
+            session
+        ),
         'ec2_credential_refresh_window': _DEFAULT_ADVISORY_REFRESH_TIMEOUT,
         'ec2_metadata_v1_disabled': session.get_config_variable(
             'ec2_metadata_v1_disabled'
@@ -95,19 +103,21 @@ def create_credential_resolver(session,
             timeout=metadata_timeout,
             num_attempts=num_attempts,
             user_agent=session.user_agent(truncate=True),
-            config=imds_config)
+            config=imds_config,
+        )
     )
 
     profile_provider_builder = ProfileProviderBuilder(
-        session, cache=cache, region_name=region_name)
+        session, cache=cache, region_name=region_name
+    )
     assume_role_provider = AssumeRoleProvider(
         load_config=lambda: session.full_config,
         client_creator=_get_client_creator(session, region_name),
         cache=cache,
         profile_name=profile_name,
-        credential_sourcer=CanonicalNameCredentialSourcer([
-            env_provider, container_provider, instance_metadata_provider
-        ]),
+        credential_sourcer=CanonicalNameCredentialSourcer(
+            [env_provider, container_provider, instance_metadata_provider]
+        ),
         profile_provider_builder=profile_provider_builder,
     )
 
@@ -144,14 +154,16 @@ def create_credential_resolver(session,
         # EnvProvider does not return credentials, which is what we want
         # in this scenario.
         providers.remove(env_provider)
-        logger.debug('Skipping environment variable credential check'
-                     ' because profile name was explicitly set.')
+        logger.debug(
+            'Skipping environment variable credential check'
+            ' because profile name was explicitly set.'
+        )
 
     resolver = CredentialResolver(providers=providers)
     return resolver
 
 
-class ProfileProviderBuilder(object):
+class ProfileProviderBuilder:
     """This class handles the creation of profile based providers.
 
     NOTE: This class is only intended for internal use.
@@ -161,8 +173,10 @@ class ProfileProviderBuilder(object):
     This is needed to enable sharing between the default credential chain and
     the source profile chain created by the assume role provider.
     """
-    def __init__(self, session, cache=None, region_name=None,
-                 sso_token_cache=None):
+
+    def __init__(
+        self, session, cache=None, region_name=None, sso_token_cache=None
+    ):
         self._session = session
         self._cache = cache
         self._region_name = region_name
@@ -171,7 +185,8 @@ class ProfileProviderBuilder(object):
     def providers(self, profile_name, disable_env_vars=False):
         return [
             self._create_web_identity_provider(
-                profile_name, disable_env_vars,
+                profile_name,
+                disable_env_vars,
             ),
             self._create_sso_provider(profile_name),
             self._create_shared_credential_provider(profile_name),
@@ -203,7 +218,8 @@ class ProfileProviderBuilder(object):
         return AssumeRoleWithWebIdentityProvider(
             load_config=lambda: self._session.full_config,
             client_creator=_get_client_creator(
-                self._session, self._region_name),
+                self._session, self._region_name
+            ),
             cache=self._cache,
             profile_name=profile_name,
             disable_env_vars=disable_env_vars,
@@ -249,9 +265,7 @@ def _serialize_if_needed(value, iso=Fals
 
 def _get_client_creator(session, region_name):
     def client_creator(service_name, **kwargs):
-        create_client_kwargs = {
-            'region_name': region_name
-        }
+        create_client_kwargs = {'region_name': region_name}
         create_client_kwargs.update(**kwargs)
         return session.create_client(service_name, **create_client_kwargs)
 
@@ -270,12 +284,12 @@ def create_assume_role_refresher(client,
             'token': credentials['SessionToken'],
             'expiry_time': _serialize_if_needed(credentials['Expiration']),
         }
+
     return refresh
 
 
 def create_mfa_serial_refresher(actual_refresh):
-
-    class _Refresher(object):
+    class _Refresher:
         def __init__(self, refresh):
             self._refresh = refresh
             self._has_been_called = False
@@ -292,7 +306,7 @@ def create_mfa_serial_refresher(actual_r
     return _Refresher(actual_refresh)
 
 
-class Credentials(object):
+class Credentials:
     """
     Holds the credentials needed to authenticate requests.
 
@@ -301,10 +315,12 @@ class Credentials(object):
     :param str token: The security token, valid only for session credentials.
     :param str method: A string which identifies where the credentials
         were found.
+    :param str account_id: (optional) An account ID associated with the credentials.
     """
 
-    def __init__(self, access_key, secret_key, token=None,
-                 method=None):
+    def __init__(
+        self, access_key, secret_key, token=None, method=None, account_id=None
+    ):
         self.access_key = access_key
         self.secret_key = secret_key
         self.token = token
@@ -312,6 +328,7 @@ class Credentials(object):
         if method is None:
             method = 'explicit'
         self.method = method
+        self.account_id = account_id
 
         self._normalize()
 
@@ -326,9 +343,15 @@ class Credentials(object):
         self.secret_key = botocore.compat.ensure_unicode(self.secret_key)
 
     def get_frozen_credentials(self):
-        return ReadOnlyCredentials(self.access_key,
-                                   self.secret_key,
-                                   self.token)
+        return ReadOnlyCredentials(
+            self.access_key, self.secret_key, self.token, self.account_id
+        )
+
+    def get_deferred_property(self, property_name):
+        def get_property():
+            return getattr(self, property_name, None)
+
+        return get_property
 
 
 class RefreshableCredentials(Credentials):
@@ -344,6 +367,7 @@ class RefreshableCredentials(Credentials
         were found.
     :param function time_fetcher: Callback function to retrieve current time.
     """
+
     # The time at which we'll attempt to refresh, but not
     # block if someone else is refreshing.
     _advisory_refresh_timeout = _DEFAULT_ADVISORY_REFRESH_TIMEOUT
@@ -351,20 +375,31 @@ class RefreshableCredentials(Credentials
     # refreshed credentials.
     _mandatory_refresh_timeout = _DEFAULT_MANDATORY_REFRESH_TIMEOUT
 
-    def __init__(self, access_key, secret_key, token,
-                 expiry_time, refresh_using, method,
-                 time_fetcher=_local_now,
-                 advisory_timeout=None, mandatory_timeout=None):
+    def __init__(
+        self,
+        access_key,
+        secret_key,
+        token,
+        expiry_time,
+        refresh_using,
+        method,
+        time_fetcher=_local_now,
+        advisory_timeout=None,
+        mandatory_timeout=None,
+        account_id=None,
+    ):
         self._refresh_using = refresh_using
         self._access_key = access_key
         self._secret_key = secret_key
         self._token = token
+        self._account_id = account_id
         self._expiry_time = expiry_time
         self._time_fetcher = time_fetcher
         self._refresh_lock = threading.Lock()
         self.method = method
         self._frozen_credentials = ReadOnlyCredentials(
-            access_key, secret_key, token)
+            access_key, secret_key, token, account_id
+        )
         self._normalize()
         if advisory_timeout is not None:
             self._advisory_refresh_timeout = advisory_timeout
@@ -377,12 +412,12 @@ class RefreshableCredentials(Credentials
 
     @classmethod
     def create_from_metadata(
-            cls,
-            metadata,
-            refresh_using,
-            method,
-            advisory_timeout=None,
-            mandatory_timeout=None,
+        cls,
+        metadata,
+        refresh_using,
+        method,
+        advisory_timeout=None,
+        mandatory_timeout=None,
     ):
         kwargs = {}
         if advisory_timeout is not None:
@@ -397,6 +432,7 @@ class RefreshableCredentials(Credentials
             expiry_time=cls._expiry_datetime(metadata['expiry_time']),
             method=method,
             refresh_using=refresh_using,
+            account_id=metadata.get('account_id'),
             **kwargs,
         )
         return instance
@@ -440,6 +476,19 @@ class RefreshableCredentials(Credentials
     def token(self, value):
         self._token = value
 
+    @property
+    def account_id(self):
+        """Warning: Using this property can lead to race conditions if you
+        access another property subsequently along the refresh boundary.
+        Please use get_frozen_credentials instead.
+        """
+        self._refresh()
+        return self._account_id
+
+    @account_id.setter
+    def account_id(self, value):
+        self._account_id = value
+
     def _seconds_remaining(self):
         delta = self._expiry_time - self._time_fetcher()
         return total_seconds(delta)
@@ -498,7 +547,8 @@ class RefreshableCredentials(Credentials
                 if not self.refresh_needed(self._advisory_refresh_timeout):
                     return
                 is_mandatory_refresh = self.refresh_needed(
-                    self._mandatory_refresh_timeout)
+                    self._mandatory_refresh_timeout
+                )
                 self._protected_refresh(is_mandatory=is_mandatory_refresh)
                 return
             finally:
@@ -516,11 +566,14 @@ class RefreshableCredentials(Credentials
         # the self._refresh_lock.
         try:
             metadata = self._refresh_using()
-        except Exception as e:
+        except Exception:
             period_name = 'mandatory' if is_mandatory else 'advisory'
-            logger.warning("Refreshing temporary credentials failed "
-                           "during %s refresh period.",
-                           period_name, exc_info=True)
+            logger.warning(
+                "Refreshing temporary credentials failed "
+                "during %s refresh period.",
+                period_name,
+                exc_info=True,
+            )
             if is_mandatory:
                 # If this is a mandatory refresh, then
                 # all errors that occur when we attempt to refresh
@@ -532,15 +585,18 @@ class RefreshableCredentials(Credentials
             return
         self._set_from_data(metadata)
         self._frozen_credentials = ReadOnlyCredentials(
-            self._access_key, self._secret_key, self._token)
+            self._access_key, self._secret_key, self._token, self._account_id
+        )
         if self._is_expired():
             # We successfully refreshed credentials but for whatever
             # reason, our refreshing function returned credentials
             # that are still expired.  In this scenario, the only
             # thing we can do is let the user know and raise
             # an exception.
-            msg = ("Credentials were refreshed, but the "
-                   "refreshed credentials are still expired.")
+            msg = (
+                "Credentials were refreshed, but the "
+                "refreshed credentials are still expired."
+            )
             logger.warning(msg)
             raise RuntimeError(msg)
 
@@ -566,8 +622,10 @@ class RefreshableCredentials(Credentials
         self.secret_key = data['secret_key']
         self.token = data['token']
         self._expiry_time = parse(data['expiry_time'])
-        logger.debug("Retrieved credentials will expire at: %s",
-                     self._expiry_time)
+        self.account_id = data.get('account_id')
+        logger.debug(
+            "Retrieved credentials will expire at: %s", self._expiry_time
+        )
         self._normalize()
 
     def get_frozen_credentials(self):
@@ -613,11 +671,13 @@ class DeferredRefreshableCredentials(Ref
 
     refresh_using will be called upon first access.
     """
+
     def __init__(self, refresh_using, method, time_fetcher=_local_now):
         self._refresh_using = refresh_using
         self._access_key = None
         self._secret_key = None
         self._token = None
+        self._account_id = None
         self._expiry_time = None
         self._time_fetcher = time_fetcher
         self._refresh_lock = threading.Lock()
@@ -627,12 +687,10 @@ class DeferredRefreshableCredentials(Ref
     def refresh_needed(self, refresh_in=None):
         if self._frozen_credentials is None:
             return True
-        return super(DeferredRefreshableCredentials, self).refresh_needed(
-            refresh_in
-        )
+        return super().refresh_needed(refresh_in)
 
 
-class CachedCredentialFetcher(object):
+class CachedCredentialFetcher:
     DEFAULT_EXPIRY_WINDOW_SECONDS = 60 * 15
 
     def __init__(self, cache=None, expiry_window_seconds=None):
@@ -643,6 +701,7 @@ class CachedCredentialFetcher(object):
         if expiry_window_seconds is None:
             expiry_window_seconds = self.DEFAULT_EXPIRY_WINDOW_SECONDS
         self._expiry_window_seconds = expiry_window_seconds
+        self.feature_ids = set()
 
     def _create_cache_key(self):
         raise NotImplementedError('_create_cache_key()')
@@ -673,13 +732,16 @@ class CachedCredentialFetcher(object):
 
         creds = response['Credentials']
         expiration = _serialize_if_needed(creds['Expiration'], iso=True)
-        return {
+        credentials = {
             'access_key': creds['AccessKeyId'],
             'secret_key': creds['SecretAccessKey'],
             'token': creds['SessionToken'],
             'expiry_time': expiration,
+            'account_id': creds.get('AccountId'),
         }
 
+        return credentials
+
     def _load_from_cache(self):
         if self._cache_key in self._cache:
             creds = deepcopy(self._cache[self._cache_key])
@@ -702,8 +764,14 @@ class CachedCredentialFetcher(object):
 
 
 class BaseAssumeRoleCredentialFetcher(CachedCredentialFetcher):
-    def __init__(self, client_creator, role_arn, extra_args=None,
-                 cache=None, expiry_window_seconds=None):
+    def __init__(
+        self,
+        client_creator,
+        role_arn,
+        extra_args=None,
+        cache=None,
+        expiry_window_seconds=None,
+    ):
         self._client_creator = client_creator
         self._role_arn = role_arn
 
@@ -718,12 +786,10 @@ class BaseAssumeRoleCredentialFetcher(Ca
         if not self._role_session_name:
             self._generate_assume_role_name()
 
-        super(BaseAssumeRoleCredentialFetcher, self).__init__(
-            cache, expiry_window_seconds
-        )
+        super().__init__(cache, expiry_window_seconds)
 
     def _generate_assume_role_name(self):
-        self._role_session_name = 'botocore-session-%s' % (int(time.time()))
+        self._role_session_name = f'botocore-session-{int(time.time())}'
         self._assume_kwargs['RoleSessionName'] = self._role_session_name
         self._using_default_session_name = True
 
@@ -749,11 +815,27 @@ class BaseAssumeRoleCredentialFetcher(Ca
         argument_hash = sha1(args.encode('utf-8')).hexdigest()
         return self._make_file_safe(argument_hash)
 
+    def _add_account_id_to_response(self, response):
+        role_arn = response.get('AssumedRoleUser', {}).get('Arn')
+        if ArnParser.is_arn(role_arn):
+            arn_parser = ArnParser()
+            account_id = arn_parser.parse_arn(role_arn)['account']
+            response['Credentials']['AccountId'] = account_id
+        else:
+            logger.debug(f"Unable to extract account ID from Arn: {role_arn}")
+
 
 class AssumeRoleCredentialFetcher(BaseAssumeRoleCredentialFetcher):
-    def __init__(self, client_creator, source_credentials, role_arn,
-                 extra_args=None, mfa_prompter=None, cache=None,
-                 expiry_window_seconds=None):
+    def __init__(
+        self,
+        client_creator,
+        source_credentials,
+        role_arn,
+        extra_args=None,
+        mfa_prompter=None,
+        cache=None,
+        expiry_window_seconds=None,
+    ):
         """
         :type client_creator: callable
         :param client_creator: A callable that creates a client taking
@@ -790,16 +872,22 @@ class AssumeRoleCredentialFetcher(BaseAs
         if self._mfa_prompter is None:
             self._mfa_prompter = getpass.getpass
 
-        super(AssumeRoleCredentialFetcher, self).__init__(
-            client_creator, role_arn, extra_args=extra_args,
-            cache=cache, expiry_window_seconds=expiry_window_seconds
+        super().__init__(
+            client_creator,
+            role_arn,
+            extra_args=extra_args,
+            cache=cache,
+            expiry_window_seconds=expiry_window_seconds,
         )
 
     def _get_credentials(self):
         """Get credentials by calling assume role."""
+        register_feature_ids(self.feature_ids)
         kwargs = self._assume_role_kwargs()
         client = self._create_client()
-        return client.assume_role(**kwargs)
+        response = client.assume_role(**kwargs)
+        self._add_account_id_to_response(response)
+        return response
 
     def _assume_role_kwargs(self):
         """Get the arguments for assume role based on current configuration."""
@@ -808,7 +896,7 @@ class AssumeRoleCredentialFetcher(BaseAs
         mfa_serial = assume_role_kwargs.get('SerialNumber')
 
         if mfa_serial is not None:
-            prompt = 'Enter MFA code for %s: ' % mfa_serial
+            prompt = f'Enter MFA code for {mfa_serial}: '
             token_code = self._mfa_prompter(prompt)
             assume_role_kwargs['TokenCode'] = token_code
 
@@ -831,10 +919,17 @@ class AssumeRoleCredentialFetcher(BaseAs
 
 
 class AssumeRoleWithWebIdentityCredentialFetcher(
-        BaseAssumeRoleCredentialFetcher
+    BaseAssumeRoleCredentialFetcher
 ):
-    def __init__(self, client_creator, web_identity_token_loader, role_arn,
-                 extra_args=None, cache=None, expiry_window_seconds=None):
+    def __init__(
+        self,
+        client_creator,
+        web_identity_token_loader,
+        role_arn,
+        extra_args=None,
+        cache=None,
+        expiry_window_seconds=None,
+    ):
         """
         :type client_creator: callable
         :param client_creator: A callable that creates a client taking
@@ -864,19 +959,25 @@ class AssumeRoleWithWebIdentityCredentia
         """
         self._web_identity_token_loader = web_identity_token_loader
 
-        super(AssumeRoleWithWebIdentityCredentialFetcher, self).__init__(
-            client_creator, role_arn, extra_args=extra_args,
-            cache=cache, expiry_window_seconds=expiry_window_seconds
+        super().__init__(
+            client_creator,
+            role_arn,
+            extra_args=extra_args,
+            cache=cache,
+            expiry_window_seconds=expiry_window_seconds,
         )
 
     def _get_credentials(self):
         """Get credentials by calling assume role."""
+        register_feature_ids(self.feature_ids)
         kwargs = self._assume_role_kwargs()
         # Assume role with web identity does not require credentials other than
         # the token, explicitly configure the client to not sign requests.
         config = Config(signature_version=UNSIGNED)
         client = self._client_creator('sts', config=config)
-        return client.assume_role_with_web_identity(**kwargs)
+        response = client.assume_role_with_web_identity(**kwargs)
+        self._add_account_id_to_response(response)
+        return response
 
     def _assume_role_kwargs(self):
         """Get the arguments for assume role based on current configuration."""
@@ -887,7 +988,7 @@ class AssumeRoleWithWebIdentityCredentia
         return assume_role_kwargs
 
 
-class CredentialProvider(object):
+class CredentialProvider:
     # A short name to identify the provider within botocore.
     METHOD = None
 
@@ -927,13 +1028,13 @@ class CredentialProvider(object):
             try:
                 found.append(mapping[key_name])
             except KeyError:
-                raise PartialCredentialsError(provider=self.METHOD,
-                                              cred_var=key_name)
+                raise PartialCredentialsError(
+                    provider=self.METHOD, cred_var=key_name
+                )
         return found
 
 
 class ProcessProvider(CredentialProvider):
-
     METHOD = 'custom-process'
 
     def __init__(self, profile_name, load_config, popen=subprocess.Popen):
@@ -947,19 +1048,22 @@ class ProcessProvider(CredentialProvider
         if credential_process is None:
             return
 
+        register_feature_id('CREDENTIALS_PROFILE_PROCESS')
         creds_dict = self._retrieve_credentials_using(credential_process)
+        register_feature_id('CREDENTIALS_PROCESS')
         if creds_dict.get('expiry_time') is not None:
             return RefreshableCredentials.create_from_metadata(
                 creds_dict,
                 lambda: self._retrieve_credentials_using(credential_process),
-                self.METHOD
+                self.METHOD,
             )
 
         return Credentials(
             access_key=creds_dict['access_key'],
             secret_key=creds_dict['secret_key'],
             token=creds_dict.get('token'),
-            method=self.METHOD
+            method=self.METHOD,
+            account_id=creds_dict.get('account_id'),
         )
 
     def _retrieve_credentials_using(self, credential_process):
@@ -967,40 +1071,54 @@ class ProcessProvider(CredentialProvider
         # command and all arguments as a list.
         process_list = compat_shell_split(credential_process)
         with original_ld_library_path():
-            p = self._popen(process_list,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
+            p = self._popen(
+                process_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            )
             stdout, stderr = p.communicate()
         if p.returncode != 0:
             raise CredentialRetrievalError(
-                provider=self.METHOD, error_msg=stderr.decode('utf-8'))
+                provider=self.METHOD, error_msg=stderr.decode('utf-8')
+            )
         parsed = botocore.compat.json.loads(stdout.decode('utf-8'))
         version = parsed.get('Version', '<Version key not provided>')
         if version != 1:
             raise CredentialRetrievalError(
                 provider=self.METHOD,
-                error_msg=("Unsupported version '%s' for credential process "
-                           "provider, supported versions: 1" % version))
+                error_msg=(
+                    f"Unsupported version '{version}' for credential process "
+                    "provider, supported versions: 1"
+                ),
+            )
         try:
             return {
                 'access_key': parsed['AccessKeyId'],
                 'secret_key': parsed['SecretAccessKey'],
                 'token': parsed.get('SessionToken'),
                 'expiry_time': parsed.get('Expiration'),
+                'account_id': self._get_account_id(parsed),
             }
         except KeyError as e:
             raise CredentialRetrievalError(
                 provider=self.METHOD,
-                error_msg="Missing required key in response: %s" % e
+                error_msg=f"Missing required key in response: {e}",
             )
 
     @property
     def _credential_process(self):
+        return self.profile_config.get('credential_process')
+
+    @property
+    def profile_config(self):
         if self._loaded_config is None:
             self._loaded_config = self._load_config()
-        profile_config = self._loaded_config.get(
-            'profiles', {}).get(self._profile_name, {})
-        return profile_config.get('credential_process')
+        profile_config = self._loaded_config.get('profiles', {}).get(
+            self._profile_name, {}
+        )
+        return profile_config
+
+    def _get_account_id(self, parsed):
+        account_id = parsed.get('AccountId')
+        return account_id or self.profile_config.get('aws_account_id')
 
 
 class InstanceMetadataProvider(CredentialProvider):
@@ -1018,8 +1136,10 @@ class InstanceMetadataProvider(Credentia
         metadata = fetcher.retrieve_iam_role_credentials()
         if not metadata:
             return None
-        logger.debug('Found credentials from IAM Role: %s',
-                     metadata['role_name'])
+        register_feature_id('CREDENTIALS_IMDS')
+        logger.debug(
+            'Found credentials from IAM Role: %s', metadata['role_name']
+        )
         # We manually set the data here, since we already made the request &
         # have it. When the expiry is hit, the credentials will auto-refresh
         # themselves.
@@ -1040,6 +1160,7 @@ class EnvProvider(CredentialProvider):
     # AWS_SESSION_TOKEN is what other AWS SDKs have standardized on.
     TOKENS = ['AWS_SECURITY_TOKEN', 'AWS_SESSION_TOKEN']
     EXPIRY_TIME = 'AWS_CREDENTIAL_EXPIRATION'
+    ACCOUNT_ID = 'AWS_ACCOUNT_ID'
 
     def __init__(self, environ=None, mapping=None):
         """
@@ -1049,8 +1170,12 @@ class EnvProvider(CredentialProvider):
         :param mapping: An optional mapping of variable names to
             environment variable names.  Use this if you want to
             change the mapping of access_key->AWS_ACCESS_KEY_ID, etc.
-            The dict can have up to 3 keys: ``access_key``, ``secret_key``,
-            ``session_token``.
+            The dict can have up to 5 keys:
+            * ``access_key``
+            * ``secret_key``
+            * ``token``
+            * ``expiry_time``
+            * ``account_id``
         """
         if environ is None:
             environ = os.environ
@@ -1066,17 +1191,23 @@ class EnvProvider(CredentialProvider):
             var_mapping['secret_key'] = self.SECRET_KEY
             var_mapping['token'] = self.TOKENS
             var_mapping['expiry_time'] = self.EXPIRY_TIME
+            var_mapping['account_id'] = self.ACCOUNT_ID
         else:
             var_mapping['access_key'] = mapping.get(
-                'access_key', self.ACCESS_KEY)
+                'access_key', self.ACCESS_KEY
+            )
             var_mapping['secret_key'] = mapping.get(
-                'secret_key', self.SECRET_KEY)
-            var_mapping['token'] = mapping.get(
-                'token', self.TOKENS)
+                'secret_key', self.SECRET_KEY
+            )
+            var_mapping['token'] = mapping.get('token', self.TOKENS)
             if not isinstance(var_mapping['token'], list):
                 var_mapping['token'] = [var_mapping['token']]
             var_mapping['expiry_time'] = mapping.get(
-                'expiry_time', self.EXPIRY_TIME)
+                'expiry_time', self.EXPIRY_TIME
+            )
+            var_mapping['account_id'] = mapping.get(
+                'account_id', self.ACCOUNT_ID
+            )
         return var_mapping
 
     def load(self):
@@ -1090,19 +1221,27 @@ class EnvProvider(CredentialProvider):
             logger.info('Found credentials in environment variables.')
             fetcher = self._create_credentials_fetcher()
             credentials = fetcher(require_expiry=False)
+            register_feature_id('CREDENTIALS_ENV_VARS')
 
             expiry_time = credentials['expiry_time']
             if expiry_time is not None:
                 expiry_time = parse(expiry_time)
                 return RefreshableCredentials(
-                    credentials['access_key'], credentials['secret_key'],
-                    credentials['token'], expiry_time,
-                    refresh_using=fetcher, method=self.METHOD
+                    credentials['access_key'],
+                    credentials['secret_key'],
+                    credentials['token'],
+                    expiry_time,
+                    refresh_using=fetcher,
+                    method=self.METHOD,
+                    account_id=credentials['account_id'],
                 )
 
             return Credentials(
-                credentials['access_key'], credentials['secret_key'],
-                credentials['token'], method=self.METHOD
+                credentials['access_key'],
+                credentials['secret_key'],
+                credentials['token'],
+                method=self.METHOD,
+                account_id=credentials['account_id'],
             )
         else:
             return None
@@ -1118,13 +1257,15 @@ class EnvProvider(CredentialProvider):
             access_key = environ.get(mapping['access_key'], '')
             if not access_key:
                 raise PartialCredentialsError(
-                    provider=method, cred_var=mapping['access_key'])
+                    provider=method, cred_var=mapping['access_key']
+                )
             credentials['access_key'] = access_key
 
             secret_key = environ.get(mapping['secret_key'], '')
             if not secret_key:
                 raise PartialCredentialsError(
-                    provider=method, cred_var=mapping['secret_key'])
+                    provider=method, cred_var=mapping['secret_key']
+                )
             credentials['secret_key'] = secret_key
 
             credentials['token'] = None
@@ -1140,7 +1281,13 @@ class EnvProvider(CredentialProvider):
                 credentials['expiry_time'] = expiry_time
             if require_expiry and not expiry_time:
                 raise PartialCredentialsError(
-                    provider=method, cred_var=mapping['expiry_time'])
+                    provider=method, cred_var=mapping['expiry_time']
+                )
+
+            credentials['account_id'] = None
+            account_id = environ.get(mapping['account_id'], '')
+            if account_id:
+                credentials['account_id'] = account_id
 
             return credentials
 
@@ -1169,7 +1316,8 @@ class OriginalEC2Provider(CredentialProv
         """
         if 'AWS_CREDENTIAL_FILE' in self._environ:
             full_path = os.path.expanduser(
-                self._environ['AWS_CREDENTIAL_FILE'])
+                self._environ['AWS_CREDENTIAL_FILE']
+            )
             creds = self._parser(full_path)
             if self.ACCESS_KEY in creds:
                 logger.info('Found credentials in AWS_CREDENTIAL_FILE.')
@@ -1191,6 +1339,7 @@ class SharedCredentialProvider(Credentia
     # aws_security_token, but the SDKs are standardizing on aws_session_token
     # so we support both.
     TOKENS = ['aws_security_token', 'aws_session_token']
+    ACCOUNT_ID = 'aws_account_id'
 
     def __init__(self, creds_filename, profile_name=None, ini_parser=None):
         self._creds_filename = creds_filename
@@ -1209,22 +1358,36 @@ class SharedCredentialProvider(Credentia
         if self._profile_name in available_creds:
             config = available_creds[self._profile_name]
             if self.ACCESS_KEY in config:
-                logger.info("Found credentials in shared credentials file: %s",
-                            self._creds_filename)
+                logger.info(
+                    "Found credentials in shared credentials file: %s",
+                    self._creds_filename,
+                )
                 access_key, secret_key = self._extract_creds_from_mapping(
-                    config, self.ACCESS_KEY, self.SECRET_KEY)
+                    config, self.ACCESS_KEY, self.SECRET_KEY
+                )
                 token = self._get_session_token(config)
-                return Credentials(access_key, secret_key, token,
-                                   method=self.METHOD)
+                account_id = self._get_account_id(config)
+                register_feature_id('CREDENTIALS_PROFILE')
+                return Credentials(
+                    access_key,
+                    secret_key,
+                    token,
+                    method=self.METHOD,
+                    account_id=account_id,
+                )
 
     def _get_session_token(self, config):
         for token_envvar in self.TOKENS:
             if token_envvar in config:
                 return config[token_envvar]
 
+    def _get_account_id(self, config):
+        return config.get(self.ACCOUNT_ID)
+
 
 class ConfigProvider(CredentialProvider):
     """INI based config provider with profile sections."""
+
     METHOD = 'config-file'
     CANONICAL_NAME = 'SharedConfig'
 
@@ -1234,6 +1397,7 @@ class ConfigProvider(CredentialProvider)
     # aws_security_token, but the SDKs are standardizing on aws_session_token
     # so we support both.
     TOKENS = ['aws_security_token', 'aws_session_token']
+    ACCOUNT_ID = 'aws_account_id'
 
     def __init__(self, config_filename, profile_name, config_parser=None):
         """
@@ -1262,13 +1426,23 @@ class ConfigProvider(CredentialProvider)
         if self._profile_name in full_config['profiles']:
             profile_config = full_config['profiles'][self._profile_name]
             if self.ACCESS_KEY in profile_config:
-                logger.info("Credentials found in config file: %s",
-                            self._config_filename)
+                logger.info(
+                    "Credentials found in config file: %s",
+                    self._config_filename,
+                )
                 access_key, secret_key = self._extract_creds_from_mapping(
-                    profile_config, self.ACCESS_KEY, self.SECRET_KEY)
+                    profile_config, self.ACCESS_KEY, self.SECRET_KEY
+                )
                 token = self._get_session_token(profile_config)
-                return Credentials(access_key, secret_key, token,
-                                   method=self.METHOD)
+                account_id = self._get_account_id(profile_config)
+                register_feature_id('CREDENTIALS_PROFILE')
+                return Credentials(
+                    access_key,
+                    secret_key,
+                    token,
+                    method=self.METHOD,
+                    account_id=account_id,
+                )
         else:
             return None
 
@@ -1277,6 +1451,9 @@ class ConfigProvider(CredentialProvider)
             if token_name in profile_config:
                 return profile_config[token_name]
 
+    def _get_account_id(self, config):
+        return config.get(self.ACCOUNT_ID)
+
 
 class BotoProvider(CredentialProvider):
     METHOD = 'boto-config'
@@ -1312,12 +1489,16 @@ class BotoProvider(CredentialProvider):
             if 'Credentials' in config:
                 credentials = config['Credentials']
                 if self.ACCESS_KEY in credentials:
-                    logger.info("Found credentials in boto config file: %s",
-                                filename)
+                    logger.info(
+                        "Found credentials in boto config file: %s", filename
+                    )
                     access_key, secret_key = self._extract_creds_from_mapping(
-                        credentials, self.ACCESS_KEY, self.SECRET_KEY)
-                    return Credentials(access_key, secret_key,
-                                       method=self.METHOD)
+                        credentials, self.ACCESS_KEY, self.SECRET_KEY
+                    )
+                    register_feature_id('CREDENTIALS_BOTO2_CONFIG_FILE')
+                    return Credentials(
+                        access_key, secret_key, method=self.METHOD
+                    )
 
 
 class AssumeRoleProvider(CredentialProvider):
@@ -1334,10 +1515,22 @@ class AssumeRoleProvider(CredentialProvi
     # remaining time left until the credentials expires is less than the
     # EXPIRY_WINDOW.
     EXPIRY_WINDOW_SECONDS = 60 * 15
+    NAMED_PROVIDER_FEATURE_MAP = {
+        'Ec2InstanceMetadata': 'CREDENTIALS_IMDS',
+        'Environment': 'CREDENTIALS_ENV_VARS',
+        'EcsContainer': 'CREDENTIALS_HTTP',
+    }
 
-    def __init__(self, load_config, client_creator, cache, profile_name,
-                 prompter=getpass.getpass, credential_sourcer=None,
-                 profile_provider_builder=None):
+    def __init__(
+        self,
+        load_config,
+        client_creator,
+        cache,
+        profile_name,
+        prompter=getpass.getpass,
+        credential_sourcer=None,
+        profile_provider_builder=None,
+    ):
         """
         :type load_config: callable
         :param load_config: A function that accepts no arguments, and
@@ -1389,6 +1582,7 @@ class AssumeRoleProvider(CredentialProvi
         self._credential_sourcer = credential_sourcer
         self._profile_provider_builder = profile_provider_builder
         self._visited_profiles = [self._profile_name]
+        self._feature_ids = set()
 
     def load(self):
         self._loaded_config = self._load_config()
@@ -1399,7 +1593,8 @@ class AssumeRoleProvider(CredentialProvi
 
     def _has_assume_role_config_vars(self, profile):
         return (
-            self.ROLE_CONFIG_VAR in profile and
+            self.ROLE_CONFIG_VAR in profile
+            and
             # We need to ensure this provider doesn't look at a profile when
             # the profile has configuration for web identity. Simply relying on
             # the order in the credential chain is insufficient as it doesn't
@@ -1438,17 +1633,20 @@ class AssumeRoleProvider(CredentialProvi
             mfa_prompter=self._prompter,
             cache=self.cache,
         )
+        fetcher.feature_ids = self._feature_ids.copy()
         refresher = fetcher.fetch_credentials
         if mfa_serial is not None:
             refresher = create_mfa_serial_refresher(refresher)
 
+        self._feature_ids.add('CREDENTIALS_STS_ASSUME_ROLE')
+        register_feature_ids(self._feature_ids)
         # The initial credentials are empty and the expiration time is set
         # to now so that we can delay the call to assume role until it is
         # strictly needed.
         return DeferredRefreshableCredentials(
             method=self.METHOD,
             refresh_using=refresher,
-            time_fetcher=_local_now
+            time_fetcher=_local_now,
         )
 
     def _get_role_config(self, profile_name):
@@ -1470,32 +1668,31 @@ class AssumeRoleProvider(CredentialProvi
             'mfa_serial': mfa_serial,
             'role_session_name': role_session_name,
             'source_profile': source_profile,
-            'credential_source': credential_source
+            'credential_source': credential_source,
         }
 
         if duration_seconds is not None:
-          try:
-            role_config['duration_seconds'] = int(duration_seconds)
-          except ValueError:
-            pass
+            try:
+                role_config['duration_seconds'] = int(duration_seconds)
+            except ValueError:
+                pass
 
         # Either the credential source or the source profile must be
         # specified, but not both.
         if credential_source is not None and source_profile is not None:
             raise InvalidConfigError(
                 error_msg=(
-                    'The profile "%s" contains both source_profile and '
-                    'credential_source.' % profile_name
+                    f'The profile "{profile_name}" contains both source_profile and '
+                    'credential_source.'
                 )
             )
         elif credential_source is None and source_profile is None:
             raise PartialCredentialsError(
                 provider=self.METHOD,
-                cred_var='source_profile or credential_source'
+                cred_var='source_profile or credential_source',
             )
         elif credential_source is not None:
-            self._validate_credential_source(
-                profile_name, credential_source)
+            self._validate_credential_source(profile_name, credential_source)
         else:
             self._validate_source_profile(profile_name, source_profile)
 
@@ -1503,32 +1700,37 @@ class AssumeRoleProvider(CredentialProvi
 
     def _validate_credential_source(self, parent_profile, credential_source):
         if self._credential_sourcer is None:
-            raise InvalidConfigError(error_msg=(
-                'The credential_source "%s" is specified in profile "%s", '
-                'but no source provider was configured.' % (
-                    credential_source, parent_profile)
-            ))
+            raise InvalidConfigError(
+                error_msg=(
+                    f'The credential_source "{credential_source}" is specified in profile "{parent_profile}", '
+                    'but no source provider was configured.'
+                )
+            )
         if not self._credential_sourcer.is_supported(credential_source):
-            raise InvalidConfigError(error_msg=(
-                'The credential source "%s" referenced in profile "%s" is not '
-                'valid.' % (credential_source, parent_profile)
-            ))
+            raise InvalidConfigError(
+                error_msg=(
+                    f'The credential source "{credential_source}" referenced in profile "{parent_profile}" is not '
+                    'valid.'
+                )
+            )
 
     def _source_profile_has_credentials(self, profile):
-        return any([
-            self._has_static_credentials(profile),
-            self._has_assume_role_config_vars(profile),
-        ])
+        return any(
+            [
+                self._has_static_credentials(profile),
+                self._has_assume_role_config_vars(profile),
+            ]
+        )
 
-    def _validate_source_profile(self, parent_profile_name,
-                                 source_profile_name):
+    def _validate_source_profile(
+        self, parent_profile_name, source_profile_name
+    ):
         profiles = self._loaded_config.get('profiles', {})
         if source_profile_name not in profiles:
             raise InvalidConfigError(
                 error_msg=(
-                    'The source_profile "%s" referenced in '
-                    'the profile "%s" does not exist.' % (
-                        source_profile_name, parent_profile_name)
+                    f'The source_profile "{source_profile_name}" referenced in '
+                    f'the profile "{parent_profile_name}" does not exist.'
                 )
             )
 
@@ -1544,7 +1746,7 @@ class AssumeRoleProvider(CredentialProvi
         if source_profile_name != parent_profile_name:
             raise InfiniteLoopConfigError(
                 source_profile=source_profile_name,
-                visited_profiles=self._visited_profiles
+                visited_profiles=self._visited_profiles,
             )
 
         # A profile is allowed to reference itself so that it can source
@@ -1555,7 +1757,7 @@ class AssumeRoleProvider(CredentialProvi
         if not self._has_static_credentials(source_profile):
             raise InfiniteLoopConfigError(
                 source_profile=source_profile_name,
-                visited_profiles=self._visited_profiles
+                visited_profiles=self._visited_profiles,
             )
 
     def _has_static_credentials(self, profile):
@@ -1565,27 +1767,32 @@ class AssumeRoleProvider(CredentialProvi
     def _resolve_source_credentials(self, role_config, profile_name):
         credential_source = role_config.get('credential_source')
         if credential_source is not None:
+            self._feature_ids.add('CREDENTIALS_PROFILE_NAMED_PROVIDER')
             return self._resolve_credentials_from_source(
                 credential_source, profile_name
             )
 
         source_profile = role_config['source_profile']
         self._visited_profiles.append(source_profile)
+        self._feature_ids.add('CREDENTIALS_PROFILE_SOURCE_PROFILE')
         return self._resolve_credentials_from_profile(source_profile)
 
     def _resolve_credentials_from_profile(self, profile_name):
         profiles = self._loaded_config.get('profiles', {})
         profile = profiles[profile_name]
-
-        if self._has_static_credentials(profile) and \
-                not self._profile_provider_builder:
+        self._feature_ids.add('CREDENTIALS_PROFILE')
+        if (
+            self._has_static_credentials(profile)
+            and not self._profile_provider_builder
+        ):
             # This is only here for backwards compatibility. If this provider
             # isn't given a profile provider builder we still want to be able
-            # handle the basic static credential case as we would before the
-            # provile provider builder parameter was added.
+            # to handle the basic static credential case as we would before the
+            # profile provider builder parameter was added.
             return self._resolve_static_credentials_from_profile(profile)
-        elif self._has_static_credentials(profile) or \
-                not self._has_assume_role_config_vars(profile):
+        elif self._has_static_credentials(
+            profile
+        ) or not self._has_assume_role_config_vars(profile):
             profile_providers = self._profile_provider_builder.providers(
                 profile_name=profile_name,
                 disable_env_vars=True,
@@ -1608,24 +1815,32 @@ class AssumeRoleProvider(CredentialProvi
             return Credentials(
                 access_key=profile['aws_access_key_id'],
                 secret_key=profile['aws_secret_access_key'],
-                token=profile.get('aws_session_token')
+                token=profile.get('aws_session_token'),
             )
         except KeyError as e:
             raise PartialCredentialsError(
-                provider=self.METHOD, cred_var=str(e))
+                provider=self.METHOD, cred_var=str(e)
+            )
 
-    def _resolve_credentials_from_source(self, credential_source,
-                                         profile_name):
+    def _resolve_credentials_from_source(
+        self, credential_source, profile_name
+    ):
         credentials = self._credential_sourcer.source_credentials(
-            credential_source)
+            credential_source
+        )
         if credentials is None:
             raise CredentialRetrievalError(
                 provider=credential_source,
                 error_msg=(
                     'No credentials found in credential_source referenced '
-                    'in profile %s' % profile_name
-                )
+                    f'in profile {profile_name}'
+                ),
             )
+        named_provider_feature_id = self.NAMED_PROVIDER_FEATURE_MAP.get(
+            credential_source
+        )
+        if named_provider_feature_id:
+            self._feature_ids.add(named_provider_feature_id)
         return credentials
 
 
@@ -1639,13 +1854,13 @@ class AssumeRoleWithWebIdentityProvider(
     }
 
     def __init__(
-            self,
-            load_config,
-            client_creator,
-            profile_name,
-            cache=None,
-            disable_env_vars=False,
-            token_loader_cls=None,
+        self,
+        load_config,
+        client_creator,
+        profile_name,
+        cache=None,
+        disable_env_vars=False,
+        token_loader_cls=None,
     ):
         self.cache = cache
         self._load_config = load_config
@@ -1656,6 +1871,7 @@ class AssumeRoleWithWebIdentityProvider(
         if token_loader_cls is None:
             token_loader_cls = FileWebIdentityTokenLoader
         self._token_loader_cls = token_loader_cls
+        self._feature_ids = set()
 
     def load(self):
         return self._assume_role_with_web_identity()
@@ -1678,8 +1894,15 @@ class AssumeRoleWithWebIdentityProvider(
     def _get_config(self, key):
         env_value = self._get_env_config(key)
         if env_value is not None:
+            self._feature_ids.add('CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN')
             return env_value
-        return self._get_profile_config(key)
+
+        config_value = self._get_profile_config(key)
+        if config_value is not None:
+            self._feature_ids.add('CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN')
+            return config_value
+
+        return None
 
     def _assume_role_with_web_identity(self):
         token_path = self._get_config('web_identity_token_file')
@@ -1709,6 +1932,10 @@ class AssumeRoleWithWebIdentityProvider(
             extra_args=extra_args,
             cache=self.cache,
         )
+        fetcher.feature_ids = self._feature_ids.copy()
+
+        self._feature_ids.add('CREDENTIALS_STS_ASSUME_ROLE_WEB_ID')
+        register_feature_ids(self._feature_ids)
         # The initial credentials are empty and the expiration time is set
         # to now so that we can delay the call to assume role until it is
         # strictly needed.
@@ -1718,7 +1945,7 @@ class AssumeRoleWithWebIdentityProvider(
         )
 
 
-class CanonicalNameCredentialSourcer(object):
+class CanonicalNameCredentialSourcer:
     def __init__(self, providers):
         self._providers = providers
 
@@ -1843,6 +2070,7 @@ class ContainerProvider(CredentialProvid
             method=self.METHOD,
             expiry_time=_parse_if_needed(creds['expiry_time']),
             refresh_using=fetcher,
+            account_id=creds.get('account_id'),
         )
 
     def _build_headers(self):
@@ -1865,17 +2093,22 @@ class ContainerProvider(CredentialProvid
         def fetch_creds():
             try:
                 response = self._fetcher.retrieve_full_uri(
-                    full_uri, headers=headers)
+                    full_uri, headers=headers
+                )
+                register_feature_id('CREDENTIALS_HTTP')
             except MetadataRetrievalError as e:
-                logger.debug("Error retrieving container metadata: %s", e,
-                             exc_info=True)
-                raise CredentialRetrievalError(provider=self.METHOD,
-                                               error_msg=str(e))
+                logger.debug(
+                    "Error retrieving container metadata: %s", e, exc_info=True
+                )
+                raise CredentialRetrievalError(
+                    provider=self.METHOD, error_msg=str(e)
+                )
             return {
                 'access_key': response['AccessKeyId'],
                 'secret_key': response['SecretAccessKey'],
                 'token': response['Token'],
                 'expiry_time': response['Expiration'],
+                'account_id': response.get('AccountId'),
             }
 
         return fetch_creds
@@ -1884,7 +2117,7 @@ class ContainerProvider(CredentialProvid
         return self.ENV_VAR in self._environ
 
 
-class CredentialResolver(object):
+class CredentialResolver:
     def __init__(self, providers):
         """
 
@@ -1987,10 +2220,20 @@ class CredentialResolver(object):
 class SSOCredentialFetcher(CachedCredentialFetcher):
     _UTC_DATE_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
 
-    def __init__(self, start_url, sso_region, role_name, account_id,
-                 client_creator, token_loader=None, cache=None,
-                 expiry_window_seconds=None, token_provider=None,
-                 sso_session_name=None):
+    def __init__(
+        self,
+        start_url,
+        sso_region,
+        role_name,
+        account_id,
+        client_creator,
+        token_loader=None,
+        cache=None,
+        expiry_window_seconds=None,
+        token_provider=None,
+        sso_session_name=None,
+        time_fetcher=_local_now,
+    ):
         self._client_creator = client_creator
         self._sso_region = sso_region
         self._role_name = role_name
@@ -1999,9 +2242,8 @@ class SSOCredentialFetcher(CachedCredent
         self._token_loader = token_loader
         self._token_provider = token_provider
         self._sso_session_name = sso_session_name
-        super(SSOCredentialFetcher, self).__init__(
-            cache, expiry_window_seconds
-        )
+        self._time_fetcher = time_fetcher
+        super().__init__(cache, expiry_window_seconds)
 
     def _create_cache_key(self):
         """Create a predictable cache key for the current configuration.
@@ -2042,7 +2284,16 @@ class SSOCredentialFetcher(CachedCredent
             initial_token_data = self._token_provider.load_token()
             token = initial_token_data.get_frozen_token().token
         else:
-            token = self._token_loader(self._start_url)['accessToken']
+            token_dict = self._token_loader(self._start_url)
+            token = token_dict['accessToken']
+
+            # raise an UnauthorizedSSOTokenError if the loaded legacy token
+            # is expired to save a call to GetRoleCredentials with an
+            # expired token.
+            expiration = dateutil.parser.parse(token_dict['expiresAt'])
+            remaining = total_seconds(expiration - self._time_fetcher())
+            if remaining <= 0:
+                raise UnauthorizedSSOTokenError()
 
         kwargs = {
             'roleName': self._role_name,
@@ -2050,6 +2301,7 @@ class SSOCredentialFetcher(CachedCredent
             'accessToken': token,
         }
         try:
+            register_feature_ids(self.feature_ids)
             response = client.get_role_credentials(**kwargs)
         except client.exceptions.UnauthorizedException:
             raise UnauthorizedSSOTokenError()
@@ -2062,7 +2314,8 @@ class SSOCredentialFetcher(CachedCredent
                 'SecretAccessKey': credentials['secretAccessKey'],
                 'SessionToken': credentials['sessionToken'],
                 'Expiration': self._parse_timestamp(credentials['expiration']),
-            }
+                'AccountId': self._account_id,
+            },
         }
         return credentials
 
@@ -2085,8 +2338,15 @@ class SSOProvider(CredentialProvider):
         _PROFILE_REQUIRED_CONFIG_VARS + _SSO_REQUIRED_CONFIG_VARS
     )
 
-    def __init__(self, load_config, client_creator, profile_name,
-                 cache=None, token_cache=None, token_provider=None):
+    def __init__(
+        self,
+        load_config,
+        client_creator,
+        profile_name,
+        cache=None,
+        token_cache=None,
+        token_provider=None,
+    ):
         if token_cache is None:
             token_cache = JSONFileCache(self._SSO_TOKEN_CACHE_DIR)
         self._token_cache = token_cache
@@ -2097,6 +2357,7 @@ class SSOProvider(CredentialProvider):
         self._load_config = load_config
         self._client_creator = client_creator
         self._profile_name = profile_name
+        self._feature_ids = set()
 
     def _load_sso_config(self):
         loaded_config = self._load_config()
@@ -2128,8 +2389,8 @@ class SSOProvider(CredentialProvider):
             missing = ', '.join(missing_config_vars)
             raise InvalidConfigError(
                 error_msg=(
-                    'The profile "%s" is configured to use SSO but is missing '
-                    'required configuration: %s' % (profile_name, missing)
+                    f'The profile "{profile_name}" is configured to use SSO but is missing '
+                    f'required configuration: {missing}'
                 )
             )
         return config
@@ -2171,11 +2432,23 @@ class SSOProvider(CredentialProvider):
             'token_loader': SSOTokenLoader(cache=self._token_cache),
             'cache': self.cache,
         }
-        if 'sso_session' in sso_config:
+        sso_session_in_config = 'sso_session' in sso_config
+        if sso_session_in_config:
             fetcher_kwargs['sso_session_name'] = sso_config['sso_session']
             fetcher_kwargs['token_provider'] = self._token_provider
+            self._feature_ids.add('CREDENTIALS_PROFILE_SSO')
+        else:
+            self._feature_ids.add('CREDENTIALS_PROFILE_SSO_LEGACY')
 
         sso_fetcher = SSOCredentialFetcher(**fetcher_kwargs)
+        sso_fetcher.feature_ids = self._feature_ids.copy()
+
+        if sso_session_in_config:
+            self._feature_ids.add('CREDENTIALS_SSO')
+        else:
+            self._feature_ids.add('CREDENTIALS_SSO_LEGACY')
+
+        register_feature_ids(self._feature_ids)
 
         return DeferredRefreshableCredentials(
             method=self.METHOD,
diff -pruN 2.23.6-1/awscli/botocore/crt/auth.py 2.31.35-1/awscli/botocore/crt/auth.py
--- 2.23.6-1/awscli/botocore/crt/auth.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/crt/auth.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,7 @@ from botocore.auth import (
 )
 from botocore.compat import HTTPHeaders, parse_qs, urlsplit, urlunsplit
 from botocore.exceptions import NoCredentialsError
+from botocore.useragent import register_feature_id
 from botocore.utils import percent_encode_sequence
 
 
@@ -58,7 +59,8 @@ class CrtSigV4Auth(BaseSigner):
         # Use utcnow() because that's what gets mocked by tests, but set
         # timezone because CRT assumes naive datetime is local time.
         datetime_now = datetime.datetime.utcnow().replace(
-            tzinfo=datetime.timezone.utc)
+            tzinfo=datetime.timezone.utc
+        )
 
         # Use existing 'X-Amz-Content-SHA256' header if able
         existing_sha256 = self._get_existing_sha256(request)
@@ -68,7 +70,8 @@ class CrtSigV4Auth(BaseSigner):
         credentials_provider = awscrt.auth.AwsCredentialsProvider.new_static(
             access_key_id=self.credentials.access_key,
             secret_access_key=self.credentials.secret_key,
-            session_token=self.credentials.token)
+            session_token=self.credentials.token,
+        )
 
         if self._is_streaming_checksum_payload(request):
             explicit_payload = STREAMING_UNSIGNED_PAYLOAD_TRAILER
@@ -81,8 +84,9 @@ class CrtSigV4Auth(BaseSigner):
             explicit_payload = UNSIGNED_PAYLOAD
 
         if self._should_add_content_sha256_header(explicit_payload):
-            body_header = \
+            body_header = (
                 awscrt.auth.AwsSignedBodyHeaderType.X_AMZ_CONTENT_SHA_256
+            )
         else:
             body_header = awscrt.auth.AwsSignedBodyHeaderType.NONE
 
@@ -99,7 +103,7 @@ class CrtSigV4Auth(BaseSigner):
             signed_body_value=explicit_payload,
             signed_body_header_type=body_header,
             expiration_in_seconds=self._expiration_in_seconds,
-            )
+        )
         crt_request = self._crt_request_from_aws_request(request)
         future = awscrt.auth.aws_sign_request(crt_request, signing_config)
         future.result()
@@ -110,12 +114,12 @@ class CrtSigV4Auth(BaseSigner):
         crt_path = url_parts.path if url_parts.path else '/'
         if aws_request.params:
             array = []
-            for (param, value) in aws_request.params.items():
+            for param, value in aws_request.params.items():
                 value = str(value)
-                array.append('%s=%s' % (param, value))
+                array.append(f'{param}={value}')
             crt_path = crt_path + '?' + '&'.join(array)
         elif url_parts.query:
-            crt_path = '%s?%s' % (crt_path, url_parts.query)
+            crt_path = f'{crt_path}?{url_parts.query}'
 
         crt_headers = awscrt.http.HttpHeaders(aws_request.headers.items())
 
@@ -131,13 +135,15 @@ class CrtSigV4Auth(BaseSigner):
             method=aws_request.method,
             path=crt_path,
             headers=crt_headers,
-            body_stream=crt_body_stream)
+            body_stream=crt_body_stream,
+        )
         return crt_request
 
     def _apply_signing_changes(self, aws_request, signed_crt_request):
         # Apply changes from signed CRT request to the AWSRequest
         aws_request.headers = HTTPHeaders.from_pairs(
-            list(signed_crt_request.headers))
+            list(signed_crt_request.headers)
+        )
 
     def _should_sign_header(self, name, **kwargs):
         return name.lower() not in SIGNED_HEADERS_BLACKLIST
@@ -206,8 +212,10 @@ class CrtS3SigV4Auth(CrtSigV4Auth):
         algorithm = checksum_context.get('request_algorithm')
         if isinstance(algorithm, dict) and algorithm.get('in') == 'header':
             checksum_header = algorithm['name']
-        if not request.url.startswith('https') or \
-                checksum_header not in request.headers:
+        if (
+            not request.url.startswith('https')
+            or checksum_header not in request.headers
+        ):
             return True
 
         # If the input is streaming we disable body signing by default.
@@ -242,13 +250,15 @@ class CrtSigV4AsymAuth(BaseSigner):
         self._expiration_in_seconds = None
 
     def add_auth(self, request):
+        register_feature_id("SIGV4A_SIGNING")
         if self.credentials is None:
             raise NoCredentialsError()
 
         # Use utcnow() because that's what gets mocked by tests, but set
         # timezone because CRT assumes naive datetime is local time.
         datetime_now = datetime.datetime.utcnow().replace(
-            tzinfo=datetime.timezone.utc)
+            tzinfo=datetime.timezone.utc
+        )
 
         # Use existing 'X-Amz-Content-SHA256' header if able
         existing_sha256 = self._get_existing_sha256(request)
@@ -258,7 +268,8 @@ class CrtSigV4AsymAuth(BaseSigner):
         credentials_provider = awscrt.auth.AwsCredentialsProvider.new_static(
             access_key_id=self.credentials.access_key,
             secret_access_key=self.credentials.secret_key,
-            session_token=self.credentials.token)
+            session_token=self.credentials.token,
+        )
 
         if self._is_streaming_checksum_payload(request):
             explicit_payload = STREAMING_UNSIGNED_PAYLOAD_TRAILER
@@ -271,8 +282,9 @@ class CrtSigV4AsymAuth(BaseSigner):
             explicit_payload = UNSIGNED_PAYLOAD
 
         if self._should_add_content_sha256_header(explicit_payload):
-            body_header = \
+            body_header = (
                 awscrt.auth.AwsSignedBodyHeaderType.X_AMZ_CONTENT_SHA_256
+            )
         else:
             body_header = awscrt.auth.AwsSignedBodyHeaderType.NONE
 
@@ -289,7 +301,7 @@ class CrtSigV4AsymAuth(BaseSigner):
             signed_body_value=explicit_payload,
             signed_body_header_type=body_header,
             expiration_in_seconds=self._expiration_in_seconds,
-            )
+        )
         crt_request = self._crt_request_from_aws_request(request)
         future = awscrt.auth.aws_sign_request(crt_request, signing_config)
         future.result()
@@ -300,12 +312,12 @@ class CrtSigV4AsymAuth(BaseSigner):
         crt_path = url_parts.path if url_parts.path else '/'
         if aws_request.params:
             array = []
-            for (param, value) in aws_request.params.items():
+            for param, value in aws_request.params.items():
                 value = str(value)
-                array.append('%s=%s' % (param, value))
+                array.append(f'{param}={value}')
             crt_path = crt_path + '?' + '&'.join(array)
         elif url_parts.query:
-            crt_path = '%s?%s' % (crt_path, url_parts.query)
+            crt_path = f'{crt_path}?{url_parts.query}'
 
         crt_headers = awscrt.http.HttpHeaders(aws_request.headers.items())
 
@@ -321,13 +333,15 @@ class CrtSigV4AsymAuth(BaseSigner):
             method=aws_request.method,
             path=crt_path,
             headers=crt_headers,
-            body_stream=crt_body_stream)
+            body_stream=crt_body_stream,
+        )
         return crt_request
 
     def _apply_signing_changes(self, aws_request, signed_crt_request):
         # Apply changes from signed CRT request to the AWSRequest
         aws_request.headers = HTTPHeaders.from_pairs(
-            list(signed_crt_request.headers))
+            list(signed_crt_request.headers)
+        )
 
     def _should_sign_header(self, name, **kwargs):
         return name.lower() not in SIGNED_HEADERS_BLACKLIST
@@ -396,8 +410,10 @@ class CrtS3SigV4AsymAuth(CrtSigV4AsymAut
         # to implicitly disable body signing. The combination of TLS and
         # content-md5 is sufficiently secure and durable for us to be
         # confident in the request without body signing.
-        if not request.url.startswith('https') or \
-                'Content-MD5' not in request.headers:
+        if (
+            not request.url.startswith('https')
+            or 'Content-MD5' not in request.headers
+        ):
             return True
 
         # If the input is streaming we disable body signing by default.
@@ -412,12 +428,14 @@ class CrtS3SigV4AsymAuth(CrtSigV4AsymAut
         # Always add X-Amz-Content-SHA256 header
         return True
 
+
 class CrtSigV4AsymQueryAuth(CrtSigV4AsymAuth):
     DEFAULT_EXPIRES = 3600
     _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_QUERY_PARAMS
 
-    def __init__(self, credentials, service_name, region_name,
-                 expires=DEFAULT_EXPIRES):
+    def __init__(
+        self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES
+    ):
         super().__init__(credentials, service_name, region_name)
         self._expiration_in_seconds = expires
 
@@ -437,8 +455,13 @@ class CrtSigV4AsymQueryAuth(CrtSigV4Asym
         # have repeated keys so we know we have single element lists which we
         # can convert back to scalar values.
         query_dict = dict(
-            [(k, v[0]) for k, v in
-             parse_qs(url_parts.query, keep_blank_values=True).items()])
+            [
+                (k, v[0])
+                for k, v in parse_qs(
+                    url_parts.query, keep_blank_values=True
+                ).items()
+            ]
+        )
         # The spec is particular about this.  It *has* to be:
         # https://<endpoint>?<operation params>&<auth params>
         # You can't mix the two types of params together, i.e just keep doing
@@ -506,8 +529,9 @@ class CrtSigV4QueryAuth(CrtSigV4Auth):
     DEFAULT_EXPIRES = 3600
     _SIGNATURE_TYPE = awscrt.auth.AwsSignatureType.HTTP_REQUEST_QUERY_PARAMS
 
-    def __init__(self, credentials, service_name, region_name,
-                 expires=DEFAULT_EXPIRES):
+    def __init__(
+        self, credentials, service_name, region_name, expires=DEFAULT_EXPIRES
+    ):
         super().__init__(credentials, service_name, region_name)
         self._expiration_in_seconds = expires
 
@@ -527,8 +551,13 @@ class CrtSigV4QueryAuth(CrtSigV4Auth):
         # have repeated keys so we know we have single element lists which we
         # can convert back to scalar values.
         query_dict = dict(
-            [(k, v[0]) for k, v in
-             parse_qs(url_parts.query, keep_blank_values=True).items()])
+            [
+                (k, v[0])
+                for k, v in parse_qs(
+                    url_parts.query, keep_blank_values=True
+                ).items()
+            ]
+        )
         # The spec is particular about this.  It *has* to be:
         # https://<endpoint>?<operation params>&<auth params>
         # You can't mix the two types of params together, i.e just keep doing
@@ -603,5 +632,5 @@ CRT_AUTH_TYPE_MAPS = {
     's3v4': CrtS3SigV4Auth,
     's3v4-query': CrtS3SigV4QueryAuth,
     's3v4a': CrtS3SigV4AsymAuth,
-    's3v4a-query': CrtS3SigV4AsymQueryAuth
+    's3v4a-query': CrtS3SigV4AsymQueryAuth,
 }
diff -pruN 2.23.6-1/awscli/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/accessanalyzer/2019-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/accessanalyzer/2019-11-01/service-2.json 2.31.35-1/awscli/botocore/data/accessanalyzer/2019-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/accessanalyzer/2019-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/accessanalyzer/2019-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -41,8 +41,8 @@
       "input":{"shape":"CancelPolicyGenerationRequest"},
       "output":{"shape":"CancelPolicyGenerationResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
@@ -59,14 +59,15 @@
       "input":{"shape":"CheckAccessNotGrantedRequest"},
       "output":{"shape":"CheckAccessNotGrantedResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"InvalidParameterException"},
         {"shape":"UnprocessableEntityException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Checks whether the specified access isn't allowed by a policy.</p>"
+      "documentation":"<p>Checks whether the specified access isn't allowed by a policy.</p>",
+      "readonly":true
     },
     "CheckNoNewAccess":{
       "name":"CheckNoNewAccess",
@@ -78,14 +79,15 @@
       "input":{"shape":"CheckNoNewAccessRequest"},
       "output":{"shape":"CheckNoNewAccessResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"InvalidParameterException"},
         {"shape":"UnprocessableEntityException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Checks whether new access is allowed for an updated policy when compared to the existing policy.</p> <p>You can find examples for reference policies and learn how to set up and run a custom policy check for new access in the <a href=\"https://github.com/aws-samples/iam-access-analyzer-custom-policy-check-samples\">IAM Access Analyzer custom policy checks samples</a> repository on GitHub. The reference policies in this repository are meant to be passed to the <code>existingPolicyDocument</code> request parameter.</p>"
+      "documentation":"<p>Checks whether new access is allowed for an updated policy when compared to the existing policy.</p> <p>You can find examples for reference policies and learn how to set up and run a custom policy check for new access in the <a href=\"https://github.com/aws-samples/iam-access-analyzer-custom-policy-check-samples\">IAM Access Analyzer custom policy checks samples</a> repository on GitHub. The reference policies in this repository are meant to be passed to the <code>existingPolicyDocument</code> request parameter.</p>",
+      "readonly":true
     },
     "CheckNoPublicAccess":{
       "name":"CheckNoPublicAccess",
@@ -97,14 +99,15 @@
       "input":{"shape":"CheckNoPublicAccessRequest"},
       "output":{"shape":"CheckNoPublicAccessResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"InvalidParameterException"},
         {"shape":"UnprocessableEntityException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Checks whether a resource policy can grant public access to the specified resource type.</p>"
+      "documentation":"<p>Checks whether a resource policy can grant public access to the specified resource type.</p>",
+      "readonly":true
     },
     "CreateAccessPreview":{
       "name":"CreateAccessPreview",
@@ -116,10 +119,10 @@
       "input":{"shape":"CreateAccessPreviewRequest"},
       "output":{"shape":"CreateAccessPreviewResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
@@ -156,8 +159,8 @@
       },
       "input":{"shape":"CreateArchiveRuleRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -212,8 +215,8 @@
       },
       "input":{"shape":"GenerateFindingRecommendationRequest"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
@@ -230,12 +233,13 @@
       "output":{"shape":"GetAccessPreviewResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about an access preview for the specified analyzer.</p>"
+      "documentation":"<p>Retrieves information about an access preview for the specified analyzer.</p>",
+      "readonly":true
     },
     "GetAnalyzedResource":{
       "name":"GetAnalyzedResource",
@@ -253,7 +257,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about a resource that was analyzed.</p>"
+      "documentation":"<p>Retrieves information about a resource that was analyzed.</p> <note> <p>This action is supported only for external access analyzers.</p> </note>",
+      "readonly":true
     },
     "GetAnalyzer":{
       "name":"GetAnalyzer",
@@ -271,7 +276,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about the specified analyzer.</p>"
+      "documentation":"<p>Retrieves information about the specified analyzer.</p>",
+      "readonly":true
     },
     "GetArchiveRule":{
       "name":"GetArchiveRule",
@@ -289,7 +295,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about an archive rule.</p> <p>To learn about filter keys that you can use to create an archive rule, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p>"
+      "documentation":"<p>Retrieves information about an archive rule.</p> <p>To learn about filter keys that you can use to create an archive rule, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p>",
+      "readonly":true
     },
     "GetFinding":{
       "name":"GetFinding",
@@ -307,7 +314,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about the specified finding. GetFinding and GetFindingV2 both use <code>access-analyzer:GetFinding</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:GetFinding</code> action.</p>"
+      "documentation":"<p>Retrieves information about the specified finding. GetFinding and GetFindingV2 both use <code>access-analyzer:GetFinding</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:GetFinding</code> action.</p> <note> <p>GetFinding is supported only for external access analyzers. You must use GetFindingV2 for internal and unused access analyzers.</p> </note>",
+      "readonly":true
     },
     "GetFindingRecommendation":{
       "name":"GetFindingRecommendation",
@@ -325,7 +333,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about a finding recommendation for the specified analyzer.</p>"
+      "documentation":"<p>Retrieves information about a finding recommendation for the specified analyzer.</p>",
+      "readonly":true
     },
     "GetFindingV2":{
       "name":"GetFindingV2",
@@ -343,7 +352,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about the specified finding. GetFinding and GetFindingV2 both use <code>access-analyzer:GetFinding</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:GetFinding</code> action.</p>"
+      "documentation":"<p>Retrieves information about the specified finding. GetFinding and GetFindingV2 both use <code>access-analyzer:GetFinding</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:GetFinding</code> action.</p>",
+      "readonly":true
+    },
+    "GetFindingsStatistics":{
+      "name":"GetFindingsStatistics",
+      "http":{
+        "method":"POST",
+        "requestUri":"/analyzer/findings/statistics",
+        "responseCode":200
+      },
+      "input":{"shape":"GetFindingsStatisticsRequest"},
+      "output":{"shape":"GetFindingsStatisticsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves a list of aggregated finding statistics for an external access or unused access analyzer.</p>",
+      "readonly":true
     },
     "GetGeneratedPolicy":{
       "name":"GetGeneratedPolicy",
@@ -355,12 +384,13 @@
       "input":{"shape":"GetGeneratedPolicyRequest"},
       "output":{"shape":"GetGeneratedPolicyResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves the policy that was generated using <code>StartPolicyGeneration</code>. </p>"
+      "documentation":"<p>Retrieves the policy that was generated using <code>StartPolicyGeneration</code>. </p>",
+      "readonly":true
     },
     "ListAccessPreviewFindings":{
       "name":"ListAccessPreviewFindings",
@@ -372,14 +402,15 @@
       "input":{"shape":"ListAccessPreviewFindingsRequest"},
       "output":{"shape":"ListAccessPreviewFindingsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of access preview findings generated by the specified access preview.</p>"
+      "documentation":"<p>Retrieves a list of access preview findings generated by the specified access preview.</p>",
+      "readonly":true
     },
     "ListAccessPreviews":{
       "name":"ListAccessPreviews",
@@ -392,12 +423,13 @@
       "output":{"shape":"ListAccessPreviewsResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of access previews for the specified analyzer.</p>"
+      "documentation":"<p>Retrieves a list of access previews for the specified analyzer.</p>",
+      "readonly":true
     },
     "ListAnalyzedResources":{
       "name":"ListAnalyzedResources",
@@ -415,7 +447,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of resources of the specified type that have been analyzed by the specified analyzer.</p>"
+      "documentation":"<p>Retrieves a list of resources of the specified type that have been analyzed by the specified analyzer.</p>",
+      "readonly":true
     },
     "ListAnalyzers":{
       "name":"ListAnalyzers",
@@ -432,7 +465,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of analyzers.</p>"
+      "documentation":"<p>Retrieves a list of analyzers.</p>",
+      "readonly":true
     },
     "ListArchiveRules":{
       "name":"ListArchiveRules",
@@ -449,7 +483,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of archive rules created for the specified analyzer.</p>"
+      "documentation":"<p>Retrieves a list of archive rules created for the specified analyzer.</p>",
+      "readonly":true
     },
     "ListFindings":{
       "name":"ListFindings",
@@ -467,7 +502,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of findings generated by the specified analyzer. ListFindings and ListFindingsV2 both use <code>access-analyzer:ListFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:ListFindings</code> action.</p> <p>To learn about filter keys that you can use to retrieve a list of findings, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p>"
+      "documentation":"<p>Retrieves a list of findings generated by the specified analyzer. ListFindings and ListFindingsV2 both use <code>access-analyzer:ListFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:ListFindings</code> action.</p> <p>To learn about filter keys that you can use to retrieve a list of findings, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p> <note> <p>ListFindings is supported only for external access analyzers. You must use ListFindingsV2 for internal and unused access analyzers.</p> </note>",
+      "readonly":true
     },
     "ListFindingsV2":{
       "name":"ListFindingsV2",
@@ -485,7 +521,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of findings generated by the specified analyzer. ListFindings and ListFindingsV2 both use <code>access-analyzer:ListFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:ListFindings</code> action.</p> <p>To learn about filter keys that you can use to retrieve a list of findings, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p>"
+      "documentation":"<p>Retrieves a list of findings generated by the specified analyzer. ListFindings and ListFindingsV2 both use <code>access-analyzer:ListFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>access-analyzer:ListFindings</code> action.</p> <p>To learn about filter keys that you can use to retrieve a list of findings, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-filter-keys.html\">IAM Access Analyzer filter keys</a> in the <b>IAM User Guide</b>.</p>",
+      "readonly":true
     },
     "ListPolicyGenerations":{
       "name":"ListPolicyGenerations",
@@ -497,12 +534,13 @@
       "input":{"shape":"ListPolicyGenerationsRequest"},
       "output":{"shape":"ListPolicyGenerationsResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all of the policy generations requested in the last seven days.</p>"
+      "documentation":"<p>Lists all of the policy generations requested in the last seven days.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -515,12 +553,13 @@
       "output":{"shape":"ListTagsForResourceResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of tags applied to the specified resource.</p>"
+      "documentation":"<p>Retrieves a list of tags applied to the specified resource.</p>",
+      "readonly":true
     },
     "StartPolicyGeneration":{
       "name":"StartPolicyGeneration",
@@ -533,8 +572,8 @@
       "output":{"shape":"StartPolicyGenerationResponse"},
       "errors":[
         {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
@@ -557,7 +596,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Immediately starts a scan of the policies applied to the specified resource.</p>"
+      "documentation":"<p>Immediately starts a scan of the policies applied to the specified resource.</p> <note> <p>This action is supported only for external access analyzers.</p> </note>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -570,8 +609,8 @@
       "output":{"shape":"TagResourceResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
@@ -589,8 +628,8 @@
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
@@ -614,7 +653,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Modifies the configuration of an existing analyzer.</p>",
+      "documentation":"<p>Modifies the configuration of an existing analyzer.</p> <note> <p>This action is not supported for external access analyzers.</p> </note>",
       "idempotent":true
     },
     "UpdateArchiveRule":{
@@ -663,12 +702,13 @@
       "input":{"shape":"ValidatePolicyRequest"},
       "output":{"shape":"ValidatePolicyResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Requests the validation of a policy and returns a list of findings. The findings help you identify issues and provide actionable recommendations to resolve the issue and enable you to author functional policies that meet security best practices. </p>"
+      "documentation":"<p>Requests the validation of a policy and returns a list of findings. The findings help you identify issues and provide actionable recommendations to resolve the issue and enable you to author functional policies that meet security best practices. </p>",
+      "readonly":true
     }
   },
   "shapes":{
@@ -723,7 +763,15 @@
         "AWS::SecretsManager::Secret",
         "AWS::SNS::Topic",
         "AWS::SQS::Queue",
-        "AWS::IAM::AssumeRolePolicyDocument"
+        "AWS::IAM::AssumeRolePolicyDocument",
+        "AWS::S3Tables::TableBucket",
+        "AWS::ApiGateway::RestApi",
+        "AWS::CodeArtifact::Domain",
+        "AWS::Backup::BackupVault",
+        "AWS::CloudTrail::Dashboard",
+        "AWS::CloudTrail::EventDataStore",
+        "AWS::S3Tables::Table",
+        "AWS::S3Express::AccessPoint"
       ]
     },
     "AccessDeniedException":{
@@ -933,6 +981,12 @@
       "max":100,
       "min":0
     },
+    "AccountAggregations":{
+      "type":"list",
+      "member":{"shape":"FindingAggregationAccountDetails"},
+      "max":10,
+      "min":1
+    },
     "AccountIdsList":{
       "type":"list",
       "member":{"shape":"String"}
@@ -1093,6 +1147,10 @@
         "unusedAccess":{
           "shape":"UnusedAccessConfiguration",
           "documentation":"<p>Specifies the configuration of an unused access analyzer for an Amazon Web Services organization or account.</p>"
+        },
+        "internalAccess":{
+          "shape":"InternalAccessConfiguration",
+          "documentation":"<p>Specifies the configuration of an internal access analyzer for an Amazon Web Services organization or account. This configuration determines how the analyzer evaluates access within your Amazon Web Services environment.</p>"
         }
       },
       "documentation":"<p>Contains information about the configuration of an analyzer for an Amazon Web Services organization or account.</p>",
@@ -1127,7 +1185,7 @@
         },
         "type":{
           "shape":"Type",
-          "documentation":"<p>The type of analyzer, which corresponds to the zone of trust chosen for the analyzer.</p>"
+          "documentation":"<p>The type represents the zone of trust or scope for the analyzer.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
@@ -1143,7 +1201,7 @@
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>The tags added to the analyzer.</p>"
+          "documentation":"<p>An array of key-value pairs applied to the analyzer. The key-value pairs consist of the set of Unicode letters, digits, whitespace, <code>_</code>, <code>.</code>, <code>/</code>, <code>=</code>, <code>+</code>, and <code>-</code>.</p> <p>The tag key is a value that is 1 to 128 characters in length and cannot be prefixed with <code>aws:</code>.</p> <p>The tag value is a value that is 0 to 256 characters in length.</p>"
         },
         "status":{
           "shape":"AnalyzerStatus",
@@ -1155,7 +1213,7 @@
         },
         "configuration":{
           "shape":"AnalyzerConfiguration",
-          "documentation":"<p>Specifies whether the analyzer is an external access or unused access analyzer.</p>"
+          "documentation":"<p>Specifies if the analyzer is an external access, unused access, or internal access analyzer. The <a href=\"https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_GetAnalyzer.html\">GetAnalyzer</a> action includes this property in its response if a configuration is specified, while the <a href=\"https://docs.aws.amazon.com/access-analyzer/latest/APIReference/API_ListAnalyzers.html\">ListAnalyzers</a> action omits it.</p>"
         }
       },
       "documentation":"<p>Contains information about the analyzer.</p>"
@@ -1237,8 +1295,7 @@
     },
     "CancelPolicyGenerationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CheckAccessNotGrantedRequest":{
       "type":"structure",
@@ -1577,7 +1634,7 @@
         },
         "type":{
           "shape":"Type",
-          "documentation":"<p>The type of analyzer to create. Only <code>ACCOUNT</code>, <code>ORGANIZATION</code>, <code>ACCOUNT_UNUSED_ACCESS</code>, and <code>ORGANIZATION_UNUSED_ACCESS</code> analyzers are supported. You can create only one analyzer per account per Region. You can create up to 5 analyzers per organization per Region.</p>"
+          "documentation":"<p>The type of analyzer to create. You can create only one analyzer per account per Region. You can create up to 5 analyzers per organization per Region.</p>"
         },
         "archiveRules":{
           "shape":"InlineArchiveRulesList",
@@ -1594,7 +1651,7 @@
         },
         "configuration":{
           "shape":"AnalyzerConfiguration",
-          "documentation":"<p>Specifies the configuration of the analyzer. If the analyzer is an unused access analyzer, the specified scope of unused access is used for the configuration.</p>"
+          "documentation":"<p>Specifies the configuration of the analyzer. If the analyzer is an unused access analyzer, the specified scope of unused access is used for the configuration. If the analyzer is an internal access analyzer, the specified internal access analysis rules are used for the configuration.</p>"
         }
       },
       "documentation":"<p>Creates an analyzer.</p>"
@@ -1809,11 +1866,33 @@
         },
         "resourceControlPolicyRestriction":{
           "shape":"ResourceControlPolicyRestriction",
-          "documentation":"<p>The type of restriction applied to the finding by the resource owner with an Organizations resource control policy (RCP).</p>"
+          "documentation":"<p>The type of restriction applied to the finding by the resource owner with an Organizations resource control policy (RCP).</p> <ul> <li> <p> <code>APPLICABLE</code>: There is an RCP present in the organization but IAM Access Analyzer does not include it in the evaluation of effective permissions. For example, if <code>s3:DeleteObject</code> is blocked by the RCP and the restriction is <code>APPLICABLE</code>, then <code>s3:DeleteObject</code> would still be included in the list of actions for the finding.</p> </li> <li> <p> <code>FAILED_TO_EVALUATE_RCP</code>: There was an error evaluating the RCP.</p> </li> <li> <p> <code>NOT_APPLICABLE</code>: There was no RCP present in the organization, or there was no RCP applicable to the resource. For example, the resource being analyzed is an Amazon RDS snapshot and there is an RCP in the organization, but the RCP only impacts Amazon S3 buckets.</p> </li> <li> <p> <code>APPLIED</code>: This restriction is not currently available for external access findings. </p> </li> </ul>"
         }
       },
       "documentation":"<p>Contains information about an external access finding.</p>"
     },
+    "ExternalAccessFindingsStatistics":{
+      "type":"structure",
+      "members":{
+        "resourceTypeStatistics":{
+          "shape":"ResourceTypeStatisticsMap",
+          "documentation":"<p>The total number of active cross-account and public findings for each resource type of the specified external access analyzer.</p>"
+        },
+        "totalActiveFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of active findings for the specified external access analyzer.</p>"
+        },
+        "totalArchivedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of archived findings for the specified external access analyzer.</p>"
+        },
+        "totalResolvedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of resolved findings for the specified external access analyzer.</p>"
+        }
+      },
+      "documentation":"<p>Provides aggregate statistics about the findings for the specified external access analyzer.</p>"
+    },
     "FilterCriteriaMap":{
       "type":"map",
       "key":{"shape":"String"},
@@ -1895,6 +1974,29 @@
       },
       "documentation":"<p>Contains information about a finding.</p>"
     },
+    "FindingAggregationAccountDetails":{
+      "type":"structure",
+      "members":{
+        "account":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services account for which unused access finding details are provided.</p>"
+        },
+        "numberOfActiveFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of active unused access findings for the specified Amazon Web Services account.</p>"
+        },
+        "details":{
+          "shape":"FindingAggregationAccountDetailsMap",
+          "documentation":"<p>Provides the number of active findings for each type of unused access for the specified Amazon Web Services account.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the findings for an Amazon Web Services account in an organization unused access analyzer.</p>"
+    },
+    "FindingAggregationAccountDetailsMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"Integer"}
+    },
     "FindingChangeType":{
       "type":"string",
       "enum":[
@@ -1906,6 +2008,10 @@
     "FindingDetails":{
       "type":"structure",
       "members":{
+        "internalAccessDetails":{
+          "shape":"InternalAccessDetails",
+          "documentation":"<p>The details for an internal access analyzer finding. This contains information about access patterns identified within your Amazon Web Services organization or account.</p>"
+        },
         "externalAccessDetails":{
           "shape":"ExternalAccessDetails",
           "documentation":"<p>The details for an external access analyzer finding.</p>"
@@ -2122,7 +2228,7 @@
         },
         "findingType":{
           "shape":"FindingType",
-          "documentation":"<p>The type of the external access or unused access finding.</p>"
+          "documentation":"<p>The type of the access finding. For external access analyzers, the type is <code>ExternalAccess</code>. For unused access analyzers, the type can be <code>UnusedIAMRole</code>, <code>UnusedIAMUserAccessKey</code>, <code>UnusedIAMUserPassword</code>, or <code>UnusedPermission</code>. For internal access analyzers, the type is <code>InternalAccess</code>.</p>"
         }
       },
       "documentation":"<p>Contains information about a finding.</p>"
@@ -2134,7 +2240,8 @@
         "UnusedIAMRole",
         "UnusedIAMUserAccessKey",
         "UnusedIAMUserPassword",
-        "UnusedPermission"
+        "UnusedPermission",
+        "InternalAccess"
       ]
     },
     "FindingsList":{
@@ -2145,6 +2252,29 @@
       "type":"list",
       "member":{"shape":"FindingSummaryV2"}
     },
+    "FindingsStatistics":{
+      "type":"structure",
+      "members":{
+        "externalAccessFindingsStatistics":{
+          "shape":"ExternalAccessFindingsStatistics",
+          "documentation":"<p>The aggregate statistics for an external access analyzer.</p>"
+        },
+        "internalAccessFindingsStatistics":{
+          "shape":"InternalAccessFindingsStatistics",
+          "documentation":"<p>The aggregate statistics for an internal access analyzer. This includes information about active, archived, and resolved findings related to internal access within your Amazon Web Services organization or account.</p>"
+        },
+        "unusedAccessFindingsStatistics":{
+          "shape":"UnusedAccessFindingsStatistics",
+          "documentation":"<p>The aggregate statistics for an unused access analyzer.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the aggregate statistics for an external or unused access analyzer. Only one parameter can be used in a <code>FindingsStatistics</code> object.</p>",
+      "union":true
+    },
+    "FindingsStatisticsList":{
+      "type":"list",
+      "member":{"shape":"FindingsStatistics"}
+    },
     "GenerateFindingRecommendationRequest":{
       "type":"structure",
       "required":[
@@ -2548,7 +2678,30 @@
         },
         "findingType":{
           "shape":"FindingType",
-          "documentation":"<p>The type of the finding. For external access analyzers, the type is <code>ExternalAccess</code>. For unused access analyzers, the type can be <code>UnusedIAMRole</code>, <code>UnusedIAMUserAccessKey</code>, <code>UnusedIAMUserPassword</code>, or <code>UnusedPermission</code>.</p>"
+          "documentation":"<p>The type of the finding. For external access analyzers, the type is <code>ExternalAccess</code>. For unused access analyzers, the type can be <code>UnusedIAMRole</code>, <code>UnusedIAMUserAccessKey</code>, <code>UnusedIAMUserPassword</code>, or <code>UnusedPermission</code>. For internal access analyzers, the type is <code>InternalAccess</code>.</p>"
+        }
+      }
+    },
+    "GetFindingsStatisticsRequest":{
+      "type":"structure",
+      "required":["analyzerArn"],
+      "members":{
+        "analyzerArn":{
+          "shape":"AnalyzerArn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#permission-resources\">ARN of the analyzer</a> used to generate the statistics.</p>"
+        }
+      }
+    },
+    "GetFindingsStatisticsResponse":{
+      "type":"structure",
+      "members":{
+        "findingsStatistics":{
+          "shape":"FindingsStatisticsList",
+          "documentation":"<p>A group of external access or unused access findings statistics.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the retrieval of the findings statistics was last updated. If the findings statistics have not been previously retrieved for the specified analyzer, this field will not be populated.</p>"
         }
       }
     },
@@ -2631,6 +2784,142 @@
       "type":"integer",
       "box":true
     },
+    "InternalAccessAnalysisRule":{
+      "type":"structure",
+      "members":{
+        "inclusions":{
+          "shape":"InternalAccessAnalysisRuleCriteriaList",
+          "documentation":"<p>A list of rules for the internal access analyzer containing criteria to include in analysis. Only resources that meet the rule criteria will generate findings.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about analysis rules for the internal access analyzer. Analysis rules determine which entities will generate findings based on the criteria you define when you create the rule.</p>"
+    },
+    "InternalAccessAnalysisRuleCriteria":{
+      "type":"structure",
+      "members":{
+        "accountIds":{
+          "shape":"AccountIdsList",
+          "documentation":"<p>A list of Amazon Web Services account IDs to apply to the internal access analysis rule criteria. Account IDs can only be applied to the analysis rule criteria for organization-level analyzers.</p>"
+        },
+        "resourceTypes":{
+          "shape":"ResourceTypeList",
+          "documentation":"<p>A list of resource types to apply to the internal access analysis rule criteria. The analyzer will only generate findings for resources of these types. These resource types are currently supported for internal access analyzers:</p> <ul> <li> <p> <code>AWS::S3::Bucket</code> </p> </li> <li> <p> <code>AWS::RDS::DBSnapshot</code> </p> </li> <li> <p> <code>AWS::RDS::DBClusterSnapshot</code> </p> </li> <li> <p> <code>AWS::S3Express::DirectoryBucket</code> </p> </li> <li> <p> <code>AWS::DynamoDB::Table</code> </p> </li> <li> <p> <code>AWS::DynamoDB::Stream</code> </p> </li> </ul>"
+        },
+        "resourceArns":{
+          "shape":"ResourceArnsList",
+          "documentation":"<p>A list of resource ARNs to apply to the internal access analysis rule criteria. The analyzer will only generate findings for resources that match these ARNs.</p>"
+        }
+      },
+      "documentation":"<p>The criteria for an analysis rule for an internal access analyzer.</p>"
+    },
+    "InternalAccessAnalysisRuleCriteriaList":{
+      "type":"list",
+      "member":{"shape":"InternalAccessAnalysisRuleCriteria"}
+    },
+    "InternalAccessConfiguration":{
+      "type":"structure",
+      "members":{
+        "analysisRule":{
+          "shape":"InternalAccessAnalysisRule",
+          "documentation":"<p>Contains information about analysis rules for the internal access analyzer. These rules determine which resources and access patterns will be analyzed.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the configuration of an internal access analyzer for an Amazon Web Services organization or account. This configuration determines how the analyzer evaluates internal access within your Amazon Web Services environment.</p>"
+    },
+    "InternalAccessDetails":{
+      "type":"structure",
+      "members":{
+        "action":{
+          "shape":"ActionList",
+          "documentation":"<p>The action in the analyzed policy statement that has internal access permission to use.</p>"
+        },
+        "condition":{
+          "shape":"ConditionKeyMap",
+          "documentation":"<p>The condition in the analyzed policy statement that resulted in an internal access finding.</p>"
+        },
+        "principal":{
+          "shape":"PrincipalMap",
+          "documentation":"<p>The principal that has access to a resource within the internal environment.</p>"
+        },
+        "principalOwnerAccount":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID that owns the principal identified in the internal access finding.</p>"
+        },
+        "accessType":{
+          "shape":"InternalAccessType",
+          "documentation":"<p>The type of internal access identified in the finding. This indicates how the access is granted within your Amazon Web Services environment.</p>"
+        },
+        "principalType":{
+          "shape":"PrincipalType",
+          "documentation":"<p>The type of principal identified in the internal access finding, such as IAM role or IAM user.</p>"
+        },
+        "sources":{
+          "shape":"FindingSourceList",
+          "documentation":"<p>The sources of the internal access finding. This indicates how the access that generated the finding is granted within your Amazon Web Services environment.</p>"
+        },
+        "resourceControlPolicyRestriction":{
+          "shape":"ResourceControlPolicyRestriction",
+          "documentation":"<p>The type of restriction applied to the finding by the resource owner with an Organizations resource control policy (RCP).</p> <ul> <li> <p> <code>APPLICABLE</code>: There is an RCP present in the organization but IAM Access Analyzer does not include it in the evaluation of effective permissions. For example, if <code>s3:DeleteObject</code> is blocked by the RCP and the restriction is <code>APPLICABLE</code>, then <code>s3:DeleteObject</code> would still be included in the list of actions for the finding. Only applicable to internal access findings with the account as the zone of trust. </p> </li> <li> <p> <code>FAILED_TO_EVALUATE_RCP</code>: There was an error evaluating the RCP.</p> </li> <li> <p> <code>NOT_APPLICABLE</code>: There was no RCP present in the organization. For internal access findings with the account as the zone of trust, <code>NOT_APPLICABLE</code> could also indicate that there was no RCP applicable to the resource.</p> </li> <li> <p> <code>APPLIED</code>: An RCP is present in the organization and IAM Access Analyzer included it in the evaluation of effective permissions. For example, if <code>s3:DeleteObject</code> is blocked by the RCP and the restriction is <code>APPLIED</code>, then <code>s3:DeleteObject</code> would not be included in the list of actions for the finding. Only applicable to internal access findings with the organization as the zone of trust. </p> </li> </ul>"
+        },
+        "serviceControlPolicyRestriction":{
+          "shape":"ServiceControlPolicyRestriction",
+          "documentation":"<p>The type of restriction applied to the finding by an Organizations service control policy (SCP).</p> <ul> <li> <p> <code>APPLICABLE</code>: There is an SCP present in the organization but IAM Access Analyzer does not include it in the evaluation of effective permissions. Only applicable to internal access findings with the account as the zone of trust. </p> </li> <li> <p> <code>FAILED_TO_EVALUATE_SCP</code>: There was an error evaluating the SCP.</p> </li> <li> <p> <code>NOT_APPLICABLE</code>: There was no SCP present in the organization. For internal access findings with the account as the zone of trust, <code>NOT_APPLICABLE</code> could also indicate that there was no SCP applicable to the principal.</p> </li> <li> <p> <code>APPLIED</code>: An SCP is present in the organization and IAM Access Analyzer included it in the evaluation of effective permissions. Only applicable to internal access findings with the organization as the zone of trust. </p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Contains information about an internal access finding. This includes details about the access that was identified within your Amazon Web Services organization or account.</p>"
+    },
+    "InternalAccessFindingsStatistics":{
+      "type":"structure",
+      "members":{
+        "resourceTypeStatistics":{
+          "shape":"InternalAccessResourceTypeStatisticsMap",
+          "documentation":"<p>The total number of active findings for each resource type of the specified internal access analyzer.</p>"
+        },
+        "totalActiveFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of active findings for the specified internal access analyzer.</p>"
+        },
+        "totalArchivedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of archived findings for the specified internal access analyzer.</p>"
+        },
+        "totalResolvedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of resolved findings for the specified internal access analyzer.</p>"
+        }
+      },
+      "documentation":"<p>Provides aggregate statistics about the findings for the specified internal access analyzer. This includes counts of active, archived, and resolved findings.</p>"
+    },
+    "InternalAccessResourceTypeDetails":{
+      "type":"structure",
+      "members":{
+        "totalActiveFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of active findings for the resource type in the internal access analyzer.</p>"
+        },
+        "totalResolvedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of resolved findings for the resource type in the internal access analyzer.</p>"
+        },
+        "totalArchivedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of archived findings for the resource type in the internal access analyzer.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the total number of active, archived, and resolved findings for a resource type of an internal access analyzer.</p>"
+    },
+    "InternalAccessResourceTypeStatisticsMap":{
+      "type":"map",
+      "key":{"shape":"ResourceType"},
+      "value":{"shape":"InternalAccessResourceTypeDetails"}
+    },
+    "InternalAccessType":{
+      "type":"string",
+      "enum":[
+        "INTRA_ACCOUNT",
+        "INTRA_ORG"
+      ]
+    },
     "InternalServerException":{
       "type":"structure",
       "required":["message"],
@@ -2651,8 +2940,7 @@
     },
     "InternetConfiguration":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This configuration sets the network origin for the Amazon S3 access point or multi-region access point to <code>Internet</code>.</p>"
     },
     "InvalidParameterException":{
@@ -3234,7 +3522,7 @@
           "documentation":"<p>The configuration for the Amazon S3 access point or multi-region access point with an <code>Internet</code> origin.</p>"
         }
       },
-      "documentation":"<p>The proposed <code>InternetConfiguration</code> or <code>VpcConfiguration</code> to apply to the Amazon S3 access point. <code>VpcConfiguration</code> does not apply to multi-region access points. You can make the access point accessible from the internet, or you can specify that all requests made through that access point must originate from a specific virtual private cloud (VPC). You can specify only one type of network configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/creating-access-points.html\">Creating access points</a>.</p>",
+      "documentation":"<p>The proposed <code>InternetConfiguration</code> or <code>VpcConfiguration</code> to apply to the Amazon S3 access point. You can make the access point accessible from the internet, or you can specify that all requests made through that access point must originate from a specific virtual private cloud (VPC). You can specify only one type of network configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/creating-access-points.html\">Creating access points</a>.</p>",
       "union":true
     },
     "OrderBy":{
@@ -3361,6 +3649,13 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "PrincipalType":{
+      "type":"string",
+      "enum":[
+        "IAM_ROLE",
+        "IAM_USER"
+      ]
+    },
     "RdsDbClusterSnapshotAccountId":{"type":"string"},
     "RdsDbClusterSnapshotAccountIdsList":{
       "type":"list",
@@ -3523,12 +3818,17 @@
       "type":"string",
       "pattern":"arn:[^:]*:[^:]*:[^:]*:[^:]*:.*"
     },
+    "ResourceArnsList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "ResourceControlPolicyRestriction":{
       "type":"string",
       "enum":[
         "APPLICABLE",
         "FAILED_TO_EVALUATE_RCP",
-        "NOT_APPLICABLE"
+        "NOT_APPLICABLE",
+        "APPLIED"
       ]
     },
     "ResourceNotFoundException":{
@@ -3578,6 +3878,33 @@
         "AWS::IAM::User"
       ]
     },
+    "ResourceTypeDetails":{
+      "type":"structure",
+      "members":{
+        "totalActivePublic":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of active public findings for the resource type.</p>"
+        },
+        "totalActiveCrossAccount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of active cross-account findings for the resource type.</p>"
+        },
+        "totalActiveErrors":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of active errors for the resource type.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the total number of active cross-account and public findings for a resource type of an external access analyzer.</p>"
+    },
+    "ResourceTypeList":{
+      "type":"list",
+      "member":{"shape":"ResourceType"}
+    },
+    "ResourceTypeStatisticsMap":{
+      "type":"map",
+      "key":{"shape":"ResourceType"},
+      "value":{"shape":"ResourceTypeDetails"}
+    },
     "RetiringPrincipal":{"type":"string"},
     "RoleArn":{
       "type":"string",
@@ -3596,7 +3923,7 @@
         },
         "networkOrigin":{
           "shape":"NetworkOriginConfiguration",
-          "documentation":"<p>The proposed <code>Internet</code> and <code>VpcConfiguration</code> to apply to this Amazon S3 access point. <code>VpcConfiguration</code> does not apply to multi-region access points. If the access preview is for a new resource and neither is specified, the access preview uses <code>Internet</code> for the network origin. If the access preview is for an existing resource and neither is specified, the access preview uses the exiting network origin.</p>"
+          "documentation":"<p>The proposed <code>Internet</code> and <code>VpcConfiguration</code> to apply to this Amazon S3 access point. <code>VpcConfiguration</code> does not apply to multi-region access points. If the access preview is for a new resource and neither is specified, the access preview uses <code>Internet</code> for the network origin. If the access preview is for an existing resource and neither is specified, the access preview uses the existing network origin.</p>"
         }
       },
       "documentation":"<p>The configuration for an Amazon S3 access point or multi-region access point for the bucket. You can propose up to 10 access points or multi-region access points per bucket. If the proposed Amazon S3 access point configuration is for an existing bucket, the access preview uses the proposed access point configuration in place of the existing access points. To propose an access point without a policy, you can provide an empty string as the access point policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/creating-access-points.html\">Creating access points</a>. For more information about access point policy limits, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-points-restrictions-limitations.html\">Access points restrictions and limitations</a>.</p>"
@@ -3651,15 +3978,39 @@
       "documentation":"<p>Proposed access control configuration for an Amazon S3 bucket. You can propose a configuration for a new Amazon S3 bucket or an existing Amazon S3 bucket that you own by specifying the Amazon S3 bucket policy, bucket ACLs, bucket BPA settings, Amazon S3 access points, and multi-region access points attached to the bucket. If the configuration is for an existing Amazon S3 bucket and you do not specify the Amazon S3 bucket policy, the access preview uses the existing policy attached to the bucket. If the access preview is for a new resource and you do not specify the Amazon S3 bucket policy, the access preview assumes a bucket without a policy. To propose deletion of an existing bucket policy, you can specify an empty string. For more information about bucket policy limits, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html\">Bucket Policy Examples</a>.</p>"
     },
     "S3BucketPolicy":{"type":"string"},
+    "S3ExpressDirectoryAccessPointArn":{
+      "type":"string",
+      "pattern":"arn:[^:]*:s3express:[^:]*:[^:]*:accesspoint/.*"
+    },
+    "S3ExpressDirectoryAccessPointConfiguration":{
+      "type":"structure",
+      "members":{
+        "accessPointPolicy":{
+          "shape":"AccessPointPolicy",
+          "documentation":"<p>The proposed access point policy for an Amazon S3 directory bucket access point.</p>"
+        },
+        "networkOrigin":{"shape":"NetworkOriginConfiguration"}
+      },
+      "documentation":"<p>Proposed configuration for an access point attached to an Amazon S3 directory bucket. You can propose up to 10 access points per bucket. If the proposed access point configuration is for an existing Amazon S3 directory bucket, the access preview uses the proposed access point configuration in place of the existing access points. To propose an access point without a policy, you can provide an empty string as the access point policy. For more information about access points for Amazon S3 directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets.html\">Managing access to directory buckets with access points</a> in the Amazon Simple Storage Service User Guide.</p>"
+    },
+    "S3ExpressDirectoryAccessPointConfigurationsMap":{
+      "type":"map",
+      "key":{"shape":"S3ExpressDirectoryAccessPointArn"},
+      "value":{"shape":"S3ExpressDirectoryAccessPointConfiguration"}
+    },
     "S3ExpressDirectoryBucketConfiguration":{
       "type":"structure",
       "members":{
         "bucketPolicy":{
           "shape":"S3ExpressDirectoryBucketPolicy",
           "documentation":"<p>The proposed bucket policy for the Amazon S3 directory bucket.</p>"
+        },
+        "accessPoints":{
+          "shape":"S3ExpressDirectoryAccessPointConfigurationsMap",
+          "documentation":"<p>The proposed access points for the Amazon S3 directory bucket.</p>"
         }
       },
-      "documentation":"<p>Proposed access control configuration for an Amazon S3 directory bucket. You can propose a configuration for a new Amazon S3 directory bucket or an existing Amazon S3 directory bucket that you own by specifying the Amazon S3 bucket policy. If the configuration is for an existing Amazon S3 directory bucket and you do not specify the Amazon S3 bucket policy, the access preview uses the existing policy attached to the directory bucket. If the access preview is for a new resource and you do not specify the Amazon S3 bucket policy, the access preview assumes an directory bucket without a policy. To propose deletion of an existing bucket policy, you can specify an empty string. For more information about Amazon S3 directory bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example directory bucket policies for S3 Express One Zone</a>.</p>"
+      "documentation":"<p>Proposed access control configuration for an Amazon S3 directory bucket. You can propose a configuration for a new Amazon S3 directory bucket or an existing Amazon S3 directory bucket that you own by specifying the Amazon S3 bucket policy. If the configuration is for an existing Amazon S3 directory bucket and you do not specify the Amazon S3 bucket policy, the access preview uses the existing policy attached to the directory bucket. If the access preview is for a new resource and you do not specify the Amazon S3 bucket policy, the access preview assumes an directory bucket without a policy. To propose deletion of an existing bucket policy, you can specify an empty string. For more information about Amazon S3 directory bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for directory buckets</a> in the Amazon Simple Storage Service User Guide.</p>"
     },
     "S3ExpressDirectoryBucketPolicy":{"type":"string"},
     "S3PublicAccessBlockConfiguration":{
@@ -3696,6 +4047,15 @@
     },
     "SecretsManagerSecretKmsId":{"type":"string"},
     "SecretsManagerSecretPolicy":{"type":"string"},
+    "ServiceControlPolicyRestriction":{
+      "type":"string",
+      "enum":[
+        "APPLICABLE",
+        "FAILED_TO_EVALUATE_SCP",
+        "NOT_APPLICABLE",
+        "APPLIED"
+      ]
+    },
     "ServiceQuotaExceededException":{
       "type":"structure",
       "required":[
@@ -3898,8 +4258,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response to the request.</p>"
     },
     "TagsList":{
@@ -3988,7 +4347,9 @@
         "ACCOUNT",
         "ORGANIZATION",
         "ACCOUNT_UNUSED_ACCESS",
-        "ORGANIZATION_UNUSED_ACCESS"
+        "ORGANIZATION_UNUSED_ACCESS",
+        "ACCOUNT_INTERNAL_ACCESS",
+        "ORGANIZATION_INTERNAL_ACCESS"
       ]
     },
     "UnprocessableEntityException":{
@@ -4029,8 +4390,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response to the request.</p>"
     },
     "UnusedAccessConfiguration":{
@@ -4044,6 +4404,50 @@
       },
       "documentation":"<p>Contains information about an unused access analyzer.</p>"
     },
+    "UnusedAccessFindingsStatistics":{
+      "type":"structure",
+      "members":{
+        "unusedAccessTypeStatistics":{
+          "shape":"UnusedAccessTypeStatisticsList",
+          "documentation":"<p>A list of details about the total number of findings for each type of unused access for the analyzer. </p>"
+        },
+        "topAccounts":{
+          "shape":"AccountAggregations",
+          "documentation":"<p>A list of one to ten Amazon Web Services accounts that have the most active findings for the unused access analyzer.</p>"
+        },
+        "totalActiveFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of active findings for the unused access analyzer.</p>"
+        },
+        "totalArchivedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of archived findings for the unused access analyzer.</p>"
+        },
+        "totalResolvedFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of resolved findings for the unused access analyzer.</p>"
+        }
+      },
+      "documentation":"<p>Provides aggregate statistics about the findings for the specified unused access analyzer.</p>"
+    },
+    "UnusedAccessTypeStatistics":{
+      "type":"structure",
+      "members":{
+        "unusedAccessType":{
+          "shape":"String",
+          "documentation":"<p>The type of unused access.</p>"
+        },
+        "total":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of findings for the specified unused access type.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the total number of findings for a type of unused access.</p>"
+    },
+    "UnusedAccessTypeStatisticsList":{
+      "type":"list",
+      "member":{"shape":"UnusedAccessTypeStatistics"}
+    },
     "UnusedAction":{
       "type":"structure",
       "required":["action"],
@@ -4408,5 +4812,5 @@
       "pattern":"vpc-([0-9a-f]){8}(([0-9a-f]){9})?"
     }
   },
-  "documentation":"<p>Identity and Access Management Access Analyzer helps you to set, verify, and refine your IAM policies by providing a suite of capabilities. Its features include findings for external and unused access, basic and custom policy checks for validating policies, and policy generation to generate fine-grained policies. To start using IAM Access Analyzer to identify external or unused access, you first need to create an analyzer.</p> <p> <b>External access analyzers</b> help identify potential risks of accessing resources by enabling you to identify any resource policies that grant access to an external principal. It does this by using logic-based reasoning to analyze resource-based policies in your Amazon Web Services environment. An external principal can be another Amazon Web Services account, a root user, an IAM user or role, a federated user, an Amazon Web Services service, or an anonymous user. You can also use IAM Access Analyzer to preview public and cross-account access to your resources before deploying permissions changes.</p> <p> <b>Unused access analyzers</b> help identify potential identity access risks by enabling you to identify unused IAM roles, unused access keys, unused console passwords, and IAM principals with unused service and action-level permissions.</p> <p>Beyond findings, IAM Access Analyzer provides basic and custom policy checks to validate IAM policies before deploying permissions changes. You can use policy generation to refine permissions by attaching a policy generated using access activity logged in CloudTrail logs. </p> <p>This guide describes the IAM Access Analyzer operations that you can call programmatically. For general information about IAM Access Analyzer, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html\">Identity and Access Management Access Analyzer</a> in the <b>IAM User Guide</b>.</p>"
+  "documentation":"<p>Identity and Access Management Access Analyzer helps you to set, verify, and refine your IAM policies by providing a suite of capabilities. Its features include findings for external, internal, and unused access, basic and custom policy checks for validating policies, and policy generation to generate fine-grained policies. To start using IAM Access Analyzer to identify external, internal, or unused access, you first need to create an analyzer.</p> <p> <b>External access analyzers</b> help you identify potential risks of accessing resources by enabling you to identify any resource policies that grant access to an external principal. It does this by using logic-based reasoning to analyze resource-based policies in your Amazon Web Services environment. An external principal can be another Amazon Web Services account, a root user, an IAM user or role, a federated user, an Amazon Web Services service, or an anonymous user. You can also use IAM Access Analyzer to preview public and cross-account access to your resources before deploying permissions changes.</p> <p> <b>Internal access analyzers</b> help you identify which principals within your organization or account have access to selected resources. This analysis supports implementing the principle of least privilege by ensuring that your specified resources can only be accessed by the intended principals within your organization.</p> <p> <b>Unused access analyzers</b> help you identify potential identity access risks by enabling you to identify unused IAM roles, unused access keys, unused console passwords, and IAM principals with unused service and action-level permissions.</p> <p>Beyond findings, IAM Access Analyzer provides basic and custom policy checks to validate IAM policies before deploying permissions changes. You can use policy generation to refine permissions by attaching a policy generated using access activity logged in CloudTrail logs. </p> <p>This guide describes the IAM Access Analyzer operations that you can call programmatically. For general information about IAM Access Analyzer, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html\">Using Identity and Access Management Access Analyzer</a> in the <b>IAM User Guide</b>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/account/2021-02-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/account/2021-02-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/account/2021-02-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/account/2021-02-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/account/2021-02-01/service-2.json 2.31.35-1/awscli/botocore/data/account/2021-02-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/account/2021-02-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/account/2021-02-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,9 +25,9 @@
       "output":{"shape":"AcceptPrimaryEmailUpdateResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
@@ -60,9 +60,9 @@
       },
       "input":{"shape":"DisableRegionRequest"},
       "errors":[
+        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
@@ -77,14 +77,31 @@
       },
       "input":{"shape":"EnableRegionRequest"},
       "errors":[
+        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Enables (opts-in) a particular Region for an account.</p>"
     },
+    "GetAccountInformation":{
+      "name":"GetAccountInformation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/getAccountInformation",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAccountInformationRequest"},
+      "output":{"shape":"GetAccountInformationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about the specified account including its account name, account ID, and account creation date and time. To use this API, an IAM user or role must have the <code>account:GetAccountInformation</code> IAM permission. </p>"
+    },
     "GetAlternateContact":{
       "name":"GetAlternateContact",
       "http":{
@@ -132,8 +149,8 @@
       "output":{"shape":"GetPrimaryEmailResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
@@ -149,8 +166,8 @@
       "input":{"shape":"GetRegionOptStatusRequest"},
       "output":{"shape":"GetRegionOptStatusResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
@@ -166,13 +183,30 @@
       "input":{"shape":"ListRegionsRequest"},
       "output":{"shape":"ListRegionsResponse"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Lists all the Regions for a given account and their respective opt-in statuses. Optionally, this list can be filtered by the <code>region-opt-status-contains</code> parameter. </p>"
     },
+    "PutAccountName":{
+      "name":"PutAccountName",
+      "http":{
+        "method":"POST",
+        "requestUri":"/putAccountName",
+        "responseCode":200
+      },
+      "input":{"shape":"PutAccountNameRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates the account name of the specified account. To use this API, IAM principals must have the <code>account:PutAccountName</code> IAM permission. </p>",
+      "idempotent":true
+    },
     "PutAlternateContact":{
       "name":"PutAlternateContact",
       "http":{
@@ -218,9 +252,9 @@
       "output":{"shape":"StartPrimaryEmailUpdateResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerException"}
       ],
@@ -238,7 +272,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
         },
         "Otp":{
           "shape":"Otp",
@@ -263,6 +297,12 @@
       "type":"structure",
       "required":["message"],
       "members":{
+        "errorType":{
+          "shape":"String",
+          "documentation":"<p>The value populated to the <code>x-amzn-ErrorType</code> response header by API Gateway.</p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "message":{"shape":"String"}
       },
       "documentation":"<p>The operation failed because the calling identity doesn't have the minimum required permissions.</p>",
@@ -272,10 +312,21 @@
       },
       "exception":true
     },
+    "AccountCreatedDate":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
     "AccountId":{
       "type":"string",
       "pattern":"^\\d{12}$"
     },
+    "AccountName":{
+      "type":"string",
+      "max":50,
+      "min":1,
+      "pattern":"^[ -;=?-~]+$",
+      "sensitive":true
+    },
     "AddressLine":{
       "type":"string",
       "max":60,
@@ -332,9 +383,15 @@
       "type":"structure",
       "required":["message"],
       "members":{
+        "errorType":{
+          "shape":"String",
+          "documentation":"<p>The value populated to the <code>x-amzn-ErrorType</code> response header by API Gateway.</p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING).</p>",
+      "documentation":"<p>The request could not be processed because of a conflict in the current status of the resource. For example, this happens if you try to enable a Region that is currently being disabled (in a status of DISABLING) or if you try to change an account’s root user email to an email address which is already in use.</p>",
       "error":{
         "httpStatusCode":409,
         "senderFault":true
@@ -436,7 +493,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         },
         "RegionName":{
           "shape":"RegionName",
@@ -463,7 +520,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         },
         "RegionName":{
           "shape":"RegionName",
@@ -477,6 +534,32 @@
       "min":1,
       "sensitive":true
     },
+    "GetAccountInformationRequest":{
+      "type":"structure",
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>Specifies the 12 digit account ID number of the Amazon Web Services account that you want to access or modify with this operation.</p> <p>If you do not specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation.</p> <p>To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account, and the specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>; it must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, then don't specify this parameter, and call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+        }
+      }
+    },
+    "GetAccountInformationResponse":{
+      "type":"structure",
+      "members":{
+        "AccountCreatedDate":{
+          "shape":"AccountCreatedDate",
+          "documentation":"<p>The date and time the account was created.</p>"
+        },
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
+        },
+        "AccountName":{
+          "shape":"AccountName",
+          "documentation":"<p>The name of the account.</p>"
+        }
+      }
+    },
     "GetAlternateContactRequest":{
       "type":"structure",
       "required":["AlternateContactType"],
@@ -505,7 +588,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         }
       }
     },
@@ -524,7 +607,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
         }
       }
     },
@@ -543,7 +626,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         },
         "RegionName":{
           "shape":"RegionName",
@@ -568,6 +651,12 @@
       "type":"structure",
       "required":["message"],
       "members":{
+        "errorType":{
+          "shape":"String",
+          "documentation":"<p>The value populated to the <code>x-amzn-ErrorType</code> response header by API Gateway.</p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "message":{"shape":"String"}
       },
       "documentation":"<p>The operation failed because of an error internal to Amazon Web Services. Try your operation again later.</p>",
@@ -581,7 +670,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         },
         "MaxResults":{
           "shape":"ListRegionsRequestMaxResultsInteger",
@@ -658,6 +747,20 @@
         "ACCEPTED"
       ]
     },
+    "PutAccountNameRequest":{
+      "type":"structure",
+      "required":["AccountName"],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>Specifies the 12 digit account ID number of the Amazon Web Services account that you want to access or modify with this operation.</p> <p>If you do not specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation.</p> <p>To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account, and the specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>; it must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, then don't specify this parameter, and call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+        },
+        "AccountName":{
+          "shape":"AccountName",
+          "documentation":"<p>The name of the account.</p>"
+        }
+      }
+    },
     "PutAlternateContactRequest":{
       "type":"structure",
       "required":[
@@ -700,7 +803,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. If you don't specify this parameter, it defaults to the Amazon Web Services account of the identity used to call the operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <note> <p>The management account can't specify its own <code>AccountId</code>. It must call the operation in standalone context by not including the <code>AccountId</code> parameter.</p> </note> <p>To call this operation on an account that is not a member of an organization, don't specify this parameter. Instead, call the operation using an identity belonging to the account whose contacts you wish to retrieve or modify.</p>"
         },
         "ContactInformation":{
           "shape":"ContactInformation",
@@ -749,6 +852,12 @@
       "type":"structure",
       "required":["message"],
       "members":{
+        "errorType":{
+          "shape":"String",
+          "documentation":"<p>The value populated to the <code>x-amzn-ErrorType</code> response header by API Gateway.</p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "message":{"shape":"String"}
       },
       "documentation":"<p>The operation failed because it specified a resource that can't be found.</p>",
@@ -771,7 +880,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-trusted-access.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/using-orgs-delegated-admin.html\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
+          "documentation":"<p>Specifies the 12-digit account ID number of the Amazon Web Services account that you want to access or modify with this operation. To use this parameter, the caller must be an identity in the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#account\">organization's management account</a> or a delegated administrator account. The specified account ID must be a member account in the same organization. The organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features enabled</a>, and the organization must have <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">trusted access</a> enabled for the Account Management service, and optionally a <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#delegated-admin\">delegated admin</a> account assigned.</p> <p>This operation can only be called from the management account or the delegated administrator account of an organization for a member account.</p> <note> <p>The management account can't specify its own <code>AccountId</code>.</p> </note>"
         },
         "PrimaryEmail":{
           "shape":"PrimaryEmailAddress",
@@ -805,6 +914,12 @@
       "type":"structure",
       "required":["message"],
       "members":{
+        "errorType":{
+          "shape":"String",
+          "documentation":"<p>The value populated to the <code>x-amzn-ErrorType</code> response header by API Gateway.</p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "message":{"shape":"String"}
       },
       "documentation":"<p>The operation failed because it was called too frequently and exceeded a throttle limit.</p>",
diff -pruN 2.23.6-1/awscli/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm/2015-12-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/acm/2015-12-08/service-2.json 2.31.35-1/awscli/botocore/data/acm/2015-12-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/acm/2015-12-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm/2015-12-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2015-12-08",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"acm",
     "jsonVersion":"1.1",
     "protocol":"json",
@@ -10,9 +11,9 @@
     "serviceFullName":"AWS Certificate Manager",
     "serviceId":"ACM",
     "signatureVersion":"v4",
+    "signingName":"acm",
     "targetPrefix":"CertificateManager",
-    "uid":"acm-2015-12-08",
-    "auth":["aws.auth#sigv4"]
+    "uid":"acm-2015-12-08"
   },
   "operations":{
     "AddTagsToCertificate":{
@@ -23,13 +24,13 @@
       },
       "input":{"shape":"AddTagsToCertificateRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TagPolicyException"},
+        {"shape":"TooManyTagsException"},
         {"shape":"InvalidArnException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InvalidTagException"},
-        {"shape":"TooManyTagsException"},
-        {"shape":"TagPolicyException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Adds one or more tags to an ACM certificate. Tags are labels that you can use to identify and organize your Amazon Web Services resources. Each tag consists of a <code>key</code> and an optional <code>value</code>. You specify the certificate on input by its Amazon Resource Name (ARN). You specify the tag by using a key-value pair. </p> <p>You can apply a tag to just one certificate if you want to identify a specific characteristic of that certificate, or you can apply the same tag to multiple certificates if you want to filter for a common relationship among those certificates. Similarly, you can apply the same tag to multiple resources if you want to specify a relationship among those resources. For example, you can add the same tag to an ACM certificate and an Elastic Load Balancing load balancer to indicate that they are both used by the same website. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/tags.html\">Tagging ACM certificates</a>. </p> <p>To remove one or more tags, use the <a>RemoveTagsFromCertificate</a> action. To view all of the tags that have been applied to the certificate, use the <a>ListTagsForCertificate</a> action. </p>"
     },
@@ -41,12 +42,12 @@
       },
       "input":{"shape":"DeleteCertificateRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ResourceInUseException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidArnException"},
         {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Deletes a certificate and its associated private key. If this action succeeds, the certificate no longer appears in the list that can be displayed by calling the <a>ListCertificates</a> action or be retrieved by calling the <a>GetCertificate</a> action. The certificate will not be available for use by Amazon Web Services services integrated with ACM. </p> <note> <p>You cannot delete an ACM certificate that is being used by another Amazon Web Services service. To delete a certificate that is in use, the certificate association must first be removed.</p> </note>"
     },
@@ -59,8 +60,8 @@
       "input":{"shape":"DescribeCertificateRequest"},
       "output":{"shape":"DescribeCertificateResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"InvalidArnException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Returns detailed metadata about the specified ACM certificate.</p> <p>If you have just created a certificate using the <code>RequestCertificate</code> action, there is a delay of several seconds before you can retrieve information about it.</p>"
     },
@@ -73,11 +74,11 @@
       "input":{"shape":"ExportCertificateRequest"},
       "output":{"shape":"ExportCertificateResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidArnException"},
         {"shape":"RequestInProgressException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Exports a private certificate issued by a private certificate authority (CA) for use anywhere. The exported file contains the certificate, the certificate chain, and the encrypted private 2048-bit RSA key associated with the public key that is embedded in the certificate. For security, you must assign a passphrase for the private key when exporting it. </p> <p>For information about exporting and formatting a certificate using the ACM console or CLI, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-export-private.html\">Export a Private Certificate</a>.</p>"
+      "documentation":"<p>Exports a private certificate issued by a private certificate authority (CA) or public certificate for use anywhere. The exported file contains the certificate, the certificate chain, and the encrypted private key associated with the public key that is embedded in the certificate. For security, you must assign a passphrase for the private key when exporting it. </p> <p>For information about exporting and formatting a certificate using the ACM console or CLI, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/export-private.html\">Export a private certificate</a> and <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/export-public-certificate\">Export a public certificate</a>.</p>"
     },
     "GetAccountConfiguration":{
       "name":"GetAccountConfiguration",
@@ -87,8 +88,8 @@
       },
       "output":{"shape":"GetAccountConfigurationResponse"},
       "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Returns the account configuration options associated with an Amazon Web Services account.</p>"
     },
@@ -101,9 +102,9 @@
       "input":{"shape":"GetCertificateRequest"},
       "output":{"shape":"GetCertificateResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidArnException"},
         {"shape":"RequestInProgressException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Retrieves a certificate and its certificate chain. The certificate may be either a public or private certificate issued using the ACM <code>RequestCertificate</code> action, or a certificate imported into ACM using the <code>ImportCertificate</code> action. The chain consists of the certificate of the issuing CA and the intermediate certificates of any other subordinate CAs. All of the certificates are base64 encoded. You can use <a href=\"https://wiki.openssl.org/index.php/Command_Line_Utilities\">OpenSSL</a> to decode the certificates and inspect individual fields.</p>"
     },
@@ -116,13 +117,13 @@
       "input":{"shape":"ImportCertificateRequest"},
       "output":{"shape":"ImportCertificateResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"InvalidTagException"},
-        {"shape":"TooManyTagsException"},
-        {"shape":"TagPolicyException"},
         {"shape":"InvalidParameterException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"TagPolicyException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"InvalidArnException"},
+        {"shape":"InvalidTagException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Imports a certificate into Certificate Manager (ACM) to use with services that are integrated with ACM. Note that <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-services.html\">integrated services</a> allow only certificate types and keys they support to be associated with their resources. Further, their support differs depending on whether the certificate is imported into IAM or into ACM. For more information, see the documentation for each service. For more information about importing certificates into ACM, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html\">Importing Certificates</a> in the <i>Certificate Manager User Guide</i>. </p> <note> <p>ACM does not provide <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html\">managed renewal</a> for certificates that you import.</p> </note> <p>Note the following guidelines when importing third party certificates:</p> <ul> <li> <p>You must enter the private key that matches the certificate you are importing.</p> </li> <li> <p>The private key must be unencrypted. You cannot import a private key that is protected by a password or a passphrase.</p> </li> <li> <p>The private key must be no larger than 5 KB (5,120 bytes).</p> </li> <li> <p>The certificate, private key, and certificate chain must be PEM-encoded.</p> </li> <li> <p>The current time must be between the <code>Not Before</code> and <code>Not After</code> certificate fields.</p> </li> <li> <p>The <code>Issuer</code> field must not be empty.</p> </li> <li> <p>The OCSP authority URL, if present, must not exceed 1000 characters.</p> </li> <li> <p>To import a new certificate, omit the <code>CertificateArn</code> argument. Include this argument only when you want to replace a previously imported certificate.</p> </li> <li> <p>When you import a certificate by using the CLI, you must specify the certificate, the certificate chain, and the private key by their file names preceded by <code>fileb://</code>. For example, you can specify a certificate saved in the <code>C:\\temp</code> folder as <code>fileb://C:\\temp\\certificate_to_import.pem</code>. If you are making an HTTP or HTTPS Query request, include these arguments as BLOBs. </p> </li> <li> <p>When you import a certificate by using an SDK, you must specify the certificate, the certificate chain, and the private key files in the manner required by the programming language you're using. </p> </li> <li> <p>The cryptographic algorithm of an imported certificate must match the algorithm of the signing CA. For example, if the signing CA key type is RSA, then the certificate key type must also be RSA.</p> </li> </ul> <p>This operation returns the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Name (ARN)</a> of the imported certificate.</p>"
     },
@@ -135,10 +136,10 @@
       "input":{"shape":"ListCertificatesRequest"},
       "output":{"shape":"ListCertificatesResponse"},
       "errors":[
-        {"shape":"InvalidArgsException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"InvalidArgsException"}
       ],
-      "documentation":"<p>Retrieves a list of certificate ARNs and domain names. By default, the API returns RSA_2048 certificates. To return all certificates in the account, include the <code>keyType</code> filter with the values <code>[RSA_1024, RSA_2048, RSA_3072, RSA_4096, EC_prime256v1, EC_secp384r1, EC_secp521r1]</code>.</p> <p>In addition to <code>keyType</code>, you can also filter by the <code>CertificateStatuses</code>, <code>keyUsage</code>, and <code>extendedKeyUsage</code> attributes on the certificate. For more information, see <a>Filters</a>.</p>"
+      "documentation":"<p>Retrieves a list of certificate ARNs and domain names. You can request that only certificates that match a specific status be listed. You can also filter by specific attributes of the certificate. Default filtering returns only <code>RSA_2048</code> certificates. For more information, see <a>Filters</a>.</p>"
     },
     "ListTagsForCertificate":{
       "name":"ListTagsForCertificate",
@@ -149,8 +150,8 @@
       "input":{"shape":"ListTagsForCertificateRequest"},
       "output":{"shape":"ListTagsForCertificateResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"InvalidArnException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists the tags that have been applied to the ACM certificate. Use the certificate's Amazon Resource Name (ARN) to specify the certificate. To add a tag to an ACM certificate, use the <a>AddTagsToCertificate</a> action. To delete a tag, use the <a>RemoveTagsFromCertificate</a> action. </p>"
     },
@@ -164,8 +165,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Adds or modifies account-level configurations in ACM. </p> <p>The supported configuration option is <code>DaysBeforeExpiry</code>. This option specifies the number of days prior to certificate expiration when ACM starts generating <code>EventBridge</code> events. ACM sends one event per day per certificate until the certificate expires. By default, accounts receive events starting 45 days before certificate expiration.</p>"
     },
@@ -177,12 +178,12 @@
       },
       "input":{"shape":"RemoveTagsFromCertificateRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TagPolicyException"},
         {"shape":"InvalidArnException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InvalidTagException"},
-        {"shape":"TagPolicyException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Remove one or more tags from an ACM certificate. A tag consists of a key-value pair. If you do not specify the value portion of the tag when calling this function, the tag will be removed regardless of value. If you specify a value, the tag is removed only if it is associated with the specified value. </p> <p>To add tags to a certificate, use the <a>AddTagsToCertificate</a> action. To view all of the tags that have been applied to a specific ACM certificate, use the <a>ListTagsForCertificate</a> action. </p>"
     },
@@ -194,10 +195,11 @@
       },
       "input":{"shape":"RenewCertificateRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"InvalidArnException"},
+        {"shape":"RequestInProgressException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Renews an eligible ACM certificate. At this time, only exported private certificates can be renewed with this operation. In order to renew your Amazon Web Services Private CA certificates with ACM, you must first <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/PcaPermissions.html\">grant the ACM service principal permission to do so</a>. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/manual-renewal.html\">Testing Managed Renewal</a> in the ACM User Guide.</p>"
+      "documentation":"<p>Renews an <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/managed-renewal.html\">eligible ACM certificate</a>. In order to renew your Amazon Web Services Private CA certificates with ACM, you must first <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/PcaPermissions.html\">grant the ACM service principal permission to do so</a>. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/manual-renewal.html\">Testing Managed Renewal</a> in the ACM User Guide.</p>"
     },
     "RequestCertificate":{
       "name":"RequestCertificate",
@@ -208,15 +210,15 @@
       "input":{"shape":"RequestCertificateRequest"},
       "output":{"shape":"RequestCertificateResponse"},
       "errors":[
-        {"shape":"LimitExceededException"},
-        {"shape":"InvalidDomainValidationOptionsException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TagPolicyException"},
+        {"shape":"TooManyTagsException"},
         {"shape":"InvalidArnException"},
         {"shape":"InvalidTagException"},
-        {"shape":"TooManyTagsException"},
-        {"shape":"TagPolicyException"},
-        {"shape":"InvalidParameterException"}
+        {"shape":"InvalidDomainValidationOptionsException"},
+        {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Requests an ACM certificate for use with other Amazon Web Services services. To request an ACM certificate, you must specify a fully qualified domain name (FQDN) in the <code>DomainName</code> parameter. You can also specify additional FQDNs in the <code>SubjectAlternativeNames</code> parameter. </p> <p>If you are requesting a private certificate, domain validation is not required. If you are requesting a public certificate, each domain name that you specify must be validated to verify that you own or control the domain. You can use <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html\">DNS validation</a> or <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html\">email validation</a>. We recommend that you use DNS validation. ACM issues public certificates after receiving approval from the domain owner. </p> <note> <p>ACM behavior differs from the <a href=\"https://datatracker.ietf.org/doc/html/rfc6125#appendix-B.2\">RFC 6125</a> specification of the certificate validation process. ACM first checks for a Subject Alternative Name, and, if it finds one, ignores the common name (CN).</p> </note> <p>After successful completion of the <code>RequestCertificate</code> action, there is a delay of several seconds before you can retrieve information about the new certificate.</p>"
+      "documentation":"<p>Requests an ACM certificate for use with other Amazon Web Services services. To request an ACM certificate, you must specify a fully qualified domain name (FQDN) in the <code>DomainName</code> parameter. You can also specify additional FQDNs in the <code>SubjectAlternativeNames</code> parameter. </p> <p>If you are requesting a private certificate, domain validation is not required. If you are requesting a public certificate, each domain name that you specify must be validated to verify that you own or control the domain. You can use <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html\">DNS validation</a> or <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html\">email validation</a>. We recommend that you use DNS validation.</p> <note> <p>ACM behavior differs from the <a href=\"https://datatracker.ietf.org/doc/html/rfc6125#appendix-B.2\">RFC 6125</a> specification of the certificate validation process. ACM first checks for a Subject Alternative Name, and, if it finds one, ignores the common name (CN).</p> </note> <p>After successful completion of the <code>RequestCertificate</code> action, there is a delay of several seconds before you can retrieve information about the new certificate.</p>"
     },
     "ResendValidationEmail":{
       "name":"ResendValidationEmail",
@@ -226,13 +228,31 @@
       },
       "input":{"shape":"ResendValidationEmailRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidStateException"},
         {"shape":"InvalidArnException"},
-        {"shape":"InvalidDomainValidationOptionsException"}
+        {"shape":"InvalidDomainValidationOptionsException"},
+        {"shape":"InvalidStateException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Resends the email that requests domain ownership validation. The domain owner or an authorized representative must approve the ACM certificate before it can be issued. The certificate can be approved by clicking a link in the mail to navigate to the Amazon certificate approval website and then clicking <b>I Approve</b>. However, the validation email can be blocked by spam filters. Therefore, if you do not receive the original mail, you can request that the mail be resent within 72 hours of requesting the ACM certificate. If more than 72 hours have elapsed since your original request or since your last attempt to resend validation mail, you must request a new certificate. For more information about setting up your contact email addresses, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/setup-email.html\">Configure Email for your Domain</a>. </p>"
     },
+    "RevokeCertificate":{
+      "name":"RevokeCertificate",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"RevokeCertificateRequest"},
+      "output":{"shape":"RevokeCertificateResponse"},
+      "errors":[
+        {"shape":"ResourceInUseException"},
+        {"shape":"InvalidArnException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Revokes a public ACM certificate. You can only revoke certificates that have been previously exported.</p>"
+    },
     "UpdateCertificateOptions":{
       "name":"UpdateCertificateOptions",
       "http":{
@@ -241,12 +261,12 @@
       },
       "input":{"shape":"UpdateCertificateOptionsRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidArnException"},
         {"shape":"LimitExceededException"},
         {"shape":"InvalidStateException"},
-        {"shape":"InvalidArnException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Updates a certificate. Currently, you can use this function to specify whether to opt in to or out of recording your certificate in a certificate transparency log. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency\"> Opting Out of Certificate Transparency Logging</a>. </p>"
+      "documentation":"<p>Updates a certificate. You can use this function to specify whether to opt in to or out of recording your certificate in a certificate transparency log and exporting. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency\"> Opting Out of Certificate Transparency Logging</a> and <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-exportable-certificates.html\">Certificate Manager Exportable Managed Certificates</a>.</p>"
     }
   },
   "shapes":{
@@ -256,8 +276,7 @@
         "Message":{"shape":"ServiceErrorMessage"}
       },
       "documentation":"<p>You do not have access required to perform this action.</p>",
-      "exception":true,
-      "synthetic":true
+      "exception":true
     },
     "AddTagsToCertificateRequest":{
       "type":"structure",
@@ -320,6 +339,10 @@
           "shape":"DomainList",
           "documentation":"<p>One or more domain names (subject alternative names) included in the certificate. This list contains the domain names that are bound to the public key that is contained in the certificate. The subject alternative names include the canonical domain name (CN) of the certificate and additional domain names that can be used to connect to the website. </p>"
         },
+        "ManagedBy":{
+          "shape":"CertificateManagedBy",
+          "documentation":"<p>Identifies the Amazon Web Services service that manages the certificate issued by ACM.</p>"
+        },
         "DomainValidationOptions":{
           "shape":"DomainValidationList",
           "documentation":"<p>Contains information about the initial validation of each domain name that occurs as a result of the <a>RequestCertificate</a> request. This field exists only when the certificate type is <code>AMAZON_ISSUED</code>. </p>"
@@ -415,15 +438,30 @@
       },
       "documentation":"<p>Contains metadata about an ACM certificate. This structure is returned in the response to a <a>DescribeCertificate</a> request. </p>"
     },
+    "CertificateExport":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "CertificateManagedBy":{
+      "type":"string",
+      "enum":["CLOUDFRONT"]
+    },
     "CertificateOptions":{
       "type":"structure",
       "members":{
         "CertificateTransparencyLoggingPreference":{
           "shape":"CertificateTransparencyLoggingPreference",
           "documentation":"<p>You can opt out of certificate transparency logging by specifying the <code>DISABLED</code> option. Opt in by specifying <code>ENABLED</code>. </p>"
+        },
+        "Export":{
+          "shape":"CertificateExport",
+          "documentation":"<p>You can opt in to allow the export of your certificates by specifying <code>ENABLED</code>.</p>"
         }
       },
-      "documentation":"<p>Structure that contains options for your certificate. Currently, you can use this only to specify whether to opt in to or out of certificate transparency logging. Some browsers require that public certificates issued for your domain be recorded in a log. Certificates that are not logged typically generate a browser error. Transparency makes it possible for you to detect SSL/TLS certificates that have been mistakenly or maliciously issued for your domain. For general information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-concepts.html#concept-transparency\">Certificate Transparency Logging</a>. </p>"
+      "documentation":"<p>Structure that contains options for your certificate. You can use this structure to specify whether to opt in to or out of certificate transparency logging and export your certificate. </p> <p>Some browsers require that public certificates issued for your domain be recorded in a log. Certificates that are not logged typically generate a browser error. Transparency makes it possible for you to detect SSL/TLS certificates that have been mistakenly or maliciously issued for your domain. For general information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-concepts.html#concept-transparency\">Certificate Transparency Logging</a>.</p> <p>You can export public ACM certificates to use with Amazon Web Services services as well as outside Amazon Web Services Cloud. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-exportable-certificates.html\">Certificate Manager exportable public certificate</a>.</p>"
     },
     "CertificateStatus":{
       "type":"string",
@@ -454,12 +492,11 @@
         },
         "SubjectAlternativeNameSummaries":{
           "shape":"DomainList",
-          "documentation":"<p>One or more domain names (subject alternative names) included in the certificate. This list contains the domain names that are bound to the public key that is contained in the certificate. The subject alternative names include the canonical domain name (CN) of the certificate and additional domain names that can be used to connect to the website. </p> <p>When called by <a>ListCertificates</a>, this parameter will only return the first 100 subject alternative names included in the certificate. To display the full list of subject alternative names, use <a>DescribeCertificate</a>.</p>"
+          "documentation":"<p>One or more domain names (subject alternative names) included in the certificate. This list contains the domain names that are bound to the public key that is contained in the certificate. The subject alternative names include the canonical domain name (CN) of the certificate and additional domain names that can be used to connect to the website. </p> <p>When called by <a href=\"https://docs.aws.amazon.com/acm/latestAPIReference/API_ListCertificates.html\">ListCertificates</a>, this parameter will only return the first 100 subject alternative names included in the certificate. To display the full list of subject alternative names, use <a href=\"https://docs.aws.amazon.com/acm/latestAPIReference/API_DescribeCertificate.html\">DescribeCertificate</a>.</p>"
         },
         "HasAdditionalSubjectAlternativeNames":{
           "shape":"NullableBoolean",
-          "documentation":"<p>When called by <a>ListCertificates</a>, indicates whether the full list of subject alternative names has been included in the response. If false, the response includes all of the subject alternative names included in the certificate. If true, the response only includes the first 100 subject alternative names included in the certificate. To display the full list of subject alternative names, use <a>DescribeCertificate</a>.</p>",
-          "box":true
+          "documentation":"<p>When called by <a href=\"https://docs.aws.amazon.com/acm/latestAPIReference/API_ListCertificates.html\">ListCertificates</a>, indicates whether the full list of subject alternative names has been included in the response. If false, the response includes all of the subject alternative names included in the certificate. If true, the response only includes the first 100 subject alternative names included in the certificate. To display the full list of subject alternative names, use <a href=\"https://docs.aws.amazon.com/acm/latestAPIReference/API_DescribeCertificate.html\">DescribeCertificate</a>.</p>"
         },
         "Status":{
           "shape":"CertificateStatus",
@@ -481,15 +518,17 @@
           "shape":"ExtendedKeyUsageNames",
           "documentation":"<p>Contains a list of Extended Key Usage X.509 v3 extension objects. Each object specifies a purpose for which the certificate public key can be used and consists of a name and an object identifier (OID). </p>"
         },
+        "ExportOption":{
+          "shape":"CertificateExport",
+          "documentation":"<p>Indicates if export is enabled for the certificate.</p>"
+        },
         "InUse":{
           "shape":"NullableBoolean",
-          "documentation":"<p>Indicates whether the certificate is currently in use by any Amazon Web Services resources.</p>",
-          "box":true
+          "documentation":"<p>Indicates whether the certificate is currently in use by any Amazon Web Services resources.</p>"
         },
         "Exported":{
           "shape":"NullableBoolean",
-          "documentation":"<p>Indicates whether the certificate has been exported. This value exists only when the certificate type is <code>PRIVATE</code>.</p>",
-          "box":true
+          "documentation":"<p>Indicates whether the certificate has been exported. This value exists only when the certificate type is <code>PRIVATE</code>.</p>"
         },
         "RenewalEligibility":{
           "shape":"RenewalEligibility",
@@ -518,6 +557,10 @@
         "RevokedAt":{
           "shape":"TStamp",
           "documentation":"<p>The time at which the certificate was revoked. This value exists only when the certificate status is <code>REVOKED</code>. </p>"
+        },
+        "ManagedBy":{
+          "shape":"CertificateManagedBy",
+          "documentation":"<p>Identifies the Amazon Web Services service that manages the certificate issued by ACM.</p>"
         }
       },
       "documentation":"<p>This structure is returned in the response object of <a>ListCertificates</a> action. </p>"
@@ -588,7 +631,7 @@
       "type":"string",
       "max":253,
       "min":1,
-      "pattern":"^(\\*\\.)?(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])$"
+      "pattern":"(\\*\\.)?(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])"
     },
     "DomainStatus":{
       "type":"string",
@@ -616,11 +659,15 @@
         },
         "ValidationStatus":{
           "shape":"DomainStatus",
-          "documentation":"<p>The validation status of the domain name. This can be one of the following values:</p> <ul> <li> <p> <code>PENDING_VALIDATION</code> </p> </li> <li> <p> <code>SUCCESS</code> </p> </li> <li> <p> <code>FAILED</code> </p> </li> </ul>"
+          "documentation":"<p>The validation status of the domain name. This can be one of the following values:</p> <ul> <li> <p> <code>PENDING_VALIDATION</code> </p> </li> <li> <p> <code/>SUCCESS</p> </li> <li> <p> <code/>FAILED</p> </li> </ul>"
         },
         "ResourceRecord":{
           "shape":"ResourceRecord",
-          "documentation":"<p>Contains the CNAME record that you add to your DNS database for domain validation. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html\">Use DNS to Validate Domain Ownership</a>.</p> <p>Note: The CNAME information that you need does not include the name of your domain. If you include&#x2028; your domain name in the DNS database CNAME record, validation fails.&#x2028; For example, if the name is \"_a79865eb4cd1a6ab990a45779b4e0b96.yourdomain.com\", only \"_a79865eb4cd1a6ab990a45779b4e0b96\" must be used.</p>"
+          "documentation":"<p>Contains the CNAME record that you add to your DNS database for domain validation. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html\">Use DNS to Validate Domain Ownership</a>.</p> <note> <p>The CNAME information that you need does not include the name of your domain. If you include your domain name in the DNS database CNAME record, validation fails. For example, if the name is <code>_a79865eb4cd1a6ab990a45779b4e0b96.yourdomain.com</code>, only <code>_a79865eb4cd1a6ab990a45779b4e0b96</code> must be used.</p> </note>"
+        },
+        "HttpRedirect":{
+          "shape":"HttpRedirect",
+          "documentation":"<p>Contains information for HTTP-based domain validation of certificates requested through Amazon CloudFront and issued by ACM. This field exists only when the certificate type is <code>AMAZON_ISSUED</code> and the validation method is <code>HTTP</code>.</p>"
         },
         "ValidationMethod":{
           "shape":"ValidationMethod",
@@ -782,6 +829,14 @@
         "keyTypes":{
           "shape":"KeyAlgorithmList",
           "documentation":"<p>Specify one or more algorithms that can be used to generate key pairs.</p> <p>Default filtering returns only <code>RSA_1024</code> and <code>RSA_2048</code> certificates that have at least one domain. To return other certificate types, provide the desired type signatures in a comma-separated list. For example, <code>\"keyTypes\": [\"RSA_2048\",\"RSA_4096\"]</code> returns both <code>RSA_2048</code> and <code>RSA_4096</code> certificates.</p>"
+        },
+        "exportOption":{
+          "shape":"CertificateExport",
+          "documentation":"<p>Specify <code>ENABLED</code> or <code>DISABLED</code> to identify certificates that can be exported.</p>"
+        },
+        "managedBy":{
+          "shape":"CertificateManagedBy",
+          "documentation":"<p>Identifies the Amazon Web Services service that manages the certificate issued by ACM.</p>"
         }
       },
       "documentation":"<p>This structure can be used in the <a>ListCertificates</a> action to filter the output of the certificate list. </p>"
@@ -818,6 +873,20 @@
         }
       }
     },
+    "HttpRedirect":{
+      "type":"structure",
+      "members":{
+        "RedirectFrom":{
+          "shape":"String",
+          "documentation":"<p>The URL including the domain to be validated. The certificate authority sends <code>GET</code> requests here during validation.</p>"
+        },
+        "RedirectTo":{
+          "shape":"String",
+          "documentation":"<p>The URL hosting the validation token. <code>RedirectFrom</code> must return this content or redirect here.</p>"
+        }
+      },
+      "documentation":"<p>Contains information for HTTP-based domain validation of certificates requested through Amazon CloudFront and issued by ACM. This field exists only when the certificate type is <code>AMAZON_ISSUED</code> and the validation method is <code>HTTP</code>.</p>"
+    },
     "IdempotencyToken":{
       "type":"string",
       "max":32,
@@ -871,7 +940,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>One or more of of request parameters specified is not valid.</p>",
+      "documentation":"<p>One or more of request parameters specified is not valid.</p>",
       "exception":true
     },
     "InvalidArnException":{
@@ -1039,6 +1108,7 @@
     },
     "MaxItems":{
       "type":"integer",
+      "box":true,
       "max":1000,
       "min":1
     },
@@ -1048,7 +1118,10 @@
       "min":1,
       "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]*"
     },
-    "NullableBoolean":{"type":"boolean"},
+    "NullableBoolean":{
+      "type":"boolean",
+      "box":true
+    },
     "PassphraseBlob":{
       "type":"blob",
       "max":128,
@@ -1063,6 +1136,7 @@
     },
     "PositiveInteger":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "PrivateKey":{
@@ -1192,7 +1266,7 @@
         },
         "Options":{
           "shape":"CertificateOptions",
-          "documentation":"<p>Currently, you can use this parameter to specify whether to add the certificate to a certificate transparency log. Certificate transparency makes it possible to detect SSL/TLS certificates that have been mistakenly or maliciously issued. Certificates that have not been logged typically produce an error message in a browser. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency\">Opting Out of Certificate Transparency Logging</a>.</p>"
+          "documentation":"<p>You can use this parameter to specify whether to add the certificate to a certificate transparency log and export your certificate.</p> <p>Certificate transparency makes it possible to detect SSL/TLS certificates that have been mistakenly or maliciously issued. Certificates that have not been logged typically produce an error message in a browser. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency\">Opting Out of Certificate Transparency Logging</a>.</p> <p>You can export public ACM certificates to use with Amazon Web Services services as well as outside the Amazon Web Services Cloud. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-exportable-certificates.html\">Certificate Manager exportable public certificate</a>.</p>"
         },
         "CertificateAuthorityArn":{
           "shape":"PcaArn",
@@ -1205,6 +1279,10 @@
         "KeyAlgorithm":{
           "shape":"KeyAlgorithm",
           "documentation":"<p>Specifies the algorithm of the public and private key pair that your certificate uses to encrypt data. RSA is the default key algorithm for ACM certificates. Elliptic Curve Digital Signature Algorithm (ECDSA) keys are smaller, offering security comparable to RSA keys but with greater computing efficiency. However, ECDSA is not supported by all network clients. Some Amazon Web Services services may require RSA keys, or only support ECDSA keys of a particular size, while others allow the use of either RSA and ECDSA keys to ensure that compatibility is not broken. Check the requirements for the Amazon Web Services service where you plan to deploy your certificate. For more information about selecting an algorithm, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-certificate.html#algorithms\">Key algorithms</a>.</p> <note> <p>Algorithms supported for an ACM certificate request include: </p> <ul> <li> <p> <code>RSA_2048</code> </p> </li> <li> <p> <code>EC_prime256v1</code> </p> </li> <li> <p> <code>EC_secp384r1</code> </p> </li> </ul> <p>Other listed algorithms are for imported certificates only. </p> </note> <note> <p>When you request a private PKI certificate signed by a CA from Amazon Web Services Private CA, the specified signing algorithm family (RSA or ECDSA) must match the algorithm family of the CA's secret key.</p> </note> <p>Default: RSA_2048</p>"
+        },
+        "ManagedBy":{
+          "shape":"CertificateManagedBy",
+          "documentation":"<p>Identifies the Amazon Web Services service that manages the certificate issued by ACM.</p>"
         }
       }
     },
@@ -1294,6 +1372,7 @@
         "CA_COMPROMISE",
         "AFFILIATION_CHANGED",
         "SUPERCEDED",
+        "SUPERSEDED",
         "CESSATION_OF_OPERATION",
         "CERTIFICATE_HOLD",
         "REMOVE_FROM_CRL",
@@ -1301,6 +1380,32 @@
         "A_A_COMPROMISE"
       ]
     },
+    "RevokeCertificateRequest":{
+      "type":"structure",
+      "required":[
+        "CertificateArn",
+        "RevocationReason"
+      ],
+      "members":{
+        "CertificateArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the public or private certificate that will be revoked. The ARN must have the following form: </p> <p> <code>arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012</code> </p>"
+        },
+        "RevocationReason":{
+          "shape":"RevocationReason",
+          "documentation":"<p>Specifies why you revoked the certificate.</p>"
+        }
+      }
+    },
+    "RevokeCertificateResponse":{
+      "type":"structure",
+      "members":{
+        "CertificateArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the public or private certificate that was revoked.</p>"
+        }
+      }
+    },
     "ServiceErrorMessage":{"type":"string"},
     "SortBy":{
       "type":"string",
@@ -1362,8 +1467,7 @@
         "message":{"shape":"AvailabilityErrorMessage"}
       },
       "documentation":"<p>The request was denied because it exceeded a quota.</p>",
-      "exception":true,
-      "synthetic":true
+      "exception":true
     },
     "TooManyTagsException":{
       "type":"structure",
@@ -1386,7 +1490,7 @@
         },
         "Options":{
           "shape":"CertificateOptions",
-          "documentation":"<p>Use to update the options for your certificate. Currently, you can specify whether to add your certificate to a transparency log. Certificate transparency makes it possible to detect SSL/TLS certificates that have been mistakenly or maliciously issued. Certificates that have not been logged typically produce an error message in a browser. </p>"
+          "documentation":"<p>Use to update the options for your certificate. Currently, you can specify whether to add your certificate to a transparency log or export your certificate. Certificate transparency makes it possible to detect SSL/TLS certificates that have been mistakenly or maliciously issued. Certificates that have not been logged typically produce an error message in a browser. </p>"
         }
       }
     },
@@ -1400,17 +1504,17 @@
         "message":{"shape":"ValidationExceptionMessage"}
       },
       "documentation":"<p>The supplied input failed to satisfy constraints of an Amazon Web Services service.</p>",
-      "exception":true,
-      "synthetic":true
+      "exception":true
     },
     "ValidationExceptionMessage":{"type":"string"},
     "ValidationMethod":{
       "type":"string",
       "enum":[
         "EMAIL",
-        "DNS"
+        "DNS",
+        "HTTP"
       ]
     }
   },
-  "documentation":"<fullname>Certificate Manager</fullname> <p>You can use Certificate Manager (ACM) to manage SSL/TLS certificates for your Amazon Web Services-based websites and applications. For more information about using ACM, see the <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/\">Certificate Manager User Guide</a>.</p>"
+  "documentation":"<p><fullname>Certificate Manager</fullname> <p>You can use Certificate Manager (ACM) to manage SSL/TLS certificates for your Amazon Web Services-based websites and applications. For more information about using ACM, see the <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/\">Certificate Manager User Guide</a>.</p></p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/acm/2015-12-08/waiters-2.json 2.31.35-1/awscli/botocore/data/acm/2015-12-08/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/acm/2015-12-08/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm/2015-12-08/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,35 +1,30 @@
 {
-  "version": 2,
-  "waiters": {
-    "CertificateValidated": {
-      "delay": 60,
-      "maxAttempts": 40,
-      "operation": "DescribeCertificate",
-      "acceptors": [
-        {
-          "matcher": "pathAll",
-          "expected": "SUCCESS",
-          "argument": "Certificate.DomainValidationOptions[].ValidationStatus",
-          "state": "success"
-        },
-        {
-          "matcher": "pathAny",
-          "expected": "PENDING_VALIDATION",
-          "argument": "Certificate.DomainValidationOptions[].ValidationStatus",
-          "state": "retry"
-        },
-        {
-          "matcher": "path",
-          "expected": "FAILED",
-          "argument": "Certificate.Status",
-          "state": "failure"
-        },
-        {
-          "matcher": "error",
-          "expected": "ResourceNotFoundException",
-          "state": "failure"
-        }
-      ]
+  "version" : 2,
+  "waiters" : {
+    "CertificateValidated" : {
+      "delay" : 60,
+      "maxAttempts" : 5,
+      "operation" : "DescribeCertificate",
+      "acceptors" : [ {
+        "matcher" : "pathAll",
+        "argument" : "Certificate.DomainValidationOptions[].ValidationStatus",
+        "state" : "success",
+        "expected" : "SUCCESS"
+      }, {
+        "matcher" : "pathAny",
+        "argument" : "Certificate.DomainValidationOptions[].ValidationStatus",
+        "state" : "retry",
+        "expected" : "PENDING_VALIDATION"
+      }, {
+        "matcher" : "path",
+        "argument" : "Certificate.Status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ResourceNotFoundException"
+      } ]
     }
   }
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/service-2.json 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -43,10 +43,10 @@
       "output":{"shape":"CreateCertificateAuthorityAuditReportResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"},
         {"shape":"InvalidArgsException"},
-        {"shape":"RequestFailedException"},
+        {"shape":"InvalidArnException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"RequestInProgressException"}
       ],
       "documentation":"<p>Creates an audit report that lists every time that your CA private key is used to issue a certificate. The <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html\">IssueCertificate</a> and <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_RevokeCertificate.html\">RevokeCertificate</a> actions use the private key.</p> <p>To save the audit report to your designated Amazon S3 bucket, you must create a bucket policy that grants Amazon Web Services Private CA permission to access and write to it. For an example policy, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/PcaAuditReport.html#s3-access\">Prepare an Amazon S3 bucket for audit reports</a>.</p> <p>Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/PcaAuditReport.html#audit-report-encryption\">Encrypting Your Audit Reports</a>.</p> <note> <p>You can generate a maximum of one report every 30 minutes.</p> </note>",
@@ -64,8 +64,8 @@
         {"shape":"PermissionAlreadyExistsException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
-        {"shape":"InvalidStateException"}
+        {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"}
       ],
       "documentation":"<p>Grants one or more permissions on a private CA to the Certificate Manager (ACM) service principal (<code>acm.amazonaws.com</code>). These permissions allow ACM to issue and renew ACM certificates that reside in the same Amazon Web Services account as the CA.</p> <p>You can list current permissions with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListPermissions.html\">ListPermissions</a> action and revoke them with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DeletePermission.html\">DeletePermission</a> action.</p> <p class=\"title\"> <b>About Permissions</b> </p> <ul> <li> <p>If the private CA and the certificates it issues reside in the same account, you can use <code>CreatePermission</code> to grant permissions for ACM to carry out automatic certificate renewals.</p> </li> <li> <p>For automatic certificate renewal to succeed, the ACM service principal needs permissions to create, retrieve, and list certificates.</p> </li> <li> <p>If the private CA and the ACM certificates reside in different accounts, then permissions cannot be used to enable automatic renewals. Instead, the ACM certificate owner must set up a resource-based policy to enable cross-account issuance and renewals. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html\">Using a Resource Based Policy with Amazon Web Services Private CA</a>.</p> </li> </ul>"
     },
@@ -82,7 +82,7 @@
         {"shape":"InvalidStateException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Deletes a private certificate authority (CA). You must provide the Amazon Resource Name (ARN) of the private CA that you want to delete. You can find the ARN by calling the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListCertificateAuthorities.html\">ListCertificateAuthorities</a> action. </p> <note> <p>Deleting a CA will invalidate other CAs and certificates below it in your CA hierarchy.</p> </note> <p>Before you can delete a CA that you have created and activated, you must disable it. To do this, call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_UpdateCertificateAuthority.html\">UpdateCertificateAuthority</a> action and set the <b>CertificateAuthorityStatus</b> parameter to <code>DISABLED</code>. </p> <p>Additionally, you can delete a CA if you are waiting for it to be created (that is, the status of the CA is <code>CREATING</code>). You can also delete it if the CA has been created but you haven't yet imported the signed certificate into Amazon Web Services Private CA (that is, the status of the CA is <code>PENDING_CERTIFICATE</code>). </p> <p>When you successfully call <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DeleteCertificateAuthority.html\">DeleteCertificateAuthority</a>, the CA's status changes to <code>DELETED</code>. However, the CA won't be permanently deleted until the restoration period has passed. By default, if you do not set the <code>PermanentDeletionTimeInDays</code> parameter, the CA remains restorable for 30 days. You can set the parameter from 7 to 30 days. The <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DescribeCertificateAuthority.html\">DescribeCertificateAuthority</a> action returns the time remaining in the restoration window of a private CA in the <code>DELETED</code> state. To restore an eligible CA, call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_RestoreCertificateAuthority.html\">RestoreCertificateAuthority</a> action.</p>"
+      "documentation":"<p>Deletes a private certificate authority (CA). You must provide the Amazon Resource Name (ARN) of the private CA that you want to delete. You can find the ARN by calling the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListCertificateAuthorities.html\">ListCertificateAuthorities</a> action. </p> <note> <p>Deleting a CA will invalidate other CAs and certificates below it in your CA hierarchy.</p> </note> <p>Before you can delete a CA that you have created and activated, you must disable it. To do this, call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_UpdateCertificateAuthority.html\">UpdateCertificateAuthority</a> action and set the <b>CertificateAuthorityStatus</b> parameter to <code>DISABLED</code>. </p> <p>Additionally, you can delete a CA if you are waiting for it to be created (that is, the status of the CA is <code>CREATING</code>). You can also delete it if the CA has been created but you haven't yet imported the signed certificate into Amazon Web Services Private CA (that is, the status of the CA is <code>PENDING_CERTIFICATE</code>). </p> <p>When you successfully call <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DeleteCertificateAuthority.html\">DeleteCertificateAuthority</a>, the CA's status changes to <code>DELETED</code>. However, the CA won't be permanently deleted until the restoration period has passed. By default, if you do not set the <code>PermanentDeletionTimeInDays</code> parameter, the CA remains restorable for 30 days. You can set the parameter from 7 to 30 days. The <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DescribeCertificateAuthority.html\">DescribeCertificateAuthority</a> action returns the time remaining in the restoration window of a private CA in the <code>DELETED</code> state. To restore an eligible CA, call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_RestoreCertificateAuthority.html\">RestoreCertificateAuthority</a> action.</p> <important> <p>A private CA can be deleted if it is in the <code>PENDING_CERTIFICATE</code>, <code>CREATING</code>, <code>EXPIRED</code>, <code>DISABLED</code>, or <code>FAILED</code> state. To delete a CA in the <code>ACTIVE</code> state, you must first disable it, or else the delete request results in an exception. If you are deleting a private CA in the <code>PENDING_CERTIFICATE</code> or <code>DISABLED</code> state, you can set the length of its restoration period to 7-30 days. The default is 30. During this time, the status is set to <code>DELETED</code> and the CA can be restored. A private CA deleted in the <code>CREATING</code> or <code>FAILED</code> state has no assigned restoration period and cannot be restored.</p> </important>"
     },
     "DeletePermission":{
       "name":"DeletePermission",
@@ -94,8 +94,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
-        {"shape":"InvalidStateException"}
+        {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"}
       ],
       "documentation":"<p>Revokes permissions on a private CA granted to the Certificate Manager (ACM) service principal (acm.amazonaws.com). </p> <p>These permissions allow ACM to issue and renew ACM certificates that reside in the same Amazon Web Services account as the CA. If you revoke these permissions, ACM will no longer renew the affected certificates automatically.</p> <p>Permissions can be granted with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreatePermission.html\">CreatePermission</a> action and listed with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_ListPermissions.html\">ListPermissions</a> action. </p> <p class=\"title\"> <b>About Permissions</b> </p> <ul> <li> <p>If the private CA and the certificates it issues reside in the same account, you can use <code>CreatePermission</code> to grant permissions for ACM to carry out automatic certificate renewals.</p> </li> <li> <p>For automatic certificate renewal to succeed, the ACM service principal needs permissions to create, retrieve, and list certificates.</p> </li> <li> <p>If the private CA and the ACM certificates reside in different accounts, then permissions cannot be used to enable automatic renewals. Instead, the ACM certificate owner must set up a resource-based policy to enable cross-account issuance and renewals. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html\">Using a Resource Based Policy with Amazon Web Services Private CA</a>.</p> </li> </ul>"
     },
@@ -110,8 +110,8 @@
         {"shape":"LockoutPreventedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"ConcurrentModificationException"}
       ],
       "documentation":"<p>Deletes the resource-based policy attached to a private CA. Deletion will remove any access that the policy has granted. If there is no policy attached to the private CA, this action will return successful.</p> <p>If you delete a policy that was applied through Amazon Web Services Resource Access Manager (RAM), the CA will be removed from all shares in which it was included. </p> <p>The Certificate Manager Service Linked Role that the policy supports is not affected when you delete the policy. </p> <p>The current policy can be shown with <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> and updated with <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_PutPolicy.html\">PutPolicy</a>.</p> <p class=\"title\"> <b>About Policies</b> </p> <ul> <li> <p>A policy grants access on a private CA to an Amazon Web Services customer account, to Amazon Web Services Organizations, or to an Amazon Web Services Organizations unit. Policies are under the control of a CA administrator. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html\">Using a Resource Based Policy with Amazon Web Services Private CA</a>.</p> </li> <li> <p>A policy permits a user of Certificate Manager (ACM) to issue ACM certificates signed by a CA in another account.</p> </li> <li> <p>For ACM to manage automatic renewal of these certificates, the ACM user must configure a Service Linked Role (SLR). The SLR allows the ACM service to assume the identity of the user, subject to confirmation against the Amazon Web Services Private CA policy. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-slr.html\">Using a Service Linked Role with ACM</a>.</p> </li> <li> <p>Updates made in Amazon Web Services Resource Manager (RAM) are reflected in policies. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-ram.html\">Attach a Policy for Cross-Account Access</a>.</p> </li> </ul>"
@@ -140,8 +140,8 @@
       "output":{"shape":"DescribeCertificateAuthorityAuditReportResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"},
-        {"shape":"InvalidArgsException"}
+        {"shape":"InvalidArgsException"},
+        {"shape":"InvalidArnException"}
       ],
       "documentation":"<p>Lists information about a specific audit report created by calling the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthorityAuditReport.html\">CreateCertificateAuthorityAuditReport</a> action. Audit information is created every time the certificate authority (CA) private key is used. The private key is used when you call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html\">IssueCertificate</a> action or the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_RevokeCertificate.html\">RevokeCertificate</a> action. </p>"
     },
@@ -156,11 +156,11 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"RequestInProgressException"}
       ],
-      "documentation":"<p>Retrieves a certificate from your private CA or one that has been shared with you. The ARN of the certificate is returned when you call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html\">IssueCertificate</a> action. You must specify both the ARN of your private CA and the ARN of the issued certificate when calling the <b>GetCertificate</b> action. You can retrieve the certificate if it is in the <b>ISSUED</b> state. You can call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthorityAuditReport.html\">CreateCertificateAuthorityAuditReport</a> action to create a report that contains information about all of the certificates issued and revoked by your private CA. </p>"
+      "documentation":"<p>Retrieves a certificate from your private CA or one that has been shared with you. The ARN of the certificate is returned when you call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_IssueCertificate.html\">IssueCertificate</a> action. You must specify both the ARN of your private CA and the ARN of the issued certificate when calling the <b>GetCertificate</b> action. You can retrieve the certificate if it is in the <b>ISSUED</b>, <b>EXPIRED</b>, or <b>REVOKED</b> state. You can call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthorityAuditReport.html\">CreateCertificateAuthorityAuditReport</a> action to create a report that contains information about all of the certificates issued and revoked by your private CA. </p>"
     },
     "GetCertificateAuthorityCertificate":{
       "name":"GetCertificateAuthorityCertificate",
@@ -188,8 +188,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"RequestInProgressException"}
       ],
       "documentation":"<p>Retrieves the certificate signing request (CSR) for your private certificate authority (CA). The CSR is created when you call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreateCertificateAuthority.html\">CreateCertificateAuthority</a> action. Sign the CSR with your Amazon Web Services Private CA-hosted or on-premises root or subordinate CA. Then import the signed certificate back into Amazon Web Services Private CA by calling the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_ImportCertificateAuthorityCertificate.html\">ImportCertificateAuthorityCertificate</a> action. The CSR is returned as a base64 PEM-encoded string. </p>"
@@ -205,8 +205,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
-        {"shape":"InvalidStateException"}
+        {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"}
       ],
       "documentation":"<p>Retrieves the resource-based policy attached to a private CA. If either the private CA resource or the policy cannot be found, this action returns a <code>ResourceNotFoundException</code>. </p> <p>The policy can be attached or updated with <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_PutPolicy.html\">PutPolicy</a> and removed with <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DeletePolicy.html\">DeletePolicy</a>.</p> <p class=\"title\"> <b>About Policies</b> </p> <ul> <li> <p>A policy grants access on a private CA to an Amazon Web Services customer account, to Amazon Web Services Organizations, or to an Amazon Web Services Organizations unit. Policies are under the control of a CA administrator. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html\">Using a Resource Based Policy with Amazon Web Services Private CA</a>.</p> </li> <li> <p>A policy permits a user of Certificate Manager (ACM) to issue ACM certificates signed by a CA in another account.</p> </li> <li> <p>For ACM to manage automatic renewal of these certificates, the ACM user must configure a Service Linked Role (SLR). The SLR allows the ACM service to assume the identity of the user, subject to confirmation against the Amazon Web Services Private CA policy. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-slr.html\">Using a Service Linked Role with ACM</a>.</p> </li> <li> <p>Updates made in Amazon Web Services Resource Manager (RAM) are reflected in policies. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-ram.html\">Attach a Policy for Cross-Account Access</a>.</p> </li> </ul>"
     },
@@ -223,8 +223,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
         {"shape":"InvalidRequestException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"ConcurrentModificationException"},
         {"shape":"RequestInProgressException"}
       ],
@@ -241,8 +241,8 @@
       "errors":[
         {"shape":"LimitExceededException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"},
         {"shape":"InvalidArgsException"},
+        {"shape":"InvalidArnException"},
         {"shape":"InvalidStateException"},
         {"shape":"MalformedCSRException"}
       ],
@@ -273,8 +273,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"InvalidNextTokenException"}
       ],
       "documentation":"<p>List all permissions on a private CA, if any, granted to the Certificate Manager (ACM) service principal (acm.amazonaws.com). </p> <p>These permissions allow ACM to issue and renew ACM certificates that reside in the same Amazon Web Services account as the CA. </p> <p>Permissions can be granted with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_CreatePermission.html\">CreatePermission</a> action and revoked with the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_DeletePermission.html\">DeletePermission</a> action.</p> <p class=\"title\"> <b>About Permissions</b> </p> <ul> <li> <p>If the private CA and the certificates it issues reside in the same account, you can use <code>CreatePermission</code> to grant permissions for ACM to carry out automatic certificate renewals.</p> </li> <li> <p>For automatic certificate renewal to succeed, the ACM service principal needs permissions to create, retrieve, and list certificates.</p> </li> <li> <p>If the private CA and the ACM certificates reside in different accounts, then permissions cannot be used to enable automatic renewals. Instead, the ACM certificate owner must set up a resource-based policy to enable cross-account issuance and renewals. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/pca-rbp.html\">Using a Resource Based Policy with Amazon Web Services Private CA</a>.</p> </li> </ul>"
@@ -290,7 +290,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"InvalidStateException"}
+        {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"}
       ],
       "documentation":"<p>Lists the tags, if any, that are associated with your private CA or one that has been shared with you. Tags are labels that you can use to identify and organize your CAs. Each tag consists of a key and an optional value. Call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_TagCertificateAuthority.html\">TagCertificateAuthority</a> action to add one or more tags to your CA. Call the <a href=\"https://docs.aws.amazon.com/privateca/latest/APIReference/API_UntagCertificateAuthority.html\">UntagCertificateAuthority</a> action to remove tags. </p>"
     },
@@ -305,8 +306,8 @@
         {"shape":"LockoutPreventedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"ConcurrentModificationException"},
         {"shape":"InvalidPolicyException"}
       ],
@@ -339,8 +340,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArnException"},
         {"shape":"InvalidRequestException"},
-        {"shape":"RequestFailedException"},
         {"shape":"InvalidStateException"},
+        {"shape":"RequestFailedException"},
         {"shape":"ConcurrentModificationException"},
         {"shape":"RequestInProgressException"}
       ],
@@ -386,8 +387,8 @@
       "input":{"shape":"UpdateCertificateAuthorityRequest"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidArnException"},
         {"shape":"InvalidArgsException"},
+        {"shape":"InvalidArnException"},
         {"shape":"InvalidStateException"},
         {"shape":"ConcurrentModificationException"},
         {"shape":"InvalidPolicyException"}
@@ -470,7 +471,7 @@
     },
     "AWSPolicy":{
       "type":"string",
-      "max":20480,
+      "max":81920,
       "min":1,
       "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+"
     },
@@ -644,7 +645,7 @@
         },
         "KeyStorageSecurityStandard":{
           "shape":"KeyStorageSecurityStandard",
-          "documentation":"<p>Defines a cryptographic key management compliance standard used for handling CA keys. </p> <p>Default: FIPS_140_2_LEVEL_3_OR_HIGHER</p> <p>Note: Amazon Web Services Region ap-northeast-3 supports only FIPS_140_2_LEVEL_2_OR_HIGHER. You must explicitly specify this parameter and value when creating a CA in that Region. Specifying a different value (or no value) results in an <code>InvalidArgsException</code> with the message \"A certificate authority cannot be created in this region with the specified security standard.\"</p>"
+          "documentation":"<p>Defines a cryptographic key management compliance standard for handling and protecting CA keys.</p> <p>Default: FIPS_140_2_LEVEL_3_OR_HIGHER</p> <note> <p>Starting January 26, 2023, Amazon Web Services Private CA protects all CA private keys in non-China regions using hardware security modules (HSMs) that comply with FIPS PUB 140-2 Level 3.</p> <p>For information about security standard support in different Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/data-protection.html#private-keys\">Storage and security compliance of Amazon Web Services Private CA private keys</a>.</p> </note>"
         },
         "UsageMode":{
           "shape":"CertificateAuthorityUsageMode",
@@ -812,7 +813,7 @@
         },
         "KeyStorageSecurityStandard":{
           "shape":"KeyStorageSecurityStandard",
-          "documentation":"<p>Specifies a cryptographic key management compliance standard used for handling CA keys.</p> <p>Default: FIPS_140_2_LEVEL_3_OR_HIGHER</p> <note> <p>Some Amazon Web Services Regions do not support the default. When creating a CA in these Regions, you must provide <code>FIPS_140_2_LEVEL_2_OR_HIGHER</code> as the argument for <code>KeyStorageSecurityStandard</code>. Failure to do this results in an <code>InvalidArgsException</code> with the message, \"A certificate authority cannot be created in this region with the specified security standard.\"</p> <p>For information about security standard support in various Regions, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/data-protection.html#private-keys\">Storage and security compliance of Amazon Web Services Private CA private keys</a>.</p> </note>"
+          "documentation":"<p>Specifies a cryptographic key management compliance standard for handling and protecting CA keys.</p> <p>Default: FIPS_140_2_LEVEL_3_OR_HIGHER</p> <note> <p>Some Amazon Web Services Regions don't support the default value. When you create a CA in these Regions, you must use <code>CCPC_LEVEL_1_OR_HIGHER</code> for the <code>KeyStorageSecurityStandard</code> parameter. If you don't, the operation returns an <code>InvalidArgsException</code> with this message: \"A certificate authority cannot be created in this region with the specified security standard.\"</p> <p>For information about security standard support in different Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/data-protection.html#private-keys\">Storage and security compliance of Amazon Web Services Private CA private keys</a>.</p> </note>"
         },
         "Tags":{
           "shape":"TagList",
@@ -887,6 +888,14 @@
         "CrlDistributionPointExtensionConfiguration":{
           "shape":"CrlDistributionPointExtensionConfiguration",
           "documentation":"<p>Configures the behavior of the CRL Distribution Point extension for certificates issued by your certificate authority. If this field is not provided, then the CRl Distribution Point Extension will be present and contain the default CRL URL.</p>"
+        },
+        "CrlType":{
+          "shape":"CrlType",
+          "documentation":"<p>Specifies whether to create a complete or partitioned CRL. This setting determines the maximum number of certificates that the certificate authority can issue and revoke. For more information, see <a href=\"privateca/latest/userguide/pca.html#limits_pca\">Amazon Web Services Private CA quotas</a>.</p> <ul> <li> <p> <code>COMPLETE</code> - The default setting. Amazon Web Services Private CA maintains a single CRL ﬁle for all unexpired certiﬁcates issued by a CA that have been revoked for any reason. Each certiﬁcate that Amazon Web Services Private CA issues is bound to a speciﬁc CRL through its CRL distribution point (CDP) extension, deﬁned in <a href=\"https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.9\"> RFC 5280</a>.</p> </li> <li> <p> <code>PARTITIONED</code> - Compared to complete CRLs, partitioned CRLs dramatically increase the number of certiﬁcates your private CA can issue. </p> <important> <p> When using partitioned CRLs, you must validate that the CRL's associated issuing distribution point (IDP) URI matches the certiﬁcate's CDP URI to ensure the right CRL has been fetched. Amazon Web Services Private CA marks the IDP extension as critical, which your client must be able to process. </p> </important> </li> </ul>"
+        },
+        "CustomPath":{
+          "shape":"CrlPathString",
+          "documentation":"<p>Designates a custom ﬁle path in S3 for CRL(s). For example, <code>http://&lt;CustomName&gt;/ &lt;CustomPath&gt;/&lt;CrlPartition_GUID&gt;.crl</code>. </p>"
         }
       },
       "documentation":"<p>Contains configuration information for a certificate revocation list (CRL). Your private certificate authority (CA) creates base CRLs. Delta CRLs are not supported. You can enable CRLs for your new or an existing private CA by setting the <b>Enabled</b> parameter to <code>true</code>. Your private CA writes CRLs to an S3 bucket that you specify in the <b>S3BucketName</b> parameter. You can hide the name of your bucket by specifying a value for the <b>CustomCname</b> parameter. Your private CA by default copies the CNAME or the S3 bucket name to the <b>CRL Distribution Points</b> extension of each certificate it issues. If you want to configure this default behavior to be something different, you can set the <b>CrlDistributionPointExtensionConfiguration</b> parameter. Your S3 bucket policy must give write permission to Amazon Web Services Private CA. </p> <p>Amazon Web Services Private CA assets that are stored in Amazon S3 can be protected with encryption. For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html#crl-encryption\">Encrypting Your CRLs</a>.</p> <p>Your private CA uses the value in the <b>ExpirationInDays</b> parameter to calculate the <b>nextUpdate</b> field in the CRL. The CRL is refreshed prior to a certificate's expiration date or when a certificate is revoked. When a certificate is revoked, it appears in the CRL until the certificate expires, and then in one additional CRL after expiration, and it always appears in the audit report.</p> <p>A CRL is typically updated approximately 30 minutes after a certificate is revoked. If for any reason a CRL update fails, Amazon Web Services Private CA makes further attempts every 15 minutes.</p> <p>CRLs contain the following fields:</p> <ul> <li> <p> <b>Version</b>: The current version number defined in RFC 5280 is V2. The integer value is 0x1. </p> </li> <li> <p> <b>Signature Algorithm</b>: The name of the algorithm used to sign the CRL.</p> </li> <li> <p> <b>Issuer</b>: The X.500 distinguished name of your private CA that issued the CRL.</p> </li> <li> <p> <b>Last Update</b>: The issue date and time of this CRL.</p> </li> <li> <p> <b>Next Update</b>: The day and time by which the next CRL will be issued.</p> </li> <li> <p> <b>Revoked Certificates</b>: List of revoked certificates. Each list item contains the following information.</p> <ul> <li> <p> <b>Serial Number</b>: The serial number, in hexadecimal format, of the revoked certificate.</p> </li> <li> <p> <b>Revocation Date</b>: Date and time the certificate was revoked.</p> </li> <li> <p> <b>CRL Entry Extensions</b>: Optional extensions for the CRL entry.</p> <ul> <li> <p> <b>X509v3 CRL Reason Code</b>: Reason the certificate was revoked.</p> </li> </ul> </li> </ul> </li> <li> <p> <b>CRL Extensions</b>: Optional extensions for the CRL.</p> <ul> <li> <p> <b>X509v3 Authority Key Identifier</b>: Identifies the public key associated with the private key used to sign the certificate.</p> </li> <li> <p> <b>X509v3 CRL Number:</b>: Decimal sequence number for the CRL.</p> </li> </ul> </li> <li> <p> <b>Signature Algorithm</b>: Algorithm used by your private CA to sign the CRL.</p> </li> <li> <p> <b>Signature Value</b>: Signature computed over the CRL.</p> </li> </ul> <p>Certificate revocation lists created by Amazon Web Services Private CA are DER-encoded. You can use the following OpenSSL command to list a CRL.</p> <p> <code>openssl crl -inform DER -text -in <i>crl_path</i> -noout</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/privateca/latest/userguide/crl-planning.html\">Planning a certificate revocation list (CRL)</a> in the <i>Amazon Web Services Private Certificate Authority User Guide</i> </p>"
@@ -903,6 +912,19 @@
       },
       "documentation":"<p>Contains configuration information for the default behavior of the CRL Distribution Point (CDP) extension in certificates issued by your CA. This extension contains a link to download the CRL, so you can check whether a certificate has been revoked. To choose whether you want this extension omitted or not in certificates issued by your CA, you can set the <b>OmitExtension</b> parameter.</p>"
     },
+    "CrlPathString":{
+      "type":"string",
+      "max":253,
+      "min":0,
+      "pattern":"[-a-zA-Z0-9;?:@&=+$,%_.!~*()']+(/[-a-zA-Z0-9;?:@&=+$,%_.!~*()']+)*"
+    },
+    "CrlType":{
+      "type":"string",
+      "enum":[
+        "COMPLETE",
+        "PARTITIONED"
+      ]
+    },
     "CsrBlob":{
       "type":"blob",
       "max":32768,
@@ -1283,7 +1305,7 @@
       "members":{
         "ResourceArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the private CA that will have its policy retrieved. You can find the CA's ARN by calling the ListCertificateAuthorities action. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>The Amazon Resource Number (ARN) of the private CA that will have its policy retrieved. You can find the CA's ARN by calling the ListCertificateAuthorities action. </p>"
         }
       }
     },
@@ -1441,9 +1463,14 @@
       "type":"string",
       "enum":[
         "RSA_2048",
+        "RSA_3072",
         "RSA_4096",
         "EC_prime256v1",
         "EC_secp384r1",
+        "EC_secp521r1",
+        "ML_DSA_44",
+        "ML_DSA_65",
+        "ML_DSA_87",
         "SM2"
       ]
     },
@@ -1927,7 +1954,10 @@
         "SHA256WITHRSA",
         "SHA384WITHRSA",
         "SHA512WITHRSA",
-        "SM3WITHSM2"
+        "SM3WITHSM2",
+        "ML_DSA_44",
+        "ML_DSA_65",
+        "ML_DSA_87"
       ]
     },
     "String":{"type":"string"},
diff -pruN 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/waiters-2.json 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/acm-pca/2017-08-22/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/acm-pca/2017-08-22/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,76 +1,64 @@
 {
-    "version": 2,
-    "waiters": {
-        "CertificateAuthorityCSRCreated": {
-            "description": "Wait until a Certificate Authority CSR is created",
-            "operation": "GetCertificateAuthorityCsr",
-            "delay": 3,
-            "maxAttempts": 60,
-            "acceptors": [
-                {
-                    "state": "success",
-                    "matcher": "status",
-                    "expected": 200
-                },
-                {
-                    "state": "retry",
-                    "matcher": "error",
-                    "expected": "RequestInProgressException"
-                },
-                {
-                    "state": "failure",
-                    "matcher": "error",
-                    "expected": "AccessDeniedException"
-                }
-            ]
-        },
-        "CertificateIssued": {
-            "description": "Wait until a certificate is issued",
-            "operation": "GetCertificate",
-            "delay": 1,
-            "maxAttempts": 60,
-            "acceptors": [
-                {
-                    "state": "success",
-                    "matcher": "status",
-                    "expected": 200
-                },
-                {
-                    "state": "retry",
-                    "matcher": "error",
-                    "expected": "RequestInProgressException"
-                },
-                {
-                    "state": "failure",
-                    "matcher": "error",
-                    "expected": "AccessDeniedException"
-                }
-            ]
-        },
-        "AuditReportCreated": {
-            "description": "Wait until a Audit Report is created",
-            "operation": "DescribeCertificateAuthorityAuditReport",
-            "delay": 3,
-            "maxAttempts": 60,
-            "acceptors": [
-                {
-                    "state": "success",
-                    "matcher": "path",
-                    "argument": "AuditReportStatus",
-                    "expected": "SUCCESS"
-                },
-                {
-                    "state": "failure",
-                    "matcher": "path",
-                    "argument": "AuditReportStatus",
-                    "expected": "FAILED"
-                },
-                {
-                    "state": "failure",
-                    "matcher": "error",
-                    "expected": "AccessDeniedException"
-                }
-            ]
-        }
+  "version" : 2,
+  "waiters" : {
+    "AuditReportCreated" : {
+      "description" : "Wait until a Audit Report is created",
+      "delay" : 3,
+      "maxAttempts" : 60,
+      "operation" : "DescribeCertificateAuthorityAuditReport",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "AuditReportStatus",
+        "state" : "success",
+        "expected" : "SUCCESS"
+      }, {
+        "matcher" : "path",
+        "argument" : "AuditReportStatus",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "AccessDeniedException"
+      } ]
+    },
+    "CertificateAuthorityCSRCreated" : {
+      "description" : "Wait until a Certificate Authority CSR is created",
+      "delay" : 3,
+      "maxAttempts" : 60,
+      "operation" : "GetCertificateAuthorityCsr",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : false
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "RequestInProgressException"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "AccessDeniedException"
+      } ]
+    },
+    "CertificateIssued" : {
+      "description" : "Wait until a certificate is issued",
+      "delay" : 1,
+      "maxAttempts" : 60,
+      "operation" : "GetCertificate",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : false
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "RequestInProgressException"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "AccessDeniedException"
+      } ]
     }
-}
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://aiops-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://aiops-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://aiops.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://aiops.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+{
+  "pagination": {
+    "ListInvestigationGroups": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "investigationGroups"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,870 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"aiops",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"AWS AI Ops",
+    "serviceId":"AIOps",
+    "signatureVersion":"v4",
+    "signingName":"aiops",
+    "uid":"aiops-2018-05-10"
+  },
+  "operations":{
+    "CreateInvestigationGroup":{
+      "name":"CreateInvestigationGroup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/investigationGroups",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateInvestigationGroupInput"},
+      "output":{"shape":"CreateInvestigationGroupOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates an <i>investigation group</i> in your account. Creating an investigation group is a one-time setup task for each Region in your account. It is a necessary task to be able to perform investigations.</p> <p>Settings in the investigation group help you centrally manage the common properties of your investigations, such as the following:</p> <ul> <li> <p>Who can access the investigations</p> </li> <li> <p>Whether investigation data is encrypted with a customer managed Key Management Service key.</p> </li> <li> <p>How long investigations and their data are retained by default.</p> </li> </ul> <p>Currently, you can have one investigation group in each Region in your account. Each investigation in a Region is a part of the investigation group in that Region</p> <p>To create an investigation group and set up CloudWatch investigations, you must be signed in to an IAM principal that has either the <code>AIOpsConsoleAdminPolicy</code> or the <code>AdministratorAccess</code> IAM policy attached, or to an account that has similar permissions.</p> <important> <p>You can configure CloudWatch alarms to start investigations and add events to investigations. If you create your investigation group with <code>CreateInvestigationGroup</code> and you want to enable alarms to do this, you must use <code>PutInvestigationGroupPolicy</code> to create a resource policy that grants this permission to CloudWatch alarms. </p> <p>For more information about configuring CloudWatch alarms, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html\">Using Amazon CloudWatch alarms</a> </p> </important>",
+      "idempotent":true
+    },
+    "DeleteInvestigationGroup":{
+      "name":"DeleteInvestigationGroup",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/investigationGroups/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteInvestigationGroupRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes the specified investigation group from your account. You can currently have one investigation group per Region in your account. After you delete an investigation group, you can later create a new investigation group in the same Region.</p>",
+      "idempotent":true
+    },
+    "DeleteInvestigationGroupPolicy":{
+      "name":"DeleteInvestigationGroupPolicy",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/investigationGroups/{identifier}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteInvestigationGroupPolicyRequest"},
+      "output":{"shape":"DeleteInvestigationGroupPolicyOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Removes the IAM resource policy from being associated with the investigation group that you specify.</p>",
+      "idempotent":true
+    },
+    "GetInvestigationGroup":{
+      "name":"GetInvestigationGroup",
+      "http":{
+        "method":"GET",
+        "requestUri":"/investigationGroups/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInvestigationGroupRequest"},
+      "output":{"shape":"GetInvestigationGroupResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns the configuration information for the specified investigation group.</p>"
+    },
+    "GetInvestigationGroupPolicy":{
+      "name":"GetInvestigationGroupPolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/investigationGroups/{identifier}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInvestigationGroupPolicyRequest"},
+      "output":{"shape":"GetInvestigationGroupPolicyResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns the JSON of the IAM resource policy associated with the specified investigation group in a string. For example, <code>{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Effect\\\":\\\"Allow\\\",\\\"Principal\\\":{\\\"Service\\\":\\\"aiops.alarms.cloudwatch.amazonaws.com\\\"},\\\"Action\\\":[\\\"aiops:CreateInvestigation\\\",\\\"aiops:CreateInvestigationEvent\\\"],\\\"Resource\\\":\\\"*\\\",\\\"Condition\\\":{\\\"StringEquals\\\":{\\\"aws:SourceAccount\\\":\\\"111122223333\\\"},\\\"ArnLike\\\":{\\\"aws:SourceArn\\\":\\\"arn:aws:cloudwatch:us-east-1:111122223333:alarm:*\\\"}}}]}</code>.</p>"
+    },
+    "ListInvestigationGroups":{
+      "name":"ListInvestigationGroups",
+      "http":{
+        "method":"GET",
+        "requestUri":"/investigationGroups",
+        "responseCode":200
+      },
+      "input":{"shape":"ListInvestigationGroupsInput"},
+      "output":{"shape":"ListInvestigationGroupsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns the ARN and name of each investigation group in the account.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Displays the tags associated with a CloudWatch investigations resource. Currently, investigation groups support tagging.</p>"
+    },
+    "PutInvestigationGroupPolicy":{
+      "name":"PutInvestigationGroupPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/investigationGroups/{identifier}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"PutInvestigationGroupPolicyRequest"},
+      "output":{"shape":"PutInvestigationGroupPolicyResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates an IAM resource policy and assigns it to the specified investigation group.</p> <p>If you create your investigation group with <code>CreateInvestigationGroup</code> and you want to enable CloudWatch alarms to create investigations and add events to investigations, you must use this operation to create a policy similar to this example.</p> <p> <code> { \"Version\": \"2008-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"Service\": \"aiops.alarms.cloudwatch.amazonaws.com\" }, \"Action\": [ \"aiops:CreateInvestigation\", \"aiops:CreateInvestigationEvent\" ], \"Resource\": \"*\", \"Condition\": { \"StringEquals\": { \"aws:SourceAccount\": \"account-id\" }, \"ArnLike\": { \"aws:SourceArn\": \"arn:aws:cloudwatch:region:account-id:alarm:*\" } } } ] } </code> </p>",
+      "idempotent":true
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified resource.</p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values.</p> <p>Tags don't have any semantic meaning to Amazon Web Services and are interpreted strictly as strings of characters.</p> <p>You can associate as many as 50 tags with a resource.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Removes one or more tags from the specified resource.</p>",
+      "idempotent":true
+    },
+    "UpdateInvestigationGroup":{
+      "name":"UpdateInvestigationGroup",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/investigationGroups/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateInvestigationGroupRequest"},
+      "output":{"shape":"UpdateInvestigationGroupOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Updates the configuration of the specified investigation group.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>You don't have sufficient permissions to perform this action.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "ChatConfigurationArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:.*"
+    },
+    "ChatConfigurationArns":{
+      "type":"list",
+      "member":{"shape":"ChatConfigurationArn"},
+      "max":5,
+      "min":1
+    },
+    "ChatbotNotificationChannel":{
+      "type":"map",
+      "key":{"shape":"SNSTopicArn"},
+      "value":{"shape":"ChatConfigurationArns"}
+    },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>This operation couldn't be completed because of a conflict in resource states.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateInvestigationGroupInput":{
+      "type":"structure",
+      "required":[
+        "name",
+        "roleArn"
+      ],
+      "members":{
+        "name":{
+          "shape":"StringWithPatternAndLengthLimits",
+          "documentation":"<p>Provides a name for the investigation group.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>Specify the ARN of the IAM role that CloudWatch investigations will use when it gathers investigation data. The permissions in this role determine which of your resources that CloudWatch investigations will have access to during investigations.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Investigations-Security.html#Investigations-Security-Data\">How to control what data CloudWatch investigations has access to during investigations</a>.</p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>Use this structure if you want to use a customer managed KMS key to encrypt your investigation data. If you omit this parameter, CloudWatch investigations will use an Amazon Web Services key to encrypt the data. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Investigations-Security.html#Investigations-KMS\">Encryption of investigation data</a>.</p>"
+        },
+        "retentionInDays":{
+          "shape":"Retention",
+          "documentation":"<p>Specify how long that investigation data is kept. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Investigations-Retention.html\">Operational investigation data retention</a>. </p> <p>If you omit this parameter, the default of 90 days is used.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of key-value pairs to associate with the investigation group. You can associate as many as 50 tags with an investigation group. To be able to associate tags when you create the investigation group, you must have the <code>cloudwatch:TagResource</code> permission.</p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values.</p>"
+        },
+        "tagKeyBoundaries":{
+          "shape":"TagKeyBoundaries",
+          "documentation":"<p>Enter the existing custom tag keys for custom applications in your system. Resource tags help CloudWatch investigations narrow the search space when it is unable to discover definite relationships between resources. For example, to discover that an Amazon ECS service depends on an Amazon RDS database, CloudWatch investigations can discover this relationship using data sources such as X-Ray and CloudWatch Application Signals. However, if you haven't deployed these features, CloudWatch investigations will attempt to identify possible relationships. Tag boundaries can be used to narrow the resources that will be discovered by CloudWatch investigations in these cases.</p> <p>You don't need to enter tags created by myApplications or CloudFormation, because CloudWatch investigations can automatically detect those tags.</p>"
+        },
+        "chatbotNotificationChannel":{
+          "shape":"ChatbotNotificationChannel",
+          "documentation":"<p>Use this structure to integrate CloudWatch investigations with chat applications. This structure is a string array. For the first string, specify the ARN of an Amazon SNS topic. For the array of strings, specify the ARNs of one or more chat applications configurations that you want to associate with that topic. For more information about these configuration ARNs, see <a href=\"https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html\">Getting started with Amazon Q in chat applications</a> and <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awschatbot.html#awschatbot-resources-for-iam-policies\">Resource type defined by Amazon Web Services Chatbot</a>.</p>"
+        },
+        "isCloudTrailEventHistoryEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specify <code>true</code> to enable CloudWatch investigations to have access to change events that are recorded by CloudTrail. The default is <code>true</code>.</p>"
+        },
+        "crossAccountConfigurations":{
+          "shape":"CrossAccountConfigurations",
+          "documentation":"<p>List of <code>sourceRoleArn</code> values that have been configured for cross-account access.</p>"
+        }
+      }
+    },
+    "CreateInvestigationGroupOutput":{
+      "type":"structure",
+      "members":{
+        "arn":{
+          "shape":"InvestigationGroupArn",
+          "documentation":"<p>The ARN of the investigation group that you just created.</p>"
+        }
+      }
+    },
+    "CrossAccountConfiguration":{
+      "type":"structure",
+      "members":{
+        "sourceRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The ARN of an existing role which will be used to do investigations on your behalf. </p>"
+        }
+      },
+      "documentation":"<p>This structure contains information about the cross-account configuration in the account. </p>"
+    },
+    "CrossAccountConfigurations":{
+      "type":"list",
+      "member":{"shape":"CrossAccountConfiguration"},
+      "max":25,
+      "min":0
+    },
+    "DeleteInvestigationGroupPolicyOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteInvestigationGroupPolicyRequest":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to remove the policy from.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "DeleteInvestigationGroupRequest":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to delete.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "EncryptionConfiguration":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"EncryptionConfigurationType",
+          "documentation":"<p>Displays whether investigation data is encrypted by a customer managed key or an Amazon Web Services owned key.</p>"
+        },
+        "kmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>If the investigation group uses a customer managed key for encryption, this field displays the ID of that key.</p>"
+        }
+      },
+      "documentation":"<p>Use this structure to specify a customer managed KMS key to use to encrypt investigation data. </p>"
+    },
+    "EncryptionConfigurationType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED_KEY",
+        "CUSTOMER_MANAGED_KMS_KEY"
+      ]
+    },
+    "ForbiddenException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Access id denied for this operation, or this operation is not valid for the specified resource.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "GetInvestigationGroupPolicyRequest":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to view the policy of.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "GetInvestigationGroupPolicyResponse":{
+      "type":"structure",
+      "members":{
+        "investigationGroupArn":{
+          "shape":"InvestigationGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the investigation group that you want to view the policy of.</p>"
+        },
+        "policy":{
+          "shape":"InvestigationGroupPolicyDocument",
+          "documentation":"<p>The policy, in JSON format.</p>"
+        }
+      }
+    },
+    "GetInvestigationGroupRequest":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to view. This is used to set the name of the investigation group.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "GetInvestigationGroupResponse":{
+      "type":"structure",
+      "members":{
+        "createdBy":{
+          "shape":"IdentifierStringWithPatternAndLengthLimits",
+          "documentation":"<p>The name of the user who created the investigation group.</p>"
+        },
+        "createdAt":{
+          "shape":"Long",
+          "documentation":"<p>The date and time that the investigation group was created.</p>"
+        },
+        "lastModifiedBy":{
+          "shape":"IdentifierStringWithPatternAndLengthLimits",
+          "documentation":"<p>The name of the user who created the investigation group.</p>"
+        },
+        "lastModifiedAt":{
+          "shape":"Long",
+          "documentation":"<p>The date and time that the investigation group was most recently modified.</p>"
+        },
+        "name":{
+          "shape":"StringWithPatternAndLengthLimits",
+          "documentation":"<p>The name of the investigation group.</p>"
+        },
+        "arn":{
+          "shape":"InvestigationGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the investigation group.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The ARN of the IAM role that the investigation group uses for permissions to gather data.</p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>Specifies the customer managed KMS key that the investigation group uses to encrypt data, if there is one. If not, the investigation group uses an Amazon Web Services key to encrypt the data.</p>"
+        },
+        "retentionInDays":{
+          "shape":"Retention",
+          "documentation":"<p>Specifies how long that investigation data is kept.</p>"
+        },
+        "chatbotNotificationChannel":{
+          "shape":"ChatbotNotificationChannel",
+          "documentation":"<p>This structure is a string array. The first string is the ARN of a Amazon SNS topic. The array of strings display the ARNs of chat applications configurations that are associated with that topic. For more information about these configuration ARNs, see <a href=\"https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html\">Getting started with Amazon Q in chat applications</a> and <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awschatbot.html#awschatbot-resources-for-iam-policies\">Resource type defined by Amazon Web Services Chatbot</a>.</p>"
+        },
+        "tagKeyBoundaries":{
+          "shape":"TagKeyBoundaries",
+          "documentation":"<p>Displays the custom tag keys for custom applications in your system that you have specified in the investigation group. Resource tags help CloudWatch investigations narrow the search space when it is unable to discover definite relationships between resources. </p>"
+        },
+        "isCloudTrailEventHistoryEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether CloudWatch investigationshas access to change events that are recorded by CloudTrail.</p>"
+        },
+        "crossAccountConfigurations":{
+          "shape":"CrossAccountConfigurations",
+          "documentation":"<p>Lists the <code>AWSAccountId</code> of the accounts configured for cross-account access and the results of the last scan performed on each account.</p>"
+        }
+      }
+    },
+    "IdentifierStringWithPatternAndLengthLimits":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[\\-_\\/A-Za-z0-9:\\.]+"
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>An internal server error occurred. You can try again later.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "InvestigationGroupArn":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):aiops:[a-zA-Z0-9-]*:[0-9]{12}:investigation-group\\/[A-Za-z0-9]{16}"
+    },
+    "InvestigationGroupIdentifier":{
+      "type":"string",
+      "pattern":"(?:[\\-_A-Za-z0-9]{1,512}|arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):aiops:[a-zA-Z0-9-]*:[0-9]{12}:investigation-group\\/[A-Za-z0-9]{16})"
+    },
+    "InvestigationGroupPolicyDocument":{
+      "type":"string",
+      "max":32768,
+      "min":1,
+      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+"
+    },
+    "InvestigationGroups":{
+      "type":"list",
+      "member":{"shape":"ListInvestigationGroupsModel"}
+    },
+    "KmsKeyId":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"arn:.*"
+    },
+    "ListInvestigationGroupsInput":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"SensitiveStringWithLengthLimits",
+          "documentation":"<p>Include this value, if it was returned by the previous operation, to get the next set of service operations.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListInvestigationGroupsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListInvestigationGroupsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":1
+    },
+    "ListInvestigationGroupsModel":{
+      "type":"structure",
+      "members":{
+        "arn":{
+          "shape":"InvestigationGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the investigation group.</p>"
+        },
+        "name":{
+          "shape":"StringWithPatternAndLengthLimits",
+          "documentation":"<p>The name of the investigation group.</p>"
+        }
+      },
+      "documentation":"<p>This structure contains information about one investigation group in the account.</p>"
+    },
+    "ListInvestigationGroupsOutput":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"SensitiveStringWithLengthLimits",
+          "documentation":"<p>Include this value in your next use of this operation to get the next set of service operations.</p>"
+        },
+        "investigationGroups":{
+          "shape":"InvestigationGroups",
+          "documentation":"<p>An array of structures, where each structure contains the information about one investigation group in the account.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceOutput":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The list of tag keys and values associated with the resource you specified.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the CloudWatch investigations resource that you want to view tags for. You can use the <code>ListInvestigationGroups</code> operation to find the ARNs of investigation groups.</p> <p>The ARN format for an investigation group is <code>arn:aws:aiops:<i>Region</i>:<i>account-id</i>:investigation-group:<i>investigation-group-id</i> </code>.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        }
+      }
+    },
+    "Long":{
+      "type":"long",
+      "box":true
+    },
+    "PutInvestigationGroupPolicyRequest":{
+      "type":"structure",
+      "required":[
+        "identifier",
+        "policy"
+      ],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to assign the policy to.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "policy":{
+          "shape":"InvestigationGroupPolicyDocument",
+          "documentation":"<p>The policy, in JSON format.</p>"
+        }
+      }
+    },
+    "PutInvestigationGroupPolicyResponse":{
+      "type":"structure",
+      "members":{
+        "investigationGroupArn":{
+          "shape":"InvestigationGroupArn",
+          "documentation":"<p>The ARN of the investigation group that will use this policy.</p>"
+        }
+      }
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The specified resource doesn't exist.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Retention":{
+      "type":"long",
+      "box":true,
+      "max":90,
+      "min":7
+    },
+    "RoleArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:.*"
+    },
+    "SNSTopicArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:.*"
+    },
+    "SensitiveStringWithLengthLimits":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "sensitive":true
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"},
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The resource that caused the quota exception.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>The type of resource that caused the quota exception.</p>"
+        },
+        "serviceCode":{
+          "shape":"String",
+          "documentation":"<p>This name of the service associated with the error.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>This quota that was exceeded.</p>"
+        }
+      },
+      "documentation":"<p>This request exceeds a service quota.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "String":{"type":"string"},
+    "StringWithPatternAndLengthLimits":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[\\-_A-Za-z0-9\\[\\]\\(\\)\\{\\}\\.: ]+"
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]+)"
+    },
+    "TagKeyBoundaries":{
+      "type":"list",
+      "member":{"shape":"TagKey"}
+    },
+    "TagKeys":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":50,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to apply the tags to. You can use the <code>ListInvestigationGroups</code> operation to find the ARNs of investigation groups.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The list of key-value pairs to associate with the resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
+    },
+    "Tags":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"}
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request was throttled because of quota limits. You can try again later.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to remove the tags from. You can use the<code>ListInvestigationGroups</code> operation to find the ARNs of investigation groups.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tagKeys":{
+          "shape":"TagKeys",
+          "documentation":"<p>The list of tag keys to remove from the resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateInvestigationGroupOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateInvestigationGroupRequest":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"InvestigationGroupIdentifier",
+          "documentation":"<p>Specify either the name or the ARN of the investigation group that you want to modify.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>Specify this field if you want to change the IAM role that CloudWatch investigations will use when it gathers investigation data. To do so, specify the ARN of the new role.</p> <p>The permissions in this role determine which of your resources that CloudWatch investigations will have access to during investigations.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Investigations-Security.html#Investigations-Security-Data\">How to control what data CloudWatch investigations has access to during investigations</a>.</p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>Use this structure if you want to use a customer managed KMS key to encrypt your investigation data. If you omit this parameter, CloudWatch investigations will use an Amazon Web Services key to encrypt the data. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Investigations-Security.html#Investigations-KMS\">Encryption of investigation data</a>.</p>"
+        },
+        "tagKeyBoundaries":{
+          "shape":"TagKeyBoundaries",
+          "documentation":"<p>Enter the existing custom tag keys for custom applications in your system. Resource tags help CloudWatch investigations narrow the search space when it is unable to discover definite relationships between resources. For example, to discover that an Amazon ECS service depends on an Amazon RDS database, CloudWatch investigations can discover this relationship using data sources such as X-Ray and CloudWatch Application Signals. However, if you haven't deployed these features, CloudWatch investigations will attempt to identify possible relationships. Tag boundaries can be used to narrow the resources that will be discovered by CloudWatch investigations in these cases.</p> <p>You don't need to enter tags created by myApplications or CloudFormation, because CloudWatch investigations can automatically detect those tags.</p>"
+        },
+        "chatbotNotificationChannel":{
+          "shape":"ChatbotNotificationChannel",
+          "documentation":"<p>Use this structure to integrate CloudWatch investigations with chat applications. This structure is a string array. For the first string, specify the ARN of an Amazon SNS topic. For the array of strings, specify the ARNs of one or more chat applications configurations that you want to associate with that topic. For more information about these configuration ARNs, see <a href=\"https://docs.aws.amazon.com/chatbot/latest/adminguide/getting-started.html\">Getting started with Amazon Q in chat applications</a> and <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awschatbot.html#awschatbot-resources-for-iam-policies\">Resource type defined by Amazon Web Services Chatbot</a>.</p>"
+        },
+        "isCloudTrailEventHistoryEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specify <code>true</code> to enable CloudWatch investigations to have access to change events that are recorded by CloudTrail. The default is <code>true</code>.</p>"
+        },
+        "crossAccountConfigurations":{
+          "shape":"CrossAccountConfigurations",
+          "documentation":"<p>Used to configure cross-account access for an investigation group. It allows the investigation group to access resources in other accounts. </p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>This operation or its parameters aren't formatted correctly.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    }
+  },
+  "documentation":"<p>The CloudWatch investigations feature is a generative AI-powered assistant that can help you respond to incidents in your system. It uses generative AI to scan your system's telemetry and quickly surface suggestions that might be related to your issue. These suggestions include metrics, logs, deployment events, and root-cause hypotheses. </p> <p>You can use API actions to create, manage, and delete investigation groups and investigation group policies. To start and manage investigations, you must use the CloudWatch console.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/waiters-2.json 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/aiops/2018-05-10/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/aiops/2018-05-10/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amp/2020-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/amp/2020-08-01/paginators-1.json 2.31.35-1/awscli/botocore/data/amp/2020-08-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/amp/2020-08-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amp/2020-08-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "scrapers"
+    },
+    "ListAnomalyDetectors": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "anomalyDetectors"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/amp/2020-08-01/service-2.json 2.31.35-1/awscli/botocore/data/amp/2020-08-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/amp/2020-08-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amp/2020-08-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-08-01",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"aps",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Amazon Prometheus Service",
     "serviceId":"amp",
     "signatureVersion":"v4",
     "signingName":"aps",
-    "uid":"amp-2020-08-01",
-    "auth":["aws.auth#sigv4"]
+    "uid":"amp-2020-08-01"
   },
   "operations":{
     "CreateAlertManagerDefinition":{
@@ -35,6 +34,26 @@
       "documentation":"<p>The <code>CreateAlertManagerDefinition</code> operation creates the alert manager definition in a workspace. If a workspace already has an alert manager definition, don't use this operation to update it. Instead, use <code>PutAlertManagerDefinition</code>.</p>",
       "idempotent":true
     },
+    "CreateAnomalyDetector":{
+      "name":"CreateAnomalyDetector",
+      "http":{
+        "method":"POST",
+        "requestUri":"/workspaces/{workspaceId}/anomalydetectors",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateAnomalyDetectorRequest"},
+      "output":{"shape":"CreateAnomalyDetectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates an anomaly detector within a workspace using the Random Cut Forest algorithm for time-series analysis. The anomaly detector analyzes Amazon Managed Service for Prometheus metrics to identify unusual patterns and behaviors.</p>",
+      "idempotent":true
+    },
     "CreateLoggingConfiguration":{
       "name":"CreateLoggingConfiguration",
       "http":{
@@ -50,7 +69,25 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>The <code>CreateLoggingConfiguration</code> operation creates a logging configuration for the workspace. Use this operation to set the CloudWatch log group to which the logs will be published to.</p>",
+      "documentation":"<p>The <code>CreateLoggingConfiguration</code> operation creates rules and alerting logging configuration for the workspace. Use this operation to set the CloudWatch log group to which the logs will be published to.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>",
+      "idempotent":true
+    },
+    "CreateQueryLoggingConfiguration":{
+      "name":"CreateQueryLoggingConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/workspaces/{workspaceId}/logging/query",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateQueryLoggingConfigurationRequest"},
+      "output":{"shape":"CreateQueryLoggingConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a query logging configuration for the specified workspace. This operation enables logging of queries that exceed the specified QSP threshold.</p>",
       "idempotent":true
     },
     "CreateRuleGroupsNamespace":{
@@ -71,7 +108,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>The <code>CreateRuleGroupsNamespace</code> operation creates a rule groups namespace within a workspace. A rule groups namespace is associated with exactly one rules file. A workspace can have multiple rule groups namespaces.</p> <p>Use this operation only to create new rule groups namespaces. To update an existing rule groups namespace, use <code>PutRuleGroupsNamespace</code>.</p>",
+      "documentation":"<p>The <code>CreateRuleGroupsNamespace</code> operation creates a rule groups namespace within a workspace. A rule groups namespace is associated with exactly one rules file. A workspace can have multiple rule groups namespaces.</p> <important> <p>The combined length of a rule group namespace and a rule group name cannot exceed 721 UTF-8 bytes.</p> </important> <p>Use this operation only to create new rule groups namespaces. To update an existing rule groups namespace, use <code>PutRuleGroupsNamespace</code>.</p>",
       "idempotent":true
     },
     "CreateScraper":{
@@ -92,7 +129,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>The <code>CreateScraper</code> operation creates a scraper to collect metrics. A scraper pulls metrics from Prometheus-compatible sources within an Amazon EKS cluster, and sends them to your Amazon Managed Service for Prometheus workspace. Scrapers are flexible, and can be configured to control what metrics are collected, the frequency of collection, what transformations are applied to the metrics, and more.</p> <p>An IAM role will be created for you that Amazon Managed Service for Prometheus uses to access the metrics in your cluster. You must configure this role with a policy that allows it to scrape metrics from your cluster. For more information, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-setup\">Configuring your Amazon EKS cluster</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> <p>The <code>scrapeConfiguration</code> parameter contains the base-64 encoded YAML configuration for the scraper.</p> <note> <p>For more information about collectors, including what metrics are collected, and how to configure the scraper, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html\">Using an Amazon Web Services managed collector</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> </note>",
+      "documentation":"<p>The <code>CreateScraper</code> operation creates a scraper to collect metrics. A scraper pulls metrics from Prometheus-compatible sources and sends them to your Amazon Managed Service for Prometheus workspace. You can configure scrapers to collect metrics from Amazon EKS clusters, Amazon MSK clusters, or from VPC-based sources that support DNS-based service discovery. Scrapers are flexible, and can be configured to control what metrics are collected, the frequency of collection, what transformations are applied to the metrics, and more.</p> <p>An IAM role will be created for you that Amazon Managed Service for Prometheus uses to access the metrics in your source. You must configure this role with a policy that allows it to scrape metrics from your source. For Amazon EKS sources, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-setup\">Configuring your Amazon EKS cluster</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> <p>The <code>scrapeConfiguration</code> parameter contains the base-64 encoded YAML configuration for the scraper.</p> <p>When creating a scraper, the service creates a <code>Network Interface</code> in each <b>Availability Zone</b> that are passed into <code>CreateScraper</code> through subnets. These network interfaces are used to connect to your source within the VPC for scraping metrics.</p> <note> <p>For more information about collectors, including what metrics are collected, and how to configure the scraper, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html\">Using an Amazon Web Services managed collector</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> </note>",
       "idempotent":true
     },
     "CreateWorkspace":{
@@ -134,6 +171,25 @@
       "documentation":"<p>Deletes the alert manager definition from a workspace.</p>",
       "idempotent":true
     },
+    "DeleteAnomalyDetector":{
+      "name":"DeleteAnomalyDetector",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/workspaces/{workspaceId}/anomalydetectors/{anomalyDetectorId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAnomalyDetectorRequest"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes an anomaly detector from a workspace. This operation is idempotent.</p>",
+      "idempotent":true
+    },
     "DeleteLoggingConfiguration":{
       "name":"DeleteLoggingConfiguration",
       "http":{
@@ -149,7 +205,44 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes the logging configuration for a workspace.</p>",
+      "documentation":"<p>Deletes the rules and alerting logging configuration for a workspace.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>",
+      "idempotent":true
+    },
+    "DeleteQueryLoggingConfiguration":{
+      "name":"DeleteQueryLoggingConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/workspaces/{workspaceId}/logging/query",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteQueryLoggingConfigurationRequest"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes the query logging configuration for the specified workspace.</p>",
+      "idempotent":true
+    },
+    "DeleteResourcePolicy":{
+      "name":"DeleteResourcePolicy",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/workspaces/{workspaceId}/policy",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteResourcePolicyRequest"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes the resource-based policy attached to an Amazon Managed Service for Prometheus workspace.</p>",
       "idempotent":true
     },
     "DeleteRuleGroupsNamespace":{
@@ -191,6 +284,24 @@
       "documentation":"<p>The <code>DeleteScraper</code> operation deletes one scraper, and stops any metrics collection that the scraper performs.</p>",
       "idempotent":true
     },
+    "DeleteScraperLoggingConfiguration":{
+      "name":"DeleteScraperLoggingConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/scrapers/{scraperId}/logging-configuration",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteScraperLoggingConfigurationRequest"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes the logging configuration for a Amazon Managed Service for Prometheus scraper.</p>",
+      "idempotent":true
+    },
     "DeleteWorkspace":{
       "name":"DeleteWorkspace",
       "http":{
@@ -226,7 +337,27 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves the full information about the alert manager definition for a workspace.</p>"
+      "documentation":"<p>Retrieves the full information about the alert manager definition for a workspace.</p>",
+      "readonly":true
+    },
+    "DescribeAnomalyDetector":{
+      "name":"DescribeAnomalyDetector",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workspaces/{workspaceId}/anomalydetectors/{anomalyDetectorId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeAnomalyDetectorRequest"},
+      "output":{"shape":"DescribeAnomalyDetectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific anomaly detector, including its status and configuration.</p>",
+      "readonly":true
     },
     "DescribeLoggingConfiguration":{
       "name":"DescribeLoggingConfiguration",
@@ -243,7 +374,45 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns complete information about the current logging configuration of the workspace.</p>"
+      "documentation":"<p>Returns complete information about the current rules and alerting logging configuration of the workspace.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>",
+      "readonly":true
+    },
+    "DescribeQueryLoggingConfiguration":{
+      "name":"DescribeQueryLoggingConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workspaces/{workspaceId}/logging/query",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeQueryLoggingConfigurationRequest"},
+      "output":{"shape":"DescribeQueryLoggingConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves the details of the query logging configuration for the specified workspace.</p>",
+      "readonly":true
+    },
+    "DescribeResourcePolicy":{
+      "name":"DescribeResourcePolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workspaces/{workspaceId}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeResourcePolicyRequest"},
+      "output":{"shape":"DescribeResourcePolicyResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about the resource-based policy attached to an Amazon Managed Service for Prometheus workspace.</p>",
+      "readonly":true
     },
     "DescribeRuleGroupsNamespace":{
       "name":"DescribeRuleGroupsNamespace",
@@ -261,7 +430,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns complete information about one rule groups namespace. To retrieve a list of rule groups namespaces, use <code>ListRuleGroupsNamespaces</code>.</p>"
+      "documentation":"<p>Returns complete information about one rule groups namespace. To retrieve a list of rule groups namespaces, use <code>ListRuleGroupsNamespaces</code>.</p>",
+      "readonly":true
     },
     "DescribeScraper":{
       "name":"DescribeScraper",
@@ -279,7 +449,26 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>The <code>DescribeScraper</code> operation displays information about an existing scraper.</p>"
+      "documentation":"<p>The <code>DescribeScraper</code> operation displays information about an existing scraper.</p>",
+      "readonly":true
+    },
+    "DescribeScraperLoggingConfiguration":{
+      "name":"DescribeScraperLoggingConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/scrapers/{scraperId}/logging-configuration",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeScraperLoggingConfigurationRequest"},
+      "output":{"shape":"DescribeScraperLoggingConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Describes the logging configuration for a Amazon Managed Service for Prometheus scraper.</p>",
+      "readonly":true
     },
     "DescribeWorkspace":{
       "name":"DescribeWorkspace",
@@ -297,7 +486,27 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns information about an existing workspace. </p>"
+      "documentation":"<p>Returns information about an existing workspace. </p>",
+      "readonly":true
+    },
+    "DescribeWorkspaceConfiguration":{
+      "name":"DescribeWorkspaceConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workspaces/{workspaceId}/configuration",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeWorkspaceConfigurationRequest"},
+      "output":{"shape":"DescribeWorkspaceConfigurationResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Use this operation to return information about the configuration of a workspace. The configuration details returned include workspace configuration status, label set limits, and retention period.</p>",
+      "readonly":true
     },
     "GetDefaultScraperConfiguration":{
       "name":"GetDefaultScraperConfiguration",
@@ -313,7 +522,27 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>The <code>GetDefaultScraperConfiguration</code> operation returns the default scraper configuration used when Amazon EKS creates a scraper for you.</p>"
+      "documentation":"<p>The <code>GetDefaultScraperConfiguration</code> operation returns the default scraper configuration used when Amazon EKS creates a scraper for you.</p>",
+      "readonly":true
+    },
+    "ListAnomalyDetectors":{
+      "name":"ListAnomalyDetectors",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workspaces/{workspaceId}/anomalydetectors",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAnomalyDetectorsRequest"},
+      "output":{"shape":"ListAnomalyDetectorsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a paginated list of anomaly detectors for a workspace with optional filtering by alias.</p>",
+      "readonly":true
     },
     "ListRuleGroupsNamespaces":{
       "name":"ListRuleGroupsNamespaces",
@@ -331,7 +560,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns a list of rule groups namespaces in a workspace.</p>"
+      "documentation":"<p>Returns a list of rule groups namespaces in a workspace.</p>",
+      "readonly":true
     },
     "ListScrapers":{
       "name":"ListScrapers",
@@ -348,7 +578,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>The <code>ListScrapers</code> operation lists all of the scrapers in your account. This includes scrapers being created or deleted. You can optionally filter the returned list.</p>"
+      "documentation":"<p>The <code>ListScrapers</code> operation lists all of the scrapers in your account. This includes scrapers being created or deleted. You can optionally filter the returned list.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -366,7 +597,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>The <code>ListTagsForResource</code> operation returns the tags that are associated with an Amazon Managed Service for Prometheus resource. Currently, the only resources that can be tagged are scrapers, workspaces, and rule groups namespaces. </p>"
+      "documentation":"<p>The <code>ListTagsForResource</code> operation returns the tags that are associated with an Amazon Managed Service for Prometheus resource. Currently, the only resources that can be tagged are scrapers, workspaces, and rule groups namespaces. </p>",
+      "readonly":true
     },
     "ListWorkspaces":{
       "name":"ListWorkspaces",
@@ -383,7 +615,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists all of the Amazon Managed Service for Prometheus workspaces in your account. This includes workspaces being created or deleted. </p>"
+      "documentation":"<p>Lists all of the Amazon Managed Service for Prometheus workspaces in your account. This includes workspaces being created or deleted. </p>",
+      "readonly":true
     },
     "PutAlertManagerDefinition":{
       "name":"PutAlertManagerDefinition",
@@ -406,6 +639,46 @@
       "documentation":"<p>Updates an existing alert manager definition in a workspace. If the workspace does not already have an alert manager definition, don't use this operation to create it. Instead, use <code>CreateAlertManagerDefinition</code>.</p>",
       "idempotent":true
     },
+    "PutAnomalyDetector":{
+      "name":"PutAnomalyDetector",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/workspaces/{workspaceId}/anomalydetectors/{anomalyDetectorId}",
+        "responseCode":202
+      },
+      "input":{"shape":"PutAnomalyDetectorRequest"},
+      "output":{"shape":"PutAnomalyDetectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>When you call <code>PutAnomalyDetector</code>, the operation creates a new anomaly detector if one doesn't exist, or updates an existing one. Each call to this operation triggers a complete retraining of the detector, which includes querying the minimum required samples and backfilling the detector with historical data. This process occurs regardless of whether you're making a minor change like updating the evaluation interval or making more substantial modifications. The operation serves as the single method for creating, updating, and retraining anomaly detectors.</p>",
+      "idempotent":true
+    },
+    "PutResourcePolicy":{
+      "name":"PutResourcePolicy",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/workspaces/{workspaceId}/policy",
+        "responseCode":202
+      },
+      "input":{"shape":"PutResourcePolicyRequest"},
+      "output":{"shape":"PutResourcePolicyResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates or updates a resource-based policy for an Amazon Managed Service for Prometheus workspace. Use resource-based policies to grant permissions to other AWS accounts or services to access your workspace.</p> <p>Only Prometheus-compatible APIs can be used for workspace sharing. You can add non-Prometheus-compatible APIs to the policy, but they will be ignored. For more information, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-APIReference-Prometheus-Compatible-Apis.html\">Prometheus-compatible APIs</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> <p>If your workspace uses customer-managed KMS keys for encryption, you must grant the principals in your resource-based policy access to those KMS keys. You can do this by creating KMS grants. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html\">CreateGrant</a> in the <i>AWS Key Management Service API Reference</i> and <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/encryption-at-rest-Amazon-Service-Prometheus.html\">Encryption at rest</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> <p>For more information about working with IAM, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/security_iam_service-with-iam.html\">Using Amazon Managed Service for Prometheus with IAM</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p>",
+      "idempotent":true
+    },
     "PutRuleGroupsNamespace":{
       "name":"PutRuleGroupsNamespace",
       "http":{
@@ -424,7 +697,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Updates an existing rule groups namespace within a workspace. A rule groups namespace is associated with exactly one rules file. A workspace can have multiple rule groups namespaces.</p> <p>Use this operation only to update existing rule groups namespaces. To create a new rule groups namespace, use <code>CreateRuleGroupsNamespace</code>.</p> <p>You can't use this operation to add tags to an existing rule groups namespace. Instead, use <code>TagResource</code>.</p>",
+      "documentation":"<p>Updates an existing rule groups namespace within a workspace. A rule groups namespace is associated with exactly one rules file. A workspace can have multiple rule groups namespaces.</p> <important> <p>The combined length of a rule group namespace and a rule group name cannot exceed 721 UTF-8 bytes.</p> </important> <p>Use this operation only to update existing rule groups namespaces. To create a new rule groups namespace, use <code>CreateRuleGroupsNamespace</code>.</p> <p>You can't use this operation to add tags to an existing rule groups namespace. Instead, use <code>TagResource</code>.</p>",
       "idempotent":true
     },
     "TagResource":{
@@ -480,7 +753,26 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Updates the log group ARN or the workspace ID of the current logging configuration.</p>",
+      "documentation":"<p>Updates the log group ARN or the workspace ID of the current rules and alerting logging configuration.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>",
+      "idempotent":true
+    },
+    "UpdateQueryLoggingConfiguration":{
+      "name":"UpdateQueryLoggingConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/workspaces/{workspaceId}/logging/query",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateQueryLoggingConfigurationRequest"},
+      "output":{"shape":"UpdateQueryLoggingConfigurationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates the query logging configuration for the specified workspace.</p>",
       "idempotent":true
     },
     "UpdateScraper":{
@@ -504,6 +796,25 @@
       "documentation":"<p>Updates an existing scraper.</p> <p>You can't use this function to update the source from which the scraper is collecting metrics. To change the source, delete the scraper and create a new one.</p>",
       "idempotent":true
     },
+    "UpdateScraperLoggingConfiguration":{
+      "name":"UpdateScraperLoggingConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/scrapers/{scraperId}/logging-configuration",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateScraperLoggingConfigurationRequest"},
+      "output":{"shape":"UpdateScraperLoggingConfigurationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates the logging configuration for a Amazon Managed Service for Prometheus scraper.</p>",
+      "idempotent":true
+    },
     "UpdateWorkspaceAlias":{
       "name":"UpdateWorkspaceAlias",
       "http":{
@@ -523,6 +834,27 @@
       ],
       "documentation":"<p>Updates the alias of an existing workspace. </p>",
       "idempotent":true
+    },
+    "UpdateWorkspaceConfiguration":{
+      "name":"UpdateWorkspaceConfiguration",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/workspaces/{workspaceId}/configuration",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateWorkspaceConfigurationRequest"},
+      "output":{"shape":"UpdateWorkspaceConfigurationResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Use this operation to create or update the label sets, label set limits, and retention period of a workspace.</p> <p>You must specify at least one of <code>limitsPerLabelSet</code> or <code>retentionPeriodInDays</code> for the request to be valid.</p>",
+      "idempotent":true
     }
   },
   "shapes":{
@@ -549,27 +881,27 @@
     "AlertManagerDefinitionDescription":{
       "type":"structure",
       "required":[
-        "createdAt",
+        "status",
         "data",
-        "modifiedAt",
-        "status"
+        "createdAt",
+        "modifiedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the alert manager definition was created.</p>"
+        "status":{
+          "shape":"AlertManagerDefinitionStatus",
+          "documentation":"<p>A structure that displays the current status of the alert manager definition..</p>"
         },
         "data":{
           "shape":"AlertManagerDefinitionData",
           "documentation":"<p>The actual alert manager definition.</p> <p>For details about the alert manager definition, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html\">AlertManagedDefinitionData</a>.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the alert manager definition was created.</p>"
+        },
         "modifiedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the alert manager definition was most recently changed.</p>"
-        },
-        "status":{
-          "shape":"AlertManagerDefinitionStatus",
-          "documentation":"<p>A structure that displays the current status of the alert manager definition..</p>"
         }
       },
       "documentation":"<p>The details of an alert manager definition. It is the configuration for the alert manager, including information about receivers for routing alerts.</p>"
@@ -612,11 +944,215 @@
       },
       "documentation":"<p>The <code>AmpConfiguration</code> structure defines the Amazon Managed Service for Prometheus instance a scraper should send metrics to.</p>"
     },
+    "AnomalyDetectorAlias":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9A-Za-z][-.0-9A-Z_a-z]*"
+    },
+    "AnomalyDetectorArn":{
+      "type":"string",
+      "pattern":"arn:aws[-a-z]*:aps:[-a-z0-9]+:[0-9]{12}:anomalydetector/ws-.+/ad-.+"
+    },
+    "AnomalyDetectorConfiguration":{
+      "type":"structure",
+      "members":{
+        "randomCutForest":{
+          "shape":"RandomCutForestConfiguration",
+          "documentation":"<p>The Random Cut Forest algorithm configuration for anomaly detection.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the anomaly detection algorithm.</p>",
+      "union":true
+    },
+    "AnomalyDetectorDescription":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "anomalyDetectorId",
+        "alias",
+        "status",
+        "createdAt",
+        "modifiedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"AnomalyDetectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
+        },
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The unique identifier of the anomaly detector.</p>"
+        },
+        "alias":{
+          "shape":"AnomalyDetectorAlias",
+          "documentation":"<p>The user-friendly name of the anomaly detector.</p>"
+        },
+        "evaluationIntervalInSeconds":{
+          "shape":"AnomalyDetectorEvaluationInterval",
+          "documentation":"<p>The frequency, in seconds, at which the anomaly detector evaluates metrics.</p>"
+        },
+        "missingDataAction":{
+          "shape":"AnomalyDetectorMissingDataAction",
+          "documentation":"<p>The action taken when data is missing during evaluation.</p>"
+        },
+        "configuration":{
+          "shape":"AnomalyDetectorConfiguration",
+          "documentation":"<p>The algorithm configuration of the anomaly detector.</p>"
+        },
+        "labels":{
+          "shape":"PrometheusMetricLabelMap",
+          "documentation":"<p>The Amazon Managed Service for Prometheus metric labels associated with the anomaly detector.</p>"
+        },
+        "status":{
+          "shape":"AnomalyDetectorStatus",
+          "documentation":"<p>The current status of the anomaly detector.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the anomaly detector was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the anomaly detector was last modified.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags applied to the anomaly detector.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about an anomaly detector.</p>"
+    },
+    "AnomalyDetectorEvaluationInterval":{
+      "type":"integer",
+      "box":true,
+      "max":86400,
+      "min":30
+    },
+    "AnomalyDetectorId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"ad-[0-9A-Za-z][-.0-9A-Z_a-z]*"
+    },
+    "AnomalyDetectorMissingDataAction":{
+      "type":"structure",
+      "members":{
+        "markAsAnomaly":{
+          "shape":"Boolean",
+          "documentation":"<p>Marks missing data points as anomalies.</p>"
+        },
+        "skip":{
+          "shape":"Boolean",
+          "documentation":"<p>Skips evaluation when data is missing.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the action to take when data is missing during anomaly detection evaluation.</p>",
+      "union":true
+    },
+    "AnomalyDetectorStatus":{
+      "type":"structure",
+      "required":["statusCode"],
+      "members":{
+        "statusCode":{
+          "shape":"AnomalyDetectorStatusCode",
+          "documentation":"<p>The status code of the anomaly detector.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>A description of the current status of the anomaly detector.</p>"
+        }
+      },
+      "documentation":"<p>The status information of an anomaly detector.</p>"
+    },
+    "AnomalyDetectorStatusCode":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "UPDATING",
+        "DELETING",
+        "CREATION_FAILED",
+        "UPDATE_FAILED",
+        "DELETION_FAILED"
+      ]
+    },
+    "AnomalyDetectorSummary":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "anomalyDetectorId",
+        "alias",
+        "status",
+        "createdAt",
+        "modifiedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"AnomalyDetectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
+        },
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The unique identifier of the anomaly detector.</p>"
+        },
+        "alias":{
+          "shape":"AnomalyDetectorAlias",
+          "documentation":"<p>The user-friendly name of the anomaly detector.</p>"
+        },
+        "status":{
+          "shape":"AnomalyDetectorStatus",
+          "documentation":"<p>The current status of the anomaly detector.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the anomaly detector was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the anomaly detector was last modified.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags applied to the anomaly detector.</p>"
+        }
+      },
+      "documentation":"<p>Summary information about an anomaly detector for list operations.</p>"
+    },
+    "AnomalyDetectorSummaryList":{
+      "type":"list",
+      "member":{"shape":"AnomalyDetectorSummary"}
+    },
     "Blob":{"type":"blob"},
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CloudWatchLogDestination":{
+      "type":"structure",
+      "required":["logGroupArn"],
+      "members":{
+        "logGroupArn":{
+          "shape":"LogGroupArn",
+          "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published. This log group must exist prior to calling this operation.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for logging to CloudWatch Logs.</p>"
+    },
     "ClusterArn":{
       "type":"string",
       "documentation":"<p>The ARN of an EKS cluster.</p>",
-      "pattern":"^arn:aws[-a-z]*:eks:[-a-z0-9]+:[0-9]{12}:cluster/.+$"
+      "pattern":"arn:aws[-a-z]*:eks:[-a-z0-9]+:[0-9]{12}:cluster/.+"
+    },
+    "ComponentConfig":{
+      "type":"structure",
+      "members":{
+        "options":{
+          "shape":"StringMap",
+          "documentation":"<p>Configuration options for the scraper component.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for a scraper component.</p>"
     },
     "ConflictException":{
       "type":"structure",
@@ -649,24 +1185,24 @@
     "CreateAlertManagerDefinitionRequest":{
       "type":"structure",
       "required":[
-        "data",
-        "workspaceId"
+        "workspaceId",
+        "data"
       ],
       "members":{
-        "clientToken":{
-          "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
-          "idempotencyToken":true
-        },
-        "data":{
-          "shape":"AlertManagerDefinitionData",
-          "documentation":"<p>The alert manager definition to add. A base64-encoded version of the YAML alert manager definition file.</p> <p>For details about the alert manager definition, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html\">AlertManagedDefinitionData</a>.</p>"
-        },
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace to add the alert manager definition to.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "data":{
+          "shape":"AlertManagerDefinitionData",
+          "documentation":"<p>The alert manager definition to add. A base64-encoded version of the YAML alert manager definition file.</p> <p>For details about the alert manager definition, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html\">AlertManagedDefinitionData</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       },
       "documentation":"<p>Represents the input of a <code>CreateAlertManagerDefinition</code> operation.</p>"
@@ -682,27 +1218,105 @@
       },
       "documentation":"<p>Represents the output of a <code>CreateAlertManagerDefinition</code> operation.</p>"
     },
-    "CreateLoggingConfigurationRequest":{
+    "CreateAnomalyDetectorRequest":{
       "type":"structure",
       "required":[
-        "logGroupArn",
-        "workspaceId"
+        "workspaceId",
+        "alias",
+        "configuration"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The identifier of the workspace where the anomaly detector will be created.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "alias":{
+          "shape":"AnomalyDetectorAlias",
+          "documentation":"<p>A user-friendly name for the anomaly detector.</p>"
+        },
+        "evaluationIntervalInSeconds":{
+          "shape":"AnomalyDetectorEvaluationInterval",
+          "documentation":"<p>The frequency, in seconds, at which the anomaly detector evaluates metrics. The default value is 60 seconds.</p>"
+        },
+        "missingDataAction":{
+          "shape":"AnomalyDetectorMissingDataAction",
+          "documentation":"<p>Specifies the action to take when data is missing during evaluation.</p>"
+        },
+        "configuration":{
+          "shape":"AnomalyDetectorConfiguration",
+          "documentation":"<p>The algorithm configuration for the anomaly detector.</p>"
+        },
+        "labels":{
+          "shape":"CreateAnomalyDetectorRequestLabelsMap",
+          "documentation":"<p>The Amazon Managed Service for Prometheus metric labels to associate with the anomaly detector.</p>"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
           "idempotencyToken":true
         },
-        "logGroupArn":{
-          "shape":"LogGroupArn",
-          "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published. This log group must exist prior to calling this operation.</p>"
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The metadata to apply to the anomaly detector to assist with categorization and organization.</p>"
+        }
+      }
+    },
+    "CreateAnomalyDetectorRequestLabelsMap":{
+      "type":"map",
+      "key":{"shape":"PrometheusMetricLabelKey"},
+      "value":{"shape":"PrometheusMetricLabelValue"},
+      "max":140,
+      "min":0
+    },
+    "CreateAnomalyDetectorResponse":{
+      "type":"structure",
+      "required":[
+        "anomalyDetectorId",
+        "arn",
+        "status"
+      ],
+      "members":{
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The unique identifier of the created anomaly detector.</p>"
         },
+        "arn":{
+          "shape":"AnomalyDetectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created anomaly detector.</p>"
+        },
+        "status":{
+          "shape":"AnomalyDetectorStatus",
+          "documentation":"<p>The status information of the created anomaly detector.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags applied to the created anomaly detector.</p>"
+        }
+      }
+    },
+    "CreateLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "logGroupArn"
+      ],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace to create the logging configuration for.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "logGroupArn":{
+          "shape":"LogGroupArn",
+          "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published. This log group must exist prior to calling this operation.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       },
       "documentation":"<p>Represents the input of a <code>CreateLoggingConfiguration</code> operation.</p>"
@@ -718,36 +1332,70 @@
       },
       "documentation":"<p>Represents the output of a <code>CreateLoggingConfiguration</code> operation.</p>"
     },
-    "CreateRuleGroupsNamespaceRequest":{
+    "CreateQueryLoggingConfigurationRequest":{
       "type":"structure",
       "required":[
-        "data",
-        "name",
-        "workspaceId"
+        "workspaceId",
+        "destinations"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace for which to create the query logging configuration.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "destinations":{
+          "shape":"LoggingDestinations",
+          "documentation":"<p>The destinations where query logs will be sent. Only CloudWatch Logs destination is supported. The list must contain exactly one element.</p>"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
           "idempotencyToken":true
+        }
+      }
+    },
+    "CreateQueryLoggingConfigurationResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"QueryLoggingConfigurationStatus",
+          "documentation":"<p>The current status of the query logging configuration.</p>"
+        }
+      }
+    },
+    "CreateRuleGroupsNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "name",
+        "data"
+      ],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to add the rule groups namespace.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "name":{
+          "shape":"RuleGroupsNamespaceName",
+          "documentation":"<p>The name for the new rule groups namespace.</p>"
         },
         "data":{
           "shape":"RuleGroupsNamespaceData",
           "documentation":"<p>The rules file to use in the new namespace.</p> <p>Contains the base64-encoded version of the YAML rules file.</p> <p>For details about the rule groups namespace structure, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html\">RuleGroupsNamespaceData</a>.</p>"
         },
-        "name":{
-          "shape":"RuleGroupsNamespaceName",
-          "documentation":"<p>The name for the new rule groups namespace.</p>"
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values to associate with the rule groups namespace.</p>"
-        },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace to add the rule groups namespace.</p>",
-          "location":"uri",
-          "locationName":"workspaceId"
         }
       },
       "documentation":"<p>Represents the input of a <code>CreateRuleGroupsNamespace</code> operation.</p>"
@@ -755,19 +1403,19 @@
     "CreateRuleGroupsNamespaceResponse":{
       "type":"structure",
       "required":[
-        "arn",
         "name",
+        "arn",
         "status"
       ],
       "members":{
-        "arn":{
-          "shape":"RuleGroupsNamespaceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the new rule groups namespace.</p>"
-        },
         "name":{
           "shape":"RuleGroupsNamespaceName",
           "documentation":"<p>The name of the new rule groups namespace.</p>"
         },
+        "arn":{
+          "shape":"RuleGroupsNamespaceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the new rule groups namespace.</p>"
+        },
         "status":{
           "shape":"RuleGroupsNamespaceStatus",
           "documentation":"<p>A structure that returns the current status of the rule groups namespace.</p>"
@@ -782,31 +1430,35 @@
     "CreateScraperRequest":{
       "type":"structure",
       "required":[
-        "destination",
         "scrapeConfiguration",
-        "source"
+        "source",
+        "destination"
       ],
       "members":{
         "alias":{
           "shape":"ScraperAlias",
           "documentation":"<p>(optional) An alias to associate with the scraper. This is for your use, and does not need to be unique.</p>"
         },
-        "clientToken":{
-          "shape":"IdempotencyToken",
-          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "destination":{
-          "shape":"Destination",
-          "documentation":"<p>The Amazon Managed Service for Prometheus workspace to send metrics to.</p>"
-        },
         "scrapeConfiguration":{
           "shape":"ScrapeConfiguration",
           "documentation":"<p>The configuration file to use in the new scraper. For more information, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration\">Scraper configuration</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p>"
         },
         "source":{
           "shape":"Source",
-          "documentation":"<p>The Amazon EKS cluster from which the scraper will collect metrics.</p>"
+          "documentation":"<p>The Amazon EKS or Amazon Web Services cluster from which the scraper will collect metrics.</p>"
+        },
+        "destination":{
+          "shape":"Destination",
+          "documentation":"<p>The Amazon Managed Service for Prometheus workspace to send metrics to.</p>"
+        },
+        "roleConfiguration":{
+          "shape":"RoleConfiguration",
+          "documentation":"<p>Use this structure to enable cross-account access, so that you can use a target account to access Prometheus metrics from source accounts.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
@@ -818,19 +1470,19 @@
     "CreateScraperResponse":{
       "type":"structure",
       "required":[
-        "arn",
         "scraperId",
+        "arn",
         "status"
       ],
       "members":{
-        "arn":{
-          "shape":"ScraperArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the new scraper.</p>"
-        },
         "scraperId":{
           "shape":"ScraperId",
           "documentation":"<p>The ID of the new scraper.</p>"
         },
+        "arn":{
+          "shape":"ScraperArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the new scraper.</p>"
+        },
         "status":{
           "shape":"ScraperStatus",
           "documentation":"<p>A structure that displays the current status of the scraper.</p>"
@@ -854,13 +1506,13 @@
           "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
           "idempotencyToken":true
         },
-        "kmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>(optional) The ARN for a customer managed KMS key to use for encrypting data within your workspace. For more information about using your own key in your workspace, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/encryption-at-rest-Amazon-Service-Prometheus.html\">Encryption at rest</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p>"
-        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values to associate with the workspace.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>(optional) The ARN for a customer managed KMS key to use for encrypting data within your workspace. For more information about using your own key in your workspace, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/encryption-at-rest-Amazon-Service-Prometheus.html\">Encryption at rest</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Represents the input of a <code>CreateWorkspace</code> operation.</p>"
@@ -868,19 +1520,19 @@
     "CreateWorkspaceResponse":{
       "type":"structure",
       "required":[
+        "workspaceId",
         "arn",
-        "status",
-        "workspaceId"
+        "status"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The unique ID for the new workspace.</p>"
+        },
         "arn":{
           "shape":"WorkspaceArn",
           "documentation":"<p>The ARN for the new workspace.</p>"
         },
-        "kmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
-        },
         "status":{
           "shape":"WorkspaceStatus",
           "documentation":"<p>The current status of the new workspace. Immediately after you create the workspace, the status is usually <code>CREATING</code>.</p>"
@@ -889,9 +1541,9 @@
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values that are associated with the workspace.</p>"
         },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The unique ID for the new workspace.</p>"
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
         }
       },
       "documentation":"<p>Represents the output of a <code>CreateWorkspace</code> operation.</p>"
@@ -900,87 +1552,178 @@
       "type":"structure",
       "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to delete the alert manager definition from.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"clientToken"
-        },
+        }
+      },
+      "documentation":"<p>Represents the input of a <code>DeleteAlertManagerDefinition</code> operation.</p>"
+    },
+    "DeleteAnomalyDetectorRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "anomalyDetectorId"
+      ],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace to delete the alert manager definition from.</p>",
+          "documentation":"<p>The identifier of the workspace containing the anomaly detector to delete.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The identifier of the anomaly detector to delete.</p>",
+          "location":"uri",
+          "locationName":"anomalyDetectorId"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
-      },
-      "documentation":"<p>Represents the input of a <code>DeleteAlertManagerDefinition</code> operation.</p>"
+      }
     },
     "DeleteLoggingConfigurationRequest":{
       "type":"structure",
       "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace containing the logging configuration to delete.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"clientToken"
-        },
+        }
+      },
+      "documentation":"<p>Represents the input of a <code>DeleteLoggingConfiguration</code> operation.</p>"
+    },
+    "DeleteQueryLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace containing the logging configuration to delete.</p>",
+          "documentation":"<p>The ID of the workspace from which to delete the query logging configuration.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
-      },
-      "documentation":"<p>Represents the input of a <code>DeleteLoggingConfiguration</code> operation.</p>"
+      }
     },
-    "DeleteRuleGroupsNamespaceRequest":{
+    "DeleteResourcePolicyRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "workspaceId"
-      ],
+      "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace from which to delete the resource-based policy.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the request is safe to retry (idempotent).</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"clientToken"
         },
+        "revisionId":{
+          "shape":"String",
+          "documentation":"<p>The revision ID of the policy to delete. Use this parameter to ensure that you are deleting the correct version of the policy.</p>",
+          "location":"querystring",
+          "locationName":"revisionId"
+        }
+      }
+    },
+    "DeleteRuleGroupsNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "name"
+      ],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace containing the rule groups namespace and definition to delete.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "name":{
           "shape":"RuleGroupsNamespaceName",
           "documentation":"<p>The name of the rule groups namespace to delete.</p>",
           "location":"uri",
           "locationName":"name"
         },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace containing the rule groups namespace and definition to delete.</p>",
-          "location":"uri",
-          "locationName":"workspaceId"
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       },
       "documentation":"<p>Represents the input of a <code>DeleteRuleGroupsNamespace</code> operation.</p>"
     },
-    "DeleteScraperRequest":{
+    "DeleteScraperLoggingConfigurationRequest":{
       "type":"structure",
       "required":["scraperId"],
       "members":{
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper whose logging configuration will be deleted.</p>",
+          "location":"uri",
+          "locationName":"scraperId"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
-          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the request is processed exactly once.</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"clientToken"
-        },
+        }
+      }
+    },
+    "DeleteScraperRequest":{
+      "type":"structure",
+      "required":["scraperId"],
+      "members":{
         "scraperId":{
           "shape":"ScraperId",
           "documentation":"<p>The ID of the scraper to delete.</p>",
           "location":"uri",
           "locationName":"scraperId"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       },
       "documentation":"<p>Represents the input of a <code>DeleteScraper</code> operation.</p>"
@@ -1007,18 +1750,18 @@
       "type":"structure",
       "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to delete.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"clientToken"
-        },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace to delete.</p>",
-          "location":"uri",
-          "locationName":"workspaceId"
         }
       },
       "documentation":"<p>Represents the input of a <code>DeleteWorkspace</code> operation.</p>"
@@ -1047,6 +1790,37 @@
       },
       "documentation":"<p>Represents the output of a <code>DescribeAlertManagerDefinition</code> operation.</p>"
     },
+    "DescribeAnomalyDetectorRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "anomalyDetectorId"
+      ],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The identifier of the workspace containing the anomaly detector.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The identifier of the anomaly detector to describe.</p>",
+          "location":"uri",
+          "locationName":"anomalyDetectorId"
+        }
+      }
+    },
+    "DescribeAnomalyDetectorResponse":{
+      "type":"structure",
+      "required":["anomalyDetector"],
+      "members":{
+        "anomalyDetector":{
+          "shape":"AnomalyDetectorDescription",
+          "documentation":"<p>The detailed information about the anomaly detector.</p>"
+        }
+      }
+    },
     "DescribeLoggingConfigurationRequest":{
       "type":"structure",
       "required":["workspaceId"],
@@ -1071,24 +1845,80 @@
       },
       "documentation":"<p>Represents the output of a <code>DescribeLoggingConfiguration</code> operation.</p>"
     },
-    "DescribeRuleGroupsNamespaceRequest":{
+    "DescribeQueryLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace for which to retrieve the query logging configuration.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        }
+      }
+    },
+    "DescribeQueryLoggingConfigurationResponse":{
+      "type":"structure",
+      "required":["queryLoggingConfiguration"],
+      "members":{
+        "queryLoggingConfiguration":{
+          "shape":"QueryLoggingConfigurationMetadata",
+          "documentation":"<p>The detailed information about the query logging configuration for the specified workspace.</p>"
+        }
+      }
+    },
+    "DescribeResourcePolicyRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to describe the resource-based policy for.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        }
+      }
+    },
+    "DescribeResourcePolicyResponse":{
       "type":"structure",
       "required":[
-        "name",
-        "workspaceId"
+        "policyDocument",
+        "policyStatus",
+        "revisionId"
       ],
       "members":{
-        "name":{
-          "shape":"RuleGroupsNamespaceName",
-          "documentation":"<p>The name of the rule groups namespace that you want information for.</p>",
-          "location":"uri",
-          "locationName":"name"
+        "policyDocument":{
+          "shape":"String",
+          "documentation":"<p>The JSON policy document for the resource-based policy attached to the workspace.</p>"
+        },
+        "policyStatus":{
+          "shape":"WorkspacePolicyStatusCode",
+          "documentation":"<p>The current status of the resource-based policy.</p>"
         },
+        "revisionId":{
+          "shape":"String",
+          "documentation":"<p>The revision ID of the current resource-based policy.</p>"
+        }
+      }
+    },
+    "DescribeRuleGroupsNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "name"
+      ],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace containing the rule groups namespace.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "name":{
+          "shape":"RuleGroupsNamespaceName",
+          "documentation":"<p>The name of the rule groups namespace that you want information for.</p>",
+          "location":"uri",
+          "locationName":"name"
         }
       },
       "documentation":"<p>Represents the input of a <code>DescribeRuleGroupsNamespace</code> operation.</p>"
@@ -1104,6 +1934,50 @@
       },
       "documentation":"<p>Represents the output of a <code>DescribeRuleGroupsNamespace</code> operation.</p>"
     },
+    "DescribeScraperLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":["scraperId"],
+      "members":{
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper whose logging configuration will be described.</p>",
+          "location":"uri",
+          "locationName":"scraperId"
+        }
+      }
+    },
+    "DescribeScraperLoggingConfigurationResponse":{
+      "type":"structure",
+      "required":[
+        "status",
+        "scraperId",
+        "loggingDestination",
+        "scraperComponents",
+        "modifiedAt"
+      ],
+      "members":{
+        "status":{
+          "shape":"ScraperLoggingConfigurationStatus",
+          "documentation":"<p>The status of the scraper logging configuration.</p>"
+        },
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper.</p>"
+        },
+        "loggingDestination":{
+          "shape":"ScraperLoggingDestination",
+          "documentation":"<p>The destination where scraper logs are sent.</p>"
+        },
+        "scraperComponents":{
+          "shape":"ScraperComponents",
+          "documentation":"<p>The list of scraper components configured for logging.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the logging configuration was last modified.</p>"
+        }
+      }
+    },
     "DescribeScraperRequest":{
       "type":"structure",
       "required":["scraperId"],
@@ -1128,6 +2002,28 @@
       },
       "documentation":"<p>Represents the output of a <code>DescribeScraper</code> operation.</p>"
     },
+    "DescribeWorkspaceConfigurationRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace that you want to retrieve information for. To find the IDs of your workspaces, use the <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListWorkspaces.htm\">ListWorkspaces</a> operation.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        }
+      }
+    },
+    "DescribeWorkspaceConfigurationResponse":{
+      "type":"structure",
+      "required":["workspaceConfiguration"],
+      "members":{
+        "workspaceConfiguration":{
+          "shape":"WorkspaceConfigurationDescription",
+          "documentation":"<p>This structure contains the information about the workspace configuration.</p>"
+        }
+      }
+    },
     "DescribeWorkspaceRequest":{
       "type":"structure",
       "required":["workspaceId"],
@@ -1206,8 +2102,7 @@
     },
     "GetDefaultScraperConfigurationRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the input of a <code>GetDefaultScraperConfiguration</code> operation.</p>"
     },
     "GetDefaultScraperConfigurationResponse":{
@@ -1223,14 +2118,40 @@
     },
     "IamRoleArn":{
       "type":"string",
-      "documentation":"<p>An ARN identifying an IAM role used by the scraper.</p>"
+      "documentation":"<p>An ARN identifying an IAM role used by the scraper.</p>",
+      "pattern":"arn:aws[-a-z]*:iam::[0-9]{12}:role/.+"
     },
     "IdempotencyToken":{
       "type":"string",
       "documentation":"<p>An identifier used to ensure the idempotency of a write request.</p>",
       "max":64,
       "min":1,
-      "pattern":"^[!-~]+$"
+      "pattern":"[!-~]+"
+    },
+    "IgnoreNearExpected":{
+      "type":"structure",
+      "members":{
+        "amount":{
+          "shape":"IgnoreNearExpectedAmountDouble",
+          "documentation":"<p>The absolute amount by which values can differ from expected values before being considered anomalous.</p>"
+        },
+        "ratio":{
+          "shape":"IgnoreNearExpectedRatioDouble",
+          "documentation":"<p>The ratio by which values can differ from expected values before being considered anomalous.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for threshold settings that determine when values near expected values should be ignored during anomaly detection.</p>",
+      "union":true
+    },
+    "IgnoreNearExpectedAmountDouble":{
+      "type":"double",
+      "box":true,
+      "min":0
+    },
+    "IgnoreNearExpectedRatioDouble":{
+      "type":"double",
+      "box":true,
+      "min":0
     },
     "Integer":{
       "type":"integer",
@@ -1262,18 +2183,119 @@
       "documentation":"<p>A KMS Key ARN.</p>",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws:kms:[a-z0-9\\-]+:\\d+:key/[a-f0-9\\-]+$"
+      "pattern":"arn:aws[-a-z]*:kms:[-a-z0-9]+:[0-9]{12}:key/[-a-f0-9]+"
     },
-    "ListRuleGroupsNamespacesRequest":{
+    "LabelName":{
+      "type":"string",
+      "min":1,
+      "pattern":"[a-zA-Z_][a-zA-Z0-9_]*"
+    },
+    "LabelSet":{
+      "type":"map",
+      "key":{"shape":"LabelName"},
+      "value":{"shape":"LabelValue"}
+    },
+    "LabelValue":{
+      "type":"string",
+      "min":1
+    },
+    "LimitsPerLabelSet":{
+      "type":"structure",
+      "required":[
+        "limits",
+        "labelSet"
+      ],
+      "members":{
+        "limits":{
+          "shape":"LimitsPerLabelSetEntry",
+          "documentation":"<p>This structure contains the information about the limits that apply to time series that match this label set.</p>"
+        },
+        "labelSet":{
+          "shape":"LabelSet",
+          "documentation":"<p>This defines one label set that will have an enforced active time series limit. </p> <p>Label values accept ASCII characters and must contain at least one character that isn't whitespace. ASCII control characters are not accepted. If the label name is metric name label <code>__<i>name</i>__</code>, then the <i>metric</i> part of the name must conform to the following pattern: <code>[a-zA-Z_:][a-zA-Z0-9_:]*</code> </p>"
+        }
+      },
+      "documentation":"<p>This structure defines one label set used to enforce active time series limits for the workspace, and defines the limit for that label set.</p> <p>A label set is a unique combination of label-value pairs. Use them to control time series limits and to monitor usage by specific label groups. Example label sets might be <code>team:finance</code> or <code>env:prod</code> </p>"
+    },
+    "LimitsPerLabelSetEntry":{
+      "type":"structure",
+      "members":{
+        "maxSeries":{
+          "shape":"LimitsPerLabelSetEntryMaxSeriesLong",
+          "documentation":"<p>The maximum number of active series that can be ingested that match this label set. </p> <p>Setting this to 0 causes no label set limit to be enforced, but it does cause Amazon Managed Service for Prometheus to vend label set metrics to CloudWatch</p>"
+        }
+      },
+      "documentation":"<p>This structure contains the information about the limits that apply to time series that match one label set.</p>"
+    },
+    "LimitsPerLabelSetEntryMaxSeriesLong":{
+      "type":"long",
+      "box":true,
+      "min":0
+    },
+    "LimitsPerLabelSetList":{
+      "type":"list",
+      "member":{"shape":"LimitsPerLabelSet"}
+    },
+    "ListAnomalyDetectorsRequest":{
       "type":"structure",
       "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The identifier of the workspace containing the anomaly detectors to list.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "alias":{
+          "shape":"AnomalyDetectorAlias",
+          "documentation":"<p>Filters the results to anomaly detectors with the specified alias.</p>",
+          "location":"querystring",
+          "locationName":"alias"
+        },
         "maxResults":{
-          "shape":"ListRuleGroupsNamespacesRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return. The default is 100.</p>",
+          "shape":"ListAnomalyDetectorsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in a single call. Valid range is 1 to 1000.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token to continue retrieving results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListAnomalyDetectorsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListAnomalyDetectorsResponse":{
+      "type":"structure",
+      "required":["anomalyDetectors"],
+      "members":{
+        "anomalyDetectors":{
+          "shape":"AnomalyDetectorSummaryList",
+          "documentation":"<p>The list of anomaly detectors in the workspace.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListRuleGroupsNamespacesRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace containing the rule groups namespaces.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "name":{
           "shape":"RuleGroupsNamespaceName",
           "documentation":"<p>Use this parameter to filter the rule groups namespaces that are returned. Only the namespaces with names that begin with the value that you specify are returned.</p>",
@@ -1286,11 +2308,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace containing the rule groups namespaces.</p>",
-          "location":"uri",
-          "locationName":"workspaceId"
+        "maxResults":{
+          "shape":"ListRuleGroupsNamespacesRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return. The default is 100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       },
       "documentation":"<p>Represents the input of a <code>ListRuleGroupsNamespaces</code> operation.</p>"
@@ -1305,13 +2327,13 @@
       "type":"structure",
       "required":["ruleGroupsNamespaces"],
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListRuleGroupsNamespaces</code> request to retrieve those results.</p>"
-        },
         "ruleGroupsNamespaces":{
           "shape":"RuleGroupsNamespaceSummaryList",
           "documentation":"<p>The returned list of rule groups namespaces.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListRuleGroupsNamespaces</code> request to retrieve those results.</p>"
         }
       },
       "documentation":"<p>Represents the output of a <code>ListRuleGroupsNamespaces</code> operation.</p>"
@@ -1324,17 +2346,17 @@
           "documentation":"<p>(Optional) A list of key-value pairs to filter the list of scrapers returned. Keys include <code>status</code>, <code>sourceArn</code>, <code>destinationArn</code>, and <code>alias</code>.</p> <p>Filters on the same key are <code>OR</code>'d together, and filters on different keys are <code>AND</code>'d together. For example, <code>status=ACTIVE&amp;status=CREATING&amp;alias=Test</code>, will return all scrapers that have the alias Test, and are either in status ACTIVE or CREATING.</p> <p>To find all active scrapers that are sending metrics to a specific Amazon Managed Service for Prometheus workspace, you would use the ARN of the workspace in a query:</p> <p> <code>status=ACTIVE&amp;destinationArn=arn:aws:aps:us-east-1:123456789012:workspace/ws-example1-1234-abcd-56ef-123456789012</code> </p> <p>If this is included, it filters the results to only the scrapers that match the filter.</p>",
           "location":"querystring"
         },
-        "maxResults":{
-          "shape":"ListScrapersRequestMaxResultsInteger",
-          "documentation":"<p>Optional) The maximum number of scrapers to return in one <code>ListScrapers</code> operation. The range is 1-1000.</p> <p>If you omit this parameter, the default of 100 is used.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>(Optional) The token for the next set of items to return. (You received this token from a previous call.)</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListScrapersRequestMaxResultsInteger",
+          "documentation":"<p>Optional) The maximum number of scrapers to return in one <code>ListScrapers</code> operation. The range is 1-1000.</p> <p>If you omit this parameter, the default of 100 is used.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       },
       "documentation":"<p>Represents the input of a <code>ListScrapers</code> operation.</p>"
@@ -1349,13 +2371,13 @@
       "type":"structure",
       "required":["scrapers"],
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListScrapers</code> operation to retrieve those results.</p>"
-        },
         "scrapers":{
           "shape":"ScraperSummaryList",
           "documentation":"<p>A list of <code>ScraperSummary</code> structures giving information about scrapers in the account that match the filters provided.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListScrapers</code> operation to retrieve those results.</p>"
         }
       },
       "documentation":"<p>Represents the output of a <code>ListScrapers</code> operation.</p>"
@@ -1384,6 +2406,12 @@
     "ListWorkspacesRequest":{
       "type":"structure",
       "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of items to return. You receive this token from a previous call, and use it to get the next page of results. The other parameters must be the same as the initial call.</p> <p>For example, if your initial request has <code>maxResults</code> of 10, and there are 12 workspaces to return, then your initial request will return 10 and a <code>nextToken</code>. Using the next token in a subsequent call will return the remaining 2 workspaces.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
         "alias":{
           "shape":"WorkspaceAlias",
           "documentation":"<p>If this is included, it filters the results to only the workspaces with names that start with the value that you specify here.</p> <p>Amazon Managed Service for Prometheus will automatically strip any blank spaces from the beginning and end of the alias that you specify.</p>",
@@ -1395,12 +2423,6 @@
           "documentation":"<p>The maximum number of workspaces to return per request. The default is 100.</p>",
           "location":"querystring",
           "locationName":"maxResults"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next set of items to return. You receive this token from a previous call, and use it to get the next page of results. The other parameters must be the same as the initial call.</p> <p>For example, if your initial request has <code>maxResults</code> of 10, and there are 12 workspaces to return, then your initial request will return 10 and a <code>nextToken</code>. Using the next token in a subsequent call will return the remaining 2 workspaces.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
         }
       },
       "documentation":"<p>Represents the input of a <code>ListWorkspaces</code> operation.</p>"
@@ -1415,53 +2437,53 @@
       "type":"structure",
       "required":["workspaces"],
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListWorkspaces</code> request to retrieve those results.</p>"
-        },
         "workspaces":{
           "shape":"WorkspaceSummaryList",
           "documentation":"<p>An array of <code>WorkspaceSummary</code> structures containing information about the workspaces requested.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A token indicating that there are more results to retrieve. You can use this token as part of your next <code>ListWorkspaces</code> request to retrieve those results.</p>"
         }
       },
       "documentation":"<p>Represents the output of a <code>ListWorkspaces</code> operation.</p>"
     },
     "LogGroupArn":{
       "type":"string",
-      "pattern":"^arn:aws[a-z0-9-]*:logs:[a-z0-9-]+:\\d{12}:log-group:[A-Za-z0-9\\.\\-\\_\\#/]{1,512}\\:\\*$"
+      "pattern":"arn:aws[a-z0-9-]*:logs:[a-z0-9-]+:[0-9]{12}:log-group:[A-Za-z0-9\\.\\-\\_\\#/]{1,512}\\:\\*"
     },
     "LoggingConfigurationMetadata":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "logGroupArn",
-        "modifiedAt",
         "status",
-        "workspace"
+        "workspace",
+        "logGroupArn",
+        "createdAt",
+        "modifiedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the logging configuration was created.</p>"
+        "status":{
+          "shape":"LoggingConfigurationStatus",
+          "documentation":"<p>The current status of the logging configuration.</p>"
+        },
+        "workspace":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace the logging configuration is for.</p>"
         },
         "logGroupArn":{
           "shape":"LogGroupArn",
           "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the logging configuration was created.</p>"
+        },
         "modifiedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the logging configuration was most recently changed.</p>"
-        },
-        "status":{
-          "shape":"LoggingConfigurationStatus",
-          "documentation":"<p>The current status of the logging configuration.</p>"
-        },
-        "workspace":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace the logging configuration is for.</p>"
         }
       },
-      "documentation":"<p>Contains information about the logging configuration for the workspace.</p>"
+      "documentation":"<p>Contains information about the current rules and alerting logging configuration for the workspace.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>"
     },
     "LoggingConfigurationStatus":{
       "type":"structure",
@@ -1469,7 +2491,7 @@
       "members":{
         "statusCode":{
           "shape":"LoggingConfigurationStatusCode",
-          "documentation":"<p>The current status of the logging configuration.</p>"
+          "documentation":"<p>The current status of the current rules and alerting logging configuration.</p> <note> <p>These logging configurations are only for rules and alerting logs.</p> </note>"
         },
         "statusReason":{
           "shape":"String",
@@ -1490,33 +2512,90 @@
         "UPDATE_FAILED"
       ]
     },
+    "LoggingDestination":{
+      "type":"structure",
+      "required":[
+        "cloudWatchLogs",
+        "filters"
+      ],
+      "members":{
+        "cloudWatchLogs":{
+          "shape":"CloudWatchLogDestination",
+          "documentation":"<p>Configuration details for logging to CloudWatch Logs.</p>"
+        },
+        "filters":{
+          "shape":"LoggingFilter",
+          "documentation":"<p>Filtering criteria that determine which queries are logged.</p>"
+        }
+      },
+      "documentation":"<p>Defines a destination and its associated filtering criteria for query logging.</p>"
+    },
+    "LoggingDestinations":{
+      "type":"list",
+      "member":{"shape":"LoggingDestination"},
+      "documentation":"<p>A list structure that contains a single CloudWatch Logs destination.</p>",
+      "max":1,
+      "min":1
+    },
+    "LoggingFilter":{
+      "type":"structure",
+      "required":["qspThreshold"],
+      "members":{
+        "qspThreshold":{
+          "shape":"LoggingFilterQspThresholdLong",
+          "documentation":"<p>The Query Samples Processed (QSP) threshold above which queries will be logged. Queries processing more samples than this threshold will be captured in logs.</p>"
+        }
+      },
+      "documentation":"<p>Filtering criteria that determine which queries are logged.</p>"
+    },
+    "LoggingFilterQspThresholdLong":{
+      "type":"long",
+      "box":true,
+      "min":0
+    },
     "PaginationToken":{
       "type":"string",
       "documentation":"<p>A token used to access the next page in a paginated result set.</p>",
       "max":1000,
       "min":0
     },
+    "PrometheusMetricLabelKey":{
+      "type":"string",
+      "max":7168,
+      "min":1,
+      "pattern":"(?!__)[a-zA-Z_][a-zA-Z0-9_]*"
+    },
+    "PrometheusMetricLabelMap":{
+      "type":"map",
+      "key":{"shape":"PrometheusMetricLabelKey"},
+      "value":{"shape":"PrometheusMetricLabelValue"}
+    },
+    "PrometheusMetricLabelValue":{
+      "type":"string",
+      "max":7168,
+      "min":1
+    },
     "PutAlertManagerDefinitionRequest":{
       "type":"structure",
       "required":[
-        "data",
-        "workspaceId"
+        "workspaceId",
+        "data"
       ],
       "members":{
-        "clientToken":{
-          "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
-          "idempotencyToken":true
-        },
-        "data":{
-          "shape":"AlertManagerDefinitionData",
-          "documentation":"<p>The alert manager definition to use. A base64-encoded version of the YAML alert manager definition file.</p> <p>For details about the alert manager definition, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html\">AlertManagedDefinitionData</a>.</p>"
-        },
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace to update the alert manager definition in.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "data":{
+          "shape":"AlertManagerDefinitionData",
+          "documentation":"<p>The alert manager definition to use. A base64-encoded version of the YAML alert manager definition file.</p> <p>For details about the alert manager definition, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html\">AlertManagedDefinitionData</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       },
       "documentation":"<p>Represents the input of a <code>PutAlertManagerDefinition</code> operation.</p>"
@@ -1532,34 +2611,148 @@
       },
       "documentation":"<p>Represents the output of a <code>PutAlertManagerDefinition</code> operation.</p>"
     },
-    "PutRuleGroupsNamespaceRequest":{
+    "PutAnomalyDetectorRequest":{
       "type":"structure",
       "required":[
-        "data",
-        "name",
-        "workspaceId"
+        "workspaceId",
+        "anomalyDetectorId",
+        "configuration"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The identifier of the workspace containing the anomaly detector to update.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The identifier of the anomaly detector to update.</p>",
+          "location":"uri",
+          "locationName":"anomalyDetectorId"
+        },
+        "evaluationIntervalInSeconds":{
+          "shape":"AnomalyDetectorEvaluationInterval",
+          "documentation":"<p>The frequency, in seconds, at which the anomaly detector evaluates metrics.</p>"
+        },
+        "missingDataAction":{
+          "shape":"AnomalyDetectorMissingDataAction",
+          "documentation":"<p>Specifies the action to take when data is missing during evaluation.</p>"
+        },
+        "configuration":{
+          "shape":"AnomalyDetectorConfiguration",
+          "documentation":"<p>The algorithm configuration for the anomaly detector.</p>"
+        },
+        "labels":{
+          "shape":"PrometheusMetricLabelMap",
+          "documentation":"<p>The Amazon Managed Service for Prometheus metric labels to associate with the anomaly detector.</p>"
+        },
         "clientToken":{
           "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
           "idempotencyToken":true
+        }
+      }
+    },
+    "PutAnomalyDetectorResponse":{
+      "type":"structure",
+      "required":[
+        "anomalyDetectorId",
+        "arn",
+        "status"
+      ],
+      "members":{
+        "anomalyDetectorId":{
+          "shape":"AnomalyDetectorId",
+          "documentation":"<p>The unique identifier of the updated anomaly detector.</p>"
         },
-        "data":{
-          "shape":"RuleGroupsNamespaceData",
-          "documentation":"<p>The new rules file to use in the namespace. A base64-encoded version of the YAML rule groups file.</p> <p>For details about the rule groups namespace structure, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html\">RuleGroupsNamespaceData</a>.</p>"
+        "arn":{
+          "shape":"AnomalyDetectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated anomaly detector.</p>"
         },
-        "name":{
-          "shape":"RuleGroupsNamespaceName",
-          "documentation":"<p>The name of the rule groups namespace that you are updating.</p>",
+        "status":{
+          "shape":"AnomalyDetectorStatus",
+          "documentation":"<p>The status information of the updated anomaly detector.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags applied to the updated anomaly detector.</p>"
+        }
+      }
+    },
+    "PutResourcePolicyRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "policyDocument"
+      ],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to attach the resource-based policy to.</p>",
           "location":"uri",
-          "locationName":"name"
+          "locationName":"workspaceId"
+        },
+        "policyDocument":{
+          "shape":"String",
+          "documentation":"<p>The JSON policy document to use as the resource-based policy. This policy defines the permissions that other AWS accounts or services have to access your workspace.</p>"
         },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the request is safe to retry (idempotent).</p>",
+          "idempotencyToken":true
+        },
+        "revisionId":{
+          "shape":"String",
+          "documentation":"<p>The revision ID of the policy to update. Use this parameter to ensure that you are updating the correct version of the policy. If you don't specify a revision ID, the policy is updated regardless of its current revision.</p> <p>For the first <b>PUT</b> request on a workspace that doesn't have an existing resource policy, you can specify <code>NO_POLICY</code> as the revision ID.</p>"
+        }
+      }
+    },
+    "PutResourcePolicyResponse":{
+      "type":"structure",
+      "required":[
+        "policyStatus",
+        "revisionId"
+      ],
+      "members":{
+        "policyStatus":{
+          "shape":"WorkspacePolicyStatusCode",
+          "documentation":"<p>The current status of the resource-based policy.</p>"
+        },
+        "revisionId":{
+          "shape":"String",
+          "documentation":"<p>The revision ID of the newly created or updated resource-based policy.</p>"
+        }
+      }
+    },
+    "PutRuleGroupsNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "name",
+        "data"
+      ],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace where you are updating the rule groups namespace.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "name":{
+          "shape":"RuleGroupsNamespaceName",
+          "documentation":"<p>The name of the rule groups namespace that you are updating.</p>",
+          "location":"uri",
+          "locationName":"name"
+        },
+        "data":{
+          "shape":"RuleGroupsNamespaceData",
+          "documentation":"<p>The new rules file to use in the namespace. A base64-encoded version of the YAML rule groups file.</p> <p>For details about the rule groups namespace structure, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html\">RuleGroupsNamespaceData</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       },
       "documentation":"<p>Represents the input of a <code>PutRuleGroupsNamespace</code> operation.</p>"
@@ -1567,19 +2760,19 @@
     "PutRuleGroupsNamespaceResponse":{
       "type":"structure",
       "required":[
-        "arn",
         "name",
+        "arn",
         "status"
       ],
       "members":{
-        "arn":{
-          "shape":"RuleGroupsNamespaceArn",
-          "documentation":"<p>The ARN of the rule groups namespace.</p>"
-        },
         "name":{
           "shape":"RuleGroupsNamespaceName",
           "documentation":"<p>The name of the rule groups namespace that was updated.</p>"
         },
+        "arn":{
+          "shape":"RuleGroupsNamespaceArn",
+          "documentation":"<p>The ARN of the rule groups namespace.</p>"
+        },
         "status":{
           "shape":"RuleGroupsNamespaceStatus",
           "documentation":"<p>A structure that includes the current status of the rule groups namespace.</p>"
@@ -1591,6 +2784,109 @@
       },
       "documentation":"<p>Represents the output of a <code>PutRuleGroupsNamespace</code> operation.</p>"
     },
+    "QueryLoggingConfigurationMetadata":{
+      "type":"structure",
+      "required":[
+        "status",
+        "workspace",
+        "destinations",
+        "createdAt",
+        "modifiedAt"
+      ],
+      "members":{
+        "status":{
+          "shape":"QueryLoggingConfigurationStatus",
+          "documentation":"<p>The current status of the query logging configuration.</p>"
+        },
+        "workspace":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace associated with this query logging configuration.</p>"
+        },
+        "destinations":{
+          "shape":"LoggingDestinations",
+          "documentation":"<p>The configured destinations for the query logging configuration.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the query logging configuration was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the query logging configuration was last modified.</p>"
+        }
+      },
+      "documentation":"<p>The metadata for a query logging configuration.</p>"
+    },
+    "QueryLoggingConfigurationStatus":{
+      "type":"structure",
+      "required":["statusCode"],
+      "members":{
+        "statusCode":{
+          "shape":"QueryLoggingConfigurationStatusCode",
+          "documentation":"<p>The current status of the query logging configuration.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>If there is a failure, the reason for the failure.</p>"
+        }
+      },
+      "documentation":"<p>The status information for a query logging configuration.</p>"
+    },
+    "QueryLoggingConfigurationStatusCode":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "UPDATING",
+        "DELETING",
+        "CREATION_FAILED",
+        "UPDATE_FAILED"
+      ]
+    },
+    "RandomCutForestConfiguration":{
+      "type":"structure",
+      "required":["query"],
+      "members":{
+        "query":{
+          "shape":"RandomCutForestQuery",
+          "documentation":"<p>The Prometheus query used to retrieve the time-series data for anomaly detection.</p> <important> <p>Random Cut Forest queries must be wrapped by a supported PromQL aggregation operator. For more information, see <a href=\"https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators\">Aggregation operators</a> on the <i>Prometheus docs</i> website.</p> <p> <b>Supported PromQL aggregation operators</b>: <code>avg</code>, <code>count</code>, <code>group</code>, <code>max</code>, <code>min</code>, <code>quantile</code>, <code>stddev</code>, <code>stdvar</code>, and <code>sum</code>.</p> </important>"
+        },
+        "shingleSize":{
+          "shape":"RandomCutForestConfigurationShingleSizeInteger",
+          "documentation":"<p>The number of consecutive data points used to create a shingle for the Random Cut Forest algorithm. The default number is 8 consecutive data points.</p>"
+        },
+        "sampleSize":{
+          "shape":"RandomCutForestConfigurationSampleSizeInteger",
+          "documentation":"<p>The number of data points sampled from the input stream for the Random Cut Forest algorithm. The default number is 256 consecutive data points.</p>"
+        },
+        "ignoreNearExpectedFromAbove":{
+          "shape":"IgnoreNearExpected",
+          "documentation":"<p>Configuration for ignoring values that are near expected values from above during anomaly detection.</p>"
+        },
+        "ignoreNearExpectedFromBelow":{
+          "shape":"IgnoreNearExpected",
+          "documentation":"<p>Configuration for ignoring values that are near expected values from below during anomaly detection.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for the Random Cut Forest algorithm used for anomaly detection in time-series data.</p>"
+    },
+    "RandomCutForestConfigurationSampleSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":256
+    },
+    "RandomCutForestConfigurationShingleSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":2
+    },
+    "RandomCutForestQuery":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
     "ResourceNotFoundException":{
       "type":"structure",
       "required":[
@@ -1619,6 +2915,20 @@
       },
       "exception":true
     },
+    "RoleConfiguration":{
+      "type":"structure",
+      "members":{
+        "sourceRoleArn":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the role used in the source account to enable cross-account scraping. For information about the contents of this policy, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#cross-account-remote-write\">Cross-account setup</a>.</p>"
+        },
+        "targetRoleArn":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the role used in the target account to enable cross-account scraping. For information about the contents of this policy, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#cross-account-remote-write\">Cross-account setup</a>.</p>"
+        }
+      },
+      "documentation":"<p>Use this structure to enable cross-account access, so that you can use a target account to access Prometheus metrics from source accounts.</p>"
+    },
     "RuleGroupsNamespaceArn":{
       "type":"string",
       "documentation":"<p>An ARN identifying a rule groups namespace.</p>"
@@ -1631,37 +2941,37 @@
       "type":"structure",
       "required":[
         "arn",
-        "createdAt",
-        "data",
-        "modifiedAt",
         "name",
-        "status"
+        "status",
+        "data",
+        "createdAt",
+        "modifiedAt"
       ],
       "members":{
         "arn":{
           "shape":"RuleGroupsNamespaceArn",
           "documentation":"<p>The ARN of the rule groups namespace. For example, <code>arn:aws:aps:&lt;region&gt;:123456789012:rulegroupsnamespace/ws-example1-1234-abcd-5678-ef90abcd1234/rulesfile1</code>.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the rule groups namespace was created.</p>"
+        "name":{
+          "shape":"RuleGroupsNamespaceName",
+          "documentation":"<p>The name of the rule groups namespace.</p>"
+        },
+        "status":{
+          "shape":"RuleGroupsNamespaceStatus",
+          "documentation":"<p>The current status of the rule groups namespace.</p>"
         },
         "data":{
           "shape":"RuleGroupsNamespaceData",
           "documentation":"<p>The rule groups file used in the namespace.</p> <p>For details about the rule groups namespace structure, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html\">RuleGroupsNamespaceData</a>.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the rule groups namespace was created.</p>"
+        },
         "modifiedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the rule groups namespace was most recently changed.</p>"
         },
-        "name":{
-          "shape":"RuleGroupsNamespaceName",
-          "documentation":"<p>The name of the rule groups namespace.</p>"
-        },
-        "status":{
-          "shape":"RuleGroupsNamespaceStatus",
-          "documentation":"<p>The current status of the rule groups namespace.</p>"
-        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values that are associated with the rule groups namespace.</p>"
@@ -1672,9 +2982,9 @@
     "RuleGroupsNamespaceName":{
       "type":"string",
       "documentation":"<p>The name of the namespace that the rule group belong to.</p>",
-      "max":64,
+      "max":128,
       "min":1,
-      "pattern":"[0-9A-Za-z][-.0-9A-Z_a-z]*"
+      "pattern":".*[0-9A-Za-z][-.0-9A-Z_a-z]*.*"
     },
     "RuleGroupsNamespaceStatus":{
       "type":"structure",
@@ -1707,24 +3017,16 @@
       "type":"structure",
       "required":[
         "arn",
-        "createdAt",
-        "modifiedAt",
         "name",
-        "status"
+        "status",
+        "createdAt",
+        "modifiedAt"
       ],
       "members":{
         "arn":{
           "shape":"RuleGroupsNamespaceArn",
           "documentation":"<p>The ARN of the rule groups namespace.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the rule groups namespace was created.</p>"
-        },
-        "modifiedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the rule groups namespace was most recently changed.</p>"
-        },
         "name":{
           "shape":"RuleGroupsNamespaceName",
           "documentation":"<p>The name of the rule groups namespace.</p>"
@@ -1733,6 +3035,14 @@
           "shape":"RuleGroupsNamespaceStatus",
           "documentation":"<p>A structure that displays the current status of the rule groups namespace.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the rule groups namespace was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the rule groups namespace was most recently changed.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values that are associated with the rule groups namespace.</p>"
@@ -1761,73 +3071,105 @@
       "documentation":"<p>An optional user-assigned scraper alias.</p>",
       "max":100,
       "min":1,
-      "pattern":"^[0-9A-Za-z][-.0-9A-Z_a-z]*$"
+      "pattern":"[0-9A-Za-z][-.0-9A-Z_a-z]*"
     },
     "ScraperArn":{
       "type":"string",
       "documentation":"<p>An ARN identifying a scrape configuration.</p>"
     },
+    "ScraperComponent":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ScraperComponentType",
+          "documentation":"<p>The type of the scraper component.</p>"
+        },
+        "config":{
+          "shape":"ComponentConfig",
+          "documentation":"<p>The configuration settings for the scraper component.</p>"
+        }
+      },
+      "documentation":"<p>A component of a Amazon Managed Service for Prometheus scraper that can be configured for logging.</p>"
+    },
+    "ScraperComponentType":{
+      "type":"string",
+      "enum":[
+        "SERVICE_DISCOVERY",
+        "COLLECTOR",
+        "EXPORTER"
+      ]
+    },
+    "ScraperComponents":{
+      "type":"list",
+      "member":{"shape":"ScraperComponent"},
+      "min":1
+    },
     "ScraperDescription":{
       "type":"structure",
       "required":[
+        "scraperId",
         "arn",
+        "roleArn",
+        "status",
         "createdAt",
-        "destination",
         "lastModifiedAt",
-        "roleArn",
         "scrapeConfiguration",
-        "scraperId",
         "source",
-        "status"
+        "destination"
       ],
       "members":{
         "alias":{
           "shape":"ScraperAlias",
           "documentation":"<p>(Optional) A name associated with the scraper.</p>"
         },
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper. For example, <code>s-example1-1234-abcd-5678-ef9012abcd34</code>.</p>"
+        },
         "arn":{
           "shape":"ScraperArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the scraper. For example, <code>arn:aws:aps:&lt;region&gt;:123456798012:scraper/s-example1-1234-abcd-5678-ef9012abcd34</code>.</p>"
         },
+        "roleArn":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the scraper to discover and collect metrics on your behalf.</p> <p>For example, <code>arn:aws:iam::123456789012:role/service-role/AmazonGrafanaServiceRole-12example</code>.</p>"
+        },
+        "status":{
+          "shape":"ScraperStatus",
+          "documentation":"<p>A structure that contains the current status of the scraper.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the scraper was created.</p>"
         },
-        "destination":{
-          "shape":"Destination",
-          "documentation":"<p>The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.</p>"
-        },
         "lastModifiedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the scraper was last modified.</p>"
         },
-        "roleArn":{
-          "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the scraper to discover and collect metrics on your behalf.</p> <p>For example, <code>arn:aws:iam::123456789012:role/service-role/AmazonGrafanaServiceRole-12example</code>.</p>"
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>(Optional) The list of tag keys and values associated with the scraper.</p>"
+        },
+        "statusReason":{
+          "shape":"StatusReason",
+          "documentation":"<p>If there is a failure, the reason for the failure.</p>"
         },
         "scrapeConfiguration":{
           "shape":"ScrapeConfiguration",
           "documentation":"<p>The configuration in use by the scraper.</p>"
         },
-        "scraperId":{
-          "shape":"ScraperId",
-          "documentation":"<p>The ID of the scraper. For example, <code>s-example1-1234-abcd-5678-ef9012abcd34</code>.</p>"
-        },
         "source":{
           "shape":"Source",
           "documentation":"<p>The Amazon EKS cluster from which the scraper collects metrics.</p>"
         },
-        "status":{
-          "shape":"ScraperStatus",
-          "documentation":"<p>A structure that contains the current status of the scraper.</p>"
-        },
-        "statusReason":{
-          "shape":"StatusReason",
-          "documentation":"<p>If there is a failure, the reason for the failure.</p>"
+        "destination":{
+          "shape":"Destination",
+          "documentation":"<p>The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.</p>"
         },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>(Optional) The list of tag keys and values associated with the scraper.</p>"
+        "roleConfiguration":{
+          "shape":"RoleConfiguration",
+          "documentation":"<p>This structure displays information about the IAM roles used for cross-account scraping configuration.</p>"
         }
       },
       "documentation":"<p>The <code>ScraperDescription</code> structure contains the full details about one scraper in your account.</p>"
@@ -1851,7 +3193,44 @@
       "documentation":"<p>A scraper ID.</p>",
       "max":64,
       "min":1,
-      "pattern":"^[0-9A-Za-z][-.0-9A-Z_a-z]*$"
+      "pattern":"[0-9A-Za-z][-.0-9A-Z_a-z]*"
+    },
+    "ScraperLoggingConfigurationStatus":{
+      "type":"structure",
+      "required":["statusCode"],
+      "members":{
+        "statusCode":{
+          "shape":"ScraperLoggingConfigurationStatusCode",
+          "documentation":"<p>The status code of the scraper logging configuration.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the scraper logging configuration.</p>"
+        }
+      },
+      "documentation":"<p>The status of a scraper logging configuration.</p>"
+    },
+    "ScraperLoggingConfigurationStatusCode":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "UPDATING",
+        "DELETING",
+        "CREATION_FAILED",
+        "UPDATE_FAILED"
+      ]
+    },
+    "ScraperLoggingDestination":{
+      "type":"structure",
+      "members":{
+        "cloudWatchLogs":{
+          "shape":"CloudWatchLogDestination",
+          "documentation":"<p>The CloudWatch Logs configuration for the scraper logging destination.</p>"
+        }
+      },
+      "documentation":"<p>The destination where scraper logs are sent.</p>",
+      "union":true
     },
     "ScraperStatus":{
       "type":"structure",
@@ -1880,59 +3259,63 @@
     "ScraperSummary":{
       "type":"structure",
       "required":[
+        "scraperId",
         "arn",
+        "roleArn",
+        "status",
         "createdAt",
-        "destination",
         "lastModifiedAt",
-        "roleArn",
-        "scraperId",
         "source",
-        "status"
+        "destination"
       ],
       "members":{
         "alias":{
           "shape":"ScraperAlias",
           "documentation":"<p>(Optional) A name associated with the scraper.</p>"
         },
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper.</p>"
+        },
         "arn":{
           "shape":"ScraperArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the scraper.</p>"
         },
+        "roleArn":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the scraper to discover and collect metrics on your behalf.</p>"
+        },
+        "status":{
+          "shape":"ScraperStatus",
+          "documentation":"<p>A structure that contains the current status of the scraper.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the scraper was created.</p>"
         },
-        "destination":{
-          "shape":"Destination",
-          "documentation":"<p>The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.</p>"
-        },
         "lastModifiedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the scraper was last modified.</p>"
         },
-        "roleArn":{
-          "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the scraper to discover and collect metrics on your behalf.</p>"
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>(Optional) The list of tag keys and values associated with the scraper.</p>"
         },
-        "scraperId":{
-          "shape":"ScraperId",
-          "documentation":"<p>The ID of the scraper.</p>"
+        "statusReason":{
+          "shape":"StatusReason",
+          "documentation":"<p>If there is a failure, the reason for the failure.</p>"
         },
         "source":{
           "shape":"Source",
           "documentation":"<p>The Amazon EKS cluster from which the scraper collects metrics.</p>"
         },
-        "status":{
-          "shape":"ScraperStatus",
-          "documentation":"<p>A structure that contains the current status of the scraper.</p>"
-        },
-        "statusReason":{
-          "shape":"StatusReason",
-          "documentation":"<p>If there is a failure, the reason for the failure.</p>"
+        "destination":{
+          "shape":"Destination",
+          "documentation":"<p>The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.</p>"
         },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>(Optional) The list of tag keys and values associated with the scraper.</p>"
+        "roleConfiguration":{
+          "shape":"RoleConfiguration",
+          "documentation":"<p>This structure displays information about the IAM roles used for cross-account scraping configuration.</p>"
         }
       },
       "documentation":"<p>The <code>ScraperSummary</code> structure contains a summary of the details about one scraper in your account.</p>"
@@ -1947,7 +3330,7 @@
       "documentation":"<p>ID of a VPC security group.</p>",
       "max":255,
       "min":0,
-      "pattern":"^sg-[0-9a-z]+$"
+      "pattern":"sg-[0-9a-z]+"
     },
     "SecurityGroupIds":{
       "type":"list",
@@ -1960,20 +3343,16 @@
       "type":"structure",
       "required":[
         "message",
-        "quotaCode",
         "resourceId",
         "resourceType",
-        "serviceCode"
+        "serviceCode",
+        "quotaCode"
       ],
       "members":{
         "message":{
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
         },
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>Service quotas code of the originating quota.</p>"
-        },
         "resourceId":{
           "shape":"String",
           "documentation":"<p>Identifier of the resource affected.</p>"
@@ -1985,6 +3364,10 @@
         "serviceCode":{
           "shape":"String",
           "documentation":"<p>Service quotas code for the originating service.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>Service quotas code of the originating quota.</p>"
         }
       },
       "documentation":"<p>Completing the request would cause a service quota to be exceeded.</p>",
@@ -2000,6 +3383,10 @@
         "eksConfiguration":{
           "shape":"EksConfiguration",
           "documentation":"<p>The Amazon EKS cluster from which a scraper collects metrics.</p>"
+        },
+        "vpcConfiguration":{
+          "shape":"VpcConfiguration",
+          "documentation":"<p>The Amazon VPC configuration for the Prometheus collector when connecting to Amazon MSK clusters. This configuration enables secure, private network connectivity between the collector and your Amazon MSK cluster within your Amazon VPC.</p>"
         }
       },
       "documentation":"<p>The source of collected metrics for a scraper.</p>",
@@ -2012,12 +3399,17 @@
       "min":1
     },
     "String":{"type":"string"},
+    "StringMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"String"}
+    },
     "SubnetId":{
       "type":"string",
       "documentation":"<p>ID of a VPC subnet.</p>",
       "max":255,
       "min":0,
-      "pattern":"^subnet-[0-9a-z]+$"
+      "pattern":"subnet-[0-9a-z]+"
     },
     "SubnetIds":{
       "type":"list",
@@ -2030,7 +3422,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TagKeys":{
       "type":"list",
@@ -2071,14 +3463,13 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "ThrottlingException":{
       "type":"structure",
@@ -2088,6 +3479,10 @@
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
         },
+        "serviceCode":{
+          "shape":"String",
+          "documentation":"<p>Service quotas code for the originating service.</p>"
+        },
         "quotaCode":{
           "shape":"String",
           "documentation":"<p>Service quotas code for the originating quota.</p>"
@@ -2097,10 +3492,6 @@
           "documentation":"<p>Advice to clients on when the call can be safely retried.</p>",
           "location":"header",
           "locationName":"Retry-After"
-        },
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>Service quotas code for the originating service.</p>"
         }
       },
       "documentation":"<p>The request was denied due to request throttling.</p>",
@@ -2135,30 +3526,29 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLoggingConfigurationRequest":{
       "type":"structure",
       "required":[
-        "logGroupArn",
-        "workspaceId"
+        "workspaceId",
+        "logGroupArn"
       ],
       "members":{
-        "clientToken":{
-          "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
-          "idempotencyToken":true
-        },
-        "logGroupArn":{
-          "shape":"LogGroupArn",
-          "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published.</p>"
-        },
         "workspaceId":{
           "shape":"WorkspaceId",
           "documentation":"<p>The ID of the workspace to update the logging configuration for.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "logGroupArn":{
+          "shape":"LogGroupArn",
+          "documentation":"<p>The ARN of the CloudWatch log group to which the vended log data will be published.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       },
       "documentation":"<p>Represents the input of an <code>UpdateLoggingConfiguration</code> operation.</p>"
@@ -2174,51 +3564,122 @@
       },
       "documentation":"<p>Represents the output of an <code>UpdateLoggingConfiguration</code> operation.</p>"
     },
+    "UpdateQueryLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "workspaceId",
+        "destinations"
+      ],
+      "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace for which to update the query logging configuration.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
+        "destinations":{
+          "shape":"LoggingDestinations",
+          "documentation":"<p>The destinations where query logs will be sent. Only CloudWatch Logs destination is supported. The list must contain exactly one element.</p>"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>(Optional) A unique, case-sensitive identifier that you can provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateQueryLoggingConfigurationResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"QueryLoggingConfigurationStatus",
+          "documentation":"<p>The current status of the query logging configuration.</p>"
+        }
+      }
+    },
+    "UpdateScraperLoggingConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "scraperId",
+        "loggingDestination"
+      ],
+      "members":{
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper whose logging configuration will be updated.</p>",
+          "location":"uri",
+          "locationName":"scraperId"
+        },
+        "loggingDestination":{
+          "shape":"ScraperLoggingDestination",
+          "documentation":"<p>The destination where scraper logs will be sent.</p>"
+        },
+        "scraperComponents":{
+          "shape":"ScraperComponents",
+          "documentation":"<p>The list of scraper components to configure for logging.</p>"
+        }
+      }
+    },
+    "UpdateScraperLoggingConfigurationResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"ScraperLoggingConfigurationStatus",
+          "documentation":"<p>The status of the updated scraper logging configuration.</p>"
+        }
+      }
+    },
     "UpdateScraperRequest":{
       "type":"structure",
       "required":["scraperId"],
       "members":{
+        "scraperId":{
+          "shape":"ScraperId",
+          "documentation":"<p>The ID of the scraper to update.</p>",
+          "location":"uri",
+          "locationName":"scraperId"
+        },
         "alias":{
           "shape":"ScraperAlias",
           "documentation":"<p>The new alias of the scraper.</p>"
         },
-        "clientToken":{
-          "shape":"IdempotencyToken",
-          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
-          "idempotencyToken":true
+        "scrapeConfiguration":{
+          "shape":"ScrapeConfiguration",
+          "documentation":"<p>Contains the base-64 encoded YAML configuration for the scraper.</p> <note> <p>For more information about configuring a scraper, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html\">Using an Amazon Web Services managed collector</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> </note>"
         },
         "destination":{
           "shape":"Destination",
           "documentation":"<p>The new Amazon Managed Service for Prometheus workspace to send metrics to.</p>"
         },
-        "scrapeConfiguration":{
-          "shape":"ScrapeConfiguration",
-          "documentation":"<p>Contains the base-64 encoded YAML configuration for the scraper.</p> <note> <p>For more information about configuring a scraper, see <a href=\"https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html\">Using an Amazon Web Services managed collector</a> in the <i>Amazon Managed Service for Prometheus User Guide</i>.</p> </note>"
+        "roleConfiguration":{
+          "shape":"RoleConfiguration",
+          "documentation":"<p>Use this structure to enable cross-account access, so that you can use a target account to access Prometheus metrics from source accounts.</p>"
         },
-        "scraperId":{
-          "shape":"ScraperId",
-          "documentation":"<p>The ID of the scraper to update.</p>",
-          "location":"uri",
-          "locationName":"scraperId"
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "UpdateScraperResponse":{
       "type":"structure",
       "required":[
-        "arn",
         "scraperId",
+        "arn",
         "status"
       ],
       "members":{
-        "arn":{
-          "shape":"ScraperArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the updated scraper.</p>"
-        },
         "scraperId":{
           "shape":"ScraperId",
           "documentation":"<p>The ID of the updated scraper.</p>"
         },
+        "arn":{
+          "shape":"ScraperArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated scraper.</p>"
+        },
         "status":{
           "shape":"ScraperStatus",
           "documentation":"<p>A structure that displays the current status of the scraper.</p>"
@@ -2233,6 +3694,12 @@
       "type":"structure",
       "required":["workspaceId"],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The ID of the workspace to update.</p>",
+          "location":"uri",
+          "locationName":"workspaceId"
+        },
         "alias":{
           "shape":"WorkspaceAlias",
           "documentation":"<p>The new alias for the workspace. It does not need to be unique.</p> <p>Amazon Managed Service for Prometheus will automatically strip any blank spaces from the beginning and end of the alias that you specify.</p>"
@@ -2241,15 +3708,49 @@
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique identifier that you can provide to ensure the idempotency of the request. Case-sensitive.</p>",
           "idempotencyToken":true
-        },
+        }
+      },
+      "documentation":"<p>Represents the input of an <code>UpdateWorkspaceAlias</code> operation.</p>"
+    },
+    "UpdateWorkspaceConfigurationRequest":{
+      "type":"structure",
+      "required":["workspaceId"],
+      "members":{
         "workspaceId":{
           "shape":"WorkspaceId",
-          "documentation":"<p>The ID of the workspace to update.</p>",
+          "documentation":"<p>The ID of the workspace that you want to update. To find the IDs of your workspaces, use the <a href=\"https://docs.aws.amazon.com/prometheus/latest/APIReference/API_ListWorkspaces.htm\">ListWorkspaces</a> operation.</p>",
           "location":"uri",
           "locationName":"workspaceId"
+        },
+        "clientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>You can include a token in your operation to make it an idempotent opeartion. </p>",
+          "idempotencyToken":true
+        },
+        "limitsPerLabelSet":{
+          "shape":"LimitsPerLabelSetList",
+          "documentation":"<p>This is an array of structures, where each structure defines a label set for the workspace, and defines the active time series limit for each of those label sets. Each label name in a label set must be unique.</p>"
+        },
+        "retentionPeriodInDays":{
+          "shape":"UpdateWorkspaceConfigurationRequestRetentionPeriodInDaysInteger",
+          "documentation":"<p>Specifies how many days that metrics will be retained in the workspace.</p>"
         }
-      },
-      "documentation":"<p>Represents the input of an <code>UpdateWorkspaceAlias</code> operation.</p>"
+      }
+    },
+    "UpdateWorkspaceConfigurationRequestRetentionPeriodInDaysInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "UpdateWorkspaceConfigurationResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"WorkspaceConfigurationStatus",
+          "documentation":"<p>The status of the workspace configuration.</p>"
+        }
+      }
     },
     "Uri":{
       "type":"string",
@@ -2263,10 +3764,6 @@
         "reason"
       ],
       "members":{
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The field that caused the error, if applicable.</p>"
-        },
         "message":{
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
@@ -2274,6 +3771,10 @@
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>Reason the request failed validation.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>The field that caused the error, if applicable.</p>"
         }
       },
       "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>",
@@ -2286,17 +3787,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>A message describing why the field caused an exception.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the field that caused an exception.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A message describing why the field caused an exception.</p>"
         }
       },
       "documentation":"<p>Information about a field passed into a request that resulted in an exception.</p>"
@@ -2316,6 +3817,24 @@
         "OTHER"
       ]
     },
+    "VpcConfiguration":{
+      "type":"structure",
+      "required":[
+        "securityGroupIds",
+        "subnetIds"
+      ],
+      "members":{
+        "securityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>The security group IDs that control network access for the Prometheus collector. These security groups must allow the collector to communicate with your Amazon MSK cluster on the required ports.</p>"
+        },
+        "subnetIds":{
+          "shape":"SubnetIds",
+          "documentation":"<p>The subnet IDs where the Prometheus collector will be deployed. The subnets must be in the same Amazon VPC as your Amazon MSK cluster and have network connectivity to the cluster.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon VPC configuration that specifies the network settings for a Prometheus collector to securely connect to Amazon MSK clusters. This configuration includes the security groups and subnets that control network access and placement for the collector.</p>"
+    },
     "WorkspaceAlias":{
       "type":"string",
       "documentation":"<p>A user-assigned workspace alias.</p>",
@@ -2325,17 +3844,68 @@
     "WorkspaceArn":{
       "type":"string",
       "documentation":"<p>An ARN identifying a Workspace.</p>",
-      "pattern":"^arn:aws[-a-z]*:aps:[-a-z0-9]+:[0-9]{12}:workspace/.+$"
+      "pattern":"arn:aws[-a-z]*:aps:[-a-z0-9]+:[0-9]{12}:workspace/.+"
+    },
+    "WorkspaceConfigurationDescription":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"WorkspaceConfigurationStatus",
+          "documentation":"<p>This structure displays the current status of the workspace configuration, and might also contain a reason for that status.</p>"
+        },
+        "limitsPerLabelSet":{
+          "shape":"LimitsPerLabelSetList",
+          "documentation":"<p>This is an array of structures, where each structure displays one label sets for the workspace and the limits for that label set.</p>"
+        },
+        "retentionPeriodInDays":{
+          "shape":"WorkspaceConfigurationDescriptionRetentionPeriodInDaysInteger",
+          "documentation":"<p>This field displays how many days that metrics are retained in the workspace.</p>"
+        }
+      },
+      "documentation":"<p>This structure contains the description of the workspace configuration.</p>"
+    },
+    "WorkspaceConfigurationDescriptionRetentionPeriodInDaysInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "WorkspaceConfigurationStatus":{
+      "type":"structure",
+      "required":["statusCode"],
+      "members":{
+        "statusCode":{
+          "shape":"WorkspaceConfigurationStatusCode",
+          "documentation":"<p>The current status of the workspace configuration.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status, if a reason is available.</p>"
+        }
+      },
+      "documentation":"<p>This structure displays the current status of the workspace configuration, and might also contain a reason for that status.</p>"
+    },
+    "WorkspaceConfigurationStatusCode":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "UPDATING",
+        "UPDATE_FAILED"
+      ]
     },
     "WorkspaceDescription":{
       "type":"structure",
       "required":[
+        "workspaceId",
         "arn",
-        "createdAt",
         "status",
-        "workspaceId"
+        "createdAt"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The unique ID for the workspace. For example, <code>ws-example1-1234-abcd-5678-ef90abcd1234</code>.</p>"
+        },
         "alias":{
           "shape":"WorkspaceAlias",
           "documentation":"<p>The alias that is assigned to this workspace to help identify it. It does not need to be unique.</p>"
@@ -2344,29 +3914,25 @@
           "shape":"WorkspaceArn",
           "documentation":"<p>The ARN of the workspace. For example, <code>arn:aws:aps:&lt;region&gt;:123456789012:workspace/ws-example1-1234-abcd-5678-ef90abcd1234</code>.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the workspace was created.</p>"
-        },
-        "kmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
+        "status":{
+          "shape":"WorkspaceStatus",
+          "documentation":"<p>The current status of the workspace.</p>"
         },
         "prometheusEndpoint":{
           "shape":"Uri",
           "documentation":"<p>The Prometheus endpoint available for this workspace. For example, <code>https://aps-workspaces.&lt;region&gt;.amazonaws.com/workspaces/ws-example1-1234-abcd-5678-ef90abcd1234/api/v1/</code>.</p>"
         },
-        "status":{
-          "shape":"WorkspaceStatus",
-          "documentation":"<p>The current status of the workspace.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the workspace was created.</p>"
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values that are associated with the workspace.</p>"
         },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The unique ID for the workspace. For example, <code>ws-example1-1234-abcd-5678-ef90abcd1234</code>.</p>"
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
         }
       },
       "documentation":"<p>The full details about one Amazon Managed Service for Prometheus workspace in your account.</p>"
@@ -2376,7 +3942,16 @@
       "documentation":"<p>A workspace ID.</p>",
       "max":64,
       "min":1,
-      "pattern":"[0-9A-Za-z][-.0-9A-Z_a-z]*"
+      "pattern":".*[0-9A-Za-z][-.0-9A-Z_a-z]*.*"
+    },
+    "WorkspacePolicyStatusCode":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "UPDATING",
+        "DELETING"
+      ]
     },
     "WorkspaceStatus":{
       "type":"structure",
@@ -2403,12 +3978,16 @@
     "WorkspaceSummary":{
       "type":"structure",
       "required":[
+        "workspaceId",
         "arn",
-        "createdAt",
         "status",
-        "workspaceId"
+        "createdAt"
       ],
       "members":{
+        "workspaceId":{
+          "shape":"WorkspaceId",
+          "documentation":"<p>The unique ID for the workspace.</p>"
+        },
         "alias":{
           "shape":"WorkspaceAlias",
           "documentation":"<p>The alias that is assigned to this workspace to help identify it. It does not need to be unique.</p>"
@@ -2417,25 +3996,21 @@
           "shape":"WorkspaceArn",
           "documentation":"<p>The ARN of the workspace.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the workspace was created.</p>"
-        },
-        "kmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
-        },
         "status":{
           "shape":"WorkspaceStatus",
           "documentation":"<p>The current status of the workspace.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the workspace was created.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of tag keys and values that are associated with the workspace.</p>"
         },
-        "workspaceId":{
-          "shape":"WorkspaceId",
-          "documentation":"<p>The unique ID for the workspace.</p>"
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>(optional) If the workspace was created with a customer managed KMS key, the ARN for the key used.</p>"
         }
       },
       "documentation":"<p>The information about one Amazon Managed Service for Prometheus workspace in your account. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/amp/2020-08-01/waiters-2.json 2.31.35-1/awscli/botocore/data/amp/2020-08-01/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/amp/2020-08-01/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amp/2020-08-01/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,44 @@
 {
   "version" : 2,
   "waiters" : {
+    "AnomalyDetectorActive" : {
+      "description" : "Wait until the anomaly detector reaches ACTIVE status",
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "DescribeAnomalyDetector",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "anomalyDetector.status.statusCode",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "anomalyDetector.status.statusCode",
+        "state" : "retry",
+        "expected" : "CREATING"
+      }, {
+        "matcher" : "path",
+        "argument" : "anomalyDetector.status.statusCode",
+        "state" : "retry",
+        "expected" : "UPDATING"
+      } ]
+    },
+    "AnomalyDetectorDeleted" : {
+      "description" : "Wait until the anomaly detector reaches DELETED status",
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "DescribeAnomalyDetector",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "anomalyDetector.status.statusCode",
+        "state" : "retry",
+        "expected" : "DELETING"
+      } ]
+    },
     "ScraperActive" : {
       "description" : "Wait until a scraper reaches ACTIVE status",
       "delay" : 2,
diff -pruN 2.23.6-1/awscli/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amplify/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/amplify/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/amplify/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/amplify/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amplify/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -381,7 +381,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Returns a list of artifacts for a specified app, branch, and job. </p>"
+      "documentation":"<p>Returns a list of end-to-end testing artifacts for a specified app, branch, and job.</p> <p>To return the build artifacts, use the <a href=\"https://docs.aws.amazon.com/amplify/latest/APIReference/API_GetJob.html\">GetJob</a> API.</p> <p>For more information about Amplify testing support, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/running-tests.html\">Setting up end-to-end Cypress tests for your Amplify application</a> in the <i>Amplify Hosting User Guide</i>. </p>"
     },
     "ListBackendEnvironments":{
       "name":"ListBackendEnvironments",
@@ -689,9 +689,13 @@
           "shape":"UpdateTime",
           "documentation":"<p>A timestamp of when Amplify updated the application.</p>"
         },
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role for an SSR app. The Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "iamServiceRoleArn":{
           "shape":"ServiceRoleArn",
-          "documentation":"<p>The AWS Identity and Access Management (IAM) service role for the Amazon Resource Name (ARN) of the Amplify app. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM service role for the Amplify app.</p>"
         },
         "environmentVariables":{
           "shape":"EnvironmentVariables",
@@ -760,6 +764,10 @@
         "wafConfiguration":{
           "shape":"WafConfiguration",
           "documentation":"<p>Describes the Firewall configuration for the Amplify app. Firewall support enables you to protect your hosted applications with a direct integration with WAF.</p>"
+        },
+        "jobConfig":{
+          "shape":"JobConfig",
+          "documentation":"<p>The configuration details that apply to the jobs for an Amplify app.</p>"
         }
       },
       "documentation":"<p>Represents the different branches of a repository for building, deploying, and hosting an Amplify app. </p>"
@@ -1034,6 +1042,10 @@
           "shape":"EnableAutoBuild",
           "documentation":"<p> Enables auto-building on push for a branch of an Amplify app. </p>"
         },
+        "enableSkewProtection":{
+          "shape":"EnableSkewProtection",
+          "documentation":"<p>Specifies whether the skew protection feature is enabled for the branch.</p> <p>Deployment skew protection is available to Amplify applications to eliminate version skew issues between client and servers in web applications. When you apply skew protection to a branch, you can ensure that your clients always interact with the correct version of server-side assets, regardless of when a deployment occurs. For more information about skew protection, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/skew-protection.html\">Skew protection for Amplify deployments</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "customDomains":{
           "shape":"CustomDomains",
           "documentation":"<p> The custom domains for a branch of an Amplify app. </p>"
@@ -1098,7 +1110,11 @@
           "shape":"BackendEnvironmentArn",
           "documentation":"<p> The Amazon Resource Name (ARN) for a backend environment that is part of an Amplify app. </p> <p>This property is available to Amplify Gen 1 apps only. When you deploy an application with Amplify Gen 2, you provision the app's backend infrastructure using Typescript code.</p>"
         },
-        "backend":{"shape":"Backend"}
+        "backend":{"shape":"Backend"},
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role for a branch of an SSR app. The Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
+        }
       },
       "documentation":"<p> The branch for an Amplify app, which maps to a third-party repository branch. </p>"
     },
@@ -1118,6 +1134,14 @@
       "member":{"shape":"Branch"},
       "max":255
     },
+    "BuildComputeType":{
+      "type":"string",
+      "enum":[
+        "STANDARD_8GB",
+        "LARGE_16GB",
+        "XLARGE_72GB"
+      ]
+    },
     "BuildSpec":{
       "type":"string",
       "documentation":"<p>The build specification (build spec) file for an Amplify app build. </p>",
@@ -1132,7 +1156,7 @@
       "members":{
         "type":{
           "shape":"CacheConfigType",
-          "documentation":"<p>The type of cache configuration to use for an Amplify app.</p> <p>The <code>AMPLIFY_MANAGED</code> cache configuration automatically applies an optimized cache configuration for your app based on its platform, routing rules, and rewrite rules. This is the default setting.</p> <p>The <code>AMPLIFY_MANAGED_NO_COOKIES</code> cache configuration type is the same as <code>AMPLIFY_MANAGED</code>, except that it excludes all cookies from the cache key.</p>"
+          "documentation":"<p>The type of cache configuration to use for an Amplify app.</p> <p>The <code>AMPLIFY_MANAGED</code> cache configuration automatically applies an optimized cache configuration for your app based on its platform, routing rules, and rewrite rules.</p> <p>The <code>AMPLIFY_MANAGED_NO_COOKIES</code> cache configuration type is the same as <code>AMPLIFY_MANAGED</code>, except that it excludes all cookies from the cache key. This is the default setting.</p>"
         }
       },
       "documentation":"<p>Describes the cache configuration for an Amplify app.</p> <p>For more information about how Amplify applies an optimal cache configuration for your app based on the type of content that is being served, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/managing-cache-configuration\">Managing cache configuration</a> in the <i>Amplify User guide</i>.</p>"
@@ -1207,6 +1231,12 @@
       "pattern":"(?s).*"
     },
     "CommitTime":{"type":"timestamp"},
+    "ComputeRoleArn":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "pattern":"(?s).*"
+    },
     "Condition":{
       "type":"string",
       "max":2048,
@@ -1234,9 +1264,13 @@
           "shape":"Platform",
           "documentation":"<p>The platform for the Amplify app. For a static app, set the platform type to <code>WEB</code>. For a dynamic server-side rendered (SSR) app, set the platform type to <code>WEB_COMPUTE</code>. For an app requiring Amplify Hosting's original SSR support only, set the platform type to <code>WEB_DYNAMIC</code>.</p> <p>If you are deploying an SSG only app with Next.js version 14 or later, you must set the platform type to <code>WEB_COMPUTE</code> and set the artifacts <code>baseDirectory</code> to <code>.next</code> in the application's build settings. For an example of the build specification settings, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/deploy-nextjs-app.html#build-setting-detection-ssg-14\">Amplify build settings for a Next.js 14 SSG application</a> in the <i>Amplify Hosting User Guide</i>.</p>"
         },
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assign to an SSR app. The SSR Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "iamServiceRoleArn":{
           "shape":"ServiceRoleArn",
-          "documentation":"<p>The AWS Identity and Access Management (IAM) service role for an Amplify app. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM service role for the Amplify app.</p>"
         },
         "oauthToken":{
           "shape":"OauthToken",
@@ -1294,6 +1328,10 @@
           "shape":"AutoBranchCreationConfig",
           "documentation":"<p>The automated branch creation configuration for an Amplify app. </p>"
         },
+        "jobConfig":{
+          "shape":"JobConfig",
+          "documentation":"<p>Describes the configuration details that apply to the jobs for an Amplify app.</p>"
+        },
         "cacheConfig":{
           "shape":"CacheConfig",
           "documentation":"<p>The cache configuration for the Amplify app.</p>"
@@ -1384,6 +1422,10 @@
           "shape":"EnableAutoBuild",
           "documentation":"<p> Enables auto building for the branch. </p>"
         },
+        "enableSkewProtection":{
+          "shape":"EnableSkewProtection",
+          "documentation":"<p>Specifies whether the skew protection feature is enabled for the branch.</p> <p>Deployment skew protection is available to Amplify applications to eliminate version skew issues between client and servers in web applications. When you apply skew protection to a branch, you can ensure that your clients always interact with the correct version of server-side assets, regardless of when a deployment occurs. For more information about skew protection, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/skew-protection.html\">Skew protection for Amplify deployments</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "environmentVariables":{
           "shape":"EnvironmentVariables",
           "documentation":"<p> The environment variables for the branch. </p>"
@@ -1431,6 +1473,10 @@
         "backend":{
           "shape":"Backend",
           "documentation":"<p>The backend for a <code>Branch</code> of an Amplify app. Use for a backend created from an CloudFormation stack.</p> <p>This field is available to Amplify Gen 2 apps only. When you deploy an application with Amplify Gen 2, you provision the app's backend infrastructure using Typescript code.</p>"
+        },
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assign to a branch of an SSR app. The SSR Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
         }
       },
       "documentation":"<p> The request structure for the create branch request. </p>"
@@ -1939,6 +1985,7 @@
     "EnableNotification":{"type":"boolean"},
     "EnablePerformanceMode":{"type":"boolean"},
     "EnablePullRequestPreview":{"type":"boolean"},
+    "EnableSkewProtection":{"type":"boolean"},
     "EndTime":{"type":"timestamp"},
     "EnvKey":{
       "type":"string",
@@ -2261,6 +2308,17 @@
       "type":"string",
       "max":1000
     },
+    "JobConfig":{
+      "type":"structure",
+      "required":["buildComputeType"],
+      "members":{
+        "buildComputeType":{
+          "shape":"BuildComputeType",
+          "documentation":"<p>Specifies the size of the build instance. Amplify supports three instance sizes: <code>STANDARD_8GB</code>, <code>LARGE_16GB</code>, and <code>XLARGE_72GB</code>. If you don't specify a value, Amplify uses the <code>STANDARD_8GB</code> default.</p> <p>The following list describes the CPU, memory, and storage capacity for each build instance type:</p> <dl> <dt>STANDARD_8GB</dt> <dd> <ul> <li> <p>vCPUs: 4</p> </li> <li> <p>Memory: 8 GiB</p> </li> <li> <p>Disk space: 128 GB</p> </li> </ul> </dd> <dt>LARGE_16GB</dt> <dd> <ul> <li> <p>vCPUs: 8</p> </li> <li> <p>Memory: 16 GiB</p> </li> <li> <p>Disk space: 128 GB</p> </li> </ul> </dd> <dt>XLARGE_72GB</dt> <dd> <ul> <li> <p>vCPUs: 36</p> </li> <li> <p>Memory: 72 GiB</p> </li> <li> <p>Disk space: 256 GB</p> </li> </ul> </dd> </dl>"
+        }
+      },
+      "documentation":"<p>Describes the configuration details that apply to the jobs for an Amplify app.</p> <p>Use <code>JobConfig</code> to apply configuration to jobs, such as customizing the build instance size when you create or update an Amplify app. For more information about customizable build instances, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/custom-build-instance.html\">Custom build instances</a> in the <i>Amplify User Guide</i>.</p>"
+    },
     "JobId":{
       "type":"string",
       "max":255,
@@ -3004,7 +3062,7 @@
         },
         "artifactsUrl":{
           "shape":"ArtifactsUrl",
-          "documentation":"<p> The URL to the artifact for the execution step. </p>"
+          "documentation":"<p> The URL to the build artifact for the execution step. </p>"
         },
         "testArtifactsUrl":{
           "shape":"TestArtifactsUrl",
@@ -3176,8 +3234,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response for the tag resource request. </p>"
     },
     "TagValue":{
@@ -3245,8 +3302,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response for the untag resource request. </p>"
     },
     "UpdateAppRequest":{
@@ -3271,9 +3327,13 @@
           "shape":"Platform",
           "documentation":"<p>The platform for the Amplify app. For a static app, set the platform type to <code>WEB</code>. For a dynamic server-side rendered (SSR) app, set the platform type to <code>WEB_COMPUTE</code>. For an app requiring Amplify Hosting's original SSR support only, set the platform type to <code>WEB_DYNAMIC</code>.</p> <p>If you are deploying an SSG only app with Next.js version 14 or later, you must set the platform type to <code>WEB_COMPUTE</code>.</p>"
         },
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assign to an SSR app. The SSR Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "iamServiceRoleArn":{
           "shape":"ServiceRoleArn",
-          "documentation":"<p>The AWS Identity and Access Management (IAM) service role for an Amplify app. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM service role for the Amplify app.</p>"
         },
         "environmentVariables":{
           "shape":"EnvironmentVariables",
@@ -3331,6 +3391,10 @@
           "shape":"AccessToken",
           "documentation":"<p>The personal access token for a GitHub repository for an Amplify app. The personal access token is used to authorize access to a GitHub repository using the Amplify GitHub App. The token is not stored.</p> <p>Use <code>accessToken</code> for GitHub repositories only. To authorize access to a repository provider such as Bitbucket or CodeCommit, use <code>oauthToken</code>.</p> <p>You must specify either <code>accessToken</code> or <code>oauthToken</code> when you update an app.</p> <p>Existing Amplify apps deployed from a GitHub repository using OAuth continue to work with CI/CD. However, we strongly recommend that you migrate these apps to use the GitHub App. For more information, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/setting-up-GitHub-access.html#migrating-to-github-app-auth\">Migrating an existing OAuth app to the Amplify GitHub App</a> in the <i>Amplify User Guide</i> .</p>"
         },
+        "jobConfig":{
+          "shape":"JobConfig",
+          "documentation":"<p>Describes the configuration details that apply to the jobs for an Amplify app.</p>"
+        },
         "cacheConfig":{
           "shape":"CacheConfig",
           "documentation":"<p>The cache configuration for the Amplify app.</p>"
@@ -3388,6 +3452,10 @@
           "shape":"EnableAutoBuild",
           "documentation":"<p> Enables auto building for the branch. </p>"
         },
+        "enableSkewProtection":{
+          "shape":"EnableSkewProtection",
+          "documentation":"<p>Specifies whether the skew protection feature is enabled for the branch.</p> <p>Deployment skew protection is available to Amplify applications to eliminate version skew issues between client and servers in web applications. When you apply skew protection to a branch, you can ensure that your clients always interact with the correct version of server-side assets, regardless of when a deployment occurs. For more information about skew protection, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/skew-protection.html\">Skew protection for Amplify deployments</a> in the <i>Amplify User Guide</i>.</p>"
+        },
         "environmentVariables":{
           "shape":"EnvironmentVariables",
           "documentation":"<p> The environment variables for the branch. </p>"
@@ -3431,6 +3499,10 @@
         "backend":{
           "shape":"Backend",
           "documentation":"<p>The backend for a <code>Branch</code> of an Amplify app. Use for a backend created from an CloudFormation stack.</p> <p>This field is available to Amplify Gen 2 apps only. When you deploy an application with Amplify Gen 2, you provision the app's backend infrastructure using Typescript code.</p>"
+        },
+        "computeRoleArn":{
+          "shape":"ComputeRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assign to a branch of an SSR app. The SSR Compute role allows the Amplify Hosting compute service to securely access specific Amazon Web Services resources based on the role's permissions. For more information about the SSR Compute role, see <a href=\"https://docs.aws.amazon.com/amplify/latest/userguide/amplify-SSR-compute-role.html\">Adding an SSR Compute role</a> in the <i>Amplify User Guide</i>.</p>"
         }
       },
       "documentation":"<p>The request structure for the update branch request. </p>"
@@ -3607,6 +3679,10 @@
           "shape":"WebhookUrl",
           "documentation":"<p>The URL of the webhook. </p>"
         },
+        "appId":{
+          "shape":"AppId",
+          "documentation":"<p>The unique ID of an Amplify app.</p>"
+        },
         "branchName":{
           "shape":"BranchName",
           "documentation":"<p>The name for a branch that is part of an Amplify app. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amplifybackend/2020-08-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/amplifyuibuilder/2021-08-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigateway/2015-07-09/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/apigateway/2015-07-09/service-2.json 2.31.35-1/awscli/botocore/data/apigateway/2015-07-09/service-2.json
--- 2.23.6-1/awscli/botocore/data/apigateway/2015-07-09/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigateway/2015-07-09/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2807,7 +2807,7 @@
         },
         "endpointConfiguration":{
           "shape":"EndpointConfiguration",
-          "documentation":"<p>The endpoint configuration of this DomainName showing the endpoint types of the domain name. </p>"
+          "documentation":"<p>The endpoint configuration of this DomainName showing the endpoint types and IP address types of the domain name. </p>"
         },
         "tags":{
           "shape":"MapOfStringToString",
@@ -2825,6 +2825,10 @@
         "policy":{
           "shape":"String",
           "documentation":"<p>A stringified JSON policy document that applies to the <code>execute-api</code> service for this DomainName regardless of the caller and Method configuration. Supported only for private custom domain names.</p>"
+        },
+        "routingMode":{
+          "shape":"RoutingMode",
+          "documentation":"<p> The routing mode for this domain name. The routing mode determines how API Gateway sends traffic from your custom domain name to your private APIs. </p>"
         }
       },
       "documentation":"<p>A request to create a new domain name.</p>"
@@ -2948,7 +2952,7 @@
         },
         "endpointConfiguration":{
           "shape":"EndpointConfiguration",
-          "documentation":"<p>The endpoint configuration of this RestApi showing the endpoint types of the API. </p>"
+          "documentation":"<p>The endpoint configuration of this RestApi showing the endpoint types and IP address types of the API. </p>"
         },
         "policy":{
           "shape":"String",
@@ -3765,7 +3769,7 @@
         },
         "domainNameArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the domain name. Supported only for private custom domain names. </p>"
+          "documentation":"<p>The ARN of the domain name. </p>"
         },
         "certificateName":{
           "shape":"String",
@@ -3805,7 +3809,7 @@
         },
         "endpointConfiguration":{
           "shape":"EndpointConfiguration",
-          "documentation":"<p>The endpoint configuration of this DomainName showing the endpoint types of the domain name. </p>"
+          "documentation":"<p>The endpoint configuration of this DomainName showing the endpoint types and IP address types of the domain name. </p>"
         },
         "domainNameStatus":{
           "shape":"DomainNameStatus",
@@ -3838,6 +3842,10 @@
         "policy":{
           "shape":"String",
           "documentation":"<p>A stringified JSON policy document that applies to the <code>execute-api</code> service for this DomainName regardless of the caller and Method configuration. Supported only for private custom domain names.</p>"
+        },
+        "routingMode":{
+          "shape":"RoutingMode",
+          "documentation":"<p>The routing mode for this domain name. The routing mode determines how API Gateway sends traffic from your custom domain name to your private APIs.</p>"
         }
       },
       "documentation":"<p>Represents a custom domain name as a user-friendly host name of an API (RestApi).</p>"
@@ -3909,12 +3917,16 @@
           "shape":"ListOfEndpointType",
           "documentation":"<p>A list of endpoint types of an API (RestApi) or its custom domain name (DomainName). For an edge-optimized API and its custom domain name, the endpoint type is <code>\"EDGE\"</code>. For a regional API and its custom domain name, the endpoint type is <code>REGIONAL</code>. For a private API, the endpoint type is <code>PRIVATE</code>.</p>"
         },
+        "ipAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address types that can invoke an API (RestApi) or a DomainName. Use <code>ipv4</code> to allow only IPv4 addresses to invoke an API or DomainName, or use <code>dualstack</code> to allow both IPv4 and IPv6 addresses to invoke an API or a DomainName. For the <code>PRIVATE</code> endpoint type, only <code>dualstack</code> is supported.</p>"
+        },
         "vpcEndpointIds":{
           "shape":"ListOfString",
           "documentation":"<p>A list of VpcEndpointIds of an API (RestApi) against which to create Route53 ALIASes. It is only supported for <code>PRIVATE</code> endpoint type.</p>"
         }
       },
-      "documentation":"<p>The endpoint configuration to indicate the types of endpoints an API (RestApi) or its custom domain name (DomainName) has. </p>"
+      "documentation":"<p>The endpoint configuration to indicate the types of endpoints an API (RestApi) or its custom domain name (DomainName) has and the IP address types that can invoke it. </p>"
     },
     "EndpointType":{
       "type":"string",
@@ -4072,8 +4084,7 @@
     },
     "GetAccountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Requests API Gateway to get information about the current Account resource.</p>"
     },
     "GetApiKeyRequest":{
@@ -5362,7 +5373,7 @@
         },
         "timeoutInMillis":{
           "shape":"Integer",
-          "documentation":"<p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds.</p>"
+          "documentation":"<p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds. You can increase the default value to longer than 29 seconds for Regional or private APIs only.</p>"
         },
         "cacheNamespace":{
           "shape":"String",
@@ -5420,6 +5431,13 @@
         "AWS_PROXY"
       ]
     },
+    "IpAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "dualstack"
+      ]
+    },
     "LimitExceededException":{
       "type":"structure",
       "members":{
@@ -5965,7 +5983,7 @@
         },
         "timeoutInMillis":{
           "shape":"NullableInteger",
-          "documentation":"<p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds.</p>"
+          "documentation":"<p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds. You can increase the default value to longer than 29 seconds for Regional or private APIs only.</p>"
         },
         "tlsConfig":{"shape":"TlsConfig"}
       },
@@ -6341,7 +6359,7 @@
         },
         "endpointConfiguration":{
           "shape":"EndpointConfiguration",
-          "documentation":"<p>The endpoint configuration of this RestApi showing the endpoint types of the API. </p>"
+          "documentation":"<p>The endpoint configuration of this RestApi showing the endpoint types and IP address types of the API. </p>"
         },
         "policy":{
           "shape":"String",
@@ -6374,6 +6392,14 @@
       },
       "documentation":"<p>Contains references to your APIs and links that guide you in how to interact with your collection. A collection offers a paginated view of your APIs.</p>"
     },
+    "RoutingMode":{
+      "type":"string",
+      "enum":[
+        "BASE_PATH_MAPPING_ONLY",
+        "ROUTING_RULE_ONLY",
+        "ROUTING_RULE_THEN_BASE_PATH_MAPPING"
+      ]
+    },
     "SdkConfigurationProperty":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json 2.31.35-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigatewaymanagementapi/2018-11-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,217 +1,243 @@
 {
-  "metadata" : {
-    "apiVersion" : "2018-11-29",
-    "endpointPrefix" : "execute-api",
-    "signingName" : "execute-api",
-    "serviceFullName" : "AmazonApiGatewayManagementApi",
-    "serviceId" : "ApiGatewayManagementApi",
-    "protocol" : "rest-json",
-    "jsonVersion" : "1.1",
-    "uid" : "apigatewaymanagementapi-2018-11-29",
-    "signatureVersion" : "v4"
+  "metadata": {
+    "apiVersion": "2018-11-29",
+    "endpointPrefix": "execute-api",
+    "signingName": "execute-api",
+    "serviceFullName": "AmazonApiGatewayManagementApi",
+    "serviceId": "ApiGatewayManagementApi",
+    "protocol": "rest-json",
+    "jsonVersion": "1.1",
+    "uid": "apigatewaymanagementapi-2018-11-29",
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
-  "operations" : {
-    "DeleteConnection" : {
-      "name" : "DeleteConnection",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/@connections/{connectionId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteConnectionRequest"
-      },
-      "errors" : [ {
-        "shape" : "GoneException",
-        "documentation" : "<p>The connection with the provided id no longer exists.</p>"
-      }, {
-        "shape" : "LimitExceededException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The caller is not authorized to invoke this operation.</p>"
-      } ],
-      "documentation" : "<p>Delete the connection with the provided id.</p>"
-    },
-    "GetConnection" : {
-      "name" : "GetConnection",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/@connections/{connectionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetConnectionRequest"
-      },
-      "output" : {
-        "shape" : "GetConnectionResponse"
-      },
-      "errors" : [ {
-        "shape" : "GoneException",
-        "documentation" : "<p>The connection with the provided id no longer exists.</p>"
-      }, {
-        "shape" : "LimitExceededException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The caller is not authorized to invoke this operation.</p>"
-      } ],
-      "documentation" : "<p>Get information about the connection with the provided id.</p>"
-    },
-    "PostToConnection" : {
-      "name" : "PostToConnection",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/@connections/{connectionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "PostToConnectionRequest"
-      },
-      "errors" : [ {
-        "shape" : "GoneException",
-        "documentation" : "<p>The connection with the provided id no longer exists.</p>"
-      }, {
-        "shape" : "LimitExceededException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
-      }, {
-        "shape" : "PayloadTooLargeException",
-        "documentation" : "<p>The data has exceeded the maximum size allowed.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The caller is not authorized to invoke this operation.</p>"
-      } ],
-      "documentation" : "<p>Sends the provided data to the specified connection.</p>"
+  "operations": {
+    "DeleteConnection": {
+      "name": "DeleteConnection",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/@connections/{connectionId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteConnectionRequest"
+      },
+      "errors": [
+        {
+          "shape": "GoneException",
+          "documentation": "<p>The connection with the provided id no longer exists.</p>"
+        },
+        {
+          "shape": "LimitExceededException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The caller is not authorized to invoke this operation.</p>"
+        }
+      ],
+      "documentation": "<p>Delete the connection with the provided id.</p>"
+    },
+    "GetConnection": {
+      "name": "GetConnection",
+      "http": {
+        "method": "GET",
+        "requestUri": "/@connections/{connectionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetConnectionRequest"
+      },
+      "output": {
+        "shape": "GetConnectionResponse"
+      },
+      "errors": [
+        {
+          "shape": "GoneException",
+          "documentation": "<p>The connection with the provided id no longer exists.</p>"
+        },
+        {
+          "shape": "LimitExceededException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The caller is not authorized to invoke this operation.</p>"
+        }
+      ],
+      "documentation": "<p>Get information about the connection with the provided id.</p>"
+    },
+    "PostToConnection": {
+      "name": "PostToConnection",
+      "http": {
+        "method": "POST",
+        "requestUri": "/@connections/{connectionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "PostToConnectionRequest"
+      },
+      "errors": [
+        {
+          "shape": "GoneException",
+          "documentation": "<p>The connection with the provided id no longer exists.</p>"
+        },
+        {
+          "shape": "LimitExceededException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>"
+        },
+        {
+          "shape": "PayloadTooLargeException",
+          "documentation": "<p>The data has exceeded the maximum size allowed.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The caller is not authorized to invoke this operation.</p>"
+        }
+      ],
+      "documentation": "<p>Sends the provided data to the specified connection.</p>"
     }
   },
-  "shapes" : {
-    "Data" : {
-      "type" : "blob",
-      "max" : 131072,
-      "documentation" : "<p>The data to be sent to the client specified by its connection id.</p>"
-    },
-    "DeleteConnectionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "connectionId"
-        }
-      },
-      "required" : [ "ConnectionId" ]
-    },
-    "ForbiddenException" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "<p>The caller is not authorized to invoke this operation.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 403
+  "shapes": {
+    "Data": {
+      "type": "blob",
+      "max": 131072,
+      "documentation": "<p>The data to be sent to the client specified by its connection id.</p>"
+    },
+    "DeleteConnectionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "connectionId"
+        }
+      },
+      "required": [
+        "ConnectionId"
+      ]
+    },
+    "ForbiddenException": {
+      "type": "structure",
+      "members": {},
+      "documentation": "<p>The caller is not authorized to invoke this operation.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 403
       }
     },
-    "GetConnectionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "connectionId"
-        }
-      },
-      "required" : [ "ConnectionId" ]
-    },
-    "GetConnectionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectedAt" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "connectedAt",
-          "documentation" : "<p>The time in ISO 8601 format for when the connection was established.</p>"
-        },
-        "Identity" : {
-          "shape" : "Identity",
-          "locationName" : "identity"
-        },
-        "LastActiveAt" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "lastActiveAt",
-          "documentation" : "<p>The time in ISO 8601 format for when the connection was last active.</p>"
+    "GetConnectionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "connectionId"
+        }
+      },
+      "required": [
+        "ConnectionId"
+      ]
+    },
+    "GetConnectionResponse": {
+      "type": "structure",
+      "members": {
+        "ConnectedAt": {
+          "shape": "__timestampIso8601",
+          "locationName": "connectedAt",
+          "documentation": "<p>The time in ISO 8601 format for when the connection was established.</p>"
+        },
+        "Identity": {
+          "shape": "Identity",
+          "locationName": "identity"
+        },
+        "LastActiveAt": {
+          "shape": "__timestampIso8601",
+          "locationName": "lastActiveAt",
+          "documentation": "<p>The time in ISO 8601 format for when the connection was last active.</p>"
         }
       }
     },
-    "GoneException" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "<p>The connection with the provided id no longer exists.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 410
+    "GoneException": {
+      "type": "structure",
+      "members": {},
+      "documentation": "<p>The connection with the provided id no longer exists.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 410
       }
     },
-    "Identity" : {
-      "type" : "structure",
-      "members" : {
-        "SourceIp" : {
-          "shape" : "__string",
-          "locationName" : "sourceIp",
-          "documentation" : "<p>The source IP address of the TCP connection making the request to API Gateway.</p>"
-        },
-        "UserAgent" : {
-          "shape" : "__string",
-          "locationName" : "userAgent",
-          "documentation" : "<p>The User Agent of the API caller.</p>"
-        }
-      },
-      "required" : [ "SourceIp", "UserAgent" ]
-    },
-    "PayloadTooLargeException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message"
-        }
-      },
-      "documentation" : "<p>The data has exceeded the maximum size allowed.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 413
+    "Identity": {
+      "type": "structure",
+      "members": {
+        "SourceIp": {
+          "shape": "__string",
+          "locationName": "sourceIp",
+          "documentation": "<p>The source IP address of the TCP connection making the request to API Gateway.</p>"
+        },
+        "UserAgent": {
+          "shape": "__string",
+          "locationName": "userAgent",
+          "documentation": "<p>The User Agent of the API caller.</p>"
+        }
+      },
+      "required": [
+        "SourceIp",
+        "UserAgent"
+      ]
+    },
+    "PayloadTooLargeException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message"
+        }
+      },
+      "documentation": "<p>The data has exceeded the maximum size allowed.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 413
       }
     },
-    "PostToConnectionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Data" : {
-          "shape" : "Data",
-          "documentation" : "<p>The data to be sent to the client specified by its connection id.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The identifier of the connection that a specific client is using.</p>"
-        }
-      },
-      "required" : [ "ConnectionId", "Data" ],
-      "payload" : "Data"
-    },
-    "LimitExceededException" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 429
+    "PostToConnectionRequest": {
+      "type": "structure",
+      "members": {
+        "Data": {
+          "shape": "Data",
+          "documentation": "<p>The data to be sent to the client specified by its connection id.</p>"
+        },
+        "ConnectionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "connectionId",
+          "documentation": "<p>The identifier of the connection that a specific client is using.</p>"
+        }
+      },
+      "required": [
+        "ConnectionId",
+        "Data"
+      ],
+      "payload": "Data"
+    },
+    "LimitExceededException": {
+      "type": "structure",
+      "members": {},
+      "documentation": "<p>The client is sending more than the allowed number of requests per unit of time or the WebSocket client side buffer is full.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 429
       }
     },
-    "__string" : {
-      "type" : "string"
+    "__string": {
+      "type": "string"
     },
-    "__timestampIso8601" : {
-      "type" : "timestamp",
-      "timestampFormat" : "iso8601"
+    "__timestampIso8601": {
+      "type": "timestamp",
+      "timestampFormat": "iso8601"
     }
   },
-  "documentation" : "<p>The Amazon API Gateway Management API allows you to directly manage runtime aspects of your deployed APIs. To use it, you must explicitly set the SDK's endpoint to point to the endpoint of your deployed API. The endpoint will be of the form https://{api-id}.execute-api.{region}.amazonaws.com/{stage}, or will be the endpoint corresponding to your API's custom domain and base path, if applicable.</p>"
+  "documentation": "<p>The Amazon API Gateway Management API allows you to directly manage runtime aspects of your deployed APIs. To use it, you must explicitly set the SDK's endpoint to point to the endpoint of your deployed API. The endpoint will be of the form https://{api-id}.execute-api.{region}.amazonaws.com/{stage}, or will be the endpoint corresponding to your API's custom domain and base path, if applicable.</p>"
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/paginators-1.json 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -59,6 +59,12 @@
       "limit_key": "MaxResults",
       "output_token": "NextToken",
       "result_key": "Items"
+    },
+    "ListRoutingRules": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "RoutingRules"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/service-2.json 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/apigatewayv2/2018-11-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apigatewayv2/2018-11-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,8818 +1,10182 @@
 {
-  "metadata" : {
-    "apiVersion" : "2018-11-29",
-    "endpointPrefix" : "apigateway",
-    "signingName" : "apigateway",
-    "serviceFullName" : "AmazonApiGatewayV2",
-    "serviceId" : "ApiGatewayV2",
-    "protocol" : "rest-json",
-    "jsonVersion" : "1.1",
-    "uid" : "apigatewayv2-2018-11-29",
-    "signatureVersion" : "v4"
+  "metadata": {
+    "apiVersion": "2018-11-29",
+    "endpointPrefix": "apigateway",
+    "signingName": "apigateway",
+    "serviceFullName": "AmazonApiGatewayV2",
+    "serviceId": "ApiGatewayV2",
+    "protocol": "rest-json",
+    "jsonVersion": "1.1",
+    "uid": "apigatewayv2-2018-11-29",
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
-  "operations" : {
-    "CreateApi" : {
-      "name" : "CreateApi",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateApiRequest"
-      },
-      "output" : {
-        "shape" : "CreateApiResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates an Api resource.</p>"
-    },
-    "CreateApiMapping" : {
-      "name" : "CreateApiMapping",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/domainnames/{domainName}/apimappings",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateApiMappingRequest"
-      },
-      "output" : {
-        "shape" : "CreateApiMappingResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates an API mapping.</p>"
-    },
-    "CreateAuthorizer" : {
-      "name" : "CreateAuthorizer",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/authorizers",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateAuthorizerRequest"
-      },
-      "output" : {
-        "shape" : "CreateAuthorizerResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates an Authorizer for an API.</p>"
-    },
-    "CreateDeployment" : {
-      "name" : "CreateDeployment",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/deployments",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "CreateDeploymentResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a Deployment for an API.</p>"
-    },
-    "CreateDomainName" : {
-      "name" : "CreateDomainName",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/domainnames",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateDomainNameRequest"
-      },
-      "output" : {
-        "shape" : "CreateDomainNameResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      }, {
-        "shape" : "AccessDeniedException",
-        "documentation" : "<p>403 response</p>"
-      } ],
-      "documentation" : "<p>Creates a domain name.</p>"
-    },
-    "CreateIntegration" : {
-      "name" : "CreateIntegration",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/integrations",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateIntegrationRequest"
-      },
-      "output" : {
-        "shape" : "CreateIntegrationResult",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates an Integration.</p>"
-    },
-    "CreateIntegrationResponse" : {
-      "name" : "CreateIntegrationResponse",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateIntegrationResponseRequest"
-      },
-      "output" : {
-        "shape" : "CreateIntegrationResponseResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates an IntegrationResponses.</p>"
-    },
-    "CreateModel" : {
-      "name" : "CreateModel",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/models",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateModelRequest"
-      },
-      "output" : {
-        "shape" : "CreateModelResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a Model for an API.</p>"
-    },
-    "CreateRoute" : {
-      "name" : "CreateRoute",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/routes",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateRouteRequest"
-      },
-      "output" : {
-        "shape" : "CreateRouteResult",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a Route for an API.</p>"
-    },
-    "CreateRouteResponse" : {
-      "name" : "CreateRouteResponse",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/routeresponses",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateRouteResponseRequest"
-      },
-      "output" : {
-        "shape" : "CreateRouteResponseResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a RouteResponse for a Route.</p>"
-    },
-    "CreateStage" : {
-      "name" : "CreateStage",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/apis/{apiId}/stages",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateStageRequest"
-      },
-      "output" : {
-        "shape" : "CreateStageResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a Stage for an API.</p>"
-    },
-    "CreateVpcLink" : {
-      "name" : "CreateVpcLink",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/vpclinks",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateVpcLinkRequest"
-      },
-      "output" : {
-        "shape" : "CreateVpcLinkResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Creates a VPC link.</p>"
-    },
-    "DeleteAccessLogSettings" : {
-      "name" : "DeleteAccessLogSettings",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}/accesslogsettings",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteAccessLogSettingsRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes the AccessLogSettings for a Stage. To disable access logging for a Stage, delete its AccessLogSettings.</p>"
-    },
-    "DeleteApi" : {
-      "name" : "DeleteApi",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteApiRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes an Api resource.</p>"
-    },
-    "DeleteApiMapping" : {
-      "name" : "DeleteApiMapping",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteApiMappingRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Deletes an API mapping.</p>"
-    },
-    "DeleteAuthorizer" : {
-      "name" : "DeleteAuthorizer",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/authorizers/{authorizerId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteAuthorizerRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes an Authorizer.</p>"
-    },
-    "DeleteCorsConfiguration" : {
-      "name" : "DeleteCorsConfiguration",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/cors",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteCorsConfigurationRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a CORS configuration.</p>"
-    },
-    "DeleteDeployment" : {
-      "name" : "DeleteDeployment",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/deployments/{deploymentId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteDeploymentRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a Deployment.</p>"
-    },
-    "DeleteDomainName" : {
-      "name" : "DeleteDomainName",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/domainnames/{domainName}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteDomainNameRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a domain name.</p>"
-    },
-    "DeleteIntegration" : {
-      "name" : "DeleteIntegration",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteIntegrationRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes an Integration.</p>"
-    },
-    "DeleteIntegrationResponse" : {
-      "name" : "DeleteIntegrationResponse",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteIntegrationResponseRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes an IntegrationResponses.</p>"
-    },
-    "DeleteModel" : {
-      "name" : "DeleteModel",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/models/{modelId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteModelRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a Model.</p>"
-    },
-    "DeleteRoute" : {
-      "name" : "DeleteRoute",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteRouteRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a Route.</p>"
-    },
-    "DeleteRouteRequestParameter" : {
-      "name" : "DeleteRouteRequestParameter",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/requestparameters/{requestParameterKey}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteRouteRequestParameterRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a route request parameter. Supported only for WebSocket APIs.</p>"
-    },
-    "DeleteRouteResponse" : {
-      "name" : "DeleteRouteResponse",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteRouteResponseRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a RouteResponse.</p>"
-    },
-    "DeleteRouteSettings" : {
-      "name" : "DeleteRouteSettings",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}/routesettings/{routeKey}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteRouteSettingsRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes the RouteSettings for a stage.</p>"
-    },
-    "DeleteStage" : {
-      "name" : "DeleteStage",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteStageRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a Stage.</p>"
-    },
-    "DeleteVpcLink" : {
-      "name" : "DeleteVpcLink",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/vpclinks/{vpcLinkId}",
-        "responseCode" : 202
-      },
-      "input" : {
-        "shape" : "DeleteVpcLinkRequest"
-      },
-      "output" : {
-        "shape" : "DeleteVpcLinkResponse",
-        "documentation" : "<p>202 response</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Deletes a VPC link.</p>"
-    },
-    "ExportApi" : {
-      "name" : "ExportApi",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/exports/{specification}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ExportApiRequest"
-      },
-      "output" : {
-        "shape" : "ExportApiResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ]
-    },
-    "ResetAuthorizersCache" : {
-      "name" : "ResetAuthorizersCache",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}/cache/authorizers",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "ResetAuthorizersCacheRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Resets all authorizer cache entries on a stage. Supported only for HTTP APIs.</p>"
-    },
-    "GetApi" : {
-      "name" : "GetApi",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApiRequest"
-      },
-      "output" : {
-        "shape" : "GetApiResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets an Api resource.</p>"
-    },
-    "GetApiMapping" : {
-      "name" : "GetApiMapping",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApiMappingRequest"
-      },
-      "output" : {
-        "shape" : "GetApiMappingResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets an API mapping.</p>"
-    },
-    "GetApiMappings" : {
-      "name" : "GetApiMappings",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/domainnames/{domainName}/apimappings",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApiMappingsRequest"
-      },
-      "output" : {
-        "shape" : "GetApiMappingsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets API mappings.</p>"
-    },
-    "GetApis" : {
-      "name" : "GetApis",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApisRequest"
-      },
-      "output" : {
-        "shape" : "GetApisResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets a collection of Api resources.</p>"
-    },
-    "GetAuthorizer" : {
-      "name" : "GetAuthorizer",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/authorizers/{authorizerId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetAuthorizerRequest"
-      },
-      "output" : {
-        "shape" : "GetAuthorizerResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets an Authorizer.</p>"
-    },
-    "GetAuthorizers" : {
-      "name" : "GetAuthorizers",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/authorizers",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetAuthorizersRequest"
-      },
-      "output" : {
-        "shape" : "GetAuthorizersResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Authorizers for an API.</p>"
-    },
-    "GetDeployment" : {
-      "name" : "GetDeployment",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/deployments/{deploymentId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "GetDeploymentResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a Deployment.</p>"
-    },
-    "GetDeployments" : {
-      "name" : "GetDeployments",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/deployments",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDeploymentsRequest"
-      },
-      "output" : {
-        "shape" : "GetDeploymentsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Deployments for an API.</p>"
-    },
-    "GetDomainName" : {
-      "name" : "GetDomainName",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/domainnames/{domainName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDomainNameRequest"
-      },
-      "output" : {
-        "shape" : "GetDomainNameResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a domain name.</p>"
-    },
-    "GetDomainNames" : {
-      "name" : "GetDomainNames",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/domainnames",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDomainNamesRequest"
-      },
-      "output" : {
-        "shape" : "GetDomainNamesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the domain names for an AWS account.</p>"
-    },
-    "GetIntegration" : {
-      "name" : "GetIntegration",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetIntegrationRequest"
-      },
-      "output" : {
-        "shape" : "GetIntegrationResult",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets an Integration.</p>"
-    },
-    "GetIntegrationResponse" : {
-      "name" : "GetIntegrationResponse",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetIntegrationResponseRequest"
-      },
-      "output" : {
-        "shape" : "GetIntegrationResponseResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets an IntegrationResponses.</p>"
-    },
-    "GetIntegrationResponses" : {
-      "name" : "GetIntegrationResponses",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetIntegrationResponsesRequest"
-      },
-      "output" : {
-        "shape" : "GetIntegrationResponsesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the IntegrationResponses for an Integration.</p>"
-    },
-    "GetIntegrations" : {
-      "name" : "GetIntegrations",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/integrations",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetIntegrationsRequest"
-      },
-      "output" : {
-        "shape" : "GetIntegrationsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Integrations for an API.</p>"
-    },
-    "GetModel" : {
-      "name" : "GetModel",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/models/{modelId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetModelRequest"
-      },
-      "output" : {
-        "shape" : "GetModelResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a Model.</p>"
-    },
-    "GetModelTemplate" : {
-      "name" : "GetModelTemplate",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/models/{modelId}/template",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetModelTemplateRequest"
-      },
-      "output" : {
-        "shape" : "GetModelTemplateResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a model template.</p>"
-    },
-    "GetModels" : {
-      "name" : "GetModels",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/models",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetModelsRequest"
-      },
-      "output" : {
-        "shape" : "GetModelsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Models for an API.</p>"
-    },
-    "GetRoute" : {
-      "name" : "GetRoute",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetRouteRequest"
-      },
-      "output" : {
-        "shape" : "GetRouteResult",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a Route.</p>"
-    },
-    "GetRouteResponse" : {
-      "name" : "GetRouteResponse",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetRouteResponseRequest"
-      },
-      "output" : {
-        "shape" : "GetRouteResponseResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a RouteResponse.</p>"
-    },
-    "GetRouteResponses" : {
-      "name" : "GetRouteResponses",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/routeresponses",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetRouteResponsesRequest"
-      },
-      "output" : {
-        "shape" : "GetRouteResponsesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the RouteResponses for a Route.</p>"
-    },
-    "GetRoutes" : {
-      "name" : "GetRoutes",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/routes",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetRoutesRequest"
-      },
-      "output" : {
-        "shape" : "GetRoutesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Routes for an API.</p>"
-    },
-    "GetStage" : {
-      "name" : "GetStage",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetStageRequest"
-      },
-      "output" : {
-        "shape" : "GetStageResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a Stage.</p>"
-    },
-    "GetStages" : {
-      "name" : "GetStages",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/apis/{apiId}/stages",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetStagesRequest"
-      },
-      "output" : {
-        "shape" : "GetStagesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Gets the Stages for an API.</p>"
-    },
-    "GetTags" : {
-      "name" : "GetTags",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/tags/{resource-arn}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetTagsRequest"
-      },
-      "output" : {
-        "shape" : "GetTagsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Gets a collection of Tag resources.</p>"
-    },
-    "GetVpcLink" : {
-      "name" : "GetVpcLink",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/vpclinks/{vpcLinkId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetVpcLinkRequest"
-      },
-      "output" : {
-        "shape" : "GetVpcLinkResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a VPC link.</p>"
-    },
-    "GetVpcLinks" : {
-      "name" : "GetVpcLinks",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v2/vpclinks",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetVpcLinksRequest"
-      },
-      "output" : {
-        "shape" : "GetVpcLinksResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      } ],
-      "documentation" : "<p>Gets a collection of VPC links.</p>"
-    },
-    "ImportApi" : {
-      "name" : "ImportApi",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/v2/apis",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "ImportApiRequest"
-      },
-      "output" : {
-        "shape" : "ImportApiResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Imports an API.</p>"
-    },
-    "ReimportApi" : {
-      "name" : "ReimportApi",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/v2/apis/{apiId}",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "ReimportApiRequest"
-      },
-      "output" : {
-        "shape" : "ReimportApiResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Puts an Api resource.</p>"
-    },
-    "TagResource" : {
-      "name" : "TagResource",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v2/tags/{resource-arn}",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "TagResourceRequest"
-      },
-      "output" : {
-        "shape" : "TagResourceResponse",
-        "documentation" : "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Creates a new Tag resource to represent a tag.</p>"
-    },
-    "UntagResource" : {
-      "name" : "UntagResource",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v2/tags/{resource-arn}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "UntagResourceRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Deletes a Tag.</p>"
-    },
-    "UpdateApi" : {
-      "name" : "UpdateApi",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateApiRequest"
-      },
-      "output" : {
-        "shape" : "UpdateApiResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates an Api resource.</p>"
-    },
-    "UpdateApiMapping" : {
-      "name" : "UpdateApiMapping",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateApiMappingRequest"
-      },
-      "output" : {
-        "shape" : "UpdateApiMappingResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>The API mapping.</p>"
-    },
-    "UpdateAuthorizer" : {
-      "name" : "UpdateAuthorizer",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/authorizers/{authorizerId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateAuthorizerRequest"
-      },
-      "output" : {
-        "shape" : "UpdateAuthorizerResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates an Authorizer.</p>"
-    },
-    "UpdateDeployment" : {
-      "name" : "UpdateDeployment",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/deployments/{deploymentId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "UpdateDeploymentResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a Deployment.</p>"
-    },
-    "UpdateDomainName" : {
-      "name" : "UpdateDomainName",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/domainnames/{domainName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateDomainNameRequest"
-      },
-      "output" : {
-        "shape" : "UpdateDomainNameResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a domain name.</p>"
-    },
-    "UpdateIntegration" : {
-      "name" : "UpdateIntegration",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateIntegrationRequest"
-      },
-      "output" : {
-        "shape" : "UpdateIntegrationResult",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates an Integration.</p>"
-    },
-    "UpdateIntegrationResponse" : {
-      "name" : "UpdateIntegrationResponse",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateIntegrationResponseRequest"
-      },
-      "output" : {
-        "shape" : "UpdateIntegrationResponseResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates an IntegrationResponses.</p>"
-    },
-    "UpdateModel" : {
-      "name" : "UpdateModel",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/models/{modelId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateModelRequest"
-      },
-      "output" : {
-        "shape" : "UpdateModelResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a Model.</p>"
-    },
-    "UpdateRoute" : {
-      "name" : "UpdateRoute",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateRouteRequest"
-      },
-      "output" : {
-        "shape" : "UpdateRouteResult",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a Route.</p>"
-    },
-    "UpdateRouteResponse" : {
-      "name" : "UpdateRouteResponse",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateRouteResponseRequest"
-      },
-      "output" : {
-        "shape" : "UpdateRouteResponseResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a RouteResponse.</p>"
-    },
-    "UpdateStage" : {
-      "name" : "UpdateStage",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/apis/{apiId}/stages/{stageName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateStageRequest"
-      },
-      "output" : {
-        "shape" : "UpdateStageResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates a Stage.</p>"
-    },
-    "UpdateVpcLink" : {
-      "name" : "UpdateVpcLink",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/v2/vpclinks/{vpcLinkId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateVpcLinkRequest"
-      },
-      "output" : {
-        "shape" : "UpdateVpcLinkResponse",
-        "documentation" : "<p>200 response</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource specified in the request was not found.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      } ],
-      "documentation" : "<p>Updates a VPC link.</p>"
+  "operations": {
+    "CreateApi": {
+      "name": "CreateApi",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateApiRequest"
+      },
+      "output": {
+        "shape": "CreateApiResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an Api resource.</p>"
+    },
+    "CreateApiMapping": {
+      "name": "CreateApiMapping",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/domainnames/{domainName}/apimappings",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateApiMappingRequest"
+      },
+      "output": {
+        "shape": "CreateApiMappingResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an API mapping.</p>"
+    },
+    "CreateAuthorizer": {
+      "name": "CreateAuthorizer",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/authorizers",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateAuthorizerRequest"
+      },
+      "output": {
+        "shape": "CreateAuthorizerResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an Authorizer for an API.</p>"
+    },
+    "CreateDeployment": {
+      "name": "CreateDeployment",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/deployments",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateDeploymentRequest"
+      },
+      "output": {
+        "shape": "CreateDeploymentResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a Deployment for an API.</p>"
+    },
+    "CreateDomainName": {
+      "name": "CreateDomainName",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/domainnames",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateDomainNameRequest"
+      },
+      "output": {
+        "shape": "CreateDomainNameResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        },
+        {
+          "shape": "AccessDeniedException",
+          "documentation": "<p>403 response</p>"
+        }
+      ],
+      "documentation": "<p>Creates a domain name.</p>"
+    },
+    "CreateIntegration": {
+      "name": "CreateIntegration",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/integrations",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateIntegrationRequest"
+      },
+      "output": {
+        "shape": "CreateIntegrationResult",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an Integration.</p>"
+    },
+    "CreateIntegrationResponse": {
+      "name": "CreateIntegrationResponse",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateIntegrationResponseRequest"
+      },
+      "output": {
+        "shape": "CreateIntegrationResponseResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an IntegrationResponses.</p>"
+    },
+    "CreateModel": {
+      "name": "CreateModel",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/models",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateModelRequest"
+      },
+      "output": {
+        "shape": "CreateModelResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a Model for an API.</p>"
+    },
+    "CreateRoute": {
+      "name": "CreateRoute",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/routes",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateRouteRequest"
+      },
+      "output": {
+        "shape": "CreateRouteResult",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a Route for an API.</p>"
+    },
+    "CreateRouteResponse": {
+      "name": "CreateRouteResponse",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/routeresponses",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateRouteResponseRequest"
+      },
+      "output": {
+        "shape": "CreateRouteResponseResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a RouteResponse for a Route.</p>"
+    },
+    "CreateRoutingRule": {
+      "name": "CreateRoutingRule",
+      "documentation": "<p>Creates a RoutingRule.</p>",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/domainnames/{domainName}/routingrules",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateRoutingRuleRequest"
+      },
+      "output": {
+        "shape": "CreateRoutingRuleResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ]
+    },
+    "CreateStage": {
+      "name": "CreateStage",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/apis/{apiId}/stages",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateStageRequest"
+      },
+      "output": {
+        "shape": "CreateStageResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a Stage for an API.</p>"
+    },
+    "CreateVpcLink": {
+      "name": "CreateVpcLink",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/vpclinks",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateVpcLinkRequest"
+      },
+      "output": {
+        "shape": "CreateVpcLinkResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a VPC link.</p>"
+    },
+    "DeleteAccessLogSettings": {
+      "name": "DeleteAccessLogSettings",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}/accesslogsettings",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteAccessLogSettingsRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes the AccessLogSettings for a Stage. To disable access logging for a Stage, delete its AccessLogSettings.</p>"
+    },
+    "DeleteApi": {
+      "name": "DeleteApi",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteApiRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes an Api resource.</p>"
+    },
+    "DeleteApiMapping": {
+      "name": "DeleteApiMapping",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteApiMappingRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes an API mapping.</p>"
+    },
+    "DeleteAuthorizer": {
+      "name": "DeleteAuthorizer",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/authorizers/{authorizerId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteAuthorizerRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes an Authorizer.</p>"
+    },
+    "DeleteCorsConfiguration": {
+      "name": "DeleteCorsConfiguration",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/cors",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteCorsConfigurationRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a CORS configuration.</p>"
+    },
+    "DeleteDeployment": {
+      "name": "DeleteDeployment",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/deployments/{deploymentId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteDeploymentRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a Deployment.</p>"
+    },
+    "DeleteDomainName": {
+      "name": "DeleteDomainName",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/domainnames/{domainName}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteDomainNameRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a domain name.</p>"
+    },
+    "DeleteIntegration": {
+      "name": "DeleteIntegration",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteIntegrationRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes an Integration.</p>"
+    },
+    "DeleteIntegrationResponse": {
+      "name": "DeleteIntegrationResponse",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteIntegrationResponseRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes an IntegrationResponses.</p>"
+    },
+    "DeleteModel": {
+      "name": "DeleteModel",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/models/{modelId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteModelRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a Model.</p>"
+    },
+    "DeleteRoute": {
+      "name": "DeleteRoute",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteRouteRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a Route.</p>"
+    },
+    "DeleteRouteRequestParameter": {
+      "name": "DeleteRouteRequestParameter",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/requestparameters/{requestParameterKey}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteRouteRequestParameterRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a route request parameter. Supported only for WebSocket APIs.</p>"
+    },
+    "DeleteRouteResponse": {
+      "name": "DeleteRouteResponse",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteRouteResponseRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a RouteResponse.</p>"
+    },
+    "DeleteRouteSettings": {
+      "name": "DeleteRouteSettings",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}/routesettings/{routeKey}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteRouteSettingsRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes the RouteSettings for a stage.</p>"
+    },
+    "DeleteRoutingRule": {
+      "name": "DeleteRoutingRule",
+      "documentation": "<p>Deletes a routing rule.</p>",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/domainnames/{domainName}/routingrules/{routingRuleId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteRoutingRuleRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "idempotent": true
+    },
+    "DeleteStage": {
+      "name": "DeleteStage",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteStageRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a Stage.</p>"
+    },
+    "DeleteVpcLink": {
+      "name": "DeleteVpcLink",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/vpclinks/{vpcLinkId}",
+        "responseCode": 202
+      },
+      "input": {
+        "shape": "DeleteVpcLinkRequest"
+      },
+      "output": {
+        "shape": "DeleteVpcLinkResponse",
+        "documentation": "<p>202 response</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a VPC link.</p>"
+    },
+    "ExportApi": {
+      "name": "ExportApi",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/exports/{specification}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ExportApiRequest"
+      },
+      "output": {
+        "shape": "ExportApiResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ]
+    },
+    "ResetAuthorizersCache": {
+      "name": "ResetAuthorizersCache",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}/cache/authorizers",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "ResetAuthorizersCacheRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Resets all authorizer cache entries on a stage. Supported only for HTTP APIs.</p>"
+    },
+    "GetApi": {
+      "name": "GetApi",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApiRequest"
+      },
+      "output": {
+        "shape": "GetApiResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets an Api resource.</p>"
+    },
+    "GetApiMapping": {
+      "name": "GetApiMapping",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApiMappingRequest"
+      },
+      "output": {
+        "shape": "GetApiMappingResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets an API mapping.</p>"
+    },
+    "GetApiMappings": {
+      "name": "GetApiMappings",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames/{domainName}/apimappings",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApiMappingsRequest"
+      },
+      "output": {
+        "shape": "GetApiMappingsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets API mappings.</p>"
+    },
+    "GetApis": {
+      "name": "GetApis",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApisRequest"
+      },
+      "output": {
+        "shape": "GetApisResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a collection of Api resources.</p>"
+    },
+    "GetAuthorizer": {
+      "name": "GetAuthorizer",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/authorizers/{authorizerId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetAuthorizerRequest"
+      },
+      "output": {
+        "shape": "GetAuthorizerResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets an Authorizer.</p>"
+    },
+    "GetAuthorizers": {
+      "name": "GetAuthorizers",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/authorizers",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetAuthorizersRequest"
+      },
+      "output": {
+        "shape": "GetAuthorizersResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Authorizers for an API.</p>"
+    },
+    "GetDeployment": {
+      "name": "GetDeployment",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/deployments/{deploymentId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDeploymentRequest"
+      },
+      "output": {
+        "shape": "GetDeploymentResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a Deployment.</p>"
+    },
+    "GetDeployments": {
+      "name": "GetDeployments",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/deployments",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDeploymentsRequest"
+      },
+      "output": {
+        "shape": "GetDeploymentsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Deployments for an API.</p>"
+    },
+    "GetDomainName": {
+      "name": "GetDomainName",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames/{domainName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDomainNameRequest"
+      },
+      "output": {
+        "shape": "GetDomainNameResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a domain name.</p>"
+    },
+    "GetDomainNames": {
+      "name": "GetDomainNames",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDomainNamesRequest"
+      },
+      "output": {
+        "shape": "GetDomainNamesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the domain names for an AWS account.</p>"
+    },
+    "GetIntegration": {
+      "name": "GetIntegration",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetIntegrationRequest"
+      },
+      "output": {
+        "shape": "GetIntegrationResult",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets an Integration.</p>"
+    },
+    "GetIntegrationResponse": {
+      "name": "GetIntegrationResponse",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetIntegrationResponseRequest"
+      },
+      "output": {
+        "shape": "GetIntegrationResponseResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets an IntegrationResponses.</p>"
+    },
+    "GetIntegrationResponses": {
+      "name": "GetIntegrationResponses",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetIntegrationResponsesRequest"
+      },
+      "output": {
+        "shape": "GetIntegrationResponsesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the IntegrationResponses for an Integration.</p>"
+    },
+    "GetIntegrations": {
+      "name": "GetIntegrations",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/integrations",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetIntegrationsRequest"
+      },
+      "output": {
+        "shape": "GetIntegrationsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Integrations for an API.</p>"
+    },
+    "GetModel": {
+      "name": "GetModel",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/models/{modelId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetModelRequest"
+      },
+      "output": {
+        "shape": "GetModelResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a Model.</p>"
+    },
+    "GetModelTemplate": {
+      "name": "GetModelTemplate",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/models/{modelId}/template",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetModelTemplateRequest"
+      },
+      "output": {
+        "shape": "GetModelTemplateResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a model template.</p>"
+    },
+    "GetModels": {
+      "name": "GetModels",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/models",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetModelsRequest"
+      },
+      "output": {
+        "shape": "GetModelsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Models for an API.</p>"
+    },
+    "GetRoute": {
+      "name": "GetRoute",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetRouteRequest"
+      },
+      "output": {
+        "shape": "GetRouteResult",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a Route.</p>"
+    },
+    "GetRouteResponse": {
+      "name": "GetRouteResponse",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetRouteResponseRequest"
+      },
+      "output": {
+        "shape": "GetRouteResponseResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a RouteResponse.</p>"
+    },
+    "GetRouteResponses": {
+      "name": "GetRouteResponses",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/routeresponses",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetRouteResponsesRequest"
+      },
+      "output": {
+        "shape": "GetRouteResponsesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the RouteResponses for a Route.</p>"
+    },
+    "GetRoutes": {
+      "name": "GetRoutes",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/routes",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetRoutesRequest"
+      },
+      "output": {
+        "shape": "GetRoutesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Routes for an API.</p>"
+    },
+    "GetRoutingRule": {
+      "name": "GetRoutingRule",
+      "documentation": "<p>Gets a routing rule.</p>",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames/{domainName}/routingrules/{routingRuleId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetRoutingRuleRequest"
+      },
+      "output": {
+        "shape": "GetRoutingRuleResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ]
+    },
+    "ListRoutingRules": {
+      "name": "ListRoutingRules",
+      "documentation": "<p>Lists routing rules.</p>",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/domainnames/{domainName}/routingrules",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListRoutingRulesRequest"
+      },
+      "output": {
+        "shape": "ListRoutingRulesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ]
+    },
+    "GetStage": {
+      "name": "GetStage",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetStageRequest"
+      },
+      "output": {
+        "shape": "GetStageResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a Stage.</p>"
+    },
+    "GetStages": {
+      "name": "GetStages",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/apis/{apiId}/stages",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetStagesRequest"
+      },
+      "output": {
+        "shape": "GetStagesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the Stages for an API.</p>"
+    },
+    "GetTags": {
+      "name": "GetTags",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/tags/{resource-arn}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetTagsRequest"
+      },
+      "output": {
+        "shape": "GetTagsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a collection of Tag resources.</p>"
+    },
+    "GetVpcLink": {
+      "name": "GetVpcLink",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/vpclinks/{vpcLinkId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetVpcLinkRequest"
+      },
+      "output": {
+        "shape": "GetVpcLinkResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a VPC link.</p>"
+    },
+    "GetVpcLinks": {
+      "name": "GetVpcLinks",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v2/vpclinks",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetVpcLinksRequest"
+      },
+      "output": {
+        "shape": "GetVpcLinksResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      ],
+      "documentation": "<p>Gets a collection of VPC links.</p>"
+    },
+    "ImportApi": {
+      "name": "ImportApi",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/v2/apis",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "ImportApiRequest"
+      },
+      "output": {
+        "shape": "ImportApiResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Imports an API.</p>"
+    },
+    "PutRoutingRule": {
+      "name": "PutRoutingRule",
+      "documentation": "<p>Updates a routing rule.</p>",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/v2/domainnames/{domainName}/routingrules/{routingRuleId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "PutRoutingRuleRequest"
+      },
+      "output": {
+        "shape": "PutRoutingRuleResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "idempotent": true
+    },
+    "ReimportApi": {
+      "name": "ReimportApi",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/v2/apis/{apiId}",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "ReimportApiRequest"
+      },
+      "output": {
+        "shape": "ReimportApiResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Puts an Api resource.</p>"
+    },
+    "TagResource": {
+      "name": "TagResource",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v2/tags/{resource-arn}",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "TagResourceRequest"
+      },
+      "output": {
+        "shape": "TagResourceResponse",
+        "documentation": "<p>The request has succeeded and has resulted in the creation of a resource.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Creates a new Tag resource to represent a tag.</p>"
+    },
+    "UntagResource": {
+      "name": "UntagResource",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v2/tags/{resource-arn}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "UntagResourceRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes a Tag.</p>"
+    },
+    "UpdateApi": {
+      "name": "UpdateApi",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateApiRequest"
+      },
+      "output": {
+        "shape": "UpdateApiResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates an Api resource.</p>"
+    },
+    "UpdateApiMapping": {
+      "name": "UpdateApiMapping",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/domainnames/{domainName}/apimappings/{apiMappingId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateApiMappingRequest"
+      },
+      "output": {
+        "shape": "UpdateApiMappingResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>The API mapping.</p>"
+    },
+    "UpdateAuthorizer": {
+      "name": "UpdateAuthorizer",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/authorizers/{authorizerId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateAuthorizerRequest"
+      },
+      "output": {
+        "shape": "UpdateAuthorizerResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates an Authorizer.</p>"
+    },
+    "UpdateDeployment": {
+      "name": "UpdateDeployment",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/deployments/{deploymentId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateDeploymentRequest"
+      },
+      "output": {
+        "shape": "UpdateDeploymentResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a Deployment.</p>"
+    },
+    "UpdateDomainName": {
+      "name": "UpdateDomainName",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/domainnames/{domainName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateDomainNameRequest"
+      },
+      "output": {
+        "shape": "UpdateDomainNameResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a domain name.</p>"
+    },
+    "UpdateIntegration": {
+      "name": "UpdateIntegration",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateIntegrationRequest"
+      },
+      "output": {
+        "shape": "UpdateIntegrationResult",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates an Integration.</p>"
+    },
+    "UpdateIntegrationResponse": {
+      "name": "UpdateIntegrationResponse",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/integrations/{integrationId}/integrationresponses/{integrationResponseId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateIntegrationResponseRequest"
+      },
+      "output": {
+        "shape": "UpdateIntegrationResponseResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates an IntegrationResponses.</p>"
+    },
+    "UpdateModel": {
+      "name": "UpdateModel",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/models/{modelId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateModelRequest"
+      },
+      "output": {
+        "shape": "UpdateModelResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a Model.</p>"
+    },
+    "UpdateRoute": {
+      "name": "UpdateRoute",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateRouteRequest"
+      },
+      "output": {
+        "shape": "UpdateRouteResult",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a Route.</p>"
+    },
+    "UpdateRouteResponse": {
+      "name": "UpdateRouteResponse",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/routes/{routeId}/routeresponses/{routeResponseId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateRouteResponseRequest"
+      },
+      "output": {
+        "shape": "UpdateRouteResponseResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a RouteResponse.</p>"
+    },
+    "UpdateStage": {
+      "name": "UpdateStage",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/apis/{apiId}/stages/{stageName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateStageRequest"
+      },
+      "output": {
+        "shape": "UpdateStageResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a Stage.</p>"
+    },
+    "UpdateVpcLink": {
+      "name": "UpdateVpcLink",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/v2/vpclinks/{vpcLinkId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateVpcLinkRequest"
+      },
+      "output": {
+        "shape": "UpdateVpcLinkResponse",
+        "documentation": "<p>200 response</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource specified in the request was not found.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      ],
+      "documentation": "<p>Updates a VPC link.</p>"
     }
   },
-  "shapes" : {
-    "AccessDeniedException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message"
-        }
-      },
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 403
-      }
-    },
-    "AccessLogSettings" : {
-      "type" : "structure",
-      "members" : {
-        "DestinationArn" : {
-          "shape" : "Arn",
-          "locationName" : "destinationArn",
-          "documentation" : "<p>The ARN of the CloudWatch Logs log group to receive access logs.</p>"
-        },
-        "Format" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "format",
-          "documentation" : "<p>A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId.</p>"
-        }
-      },
-      "documentation" : "<p>Settings for logging access in a stage.</p>"
-    },
-    "Api" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an API.</p>",
-      "required" : [ "RouteSelectionExpression", "Name", "ProtocolType" ]
-    },
-    "ApiMapping" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingId" : {
-          "shape" : "Id",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an API mapping.</p>",
-      "required" : [ "Stage", "ApiId" ]
-    },
-    "ApiMappings" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfApiMapping",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of ApiMappings resources.</p>"
-    },
-    "Apis" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfApi",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of APIs.</p>"
-    },
-    "Arn" : {
-      "type" : "string",
-      "documentation" : "<p>Represents an Amazon Resource Name (ARN).</p>"
-    },
-    "AuthorizationScopes" : {
-      "type" : "list",
-      "documentation" : "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>",
-      "member" : {
-        "shape" : "StringWithLengthBetween1And64"
-      }
-    },
-    "AuthorizationType" : {
-      "type" : "string",
-      "documentation" : "<p>The authorization type. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer. For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>",
-      "enum" : [ "NONE", "AWS_IAM", "CUSTOM", "JWT" ]
-    },
-    "Authorizer" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an authorizer.</p>",
-      "required" : [ "Name" ]
-    },
-    "AuthorizerType" : {
-      "type" : "string",
-      "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>",
-      "enum" : [ "REQUEST", "JWT" ]
-    },
-    "Authorizers" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfAuthorizer",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of authorizers.</p>"
-    },
-    "BadRequestException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>Describes the error encountered.</p>"
-        }
-      },
-      "documentation" : "<p>The request is not valid, for example, the input is incomplete or incorrect. See the accompanying error message for details.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 400
-      }
-    },
-    "ConflictException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>Describes the error encountered.</p>"
-        }
-      },
-      "documentation" : "<p>The requested operation would cause a conflict with the current state of a service resource associated with the request. Resolve the conflict before retrying this request. See the accompanying error message for details.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 409
-      }
-    },
-    "ConnectionType" : {
-      "type" : "string",
-      "documentation" : "<p>Represents a connection type.</p>",
-      "enum" : [ "INTERNET", "VPC_LINK" ]
-    },
-    "ContentHandlingStrategy" : {
-      "type" : "string",
-      "documentation" : "<p>Specifies how to handle response payload content type conversions. Supported only for WebSocket APIs.</p>",
-      "enum" : [ "CONVERT_TO_BINARY", "CONVERT_TO_TEXT" ]
-    },
-    "Cors" : {
-      "type" : "structure",
-      "members" : {
-        "AllowCredentials" : {
-          "shape" : "__boolean",
-          "locationName" : "allowCredentials",
-          "documentation" : "<p>Specifies whether credentials are included in the CORS request. Supported only for HTTP APIs.</p>"
-        },
-        "AllowHeaders" : {
-          "shape" : "CorsHeaderList",
-          "locationName" : "allowHeaders",
-          "documentation" : "<p>Represents a collection of allowed headers. Supported only for HTTP APIs.</p>"
-        },
-        "AllowMethods" : {
-          "shape" : "CorsMethodList",
-          "locationName" : "allowMethods",
-          "documentation" : "<p>Represents a collection of allowed HTTP methods. Supported only for HTTP APIs.</p>"
-        },
-        "AllowOrigins" : {
-          "shape" : "CorsOriginList",
-          "locationName" : "allowOrigins",
-          "documentation" : "<p>Represents a collection of allowed origins. Supported only for HTTP APIs.</p>"
-        },
-        "ExposeHeaders" : {
-          "shape" : "CorsHeaderList",
-          "locationName" : "exposeHeaders",
-          "documentation" : "<p>Represents a collection of exposed headers. Supported only for HTTP APIs.</p>"
-        },
-        "MaxAge" : {
-          "shape" : "IntegerWithLengthBetweenMinus1And86400",
-          "locationName" : "maxAge",
-          "documentation" : "<p>The number of seconds that the browser should cache preflight request results. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
-    },
-    "CorsHeaderList" : {
-      "type" : "list",
-      "documentation" : "<p>Represents a collection of allowed headers. Supported only for HTTP APIs.</p>",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "CorsMethodList" : {
-      "type" : "list",
-      "documentation" : "<p>Represents a collection of methods. Supported only for HTTP APIs.</p>",
-      "member" : {
-        "shape" : "StringWithLengthBetween1And64"
-      }
-    },
-    "CorsOriginList" : {
-      "type" : "list",
-      "documentation" : "<p>Represents a collection of origins. Supported only for HTTP APIs.</p>",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "CreateApiInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>This property is part of quick create. If you don't specify a routeKey, a default route of $default is created. The $default route acts as a catch-all for any request made to your API, for a particular stage. The $default route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        },
-        "Target" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "target",
-          "documentation" : "<p>This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateApi request.</p>",
-      "required" : [ "ProtocolType", "Name" ]
-    },
-    "CreateApiMappingInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "The API mapping key."
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateApiMapping request.</p>",
-      "required" : [ "Stage", "ApiId" ]
-    },
-    "CreateApiMappingRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "The API mapping key."
-        },
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new ApiMapping resource to represent an API mapping.</p>",
-      "required" : [ "DomainName", "Stage", "ApiId" ]
-    },
-    "CreateApiMappingResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingId" : {
-          "shape" : "Id",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      }
-    },
-    "CreateApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>This property is part of quick create. If you don't specify a routeKey, a default route of $default is created. The $default route acts as a catch-all for any request made to your API, for a particular stage. The $default route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        },
-        "Target" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "target",
-          "documentation" : "<p>This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Api resource to represent an API.</p>",
-      "required" : [ "ProtocolType", "Name" ]
-    },
-    "CreateApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      }
-    },
-    "CreateAuthorizerInput" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>This parameter is not used.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateAuthorizer request.</p>",
-      "required" : [ "AuthorizerType", "IdentitySource", "Name" ]
-    },
-    "CreateAuthorizerRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>This parameter is not used.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Authorizer resource to represent an authorizer.</p>",
-      "required" : [ "ApiId", "AuthorizerType", "IdentitySource", "Name" ]
-    },
-    "CreateAuthorizerResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      }
-    },
-    "CreateDeploymentInput" : {
-      "type" : "structure",
-      "members" : {
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment resource.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the Stage resource for the Deployment resource to create.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateDeployment request.</p>"
-    },
-    "CreateDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment resource.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the Stage resource for the Deployment resource to create.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Deployment resource to represent a deployment.</p>",
-      "required" : [ "ApiId" ]
-    },
-    "CreateDeploymentResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AutoDeployed" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeployed",
-          "documentation" : "<p>Specifies whether a deployment was automatically released.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The date and time when the Deployment resource was created.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier for the deployment.</p>"
-        },
-        "DeploymentStatus" : {
-          "shape" : "DeploymentStatus",
-          "locationName" : "deploymentStatus",
-          "documentation" : "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
-        },
-        "DeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "deploymentStatusMessage",
-          "documentation" : "<p>May contain additional feedback on the status of an API deployment.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment.</p>"
-        }
-      }
-    },
-    "CreateDomainNameInput" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthenticationInput",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateDomainName request.</p>",
-      "required" : [ "DomainName" ]
-    },
-    "CreateDomainNameRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthenticationInput",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new DomainName resource to represent a domain name.</p>",
-      "required" : [ "DomainName" ]
-    },
-    "CreateDomainNameResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiMappingSelectionExpression",
-          "documentation" : "<p>The API mapping selection expression.</p>"
-        },
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The name of the DomainName resource.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthentication",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      }
-    },
-    "CreateIntegrationInput" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n               , where \n                  <replaceable>{location}</replaceable>\n                is querystring, path, or header; and \n                  <replaceable>{name}</replaceable>\n                must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfigInput",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateIntegration request.</p>",
-      "required" : [ "IntegrationType" ]
-    },
-    "CreateIntegrationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n               , where \n                  <replaceable>{location}</replaceable>\n                is querystring, path, or header; and \n                  <replaceable>{name}</replaceable>\n                must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfigInput",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Integration resource to represent an integration.</p>",
-      "required" : [ "ApiId", "IntegrationType" ]
-    },
-    "CreateIntegrationResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>Represents the description of an integration.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "Id",
-          "locationName" : "integrationId",
-          "documentation" : "<p>Represents the identifier of an integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "integrationResponseSelectionExpression",
-          "documentation" : "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfig",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      }
-    },
-    "CreateIntegrationResponseInput" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where {name} is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where {name} is a valid and unique response header name and {JSON-expression} is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateIntegrationResponse request.</p>",
-      "required" : [ "IntegrationResponseKey" ]
-    },
-    "CreateIntegrationResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where {name} is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where {name} is a valid and unique response header name and {JSON-expression} is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new IntegrationResponse resource to represent an integration response.</p>",
-      "required" : [ "ApiId", "IntegrationId", "IntegrationResponseKey" ]
-    },
-    "CreateIntegrationResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "Id",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expressions for the integration response.</p>"
-        }
-      }
-    },
-    "CreateModelInput" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateModel request.</p>",
-      "required" : [ "Schema", "Name" ]
-    },
-    "CreateModelRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Model.</p>",
-      "required" : [ "ApiId", "Schema", "Name" ]
-    },
-    "CreateModelResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "ModelId" : {
-          "shape" : "Id",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model identifier.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      }
-    },
-    "CreateRouteInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>The authorization scopes supported by this route.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateRoute request.</p>",
-      "required" : [ "RouteKey" ]
-    },
-    "CreateRouteRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>The authorization scopes supported by this route.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Route resource to represent a route.</p>",
-      "required" : [ "ApiId", "RouteKey" ]
-    },
-    "CreateRouteResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteId" : {
-          "shape" : "Id",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      }
-    },
-    "CreateRouteResponseInput" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>The response models for the route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>The route response parameters.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>The route response key.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an CreateRouteResponse request.</p>",
-      "required" : [ "RouteResponseKey" ]
-    },
-    "CreateRouteResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>The response models for the route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>The route response parameters.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>The route response key.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new RouteResponse resource to represent a route response.</p>",
-      "required" : [ "ApiId", "RouteId", "RouteResponseKey" ]
-    },
-    "CreateRouteResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>Represents the response models of a route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Represents the response parameters of a route response.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "Id",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>Represents the identifier of a route response.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>Represents the route response key of a route response.</p>"
-        }
-      }
-    },
-    "CreateStageInput" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>The default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment identifier of the API stage.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the API stage.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateStage request.</p>",
-      "required" : [ "StageName" ]
-    },
-    "CreateStageRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>The default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment identifier of the API stage.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the API stage.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Stage resource to represent a stage.</p>",
-      "required" : [ "ApiId", "StageName" ]
-    },
-    "CreateStageResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the stage was created.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>Default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the stage.</p>"
-        },
-        "LastDeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "lastDeploymentStatusMessage",
-          "documentation" : "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
-        },
-        "LastUpdatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "lastUpdatedDate",
-          "documentation" : "<p>The timestamp when the stage was last updated.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      }
-    },
-    "CreateVpcLinkInput" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A list of tags.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a CreateVpcLink request.</p>",
-      "required" : [ "SubnetIds", "Name" ]
-    },
-    "CreateVpcLinkRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A list of tags.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a VPC link</p>",
-      "required" : [ "SubnetIds", "Name" ]
-    },
-    "CreateVpcLinkResponse" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the VPC link was created.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>Tags for the VPC link.</p>"
-        },
-        "VpcLinkId" : {
-          "shape" : "Id",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        },
-        "VpcLinkStatus" : {
-          "shape" : "VpcLinkStatus",
-          "locationName" : "vpcLinkStatus",
-          "documentation" : "<p>The status of the VPC link.</p>"
-        },
-        "VpcLinkStatusMessage" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "vpcLinkStatusMessage",
-          "documentation" : "<p>A message summarizing the cause of the status of the VPC link.</p>"
-        },
-        "VpcLinkVersion" : {
-          "shape" : "VpcLinkVersion",
-          "locationName" : "vpcLinkVersion",
-          "documentation" : "<p>The version of the VPC link.</p>"
-        }
-      }
-    },
-    "DeleteAccessLogSettingsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
-        }
-      },
-      "required" : [ "StageName", "ApiId" ]
-    },
-    "DeleteApiMappingRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        }
-      },
-      "required" : [ "ApiMappingId", "DomainName" ]
-    },
-    "DeleteApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "DeleteAuthorizerRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        }
-      },
-      "required" : [ "AuthorizerId", "ApiId" ]
-    },
-    "DeleteCorsConfigurationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "DeleteDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "DeploymentId" ]
-    },
-    "DeleteDomainNameRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        }
-      },
-      "required" : [ "DomainName" ]
-    },
-    "DeleteIntegrationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "IntegrationId" ]
-    },
-    "DeleteIntegrationResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "IntegrationResponseId", "IntegrationId" ]
-    },
-    "DeleteModelRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ModelId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model ID.</p>"
-        }
-      },
-      "required" : [ "ModelId", "ApiId" ]
-    },
-    "DeleteRouteRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "RouteId" ]
-    },
-    "DeleteRouteRequestParameterRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RequestParameterKey" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "requestParameterKey",
-          "documentation" : "<p>The route request parameter key.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        }
-      },
-      "required" : [ "RequestParameterKey", "ApiId", "RouteId" ]
-    },
-    "DeleteRouteResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>The route response ID.</p>"
-        }
-      },
-      "required" : [ "RouteResponseId", "ApiId", "RouteId" ]
-    },
-    "DeleteRouteSettingsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
-        }
-      },
-      "required" : [ "StageName", "RouteKey", "ApiId" ]
-    },
-    "DeleteStageRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
-        }
-      },
-      "required" : [ "StageName", "ApiId" ]
-    },
-    "DeleteVpcLinkRequest" : {
-      "type" : "structure",
-      "members" : {
-        "VpcLinkId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        }
-      },
-      "required" : [ "VpcLinkId" ]
-    },
-    "DeleteVpcLinkResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "Deployment" : {
-      "type" : "structure",
-      "members" : {
-        "AutoDeployed" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeployed",
-          "documentation" : "<p>Specifies whether a deployment was automatically released.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The date and time when the Deployment resource was created.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier for the deployment.</p>"
-        },
-        "DeploymentStatus" : {
-          "shape" : "DeploymentStatus",
-          "locationName" : "deploymentStatus",
-          "documentation" : "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
-        },
-        "DeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "deploymentStatusMessage",
-          "documentation" : "<p>May contain additional feedback on the status of an API deployment.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment.</p>"
-        }
-      },
-      "documentation" : "<p>An immutable representation of an API that can be called by users. A Deployment must be associated with a Stage for it to be callable over the internet.</p>"
-    },
-    "DeploymentStatus" : {
-      "type" : "string",
-      "documentation" : "<p>Represents a deployment status.</p>",
-      "enum" : [ "PENDING", "FAILED", "DEPLOYED" ]
-    },
-    "Deployments" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfDeployment",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>A collection resource that contains zero or more references to your existing deployments, and links that guide you on how to interact with your collection. The collection offers a paginated view of the contained deployments.</p>"
-    },
-    "DomainName" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiMappingSelectionExpression",
-          "documentation" : "<p>The API mapping selection expression.</p>"
-        },
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The name of the DomainName resource.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthentication",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a domain name.</p>",
-      "required" : [ "DomainName" ]
-    },
-    "DomainNameConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayDomainName" : {
-          "shape" : "__string",
-          "locationName" : "apiGatewayDomainName",
-          "documentation" : "<p>A domain name for the API.</p>"
-        },
-        "CertificateArn" : {
-          "shape" : "Arn",
-          "locationName" : "certificateArn",
-          "documentation" : "<p>An AWS-managed certificate that will be used by the edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source.</p>"
-        },
-        "CertificateName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "certificateName",
-          "documentation" : "<p>The user-friendly name of the certificate that will be used by the edge-optimized endpoint for this domain name.</p>"
-        },
-        "CertificateUploadDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "certificateUploadDate",
-          "documentation" : "<p>The timestamp when the certificate that was used by edge-optimized endpoint for this domain name was uploaded.</p>"
-        },
-        "DomainNameStatus" : {
-          "shape" : "DomainNameStatus",
-          "locationName" : "domainNameStatus",
-          "documentation" : "<p>The status of the domain name migration. The valid values are AVAILABLE, UPDATING, PENDING_CERTIFICATE_REIMPORT, and PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain cannot be modified further until the existing operation is complete. If it is AVAILABLE, the domain can be updated.</p>"
-        },
-        "DomainNameStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "domainNameStatusMessage",
-          "documentation" : "<p>An optional text message containing detailed information about status of the domain name migration.</p>"
-        },
-        "EndpointType" : {
-          "shape" : "EndpointType",
-          "locationName" : "endpointType",
-          "documentation" : "<p>The endpoint type.</p>"
-        },
-        "HostedZoneId" : {
-          "shape" : "__string",
-          "locationName" : "hostedZoneId",
-          "documentation" : "<p>The Amazon Route 53 Hosted Zone ID of the endpoint.</p>"
-        },
-        "SecurityPolicy" : {
-          "shape" : "SecurityPolicy",
-          "locationName" : "securityPolicy",
-          "documentation" : "<p>The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are TLS_1_0 and TLS_1_2.</p>"
-        },
-        "OwnershipVerificationCertificateArn" : {
-          "shape" : "Arn",
-          "locationName" : "ownershipVerificationCertificateArn",
-          "documentation" : "<p>The ARN of the public certificate issued by ACM to validate ownership of your custom domain. Only required when configuring mutual TLS and using an ACM imported or private CA certificate ARN as the regionalCertificateArn</p>"
-        }
-      },
-      "documentation" : "<p>The domain name configuration.</p>"
-    },
-    "DomainNameConfigurations" : {
-      "type" : "list",
-      "documentation" : "<p>The domain name configurations.</p>",
-      "member" : {
-        "shape" : "DomainNameConfiguration"
-      }
-    },
-    "DomainNameStatus" : {
-      "type" : "string",
-      "documentation" : "<p>The status of the domain name migration. The valid values are AVAILABLE, UPDATING, PENDING_CERTIFICATE_REIMPORT, and PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain cannot be modified further until the existing operation is complete. If it is AVAILABLE, the domain can be updated.</p>",
-      "enum" : [ "AVAILABLE", "UPDATING", "PENDING_CERTIFICATE_REIMPORT", "PENDING_OWNERSHIP_VERIFICATION" ]
-    },
-    "DomainNames" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfDomainName",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of domain names.</p>"
-    },
-    "EndpointType" : {
-      "type" : "string",
-      "documentation" : "<p>Represents an endpoint type.</p>",
-      "enum" : [ "REGIONAL", "EDGE" ]
-    },
-    "ExportApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ExportVersion" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "exportVersion",
-          "documentation" : "<p>The version of the API Gateway export algorithm. API Gateway uses the latest version by default. Currently, the only supported version is 1.0.</p>"
-        },
-        "IncludeExtensions" : {
-          "shape" : "__boolean",
-          "location" : "querystring",
-          "locationName" : "includeExtensions",
-          "documentation" : "<p>Specifies whether to include <a href=\"https://docs.aws.amazon.com//apigateway/latest/developerguide/api-gateway-swagger-extensions.html\">API Gateway extensions</a> in the exported API definition. API Gateway extensions are included by default.</p>"
-        },
-        "OutputType" : {
-          "shape" : "__string",
-          "enum" : ["YAML", "JSON"],
-          "location" : "querystring",
-          "locationName" : "outputType",
-          "documentation" : "<p>The output type of the exported definition file. Valid values are JSON and YAML.</p>"
-        },
-        "Specification" : {
-          "shape" : "__string",
-          "enum" : ["OAS30"],
-          "location" : "uri",
-          "locationName" : "specification",
-          "documentation" : "<p>The version of the API specification to use. OAS30, for OpenAPI 3.0, is the only supported value.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the API stage to export. If you don't specify this property, a representation of the latest API configuration is exported.</p>"
-        }
-      },
-      "required" : [ "Specification", "OutputType", "ApiId" ]
-    },
-    "ExportApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "body":{
-          "shape":"ExportedApi"
-        }
-      },
-      "payload":"body"
-    },
-    "ExportedApi":{
-      "type":"blob",
-      "documentation" : "<p>Represents an exported definition of an API in a particular output format, for example, YAML. The API is serialized to the requested specification, for example, OpenAPI 3.0.</p>"
-    },
-    "ResetAuthorizersCacheRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can contain only alphanumeric characters, hyphens, and underscores, or be $default. Maximum length is 128 characters.</p>"
-        }
-      },
-      "required" : [ "StageName", "ApiId" ]
-    },
-    "GetApiMappingRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        }
-      },
-      "required" : [ "ApiMappingId", "DomainName" ]
-    },
-    "GetApiMappingResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingId" : {
-          "shape" : "Id",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      }
-    },
-    "GetApiMappingsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "DomainName" ]
-    },
-    "GetApiMappingsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfApiMapping",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      }
-    },
-    "GetApisRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetApisResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfApi",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetAuthorizerRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        }
-      },
-      "required" : [ "AuthorizerId", "ApiId" ]
-    },
-    "GetAuthorizerResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      }
-    },
-    "GetAuthorizersRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetAuthorizersResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfAuthorizer",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "DeploymentId" ]
-    },
-    "GetDeploymentResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AutoDeployed" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeployed",
-          "documentation" : "<p>Specifies whether a deployment was automatically released.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The date and time when the Deployment resource was created.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier for the deployment.</p>"
-        },
-        "DeploymentStatus" : {
-          "shape" : "DeploymentStatus",
-          "locationName" : "deploymentStatus",
-          "documentation" : "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
-        },
-        "DeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "deploymentStatusMessage",
-          "documentation" : "<p>May contain additional feedback on the status of an API deployment.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment.</p>"
-        }
-      }
-    },
-    "GetDeploymentsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetDeploymentsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfDeployment",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetDomainNameRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        }
-      },
-      "required" : [ "DomainName" ]
-    },
-    "GetDomainNameResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiMappingSelectionExpression",
-          "documentation" : "<p>The API mapping selection expression.</p>"
-        },
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The name of the DomainName resource.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthentication",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      }
-    },
-    "GetDomainNamesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetDomainNamesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfDomainName",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetIntegrationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "IntegrationId" ]
-    },
-    "GetIntegrationResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>Represents the description of an integration.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "Id",
-          "locationName" : "integrationId",
-          "documentation" : "<p>Represents the identifier of an integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "integrationResponseSelectionExpression",
-          "documentation" : "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfig",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      }
-    },
-    "GetIntegrationResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "IntegrationResponseId", "IntegrationId" ]
-    },
-    "GetIntegrationResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "Id",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expressions for the integration response.</p>"
-        }
-      }
-    },
-    "GetIntegrationResponsesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "IntegrationId", "ApiId" ]
-    },
-    "GetIntegrationResponsesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfIntegrationResponse",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetIntegrationsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetIntegrationsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfIntegration",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetModelRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ModelId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model ID.</p>"
-        }
-      },
-      "required" : [ "ModelId", "ApiId" ]
-    },
-    "GetModelResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "ModelId" : {
-          "shape" : "Id",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model identifier.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      }
-    },
-    "GetModelTemplateRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ModelId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model ID.</p>"
-        }
-      },
-      "required" : [ "ModelId", "ApiId" ]
-    },
-    "GetModelTemplateResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Value" : {
-          "shape" : "__string",
-          "locationName" : "value",
-          "documentation" : "<p>The template value.</p>"
-        }
-      }
-    },
-    "GetModelsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetModelsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfModel",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetRouteRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        }
-      },
-      "required" : [ "ApiId", "RouteId" ]
-    },
-    "GetRouteResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteId" : {
-          "shape" : "Id",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      }
-    },
-    "GetRouteResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>The route response ID.</p>"
-        }
-      },
-      "required" : [ "RouteResponseId", "ApiId", "RouteId" ]
-    },
-    "GetRouteResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>Represents the response models of a route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Represents the response parameters of a route response.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "Id",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>Represents the identifier of a route response.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>Represents the route response key of a route response.</p>"
-        }
-      }
-    },
-    "GetRouteResponsesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        }
-      },
-      "required" : [ "RouteId", "ApiId" ]
-    },
-    "GetRouteResponsesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfRouteResponse",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetRoutesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetRoutesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfRoute",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetStageRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
-        }
-      },
-      "required" : [ "StageName", "ApiId" ]
-    },
-    "GetStageResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the stage was created.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>Default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the stage.</p>"
-        },
-        "LastDeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "lastDeploymentStatusMessage",
-          "documentation" : "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
-        },
-        "LastUpdatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "lastUpdatedDate",
-          "documentation" : "<p>The timestamp when the stage was last updated.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      }
-    },
-    "GetStagesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "required" : [ "ApiId" ]
-    },
-    "GetStagesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfStage",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetTagsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "<p>The resource ARN for the tag.</p>"
-        }
-      },
-      "required" : [ "ResourceArn" ]
-    },
-    "GetTagsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Tags" : {
-          "shape" : "Tags",
+  "shapes": {
+    "AccessDeniedException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message"
+        }
+      },
+      "exception": true,
+      "error": {
+        "httpStatusCode": 403
+      }
+    },
+    "AccessLogSettings": {
+      "type": "structure",
+      "members": {
+        "DestinationArn": {
+          "shape": "Arn",
+          "locationName": "destinationArn",
+          "documentation": "<p>The ARN of the CloudWatch Logs log group to receive access logs.</p>"
+        },
+        "Format": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "format",
+          "documentation": "<p>A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId.</p>"
+        }
+      },
+      "documentation": "<p>Settings for logging access in a stage.</p>"
+    },
+    "Api": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      },
+      "documentation": "<p>Represents an API.</p>",
+      "required": [
+        "RouteSelectionExpression",
+        "Name",
+        "ProtocolType"
+      ]
+    },
+    "ApiMapping": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingId": {
+          "shape": "Id",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      },
+      "documentation": "<p>Represents an API mapping.</p>",
+      "required": [
+        "Stage",
+        "ApiId"
+      ]
+    },
+    "ApiMappings": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfApiMapping",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of ApiMappings resources.</p>"
+    },
+    "Apis": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfApi",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of APIs.</p>"
+    },
+    "Arn": {
+      "type": "string",
+      "documentation": "<p>Represents an Amazon Resource Name (ARN).</p>"
+    },
+    "AuthorizationScopes": {
+      "type": "list",
+      "documentation": "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>",
+      "member": {
+        "shape": "StringWithLengthBetween1And64"
+      }
+    },
+    "AuthorizationType": {
+      "type": "string",
+      "documentation": "<p>The authorization type. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer. For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>",
+      "enum": [
+        "NONE",
+        "AWS_IAM",
+        "CUSTOM",
+        "JWT"
+      ]
+    },
+    "Authorizer": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      },
+      "documentation": "<p>Represents an authorizer.</p>",
+      "required": [
+        "Name"
+      ]
+    },
+    "AuthorizerType": {
+      "type": "string",
+      "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>",
+      "enum": [
+        "REQUEST",
+        "JWT"
+      ]
+    },
+    "Authorizers": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfAuthorizer",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of authorizers.</p>"
+    },
+    "BadRequestException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation": "<p>The request is not valid, for example, the input is incomplete or incorrect. See the accompanying error message for details.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 400
+      }
+    },
+    "ConflictException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation": "<p>The requested operation would cause a conflict with the current state of a service resource associated with the request. Resolve the conflict before retrying this request. See the accompanying error message for details.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 409
+      }
+    },
+    "ConnectionType": {
+      "type": "string",
+      "documentation": "<p>Represents a connection type.</p>",
+      "enum": [
+        "INTERNET",
+        "VPC_LINK"
+      ]
+    },
+    "ContentHandlingStrategy": {
+      "type": "string",
+      "documentation": "<p>Specifies how to handle response payload content type conversions. Supported only for WebSocket APIs.</p>",
+      "enum": [
+        "CONVERT_TO_BINARY",
+        "CONVERT_TO_TEXT"
+      ]
+    },
+    "Cors": {
+      "type": "structure",
+      "members": {
+        "AllowCredentials": {
+          "shape": "__boolean",
+          "locationName": "allowCredentials",
+          "documentation": "<p>Specifies whether credentials are included in the CORS request. Supported only for HTTP APIs.</p>"
+        },
+        "AllowHeaders": {
+          "shape": "CorsHeaderList",
+          "locationName": "allowHeaders",
+          "documentation": "<p>Represents a collection of allowed headers. Supported only for HTTP APIs.</p>"
+        },
+        "AllowMethods": {
+          "shape": "CorsMethodList",
+          "locationName": "allowMethods",
+          "documentation": "<p>Represents a collection of allowed HTTP methods. Supported only for HTTP APIs.</p>"
+        },
+        "AllowOrigins": {
+          "shape": "CorsOriginList",
+          "locationName": "allowOrigins",
+          "documentation": "<p>Represents a collection of allowed origins. Supported only for HTTP APIs.</p>"
+        },
+        "ExposeHeaders": {
+          "shape": "CorsHeaderList",
+          "locationName": "exposeHeaders",
+          "documentation": "<p>Represents a collection of exposed headers. Supported only for HTTP APIs.</p>"
+        },
+        "MaxAge": {
+          "shape": "IntegerWithLengthBetweenMinus1And86400",
+          "locationName": "maxAge",
+          "documentation": "<p>The number of seconds that the browser should cache preflight request results. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents a CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
+    },
+    "CorsHeaderList": {
+      "type": "list",
+      "documentation": "<p>Represents a collection of allowed headers. Supported only for HTTP APIs.</p>",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "CorsMethodList": {
+      "type": "list",
+      "documentation": "<p>Represents a collection of methods. Supported only for HTTP APIs.</p>",
+      "member": {
+        "shape": "StringWithLengthBetween1And64"
+      }
+    },
+    "CorsOriginList": {
+      "type": "list",
+      "documentation": "<p>Represents a collection of origins. Supported only for HTTP APIs.</p>",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "CreateApiInput": {
+      "type": "structure",
+      "members": {
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>This property is part of quick create. If you don't specify a routeKey, a default route of $default is created. The $default route acts as a catch-all for any request made to your API, for a particular stage. The $default route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        },
+        "Target": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "target",
+          "documentation": "<p>This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateApi request.</p>",
+      "required": [
+        "ProtocolType",
+        "Name"
+      ]
+    },
+    "CreateApiMappingInput": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "The API mapping key."
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateApiMapping request.</p>",
+      "required": [
+        "Stage",
+        "ApiId"
+      ]
+    },
+    "CreateApiMappingRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "The API mapping key."
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new ApiMapping resource to represent an API mapping.</p>",
+      "required": [
+        "DomainName",
+        "Stage",
+        "ApiId"
+      ]
+    },
+    "CreateApiMappingResponse": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingId": {
+          "shape": "Id",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      }
+    },
+    "CreateApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-cors.html\">Configuring CORS</a> for more information.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. Supported only for HTTP APIs.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>This property is part of quick create. If you don't specify a routeKey, a default route of $default is created. The $default route acts as a catch-all for any request made to your API, for a particular stage. The $default route key can't be modified. You can add routes after creating the API, and you can update the route keys of additional routes. Supported only for HTTP APIs.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        },
+        "Target": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "target",
+          "documentation": "<p>This property is part of quick create. Quick create produces an API with an integration, a default catch-all route, and a default stage which is configured to automatically deploy changes. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. Supported only for HTTP APIs.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Api resource to represent an API.</p>",
+      "required": [
+        "ProtocolType",
+        "Name"
+      ]
+    },
+    "CreateApiResponse": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      }
+    },
+    "CreateAuthorizerInput": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>This parameter is not used.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateAuthorizer request.</p>",
+      "required": [
+        "AuthorizerType",
+        "IdentitySource",
+        "Name"
+      ]
+    },
+    "CreateAuthorizerRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>This parameter is not used.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Authorizer resource to represent an authorizer.</p>",
+      "required": [
+        "ApiId",
+        "AuthorizerType",
+        "IdentitySource",
+        "Name"
+      ]
+    },
+    "CreateAuthorizerResponse": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      }
+    },
+    "CreateDeploymentInput": {
+      "type": "structure",
+      "members": {
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment resource.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the Stage resource for the Deployment resource to create.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateDeployment request.</p>"
+    },
+    "CreateDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment resource.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the Stage resource for the Deployment resource to create.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Deployment resource to represent a deployment.</p>",
+      "required": [
+        "ApiId"
+      ]
+    },
+    "CreateDeploymentResponse": {
+      "type": "structure",
+      "members": {
+        "AutoDeployed": {
+          "shape": "__boolean",
+          "locationName": "autoDeployed",
+          "documentation": "<p>Specifies whether a deployment was automatically released.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The date and time when the Deployment resource was created.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier for the deployment.</p>"
+        },
+        "DeploymentStatus": {
+          "shape": "DeploymentStatus",
+          "locationName": "deploymentStatus",
+          "documentation": "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
+        },
+        "DeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "deploymentStatusMessage",
+          "documentation": "<p>May contain additional feedback on the status of an API deployment.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment.</p>"
+        }
+      }
+    },
+    "CreateDomainNameInput": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthenticationInput",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateDomainName request.</p>",
+      "required": [
+        "DomainName"
+      ]
+    },
+    "CreateDomainNameRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthenticationInput",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new DomainName resource to represent a domain name.</p>",
+      "required": [
+        "DomainName"
+      ]
+    },
+    "CreateDomainNameResponse": {
+      "type": "structure",
+      "members": {
+        "ApiMappingSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiMappingSelectionExpression",
+          "documentation": "<p>The API mapping selection expression.</p>"
+        },
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The name of the DomainName resource.</p>"
+        },
+        "DomainNameArn": {
+          "shape": "Arn",
+          "locationName": "domainNameArn"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthentication",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      }
+    },
+    "CreateIntegrationInput": {
+      "type": "structure",
+      "members": {
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n               , where \n                  <replaceable>{location}</replaceable>\n                is querystring, path, or header; and \n                  <replaceable>{name}</replaceable>\n                must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfigInput",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateIntegration request.</p>",
+      "required": [
+        "IntegrationType"
+      ]
+    },
+    "CreateIntegrationRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n               , where \n                  <replaceable>{location}</replaceable>\n                is querystring, path, or header; and \n                  <replaceable>{name}</replaceable>\n                must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfigInput",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Integration resource to represent an integration.</p>",
+      "required": [
+        "ApiId",
+        "IntegrationType"
+      ]
+    },
+    "CreateIntegrationResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>Represents the description of an integration.</p>"
+        },
+        "IntegrationId": {
+          "shape": "Id",
+          "locationName": "integrationId",
+          "documentation": "<p>Represents the identifier of an integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "integrationResponseSelectionExpression",
+          "documentation": "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfig",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      }
+    },
+    "CreateIntegrationResponseInput": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where {name} is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where {name} is a valid and unique response header name and {JSON-expression} is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateIntegrationResponse request.</p>",
+      "required": [
+        "IntegrationResponseKey"
+      ]
+    },
+    "CreateIntegrationResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where {name} is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where {name} is a valid and unique response header name and {JSON-expression} is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new IntegrationResponse resource to represent an integration response.</p>",
+      "required": [
+        "ApiId",
+        "IntegrationId",
+        "IntegrationResponseKey"
+      ]
+    },
+    "CreateIntegrationResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "Id",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expressions for the integration response.</p>"
+        }
+      }
+    },
+    "CreateModelInput": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateModel request.</p>",
+      "required": [
+        "Schema",
+        "Name"
+      ]
+    },
+    "CreateModelRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Model.</p>",
+      "required": [
+        "ApiId",
+        "Schema",
+        "Name"
+      ]
+    },
+    "CreateModelResponse": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "ModelId": {
+          "shape": "Id",
+          "locationName": "modelId",
+          "documentation": "<p>The model identifier.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      }
+    },
+    "CreateRouteInput": {
+      "type": "structure",
+      "members": {
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>The authorization scopes supported by this route.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateRoute request.</p>",
+      "required": [
+        "RouteKey"
+      ]
+    },
+    "CreateRouteRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>The authorization scopes supported by this route.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Route resource to represent a route.</p>",
+      "required": [
+        "ApiId",
+        "RouteKey"
+      ]
+    },
+    "CreateRouteResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteId": {
+          "shape": "Id",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      }
+    },
+    "CreateRouteResponseInput": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>The response models for the route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>The route response parameters.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>The route response key.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an CreateRouteResponse request.</p>",
+      "required": [
+        "RouteResponseKey"
+      ]
+    },
+    "CreateRouteResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>The response models for the route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>The route response parameters.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>The route response key.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new RouteResponse resource to represent a route response.</p>",
+      "required": [
+        "ApiId",
+        "RouteId",
+        "RouteResponseKey"
+      ]
+    },
+    "CreateRouteResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>Represents the response models of a route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Represents the response parameters of a route response.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "Id",
+          "locationName": "routeResponseId",
+          "documentation": "<p>Represents the identifier of a route response.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>Represents the route response key of a route response.</p>"
+        }
+      }
+    },
+    "CreateRoutingRuleRequest": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>Represents a routing rule action. The only supported action is invokeApi.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>Represents a condition. Conditions can contain up to two matchHeaders conditions and one matchBasePaths conditions. API Gateway evaluates header conditions and base path conditions together. You can only use AND between header and base path conditions.</p>"
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameId": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "domainNameId",
+          "documentation": "<p>The domain name ID.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "Represents the priority of the routing rule."
+        }
+      },
+      "required": [
+        "DomainName",
+        "Actions",
+        "Priority",
+        "Conditions"
+      ]
+    },
+    "CreateRoutingRuleResponse": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>Represents a routing rule action. The only supported action is invokeApi.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>Represents a condition. Conditions can contain up to two matchHeaders conditions and one matchBasePaths conditions. API Gateway evaluates header conditions and base path conditions together. You can only use AND between header and base path conditions.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "<p>Represents the priority of the routing rule.<p>"
+        },
+        "RoutingRuleArn": {
+          "shape": "Arn",
+          "locationName": "routingRuleArn",
+          "documentation": "<p>The ARN of the domain name.<p>"
+        },
+        "RoutingRuleId": {
+          "shape": "Id",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      }
+    },
+    "CreateStageInput": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>The default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment identifier of the API stage.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the API stage.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateStage request.</p>",
+      "required": [
+        "StageName"
+      ]
+    },
+    "CreateStageRequest": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>The default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment identifier of the API stage.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the API stage.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Stage resource to represent a stage.</p>",
+      "required": [
+        "ApiId",
+        "StageName"
+      ]
+    },
+    "CreateStageResponse": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the stage was created.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>Default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the stage.</p>"
+        },
+        "LastDeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "lastDeploymentStatusMessage",
+          "documentation": "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
+        },
+        "LastUpdatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "lastUpdatedDate",
+          "documentation": "<p>The timestamp when the stage was last updated.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      }
+    },
+    "CreateVpcLinkInput": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A list of tags.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a CreateVpcLink request.</p>",
+      "required": [
+        "SubnetIds",
+        "Name"
+      ]
+    },
+    "CreateVpcLinkRequest": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A list of tags.</p>"
+        }
+      },
+      "documentation": "<p>Creates a VPC link</p>",
+      "required": [
+        "SubnetIds",
+        "Name"
+      ]
+    },
+    "CreateVpcLinkResponse": {
+      "type": "structure",
+      "members": {
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the VPC link was created.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>Tags for the VPC link.</p>"
+        },
+        "VpcLinkId": {
+          "shape": "Id",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        },
+        "VpcLinkStatus": {
+          "shape": "VpcLinkStatus",
+          "locationName": "vpcLinkStatus",
+          "documentation": "<p>The status of the VPC link.</p>"
+        },
+        "VpcLinkStatusMessage": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "vpcLinkStatusMessage",
+          "documentation": "<p>A message summarizing the cause of the status of the VPC link.</p>"
+        },
+        "VpcLinkVersion": {
+          "shape": "VpcLinkVersion",
+          "locationName": "vpcLinkVersion",
+          "documentation": "<p>The version of the VPC link.</p>"
+        }
+      }
+    },
+    "DeleteAccessLogSettingsRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
+        }
+      },
+      "required": [
+        "StageName",
+        "ApiId"
+      ]
+    },
+    "DeleteApiMappingRequest": {
+      "type": "structure",
+      "members": {
+        "ApiMappingId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        }
+      },
+      "required": [
+        "ApiMappingId",
+        "DomainName"
+      ]
+    },
+    "DeleteApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "DeleteAuthorizerRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        }
+      },
+      "required": [
+        "AuthorizerId",
+        "ApiId"
+      ]
+    },
+    "DeleteCorsConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "DeleteDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "DeploymentId"
+      ]
+    },
+    "DeleteDomainNameRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        }
+      },
+      "required": [
+        "DomainName"
+      ]
+    },
+    "DeleteIntegrationRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "IntegrationId"
+      ]
+    },
+    "DeleteIntegrationResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "IntegrationResponseId",
+        "IntegrationId"
+      ]
+    },
+    "DeleteModelRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ModelId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "modelId",
+          "documentation": "<p>The model ID.</p>"
+        }
+      },
+      "required": [
+        "ModelId",
+        "ApiId"
+      ]
+    },
+    "DeleteRouteRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "DeleteRouteRequestParameterRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RequestParameterKey": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "requestParameterKey",
+          "documentation": "<p>The route request parameter key.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        }
+      },
+      "required": [
+        "RequestParameterKey",
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "DeleteRouteResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeResponseId",
+          "documentation": "<p>The route response ID.</p>"
+        }
+      },
+      "required": [
+        "RouteResponseId",
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "DeleteRouteSettingsRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RouteKey": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
+        }
+      },
+      "required": [
+        "StageName",
+        "RouteKey",
+        "ApiId"
+      ]
+    },
+    "DeleteRoutingRuleRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameId": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "domainNameId",
+          "documentation": "<p>The domain name ID.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      },
+      "required": [
+        "RoutingRuleId",
+        "DomainName"
+      ]
+    },
+    "DeleteStageRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
+        }
+      },
+      "required": [
+        "StageName",
+        "ApiId"
+      ]
+    },
+    "DeleteVpcLinkRequest": {
+      "type": "structure",
+      "members": {
+        "VpcLinkId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        }
+      },
+      "required": [
+        "VpcLinkId"
+      ]
+    },
+    "DeleteVpcLinkResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "Deployment": {
+      "type": "structure",
+      "members": {
+        "AutoDeployed": {
+          "shape": "__boolean",
+          "locationName": "autoDeployed",
+          "documentation": "<p>Specifies whether a deployment was automatically released.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The date and time when the Deployment resource was created.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier for the deployment.</p>"
+        },
+        "DeploymentStatus": {
+          "shape": "DeploymentStatus",
+          "locationName": "deploymentStatus",
+          "documentation": "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
+        },
+        "DeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "deploymentStatusMessage",
+          "documentation": "<p>May contain additional feedback on the status of an API deployment.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment.</p>"
+        }
+      },
+      "documentation": "<p>An immutable representation of an API that can be called by users. A Deployment must be associated with a Stage for it to be callable over the internet.</p>"
+    },
+    "DeploymentStatus": {
+      "type": "string",
+      "documentation": "<p>Represents a deployment status.</p>",
+      "enum": [
+        "PENDING",
+        "FAILED",
+        "DEPLOYED"
+      ]
+    },
+    "Deployments": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfDeployment",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>A collection resource that contains zero or more references to your existing deployments, and links that guide you on how to interact with your collection. The collection offers a paginated view of the contained deployments.</p>"
+    },
+    "DomainName": {
+      "type": "structure",
+      "members": {
+        "ApiMappingSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiMappingSelectionExpression",
+          "documentation": "<p>The API mapping selection expression.</p>"
+        },
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The name of the DomainName resource.</p>"
+        },
+        "DomainNameArn": {
+          "shape": "Arn",
+          "locationName": "domainNameArn"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthentication",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      },
+      "documentation": "<p>Represents a domain name.</p>",
+      "required": [
+        "DomainName"
+      ]
+    },
+    "DomainNameConfiguration": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayDomainName": {
+          "shape": "__string",
+          "locationName": "apiGatewayDomainName",
+          "documentation": "<p>A domain name for the API.</p>"
+        },
+        "CertificateArn": {
+          "shape": "Arn",
+          "locationName": "certificateArn",
+          "documentation": "<p>An AWS-managed certificate that will be used by the edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source.</p>"
+        },
+        "CertificateName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "certificateName",
+          "documentation": "<p>The user-friendly name of the certificate that will be used by the edge-optimized endpoint for this domain name.</p>"
+        },
+        "CertificateUploadDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "certificateUploadDate",
+          "documentation": "<p>The timestamp when the certificate that was used by edge-optimized endpoint for this domain name was uploaded.</p>"
+        },
+        "DomainNameStatus": {
+          "shape": "DomainNameStatus",
+          "locationName": "domainNameStatus",
+          "documentation": "<p>The status of the domain name migration. The valid values are AVAILABLE, UPDATING, PENDING_CERTIFICATE_REIMPORT, and PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain cannot be modified further until the existing operation is complete. If it is AVAILABLE, the domain can be updated.</p>"
+        },
+        "DomainNameStatusMessage": {
+          "shape": "__string",
+          "locationName": "domainNameStatusMessage",
+          "documentation": "<p>An optional text message containing detailed information about status of the domain name migration.</p>"
+        },
+        "EndpointType": {
+          "shape": "EndpointType",
+          "locationName": "endpointType",
+          "documentation": "<p>The endpoint type.</p>"
+        },
+        "HostedZoneId": {
+          "shape": "__string",
+          "locationName": "hostedZoneId",
+          "documentation": "<p>The Amazon Route 53 Hosted Zone ID of the endpoint.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the domain name. Use ipv4 to allow only IPv4 addresses to invoke your domain name, or use dualstack to allow both IPv4 and IPv6 addresses to invoke your domain name.</p>"
+        },
+        "SecurityPolicy": {
+          "shape": "SecurityPolicy",
+          "locationName": "securityPolicy",
+          "documentation": "<p>The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are TLS_1_0 and TLS_1_2.</p>"
+        },
+        "OwnershipVerificationCertificateArn": {
+          "shape": "Arn",
+          "locationName": "ownershipVerificationCertificateArn",
+          "documentation": "<p>The ARN of the public certificate issued by ACM to validate ownership of your custom domain. Only required when configuring mutual TLS and using an ACM imported or private CA certificate ARN as the regionalCertificateArn</p>"
+        }
+      },
+      "documentation": "<p>The domain name configuration.</p>"
+    },
+    "DomainNameConfigurations": {
+      "type": "list",
+      "documentation": "<p>The domain name configurations.</p>",
+      "member": {
+        "shape": "DomainNameConfiguration"
+      }
+    },
+    "DomainNameStatus": {
+      "type": "string",
+      "documentation": "<p>The status of the domain name migration. The valid values are AVAILABLE, UPDATING, PENDING_CERTIFICATE_REIMPORT, and PENDING_OWNERSHIP_VERIFICATION. If the status is UPDATING, the domain cannot be modified further until the existing operation is complete. If it is AVAILABLE, the domain can be updated.</p>",
+      "enum": [
+        "AVAILABLE",
+        "UPDATING",
+        "PENDING_CERTIFICATE_REIMPORT",
+        "PENDING_OWNERSHIP_VERIFICATION"
+      ]
+    },
+    "DomainNames": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfDomainName",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of domain names.</p>"
+    },
+    "EndpointType": {
+      "type": "string",
+      "documentation": "<p>Represents an endpoint type.</p>",
+      "enum": [
+        "REGIONAL",
+        "EDGE"
+      ]
+    },
+    "ExportApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ExportVersion": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "exportVersion",
+          "documentation": "<p>The version of the API Gateway export algorithm. API Gateway uses the latest version by default. Currently, the only supported version is 1.0.</p>"
+        },
+        "IncludeExtensions": {
+          "shape": "__boolean",
+          "location": "querystring",
+          "locationName": "includeExtensions",
+          "documentation": "<p>Specifies whether to include <a href=\"https://docs.aws.amazon.com//apigateway/latest/developerguide/api-gateway-swagger-extensions.html\">API Gateway extensions</a> in the exported API definition. API Gateway extensions are included by default.</p>"
+        },
+        "OutputType": {
+          "shape": "__string",
+          "enum": [
+            "YAML",
+            "JSON"
+          ],
+          "location": "querystring",
+          "locationName": "outputType",
+          "documentation": "<p>The output type of the exported definition file. Valid values are JSON and YAML.</p>"
+        },
+        "Specification": {
+          "shape": "__string",
+          "enum": [
+            "OAS30"
+          ],
+          "location": "uri",
+          "locationName": "specification",
+          "documentation": "<p>The version of the API specification to use. OAS30, for OpenAPI 3.0, is the only supported value.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the API stage to export. If you don't specify this property, a representation of the latest API configuration is exported.</p>"
+        }
+      },
+      "required": [
+        "Specification",
+        "OutputType",
+        "ApiId"
+      ]
+    },
+    "ExportApiResponse": {
+      "type": "structure",
+      "members": {
+        "body": {
+          "shape": "ExportedApi"
+        }
+      },
+      "payload": "body"
+    },
+    "ExportedApi": {
+      "type": "blob",
+      "documentation": "<p>Represents an exported definition of an API in a particular output format, for example, YAML. The API is serialized to the requested specification, for example, OpenAPI 3.0.</p>"
+    },
+    "ResetAuthorizersCacheRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can contain only alphanumeric characters, hyphens, and underscores, or be $default. Maximum length is 128 characters.</p>"
+        }
+      },
+      "required": [
+        "StageName",
+        "ApiId"
+      ]
+    },
+    "GetApiMappingRequest": {
+      "type": "structure",
+      "members": {
+        "ApiMappingId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        }
+      },
+      "required": [
+        "ApiMappingId",
+        "DomainName"
+      ]
+    },
+    "GetApiMappingResponse": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingId": {
+          "shape": "Id",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      }
+    },
+    "GetApiMappingsRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "DomainName"
+      ]
+    },
+    "GetApiMappingsResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfApiMapping",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetApiResponse": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      }
+    },
+    "GetApisRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetApisResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfApi",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetAuthorizerRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        }
+      },
+      "required": [
+        "AuthorizerId",
+        "ApiId"
+      ]
+    },
+    "GetAuthorizerResponse": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      }
+    },
+    "GetAuthorizersRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetAuthorizersResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfAuthorizer",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "DeploymentId"
+      ]
+    },
+    "GetDeploymentResponse": {
+      "type": "structure",
+      "members": {
+        "AutoDeployed": {
+          "shape": "__boolean",
+          "locationName": "autoDeployed",
+          "documentation": "<p>Specifies whether a deployment was automatically released.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The date and time when the Deployment resource was created.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier for the deployment.</p>"
+        },
+        "DeploymentStatus": {
+          "shape": "DeploymentStatus",
+          "locationName": "deploymentStatus",
+          "documentation": "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
+        },
+        "DeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "deploymentStatusMessage",
+          "documentation": "<p>May contain additional feedback on the status of an API deployment.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment.</p>"
+        }
+      }
+    },
+    "GetDeploymentsRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetDeploymentsResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfDeployment",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetDomainNameRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        }
+      },
+      "required": [
+        "DomainName"
+      ]
+    },
+    "GetDomainNameResponse": {
+      "type": "structure",
+      "members": {
+        "ApiMappingSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiMappingSelectionExpression",
+          "documentation": "<p>The API mapping selection expression.</p>"
+        },
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The name of the DomainName resource.</p>"
+        },
+        "DomainNameArn": {
+          "shape": "Arn",
+          "locationName": "domainNameArn"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthentication",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      }
+    },
+    "GetDomainNamesRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetDomainNamesResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfDomainName",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetIntegrationRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "IntegrationId"
+      ]
+    },
+    "GetIntegrationResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>Represents the description of an integration.</p>"
+        },
+        "IntegrationId": {
+          "shape": "Id",
+          "locationName": "integrationId",
+          "documentation": "<p>Represents the identifier of an integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "integrationResponseSelectionExpression",
+          "documentation": "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfig",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      }
+    },
+    "GetIntegrationResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "IntegrationResponseId",
+        "IntegrationId"
+      ]
+    },
+    "GetIntegrationResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "Id",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expressions for the integration response.</p>"
+        }
+      }
+    },
+    "GetIntegrationResponsesRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "IntegrationId",
+        "ApiId"
+      ]
+    },
+    "GetIntegrationResponsesResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfIntegrationResponse",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetIntegrationsRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetIntegrationsResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfIntegration",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetModelRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ModelId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "modelId",
+          "documentation": "<p>The model ID.</p>"
+        }
+      },
+      "required": [
+        "ModelId",
+        "ApiId"
+      ]
+    },
+    "GetModelResponse": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "ModelId": {
+          "shape": "Id",
+          "locationName": "modelId",
+          "documentation": "<p>The model identifier.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      }
+    },
+    "GetModelTemplateRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ModelId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "modelId",
+          "documentation": "<p>The model ID.</p>"
+        }
+      },
+      "required": [
+        "ModelId",
+        "ApiId"
+      ]
+    },
+    "GetModelTemplateResponse": {
+      "type": "structure",
+      "members": {
+        "Value": {
+          "shape": "__string",
+          "locationName": "value",
+          "documentation": "<p>The template value.</p>"
+        }
+      }
+    },
+    "GetModelsRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetModelsResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfModel",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetRouteRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        }
+      },
+      "required": [
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "GetRouteResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteId": {
+          "shape": "Id",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      }
+    },
+    "GetRouteResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeResponseId",
+          "documentation": "<p>The route response ID.</p>"
+        }
+      },
+      "required": [
+        "RouteResponseId",
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "GetRouteResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>Represents the response models of a route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Represents the response parameters of a route response.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "Id",
+          "locationName": "routeResponseId",
+          "documentation": "<p>Represents the identifier of a route response.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>Represents the route response key of a route response.</p>"
+        }
+      }
+    },
+    "GetRouteResponsesRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        }
+      },
+      "required": [
+        "RouteId",
+        "ApiId"
+      ]
+    },
+    "GetRouteResponsesResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfRouteResponse",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetRoutesRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetRoutesResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfRoute",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetRoutingRuleRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameId": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "domainNameId",
+          "documentation": "<p>The domain name ID.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      },
+      "required": [
+        "RoutingRuleId",
+        "DomainName"
+      ]
+    },
+    "GetRoutingRuleResponse": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>The resulting action based on matching a routing rules condition. Only InvokeApi is supported.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>The conditions of the routing rule.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "<p>The order in which API Gateway evaluates a rule. Priority is evaluated from the lowest value to the highest value.</p>"
+        },
+        "RoutingRuleArn": {
+          "shape": "Arn",
+          "locationName": "routingRuleArn",
+          "documentation": "<p>The routing rule ARN.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "Id",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      }
+    },
+    "ListRoutingRulesRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameId": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "domainNameId",
+          "documentation": "<p>The domain name ID.</p>"
+        },
+        "MaxResults": {
+          "shape": "MaxResults",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "DomainName"
+      ]
+    },
+    "ListRoutingRulesResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken"
+        },
+        "RoutingRules": {
+          "shape": "__listOfRoutingRule",
+          "locationName": "routingRules",
+          "documentation": "<p>The routing rules.<p>"
+        }
+      }
+    },
+    "GetStageRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.</p>"
+        }
+      },
+      "required": [
+        "StageName",
+        "ApiId"
+      ]
+    },
+    "GetStageResponse": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the stage was created.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>Default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the stage.</p>"
+        },
+        "LastDeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "lastDeploymentStatusMessage",
+          "documentation": "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
+        },
+        "LastUpdatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "lastUpdatedDate",
+          "documentation": "<p>The timestamp when the stage was last updated.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      }
+    },
+    "GetStagesRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "required": [
+        "ApiId"
+      ]
+    },
+    "GetStagesResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfStage",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetTagsRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "<p>The resource ARN for the tag.</p>"
+        }
+      },
+      "required": [
+        "ResourceArn"
+      ]
+    },
+    "GetTagsResponse": {
+      "type": "structure",
+      "members": {
+        "Tags": {
+          "shape": "Tags",
           "locationName": "tags"
         }
       }
     },
-    "GetVpcLinkRequest" : {
-      "type" : "structure",
-      "members" : {
-        "VpcLinkId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        }
-      },
-      "required" : [ "VpcLinkId" ]
-    },
-    "GetVpcLinkResponse" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the VPC link was created.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>Tags for the VPC link.</p>"
-        },
-        "VpcLinkId" : {
-          "shape" : "Id",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        },
-        "VpcLinkStatus" : {
-          "shape" : "VpcLinkStatus",
-          "locationName" : "vpcLinkStatus",
-          "documentation" : "<p>The status of the VPC link.</p>"
-        },
-        "VpcLinkStatusMessage" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "vpcLinkStatusMessage",
-          "documentation" : "<p>A message summarizing the cause of the status of the VPC link.</p>"
-        },
-        "VpcLinkVersion" : {
-          "shape" : "VpcLinkVersion",
-          "locationName" : "vpcLinkVersion",
-          "documentation" : "<p>The version of the VPC link.</p>"
-        }
-      }
-    },
-    "GetVpcLinksRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "maxResults",
-          "documentation" : "<p>The maximum number of elements to be returned for this resource.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "GetVpcLinksResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfVpcLink",
-          "locationName" : "items",
-          "documentation" : "<p>A collection of VPC links.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      }
-    },
-    "Id" : {
-      "type" : "string",
-      "documentation" : "<p>The identifier.</p>"
-    },
-    "IdentitySourceList" : {
-      "type" : "list",
-      "documentation" : "<p>The identity source for which authorization is requested. For the REQUEST authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an Auth header, a Name query string parameter are defined as identity sources, this value is $method.request.header.Auth, $method.request.querystring.Name. These parameters will be used to derive the authorization caching key and to perform runtime validation of the REQUEST authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional.</p>",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "ImportApiInput" : {
-      "type" : "structure",
-      "members" : {
-        "Body" : {
-          "shape" : "__string",
-          "locationName" : "body",
-          "documentation" : "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input to ImportAPI. Supported only for HTTP APIs.</p>",
-      "required" : [ "Body" ]
-    },
-    "ImportApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Basepath" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "basepath",
-          "documentation" : "<p>Specifies how to interpret the base path of the API during import. Valid values are ignore, prepend, and split. The default value is ignore. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html\">Set the OpenAPI basePath Property</a>. Supported only for HTTP APIs.</p>"
-        },
-        "Body" : {
-          "shape" : "__string",
-          "locationName" : "body",
-          "documentation" : "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
-        },
-        "FailOnWarnings" : {
-          "shape" : "__boolean",
-          "location" : "querystring",
-          "locationName" : "failOnWarnings",
-          "documentation" : "<p>Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered.</p>"
-        }
-      },
-      "documentation" : "<p></p>",
-      "required" : [ "Body" ]
-    },
-    "ImportApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      }
-    },
-    "IntegerWithLengthBetween0And3600" : {
-      "type" : "integer",
-      "documentation" : "<p>An integer with a value between [0-3600].</p>",
-      "min" : 0,
-      "max" : 3600
-    },
-    "IntegerWithLengthBetween50And30000" : {
-      "type" : "integer",
-      "documentation" : "<p>An integer with a value between [50-30000].</p>",
-      "min" : 50,
-      "max" : 30000
-    },
-    "IntegerWithLengthBetweenMinus1And86400" : {
-      "type" : "integer",
-      "documentation" : "<p>An integer with a value between -1 and 86400. Supported only for HTTP APIs.</p>",
-      "min" : -1,
-      "max" : 86400
-    },
-    "Integration" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>Represents the description of an integration.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "Id",
-          "locationName" : "integrationId",
-          "documentation" : "<p>Represents the identifier of an integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "integrationResponseSelectionExpression",
-          "documentation" : "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" :  "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfig",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an integration.</p>"
-    },
-    "IntegrationParameters" : {
-      "type" : "map",
-      "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "StringWithLengthBetween1And512"
-      }
-    },
-    "IntegrationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "Id",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expressions for the integration response.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an integration response.</p>",
-      "required" : [ "IntegrationResponseKey" ]
-    },
-    "IntegrationResponses" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfIntegrationResponse",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of integration responses.</p>"
-    },
-    "IntegrationType" : {
-      "type" : "string",
-      "documentation" : "<p>Represents an API method integration type.</p>",
-      "enum" : [ "AWS", "HTTP", "MOCK", "HTTP_PROXY", "AWS_PROXY" ]
-    },
-    "Integrations" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfIntegration",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of integrations.</p>"
-    },
-    "JWTConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "Audience" : {
-          "shape" : "__listOf__string",
-          "locationName" : "audience",
-          "documentation" : "<p>A list of the intended recipients of the JWT. A valid JWT must provide an aud that matches at least one entry in this list. See <a href=\"https://tools.ietf.org/html/rfc7519#section-4.1.3\">RFC 7519</a>. Supported only for HTTP APIs.</p>"
-        },
-        "Issuer" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "issuer",
-          "documentation" : "<p>The base domain of the identity provider that issues JSON Web Tokens. For example, an Amazon Cognito user pool has the following format: https://cognito-idp.<replaceable>{region}</replaceable>.amazonaws.com/<replaceable>{userPoolId}</replaceable>\n               . Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-    },
-    "LimitExceededException" : {
-      "type" : "structure",
-      "members" : {
-        "LimitType" : {
-          "shape" : "__string",
-          "locationName" : "limitType",
-          "documentation" : "<p>The limit type.</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>Describes the error encountered.</p>"
-        }
-      },
-      "documentation" : "<p>A limit has been exceeded. See the accompanying error message for details.</p>"
-    },
-    "LoggingLevel" : {
-      "type" : "string",
-      "documentation" : "<p>The logging level.</p>",
-      "enum" : [ "ERROR", "INFO", "OFF" ]
-    },
-    "Model" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "ModelId" : {
-          "shape" : "Id",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model identifier.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a data model for an API. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html\">Create Models and Mapping Templates for Request and Response Mappings</a>.</p>",
-      "required" : [ "Name" ]
-    },
-    "Models" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfModel",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of data models. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html\">Create Models and Mapping Templates for Request and Response Mappings</a>.</p>"
-    },
-    "MutualTlsAuthentication" : {
-      "type" : "structure",
-      "members" : {
-        "TruststoreUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "truststoreUri",
-          "documentation" : "<p>An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://<replaceable>bucket-name</replaceable>/<replaceable>key-name</replaceable>. The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.</p>"
-        },
-        "TruststoreVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "truststoreVersion",
-          "documentation" : "<p>The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.</p>"
-        },
-        "TruststoreWarnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "truststoreWarnings",
-          "documentation" : "<p>A list of warnings that API Gateway returns while processing your truststore. Invalid certificates produce warnings. Mutual TLS is still enabled, but some clients might not be able to access your API. To resolve warnings, upload a new truststore to S3, and then update you domain name to use the new version.</p>"
-        }
-      }
-    },
-    "MutualTlsAuthenticationInput" : {
-      "type" : "structure",
-      "members" : {
-        "TruststoreUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "truststoreUri",
-          "documentation" : "<p>An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://<replaceable>bucket-name</replaceable>/<replaceable>key-name</replaceable>. The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.</p>"
-        },
-        "TruststoreVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "truststoreVersion",
-          "documentation" : "<p>The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.</p>"
-        }
-      }
-    },
-    "NextToken" : {
-      "type" : "string",
-      "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-    },
-    "NotFoundException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>Describes the error encountered.</p>"
-        },
-        "ResourceType" : {
-          "shape" : "__string",
-          "locationName" : "resourceType",
-          "documentation" : "<p>The resource type.</p>"
-        }
-      },
-      "documentation" : "<p>The resource specified in the request was not found. See the message field for more information.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 404
-      }
-    },
-    "ParameterConstraints" : {
-      "type" : "structure",
-      "members" : {
-        "Required" : {
-          "shape" : "__boolean",
-          "locationName" : "required",
-          "documentation" : "<p>Whether or not the parameter is required.</p>"
-        }
-      },
-      "documentation" : "<p>Validation constraints imposed on parameters of a request (path, query string, headers).</p>"
-    },
-    "PassthroughBehavior" : {
-      "type" : "string",
-      "documentation" : "<p>Represents passthrough behavior for an integration response. Supported only for WebSocket APIs.</p>",
-      "enum" : [ "WHEN_NO_MATCH", "NEVER", "WHEN_NO_TEMPLATES" ]
-    },
-    "ProtocolType" : {
-      "type" : "string",
-      "documentation" : "Represents a protocol type.",
-      "enum" : [ "WEBSOCKET", "HTTP" ]
-    },
-    "ReimportApiInput" : {
-      "type" : "structure",
-      "members" : {
-        "Body" : {
-          "shape" : "__string",
-          "locationName" : "body",
-          "documentation" : "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Overwrites the configuration of an existing API using the provided definition. Supported only for HTTP APIs.</p>",
-      "required" : [ "Body" ]
-    },
-    "ReimportApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "Basepath" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "basepath",
-          "documentation" : "<p>Specifies how to interpret the base path of the API during import. Valid values are ignore, prepend, and split. The default value is ignore. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html\">Set the OpenAPI basePath Property</a>. Supported only for HTTP APIs.</p>"
-        },
-        "Body" : {
-          "shape" : "__string",
-          "locationName" : "body",
-          "documentation" : "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
-        },
-        "FailOnWarnings" : {
-          "shape" : "__boolean",
-          "location" : "querystring",
-          "locationName" : "failOnWarnings",
-          "documentation" : "<p>Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered.</p>"
-        }
-      },
-      "documentation" : "<p></p>",
-      "required" : [ "ApiId", "Body" ]
-    },
-    "ReimportApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      }
-    },
-    "ResponseParameters" : {
-      "type" : "map",
-      "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "IntegrationParameters"
-      }
-    },
-    "Route" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteId" : {
-          "shape" : "Id",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a route.</p>",
-      "required" : [ "RouteKey" ]
-    },
-    "RouteModels" : {
-      "type" : "map",
-      "documentation" : "<p>The route models.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "StringWithLengthBetween1And128"
-      }
-    },
-    "RouteParameters" : {
-      "type" : "map",
-      "documentation" : "<p>The route parameters.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "ParameterConstraints"
-      }
-    },
-    "RouteResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>Represents the response models of a route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Represents the response parameters of a route response.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "Id",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>Represents the identifier of a route response.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>Represents the route response key of a route response.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a route response.</p>",
-      "required" : [ "RouteResponseKey" ]
-    },
-    "RouteResponses" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfRouteResponse",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of route responses.</p>"
-    },
-    "RouteSettings" : {
-      "type" : "structure",
-      "members" : {
-        "DataTraceEnabled" : {
-          "shape" : "__boolean",
-          "locationName" : "dataTraceEnabled",
-          "documentation" : "<p>Specifies whether (true) or not (false) data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.</p>"
-        },
-        "DetailedMetricsEnabled" : {
-          "shape" : "__boolean",
-          "locationName" : "detailedMetricsEnabled",
-          "documentation" : "<p>Specifies whether detailed metrics are enabled.</p>"
-        },
-        "LoggingLevel" : {
-          "shape" : "LoggingLevel",
-          "locationName" : "loggingLevel",
-          "documentation" : "<p>Specifies the logging level for this route: INFO, ERROR, or OFF. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.</p>"
-        },
-        "ThrottlingBurstLimit" : {
-          "shape" : "__integer",
-          "locationName" : "throttlingBurstLimit",
-          "documentation" : "<p>Specifies the throttling burst limit.</p>"
-        },
-        "ThrottlingRateLimit" : {
-          "shape" : "__double",
-          "locationName" : "throttlingRateLimit",
-          "documentation" : "<p>Specifies the throttling rate limit.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of route settings.</p>"
-    },
-    "RouteSettingsMap" : {
-      "type" : "map",
-      "documentation" : "<p>The route settings map.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "RouteSettings"
-      }
-    },
-    "Routes" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfRoute",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of routes.</p>"
-    },
-    "SecurityGroupIdList" : {
-      "type" : "list",
-      "documentation" : "<p>A list of security group IDs for the VPC link.</p>",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "SecurityPolicy" : {
-      "type" : "string",
-      "documentation" : "<p>The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are TLS_1_0 and TLS_1_2.</p>",
-      "enum" : [ "TLS_1_0", "TLS_1_2" ]
-    },
-    "SelectionExpression" : {
-      "type" : "string",
-      "documentation" : "<p>An expression used to extract information at runtime. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">Selection Expressions</a> for more information.</p>"
-    },
-    "SelectionKey" : {
-      "type" : "string",
-      "documentation" : "<p>After evaluating a selection expression, the result is compared against one or more selection keys to find a matching key. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">Selection Expressions</a> for a list of expressions and each expression's associated selection key type.</p>"
-    },
-    "Stage" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the stage was created.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>Default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the stage.</p>"
-        },
-        "LastDeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "lastDeploymentStatusMessage",
-          "documentation" : "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
-        },
-        "LastUpdatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "lastUpdatedDate",
-          "documentation" : "<p>The timestamp when the stage was last updated.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      },
-      "documentation" : "<p>Represents an API stage.</p>",
-      "required" : [ "StageName" ]
-    },
-    "StageVariablesMap" : {
-      "type" : "map",
-      "documentation" : "<p>The stage variable map.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "StringWithLengthBetween0And2048"
-      }
-    },
-    "Stages" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfStage",
-          "locationName" : "items",
-          "documentation" : "<p>The elements from this collection.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>A collection of Stage resources that are associated with the ApiKey resource.</p>"
-    },
-    "StringWithLengthBetween0And1024" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [0-1024].</p>"
-    },
-    "StringWithLengthBetween0And2048" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [0-2048].</p>"
-    },
-    "StringWithLengthBetween0And32K" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [0-32768].</p>"
-    },
-    "StringWithLengthBetween1And1024" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [1-1024].</p>"
-    },
-    "StringWithLengthBetween1And128" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [1-128].</p>"
-    },
-    "StringWithLengthBetween1And1600" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [0-1600].</p>"
-    },
-    "StringWithLengthBetween1And256" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [1-256].</p>"
-    },
-    "StringWithLengthBetween1And512" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [1-512].</p>"
-    },
-    "StringWithLengthBetween1And64" : {
-      "type" : "string",
-      "documentation" : "<p>A string with a length between [1-64].</p>"
-    },
-    "SubnetIdList" : {
-      "type" : "list",
-      "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "TagResourceInput" : {
-      "type" : "structure",
-      "members" : {
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for a TagResource request.</p>"
-    },
-    "TagResourceRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "<p>The resource ARN for the tag.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      },
-      "documentation" : "<p>Creates a new Tag resource to represent a tag.</p>",
-      "required" : [ "ResourceArn" ]
-    },
-    "TagResourceResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "Tags" : {
-      "type" : "map",
-      "documentation" : "<p>Represents a collection of tags associated with the resource.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "StringWithLengthBetween1And1600"
-      }
-    },
-    "Template" : {
-      "type" : "structure",
-      "members" : {
-        "Value" : {
-          "shape" : "__string",
-          "locationName" : "value",
-          "documentation" : "<p>The template value.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a template.</p>"
-    },
-    "TemplateMap" : {
-      "type" : "map",
-      "documentation" : "<p>A mapping of identifier keys to templates. The value is an actual template script. The key is typically a SelectionKey which is chosen based on evaluating a selection expression.</p>",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "StringWithLengthBetween0And32K"
-      }
-    },
-    "TlsConfig" : {
-      "type" : "structure",
-      "members" : {
-        "ServerNameToVerify" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "serverNameToVerify",
-          "documentation" : "<p>If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.</p>"
-        }
-      },
-      "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-    },
-    "TlsConfigInput" : {
-      "type" : "structure",
-      "members" : {
-        "ServerNameToVerify" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "serverNameToVerify",
-          "documentation" : "<p>If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.</p>"
-        }
-      },
-      "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-    },
-    "TooManyRequestsException" : {
-      "type" : "structure",
-      "members" : {
-        "LimitType" : {
-          "shape" : "__string",
-          "locationName" : "limitType",
-          "documentation" : "<p>The limit type.</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>Describes the error encountered.</p>"
-        }
-      },
-      "documentation" : "<p>A limit has been exceeded. See the accompanying error message for details.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 429
-      }
-    },
-    "UntagResourceRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "<p>The resource ARN for the tag.</p>"
-        },
-        "TagKeys" : {
-          "shape" : "__listOf__string",
-          "location" : "querystring",
-          "locationName" : "tagKeys",
-          "documentation" : "<p>The Tag keys to delete</p>"
-        }
-      },
-      "required" : [ "ResourceArn", "TagKeys" ]
-    },
-    "UpdateApiInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. If provided, this value replaces the credentials associated with the quick create integration. Supported only for HTTP APIs.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>This property is part of quick create. If not specified, the route created using quick create is kept. Otherwise, this value replaces the route key of the quick create route. Additional routes may still be added after the API is updated. Supported only for HTTP APIs.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "target",
-          "documentation" : "<p>This property is part of quick create. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. The value provided updates the integration URI and integration type. You can update a quick-created target, but you can't remove it from an API. Supported only for HTTP APIs.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateApi request.</p>"
-    },
-    "UpdateApiMappingInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateApiMapping request.</p>"
-    },
-    "UpdateApiMappingRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      },
-      "documentation" : "<p>Updates an ApiMapping.</p>",
-      "required" : [ "ApiMappingId", "ApiId", "DomainName" ]
-    },
-    "UpdateApiMappingResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiMappingId" : {
-          "shape" : "Id",
-          "locationName" : "apiMappingId",
-          "documentation" : "<p>The API mapping identifier.</p>"
-        },
-        "ApiMappingKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "apiMappingKey",
-          "documentation" : "<p>The API mapping key.</p>"
-        },
-        "Stage" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stage",
-          "documentation" : "<p>The API stage.</p>"
-        }
-      }
-    },
-    "UpdateApiRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, don't specify this parameter. Currently, this property is not used for HTTP integrations. If provided, this value replaces the credentials associated with the quick create integration. Supported only for HTTP APIs.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>This property is part of quick create. If not specified, the route created using quick create is kept. Otherwise, this value replaces the route key of the quick create route. Additional routes may still be added after the API is updated. Supported only for HTTP APIs.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "target",
-          "documentation" : "<p>This property is part of quick create. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. The value provided updates the integration URI and integration type. You can update a quick-created target, but you can't remove it from an API. Supported only for HTTP APIs.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        }
-      },
-      "documentation" : "<p>Updates an Api.</p>",
-      "required" : [ "ApiId" ]
-    },
-    "UpdateApiResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiEndpoint" : {
-          "shape" : "__string",
-          "locationName" : "apiEndpoint",
-          "documentation" : "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
-        },
-        "ApiId" : {
-          "shape" : "Id",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API ID.</p>"
-        },
-        "ApiKeySelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiKeySelectionExpression",
-          "documentation" : "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
-        },
-        "CorsConfiguration" : {
-          "shape" : "Cors",
-          "locationName" : "corsConfiguration",
-          "documentation" : "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the API was created.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the API.</p>"
-        },
-        "DisableSchemaValidation" : {
-          "shape" : "__boolean",
-          "locationName" : "disableSchemaValidation",
-          "documentation" : "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
-        },
-        "DisableExecuteApiEndpoint" : {
-          "shape" : "__boolean",
-          "locationName" : "disableExecuteApiEndpoint",
-          "documentation" : "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
-        },
-        "ImportInfo" : {
-          "shape" : "__listOf__string",
-          "locationName" : "importInfo",
-          "documentation" : "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the API.</p>"
-        },
-        "ProtocolType" : {
-          "shape" : "ProtocolType",
-          "locationName" : "protocolType",
-          "documentation" : "<p>The API protocol.</p>"
-        },
-        "RouteSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeSelectionExpression",
-          "documentation" : "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>A collection of tags associated with the API.</p>"
-        },
-        "Version" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "version",
-          "documentation" : "<p>A version identifier for the API.</p>"
-        },
-        "Warnings" : {
-          "shape" : "__listOf__string",
-          "locationName" : "warnings",
-          "documentation" : "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
-        }
-      }
-    },
-    "UpdateAuthorizerInput" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>This parameter is not used.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      },
-      "documentation" : "<p>The input parameters for an UpdateAuthorizer request.</p>"
-    },
-    "UpdateAuthorizerRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>This parameter is not used.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      },
-      "documentation" : "<p>Updates an Authorizer.</p>",
-      "required" : [ "AuthorizerId", "ApiId" ]
-    },
-    "UpdateAuthorizerResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AuthorizerCredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "authorizerCredentialsArn",
-          "documentation" : "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The authorizer identifier.</p>"
-        },
-        "AuthorizerPayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "authorizerPayloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
-        },
-        "AuthorizerResultTtlInSeconds" : {
-          "shape" : "IntegerWithLengthBetween0And3600",
-          "locationName" : "authorizerResultTtlInSeconds",
-          "documentation" : "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
-        },
-        "AuthorizerType" : {
-          "shape" : "AuthorizerType",
-          "locationName" : "authorizerType",
-          "documentation" : "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
-        },
-        "AuthorizerUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "authorizerUri",
-          "documentation" : "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
-        },
-        "EnableSimpleResponses" : {
-          "shape" : "__boolean",
-          "locationName" : "enableSimpleResponses",
-          "documentation" : "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
-        },
-        "IdentitySource" : {
-          "shape" : "IdentitySourceList",
-          "locationName" : "identitySource",
-          "documentation" : "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
-        },
-        "IdentityValidationExpression" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "identityValidationExpression",
-          "documentation" : "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
-        },
-        "JwtConfiguration" : {
-          "shape" : "JWTConfiguration",
-          "locationName" : "jwtConfiguration",
-          "documentation" : "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the authorizer.</p>"
-        }
-      }
-    },
-    "UpdateDeploymentInput" : {
-      "type" : "structure",
-      "members" : {
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment resource.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateDeployment request.</p>"
-    },
-    "UpdateDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment ID.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment resource.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a Deployment.</p>",
-      "required" : [ "ApiId", "DeploymentId" ]
-    },
-    "UpdateDeploymentResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AutoDeployed" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeployed",
-          "documentation" : "<p>Specifies whether a deployment was automatically released.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The date and time when the Deployment resource was created.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier for the deployment.</p>"
-        },
-        "DeploymentStatus" : {
-          "shape" : "DeploymentStatus",
-          "locationName" : "deploymentStatus",
-          "documentation" : "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
-        },
-        "DeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "deploymentStatusMessage",
-          "documentation" : "<p>May contain additional feedback on the status of an API deployment.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the deployment.</p>"
-        }
-      }
-    },
-    "UpdateDomainNameInput" : {
-      "type" : "structure",
-      "members" : {
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthenticationInput",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateDomainName request.</p>"
-    },
-    "UpdateDomainNameRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DomainName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "domainName",
-          "documentation" : "<p>The domain name.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthenticationInput",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a DomainName.</p>",
-      "required" : [ "DomainName" ]
-    },
-    "UpdateDomainNameResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApiMappingSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "apiMappingSelectionExpression",
-          "documentation" : "<p>The API mapping selection expression.</p>"
-        },
-        "DomainName" : {
-          "shape" : "StringWithLengthBetween1And512",
-          "locationName" : "domainName",
-          "documentation" : "<p>The name of the DomainName resource.</p>"
-        },
-        "DomainNameConfigurations" : {
-          "shape" : "DomainNameConfigurations",
-          "locationName" : "domainNameConfigurations",
-          "documentation" : "<p>The domain name configurations.</p>"
-        },
-        "MutualTlsAuthentication" : {
-          "shape" : "MutualTlsAuthentication",
-          "locationName" : "mutualTlsAuthentication",
-          "documentation" : "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags associated with a domain name.</p>"
-        }
-      }
-    },
-    "UpdateIntegrationInput" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the integration</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfigInput",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateIntegration request.</p>"
-    },
-    "UpdateIntegrationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the integration</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfigInput",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Updates an Integration.</p>",
-      "required" : [ "ApiId", "IntegrationId" ]
-    },
-    "UpdateIntegrationResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
-        },
-        "ConnectionId" : {
-          "shape" : "StringWithLengthBetween1And1024",
-          "locationName" : "connectionId",
-          "documentation" : "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
-        },
-        "ConnectionType" : {
-          "shape" : "ConnectionType",
-          "locationName" : "connectionType",
-          "documentation" : "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "CredentialsArn" : {
-          "shape" : "Arn",
-          "locationName" : "credentialsArn",
-          "documentation" : "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>Represents the description of an integration.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "Id",
-          "locationName" : "integrationId",
-          "documentation" : "<p>Represents the identifier of an integration.</p>"
-        },
-        "IntegrationMethod" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "integrationMethod",
-          "documentation" : "<p>Specifies the integration's HTTP method type.</p>"
-        },
-        "IntegrationResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "integrationResponseSelectionExpression",
-          "documentation" : "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
-        },
-        "IntegrationSubtype" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "integrationSubtype",
-          "documentation" : "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
-        },
-        "IntegrationType" : {
-          "shape" : "IntegrationType",
-          "locationName" : "integrationType",
-          "documentation" : "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
-        },
-        "IntegrationUri" : {
-          "shape" : "UriWithLengthBetween1And2048",
-          "locationName" : "integrationUri",
-          "documentation" : "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
-        },
-        "PassthroughBehavior" : {
-          "shape" : "PassthroughBehavior",
-          "locationName" : "passthroughBehavior",
-          "documentation" : "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
-        },
-        "PayloadFormatVersion" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "payloadFormatVersion",
-          "documentation" : "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "RequestTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "requestTemplates",
-          "documentation" : "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "ResponseParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
-        },
-        "TimeoutInMillis" : {
-          "shape" : "IntegerWithLengthBetween50And30000",
-          "locationName" : "timeoutInMillis",
-          "documentation" : "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
-        },
-        "TlsConfig" : {
-          "shape" : "TlsConfig",
-          "locationName" : "tlsConfig",
-          "documentation" : "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
-        }
-      }
-    },
-    "UpdateIntegrationResponseInput" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.<replaceable>{name}</replaceable>\n               , where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.<replaceable>{name}</replaceable>\n                or integration.response.body.<replaceable>{JSON-expression}</replaceable>\n               , where \n                  <replaceable>{name}</replaceable>\n                is a valid and unique response header name and \n                  <replaceable>{JSON-expression}</replaceable>\n                is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateIntegrationResponse request.</p>"
-    },
-    "UpdateIntegrationResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationId",
-          "documentation" : "<p>The integration ID.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.<replaceable>{name}</replaceable>\n               , where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.<replaceable>{name}</replaceable>\n                or integration.response.body.<replaceable>{JSON-expression}</replaceable>\n               , where \n                  <replaceable>{name}</replaceable>\n                is a valid and unique response header name and \n                  <replaceable>{JSON-expression}</replaceable>\n                is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
-        }
-      },
-      "documentation" : "<p>Updates an IntegrationResponses.</p>",
-      "required" : [ "ApiId", "IntegrationResponseId", "IntegrationId" ]
-    },
-    "UpdateIntegrationResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentHandlingStrategy" : {
-          "shape" : "ContentHandlingStrategy",
-          "locationName" : "contentHandlingStrategy",
-          "documentation" : "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
-        },
-        "IntegrationResponseId" : {
-          "shape" : "Id",
-          "locationName" : "integrationResponseId",
-          "documentation" : "<p>The integration response ID.</p>"
-        },
-        "IntegrationResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "integrationResponseKey",
-          "documentation" : "<p>The integration response key.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "IntegrationParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
-        },
-        "ResponseTemplates" : {
-          "shape" : "TemplateMap",
-          "locationName" : "responseTemplates",
-          "documentation" : "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
-        },
-        "TemplateSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "templateSelectionExpression",
-          "documentation" : "<p>The template selection expressions for the integration response.</p>"
-        }
-      }
-    },
-    "UpdateModelInput" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateModel request. Supported only for WebSocket APIs.</p>"
-    },
-    "UpdateModelRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "ModelId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model ID.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a Model.</p>",
-      "required" : [ "ModelId", "ApiId" ]
-    },
-    "UpdateModelResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ContentType" : {
-          "shape" : "StringWithLengthBetween1And256",
-          "locationName" : "contentType",
-          "documentation" : "<p>The content-type for the model, for example, \"application/json\".</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the model.</p>"
-        },
-        "ModelId" : {
-          "shape" : "Id",
-          "locationName" : "modelId",
-          "documentation" : "<p>The model identifier.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the model. Must be alphanumeric.</p>"
-        },
-        "Schema" : {
-          "shape" : "StringWithLengthBetween0And32K",
-          "locationName" : "schema",
-          "documentation" : "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
-        }
-      }
-    },
-    "UpdateRouteInput" : {
-      "type" : "structure",
-      "members" : {
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>The authorization scopes supported by this route.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateRoute request.</p>"
-    },
-    "UpdateRouteRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>The authorization scopes supported by this route.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a Route.</p>",
-      "required" : [ "ApiId", "RouteId" ]
-    },
-    "UpdateRouteResult" : {
-      "type" : "structure",
-      "members" : {
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
-        },
-        "ApiKeyRequired" : {
-          "shape" : "__boolean",
-          "locationName" : "apiKeyRequired",
-          "documentation" : "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
-        },
-        "AuthorizationScopes" : {
-          "shape" : "AuthorizationScopes",
-          "locationName" : "authorizationScopes",
-          "documentation" : "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
-        },
-        "AuthorizationType" : {
-          "shape" : "AuthorizationType",
-          "locationName" : "authorizationType",
-          "documentation" : "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
-        },
-        "AuthorizerId" : {
-          "shape" : "Id",
-          "locationName" : "authorizerId",
-          "documentation" : "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "OperationName" : {
-          "shape" : "StringWithLengthBetween1And64",
-          "locationName" : "operationName",
-          "documentation" : "<p>The operation name for the route.</p>"
-        },
-        "RequestModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "requestModels",
-          "documentation" : "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RequestParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "requestParameters",
-          "documentation" : "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "RouteId" : {
-          "shape" : "Id",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeKey",
-          "documentation" : "<p>The route key for the route.</p>"
-        },
-        "RouteResponseSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "routeResponseSelectionExpression",
-          "documentation" : "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
-        },
-        "Target" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "target",
-          "documentation" : "<p>The target for the route.</p>"
-        }
-      }
-    },
-    "UpdateRouteResponseInput" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>The response models for the route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>The route response parameters.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>The route response key.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateRouteResponse request.</p>"
-    },
-    "UpdateRouteResponseRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>The response models for the route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>The route response parameters.</p>"
-        },
-        "RouteId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeId",
-          "documentation" : "<p>The route ID.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>The route response ID.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>The route response key.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a RouteResponse.</p>",
-      "required" : [ "RouteResponseId", "ApiId", "RouteId" ]
-    },
-    "UpdateRouteResponseResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ModelSelectionExpression" : {
-          "shape" : "SelectionExpression",
-          "locationName" : "modelSelectionExpression",
-          "documentation" : "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
-        },
-        "ResponseModels" : {
-          "shape" : "RouteModels",
-          "locationName" : "responseModels",
-          "documentation" : "<p>Represents the response models of a route response.</p>"
-        },
-        "ResponseParameters" : {
-          "shape" : "RouteParameters",
-          "locationName" : "responseParameters",
-          "documentation" : "<p>Represents the response parameters of a route response.</p>"
-        },
-        "RouteResponseId" : {
-          "shape" : "Id",
-          "locationName" : "routeResponseId",
-          "documentation" : "<p>Represents the identifier of a route response.</p>"
-        },
-        "RouteResponseKey" : {
-          "shape" : "SelectionKey",
-          "locationName" : "routeResponseKey",
-          "documentation" : "<p>Represents the route response key of a route response.</p>"
-        }
-      }
-    },
-    "UpdateStageInput" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>The default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment identifier for the API stage. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the API stage.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateStage request.</p>"
-    },
-    "UpdateStageRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "apiId",
-          "documentation" : "<p>The API identifier.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>The default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The deployment identifier for the API stage. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description for the API stage.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage.</p>"
-        },
-        "StageName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "stageName",
-          "documentation" : "<p>The stage name. Stage names can contain only alphanumeric characters, hyphens, and underscores, or be $default. Maximum length is 128 characters.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a Stage.</p>",
-      "required" : [ "StageName", "ApiId" ]
-    },
-    "UpdateStageResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AccessLogSettings" : {
-          "shape" : "AccessLogSettings",
-          "locationName" : "accessLogSettings",
-          "documentation" : "<p>Settings for logging access in this stage.</p>"
-        },
-        "ApiGatewayManaged" : {
-          "shape" : "__boolean",
-          "locationName" : "apiGatewayManaged",
-          "documentation" : "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
-        },
-        "AutoDeploy" : {
-          "shape" : "__boolean",
-          "locationName" : "autoDeploy",
-          "documentation" : "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
-        },
-        "ClientCertificateId" : {
-          "shape" : "Id",
-          "locationName" : "clientCertificateId",
-          "documentation" : "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
-        },
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the stage was created.</p>"
-        },
-        "DefaultRouteSettings" : {
-          "shape" : "RouteSettings",
-          "locationName" : "defaultRouteSettings",
-          "documentation" : "<p>Default route settings for the stage.</p>"
-        },
-        "DeploymentId" : {
-          "shape" : "Id",
-          "locationName" : "deploymentId",
-          "documentation" : "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
-        },
-        "Description" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the stage.</p>"
-        },
-        "LastDeploymentStatusMessage" : {
-          "shape" : "__string",
-          "locationName" : "lastDeploymentStatusMessage",
-          "documentation" : "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
-        },
-        "LastUpdatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "lastUpdatedDate",
-          "documentation" : "<p>The timestamp when the stage was last updated.</p>"
-        },
-        "RouteSettings" : {
-          "shape" : "RouteSettingsMap",
-          "locationName" : "routeSettings",
-          "documentation" : "<p>Route settings for the stage, by routeKey.</p>"
-        },
-        "StageName" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "stageName",
-          "documentation" : "<p>The name of the stage.</p>"
-        },
-        "StageVariables" : {
-          "shape" : "StageVariablesMap",
-          "locationName" : "stageVariables",
-          "documentation" : "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
-        }
-      }
-    },
-    "UpdateVpcLinkInput" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        }
-      },
-      "documentation" : "<p>Represents the input parameters for an UpdateVpcLink request.</p>"
-    },
-    "UpdateVpcLinkRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "VpcLinkId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        }
-      },
-      "documentation" : "<p>Updates a VPC link.</p>",
-      "required" : [ "VpcLinkId" ]
-    },
-    "UpdateVpcLinkResponse" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the VPC link was created.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>Tags for the VPC link.</p>"
-        },
-        "VpcLinkId" : {
-          "shape" : "Id",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        },
-        "VpcLinkStatus" : {
-          "shape" : "VpcLinkStatus",
-          "locationName" : "vpcLinkStatus",
-          "documentation" : "<p>The status of the VPC link.</p>"
-        },
-        "VpcLinkStatusMessage" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "vpcLinkStatusMessage",
-          "documentation" : "<p>A message summarizing the cause of the status of the VPC link.</p>"
-        },
-        "VpcLinkVersion" : {
-          "shape" : "VpcLinkVersion",
-          "locationName" : "vpcLinkVersion",
-          "documentation" : "<p>The version of the VPC link.</p>"
-        }
-      }
-    },
-    "UriWithLengthBetween1And2048" : {
-      "type" : "string",
-      "documentation" : "<p>A string representation of a URI with a length between [1-2048].</p>"
-    },
-    "VpcLink" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedDate" : {
-          "shape" : "__timestampIso8601",
-          "locationName" : "createdDate",
-          "documentation" : "<p>The timestamp when the VPC link was created.</p>"
-        },
-        "Name" : {
-          "shape" : "StringWithLengthBetween1And128",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the VPC link.</p>"
-        },
-        "SecurityGroupIds" : {
-          "shape" : "SecurityGroupIdList",
-          "locationName" : "securityGroupIds",
-          "documentation" : "<p>A list of security group IDs for the VPC link.</p>"
-        },
-        "SubnetIds" : {
-          "shape" : "SubnetIdList",
-          "locationName" : "subnetIds",
-          "documentation" : "<p>A list of subnet IDs to include in the VPC link.</p>"
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "<p>Tags for the VPC link.</p>"
-        },
-        "VpcLinkId" : {
-          "shape" : "Id",
-          "locationName" : "vpcLinkId",
-          "documentation" : "<p>The ID of the VPC link.</p>"
-        },
-        "VpcLinkStatus" : {
-          "shape" : "VpcLinkStatus",
-          "locationName" : "vpcLinkStatus",
-          "documentation" : "<p>The status of the VPC link.</p>"
-        },
-        "VpcLinkStatusMessage" : {
-          "shape" : "StringWithLengthBetween0And1024",
-          "locationName" : "vpcLinkStatusMessage",
-          "documentation" : "<p>A message summarizing the cause of the status of the VPC link.</p>"
-        },
-        "VpcLinkVersion" : {
-          "shape" : "VpcLinkVersion",
-          "locationName" : "vpcLinkVersion",
-          "documentation" : "<p>The version of the VPC link.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a VPC link.</p>",
-      "required" : [ "VpcLinkId", "SecurityGroupIds", "SubnetIds", "Name" ]
-    },
-    "VpcLinkStatus" : {
-      "type" : "string",
-      "documentation" : "<p>The status of the VPC link.</p>",
-      "enum" : [ "PENDING", "AVAILABLE", "DELETING", "FAILED", "INACTIVE" ]
-    },
-    "VpcLinkVersion" : {
-      "type" : "string",
-      "documentation" : "<p>The version of the VPC link.</p>",
-      "enum" : [ "V2" ]
-    },
-    "VpcLinks" : {
-      "type" : "structure",
-      "members" : {
-        "Items" : {
-          "shape" : "__listOfVpcLink",
-          "locationName" : "items",
-          "documentation" : "<p>A collection of VPC links.</p>"
-        },
-        "NextToken" : {
-          "shape" : "NextToken",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
-        }
-      },
-      "documentation" : "<p>Represents a collection of VPCLinks.</p>"
-    },
-    "__boolean" : {
-      "type" : "boolean"
-    },
-    "__double" : {
-      "type" : "double"
-    },
-    "__integer" : {
-      "type" : "integer"
-    },
-    "__listOfApi" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Api"
-      }
-    },
-    "__listOfApiMapping" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ApiMapping"
-      }
-    },
-    "__listOfAuthorizer" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Authorizer"
-      }
-    },
-    "__listOfDeployment" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Deployment"
-      }
-    },
-    "__listOfDomainName" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "DomainName"
-      }
-    },
-    "__listOfIntegration" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Integration"
-      }
-    },
-    "__listOfIntegrationResponse" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "IntegrationResponse"
-      }
-    },
-    "__listOfModel" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Model"
-      }
-    },
-    "__listOfRoute" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Route"
-      }
-    },
-    "__listOfRouteResponse" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "RouteResponse"
-      }
-    },
-    "__listOfStage" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Stage"
-      }
-    },
-    "__listOfVpcLink" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "VpcLink"
-      }
-    },
-    "__listOf__string" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "__long" : {
-      "type" : "long"
-    },
-    "__string" : {
-      "type" : "string"
-    },
-    "__timestampIso8601" : {
-      "type" : "timestamp",
-      "timestampFormat" : "iso8601"
-    },
-    "__timestampUnix" : {
-      "type" : "timestamp",
-      "timestampFormat" : "unixTimestamp"
+    "GetVpcLinkRequest": {
+      "type": "structure",
+      "members": {
+        "VpcLinkId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        }
+      },
+      "required": [
+        "VpcLinkId"
+      ]
+    },
+    "GetVpcLinkResponse": {
+      "type": "structure",
+      "members": {
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the VPC link was created.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>Tags for the VPC link.</p>"
+        },
+        "VpcLinkId": {
+          "shape": "Id",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        },
+        "VpcLinkStatus": {
+          "shape": "VpcLinkStatus",
+          "locationName": "vpcLinkStatus",
+          "documentation": "<p>The status of the VPC link.</p>"
+        },
+        "VpcLinkStatusMessage": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "vpcLinkStatusMessage",
+          "documentation": "<p>A message summarizing the cause of the status of the VPC link.</p>"
+        },
+        "VpcLinkVersion": {
+          "shape": "VpcLinkVersion",
+          "locationName": "vpcLinkVersion",
+          "documentation": "<p>The version of the VPC link.</p>"
+        }
+      }
+    },
+    "GetVpcLinksRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "<p>The maximum number of elements to be returned for this resource.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "GetVpcLinksResponse": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfVpcLink",
+          "locationName": "items",
+          "documentation": "<p>A collection of VPC links.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      }
+    },
+    "Id": {
+      "type": "string",
+      "documentation": "<p>The identifier.</p>"
+    },
+    "IdentitySourceList": {
+      "type": "list",
+      "documentation": "<p>The identity source for which authorization is requested. For the REQUEST authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an Auth header, a Name query string parameter are defined as identity sources, this value is $method.request.header.Auth, $method.request.querystring.Name. These parameters will be used to derive the authorization caching key and to perform runtime validation of the REQUEST authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional.</p>",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "ImportApiInput": {
+      "type": "structure",
+      "members": {
+        "Body": {
+          "shape": "__string",
+          "locationName": "body",
+          "documentation": "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input to ImportAPI. Supported only for HTTP APIs.</p>",
+      "required": [
+        "Body"
+      ]
+    },
+    "ImportApiRequest": {
+      "type": "structure",
+      "members": {
+        "Basepath": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "basepath",
+          "documentation": "<p>Specifies how to interpret the base path of the API during import. Valid values are ignore, prepend, and split. The default value is ignore. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html\">Set the OpenAPI basePath Property</a>. Supported only for HTTP APIs.</p>"
+        },
+        "Body": {
+          "shape": "__string",
+          "locationName": "body",
+          "documentation": "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
+        },
+        "FailOnWarnings": {
+          "shape": "__boolean",
+          "location": "querystring",
+          "locationName": "failOnWarnings",
+          "documentation": "<p>Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered.</p>"
+        }
+      },
+      "documentation": "<p></p>",
+      "required": [
+        "Body"
+      ]
+    },
+    "ImportApiResponse": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      }
+    },
+    "IntegerWithLengthBetween0And3600": {
+      "type": "integer",
+      "documentation": "<p>An integer with a value between [0-3600].</p>",
+      "min": 0,
+      "max": 3600
+    },
+    "IntegerWithLengthBetween50And30000": {
+      "type": "integer",
+      "documentation": "<p>An integer with a value between [50-30000].</p>",
+      "min": 50,
+      "max": 30000
+    },
+    "IntegerWithLengthBetweenMinus1And86400": {
+      "type": "integer",
+      "documentation": "<p>An integer with a value between -1 and 86400. Supported only for HTTP APIs.</p>",
+      "min": -1,
+      "max": 86400
+    },
+    "Integration": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>Represents the description of an integration.</p>"
+        },
+        "IntegrationId": {
+          "shape": "Id",
+          "locationName": "integrationId",
+          "documentation": "<p>Represents the identifier of an integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "integrationResponseSelectionExpression",
+          "documentation": "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfig",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents an integration.</p>"
+    },
+    "IntegrationParameters": {
+      "type": "map",
+      "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "StringWithLengthBetween1And512"
+      }
+    },
+    "IntegrationResponse": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "Id",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expressions for the integration response.</p>"
+        }
+      },
+      "documentation": "<p>Represents an integration response.</p>",
+      "required": [
+        "IntegrationResponseKey"
+      ]
+    },
+    "IntegrationResponses": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfIntegrationResponse",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of integration responses.</p>"
+    },
+    "IntegrationType": {
+      "type": "string",
+      "documentation": "<p>Represents an API method integration type.</p>",
+      "enum": [
+        "AWS",
+        "HTTP",
+        "MOCK",
+        "HTTP_PROXY",
+        "AWS_PROXY"
+      ]
+    },
+    "Integrations": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfIntegration",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of integrations.</p>"
+    },
+    "IpAddressType": {
+      "type": "string",
+      "documentation": "<p>The IP address types that can invoke your API or domain name.</p>",
+      "enum": [
+        "ipv4",
+        "dualstack"
+      ]
+    },
+    "JWTConfiguration": {
+      "type": "structure",
+      "members": {
+        "Audience": {
+          "shape": "__listOf__string",
+          "locationName": "audience",
+          "documentation": "<p>A list of the intended recipients of the JWT. A valid JWT must provide an aud that matches at least one entry in this list. See <a href=\"https://tools.ietf.org/html/rfc7519#section-4.1.3\">RFC 7519</a>. Supported only for HTTP APIs.</p>"
+        },
+        "Issuer": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "issuer",
+          "documentation": "<p>The base domain of the identity provider that issues JSON Web Tokens. For example, an Amazon Cognito user pool has the following format: https://cognito-idp.<replaceable>{region}</replaceable>.amazonaws.com/<replaceable>{userPoolId}</replaceable>\n               . Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+    },
+    "LimitExceededException": {
+      "type": "structure",
+      "members": {
+        "LimitType": {
+          "shape": "__string",
+          "locationName": "limitType",
+          "documentation": "<p>The limit type.</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation": "<p>A limit has been exceeded. See the accompanying error message for details.</p>"
+    },
+    "LoggingLevel": {
+      "type": "string",
+      "documentation": "<p>The logging level.</p>",
+      "enum": [
+        "ERROR",
+        "INFO",
+        "OFF"
+      ]
+    },
+    "Model": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "ModelId": {
+          "shape": "Id",
+          "locationName": "modelId",
+          "documentation": "<p>The model identifier.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      },
+      "documentation": "<p>Represents a data model for an API. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html\">Create Models and Mapping Templates for Request and Response Mappings</a>.</p>",
+      "required": [
+        "Name"
+      ]
+    },
+    "Models": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfModel",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of data models. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html\">Create Models and Mapping Templates for Request and Response Mappings</a>.</p>"
+    },
+    "MutualTlsAuthentication": {
+      "type": "structure",
+      "members": {
+        "TruststoreUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "truststoreUri",
+          "documentation": "<p>An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://<replaceable>bucket-name</replaceable>/<replaceable>key-name</replaceable>. The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.</p>"
+        },
+        "TruststoreVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "truststoreVersion",
+          "documentation": "<p>The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.</p>"
+        },
+        "TruststoreWarnings": {
+          "shape": "__listOf__string",
+          "locationName": "truststoreWarnings",
+          "documentation": "<p>A list of warnings that API Gateway returns while processing your truststore. Invalid certificates produce warnings. Mutual TLS is still enabled, but some clients might not be able to access your API. To resolve warnings, upload a new truststore to S3, and then update you domain name to use the new version.</p>"
+        }
+      }
+    },
+    "MutualTlsAuthenticationInput": {
+      "type": "structure",
+      "members": {
+        "TruststoreUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "truststoreUri",
+          "documentation": "<p>An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://<replaceable>bucket-name</replaceable>/<replaceable>key-name</replaceable>. The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.</p>"
+        },
+        "TruststoreVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "truststoreVersion",
+          "documentation": "<p>The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.</p>"
+        }
+      }
+    },
+    "NextToken": {
+      "type": "string",
+      "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+    },
+    "NotFoundException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>Describes the error encountered.</p>"
+        },
+        "ResourceType": {
+          "shape": "__string",
+          "locationName": "resourceType",
+          "documentation": "<p>The resource type.</p>"
+        }
+      },
+      "documentation": "<p>The resource specified in the request was not found. See the message field for more information.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 404
+      }
+    },
+    "ParameterConstraints": {
+      "type": "structure",
+      "members": {
+        "Required": {
+          "shape": "__boolean",
+          "locationName": "required",
+          "documentation": "<p>Whether or not the parameter is required.</p>"
+        }
+      },
+      "documentation": "<p>Validation constraints imposed on parameters of a request (path, query string, headers).</p>"
+    },
+    "PassthroughBehavior": {
+      "type": "string",
+      "documentation": "<p>Represents passthrough behavior for an integration response. Supported only for WebSocket APIs.</p>",
+      "enum": [
+        "WHEN_NO_MATCH",
+        "NEVER",
+        "WHEN_NO_TEMPLATES"
+      ]
+    },
+    "ProtocolType": {
+      "type": "string",
+      "documentation": "Represents a protocol type.",
+      "enum": [
+        "WEBSOCKET",
+        "HTTP"
+      ]
+    },
+    "PutRoutingRuleRequest": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>The routing rule action.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>The routing rule condition.</p>"
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameId": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "domainNameId",
+          "documentation": "<p>The domain name ID.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "<p>The routing rule priority.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      },
+      "required": [
+        "RoutingRuleId",
+        "DomainName",
+        "Actions",
+        "Priority",
+        "Conditions"
+      ]
+    },
+    "PutRoutingRuleResponse": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>The routing rule action.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>The conditions of the routing rule.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "<p>The routing rule priority.</p>"
+        },
+        "RoutingRuleArn": {
+          "shape": "Arn",
+          "locationName": "routingRuleArn",
+          "documentation": "<p>The routing rule ARN.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "Id",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      }
+    },
+    "ReimportApiInput": {
+      "type": "structure",
+      "members": {
+        "Body": {
+          "shape": "__string",
+          "locationName": "body",
+          "documentation": "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Overwrites the configuration of an existing API using the provided definition. Supported only for HTTP APIs.</p>",
+      "required": [
+        "Body"
+      ]
+    },
+    "ReimportApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "Basepath": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "basepath",
+          "documentation": "<p>Specifies how to interpret the base path of the API during import. Valid values are ignore, prepend, and split. The default value is ignore. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api-basePath.html\">Set the OpenAPI basePath Property</a>. Supported only for HTTP APIs.</p>"
+        },
+        "Body": {
+          "shape": "__string",
+          "locationName": "body",
+          "documentation": "<p>The OpenAPI definition. Supported only for HTTP APIs.</p>"
+        },
+        "FailOnWarnings": {
+          "shape": "__boolean",
+          "location": "querystring",
+          "locationName": "failOnWarnings",
+          "documentation": "<p>Specifies whether to rollback the API creation when a warning is encountered. By default, API creation continues if a warning is encountered.</p>"
+        }
+      },
+      "documentation": "<p></p>",
+      "required": [
+        "ApiId",
+        "Body"
+      ]
+    },
+    "ReimportApiResponse": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      }
+    },
+    "ResponseParameters": {
+      "type": "map",
+      "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "IntegrationParameters"
+      }
+    },
+    "Route": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteId": {
+          "shape": "Id",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      },
+      "documentation": "<p>Represents a route.</p>",
+      "required": [
+        "RouteKey"
+      ]
+    },
+    "RouteModels": {
+      "type": "map",
+      "documentation": "<p>The route models.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "StringWithLengthBetween1And128"
+      }
+    },
+    "RouteParameters": {
+      "type": "map",
+      "documentation": "<p>The route parameters.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "ParameterConstraints"
+      }
+    },
+    "RouteResponse": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>Represents the response models of a route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Represents the response parameters of a route response.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "Id",
+          "locationName": "routeResponseId",
+          "documentation": "<p>Represents the identifier of a route response.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>Represents the route response key of a route response.</p>"
+        }
+      },
+      "documentation": "<p>Represents a route response.</p>",
+      "required": [
+        "RouteResponseKey"
+      ]
+    },
+    "RouteResponses": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfRouteResponse",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of route responses.</p>"
+    },
+    "RouteSettings": {
+      "type": "structure",
+      "members": {
+        "DataTraceEnabled": {
+          "shape": "__boolean",
+          "locationName": "dataTraceEnabled",
+          "documentation": "<p>Specifies whether (true) or not (false) data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.</p>"
+        },
+        "DetailedMetricsEnabled": {
+          "shape": "__boolean",
+          "locationName": "detailedMetricsEnabled",
+          "documentation": "<p>Specifies whether detailed metrics are enabled.</p>"
+        },
+        "LoggingLevel": {
+          "shape": "LoggingLevel",
+          "locationName": "loggingLevel",
+          "documentation": "<p>Specifies the logging level for this route: INFO, ERROR, or OFF. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.</p>"
+        },
+        "ThrottlingBurstLimit": {
+          "shape": "__integer",
+          "locationName": "throttlingBurstLimit",
+          "documentation": "<p>Specifies the throttling burst limit.</p>"
+        },
+        "ThrottlingRateLimit": {
+          "shape": "__double",
+          "locationName": "throttlingRateLimit",
+          "documentation": "<p>Specifies the throttling rate limit.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of route settings.</p>"
+    },
+    "RouteSettingsMap": {
+      "type": "map",
+      "documentation": "<p>The route settings map.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "RouteSettings"
+      }
+    },
+    "Routes": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfRoute",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of routes.</p>"
+    },
+    "RoutingMode": {
+      "type": "string",
+      "enum": [
+        "API_MAPPING_ONLY",
+        "ROUTING_RULE_ONLY",
+        "ROUTING_RULE_THEN_API_MAPPING"
+      ]
+    },
+    "RoutingRule": {
+      "type": "structure",
+      "documentation": "<p>Represents a routing rule.</p>",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions",
+          "documentation": "<p>The routing rule action.</p>"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions",
+          "documentation": "<p>The routing rule condition.</p>"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority",
+          "documentation": "<p>The routing rule priority.</p>"
+        },
+        "RoutingRuleArn": {
+          "shape": "Arn",
+          "locationName": "routingRuleArn",
+          "documentation": "<p>The routing rule ARN.</p>"
+        },
+        "RoutingRuleId": {
+          "shape": "Id",
+          "locationName": "routingRuleId",
+          "documentation": "<p>The routing rule ID.</p>"
+        }
+      }
+    },
+    "RoutingRuleAction": {
+      "type": "structure",
+      "members": {
+        "InvokeApi": {
+          "shape": "RoutingRuleActionInvokeApi",
+          "locationName": "invokeApi"
+        }
+      },
+      "documentation": "<p>The routing rule action.</p>",
+      "required": [
+        "InvokeApi"
+      ]
+    },
+    "RoutingRuleActionInvokeApi": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage"
+        },
+        "StripBasePath": {
+          "shape": "__boolean",
+          "locationName": "stripBasePath",
+          "documentation": "<p>The strip base path setting.</p>"
+        }
+      },
+      "documentation": "<p>Represents an InvokeApi action.</p>",
+      "required": [
+        "Stage",
+        "ApiId"
+      ]
+    },
+    "RoutingRuleCondition": {
+      "type": "structure",
+      "documentation": "<p>Represents a routing rule condition.</p>",
+      "members": {
+        "MatchBasePaths": {
+          "shape": "RoutingRuleMatchBasePaths",
+          "locationName": "matchBasePaths",
+          "documentation": "<p>The base path to be matched.</p>"
+        },
+        "MatchHeaders": {
+          "shape": "RoutingRuleMatchHeaders",
+          "locationName": "matchHeaders",
+          "documentation": "<p>The headers to be matched.</p>"
+        }
+      }
+    },
+    "RoutingRuleInput": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOfRoutingRuleAction",
+          "locationName": "actions"
+        },
+        "Conditions": {
+          "shape": "__listOfRoutingRuleCondition",
+          "locationName": "conditions"
+        },
+        "Priority": {
+          "shape": "RoutingRulePriority",
+          "locationName": "priority"
+        }
+      },
+      "required": [
+        "Actions",
+        "Priority",
+        "Conditions"
+      ]
+    },
+    "RoutingRuleMatchBasePaths": {
+      "type": "structure",
+      "members": {
+        "AnyOf": {
+          "shape": "__listOfSelectionKey",
+          "locationName": "anyOf",
+          "documentation": "The string of the case sensitive base path to be matched."
+        }
+      },
+      "documentation": "<p>Represents a MatchBasePaths condition.</p>",
+      "required": [
+        "AnyOf"
+      ]
+    },
+    "RoutingRuleMatchHeaderValue": {
+      "type": "structure",
+      "documentation": "<p>Represents a MatchHeaderValue.</p>",
+      "members": {
+        "Header": {
+          "shape": "SelectionKey",
+          "locationName": "header"
+        },
+        "ValueGlob": {
+          "shape": "SelectionExpression",
+          "locationName": "valueGlob"
+        }
+      },
+      "required": [
+        "ValueGlob",
+        "Header"
+      ]
+    },
+    "RoutingRuleMatchHeaders": {
+      "type": "structure",
+      "documentation": "<p>Represents a MatchHeaders condition.</p>",
+      "members": {
+        "AnyOf": {
+          "shape": "__listOfRoutingRuleMatchHeaderValue",
+          "locationName": "anyOf",
+          "documentation": "<p>The header name and header value glob to be matched. The matchHeaders condition is matched if any of the header name and header value globs are matched.</p>"
+        }
+      },
+      "required": [
+        "AnyOf"
+      ]
+    },
+    "RoutingRulePriority": {
+      "type": "integer",
+      "min": 1,
+      "max": 1000000,
+      "documentation": "<p>The routing rule priority.</p>"
+    },
+    "MaxResults": {
+      "type": "integer",
+      "min": 1,
+      "max": 100
+    },
+    "RoutingRules": {
+      "type": "structure",
+      "documentation": "<p>A collection of routing rules.</p>",
+      "members": {
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken"
+        },
+        "RoutingRules": {
+          "shape": "__listOfRoutingRule",
+          "locationName": "routingRules"
+        }
+      }
+    },
+    "SecurityGroupIdList": {
+      "type": "list",
+      "documentation": "<p>A list of security group IDs for the VPC link.</p>",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "SecurityPolicy": {
+      "type": "string",
+      "documentation": "<p>The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are TLS_1_0 and TLS_1_2.</p>",
+      "enum": [
+        "TLS_1_0",
+        "TLS_1_2"
+      ]
+    },
+    "SelectionExpression": {
+      "type": "string",
+      "documentation": "<p>An expression used to extract information at runtime. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">Selection Expressions</a> for more information.</p>"
+    },
+    "SelectionKey": {
+      "type": "string",
+      "documentation": "<p>After evaluating a selection expression, the result is compared against one or more selection keys to find a matching key. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">Selection Expressions</a> for a list of expressions and each expression's associated selection key type.</p>"
+    },
+    "Stage": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the stage was created.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>Default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the stage.</p>"
+        },
+        "LastDeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "lastDeploymentStatusMessage",
+          "documentation": "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
+        },
+        "LastUpdatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "lastUpdatedDate",
+          "documentation": "<p>The timestamp when the stage was last updated.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      },
+      "documentation": "<p>Represents an API stage.</p>",
+      "required": [
+        "StageName"
+      ]
+    },
+    "StageVariablesMap": {
+      "type": "map",
+      "documentation": "<p>The stage variable map.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "StringWithLengthBetween0And2048"
+      }
+    },
+    "Stages": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfStage",
+          "locationName": "items",
+          "documentation": "<p>The elements from this collection.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>A collection of Stage resources that are associated with the ApiKey resource.</p>"
+    },
+    "StringWithLengthBetween0And1024": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [0-1024].</p>"
+    },
+    "StringWithLengthBetween0And2048": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [0-2048].</p>"
+    },
+    "StringWithLengthBetween0And32K": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [0-32768].</p>"
+    },
+    "StringWithLengthBetween1And1024": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [1-1024].</p>"
+    },
+    "StringWithLengthBetween1And128": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [1-128].</p>"
+    },
+    "StringWithLengthBetween1And1600": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [0-1600].</p>"
+    },
+    "StringWithLengthBetween1And256": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [1-256].</p>"
+    },
+    "StringWithLengthBetween1And512": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [1-512].</p>"
+    },
+    "StringWithLengthBetween1And64": {
+      "type": "string",
+      "documentation": "<p>A string with a length between [1-64].</p>"
+    },
+    "SubnetIdList": {
+      "type": "list",
+      "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "TagResourceInput": {
+      "type": "structure",
+      "members": {
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for a TagResource request.</p>"
+    },
+    "TagResourceRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "<p>The resource ARN for the tag.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      },
+      "documentation": "<p>Creates a new Tag resource to represent a tag.</p>",
+      "required": [
+        "ResourceArn"
+      ]
+    },
+    "TagResourceResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "Tags": {
+      "type": "map",
+      "documentation": "<p>Represents a collection of tags associated with the resource.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "StringWithLengthBetween1And1600"
+      }
+    },
+    "Template": {
+      "type": "structure",
+      "members": {
+        "Value": {
+          "shape": "__string",
+          "locationName": "value",
+          "documentation": "<p>The template value.</p>"
+        }
+      },
+      "documentation": "<p>Represents a template.</p>"
+    },
+    "TemplateMap": {
+      "type": "map",
+      "documentation": "<p>A mapping of identifier keys to templates. The value is an actual template script. The key is typically a SelectionKey which is chosen based on evaluating a selection expression.</p>",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "StringWithLengthBetween0And32K"
+      }
+    },
+    "TlsConfig": {
+      "type": "structure",
+      "members": {
+        "ServerNameToVerify": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "serverNameToVerify",
+          "documentation": "<p>If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.</p>"
+        }
+      },
+      "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+    },
+    "TlsConfigInput": {
+      "type": "structure",
+      "members": {
+        "ServerNameToVerify": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "serverNameToVerify",
+          "documentation": "<p>If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.</p>"
+        }
+      },
+      "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+    },
+    "TooManyRequestsException": {
+      "type": "structure",
+      "members": {
+        "LimitType": {
+          "shape": "__string",
+          "locationName": "limitType",
+          "documentation": "<p>The limit type.</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation": "<p>A limit has been exceeded. See the accompanying error message for details.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 429
+      }
+    },
+    "UntagResourceRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "<p>The resource ARN for the tag.</p>"
+        },
+        "TagKeys": {
+          "shape": "__listOf__string",
+          "location": "querystring",
+          "locationName": "tagKeys",
+          "documentation": "<p>The Tag keys to delete</p>"
+        }
+      },
+      "required": [
+        "ResourceArn",
+        "TagKeys"
+      ]
+    },
+    "UpdateApiInput": {
+      "type": "structure",
+      "members": {
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null. Currently, this property is not used for HTTP integrations. If provided, this value replaces the credentials associated with the quick create integration. Supported only for HTTP APIs.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>This property is part of quick create. If not specified, the route created using quick create is kept. Otherwise, this value replaces the route key of the quick create route. Additional routes may still be added after the API is updated. Supported only for HTTP APIs.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "target",
+          "documentation": "<p>This property is part of quick create. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. The value provided updates the integration URI and integration type. You can update a quick-created target, but you can't remove it from an API. Supported only for HTTP APIs.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateApi request.</p>"
+    },
+    "UpdateApiMappingInput": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateApiMapping request.</p>"
+    },
+    "UpdateApiMappingRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      },
+      "documentation": "<p>Updates an ApiMapping.</p>",
+      "required": [
+        "ApiMappingId",
+        "ApiId",
+        "DomainName"
+      ]
+    },
+    "UpdateApiMappingResponse": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiMappingId": {
+          "shape": "Id",
+          "locationName": "apiMappingId",
+          "documentation": "<p>The API mapping identifier.</p>"
+        },
+        "ApiMappingKey": {
+          "shape": "SelectionKey",
+          "locationName": "apiMappingKey",
+          "documentation": "<p>The API mapping key.</p>"
+        },
+        "Stage": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stage",
+          "documentation": "<p>The API stage.</p>"
+        }
+      }
+    },
+    "UpdateApiRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>This property is part of quick create. It specifies the credentials required for the integration, if any. For a Lambda integration, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, don't specify this parameter. Currently, this property is not used for HTTP integrations. If provided, this value replaces the credentials associated with the quick create integration. Supported only for HTTP APIs.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke your API or domain name.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>This property is part of quick create. If not specified, the route created using quick create is kept. Otherwise, this value replaces the route key of the quick create route. Additional routes may still be added after the API is updated. Supported only for HTTP APIs.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "target",
+          "documentation": "<p>This property is part of quick create. For HTTP integrations, specify a fully qualified URL. For Lambda integrations, specify a function ARN. The type of the integration will be HTTP_PROXY or AWS_PROXY, respectively. The value provided updates the integration URI and integration type. You can update a quick-created target, but you can't remove it from an API. Supported only for HTTP APIs.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        }
+      },
+      "documentation": "<p>Updates an Api.</p>",
+      "required": [
+        "ApiId"
+      ]
+    },
+    "UpdateApiResponse": {
+      "type": "structure",
+      "members": {
+        "ApiEndpoint": {
+          "shape": "__string",
+          "locationName": "apiEndpoint",
+          "documentation": "<p>The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.</p>"
+        },
+        "ApiId": {
+          "shape": "Id",
+          "locationName": "apiId",
+          "documentation": "<p>The API ID.</p>"
+        },
+        "ApiKeySelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiKeySelectionExpression",
+          "documentation": "<p>An API key selection expression. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions\">API Key Selection Expressions</a>.</p>"
+        },
+        "CorsConfiguration": {
+          "shape": "Cors",
+          "locationName": "corsConfiguration",
+          "documentation": "<p>A CORS configuration. Supported only for HTTP APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the API was created.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the API.</p>"
+        },
+        "DisableSchemaValidation": {
+          "shape": "__boolean",
+          "locationName": "disableSchemaValidation",
+          "documentation": "<p>Avoid validating models when creating a deployment. Supported only for WebSocket APIs.</p>"
+        },
+        "DisableExecuteApiEndpoint": {
+          "shape": "__boolean",
+          "locationName": "disableExecuteApiEndpoint",
+          "documentation": "<p>Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.</p>"
+        },
+        "ImportInfo": {
+          "shape": "__listOf__string",
+          "locationName": "importInfo",
+          "documentation": "<p>The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.</p>"
+        },
+        "IpAddressType": {
+          "shape": "IpAddressType",
+          "locationName": "ipAddressType",
+          "documentation": "<p>The IP address types that can invoke the API.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the API.</p>"
+        },
+        "ProtocolType": {
+          "shape": "ProtocolType",
+          "locationName": "protocolType",
+          "documentation": "<p>The API protocol.</p>"
+        },
+        "RouteSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeSelectionExpression",
+          "documentation": "<p>The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>A collection of tags associated with the API.</p>"
+        },
+        "Version": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "version",
+          "documentation": "<p>A version identifier for the API.</p>"
+        },
+        "Warnings": {
+          "shape": "__listOf__string",
+          "locationName": "warnings",
+          "documentation": "<p>The warning messages reported when failonwarnings is turned on during API import.</p>"
+        }
+      }
+    },
+    "UpdateAuthorizerInput": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>This parameter is not used.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      },
+      "documentation": "<p>The input parameters for an UpdateAuthorizer request.</p>"
+    },
+    "UpdateAuthorizerRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. By default, a Lambda authorizer must return an IAM policy. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>This parameter is not used.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      },
+      "documentation": "<p>Updates an Authorizer.</p>",
+      "required": [
+        "AuthorizerId",
+        "ApiId"
+      ]
+    },
+    "UpdateAuthorizerResponse": {
+      "type": "structure",
+      "members": {
+        "AuthorizerCredentialsArn": {
+          "shape": "Arn",
+          "locationName": "authorizerCredentialsArn",
+          "documentation": "<p>Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The authorizer identifier.</p>"
+        },
+        "AuthorizerPayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "authorizerPayloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p>"
+        },
+        "AuthorizerResultTtlInSeconds": {
+          "shape": "IntegerWithLengthBetween0And3600",
+          "locationName": "authorizerResultTtlInSeconds",
+          "documentation": "<p>The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.</p>"
+        },
+        "AuthorizerType": {
+          "shape": "AuthorizerType",
+          "locationName": "authorizerType",
+          "documentation": "<p>The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).</p>"
+        },
+        "AuthorizerUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "authorizerUri",
+          "documentation": "<p>The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:<replaceable>{account_id}</replaceable>:function:<replaceable>{lambda_function_name}</replaceable>/invocations. In general, the URI has this form: arn:aws:apigateway:<replaceable>{region}</replaceable>:lambda:path/<replaceable>{service_api}</replaceable>\n               , where <replaceable></replaceable>{region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.</p>"
+        },
+        "EnableSimpleResponses": {
+          "shape": "__boolean",
+          "locationName": "enableSimpleResponses",
+          "documentation": "<p>Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a></p>"
+        },
+        "IdentitySource": {
+          "shape": "IdentitySourceList",
+          "locationName": "identitySource",
+          "documentation": "<p>The identity source for which authorization is requested.</p> <p>For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html\">Working with AWS Lambda authorizers for HTTP APIs</a>.</p> <p>For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.</p>"
+        },
+        "IdentityValidationExpression": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "identityValidationExpression",
+          "documentation": "<p>The validation expression does not apply to the REQUEST authorizer.</p>"
+        },
+        "JwtConfiguration": {
+          "shape": "JWTConfiguration",
+          "locationName": "jwtConfiguration",
+          "documentation": "<p>Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the authorizer.</p>"
+        }
+      }
+    },
+    "UpdateDeploymentInput": {
+      "type": "structure",
+      "members": {
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment resource.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateDeployment request.</p>"
+    },
+    "UpdateDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment ID.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment resource.</p>"
+        }
+      },
+      "documentation": "<p>Updates a Deployment.</p>",
+      "required": [
+        "ApiId",
+        "DeploymentId"
+      ]
+    },
+    "UpdateDeploymentResponse": {
+      "type": "structure",
+      "members": {
+        "AutoDeployed": {
+          "shape": "__boolean",
+          "locationName": "autoDeployed",
+          "documentation": "<p>Specifies whether a deployment was automatically released.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The date and time when the Deployment resource was created.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier for the deployment.</p>"
+        },
+        "DeploymentStatus": {
+          "shape": "DeploymentStatus",
+          "locationName": "deploymentStatus",
+          "documentation": "<p>The status of the deployment: PENDING, FAILED, or SUCCEEDED.</p>"
+        },
+        "DeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "deploymentStatusMessage",
+          "documentation": "<p>May contain additional feedback on the status of an API deployment.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the deployment.</p>"
+        }
+      }
+    },
+    "UpdateDomainNameInput": {
+      "type": "structure",
+      "members": {
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthenticationInput",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateDomainName request.</p>"
+    },
+    "UpdateDomainNameRequest": {
+      "type": "structure",
+      "members": {
+        "DomainName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "domainName",
+          "documentation": "<p>The domain name.</p>"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthenticationInput",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        }
+      },
+      "documentation": "<p>Updates a DomainName.</p>",
+      "required": [
+        "DomainName"
+      ]
+    },
+    "UpdateDomainNameResponse": {
+      "type": "structure",
+      "members": {
+        "ApiMappingSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "apiMappingSelectionExpression",
+          "documentation": "<p>The API mapping selection expression.</p>"
+        },
+        "DomainName": {
+          "shape": "StringWithLengthBetween1And512",
+          "locationName": "domainName",
+          "documentation": "<p>The name of the DomainName resource.</p>"
+        },
+        "DomainNameArn": {
+          "shape": "Arn",
+          "locationName": "domainNameArn"
+        },
+        "DomainNameConfigurations": {
+          "shape": "DomainNameConfigurations",
+          "locationName": "domainNameConfigurations",
+          "documentation": "<p>The domain name configurations.</p>"
+        },
+        "MutualTlsAuthentication": {
+          "shape": "MutualTlsAuthentication",
+          "locationName": "mutualTlsAuthentication",
+          "documentation": "<p>The mutual TLS authentication configuration for a custom domain name.</p>"
+        },
+        "RoutingMode": {
+          "shape": "RoutingMode",
+          "locationName": "routingMode",
+          "documentation": "<p>The routing mode.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags associated with a domain name.</p>"
+        }
+      }
+    },
+    "UpdateIntegrationInput": {
+      "type": "structure",
+      "members": {
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the integration</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfigInput",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateIntegration request.</p>"
+    },
+    "UpdateIntegrationRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the integration</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. For HTTP API private integrations, use an HTTP_PROXY integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt; where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfigInput",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      },
+      "documentation": "<p>Updates an Integration.</p>",
+      "required": [
+        "ApiId",
+        "IntegrationId"
+      ]
+    },
+    "UpdateIntegrationResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.</p>"
+        },
+        "ConnectionId": {
+          "shape": "StringWithLengthBetween1And1024",
+          "locationName": "connectionId",
+          "documentation": "<p>The ID of the VPC link for a private integration. Supported only for HTTP APIs.</p>"
+        },
+        "ConnectionType": {
+          "shape": "ConnectionType",
+          "locationName": "connectionType",
+          "documentation": "<p>The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "CredentialsArn": {
+          "shape": "Arn",
+          "locationName": "credentialsArn",
+          "documentation": "<p>Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>Represents the description of an integration.</p>"
+        },
+        "IntegrationId": {
+          "shape": "Id",
+          "locationName": "integrationId",
+          "documentation": "<p>Represents the identifier of an integration.</p>"
+        },
+        "IntegrationMethod": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "integrationMethod",
+          "documentation": "<p>Specifies the integration's HTTP method type.</p>"
+        },
+        "IntegrationResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "integrationResponseSelectionExpression",
+          "documentation": "<p>The integration response selection expression for the integration. Supported only for WebSocket APIs. See <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-integration-response-selection-expressions\">Integration Response Selection Expressions</a>.</p>"
+        },
+        "IntegrationSubtype": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "integrationSubtype",
+          "documentation": "<p>Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html\">Integration subtype reference</a>.</p>"
+        },
+        "IntegrationType": {
+          "shape": "IntegrationType",
+          "locationName": "integrationType",
+          "documentation": "<p>The integration type of an integration. One of the following:</p> <p>AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs.</p> <p>AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration.</p> <p>HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs.</p> <p>HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration.</p> <p>MOCK: for integrating the route or method request with API Gateway as a \"loopback\" endpoint without invoking any backend. Supported only for WebSocket APIs.</p>"
+        },
+        "IntegrationUri": {
+          "shape": "UriWithLengthBetween1And2048",
+          "locationName": "integrationUri",
+          "documentation": "<p>For a Lambda integration, specify the URI of a Lambda function.</p> <p>For an HTTP integration, specify a fully-qualified URL.</p> <p>For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html\">DiscoverInstances</a>. For private integrations, all resources must be owned by the same AWS account.</p>"
+        },
+        "PassthroughBehavior": {
+          "shape": "PassthroughBehavior",
+          "locationName": "passthroughBehavior",
+          "documentation": "<p>Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs.</p> <p>WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation.</p> <p>NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response.</p> <p>WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.</p>"
+        },
+        "PayloadFormatVersion": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "payloadFormatVersion",
+          "documentation": "<p>Specifies the format of the payload sent to an integration. Required for HTTP APIs. Supported values for Lambda proxy integrations are 1.0 and 2.0. For all other integrations, 1.0 is the only supported value. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html\">Working with AWS Lambda proxy integrations for HTTP APIs</a>.</p>"
+        },
+        "RequestParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.<replaceable>{location}</replaceable>.<replaceable>{name}</replaceable>\n          , where \n            <replaceable>{location}</replaceable>\n           is querystring, path, or header; and \n            <replaceable>{name}</replaceable>\n           must be a valid and unique method request parameter name.</p> <p>For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html\">Working with AWS service integrations for HTTP APIs</a>.</p> <p>For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "RequestTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "requestTemplates",
+          "documentation": "<p>Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "ResponseParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see <a href=\"https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html\">Transforming API requests and responses</a>.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration. Supported only for WebSocket APIs.</p>"
+        },
+        "TimeoutInMillis": {
+          "shape": "IntegerWithLengthBetween50And30000",
+          "locationName": "timeoutInMillis",
+          "documentation": "<p>Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.</p>"
+        },
+        "TlsConfig": {
+          "shape": "TlsConfig",
+          "locationName": "tlsConfig",
+          "documentation": "<p>The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.</p>"
+        }
+      }
+    },
+    "UpdateIntegrationResponseInput": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.<replaceable>{name}</replaceable>\n               , where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.<replaceable>{name}</replaceable>\n                or integration.response.body.<replaceable>{JSON-expression}</replaceable>\n               , where \n                  <replaceable>{name}</replaceable>\n                is a valid and unique response header name and \n                  <replaceable>{JSON-expression}</replaceable>\n                is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateIntegrationResponse request.</p>"
+    },
+    "UpdateIntegrationResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationId",
+          "documentation": "<p>The integration ID.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.<replaceable>{name}</replaceable>\n               , where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.<replaceable>{name}</replaceable>\n                or integration.response.body.<replaceable>{JSON-expression}</replaceable>\n               , where \n                  <replaceable>{name}</replaceable>\n                is a valid and unique response header name and \n                  <replaceable>{JSON-expression}</replaceable>\n                is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expression for the integration response. Supported only for WebSocket APIs.</p>"
+        }
+      },
+      "documentation": "<p>Updates an IntegrationResponses.</p>",
+      "required": [
+        "ApiId",
+        "IntegrationResponseId",
+        "IntegrationId"
+      ]
+    },
+    "UpdateIntegrationResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ContentHandlingStrategy": {
+          "shape": "ContentHandlingStrategy",
+          "locationName": "contentHandlingStrategy",
+          "documentation": "<p>Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors:</p> <p>CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob.</p> <p>CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string.</p> <p>If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.</p>"
+        },
+        "IntegrationResponseId": {
+          "shape": "Id",
+          "locationName": "integrationResponseId",
+          "documentation": "<p>The integration response ID.</p>"
+        },
+        "IntegrationResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "integrationResponseKey",
+          "documentation": "<p>The integration response key.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "IntegrationParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.</p>"
+        },
+        "ResponseTemplates": {
+          "shape": "TemplateMap",
+          "locationName": "responseTemplates",
+          "documentation": "<p>The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.</p>"
+        },
+        "TemplateSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "templateSelectionExpression",
+          "documentation": "<p>The template selection expressions for the integration response.</p>"
+        }
+      }
+    },
+    "UpdateModelInput": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateModel request. Supported only for WebSocket APIs.</p>"
+    },
+    "UpdateModelRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "ModelId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "modelId",
+          "documentation": "<p>The model ID.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      },
+      "documentation": "<p>Updates a Model.</p>",
+      "required": [
+        "ModelId",
+        "ApiId"
+      ]
+    },
+    "UpdateModelResponse": {
+      "type": "structure",
+      "members": {
+        "ContentType": {
+          "shape": "StringWithLengthBetween1And256",
+          "locationName": "contentType",
+          "documentation": "<p>The content-type for the model, for example, \"application/json\".</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the model.</p>"
+        },
+        "ModelId": {
+          "shape": "Id",
+          "locationName": "modelId",
+          "documentation": "<p>The model identifier.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the model. Must be alphanumeric.</p>"
+        },
+        "Schema": {
+          "shape": "StringWithLengthBetween0And32K",
+          "locationName": "schema",
+          "documentation": "<p>The schema for the model. For application/json models, this should be JSON schema draft 4 model.</p>"
+        }
+      }
+    },
+    "UpdateRouteInput": {
+      "type": "structure",
+      "members": {
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>The authorization scopes supported by this route.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateRoute request.</p>"
+    },
+    "UpdateRouteRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>The authorization scopes supported by this route.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      },
+      "documentation": "<p>Updates a Route.</p>",
+      "required": [
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "UpdateRouteResult": {
+      "type": "structure",
+      "members": {
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.</p>"
+        },
+        "ApiKeyRequired": {
+          "shape": "__boolean",
+          "locationName": "apiKeyRequired",
+          "documentation": "<p>Specifies whether an API key is required for this route. Supported only for WebSocket APIs.</p>"
+        },
+        "AuthorizationScopes": {
+          "shape": "AuthorizationScopes",
+          "locationName": "authorizationScopes",
+          "documentation": "<p>A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.</p>"
+        },
+        "AuthorizationType": {
+          "shape": "AuthorizationType",
+          "locationName": "authorizationType",
+          "documentation": "<p>The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.</p>"
+        },
+        "AuthorizerId": {
+          "shape": "Id",
+          "locationName": "authorizerId",
+          "documentation": "<p>The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "OperationName": {
+          "shape": "StringWithLengthBetween1And64",
+          "locationName": "operationName",
+          "documentation": "<p>The operation name for the route.</p>"
+        },
+        "RequestModels": {
+          "shape": "RouteModels",
+          "locationName": "requestModels",
+          "documentation": "<p>The request models for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RequestParameters": {
+          "shape": "RouteParameters",
+          "locationName": "requestParameters",
+          "documentation": "<p>The request parameters for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "RouteId": {
+          "shape": "Id",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeKey",
+          "documentation": "<p>The route key for the route.</p>"
+        },
+        "RouteResponseSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "routeResponseSelectionExpression",
+          "documentation": "<p>The route response selection expression for the route. Supported only for WebSocket APIs.</p>"
+        },
+        "Target": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "target",
+          "documentation": "<p>The target for the route.</p>"
+        }
+      }
+    },
+    "UpdateRouteResponseInput": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>The response models for the route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>The route response parameters.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>The route response key.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateRouteResponse request.</p>"
+    },
+    "UpdateRouteResponseRequest": {
+      "type": "structure",
+      "members": {
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>The model selection expression for the route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>The response models for the route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>The route response parameters.</p>"
+        },
+        "RouteId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeId",
+          "documentation": "<p>The route ID.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "routeResponseId",
+          "documentation": "<p>The route response ID.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>The route response key.</p>"
+        }
+      },
+      "documentation": "<p>Updates a RouteResponse.</p>",
+      "required": [
+        "RouteResponseId",
+        "ApiId",
+        "RouteId"
+      ]
+    },
+    "UpdateRouteResponseResponse": {
+      "type": "structure",
+      "members": {
+        "ModelSelectionExpression": {
+          "shape": "SelectionExpression",
+          "locationName": "modelSelectionExpression",
+          "documentation": "<p>Represents the model selection expression of a route response. Supported only for WebSocket APIs.</p>"
+        },
+        "ResponseModels": {
+          "shape": "RouteModels",
+          "locationName": "responseModels",
+          "documentation": "<p>Represents the response models of a route response.</p>"
+        },
+        "ResponseParameters": {
+          "shape": "RouteParameters",
+          "locationName": "responseParameters",
+          "documentation": "<p>Represents the response parameters of a route response.</p>"
+        },
+        "RouteResponseId": {
+          "shape": "Id",
+          "locationName": "routeResponseId",
+          "documentation": "<p>Represents the identifier of a route response.</p>"
+        },
+        "RouteResponseKey": {
+          "shape": "SelectionKey",
+          "locationName": "routeResponseKey",
+          "documentation": "<p>Represents the route response key of a route response.</p>"
+        }
+      }
+    },
+    "UpdateStageInput": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>The default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment identifier for the API stage. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the API stage.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateStage request.</p>"
+    },
+    "UpdateStageRequest": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "apiId",
+          "documentation": "<p>The API identifier.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>The default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The deployment identifier for the API stage. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description for the API stage.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage.</p>"
+        },
+        "StageName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "stageName",
+          "documentation": "<p>The stage name. Stage names can contain only alphanumeric characters, hyphens, and underscores, or be $default. Maximum length is 128 characters.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a Stage. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        }
+      },
+      "documentation": "<p>Updates a Stage.</p>",
+      "required": [
+        "StageName",
+        "ApiId"
+      ]
+    },
+    "UpdateStageResponse": {
+      "type": "structure",
+      "members": {
+        "AccessLogSettings": {
+          "shape": "AccessLogSettings",
+          "locationName": "accessLogSettings",
+          "documentation": "<p>Settings for logging access in this stage.</p>"
+        },
+        "ApiGatewayManaged": {
+          "shape": "__boolean",
+          "locationName": "apiGatewayManaged",
+          "documentation": "<p>Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.</p>"
+        },
+        "AutoDeploy": {
+          "shape": "__boolean",
+          "locationName": "autoDeploy",
+          "documentation": "<p>Specifies whether updates to an API automatically trigger a new deployment. The default value is false.</p>"
+        },
+        "ClientCertificateId": {
+          "shape": "Id",
+          "locationName": "clientCertificateId",
+          "documentation": "<p>The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.</p>"
+        },
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the stage was created.</p>"
+        },
+        "DefaultRouteSettings": {
+          "shape": "RouteSettings",
+          "locationName": "defaultRouteSettings",
+          "documentation": "<p>Default route settings for the stage.</p>"
+        },
+        "DeploymentId": {
+          "shape": "Id",
+          "locationName": "deploymentId",
+          "documentation": "<p>The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.</p>"
+        },
+        "Description": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "description",
+          "documentation": "<p>The description of the stage.</p>"
+        },
+        "LastDeploymentStatusMessage": {
+          "shape": "__string",
+          "locationName": "lastDeploymentStatusMessage",
+          "documentation": "<p>Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.</p>"
+        },
+        "LastUpdatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "lastUpdatedDate",
+          "documentation": "<p>The timestamp when the stage was last updated.</p>"
+        },
+        "RouteSettings": {
+          "shape": "RouteSettingsMap",
+          "locationName": "routeSettings",
+          "documentation": "<p>Route settings for the stage, by routeKey.</p>"
+        },
+        "StageName": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "stageName",
+          "documentation": "<p>The name of the stage.</p>"
+        },
+        "StageVariables": {
+          "shape": "StageVariablesMap",
+          "locationName": "stageVariables",
+          "documentation": "<p>A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>The collection of tags. Each tag element is associated with a given resource.</p>"
+        }
+      }
+    },
+    "UpdateVpcLinkInput": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        }
+      },
+      "documentation": "<p>Represents the input parameters for an UpdateVpcLink request.</p>"
+    },
+    "UpdateVpcLinkRequest": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "VpcLinkId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        }
+      },
+      "documentation": "<p>Updates a VPC link.</p>",
+      "required": [
+        "VpcLinkId"
+      ]
+    },
+    "UpdateVpcLinkResponse": {
+      "type": "structure",
+      "members": {
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the VPC link was created.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>Tags for the VPC link.</p>"
+        },
+        "VpcLinkId": {
+          "shape": "Id",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        },
+        "VpcLinkStatus": {
+          "shape": "VpcLinkStatus",
+          "locationName": "vpcLinkStatus",
+          "documentation": "<p>The status of the VPC link.</p>"
+        },
+        "VpcLinkStatusMessage": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "vpcLinkStatusMessage",
+          "documentation": "<p>A message summarizing the cause of the status of the VPC link.</p>"
+        },
+        "VpcLinkVersion": {
+          "shape": "VpcLinkVersion",
+          "locationName": "vpcLinkVersion",
+          "documentation": "<p>The version of the VPC link.</p>"
+        }
+      }
+    },
+    "UriWithLengthBetween1And2048": {
+      "type": "string",
+      "documentation": "<p>A string representation of a URI with a length between [1-2048].</p>"
+    },
+    "VpcLink": {
+      "type": "structure",
+      "members": {
+        "CreatedDate": {
+          "shape": "__timestampIso8601",
+          "locationName": "createdDate",
+          "documentation": "<p>The timestamp when the VPC link was created.</p>"
+        },
+        "Name": {
+          "shape": "StringWithLengthBetween1And128",
+          "locationName": "name",
+          "documentation": "<p>The name of the VPC link.</p>"
+        },
+        "SecurityGroupIds": {
+          "shape": "SecurityGroupIdList",
+          "locationName": "securityGroupIds",
+          "documentation": "<p>A list of security group IDs for the VPC link.</p>"
+        },
+        "SubnetIds": {
+          "shape": "SubnetIdList",
+          "locationName": "subnetIds",
+          "documentation": "<p>A list of subnet IDs to include in the VPC link.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "<p>Tags for the VPC link.</p>"
+        },
+        "VpcLinkId": {
+          "shape": "Id",
+          "locationName": "vpcLinkId",
+          "documentation": "<p>The ID of the VPC link.</p>"
+        },
+        "VpcLinkStatus": {
+          "shape": "VpcLinkStatus",
+          "locationName": "vpcLinkStatus",
+          "documentation": "<p>The status of the VPC link.</p>"
+        },
+        "VpcLinkStatusMessage": {
+          "shape": "StringWithLengthBetween0And1024",
+          "locationName": "vpcLinkStatusMessage",
+          "documentation": "<p>A message summarizing the cause of the status of the VPC link.</p>"
+        },
+        "VpcLinkVersion": {
+          "shape": "VpcLinkVersion",
+          "locationName": "vpcLinkVersion",
+          "documentation": "<p>The version of the VPC link.</p>"
+        }
+      },
+      "documentation": "<p>Represents a VPC link.</p>",
+      "required": [
+        "VpcLinkId",
+        "SecurityGroupIds",
+        "SubnetIds",
+        "Name"
+      ]
+    },
+    "VpcLinkStatus": {
+      "type": "string",
+      "documentation": "<p>The status of the VPC link.</p>",
+      "enum": [
+        "PENDING",
+        "AVAILABLE",
+        "DELETING",
+        "FAILED",
+        "INACTIVE"
+      ]
+    },
+    "VpcLinkVersion": {
+      "type": "string",
+      "documentation": "<p>The version of the VPC link.</p>",
+      "enum": [
+        "V2"
+      ]
+    },
+    "VpcLinks": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "__listOfVpcLink",
+          "locationName": "items",
+          "documentation": "<p>A collection of VPC links.</p>"
+        },
+        "NextToken": {
+          "shape": "NextToken",
+          "locationName": "nextToken",
+          "documentation": "<p>The next page of elements from this collection. Not valid for the last element of the collection.</p>"
+        }
+      },
+      "documentation": "<p>Represents a collection of VPCLinks.</p>"
+    },
+    "__boolean": {
+      "type": "boolean"
+    },
+    "__double": {
+      "type": "double"
+    },
+    "__integer": {
+      "type": "integer"
+    },
+    "__listOfApi": {
+      "type": "list",
+      "member": {
+        "shape": "Api"
+      }
+    },
+    "__listOfApiMapping": {
+      "type": "list",
+      "member": {
+        "shape": "ApiMapping"
+      }
+    },
+    "__listOfAuthorizer": {
+      "type": "list",
+      "member": {
+        "shape": "Authorizer"
+      }
+    },
+    "__listOfDeployment": {
+      "type": "list",
+      "member": {
+        "shape": "Deployment"
+      }
+    },
+    "__listOfDomainName": {
+      "type": "list",
+      "member": {
+        "shape": "DomainName"
+      }
+    },
+    "__listOfIntegration": {
+      "type": "list",
+      "member": {
+        "shape": "Integration"
+      }
+    },
+    "__listOfIntegrationResponse": {
+      "type": "list",
+      "member": {
+        "shape": "IntegrationResponse"
+      }
+    },
+    "__listOfModel": {
+      "type": "list",
+      "member": {
+        "shape": "Model"
+      }
+    },
+    "__listOfRoute": {
+      "type": "list",
+      "member": {
+        "shape": "Route"
+      }
+    },
+    "__listOfRouteResponse": {
+      "type": "list",
+      "member": {
+        "shape": "RouteResponse"
+      }
+    },
+    "__listOfRoutingRule": {
+      "type": "list",
+      "member": {
+        "shape": "RoutingRule"
+      }
+    },
+    "__listOfRoutingRuleAction": {
+      "type": "list",
+      "member": {
+        "shape": "RoutingRuleAction"
+      }
+    },
+    "__listOfRoutingRuleCondition": {
+      "type": "list",
+      "member": {
+        "shape": "RoutingRuleCondition"
+      }
+    },
+    "__listOfRoutingRuleMatchHeaderValue": {
+      "type": "list",
+      "member": {
+        "shape": "RoutingRuleMatchHeaderValue"
+      }
+    },
+    "__listOfSelectionKey": {
+      "type": "list",
+      "member": {
+        "shape": "SelectionKey"
+      }
+    },
+    "__listOfStage": {
+      "type": "list",
+      "member": {
+        "shape": "Stage"
+      }
+    },
+    "__listOfVpcLink": {
+      "type": "list",
+      "member": {
+        "shape": "VpcLink"
+      }
+    },
+    "__listOf__string": {
+      "type": "list",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "__long": {
+      "type": "long"
+    },
+    "__string": {
+      "type": "string"
+    },
+    "__timestampIso8601": {
+      "type": "timestamp",
+      "timestampFormat": "iso8601"
+    },
+    "__timestampUnix": {
+      "type": "timestamp",
+      "timestampFormat": "unixTimestamp"
     }
   },
-  "documentation" : "<p>Amazon API Gateway V2</p>"
-}
+  "documentation": "<p>Amazon API Gateway V2</p>"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/service-2.json 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/service-2.json
--- 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -738,7 +738,7 @@
       "members":{
         "DeletionProtection":{
           "shape":"DeletionProtectionSettings",
-          "documentation":"<p>A parameter to configure deletion protection. If enabled, deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval. Deletion protection is disabled by default. The default interval for <code>ProtectionPeriodInMinutes</code> is 60.</p>"
+          "documentation":"<p>A parameter to configure deletion protection. Deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval. The default interval for <code>ProtectionPeriodInMinutes</code> is 60.</p>"
         }
       }
     },
@@ -892,7 +892,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:(aws[a-zA-Z-]*)?:[a-z]+:([a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:[a-zA-Z0-9-_/:.]+"
+      "pattern":"arn:(aws[a-zA-Z-]*)?:[a-z]+:((eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1})?:(\\d{12})?:[a-zA-Z0-9-_/:.]+"
     },
     "BadRequestDetails":{
       "type":"structure",
@@ -1102,7 +1102,7 @@
         },
         "RetrievalRoleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The ARN of an IAM role with permission to access the configuration at the specified <code>LocationUri</code>.</p> <important> <p>A retrieval role ARN is not required for configurations stored in the AppConfig hosted configuration store. It is required for all other sources that store your configuration. </p> </important>"
+          "documentation":"<p>The ARN of an IAM role with permission to access the configuration at the specified <code>LocationUri</code>.</p> <important> <p>A retrieval role ARN is not required for configurations stored in CodePipeline or the AppConfig hosted configuration store. It is required for all other sources that store your configuration. </p> </important>"
         },
         "Validators":{
           "shape":"ValidatorList",
@@ -1349,7 +1349,7 @@
         },
         "DeletionProtectionCheck":{
           "shape":"DeletionProtectionCheck",
-          "documentation":"<p>A parameter to configure deletion protection. If enabled, deletion protection prevents a user from deleting a configuration profile if your application has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile during the specified interval. </p> <p>This parameter supports the following values:</p> <ul> <li> <p> <code>BYPASS</code>: Instructs AppConfig to bypass the deletion protection check and delete a configuration profile even if deletion protection would have otherwise prevented it. </p> </li> <li> <p> <code>APPLY</code>: Instructs the deletion protection check to run, even if deletion protection is disabled at the account level. <code>APPLY</code> also forces the deletion protection check to run against resources created in the past hour, which are normally excluded from deletion protection checks. </p> </li> <li> <p> <code>ACCOUNT_DEFAULT</code>: The default setting, which instructs AppConfig to implement the deletion protection value specified in the <code>UpdateAccountSettings</code> API.</p> </li> </ul>",
+          "documentation":"<p>A parameter to configure deletion protection. Deletion protection prevents a user from deleting a configuration profile if your application has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile during the specified interval. </p> <p>This parameter supports the following values:</p> <ul> <li> <p> <code>BYPASS</code>: Instructs AppConfig to bypass the deletion protection check and delete a configuration profile even if deletion protection would have otherwise prevented it.</p> </li> <li> <p> <code>APPLY</code>: Instructs the deletion protection check to run, even if deletion protection is disabled at the account level. <code>APPLY</code> also forces the deletion protection check to run against resources created in the past hour, which are normally excluded from deletion protection checks. </p> </li> <li> <p> <code>ACCOUNT_DEFAULT</code>: The default setting, which instructs AppConfig to implement the deletion protection value specified in the <code>UpdateAccountSettings</code> API.</p> </li> </ul>",
           "location":"header",
           "locationName":"x-amzn-deletion-protection-check"
         }
@@ -1388,7 +1388,7 @@
         },
         "DeletionProtectionCheck":{
           "shape":"DeletionProtectionCheck",
-          "documentation":"<p>A parameter to configure deletion protection. If enabled, deletion protection prevents a user from deleting an environment if your application called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or in the environment during the specified interval. </p> <p>This parameter supports the following values:</p> <ul> <li> <p> <code>BYPASS</code>: Instructs AppConfig to bypass the deletion protection check and delete a configuration profile even if deletion protection would have otherwise prevented it. </p> </li> <li> <p> <code>APPLY</code>: Instructs the deletion protection check to run, even if deletion protection is disabled at the account level. <code>APPLY</code> also forces the deletion protection check to run against resources created in the past hour, which are normally excluded from deletion protection checks. </p> </li> <li> <p> <code>ACCOUNT_DEFAULT</code>: The default setting, which instructs AppConfig to implement the deletion protection value specified in the <code>UpdateAccountSettings</code> API.</p> </li> </ul>",
+          "documentation":"<p>A parameter to configure deletion protection. Deletion protection prevents a user from deleting an environment if your application called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or in the environment during the specified interval. </p> <p>This parameter supports the following values:</p> <ul> <li> <p> <code>BYPASS</code>: Instructs AppConfig to bypass the deletion protection check and delete a configuration profile even if deletion protection would have otherwise prevented it. </p> </li> <li> <p> <code>APPLY</code>: Instructs the deletion protection check to run, even if deletion protection is disabled at the account level. <code>APPLY</code> also forces the deletion protection check to run against resources created in the past hour, which are normally excluded from deletion protection checks.</p> </li> <li> <p> <code>ACCOUNT_DEFAULT</code>: The default setting, which instructs AppConfig to implement the deletion protection value specified in the <code>UpdateAccountSettings</code> API.</p> </li> </ul>",
           "location":"header",
           "locationName":"x-amzn-deletion-protection-check"
         }
@@ -1481,7 +1481,7 @@
           "box":true
         }
       },
-      "documentation":"<p>A parameter to configure deletion protection. If enabled, deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval.</p> <p>This setting uses the following default values:</p> <ul> <li> <p>Deletion protection is disabled by default. </p> </li> <li> <p>The default interval specified by <code>ProtectionPeriodInMinutes</code> is 60.</p> </li> <li> <p> <code>DeletionProtectionCheck</code> skips configuration profiles and environments that were created in the past hour.</p> </li> </ul>"
+      "documentation":"<p>A parameter to configure deletion protection. Deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval.</p> <p>The default interval specified by <code>ProtectionPeriodInMinutes</code> is 60. <code>DeletionProtectionCheck</code> skips configuration profiles and environments that were created in the past hour.</p>"
     },
     "Deployment":{
       "type":"structure",
@@ -1773,7 +1773,8 @@
       "key":{"shape":"DynamicParameterKey"},
       "value":{"shape":"StringWithLengthBetween1And2048"},
       "max":10,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "Environment":{
       "type":"structure",
@@ -2719,7 +2720,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):(iam)::\\d{12}:role[/].*)$"
+      "pattern":"^((arn):(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov|aws-eusc):(iam)::\\d{12}:role[/].*)$"
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
@@ -2916,7 +2917,7 @@
       "members":{
         "DeletionProtection":{
           "shape":"DeletionProtectionSettings",
-          "documentation":"<p>A parameter to configure deletion protection. If enabled, deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval. Deletion protection is disabled by default. The default interval for <code>ProtectionPeriodInMinutes</code> is 60.</p>"
+          "documentation":"<p>A parameter to configure deletion protection. Deletion protection prevents a user from deleting a configuration profile or an environment if AppConfig has called either <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> or for the configuration profile or from the environment during the specified interval. The default interval for <code>ProtectionPeriodInMinutes</code> is 60.</p>"
         }
       }
     },
@@ -2969,7 +2970,7 @@
         },
         "RetrievalRoleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The ARN of an IAM role with permission to access the configuration at the specified <code>LocationUri</code>.</p>"
+          "documentation":"<p>The ARN of an IAM role with permission to access the configuration at the specified <code>LocationUri</code>.</p> <important> <p>A retrieval role ARN is not required for configurations stored in CodePipeline or the AppConfig hosted configuration store. It is required for all other sources that store your configuration. </p> </important>"
         },
         "Validators":{
           "shape":"ValidatorList",
@@ -3176,5 +3177,5 @@
       "pattern":".*[^0-9].*"
     }
   },
-  "documentation":"<p>AppConfig feature flags and dynamic configurations help software builders quickly and securely adjust application behavior in production environments without full code deployments. AppConfig speeds up software release frequency, improves application resiliency, and helps you address emergent issues more quickly. With feature flags, you can gradually release new capabilities to users and measure the impact of those changes before fully deploying the new capabilities to all users. With operational flags and dynamic configurations, you can update block lists, allow lists, throttling limits, logging verbosity, and perform other operational tuning to quickly respond to issues in production environments.</p> <note> <p>AppConfig is a capability of Amazon Web Services Systems Manager.</p> </note> <p>Despite the fact that application configuration content can vary greatly from application to application, AppConfig supports the following use cases, which cover a broad spectrum of customer needs:</p> <ul> <li> <p> <b>Feature flags and toggles</b> - Safely release new capabilities to your customers in a controlled environment. Instantly roll back changes if you experience a problem.</p> </li> <li> <p> <b>Application tuning</b> - Carefully introduce application changes while testing the impact of those changes with users in production environments.</p> </li> <li> <p> <b>Allow list or block list</b> - Control access to premium features or instantly block specific users without deploying new code. </p> </li> <li> <p> <b>Centralized configuration storage</b> - Keep your configuration data organized and consistent across all of your workloads. You can use AppConfig to deploy configuration data stored in the AppConfig hosted configuration store, Secrets Manager, Systems Manager, Parameter Store, or Amazon S3.</p> </li> </ul> <p> <b>How AppConfig works</b> </p> <p>This section provides a high-level description of how AppConfig works and how you get started.</p> <dl> <dt>1. Identify configuration values in code you want to manage in the cloud</dt> <dd> <p>Before you start creating AppConfig artifacts, we recommend you identify configuration data in your code that you want to dynamically manage using AppConfig. Good examples include feature flags or toggles, allow and block lists, logging verbosity, service limits, and throttling rules, to name a few.</p> <p>If your configuration data already exists in the cloud, you can take advantage of AppConfig validation, deployment, and extension features to further streamline configuration data management.</p> </dd> <dt>2. Create an application namespace</dt> <dd> <p>To create a namespace, you create an AppConfig artifact called an application. An application is simply an organizational construct like a folder.</p> </dd> <dt>3. Create environments</dt> <dd> <p>For each AppConfig application, you define one or more environments. An environment is a logical grouping of targets, such as applications in a <code>Beta</code> or <code>Production</code> environment, Lambda functions, or containers. You can also define environments for application subcomponents, such as the <code>Web</code>, <code>Mobile</code>, and <code>Back-end</code>.</p> <p>You can configure Amazon CloudWatch alarms for each environment. The system monitors alarms during a configuration deployment. If an alarm is triggered, the system rolls back the configuration.</p> </dd> <dt>4. Create a configuration profile</dt> <dd> <p>A configuration profile includes, among other things, a URI that enables AppConfig to locate your configuration data in its stored location and a profile type. AppConfig supports two configuration profile types: feature flags and freeform configurations. Feature flag configuration profiles store their data in the AppConfig hosted configuration store and the URI is simply <code>hosted</code>. For freeform configuration profiles, you can store your data in the AppConfig hosted configuration store or any Amazon Web Services service that integrates with AppConfig, as described in <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html\">Creating a free form configuration profile</a> in the the <i>AppConfig User Guide</i>.</p> <p>A configuration profile can also include optional validators to ensure your configuration data is syntactically and semantically correct. AppConfig performs a check using the validators when you start a deployment. If any errors are detected, the deployment rolls back to the previous configuration data.</p> </dd> <dt>5. Deploy configuration data</dt> <dd> <p>When you create a new deployment, you specify the following:</p> <ul> <li> <p>An application ID</p> </li> <li> <p>A configuration profile ID</p> </li> <li> <p>A configuration version</p> </li> <li> <p>An environment ID where you want to deploy the configuration data</p> </li> <li> <p>A deployment strategy ID that defines how fast you want the changes to take effect</p> </li> </ul> <p>When you call the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_StartDeployment.html\">StartDeployment</a> API action, AppConfig performs the following tasks:</p> <ol> <li> <p>Retrieves the configuration data from the underlying data store by using the location URI in the configuration profile.</p> </li> <li> <p>Verifies the configuration data is syntactically and semantically correct by using the validators you specified when you created your configuration profile.</p> </li> <li> <p>Caches a copy of the data so it is ready to be retrieved by your application. This cached copy is called the <i>deployed data</i>.</p> </li> </ol> </dd> <dt>6. Retrieve the configuration</dt> <dd> <p>You can configure AppConfig Agent as a local host and have the agent poll AppConfig for configuration updates. The agent calls the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_StartConfigurationSession.html\">StartConfigurationSession</a> and <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> API actions and caches your configuration data locally. To retrieve the data, your application makes an HTTP call to the localhost server. AppConfig Agent supports several use cases, as described in <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-retrieving-simplified-methods.html\">Simplified retrieval methods</a> in the the <i>AppConfig User Guide</i>.</p> <p>If AppConfig Agent isn't supported for your use case, you can configure your application to poll AppConfig for configuration updates by directly calling the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_StartConfigurationSession.html\">StartConfigurationSession</a> and <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> API actions. </p> </dd> </dl> <p>This reference is intended to be used with the <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html\">AppConfig User Guide</a>.</p>"
+  "documentation":"<p>AppConfig feature flags and dynamic configurations help software builders quickly and securely adjust application behavior in production environments without full code deployments. AppConfig speeds up software release frequency, improves application resiliency, and helps you address emergent issues more quickly. With feature flags, you can gradually release new capabilities to users and measure the impact of those changes before fully deploying the new capabilities to all users. With operational flags and dynamic configurations, you can update block lists, allow lists, throttling limits, logging verbosity, and perform other operational tuning to quickly respond to issues in production environments.</p> <note> <p>AppConfig is a tool in Amazon Web Services Systems Manager.</p> </note> <p>Despite the fact that application configuration content can vary greatly from application to application, AppConfig supports the following use cases, which cover a broad spectrum of customer needs:</p> <ul> <li> <p> <b>Feature flags and toggles</b> - Safely release new capabilities to your customers in a controlled environment. Instantly roll back changes if you experience a problem.</p> </li> <li> <p> <b>Application tuning</b> - Carefully introduce application changes while testing the impact of those changes with users in production environments.</p> </li> <li> <p> <b>Allow list or block list</b> - Control access to premium features or instantly block specific users without deploying new code. </p> </li> <li> <p> <b>Centralized configuration storage</b> - Keep your configuration data organized and consistent across all of your workloads. You can use AppConfig to deploy configuration data stored in the AppConfig hosted configuration store, Secrets Manager, Systems Manager, Parameter Store, or Amazon S3.</p> </li> </ul> <p> <b>How AppConfig works</b> </p> <p>This section provides a high-level description of how AppConfig works and how you get started.</p> <dl> <dt>1. Identify configuration values in code you want to manage in the cloud</dt> <dd> <p>Before you start creating AppConfig artifacts, we recommend you identify configuration data in your code that you want to dynamically manage using AppConfig. Good examples include feature flags or toggles, allow and block lists, logging verbosity, service limits, and throttling rules, to name a few.</p> <p>If your configuration data already exists in the cloud, you can take advantage of AppConfig validation, deployment, and extension features to further streamline configuration data management.</p> </dd> <dt>2. Create an application namespace</dt> <dd> <p>To create a namespace, you create an AppConfig artifact called an application. An application is simply an organizational construct like a folder.</p> </dd> <dt>3. Create environments</dt> <dd> <p>For each AppConfig application, you define one or more environments. An environment is a logical grouping of targets, such as applications in a <code>Beta</code> or <code>Production</code> environment, Lambda functions, or containers. You can also define environments for application subcomponents, such as the <code>Web</code>, <code>Mobile</code>, and <code>Back-end</code>.</p> <p>You can configure Amazon CloudWatch alarms for each environment. The system monitors alarms during a configuration deployment. If an alarm is triggered, the system rolls back the configuration.</p> </dd> <dt>4. Create a configuration profile</dt> <dd> <p>A configuration profile includes, among other things, a URI that enables AppConfig to locate your configuration data in its stored location and a profile type. AppConfig supports two configuration profile types: feature flags and freeform configurations. Feature flag configuration profiles store their data in the AppConfig hosted configuration store and the URI is simply <code>hosted</code>. For freeform configuration profiles, you can store your data in the AppConfig hosted configuration store or any Amazon Web Services service that integrates with AppConfig, as described in <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-free-form-configurations-creating.html\">Creating a free form configuration profile</a> in the the <i>AppConfig User Guide</i>.</p> <p>A configuration profile can also include optional validators to ensure your configuration data is syntactically and semantically correct. AppConfig performs a check using the validators when you start a deployment. If any errors are detected, the deployment rolls back to the previous configuration data.</p> </dd> <dt>5. Deploy configuration data</dt> <dd> <p>When you create a new deployment, you specify the following:</p> <ul> <li> <p>An application ID</p> </li> <li> <p>A configuration profile ID</p> </li> <li> <p>A configuration version</p> </li> <li> <p>An environment ID where you want to deploy the configuration data</p> </li> <li> <p>A deployment strategy ID that defines how fast you want the changes to take effect</p> </li> </ul> <p>When you call the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_StartDeployment.html\">StartDeployment</a> API action, AppConfig performs the following tasks:</p> <ol> <li> <p>Retrieves the configuration data from the underlying data store by using the location URI in the configuration profile.</p> </li> <li> <p>Verifies the configuration data is syntactically and semantically correct by using the validators you specified when you created your configuration profile.</p> </li> <li> <p>Caches a copy of the data so it is ready to be retrieved by your application. This cached copy is called the <i>deployed data</i>.</p> </li> </ol> </dd> <dt>6. Retrieve the configuration</dt> <dd> <p>You can configure AppConfig Agent as a local host and have the agent poll AppConfig for configuration updates. The agent calls the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_StartConfigurationSession.html\">StartConfigurationSession</a> and <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> API actions and caches your configuration data locally. To retrieve the data, your application makes an HTTP call to the localhost server. AppConfig Agent supports several use cases, as described in <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-retrieving-simplified-methods.html\">Simplified retrieval methods</a> in the the <i>AppConfig User Guide</i>.</p> <p>If AppConfig Agent isn't supported for your use case, you can configure your application to poll AppConfig for configuration updates by directly calling the <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_StartConfigurationSession.html\">StartConfigurationSession</a> and <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_appconfigdata_GetLatestConfiguration.html\">GetLatestConfiguration</a> API actions. </p> </dd> </dl> <p>This reference is intended to be used with the <a href=\"http://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html\">AppConfig User Guide</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/waiters-2.json 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/appconfig/2019-10-09/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appconfig/2019-10-09/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,55 @@
+{
+  "version": 2,
+  "waiters": {
+    "EnvironmentReadyForDeployment": {
+      "operation": "GetEnvironment",
+      "delay": 30,
+      "maxAttempts": 999,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "ReadyForDeployment"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "RolledBack"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "Reverted"
+        }
+      ]
+    },
+    "DeploymentComplete": {
+      "operation": "GetDeployment",
+      "delay": 30,
+      "maxAttempts": 999,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "COMPLETE"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "ROLLED_BACK"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "State",
+          "expected": "REVERTED"
+        }
+      ]
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appconfigdata/2021-11-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appfabric/2023-05-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appflow/2020-08-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appflow/2020-08-23/service-2.json 2.31.35-1/awscli/botocore/data/appflow/2020-08-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/appflow/2020-08-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appflow/2020-08-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -497,14 +497,12 @@
     },
     "AmplitudeConnectorProfileProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector-specific profile properties required when using Amplitude. </p>"
     },
     "AmplitudeMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Amplitude. </p>"
     },
     "AmplitudeSourceProperties":{
@@ -1914,8 +1912,7 @@
     },
     "CustomerProfilesMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Amazon Connect Customer Profiles. </p>"
     },
     "DataApiRoleArn":{
@@ -2018,8 +2015,7 @@
     },
     "DatadogMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Datadog. </p>"
     },
     "DatadogSourceProperties":{
@@ -2055,8 +2051,7 @@
     },
     "DeleteConnectorProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFlowRequest":{
       "type":"structure",
@@ -2074,8 +2069,7 @@
     },
     "DeleteFlowResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeConnectorEntityRequest":{
       "type":"structure",
@@ -2509,8 +2503,7 @@
     },
     "DynatraceMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Dynatrace. </p>"
     },
     "DynatraceSourceProperties":{
@@ -2585,8 +2578,7 @@
     },
     "EventBridgeMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Amazon EventBridge. </p>"
     },
     "ExecutionDetails":{
@@ -2939,8 +2931,7 @@
     },
     "GoogleAnalyticsConnectorProfileProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector-specific profile properties required by Google Analytics. </p>"
     },
     "GoogleAnalyticsMetadata":{
@@ -2986,8 +2977,7 @@
     },
     "HoneycodeConnectorProfileProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector-specific properties required when using Amazon Honeycode. </p>"
     },
     "HoneycodeDestinationProperties":{
@@ -3094,8 +3084,7 @@
     },
     "InforNexusMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Infor Nexus. </p>"
     },
     "InforNexusSourceProperties":{
@@ -3291,8 +3280,7 @@
     "Long":{"type":"long"},
     "LookoutMetricsDestinationProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The properties that are applied when Amazon Lookout for Metrics is used as a destination. </p>"
     },
     "MarketoConnectorOperator":{
@@ -3367,8 +3355,7 @@
     },
     "MarketoMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Marketo. </p>"
     },
     "MarketoSourceProperties":{
@@ -3770,8 +3757,7 @@
     },
     "PardotMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The connector metadata specific to Salesforce Pardot.</p>"
     },
     "PardotSourceProperties":{
@@ -4019,8 +4005,7 @@
     },
     "RedshiftMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Amazon Redshift. </p>"
     },
     "RefreshToken":{
@@ -4122,8 +4107,7 @@
     },
     "ResetConnectorMetadataCacheResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -4199,8 +4183,7 @@
     },
     "S3Metadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Amazon S3. </p>"
     },
     "S3OutputFormatConfig":{
@@ -4353,8 +4336,7 @@
     },
     "SAPODataMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to SAPOData. </p>"
     },
     "SAPODataPaginationConfig":{
@@ -4682,8 +4664,7 @@
     },
     "ServiceNowMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to ServiceNow. </p>"
     },
     "ServiceNowSourceProperties":{
@@ -4738,14 +4719,12 @@
     },
     "SingularConnectorProfileProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector-specific profile properties required when using Singular. </p>"
     },
     "SingularMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Singular. </p>"
     },
     "SingularSourceProperties":{
@@ -5220,8 +5199,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5344,14 +5322,12 @@
     },
     "TrendmicroConnectorProfileProperties":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector-specific profile properties required when using Trend Micro. </p>"
     },
     "TrendmicroMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Trend Micro. </p>"
     },
     "TrendmicroSourceProperties":{
@@ -5418,8 +5394,7 @@
     },
     "UnregisterConnectorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UnsupportedOperationException":{
       "type":"structure",
@@ -5453,8 +5428,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectorProfileRequest":{
       "type":"structure",
@@ -5607,8 +5581,7 @@
     },
     "UpsolverMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Upsolver. </p>"
     },
     "UpsolverS3OutputFormatConfig":{
@@ -5700,8 +5673,7 @@
     },
     "VeevaMetadata":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The connector metadata specific to Veeva. </p>"
     },
     "VeevaSourceProperties":{
diff -pruN 2.23.6-1/awscli/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appintegrations/2020-07-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appintegrations/2020-07-29/service-2.json 2.31.35-1/awscli/botocore/data/appintegrations/2020-07-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/appintegrations/2020-07-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appintegrations/2020-07-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -446,6 +446,16 @@
       "max":50,
       "min":1
     },
+    "ApplicationConfig":{
+      "type":"structure",
+      "members":{
+        "ContactHandling":{
+          "shape":"ContactHandling",
+          "documentation":"<p>The contact handling configuration for the application.</p>"
+        }
+      },
+      "documentation":"<p>The configuration settings for the application.</p>"
+    },
     "ApplicationName":{
       "type":"string",
       "max":255,
@@ -494,6 +504,10 @@
         "LastModifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time when the application was last modified.</p>"
+        },
+        "IsService":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the application is a service.</p>"
         }
       },
       "documentation":"<p>Summary information about the Application.</p>"
@@ -522,6 +536,7 @@
       "min":1,
       "pattern":"^(arn:aws:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})(:[\\w\\$]+)?$"
     },
+    "Boolean":{"type":"boolean"},
     "ClientAssociationMetadata":{
       "type":"map",
       "key":{"shape":"NonBlankString"},
@@ -533,6 +548,23 @@
       "min":1,
       "pattern":".*"
     },
+    "ContactHandling":{
+      "type":"structure",
+      "members":{
+        "Scope":{
+          "shape":"ContactHandlingScope",
+          "documentation":"<p>Indicates whether the application refreshes for each contact or refreshes only with each new browser session.</p>"
+        }
+      },
+      "documentation":"<p>The contact handling configuration for the application.</p>"
+    },
+    "ContactHandlingScope":{
+      "type":"string",
+      "enum":[
+        "CROSS_CONTACTS",
+        "PER_CONTACT"
+      ]
+    },
     "CreateApplicationRequest":{
       "type":"structure",
       "required":[
@@ -581,6 +613,22 @@
         "Permissions":{
           "shape":"PermissionList",
           "documentation":"<p>The configuration of events or requests that the application has access to.</p>"
+        },
+        "IsService":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the application is a service.</p>"
+        },
+        "InitializationTimeout":{
+          "shape":"InitializationTimeout",
+          "documentation":"<p>The maximum time in milliseconds allowed to establish a connection with the workspace.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>The configuration settings for the application.</p>"
+        },
+        "IframeConfig":{
+          "shape":"IframeConfig",
+          "documentation":"<p>The iframe configuration for the application.</p>"
         }
       }
     },
@@ -854,8 +902,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataIntegrationRequest":{
       "type":"structure",
@@ -871,8 +918,7 @@
     },
     "DeleteDataIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventIntegrationRequest":{
       "type":"structure",
@@ -888,8 +934,7 @@
     },
     "DeleteEventIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Description":{
       "type":"string",
@@ -1166,6 +1211,22 @@
         "Permissions":{
           "shape":"PermissionList",
           "documentation":"<p>The configuration of events or requests that the application has access to.</p>"
+        },
+        "IsService":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the application is a service.</p>"
+        },
+        "InitializationTimeout":{
+          "shape":"InitializationTimeout",
+          "documentation":"<p>The maximum time in milliseconds allowed to establish a connection with the workspace.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>The configuration settings for the application.</p>"
+        },
+        "IframeConfig":{
+          "shape":"IframeConfig",
+          "documentation":"<p>The iframe configuration for the application.</p>"
         }
       }
     },
@@ -1279,6 +1340,39 @@
       "min":1,
       "pattern":".*\\S.*"
     },
+    "IframeConfig":{
+      "type":"structure",
+      "members":{
+        "Allow":{
+          "shape":"IframePermissionList",
+          "documentation":"<p>The list of features that are allowed in the iframe.</p>"
+        },
+        "Sandbox":{
+          "shape":"IframePermissionList",
+          "documentation":"<p>The list of sandbox attributes for the iframe.</p>"
+        }
+      },
+      "documentation":"<p>The iframe configuration for the application.</p>"
+    },
+    "IframePermission":{
+      "type":"string",
+      "documentation":"<p>A permission for the iframe.</p>",
+      "max":100,
+      "min":1,
+      "pattern":"^[a-z-]+$"
+    },
+    "IframePermissionList":{
+      "type":"list",
+      "member":{"shape":"IframePermission"},
+      "documentation":"<p>A list of permissions for the iframe.</p>",
+      "max":25,
+      "min":0
+    },
+    "InitializationTimeout":{
+      "type":"integer",
+      "max":600000,
+      "min":1
+    },
     "InternalServiceError":{
       "type":"structure",
       "members":{
@@ -1742,8 +1836,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1801,8 +1894,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationRequest":{
       "type":"structure",
@@ -1841,13 +1933,29 @@
         "Permissions":{
           "shape":"PermissionList",
           "documentation":"<p>The configuration of events or requests that the application has access to.</p>"
+        },
+        "IsService":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the application is a service.</p>",
+          "box":true
+        },
+        "InitializationTimeout":{
+          "shape":"InitializationTimeout",
+          "documentation":"<p>The maximum time in milliseconds allowed to establish a connection with the workspace.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>The configuration settings for the application.</p>"
+        },
+        "IframeConfig":{
+          "shape":"IframeConfig",
+          "documentation":"<p>The iframe configuration for the application.</p>"
         }
       }
     },
     "UpdateApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataIntegrationAssociationRequest":{
       "type":"structure",
@@ -1877,8 +1985,7 @@
     },
     "UpdateDataIntegrationAssociationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataIntegrationRequest":{
       "type":"structure",
@@ -1902,8 +2009,7 @@
     },
     "UpdateDataIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEventIntegrationRequest":{
       "type":"structure",
@@ -1923,8 +2029,7 @@
     },
     "UpdateEventIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     }
   },
   "documentation":"<ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Operations_Amazon_AppIntegrations_Service.html\">Amazon AppIntegrations actions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Types_Amazon_AppIntegrations_Service.html\">Amazon AppIntegrations data types</a> </p> </li> </ul> <p>The Amazon AppIntegrations service enables you to configure and reuse connections to external applications.</p> <p>For information about how you can use external applications with Amazon Connect, see the following topics in the <i>Amazon Connect Administrator Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/3p-apps.html\">Third-party applications (3p apps) in the agent workspace</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-q-connect.html\">Use Amazon Q in Connect for generative AI–powered agent assistance in real-time</a> </p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-autoscaling/2016-02-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/application-autoscaling/2016-02-06/service-2.json 2.31.35-1/awscli/botocore/data/application-autoscaling/2016-02-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/application-autoscaling/2016-02-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-autoscaling/2016-02-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -171,7 +171,7 @@
         {"shape":"FailedResourceAccessException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates or updates a scaling policy for an Application Auto Scaling scalable target.</p> <p>Each scalable target is identified by a service namespace, resource ID, and scalable dimension. A scaling policy applies to the scalable target identified by those three attributes. You cannot create a scaling policy until you have registered the resource as a scalable target.</p> <p>Multiple scaling policies can be in force at the same time for the same scalable target. You can have one or more target tracking scaling policies, one or more step scaling policies, or both. However, there is a chance that multiple policies could conflict, instructing the scalable target to scale out or in at the same time. Application Auto Scaling gives precedence to the policy that provides the largest capacity for both scale out and scale in. For example, if one policy increases capacity by 3, another policy increases capacity by 200 percent, and the current capacity is 10, Application Auto Scaling uses the policy with the highest calculated capacity (200% of 10 = 20) and scales out to 30. </p> <p>We recommend caution, however, when using target tracking scaling policies with step scaling policies because conflicts between these policies can cause undesirable behavior. For example, if the step scaling policy initiates a scale-in activity before the target tracking policy is ready to scale in, the scale-in activity will not be blocked. After the scale-in activity completes, the target tracking policy could instruct the scalable target to scale out again. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html\">Target tracking scaling policies</a> and <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html\">Step scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p> <note> <p>If a scalable target is deregistered, the scalable target is no longer available to use scaling policies. Any scaling policies that were specified for the scalable target are deleted.</p> </note>"
+      "documentation":"<p>Creates or updates a scaling policy for an Application Auto Scaling scalable target.</p> <p>Each scalable target is identified by a service namespace, resource ID, and scalable dimension. A scaling policy applies to the scalable target identified by those three attributes. You cannot create a scaling policy until you have registered the resource as a scalable target.</p> <p>Multiple scaling policies can be in force at the same time for the same scalable target. You can have one or more target tracking scaling policies, one or more step scaling policies, or both. However, there is a chance that multiple policies could conflict, instructing the scalable target to scale out or in at the same time. Application Auto Scaling gives precedence to the policy that provides the largest capacity for both scale out and scale in. For example, if one policy increases capacity by 3, another policy increases capacity by 200 percent, and the current capacity is 10, Application Auto Scaling uses the policy with the highest calculated capacity (200% of 10 = 20) and scales out to 30. </p> <p>We recommend caution, however, when using target tracking scaling policies with step scaling policies because conflicts between these policies can cause undesirable behavior. For example, if the step scaling policy initiates a scale-in activity before the target tracking policy is ready to scale in, the scale-in activity will not be blocked. After the scale-in activity completes, the target tracking policy could instruct the scalable target to scale out again. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html\">Target tracking scaling policies</a>, <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html\">Step scaling policies</a>, and <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/aas-create-predictive-scaling-policy.html\">Predictive scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p> <note> <p>If a scalable target is deregistered, the scalable target is no longer available to use scaling policies. Any scaling policies that were specified for the scalable target are deleted.</p> </note>"
     },
     "PutScheduledAction":{
       "name":"PutScheduledAction",
@@ -349,18 +349,17 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         }
       }
     },
     "DeleteScalingPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteScheduledActionRequest":{
       "type":"structure",
@@ -381,18 +380,17 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         }
       }
     },
     "DeleteScheduledActionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterScalableTargetRequest":{
       "type":"structure",
@@ -408,18 +406,17 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         }
       }
     },
     "DeregisterScalableTargetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeScalableTargetsRequest":{
       "type":"structure",
@@ -431,11 +428,11 @@
         },
         "ResourceIds":{
           "shape":"ResourceIdsMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -470,11 +467,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling activity. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling activity. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -517,11 +514,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -560,11 +557,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property. If you specify a scalable dimension, you must also specify a resource ID.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -803,6 +800,8 @@
         "CassandraReadCapacityUtilization",
         "CassandraWriteCapacityUtilization",
         "KafkaBrokerStorageUtilization",
+        "ElastiCacheEngineCPUUtilization",
+        "ElastiCacheDatabaseMemoryUsagePercentage",
         "ElastiCachePrimaryEngineCPUUtilization",
         "ElastiCacheReplicaEngineCPUUtilization",
         "ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage",
@@ -1126,7 +1125,7 @@
           "documentation":"<p> A label that uniquely identifies a target group. </p>"
         }
       },
-      "documentation":"<p> Describes a load metric for a predictive scaling policy. </p> <p>When returned in the output of <code>DescribePolicies</code>, it indicates that a predictive scaling policy uses individually specified load and scaling metrics instead of a metric pair.</p>"
+      "documentation":"<p> Describes a load metric for a predictive scaling policy. </p> <p>When returned in the output of <code>DescribePolicies</code>, it indicates that a predictive scaling policy uses individually specified load and scaling metrics instead of a metric pair.</p> <p>The following predefined metrics are available for predictive scaling:</p> <ul> <li> <p> <code>ECSServiceAverageCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceAverageMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalMemoryUtilization</code> </p> </li> <li> <p> <code>ALBRequestCount</code> </p> </li> <li> <p> <code>ALBRequestCountPerTarget</code> </p> </li> <li> <p> <code>TotalALBRequestCount</code> </p> </li> </ul>"
     },
     "PredictiveScalingPredefinedMetricPairSpecification":{
       "type":"structure",
@@ -1141,7 +1140,7 @@
           "documentation":"<p> A label that uniquely identifies a specific target group from which to determine the total and average request count. </p>"
         }
       },
-      "documentation":"<p> Represents a metric pair for a predictive scaling policy. </p>"
+      "documentation":"<p> Represents a metric pair for a predictive scaling policy. </p> <p>The following predefined metrics are available for predictive scaling:</p> <ul> <li> <p> <code>ECSServiceAverageCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceAverageMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalMemoryUtilization</code> </p> </li> <li> <p> <code>ALBRequestCount</code> </p> </li> <li> <p> <code>ALBRequestCountPerTarget</code> </p> </li> <li> <p> <code>TotalALBRequestCount</code> </p> </li> </ul>"
     },
     "PredictiveScalingPredefinedScalingMetricSpecification":{
       "type":"structure",
@@ -1156,7 +1155,7 @@
           "documentation":"<p> A label that uniquely identifies a specific target group from which to determine the average request count. </p>"
         }
       },
-      "documentation":"<p> Describes a scaling metric for a predictive scaling policy. </p> <p>When returned in the output of <code>DescribePolicies</code>, it indicates that a predictive scaling policy uses individually specified load and scaling metrics instead of a metric pair.</p>"
+      "documentation":"<p> Describes a scaling metric for a predictive scaling policy. </p> <p>When returned in the output of <code>DescribePolicies</code>, it indicates that a predictive scaling policy uses individually specified load and scaling metrics instead of a metric pair.</p> <p>The following predefined metrics are available for predictive scaling:</p> <ul> <li> <p> <code>ECSServiceAverageCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceAverageMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceMemoryUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalCPUUtilization</code> </p> </li> <li> <p> <code>ECSServiceTotalMemoryUtilization</code> </p> </li> <li> <p> <code>ALBRequestCount</code> </p> </li> <li> <p> <code>ALBRequestCountPerTarget</code> </p> </li> <li> <p> <code>TotalALBRequestCount</code> </p> </li> </ul>"
     },
     "PredictiveScalingSchedulingBufferTime":{
       "type":"integer",
@@ -1182,15 +1181,15 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "PolicyType":{
           "shape":"PolicyType",
-          "documentation":"<p>The scaling policy type. This parameter is required if you are creating a scaling policy.</p> <p>The following policy types are supported: </p> <p> <code>TargetTrackingScaling</code>—Not supported for Amazon EMR.</p> <p> <code>StepScaling</code>—Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html\">Target tracking scaling policies</a> and <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html\">Step scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
+          "documentation":"<p>The scaling policy type. This parameter is required if you are creating a scaling policy.</p> <p>The following policy types are supported: </p> <p> <code>TargetTrackingScaling</code>—Not supported for Amazon EMR.</p> <p> <code>StepScaling</code>—Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.</p> <p> <code>PredictiveScaling</code>—Only supported for Amazon ECS.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html\">Target tracking scaling policies</a>, <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html\">Step scaling policies</a>, and <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/aas-create-predictive-scaling-policy.html\">Predictive scaling policies</a> in the <i>Application Auto Scaling User Guide</i>.</p>"
         },
         "StepScalingPolicyConfiguration":{
           "shape":"StepScalingPolicyConfiguration",
@@ -1247,11 +1246,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scheduled action. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "StartTime":{
           "shape":"TimestampType",
@@ -1269,8 +1268,7 @@
     },
     "PutScheduledActionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RegisterScalableTargetRequest":{
       "type":"structure",
@@ -1286,11 +1284,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource that is associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource that is associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MinCapacity":{
           "shape":"ResourceCapacity",
@@ -1377,6 +1375,7 @@
         "cassandra:table:ReadCapacityUnits",
         "cassandra:table:WriteCapacityUnits",
         "kafka:broker-storage:VolumeSize",
+        "elasticache:cache-cluster:Nodes",
         "elasticache:replication-group:NodeGroups",
         "elasticache:replication-group:Replicas",
         "neptune:cluster:ReadReplicaCount",
@@ -1403,11 +1402,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scalable target. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension associated with the scalable target. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "MinCapacity":{
           "shape":"ResourceCapacity",
@@ -1485,11 +1484,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling activity. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling activity. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "Description":{
           "shape":"XmlString",
@@ -1568,15 +1567,15 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "PolicyType":{
           "shape":"PolicyType",
-          "documentation":"<p>The scaling policy type.</p> <p>The following policy types are supported: </p> <p> <code>TargetTrackingScaling</code>—Not supported for Amazon EMR</p> <p> <code>StepScaling</code>—Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.</p>"
+          "documentation":"<p>The scaling policy type.</p> <p>The following policy types are supported: </p> <p> <code>TargetTrackingScaling</code>—Not supported for Amazon EMR</p> <p> <code>StepScaling</code>—Not supported for DynamoDB, Amazon Comprehend, Lambda, Amazon Keyspaces, Amazon MSK, Amazon ElastiCache, or Neptune.</p> <p> <code>PredictiveScaling</code>—Only supported for Amazon ECS</p>"
         },
         "StepScalingPolicyConfiguration":{
           "shape":"StepScalingPolicyConfiguration",
@@ -1635,11 +1634,11 @@
         },
         "ResourceId":{
           "shape":"ResourceIdMaxLen1600",
-          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the resource associated with the scaling policy. This string consists of the resource type and unique identifier.</p> <ul> <li> <p>ECS service - The resource type is <code>service</code> and the unique identifier is the cluster name and service name. Example: <code>service/my-cluster/my-service</code>.</p> </li> <li> <p>Spot Fleet - The resource type is <code>spot-fleet-request</code> and the unique identifier is the Spot Fleet request ID. Example: <code>spot-fleet-request/sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE</code>.</p> </li> <li> <p>EMR cluster - The resource type is <code>instancegroup</code> and the unique identifier is the cluster ID and instance group ID. Example: <code>instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0</code>.</p> </li> <li> <p>AppStream 2.0 fleet - The resource type is <code>fleet</code> and the unique identifier is the fleet name. Example: <code>fleet/sample-fleet</code>.</p> </li> <li> <p>DynamoDB table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>table/my-table</code>.</p> </li> <li> <p>DynamoDB global secondary index - The resource type is <code>index</code> and the unique identifier is the index name. Example: <code>table/my-table/index/my-table-index</code>.</p> </li> <li> <p>Aurora DB cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:my-db-cluster</code>.</p> </li> <li> <p>SageMaker endpoint variant - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>Custom resources are not supported with a resource type. This parameter must specify the <code>OutputValue</code> from the CloudFormation template stack used to access the resources. The unique identifier is defined by the service provider. More information is available in our <a href=\"https://github.com/aws/aws-auto-scaling-custom-resource\">GitHub repository</a>.</p> </li> <li> <p>Amazon Comprehend document classification endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:document-classifier-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Amazon Comprehend entity recognizer endpoint - The resource type and unique identifier are specified using the endpoint ARN. Example: <code>arn:aws:comprehend:us-west-2:123456789012:entity-recognizer-endpoint/EXAMPLE</code>.</p> </li> <li> <p>Lambda provisioned concurrency - The resource type is <code>function</code> and the unique identifier is the function name with a function version or alias name suffix that is not <code>$LATEST</code>. Example: <code>function:my-function:prod</code> or <code>function:my-function:1</code>.</p> </li> <li> <p>Amazon Keyspaces table - The resource type is <code>table</code> and the unique identifier is the table name. Example: <code>keyspace/mykeyspace/table/mytable</code>.</p> </li> <li> <p>Amazon MSK cluster - The resource type and unique identifier are specified using the cluster ARN. Example: <code>arn:aws:kafka:us-east-1:123456789012:cluster/demo-cluster-1/6357e0b2-0e6a-4b86-a0b4-70df934c2e31-5</code>.</p> </li> <li> <p>Amazon ElastiCache replication group - The resource type is <code>replication-group</code> and the unique identifier is the replication group name. Example: <code>replication-group/mycluster</code>.</p> </li> <li> <p>Amazon ElastiCache cache cluster - The resource type is <code>cache-cluster</code> and the unique identifier is the cache cluster name. Example: <code>cache-cluster/mycluster</code>.</p> </li> <li> <p>Neptune cluster - The resource type is <code>cluster</code> and the unique identifier is the cluster name. Example: <code>cluster:mycluster</code>.</p> </li> <li> <p>SageMaker serverless endpoint - The resource type is <code>variant</code> and the unique identifier is the resource ID. Example: <code>endpoint/my-end-point/variant/KMeansClustering</code>.</p> </li> <li> <p>SageMaker inference component - The resource type is <code>inference-component</code> and the unique identifier is the resource ID. Example: <code>inference-component/my-inference-component</code>.</p> </li> <li> <p>Pool of WorkSpaces - The resource type is <code>workspacespool</code> and the unique identifier is the pool ID. Example: <code>workspacespool/wspool-123456</code>.</p> </li> </ul>"
         },
         "ScalableDimension":{
           "shape":"ScalableDimension",
-          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
+          "documentation":"<p>The scalable dimension. This string consists of the service namespace, resource type, and scaling property.</p> <ul> <li> <p> <code>ecs:service:DesiredCount</code> - The task count of an ECS service.</p> </li> <li> <p> <code>elasticmapreduce:instancegroup:InstanceCount</code> - The instance count of an EMR Instance Group.</p> </li> <li> <p> <code>ec2:spot-fleet-request:TargetCapacity</code> - The target capacity of a Spot Fleet.</p> </li> <li> <p> <code>appstream:fleet:DesiredCapacity</code> - The capacity of an AppStream 2.0 fleet.</p> </li> <li> <p> <code>dynamodb:table:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:table:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB table.</p> </li> <li> <p> <code>dynamodb:index:ReadCapacityUnits</code> - The provisioned read capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>dynamodb:index:WriteCapacityUnits</code> - The provisioned write capacity for a DynamoDB global secondary index.</p> </li> <li> <p> <code>rds:cluster:ReadReplicaCount</code> - The count of Aurora Replicas in an Aurora DB cluster. Available for Aurora MySQL-compatible edition and Aurora PostgreSQL-compatible edition.</p> </li> <li> <p> <code>sagemaker:variant:DesiredInstanceCount</code> - The number of EC2 instances for a SageMaker model endpoint variant.</p> </li> <li> <p> <code>custom-resource:ResourceType:Property</code> - The scalable dimension for a custom resource provided by your own application or service.</p> </li> <li> <p> <code>comprehend:document-classifier-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend document classification endpoint.</p> </li> <li> <p> <code>comprehend:entity-recognizer-endpoint:DesiredInferenceUnits</code> - The number of inference units for an Amazon Comprehend entity recognizer endpoint.</p> </li> <li> <p> <code>lambda:function:ProvisionedConcurrency</code> - The provisioned concurrency for a Lambda function.</p> </li> <li> <p> <code>cassandra:table:ReadCapacityUnits</code> - The provisioned read capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>cassandra:table:WriteCapacityUnits</code> - The provisioned write capacity for an Amazon Keyspaces table.</p> </li> <li> <p> <code>kafka:broker-storage:VolumeSize</code> - The provisioned volume size (in GiB) for brokers in an Amazon MSK cluster.</p> </li> <li> <p> <code>elasticache:cache-cluster:Nodes</code> - The number of nodes for an Amazon ElastiCache cache cluster.</p> </li> <li> <p> <code>elasticache:replication-group:NodeGroups</code> - The number of node groups for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>elasticache:replication-group:Replicas</code> - The number of replicas per node group for an Amazon ElastiCache replication group.</p> </li> <li> <p> <code>neptune:cluster:ReadReplicaCount</code> - The count of read replicas in an Amazon Neptune DB cluster.</p> </li> <li> <p> <code>sagemaker:variant:DesiredProvisionedConcurrency</code> - The provisioned concurrency for a SageMaker serverless endpoint.</p> </li> <li> <p> <code>sagemaker:inference-component:DesiredCopyCount</code> - The number of copies across an endpoint for a SageMaker inference component.</p> </li> <li> <p> <code>workspaces:workspacespool:DesiredUserSessions</code> - The number of user sessions for the WorkSpaces in the pool.</p> </li> </ul>"
         },
         "StartTime":{
           "shape":"TimestampType",
@@ -1792,8 +1791,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1986,8 +1984,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -2002,5 +1999,5 @@
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\n\\t]*"
     }
   },
-  "documentation":"<p>With Application Auto Scaling, you can configure automatic scaling for the following resources:</p> <ul> <li> <p>Amazon AppStream 2.0 fleets</p> </li> <li> <p>Amazon Aurora Replicas</p> </li> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>Amazon DynamoDB tables and global secondary indexes throughput capacity</p> </li> <li> <p>Amazon ECS services</p> </li> <li> <p>Amazon ElastiCache for Redis clusters (replication groups)</p> </li> <li> <p>Amazon EMR clusters</p> </li> <li> <p>Amazon Keyspaces (for Apache Cassandra) tables</p> </li> <li> <p>Lambda function provisioned concurrency</p> </li> <li> <p>Amazon Managed Streaming for Apache Kafka broker storage</p> </li> <li> <p>Amazon Neptune clusters</p> </li> <li> <p>Amazon SageMaker endpoint variants</p> </li> <li> <p>Amazon SageMaker inference components</p> </li> <li> <p>Amazon SageMaker serverless endpoint provisioned concurrency</p> </li> <li> <p>Spot Fleets (Amazon EC2)</p> </li> <li> <p>Pool of WorkSpaces</p> </li> <li> <p>Custom resources provided by your own applications or services</p> </li> </ul> <p>To learn more about Application Auto Scaling, see the <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html\">Application Auto Scaling User Guide</a>.</p> <p> <b>API Summary</b> </p> <p>The Application Auto Scaling service API includes three key sets of actions: </p> <ul> <li> <p>Register and manage scalable targets - Register Amazon Web Services or custom resources as scalable targets (a resource that Application Auto Scaling can scale), set minimum and maximum capacity limits, and retrieve information on existing scalable targets.</p> </li> <li> <p>Configure and manage automatic scaling - Define scaling policies to dynamically scale your resources in response to CloudWatch alarms, schedule one-time or recurring scaling actions, and retrieve your recent scaling activity history.</p> </li> <li> <p>Suspend and resume scaling - Temporarily suspend and later resume automatic scaling by calling the <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html\">RegisterScalableTarget</a> API action for any Application Auto Scaling scalable target. You can suspend and resume (individually or in combination) scale-out activities that are triggered by a scaling policy, scale-in activities that are triggered by a scaling policy, and scheduled scaling.</p> </li> </ul>"
+  "documentation":"<p>With Application Auto Scaling, you can configure automatic scaling for the following resources:</p> <ul> <li> <p>Amazon AppStream 2.0 fleets</p> </li> <li> <p>Amazon Aurora Replicas</p> </li> <li> <p>Amazon Comprehend document classification and entity recognizer endpoints</p> </li> <li> <p>Amazon DynamoDB tables and global secondary indexes throughput capacity</p> </li> <li> <p>Amazon ECS services</p> </li> <li> <p>Amazon ElastiCache replication groups (Redis OSS and Valkey) and Memcached clusters</p> </li> <li> <p>Amazon EMR clusters</p> </li> <li> <p>Amazon Keyspaces (for Apache Cassandra) tables</p> </li> <li> <p>Lambda function provisioned concurrency</p> </li> <li> <p>Amazon Managed Streaming for Apache Kafka broker storage</p> </li> <li> <p>Amazon Neptune clusters</p> </li> <li> <p>Amazon SageMaker endpoint variants</p> </li> <li> <p>Amazon SageMaker inference components</p> </li> <li> <p>Amazon SageMaker serverless endpoint provisioned concurrency</p> </li> <li> <p>Spot Fleets (Amazon EC2)</p> </li> <li> <p>Pool of WorkSpaces</p> </li> <li> <p>Custom resources provided by your own applications or services</p> </li> </ul> <p>To learn more about Application Auto Scaling, see the <a href=\"https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html\">Application Auto Scaling User Guide</a>.</p> <p> <b>API Summary</b> </p> <p>The Application Auto Scaling service API includes three key sets of actions: </p> <ul> <li> <p>Register and manage scalable targets - Register Amazon Web Services or custom resources as scalable targets (a resource that Application Auto Scaling can scale), set minimum and maximum capacity limits, and retrieve information on existing scalable targets.</p> </li> <li> <p>Configure and manage automatic scaling - Define scaling policies to dynamically scale your resources in response to CloudWatch alarms, schedule one-time or recurring scaling actions, and retrieve your recent scaling activity history.</p> </li> <li> <p>Suspend and resume scaling - Temporarily suspend and later resume automatic scaling by calling the <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html\">RegisterScalableTarget</a> API action for any Application Auto Scaling scalable target. You can suspend and resume (individually or in combination) scale-out activities that are triggered by a scaling policy, scale-in activities that are triggered by a scaling policy, and scheduled scaling.</p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-insights/2018-11-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/application-insights/2018-11-25/service-2.json 2.31.35-1/awscli/botocore/data/application-insights/2018-11-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/application-insights/2018-11-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-insights/2018-11-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -850,8 +850,7 @@
     },
     "CreateComponentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateLogPatternRequest":{
       "type":"structure",
@@ -916,8 +915,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteComponentRequest":{
       "type":"structure",
@@ -938,8 +936,7 @@
     },
     "DeleteComponentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLogPatternRequest":{
       "type":"structure",
@@ -965,8 +962,7 @@
     },
     "DeleteLogPatternResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeApplicationRequest":{
       "type":"structure",
@@ -2050,8 +2046,7 @@
     },
     "RemoveWorkloadResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResolutionMethod":{
       "type":"string",
@@ -2188,8 +2183,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2268,8 +2262,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationRequest":{
       "type":"structure",
@@ -2353,8 +2346,7 @@
     },
     "UpdateComponentConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateComponentRequest":{
       "type":"structure",
@@ -2383,8 +2375,7 @@
     },
     "UpdateComponentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLogPatternRequest":{
       "type":"structure",
@@ -2449,8 +2440,7 @@
     },
     "UpdateProblemResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStatus":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.json 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,18 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "ServiceSummaries"
+    },
+    "ListServiceLevelObjectiveExclusionWindows": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ExclusionWindows"
+    },
+    "ListServiceStates": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ServiceStates"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.sdk-extras.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,12 @@
               "StartTime",
               "EndTime"
             ]
+          },
+          "ListServiceStates": {
+            "non_aggregate_keys": [
+              "StartTime",
+              "EndTime"
+            ]
           }
       }
     }
diff -pruN 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/service-2.json 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/application-signals/2024-04-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/application-signals/2024-04-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,6 +28,22 @@
       ],
       "documentation":"<p>Use this operation to retrieve one or more <i>service level objective (SLO) budget reports</i>.</p> <p>An <i>error budget</i> is the amount of time or requests in an unhealthy state that your service can accumulate during an interval before your overall SLO budget health is breached and the SLO is considered to be unmet. For example, an SLO with a threshold of 99.95% and a monthly interval translates to an error budget of 21.9 minutes of downtime in a 30-day month.</p> <p>Budget reports include a health indicator, the attainment value, and remaining budget.</p> <p>For more information about SLO error budgets, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html#CloudWatch-ServiceLevelObjectives-concepts\"> SLO concepts</a>.</p>"
     },
+    "BatchUpdateExclusionWindows":{
+      "name":"BatchUpdateExclusionWindows",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/exclusion-windows",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchUpdateExclusionWindowsInput"},
+      "output":{"shape":"BatchUpdateExclusionWindowsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Add or remove time window exclusions for one or more Service Level Objectives (SLOs).</p>"
+    },
     "CreateServiceLevelObjective":{
       "name":"CreateServiceLevelObjective",
       "http":{
@@ -44,7 +60,23 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. Use SLOs to set and track specific target levels for the reliability and availability of your applications and services. SLOs use service level indicators (SLIs) to calculate whether the application is performing at the level that you want.</p> <p>Create an SLO to set a target for a service or operation’s availability or latency. CloudWatch measures this target frequently you can find whether it has been breached. </p> <p>The target performance quality that is defined for an SLO is the <i>attainment goal</i>.</p> <p>You can set SLO targets for your applications that are discovered by Application Signals, using critical metrics such as latency and availability. You can also set SLOs against any CloudWatch metric or math expression that produces a time series.</p> <p>When you create an SLO, you specify whether it is a <i>period-based SLO</i> or a <i>request-based SLO</i>. Each type of SLO has a different way of evaluating your application's performance against its attainment goal.</p> <ul> <li> <p>A <i>period-based SLO</i> uses defined <i>periods</i> of time within a specified total time interval. For each period of time, Application Signals determines whether the application met its goal. The attainment rate is calculated as the <code>number of good periods/number of total periods</code>.</p> <p>For example, for a period-based SLO, meeting an attainment goal of 99.9% means that within your interval, your application must meet its performance goal during at least 99.9% of the time periods.</p> </li> <li> <p>A <i>request-based SLO</i> doesn't use pre-defined periods of time. Instead, the SLO measures <code>number of good requests/number of total requests</code> during the interval. At any time, you can find the ratio of good requests to total requests for the interval up to the time stamp that you specify, and measure that ratio against the goal set in your SLO.</p> </li> </ul> <p>After you have created an SLO, you can retrieve error budget reports for it. An <i>error budget</i> is the amount of time or amount of requests that your application can be non-compliant with the SLO's goal, and still have your application meet the goal.</p> <ul> <li> <p>For a period-based SLO, the error budget starts at a number defined by the highest number of periods that can fail to meet the threshold, while still meeting the overall goal. The <i>remaining error budget</i> decreases with every failed period that is recorded. The error budget within one interval can never increase.</p> <p>For example, an SLO with a threshold that 99.95% of requests must be completed under 2000ms every month translates to an error budget of 21.9 minutes of downtime per month.</p> </li> <li> <p>For a request-based SLO, the remaining error budget is dynamic and can increase or decrease, depending on the ratio of good requests to total requests.</p> </li> </ul> <p>For more information about SLOs, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html\"> Service level objectives (SLOs)</a>. </p> <p>When you perform a <code>CreateServiceLevelObjective</code> operation, Application Signals creates the <i>AWSServiceRoleForCloudWatchApplicationSignals</i> service-linked role, if it doesn't already exist in your account. This service- linked role has the following permissions:</p> <ul> <li> <p> <code>xray:GetServiceGraph</code> </p> </li> <li> <p> <code>logs:StartQuery</code> </p> </li> <li> <p> <code>logs:GetQueryResults</code> </p> </li> <li> <p> <code>cloudwatch:GetMetricData</code> </p> </li> <li> <p> <code>cloudwatch:ListMetrics</code> </p> </li> <li> <p> <code>tag:GetResources</code> </p> </li> <li> <p> <code>autoscaling:DescribeAutoScalingGroups</code> </p> </li> </ul>"
+      "documentation":"<p>Creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. Use SLOs to set and track specific target levels for the reliability and availability of your applications and services. SLOs use service level indicators (SLIs) to calculate whether the application is performing at the level that you want.</p> <p>Create an SLO to set a target for a service or operation’s availability or latency. CloudWatch measures this target frequently you can find whether it has been breached. </p> <p>The target performance quality that is defined for an SLO is the <i>attainment goal</i>.</p> <p>You can set SLO targets for your applications that are discovered by Application Signals, using critical metrics such as latency and availability. You can also set SLOs against any CloudWatch metric or math expression that produces a time series.</p> <note> <p>You can't create an SLO for a service operation that was discovered by Application Signals until after that operation has reported standard metrics to Application Signals.</p> </note> <p>When you create an SLO, you specify whether it is a <i>period-based SLO</i> or a <i>request-based SLO</i>. Each type of SLO has a different way of evaluating your application's performance against its attainment goal.</p> <ul> <li> <p>A <i>period-based SLO</i> uses defined <i>periods</i> of time within a specified total time interval. For each period of time, Application Signals determines whether the application met its goal. The attainment rate is calculated as the <code>number of good periods/number of total periods</code>.</p> <p>For example, for a period-based SLO, meeting an attainment goal of 99.9% means that within your interval, your application must meet its performance goal during at least 99.9% of the time periods.</p> </li> <li> <p>A <i>request-based SLO</i> doesn't use pre-defined periods of time. Instead, the SLO measures <code>number of good requests/number of total requests</code> during the interval. At any time, you can find the ratio of good requests to total requests for the interval up to the time stamp that you specify, and measure that ratio against the goal set in your SLO.</p> </li> </ul> <p>After you have created an SLO, you can retrieve error budget reports for it. An <i>error budget</i> is the amount of time or amount of requests that your application can be non-compliant with the SLO's goal, and still have your application meet the goal.</p> <ul> <li> <p>For a period-based SLO, the error budget starts at a number defined by the highest number of periods that can fail to meet the threshold, while still meeting the overall goal. The <i>remaining error budget</i> decreases with every failed period that is recorded. The error budget within one interval can never increase.</p> <p>For example, an SLO with a threshold that 99.95% of requests must be completed under 2000ms every month translates to an error budget of 21.9 minutes of downtime per month.</p> </li> <li> <p>For a request-based SLO, the remaining error budget is dynamic and can increase or decrease, depending on the ratio of good requests to total requests.</p> </li> </ul> <p>For more information about SLOs, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html\"> Service level objectives (SLOs)</a>. </p> <p>When you perform a <code>CreateServiceLevelObjective</code> operation, Application Signals creates the <i>AWSServiceRoleForCloudWatchApplicationSignals</i> service-linked role, if it doesn't already exist in your account. This service- linked role has the following permissions:</p> <ul> <li> <p> <code>xray:GetServiceGraph</code> </p> </li> <li> <p> <code>logs:StartQuery</code> </p> </li> <li> <p> <code>logs:GetQueryResults</code> </p> </li> <li> <p> <code>cloudwatch:GetMetricData</code> </p> </li> <li> <p> <code>cloudwatch:ListMetrics</code> </p> </li> <li> <p> <code>tag:GetResources</code> </p> </li> <li> <p> <code>autoscaling:DescribeAutoScalingGroups</code> </p> </li> </ul>"
+    },
+    "DeleteGroupingConfiguration":{
+      "name":"DeleteGroupingConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/grouping-configuration",
+        "responseCode":200
+      },
+      "output":{"shape":"DeleteGroupingConfigurationOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a grouping configuration that defines how services are grouped and organized in Application Signals. Once deleted, services will no longer be grouped according to the specified configuration rules.</p> <p>This operation is irreversible. After deletion, you must recreate the grouping configuration if you want to restore the same grouping behavior.</p>",
+      "idempotent":true
     },
     "DeleteServiceLevelObjective":{
       "name":"DeleteServiceLevelObjective",
@@ -94,6 +126,37 @@
       ],
       "documentation":"<p>Returns information about one SLO created in the account. </p>"
     },
+    "ListAuditFindings":{
+      "name":"ListAuditFindings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/auditFindings",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAuditFindingsInput"},
+      "output":{"shape":"ListAuditFindingsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves a list of audit findings for Application Signals resources. Audit findings identify potential issues, misconfigurations, or compliance violations in your observability setup.</p> <p>You can filter findings by time range, auditor type, and target resources to focus on specific areas of concern. This operation supports pagination for large result sets.</p>"
+    },
+    "ListGroupingAttributeDefinitions":{
+      "name":"ListGroupingAttributeDefinitions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/grouping-attribute-definitions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListGroupingAttributeDefinitionsInput"},
+      "output":{"shape":"ListGroupingAttributeDefinitionsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the available grouping attribute definitions that can be used to create grouping configurations. These definitions specify the attributes and rules available for organizing services.</p> <p>Use this operation to discover what grouping options are available before creating or updating grouping configurations.</p>"
+    },
     "ListServiceDependencies":{
       "name":"ListServiceDependencies",
       "http":{
@@ -124,6 +187,22 @@
       ],
       "documentation":"<p>Returns the list of dependents that invoked the specified service during the provided time range. Dependents include other services, CloudWatch Synthetics canaries, and clients that are instrumented with CloudWatch RUM app monitors.</p>"
     },
+    "ListServiceLevelObjectiveExclusionWindows":{
+      "name":"ListServiceLevelObjectiveExclusionWindows",
+      "http":{
+        "method":"GET",
+        "requestUri":"/slo/{Id}/exclusion-windows",
+        "responseCode":200
+      },
+      "input":{"shape":"ListServiceLevelObjectiveExclusionWindowsInput"},
+      "output":{"shape":"ListServiceLevelObjectiveExclusionWindowsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves all exclusion windows configured for a specific SLO.</p>"
+    },
     "ListServiceLevelObjectives":{
       "name":"ListServiceLevelObjectives",
       "http":{
@@ -154,6 +233,21 @@
       ],
       "documentation":"<p>Returns a list of the <i>operations</i> of this service that have been discovered by Application Signals. Only the operations that were invoked during the specified time range are returned.</p>"
     },
+    "ListServiceStates":{
+      "name":"ListServiceStates",
+      "http":{
+        "method":"POST",
+        "requestUri":"/service/states",
+        "responseCode":200
+      },
+      "input":{"shape":"ListServiceStatesInput"},
+      "output":{"shape":"ListServiceStatesOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the current state information for services monitored by Application Signals. Service states include health status, recent change events, and other operational metadata.</p> <p>You can filter results by time range, AWS account, and service attributes to focus on specific services or time periods. This operation supports pagination and can include data from linked accounts.</p>"
+    },
     "ListServices":{
       "name":"ListServices",
       "http":{
@@ -184,6 +278,23 @@
       ],
       "documentation":"<p>Displays the tags associated with a CloudWatch resource. Tags can be assigned to service level objectives.</p>"
     },
+    "PutGroupingConfiguration":{
+      "name":"PutGroupingConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/grouping-configuration",
+        "responseCode":200
+      },
+      "input":{"shape":"PutGroupingConfigurationInput"},
+      "output":{"shape":"PutGroupingConfigurationOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Creates or updates a grouping configuration that defines how services are organized and grouped in Application Signals dashboards and service maps.</p> <p>Grouping configurations allow you to logically organize services based on attributes such as environment, team ownership, or business function, making it easier to monitor and manage related services together.</p>",
+      "idempotent":true
+    },
     "StartDiscovery":{
       "name":"StartDiscovery",
       "http":{
@@ -279,6 +390,44 @@
       "type":"double",
       "box":true
     },
+    "AttributeFilter":{
+      "type":"structure",
+      "required":[
+        "AttributeFilterName",
+        "AttributeFilterValues"
+      ],
+      "members":{
+        "AttributeFilterName":{
+          "shape":"AttributeFilterName",
+          "documentation":"<p>The name of the attribute to filter on. This corresponds to service metadata attributes such as environment, team, or custom tags.</p>"
+        },
+        "AttributeFilterValues":{
+          "shape":"AttributeFilterValues",
+          "documentation":"<p>An array of values to match against the specified attribute. Services with attribute values matching any of these values will be included in the results.</p>"
+        }
+      },
+      "documentation":"<p>Represents a filter for service attributes. Used to narrow down results based on specific attribute names and values.</p>"
+    },
+    "AttributeFilterName":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 :/-]+"
+    },
+    "AttributeFilterValue":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 :/-]+"
+    },
+    "AttributeFilterValues":{
+      "type":"list",
+      "member":{"shape":"AttributeFilterValue"},
+      "max":20,
+      "min":0
+    },
+    "AttributeFilters":{
+      "type":"list",
+      "member":{"shape":"AttributeFilter"},
+      "max":20,
+      "min":0
+    },
     "AttributeMap":{
       "type":"map",
       "key":{"shape":"String"},
@@ -292,9 +441,130 @@
       "type":"map",
       "key":{"shape":"KeyAttributeName"},
       "value":{"shape":"KeyAttributeValue"},
-      "max":3,
+      "max":4,
       "min":1
     },
+    "AuditFinding":{
+      "type":"structure",
+      "required":["KeyAttributes"],
+      "members":{
+        "KeyAttributes":{
+          "shape":"Attributes",
+          "documentation":"<p>A map of key attributes that identify the resource associated with this audit finding. These attributes help locate and understand the context of the finding.</p>"
+        },
+        "AuditorResults":{
+          "shape":"AuditorResults",
+          "documentation":"<p>An array of results from different auditors that examined the resource. Each result includes the auditor name, description, and severity level.</p>"
+        },
+        "Operation":{
+          "shape":"String",
+          "documentation":"<p>The operation or action that was being audited when this finding was discovered. This provides context about what was being examined.</p>"
+        },
+        "MetricGraph":{
+          "shape":"MetricGraph",
+          "documentation":"<p>A metric graph associated with the audit finding, showing relevant performance data that may be related to the identified issue.</p>"
+        },
+        "DependencyGraph":{
+          "shape":"DependencyGraph",
+          "documentation":"<p>A dependency graph showing the relationships between services that may be affected by or related to the audit finding.</p>"
+        },
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>The type or category of the audit finding, such as \"Performance\", \"Security\", or \"Configuration\".</p>"
+        }
+      },
+      "documentation":"<p>Represents an audit finding that identifies a potential issue, misconfiguration, or compliance violation in Application Signals resources.</p>"
+    },
+    "AuditFindings":{
+      "type":"list",
+      "member":{"shape":"AuditFinding"},
+      "max":10,
+      "min":0
+    },
+    "AuditTarget":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Data"
+      ],
+      "members":{
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>The type of resource being targeted for audit, such as \"Service\", \"SLO\", \"ServiceOperation\", or \"Canary\".</p>"
+        },
+        "Data":{
+          "shape":"AuditTargetEntity",
+          "documentation":"<p>The specific data or entity information for the audit target, containing details needed to identify and examine the resource.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a target resource for auditing, such as a service, SLO, or operation.</p>"
+    },
+    "AuditTargetEntity":{
+      "type":"structure",
+      "members":{
+        "Service":{
+          "shape":"ServiceEntity",
+          "documentation":"<p>Service entity information when the audit target is a service.</p>"
+        },
+        "Slo":{
+          "shape":"ServiceLevelObjectiveEntity",
+          "documentation":"<p>Service Level Objective entity information when the audit target is an SLO.</p>"
+        },
+        "ServiceOperation":{
+          "shape":"ServiceOperationEntity",
+          "documentation":"<p>Service operation entity information when the audit target is a specific operation within a service.</p>"
+        },
+        "Canary":{
+          "shape":"CanaryEntity",
+          "documentation":"<p>Canary entity information when the audit target is a CloudWatch Synthetics canary.</p>"
+        }
+      },
+      "documentation":"<p>A union type that represents different types of entities that can be audited, such as services, SLOs, service operations, or canaries.</p>",
+      "union":true
+    },
+    "AuditTargets":{
+      "type":"list",
+      "member":{"shape":"AuditTarget"},
+      "max":10,
+      "min":1
+    },
+    "AuditorResult":{
+      "type":"structure",
+      "members":{
+        "Auditor":{
+          "shape":"String",
+          "documentation":"<p>The name or identifier of the auditor that performed the examination and generated this result.</p>"
+        },
+        "Description":{
+          "shape":"AuditorResultDescriptionString",
+          "documentation":"<p>A detailed description of what the auditor found, including any recommendations for remediation or further investigation.</p>"
+        },
+        "Severity":{
+          "shape":"Severity",
+          "documentation":"<p>The severity level of the finding, such as \"Critical\", \"High\", \"Medium\", or \"Low\". This helps prioritize remediation efforts.</p>"
+        }
+      },
+      "documentation":"<p>Represents the result of an audit performed by a specific auditor on a resource.</p>"
+    },
+    "AuditorResultDescriptionString":{
+      "type":"string",
+      "max":10240,
+      "min":0
+    },
+    "AuditorResults":{
+      "type":"list",
+      "member":{"shape":"AuditorResult"},
+      "max":5,
+      "min":0
+    },
+    "Auditors":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "AwsAccountId":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
     "BatchGetServiceLevelObjectiveBudgetReportInput":{
       "type":"structure",
       "required":[
@@ -334,6 +604,74 @@
         }
       }
     },
+    "BatchUpdateExclusionWindowsError":{
+      "type":"structure",
+      "required":[
+        "SloId",
+        "ErrorCode",
+        "ErrorMessage"
+      ],
+      "members":{
+        "SloId":{
+          "shape":"ServiceLevelObjectiveId",
+          "documentation":"<p>The SLO ID in the error.</p>"
+        },
+        "ErrorCode":{
+          "shape":"ExclusionWindowErrorCode",
+          "documentation":"<p>The error code.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"ExclusionWindowErrorMessage",
+          "documentation":"<p>The error message.</p>"
+        }
+      },
+      "documentation":"<p>An array of structures, where each structure includes an error indicating that one of the requests in the array was not valid.</p>"
+    },
+    "BatchUpdateExclusionWindowsErrors":{
+      "type":"list",
+      "member":{"shape":"BatchUpdateExclusionWindowsError"},
+      "max":10,
+      "min":0
+    },
+    "BatchUpdateExclusionWindowsInput":{
+      "type":"structure",
+      "required":["SloIds"],
+      "members":{
+        "SloIds":{
+          "shape":"ServiceLevelObjectiveIds",
+          "documentation":"<p>The list of SLO IDs to add or remove exclusion windows from.</p>"
+        },
+        "AddExclusionWindows":{
+          "shape":"ExclusionWindows",
+          "documentation":"<p>A list of exclusion windows to add to the specified SLOs. You can add up to 10 exclusion windows per SLO.</p>"
+        },
+        "RemoveExclusionWindows":{
+          "shape":"ExclusionWindows",
+          "documentation":"<p>A list of exclusion windows to remove from the specified SLOs. The window configuration must match an existing exclusion window.</p>"
+        }
+      }
+    },
+    "BatchUpdateExclusionWindowsOutput":{
+      "type":"structure",
+      "required":[
+        "SloIds",
+        "Errors"
+      ],
+      "members":{
+        "SloIds":{
+          "shape":"ServiceLevelObjectiveIds",
+          "documentation":"<p>The list of SLO IDs that were successfully processed.</p>"
+        },
+        "Errors":{
+          "shape":"BatchUpdateExclusionWindowsErrors",
+          "documentation":"<p>A list of errors that occurred while processing the request.</p>"
+        }
+      }
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
     "BudgetRequestsRemaining":{
       "type":"integer",
       "box":true
@@ -351,7 +689,7 @@
           "documentation":"<p>The number of minutes to use as the look-back window.</p>"
         }
       },
-      "documentation":"<p>This object defines the length of the look-back window used to calculate one burn rate metric for this SLO. The burn rate measures how fast the service is consuming the error budget, relative to the attainment goal of the SLO. A burn rate of exactly 1 indicates that the SLO goal will be met exactly.</p> <p>For example, if you specify 60 as the number of minutes in the look-back window, the burn rate is calculated as the following:</p> <p> <i>burn rate = error rate over the look-back window / (1 - attainment goal percentage)</i> </p> <p>For more information about burn rates, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html#CloudWatch-ServiceLevelObjectives-burn\">Calculate burn rates</a>.</p>"
+      "documentation":"<p>This object defines the length of the look-back window used to calculate one burn rate metric for this SLO. The burn rate measures how fast the service is consuming the error budget, relative to the attainment goal of the SLO. A burn rate of exactly 1 indicates that the SLO goal will be met exactly.</p> <p>For example, if you specify 60 as the number of minutes in the look-back window, the burn rate is calculated as the following:</p> <p> <i>burn rate = error rate over the look-back window / (100% - attainment goal percentage)</i> </p> <p>For more information about burn rates, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-ServiceLevelObjectives.html#CloudWatch-ServiceLevelObjectives-burn\">Calculate burn rates</a>.</p>"
     },
     "BurnRateConfigurations":{
       "type":"list",
@@ -393,6 +731,67 @@
       "box":true,
       "min":1
     },
+    "CanaryEntity":{
+      "type":"structure",
+      "required":["CanaryName"],
+      "members":{
+        "CanaryName":{
+          "shape":"String",
+          "documentation":"<p>The name of the CloudWatch Synthetics canary.</p>"
+        }
+      },
+      "documentation":"<p>Represents a CloudWatch Synthetics canary that can be audited for performance and configuration issues.</p>"
+    },
+    "ChangeEvent":{
+      "type":"structure",
+      "required":[
+        "Timestamp",
+        "AccountId",
+        "Region",
+        "Entity",
+        "ChangeEventType",
+        "EventId"
+      ],
+      "members":{
+        "Timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the change event occurred, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "AccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The AWS account ID where the change event occurred.</p>"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p>The AWS region where the change event occurred.</p>"
+        },
+        "Entity":{
+          "shape":"Attributes",
+          "documentation":"<p>The entity or resource that was changed, such as a service, deployment, or configuration.</p>"
+        },
+        "ChangeEventType":{
+          "shape":"ChangeEventType",
+          "documentation":"<p>The type of change that occurred, such as \"Deployment\", \"Configuration\", or \"Infrastructure\".</p>"
+        },
+        "EventId":{
+          "shape":"String",
+          "documentation":"<p>A unique identifier for the change event.</p>"
+        },
+        "UserName":{
+          "shape":"String",
+          "documentation":"<p>The name of the user or system that initiated the change event.</p>"
+        },
+        "EventName":{
+          "shape":"String",
+          "documentation":"<p>A descriptive name for the change event that provides context about what changed.</p>"
+        }
+      },
+      "documentation":"<p>Represents a change event that occurred in the system, such as deployments, configuration changes, or other operational events that may impact service performance.</p>"
+    },
+    "ChangeEventType":{
+      "type":"string",
+      "enum":["DEPLOYMENT"]
+    },
     "ConflictException":{
       "type":"structure",
       "required":["Message"],
@@ -406,6 +805,13 @@
       },
       "exception":true
     },
+    "ConnectionType":{
+      "type":"string",
+      "enum":[
+        "INDIRECT",
+        "DIRECT"
+      ]
+    },
     "CreateServiceLevelObjectiveInput":{
       "type":"structure",
       "required":["Name"],
@@ -450,6 +856,10 @@
         }
       }
     },
+    "DeleteGroupingConfigurationOutput":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteServiceLevelObjectiveInput":{
       "type":"structure",
       "required":["Id"],
@@ -464,8 +874,39 @@
     },
     "DeleteServiceLevelObjectiveOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DependencyConfig":{
+      "type":"structure",
+      "required":[
+        "DependencyKeyAttributes",
+        "DependencyOperationName"
+      ],
       "members":{
-      }
+        "DependencyKeyAttributes":{
+          "shape":"Attributes",
+          "documentation":"<p>This is a string-to-string map. It can include the following fields.</p> <ul> <li> <p> <code>Type</code> designates the type of object this is.</p> </li> <li> <p> <code>ResourceType</code> specifies the type of the resource. This field is used only when the value of the <code>Type</code> field is <code>Resource</code> or <code>AWS::Resource</code>.</p> </li> <li> <p> <code>Name</code> specifies the name of the object. This is used only if the value of the <code>Type</code> field is <code>Service</code>, <code>RemoteService</code>, or <code>AWS::Service</code>.</p> </li> <li> <p> <code>Identifier</code> identifies the resource objects of this resource. This is used only if the value of the <code>Type</code> field is <code>Resource</code> or <code>AWS::Resource</code>.</p> </li> <li> <p> <code>Environment</code> specifies the location where this object is hosted, or what it belongs to.</p> </li> </ul>"
+        },
+        "DependencyOperationName":{
+          "shape":"OperationName",
+          "documentation":"<p>The name of the called operation in the dependency.</p>"
+        }
+      },
+      "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>.</p> <p>When creating a service dependency SLO, you must specify the <code>KeyAttributes</code> of the service, and the <code>DependencyConfig</code> for the dependency. You can specify the <code>OperationName</code> of the service, from which it calls the dependency. Alternatively, you can exclude <code>OperationName</code> and the SLO will monitor all of the service's operations that call the dependency.</p>"
+    },
+    "DependencyGraph":{
+      "type":"structure",
+      "members":{
+        "Nodes":{
+          "shape":"Nodes",
+          "documentation":"<p>An array of nodes in the dependency graph, where each node represents a service or component.</p>"
+        },
+        "Edges":{
+          "shape":"Edges",
+          "documentation":"<p>An array of edges in the dependency graph, where each edge represents a connection or dependency between two nodes.</p>"
+        }
+      },
+      "documentation":"<p>Represents a graph showing the dependencies between services and components in your application architecture.</p>"
     },
     "Dimension":{
       "type":"structure",
@@ -501,6 +942,10 @@
       "max":30,
       "min":0
     },
+    "Double":{
+      "type":"double",
+      "box":true
+    },
     "DurationUnit":{
       "type":"string",
       "enum":[
@@ -510,6 +955,32 @@
         "MONTH"
       ]
     },
+    "Edge":{
+      "type":"structure",
+      "members":{
+        "SourceNodeId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the source node in the dependency relationship.</p>"
+        },
+        "DestinationNodeId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the destination node in the dependency relationship.</p>"
+        },
+        "Duration":{
+          "shape":"Double",
+          "documentation":"<p>The typical duration or latency of interactions along this edge, measured in milliseconds.</p>"
+        },
+        "ConnectionType":{
+          "shape":"ConnectionType",
+          "documentation":"<p>The type of connection between the nodes, such as \"HTTP\", \"Database\", \"Queue\", or \"Internal\".</p>"
+        }
+      },
+      "documentation":"<p>Represents a connection between two nodes in a dependency graph, showing how services or components interact with each other.</p>"
+    },
+    "Edges":{
+      "type":"list",
+      "member":{"shape":"Edge"}
+    },
     "EvaluationType":{
       "type":"string",
       "enum":[
@@ -517,6 +988,52 @@
         "RequestBased"
       ]
     },
+    "ExclusionDuration":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "ExclusionReason":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "ExclusionWindow":{
+      "type":"structure",
+      "required":["Window"],
+      "members":{
+        "Window":{
+          "shape":"Window",
+          "documentation":"<p>The SLO time window exclusion .</p>"
+        },
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start of the SLO time window exclusion. Defaults to current time if not specified.</p>"
+        },
+        "RecurrenceRule":{
+          "shape":"RecurrenceRule",
+          "documentation":"<p>The recurrence rule for the SLO time window exclusion. Supports both cron and rate expressions.</p>"
+        },
+        "Reason":{
+          "shape":"ExclusionReason",
+          "documentation":"<p>A description explaining why this time period should be excluded from SLO calculations.</p>"
+        }
+      },
+      "documentation":"<p>The core SLO time window exclusion object that includes Window, StartTime, RecurrenceRule, and Reason.</p>"
+    },
+    "ExclusionWindowErrorCode":{"type":"string"},
+    "ExclusionWindowErrorMessage":{"type":"string"},
+    "ExclusionWindows":{
+      "type":"list",
+      "member":{"shape":"ExclusionWindow"},
+      "max":10,
+      "min":0
+    },
+    "Expression":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "FaultDescription":{"type":"string"},
     "GetServiceInput":{
       "type":"structure",
@@ -610,6 +1127,77 @@
       },
       "documentation":"<p>This structure contains the attributes that determine the goal of an SLO. This includes the time period for evaluation and the attainment threshold.</p>"
     },
+    "GroupIdentifier":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "GroupName":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "GroupSource":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "GroupValue":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "GroupingAttributeDefinition":{
+      "type":"structure",
+      "required":["GroupingName"],
+      "members":{
+        "GroupingName":{
+          "shape":"GroupingString",
+          "documentation":"<p>The name of the grouping attribute, such as \"Environment\", \"Team\", or \"Application\".</p>"
+        },
+        "GroupingSourceKeys":{
+          "shape":"GroupingSourceKeyStringList",
+          "documentation":"<p>An array of source attribute keys that will be used to determine the grouping value for each service. These keys correspond to service metadata or tags.</p>"
+        },
+        "DefaultGroupingValue":{
+          "shape":"GroupingString",
+          "documentation":"<p>The default value to use for grouping when a service doesn't have any of the specified source keys, such as \"Unknown\" or \"Unassigned\".</p>"
+        }
+      },
+      "documentation":"<p>Defines how services should be grouped based on specific attributes. This allows logical organization of services in dashboards and service maps.</p>"
+    },
+    "GroupingAttributeDefinitions":{
+      "type":"list",
+      "member":{"shape":"GroupingAttributeDefinition"}
+    },
+    "GroupingConfiguration":{
+      "type":"structure",
+      "required":[
+        "GroupingAttributeDefinitions",
+        "UpdatedAt"
+      ],
+      "members":{
+        "GroupingAttributeDefinitions":{
+          "shape":"GroupingAttributeDefinitions",
+          "documentation":"<p>An array of grouping attribute definitions that specify the rules for organizing services into groups.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the grouping configuration was last updated, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        }
+      },
+      "documentation":"<p>Contains the complete configuration for how services are grouped and organized in Application Signals.</p>"
+    },
+    "GroupingSourceKeyStringList":{
+      "type":"list",
+      "member":{"shape":"GroupingString"}
+    },
+    "GroupingString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\s+\\-=\\._:/@]*"
+    },
     "Interval":{
       "type":"structure",
       "members":{
@@ -635,6 +1223,99 @@
       "min":1,
       "pattern":"[ -~]*[!-~]+[ -~]*"
     },
+    "LatestChangeEvents":{
+      "type":"list",
+      "member":{"shape":"ChangeEvent"},
+      "max":1,
+      "min":1
+    },
+    "ListAuditFindingMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "ListAuditFindingsInput":{
+      "type":"structure",
+      "required":[
+        "StartTime",
+        "EndTime",
+        "AuditTargets"
+      ],
+      "members":{
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the audit findings query. Only findings created on or after this time will be included in the results. Specify the time as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>",
+          "location":"querystring",
+          "locationName":"StartTime"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the audit findings query. Only findings created before this time will be included in the results. Specify the time as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>",
+          "location":"querystring",
+          "locationName":"EndTime"
+        },
+        "Auditors":{
+          "shape":"Auditors",
+          "documentation":"<p>An array of auditor names to filter the findings. Only findings generated by the specified auditors will be returned. When not specified, findings from all auditors are included except canary.</p>"
+        },
+        "AuditTargets":{
+          "shape":"AuditTargets",
+          "documentation":"<p>An array of audit target specifications to filter the findings. Only findings related to the specified targets (such as specific services, SLOs, operations or canary) will be returned.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use this token to retrieve additional pages of audit findings when the result set is large.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListAuditFindingMaxResults",
+          "documentation":"<p>The maximum number of audit findings to return in a single request. Valid range is 1 to 100. If not specified, defaults to 50.</p>"
+        }
+      }
+    },
+    "ListAuditFindingsOutput":{
+      "type":"structure",
+      "required":["AuditFindings"],
+      "members":{
+        "AuditFindings":{
+          "shape":"AuditFindings",
+          "documentation":"<p>An array of audit findings that match the specified criteria. Each finding includes details about the issue, affected resources, and auditor results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use for retrieving the next page of results. This value is present only if there are more results available than were returned in the current response.</p>"
+        }
+      }
+    },
+    "ListGroupingAttributeDefinitionsInput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use this token to retrieve additional pages of grouping attribute definitions when the result set is large.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListGroupingAttributeDefinitionsOutput":{
+      "type":"structure",
+      "required":["GroupingAttributeDefinitions"],
+      "members":{
+        "GroupingAttributeDefinitions":{
+          "shape":"GroupingAttributeDefinitions",
+          "documentation":"<p>An array of available grouping attribute definitions that can be used to create grouping configurations.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the grouping attribute definitions were last updated. Expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use for retrieving the next page of results. This value is present only if there are more results available than were returned in the current response.</p>"
+        }
+      }
+    },
     "ListServiceDependenciesInput":{
       "type":"structure",
       "required":[
@@ -775,6 +1456,50 @@
         }
       }
     },
+    "ListServiceLevelObjectiveExclusionWindowsInput":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"ServiceLevelObjectiveId",
+          "documentation":"<p>The ID of the SLO to list exclusion windows for.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "MaxResults":{
+          "shape":"ListServiceLevelObjectiveExclusionWindowsMaxResults",
+          "documentation":"<p>The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used. </p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Include this value, if it was returned by the previous operation, to get the next set of service level objectives. </p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListServiceLevelObjectiveExclusionWindowsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "ListServiceLevelObjectiveExclusionWindowsOutput":{
+      "type":"structure",
+      "required":["ExclusionWindows"],
+      "members":{
+        "ExclusionWindows":{
+          "shape":"ExclusionWindows",
+          "documentation":"<p>A list of exclusion windows configured for the SLO.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Include this value, if it was returned by the previous operation, to get the next set of service level objectives. </p>"
+        }
+      }
+    },
     "ListServiceLevelObjectivesInput":{
       "type":"structure",
       "members":{
@@ -788,6 +1513,10 @@
           "location":"querystring",
           "locationName":"OperationName"
         },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
+        },
         "MaxResults":{
           "shape":"ListServiceLevelObjectivesMaxResults",
           "documentation":"<p>The maximum number of results to return in one operation. If you omit this parameter, the default of 50 is used.</p>",
@@ -799,6 +1528,22 @@
           "documentation":"<p>Include this value, if it was returned by the previous operation, to get the next set of service level objectives.</p>",
           "location":"querystring",
           "locationName":"NextToken"
+        },
+        "IncludeLinkedAccounts":{
+          "shape":"Boolean",
+          "documentation":"<p>If you are using this operation in a monitoring account, specify <code>true</code> to include SLO from source accounts in the returned data. </p> <p>When you are monitoring an account, you can use Amazon Web Services account ID in <code>KeyAttribute</code> filter for service source account and <code>SloOwnerawsaccountID</code> for SLO source account with <code>IncludeLinkedAccounts</code> to filter the returned data to only a single source account. </p>",
+          "location":"querystring",
+          "locationName":"IncludeLinkedAccounts"
+        },
+        "SloOwnerAwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>SLO's Amazon Web Services account ID.</p>",
+          "location":"querystring",
+          "locationName":"SloOwnerAwsAccountId"
+        },
+        "MetricSourceTypes":{
+          "shape":"MetricSourceTypes",
+          "documentation":"<p>Use this optional field to only include SLOs with the specified metric source types in the output. Supported types are:</p> <ul> <li> <p>Service operation</p> </li> <li> <p>Service dependency</p> </li> <li> <p>CloudWatch metric</p> </li> </ul>"
         }
       }
     },
@@ -891,6 +1636,74 @@
         }
       }
     },
+    "ListServiceStatesInput":{
+      "type":"structure",
+      "required":[
+        "StartTime",
+        "EndTime"
+      ],
+      "members":{
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the service states query. Only service states from this time onward will be included. Specify the time as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the service states query. Only service states before this time will be included. Specify the time as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListServiceStatesMaxResults",
+          "documentation":"<p>The maximum number of service states to return in a single request. Valid range is 1 to 100. If not specified, defaults to 50.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use this token to retrieve additional pages of service states when the result set is large.</p>"
+        },
+        "IncludeLinkedAccounts":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to include service states from linked AWS accounts in the results. Set to <code>true</code> to include linked accounts, or <code>false</code> to only include the current account. Defaults to <code>false</code>.</p>"
+        },
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The AWS account ID to filter service states. If specified, only service states from this account will be returned. If not specified, service states from the current account (and linked accounts if enabled) are returned.</p>"
+        },
+        "AttributeFilters":{
+          "shape":"AttributeFilters",
+          "documentation":"<p>An array of attribute filters to narrow down the service states returned. Each filter specifies an attribute name and the values to match against.</p>"
+        }
+      }
+    },
+    "ListServiceStatesMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":250
+    },
+    "ListServiceStatesOutput":{
+      "type":"structure",
+      "required":[
+        "StartTime",
+        "EndTime",
+        "ServiceStates"
+      ],
+      "members":{
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the query range, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time of the query range, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "ServiceStates":{
+          "shape":"ServiceStates",
+          "documentation":"<p>An array of service state objects that match the specified criteria. Each service state includes current status, recent change events, and service metadata.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use for retrieving the next page of results. This value is present only if there are more results available than were returned in the current response.</p>"
+        }
+      }
+    },
     "ListServicesInput":{
       "type":"structure",
       "required":[
@@ -921,6 +1734,18 @@
           "documentation":"<p>Include this value, if it was returned by the previous operation, to get the next set of services.</p>",
           "location":"querystring",
           "locationName":"NextToken"
+        },
+        "IncludeLinkedAccounts":{
+          "shape":"Boolean",
+          "documentation":"<p>If you are using this operation in a monitoring account, specify <code>true</code> to include services from source accounts in the returned data. </p>",
+          "location":"querystring",
+          "locationName":"IncludeLinkedAccounts"
+        },
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>Amazon Web Services Account ID.</p>",
+          "location":"querystring",
+          "locationName":"AwsAccountId"
         }
       }
     },
@@ -1043,6 +1868,24 @@
       "max":2048,
       "min":1
     },
+    "MetricGraph":{
+      "type":"structure",
+      "members":{
+        "MetricDataQueries":{
+          "shape":"MetricDataQueries",
+          "documentation":"<p>An array of metric data queries that define what metrics to display in the graph. Each query specifies the metric source, aggregation, and time range.</p>"
+        },
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the metric data displayed in the graph, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the metric data displayed in the graph, expressed as the number of milliseconds since January 1, 1970, 00:00:00 UTC.</p>"
+        }
+      },
+      "documentation":"<p>Represents a graph of metric data over time, showing performance trends and patterns for monitored resources.</p>"
+    },
     "MetricId":{
       "type":"string",
       "max":255,
@@ -1077,6 +1920,10 @@
         "MetricName":{
           "shape":"MetricName",
           "documentation":"<p>The name of the metric.</p>"
+        },
+        "AccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>Amazon Web Services account ID.</p>"
         }
       },
       "documentation":"<p>This structure contains information about one CloudWatch metric associated with this entity discovered by Application Signals.</p>"
@@ -1085,6 +1932,20 @@
       "type":"list",
       "member":{"shape":"MetricReference"}
     },
+    "MetricSourceType":{
+      "type":"string",
+      "enum":[
+        "ServiceOperation",
+        "CloudWatchMetric",
+        "ServiceDependency"
+      ]
+    },
+    "MetricSourceTypes":{
+      "type":"list",
+      "member":{"shape":"MetricSourceType"},
+      "max":3,
+      "min":1
+    },
     "MetricStat":{
       "type":"structure",
       "required":[
@@ -1138,6 +1999,51 @@
       "pattern":".*[^:].*"
     },
     "NextToken":{"type":"string"},
+    "Node":{
+      "type":"structure",
+      "required":[
+        "KeyAttributes",
+        "Name",
+        "NodeId"
+      ],
+      "members":{
+        "KeyAttributes":{
+          "shape":"Attributes",
+          "documentation":"<p>A map of key attributes that identify and describe the node, such as service name, environment, and other metadata.</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The display name of the node, typically the service or component name.</p>"
+        },
+        "NodeId":{
+          "shape":"String",
+          "documentation":"<p>A unique identifier for the node within the dependency graph.</p>"
+        },
+        "Operation":{
+          "shape":"String",
+          "documentation":"<p>The specific operation or endpoint within the service that this node represents, if applicable.</p>"
+        },
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>The type of node, such as \"Service\", \"Database\", \"Queue\", or \"External\".</p>"
+        },
+        "Duration":{
+          "shape":"Double",
+          "documentation":"<p>The typical response time or processing duration for this node, measured in milliseconds.</p>"
+        },
+        "Status":{
+          "shape":"String",
+          "documentation":"<p>The current health status of the node, such as \"Healthy\", \"Warning\", or \"Critical\".</p>"
+        }
+      },
+      "documentation":"<p>Represents a node in a dependency graph, typically corresponding to a service or component in your application architecture.</p>"
+    },
+    "Nodes":{
+      "type":"list",
+      "member":{"shape":"Node"},
+      "max":4,
+      "min":0
+    },
     "OperationName":{
       "type":"string",
       "max":255,
@@ -1148,6 +2054,37 @@
       "box":true,
       "min":1
     },
+    "PutGroupingConfigurationInput":{
+      "type":"structure",
+      "required":["GroupingAttributeDefinitions"],
+      "members":{
+        "GroupingAttributeDefinitions":{
+          "shape":"GroupingAttributeDefinitions",
+          "documentation":"<p>An array of grouping attribute definitions that specify how services should be grouped. Each definition includes the grouping name, source keys, and default values.</p>"
+        }
+      }
+    },
+    "PutGroupingConfigurationOutput":{
+      "type":"structure",
+      "required":["GroupingConfiguration"],
+      "members":{
+        "GroupingConfiguration":{
+          "shape":"GroupingConfiguration",
+          "documentation":"<p>The created or updated grouping configuration, including all attribute definitions and metadata such as the update timestamp.</p>"
+        }
+      }
+    },
+    "RecurrenceRule":{
+      "type":"structure",
+      "required":["Expression"],
+      "members":{
+        "Expression":{
+          "shape":"Expression",
+          "documentation":"<p>A cron or rate expression that specifies the schedule for the exclusion window.</p>"
+        }
+      },
+      "documentation":"<p>The recurrence rule for the SLO time window exclusion .</p>"
+    },
     "RequestBasedServiceLevelIndicator":{
       "type":"structure",
       "required":["RequestBasedSliMetric"],
@@ -1212,6 +2149,10 @@
         "MonitoredRequestCountMetric":{
           "shape":"MonitoredRequestCountMetricDataQueries",
           "documentation":"<p>This structure defines the metric that is used as the \"good request\" or \"bad request\" value for a request-based SLO. This value observed for the metric defined in <code>TotalRequestCountMetric</code> is divided by the number found for <code>MonitoredRequestCountMetric</code> to determine the percentage of successful requests that this SLO tracks.</p>"
+        },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
         }
       },
       "documentation":"<p>This structure contains the information about the metric that is used for a request-based SLO.</p>"
@@ -1238,6 +2179,10 @@
         "MonitoredRequestCountMetric":{
           "shape":"MonitoredRequestCountMetricDataQueries",
           "documentation":"<p>Use this structure to define the metric that you want to use as the \"good request\" or \"bad request\" value for a request-based SLO. This value observed for the metric defined in <code>TotalRequestCountMetric</code> will be divided by the number found for <code>MonitoredRequestCountMetric</code> to determine the percentage of successful requests that this SLO tracks.</p>"
+        },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
         }
       },
       "documentation":"<p>Use this structure to specify the information for the metric that a period-based SLO will monitor.</p>"
@@ -1317,6 +2262,10 @@
           "shape":"AttributeMaps",
           "documentation":"<p>This structure contains one or more string-to-string maps that help identify this service. It can include <i>platform attributes</i>, <i>application attributes</i>, and <i>telemetry attributes</i>.</p> <p>Platform attributes contain information the service's platform.</p> <ul> <li> <p> <code>PlatformType</code> defines the hosted-in platform.</p> </li> <li> <p> <code>EKS.Cluster</code> is the name of the Amazon EKS cluster.</p> </li> <li> <p> <code>K8s.Cluster</code> is the name of the self-hosted Kubernetes cluster.</p> </li> <li> <p> <code>K8s.Namespace</code> is the name of the Kubernetes namespace in either Amazon EKS or Kubernetes clusters.</p> </li> <li> <p> <code>K8s.Workload</code> is the name of the Kubernetes workload in either Amazon EKS or Kubernetes clusters.</p> </li> <li> <p> <code>K8s.Node</code> is the name of the Kubernetes node in either Amazon EKS or Kubernetes clusters.</p> </li> <li> <p> <code>K8s.Pod</code> is the name of the Kubernetes pod in either Amazon EKS or Kubernetes clusters.</p> </li> <li> <p> <code>EC2.AutoScalingGroup</code> is the name of the Amazon EC2 Auto Scaling group.</p> </li> <li> <p> <code>EC2.InstanceId</code> is the ID of the Amazon EC2 instance.</p> </li> <li> <p> <code>Host</code> is the name of the host, for all platform types.</p> </li> </ul> <p>Application attributes contain information about the application.</p> <ul> <li> <p> <code>AWS.Application</code> is the application's name in Amazon Web Services Service Catalog AppRegistry.</p> </li> <li> <p> <code>AWS.Application.ARN</code> is the application's ARN in Amazon Web Services Service Catalog AppRegistry.</p> </li> </ul> <p>Telemetry attributes contain telemetry information.</p> <ul> <li> <p> <code>Telemetry.SDK</code> is the fingerprint of the OpenTelemetry SDK version for instrumented services.</p> </li> <li> <p> <code>Telemetry.Agent</code> is the fingerprint of the agent used to collect and send telemetry data.</p> </li> <li> <p> <code>Telemetry.Source</code> Specifies the point of application where the telemetry was collected or specifies what was used for the source of telemetry data.</p> </li> </ul>"
         },
+        "ServiceGroups":{
+          "shape":"ServiceGroups",
+          "documentation":"<p>An array of service groups that this service belongs to, based on the configured grouping rules.</p>"
+        },
         "MetricReferences":{
           "shape":"MetricReferences",
           "documentation":"<p>An array of structures that each contain information about one metric associated with this service.</p>"
@@ -1394,7 +2343,61 @@
       "max":100,
       "min":0
     },
+    "ServiceEntity":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>The type of service, such as \"WebService\", \"Database\", \"Queue\", or \"Function\".</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the service as identified by Application Signals.</p>"
+        },
+        "Environment":{
+          "shape":"String",
+          "documentation":"<p>The environment where the service is deployed, such as \"Production\", \"Staging\", or \"Development\".</p>"
+        },
+        "AwsAccountId":{
+          "shape":"String",
+          "documentation":"<p>The AWS account ID where the service is deployed.</p>"
+        }
+      },
+      "documentation":"<p>Represents a service entity that is monitored by Application Signals.</p>"
+    },
     "ServiceErrorMessage":{"type":"string"},
+    "ServiceGroup":{
+      "type":"structure",
+      "required":[
+        "GroupName",
+        "GroupValue",
+        "GroupSource",
+        "GroupIdentifier"
+      ],
+      "members":{
+        "GroupName":{
+          "shape":"GroupName",
+          "documentation":"<p>The name of the group, such as \"Environment\", \"Team\", or \"Application\".</p>"
+        },
+        "GroupValue":{
+          "shape":"GroupValue",
+          "documentation":"<p>The specific value for this group, such as \"Production\", \"TeamA\", or \"WebApp\".</p>"
+        },
+        "GroupSource":{
+          "shape":"GroupSource",
+          "documentation":"<p>The source of the grouping information, such as \"Tag\", \"Attribute\", or \"Manual\".</p>"
+        },
+        "GroupIdentifier":{
+          "shape":"GroupIdentifier",
+          "documentation":"<p>A unique identifier for the group within the grouping configuration.</p>"
+        }
+      },
+      "documentation":"<p>Represents a logical grouping of services based on shared attributes or characteristics.</p>"
+    },
+    "ServiceGroups":{
+      "type":"list",
+      "member":{"shape":"ServiceGroup"}
+    },
     "ServiceLevelIndicator":{
       "type":"structure",
       "required":[
@@ -1469,6 +2472,10 @@
         "MetricDataQueries":{
           "shape":"MetricDataQueries",
           "documentation":"<p>If this SLO monitors a CloudWatch metric or the result of a CloudWatch metric math expression, this structure includes the information about that metric or expression. </p>"
+        },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
         }
       },
       "documentation":"<p>This structure contains the information about the metric that is used for a period-based SLO.</p>"
@@ -1488,6 +2495,10 @@
           "shape":"ServiceLevelIndicatorMetricType",
           "documentation":"<p>If the SLO is to monitor either the <code>LATENCY</code> or <code>AVAILABILITY</code> metric that Application Signals collects, use this field to specify which of those metrics is used.</p>"
         },
+        "MetricName":{
+          "shape":"MetricName",
+          "documentation":"<p>The name of the CloudWatch metric used as a service level indicator (SLI) for measuring service performance.</p>"
+        },
         "Statistic":{
           "shape":"ServiceLevelIndicatorStatistic",
           "documentation":"<p>The statistic to use for comparison to the threshold. It can be any CloudWatch statistic or extended statistic. For more information about statistics, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html\">CloudWatch statistics definitions</a>.</p>"
@@ -1499,6 +2510,10 @@
         "MetricDataQueries":{
           "shape":"MetricDataQueries",
           "documentation":"<p>If this SLO monitors a CloudWatch metric or the result of a CloudWatch metric math expression, use this structure to specify that metric or expression. </p>"
+        },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
         }
       },
       "documentation":"<p>Use this structure to specify the information for the metric that a period-based SLO will monitor.</p>"
@@ -1566,6 +2581,10 @@
         "BurnRateConfigurations":{
           "shape":"BurnRateConfigurations",
           "documentation":"<p>Each object in this array defines the length of the look-back window used to calculate one burn rate metric for this SLO. The burn rate measures how fast the service is consuming the error budget, relative to the attainment goal of the SLO.</p>"
+        },
+        "MetricSourceType":{
+          "shape":"MetricSourceType",
+          "documentation":"<p>Displays the SLI metric source type for this SLO. Supported types are:</p> <ul> <li> <p>Service operation</p> </li> <li> <p>Service dependency</p> </li> <li> <p>CloudWatch metric</p> </li> </ul>"
         }
       },
       "documentation":"<p>A structure containing information about one service level objective (SLO) that has been created in Application Signals. Creating SLOs can help you ensure your services are performing to the level that you expect. SLOs help you set and track a specific target level for the reliability and availability of your applications and services. Each SLO uses a service level indicator (SLI), which is a key performance metric, to calculate how much underperformance can be tolerated before the goal that you set for the SLO is not achieved.</p>"
@@ -1685,6 +2704,20 @@
       "max":1024,
       "min":1
     },
+    "ServiceLevelObjectiveEntity":{
+      "type":"structure",
+      "members":{
+        "SloName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Service Level Objective.</p>"
+        },
+        "SloArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Service Level Objective.</p>"
+        }
+      },
+      "documentation":"<p>Represents a Service Level Objective (SLO) entity that can be audited for compliance and performance.</p>"
+    },
     "ServiceLevelObjectiveId":{
       "type":"string",
       "pattern":"[0-9A-Za-z][-._0-9A-Za-z ]{0,126}[0-9A-Za-z]$|^arn:aws:application-signals:[^:]*:[^:]*:slo/[0-9A-Za-z][-._0-9A-Za-z ]{0,126}[0-9A-Za-z]"
@@ -1726,9 +2759,21 @@
           "shape":"OperationName",
           "documentation":"<p>If this service level objective is specific to a single operation, this field displays the name of that operation.</p>"
         },
+        "DependencyConfig":{
+          "shape":"DependencyConfig",
+          "documentation":"<p>Identifies the dependency using the <code>DependencyKeyAttributes</code> and <code>DependencyOperationName</code>. </p>"
+        },
         "CreatedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that this service level objective was created. It is expressed as the number of milliseconds since Jan 1, 1970 00:00:00 UTC.</p>"
+        },
+        "EvaluationType":{
+          "shape":"EvaluationType",
+          "documentation":"<p>Displays whether this is a period-based SLO or a request-based SLO.</p>"
+        },
+        "MetricSourceType":{
+          "shape":"MetricSourceType",
+          "documentation":"<p>Displays the SLI metric source type for this SLO. Supported types are:</p> <ul> <li> <p>Service operation</p> </li> <li> <p>Service dependency</p> </li> <li> <p>CloudWatch metric</p> </li> </ul>"
         }
       },
       "documentation":"<p>A structure that contains information about one service level objective (SLO) created in Application Signals.</p>"
@@ -1751,6 +2796,24 @@
       },
       "documentation":"<p>This structure contains information about an operation discovered by Application Signals. An operation is a specific function performed by a service that was discovered by Application Signals, and is often an API that is called by an upstream dependent. </p>"
     },
+    "ServiceOperationEntity":{
+      "type":"structure",
+      "members":{
+        "Service":{
+          "shape":"ServiceEntity",
+          "documentation":"<p>The service entity that contains this operation.</p>"
+        },
+        "Operation":{
+          "shape":"String",
+          "documentation":"<p>The name of the specific operation within the service.</p>"
+        },
+        "MetricType":{
+          "shape":"String",
+          "documentation":"<p>The type of metric associated with this service operation, such as \"Latency\", \"ErrorRate\", or \"Throughput\".</p>"
+        }
+      },
+      "documentation":"<p>Represents a specific operation within a service that can be monitored and audited independently.</p>"
+    },
     "ServiceOperations":{
       "type":"list",
       "member":{"shape":"ServiceOperation"},
@@ -1770,6 +2833,34 @@
       },
       "exception":true
     },
+    "ServiceState":{
+      "type":"structure",
+      "required":[
+        "Service",
+        "LatestChangeEvents"
+      ],
+      "members":{
+        "AttributeFilters":{
+          "shape":"AttributeFilters",
+          "documentation":"<p>The attribute filters that were applied when retrieving this service state.</p>"
+        },
+        "Service":{
+          "shape":"Attributes",
+          "documentation":"<p>The service entity information for this service state.</p>"
+        },
+        "LatestChangeEvents":{
+          "shape":"LatestChangeEvents",
+          "documentation":"<p>An array of the most recent change events that may have affected this service, such as deployments or configuration changes.</p>"
+        }
+      },
+      "documentation":"<p>Represents the current state and health information for a service monitored by Application Signals.</p>"
+    },
+    "ServiceStates":{
+      "type":"list",
+      "member":{"shape":"ServiceState"},
+      "max":250,
+      "min":0
+    },
     "ServiceSummaries":{
       "type":"list",
       "member":{"shape":"ServiceSummary"}
@@ -1792,10 +2883,24 @@
         "MetricReferences":{
           "shape":"MetricReferences",
           "documentation":"<p>An array of structures that each contain information about one metric associated with this service.</p>"
+        },
+        "ServiceGroups":{
+          "shape":"ServiceGroups",
+          "documentation":"<p>An array of service groups that this service belongs to, providing a summary view of the service's organizational context.</p>"
         }
       },
       "documentation":"<p>This structure contains information about one of your services that was discovered by Application Signals</p>"
     },
+    "Severity":{
+      "type":"string",
+      "enum":[
+        "CRITICAL",
+        "HIGH",
+        "MEDIUM",
+        "LOW",
+        "NONE"
+      ]
+    },
     "StandardUnit":{
       "type":"string",
       "enum":[
@@ -1830,13 +2935,11 @@
     },
     "StartDiscoveryInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartDiscoveryOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Stat":{"type":"string"},
     "String":{"type":"string"},
@@ -1894,8 +2997,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1943,8 +3045,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateServiceLevelObjectiveInput":{
       "type":"structure",
@@ -2004,6 +3105,24 @@
     "WarningThreshold":{
       "type":"double",
       "box":true
+    },
+    "Window":{
+      "type":"structure",
+      "required":[
+        "DurationUnit",
+        "Duration"
+      ],
+      "members":{
+        "DurationUnit":{
+          "shape":"DurationUnit",
+          "documentation":"<p>The unit of time for the exclusion window duration. Valid values: MINUTE, HOUR, DAY, MONTH.</p>"
+        },
+        "Duration":{
+          "shape":"ExclusionDuration",
+          "documentation":"<p>The number of time units for the exclusion window length.</p>"
+        }
+      },
+      "documentation":"<p>The object that defines the time length of an exclusion window.</p>"
     }
   },
   "documentation":"<p>Use CloudWatch Application Signals for comprehensive observability of your cloud-based applications. It enables real-time service health dashboards and helps you track long-term performance trends against your business goals. The application-centric view provides you with unified visibility across your applications, services, and dependencies, so you can proactively monitor and efficiently triage any issues that may arise, ensuring optimal customer experience.</p> <p>Application Signals provides the following benefits:</p> <ul> <li> <p>Automatically collect metrics and traces from your applications, and display key metrics such as call volume, availability, latency, faults, and errors. </p> </li> <li> <p>Create and monitor service level objectives (SLOs). </p> </li> <li> <p>See a map of your application topology that Application Signals automatically discovers, that gives you a visual representation of your applications, dependencies, and their connectivity.</p> </li> </ul> <p>Application Signals works with CloudWatch RUM, CloudWatch Synthetics canaries, and Amazon Web Services Service Catalog AppRegistry, to display your client pages, Synthetics canaries, and application names within dashboards and maps.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/service-2.json 2.31.35-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/applicationcostprofiler/2020-09-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"application-cost-profiler",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS Application Cost Profiler",
     "serviceId":"ApplicationCostProfiler",
     "signatureVersion":"v4",
     "signingName":"application-cost-profiler",
-    "uid":"AWSApplicationCostProfiler-2020-09-10"
+    "uid":"AWSApplicationCostProfiler-2020-09-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DeleteReportDefinition":{
diff -pruN 2.23.6-1/awscli/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appmesh/2019-01-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apprunner/2020-05-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/apprunner/2020-05-15/service-2.json 2.31.35-1/awscli/botocore/data/apprunner/2020-05-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/apprunner/2020-05-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apprunner/2020-05-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"apprunner",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS App Runner",
     "serviceId":"AppRunner",
     "signatureVersion":"v4",
     "signingName":"apprunner",
     "targetPrefix":"AppRunner",
-    "uid":"apprunner-2020-05-15"
+    "uid":"apprunner-2020-05-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateCustomDomain":{
@@ -1129,7 +1131,7 @@
         },
         "Subnets":{
           "shape":"StringList",
-          "documentation":"<p>A list of IDs of subnets that App Runner should use when it associates your service with a custom Amazon VPC. Specify IDs of subnets of a single Amazon VPC. App Runner determines the Amazon VPC from the subnets you specify.</p> <note> <p> App Runner currently only provides support for IPv4. </p> </note>"
+          "documentation":"<p>A list of IDs of subnets that App Runner should use when it associates your service with a custom Amazon VPC. Specify IDs of subnets of a single Amazon VPC. App Runner determines the Amazon VPC from the subnets you specify.</p> <note> <p> App Runner only supports subnets of IP address type <i>IPv4</i> and <i>dual stack</i> (IPv4 and IPv6).</p> </note>"
         },
         "SecurityGroups":{
           "shape":"StringList",
@@ -2122,7 +2124,7 @@
         },
         "IpAddressType":{
           "shape":"IpAddressType",
-          "documentation":"<p>App Runner provides you with the option to choose between <i>Internet Protocol version 4 (IPv4)</i> and <i>dual stack</i> (IPv4 and IPv6) for your incoming public network configuration. This is an optional parameter. If you do not specify an <code>IpAddressType</code>, it defaults to select IPv4.</p> <note> <p> Currently, App Runner supports dual stack for only Public endpoint. Only IPv4 is supported for Private endpoint. If you update a service that's using dual-stack Public endpoint to a Private endpoint, your App Runner service will default to support only IPv4 for Private endpoint and fail to receive traffic originating from IPv6 endpoint. </p> </note>"
+          "documentation":"<p>App Runner provides you with the option to choose between <i>IPv4</i> and <i>dual stack</i> (IPv4 and IPv6). This is an optional parameter. If you do not specify an <code>IpAddressType</code>, it defaults to select IPv4.</p>"
         }
       },
       "documentation":"<p>Describes configuration settings related to network traffic of an App Runner service. Consists of embedded objects for each configurable network feature.</p>"
@@ -2351,7 +2353,8 @@
         "PHP_81",
         "RUBY_31",
         "PYTHON_311",
-        "NODEJS_18"
+        "NODEJS_18",
+        "NODEJS_22"
       ]
     },
     "RuntimeEnvironmentSecrets":{
@@ -2693,8 +2696,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2743,8 +2745,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDefaultAutoScalingConfigurationRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appstream/2016-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appstream/2016-12-01/service-2.json 2.31.35-1/awscli/botocore/data/appstream/2016-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/appstream/2016-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appstream/2016-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -84,6 +84,23 @@
       ],
       "documentation":"<p>Associates the specified fleet with the specified stack.</p>"
     },
+    "AssociateSoftwareToImageBuilder":{
+      "name":"AssociateSoftwareToImageBuilder",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateSoftwareToImageBuilderRequest"},
+      "output":{"shape":"AssociateSoftwareToImageBuilderResult"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"IncompatibleImageException"},
+        {"shape":"InvalidParameterCombinationException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Associates license included application(s) with an existing image builder instance.</p>"
+    },
     "BatchAssociateUserStack":{
       "name":"BatchAssociateUserStack",
       "http":{
@@ -636,6 +653,21 @@
       ],
       "documentation":"<p>Retrieves a list that describes one or more app blocks.</p>"
     },
+    "DescribeAppLicenseUsage":{
+      "name":"DescribeAppLicenseUsage",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeAppLicenseUsageRequest"},
+      "output":{"shape":"DescribeAppLicenseUsageResult"},
+      "errors":[
+        {"shape":"InvalidParameterCombinationException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves license included application usage information.</p>"
+    },
     "DescribeApplicationFleetAssociations":{
       "name":"DescribeApplicationFleetAssociations",
       "http":{
@@ -758,6 +790,20 @@
       ],
       "documentation":"<p>Retrieves a list that describes the streaming sessions for a specified stack and fleet. If a UserId is provided for the stack and fleet, only streaming sessions for that user are described. If an authentication type is not provided, the default is to authenticate users using a streaming URL.</p>"
     },
+    "DescribeSoftwareAssociations":{
+      "name":"DescribeSoftwareAssociations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeSoftwareAssociationsRequest"},
+      "output":{"shape":"DescribeSoftwareAssociationsResult"},
+      "errors":[
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves license included application associations for a specified resource.</p>"
+    },
     "DescribeStacks":{
       "name":"DescribeStacks",
       "http":{
@@ -904,6 +950,22 @@
       ],
       "documentation":"<p>Disassociates the specified fleet from the specified stack.</p>"
     },
+    "DisassociateSoftwareFromImageBuilder":{
+      "name":"DisassociateSoftwareFromImageBuilder",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateSoftwareFromImageBuilderRequest"},
+      "output":{"shape":"DisassociateSoftwareFromImageBuilderResult"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"InvalidParameterCombinationException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Removes license included application(s) association(s) from an image builder instance.</p>"
+    },
     "EnableUser":{
       "name":"EnableUser",
       "http":{
@@ -1032,6 +1094,21 @@
       ],
       "documentation":"<p>Starts the specified image builder.</p>"
     },
+    "StartSoftwareDeploymentToImageBuilder":{
+      "name":"StartSoftwareDeploymentToImageBuilder",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartSoftwareDeploymentToImageBuilderRequest"},
+      "output":{"shape":"StartSoftwareDeploymentToImageBuilderResult"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Initiates license included applications deployment to an image builder instance.</p>"
+    },
     "StopAppBlockBuilder":{
       "name":"StopAppBlockBuilder",
       "http":{
@@ -1154,7 +1231,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConcurrentModificationException"},
         {"shape":"OperationNotPermittedException"},
-        {"shape":"InvalidRoleException"}
+        {"shape":"InvalidRoleException"},
+        {"shape":"IncompatibleImageException"}
       ],
       "documentation":"<p>Updates the specified Directory Config object in AppStream 2.0. This object includes the configuration information required to join fleets and image builders to Microsoft Active Directory domains.</p>"
     },
@@ -1302,6 +1380,53 @@
         "AUTO_TIME_ZONE_REDIRECTION"
       ]
     },
+    "AdminAppLicenseUsageList":{
+      "type":"list",
+      "member":{"shape":"AdminAppLicenseUsageRecord"}
+    },
+    "AdminAppLicenseUsageRecord":{
+      "type":"structure",
+      "required":[
+        "UserArn",
+        "BillingPeriod",
+        "OwnerAWSAccountId",
+        "SubscriptionFirstUsedDate",
+        "SubscriptionLastUsedDate",
+        "LicenseType",
+        "UserId"
+      ],
+      "members":{
+        "UserArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the user who used the license-included application.</p>"
+        },
+        "BillingPeriod":{
+          "shape":"String",
+          "documentation":"<p>The billing period for the license usage record.</p>"
+        },
+        "OwnerAWSAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The account ID of the owner of the license.</p>"
+        },
+        "SubscriptionFirstUsedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the license was first used.</p>"
+        },
+        "SubscriptionLastUsedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the license was last used.</p>"
+        },
+        "LicenseType":{
+          "shape":"String",
+          "documentation":"<p>The type of license (for example, Microsoft Office).</p>"
+        },
+        "UserId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the user who used the license-included application.</p>"
+        }
+      },
+      "documentation":"<p>The collection of license usage records.</p>"
+    },
     "AppBlock":{
       "type":"structure",
       "required":[
@@ -1743,8 +1868,7 @@
     },
     "AssociateApplicationToEntitlementResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateFleetRequest":{
       "type":"structure",
@@ -1765,9 +1889,29 @@
     },
     "AssociateFleetResult":{
       "type":"structure",
+      "members":{}
+    },
+    "AssociateSoftwareToImageBuilderRequest":{
+      "type":"structure",
+      "required":[
+        "ImageBuilderName",
+        "SoftwareNames"
+      ],
       "members":{
+        "ImageBuilderName":{
+          "shape":"Name",
+          "documentation":"<p>The name of the target image builder instance.</p>"
+        },
+        "SoftwareNames":{
+          "shape":"StringList",
+          "documentation":"<p>The list of license included applications to associate with the image builder.</p> <p>Possible values include the following:</p> <ul> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_64Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_64Bit</p> </li> </ul>"
+        }
       }
     },
+    "AssociateSoftwareToImageBuilderResult":{
+      "type":"structure",
+      "members":{}
+    },
     "AuthenticationType":{
       "type":"string",
       "enum":[
@@ -2237,7 +2381,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> </ul> <p>The following instance types are available for Elastic fleets:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> </ul>"
+          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> <li> <p>stream.graphics.g6.xlarge</p> </li> <li> <p>stream.graphics.g6.2xlarge</p> </li> <li> <p>stream.graphics.g6.4xlarge</p> </li> <li> <p>stream.graphics.g6.8xlarge</p> </li> <li> <p>stream.graphics.g6.16xlarge</p> </li> <li> <p>stream.graphics.g6.12xlarge</p> </li> <li> <p>stream.graphics.g6.24xlarge</p> </li> <li> <p>stream.graphics.gr6.4xlarge</p> </li> <li> <p>stream.graphics.gr6.8xlarge</p> </li> <li> <p>stream.graphics.g6f.large</p> </li> <li> <p>stream.graphics.g6f.xlarge</p> </li> <li> <p>stream.graphics.g6f.2xlarge</p> </li> <li> <p>stream.graphics.g6f.4xlarge</p> </li> <li> <p>stream.graphics.gr6f.4xlarge</p> </li> </ul> <p>The following instance types are available for Elastic fleets:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> </ul>"
         },
         "FleetType":{
           "shape":"FleetType",
@@ -2343,7 +2487,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type to use when launching the image builder. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> </ul>"
+          "documentation":"<p>The instance type to use when launching the image builder. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics.g6.xlarge</p> </li> <li> <p>stream.graphics.g6.2xlarge</p> </li> <li> <p>stream.graphics.g6.4xlarge</p> </li> <li> <p>stream.graphics.g6.8xlarge</p> </li> <li> <p>stream.graphics.g6.16xlarge</p> </li> <li> <p>stream.graphics.g6.12xlarge</p> </li> <li> <p>stream.graphics.g6.24xlarge</p> </li> <li> <p>stream.graphics.gr6.4xlarge</p> </li> <li> <p>stream.graphics.gr6.8xlarge</p> </li> <li> <p>stream.graphics.g6f.large</p> </li> <li> <p>stream.graphics.g6f.xlarge</p> </li> <li> <p>stream.graphics.g6f.2xlarge</p> </li> <li> <p>stream.graphics.g6f.4xlarge</p> </li> <li> <p>stream.graphics.gr6f.4xlarge</p> </li> </ul>"
         },
         "Description":{
           "shape":"Description",
@@ -2380,6 +2524,14 @@
         "AccessEndpoints":{
           "shape":"AccessEndpointList",
           "documentation":"<p>The list of interface VPC endpoint (interface endpoint) objects. Administrators can connect to the image builder only through the specified endpoints.</p>"
+        },
+        "SoftwaresToInstall":{
+          "shape":"StringList",
+          "documentation":"<p>The list of license included applications to install on the image builder during creation.</p> <p>Possible values include the following:</p> <ul> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_64Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_64Bit</p> </li> </ul>"
+        },
+        "SoftwaresToUninstall":{
+          "shape":"StringList",
+          "documentation":"<p>The list of license included applications to uninstall from the image builder during creation.</p> <p>Possible values include the following:</p> <ul> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_64Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_64Bit</p> </li> </ul>"
         }
       }
     },
@@ -2619,8 +2771,7 @@
     },
     "CreateUsageReportSubscriptionRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateUsageReportSubscriptionResult":{
       "type":"structure",
@@ -2666,8 +2817,7 @@
     },
     "CreateUserResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAppBlockBuilderRequest":{
       "type":"structure",
@@ -2681,8 +2831,7 @@
     },
     "DeleteAppBlockBuilderResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAppBlockRequest":{
       "type":"structure",
@@ -2696,8 +2845,7 @@
     },
     "DeleteAppBlockResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationRequest":{
       "type":"structure",
@@ -2711,8 +2859,7 @@
     },
     "DeleteApplicationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDirectoryConfigRequest":{
       "type":"structure",
@@ -2726,8 +2873,7 @@
     },
     "DeleteDirectoryConfigResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEntitlementRequest":{
       "type":"structure",
@@ -2748,8 +2894,7 @@
     },
     "DeleteEntitlementResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFleetRequest":{
       "type":"structure",
@@ -2763,8 +2908,7 @@
     },
     "DeleteFleetResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImageBuilderRequest":{
       "type":"structure",
@@ -2804,8 +2948,7 @@
     },
     "DeleteImagePermissionsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImageRequest":{
       "type":"structure",
@@ -2838,8 +2981,7 @@
     },
     "DeleteStackResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteThemeForStackRequest":{
       "type":"structure",
@@ -2853,18 +2995,15 @@
     },
     "DeleteThemeForStackResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUsageReportSubscriptionRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUsageReportSubscriptionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserRequest":{
       "type":"structure",
@@ -2885,8 +3024,7 @@
     },
     "DeleteUserResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAppBlockBuilderAppBlockAssociationsRequest":{
       "type":"structure",
@@ -2982,6 +3120,37 @@
         }
       }
     },
+    "DescribeAppLicenseUsageRequest":{
+      "type":"structure",
+      "required":["BillingPeriod"],
+      "members":{
+        "BillingPeriod":{
+          "shape":"String",
+          "documentation":"<p>Billing period for the usage record.</p> <p>Specify the value in <i>yyyy-mm</i> format. For example, for August 2025, use <i>2025-08</i>.</p>"
+        },
+        "MaxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results to return.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>Token for pagination of results.</p>"
+        }
+      }
+    },
+    "DescribeAppLicenseUsageResult":{
+      "type":"structure",
+      "members":{
+        "AppLicenseUsages":{
+          "shape":"AdminAppLicenseUsageList",
+          "documentation":"<p>Collection of license usage records.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>Token for pagination of results.</p>"
+        }
+      }
+    },
     "DescribeApplicationFleetAssociationsRequest":{
       "type":"structure",
       "members":{
@@ -3300,6 +3469,41 @@
         }
       }
     },
+    "DescribeSoftwareAssociationsRequest":{
+      "type":"structure",
+      "required":["AssociatedResource"],
+      "members":{
+        "AssociatedResource":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the resource to describe software associations. Possible resources are Image and ImageBuilder.</p>"
+        },
+        "MaxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results to return.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token to use to retrieve the next page of results for this operation.</p>"
+        }
+      }
+    },
+    "DescribeSoftwareAssociationsResult":{
+      "type":"structure",
+      "members":{
+        "AssociatedResource":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the resource to describe software associations.</p>"
+        },
+        "SoftwareAssociations":{
+          "shape":"SoftwareAssociationsList",
+          "documentation":"<p>Collection of license included applications association details including:</p> <ul> <li> <p>License included application name and version information</p> </li> <li> <p>Deployment status (SoftwareDeploymentStatus enum)</p> </li> <li> <p>Error details for failed deployments</p> </li> <li> <p>Association timestamps</p> </li> </ul>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token to use to retrieve the next page of results for this operation.</p>"
+        }
+      }
+    },
     "DescribeStacksRequest":{
       "type":"structure",
       "members":{
@@ -3499,8 +3703,7 @@
     },
     "DisableUserResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateAppBlockBuilderAppBlockRequest":{
       "type":"structure",
@@ -3521,8 +3724,7 @@
     },
     "DisassociateAppBlockBuilderAppBlockResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateApplicationFleetRequest":{
       "type":"structure",
@@ -3543,8 +3745,7 @@
     },
     "DisassociateApplicationFleetResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateApplicationFromEntitlementRequest":{
       "type":"structure",
@@ -3570,8 +3771,7 @@
     },
     "DisassociateApplicationFromEntitlementResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFleetRequest":{
       "type":"structure",
@@ -3592,9 +3792,29 @@
     },
     "DisassociateFleetResult":{
       "type":"structure",
+      "members":{}
+    },
+    "DisassociateSoftwareFromImageBuilderRequest":{
+      "type":"structure",
+      "required":[
+        "ImageBuilderName",
+        "SoftwareNames"
+      ],
       "members":{
+        "ImageBuilderName":{
+          "shape":"Name",
+          "documentation":"<p>The name of the target image builder instance.</p>"
+        },
+        "SoftwareNames":{
+          "shape":"StringList",
+          "documentation":"<p>The list of license included applications to disassociate from the image builder.</p> <p>Possible values include the following:</p> <ul> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_64Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_64Bit</p> </li> </ul>"
+        }
       }
     },
+    "DisassociateSoftwareFromImageBuilderResult":{
+      "type":"structure",
+      "members":{}
+    },
     "DisplayName":{
       "type":"string",
       "max":100
@@ -3662,8 +3882,7 @@
     },
     "EnableUserResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EntitledApplication":{
       "type":"structure",
@@ -3797,8 +4016,7 @@
     },
     "ExpireSessionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "FeedbackURL":{
       "type":"string",
@@ -3840,7 +4058,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> </ul>"
+          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics.g6.xlarge</p> </li> <li> <p>stream.graphics.g6.2xlarge</p> </li> <li> <p>stream.graphics.g6.4xlarge</p> </li> <li> <p>stream.graphics.g6.8xlarge</p> </li> <li> <p>stream.graphics.g6.16xlarge</p> </li> <li> <p>stream.graphics.g6.12xlarge</p> </li> <li> <p>stream.graphics.g6.24xlarge</p> </li> <li> <p>stream.graphics.gr6.4xlarge</p> </li> <li> <p>stream.graphics.gr6.8xlarge</p> </li> <li> <p>stream.graphics.g6f.large</p> </li> <li> <p>stream.graphics.g6f.xlarge</p> </li> <li> <p>stream.graphics.g6f.2xlarge</p> </li> <li> <p>stream.graphics.g6f.4xlarge</p> </li> <li> <p>stream.graphics.gr6f.4xlarge</p> </li> </ul>"
         },
         "FleetType":{
           "shape":"FleetType",
@@ -4044,7 +4262,7 @@
         },
         "ImageBuilderName":{
           "shape":"String",
-          "documentation":"<p>The name of the image builder that was used to create the private image. If the image is shared, this value is null.</p>"
+          "documentation":"<p>The name of the image builder that was used to create the private image. If the image is shared, copied, or updated by using Managed Image Updates, this value is null.</p>"
         },
         "Platform":{
           "shape":"PlatformType",
@@ -4097,6 +4315,10 @@
         "ImageSharedWithOthers":{
           "shape":"ImageSharedWithOthers",
           "documentation":"<p>Indicates whether the image is shared with another account ID.</p>"
+        },
+        "ManagedSoftwareIncluded":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the image includes license-included applications.</p>"
         }
       },
       "documentation":"<p>Describes an image.</p>"
@@ -4131,7 +4353,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type for the image builder. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> </ul>"
+          "documentation":"<p>The instance type for the image builder. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics.g6.xlarge</p> </li> <li> <p>stream.graphics.g6.2xlarge</p> </li> <li> <p>stream.graphics.g6.4xlarge</p> </li> <li> <p>stream.graphics.g6.8xlarge</p> </li> <li> <p>stream.graphics.g6.16xlarge</p> </li> <li> <p>stream.graphics.g6.12xlarge</p> </li> <li> <p>stream.graphics.g6.24xlarge</p> </li> <li> <p>stream.graphics.gr6.4xlarge</p> </li> <li> <p>stream.graphics.gr6.8xlarge</p> </li> <li> <p>stream.graphics.g6f.large</p> </li> <li> <p>stream.graphics.g6f.xlarge</p> </li> <li> <p>stream.graphics.g6f.2xlarge</p> </li> <li> <p>stream.graphics.g6f.4xlarge</p> </li> <li> <p>stream.graphics.gr6f.4xlarge</p> </li> </ul>"
         },
         "Platform":{
           "shape":"PlatformType",
@@ -4198,7 +4420,9 @@
         "DELETING",
         "FAILED",
         "UPDATING",
-        "PENDING_QUALIFICATION"
+        "PENDING_QUALIFICATION",
+        "PENDING_SYNCING_APPS",
+        "SYNCING_APPS"
       ]
     },
     "ImageBuilderStateChangeReason":{
@@ -4488,6 +4712,10 @@
           "shape":"String",
           "documentation":"<p>The private IP address of the elastic network interface that is attached to instances in your VPC.</p>"
         },
+        "EniIpv6Addresses":{
+          "shape":"StringList",
+          "documentation":"<p>The IPv6 addresses of the elastic network interface that is attached to instances in your VPC.</p>"
+        },
         "EniId":{
           "shape":"String",
           "documentation":"<p>The resource identifier of the elastic network interface that is attached to instances in your VPC. All network interfaces have the eni-xxxxxxxx resource identifier.</p>"
@@ -4807,6 +5035,40 @@
       "type":"list",
       "member":{"shape":"SharedImagePermissions"}
     },
+    "SoftwareAssociations":{
+      "type":"structure",
+      "members":{
+        "SoftwareName":{
+          "shape":"String",
+          "documentation":"<p>The name of the license-included application.</p> <p>Possible values include the following:</p> <ul> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Professional_Plus_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Professional_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Professional_64Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Office_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2021_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_32Bit</p> </li> <li> <p>Microsoft_Visio_2024_LTSC_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2021_Standard_64Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_32Bit</p> </li> <li> <p>Microsoft_Project_2024_Standard_64Bit</p> </li> </ul>"
+        },
+        "Status":{
+          "shape":"SoftwareDeploymentStatus",
+          "documentation":"<p>The deployment status of the license-included application.</p>"
+        },
+        "DeploymentError":{
+          "shape":"ErrorDetailsList",
+          "documentation":"<p>The error details for failed deployments of the license-included application.</p>"
+        }
+      },
+      "documentation":"<p>The association between a license-included application and a resource.</p>"
+    },
+    "SoftwareAssociationsList":{
+      "type":"list",
+      "member":{"shape":"SoftwareAssociations"}
+    },
+    "SoftwareDeploymentStatus":{
+      "type":"string",
+      "enum":[
+        "STAGED_FOR_INSTALLATION",
+        "PENDING_INSTALLATION",
+        "INSTALLED",
+        "STAGED_FOR_UNINSTALLATION",
+        "PENDING_UNINSTALLATION",
+        "FAILED_TO_INSTALL",
+        "FAILED_TO_UNINSTALL"
+      ]
+    },
     "Stack":{
       "type":"structure",
       "required":["Name"],
@@ -4950,8 +5212,7 @@
     },
     "StartFleetResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartImageBuilderRequest":{
       "type":"structure",
@@ -4976,6 +5237,24 @@
         }
       }
     },
+    "StartSoftwareDeploymentToImageBuilderRequest":{
+      "type":"structure",
+      "required":["ImageBuilderName"],
+      "members":{
+        "ImageBuilderName":{
+          "shape":"Name",
+          "documentation":"<p>The name of the target image builder instance.</p>"
+        },
+        "RetryFailedDeployments":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to retry previously failed license included application deployments.</p>"
+        }
+      }
+    },
+    "StartSoftwareDeploymentToImageBuilderResult":{
+      "type":"structure",
+      "members":{}
+    },
     "StopAppBlockBuilderRequest":{
       "type":"structure",
       "required":["Name"],
@@ -5004,8 +5283,7 @@
     },
     "StopFleetResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopImageBuilderRequest":{
       "type":"structure",
@@ -5041,6 +5319,10 @@
         "Domains":{
           "shape":"DomainList",
           "documentation":"<p>The names of the domains for the account.</p>"
+        },
+        "DomainsRequireAdminConsent":{
+          "shape":"DomainList",
+          "documentation":"<p>The OneDrive for Business domains where you require admin consent when users try to link their OneDrive account to AppStream 2.0. The attribute can only be specified when ConnectorType=ONE_DRIVE.</p>"
         }
       },
       "documentation":"<p>Describes a connector that enables persistent storage for users.</p>"
@@ -5126,8 +5408,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5259,8 +5540,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAppBlockBuilderRequest":{
       "type":"structure",
@@ -5448,7 +5728,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> </ul> <p>The following instance types are available for Elastic fleets:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> </ul>"
+          "documentation":"<p>The instance type to use when launching fleet instances. The following instance types are available:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> <li> <p>stream.compute.large</p> </li> <li> <p>stream.compute.xlarge</p> </li> <li> <p>stream.compute.2xlarge</p> </li> <li> <p>stream.compute.4xlarge</p> </li> <li> <p>stream.compute.8xlarge</p> </li> <li> <p>stream.memory.large</p> </li> <li> <p>stream.memory.xlarge</p> </li> <li> <p>stream.memory.2xlarge</p> </li> <li> <p>stream.memory.4xlarge</p> </li> <li> <p>stream.memory.8xlarge</p> </li> <li> <p>stream.memory.z1d.large</p> </li> <li> <p>stream.memory.z1d.xlarge</p> </li> <li> <p>stream.memory.z1d.2xlarge</p> </li> <li> <p>stream.memory.z1d.3xlarge</p> </li> <li> <p>stream.memory.z1d.6xlarge</p> </li> <li> <p>stream.memory.z1d.12xlarge</p> </li> <li> <p>stream.graphics-design.large</p> </li> <li> <p>stream.graphics-design.xlarge</p> </li> <li> <p>stream.graphics-design.2xlarge</p> </li> <li> <p>stream.graphics-design.4xlarge</p> </li> <li> <p>stream.graphics-desktop.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.xlarge</p> </li> <li> <p>stream.graphics.g4dn.2xlarge</p> </li> <li> <p>stream.graphics.g4dn.4xlarge</p> </li> <li> <p>stream.graphics.g4dn.8xlarge</p> </li> <li> <p>stream.graphics.g4dn.12xlarge</p> </li> <li> <p>stream.graphics.g4dn.16xlarge</p> </li> <li> <p>stream.graphics-pro.4xlarge</p> </li> <li> <p>stream.graphics-pro.8xlarge</p> </li> <li> <p>stream.graphics-pro.16xlarge</p> </li> <li> <p>stream.graphics.g5.xlarge</p> </li> <li> <p>stream.graphics.g5.2xlarge</p> </li> <li> <p>stream.graphics.g5.4xlarge</p> </li> <li> <p>stream.graphics.g5.8xlarge</p> </li> <li> <p>stream.graphics.g5.16xlarge</p> </li> <li> <p>stream.graphics.g5.12xlarge</p> </li> <li> <p>stream.graphics.g5.24xlarge</p> </li> <li> <p>stream.graphics.g6.xlarge</p> </li> <li> <p>stream.graphics.g6.2xlarge</p> </li> <li> <p>stream.graphics.g6.4xlarge</p> </li> <li> <p>stream.graphics.g6.8xlarge</p> </li> <li> <p>stream.graphics.g6.16xlarge</p> </li> <li> <p>stream.graphics.g6.12xlarge</p> </li> <li> <p>stream.graphics.g6.24xlarge</p> </li> <li> <p>stream.graphics.gr6.4xlarge</p> </li> <li> <p>stream.graphics.gr6.8xlarge</p> </li> <li> <p>stream.graphics.g6f.large</p> </li> <li> <p>stream.graphics.g6f.xlarge</p> </li> <li> <p>stream.graphics.g6f.2xlarge</p> </li> <li> <p>stream.graphics.g6f.4xlarge</p> </li> <li> <p>stream.graphics.gr6f.4xlarge</p> </li> </ul> <p>The following instance types are available for Elastic fleets:</p> <ul> <li> <p>stream.standard.small</p> </li> <li> <p>stream.standard.medium</p> </li> <li> <p>stream.standard.large</p> </li> <li> <p>stream.standard.xlarge</p> </li> <li> <p>stream.standard.2xlarge</p> </li> </ul>"
         },
         "ComputeCapacity":{
           "shape":"ComputeCapacity",
@@ -5558,8 +5838,7 @@
     },
     "UpdateImagePermissionsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStackRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appsync/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/appsync/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/appsync/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/appsync/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/appsync/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1372,7 +1372,7 @@
         },
         "apiCachingBehavior":{
           "shape":"ApiCachingBehavior",
-          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests are fully cached.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> </ul>"
+          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests from the same user are cached. Individual resolvers are automatically cached. All API calls will try to return responses from the cache.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> <li> <p> <b>OPERATION_LEVEL_CACHING</b>: Full requests are cached together and returned without executing resolvers.</p> </li> </ul>"
         },
         "transitEncryptionEnabled":{
           "shape":"Boolean",
@@ -1431,7 +1431,8 @@
       "type":"string",
       "enum":[
         "FULL_REQUEST_CACHING",
-        "PER_RESOLVER_CACHING"
+        "PER_RESOLVER_CACHING",
+        "OPERATION_LEVEL_CACHING"
       ]
     },
     "ApiKey":{
@@ -1798,6 +1799,10 @@
         "lastModified":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the <code>ChannelNamespace</code> was last changed.</p>"
+        },
+        "handlerConfigs":{
+          "shape":"HandlerConfigs",
+          "documentation":"<p>The configuration for the <code>OnPublish</code> and <code>OnSubscribe</code> handlers.</p>"
         }
       },
       "documentation":"<p>Describes a channel namespace associated with an <code>Api</code>. The <code>ChannelNamespace</code> contains the definitions for code handlers for the <code>Api</code>.</p>"
@@ -1959,15 +1964,21 @@
         },
         "transitEncryptionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Transit encryption flag when connecting to cache. You cannot update this setting after creation.</p>"
+          "documentation":"<p>Transit encryption flag when connecting to cache. You cannot update this setting after creation.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"transitEncryptionEnabled attribute is deprecated. Encryption in transit is always enabled.",
+          "deprecatedSince":"5/15/2025"
         },
         "atRestEncryptionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>At-rest encryption flag for cache. You cannot update this setting after creation.</p>"
+          "documentation":"<p>At-rest encryption flag for cache. You cannot update this setting after creation.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"atRestEncryptionEnabled attribute is deprecated. Encryption at rest is always enabled.",
+          "deprecatedSince":"5/15/2025"
         },
         "apiCachingBehavior":{
           "shape":"ApiCachingBehavior",
-          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests are fully cached.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> </ul>"
+          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests from the same user are cached. Individual resolvers are automatically cached. All API calls will try to return responses from the cache.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> <li> <p> <b>OPERATION_LEVEL_CACHING</b>: Full requests are cached together and returned without executing resolvers.</p> </li> </ul>"
         },
         "type":{
           "shape":"ApiCacheType",
@@ -2076,7 +2087,11 @@
           "shape":"Code",
           "documentation":"<p>The event handler functions that run custom business logic to process published events and subscribe requests.</p>"
         },
-        "tags":{"shape":"TagMap"}
+        "tags":{"shape":"TagMap"},
+        "handlerConfigs":{
+          "shape":"HandlerConfigs",
+          "documentation":"<p>The configuration for the <code>OnPublish</code> and <code>OnSubscribe</code> handlers.</p>"
+        }
       }
     },
     "CreateChannelNamespaceResponse":{
@@ -2179,7 +2194,8 @@
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the <code>DomainName</code>.</p>"
-        }
+        },
+        "tags":{"shape":"TagMap"}
       }
     },
     "CreateDomainNameResponse":{
@@ -2680,8 +2696,7 @@
     },
     "DeleteApiCacheResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <code>DeleteApiCache</code> operation.</p>"
     },
     "DeleteApiKeyRequest":{
@@ -2707,8 +2722,7 @@
     },
     "DeleteApiKeyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApiRequest":{
       "type":"structure",
@@ -2724,8 +2738,7 @@
     },
     "DeleteApiResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteChannelNamespaceRequest":{
       "type":"structure",
@@ -2750,8 +2763,7 @@
     },
     "DeleteChannelNamespaceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataSourceRequest":{
       "type":"structure",
@@ -2776,8 +2788,7 @@
     },
     "DeleteDataSourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDomainNameRequest":{
       "type":"structure",
@@ -2793,8 +2804,7 @@
     },
     "DeleteDomainNameResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFunctionRequest":{
       "type":"structure",
@@ -2819,8 +2829,7 @@
     },
     "DeleteFunctionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGraphqlApiRequest":{
       "type":"structure",
@@ -2836,8 +2845,7 @@
     },
     "DeleteGraphqlApiResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResolverRequest":{
       "type":"structure",
@@ -2869,8 +2877,7 @@
     },
     "DeleteResolverResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTypeRequest":{
       "type":"structure",
@@ -2895,8 +2902,7 @@
     },
     "DeleteTypeResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeltaSyncConfig":{
       "type":"structure",
@@ -2936,8 +2942,7 @@
     },
     "DisassociateApiResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateMergedGraphqlApiRequest":{
       "type":"structure",
@@ -3027,6 +3032,11 @@
         "hostedZoneId":{
           "shape":"String",
           "documentation":"<p>The ID of your Amazon Route 53 hosted zone.</p>"
+        },
+        "tags":{"shape":"TagMap"},
+        "domainNameArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the domain name.</p>"
         }
       },
       "documentation":"<p>Describes a configuration for a custom domain.</p>"
@@ -3189,6 +3199,14 @@
         "logs":{
           "shape":"Logs",
           "documentation":"<p>A list of logs that were generated by calls to <code>util.log.info</code> and <code>util.log.error</code> in the evaluated code.</p>"
+        },
+        "stash":{
+          "shape":"Stash",
+          "documentation":"<p>An object available inside each resolver and function handler. A single <code>stash</code> object lives through a single resolver run. Therefore, you can use the stash to pass arbitrary data across request and response handlers and across functions in a pipeline resolver.</p>"
+        },
+        "outErrors":{
+          "shape":"OutErrors",
+          "documentation":"<p>The list of runtime errors that are added to the GraphQL operation response.</p>"
         }
       }
     },
@@ -3223,6 +3241,14 @@
         "logs":{
           "shape":"Logs",
           "documentation":"<p>A list of logs that were generated by calls to <code>util.log.info</code> and <code>util.log.error</code> in the evaluated code.</p>"
+        },
+        "stash":{
+          "shape":"Stash",
+          "documentation":"<p>An object available inside each resolver and function handler. A single <code>stash</code> object lives through a single resolver run. Therefore, you can use the stash to pass arbitrary data across request and response handlers and across functions in a pipeline resolver.</p>"
+        },
+        "outErrors":{
+          "shape":"OutErrors",
+          "documentation":"<p>The list of runtime errors that are added to the GraphQL operation response.</p>"
         }
       }
     },
@@ -3328,8 +3354,7 @@
     },
     "FlushApiCacheResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <code>FlushApiCache</code> operation.</p>"
     },
     "FunctionConfiguration":{
@@ -3955,6 +3980,45 @@
       "type":"list",
       "member":{"shape":"GraphqlApi"}
     },
+    "HandlerBehavior":{
+      "type":"string",
+      "enum":[
+        "CODE",
+        "DIRECT"
+      ]
+    },
+    "HandlerConfig":{
+      "type":"structure",
+      "required":[
+        "behavior",
+        "integration"
+      ],
+      "members":{
+        "behavior":{
+          "shape":"HandlerBehavior",
+          "documentation":"<p>The behavior for the handler.</p>"
+        },
+        "integration":{
+          "shape":"Integration",
+          "documentation":"<p>The integration data source configuration for the handler.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a handler.</p>"
+    },
+    "HandlerConfigs":{
+      "type":"structure",
+      "members":{
+        "onPublish":{
+          "shape":"HandlerConfig",
+          "documentation":"<p>The configuration for the <code>OnPublish</code> handler.</p>"
+        },
+        "onSubscribe":{
+          "shape":"HandlerConfig",
+          "documentation":"<p>The configuration for the <code>OnSubscribe</code> handler.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the <code>OnPublish</code> and <code>OnSubscribe</code> handlers.</p>"
+    },
     "HttpDataSourceConfig":{
       "type":"structure",
       "members":{
@@ -3969,6 +4033,21 @@
       },
       "documentation":"<p>Describes an HTTP data source configuration.</p>"
     },
+    "Integration":{
+      "type":"structure",
+      "required":["dataSourceName"],
+      "members":{
+        "dataSourceName":{
+          "shape":"String",
+          "documentation":"<p>The unique name of the data source that has been configured on the API.</p>"
+        },
+        "lambdaConfig":{
+          "shape":"LambdaConfig",
+          "documentation":"<p>The configuration for a Lambda data source.</p>"
+        }
+      },
+      "documentation":"<p>The integration data source configuration for the handler.</p>"
+    },
     "InternalFailureException":{
       "type":"structure",
       "members":{
@@ -3979,6 +4058,13 @@
       "exception":true,
       "fault":true
     },
+    "InvokeType":{
+      "type":"string",
+      "enum":[
+        "REQUEST_RESPONSE",
+        "EVENT"
+      ]
+    },
     "LambdaAuthorizerConfig":{
       "type":"structure",
       "required":["authorizerUri"],
@@ -3998,6 +4084,16 @@
       },
       "documentation":"<p>A <code>LambdaAuthorizerConfig</code> specifies how to authorize AppSync API access when using the <code>AWS_LAMBDA</code> authorizer mode. Be aware that an AppSync API can have only one Lambda authorizer configured at a time.</p>"
     },
+    "LambdaConfig":{
+      "type":"structure",
+      "members":{
+        "invokeType":{
+          "shape":"InvokeType",
+          "documentation":"<p>The invocation type for a Lambda data source.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a Lambda data source.</p>"
+    },
     "LambdaConflictHandlerConfig":{
       "type":"structure",
       "members":{
@@ -4645,6 +4741,10 @@
         "DISABLED"
       ]
     },
+    "OutErrors":{
+      "type":"string",
+      "pattern":"^[\\s\\S]*$"
+    },
     "OutputType":{
       "type":"string",
       "enum":[
@@ -5118,6 +5218,10 @@
         }
       }
     },
+    "Stash":{
+      "type":"string",
+      "pattern":"^[\\s\\S]*$"
+    },
     "String":{"type":"string"},
     "SyncConfig":{
       "type":"structure",
@@ -5184,8 +5288,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5269,8 +5372,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApiCacheRequest":{
       "type":"structure",
@@ -5293,7 +5395,7 @@
         },
         "apiCachingBehavior":{
           "shape":"ApiCachingBehavior",
-          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests are fully cached.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> </ul>"
+          "documentation":"<p>Caching behavior.</p> <ul> <li> <p> <b>FULL_REQUEST_CACHING</b>: All requests from the same user are cached. Individual resolvers are automatically cached. All API calls will try to return responses from the cache.</p> </li> <li> <p> <b>PER_RESOLVER_CACHING</b>: Individual resolvers that you specify are cached.</p> </li> <li> <p> <b>OPERATION_LEVEL_CACHING</b>: Full requests are cached together and returned without executing resolvers.</p> </li> </ul>"
         },
         "type":{
           "shape":"ApiCacheType",
@@ -5420,6 +5522,10 @@
         "codeHandlers":{
           "shape":"Code",
           "documentation":"<p>The event handler functions that run custom business logic to process published events and subscribe requests.</p>"
+        },
+        "handlerConfigs":{
+          "shape":"HandlerConfigs",
+          "documentation":"<p>The configuration for the <code>OnPublish</code> and <code>OnSubscribe</code> handlers.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,350 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": {
-                                    "ref": "Endpoint"
-                                },
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "isSet",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ]
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "aws.partition",
-                                    "argv": [
-                                        {
-                                            "ref": "Region"
-                                        }
-                                    ],
-                                    "assign": "PartitionResult"
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://apptest-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                            "type": "error"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        },
-                                                        true
-                                                    ]
-                                                }
-                                            ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://apptest-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "FIPS is enabled but this partition does not support FIPS",
-                                            "type": "error"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://apptest.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "DualStack is enabled but this partition does not support DualStack",
-                                            "type": "error"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://apptest.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                }
-                            ],
-                            "type": "tree"
-                        }
-                    ],
-                    "type": "tree"
-                },
-                {
-                    "conditions": [],
-                    "error": "Invalid Configuration: Missing Region",
-                    "type": "error"
-                }
-            ],
-            "type": "tree"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/paginators-1.json 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-{
-  "pagination": {
-    "ListTestCases": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testCases"
-    },
-    "ListTestConfigurations": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testConfigurations"
-    },
-    "ListTestRunSteps": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testRunSteps"
-    },
-    "ListTestRunTestCases": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testRunTestCases"
-    },
-    "ListTestRuns": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testRuns"
-    },
-    "ListTestSuites": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "testSuites"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/service-2.json 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,3510 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2022-12-06",
-    "auth":["aws.auth#sigv4"],
-    "endpointPrefix":"apptest",
-    "protocol":"rest-json",
-    "protocols":["rest-json"],
-    "serviceFullName":"AWS Mainframe Modernization Application Testing",
-    "serviceId":"AppTest",
-    "signatureVersion":"v4",
-    "signingName":"apptest",
-    "uid":"apptest-2022-12-06"
-  },
-  "operations":{
-    "CreateTestCase":{
-      "name":"CreateTestCase",
-      "http":{
-        "method":"POST",
-        "requestUri":"/testcase",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateTestCaseRequest"},
-      "output":{"shape":"CreateTestCaseResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a test case.</p>",
-      "idempotent":true
-    },
-    "CreateTestConfiguration":{
-      "name":"CreateTestConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/testconfiguration",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateTestConfigurationRequest"},
-      "output":{"shape":"CreateTestConfigurationResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a test configuration.</p>",
-      "idempotent":true
-    },
-    "CreateTestSuite":{
-      "name":"CreateTestSuite",
-      "http":{
-        "method":"POST",
-        "requestUri":"/testsuite",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateTestSuiteRequest"},
-      "output":{"shape":"CreateTestSuiteResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a test suite.</p>",
-      "idempotent":true
-    },
-    "DeleteTestCase":{
-      "name":"DeleteTestCase",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/testcases/{testCaseId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteTestCaseRequest"},
-      "output":{"shape":"DeleteTestCaseResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes a test case.</p>",
-      "idempotent":true
-    },
-    "DeleteTestConfiguration":{
-      "name":"DeleteTestConfiguration",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/testconfigurations/{testConfigurationId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteTestConfigurationRequest"},
-      "output":{"shape":"DeleteTestConfigurationResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes a test configuration.</p>",
-      "idempotent":true
-    },
-    "DeleteTestRun":{
-      "name":"DeleteTestRun",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/testruns/{testRunId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteTestRunRequest"},
-      "output":{"shape":"DeleteTestRunResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes a test run.</p>",
-      "idempotent":true
-    },
-    "DeleteTestSuite":{
-      "name":"DeleteTestSuite",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/testsuites/{testSuiteId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteTestSuiteRequest"},
-      "output":{"shape":"DeleteTestSuiteResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes a test suite.</p>",
-      "idempotent":true
-    },
-    "GetTestCase":{
-      "name":"GetTestCase",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testcases/{testCaseId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetTestCaseRequest"},
-      "output":{"shape":"GetTestCaseResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets a test case.</p>"
-    },
-    "GetTestConfiguration":{
-      "name":"GetTestConfiguration",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testconfigurations/{testConfigurationId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetTestConfigurationRequest"},
-      "output":{"shape":"GetTestConfigurationResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets a test configuration.</p>"
-    },
-    "GetTestRunStep":{
-      "name":"GetTestRunStep",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testruns/{testRunId}/steps/{stepName}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetTestRunStepRequest"},
-      "output":{"shape":"GetTestRunStepResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets a test run step.</p>"
-    },
-    "GetTestSuite":{
-      "name":"GetTestSuite",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testsuites/{testSuiteId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetTestSuiteRequest"},
-      "output":{"shape":"GetTestSuiteResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets a test suite.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists tags for a resource.</p>"
-    },
-    "ListTestCases":{
-      "name":"ListTestCases",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testcases",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestCasesRequest"},
-      "output":{"shape":"ListTestCasesResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test cases.</p>"
-    },
-    "ListTestConfigurations":{
-      "name":"ListTestConfigurations",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testconfigurations",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestConfigurationsRequest"},
-      "output":{"shape":"ListTestConfigurationsResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test configurations.</p>"
-    },
-    "ListTestRunSteps":{
-      "name":"ListTestRunSteps",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testruns/{testRunId}/steps",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestRunStepsRequest"},
-      "output":{"shape":"ListTestRunStepsResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test run steps.</p>"
-    },
-    "ListTestRunTestCases":{
-      "name":"ListTestRunTestCases",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testruns/{testRunId}/testcases",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestRunTestCasesRequest"},
-      "output":{"shape":"ListTestRunTestCasesResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test run test cases.</p>"
-    },
-    "ListTestRuns":{
-      "name":"ListTestRuns",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testruns",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestRunsRequest"},
-      "output":{"shape":"ListTestRunsResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test runs.</p>"
-    },
-    "ListTestSuites":{
-      "name":"ListTestSuites",
-      "http":{
-        "method":"GET",
-        "requestUri":"/testsuites",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTestSuitesRequest"},
-      "output":{"shape":"ListTestSuitesResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists test suites.</p>"
-    },
-    "StartTestRun":{
-      "name":"StartTestRun",
-      "http":{
-        "method":"POST",
-        "requestUri":"/testrun",
-        "responseCode":200
-      },
-      "input":{"shape":"StartTestRunRequest"},
-      "output":{"shape":"StartTestRunResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Starts a test run.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Specifies tags of a resource.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Untags a resource.</p>",
-      "idempotent":true
-    },
-    "UpdateTestCase":{
-      "name":"UpdateTestCase",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/testcases/{testCaseId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateTestCaseRequest"},
-      "output":{"shape":"UpdateTestCaseResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Updates a test case.</p>"
-    },
-    "UpdateTestConfiguration":{
-      "name":"UpdateTestConfiguration",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/testconfigurations/{testConfigurationId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateTestConfigurationRequest"},
-      "output":{"shape":"UpdateTestConfigurationResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Updates a test configuration.</p>"
-    },
-    "UpdateTestSuite":{
-      "name":"UpdateTestSuite",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/testsuites/{testSuiteId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateTestSuiteRequest"},
-      "output":{"shape":"UpdateTestSuiteResponse"},
-      "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Updates a test suite.</p>"
-    }
-  },
-  "shapes":{
-    "AccessDeniedException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p>The account or role doesn't have the right permissions to make the request.</p>",
-      "error":{
-        "httpStatusCode":403,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "Arn":{
-      "type":"string",
-      "pattern":"arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9/][A-Za-z0-9:_/+=,@.-]{0,1023}"
-    },
-    "Batch":{
-      "type":"structure",
-      "required":["batchJobName"],
-      "members":{
-        "batchJobName":{
-          "shape":"Variable",
-          "documentation":"<p>The job name of the batch.</p>"
-        },
-        "batchJobParameters":{
-          "shape":"BatchJobParameters",
-          "documentation":"<p>The batch job parameters of the batch.</p>"
-        },
-        "exportDataSetNames":{
-          "shape":"ExportDataSetNames",
-          "documentation":"<p>The export data set names of the batch.</p>"
-        }
-      },
-      "documentation":"<p>Defines a batch.</p>"
-    },
-    "BatchJobParameters":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"}
-    },
-    "BatchStepInput":{
-      "type":"structure",
-      "required":[
-        "resource",
-        "batchJobName"
-      ],
-      "members":{
-        "resource":{
-          "shape":"MainframeResourceSummary",
-          "documentation":"<p>The resource of the batch step input.</p>"
-        },
-        "batchJobName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The batch job name of the batch step input.</p>"
-        },
-        "batchJobParameters":{
-          "shape":"BatchJobParameters",
-          "documentation":"<p>The batch job parameters of the batch step input.</p>"
-        },
-        "exportDataSetNames":{
-          "shape":"ExportDataSetNames",
-          "documentation":"<p>The export data set names of the batch step input.</p>"
-        },
-        "properties":{
-          "shape":"MainframeActionProperties",
-          "documentation":"<p>The properties of the batch step input.</p>"
-        }
-      },
-      "documentation":"<p>Defines a batch step input.</p>"
-    },
-    "BatchStepOutput":{
-      "type":"structure",
-      "members":{
-        "dataSetExportLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The data set export location of the batch step output.</p>"
-        },
-        "dmsOutputLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The Database Migration Service (DMS) output location of the batch step output.</p>"
-        },
-        "dataSetDetails":{
-          "shape":"DataSetList",
-          "documentation":"<p>The data set details of the batch step output.</p>"
-        }
-      },
-      "documentation":"<p>Defines a batch step output.</p>"
-    },
-    "BatchSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"BatchStepInput",
-          "documentation":"<p>The step input of the batch summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"BatchStepOutput",
-          "documentation":"<p>The step output of the batch summary.</p>"
-        }
-      },
-      "documentation":"<p>Summarizes a batch job.</p>"
-    },
-    "Boolean":{
-      "type":"boolean",
-      "box":true
-    },
-    "CaptureTool":{
-      "type":"string",
-      "enum":[
-        "Precisely",
-        "AWS DMS"
-      ]
-    },
-    "CloudFormation":{
-      "type":"structure",
-      "required":["templateLocation"],
-      "members":{
-        "templateLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The template location of the CloudFormation template.</p>"
-        },
-        "parameters":{
-          "shape":"Properties",
-          "documentation":"<p>The CloudFormation properties in the CloudFormation template.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the CloudFormation template and its parameters.</p>"
-    },
-    "CloudFormationAction":{
-      "type":"structure",
-      "required":["resource"],
-      "members":{
-        "resource":{
-          "shape":"Variable",
-          "documentation":"<p>The resource of the CloudFormation action.</p>"
-        },
-        "actionType":{
-          "shape":"CloudFormationActionType",
-          "documentation":"<p>The action type of the CloudFormation action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the CloudFormation action.</p>"
-    },
-    "CloudFormationActionType":{
-      "type":"string",
-      "enum":[
-        "Create",
-        "Delete"
-      ]
-    },
-    "CloudFormationStepSummary":{
-      "type":"structure",
-      "members":{
-        "createCloudformation":{
-          "shape":"CreateCloudFormationSummary",
-          "documentation":"<p>Creates the CloudFormation summary of the step.</p>"
-        },
-        "deleteCloudformation":{
-          "shape":"DeleteCloudFormationSummary",
-          "documentation":"<p>Deletes the CloudFormation summary of the CloudFormation step summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the CloudFormation step summary.</p>",
-      "union":true
-    },
-    "CompareAction":{
-      "type":"structure",
-      "required":["input"],
-      "members":{
-        "input":{
-          "shape":"Input",
-          "documentation":"<p>The input of the compare action.</p>"
-        },
-        "output":{
-          "shape":"Output",
-          "documentation":"<p>The output of the compare action.</p>"
-        }
-      },
-      "documentation":"<p>Compares the action.</p>"
-    },
-    "CompareActionSummary":{
-      "type":"structure",
-      "required":["type"],
-      "members":{
-        "type":{
-          "shape":"File",
-          "documentation":"<p>The type of the compare action summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the compare action summary.</p>"
-    },
-    "CompareDataSetsStepInput":{
-      "type":"structure",
-      "required":[
-        "sourceLocation",
-        "targetLocation",
-        "sourceDataSets",
-        "targetDataSets"
-      ],
-      "members":{
-        "sourceLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The source location of the compare data sets step input location.</p>"
-        },
-        "targetLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The target location of the compare data sets step input location.</p>"
-        },
-        "sourceDataSets":{
-          "shape":"DataSetList",
-          "documentation":"<p>The source data sets of the compare data sets step input location.</p>"
-        },
-        "targetDataSets":{
-          "shape":"DataSetList",
-          "documentation":"<p>The target data sets of the compare data sets step input location.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the compare data sets step input.</p>"
-    },
-    "CompareDataSetsStepOutput":{
-      "type":"structure",
-      "required":[
-        "comparisonOutputLocation",
-        "comparisonStatus"
-      ],
-      "members":{
-        "comparisonOutputLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The comparison output location of the compare data sets step output.</p>"
-        },
-        "comparisonStatus":{
-          "shape":"ComparisonStatusEnum",
-          "documentation":"<p>The comparison status of the compare data sets step output.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the compare data sets step output.</p>"
-    },
-    "CompareDataSetsSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"CompareDataSetsStepInput",
-          "documentation":"<p>The step input of the compare data sets summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"CompareDataSetsStepOutput",
-          "documentation":"<p>The step output of the compare data sets summary.</p>"
-        }
-      },
-      "documentation":"<p>Compares data sets summary.</p>"
-    },
-    "CompareDatabaseCDCStepInput":{
-      "type":"structure",
-      "required":[
-        "sourceLocation",
-        "targetLocation",
-        "sourceMetadata",
-        "targetMetadata"
-      ],
-      "members":{
-        "sourceLocation":{
-          "shape":"String",
-          "documentation":"<p>The source location of the compare database CDC step input.</p>"
-        },
-        "targetLocation":{
-          "shape":"String",
-          "documentation":"<p>The target location of the compare database CDC step input.</p>"
-        },
-        "outputLocation":{
-          "shape":"String",
-          "documentation":"<p>The output location of the compare database CDC step input.</p>"
-        },
-        "sourceMetadata":{
-          "shape":"SourceDatabaseMetadata",
-          "documentation":"<p>The source metadata of the compare database CDC step input.</p>"
-        },
-        "targetMetadata":{
-          "shape":"TargetDatabaseMetadata",
-          "documentation":"<p>The target metadata location of the compare database CDC step input.</p>"
-        }
-      },
-      "documentation":"<p>Compares the database Change Data Capture (CDC) step input.</p>"
-    },
-    "CompareDatabaseCDCStepOutput":{
-      "type":"structure",
-      "required":[
-        "comparisonOutputLocation",
-        "comparisonStatus"
-      ],
-      "members":{
-        "comparisonOutputLocation":{
-          "shape":"String",
-          "documentation":"<p>The comparison output of the compare database CDC step output.</p>"
-        },
-        "comparisonStatus":{
-          "shape":"ComparisonStatusEnum",
-          "documentation":"<p>The comparison status of the compare database CDC step output.</p>"
-        }
-      },
-      "documentation":"<p>Compares the database CDC step output.</p>"
-    },
-    "CompareDatabaseCDCSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"CompareDatabaseCDCStepInput",
-          "documentation":"<p>The step input of the compare database CDC summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"CompareDatabaseCDCStepOutput",
-          "documentation":"<p>The step output of the compare database CDC summary.</p>"
-        }
-      },
-      "documentation":"<p>Compares the database CDC summary.</p>"
-    },
-    "CompareFileType":{
-      "type":"structure",
-      "members":{
-        "datasets":{
-          "shape":"CompareDataSetsSummary",
-          "documentation":"<p>The data sets in the compare file type.</p>"
-        },
-        "databaseCDC":{
-          "shape":"CompareDatabaseCDCSummary",
-          "documentation":"<p>The database CDC of the compare file type.</p>"
-        }
-      },
-      "documentation":"<p>Compares the file type.</p>",
-      "union":true
-    },
-    "ComparisonStatusEnum":{
-      "type":"string",
-      "enum":[
-        "Different",
-        "Equivalent",
-        "Equal"
-      ]
-    },
-    "ConflictException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "resourceId":{
-          "shape":"String",
-          "documentation":"<p>The resource ID of the conflicts with existing resources.</p>"
-        },
-        "resourceType":{
-          "shape":"String",
-          "documentation":"<p>The resource type of the conflicts with existing resources.</p>"
-        }
-      },
-      "documentation":"<p>The parameters provided in the request conflict with existing resources.</p>",
-      "error":{
-        "httpStatusCode":409,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "CreateCloudFormationStepInput":{
-      "type":"structure",
-      "required":["templateLocation"],
-      "members":{
-        "templateLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The template location of the CloudFormation step input.</p>"
-        },
-        "parameters":{
-          "shape":"Properties",
-          "documentation":"<p>The CloudFormation properties of the CloudFormation step input.</p>"
-        }
-      },
-      "documentation":"<p>Creates the CloudFormation step input.</p>"
-    },
-    "CreateCloudFormationStepOutput":{
-      "type":"structure",
-      "required":["stackId"],
-      "members":{
-        "stackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID of the CloudFormation step output.</p>"
-        },
-        "exports":{
-          "shape":"Properties",
-          "documentation":"<p>The exports of the CloudFormation step output.</p>"
-        }
-      },
-      "documentation":"<p>Creates a CloudFormation step output.</p>"
-    },
-    "CreateCloudFormationSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"CreateCloudFormationStepInput",
-          "documentation":"<p>The step input of the CloudFormation summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"CreateCloudFormationStepOutput",
-          "documentation":"<p>The step output of the CloudFormation summary.</p>"
-        }
-      },
-      "documentation":"<p>Creates a CloudFormation summary.</p>"
-    },
-    "CreateTestCaseRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "steps"
-      ],
-      "members":{
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test case.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test case.</p>"
-        },
-        "steps":{
-          "shape":"StepList",
-          "documentation":"<p>The steps in the test case.</p>"
-        },
-        "clientToken":{
-          "shape":"IdempotencyTokenString",
-          "documentation":"<p>The client token of the test case.</p>",
-          "idempotencyToken":true
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The specified tags of the test case.</p>"
-        }
-      }
-    },
-    "CreateTestCaseResponse":{
-      "type":"structure",
-      "required":[
-        "testCaseId",
-        "testCaseVersion"
-      ],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test case.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test case.</p>"
-        }
-      }
-    },
-    "CreateTestConfigurationRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "resources"
-      ],
-      "members":{
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test configuration.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test configuration.</p>"
-        },
-        "resources":{
-          "shape":"ResourceList",
-          "documentation":"<p>The defined resources of the test configuration.</p>"
-        },
-        "properties":{
-          "shape":"Properties",
-          "documentation":"<p>The properties of the test configuration.</p>"
-        },
-        "clientToken":{
-          "shape":"IdempotencyTokenString",
-          "documentation":"<p>The client token of the test configuration.</p>",
-          "idempotencyToken":true
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test configuration.</p>"
-        },
-        "serviceSettings":{
-          "shape":"ServiceSettings",
-          "documentation":"<p>The service settings of the test configuration.</p>"
-        }
-      }
-    },
-    "CreateTestConfigurationResponse":{
-      "type":"structure",
-      "required":[
-        "testConfigurationId",
-        "testConfigurationVersion"
-      ],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test configuration ID.</p>"
-        },
-        "testConfigurationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test configuration version.</p>"
-        }
-      }
-    },
-    "CreateTestSuiteRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "testCases"
-      ],
-      "members":{
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test suite.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test suite.</p>"
-        },
-        "beforeSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The before steps of the test suite.</p>"
-        },
-        "afterSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The after steps of the test suite.</p>"
-        },
-        "testCases":{
-          "shape":"TestCases",
-          "documentation":"<p>The test cases in the test suite.</p>"
-        },
-        "clientToken":{
-          "shape":"IdempotencyTokenString",
-          "documentation":"<p>The client token of the test suite.</p>",
-          "idempotencyToken":true
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test suite.</p>"
-        }
-      }
-    },
-    "CreateTestSuiteResponse":{
-      "type":"structure",
-      "required":[
-        "testSuiteId",
-        "testSuiteVersion"
-      ],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The suite ID of the test suite.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The suite version of the test suite.</p>"
-        }
-      }
-    },
-    "DataSet":{
-      "type":"structure",
-      "required":[
-        "type",
-        "name",
-        "ccsid",
-        "format",
-        "length"
-      ],
-      "members":{
-        "type":{
-          "shape":"DataSetType",
-          "documentation":"<p>The type of the data set.</p>"
-        },
-        "name":{
-          "shape":"String100",
-          "documentation":"<p>The name of the data set.</p>"
-        },
-        "ccsid":{
-          "shape":"String50",
-          "documentation":"<p>The CCSID of the data set.</p>"
-        },
-        "format":{
-          "shape":"Format",
-          "documentation":"<p>The format of the data set.</p>"
-        },
-        "length":{
-          "shape":"Integer",
-          "documentation":"<p>The length of the data set.</p>"
-        }
-      },
-      "documentation":"<p>Defines a data set.</p>"
-    },
-    "DataSetList":{
-      "type":"list",
-      "member":{"shape":"DataSet"}
-    },
-    "DataSetType":{
-      "type":"string",
-      "enum":["PS"]
-    },
-    "DatabaseCDC":{
-      "type":"structure",
-      "required":[
-        "sourceMetadata",
-        "targetMetadata"
-      ],
-      "members":{
-        "sourceMetadata":{
-          "shape":"SourceDatabaseMetadata",
-          "documentation":"<p>The source metadata of the database CDC.</p>"
-        },
-        "targetMetadata":{
-          "shape":"TargetDatabaseMetadata",
-          "documentation":"<p>The target metadata of the database CDC.</p>"
-        }
-      },
-      "documentation":"<p>Defines the Change Data Capture (CDC) of the database.</p>"
-    },
-    "DeleteCloudFormationStepInput":{
-      "type":"structure",
-      "required":["stackId"],
-      "members":{
-        "stackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID of the deleted CloudFormation step input.</p>"
-        }
-      },
-      "documentation":"<p>Deletes the CloudFormation step input.</p>"
-    },
-    "DeleteCloudFormationStepOutput":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Deletes the CloudFormation summary step output.</p>"
-    },
-    "DeleteCloudFormationSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"DeleteCloudFormationStepInput",
-          "documentation":"<p>The step input of the deleted CloudFormation summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"DeleteCloudFormationStepOutput",
-          "documentation":"<p>The step output of the deleted CloudFormation summary.</p>"
-        }
-      },
-      "documentation":"<p>Deletes the CloudFormation summary.</p>"
-    },
-    "DeleteTestCaseRequest":{
-      "type":"structure",
-      "required":["testCaseId"],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test case.</p>",
-          "location":"uri",
-          "locationName":"testCaseId"
-        }
-      }
-    },
-    "DeleteTestCaseResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteTestConfigurationRequest":{
-      "type":"structure",
-      "required":["testConfigurationId"],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test ID of the test configuration.</p>",
-          "location":"uri",
-          "locationName":"testConfigurationId"
-        }
-      }
-    },
-    "DeleteTestConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteTestRunRequest":{
-      "type":"structure",
-      "required":["testRunId"],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The run ID of the test run.</p>",
-          "location":"uri",
-          "locationName":"testRunId"
-        }
-      }
-    },
-    "DeleteTestRunResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteTestSuiteRequest":{
-      "type":"structure",
-      "required":["testSuiteId"],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test ID of the test suite.</p>",
-          "location":"uri",
-          "locationName":"testSuiteId"
-        }
-      }
-    },
-    "DeleteTestSuiteResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ExportDataSetNames":{
-      "type":"list",
-      "member":{"shape":"String100"}
-    },
-    "File":{
-      "type":"structure",
-      "members":{
-        "fileType":{
-          "shape":"CompareFileType",
-          "documentation":"<p>The file type of the file.</p>"
-        }
-      },
-      "documentation":"<p>Defines a file.</p>",
-      "union":true
-    },
-    "FileMetadata":{
-      "type":"structure",
-      "members":{
-        "dataSets":{
-          "shape":"DataSetList",
-          "documentation":"<p>The data sets of the file metadata.</p>"
-        },
-        "databaseCDC":{
-          "shape":"DatabaseCDC",
-          "documentation":"<p>The database CDC of the file metadata.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a file metadata.</p>",
-      "union":true
-    },
-    "Format":{
-      "type":"string",
-      "enum":[
-        "FIXED",
-        "VARIABLE",
-        "LINE_SEQUENTIAL"
-      ]
-    },
-    "GetTestCaseRequest":{
-      "type":"structure",
-      "required":["testCaseId"],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The request test ID of the test case.</p>",
-          "location":"uri",
-          "locationName":"testCaseId"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test case.</p>",
-          "location":"querystring",
-          "locationName":"testCaseVersion"
-        }
-      }
-    },
-    "GetTestCaseResponse":{
-      "type":"structure",
-      "required":[
-        "testCaseId",
-        "testCaseArn",
-        "name",
-        "latestVersion",
-        "testCaseVersion",
-        "status",
-        "creationTime",
-        "lastUpdateTime",
-        "steps"
-      ],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The response test ID of the test case.</p>"
-        },
-        "testCaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the test case.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test case.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test case.</p>"
-        },
-        "latestVersion":{
-          "shape":"TestCaseLatestVersion",
-          "documentation":"<p>The latest version of the test case.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The case version of the test case.</p>"
-        },
-        "status":{
-          "shape":"TestCaseLifecycle",
-          "documentation":"<p>The status of the test case.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test case.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test case.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test case.</p>"
-        },
-        "steps":{
-          "shape":"StepList",
-          "documentation":"<p>The steps of the test case.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test case.</p>"
-        }
-      }
-    },
-    "GetTestConfigurationRequest":{
-      "type":"structure",
-      "required":["testConfigurationId"],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The request test configuration ID.</p>",
-          "location":"uri",
-          "locationName":"testConfigurationId"
-        },
-        "testConfigurationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test configuration version.</p>",
-          "location":"querystring",
-          "locationName":"testConfigurationVersion"
-        }
-      }
-    },
-    "GetTestConfigurationResponse":{
-      "type":"structure",
-      "required":[
-        "testConfigurationId",
-        "name",
-        "testConfigurationArn",
-        "latestVersion",
-        "testConfigurationVersion",
-        "status",
-        "creationTime",
-        "lastUpdateTime",
-        "resources",
-        "properties"
-      ],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The response test configuration ID.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The test configuration name</p>"
-        },
-        "testConfigurationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test configuration Amazon Resource Name (ARN).</p>"
-        },
-        "latestVersion":{
-          "shape":"TestConfigurationLatestVersion",
-          "documentation":"<p>The latest version of the test configuration.</p>"
-        },
-        "testConfigurationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test configuration version.</p>"
-        },
-        "status":{
-          "shape":"TestConfigurationLifecycle",
-          "documentation":"<p>The status of the test configuration.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test configuration.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test configuration.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test configuration.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test configuration.</p>"
-        },
-        "resources":{
-          "shape":"ResourceList",
-          "documentation":"<p>The resources of the test configuration.</p>"
-        },
-        "properties":{
-          "shape":"Properties",
-          "documentation":"<p>The properties of the test configuration.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test configuration.</p>"
-        },
-        "serviceSettings":{
-          "shape":"ServiceSettings",
-          "documentation":"<p>The service settings of the test configuration.</p>"
-        }
-      }
-    },
-    "GetTestRunStepRequest":{
-      "type":"structure",
-      "required":[
-        "testRunId",
-        "stepName"
-      ],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run step.</p>",
-          "location":"uri",
-          "locationName":"testRunId"
-        },
-        "stepName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The step name of the test run step.</p>",
-          "location":"uri",
-          "locationName":"stepName"
-        },
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of a test run step.</p>",
-          "location":"querystring",
-          "locationName":"testCaseId"
-        },
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of a test run step.</p>",
-          "location":"querystring",
-          "locationName":"testSuiteId"
-        }
-      }
-    },
-    "GetTestRunStepResponse":{
-      "type":"structure",
-      "required":[
-        "stepName",
-        "testRunId",
-        "status",
-        "runStartTime"
-      ],
-      "members":{
-        "stepName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The step name of the test run step.</p>"
-        },
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run step.</p>"
-        },
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test run step.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test run step.</p>"
-        },
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test run step.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test suite version of the test run step.</p>"
-        },
-        "beforeStep":{
-          "shape":"Boolean",
-          "documentation":"<p>The before steps of the test run step.</p>"
-        },
-        "afterStep":{
-          "shape":"Boolean",
-          "documentation":"<p>The after steps of the test run step.</p>"
-        },
-        "status":{
-          "shape":"StepRunStatus",
-          "documentation":"<p>The status of the test run step.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test run step.</p>"
-        },
-        "runStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run start time of the test run step.</p>"
-        },
-        "runEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run end time of the test run step.</p>"
-        },
-        "stepRunSummary":{
-          "shape":"StepRunSummary",
-          "documentation":"<p>The step run summary of the test run step.</p>"
-        }
-      }
-    },
-    "GetTestSuiteRequest":{
-      "type":"structure",
-      "required":["testSuiteId"],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The ID of the test suite.</p>",
-          "location":"uri",
-          "locationName":"testSuiteId"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the test suite.</p>",
-          "location":"querystring",
-          "locationName":"testSuiteVersion"
-        }
-      }
-    },
-    "GetTestSuiteResponse":{
-      "type":"structure",
-      "required":[
-        "testSuiteId",
-        "name",
-        "latestVersion",
-        "testSuiteVersion",
-        "testSuiteArn",
-        "creationTime",
-        "lastUpdateTime",
-        "beforeSteps",
-        "afterSteps",
-        "testCases"
-      ],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The response ID of the test suite.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test suite.</p>"
-        },
-        "latestVersion":{
-          "shape":"TestSuiteLatestVersion",
-          "documentation":"<p>The latest version of the test suite.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the test suite.</p>"
-        },
-        "status":{
-          "shape":"TestSuiteLifecycle",
-          "documentation":"<p>The status of the test suite.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test suite.</p>"
-        },
-        "testSuiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test suite Amazon Resource Name (ARN).</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test suite.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test suite.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test suite.</p>"
-        },
-        "beforeSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The before steps of the test suite.</p>"
-        },
-        "afterSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The after steps of the test suite. </p>"
-        },
-        "testCases":{
-          "shape":"TestCases",
-          "documentation":"<p>The test cases of the test suite.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test suite.</p>"
-        }
-      }
-    },
-    "IdempotencyTokenString":{
-      "type":"string",
-      "pattern":"[A-Za-z0-9\\-]{1,64}"
-    },
-    "Identifier":{
-      "type":"string",
-      "pattern":"[A-Za-z0-9:/\\-]{1,100}"
-    },
-    "Input":{
-      "type":"structure",
-      "members":{
-        "file":{
-          "shape":"InputFile",
-          "documentation":"<p>The file in the input.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the input.</p>",
-      "union":true
-    },
-    "InputFile":{
-      "type":"structure",
-      "required":[
-        "sourceLocation",
-        "targetLocation",
-        "fileMetadata"
-      ],
-      "members":{
-        "sourceLocation":{
-          "shape":"Variable",
-          "documentation":"<p>The source location of the input file.</p>"
-        },
-        "targetLocation":{
-          "shape":"Variable",
-          "documentation":"<p>The target location of the input file.</p>"
-        },
-        "fileMetadata":{
-          "shape":"FileMetadata",
-          "documentation":"<p>The file metadata of the input file.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the input file.</p>"
-    },
-    "Integer":{
-      "type":"integer",
-      "box":true
-    },
-    "InternalServerException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "retryAfterSeconds":{
-          "shape":"Integer",
-          "documentation":"<p>The number of seconds to retry the query.</p>",
-          "location":"header",
-          "locationName":"Retry-After"
-        }
-      },
-      "documentation":"<p>An unexpected error occurred during the processing of the request.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true,
-      "fault":true,
-      "retryable":{"throttling":false}
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["resourceArn"],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "required":["tags"],
-      "members":{
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the resource.</p>"
-        }
-      }
-    },
-    "ListTestCasesRequest":{
-      "type":"structure",
-      "members":{
-        "testCaseIds":{
-          "shape":"TestCaseIdList",
-          "documentation":"<p>The IDs of the test cases.</p>",
-          "location":"querystring",
-          "locationName":"testCaseIds"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The next token of the test cases.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum results of the test case.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestCasesResponse":{
-      "type":"structure",
-      "required":["testCases"],
-      "members":{
-        "testCases":{
-          "shape":"TestCaseSummaryList",
-          "documentation":"<p>The test cases in an application.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The next token in test cases.</p>"
-        }
-      }
-    },
-    "ListTestConfigurationsRequest":{
-      "type":"structure",
-      "members":{
-        "testConfigurationIds":{
-          "shape":"TestConfigurationIdList",
-          "documentation":"<p>The configuration IDs of the test configurations.</p>",
-          "location":"querystring",
-          "locationName":"testConfigurationIds"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The next token for the test configurations.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum results of the test configuration.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestConfigurationsResponse":{
-      "type":"structure",
-      "required":["testConfigurations"],
-      "members":{
-        "testConfigurations":{
-          "shape":"TestConfigurationList",
-          "documentation":"<p>The test configurations.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The next token in the test configurations.</p>"
-        }
-      }
-    },
-    "ListTestRunStepsRequest":{
-      "type":"structure",
-      "required":["testRunId"],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run steps.</p>",
-          "location":"uri",
-          "locationName":"testRunId"
-        },
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test run steps.</p>",
-          "location":"querystring",
-          "locationName":"testCaseId"
-        },
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test run steps.</p>",
-          "location":"querystring",
-          "locationName":"testSuiteId"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous step to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of test run steps to return in one page of results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestRunStepsResponse":{
-      "type":"structure",
-      "required":["testRunSteps"],
-      "members":{
-        "testRunSteps":{
-          "shape":"TestRunStepSummaryList",
-          "documentation":"<p>The test run steps of the response query.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListTestRunTestCasesRequest":{
-      "type":"structure",
-      "required":["testRunId"],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test cases.</p>",
-          "location":"uri",
-          "locationName":"testRunId"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous request to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of test run test cases to return in one page of results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestRunTestCasesResponse":{
-      "type":"structure",
-      "required":["testRunTestCases"],
-      "members":{
-        "testRunTestCases":{
-          "shape":"TestCaseRunSummaryList",
-          "documentation":"<p>The test run of the test cases.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListTestRunsRequest":{
-      "type":"structure",
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test runs.</p>",
-          "location":"querystring",
-          "locationName":"testSuiteId"
-        },
-        "testRunIds":{
-          "shape":"TestRunIdList",
-          "documentation":"<p>The test run IDs of the test runs.</p>",
-          "location":"querystring",
-          "locationName":"testrunIds"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from the previous request to retrieve the next page of test run results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of test runs to return in one page of results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestRunsResponse":{
-      "type":"structure",
-      "required":["testRuns"],
-      "members":{
-        "testRuns":{
-          "shape":"TestRunSummaryList",
-          "documentation":"<p>The test runs of the response query.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from the previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListTestSuitesRequest":{
-      "type":"structure",
-      "members":{
-        "testSuiteIds":{
-          "shape":"TestSuiteIdList",
-          "documentation":"<p>The suite ID of the test suites.</p>",
-          "location":"querystring",
-          "locationName":"testSuiteIds"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous request to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of test suites to return in one page of results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListTestSuitesResponse":{
-      "type":"structure",
-      "required":["testSuites"],
-      "members":{
-        "testSuites":{
-          "shape":"TestSuiteList",
-          "documentation":"<p>The test suites returned with the response query.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token from a previous request to retrieve the next page of test suites results.</p>"
-        }
-      }
-    },
-    "M2ManagedActionProperties":{
-      "type":"structure",
-      "members":{
-        "forceStop":{
-          "shape":"Boolean",
-          "documentation":"<p>Force stops the AWS Mainframe Modernization managed action properties.</p>"
-        },
-        "importDataSetLocation":{
-          "shape":"Variable",
-          "documentation":"<p>The import data set location of the AWS Mainframe Modernization managed action properties.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed action properties.</p>"
-    },
-    "M2ManagedActionType":{
-      "type":"string",
-      "enum":[
-        "Configure",
-        "Deconfigure"
-      ]
-    },
-    "M2ManagedApplication":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "runtime"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"Variable",
-          "documentation":"<p>The application ID of the AWS Mainframe Modernization managed application.</p>"
-        },
-        "runtime":{
-          "shape":"M2ManagedRuntime",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization managed application.</p>"
-        },
-        "vpcEndpointServiceName":{
-          "shape":"Variable",
-          "documentation":"<p>The VPC endpoint service name of the AWS Mainframe Modernization managed application.</p>"
-        },
-        "listenerPort":{
-          "shape":"Variable",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization managed application.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application.</p>"
-    },
-    "M2ManagedApplicationAction":{
-      "type":"structure",
-      "required":[
-        "resource",
-        "actionType"
-      ],
-      "members":{
-        "resource":{
-          "shape":"Variable",
-          "documentation":"<p>The resource of the AWS Mainframe Modernization managed application action.</p>"
-        },
-        "actionType":{
-          "shape":"M2ManagedActionType",
-          "documentation":"<p>The action type of the AWS Mainframe Modernization managed application action.</p>"
-        },
-        "properties":{
-          "shape":"M2ManagedActionProperties",
-          "documentation":"<p>The properties of the AWS Mainframe Modernization managed application action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application action.</p>"
-    },
-    "M2ManagedApplicationStepInput":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "runtime",
-        "actionType"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"String",
-          "documentation":"<p>The application ID of the AWS Mainframe Modernization managed application step input.</p>"
-        },
-        "runtime":{
-          "shape":"String",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization managed application step input.</p>"
-        },
-        "vpcEndpointServiceName":{
-          "shape":"String",
-          "documentation":"<p>The VPC endpoint service name of the AWS Mainframe Modernization managed application step input.</p>"
-        },
-        "listenerPort":{
-          "shape":"Integer",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization managed application step input.</p>"
-        },
-        "actionType":{
-          "shape":"M2ManagedActionType",
-          "documentation":"<p>The action type of the AWS Mainframe Modernization managed application step input.</p>"
-        },
-        "properties":{
-          "shape":"M2ManagedActionProperties",
-          "documentation":"<p>The properties of the AWS Mainframe Modernization managed application step input.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application step input.</p>"
-    },
-    "M2ManagedApplicationStepOutput":{
-      "type":"structure",
-      "members":{
-        "importDataSetSummary":{
-          "shape":"Properties",
-          "documentation":"<p>The import data set summary of the AWS Mainframe Modernization managed application step output.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application step output.</p>"
-    },
-    "M2ManagedApplicationStepSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"M2ManagedApplicationStepInput",
-          "documentation":"<p>The step input of the AWS Mainframe Modernization managed application step summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"M2ManagedApplicationStepOutput",
-          "documentation":"<p>The step output of the AWS Mainframe Modernization managed application step summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application step summary.</p>"
-    },
-    "M2ManagedApplicationSummary":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "runtime"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The application ID of the AWS Mainframe Modernization managed application summary.</p>"
-        },
-        "runtime":{
-          "shape":"M2ManagedRuntime",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization managed application summary.</p>"
-        },
-        "listenerPort":{
-          "shape":"Integer",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization managed application summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization managed application summary.</p>"
-    },
-    "M2ManagedRuntime":{
-      "type":"string",
-      "enum":["MicroFocus"]
-    },
-    "M2NonManagedActionType":{
-      "type":"string",
-      "enum":[
-        "Configure",
-        "Deconfigure"
-      ]
-    },
-    "M2NonManagedApplication":{
-      "type":"structure",
-      "required":[
-        "vpcEndpointServiceName",
-        "listenerPort",
-        "runtime"
-      ],
-      "members":{
-        "vpcEndpointServiceName":{
-          "shape":"Variable",
-          "documentation":"<p>The VPC endpoint service name of the AWS Mainframe Modernization non-managed application.</p>"
-        },
-        "listenerPort":{
-          "shape":"Variable",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization non-managed application.</p>"
-        },
-        "runtime":{
-          "shape":"M2NonManagedRuntime",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization non-managed application.</p>"
-        },
-        "webAppName":{
-          "shape":"Variable",
-          "documentation":"<p>The web application name of the AWS Mainframe Modernization non-managed application.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application.</p>"
-    },
-    "M2NonManagedApplicationAction":{
-      "type":"structure",
-      "required":[
-        "resource",
-        "actionType"
-      ],
-      "members":{
-        "resource":{
-          "shape":"Variable",
-          "documentation":"<p>The resource of the AWS Mainframe Modernization non-managed application action.</p>"
-        },
-        "actionType":{
-          "shape":"M2NonManagedActionType",
-          "documentation":"<p>The action type of the AWS Mainframe Modernization non-managed application action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application action.</p>"
-    },
-    "M2NonManagedApplicationStepInput":{
-      "type":"structure",
-      "required":[
-        "vpcEndpointServiceName",
-        "listenerPort",
-        "runtime",
-        "actionType"
-      ],
-      "members":{
-        "vpcEndpointServiceName":{
-          "shape":"String",
-          "documentation":"<p>The VPC endpoint service name of the AWS Mainframe Modernization non-managed application step input.</p>"
-        },
-        "listenerPort":{
-          "shape":"Integer",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization non-managed application step input.</p>"
-        },
-        "runtime":{
-          "shape":"M2NonManagedRuntime",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization non-managed application step input.</p>"
-        },
-        "webAppName":{
-          "shape":"String",
-          "documentation":"<p>The web app name of the AWS Mainframe Modernization non-managed application step input.</p>"
-        },
-        "actionType":{
-          "shape":"M2NonManagedActionType",
-          "documentation":"<p>The action type of the AWS Mainframe Modernization non-managed application step input.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application step input.</p>"
-    },
-    "M2NonManagedApplicationStepOutput":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application step output.</p>"
-    },
-    "M2NonManagedApplicationStepSummary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"M2NonManagedApplicationStepInput",
-          "documentation":"<p>The step input of the AWS Mainframe Modernization non-managed application step summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"M2NonManagedApplicationStepOutput",
-          "documentation":"<p>The step output of the AWS Mainframe Modernization non-managed application step summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application step summary.</p>"
-    },
-    "M2NonManagedApplicationSummary":{
-      "type":"structure",
-      "required":[
-        "vpcEndpointServiceName",
-        "listenerPort",
-        "runtime"
-      ],
-      "members":{
-        "vpcEndpointServiceName":{
-          "shape":"String",
-          "documentation":"<p>The VPC endpoint service name of the AWS Mainframe Modernization non-managed application summary.</p>"
-        },
-        "listenerPort":{
-          "shape":"Integer",
-          "documentation":"<p>The listener port of the AWS Mainframe Modernization non-managed application summary.</p>"
-        },
-        "runtime":{
-          "shape":"M2NonManagedRuntime",
-          "documentation":"<p>The runtime of the AWS Mainframe Modernization non-managed application summary.</p>"
-        },
-        "webAppName":{
-          "shape":"String",
-          "documentation":"<p>The web application name of the AWS Mainframe Modernization non-managed application summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the AWS Mainframe Modernization non-managed application summary.</p>"
-    },
-    "M2NonManagedRuntime":{
-      "type":"string",
-      "enum":["BluAge"]
-    },
-    "MainframeAction":{
-      "type":"structure",
-      "required":[
-        "resource",
-        "actionType"
-      ],
-      "members":{
-        "resource":{
-          "shape":"Variable",
-          "documentation":"<p>The resource of the mainframe action.</p>"
-        },
-        "actionType":{
-          "shape":"MainframeActionType",
-          "documentation":"<p>The action type of the mainframe action.</p>"
-        },
-        "properties":{
-          "shape":"MainframeActionProperties",
-          "documentation":"<p>The properties of the mainframe action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the mainframe action.</p>"
-    },
-    "MainframeActionProperties":{
-      "type":"structure",
-      "members":{
-        "dmsTaskArn":{
-          "shape":"Variable",
-          "documentation":"<p>The DMS task ARN of the mainframe action properties.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the mainframe action properties.</p>"
-    },
-    "MainframeActionSummary":{
-      "type":"structure",
-      "members":{
-        "batch":{
-          "shape":"BatchSummary",
-          "documentation":"<p>The batch of the mainframe action summary.</p>"
-        },
-        "tn3270":{
-          "shape":"TN3270Summary",
-          "documentation":"<p>The tn3270 port of the mainframe action summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the mainframe action summary.</p>",
-      "union":true
-    },
-    "MainframeActionType":{
-      "type":"structure",
-      "members":{
-        "batch":{
-          "shape":"Batch",
-          "documentation":"<p>The batch of the mainframe action type.</p>"
-        },
-        "tn3270":{
-          "shape":"TN3270",
-          "documentation":"<p>The tn3270 port of the mainframe action type.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the mainframe action type.</p>",
-      "union":true
-    },
-    "MainframeResourceSummary":{
-      "type":"structure",
-      "members":{
-        "m2ManagedApplication":{
-          "shape":"M2ManagedApplicationSummary",
-          "documentation":"<p>The AWS Mainframe Modernization managed application in the mainframe resource summary.</p>"
-        },
-        "m2NonManagedApplication":{
-          "shape":"M2NonManagedApplicationSummary",
-          "documentation":"<p>The AWS Mainframe Modernization non-managed application in the mainframe resource summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the mainframe resource summary.</p>",
-      "union":true
-    },
-    "MaxResults":{
-      "type":"integer",
-      "box":true,
-      "max":100,
-      "min":1
-    },
-    "NextToken":{
-      "type":"string",
-      "pattern":"\\S{1,2000}"
-    },
-    "Output":{
-      "type":"structure",
-      "members":{
-        "file":{
-          "shape":"OutputFile",
-          "documentation":"<p>The file of the output.</p>"
-        }
-      },
-      "documentation":"<p>Specifies an output.</p>",
-      "union":true
-    },
-    "OutputFile":{
-      "type":"structure",
-      "members":{
-        "fileLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The file location of the output file.</p>"
-        }
-      },
-      "documentation":"<p>Specifies an output file.</p>"
-    },
-    "Properties":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"}
-    },
-    "Resource":{
-      "type":"structure",
-      "required":[
-        "name",
-        "type"
-      ],
-      "members":{
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        },
-        "type":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a resource.</p>"
-    },
-    "ResourceAction":{
-      "type":"structure",
-      "members":{
-        "m2ManagedApplicationAction":{
-          "shape":"M2ManagedApplicationAction",
-          "documentation":"<p>The AWS Mainframe Modernization managed application action of the resource action.</p>"
-        },
-        "m2NonManagedApplicationAction":{
-          "shape":"M2NonManagedApplicationAction",
-          "documentation":"<p>The AWS Mainframe Modernization non-managed application action of the resource action.</p>"
-        },
-        "cloudFormationAction":{
-          "shape":"CloudFormationAction",
-          "documentation":"<p>The CloudFormation action of the resource action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a resource action.</p>",
-      "union":true
-    },
-    "ResourceActionSummary":{
-      "type":"structure",
-      "members":{
-        "cloudFormation":{
-          "shape":"CloudFormationStepSummary",
-          "documentation":"<p>The CloudFormation template of the resource action summary.</p>"
-        },
-        "m2ManagedApplication":{
-          "shape":"M2ManagedApplicationStepSummary",
-          "documentation":"<p>The AWS Mainframe Modernization managed application of the resource action summary.</p>"
-        },
-        "m2NonManagedApplication":{
-          "shape":"M2NonManagedApplicationStepSummary",
-          "documentation":"<p>The AWS Mainframe Modernization non-managed application of the resource action summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the resource action summary.</p>",
-      "union":true
-    },
-    "ResourceDescription":{
-      "type":"string",
-      "max":1000,
-      "min":0
-    },
-    "ResourceList":{
-      "type":"list",
-      "member":{"shape":"Resource"},
-      "max":20,
-      "min":1
-    },
-    "ResourceName":{
-      "type":"string",
-      "pattern":"[A-Za-z][A-Za-z0-9_\\-]{1,59}"
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "resourceId":{
-          "shape":"String",
-          "documentation":"<p>The resource ID of the resource not found.</p>"
-        },
-        "resourceType":{
-          "shape":"String",
-          "documentation":"<p>The resource type of the resource not found.</p>"
-        }
-      },
-      "documentation":"<p>The specified resource was not found.</p>",
-      "error":{
-        "httpStatusCode":404,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ResourceType":{
-      "type":"structure",
-      "members":{
-        "cloudFormation":{
-          "shape":"CloudFormation",
-          "documentation":"<p>The CloudFormation template of the resource type.</p>"
-        },
-        "m2ManagedApplication":{
-          "shape":"M2ManagedApplication",
-          "documentation":"<p>The AWS Mainframe Modernization managed application of the resource type.</p>"
-        },
-        "m2NonManagedApplication":{
-          "shape":"M2NonManagedApplication",
-          "documentation":"<p>The AWS Mainframe Modernization non-managed application of the resource type.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the resource type.</p>",
-      "union":true
-    },
-    "S3Uri":{
-      "type":"string",
-      "max":1024,
-      "min":0
-    },
-    "Script":{
-      "type":"structure",
-      "required":[
-        "scriptLocation",
-        "type"
-      ],
-      "members":{
-        "scriptLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The script location of the scripts.</p>"
-        },
-        "type":{
-          "shape":"ScriptType",
-          "documentation":"<p>The type of the scripts.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the script.</p>"
-    },
-    "ScriptSummary":{
-      "type":"structure",
-      "required":[
-        "scriptLocation",
-        "type"
-      ],
-      "members":{
-        "scriptLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The script location of the script summary.</p>"
-        },
-        "type":{
-          "shape":"ScriptType",
-          "documentation":"<p>The type of the script summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the scripts summary.</p>"
-    },
-    "ScriptType":{
-      "type":"string",
-      "enum":["Selenium"]
-    },
-    "ServiceQuotaExceededException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "resourceId":{
-          "shape":"String",
-          "documentation":"<p>The resource ID of AWS Application Testing that exceeded the limit.</p>"
-        },
-        "resourceType":{
-          "shape":"String",
-          "documentation":"<p>The resource type of AWS Application Testing that exceeded the limit.</p>"
-        },
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>The service code of AWS Application Testing that exceeded the limit.</p>"
-        },
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>The quote codes of AWS Application Testing that exceeded the limit.</p>"
-        }
-      },
-      "documentation":"<p>One or more quotas for AWS Application Testing exceeds the limit.</p>",
-      "error":{
-        "httpStatusCode":402,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ServiceSettings":{
-      "type":"structure",
-      "members":{
-        "kmsKeyId":{
-          "shape":"String",
-          "documentation":"<p>The KMS key ID of the service settings.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the service settings.</p>"
-    },
-    "SourceDatabase":{
-      "type":"string",
-      "enum":["z/OS-DB2"]
-    },
-    "SourceDatabaseMetadata":{
-      "type":"structure",
-      "required":[
-        "type",
-        "captureTool"
-      ],
-      "members":{
-        "type":{
-          "shape":"SourceDatabase",
-          "documentation":"<p>The type of the source database metadata.</p>"
-        },
-        "captureTool":{
-          "shape":"CaptureTool",
-          "documentation":"<p>The capture tool of the source database metadata.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the source database metadata.</p>"
-    },
-    "StartTestRunRequest":{
-      "type":"structure",
-      "required":["testSuiteId"],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test run.</p>"
-        },
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The configuration ID of the test run.</p>"
-        },
-        "clientToken":{
-          "shape":"IdempotencyTokenString",
-          "documentation":"<p>The client token of the test run.</p>",
-          "idempotencyToken":true
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the test run.</p>"
-        }
-      }
-    },
-    "StartTestRunResponse":{
-      "type":"structure",
-      "required":[
-        "testRunId",
-        "testRunStatus"
-      ],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run.</p>"
-        },
-        "testRunStatus":{
-          "shape":"TestRunStatus",
-          "documentation":"<p>The test run status of the test run.</p>"
-        }
-      }
-    },
-    "Step":{
-      "type":"structure",
-      "required":[
-        "name",
-        "action"
-      ],
-      "members":{
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the step.</p>"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the step.</p>"
-        },
-        "action":{
-          "shape":"StepAction",
-          "documentation":"<p>The action of the step.</p>"
-        }
-      },
-      "documentation":"<p>Defines a step.</p>"
-    },
-    "StepAction":{
-      "type":"structure",
-      "members":{
-        "resourceAction":{
-          "shape":"ResourceAction",
-          "documentation":"<p>The resource action of the step action.</p>"
-        },
-        "mainframeAction":{
-          "shape":"MainframeAction",
-          "documentation":"<p>The mainframe action of the step action.</p>"
-        },
-        "compareAction":{
-          "shape":"CompareAction",
-          "documentation":"<p>The compare action of the step action.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a step action.</p>",
-      "union":true
-    },
-    "StepList":{
-      "type":"list",
-      "member":{"shape":"Step"},
-      "max":20,
-      "min":1
-    },
-    "StepRunStatus":{
-      "type":"string",
-      "enum":[
-        "Success",
-        "Failed",
-        "Running"
-      ]
-    },
-    "StepRunSummary":{
-      "type":"structure",
-      "members":{
-        "mainframeAction":{
-          "shape":"MainframeActionSummary",
-          "documentation":"<p>The mainframe action of the step run summary.</p>"
-        },
-        "compareAction":{
-          "shape":"CompareActionSummary",
-          "documentation":"<p>The compare action of the step run summary.</p>"
-        },
-        "resourceAction":{
-          "shape":"ResourceActionSummary",
-          "documentation":"<p>The resource action of the step run summary.</p>"
-        }
-      },
-      "documentation":"<p>Defines the step run summary.</p>",
-      "union":true
-    },
-    "String":{"type":"string"},
-    "String100":{
-      "type":"string",
-      "pattern":"\\S{1,100}"
-    },
-    "String50":{
-      "type":"string",
-      "pattern":"\\S{1,50}"
-    },
-    "TN3270":{
-      "type":"structure",
-      "required":["script"],
-      "members":{
-        "script":{
-          "shape":"Script",
-          "documentation":"<p>The script of the TN3270 protocol.</p>"
-        },
-        "exportDataSetNames":{
-          "shape":"ExportDataSetNames",
-          "documentation":"<p>The data set names of the TN3270 protocol.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the TN3270 protocol.</p>"
-    },
-    "TN3270StepInput":{
-      "type":"structure",
-      "required":[
-        "resource",
-        "script"
-      ],
-      "members":{
-        "resource":{
-          "shape":"MainframeResourceSummary",
-          "documentation":"<p>The resource of the TN3270 step input.</p>"
-        },
-        "script":{
-          "shape":"ScriptSummary",
-          "documentation":"<p>The script of the TN3270 step input.</p>"
-        },
-        "exportDataSetNames":{
-          "shape":"ExportDataSetNames",
-          "documentation":"<p>The export data set names of the TN3270 step input.</p>"
-        },
-        "properties":{
-          "shape":"MainframeActionProperties",
-          "documentation":"<p>The properties of the TN3270 step input.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a TN3270 step input.</p>"
-    },
-    "TN3270StepOutput":{
-      "type":"structure",
-      "required":["scriptOutputLocation"],
-      "members":{
-        "dataSetExportLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The data set export location of the TN3270 step output.</p>"
-        },
-        "dmsOutputLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The output location of the TN3270 step output.</p>"
-        },
-        "dataSetDetails":{
-          "shape":"DataSetList",
-          "documentation":"<p>The data set details of the TN3270 step output.</p>"
-        },
-        "scriptOutputLocation":{
-          "shape":"S3Uri",
-          "documentation":"<p>The script output location of the TN3270 step output.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a TN3270 step output.</p>"
-    },
-    "TN3270Summary":{
-      "type":"structure",
-      "required":["stepInput"],
-      "members":{
-        "stepInput":{
-          "shape":"TN3270StepInput",
-          "documentation":"<p>The step input of the TN3270 summary.</p>"
-        },
-        "stepOutput":{
-          "shape":"TN3270StepOutput",
-          "documentation":"<p>The step output of the TN3270 summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a TN3270 summary.</p>"
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"(?!aws:).+"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"}
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":200,
-      "min":0
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tags"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the tag resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags of the resource.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0
-    },
-    "TargetDatabase":{
-      "type":"string",
-      "enum":["PostgreSQL"]
-    },
-    "TargetDatabaseMetadata":{
-      "type":"structure",
-      "required":[
-        "type",
-        "captureTool"
-      ],
-      "members":{
-        "type":{
-          "shape":"TargetDatabase",
-          "documentation":"<p>The type of the target database metadata.</p>"
-        },
-        "captureTool":{
-          "shape":"CaptureTool",
-          "documentation":"<p>The capture tool of the target database metadata.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a target database metadata.</p>"
-    },
-    "TestCaseIdList":{
-      "type":"list",
-      "member":{"shape":"Identifier"}
-    },
-    "TestCaseLatestVersion":{
-      "type":"structure",
-      "required":[
-        "version",
-        "status"
-      ],
-      "members":{
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the test case latest version.</p>"
-        },
-        "status":{
-          "shape":"TestCaseLifecycle",
-          "documentation":"<p>The status of the test case latest version.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test case latest version.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the latest version of a test case.</p>"
-    },
-    "TestCaseLifecycle":{
-      "type":"string",
-      "enum":[
-        "Active",
-        "Deleting"
-      ]
-    },
-    "TestCaseList":{
-      "type":"list",
-      "member":{"shape":"Identifier"}
-    },
-    "TestCaseRunStatus":{
-      "type":"string",
-      "enum":[
-        "Success",
-        "Running",
-        "Failed"
-      ]
-    },
-    "TestCaseRunSummary":{
-      "type":"structure",
-      "required":[
-        "testCaseId",
-        "testCaseVersion",
-        "testRunId",
-        "status",
-        "runStartTime"
-      ],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case id of the test case run summary.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test case run summary.</p>"
-        },
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run id of the test case run summary.</p>"
-        },
-        "status":{
-          "shape":"TestCaseRunStatus",
-          "documentation":"<p>The status of the test case run summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test case run summary.</p>"
-        },
-        "runStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run start time of the test case run summary.</p>"
-        },
-        "runEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run end time of the test case run summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the test case run summary.</p>"
-    },
-    "TestCaseRunSummaryList":{
-      "type":"list",
-      "member":{"shape":"TestCaseRunSummary"}
-    },
-    "TestCaseSummary":{
-      "type":"structure",
-      "required":[
-        "testCaseId",
-        "testCaseArn",
-        "name",
-        "latestVersion",
-        "status",
-        "creationTime",
-        "lastUpdateTime"
-      ],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test case summary.</p>"
-        },
-        "testCaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test case Amazon Resource Name (ARN) of the test case summary.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test case summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test case summary.</p>"
-        },
-        "latestVersion":{
-          "shape":"Version",
-          "documentation":"<p>The latest version of the test case summary.</p>"
-        },
-        "status":{
-          "shape":"TestCaseLifecycle",
-          "documentation":"<p>The status of the test case summary.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test case summary.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test case summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a test case summary.</p>"
-    },
-    "TestCaseSummaryList":{
-      "type":"list",
-      "member":{"shape":"TestCaseSummary"}
-    },
-    "TestCases":{
-      "type":"structure",
-      "members":{
-        "sequential":{
-          "shape":"TestCaseList",
-          "documentation":"<p>The sequential of the test case.</p>"
-        }
-      },
-      "documentation":"<p>Specifies test cases.</p>",
-      "union":true
-    },
-    "TestConfigurationIdList":{
-      "type":"list",
-      "member":{"shape":"Identifier"}
-    },
-    "TestConfigurationLatestVersion":{
-      "type":"structure",
-      "required":[
-        "version",
-        "status"
-      ],
-      "members":{
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the test configuration latest version.</p>"
-        },
-        "status":{
-          "shape":"TestConfigurationLifecycle",
-          "documentation":"<p>The status of the test configuration latest version.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test configuration latest version.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the latest version of the test configuration.</p>"
-    },
-    "TestConfigurationLifecycle":{
-      "type":"string",
-      "enum":[
-        "Active",
-        "Deleting"
-      ]
-    },
-    "TestConfigurationList":{
-      "type":"list",
-      "member":{"shape":"TestConfigurationSummary"}
-    },
-    "TestConfigurationSummary":{
-      "type":"structure",
-      "required":[
-        "testConfigurationId",
-        "name",
-        "latestVersion",
-        "testConfigurationArn",
-        "status",
-        "creationTime",
-        "lastUpdateTime"
-      ],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test configuration ID of the test configuration summary.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test configuration summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test configuration summary.</p>"
-        },
-        "latestVersion":{
-          "shape":"Version",
-          "documentation":"<p>The latest version of the test configuration summary.</p>"
-        },
-        "testConfigurationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test configuration ARN of the test configuration summary.</p>"
-        },
-        "status":{
-          "shape":"TestConfigurationLifecycle",
-          "documentation":"<p>The status of the test configuration summary.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test configuration summary.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test configuration summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a test configuration summary.</p>"
-    },
-    "TestRunIdList":{
-      "type":"list",
-      "member":{"shape":"Identifier"}
-    },
-    "TestRunStatus":{
-      "type":"string",
-      "enum":[
-        "Success",
-        "Running",
-        "Failed",
-        "Deleting"
-      ]
-    },
-    "TestRunStepSummary":{
-      "type":"structure",
-      "required":[
-        "stepName",
-        "testRunId",
-        "status",
-        "runStartTime"
-      ],
-      "members":{
-        "stepName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The step name of the test run step summary.</p>"
-        },
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run step summary.</p>"
-        },
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test run step summary.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test run step summary.</p>"
-        },
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test run step summary.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test suite version of the test run step summary.</p>"
-        },
-        "beforeStep":{
-          "shape":"Boolean",
-          "documentation":"<p>The before step of the test run step summary.</p>"
-        },
-        "afterStep":{
-          "shape":"Boolean",
-          "documentation":"<p>The after step of the test run step summary.</p>"
-        },
-        "status":{
-          "shape":"StepRunStatus",
-          "documentation":"<p>The status of the test run step summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test run step summary.</p>"
-        },
-        "runStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run start time of the test run step summary.</p>"
-        },
-        "runEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run end time of the test run step summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a test run step summary.</p>"
-    },
-    "TestRunStepSummaryList":{
-      "type":"list",
-      "member":{"shape":"TestRunStepSummary"}
-    },
-    "TestRunSummary":{
-      "type":"structure",
-      "required":[
-        "testRunId",
-        "testRunArn",
-        "testSuiteId",
-        "testSuiteVersion",
-        "status",
-        "runStartTime"
-      ],
-      "members":{
-        "testRunId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test run ID of the test run summary.</p>"
-        },
-        "testRunArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test run ARN of the test run summary.</p>"
-        },
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test run summary.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test suite version of the test run summary.</p>"
-        },
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test configuration ID of the test run summary.</p>"
-        },
-        "testConfigurationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test configuration version of the test run summary.</p>"
-        },
-        "status":{
-          "shape":"TestRunStatus",
-          "documentation":"<p>The status of the test run summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test run summary.</p>"
-        },
-        "runStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run start time of the test run summary.</p>"
-        },
-        "runEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The run end time of the test run summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a test run summary.</p>"
-    },
-    "TestRunSummaryList":{
-      "type":"list",
-      "member":{"shape":"TestRunSummary"}
-    },
-    "TestSuiteIdList":{
-      "type":"list",
-      "member":{"shape":"Identifier"}
-    },
-    "TestSuiteLatestVersion":{
-      "type":"structure",
-      "required":[
-        "version",
-        "status"
-      ],
-      "members":{
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the test suite latest version.</p>"
-        },
-        "status":{
-          "shape":"TestSuiteLifecycle",
-          "documentation":"<p>The status of the test suite latest version.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test suite latest version.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the latest version of a test suite.</p>"
-    },
-    "TestSuiteLifecycle":{
-      "type":"string",
-      "enum":[
-        "Creating",
-        "Updating",
-        "Active",
-        "Failed",
-        "Deleting"
-      ]
-    },
-    "TestSuiteList":{
-      "type":"list",
-      "member":{"shape":"TestSuiteSummary"}
-    },
-    "TestSuiteSummary":{
-      "type":"structure",
-      "required":[
-        "testSuiteId",
-        "name",
-        "latestVersion",
-        "testSuiteArn",
-        "status",
-        "creationTime",
-        "lastUpdateTime"
-      ],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test suite summary.</p>"
-        },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the test suite summary.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the test suite summary.</p>"
-        },
-        "latestVersion":{
-          "shape":"Version",
-          "documentation":"<p>The latest version of the test suite summary.</p>"
-        },
-        "testSuiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The test suite Amazon Resource Name (ARN) of the test suite summary.</p>"
-        },
-        "status":{
-          "shape":"TestSuiteLifecycle",
-          "documentation":"<p>The status of the test suite summary.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the test suite summary.</p>"
-        },
-        "lastUpdateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last update time of the test suite summary.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the test suite summary.</p>"
-    },
-    "ThrottlingException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>The service code of requests that exceed the limit.</p>"
-        },
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>The quota code of requests that exceed the limit.</p>"
-        },
-        "retryAfterSeconds":{
-          "shape":"Integer",
-          "documentation":"<p>The number of seconds to retry after for requests that exceed the limit.</p>",
-          "location":"header",
-          "locationName":"Retry-After"
-        }
-      },
-      "documentation":"<p>The number of requests made exceeds the limit.</p>",
-      "error":{
-        "httpStatusCode":429,
-        "senderFault":true
-      },
-      "exception":true,
-      "retryable":{"throttling":true}
-    },
-    "Timestamp":{"type":"timestamp"},
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tagKeys"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>The tag keys of the resource.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateTestCaseRequest":{
-      "type":"structure",
-      "required":["testCaseId"],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test case.</p>",
-          "location":"uri",
-          "locationName":"testCaseId"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test case.</p>"
-        },
-        "steps":{
-          "shape":"StepList",
-          "documentation":"<p>The steps of the test case.</p>"
-        }
-      }
-    },
-    "UpdateTestCaseResponse":{
-      "type":"structure",
-      "required":[
-        "testCaseId",
-        "testCaseVersion"
-      ],
-      "members":{
-        "testCaseId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test case ID of the test case.</p>"
-        },
-        "testCaseVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test case version of the test case.</p>"
-        }
-      }
-    },
-    "UpdateTestConfigurationRequest":{
-      "type":"structure",
-      "required":["testConfigurationId"],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test configuration ID of the test configuration.</p>",
-          "location":"uri",
-          "locationName":"testConfigurationId"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test configuration.</p>"
-        },
-        "resources":{
-          "shape":"ResourceList",
-          "documentation":"<p>The resources of the test configuration.</p>"
-        },
-        "properties":{
-          "shape":"Properties",
-          "documentation":"<p>The properties of the test configuration.</p>"
-        },
-        "serviceSettings":{
-          "shape":"ServiceSettings",
-          "documentation":"<p>The service settings of the test configuration.</p>"
-        }
-      }
-    },
-    "UpdateTestConfigurationResponse":{
-      "type":"structure",
-      "required":[
-        "testConfigurationId",
-        "testConfigurationVersion"
-      ],
-      "members":{
-        "testConfigurationId":{
-          "shape":"Identifier",
-          "documentation":"<p>The configuration ID of the test configuration.</p>"
-        },
-        "testConfigurationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The configuration version of the test configuration.</p>"
-        }
-      }
-    },
-    "UpdateTestSuiteRequest":{
-      "type":"structure",
-      "required":["testSuiteId"],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test suite.</p>",
-          "location":"uri",
-          "locationName":"testSuiteId"
-        },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the test suite.</p>"
-        },
-        "beforeSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The before steps for the test suite.</p>"
-        },
-        "afterSteps":{
-          "shape":"StepList",
-          "documentation":"<p>The after steps of the test suite.</p>"
-        },
-        "testCases":{
-          "shape":"TestCases",
-          "documentation":"<p>The test cases in the test suite.</p>"
-        }
-      }
-    },
-    "UpdateTestSuiteResponse":{
-      "type":"structure",
-      "required":["testSuiteId"],
-      "members":{
-        "testSuiteId":{
-          "shape":"Identifier",
-          "documentation":"<p>The test suite ID of the test suite.</p>"
-        },
-        "testSuiteVersion":{
-          "shape":"Version",
-          "documentation":"<p>The test suite version of the test suite.</p>"
-        }
-      }
-    },
-    "ValidationException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"},
-        "reason":{
-          "shape":"ValidationExceptionReason",
-          "documentation":"<p>The reason for the validation exception.</p>"
-        },
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The field list of the validation exception.</p>"
-        }
-      },
-      "documentation":"<p>One or more parameter provided in the request is not valid.</p>",
-      "error":{
-        "httpStatusCode":400,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ValidationExceptionField":{
-      "type":"structure",
-      "required":[
-        "name",
-        "message"
-      ],
-      "members":{
-        "name":{
-          "shape":"String",
-          "documentation":"<p>The name of the validation exception field.</p>"
-        },
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The message stating reason for why service validation failed.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a validation exception field.</p>"
-    },
-    "ValidationExceptionFieldList":{
-      "type":"list",
-      "member":{"shape":"ValidationExceptionField"}
-    },
-    "ValidationExceptionReason":{
-      "type":"string",
-      "enum":[
-        "unknownOperation",
-        "cannotParse",
-        "fieldValidationFailed",
-        "other"
-      ]
-    },
-    "Variable":{
-      "type":"string",
-      "pattern":"\\S{1,1000}"
-    },
-    "Version":{
-      "type":"integer",
-      "box":true
-    }
-  },
-  "documentation":"<p>AWS Mainframe Modernization Application Testing provides tools and resources for automated functional equivalence testing for your migration projects.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/waiters-2.json 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/apptest/2022-12-06/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/apptest/2022-12-06/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-{
-  "version": 2,
-  "waiters": {
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,434 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "Boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "String"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "String"
+        },
+        "UseControlPlaneEndpoint": {
+            "required": false,
+            "documentation": "Whether the operation is a control plane operation. Control plane operations are routed to a centralized endpoint in the partition leader.",
+            "type": "Boolean"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        }
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        },
+                        true
+                    ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                },
+                {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "aws.partition",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ],
+                    "assign": "PartitionResult"
+                },
+                {
+                    "fn": "stringEquals",
+                    "argv": [
+                        {
+                            "fn": "getAttr",
+                            "argv": [
+                                {
+                                    "ref": "PartitionResult"
+                                },
+                                "name"
+                            ]
+                        },
+                        "aws-cn"
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": "https://arc-region-switch-control-plane.cn-north-1.{PartitionResult#dualStackDnsSuffix}",
+                        "properties": {
+                            "authSchemes": [
+                                {
+                                    "name": "sigv4",
+                                    "signingName": "arc-region-switch",
+                                    "signingRegion": "cn-north-1"
+                                }
+                            ]
+                        },
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        }
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        },
+                        true
+                    ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseFIPS"
+                        },
+                        true
+                    ]
+                },
+                {
+                    "fn": "aws.partition",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ],
+                    "assign": "PartitionResult"
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
+                                {
+                                    "fn": "getAttr",
+                                    "argv": [
+                                        {
+                                            "ref": "PartitionResult"
+                                        },
+                                        "name"
+                                    ]
+                                },
+                                "aws-cn"
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS is not supported in this partition",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": "https://arc-region-switch-control-plane-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                "properties": {
+                                    "authSchemes": [
+                                        {
+                                            "name": "sigv4",
+                                            "signingName": "arc-region-switch",
+                                            "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                        }
+                                    ]
+                                },
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        }
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseControlPlaneEndpoint"
+                        },
+                        true
+                    ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                },
+                {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "aws.partition",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ],
+                    "assign": "PartitionResult"
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": "https://arc-region-switch-control-plane.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                        "properties": {
+                            "authSchemes": [
+                                {
+                                    "name": "sigv4",
+                                    "signingName": "arc-region-switch",
+                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                }
+                            ]
+                        },
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://arc-region-switch-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://arc-region-switch.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.json 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,46 @@
+{
+  "pagination": {
+    "GetPlanEvaluationStatus": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "warnings"
+    },
+    "GetPlanExecution": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "stepStates"
+    },
+    "ListPlanExecutionEvents": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListPlanExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListPlans": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "plans"
+    },
+    "ListPlansInRegion": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "plans"
+    },
+    "ListRoute53HealthChecks": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "healthChecks"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,33 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "GetPlanEvaluationStatus": {
+        "non_aggregate_keys": [
+          "lastEvaluatedVersion", 
+          "planArn",
+          "lastEvaluationTime",
+          "evaluationState",
+          "region"
+        ]
+      },
+      "GetPlanExecution": {
+         "non_aggregate_keys": [
+           "comment",
+           "executionRegion",
+           "endTime",
+           "startTime",
+           "executionState",
+           "executionAction",
+           "plan",
+           "executionId",
+           "updatedAt",
+           "planArn",
+           "actualRecoveryTime",
+           "version",
+           "mode"
+         ]
+      }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/service-2.json 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,2646 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2022-07-26",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"arc-region-switch",
+    "jsonVersion":"1.0",
+    "protocol":"smithy-rpc-v2-cbor",
+    "protocols":[
+      "smithy-rpc-v2-cbor",
+      "json"
+    ],
+    "serviceFullName":"ARC - Region switch",
+    "serviceId":"ARC Region switch",
+    "signatureVersion":"v4",
+    "signingName":"arc-region-switch",
+    "targetPrefix":"ArcRegionSwitch",
+    "uid":"arc-region-switch-2022-07-26"
+  },
+  "operations":{
+    "ApprovePlanExecutionStep":{
+      "name":"ApprovePlanExecutionStep",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ApprovePlanExecutionStepRequest"},
+      "output":{"shape":"ApprovePlanExecutionStepResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Approves a step in a plan execution that requires manual approval. When you create a plan, you can include approval steps that require manual intervention before the execution can proceed. This operation allows you to provide that approval.</p> <p>You must specify the plan ARN, execution ID, step name, and approval status. You can also provide an optional comment explaining the approval decision.</p>"
+    },
+    "CancelPlanExecution":{
+      "name":"CancelPlanExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CancelPlanExecutionRequest"},
+      "output":{"shape":"CancelPlanExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Cancels an in-progress plan execution. This operation stops the execution of the plan and prevents any further steps from being processed.</p> <p>You must specify the plan ARN and execution ID. You can also provide an optional comment explaining why the execution was canceled.</p>"
+    },
+    "CreatePlan":{
+      "name":"CreatePlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreatePlanRequest"},
+      "output":{"shape":"CreatePlanResponse"},
+      "documentation":"<p>Creates a new Region switch plan. A plan defines the steps required to shift traffic from one Amazon Web Services Region to another.</p> <p>You must specify a name for the plan, the primary Region, and at least one additional Region. You can also provide a description, execution role, recovery time objective, associated alarms, triggers, and workflows that define the steps to execute during a Region switch.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "DeletePlan":{
+      "name":"DeletePlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeletePlanRequest"},
+      "output":{"shape":"DeletePlanResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"IllegalStateException"}
+      ],
+      "documentation":"<p>Deletes a Region switch plan. You must specify the ARN of the plan to delete.</p> <p>You cannot delete a plan that has an active execution in progress.</p>",
+      "idempotent":true,
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "GetPlan":{
+      "name":"GetPlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetPlanRequest"},
+      "output":{"shape":"GetPlanResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a Region switch plan. You must specify the ARN of the plan.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "GetPlanEvaluationStatus":{
+      "name":"GetPlanEvaluationStatus",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetPlanEvaluationStatusRequest"},
+      "output":{"shape":"GetPlanEvaluationStatusResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the evaluation status of a Region switch plan. The evaluation status provides information about the last time the plan was evaluated and any warnings or issues detected.</p>"
+    },
+    "GetPlanExecution":{
+      "name":"GetPlanExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetPlanExecutionRequest"},
+      "output":{"shape":"GetPlanExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific plan execution. You must specify the plan ARN and execution ID.</p>"
+    },
+    "GetPlanInRegion":{
+      "name":"GetPlanInRegion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetPlanInRegionRequest"},
+      "output":{"shape":"GetPlanInRegionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves information about a Region switch plan in a specific Amazon Web Services Region. This operation is useful for getting Region-specific information about a plan.</p>"
+    },
+    "ListPlanExecutionEvents":{
+      "name":"ListPlanExecutionEvents",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListPlanExecutionEventsRequest"},
+      "output":{"shape":"ListPlanExecutionEventsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists the events that occurred during a plan execution. These events provide a detailed timeline of the execution process.</p>"
+    },
+    "ListPlanExecutions":{
+      "name":"ListPlanExecutions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListPlanExecutionsRequest"},
+      "output":{"shape":"ListPlanExecutionsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists the executions of a Region switch plan. This operation returns information about both current and historical executions.</p>"
+    },
+    "ListPlans":{
+      "name":"ListPlans",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListPlansRequest"},
+      "output":{"shape":"ListPlansResponse"},
+      "documentation":"<p>Lists all Region switch plans in your Amazon Web Services account.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "ListPlansInRegion":{
+      "name":"ListPlansInRegion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListPlansInRegionRequest"},
+      "output":{"shape":"ListPlansInRegionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all Region switch plans in your Amazon Web Services account that are available in the current Amazon Web Services Region.</p>"
+    },
+    "ListRoute53HealthChecks":{
+      "name":"ListRoute53HealthChecks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListRoute53HealthChecksRequest"},
+      "output":{"shape":"ListRoute53HealthChecksResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>List the Amazon Route 53 health checks.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the tags attached to a Region switch resource.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "StartPlanExecution":{
+      "name":"StartPlanExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartPlanExecutionRequest"},
+      "output":{"shape":"StartPlanExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"IllegalStateException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"IllegalArgumentException"}
+      ],
+      "documentation":"<p>Starts the execution of a Region switch plan. You can execute a plan in either PRACTICE or RECOVERY mode.</p> <p>In PRACTICE mode, the execution simulates the steps without making actual changes to your application's traffic routing. In RECOVERY mode, the execution performs actual changes to shift traffic between Regions.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Adds or updates tags for a Region switch resource. You can assign metadata to your resources in the form of tags, which are key-value pairs.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes tags from a Region switch resource.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "UpdatePlan":{
+      "name":"UpdatePlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdatePlanRequest"},
+      "output":{"shape":"UpdatePlanResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Updates an existing Region switch plan. You can modify the plan's description, workflows, execution role, recovery time objective, associated alarms, and triggers.</p>",
+      "staticContextParams":{
+        "UseControlPlaneEndpoint":{"value":true}
+      }
+    },
+    "UpdatePlanExecution":{
+      "name":"UpdatePlanExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdatePlanExecutionRequest"},
+      "output":{"shape":"UpdatePlanExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"IllegalStateException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates an in-progress plan execution. This operation allows you to modify certain aspects of the execution, such as adding a comment or changing the action.</p>"
+    },
+    "UpdatePlanExecutionStep":{
+      "name":"UpdatePlanExecutionStep",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdatePlanExecutionStepRequest"},
+      "output":{"shape":"UpdatePlanExecutionStepResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates a specific step in an in-progress plan execution. This operation allows you to modify the step's comment or action.</p>"
+    }
+  },
+  "shapes":{
+    "AbbreviatedExecution":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId",
+        "startTime",
+        "mode",
+        "executionState",
+        "executionAction",
+        "executionRegion"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The version for the plan.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan execution was last updated.</p>"
+        },
+        "comment":{
+          "shape":"String",
+          "documentation":"<p>An optional comment about the plan execution.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan execution was started.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan execution was ended.</p>"
+        },
+        "mode":{
+          "shape":"ExecutionMode",
+          "documentation":"<p>The plan execution mode. Valid values are <code>Practice</code>, for testing without making actual changes, or <code>Recovery</code>, for actual traffic shifting and application recovery.</p>"
+        },
+        "executionState":{
+          "shape":"ExecutionState",
+          "documentation":"<p>The plan execution state. Provides the state of a plan execution, for example, In Progress or Paused by Operator.</p>"
+        },
+        "executionAction":{
+          "shape":"ExecutionAction",
+          "documentation":"<p>The plan execution action. Valid values are <code>Activate</code>, to activate an Amazon Web Services Region, or <code>Deactivate</code>, to deactivate a Region.</p>"
+        },
+        "executionRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region for a plan execution.</p>"
+        },
+        "actualRecoveryTime":{
+          "shape":"Duration",
+          "documentation":"<p>The actual recovery time that Region switch calculates for a plan execution. Actual recovery time includes the time for the plan to run added to the time elapsed until the application health alarms that you've specified are healthy again.</p>"
+        }
+      },
+      "documentation":"<p>A summarized representation of a plan execution. This structure contains key information about an execution without all the detailed step data.</p>"
+    },
+    "AbbreviatedExecutionsList":{
+      "type":"list",
+      "member":{"shape":"AbbreviatedExecution"}
+    },
+    "AbbreviatedPlan":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "owner",
+        "name",
+        "regions",
+        "recoveryApproach"
+      ],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Region switch plan.</p>"
+        },
+        "owner":{
+          "shape":"AccountId",
+          "documentation":"<p>The owner of a Region switch plan.</p>"
+        },
+        "name":{
+          "shape":"PlanName",
+          "documentation":"<p>The name of a Region switch plan.</p>"
+        },
+        "regions":{
+          "shape":"RegionList",
+          "documentation":"<p>The Amazon Web Services Region specified for a Region switch plan.</p>"
+        },
+        "recoveryApproach":{
+          "shape":"RecoveryApproach",
+          "documentation":"<p>The recovery approach for a Region switch plan, which can be active/active (activeActive) or active/passive (activePassive).</p>"
+        },
+        "primaryRegion":{
+          "shape":"Region",
+          "documentation":"<p>The primary Region for a plan.</p>"
+        },
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The version for the plan.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan execution was last updated.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of a Region switch plan.</p>"
+        },
+        "executionRole":{
+          "shape":"String",
+          "documentation":"<p>The execution role is a way to categorize a Region switch plan. </p>"
+        },
+        "activePlanExecution":{
+          "shape":"ExecutionId",
+          "documentation":"<p>Specifies if this is the active plan execution at this time.</p>"
+        },
+        "recoveryTimeObjectiveMinutes":{
+          "shape":"AbbreviatedPlanRecoveryTimeObjectiveMinutesInteger",
+          "documentation":"<p>The recovery time objective that you've specified.</p>"
+        }
+      },
+      "documentation":"<p>A summarized representation of a Region switch plan. This structure contains key information about a plan without all the detailed workflow and step data.</p>"
+    },
+    "AbbreviatedPlanRecoveryTimeObjectiveMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10080,
+      "min":1
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>You do not have sufficient access to perform this action.</p> <p>HTTP Status Code: 403</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AccountId":{
+      "type":"string",
+      "pattern":"\\d{12}"
+    },
+    "AlarmCondition":{
+      "type":"string",
+      "enum":[
+        "red",
+        "green"
+      ]
+    },
+    "AlarmType":{
+      "type":"string",
+      "enum":[
+        "applicationHealth",
+        "trigger"
+      ]
+    },
+    "Approval":{
+      "type":"string",
+      "enum":[
+        "approve",
+        "decline"
+      ]
+    },
+    "ApprovePlanExecutionStepRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId",
+        "stepName",
+        "approval"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "stepName":{
+          "shape":"StepName",
+          "documentation":"<p>The name of a step in a plan execution.</p>"
+        },
+        "approval":{
+          "shape":"Approval",
+          "documentation":"<p>The status of approval for a plan execution step. </p>"
+        },
+        "comment":{
+          "shape":"ExecutionComment",
+          "documentation":"<p>A comment that you can enter about a plan execution.</p>"
+        }
+      }
+    },
+    "ApprovePlanExecutionStepResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "ArcRoutingControlConfiguration":{
+      "type":"structure",
+      "required":["regionAndRoutingControls"],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"ArcRoutingControlConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "regionAndRoutingControls":{
+          "shape":"RegionAndRoutingControls",
+          "documentation":"<p>The Region and ARC routing controls for the configuration.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for ARC routing controls used in a Region switch plan. Routing controls are simple on/off switches that you can use to shift traffic away from an impaired Region.</p>"
+    },
+    "ArcRoutingControlConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "ArcRoutingControlState":{
+      "type":"structure",
+      "required":[
+        "routingControlArn",
+        "state"
+      ],
+      "members":{
+        "routingControlArn":{
+          "shape":"RoutingControlArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a routing control.</p>"
+        },
+        "state":{
+          "shape":"RoutingControlStateChange",
+          "documentation":"<p>The state of an ARC routing control, On or Off.</p>"
+        }
+      },
+      "documentation":"<p>Represents the state of an ARC routing control.</p>"
+    },
+    "ArcRoutingControlStates":{
+      "type":"list",
+      "member":{"shape":"ArcRoutingControlState"}
+    },
+    "Asg":{
+      "type":"structure",
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "arn":{
+          "shape":"AsgArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the EC2 Auto Scaling group.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for an Amazon EC2 Auto Scaling group used in a Region switch plan.</p>"
+    },
+    "AsgArn":{
+      "type":"string",
+      "pattern":"arn:aws:autoscaling:[a-z0-9-]+:\\d{12}:autoScalingGroup:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:autoScalingGroupName/[\\S\\s]{1,255}"
+    },
+    "AsgList":{
+      "type":"list",
+      "member":{"shape":"Asg"},
+      "max":2,
+      "min":2
+    },
+    "AssociatedAlarm":{
+      "type":"structure",
+      "required":[
+        "resourceIdentifier",
+        "alarmType"
+      ],
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The resource identifier for alarms that you associate with a plan.</p>"
+        },
+        "alarmType":{
+          "shape":"AlarmType",
+          "documentation":"<p>The alarm type for an associated alarm. An associated CloudWatch alarm can be an application health alarm or a trigger alarm.</p>"
+        }
+      },
+      "documentation":"<p>An Amazon CloudWatch alarm associated with a Region switch plan. These alarms can be used to trigger automatic execution of the plan.</p>"
+    },
+    "AssociatedAlarmMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"AssociatedAlarm"}
+    },
+    "AuroraClusterArn":{"type":"string"},
+    "AuroraClusterArns":{
+      "type":"list",
+      "member":{"shape":"AuroraClusterArn"}
+    },
+    "CancelPlanExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "comment":{
+          "shape":"ExecutionComment",
+          "documentation":"<p>A comment that you can enter about canceling a plan execution step.</p>"
+        }
+      }
+    },
+    "CancelPlanExecutionResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "CreatePlanRequest":{
+      "type":"structure",
+      "required":[
+        "workflows",
+        "executionRole",
+        "name",
+        "regions",
+        "recoveryApproach"
+      ],
+      "members":{
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of a Region switch plan.</p>"
+        },
+        "workflows":{
+          "shape":"WorkflowList",
+          "documentation":"<p>An array of workflows included in a Region switch plan.</p>"
+        },
+        "executionRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>An execution role is a way to categorize a Region switch plan.</p>"
+        },
+        "recoveryTimeObjectiveMinutes":{
+          "shape":"CreatePlanRequestRecoveryTimeObjectiveMinutesInteger",
+          "documentation":"<p>Optionally, you can specify an recovery time objective for a Region switch plan, in minutes.</p>"
+        },
+        "associatedAlarms":{
+          "shape":"AssociatedAlarmMap",
+          "documentation":"<p>The alarms associated with a Region switch plan.</p>"
+        },
+        "triggers":{
+          "shape":"TriggerList",
+          "documentation":"<p>The triggers associated with a Region switch plan.</p>"
+        },
+        "name":{
+          "shape":"PlanName",
+          "documentation":"<p>The name of a Region switch plan.</p>"
+        },
+        "regions":{
+          "shape":"RegionList",
+          "documentation":"<p>An array that specifies the Amazon Web Services Regions for a Region switch plan. Specify two Regions.</p>"
+        },
+        "recoveryApproach":{
+          "shape":"RecoveryApproach",
+          "documentation":"<p>The recovery approach for a Region switch plan, which can be active/active (activeActive) or active/passive (activePassive).</p>"
+        },
+        "primaryRegion":{
+          "shape":"Region",
+          "documentation":"<p>The primary Amazon Web Services Region for the application. This is the Region where the application normally runs before any Region switch occurs.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags to apply to the Region switch plan.</p>"
+        }
+      }
+    },
+    "CreatePlanRequestRecoveryTimeObjectiveMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10080,
+      "min":1
+    },
+    "CreatePlanResponse":{
+      "type":"structure",
+      "members":{
+        "plan":{
+          "shape":"Plan",
+          "documentation":"<p>The details of the created Region switch plan.</p>"
+        }
+      }
+    },
+    "CustomActionLambdaConfiguration":{
+      "type":"structure",
+      "required":[
+        "lambdas",
+        "retryIntervalMinutes",
+        "regionToRun"
+      ],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"CustomActionLambdaConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "lambdas":{
+          "shape":"LambdaList",
+          "documentation":"<p>The Amazon Web Services Lambda functions for the execution block.</p>"
+        },
+        "retryIntervalMinutes":{
+          "shape":"Float",
+          "documentation":"<p>The retry interval specified.</p>"
+        },
+        "regionToRun":{
+          "shape":"RegionToRunIn",
+          "documentation":"<p>The Amazon Web Services Region for the function to run in.</p>"
+        },
+        "ungraceful":{
+          "shape":"LambdaUngraceful",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for Amazon Web Services Lambda functions that perform custom actions during a Region switch.</p>"
+    },
+    "CustomActionLambdaConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "DeletePlanRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        }
+      }
+    },
+    "DeletePlanResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "Duration":{
+      "type":"string",
+      "pattern":"P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?"
+    },
+    "Ec2AsgCapacityIncreaseConfiguration":{
+      "type":"structure",
+      "required":["asgs"],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"Ec2AsgCapacityIncreaseConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "asgs":{
+          "shape":"AsgList",
+          "documentation":"<p>The EC2 Auto Scaling groups for the configuration.</p>"
+        },
+        "ungraceful":{
+          "shape":"Ec2Ungraceful",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        },
+        "targetPercent":{
+          "shape":"Integer",
+          "documentation":"<p>The target percentage that you specify for EC2 Auto Scaling groups.</p>"
+        },
+        "capacityMonitoringApproach":{
+          "shape":"Ec2AsgCapacityMonitoringApproach",
+          "documentation":"<p>The monitoring approach that you specify EC2 Auto Scaling groups for the configuration.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for increasing the capacity of Amazon EC2 Auto Scaling groups during a Region switch.</p>"
+    },
+    "Ec2AsgCapacityIncreaseConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "Ec2AsgCapacityMonitoringApproach":{
+      "type":"string",
+      "enum":[
+        "sampledMaxInLast24Hours",
+        "autoscalingMaxInLast24Hours"
+      ]
+    },
+    "Ec2Ungraceful":{
+      "type":"structure",
+      "required":["minimumSuccessPercentage"],
+      "members":{
+        "minimumSuccessPercentage":{
+          "shape":"Ec2UngracefulMinimumSuccessPercentageInteger",
+          "documentation":"<p>The minimum success percentage that you specify for EC2 Auto Scaling groups.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for handling failures when performing operations on EC2 resources.</p>"
+    },
+    "Ec2UngracefulMinimumSuccessPercentageInteger":{
+      "type":"integer",
+      "box":true,
+      "max":99,
+      "min":0
+    },
+    "EcsCapacityIncreaseConfiguration":{
+      "type":"structure",
+      "required":["services"],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"EcsCapacityIncreaseConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "services":{
+          "shape":"ServiceList",
+          "documentation":"<p>The services specified for the configuration.</p>"
+        },
+        "ungraceful":{
+          "shape":"EcsUngraceful",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        },
+        "targetPercent":{
+          "shape":"Integer",
+          "documentation":"<p>The target percentage specified for the configuration.</p>"
+        },
+        "capacityMonitoringApproach":{
+          "shape":"EcsCapacityMonitoringApproach",
+          "documentation":"<p>The monitoring approach specified for the configuration, for example, <code>Most_Recent</code>.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for an Amazon Web Services ECS capacity increase.</p>"
+    },
+    "EcsCapacityIncreaseConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "EcsCapacityMonitoringApproach":{
+      "type":"string",
+      "enum":[
+        "sampledMaxInLast24Hours",
+        "containerInsightsMaxInLast24Hours"
+      ]
+    },
+    "EcsClusterArn":{
+      "type":"string",
+      "pattern":"arn:aws:ecs:[a-z0-9-]+:\\d{12}:cluster/[a-zA-Z0-9_-]{1,255}"
+    },
+    "EcsServiceArn":{
+      "type":"string",
+      "pattern":"arn:aws:ecs:[a-z0-9-]+:\\d{12}:service/[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]{1,255}"
+    },
+    "EcsUngraceful":{
+      "type":"structure",
+      "required":["minimumSuccessPercentage"],
+      "members":{
+        "minimumSuccessPercentage":{
+          "shape":"EcsUngracefulMinimumSuccessPercentageInteger",
+          "documentation":"<p>The minimum success percentage specified for the configuration.</p>"
+        }
+      },
+      "documentation":"<p>The settings for ungraceful execution.</p>"
+    },
+    "EcsUngracefulMinimumSuccessPercentageInteger":{
+      "type":"integer",
+      "box":true,
+      "max":99,
+      "min":0
+    },
+    "EksCapacityMonitoringApproach":{
+      "type":"string",
+      "enum":["sampledMaxInLast24Hours"]
+    },
+    "EksCluster":{
+      "type":"structure",
+      "required":["clusterArn"],
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "clusterArn":{
+          "shape":"EksClusterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of an Amazon Web Services EKS cluster.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Web Services EKS cluster execution block configuration.</p>"
+    },
+    "EksClusterArn":{
+      "type":"string",
+      "pattern":"arn:aws[a-zA-Z-]*:eks:[a-z0-9-]+:\\d{12}:cluster/[a-zA-Z0-9][a-zA-Z0-9-_]{0,99}"
+    },
+    "EksClusters":{
+      "type":"list",
+      "member":{"shape":"EksCluster"},
+      "min":2
+    },
+    "EksResourceScalingConfiguration":{
+      "type":"structure",
+      "required":["kubernetesResourceType"],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"EksResourceScalingConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "kubernetesResourceType":{
+          "shape":"KubernetesResourceType",
+          "documentation":"<p>The Kubernetes resource type for the configuration.</p>"
+        },
+        "scalingResources":{
+          "shape":"KubernetesScalingApps",
+          "documentation":"<p>The scaling resources for the configuration.</p>"
+        },
+        "eksClusters":{
+          "shape":"EksClusters",
+          "documentation":"<p>The clusters for the configuration.</p>"
+        },
+        "ungraceful":{
+          "shape":"EksResourceScalingUngraceful",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        },
+        "targetPercent":{
+          "shape":"EksResourceScalingConfigurationTargetPercentInteger",
+          "documentation":"<p>The target percentage for the configuration.</p>"
+        },
+        "capacityMonitoringApproach":{
+          "shape":"EksCapacityMonitoringApproach",
+          "documentation":"<p>The monitoring approach for the configuration, that is, whether it was sampled in the last 24 hours or autoscaled in the last 24 hours.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Web Services EKS resource scaling configuration.</p>"
+    },
+    "EksResourceScalingConfigurationTargetPercentInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "EksResourceScalingConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "EksResourceScalingUngraceful":{
+      "type":"structure",
+      "required":["minimumSuccessPercentage"],
+      "members":{
+        "minimumSuccessPercentage":{
+          "shape":"EksResourceScalingUngracefulMinimumSuccessPercentageInteger",
+          "documentation":"<p>The minimum success percentage for the configuration.</p>"
+        }
+      },
+      "documentation":"<p>The ungraceful settings for Amazon Web Services EKS resource scaling.</p>"
+    },
+    "EksResourceScalingUngracefulMinimumSuccessPercentageInteger":{
+      "type":"integer",
+      "box":true,
+      "max":99,
+      "min":0
+    },
+    "EvaluationStatus":{
+      "type":"string",
+      "enum":[
+        "passed",
+        "actionRequired",
+        "pendingEvaluation",
+        "unknown"
+      ]
+    },
+    "ExecutionAction":{
+      "type":"string",
+      "enum":[
+        "activate",
+        "deactivate"
+      ]
+    },
+    "ExecutionApprovalConfiguration":{
+      "type":"structure",
+      "required":["approvalRole"],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"ExecutionApprovalConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "approvalRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM approval role for the configuration.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for approval steps in a Region switch plan execution. Approval steps require manual intervention before the execution can proceed.</p>"
+    },
+    "ExecutionApprovalConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "ExecutionBlockConfiguration":{
+      "type":"structure",
+      "members":{
+        "customActionLambdaConfig":{
+          "shape":"CustomActionLambdaConfiguration",
+          "documentation":"<p>An Amazon Web Services Lambda execution block.</p>"
+        },
+        "ec2AsgCapacityIncreaseConfig":{
+          "shape":"Ec2AsgCapacityIncreaseConfiguration",
+          "documentation":"<p>An EC2 Auto Scaling group execution block.</p>"
+        },
+        "executionApprovalConfig":{
+          "shape":"ExecutionApprovalConfiguration",
+          "documentation":"<p>A manual approval execution block.</p>"
+        },
+        "arcRoutingControlConfig":{
+          "shape":"ArcRoutingControlConfiguration",
+          "documentation":"<p>An ARC routing control execution block.</p>"
+        },
+        "globalAuroraConfig":{
+          "shape":"GlobalAuroraConfiguration",
+          "documentation":"<p>An Aurora Global Database execution block.</p>"
+        },
+        "parallelConfig":{
+          "shape":"ParallelExecutionBlockConfiguration",
+          "documentation":"<p>A parallel configuration execution block.</p>"
+        },
+        "regionSwitchPlanConfig":{
+          "shape":"RegionSwitchPlanConfiguration",
+          "documentation":"<p>A Region switch plan execution block.</p>"
+        },
+        "ecsCapacityIncreaseConfig":{
+          "shape":"EcsCapacityIncreaseConfiguration",
+          "documentation":"<p>The capacity increase specified for the configuration.</p>"
+        },
+        "eksResourceScalingConfig":{
+          "shape":"EksResourceScalingConfiguration",
+          "documentation":"<p>An Amazon Web Services EKS resource scaling execution block.</p>"
+        },
+        "route53HealthCheckConfig":{
+          "shape":"Route53HealthCheckConfiguration",
+          "documentation":"<p>The Amazon Route 53 health check configuration.</p>"
+        }
+      },
+      "documentation":"<p>Execution block configurations for a workflow in a Region switch plan. An execution block represents a specific type of action to perform during a Region switch.</p>",
+      "union":true
+    },
+    "ExecutionBlockType":{
+      "type":"string",
+      "enum":[
+        "CustomActionLambda",
+        "ManualApproval",
+        "AuroraGlobalDatabase",
+        "EC2AutoScaling",
+        "ARCRoutingControl",
+        "ARCRegionSwitchPlan",
+        "Parallel",
+        "ECSServiceScaling",
+        "EKSResourceScaling",
+        "Route53HealthCheck"
+      ]
+    },
+    "ExecutionComment":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ExecutionEvent":{
+      "type":"structure",
+      "required":["eventId"],
+      "members":{
+        "timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp for an execution event.</p>"
+        },
+        "type":{
+          "shape":"ExecutionEventType",
+          "documentation":"<p>The type of an execution event.</p>"
+        },
+        "stepName":{
+          "shape":"StepName",
+          "documentation":"<p>The step name for an execution event.</p>"
+        },
+        "executionBlockType":{
+          "shape":"ExecutionBlockType",
+          "documentation":"<p>The execution block type for an execution event.</p>"
+        },
+        "resources":{
+          "shape":"Resources",
+          "documentation":"<p>The resources for an execution event.</p>"
+        },
+        "error":{
+          "shape":"String",
+          "documentation":"<p>Errors for an execution event.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description for an execution event.</p>"
+        },
+        "eventId":{
+          "shape":"String",
+          "documentation":"<p>The event ID for an execution event.</p>"
+        },
+        "previousEventId":{
+          "shape":"String",
+          "documentation":"<p>The event ID of the previous execution event.</p>"
+        }
+      },
+      "documentation":"<p>Represents an event that occurred during a plan execution. These events provide a detailed timeline of the execution process.</p>"
+    },
+    "ExecutionEventList":{
+      "type":"list",
+      "member":{"shape":"ExecutionEvent"}
+    },
+    "ExecutionEventType":{
+      "type":"string",
+      "enum":[
+        "unknown",
+        "executionPending",
+        "executionStarted",
+        "executionSucceeded",
+        "executionFailed",
+        "executionPausing",
+        "executionPaused",
+        "executionCanceling",
+        "executionCanceled",
+        "executionPendingApproval",
+        "executionBehaviorChangedToUngraceful",
+        "executionBehaviorChangedToGraceful",
+        "executionPendingChildPlanManualApproval",
+        "executionSuccessMonitoringApplicationHealth",
+        "stepStarted",
+        "stepUpdate",
+        "stepSucceeded",
+        "stepFailed",
+        "stepSkipped",
+        "stepPausedByError",
+        "stepPausedByOperator",
+        "stepCanceled",
+        "stepPendingApproval",
+        "stepExecutionBehaviorChangedToUngraceful",
+        "stepPendingApplicationHealthMonitor"
+      ]
+    },
+    "ExecutionId":{"type":"string"},
+    "ExecutionMode":{
+      "type":"string",
+      "enum":[
+        "graceful",
+        "ungraceful"
+      ]
+    },
+    "ExecutionState":{
+      "type":"string",
+      "enum":[
+        "inProgress",
+        "pausedByFailedStep",
+        "pausedByOperator",
+        "completed",
+        "completedWithExceptions",
+        "canceled",
+        "planExecutionTimedOut",
+        "pendingManualApproval",
+        "failed",
+        "pending",
+        "completedMonitoringApplicationHealth"
+      ]
+    },
+    "Float":{
+      "type":"float",
+      "box":true
+    },
+    "GetPlanEvaluationStatusRequest":{
+      "type":"structure",
+      "required":["planArn"],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Region switch plan to retrieve evaluation status for.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "GetPlanEvaluationStatusResponse":{
+      "type":"structure",
+      "required":["planArn"],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "lastEvaluationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time of the last time that Region switch ran an evaluation of the plan.</p>"
+        },
+        "lastEvaluatedVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the last evaluation of the plan.</p>"
+        },
+        "region":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Web Services Region for the plan.</p>"
+        },
+        "evaluationState":{
+          "shape":"EvaluationStatus",
+          "documentation":"<p>The evaluation state for the plan.</p>"
+        },
+        "warnings":{
+          "shape":"PlanWarnings",
+          "documentation":"<p>The current evaluation warnings for the plan. </p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "GetPlanExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan with the execution to retrieve.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "maxResults":{
+          "shape":"GetPlanExecutionStepStatesMaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "GetPlanExecutionResponse":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId",
+        "startTime",
+        "mode",
+        "executionState",
+        "executionAction",
+        "executionRegion"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The version for the plan.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan execution was last updated.</p>"
+        },
+        "comment":{
+          "shape":"String",
+          "documentation":"<p>A comment included on the plan execution.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time (UTC) when the plan execution started.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time (UTC) when the plan execution ended.</p>"
+        },
+        "mode":{
+          "shape":"ExecutionMode",
+          "documentation":"<p>The plan execution mode. Valid values are <code>Practice</code>, for testing without making actual changes, or <code>Recovery</code>, for actual traffic shifting and application recovery.</p>"
+        },
+        "executionState":{
+          "shape":"ExecutionState",
+          "documentation":"<p>The plan execution state. Provides the state of a plan execution, for example, In Progress or Paused by Operator.</p>"
+        },
+        "executionAction":{
+          "shape":"ExecutionAction",
+          "documentation":"<p>The plan execution action. Valid values are <code>Activate</code>, to activate an Amazon Web Services Region, or <code>Deactivate</code>, to deactivate a Region.</p>"
+        },
+        "executionRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region for a plan execution.</p>"
+        },
+        "stepStates":{
+          "shape":"StepStates",
+          "documentation":"<p>The states of the steps in the plan execution.</p>"
+        },
+        "plan":{
+          "shape":"Plan",
+          "documentation":"<p>The details of the Region switch plan.</p>"
+        },
+        "actualRecoveryTime":{
+          "shape":"Duration",
+          "documentation":"<p>The actual recovery time that Region switch calculates for a plan execution. Actual recovery time includes the time for the plan to run added to the time elapsed until the application health alarms that you've specified are healthy again.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "GetPlanExecutionStepStatesMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "GetPlanInRegionRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan in Region.</p>"
+        }
+      }
+    },
+    "GetPlanInRegionResponse":{
+      "type":"structure",
+      "members":{
+        "plan":{
+          "shape":"Plan",
+          "documentation":"<p>The details of the Region switch plan.</p>"
+        }
+      }
+    },
+    "GetPlanRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        }
+      }
+    },
+    "GetPlanResponse":{
+      "type":"structure",
+      "members":{
+        "plan":{
+          "shape":"Plan",
+          "documentation":"<p>The detailed information about the requested Region switch plan.</p>"
+        }
+      }
+    },
+    "GlobalAuroraConfiguration":{
+      "type":"structure",
+      "required":[
+        "behavior",
+        "globalClusterIdentifier",
+        "databaseClusterArns"
+      ],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"GlobalAuroraConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The timeout value specified for the configuration.</p>"
+        },
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "behavior":{
+          "shape":"GlobalAuroraDefaultBehavior",
+          "documentation":"<p>The behavior for a global database, that is, only allow switchover or also allow failover.</p>"
+        },
+        "ungraceful":{
+          "shape":"GlobalAuroraUngraceful",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        },
+        "globalClusterIdentifier":{
+          "shape":"GlobalClusterIdentifier",
+          "documentation":"<p>The global cluster identifier for a global database.</p>"
+        },
+        "databaseClusterArns":{
+          "shape":"AuroraClusterArns",
+          "documentation":"<p>The database cluster Amazon Resource Names (ARNs) for a global database.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for Amazon Aurora global databases used in a Region switch plan.</p>"
+    },
+    "GlobalAuroraConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "GlobalAuroraDefaultBehavior":{
+      "type":"string",
+      "enum":[
+        "switchoverOnly",
+        "failover"
+      ]
+    },
+    "GlobalAuroraUngraceful":{
+      "type":"structure",
+      "members":{
+        "ungraceful":{
+          "shape":"GlobalAuroraUngracefulBehavior",
+          "documentation":"<p>The settings for ungraceful execution.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for handling failures when performing operations on Aurora global databases.</p>"
+    },
+    "GlobalAuroraUngracefulBehavior":{
+      "type":"string",
+      "enum":["failover"]
+    },
+    "GlobalClusterIdentifier":{"type":"string"},
+    "IamRoleArn":{
+      "type":"string",
+      "pattern":"arn:aws[a-zA-Z0-9-]*:iam::[0-9]{12}:role/.+"
+    },
+    "IllegalArgumentException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request processing has an invalid argument.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "IllegalStateException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The operation failed because the current state of the resource doesn't allow the operation to proceed.</p> <p>HTTP Status Code: 400</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request processing has failed because of an unknown error, exception, or failure.</p> <p>HTTP Status Code: 500</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "KubernetesNamespace":{
+      "type":"string",
+      "pattern":"[a-z0-9][a-z0-9-]{0,61}[a-z0-9]"
+    },
+    "KubernetesResourceType":{
+      "type":"structure",
+      "required":[
+        "apiVersion",
+        "kind"
+      ],
+      "members":{
+        "apiVersion":{
+          "shape":"String",
+          "documentation":"<p>The API version type for the Kubernetes resource.</p>"
+        },
+        "kind":{
+          "shape":"String",
+          "documentation":"<p>The kind for the Kubernetes resource.</p>"
+        }
+      },
+      "documentation":"<p>Defines the type of Kubernetes resource to scale in an Amazon EKS cluster.</p>"
+    },
+    "KubernetesScalingApplication":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"RegionalScalingResource"}
+    },
+    "KubernetesScalingApps":{
+      "type":"list",
+      "member":{"shape":"KubernetesScalingApplication"},
+      "min":1
+    },
+    "KubernetesScalingResource":{
+      "type":"structure",
+      "required":[
+        "namespace",
+        "name"
+      ],
+      "members":{
+        "namespace":{
+          "shape":"KubernetesNamespace",
+          "documentation":"<p>The namespace for the Kubernetes resource.</p>"
+        },
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name for the Kubernetes resource.</p>"
+        },
+        "hpaName":{
+          "shape":"String",
+          "documentation":"<p>The hpaname for the Kubernetes resource.</p>"
+        }
+      },
+      "documentation":"<p>Defines a Kubernetes resource to scale in an Amazon EKS cluster.</p>"
+    },
+    "LambdaArn":{"type":"string"},
+    "LambdaList":{
+      "type":"list",
+      "member":{"shape":"Lambdas"},
+      "max":2,
+      "min":1
+    },
+    "LambdaUngraceful":{
+      "type":"structure",
+      "members":{
+        "behavior":{
+          "shape":"LambdaUngracefulBehavior",
+          "documentation":"<p>The ungraceful behavior for a Lambda function, which must be set to <code>skip</code>.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for handling failures when invoking Lambda functions.</p>"
+    },
+    "LambdaUngracefulBehavior":{
+      "type":"string",
+      "enum":["skip"]
+    },
+    "Lambdas":{
+      "type":"structure",
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "arn":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for Amazon Web Services Lambda functions used in a Region switch plan.</p>"
+    },
+    "ListExecutionEventsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListExecutionsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListPlanExecutionEventsRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "maxResults":{
+          "shape":"ListExecutionEventsMaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        },
+        "name":{
+          "shape":"StepName",
+          "documentation":"<p>The name of the plan execution event.</p>"
+        }
+      }
+    },
+    "ListPlanExecutionEventsResponse":{
+      "type":"structure",
+      "members":{
+        "items":{
+          "shape":"ExecutionEventList",
+          "documentation":"<p>The items in the plan execution event.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListPlanExecutionsRequest":{
+      "type":"structure",
+      "required":["planArn"],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The ARN for the plan.</p>"
+        },
+        "maxResults":{
+          "shape":"ListExecutionsMaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        },
+        "state":{
+          "shape":"ExecutionState",
+          "documentation":"<p>The state of the plan execution. For example, the plan execution might be In Progress.</p>"
+        }
+      }
+    },
+    "ListPlanExecutionsResponse":{
+      "type":"structure",
+      "members":{
+        "items":{
+          "shape":"AbbreviatedExecutionsList",
+          "documentation":"<p>The items in the plan execution to return.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListPlansInRegionRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListPlansInRegionResponse":{
+      "type":"structure",
+      "members":{
+        "plans":{
+          "shape":"PlanList",
+          "documentation":"<p>The plans that were requested.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListPlansRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListPlansResponse":{
+      "type":"structure",
+      "members":{
+        "plans":{
+          "shape":"PlanList",
+          "documentation":"<p>The plans that were requested.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListRoute53HealthChecksRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Route 53 health check request.</p>"
+        },
+        "hostedZoneId":{
+          "shape":"Route53HostedZoneId",
+          "documentation":"<p>The hosted zone ID for the health checks.</p>"
+        },
+        "recordName":{
+          "shape":"Route53RecordName",
+          "documentation":"<p>The record name for the health checks.</p>"
+        },
+        "maxResults":{
+          "shape":"ListRoute53HealthChecksRequestMaxResultsInteger",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListRoute53HealthChecksRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":10
+    },
+    "ListRoute53HealthChecksResponse":{
+      "type":"structure",
+      "members":{
+        "healthChecks":{
+          "shape":"Route53HealthCheckList",
+          "documentation":"<p>List of the health checks requested.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "resourceTags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags for a resource.</p>"
+        }
+      }
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "MinimalWorkflow":{
+      "type":"structure",
+      "members":{
+        "action":{
+          "shape":"ExecutionAction",
+          "documentation":"<p>The action for a minimal workflow, which can be Activate or Deactivate.</p>"
+        },
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name for a minimal workflow</p>"
+        }
+      },
+      "documentation":"<p>A simplified representation of a workflow in a Region switch plan.</p>"
+    },
+    "NextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "ParallelExecutionBlockConfiguration":{
+      "type":"structure",
+      "required":["steps"],
+      "members":{
+        "steps":{
+          "shape":"Steps",
+          "documentation":"<p>The steps for a parallel execution block.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for steps that should be executed in parallel during a Region switch.</p>"
+    },
+    "Plan":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "workflows",
+        "executionRole",
+        "name",
+        "regions",
+        "recoveryApproach",
+        "owner"
+      ],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description for a plan.</p>"
+        },
+        "workflows":{
+          "shape":"WorkflowList",
+          "documentation":"<p>The workflows for a plan.</p>"
+        },
+        "executionRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The execution role for a plan.</p>"
+        },
+        "recoveryTimeObjectiveMinutes":{
+          "shape":"PlanRecoveryTimeObjectiveMinutesInteger",
+          "documentation":"<p>The recovery time objective for a plan.</p>"
+        },
+        "associatedAlarms":{
+          "shape":"AssociatedAlarmMap",
+          "documentation":"<p>The associated application health alarms for a plan.</p>"
+        },
+        "triggers":{
+          "shape":"TriggerList",
+          "documentation":"<p>The triggers for a plan.</p>"
+        },
+        "name":{
+          "shape":"PlanName",
+          "documentation":"<p>The name for a plan.</p>"
+        },
+        "regions":{
+          "shape":"RegionList",
+          "documentation":"<p>The Amazon Web Services Regions for a plan.</p>"
+        },
+        "recoveryApproach":{
+          "shape":"RecoveryApproach",
+          "documentation":"<p>The recovery approach for a Region switch plan, which can be active/active (activeActive) or active/passive (activePassive).</p>"
+        },
+        "primaryRegion":{
+          "shape":"Region",
+          "documentation":"<p>The primary Region for a plan.</p>"
+        },
+        "owner":{
+          "shape":"AccountId",
+          "documentation":"<p>The owner of a plan.</p>"
+        },
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The version for the plan.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the plan was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Represents a Region switch plan. A plan defines the steps required to shift traffic from one Amazon Web Services Region to another.</p>"
+    },
+    "PlanArn":{
+      "type":"string",
+      "pattern":"arn:aws[a-zA-Z-]*:arc-region-switch::[0-9]{12}:plan/([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,30}[a-zA-Z0-9])?):([a-z0-9]{6})"
+    },
+    "PlanList":{
+      "type":"list",
+      "member":{"shape":"AbbreviatedPlan"}
+    },
+    "PlanName":{
+      "type":"string",
+      "max":32,
+      "min":1,
+      "pattern":"[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,30}[a-zA-Z0-9])?"
+    },
+    "PlanRecoveryTimeObjectiveMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10080,
+      "min":1
+    },
+    "PlanWarnings":{
+      "type":"list",
+      "member":{"shape":"ResourceWarning"}
+    },
+    "RecoveryApproach":{
+      "type":"string",
+      "enum":[
+        "activeActive",
+        "activePassive"
+      ]
+    },
+    "Region":{
+      "type":"string",
+      "pattern":"[a-z]{2}-[a-z-]+-\\d+"
+    },
+    "RegionAndRoutingControls":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"ArcRoutingControlStates"}
+    },
+    "RegionList":{
+      "type":"list",
+      "member":{"shape":"Region"},
+      "max":2,
+      "min":2
+    },
+    "RegionSwitchPlanConfiguration":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan configuration.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for nested Region switch plans. This allows one Region switch plan to trigger another plan as part of its execution.</p>"
+    },
+    "RegionToRunIn":{
+      "type":"string",
+      "enum":[
+        "activatingRegion",
+        "deactivatingRegion"
+      ]
+    },
+    "RegionalScalingResource":{
+      "type":"map",
+      "key":{"shape":"Region"},
+      "value":{"shape":"KubernetesScalingResource"}
+    },
+    "ResourceArn":{"type":"string"},
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The specified resource was not found.</p> <p>HTTP Status Code: 404</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ResourceWarning":{
+      "type":"structure",
+      "required":[
+        "version",
+        "warningStatus",
+        "warningUpdatedTime",
+        "warningMessage"
+      ],
+      "members":{
+        "workflow":{
+          "shape":"MinimalWorkflow",
+          "documentation":"<p>The workflow for the resource warning.</p>"
+        },
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The version for the resource warning.</p>"
+        },
+        "stepName":{
+          "shape":"StepName",
+          "documentation":"<p>The name of the step for the resource warning.</p>"
+        },
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "warningStatus":{
+          "shape":"ResourceWarningStatus",
+          "documentation":"<p>The status of the resource warning.</p>"
+        },
+        "warningUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the warning was last updated.</p>"
+        },
+        "warningMessage":{
+          "shape":"String",
+          "documentation":"<p>The warning message about what needs to be corrected.</p>"
+        }
+      },
+      "documentation":"<p>Represents a warning about a resource in a Region switch plan.</p>"
+    },
+    "ResourceWarningStatus":{
+      "type":"string",
+      "enum":[
+        "active",
+        "resolved"
+      ]
+    },
+    "Resources":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "RoleArn":{"type":"string"},
+    "Route53HealthCheck":{
+      "type":"structure",
+      "required":[
+        "hostedZoneId",
+        "recordName",
+        "region"
+      ],
+      "members":{
+        "hostedZoneId":{
+          "shape":"Route53HostedZoneId",
+          "documentation":"<p>The Amazon Route 53 health check hosted zone ID.</p>"
+        },
+        "recordName":{
+          "shape":"Route53RecordName",
+          "documentation":"<p>The Amazon Route 53 record name.</p>"
+        },
+        "healthCheckId":{
+          "shape":"Route53HealthCheckId",
+          "documentation":"<p>The Amazon Route 53 health check ID.</p>"
+        },
+        "region":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Route 53 Region.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Route 53 health check.</p>"
+    },
+    "Route53HealthCheckConfiguration":{
+      "type":"structure",
+      "required":[
+        "hostedZoneId",
+        "recordName"
+      ],
+      "members":{
+        "timeoutMinutes":{
+          "shape":"Route53HealthCheckConfigurationTimeoutMinutesInteger",
+          "documentation":"<p>The Amazon Route 53 health check configuration time out (in minutes).</p>"
+        },
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for the configuration.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the configuration.</p>"
+        },
+        "hostedZoneId":{
+          "shape":"Route53HostedZoneId",
+          "documentation":"<p>The Amazon Route 53 health check configuration hosted zone ID.</p>"
+        },
+        "recordName":{
+          "shape":"Route53RecordName",
+          "documentation":"<p>The Amazon Route 53 health check configuration record name.</p>"
+        },
+        "recordSets":{
+          "shape":"Route53ResourceRecordSetList",
+          "documentation":"<p>The Amazon Route 53 health check configuration record sets.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Route 53 health check configuration.</p>"
+    },
+    "Route53HealthCheckConfigurationTimeoutMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "Route53HealthCheckId":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "Route53HealthCheckList":{
+      "type":"list",
+      "member":{"shape":"Route53HealthCheck"}
+    },
+    "Route53HostedZoneId":{
+      "type":"string",
+      "max":32,
+      "min":1
+    },
+    "Route53RecordName":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "Route53ResourceRecordSet":{
+      "type":"structure",
+      "members":{
+        "recordSetIdentifier":{
+          "shape":"Route53ResourceRecordSetIdentifier",
+          "documentation":"<p>The Amazon Route 53 record set identifier.</p>"
+        },
+        "region":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Route 53 record set Region.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Route 53 record set.</p>"
+    },
+    "Route53ResourceRecordSetIdentifier":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "Route53ResourceRecordSetList":{
+      "type":"list",
+      "member":{"shape":"Route53ResourceRecordSet"}
+    },
+    "RoutingControlArn":{"type":"string"},
+    "RoutingControlStateChange":{
+      "type":"string",
+      "enum":[
+        "On",
+        "Off"
+      ]
+    },
+    "Service":{
+      "type":"structure",
+      "members":{
+        "crossAccountRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The cross account role for a service.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The external ID (secret key) for the service.</p>"
+        },
+        "clusterArn":{
+          "shape":"EcsClusterArn",
+          "documentation":"<p>The cluster Amazon Resource Name (ARN) for a service.</p>"
+        },
+        "serviceArn":{
+          "shape":"EcsServiceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) for a service.</p>"
+        }
+      },
+      "documentation":"<p>The service for a cross account role.</p>"
+    },
+    "ServiceList":{
+      "type":"list",
+      "member":{"shape":"Service"},
+      "max":2,
+      "min":2
+    },
+    "StartPlanExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "targetRegion",
+        "action"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan to execute.</p>"
+        },
+        "targetRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region to target with this execution. This is the Region that traffic will be shifted to or from, depending on the action.</p>"
+        },
+        "action":{
+          "shape":"ExecutionAction",
+          "documentation":"<p>The action to perform. Valid values are ACTIVATE (to shift traffic to the target Region) or DEACTIVATE (to shift traffic away from the target Region).</p>"
+        },
+        "mode":{
+          "shape":"ExecutionMode",
+          "documentation":"<p>The plan execution mode. Valid values are <code>Practice</code>, for testing without making actual changes, or <code>Recovery</code>, for actual traffic shifting and application recovery.</p>"
+        },
+        "comment":{
+          "shape":"ExecutionComment",
+          "documentation":"<p>An optional comment explaining why the plan execution is being started.</p>"
+        },
+        "latestVersion":{
+          "shape":"String",
+          "documentation":"<p>A boolean value indicating whether to use the latest version of the plan. If set to false, you must specify a specific version.</p>"
+        }
+      }
+    },
+    "StartPlanExecutionResponse":{
+      "type":"structure",
+      "members":{
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "plan":{
+          "shape":"PlanArn",
+          "documentation":"<p>The details of the Region switch plan.</p>"
+        },
+        "planVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the plan, a unique number generated by Region switch.</p>"
+        },
+        "activateRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region to activate.</p>"
+        },
+        "deactivateRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region to deactivate.</p>"
+        }
+      }
+    },
+    "Step":{
+      "type":"structure",
+      "required":[
+        "name",
+        "executionBlockConfiguration",
+        "executionBlockType"
+      ],
+      "members":{
+        "name":{
+          "shape":"StepName",
+          "documentation":"<p>The name of a step in a workflow.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of a step in a workflow.</p>"
+        },
+        "executionBlockConfiguration":{
+          "shape":"ExecutionBlockConfiguration",
+          "documentation":"<p>The configuration for an execution block in a workflow.</p>"
+        },
+        "executionBlockType":{
+          "shape":"ExecutionBlockType",
+          "documentation":"<p>The type of an execution block in a workflow.</p>"
+        }
+      },
+      "documentation":"<p>Represents a step in a Region switch plan workflow. Each step performs a specific action during the Region switch process.</p>"
+    },
+    "StepName":{"type":"string"},
+    "StepState":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"StepName",
+          "documentation":"<p>The name of a step in a workflow.</p>"
+        },
+        "status":{
+          "shape":"StepStatus",
+          "documentation":"<p>The status of a step in a workflow. For example, a status might be Completed or Pending Approval.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when a step started execution.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when a step endeded execution.</p>"
+        },
+        "stepMode":{
+          "shape":"ExecutionMode",
+          "documentation":"<p>The mode for a step execution. The mode can be Graceful or Ungraceful.</p>"
+        }
+      },
+      "documentation":"<p>Represents the state of a step in a plan execution.</p>"
+    },
+    "StepStates":{
+      "type":"list",
+      "member":{"shape":"StepState"}
+    },
+    "StepStatus":{
+      "type":"string",
+      "enum":[
+        "notStarted",
+        "running",
+        "failed",
+        "completed",
+        "canceled",
+        "skipped",
+        "pendingApproval"
+      ]
+    },
+    "Steps":{
+      "type":"list",
+      "member":{"shape":"Step"}
+    },
+    "String":{"type":"string"},
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeys":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "tags"
+      ],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) for a tag that you add to a resource.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>Tags that you add to a resource. You can add a maximum of 50 tags in Region switch.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "Tags":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":200,
+      "min":0
+    },
+    "Timestamp":{"type":"timestamp"},
+    "Trigger":{
+      "type":"structure",
+      "required":[
+        "targetRegion",
+        "action",
+        "conditions",
+        "minDelayMinutesBetweenExecutions"
+      ],
+      "members":{
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description for a trigger.</p>"
+        },
+        "targetRegion":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Web Services Region for a trigger.</p>"
+        },
+        "action":{
+          "shape":"WorkflowTargetAction",
+          "documentation":"<p>The action to perform when the trigger fires. Valid values include ACTIVATE and DEACTIVATE.</p>"
+        },
+        "conditions":{
+          "shape":"TriggerConditionList",
+          "documentation":"<p>The conditions that must be met for the trigger to fire.</p>"
+        },
+        "minDelayMinutesBetweenExecutions":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum time, in minutes, that must elapse between automatic executions of the plan.</p>"
+        }
+      },
+      "documentation":"<p>Defines a condition that can automatically trigger the execution of a Region switch plan.</p>"
+    },
+    "TriggerCondition":{
+      "type":"structure",
+      "required":[
+        "associatedAlarmName",
+        "condition"
+      ],
+      "members":{
+        "associatedAlarmName":{
+          "shape":"String",
+          "documentation":"<p>The name of the CloudWatch alarm associated with the condition.</p>"
+        },
+        "condition":{
+          "shape":"AlarmCondition",
+          "documentation":"<p>The condition that must be met. Valid values include ALARM and OK.</p>"
+        }
+      },
+      "documentation":"<p>Defines a condition that must be met for a trigger to fire.</p>"
+    },
+    "TriggerConditionList":{
+      "type":"list",
+      "member":{"shape":"TriggerCondition"},
+      "max":10,
+      "min":1
+    },
+    "TriggerList":{
+      "type":"list",
+      "member":{"shape":"Trigger"}
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "resourceTagKeys"
+      ],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) for a tag you remove a resource from.</p>"
+        },
+        "resourceTagKeys":{
+          "shape":"TagKeys",
+          "documentation":"<p>Tag keys that you remove from a resource.</p>"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdatePlanExecutionAction":{
+      "type":"string",
+      "enum":[
+        "switchToGraceful",
+        "switchToUngraceful",
+        "pause",
+        "resume"
+      ]
+    },
+    "UpdatePlanExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId",
+        "action"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan with the execution to update.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The execution identifier of a plan execution.</p>"
+        },
+        "action":{
+          "shape":"UpdatePlanExecutionAction",
+          "documentation":"<p>The action specified for a plan execution, for example, Switch to Graceful or Pause.</p>"
+        },
+        "comment":{
+          "shape":"ExecutionComment",
+          "documentation":"<p>An optional comment about the plan execution.</p>"
+        }
+      }
+    },
+    "UpdatePlanExecutionResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdatePlanExecutionStepAction":{
+      "type":"string",
+      "enum":[
+        "switchToUngraceful",
+        "skip"
+      ]
+    },
+    "UpdatePlanExecutionStepRequest":{
+      "type":"structure",
+      "required":[
+        "planArn",
+        "executionId",
+        "comment",
+        "stepName",
+        "actionToTake"
+      ],
+      "members":{
+        "planArn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan containing the execution step to update.</p>"
+        },
+        "executionId":{
+          "shape":"ExecutionId",
+          "documentation":"<p>The unique identifier of the plan execution containing the step to update.</p>"
+        },
+        "comment":{
+          "shape":"ExecutionComment",
+          "documentation":"<p>An optional comment about the plan execution.</p>"
+        },
+        "stepName":{
+          "shape":"String",
+          "documentation":"<p>The name of the execution step to update.</p>"
+        },
+        "actionToTake":{
+          "shape":"UpdatePlanExecutionStepAction",
+          "documentation":"<p>The updated action to take for the step. This can be used to skip or retry a step.</p>"
+        }
+      }
+    },
+    "UpdatePlanExecutionStepResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdatePlanRequest":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "workflows",
+        "executionRole"
+      ],
+      "members":{
+        "arn":{
+          "shape":"PlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the plan.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The updated description for the Region switch plan.</p>"
+        },
+        "workflows":{
+          "shape":"WorkflowList",
+          "documentation":"<p>The updated workflows for the Region switch plan.</p>"
+        },
+        "executionRole":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The updated IAM role ARN that grants Region switch the permissions needed to execute the plan steps.</p>"
+        },
+        "recoveryTimeObjectiveMinutes":{
+          "shape":"UpdatePlanRequestRecoveryTimeObjectiveMinutesInteger",
+          "documentation":"<p>The updated target recovery time objective (RTO) in minutes for the plan.</p>"
+        },
+        "associatedAlarms":{
+          "shape":"AssociatedAlarmMap",
+          "documentation":"<p>The updated CloudWatch alarms associated with the plan.</p>"
+        },
+        "triggers":{
+          "shape":"TriggerList",
+          "documentation":"<p>The updated conditions that can automatically trigger the execution of the plan.</p>"
+        }
+      }
+    },
+    "UpdatePlanRequestRecoveryTimeObjectiveMinutesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10080,
+      "min":1
+    },
+    "UpdatePlanResponse":{
+      "type":"structure",
+      "members":{
+        "plan":{
+          "shape":"Plan",
+          "documentation":"<p>The details of the updated Region switch plan.</p>"
+        }
+      }
+    },
+    "Workflow":{
+      "type":"structure",
+      "required":["workflowTargetAction"],
+      "members":{
+        "steps":{
+          "shape":"Steps",
+          "documentation":"<p>The steps that make up the workflow.</p>"
+        },
+        "workflowTargetAction":{
+          "shape":"WorkflowTargetAction",
+          "documentation":"<p>The action that the workflow performs. Valid values include ACTIVATE and DEACTIVATE.</p>"
+        },
+        "workflowTargetRegion":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Web Services Region that the workflow targets.</p>"
+        },
+        "workflowDescription":{
+          "shape":"String",
+          "documentation":"<p>The description of the workflow.</p>"
+        }
+      },
+      "documentation":"<p>Represents a workflow in a Region switch plan. A workflow defines a sequence of steps to execute during a Region switch.</p>"
+    },
+    "WorkflowList":{
+      "type":"list",
+      "member":{"shape":"Workflow"}
+    },
+    "WorkflowTargetAction":{
+      "type":"string",
+      "enum":[
+        "activate",
+        "deactivate"
+      ]
+    }
+  },
+  "documentation":"<p>Amazon Application Recovery Controller (ARC) Region switch helps you to quickly and reliably shift traffic away from an impaired Amazon Web Services Region to a healthy Region. With Region switch, you can create plans that define the steps to shift traffic for your application from one Amazon Web Services Region to another. You can test your plans in practice mode before using them in a real recovery scenario.</p> <p>Region switch provides a structured approach to multi-Region failover, helping you to meet your recovery time objectives (RTOs) and maintain business continuity during regional disruptions.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/region-switch.html\">Region switch in ARC</a> in the <i>Amazon Application Recovery Controller User Guide</i>.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/waiters-2.json 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/arc-region-switch/2022-07-26/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-region-switch/2022-07-26/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,57 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "PlanEvaluationStatusPassed" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetPlanEvaluationStatus",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "evaluationState",
+        "state" : "success",
+        "expected" : "passed"
+      }, {
+        "matcher" : "path",
+        "argument" : "evaluationState",
+        "state" : "failure",
+        "expected" : "actionRequired"
+      }, {
+        "matcher" : "path",
+        "argument" : "evaluationState",
+        "state" : "retry",
+        "expected" : "pendingEvaluation"
+      } ]
+    },
+    "PlanExecutionCompleted" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetPlanExecution",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "executionState",
+        "state" : "success",
+        "expected" : "completed"
+      }, {
+        "matcher" : "path",
+        "argument" : "executionState",
+        "state" : "success",
+        "expected" : "completedWithExceptions"
+      }, {
+        "matcher" : "path",
+        "argument" : "executionState",
+        "state" : "failure",
+        "expected" : "failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "executionState",
+        "state" : "failure",
+        "expected" : "canceled"
+      }, {
+        "matcher" : "path",
+        "argument" : "executionState",
+        "state" : "failure",
+        "expected" : "planExecutionTimedOut"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/service-2.json 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,18 +2,37 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-10-30",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"arc-zonal-shift",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS ARC - Zonal Shift",
     "serviceId":"ARC Zonal Shift",
     "signatureVersion":"v4",
     "signingName":"arc-zonal-shift",
-    "uid":"arc-zonal-shift-2022-10-30",
-    "auth":["aws.auth#sigv4"]
+    "uid":"arc-zonal-shift-2022-10-30"
   },
   "operations":{
+    "CancelPracticeRun":{
+      "name":"CancelPracticeRun",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/practiceruns/{zonalShiftId}",
+        "responseCode":200
+      },
+      "input":{"shape":"CancelPracticeRunRequest"},
+      "output":{"shape":"CancelPracticeRunResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Cancel an in-progress practice run zonal shift in Amazon Application Recovery Controller.</p>",
+      "idempotent":true
+    },
     "CancelZonalShift":{
       "name":"CancelZonalShift",
       "http":{
@@ -28,10 +47,10 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Cancel a zonal shift in Amazon Route 53 Application Recovery Controller. To cancel the zonal shift, specify the zonal shift ID.</p> <p>A zonal shift can be one that you've started for a resource in your Amazon Web Services account in an Amazon Web Services Region, or it can be a zonal shift started by a practice run with zonal autoshift. </p>"
+      "documentation":"<p>Cancel a zonal shift in Amazon Application Recovery Controller. To cancel the zonal shift, specify the zonal shift ID.</p> <p>A zonal shift can be one that you've started for a resource in your Amazon Web Services account in an Amazon Web Services Region, or it can be a zonal shift started by a practice run with zonal autoshift. </p>"
     },
     "CreatePracticeRunConfiguration":{
       "name":"CreatePracticeRunConfiguration",
@@ -47,10 +66,10 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>A practice run configuration for zonal autoshift is required when you enable zonal autoshift. A practice run configuration includes specifications for blocked dates and blocked time windows, and for Amazon CloudWatch alarms that you create to use with practice runs. The alarms that you specify are an <i>outcome alarm</i>, to monitor application health during practice runs and, optionally, a <i>blocking alarm</i>, to block practice runs from starting.</p> <p>When a resource has a practice run configuration, Route 53 ARC starts zonal shifts for the resource weekly, to shift traffic for practice runs. Practice runs help you to ensure that shifting away traffic from an Availability Zone during an autoshift is safe for your application.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.considerations.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+      "documentation":"<p>A practice run configuration for zonal autoshift is required when you enable zonal autoshift. A practice run configuration includes specifications for blocked dates and blocked time windows, and for Amazon CloudWatch alarms that you create to use with practice runs. The alarms that you specify are an <i>outcome alarm</i>, to monitor application health during practice runs and, optionally, a <i>blocking alarm</i>, to block practice runs from starting.</p> <p>When a resource has a practice run configuration, ARC starts zonal shifts for the resource weekly, to shift traffic for practice runs. Practice runs help you to ensure that shifting away traffic from an Availability Zone during an autoshift is safe for your application.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.considerations.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
     },
     "DeletePracticeRunConfiguration":{
       "name":"DeletePracticeRunConfiguration",
@@ -66,8 +85,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes the practice run configuration for a resource. Before you can delete a practice run configuration for a resource., you must disable zonal autoshift for the resource. Practice runs must be configured for zonal autoshift to be enabled.</p>",
       "idempotent":true
@@ -86,7 +105,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the status of autoshift observer notification. Autoshift observer notification enables you to be notified, through Amazon EventBridge, when there is an autoshift event for zonal autoshift.</p> <p>If the status is <code>ENABLED</code>, Route 53 ARC includes all autoshift events when you use the EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, Route 53 ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html#ZAShiftNotification\"> Notifications for practice runs and autoshifts</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+      "documentation":"<p>Returns the status of the autoshift observer notification. Autoshift observer notifications notify you through Amazon EventBridge when there is an autoshift event for zonal autoshift. The status can be <code>ENABLED</code> or <code>DISABLED</code>. When <code>ENABLED</code>, a notification is sent when an autoshift is triggered. When <code>DISABLED</code>, notifications are not sent. </p>"
     },
     "GetManagedResource":{
       "name":"GetManagedResource",
@@ -101,10 +120,10 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Get information about a resource that's been registered for zonal shifts with Amazon Route 53 Application Recovery Controller in this Amazon Web Services Region. Resources that are registered for zonal shifts are managed resources in Route 53 ARC. You can start zonal shifts and configure zonal autoshift for managed resources.</p> <p>At this time, you can only start a zonal shift or configure zonal autoshift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+      "documentation":"<p>Get information about a resource that's been registered for zonal shifts with Amazon Application Recovery Controller in this Amazon Web Services Region. Resources that are registered for zonal shifts are managed resources in ARC. You can start zonal shifts and configure zonal autoshift for managed resources.</p>"
     },
     "ListAutoshifts":{
       "name":"ListAutoshifts",
@@ -118,10 +137,10 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Returns a list of autoshifts for an Amazon Web Services Region. By default, the call returns only <code>ACTIVE</code> autoshifts. Optionally, you can specify the <code>status</code> parameter to return <code>COMPLETED</code> autoshifts. </p>"
+      "documentation":"<p>Returns the autoshifts for an Amazon Web Services Region. By default, the call returns only <code>ACTIVE</code> autoshifts. Optionally, you can specify the <code>status</code> parameter to return <code>COMPLETED</code> autoshifts. </p>"
     },
     "ListManagedResources":{
       "name":"ListManagedResources",
@@ -135,10 +154,10 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all the resources in your Amazon Web Services account in this Amazon Web Services Region that are managed for zonal shifts in Amazon Route 53 Application Recovery Controller, and information about them. The information includes the zonal autoshift status for the resource, as well as the Amazon Resource Name (ARN), the Availability Zones that each resource is deployed in, and the resource name.</p>"
+      "documentation":"<p>Lists all the resources in your Amazon Web Services account in this Amazon Web Services Region that are managed for zonal shifts in Amazon Application Recovery Controller, and information about them. The information includes the zonal autoshift status for the resource, as well as the Amazon Resource Name (ARN), the Availability Zones that each resource is deployed in, and the resource name.</p>"
     },
     "ListZonalShifts":{
       "name":"ListZonalShifts",
@@ -152,10 +171,29 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists all active and completed zonal shifts in Amazon Application Recovery Controller in your Amazon Web Services account in this Amazon Web Services Region. <code>ListZonalShifts</code> returns customer-initiated zonal shifts, as well as practice run zonal shifts that ARC started on your behalf for zonal autoshift.</p> <p>For more information about listing autoshifts, see <a href=\"https://docs.aws.amazon.com/arc-zonal-shift/latest/api/API_ListAutoshifts.html\">\"&gt;ListAutoshifts</a>.</p>"
+    },
+    "StartPracticeRun":{
+      "name":"StartPracticeRun",
+      "http":{
+        "method":"POST",
+        "requestUri":"/practiceruns",
+        "responseCode":200
+      },
+      "input":{"shape":"StartPracticeRunRequest"},
+      "output":{"shape":"StartPracticeRunResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all active and completed zonal shifts in Amazon Route 53 Application Recovery Controller in your Amazon Web Services account in this Amazon Web Services Region. <code>ListZonalShifts</code> returns customer-initiated zonal shifts, as well as practice run zonal shifts that Route 53 ARC started on your behalf for zonal autoshift.</p> <p>The <code>ListZonalShifts</code> operation does not list autoshifts. For more information about listing autoshifts, see <a href=\"https://docs.aws.amazon.com/arc-zonal-shift/latest/api/API_ListAutoshifts.html\">\"&gt;ListAutoshifts</a>.</p>"
+      "documentation":"<p>Start an on-demand practice run zonal shift in Amazon Application Recovery Controller. With zonal autoshift enabled, you can start an on-demand practice run to verify preparedness at any time. Amazon Web Services also runs automated practice runs about weekly when you have enabled zonal autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.considerations.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
     },
     "StartZonalShift":{
       "name":"StartZonalShift",
@@ -171,10 +209,10 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>You start a zonal shift to temporarily move load balancer traffic away from an Availability Zone in an Amazon Web Services Region, to help your application recover immediately, for example, from a developer's bad code deployment or from an Amazon Web Services infrastructure failure in a single Availability Zone. You can start a zonal shift in Route 53 ARC only for managed resources in your Amazon Web Services account in an Amazon Web Services Region. Resources are automatically registered with Route 53 ARC by Amazon Web Services services.</p> <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p> <p>When you start a zonal shift, traffic for the resource is no longer routed to the Availability Zone. The zonal shift is created immediately in Route 53 ARC. However, it can take a short time, typically up to a few minutes, for existing, in-progress connections in the Availability Zone to complete.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html\">Zonal shift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+      "documentation":"<p>You start a zonal shift to temporarily move load balancer traffic away from an Availability Zone in an Amazon Web Services Region, to help your application recover immediately, for example, from a developer's bad code deployment or from an Amazon Web Services infrastructure failure in a single Availability Zone. You can start a zonal shift in ARC only for managed resources in your Amazon Web Services account in an Amazon Web Services Region. Resources are automatically registered with ARC by Amazon Web Services services.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul> <p>When you start a zonal shift, traffic for the resource is no longer routed to the Availability Zone. The zonal shift is created immediately in ARC. However, it can take a short time, typically up to a few minutes, for existing, in-progress connections in the Availability Zone to complete.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html\">Zonal shift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
     },
     "UpdateAutoshiftObserverNotificationStatus":{
       "name":"UpdateAutoshiftObserverNotificationStatus",
@@ -188,10 +226,10 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Update the status of autoshift observer notification. Autoshift observer notification enables you to be notified, through Amazon EventBridge, when there is an autoshift event for zonal autoshift.</p> <p>If the status is <code>ENABLED</code>, Route 53 ARC includes all autoshift events when you use the EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, Route 53 ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html#ZAShiftNotification\"> Notifications for practice runs and autoshifts</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>",
+      "documentation":"<p>Update the status of autoshift observer notification. Autoshift observer notification enables you to be notified, through Amazon EventBridge, when there is an autoshift event for zonal autoshift.</p> <p>If the status is <code>ENABLED</code>, ARC includes all autoshift events when you use the EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html#ZAShiftNotification\"> Notifications for practice runs and autoshifts</a> in the Amazon Application Recovery Controller Developer Guide.</p>",
       "idempotent":true
     },
     "UpdatePracticeRunConfiguration":{
@@ -208,8 +246,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Update a practice run configuration to change one or more of the following: add, change, or remove the blocking alarm; change the outcome alarm; or add, change, or remove blocking dates or time windows.</p>"
     },
@@ -227,10 +265,10 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>The zonal autoshift configuration for a resource includes the practice run configuration and the status for running autoshifts, zonal autoshift status. When a resource has a practice run configuation, Route 53 ARC starts weekly zonal shifts for the resource, to shift traffic away from an Availability Zone. Weekly practice runs help you to make sure that your application can continue to operate normally with the loss of one Availability Zone.</p> <p>You can update the zonal autoshift autoshift status to enable or disable zonal autoshift. When zonal autoshift is <code>ENABLED</code>, you authorize Amazon Web Services to shift away resource traffic for an application from an Availability Zone during events, on your behalf, to help reduce time to recovery. Traffic is also shifted away for the required weekly practice runs.</p>",
+      "documentation":"<p>The zonal autoshift configuration for a resource includes the practice run configuration and the status for running autoshifts, zonal autoshift status. When a resource has a practice run configuration, ARC starts weekly zonal shifts for the resource, to shift traffic away from an Availability Zone. Weekly practice runs help you to make sure that your application can continue to operate normally with the loss of one Availability Zone.</p> <p>You can update the zonal autoshift status to enable or disable zonal autoshift. When zonal autoshift is <code>ENABLED</code>, you authorize Amazon Web Services to shift away resource traffic for an application from an Availability Zone during events, on your behalf, to help reduce time to recovery. Traffic is also shifted away for the required weekly practice runs.</p>",
       "idempotent":true
     },
     "UpdateZonalShift":{
@@ -247,10 +285,10 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Update an active zonal shift in Amazon Route 53 Application Recovery Controller in your Amazon Web Services account. You can update a zonal shift to set a new expiration, or edit or replace the comment for the zonal shift. </p>"
+      "documentation":"<p>Update an active zonal shift in Amazon Application Recovery Controller in your Amazon Web Services account. You can update a zonal shift to set a new expiration, or edit or replace the comment for the zonal shift.</p>"
     }
   },
   "shapes":{
@@ -266,6 +304,18 @@
       },
       "exception":true
     },
+    "AllowedWindow":{
+      "type":"string",
+      "max":19,
+      "min":19,
+      "pattern":"(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}-(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}"
+    },
+    "AllowedWindows":{
+      "type":"list",
+      "member":{"shape":"AllowedWindow"},
+      "max":15,
+      "min":0
+    },
     "AppliedStatus":{
       "type":"string",
       "enum":[
@@ -302,7 +352,7 @@
       "members":{
         "appliedStatus":{
           "shape":"AutoshiftAppliedStatus",
-          "documentation":"<p>The <code>appliedStatus</code> field specifies which application traffic shift is in effect for a resource when there is more than one active traffic shift. There can be more than one application traffic shift in progress at the same time - that is, practice run zonal shifts, customer-initiated zonal shifts, or an autoshift. The <code>appliedStatus</code> field for a shift that is in progress for a resource can have one of two values: <code>APPLIED</code> or <code>NOT_APPLIED</code>. The zonal shift or autoshift that is currently in effect for the resource has an <code>appliedStatus</code> set to <code>APPLIED</code>.</p> <p>The overall principle for precedence is that zonal shifts that you start as a customer take precedence autoshifts, which take precedence over practice runs. That is, customer-initiated zonal shifts &gt; autoshifts &gt; practice run zonal shifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+          "documentation":"<p>The <code>appliedStatus</code> field specifies which application traffic shift is in effect for a resource when there is more than one active traffic shift. There can be more than one application traffic shift in progress at the same time - that is, practice run zonal shifts, customer-initiated zonal shifts, or an autoshift. The <code>appliedStatus</code> field for a shift that is in progress for a resource can have one of two values: <code>APPLIED</code> or <code>NOT_APPLIED</code>. The zonal shift or autoshift that is currently in effect for the resource has an <code>appliedStatus</code> set to <code>APPLIED</code>.</p> <p>The overall principle for precedence is that zonal shifts that you start as a customer take precedence autoshifts, which take precedence over practice runs. That is, customer-initiated zonal shifts &gt; autoshifts &gt; practice run zonal shifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
         },
         "awayFrom":{
           "shape":"AvailabilityZone",
@@ -313,7 +363,7 @@
           "documentation":"<p>The time (UTC) when the autoshift started.</p>"
         }
       },
-      "documentation":"<p>A complex structure that lists an autoshift that is currently active for a managed resource and information about the autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+      "documentation":"<p>A complex structure that lists an autoshift that is currently active for a managed resource and information about the autoshift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
     },
     "AutoshiftObserverNotificationStatus":{
       "type":"string",
@@ -330,7 +380,6 @@
       "type":"structure",
       "required":[
         "awayFrom",
-        "endTime",
         "startTime",
         "status"
       ],
@@ -352,7 +401,7 @@
           "documentation":"<p>The status for an autoshift. </p>"
         }
       },
-      "documentation":"<p>Information about an autoshift. Amazon Web Services starts an autoshift to temporarily move traffic for a resource away from an Availability Zone in an Amazon Web Services Region when Amazon Web Services determines that there's an issue in the Availability Zone that could potentially affect customers. You can configure zonal autoshift in Route 53 ARC for managed resources in your Amazon Web Services account in a Region. Supported Amazon Web Services resources are automatically registered with Route 53 ARC.</p> <p>Autoshifts are temporary. When the Availability Zone recovers, Amazon Web Services ends the autoshift, and traffic for the resource is no longer directed to the other Availability Zones in the Region.</p> <p>You can stop an autoshift for a resource by disabling zonal autoshift.</p>"
+      "documentation":"<p>Information about an autoshift. Amazon Web Services starts an autoshift to temporarily move traffic for a resource away from an Availability Zone in an Amazon Web Services Region when Amazon Web Services determines that there's an issue in the Availability Zone that could potentially affect customers. You can configure zonal autoshift in ARC for managed resources in your Amazon Web Services account in a Region. Supported Amazon Web Services resources are automatically registered with ARC.</p> <p>Autoshifts are temporary. When the Availability Zone recovers, Amazon Web Services ends the autoshift, and traffic for the resource is no longer directed to the other Availability Zones in the Region.</p> <p>You can stop an autoshift for a resource by disabling zonal autoshift.</p>"
     },
     "AutoshiftsInResource":{
       "type":"list",
@@ -371,7 +420,7 @@
       "type":"string",
       "max":10,
       "min":10,
-      "pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
+      "pattern":"[0-9]{4}-[0-9]{2}-[0-9]{2}"
     },
     "BlockedDates":{
       "type":"list",
@@ -383,7 +432,7 @@
       "type":"string",
       "max":19,
       "min":19,
-      "pattern":"^(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}-(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}$"
+      "pattern":"(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}-(Mon|Tue|Wed|Thu|Fri|Sat|Sun):[0-9]{2}:[0-9]{2}"
     },
     "BlockedWindows":{
       "type":"list",
@@ -391,6 +440,66 @@
       "max":15,
       "min":0
     },
+    "BlockingAlarms":{
+      "type":"list",
+      "member":{"shape":"ControlCondition"},
+      "max":10,
+      "min":0
+    },
+    "CancelPracticeRunRequest":{
+      "type":"structure",
+      "required":["zonalShiftId"],
+      "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a practice run zonal shift in Amazon Application Recovery Controller that you want to cancel.</p>",
+          "location":"uri",
+          "locationName":"zonalShiftId"
+        }
+      }
+    },
+    "CancelPracticeRunResponse":{
+      "type":"structure",
+      "required":[
+        "zonalShiftId",
+        "resourceIdentifier",
+        "awayFrom",
+        "expiryTime",
+        "startTime",
+        "status",
+        "comment"
+      ],
+      "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of the practice run zonal shift in Amazon Application Recovery Controller that was canceled.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that you canceled a practice run zonal shift for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "awayFrom":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic was moved away from for a resource that you specified for the practice run.</p>"
+        },
+        "expiryTime":{
+          "shape":"ExpiryTime",
+          "documentation":"<p>The expiry time (expiration time) for an on-demand practice run zonal shift is 30 minutes from the time when you start the practice run, unless you cancel it before that time. However, be aware that the <code>expiryTime</code> field for practice run zonal shifts always has a value of 1 minute. </p>"
+        },
+        "startTime":{
+          "shape":"StartTime",
+          "documentation":"<p>The time (UTC) when the zonal shift starts.</p>"
+        },
+        "status":{
+          "shape":"ZonalShiftStatus",
+          "documentation":"<p>A status for the practice run that you canceled (expected status is <b>CANCELED</b>).</p> <p>The <code>Status</code> for a practice run zonal shift can have one of the following values:</p>"
+        },
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>The initial comment that you entered about the practice run. Be aware that this comment can be overwritten by Amazon Web Services if the automatic check for balanced capacity fails. For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.capacity-check.html\"> Capacity checks for practice runs</a> in the Amazon Application Recovery Controller Developer Guide. </p>"
+        }
+      }
+    },
     "CancelZonalShiftRequest":{
       "type":"structure",
       "required":["zonalShiftId"],
@@ -435,63 +544,67 @@
         "SimultaneousZonalShiftsConflict",
         "PracticeConfigurationAlreadyExists",
         "AutoShiftEnabled",
-        "PracticeConfigurationDoesNotExist"
+        "PracticeConfigurationDoesNotExist",
+        "ZonalAutoshiftActive",
+        "PracticeOutcomeAlarmsRed",
+        "PracticeBlockingAlarmsRed",
+        "PracticeInBlockedDates",
+        "PracticeInBlockedWindows",
+        "PracticeOutsideAllowedWindows"
       ]
     },
     "ControlCondition":{
       "type":"structure",
       "required":[
-        "alarmIdentifier",
-        "type"
+        "type",
+        "alarmIdentifier"
       ],
       "members":{
-        "alarmIdentifier":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for an Amazon CloudWatch alarm that you specify as a control condition for a practice run.</p>"
-        },
         "type":{
           "shape":"ControlConditionType",
           "documentation":"<p>The type of alarm specified for a practice run. You can only specify Amazon CloudWatch alarms for practice runs, so the only valid value is <code>CLOUDWATCH</code>.</p>"
+        },
+        "alarmIdentifier":{
+          "shape":"MetricIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) for an Amazon CloudWatch alarm that you specify as a control condition for a practice run.</p>"
         }
       },
-      "documentation":"<p>A control condition is an alarm that you specify for a practice run. When you configure practice runs with zonal autoshift for a resource, you specify Amazon CloudWatch alarms, which you create in CloudWatch to use with the practice run. The alarms that you specify are an <i>outcome alarm</i>, to monitor application health during practice runs and, optionally, a <i>blocking alarm</i>, to block practice runs from starting or to interrupt a practice run in progress.</p> <p>Control condition alarms do not apply for autoshifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.considerations.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+      "documentation":"<p>A control condition is an alarm that you specify for a practice run. When you configure practice runs with zonal autoshift for a resource, you specify Amazon CloudWatch alarms, which you create in CloudWatch to use with the practice run. The alarms that you specify are an <i>outcome alarm</i>, to monitor application health during practice runs and, optionally, a <i>blocking alarm</i>, to block practice runs from starting or to interrupt a practice run in progress.</p> <p>Control condition alarms do not apply for autoshifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.considerations.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
     },
     "ControlConditionType":{
       "type":"string",
       "enum":["CLOUDWATCH"]
     },
-    "ControlConditions":{
-      "type":"list",
-      "member":{"shape":"ControlCondition"},
-      "max":1,
-      "min":1
-    },
     "CreatePracticeRunConfigurationRequest":{
       "type":"structure",
       "required":[
-        "outcomeAlarms",
-        "resourceIdentifier"
+        "resourceIdentifier",
+        "outcomeAlarms"
       ],
       "members":{
-        "blockedDates":{
-          "shape":"BlockedDates",
-          "documentation":"<p>Optionally, you can block Route 53 ARC from starting practice runs for a resource on specific calendar dates.</p> <p>The format for blocked dates is: YYYY-MM-DD. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Separate multiple blocked dates with spaces.</p> <p>For example, if you have an application update scheduled to launch on May 1, 2024, and you don't want practice runs to shift traffic away at that time, you could set a blocked date for <code>2024-05-01</code>.</p>"
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier of the resource that Amazon Web Services shifts traffic for with a practice run zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul>"
         },
         "blockedWindows":{
           "shape":"BlockedWindows",
-          "documentation":"<p>Optionally, you can block Route 53 ARC from starting practice runs for specific windows of days and times. </p> <p>The format for blocked windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple blocked windows with spaces.</p> <p>For example, say you run business report summaries three days a week. For this scenario, you might set the following recurring days and times as blocked windows, for example: <code>MON-20:30-21:30 WED-20:30-21:30 FRI-20:30-21:30</code>.</p>"
+          "documentation":"<p>Optionally, you can block ARC from starting practice runs for specific windows of days and times. </p> <p>The format for blocked windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple blocked windows with spaces.</p> <p>For example, say you run business report summaries three days a week. For this scenario, you could set the following recurring days and times as blocked windows, for example: <code>Mon:00:00-Mon:10:00 Wed-20:30-Wed:21:30 Fri-20:30-Fri:21:30</code>.</p> <important> <p>The <code>blockedWindows</code> have to start and end on the same day. Windows that span multiple days aren't supported.</p> </important>"
+        },
+        "blockedDates":{
+          "shape":"BlockedDates",
+          "documentation":"<p>Optionally, you can block ARC from starting practice runs for a resource on specific calendar dates.</p> <p>The format for blocked dates is: YYYY-MM-DD. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Separate multiple blocked dates with spaces.</p> <p>For example, if you have an application update scheduled to launch on May 1, 2024, and you don't want practice runs to shift traffic away at that time, you could set a blocked date for <code>2024-05-01</code>.</p>"
         },
         "blockingAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>An Amazon CloudWatch alarm that you can specify for zonal autoshift practice runs. This alarm blocks Route 53 ARC from starting practice run zonal shifts, and ends a practice run that's in progress, when the alarm is in an <code>ALARM</code> state. </p>"
+          "shape":"BlockingAlarms",
+          "documentation":"<p> <i>Blocking alarms</i> for practice runs are optional alarms that you can specify that block practice runs when one or more of the alarms is in an <code>ALARM</code> state.</p>"
         },
-        "outcomeAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>The <i>outcome alarm</i> for practice runs is a required Amazon CloudWatch alarm that you specify that ends a practice run when the alarm is in an <code>ALARM</code> state.</p> <p>Configure the alarm to monitor the health of your application when traffic is shifted away from an Availability Zone during each weekly practice run. You should configure the alarm to go into an <code>ALARM</code> state if your application is impacted by the zonal shift, and you want to stop the zonal shift, to let traffic for the resource return to the Availability Zone.</p>"
+        "allowedWindows":{
+          "shape":"AllowedWindows",
+          "documentation":"<p>Optionally, you can allow ARC to start practice runs for specific windows of days and times. </p> <p>The format for allowed windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple allowed windows with spaces.</p> <p>For example, say you want to allow practice runs only on Wednesdays and Fridays from noon to 5 p.m. For this scenario, you could set the following recurring days and times as allowed windows, for example: <code>Wed-12:00-Wed:17:00 Fri-12:00-Fri:17:00</code>.</p> <important> <p>The <code>allowedWindows</code> have to start and end on the same day. Windows that span multiple days aren't supported.</p> </important>"
         },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier of the resource that Amazon Web Services shifts traffic for with a practice run zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, supported resources are Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+        "outcomeAlarms":{
+          "shape":"OutcomeAlarms",
+          "documentation":"<p> <i>Outcome alarms</i> for practice runs are alarms that you specify that end a practice run when one or more of the alarms is in an <code>ALARM</code> state.</p> <p>Configure one or more of these alarms to monitor the health of your application when traffic is shifted away from an Availability Zone during each practice run. You should configure these alarms to go into an <code>ALARM</code> state if you want to stop a zonal shift, to let traffic for the resource return to the original Availability Zone.</p>"
         }
       }
     },
@@ -500,8 +613,8 @@
       "required":[
         "arn",
         "name",
-        "practiceRunConfiguration",
-        "zonalAutoshiftStatus"
+        "zonalAutoshiftStatus",
+        "practiceRunConfiguration"
       ],
       "members":{
         "arn":{
@@ -512,13 +625,13 @@
           "shape":"ResourceName",
           "documentation":"<p>The name of the resource that you configured the practice run for. </p>"
         },
-        "practiceRunConfiguration":{
-          "shape":"PracticeRunConfiguration",
-          "documentation":"<p>A practice run configuration for a resource. Configurations include the outcome alarm that you specify for practice runs, and, optionally, a blocking alarm and blocking dates and windows.</p>"
-        },
         "zonalAutoshiftStatus":{
           "shape":"ZonalAutoshiftStatus",
           "documentation":"<p>The status for zonal autoshift for a resource. When you specify <code>ENABLED</code> for the autoshift status, Amazon Web Services shifts traffic away from shifts away application resource traffic from an Availability Zone, on your behalf, when internal telemetry indicates that there is an Availability Zone impairment that could potentially impact customers.</p> <p>When you enable zonal autoshift, you must also configure practice runs for the resource.</p>"
+        },
+        "practiceRunConfiguration":{
+          "shape":"PracticeRunConfiguration",
+          "documentation":"<p>A practice run configuration for a resource. Configurations include the outcome alarm that you specify for practice runs, and, optionally, a blocking alarm and blocking dates and windows.</p>"
         }
       }
     },
@@ -560,13 +673,12 @@
       "type":"string",
       "max":5,
       "min":2,
-      "pattern":"^([1-9][0-9]*)(m|h)$"
+      "pattern":"([1-9][0-9]*)(m|h)"
     },
     "ExpiryTime":{"type":"timestamp"},
     "GetAutoshiftObserverNotificationStatusRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAutoshiftObserverNotificationStatusResponse":{
       "type":"structure",
@@ -574,7 +686,7 @@
       "members":{
         "status":{
           "shape":"AutoshiftObserverNotificationStatus",
-          "documentation":"<p>The status of autoshift observer notification. If the status is <code>ENABLED</code>, Route 53 ARC includes all autoshift events when you use the Amazon EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, Route 53 ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift. </p>"
+          "documentation":"<p>The status of autoshift observer notification. If the status is <code>ENABLED</code>, ARC includes all autoshift events when you use the Amazon EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift. </p>"
         }
       }
     },
@@ -584,7 +696,7 @@
       "members":{
         "resourceIdentifier":{
           "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, supported resources are Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>",
+          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul>",
           "location":"uri",
           "locationName":"resourceIdentifier"
         }
@@ -597,22 +709,26 @@
         "zonalShifts"
       ],
       "members":{
+        "arn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "name":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the resource.</p>"
+        },
         "appliedWeights":{
           "shape":"AppliedWeights",
           "documentation":"<p>A collection of key-value pairs that indicate whether resources are active in Availability Zones or not. The key name is the Availability Zone where the resource is deployed. The value is 1 or 0.</p>"
         },
-        "arn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the resource.</p>"
+        "zonalShifts":{
+          "shape":"ZonalShiftsInResource",
+          "documentation":"<p>The zonal shifts that are currently active for a resource. </p>"
         },
         "autoshifts":{
           "shape":"AutoshiftsInResource",
           "documentation":"<p>An array of the autoshifts that are active for the resource.</p>"
         },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        },
         "practiceRunConfiguration":{
           "shape":"PracticeRunConfiguration",
           "documentation":"<p>The practice run configuration for zonal autoshift that's associated with the resource.</p>"
@@ -620,10 +736,6 @@
         "zonalAutoshiftStatus":{
           "shape":"ZonalAutoshiftStatus",
           "documentation":"<p>The status for zonal autoshift for a resource. When the autoshift status is <code>ENABLED</code>, Amazon Web Services shifts traffic for a resource away from an Availability Zone, on your behalf, when Amazon Web Services determines that there's an issue in the Availability Zone that could potentially affect customers.</p>"
-        },
-        "zonalShifts":{
-          "shape":"ZonalShiftsInResource",
-          "documentation":"<p>The zonal shifts that are currently active for a resource. </p>"
         }
       }
     },
@@ -640,15 +752,9 @@
     "ListAutoshiftsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The number of objects that you want to return with this call.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
@@ -657,6 +763,12 @@
           "documentation":"<p>The status of the autoshift.</p>",
           "location":"querystring",
           "locationName":"status"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of objects that you want to return with this call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -669,24 +781,24 @@
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
         }
       }
     },
     "ListManagedResourcesRequest":{
       "type":"structure",
       "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The number of objects that you want to return with this call.</p>",
           "location":"querystring",
           "locationName":"maxResults"
-        },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
         }
       }
     },
@@ -700,36 +812,36 @@
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
         }
       }
     },
     "ListZonalShiftsRequest":{
       "type":"structure",
       "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "status":{
+          "shape":"ZonalShiftStatus",
+          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE</b>: The zonal shift has been started and is active.</p> </li> <li> <p> <b>EXPIRED</b>: The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED</b>: The zonal shift was canceled.</p> </li> </ul>",
+          "location":"querystring",
+          "locationName":"status"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The number of objects that you want to return with this call.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
         "resourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The identifier for the resource that you want to list zonal shifts for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>",
           "location":"querystring",
           "locationName":"resourceIdentifier"
-        },
-        "status":{
-          "shape":"ZonalShiftStatus",
-          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE</b>: The zonal shift has been started and active.</p> </li> <li> <p> <b>EXPIRED</b>: The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED</b>: The zonal shift was canceled.</p> </li> </ul>",
-          "location":"querystring",
-          "locationName":"status"
         }
       }
     },
@@ -742,7 +854,7 @@
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>nextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>nextToken</code> response to request the next page of results.</p>"
         }
       }
     },
@@ -754,40 +866,40 @@
       "type":"structure",
       "required":["availabilityZones"],
       "members":{
-        "appliedWeights":{
-          "shape":"AppliedWeights",
-          "documentation":"<p>A collection of key-value pairs that indicate whether resources are active in Availability Zones or not. The key name is the Availability Zone where the resource is deployed. The value is 1 or 0.</p>"
-        },
         "arn":{
           "shape":"ResourceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) for the managed resource.</p>"
         },
-        "autoshifts":{
-          "shape":"AutoshiftsInResource",
-          "documentation":"<p>An array of the autoshifts that have been completed for a resource.</p>"
+        "name":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the managed resource.</p>"
         },
         "availabilityZones":{
           "shape":"AvailabilityZones",
           "documentation":"<p>The Availability Zones that a resource is deployed in.</p>"
         },
-        "name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the managed resource.</p>"
+        "appliedWeights":{
+          "shape":"AppliedWeights",
+          "documentation":"<p>A collection of key-value pairs that indicate whether resources are active in Availability Zones or not. The key name is the Availability Zone where the resource is deployed. The value is 1 or 0.</p>"
         },
-        "practiceRunStatus":{
-          "shape":"ZonalAutoshiftStatus",
-          "documentation":"<p>This status tracks whether a practice run configuration exists for a resource. When you configure a practice run for a resource so that a practice run configuration exists, Route 53 ARC sets this value to <code>ENABLED</code>. If a you have not configured a practice run for the resource, or delete a practice run configuration, Route 53 ARC sets the value to <code>DISABLED</code>.</p> <p>Route 53 ARC updates this status; you can't set a practice run status to <code>ENABLED</code> or <code>DISABLED</code>.</p>"
+        "zonalShifts":{
+          "shape":"ZonalShiftsInResource",
+          "documentation":"<p>An array of the zonal shifts for a resource.</p>"
+        },
+        "autoshifts":{
+          "shape":"AutoshiftsInResource",
+          "documentation":"<p>An array of the autoshifts that have been completed for a resource.</p>"
         },
         "zonalAutoshiftStatus":{
           "shape":"ZonalAutoshiftStatus",
           "documentation":"<p>The status of autoshift for a resource. When you configure zonal autoshift for a resource, you can set the value of the status to <code>ENABLED</code> or <code>DISABLED</code>.</p>"
         },
-        "zonalShifts":{
-          "shape":"ZonalShiftsInResource",
-          "documentation":"<p>An array of the zonal shifts for a resource.</p>"
+        "practiceRunStatus":{
+          "shape":"ZonalAutoshiftStatus",
+          "documentation":"<p>This status tracks whether a practice run configuration exists for a resource. When you configure a practice run for a resource so that a practice run configuration exists, ARC sets this value to <code>ENABLED</code>. If a you have not configured a practice run for the resource, or delete a practice run configuration, ARC sets the value to <code>DISABLED</code>.</p> <p>ARC updates this status; you can't set a practice run status to <code>ENABLED</code> or <code>DISABLED</code>.</p>"
         }
       },
-      "documentation":"<p>A complex structure for a managed resource in an Amazon Web Services account with information about zonal shifts and autoshifts.</p> <p>A managed resource is a load balancer that has been registered with Route 53 ARC by Elastic Load Balancing. You can start a zonal shift in Route 53 ARC for a managed resource to temporarily move traffic for the resource away from an Availability Zone in an Amazon Web Services Region. You can also configure zonal autoshift for a managed resource.</p> <note> <p>At this time, managed resources are Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p> </note>"
+      "documentation":"<p>A complex structure for a managed resource in an Amazon Web Services account with information about zonal shifts and autoshifts.</p> <p>You can start a zonal shift in ARC for a managed resource to temporarily move traffic for the resource away from an Availability Zone in an Amazon Web Services Region. You can also configure zonal autoshift for a managed resource.</p> <note> <p>At this time, managed resources are Amazon EC2 Auto Scaling groups, Amazon Elastic Kubernetes Service, Network Load Balancers, and Application Load Balancer.</p> </note>"
     },
     "MaxResults":{
       "type":"integer",
@@ -795,28 +907,44 @@
       "max":100,
       "min":1
     },
+    "MetricIdentifier":{
+      "type":"string",
+      "max":1024,
+      "min":8,
+      "pattern":".*"
+    },
+    "OutcomeAlarms":{
+      "type":"list",
+      "member":{"shape":"ControlCondition"},
+      "max":10,
+      "min":1
+    },
     "PracticeRunConfiguration":{
       "type":"structure",
       "required":["outcomeAlarms"],
       "members":{
-        "blockedDates":{
-          "shape":"BlockedDates",
-          "documentation":"<p>An array of one or more dates that you can specify when Amazon Web Services does not start practice runs for a resource.</p> <p>Specify blocked dates, in UTC, in the format <code>YYYY-MM-DD</code>, separated by spaces. </p>"
+        "blockingAlarms":{
+          "shape":"BlockingAlarms",
+          "documentation":"<p> <i>Blocking alarms</i> for practice runs are optional alarms that you can specify that block practice runs when one or more of the alarms is in an <code>ALARM</code> state.</p>"
+        },
+        "outcomeAlarms":{
+          "shape":"OutcomeAlarms",
+          "documentation":"<p> <i>Outcome alarms</i> for practice runs are alarms that you specify that end a practice run when one or more of the alarms is in an <code>ALARM</code> state.</p>"
         },
         "blockedWindows":{
           "shape":"BlockedWindows",
-          "documentation":"<p>An array of one or more windows of days and times that you can block Route 53 ARC from starting practice runs for a resource.</p> <p>Specify the blocked windows in UTC, using the format <code>DAY:HH:MM-DAY:HH:MM</code>, separated by spaces. For example, <code>MON:18:30-MON:19:30 TUE:18:30-TUE:19:30</code>.</p>"
+          "documentation":"<p>An array of one or more windows of days and times that you can block ARC from starting practice runs for a resource.</p> <p>Specify the blocked windows in UTC, using the format <code>DAY:HH:MM-DAY:HH:MM</code>, separated by spaces. For example, <code>MON:18:30-MON:19:30 TUE:18:30-TUE:19:30</code>.</p> <p>The <code>blockedWindows</code> have to start and end on the same day. Windows that span multiple days aren't supported.</p>"
         },
-        "blockingAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>The <i>blocking alarm</i> for practice runs is an optional alarm that you can specify that blocks practice runs when the alarm is in an <code>ALARM</code> state.</p>"
+        "allowedWindows":{
+          "shape":"AllowedWindows",
+          "documentation":"<p>An array of one or more windows of days and times that you can allow ARC to start practice runs for a resource.</p> <p>For example, say you want to allow practice runs only on Wednesdays and Fridays from noon to 5 p.m. For this scenario, you could set the following recurring days and times as allowed windows, for example: <code>Wed-12:00-Wed:17:00 Fri-12:00-Fri:17:00</code>.</p> <p>The <code>allowedWindows</code> have to start and end on the same day. Windows that span multiple days aren't supported.</p>"
         },
-        "outcomeAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>The <i>outcome alarm</i> for practice runs is an alarm that you specify that ends a practice run when the alarm is in an <code>ALARM</code> state.</p>"
+        "blockedDates":{
+          "shape":"BlockedDates",
+          "documentation":"<p>An array of one or more dates that you can specify when Amazon Web Services does not start practice runs for a resource.</p> <p>Specify blocked dates, in UTC, in the format <code>YYYY-MM-DD</code>, separated by spaces. </p>"
         }
       },
-      "documentation":"<p>A practice run configuration for a resource includes the Amazon CloudWatch alarms that you've specified for a practice run, as well as any blocked dates or blocked windows for the practice run. When a resource has a practice run configuration, Route 53 ARC shifts traffic for the resource weekly for practice runs.</p> <p>Practice runs are required for zonal autoshift. The zonal shifts that Route 53 ARC starts for practice runs help you to ensure that shifting away traffic from an Availability Zone during an autoshift is safe for your application.</p> <p>You can update or delete a practice run configuration. Before you delete a practice run configuration, you must disable zonal autoshift for the resource. A practice run configuration is required when zonal autoshift is enabled.</p>"
+      "documentation":"<p>A practice run configuration for a resource includes the Amazon CloudWatch alarms that you've specified for a practice run, as well as any blocked dates or blocked windows for the practice run. When a resource has a practice run configuration, ARC shifts traffic for the resource weekly for practice runs.</p> <p>Practice runs are required for zonal autoshift. The zonal shifts that ARC starts for practice runs help you to ensure that shifting away traffic from an Availability Zone during an autoshift is safe for your application.</p> <p>You can update or delete a practice run configuration. Before you delete a practice run configuration, you must disable zonal autoshift for the resource. A practice run configuration is required when zonal autoshift is enabled.</p>"
     },
     "PracticeRunOutcome":{
       "type":"string",
@@ -824,14 +952,15 @@
         "FAILED",
         "INTERRUPTED",
         "PENDING",
-        "SUCCEEDED"
+        "SUCCEEDED",
+        "CAPACITY_CHECK_FAILED"
       ]
     },
     "ResourceArn":{
       "type":"string",
       "max":1024,
       "min":8,
-      "pattern":"^arn:.*$"
+      "pattern":"arn:.*"
     },
     "ResourceIdentifier":{
       "type":"string",
@@ -856,31 +985,104 @@
       },
       "exception":true
     },
+    "ShiftType":{
+      "type":"string",
+      "enum":[
+        "ZONAL_SHIFT",
+        "PRACTICE_RUN",
+        "FIS_EXPERIMENT",
+        "ZONAL_AUTOSHIFT"
+      ]
+    },
+    "StartPracticeRunRequest":{
+      "type":"structure",
+      "required":[
+        "resourceIdentifier",
+        "awayFrom",
+        "comment"
+      ],
+      "members":{
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that you want to start a practice run zonal shift for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "awayFrom":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is shifted away from for the resource that you specify for the practice run.</p>"
+        },
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>The initial comment that you enter about the practice run. Be aware that this comment can be overwritten by Amazon Web Services if the automatic check for balanced capacity fails. For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.capacity-check.html\"> Capacity checks for practice runs</a> in the Amazon Application Recovery Controller Developer Guide. </p>"
+        }
+      }
+    },
+    "StartPracticeRunResponse":{
+      "type":"structure",
+      "required":[
+        "zonalShiftId",
+        "resourceIdentifier",
+        "awayFrom",
+        "expiryTime",
+        "startTime",
+        "status",
+        "comment"
+      ],
+      "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a practice run zonal shift.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that you want to shift traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "awayFrom":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is shifted away from for the resource that you specify for the practice run.</p>"
+        },
+        "expiryTime":{
+          "shape":"ExpiryTime",
+          "documentation":"<p>The expiry time (expiration time) for an on-demand practice run zonal shift is 30 minutes from the time when you start the practice run, unless you cancel it before that time. However, be aware that the <code>expiryTime</code> field for practice run zonal shifts always has a value of 1 minute. </p>"
+        },
+        "startTime":{
+          "shape":"StartTime",
+          "documentation":"<p>The time (UTC) when the zonal shift starts.</p>"
+        },
+        "status":{
+          "shape":"ZonalShiftStatus",
+          "documentation":"<p>A status for the practice run (expected status is <b>ACTIVE</b>).</p>"
+        },
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>The initial comment that you enter about the practice run. Be aware that this comment can be overwritten by Amazon Web Services if the automatic check for balanced capacity fails. For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.capacity-check.html\"> Capacity checks for practice runs</a> in the Amazon Application Recovery Controller Developer Guide. </p>"
+        }
+      }
+    },
     "StartTime":{"type":"timestamp"},
     "StartZonalShiftRequest":{
       "type":"structure",
       "required":[
+        "resourceIdentifier",
         "awayFrom",
-        "comment",
         "expiresIn",
-        "resourceIdentifier"
+        "comment"
       ],
       "members":{
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul>"
+        },
         "awayFrom":{
           "shape":"AvailabilityZone",
           "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the Amazon Web Services Region.</p>"
         },
-        "comment":{
-          "shape":"ZonalShiftComment",
-          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>"
-        },
         "expiresIn":{
           "shape":"ExpiresIn",
-          "documentation":"<p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p> <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p> <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p> <ul> <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li> <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li> </ul> <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>"
+          "documentation":"<p>The length of time that you want a zonal shift to be active, which ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p> <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p> <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p> <ul> <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li> <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li> </ul> <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>"
         },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, supported resources are Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>"
         }
       }
     },
@@ -903,7 +1105,7 @@
       "members":{
         "status":{
           "shape":"AutoshiftObserverNotificationStatus",
-          "documentation":"<p>The status to set for autoshift observer notification. If the status is <code>ENABLED</code>, Route 53 ARC includes all autoshift events when you use the Amazon EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, Route 53 ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift. </p>"
+          "documentation":"<p>The status to set for autoshift observer notification. If the status is <code>ENABLED</code>, ARC includes all autoshift events when you use the Amazon EventBridge pattern <code>Autoshift In Progress</code>. When the status is <code>DISABLED</code>, ARC includes only autoshift events for autoshifts when one or more of your resources is included in the autoshift. </p>"
         }
       }
     },
@@ -921,27 +1123,31 @@
       "type":"structure",
       "required":["resourceIdentifier"],
       "members":{
-        "blockedDates":{
-          "shape":"BlockedDates",
-          "documentation":"<p>Add, change, or remove blocked dates for a practice run in zonal autoshift.</p> <p>Optionally, you can block practice runs for specific calendar dates. The format for blocked dates is: YYYY-MM-DD. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Separate multiple blocked dates with spaces.</p> <p>For example, if you have an application update scheduled to launch on May 1, 2024, and you don't want practice runs to shift traffic away at that time, you could set a blocked date for <code>2024-05-01</code>.</p>"
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that you want to update the practice run configuration for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>",
+          "location":"uri",
+          "locationName":"resourceIdentifier"
         },
         "blockedWindows":{
           "shape":"BlockedWindows",
-          "documentation":"<p>Add, change, or remove windows of days and times for when you can, optionally, block Route 53 ARC from starting a practice run for a resource.</p> <p>The format for blocked windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple blocked windows with spaces.</p> <p>For example, say you run business report summaries three days a week. For this scenario, you might set the following recurring days and times as blocked windows, for example: <code>MON-20:30-21:30 WED-20:30-21:30 FRI-20:30-21:30</code>.</p>"
+          "documentation":"<p>Add, change, or remove windows of days and times for when you can, optionally, block ARC from starting a practice run for a resource.</p> <p>The format for blocked windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple blocked windows with spaces.</p> <p>For example, say you run business report summaries three days a week. For this scenario, you might set the following recurring days and times as blocked windows, for example: <code>MON-20:30-21:30 WED-20:30-21:30 FRI-20:30-21:30</code>.</p>"
+        },
+        "blockedDates":{
+          "shape":"BlockedDates",
+          "documentation":"<p>Add, change, or remove blocked dates for a practice run in zonal autoshift.</p> <p>Optionally, you can block practice runs for specific calendar dates. The format for blocked dates is: YYYY-MM-DD. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Separate multiple blocked dates with spaces.</p> <p>For example, if you have an application update scheduled to launch on May 1, 2024, and you don't want practice runs to shift traffic away at that time, you could set a blocked date for <code>2024-05-01</code>.</p>"
         },
         "blockingAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>Add, change, or remove the Amazon CloudWatch alarm that you optionally specify as the blocking alarm for practice runs.</p>"
+          "shape":"BlockingAlarms",
+          "documentation":"<p>Add, change, or remove the Amazon CloudWatch alarms that you optionally specify as the blocking alarms for practice runs.</p>"
         },
-        "outcomeAlarms":{
-          "shape":"ControlConditions",
-          "documentation":"<p>Specify a new the Amazon CloudWatch alarm as the outcome alarm for practice runs.</p>"
+        "allowedWindows":{
+          "shape":"AllowedWindows",
+          "documentation":"<p>Add, change, or remove windows of days and times for when you can, optionally, allow ARC to start a practice run for a resource.</p> <p>The format for allowed windows is: DAY:HH:SS-DAY:HH:SS. Keep in mind, when you specify dates, that dates and times for practice runs are in UTC. Also, be aware of potential time adjustments that might be required for daylight saving time differences. Separate multiple allowed windows with spaces.</p> <p>For example, say you want to allow practice runs only on Wednesdays and Fridays from noon to 5 p.m. For this scenario, you could set the following recurring days and times as allowed windows, for example: <code>Wed-12:00-Wed:17:00 Fri-12:00-Fri:17:00</code>.</p> <important> <p>The <code>allowedWindows</code> have to start and end on the same day. Windows that span multiple days aren't supported.</p> </important>"
         },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource that you want to update the practice run configuration for. The identifier is the Amazon Resource Name (ARN) for the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceIdentifier"
+        "outcomeAlarms":{
+          "shape":"OutcomeAlarms",
+          "documentation":"<p>Specify one or more Amazon CloudWatch alarms as the outcome alarms for practice runs.</p>"
         }
       }
     },
@@ -950,8 +1156,8 @@
       "required":[
         "arn",
         "name",
-        "practiceRunConfiguration",
-        "zonalAutoshiftStatus"
+        "zonalAutoshiftStatus",
+        "practiceRunConfiguration"
       ],
       "members":{
         "arn":{
@@ -962,13 +1168,13 @@
           "shape":"ResourceName",
           "documentation":"<p>The name of the resource that you updated the practice run for. </p>"
         },
-        "practiceRunConfiguration":{
-          "shape":"PracticeRunConfiguration",
-          "documentation":"<p>The practice run configuration that was updated.</p>"
-        },
         "zonalAutoshiftStatus":{
           "shape":"ZonalAutoshiftStatus",
           "documentation":"<p>The zonal autoshift status for the resource that you updated the practice run for.</p>"
+        },
+        "practiceRunConfiguration":{
+          "shape":"PracticeRunConfiguration",
+          "documentation":"<p>The practice run configuration that was updated.</p>"
         }
       }
     },
@@ -1012,19 +1218,19 @@
       "type":"structure",
       "required":["zonalShiftId"],
       "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a zonal shift.</p>",
+          "location":"uri",
+          "locationName":"zonalShiftId"
+        },
         "comment":{
           "shape":"ZonalShiftComment",
           "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>"
         },
         "expiresIn":{
           "shape":"ExpiresIn",
-          "documentation":"<p>The length of time that you want a zonal shift to be active, which Route 53 ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p> <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p> <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p> <ul> <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li> <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li> </ul> <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>"
-        },
-        "zonalShiftId":{
-          "shape":"ZonalShiftId",
-          "documentation":"<p>The identifier of a zonal shift.</p>",
-          "location":"uri",
-          "locationName":"zonalShiftId"
+          "documentation":"<p>The length of time that you want a zonal shift to be active, which ARC converts to an expiry time (expiration time). Zonal shifts are temporary. You can set a zonal shift to be active initially for up to three days (72 hours).</p> <p>If you want to still keep traffic away from an Availability Zone, you can update the zonal shift and set a new expiration. You can also cancel a zonal shift, before it expires, for example, if you're ready to restore traffic to the Availability Zone.</p> <p>To set a length of time for a zonal shift to be active, specify a whole number, and then one of the following, with no space:</p> <ul> <li> <p> <b>A lowercase letter m:</b> To specify that the value is in minutes.</p> </li> <li> <p> <b>A lowercase letter h:</b> To specify that the value is in hours.</p> </li> </ul> <p>For example: <code>20h</code> means the zonal shift expires in 20 hours. <code>120m</code> means the zonal shift expires in 120 minutes (2 hours).</p>"
         }
       }
     },
@@ -1060,7 +1266,12 @@
         "UnsupportedAz",
         "InvalidAlarmCondition",
         "InvalidConditionType",
-        "InvalidPracticeBlocker"
+        "InvalidPracticeBlocker",
+        "FISExperimentUpdateNotAllowed",
+        "AutoshiftUpdateNotAllowed",
+        "UnsupportedPracticeCancelShiftType",
+        "InvalidPracticeAllowedWindow",
+        "InvalidPracticeWindows"
       ]
     },
     "Weight":{
@@ -1079,30 +1290,30 @@
     "ZonalShift":{
       "type":"structure",
       "required":[
+        "zonalShiftId",
+        "resourceIdentifier",
         "awayFrom",
-        "comment",
         "expiryTime",
-        "resourceIdentifier",
         "startTime",
         "status",
-        "zonalShiftId"
+        "comment"
       ],
       "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a zonal shift.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul>"
+        },
         "awayFrom":{
           "shape":"AvailabilityZone",
           "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the Amazon Web Services Region.</p>"
         },
-        "comment":{
-          "shape":"ZonalShiftComment",
-          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>"
-        },
         "expiryTime":{
           "shape":"ExpiryTime",
-          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
-        },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource that Amazon Web Services shifts traffic for. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, supported resources are Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
         },
         "startTime":{
           "shape":"StartTime",
@@ -1110,11 +1321,11 @@
         },
         "status":{
           "shape":"ZonalShiftStatus",
-          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE:</b> The zonal shift has been started and active.</p> </li> <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li> </ul>"
+          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE:</b> The zonal shift has been started and is active.</p> </li> <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li> </ul>"
         },
-        "zonalShiftId":{
-          "shape":"ZonalShiftId",
-          "documentation":"<p>The identifier of a zonal shift.</p>"
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. A new comment overwrites any existing comment string.</p>"
         }
       }
     },
@@ -1127,51 +1338,55 @@
       "type":"string",
       "max":36,
       "min":6,
-      "pattern":"^[A-Za-z0-9-]+$"
+      "pattern":"[A-Za-z0-9-]+"
     },
     "ZonalShiftInResource":{
       "type":"structure",
       "required":[
         "appliedStatus",
+        "zonalShiftId",
+        "resourceIdentifier",
         "awayFrom",
-        "comment",
         "expiryTime",
-        "resourceIdentifier",
         "startTime",
-        "zonalShiftId"
+        "comment"
       ],
       "members":{
         "appliedStatus":{
           "shape":"AppliedStatus",
-          "documentation":"<p>The <code>appliedStatus</code> field specifies which application traffic shift is in effect for a resource when there is more than one active traffic shift. There can be more than one application traffic shift in progress at the same time - that is, practice run zonal shifts, customer-initiated zonal shifts, or an autoshift. The <code>appliedStatus</code> field for a shift that is in progress for a resource can have one of two values: <code>APPLIED</code> or <code>NOT_APPLIED</code>. The zonal shift or autoshift that is currently in effect for the resource has an <code>appliedStatus</code> set to <code>APPLIED</code>.</p> <p>The overall principle for precedence is that zonal shifts that you start as a customer take precedence autoshifts, which take precedence over practice runs. That is, customer-initiated zonal shifts &gt; autoshifts &gt; practice run zonal shifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
+          "documentation":"<p>The <code>appliedStatus</code> field specifies which application traffic shift is in effect for a resource when there is more than one active traffic shift. There can be more than one application traffic shift in progress at the same time - that is, practice run zonal shifts, customer-initiated zonal shifts, or an autoshift. The <code>appliedStatus</code> field for a shift that is in progress for a resource can have one of two values: <code>APPLIED</code> or <code>NOT_APPLIED</code>. The zonal shift or autoshift that is currently in effect for the resource has an <code>appliedStatus</code> set to <code>APPLIED</code>.</p> <p>The overall principle for precedence is that zonal shifts that you start as a customer take precedence autoshifts, which take precedence over practice runs. That is, customer-initiated zonal shifts &gt; autoshifts &gt; practice run zonal shifts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.how-it-works.html\">How zonal autoshift and practice runs work</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
+        },
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a zonal shift.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancer</a> </p> </li> </ul>"
         },
         "awayFrom":{
           "shape":"AvailabilityZone",
           "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the Amazon Web Services Region.</p>"
         },
-        "comment":{
-          "shape":"ZonalShiftComment",
-          "documentation":"<p>A comment that you enter for a customer-initiated zonal shift. Only the latest comment is retained; no comment history is maintained. That is, a new comment overwrites any existing comment string.</p>"
-        },
         "expiryTime":{
           "shape":"ExpiryTime",
-          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
-        },
-        "practiceRunOutcome":{
-          "shape":"PracticeRunOutcome",
-          "documentation":"<p>The outcome, or end state, returned for a practice run. The following values can be returned:</p> <ul> <li> <p> <b>PENDING:</b> Outcome value when a practice run is in progress.</p> </li> <li> <p> <b>SUCCEEDED:</b> Outcome value when the outcome alarm specified for the practice run configuration does not go into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed the expected 30 minute zonal shift.</p> </li> <li> <p> <b>INTERRUPTED:</b> Outcome value when the practice run was stopped before the expected 30 minute zonal shift duration, or there was another problem with the practice run that created an inconclusive outcome.</p> </li> <li> <p> <b>FAILED:</b> Outcome value when the outcome alarm specified for the practice run configuration goes into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> </ul> <p>For more information about practice run outcomes, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.configure.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
-        },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
         },
         "startTime":{
           "shape":"StartTime",
           "documentation":"<p>The time (UTC) when the zonal shift starts.</p>"
         },
-        "zonalShiftId":{
-          "shape":"ZonalShiftId",
-          "documentation":"<p>The identifier of a zonal shift.</p>"
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>A comment that you enter for a customer-initiated zonal shift. Only the latest comment is retained; no comment history is maintained. That is, a new comment overwrites any existing comment string.</p>"
+        },
+        "shiftType":{
+          "shape":"ShiftType",
+          "documentation":"<p>Defines the zonal shift type.</p>"
+        },
+        "practiceRunOutcome":{
+          "shape":"PracticeRunOutcome",
+          "documentation":"<p>The outcome, or end state, returned for a practice run. The following values can be returned:</p> <ul> <li> <p> <b>PENDING:</b> Outcome value when a practice run is in progress.</p> </li> <li> <p> <b>SUCCEEDED:</b> Outcome value when the outcome alarm specified for the practice run configuration does not go into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed the expected 30 minute zonal shift.</p> </li> <li> <p> <b>INTERRUPTED:</b> Outcome value when the practice run was stopped before the expected 30 minute zonal shift duration, or there was another problem with the practice run that created an inconclusive outcome.</p> </li> <li> <p> <b>FAILED:</b> Outcome value when the outcome alarm specified for the practice run configuration goes into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> <li> <p> <b>CAPACITY_CHECK_FAILED:</b> The check for balanced capacity across Availability Zones for your load balancing and Auto Scaling group resources failed.</p> </li> </ul> <p>For more information about practice run outcomes, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.configure.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
         }
       },
       "documentation":"<p>A complex structure that lists the zonal shifts for a managed resource and their statuses for the resource.</p>"
@@ -1191,34 +1406,30 @@
     "ZonalShiftSummary":{
       "type":"structure",
       "required":[
+        "zonalShiftId",
+        "resourceIdentifier",
         "awayFrom",
-        "comment",
         "expiryTime",
-        "resourceIdentifier",
         "startTime",
         "status",
-        "zonalShiftId"
+        "comment"
       ],
       "members":{
+        "zonalShiftId":{
+          "shape":"ZonalShiftId",
+          "documentation":"<p>The identifier of a zonal shift.</p>"
+        },
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>Amazon Application Recovery Controller currently supports enabling the following resources for zonal shift and zonal autoshift:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.ec2-auto-scaling-groups.html\">Amazon EC2 Auto Scaling groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.eks.html\">Amazon Elastic Kubernetes Service</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.app-load-balancers.html\">Application Load Balancers</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.resource-types.network-load-balancers.html\">Network Load Balancers</a> </p> </li> </ul>"
+        },
         "awayFrom":{
           "shape":"AvailabilityZone",
           "documentation":"<p>The Availability Zone (for example, <code>use1-az1</code>) that traffic is moved away from for a resource when you start a zonal shift. Until the zonal shift expires or you cancel it, traffic for the resource is instead moved to other Availability Zones in the Amazon Web Services Region.</p>"
         },
-        "comment":{
-          "shape":"ZonalShiftComment",
-          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. That is, a new comment overwrites any existing comment string.</p>"
-        },
         "expiryTime":{
           "shape":"ExpiryTime",
-          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which Route 53 ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
-        },
-        "practiceRunOutcome":{
-          "shape":"PracticeRunOutcome",
-          "documentation":"<p>The outcome, or end state, of a practice run. The following values can be returned:</p> <ul> <li> <p> <b>PENDING:</b> Outcome value when the practice run is in progress.</p> </li> <li> <p> <b>SUCCEEDED:</b> Outcome value when the outcome alarm specified for the practice run configuration does not go into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> <li> <p> <b>INTERRUPTED:</b> Outcome value when the practice run did not run for the expected 30 minutes or there was another problem with the practice run that created an inconclusive outcome.</p> </li> <li> <p> <b>FAILED:</b> Outcome value when the outcome alarm specified for the practice run configuration goes into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> </ul> <p>For more information about practice run outcomes, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.configure.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Route 53 Application Recovery Controller Developer Guide.</p>"
-        },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The identifier for the resource to include in a zonal shift. The identifier is the Amazon Resource Name (ARN) for the resource.</p> <p>At this time, you can only start a zonal shift for Network Load Balancers and Application Load Balancers with cross-zone load balancing turned off.</p>"
+          "documentation":"<p>The expiry time (expiration time) for a customer-initiated zonal shift. A zonal shift is temporary and must be set to expire when you start the zonal shift. You can initially set a zonal shift to expire in a maximum of three days (72 hours). However, you can update a zonal shift to set a new expiration at any time. </p> <p>When you start a zonal shift, you specify how long you want it to be active, which ARC converts to an expiry time (expiration time). You can cancel a zonal shift when you're ready to restore traffic to the Availability Zone, or just wait for it to expire. Or you can update the zonal shift to specify another length of time to expire in.</p>"
         },
         "startTime":{
           "shape":"StartTime",
@@ -1226,19 +1437,27 @@
         },
         "status":{
           "shape":"ZonalShiftStatus",
-          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE:</b> The zonal shift has been started and active.</p> </li> <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li> </ul>"
+          "documentation":"<p>A status for a zonal shift.</p> <p>The <code>Status</code> for a zonal shift can have one of the following values:</p> <ul> <li> <p> <b>ACTIVE:</b> The zonal shift has been started and is active.</p> </li> <li> <p> <b>EXPIRED:</b> The zonal shift has expired (the expiry time was exceeded).</p> </li> <li> <p> <b>CANCELED:</b> The zonal shift was canceled.</p> </li> </ul>"
         },
-        "zonalShiftId":{
-          "shape":"ZonalShiftId",
-          "documentation":"<p>The identifier of a zonal shift.</p>"
+        "comment":{
+          "shape":"ZonalShiftComment",
+          "documentation":"<p>A comment that you enter about the zonal shift. Only the latest comment is retained; no comment history is maintained. That is, a new comment overwrites any existing comment string.</p>"
+        },
+        "shiftType":{
+          "shape":"ShiftType",
+          "documentation":"<p>Defines the zonal shift type.</p>"
+        },
+        "practiceRunOutcome":{
+          "shape":"PracticeRunOutcome",
+          "documentation":"<p>The outcome, or end state, of a practice run. The following values can be returned:</p> <ul> <li> <p> <b>PENDING:</b> Outcome value when the practice run is in progress.</p> </li> <li> <p> <b>SUCCEEDED:</b> Outcome value when the outcome alarm specified for the practice run configuration does not go into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> <li> <p> <b>INTERRUPTED:</b> Outcome value when the practice run did not run for the expected 30 minutes or there was another problem with the practice run that created an inconclusive outcome.</p> </li> <li> <p> <b>FAILED:</b> Outcome value when the outcome alarm specified for the practice run configuration goes into an <code>ALARM</code> state during the practice run, and the practice run was not interrupted before it completed.</p> </li> <li> <p> <b>CAPACITY_CHECK_FAILED:</b> The check for balanced capacity across Availability Zones for your load balancing and Auto Scaling group resources failed.</p> </li> </ul> <p>For more information about practice run outcomes, see <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-autoshift.configure.html\"> Considerations when you configure zonal autoshift</a> in the Amazon Application Recovery Controller Developer Guide.</p>"
         }
       },
-      "documentation":"<p>Lists information about zonal shifts in Amazon Route 53 Application Recovery Controller, including zonal shifts that you start yourself and zonal shifts that Route 53 ARC starts on your behalf for practice runs with zonal autoshift.</p> <p>Zonal shifts are temporary, including customer-initiated zonal shifts and the zonal autoshift practice run zonal shifts that Route 53 ARC starts weekly, on your behalf. A zonal shift that a customer starts can be active for up to three days (72 hours). A practice run zonal shift has a 30 minute duration.</p>"
+      "documentation":"<p>Lists information about zonal shifts in Amazon Application Recovery Controller, including zonal shifts that you start yourself and zonal shifts that ARC starts on your behalf for practice runs with zonal autoshift.</p> <p>Zonal shifts are temporary, including customer-initiated zonal shifts and the zonal autoshift practice run zonal shifts that ARC starts weekly, on your behalf. A zonal shift that a customer starts can be active for up to three days (72 hours). A practice run zonal shift has a 30 minute duration.</p>"
     },
     "ZonalShiftsInResource":{
       "type":"list",
       "member":{"shape":"ZonalShiftInResource"}
     }
   },
-  "documentation":"<p>Welcome to the API Reference Guide for zonal shift and zonal autoshift in Amazon Route 53 Application Recovery Controller (Route 53 ARC).</p> <p>You can start a zonal shift to move traffic for a load balancer resource away from an Availability Zone to help your application recover quickly from an impairment in an Availability Zone. For example, you can recover your application from a developer's bad code deployment or from an Amazon Web Services infrastructure failure in a single Availability Zone.</p> <p>You can also configure zonal autoshift for supported load balancer resources. Zonal autoshift is a capability in Route 53 ARC where you authorize Amazon Web Services to shift away application resource traffic from an Availability Zone during events, on your behalf, to help reduce your time to recovery. Amazon Web Services starts an autoshift when internal telemetry indicates that there is an Availability Zone impairment that could potentially impact customers.</p> <p>To help make sure that zonal autoshift is safe for your application, you must also configure practice runs when you enable zonal autoshift for a resource. Practice runs start weekly zonal shifts for a resource, to shift traffic for the resource away from an Availability Zone. Practice runs help you to make sure, on a regular basis, that you have enough capacity in all the Availability Zones in an Amazon Web Services Region for your application to continue to operate normally when traffic for a resource is shifted away from one Availability Zone.</p> <important> <p>Before you configure practice runs or enable zonal autoshift, we strongly recommend that you prescale your application resource capacity in all Availability Zones in the Region where your application resources are deployed. You should not rely on scaling on demand when an autoshift or practice run starts. Zonal autoshift, including practice runs, works independently, and does not wait for auto scaling actions to complete. Relying on auto scaling, instead of pre-scaling, can result in loss of availability.</p> <p>If you use auto scaling to handle regular cycles of traffic, we strongly recommend that you configure the minimum capacity of your auto scaling to continue operating normally with the loss of an Availability Zone. </p> </important> <p>Be aware that Route 53 ARC does not inspect the health of individual resources. Amazon Web Services only starts an autoshift when Amazon Web Services telemetry detects that there is an Availability Zone impairment that could potentially impact customers. In some cases, resources might be shifted away that are not experiencing impact.</p> <p>For more information about using zonal shift and zonal autoshift, see the <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html\">Amazon Route 53 Application Recovery Controller Developer Guide</a>.</p>"
+  "documentation":"<p>Welcome to the API Reference Guide for zonal shift and zonal autoshift in Amazon Application Recovery Controller (ARC).</p> <p>You can start a zonal shift to move traffic for a load balancer resource away from an Availability Zone to help your application recover quickly from an impairment in an Availability Zone. For example, you can recover your application from a developer's bad code deployment or from an Amazon Web Services infrastructure failure in a single Availability Zone.</p> <p>You can also configure zonal autoshift for supported load balancer resources. Zonal autoshift is a capability in ARC where you authorize Amazon Web Services to shift away application resource traffic from an Availability Zone during events, on your behalf, to help reduce your time to recovery. Amazon Web Services starts an autoshift when internal telemetry indicates that there is an Availability Zone impairment that could potentially impact customers.</p> <p>For more information about using zonal shift and zonal autoshift, see the <a href=\"https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html\">Amazon Application Recovery Controller Developer Guide</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/waiters-2.json 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/arc-zonal-shift/2022-10-30/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/artifact/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/artifact/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/artifact/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/artifact/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/athena/2017-05-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/athena/2017-05-18/service-2.json 2.31.35-1/awscli/botocore/data/athena/2017-05-18/service-2.json
--- 2.23.6-1/awscli/botocore/data/athena/2017-05-18/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/athena/2017-05-18/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -98,7 +98,7 @@
         {"shape":"InternalServerException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Creates (registers) a data catalog with the specified name and properties. Catalogs created are visible to all users of the same Amazon Web Services account.</p> <p>This API operation creates the following resources.</p> <ul> <li> <p>CFN Stack Name with a maximum length of 128 characters and prefix <code>athenafederatedcatalog-CATALOG_NAME_SANITIZED</code> with length 23 characters.</p> </li> <li> <p>Lambda Function Name with a maximum length of 64 characters and prefix <code>athenafederatedcatalog_CATALOG_NAME_SANITIZED</code> with length 23 characters.</p> </li> <li> <p>Glue Connection Name with a maximum length of 255 characters and a prefix <code>athenafederatedcatalog_CATALOG_NAME_SANITIZED</code> with length 23 characters. </p> </li> </ul>"
+      "documentation":"<p>Creates (registers) a data catalog with the specified name and properties. Catalogs created are visible to all users of the same Amazon Web Services account.</p> <p>For a <code>FEDERATED</code> catalog, this API operation creates the following resources.</p> <ul> <li> <p>CFN Stack Name with a maximum length of 128 characters and prefix <code>athenafederatedcatalog-CATALOG_NAME_SANITIZED</code> with length 23 characters.</p> </li> <li> <p>Lambda Function Name with a maximum length of 64 characters and prefix <code>athenafederatedcatalog_CATALOG_NAME_SANITIZED</code> with length 23 characters.</p> </li> <li> <p>Glue Connection Name with a maximum length of 255 characters and a prefix <code>athenafederatedcatalog_CATALOG_NAME_SANITIZED</code> with length 23 characters. </p> </li> </ul>"
     },
     "CreateNamedQuery":{
       "name":"CreateNamedQuery",
@@ -1307,8 +1307,7 @@
     },
     "CancelCapacityReservationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CapacityAllocation":{
       "type":"structure",
@@ -1592,8 +1591,7 @@
     },
     "CreateCapacityReservationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateDataCatalogInput":{
       "type":"structure",
@@ -1608,7 +1606,7 @@
         },
         "Type":{
           "shape":"DataCatalogType",
-          "documentation":"<p>The type of data catalog to create: <code>LAMBDA</code> for a federated catalog, <code>GLUE</code> for an Glue Data Catalog, and <code>HIVE</code> for an external Apache Hive metastore. <code>FEDERATED</code> is a federated catalog for which Athena creates the connection and the Lambda function for you based on the parameters that you pass.</p>"
+          "documentation":"<p>The type of data catalog to create: <code>LAMBDA</code> for a federated catalog, <code>GLUE</code> for an Glue Data Catalog, and <code>HIVE</code> for an external Apache Hive metastore. <code>FEDERATED</code> is a federated catalog for which Athena creates the connection and the Lambda function for you based on the parameters that you pass.</p> <p>For <code>FEDERATED</code> type, we do not support IAM identity center.</p>"
         },
         "Description":{
           "shape":"DescriptionString",
@@ -1732,8 +1730,7 @@
     },
     "CreatePreparedStatementOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreatePresignedNotebookUrlRequest":{
       "type":"structure",
@@ -1791,8 +1788,7 @@
     },
     "CreateWorkGroupOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomerContentEncryptionConfiguration":{
       "type":"structure",
@@ -1953,8 +1949,7 @@
     },
     "DeleteCapacityReservationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataCatalogInput":{
       "type":"structure",
@@ -1989,8 +1984,7 @@
     },
     "DeleteNamedQueryOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNotebookInput":{
       "type":"structure",
@@ -2004,8 +1998,7 @@
     },
     "DeleteNotebookOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePreparedStatementInput":{
       "type":"structure",
@@ -2026,8 +2019,7 @@
     },
     "DeletePreparedStatementOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkGroupInput":{
       "type":"structure",
@@ -2045,8 +2037,7 @@
     },
     "DeleteWorkGroupOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescriptionString":{
       "type":"string",
@@ -2525,6 +2516,10 @@
         "MaxResults":{
           "shape":"MaxQueryResults",
           "documentation":"<p>The maximum number of results (rows) to return in this request.</p>"
+        },
+        "QueryResultType":{
+          "shape":"QueryResultType",
+          "documentation":"<p> When you set this to <code>DATA_ROWS</code> or empty, <code>GetQueryResults</code> returns the query results in rows. If set to <code>DATA_MANIFEST</code>, it returns the manifest file in rows. Only the query types <code>CREATE TABLE AS SELECT</code>, <code>UNLOAD</code>, and <code>INSERT</code> can generate a manifest file. If you use <code>DATA_MANIFEST</code> for other query types, the query will fail. </p>"
         }
       }
     },
@@ -3313,6 +3308,50 @@
       }
     },
     "Long":{"type":"long"},
+    "ManagedQueryResultsConfiguration":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>If set to true, allows you to store query results in Athena owned storage. If set to false, workgroup member stores query results in location specified under <code>ResultConfiguration$OutputLocation</code>. The default is false. A workgroup cannot have the <code>ResultConfiguration$OutputLocation</code> parameter when you set this field to true. </p>"
+        },
+        "EncryptionConfiguration":{
+          "shape":"ManagedQueryResultsEncryptionConfiguration",
+          "documentation":"<p>If you encrypt query and calculation results in Athena owned storage, this field indicates the encryption option (for example, SSE_KMS or CSE_KMS) and key information.</p>"
+        }
+      },
+      "documentation":"<p> The configuration for storing results in Athena owned storage, which includes whether this feature is enabled; whether encryption configuration, if any, is used for encrypting query results. </p>"
+    },
+    "ManagedQueryResultsConfigurationUpdates":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>If set to true, specifies that Athena manages query results in Athena owned storage.</p>"
+        },
+        "EncryptionConfiguration":{
+          "shape":"ManagedQueryResultsEncryptionConfiguration",
+          "documentation":"<p>If you encrypt query and calculation results in Athena owned storage, this field indicates the encryption option (for example, SSE_KMS or CSE_KMS) and key information.</p>"
+        },
+        "RemoveEncryptionConfiguration":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>If set to true, it removes workgroup from Athena owned storage. The existing query results are cleaned up after 24hrs. You must provide query results in location specified under <code>ResultConfiguration$OutputLocation</code>.</p>"
+        }
+      },
+      "documentation":"<p>Updates the configuration for managed query results.</p>"
+    },
+    "ManagedQueryResultsEncryptionConfiguration":{
+      "type":"structure",
+      "required":["KmsKey"],
+      "members":{
+        "KmsKey":{
+          "shape":"KmsKey",
+          "documentation":"<p>The ARN of an KMS key for encrypting managed query results.</p>"
+        }
+      },
+      "documentation":"<p>If you encrypt query and calculation results in Athena owned storage, this field indicates the encryption option (for example, SSE_KMS or CSE_KMS) and key information.</p>"
+    },
     "MaxApplicationDPUSizesCount":{
       "type":"integer",
       "max":100,
@@ -3639,8 +3678,7 @@
     },
     "PutCapacityAssignmentConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "QueryExecution":{
       "type":"structure",
@@ -3657,6 +3695,10 @@
           "shape":"StatementType",
           "documentation":"<p>The type of query statement that was run. <code>DDL</code> indicates DDL query statements. <code>DML</code> indicates DML (Data Manipulation Language) query statements, such as <code>CREATE TABLE AS SELECT</code>. <code>UTILITY</code> indicates query statements other than DDL and DML, such as <code>SHOW CREATE TABLE</code>, or <code>DESCRIBE TABLE</code>.</p>"
         },
+        "ManagedQueryResultsConfiguration":{
+          "shape":"ManagedQueryResultsConfiguration",
+          "documentation":"<p> The configuration for storing results in Athena owned storage, which includes whether this feature is enabled; whether encryption configuration, if any, is used for encrypting query results. </p>"
+        },
         "ResultConfiguration":{
           "shape":"ResultConfiguration",
           "documentation":"<p>The location in Amazon S3 where query and calculation results are stored and the encryption option, if any, used for query results. These are known as \"client-side settings\". If workgroup settings override client-side settings, then the query uses the location for the query results and the encryption configuration that are specified for the workgroup.</p>"
@@ -3808,6 +3850,13 @@
       },
       "documentation":"<p>The completion date, current state, submission time, and state change reason (if applicable) for the query execution.</p>"
     },
+    "QueryResultType":{
+      "type":"string",
+      "enum":[
+        "DATA_MANIFEST",
+        "DATA_ROWS"
+      ]
+    },
     "QueryResultsS3AccessGrantsConfiguration":{
       "type":"structure",
       "required":[
@@ -4276,7 +4325,7 @@
           "shape":"CalculationConfiguration",
           "documentation":"<p>Contains configuration information for the calculation.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Kepler Post GA Tasks : https://sim.amazon.com/issues/ATHENA-39828"
+          "deprecatedMessage":"Structure is deprecated."
         },
         "CodeBlock":{
           "shape":"CodeBlock",
@@ -4437,8 +4486,7 @@
     },
     "StopQueryExecutionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{"type":"string"},
     "StringList":{
@@ -4538,8 +4586,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4681,8 +4728,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCapacityReservationInput":{
       "type":"structure",
@@ -4703,8 +4749,7 @@
     },
     "UpdateCapacityReservationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataCatalogInput":{
       "type":"structure",
@@ -4733,8 +4778,7 @@
     },
     "UpdateDataCatalogOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNamedQueryInput":{
       "type":"structure",
@@ -4764,8 +4808,7 @@
     },
     "UpdateNamedQueryOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotebookInput":{
       "type":"structure",
@@ -4820,13 +4863,11 @@
     },
     "UpdateNotebookMetadataOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotebookOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePreparedStatementInput":{
       "type":"structure",
@@ -4856,8 +4897,7 @@
     },
     "UpdatePreparedStatementOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWorkGroupInput":{
       "type":"structure",
@@ -4883,8 +4923,7 @@
     },
     "UpdateWorkGroupOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "WorkGroup":{
       "type":"structure",
@@ -4924,6 +4963,10 @@
           "shape":"ResultConfiguration",
           "documentation":"<p>The configuration for the workgroup, which includes the location in Amazon S3 where query and calculation results are stored and the encryption option, if any, used for query and calculation results. To run the query, you must specify the query results location using one of the ways: either in the workgroup using this setting, or for individual queries (client-side), using <a>ResultConfiguration$OutputLocation</a>. If none of them is set, Athena issues an error that no output location is provided.</p>"
         },
+        "ManagedQueryResultsConfiguration":{
+          "shape":"ManagedQueryResultsConfiguration",
+          "documentation":"<p> The configuration for storing results in Athena owned storage, which includes whether this feature is enabled; whether encryption configuration, if any, is used for encrypting query results. </p>"
+        },
         "EnforceWorkGroupConfiguration":{
           "shape":"BoxedBoolean",
           "documentation":"<p>If set to \"true\", the settings for the workgroup override client-side settings. If set to \"false\", client-side settings are used. For more information, see <a href=\"https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html\">Workgroup Settings Override Client-Side Settings</a>.</p>"
@@ -4982,6 +5025,10 @@
           "shape":"ResultConfigurationUpdates",
           "documentation":"<p>The result configuration information about the queries in this workgroup that will be updated. Includes the updated results location and an updated option for encrypting query results.</p>"
         },
+        "ManagedQueryResultsConfigurationUpdates":{
+          "shape":"ManagedQueryResultsConfigurationUpdates",
+          "documentation":"<p>Updates configuration information for managed query results in the workgroup.</p>"
+        },
         "PublishCloudWatchMetricsEnabled":{
           "shape":"BoxedBoolean",
           "documentation":"<p>Indicates whether this workgroup enables publishing metrics to Amazon CloudWatch.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/auditmanager/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/auditmanager/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/auditmanager/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/auditmanager/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/auditmanager/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"auditmanager",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS Audit Manager",
     "serviceId":"AuditManager",
     "signatureVersion":"v4",
     "signingName":"auditmanager",
-    "uid":"auditmanager-2017-07-25"
+    "uid":"auditmanager-2017-07-25",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateAssessmentReportEvidenceFolder":{
@@ -568,7 +570,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets a list of the Amazon Web Services from which Audit Manager can collect evidence. </p> <p>Audit Manager defines which Amazon Web Services are in scope for an assessment. Audit Manager infers this scope by examining the assessment’s controls and their data sources, and then mapping this information to one or more of the corresponding Amazon Web Services that are in this list.</p> <note> <p>For information about why it's no longer possible to specify services in scope manually, see <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/evidence-collection-issues.html#unable-to-edit-services\">I can't edit the services in scope for my assessment</a> in the <i>Troubleshooting</i> section of the Audit Manager user guide.</p> </note>"
+      "documentation":"<p>Gets a list of the Amazon Web Services services from which Audit Manager can collect evidence. </p> <p>Audit Manager defines which Amazon Web Services services are in scope for an assessment. Audit Manager infers this scope by examining the assessment’s controls and their data sources, and then mapping this information to one or more of the corresponding Amazon Web Services services that are in this list.</p> <note> <p>For information about why it's no longer possible to specify services in scope manually, see <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/evidence-collection-issues.html#unable-to-edit-services\">I can't edit the services in scope for my assessment</a> in the <i>Troubleshooting</i> section of the Audit Manager user guide.</p> </note>"
     },
     "GetSettings":{
       "name":"GetSettings",
@@ -797,7 +799,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p> Enables an Amazon Web Services account within the organization as the delegated administrator for Audit Manager. </p>"
     },
@@ -860,7 +863,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p> Edits an Audit Manager assessment. </p>"
     },
@@ -908,7 +912,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p> Updates a custom framework in Audit Manager. </p>"
     },
@@ -1025,10 +1030,10 @@
       "members":{
         "serviceName":{
           "shape":"AWSServiceName",
-          "documentation":"<p> The name of the Amazon Web Service. </p>"
+          "documentation":"<p> The name of the Amazon Web Services service. </p>"
         }
       },
-      "documentation":"<p> An Amazon Web Service such as Amazon S3 or CloudTrail. </p> <p>For an example of how to find an Amazon Web Service name and how to define it in your assessment scope, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_GetServicesInScope.html#API_GetServicesInScope_Example_2\">Finding an Amazon Web Service name to use in your assessment scope</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_GetServicesInScope.html#API_GetServicesInScope_Example_3\">Defining an Amazon Web Service name in your assessment scope</a> </p> </li> </ul>"
+      "documentation":"<p> An Amazon Web Services service such as Amazon S3 or CloudTrail. </p> <p>For an example of how to find an Amazon Web Services service name and how to define it in your assessment scope, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_GetServicesInScope.html#API_GetServicesInScope_Example_2\">Finding an Amazon Web Services service name to use in your assessment scope</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/APIReference/API_GetServicesInScope.html#API_GetServicesInScope_Example_3\">Defining an Amazon Web Services service name in your assessment scope</a> </p> </li> </ul>"
     },
     "AWSServiceName":{
       "type":"string",
@@ -1134,7 +1139,10 @@
         },
         "description":{
           "shape":"ControlDescription",
-          "documentation":"<p> The description of the control. </p>"
+          "documentation":"<p> The description of the control. </p>",
+          "deprecated":true,
+          "deprecatedMessage":"This data type will be deprecated on May 19, 2025. To view the assessment control description, use GetControl.",
+          "deprecatedSince":"2025-05-19"
         },
         "status":{
           "shape":"ControlStatus",
@@ -1244,7 +1252,7 @@
         },
         "dataSource":{
           "shape":"String",
-          "documentation":"<p> The Amazon Web Service that the evidence was collected from. </p>"
+          "documentation":"<p> The Amazon Web Services service that the evidence was collected from. </p>"
         },
         "author":{
           "shape":"String",
@@ -1268,7 +1276,7 @@
         },
         "evidenceByTypeConfigurationDataCount":{
           "shape":"Integer",
-          "documentation":"<p> The number of evidence that falls under the configuration data category. This evidence is collected from configuration snapshots of other Amazon Web Services such as Amazon EC2, Amazon S3, or IAM. </p>"
+          "documentation":"<p> The number of evidence that falls under the configuration data category. This evidence is collected from configuration snapshots of other Amazon Web Services services such as Amazon EC2, Amazon S3, or IAM. </p>"
         },
         "evidenceByTypeManualCount":{
           "shape":"Integer",
@@ -1717,8 +1725,7 @@
     },
     "AssociateAssessmentReportEvidenceFolderResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AuditManagerArn":{
       "type":"string",
@@ -2445,7 +2452,7 @@
         },
         "controlSets":{
           "shape":"CreateAssessmentFrameworkControlSets",
-          "documentation":"<p> The control sets that are associated with the framework. </p>"
+          "documentation":"<p> The control sets that are associated with the framework. </p> <note> <p>The <code>Controls</code> object returns a partial response when called through Framework APIs. For a complete <code>Controls</code> object, use <code>GetControl</code>.</p> </note>"
         },
         "tags":{
           "shape":"TagMap",
@@ -2458,7 +2465,7 @@
       "members":{
         "framework":{
           "shape":"Framework",
-          "documentation":"<p> The name of the new framework that the <code>CreateAssessmentFramework</code> API returned. </p>"
+          "documentation":"<p> The new framework object that the <code>CreateAssessmentFramework</code> API returned. </p>"
         }
       }
     },
@@ -2810,8 +2817,7 @@
     },
     "DeleteAssessmentFrameworkResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssessmentFrameworkShareRequest":{
       "type":"structure",
@@ -2836,8 +2842,7 @@
     },
     "DeleteAssessmentFrameworkShareResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssessmentReportRequest":{
       "type":"structure",
@@ -2862,8 +2867,7 @@
     },
     "DeleteAssessmentReportResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssessmentRequest":{
       "type":"structure",
@@ -2879,8 +2883,7 @@
     },
     "DeleteAssessmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteControlRequest":{
       "type":"structure",
@@ -2896,8 +2899,7 @@
     },
     "DeleteControlResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResources":{
       "type":"string",
@@ -2908,8 +2910,7 @@
     },
     "DeregisterAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterAccountResponse":{
       "type":"structure",
@@ -2931,8 +2932,7 @@
     },
     "DeregisterOrganizationAdminAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregistrationPolicy":{
       "type":"structure",
@@ -2965,8 +2965,7 @@
     },
     "DisassociateAssessmentReportEvidenceFolderResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EmailAddress":{
       "type":"string",
@@ -3008,7 +3007,7 @@
         },
         "eventSource":{
           "shape":"AWSServiceName",
-          "documentation":"<p> The Amazon Web Service that the evidence is collected from. </p>"
+          "documentation":"<p> The Amazon Web Services service that the evidence is collected from. </p>"
         },
         "eventName":{
           "shape":"EventName",
@@ -3186,11 +3185,14 @@
         },
         "controlSources":{
           "shape":"ControlSources",
-          "documentation":"<p> The control data sources where Audit Manager collects evidence from.</p>"
+          "documentation":"<p> The control data sources where Audit Manager collects evidence from.</p> <important> <p>This API parameter is no longer supported.</p> </important>",
+          "deprecated":true,
+          "deprecatedMessage":"Use controlSources from the Control",
+          "deprecatedSince":"2025-07-24"
         },
         "controlSets":{
           "shape":"ControlSets",
-          "documentation":"<p> The control sets that are associated with the framework. </p>"
+          "documentation":"<p> The control sets that are associated with the framework. </p> <note> <p>The <code>Controls</code> object returns a partial response when called through Framework APIs. For a complete <code>Controls</code> object, use <code>GetControl</code>.</p> </note>"
         },
         "createdAt":{
           "shape":"Timestamp",
@@ -3268,8 +3270,7 @@
     },
     "GetAccountStatusRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAccountStatusResponse":{
       "type":"structure",
@@ -3297,7 +3298,7 @@
       "members":{
         "framework":{
           "shape":"Framework",
-          "documentation":"<p> The framework that the <code>GetAssessmentFramework</code> API returned. </p>"
+          "documentation":"<p> The framework that the <code>GetAssessmentFramework</code> API returned. </p> <note> <p>The <code>Controls</code> object returns a partial response when called through Framework APIs. For a complete <code>Controls</code> object, use <code>GetControl</code>.</p> </note>"
         }
       }
     },
@@ -3720,8 +3721,7 @@
     },
     "GetInsightsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetInsightsResponse":{
       "type":"structure",
@@ -3734,8 +3734,7 @@
     },
     "GetOrganizationAdminAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetOrganizationAdminAccountResponse":{
       "type":"structure",
@@ -3752,15 +3751,14 @@
     },
     "GetServicesInScopeRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetServicesInScopeResponse":{
       "type":"structure",
       "members":{
         "serviceMetadata":{
           "shape":"ServiceMetadataList",
-          "documentation":"<p> The metadata that's associated with the Amazon Web Service. </p>"
+          "documentation":"<p> The metadata that's associated with the Amazon Web Services service. </p>"
         }
       }
     },
@@ -4565,7 +4563,7 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^(S|s)3:\\/\\/[a-zA-Z0-9\\-\\.\\(\\)\\'\\*\\_\\!\\/]+$"
+      "pattern":"^(S|s)3:\\/\\/[a-zA-Z0-9\\-\\.\\(\\)\\'\\*\\_\\!\\=\\+\\@\\:\\s\\,\\?\\/]+$"
     },
     "SNSTopic":{
       "type":"string",
@@ -4583,12 +4581,12 @@
         },
         "awsServices":{
           "shape":"AWSServices",
-          "documentation":"<p> The Amazon Web Services services that are included in the scope of the assessment. </p> <important> <p>This API parameter is no longer supported. If you use this parameter to specify one or more Amazon Web Services, Audit Manager ignores this input. Instead, the value for <code>awsServices</code> will show as empty.</p> </important>",
+          "documentation":"<p> The Amazon Web Services services that are included in the scope of the assessment. </p> <important> <p>This API parameter is no longer supported. If you use this parameter to specify one or more Amazon Web Services services, Audit Manager ignores this input. Instead, the value for <code>awsServices</code> will show as empty.</p> </important>",
           "deprecated":true,
           "deprecatedMessage":"You can't specify services in scope when creating/updating an assessment. If you use the parameter to specify one or more AWS services, Audit Manager ignores the input. Instead the value of the parameter will show as empty indicating that the services are defined and managed by Audit Manager."
         }
       },
-      "documentation":"<p> The wrapper that contains the Amazon Web Services accounts that are in scope for the assessment. </p> <note> <p>You no longer need to specify which Amazon Web Services are in scope when you create or update an assessment. Audit Manager infers the services in scope by examining your assessment controls and their data sources, and then mapping this information to the relevant Amazon Web Services. </p> <p>If an underlying data source changes for your assessment, we automatically update the services scope as needed to reflect the correct Amazon Web Services. This ensures that your assessment collects accurate and comprehensive evidence about all of the relevant services in your AWS environment.</p> </note>",
+      "documentation":"<p> The wrapper that contains the Amazon Web Services accounts that are in scope for the assessment. </p> <note> <p>You no longer need to specify which Amazon Web Services services are in scope when you create or update an assessment. Audit Manager infers the services in scope by examining your assessment controls and their data sources, and then mapping this information to the relevant Amazon Web Services services. </p> <p>If an underlying data source changes for your assessment, we automatically update the services scope as needed to reflect the correct Amazon Web Services services. This ensures that your assessment collects accurate and comprehensive evidence about all of the relevant services in your AWS environment.</p> </note>",
       "sensitive":true
     },
     "ServiceMetadata":{
@@ -4596,22 +4594,22 @@
       "members":{
         "name":{
           "shape":"AWSServiceName",
-          "documentation":"<p> The name of the Amazon Web Service. </p>"
+          "documentation":"<p> The name of the Amazon Web Services service. </p>"
         },
         "displayName":{
           "shape":"NonEmptyString",
-          "documentation":"<p> The display name of the Amazon Web Service. </p>"
+          "documentation":"<p> The display name of the Amazon Web Services service. </p>"
         },
         "description":{
           "shape":"NonEmptyString",
-          "documentation":"<p> The description of the Amazon Web Service. </p>"
+          "documentation":"<p> The description of the Amazon Web Services service. </p>"
         },
         "category":{
           "shape":"NonEmptyString",
-          "documentation":"<p> The category that the Amazon Web Service belongs to, such as compute, storage, or database. </p>"
+          "documentation":"<p> The category that the Amazon Web Services service belongs to, such as compute, storage, or database. </p>"
         }
       },
-      "documentation":"<p> The metadata that's associated with the Amazon Web Service. </p>"
+      "documentation":"<p> The metadata that's associated with the Amazon Web Services service. </p>"
     },
     "ServiceMetadataList":{
       "type":"list",
@@ -4739,7 +4737,7 @@
         },
         "keywordValue":{
           "shape":"KeywordValue",
-          "documentation":"<p> The value of the keyword that's used when mapping a control data source. For example, this can be a CloudTrail event name, a rule name for Config, a Security Hub control, or the name of an Amazon Web Services API call. </p> <p>If you’re mapping a data source to a rule in Config, the <code>keywordValue</code> that you specify depends on the type of rule:</p> <ul> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html\">managed rules</a>, you can use the rule identifier as the <code>keywordValue</code>. You can find the rule identifier from the <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html\">list of Config managed rules</a>. For some rules, the rule identifier is different from the rule name. For example, the rule name <code>restricted-ssh</code> has the following rule identifier: <code>INCOMING_SSH_DISABLED</code>. Make sure to use the rule identifier, not the rule name. </p> <p>Keyword example for managed rules:</p> <ul> <li> <p>Managed rule name: <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-acl-prohibited.html\">s3-bucket-acl-prohibited</a> </p> <p> <code>keywordValue</code>: <code>S3_BUCKET_ACL_PROHIBITED</code> </p> </li> </ul> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html\">custom rules</a>, you form the <code>keywordValue</code> by adding the <code>Custom_</code> prefix to the rule name. This prefix distinguishes the custom rule from a managed rule. </p> <p>Keyword example for custom rules:</p> <ul> <li> <p>Custom rule name: my-custom-config-rule</p> <p> <code>keywordValue</code>: <code>Custom_my-custom-config-rule</code> </p> </li> </ul> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/service-linked-awsconfig-rules.html\">service-linked rules</a>, you form the <code>keywordValue</code> by adding the <code>Custom_</code> prefix to the rule name. In addition, you remove the suffix ID that appears at the end of the rule name. </p> <p>Keyword examples for service-linked rules:</p> <ul> <li> <p>Service-linked rule name: CustomRuleForAccount-conformance-pack-szsm1uv0w</p> <p> <code>keywordValue</code>: <code>Custom_CustomRuleForAccount-conformance-pack</code> </p> </li> <li> <p>Service-linked rule name: OrgConfigRule-s3-bucket-versioning-enabled-dbgzf8ba</p> <p> <code>keywordValue</code>: <code>Custom_OrgConfigRule-s3-bucket-versioning-enabled</code> </p> </li> </ul> </li> </ul> <important> <p>The <code>keywordValue</code> is case sensitive. If you enter a value incorrectly, Audit Manager might not recognize the data source mapping. As a result, you might not successfully collect evidence from that data source as intended. </p> <p>Keep in mind the following requirements, depending on the data source type that you're using. </p> <ol> <li> <p>For Config: </p> <ul> <li> <p>For managed rules, make sure that the <code>keywordValue</code> is the rule identifier in <code>ALL_CAPS_WITH_UNDERSCORES</code>. For example, <code>CLOUDWATCH_LOG_GROUP_ENCRYPTED</code>. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-config.html\">supported Config managed rules</a>.</p> </li> <li> <p>For custom rules, make sure that the <code>keywordValue</code> has the <code>Custom_</code> prefix followed by the custom rule name. The format of the custom rule name itself may vary. For accuracy, we recommend that you visit the <a href=\"https://console.aws.amazon.com/config/\">Config console</a> to verify your custom rule name.</p> </li> </ul> </li> <li> <p>For Security Hub: The format varies for Security Hub control names. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-ash.html\">supported Security Hub controls</a>.</p> </li> <li> <p>For Amazon Web Services API calls: Make sure that the <code>keywordValue</code> is written as <code>serviceprefix_ActionName</code>. For example, <code>iam_ListGroups</code>. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-api.html\">supported API calls</a>.</p> </li> <li> <p>For CloudTrail: Make sure that the <code>keywordValue</code> is written as <code>serviceprefix_ActionName</code>. For example, <code>cloudtrail_StartLogging</code>. For accuracy, we recommend that you review the Amazon Web Service prefix and action names in the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html\">Service Authorization Reference</a>.</p> </li> </ol> </important>"
+          "documentation":"<p> The value of the keyword that's used when mapping a control data source. For example, this can be a CloudTrail event name, a rule name for Config, a Security Hub control, or the name of an Amazon Web Services API call. </p> <p>If you’re mapping a data source to a rule in Config, the <code>keywordValue</code> that you specify depends on the type of rule:</p> <ul> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html\">managed rules</a>, you can use the rule identifier as the <code>keywordValue</code>. You can find the rule identifier from the <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html\">list of Config managed rules</a>. For some rules, the rule identifier is different from the rule name. For example, the rule name <code>restricted-ssh</code> has the following rule identifier: <code>INCOMING_SSH_DISABLED</code>. Make sure to use the rule identifier, not the rule name. </p> <p>Keyword example for managed rules:</p> <ul> <li> <p>Managed rule name: <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-acl-prohibited.html\">s3-bucket-acl-prohibited</a> </p> <p> <code>keywordValue</code>: <code>S3_BUCKET_ACL_PROHIBITED</code> </p> </li> </ul> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules.html\">custom rules</a>, you form the <code>keywordValue</code> by adding the <code>Custom_</code> prefix to the rule name. This prefix distinguishes the custom rule from a managed rule. </p> <p>Keyword example for custom rules:</p> <ul> <li> <p>Custom rule name: my-custom-config-rule</p> <p> <code>keywordValue</code>: <code>Custom_my-custom-config-rule</code> </p> </li> </ul> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/service-linked-awsconfig-rules.html\">service-linked rules</a>, you form the <code>keywordValue</code> by adding the <code>Custom_</code> prefix to the rule name. In addition, you remove the suffix ID that appears at the end of the rule name. </p> <p>Keyword examples for service-linked rules:</p> <ul> <li> <p>Service-linked rule name: CustomRuleForAccount-conformance-pack-szsm1uv0w</p> <p> <code>keywordValue</code>: <code>Custom_CustomRuleForAccount-conformance-pack</code> </p> </li> <li> <p>Service-linked rule name: OrgConfigRule-s3-bucket-versioning-enabled-dbgzf8ba</p> <p> <code>keywordValue</code>: <code>Custom_OrgConfigRule-s3-bucket-versioning-enabled</code> </p> </li> </ul> </li> </ul> <important> <p>The <code>keywordValue</code> is case sensitive. If you enter a value incorrectly, Audit Manager might not recognize the data source mapping. As a result, you might not successfully collect evidence from that data source as intended. </p> <p>Keep in mind the following requirements, depending on the data source type that you're using. </p> <ol> <li> <p>For Config: </p> <ul> <li> <p>For managed rules, make sure that the <code>keywordValue</code> is the rule identifier in <code>ALL_CAPS_WITH_UNDERSCORES</code>. For example, <code>CLOUDWATCH_LOG_GROUP_ENCRYPTED</code>. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-config.html\">supported Config managed rules</a>.</p> </li> <li> <p>For custom rules, make sure that the <code>keywordValue</code> has the <code>Custom_</code> prefix followed by the custom rule name. The format of the custom rule name itself may vary. For accuracy, we recommend that you visit the <a href=\"https://console.aws.amazon.com/config/\">Config console</a> to verify your custom rule name.</p> </li> </ul> </li> <li> <p>For Security Hub: The format varies for Security Hub control names. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-ash.html\">supported Security Hub controls</a>.</p> </li> <li> <p>For Amazon Web Services API calls: Make sure that the <code>keywordValue</code> is written as <code>serviceprefix_ActionName</code>. For example, <code>iam_ListGroups</code>. For accuracy, we recommend that you reference the list of <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-api.html\">supported API calls</a>.</p> </li> <li> <p>For CloudTrail: Make sure that the <code>keywordValue</code> is written as <code>serviceprefix_ActionName</code>. For example, <code>cloudtrail_StartLogging</code>. For accuracy, we recommend that you review the Amazon Web Services service prefix and action names in the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html\">Service Authorization Reference</a>.</p> </li> </ol> </important>"
         }
       },
       "documentation":"<p>A keyword that relates to the control data source.</p> <p>For manual evidence, this keyword indicates if the manual evidence is a file or text.</p> <p>For automated evidence, this keyword identifies a specific CloudTrail event, Config rule, Security Hub control, or Amazon Web Services API name. </p> <p> To learn more about the supported keywords that you can use when mapping a control data source, see the following pages in the <i>Audit Manager User Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-config.html\">Config rules supported by Audit Manager</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-ash.html\">Security Hub controls supported by Audit Manager</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-api.html\">API calls supported by Audit Manager</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/audit-manager/latest/userguide/control-data-sources-cloudtrail.html\">CloudTrail event names supported by Audit Manager</a> </p> </li> </ul>"
@@ -4851,8 +4849,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4938,8 +4935,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAssessmentControlRequest":{
       "type":"structure",
@@ -5081,7 +5077,7 @@
         },
         "controlSets":{
           "shape":"UpdateAssessmentFrameworkControlSets",
-          "documentation":"<p> The control sets that are associated with the framework. </p>"
+          "documentation":"<p> The control sets that are associated with the framework. </p> <note> <p>The <code>Controls</code> object returns a partial response when called through Framework APIs. For a complete <code>Controls</code> object, use <code>GetControl</code>.</p> </note>"
         }
       }
     },
@@ -5090,7 +5086,7 @@
       "members":{
         "framework":{
           "shape":"Framework",
-          "documentation":"<p> The name of the framework. </p>"
+          "documentation":"<p> The framework object. </p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/autoscaling/2011-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/autoscaling/2011-01-01/service-2.json 2.31.35-1/awscli/botocore/data/autoscaling/2011-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/autoscaling/2011-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/autoscaling/2011-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1304,8 +1304,7 @@
     },
     "AttachLoadBalancerTargetGroupsResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachLoadBalancerTargetGroupsType":{
       "type":"structure",
@@ -1326,8 +1325,7 @@
     },
     "AttachLoadBalancersResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachLoadBalancersType":{
       "type":"structure",
@@ -1348,8 +1346,7 @@
     },
     "AttachTrafficSourcesResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachTrafficSourcesType":{
       "type":"structure",
@@ -1484,7 +1481,7 @@
         },
         "NewInstancesProtectedFromScaleIn":{
           "shape":"InstanceProtected",
-          "documentation":"<p>Indicates whether newly launched instances are protected from termination by Amazon EC2 Auto Scaling when scaling in.</p>"
+          "documentation":"<p>Indicates whether newly launched instances are protected from termination by Amazon EC2 Auto Scaling when scaling in. For more information about preventing instances from terminating on scale in, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html\">Use instance scale-in protection</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>. </p>"
         },
         "ServiceLinkedRoleARN":{
           "shape":"ResourceName",
@@ -1555,6 +1552,10 @@
           "shape":"AutoScalingGroupNames",
           "documentation":"<p>The names of the Auto Scaling groups. By default, you can only specify up to 50 names. You can optionally increase this limit using the <code>MaxRecords</code> property.</p> <p>If you omit this property, all Auto Scaling groups are described.</p>"
         },
+        "IncludeInstances":{
+          "shape":"IncludeInstances",
+          "documentation":"<p> Specifies whether to include information about Amazon EC2 instances in the response. When set to <code>true</code> (default), the response includes instance details. </p>"
+        },
         "NextToken":{
           "shape":"XmlString",
           "documentation":"<p>The token for the next set of items to return. (You received this token from a previous call.)</p>"
@@ -1817,7 +1818,7 @@
         },
         "DeviceName":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The device name assigned to the volume (for example, <code>/dev/sdh</code> or <code>xvdh</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html\">Device naming on Linux instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <note> <p>To define a block device mapping, set the device name and exactly one of the following properties: <code>Ebs</code>, <code>NoDevice</code>, or <code>VirtualName</code>.</p> </note>"
+          "documentation":"<p>The device name assigned to the volume (for example, <code>/dev/sdh</code> or <code>xvdh</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html\">Device naming on Linux instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>To define a block device mapping, set the device name and exactly one of the following properties: <code>Ebs</code>, <code>NoDevice</code>, or <code>VirtualName</code>.</p> </note>"
         },
         "Ebs":{
           "shape":"Ebs",
@@ -1834,6 +1835,7 @@
       "type":"list",
       "member":{"shape":"BlockDeviceMapping"}
     },
+    "BooleanType":{"type":"boolean"},
     "BurstablePerformance":{
       "type":"string",
       "enum":[
@@ -1858,6 +1860,10 @@
         "AutoScalingGroupName":{
           "shape":"XmlStringMaxLen255",
           "documentation":"<p>The name of the Auto Scaling group.</p>"
+        },
+        "WaitForTransitioningInstances":{
+          "shape":"BooleanType",
+          "documentation":"<p>When cancelling an instance refresh, this indicates whether to wait for in-flight launches and terminations to complete. The default is true.</p> <p>When set to false, Amazon EC2 Auto Scaling cancels the instance refresh without waiting for any pending launches or terminations to complete.</p>"
         }
       }
     },
@@ -1947,8 +1953,7 @@
     },
     "CompleteLifecycleActionAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CompleteLifecycleActionType":{
       "type":"structure",
@@ -1987,7 +1992,8 @@
       "enum":[
         "intel",
         "amd",
-        "amazon-web-services"
+        "amazon-web-services",
+        "apple"
       ]
     },
     "CpuManufacturers":{
@@ -2071,7 +2077,7 @@
         },
         "PlacementGroup":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The name of the placement group into which to launch your instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html\">Placement groups</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <note> <p>A <i>cluster</i> placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group. </p> </note>"
+          "documentation":"<p>The name of the placement group into which to launch your instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html\">Placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>A <i>cluster</i> placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group. </p> </note>"
         },
         "VPCZoneIdentifier":{
           "shape":"XmlStringMaxLen5000",
@@ -2153,11 +2159,11 @@
         },
         "ImageId":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that was assigned during registration. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html\">Find a Linux AMI</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>If you specify <code>InstanceId</code>, an <code>ImageId</code> is not required.</p>"
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that was assigned during registration. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html\">Find a Linux AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you specify <code>InstanceId</code>, an <code>ImageId</code> is not required.</p>"
         },
         "KeyName":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The name of the key pair. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\">Amazon EC2 key pairs and Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The name of the key pair. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\">Amazon EC2 key pairs and Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "SecurityGroups":{
           "shape":"SecurityGroups",
@@ -2181,19 +2187,19 @@
         },
         "InstanceType":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>Specifies the instance type of the EC2 instance. For information about available instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes\">Available instance types</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>If you specify <code>InstanceId</code>, an <code>InstanceType</code> is not required.</p>"
+          "documentation":"<p>Specifies the instance type of the EC2 instance. For information about available instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes\">Available instance types</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you specify <code>InstanceId</code>, an <code>InstanceType</code> is not required.</p>"
         },
         "KernelId":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The ID of the kernel associated with the AMI.</p> <note> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html\">User provided kernels</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </note>"
+          "documentation":"<p>The ID of the kernel associated with the AMI.</p> <note> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html\">User provided kernels</a> in the <i>Amazon EC2 User Guide</i>.</p> </note>"
         },
         "RamdiskId":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The ID of the RAM disk to select.</p> <note> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html\">User provided kernels</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </note>"
+          "documentation":"<p>The ID of the RAM disk to select.</p> <note> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html\">User provided kernels</a> in the <i>Amazon EC2 User Guide</i>.</p> </note>"
         },
         "BlockDeviceMappings":{
           "shape":"BlockDeviceMappings",
-          "documentation":"<p>The block device mapping entries that define the block devices to attach to the instances at launch. By default, the block devices specified in the block device mapping for the AMI are used. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The block device mapping entries that define the block devices to attach to the instances at launch. By default, the block devices specified in the block device mapping for the AMI are used. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "InstanceMonitoring":{
           "shape":"InstanceMonitoring",
@@ -2209,7 +2215,7 @@
         },
         "EbsOptimized":{
           "shape":"EbsOptimized",
-          "documentation":"<p>Specifies whether the launch configuration is optimized for EBS I/O (<code>true</code>) or not (<code>false</code>). The optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization is not available with all instance types. Additional fees are incurred when you enable EBS optimization for an instance type that is not EBS-optimized by default. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS-optimized instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>The default value is <code>false</code>.</p>"
+          "documentation":"<p>Specifies whether the launch configuration is optimized for EBS I/O (<code>true</code>) or not (<code>false</code>). The optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization is not available with all instance types. Additional fees are incurred when you enable EBS optimization for an instance type that is not EBS-optimized by default. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS-optimized instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>The default value is <code>false</code>.</p>"
         },
         "AssociatePublicIpAddress":{
           "shape":"AssociatePublicIpAddress",
@@ -2286,8 +2292,7 @@
     },
     "DeleteLifecycleHookAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLifecycleHookType":{
       "type":"structure",
@@ -2366,8 +2371,7 @@
     },
     "DeleteWarmPoolAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWarmPoolType":{
       "type":"structure",
@@ -2833,8 +2837,7 @@
     },
     "DetachLoadBalancerTargetGroupsResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachLoadBalancerTargetGroupsType":{
       "type":"structure",
@@ -2855,8 +2858,7 @@
     },
     "DetachLoadBalancersResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachLoadBalancersType":{
       "type":"structure",
@@ -2877,8 +2879,7 @@
     },
     "DetachTrafficSourcesResultType":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachTrafficSourcesType":{
       "type":"structure",
@@ -3180,6 +3181,7 @@
       ]
     },
     "IncludeDeletedGroups":{"type":"boolean"},
+    "IncludeInstances":{"type":"boolean"},
     "Instance":{
       "type":"structure",
       "required":[
@@ -3455,7 +3457,7 @@
         },
         "CpuManufacturers":{
           "shape":"CpuManufacturers",
-          "documentation":"<p>Lists which specific CPU manufacturers to include.</p> <ul> <li> <p>For instance types with Intel CPUs, specify <code>intel</code>.</p> </li> <li> <p>For instance types with AMD CPUs, specify <code>amd</code>.</p> </li> <li> <p>For instance types with Amazon Web Services CPUs, specify <code>amazon-web-services</code>.</p> </li> </ul> <note> <p>Don't confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template. </p> </note> <p>Default: Any manufacturer</p>"
+          "documentation":"<p>Lists which specific CPU manufacturers to include.</p> <ul> <li> <p>For instance types with Intel CPUs, specify <code>intel</code>.</p> </li> <li> <p>For instance types with AMD CPUs, specify <code>amd</code>.</p> </li> <li> <p>For instance types with Amazon Web Services CPUs, specify <code>amazon-web-services</code>.</p> </li> <li> <p>For instance types with Apple CPUs, specify <code>apple</code>.</p> </li> </ul> <note> <p>Don't confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template. </p> </note> <p>Default: Any manufacturer</p>"
         },
         "MemoryGiBPerVCpu":{
           "shape":"MemoryGiBPerVCpuRequest",
@@ -3467,7 +3469,7 @@
         },
         "InstanceGenerations":{
           "shape":"InstanceGenerations",
-          "documentation":"<p>Indicates whether current or previous generation instance types are included.</p> <ul> <li> <p>For current generation instance types, specify <code>current</code>. The current generation includes EC2 instance types currently recommended for use. This typically includes the latest two to three generations in each instance family. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </li> <li> <p>For previous generation instance types, specify <code>previous</code>.</p> </li> </ul> <p>Default: Any current or previous generation</p>"
+          "documentation":"<p>Indicates whether current or previous generation instance types are included.</p> <ul> <li> <p>For current generation instance types, specify <code>current</code>. The current generation includes EC2 instance types currently recommended for use. This typically includes the latest two to three generations in each instance family. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p>For previous generation instance types, specify <code>previous</code>.</p> </li> </ul> <p>Default: Any current or previous generation</p>"
         },
         "SpotMaxPricePercentageOverLowestPrice":{
           "shape":"NullablePositiveInteger",
@@ -3487,7 +3489,7 @@
         },
         "BurstablePerformance":{
           "shape":"BurstablePerformance",
-          "documentation":"<p>Indicates whether burstable performance instance types are included, excluded, or required. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html\">Burstable performance instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>Default: <code>excluded</code> </p>"
+          "documentation":"<p>Indicates whether burstable performance instance types are included, excluded, or required. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html\">Burstable performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>excluded</code> </p>"
         },
         "RequireHibernateSupport":{
           "shape":"NullableBoolean",
@@ -3499,7 +3501,7 @@
         },
         "LocalStorage":{
           "shape":"LocalStorage",
-          "documentation":"<p>Indicates whether instance types with instance store volumes are included, excluded, or required. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html\">Amazon EC2 instance store</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>Default: <code>included</code> </p>"
+          "documentation":"<p>Indicates whether instance types with instance store volumes are included, excluded, or required. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html\">Amazon EC2 instance store</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>included</code> </p>"
         },
         "LocalStorageTypes":{
           "shape":"LocalStorageTypes",
@@ -3511,7 +3513,7 @@
         },
         "BaselineEbsBandwidthMbps":{
           "shape":"BaselineEbsBandwidthMbpsRequest",
-          "documentation":"<p>The minimum and maximum baseline bandwidth performance for an instance type, in Mbps. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS–optimized instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>Default: No minimum or maximum limits</p>"
+          "documentation":"<p>The minimum and maximum baseline bandwidth performance for an instance type, in Mbps. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS–optimized instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: No minimum or maximum limits</p>"
         },
         "AcceleratorTypes":{
           "shape":"AcceleratorTypes",
@@ -3546,7 +3548,7 @@
           "documentation":"<p> The baseline performance factors for the instance requirements. </p>"
         }
       },
-      "documentation":"<p>The attributes for the instance types for a mixed instances policy. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.</p> <p>When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.</p> <p>To limit the list of instance types from which Amazon EC2 Auto Scaling can identify matching instance types, you can use one of the following parameters, but not both in the same request:</p> <ul> <li> <p> <code>AllowedInstanceTypes</code> - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.</p> </li> <li> <p> <code>ExcludedInstanceTypes</code> - The instance types to exclude from the list, even if they match your specified attributes.</p> </li> </ul> <note> <p>You must specify <code>VCpuCount</code> and <code>MemoryMiB</code>. All other attributes are optional. Any unspecified optional attribute is set to its default.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html\">Create a mixed instances group using attribute-based instance type selection</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>. For help determining which instance types match your attributes before you apply them to your Auto Scaling group, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements\">Preview instance types with specified attributes</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+      "documentation":"<p>The attributes for the instance types for a mixed instances policy. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types. Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.</p> <p>When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.</p> <p>To limit the list of instance types from which Amazon EC2 Auto Scaling can identify matching instance types, you can use one of the following parameters, but not both in the same request:</p> <ul> <li> <p> <code>AllowedInstanceTypes</code> - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.</p> </li> <li> <p> <code>ExcludedInstanceTypes</code> - The instance types to exclude from the list, even if they match your specified attributes.</p> </li> </ul> <note> <p>You must specify <code>VCpuCount</code> and <code>MemoryMiB</code>. All other attributes are optional. Any unspecified optional attribute is set to its default.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html\">Create a mixed instances group using attribute-based instance type selection</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>. For help determining which instance types match your attributes before you apply them to your Auto Scaling group, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements\">Preview instance types with specified attributes</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "InstanceReusePolicy":{
       "type":"structure",
@@ -3664,11 +3666,11 @@
         },
         "ImageId":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The ID of the Amazon Machine Image (AMI) to use to launch your EC2 instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html\">Find a Linux AMI</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) to use to launch your EC2 instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html\">Find a Linux AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "KeyName":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The name of the key pair.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\">Amazon EC2 key pairs and Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The name of the key pair.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\">Amazon EC2 key pairs and Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "SecurityGroups":{
           "shape":"SecurityGroups",
@@ -3684,11 +3686,11 @@
         },
         "UserData":{
           "shape":"XmlStringUserData",
-          "documentation":"<p>The user data to make available to the launched EC2 instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> (Linux) and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> (Windows). If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>"
+          "documentation":"<p>The user data to make available to the launched EC2 instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>. If you are using a command line tool, base64-encoding is performed for you, and you can load the text from a file. Otherwise, you must provide base64-encoded text. User data is limited to 16 KB.</p>"
         },
         "InstanceType":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The instance type for the instances. For information about available instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes\">Available instance types</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The instance type for the instances. For information about available instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes\">Available instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "KernelId":{
           "shape":"XmlStringMaxLen255",
@@ -3700,7 +3702,7 @@
         },
         "BlockDeviceMappings":{
           "shape":"BlockDeviceMappings",
-          "documentation":"<p>The block device mapping entries that define the block devices to attach to the instances at launch. By default, the block devices specified in the block device mapping for the AMI are used. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>The block device mapping entries that define the block devices to attach to the instances at launch. By default, the block devices specified in the block device mapping for the AMI are used. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "InstanceMonitoring":{
           "shape":"InstanceMonitoring",
@@ -3720,7 +3722,7 @@
         },
         "EbsOptimized":{
           "shape":"EbsOptimized",
-          "documentation":"<p>Specifies whether the launch configuration is optimized for EBS I/O (<code>true</code>) or not (<code>false</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS-optimized instances</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p>"
+          "documentation":"<p>Specifies whether the launch configuration is optimized for EBS I/O (<code>true</code>) or not (<code>false</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html\">Amazon EBS-optimized instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "AssociatePublicIpAddress":{
           "shape":"AssociatePublicIpAddress",
@@ -3811,7 +3813,7 @@
       "members":{
         "InstanceType":{
           "shape":"XmlStringMaxLen255",
-          "documentation":"<p>The instance type, such as <code>m3.xlarge</code>. You must specify an instance type that is supported in your requested Region and Availability Zones. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <p>You can specify up to 40 instance types per Auto Scaling group.</p>"
+          "documentation":"<p>The instance type, such as <code>m3.xlarge</code>. You must specify an instance type that is supported in your requested Region and Availability Zones. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>You can specify up to 40 instance types per Auto Scaling group.</p>"
         },
         "WeightedCapacity":{
           "shape":"XmlStringMaxLen32",
@@ -4308,7 +4310,7 @@
           "documentation":"<p>The maximum amount of network bandwidth, in gigabits per second (Gbps).</p>"
         }
       },
-      "documentation":"<p>Specifies the minimum and maximum for the <code>NetworkBandwidthGbps</code> object when you specify <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstanceRequirements.html\">InstanceRequirements</a> for an Auto Scaling group.</p> <note> <p>Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth\">Available instance bandwidth</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> </note>"
+      "documentation":"<p>Specifies the minimum and maximum for the <code>NetworkBandwidthGbps</code> object when you specify <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstanceRequirements.html\">InstanceRequirements</a> for an Auto Scaling group.</p> <note> <p>Setting the minimum bandwidth does not guarantee that your instance will achieve the minimum bandwidth. Amazon EC2 will identify instance types that support the specified minimum bandwidth, but the actual bandwidth of your instance might go below the specified minimum at times. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth\">Available instance bandwidth</a> in the <i>Amazon EC2 User Guide</i>.</p> </note>"
     },
     "NetworkInterfaceCountRequest":{
       "type":"structure",
@@ -4678,8 +4680,7 @@
     "ProtectedFromScaleIn":{"type":"boolean"},
     "PutLifecycleHookAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutLifecycleHookType":{
       "type":"structure",
@@ -4860,8 +4861,7 @@
     },
     "PutWarmPoolAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutWarmPoolType":{
       "type":"structure",
@@ -4891,8 +4891,7 @@
     },
     "RecordLifecycleActionHeartbeatAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RecordLifecycleActionHeartbeatType":{
       "type":"structure",
@@ -5368,8 +5367,7 @@
     },
     "SetInstanceProtectionAnswer":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SetInstanceProtectionQuery":{
       "type":"structure",
@@ -5791,7 +5789,7 @@
         },
         "PlacementGroup":{
           "shape":"UpdatePlacementGroupParam",
-          "documentation":"<p>The name of an existing placement group into which to launch your instances. To remove the placement group setting, pass an empty string for <code>placement-group</code>. For more information about placement groups, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html\">Placement groups</a> in the <i>Amazon EC2 User Guide for Linux Instances</i>.</p> <note> <p>A <i>cluster</i> placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group. </p> </note>"
+          "documentation":"<p>The name of an existing placement group into which to launch your instances. To remove the placement group setting, pass an empty string for <code>placement-group</code>. For more information about placement groups, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html\">Placement groups</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>A <i>cluster</i> placement group is a logical grouping of instances within a single Availability Zone. You cannot specify multiple Availability Zones and a cluster placement group. </p> </note>"
         },
         "VPCZoneIdentifier":{
           "shape":"XmlStringMaxLen5000",
@@ -5815,7 +5813,7 @@
         },
         "CapacityRebalance":{
           "shape":"CapacityRebalanceEnabled",
-          "documentation":"<p>Enables or disables Capacity Rebalancing. For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html\">Use Capacity Rebalancing to handle Amazon EC2 Spot Interruptions</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>.</p>"
+          "documentation":"<p>Enables or disables Capacity Rebalancing. If Capacity Rebalancing is disabled, proactive replacement of at-risk Spot Instances does not occur. For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html\">Capacity Rebalancing in Auto Scaling to replace at-risk Spot Instances</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>.</p> <note> <p>To suspend rebalancing across Availability Zones, use the <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_SuspendedProcess.html\">SuspendProcesses</a> API.</p> </note>"
         },
         "Context":{
           "shape":"Context",
@@ -5995,5 +5993,5 @@
     },
     "ZonalShiftEnabled":{"type":"boolean"}
   },
-  "documentation":"<fullname>Amazon EC2 Auto Scaling</fullname> <p>Amazon EC2 Auto Scaling is designed to automatically launch and terminate EC2 instances based on user-defined scaling policies, scheduled actions, and health checks.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html\">Amazon EC2 Auto Scaling User Guide</a> and the <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/Welcome.html\">Amazon EC2 Auto Scaling API Reference</a>.</p>"
+  "documentation":"<fullname>Amazon EC2 Auto Scaling</fullname> <p>The <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_DescribeAutoScalingGroups.html\">DescribeAutoScalingGroups</a> API operation might be throttled when retrieving details for an Auto Scaling group that contains many instances. By default, this operation returns details for all instances in the group. To help prevent throttling, you can set the <code>IncludeInstances</code> parameter to <code>false</code> to exclude instance details from the response.</p> <p>Amazon EC2 Auto Scaling is designed to automatically launch and terminate EC2 instances based on user-defined scaling policies, scheduled actions, and health checks.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html\">Amazon EC2 Auto Scaling User Guide</a> and the <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/APIReference/Welcome.html\">Amazon EC2 Auto Scaling API Reference</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/autoscaling-plans/2018-01-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,13 +212,51 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Region"
+                                                        },
+                                                        "us-gov-east-1"
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://autoscaling-plans.us-gov-east-1.amazonaws.com",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Region"
+                                                        },
+                                                        "us-gov-west-1"
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://autoscaling-plans.us-gov-west-1.amazonaws.com",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://autoscaling-plans-fips.{Region}.{PartitionResult#dnsSuffix}",
@@ -231,14 +265,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +288,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +307,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +317,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +337,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/autoscaling-plans/2018-01-06/service-2.json 2.31.35-1/awscli/botocore/data/autoscaling-plans/2018-01-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/autoscaling-plans/2018-01-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/autoscaling-plans/2018-01-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"autoscaling-plans",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Auto Scaling Plans",
     "serviceId":"Auto Scaling Plans",
     "signatureVersion":"v4",
     "signingName":"autoscaling-plans",
     "targetPrefix":"AnyScaleScalingPlannerFrontendService",
-    "uid":"autoscaling-plans-2018-01-06"
+    "uid":"autoscaling-plans-2018-01-06",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateScalingPlan":{
@@ -267,8 +269,7 @@
     },
     "DeleteScalingPlanResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeScalingPlanResourcesRequest":{
       "type":"structure",
@@ -935,8 +936,7 @@
     },
     "UpdateScalingPlanResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/service-2.json 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,8 +25,8 @@
       "input":{"shape":"CreateCapabilityRequest"},
       "output":{"shape":"CreateCapabilityResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
@@ -45,11 +45,11 @@
       "input":{"shape":"CreatePartnershipRequest"},
       "output":{"shape":"CreatePartnershipResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -65,11 +65,11 @@
       "input":{"shape":"CreateProfileRequest"},
       "output":{"shape":"CreateProfileResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -101,11 +101,11 @@
       "input":{"shape":"CreateTransformerRequest"},
       "output":{"shape":"CreateTransformerResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -120,8 +120,8 @@
       },
       "input":{"shape":"DeleteCapabilityRequest"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
@@ -138,11 +138,11 @@
       },
       "input":{"shape":"DeletePartnershipRequest"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified partnership. A partnership represents the connection between you and your trading partner. It ties together a profile and one or more trading capabilities.</p>",
@@ -159,8 +159,8 @@
         {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified profile. A profile is the mechanism used to create the concept of a private network.</p>",
@@ -174,11 +174,11 @@
       },
       "input":{"shape":"DeleteTransformerRequest"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified transformer. A transformer can take an EDI file as input and transform it into a JSON-or XML-formatted document. Alternatively, a transformer can take a JSON-or XML-formatted document as input and transform it into an EDI file.</p>",
@@ -198,7 +198,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Takes sample input and output documents and uses Amazon Bedrock to generate a mapping automatically. Depending on the accuracy and other factors, you can then edit the mapping for your needs.</p> <note> <p>Before you can use the AI-assisted feature for Amazon Web Services B2B Data Interchange you must enable models in Amazon Bedrock. For details, see <a href=\"https://docs.aws.amazon.com/b2bi/latest/userguide/ai-assisted-mapping.html#ai-assist-prereq\">AI-assisted template mapping prerequisites</a> in the <i>Amazon Web Services B2B Data Interchange User guide</i>.</p> </note>",
+      "documentation":"<p>Takes sample input and output documents and uses Amazon Bedrock to generate a mapping automatically. Depending on the accuracy and other factors, you can then edit the mapping for your needs.</p> <note> <p>Before you can use the AI-assisted feature for Amazon Web Services B2B Data Interchange you must enable models in Amazon Bedrock. For details, see <a href=\"https://docs.aws.amazon.com/b2bi/latest/userguide/ai-assisted-mapping.html#ai-assist-prereq\">AI-assisted template mapping prerequisites</a> in the <i>Amazon Web Services B2B Data Interchange User guide</i>.</p> </note> <p>To generate a mapping, perform the following steps:</p> <ol> <li> <p>Start with an X12 EDI document to use as the input.</p> </li> <li> <p>Call <code>TestMapping</code> using your EDI document.</p> </li> <li> <p>Use the output from the <code>TestMapping</code> operation as either input or output for your GenerateMapping call, along with your sample file.</p> </li> </ol>",
       "idempotent":true
     },
     "GetCapability":{
@@ -229,8 +229,8 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Retrieves the details for a partnership, based on the partner and profile IDs specified. A partnership represents the connection between you and your trading partner. It ties together a profile and one or more trading capabilities.</p>"
@@ -246,8 +246,8 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Retrieves the details for the profile specified by the profile ID. A profile is the mechanism used to create the concept of a private network.</p>"
@@ -263,8 +263,8 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Retrieves the details for the transformer specified by the transformer ID. A transformer can take an EDI file as input and transform it into a JSON-or XML-formatted document. Alternatively, a transformer can take a JSON-or XML-formatted document as input and transform it into an EDI file.</p>"
@@ -284,7 +284,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns the details of the transformer run, based on the Transformer job ID.</p>"
+      "documentation":"<p>Returns the details of the transformer run, based on the Transformer job ID.</p> <note> <p>If 30 days have elapsed since your transformer job was started, the system deletes it. So, if you run <code>GetTransformerJob</code> and supply a <code>transformerId</code> and <code>transformerJobId</code> for a job that was started more than 30 days previously, you receive a 404 response.</p> </note>"
     },
     "ListCapabilities":{
       "name":"ListCapabilities",
@@ -313,8 +313,8 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Lists the partnerships associated with your Amazon Web Services account for your current or specified region. A partnership represents the connection between you and your trading partner. It ties together a profile and one or more trading capabilities.</p>"
@@ -375,14 +375,14 @@
       "input":{"shape":"StartTransformerJobRequest"},
       "output":{"shape":"StartTransformerJobResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Runs a job, using a transformer, to parse input EDI (electronic data interchange) file into the output structures used by Amazon Web Services B2B Data Interchange.</p> <p>If you only want to transform EDI (electronic data interchange) documents, you don't need to create profiles, partnerships or capabilities. Just create and configure a transformer, and then run the <code>StartTransformerJob</code> API to process your files.</p>",
+      "documentation":"<p>Runs a job, using a transformer, to parse input EDI (electronic data interchange) file into the output structures used by Amazon Web Services B2B Data Interchange.</p> <p>If you only want to transform EDI (electronic data interchange) documents, you don't need to create profiles, partnerships or capabilities. Just create and configure a transformer, and then run the <code>StartTransformerJob</code> API to process your files.</p> <note> <p>The system stores transformer jobs for 30 days. During that period, you can run <a href=\"https://docs.aws.amazon.com/b2bi/latest/APIReference/API_GetTransformerJob.html\">GetTransformerJob</a> and supply its <code>transformerId</code> and <code>transformerJobId</code> to return details of the job.</p> </note>",
       "idempotent":true
     },
     "TagResource":{
@@ -394,8 +394,8 @@
       "input":{"shape":"TagResourceRequest"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Attaches a key-value pair to a resource, as identified by its Amazon Resource Name (ARN). Resources are capability, partnership, profile, transformers and other entities.</p> <p>There is no response returned from this call.</p>"
@@ -478,8 +478,8 @@
       "input":{"shape":"UpdateCapabilityRequest"},
       "output":{"shape":"UpdateCapabilityResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
@@ -498,11 +498,11 @@
       "input":{"shape":"UpdatePartnershipRequest"},
       "output":{"shape":"UpdatePartnershipResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -518,11 +518,11 @@
       "input":{"shape":"UpdateProfileRequest"},
       "output":{"shape":"UpdateProfileResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -538,11 +538,11 @@
       "input":{"shape":"UpdateTransformerRequest"},
       "output":{"shape":"UpdateTransformerResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -560,6 +560,16 @@
       "documentation":"<p>You do not have sufficient access to perform this action.</p>",
       "exception":true
     },
+    "AdvancedOptions":{
+      "type":"structure",
+      "members":{
+        "x12":{
+          "shape":"X12AdvancedOptions",
+          "documentation":"<p>A structure that contains X12-specific advanced options, such as split options for processing X12 EDI files.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains advanced options for EDI processing. Currently, only X12 advanced options are supported.</p>"
+    },
     "AmazonResourceName":{
       "type":"string",
       "max":1011,
@@ -614,6 +624,10 @@
         "outboundEdi":{
           "shape":"OutboundEdiOptions",
           "documentation":"<p>A structure that contains the outbound EDI options.</p>"
+        },
+        "inboundEdi":{
+          "shape":"InboundEdiOptions",
+          "documentation":"<p>A structure that contains the inbound EDI options for the capability.</p>"
         }
       },
       "documentation":"<p>Contains the details for an Outbound EDI capability.</p>"
@@ -654,6 +668,10 @@
       "type":"string",
       "enum":["edi"]
     },
+    "CodeList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "ConflictException":{
       "type":"structure",
       "required":["message"],
@@ -703,7 +721,8 @@
         "outputSampleFile":{
           "shape":"OutputSampleFileSource",
           "documentation":"<p>Customer uses this to provide a sample on what should file look like after conversion X12 EDI use case around this would be discovering the file syntax</p>"
-        }
+        },
+        "advancedOptions":{"shape":"AdvancedOptions"}
       },
       "documentation":"<p>Provide a sample of what the output of the transformation should look like.</p>"
     },
@@ -1228,6 +1247,21 @@
       "documentation":"<p>Specifies the details for the EDI standard that is being used for the transformer. Currently, only X12 is supported. X12 is a set of standards and corresponding messages that define specific business documents.</p>",
       "union":true
     },
+    "ElementId":{
+      "type":"string",
+      "documentation":"<p>A string type representing an X12 element ID. Element IDs are four-digit numeric identifiers that uniquely identify elements within the X12 standard. This type enforces a pattern of exactly four digits to ensure valid element IDs are used in validation rules.</p>"
+    },
+    "ElementPosition":{
+      "type":"string",
+      "documentation":"<p>A string type representing the position of an element within an X12 segment. The format follows the pattern of segment identifier followed by element position (e.g., \"ST-01\" for the first element of the ST segment) and optionally a component position (e.g., \"ST-01-02\" for the second component of the first element). This type is used in validation rules to precisely identify which element in which position is being validated.</p>"
+    },
+    "ElementRequirement":{
+      "type":"string",
+      "enum":[
+        "OPTIONAL",
+        "MANDATORY"
+      ]
+    },
     "Email":{
       "type":"string",
       "max":254,
@@ -1285,11 +1319,11 @@
       "members":{
         "inputFileContent":{
           "shape":"GenerateMappingInputFileContent",
-          "documentation":"<p>Provide the contents of a sample X12 EDI file (for inbound EDI) or JSON/XML file (for outbound EDI) to use as a starting point for the mapping.</p>"
+          "documentation":"<p>Provide the contents of a sample X12 EDI file, either in JSON or XML format, to use as a starting point for the mapping.</p>"
         },
         "outputFileContent":{
           "shape":"GenerateMappingOutputFileContent",
-          "documentation":"<p>Provide the contents of a sample X12 EDI file (for outbound EDI) or JSON/XML file (for inbound EDI) to use as a target for the mapping.</p>"
+          "documentation":"<p>Provide the contents of a sample X12 EDI file, either in JSON or XML format, to use as a target for the mapping.</p>"
         },
         "mappingType":{
           "shape":"MappingType",
@@ -1618,6 +1652,16 @@
         }
       }
     },
+    "InboundEdiOptions":{
+      "type":"structure",
+      "members":{
+        "x12":{
+          "shape":"X12InboundEdiOptions",
+          "documentation":"<p>A structure that contains X12-specific options for processing inbound X12 EDI files.</p>"
+        }
+      },
+      "documentation":"<p>Contains options for processing inbound EDI files. These options allow for customizing how incoming EDI documents are processed.</p>"
+    },
     "InputConversion":{
       "type":"structure",
       "required":["fromFormat"],
@@ -1629,6 +1673,10 @@
         "formatOptions":{
           "shape":"FormatOptions",
           "documentation":"<p>A structure that contains the formatting options for an inbound transformer.</p>"
+        },
+        "advancedOptions":{
+          "shape":"AdvancedOptions",
+          "documentation":"<p>Specifies advanced options for the input conversion process. These options provide additional control over how EDI files are processed during transformation.</p>"
         }
       },
       "documentation":"<p>Contains the input formatting options for an inbound transformer (takes an X12-formatted EDI document as input and converts it to JSON or XML.</p>"
@@ -1678,6 +1726,19 @@
       "type":"list",
       "member":{"shape":"SampleDocumentKeys"}
     },
+    "LineLength":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "LineTerminator":{
+      "type":"string",
+      "enum":[
+        "CRLF",
+        "LF",
+        "CR"
+      ]
+    },
     "ListCapabilitiesRequest":{
       "type":"structure",
       "members":{
@@ -1887,7 +1948,8 @@
         "formatOptions":{
           "shape":"FormatOptions",
           "documentation":"<p>A structure that contains the X12 transaction set and version for the transformer output.</p>"
-        }
+        },
+        "advancedOptions":{"shape":"AdvancedOptions"}
       },
       "documentation":"<p>Contains the formatting options for an outbound transformer (takes JSON or XML as input and converts it to an EDI document (currently only X12 format is supported).</p>"
     },
@@ -1904,6 +1966,10 @@
       "max":2048,
       "min":1
     },
+    "ParsedSplitFileContentsList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "PartnerName":{
       "type":"string",
       "max":254,
@@ -2162,6 +2228,24 @@
         }
       }
     },
+    "StartingFunctionalGroupControlNumber":{
+      "type":"integer",
+      "box":true,
+      "max":999999999,
+      "min":1
+    },
+    "StartingInterchangeControlNumber":{
+      "type":"integer",
+      "box":true,
+      "max":999999999,
+      "min":1
+    },
+    "StartingTransactionSetControlNumber":{
+      "type":"integer",
+      "box":true,
+      "max":999999999,
+      "min":1
+    },
     "String":{"type":"string"},
     "Tag":{
       "type":"structure",
@@ -2255,7 +2339,7 @@
         },
         "validationMessages":{
           "shape":"ValidationMessages",
-          "documentation":"<p>Returns an array of strings, each containing a message that Amazon Web Services B2B Data Interchange generates during the conversion.</p>"
+          "documentation":"<p>Returns an array of validation messages that Amazon Web Services B2B Data Interchange generates during the conversion process. These messages include both standard EDI validation results and custom validation messages when custom validation rules are configured. Custom validation messages provide detailed feedback on element length constraints, code list validations, and element requirement checks applied during the outbound EDI generation process.</p>"
         }
       }
     },
@@ -2315,6 +2399,10 @@
         "ediType":{
           "shape":"EdiType",
           "documentation":"<p>Specifies the details for the EDI standard that is being used for the transformer. Currently, only X12 is supported. X12 is a set of standards and corresponding messages that define specific business documents.</p>"
+        },
+        "advancedOptions":{
+          "shape":"AdvancedOptions",
+          "documentation":"<p>Specifies advanced options for parsing the input EDI file. These options allow for more granular control over the parsing process, including split options for X12 files.</p>"
         }
       }
     },
@@ -2325,6 +2413,14 @@
         "parsedFileContent":{
           "shape":"String",
           "documentation":"<p>Returns the contents of the input file being tested, parsed according to the specified EDI (electronic data interchange) type.</p>"
+        },
+        "parsedSplitFileContents":{
+          "shape":"ParsedSplitFileContentsList",
+          "documentation":"<p>Returns an array of parsed file contents when the input file is split according to the specified split options. Each element in the array represents a separate split file's parsed content.</p>"
+        },
+        "validationMessages":{
+          "shape":"ValidationMessages",
+          "documentation":"<p>Returns an array of validation messages generated during EDI validation. These messages provide detailed information about validation errors, warnings, or confirmations based on the configured X12 validation rules such as element length constraints, code list validations, and element requirement checks. This field is populated when the <code>TestParsing</code> API validates EDI documents.</p>"
         }
       }
     },
@@ -2842,30 +2938,108 @@
       "members":{
         "Message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>Occurs when a B2BI object cannot be validated against a request from another object.</p>",
+      "documentation":"<p>Occurs when a B2BI object cannot be validated against a request from another object. This exception can be thrown during standard EDI validation or when custom validation rules fail, such as when element length constraints are violated, invalid codes are used in code list validations, or required elements are missing based on configured element requirement rules.</p>",
       "exception":true
     },
     "ValidationMessages":{
       "type":"list",
       "member":{"shape":"String"}
     },
+    "WrapFormat":{
+      "type":"string",
+      "enum":[
+        "SEGMENT",
+        "ONE_LINE",
+        "LINE_LENGTH"
+      ]
+    },
+    "WrapOptions":{
+      "type":"structure",
+      "required":["wrapBy"],
+      "members":{
+        "wrapBy":{
+          "shape":"WrapFormat",
+          "documentation":"<p>Specifies the method used for wrapping lines in the EDI output. Valid values:</p> <ul> <li> <p> <code>SEGMENT</code>: Wraps by segment.</p> </li> <li> <p> <code>ONE_LINE</code>: Indicates that the entire content is on a single line.</p> <note> <p>When you specify <code>ONE_LINE</code>, do not provide either the line length nor the line terminator value.</p> </note> </li> <li> <p> <code>LINE_LENGTH</code>: Wraps by character count, as specified by <code>lineLength</code> value.</p> </li> </ul>"
+        },
+        "lineTerminator":{
+          "shape":"LineTerminator",
+          "documentation":"<p>Specifies the character sequence used to terminate lines when wrapping. Valid values:</p> <ul> <li> <p> <code>CRLF</code>: carriage return and line feed</p> </li> <li> <p> <code>LF</code>: line feed)</p> </li> <li> <p> <code>CR</code>: carriage return</p> </li> </ul>"
+        },
+        "lineLength":{
+          "shape":"LineLength",
+          "documentation":"<p>Specifies the maximum length of a line before wrapping occurs. This value is used when <code>wrapBy</code> is set to <code>LINE_LENGTH</code>.</p>"
+        }
+      },
+      "documentation":"<p>Contains options for wrapping (line folding) in X12 EDI files. Wrapping controls how long lines are handled in the EDI output.</p>"
+    },
+    "X12AcknowledgmentOptions":{
+      "type":"structure",
+      "required":[
+        "functionalAcknowledgment",
+        "technicalAcknowledgment"
+      ],
+      "members":{
+        "functionalAcknowledgment":{
+          "shape":"X12FunctionalAcknowledgment",
+          "documentation":"<p>Specifies whether functional acknowledgments (997/999) should be generated for incoming X12 transactions. Valid values are <code>DO_NOT_GENERATE</code>, <code>GENERATE_ALL_SEGMENTS</code> and <code>GENERATE_WITHOUT_TRANSACTION_SET_RESPONSE_LOOP</code>.</p> <p>If you choose <code>GENERATE_WITHOUT_TRANSACTION_SET_RESPONSE_LOOP</code>, Amazon Web Services B2B Data Interchange skips the AK2_Loop when generating an acknowledgment document.</p>"
+        },
+        "technicalAcknowledgment":{
+          "shape":"X12TechnicalAcknowledgment",
+          "documentation":"<p>Specifies whether technical acknowledgments (TA1) should be generated for incoming X12 interchanges. Valid values are <code>DO_NOT_GENERATE</code> and <code>GENERATE_ALL_SEGMENTS</code> and.</p>"
+        }
+      },
+      "documentation":"<p>Contains options for configuring X12 acknowledgments. These options control how functional and technical acknowledgments are handled.</p>"
+    },
     "X12AcknowledgmentRequestedCode":{
       "type":"string",
       "max":1,
       "min":1,
       "pattern":"[a-zA-Z0-9]*"
     },
+    "X12AdvancedOptions":{
+      "type":"structure",
+      "members":{
+        "splitOptions":{
+          "shape":"X12SplitOptions",
+          "documentation":"<p>Specifies options for splitting X12 EDI files. These options control how large X12 files are divided into smaller, more manageable units.</p>"
+        },
+        "validationOptions":{
+          "shape":"X12ValidationOptions",
+          "documentation":"<p>Specifies validation options for X12 EDI processing. These options control how validation rules are applied during EDI document processing, including custom validation rules for element length constraints, code list validations, and element requirement checks.</p>"
+        }
+      },
+      "documentation":"<p>Contains advanced options specific to X12 EDI processing, such as splitting large X12 files into smaller units.</p>"
+    },
     "X12ApplicationReceiverCode":{
       "type":"string",
       "max":15,
       "min":2,
-      "pattern":"[a-zA-Z0-9]*"
+      "pattern":"[a-zA-Z0-9 ]*"
     },
     "X12ApplicationSenderCode":{
       "type":"string",
       "max":15,
       "min":2,
-      "pattern":"[a-zA-Z0-9]*"
+      "pattern":"[a-zA-Z0-9 ]*"
+    },
+    "X12CodeListValidationRule":{
+      "type":"structure",
+      "required":["elementId"],
+      "members":{
+        "elementId":{
+          "shape":"ElementId",
+          "documentation":"<p>Specifies the four-digit element ID to which the code list modifications apply. This identifies which X12 element will have its allowed code values modified.</p>"
+        },
+        "codesToAdd":{
+          "shape":"CodeList",
+          "documentation":"<p>Specifies a list of code values to add to the element's allowed values. These codes will be considered valid for the specified element in addition to the standard codes defined by the X12 specification.</p>"
+        },
+        "codesToRemove":{
+          "shape":"CodeList",
+          "documentation":"<p>Specifies a list of code values to remove from the element's allowed values. These codes will be considered invalid for the specified element, even if they are part of the standard codes defined by the X12 specification.</p>"
+        }
+      },
+      "documentation":"<p>Defines a validation rule that modifies the allowed code values for a specific X12 element. This rule allows you to add or remove valid codes from an element's standard code list, providing flexibility to accommodate trading partner-specific requirements or industry variations. You can specify codes to add to expand the allowed values beyond the X12 standard, or codes to remove to restrict the allowed values for stricter validation.</p>"
     },
     "X12ComponentSeparator":{
       "type":"string",
@@ -2873,6 +3047,24 @@
       "min":1,
       "pattern":"[!&'()*+,\\-./:;?=%@\\[\\]_{}|<>~^`\"]"
     },
+    "X12ControlNumbers":{
+      "type":"structure",
+      "members":{
+        "startingInterchangeControlNumber":{
+          "shape":"StartingInterchangeControlNumber",
+          "documentation":"<p>Specifies the starting interchange control number (ISA13) to use for X12 EDI generation. This number is incremented for each new interchange. For the ISA (interchange) envelope, Amazon Web Services B2B Data Interchange generates an interchange control number that is unique for the ISA05 and ISA06 (sender) &amp; ISA07 and ISA08 (receiver) combination. </p>"
+        },
+        "startingFunctionalGroupControlNumber":{
+          "shape":"StartingFunctionalGroupControlNumber",
+          "documentation":"<p>Specifies the starting functional group control number (GS06) to use for X12 EDI generation. This number is incremented for each new functional group. For the GS (functional group) envelope, Amazon Web Services B2B Data Interchange generates a functional group control number that is unique to the sender ID, receiver ID, and functional identifier code combination. </p>"
+        },
+        "startingTransactionSetControlNumber":{
+          "shape":"StartingTransactionSetControlNumber",
+          "documentation":"<p>Specifies the starting transaction set control number (ST02) to use for X12 EDI generation. This number is incremented for each new transaction set.</p>"
+        }
+      },
+      "documentation":"<p>Contains configuration for X12 control numbers used in X12 EDI generation. Control numbers are used to uniquely identify interchanges, functional groups, and transaction sets.</p>"
+    },
     "X12DataElementSeparator":{
       "type":"string",
       "max":1,
@@ -2911,16 +3103,78 @@
       },
       "documentation":"<p>A structure that contains the X12 transaction set and version. The X12 structure is used when the system transforms an EDI (electronic data interchange) file.</p> <note> <p>If an EDI input file contains more than one transaction, each transaction must have the same transaction set and version, for example 214/4010. If not, the transformer cannot parse the file.</p> </note>"
     },
+    "X12ElementLengthValidationRule":{
+      "type":"structure",
+      "required":[
+        "elementId",
+        "maxLength",
+        "minLength"
+      ],
+      "members":{
+        "elementId":{
+          "shape":"ElementId",
+          "documentation":"<p>Specifies the four-digit element ID to which the length constraints will be applied. This identifies which X12 element will have its length requirements modified.</p>"
+        },
+        "maxLength":{
+          "shape":"X12ElementLengthValidationRuleMaxLengthInteger",
+          "documentation":"<p>Specifies the maximum allowed length for the identified element. This value must be between 1 and 200 characters and defines the upper limit for the element's content length.</p>"
+        },
+        "minLength":{
+          "shape":"X12ElementLengthValidationRuleMinLengthInteger",
+          "documentation":"<p>Specifies the minimum required length for the identified element. This value must be between 1 and 200 characters and defines the lower limit for the element's content length.</p>"
+        }
+      },
+      "documentation":"<p>Defines a validation rule that specifies custom length constraints for a specific X12 element. This rule allows you to override the standard minimum and maximum length requirements for an element, enabling validation of trading partner-specific length requirements that may differ from the X12 specification. Both minimum and maximum length values must be specified and must be between 1 and 200 characters.</p>"
+    },
+    "X12ElementLengthValidationRuleMaxLengthInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "X12ElementLengthValidationRuleMinLengthInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "X12ElementRequirementValidationRule":{
+      "type":"structure",
+      "required":[
+        "elementPosition",
+        "requirement"
+      ],
+      "members":{
+        "elementPosition":{
+          "shape":"ElementPosition",
+          "documentation":"<p>Specifies the position of the element within an X12 segment for which the requirement status will be modified. The format follows the pattern of segment identifier followed by element position (e.g., \"ST-01\" for the first element of the ST segment).</p>"
+        },
+        "requirement":{
+          "shape":"ElementRequirement",
+          "documentation":"<p>Specifies the requirement status for the element at the specified position. Valid values are OPTIONAL (the element may be omitted) or MANDATORY (the element must be present).</p>"
+        }
+      },
+      "documentation":"<p>Defines a validation rule that modifies the requirement status of a specific X12 element within a segment. This rule allows you to make optional elements mandatory or mandatory elements optional, providing flexibility to accommodate different trading partner requirements and business rules. The rule targets a specific element position within a segment and sets its requirement status to either OPTIONAL or MANDATORY.</p>"
+    },
     "X12Envelope":{
       "type":"structure",
       "members":{
         "common":{
           "shape":"X12OutboundEdiHeaders",
           "documentation":"<p>A container for the X12 outbound EDI headers.</p>"
-        }
+        },
+        "wrapOptions":{"shape":"WrapOptions"}
       },
       "documentation":"<p>A wrapper structure for an X12 definition object.</p> <p>the X12 envelope ensures the integrity of the data and the efficiency of the information exchange. The X12 message structure has hierarchical levels. From highest to the lowest, they are:</p> <ul> <li> <p>Interchange Envelope</p> </li> <li> <p>Functional Group</p> </li> <li> <p>Transaction Set</p> </li> </ul>"
     },
+    "X12FunctionalAcknowledgment":{
+      "type":"string",
+      "enum":[
+        "DO_NOT_GENERATE",
+        "GENERATE_ALL_SEGMENTS",
+        "GENERATE_WITHOUT_TRANSACTION_SET_RESPONSE_LOOP"
+      ]
+    },
     "X12FunctionalGroupHeaders":{
       "type":"structure",
       "members":{
@@ -2939,12 +3193,31 @@
       },
       "documentation":"<p>Part of the X12 message structure. These are the functional group headers for the X12 EDI object.</p>"
     },
+    "X12GS05TimeFormat":{
+      "type":"string",
+      "documentation":"<p>Specifies the time format in the GS05 element (time) of the functional group header. The following formats use 24-hour clock time:</p> <ul> <li> <p> <code>HHMM</code> - Hours and minutes</p> </li> <li> <p> <code>HHMMSS</code> - Hours, minutes, and seconds</p> </li> <li> <p> <code>HHMMSSDD</code> - Hours, minutes, seconds, and decimal seconds</p> </li> </ul> <p>Where:</p> <ul> <li> <p> <code>HH</code> - Hours (00-23)</p> </li> <li> <p> <code>MM</code> - Minutes (00-59)</p> </li> <li> <p> <code>SS</code> - Seconds (00-59)</p> </li> <li> <p> <code>DD</code> - Hundredths of seconds (00-99)</p> </li> </ul>",
+      "enum":[
+        "HHMM",
+        "HHMMSS",
+        "HHMMSSDD"
+      ]
+    },
     "X12IdQualifier":{
       "type":"string",
       "max":2,
       "min":2,
       "pattern":"[a-zA-Z0-9]*"
     },
+    "X12InboundEdiOptions":{
+      "type":"structure",
+      "members":{
+        "acknowledgmentOptions":{
+          "shape":"X12AcknowledgmentOptions",
+          "documentation":"<p>Specifies acknowledgment options for inbound X12 EDI files. These options control how functional and technical acknowledgments are handled.</p>"
+        }
+      },
+      "documentation":"<p>Contains options specific to processing inbound X12 EDI files.</p>"
+    },
     "X12InterchangeControlHeaders":{
       "type":"structure",
       "members":{
@@ -2996,8 +3269,13 @@
         },
         "validateEdi":{
           "shape":"X12ValidateEdi",
-          "documentation":"<p>Specifies whether or not to validate the EDI for this X12 object: <code>TRUE</code> or <code>FALSE</code>.</p>"
-        }
+          "documentation":"<p>Specifies whether or not to validate the EDI for this X12 object: <code>TRUE</code> or <code>FALSE</code>. When enabled, this performs both standard EDI validation and applies any configured custom validation rules including element length constraints, code list validations, and element requirement checks. Validation results are returned in the response validation messages.</p>"
+        },
+        "controlNumbers":{
+          "shape":"X12ControlNumbers",
+          "documentation":"<p>Specifies control number configuration for outbound X12 EDI headers. These settings determine the starting values for interchange, functional group, and transaction set control numbers.</p>"
+        },
+        "gs05TimeFormat":{"shape":"X12GS05TimeFormat"}
       },
       "documentation":"<p>A structure containing the details for an outbound EDI object.</p>"
     },
@@ -3005,7 +3283,7 @@
       "type":"string",
       "max":15,
       "min":15,
-      "pattern":"[a-zA-Z0-9]*"
+      "pattern":"[a-zA-Z0-9 ]*"
     },
     "X12RepetitionSeparator":{
       "type":"string",
@@ -3028,7 +3306,32 @@
       "type":"string",
       "max":15,
       "min":15,
-      "pattern":"[a-zA-Z0-9]*"
+      "pattern":"[a-zA-Z0-9 ]*"
+    },
+    "X12SplitBy":{
+      "type":"string",
+      "enum":[
+        "NONE",
+        "TRANSACTION"
+      ]
+    },
+    "X12SplitOptions":{
+      "type":"structure",
+      "required":["splitBy"],
+      "members":{
+        "splitBy":{
+          "shape":"X12SplitBy",
+          "documentation":"<p>Specifies the method used to split X12 EDI files. Valid values include <code>TRANSACTION</code> (split by individual transaction sets), or <code>NONE</code> (no splitting).</p>"
+        }
+      },
+      "documentation":"<p>Contains options for splitting X12 EDI files into smaller units. This is useful for processing large EDI files more efficiently.</p>"
+    },
+    "X12TechnicalAcknowledgment":{
+      "type":"string",
+      "enum":[
+        "DO_NOT_GENERATE",
+        "GENERATE_ALL_SEGMENTS"
+      ]
     },
     "X12TransactionSet":{
       "type":"string",
@@ -3387,6 +3690,40 @@
       "type":"boolean",
       "box":true
     },
+    "X12ValidationOptions":{
+      "type":"structure",
+      "members":{
+        "validationRules":{
+          "shape":"X12ValidationRules",
+          "documentation":"<p>Specifies a list of validation rules to apply during EDI document processing. These rules can include code list modifications, element length constraints, and element requirement changes.</p>"
+        }
+      },
+      "documentation":"<p>Contains configuration options for X12 EDI validation. This structure allows you to specify custom validation rules that will be applied during EDI document processing, including element length constraints, code list modifications, and element requirement changes. These validation options provide flexibility to accommodate trading partner-specific requirements while maintaining EDI compliance. The validation rules are applied in addition to standard X12 validation to ensure documents meet both standard and custom requirements.</p>"
+    },
+    "X12ValidationRule":{
+      "type":"structure",
+      "members":{
+        "codeListValidationRule":{
+          "shape":"X12CodeListValidationRule",
+          "documentation":"<p>Specifies a code list validation rule that modifies the allowed code values for a specific X12 element. This rule enables you to customize which codes are considered valid for an element, allowing for trading partner-specific code requirements.</p>"
+        },
+        "elementLengthValidationRule":{
+          "shape":"X12ElementLengthValidationRule",
+          "documentation":"<p>Specifies an element length validation rule that defines custom length constraints for a specific X12 element. This rule allows you to enforce minimum and maximum length requirements that may differ from the standard X12 specification.</p>"
+        },
+        "elementRequirementValidationRule":{
+          "shape":"X12ElementRequirementValidationRule",
+          "documentation":"<p>Specifies an element requirement validation rule that modifies whether a specific X12 element is required or optional within a segment. This rule provides flexibility to accommodate different trading partner requirements for element presence.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single validation rule that can be applied during X12 EDI processing. This is a union type that can contain one of several specific validation rule types: code list validation rules for modifying allowed element codes, element length validation rules for enforcing custom length constraints, or element requirement validation rules for changing mandatory/optional status. Each validation rule targets specific aspects of EDI document validation to ensure compliance with trading partner requirements and business rules.</p>",
+      "union":true
+    },
+    "X12ValidationRules":{
+      "type":"list",
+      "member":{"shape":"X12ValidationRule"},
+      "documentation":"<p>A list of X12 validation rules to be applied during EDI document processing. This collection allows you to specify multiple validation rules of different types that will be enforced when validating X12 EDI documents.</p>"
+    },
     "X12Version":{
       "type":"string",
       "enum":[
diff -pruN 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/waiters-2.json 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/b2bi/2022-06-23/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/b2bi/2022-06-23/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,21 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "TransformerJobSucceeded" : {
+      "delay" : 10,
+      "maxAttempts" : 12,
+      "operation" : "GetTransformerJob",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "succeeded"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "failed"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backup/2018-11-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/backup/2018-11-15/paginators-1.json 2.31.35-1/awscli/botocore/data/backup/2018-11-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/backup/2018-11-15/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backup/2018-11-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -107,6 +107,12 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "IndexedRecoveryPoints"
+    },
+    "ListRestoreAccessBackupVaults": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "RestoreAccessBackupVaults"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/backup/2018-11-15/service-2.json 2.31.35-1/awscli/botocore/data/backup/2018-11-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/backup/2018-11-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backup/2018-11-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,23 @@
     "auth":["aws.auth#sigv4"]
   },
   "operations":{
+    "AssociateBackupVaultMpaApprovalTeam":{
+      "name":"AssociateBackupVaultMpaApprovalTeam",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/backup-vaults/{backupVaultName}/mpaApprovalTeam",
+        "responseCode":204
+      },
+      "input":{"shape":"AssociateBackupVaultMpaApprovalTeamInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"MissingParameterValueException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Associates an MPA approval team with a backup vault.</p>"
+    },
     "CancelLegalHold":{
       "name":"CancelLegalHold",
       "http":{
@@ -158,6 +175,26 @@
       "documentation":"<p>Creates a report plan. A report plan is a document that contains information about the contents of the report and where Backup will deliver it.</p> <p>If you call <code>CreateReportPlan</code> with a plan that already exists, you receive an <code>AlreadyExistsException</code> exception.</p>",
       "idempotent":true
     },
+    "CreateRestoreAccessBackupVault":{
+      "name":"CreateRestoreAccessBackupVault",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/restore-access-backup-vaults"
+      },
+      "input":{"shape":"CreateRestoreAccessBackupVaultInput"},
+      "output":{"shape":"CreateRestoreAccessBackupVaultOutput"},
+      "errors":[
+        {"shape":"AlreadyExistsException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"MissingParameterValueException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Creates a restore access backup vault that provides temporary access to recovery points in a logically air-gapped backup vault, subject to MPA approval.</p>",
+      "idempotent":true
+    },
     "CreateRestoreTestingPlan":{
       "name":"CreateRestoreTestingPlan",
       "http":{
@@ -244,7 +281,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Deletes the backup vault identified by its name. A vault can be deleted only if it is empty.</p>"
+      "documentation":"<p>Deletes the backup vault identified by its name. A vault can be deleted only if it is empty.</p>",
+      "idempotent":true
     },
     "DeleteBackupVaultAccessPolicy":{
       "name":"DeleteBackupVaultAccessPolicy",
@@ -554,6 +592,23 @@
       "documentation":"<p>Returns metadata associated with a restore job that is specified by a job ID.</p>",
       "idempotent":true
     },
+    "DisassociateBackupVaultMpaApprovalTeam":{
+      "name":"DisassociateBackupVaultMpaApprovalTeam",
+      "http":{
+        "method":"POST",
+        "requestUri":"/backup-vaults/{backupVaultName}/mpaApprovalTeam?delete",
+        "responseCode":204
+      },
+      "input":{"shape":"DisassociateBackupVaultMpaApprovalTeamInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"MissingParameterValueException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Removes the association between an MPA approval team and a backup vault, disabling the MPA approval workflow for restore operations.</p>"
+    },
     "DisassociateRecoveryPoint":{
       "name":"DisassociateRecoveryPoint",
       "http":{
@@ -1126,6 +1181,22 @@
       ],
       "documentation":"<p>Returns a list of your report plans. For detailed information about a single report plan, use <code>DescribeReportPlan</code>.</p>"
     },
+    "ListRestoreAccessBackupVaults":{
+      "name":"ListRestoreAccessBackupVaults",
+      "http":{
+        "method":"GET",
+        "requestUri":"/logically-air-gapped-backup-vaults/{backupVaultName}/restore-access-backup-vaults/"
+      },
+      "input":{"shape":"ListRestoreAccessBackupVaultsInput"},
+      "output":{"shape":"ListRestoreAccessBackupVaultsOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"MissingParameterValueException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Returns a list of restore access backup vaults associated with a specified backup vault.</p>"
+    },
     "ListRestoreJobSummaries":{
       "name":"ListRestoreJobSummaries",
       "http":{
@@ -1218,7 +1289,7 @@
         {"shape":"MissingParameterValueException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns the tags assigned to the resource, such as a target recovery point, backup plan, or backup vault.</p>",
+      "documentation":"<p>Returns the tags assigned to the resource, such as a target recovery point, backup plan, or backup vault.</p> <p>This operation returns results depending on the resource type used in the value for <code>resourceArn</code>. For example, recovery points of Amazon DynamoDB with Advanced Settings have an ARN (Amazon Resource Name) that begins with <code>arn:aws:backup</code>. Recovery points (backups) of DynamoDB without Advanced Settings enabled have an ARN that begins with <code>arn:aws:dynamodb</code>.</p> <p>When this operation is called and when you include values of <code>resourceArn</code> that have an ARN other than <code>arn:aws:backup</code>, it may return one of the exceptions listed below. To prevent this exception, include only values representing resource types that are fully managed by Backup. These have an ARN that begins <code>arn:aws:backup</code> and they are noted in the <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/backup-feature-availability.html#features-by-resource\">Feature availability by resource</a> table.</p>",
       "idempotent":true
     },
     "PutBackupVaultAccessPolicy":{
@@ -1288,6 +1359,22 @@
       "documentation":"<p>This request allows you to send your independent self-run restore test validation results. <code>RestoreJobId</code> and <code>ValidationStatus</code> are required. Optionally, you can input a <code>ValidationStatusMessage</code>.</p>",
       "idempotent":true
     },
+    "RevokeRestoreAccessBackupVault":{
+      "name":"RevokeRestoreAccessBackupVault",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/logically-air-gapped-backup-vaults/{backupVaultName}/restore-access-backup-vaults/{restoreAccessBackupVaultArn}"
+      },
+      "input":{"shape":"RevokeRestoreAccessBackupVaultInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"MissingParameterValueException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InvalidRequestException"}
+      ],
+      "documentation":"<p>Revokes access to a restore access backup vault, removing the ability to restore from its recovery points and permanently deleting the vault.</p>"
+    },
     "StartBackupJob":{
       "name":"StartBackupJob",
       "http":{
@@ -1323,7 +1410,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Starts a job to create a one-time copy of the specified resource.</p> <p>Does not support continuous backups.</p>",
+      "documentation":"<p>Starts a job to create a one-time copy of the specified resource.</p> <p>Does not support continuous backups.</p> <p>See <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/recov-point-create-a-copy.html#backup-copy-retry\">Copy job retry</a> for information on how Backup retries copy job operations.</p>",
       "idempotent":true
     },
     "StartReportJob":{
@@ -1375,7 +1462,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Attempts to cancel a job to create a one-time backup of a resource.</p> <p>This action is not supported for the following services: Amazon FSx for Windows File Server, Amazon FSx for Lustre, Amazon FSx for NetApp ONTAP, Amazon FSx for OpenZFS, Amazon DocumentDB (with MongoDB compatibility), Amazon RDS, Amazon Aurora, and Amazon Neptune.</p>"
+      "documentation":"<p>Attempts to cancel a job to create a one-time backup of a resource.</p> <p>This action is not supported for the following services:</p> <ul> <li> <p>Amazon Aurora</p> </li> <li> <p>Amazon DocumentDB (with MongoDB compatibility)</p> </li> <li> <p>Amazon FSx for Lustre</p> </li> <li> <p>Amazon FSx for NetApp ONTAP</p> </li> <li> <p>Amazon FSx for OpenZFS</p> </li> <li> <p>Amazon FSx for Windows File Server</p> </li> <li> <p>Amazon Neptune</p> </li> <li> <p>SAP HANA databases on Amazon EC2 instances</p> </li> <li> <p>Amazon RDS</p> </li> </ul>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -1391,7 +1478,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Assigns a set of key-value pairs to a recovery point, backup plan, or backup vault identified by an Amazon Resource Name (ARN).</p> <p>This API is supported for recovery points for resource types including Aurora, Amazon DocumentDB. Amazon EBS, Amazon FSx, Neptune, and Amazon RDS.</p>",
+      "documentation":"<p>Assigns a set of key-value pairs to a resource.</p>",
       "idempotent":true
     },
     "UntagResource":{
@@ -1584,7 +1671,7 @@
         },
         "BackupOptions":{
           "shape":"BackupOptions",
-          "documentation":"<p>Specifies the backup option for a selected resource. This option is only available for Windows VSS backup jobs.</p> <p>Valid values: </p> <p>Set to <code>\"WindowsVSS\":\"enabled\"</code> to enable the <code>WindowsVSS</code> backup option and create a Windows VSS backup. </p> <p>Set to <code>\"WindowsVSS\":\"disabled\"</code> to create a regular backup. The <code>WindowsVSS</code> option is not enabled by default.</p> <p>If you specify an invalid option, you get an <code>InvalidParameterValueException</code> exception.</p> <p>For more information about Windows VSS backups, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/windows-backups.html\">Creating a VSS-Enabled Windows Backup</a>.</p>"
+          "documentation":"<p>Specifies the backup option for a selected resource. This option is available for Windows VSS backup jobs and S3 backups.</p> <p>Valid values: </p> <p>Set to <code>\"WindowsVSS\":\"enabled\"</code> to enable the <code>WindowsVSS</code> backup option and create a Windows VSS backup. </p> <p>Set to <code>\"WindowsVSS\":\"disabled\"</code> to create a regular backup. The <code>WindowsVSS</code> option is not enabled by default.</p> <p>For S3 backups, set to <code>\"S3BackupACLs\":\"disabled\"</code> to exclude ACLs from the backup, or <code>\"S3BackupObjectTags\":\"disabled\"</code> to exclude object tags from the backup. By default, both ACLs and object tags are included in S3 backups.</p> <p>If you specify an invalid option, you get an <code>InvalidParameterValueException</code> exception.</p> <p>For more information about Windows VSS backups, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/windows-backups.html\">Creating a VSS-Enabled Windows Backup</a>.</p>"
         }
       },
       "documentation":"<p>The backup options for each resource type.</p>"
@@ -1626,6 +1713,29 @@
       "documentation":"<p>The required resource already exists.</p>",
       "exception":true
     },
+    "AssociateBackupVaultMpaApprovalTeamInput":{
+      "type":"structure",
+      "required":[
+        "BackupVaultName",
+        "MpaApprovalTeamArn"
+      ],
+      "members":{
+        "BackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the backup vault to associate with the MPA approval team.</p>",
+          "location":"uri",
+          "locationName":"backupVaultName"
+        },
+        "MpaApprovalTeamArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the MPA approval team to associate with the backup vault.</p>"
+        },
+        "RequesterComment":{
+          "shape":"RequesterComment",
+          "documentation":"<p>A comment provided by the requester explaining the association request.</p>"
+        }
+      }
+    },
     "BackupJob":{
       "type":"structure",
       "members":{
@@ -1645,10 +1755,27 @@
           "shape":"ARN",
           "documentation":"<p>An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, <code>arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault</code>.</p>"
         },
+        "VaultType":{
+          "shape":"string",
+          "documentation":"<p>The type of backup vault where the recovery point is stored. Valid values are <code>BACKUP_VAULT</code> for standard backup vaults and <code>LOGICALLY_AIR_GAPPED_BACKUP_VAULT</code> for logically air-gapped vaults.</p>"
+        },
+        "VaultLockState":{
+          "shape":"string",
+          "documentation":"<p>The lock state of the backup vault. For logically air-gapped vaults, this indicates whether the vault is locked in compliance mode. Valid values include <code>LOCKED</code> and <code>UNLOCKED</code>.</p>"
+        },
         "RecoveryPointArn":{
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a recovery point; for example, <code>arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45</code>.</p>"
         },
+        "RecoveryPointLifecycle":{"shape":"Lifecycle"},
+        "EncryptionKeyArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the backup. This can be a customer-managed key or an Amazon Web Services managed key, depending on the vault configuration.</p>"
+        },
+        "IsEncrypted":{
+          "shape":"boolean",
+          "documentation":"<p>A boolean value indicating whether the backup is encrypted. All backups in Backup are encrypted, but this field indicates the encryption status for transparency.</p>"
+        },
         "ResourceArn":{
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.</p>"
@@ -1675,7 +1802,7 @@
         },
         "BackupSizeInBytes":{
           "shape":"Long",
-          "documentation":"<p>The size, in bytes, of a backup.</p>"
+          "documentation":"<p>The size, in bytes, of a backup (recovery point).</p> <p>This value can render differently depending on the resource type as Backup pulls in data information from other Amazon Web Services services. For example, the value returned may show a value of <code>0</code>, which may differ from the anticipated value.</p> <p>The expected behavior for values by resource type are described as follows:</p> <ul> <li> <p>Amazon Aurora, Amazon DocumentDB, and Amazon Neptune do not have this value populate from the operation <code>GetBackupJobStatus</code>.</p> </li> <li> <p>For Amazon DynamoDB with advanced features, this value refers to the size of the recovery point (backup).</p> </li> <li> <p>Amazon EC2 and Amazon EBS show volume size (provisioned storage) returned as part of this value. Amazon EBS does not return backup size information; snapshot size will have the same value as the original resource that was backed up.</p> </li> <li> <p>For Amazon EFS, this value refers to the delta bytes transferred during a backup.</p> </li> <li> <p>Amazon FSx does not populate this value from the operation <code>GetBackupJobStatus</code> for FSx file systems.</p> </li> <li> <p>An Amazon RDS instance will show as <code>0</code>.</p> </li> <li> <p>For virtual machines running VMware, this value is passed to Backup through an asynchronous workflow, which can mean this displayed value can under-represent the actual backup size.</p> </li> </ul>"
         },
         "IamRoleArn":{
           "shape":"IAMRoleArn",
@@ -1956,7 +2083,7 @@
         },
         "ScheduleExpression":{
           "shape":"CronExpression",
-          "documentation":"<p>A cron expression in UTC specifying when Backup initiates a backup job. For more information about Amazon Web Services cron expressions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html\">Schedule Expressions for Rules</a> in the <i>Amazon CloudWatch Events User Guide.</i>. Two examples of Amazon Web Services cron expressions are <code> 15 * ? * * *</code> (take a backup every hour at 15 minutes past the hour) and <code>0 12 * * ? *</code> (take a backup every day at 12 noon UTC). For a table of examples, click the preceding link and scroll down the page.</p>"
+          "documentation":"<p>A cron expression in UTC specifying when Backup initiates a backup job. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p> <p>For more information about Amazon Web Services cron expressions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html\">Schedule Expressions for Rules</a> in the <i>Amazon CloudWatch Events User Guide</i>.</p> <p>Two examples of Amazon Web Services cron expressions are <code> 15 * ? * * *</code> (take a backup every hour at 15 minutes past the hour) and <code>0 12 * * ? *</code> (take a backup every day at 12 noon UTC).</p> <p>For a table of examples, click the preceding link and scroll down the page.</p>"
         },
         "StartWindowMinutes":{
           "shape":"WindowMinutes",
@@ -2014,7 +2141,7 @@
         },
         "ScheduleExpression":{
           "shape":"CronExpression",
-          "documentation":"<p>A CRON expression in UTC specifying when Backup initiates a backup job.</p>"
+          "documentation":"<p>A CRON expression in UTC specifying when Backup initiates a backup job. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p>"
         },
         "StartWindowMinutes":{
           "shape":"WindowMinutes",
@@ -2154,7 +2281,11 @@
         "BACKUP_PLAN_CREATED",
         "BACKUP_PLAN_MODIFIED",
         "S3_BACKUP_OBJECT_FAILED",
-        "S3_RESTORE_OBJECT_FAILED"
+        "S3_RESTORE_OBJECT_FAILED",
+        "CONTINUOUS_BACKUP_INTERRUPTED",
+        "RECOVERY_POINT_INDEX_COMPLETED",
+        "RECOVERY_POINT_INDEX_DELETED",
+        "RECOVERY_POINT_INDEXING_FAILED"
       ]
     },
     "BackupVaultEvents":{
@@ -2215,6 +2346,10 @@
         "LockDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time when Backup Vault Lock configuration becomes immutable, meaning it cannot be changed or deleted.</p> <p>If you applied Vault Lock to your vault without specifying a lock date, you can change your Vault Lock settings, or delete Vault Lock from the vault entirely, at any time.</p> <p>This value is in Unix format, Coordinated Universal Time (UTC), and accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
+        },
+        "EncryptionKeyType":{
+          "shape":"EncryptionKeyType",
+          "documentation":"<p>The type of encryption key used for the backup vault. Valid values are CUSTOMER_MANAGED_KMS_KEY for customer-managed keys or Amazon Web Services_OWNED_KMS_KEY for Amazon Web Services-owned keys.</p>"
         }
       },
       "documentation":"<p>Contains metadata about a backup vault.</p>"
@@ -2267,8 +2402,7 @@
     },
     "CancelLegalHoldOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ComplianceResourceIdList":{
       "type":"list",
@@ -2438,10 +2572,23 @@
           "shape":"ARN",
           "documentation":"<p>An Amazon Resource Name (ARN) that uniquely identifies a destination copy vault; for example, <code>arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault</code>.</p>"
         },
+        "DestinationVaultType":{
+          "shape":"string",
+          "documentation":"<p>The type of destination backup vault where the copied recovery point is stored. Valid values are <code>BACKUP_VAULT</code> for standard backup vaults and <code>LOGICALLY_AIR_GAPPED_BACKUP_VAULT</code> for logically air-gapped vaults.</p>"
+        },
+        "DestinationVaultLockState":{
+          "shape":"string",
+          "documentation":"<p>The lock state of the destination backup vault. For logically air-gapped vaults, this indicates whether the vault is locked in compliance mode. Valid values include <code>LOCKED</code> and <code>UNLOCKED</code>.</p>"
+        },
         "DestinationRecoveryPointArn":{
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a destination recovery point; for example, <code>arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45</code>.</p>"
         },
+        "DestinationEncryptionKeyArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the copied backup in the destination vault. This can be a customer-managed key or an Amazon Web Services managed key.</p>"
+        },
+        "DestinationRecoveryPointLifecycle":{"shape":"Lifecycle"},
         "ResourceArn":{
           "shape":"ARN",
           "documentation":"<p>The Amazon Web Services resource to be copied; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.</p>"
@@ -2597,7 +2744,8 @@
         },
         "CreatorRequestId":{
           "shape":"string",
-          "documentation":"<p>Identifies the request and allows failed requests to be retried without the risk of running the operation twice. If the request includes a <code>CreatorRequestId</code> that matches an existing backup plan, that plan is returned. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>"
+          "documentation":"<p>Identifies the request and allows failed requests to be retried without the risk of running the operation twice. If the request includes a <code>CreatorRequestId</code> that matches an existing backup plan, that plan is returned. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2645,7 +2793,8 @@
         },
         "CreatorRequestId":{
           "shape":"string",
-          "documentation":"<p>A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>"
+          "documentation":"<p>A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2686,7 +2835,8 @@
         },
         "CreatorRequestId":{
           "shape":"string",
-          "documentation":"<p>A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>"
+          "documentation":"<p>A unique string that identifies the request and allows failed requests to be retried without the risk of running the operation twice. This parameter is optional.</p> <p>If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2767,7 +2917,8 @@
         },
         "IdempotencyToken":{
           "shape":"string",
-          "documentation":"<p>This is a user-chosen string used to distinguish between otherwise identical calls. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>"
+          "documentation":"<p>This is a user-chosen string used to distinguish between otherwise identical calls. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>",
+          "idempotencyToken":true
         },
         "RecoveryPointSelection":{
           "shape":"RecoveryPointSelection",
@@ -2832,7 +2983,8 @@
         },
         "CreatorRequestId":{
           "shape":"string",
-          "documentation":"<p>The ID of the creation request.</p> <p>This parameter is optional. If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>"
+          "documentation":"<p>The ID of the creation request.</p> <p>This parameter is optional. If used, this parameter must contain 1 to 50 alphanumeric or '-_.' characters.</p>",
+          "idempotencyToken":true
         },
         "MinRetentionDays":{
           "shape":"Long",
@@ -2841,6 +2993,10 @@
         "MaxRetentionDays":{
           "shape":"Long",
           "documentation":"<p>The maximum retention period that the vault retains its recovery points.</p>"
+        },
+        "EncryptionKeyArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the customer-managed KMS key to use for encrypting the logically air-gapped backup vault. If not specified, the vault will be encrypted with an Amazon Web Services-owned key managed by Amazon Web Services Backup.</p>"
         }
       }
     },
@@ -2917,6 +3073,54 @@
         }
       }
     },
+    "CreateRestoreAccessBackupVaultInput":{
+      "type":"structure",
+      "required":["SourceBackupVaultArn"],
+      "members":{
+        "SourceBackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the source backup vault containing the recovery points to which temporary access is requested.</p>"
+        },
+        "BackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the backup vault to associate with an MPA approval team.</p>"
+        },
+        "BackupVaultTags":{
+          "shape":"Tags",
+          "documentation":"<p>Optional tags to assign to the restore access backup vault.</p>"
+        },
+        "CreatorRequestId":{
+          "shape":"string",
+          "documentation":"<p>A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.</p>",
+          "idempotencyToken":true
+        },
+        "RequesterComment":{
+          "shape":"RequesterComment",
+          "documentation":"<p>A comment explaining the reason for requesting restore access to the backup vault.</p>"
+        }
+      }
+    },
+    "CreateRestoreAccessBackupVaultOutput":{
+      "type":"structure",
+      "members":{
+        "RestoreAccessBackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN that uniquely identifies the created restore access backup vault.</p>"
+        },
+        "VaultState":{
+          "shape":"VaultState",
+          "documentation":"<p>The current state of the restore access backup vault.</p>"
+        },
+        "RestoreAccessBackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the created restore access backup vault.</p>"
+        },
+        "CreationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>&gt;The date and time when the restore access backup vault was created, in Unix format and Coordinated Universal Time </p>"
+        }
+      }
+    },
     "CreateRestoreTestingPlanInput":{
       "type":"structure",
       "required":["RestoreTestingPlan"],
@@ -3003,7 +3207,7 @@
         },
         "RestoreTestingSelectionName":{
           "shape":"String",
-          "documentation":"<p>The name of the restore testing selection for the related restore testing plan.</p>"
+          "documentation":"<p>The name of the restore testing selection for the related restore testing plan.</p> <p>The name cannot be changed after creation. The name consists of only alphanumeric characters and underscores. Maximum length is 50.</p>"
         }
       }
     },
@@ -3251,14 +3455,31 @@
           "shape":"BackupVaultName",
           "documentation":"<p>The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Amazon Web Services Region where they are created.</p>"
         },
+        "RecoveryPointLifecycle":{"shape":"Lifecycle"},
         "BackupVaultArn":{
           "shape":"ARN",
           "documentation":"<p>An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, <code>arn:aws:backup:us-east-1:123456789012:backup-vault:aBackupVault</code>.</p>"
         },
+        "VaultType":{
+          "shape":"string",
+          "documentation":"<p>The type of backup vault where the recovery point is stored. Valid values are <code>BACKUP_VAULT</code> for standard backup vaults and <code>LOGICALLY_AIR_GAPPED_BACKUP_VAULT</code> for logically air-gapped vaults.</p>"
+        },
+        "VaultLockState":{
+          "shape":"string",
+          "documentation":"<p>The lock state of the backup vault. For logically air-gapped vaults, this indicates whether the vault is locked in compliance mode. Valid values include <code>LOCKED</code> and <code>UNLOCKED</code>.</p>"
+        },
         "RecoveryPointArn":{
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a recovery point; for example, <code>arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45</code>.</p>"
         },
+        "EncryptionKeyArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the backup. This can be a customer-managed key or an Amazon Web Services managed key, depending on the vault configuration.</p>"
+        },
+        "IsEncrypted":{
+          "shape":"boolean",
+          "documentation":"<p>A boolean value indicating whether the backup is encrypted. All backups in Backup are encrypted, but this field indicates the encryption status for transparency.</p>"
+        },
         "ResourceArn":{
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a saved resource. The format of the ARN depends on the resource type.</p>"
@@ -3285,7 +3506,7 @@
         },
         "BackupSizeInBytes":{
           "shape":"Long",
-          "documentation":"<p>The size, in bytes, of a backup.</p>"
+          "documentation":"<p>The size, in bytes, of a backup (recovery point).</p> <p>This value can render differently depending on the resource type as Backup pulls in data information from other Amazon Web Services services. For example, the value returned may show a value of <code>0</code>, which may differ from the anticipated value.</p> <p>The expected behavior for values by resource type are described as follows:</p> <ul> <li> <p>Amazon Aurora, Amazon DocumentDB, and Amazon Neptune do not have this value populate from the operation <code>GetBackupJobStatus</code>.</p> </li> <li> <p>For Amazon DynamoDB with advanced features, this value refers to the size of the recovery point (backup).</p> </li> <li> <p>Amazon EC2 and Amazon EBS show volume size (provisioned storage) returned as part of this value. Amazon EBS does not return backup size information; snapshot size will have the same value as the original resource that was backed up.</p> </li> <li> <p>For Amazon EFS, this value refers to the delta bytes transferred during a backup.</p> </li> <li> <p>Amazon FSx does not populate this value from the operation <code>GetBackupJobStatus</code> for FSx file systems.</p> </li> <li> <p>An Amazon RDS instance will show as <code>0</code>.</p> </li> <li> <p>For virtual machines running VMware, this value is passed to Backup through an asynchronous workflow, which can mean this displayed value can under-represent the actual backup size.</p> </li> </ul>"
         },
         "IamRoleArn":{
           "shape":"IAMRoleArn",
@@ -3400,7 +3621,7 @@
         },
         "NumberOfRecoveryPoints":{
           "shape":"long",
-          "documentation":"<p>The number of recovery points that are stored in a backup vault.</p>"
+          "documentation":"<p>The number of recovery points that are stored in a backup vault.</p> <p>Recovery point count value displayed in the console can be an approximation. Use <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/API_ListRecoveryPointsByBackupVault.html\"> <code>ListRecoveryPointsByBackupVault</code> </a> API to obtain the exact count.</p>"
         },
         "Locked":{
           "shape":"Boolean",
@@ -3417,6 +3638,26 @@
         "LockDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time when Backup Vault Lock configuration cannot be changed or deleted.</p> <p>If you applied Vault Lock to your vault without specifying a lock date, you can change any of your Vault Lock settings, or delete Vault Lock from the vault entirely, at any time.</p> <p>This value is in Unix format, Coordinated Universal Time (UTC), and accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
+        },
+        "SourceBackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the source backup vault from which this restore access backup vault was created.</p>"
+        },
+        "MpaApprovalTeamArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the MPA approval team associated with this backup vault.</p>"
+        },
+        "MpaSessionArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the MPA session associated with this backup vault.</p>"
+        },
+        "LatestMpaApprovalTeamUpdate":{
+          "shape":"LatestMpaApprovalTeamUpdate",
+          "documentation":"<p>Information about the latest update to the MPA approval team association for this backup vault.</p>"
+        },
+        "EncryptionKeyType":{
+          "shape":"EncryptionKeyType",
+          "documentation":"<p>The type of encryption key used for the backup vault. Valid values are CUSTOMER_MANAGED_KMS_KEY for customer-managed keys or Amazon Web Services_OWNED_KMS_KEY for Amazon Web Services-owned keys.</p>"
         }
       }
     },
@@ -3492,15 +3733,14 @@
     },
     "DescribeGlobalSettingsInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeGlobalSettingsOutput":{
       "type":"structure",
       "members":{
         "GlobalSettings":{
           "shape":"GlobalSettings",
-          "documentation":"<p>The status of the flag <code>isCrossAccountBackupEnabled</code>.</p>"
+          "documentation":"<p>The status of the flags <code>isCrossAccountBackupEnabled</code> and <code>isMpaEnabled</code> ('Mpa' refers to multi-party approval).</p>"
         },
         "LastUpdateTime":{
           "shape":"timestamp",
@@ -3625,7 +3865,7 @@
         },
         "Status":{
           "shape":"RecoveryPointStatus",
-          "documentation":"<p>A status code specifying the state of the recovery point.</p> <p> <code>PARTIAL</code> status indicates Backup could not create the recovery point before the backup window closed. To increase your backup plan window using the API, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/API_UpdateBackupPlan.html\">UpdateBackupPlan</a>. You can also increase your backup plan window using the Console by choosing and editing your backup plan.</p> <p> <code>EXPIRED</code> status indicates that the recovery point has exceeded its retention period, but Backup lacks permission or is otherwise unable to delete it. To manually delete these recovery points, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/gs-cleanup-resources.html#cleanup-backups\"> Step 3: Delete the recovery points</a> in the <i>Clean up resources</i> section of <i>Getting started</i>.</p> <p> <code>STOPPED</code> status occurs on a continuous backup where a user has taken some action that causes the continuous backup to be disabled. This can be caused by the removal of permissions, turning off versioning, turning off events being sent to EventBridge, or disabling the EventBridge rules that are put in place by Backup. For recovery points of Amazon S3, Amazon RDS, and Amazon Aurora resources, this status occurs when the retention period of a continuous backup rule is changed.</p> <p>To resolve <code>STOPPED</code> status, ensure that all requested permissions are in place and that versioning is enabled on the S3 bucket. Once these conditions are met, the next instance of a backup rule running will result in a new continuous recovery point being created. The recovery points with STOPPED status do not need to be deleted.</p> <p>For SAP HANA on Amazon EC2 <code>STOPPED</code> status occurs due to user action, application misconfiguration, or backup failure. To ensure that future continuous backups succeed, refer to the recovery point status and check SAP HANA for details.</p>"
+          "documentation":"<p>A status code specifying the state of the recovery point. For more information, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/applicationstackbackups.html#cfnrecoverypointstatus\"> Recovery point status</a> in the <i>Backup Developer Guide</i>.</p> <ul> <li> <p> <code>CREATING</code> status indicates that an Backup job has been initiated for a resource. The backup process has started and is actively processing a backup job for the associated recovery point.</p> </li> <li> <p> <code>AVAILABLE</code> status indicates that the backup was successfully created for the recovery point. The backup process has completed without any issues, and the recovery point is now ready for use.</p> </li> <li> <p> <code>PARTIAL</code> status indicates a composite recovery point has one or more nested recovery points that were not in the backup.</p> </li> <li> <p> <code>EXPIRED</code> status indicates that the recovery point has exceeded its retention period, but Backup lacks permission or is otherwise unable to delete it. To manually delete these recovery points, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/gs-cleanup-resources.html#cleanup-backups\"> Step 3: Delete the recovery points</a> in the <i>Clean up resources</i> section of <i>Getting started</i>.</p> </li> <li> <p> <code>STOPPED</code> status occurs on a continuous backup where a user has taken some action that causes the continuous backup to be disabled. This can be caused by the removal of permissions, turning off versioning, turning off events being sent to EventBridge, or disabling the EventBridge rules that are put in place by Backup. For recovery points of Amazon S3, Amazon RDS, and Amazon Aurora resources, this status occurs when the retention period of a continuous backup rule is changed.</p> <p>To resolve <code>STOPPED</code> status, ensure that all requested permissions are in place and that versioning is enabled on the S3 bucket. Once these conditions are met, the next instance of a backup rule running will result in a new continuous recovery point being created. The recovery points with STOPPED status do not need to be deleted.</p> <p>For SAP HANA on Amazon EC2 <code>STOPPED</code> status occurs due to user action, application misconfiguration, or backup failure. To ensure that future continuous backups succeed, refer to the recovery point status and check SAP HANA for details.</p> </li> </ul>"
         },
         "StatusMessage":{
           "shape":"string",
@@ -3635,6 +3875,10 @@
           "shape":"timestamp",
           "documentation":"<p>The date and time that a recovery point is created, in Unix format and Coordinated Universal Time (UTC). The value of <code>CreationDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
         },
+        "InitiationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the backup job that created this recovery point was initiated, in Unix format and Coordinated Universal Time (UTC).</p>"
+        },
         "CompletionDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time that a job to create a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of <code>CompletionDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
@@ -3694,13 +3938,16 @@
         "IndexStatusMessage":{
           "shape":"string",
           "documentation":"<p>A string in the form of a detailed message explaining the status of a backup index associated with the recovery point.</p>"
+        },
+        "EncryptionKeyType":{
+          "shape":"EncryptionKeyType",
+          "documentation":"<p>The type of encryption key used for the recovery point. Valid values are CUSTOMER_MANAGED_KMS_KEY for customer-managed keys or Amazon Web Services_OWNED_KMS_KEY for Amazon Web Services-owned keys.</p>"
         }
       }
     },
     "DescribeRegionSettingsInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeRegionSettingsOutput":{
       "type":"structure",
@@ -3784,6 +4031,14 @@
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a recovery point; for example, <code>arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45</code>.</p>"
         },
+        "SourceResourceArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the original resource that was backed up. This provides context about what resource is being restored.</p>"
+        },
+        "BackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the backup vault containing the recovery point being restored. This helps identify vault access policies and permissions.</p>"
+        },
         "CreationDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time that a restore job is created, in Unix format and Coordinated Universal Time (UTC). The value of <code>CreationDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
@@ -3847,6 +4102,30 @@
         "DeletionStatusMessage":{
           "shape":"string",
           "documentation":"<p>This describes the restore job deletion status.</p>"
+        },
+        "IsParent":{
+          "shape":"boolean",
+          "documentation":"<p>This is a boolean value indicating whether the restore job is a parent (composite) restore job.</p>"
+        },
+        "ParentJobId":{
+          "shape":"string",
+          "documentation":"<p>This is the unique identifier of the parent restore job for the selected restore job.</p>"
+        }
+      }
+    },
+    "DisassociateBackupVaultMpaApprovalTeamInput":{
+      "type":"structure",
+      "required":["BackupVaultName"],
+      "members":{
+        "BackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the backup vault from which to disassociate the MPA approval team.</p>",
+          "location":"uri",
+          "locationName":"backupVaultName"
+        },
+        "RequesterComment":{
+          "shape":"RequesterComment",
+          "documentation":"<p>An optional comment explaining the reason for disassociating the MPA approval team from the backup vault.</p>"
         }
       }
     },
@@ -3892,6 +4171,13 @@
         }
       }
     },
+    "EncryptionKeyType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED_KMS_KEY",
+        "CUSTOMER_MANAGED_KMS_KEY"
+      ]
+    },
     "ExportBackupPlanTemplateInput":{
       "type":"structure",
       "required":["BackupPlanId"],
@@ -4041,6 +4327,12 @@
           "documentation":"<p>Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version IDs cannot be edited.</p>",
           "location":"querystring",
           "locationName":"versionId"
+        },
+        "MaxScheduledRunsPreview":{
+          "shape":"MaxScheduledRunsPreview",
+          "documentation":"<p>Number of future scheduled backup runs to preview. When set to 0 (default), no scheduled runs preview is included in the response. Valid range is 0-10.</p>",
+          "location":"querystring",
+          "locationName":"MaxScheduledRunsPreview"
         }
       }
     },
@@ -4082,6 +4374,10 @@
         "AdvancedBackupSettings":{
           "shape":"AdvancedBackupSettings",
           "documentation":"<p>Contains a list of <code>BackupOptions</code> for each resource type. The list is populated only if the advanced option is set for the backup plan.</p>"
+        },
+        "ScheduledRunsPreview":{
+          "shape":"ScheduledRunsPreview",
+          "documentation":"<p>List of upcoming scheduled backup runs. Only included when <code>MaxScheduledRunsPreview</code> parameter is greater than 0. Contains up to 10 future backup executions with their scheduled times, execution types, and associated rule IDs.</p>"
         }
       }
     },
@@ -4643,6 +4939,58 @@
       "type":"list",
       "member":{"shape":"KeyValue"}
     },
+    "LatestMpaApprovalTeamUpdate":{
+      "type":"structure",
+      "members":{
+        "MpaSessionArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the MPA session associated with this update.</p>"
+        },
+        "Status":{
+          "shape":"MpaSessionStatus",
+          "documentation":"<p>The current status of the MPA approval team update.</p>"
+        },
+        "StatusMessage":{
+          "shape":"string",
+          "documentation":"<p>A message describing the current status of the MPA approval team update.</p>"
+        },
+        "InitiationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the MPA approval team update was initiated.</p>"
+        },
+        "ExpiryDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the MPA approval team update will expire.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the latest update to an MPA approval team association.</p>"
+    },
+    "LatestRevokeRequest":{
+      "type":"structure",
+      "members":{
+        "MpaSessionArn":{
+          "shape":"string",
+          "documentation":"<p>The ARN of the MPA session associated with this revoke request.</p>"
+        },
+        "Status":{
+          "shape":"MpaRevokeSessionStatus",
+          "documentation":"<p>The current status of the revoke request.</p>"
+        },
+        "StatusMessage":{
+          "shape":"string",
+          "documentation":"<p>A message describing the current status of the revoke request.</p>"
+        },
+        "InitiationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the revoke request was initiated.</p>"
+        },
+        "ExpiryDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the revoke request will expire.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the latest request to revoke access to a backup vault.</p>"
+    },
     "LegalHold":{
       "type":"structure",
       "members":{
@@ -5667,6 +6015,43 @@
         }
       }
     },
+    "ListRestoreAccessBackupVaultsInput":{
+      "type":"structure",
+      "required":["BackupVaultName"],
+      "members":{
+        "BackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the backup vault for which to list associated restore access backup vaults.</p>",
+          "location":"uri",
+          "locationName":"backupVaultName"
+        },
+        "NextToken":{
+          "shape":"string",
+          "documentation":"<p>The pagination token from a previous request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListRestoreAccessBackupVaultsOutput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"string",
+          "documentation":"<p>The pagination token to use in a subsequent request to retrieve the next set of results.</p>"
+        },
+        "RestoreAccessBackupVaults":{
+          "shape":"RestoreAccessBackupVaultList",
+          "documentation":"<p>A list of restore access backup vaults associated with the specified backup vault.</p>"
+        }
+      }
+    },
     "ListRestoreJobSummariesInput":{
       "type":"structure",
       "members":{
@@ -5842,6 +6227,12 @@
           "documentation":"<p>This returns only restore testing jobs that match the specified resource Amazon Resource Name (ARN).</p>",
           "location":"querystring",
           "locationName":"restoreTestingPlanArn"
+        },
+        "ByParentJobId":{
+          "shape":"string",
+          "documentation":"<p>This is a filter to list child (nested) restore jobs based on parent restore job ID.</p>",
+          "location":"querystring",
+          "locationName":"parentJobId"
         }
       }
     },
@@ -5987,6 +6378,11 @@
       "max":1000,
       "min":1
     },
+    "MaxScheduledRunsPreview":{
+      "type":"integer",
+      "max":10,
+      "min":0
+    },
     "MessageCategory":{"type":"string"},
     "Metadata":{
       "type":"map",
@@ -6013,6 +6409,21 @@
       "documentation":"<p>Indicates that a required parameter is missing.</p>",
       "exception":true
     },
+    "MpaRevokeSessionStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "FAILED"
+      ]
+    },
+    "MpaSessionStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "APPROVED",
+        "FAILED"
+      ]
+    },
     "ParameterName":{"type":"string"},
     "ParameterValue":{"type":"string"},
     "ProtectedResource":{
@@ -6123,7 +6534,7 @@
         },
         "BackupVaultEvents":{
           "shape":"BackupVaultEvents",
-          "documentation":"<p>An array of events that indicate the status of jobs to back up resources to the backup vault.</p> <p>For common use cases and code samples, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/sns-notifications.html\">Using Amazon SNS to track Backup events</a>.</p> <p>The following events are supported:</p> <ul> <li> <p> <code>BACKUP_JOB_STARTED</code> | <code>BACKUP_JOB_COMPLETED</code> </p> </li> <li> <p> <code>COPY_JOB_STARTED</code> | <code>COPY_JOB_SUCCESSFUL</code> | <code>COPY_JOB_FAILED</code> </p> </li> <li> <p> <code>RESTORE_JOB_STARTED</code> | <code>RESTORE_JOB_COMPLETED</code> | <code>RECOVERY_POINT_MODIFIED</code> </p> </li> <li> <p> <code>S3_BACKUP_OBJECT_FAILED</code> | <code>S3_RESTORE_OBJECT_FAILED</code> </p> </li> </ul> <note> <p>The list below includes both supported events and deprecated events that are no longer in use (for reference). Deprecated events do not return statuses or notifications. Refer to the list above for the supported events.</p> </note>"
+          "documentation":"<p>An array of events that indicate the status of jobs to back up resources to the backup vault. For the list of supported events, common use cases, and code samples, see <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/backup-notifications.html\">Notification options with Backup</a>.</p>"
         }
       }
     },
@@ -6197,6 +6608,10 @@
           "shape":"timestamp",
           "documentation":"<p>The date and time a recovery point is created, in Unix format and Coordinated Universal Time (UTC). The value of <code>CreationDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
         },
+        "InitiationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the backup job that created this recovery point was initiated, in Unix format and Coordinated Universal Time (UTC).</p>"
+        },
         "CompletionDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time a job to restore a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of <code>CompletionDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
@@ -6252,6 +6667,10 @@
         "IndexStatusMessage":{
           "shape":"string",
           "documentation":"<p>A string in the form of a detailed message explaining the status of a backup index associated with the recovery point.</p>"
+        },
+        "EncryptionKeyType":{
+          "shape":"EncryptionKeyType",
+          "documentation":"<p>The type of encryption key used for the recovery point. Valid values are CUSTOMER_MANAGED_KMS_KEY for customer-managed keys or Amazon Web Services_OWNED_KMS_KEY for Amazon Web Services-owned keys.</p>"
         }
       },
       "documentation":"<p>Contains detailed information about the recovery points stored in a backup vault.</p>"
@@ -6314,6 +6733,10 @@
         "IndexStatusMessage":{
           "shape":"string",
           "documentation":"<p>A string in the form of a detailed message explaining the status of a backup index associated with the recovery point.</p>"
+        },
+        "EncryptionKeyType":{
+          "shape":"EncryptionKeyType",
+          "documentation":"<p>The type of encryption key used for the recovery point. Valid values are CUSTOMER_MANAGED_KMS_KEY for customer-managed keys or Amazon Web Services_OWNED_KMS_KEY for Amazon Web Services-owned keys.</p>"
         }
       },
       "documentation":"<p>Contains detailed information about a saved recovery point.</p>"
@@ -6333,6 +6756,10 @@
           "shape":"ARN",
           "documentation":"<p>An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, <code>arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50</code>.</p>"
         },
+        "BackupPlanName":{
+          "shape":"string",
+          "documentation":"<p>The name of the backup plan that created this recovery point. This provides human-readable context about which backup plan was responsible for the backup job.</p>"
+        },
         "BackupPlanVersion":{
           "shape":"string",
           "documentation":"<p>Version IDs are unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. They cannot be edited.</p>"
@@ -6340,6 +6767,18 @@
         "BackupRuleId":{
           "shape":"string",
           "documentation":"<p>Uniquely identifies a rule used to schedule the backup of a selection of resources.</p>"
+        },
+        "BackupRuleName":{
+          "shape":"string",
+          "documentation":"<p>The name of the backup rule within the backup plan that created this recovery point. This helps identify which specific rule triggered the backup job.</p>"
+        },
+        "BackupRuleCron":{
+          "shape":"string",
+          "documentation":"<p>The cron expression that defines the schedule for the backup rule. This shows the frequency and timing of when backups are automatically triggered.</p>"
+        },
+        "BackupRuleTimezone":{
+          "shape":"string",
+          "documentation":"<p>The timezone used for the backup rule schedule. This provides context for when backups are scheduled to run in the specified timezone.</p>"
         }
       },
       "documentation":"<p>Contains information about the backup plan and rule that Backup used to initiate the recovery point backup.</p>"
@@ -6387,7 +6826,10 @@
         "COMPLETED",
         "PARTIAL",
         "DELETING",
-        "EXPIRED"
+        "EXPIRED",
+        "AVAILABLE",
+        "STOPPED",
+        "CREATING"
       ]
     },
     "RecoveryPointsList":{
@@ -6560,6 +7002,10 @@
       },
       "documentation":"<p>Contains detailed information about a report setting.</p>"
     },
+    "RequesterComment":{
+      "type":"string",
+      "sensitive":true
+    },
     "ResourceArns":{
       "type":"list",
       "member":{"shape":"ARN"}
@@ -6607,6 +7053,36 @@
       "type":"list",
       "member":{"shape":"ResourceType"}
     },
+    "RestoreAccessBackupVaultList":{
+      "type":"list",
+      "member":{"shape":"RestoreAccessBackupVaultListMember"}
+    },
+    "RestoreAccessBackupVaultListMember":{
+      "type":"structure",
+      "members":{
+        "RestoreAccessBackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the restore access backup vault.</p>"
+        },
+        "CreationDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the restore access backup vault was created.</p>"
+        },
+        "ApprovalDate":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the restore access backup vault was approved.</p>"
+        },
+        "VaultState":{
+          "shape":"VaultState",
+          "documentation":"<p>The current state of the restore access backup vault.</p>"
+        },
+        "LatestRevokeRequest":{
+          "shape":"LatestRevokeRequest",
+          "documentation":"<p>Information about the latest request to revoke access to this backup vault.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a restore access backup vault.</p>"
+    },
     "RestoreDeletionStatus":{
       "type":"string",
       "enum":[
@@ -6706,6 +7182,14 @@
           "shape":"ARN",
           "documentation":"<p>An ARN that uniquely identifies a recovery point; for example, <code>arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45</code>.</p>"
         },
+        "SourceResourceArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the original resource that was backed up. This provides context about what resource is being restored.</p>"
+        },
+        "BackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the backup vault containing the recovery point being restored. This helps identify vault access policies and permissions.</p>"
+        },
         "CreationDate":{
           "shape":"timestamp",
           "documentation":"<p>The date and time a restore job is created, in Unix format and Coordinated Universal Time (UTC). The value of <code>CreationDate</code> is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.</p>"
@@ -6750,6 +7234,14 @@
           "shape":"timestamp",
           "documentation":"<p>The date on which a recovery point was created.</p>"
         },
+        "IsParent":{
+          "shape":"boolean",
+          "documentation":"<p>This is a boolean value indicating whether the restore job is a parent (composite) restore job.</p>"
+        },
+        "ParentJobId":{
+          "shape":"string",
+          "documentation":"<p>This is the unique identifier of the parent restore job for the selected restore job.</p>"
+        },
         "CreatedBy":{
           "shape":"RestoreJobCreator",
           "documentation":"<p>Contains identifying information about the creation of a restore job.</p>"
@@ -6791,7 +7283,7 @@
         },
         "ScheduleExpression":{
           "shape":"String",
-          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed.</p>"
+          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p>"
         },
         "ScheduleExpressionTimezone":{
           "shape":"String",
@@ -6844,7 +7336,7 @@
         },
         "ScheduleExpression":{
           "shape":"String",
-          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed.</p>"
+          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p>"
         },
         "ScheduleExpressionTimezone":{
           "shape":"String",
@@ -6888,7 +7380,7 @@
         },
         "ScheduleExpression":{
           "shape":"String",
-          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed.</p>"
+          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p>"
         },
         "ScheduleExpressionTimezone":{
           "shape":"String",
@@ -6910,7 +7402,7 @@
         },
         "ScheduleExpression":{
           "shape":"String",
-          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed.</p>"
+          "documentation":"<p>A CRON expression in specified timezone when a restore testing plan is executed. When no CRON expression is provided, Backup will use the default expression <code>cron(0 5 ? * * *)</code>.</p>"
         },
         "ScheduleExpressionTimezone":{
           "shape":"String",
@@ -7001,11 +7493,11 @@
         },
         "RestoreTestingSelectionName":{
           "shape":"String",
-          "documentation":"<p>The unique name of the restore testing selection that belongs to the related restore testing plan.</p>"
+          "documentation":"<p>The unique name of the restore testing selection that belongs to the related restore testing plan.</p> <p>The name consists of only alphanumeric characters and underscores. Maximum length is 50.</p>"
         },
         "ValidationWindowHours":{
           "shape":"integer",
-          "documentation":"<p>This is amount of hours (1 to 168) available to run a validation script on the data. The data will be deleted upon the completion of the validation script or the end of the specified retention period, whichever comes first.</p>"
+          "documentation":"<p>This is amount of hours (0 to 168) available to run a validation script on the data. The data will be deleted upon the completion of the validation script or the end of the specified retention period, whichever comes first.</p>"
         }
       },
       "documentation":"<p>This contains metadata about a specific restore testing selection.</p> <p>ProtectedResourceType is required, such as Amazon EBS or Amazon EC2.</p> <p>This consists of <code>RestoreTestingSelectionName</code>, <code>ProtectedResourceType</code>, and one of the following:</p> <ul> <li> <p> <code>ProtectedResourceArns</code> </p> </li> <li> <p> <code>ProtectedResourceConditions</code> </p> </li> </ul> <p>Each protected resource type can have one single value.</p> <p>A restore testing selection can include a wildcard value (\"*\") for <code>ProtectedResourceArns</code> along with <code>ProtectedResourceConditions</code>. Alternatively, you can include up to 30 specific protected resource ARNs in <code>ProtectedResourceArns</code>.</p> <p> <code>ProtectedResourceConditions</code> examples include as <code>StringEquals</code> and <code>StringNotEquals</code>.</p>"
@@ -7054,7 +7546,7 @@
         },
         "RestoreTestingSelectionName":{
           "shape":"String",
-          "documentation":"<p>The unique name of the restore testing selection that belongs to the related restore testing plan.</p>"
+          "documentation":"<p>The unique name of the restore testing selection that belongs to the related restore testing plan.</p> <p>The name consists of only alphanumeric characters and underscores. Maximum length is 50.</p>"
         },
         "ValidationWindowHours":{
           "shape":"integer",
@@ -7091,7 +7583,7 @@
         },
         "RestoreTestingSelectionName":{
           "shape":"String",
-          "documentation":"<p>Unique name of a restore testing selection.</p>"
+          "documentation":"<p>Unique name of a restore testing selection.</p> <p>The name consists of only alphanumeric characters and underscores. Maximum length is 50.</p>"
         },
         "ValidationWindowHours":{
           "shape":"integer",
@@ -7139,6 +7631,63 @@
         "VALIDATING"
       ]
     },
+    "RevokeRestoreAccessBackupVaultInput":{
+      "type":"structure",
+      "required":[
+        "BackupVaultName",
+        "RestoreAccessBackupVaultArn"
+      ],
+      "members":{
+        "BackupVaultName":{
+          "shape":"BackupVaultName",
+          "documentation":"<p>The name of the source backup vault associated with the restore access backup vault to be revoked.</p>",
+          "location":"uri",
+          "locationName":"backupVaultName"
+        },
+        "RestoreAccessBackupVaultArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the restore access backup vault to revoke.</p>",
+          "location":"uri",
+          "locationName":"restoreAccessBackupVaultArn"
+        },
+        "RequesterComment":{
+          "shape":"RequesterComment",
+          "documentation":"<p>A comment explaining the reason for revoking access to the restore access backup vault.</p>",
+          "location":"querystring",
+          "locationName":"requesterComment"
+        }
+      }
+    },
+    "RuleExecutionType":{
+      "type":"string",
+      "enum":[
+        "CONTINUOUS",
+        "SNAPSHOTS",
+        "CONTINUOUS_AND_SNAPSHOTS"
+      ]
+    },
+    "ScheduledPlanExecutionMember":{
+      "type":"structure",
+      "members":{
+        "ExecutionTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the backup is scheduled to run, in Unix format and Coordinated Universal Time (UTC). The value is accurate to milliseconds.</p>"
+        },
+        "RuleId":{
+          "shape":"string",
+          "documentation":"<p>The unique identifier of the backup rule that will execute at the scheduled time.</p>"
+        },
+        "RuleExecutionType":{
+          "shape":"RuleExecutionType",
+          "documentation":"<p>The type of backup rule execution. Valid values are <code>CONTINUOUS</code> (point-in-time recovery), <code>SNAPSHOTS</code> (snapshot backups), or <code>CONTINUOUS_AND_SNAPSHOTS</code> (both types combined).</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a scheduled backup plan execution, including the execution time, rule type, and associated rule identifier.</p>"
+    },
+    "ScheduledRunsPreview":{
+      "type":"list",
+      "member":{"shape":"ScheduledPlanExecutionMember"}
+    },
     "SensitiveStringMap":{
       "type":"map",
       "key":{"shape":"String"},
@@ -7185,7 +7734,8 @@
         },
         "IdempotencyToken":{
           "shape":"string",
-          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartBackupJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>"
+          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartBackupJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>",
+          "idempotencyToken":true
         },
         "StartWindowMinutes":{
           "shape":"WindowMinutes",
@@ -7261,7 +7811,8 @@
         },
         "IdempotencyToken":{
           "shape":"string",
-          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartCopyJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>"
+          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartCopyJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>",
+          "idempotencyToken":true
         },
         "Lifecycle":{"shape":"Lifecycle"}
       }
@@ -7330,7 +7881,8 @@
         },
         "IdempotencyToken":{
           "shape":"string",
-          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartRestoreJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>"
+          "documentation":"<p>A customer-chosen string that you can use to distinguish between otherwise identical calls to <code>StartRestoreJob</code>. Retrying a successful request with the same idempotency token results in a success message with no action taken.</p>",
+          "idempotencyToken":true
         },
         "ResourceType":{
           "shape":"ResourceType",
@@ -7387,7 +7939,7 @@
       "members":{
         "ResourceArn":{
           "shape":"ARN",
-          "documentation":"<p>An ARN that uniquely identifies a resource. The format of the ARN depends on the type of the tagged resource.</p> <p>ARNs that do not include <code>backup</code> are incompatible with tagging. <code>TagResource</code> and <code>UntagResource</code> with invalid ARNs will result in an error. Acceptable ARN content can include <code>arn:aws:backup:us-east</code>. Invalid ARN content may look like <code>arn:aws:ec2:us-east</code>.</p>",
+          "documentation":"<p>The ARN that uniquely identifies the resource.</p>",
           "location":"uri",
           "locationName":"resourceArn"
         },
@@ -7516,7 +8068,7 @@
       "members":{
         "GlobalSettings":{
           "shape":"GlobalSettings",
-          "documentation":"<p>A value for <code>isCrossAccountBackupEnabled</code> and a Region. Example: <code>update-global-settings --global-settings isCrossAccountBackupEnabled=false --region us-west-2</code>.</p>"
+          "documentation":"<p>Inputs can include:</p> <p>A value for <code>isCrossAccountBackupEnabled</code> and a Region. Example: <code>update-global-settings --global-settings isCrossAccountBackupEnabled=false --region us-west-2</code>.</p> <p>A value for Multi-party approval, styled as \"Mpa\": <code>isMpaEnabled</code>. Values can be true or false. Example: <code>update-global-settings --global-settings isMpaEnabled=false --region us-west-2</code>.</p>"
         }
       }
     },
@@ -7796,7 +8348,8 @@
       "type":"string",
       "enum":[
         "BACKUP_VAULT",
-        "LOGICALLY_AIR_GAPPED_BACKUP_VAULT"
+        "LOGICALLY_AIR_GAPPED_BACKUP_VAULT",
+        "RESTORE_ACCESS_BACKUP_VAULT"
       ]
     },
     "WindowMinutes":{"type":"long"},
diff -pruN 2.23.6-1/awscli/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backup-gateway/2021-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/backupsearch/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/backupsearch/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/backupsearch/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backupsearch/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -104,15 +104,8 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://backup-search-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {
-                                            "authSchemes": [
-                                                {
-                                                    "name": "sigv4",
-                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
-                                                }
-                                            ]
-                                        },
+                                        "url": "https://backup-search-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
                                         "headers": {}
                                     },
                                     "type": "endpoint"
@@ -120,15 +113,8 @@
                                 {
                                     "conditions": [],
                                     "endpoint": {
-                                        "url": "https://backup-search.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {
-                                            "authSchemes": [
-                                                {
-                                                    "name": "sigv4",
-                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
-                                                }
-                                            ]
-                                        },
+                                        "url": "https://backup-search.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
                                         "headers": {}
                                     },
                                     "type": "endpoint"
diff -pruN 2.23.6-1/awscli/botocore/data/backupsearch/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/backupsearch/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/backupsearch/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/backupsearch/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -149,6 +149,7 @@
       "input":{"shape":"StartSearchJobInput"},
       "output":{"shape":"StartSearchJobOutput"},
       "errors":[
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
@@ -1291,8 +1292,7 @@
     },
     "StopSearchJobOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{"type":"string"},
     "StringCondition":{
@@ -1359,8 +1359,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ThrottlingException":{
       "type":"structure",
@@ -1447,8 +1446,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/batch/2016-08-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/batch/2016-08-10/paginators-1.json 2.31.35-1/awscli/botocore/data/batch/2016-08-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/batch/2016-08-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/batch/2016-08-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,30 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "schedulingPolicies"
+    },
+    "ListConsumableResources": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "consumableResources"
+    },
+    "ListJobsByConsumableResource": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "jobs"
+    },
+    "DescribeServiceEnvironments": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "serviceEnvironments"
+    },
+    "ListServiceJobs": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "jobSummaryList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/batch/2016-08-10/service-2.json 2.31.35-1/awscli/botocore/data/batch/2016-08-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/batch/2016-08-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/batch/2016-08-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -40,7 +40,21 @@
         {"shape":"ClientException"},
         {"shape":"ServerException"}
       ],
-      "documentation":"<p>Creates an Batch compute environment. You can create <code>MANAGED</code> or <code>UNMANAGED</code> compute environments. <code>MANAGED</code> compute environments can use Amazon EC2 or Fargate resources. <code>UNMANAGED</code> compute environments can only use EC2 resources.</p> <p>In a managed compute environment, Batch manages the capacity and instance types of the compute resources within the environment. This is based on the compute resource specification that you define or the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">launch template</a> that you specify when you create the compute environment. Either, you can choose to use EC2 On-Demand Instances and EC2 Spot Instances. Or, you can use Fargate and Fargate Spot capacity in your managed compute environment. You can optionally set a maximum price so that Spot Instances only launch when the Spot Instance price is less than a specified percentage of the On-Demand price.</p> <note> <p>Multi-node parallel jobs aren't supported on Spot Instances.</p> </note> <p>In an unmanaged compute environment, you can manage your own EC2 compute resources and have flexibility with how you configure your compute resources. For example, you can use custom AMIs. However, you must verify that each of your AMIs meet the Amazon ECS container instance AMI specification. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container_instance_AMIs.html\">container instance AMIs</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. After you created your unmanaged compute environment, you can use the <a>DescribeComputeEnvironments</a> operation to find the Amazon ECS cluster that's associated with it. Then, launch your container instances into that Amazon ECS cluster. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html\">Launching an Amazon ECS container instance</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <note> <p>To create a compute environment that uses EKS resources, the caller must have permissions to call <code>eks:DescribeCluster</code>.</p> </note> <note> <p>Batch doesn't automatically upgrade the AMIs in a compute environment after it's created. For example, it also doesn't update the AMIs in your compute environment when a newer version of the Amazon ECS optimized AMI is available. You're responsible for the management of the guest operating system. This includes any updates and security patches. You're also responsible for any additional application software or utilities that you install on the compute resources. There are two ways to use a new AMI for your Batch jobs. The original method is to complete these steps:</p> <ol> <li> <p>Create a new compute environment with the new AMI.</p> </li> <li> <p>Add the compute environment to an existing job queue.</p> </li> <li> <p>Remove the earlier compute environment from your job queue.</p> </li> <li> <p>Delete the earlier compute environment.</p> </li> </ol> <p>In April 2022, Batch added enhanced support for updating compute environments. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a>. To use the enhanced updating of compute environments to update AMIs, follow these rules:</p> <ul> <li> <p>Either don't set the service role (<code>serviceRole</code>) parameter or set it to the <b>AWSBatchServiceRole</b> service-linked role.</p> </li> <li> <p>Set the allocation strategy (<code>allocationStrategy</code>) parameter to <code>BEST_FIT_PROGRESSIVE</code>, <code>SPOT_CAPACITY_OPTIMIZED</code>, or <code>SPOT_PRICE_CAPACITY_OPTIMIZED</code>.</p> </li> <li> <p>Set the update to latest image version (<code>updateToLatestImageVersion</code>) parameter to <code>true</code>. The <code>updateToLatestImageVersion</code> parameter is used when you update a compute environment. This parameter is ignored when you create a compute environment.</p> </li> <li> <p>Don't specify an AMI ID in <code>imageId</code>, <code>imageIdOverride</code> (in <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_Ec2Configuration.html\"> <code>ec2Configuration</code> </a>), or in the launch template (<code>launchTemplate</code>). In that case, Batch selects the latest Amazon ECS optimized AMI that's supported by Batch at the time the infrastructure update is initiated. Alternatively, you can specify the AMI ID in the <code>imageId</code> or <code>imageIdOverride</code> parameters, or the launch template identified by the <code>LaunchTemplate</code> properties. Changing any of these properties starts an infrastructure update. If the AMI ID is specified in the launch template, it can't be replaced by specifying an AMI ID in either the <code>imageId</code> or <code>imageIdOverride</code> parameters. It can only be replaced by specifying a different launch template, or if the launch template version is set to <code>$Default</code> or <code>$Latest</code>, by setting either a new default version for the launch template (if <code>$Default</code>) or by adding a new version to the launch template (if <code>$Latest</code>).</p> </li> </ul> <p>If these rules are followed, any update that starts an infrastructure update causes the AMI ID to be re-selected. If the <code>version</code> setting in the launch template (<code>launchTemplate</code>) is set to <code>$Latest</code> or <code>$Default</code>, the latest or default version of the launch template is evaluated up at the time of the infrastructure update, even if the <code>launchTemplate</code> wasn't updated.</p> </note>"
+      "documentation":"<p>Creates an Batch compute environment. You can create <code>MANAGED</code> or <code>UNMANAGED</code> compute environments. <code>MANAGED</code> compute environments can use Amazon EC2 or Fargate resources. <code>UNMANAGED</code> compute environments can only use EC2 resources.</p> <p>In a managed compute environment, Batch manages the capacity and instance types of the compute resources within the environment. This is based on the compute resource specification that you define or the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">launch template</a> that you specify when you create the compute environment. Either, you can choose to use EC2 On-Demand Instances and EC2 Spot Instances. Or, you can use Fargate and Fargate Spot capacity in your managed compute environment. You can optionally set a maximum price so that Spot Instances only launch when the Spot Instance price is less than a specified percentage of the On-Demand price.</p> <p>In an unmanaged compute environment, you can manage your own EC2 compute resources and have flexibility with how you configure your compute resources. For example, you can use custom AMIs. However, you must verify that each of your AMIs meet the Amazon ECS container instance AMI specification. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container_instance_AMIs.html\">container instance AMIs</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. After you created your unmanaged compute environment, you can use the <a>DescribeComputeEnvironments</a> operation to find the Amazon ECS cluster that's associated with it. Then, launch your container instances into that Amazon ECS cluster. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_container_instance.html\">Launching an Amazon ECS container instance</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <note> <p>Batch doesn't automatically upgrade the AMIs in a compute environment after it's created. For more information on how to update a compute environment's AMI, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p> </note>"
+    },
+    "CreateConsumableResource":{
+      "name":"CreateConsumableResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/createconsumableresource"
+      },
+      "input":{"shape":"CreateConsumableResourceRequest"},
+      "output":{"shape":"CreateConsumableResourceResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Creates an Batch consumable resource.</p>"
     },
     "CreateJobQueue":{
       "name":"CreateJobQueue",
@@ -70,6 +84,20 @@
       ],
       "documentation":"<p>Creates an Batch scheduling policy.</p>"
     },
+    "CreateServiceEnvironment":{
+      "name":"CreateServiceEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/createserviceenvironment"
+      },
+      "input":{"shape":"CreateServiceEnvironmentRequest"},
+      "output":{"shape":"CreateServiceEnvironmentResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Creates a service environment for running service jobs. Service environments define capacity limits for specific service types such as SageMaker Training jobs.</p>"
+    },
     "DeleteComputeEnvironment":{
       "name":"DeleteComputeEnvironment",
       "http":{
@@ -84,6 +112,20 @@
       ],
       "documentation":"<p>Deletes an Batch compute environment.</p> <p>Before you can delete a compute environment, you must set its state to <code>DISABLED</code> with the <a>UpdateComputeEnvironment</a> API operation and disassociate it from any job queues with the <a>UpdateJobQueue</a> API operation. Compute environments that use Fargate resources must terminate all active jobs on that compute environment before deleting the compute environment. If this isn't done, the compute environment enters an invalid state.</p>"
     },
+    "DeleteConsumableResource":{
+      "name":"DeleteConsumableResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/deleteconsumableresource"
+      },
+      "input":{"shape":"DeleteConsumableResourceRequest"},
+      "output":{"shape":"DeleteConsumableResourceResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Deletes the specified consumable resource.</p>"
+    },
     "DeleteJobQueue":{
       "name":"DeleteJobQueue",
       "http":{
@@ -112,6 +154,20 @@
       ],
       "documentation":"<p>Deletes the specified scheduling policy.</p> <p>You can't delete a scheduling policy that's used in any job queues.</p>"
     },
+    "DeleteServiceEnvironment":{
+      "name":"DeleteServiceEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/deleteserviceenvironment"
+      },
+      "input":{"shape":"DeleteServiceEnvironmentRequest"},
+      "output":{"shape":"DeleteServiceEnvironmentResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Deletes a Service environment. Before you can delete a service environment, you must first set its state to <code>DISABLED</code> with the <code>UpdateServiceEnvironment</code> API operation and disassociate it from any job queues with the <code>UpdateJobQueue</code> API operation.</p>"
+    },
     "DeregisterJobDefinition":{
       "name":"DeregisterJobDefinition",
       "http":{
@@ -140,6 +196,20 @@
       ],
       "documentation":"<p>Describes one or more of your compute environments.</p> <p>If you're using an unmanaged compute environment, you can use the <code>DescribeComputeEnvironment</code> operation to determine the <code>ecsClusterArn</code> that you launch your Amazon ECS container instances into.</p>"
     },
+    "DescribeConsumableResource":{
+      "name":"DescribeConsumableResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/describeconsumableresource"
+      },
+      "input":{"shape":"DescribeConsumableResourceRequest"},
+      "output":{"shape":"DescribeConsumableResourceResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Returns a description of the specified consumable resource.</p>"
+    },
     "DescribeJobDefinitions":{
       "name":"DescribeJobDefinitions",
       "http":{
@@ -196,6 +266,34 @@
       ],
       "documentation":"<p>Describes one or more of your scheduling policies.</p>"
     },
+    "DescribeServiceEnvironments":{
+      "name":"DescribeServiceEnvironments",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/describeserviceenvironments"
+      },
+      "input":{"shape":"DescribeServiceEnvironmentsRequest"},
+      "output":{"shape":"DescribeServiceEnvironmentsResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Describes one or more of your service environments.</p>"
+    },
+    "DescribeServiceJob":{
+      "name":"DescribeServiceJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/describeservicejob"
+      },
+      "input":{"shape":"DescribeServiceJobRequest"},
+      "output":{"shape":"DescribeServiceJobResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>The details of a service job.</p>"
+    },
     "GetJobQueueSnapshot":{
       "name":"GetJobQueueSnapshot",
       "http":{
@@ -210,6 +308,20 @@
       ],
       "documentation":"<p>Provides a list of the first 100 <code>RUNNABLE</code> jobs associated to a single job queue.</p>"
     },
+    "ListConsumableResources":{
+      "name":"ListConsumableResources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/listconsumableresources"
+      },
+      "input":{"shape":"ListConsumableResourcesRequest"},
+      "output":{"shape":"ListConsumableResourcesResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Returns a list of Batch consumable resources.</p>"
+    },
     "ListJobs":{
       "name":"ListJobs",
       "http":{
@@ -224,6 +336,20 @@
       ],
       "documentation":"<p>Returns a list of Batch jobs.</p> <p>You must specify only one of the following items:</p> <ul> <li> <p>A job queue ID to return a list of jobs in that job queue</p> </li> <li> <p>A multi-node parallel job ID to return a list of nodes for that job</p> </li> <li> <p>An array job ID to return a list of the children for that job</p> </li> </ul> <p>You can filter the results by job status with the <code>jobStatus</code> parameter. If you don't specify a status, only <code>RUNNING</code> jobs are returned.</p>"
     },
+    "ListJobsByConsumableResource":{
+      "name":"ListJobsByConsumableResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/listjobsbyconsumableresource"
+      },
+      "input":{"shape":"ListJobsByConsumableResourceRequest"},
+      "output":{"shape":"ListJobsByConsumableResourceResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Returns a list of Batch jobs that require a specific consumable resource.</p>"
+    },
     "ListSchedulingPolicies":{
       "name":"ListSchedulingPolicies",
       "http":{
@@ -238,6 +364,20 @@
       ],
       "documentation":"<p>Returns a list of Batch scheduling policies.</p>"
     },
+    "ListServiceJobs":{
+      "name":"ListServiceJobs",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/listservicejobs"
+      },
+      "input":{"shape":"ListServiceJobsRequest"},
+      "output":{"shape":"ListServiceJobsResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Returns a list of service jobs for a specified job queue.</p>"
+    },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
       "http":{
@@ -278,7 +418,21 @@
         {"shape":"ClientException"},
         {"shape":"ServerException"}
       ],
-      "documentation":"<p>Submits an Batch job from a job definition. Parameters that are specified during <a>SubmitJob</a> override parameters defined in the job definition. vCPU and memory requirements that are specified in the <code>resourceRequirements</code> objects in the job definition are the exception. They can't be overridden this way using the <code>memory</code> and <code>vcpus</code> parameters. Rather, you must specify updates to job definition parameters in a <code>resourceRequirements</code> object that's included in the <code>containerOverrides</code> parameter.</p> <note> <p>Job queues with a scheduling policy are limited to 500 active fair share identifiers at a time. </p> </note> <important> <p>Jobs that run on Fargate resources can't be guaranteed to run for more than 14 days. This is because, after 14 days, Fargate resources might become unavailable and job might be terminated.</p> </important>"
+      "documentation":"<p>Submits an Batch job from a job definition. Parameters that are specified during <a>SubmitJob</a> override parameters defined in the job definition. vCPU and memory requirements that are specified in the <code>resourceRequirements</code> objects in the job definition are the exception. They can't be overridden this way using the <code>memory</code> and <code>vcpus</code> parameters. Rather, you must specify updates to job definition parameters in a <code>resourceRequirements</code> object that's included in the <code>containerOverrides</code> parameter.</p> <note> <p>Job queues with a scheduling policy are limited to 500 active share identifiers at a time. </p> </note> <important> <p>Jobs that run on Fargate resources can't be guaranteed to run for more than 14 days. This is because, after 14 days, Fargate resources might become unavailable and job might be terminated.</p> </important>"
+    },
+    "SubmitServiceJob":{
+      "name":"SubmitServiceJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/submitservicejob"
+      },
+      "input":{"shape":"SubmitServiceJobRequest"},
+      "output":{"shape":"SubmitServiceJobResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Submits a service job to a specified job queue to run on SageMaker AI. A service job is a unit of work that you submit to Batch for execution on SageMaker AI.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -308,6 +462,20 @@
       ],
       "documentation":"<p>Terminates a job in a job queue. Jobs that are in the <code>STARTING</code> or <code>RUNNING</code> state are terminated, which causes them to transition to <code>FAILED</code>. Jobs that have not progressed to the <code>STARTING</code> state are cancelled.</p>"
     },
+    "TerminateServiceJob":{
+      "name":"TerminateServiceJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/terminateservicejob"
+      },
+      "input":{"shape":"TerminateServiceJobRequest"},
+      "output":{"shape":"TerminateServiceJobResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Terminates a service job in a job queue. </p>"
+    },
     "UntagResource":{
       "name":"UntagResource",
       "http":{
@@ -336,6 +504,20 @@
       ],
       "documentation":"<p>Updates an Batch compute environment.</p>"
     },
+    "UpdateConsumableResource":{
+      "name":"UpdateConsumableResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/updateconsumableresource"
+      },
+      "input":{"shape":"UpdateConsumableResourceRequest"},
+      "output":{"shape":"UpdateConsumableResourceResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Updates a consumable resource.</p>"
+    },
     "UpdateJobQueue":{
       "name":"UpdateJobQueue",
       "http":{
@@ -363,6 +545,20 @@
         {"shape":"ServerException"}
       ],
       "documentation":"<p>Updates a scheduling policy.</p>"
+    },
+    "UpdateServiceEnvironment":{
+      "name":"UpdateServiceEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/updateserviceenvironment"
+      },
+      "input":{"shape":"UpdateServiceEnvironmentRequest"},
+      "output":{"shape":"UpdateServiceEnvironmentResponse"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServerException"}
+      ],
+      "documentation":"<p>Updates a service environment. You can update the state of a service environment from <code>ENABLED</code> to <code>DISABLED</code> to prevent new service jobs from being placed in the service environment.</p>"
     }
   },
   "shapes":{
@@ -603,8 +799,25 @@
     },
     "CancelJobResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "CapacityLimit":{
+      "type":"structure",
       "members":{
-      }
+        "maxCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum capacity available for the service environment. This value represents the maximum amount of resources that can be allocated to service jobs.</p> <p>For example, <code>maxCapacity=50</code>, <code>capacityUnit=NUM_INSTANCES</code>. This indicates that the maximum number of instances that can be run on this service environment is 50. You could then run 5 SageMaker Training jobs that each use 10 instances. However, if you submit another job that requires 10 instances, it will wait in the queue.</p>"
+        },
+        "capacityUnit":{
+          "shape":"String",
+          "documentation":"<p>The unit of measure for the capacity limit. This defines how the maxCapacity value should be interpreted. For <code>SAGEMAKER_TRAINING</code> jobs, use <code>NUM_INSTANCES</code>.</p>"
+        }
+      },
+      "documentation":"<p>Defines the capacity limit for a service environment. This structure specifies the maximum amount of resources that can be used by service jobs in the environment.</p>"
+    },
+    "CapacityLimits":{
+      "type":"list",
+      "member":{"shape":"CapacityLimit"}
     },
     "ClientException":{
       "type":"structure",
@@ -615,6 +828,11 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "ClientRequestToken":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
     "ComputeEnvironmentDetail":{
       "type":"structure",
       "required":[
@@ -725,7 +943,7 @@
       "members":{
         "type":{
           "shape":"CRType",
-          "documentation":"<p>The type of compute environment: <code>EC2</code>, <code>SPOT</code>, <code>FARGATE</code>, or <code>FARGATE_SPOT</code>. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html\">Compute environments</a> in the <i>Batch User Guide</i>.</p> <p> If you choose <code>SPOT</code>, you must also specify an Amazon EC2 Spot Fleet role with the <code>spotIamFleetRole</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html\">Amazon EC2 spot fleet role</a> in the <i>Batch User Guide</i>.</p>"
+          "documentation":"<p>The type of compute environment: <code>EC2</code>, <code>SPOT</code>, <code>FARGATE</code>, or <code>FARGATE_SPOT</code>. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html\">Compute environments</a> in the <i>Batch User Guide</i>.</p> <p> If you choose <code>SPOT</code>, you must also specify an Amazon EC2 Spot Fleet role with the <code>spotIamFleetRole</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/spot_fleet_IAM_role.html\">Amazon EC2 spot fleet role</a> in the <i>Batch User Guide</i>.</p> <note> <p>Multi-node parallel jobs aren't supported on Spot Instances.</p> </note>"
         },
         "allocationStrategy":{
           "shape":"CRAllocationStrategy",
@@ -745,7 +963,7 @@
         },
         "instanceTypes":{
           "shape":"StringList",
-          "documentation":"<p>The instances types that can be launched. You can specify instance families to launch any instance type within those families (for example, <code>c5</code> or <code>p3</code>), or you can specify specific sizes within a family (such as <code>c5.8xlarge</code>). You can also choose <code>optimal</code> to select instance types (from the C4, M4, and R4 instance families) that match the demand of your job queues.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note> <note> <p>When you create a compute environment, the instance types that you select for the compute environment must share the same architecture. For example, you can't mix x86 and ARM instances in the same compute environment.</p> </note> <note> <p>Currently, <code>optimal</code> uses instance types from the C4, M4, and R4 instance families. In Regions that don't have instance types from those instance families, instance types from the C5, M5, and R5 instance families are used.</p> </note>"
+          "documentation":"<p>The instances types that can be launched. You can specify instance families to launch any instance type within those families (for example, <code>c5</code> or <code>p3</code>), or you can specify specific sizes within a family (such as <code>c5.8xlarge</code>). </p> <p>Batch can select the instance type for you if you choose one of the following:</p> <ul> <li> <p> <code>optimal</code> to select instance types (from the <code>c4</code>, <code>m4</code>, <code>r4</code>, <code>c5</code>, <code>m5</code>, and <code>r5</code> instance families) that match the demand of your job queues. </p> </li> <li> <p> <code>default_x86_64</code> to choose x86 based instance types (from the <code>m6i</code>, <code>c6i</code>, <code>r6i</code>, and <code>c7i</code> instance families) that matches the resource demands of the job queue.</p> </li> <li> <p> <code>default_arm64</code> to choose ARM based instance types (from the <code>m6g</code>, <code>c6g</code>, <code>r6g</code>, and <code>c7g</code> instance families) that matches the resource demands of the job queue.</p> </li> </ul> <note> <p>Starting on 11/01/2025 the behavior of <code>optimal</code> is going to be changed to match <code>default_x86_64</code>. During the change your instance families could be updated to a newer generation. You do not need to perform any actions for the upgrade to happen. For more information about change, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/optimal-default-instance-troubleshooting.html\">Optimal instance type configuration to receive automatic instance family updates</a>.</p> </note> <note> <p>Instance family availability varies by Amazon Web Services Region. For example, some Amazon Web Services Regions may not have any fourth generation instance families but have fifth and sixth generation instance families.</p> <p>When using <code>default_x86_64</code> or <code>default_arm64</code> instance bundles, Batch selects instance families based on a balance of cost-effectiveness and performance. While newer generation instances often provide better price-performance, Batch may choose an earlier generation instance family if it provides the optimal combination of availability, cost, and performance for your workload. For example, in an Amazon Web Services Region where both c6i and c7i instances are available, Batch might select c6i instances if they offer better cost-effectiveness for your specific job requirements. For more information on Batch instance types and Amazon Web Services Region availability, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/instance-type-compute-table.html\">Instance type compute table</a> in the <i>Batch User Guide</i>.</p> <p>Batch periodically updates your instances in default bundles to newer, more cost-effective options. Updates happen automatically without requiring any action from you. Your workloads continue running during updates with no interruption </p> </note> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note> <note> <p>When you create a compute environment, the instance types that you select for the compute environment must share the same architecture. For example, you can't mix x86 and ARM instances in the same compute environment.</p> </note>"
         },
         "imageId":{
           "shape":"String",
@@ -771,7 +989,7 @@
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>Key-value pair tags to be applied to Amazon EC2 resources that are launched in the compute environment. For Batch, these take the form of <code>\"String1\": \"String2\"</code>, where <code>String1</code> is the tag key and <code>String2</code> is the tag value-for example, <code>{ \"Name\": \"Batch Instance - C4OnDemand\" }</code>. This is helpful for recognizing your Batch instances in the Amazon EC2 console. Updating these tags requires an infrastructure update to the compute environment. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>. These tags aren't seen when using the Batch <code>ListTagsForResource</code> API operation.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note>"
+          "documentation":"<p>Key-value pair tags to be applied to Amazon EC2 resources that are launched in the compute environment. For Batch, these take the form of <code>\"String1\": \"String2\"</code>, where <code>String1</code> is the tag key and <code>String2</code> is the tag value (for example, <code>{ \"Name\": \"Batch Instance - C4OnDemand\" }</code>). This is helpful for recognizing your Batch instances in the Amazon EC2 console. Updating these tags requires an infrastructure update to the compute environment. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>. These tags aren't seen when using the Batch <code>ListTagsForResource</code> API operation.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note>"
         },
         "placementGroup":{
           "shape":"String",
@@ -825,7 +1043,7 @@
         },
         "instanceTypes":{
           "shape":"StringList",
-          "documentation":"<p>The instances types that can be launched. You can specify instance families to launch any instance type within those families (for example, <code>c5</code> or <code>p3</code>), or you can specify specific sizes within a family (such as <code>c5.8xlarge</code>). You can also choose <code>optimal</code> to select instance types (from the C4, M4, and R4 instance families) that match the demand of your job queues.</p> <p>When updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note> <note> <p>When you create a compute environment, the instance types that you select for the compute environment must share the same architecture. For example, you can't mix x86 and ARM instances in the same compute environment.</p> </note> <note> <p>Currently, <code>optimal</code> uses instance types from the C4, M4, and R4 instance families. In Regions that don't have instance types from those instance families, instance types from the C5, M5, and R5 instance families are used.</p> </note>"
+          "documentation":"<p>The instances types that can be launched. You can specify instance families to launch any instance type within those families (for example, <code>c5</code> or <code>p3</code>), or you can specify specific sizes within a family (such as <code>c5.8xlarge</code>). </p> <p>Batch can select the instance type for you if you choose one of the following:</p> <ul> <li> <p> <code>optimal</code> to select instance types (from the <code>c4</code>, <code>m4</code>, <code>r4</code>, <code>c5</code>, <code>m5</code>, and <code>r5</code> instance families) that match the demand of your job queues. </p> </li> <li> <p> <code>default_x86_64</code> to choose x86 based instance types (from the <code>m6i</code>, <code>c6i</code>, <code>r6i</code>, and <code>c7i</code> instance families) that matches the resource demands of the job queue.</p> </li> <li> <p> <code>default_arm64</code> to choose x86 based instance types (from the <code>m6g</code>, <code>c6g</code>, <code>r6g</code>, and <code>c7g</code> instance families) that matches the resource demands of the job queue.</p> </li> </ul> <note> <p>Starting on 11/01/2025 the behavior of <code>optimal</code> is going to be changed to match <code>default_x86_64</code>. During the change your instance families could be updated to a newer generation. You do not need to perform any actions for the upgrade to happen. For more information about change, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/optimal-default-instance-troubleshooting.html\">Optimal instance type configuration to receive automatic instance family updates</a>.</p> </note> <note> <p>Instance family availability varies by Amazon Web Services Region. For example, some Amazon Web Services Regions may not have any fourth generation instance families but have fifth and sixth generation instance families.</p> <p>When using <code>default_x86_64</code> or <code>default_arm64</code> instance bundles, Batch selects instance families based on a balance of cost-effectiveness and performance. While newer generation instances often provide better price-performance, Batch may choose an earlier generation instance family if it provides the optimal combination of availability, cost, and performance for your workload. For example, in an Amazon Web Services Region where both c6i and c7i instances are available, Batch might select c6i instances if they offer better cost-effectiveness for your specific job requirements. For more information on Batch instance types and Amazon Web Services Region availability, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/instance-type-compute-table.html\">Instance type compute table</a> in the <i>Batch User Guide</i>.</p> <p>Batch periodically updates your instances in default bundles to newer, more cost-effective options. Updates happen automatically without requiring any action from you. Your workloads continue running during updates with no interruption </p> </note> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note> <note> <p>When you create a compute environment, the instance types that you select for the compute environment must share the same architecture. For example, you can't mix x86 and ARM instances in the same compute environment.</p> </note>"
         },
         "ec2KeyPair":{
           "shape":"String",
@@ -837,7 +1055,7 @@
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>Key-value pair tags to be applied to Amazon EC2 resources that are launched in the compute environment. For Batch, these take the form of <code>\"String1\": \"String2\"</code>, where <code>String1</code> is the tag key and <code>String2</code> is the tag value-for example, <code>{ \"Name\": \"Batch Instance - C4OnDemand\" }</code>. This is helpful for recognizing your Batch instances in the Amazon EC2 console. These tags aren't seen when using the Batch <code>ListTagsForResource</code> API operation.</p> <p>When updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note>"
+          "documentation":"<p>Key-value pair tags to be applied to Amazon EC2 resources that are launched in the compute environment. For Batch, these take the form of <code>\"String1\": \"String2\"</code>, where <code>String1</code> is the tag key and <code>String2</code> is the tag value (for example, <code>{ \"Name\": \"Batch Instance - C4OnDemand\" }</code>). This is helpful for recognizing your Batch instances in the Amazon EC2 console. These tags aren't seen when using the Batch <code>ListTagsForResource</code> API operation.</p> <p>When updating a compute environment, changing this setting requires an infrastructure update of the compute environment. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it.</p> </note>"
         },
         "placementGroup":{
           "shape":"String",
@@ -870,6 +1088,68 @@
       },
       "documentation":"<p>An object that represents the attributes of a compute environment that can be updated. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p>"
     },
+    "ConsumableResourceList":{
+      "type":"list",
+      "member":{"shape":"ConsumableResourceRequirement"}
+    },
+    "ConsumableResourceProperties":{
+      "type":"structure",
+      "members":{
+        "consumableResourceList":{
+          "shape":"ConsumableResourceList",
+          "documentation":"<p>The list of consumable resources required by a job.</p>"
+        }
+      },
+      "documentation":"<p>Contains a list of consumable resources required by a job.</p>"
+    },
+    "ConsumableResourceRequirement":{
+      "type":"structure",
+      "members":{
+        "consumableResource":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the consumable resource.</p>"
+        },
+        "quantity":{
+          "shape":"Long",
+          "documentation":"<p>The quantity of the consumable resource that is needed.</p>"
+        }
+      },
+      "documentation":"<p>Information about a consumable resource required to run a job.</p>"
+    },
+    "ConsumableResourceSummary":{
+      "type":"structure",
+      "required":[
+        "consumableResourceArn",
+        "consumableResourceName"
+      ],
+      "members":{
+        "consumableResourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the consumable resource.</p>"
+        },
+        "consumableResourceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the consumable resource.</p>"
+        },
+        "totalQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The total amount of the consumable resource that is available.</p>"
+        },
+        "inUseQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The amount of the consumable resource that is currently in use.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>Indicates whether the resource is available to be re-used after a job completes. Can be one of: </p> <ul> <li> <p> <code>REPLENISHABLE</code> </p> </li> <li> <p> <code>NON_REPLENISHABLE</code> </p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Current information about a consumable resource.</p>"
+    },
+    "ConsumableResourceSummaryList":{
+      "type":"list",
+      "member":{"shape":"ConsumableResourceSummary"}
+    },
     "ContainerDetail":{
       "type":"structure",
       "members":{
@@ -988,6 +1268,10 @@
         "repositoryCredentials":{
           "shape":"RepositoryCredentials",
           "documentation":"<p>The private repository authentication credentials to use.</p>"
+        },
+        "enableExecuteCommand":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether execute command functionality is turned on for this task. If <code>true</code>, execute command functionality is turned on all the containers in the task.</p>"
         }
       },
       "documentation":"<p>An object that represents the details of a container that's part of a job.</p>"
@@ -1113,6 +1397,10 @@
           "shape":"FargatePlatformConfiguration",
           "documentation":"<p>The platform configuration for jobs that are running on Fargate resources. Jobs that are running on Amazon EC2 resources must not specify this parameter.</p>"
         },
+        "enableExecuteCommand":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether execute command functionality is turned on for this task. If <code>true</code>, execute command functionality is turned on all the containers in the task.</p>"
+        },
         "ephemeralStorage":{
           "shape":"EphemeralStorage",
           "documentation":"<p>The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on Fargate.</p>"
@@ -1163,7 +1451,7 @@
         },
         "unmanagedvCpus":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of vCPUs for an unmanaged compute environment. This parameter is only used for fair share scheduling to reserve vCPU capacity for new share identifiers. If this parameter isn't provided for a fair share job queue, no vCPU capacity is reserved.</p> <note> <p>This parameter is only supported when the <code>type</code> parameter is set to <code>UNMANAGED</code>.</p> </note>"
+          "documentation":"<p>The maximum number of vCPUs for an unmanaged compute environment. This parameter is only used for fair-share scheduling to reserve vCPU capacity for new share identifiers. If this parameter isn't provided for a fair-share job queue, no vCPU capacity is reserved.</p> <note> <p>This parameter is only supported when the <code>type</code> parameter is set to <code>UNMANAGED</code>.</p> </note>"
         },
         "computeResources":{
           "shape":"ComputeResource",
@@ -1179,7 +1467,7 @@
         },
         "eksConfiguration":{
           "shape":"EksConfiguration",
-          "documentation":"<p>The details for the Amazon EKS cluster that supports the compute environment.</p>"
+          "documentation":"<p>The details for the Amazon EKS cluster that supports the compute environment.</p> <note> <p>To create a compute environment that uses EKS resources, the caller must have permissions to call <code>eks:DescribeCluster</code>.</p> </note>"
         },
         "context":{
           "shape":"String",
@@ -1201,12 +1489,50 @@
         }
       }
     },
+    "CreateConsumableResourceRequest":{
+      "type":"structure",
+      "required":["consumableResourceName"],
+      "members":{
+        "consumableResourceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the consumable resource. Must be unique.</p>"
+        },
+        "totalQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The total amount of the consumable resource that is available. Must be non-negative.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>Indicates whether the resource is available to be re-used after a job completes. Can be one of: </p> <ul> <li> <p> <code>REPLENISHABLE</code> (default)</p> </li> <li> <p> <code>NON_REPLENISHABLE</code> </p> </li> </ul>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags that you apply to the consumable resource to help you categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        }
+      }
+    },
+    "CreateConsumableResourceResponse":{
+      "type":"structure",
+      "required":[
+        "consumableResourceName",
+        "consumableResourceArn"
+      ],
+      "members":{
+        "consumableResourceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the consumable resource.</p>"
+        },
+        "consumableResourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the consumable resource.</p>"
+        }
+      }
+    },
     "CreateJobQueueRequest":{
       "type":"structure",
       "required":[
         "jobQueueName",
-        "priority",
-        "computeEnvironmentOrder"
+        "priority"
       ],
       "members":{
         "jobQueueName":{
@@ -1219,7 +1545,7 @@
         },
         "schedulingPolicyArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fair share scheduling policy. Job queues that don't have a scheduling policy are scheduled in a first-in, first-out (FIFO) model. After a job queue has a scheduling policy, it can be replaced but can't be removed.</p> <p>The format is <code>aws:<i>Partition</i>:batch:<i>Region</i>:<i>Account</i>:scheduling-policy/<i>Name</i> </code>.</p> <p>An example is <code>aws:aws:batch:us-west-2:123456789012:scheduling-policy/MySchedulingPolicy</code>.</p> <p>A job queue without a scheduling policy is scheduled as a FIFO job queue and can't have a scheduling policy added. Jobs queues with a scheduling policy can have a maximum of 500 active fair share identifiers. When the limit has been reached, submissions of any jobs that add a new fair share identifier fail.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the fair-share scheduling policy. Job queues that don't have a fair-share scheduling policy are scheduled in a first-in, first-out (FIFO) model. After a job queue has a fair-share scheduling policy, it can be replaced but can't be removed.</p> <p>The format is <code>aws:<i>Partition</i>:batch:<i>Region</i>:<i>Account</i>:scheduling-policy/<i>Name</i> </code>.</p> <p>An example is <code>aws:aws:batch:us-west-2:123456789012:scheduling-policy/MySchedulingPolicy</code>.</p> <p>A job queue without a fair-share scheduling policy is scheduled as a FIFO job queue and can't have a fair-share scheduling policy added. Jobs queues with a fair-share scheduling policy can have a maximum of 500 active share identifiers. When the limit has been reached, submissions of any jobs that add a new share identifier fail.</p>"
         },
         "priority":{
           "shape":"Integer",
@@ -1229,6 +1555,14 @@
           "shape":"ComputeEnvironmentOrders",
           "documentation":"<p>The set of compute environments mapped to a job queue and their order relative to each other. The job scheduler uses this parameter to determine which compute environment runs a specific job. Compute environments must be in the <code>VALID</code> state before you can associate them with a job queue. You can associate up to three compute environments with a job queue. All of the compute environments must be either EC2 (<code>EC2</code> or <code>SPOT</code>) or Fargate (<code>FARGATE</code> or <code>FARGATE_SPOT</code>); EC2 and Fargate compute environments can't be mixed.</p> <note> <p>All compute environments that are associated with a job queue must share the same architecture. Batch doesn't support mixing compute environment architecture types in a single job queue.</p> </note>"
         },
+        "serviceEnvironmentOrder":{
+          "shape":"ServiceEnvironmentOrders",
+          "documentation":"<p>A list of service environments that this job queue can use to allocate jobs. All serviceEnvironments must have the same type. A job queue can't have both a serviceEnvironmentOrder and a computeEnvironmentOrder field.</p>"
+        },
+        "jobQueueType":{
+          "shape":"JobQueueType",
+          "documentation":"<p>The type of job queue. For service jobs that run on SageMaker Training, this value is <code>SAGEMAKER_TRAINING</code>. For regular container jobs, this value is <code>EKS</code>, <code>ECS</code>, or <code>ECS_FARGATE</code> depending on the compute environment.</p>"
+        },
         "tags":{
           "shape":"TagrisTagsMap",
           "documentation":"<p>The tags that you apply to the job queue to help you categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a> in <i>Batch User Guide</i>.</p>"
@@ -1263,11 +1597,11 @@
       "members":{
         "name":{
           "shape":"String",
-          "documentation":"<p>The name of the scheduling policy. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).</p>"
+          "documentation":"<p>The name of the fair-share scheduling policy. It can be up to 128 letters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).</p>"
         },
         "fairsharePolicy":{
           "shape":"FairsharePolicy",
-          "documentation":"<p>The fair share policy of the scheduling policy.</p>"
+          "documentation":"<p>The fair-share scheduling policy details.</p>"
         },
         "tags":{
           "shape":"TagrisTagsMap",
@@ -1293,6 +1627,53 @@
         }
       }
     },
+    "CreateServiceEnvironmentRequest":{
+      "type":"structure",
+      "required":[
+        "serviceEnvironmentName",
+        "serviceEnvironmentType",
+        "capacityLimits"
+      ],
+      "members":{
+        "serviceEnvironmentName":{
+          "shape":"String",
+          "documentation":"<p>The name for the service environment. It can be up to 128 characters long and can contain letters, numbers, hyphens (-), and underscores (_).</p>"
+        },
+        "serviceEnvironmentType":{
+          "shape":"ServiceEnvironmentType",
+          "documentation":"<p>The type of service environment. For SageMaker Training jobs, specify <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "state":{
+          "shape":"ServiceEnvironmentState",
+          "documentation":"<p>The state of the service environment. Valid values are <code>ENABLED</code> and <code>DISABLED</code>. The default value is <code>ENABLED</code>.</p>"
+        },
+        "capacityLimits":{
+          "shape":"CapacityLimits",
+          "documentation":"<p>The capacity limits for the service environment. The number of instances a job consumes is the total number of instances requested in the submit training job request resource configuration.</p>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags that you apply to the service environment to help you categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        }
+      }
+    },
+    "CreateServiceEnvironmentResponse":{
+      "type":"structure",
+      "required":[
+        "serviceEnvironmentName",
+        "serviceEnvironmentArn"
+      ],
+      "members":{
+        "serviceEnvironmentName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service environment.</p>"
+        },
+        "serviceEnvironmentArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service environment.</p>"
+        }
+      }
+    },
     "DeleteComputeEnvironmentRequest":{
       "type":"structure",
       "required":["computeEnvironment"],
@@ -1306,9 +1687,22 @@
     },
     "DeleteComputeEnvironmentResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteConsumableResourceRequest":{
+      "type":"structure",
+      "required":["consumableResource"],
       "members":{
+        "consumableResource":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the consumable resource that will be deleted.</p>"
+        }
       }
     },
+    "DeleteConsumableResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteJobQueueRequest":{
       "type":"structure",
       "required":["jobQueue"],
@@ -1322,8 +1716,7 @@
     },
     "DeleteJobQueueResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSchedulingPolicyRequest":{
       "type":"structure",
@@ -1338,9 +1731,22 @@
     },
     "DeleteSchedulingPolicyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteServiceEnvironmentRequest":{
+      "type":"structure",
+      "required":["serviceEnvironment"],
       "members":{
+        "serviceEnvironment":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the service environment to delete.</p>"
+        }
       }
     },
+    "DeleteServiceEnvironmentResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeregisterJobDefinitionRequest":{
       "type":"structure",
       "required":["jobDefinition"],
@@ -1353,8 +1759,7 @@
     },
     "DeregisterJobDefinitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeComputeEnvironmentsRequest":{
       "type":"structure",
@@ -1387,6 +1792,57 @@
         }
       }
     },
+    "DescribeConsumableResourceRequest":{
+      "type":"structure",
+      "required":["consumableResource"],
+      "members":{
+        "consumableResource":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the consumable resource whose description will be returned.</p>"
+        }
+      }
+    },
+    "DescribeConsumableResourceResponse":{
+      "type":"structure",
+      "required":[
+        "consumableResourceName",
+        "consumableResourceArn"
+      ],
+      "members":{
+        "consumableResourceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the consumable resource.</p>"
+        },
+        "consumableResourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the consumable resource.</p>"
+        },
+        "totalQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The total amount of the consumable resource that is available.</p>"
+        },
+        "inUseQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The amount of the consumable resource that is currently in use.</p>"
+        },
+        "availableQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The amount of the consumable resource that is currently available to use.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>Indicates whether the resource is available to be re-used after a job completes. Can be one of: </p> <ul> <li> <p> <code>REPLENISHABLE</code> </p> </li> <li> <p> <code>NON_REPLENISHABLE</code> </p> </li> </ul>"
+        },
+        "createdAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the consumable resource was created.</p>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags that you apply to the consumable resource to help you categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        }
+      }
+    },
     "DescribeJobDefinitionsRequest":{
       "type":"structure",
       "members":{
@@ -1497,6 +1953,135 @@
         }
       }
     },
+    "DescribeServiceEnvironmentsRequest":{
+      "type":"structure",
+      "members":{
+        "serviceEnvironments":{
+          "shape":"StringList",
+          "documentation":"<p>An array of service environment names or ARN entries.</p>"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results returned by <code>DescribeServiceEnvironments</code> in paginated output. When this parameter is used, <code>DescribeServiceEnvironments</code> only returns <code>maxResults</code> results in a single page and a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>DescribeServiceEnvironments</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter isn't used, then <code>DescribeServiceEnvironments</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value returned from a previous paginated <code>DescribeServiceEnvironments</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value. This value is <code>null</code> when there are no more results to return.</p> <note> <p>Treat this token as an opaque identifier that's only used to retrieve the next items in a list and not for other programmatic purposes.</p> </note>"
+        }
+      }
+    },
+    "DescribeServiceEnvironmentsResponse":{
+      "type":"structure",
+      "members":{
+        "serviceEnvironments":{
+          "shape":"ServiceEnvironmentDetailList",
+          "documentation":"<p>The list of service environments that match the request.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value to include in a future <code>DescribeServiceEnvironments</code> request. When the results of a <code>DescribeServiceEnvironments</code> request exceed <code>maxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
+        }
+      }
+    },
+    "DescribeServiceJobRequest":{
+      "type":"structure",
+      "required":["jobId"],
+      "members":{
+        "jobId":{
+          "shape":"String",
+          "documentation":"<p>The job ID for the service job to describe.</p>"
+        }
+      }
+    },
+    "DescribeServiceJobResponse":{
+      "type":"structure",
+      "required":[
+        "jobId",
+        "jobName",
+        "jobQueue",
+        "serviceJobType",
+        "startedAt",
+        "status"
+      ],
+      "members":{
+        "attempts":{
+          "shape":"ServiceJobAttemptDetails",
+          "documentation":"<p>A list of job attempts associated with the service job.</p>"
+        },
+        "createdAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job was created.</p>"
+        },
+        "isTerminated":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the service job has been terminated.</p>"
+        },
+        "jobArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service job.</p>"
+        },
+        "jobId":{
+          "shape":"String",
+          "documentation":"<p>The job ID for the service job.</p>"
+        },
+        "jobName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service job.</p>"
+        },
+        "jobQueue":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the job queue that the service job is associated with.</p>"
+        },
+        "latestAttempt":{
+          "shape":"LatestServiceJobAttempt",
+          "documentation":"<p>The latest attempt associated with the service job.</p>"
+        },
+        "retryStrategy":{
+          "shape":"ServiceJobRetryStrategy",
+          "documentation":"<p>The retry strategy to use for failed service jobs that are submitted with this service job.</p>"
+        },
+        "schedulingPriority":{
+          "shape":"Integer",
+          "documentation":"<p>The scheduling priority of the service job. </p>"
+        },
+        "serviceRequestPayload":{
+          "shape":"String",
+          "documentation":"<p>The request, in JSON, for the service that the <code>SubmitServiceJob</code> operation is queueing. </p>"
+        },
+        "serviceJobType":{
+          "shape":"ServiceJobType",
+          "documentation":"<p>The type of service job. For SageMaker Training jobs, this value is <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "shareIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The share identifier for the service job. This is used for fair-share scheduling.</p>"
+        },
+        "startedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job was started.</p>"
+        },
+        "status":{
+          "shape":"ServiceJobStatus",
+          "documentation":"<p>The current status of the service job. </p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>A short, human-readable string to provide more details for the current status of the service job.</p>"
+        },
+        "stoppedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job stopped running.</p>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags that are associated with the service job. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        },
+        "timeoutConfig":{
+          "shape":"ServiceJobTimeout",
+          "documentation":"<p>The timeout configuration for the service job.</p>"
+        }
+      }
+    },
     "Device":{
       "type":"structure",
       "required":["hostPath"],
@@ -1593,7 +2178,7 @@
       "members":{
         "imageType":{
           "shape":"ImageType",
-          "documentation":"<p>The image type to match with the instance type to select an AMI. The supported values are different for <code>ECS</code> and <code>EKS</code> resources.</p> <dl> <dt>ECS</dt> <dd> <p>If the <code>imageIdOverride</code> parameter isn't specified, then a recent <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami\">Amazon ECS-optimized Amazon Linux 2 AMI</a> (<code>ECS_AL2</code>) is used. If a new image type is specified in an update, but neither an <code>imageId</code> nor a <code>imageIdOverride</code> parameter is specified, then the latest Amazon ECS optimized AMI for that image type that's supported by Batch is used.</p> <dl> <dt>ECS_AL2</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami\">Amazon Linux 2</a>: Default for all non-GPU instance families.</p> </dd> <dt>ECS_AL2_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#gpuami\">Amazon Linux 2 (GPU)</a>: Default for all GPU instance families (for example <code>P4</code> and <code>G4</code>) and can be used for all non Amazon Web Services Graviton-based instance types.</p> </dd> <dt>ECS_AL2023</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html\">Amazon Linux 2023</a>: Batch supports Amazon Linux 2023.</p> <note> <p>Amazon Linux 2023 does not support <code>A1</code> instances.</p> </note> </dd> <dt>ECS_AL1</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#alami\">Amazon Linux</a>. Amazon Linux has reached the end-of-life of standard support. For more information, see <a href=\"http://aws.amazon.com/amazon-linux-ami/\">Amazon Linux AMI</a>.</p> </dd> </dl> </dd> <dt>EKS</dt> <dd> <p>If the <code>imageIdOverride</code> parameter isn't specified, then a recent <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon EKS-optimized Amazon Linux AMI</a> (<code>EKS_AL2</code>) is used. If a new image type is specified in an update, but neither an <code>imageId</code> nor a <code>imageIdOverride</code> parameter is specified, then the latest Amazon EKS optimized AMI for that image type that Batch supports is used.</p> <dl> <dt>EKS_AL2</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2</a>: Default for all non-GPU instance families.</p> </dd> <dt>EKS_AL2_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2 (accelerated)</a>: Default for all GPU instance families (for example, <code>P4</code> and <code>G4</code>) and can be used for all non Amazon Web Services Graviton-based instance types.</p> </dd> </dl> </dd> </dl>"
+          "documentation":"<p>The image type to match with the instance type to select an AMI. The supported values are different for <code>ECS</code> and <code>EKS</code> resources.</p> <dl> <dt>ECS</dt> <dd> <p>If the <code>imageIdOverride</code> parameter isn't specified, then a recent <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami\">Amazon ECS-optimized Amazon Linux 2 AMI</a> (<code>ECS_AL2</code>) is used. If a new image type is specified in an update, but neither an <code>imageId</code> nor a <code>imageIdOverride</code> parameter is specified, then the latest Amazon ECS optimized AMI for that image type that's supported by Batch is used.</p> <important> <p>Amazon Web Services will end support for Amazon ECS optimized AL2-optimized and AL2-accelerated AMIs. Starting in January 2026, Batch will change the default AMI for new Amazon ECS compute environments from Amazon Linux 2 to Amazon Linux 2023. We recommend migrating Batch Amazon ECS compute environments to Amazon Linux 2023 to maintain optimal performance and security. For more information on upgrading from AL2 to AL2023, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/ecs-migration-2023.html\">How to migrate from ECS AL2 to ECS AL2023</a> in the <i>Batch User Guide</i>.</p> </important> <dl> <dt>ECS_AL2</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#al2ami\">Amazon Linux 2</a>: Default for all non-GPU instance families.</p> </dd> <dt>ECS_AL2_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#gpuami\">Amazon Linux 2 (GPU)</a>: Default for all GPU instance families (for example <code>P4</code> and <code>G4</code>) and can be used for all non Amazon Web Services Graviton-based instance types.</p> </dd> <dt>ECS_AL2023</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html\">Amazon Linux 2023</a>: Batch supports Amazon Linux 2023.</p> <note> <p>Amazon Linux 2023 does not support <code>A1</code> instances.</p> </note> </dd> <dt>ECS_AL2023_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html#gpuami\">Amazon Linux 2023 (GPU)</a>: For all GPU instance families and can be used for all non Amazon Web Services Graviton-based instance types.</p> <note> <p>ECS_AL2023_NVIDIA doesn't support <code>p3</code> and <code>g3</code> instance types.</p> </note> </dd> </dl> </dd> <dt>EKS</dt> <dd> <p>If the <code>imageIdOverride</code> parameter isn't specified, then a recent <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon EKS-optimized Amazon Linux 2023 AMI</a> (<code>EKS_AL2023</code>) is used. If a new image type is specified in an update, but neither an <code>imageId</code> nor a <code>imageIdOverride</code> parameter is specified, then the latest Amazon EKS optimized AMI for that image type that Batch supports is used.</p> <important> <p>Amazon Linux 2023 AMIs are the default on Batch for Amazon EKS.</p> <p>Amazon Web Services will end support for Amazon EKS AL2-optimized and AL2-accelerated AMIs, starting 11/26/25. You can continue using Batch-provided Amazon EKS optimized Amazon Linux 2 AMIs on your Amazon EKS compute environments beyond the 11/26/25 end-of-support date, these compute environments will no longer receive any new software updates, security patches, or bug fixes from Amazon Web Services. For more information on upgrading from AL2 to AL2023, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/eks-migration-2023.html\">How to upgrade from EKS AL2 to EKS AL2023</a> in the <i>Batch User Guide</i>.</p> </important> <dl> <dt>EKS_AL2</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2</a>: Used for non-GPU instance families.</p> </dd> <dt>EKS_AL2_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2 (accelerated)</a>: Used for GPU instance families (for example, <code>P4</code> and <code>G4</code>) and can be used for all non Amazon Web Services Graviton-based instance types.</p> </dd> <dt>EKS_AL2023</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2023</a>: Default for non-GPU instance families.</p> <note> <p>Amazon Linux 2023 does not support <code>A1</code> instances.</p> </note> </dd> <dt>EKS_AL2023_NVIDIA</dt> <dd> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-optimized-ami.html\">Amazon Linux 2023 (accelerated)</a>: Default for GPU instance families and can be used for all non Amazon Web Services Graviton-based instance types.</p> </dd> </dl> </dd> </dl>"
         },
         "imageIdOverride":{
           "shape":"ImageIdOverride",
@@ -1670,7 +2255,7 @@
         },
         "ipcMode":{
           "shape":"String",
-          "documentation":"<p>The IPC resource namespace to use for the containers in the task.</p>"
+          "documentation":"<p>The IPC resource namespace to use for the containers in the task. The valid values are <code>host</code>, <code>task</code>, or <code>none</code>. For more information see <code>ipcMode</code> in <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html\">EcsTaskProperties</a>.</p>"
         },
         "taskRoleArn":{
           "shape":"String",
@@ -1678,7 +2263,7 @@
         },
         "pidMode":{
           "shape":"String",
-          "documentation":"<p>The process namespace to use for the containers in the task.</p>"
+          "documentation":"<p>The process namespace to use for the containers in the task. The valid values are <code>host</code>, or <code>task</code>. For more information see <code>pidMode</code> in <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html\">EcsTaskProperties</a>.</p>"
         },
         "networkConfiguration":{
           "shape":"NetworkConfiguration",
@@ -1691,6 +2276,10 @@
         "volumes":{
           "shape":"Volumes",
           "documentation":"<p>A list of data volumes used in a job.</p>"
+        },
+        "enableExecuteCommand":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether execute command functionality is turned on for this task. If <code>true</code>, execute command functionality is turned on all the containers in the task.</p>"
         }
       },
       "documentation":"<p>The details of a task definition that describes the container and volume definitions of an Amazon ECS task.</p>"
@@ -1738,6 +2327,10 @@
         "volumes":{
           "shape":"Volumes",
           "documentation":"<p>A list of volumes that are associated with the job.</p>"
+        },
+        "enableExecuteCommand":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether execute command functionality is turned on for this task. If <code>true</code>, execute command functionality is turned on all the containers in the task.</p>"
         }
       },
       "documentation":"<p>The properties for a task definition that describes the container and volume definitions of an Amazon ECS task. You can specify which Docker images to use, the required resources, and other configurations related to launching the task definition through an Amazon ECS service or task.</p>"
@@ -2229,7 +2822,7 @@
         },
         "initContainers":{
           "shape":"EksContainerOverrideList",
-          "documentation":"<p>The overrides for the <code>initContainers</code> defined in the Amazon EKS pod. These containers run before application containers, always runs to completion, and must complete successfully before the next container starts. These containers are registered with the Amazon EKS Connector agent and persists the registration information in the Kubernetes backend data store. For more information, see <a href=\"https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\">Init Containers</a> in the <i>Kubernetes documentation</i>.</p>"
+          "documentation":"<p>The overrides for the <code>initContainers</code> defined in the Amazon EKS pod. These containers run before application containers, always run to completion, and must complete successfully before the next container starts. These containers are registered with the Amazon EKS Connector agent and persists the registration information in the Kubernetes backend data store. For more information, see <a href=\"https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\">Init Containers</a> in the <i>Kubernetes documentation</i>.</p>"
         },
         "metadata":{
           "shape":"EksMetadata",
@@ -2366,18 +2959,18 @@
       "members":{
         "shareDecaySeconds":{
           "shape":"Integer",
-          "documentation":"<p>The amount of time (in seconds) to use to calculate a fair share percentage for each fair share identifier in use. A value of zero (0) indicates the default minimum time window (600 seconds). The maximum supported value is 604800 (1 week).</p> <p>The decay allows for more recently run jobs to have more weight than jobs that ran earlier. Consider adjusting this number if you have jobs that (on average) run longer than ten minutes, or a large difference in job count or job run times between share identifiers, and the allocation of resources doesn’t meet your needs.</p>"
+          "documentation":"<p>The amount of time (in seconds) to use to calculate a fair-share percentage for each share identifier in use. A value of zero (0) indicates the default minimum time window (600 seconds). The maximum supported value is 604800 (1 week).</p> <p>The decay allows for more recently run jobs to have more weight than jobs that ran earlier. Consider adjusting this number if you have jobs that (on average) run longer than ten minutes, or a large difference in job count or job run times between share identifiers, and the allocation of resources doesn't meet your needs.</p>"
         },
         "computeReservation":{
           "shape":"Integer",
-          "documentation":"<p>A value used to reserve some of the available maximum vCPU for fair share identifiers that aren't already used.</p> <p>The reserved ratio is <code>(<i>computeReservation</i>/100)^<i>ActiveFairShares</i> </code> where <code> <i>ActiveFairShares</i> </code> is the number of active fair share identifiers.</p> <p>For example, a <code>computeReservation</code> value of 50 indicates that Batch reserves 50% of the maximum available vCPU if there's only one fair share identifier. It reserves 25% if there are two fair share identifiers. It reserves 12.5% if there are three fair share identifiers. A <code>computeReservation</code> value of 25 indicates that Batch should reserve 25% of the maximum available vCPU if there's only one fair share identifier, 6.25% if there are two fair share identifiers, and 1.56% if there are three fair share identifiers.</p> <p>The minimum value is 0 and the maximum value is 99.</p>"
+          "documentation":"<p>A value used to reserve some of the available maximum vCPU for share identifiers that aren't already used.</p> <p>The reserved ratio is <code>(<i>computeReservation</i>/100)^<i>ActiveFairShares</i> </code> where <code> <i>ActiveFairShares</i> </code> is the number of active share identifiers.</p> <p>For example, a <code>computeReservation</code> value of 50 indicates that Batch reserves 50% of the maximum available vCPU if there's only one share identifier. It reserves 25% if there are two share identifiers. It reserves 12.5% if there are three share identifiers. A <code>computeReservation</code> value of 25 indicates that Batch should reserve 25% of the maximum available vCPU if there's only one share identifier, 6.25% if there are two fair share identifiers, and 1.56% if there are three share identifiers.</p> <p>The minimum value is 0 and the maximum value is 99.</p>"
         },
         "shareDistribution":{
           "shape":"ShareAttributesList",
-          "documentation":"<p>An array of <code>SharedIdentifier</code> objects that contain the weights for the fair share identifiers for the fair share policy. Fair share identifiers that aren't included have a default weight of <code>1.0</code>.</p>"
+          "documentation":"<p>An array of <code>SharedIdentifier</code> objects that contain the weights for the share identifiers for the fair-share policy. Share identifiers that aren't included have a default weight of <code>1.0</code>.</p>"
         }
       },
-      "documentation":"<p>The fair share policy for a scheduling policy.</p>"
+      "documentation":"<p>The fair-share scheduling policy details.</p>"
     },
     "FargatePlatformConfiguration":{
       "type":"structure",
@@ -2389,13 +2982,40 @@
       },
       "documentation":"<p>The platform configuration for jobs that are running on Fargate resources. Jobs that run on Amazon EC2 resources must not specify this parameter.</p>"
     },
+    "FirelensConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"FirelensConfigurationType",
+          "documentation":"<p>The log router to use. The valid values are <code>fluentd</code> or <code>fluentbit</code>.</p>"
+        },
+        "options":{
+          "shape":"FirelensConfigurationOptionsMap",
+          "documentation":"<p>The options to use when configuring the log router. This field is optional and can be used to specify a custom configuration file or to add additional metadata, such as the task, task definition, cluster, and container instance details to the log event. If specified, the syntax to use is <code>\"options\":{\"enable-ecs-log-metadata\":\"true|false\",\"config-file-type:\"s3|file\",\"config-file-value\":\"arn:aws:s3:::mybucket/fluent.conf|filepath\"}</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html#firelens-taskdef\">Creating a task definition that uses a FireLens configuration</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>The FireLens configuration for the container. This is used to specify and configure a log router for container logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html\">Custom log</a> routing in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
+    "FirelensConfigurationOptionsMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"String"}
+    },
+    "FirelensConfigurationType":{
+      "type":"string",
+      "enum":[
+        "fluentd",
+        "fluentbit"
+      ]
+    },
     "Float":{"type":"float"},
     "FrontOfQueueDetail":{
       "type":"structure",
       "members":{
         "jobs":{
           "shape":"FrontOfQueueJobSummaryList",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the first 100 <code>RUNNABLE</code> jobs in a named job queue. For first-in-first-out (FIFO) job queues, jobs are ordered based on their submission time. For fair share scheduling (FSS) job queues, jobs are ordered based on their job priority and share usage.</p>"
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the first 100 <code>RUNNABLE</code> jobs in a named job queue. For first-in-first-out (FIFO) job queues, jobs are ordered based on their submission time. For fair-share scheduling (FSS) job queues, jobs are ordered based on their job priority and share usage.</p>"
         },
         "lastUpdatedAt":{
           "shape":"Long",
@@ -2437,7 +3057,7 @@
       "members":{
         "frontOfQueue":{
           "shape":"FrontOfQueueDetail",
-          "documentation":"<p>The list of the first 100 <code>RUNNABLE</code> jobs in each job queue. For first-in-first-out (FIFO) job queues, jobs are ordered based on their submission time. For fair share scheduling (FSS) job queues, jobs are ordered based on their job priority and share usage.</p>"
+          "documentation":"<p>The list of the first 100 <code>RUNNABLE</code> jobs in each job queue. For first-in-first-out (FIFO) job queues, jobs are ordered based on their submission time. For fair-share scheduling (FSS) job queues, jobs are ordered based on their job priority and share usage.</p>"
         }
       }
     },
@@ -2526,7 +3146,7 @@
         },
         "schedulingPriority":{
           "shape":"Integer",
-          "documentation":"<p>The scheduling priority of the job definition. This only affects jobs in job queues with a fair share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p>"
+          "documentation":"<p>The scheduling priority of the job definition. This only affects jobs in job queues with a fair-share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p>"
         },
         "parameters":{
           "shape":"ParametersMap",
@@ -2571,6 +3191,10 @@
         "containerOrchestrationType":{
           "shape":"OrchestrationType",
           "documentation":"<p>The orchestration type of the compute environment. The valid values are <code>ECS</code> (default) or <code>EKS</code>.</p>"
+        },
+        "consumableResourceProperties":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>Contains a list of consumable resources required by the job.</p>"
         }
       },
       "documentation":"<p>An object that represents an Batch job definition.</p>"
@@ -2641,7 +3265,7 @@
         },
         "schedulingPriority":{
           "shape":"Integer",
-          "documentation":"<p>The scheduling policy of the job definition. This only affects jobs in job queues with a fair share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p>"
+          "documentation":"<p>The scheduling policy of the job definition. This only affects jobs in job queues with a fair-share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p>"
         },
         "attempts":{
           "shape":"AttemptDetails",
@@ -2730,6 +3354,10 @@
         "isTerminated":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the job is terminated.</p>"
+        },
+        "consumableResourceProperties":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>Contains a list of consumable resources required by the job.</p>"
         }
       },
       "documentation":"<p>An object that represents an Batch job.</p>"
@@ -2785,6 +3413,14 @@
           "shape":"ComputeEnvironmentOrders",
           "documentation":"<p>The compute environments that are attached to the job queue and the order that job placement is preferred. Compute environments are selected for job placement in ascending order.</p>"
         },
+        "serviceEnvironmentOrder":{
+          "shape":"ServiceEnvironmentOrders",
+          "documentation":"<p>The order of the service environment associated with the job queue. Job queues with a higher priority are evaluated first when associated with the same service environment.</p>"
+        },
+        "jobQueueType":{
+          "shape":"JobQueueType",
+          "documentation":"<p>The type of job queue. For service jobs that run on SageMaker Training, this value is <code>SAGEMAKER_TRAINING</code>. For regular container jobs, this value is <code>EKS</code>, <code>ECS</code>, or <code>ECS_FARGATE</code> depending on the compute environment.</p>"
+        },
         "tags":{
           "shape":"TagrisTagsMap",
           "documentation":"<p>The tags that are applied to the job queue. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a> in <i>Batch User Guide</i>.</p>"
@@ -2800,6 +3436,15 @@
       "type":"list",
       "member":{"shape":"JobQueueDetail"}
     },
+    "JobQueueType":{
+      "type":"string",
+      "enum":[
+        "EKS",
+        "ECS",
+        "ECS_FARGATE",
+        "SAGEMAKER_TRAINING"
+      ]
+    },
     "JobStateTimeLimitAction":{
       "type":"structure",
       "required":[
@@ -2834,7 +3479,10 @@
     },
     "JobStateTimeLimitActionsAction":{
       "type":"string",
-      "enum":["CANCEL"]
+      "enum":[
+        "CANCEL",
+        "TERMINATE"
+      ]
     },
     "JobStateTimeLimitActionsState":{
       "type":"string",
@@ -2950,13 +3598,23 @@
           "documentation":"<p>The filter values.</p>"
         }
       },
-      "documentation":"<p>A filter name and value pair that's used to return a more specific list of results from a <code>ListJobs</code> API operation.</p>"
+      "documentation":"<p>A filter name and value pair that's used to return a more specific list of results from a <code>ListJobs</code> or <code>ListJobsByConsumableResource</code> API operation.</p>"
     },
     "KubernetesVersion":{
       "type":"string",
       "max":256,
       "min":1
     },
+    "LatestServiceJobAttempt":{
+      "type":"structure",
+      "members":{
+        "serviceResourceId":{
+          "shape":"ServiceResourceId",
+          "documentation":"<p>The service resource identifier associated with the service job attempt.</p>"
+        }
+      },
+      "documentation":"<p>Information about the latest attempt of a service job. A Service job can transition from <code>SCHEDULED</code> back to <code>RUNNABLE</code> state when they encounter capacity constraints.</p>"
+    },
     "LaunchTemplateSpecification":{
       "type":"structure",
       "members":{
@@ -2975,6 +3633,10 @@
         "overrides":{
           "shape":"LaunchTemplateSpecificationOverrideList",
           "documentation":"<p>A launch template to use in place of the default launch template. You must specify either the launch template ID or launch template name in the request, but not both.</p> <p>You can specify up to ten (10) launch template overrides that are associated to unique instance types or families for each compute environment.</p> <note> <p>To unset all override templates for a compute environment, you can pass an empty array to the <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html\">UpdateComputeEnvironment.overrides</a> parameter, or not include the <code>overrides</code> parameter when submitting the <code>UpdateComputeEnvironment</code> API operation.</p> </note>"
+        },
+        "userdataType":{
+          "shape":"UserdataType",
+          "documentation":"<p>The EKS node initialization process to use. You only need to specify this value if you are using a custom AMI. The default value is <code>EKS_BOOTSTRAP_SH</code>. If <i>imageType</i> is a custom AMI based on EKS_AL2023 or EKS_AL2023_NVIDIA then you must choose <code>EKS_NODEADM</code>.</p>"
         }
       },
       "documentation":"<p>An object that represents a launch template that's associated with a compute resource. You must specify either the launch template ID or launch template name in the request, but not both.</p> <p>If security groups are specified using both the <code>securityGroupIds</code> parameter of <code>CreateComputeEnvironment</code> and the launch template, the values in the <code>securityGroupIds</code> parameter of <code>CreateComputeEnvironment</code> will be used.</p> <note> <p>This object isn't applicable to jobs that are running on Fargate resources.</p> </note>"
@@ -2996,7 +3658,11 @@
         },
         "targetInstanceTypes":{
           "shape":"StringList",
-          "documentation":"<p>The instance type or family that this override launch template should be applied to.</p> <p>This parameter is required when defining a launch template override.</p> <p>Information included in this parameter must meet the following requirements:</p> <ul> <li> <p>Must be a valid Amazon EC2 instance type or family.</p> </li> <li> <p> <code>optimal</code> isn't allowed.</p> </li> <li> <p> <code>targetInstanceTypes</code> can target only instance types and families that are included within the <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_ComputeResource.html#Batch-Type-ComputeResource-instanceTypes\"> <code>ComputeResource.instanceTypes</code> </a> set. <code>targetInstanceTypes</code> doesn't need to include all of the instances from the <code>instanceType</code> set, but at least a subset. For example, if <code>ComputeResource.instanceTypes</code> includes <code>[m5, g5]</code>, <code>targetInstanceTypes</code> can include <code>[m5.2xlarge]</code> and <code>[m5.large]</code> but not <code>[c5.large]</code>.</p> </li> <li> <p> <code>targetInstanceTypes</code> included within the same launch template override or across launch template overrides can't overlap for the same compute environment. For example, you can't define one launch template override to target an instance family and another define an instance type within this same family.</p> </li> </ul>"
+          "documentation":"<p>The instance type or family that this override launch template should be applied to.</p> <p>This parameter is required when defining a launch template override.</p> <p>Information included in this parameter must meet the following requirements:</p> <ul> <li> <p>Must be a valid Amazon EC2 instance type or family.</p> </li> <li> <p>The following Batch <code>InstanceTypes</code> are not allowed: <code>optimal</code>, <code>default_x86_64</code>, and <code>default_arm64</code>.</p> </li> <li> <p> <code>targetInstanceTypes</code> can target only instance types and families that are included within the <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_ComputeResource.html#Batch-Type-ComputeResource-instanceTypes\"> <code>ComputeResource.instanceTypes</code> </a> set. <code>targetInstanceTypes</code> doesn't need to include all of the instances from the <code>instanceType</code> set, but at least a subset. For example, if <code>ComputeResource.instanceTypes</code> includes <code>[m5, g5]</code>, <code>targetInstanceTypes</code> can include <code>[m5.2xlarge]</code> and <code>[m5.large]</code> but not <code>[c5.large]</code>.</p> </li> <li> <p> <code>targetInstanceTypes</code> included within the same launch template override or across launch template overrides can't overlap for the same compute environment. For example, you can't define one launch template override to target an instance family and another define an instance type within this same family.</p> </li> </ul>"
+        },
+        "userdataType":{
+          "shape":"UserdataType",
+          "documentation":"<p>The EKS node initialization process to use. You only need to specify this value if you are using a custom AMI. The default value is <code>EKS_BOOTSTRAP_SH</code>. If <i>imageType</i> is a custom AMI based on EKS_AL2023 or EKS_AL2023_NVIDIA then you must choose <code>EKS_NODEADM</code>.</p>"
         }
       },
       "documentation":"<p>An object that represents a launch template to use in place of the default launch template. You must specify either the launch template ID or launch template name in the request, but not both.</p> <p>If security groups are specified using both the <code>securityGroupIds</code> parameter of <code>CreateComputeEnvironment</code> and the launch template, the values in the <code>securityGroupIds</code> parameter of <code>CreateComputeEnvironment</code> will be used.</p> <p>You can define up to ten (10) overrides for each compute environment.</p> <note> <p>This object isn't applicable to jobs that are running on Fargate resources.</p> </note> <note> <p>To unset all override templates for a compute environment, you can pass an empty array to the <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html\">UpdateComputeEnvironment.overrides</a> parameter, or not include the <code>overrides</code> parameter when submitting the <code>UpdateComputeEnvironment</code> API operation.</p> </note>"
@@ -3026,7 +3692,7 @@
         },
         "maxSwap":{
           "shape":"Integer",
-          "documentation":"<p>The total amount of swap memory (in MiB) a container can use. This parameter is translated to the <code>--memory-swap</code> option to <a href=\"https://docs.docker.com/engine/reference/run/\">docker run</a> where the value is the sum of the container memory plus the <code>maxSwap</code> value. For more information, see <a href=\"https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details\"> <code>--memory-swap</code> details</a> in the Docker documentation.</p> <p>If a <code>maxSwap</code> value of <code>0</code> is specified, the container doesn't use swap. Accepted values are <code>0</code> or any positive integer. If the <code>maxSwap</code> parameter is omitted, the container doesn't use the swap configuration for the container instance that it's running on. A <code>maxSwap</code> value must be set for the <code>swappiness</code> parameter to be used.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't provide it for these jobs.</p> </note>"
+          "documentation":"<p>The total amount of swap memory (in MiB) a container can use. This parameter is translated to the <code>--memory-swap</code> option to <a href=\"https://docs.docker.com/engine/reference/run/\">docker run</a> where the value is the sum of the container memory plus the <code>maxSwap</code> value. For more information, see <a href=\"https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details\"> <code>--memory-swap</code> details</a> in the Docker documentation.</p> <p>If a <code>maxSwap</code> value of <code>0</code> is specified, the container doesn't use swap. Accepted values are <code>0</code> or any positive integer. If the <code>maxSwap</code> parameter is omitted, the container doesn't use the swap configuration for the container instance on which it runs. A <code>maxSwap</code> value must be set for the <code>swappiness</code> parameter to be used.</p> <note> <p>This parameter isn't applicable to jobs that are running on Fargate resources. Don't provide it for these jobs.</p> </note>"
         },
         "swappiness":{
           "shape":"Integer",
@@ -3043,6 +3709,41 @@
       "type":"list",
       "member":{"shape":"AttemptTaskContainerDetails"}
     },
+    "ListConsumableResourcesFilterList":{
+      "type":"list",
+      "member":{"shape":"KeyValuesPair"}
+    },
+    "ListConsumableResourcesRequest":{
+      "type":"structure",
+      "members":{
+        "filters":{
+          "shape":"ListConsumableResourcesFilterList",
+          "documentation":"<p>The filters to apply to the consumable resource list query. If used, only those consumable resources that match the filter are listed. Filter names and values can be:</p> <ul> <li> <p>name: <code>CONSUMABLE_RESOURCE_NAME </code> </p> <p>values: case-insensitive matches for the consumable resource name. If a filter value ends with an asterisk (*), it matches any consumable resource name that begins with the string before the '*'.</p> </li> </ul>"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results returned by <code>ListConsumableResources</code> in paginated output. When this parameter is used, <code>ListConsumableResources</code> only returns <code>maxResults</code> results in a single page and a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListConsumableResources</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter isn't used, then <code>ListConsumableResources</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value returned from a previous paginated <code>ListConsumableResources</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value. This value is <code>null</code> when there are no more results to return.</p> <note> <p>Treat this token as an opaque identifier that's only used to retrieve the next items in a list and not for other programmatic purposes.</p> </note>"
+        }
+      }
+    },
+    "ListConsumableResourcesResponse":{
+      "type":"structure",
+      "required":["consumableResources"],
+      "members":{
+        "consumableResources":{
+          "shape":"ConsumableResourceSummaryList",
+          "documentation":"<p>A list of consumable resources that match the request.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value to include in a future <code>ListConsumableResources</code> request. When the results of a <code>ListConsumableResources</code> request exceed <code>maxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
+        }
+      }
+    },
     "ListEcsTaskDetails":{
       "type":"list",
       "member":{"shape":"EcsTaskDetails"}
@@ -3051,6 +3752,109 @@
       "type":"list",
       "member":{"shape":"EcsTaskProperties"}
     },
+    "ListJobsByConsumableResourceFilterList":{
+      "type":"list",
+      "member":{"shape":"KeyValuesPair"}
+    },
+    "ListJobsByConsumableResourceRequest":{
+      "type":"structure",
+      "required":["consumableResource"],
+      "members":{
+        "consumableResource":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the consumable resource.</p>"
+        },
+        "filters":{
+          "shape":"ListJobsByConsumableResourceFilterList",
+          "documentation":"<p>The filters to apply to the job list query. If used, only those jobs requiring the specified consumable resource (<code>consumableResource</code>) and that match the value of the filters are listed. The filter names and values can be:</p> <ul> <li> <p>name: <code>JOB_STATUS</code> </p> <p>values: <code>SUBMITTED | PENDING | RUNNABLE | STARTING | RUNNING | SUCCEEDED | FAILED</code> </p> </li> <li> <p>name: <code>JOB_NAME </code> </p> <p>The values are case-insensitive matches for the job name. If a filter value ends with an asterisk (*), it matches any job name that begins with the string before the '*'.</p> </li> </ul>"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results returned by <code>ListJobsByConsumableResource</code> in paginated output. When this parameter is used, <code>ListJobsByConsumableResource</code> only returns <code>maxResults</code> results in a single page and a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListJobsByConsumableResource</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter isn't used, then <code>ListJobsByConsumableResource</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value returned from a previous paginated <code>ListJobsByConsumableResource</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value. This value is <code>null</code> when there are no more results to return.</p> <note> <p>Treat this token as an opaque identifier that's only used to retrieve the next items in a list and not for other programmatic purposes.</p> </note>"
+        }
+      }
+    },
+    "ListJobsByConsumableResourceResponse":{
+      "type":"structure",
+      "required":["jobs"],
+      "members":{
+        "jobs":{
+          "shape":"ListJobsByConsumableResourceSummaryList",
+          "documentation":"<p>The list of jobs that require the specified consumable resources.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value to include in a future <code>ListJobsByConsumableResource</code> request. When the results of a <code>ListJobsByConsumableResource</code> request exceed <code>maxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListJobsByConsumableResourceSummary":{
+      "type":"structure",
+      "required":[
+        "jobArn",
+        "jobQueueArn",
+        "jobName",
+        "jobStatus",
+        "quantity",
+        "createdAt",
+        "consumableResourceProperties"
+      ],
+      "members":{
+        "jobArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the job.</p>"
+        },
+        "jobQueueArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the job queue.</p>"
+        },
+        "jobName":{
+          "shape":"String",
+          "documentation":"<p>The name of the job.</p>"
+        },
+        "jobDefinitionArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the job definition.</p>"
+        },
+        "shareIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The fair-share scheduling policy identifier for the job.</p>"
+        },
+        "jobStatus":{
+          "shape":"String",
+          "documentation":"<p>The status of the job. Can be one of:</p> <ul> <li> <p> <code>SUBMITTED</code> </p> </li> <li> <p> <code>PENDING</code> </p> </li> <li> <p> <code>RUNNABLE</code> </p> </li> <li> <p> <code>STARTING</code> </p> </li> <li> <p> <code>RUNNING</code> </p> </li> <li> <p> <code>SUCCEEDED</code> </p> </li> <li> <p> <code>FAILED</code> </p> </li> </ul>"
+        },
+        "quantity":{
+          "shape":"Long",
+          "documentation":"<p>The total amount of the consumable resource that is available.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>A short, human-readable string to provide more details for the current status of the job.</p>"
+        },
+        "startedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp for when the job was started. More specifically, it's when the job transitioned from the <code>STARTING</code> state to the <code>RUNNING</code> state.</p>"
+        },
+        "createdAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the consumable resource was created.</p>"
+        },
+        "consumableResourceProperties":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>Contains a list of consumable resources required by the job.</p>"
+        }
+      },
+      "documentation":"<p>Current information about a consumable resource required by a job.</p>"
+    },
+    "ListJobsByConsumableResourceSummaryList":{
+      "type":"list",
+      "member":{"shape":"ListJobsByConsumableResourceSummary"}
+    },
     "ListJobsFilterList":{
       "type":"list",
       "member":{"shape":"KeyValuesPair"}
@@ -3130,6 +3934,45 @@
         }
       }
     },
+    "ListServiceJobsRequest":{
+      "type":"structure",
+      "members":{
+        "jobQueue":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the job queue with which to list service jobs.</p>"
+        },
+        "jobStatus":{
+          "shape":"ServiceJobStatus",
+          "documentation":"<p>The job status with which to filter service jobs. </p>"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results returned by <code>ListServiceJobs</code> in paginated output. When this parameter is used, <code>ListServiceJobs</code> only returns <code>maxResults</code> results in a single page and a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListServiceJobs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter isn't used, then <code>ListServiceJobs</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value returned from a previous paginated <code>ListServiceJobs</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value. This value is <code>null</code> when there are no more results to return.</p> <note> <p>Treat this token as an opaque identifier that's only used to retrieve the next items in a list and not for other programmatic purposes.</p> </note>"
+        },
+        "filters":{
+          "shape":"ListJobsFilterList",
+          "documentation":"<p>The filter to apply to the query. Only one filter can be used at a time. When the filter is used, <code>jobStatus</code> is ignored. The results are sorted by the <code>createdAt</code> field, with the most recent jobs being first.</p> <dl> <dt>JOB_NAME</dt> <dd> <p>The value of the filter is a case-insensitive match for the job name. If the value ends with an asterisk (*), the filter matches any job name that begins with the string before the '*'. This corresponds to the <code>jobName</code> value. For example, <code>test1</code> matches both <code>Test1</code> and <code>test1</code>, and <code>test1*</code> matches both <code>test1</code> and <code>Test10</code>. When the <code>JOB_NAME</code> filter is used, the results are grouped by the job name and version.</p> </dd> <dt>BEFORE_CREATED_AT</dt> <dd> <p>The value for the filter is the time that's before the job was created. This corresponds to the <code>createdAt</code> value. The value is a string representation of the number of milliseconds since 00:00:00 UTC (midnight) on January 1, 1970.</p> </dd> <dt>AFTER_CREATED_AT</dt> <dd> <p>The value for the filter is the time that's after the job was created. This corresponds to the <code>createdAt</code> value. The value is a string representation of the number of milliseconds since 00:00:00 UTC (midnight) on January 1, 1970.</p> </dd> </dl>"
+        }
+      }
+    },
+    "ListServiceJobsResponse":{
+      "type":"structure",
+      "required":["jobSummaryList"],
+      "members":{
+        "jobSummaryList":{
+          "shape":"ServiceJobSummaryList",
+          "documentation":"<p>A list of service job summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The <code>nextToken</code> value to include in a future <code>ListServiceJobs</code> request. When the results of a <code>ListServiceJobs</code> request exceed <code>maxResults</code>, this value can be used to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
+        }
+      }
+    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["resourceArn"],
@@ -3174,7 +4017,7 @@
       "members":{
         "logDriver":{
           "shape":"LogDriver",
-          "documentation":"<p>The log driver to use for the container. The valid values that are listed for this parameter are log drivers that the Amazon ECS container agent can communicate with by default.</p> <p>The supported log drivers are <code>awslogs</code>, <code>fluentd</code>, <code>gelf</code>, <code>json-file</code>, <code>journald</code>, <code>logentries</code>, <code>syslog</code>, and <code>splunk</code>.</p> <note> <p>Jobs that are running on Fargate resources are restricted to the <code>awslogs</code> and <code>splunk</code> log drivers.</p> </note> <dl> <dt>awslogs</dt> <dd> <p>Specifies the Amazon CloudWatch Logs logging driver. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using_awslogs.html\">Using the awslogs log driver</a> in the <i>Batch User Guide</i> and <a href=\"https://docs.docker.com/config/containers/logging/awslogs/\">Amazon CloudWatch Logs logging driver</a> in the Docker documentation.</p> </dd> <dt>fluentd</dt> <dd> <p>Specifies the Fluentd logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/fluentd/\">Fluentd logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>gelf</dt> <dd> <p>Specifies the Graylog Extended Format (GELF) logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/gelf/\">Graylog Extended Format logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>journald</dt> <dd> <p>Specifies the journald logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/journald/\">Journald logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>json-file</dt> <dd> <p>Specifies the JSON file logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/json-file/\">JSON File logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>splunk</dt> <dd> <p>Specifies the Splunk logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/splunk/\">Splunk logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>syslog</dt> <dd> <p>Specifies the syslog logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/syslog/\">Syslog logging driver</a> in the <i>Docker documentation</i>.</p> </dd> </dl> <note> <p>If you have a custom driver that's not listed earlier that you want to work with the Amazon ECS container agent, you can fork the Amazon ECS container agent project that's <a href=\"https://github.com/aws/amazon-ecs-agent\">available on GitHub</a> and customize it to work with that driver. We encourage you to submit pull requests for changes that you want to have included. However, Amazon Web Services doesn't currently support running modified copies of this software.</p> </note> <p>This parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: <code>sudo docker version | grep \"Server API version\"</code> </p>"
+          "documentation":"<p>The log driver to use for the container. The valid values that are listed for this parameter are log drivers that the Amazon ECS container agent can communicate with by default.</p> <p>The supported log drivers are <code>awsfirelens</code>, <code>awslogs</code>, <code>fluentd</code>, <code>gelf</code>, <code>json-file</code>, <code>journald</code>, <code>logentries</code>, <code>syslog</code>, and <code>splunk</code>.</p> <note> <p>Jobs that are running on Fargate resources are restricted to the <code>awslogs</code> and <code>splunk</code> log drivers.</p> </note> <dl> <dt>awsfirelens</dt> <dd> <p>Specifies the firelens logging driver. For more information on configuring Firelens, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html\">Send Amazon ECS logs to an Amazon Web Services service or Amazon Web Services Partner</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </dd> <dt>awslogs</dt> <dd> <p>Specifies the Amazon CloudWatch Logs logging driver. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using_awslogs.html\">Using the awslogs log driver</a> in the <i>Batch User Guide</i> and <a href=\"https://docs.docker.com/config/containers/logging/awslogs/\">Amazon CloudWatch Logs logging driver</a> in the Docker documentation.</p> </dd> <dt>fluentd</dt> <dd> <p>Specifies the Fluentd logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/fluentd/\">Fluentd logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>gelf</dt> <dd> <p>Specifies the Graylog Extended Format (GELF) logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/gelf/\">Graylog Extended Format logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>journald</dt> <dd> <p>Specifies the journald logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/journald/\">Journald logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>json-file</dt> <dd> <p>Specifies the JSON file logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/json-file/\">JSON File logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>splunk</dt> <dd> <p>Specifies the Splunk logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/splunk/\">Splunk logging driver</a> in the <i>Docker documentation</i>.</p> </dd> <dt>syslog</dt> <dd> <p>Specifies the syslog logging driver. For more information including usage and options, see <a href=\"https://docs.docker.com/config/containers/logging/syslog/\">Syslog logging driver</a> in the <i>Docker documentation</i>.</p> </dd> </dl> <note> <p>If you have a custom driver that's not listed earlier that you want to work with the Amazon ECS container agent, you can fork the Amazon ECS container agent project that's <a href=\"https://github.com/aws/amazon-ecs-agent\">available on GitHub</a> and customize it to work with that driver. We encourage you to submit pull requests for changes that you want to have included. However, Amazon Web Services doesn't currently support running modified copies of this software.</p> </note> <p>This parameter requires version 1.18 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: <code>sudo docker version | grep \"Server API version\"</code> </p>"
         },
         "options":{
           "shape":"LogConfigurationOptionsMap",
@@ -3201,7 +4044,8 @@
         "gelf",
         "fluentd",
         "awslogs",
-        "splunk"
+        "splunk",
+        "awsfirelens"
       ]
     },
     "Long":{"type":"long"},
@@ -3351,6 +4195,10 @@
         "eksPropertiesOverride":{
           "shape":"EksPropertiesOverride",
           "documentation":"<p>An object that contains the properties that you want to replace for the existing Amazon EKS resources of a job.</p>"
+        },
+        "consumableResourcePropertiesOverride":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>An object that contains overrides for the consumable resources of a job.</p>"
         }
       },
       "documentation":"<p>The object that represents any node overrides to a job definition that's used in a <a href=\"https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html\">SubmitJob</a> API operation.</p>"
@@ -3386,6 +4234,10 @@
         "eksProperties":{
           "shape":"EksProperties",
           "documentation":"<p>This is an object that represents the properties of the node range for a multi-node parallel job.</p>"
+        },
+        "consumableResourceProperties":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>Contains a list of consumable resources required by a job.</p>"
         }
       },
       "documentation":"<p>This is an object that represents the properties of the node range for a multi-node parallel job.</p>"
@@ -3439,7 +4291,7 @@
         },
         "schedulingPriority":{
           "shape":"Integer",
-          "documentation":"<p>The scheduling priority for jobs that are submitted with this job definition. This only affects jobs in job queues with a fair share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p> <p>The minimum supported value is 0 and the maximum supported value is 9999.</p>"
+          "documentation":"<p>The scheduling priority for jobs that are submitted with this job definition. This only affects jobs in job queues with a fair-share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority.</p> <p>The minimum supported value is 0 and the maximum supported value is 9999.</p>"
         },
         "containerProperties":{
           "shape":"ContainerProperties",
@@ -3476,6 +4328,10 @@
         "ecsProperties":{
           "shape":"EcsProperties",
           "documentation":"<p>An object with properties that are specific to Amazon ECS-based jobs. This must not be specified for Amazon EKS-based job definitions.</p>"
+        },
+        "consumableResourceProperties":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>Contains a list of consumable resources required by the job.</p>"
         }
       },
       "documentation":"<p>Contains the parameters for <code>RegisterJobDefinition</code>.</p>"
@@ -3569,11 +4425,11 @@
       "members":{
         "operatingSystemFamily":{
           "shape":"String",
-          "documentation":"<p>The operating system for the compute environment. Valid values are: <code>LINUX</code> (default), <code>WINDOWS_SERVER_2019_CORE</code>, <code>WINDOWS_SERVER_2019_FULL</code>, <code>WINDOWS_SERVER_2022_CORE</code>, and <code>WINDOWS_SERVER_2022_FULL</code>.</p> <note> <p>The following parameters can’t be set for Windows containers: <code>linuxParameters</code>, <code>privileged</code>, <code>user</code>, <code>ulimits</code>, <code>readonlyRootFilesystem</code>, and <code>efsVolumeConfiguration</code>.</p> </note> <note> <p>The Batch Scheduler checks the compute environments that are attached to the job queue before registering a task definition with Fargate. In this scenario, the job queue is where the job is submitted. If the job requires a Windows container and the first compute environment is <code>LINUX</code>, the compute environment is skipped and the next compute environment is checked until a Windows-based compute environment is found.</p> </note> <note> <p>Fargate Spot is not supported for <code>ARM64</code> and Windows-based containers on Fargate. A job queue will be blocked if a Fargate <code>ARM64</code> or Windows job is submitted to a job queue with only Fargate Spot compute environments. However, you can attach both <code>FARGATE</code> and <code>FARGATE_SPOT</code> compute environments to the same job queue.</p> </note>"
+          "documentation":"<p>The operating system for the compute environment. Valid values are: <code>LINUX</code> (default), <code>WINDOWS_SERVER_2019_CORE</code>, <code>WINDOWS_SERVER_2019_FULL</code>, <code>WINDOWS_SERVER_2022_CORE</code>, and <code>WINDOWS_SERVER_2022_FULL</code>.</p> <note> <p>The following parameters can’t be set for Windows containers: <code>linuxParameters</code>, <code>privileged</code>, <code>user</code>, <code>ulimits</code>, <code>readonlyRootFilesystem</code>, and <code>efsVolumeConfiguration</code>.</p> </note> <note> <p>The Batch Scheduler checks the compute environments that are attached to the job queue before registering a task definition with Fargate. In this scenario, the job queue is where the job is submitted. If the job requires a Windows container and the first compute environment is <code>LINUX</code>, the compute environment is skipped and the next compute environment is checked until a Windows-based compute environment is found.</p> </note> <note> <p>Fargate Spot is not supported on Windows-based containers on Fargate. A job queue will be blocked if a Windows job is submitted to a job queue with only Fargate Spot compute environments. However, you can attach both <code>FARGATE</code> and <code>FARGATE_SPOT</code> compute environments to the same job queue.</p> </note>"
         },
         "cpuArchitecture":{
           "shape":"String",
-          "documentation":"<p> The vCPU architecture. The default value is <code>X86_64</code>. Valid values are <code>X86_64</code> and <code>ARM64</code>.</p> <note> <p>This parameter must be set to <code>X86_64</code> for Windows containers.</p> </note> <note> <p>Fargate Spot is not supported for <code>ARM64</code> and Windows-based containers on Fargate. A job queue will be blocked if a Fargate <code>ARM64</code> or Windows job is submitted to a job queue with only Fargate Spot compute environments. However, you can attach both <code>FARGATE</code> and <code>FARGATE_SPOT</code> compute environments to the same job queue.</p> </note>"
+          "documentation":"<p>The vCPU architecture. The default value is <code>X86_64</code>. Valid values are <code>X86_64</code> and <code>ARM64</code>.</p> <note> <p>This parameter must be set to <code>X86_64</code> for Windows containers.</p> </note> <note> <p>Fargate Spot is not supported on Windows-based containers on Fargate. A job queue will be blocked if a Windows job is submitted to a job queue with only Fargate Spot compute environments. However, you can attach both <code>FARGATE</code> and <code>FARGATE_SPOT</code> compute environments to the same job queue.</p> </note>"
         }
       },
       "documentation":"<p> An object that represents the compute environment architecture for Batch jobs on Fargate. </p>"
@@ -3587,7 +4443,7 @@
       "members":{
         "name":{
           "shape":"String",
-          "documentation":"<p>The name of the scheduling policy.</p>"
+          "documentation":"<p>The name of the fair-share scheduling policy.</p>"
         },
         "arn":{
           "shape":"String",
@@ -3595,11 +4451,11 @@
         },
         "fairsharePolicy":{
           "shape":"FairsharePolicy",
-          "documentation":"<p>The fair share policy for the scheduling policy.</p>"
+          "documentation":"<p>The fair-share scheduling policy details.</p>"
         },
         "tags":{
           "shape":"TagrisTagsMap",
-          "documentation":"<p>The tags that you apply to the scheduling policy to categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in <i>Amazon Web Services General Reference</i>.</p>"
+          "documentation":"<p>The tags that you apply to the fair-share scheduling policy to categorize and organize your resources. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in <i>Amazon Web Services General Reference</i>.</p>"
         }
       },
       "documentation":"<p>An object that represents a scheduling policy.</p>"
@@ -3655,20 +4511,282 @@
       "exception":true,
       "fault":true
     },
+    "ServiceEnvironmentDetail":{
+      "type":"structure",
+      "required":[
+        "serviceEnvironmentName",
+        "serviceEnvironmentArn",
+        "serviceEnvironmentType",
+        "capacityLimits"
+      ],
+      "members":{
+        "serviceEnvironmentName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service environment.</p>"
+        },
+        "serviceEnvironmentArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service environment.</p>"
+        },
+        "serviceEnvironmentType":{
+          "shape":"ServiceEnvironmentType",
+          "documentation":"<p>The type of service environment. For SageMaker Training jobs, this value is <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "state":{
+          "shape":"ServiceEnvironmentState",
+          "documentation":"<p>The state of the service environment. Valid values are <code>ENABLED</code> and <code>DISABLED</code>.</p>"
+        },
+        "status":{
+          "shape":"ServiceEnvironmentStatus",
+          "documentation":"<p>The current status of the service environment.</p>"
+        },
+        "capacityLimits":{
+          "shape":"CapacityLimits",
+          "documentation":"<p>The capacity limits for the service environment. This defines the maximum resources that can be used by service jobs in this environment.</p>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags associated with the service environment. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about a service environment, including its configuration, state, and capacity limits.</p>"
+    },
+    "ServiceEnvironmentDetailList":{
+      "type":"list",
+      "member":{"shape":"ServiceEnvironmentDetail"}
+    },
+    "ServiceEnvironmentOrder":{
+      "type":"structure",
+      "required":[
+        "order",
+        "serviceEnvironment"
+      ],
+      "members":{
+        "order":{
+          "shape":"Integer",
+          "documentation":"<p>The order of the service environment. Job queues with a higher priority are evaluated first when associated with the same service environment.</p>"
+        },
+        "serviceEnvironment":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the service environment.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the order of a service environment for a job queue. This determines the priority order when multiple service environments are associated with the same job queue.</p>"
+    },
+    "ServiceEnvironmentOrders":{
+      "type":"list",
+      "member":{"shape":"ServiceEnvironmentOrder"}
+    },
+    "ServiceEnvironmentState":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "ServiceEnvironmentStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "UPDATING",
+        "DELETING",
+        "DELETED",
+        "VALID",
+        "INVALID"
+      ]
+    },
+    "ServiceEnvironmentType":{
+      "type":"string",
+      "enum":["SAGEMAKER_TRAINING"]
+    },
+    "ServiceJobAttemptDetail":{
+      "type":"structure",
+      "members":{
+        "serviceResourceId":{
+          "shape":"ServiceResourceId",
+          "documentation":"<p>The service resource identifier associated with the service job attempt.</p>"
+        },
+        "startedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job attempt was started.</p>"
+        },
+        "stoppedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job attempt stopped running.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>A string that provides additional details for the current status of the service job attempt.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about an attempt to run a service job.</p>"
+    },
+    "ServiceJobAttemptDetails":{
+      "type":"list",
+      "member":{"shape":"ServiceJobAttemptDetail"}
+    },
+    "ServiceJobEvaluateOnExit":{
+      "type":"structure",
+      "members":{
+        "action":{
+          "shape":"ServiceJobRetryAction",
+          "documentation":"<p>The action to take if the service job exits with the specified condition. Valid values are <code>RETRY</code> and <code>EXIT</code>.</p>"
+        },
+        "onStatusReason":{
+          "shape":"String",
+          "documentation":"<p>Contains a glob pattern to match against the StatusReason returned for a job. The pattern can contain up to 512 characters and can contain all printable characters. It can optionally end with an asterisk (*) so that only the start of the string needs to be an exact match.</p>"
+        }
+      },
+      "documentation":"<p>Specifies conditions for when to exit or retry a service job based on the exit status or status reason.</p>"
+    },
+    "ServiceJobEvaluateOnExitList":{
+      "type":"list",
+      "member":{"shape":"ServiceJobEvaluateOnExit"}
+    },
+    "ServiceJobRetryAction":{
+      "type":"string",
+      "enum":[
+        "RETRY",
+        "EXIT"
+      ]
+    },
+    "ServiceJobRetryStrategy":{
+      "type":"structure",
+      "required":["attempts"],
+      "members":{
+        "attempts":{
+          "shape":"Integer",
+          "documentation":"<p>The number of times to move a service job to <code>RUNNABLE</code> status. You can specify between 1 and 10 attempts.</p>"
+        },
+        "evaluateOnExit":{
+          "shape":"ServiceJobEvaluateOnExitList",
+          "documentation":"<p>Array of <code>ServiceJobEvaluateOnExit</code> objects that specify conditions under which the service job should be retried or failed.</p>"
+        }
+      },
+      "documentation":"<p>The retry strategy for service jobs. This defines how many times to retry a failed service job and under what conditions. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/service-job-retries.html\">Service job retry strategies</a> in the <i>Batch User Guide</i>.</p>"
+    },
+    "ServiceJobStatus":{
+      "type":"string",
+      "enum":[
+        "SUBMITTED",
+        "PENDING",
+        "RUNNABLE",
+        "SCHEDULED",
+        "STARTING",
+        "RUNNING",
+        "SUCCEEDED",
+        "FAILED"
+      ]
+    },
+    "ServiceJobSummary":{
+      "type":"structure",
+      "required":[
+        "jobId",
+        "jobName",
+        "serviceJobType"
+      ],
+      "members":{
+        "latestAttempt":{
+          "shape":"LatestServiceJobAttempt",
+          "documentation":"<p>Information about the latest attempt for the service job.</p>"
+        },
+        "createdAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job was created.</p>"
+        },
+        "jobArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service job.</p>"
+        },
+        "jobId":{
+          "shape":"String",
+          "documentation":"<p>The job ID for the service job.</p>"
+        },
+        "jobName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service job.</p>"
+        },
+        "serviceJobType":{
+          "shape":"ServiceJobType",
+          "documentation":"<p>The type of service job. For SageMaker Training jobs, this value is <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "shareIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The share identifier for the job.</p>"
+        },
+        "status":{
+          "shape":"ServiceJobStatus",
+          "documentation":"<p>The current status of the service job. </p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>A short string to provide more details on the current status of the service job.</p>"
+        },
+        "startedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job was started.</p>"
+        },
+        "stoppedAt":{
+          "shape":"Long",
+          "documentation":"<p>The Unix timestamp (in milliseconds) for when the service job stopped running.</p>"
+        }
+      },
+      "documentation":"<p>Summary information about a service job.</p>"
+    },
+    "ServiceJobSummaryList":{
+      "type":"list",
+      "member":{"shape":"ServiceJobSummary"}
+    },
+    "ServiceJobTimeout":{
+      "type":"structure",
+      "members":{
+        "attemptDurationSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum duration in seconds that a service job attempt can run. After this time is reached, Batch terminates the service job attempt.</p>"
+        }
+      },
+      "documentation":"<p>The timeout configuration for service jobs. </p>"
+    },
+    "ServiceJobType":{
+      "type":"string",
+      "enum":["SAGEMAKER_TRAINING"]
+    },
+    "ServiceResourceId":{
+      "type":"structure",
+      "required":[
+        "name",
+        "value"
+      ],
+      "members":{
+        "name":{
+          "shape":"ServiceResourceIdName",
+          "documentation":"<p>The name of the resource identifier. </p>"
+        },
+        "value":{
+          "shape":"String",
+          "documentation":"<p>The value of the resource identifier. </p>"
+        }
+      },
+      "documentation":"<p>The Batch unique identifier.</p>"
+    },
+    "ServiceResourceIdName":{
+      "type":"string",
+      "enum":["TrainingJobArn"]
+    },
     "ShareAttributes":{
       "type":"structure",
       "required":["shareIdentifier"],
       "members":{
         "shareIdentifier":{
           "shape":"String",
-          "documentation":"<p>A fair share identifier or fair share identifier prefix. If the string ends with an asterisk (*), this entry specifies the weight factor to use for fair share identifiers that start with that prefix. The list of fair share identifiers in a fair share policy can't overlap. For example, you can't have one that specifies a <code>shareIdentifier</code> of <code>UserA*</code> and another that specifies a <code>shareIdentifier</code> of <code>UserA-1</code>.</p> <p>There can be no more than 500 fair share identifiers active in a job queue.</p> <p>The string is limited to 255 alphanumeric characters, and can be followed by an asterisk (*).</p>"
+          "documentation":"<p>A share identifier or share identifier prefix. If the string ends with an asterisk (*), this entry specifies the weight factor to use for share identifiers that start with that prefix. The list of share identifiers in a fair-share policy can't overlap. For example, you can't have one that specifies a <code>shareIdentifier</code> of <code>UserA*</code> and another that specifies a <code>shareIdentifier</code> of <code>UserA1</code>.</p> <p>There can be no more than 500 share identifiers active in a job queue.</p> <p>The string is limited to 255 alphanumeric characters, and can be followed by an asterisk (*).</p>"
         },
         "weightFactor":{
           "shape":"Float",
-          "documentation":"<p>The weight factor for the fair share identifier. The default value is 1.0. A lower value has a higher priority for compute resources. For example, jobs that use a share identifier with a weight factor of 0.125 (1/8) get 8 times the compute resources of jobs that use a share identifier with a weight factor of 1.</p> <p>The smallest supported value is 0.0001, and the largest supported value is 999.9999.</p>"
+          "documentation":"<p>The weight factor for the share identifier. The default value is 1.0. A lower value has a higher priority for compute resources. For example, jobs that use a share identifier with a weight factor of 0.125 (1/8) get 8 times the compute resources of jobs that use a share identifier with a weight factor of 1.</p> <p>The smallest supported value is 0.0001, and the largest supported value is 999.9999.</p>"
         }
       },
-      "documentation":"<p>Specifies the weights for the fair share identifiers for the fair share policy. Fair share identifiers that aren't included have a default weight of <code>1.0</code>.</p>"
+      "documentation":"<p>Specifies the weights for the share identifiers for the fair-share policy. Share identifiers that aren't included have a default weight of <code>1.0</code>.</p>"
     },
     "ShareAttributesList":{
       "type":"list",
@@ -3697,11 +4815,11 @@
         },
         "shareIdentifier":{
           "shape":"String",
-          "documentation":"<p>The share identifier for the job. Don't specify this parameter if the job queue doesn't have a scheduling policy. If the job queue has a scheduling policy, then this parameter must be specified.</p> <p>This string is limited to 255 alphanumeric characters, and can be followed by an asterisk (*).</p>"
+          "documentation":"<p>The share identifier for the job. Don't specify this parameter if the job queue doesn't have a fair-share scheduling policy. If the job queue has a fair-share scheduling policy, then this parameter must be specified.</p> <p>This string is limited to 255 alphanumeric characters, and can be followed by an asterisk (*).</p>"
         },
         "schedulingPriorityOverride":{
           "shape":"Integer",
-          "documentation":"<p>The scheduling priority for the job. This only affects jobs in job queues with a fair share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority. This overrides any scheduling priority in the job definition and works only within a single share identifier.</p> <p>The minimum supported value is 0 and the maximum supported value is 9999.</p>"
+          "documentation":"<p>The scheduling priority for the job. This only affects jobs in job queues with a fair-share policy. Jobs with a higher scheduling priority are scheduled before jobs with a lower scheduling priority. This overrides any scheduling priority in the job definition and works only within a single share identifier.</p> <p>The minimum supported value is 0 and the maximum supported value is 9999.</p>"
         },
         "arrayProperties":{
           "shape":"ArrayProperties",
@@ -3750,6 +4868,10 @@
         "ecsPropertiesOverride":{
           "shape":"EcsPropertiesOverride",
           "documentation":"<p>An object, with properties that override defaults for the job definition, can only be specified for jobs that are run on Amazon ECS resources.</p>"
+        },
+        "consumableResourcePropertiesOverride":{
+          "shape":"ConsumableResourceProperties",
+          "documentation":"<p>An object that contains overrides for the consumable resources of a job.</p>"
         }
       },
       "documentation":"<p>Contains the parameters for <code>SubmitJob</code>.</p>"
@@ -3775,6 +4897,79 @@
         }
       }
     },
+    "SubmitServiceJobRequest":{
+      "type":"structure",
+      "required":[
+        "jobName",
+        "jobQueue",
+        "serviceRequestPayload",
+        "serviceJobType"
+      ],
+      "members":{
+        "jobName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service job. It can be up to 128 characters long. It can contain uppercase and lowercase letters, numbers, hyphens (-), and underscores (_).</p>"
+        },
+        "jobQueue":{
+          "shape":"String",
+          "documentation":"<p>The job queue into which the service job is submitted. You can specify either the name or the ARN of the queue. The job queue must have the type <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "retryStrategy":{
+          "shape":"ServiceJobRetryStrategy",
+          "documentation":"<p>The retry strategy to use for failed service jobs that are submitted with this service job request. </p>"
+        },
+        "schedulingPriority":{
+          "shape":"Integer",
+          "documentation":"<p>The scheduling priority of the service job. Valid values are integers between 0 and 9999.</p>"
+        },
+        "serviceRequestPayload":{
+          "shape":"String",
+          "documentation":"<p>The request, in JSON, for the service that the SubmitServiceJob operation is queueing. </p>"
+        },
+        "serviceJobType":{
+          "shape":"ServiceJobType",
+          "documentation":"<p>The type of service job. For SageMaker Training jobs, specify <code>SAGEMAKER_TRAINING</code>.</p>"
+        },
+        "shareIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The share identifier for the service job. Don't specify this parameter if the job queue doesn't have a fair-share scheduling policy. If the job queue has a fair-share scheduling policy, then this parameter must be specified.</p>"
+        },
+        "timeoutConfig":{
+          "shape":"ServiceJobTimeout",
+          "documentation":"<p>The timeout configuration for the service job. If none is specified, Batch defers to the default timeout of the underlying service handling the job.</p>"
+        },
+        "tags":{
+          "shape":"TagrisTagsMap",
+          "documentation":"<p>The tags that you apply to the service job request. Each tag consists of a key and an optional value. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/using-tags.html\">Tagging your Batch resources</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientRequestToken",
+          "documentation":"<p>A unique identifier for the request. This token is used to ensure idempotency of requests. If this parameter is specified and two submit requests with identical payloads and <code>clientToken</code>s are received, these requests are considered the same request and the second request is rejected.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "SubmitServiceJobResponse":{
+      "type":"structure",
+      "required":[
+        "jobName",
+        "jobId"
+      ],
+      "members":{
+        "jobArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the service job.</p>"
+        },
+        "jobName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service job.</p>"
+        },
+        "jobId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier for the service job.</p>"
+        }
+      }
+    },
     "TagKey":{
       "type":"string",
       "max":128,
@@ -3808,8 +5003,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3864,6 +5058,10 @@
           "shape":"Boolean",
           "documentation":"<p>If the essential parameter of a container is marked as <code>true</code>, and that container fails or stops for any reason, all other containers that are part of the task are stopped. If the <code>essential</code> parameter of a container is marked as false, its failure doesn't affect the rest of the containers in a task. If this parameter is omitted, a container is assumed to be essential.</p> <p>All jobs must have at least one essential container. If you have an application that's composed of multiple containers, group containers that are used for a common purpose into components, and separate the different components into multiple task definitions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html\">Application Architecture</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
+        "firelensConfiguration":{
+          "shape":"FirelensConfiguration",
+          "documentation":"<p>The FireLens configuration for the container. This is used to specify and configure a log router for container logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html\">Custom log</a> routing in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+        },
         "image":{
           "shape":"String",
           "documentation":"<p>The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either <code>repository-url/image:tag</code> or <code>repository-url/image@digest</code>. Up to 255 letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs are allowed. This parameter maps to <code>Image</code> in the <a href=\"https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate\">Create a container</a> section of the <a href=\"https://docs.docker.com/engine/api/v1.35/\">Docker Remote API</a> and the <code>IMAGE</code> parameter of the <a href=\"https://docs.docker.com/engine/reference/run/#security-configuration\"> <i>docker run</i> </a>.</p>"
@@ -3973,6 +5171,10 @@
           "shape":"Boolean",
           "documentation":"<p>If the essential parameter of a container is marked as <code>true</code>, and that container fails or stops for any reason, all other containers that are part of the task are stopped. If the <code>essential</code> parameter of a container is marked as false, its failure doesn't affect the rest of the containers in a task. If this parameter is omitted, a container is assumed to be essential.</p> <p>All jobs must have at least one essential container. If you have an application that's composed of multiple containers, group containers that are used for a common purpose into components, and separate the different components into multiple task definitions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html\">Application Architecture</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
+        "firelensConfiguration":{
+          "shape":"FirelensConfiguration",
+          "documentation":"<p>The FireLens configuration for the container. This is used to specify and configure a log router for container logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_firelens.html\">Custom log</a> routing in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+        },
         "image":{
           "shape":"String",
           "documentation":"<p>The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either <code>repository-url/image:tag</code> or <code>repository-url/image@digest</code>. Up to 255 letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs are allowed. This parameter maps to <code>Image</code> in the <a href=\"https://docs.docker.com/engine/api/v1.35/#operation/ContainerCreate\">Create a container</a> section of the <a href=\"https://docs.docker.com/engine/api/v1.35/\">Docker Remote API</a> and the <code>IMAGE</code> parameter of the <a href=\"https://docs.docker.com/engine/reference/run/#security-configuration\"> <i>docker run</i> </a>.</p>"
@@ -4054,9 +5256,29 @@
     },
     "TerminateJobResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "TerminateServiceJobRequest":{
+      "type":"structure",
+      "required":[
+        "jobId",
+        "reason"
+      ],
       "members":{
+        "jobId":{
+          "shape":"String",
+          "documentation":"<p>The service job ID of the service job to terminate.</p>"
+        },
+        "reason":{
+          "shape":"String",
+          "documentation":"<p>A message to attach to the service job that explains the reason for canceling it. This message is returned by <code>DescribeServiceJob</code> operations on the service job.</p>"
+        }
       }
     },
+    "TerminateServiceJobResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "Tmpfs":{
       "type":"structure",
       "required":[
@@ -4134,8 +5356,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateComputeEnvironmentRequest":{
       "type":"structure",
@@ -4151,7 +5372,7 @@
         },
         "unmanagedvCpus":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of vCPUs expected to be used for an unmanaged compute environment. Don't specify this parameter for a managed compute environment. This parameter is only used for fair share scheduling to reserve vCPU capacity for new share identifiers. If this parameter isn't provided for a fair share job queue, no vCPU capacity is reserved.</p>"
+          "documentation":"<p>The maximum number of vCPUs expected to be used for an unmanaged compute environment. Don't specify this parameter for a managed compute environment. This parameter is only used for fair-share scheduling to reserve vCPU capacity for new share identifiers. If this parameter isn't provided for a fair-share job queue, no vCPU capacity is reserved.</p>"
         },
         "computeResources":{
           "shape":"ComputeResourceUpdate",
@@ -4185,6 +5406,50 @@
         }
       }
     },
+    "UpdateConsumableResourceRequest":{
+      "type":"structure",
+      "required":["consumableResource"],
+      "members":{
+        "consumableResource":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the consumable resource to be updated.</p>"
+        },
+        "operation":{
+          "shape":"String",
+          "documentation":"<p>Indicates how the quantity of the consumable resource will be updated. Must be one of:</p> <ul> <li> <p> <code>SET</code> </p> <p>Sets the quantity of the resource to the value specified by the <code>quantity</code> parameter.</p> </li> <li> <p> <code>ADD</code> </p> <p>Increases the quantity of the resource by the value specified by the <code>quantity</code> parameter.</p> </li> <li> <p> <code>REMOVE</code> </p> <p>Reduces the quantity of the resource by the value specified by the <code>quantity</code> parameter.</p> </li> </ul>"
+        },
+        "quantity":{
+          "shape":"Long",
+          "documentation":"<p>The change in the total quantity of the consumable resource. The <code>operation</code> parameter determines whether the value specified here will be the new total quantity, or the amount by which the total quantity will be increased or reduced. Must be a non-negative value.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientRequestToken",
+          "documentation":"<p>If this parameter is specified and two update requests with identical payloads and <code>clientToken</code>s are received, these requests are considered the same request. Both requests will succeed, but the update will only happen once. A <code>clientToken</code> is valid for 8 hours.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateConsumableResourceResponse":{
+      "type":"structure",
+      "required":[
+        "consumableResourceName",
+        "consumableResourceArn"
+      ],
+      "members":{
+        "consumableResourceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the consumable resource to be updated.</p>"
+        },
+        "consumableResourceArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the consumable resource.</p>"
+        },
+        "totalQuantity":{
+          "shape":"Long",
+          "documentation":"<p>The total amount of the consumable resource that is available.</p>"
+        }
+      }
+    },
     "UpdateJobQueueRequest":{
       "type":"structure",
       "required":["jobQueue"],
@@ -4199,7 +5464,7 @@
         },
         "schedulingPolicyArn":{
           "shape":"String",
-          "documentation":"<p>Amazon Resource Name (ARN) of the fair share scheduling policy. Once a job queue is created, the fair share scheduling policy can be replaced but not removed. The format is <code>aws:<i>Partition</i>:batch:<i>Region</i>:<i>Account</i>:scheduling-policy/<i>Name</i> </code>. For example, <code>aws:aws:batch:us-west-2:123456789012:scheduling-policy/MySchedulingPolicy</code>.</p>"
+          "documentation":"<p>Amazon Resource Name (ARN) of the fair-share scheduling policy. Once a job queue is created, the fair-share scheduling policy can be replaced but not removed. The format is <code>aws:<i>Partition</i>:batch:<i>Region</i>:<i>Account</i>:scheduling-policy/<i>Name</i> </code>. For example, <code>aws:aws:batch:us-west-2:123456789012:scheduling-policy/MySchedulingPolicy</code>.</p>"
         },
         "priority":{
           "shape":"Integer",
@@ -4209,6 +5474,10 @@
           "shape":"ComputeEnvironmentOrders",
           "documentation":"<p>Details the set of compute environments mapped to a job queue and their order relative to each other. This is one of the parameters used by the job scheduler to determine which compute environment runs a given job. Compute environments must be in the <code>VALID</code> state before you can associate them with a job queue. All of the compute environments must be either EC2 (<code>EC2</code> or <code>SPOT</code>) or Fargate (<code>FARGATE</code> or <code>FARGATE_SPOT</code>). EC2 and Fargate compute environments can't be mixed.</p> <note> <p>All compute environments that are associated with a job queue must share the same architecture. Batch doesn't support mixing compute environment architecture types in a single job queue.</p> </note>"
         },
+        "serviceEnvironmentOrder":{
+          "shape":"ServiceEnvironmentOrders",
+          "documentation":"<p>The order of the service environment associated with the job queue. Job queues with a higher priority are evaluated first when associated with the same service environment.</p>"
+        },
         "jobStateTimeLimitActions":{
           "shape":"JobStateTimeLimitActions",
           "documentation":"<p>The set of actions that Batch perform on jobs that remain at the head of the job queue in the specified state longer than specified times. Batch will perform each action after <code>maxTimeSeconds</code> has passed. (<b>Note</b>: The minimum value for maxTimeSeconds is 600 (10 minutes) and its maximum value is 86,400 (24 hours).)</p>"
@@ -4234,14 +5503,14 @@
       "members":{
         "terminateJobsOnUpdate":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether jobs are automatically terminated when the computer environment infrastructure is updated. The default value is <code>false</code>.</p>"
+          "documentation":"<p>Specifies whether jobs are automatically terminated when the compute environment infrastructure is updated. The default value is <code>false</code>.</p>"
         },
         "jobExecutionTimeoutMinutes":{
           "shape":"JobExecutionTimeoutMinutes",
           "documentation":"<p>Specifies the job timeout (in minutes) when the compute environment infrastructure is updated. The default value is 30.</p>"
         }
       },
-      "documentation":"<p>Specifies the infrastructure update policy for the compute environment. For more information about infrastructure updates, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p>"
+      "documentation":"<p>Specifies the infrastructure update policy for the Amazon EC2 compute environment. For more information about infrastructure updates, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html\">Updating compute environments</a> in the <i>Batch User Guide</i>.</p>"
     },
     "UpdateSchedulingPolicyRequest":{
       "type":"structure",
@@ -4253,16 +5522,57 @@
         },
         "fairsharePolicy":{
           "shape":"FairsharePolicy",
-          "documentation":"<p>The fair share policy.</p>"
+          "documentation":"<p>The fair-share policy scheduling details.</p>"
         }
       },
       "documentation":"<p>Contains the parameters for <code>UpdateSchedulingPolicy</code>.</p>"
     },
     "UpdateSchedulingPolicyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateServiceEnvironmentRequest":{
+      "type":"structure",
+      "required":["serviceEnvironment"],
+      "members":{
+        "serviceEnvironment":{
+          "shape":"String",
+          "documentation":"<p>The name or ARN of the service environment to update.</p>"
+        },
+        "state":{
+          "shape":"ServiceEnvironmentState",
+          "documentation":"<p>The state of the service environment. </p>"
+        },
+        "capacityLimits":{
+          "shape":"CapacityLimits",
+          "documentation":"<p>The capacity limits for the service environment. This defines the maximum resources that can be used by service jobs in this environment.</p>"
+        }
+      }
+    },
+    "UpdateServiceEnvironmentResponse":{
+      "type":"structure",
+      "required":[
+        "serviceEnvironmentName",
+        "serviceEnvironmentArn"
+      ],
       "members":{
+        "serviceEnvironmentName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service environment that was updated.</p>"
+        },
+        "serviceEnvironmentArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service environment that was updated.</p>"
+        }
       }
     },
+    "UserdataType":{
+      "type":"string",
+      "enum":[
+        "EKS_BOOTSTRAP_SH",
+        "EKS_NODEADM"
+      ]
+    },
     "Volume":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,151 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://bcm-dashboards-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://bcm-dashboards.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/paginators-1.json 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+{
+  "pagination": {
+    "ListDashboards": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dashboards"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/service-2.json 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/service-2.json
--- 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1111 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2025-08-18",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"bcm-dashboards",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceFullName":"AWS Billing and Cost Management Dashboards",
+    "serviceId":"BCM Dashboards",
+    "signatureVersion":"v4",
+    "signingName":"bcm-dashboards",
+    "targetPrefix":"AWSBCMDashboardsService",
+    "uid":"bcm-dashboards-2025-08-18"
+  },
+  "operations":{
+    "CreateDashboard":{
+      "name":"CreateDashboard",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateDashboardRequest"},
+      "output":{"shape":"CreateDashboardResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a new dashboard that can contain multiple widgets displaying cost and usage data. You can add custom widgets or use predefined widgets, arranging them in your preferred layout.</p>"
+    },
+    "DeleteDashboard":{
+      "name":"DeleteDashboard",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteDashboardRequest"},
+      "output":{"shape":"DeleteDashboardResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes a specified dashboard. This action cannot be undone.</p>"
+    },
+    "GetDashboard":{
+      "name":"GetDashboard",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDashboardRequest"},
+      "output":{"shape":"GetDashboardResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves the configuration and metadata of a specified dashboard, including its widgets and layout settings.</p>"
+    },
+    "GetResourcePolicy":{
+      "name":"GetResourcePolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetResourcePolicyRequest"},
+      "output":{"shape":"GetResourcePolicyResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves the resource-based policy attached to a dashboard, showing sharing configurations and permissions.</p>"
+    },
+    "ListDashboards":{
+      "name":"ListDashboards",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDashboardsRequest"},
+      "output":{"shape":"ListDashboardsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Returns a list of all dashboards in your account.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a list of all tags associated with a specified dashboard resource.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Adds or updates tags for a specified dashboard resource.</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Removes specified tags from a dashboard resource.</p>"
+    },
+    "UpdateDashboard":{
+      "name":"UpdateDashboard",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateDashboardRequest"},
+      "output":{"shape":"UpdateDashboardResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Updates an existing dashboard's properties, including its name, description, and widget configurations.</p>"
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>You do not have sufficient permissions to perform this action. Verify your IAM permissions and any resource policies.</p>",
+      "exception":true
+    },
+    "CostAndUsageQuery":{
+      "type":"structure",
+      "required":[
+        "metrics",
+        "timeRange",
+        "granularity"
+      ],
+      "members":{
+        "metrics":{
+          "shape":"MetricNames",
+          "documentation":"<p>The specific cost and usage metrics to retrieve.</p> <note> <p>Valid values for CostAndUsageQuery metrics are <code>AmortizedCost</code>, <code>BlendedCost</code>, <code>NetAmortizedCost</code>, <code>NetUnblendedCost</code>, <code>NormalizedUsageAmount</code>, <code>UnblendedCost</code>, and <code>UsageQuantity</code>.</p> </note>"
+        },
+        "timeRange":{
+          "shape":"DateTimeRange",
+          "documentation":"<p>The time period for which to retrieve data. Can be specified as absolute dates or relative time periods.</p>"
+        },
+        "granularity":{
+          "shape":"Granularity",
+          "documentation":"<p>The granularity of the retrieved data: <code>HOURLY</code>, <code>DAILY</code>, or <code>MONTHLY</code>.</p>"
+        },
+        "groupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>Specifies how to group the retrieved data, such as by <code>SERVICE</code>, <code>ACCOUNT</code>, or <code>TAG</code>.</p>"
+        },
+        "filter":{
+          "shape":"Expression",
+          "documentation":"<p>The filter expression to be applied to the cost and usage data.</p>"
+        }
+      },
+      "documentation":"<p>Defines the parameters for retrieving Amazon Web Services cost and usage data. Includes specifications for metrics, time periods, granularity, grouping dimensions, and filtering conditions.</p>"
+    },
+    "CostCategoryValues":{
+      "type":"structure",
+      "members":{
+        "key":{
+          "shape":"String",
+          "documentation":"<p>The key of the cost category to filter on.</p>"
+        },
+        "values":{
+          "shape":"StringList",
+          "documentation":"<p>The values to match for the specified cost category key.</p>"
+        },
+        "matchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options for cost category values, such as <code>EQUALS</code>, <code>CONTAINS</code>, <code>STARTS_WITH</code>, or <code>ENDS_WITH</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the values and match options for cost category-based filtering in cost and usage queries.</p>"
+    },
+    "CreateDashboardRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "widgets"
+      ],
+      "members":{
+        "name":{
+          "shape":"DashboardName",
+          "documentation":"<p>The name of the dashboard. The name must be unique within your account.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the dashboard's purpose or contents.</p>"
+        },
+        "widgets":{
+          "shape":"WidgetList",
+          "documentation":"<p>An array of widget configurations that define the visualizations to be displayed in the dashboard. Each dashboard can contain up to 20 widgets.</p>"
+        },
+        "resourceTags":{
+          "shape":"ResourceTagList",
+          "documentation":"<p>The tags to apply to the dashboard resource for organization and management.</p>"
+        }
+      }
+    },
+    "CreateDashboardResponse":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the newly created dashboard.</p>"
+        }
+      }
+    },
+    "DashboardArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws[-a-z0-9]*:bcm-dashboards::[0-9]{12}:dashboard/(\\*|[-a-z0-9]+)"
+    },
+    "DashboardName":{
+      "type":"string",
+      "max":50,
+      "min":2,
+      "pattern":"(?!.* {2})[a-zA-Z][a-zA-Z0-9 _-]{0,48}[a-zA-Z0-9_-]"
+    },
+    "DashboardReference":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "name",
+        "type",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the referenced dashboard.</p>"
+        },
+        "name":{
+          "shape":"DashboardName",
+          "documentation":"<p>The name of the referenced dashboard.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the referenced dashboard.</p>"
+        },
+        "type":{
+          "shape":"DashboardType",
+          "documentation":"<p>The dashboard type.</p>"
+        },
+        "createdAt":{
+          "shape":"GenericTimeStamp",
+          "documentation":"<p>The timestamp when the dashboard was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"GenericTimeStamp",
+          "documentation":"<p>The timestamp when the dashboard was last modified.</p>"
+        }
+      },
+      "documentation":"<p>Contains basic information about a dashboard, including its ARN, name, type, and timestamps.</p>"
+    },
+    "DashboardReferenceList":{
+      "type":"list",
+      "member":{"shape":"DashboardReference"}
+    },
+    "DashboardType":{
+      "type":"string",
+      "enum":["CUSTOM"]
+    },
+    "DateTimeRange":{
+      "type":"structure",
+      "required":[
+        "startTime",
+        "endTime"
+      ],
+      "members":{
+        "startTime":{
+          "shape":"DateTimeValue",
+          "documentation":"<p>The start time of the date range for querying data.</p>"
+        },
+        "endTime":{
+          "shape":"DateTimeValue",
+          "documentation":"<p>The end time of the date range for querying data.</p>"
+        }
+      },
+      "documentation":"<p>Defines a time period with explicit start and end times for data queries.</p>"
+    },
+    "DateTimeType":{
+      "type":"string",
+      "enum":[
+        "ABSOLUTE",
+        "RELATIVE"
+      ]
+    },
+    "DateTimeValue":{
+      "type":"structure",
+      "required":[
+        "type",
+        "value"
+      ],
+      "members":{
+        "type":{
+          "shape":"DateTimeType",
+          "documentation":"<p>The type of date/time value: <code>ABSOLUTE</code> for specific dates or <code>RELATIVE</code> for dynamic time periods.</p>"
+        },
+        "value":{
+          "shape":"GenericString",
+          "documentation":"<p>The actual date/time value.</p>"
+        }
+      },
+      "documentation":"<p>Represents a point in time that can be specified as either an absolute date (for example, \"2025-07-01\") or a relative time period using ISO 8601 duration format (for example, \"-P3M\" for three months ago).</p>"
+    },
+    "DeleteDashboardRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard to be deleted.</p>"
+        }
+      }
+    },
+    "DeleteDashboardResponse":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard that was deleted.</p>"
+        }
+      }
+    },
+    "Description":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"(?!.* {2})[ a-zA-Z0-9.,!?;:@#$%&\\-_/\\\\]*"
+    },
+    "Dimension":{
+      "type":"string",
+      "enum":[
+        "AZ",
+        "INSTANCE_TYPE",
+        "LINKED_ACCOUNT",
+        "OPERATION",
+        "PURCHASE_TYPE",
+        "REGION",
+        "SERVICE",
+        "USAGE_TYPE",
+        "USAGE_TYPE_GROUP",
+        "RECORD_TYPE",
+        "RESOURCE_ID",
+        "SUBSCRIPTION_ID",
+        "TAG_KEY",
+        "OPERATING_SYSTEM",
+        "TENANCY",
+        "BILLING_ENTITY",
+        "RESERVATION_ID",
+        "COST_CATEGORY_NAME",
+        "DATABASE_ENGINE",
+        "LEGAL_ENTITY_NAME",
+        "SAVINGS_PLANS_TYPE",
+        "INSTANCE_TYPE_FAMILY",
+        "CACHE_ENGINE",
+        "DEPLOYMENT_OPTION",
+        "SCOPE",
+        "PLATFORM"
+      ]
+    },
+    "DimensionValues":{
+      "type":"structure",
+      "required":[
+        "key",
+        "values"
+      ],
+      "members":{
+        "key":{
+          "shape":"Dimension",
+          "documentation":"<p>The key of the dimension to filter on (for example, <code>SERVICE</code>, <code>USAGE_TYPE</code>, or <code>OPERATION</code>).</p>"
+        },
+        "values":{
+          "shape":"StringList",
+          "documentation":"<p>The values to match for the specified dimension key.</p>"
+        },
+        "matchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options for dimension values, such as <code>EQUALS</code>, <code>CONTAINS</code>, <code>STARTS_WITH</code>, or <code>ENDS_WITH</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the values and match options for dimension-based filtering in cost and usage queries.</p>"
+    },
+    "DisplayConfig":{
+      "type":"structure",
+      "members":{
+        "graph":{
+          "shape":"GraphDisplayConfigMap",
+          "documentation":"<p>The configuration for graphical display of the widget data, including chart type and visual options.</p>"
+        },
+        "table":{
+          "shape":"TableDisplayConfigStruct",
+          "documentation":"<p>The configuration for tabular display of the widget data.</p>"
+        }
+      },
+      "documentation":"<p>Defines how the widget's data should be visualized, including chart type, color schemes, axis configurations, and other display preferences.</p>",
+      "union":true
+    },
+    "Expression":{
+      "type":"structure",
+      "members":{
+        "or":{
+          "shape":"Expressions",
+          "documentation":"<p>A list of expressions to combine with OR logic.</p>"
+        },
+        "and":{
+          "shape":"Expressions",
+          "documentation":"<p>A list of expressions to combine with AND logic.</p>"
+        },
+        "not":{
+          "shape":"Expression",
+          "documentation":"<p>An expression to negate with NOT logic.</p>"
+        },
+        "dimensions":{
+          "shape":"DimensionValues",
+          "documentation":"<p>The dimension values to include in the filter expression.</p>"
+        },
+        "tags":{
+          "shape":"TagValues",
+          "documentation":"<p>The tag values to include in the filter expression.</p>"
+        },
+        "costCategories":{
+          "shape":"CostCategoryValues",
+          "documentation":"<p>The cost category values to include in the filter expression.</p>"
+        }
+      },
+      "documentation":"<p>Defines complex filtering conditions using logical operators (<code>AND</code>, <code>OR</code>, <code>NOT</code>) and various filter types.</p>"
+    },
+    "Expressions":{
+      "type":"list",
+      "member":{"shape":"Expression"}
+    },
+    "GenericString":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\S\\s]*"
+    },
+    "GenericTimeStamp":{"type":"timestamp"},
+    "GetDashboardRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard to retrieve. This is required to uniquely identify the dashboard.</p>"
+        }
+      }
+    },
+    "GetDashboardResponse":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "name",
+        "type",
+        "widgets",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the retrieved dashboard.</p>"
+        },
+        "name":{
+          "shape":"DashboardName",
+          "documentation":"<p>The name of the retrieved dashboard.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the retrieved dashboard.</p>"
+        },
+        "type":{
+          "shape":"DashboardType",
+          "documentation":"<p>Indicates the dashboard type.</p>"
+        },
+        "widgets":{
+          "shape":"WidgetList",
+          "documentation":"<p>An array of widget configurations that make up the dashboard.</p>"
+        },
+        "createdAt":{
+          "shape":"GenericTimeStamp",
+          "documentation":"<p>The timestamp when the dashboard was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"GenericTimeStamp",
+          "documentation":"<p>The timestamp when the dashboard was last modified.</p>"
+        }
+      }
+    },
+    "GetResourcePolicyRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard whose resource-based policy you want to retrieve.</p>"
+        }
+      }
+    },
+    "GetResourcePolicyResponse":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "policyDocument"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard for which the resource-based policy was retrieved.</p>"
+        },
+        "policyDocument":{
+          "shape":"GenericString",
+          "documentation":"<p>The JSON policy document that represents the dashboard's resource-based policy.</p>"
+        }
+      }
+    },
+    "Granularity":{
+      "type":"string",
+      "enum":[
+        "HOURLY",
+        "DAILY",
+        "MONTHLY"
+      ]
+    },
+    "GraphDisplayConfig":{
+      "type":"structure",
+      "required":["visualType"],
+      "members":{
+        "visualType":{
+          "shape":"VisualType",
+          "documentation":"<p>The type of visualization to use for the data.</p>"
+        }
+      },
+      "documentation":"<p>Defines the visual representation settings for widget data, including the visualization type, styling options, and display preferences for different metric types.</p>"
+    },
+    "GraphDisplayConfigMap":{
+      "type":"map",
+      "key":{"shape":"GenericString"},
+      "value":{"shape":"GraphDisplayConfig"}
+    },
+    "GroupDefinition":{
+      "type":"structure",
+      "required":["key"],
+      "members":{
+        "key":{
+          "shape":"GroupDefinitionKeyString",
+          "documentation":"<p>The key to use for grouping cost and usage data.</p>"
+        },
+        "type":{
+          "shape":"GroupDefinitionType",
+          "documentation":"<p>The type of grouping to apply.</p>"
+        }
+      },
+      "documentation":"<p>Specifies how to group cost and usage data.</p>"
+    },
+    "GroupDefinitionKeyString":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[\\S\\s]*"
+    },
+    "GroupDefinitionType":{
+      "type":"string",
+      "enum":[
+        "DIMENSION",
+        "TAG",
+        "COST_CATEGORY"
+      ]
+    },
+    "GroupDefinitions":{
+      "type":"list",
+      "member":{"shape":"GroupDefinition"}
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>An internal error occurred while processing the request. Retry your request. If the problem persists, contact Amazon Web Services Support.</p>",
+      "exception":true,
+      "fault":true
+    },
+    "ListDashboardsRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. The default value is 20.</p>"
+        },
+        "nextToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token for the next page of results. Use the value returned in the previous response.</p>"
+        }
+      }
+    },
+    "ListDashboardsResponse":{
+      "type":"structure",
+      "required":["dashboards"],
+      "members":{
+        "dashboards":{
+          "shape":"DashboardReferenceList",
+          "documentation":"<p>An array of dashboard references, containing basic information about each dashboard.</p>"
+        },
+        "nextToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. Not returned if there are no more results to retrieve.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The unique identifier for the resource.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "resourceTags":{
+          "shape":"ResourceTagList",
+          "documentation":"<p>The list of tags associated with the specified dashboard resource.</p>"
+        }
+      }
+    },
+    "MatchOption":{
+      "type":"string",
+      "enum":[
+        "EQUALS",
+        "ABSENT",
+        "STARTS_WITH",
+        "ENDS_WITH",
+        "CONTAINS",
+        "GREATER_THAN_OR_EQUAL",
+        "CASE_SENSITIVE",
+        "CASE_INSENSITIVE"
+      ]
+    },
+    "MatchOptions":{
+      "type":"list",
+      "member":{"shape":"MatchOption"}
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "MetricName":{
+      "type":"string",
+      "enum":[
+        "AmortizedCost",
+        "BlendedCost",
+        "NetAmortizedCost",
+        "NetUnblendedCost",
+        "NormalizedUsageAmount",
+        "UnblendedCost",
+        "UsageQuantity",
+        "SpendCoveredBySavingsPlans",
+        "Hour",
+        "Unit",
+        "Cost"
+      ]
+    },
+    "MetricNames":{
+      "type":"list",
+      "member":{"shape":"MetricName"}
+    },
+    "NextPageToken":{
+      "type":"string",
+      "max":8192,
+      "min":1,
+      "pattern":"[\\S\\s]*"
+    },
+    "QueryParameters":{
+      "type":"structure",
+      "members":{
+        "costAndUsage":{
+          "shape":"CostAndUsageQuery",
+          "documentation":"<p>The parameters for querying cost and usage data, including metrics, time range, granularity, grouping dimensions, and filters.</p>"
+        },
+        "savingsPlansCoverage":{
+          "shape":"SavingsPlansCoverageQuery",
+          "documentation":"<p>The parameters for querying Savings Plans coverage data, showing how much of your eligible compute usage is covered by Savings Plans.</p>"
+        },
+        "savingsPlansUtilization":{
+          "shape":"SavingsPlansUtilizationQuery",
+          "documentation":"<p>The parameters for querying Savings Plans utilization data, showing how effectively your Savings Plans are being used.</p>"
+        },
+        "reservationCoverage":{
+          "shape":"ReservationCoverageQuery",
+          "documentation":"<p>The parameters for querying Reserved Instance coverage data, showing how much of your eligible instance usage is covered by Reserved Instances.</p>"
+        },
+        "reservationUtilization":{
+          "shape":"ReservationUtilizationQuery",
+          "documentation":"<p>The parameters for querying Reserved Instance utilization data, showing how effectively your Reserved Instances are being used.</p>"
+        }
+      },
+      "documentation":"<p>Defines the data retrieval parameters for a widget.</p>",
+      "union":true
+    },
+    "ReservationCoverageQuery":{
+      "type":"structure",
+      "required":["timeRange"],
+      "members":{
+        "timeRange":{"shape":"DateTimeRange"},
+        "groupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>Specifies how to group the Reserved Instance coverage data, such as by service, Region, or instance type.</p>"
+        },
+        "granularity":{
+          "shape":"Granularity",
+          "documentation":"<p>The time granularity of the retrieved data: <code>HOURLY</code>, <code>DAILY</code>, or <code>MONTHLY</code>.</p>"
+        },
+        "filter":{"shape":"Expression"},
+        "metrics":{
+          "shape":"MetricNames",
+          "documentation":"<p>The coverage metrics to include in the results.</p> <note> <p>Valid values for ReservationCoverageQuery metrics are <code>Hour</code>, <code>Unit</code>, and <code>Cost</code>.</p> </note>"
+        }
+      },
+      "documentation":"<p>Defines the parameters for querying Reserved Instance coverage data, including grouping options, metrics, and sorting preferences.</p>"
+    },
+    "ReservationUtilizationQuery":{
+      "type":"structure",
+      "required":["timeRange"],
+      "members":{
+        "timeRange":{"shape":"DateTimeRange"},
+        "groupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>Specifies how to group the Reserved Instance utilization data, such as by service, Region, or instance type.</p>"
+        },
+        "granularity":{
+          "shape":"Granularity",
+          "documentation":"<p>The time granularity of the retrieved data: <code>HOURLY</code>, <code>DAILY</code>, or <code>MONTHLY</code>.</p>"
+        },
+        "filter":{"shape":"Expression"}
+      },
+      "documentation":"<p>Defines the parameters for querying Reserved Instance utilization data, including grouping options and time granularity.</p>"
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>The specified resource (dashboard, policy, or widget) was not found. Verify the ARN and try again.</p>",
+      "exception":true
+    },
+    "ResourceTag":{
+      "type":"structure",
+      "required":[
+        "key",
+        "value"
+      ],
+      "members":{
+        "key":{
+          "shape":"ResourceTagKey",
+          "documentation":"<p>The key of the tag to be attached to the dashboard resource.</p>"
+        },
+        "value":{
+          "shape":"ResourceTagValue",
+          "documentation":"<p>The value of the tag to be attached to the dashboard resource.</p>"
+        }
+      },
+      "documentation":"<p>A key-value pair that can be attached to a dashboard for organization and management purposes.</p>"
+    },
+    "ResourceTagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\S\\s]*"
+    },
+    "ResourceTagKeyList":{
+      "type":"list",
+      "member":{"shape":"ResourceTagKey"},
+      "max":200,
+      "min":0
+    },
+    "ResourceTagList":{
+      "type":"list",
+      "member":{"shape":"ResourceTag"},
+      "max":200,
+      "min":0
+    },
+    "ResourceTagValue":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"[\\S\\s]*"
+    },
+    "SavingsPlansCoverageQuery":{
+      "type":"structure",
+      "required":["timeRange"],
+      "members":{
+        "timeRange":{"shape":"DateTimeRange"},
+        "metrics":{
+          "shape":"MetricNames",
+          "documentation":"<p>The coverage metrics to include in the results.</p> <note> <p>Valid value for SavingsPlansCoverageQuery metrics is <code>SpendCoveredBySavingsPlans</code>.</p> </note>"
+        },
+        "granularity":{
+          "shape":"Granularity",
+          "documentation":"<p>The time granularity of the retrieved data: <code>HOURLY</code>, <code>DAILY</code>, or <code>MONTHLY</code>.</p>"
+        },
+        "groupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>Specifies how to group the Savings Plans coverage data, such as by service or instance family.</p>"
+        },
+        "filter":{"shape":"Expression"}
+      },
+      "documentation":"<p>Defines the parameters for querying Savings Plans coverage data, including metrics, grouping options, and time granularity.</p>"
+    },
+    "SavingsPlansUtilizationQuery":{
+      "type":"structure",
+      "required":["timeRange"],
+      "members":{
+        "timeRange":{"shape":"DateTimeRange"},
+        "granularity":{
+          "shape":"Granularity",
+          "documentation":"<p>The time granularity of the retrieved data: HOURLY, DAILY, or MONTHLY.</p>"
+        },
+        "filter":{"shape":"Expression"}
+      },
+      "documentation":"<p>Defines the parameters for querying Savings Plans utilization data, including time granularity and sorting preferences.</p>"
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>The request would exceed service quotas. For example, attempting to create more than 20 widgets in a dashboard or exceeding the maximum number of dashboards per account.</p>",
+      "exception":true
+    },
+    "String":{"type":"string"},
+    "StringList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "TableDisplayConfigStruct":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Configuration structure for customizing the tabular display of widget data.</p>"
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "resourceTags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The unique identifier for the resource.</p>"
+        },
+        "resourceTags":{
+          "shape":"ResourceTagList",
+          "documentation":"<p>The tags to add to the dashboard resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValues":{
+      "type":"structure",
+      "members":{
+        "key":{
+          "shape":"String",
+          "documentation":"<p>The key of the tag to filter on.</p>"
+        },
+        "values":{
+          "shape":"StringList",
+          "documentation":"<p>The values to match for the specified tag key.</p>"
+        },
+        "matchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options for tag values, such as <code>EQUALS</code>, <code>CONTAINS</code>, <code>STARTS_WITH</code>, or <code>ENDS_WITH</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies tag-based filtering options for cost and usage queries.</p>"
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>The request was denied due to request throttling. Reduce the frequency of requests and use exponential backoff.</p>",
+      "exception":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "resourceTagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The unique identifier for the resource.</p>"
+        },
+        "resourceTagKeys":{
+          "shape":"ResourceTagKeyList",
+          "documentation":"<p>The keys of the tags to remove from the dashboard resource.</p>"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateDashboardRequest":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the dashboard to update.</p>"
+        },
+        "name":{
+          "shape":"DashboardName",
+          "documentation":"<p>The new name for the dashboard. If not specified, the existing name is retained.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The new description for the dashboard. If not specified, the existing description is retained.</p>"
+        },
+        "widgets":{
+          "shape":"WidgetList",
+          "documentation":"<p>The updated array of widget configurations for the dashboard. Replaces all existing widgets.</p>"
+        }
+      }
+    },
+    "UpdateDashboardResponse":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"DashboardArn",
+          "documentation":"<p>The ARN of the updated dashboard.</p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p>The input parameters do not satisfy the requirements. Check the error message for specific validation details.</p>",
+      "exception":true
+    },
+    "VisualType":{
+      "type":"string",
+      "enum":[
+        "LINE",
+        "BAR",
+        "STACK"
+      ]
+    },
+    "Widget":{
+      "type":"structure",
+      "required":[
+        "title",
+        "configs"
+      ],
+      "members":{
+        "title":{
+          "shape":"WidgetTitle",
+          "documentation":"<p>The title of the widget.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the widget's purpose or the data it displays.</p>"
+        },
+        "width":{
+          "shape":"WidgetWidth",
+          "documentation":"<p>The width of the widget in column spans. The dashboard layout consists of a grid system.</p>"
+        },
+        "height":{
+          "shape":"WidgetHeight",
+          "documentation":"<p>The height of the widget in row spans. The dashboard layout consists of a grid system.</p>"
+        },
+        "horizontalOffset":{
+          "shape":"Integer",
+          "documentation":"<p>Specifies the starting column position of the widget in the dashboard's grid layout. Used to control widget placement.</p>"
+        },
+        "configs":{
+          "shape":"WidgetConfigList",
+          "documentation":"<p>An array of configurations that define the data queries and display settings for the widget.</p>"
+        }
+      },
+      "documentation":"<p>A configurable visualization component within a dashboard that displays specific cost and usage metrics. Each widget can show data as charts or tables and includes settings for data querying, filtering, and visual presentation.</p>"
+    },
+    "WidgetConfig":{
+      "type":"structure",
+      "required":[
+        "queryParameters",
+        "displayConfig"
+      ],
+      "members":{
+        "queryParameters":{
+          "shape":"QueryParameters",
+          "documentation":"<p>The parameters that define what data the widget should retrieve and how it should be filtered or grouped.</p>"
+        },
+        "displayConfig":{
+          "shape":"DisplayConfig",
+          "documentation":"<p>The configuration that determines how the retrieved data should be visualized in the widget.</p>"
+        }
+      },
+      "documentation":"<p>Defines the complete configuration for a widget, including data retrieval settings and visualization preferences.</p>"
+    },
+    "WidgetConfigList":{
+      "type":"list",
+      "member":{"shape":"WidgetConfig"},
+      "max":2,
+      "min":1
+    },
+    "WidgetHeight":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":4
+    },
+    "WidgetList":{
+      "type":"list",
+      "member":{"shape":"Widget"},
+      "max":20,
+      "min":0
+    },
+    "WidgetTitle":{
+      "type":"string",
+      "max":50,
+      "min":2,
+      "pattern":"(?!.* {2})[a-zA-Z0-9_-][ a-zA-Z0-9_-]*[a-zA-Z0-9_-]"
+    },
+    "WidgetWidth":{
+      "type":"integer",
+      "box":true,
+      "max":6,
+      "min":2
+    }
+  },
+  "documentation":"<p>Amazon Web Services Billing and Cost Management Dashboards is a service that enables you to create, manage, and share dashboards that combine multiple visualizations of your Amazon Web Services cost and usage data. You can combine multiple data sources including Cost Explorer, Savings Plans, and Reserved Instance metrics into unified dashboards, helping you analyze spending patterns and share cost insights across your organization.</p> <p>You can use the Amazon Web Services Billing and Cost Management Dashboards API to programmatically create, manage, and share dashboards. This includes creating custom dashboards, configuring widgets, managing dashboard permissions, and sharing dashboards across accounts in your organization.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/waiters-2.json 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bcm-dashboards/2025-08-18/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-dashboards/2025-08-18/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-data-exports/2023-11-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/service-2.json 2.31.35-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-pricing-calculator/2024-06-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -32,7 +32,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Create Compute Savings Plans, EC2 Instance Savings Plans, or EC2 Reserved Instances commitments that you want to model in a Bill Scenario. </p>",
+      "documentation":"<p> Create Compute Savings Plans, EC2 Instance Savings Plans, or EC2 Reserved Instances commitments that you want to model in a Bill Scenario. </p> <note> <p>The <code>BatchCreateBillScenarioCommitmentModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:CreateBillScenarioCommitmentModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchCreateBillScenarioUsageModification":{
@@ -53,7 +53,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Create Amazon Web Services service usage that you want to model in a Bill Scenario. </p>",
+      "documentation":"<p> Create Amazon Web Services service usage that you want to model in a Bill Scenario. </p> <note> <p>The <code>BatchCreateBillScenarioUsageModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:CreateBillScenarioUsageModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchCreateWorkloadEstimateUsage":{
@@ -74,7 +74,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Create Amazon Web Services service usage that you want to model in a Workload Estimate. </p>",
+      "documentation":"<p> Create Amazon Web Services service usage that you want to model in a Workload Estimate. </p> <note> <p>The <code>BatchCreateWorkloadEstimateUsage</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:CreateWorkloadEstimateUsage</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchDeleteBillScenarioCommitmentModification":{
@@ -86,6 +86,7 @@
       "input":{"shape":"BatchDeleteBillScenarioCommitmentModificationRequest"},
       "output":{"shape":"BatchDeleteBillScenarioCommitmentModificationResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"DataUnavailableException"},
         {"shape":"InternalServerException"},
@@ -93,7 +94,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Delete commitment that you have created in a Bill Scenario. You can only delete a commitment that you had added and cannot model deletion (or removal) of a existing commitment. If you want model deletion of an existing commitment, see the negate <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BillScenarioCommitmentModificationAction.html\"> BillScenarioCommitmentModificationAction</a> of <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchCreateBillScenarioUsageModification.html\"> BatchCreateBillScenarioCommitmentModification</a> operation. </p>",
+      "documentation":"<p> Delete commitment that you have created in a Bill Scenario. You can only delete a commitment that you had added and cannot model deletion (or removal) of a existing commitment. If you want model deletion of an existing commitment, see the negate <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BillScenarioCommitmentModificationAction.html\"> BillScenarioCommitmentModificationAction</a> of <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchCreateBillScenarioUsageModification.html\"> BatchCreateBillScenarioCommitmentModification</a> operation. </p> <note> <p>The <code>BatchDeleteBillScenarioCommitmentModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:DeleteBillScenarioCommitmentModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchDeleteBillScenarioUsageModification":{
@@ -105,6 +106,7 @@
       "input":{"shape":"BatchDeleteBillScenarioUsageModificationRequest"},
       "output":{"shape":"BatchDeleteBillScenarioUsageModificationResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"DataUnavailableException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -113,7 +115,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Delete usage that you have created in a Bill Scenario. You can only delete usage that you had added and cannot model deletion (or removal) of a existing usage. If you want model removal of an existing usage, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchUpdateBillScenarioUsageModification.html\"> BatchUpdateBillScenarioUsageModification</a>. </p>",
+      "documentation":"<p> Delete usage that you have created in a Bill Scenario. You can only delete usage that you had added and cannot model deletion (or removal) of a existing usage. If you want model removal of an existing usage, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchUpdateBillScenarioUsageModification.html\"> BatchUpdateBillScenarioUsageModification</a>. </p> <note> <p>The <code>BatchDeleteBillScenarioUsageModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:DeleteBillScenarioUsageModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchDeleteWorkloadEstimateUsage":{
@@ -133,7 +135,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Delete usage that you have created in a Workload estimate. You can only delete usage that you had added and cannot model deletion (or removal) of a existing usage. If you want model removal of an existing usage, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchUpdateWorkloadEstimateUsage.html\"> BatchUpdateWorkloadEstimateUsage</a>. </p>",
+      "documentation":"<p> Delete usage that you have created in a Workload estimate. You can only delete usage that you had added and cannot model deletion (or removal) of a existing usage. If you want model removal of an existing usage, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AWSBCMPricingCalculator_BatchUpdateWorkloadEstimateUsage.html\"> BatchUpdateWorkloadEstimateUsage</a>. </p> <note> <p>The <code>BatchDeleteWorkloadEstimateUsage</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:DeleteWorkloadEstimateUsage</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchUpdateBillScenarioCommitmentModification":{
@@ -145,6 +147,7 @@
       "input":{"shape":"BatchUpdateBillScenarioCommitmentModificationRequest"},
       "output":{"shape":"BatchUpdateBillScenarioCommitmentModificationResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"DataUnavailableException"},
         {"shape":"InternalServerException"},
@@ -152,7 +155,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Update a newly added or existing commitment. You can update the commitment group based on a commitment ID and a Bill scenario ID. </p>",
+      "documentation":"<p> Update a newly added or existing commitment. You can update the commitment group based on a commitment ID and a Bill scenario ID. </p> <note> <p>The <code>BatchUpdateBillScenarioCommitmentModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:UpdateBillScenarioCommitmentModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchUpdateBillScenarioUsageModification":{
@@ -164,6 +167,7 @@
       "input":{"shape":"BatchUpdateBillScenarioUsageModificationRequest"},
       "output":{"shape":"BatchUpdateBillScenarioUsageModificationResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"DataUnavailableException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -172,7 +176,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Update a newly added or existing usage lines. You can update the usage amounts, usage hour, and usage group based on a usage ID and a Bill scenario ID. </p>",
+      "documentation":"<p> Update a newly added or existing usage lines. You can update the usage amounts, usage hour, and usage group based on a usage ID and a Bill scenario ID. </p> <note> <p>The <code>BatchUpdateBillScenarioUsageModification</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:UpdateBillScenarioUsageModification</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "BatchUpdateWorkloadEstimateUsage":{
@@ -192,7 +196,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Update a newly added or existing usage lines. You can update the usage amounts and usage group based on a usage ID and a Workload estimate ID. </p>",
+      "documentation":"<p> Update a newly added or existing usage lines. You can update the usage amounts and usage group based on a usage ID and a Workload estimate ID. </p> <note> <p>The <code>BatchUpdateWorkloadEstimateUsage</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>bcm-pricing-calculator:UpdateWorkloadEstimateUsage</code> in your policies.</p> </note>",
       "idempotent":true
     },
     "CreateBillEstimate":{
@@ -283,6 +287,7 @@
       "input":{"shape":"DeleteBillScenarioRequest"},
       "output":{"shape":"DeleteBillScenarioResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"DataUnavailableException"},
         {"shape":"InternalServerException"},
@@ -361,7 +366,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Retrieves the current preferences for the Amazon Web Services Cost Explorer service. </p>"
+      "documentation":"<p> Retrieves the current preferences for Pricing Calculator. </p>"
     },
     "GetWorkloadEstimate":{
       "name":"GetWorkloadEstimate",
@@ -666,7 +671,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Updates the preferences for the Amazon Web Services Cost Explorer service. </p>",
+      "documentation":"<p> Updates the preferences for Pricing Calculator. </p>",
       "idempotent":true
     },
     "UpdateWorkloadEstimate":{
@@ -2001,7 +2006,8 @@
       "enum":[
         "READY",
         "LOCKED",
-        "FAILED"
+        "FAILED",
+        "STALE"
       ]
     },
     "BillScenarioSummaries":{
@@ -2575,6 +2581,10 @@
         "memberAccountRateTypeSelections":{
           "shape":"RateTypes",
           "documentation":"<p> The preferred rate types for member accounts. </p>"
+        },
+        "standaloneAccountRateTypeSelections":{
+          "shape":"RateTypes",
+          "documentation":"<p> The preferred rate types for a standalone account. </p>"
         }
       }
     },
@@ -2920,11 +2930,11 @@
         },
         "createdAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter bill estimates based on their creation date. </p>"
+          "documentation":"<p> Filter bill estimates based on the creation date. </p>"
         },
         "expiresAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter bill estimates based on their expiration date. </p>"
+          "documentation":"<p> Filter bill estimates based on the expiration date. </p>"
         },
         "nextToken":{
           "shape":"NextPageToken",
@@ -3061,11 +3071,11 @@
         },
         "createdAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter bill scenarios based on their creation date. </p>"
+          "documentation":"<p> Filter bill scenarios based on the creation date. </p>"
         },
         "expiresAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter bill scenarios based on their expiration date. </p>"
+          "documentation":"<p> Filter bill scenarios based on the expiration date. </p>"
         },
         "nextToken":{
           "shape":"NextPageToken",
@@ -3172,7 +3182,7 @@
           "documentation":"<p> A token to retrieve the next page of results. </p>"
         },
         "maxResults":{
-          "shape":"MaxResults",
+          "shape":"WorkloadEstimateUsageMaxResults",
           "documentation":"<p> The maximum number of results to return per page. </p>"
         }
       }
@@ -3232,11 +3242,11 @@
       "members":{
         "createdAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter workload estimates based on their creation date. </p>"
+          "documentation":"<p> Filter workload estimates based on the creation date. </p>"
         },
         "expiresAtFilter":{
           "shape":"FilterTimestamp",
-          "documentation":"<p> Filter workload estimates based on their expiration date. </p>"
+          "documentation":"<p> Filter workload estimates based on the expiration date. </p>"
         },
         "filters":{
           "shape":"ListWorkloadEstimatesFilters",
@@ -3276,7 +3286,8 @@
     "MaxResults":{
       "type":"integer",
       "box":true,
-      "max":25
+      "max":25,
+      "min":1
     },
     "NegateReservedInstanceAction":{
       "type":"structure",
@@ -3321,13 +3332,14 @@
       "type":"string",
       "enum":[
         "BEFORE_DISCOUNTS",
-        "AFTER_DISCOUNTS"
+        "AFTER_DISCOUNTS",
+        "AFTER_DISCOUNTS_AND_COMMITMENTS"
       ]
     },
     "RateTypes":{
       "type":"list",
       "member":{"shape":"RateType"},
-      "max":2,
+      "max":3,
       "min":1
     },
     "ReservedInstanceInstanceCount":{
@@ -3626,6 +3638,10 @@
         "memberAccountRateTypeSelections":{
           "shape":"RateTypes",
           "documentation":"<p> The updated preferred rate types for member accounts. </p>"
+        },
+        "standaloneAccountRateTypeSelections":{
+          "shape":"RateTypes",
+          "documentation":"<p> The updated preferred rate types for a standalone account. </p>"
         }
       }
     },
@@ -3639,6 +3655,10 @@
         "memberAccountRateTypeSelections":{
           "shape":"RateTypes",
           "documentation":"<p> The updated preferred rate types for member accounts. </p>"
+        },
+        "standaloneAccountRateTypeSelections":{
+          "shape":"RateTypes",
+          "documentation":"<p> The updated preferred rate types for a standalone account. </p>"
         }
       }
     },
@@ -3851,7 +3871,8 @@
       "type":"string",
       "enum":[
         "BEFORE_DISCOUNTS",
-        "AFTER_DISCOUNTS"
+        "AFTER_DISCOUNTS",
+        "AFTER_DISCOUNTS_AND_COMMITMENTS"
       ]
     },
     "WorkloadEstimateStatus":{
@@ -3986,6 +4007,12 @@
       "type":"list",
       "member":{"shape":"WorkloadEstimateUsageItem"}
     },
+    "WorkloadEstimateUsageMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":300,
+      "min":1
+    },
     "WorkloadEstimateUsageQuantity":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,151 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://bcm-recommended-actions-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://bcm-recommended-actions.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/paginators-1.json 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+{
+  "pagination": {
+    "ListRecommendedActions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "recommendedActions"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/service-2.json 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,328 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2024-11-14",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"bcm-recommended-actions",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceFullName":"AWS Billing and Cost Management Recommended Actions",
+    "serviceId":"BCM Recommended Actions",
+    "signatureVersion":"v4",
+    "signingName":"bcm-recommended-actions",
+    "targetPrefix":"AWSBillingAndCostManagementRecommendedActions",
+    "uid":"bcm-recommended-actions-2024-11-14"
+  },
+  "operations":{
+    "ListRecommendedActions":{
+      "name":"ListRecommendedActions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListRecommendedActionsRequest"},
+      "output":{"shape":"ListRecommendedActionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of recommended actions that match the filter criteria.</p>"
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
+      "exception":true
+    },
+    "AccountId":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"[0-9]{12}"
+    },
+    "ActionFilter":{
+      "type":"structure",
+      "required":[
+        "key",
+        "matchOption",
+        "values"
+      ],
+      "members":{
+        "key":{
+          "shape":"FilterName",
+          "documentation":"<p>The category to filter on. Valid values are <code>FEATURE</code> for feature type, <code>SEVERITY</code> for severity level, and <code>TYPE</code> for recommendation type.</p>"
+        },
+        "matchOption":{
+          "shape":"MatchOption",
+          "documentation":"<p>Specifies how to apply the filter. Use <code>EQUALS</code> to include matching results or <code>NOT_EQUALS</code> to exclude matching results.</p>"
+        },
+        "values":{
+          "shape":"FilterValues",
+          "documentation":"<p>One or more values to match against the specified key.</p>"
+        }
+      },
+      "documentation":"<p>Describes a filter that returns a more specific list of recommended actions.</p>"
+    },
+    "ActionFilterList":{
+      "type":"list",
+      "member":{"shape":"ActionFilter"}
+    },
+    "ActionType":{
+      "type":"string",
+      "enum":[
+        "ADD_ALTERNATE_BILLING_CONTACT",
+        "CREATE_ANOMALY_MONITOR",
+        "CREATE_BUDGET",
+        "ENABLE_COST_OPTIMIZATION_HUB",
+        "MIGRATE_TO_GRANULAR_PERMISSIONS",
+        "PAYMENTS_DUE",
+        "PAYMENTS_PAST_DUE",
+        "REVIEW_ANOMALIES",
+        "REVIEW_BUDGET_ALERTS",
+        "REVIEW_BUDGETS_EXCEEDED",
+        "REVIEW_EXPIRING_RI",
+        "REVIEW_EXPIRING_SP",
+        "REVIEW_FREETIER_USAGE_ALERTS",
+        "REVIEW_SAVINGS_OPPORTUNITY_RECOMMENDATIONS",
+        "UPDATE_EXPIRED_PAYMENT_METHOD",
+        "UPDATE_INVALID_PAYMENT_METHOD",
+        "UPDATE_TAX_EXEMPTION_CERTIFICATE",
+        "UPDATE_TAX_REGISTRATION_NUMBER"
+      ]
+    },
+    "Context":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"String"}
+    },
+    "Feature":{
+      "type":"string",
+      "enum":[
+        "ACCOUNT",
+        "BUDGETS",
+        "COST_ANOMALY_DETECTION",
+        "COST_OPTIMIZATION_HUB",
+        "FREE_TIER",
+        "IAM",
+        "PAYMENTS",
+        "RESERVATIONS",
+        "SAVINGS_PLANS",
+        "TAX_SETTINGS"
+      ]
+    },
+    "FilterName":{
+      "type":"string",
+      "enum":[
+        "FEATURE",
+        "SEVERITY",
+        "TYPE"
+      ]
+    },
+    "FilterValue":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":".*[\\S\\s]*.*"
+    },
+    "FilterValues":{
+      "type":"list",
+      "member":{"shape":"FilterValue"},
+      "min":1
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>An unexpected error occurred during the processing of your request.</p>",
+      "exception":true,
+      "fault":true
+    },
+    "ListRecommendedActionsRequest":{
+      "type":"structure",
+      "members":{
+        "filter":{
+          "shape":"RequestFilter",
+          "documentation":"<p>The criteria that you want all returned recommended actions to match.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token that indicates the next set of results that you want to retrieve.</p>"
+        }
+      }
+    },
+    "ListRecommendedActionsResponse":{
+      "type":"structure",
+      "required":["recommendedActions"],
+      "members":{
+        "recommendedActions":{
+          "shape":"RecommendedActions",
+          "documentation":"<p>The list of recommended actions that satisfy the filter criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token that indicates the next set of results that you want to retrieve.</p>"
+        }
+      }
+    },
+    "MatchOption":{
+      "type":"string",
+      "enum":[
+        "EQUALS",
+        "NOT_EQUALS"
+      ]
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "NextStep":{"type":"string"},
+    "NextSteps":{
+      "type":"list",
+      "member":{"shape":"NextStep"}
+    },
+    "NextToken":{
+      "type":"string",
+      "max":8192,
+      "min":1,
+      "pattern":"[\\S\\s]*"
+    },
+    "RecommendedAction":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"String",
+          "documentation":"<p>The ID for the recommended action.</p>"
+        },
+        "type":{
+          "shape":"ActionType",
+          "documentation":"<p>The type of action you can take by adopting the recommended action.</p>"
+        },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The account that the recommended action is for.</p>"
+        },
+        "severity":{
+          "shape":"Severity",
+          "documentation":"<p>The severity associated with the recommended action.</p>"
+        },
+        "feature":{
+          "shape":"Feature",
+          "documentation":"<p>The feature associated with the recommended action.</p>"
+        },
+        "context":{
+          "shape":"Context",
+          "documentation":"<p>Context that applies to the recommended action.</p>"
+        },
+        "nextSteps":{
+          "shape":"NextSteps",
+          "documentation":"<p>The possible next steps to execute the recommended action.</p>"
+        },
+        "lastUpdatedTimeStamp":{
+          "shape":"String",
+          "documentation":"<p>The time when the recommended action status was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Describes a specific recommended action.</p>"
+    },
+    "RecommendedActions":{
+      "type":"list",
+      "member":{"shape":"RecommendedAction"}
+    },
+    "RequestFilter":{
+      "type":"structure",
+      "members":{
+        "actions":{
+          "shape":"ActionFilterList",
+          "documentation":"<p>A list of action filters that define criteria for filtering results. Each filter specifies a key, match option, and corresponding values to filter on.</p>"
+        }
+      },
+      "documentation":"<p>Enables filtering of results based on specified action criteria. You can define multiple action filters to refine results using combinations of feature type, severity level, and recommendation type.</p>"
+    },
+    "Severity":{
+      "type":"string",
+      "enum":[
+        "INFO",
+        "WARNING",
+        "CRITICAL"
+      ]
+    },
+    "String":{"type":"string"},
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "exception":true
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "reason"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>Provides a single, overarching explanation for the validation failure.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>Lists each problematic field and why it failed validation.</p>"
+        }
+      },
+      "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>",
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "message"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>Provides the name of the field that failed validation.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Provides a message explaining why the field failed validation.</p>"
+        }
+      },
+      "documentation":"<p>Provides specific details about why a particular field failed validation.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "unknownOperation",
+        "cannotParse",
+        "fieldValidationFailed",
+        "other"
+      ]
+    }
+  },
+  "documentation":"<p>You can use the Billing and Cost Management Recommended Actions API to programmatically query your best practices and recommendations to optimize your costs.</p> <p>The Billing and Cost Management Recommended Actions API provides the following endpoint:</p> <ul> <li> <p> https://bcm-recommended-actions.us-east-1.api.aws</p> </li> </ul>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/waiters-2.json 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bcm-recommended-actions/2024-11-14/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/paginators-1.json 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -71,6 +71,36 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "promptRouterSummaries"
+    },
+    "ListCustomModelDeployments": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "modelDeploymentSummaries"
+    },
+    "ListAutomatedReasoningPolicies": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "automatedReasoningPolicySummaries"
+    },
+    "ListAutomatedReasoningPolicyBuildWorkflows": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "automatedReasoningPolicyBuildWorkflowSummaries"
+    },
+    "ListAutomatedReasoningPolicyTestCases": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "testCases"
+    },
+    "ListAutomatedReasoningPolicyTestResults": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "testResults"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/service-2.json 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock/2023-04-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock/2023-04-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,7 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-04-20",
-    "auth":["aws.auth#sigv4"],
+    "auth":[
+      "aws.auth#sigv4",
+      "smithy.api#httpBearerAuth"
+    ],
     "endpointPrefix":"bedrock",
     "protocol":"rest-json",
     "protocols":["rest-json"],
@@ -32,6 +35,133 @@
       ],
       "documentation":"<p>Deletes a batch of evaluation jobs. An evaluation job can only be deleted if it has following status <code>FAILED</code>, <code>COMPLETED</code>, and <code>STOPPED</code>. You can request up to 25 model evaluation jobs be deleted in a single request.</p>"
     },
+    "CancelAutomatedReasoningPolicyBuildWorkflow":{
+      "name":"CancelAutomatedReasoningPolicyBuildWorkflow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/cancel",
+        "responseCode":202
+      },
+      "input":{"shape":"CancelAutomatedReasoningPolicyBuildWorkflowRequest"},
+      "output":{"shape":"CancelAutomatedReasoningPolicyBuildWorkflowResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Cancels a running Automated Reasoning policy build workflow. This stops the policy generation process and prevents further processing of the source documents.</p>",
+      "idempotent":true
+    },
+    "CreateAutomatedReasoningPolicy":{
+      "name":"CreateAutomatedReasoningPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateAutomatedReasoningPolicyRequest"},
+      "output":{"shape":"CreateAutomatedReasoningPolicyResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates an Automated Reasoning policy for Amazon Bedrock Guardrails. Automated Reasoning policies use mathematical techniques to detect hallucinations, suggest corrections, and highlight unstated assumptions in the responses of your GenAI application.</p> <p>To create a policy, you upload a source document that describes the rules that you're encoding. Automated Reasoning extracts important concepts from the source document that will become variables in the policy and infers policy rules.</p>",
+      "idempotent":true
+    },
+    "CreateAutomatedReasoningPolicyTestCase":{
+      "name":"CreateAutomatedReasoningPolicyTestCase",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/test-cases",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateAutomatedReasoningPolicyTestCaseRequest"},
+      "output":{"shape":"CreateAutomatedReasoningPolicyTestCaseResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a test for an Automated Reasoning policy. Tests validate that your policy works as expected by providing sample inputs and expected outcomes. Use tests to verify policy behavior before deploying to production.</p>",
+      "idempotent":true
+    },
+    "CreateAutomatedReasoningPolicyVersion":{
+      "name":"CreateAutomatedReasoningPolicyVersion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/versions",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateAutomatedReasoningPolicyVersionRequest"},
+      "output":{"shape":"CreateAutomatedReasoningPolicyVersionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a new version of an existing Automated Reasoning policy. This allows you to iterate on your policy rules while maintaining previous versions for rollback or comparison purposes.</p>",
+      "idempotent":true
+    },
+    "CreateCustomModel":{
+      "name":"CreateCustomModel",
+      "http":{
+        "method":"POST",
+        "requestUri":"/custom-models/create-custom-model",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateCustomModelRequest"},
+      "output":{"shape":"CreateCustomModelResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a new custom model in Amazon Bedrock. After the model is active, you can use it for inference.</p> <p>To use the model for inference, you must purchase Provisioned Throughput for it. You can't use On-demand inference with these custom models. For more information about Provisioned Throughput, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a>.</p> <p>The model appears in <code>ListCustomModels</code> with a <code>customizationType</code> of <code>imported</code>. To track the status of the new model, you use the <code>GetCustomModel</code> API operation. The model can be in the following states:</p> <ul> <li> <p> <code>Creating</code> - Initial state during validation and registration</p> </li> <li> <p> <code>Active</code> - Model is ready for use in inference</p> </li> <li> <p> <code>Failed</code> - Creation process encountered an error</p> </li> </ul> <p> <b>Related APIs</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetCustomModel.html\">GetCustomModel</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModels.html\">ListCustomModels</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteCustomModel.html\">DeleteCustomModel</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "CreateCustomModelDeployment":{
+      "name":"CreateCustomModelDeployment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/model-customization/custom-model-deployments",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateCustomModelDeploymentRequest"},
+      "output":{"shape":"CreateCustomModelDeploymentResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deploys a custom model for on-demand inference in Amazon Bedrock. After you deploy your custom model, you use the deployment's Amazon Resource Name (ARN) as the <code>modelId</code> parameter when you submit prompts and generate responses with model inference.</p> <p> For more information about setting up on-demand inference for custom models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Set up inference for a custom model</a>. </p> <p>The following actions are related to the <code>CreateCustomModelDeployment</code> operation:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetCustomModelDeployment.html\">GetCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModelDeployments.html\">ListCustomModelDeployments</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteCustomModelDeployment.html\">DeleteCustomModelDeployment</a> </p> </li> </ul>",
+      "idempotent":true
+    },
     "CreateEvaluationJob":{
       "name":"CreateEvaluationJob",
       "http":{
@@ -53,6 +183,25 @@
       "documentation":"<p>Creates an evaluation job.</p>",
       "idempotent":true
     },
+    "CreateFoundationModelAgreement":{
+      "name":"CreateFoundationModelAgreement",
+      "http":{
+        "method":"POST",
+        "requestUri":"/create-foundation-model-agreement",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateFoundationModelAgreementRequest"},
+      "output":{"shape":"CreateFoundationModelAgreementResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Request a model access agreement for the specified model.</p>"
+    },
     "CreateGuardrail":{
       "name":"CreateGuardrail",
       "http":{
@@ -219,6 +368,28 @@
       "documentation":"<p>Creates a batch inference job to invoke a model on multiple prompts. Format your data according to <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data\">Format your inference data</a> and upload it to an Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference.html\">Process multiple prompts with batch inference</a>.</p> <p>The response returns a <code>jobArn</code> that you can use to stop or get details about the job.</p>",
       "idempotent":true
     },
+    "CreatePromptRouter":{
+      "name":"CreatePromptRouter",
+      "http":{
+        "method":"POST",
+        "requestUri":"/prompt-routers",
+        "responseCode":200
+      },
+      "input":{"shape":"CreatePromptRouterRequest"},
+      "output":{"shape":"CreatePromptRouterResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a prompt router that manages the routing of requests between multiple foundation models based on the routing criteria.</p>",
+      "idempotent":true
+    },
     "CreateProvisionedModelThroughput":{
       "name":"CreateProvisionedModelThroughput",
       "http":{
@@ -240,6 +411,69 @@
       "documentation":"<p>Creates dedicated throughput for a base or custom model with the model units and for the duration that you specify. For pricing details, see <a href=\"http://aws.amazon.com/bedrock/pricing/\">Amazon Bedrock Pricing</a>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
       "idempotent":true
     },
+    "DeleteAutomatedReasoningPolicy":{
+      "name":"DeleteAutomatedReasoningPolicy",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/automated-reasoning-policies/{policyArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAutomatedReasoningPolicyRequest"},
+      "output":{"shape":"DeleteAutomatedReasoningPolicyResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes an Automated Reasoning policy or policy version. This operation is idempotent. If you delete a policy more than once, each call succeeds. Deleting a policy removes it permanently and cannot be undone.</p>",
+      "idempotent":true
+    },
+    "DeleteAutomatedReasoningPolicyBuildWorkflow":{
+      "name":"DeleteAutomatedReasoningPolicyBuildWorkflow",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAutomatedReasoningPolicyBuildWorkflowRequest"},
+      "output":{"shape":"DeleteAutomatedReasoningPolicyBuildWorkflowResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes an Automated Reasoning policy build workflow and its associated artifacts. This permanently removes the workflow history and any generated assets.</p>",
+      "idempotent":true
+    },
+    "DeleteAutomatedReasoningPolicyTestCase":{
+      "name":"DeleteAutomatedReasoningPolicyTestCase",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAutomatedReasoningPolicyTestCaseRequest"},
+      "output":{"shape":"DeleteAutomatedReasoningPolicyTestCaseResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes an Automated Reasoning policy test. This operation is idempotent; if you delete a test more than once, each call succeeds.</p>",
+      "idempotent":true
+    },
     "DeleteCustomModel":{
       "name":"DeleteCustomModel",
       "http":{
@@ -260,6 +494,45 @@
       "documentation":"<p>Deletes a custom model that you created earlier. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
       "idempotent":true
     },
+    "DeleteCustomModelDeployment":{
+      "name":"DeleteCustomModelDeployment",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/model-customization/custom-model-deployments/{customModelDeploymentIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCustomModelDeploymentRequest"},
+      "output":{"shape":"DeleteCustomModelDeploymentResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a custom model deployment. This operation stops the deployment and removes it from your account. After deletion, the deployment ARN can no longer be used for inference requests.</p> <p>The following actions are related to the <code>DeleteCustomModelDeployment</code> operation:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateCustomModelDeployment.html\">CreateCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetCustomModelDeployment.html\">GetCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModelDeployments.html\">ListCustomModelDeployments</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "DeleteFoundationModelAgreement":{
+      "name":"DeleteFoundationModelAgreement",
+      "http":{
+        "method":"POST",
+        "requestUri":"/delete-foundation-model-agreement",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteFoundationModelAgreementRequest"},
+      "output":{"shape":"DeleteFoundationModelAgreementResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete the model access agreement for the specified model.</p>"
+    },
     "DeleteGuardrail":{
       "name":"DeleteGuardrail",
       "http":{
@@ -356,6 +629,25 @@
       "documentation":"<p>Delete the invocation logging. </p>",
       "idempotent":true
     },
+    "DeletePromptRouter":{
+      "name":"DeletePromptRouter",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/prompt-routers/{promptRouterArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeletePromptRouterRequest"},
+      "output":{"shape":"DeletePromptRouterResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a specified prompt router. This action cannot be undone.</p>",
+      "idempotent":true
+    },
     "DeleteProvisionedModelThroughput":{
       "name":"DeleteProvisionedModelThroughput",
       "http":{
@@ -395,6 +687,158 @@
       ],
       "documentation":"<p>Deregisters an endpoint for a model from Amazon Bedrock Marketplace. This operation removes the endpoint's association with Amazon Bedrock but does not delete the underlying Amazon SageMaker endpoint.</p>"
     },
+    "ExportAutomatedReasoningPolicyVersion":{
+      "name":"ExportAutomatedReasoningPolicyVersion",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/export",
+        "responseCode":200
+      },
+      "input":{"shape":"ExportAutomatedReasoningPolicyVersionRequest"},
+      "output":{"shape":"ExportAutomatedReasoningPolicyVersionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Exports the policy definition for an Automated Reasoning policy version. Returns the complete policy definition including rules, variables, and custom variable types in a structured format.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicy":{
+      "name":"GetAutomatedReasoningPolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves details about an Automated Reasoning policy or policy version. Returns information including the policy definition, metadata, and timestamps.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyAnnotations":{
+      "name":"GetAutomatedReasoningPolicyAnnotations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/annotations",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyAnnotationsRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyAnnotationsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the current annotations for an Automated Reasoning policy build workflow. Annotations contain corrections to the rules, variables and types to be applied to the policy.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflow":{
+      "name":"GetAutomatedReasoningPolicyBuildWorkflow",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyBuildWorkflowRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyBuildWorkflowResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about an Automated Reasoning policy build workflow, including its status, configuration, and metadata.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflowResultAssets":{
+      "name":"GetAutomatedReasoningPolicyBuildWorkflowResultAssets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/result-assets",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyBuildWorkflowResultAssetsRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyBuildWorkflowResultAssetsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the resulting assets from a completed Automated Reasoning policy build workflow, including build logs, quality reports, and generated policy artifacts.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyNextScenario":{
+      "name":"GetAutomatedReasoningPolicyNextScenario",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/scenarios",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyNextScenarioRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyNextScenarioResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the next test scenario for validating an Automated Reasoning policy. This is used during the interactive policy refinement process to test policy behavior.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyTestCase":{
+      "name":"GetAutomatedReasoningPolicyTestCase",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyTestCaseRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyTestCaseResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves details about a specific Automated Reasoning policy test.</p>",
+      "readonly":true
+    },
+    "GetAutomatedReasoningPolicyTestResult":{
+      "name":"GetAutomatedReasoningPolicyTestResult",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-cases/{testCaseId}/test-results",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAutomatedReasoningPolicyTestResultRequest"},
+      "output":{"shape":"GetAutomatedReasoningPolicyTestResultResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the test result for a specific Automated Reasoning policy test. Returns detailed validation findings and execution status.</p>",
+      "readonly":true
+    },
     "GetCustomModel":{
       "name":"GetCustomModel",
       "http":{
@@ -411,7 +855,27 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Get the properties associated with a Amazon Bedrock custom model that you have created.For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Get the properties associated with a Amazon Bedrock custom model that you have created. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
+    },
+    "GetCustomModelDeployment":{
+      "name":"GetCustomModelDeployment",
+      "http":{
+        "method":"GET",
+        "requestUri":"/model-customization/custom-model-deployments/{customModelDeploymentIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCustomModelDeploymentRequest"},
+      "output":{"shape":"GetCustomModelDeploymentResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about a custom model deployment, including its status, configuration, and metadata. Use this operation to monitor the deployment status and retrieve details needed for inference requests.</p> <p>The following actions are related to the <code>GetCustomModelDeployment</code> operation:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateCustomModelDeployment.html\">CreateCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModelDeployments.html\">ListCustomModelDeployments</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteCustomModelDeployment.html\">DeleteCustomModelDeployment</a> </p> </li> </ul>",
+      "readonly":true
     },
     "GetEvaluationJob":{
       "name":"GetEvaluationJob",
@@ -429,7 +893,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets information about an evaluation job, such as the status of the job.</p>"
+      "documentation":"<p>Gets information about an evaluation job, such as the status of the job.</p>",
+      "readonly":true
     },
     "GetFoundationModel":{
       "name":"GetFoundationModel",
@@ -447,7 +912,27 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Get details about a Amazon Bedrock foundation model.</p>"
+      "documentation":"<p>Get details about a Amazon Bedrock foundation model.</p>",
+      "readonly":true
+    },
+    "GetFoundationModelAvailability":{
+      "name":"GetFoundationModelAvailability",
+      "http":{
+        "method":"GET",
+        "requestUri":"/foundation-model-availability/{modelId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetFoundationModelAvailabilityRequest"},
+      "output":{"shape":"GetFoundationModelAvailabilityResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get information about the Foundation model availability.</p>",
+      "readonly":true
     },
     "GetGuardrail":{
       "name":"GetGuardrail",
@@ -465,7 +950,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets details about a guardrail. If you don't specify a version, the response returns details for the <code>DRAFT</code> version.</p>"
+      "documentation":"<p>Gets details about a guardrail. If you don't specify a version, the response returns details for the <code>DRAFT</code> version.</p>",
+      "readonly":true
     },
     "GetImportedModel":{
       "name":"GetImportedModel",
@@ -483,7 +969,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets properties associated with a customized model you imported. </p>"
+      "documentation":"<p>Gets properties associated with a customized model you imported. </p>",
+      "readonly":true
     },
     "GetInferenceProfile":{
       "name":"GetInferenceProfile",
@@ -501,7 +988,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets information about an inference profile. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">Increase throughput and resilience with cross-region inference in Amazon Bedrock</a>. in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Gets information about an inference profile. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">Increase throughput and resilience with cross-region inference in Amazon Bedrock</a>. in the Amazon Bedrock User Guide.</p>",
+      "readonly":true
     },
     "GetMarketplaceModelEndpoint":{
       "name":"GetMarketplaceModelEndpoint",
@@ -519,7 +1007,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves details about a specific endpoint for a model from Amazon Bedrock Marketplace.</p>"
+      "documentation":"<p>Retrieves details about a specific endpoint for a model from Amazon Bedrock Marketplace.</p>",
+      "readonly":true
     },
     "GetModelCopyJob":{
       "name":"GetModelCopyJob",
@@ -537,7 +1026,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves information about a model copy job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/copy-model.html\">Copy models to be used in other regions</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Retrieves information about a model copy job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/copy-model.html\">Copy models to be used in other regions</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "GetModelCustomizationJob":{
       "name":"GetModelCustomizationJob",
@@ -555,7 +1045,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the properties associated with a model-customization job, including the status of the job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Retrieves the properties associated with a model-customization job, including the status of the job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "GetModelImportJob":{
       "name":"GetModelImportJob",
@@ -573,7 +1064,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the properties associated with import model job, including the status of the job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Retrieves the properties associated with import model job, including the status of the job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "GetModelInvocationJob":{
       "name":"GetModelInvocationJob",
@@ -591,7 +1083,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets details about a batch inference job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-monitor\">Monitor batch inference jobs</a> </p>"
+      "documentation":"<p>Gets details about a batch inference job. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-monitor\">Monitor batch inference jobs</a> </p>",
+      "readonly":true
     },
     "GetModelInvocationLoggingConfiguration":{
       "name":"GetModelInvocationLoggingConfiguration",
@@ -607,7 +1100,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Get the current configuration values for model invocation logging.</p>"
+      "documentation":"<p>Get the current configuration values for model invocation logging.</p>",
+      "readonly":true
     },
     "GetPromptRouter":{
       "name":"GetPromptRouter",
@@ -625,7 +1119,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves details about a prompt router.</p>"
+      "documentation":"<p>Retrieves details about a prompt router.</p>",
+      "readonly":true
     },
     "GetProvisionedModelThroughput":{
       "name":"GetProvisionedModelThroughput",
@@ -643,7 +1138,121 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns details for a Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns details for a Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
+    },
+    "GetUseCaseForModelAccess":{
+      "name":"GetUseCaseForModelAccess",
+      "http":{
+        "method":"GET",
+        "requestUri":"/use-case-for-model-access",
+        "responseCode":200
+      },
+      "input":{"shape":"GetUseCaseForModelAccessRequest"},
+      "output":{"shape":"GetUseCaseForModelAccessResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get usecase for model access.</p>",
+      "readonly":true
+    },
+    "ListAutomatedReasoningPolicies":{
+      "name":"ListAutomatedReasoningPolicies",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAutomatedReasoningPoliciesRequest"},
+      "output":{"shape":"ListAutomatedReasoningPoliciesResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all Automated Reasoning policies in your account, with optional filtering by policy ARN. This helps you manage and discover existing policies.</p>",
+      "readonly":true
+    },
+    "ListAutomatedReasoningPolicyBuildWorkflows":{
+      "name":"ListAutomatedReasoningPolicyBuildWorkflows",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAutomatedReasoningPolicyBuildWorkflowsRequest"},
+      "output":{"shape":"ListAutomatedReasoningPolicyBuildWorkflowsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all build workflows for an Automated Reasoning policy, showing the history of policy creation and modification attempts.</p>",
+      "readonly":true
+    },
+    "ListAutomatedReasoningPolicyTestCases":{
+      "name":"ListAutomatedReasoningPolicyTestCases",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/test-cases",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAutomatedReasoningPolicyTestCasesRequest"},
+      "output":{"shape":"ListAutomatedReasoningPolicyTestCasesResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists tests for an Automated Reasoning policy. We recommend using pagination to ensure that the operation returns quickly and successfully.</p>",
+      "readonly":true
+    },
+    "ListAutomatedReasoningPolicyTestResults":{
+      "name":"ListAutomatedReasoningPolicyTestResults",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-results",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAutomatedReasoningPolicyTestResultsRequest"},
+      "output":{"shape":"ListAutomatedReasoningPolicyTestResultsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists test results for an Automated Reasoning policy, showing how the policy performed against various test scenarios and validation checks.</p>",
+      "readonly":true
+    },
+    "ListCustomModelDeployments":{
+      "name":"ListCustomModelDeployments",
+      "http":{
+        "method":"GET",
+        "requestUri":"/model-customization/custom-model-deployments",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCustomModelDeploymentsRequest"},
+      "output":{"shape":"ListCustomModelDeploymentsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists custom model deployments in your account. You can filter the results by creation time, name, status, and associated model. Use this operation to manage and monitor your custom model deployments.</p> <p>We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>The following actions are related to the <code>ListCustomModelDeployments</code> operation:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateCustomModelDeployment.html\">CreateCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetCustomModelDeployment.html\">GetCustomModelDeployment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteCustomModelDeployment.html\">DeleteCustomModelDeployment</a> </p> </li> </ul>",
+      "readonly":true
     },
     "ListCustomModels":{
       "name":"ListCustomModels",
@@ -660,7 +1269,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of the custom models that you have created with the <code>CreateModelCustomizationJob</code> operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns a list of the custom models that you have created with the <code>CreateModelCustomizationJob</code> operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListEvaluationJobs":{
       "name":"ListEvaluationJobs",
@@ -677,7 +1287,27 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists all existing evaluation jobs.</p>"
+      "documentation":"<p>Lists all existing evaluation jobs.</p>",
+      "readonly":true
+    },
+    "ListFoundationModelAgreementOffers":{
+      "name":"ListFoundationModelAgreementOffers",
+      "http":{
+        "method":"GET",
+        "requestUri":"/list-foundation-model-agreement-offers/{modelId}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListFoundationModelAgreementOffersRequest"},
+      "output":{"shape":"ListFoundationModelAgreementOffersResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the offers associated with the specified model.</p>",
+      "readonly":true
     },
     "ListFoundationModels":{
       "name":"ListFoundationModels",
@@ -694,7 +1324,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists Amazon Bedrock foundation models that you can use. You can filter the results with the request parameters. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models.html\">Foundation models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Lists Amazon Bedrock foundation models that you can use. You can filter the results with the request parameters. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models.html\">Foundation models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListGuardrails":{
       "name":"ListGuardrails",
@@ -712,7 +1343,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists details about all the guardrails in an account. To list the <code>DRAFT</code> version of all your guardrails, don't specify the <code>guardrailIdentifier</code> field. To list all versions of a guardrail, specify the ARN of the guardrail in the <code>guardrailIdentifier</code> field.</p> <p>You can set the maximum number of results to return in a response in the <code>maxResults</code> field. If there are more results than the number you set, the response returns a <code>nextToken</code> that you can send in another <code>ListGuardrails</code> request to see the next batch of results.</p>"
+      "documentation":"<p>Lists details about all the guardrails in an account. To list the <code>DRAFT</code> version of all your guardrails, don't specify the <code>guardrailIdentifier</code> field. To list all versions of a guardrail, specify the ARN of the guardrail in the <code>guardrailIdentifier</code> field.</p> <p>You can set the maximum number of results to return in a response in the <code>maxResults</code> field. If there are more results than the number you set, the response returns a <code>nextToken</code> that you can send in another <code>ListGuardrails</code> request to see the next batch of results.</p>",
+      "readonly":true
     },
     "ListImportedModels":{
       "name":"ListImportedModels",
@@ -729,7 +1361,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of models you've imported. You can filter the results to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns a list of models you've imported. You can filter the results to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListInferenceProfiles":{
       "name":"ListInferenceProfiles",
@@ -746,7 +1379,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of inference profiles that you can use. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">Increase throughput and resilience with cross-region inference in Amazon Bedrock</a>. in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Returns a list of inference profiles that you can use. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">Increase throughput and resilience with cross-region inference in Amazon Bedrock</a>. in the Amazon Bedrock User Guide.</p>",
+      "readonly":true
     },
     "ListMarketplaceModelEndpoints":{
       "name":"ListMarketplaceModelEndpoints",
@@ -764,7 +1398,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists the endpoints for models from Amazon Bedrock Marketplace in your Amazon Web Services account.</p>"
+      "documentation":"<p>Lists the endpoints for models from Amazon Bedrock Marketplace in your Amazon Web Services account.</p>",
+      "readonly":true
     },
     "ListModelCopyJobs":{
       "name":"ListModelCopyJobs",
@@ -782,7 +1417,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of model copy jobs that you have submitted. You can filter the jobs to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/copy-model.html\">Copy models to be used in other regions</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns a list of model copy jobs that you have submitted. You can filter the jobs to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/copy-model.html\">Copy models to be used in other regions</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListModelCustomizationJobs":{
       "name":"ListModelCustomizationJobs",
@@ -799,7 +1435,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of model customization jobs that you have submitted. You can filter the jobs to return based on one or more criteria.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns a list of model customization jobs that you have submitted. You can filter the jobs to return based on one or more criteria.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html\">Custom models</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListModelImportJobs":{
       "name":"ListModelImportJobs",
@@ -816,7 +1453,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of import jobs you've submitted. You can filter the results to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Returns a list of import jobs you've submitted. You can filter the results to return based on one or more criteria. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">Import a customized model</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListModelInvocationJobs":{
       "name":"ListModelInvocationJobs",
@@ -833,7 +1471,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists all batch inference jobs in the account. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-view.html\">View details about a batch inference job</a>.</p>"
+      "documentation":"<p>Lists all batch inference jobs in the account. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-view.html\">View details about a batch inference job</a>.</p>",
+      "readonly":true
     },
     "ListPromptRouters":{
       "name":"ListPromptRouters",
@@ -850,7 +1489,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves a list of prompt routers.</p>"
+      "documentation":"<p>Retrieves a list of prompt routers.</p>",
+      "readonly":true
     },
     "ListProvisionedModelThroughputs":{
       "name":"ListProvisionedModelThroughputs",
@@ -867,7 +1507,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists the Provisioned Throughputs in the account. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+      "documentation":"<p>Lists the Provisioned Throughputs in the account. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -905,6 +1546,23 @@
       "documentation":"<p>Set the configuration values for model invocation logging.</p>",
       "idempotent":true
     },
+    "PutUseCaseForModelAccess":{
+      "name":"PutUseCaseForModelAccess",
+      "http":{
+        "method":"POST",
+        "requestUri":"/use-case-for-model-access",
+        "responseCode":201
+      },
+      "input":{"shape":"PutUseCaseForModelAccessRequest"},
+      "output":{"shape":"PutUseCaseForModelAccessResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Put usecase for model access.</p>"
+    },
     "RegisterMarketplaceModelEndpoint":{
       "name":"RegisterMarketplaceModelEndpoint",
       "http":{
@@ -924,6 +1582,46 @@
       ],
       "documentation":"<p>Registers an existing Amazon SageMaker endpoint with Amazon Bedrock Marketplace, allowing it to be used with Amazon Bedrock APIs.</p>"
     },
+    "StartAutomatedReasoningPolicyBuildWorkflow":{
+      "name":"StartAutomatedReasoningPolicyBuildWorkflow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowType}/start",
+        "responseCode":200
+      },
+      "input":{"shape":"StartAutomatedReasoningPolicyBuildWorkflowRequest"},
+      "output":{"shape":"StartAutomatedReasoningPolicyBuildWorkflowResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Starts a new build workflow for an Automated Reasoning policy. This initiates the process of analyzing source documents and generating policy rules, variables, and types.</p>"
+    },
+    "StartAutomatedReasoningPolicyTestWorkflow":{
+      "name":"StartAutomatedReasoningPolicyTestWorkflow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-workflows",
+        "responseCode":200
+      },
+      "input":{"shape":"StartAutomatedReasoningPolicyTestWorkflowRequest"},
+      "output":{"shape":"StartAutomatedReasoningPolicyTestWorkflowResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Initiates a test workflow to validate Automated Reasoning policy tests. The workflow executes the specified tests against the policy and generates validation results.</p>"
+    },
     "StopEvaluationJob":{
       "name":"StopEvaluationJob",
       "http":{
@@ -1019,6 +1717,67 @@
       ],
       "documentation":"<p>Remove one or more tags from a resource. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Tagging resources</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
     },
+    "UpdateAutomatedReasoningPolicy":{
+      "name":"UpdateAutomatedReasoningPolicy",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/automated-reasoning-policies/{policyArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateAutomatedReasoningPolicyRequest"},
+      "output":{"shape":"UpdateAutomatedReasoningPolicyResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates an existing Automated Reasoning policy with new rules, variables, or configuration. This creates a new version of the policy while preserving the previous version.</p>",
+      "idempotent":true
+    },
+    "UpdateAutomatedReasoningPolicyAnnotations":{
+      "name":"UpdateAutomatedReasoningPolicyAnnotations",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/annotations",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateAutomatedReasoningPolicyAnnotationsRequest"},
+      "output":{"shape":"UpdateAutomatedReasoningPolicyAnnotationsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates the annotations for an Automated Reasoning policy build workflow. This allows you to modify extracted rules, variables, and types before finalizing the policy.</p>"
+    },
+    "UpdateAutomatedReasoningPolicyTestCase":{
+      "name":"UpdateAutomatedReasoningPolicyTestCase",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateAutomatedReasoningPolicyTestCaseRequest"},
+      "output":{"shape":"UpdateAutomatedReasoningPolicyTestCaseResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates an existing Automated Reasoning policy test. You can modify the content, query, expected result, and confidence threshold.</p>",
+      "idempotent":true
+    },
     "UpdateGuardrail":{
       "name":"UpdateGuardrail",
       "http":{
@@ -1098,6 +1857,11 @@
       "type":"string",
       "pattern":"[0-9]{12}"
     },
+    "AcknowledgementFormDataBody":{
+      "type":"blob",
+      "max":16384,
+      "min":10
+    },
     "AdditionalModelRequestFields":{
       "type":"map",
       "key":{"shape":"AdditionalModelRequestFieldsKey"},
@@ -1110,9 +1874,32 @@
     },
     "AdditionalModelRequestFieldsValue":{
       "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "AgreementAvailability":{
+      "type":"structure",
+      "required":["status"],
       "members":{
+        "status":{
+          "shape":"AgreementStatus",
+          "documentation":"<p>Status of the agreement.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>Error message.</p>"
+        }
       },
-      "document":true
+      "documentation":"<p>Information about the agreement availability</p>"
+    },
+    "AgreementStatus":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "PENDING",
+        "NOT_AVAILABLE",
+        "ERROR"
+      ]
     },
     "ApplicationType":{
       "type":"string",
@@ -1126,6 +1913,22 @@
       "max":2048,
       "min":0
     },
+    "AttributeType":{
+      "type":"string",
+      "enum":[
+        "STRING",
+        "NUMBER",
+        "BOOLEAN",
+        "STRING_LIST"
+      ]
+    },
+    "AuthorizationStatus":{
+      "type":"string",
+      "enum":[
+        "AUTHORIZED",
+        "NOT_AUTHORIZED"
+      ]
+    },
     "AutomatedEvaluationConfig":{
       "type":"structure",
       "required":["datasetMetricConfigs"],
@@ -1137,10 +1940,1788 @@
         "evaluatorModelConfig":{
           "shape":"EvaluatorModelConfig",
           "documentation":"<p>Contains the evaluator model configuration details. <code>EvaluatorModelConfig</code> is required for evaluation jobs that use a knowledge base or in model evaluation job that use a model as judge. This model computes all evaluation related metrics.</p>"
+        },
+        "customMetricConfig":{
+          "shape":"AutomatedEvaluationCustomMetricConfig",
+          "documentation":"<p>Defines the configuration of custom metrics to be used in an evaluation job.</p>"
         }
       },
       "documentation":"<p>The configuration details of an automated evaluation job. The <code>EvaluationDatasetMetricConfig</code> object is used to specify the prompt datasets, task type, and metric names.</p>"
     },
+    "AutomatedEvaluationCustomMetricConfig":{
+      "type":"structure",
+      "required":[
+        "customMetrics",
+        "evaluatorModelConfig"
+      ],
+      "members":{
+        "customMetrics":{
+          "shape":"AutomatedEvaluationCustomMetrics",
+          "documentation":"<p>Defines a list of custom metrics to be used in an Amazon Bedrock evaluation job.</p>"
+        },
+        "evaluatorModelConfig":{
+          "shape":"CustomMetricEvaluatorModelConfig",
+          "documentation":"<p>Configuration of the evaluator model you want to use to evaluate custom metrics in an Amazon Bedrock evaluation job.</p>"
+        }
+      },
+      "documentation":"<p>Defines the configuration of custom metrics to be used in an evaluation job. To learn more about using custom metrics in Amazon Bedrock evaluation jobs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html\">Create a prompt for a custom metrics (LLM-as-a-judge model evaluations)</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-evaluation-custom-metrics-prompt-formats.html\">Create a prompt for a custom metrics (RAG evaluations)</a>.</p>"
+    },
+    "AutomatedEvaluationCustomMetricSource":{
+      "type":"structure",
+      "members":{
+        "customMetricDefinition":{
+          "shape":"CustomMetricDefinition",
+          "documentation":"<p>The definition of a custom metric for use in an Amazon Bedrock evaluation job.</p>"
+        }
+      },
+      "documentation":"<p>An array item definining a single custom metric for use in an Amazon Bedrock evaluation job.</p>",
+      "union":true
+    },
+    "AutomatedEvaluationCustomMetrics":{
+      "type":"list",
+      "member":{"shape":"AutomatedEvaluationCustomMetricSource"},
+      "max":10,
+      "min":1
+    },
+    "AutomatedReasoningCheckDifferenceScenarioList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckScenario"},
+      "max":2,
+      "min":0
+    },
+    "AutomatedReasoningCheckFinding":{
+      "type":"structure",
+      "members":{
+        "valid":{
+          "shape":"AutomatedReasoningCheckValidFinding",
+          "documentation":"<p>Indicates that the claims are true. The claims are implied by the premises and the Automated Reasoning policy. Given the Automated Reasoning policy and premises, it is not possible for these claims to be false.</p>"
+        },
+        "invalid":{
+          "shape":"AutomatedReasoningCheckInvalidFinding",
+          "documentation":"<p>Indicates that the claims are false. The claims are not implied by the premises and Automated Reasoning policy. Furthermore, there exist different claims that are consistent with the premises and Automated Reasoning policy.</p>"
+        },
+        "satisfiable":{
+          "shape":"AutomatedReasoningCheckSatisfiableFinding",
+          "documentation":"<p>Indicates that the claims can be true or false. It depends on what assumptions are made for the claim to be implied from the premises and Automated Reasoning policy rules. In this situation, different assumptions can make input claims false and alternative claims true.</p>"
+        },
+        "impossible":{
+          "shape":"AutomatedReasoningCheckImpossibleFinding",
+          "documentation":"<p>Indicates that Automated Reasoning cannot make a statement about the claims. This can happen if the premises are logically incorrect, or if there is a conflict within the Automated Reasoning policy itself.</p>"
+        },
+        "translationAmbiguous":{
+          "shape":"AutomatedReasoningCheckTranslationAmbiguousFinding",
+          "documentation":"<p>Indicates that an ambiguity was detected in the translation, making it unsound to continue with validity checking. Additional context or follow-up questions might be needed to get translation to succeed.</p>"
+        },
+        "tooComplex":{
+          "shape":"AutomatedReasoningCheckTooComplexFinding",
+          "documentation":"<p>Indicates that the input contains too much information for Automated Reasoning to process within its latency limits.</p>"
+        },
+        "noTranslations":{
+          "shape":"AutomatedReasoningCheckNoTranslationsFinding",
+          "documentation":"<p>Identifies that some or all of the input prompt wasn't translated into logic. This can happen if the input isn't relevant to the Automated Reasoning policy, or if the policy doesn't have variables to model relevant input.</p>"
+        }
+      },
+      "documentation":"<p>Represents the result of an Automated Reasoning validation check, indicating whether the content is logically valid, invalid, or falls into other categories based on the policy rules.</p>",
+      "union":true
+    },
+    "AutomatedReasoningCheckFindingList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckFinding"},
+      "max":20,
+      "min":0
+    },
+    "AutomatedReasoningCheckImpossibleFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"AutomatedReasoningCheckTranslation",
+          "documentation":"<p>The logical translation of the input that this finding evaluates.</p>"
+        },
+        "contradictingRules":{
+          "shape":"AutomatedReasoningCheckRuleList",
+          "documentation":"<p>The automated reasoning policy rules that contradict the claims and/or premises in the input.</p>"
+        },
+        "logicWarning":{
+          "shape":"AutomatedReasoningCheckLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that no valid claims can be made due to logical contradictions in the premises or rules.</p>"
+    },
+    "AutomatedReasoningCheckInputTextReference":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"AutomatedReasoningNaturalLanguageStatementContent",
+          "documentation":"<p>The specific text from the original input that this reference points to.</p>"
+        }
+      },
+      "documentation":"<p>References a portion of the original input text that corresponds to logical elements.</p>"
+    },
+    "AutomatedReasoningCheckInputTextReferenceList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckInputTextReference"}
+    },
+    "AutomatedReasoningCheckInvalidFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"AutomatedReasoningCheckTranslation",
+          "documentation":"<p>The logical translation of the input that this finding invalidates.</p>"
+        },
+        "contradictingRules":{
+          "shape":"AutomatedReasoningCheckRuleList",
+          "documentation":"<p>The automated reasoning policy rules that contradict the claims in the input.</p>"
+        },
+        "logicWarning":{
+          "shape":"AutomatedReasoningCheckLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims are logically false and contradictory to the established rules or premises.</p>"
+    },
+    "AutomatedReasoningCheckLogicWarning":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"AutomatedReasoningCheckLogicWarningType",
+          "documentation":"<p>The category of the detected logical issue, such as statements that are always true or always false.</p>"
+        },
+        "premises":{
+          "shape":"AutomatedReasoningLogicStatementList",
+          "documentation":"<p>The logical statements that serve as premises under which the claims are validated.</p>"
+        },
+        "claims":{
+          "shape":"AutomatedReasoningLogicStatementList",
+          "documentation":"<p>The logical statements that are validated while assuming the policy and premises.</p>"
+        }
+      },
+      "documentation":"<p>Identifies logical issues in the translated statements that exist independent of any policy rules, such as statements that are always true or always false.</p>"
+    },
+    "AutomatedReasoningCheckLogicWarningType":{
+      "type":"string",
+      "enum":[
+        "ALWAYS_TRUE",
+        "ALWAYS_FALSE"
+      ]
+    },
+    "AutomatedReasoningCheckNoTranslationsFinding":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Indicates that no relevant logical information could be extracted from the input for validation.</p>"
+    },
+    "AutomatedReasoningCheckResult":{
+      "type":"string",
+      "enum":[
+        "VALID",
+        "INVALID",
+        "SATISFIABLE",
+        "IMPOSSIBLE",
+        "TRANSLATION_AMBIGUOUS",
+        "TOO_COMPLEX",
+        "NO_TRANSLATION"
+      ]
+    },
+    "AutomatedReasoningCheckRule":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleId",
+          "documentation":"<p>The unique identifier of the automated reasoning rule.</p>"
+        },
+        "policyVersionArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The ARN of the automated reasoning policy version that contains this rule.</p>"
+        }
+      },
+      "documentation":"<p>References a specific automated reasoning policy rule that was applied during evaluation.</p>"
+    },
+    "AutomatedReasoningCheckRuleList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckRule"}
+    },
+    "AutomatedReasoningCheckSatisfiableFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"AutomatedReasoningCheckTranslation",
+          "documentation":"<p>The logical translation of the input that this finding evaluates.</p>"
+        },
+        "claimsTrueScenario":{
+          "shape":"AutomatedReasoningCheckScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims could be logically true.</p>"
+        },
+        "claimsFalseScenario":{
+          "shape":"AutomatedReasoningCheckScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims could be logically false.</p>"
+        },
+        "logicWarning":{
+          "shape":"AutomatedReasoningCheckLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims could be either true or false depending on additional assumptions not provided in the input.</p>"
+    },
+    "AutomatedReasoningCheckScenario":{
+      "type":"structure",
+      "members":{
+        "statements":{
+          "shape":"AutomatedReasoningLogicStatementList",
+          "documentation":"<p>List of logical assignments and statements that define this scenario.</p>"
+        }
+      },
+      "documentation":"<p>Represents a logical scenario where claims can be evaluated as true or false, containing specific logical assignments.</p>"
+    },
+    "AutomatedReasoningCheckTooComplexFinding":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Indicates that the input exceeds the processing capacity due to the volume or complexity of the logical information.</p>"
+    },
+    "AutomatedReasoningCheckTranslation":{
+      "type":"structure",
+      "required":[
+        "claims",
+        "confidence"
+      ],
+      "members":{
+        "premises":{
+          "shape":"AutomatedReasoningLogicStatementList",
+          "documentation":"<p>The logical statements that serve as the foundation or assumptions for the claims.</p>"
+        },
+        "claims":{
+          "shape":"AutomatedReasoningLogicStatementList",
+          "documentation":"<p>The logical statements that are being validated against the premises and policy rules.</p>"
+        },
+        "untranslatedPremises":{
+          "shape":"AutomatedReasoningCheckInputTextReferenceList",
+          "documentation":"<p>References to portions of the original input text that correspond to the premises but could not be fully translated.</p>"
+        },
+        "untranslatedClaims":{
+          "shape":"AutomatedReasoningCheckInputTextReferenceList",
+          "documentation":"<p>References to portions of the original input text that correspond to the claims but could not be fully translated.</p>"
+        },
+        "confidence":{
+          "shape":"AutomatedReasoningCheckTranslationConfidence",
+          "documentation":"<p>A confidence score between 0 and 1 indicating how certain the system is about the logical translation.</p>"
+        }
+      },
+      "documentation":"<p>Contains the logical translation of natural language input into formal logical statements, including premises, claims, and confidence scores.</p>"
+    },
+    "AutomatedReasoningCheckTranslationAmbiguousFinding":{
+      "type":"structure",
+      "members":{
+        "options":{
+          "shape":"AutomatedReasoningCheckTranslationOptionList",
+          "documentation":"<p>Different logical interpretations that were detected during translation of the input.</p>"
+        },
+        "differenceScenarios":{
+          "shape":"AutomatedReasoningCheckDifferenceScenarioList",
+          "documentation":"<p>Scenarios showing how the different translation options differ in meaning.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the input has multiple valid logical interpretations, requiring additional context or clarification.</p>"
+    },
+    "AutomatedReasoningCheckTranslationConfidence":{
+      "type":"double",
+      "box":true,
+      "max":1,
+      "min":0
+    },
+    "AutomatedReasoningCheckTranslationList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckTranslation"}
+    },
+    "AutomatedReasoningCheckTranslationOption":{
+      "type":"structure",
+      "members":{
+        "translations":{
+          "shape":"AutomatedReasoningCheckTranslationList",
+          "documentation":"<p>Different logical interpretations that were detected during translation of the input.</p>"
+        }
+      },
+      "documentation":"<p>Represents one possible logical interpretation of ambiguous input content.</p>"
+    },
+    "AutomatedReasoningCheckTranslationOptionList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningCheckTranslationOption"},
+      "max":2,
+      "min":0
+    },
+    "AutomatedReasoningCheckValidFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"AutomatedReasoningCheckTranslation",
+          "documentation":"<p>The logical translation of the input that this finding validates.</p>"
+        },
+        "claimsTrueScenario":{
+          "shape":"AutomatedReasoningCheckScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims are logically true.</p>"
+        },
+        "supportingRules":{
+          "shape":"AutomatedReasoningCheckRuleList",
+          "documentation":"<p>The automated reasoning policy rules that support why this result is considered valid.</p>"
+        },
+        "logicWarning":{
+          "shape":"AutomatedReasoningCheckLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims are definitively true and logically implied by the premises, with no possible alternative interpretations.</p>"
+    },
+    "AutomatedReasoningConfidenceFilterThreshold":{
+      "type":"double",
+      "box":true,
+      "max":1,
+      "min":0
+    },
+    "AutomatedReasoningLogicStatement":{
+      "type":"structure",
+      "required":["logic"],
+      "members":{
+        "logic":{
+          "shape":"AutomatedReasoningLogicStatementContent",
+          "documentation":"<p>The formal logic representation of the statement using mathematical notation and logical operators.</p>"
+        },
+        "naturalLanguage":{
+          "shape":"AutomatedReasoningNaturalLanguageStatementContent",
+          "documentation":"<p>The natural language representation of the logical statement, providing a human-readable interpretation of the formal logic.</p>"
+        }
+      },
+      "documentation":"<p>Represents a logical statement that can be expressed both in formal logic notation and natural language, providing dual representations for better understanding and validation.</p>"
+    },
+    "AutomatedReasoningLogicStatementContent":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningLogicStatementList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningLogicStatement"}
+    },
+    "AutomatedReasoningNaturalLanguageStatementContent":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyAddRuleAnnotation":{
+      "type":"structure",
+      "required":["expression"],
+      "members":{
+        "expression":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleExpression",
+          "documentation":"<p>The formal logical expression that defines the rule, using mathematical notation and referencing policy variables and types.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for adding a new rule to an Automated Reasoning policy using a formal logical expression.</p>"
+    },
+    "AutomatedReasoningPolicyAddRuleFromNaturalLanguageAnnotation":{
+      "type":"structure",
+      "required":["naturalLanguage"],
+      "members":{
+        "naturalLanguage":{
+          "shape":"AutomatedReasoningPolicyAnnotationRuleNaturalLanguage",
+          "documentation":"<p>The natural language description of the rule that should be converted into a formal logical expression.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for adding a new rule to the policy by converting a natural language description into a formal logical expression.</p>"
+    },
+    "AutomatedReasoningPolicyAddRuleMutation":{
+      "type":"structure",
+      "required":["rule"],
+      "members":{
+        "rule":{
+          "shape":"AutomatedReasoningPolicyDefinitionRule",
+          "documentation":"<p>The rule definition that specifies the formal logical expression and metadata for the new rule being added to the policy.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that adds a new rule to the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyAddTypeAnnotation":{
+      "type":"structure",
+      "required":[
+        "name",
+        "description",
+        "values"
+      ],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The name of the new custom type. This name will be used to reference the type in variable definitions and rules.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeDescription",
+          "documentation":"<p>A description of what the custom type represents and how it should be used in the policy.</p>"
+        },
+        "values":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueList",
+          "documentation":"<p>The list of possible values that variables of this type can take, each with its own description and identifier.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for adding a new custom type to an Automated Reasoning policy, defining a set of possible values for variables.</p>"
+    },
+    "AutomatedReasoningPolicyAddTypeMutation":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"AutomatedReasoningPolicyDefinitionType",
+          "documentation":"<p>The type definition that specifies the name, description, and possible values for the new custom type being added to the policy.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that adds a new custom type to the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyAddTypeValue":{
+      "type":"structure",
+      "required":["value"],
+      "members":{
+        "value":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The identifier or name of the new value to add to the type.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueDescription",
+          "documentation":"<p>A description of what this new type value represents and when it should be used.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single value that can be added to an existing custom type in the policy.</p>"
+    },
+    "AutomatedReasoningPolicyAddVariableAnnotation":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type",
+        "description"
+      ],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The name of the new variable. This name will be used to reference the variable in rule expressions.</p>"
+        },
+        "type":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The type of the variable, which can be a built-in type (like string or number) or a custom type defined in the policy.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableDescription",
+          "documentation":"<p>A description of what the variable represents and how it should be used in rules.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for adding a new variable to an Automated Reasoning policy, which can be used in rule expressions.</p>"
+    },
+    "AutomatedReasoningPolicyAddVariableMutation":{
+      "type":"structure",
+      "required":["variable"],
+      "members":{
+        "variable":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariable",
+          "documentation":"<p>The variable definition that specifies the name, type, and description for the new variable being added to the policy.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that adds a new variable to the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyAnnotation":{
+      "type":"structure",
+      "members":{
+        "addType":{
+          "shape":"AutomatedReasoningPolicyAddTypeAnnotation",
+          "documentation":"<p>An operation to add a new custom type to the policy, defining a set of possible values for policy variables.</p>"
+        },
+        "updateType":{
+          "shape":"AutomatedReasoningPolicyUpdateTypeAnnotation",
+          "documentation":"<p>An operation to modify an existing custom type in the policy, such as changing its name, description, or allowed values.</p>"
+        },
+        "deleteType":{
+          "shape":"AutomatedReasoningPolicyDeleteTypeAnnotation",
+          "documentation":"<p>An operation to remove a custom type from the policy. The type must not be referenced by any variables or rules.</p>"
+        },
+        "addVariable":{
+          "shape":"AutomatedReasoningPolicyAddVariableAnnotation",
+          "documentation":"<p>An operation to add a new variable to the policy, which can be used in rule expressions to represent dynamic values.</p>"
+        },
+        "updateVariable":{
+          "shape":"AutomatedReasoningPolicyUpdateVariableAnnotation",
+          "documentation":"<p>An operation to modify an existing variable in the policy, such as changing its name, type, or description.</p>"
+        },
+        "deleteVariable":{
+          "shape":"AutomatedReasoningPolicyDeleteVariableAnnotation",
+          "documentation":"<p>An operation to remove a variable from the policy. The variable must not be referenced by any rules.</p>"
+        },
+        "addRule":{
+          "shape":"AutomatedReasoningPolicyAddRuleAnnotation",
+          "documentation":"<p>An operation to add a new logical rule to the policy using formal mathematical expressions.</p>"
+        },
+        "updateRule":{
+          "shape":"AutomatedReasoningPolicyUpdateRuleAnnotation",
+          "documentation":"<p>An operation to modify an existing rule in the policy, such as changing its logical expression or conditions.</p>"
+        },
+        "deleteRule":{
+          "shape":"AutomatedReasoningPolicyDeleteRuleAnnotation",
+          "documentation":"<p>An operation to remove a rule from the policy.</p>"
+        },
+        "addRuleFromNaturalLanguage":{
+          "shape":"AutomatedReasoningPolicyAddRuleFromNaturalLanguageAnnotation",
+          "documentation":"<p>An operation to add a new rule by converting natural language descriptions into formal logical expressions.</p>"
+        },
+        "updateFromRulesFeedback":{
+          "shape":"AutomatedReasoningPolicyUpdateFromRuleFeedbackAnnotation",
+          "documentation":"<p>An operation to update the policy based on feedback about how specific rules performed during testing or validation.</p>"
+        },
+        "updateFromScenarioFeedback":{
+          "shape":"AutomatedReasoningPolicyUpdateFromScenarioFeedbackAnnotation",
+          "documentation":"<p>An operation to update the policy based on feedback about how it performed on specific test scenarios.</p>"
+        },
+        "ingestContent":{
+          "shape":"AutomatedReasoningPolicyIngestContentAnnotation",
+          "documentation":"<p>An operation to process and incorporate new content into the policy, extracting additional rules and concepts.</p>"
+        }
+      },
+      "documentation":"<p>Contains the various operations that can be performed on an Automated Reasoning policy, including adding, updating, and deleting rules, variables, and types.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyAnnotationFeedbackNaturalLanguage":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyAnnotationIngestContent":{
+      "type":"string",
+      "max":4096,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyAnnotationList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyAnnotation"},
+      "max":10,
+      "min":0
+    },
+    "AutomatedReasoningPolicyAnnotationRuleNaturalLanguage":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyAnnotationStatus":{
+      "type":"string",
+      "enum":[
+        "APPLIED",
+        "FAILED"
+      ]
+    },
+    "AutomatedReasoningPolicyArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:automated-reasoning-policy/[a-z0-9]{12}(:([1-9][0-9]{0,11}))?"
+    },
+    "AutomatedReasoningPolicyBuildDocumentBlob":{
+      "type":"blob",
+      "max":5000000,
+      "min":1,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyBuildDocumentContentType":{
+      "type":"string",
+      "enum":[
+        "pdf",
+        "txt"
+      ]
+    },
+    "AutomatedReasoningPolicyBuildDocumentDescription":{
+      "type":"string",
+      "max":2000,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyBuildDocumentName":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyBuildLog":{
+      "type":"structure",
+      "required":["entries"],
+      "members":{
+        "entries":{
+          "shape":"AutomatedReasoningPolicyBuildLogEntryList",
+          "documentation":"<p>A list of log entries documenting each step in the policy build process, including timestamps, status, and detailed messages.</p>"
+        }
+      },
+      "documentation":"<p>Contains detailed logging information about the policy build process, including steps taken, decisions made, and any issues encountered.</p>"
+    },
+    "AutomatedReasoningPolicyBuildLogEntry":{
+      "type":"structure",
+      "required":[
+        "annotation",
+        "status",
+        "buildSteps"
+      ],
+      "members":{
+        "annotation":{
+          "shape":"AutomatedReasoningPolicyAnnotation",
+          "documentation":"<p>The annotation or operation that was being processed when this log entry was created.</p>"
+        },
+        "status":{
+          "shape":"AutomatedReasoningPolicyAnnotationStatus",
+          "documentation":"<p>The status of the build step (e.g., SUCCESS, FAILED, IN_PROGRESS).</p>"
+        },
+        "buildSteps":{
+          "shape":"AutomatedReasoningPolicyBuildStepList",
+          "documentation":"<p>Detailed information about the specific build steps that were executed, including any sub-operations or transformations.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single entry in the policy build log, containing information about a specific step or event in the build process.</p>"
+    },
+    "AutomatedReasoningPolicyBuildLogEntryList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyBuildLogEntry"}
+    },
+    "AutomatedReasoningPolicyBuildMessageType":{
+      "type":"string",
+      "enum":[
+        "INFO",
+        "WARNING",
+        "ERROR"
+      ]
+    },
+    "AutomatedReasoningPolicyBuildResultAssetType":{
+      "type":"string",
+      "enum":[
+        "BUILD_LOG",
+        "QUALITY_REPORT",
+        "POLICY_DEFINITION"
+      ]
+    },
+    "AutomatedReasoningPolicyBuildResultAssets":{
+      "type":"structure",
+      "members":{
+        "policyDefinition":{
+          "shape":"AutomatedReasoningPolicyDefinition",
+          "documentation":"<p>The complete policy definition generated by the build workflow, containing all rules, variables, and custom types extracted from the source documents.</p>"
+        },
+        "qualityReport":{
+          "shape":"AutomatedReasoningPolicyDefinitionQualityReport",
+          "documentation":"<p>A comprehensive report analyzing the quality of the generated policy, including metrics about rule coverage, potential conflicts, and unused elements.</p>"
+        },
+        "buildLog":{
+          "shape":"AutomatedReasoningPolicyBuildLog",
+          "documentation":"<p>The complete build log containing detailed information about each step in the policy generation process.</p>"
+        }
+      },
+      "documentation":"<p>Contains the various assets generated during a policy build workflow, including logs, quality reports, and the final policy definition.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyBuildStep":{
+      "type":"structure",
+      "required":[
+        "context",
+        "messages"
+      ],
+      "members":{
+        "context":{
+          "shape":"AutomatedReasoningPolicyBuildStepContext",
+          "documentation":"<p>Contextual information about what was being processed during this build step, such as the type of operation or the source material being analyzed.</p>"
+        },
+        "priorElement":{
+          "shape":"AutomatedReasoningPolicyDefinitionElement",
+          "documentation":"<p>Reference to the previous element or step in the build process, helping to trace the sequence of operations.</p>"
+        },
+        "messages":{
+          "shape":"AutomatedReasoningPolicyBuildStepMessageList",
+          "documentation":"<p>A list of messages generated during this build step, including informational messages, warnings, and error details.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single step in the policy build process, containing context about what was being processed and any messages or results.</p>"
+    },
+    "AutomatedReasoningPolicyBuildStepContext":{
+      "type":"structure",
+      "members":{
+        "planning":{
+          "shape":"AutomatedReasoningPolicyPlanning",
+          "documentation":"<p>Indicates that this build step was part of the planning phase, where the system determines what operations to perform.</p>"
+        },
+        "mutation":{
+          "shape":"AutomatedReasoningPolicyMutation",
+          "documentation":"<p>Indicates that this build step involved modifying the policy structure, such as adding or updating rules, variables, or types.</p>"
+        }
+      },
+      "documentation":"<p>Provides context about what type of operation was being performed during a build step.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyBuildStepList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyBuildStep"}
+    },
+    "AutomatedReasoningPolicyBuildStepMessage":{
+      "type":"structure",
+      "required":[
+        "message",
+        "messageType"
+      ],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The content of the message, describing what occurred during the build step.</p>"
+        },
+        "messageType":{
+          "shape":"AutomatedReasoningPolicyBuildMessageType",
+          "documentation":"<p>The type of message (e.g., INFO, WARNING, ERROR) indicating its severity and purpose.</p>"
+        }
+      },
+      "documentation":"<p>Represents a message generated during a build step, providing information about what happened or any issues encountered.</p>"
+    },
+    "AutomatedReasoningPolicyBuildStepMessageList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyBuildStepMessage"}
+    },
+    "AutomatedReasoningPolicyBuildWorkflowDocument":{
+      "type":"structure",
+      "required":[
+        "document",
+        "documentContentType",
+        "documentName"
+      ],
+      "members":{
+        "document":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentBlob",
+          "documentation":"<p>The actual content of the source document that will be analyzed to extract policy rules and concepts.</p>"
+        },
+        "documentContentType":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentContentType",
+          "documentation":"<p>The MIME type of the document content (e.g., text/plain, application/pdf, text/markdown).</p>"
+        },
+        "documentName":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentName",
+          "documentation":"<p>A descriptive name for the document that helps identify its purpose and content.</p>"
+        },
+        "documentDescription":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentDescription",
+          "documentation":"<p>A detailed description of the document's content and how it should be used in the policy generation process.</p>"
+        }
+      },
+      "documentation":"<p>Represents a source document used in the policy build workflow, containing the content and metadata needed for policy generation.</p>"
+    },
+    "AutomatedReasoningPolicyBuildWorkflowDocumentList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyBuildWorkflowDocument"},
+      "max":1,
+      "min":1
+    },
+    "AutomatedReasoningPolicyBuildWorkflowId":{
+      "type":"string",
+      "max":36,
+      "min":0,
+      "pattern":"[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}"
+    },
+    "AutomatedReasoningPolicyBuildWorkflowRepairContent":{
+      "type":"structure",
+      "required":["annotations"],
+      "members":{
+        "annotations":{
+          "shape":"AutomatedReasoningPolicyAnnotationList",
+          "documentation":"<p>Specific annotations or modifications to apply during the policy repair process, such as rule corrections or variable updates.</p>"
+        }
+      },
+      "documentation":"<p>Contains content and instructions for repairing or improving an existing Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyBuildWorkflowSource":{
+      "type":"structure",
+      "members":{
+        "policyDefinition":{
+          "shape":"AutomatedReasoningPolicyDefinition",
+          "documentation":"<p>An existing policy definition that serves as the starting point for the build workflow, typically used in policy repair or update scenarios.</p>"
+        },
+        "workflowContent":{
+          "shape":"AutomatedReasoningPolicyWorkflowTypeContent",
+          "documentation":"<p>The actual content to be processed in the build workflow, such as documents to analyze or repair instructions to apply.</p>"
+        }
+      },
+      "documentation":"<p>Defines the source content for a policy build workflow, which can include documents, repair instructions, or other input materials.</p>"
+    },
+    "AutomatedReasoningPolicyBuildWorkflowStatus":{
+      "type":"string",
+      "enum":[
+        "SCHEDULED",
+        "CANCEL_REQUESTED",
+        "PREPROCESSING",
+        "BUILDING",
+        "TESTING",
+        "COMPLETED",
+        "FAILED",
+        "CANCELLED"
+      ]
+    },
+    "AutomatedReasoningPolicyBuildWorkflowSummaries":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyBuildWorkflowSummary"},
+      "max":1000,
+      "min":0
+    },
+    "AutomatedReasoningPolicyBuildWorkflowSummary":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "status",
+        "buildWorkflowType",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy associated with this build workflow.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow.</p>"
+        },
+        "status":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowStatus",
+          "documentation":"<p>The current status of the build workflow (e.g., RUNNING, COMPLETED, FAILED, CANCELLED).</p>"
+        },
+        "buildWorkflowType":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowType",
+          "documentation":"<p>The type of build workflow (e.g., DOCUMENT_INGESTION, POLICY_REPAIR).</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the build workflow was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the build workflow was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Provides a summary of a policy build workflow, including its current status, timing information, and key identifiers.</p>"
+    },
+    "AutomatedReasoningPolicyBuildWorkflowType":{
+      "type":"string",
+      "enum":[
+        "INGEST_CONTENT",
+        "REFINE_POLICY",
+        "IMPORT_POLICY"
+      ]
+    },
+    "AutomatedReasoningPolicyConflictedRuleIdList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionRuleId"},
+      "max":500,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinition":{
+      "type":"structure",
+      "members":{
+        "version":{
+          "shape":"AutomatedReasoningPolicyFormatVersion",
+          "documentation":"<p>The version of the policy definition format.</p>"
+        },
+        "types":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeList",
+          "documentation":"<p>The custom user-defined vairable types used in the policy. Types are enum-based variable types that provide additional context beyond the predefined variable types.</p>"
+        },
+        "rules":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleList",
+          "documentation":"<p>The formal logic rules extracted from the source document. Rules define the logical constraints that determine whether model responses are valid, invalid, or satisfiable.</p>"
+        },
+        "variables":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableList",
+          "documentation":"<p>The variables that represent concepts in the policy. Variables can have values assigned when translating natural language into formal logic. Their descriptions are crucial for accurate translation.</p>"
+        }
+      },
+      "documentation":"<p>Contains the formal logic rules, variables, and custom variable types that define an Automated Reasoning policy. The policy definition specifies the constraints used to validate foundation model responses for accuracy and logical consistency.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionElement":{
+      "type":"structure",
+      "members":{
+        "policyDefinitionVariable":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariable",
+          "documentation":"<p>A variable element within the policy definition that represents a concept used in logical expressions and rules.</p>"
+        },
+        "policyDefinitionType":{
+          "shape":"AutomatedReasoningPolicyDefinitionType",
+          "documentation":"<p>A custom type element within the policy definition that defines a set of possible values for variables.</p>"
+        },
+        "policyDefinitionRule":{
+          "shape":"AutomatedReasoningPolicyDefinitionRule",
+          "documentation":"<p>A rule element within the policy definition that contains a formal logical expression used for validation.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single element in an Automated Reasoning policy definition, such as a rule, variable, or type definition.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyDefinitionQualityReport":{
+      "type":"structure",
+      "required":[
+        "typeCount",
+        "variableCount",
+        "ruleCount",
+        "unusedTypes",
+        "unusedTypeValues",
+        "unusedVariables",
+        "conflictingRules",
+        "disjointRuleSets"
+      ],
+      "members":{
+        "typeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of custom types defined in the policy.</p>"
+        },
+        "variableCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of variables defined in the policy.</p>"
+        },
+        "ruleCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of rules defined in the policy.</p>"
+        },
+        "unusedTypes":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeNameList",
+          "documentation":"<p>A list of custom types that are defined but not referenced by any variables or rules, suggesting they may be unnecessary.</p>"
+        },
+        "unusedTypeValues":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValuePairList",
+          "documentation":"<p>A list of type values that are defined but never used in any rules, indicating potential cleanup opportunities.</p>"
+        },
+        "unusedVariables":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableNameList",
+          "documentation":"<p>A list of variables that are defined but not referenced by any rules, suggesting they may be unnecessary.</p>"
+        },
+        "conflictingRules":{
+          "shape":"AutomatedReasoningPolicyConflictedRuleIdList",
+          "documentation":"<p>A list of rules that may conflict with each other, potentially leading to inconsistent policy behavior.</p>"
+        },
+        "disjointRuleSets":{
+          "shape":"AutomatedReasoningPolicyDisjointRuleSetList",
+          "documentation":"<p>Groups of rules that operate on completely separate sets of variables, indicating the policy may be addressing multiple unrelated concerns.</p>"
+        }
+      },
+      "documentation":"<p>Provides a comprehensive analysis of the quality and completeness of an Automated Reasoning policy definition, highlighting potential issues and optimization opportunities.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionRule":{
+      "type":"structure",
+      "required":[
+        "id",
+        "expression"
+      ],
+      "members":{
+        "id":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleId",
+          "documentation":"<p>The unique identifier of the rule within the policy.</p>"
+        },
+        "expression":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleExpression",
+          "documentation":"<p>The formal logic expression of the rule.</p>"
+        },
+        "alternateExpression":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleAlternateExpression",
+          "documentation":"<p>The human-readable form of the rule expression, often in natural language or simplified notation.</p>"
+        }
+      },
+      "documentation":"<p>Represents a formal logic rule in an Automated Reasoning policy. For example, rules can be expressed as if-then statements that define logical constraints.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionRuleAlternateExpression":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionRuleExpression":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionRuleId":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"[A-Z][0-9A-Z]{11}"
+    },
+    "AutomatedReasoningPolicyDefinitionRuleIdList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionRuleId"},
+      "max":100,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinitionRuleList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionRule"},
+      "max":1500,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinitionType":{
+      "type":"structure",
+      "required":[
+        "name",
+        "values"
+      ],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The name of the custom type.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeDescription",
+          "documentation":"<p>The description of what the custom type represents.</p>"
+        },
+        "values":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueList",
+          "documentation":"<p>The possible values for this enum-based type, each with its own description.</p>"
+        }
+      },
+      "documentation":"<p>Represents a custom user-defined viarble type in an Automated Reasoning policy. Types are enum-based and provide additional context beyond predefined variable types.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionTypeDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionTypeList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionType"},
+      "max":150,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinitionTypeName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9_]*",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionTypeNameList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionTypeName"},
+      "max":150,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValue":{
+      "type":"structure",
+      "required":["value"],
+      "members":{
+        "value":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The actual value or identifier for this type value.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueDescription",
+          "documentation":"<p>A human-readable description explaining what this type value represents and when it should be used.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single value within a custom type definition, including its identifier and description.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValueDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValueList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionTypeValue"},
+      "max":150,
+      "min":1
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValueName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9_]*"
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValuePair":{
+      "type":"structure",
+      "required":[
+        "typeName",
+        "valueName"
+      ],
+      "members":{
+        "typeName":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The name of the custom type that contains the referenced value.</p>"
+        },
+        "valueName":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The name of the specific value within the type.</p>"
+        }
+      },
+      "documentation":"<p>Associates a type name with a specific value name, used for referencing type values in rules and other policy elements.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionTypeValuePairList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionTypeValuePair"},
+      "max":22500,
+      "min":1
+    },
+    "AutomatedReasoningPolicyDefinitionVariable":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type",
+        "description"
+      ],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The name of the variable. Use descriptive names that clearly indicate the concept being represented.</p>"
+        },
+        "type":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The data type of the variable. Valid types include bool, int, real, enum, and custom types that you can provide.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableDescription",
+          "documentation":"<p>The description of the variable that explains what it represents and how users might refer to it. Clear and comprehensive descriptions are essential for accurate natural language translation.</p>"
+        }
+      },
+      "documentation":"<p>Represents a variable in an Automated Reasoning policy. Variables represent concepts that can have values assigned during natural language translation.</p>"
+    },
+    "AutomatedReasoningPolicyDefinitionVariableDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionVariableList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionVariable"},
+      "max":600,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDefinitionVariableName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9_]*",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDefinitionVariableNameList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionVariableName"},
+      "max":600,
+      "min":0
+    },
+    "AutomatedReasoningPolicyDeleteRuleAnnotation":{
+      "type":"structure",
+      "required":["ruleId"],
+      "members":{
+        "ruleId":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleId",
+          "documentation":"<p>The unique identifier of the rule to delete from the policy.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for removing a rule from an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteRuleMutation":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleId",
+          "documentation":"<p>The unique identifier of the rule to delete.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that removes a rule from the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteTypeAnnotation":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The name of the custom type to delete from the policy. The type must not be referenced by any variables or rules.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for removing a custom type from an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteTypeMutation":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The name of the custom type to delete.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that removes a custom type from the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteTypeValue":{
+      "type":"structure",
+      "required":["value"],
+      "members":{
+        "value":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The identifier or name of the value to remove from the type.</p>"
+        }
+      },
+      "documentation":"<p>Represents a value to be removed from an existing custom type in the policy.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteVariableAnnotation":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The name of the variable to delete from the policy. The variable must not be referenced by any rules.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for removing a variable from an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyDeleteVariableMutation":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The name of the variable to delete.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that removes a variable from the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\s\\S]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyDisjointRuleSet":{
+      "type":"structure",
+      "required":[
+        "variables",
+        "rules"
+      ],
+      "members":{
+        "variables":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableNameList",
+          "documentation":"<p>The set of variables that are used by the rules in this disjoint set.</p>"
+        },
+        "rules":{
+          "shape":"AutomatedReasoningPolicyDisjointedRuleIdList",
+          "documentation":"<p>The list of rules that form this disjoint set, all operating on the same set of variables.</p>"
+        }
+      },
+      "documentation":"<p>Represents a set of rules that operate on completely separate variables, indicating they address different concerns or domains within the policy.</p>"
+    },
+    "AutomatedReasoningPolicyDisjointRuleSetList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDisjointRuleSet"}
+    },
+    "AutomatedReasoningPolicyDisjointedRuleIdList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyDefinitionRuleId"},
+      "max":500,
+      "min":0
+    },
+    "AutomatedReasoningPolicyFormatVersion":{"type":"string"},
+    "AutomatedReasoningPolicyHash":{
+      "type":"string",
+      "max":128,
+      "min":128,
+      "pattern":"[0-9a-z]{128}"
+    },
+    "AutomatedReasoningPolicyId":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"[a-z0-9]{12}"
+    },
+    "AutomatedReasoningPolicyIngestContentAnnotation":{
+      "type":"structure",
+      "required":["content"],
+      "members":{
+        "content":{
+          "shape":"AutomatedReasoningPolicyAnnotationIngestContent",
+          "documentation":"<p>The new content to be analyzed and incorporated into the policy, such as additional documents or rule descriptions.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for processing and incorporating new content into an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyMutation":{
+      "type":"structure",
+      "members":{
+        "addType":{
+          "shape":"AutomatedReasoningPolicyAddTypeMutation",
+          "documentation":"<p>A mutation to add a new custom type to the policy.</p>"
+        },
+        "updateType":{
+          "shape":"AutomatedReasoningPolicyUpdateTypeMutation",
+          "documentation":"<p>A mutation to modify an existing custom type in the policy.</p>"
+        },
+        "deleteType":{
+          "shape":"AutomatedReasoningPolicyDeleteTypeMutation",
+          "documentation":"<p>A mutation to remove a custom type from the policy.</p>"
+        },
+        "addVariable":{
+          "shape":"AutomatedReasoningPolicyAddVariableMutation",
+          "documentation":"<p>A mutation to add a new variable to the policy.</p>"
+        },
+        "updateVariable":{
+          "shape":"AutomatedReasoningPolicyUpdateVariableMutation",
+          "documentation":"<p>A mutation to modify an existing variable in the policy.</p>"
+        },
+        "deleteVariable":{
+          "shape":"AutomatedReasoningPolicyDeleteVariableMutation",
+          "documentation":"<p>A mutation to remove a variable from the policy.</p>"
+        },
+        "addRule":{
+          "shape":"AutomatedReasoningPolicyAddRuleMutation",
+          "documentation":"<p>A mutation to add a new rule to the policy.</p>"
+        },
+        "updateRule":{
+          "shape":"AutomatedReasoningPolicyUpdateRuleMutation",
+          "documentation":"<p>A mutation to modify an existing rule in the policy.</p>"
+        },
+        "deleteRule":{
+          "shape":"AutomatedReasoningPolicyDeleteRuleMutation",
+          "documentation":"<p>A mutation to remove a rule from the policy.</p>"
+        }
+      },
+      "documentation":"<p>A container for various mutation operations that can be applied to an Automated Reasoning policy, including adding, updating, and deleting policy elements.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyName":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[0-9a-zA-Z-_ ]+",
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyPlanning":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Represents the planning phase of policy build workflow, where the system analyzes source content and determines what operations to perform.</p>"
+    },
+    "AutomatedReasoningPolicyScenario":{
+      "type":"structure",
+      "required":[
+        "expression",
+        "alternateExpression",
+        "ruleIds",
+        "expectedResult"
+      ],
+      "members":{
+        "expression":{
+          "shape":"AutomatedReasoningPolicyScenarioExpression",
+          "documentation":"<p>The logical expression or condition that defines this test scenario.</p>"
+        },
+        "alternateExpression":{
+          "shape":"AutomatedReasoningPolicyScenarioAlternateExpression",
+          "documentation":"<p>An alternative way to express the same test scenario, used for validation and comparison purposes.</p>"
+        },
+        "ruleIds":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleIdList",
+          "documentation":"<p>The list of rule identifiers that are expected to be triggered or evaluated by this test scenario.</p>"
+        },
+        "expectedResult":{
+          "shape":"AutomatedReasoningCheckResult",
+          "documentation":"<p>The expected outcome when this scenario is evaluated against the policy (e.g., PASS, FAIL, VIOLATION).</p>"
+        }
+      },
+      "documentation":"<p>Represents a test scenario used to validate an Automated Reasoning policy, including the test conditions and expected outcomes.</p>"
+    },
+    "AutomatedReasoningPolicyScenarioAlternateExpression":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyScenarioExpression":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicySummaries":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicySummary"},
+      "max":1000,
+      "min":0
+    },
+    "AutomatedReasoningPolicySummary":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "name",
+        "version",
+        "policyId",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The name of the policy.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>The description of the policy.</p>"
+        },
+        "version":{
+          "shape":"AutomatedReasoningPolicyVersion",
+          "documentation":"<p>The version of the policy.</p>"
+        },
+        "policyId":{
+          "shape":"AutomatedReasoningPolicyId",
+          "documentation":"<p>The unique identifier of the policy.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about an Automated Reasoning policy, including metadata and timestamps.</p>"
+    },
+    "AutomatedReasoningPolicyTestCase":{
+      "type":"structure",
+      "required":[
+        "testCaseId",
+        "guardContent",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the test.</p>"
+        },
+        "guardContent":{
+          "shape":"AutomatedReasoningPolicyTestGuardContent",
+          "documentation":"<p>The output content to be validated by the policy, typically representing a foundation model response.</p>"
+        },
+        "queryContent":{
+          "shape":"AutomatedReasoningPolicyTestQueryContent",
+          "documentation":"<p>The input query or prompt that generated the content. This provides context for the validation.</p>"
+        },
+        "expectedAggregatedFindingsResult":{
+          "shape":"AutomatedReasoningCheckResult",
+          "documentation":"<p>The expected result of the Automated Reasoning check for this test.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the test was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the test was last updated.</p>"
+        },
+        "confidenceThreshold":{
+          "shape":"AutomatedReasoningCheckTranslationConfidence",
+          "documentation":"<p>The minimum confidence level for logic validation. Content meeting this threshold is considered high-confidence and can be validated.</p>"
+        }
+      },
+      "documentation":"<p>Represents a test for validating an Automated Reasoning policy. tests contain sample inputs and expected outcomes to verify policy behavior.</p>"
+    },
+    "AutomatedReasoningPolicyTestCaseId":{
+      "type":"string",
+      "max":12,
+      "min":0,
+      "pattern":"[0-9A-Z]{12}"
+    },
+    "AutomatedReasoningPolicyTestCaseIdList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyTestCaseId"},
+      "max":1,
+      "min":1
+    },
+    "AutomatedReasoningPolicyTestCaseList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyTestCase"},
+      "max":1000,
+      "min":0
+    },
+    "AutomatedReasoningPolicyTestGuardContent":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyTestList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyTestResult"},
+      "max":5000,
+      "min":0
+    },
+    "AutomatedReasoningPolicyTestQueryContent":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "sensitive":true
+    },
+    "AutomatedReasoningPolicyTestResult":{
+      "type":"structure",
+      "required":[
+        "testCase",
+        "policyArn",
+        "testRunStatus",
+        "updatedAt"
+      ],
+      "members":{
+        "testCase":{
+          "shape":"AutomatedReasoningPolicyTestCase",
+          "documentation":"<p>The test case that was executed, including the input content, expected results, and configuration parameters used during validation.</p>"
+        },
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy that was tested.</p>"
+        },
+        "testRunStatus":{
+          "shape":"AutomatedReasoningPolicyTestRunStatus",
+          "documentation":"<p>The overall status of the test run (e.g., COMPLETED, FAILED, IN_PROGRESS).</p>"
+        },
+        "testFindings":{
+          "shape":"AutomatedReasoningCheckFindingList",
+          "documentation":"<p>Detailed findings from the test run, including any issues, violations, or unexpected behaviors discovered.</p>"
+        },
+        "testRunResult":{
+          "shape":"AutomatedReasoningPolicyTestRunResult",
+          "documentation":"<p>The overall result of the test run, indicating whether the policy passed or failed validation.</p>"
+        },
+        "aggregatedTestFindingsResult":{
+          "shape":"AutomatedReasoningCheckResult",
+          "documentation":"<p>A summary of all test findings, aggregated to provide an overall assessment of policy quality and correctness.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the test results were last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains the results of testing an Automated Reasoning policy against various scenarios and validation checks.</p>"
+    },
+    "AutomatedReasoningPolicyTestRunResult":{
+      "type":"string",
+      "enum":[
+        "PASSED",
+        "FAILED"
+      ]
+    },
+    "AutomatedReasoningPolicyTestRunStatus":{
+      "type":"string",
+      "enum":[
+        "NOT_STARTED",
+        "SCHEDULED",
+        "IN_PROGRESS",
+        "COMPLETED",
+        "FAILED"
+      ]
+    },
+    "AutomatedReasoningPolicyTypeValueAnnotation":{
+      "type":"structure",
+      "members":{
+        "addTypeValue":{
+          "shape":"AutomatedReasoningPolicyAddTypeValue",
+          "documentation":"<p>An operation to add a new value to an existing custom type.</p>"
+        },
+        "updateTypeValue":{
+          "shape":"AutomatedReasoningPolicyUpdateTypeValue",
+          "documentation":"<p>An operation to modify an existing value within a custom type.</p>"
+        },
+        "deleteTypeValue":{
+          "shape":"AutomatedReasoningPolicyDeleteTypeValue",
+          "documentation":"<p>An operation to remove a value from an existing custom type.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for managing values within custom types, including adding, updating, or removing specific type values.</p>",
+      "union":true
+    },
+    "AutomatedReasoningPolicyTypeValueAnnotationList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyTypeValueAnnotation"},
+      "max":50,
+      "min":0
+    },
+    "AutomatedReasoningPolicyUpdateFromRuleFeedbackAnnotation":{
+      "type":"structure",
+      "required":["feedback"],
+      "members":{
+        "ruleIds":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleIdList",
+          "documentation":"<p>The list of rule identifiers that the feedback applies to.</p>"
+        },
+        "feedback":{
+          "shape":"AutomatedReasoningPolicyAnnotationFeedbackNaturalLanguage",
+          "documentation":"<p>The feedback information about rule performance, including suggestions for improvements or corrections.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for updating the policy based on feedback about how specific rules performed during testing or real-world usage.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateFromScenarioFeedbackAnnotation":{
+      "type":"structure",
+      "required":["scenarioExpression"],
+      "members":{
+        "ruleIds":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleIdList",
+          "documentation":"<p>The list of rule identifiers that were involved in the scenario being evaluated.</p>"
+        },
+        "scenarioExpression":{
+          "shape":"AutomatedReasoningPolicyScenarioExpression",
+          "documentation":"<p>The logical expression that defines the test scenario that generated this feedback.</p>"
+        },
+        "feedback":{
+          "shape":"AutomatedReasoningPolicyAnnotationFeedbackNaturalLanguage",
+          "documentation":"<p>The feedback information about scenario performance, including any issues or improvements identified.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for updating the policy based on feedback about how it performed on specific test scenarios.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateRuleAnnotation":{
+      "type":"structure",
+      "required":[
+        "ruleId",
+        "expression"
+      ],
+      "members":{
+        "ruleId":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleId",
+          "documentation":"<p>The unique identifier of the rule to update.</p>"
+        },
+        "expression":{
+          "shape":"AutomatedReasoningPolicyDefinitionRuleExpression",
+          "documentation":"<p>The new formal logical expression for the rule, replacing the previous expression.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for modifying an existing rule in an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateRuleMutation":{
+      "type":"structure",
+      "required":["rule"],
+      "members":{
+        "rule":{
+          "shape":"AutomatedReasoningPolicyDefinitionRule",
+          "documentation":"<p>The updated rule definition containing the modified formal logical expression and any changed metadata for the existing rule.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that modifies an existing rule in the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateTypeAnnotation":{
+      "type":"structure",
+      "required":[
+        "name",
+        "values"
+      ],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The current name of the custom type to update.</p>"
+        },
+        "newName":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeName",
+          "documentation":"<p>The new name for the custom type, if you want to rename it. If not provided, the name remains unchanged.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeDescription",
+          "documentation":"<p>The new description for the custom type, replacing the previous description.</p>"
+        },
+        "values":{
+          "shape":"AutomatedReasoningPolicyTypeValueAnnotationList",
+          "documentation":"<p>The updated list of values for the custom type, which can include additions, modifications, or removals.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for modifying an existing custom type in an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateTypeMutation":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"AutomatedReasoningPolicyDefinitionType",
+          "documentation":"<p>The updated type definition containing the modified name, description, or values for the existing custom type.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that modifies an existing custom type in the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateTypeValue":{
+      "type":"structure",
+      "required":["value"],
+      "members":{
+        "value":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The current identifier or name of the type value to update.</p>"
+        },
+        "newValue":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueName",
+          "documentation":"<p>The new identifier or name for the type value, if you want to rename it.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionTypeValueDescription",
+          "documentation":"<p>The new description for the type value, replacing the previous description.</p>"
+        }
+      },
+      "documentation":"<p>Represents a modification to a value within an existing custom type.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateVariableAnnotation":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The current name of the variable to update.</p>"
+        },
+        "newName":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableName",
+          "documentation":"<p>The new name for the variable, if you want to rename it. If not provided, the name remains unchanged.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariableDescription",
+          "documentation":"<p>The new description for the variable, replacing the previous description.</p>"
+        }
+      },
+      "documentation":"<p>An annotation for modifying an existing variable in an Automated Reasoning policy.</p>"
+    },
+    "AutomatedReasoningPolicyUpdateVariableMutation":{
+      "type":"structure",
+      "required":["variable"],
+      "members":{
+        "variable":{
+          "shape":"AutomatedReasoningPolicyDefinitionVariable",
+          "documentation":"<p>The updated variable definition containing the modified name, type, or description for the existing variable.</p>"
+        }
+      },
+      "documentation":"<p>A mutation operation that modifies an existing variable in the policy definition during the build process.</p>"
+    },
+    "AutomatedReasoningPolicyVersion":{
+      "type":"string",
+      "max":12,
+      "min":0,
+      "pattern":"([1-9][0-9]{0,11})"
+    },
+    "AutomatedReasoningPolicyWorkflowTypeContent":{
+      "type":"structure",
+      "members":{
+        "documents":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowDocumentList",
+          "documentation":"<p>The list of documents to be processed in a document ingestion workflow.</p>"
+        },
+        "policyRepairAssets":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowRepairContent",
+          "documentation":"<p>The assets and instructions needed for a policy repair workflow, including repair annotations and guidance.</p>"
+        }
+      },
+      "documentation":"<p>Defines the content and configuration for different types of policy build workflows.</p>",
+      "union":true
+    },
     "BaseModelIdentifier":{
       "type":"string",
       "max":2048,
@@ -1245,7 +3826,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))))|(arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:(|[0-9a-z-]{1,20}):(|[0-9]{12}):inference-profile/[a-zA-Z0-9-:.]+)|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)"
+      "pattern":"(arn:aws(-[^:]+)?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
     },
     "BedrockModelId":{
       "type":"string",
@@ -1253,6 +3834,12 @@
       "min":0,
       "pattern":"[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12}|)"
     },
+    "BedrockRerankingModelArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/(.*))?"
+    },
     "Boolean":{
       "type":"boolean",
       "box":true
@@ -1297,6 +3884,31 @@
       },
       "documentation":"<p>Contains the document contained in the wrapper object, along with its attributes/fields.</p>"
     },
+    "CancelAutomatedReasoningPolicyBuildWorkflowRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose build workflow you want to cancel.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow to cancel. You can get this ID from the StartAutomatedReasoningPolicyBuildWorkflow response or by listing build workflows.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        }
+      }
+    },
+    "CancelAutomatedReasoningPolicyBuildWorkflowResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "CloudWatchConfig":{
       "type":"structure",
       "required":[
@@ -1342,6 +3954,279 @@
       "type":"string",
       "pattern":".*[a-z]{1,20}/.{1,20}.*"
     },
+    "CreateAutomatedReasoningPolicyRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>A unique name for the Automated Reasoning policy. The name must be between 1 and 63 characters and can contain letters, numbers, hyphens, and underscores.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>A description of the Automated Reasoning policy. Use this to provide context about the policy's purpose and the types of validations it performs.</p>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than once. If this token matches a previous request, Amazon Bedrock ignores the request but doesn't return an error.</p>",
+          "idempotencyToken":true
+        },
+        "policyDefinition":{
+          "shape":"AutomatedReasoningPolicyDefinition",
+          "documentation":"<p>The policy definition that contains the formal logic rules, variables, and custom variable types used to validate foundation model responses in your application.</p>"
+        },
+        "kmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>The identifier of the KMS key to use for encrypting the automated reasoning policy and its associated artifacts. If you don't specify a KMS key, Amazon Bedrock uses an KMS managed key for encryption. For enhanced security and control, you can specify a customer managed KMS key.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of tags to associate with the Automated Reasoning policy. Tags help you organize and manage your policies.</p>"
+        }
+      }
+    },
+    "CreateAutomatedReasoningPolicyResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "version",
+        "name",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy that you created.</p>"
+        },
+        "version":{
+          "shape":"AutomatedReasoningPolicyVersion",
+          "documentation":"<p>The version number of the newly created Automated Reasoning policy. The initial version is always DRAFT.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The name of the Automated Reasoning policy.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>The description of the Automated Reasoning policy.</p>"
+        },
+        "definitionHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash of the policy definition. This is used as a concurrency token for creating policy versions that you can use in your application.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was last updated.</p>"
+        }
+      }
+    },
+    "CreateAutomatedReasoningPolicyTestCaseRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "guardContent",
+        "expectedAggregatedFindingsResult"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy for which to create the test.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "guardContent":{
+          "shape":"AutomatedReasoningPolicyTestGuardContent",
+          "documentation":"<p>The output content that's validated by the Automated Reasoning policy. This represents the foundation model response that will be checked for accuracy.</p>"
+        },
+        "queryContent":{
+          "shape":"AutomatedReasoningPolicyTestQueryContent",
+          "documentation":"<p>The input query or prompt that generated the content. This provides context for the validation.</p>"
+        },
+        "expectedAggregatedFindingsResult":{
+          "shape":"AutomatedReasoningCheckResult",
+          "documentation":"<p>The expected result of the Automated Reasoning check. Valid values include: , TOO_COMPLEX, and NO_TRANSLATIONS.</p> <ul> <li> <p> <code>VALID</code> - The claims are true. The claims are implied by the premises and the Automated Reasoning policy. Given the Automated Reasoning policy and premises, it is not possible for these claims to be false. In other words, there are no alternative answers that are true that contradict the claims.</p> </li> <li> <p> <code>INVALID</code> - The claims are false. The claims are not implied by the premises and Automated Reasoning policy. Furthermore, there exists different claims that are consistent with the premises and Automated Reasoning policy.</p> </li> <li> <p> <code>SATISFIABLE</code> - The claims can be true or false. It depends on what assumptions are made for the claim to be implied from the premises and Automated Reasoning policy rules. In this situation, different assumptions can make input claims false and alternative claims true.</p> </li> <li> <p> <code>IMPOSSIBLE</code> - Automated Reasoning can’t make a statement about the claims. This can happen if the premises are logically incorrect, or if there is a conflict within the Automated Reasoning policy itself.</p> </li> <li> <p> <code>TRANSLATION_AMBIGUOUS</code> - Detected an ambiguity in the translation meant it would be unsound to continue with validity checking. Additional context or follow-up questions might be needed to get translation to succeed.</p> </li> <li> <p> <code>TOO_COMPLEX</code> - The input contains too much information for Automated Reasoning to process within its latency limits.</p> </li> <li> <p> <code>NO_TRANSLATIONS</code> - Identifies that some or all of the input prompt wasn't translated into logic. This can happen if the input isn't relevant to the Automated Reasoning policy, or if the policy doesn't have variables to model relevant input. If Automated Reasoning can't translate anything, you get a single <code>NO_TRANSLATIONS</code> finding. You might also see a <code>NO_TRANSLATIONS</code> (along with other findings) if some part of the validation isn't translated.</p> </li> </ul>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "confidenceThreshold":{
+          "shape":"AutomatedReasoningCheckTranslationConfidence",
+          "documentation":"<p>The minimum confidence level for logic validation. Content that meets the threshold is considered a high-confidence finding that can be validated.</p>"
+        }
+      }
+    },
+    "CreateAutomatedReasoningPolicyTestCaseResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCaseId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy for which the test was created.</p>"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the created test.</p>"
+        }
+      }
+    },
+    "CreateAutomatedReasoningPolicyVersionRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "lastUpdatedDefinitionHash"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy for which to create a version.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "lastUpdatedDefinitionHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash of the current policy definition used as a concurrency token to ensure the policy hasn't been modified since you last retrieved it.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of tags to associate with the policy version.</p>"
+        }
+      }
+    },
+    "CreateAutomatedReasoningPolicyVersionResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "version",
+        "name",
+        "definitionHash",
+        "createdAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The versioned Amazon Resource Name (ARN) of the policy version.</p>"
+        },
+        "version":{
+          "shape":"AutomatedReasoningPolicyVersion",
+          "documentation":"<p>The version number of the policy version.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The name of the policy version.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>The description of the policy version.</p>"
+        },
+        "definitionHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash of the policy definition for this version.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy version was created.</p>"
+        }
+      }
+    },
+    "CreateCustomModelDeploymentRequest":{
+      "type":"structure",
+      "required":[
+        "modelDeploymentName",
+        "modelArn"
+      ],
+      "members":{
+        "modelDeploymentName":{
+          "shape":"ModelDeploymentName",
+          "documentation":"<p>The name for the custom model deployment. The name must be unique within your Amazon Web Services account and Region.</p>"
+        },
+        "modelArn":{
+          "shape":"CustomModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model to deploy for on-demand inference. The custom model must be in the <code>Active</code> state.</p>"
+        },
+        "description":{
+          "shape":"CustomModelDeploymentDescription",
+          "documentation":"<p>A description for the custom model deployment to help you identify its purpose.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags to assign to the custom model deployment. You can use tags to organize and track your Amazon Web Services resources for cost allocation and management purposes.</p>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateCustomModelDeploymentResponse":{
+      "type":"structure",
+      "required":["customModelDeploymentArn"],
+      "members":{
+        "customModelDeploymentArn":{
+          "shape":"CustomModelDeploymentArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model deployment. Use this ARN as the <code>modelId</code> parameter when invoking the model with the <code>InvokeModel</code> or <code>Converse</code> operations.</p>"
+        }
+      }
+    },
+    "CreateCustomModelRequest":{
+      "type":"structure",
+      "required":[
+        "modelName",
+        "modelSourceConfig"
+      ],
+      "members":{
+        "modelName":{
+          "shape":"CustomModelName",
+          "documentation":"<p>A unique name for the custom model.</p>"
+        },
+        "modelSourceConfig":{
+          "shape":"ModelDataSource",
+          "documentation":"<p>The data source for the model. The Amazon S3 URI in the model source must be for the Amazon-managed Amazon S3 bucket containing your model artifacts.</p>"
+        },
+        "modelKmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer managed KMS key to encrypt the custom model. If you don't provide a KMS key, Amazon Bedrock uses an Amazon Web Services-managed KMS key to encrypt the model. </p> <p>If you provide a customer managed KMS key, your Amazon Bedrock service role must have permissions to use it. For more information see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/encryption-import-model.html\">Encryption of imported models</a>. </p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM service role that Amazon Bedrock assumes to perform tasks on your behalf. This role must have permissions to access the Amazon S3 bucket containing your model artifacts and the KMS key (if specified). For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-import-iam-role.html\">Setting up an IAM service role for importing models</a> in the Amazon Bedrock User Guide.</p>"
+        },
+        "modelTags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of key-value pairs to associate with the custom model resource. You can use these tags to organize and identify your resources.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tagging.html\">Tagging resources</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateCustomModelResponse":{
+      "type":"structure",
+      "required":["modelArn"],
+      "members":{
+        "modelArn":{
+          "shape":"ModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the new custom model.</p>"
+        }
+      }
+    },
     "CreateEvaluationJobRequest":{
       "type":"structure",
       "required":[
@@ -1405,6 +4290,33 @@
         }
       }
     },
+    "CreateFoundationModelAgreementRequest":{
+      "type":"structure",
+      "required":[
+        "offerToken",
+        "modelId"
+      ],
+      "members":{
+        "offerToken":{
+          "shape":"OfferToken",
+          "documentation":"<p>An offer token encapsulates the information for an offer.</p>"
+        },
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>Model Id of the model for the access request.</p>"
+        }
+      }
+    },
+    "CreateFoundationModelAgreementResponse":{
+      "type":"structure",
+      "required":["modelId"],
+      "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>Model Id of the model for the access request.</p>"
+        }
+      }
+    },
     "CreateGuardrailRequest":{
       "type":"structure",
       "required":[
@@ -1441,6 +4353,14 @@
           "shape":"GuardrailContextualGroundingPolicyConfig",
           "documentation":"<p>The contextual grounding policy configuration used to create a guardrail.</p>"
         },
+        "automatedReasoningPolicyConfig":{
+          "shape":"GuardrailAutomatedReasoningPolicyConfig",
+          "documentation":"<p>Optional configuration for integrating Automated Reasoning policies with the new guardrail.</p>"
+        },
+        "crossRegionConfig":{
+          "shape":"GuardrailCrossRegionConfig",
+          "documentation":"<p>The system-defined guardrail profile that you're using with your guardrail. Guardrail profiles define the destination Amazon Web Services Regions where guardrail inference requests can be automatically routed.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">Amazon Bedrock User Guide</a>.</p>"
+        },
         "blockedInputMessaging":{
           "shape":"GuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the guardrail blocks a prompt.</p>"
@@ -1858,6 +4778,55 @@
         }
       }
     },
+    "CreatePromptRouterRequest":{
+      "type":"structure",
+      "required":[
+        "promptRouterName",
+        "models",
+        "routingCriteria",
+        "fallbackModel"
+      ],
+      "members":{
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure idempotency of your requests. If not specified, the Amazon Web Services SDK automatically generates one for you.</p>",
+          "idempotencyToken":true
+        },
+        "promptRouterName":{
+          "shape":"PromptRouterName",
+          "documentation":"<p>The name of the prompt router. The name must be unique within your Amazon Web Services account in the current region.</p>"
+        },
+        "models":{
+          "shape":"PromptRouterTargetModels",
+          "documentation":"<p>A list of foundation models that the prompt router can route requests to. At least one model must be specified.</p>"
+        },
+        "description":{
+          "shape":"PromptRouterDescription",
+          "documentation":"<p>An optional description of the prompt router to help identify its purpose.</p>"
+        },
+        "routingCriteria":{
+          "shape":"RoutingCriteria",
+          "documentation":"<p>The criteria, which is the response quality difference, used to determine how incoming requests are routed to different models.</p>"
+        },
+        "fallbackModel":{
+          "shape":"PromptRouterTargetModel",
+          "documentation":"<p>The default model to use when the routing criteria is not met.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of key-value pairs to apply to this resource as tags. You can use tags to categorize and manage your Amazon Web Services resources.</p>"
+        }
+      }
+    },
+    "CreatePromptRouterResponse":{
+      "type":"structure",
+      "members":{
+        "promptRouterArn":{
+          "shape":"PromptRouterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the prompt router.</p>"
+        }
+      }
+    },
     "CreateProvisionedModelThroughputRequest":{
       "type":"structure",
       "required":[
@@ -1903,11 +4872,138 @@
         }
       }
     },
+    "CustomMetricBedrockEvaluatorModel":{
+      "type":"structure",
+      "required":["modelIdentifier"],
+      "members":{
+        "modelIdentifier":{
+          "shape":"EvaluatorModelIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the evaluator model for custom metrics. For a list of supported evaluator models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/evaluation-judge.html\">Evaluate model performance using another LLM as a judge</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/evaluation-kb.html\">Evaluate the performance of RAG sources using Amazon Bedrock evaluations</a>.</p>"
+        }
+      },
+      "documentation":"<p>Defines the model you want to evaluate custom metrics in an Amazon Bedrock evaluation job.</p>"
+    },
+    "CustomMetricBedrockEvaluatorModels":{
+      "type":"list",
+      "member":{"shape":"CustomMetricBedrockEvaluatorModel"},
+      "max":1,
+      "min":1
+    },
+    "CustomMetricDefinition":{
+      "type":"structure",
+      "required":[
+        "name",
+        "instructions"
+      ],
+      "members":{
+        "name":{
+          "shape":"MetricName",
+          "documentation":"<p>The name for a custom metric. Names must be unique in your Amazon Web Services region.</p>"
+        },
+        "instructions":{
+          "shape":"CustomMetricInstructions",
+          "documentation":"<p>The prompt for a custom metric that instructs the evaluator model how to rate the model or RAG source under evaluation.</p>"
+        },
+        "ratingScale":{
+          "shape":"RatingScale",
+          "documentation":"<p>Defines the rating scale to be used for a custom metric. We recommend that you always define a ratings scale when creating a custom metric. If you don't define a scale, Amazon Bedrock won't be able to visually display the results of the evaluation in the console or calculate average values of numerical scores. For more information on specifying a rating scale, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html#model-evaluation-custom-metrics-prompt-formats-schema\">Specifying an output schema (rating scale)</a>.</p>"
+        }
+      },
+      "documentation":"<p>The definition of a custom metric for use in an Amazon Bedrock evaluation job. A custom metric definition includes a metric name, prompt (instructions) and optionally, a rating scale. Your prompt must include a task description and input variables. The required input variables are different for model-as-a-judge and RAG evaluations.</p> <p>For more information about how to define a custom metric in Amazon Bedrock, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html\">Create a prompt for a custom metrics (LLM-as-a-judge model evaluations)</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-evaluation-custom-metrics-prompt-formats.html\">Create a prompt for a custom metrics (RAG evaluations)</a>.</p>",
+      "sensitive":true
+    },
+    "CustomMetricEvaluatorModelConfig":{
+      "type":"structure",
+      "required":["bedrockEvaluatorModels"],
+      "members":{
+        "bedrockEvaluatorModels":{
+          "shape":"CustomMetricBedrockEvaluatorModels",
+          "documentation":"<p>Defines the model you want to evaluate custom metrics in an Amazon Bedrock evaluation job.</p>"
+        }
+      },
+      "documentation":"<p>Configuration of the evaluator model you want to use to evaluate custom metrics in an Amazon Bedrock evaluation job.</p>"
+    },
+    "CustomMetricInstructions":{
+      "type":"string",
+      "max":5000,
+      "min":1
+    },
     "CustomModelArn":{
       "type":"string",
       "max":1011,
       "min":20,
-      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}/[a-z0-9]{12}"
+      "pattern":"arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:[a-z0-9-]{1,20}:[0-9]{12}:custom-model/(imported|[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2})/[a-z0-9]{12}"
+    },
+    "CustomModelDeploymentArn":{
+      "type":"string",
+      "max":1011,
+      "min":0,
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:custom-model-deployment/[a-z0-9]{12}"
+    },
+    "CustomModelDeploymentDescription":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":".*"
+    },
+    "CustomModelDeploymentIdentifier":{
+      "type":"string",
+      "max":93,
+      "min":1,
+      "pattern":"(arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:[a-z0-9-]{1,20}:[0-9]{12}:custom-model-deployment/[a-z0-9]{12})|^([0-9a-zA-Z][_-]?){1,63}"
+    },
+    "CustomModelDeploymentStatus":{
+      "type":"string",
+      "enum":[
+        "Creating",
+        "Active",
+        "Failed"
+      ]
+    },
+    "CustomModelDeploymentSummary":{
+      "type":"structure",
+      "required":[
+        "customModelDeploymentArn",
+        "customModelDeploymentName",
+        "modelArn",
+        "createdAt",
+        "status"
+      ],
+      "members":{
+        "customModelDeploymentArn":{
+          "shape":"CustomModelDeploymentArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model deployment.</p>"
+        },
+        "customModelDeploymentName":{
+          "shape":"ModelDeploymentName",
+          "documentation":"<p>The name of the custom model deployment.</p>"
+        },
+        "modelArn":{
+          "shape":"ModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model associated with this deployment.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the custom model deployment was created.</p>"
+        },
+        "status":{
+          "shape":"CustomModelDeploymentStatus",
+          "documentation":"<p>The status of the custom model deployment. Possible values are <code>CREATING</code>, <code>ACTIVE</code>, and <code>FAILED</code>.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the custom model deployment was last modified.</p>"
+        },
+        "failureMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>If the deployment status is <code>FAILED</code>, this field contains a message describing the failure reason.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a custom model deployment, including its ARN, name, status, and associated custom model.</p>"
+    },
+    "CustomModelDeploymentSummaryList":{
+      "type":"list",
+      "member":{"shape":"CustomModelDeploymentSummary"}
     },
     "CustomModelName":{
       "type":"string",
@@ -1952,6 +5048,10 @@
         "ownerAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The unique identifier of the account that owns the model.</p>"
+        },
+        "modelStatus":{
+          "shape":"ModelStatus",
+          "documentation":"<p>The current status of the custom model. Possible values include:</p> <ul> <li> <p> <code>Creating</code> - The model is being created and validated.</p> </li> <li> <p> <code>Active</code> - The model has been successfully created and is ready for use.</p> </li> <li> <p> <code>Failed</code> - The model creation process failed.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Summary information for a custom model.</p>"
@@ -1960,12 +5060,30 @@
       "type":"list",
       "member":{"shape":"CustomModelSummary"}
     },
+    "CustomModelUnits":{
+      "type":"structure",
+      "members":{
+        "customModelUnitsPerModelCopy":{
+          "shape":"Integer",
+          "documentation":"<p>The number of custom model units used to host a model copy. </p>"
+        },
+        "customModelUnitsVersion":{
+          "shape":"CustomModelUnitsVersion",
+          "documentation":"<p>The version of the custom model unit. Use to determine the billing rate for the custom model unit.</p>"
+        }
+      },
+      "documentation":"<p>A <code>CustomModelUnit</code> (CMU) is an abstract view of the hardware utilization that Amazon Bedrock needs to host a single copy of your custom model. A model copy represents a single instance of your imported model that is ready to serve inference requests. Amazon Bedrock determines the number of custom model units that a model copy needs when you import the custom model. </p> <p>You can use <code>CustomModelUnits</code> to estimate the cost of running your custom model. For more information, see Calculate the cost of running a custom model in the Amazon Bedrock user guide. </p>"
+    },
+    "CustomModelUnitsVersion":{
+      "type":"string",
+      "pattern":"v\\d+.\\d+"
+    },
     "CustomizationConfig":{
       "type":"structure",
       "members":{
         "distillationConfig":{
           "shape":"DistillationConfig",
-          "documentation":"<p>The distillation configuration for the custom model.</p>"
+          "documentation":"<p>The Distillation configuration for the custom model.</p>"
         }
       },
       "documentation":"<p>A model customization configuration</p>",
@@ -1976,9 +5094,130 @@
       "enum":[
         "FINE_TUNING",
         "CONTINUED_PRE_TRAINING",
-        "DISTILLATION"
+        "DISTILLATION",
+        "IMPORTED"
       ]
     },
+    "DataProcessingDetails":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"JobStatusDetails",
+          "documentation":"<p>The status of the data processing sub-task of the job.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the data processing sub-task of the job.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The latest update to the data processing sub-task of the job.</p>"
+        }
+      },
+      "documentation":"<p>For a Distillation job, the status details for the data processing sub-task of the job.</p>"
+    },
+    "DeleteAutomatedReasoningPolicyBuildWorkflowRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose build workflow you want to delete.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow to delete.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the build workflow was last updated. This is used for optimistic concurrency control to prevent accidental deletion of workflows that have been modified.</p>",
+          "location":"querystring",
+          "locationName":"updatedAt"
+        }
+      }
+    },
+    "DeleteAutomatedReasoningPolicyBuildWorkflowResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteAutomatedReasoningPolicyRequest":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy to delete.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "force":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to force delete the automated reasoning policy even if it has active resources. When <code>false</code>, Amazon Bedrock validates if all artifacts have been deleted (e.g. policy version, test case, test result) for a policy before deletion. When <code>true</code>, Amazon Bedrock will delete the policy and all its artifacts without validation. Default is <code>false</code>. </p>",
+          "location":"querystring",
+          "locationName":"force"
+        }
+      }
+    },
+    "DeleteAutomatedReasoningPolicyResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteAutomatedReasoningPolicyTestCaseRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCaseId",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy that contains the test.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the test to delete.</p>",
+          "location":"uri",
+          "locationName":"testCaseId"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the test was last updated. This is used as a concurrency token to prevent conflicting modifications.</p>",
+          "location":"querystring",
+          "locationName":"updatedAt"
+        }
+      }
+    },
+    "DeleteAutomatedReasoningPolicyTestCaseResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteCustomModelDeploymentRequest":{
+      "type":"structure",
+      "required":["customModelDeploymentIdentifier"],
+      "members":{
+        "customModelDeploymentIdentifier":{
+          "shape":"CustomModelDeploymentIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) or name of the custom model deployment to delete.</p>",
+          "location":"uri",
+          "locationName":"customModelDeploymentIdentifier"
+        }
+      }
+    },
+    "DeleteCustomModelDeploymentResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteCustomModelRequest":{
       "type":"structure",
       "required":["modelIdentifier"],
@@ -1993,9 +5232,22 @@
     },
     "DeleteCustomModelResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteFoundationModelAgreementRequest":{
+      "type":"structure",
+      "required":["modelId"],
       "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>Model Id of the model access to delete.</p>"
+        }
       }
     },
+    "DeleteFoundationModelAgreementResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteGuardrailRequest":{
       "type":"structure",
       "required":["guardrailIdentifier"],
@@ -2016,8 +5268,7 @@
     },
     "DeleteGuardrailResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImportedModelRequest":{
       "type":"structure",
@@ -2033,8 +5284,7 @@
     },
     "DeleteImportedModelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInferenceProfileRequest":{
       "type":"structure",
@@ -2050,8 +5300,7 @@
     },
     "DeleteInferenceProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMarketplaceModelEndpointRequest":{
       "type":"structure",
@@ -2067,19 +5316,32 @@
     },
     "DeleteMarketplaceModelEndpointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteModelInvocationLoggingConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteModelInvocationLoggingConfigurationResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeletePromptRouterRequest":{
+      "type":"structure",
+      "required":["promptRouterArn"],
       "members":{
+        "promptRouterArn":{
+          "shape":"PromptRouterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt router to delete.</p>",
+          "location":"uri",
+          "locationName":"promptRouterArn"
+        }
       }
     },
+    "DeletePromptRouterResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteProvisionedModelThroughputRequest":{
       "type":"structure",
       "required":["provisionedModelId"],
@@ -2094,8 +5356,7 @@
     },
     "DeleteProvisionedModelThroughputResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterMarketplaceModelEndpointRequest":{
       "type":"structure",
@@ -2111,8 +5372,29 @@
     },
     "DeregisterMarketplaceModelEndpointResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DimensionalPriceRate":{
+      "type":"structure",
       "members":{
-      }
+        "dimension":{
+          "shape":"String",
+          "documentation":"<p>Dimension for the price rate.</p>"
+        },
+        "price":{
+          "shape":"String",
+          "documentation":"<p>Single-dimensional rate information.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>Description of the price rate.</p>"
+        },
+        "unit":{
+          "shape":"String",
+          "documentation":"<p>Unit associated with the price.</p>"
+        }
+      },
+      "documentation":"<p>Dimensional price rate.</p>"
     },
     "DistillationConfig":{
       "type":"structure",
@@ -2141,6 +5423,13 @@
       "max":30,
       "min":1
     },
+    "EntitlementAvailability":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "NOT_AVAILABLE"
+      ]
+    },
     "ErrorMessage":{
       "type":"string",
       "max":2048,
@@ -2152,12 +5441,18 @@
       "max":20,
       "min":0
     },
+    "EvaluationBedrockKnowledgeBaseIdentifiers":{
+      "type":"list",
+      "member":{"shape":"KnowledgeBaseId"},
+      "max":1,
+      "min":0
+    },
     "EvaluationBedrockModel":{
       "type":"structure",
       "required":["modelIdentifier"],
       "members":{
         "modelIdentifier":{
-          "shape":"EvaluationModelIdentifier",
+          "shape":"EvaluationBedrockModelIdentifier",
           "documentation":"<p>The ARN of the Amazon Bedrock model or inference profile specified.</p>"
         },
         "inferenceParams":{
@@ -2171,6 +5466,18 @@
       },
       "documentation":"<p>Contains the ARN of the Amazon Bedrock model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> specified in your evaluation job. Each Amazon Bedrock model supports different <code>inferenceParams</code>. To learn more about supported inference parameters for Amazon Bedrock models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p> <p>The <code>inferenceParams</code> are specified using JSON. To successfully insert JSON as string make sure that all quotations are properly escaped. For example, <code>\"temperature\":\"0.25\"</code> key value pair would need to be formatted as <code>\\\"temperature\\\":\\\"0.25\\\"</code> to successfully accepted in the request.</p>"
     },
+    "EvaluationBedrockModelIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:((:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:application-inference-profile/[a-z0-9]{12})|([0-9]{12}:inference-profile/(([a-z-]{2,8}.)[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63})))|([0-9]{12}:(default-prompt-router|prompt-router)/[a-zA-Z0-9-:.]+)))|(([a-z]{2,4}[.]{1})([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63})))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|arn:aws(-[^:]+)?:sagemaker:[a-z0-9-]{1,20}:[0-9]{12}:endpoint/[a-z0-9-]{1,63}"
+    },
+    "EvaluationBedrockModelIdentifiers":{
+      "type":"list",
+      "member":{"shape":"EvaluationBedrockModelIdentifier"},
+      "max":2,
+      "min":0
+    },
     "EvaluationConfig":{
       "type":"structure",
       "members":{
@@ -2230,7 +5537,7 @@
         },
         "metricNames":{
           "shape":"EvaluationMetricNames",
-          "documentation":"<p>The names of the metrics you want to use for your evaluation job.</p> <p>For knowledge base evaluation jobs that evaluate retrieval only, valid values are \"<code>Builtin.ContextRelevance</code>\", \"<code>Builtin.ContextConverage</code>\".</p> <p>For knowledge base evaluation jobs that evaluate retrieval with response generation, valid values are \"<code>Builtin.Correctness</code>\", \"<code>Builtin.Completeness</code>\", \"<code>Builtin.Helpfulness</code>\", \"<code>Builtin.LogicalCoherence</code>\", \"<code>Builtin.Faithfulness</code>\", \"<code>Builtin.Harmfulness</code>\", \"<code>Builtin.Stereotyping</code>\", \"<code>Builtin.Refusal</code>\".</p> <p>For automated model evaluation jobs, valid values are \"<code>Builtin.Accuracy</code>\", \"<code>Builtin.Robustness</code>\", and \"<code>Builtin.Toxicity</code>\". In model evaluation jobs that use a LLM as judge you can specify \"<code>Builtin.Correctness</code>\", \"<code>Builtin.Completeness\"</code>, \"<code>Builtin.Faithfulness\"</code>, \"<code>Builtin.Helpfulness</code>\", \"<code>Builtin.Coherence</code>\", \"<code>Builtin.Relevance</code>\", \"<code>Builtin.FollowingInstructions</code>\", \"<code>Builtin.ProfessionalStyleAndTone</code>\", You can also specify the following responsible AI related metrics only for model evaluation job that use a LLM as judge \"<code>Builtin.Harmfulness</code>\", \"<code>Builtin.Stereotyping</code>\", and \"<code>Builtin.Refusal</code>\".</p> <p>For human-based model evaluation jobs, the list of strings must match the <code>name</code> parameter specified in <code>HumanEvaluationCustomMetric</code>.</p>"
+          "documentation":"<p>The names of the metrics you want to use for your evaluation job.</p> <p>For knowledge base evaluation jobs that evaluate retrieval only, valid values are \"<code>Builtin.ContextRelevance</code>\", \"<code>Builtin.ContextCoverage</code>\".</p> <p>For knowledge base evaluation jobs that evaluate retrieval with response generation, valid values are \"<code>Builtin.Correctness</code>\", \"<code>Builtin.Completeness</code>\", \"<code>Builtin.Helpfulness</code>\", \"<code>Builtin.LogicalCoherence</code>\", \"<code>Builtin.Faithfulness</code>\", \"<code>Builtin.Harmfulness</code>\", \"<code>Builtin.Stereotyping</code>\", \"<code>Builtin.Refusal</code>\".</p> <p>For automated model evaluation jobs, valid values are \"<code>Builtin.Accuracy</code>\", \"<code>Builtin.Robustness</code>\", and \"<code>Builtin.Toxicity</code>\". In model evaluation jobs that use a LLM as judge you can specify \"<code>Builtin.Correctness</code>\", \"<code>Builtin.Completeness\"</code>, \"<code>Builtin.Faithfulness\"</code>, \"<code>Builtin.Helpfulness</code>\", \"<code>Builtin.Coherence</code>\", \"<code>Builtin.Relevance</code>\", \"<code>Builtin.FollowingInstructions</code>\", \"<code>Builtin.ProfessionalStyleAndTone</code>\", You can also specify the following responsible AI related metrics only for model evaluation job that use a LLM as judge \"<code>Builtin.Harmfulness</code>\", \"<code>Builtin.Stereotyping</code>\", and \"<code>Builtin.Refusal</code>\".</p> <p>For human-based model evaluation jobs, the list of strings must match the <code>name</code> parameter specified in <code>HumanEvaluationCustomMetric</code>.</p>"
         }
       },
       "documentation":"<p>Defines the prompt datasets, built-in metric names and custom metric names, and the task type.</p>"
@@ -2263,6 +5570,20 @@
       "documentation":"<p>The configuration details of the inference model for an evaluation job.</p> <p>For automated model evaluation jobs, only a single model is supported.</p> <p>For human-based model evaluation jobs, your annotator can compare the responses for up to two different models.</p>",
       "union":true
     },
+    "EvaluationInferenceConfigSummary":{
+      "type":"structure",
+      "members":{
+        "modelConfigSummary":{
+          "shape":"EvaluationModelConfigSummary",
+          "documentation":"<p>A summary of the models used in an Amazon Bedrock model evaluation job. These resources can be models in Amazon Bedrock or models outside of Amazon Bedrock that you use to generate your own inference response data.</p>"
+        },
+        "ragConfigSummary":{
+          "shape":"EvaluationRagConfigSummary",
+          "documentation":"<p>A summary of the RAG resources used in an Amazon Bedrock Knowledge Base evaluation job. These resources can be Knowledge Bases in Amazon Bedrock or RAG sources outside of Amazon Bedrock that you use to generate your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>Identifies the models, Knowledge Bases, or other RAG sources evaluated in a model or Knowledge Base evaluation job.</p>"
+    },
     "EvaluationJobArn":{
       "type":"string",
       "max":1011,
@@ -2330,7 +5651,7 @@
     "EvaluationMetricNames":{
       "type":"list",
       "member":{"shape":"EvaluationMetricName"},
-      "max":15,
+      "max":25,
       "min":1
     },
     "EvaluationModelConfig":{
@@ -2339,29 +5660,35 @@
         "bedrockModel":{
           "shape":"EvaluationBedrockModel",
           "documentation":"<p>Defines the Amazon Bedrock model or inference profile and inference parameters you want used.</p>"
+        },
+        "precomputedInferenceSource":{
+          "shape":"EvaluationPrecomputedInferenceSource",
+          "documentation":"<p>Defines the model used to generate inference response data for a model evaluation job where you provide your own inference response data.</p>"
         }
       },
       "documentation":"<p>Defines the models used in the model evaluation job.</p>",
       "union":true
     },
+    "EvaluationModelConfigSummary":{
+      "type":"structure",
+      "members":{
+        "bedrockModelIdentifiers":{
+          "shape":"EvaluationBedrockModelIdentifiers",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the models used for the evaluation job.</p>"
+        },
+        "precomputedInferenceSourceIdentifiers":{
+          "shape":"EvaluationPrecomputedInferenceSourceIdentifiers",
+          "documentation":"<p>A label that identifies the models used for a model evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of the models used in an Amazon Bedrock model evaluation job. These resources can be models in Amazon Bedrock or models outside of Amazon Bedrock that you use to generate your own inference response data.</p>"
+    },
     "EvaluationModelConfigs":{
       "type":"list",
       "member":{"shape":"EvaluationModelConfig"},
       "max":2,
       "min":1
     },
-    "EvaluationModelIdentifier":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:((:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:application-inference-profile/[a-z0-9]{12})|([0-9]{12}:inference-profile/(([a-z-]{2,8}.)[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63})))|([0-9]{12}:default-prompt-router/[a-zA-Z0-9-:.]+)))|(([a-z]{2}[.]{1})([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63})))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|arn:aws(-[^:]+)?:sagemaker:[a-z0-9-]{1,20}:[0-9]{12}:endpoint/[a-z0-9-]{1,63}"
-    },
-    "EvaluationModelIdentifiers":{
-      "type":"list",
-      "member":{"shape":"EvaluationModelIdentifier"},
-      "max":2,
-      "min":0
-    },
     "EvaluationModelInferenceParams":{
       "type":"string",
       "max":1023,
@@ -2379,6 +5706,92 @@
       },
       "documentation":"<p>The Amazon S3 location where the results of your evaluation job are saved.</p>"
     },
+    "EvaluationPrecomputedInferenceSource":{
+      "type":"structure",
+      "required":["inferenceSourceIdentifier"],
+      "members":{
+        "inferenceSourceIdentifier":{
+          "shape":"EvaluationPrecomputedInferenceSourceIdentifier",
+          "documentation":"<p>A label that identifies a model used in a model evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a model used for a model evaluation job where you provide your own inference response data.</p>"
+    },
+    "EvaluationPrecomputedInferenceSourceIdentifier":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]([a-zA-Z0-9._-]){0,255}"
+    },
+    "EvaluationPrecomputedInferenceSourceIdentifiers":{
+      "type":"list",
+      "member":{"shape":"EvaluationPrecomputedInferenceSourceIdentifier"},
+      "max":2,
+      "min":0
+    },
+    "EvaluationPrecomputedRagSourceConfig":{
+      "type":"structure",
+      "members":{
+        "retrieveSourceConfig":{
+          "shape":"EvaluationPrecomputedRetrieveSourceConfig",
+          "documentation":"<p>A summary of a RAG source used for a retrieve-only Knowledge Base evaluation job where you provide your own inference response data.</p>"
+        },
+        "retrieveAndGenerateSourceConfig":{
+          "shape":"EvaluationPrecomputedRetrieveAndGenerateSourceConfig",
+          "documentation":"<p>A summary of a RAG source used for a retrieve-and-generate Knowledge Base evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a RAG source used for a Knowledge Base evaluation job where you provide your own inference response data.</p>",
+      "union":true
+    },
+    "EvaluationPrecomputedRagSourceIdentifier":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]([a-zA-Z0-9._-]){0,255}"
+    },
+    "EvaluationPrecomputedRagSourceIdentifiers":{
+      "type":"list",
+      "member":{"shape":"EvaluationPrecomputedRagSourceIdentifier"},
+      "max":1,
+      "min":0
+    },
+    "EvaluationPrecomputedRetrieveAndGenerateSourceConfig":{
+      "type":"structure",
+      "required":["ragSourceIdentifier"],
+      "members":{
+        "ragSourceIdentifier":{
+          "shape":"EvaluationPrecomputedRagSourceIdentifier",
+          "documentation":"<p>A label that identifies the RAG source used for a retrieve-and-generate Knowledge Base evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a RAG source used for a retrieve-and-generate Knowledge Base evaluation job where you provide your own inference response data.</p>"
+    },
+    "EvaluationPrecomputedRetrieveSourceConfig":{
+      "type":"structure",
+      "required":["ragSourceIdentifier"],
+      "members":{
+        "ragSourceIdentifier":{
+          "shape":"EvaluationPrecomputedRagSourceIdentifier",
+          "documentation":"<p>A label that identifies the RAG source used for a retrieve-only Knowledge Base evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a RAG source used for a retrieve-only Knowledge Base evaluation job where you provide your own inference response data.</p>"
+    },
+    "EvaluationRagConfigSummary":{
+      "type":"structure",
+      "members":{
+        "bedrockKnowledgeBaseIdentifiers":{
+          "shape":"EvaluationBedrockKnowledgeBaseIdentifiers",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the Knowledge Base resources used for a Knowledge Base evaluation job where Amazon Bedrock invokes the Knowledge Base for you.</p>"
+        },
+        "precomputedRagSourceIdentifiers":{
+          "shape":"EvaluationPrecomputedRagSourceIdentifiers",
+          "documentation":"<p>A label that identifies the RAG sources used for a Knowledge Base evaluation job where you provide your own inference response data.</p>"
+        }
+      },
+      "documentation":"<p>A summary of the RAG resources used in an Amazon Bedrock Knowledge Base evaluation job. These resources can be Knowledge Bases in Amazon Bedrock or RAG sources outside of Amazon Bedrock that you use to generate your own inference response data.</p>"
+    },
     "EvaluationRatingMethod":{
       "type":"string",
       "max":100,
@@ -2427,17 +5840,31 @@
           "documentation":"<p>The type of task for model evaluation.</p>"
         },
         "modelIdentifiers":{
-          "shape":"EvaluationModelIdentifiers",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the model(s) used for the evaluation job.</p>"
+          "shape":"EvaluationBedrockModelIdentifiers",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the model(s) used for the evaluation job.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Inference identifiers should be retrieved from the inferenceConfigSummary",
+          "deprecatedSince":"2025-03-07"
         },
         "ragIdentifiers":{
-          "shape":"RAGIdentifiers",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the knowledge base resources used for a knowledge base evaluation job.</p>"
+          "shape":"EvaluationBedrockKnowledgeBaseIdentifiers",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the knowledge base resources used for a knowledge base evaluation job.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Inference identifiers should be retrieved from the inferenceConfigSummary",
+          "deprecatedSince":"2025-03-07"
         },
         "evaluatorModelIdentifiers":{
           "shape":"EvaluatorModelIdentifiers",
           "documentation":"<p>The Amazon Resource Names (ARNs) of the models used to compute the metrics for a knowledge base evaluation job.</p>"
         },
+        "customMetricsEvaluatorModelIdentifiers":{
+          "shape":"EvaluatorModelIdentifiers",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the models used to compute custom metrics in an Amazon Bedrock evaluation job.</p>"
+        },
+        "inferenceConfigSummary":{
+          "shape":"EvaluationInferenceConfigSummary",
+          "documentation":"<p>Identifies the models, Knowledge Bases, or other RAG sources evaluated in a model or Knowledge Base evaluation job.</p>"
+        },
         "applicationType":{
           "shape":"ApplicationType",
           "documentation":"<p>Specifies whether the evaluation job is for evaluating a model or evaluating a knowledge base (retrieval and response generation).</p>"
@@ -2479,7 +5906,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}$|(^[a-z0-9-]+[.][a-z0-9-]+([.][a-z0-9-]+)*(:[a-z0-9-]+)?$)|^[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12}|)"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:((:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:inference-profile/(([a-z-]{2,8}.)[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63})))))$|(^[a-z0-9-]+[.][a-z0-9-]+([.][a-z0-9-]+)*(:[a-z0-9-]+)?$)|^[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12}|)"
     },
     "EvaluatorModelIdentifiers":{
       "type":"list",
@@ -2487,6 +5914,29 @@
       "max":1,
       "min":0
     },
+    "ExportAutomatedReasoningPolicyVersionRequest":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy to export. Can be either the unversioned ARN for the draft policy or a versioned ARN for a specific policy version.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        }
+      }
+    },
+    "ExportAutomatedReasoningPolicyVersionResponse":{
+      "type":"structure",
+      "required":["policyDefinition"],
+      "members":{
+        "policyDefinition":{
+          "shape":"AutomatedReasoningPolicyDefinition",
+          "documentation":"<p>The exported policy definition containing the formal logic rules, variables, and custom variable types.</p>"
+        }
+      },
+      "payload":"policyDefinition"
+    },
     "ExternalSource":{
       "type":"structure",
       "required":["sourceType"],
@@ -2563,6 +6013,29 @@
       },
       "documentation":"<p>The configuration of the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
     },
+    "FieldForReranking":{
+      "type":"structure",
+      "required":["fieldName"],
+      "members":{
+        "fieldName":{
+          "shape":"FieldForRerankingFieldNameString",
+          "documentation":"<p>The name of the metadata field to be used during the reranking process.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a field to be used during the reranking process in a Knowledge Base vector search. This structure identifies metadata fields that should be considered when reordering search results to improve relevance.</p>"
+    },
+    "FieldForRerankingFieldNameString":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
+    "FieldsForReranking":{
+      "type":"list",
+      "member":{"shape":"FieldForReranking"},
+      "max":100,
+      "min":1,
+      "sensitive":true
+    },
     "FilterAttribute":{
       "type":"structure",
       "required":[
@@ -2588,8 +6061,7 @@
     },
     "FilterValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "FineTuningJobStatus":{
@@ -2602,6 +6074,10 @@
         "Stopped"
       ]
     },
+    "Float":{
+      "type":"float",
+      "box":true
+    },
     "FoundationModelArn":{
       "type":"string",
       "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}"
@@ -2750,6 +6226,411 @@
       },
       "documentation":"<p>The configuration details for response generation based on retrieved text chunks.</p>"
     },
+    "GetAutomatedReasoningPolicyAnnotationsRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose annotations you want to retrieve.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow whose annotations you want to retrieve.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyAnnotationsResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "name",
+        "buildWorkflowId",
+        "annotations",
+        "annotationSetHash",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The name of the Automated Reasoning policy.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow.</p>"
+        },
+        "annotations":{
+          "shape":"AutomatedReasoningPolicyAnnotationList",
+          "documentation":"<p>The current set of annotations containing rules, variables, and types extracted from the source documents. These can be modified before finalizing the policy.</p>"
+        },
+        "annotationSetHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>A hash value representing the current state of the annotations. This is used for optimistic concurrency control when updating annotations.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the annotations were last updated.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflowRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose build workflow you want to retrieve.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow to retrieve.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflowResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "status",
+        "buildWorkflowType",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow.</p>"
+        },
+        "status":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowStatus",
+          "documentation":"<p>The current status of the build workflow (e.g., RUNNING, COMPLETED, FAILED, CANCELLED).</p>"
+        },
+        "buildWorkflowType":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowType",
+          "documentation":"<p>The type of build workflow being executed (e.g., DOCUMENT_INGESTION, POLICY_REPAIR).</p>"
+        },
+        "documentName":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentName",
+          "documentation":"<p>The name of the source document used in the build workflow.</p>"
+        },
+        "documentContentType":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentContentType",
+          "documentation":"<p>The content type of the source document (e.g., text/plain, application/pdf).</p>"
+        },
+        "documentDescription":{
+          "shape":"AutomatedReasoningPolicyBuildDocumentDescription",
+          "documentation":"<p>A detailed description of the document's content and how it should be used in the policy generation process.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the build workflow was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the build workflow was last updated.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflowResultAssetsRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "assetType"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose build workflow assets you want to retrieve.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow whose result assets you want to retrieve.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "assetType":{
+          "shape":"AutomatedReasoningPolicyBuildResultAssetType",
+          "documentation":"<p>The type of asset to retrieve (e.g., BUILD_LOG, QUALITY_REPORT, POLICY_DEFINITION).</p>",
+          "location":"querystring",
+          "locationName":"assetType"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyBuildWorkflowResultAssetsResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow.</p>"
+        },
+        "buildWorkflowAssets":{
+          "shape":"AutomatedReasoningPolicyBuildResultAssets",
+          "documentation":"<p>The requested build workflow asset. This is a union type that returns only one of the available asset types (logs, reports, or generated artifacts) based on the specific asset type requested in the API call.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyNextScenarioRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy for which you want to get the next test scenario.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow associated with the test scenarios.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyNextScenarioResponse":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "scenario":{
+          "shape":"AutomatedReasoningPolicyScenario",
+          "documentation":"<p>The next test scenario to validate, including the test expression and expected results.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyRequest":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy to retrieve. Can be either the unversioned ARN for the draft policy or an ARN for a specific policy version.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "name",
+        "version",
+        "policyId",
+        "definitionHash",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The name of the policy.</p>"
+        },
+        "version":{
+          "shape":"AutomatedReasoningPolicyVersion",
+          "documentation":"<p>The version of the policy.</p>"
+        },
+        "policyId":{
+          "shape":"AutomatedReasoningPolicyId",
+          "documentation":"<p>The unique identifier of the policy.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>The description of the policy.</p>"
+        },
+        "definitionHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash of the policy definition used as a concurrency token.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the automated reasoning policy and its associated artifacts. If a KMS key is not provided during the initial CreateAutomatedReasoningPolicyRequest, the kmsKeyArn won't be included in the GetAutomatedReasoningPolicyResponse. </p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was last updated.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyTestCaseRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCaseId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy that contains the test.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the test to retrieve.</p>",
+          "location":"uri",
+          "locationName":"testCaseId"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyTestCaseResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCase"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy that contains the test.</p>"
+        },
+        "testCase":{
+          "shape":"AutomatedReasoningPolicyTestCase",
+          "documentation":"<p>The test details including the content, query, expected result, and metadata.</p>"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyTestResultRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "testCaseId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The build workflow identifier. The build workflow must display a <code>COMPLETED</code> status to get results.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the test for which to retrieve results.</p>",
+          "location":"uri",
+          "locationName":"testCaseId"
+        }
+      }
+    },
+    "GetAutomatedReasoningPolicyTestResultResponse":{
+      "type":"structure",
+      "required":["testResult"],
+      "members":{
+        "testResult":{
+          "shape":"AutomatedReasoningPolicyTestResult",
+          "documentation":"<p>The test result containing validation findings, execution status, and detailed analysis.</p>"
+        }
+      }
+    },
+    "GetCustomModelDeploymentRequest":{
+      "type":"structure",
+      "required":["customModelDeploymentIdentifier"],
+      "members":{
+        "customModelDeploymentIdentifier":{
+          "shape":"CustomModelDeploymentIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) or name of the custom model deployment to retrieve information about.</p>",
+          "location":"uri",
+          "locationName":"customModelDeploymentIdentifier"
+        }
+      }
+    },
+    "GetCustomModelDeploymentResponse":{
+      "type":"structure",
+      "required":[
+        "customModelDeploymentArn",
+        "modelDeploymentName",
+        "modelArn",
+        "createdAt",
+        "status"
+      ],
+      "members":{
+        "customModelDeploymentArn":{
+          "shape":"CustomModelDeploymentArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model deployment.</p>"
+        },
+        "modelDeploymentName":{
+          "shape":"ModelDeploymentName",
+          "documentation":"<p>The name of the custom model deployment.</p>"
+        },
+        "modelArn":{
+          "shape":"CustomModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the custom model associated with this deployment.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the custom model deployment was created.</p>"
+        },
+        "status":{
+          "shape":"CustomModelDeploymentStatus",
+          "documentation":"<p>The status of the custom model deployment. Possible values are:</p> <ul> <li> <p> <code>CREATING</code> - The deployment is being set up and prepared for inference.</p> </li> <li> <p> <code>ACTIVE</code> - The deployment is ready and available for inference requests.</p> </li> <li> <p> <code>FAILED</code> - The deployment failed to be created or became unavailable.</p> </li> </ul>"
+        },
+        "description":{
+          "shape":"CustomModelDeploymentDescription",
+          "documentation":"<p>The description of the custom model deployment.</p>"
+        },
+        "failureMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>If the deployment status is <code>FAILED</code>, this field contains a message describing the failure reason.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the custom model deployment was last updated.</p>"
+        }
+      }
+    },
     "GetCustomModelRequest":{
       "type":"structure",
       "required":["modelIdentifier"],
@@ -2767,10 +6648,6 @@
       "required":[
         "modelArn",
         "modelName",
-        "jobArn",
-        "baseModelArn",
-        "trainingDataConfig",
-        "outputDataConfig",
         "creationTime"
       ],
       "members":{
@@ -2788,7 +6665,7 @@
         },
         "jobArn":{
           "shape":"ModelCustomizationJobArn",
-          "documentation":"<p>Job Amazon Resource Name (ARN) associated with this model.</p>"
+          "documentation":"<p>Job Amazon Resource Name (ARN) associated with this model. For models that you create with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateCustomModel.html\">CreateCustomModel</a> API operation, this is <code>NULL</code>.</p>"
         },
         "baseModelArn":{
           "shape":"ModelArn",
@@ -2833,6 +6710,14 @@
         "customizationConfig":{
           "shape":"CustomizationConfig",
           "documentation":"<p>The customization configuration for the custom model.</p>"
+        },
+        "modelStatus":{
+          "shape":"ModelStatus",
+          "documentation":"<p>The current status of the custom model. Possible values include:</p> <ul> <li> <p> <code>Creating</code> - The model is being created and validated.</p> </li> <li> <p> <code>Active</code> - The model has been successfully created and is ready for use.</p> </li> <li> <p> <code>Failed</code> - The model creation process failed. Check the <code>failureMessage</code> field for details.</p> </li> </ul>"
+        },
+        "failureMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>A failure message for any issues that occurred when creating the custom model. This is included for only a failed CreateCustomModel operation.</p>"
         }
       }
     },
@@ -2920,12 +6805,62 @@
         }
       }
     },
+    "GetFoundationModelAvailabilityRequest":{
+      "type":"structure",
+      "required":["modelId"],
+      "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>The model Id of the foundation model.</p>",
+          "location":"uri",
+          "locationName":"modelId"
+        }
+      }
+    },
+    "GetFoundationModelAvailabilityResponse":{
+      "type":"structure",
+      "required":[
+        "modelId",
+        "agreementAvailability",
+        "authorizationStatus",
+        "entitlementAvailability",
+        "regionAvailability"
+      ],
+      "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>The model Id of the foundation model.</p>"
+        },
+        "agreementAvailability":{
+          "shape":"AgreementAvailability",
+          "documentation":"<p>Agreement availability. </p>"
+        },
+        "authorizationStatus":{
+          "shape":"AuthorizationStatus",
+          "documentation":"<p>Authorization status.</p>"
+        },
+        "entitlementAvailability":{
+          "shape":"EntitlementAvailability",
+          "documentation":"<p>Entitlement availability. </p>"
+        },
+        "regionAvailability":{
+          "shape":"RegionAvailability",
+          "documentation":"<p>Region availability. </p>"
+        }
+      }
+    },
+    "GetFoundationModelIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2})|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})"
+    },
     "GetFoundationModelRequest":{
       "type":"structure",
       "required":["modelIdentifier"],
       "members":{
         "modelIdentifier":{
-          "shape":"ModelIdentifier",
+          "shape":"GetFoundationModelIdentifier",
           "documentation":"<p>The model identifier. </p>",
           "location":"uri",
           "locationName":"modelIdentifier"
@@ -3017,6 +6952,14 @@
           "shape":"GuardrailContextualGroundingPolicy",
           "documentation":"<p>The contextual grounding policy used in the guardrail.</p>"
         },
+        "automatedReasoningPolicy":{
+          "shape":"GuardrailAutomatedReasoningPolicy",
+          "documentation":"<p>The current Automated Reasoning policy configuration for the guardrail, if any is configured.</p>"
+        },
+        "crossRegionDetails":{
+          "shape":"GuardrailCrossRegionDetails",
+          "documentation":"<p>Details about the system-defined guardrail profile that you're using with your guardrail, including the guardrail profile ID and Amazon Resource Name (ARN).</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time at which the guardrail was created.</p>"
@@ -3097,6 +7040,10 @@
         "instructSupported":{
           "shape":"InstructSupported",
           "documentation":"<p>Specifies if the imported model supports converse.</p>"
+        },
+        "customModelUnits":{
+          "shape":"CustomModelUnits",
+          "documentation":"<p>Information about the hardware utilization for a single copy of the model.</p>"
         }
       }
     },
@@ -3305,6 +7252,10 @@
           "shape":"ModelCustomizationJobStatus",
           "documentation":"<p>The status of the job. A successful job transitions from in-progress to completed when the output model is ready to use. If the job failed, the failure message contains information about why the job failed.</p>"
         },
+        "statusDetails":{
+          "shape":"StatusDetails",
+          "documentation":"<p>For a Distillation job, the details about the statuses of the sub-tasks of the customization job. </p>"
+        },
         "failureMessage":{
           "shape":"ErrorMessage",
           "documentation":"<p>Information about why the job failed.</p>"
@@ -3481,7 +7432,7 @@
         },
         "status":{
           "shape":"ModelInvocationJobStatus",
-          "documentation":"<p>The status of the batch inference job.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web Services Support Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>"
+          "documentation":"<p>The status of the batch inference job.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web ServicesSupport Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>"
         },
         "message":{
           "shape":"Message",
@@ -3523,8 +7474,7 @@
     },
     "GetModelInvocationLoggingConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetModelInvocationLoggingConfigurationResponse":{
       "type":"structure",
@@ -3682,12 +7632,68 @@
         }
       }
     },
+    "GetUseCaseForModelAccessRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "GetUseCaseForModelAccessResponse":{
+      "type":"structure",
+      "required":["formData"],
+      "members":{
+        "formData":{
+          "shape":"AcknowledgementFormDataBody",
+          "documentation":"<p>Get customer profile Response.</p>"
+        }
+      }
+    },
     "GuardrailArn":{
       "type":"string",
       "max":2048,
       "min":0,
       "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+"
     },
+    "GuardrailAutomatedReasoningPolicy":{
+      "type":"structure",
+      "required":["policies"],
+      "members":{
+        "policies":{
+          "shape":"GuardrailAutomatedReasoningPolicyPoliciesList",
+          "documentation":"<p>The list of Automated Reasoning policy ARNs that should be applied as part of this guardrail configuration.</p>"
+        },
+        "confidenceThreshold":{
+          "shape":"AutomatedReasoningConfidenceFilterThreshold",
+          "documentation":"<p>The minimum confidence level required for Automated Reasoning policy violations to trigger guardrail actions. Values range from 0.0 to 1.0.</p>"
+        }
+      },
+      "documentation":"<p>Represents the configuration of Automated Reasoning policies within a Amazon Bedrock Guardrail, including the policies to apply and confidence thresholds.</p>"
+    },
+    "GuardrailAutomatedReasoningPolicyConfig":{
+      "type":"structure",
+      "required":["policies"],
+      "members":{
+        "policies":{
+          "shape":"GuardrailAutomatedReasoningPolicyConfigPoliciesList",
+          "documentation":"<p>The list of Automated Reasoning policy ARNs to include in the guardrail configuration.</p>"
+        },
+        "confidenceThreshold":{
+          "shape":"AutomatedReasoningConfidenceFilterThreshold",
+          "documentation":"<p>The confidence threshold for triggering guardrail actions based on Automated Reasoning policy violations.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for integrating Automated Reasoning policies with Amazon Bedrock Guardrails.</p>"
+    },
+    "GuardrailAutomatedReasoningPolicyConfigPoliciesList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyArn"},
+      "max":2,
+      "min":1
+    },
+    "GuardrailAutomatedReasoningPolicyPoliciesList":{
+      "type":"list",
+      "member":{"shape":"AutomatedReasoningPolicyArn"},
+      "max":2,
+      "min":1
+    },
     "GuardrailBlockedMessaging":{
       "type":"string",
       "max":500,
@@ -3751,10 +7757,34 @@
         "outputModalities":{
           "shape":"GuardrailModalities",
           "documentation":"<p>The output modalities selected for the guardrail content filter.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailContentFilterAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailContentFilterAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>Contains filter strengths for harmful content. Guardrails support the following content filters to detect and filter harmful user inputs and FM-generated outputs.</p> <ul> <li> <p> <b>Hate</b> – Describes language or a statement that discriminates, criticizes, insults, denounces, or dehumanizes a person or group on the basis of an identity (such as race, ethnicity, gender, religion, sexual orientation, ability, and national origin).</p> </li> <li> <p> <b>Insults</b> – Describes language or a statement that includes demeaning, humiliating, mocking, insulting, or belittling language. This type of language is also labeled as bullying.</p> </li> <li> <p> <b>Sexual</b> – Describes language or a statement that indicates sexual interest, activity, or arousal using direct or indirect references to body parts, physical traits, or sex.</p> </li> <li> <p> <b>Violence</b> – Describes language or a statement that includes glorification of or threats to inflict physical pain, hurt, or injury toward a person, group or thing.</p> </li> </ul> <p>Content filtering depends on the confidence classification of user inputs and FM responses across each of the four harmful categories. All input and output statements are classified into one of four confidence levels (NONE, LOW, MEDIUM, HIGH) for each harmful category. For example, if a statement is classified as <i>Hate</i> with HIGH confidence, the likelihood of the statement representing hateful content is high. A single statement can be classified across multiple categories with varying confidence levels. For example, a single statement can be classified as <i>Hate</i> with HIGH confidence, <i>Insults</i> with LOW confidence, <i>Sexual</i> with NONE confidence, and <i>Violence</i> with MEDIUM confidence.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-filters.html\">Guardrails content filters</a>.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetGuardrail.html#API_GetGuardrail_ResponseSyntax\">GetGuardrail response body</a> </p> </li> </ul>"
     },
+    "GuardrailContentFilterAction":{
+      "type":"string",
+      "enum":[
+        "BLOCK",
+        "NONE"
+      ],
+      "sensitive":true
+    },
     "GuardrailContentFilterConfig":{
       "type":"structure",
       "required":[
@@ -3782,6 +7812,22 @@
         "outputModalities":{
           "shape":"GuardrailModalities",
           "documentation":"<p>The output modalities selected for the guardrail content filter configuration.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailContentFilterAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailContentFilterAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>Contains filter strengths for harmful content. Guardrails support the following content filters to detect and filter harmful user inputs and FM-generated outputs.</p> <ul> <li> <p> <b>Hate</b> – Describes language or a statement that discriminates, criticizes, insults, denounces, or dehumanizes a person or group on the basis of an identity (such as race, ethnicity, gender, religion, sexual orientation, ability, and national origin).</p> </li> <li> <p> <b>Insults</b> – Describes language or a statement that includes demeaning, humiliating, mocking, insulting, or belittling language. This type of language is also labeled as bullying.</p> </li> <li> <p> <b>Sexual</b> – Describes language or a statement that indicates sexual interest, activity, or arousal using direct or indirect references to body parts, physical traits, or sex.</p> </li> <li> <p> <b>Violence</b> – Describes language or a statement that includes glorification of or threats to inflict physical pain, hurt, or injury toward a person, group or thing.</p> </li> </ul> <p>Content filtering depends on the confidence classification of user inputs and FM responses across each of the four harmful categories. All input and output statements are classified into one of four confidence levels (NONE, LOW, MEDIUM, HIGH) for each harmful category. For example, if a statement is classified as <i>Hate</i> with HIGH confidence, the likelihood of the statement representing hateful content is high. A single statement can be classified across multiple categories with varying confidence levels. For example, a single statement can be classified as <i>Hate</i> with HIGH confidence, <i>Insults</i> with LOW confidence, <i>Sexual</i> with NONE confidence, and <i>Violence</i> with MEDIUM confidence.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-filters.html\">Guardrails content filters</a>.</p>"
@@ -3809,12 +7855,46 @@
       "max":6,
       "min":1
     },
+    "GuardrailContentFiltersTier":{
+      "type":"structure",
+      "required":["tierName"],
+      "members":{
+        "tierName":{
+          "shape":"GuardrailContentFiltersTierName",
+          "documentation":"<p>The tier that your guardrail uses for content filters. Valid values include:</p> <ul> <li> <p> <code>CLASSIC</code> tier – Provides established guardrails functionality supporting English, French, and Spanish languages.</p> </li> <li> <p> <code>STANDARD</code> tier – Provides a more robust solution than the <code>CLASSIC</code> tier and has more comprehensive language support. This tier requires that your guardrail use <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">cross-Region inference</a>.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The tier that your guardrail uses for content filters.</p>"
+    },
+    "GuardrailContentFiltersTierConfig":{
+      "type":"structure",
+      "required":["tierName"],
+      "members":{
+        "tierName":{
+          "shape":"GuardrailContentFiltersTierName",
+          "documentation":"<p>The tier that your guardrail uses for content filters. Valid values include:</p> <ul> <li> <p> <code>CLASSIC</code> tier – Provides established guardrails functionality supporting English, French, and Spanish languages.</p> </li> <li> <p> <code>STANDARD</code> tier – Provides a more robust solution than the <code>CLASSIC</code> tier and has more comprehensive language support. This tier requires that your guardrail use <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">cross-Region inference</a>.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The tier that your guardrail uses for content filters. Consider using a tier that balances performance, accuracy, and compatibility with your existing generative AI workflows.</p>"
+    },
+    "GuardrailContentFiltersTierName":{
+      "type":"string",
+      "enum":[
+        "CLASSIC",
+        "STANDARD"
+      ],
+      "sensitive":true
+    },
     "GuardrailContentPolicy":{
       "type":"structure",
       "members":{
         "filters":{
           "shape":"GuardrailContentFilters",
           "documentation":"<p>Contains the type of the content filter and how strongly it should apply to prompts and model responses.</p>"
+        },
+        "tier":{
+          "shape":"GuardrailContentFiltersTier",
+          "documentation":"<p>The tier that your guardrail uses for content filters.</p>"
         }
       },
       "documentation":"<p>Contains details about how to handle harmful content.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetGuardrail.html#API_GetGuardrail_ResponseSyntax\">GetGuardrail response body</a> </p> </li> </ul>"
@@ -3826,10 +7906,22 @@
         "filtersConfig":{
           "shape":"GuardrailContentFiltersConfig",
           "documentation":"<p>Contains the type of the content filter and how strongly it should apply to prompts and model responses.</p>"
+        },
+        "tierConfig":{
+          "shape":"GuardrailContentFiltersTierConfig",
+          "documentation":"<p>The tier that your guardrail uses for content filters.</p>"
         }
       },
       "documentation":"<p>Contains details about how to handle harmful content.</p>"
     },
+    "GuardrailContextualGroundingAction":{
+      "type":"string",
+      "enum":[
+        "BLOCK",
+        "NONE"
+      ],
+      "sensitive":true
+    },
     "GuardrailContextualGroundingFilter":{
       "type":"structure",
       "required":[
@@ -3844,6 +7936,14 @@
         "threshold":{
           "shape":"GuardrailContextualGroundingFilterThresholdDouble",
           "documentation":"<p>The threshold details for the guardrails contextual grounding filter.</p>"
+        },
+        "action":{
+          "shape":"GuardrailContextualGroundingAction",
+          "documentation":"<p>The action to take when content fails the contextual grounding evaluation. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether contextual grounding is enabled for evaluation. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The details for the guardrails contextual grounding filter.</p>"
@@ -3862,6 +7962,14 @@
         "threshold":{
           "shape":"GuardrailContextualGroundingFilterConfigThresholdDouble",
           "documentation":"<p>The threshold details for the guardrails contextual grounding filter.</p>"
+        },
+        "action":{
+          "shape":"GuardrailContextualGroundingAction",
+          "documentation":"<p>Specifies the action to take when content fails the contextual grounding evaluation. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable contextual grounding evaluation. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The filter configuration details for the guardrails contextual grounding filter.</p>"
@@ -3915,6 +8023,49 @@
       },
       "documentation":"<p>The policy configuration details for the guardrails contextual grounding policy.</p>"
     },
+    "GuardrailCrossRegionConfig":{
+      "type":"structure",
+      "required":["guardrailProfileIdentifier"],
+      "members":{
+        "guardrailProfileIdentifier":{
+          "shape":"GuardrailCrossRegionGuardrailProfileIdentifier",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the guardrail profile that your guardrail is using. Guardrail profile availability depends on your current Amazon Web Services Region. For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region-support.html\">Amazon Bedrock User Guide</a>.</p>"
+        }
+      },
+      "documentation":"<p>The system-defined guardrail profile that you're using with your guardrail. Guardrail profiles define the destination Amazon Web Services Regions where guardrail inference requests can be automatically routed. Using guardrail profiles helps maintain guardrail performance and reliability when demand increases.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">Amazon Bedrock User Guide</a>.</p>"
+    },
+    "GuardrailCrossRegionDetails":{
+      "type":"structure",
+      "members":{
+        "guardrailProfileId":{
+          "shape":"GuardrailCrossRegionGuardrailProfileId",
+          "documentation":"<p>The ID of the guardrail profile that your guardrail is using. Profile availability depends on your current Amazon Web Services Region. For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region-support.html\">Amazon Bedrock User Guide</a>.</p>"
+        },
+        "guardrailProfileArn":{
+          "shape":"GuardrailCrossRegionGuardrailProfileArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the guardrail profile that you're using with your guardrail.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the system-defined guardrail profile that you're using with your guardrail for cross-Region inference.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">Amazon Bedrock User Guide</a>.</p>"
+    },
+    "GuardrailCrossRegionGuardrailProfileArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail-profile/[a-z0-9-]+[.]{1}guardrail[.]{1}v[0-9:]+"
+    },
+    "GuardrailCrossRegionGuardrailProfileId":{
+      "type":"string",
+      "max":30,
+      "min":15,
+      "pattern":"[a-z0-9-]+[.]{1}guardrail[.]{1}v[0-9:]+"
+    },
+    "GuardrailCrossRegionGuardrailProfileIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":15,
+      "pattern":"[a-z0-9-]+[.]{1}guardrail[.]{1}v[0-9:]+|arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail-profile/[a-z0-9-]+[.]{1}guardrail[.]{1}v[0-9:]+"
+    },
     "GuardrailDescription":{
       "type":"string",
       "max":200,
@@ -3975,6 +8126,22 @@
         "type":{
           "shape":"GuardrailManagedWordsType",
           "documentation":"<p>ManagedWords$type The managed word type that was configured for the guardrail. (For now, we only offer profanity word list)</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The managed word list that was configured for the guardrail. (This is a list of words that are pre-defined and managed by guardrails only.)</p>"
@@ -3986,6 +8153,22 @@
         "type":{
           "shape":"GuardrailManagedWordsType",
           "documentation":"<p>The managed word type to configure for the guardrail.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The managed word list to configure for the guardrail.</p>"
@@ -4043,6 +8226,22 @@
         "action":{
           "shape":"GuardrailSensitiveInformationAction",
           "documentation":"<p>The configured guardrail action when PII entity is detected.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>ANONYMIZE</code> – Mask the content and replace it with identifier tags.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>ANONYMIZE</code> – Mask the content and replace it with identifier tags.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The PII entity configured for the guardrail.</p>"
@@ -4061,6 +8260,22 @@
         "action":{
           "shape":"GuardrailSensitiveInformationAction",
           "documentation":"<p>Configure guardrail action when the PII entity is detected.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>ANONYMIZE</code> – Mask the content and replace it with identifier tags.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>ANONYMIZE</code> – Mask the content and replace it with identifier tags.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The PII entity to configure for the guardrail.</p>"
@@ -4124,6 +8339,22 @@
         "action":{
           "shape":"GuardrailSensitiveInformationAction",
           "documentation":"<p>The action taken when a match to the regular expression is detected.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The regular expression configured for the guardrail.</p>"
@@ -4151,6 +8382,22 @@
         "action":{
           "shape":"GuardrailSensitiveInformationAction",
           "documentation":"<p>The guardrail action to configure when matching regular expression is detected.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>The regular expression to configure for the guardrail.</p>"
@@ -4199,7 +8446,8 @@
       "type":"string",
       "enum":[
         "BLOCK",
-        "ANONYMIZE"
+        "ANONYMIZE",
+        "NONE"
       ]
     },
     "GuardrailSensitiveInformationPolicy":{
@@ -4302,6 +8550,10 @@
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time at which the guardrail was last updated.</p>"
+        },
+        "crossRegionDetails":{
+          "shape":"GuardrailCrossRegionDetails",
+          "documentation":"<p>Details about the system-defined guardrail profile that you're using with your guardrail, including the guardrail profile ID and Amazon Resource Name (ARN).</p>"
         }
       },
       "documentation":"<p>Contains details about a guardrail.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListGuardrails.html#API_ListGuardrails_ResponseSyntax\">ListGuardrails response body</a> </p> </li> </ul>"
@@ -4328,10 +8580,34 @@
         "type":{
           "shape":"GuardrailTopicType",
           "documentation":"<p>Specifies to deny the topic.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailTopicAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailTopicAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>Details about topics for the guardrail to identify and deny.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetGuardrail.html#API_GetGuardrail_ResponseSyntax\">GetGuardrail response body</a> </p> </li> </ul>"
     },
+    "GuardrailTopicAction":{
+      "type":"string",
+      "enum":[
+        "BLOCK",
+        "NONE"
+      ],
+      "sensitive":true
+    },
     "GuardrailTopicConfig":{
       "type":"structure",
       "required":[
@@ -4355,6 +8631,22 @@
         "type":{
           "shape":"GuardrailTopicType",
           "documentation":"<p>Specifies to deny the topic.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailTopicAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailTopicAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>Details about topics for the guardrail to identify and deny.</p>"
@@ -4391,6 +8683,10 @@
         "topics":{
           "shape":"GuardrailTopics",
           "documentation":"<p>A list of policies related to topics that the guardrail should deny.</p>"
+        },
+        "tier":{
+          "shape":"GuardrailTopicsTier",
+          "documentation":"<p>The tier that your guardrail uses for denied topic filters.</p>"
         }
       },
       "documentation":"<p>Contains details about topics that the guardrail should identify and deny.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetGuardrail.html#API_GetGuardrail_ResponseSyntax\">GetGuardrail response body</a> </p> </li> </ul>"
@@ -4402,6 +8698,10 @@
         "topicsConfig":{
           "shape":"GuardrailTopicsConfig",
           "documentation":"<p>A list of policies related to topics that the guardrail should deny.</p>"
+        },
+        "tierConfig":{
+          "shape":"GuardrailTopicsTierConfig",
+          "documentation":"<p>The tier that your guardrail uses for denied topic filters.</p>"
         }
       },
       "documentation":"<p>Contains details about topics that the guardrail should identify and deny.</p>"
@@ -4422,6 +8722,36 @@
       "max":30,
       "min":1
     },
+    "GuardrailTopicsTier":{
+      "type":"structure",
+      "required":["tierName"],
+      "members":{
+        "tierName":{
+          "shape":"GuardrailTopicsTierName",
+          "documentation":"<p>The tier that your guardrail uses for denied topic filters. Valid values include:</p> <ul> <li> <p> <code>CLASSIC</code> tier – Provides established guardrails functionality supporting English, French, and Spanish languages.</p> </li> <li> <p> <code>STANDARD</code> tier – Provides a more robust solution than the <code>CLASSIC</code> tier and has more comprehensive language support. This tier requires that your guardrail use <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">cross-Region inference</a>.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The tier that your guardrail uses for denied topic filters.</p>"
+    },
+    "GuardrailTopicsTierConfig":{
+      "type":"structure",
+      "required":["tierName"],
+      "members":{
+        "tierName":{
+          "shape":"GuardrailTopicsTierName",
+          "documentation":"<p>The tier that your guardrail uses for denied topic filters. Valid values include:</p> <ul> <li> <p> <code>CLASSIC</code> tier – Provides established guardrails functionality supporting English, French, and Spanish languages.</p> </li> <li> <p> <code>STANDARD</code> tier – Provides a more robust solution than the <code>CLASSIC</code> tier and has more comprehensive language support. This tier requires that your guardrail use <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">cross-Region inference</a>.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The tier that your guardrail uses for denied topic filters. Consider using a tier that balances performance, accuracy, and compatibility with your existing generative AI workflows.</p>"
+    },
+    "GuardrailTopicsTierName":{
+      "type":"string",
+      "enum":[
+        "CLASSIC",
+        "STANDARD"
+      ],
+      "sensitive":true
+    },
     "GuardrailVersion":{
       "type":"string",
       "pattern":"(([1-9][0-9]{0,7})|(DRAFT))"
@@ -4433,10 +8763,34 @@
         "text":{
           "shape":"GuardrailWordTextString",
           "documentation":"<p>Text of the word configured for the guardrail to block.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>The action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>The action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the input. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether guardrail evaluation is enabled on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>A word configured for the guardrail.</p>"
     },
+    "GuardrailWordAction":{
+      "type":"string",
+      "enum":[
+        "BLOCK",
+        "NONE"
+      ],
+      "sensitive":true
+    },
     "GuardrailWordConfig":{
       "type":"structure",
       "required":["text"],
@@ -4444,6 +8798,22 @@
         "text":{
           "shape":"GuardrailWordConfigTextString",
           "documentation":"<p>Text of the word configured for the guardrail to block.</p>"
+        },
+        "inputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the input. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "outputAction":{
+          "shape":"GuardrailWordAction",
+          "documentation":"<p>Specifies the action to take when harmful content is detected in the output. Supported values include:</p> <ul> <li> <p> <code>BLOCK</code> – Block the content and replace it with blocked messaging.</p> </li> <li> <p> <code>NONE</code> – Take no action but return detection information in the trace response.</p> </li> </ul>"
+        },
+        "inputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the intput. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
+        },
+        "outputEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable guardrail evaluation on the output. When disabled, you aren't charged for the evaluation. The evaluation doesn't appear in the response.</p>"
         }
       },
       "documentation":"<p>A word to configure for the guardrail.</p>"
@@ -4571,7 +8941,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "pattern":"[a-zA-Z0-9]([-a-zA-Z0-9]{0,254}[a-zA-Z0-9])?"
     },
     "Identifier":{
       "type":"string",
@@ -4579,6 +8949,24 @@
       "min":1,
       "sensitive":true
     },
+    "ImplicitFilterConfiguration":{
+      "type":"structure",
+      "required":[
+        "metadataAttributes",
+        "modelArn"
+      ],
+      "members":{
+        "metadataAttributes":{
+          "shape":"MetadataAttributeSchemaList",
+          "documentation":"<p>A list of metadata attribute schemas that define the structure and properties of metadata fields used for implicit filtering. Each attribute defines a key, type, and optional description.</p>"
+        },
+        "modelArn":{
+          "shape":"BedrockModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the foundation model used for implicit filtering. This model processes the query to extract relevant filtering criteria.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for implicit filtering in Knowledge Base vector searches. Implicit filtering allows you to automatically filter search results based on metadata attributes without requiring explicit filter expressions in each query.</p>"
+    },
     "ImportedModelArn":{
       "type":"string",
       "max":1011,
@@ -4836,6 +9224,17 @@
       "min":1,
       "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9\\+\\-\\.])*"
     },
+    "JobStatusDetails":{
+      "type":"string",
+      "enum":[
+        "InProgress",
+        "Completed",
+        "Stopping",
+        "Stopped",
+        "Failed",
+        "NotStarted"
+      ]
+    },
     "KbInferenceConfig":{
       "type":"structure",
       "members":{
@@ -4939,6 +9338,14 @@
         "filter":{
           "shape":"RetrievalFilter",
           "documentation":"<p>Specifies the filters to use on the metadata fields in the knowledge base data sources before returning results.</p>"
+        },
+        "implicitFilterConfiguration":{
+          "shape":"ImplicitFilterConfiguration",
+          "documentation":"<p>Configuration for implicit filtering in Knowledge Base vector searches. This allows the system to automatically apply filters based on the query context without requiring explicit filter expressions.</p>"
+        },
+        "rerankingConfiguration":{
+          "shape":"VectorSearchRerankingConfiguration",
+          "documentation":"<p>Configuration for reranking search results in Knowledge Base vector searches. Reranking improves search relevance by reordering initial vector search results using more sophisticated relevance models.</p>"
         }
       },
       "documentation":"<p>The configuration details for returning the results from the knowledge base vector search.</p>"
@@ -4949,6 +9356,248 @@
       "max":100,
       "min":1
     },
+    "LegalTerm":{
+      "type":"structure",
+      "members":{
+        "url":{
+          "shape":"String",
+          "documentation":"<p>URL to the legal term document.</p>"
+        }
+      },
+      "documentation":"<p>The legal term of the agreement.</p>"
+    },
+    "ListAutomatedReasoningPoliciesRequest":{
+      "type":"structure",
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>Optional filter to list only the policy versions with the specified Amazon Resource Name (ARN). If not provided, the DRAFT versions for all policies are listed.</p>",
+          "location":"querystring",
+          "locationName":"policyArn"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token from a previous request to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of policies to return in a single call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAutomatedReasoningPoliciesResponse":{
+      "type":"structure",
+      "required":["automatedReasoningPolicySummaries"],
+      "members":{
+        "automatedReasoningPolicySummaries":{
+          "shape":"AutomatedReasoningPolicySummaries",
+          "documentation":"<p>A list of Automated Reasoning policy summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token to use in a subsequent request to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyBuildWorkflowsRequest":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose build workflows you want to list.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A pagination token from a previous request to continue listing build workflows from where the previous request left off.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of build workflows to return in a single response. Valid range is 1-100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyBuildWorkflowsResponse":{
+      "type":"structure",
+      "required":["automatedReasoningPolicyBuildWorkflowSummaries"],
+      "members":{
+        "automatedReasoningPolicyBuildWorkflowSummaries":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowSummaries",
+          "documentation":"<p>A list of build workflow summaries, each containing key information about a build workflow including its status and timestamps.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A pagination token to use in subsequent requests to retrieve additional build workflows.</p>"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyTestCasesRequest":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy for which to list tests.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token from a previous request to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of tests to return in a single call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyTestCasesResponse":{
+      "type":"structure",
+      "required":["testCases"],
+      "members":{
+        "testCases":{
+          "shape":"AutomatedReasoningPolicyTestCaseList",
+          "documentation":"<p>A list of tests for the specified policy.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token to use in a subsequent request to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyTestResultsRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose test results you want to list.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow whose test results you want to list.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A pagination token from a previous request to continue listing test results from where the previous request left off.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of test results to return in a single response. Valid range is 1-100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAutomatedReasoningPolicyTestResultsResponse":{
+      "type":"structure",
+      "required":["testResults"],
+      "members":{
+        "testResults":{
+          "shape":"AutomatedReasoningPolicyTestList",
+          "documentation":"<p>A list of test results, each containing information about how the policy performed on specific test scenarios.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A pagination token to use in subsequent requests to retrieve additional test results.</p>"
+        }
+      }
+    },
+    "ListCustomModelDeploymentsRequest":{
+      "type":"structure",
+      "members":{
+        "createdBefore":{
+          "shape":"Timestamp",
+          "documentation":"<p>Filters deployments created before the specified date and time.</p>",
+          "location":"querystring",
+          "locationName":"createdBefore"
+        },
+        "createdAfter":{
+          "shape":"Timestamp",
+          "documentation":"<p>Filters deployments created after the specified date and time.</p>",
+          "location":"querystring",
+          "locationName":"createdAfter"
+        },
+        "nameContains":{
+          "shape":"ModelDeploymentName",
+          "documentation":"<p>Filters deployments whose names contain the specified string. </p>",
+          "location":"querystring",
+          "locationName":"nameContains"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use this token to retrieve additional results when the response is truncated.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "sortBy":{
+          "shape":"SortModelsBy",
+          "documentation":"<p>The field to sort the results by. The only supported value is <code>CreationTime</code>.</p>",
+          "location":"querystring",
+          "locationName":"sortBy"
+        },
+        "sortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The sort order for the results. Valid values are <code>Ascending</code> and <code>Descending</code>. Default is <code>Descending</code>.</p>",
+          "location":"querystring",
+          "locationName":"sortOrder"
+        },
+        "statusEquals":{
+          "shape":"CustomModelDeploymentStatus",
+          "documentation":"<p>Filters deployments by status. Valid values are <code>CREATING</code>, <code>ACTIVE</code>, and <code>FAILED</code>.</p>",
+          "location":"querystring",
+          "locationName":"statusEquals"
+        },
+        "modelArnEquals":{
+          "shape":"CustomModelArn",
+          "documentation":"<p>Filters deployments by the Amazon Resource Name (ARN) of the associated custom model.</p>",
+          "location":"querystring",
+          "locationName":"modelArnEquals"
+        }
+      }
+    },
+    "ListCustomModelDeploymentsResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. This value is null when there are no more results to return.</p>"
+        },
+        "modelDeploymentSummaries":{
+          "shape":"CustomModelDeploymentSummaryList",
+          "documentation":"<p>A list of custom model deployment summaries.</p>"
+        }
+      }
+    },
     "ListCustomModelsRequest":{
       "type":"structure",
       "members":{
@@ -5011,6 +9660,12 @@
           "documentation":"<p>Return custom models depending on if the current account owns them (<code>true</code>) or if they were shared with the current account (<code>false</code>).</p>",
           "location":"querystring",
           "locationName":"isOwned"
+        },
+        "modelStatus":{
+          "shape":"ModelStatus",
+          "documentation":"<p>The status of them model to filter results by. Possible values include:</p> <ul> <li> <p> <code>Creating</code> - Include only models that are currently being created and validated.</p> </li> <li> <p> <code>Active</code> - Include only models that have been successfully created and are ready for use.</p> </li> <li> <p> <code>Failed</code> - Include only models where the creation process failed.</p> </li> </ul> <p>If you don't specify a status, the API returns models in all states.</p>",
+          "location":"querystring",
+          "locationName":"modelStatus"
         }
       }
     },
@@ -5099,6 +9754,41 @@
         }
       }
     },
+    "ListFoundationModelAgreementOffersRequest":{
+      "type":"structure",
+      "required":["modelId"],
+      "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>Model Id of the foundation model.</p>",
+          "location":"uri",
+          "locationName":"modelId"
+        },
+        "offerType":{
+          "shape":"OfferType",
+          "documentation":"<p>Type of offer associated with the model.</p>",
+          "location":"querystring",
+          "locationName":"offerType"
+        }
+      }
+    },
+    "ListFoundationModelAgreementOffersResponse":{
+      "type":"structure",
+      "required":[
+        "modelId",
+        "offers"
+      ],
+      "members":{
+        "modelId":{
+          "shape":"BedrockModelId",
+          "documentation":"<p>Model Id of the foundation model.</p>"
+        },
+        "offers":{
+          "shape":"Offers",
+          "documentation":"<p>List of the offers associated with the specified model.</p>"
+        }
+      }
+    },
     "ListFoundationModelsRequest":{
       "type":"structure",
       "members":{
@@ -5533,7 +10223,7 @@
         },
         "statusEquals":{
           "shape":"ModelInvocationJobStatus",
-          "documentation":"<p>Specify a status to filter for batch inference jobs whose statuses match the string you specify.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web Services Support Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>",
+          "documentation":"<p>Specify a status to filter for batch inference jobs whose statuses match the string you specify.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web ServicesSupport Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>",
           "location":"querystring",
           "locationName":"statusEquals"
         },
@@ -5596,6 +10286,12 @@
           "documentation":"<p>Specify the pagination token from a previous request to retrieve the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "type":{
+          "shape":"PromptRouterType",
+          "documentation":"<p>The type of the prompt routers, such as whether it's default or custom.</p>",
+          "location":"querystring",
+          "locationName":"type"
         }
       }
     },
@@ -5848,16 +10544,80 @@
       "min":0,
       "sensitive":true
     },
+    "MetadataAttributeSchema":{
+      "type":"structure",
+      "required":[
+        "key",
+        "type",
+        "description"
+      ],
+      "members":{
+        "key":{
+          "shape":"MetadataAttributeSchemaKeyString",
+          "documentation":"<p>The unique identifier for the metadata attribute. This key is used to reference the attribute in filter expressions and reranking configurations.</p>"
+        },
+        "type":{
+          "shape":"AttributeType",
+          "documentation":"<p>The data type of the metadata attribute. The type determines how the attribute can be used in filter expressions and reranking.</p>"
+        },
+        "description":{
+          "shape":"MetadataAttributeSchemaDescriptionString",
+          "documentation":"<p>An optional description of the metadata attribute that provides additional context about its purpose and usage.</p>"
+        }
+      },
+      "documentation":"<p>Defines the schema for a metadata attribute used in Knowledge Base vector searches. Metadata attributes provide additional context for documents and can be used for filtering and reranking search results.</p>",
+      "sensitive":true
+    },
+    "MetadataAttributeSchemaDescriptionString":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[\\s\\S]+"
+    },
+    "MetadataAttributeSchemaKeyString":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\s\\S]+"
+    },
+    "MetadataAttributeSchemaList":{
+      "type":"list",
+      "member":{"shape":"MetadataAttributeSchema"},
+      "max":25,
+      "min":1
+    },
+    "MetadataConfigurationForReranking":{
+      "type":"structure",
+      "required":["selectionMode"],
+      "members":{
+        "selectionMode":{
+          "shape":"RerankingMetadataSelectionMode",
+          "documentation":"<p>The mode for selecting which metadata fields to include in the reranking process. Valid values are ALL (use all available metadata fields) or SELECTIVE (use only specified fields).</p>"
+        },
+        "selectiveModeConfiguration":{
+          "shape":"RerankingMetadataSelectiveModeConfiguration",
+          "documentation":"<p>Configuration for selective mode, which allows you to explicitly include or exclude specific metadata fields during reranking. This is only used when selectionMode is set to SELECTIVE.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for how metadata should be used during the reranking process in Knowledge Base vector searches. This determines which metadata fields are included or excluded when reordering search results.</p>"
+    },
     "MetricFloat":{
       "type":"float",
       "box":true
     },
+    "MetricName":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"[0-9a-zA-Z-_.]+",
+      "sensitive":true
+    },
     "ModelArchitecture":{"type":"string"},
     "ModelArn":{
       "type":"string",
       "max":1011,
       "min":20,
-      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}))"
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/((imported)|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}))(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}))"
     },
     "ModelCopyJobArn":{
       "type":"string",
@@ -6000,6 +10760,10 @@
           "shape":"ModelCustomizationJobStatus",
           "documentation":"<p>Status of the customization job. </p>"
         },
+        "statusDetails":{
+          "shape":"StatusDetails",
+          "documentation":"<p>Details about the status of the data processing sub-task of the job.</p>"
+        },
         "lastModifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>Time that the customization job was last modified.</p>"
@@ -6036,23 +10800,29 @@
       "members":{
         "s3DataSource":{
           "shape":"S3DataSource",
-          "documentation":"<p>The Amazon S3 data source of the imported model.</p>"
+          "documentation":"<p>The Amazon S3 data source of the model to import.</p>"
         }
       },
-      "documentation":"<p>Data source for the imported model.</p>",
+      "documentation":"<p>The data source of the model to import.</p>",
       "union":true
     },
+    "ModelDeploymentName":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"([0-9a-zA-Z][_-]?){1,63}"
+    },
     "ModelId":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-:]{1,63}/[a-z0-9]{12}$)|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}$)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})|(([0-9a-zA-Z][_-]?)+)"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-:]{1,63}/[a-z0-9]{12}$)|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})|(([0-9a-zA-Z][_-]?)+)$)|([0-9]{12}:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+$)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})|(([0-9a-zA-Z][_-]?)+)"
     },
     "ModelIdentifier":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})))|(([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2}))|(([0-9a-zA-Z][_-]?)+)"
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/((imported)|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}))(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})))|(([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2}))|(([0-9a-zA-Z][_-]?)+)"
     },
     "ModelImportJobArn":{
       "type":"string",
@@ -6259,7 +11029,7 @@
         },
         "status":{
           "shape":"ModelInvocationJobStatus",
-          "documentation":"<p>The status of the batch inference job.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web Services Support Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>"
+          "documentation":"<p>The status of the batch inference job.</p> <p>The following statuses are possible:</p> <ul> <li> <p>Submitted – This job has been submitted to a queue for validation.</p> </li> <li> <p>Validating – This job is being validated for the requirements described in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-data.html\">Format and upload your batch inference data</a>. The criteria include the following:</p> <ul> <li> <p>Your IAM service role has access to the Amazon S3 buckets containing your files.</p> </li> <li> <p>Your files are .jsonl files and each individual record is a JSON object in the correct format. Note that validation doesn't check if the <code>modelInput</code> value matches the request body for the model.</p> </li> <li> <p>Your files fulfill the requirements for file size and number of records. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html\">Quotas for Amazon Bedrock</a>.</p> </li> </ul> </li> <li> <p>Scheduled – This job has been validated and is now in a queue. The job will automatically start when it reaches its turn.</p> </li> <li> <p>Expired – This job timed out because it was scheduled but didn't begin before the set timeout duration. Submit a new job request.</p> </li> <li> <p>InProgress – This job has begun. You can start viewing the results in the output S3 location.</p> </li> <li> <p>Completed – This job has successfully completed. View the output files in the output S3 location.</p> </li> <li> <p>PartiallyCompleted – This job has partially completed. Not all of your records could be processed in time. View the output files in the output S3 location.</p> </li> <li> <p>Failed – This job has failed. Check the failure message for any further details. For further assistance, reach out to the <a href=\"https://console.aws.amazon.com/support/home/\">Amazon Web ServicesSupport Center</a>.</p> </li> <li> <p>Stopped – This job was stopped by a user.</p> </li> <li> <p>Stopping – This job is being stopped by a user.</p> </li> </ul>"
         },
         "message":{
           "shape":"Message",
@@ -6330,10 +11100,53 @@
       "min":0,
       "pattern":".*arn:aws:sagemaker:.*:hub-content/SageMakerPublicHub/Model/.*"
     },
+    "ModelStatus":{
+      "type":"string",
+      "enum":[
+        "Active",
+        "Creating",
+        "Failed"
+      ]
+    },
     "NonBlankString":{
       "type":"string",
       "pattern":"[\\s\\S]*"
     },
+    "Offer":{
+      "type":"structure",
+      "required":[
+        "offerToken",
+        "termDetails"
+      ],
+      "members":{
+        "offerId":{
+          "shape":"OfferId",
+          "documentation":"<p>Offer Id for a model offer.</p>"
+        },
+        "offerToken":{
+          "shape":"OfferToken",
+          "documentation":"<p>Offer token.</p>"
+        },
+        "termDetails":{
+          "shape":"TermDetails",
+          "documentation":"<p>Details about the terms of the offer.</p>"
+        }
+      },
+      "documentation":"<p>An offer dictates usage terms for the model.</p>"
+    },
+    "OfferId":{"type":"string"},
+    "OfferToken":{"type":"string"},
+    "OfferType":{
+      "type":"string",
+      "enum":[
+        "ALL",
+        "PUBLIC"
+      ]
+    },
+    "Offers":{
+      "type":"list",
+      "member":{"shape":"Offer"}
+    },
     "OrchestrationConfiguration":{
       "type":"structure",
       "required":["queryTransformationConfiguration"],
@@ -6384,6 +11197,17 @@
       "box":true,
       "min":1
     },
+    "PricingTerm":{
+      "type":"structure",
+      "required":["rateCard"],
+      "members":{
+        "rateCard":{
+          "shape":"RateCard",
+          "documentation":"<p>Describes a usage price for each dimension.</p>"
+        }
+      },
+      "documentation":"<p>Describes the usage-based pricing term.</p>"
+    },
     "PromptRouterArn":{
       "type":"string",
       "max":2048,
@@ -6468,6 +11292,7 @@
     },
     "PromptRouterTargetModel":{
       "type":"structure",
+      "required":["modelArn"],
       "members":{
         "modelArn":{
           "shape":"PromptRouterTargetModelArn",
@@ -6480,7 +11305,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":".*(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2})|(^arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:(|[0-9a-z-]{0,20}):(|[0-9]{12}):inference-profile/[a-zA-Z0-9-:.]+)"
+      "pattern":".*(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2})|(^arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:(|[0-9a-z-]{0,20}):(|[0-9]{12}):(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+)"
     },
     "PromptRouterTargetModels":{
       "type":"list",
@@ -6612,9 +11437,22 @@
     },
     "PutModelInvocationLoggingConfigurationResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "PutUseCaseForModelAccessRequest":{
+      "type":"structure",
+      "required":["formData"],
       "members":{
+        "formData":{
+          "shape":"AcknowledgementFormDataBody",
+          "documentation":"<p>Put customer profile Request.</p>"
+        }
       }
     },
+    "PutUseCaseForModelAccessResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "QueryTransformationConfiguration":{
       "type":"structure",
       "required":["type"],
@@ -6636,17 +11474,15 @@
         "knowledgeBaseConfig":{
           "shape":"KnowledgeBaseConfig",
           "documentation":"<p>Contains configuration details for knowledge base retrieval and response generation.</p>"
+        },
+        "precomputedRagSourceConfig":{
+          "shape":"EvaluationPrecomputedRagSourceConfig",
+          "documentation":"<p>Contains configuration details about the RAG source used to generate inference response data for a Knowledge Base evaluation job.</p>"
         }
       },
       "documentation":"<p>Contains configuration details for retrieval of information and response generation.</p>",
       "union":true
     },
-    "RAGIdentifiers":{
-      "type":"list",
-      "member":{"shape":"KnowledgeBaseId"},
-      "max":1,
-      "min":0
-    },
     "RAGStopSequences":{
       "type":"list",
       "member":{"shape":"RAGStopSequencesMemberString"},
@@ -6664,6 +11500,66 @@
       "max":1,
       "min":1
     },
+    "RateCard":{
+      "type":"list",
+      "member":{"shape":"DimensionalPriceRate"}
+    },
+    "RatingScale":{
+      "type":"list",
+      "member":{"shape":"RatingScaleItem"},
+      "max":10,
+      "min":1
+    },
+    "RatingScaleItem":{
+      "type":"structure",
+      "required":[
+        "definition",
+        "value"
+      ],
+      "members":{
+        "definition":{
+          "shape":"RatingScaleItemDefinition",
+          "documentation":"<p>Defines the definition for one rating in a custom metric rating scale.</p>"
+        },
+        "value":{
+          "shape":"RatingScaleItemValue",
+          "documentation":"<p>Defines the value for one rating in a custom metric rating scale.</p>"
+        }
+      },
+      "documentation":"<p>Defines the value and corresponding definition for one rating in a custom metric rating scale.</p>"
+    },
+    "RatingScaleItemDefinition":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "RatingScaleItemValue":{
+      "type":"structure",
+      "members":{
+        "stringValue":{
+          "shape":"RatingScaleItemValueStringValueString",
+          "documentation":"<p>A string representing the value for a rating in a custom metric rating scale.</p>"
+        },
+        "floatValue":{
+          "shape":"Float",
+          "documentation":"<p>A floating point number representing the value for a rating in a custom metric rating scale.</p>"
+        }
+      },
+      "documentation":"<p>Defines the value for one rating in a custom metric rating scale.</p>",
+      "union":true
+    },
+    "RatingScaleItemValueStringValueString":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "RegionAvailability":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "NOT_AVAILABLE"
+      ]
+    },
     "RegisterMarketplaceModelEndpointRequest":{
       "type":"structure",
       "required":[
@@ -6756,6 +11652,40 @@
       "min":0,
       "pattern":"[a-zA-Z0-9\\s._:/=+$@-]{0,256}"
     },
+    "RerankingMetadataSelectionMode":{
+      "type":"string",
+      "enum":[
+        "SELECTIVE",
+        "ALL"
+      ]
+    },
+    "RerankingMetadataSelectiveModeConfiguration":{
+      "type":"structure",
+      "members":{
+        "fieldsToInclude":{
+          "shape":"FieldsForReranking",
+          "documentation":"<p>A list of metadata field names to explicitly include in the reranking process. Only these fields will be considered when reordering search results. This parameter cannot be used together with fieldsToExclude.</p>"
+        },
+        "fieldsToExclude":{
+          "shape":"FieldsForReranking",
+          "documentation":"<p>A list of metadata field names to explicitly exclude from the reranking process. All metadata fields except these will be considered when reordering search results. This parameter cannot be used together with fieldsToInclude.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for selectively including or excluding metadata fields during the reranking process. This allows you to control which metadata attributes are considered when reordering search results.</p>",
+      "union":true
+    },
+    "ResourceInUseException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>Thrown when attempting to delete or modify a resource that is currently being used by other resources or operations. For example, trying to delete an Automated Reasoning policy that is referenced by an active guardrail.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ResourceNotFoundException":{
       "type":"structure",
       "members":{
@@ -6879,7 +11809,6 @@
     },
     "RoleArn":{
       "type":"string",
-      "documentation":"<p>ARN of a IAM role</p>",
       "max":2048,
       "min":0,
       "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+"
@@ -6898,7 +11827,7 @@
     "RoutingCriteriaResponseQualityDifferenceDouble":{
       "type":"double",
       "box":true,
-      "max":1,
+      "max":100,
       "min":0
     },
     "S3Config":{
@@ -6925,7 +11854,7 @@
           "documentation":"<p>The URI of the Amazon S3 data source.</p>"
         }
       },
-      "documentation":"<p>The Amazon S3 data source of the imported job.</p>"
+      "documentation":"<p>The Amazon S3 data source of the model to import. </p>"
     },
     "S3InputFormat":{
       "type":"string",
@@ -6946,7 +11875,7 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?"
+      "pattern":"s3://[a-z0-9][-.a-z0-9]{1,61}[a-z0-9](?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?"
     },
     "SageMakerEndpoint":{
       "type":"structure",
@@ -7045,6 +11974,97 @@
         "Descending"
       ]
     },
+    "StartAutomatedReasoningPolicyBuildWorkflowRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowType",
+        "sourceContent"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy for which to start the build workflow.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowType":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowType",
+          "documentation":"<p>The type of build workflow to start (e.g., DOCUMENT_INGESTION for processing new documents, POLICY_REPAIR for fixing existing policies).</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowType"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than once. If this token matches a previous request, Amazon Bedrock ignores the request but doesn't return an error.</p>",
+          "idempotencyToken":true,
+          "location":"header",
+          "locationName":"x-amz-client-token"
+        },
+        "sourceContent":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowSource",
+          "documentation":"<p>The source content for the build workflow, such as documents to analyze or repair instructions for existing policies.</p>"
+        }
+      },
+      "payload":"sourceContent"
+    },
+    "StartAutomatedReasoningPolicyBuildWorkflowResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the newly started build workflow. Use this ID to track the workflow's progress and retrieve its results.</p>"
+        }
+      }
+    },
+    "StartAutomatedReasoningPolicyTestWorkflowRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy to test.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The build workflow identifier. The build workflow must show a <code>COMPLETED</code> status before running tests.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "testCaseIds":{
+          "shape":"AutomatedReasoningPolicyTestCaseIdList",
+          "documentation":"<p>The list of test identifiers to run. If not provided, all tests for the policy are run.</p>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request but doesn't return an error.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StartAutomatedReasoningPolicyTestWorkflowResponse":{
+      "type":"structure",
+      "required":["policyArn"],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy for which the test workflow was started.</p>"
+        }
+      }
+    },
     "Status":{
       "type":"string",
       "enum":[
@@ -7052,6 +12072,24 @@
         "INCOMPATIBLE_ENDPOINT"
       ]
     },
+    "StatusDetails":{
+      "type":"structure",
+      "members":{
+        "validationDetails":{
+          "shape":"ValidationDetails",
+          "documentation":"<p>The status details for the validation sub-task of the job.</p>"
+        },
+        "dataProcessingDetails":{
+          "shape":"DataProcessingDetails",
+          "documentation":"<p>The status details for the data processing sub-task of the job.</p>"
+        },
+        "trainingDetails":{
+          "shape":"TrainingDetails",
+          "documentation":"<p>The status details for the training sub-task of the job.</p>"
+        }
+      },
+      "documentation":"<p>For a Distillation job, the status details for sub-tasks of the job. Possible statuses for each sub-task include the following:</p> <ul> <li> <p>NotStarted</p> </li> <li> <p>InProgress</p> </li> <li> <p>Completed</p> </li> <li> <p>Stopping</p> </li> <li> <p>Stopped</p> </li> <li> <p>Failed</p> </li> </ul>"
+    },
     "StopEvaluationJobRequest":{
       "type":"structure",
       "required":["jobIdentifier"],
@@ -7066,8 +12104,7 @@
     },
     "StopEvaluationJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopModelCustomizationJobRequest":{
       "type":"structure",
@@ -7083,8 +12120,7 @@
     },
     "StopModelCustomizationJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopModelInvocationJobRequest":{
       "type":"structure",
@@ -7100,8 +12136,7 @@
     },
     "StopModelInvocationJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{"type":"string"},
     "SubnetId":{
@@ -7116,6 +12151,16 @@
       "max":16,
       "min":1
     },
+    "SupportTerm":{
+      "type":"structure",
+      "members":{
+        "refundPolicyDescription":{
+          "shape":"String",
+          "documentation":"<p>Describes the refund policy.</p>"
+        }
+      },
+      "documentation":"<p>Describes a support term.</p>"
+    },
     "Tag":{
       "type":"structure",
       "required":[
@@ -7171,8 +12216,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7184,7 +12228,7 @@
       "type":"string",
       "max":1011,
       "min":20,
-      "pattern":".*(^[a-zA-Z0-9][a-zA-Z0-9\\-]*$)|(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:([0-9]{12}|)((:(fine-tuning-job|model-customization-job|custom-model)/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12})$)|(:guardrail/[a-z0-9]+$)|(:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+$)|(:(provisioned-model|model-invocation-job|model-evaluation-job|evaluation-job|model-import-job|imported-model|async-invoke)/[a-z0-9]{12}$))).*"
+      "pattern":".*(^[a-zA-Z0-9][a-zA-Z0-9\\-]*$)|(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:custom-model/(imported)/[a-z0-9]{12}$)|(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:([0-9]{12}|)((:(fine-tuning-job|model-customization-job|custom-model)/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}(/[a-z0-9]{12})$)|(:guardrail/[a-z0-9]+$)|(:automated-reasoning-policy/[a-zA-Z0-9]+(:[a-zA-Z0-9]+)?$)|(:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+$)|(:(provisioned-model|model-invocation-job|model-evaluation-job|evaluation-job|model-import-job|imported-model|async-invoke|provisioned-model-v2|provisioned-model-reservation|prompt-router|custom-model-deployment)/[a-z0-9]{12}$))).*"
     },
     "TeacherModelConfig":{
       "type":"structure",
@@ -7203,7 +12247,7 @@
     },
     "TeacherModelIdentifier":{
       "type":"string",
-      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/[a-z0-9-]{1,63}[.]{1}([a-z0-9-]{1,63}[.]){0,2}[a-z0-9-]{1,63}([:][a-z0-9-]{1,63}){0,2}|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})|(([0-9a-zA-Z][_-]?)+)"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:((:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})|(([0-9a-zA-Z][_-]?)+)$)|([0-9]{12}:inference-profile/[a-zA-Z0-9-:.]+$)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})"
     },
     "Temperature":{
       "type":"float",
@@ -7211,6 +12255,30 @@
       "max":1,
       "min":0
     },
+    "TermDetails":{
+      "type":"structure",
+      "required":[
+        "usageBasedPricingTerm",
+        "legalTerm",
+        "supportTerm"
+      ],
+      "members":{
+        "usageBasedPricingTerm":{"shape":"PricingTerm"},
+        "legalTerm":{
+          "shape":"LegalTerm",
+          "documentation":"<p>Describes the legal terms.</p>"
+        },
+        "supportTerm":{
+          "shape":"SupportTerm",
+          "documentation":"<p>Describes the support terms.</p>"
+        },
+        "validityTerm":{
+          "shape":"ValidityTerm",
+          "documentation":"<p>Describes the validity terms.</p>"
+        }
+      },
+      "documentation":"<p>Describes the usage terms of an offer.</p>"
+    },
     "TextInferenceConfig":{
       "type":"structure",
       "members":{
@@ -7291,6 +12359,24 @@
       },
       "documentation":"<p>S3 Location of the training data.</p>"
     },
+    "TrainingDetails":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"JobStatusDetails",
+          "documentation":"<p>The status of the training sub-task of the job.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the training sub-task of the job.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The latest update to the training sub-task of the job.</p>"
+        }
+      },
+      "documentation":"<p>For a Distillation job, the status details for the training sub-task of the job.</p>"
+    },
     "TrainingMetrics":{
       "type":"structure",
       "members":{
@@ -7320,7 +12406,184 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateAutomatedReasoningPolicyAnnotationsRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "annotations",
+        "lastUpdatedAnnotationSetHash"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy whose annotations you want to update.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow whose annotations you want to update.</p>",
+          "location":"uri",
+          "locationName":"buildWorkflowId"
+        },
+        "annotations":{
+          "shape":"AutomatedReasoningPolicyAnnotationList",
+          "documentation":"<p>The updated annotations containing modified rules, variables, and types for the policy.</p>"
+        },
+        "lastUpdatedAnnotationSetHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash value of the annotation set that you're updating. This is used for optimistic concurrency control to prevent conflicting updates.</p>"
+        }
+      }
+    },
+    "UpdateAutomatedReasoningPolicyAnnotationsResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "buildWorkflowId",
+        "annotationSetHash",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy.</p>"
+        },
+        "buildWorkflowId":{
+          "shape":"AutomatedReasoningPolicyBuildWorkflowId",
+          "documentation":"<p>The unique identifier of the build workflow.</p>"
+        },
+        "annotationSetHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The new hash value representing the updated state of the annotations.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the annotations were updated.</p>"
+        }
+      }
+    },
+    "UpdateAutomatedReasoningPolicyRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "policyDefinition"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy to update. This must be the ARN of a draft policy.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "policyDefinition":{
+          "shape":"AutomatedReasoningPolicyDefinition",
+          "documentation":"<p>The updated policy definition containing the formal logic rules, variables, and types.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The updated name for the Automated Reasoning policy.</p>"
+        },
+        "description":{
+          "shape":"AutomatedReasoningPolicyDescription",
+          "documentation":"<p>The updated description for the Automated Reasoning policy.</p>"
+        }
+      }
+    },
+    "UpdateAutomatedReasoningPolicyResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "name",
+        "definitionHash",
+        "updatedAt"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated policy.</p>"
+        },
+        "name":{
+          "shape":"AutomatedReasoningPolicyName",
+          "documentation":"<p>The updated name of the policy.</p>"
+        },
+        "definitionHash":{
+          "shape":"AutomatedReasoningPolicyHash",
+          "documentation":"<p>The hash of the updated policy definition.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the policy was last updated.</p>"
+        }
+      }
+    },
+    "UpdateAutomatedReasoningPolicyTestCaseRequest":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCaseId",
+        "guardContent",
+        "lastUpdatedAt",
+        "expectedAggregatedFindingsResult"
+      ],
       "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Automated Reasoning policy that contains the test.</p>",
+          "location":"uri",
+          "locationName":"policyArn"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the test to update.</p>",
+          "location":"uri",
+          "locationName":"testCaseId"
+        },
+        "guardContent":{
+          "shape":"AutomatedReasoningPolicyTestGuardContent",
+          "documentation":"<p>The updated content to be validated by the Automated Reasoning policy.</p>"
+        },
+        "queryContent":{
+          "shape":"AutomatedReasoningPolicyTestQueryContent",
+          "documentation":"<p>The updated input query or prompt that generated the content.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the test was last updated. This is used as a concurrency token to prevent conflicting modifications.</p>"
+        },
+        "expectedAggregatedFindingsResult":{
+          "shape":"AutomatedReasoningCheckResult",
+          "documentation":"<p>The updated expected result of the Automated Reasoning check.</p>"
+        },
+        "confidenceThreshold":{
+          "shape":"AutomatedReasoningCheckTranslationConfidence",
+          "documentation":"<p>The updated minimum confidence level for logic validation. If null is provided, the threshold will be removed.</p>"
+        },
+        "clientRequestToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateAutomatedReasoningPolicyTestCaseResponse":{
+      "type":"structure",
+      "required":[
+        "policyArn",
+        "testCaseId"
+      ],
+      "members":{
+        "policyArn":{
+          "shape":"AutomatedReasoningPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the policy that contains the updated test.</p>"
+        },
+        "testCaseId":{
+          "shape":"AutomatedReasoningPolicyTestCaseId",
+          "documentation":"<p>The unique identifier of the updated test.</p>"
+        }
       }
     },
     "UpdateGuardrailRequest":{
@@ -7366,6 +12629,14 @@
           "shape":"GuardrailContextualGroundingPolicyConfig",
           "documentation":"<p>The contextual grounding policy configuration used to update a guardrail.</p>"
         },
+        "automatedReasoningPolicyConfig":{
+          "shape":"GuardrailAutomatedReasoningPolicyConfig",
+          "documentation":"<p>Updated configuration for Automated Reasoning policies associated with the guardrail.</p>"
+        },
+        "crossRegionConfig":{
+          "shape":"GuardrailCrossRegionConfig",
+          "documentation":"<p>The system-defined guardrail profile that you're using with your guardrail. Guardrail profiles define the destination Amazon Web Services Regions where guardrail inference requests can be automatically routed.</p> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-cross-region.html\">Amazon Bedrock User Guide</a>.</p>"
+        },
         "blockedInputMessaging":{
           "shape":"GuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the guardrail blocks a prompt.</p>"
@@ -7463,8 +12734,7 @@
     },
     "UpdateProvisionedModelThroughputResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UsePromptResponse":{"type":"boolean"},
     "ValidationDataConfig":{
@@ -7478,6 +12748,24 @@
       },
       "documentation":"<p>Array of up to 10 validators.</p>"
     },
+    "ValidationDetails":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"JobStatusDetails",
+          "documentation":"<p>The status of the validation sub-task of the job.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the validation sub-task of the job.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The latest update to the validation sub-task of the job.</p>"
+        }
+      },
+      "documentation":"<p>For a Distillation job, the status details for the validation sub-task of the job.</p>"
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -7521,6 +12809,75 @@
       "max":10,
       "min":0
     },
+    "ValidityTerm":{
+      "type":"structure",
+      "members":{
+        "agreementDuration":{
+          "shape":"String",
+          "documentation":"<p>Describes the agreement duration.</p>"
+        }
+      },
+      "documentation":"<p>Describes the validity terms.</p>"
+    },
+    "VectorSearchBedrockRerankingConfiguration":{
+      "type":"structure",
+      "required":["modelConfiguration"],
+      "members":{
+        "modelConfiguration":{
+          "shape":"VectorSearchBedrockRerankingModelConfiguration",
+          "documentation":"<p>Configuration for the Amazon Bedrock foundation model used for reranking. This includes the model ARN and any additional request fields required by the model.</p>"
+        },
+        "numberOfRerankedResults":{
+          "shape":"VectorSearchBedrockRerankingConfigurationNumberOfRerankedResultsInteger",
+          "documentation":"<p>The maximum number of results to rerank. This limits how many of the initial vector search results will be processed by the reranking model. A smaller number improves performance but may exclude potentially relevant results.</p>"
+        },
+        "metadataConfiguration":{
+          "shape":"MetadataConfigurationForReranking",
+          "documentation":"<p>Configuration for how document metadata should be used during the reranking process. This determines which metadata fields are included when reordering search results.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for using Amazon Bedrock foundation models to rerank Knowledge Base vector search results. This enables more sophisticated relevance ranking using large language models.</p>"
+    },
+    "VectorSearchBedrockRerankingConfigurationNumberOfRerankedResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "VectorSearchBedrockRerankingModelConfiguration":{
+      "type":"structure",
+      "required":["modelArn"],
+      "members":{
+        "modelArn":{
+          "shape":"BedrockRerankingModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the foundation model to use for reranking. This model processes the query and search results to determine a more relevant ordering.</p>"
+        },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p>A list of additional fields to include in the model request during reranking. These fields provide extra context or configuration options specific to the selected foundation model.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for the Amazon Bedrock foundation model used for reranking vector search results. This specifies which model to use and any additional parameters required by the model.</p>"
+    },
+    "VectorSearchRerankingConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"VectorSearchRerankingConfigurationType",
+          "documentation":"<p>The type of reranking to apply to vector search results. Currently, the only supported value is BEDROCK, which uses Amazon Bedrock foundation models for reranking.</p>"
+        },
+        "bedrockRerankingConfiguration":{
+          "shape":"VectorSearchBedrockRerankingConfiguration",
+          "documentation":"<p>Configuration for using Amazon Bedrock foundation models to rerank search results. This is required when the reranking type is set to BEDROCK.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for reranking vector search results to improve relevance. Reranking applies additional relevance models to reorder the initial vector search results based on more sophisticated criteria.</p>"
+    },
+    "VectorSearchRerankingConfigurationType":{
+      "type":"string",
+      "enum":["BEDROCK_RERANKING_MODEL"]
+    },
     "VpcConfig":{
       "type":"structure",
       "required":[
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-06-05",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"bedrock-agent",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Agents for Amazon Bedrock",
     "serviceId":"Bedrock Agent",
     "signatureVersion":"v4",
     "signingName":"bedrock",
-    "uid":"bedrock-agent-2023-06-05",
-    "auth":["aws.auth#sigv4"]
+    "uid":"bedrock-agent-2023-06-05"
   },
   "operations":{
     "AssociateAgentCollaborator":{
@@ -458,7 +457,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Deletes documents from a data source and syncs the changes to the knowledge base that is connected to it. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-real-time-ingestion.html\">Ingest documents into a knowledge base in real-time</a> in the Amazon Bedrock User Guide.</p>",
+      "documentation":"<p>Deletes documents from a data source and syncs the changes to the knowledge base that is connected to it. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-direct-ingestion.html\">Ingest changes directly into a knowledge base</a> in the Amazon Bedrock User Guide.</p>",
       "idempotent":true
     },
     "DeletePrompt":{
@@ -754,7 +753,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Retrieves specific documents from a data source that is connected to a knowledge base. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-real-time-ingestion.html\">Ingest documents into a knowledge base in real-time</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Retrieves specific documents from a data source that is connected to a knowledge base. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-direct-ingestion.html\">Ingest changes directly into a knowledge base</a> in the Amazon Bedrock User Guide.</p>"
     },
     "GetPrompt":{
       "name":"GetPrompt",
@@ -791,7 +790,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Ingests documents directly into the knowledge base that is connected to the data source. The <code>dataSourceType</code> specified in the content for each document must match the type of the data source that you specify in the header. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-real-time-ingestion.html\">Ingest documents into a knowledge base in real-time</a> in the Amazon Bedrock User Guide.</p>",
+      "documentation":"<p>Ingests documents directly into the knowledge base that is connected to the data source. The <code>dataSourceType</code> specified in the content for each document must match the type of the data source that you specify in the header. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-direct-ingestion.html\">Ingest changes directly into a knowledge base</a> in the Amazon Bedrock User Guide.</p>",
       "idempotent":true
     },
     "ListAgentActionGroups":{
@@ -1007,7 +1006,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Retrieves all the documents contained in a data source that is connected to a knowledge base. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-real-time-ingestion.html\">Ingest documents into a knowledge base in real-time</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Retrieves all the documents contained in a data source that is connected to a knowledge base. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-direct-ingestion.html\">Ingest changes directly into a knowledge base</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ListKnowledgeBases":{
       "name":"ListKnowledgeBases",
@@ -1410,13 +1409,13 @@
     "APISchema":{
       "type":"structure",
       "members":{
-        "payload":{
-          "shape":"Payload",
-          "documentation":"<p>The JSON or YAML-formatted payload defining the OpenAPI schema for the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
-        },
         "s3":{
           "shape":"S3Identifier",
           "documentation":"<p>Contains details about the S3 object containing the OpenAPI schema for the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
+        },
+        "payload":{
+          "shape":"Payload",
+          "documentation":"<p>The JSON or YAML-formatted payload defining the OpenAPI schema for the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
         }
       },
       "documentation":"<p>Contains details about the OpenAPI schema for the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>. You can either include the schema directly in the <code>payload</code> field or you can upload it to an S3 bucket and specify the S3 bucket location in the <code>s3</code> field.</p>",
@@ -1437,13 +1436,13 @@
     "ActionGroupExecutor":{
       "type":"structure",
       "members":{
-        "customControl":{
-          "shape":"CustomControlMethod",
-          "documentation":"<p>To return the action group invocation results directly in the <code>InvokeAgent</code> response, specify <code>RETURN_CONTROL</code>.</p>"
-        },
         "lambda":{
           "shape":"LambdaArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action.</p>"
+        },
+        "customControl":{
+          "shape":"CustomControlMethod",
+          "documentation":"<p>To return the action group invocation results directly in the <code>InvokeAgent</code> response, specify <code>RETURN_CONTROL</code>.</p>"
         }
       },
       "documentation":"<p>Contains details about the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user.</p>",
@@ -1453,9 +1452,27 @@
       "type":"string",
       "enum":[
         "AMAZON.UserInput",
-        "AMAZON.CodeInterpreter"
+        "AMAZON.CodeInterpreter",
+        "ANTHROPIC.Computer",
+        "ANTHROPIC.Bash",
+        "ANTHROPIC.TextEditor"
       ]
     },
+    "ActionGroupSignatureParams":{
+      "type":"map",
+      "key":{"shape":"ActionGroupSignatureParamsKeyString"},
+      "value":{"shape":"ActionGroupSignatureParamsValueString"}
+    },
+    "ActionGroupSignatureParamsKeyString":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
+    "ActionGroupSignatureParamsValueString":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
     "ActionGroupState":{
       "type":"string",
       "enum":[
@@ -1501,28 +1518,36 @@
       },
       "documentation":"<p>Contains details about an action group.</p>"
     },
+    "AdditionalModelRequestFields":{
+      "type":"map",
+      "key":{"shape":"AdditionalModelRequestFieldsKey"},
+      "value":{"shape":"AdditionalModelRequestFieldsValue"}
+    },
+    "AdditionalModelRequestFieldsKey":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "AdditionalModelRequestFieldsValue":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true
+    },
     "Agent":{
       "type":"structure",
       "required":[
-        "agentArn",
         "agentId",
         "agentName",
-        "agentResourceRoleArn",
-        "agentStatus",
+        "agentArn",
         "agentVersion",
-        "createdAt",
+        "agentStatus",
         "idleSessionTTLInSeconds",
+        "agentResourceRoleArn",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "agentArn":{
-          "shape":"AgentArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the agent.</p>"
-        },
-        "agentCollaboration":{
-          "shape":"AgentCollaboration",
-          "documentation":"<p>The agent's collaboration settings.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent.</p>"
@@ -1531,13 +1556,9 @@
           "shape":"Name",
           "documentation":"<p>The name of the agent.</p>"
         },
-        "agentResourceRoleArn":{
-          "shape":"AgentRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
-        },
-        "agentStatus":{
-          "shape":"AgentStatus",
-          "documentation":"<p>The status of the agent and whether it is ready for use. The following statuses are possible:</p> <ul> <li> <p>CREATING – The agent is being created.</p> </li> <li> <p>PREPARING – The agent is being prepared.</p> </li> <li> <p>PREPARED – The agent is prepared and ready to be invoked.</p> </li> <li> <p>NOT_PREPARED – The agent has been created but not yet prepared.</p> </li> <li> <p>FAILED – The agent API operation failed.</p> </li> <li> <p>UPDATING – The agent is being updated.</p> </li> <li> <p>DELETING – The agent is being deleted.</p> </li> </ul>"
+        "agentArn":{
+          "shape":"AgentArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent.</p>"
         },
         "agentVersion":{
           "shape":"DraftVersion",
@@ -1547,65 +1568,77 @@
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the agent was created.</p>"
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p>Instructions that tell the agent what it should do and how it should interact with users.</p>"
         },
-        "customOrchestration":{
-          "shape":"CustomOrchestration",
-          "documentation":"<p> Contains custom orchestration configurations for the agent. </p>"
+        "agentStatus":{
+          "shape":"AgentStatus",
+          "documentation":"<p>The status of the agent and whether it is ready for use. The following statuses are possible:</p> <ul> <li> <p>CREATING – The agent is being created.</p> </li> <li> <p>PREPARING – The agent is being prepared.</p> </li> <li> <p>PREPARED – The agent is prepared and ready to be invoked.</p> </li> <li> <p>NOT_PREPARED – The agent has been created but not yet prepared.</p> </li> <li> <p>FAILED – The agent API operation failed.</p> </li> <li> <p>UPDATING – The agent is being updated.</p> </li> <li> <p>DELETING – The agent is being deleted.</p> </li> </ul>"
         },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that encrypts the agent.</p>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The foundation model used for orchestration by the agent.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the agent.</p>"
         },
-        "failureReasons":{
-          "shape":"FailureReasons",
-          "documentation":"<p>Contains reasons that the agent-related API that you invoked failed.</p>"
-        },
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The foundation model used for orchestration by the agent.</p>"
+        "orchestrationType":{
+          "shape":"OrchestrationType",
+          "documentation":"<p> Specifies the orchestration strategy for the agent. </p>"
         },
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>Details about the guardrail associated with the agent.</p>"
+        "customOrchestration":{
+          "shape":"CustomOrchestration",
+          "documentation":"<p> Contains custom orchestration configurations for the agent. </p>"
         },
         "idleSessionTTLInSeconds":{
           "shape":"SessionTTL",
           "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
         },
-        "instruction":{
-          "shape":"Instruction",
-          "documentation":"<p>Instructions that tell the agent what it should do and how it should interact with users.</p>"
+        "agentResourceRoleArn":{
+          "shape":"AgentRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
         },
-        "memoryConfiguration":{
-          "shape":"MemoryConfiguration",
-          "documentation":"<p>Contains memory configuration for the agent.</p>"
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that encrypts the agent.</p>"
         },
-        "orchestrationType":{
-          "shape":"OrchestrationType",
-          "documentation":"<p> Specifies the orchestration strategy for the agent. </p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the agent was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the agent was last updated.</p>"
         },
         "preparedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the agent was last prepared.</p>"
         },
-        "promptOverrideConfiguration":{
-          "shape":"PromptOverrideConfiguration",
-          "documentation":"<p>Contains configurations to override prompt templates in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
+        "failureReasons":{
+          "shape":"FailureReasons",
+          "documentation":"<p>Contains reasons that the agent-related API that you invoked failed.</p>"
         },
         "recommendedActions":{
           "shape":"RecommendedActions",
           "documentation":"<p>Contains recommended actions to take for the agent-related API that you invoked to succeed.</p>"
         },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the agent was last updated.</p>"
+        "promptOverrideConfiguration":{
+          "shape":"PromptOverrideConfiguration",
+          "documentation":"<p>Contains configurations to override prompt templates in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
+        },
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>Details about the guardrail associated with the agent.</p>"
+        },
+        "memoryConfiguration":{
+          "shape":"MemoryConfiguration",
+          "documentation":"<p>Contains memory configuration for the agent.</p>"
+        },
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p>The agent's collaboration settings.</p>"
         }
       },
       "documentation":"<p>Contains details about an agent.</p>"
@@ -1613,31 +1646,15 @@
     "AgentActionGroup":{
       "type":"structure",
       "required":[
-        "actionGroupId",
-        "actionGroupName",
-        "actionGroupState",
         "agentId",
         "agentVersion",
+        "actionGroupId",
+        "actionGroupName",
         "createdAt",
-        "updatedAt"
+        "updatedAt",
+        "actionGroupState"
       ],
       "members":{
-        "actionGroupExecutor":{
-          "shape":"ActionGroupExecutor",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user.</p>"
-        },
-        "actionGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the action group.</p>"
-        },
-        "actionGroupName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the action group.</p>"
-        },
-        "actionGroupState":{
-          "shape":"ActionGroupState",
-          "documentation":"<p>Specifies whether the action group is available for the agent to invoke or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent to which the action group belongs.</p>"
@@ -1646,33 +1663,53 @@
           "shape":"Version",
           "documentation":"<p>The version of the agent to which the action group belongs.</p>"
         },
-        "apiSchema":{
-          "shape":"APISchema",
-          "documentation":"<p>Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
+        "actionGroupId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the action group.</p>"
+        },
+        "actionGroupName":{
+          "shape":"Name",
+          "documentation":"<p>The name of the action group.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the action group was created.</p>"
-        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the action group.</p>"
         },
-        "functionSchema":{
-          "shape":"FunctionSchema",
-          "documentation":"<p>Defines functions that each define parameters that the agent needs to invoke from the user. Each function represents an action in an action group.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the action group was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the action group was last updated.</p>"
         },
         "parentActionSignature":{
           "shape":"ActionGroupSignature",
           "documentation":"<p>If this field is set as <code>AMAZON.UserInput</code>, the agent can request the user for additional information when trying to complete a task. The <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields must be blank for this action group.</p> <p>During orchestration, if the agent determines that it needs to invoke an API in an action group, but doesn't have enough information to complete the API request, it will invoke this action group instead and return an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Observation.html\">Observation</a> reprompting the user for more information.</p>"
         },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the action group was last updated.</p>"
+        "parentActionGroupSignatureParams":{
+          "shape":"ActionGroupSignatureParams",
+          "documentation":"<p>The configuration settings for a computer use action.</p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important>"
+        },
+        "actionGroupExecutor":{
+          "shape":"ActionGroupExecutor",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user.</p>"
+        },
+        "apiSchema":{
+          "shape":"APISchema",
+          "documentation":"<p>Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
+        },
+        "functionSchema":{
+          "shape":"FunctionSchema",
+          "documentation":"<p>Defines functions that each define parameters that the agent needs to invoke from the user. Each function represents an action in an action group.</p>"
+        },
+        "actionGroupState":{
+          "shape":"ActionGroupState",
+          "documentation":"<p>Specifies whether the action group is available for the agent to invoke or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
         }
       },
       "documentation":"<p>Contains details about an action group.</p>"
@@ -1680,23 +1717,19 @@
     "AgentAlias":{
       "type":"structure",
       "required":[
-        "agentAliasArn",
+        "agentId",
         "agentAliasId",
         "agentAliasName",
-        "agentAliasStatus",
-        "agentId",
-        "createdAt",
+        "agentAliasArn",
         "routingConfiguration",
-        "updatedAt"
+        "createdAt",
+        "updatedAt",
+        "agentAliasStatus"
       ],
       "members":{
-        "agentAliasArn":{
-          "shape":"AgentAliasArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the alias of the agent.</p>"
-        },
-        "agentAliasHistoryEvents":{
-          "shape":"AgentAliasHistoryEvents",
-          "documentation":"<p>Contains details about the history of the alias.</p>"
+        "agentId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the agent.</p>"
         },
         "agentAliasId":{
           "shape":"AgentAliasId",
@@ -1706,37 +1739,45 @@
           "shape":"Name",
           "documentation":"<p>The name of the alias of the agent.</p>"
         },
-        "agentAliasStatus":{
-          "shape":"AgentAliasStatus",
-          "documentation":"<p>The status of the alias of the agent and whether it is ready for use. The following statuses are possible:</p> <ul> <li> <p>CREATING – The agent alias is being created.</p> </li> <li> <p>PREPARED – The agent alias is finished being created or updated and is ready to be invoked.</p> </li> <li> <p>FAILED – The agent alias API operation failed.</p> </li> <li> <p>UPDATING – The agent alias is being updated.</p> </li> <li> <p>DELETING – The agent alias is being deleted.</p> </li> </ul>"
-        },
-        "agentId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the agent.</p>"
+        "agentAliasArn":{
+          "shape":"AgentAliasArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the alias of the agent.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the alias of the agent was created.</p>"
-        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the alias of the agent.</p>"
         },
-        "failureReasons":{
-          "shape":"FailureReasons",
-          "documentation":"<p>Information on the failure of Provisioned Throughput assigned to an agent alias.</p>"
-        },
         "routingConfiguration":{
           "shape":"AgentAliasRoutingConfiguration",
           "documentation":"<p>Contains details about the routing configuration of the alias.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the alias of the agent was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the alias was last updated.</p>"
+        },
+        "agentAliasHistoryEvents":{
+          "shape":"AgentAliasHistoryEvents",
+          "documentation":"<p>Contains details about the history of the alias.</p>"
+        },
+        "agentAliasStatus":{
+          "shape":"AgentAliasStatus",
+          "documentation":"<p>The status of the alias of the agent and whether it is ready for use. The following statuses are possible:</p> <ul> <li> <p>CREATING – The agent alias is being created.</p> </li> <li> <p>PREPARED – The agent alias is finished being created or updated and is ready to be invoked.</p> </li> <li> <p>FAILED – The agent alias API operation failed.</p> </li> <li> <p>UPDATING – The agent alias is being updated.</p> </li> <li> <p>DELETING – The agent alias is being deleted.</p> </li> <li> <p>DISSOCIATED - The agent alias has no version associated with it.</p> </li> </ul>"
+        },
+        "failureReasons":{
+          "shape":"FailureReasons",
+          "documentation":"<p>Information on the failure of Provisioned Throughput assigned to an agent alias.</p>"
+        },
+        "aliasInvocationState":{
+          "shape":"AliasInvocationState",
+          "documentation":"<p>The invocation state for the agent alias. If the agent alias is running, the value is <code>ACCEPT_INVOCATIONS</code>. If the agent alias is paused, the value is <code>REJECT_INVOCATIONS</code>. Use the <code>UpdateAgentAlias</code> operation to change the invocation state.</p>"
         }
       },
       "documentation":"<p>Contains details about an alias of an agent.</p>"
@@ -1745,19 +1786,19 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent-alias/[0-9a-zA-Z]{10}/[0-9a-zA-Z]{10}$"
+      "pattern":"arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent-alias/[0-9a-zA-Z]{10}/[0-9a-zA-Z]{10}"
     },
     "AgentAliasHistoryEvent":{
       "type":"structure",
       "members":{
-        "endDate":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The date that the alias stopped being associated to the version in the <code>routingConfiguration</code> object</p>"
-        },
         "routingConfiguration":{
           "shape":"AgentAliasRoutingConfiguration",
           "documentation":"<p>Contains details about the version of the agent with which the alias is associated.</p>"
         },
+        "endDate":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date that the alias stopped being associated to the version in the <code>routingConfiguration</code> object</p>"
+        },
         "startDate":{
           "shape":"DateTimestamp",
           "documentation":"<p>The date that the alias began being associated to the version in the <code>routingConfiguration</code> object.</p>"
@@ -1775,7 +1816,7 @@
       "type":"string",
       "max":10,
       "min":10,
-      "pattern":"^(\\bTSTALIASID\\b|[0-9a-zA-Z]+)$"
+      "pattern":"(\\bTSTALIASID\\b|[0-9a-zA-Z]+)"
     },
     "AgentAliasRoutingConfiguration":{
       "type":"list",
@@ -1804,7 +1845,8 @@
         "PREPARED",
         "FAILED",
         "UPDATING",
-        "DELETING"
+        "DELETING",
+        "DISSOCIATED"
       ]
     },
     "AgentAliasSummaries":{
@@ -1831,14 +1873,6 @@
           "shape":"Name",
           "documentation":"<p>The name of the alias.</p>"
         },
-        "agentAliasStatus":{
-          "shape":"AgentAliasStatus",
-          "documentation":"<p>The status of the alias.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the alias of the agent was created.</p>"
-        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the alias.</p>"
@@ -1847,9 +1881,21 @@
           "shape":"AgentAliasRoutingConfiguration",
           "documentation":"<p>Contains details about the version of the agent with which the alias is associated.</p>"
         },
+        "agentAliasStatus":{
+          "shape":"AgentAliasStatus",
+          "documentation":"<p>The status of the alias.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the alias of the agent was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the alias was last updated.</p>"
+        },
+        "aliasInvocationState":{
+          "shape":"AliasInvocationState",
+          "documentation":"<p>The invocation state for the agent alias. If the agent alias is running, the value is <code>ACCEPT_INVOCATIONS</code>. If the agent alias is paused, the value is <code>REJECT_INVOCATIONS</code>. Use the <code>UpdateAgentAlias</code> operation to change the invocation state.</p>"
         }
       },
       "documentation":"<p>Contains details about an alias of an agent.</p>"
@@ -1858,7 +1904,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent/[0-9a-zA-Z]{10}$"
+      "pattern":"arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent/[0-9a-zA-Z]{10}"
     },
     "AgentCollaboration":{
       "type":"string",
@@ -1871,20 +1917,16 @@
     "AgentCollaborator":{
       "type":"structure",
       "required":[
-        "agentDescriptor",
         "agentId",
         "agentVersion",
-        "collaborationInstruction",
+        "agentDescriptor",
         "collaboratorId",
+        "collaborationInstruction",
         "collaboratorName",
         "createdAt",
         "lastUpdatedAt"
       ],
       "members":{
-        "agentDescriptor":{
-          "shape":"AgentDescriptor",
-          "documentation":"<p>The collaborator's agent descriptor.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The collaborator's agent ID.</p>"
@@ -1893,18 +1935,18 @@
           "shape":"Version",
           "documentation":"<p>The collaborator's agent version.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>The collaborator's client token.</p>"
-        },
-        "collaborationInstruction":{
-          "shape":"CollaborationInstruction",
-          "documentation":"<p>The collaborator's instructions.</p>"
+        "agentDescriptor":{
+          "shape":"AgentDescriptor",
+          "documentation":"<p>The collaborator's agent descriptor.</p>"
         },
         "collaboratorId":{
           "shape":"Id",
           "documentation":"<p>The collaborator's collaborator ID.</p>"
         },
+        "collaborationInstruction":{
+          "shape":"CollaborationInstruction",
+          "documentation":"<p>The collaborator's instructions.</p>"
+        },
         "collaboratorName":{
           "shape":"Name",
           "documentation":"<p>The collaborator's collaborator name.</p>"
@@ -1920,6 +1962,10 @@
         "relayConversationHistory":{
           "shape":"RelayConversationHistory",
           "documentation":"<p>The collaborator's relay conversation history.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>The collaborator's client token.</p>"
         }
       },
       "documentation":"<p>An agent collaborator.</p>"
@@ -1933,21 +1979,17 @@
     "AgentCollaboratorSummary":{
       "type":"structure",
       "required":[
-        "agentDescriptor",
         "agentId",
         "agentVersion",
-        "collaborationInstruction",
         "collaboratorId",
+        "agentDescriptor",
+        "collaborationInstruction",
+        "relayConversationHistory",
         "collaboratorName",
         "createdAt",
-        "lastUpdatedAt",
-        "relayConversationHistory"
+        "lastUpdatedAt"
       ],
       "members":{
-        "agentDescriptor":{
-          "shape":"AgentDescriptor",
-          "documentation":"<p>The collaborator's agent descriptor.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The collaborator's agent ID.</p>"
@@ -1956,13 +1998,21 @@
           "shape":"Version",
           "documentation":"<p>The collaborator's agent version.</p>"
         },
+        "collaboratorId":{
+          "shape":"Id",
+          "documentation":"<p>The collaborator's ID.</p>"
+        },
+        "agentDescriptor":{
+          "shape":"AgentDescriptor",
+          "documentation":"<p>The collaborator's agent descriptor.</p>"
+        },
         "collaborationInstruction":{
           "shape":"CollaborationInstruction",
           "documentation":"<p>The collaborator's collaboration instruction.</p>"
         },
-        "collaboratorId":{
-          "shape":"Id",
-          "documentation":"<p>The collaborator's ID.</p>"
+        "relayConversationHistory":{
+          "shape":"RelayConversationHistory",
+          "documentation":"<p>The collaborator's relay conversation history.</p>"
         },
         "collaboratorName":{
           "shape":"Name",
@@ -1975,10 +2025,6 @@
         "lastUpdatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>When the collaborator was last updated.</p>"
-        },
-        "relayConversationHistory":{
-          "shape":"RelayConversationHistory",
-          "documentation":"<p>The collaborator's relay conversation history.</p>"
         }
       },
       "documentation":"<p>An agent collaborator summary.</p>"
@@ -1998,22 +2044,22 @@
       "required":["agentAliasArn"],
       "members":{
         "agentAliasArn":{
-          "shape":"AgentAliasArn",
+          "shape":"FlowAgentAliasArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the alias of the agent to invoke.</p>"
         }
       },
-      "documentation":"<p>Defines an agent node in your flow. You specify the agent to invoke at this point in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Defines an agent node in your flow. You specify the agent to invoke at this point in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "AgentKnowledgeBase":{
       "type":"structure",
       "required":[
         "agentId",
         "agentVersion",
-        "createdAt",
-        "description",
         "knowledgeBaseId",
-        "knowledgeBaseState",
-        "updatedAt"
+        "description",
+        "createdAt",
+        "updatedAt",
+        "knowledgeBaseState"
       ],
       "members":{
         "agentId":{
@@ -2024,25 +2070,25 @@
           "shape":"Version",
           "documentation":"<p>The version of the agent with which the knowledge base is associated.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the association between the agent and the knowledge base was created.</p>"
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the association between the agent and the knowledge base.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the association between the agent and the knowledge base.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the association between the agent and the knowledge base.</p>"
-        },
-        "knowledgeBaseState":{
-          "shape":"KnowledgeBaseState",
-          "documentation":"<p>Specifies whether to use the knowledge base or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the association between the agent and the knowledge base was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the association between the agent and the knowledge base was last updated.</p>"
+        },
+        "knowledgeBaseState":{
+          "shape":"KnowledgeBaseState",
+          "documentation":"<p>Specifies whether to use the knowledge base or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
         }
       },
       "documentation":"<p>Contains details about a knowledge base that is associated with an agent.</p>"
@@ -2061,14 +2107,14 @@
         "updatedAt"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the knowledge base associated with an agent.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base associated with an agent.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the knowledge base associated with an agent.</p>"
+        },
         "knowledgeBaseState":{
           "shape":"KnowledgeBaseState",
           "documentation":"<p>Specifies whether the agent uses the knowledge base or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
@@ -2084,7 +2130,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+$"
+      "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+"
     },
     "AgentStatus":{
       "type":"string",
@@ -2130,17 +2176,17 @@
           "shape":"Description",
           "documentation":"<p>The description of the agent.</p>"
         },
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>Details about the guardrail associated with the agent.</p>"
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the agent was last updated.</p>"
         },
         "latestAgentVersion":{
           "shape":"Version",
           "documentation":"<p>The latest version of the agent.</p>"
         },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the agent was last updated.</p>"
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>Details about the guardrail associated with the agent.</p>"
         }
       },
       "documentation":"<p>Contains details about an agent.</p>"
@@ -2148,25 +2194,17 @@
     "AgentVersion":{
       "type":"structure",
       "required":[
-        "agentArn",
         "agentId",
         "agentName",
-        "agentResourceRoleArn",
+        "agentArn",
+        "version",
         "agentStatus",
-        "createdAt",
         "idleSessionTTLInSeconds",
-        "updatedAt",
-        "version"
+        "agentResourceRoleArn",
+        "createdAt",
+        "updatedAt"
       ],
       "members":{
-        "agentArn":{
-          "shape":"AgentArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the agent that the version belongs to.</p>"
-        },
-        "agentCollaboration":{
-          "shape":"AgentCollaboration",
-          "documentation":"<p>The agent's collaboration settings.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent that the version belongs to.</p>"
@@ -2175,65 +2213,73 @@
           "shape":"Name",
           "documentation":"<p>The name of the agent that the version belongs to.</p>"
         },
-        "agentResourceRoleArn":{
-          "shape":"AgentRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
+        "agentArn":{
+          "shape":"AgentArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent that the version belongs to.</p>"
+        },
+        "version":{
+          "shape":"NumericalVersion",
+          "documentation":"<p>The version number.</p>"
+        },
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p>The instructions provided to the agent.</p>"
         },
         "agentStatus":{
           "shape":"AgentStatus",
           "documentation":"<p>The status of the agent that the version belongs to.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the version was created.</p>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The foundation model that the version invokes.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the version.</p>"
+        },
+        "idleSessionTTLInSeconds":{
+          "shape":"SessionTTL",
+          "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
+        },
+        "agentResourceRoleArn":{
+          "shape":"AgentRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that encrypts the agent.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the version.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the version was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the version was last updated.</p>"
         },
         "failureReasons":{
           "shape":"FailureReasons",
           "documentation":"<p>A list of reasons that the API operation on the version failed.</p>"
         },
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The foundation model that the version invokes.</p>"
+        "recommendedActions":{
+          "shape":"RecommendedActions",
+          "documentation":"<p>A list of recommended actions to take for the failed API operation on the version to succeed.</p>"
+        },
+        "promptOverrideConfiguration":{
+          "shape":"PromptOverrideConfiguration",
+          "documentation":"<p>Contains configurations to override prompt templates in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
         },
         "guardrailConfiguration":{
           "shape":"GuardrailConfiguration",
           "documentation":"<p>Details about the guardrail associated with the agent.</p>"
         },
-        "idleSessionTTLInSeconds":{
-          "shape":"SessionTTL",
-          "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
-        },
-        "instruction":{
-          "shape":"Instruction",
-          "documentation":"<p>The instructions provided to the agent.</p>"
-        },
         "memoryConfiguration":{
           "shape":"MemoryConfiguration",
           "documentation":"<p> Contains details of the memory configuration on the version of the agent. </p>"
         },
-        "promptOverrideConfiguration":{
-          "shape":"PromptOverrideConfiguration",
-          "documentation":"<p>Contains configurations to override prompt templates in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
-        },
-        "recommendedActions":{
-          "shape":"RecommendedActions",
-          "documentation":"<p>A list of recommended actions to take for the failed API operation on the version to succeed.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the version was last updated.</p>"
-        },
-        "version":{
-          "shape":"NumericalVersion",
-          "documentation":"<p>The version number.</p>"
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p>The agent's collaboration settings.</p>"
         }
       },
       "documentation":"<p>Contains details about a version of an agent.</p>"
@@ -2270,6 +2316,10 @@
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the version was created.</p>"
         },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the version was last updated.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the version of the agent.</p>"
@@ -2277,14 +2327,18 @@
         "guardrailConfiguration":{
           "shape":"GuardrailConfiguration",
           "documentation":"<p>Details about the guardrail associated with the agent.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the version was last updated.</p>"
         }
       },
       "documentation":"<p>Contains details about a version of an agent.</p>"
     },
+    "AliasInvocationState":{
+      "type":"string",
+      "documentation":"<p>Enum representing the invocation state of an agent alias</p>",
+      "enum":[
+        "ACCEPT_INVOCATIONS",
+        "REJECT_INVOCATIONS"
+      ]
+    },
     "AnyToolChoice":{
       "type":"structure",
       "members":{
@@ -2294,17 +2348,13 @@
     "AssociateAgentCollaboratorRequest":{
       "type":"structure",
       "required":[
-        "agentDescriptor",
         "agentId",
         "agentVersion",
-        "collaborationInstruction",
-        "collaboratorName"
+        "agentDescriptor",
+        "collaboratorName",
+        "collaborationInstruction"
       ],
       "members":{
-        "agentDescriptor":{
-          "shape":"AgentDescriptor",
-          "documentation":"<p>The alias of the collaborator agent.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The agent's ID.</p>",
@@ -2317,22 +2367,26 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A client token.</p>",
-          "idempotencyToken":true
-        },
-        "collaborationInstruction":{
-          "shape":"CollaborationInstruction",
-          "documentation":"<p>Instruction for the collaborator.</p>"
+        "agentDescriptor":{
+          "shape":"AgentDescriptor",
+          "documentation":"<p>The alias of the collaborator agent.</p>"
         },
         "collaboratorName":{
           "shape":"Name",
           "documentation":"<p>A name for the collaborator.</p>"
         },
+        "collaborationInstruction":{
+          "shape":"CollaborationInstruction",
+          "documentation":"<p>Instruction for the collaborator.</p>"
+        },
         "relayConversationHistory":{
           "shape":"RelayConversationHistory",
           "documentation":"<p>A relay conversation history for the collaborator.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A client token.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2351,8 +2405,8 @@
       "required":[
         "agentId",
         "agentVersion",
-        "description",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "description"
       ],
       "members":{
         "agentId":{
@@ -2367,14 +2421,14 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>A description of what the agent should use the knowledge base for.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base to associate with the agent.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>A description of what the agent should use the knowledge base for.</p>"
+        },
         "knowledgeBaseState":{
           "shape":"KnowledgeBaseState",
           "documentation":"<p>Specifies whether to use the knowledge base or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
@@ -2401,7 +2455,7 @@
       "type":"string",
       "max":200,
       "min":1,
-      "pattern":"^.*\\.*$"
+      "pattern":".*\\.*"
     },
     "AwsDataCatalogTableNames":{
       "type":"list",
@@ -2429,7 +2483,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
     },
     "BedrockEmbeddingModelConfiguration":{
       "type":"structure",
@@ -2451,24 +2505,48 @@
       "members":{
         "modelArn":{
           "shape":"BedrockModelArn",
-          "documentation":"<p>The ARN of the foundation model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> to use for parsing.</p>"
+          "documentation":"<p>The ARN of the foundation model to use for parsing.</p>"
+        },
+        "parsingPrompt":{
+          "shape":"ParsingPrompt",
+          "documentation":"<p>Instructions for interpreting the contents of a document.</p>"
         },
         "parsingModality":{
           "shape":"ParsingModality",
           "documentation":"<p>Specifies whether to enable parsing of multimodal data, including both text and/or images.</p>"
+        }
+      },
+      "documentation":"<p>Settings for a foundation model used to parse documents for a data source.</p>"
+    },
+    "BedrockFoundationModelContextEnrichmentConfiguration":{
+      "type":"structure",
+      "required":[
+        "enrichmentStrategyConfiguration",
+        "modelArn"
+      ],
+      "members":{
+        "enrichmentStrategyConfiguration":{
+          "shape":"EnrichmentStrategyConfiguration",
+          "documentation":"<p>The enrichment stategy used to provide additional context. For example, Neptune GraphRAG uses Amazon Bedrock foundation models to perform chunk entity extraction.</p>"
         },
-        "parsingPrompt":{
-          "shape":"ParsingPrompt",
-          "documentation":"<p>Instructions for interpreting the contents of a document.</p>"
+        "modelArn":{
+          "shape":"BedrockModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the model used to create vector embeddings for the knowledge base.</p>"
         }
       },
-      "documentation":"<p>Settings for a foundation model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> used to parse documents for a data source.</p>"
+      "documentation":"<p>Context enrichment configuration is used to provide additional context to the RAG application using Amazon Bedrock foundation models.</p>"
     },
     "BedrockModelArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]{1,12})?:(bedrock):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]{1,12})?:(bedrock):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
+    },
+    "BedrockRerankingModelArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/(.*))?"
     },
     "Boolean":{
       "type":"boolean",
@@ -2478,7 +2556,7 @@
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^[0-9]{12}$"
+      "pattern":"[0-9]{12}"
     },
     "ByteContentBlob":{
       "type":"blob",
@@ -2489,33 +2567,44 @@
     "ByteContentDoc":{
       "type":"structure",
       "required":[
-        "data",
-        "mimeType"
+        "mimeType",
+        "data"
       ],
       "members":{
-        "data":{
-          "shape":"ByteContentBlob",
-          "documentation":"<p>The base64-encoded string of the content.</p>"
-        },
         "mimeType":{
           "shape":"ByteContentDocMimeTypeString",
           "documentation":"<p>The MIME type of the content. For a list of MIME types, see <a href=\"https://www.iana.org/assignments/media-types/media-types.xhtml\">Media Types</a>. The following MIME types are supported:</p> <ul> <li> <p>text/plain</p> </li> <li> <p>text/html</p> </li> <li> <p>text/csv</p> </li> <li> <p>text/vtt</p> </li> <li> <p>message/rfc822</p> </li> <li> <p>application/xhtml+xml</p> </li> <li> <p>application/pdf</p> </li> <li> <p>application/msword</p> </li> <li> <p>application/vnd.ms-word.document.macroenabled.12</p> </li> <li> <p>application/vnd.ms-word.template.macroenabled.12</p> </li> <li> <p>application/vnd.ms-excel</p> </li> <li> <p>application/vnd.ms-excel.addin.macroenabled.12</p> </li> <li> <p>application/vnd.ms-excel.sheet.macroenabled.12</p> </li> <li> <p>application/vnd.ms-excel.template.macroenabled.12</p> </li> <li> <p>application/vnd.ms-excel.sheet.binary.macroenabled.12</p> </li> <li> <p>application/vnd.ms-spreadsheetml</p> </li> <li> <p>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</p> </li> <li> <p>application/vnd.openxmlformats-officedocument.spreadsheetml.template</p> </li> <li> <p>application/vnd.openxmlformats-officedocument.wordprocessingml.document</p> </li> <li> <p>application/vnd.openxmlformats-officedocument.wordprocessingml.template</p> </li> </ul>"
+        },
+        "data":{
+          "shape":"ByteContentBlob",
+          "documentation":"<p>The base64-encoded string of the content.</p>"
         }
       },
       "documentation":"<p>Contains information about content defined inline in bytes.</p>"
     },
     "ByteContentDocMimeTypeString":{
       "type":"string",
-      "pattern":"[a-z]{1,20}/.{1,20}"
+      "pattern":".*[a-z]{1,20}/.{1,20}.*"
+    },
+    "CachePointBlock":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"CachePointType",
+          "documentation":"<p>Indicates that the CachePointBlock is of the default type</p>"
+        }
+      },
+      "documentation":"<p>Indicates where a cache checkpoint is located. All information before this checkpoint is cached to be accessed on subsequent requests.</p>"
+    },
+    "CachePointType":{
+      "type":"string",
+      "enum":["default"]
     },
     "ChatPromptTemplateConfiguration":{
       "type":"structure",
       "required":["messages"],
       "members":{
-        "inputVariables":{
-          "shape":"PromptInputVariablesList",
-          "documentation":"<p>An array of the variables in the prompt template.</p>"
-        },
         "messages":{
           "shape":"Messages",
           "documentation":"<p>Contains messages in the chat for the prompt.</p>"
@@ -2524,6 +2613,10 @@
           "shape":"SystemContentBlocks",
           "documentation":"<p>Contains system prompts to provide context to the model or to describe how it should behave.</p>"
         },
+        "inputVariables":{
+          "shape":"PromptInputVariablesList",
+          "documentation":"<p>An array of the variables in the prompt template.</p>"
+        },
         "toolConfiguration":{
           "shape":"ToolConfiguration",
           "documentation":"<p>Configuration information for the tools that the model can use when generating a response.</p>"
@@ -2568,7 +2661,7 @@
       "type":"string",
       "max":256,
       "min":33,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,256}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,256}"
     },
     "CollaborationInstruction":{
       "type":"string",
@@ -2580,13 +2673,20 @@
       "type":"structure",
       "members":{
       },
-      "documentation":"<p>Defines a collector node in your flow. This node takes an iteration of inputs and consolidates them into an array in the output. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Defines a collector node in your flow. This node takes an iteration of inputs and consolidates them into an array in the output. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ColumnName":{
       "type":"string",
       "max":63,
       "min":0,
-      "pattern":"^[a-zA-Z0-9_\\-]+$"
+      "pattern":"[a-zA-Z0-9_\\-]+"
+    },
+    "ConcurrencyType":{
+      "type":"string",
+      "enum":[
+        "Automatic",
+        "Manual"
+      ]
     },
     "ConditionFlowNodeConfiguration":{
       "type":"structure",
@@ -2597,7 +2697,7 @@
           "documentation":"<p>An array of conditions. Each member contains the name of a condition and an expression that defines the condition.</p>"
         }
       },
-      "documentation":"<p>Defines a condition node in your flow. You can specify conditions that determine which node comes next in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Defines a condition node in your flow. You can specify conditions that determine which node comes next in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ConflictException":{
       "type":"structure",
@@ -2632,13 +2732,13 @@
       "type":"structure",
       "required":["sourceConfiguration"],
       "members":{
-        "crawlerConfiguration":{
-          "shape":"ConfluenceCrawlerConfiguration",
-          "documentation":"<p>The configuration of the Confluence content. For example, configuring specific types of Confluence content.</p>"
-        },
         "sourceConfiguration":{
           "shape":"ConfluenceSourceConfiguration",
           "documentation":"<p>The endpoint information to connect to your Confluence data source.</p>"
+        },
+        "crawlerConfiguration":{
+          "shape":"ConfluenceCrawlerConfiguration",
+          "documentation":"<p>The configuration of the Confluence content. For example, configuring specific types of Confluence content.</p>"
         }
       },
       "documentation":"<p>The configuration information to connect to Confluence as your data source.</p>"
@@ -2650,12 +2750,20 @@
     "ConfluenceSourceConfiguration":{
       "type":"structure",
       "required":[
-        "authType",
-        "credentialsSecretArn",
+        "hostUrl",
         "hostType",
-        "hostUrl"
+        "authType",
+        "credentialsSecretArn"
       ],
       "members":{
+        "hostUrl":{
+          "shape":"HttpsUrl",
+          "documentation":"<p>The Confluence host URL or instance URL.</p>"
+        },
+        "hostType":{
+          "shape":"ConfluenceHostType",
+          "documentation":"<p>The supported host type, whether online/cloud or server/on-premises.</p>"
+        },
         "authType":{
           "shape":"ConfluenceAuthType",
           "documentation":"<p>The supported authentication type to authenticate and connect to your Confluence instance.</p>"
@@ -2663,14 +2771,6 @@
         "credentialsSecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name of an Secrets Manager secret that stores your authentication credentials for your Confluence instance URL. For more information on the key-value pairs that must be included in your secret, depending on your authentication type, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/confluence-data-source-connector.html#configuration-confluence-connector\">Confluence connection configuration</a>.</p>"
-        },
-        "hostType":{
-          "shape":"ConfluenceHostType",
-          "documentation":"<p>The supported host type, whether online/cloud or server/on-premises.</p>"
-        },
-        "hostUrl":{
-          "shape":"HttpsUrl",
-          "documentation":"<p>The Confluence host URL or instance URL.</p>"
         }
       },
       "documentation":"<p>The endpoint information to connect to your Confluence data source.</p>"
@@ -2681,6 +2781,10 @@
         "text":{
           "shape":"String",
           "documentation":"<p>The text in the message.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>Creates a cache checkpoint within a message.</p>"
         }
       },
       "documentation":"<p>Contains the content for the message you pass to, or receive from a model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-create.html\">Create a prompt using Prompt management</a>.</p>",
@@ -2698,6 +2802,25 @@
         "S3"
       ]
     },
+    "ContextEnrichmentConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ContextEnrichmentType",
+          "documentation":"<p>The method used for context enrichment. It must be Amazon Bedrock foundation models.</p>"
+        },
+        "bedrockFoundationModelConfiguration":{
+          "shape":"BedrockFoundationModelContextEnrichmentConfiguration",
+          "documentation":"<p>The configuration of the Amazon Bedrock foundation model used for context enrichment.</p>"
+        }
+      },
+      "documentation":"<p>Context enrichment configuration is used to provide additional context to the RAG application.</p>"
+    },
+    "ContextEnrichmentType":{
+      "type":"string",
+      "enum":["BEDROCK_FOUNDATION_MODEL"]
+    },
     "ConversationRole":{
       "type":"string",
       "enum":[
@@ -2709,13 +2832,13 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "patternObjectFilter":{
-          "shape":"PatternObjectFilterConfiguration",
-          "documentation":"<p>The configuration of filtering certain objects or content types of the data source.</p>"
-        },
         "type":{
           "shape":"CrawlFilterConfigurationType",
           "documentation":"<p>The type of filtering that you want to apply to certain objects or content of the data source. For example, the <code>PATTERN</code> type is regular expression patterns you can apply to filter your content.</p>"
+        },
+        "patternObjectFilter":{
+          "shape":"PatternObjectFilterConfiguration",
+          "documentation":"<p>The configuration of filtering certain objects or content types of the data source.</p>"
         }
       },
       "documentation":"<p>The configuration of filtering the data source content. For example, configuring regular expression patterns to include or exclude certain content.</p>"
@@ -2727,23 +2850,11 @@
     "CreateAgentActionGroupRequest":{
       "type":"structure",
       "required":[
-        "actionGroupName",
         "agentId",
-        "agentVersion"
+        "agentVersion",
+        "actionGroupName"
       ],
       "members":{
-        "actionGroupExecutor":{
-          "shape":"ActionGroupExecutor",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user.</p>"
-        },
-        "actionGroupName":{
-          "shape":"Name",
-          "documentation":"<p>The name to give the action group.</p>"
-        },
-        "actionGroupState":{
-          "shape":"ActionGroupState",
-          "documentation":"<p>Specifies whether the action group is available for the agent to invoke or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent for which to create the action group.</p>",
@@ -2756,9 +2867,9 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
-        "apiSchema":{
-          "shape":"APISchema",
-          "documentation":"<p>Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
+        "actionGroupName":{
+          "shape":"Name",
+          "documentation":"<p>The name to give the action group.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -2769,13 +2880,29 @@
           "shape":"Description",
           "documentation":"<p>A description of the action group.</p>"
         },
+        "parentActionGroupSignature":{
+          "shape":"ActionGroupSignature",
+          "documentation":"<p>Specify a built-in or computer use action for this action group. If you specify a value, you must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields empty for this action group. </p> <ul> <li> <p>To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. </p> </li> <li> <p>To allow your agent to generate, run, and troubleshoot code when trying to complete a task, set this field to <code>AMAZON.CodeInterpreter</code>.</p> </li> <li> <p>To allow your agent to use an Anthropic computer use tool, specify one of the following values. </p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Anthropic Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. When operating computer use functionality, we recommend taking additional security precautions, such as executing computer actions in virtual environments with restricted data access and limited internet connectivity. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important> <ul> <li> <p> <code>ANTHROPIC.Computer</code> - Gives the agent permission to use the mouse and keyboard and take screenshots.</p> </li> <li> <p> <code>ANTHROPIC.TextEditor</code> - Gives the agent permission to view, create and edit files.</p> </li> <li> <p> <code>ANTHROPIC.Bash</code> - Gives the agent permission to run commands in a bash shell.</p> </li> </ul> </li> </ul>"
+        },
+        "parentActionGroupSignatureParams":{
+          "shape":"ActionGroupSignatureParams",
+          "documentation":"<p>The configuration settings for a computer use action.</p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Anthropic Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important>"
+        },
+        "actionGroupExecutor":{
+          "shape":"ActionGroupExecutor",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user.</p>"
+        },
+        "apiSchema":{
+          "shape":"APISchema",
+          "documentation":"<p>Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
+        },
+        "actionGroupState":{
+          "shape":"ActionGroupState",
+          "documentation":"<p>Specifies whether the action group is available for the agent to invoke or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
+        },
         "functionSchema":{
           "shape":"FunctionSchema",
           "documentation":"<p>Contains details about the function schema for the action group or the JSON or YAML-formatted payload defining the schema.</p>"
-        },
-        "parentActionGroupSignature":{
-          "shape":"ActionGroupSignature",
-          "documentation":"<p>To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. You must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields blank for this action group.</p> <p>To allow your agent to generate, run, and troubleshoot code when trying to complete a task, set this field to <code>AMAZON.CodeInterpreter</code>. You must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields blank for this action group.</p> <p>During orchestration, if your agent determines that it needs to invoke an API in an action group, but doesn't have enough information to complete the API request, it will invoke this action group instead and return an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Observation.html\">Observation</a> reprompting the user for more information.</p>"
         }
       }
     },
@@ -2792,20 +2919,20 @@
     "CreateAgentAliasRequest":{
       "type":"structure",
       "required":[
-        "agentAliasName",
-        "agentId"
+        "agentId",
+        "agentAliasName"
       ],
       "members":{
-        "agentAliasName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent.</p>",
           "location":"uri",
           "locationName":"agentId"
         },
+        "agentAliasName":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
@@ -2839,66 +2966,66 @@
       "type":"structure",
       "required":["agentName"],
       "members":{
-        "agentCollaboration":{
-          "shape":"AgentCollaboration",
-          "documentation":"<p>The agent's collaboration role.</p>"
-        },
         "agentName":{
           "shape":"Name",
           "documentation":"<p>A name for the agent that you create.</p>"
         },
-        "agentResourceRoleArn":{
-          "shape":"AgentRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
           "idempotencyToken":true
         },
-        "customOrchestration":{
-          "shape":"CustomOrchestration",
-          "documentation":"<p> Contains details of the custom orchestration configured for the agent. </p>"
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p>Instructions that tell the agent what it should do and how it should interact with users.</p>"
         },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key with which to encrypt the agent.</p>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The identifier for the model that you want to be used for orchestration by the agent you create.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the agent.</p>"
         },
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The identifier for the model that you want to be used for orchestration by the agent you create.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>"
+        "orchestrationType":{
+          "shape":"OrchestrationType",
+          "documentation":"<p> Specifies the type of orchestration strategy for the agent. This is set to <code>DEFAULT</code> orchestration type, by default. </p>"
         },
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>The unique Guardrail configuration assigned to the agent when it is created.</p>"
+        "customOrchestration":{
+          "shape":"CustomOrchestration",
+          "documentation":"<p> Contains details of the custom orchestration configured for the agent. </p>"
         },
         "idleSessionTTLInSeconds":{
           "shape":"SessionTTL",
           "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
         },
-        "instruction":{
-          "shape":"Instruction",
-          "documentation":"<p>Instructions that tell the agent what it should do and how it should interact with users.</p>"
+        "agentResourceRoleArn":{
+          "shape":"AgentRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
         },
-        "memoryConfiguration":{
-          "shape":"MemoryConfiguration",
-          "documentation":"<p> Contains the details of the memory configured for the agent.</p>"
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key with which to encrypt the agent.</p>"
         },
-        "orchestrationType":{
-          "shape":"OrchestrationType",
-          "documentation":"<p> Specifies the type of orchestration strategy for the agent. This is set to <code>DEFAULT</code> orchestration type, by default. </p>"
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Any tags that you want to attach to the agent.</p>"
         },
         "promptOverrideConfiguration":{
           "shape":"PromptOverrideConfiguration",
           "documentation":"<p>Contains configurations to override prompts in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
         },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>Any tags that you want to attach to the agent.</p>"
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>The unique Guardrail configuration assigned to the agent when it is created.</p>"
+        },
+        "memoryConfiguration":{
+          "shape":"MemoryConfiguration",
+          "documentation":"<p> Contains the details of the memory configured for the agent.</p>"
+        },
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p>The agent's collaboration role.</p>"
         }
       }
     },
@@ -2915,37 +3042,37 @@
     "CreateDataSourceRequest":{
       "type":"structure",
       "required":[
-        "dataSourceConfiguration",
         "knowledgeBaseId",
-        "name"
+        "name",
+        "dataSourceConfiguration"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base to which to add the data source.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
           "idempotencyToken":true
         },
-        "dataDeletionPolicy":{
-          "shape":"DataDeletionPolicy",
-          "documentation":"<p>The data deletion policy for the data source.</p> <p>You can set the data deletion policy to:</p> <ul> <li> <p>DELETE: Deletes all data from your data source that’s converted into vector embeddings upon deletion of a knowledge base or data source resource. Note that the <b>vector store itself is not deleted</b>, only the data. This flag is ignored if an Amazon Web Services account is deleted.</p> </li> <li> <p>RETAIN: Retains all data from your data source that’s converted into vector embeddings upon deletion of a knowledge base or data source resource. Note that the <b>vector store itself is not deleted</b> if you delete a knowledge base or data source resource.</p> </li> </ul>"
-        },
-        "dataSourceConfiguration":{
-          "shape":"DataSourceConfiguration",
-          "documentation":"<p>The connection configuration for the data source.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the data source.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the data source.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base to which to add the data source.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "dataSourceConfiguration":{
+          "shape":"DataSourceConfiguration",
+          "documentation":"<p>The connection configuration for the data source.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the data source.</p>"
+        "dataDeletionPolicy":{
+          "shape":"DataDeletionPolicy",
+          "documentation":"<p>The data deletion policy for the data source.</p> <p>You can set the data deletion policy to:</p> <ul> <li> <p>DELETE: Deletes all data from your data source that’s converted into vector embeddings upon deletion of a knowledge base or data source resource. Note that the <b>vector store itself is not deleted</b>, only the data. This flag is ignored if an Amazon Web Services account is deleted.</p> </li> <li> <p>RETAIN: Retains all data from your data source that’s converted into vector embeddings upon deletion of a knowledge base or data source resource. Note that the <b>vector store itself is not deleted</b> if you delete a knowledge base or data source resource.</p> </li> </ul>"
         },
         "serverSideEncryptionConfiguration":{
           "shape":"ServerSideEncryptionConfiguration",
@@ -2970,33 +3097,37 @@
     "CreateFlowAliasRequest":{
       "type":"structure",
       "required":[
-        "flowIdentifier",
         "name",
-        "routingConfiguration"
+        "routingConfiguration",
+        "flowIdentifier"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>A name for the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description for the alias.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>Contains information about the version to which to map the alias.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed in parallel.</p>"
+        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow for which to create an alias.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>A name for the alias.</p>"
-        },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>Contains information about the version to which to map the alias.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagsMap",
@@ -3007,27 +3138,31 @@
     "CreateFlowAliasResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "flowId",
-        "id",
         "name",
         "routingConfiguration",
+        "flowId",
+        "id",
+        "arn",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowAliasArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the alias.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the alias was created.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the alias.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed in parallel.</p>"
+        },
         "flowId":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow that the alias belongs to.</p>"
@@ -3036,13 +3171,13 @@
           "shape":"FlowAliasId",
           "documentation":"<p>The unique identifier of the alias.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
+        "arn":{
+          "shape":"FlowAliasArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the alias.</p>"
         },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the alias was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
@@ -3053,22 +3188,13 @@
     "CreateFlowRequest":{
       "type":"structure",
       "required":[
-        "executionRoleArn",
-        "name"
+        "name",
+        "executionRoleArn"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to encrypt the flow.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>A definition of the nodes and connections between nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>A name for the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -3078,9 +3204,18 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create and manage a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>A name for the flow.</p>"
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to encrypt the flow.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>A definition of the nodes and connections between nodes in the flow.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagsMap",
@@ -3091,31 +3226,19 @@
     "CreateFlowResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
+        "name",
         "executionRoleArn",
         "id",
-        "name",
+        "arn",
         "status",
+        "createdAt",
         "updatedAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that you encrypted the flow with.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>A definition of the nodes and connections between nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -3125,18 +3248,26 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that you encrypted the flow with.</p>"
+        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the flow.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow. When you submit this request, the status will be <code>NotPrepared</code>. If creation fails, the status becomes <code>Failed</code>.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the flow was last updated.</p>"
@@ -3144,6 +3275,10 @@
         "version":{
           "shape":"DraftVersion",
           "documentation":"<p>The version of the flow. When you create a flow, the version created is the <code>DRAFT</code> version.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>A definition of the nodes and connections between nodes in the flow.</p>"
         }
       }
     },
@@ -3151,50 +3286,38 @@
       "type":"structure",
       "required":["flowIdentifier"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"FlowDescription",
-          "documentation":"<p>A description of the version of the flow.</p>"
-        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow that you want to create a version of.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
+        },
+        "description":{
+          "shape":"FlowDescription",
+          "documentation":"<p>A description of the version of the flow.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "CreateFlowVersionResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
+        "name",
         "executionRoleArn",
         "id",
-        "name",
+        "arn",
         "status",
+        "createdAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The KMS key that the flow is encrypted with.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>A definition of the nodes and connections in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the version.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -3204,30 +3327,42 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The KMS key that the flow is encrypted with.</p>"
+        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the version.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "version":{
           "shape":"NumericalVersion",
           "documentation":"<p>The version of the flow that was created. Versions are numbered incrementally, starting from 1.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>A definition of the nodes and connections in the flow.</p>"
         }
       }
     },
     "CreateKnowledgeBaseRequest":{
       "type":"structure",
       "required":[
-        "knowledgeBaseConfiguration",
         "name",
-        "roleArn"
+        "roleArn",
+        "knowledgeBaseConfiguration"
       ],
       "members":{
         "clientToken":{
@@ -3235,22 +3370,22 @@
           "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
           "idempotencyToken":true
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>A description of the knowledge base.</p>"
-        },
-        "knowledgeBaseConfiguration":{
-          "shape":"KnowledgeBaseConfiguration",
-          "documentation":"<p>Contains details about the embeddings model used for the knowledge base.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>A name for the knowledge base.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the knowledge base.</p>"
+        },
         "roleArn":{
           "shape":"KnowledgeBaseRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the knowledge base.</p>"
         },
+        "knowledgeBaseConfiguration":{
+          "shape":"KnowledgeBaseConfiguration",
+          "documentation":"<p>Contains details about the embeddings model used for the knowledge base.</p>"
+        },
         "storageConfiguration":{
           "shape":"StorageConfiguration",
           "documentation":"<p>Contains details about the configuration of the vector database used for the knowledge base.</p>"
@@ -3275,10 +3410,13 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>A name for the prompt.</p>"
+        },
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>A description for the prompt.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
@@ -3288,42 +3426,39 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for the prompt. This value must match the <code>name</code> field in the relevant <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptVariant.html\">PromptVariant</a> object.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>A description for the prompt.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>A name for the prompt.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Any tags that you want to attach to the prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tagging.html\">Tagging resources in Amazon Bedrock</a>.</p>"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         }
       }
     },
     "CreatePromptResponse":{
       "type":"structure",
       "required":[
+        "name",
+        "id",
         "arn",
+        "version",
         "createdAt",
-        "id",
-        "name",
-        "updatedAt",
-        "version"
+        "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"PromptArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt.</p>"
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>The name of the prompt.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was created.</p>"
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>The description of the prompt.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
@@ -3333,29 +3468,29 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for your prompt.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>The description of the prompt.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
         "id":{
           "shape":"PromptId",
           "documentation":"<p>The unique identifier of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>The name of the prompt.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was last updated.</p>"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
+        "arn":{
+          "shape":"PromptArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt.</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>The version of the prompt. When you create a prompt, the version created is the <code>DRAFT</code> version.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was last updated.</p>"
         }
       }
     },
@@ -3363,21 +3498,21 @@
       "type":"structure",
       "required":["promptIdentifier"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>A description for the version of the prompt.</p>"
-        },
         "promptIdentifier":{
           "shape":"PromptIdentifier",
           "documentation":"<p>The unique identifier of the prompt that you want to create a version of.</p>",
           "location":"uri",
           "locationName":"promptIdentifier"
         },
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>A description for the version of the prompt.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Any tags that you want to attach to the version of the prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tagging.html\">Tagging resources in Amazon Bedrock</a>.</p>"
@@ -3387,21 +3522,21 @@
     "CreatePromptVersionResponse":{
       "type":"structure",
       "required":[
+        "name",
+        "id",
         "arn",
+        "version",
         "createdAt",
-        "id",
-        "name",
-        "updatedAt",
-        "version"
+        "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"PromptArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the version of the prompt.</p>"
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>The name of the prompt.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was created.</p>"
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>A description for the version.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
@@ -3411,29 +3546,29 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for the prompt. This value must match the <code>name</code> field in the relevant <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptVariant.html\">PromptVariant</a> object.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>A description for the version.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
         "id":{
           "shape":"PromptId",
           "documentation":"<p>The unique identifier of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>The name of the prompt.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was last updated.</p>"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
+        "arn":{
+          "shape":"PromptArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the version of the prompt.</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>The version of the prompt that was created. Versions are numbered incrementally, starting from 1.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was last updated.</p>"
         }
       }
     },
@@ -3479,17 +3614,17 @@
           "shape":"CustomDocumentIdentifier",
           "documentation":"<p>A unique identifier for the document.</p>"
         },
-        "inlineContent":{
-          "shape":"InlineContent",
-          "documentation":"<p>Contains information about content defined inline to ingest into a knowledge base.</p>"
+        "sourceType":{
+          "shape":"CustomSourceType",
+          "documentation":"<p>The source of the data to ingest.</p>"
         },
         "s3Location":{
           "shape":"CustomS3Location",
           "documentation":"<p>Contains information about the Amazon S3 location of the file from which to ingest data.</p>"
         },
-        "sourceType":{
-          "shape":"CustomSourceType",
-          "documentation":"<p>The source of the data to ingest.</p>"
+        "inlineContent":{
+          "shape":"InlineContent",
+          "documentation":"<p>Contains information about content defined inline to ingest into a knowledge base.</p>"
         }
       },
       "documentation":"<p>Contains information about the content to ingest into a knowledge base connected to a custom data source. Choose a <code>sourceType</code> and include the field that corresponds to it.</p>"
@@ -3528,13 +3663,13 @@
       "type":"structure",
       "required":["uri"],
       "members":{
-        "bucketOwnerAccountId":{
-          "shape":"BucketOwnerAccountId",
-          "documentation":"<p>The identifier of the Amazon Web Services account that owns the S3 bucket containing the content to ingest.</p>"
-        },
         "uri":{
           "shape":"S3ObjectUri",
           "documentation":"<p>The S3 URI of the file containing the content to ingest.</p>"
+        },
+        "bucketOwnerAccountId":{
+          "shape":"BucketOwnerAccountId",
+          "documentation":"<p>The identifier of the Amazon Web Services account that owns the S3 bucket containing the content to ingest.</p>"
         }
       },
       "documentation":"<p>Contains information about the Amazon S3 location of the file containing the content to ingest into a knowledge base connected to a custom data source.</p>"
@@ -3591,62 +3726,62 @@
     "DataSource":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "dataSourceConfiguration",
-        "dataSourceId",
         "knowledgeBaseId",
+        "dataSourceId",
         "name",
         "status",
+        "dataSourceConfiguration",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the data source was created.</p>"
-        },
-        "dataDeletionPolicy":{
-          "shape":"DataDeletionPolicy",
-          "documentation":"<p>The data deletion policy for the data source.</p>"
-        },
-        "dataSourceConfiguration":{
-          "shape":"DataSourceConfiguration",
-          "documentation":"<p>The connection configuration for the data source.</p>"
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base to which the data source belongs.</p>"
         },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source.</p>"
         },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the data source.</p>"
+        },
+        "status":{
+          "shape":"DataSourceStatus",
+          "documentation":"<p>The status of the data source. The following statuses are possible:</p> <ul> <li> <p>Available – The data source has been created and is ready for ingestion into the knowledge base.</p> </li> <li> <p>Deleting – The data source is being deleted.</p> </li> </ul>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the data source.</p>"
         },
-        "failureReasons":{
-          "shape":"FailureReasons",
-          "documentation":"<p>The detailed reasons on the failure to delete a data source.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base to which the data source belongs.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the data source.</p>"
+        "dataSourceConfiguration":{
+          "shape":"DataSourceConfiguration",
+          "documentation":"<p>The connection configuration for the data source.</p>"
         },
         "serverSideEncryptionConfiguration":{
           "shape":"ServerSideEncryptionConfiguration",
           "documentation":"<p>Contains details about the configuration of the server-side encryption.</p>"
         },
-        "status":{
-          "shape":"DataSourceStatus",
-          "documentation":"<p>The status of the data source. The following statuses are possible:</p> <ul> <li> <p>Available – The data source has been created and is ready for ingestion into the knowledge base.</p> </li> <li> <p>Deleting – The data source is being deleted.</p> </li> </ul>"
+        "vectorIngestionConfiguration":{
+          "shape":"VectorIngestionConfiguration",
+          "documentation":"<p>Contains details about how to ingest the documents in the data source.</p>"
+        },
+        "dataDeletionPolicy":{
+          "shape":"DataDeletionPolicy",
+          "documentation":"<p>The data deletion policy for the data source.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the data source was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the data source was last updated.</p>"
         },
-        "vectorIngestionConfiguration":{
-          "shape":"VectorIngestionConfiguration",
-          "documentation":"<p>Contains details about how to ingest the documents in the data source.</p>"
+        "failureReasons":{
+          "shape":"FailureReasons",
+          "documentation":"<p>The detailed reasons on the failure to delete a data source.</p>"
         }
       },
       "documentation":"<p>Contains details about a data source.</p>"
@@ -3655,14 +3790,22 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "confluenceConfiguration":{
-          "shape":"ConfluenceDataSourceConfiguration",
-          "documentation":"<p>The configuration information to connect to Confluence as your data source.</p> <note> <p>Confluence data source connector is in preview release and is subject to change.</p> </note>"
+        "type":{
+          "shape":"DataSourceType",
+          "documentation":"<p>The type of data source.</p>"
         },
         "s3Configuration":{
           "shape":"S3DataSourceConfiguration",
           "documentation":"<p>The configuration information to connect to Amazon S3 as your data source.</p>"
         },
+        "webConfiguration":{
+          "shape":"WebDataSourceConfiguration",
+          "documentation":"<p>The configuration of web URLs to crawl for your data source. You should be authorized to crawl the URLs.</p> <note> <p>Crawling web URLs as your data source is in preview release and is subject to change.</p> </note>"
+        },
+        "confluenceConfiguration":{
+          "shape":"ConfluenceDataSourceConfiguration",
+          "documentation":"<p>The configuration information to connect to Confluence as your data source.</p> <note> <p>Confluence data source connector is in preview release and is subject to change.</p> </note>"
+        },
         "salesforceConfiguration":{
           "shape":"SalesforceDataSourceConfiguration",
           "documentation":"<p>The configuration information to connect to Salesforce as your data source.</p> <note> <p>Salesforce data source connector is in preview release and is subject to change.</p> </note>"
@@ -3670,14 +3813,6 @@
         "sharePointConfiguration":{
           "shape":"SharePointDataSourceConfiguration",
           "documentation":"<p>The configuration information to connect to SharePoint as your data source.</p> <note> <p>SharePoint data source connector is in preview release and is subject to change.</p> </note>"
-        },
-        "type":{
-          "shape":"DataSourceType",
-          "documentation":"<p>The type of data source.</p>"
-        },
-        "webConfiguration":{
-          "shape":"WebDataSourceConfiguration",
-          "documentation":"<p>The configuration of web URLs to crawl for your data source. You should be authorized to crawl the URLs.</p> <note> <p>Crawling web URLs as your data source is in preview release and is subject to change.</p> </note>"
         }
       },
       "documentation":"<p>The connection configuration for the data source.</p>"
@@ -3697,25 +3832,21 @@
     "DataSourceSummary":{
       "type":"structure",
       "required":[
-        "dataSourceId",
         "knowledgeBaseId",
+        "dataSourceId",
         "name",
         "status",
         "updatedAt"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data source.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the data source.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base to which the data source belongs.</p>"
         },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data source.</p>"
+        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the data source.</p>"
@@ -3724,6 +3855,10 @@
           "shape":"DataSourceStatus",
           "documentation":"<p>The status of the data source.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the data source.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the data source was last updated.</p>"
@@ -3750,17 +3885,11 @@
     "DeleteAgentActionGroupRequest":{
       "type":"structure",
       "required":[
-        "actionGroupId",
         "agentId",
-        "agentVersion"
+        "agentVersion",
+        "actionGroupId"
       ],
       "members":{
-        "actionGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the action group to delete.</p>",
-          "location":"uri",
-          "locationName":"actionGroupId"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent that the action group belongs to.</p>",
@@ -3773,6 +3902,12 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
+        "actionGroupId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the action group to delete.</p>",
+          "location":"uri",
+          "locationName":"actionGroupId"
+        },
         "skipResourceInUseCheck":{
           "shape":"Boolean",
           "documentation":"<p>By default, this value is <code>false</code> and deletion is stopped if the resource is in use. If you set it to <code>true</code>, the resource will be deleted even if the resource is in use.</p>",
@@ -3789,32 +3924,36 @@
     "DeleteAgentAliasRequest":{
       "type":"structure",
       "required":[
-        "agentAliasId",
-        "agentId"
+        "agentId",
+        "agentAliasId"
       ],
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The unique identifier of the alias to delete.</p>",
-          "location":"uri",
-          "locationName":"agentAliasId"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent that the alias belongs to.</p>",
           "location":"uri",
           "locationName":"agentId"
+        },
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The unique identifier of the alias to delete.</p>",
+          "location":"uri",
+          "locationName":"agentAliasId"
         }
       }
     },
     "DeleteAgentAliasResponse":{
       "type":"structure",
       "required":[
+        "agentId",
         "agentAliasId",
-        "agentAliasStatus",
-        "agentId"
+        "agentAliasStatus"
       ],
       "members":{
+        "agentId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the agent that the alias belongs to.</p>"
+        },
         "agentAliasId":{
           "shape":"AgentAliasId",
           "documentation":"<p>The unique identifier of the alias that was deleted.</p>"
@@ -3822,10 +3961,6 @@
         "agentAliasStatus":{
           "shape":"AgentAliasStatus",
           "documentation":"<p>The status of the alias.</p>"
-        },
-        "agentId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the agent that the alias belongs to.</p>"
         }
       }
     },
@@ -3895,61 +4030,61 @@
       "type":"structure",
       "required":[
         "agentId",
-        "agentStatus",
-        "agentVersion"
+        "agentVersion",
+        "agentStatus"
       ],
       "members":{
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent that the version belongs to.</p>"
         },
-        "agentStatus":{
-          "shape":"AgentStatus",
-          "documentation":"<p>The status of the agent version.</p>"
-        },
         "agentVersion":{
           "shape":"NumericalVersion",
           "documentation":"<p>The version that was deleted.</p>"
+        },
+        "agentStatus":{
+          "shape":"AgentStatus",
+          "documentation":"<p>The status of the agent version.</p>"
         }
       }
     },
     "DeleteDataSourceRequest":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "dataSourceId"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data source to delete.</p>",
-          "location":"uri",
-          "locationName":"dataSourceId"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base from which to delete the data source.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
+        },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data source to delete.</p>",
+          "location":"uri",
+          "locationName":"dataSourceId"
         }
       }
     },
     "DeleteDataSourceResponse":{
       "type":"structure",
       "required":[
-        "dataSourceId",
         "knowledgeBaseId",
+        "dataSourceId",
         "status"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data source that was deleted.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base to which the data source that was deleted belonged.</p>"
         },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data source that was deleted.</p>"
+        },
         "status":{
           "shape":"DataSourceStatus",
           "documentation":"<p>The status of the data source.</p>"
@@ -3959,21 +4094,21 @@
     "DeleteFlowAliasRequest":{
       "type":"structure",
       "required":[
-        "aliasIdentifier",
-        "flowIdentifier"
+        "flowIdentifier",
+        "aliasIdentifier"
       ],
       "members":{
-        "aliasIdentifier":{
-          "shape":"FlowAliasIdentifier",
-          "documentation":"<p>The unique identifier of the alias to be deleted.</p>",
-          "location":"uri",
-          "locationName":"aliasIdentifier"
-        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow that the alias belongs to.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
+        },
+        "aliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the alias to be deleted.</p>",
+          "location":"uri",
+          "locationName":"aliasIdentifier"
         }
       }
     },
@@ -4069,15 +4204,16 @@
     "DeleteKnowledgeBaseDocumentsRequest":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
-        "documentIdentifiers",
-        "knowledgeBaseId"
+        "documentIdentifiers"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base that is connected to the data source.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
         "dataSourceId":{
           "shape":"Id",
@@ -4085,15 +4221,14 @@
           "location":"uri",
           "locationName":"dataSourceId"
         },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
         "documentIdentifiers":{
           "shape":"DocumentIdentifiers",
           "documentation":"<p>A list of objects, each of which contains information to identify a document to delete.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base that is connected to the data source.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -4259,14 +4394,14 @@
       "type":"structure",
       "required":["dataSourceType"],
       "members":{
-        "custom":{
-          "shape":"CustomContent",
-          "documentation":"<p>Contains information about the content to ingest into a knowledge base connected to a custom data source.</p>"
-        },
         "dataSourceType":{
           "shape":"ContentDataSourceType",
           "documentation":"<p>The type of data source that is connected to the knowledge base to which to ingest this document.</p>"
         },
+        "custom":{
+          "shape":"CustomContent",
+          "documentation":"<p>Contains information about the content to ingest into a knowledge base connected to a custom data source.</p>"
+        },
         "s3":{
           "shape":"S3Content",
           "documentation":"<p>Contains information about the content to ingest into a knowledge base connected to an Amazon S3 data source</p>"
@@ -4278,10 +4413,6 @@
       "type":"structure",
       "required":["dataSourceType"],
       "members":{
-        "custom":{
-          "shape":"CustomDocumentIdentifier",
-          "documentation":"<p>Contains information that identifies the document in a custom data source.</p>"
-        },
         "dataSourceType":{
           "shape":"ContentDataSourceType",
           "documentation":"<p>The type of data source connected to the knowledge base that contains the document.</p>"
@@ -4289,6 +4420,10 @@
         "s3":{
           "shape":"S3Location",
           "documentation":"<p>Contains information that identifies the document in an S3 data source.</p>"
+        },
+        "custom":{
+          "shape":"CustomDocumentIdentifier",
+          "documentation":"<p>Contains information that identifies the document in a custom data source.</p>"
         }
       },
       "documentation":"<p>Contains information that identifies the document.</p>"
@@ -4303,6 +4438,10 @@
       "type":"structure",
       "required":["type"],
       "members":{
+        "type":{
+          "shape":"MetadataSourceType",
+          "documentation":"<p>The type of the source source from which to add metadata.</p>"
+        },
         "inlineAttributes":{
           "shape":"DocumentMetadataInlineAttributesList",
           "documentation":"<p>An array of objects, each of which defines a metadata attribute to associate with the content to ingest. You define the attributes inline.</p>"
@@ -4310,10 +4449,6 @@
         "s3Location":{
           "shape":"CustomS3Location",
           "documentation":"<p>The Amazon S3 location of the file containing metadata to associate with the content to ingest.</p>"
-        },
-        "type":{
-          "shape":"MetadataSourceType",
-          "documentation":"<p>The type of the source source from which to add metadata.</p>"
         }
       },
       "documentation":"<p>Contains information about the metadata associate with the content to ingest into a knowledge base. Choose a <code>type</code> and include the field that corresponds to it.</p>"
@@ -4345,22 +4480,22 @@
       "type":"string",
       "max":5,
       "min":5,
-      "pattern":"^DRAFT$"
+      "pattern":"DRAFT"
     },
     "DuplicateConditionExpressionFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "expression",
-        "node"
+        "node",
+        "expression"
       ],
       "members":{
-        "expression":{
-          "shape":"FlowConditionExpression",
-          "documentation":"<p>The duplicated condition expression.</p>"
-        },
         "node":{
           "shape":"FlowNodeName",
           "documentation":"<p>The name of the node containing the duplicate condition expressions.</p>"
+        },
+        "expression":{
+          "shape":"FlowConditionExpression",
+          "documentation":"<p>The duplicated condition expression.</p>"
         }
       },
       "documentation":"<p>Details about duplicate condition expressions found in a condition node.</p>"
@@ -4407,6 +4542,21 @@
       "max":1,
       "min":1
     },
+    "EnrichmentStrategyConfiguration":{
+      "type":"structure",
+      "required":["method"],
+      "members":{
+        "method":{
+          "shape":"EnrichmentStrategyMethod",
+          "documentation":"<p>The method used for the context enrichment strategy.</p>"
+        }
+      },
+      "documentation":"<p>The strategy used for performing context enrichment.</p>"
+    },
+    "EnrichmentStrategyMethod":{
+      "type":"string",
+      "enum":["CHUNK_ENTITY_EXTRACTION"]
+    },
     "ErrorMessage":{
       "type":"string",
       "max":2048,
@@ -4423,11 +4573,34 @@
       "max":2048,
       "min":0
     },
+    "FieldForReranking":{
+      "type":"structure",
+      "required":["fieldName"],
+      "members":{
+        "fieldName":{
+          "shape":"FieldForRerankingFieldNameString",
+          "documentation":"<p>The name of the metadata field to include or exclude during reranking.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a metadata field to include or exclude during the reranking process.</p>"
+    },
+    "FieldForRerankingFieldNameString":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
     "FieldName":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
+    },
+    "FieldsForReranking":{
+      "type":"list",
+      "member":{"shape":"FieldForReranking"},
+      "max":100,
+      "min":1,
+      "sensitive":true
     },
     "FilterList":{
       "type":"list",
@@ -4477,17 +4650,44 @@
       "max":99,
       "min":1
     },
+    "FlowAgentAliasArn":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"$|^arn:aws(-cn|-us-gov|-eusc|-iso(-[b-f])?)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent-alias/[0-9a-zA-Z]{10}/[0-9a-zA-Z]{10}"
+    },
     "FlowAliasArn":{
       "type":"string",
-      "pattern":"^arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/(TSTALIASID|[0-9a-zA-Z]{10})$"
+      "pattern":"arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/(TSTALIASID|[0-9a-zA-Z]{10})"
+    },
+    "FlowAliasConcurrencyConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ConcurrencyType",
+          "documentation":"<p>The type of concurrency to use for parallel node execution. Specify one of the following options:</p> <ul> <li> <p> <code>Automatic</code> - Amazon Bedrock determines which nodes can be executed in parallel based on the flow definition and its dependencies.</p> </li> <li> <p> <code>Manual</code> - You specify which nodes can be executed in parallel.</p> </li> </ul>"
+        },
+        "maxConcurrency":{
+          "shape":"FlowAliasConcurrencyConfigurationMaxConcurrencyInteger",
+          "documentation":"<p>The maximum number of nodes that can be executed concurrently in the flow.</p>"
+        }
+      },
+      "documentation":"<p>Determines how multiple nodes in a flow can run in parallel. Running nodes concurrently can improve your flow's performance.</p>"
+    },
+    "FlowAliasConcurrencyConfigurationMaxConcurrencyInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
     },
     "FlowAliasId":{
       "type":"string",
-      "pattern":"^(TSTALIASID|[0-9a-zA-Z]{10})$"
+      "pattern":"(TSTALIASID|[0-9a-zA-Z]{10})"
     },
     "FlowAliasIdentifier":{
       "type":"string",
-      "pattern":"^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/[0-9a-zA-Z]{10})|(TSTALIASID|[0-9a-zA-Z]{10})$"
+      "pattern":"(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/[0-9a-zA-Z]{10})|(TSTALIASID|[0-9a-zA-Z]{10})"
     },
     "FlowAliasRoutingConfiguration":{
       "type":"list",
@@ -4514,27 +4714,31 @@
     "FlowAliasSummary":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "flowId",
-        "id",
         "name",
         "routingConfiguration",
+        "flowId",
+        "id",
+        "arn",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowAliasArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the alias.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the alias was created.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the alias.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>A list of configurations about the versions that the alias maps to. Currently, you can only specify one.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed concurrently.</p>"
+        },
         "flowId":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
@@ -4543,13 +4747,13 @@
           "shape":"FlowAliasId",
           "documentation":"<p>The unique identifier of the alias of the flow.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
+        "arn":{
+          "shape":"FlowAliasArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the alias.</p>"
         },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>A list of configurations about the versions that the alias maps to. Currently, you can only specify one.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the alias was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
@@ -4560,19 +4764,19 @@
     },
     "FlowArn":{
       "type":"string",
-      "pattern":"^arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}$"
+      "pattern":"arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}"
     },
     "FlowCondition":{
       "type":"structure",
       "required":["name"],
       "members":{
-        "expression":{
-          "shape":"FlowConditionExpression",
-          "documentation":"<p>Defines the condition. You must refer to at least one of the inputs in the condition. For more information, expand the Condition node section in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-how-it-works.html#flows-nodes\">Node types in prompt flows</a>.</p>"
-        },
         "name":{
           "shape":"FlowConditionName",
           "documentation":"<p>A name for the condition that you can reference.</p>"
+        },
+        "expression":{
+          "shape":"FlowConditionExpression",
+          "documentation":"<p>Defines the condition. You must refer to at least one of the inputs in the condition. For more information, expand the Condition node section in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-how-it-works.html#flows-nodes\">Node types in prompt flows</a>.</p>"
         }
       },
       "documentation":"<p>Defines a condition in the condition node.</p>"
@@ -4585,7 +4789,7 @@
     },
     "FlowConditionName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
     },
     "FlowConditionalConnectionConfiguration":{
       "type":"structure",
@@ -4607,15 +4811,15 @@
     "FlowConnection":{
       "type":"structure",
       "required":[
+        "type",
         "name",
         "source",
-        "target",
-        "type"
+        "target"
       ],
       "members":{
-        "configuration":{
-          "shape":"FlowConnectionConfiguration",
-          "documentation":"<p>The configuration of the connection.</p>"
+        "type":{
+          "shape":"FlowConnectionType",
+          "documentation":"<p>Whether the source node that the connection begins from is a condition node (<code>Conditional</code>) or not (<code>Data</code>).</p>"
         },
         "name":{
           "shape":"FlowConnectionName",
@@ -4629,9 +4833,9 @@
           "shape":"FlowNodeName",
           "documentation":"<p>The node that the connection ends at.</p>"
         },
-        "type":{
-          "shape":"FlowConnectionType",
-          "documentation":"<p>Whether the source node that the connection begins from is a condition node (<code>Conditional</code>) or not (<code>Data</code>).</p>"
+        "configuration":{
+          "shape":"FlowConnectionConfiguration",
+          "documentation":"<p>The configuration of the connection.</p>"
         }
       },
       "documentation":"<p>Contains information about a connection between two nodes in the flow.</p>"
@@ -4639,13 +4843,13 @@
     "FlowConnectionConfiguration":{
       "type":"structure",
       "members":{
-        "conditional":{
-          "shape":"FlowConditionalConnectionConfiguration",
-          "documentation":"<p>The configuration of a connection originating from a Condition node.</p>"
-        },
         "data":{
           "shape":"FlowDataConnectionConfiguration",
           "documentation":"<p>The configuration of a connection originating from a node that isn't a Condition node.</p>"
+        },
+        "conditional":{
+          "shape":"FlowConditionalConnectionConfiguration",
+          "documentation":"<p>The configuration of a connection originating from a Condition node.</p>"
         }
       },
       "documentation":"<p>The configuration of the connection.</p>",
@@ -4653,7 +4857,7 @@
     },
     "FlowConnectionName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){1,100}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,100}"
     },
     "FlowConnectionType":{
       "type":"string",
@@ -4689,13 +4893,13 @@
     "FlowDefinition":{
       "type":"structure",
       "members":{
-        "connections":{
-          "shape":"FlowConnections",
-          "documentation":"<p>An array of connection definitions in the flow.</p>"
-        },
         "nodes":{
           "shape":"FlowNodes",
           "documentation":"<p>An array of node definitions in the flow.</p>"
+        },
+        "connections":{
+          "shape":"FlowConnections",
+          "documentation":"<p>An array of connection definitions in the flow.</p>"
         }
       },
       "documentation":"<p>The definition of the nodes and connections between nodes in the flow.</p>",
@@ -4710,19 +4914,42 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/(service-role/)?.+$"
+      "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/(service-role/)?.+"
     },
     "FlowId":{
       "type":"string",
-      "pattern":"^[0-9a-zA-Z]{10}$"
+      "pattern":"[0-9a-zA-Z]{10}"
     },
     "FlowIdentifier":{
       "type":"string",
-      "pattern":"^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10})|([0-9a-zA-Z]{10})$"
+      "pattern":"(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10})|([0-9a-zA-Z]{10})"
+    },
+    "FlowKnowledgeBaseId":{
+      "type":"string",
+      "max":10,
+      "min":0,
+      "pattern":"$|^[0-9a-zA-Z]+"
+    },
+    "FlowLambdaArn":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"$|^arn:aws(-cn|-us-gov|-eusc|-iso(-[b-f])?)?:lambda:([a-z]{2,}-){2,}\\d:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
+    },
+    "FlowLexBotAliasArn":{
+      "type":"string",
+      "max":78,
+      "min":0,
+      "pattern":"$|^arn:aws(-cn|-us-gov|-eusc|-iso(-[b-f])?)?:lex:([a-z]{2,}-){2,}\\d:\\d{12}:bot-alias/[0-9a-zA-Z]+/[0-9a-zA-Z]+"
+    },
+    "FlowLexBotLocaleId":{
+      "type":"string",
+      "max":10,
+      "min":0
     },
     "FlowName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "FlowNode":{
       "type":"structure",
@@ -4731,6 +4958,14 @@
         "type"
       ],
       "members":{
+        "name":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>A name for the node.</p>"
+        },
+        "type":{
+          "shape":"FlowNodeType",
+          "documentation":"<p>The type of node. This value must match the name of the key that you provide in the configuration you provide in the <code>FlowNodeConfiguration</code> field.</p>"
+        },
         "configuration":{
           "shape":"FlowNodeConfiguration",
           "documentation":"<p>Contains configurations for the node.</p>"
@@ -4739,17 +4974,9 @@
           "shape":"FlowNodeInputs",
           "documentation":"<p>An array of objects, each of which contains information about an input into the node.</p>"
         },
-        "name":{
-          "shape":"FlowNodeName",
-          "documentation":"<p>A name for the node.</p>"
-        },
         "outputs":{
           "shape":"FlowNodeOutputs",
           "documentation":"<p>A list of objects, each of which contains information about an output from the node.</p>"
-        },
-        "type":{
-          "shape":"FlowNodeType",
-          "documentation":"<p>The type of node. This value must match the name of the key that you provide in the configuration you provide in the <code>FlowNodeConfiguration</code> field.</p>"
         }
       },
       "documentation":"<p>Contains configurations about a node in the flow.</p>"
@@ -4757,56 +4984,72 @@
     "FlowNodeConfiguration":{
       "type":"structure",
       "members":{
-        "agent":{
-          "shape":"AgentFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for an agent node in your flow. Invokes an alias of an agent and returns the response.</p>"
-        },
-        "collector":{
-          "shape":"CollectorFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for a collector node in your flow. Collects an iteration of inputs and consolidates them into an array of outputs.</p>"
-        },
-        "condition":{
-          "shape":"ConditionFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for a Condition node in your flow. Defines conditions that lead to different branches of the flow.</p>"
-        },
         "input":{
           "shape":"InputFlowNodeConfiguration",
           "documentation":"<p>Contains configurations for an input flow node in your flow. The first node in the flow. <code>inputs</code> can't be specified for this node.</p>"
         },
-        "iterator":{
-          "shape":"IteratorFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for an iterator node in your flow. Takes an input that is an array and iteratively sends each item of the array as an output to the following node. The size of the array is also returned in the output.</p> <p>The output flow node at the end of the flow iteration will return a response for each member of the array. To return only one response, you can include a collector node downstream from the iterator node.</p>"
+        "output":{
+          "shape":"OutputFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for an output flow node in your flow. The last node in the flow. <code>outputs</code> can't be specified for this node.</p>"
         },
         "knowledgeBase":{
           "shape":"KnowledgeBaseFlowNodeConfiguration",
           "documentation":"<p>Contains configurations for a knowledge base node in your flow. Queries a knowledge base and returns the retrieved results or generated response.</p>"
         },
-        "lambdaFunction":{
-          "shape":"LambdaFunctionFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for a Lambda function node in your flow. Invokes an Lambda function.</p>"
+        "condition":{
+          "shape":"ConditionFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for a condition node in your flow. Defines conditions that lead to different branches of the flow.</p>"
         },
         "lex":{
           "shape":"LexFlowNodeConfiguration",
           "documentation":"<p>Contains configurations for a Lex node in your flow. Invokes an Amazon Lex bot to identify the intent of the input and return the intent as the output.</p>"
         },
-        "output":{
-          "shape":"OutputFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for an output flow node in your flow. The last node in the flow. <code>outputs</code> can't be specified for this node.</p>"
-        },
         "prompt":{
           "shape":"PromptFlowNodeConfiguration",
           "documentation":"<p>Contains configurations for a prompt node in your flow. Runs a prompt and generates the model response as the output. You can use a prompt from Prompt management or you can configure one in this node.</p>"
         },
-        "retrieval":{
-          "shape":"RetrievalFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for a Retrieval node in your flow. Retrieves data from an Amazon S3 location and returns it as the output.</p>"
+        "lambdaFunction":{
+          "shape":"LambdaFunctionFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for a Lambda function node in your flow. Invokes an Lambda function.</p>"
         },
         "storage":{
           "shape":"StorageFlowNodeConfiguration",
-          "documentation":"<p>Contains configurations for a Storage node in your flow. Stores an input in an Amazon S3 location.</p>"
+          "documentation":"<p>Contains configurations for a storage node in your flow. Stores an input in an Amazon S3 location.</p>"
+        },
+        "agent":{
+          "shape":"AgentFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for an agent node in your flow. Invokes an alias of an agent and returns the response.</p>"
+        },
+        "retrieval":{
+          "shape":"RetrievalFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for a retrieval node in your flow. Retrieves data from an Amazon S3 location and returns it as the output.</p>"
+        },
+        "iterator":{
+          "shape":"IteratorFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for an iterator node in your flow. Takes an input that is an array and iteratively sends each item of the array as an output to the following node. The size of the array is also returned in the output.</p> <p>The output flow node at the end of the flow iteration will return a response for each member of the array. To return only one response, you can include a collector node downstream from the iterator node.</p>"
+        },
+        "collector":{
+          "shape":"CollectorFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for a collector node in your flow. Collects an iteration of inputs and consolidates them into an array of outputs.</p>"
+        },
+        "inlineCode":{
+          "shape":"InlineCodeFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for an inline code node in your flow. Inline code nodes let you write and execute code directly within your flow, enabling data transformations, custom logic, and integrations without needing an external Lambda function.</p>"
+        },
+        "loop":{
+          "shape":"LoopFlowNodeConfiguration",
+          "documentation":"<p>Contains configurations for a DoWhile loop in your flow.</p>"
+        },
+        "loopInput":{
+          "shape":"LoopInputFlowNodeConfiguration",
+          "documentation":"<p>Contains input node configurations for a DoWhile loop in your flow.</p>"
+        },
+        "loopController":{
+          "shape":"LoopControllerFlowNodeConfiguration",
+          "documentation":"<p>Contains controller node configurations for a DoWhile loop in your flow.</p>"
         }
       },
-      "documentation":"<p>Contains configurations for a node in your flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>",
+      "documentation":"<p>Contains configurations for a node in your flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>",
       "union":true
     },
     "FlowNodeIODataType":{
@@ -4822,25 +5065,37 @@
     "FlowNodeInput":{
       "type":"structure",
       "required":[
-        "expression",
         "name",
-        "type"
+        "type",
+        "expression"
       ],
       "members":{
-        "expression":{
-          "shape":"FlowNodeInputExpression",
-          "documentation":"<p>An expression that formats the input for the node. For an explanation of how to create expressions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-expressions.html\">Expressions in Prompt flows in Amazon Bedrock</a>.</p>"
-        },
         "name":{
           "shape":"FlowNodeInputName",
-          "documentation":"<p>A name for the input that you can reference.</p>"
+          "documentation":"<p>Specifies a name for the input that you can reference.</p>"
         },
         "type":{
           "shape":"FlowNodeIODataType",
-          "documentation":"<p>The data type of the input. If the input doesn't match this type at runtime, a validation error will be thrown.</p>"
+          "documentation":"<p>Specifies the data type of the input. If the input doesn't match this type at runtime, a validation error will be thrown.</p>"
+        },
+        "expression":{
+          "shape":"FlowNodeInputExpression",
+          "documentation":"<p>An expression that formats the input for the node. For an explanation of how to create expressions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-expressions.html\">Expressions in Prompt flows in Amazon Bedrock</a>.</p>"
+        },
+        "category":{
+          "shape":"FlowNodeInputCategory",
+          "documentation":"<p>Specifies how input data flows between iterations in a DoWhile loop.</p> <ul> <li> <p> <code>LoopCondition</code> - Controls whether the loop continues by evaluating condition expressions against the input data. Use this category to define the condition that determines if the loop should continue. </p> </li> <li> <p> <code>ReturnValueToLoopStart</code> - Defines data to pass back to the start of the loop's next iteration. Use this category for variables that you want to update for each loop iteration.</p> </li> <li> <p> <code>ExitLoop</code> - Defines the value that's available once the loop ends. Use this category to expose loop results to nodes outside the loop.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>Contains configurations for an input to a node.</p>"
+      "documentation":"<p>Contains configurations for an input in an Amazon Bedrock Flows node.</p>"
+    },
+    "FlowNodeInputCategory":{
+      "type":"string",
+      "enum":[
+        "LoopCondition",
+        "ReturnValueToLoopStart",
+        "ExitLoop"
+      ]
     },
     "FlowNodeInputExpression":{
       "type":"string",
@@ -4850,17 +5105,17 @@
     },
     "FlowNodeInputName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
     },
     "FlowNodeInputs":{
       "type":"list",
       "member":{"shape":"FlowNodeInput"},
-      "max":5,
+      "max":20,
       "min":0
     },
     "FlowNodeName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
     },
     "FlowNodeOutput":{
       "type":"structure",
@@ -4882,7 +5137,7 @@
     },
     "FlowNodeOutputName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
     },
     "FlowNodeOutputs":{
       "type":"list",
@@ -4904,15 +5159,35 @@
         "Agent",
         "Retrieval",
         "Iterator",
-        "Collector"
+        "Collector",
+        "InlineCode",
+        "Loop",
+        "LoopInput",
+        "LoopController"
       ]
     },
     "FlowNodes":{
       "type":"list",
       "member":{"shape":"FlowNode"},
-      "max":20,
+      "max":40,
       "min":0
     },
+    "FlowPromptArn":{
+      "type":"string",
+      "pattern":"$|^(arn:aws(-cn|-us-gov|-eusc|-iso(-[b-f])?)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?)"
+    },
+    "FlowPromptModelIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"$|^(arn:aws(-cn|-us-gov|-eusc|-iso(-[b-f])?)?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
+    },
+    "FlowS3BucketName":{
+      "type":"string",
+      "max":63,
+      "min":0,
+      "pattern":"$|^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
+    },
     "FlowStatus":{
       "type":"string",
       "enum":[
@@ -4931,22 +5206,18 @@
     "FlowSummary":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "id",
         "name",
+        "id",
+        "arn",
         "status",
+        "createdAt",
         "updatedAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -4956,14 +5227,18 @@
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the flow.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow. The following statuses are possible:</p> <ul> <li> <p>NotPrepared – The flow has been created or updated, but hasn't been prepared. If you just created the flow, you can't test it. If you updated the flow, the <code>DRAFT</code> version won't contain the latest changes for testing. Send a <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PrepareFlow.html\">PrepareFlow</a> request to package the latest changes into the <code>DRAFT</code> version.</p> </li> <li> <p>Preparing – The flow is being prepared so that the <code>DRAFT</code> version contains the latest changes for testing.</p> </li> <li> <p>Prepared – The flow is prepared and the <code>DRAFT</code> version contains the latest changes for testing.</p> </li> <li> <p>Failed – The last API operation that you invoked on the flow failed. Send a <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetFlow.html\">GetFlow</a> request and check the error message in the <code>validations</code> field.</p> </li> </ul>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the flow was last updated.</p>"
@@ -4982,10 +5257,6 @@
         "severity"
       ],
       "members":{
-        "details":{
-          "shape":"FlowValidationDetails",
-          "documentation":"<p>Specific details about the validation issue encountered in the flow.</p>"
-        },
         "message":{
           "shape":"NonBlankString",
           "documentation":"<p>A message describing the validation error.</p>"
@@ -4994,6 +5265,10 @@
           "shape":"FlowValidationSeverity",
           "documentation":"<p>The severity of the issue described in the message.</p>"
         },
+        "details":{
+          "shape":"FlowValidationDetails",
+          "documentation":"<p>Specific details about the validation issue encountered in the flow.</p>"
+        },
         "type":{
           "shape":"FlowValidationType",
           "documentation":"<p>The type of validation issue encountered in the flow.</p>"
@@ -5008,17 +5283,37 @@
           "shape":"CyclicConnectionFlowValidationDetails",
           "documentation":"<p>Details about a cyclic connection in the flow.</p>"
         },
+        "duplicateConnections":{
+          "shape":"DuplicateConnectionsFlowValidationDetails",
+          "documentation":"<p>Details about duplicate connections between nodes.</p>"
+        },
         "duplicateConditionExpression":{
           "shape":"DuplicateConditionExpressionFlowValidationDetails",
           "documentation":"<p>Details about duplicate condition expressions in a node.</p>"
         },
-        "duplicateConnections":{
-          "shape":"DuplicateConnectionsFlowValidationDetails",
-          "documentation":"<p>Details about duplicate connections between nodes.</p>"
+        "unreachableNode":{
+          "shape":"UnreachableNodeFlowValidationDetails",
+          "documentation":"<p>Details about an unreachable node in the flow.</p>"
         },
-        "incompatibleConnectionDataType":{
-          "shape":"IncompatibleConnectionDataTypeFlowValidationDetails",
-          "documentation":"<p>Details about incompatible data types in a connection.</p>"
+        "unknownConnectionSource":{
+          "shape":"UnknownConnectionSourceFlowValidationDetails",
+          "documentation":"<p>Details about an unknown source node for a connection.</p>"
+        },
+        "unknownConnectionSourceOutput":{
+          "shape":"UnknownConnectionSourceOutputFlowValidationDetails",
+          "documentation":"<p>Details about an unknown source output for a connection.</p>"
+        },
+        "unknownConnectionTarget":{
+          "shape":"UnknownConnectionTargetFlowValidationDetails",
+          "documentation":"<p>Details about an unknown target node for a connection.</p>"
+        },
+        "unknownConnectionTargetInput":{
+          "shape":"UnknownConnectionTargetInputFlowValidationDetails",
+          "documentation":"<p>Details about an unknown target input for a connection.</p>"
+        },
+        "unknownConnectionCondition":{
+          "shape":"UnknownConnectionConditionFlowValidationDetails",
+          "documentation":"<p>Details about an unknown condition for a connection.</p>"
         },
         "malformedConditionExpression":{
           "shape":"MalformedConditionExpressionFlowValidationDetails",
@@ -5036,6 +5331,10 @@
           "shape":"MismatchedNodeOutputTypeFlowValidationDetails",
           "documentation":"<p>Details about mismatched output data types in a node.</p>"
         },
+        "incompatibleConnectionDataType":{
+          "shape":"IncompatibleConnectionDataTypeFlowValidationDetails",
+          "documentation":"<p>Details about incompatible data types in a connection.</p>"
+        },
         "missingConnectionConfiguration":{
           "shape":"MissingConnectionConfigurationFlowValidationDetails",
           "documentation":"<p>Details about missing configuration for a connection.</p>"
@@ -5072,30 +5371,6 @@
           "shape":"UnfulfilledNodeInputFlowValidationDetails",
           "documentation":"<p>Details about an unfulfilled node input with no valid connections.</p>"
         },
-        "unknownConnectionCondition":{
-          "shape":"UnknownConnectionConditionFlowValidationDetails",
-          "documentation":"<p>Details about an unknown condition for a connection.</p>"
-        },
-        "unknownConnectionSource":{
-          "shape":"UnknownConnectionSourceFlowValidationDetails",
-          "documentation":"<p>Details about an unknown source node for a connection.</p>"
-        },
-        "unknownConnectionSourceOutput":{
-          "shape":"UnknownConnectionSourceOutputFlowValidationDetails",
-          "documentation":"<p>Details about an unknown source output for a connection.</p>"
-        },
-        "unknownConnectionTarget":{
-          "shape":"UnknownConnectionTargetFlowValidationDetails",
-          "documentation":"<p>Details about an unknown target node for a connection.</p>"
-        },
-        "unknownConnectionTargetInput":{
-          "shape":"UnknownConnectionTargetInputFlowValidationDetails",
-          "documentation":"<p>Details about an unknown target input for a connection.</p>"
-        },
-        "unreachableNode":{
-          "shape":"UnreachableNodeFlowValidationDetails",
-          "documentation":"<p>Details about an unreachable node in the flow.</p>"
-        },
         "unsatisfiedConnectionConditions":{
           "shape":"UnsatisfiedConnectionConditionsFlowValidationDetails",
           "documentation":"<p>Details about unsatisfied conditions for a connection.</p>"
@@ -5103,6 +5378,38 @@
         "unspecified":{
           "shape":"UnspecifiedFlowValidationDetails",
           "documentation":"<p>Details about an unspecified validation.</p>"
+        },
+        "unknownNodeInput":{
+          "shape":"UnknownNodeInputFlowValidationDetails",
+          "documentation":"<p>Details about an unknown input for a node.</p>"
+        },
+        "unknownNodeOutput":{
+          "shape":"UnknownNodeOutputFlowValidationDetails",
+          "documentation":"<p>Details about an unknown output for a node.</p>"
+        },
+        "missingLoopInputNode":{
+          "shape":"MissingLoopInputNodeFlowValidationDetails",
+          "documentation":"<p>Details about a flow that's missing a required <code>LoopInput</code> node in a DoWhile loop.</p>"
+        },
+        "missingLoopControllerNode":{
+          "shape":"MissingLoopControllerNodeFlowValidationDetails",
+          "documentation":"<p>Details about a flow that's missing a required <code>LoopController</code> node in a DoWhile loop.</p>"
+        },
+        "multipleLoopInputNodes":{
+          "shape":"MultipleLoopInputNodesFlowValidationDetails",
+          "documentation":"<p>Details about a flow that contains multiple <code>LoopInput</code> nodes in a DoWhile loop.</p>"
+        },
+        "multipleLoopControllerNodes":{
+          "shape":"MultipleLoopControllerNodesFlowValidationDetails",
+          "documentation":"<p>Details about a flow that contains multiple <code>LoopController</code> nodes in a DoWhile loop.</p>"
+        },
+        "loopIncompatibleNodeType":{
+          "shape":"LoopIncompatibleNodeTypeFlowValidationDetails",
+          "documentation":"<p>Details about a flow that includes incompatible node types in a DoWhile loop.</p>"
+        },
+        "invalidLoopBoundary":{
+          "shape":"InvalidLoopBoundaryFlowValidationDetails",
+          "documentation":"<p>Details about a flow that includes connections that violate loop boundary rules.</p>"
         }
       },
       "documentation":"<p>A union type containing various possible validation issues in the flow.</p>",
@@ -5142,7 +5449,15 @@
         "MultipleNodeInputConnections",
         "UnfulfilledNodeInput",
         "UnsatisfiedConnectionConditions",
-        "Unspecified"
+        "Unspecified",
+        "UnknownNodeInput",
+        "UnknownNodeOutput",
+        "MissingLoopInputNode",
+        "MissingLoopControllerNode",
+        "MultipleLoopInputNodes",
+        "MultipleLoopControllerNodes",
+        "LoopIncompatibleNodeType",
+        "InvalidLoopBoundary"
       ]
     },
     "FlowValidations":{
@@ -5160,29 +5475,29 @@
     "FlowVersionSummary":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
         "id",
+        "arn",
         "status",
+        "createdAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow that the version belongs to.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at the version was created.</p>"
-        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow that the version belongs to.</p>"
+        },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at the version was created.</p>"
+        },
         "version":{
           "shape":"NumericalVersion",
           "documentation":"<p>The version of the flow.</p>"
@@ -5194,14 +5509,14 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "description":{
-          "shape":"FunctionDescription",
-          "documentation":"<p>A description of the function and its purpose.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>A name for the function.</p>"
         },
+        "description":{
+          "shape":"FunctionDescription",
+          "documentation":"<p>A description of the function and its purpose.</p>"
+        },
         "parameters":{
           "shape":"ParameterMap",
           "documentation":"<p>The parameters that the agent elicits from the user to fulfill the function.</p>"
@@ -5236,17 +5551,11 @@
     "GetAgentActionGroupRequest":{
       "type":"structure",
       "required":[
-        "actionGroupId",
         "agentId",
-        "agentVersion"
+        "agentVersion",
+        "actionGroupId"
       ],
       "members":{
-        "actionGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the action group for which to get information.</p>",
-          "location":"uri",
-          "locationName":"actionGroupId"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent that the action group belongs to.</p>",
@@ -5258,6 +5567,12 @@
           "documentation":"<p>The version of the agent that the action group belongs to.</p>",
           "location":"uri",
           "locationName":"agentVersion"
+        },
+        "actionGroupId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the action group for which to get information.</p>",
+          "location":"uri",
+          "locationName":"actionGroupId"
         }
       }
     },
@@ -5274,21 +5589,21 @@
     "GetAgentAliasRequest":{
       "type":"structure",
       "required":[
-        "agentAliasId",
-        "agentId"
+        "agentId",
+        "agentAliasId"
       ],
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The unique identifier of the alias for which to get information.</p>",
-          "location":"uri",
-          "locationName":"agentAliasId"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent to which the alias to get information belongs.</p>",
           "location":"uri",
           "locationName":"agentId"
+        },
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The unique identifier of the alias for which to get information.</p>",
+          "location":"uri",
+          "locationName":"agentAliasId"
         }
       }
     },
@@ -5434,21 +5749,21 @@
     "GetDataSourceRequest":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "dataSourceId"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data source.</p>",
-          "location":"uri",
-          "locationName":"dataSourceId"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base for the data source.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
+        },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data source.</p>",
+          "location":"uri",
+          "locationName":"dataSourceId"
         }
       }
     },
@@ -5465,48 +5780,52 @@
     "GetFlowAliasRequest":{
       "type":"structure",
       "required":[
-        "aliasIdentifier",
-        "flowIdentifier"
+        "flowIdentifier",
+        "aliasIdentifier"
       ],
       "members":{
-        "aliasIdentifier":{
-          "shape":"FlowAliasIdentifier",
-          "documentation":"<p>The unique identifier of the alias for which to retrieve information.</p>",
-          "location":"uri",
-          "locationName":"aliasIdentifier"
-        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow that the alias belongs to.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
+        },
+        "aliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the alias for which to retrieve information.</p>",
+          "location":"uri",
+          "locationName":"aliasIdentifier"
         }
       }
     },
     "GetFlowAliasResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "flowId",
-        "id",
         "name",
         "routingConfiguration",
+        "flowId",
+        "id",
+        "arn",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowAliasArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the flow.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed in parallel.</p>"
+        },
         "flowId":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow that the alias belongs to.</p>"
@@ -5515,13 +5834,13 @@
           "shape":"FlowAliasId",
           "documentation":"<p>The unique identifier of the alias of the flow.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
+        "arn":{
+          "shape":"FlowAliasArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
@@ -5544,31 +5863,19 @@
     "GetFlowResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
+        "name",
         "executionRoleArn",
         "id",
-        "name",
+        "arn",
         "status",
+        "createdAt",
         "updatedAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the flow is encrypted with.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>The definition of the nodes and connections between the nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -5578,29 +5885,41 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service row for flows</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the flow is encrypted with.</p>"
+        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the flow.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow. The following statuses are possible:</p> <ul> <li> <p>NotPrepared – The flow has been created or updated, but hasn't been prepared. If you just created the flow, you can't test it. If you updated the flow, the <code>DRAFT</code> version won't contain the latest changes for testing. Send a <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PrepareFlow.html\">PrepareFlow</a> request to package the latest changes into the <code>DRAFT</code> version.</p> </li> <li> <p>Preparing – The flow is being prepared so that the <code>DRAFT</code> version contains the latest changes for testing.</p> </li> <li> <p>Prepared – The flow is prepared and the <code>DRAFT</code> version contains the latest changes for testing.</p> </li> <li> <p>Failed – The last API operation that you invoked on the flow failed. Send a <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetFlow.html\">GetFlow</a> request and check the error message in the <code>validations</code> field.</p> </li> </ul>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the flow was last updated.</p>"
         },
-        "validations":{
-          "shape":"FlowValidations",
-          "documentation":"<p>A list of validation error messages related to the last failed operation on the flow.</p>"
-        },
         "version":{
           "shape":"DraftVersion",
           "documentation":"<p>The version of the flow for which information was retrieved.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>The definition of the nodes and connections between the nodes in the flow.</p>"
+        },
+        "validations":{
+          "shape":"FlowValidations",
+          "documentation":"<p>A list of validation error messages related to the last failed operation on the flow.</p>"
         }
       }
     },
@@ -5628,30 +5947,18 @@
     "GetFlowVersionResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
+        "name",
         "executionRoleArn",
         "id",
-        "name",
+        "arn",
         "status",
+        "createdAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the version of the flow is encrypted with.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>The definition of the nodes and connections between nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the version.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -5661,32 +5968,50 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the version of the flow is encrypted with.</p>"
+        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the version.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "version":{
           "shape":"NumericalVersion",
           "documentation":"<p>The version of the flow for which information was retrieved.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>The definition of the nodes and connections between nodes in the flow.</p>"
         }
       }
     },
     "GetIngestionJobRequest":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
-        "ingestionJobId",
-        "knowledgeBaseId"
+        "ingestionJobId"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job you want to get information on.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source for the data ingestion job you want to get information on.</p>",
@@ -5698,12 +6023,6 @@
           "documentation":"<p>The unique identifier of the data ingestion job you want to get information on.</p>",
           "location":"uri",
           "locationName":"ingestionJobId"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job you want to get information on.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -5720,11 +6039,17 @@
     "GetKnowledgeBaseDocumentsRequest":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
-        "documentIdentifiers",
-        "knowledgeBaseId"
+        "documentIdentifiers"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base that is connected to the data source.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source that contains the documents.</p>",
@@ -5734,12 +6059,6 @@
         "documentIdentifiers":{
           "shape":"DocumentIdentifiers",
           "documentation":"<p>A list of objects, each of which contains information to identify a document for which to retrieve information.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base that is connected to the data source.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -5795,21 +6114,21 @@
     "GetPromptResponse":{
       "type":"structure",
       "required":[
+        "name",
+        "id",
         "arn",
+        "version",
         "createdAt",
-        "id",
-        "name",
-        "updatedAt",
-        "version"
+        "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"PromptArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt or the prompt version (if you specified a version in the request).</p>"
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>The name of the prompt.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was created.</p>"
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>The descriptino of the prompt.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
@@ -5819,32 +6138,40 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for the prompt. This value must match the <code>name</code> field in the relevant <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptVariant.html\">PromptVariant</a> object.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>The descriptino of the prompt.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
         "id":{
           "shape":"PromptId",
           "documentation":"<p>The unique identifier of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>The name of the prompt.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was last updated.</p>"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
+        "arn":{
+          "shape":"PromptArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt or the prompt version (if you specified a version in the request).</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>The version of the prompt.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was last updated.</p>"
         }
       }
     },
+    "GraphArn":{
+      "type":"string",
+      "documentation":"<p>ARN for Neptune Analytics graph database</p>",
+      "max":255,
+      "min":1,
+      "pattern":"arn:aws(|-cn|-us-gov):neptune-graph:[a-zA-Z0-9-]*:[0-9]{12}:graph/g-[a-zA-Z0-9]{10}",
+      "sensitive":true
+    },
     "GuardrailConfiguration":{
       "type":"structure",
       "members":{
@@ -5863,11 +6190,11 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))$"
+      "pattern":"(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))"
     },
     "GuardrailVersion":{
       "type":"string",
-      "pattern":"^(([0-9]{1,8})|(DRAFT))$"
+      "pattern":"(([0-9]{1,8})|(DRAFT))"
     },
     "HierarchicalChunkingConfiguration":{
       "type":"structure",
@@ -5917,11 +6244,11 @@
     },
     "HttpsUrl":{
       "type":"string",
-      "pattern":"^https://[A-Za-z0-9][^\\s]*$"
+      "pattern":"https://[A-Za-z0-9][^\\s]*"
     },
     "Id":{
       "type":"string",
-      "pattern":"^[0-9a-zA-Z]{10}$"
+      "pattern":"[0-9a-zA-Z]{10}"
     },
     "IncludeExclude":{
       "type":"string",
@@ -5941,28 +6268,47 @@
       },
       "documentation":"<p>Details about incompatible data types in a connection between nodes.</p>"
     },
+    "IncompatibleLoopNodeType":{
+      "type":"string",
+      "enum":[
+        "Input",
+        "Condition",
+        "Iterator",
+        "Collector"
+      ]
+    },
+    "IndexArn":{
+      "type":"string",
+      "sensitive":true
+    },
+    "IndexName":{
+      "type":"string",
+      "max":63,
+      "min":3,
+      "sensitive":true
+    },
     "InferenceConfiguration":{
       "type":"structure",
       "members":{
-        "maximumLength":{
-          "shape":"MaximumLength",
-          "documentation":"<p>The maximum number of tokens to allow in the generated response.</p>"
-        },
-        "stopSequences":{
-          "shape":"StopSequences",
-          "documentation":"<p>A list of stop sequences. A stop sequence is a sequence of characters that causes the model to stop generating the response.</p>"
-        },
         "temperature":{
           "shape":"Temperature",
           "documentation":"<p>The likelihood of the model selecting higher-probability options while generating a response. A lower value makes the model more likely to choose higher-probability options, while a higher value makes the model more likely to choose lower-probability options.</p>"
         },
+        "topP":{
+          "shape":"TopP",
+          "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>Top P</code> determines the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topP</code> to 0.8, the model only selects the next token from the top 80% of the probability distribution of next tokens.</p>"
+        },
         "topK":{
           "shape":"TopK",
           "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>topK</code> is the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topK</code> to 50, the model selects the next token from among the top 50 most likely choices.</p>"
         },
-        "topP":{
-          "shape":"TopP",
-          "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>Top P</code> determines the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topP</code> to 80, the model only selects the next token from the top 80% of the probability distribution of next tokens.</p>"
+        "maximumLength":{
+          "shape":"MaximumLength",
+          "documentation":"<p>The maximum number of tokens to allow in the generated response.</p>"
+        },
+        "stopSequences":{
+          "shape":"StopSequences",
+          "documentation":"<p>A list of stop sequences. A stop sequence is a sequence of characters that causes the model to stop generating the response.</p>"
         }
       },
       "documentation":"<p>Contains inference parameters to use when the agent invokes a foundation model in the part of the agent sequence defined by the <code>promptType</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p>"
@@ -5970,15 +6316,16 @@
     "IngestKnowledgeBaseDocumentsRequest":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
-        "documents",
-        "knowledgeBaseId"
+        "documents"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base to ingest the documents into.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
         "dataSourceId":{
           "shape":"Id",
@@ -5986,15 +6333,14 @@
           "location":"uri",
           "locationName":"dataSourceId"
         },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
         "documents":{
           "shape":"KnowledgeBaseDocuments",
           "documentation":"<p>A list of objects, each of which contains information about the documents to add.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base to ingest the documents into.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -6010,46 +6356,46 @@
     "IngestionJob":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
         "ingestionJobId",
-        "knowledgeBaseId",
-        "startedAt",
         "status",
+        "startedAt",
         "updatedAt"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge for the data ingestion job.</p>"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source for the data ingestion job.</p>"
         },
+        "ingestionJobId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data ingestion job.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the data ingestion job.</p>"
         },
+        "status":{
+          "shape":"IngestionJobStatus",
+          "documentation":"<p>The status of the data ingestion job.</p>"
+        },
+        "statistics":{
+          "shape":"IngestionJobStatistics",
+          "documentation":"<p>Contains statistics about the data ingestion job.</p>"
+        },
         "failureReasons":{
           "shape":"FailureReasons",
           "documentation":"<p>A list of reasons that the data ingestion job failed.</p>"
         },
-        "ingestionJobId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data ingestion job.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge for the data ingestion job.</p>"
-        },
         "startedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time the data ingestion job started.</p> <p>If you stop a data ingestion job, the <code>startedAt</code> time is the time the job was started before the job was stopped.</p>"
         },
-        "statistics":{
-          "shape":"IngestionJobStatistics",
-          "documentation":"<p>Contains statistics about the data ingestion job.</p>"
-        },
-        "status":{
-          "shape":"IngestionJobStatus",
-          "documentation":"<p>The status of the data ingestion job.</p>"
-        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time the data ingestion job was last updated.</p> <p>If you stop a data ingestion job, the <code>updatedAt</code> time is the time the job was stopped.</p>"
@@ -6092,7 +6438,7 @@
       "type":"string",
       "max":100,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "IngestionJobFilterValues":{
       "type":"list",
@@ -6134,33 +6480,33 @@
     "IngestionJobStatistics":{
       "type":"structure",
       "members":{
-        "numberOfDocumentsDeleted":{
-          "shape":"PrimitiveLong",
-          "documentation":"<p>The number of source documents that were deleted.</p>"
-        },
-        "numberOfDocumentsFailed":{
-          "shape":"PrimitiveLong",
-          "documentation":"<p>The number of source documents that failed to be ingested.</p>"
-        },
         "numberOfDocumentsScanned":{
           "shape":"PrimitiveLong",
           "documentation":"<p>The total number of source documents that were scanned. Includes new, updated, and unchanged documents.</p>"
         },
-        "numberOfMetadataDocumentsModified":{
-          "shape":"PrimitiveLong",
-          "documentation":"<p>The number of metadata files that were updated or deleted.</p>"
-        },
         "numberOfMetadataDocumentsScanned":{
           "shape":"PrimitiveLong",
           "documentation":"<p>The total number of metadata files that were scanned. Includes new, updated, and unchanged files.</p>"
         },
+        "numberOfNewDocumentsIndexed":{
+          "shape":"PrimitiveLong",
+          "documentation":"<p>The number of new source documents in the data source that were successfully indexed.</p>"
+        },
         "numberOfModifiedDocumentsIndexed":{
           "shape":"PrimitiveLong",
           "documentation":"<p>The number of modified source documents in the data source that were successfully indexed.</p>"
         },
-        "numberOfNewDocumentsIndexed":{
+        "numberOfMetadataDocumentsModified":{
           "shape":"PrimitiveLong",
-          "documentation":"<p>The number of new source documents in the data source that were successfully indexed.</p>"
+          "documentation":"<p>The number of metadata files that were updated or deleted.</p>"
+        },
+        "numberOfDocumentsDeleted":{
+          "shape":"PrimitiveLong",
+          "documentation":"<p>The number of source documents that were deleted.</p>"
+        },
+        "numberOfDocumentsFailed":{
+          "shape":"PrimitiveLong",
+          "documentation":"<p>The number of source documents that failed to be ingested.</p>"
         }
       },
       "documentation":"<p>Contains the statistics for the data ingestion job.</p>"
@@ -6183,53 +6529,81 @@
     "IngestionJobSummary":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
         "ingestionJobId",
-        "knowledgeBaseId",
-        "startedAt",
         "status",
+        "startedAt",
         "updatedAt"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job.</p>"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source for the data ingestion job.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the data ingestion job.</p>"
-        },
         "ingestionJobId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data ingestion job.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job.</p>"
-        },
-        "startedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time the data ingestion job started.</p>"
-        },
-        "statistics":{
-          "shape":"IngestionJobStatistics",
-          "documentation":"<p>Contains statistics for the data ingestion job.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the data ingestion job.</p>"
         },
         "status":{
           "shape":"IngestionJobStatus",
           "documentation":"<p>The status of the data ingestion job.</p>"
         },
+        "startedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time the data ingestion job started.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time the data ingestion job was last updated.</p>"
+        },
+        "statistics":{
+          "shape":"IngestionJobStatistics",
+          "documentation":"<p>Contains statistics for the data ingestion job.</p>"
         }
       },
       "documentation":"<p>Contains details about a data ingestion job.</p>"
     },
+    "InlineCode":{
+      "type":"string",
+      "max":5000000,
+      "min":0,
+      "sensitive":true
+    },
+    "InlineCodeFlowNodeConfiguration":{
+      "type":"structure",
+      "required":[
+        "code",
+        "language"
+      ],
+      "members":{
+        "code":{
+          "shape":"InlineCode",
+          "documentation":"<p>The code that's executed in your inline code node. The code can access input data from previous nodes in the flow, perform operations on that data, and produce output that can be used by other nodes in your flow.</p> <p>The code must be valid in the programming <code>language</code> that you specify.</p>"
+        },
+        "language":{
+          "shape":"SupportedLanguages",
+          "documentation":"<p>The programming language used by your inline code node.</p> <p>The code must be valid in the programming <code>language</code> that you specify. Currently, only Python 3 (<code>Python_3</code>) is supported.</p>"
+        }
+      },
+      "documentation":"<p>Contains configurations for an inline code node in your flow. Inline code nodes let you write and execute code directly within your flow, enabling data transformations, custom logic, and integrations without needing an external Lambda function.</p>"
+    },
     "InlineContent":{
       "type":"structure",
       "required":["type"],
       "members":{
+        "type":{
+          "shape":"InlineContentType",
+          "documentation":"<p>The type of inline content to define.</p>"
+        },
         "byteContent":{
           "shape":"ByteContentDoc",
           "documentation":"<p>Contains information about content defined inline in bytes.</p>"
@@ -6237,10 +6611,6 @@
         "textContent":{
           "shape":"TextContentDoc",
           "documentation":"<p>Contains information about content defined inline in text.</p>"
-        },
-        "type":{
-          "shape":"InlineContentType",
-          "documentation":"<p>The type of inline content to define.</p>"
         }
       },
       "documentation":"<p>Contains information about content defined inline to ingest into a data source. Choose a <code>type</code> and include the field that corresponds to it.</p>"
@@ -6285,6 +6655,29 @@
       "exception":true,
       "fault":true
     },
+    "InvalidLoopBoundaryFlowValidationDetails":{
+      "type":"structure",
+      "required":[
+        "connection",
+        "source",
+        "target"
+      ],
+      "members":{
+        "connection":{
+          "shape":"FlowConnectionName",
+          "documentation":"<p>The name of the connection that violates loop boundary rules.</p>"
+        },
+        "source":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The source node of the connection that violates DoWhile loop boundary rules.</p>"
+        },
+        "target":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The target node of the connection that violates DoWhile loop boundary rules.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that contains connections that violate loop boundary rules.</p>"
+    },
     "IteratorFlowNodeConfiguration":{
       "type":"structure",
       "members":{
@@ -6293,7 +6686,7 @@
     },
     "KendraIndexArn":{
       "type":"string",
-      "pattern":"^arn:aws(|-cn|-us-gov):kendra:[a-z0-9-]{1,20}:([0-9]{12}|):index/([a-zA-Z0-9][a-zA-Z0-9-]{35}|[a-zA-Z0-9][a-zA-Z0-9-]{35}-[a-zA-Z0-9][a-zA-Z0-9-]{35})$"
+      "pattern":"arn:aws(|-cn|-us-gov):kendra:[a-z0-9-]{1,20}:([0-9]{12}|):index/([a-zA-Z0-9][a-zA-Z0-9-]{35}|[a-zA-Z0-9][a-zA-Z0-9-]{35}-[a-zA-Z0-9][a-zA-Z0-9-]{35})"
     },
     "KendraKnowledgeBaseConfiguration":{
       "type":"structure",
@@ -6316,41 +6709,21 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}$"
+      "pattern":"arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}"
     },
     "KnowledgeBase":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "knowledgeBaseArn",
-        "knowledgeBaseConfiguration",
         "knowledgeBaseId",
         "name",
+        "knowledgeBaseArn",
         "roleArn",
+        "knowledgeBaseConfiguration",
         "status",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time the knowledge base was created.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the knowledge base.</p>"
-        },
-        "failureReasons":{
-          "shape":"FailureReasons",
-          "documentation":"<p>A list of reasons that the API operation on the knowledge base failed.</p>"
-        },
-        "knowledgeBaseArn":{
-          "shape":"KnowledgeBaseArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
-        "knowledgeBaseConfiguration":{
-          "shape":"KnowledgeBaseConfiguration",
-          "documentation":"<p>Contains details about the embeddings configuration of the knowledge base.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base.</p>"
@@ -6359,21 +6732,41 @@
           "shape":"Name",
           "documentation":"<p>The name of the knowledge base.</p>"
         },
+        "knowledgeBaseArn":{
+          "shape":"KnowledgeBaseArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the knowledge base.</p>"
+        },
         "roleArn":{
           "shape":"KnowledgeBaseRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the knowledge base.</p>"
         },
-        "status":{
-          "shape":"KnowledgeBaseStatus",
-          "documentation":"<p>The status of the knowledge base. The following statuses are possible:</p> <ul> <li> <p>CREATING – The knowledge base is being created.</p> </li> <li> <p>ACTIVE – The knowledge base is ready to be queried.</p> </li> <li> <p>DELETING – The knowledge base is being deleted.</p> </li> <li> <p>UPDATING – The knowledge base is being updated.</p> </li> <li> <p>FAILED – The knowledge base API operation failed.</p> </li> </ul>"
+        "knowledgeBaseConfiguration":{
+          "shape":"KnowledgeBaseConfiguration",
+          "documentation":"<p>Contains details about the embeddings configuration of the knowledge base.</p>"
         },
         "storageConfiguration":{
           "shape":"StorageConfiguration",
           "documentation":"<p>Contains details about the storage configuration of the knowledge base.</p>"
         },
+        "status":{
+          "shape":"KnowledgeBaseStatus",
+          "documentation":"<p>The status of the knowledge base. The following statuses are possible:</p> <ul> <li> <p>CREATING – The knowledge base is being created.</p> </li> <li> <p>ACTIVE – The knowledge base is ready to be queried.</p> </li> <li> <p>DELETING – The knowledge base is being deleted.</p> </li> <li> <p>UPDATING – The knowledge base is being updated.</p> </li> <li> <p>FAILED – The knowledge base API operation failed.</p> </li> </ul>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time the knowledge base was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time the knowledge base was last updated.</p>"
+        },
+        "failureReasons":{
+          "shape":"FailureReasons",
+          "documentation":"<p>A list of reasons that the API operation on the knowledge base failed.</p>"
         }
       },
       "documentation":"<p>Contains information about a knowledge base.</p>"
@@ -6382,20 +6775,12 @@
       "type":"string",
       "max":128,
       "min":0,
-      "pattern":"^arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:[0-9]{12}:knowledge-base/[0-9a-zA-Z]+$"
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:[0-9]{12}:knowledge-base/[0-9a-zA-Z]+"
     },
     "KnowledgeBaseConfiguration":{
       "type":"structure",
       "required":["type"],
       "members":{
-        "kendraKnowledgeBaseConfiguration":{
-          "shape":"KendraKnowledgeBaseConfiguration",
-          "documentation":"<p>Settings for an Amazon Kendra knowledge base.</p>"
-        },
-        "sqlKnowledgeBaseConfiguration":{
-          "shape":"SqlKnowledgeBaseConfiguration",
-          "documentation":"<p>Specifies configurations for a knowledge base connected to an SQL database.</p>"
-        },
         "type":{
           "shape":"KnowledgeBaseType",
           "documentation":"<p>The type of data that the data source is converted into for the knowledge base.</p>"
@@ -6403,6 +6788,14 @@
         "vectorKnowledgeBaseConfiguration":{
           "shape":"VectorKnowledgeBaseConfiguration",
           "documentation":"<p>Contains details about the model that's used to convert the data source into vector embeddings.</p>"
+        },
+        "kendraKnowledgeBaseConfiguration":{
+          "shape":"KendraKnowledgeBaseConfiguration",
+          "documentation":"<p>Settings for an Amazon Kendra knowledge base.</p>"
+        },
+        "sqlKnowledgeBaseConfiguration":{
+          "shape":"SqlKnowledgeBaseConfiguration",
+          "documentation":"<p>Specifies configurations for a knowledge base connected to an SQL database.</p>"
         }
       },
       "documentation":"<p>Contains details about the vector embeddings configuration of the knowledge base.</p>"
@@ -6411,13 +6804,13 @@
       "type":"structure",
       "required":["content"],
       "members":{
-        "content":{
-          "shape":"DocumentContent",
-          "documentation":"<p>Contains the content of the document.</p>"
-        },
         "metadata":{
           "shape":"DocumentMetadata",
           "documentation":"<p>Contains the metadata to associate with the document.</p>"
+        },
+        "content":{
+          "shape":"DocumentContent",
+          "documentation":"<p>Contains the content of the document.</p>"
         }
       },
       "documentation":"<p>Contains information about a document to ingest into a knowledge base and metadata to associate with it.</p>"
@@ -6425,28 +6818,28 @@
     "KnowledgeBaseDocumentDetail":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "identifier",
         "knowledgeBaseId",
-        "status"
+        "dataSourceId",
+        "status",
+        "identifier"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The identifier of the data source connected to the knowledge base that the document was ingested into or deleted from.</p>"
-        },
-        "identifier":{
-          "shape":"DocumentIdentifier",
-          "documentation":"<p>Contains information that identifies the document.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The identifier of the knowledge base that the document was ingested into or deleted from.</p>"
         },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The identifier of the data source connected to the knowledge base that the document was ingested into or deleted from.</p>"
+        },
         "status":{
           "shape":"DocumentStatus",
           "documentation":"<p>The ingestion status of the document. The following statuses are possible:</p> <ul> <li> <p>STARTED – You submitted the ingestion job containing the document.</p> </li> <li> <p>PENDING – The document is waiting to be ingested.</p> </li> <li> <p>IN_PROGRESS – The document is being ingested.</p> </li> <li> <p>INDEXED – The document was successfully indexed.</p> </li> <li> <p>PARTIALLY_INDEXED – The document was partially indexed.</p> </li> <li> <p>METADATA_PARTIALLY_INDEXED – You submitted metadata for an existing document and it was partially indexed.</p> </li> <li> <p>METADATA_UPDATE_FAILED – You submitted a metadata update for an existing document but it failed.</p> </li> <li> <p>FAILED – The document failed to be ingested.</p> </li> <li> <p>NOT_FOUND – The document wasn't found.</p> </li> <li> <p>IGNORED – The document was ignored during ingestion.</p> </li> <li> <p>DELETING – You submitted the delete job containing the document.</p> </li> <li> <p>DELETE_IN_PROGRESS – The document is being deleted.</p> </li> </ul>"
         },
+        "identifier":{
+          "shape":"DocumentIdentifier",
+          "documentation":"<p>Contains information that identifies the document.</p>"
+        },
         "statusReason":{
           "shape":"String",
           "documentation":"<p>The reason for the status. Appears alongside the status <code>IGNORED</code>.</p>"
@@ -6472,38 +6865,90 @@
       "type":"structure",
       "required":["knowledgeBaseId"],
       "members":{
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>Contains configurations for a guardrail to apply during query and response generation for the knowledge base in this configuration.</p>"
-        },
         "knowledgeBaseId":{
-          "shape":"KnowledgeBaseId",
+          "shape":"FlowKnowledgeBaseId",
           "documentation":"<p>The unique identifier of the knowledge base to query.</p>"
         },
         "modelId":{
           "shape":"KnowledgeBaseModelIdentifier",
           "documentation":"<p>The unique identifier of the model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> to use to generate a response from the query results. Omit this field if you want to return the retrieved results as an array.</p>"
+        },
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>Contains configurations for a guardrail to apply during query and response generation for the knowledge base in this configuration.</p>"
+        },
+        "numberOfResults":{
+          "shape":"KnowledgeBaseFlowNodeConfigurationNumberOfResultsInteger",
+          "documentation":"<p>The number of results to retrieve from the knowledge base.</p>"
+        },
+        "promptTemplate":{
+          "shape":"KnowledgeBasePromptTemplate",
+          "documentation":"<p>A custom prompt template to use with the knowledge base for generating responses.</p>"
+        },
+        "inferenceConfiguration":{
+          "shape":"PromptInferenceConfiguration",
+          "documentation":"<p>Contains inference configurations for the prompt.</p>"
+        },
+        "rerankingConfiguration":{
+          "shape":"VectorSearchRerankingConfiguration",
+          "documentation":"<p>The configuration for reranking the retrieved results from the knowledge base to improve relevance.</p>"
+        },
+        "orchestrationConfiguration":{
+          "shape":"KnowledgeBaseOrchestrationConfiguration",
+          "documentation":"<p>The configuration for orchestrating the retrieval and generation process in the knowledge base node.</p>"
         }
       },
-      "documentation":"<p>Contains configurations for a knowledge base node in a flow. This node takes a query as the input and returns, as the output, the retrieved responses directly (as an array) or a response generated based on the retrieved responses. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Contains configurations for a knowledge base node in a flow. This node takes a query as the input and returns, as the output, the retrieved responses directly (as an array) or a response generated based on the retrieved responses. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
-    "KnowledgeBaseId":{
-      "type":"string",
-      "max":10,
-      "min":0,
-      "pattern":"^[0-9a-zA-Z]+$"
+    "KnowledgeBaseFlowNodeConfigurationNumberOfResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
     },
     "KnowledgeBaseModelIdentifier":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
+    },
+    "KnowledgeBaseOrchestrationConfiguration":{
+      "type":"structure",
+      "members":{
+        "promptTemplate":{
+          "shape":"KnowledgeBasePromptTemplate",
+          "documentation":"<p>A custom prompt template for orchestrating the retrieval and generation process.</p>"
+        },
+        "inferenceConfig":{
+          "shape":"PromptInferenceConfiguration",
+          "documentation":"<p>Contains inference configurations for the prompt.</p>"
+        },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p>The additional model-specific request parameters as key-value pairs to be included in the request to the foundation model.</p>"
+        },
+        "performanceConfig":{
+          "shape":"PerformanceConfiguration",
+          "documentation":"<p>The performance configuration options for the knowledge base retrieval and generation process.</p>"
+        }
+      },
+      "documentation":"<p>Configures how the knowledge base orchestrates the retrieval and generation process, allowing for customization of prompts, inference parameters, and performance settings.</p>"
+    },
+    "KnowledgeBasePromptTemplate":{
+      "type":"structure",
+      "members":{
+        "textPromptTemplate":{
+          "shape":"KnowledgeBaseTextPrompt",
+          "documentation":"<p>The text of the prompt template.</p>"
+        }
+      },
+      "documentation":"<p>Defines a custom prompt template for orchestrating the retrieval and generation process.</p>"
     },
     "KnowledgeBaseRoleArn":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+$"
+      "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+"
     },
     "KnowledgeBaseState":{
       "type":"string",
@@ -6530,7 +6975,10 @@
         "PINECONE",
         "REDIS_ENTERPRISE_CLOUD",
         "RDS",
-        "MONGO_DB_ATLAS"
+        "MONGO_DB_ATLAS",
+        "NEPTUNE_ANALYTICS",
+        "OPENSEARCH_MANAGED_CLUSTER",
+        "S3_VECTORS"
       ]
     },
     "KnowledgeBaseSummaries":{
@@ -6546,10 +6994,6 @@
         "updatedAt"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the knowledge base.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base.</p>"
@@ -6558,6 +7002,10 @@
           "shape":"Name",
           "documentation":"<p>The name of the knowledge base.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the knowledge base.</p>"
+        },
         "status":{
           "shape":"KnowledgeBaseStatus",
           "documentation":"<p>The status of the knowledge base.</p>"
@@ -6569,6 +7017,12 @@
       },
       "documentation":"<p>Contains details about a knowledge base.</p>"
     },
+    "KnowledgeBaseTextPrompt":{
+      "type":"string",
+      "max":100000,
+      "min":1,
+      "sensitive":true
+    },
     "KnowledgeBaseType":{
       "type":"string",
       "enum":[
@@ -6581,29 +7035,18 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$"
+      "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
     },
     "LambdaFunctionFlowNodeConfiguration":{
       "type":"structure",
       "required":["lambdaArn"],
       "members":{
         "lambdaArn":{
-          "shape":"LambdaArn",
+          "shape":"FlowLambdaArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function to invoke.</p>"
         }
       },
-      "documentation":"<p>Contains configurations for a Lambda function node in the flow. You specify the Lambda function to invoke and the inputs into the function. The output is the response that is defined in the Lambda function. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
-    },
-    "LexBotAliasArn":{
-      "type":"string",
-      "max":78,
-      "min":0,
-      "pattern":"^arn:aws(|-us-gov):lex:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:bot-alias/[0-9a-zA-Z]+/[0-9a-zA-Z]+$"
-    },
-    "LexBotLocaleId":{
-      "type":"string",
-      "max":10,
-      "min":1
+      "documentation":"<p>Contains configurations for a Lambda function node in the flow. You specify the Lambda function to invoke and the inputs into the function. The output is the response that is defined in the Lambda function. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "LexFlowNodeConfiguration":{
       "type":"structure",
@@ -6613,15 +7056,15 @@
       ],
       "members":{
         "botAliasArn":{
-          "shape":"LexBotAliasArn",
+          "shape":"FlowLexBotAliasArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Lex bot alias to invoke.</p>"
         },
         "localeId":{
-          "shape":"LexBotLocaleId",
+          "shape":"FlowLexBotLocaleId",
           "documentation":"<p>The Region to invoke the Amazon Lex bot in.</p>"
         }
       },
-      "documentation":"<p>Contains configurations for a Lex node in the flow. You specify a Amazon Lex bot to invoke. This node takes an utterance as the input and returns as the output the intent identified by the Amazon Lex bot. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Contains configurations for a Lex node in the flow. You specify a Amazon Lex bot to invoke. This node takes an utterance as the input and returns as the output the intent identified by the Amazon Lex bot. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ListAgentActionGroupsRequest":{
       "type":"structure",
@@ -6991,10 +7434,16 @@
     "ListIngestionJobsRequest":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "dataSourceId"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the list of data ingestion jobs.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source for the list of data ingestion jobs.</p>",
@@ -7005,11 +7454,9 @@
           "shape":"IngestionJobFilters",
           "documentation":"<p>Contains information about the filters for filtering the data.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the list of data ingestion jobs.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "sortBy":{
+          "shape":"IngestionJobSortBy",
+          "documentation":"<p>Contains details about how to sort the data.</p>"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -7018,10 +7465,6 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>"
-        },
-        "sortBy":{
-          "shape":"IngestionJobSortBy",
-          "documentation":"<p>Contains details about how to sort the data.</p>"
         }
       }
     },
@@ -7042,22 +7485,22 @@
     "ListKnowledgeBaseDocumentsRequest":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "dataSourceId"
       ],
       "members":{
-        "dataSourceId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the data source that contains the documents.</p>",
-          "location":"uri",
-          "locationName":"dataSourceId"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base that is connected to the data source.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
+        "dataSourceId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the data source that contains the documents.</p>",
+          "location":"uri",
+          "locationName":"dataSourceId"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>"
@@ -7112,6 +7555,12 @@
     "ListPromptsRequest":{
       "type":"structure",
       "members":{
+        "promptIdentifier":{
+          "shape":"PromptIdentifier",
+          "documentation":"<p>The unique identifier of the prompt for whose versions you want to return information. Omit this field to list information about all prompts in an account.</p>",
+          "location":"querystring",
+          "locationName":"promptIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
@@ -7123,12 +7572,6 @@
           "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "promptIdentifier":{
-          "shape":"PromptIdentifier",
-          "documentation":"<p>The unique identifier of the prompt for whose versions you want to return information. Omit this field to list information about all prompts in an account.</p>",
-          "location":"querystring",
-          "locationName":"promptIdentifier"
         }
       }
     },
@@ -7136,13 +7579,13 @@
       "type":"structure",
       "required":["promptSummaries"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
-        },
         "promptSummaries":{
           "shape":"PromptSummaries",
           "documentation":"<p>A list, each member of which contains information about a prompt using Prompt management.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
         }
       }
     },
@@ -7167,25 +7610,86 @@
         }
       }
     },
+    "LoopControllerFlowNodeConfiguration":{
+      "type":"structure",
+      "required":["continueCondition"],
+      "members":{
+        "continueCondition":{
+          "shape":"FlowCondition",
+          "documentation":"<p>Specifies the condition that determines when the flow exits the DoWhile loop. The loop executes until this condition evaluates to true.</p>"
+        },
+        "maxIterations":{
+          "shape":"LoopControllerFlowNodeConfigurationMaxIterationsInteger",
+          "documentation":"<p>Specifies the maximum number of times the DoWhile loop can iterate before the flow exits the loop.</p>"
+        }
+      },
+      "documentation":"<p>Contains configurations for the controller node of a DoWhile loop in the flow.</p>"
+    },
+    "LoopControllerFlowNodeConfigurationMaxIterationsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "LoopFlowNodeConfiguration":{
+      "type":"structure",
+      "required":["definition"],
+      "members":{
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>The definition of the DoWhile loop nodes and connections between nodes in the flow.</p>"
+        }
+      },
+      "documentation":"<p>Contains configurations for the nodes of a DoWhile loop in your flow.</p> <p>A DoWhile loop is made up of the following nodes:</p> <ul> <li> <p> <code>Loop</code> - The container node that holds the loop's flow definition. This node encompasses the entire loop structure.</p> </li> <li> <p> <code>LoopInput</code> - The entry point node for the loop. This node receives inputs from nodes outside the loop and from previous loop iterations.</p> </li> <li> <p>Body nodes - The processing nodes that execute within each loop iteration. These can be nodes for handling data in your flow, such as a prompt or Lambda function nodes. Some node types aren't supported inside a DoWhile loop body. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_LoopIncompatibleNodeTypeFlowValidationDetails.html\">LoopIncompatibleNodeTypeFlowValidationDetails</a>.</p> </li> <li> <p> <code>LoopController</code> - The node that evaluates whether the loop should continue or exit based on a condition.</p> </li> </ul> <p>These nodes work together to create a loop that runs at least once and continues until a specified condition is met or a maximum number of iterations is reached.</p>"
+    },
+    "LoopIncompatibleNodeTypeFlowValidationDetails":{
+      "type":"structure",
+      "required":[
+        "node",
+        "incompatibleNodeType",
+        "incompatibleNodeName"
+      ],
+      "members":{
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The <code>Loop</code> container node that contains an incompatible node.</p>"
+        },
+        "incompatibleNodeType":{
+          "shape":"IncompatibleLoopNodeType",
+          "documentation":"<p>The node type of the incompatible node in the DoWhile loop. Some node types, like a condition node, aren't allowed in a DoWhile loop.</p>"
+        },
+        "incompatibleNodeName":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The node that's incompatible in the DoWhile loop.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that contains an incompatible node in a DoWhile loop.</p>"
+    },
+    "LoopInputFlowNodeConfiguration":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Contains configurations for the input node of a DoWhile loop in the flow.</p>"
+    },
     "MalformedConditionExpressionFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "cause",
+        "node",
         "condition",
-        "node"
+        "cause"
       ],
       "members":{
-        "cause":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>The error message describing why the condition expression is malformed.</p>"
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The name of the node containing the malformed condition expression.</p>"
         },
         "condition":{
           "shape":"FlowConditionName",
           "documentation":"<p>The name of the malformed condition.</p>"
         },
-        "node":{
-          "shape":"FlowNodeName",
-          "documentation":"<p>The name of the node containing the malformed condition expression.</p>"
+        "cause":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The error message describing why the condition expression is malformed.</p>"
         }
       },
       "documentation":"<p>Details about a malformed condition expression in a node.</p>"
@@ -7193,22 +7697,22 @@
     "MalformedNodeInputExpressionFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "cause",
+        "node",
         "input",
-        "node"
+        "cause"
       ],
       "members":{
-        "cause":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>The error message describing why the input expression is malformed.</p>"
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The name of the node containing the malformed input expression.</p>"
         },
         "input":{
           "shape":"FlowNodeInputName",
           "documentation":"<p>The name of the input with the malformed expression.</p>"
         },
-        "node":{
-          "shape":"FlowNodeName",
-          "documentation":"<p>The name of the node containing the malformed input expression.</p>"
+        "cause":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The error message describing why the input expression is malformed.</p>"
         }
       },
       "documentation":"<p>Details about a malformed input expression in a node.</p>"
@@ -7227,7 +7731,6 @@
     "MaximumLength":{
       "type":"integer",
       "box":true,
-      "max":4096,
       "min":0
     },
     "MemoryConfiguration":{
@@ -7238,13 +7741,13 @@
           "shape":"EnabledMemoryTypes",
           "documentation":"<p>The type of memory that is stored. </p>"
         },
-        "sessionSummaryConfiguration":{
-          "shape":"SessionSummaryConfiguration",
-          "documentation":"<p>Contains the configuration for SESSION_SUMMARY memory type enabled for the agent. </p>"
-        },
         "storageDays":{
           "shape":"StorageDays",
           "documentation":"<p>The number of days the agent is configured to retain the conversational context.</p>"
+        },
+        "sessionSummaryConfiguration":{
+          "shape":"SessionSummaryConfiguration",
+          "documentation":"<p>Contains the configuration for SESSION_SUMMARY memory type enabled for the agent. </p>"
         }
       },
       "documentation":"<p>Details of the memory configuration.</p>"
@@ -7256,17 +7759,17 @@
     "Message":{
       "type":"structure",
       "required":[
-        "content",
-        "role"
+        "role",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"ContentBlocks",
-          "documentation":"<p>The content in the message.</p>"
-        },
         "role":{
           "shape":"ConversationRole",
           "documentation":"<p>The role that the message belongs to.</p>"
+        },
+        "content":{
+          "shape":"ContentBlocks",
+          "documentation":"<p>The content in the message.</p>"
         }
       },
       "documentation":"<p>A message input or response from a model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-create.html\">Create a prompt using Prompt management</a>.</p>"
@@ -7297,25 +7800,25 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "booleanValue":{
-          "shape":"Boolean",
-          "documentation":"<p>The value of the Boolean metadata attribute.</p>"
+        "type":{
+          "shape":"MetadataValueType",
+          "documentation":"<p>The type of the metadata attribute.</p>"
         },
         "numberValue":{
           "shape":"NumberValue",
           "documentation":"<p>The value of the numeric metadata attribute.</p>"
         },
-        "stringListValue":{
-          "shape":"MetadataAttributeValueStringListValueList",
-          "documentation":"<p>An array of strings that define the value of the metadata attribute.</p>"
+        "booleanValue":{
+          "shape":"Boolean",
+          "documentation":"<p>The value of the Boolean metadata attribute.</p>"
         },
         "stringValue":{
           "shape":"StringValue",
           "documentation":"<p>The value of the string metadata attribute.</p>"
         },
-        "type":{
-          "shape":"MetadataValueType",
-          "documentation":"<p>The type of the metadata attribute.</p>"
+        "stringListValue":{
+          "shape":"MetadataAttributeValueStringListValueList",
+          "documentation":"<p>An array of strings that define the value of the metadata attribute.</p>"
         }
       },
       "documentation":"<p>Contains the value of the metadata attribute. Choose a <code>type</code> and include the field that corresponds to it.</p>"
@@ -7326,6 +7829,21 @@
       "max":10,
       "min":1
     },
+    "MetadataConfigurationForReranking":{
+      "type":"structure",
+      "required":["selectionMode"],
+      "members":{
+        "selectionMode":{
+          "shape":"RerankingMetadataSelectionMode",
+          "documentation":"<p>The mode for selecting metadata fields for reranking.</p>"
+        },
+        "selectiveModeConfiguration":{
+          "shape":"RerankingMetadataSelectiveModeConfiguration",
+          "documentation":"<p>The configuration for selective metadata field inclusion or exclusion during reranking.</p>"
+        }
+      },
+      "documentation":"<p>Specifies how metadata fields should be handled during the reranking process.</p>"
+    },
     "MetadataSourceType":{
       "type":"string",
       "enum":[
@@ -7346,27 +7864,27 @@
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
     },
     "MismatchedNodeInputTypeFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "expectedType",
+        "node",
         "input",
-        "node"
+        "expectedType"
       ],
       "members":{
-        "expectedType":{
-          "shape":"FlowNodeIODataType",
-          "documentation":"<p>The expected data type for the node input.</p>"
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The name of the node containing the input with the mismatched data type.</p>"
         },
         "input":{
           "shape":"FlowNodeInputName",
           "documentation":"<p>The name of the input with the mismatched data type.</p>"
         },
-        "node":{
-          "shape":"FlowNodeName",
-          "documentation":"<p>The name of the node containing the input with the mismatched data type.</p>"
+        "expectedType":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The expected data type for the node input.</p>"
         }
       },
       "documentation":"<p>Details about mismatched input data types in a node.</p>"
@@ -7374,15 +7892,11 @@
     "MismatchedNodeOutputTypeFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "expectedType",
         "node",
-        "output"
+        "output",
+        "expectedType"
       ],
       "members":{
-        "expectedType":{
-          "shape":"FlowNodeIODataType",
-          "documentation":"<p>The expected data type for the node output.</p>"
-        },
         "node":{
           "shape":"FlowNodeName",
           "documentation":"<p>The name of the node containing the output with the mismatched data type.</p>"
@@ -7390,6 +7904,10 @@
         "output":{
           "shape":"FlowNodeOutputName",
           "documentation":"<p>The name of the output with the mismatched data type.</p>"
+        },
+        "expectedType":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The expected data type for the node output.</p>"
         }
       },
       "documentation":"<p>Details about mismatched output data types in a node.</p>"
@@ -7422,31 +7940,53 @@
       },
       "documentation":"<p>Details about missing ending nodes (such as FlowOutputNode) in the flow.</p>"
     },
+    "MissingLoopControllerNodeFlowValidationDetails":{
+      "type":"structure",
+      "required":["loopNode"],
+      "members":{
+        "loopNode":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The DoWhile loop in a flow that's missing a required <code>LoopController</code> node.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that's missing a required <code>LoopController</code> node in a DoWhile loop.</p>"
+    },
+    "MissingLoopInputNodeFlowValidationDetails":{
+      "type":"structure",
+      "required":["loopNode"],
+      "members":{
+        "loopNode":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The DoWhile loop in a flow that's missing a required <code>LoopInput</code> node.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that's missing a required <code>LoopInput</code> node in a DoWhile loop.</p>"
+    },
     "MissingNodeConfigurationFlowValidationDetails":{
       "type":"structure",
       "required":["node"],
       "members":{
         "node":{
           "shape":"FlowNodeName",
-          "documentation":"<p>The name of the node missing configuration.</p>"
+          "documentation":"<p>The name of the node missing a required configuration.</p>"
         }
       },
-      "documentation":"<p>Details about a node missing required configuration.</p>"
+      "documentation":"<p>Details about a node missing a required configuration.</p>"
     },
     "MissingNodeInputFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "input",
-        "node"
+        "node",
+        "input"
       ],
       "members":{
-        "input":{
-          "shape":"FlowNodeInputName",
-          "documentation":"<p>The name of the missing input.</p>"
-        },
         "node":{
           "shape":"FlowNodeName",
           "documentation":"<p>The name of the node missing the required input.</p>"
+        },
+        "input":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the missing input.</p>"
         }
       },
       "documentation":"<p>Details about a missing required input in a node.</p>"
@@ -7479,52 +8019,56 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
     },
     "MongoDbAtlasCollectionName":{
       "type":"string",
       "max":63,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "MongoDbAtlasConfiguration":{
       "type":"structure",
       "required":[
+        "endpoint",
+        "databaseName",
         "collectionName",
+        "vectorIndexName",
         "credentialsSecretArn",
-        "databaseName",
-        "endpoint",
-        "fieldMapping",
-        "vectorIndexName"
+        "fieldMapping"
       ],
       "members":{
+        "endpoint":{
+          "shape":"MongoDbAtlasEndpoint",
+          "documentation":"<p>The endpoint URL of your MongoDB Atlas cluster for your knowledge base.</p>"
+        },
+        "databaseName":{
+          "shape":"MongoDbAtlasDatabaseName",
+          "documentation":"<p>The database name in your MongoDB Atlas cluster for your knowledge base.</p>"
+        },
         "collectionName":{
           "shape":"MongoDbAtlasCollectionName",
           "documentation":"<p>The collection name of the knowledge base in MongoDB Atlas.</p>"
         },
+        "vectorIndexName":{
+          "shape":"MongoDbAtlasIndexName",
+          "documentation":"<p>The name of the MongoDB Atlas vector search index.</p>"
+        },
         "credentialsSecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the secret that you created in Secrets Manager that contains user credentials for your MongoDB Atlas cluster.</p>"
         },
-        "databaseName":{
-          "shape":"MongoDbAtlasDatabaseName",
-          "documentation":"<p>The database name in your MongoDB Atlas cluster for your knowledge base.</p>"
-        },
-        "endpoint":{
-          "shape":"MongoDbAtlasEndpoint",
-          "documentation":"<p>The endpoint URL of your MongoDB Atlas cluster for your knowledge base.</p>"
+        "fieldMapping":{
+          "shape":"MongoDbAtlasFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
         },
         "endpointServiceName":{
           "shape":"MongoDbAtlasEndpointServiceName",
           "documentation":"<p>The name of the VPC endpoint service in your account that is connected to your MongoDB Atlas cluster.</p>"
         },
-        "fieldMapping":{
-          "shape":"MongoDbAtlasFieldMapping",
-          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
-        },
-        "vectorIndexName":{
+        "textIndexName":{
           "shape":"MongoDbAtlasIndexName",
-          "documentation":"<p>The name of the MongoDB Atlas vector search index.</p>"
+          "documentation":"<p>The name of the text search index in the MongoDB collection. This is required for using the hybrid search feature.</p>"
         }
       },
       "documentation":"<p>Contains details about the storage configuration of the knowledge base in MongoDB Atlas. </p>"
@@ -7533,39 +8077,39 @@
       "type":"string",
       "max":63,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "MongoDbAtlasEndpoint":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "MongoDbAtlasEndpointServiceName":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^(?:arn:aws(?:-us-gov|-cn|-iso|-iso-[a-z])*:.+:.*:\\d+:.+/.+$|[a-zA-Z0-9*]+[a-zA-Z0-9._-]*)$"
+      "pattern":"(?:arn:aws(?:-us-gov|-cn|-iso|-iso-[a-z])*:.+:.*:\\d+:.+/.+$|[a-zA-Z0-9*]+[a-zA-Z0-9._-]*)"
     },
     "MongoDbAtlasFieldMapping":{
       "type":"structure",
       "required":[
-        "metadataField",
+        "vectorField",
         "textField",
-        "vectorField"
+        "metadataField"
       ],
       "members":{
-        "metadataField":{
+        "vectorField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
         },
         "textField":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
         },
-        "vectorField":{
+        "metadataField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
@@ -7574,44 +8118,102 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
+    },
+    "MultipleLoopControllerNodesFlowValidationDetails":{
+      "type":"structure",
+      "required":["loopNode"],
+      "members":{
+        "loopNode":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The DoWhile loop in a flow that contains multiple <code>LoopController</code> nodes.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that contains multiple <code>LoopController</code> nodes in a DoWhile loop.</p>"
+    },
+    "MultipleLoopInputNodesFlowValidationDetails":{
+      "type":"structure",
+      "required":["loopNode"],
+      "members":{
+        "loopNode":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The DoWhile loop in a flow that contains multiple <code>LoopInput</code> nodes.</p>"
+        }
+      },
+      "documentation":"<p>Details about a flow that contains multiple <code>LoopInput</code> nodes in a DoWhile loop.</p>"
     },
     "MultipleNodeInputConnectionsFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "input",
-        "node"
+        "node",
+        "input"
       ],
       "members":{
-        "input":{
-          "shape":"FlowNodeInputName",
-          "documentation":"<p>The name of the input with multiple connections to it.</p>"
-        },
         "node":{
           "shape":"FlowNodeName",
           "documentation":"<p>The name of the node containing the input with multiple connections.</p>"
+        },
+        "input":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the input with multiple connections to it.</p>"
         }
       },
       "documentation":"<p>Details about multiple connections to a single node input.</p>"
     },
     "Name":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "NaturalLanguageString":{
       "type":"string",
       "max":1000,
       "min":1
     },
+    "NeptuneAnalyticsConfiguration":{
+      "type":"structure",
+      "required":[
+        "graphArn",
+        "fieldMapping"
+      ],
+      "members":{
+        "graphArn":{
+          "shape":"GraphArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Neptune Analytics vector store.</p>"
+        },
+        "fieldMapping":{
+          "shape":"NeptuneAnalyticsFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the storage configuration of the knowledge base in Amazon Neptune Analytics. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-neptune.html\">Create a vector index in Amazon Neptune Analytics</a>.</p>"
+    },
+    "NeptuneAnalyticsFieldMapping":{
+      "type":"structure",
+      "required":[
+        "textField",
+        "metadataField"
+      ],
+      "members":{
+        "textField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
+        },
+        "metadataField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+        }
+      },
+      "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
+    },
     "NextToken":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^\\S*$"
+      "pattern":"\\S*"
     },
     "NonBlankString":{
       "type":"string",
-      "pattern":"^[\\s\\S]+$"
+      "pattern":"[\\s\\S]+"
     },
     "NonEmptyString":{
       "type":"string",
@@ -7624,33 +8226,103 @@
     },
     "NumericalVersion":{
       "type":"string",
-      "pattern":"^[0-9]{1,5}$"
+      "pattern":"[0-9]{1,5}"
+    },
+    "OpenSearchManagedClusterConfiguration":{
+      "type":"structure",
+      "required":[
+        "domainEndpoint",
+        "domainArn",
+        "vectorIndexName",
+        "fieldMapping"
+      ],
+      "members":{
+        "domainEndpoint":{
+          "shape":"OpenSearchManagedClusterDomainEndpoint",
+          "documentation":"<p>The endpoint URL the OpenSearch domain.</p>"
+        },
+        "domainArn":{
+          "shape":"OpenSearchManagedClusterDomainArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OpenSearch domain.</p>"
+        },
+        "vectorIndexName":{
+          "shape":"OpenSearchManagedClusterIndexName",
+          "documentation":"<p>The name of the vector store.</p>"
+        },
+        "fieldMapping":{
+          "shape":"OpenSearchManagedClusterFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the Managed Cluster configuration of the knowledge base in Amazon OpenSearch Service. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-osm.html\">Create a vector index in OpenSearch Managed Cluster</a>.</p>"
+    },
+    "OpenSearchManagedClusterDomainArn":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"arn:aws(|-cn|-us-gov|-iso):es:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:domain/[a-z][a-z0-9-]{3,28}"
+    },
+    "OpenSearchManagedClusterDomainEndpoint":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"https://.*"
+    },
+    "OpenSearchManagedClusterFieldMapping":{
+      "type":"structure",
+      "required":[
+        "vectorField",
+        "textField",
+        "metadataField"
+      ],
+      "members":{
+        "vectorField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+        },
+        "textField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
+        },
+        "metadataField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+        }
+      },
+      "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
+    },
+    "OpenSearchManagedClusterIndexName":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(?![\\-_+.])[a-z0-9][a-z0-9\\-_\\.]*",
+      "sensitive":true
     },
     "OpenSearchServerlessCollectionArn":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws:aoss:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:collection/[a-z0-9-]{3,32}$"
+      "pattern":"arn:aws:aoss:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:collection/[a-z0-9-]{3,32}"
     },
     "OpenSearchServerlessConfiguration":{
       "type":"structure",
       "required":[
         "collectionArn",
-        "fieldMapping",
-        "vectorIndexName"
+        "vectorIndexName",
+        "fieldMapping"
       ],
       "members":{
         "collectionArn":{
           "shape":"OpenSearchServerlessCollectionArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the OpenSearch Service vector store.</p>"
         },
-        "fieldMapping":{
-          "shape":"OpenSearchServerlessFieldMapping",
-          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
-        },
         "vectorIndexName":{
           "shape":"OpenSearchServerlessIndexName",
           "documentation":"<p>The name of the vector store.</p>"
+        },
+        "fieldMapping":{
+          "shape":"OpenSearchServerlessFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains details about the storage configuration of the knowledge base in Amazon OpenSearch Service. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html\">Create a vector index in Amazon OpenSearch Service</a>.</p>"
@@ -7658,22 +8330,22 @@
     "OpenSearchServerlessFieldMapping":{
       "type":"structure",
       "required":[
-        "metadataField",
+        "vectorField",
         "textField",
-        "vectorField"
+        "metadataField"
       ],
       "members":{
-        "metadataField":{
+        "vectorField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
         },
         "textField":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
         },
-        "vectorField":{
+        "metadataField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
@@ -7682,7 +8354,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "OrchestrationExecutor":{
       "type":"structure",
@@ -7721,13 +8393,13 @@
           "shape":"ParameterDescription",
           "documentation":"<p>A description of the parameter. Helps the foundation model determine how to elicit the parameters from the user.</p>"
         },
-        "required":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the parameter is required for the agent to complete the function for action group invocation.</p>"
-        },
         "type":{
           "shape":"Type",
           "documentation":"<p>The data type of the parameter.</p>"
+        },
+        "required":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the parameter is required for the agent to complete the function for action group invocation.</p>"
         }
       },
       "documentation":"<p>Contains details about a parameter in a function for an action group.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateAgentActionGroup.html#API_agent_CreateAgentActionGroup_RequestSyntax\">CreateAgentActionGroup request</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_CreateAgentActionGroup.html#API_agent_CreateAgentActionGroup_ResponseSyntax\">CreateAgentActionGroup response</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_UpdateAgentActionGroup.html#API_agent_UpdateAgentActionGroup_RequestSyntax\">UpdateAgentActionGroup request</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_UpdateAgentActionGroup.html#API_agent_UpdateAgentActionGroup_ResponseSyntax\">UpdateAgentActionGroup response</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_GetAgentActionGroup.html#API_agent_GetAgentActionGroup_ResponseSyntax\">GetAgentActionGroup response</a> </p> </li> </ul>"
@@ -7741,17 +8413,17 @@
       "type":"structure",
       "required":["parsingStrategy"],
       "members":{
-        "bedrockDataAutomationConfiguration":{
-          "shape":"BedrockDataAutomationConfiguration",
-          "documentation":"<p>If you specify <code>BEDROCK_DATA_AUTOMATION</code> as the parsing strategy for ingesting your data source, use this object to modify configurations for using the Amazon Bedrock Data Automation parser.</p>"
+        "parsingStrategy":{
+          "shape":"ParsingStrategy",
+          "documentation":"<p>The parsing strategy for the data source.</p>"
         },
         "bedrockFoundationModelConfiguration":{
           "shape":"BedrockFoundationModelConfiguration",
           "documentation":"<p>If you specify <code>BEDROCK_FOUNDATION_MODEL</code> as the parsing strategy for ingesting your data source, use this object to modify configurations for using a foundation model to parse documents.</p>"
         },
-        "parsingStrategy":{
-          "shape":"ParsingStrategy",
-          "documentation":"<p>The parsing strategy for the data source.</p>"
+        "bedrockDataAutomationConfiguration":{
+          "shape":"BedrockDataAutomationConfiguration",
+          "documentation":"<p>If you specify <code>BEDROCK_DATA_AUTOMATION</code> as the parsing strategy for ingesting your data source, use this object to modify configurations for using the Amazon Bedrock Data Automation parser.</p>"
         }
       },
       "documentation":"<p>Settings for parsing document contents. If you exclude this field, the default parser converts the contents of each document into text before splitting it into chunks. Specify the parsing strategy to use in the <code>parsingStrategy</code> field and include the relevant configuration, or omit it to use the Amazon Bedrock default parser. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-advanced-parsing.html\">Parsing options for your data source</a>.</p> <note> <p>If you specify <code>BEDROCK_DATA_AUTOMATION</code> or <code>BEDROCK_FOUNDATION_MODEL</code> and it fails to parse a file, the Amazon Bedrock default parser will be used instead.</p> </note>"
@@ -7787,17 +8459,17 @@
       "type":"structure",
       "required":["objectType"],
       "members":{
-        "exclusionFilters":{
-          "shape":"FilterList",
-          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain object types that adhere to the pattern. If you specify an inclusion and exclusion filter/pattern and both match a document, the exclusion filter takes precedence and the document isn’t crawled.</p>"
+        "objectType":{
+          "shape":"FilteredObjectType",
+          "documentation":"<p>The supported object type or content type of the data source.</p>"
         },
         "inclusionFilters":{
           "shape":"FilterList",
           "documentation":"<p>A list of one or more inclusion regular expression patterns to include certain object types that adhere to the pattern. If you specify an inclusion and exclusion filter/pattern and both match a document, the exclusion filter takes precedence and the document isn’t crawled.</p>"
         },
-        "objectType":{
-          "shape":"FilteredObjectType",
-          "documentation":"<p>The supported object type or content type of the data source.</p>"
+        "exclusionFilters":{
+          "shape":"FilterList",
+          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain object types that adhere to the pattern. If you specify an inclusion and exclusion filter/pattern and both match a document, the exclusion filter takes precedence and the document isn’t crawled.</p>"
         }
       },
       "documentation":"<p>The specific filters applied to your data source content. You can filter out or include certain content.</p>"
@@ -7824,6 +8496,23 @@
       "type":"string",
       "sensitive":true
     },
+    "PerformanceConfigLatency":{
+      "type":"string",
+      "enum":[
+        "standard",
+        "optimized"
+      ]
+    },
+    "PerformanceConfiguration":{
+      "type":"structure",
+      "members":{
+        "latency":{
+          "shape":"PerformanceConfigLatency",
+          "documentation":"<p>The latency optimization setting.</p>"
+        }
+      },
+      "documentation":"<p>The performance-related configuration options for the knowledge base retrieval and generation process.</p>"
+    },
     "PineconeConfiguration":{
       "type":"structure",
       "required":[
@@ -7840,13 +8529,13 @@
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the secret that you created in Secrets Manager that is linked to your Pinecone API key.</p>"
         },
-        "fieldMapping":{
-          "shape":"PineconeFieldMapping",
-          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
-        },
         "namespace":{
           "shape":"PineconeNamespace",
           "documentation":"<p>The namespace to be used to write new data to your database.</p>"
+        },
+        "fieldMapping":{
+          "shape":"PineconeFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains details about the storage configuration of the knowledge base in Pinecone. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-pinecone.html\">Create a vector index in Pinecone</a>.</p>"
@@ -7855,22 +8544,22 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "PineconeFieldMapping":{
       "type":"structure",
       "required":[
-        "metadataField",
-        "textField"
+        "textField",
+        "metadataField"
       ],
       "members":{
-        "metadataField":{
-          "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
-        },
         "textField":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
+        },
+        "metadataField":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
@@ -7879,7 +8568,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "PrepareAgentRequest":{
       "type":"structure",
@@ -7964,38 +8653,42 @@
     },
     "PromptArn":{
       "type":"string",
-      "pattern":"^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?)$"
+      "pattern":"(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?)"
     },
     "PromptConfiguration":{
       "type":"structure",
       "members":{
+        "promptType":{
+          "shape":"PromptType",
+          "documentation":"<p>The step in the agent sequence that this prompt configuration applies to.</p>"
+        },
+        "promptCreationMode":{
+          "shape":"CreationMode",
+          "documentation":"<p>Specifies whether to override the default prompt template for this <code>promptType</code>. Set this value to <code>OVERRIDDEN</code> to use the prompt that you provide in the <code>basePromptTemplate</code>. If you leave it as <code>DEFAULT</code>, the agent uses a default prompt template.</p>"
+        },
+        "promptState":{
+          "shape":"PromptState",
+          "documentation":"<p>Specifies whether to allow the agent to carry out the step specified in the <code>promptType</code>. If you set this value to <code>DISABLED</code>, the agent skips that step. The default state for each <code>promptType</code> is as follows.</p> <ul> <li> <p> <code>PRE_PROCESSING</code> – <code>DISABLED</code> </p> </li> <li> <p> <code>ORCHESTRATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>KNOWLEDGE_BASE_RESPONSE_GENERATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>POST_PROCESSING</code> – <code>DISABLED</code> </p> </li> </ul>"
+        },
         "basePromptTemplate":{
           "shape":"BasePromptTemplate",
           "documentation":"<p>Defines the prompt template with which to replace the default prompt template. You can use placeholder variables in the base prompt template to customize the prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Prompt template placeholder variables</a>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts-configure.html\">Configure the prompt templates</a>.</p>"
         },
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The agent's foundation model.</p>"
-        },
         "inferenceConfiguration":{
           "shape":"InferenceConfiguration",
           "documentation":"<p>Contains inference parameters to use when the agent invokes a foundation model in the part of the agent sequence defined by the <code>promptType</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p>"
         },
         "parserMode":{
           "shape":"CreationMode",
-          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>. If you set the field as <code>OVERRIDEN</code>, the <code>overrideLambda</code> field in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> must be specified with the ARN of a Lambda function.</p>"
+          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>. If you set the field as <code>OVERRIDDEN</code>, the <code>overrideLambda</code> field in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> must be specified with the ARN of a Lambda function.</p>"
         },
-        "promptCreationMode":{
-          "shape":"CreationMode",
-          "documentation":"<p>Specifies whether to override the default prompt template for this <code>promptType</code>. Set this value to <code>OVERRIDDEN</code> to use the prompt that you provide in the <code>basePromptTemplate</code>. If you leave it as <code>DEFAULT</code>, the agent uses a default prompt template.</p>"
-        },
-        "promptState":{
-          "shape":"PromptState",
-          "documentation":"<p>Specifies whether to allow the agent to carry out the step specified in the <code>promptType</code>. If you set this value to <code>DISABLED</code>, the agent skips that step. The default state for each <code>promptType</code> is as follows.</p> <ul> <li> <p> <code>PRE_PROCESSING</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>ORCHESTRATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>KNOWLEDGE_BASE_RESPONSE_GENERATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>POST_PROCESSING</code> – <code>DISABLED</code> </p> </li> </ul>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The agent's foundation model.</p>"
         },
-        "promptType":{
-          "shape":"PromptType",
-          "documentation":"<p>The step in the agent sequence that this prompt configuration applies to.</p>"
+        "additionalModelRequestFields":{
+          "shape":"Document",
+          "documentation":"<p>If the Converse or ConverseStream operations support the model, <code>additionalModelRequestFields</code> contains additional inference parameters, beyond the base set of inference parameters in the <code>inferenceConfiguration</code> field. </p> <p>For more information, see <i>Inference request parameters and response fields for foundation models</i> in the Amazon Bedrock user guide.</p>"
         }
       },
       "documentation":"<p>Contains configurations to override a prompt template in one part of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
@@ -8015,44 +8708,44 @@
       "type":"structure",
       "required":["sourceConfiguration"],
       "members":{
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>Contains configurations for a guardrail to apply to the prompt in this node and the response generated from it.</p>"
-        },
         "sourceConfiguration":{
           "shape":"PromptFlowNodeSourceConfiguration",
           "documentation":"<p>Specifies whether the prompt is from Prompt management or defined inline.</p>"
+        },
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>Contains configurations for a guardrail to apply to the prompt in this node and the response generated from it.</p>"
         }
       },
-      "documentation":"<p>Contains configurations for a prompt node in the flow. You can use a prompt from Prompt management or you can define one in this node. If the prompt contains variables, the inputs into this node will fill in the variables. The output from this node is the response generated by the model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in Amazon Bedrock works</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Contains configurations for a prompt node in the flow. You can use a prompt from Prompt management or you can define one in this node. If the prompt contains variables, the inputs into this node will fill in the variables. The output from this node is the response generated by the model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-nodes.html\">Node types in a flow</a> in the Amazon Bedrock User Guide.</p>"
     },
     "PromptFlowNodeInlineConfiguration":{
       "type":"structure",
       "required":[
-        "modelId",
+        "templateType",
         "templateConfiguration",
-        "templateType"
+        "modelId"
       ],
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"Document",
-          "documentation":"<p>Additional fields to be included in the model request for the Prompt node.</p>"
+        "templateType":{
+          "shape":"PromptTemplateType",
+          "documentation":"<p>The type of prompt template.</p>"
         },
-        "inferenceConfiguration":{
-          "shape":"PromptInferenceConfiguration",
-          "documentation":"<p>Contains inference configurations for the prompt.</p>"
+        "templateConfiguration":{
+          "shape":"PromptTemplateConfiguration",
+          "documentation":"<p>Contains a prompt and variables in the prompt that can be replaced with values at runtime.</p>"
         },
         "modelId":{
-          "shape":"PromptModelIdentifier",
+          "shape":"FlowPromptModelIdentifier",
           "documentation":"<p>The unique identifier of the model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> to run inference with.</p>"
         },
-        "templateConfiguration":{
-          "shape":"PromptTemplateConfiguration",
-          "documentation":"<p>Contains a prompt and variables in the prompt that can be replaced with values at runtime.</p>"
+        "inferenceConfiguration":{
+          "shape":"PromptInferenceConfiguration",
+          "documentation":"<p>Contains inference configurations for the prompt.</p>"
         },
-        "templateType":{
-          "shape":"PromptTemplateType",
-          "documentation":"<p>The type of prompt template.</p>"
+        "additionalModelRequestFields":{
+          "shape":"Document",
+          "documentation":"<p>Additional fields to be included in the model request for the Prompt node.</p>"
         }
       },
       "documentation":"<p>Contains configurations for a prompt defined inline in the node.</p>"
@@ -8062,7 +8755,7 @@
       "required":["promptArn"],
       "members":{
         "promptArn":{
-          "shape":"PromptArn",
+          "shape":"FlowPromptArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the prompt from Prompt management.</p>"
         }
       },
@@ -8071,13 +8764,13 @@
     "PromptFlowNodeSourceConfiguration":{
       "type":"structure",
       "members":{
-        "inline":{
-          "shape":"PromptFlowNodeInlineConfiguration",
-          "documentation":"<p>Contains configurations for a prompt that is defined inline</p>"
-        },
         "resource":{
           "shape":"PromptFlowNodeResourceConfiguration",
           "documentation":"<p>Contains configurations for a prompt from Prompt management.</p>"
+        },
+        "inline":{
+          "shape":"PromptFlowNodeInlineConfiguration",
+          "documentation":"<p>Contains configurations for a prompt that is defined inline</p>"
         }
       },
       "documentation":"<p>Contains configurations for a prompt and whether it is from Prompt management or defined inline.</p>",
@@ -8097,11 +8790,11 @@
     },
     "PromptId":{
       "type":"string",
-      "pattern":"^[0-9a-zA-Z]{10}$"
+      "pattern":"[0-9a-zA-Z]{10}"
     },
     "PromptIdentifier":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z]{10})|(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10})(?::[0-9]{1,5})?$"
+      "pattern":"([0-9a-zA-Z]{10})|(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10})(?::[0-9]{1,5})?"
     },
     "PromptInferenceConfiguration":{
       "type":"structure",
@@ -8126,12 +8819,12 @@
     },
     "PromptInputVariableName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "PromptInputVariablesList":{
       "type":"list",
       "member":{"shape":"PromptInputVariable"},
-      "max":5,
+      "max":20,
       "min":0,
       "sensitive":true
     },
@@ -8158,7 +8851,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[a-zA-Z0-9\\s._:/=+@-]*$",
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*",
       "sensitive":true
     },
     "PromptMetadataList":{
@@ -8172,26 +8865,18 @@
       "type":"string",
       "max":1024,
       "min":0,
-      "pattern":"^[a-zA-Z0-9\\s._:/=+@-]*$",
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*",
       "sensitive":true
     },
     "PromptModelIdentifier":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]{1,12})?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-zA-Z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
     },
     "PromptModelInferenceConfiguration":{
       "type":"structure",
       "members":{
-        "maxTokens":{
-          "shape":"MaximumLength",
-          "documentation":"<p>The maximum number of tokens to return in the response.</p>"
-        },
-        "stopSequences":{
-          "shape":"StopSequences",
-          "documentation":"<p>A list of strings that define sequences after which the model will stop generating.</p>"
-        },
         "temperature":{
           "shape":"Temperature",
           "documentation":"<p>Controls the randomness of the response. Choose a lower value for more predictable outputs and a higher value for more surprising outputs.</p>"
@@ -8199,25 +8884,33 @@
         "topP":{
           "shape":"TopP",
           "documentation":"<p>The percentage of most-likely candidates that the model considers for the next token.</p>"
+        },
+        "maxTokens":{
+          "shape":"MaximumLength",
+          "documentation":"<p>The maximum number of tokens to return in the response.</p>"
+        },
+        "stopSequences":{
+          "shape":"StopSequences",
+          "documentation":"<p>A list of strings that define sequences after which the model will stop generating.</p>"
         }
       },
       "documentation":"<p>Contains inference configurations related to model inference for a prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/inference-parameters.html\">Inference parameters</a>.</p>"
     },
     "PromptName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "PromptOverrideConfiguration":{
       "type":"structure",
       "required":["promptConfigurations"],
       "members":{
-        "overrideLambda":{
-          "shape":"LambdaArn",
-          "documentation":"<p>The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence. If you specify this field, at least one of the <code>promptConfigurations</code> must contain a <code>parserMode</code> value that is set to <code>OVERRIDDEN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/lambda-parser.html\">Parser Lambda function in Amazon Bedrock Agents</a>.</p>"
-        },
         "promptConfigurations":{
           "shape":"PromptConfigurations",
           "documentation":"<p>Contains configurations to override a prompt template in one part of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
+        },
+        "overrideLambda":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence. If you specify this field, at least one of the <code>promptConfigurations</code> must contain a <code>parserMode</code> value that is set to <code>OVERRIDDEN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/lambda-parser.html\">Parser Lambda function in Amazon Bedrock Agents</a>.</p>"
         }
       },
       "documentation":"<p>Contains configurations to override prompts in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>",
@@ -8239,21 +8932,17 @@
     "PromptSummary":{
       "type":"structure",
       "required":[
+        "name",
+        "id",
         "arn",
+        "version",
         "createdAt",
-        "id",
-        "name",
-        "updatedAt",
-        "version"
+        "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"PromptArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt or the prompt version (if you specified a version in the request).</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was created.</p>"
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>The name of the prompt.</p>"
         },
         "description":{
           "shape":"PromptDescription",
@@ -8263,17 +8952,21 @@
           "shape":"PromptId",
           "documentation":"<p>The unique identifier of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>The name of the prompt.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was last updated.</p>"
+        "arn":{
+          "shape":"PromptArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt or the prompt version (if you specified a version in the request).</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>The version of the prompt that this summary applies to.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was last updated.</p>"
         }
       },
       "documentation":"<p>Contains information about a prompt in your Prompt management tool.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_ListPrompts.html#API_agent_ListPrompts_ResponseSyntax\">ListPrompts response</a> </p> </li> </ul>"
@@ -8281,13 +8974,13 @@
     "PromptTemplateConfiguration":{
       "type":"structure",
       "members":{
-        "chat":{
-          "shape":"ChatPromptTemplateConfiguration",
-          "documentation":"<p>Contains configurations to use the prompt in a conversational format.</p>"
-        },
         "text":{
           "shape":"TextPromptTemplateConfiguration",
           "documentation":"<p>Contains configurations for the text in a message for a prompt.</p>"
+        },
+        "chat":{
+          "shape":"ChatPromptTemplateConfiguration",
+          "documentation":"<p>Contains configurations to use the prompt in a conversational format.</p>"
         }
       },
       "documentation":"<p>Contains the message for a prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management.html\">Construct and store reusable prompts with Prompt management in Amazon Bedrock</a>.</p>",
@@ -8314,17 +9007,25 @@
       "type":"structure",
       "required":[
         "name",
-        "templateConfiguration",
-        "templateType"
+        "templateType",
+        "templateConfiguration"
       ],
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"Document",
-          "documentation":"<p>Contains model-specific inference configurations that aren't in the <code>inferenceConfiguration</code> field. To see model-specific inference parameters, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference request parameters and response fields for foundation models</a>.</p>"
+        "name":{
+          "shape":"PromptVariantName",
+          "documentation":"<p>The name of the prompt variant.</p>"
         },
-        "genAiResource":{
-          "shape":"PromptGenAiResource",
-          "documentation":"<p>Specifies a generative AI resource with which to use the prompt.</p>"
+        "templateType":{
+          "shape":"PromptTemplateType",
+          "documentation":"<p>The type of prompt template to use.</p>"
+        },
+        "templateConfiguration":{
+          "shape":"PromptTemplateConfiguration",
+          "documentation":"<p>Contains configurations for the prompt template.</p>"
+        },
+        "modelId":{
+          "shape":"PromptModelIdentifier",
+          "documentation":"<p>The unique identifier of the model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> with which to run inference on the prompt.</p>"
         },
         "inferenceConfiguration":{
           "shape":"PromptInferenceConfiguration",
@@ -8334,21 +9035,13 @@
           "shape":"PromptMetadataList",
           "documentation":"<p>An array of objects, each containing a key-value pair that defines a metadata tag and value to attach to a prompt variant.</p>"
         },
-        "modelId":{
-          "shape":"PromptModelIdentifier",
-          "documentation":"<p>The unique identifier of the model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> with which to run inference on the prompt.</p>"
-        },
-        "name":{
-          "shape":"PromptVariantName",
-          "documentation":"<p>The name of the prompt variant.</p>"
-        },
-        "templateConfiguration":{
-          "shape":"PromptTemplateConfiguration",
-          "documentation":"<p>Contains configurations for the prompt template.</p>"
+        "additionalModelRequestFields":{
+          "shape":"Document",
+          "documentation":"<p>Contains model-specific inference configurations that aren't in the <code>inferenceConfiguration</code> field. To see model-specific inference parameters, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference request parameters and response fields for foundation models</a>.</p>"
         },
-        "templateType":{
-          "shape":"PromptTemplateType",
-          "documentation":"<p>The type of prompt template to use.</p>"
+        "genAiResource":{
+          "shape":"PromptGenAiResource",
+          "documentation":"<p>Specifies a generative AI resource with which to use the prompt.</p>"
         }
       },
       "documentation":"<p>Contains details about a variant of the prompt.</p>",
@@ -8363,13 +9056,13 @@
     },
     "PromptVariantName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "ProvisionedModelIdentifier":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^((([0-9a-zA-Z][_-]?){1,63})|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:provisioned-model/[a-z0-9]{12}))$"
+      "pattern":"((([0-9a-zA-Z][_-]?){1,63})|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:provisioned-model/[a-z0-9]{12}))"
     },
     "QueryEngineType":{
       "type":"string",
@@ -8384,6 +9077,10 @@
     "QueryGenerationColumn":{
       "type":"structure",
       "members":{
+        "name":{
+          "shape":"QueryGenerationColumnName",
+          "documentation":"<p>The name of the column for which the other fields in this object apply.</p>"
+        },
         "description":{
           "shape":"DescriptionString",
           "documentation":"<p>A description of the column that helps the query engine understand the contents of the column.</p>"
@@ -8391,10 +9088,6 @@
         "inclusion":{
           "shape":"IncludeExclude",
           "documentation":"<p>Specifies whether to include or exclude the column during query generation. If you specify <code>EXCLUDE</code>, the column will be ignored. If you specify <code>INCLUDE</code>, all other columns in the table will be ignored.</p>"
-        },
-        "name":{
-          "shape":"QueryGenerationColumnName",
-          "documentation":"<p>The name of the column for which the other fields in this object apply.</p>"
         }
       },
       "documentation":"<p>Contains information about a column in the current table for the query engine to consider.</p>"
@@ -8425,13 +9118,13 @@
     "QueryGenerationContext":{
       "type":"structure",
       "members":{
-        "curatedQueries":{
-          "shape":"CuratedQueries",
-          "documentation":"<p>An array of objects, each of which defines information about example queries to help the query engine generate appropriate SQL queries.</p>"
-        },
         "tables":{
           "shape":"QueryGenerationTables",
           "documentation":"<p>An array of objects, each of which defines information about a table in the database.</p>"
+        },
+        "curatedQueries":{
+          "shape":"CuratedQueries",
+          "documentation":"<p>An array of objects, each of which defines information about example queries to help the query engine generate appropriate SQL queries.</p>"
         }
       },
       "documentation":"<p>&gt;Contains configurations for context to use during query generation.</p>",
@@ -8441,9 +9134,9 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "columns":{
-          "shape":"QueryGenerationColumns",
-          "documentation":"<p>An array of objects, each of which defines information about a column in the table.</p>"
+        "name":{
+          "shape":"QueryGenerationTableName",
+          "documentation":"<p>The name of the table for which the other fields in this object apply.</p>"
         },
         "description":{
           "shape":"DescriptionString",
@@ -8453,16 +9146,16 @@
           "shape":"IncludeExclude",
           "documentation":"<p>Specifies whether to include or exclude the table during query generation. If you specify <code>EXCLUDE</code>, the table will be ignored. If you specify <code>INCLUDE</code>, all other tables will be ignored.</p>"
         },
-        "name":{
-          "shape":"QueryGenerationTableName",
-          "documentation":"<p>The name of the table for which the other fields in this object apply.</p>"
+        "columns":{
+          "shape":"QueryGenerationColumns",
+          "documentation":"<p>An array of objects, each of which defines information about a column in the table.</p>"
         }
       },
       "documentation":"<p>Contains information about a table for the query engine to consider.</p>"
     },
     "QueryGenerationTableName":{
       "type":"string",
-      "pattern":"^.*\\..*\\..*$"
+      "pattern":".*\\..*\\..*"
     },
     "QueryGenerationTables":{
       "type":"list",
@@ -8472,18 +9165,22 @@
     },
     "RdsArn":{
       "type":"string",
-      "pattern":"^arn:aws(|-cn|-us-gov):rds:[a-zA-Z0-9-]*:[0-9]{12}:cluster:[a-zA-Z0-9-]{1,63}$"
+      "pattern":"arn:aws(|-cn|-us-gov):rds:[a-zA-Z0-9-]*:[0-9]{12}:cluster:[a-zA-Z0-9-]{1,63}"
     },
     "RdsConfiguration":{
       "type":"structure",
       "required":[
+        "resourceArn",
         "credentialsSecretArn",
         "databaseName",
-        "fieldMapping",
-        "resourceArn",
-        "tableName"
+        "tableName",
+        "fieldMapping"
       ],
       "members":{
+        "resourceArn":{
+          "shape":"RdsArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector store.</p>"
+        },
         "credentialsSecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the secret that you created in Secrets Manager that is linked to your Amazon RDS database.</p>"
@@ -8492,17 +9189,13 @@
           "shape":"RdsDatabaseName",
           "documentation":"<p>The name of your Amazon RDS database.</p>"
         },
-        "fieldMapping":{
-          "shape":"RdsFieldMapping",
-          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
-        },
-        "resourceArn":{
-          "shape":"RdsArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the vector store.</p>"
-        },
         "tableName":{
           "shape":"RdsTableName",
           "documentation":"<p>The name of the table in the database.</p>"
+        },
+        "fieldMapping":{
+          "shape":"RdsFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains details about the storage configuration of the knowledge base in Amazon RDS. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html\">Create a vector index in Amazon RDS</a>.</p>"
@@ -8511,32 +9204,36 @@
       "type":"string",
       "max":63,
       "min":0,
-      "pattern":"^[a-zA-Z0-9_\\-]+$"
+      "pattern":"[a-zA-Z0-9_\\-]+"
     },
     "RdsFieldMapping":{
       "type":"structure",
       "required":[
-        "metadataField",
         "primaryKeyField",
+        "vectorField",
         "textField",
-        "vectorField"
+        "metadataField"
       ],
       "members":{
-        "metadataField":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
-        },
         "primaryKeyField":{
           "shape":"ColumnName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the ID for each entry.</p>"
         },
+        "vectorField":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+        },
         "textField":{
           "shape":"ColumnName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
         },
-        "vectorField":{
+        "metadataField":{
           "shape":"ColumnName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+        },
+        "customMetadataField":{
+          "shape":"ColumnName",
+          "documentation":"<p>Provide a name for the universal metadata field where Amazon Bedrock will store any custom metadata from your data source.</p>"
         }
       },
       "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
@@ -8545,7 +9242,7 @@
       "type":"string",
       "max":63,
       "min":0,
-      "pattern":"^[a-zA-Z0-9_\\.\\-]+$"
+      "pattern":"[a-zA-Z0-9_\\.\\-]+"
     },
     "RecommendedAction":{
       "type":"string",
@@ -8561,27 +9258,27 @@
     "RedisEnterpriseCloudConfiguration":{
       "type":"structure",
       "required":[
-        "credentialsSecretArn",
         "endpoint",
-        "fieldMapping",
-        "vectorIndexName"
+        "vectorIndexName",
+        "credentialsSecretArn",
+        "fieldMapping"
       ],
       "members":{
-        "credentialsSecretArn":{
-          "shape":"SecretArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the secret that you created in Secrets Manager that is linked to your Redis Enterprise Cloud database.</p>"
-        },
         "endpoint":{
           "shape":"RedisEnterpriseCloudEndpoint",
           "documentation":"<p>The endpoint URL of the Redis Enterprise Cloud database.</p>"
         },
-        "fieldMapping":{
-          "shape":"RedisEnterpriseCloudFieldMapping",
-          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
-        },
         "vectorIndexName":{
           "shape":"RedisEnterpriseCloudIndexName",
           "documentation":"<p>The name of the vector index.</p>"
+        },
+        "credentialsSecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the secret that you created in Secrets Manager that is linked to your Redis Enterprise Cloud database.</p>"
+        },
+        "fieldMapping":{
+          "shape":"RedisEnterpriseCloudFieldMapping",
+          "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains details about the storage configuration of the knowledge base in Redis Enterprise Cloud. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-oss.html\">Create a vector index in Redis Enterprise Cloud</a>.</p>"
@@ -8590,27 +9287,27 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "RedisEnterpriseCloudFieldMapping":{
       "type":"structure",
       "required":[
-        "metadataField",
+        "vectorField",
         "textField",
-        "vectorField"
+        "metadataField"
       ],
       "members":{
-        "metadataField":{
+        "vectorField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
         },
         "textField":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field in which Amazon Bedrock stores the raw text from your data. The text is split according to the chunking strategy you choose.</p>"
         },
-        "vectorField":{
+        "metadataField":{
           "shape":"FieldName",
-          "documentation":"<p>The name of the field in which Amazon Bedrock stores the vector embeddings for your data sources.</p>"
+          "documentation":"<p>The name of the field in which Amazon Bedrock stores metadata about the vector store.</p>"
         }
       },
       "documentation":"<p>Contains the names of the fields to which to map information about the vector store.</p>"
@@ -8619,7 +9316,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "RedshiftClusterIdentifier":{
       "type":"string",
@@ -8629,10 +9326,14 @@
     "RedshiftConfiguration":{
       "type":"structure",
       "required":[
-        "queryEngineConfiguration",
-        "storageConfigurations"
+        "storageConfigurations",
+        "queryEngineConfiguration"
       ],
       "members":{
+        "storageConfigurations":{
+          "shape":"RedshiftQueryEngineStorageConfigurations",
+          "documentation":"<p>Specifies configurations for Amazon Redshift database storage.</p>"
+        },
         "queryEngineConfiguration":{
           "shape":"RedshiftQueryEngineConfiguration",
           "documentation":"<p>Specifies configurations for an Amazon Redshift query engine.</p>"
@@ -8640,10 +9341,6 @@
         "queryGenerationConfiguration":{
           "shape":"QueryGenerationConfiguration",
           "documentation":"<p>Specifies configurations for generating queries.</p>"
-        },
-        "storageConfigurations":{
-          "shape":"RedshiftQueryEngineStorageConfigurations",
-          "documentation":"<p>Specifies configurations for Amazon Redshift database storage.</p>"
         }
       },
       "documentation":"<p>Contains configurations for an Amazon Redshift database. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html\">Build a knowledge base by connecting to a structured data source</a> in the Amazon Bedrock User Guide.</p>"
@@ -8657,14 +9354,14 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "databaseUser":{
-          "shape":"String",
-          "documentation":"<p>The database username for authentication to an Amazon Redshift provisioned data warehouse.</p>"
-        },
         "type":{
           "shape":"RedshiftProvisionedAuthType",
           "documentation":"<p>The type of authentication to use.</p>"
         },
+        "databaseUser":{
+          "shape":"String",
+          "documentation":"<p>The database username for authentication to an Amazon Redshift provisioned data warehouse.</p>"
+        },
         "usernamePasswordSecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The ARN of an Secrets Manager secret for authentication.</p>"
@@ -8683,17 +9380,17 @@
     "RedshiftProvisionedConfiguration":{
       "type":"structure",
       "required":[
-        "authConfiguration",
-        "clusterIdentifier"
+        "clusterIdentifier",
+        "authConfiguration"
       ],
       "members":{
-        "authConfiguration":{
-          "shape":"RedshiftProvisionedAuthConfiguration",
-          "documentation":"<p>Specifies configurations for authentication to Amazon Redshift.</p>"
-        },
         "clusterIdentifier":{
           "shape":"RedshiftClusterIdentifier",
           "documentation":"<p>The ID of the Amazon Redshift cluster.</p>"
+        },
+        "authConfiguration":{
+          "shape":"RedshiftProvisionedAuthConfiguration",
+          "documentation":"<p>Specifies configurations for authentication to Amazon Redshift.</p>"
         }
       },
       "documentation":"<p>Contains configurations for a provisioned Amazon Redshift query engine.</p>"
@@ -8713,17 +9410,17 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "provisionedConfiguration":{
-          "shape":"RedshiftProvisionedConfiguration",
-          "documentation":"<p>Specifies configurations for a provisioned Amazon Redshift query engine.</p>"
+        "type":{
+          "shape":"RedshiftQueryEngineType",
+          "documentation":"<p>The type of query engine.</p>"
         },
         "serverlessConfiguration":{
           "shape":"RedshiftServerlessConfiguration",
           "documentation":"<p>Specifies configurations for a serverless Amazon Redshift query engine.</p>"
         },
-        "type":{
-          "shape":"RedshiftQueryEngineType",
-          "documentation":"<p>The type of query engine.</p>"
+        "provisionedConfiguration":{
+          "shape":"RedshiftProvisionedConfiguration",
+          "documentation":"<p>Specifies configurations for a provisioned Amazon Redshift query engine.</p>"
         }
       },
       "documentation":"<p>Contains configurations for an Amazon Redshift query engine. Specify the type of query engine in <code>type</code> and include the corresponding field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html\">Build a knowledge base by connecting to a structured data source</a> in the Amazon Bedrock User Guide.</p>"
@@ -8743,6 +9440,10 @@
       "type":"structure",
       "required":["type"],
       "members":{
+        "type":{
+          "shape":"RedshiftQueryEngineStorageType",
+          "documentation":"<p>The data storage service to use.</p>"
+        },
         "awsDataCatalogConfiguration":{
           "shape":"RedshiftQueryEngineAwsDataCatalogStorageConfiguration",
           "documentation":"<p>Specifies configurations for storage in Glue Data Catalog.</p>"
@@ -8750,10 +9451,6 @@
         "redshiftConfiguration":{
           "shape":"RedshiftQueryEngineRedshiftStorageConfiguration",
           "documentation":"<p>Specifies configurations for storage in Amazon Redshift.</p>"
-        },
-        "type":{
-          "shape":"RedshiftQueryEngineStorageType",
-          "documentation":"<p>The data storage service to use.</p>"
         }
       },
       "documentation":"<p>Contains configurations for Amazon Redshift data storage. Specify the data storage service to use in the <code>type</code> field and include the corresponding field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html\">Build a knowledge base by connecting to a structured data source</a> in the Amazon Bedrock User Guide.</p>"
@@ -8803,17 +9500,17 @@
     "RedshiftServerlessConfiguration":{
       "type":"structure",
       "required":[
-        "authConfiguration",
-        "workgroupArn"
+        "workgroupArn",
+        "authConfiguration"
       ],
       "members":{
-        "authConfiguration":{
-          "shape":"RedshiftServerlessAuthConfiguration",
-          "documentation":"<p>Specifies configurations for authentication to an Amazon Redshift provisioned data warehouse.</p>"
-        },
         "workgroupArn":{
           "shape":"WorkgroupArn",
           "documentation":"<p>The ARN of the Amazon Redshift workgroup.</p>"
+        },
+        "authConfiguration":{
+          "shape":"RedshiftServerlessAuthConfiguration",
+          "documentation":"<p>Specifies configurations for authentication to an Amazon Redshift provisioned data warehouse.</p>"
         }
       },
       "documentation":"<p>Contains configurations for authentication to Amazon Redshift Serverless.</p>"
@@ -8833,6 +9530,28 @@
         "DISABLED"
       ]
     },
+    "RerankingMetadataSelectionMode":{
+      "type":"string",
+      "enum":[
+        "SELECTIVE",
+        "ALL"
+      ]
+    },
+    "RerankingMetadataSelectiveModeConfiguration":{
+      "type":"structure",
+      "members":{
+        "fieldsToInclude":{
+          "shape":"FieldsForReranking",
+          "documentation":"<p>Specifies the metadata fields to include in the reranking process.</p>"
+        },
+        "fieldsToExclude":{
+          "shape":"FieldsForReranking",
+          "documentation":"<p>Specifies the metadata fields to exclude from the reranking process.</p>"
+        }
+      },
+      "documentation":"<p>Configures the metadata fields to include or exclude during the reranking process when using selective mode.</p>",
+      "union":true
+    },
     "ResourceNotFoundException":{
       "type":"structure",
       "members":{
@@ -8861,7 +9580,7 @@
       "required":["bucketName"],
       "members":{
         "bucketName":{
-          "shape":"S3BucketName",
+          "shape":"FlowS3BucketName",
           "documentation":"<p>The name of the Amazon S3 bucket from which to retrieve data.</p>"
         }
       },
@@ -8882,19 +9601,19 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(|-cn|-us-gov):s3:::[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$"
+      "pattern":"arn:aws(|-cn|-us-gov):s3:::[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]"
     },
     "S3BucketName":{
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$"
+      "pattern":"[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
     },
     "S3BucketUri":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^s3://.{1,128}$"
+      "pattern":"s3://.{1,128}"
     },
     "S3Content":{
       "type":"structure",
@@ -8915,13 +9634,13 @@
           "shape":"S3BucketArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the S3 bucket that contains your data.</p>"
         },
-        "bucketOwnerAccountId":{
-          "shape":"BucketOwnerAccountId",
-          "documentation":"<p>The account ID for the owner of the S3 bucket.</p>"
-        },
         "inclusionPrefixes":{
           "shape":"S3Prefixes",
           "documentation":"<p>A list of S3 prefixes to include certain files or content. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html\">Organizing objects using prefixes</a>.</p>"
+        },
+        "bucketOwnerAccountId":{
+          "shape":"BucketOwnerAccountId",
+          "documentation":"<p>The account ID for the owner of the S3 bucket.</p>"
         }
       },
       "documentation":"<p>The configuration information to connect to Amazon S3 as your data source.</p>"
@@ -8955,13 +9674,13 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[\\.\\-\\!\\*\\_\\'\\(\\)a-zA-Z0-9][\\.\\-\\!\\*\\_\\'\\(\\)\\/a-zA-Z0-9]*$"
+      "pattern":"[\\.\\-\\!\\*\\_\\'\\(\\)a-zA-Z0-9][\\.\\-\\!\\*\\_\\'\\(\\)\\/a-zA-Z0-9]*"
     },
     "S3ObjectUri":{
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}$"
+      "pattern":"s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}"
     },
     "S3Prefix":{
       "type":"string",
@@ -8975,6 +9694,24 @@
       "max":1,
       "min":1
     },
+    "S3VectorsConfiguration":{
+      "type":"structure",
+      "members":{
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 bucket where vector embeddings are stored. This bucket contains the vector data used by the knowledge base.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector index used for the knowledge base. This ARN identifies the specific vector index resource within Amazon Bedrock.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index used for the knowledge base. This name identifies the vector index within the Amazon Bedrock service.</p>"
+        }
+      },
+      "documentation":"<p>Contains the storage configuration of the knowledge base for S3 vectors.</p>"
+    },
     "SalesforceAuthType":{
       "type":"string",
       "enum":["OAUTH2_CLIENT_CREDENTIALS"]
@@ -8993,13 +9730,13 @@
       "type":"structure",
       "required":["sourceConfiguration"],
       "members":{
-        "crawlerConfiguration":{
-          "shape":"SalesforceCrawlerConfiguration",
-          "documentation":"<p>The configuration of the Salesforce content. For example, configuring specific types of Salesforce content.</p>"
-        },
         "sourceConfiguration":{
           "shape":"SalesforceSourceConfiguration",
           "documentation":"<p>The endpoint information to connect to your Salesforce data source.</p>"
+        },
+        "crawlerConfiguration":{
+          "shape":"SalesforceCrawlerConfiguration",
+          "documentation":"<p>The configuration of the Salesforce content. For example, configuring specific types of Salesforce content.</p>"
         }
       },
       "documentation":"<p>The configuration information to connect to Salesforce as your data source.</p>"
@@ -9007,11 +9744,15 @@
     "SalesforceSourceConfiguration":{
       "type":"structure",
       "required":[
+        "hostUrl",
         "authType",
-        "credentialsSecretArn",
-        "hostUrl"
+        "credentialsSecretArn"
       ],
       "members":{
+        "hostUrl":{
+          "shape":"HttpsUrl",
+          "documentation":"<p>The Salesforce host URL or instance URL.</p>"
+        },
         "authType":{
           "shape":"SalesforceAuthType",
           "documentation":"<p>The supported authentication type to authenticate and connect to your Salesforce instance.</p>"
@@ -9019,17 +9760,13 @@
         "credentialsSecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name of an Secrets Manager secret that stores your authentication credentials for your Salesforce instance URL. For more information on the key-value pairs that must be included in your secret, depending on your authentication type, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/salesforce-data-source-connector.html#configuration-salesforce-connector\">Salesforce connection configuration</a>.</p>"
-        },
-        "hostUrl":{
-          "shape":"HttpsUrl",
-          "documentation":"<p>The Salesforce host URL or instance URL.</p>"
         }
       },
       "documentation":"<p>The endpoint information to connect to your Salesforce data source.</p>"
     },
     "SecretArn":{
       "type":"string",
-      "pattern":"^arn:aws(|-cn|-us-gov):secretsmanager:[a-z0-9-]{1,20}:([0-9]{12}|):secret:[a-zA-Z0-9!/_+=.@-]{1,512}$"
+      "pattern":"arn:aws(|-cn|-us-gov):secretsmanager:[a-z0-9-]{1,20}:([0-9]{12}|):secret:[a-zA-Z0-9!/_+=.@-]{1,512}"
     },
     "SeedUrl":{
       "type":"structure",
@@ -9050,22 +9787,22 @@
     "SemanticChunkingConfiguration":{
       "type":"structure",
       "required":[
-        "breakpointPercentileThreshold",
+        "maxTokens",
         "bufferSize",
-        "maxTokens"
+        "breakpointPercentileThreshold"
       ],
       "members":{
-        "breakpointPercentileThreshold":{
-          "shape":"SemanticChunkingConfigurationBreakpointPercentileThresholdInteger",
-          "documentation":"<p>The dissimilarity threshold for splitting chunks.</p>"
+        "maxTokens":{
+          "shape":"SemanticChunkingConfigurationMaxTokensInteger",
+          "documentation":"<p>The maximum number of tokens that a chunk can contain.</p>"
         },
         "bufferSize":{
           "shape":"SemanticChunkingConfigurationBufferSizeInteger",
           "documentation":"<p>The buffer size.</p>"
         },
-        "maxTokens":{
-          "shape":"SemanticChunkingConfigurationMaxTokensInteger",
-          "documentation":"<p>The maximum number of tokens that a chunk can contain.</p>"
+        "breakpointPercentileThreshold":{
+          "shape":"SemanticChunkingConfigurationBreakpointPercentileThresholdInteger",
+          "documentation":"<p>The dissimilarity threshold for splitting chunks.</p>"
         }
       },
       "documentation":"<p>Settings for semantic document chunking for a data source. Semantic chunking splits a document into into smaller documents based on groups of similar content derived from the text with natural language processing.</p> <p>With semantic chunking, each sentence is compared to the next to determine how similar they are. You specify a threshold in the form of a percentile, where adjacent sentences that are less similar than that percentage of sentence pairs are divided into separate chunks. For example, if you set the threshold to 90, then the 10 percent of sentence pairs that are least similar are split. So if you have 101 sentences, 100 sentence pairs are compared, and the 10 with the least similarity are split, creating 11 chunks. These chunks are further split if they exceed the max token size.</p> <p>You must also specify a buffer size, which determines whether sentences are compared in isolation, or within a moving context window that includes the previous and following sentence. For example, if you set the buffer size to <code>1</code>, the embedding for sentence 10 is derived from sentences 9, 10, and 11 combined.</p>"
@@ -9122,7 +9859,7 @@
     "SessionTTL":{
       "type":"integer",
       "box":true,
-      "max":3600,
+      "max":5400,
       "min":60
     },
     "SharePointAuthType":{
@@ -9146,13 +9883,13 @@
       "type":"structure",
       "required":["sourceConfiguration"],
       "members":{
-        "crawlerConfiguration":{
-          "shape":"SharePointCrawlerConfiguration",
-          "documentation":"<p>The configuration of the SharePoint content. For example, configuring specific types of SharePoint content.</p>"
-        },
         "sourceConfiguration":{
           "shape":"SharePointSourceConfiguration",
           "documentation":"<p>The endpoint information to connect to your SharePoint data source.</p>"
+        },
+        "crawlerConfiguration":{
+          "shape":"SharePointCrawlerConfiguration",
+          "documentation":"<p>The configuration of the SharePoint content. For example, configuring specific types of SharePoint content.</p>"
         }
       },
       "documentation":"<p>The configuration information to connect to SharePoint as your data source.</p>"
@@ -9175,36 +9912,36 @@
     "SharePointSourceConfiguration":{
       "type":"structure",
       "required":[
-        "authType",
-        "credentialsSecretArn",
         "domain",
+        "siteUrls",
         "hostType",
-        "siteUrls"
+        "authType",
+        "credentialsSecretArn"
       ],
       "members":{
-        "authType":{
-          "shape":"SharePointAuthType",
-          "documentation":"<p>The supported authentication type to authenticate and connect to your SharePoint site/sites.</p>"
-        },
-        "credentialsSecretArn":{
-          "shape":"SecretArn",
-          "documentation":"<p>The Amazon Resource Name of an Secrets Manager secret that stores your authentication credentials for your SharePoint site/sites. For more information on the key-value pairs that must be included in your secret, depending on your authentication type, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sharepoint-data-source-connector.html#configuration-sharepoint-connector\">SharePoint connection configuration</a>.</p>"
+        "tenantId":{
+          "shape":"Microsoft365TenantId",
+          "documentation":"<p>The identifier of your Microsoft 365 tenant.</p>"
         },
         "domain":{
           "shape":"SharePointDomain",
           "documentation":"<p>The domain of your SharePoint instance or site URL/URLs.</p>"
         },
+        "siteUrls":{
+          "shape":"SharePointSiteUrls",
+          "documentation":"<p>A list of one or more SharePoint site URLs.</p>"
+        },
         "hostType":{
           "shape":"SharePointHostType",
           "documentation":"<p>The supported host type, whether online/cloud or server/on-premises.</p>"
         },
-        "siteUrls":{
-          "shape":"SharePointSiteUrls",
-          "documentation":"<p>A list of one or more SharePoint site URLs.</p>"
+        "authType":{
+          "shape":"SharePointAuthType",
+          "documentation":"<p>The supported authentication type to authenticate and connect to your SharePoint site/sites.</p>"
         },
-        "tenantId":{
-          "shape":"Microsoft365TenantId",
-          "documentation":"<p>The identifier of your Microsoft 365 tenant.</p>"
+        "credentialsSecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The Amazon Resource Name of an Secrets Manager secret that stores your authentication credentials for your SharePoint site/sites. For more information on the key-value pairs that must be included in your secret, depending on your authentication type, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sharepoint-data-source-connector.html#configuration-sharepoint-connector\">SharePoint connection configuration</a>.</p>"
         }
       },
       "documentation":"<p>The endpoint information to connect to your SharePoint data source.</p>"
@@ -9231,13 +9968,13 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "redshiftConfiguration":{
-          "shape":"RedshiftConfiguration",
-          "documentation":"<p>Specifies configurations for a knowledge base connected to an Amazon Redshift database.</p>"
-        },
         "type":{
           "shape":"QueryEngineType",
           "documentation":"<p>The type of SQL database to connect to the knowledge base.</p>"
+        },
+        "redshiftConfiguration":{
+          "shape":"RedshiftConfiguration",
+          "documentation":"<p>Specifies configurations for a knowledge base connected to an Amazon Redshift database.</p>"
         }
       },
       "documentation":"<p>Contains configurations for a knowledge base connected to an SQL database. Specify the SQL database type in the <code>type</code> field and include the corresponding field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-build-structured.html\">Build a knowledge base by connecting to a structured data source</a> in the Amazon Bedrock User Guide.</p>"
@@ -9250,14 +9987,15 @@
     "StartIngestionJobRequest":{
       "type":"structure",
       "required":[
-        "dataSourceId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "dataSourceId"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
-          "idempotencyToken":true
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
         "dataSourceId":{
           "shape":"Id",
@@ -9265,15 +10003,14 @@
           "location":"uri",
           "locationName":"dataSourceId"
         },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the data ingestion job.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -9294,11 +10031,17 @@
     "StopIngestionJobRequest":{
       "type":"structure",
       "required":[
+        "knowledgeBaseId",
         "dataSourceId",
-        "ingestionJobId",
-        "knowledgeBaseId"
+        "ingestionJobId"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job you want to stop.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "dataSourceId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the data source for the data ingestion job you want to stop.</p>",
@@ -9310,12 +10053,6 @@
           "documentation":"<p>The unique identifier of the data ingestion job you want to stop.</p>",
           "location":"uri",
           "locationName":"ingestionJobId"
-        },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the data ingestion job you want to stop.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -9339,29 +10076,41 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "mongoDbAtlasConfiguration":{
-          "shape":"MongoDbAtlasConfiguration",
-          "documentation":"<p>Contains the storage configuration of the knowledge base in MongoDB Atlas.</p>"
+        "type":{
+          "shape":"KnowledgeBaseStorageType",
+          "documentation":"<p>The vector store service in which the knowledge base is stored.</p>"
         },
         "opensearchServerlessConfiguration":{
           "shape":"OpenSearchServerlessConfiguration",
           "documentation":"<p>Contains the storage configuration of the knowledge base in Amazon OpenSearch Service.</p>"
         },
+        "opensearchManagedClusterConfiguration":{
+          "shape":"OpenSearchManagedClusterConfiguration",
+          "documentation":"<p>Contains details about the storage configuration of the knowledge base in OpenSearch Managed Cluster. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-osm.html\">Create a vector index in Amazon OpenSearch Service</a>.</p>"
+        },
         "pineconeConfiguration":{
           "shape":"PineconeConfiguration",
           "documentation":"<p>Contains the storage configuration of the knowledge base in Pinecone.</p>"
         },
+        "redisEnterpriseCloudConfiguration":{
+          "shape":"RedisEnterpriseCloudConfiguration",
+          "documentation":"<p>Contains the storage configuration of the knowledge base in Redis Enterprise Cloud.</p>"
+        },
         "rdsConfiguration":{
           "shape":"RdsConfiguration",
           "documentation":"<p>Contains details about the storage configuration of the knowledge base in Amazon RDS. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html\">Create a vector index in Amazon RDS</a>.</p>"
         },
-        "redisEnterpriseCloudConfiguration":{
-          "shape":"RedisEnterpriseCloudConfiguration",
-          "documentation":"<p>Contains the storage configuration of the knowledge base in Redis Enterprise Cloud.</p>"
+        "mongoDbAtlasConfiguration":{
+          "shape":"MongoDbAtlasConfiguration",
+          "documentation":"<p>Contains the storage configuration of the knowledge base in MongoDB Atlas.</p>"
         },
-        "type":{
-          "shape":"KnowledgeBaseStorageType",
-          "documentation":"<p>The vector store service in which the knowledge base is stored.</p>"
+        "neptuneAnalyticsConfiguration":{
+          "shape":"NeptuneAnalyticsConfiguration",
+          "documentation":"<p>Contains details about the Neptune Analytics configuration of the knowledge base in Amazon Neptune. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-neptune.html\">Create a vector index in Amazon Neptune Analytics.</a>.</p>"
+        },
+        "s3VectorsConfiguration":{
+          "shape":"S3VectorsConfiguration",
+          "documentation":"<p>The configuration settings for storing knowledge base data using S3 vectors. This includes vector index information and S3 bucket details for vector storage.</p>"
         }
       },
       "documentation":"<p>Contains the storage configuration of the knowledge base.</p>"
@@ -9388,7 +10137,7 @@
       "required":["bucketName"],
       "members":{
         "bucketName":{
-          "shape":"S3BucketName",
+          "shape":"FlowS3BucketName",
           "documentation":"<p>The name of the Amazon S3 bucket in which to store the input into the node.</p>"
         }
       },
@@ -9427,13 +10176,13 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "s3Location":{
-          "shape":"S3Location",
-          "documentation":"<p>Contains information about the Amazon S3 location for the extracted images.</p>"
-        },
         "type":{
           "shape":"SupplementalDataStorageLocationType",
           "documentation":"<p>Specifies the storage service used for this location.</p>"
+        },
+        "s3Location":{
+          "shape":"S3Location",
+          "documentation":"<p>Contains information about the Amazon S3 location for the extracted images.</p>"
         }
       },
       "documentation":"<p>Contains information about a storage location for images extracted from multimodal documents in your data source.</p>"
@@ -9448,12 +10197,20 @@
       "max":1,
       "min":1
     },
+    "SupportedLanguages":{
+      "type":"string",
+      "enum":["Python_3"]
+    },
     "SystemContentBlock":{
       "type":"structure",
       "members":{
         "text":{
           "shape":"NonEmptyString",
           "documentation":"<p>The text in the system prompt.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>Creates a cache checkpoint within a tool designation</p>"
         }
       },
       "documentation":"<p>Contains a system prompt to provide context to the model or to describe how it should behave. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-create.html\">Create a prompt using Prompt management</a>.</p>",
@@ -9468,7 +10225,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[a-zA-Z0-9\\s._:/=+@-]*$"
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
     },
     "TagKeyList":{
       "type":"list",
@@ -9504,13 +10261,13 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^[a-zA-Z0-9\\s._:/=+@-]*$"
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
     },
     "TaggableResourcesArn":{
       "type":"string",
       "max":1011,
       "min":20,
-      "pattern":"(^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:(agent|agent-alias|knowledge-base|flow|prompt)/[A-Z0-9]{10}(?:/[A-Z0-9]{10})?$|^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:flow/([A-Z0-9]{10})/alias/([A-Z0-9]{10})$|^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:prompt/([A-Z0-9]{10})?(?::/d+)?$)"
+      "pattern":".*(^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:(agent|agent-alias|knowledge-base|flow|prompt)/[A-Z0-9]{10}(?:/[A-Z0-9]{10})?$|^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:flow/([A-Z0-9]{10})/alias/([A-Z0-9]{10})$|^arn:aws:bedrock:[a-zA-Z0-9-]+:/d{12}:prompt/([A-Z0-9]{10})?(?::/d+)?$).*"
     },
     "TagsMap":{
       "type":"map",
@@ -9536,7 +10293,6 @@
     },
     "TextPrompt":{
       "type":"string",
-      "max":200000,
       "min":1,
       "sensitive":true
     },
@@ -9544,13 +10300,17 @@
       "type":"structure",
       "required":["text"],
       "members":{
-        "inputVariables":{
-          "shape":"PromptInputVariablesList",
-          "documentation":"<p>An array of the variables in the prompt template.</p>"
-        },
         "text":{
           "shape":"TextPrompt",
           "documentation":"<p>The message for the prompt.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>A cache checkpoint within a template configuration.</p>"
+        },
+        "inputVariables":{
+          "shape":"PromptInputVariablesList",
+          "documentation":"<p>An array of the variables in the prompt template.</p>"
         }
       },
       "documentation":"<p>Contains configurations for a text prompt template. To include a variable, enclose a word in double curly braces as in <code>{{variable}}</code>.</p>",
@@ -9574,6 +10334,10 @@
         "toolSpec":{
           "shape":"ToolSpecification",
           "documentation":"<p>The specification for the tool.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>Creates a cache checkpoint within a tool designation</p>"
         }
       },
       "documentation":"<p>Contains configurations for a tool that a model can use when generating a response. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Use a tool to complete an Amazon Bedrock model response</a>.</p>",
@@ -9582,14 +10346,14 @@
     "ToolChoice":{
       "type":"structure",
       "members":{
-        "any":{
-          "shape":"AnyToolChoice",
-          "documentation":"<p>Defines tools, at least one of which must be requested by the model. No text is generated but the results of tool use are sent back to the model to help generate a response.</p>"
-        },
         "auto":{
           "shape":"AutoToolChoice",
           "documentation":"<p>Defines tools. The model automatically decides whether to call a tool or to generate text instead.</p>"
         },
+        "any":{
+          "shape":"AnyToolChoice",
+          "documentation":"<p>Defines tools, at least one of which must be requested by the model. No text is generated but the results of tool use are sent back to the model to help generate a response.</p>"
+        },
         "tool":{
           "shape":"SpecificToolChoice",
           "documentation":"<p>Defines a specific tool that the model must request. No text is generated but the results of tool use are sent back to the model to help generate a response.</p>"
@@ -9603,13 +10367,13 @@
       "type":"structure",
       "required":["tools"],
       "members":{
-        "toolChoice":{
-          "shape":"ToolChoice",
-          "documentation":"<p>Defines which tools the model should request when invoked.</p>"
-        },
         "tools":{
           "shape":"ToolConfigurationToolsList",
           "documentation":"<p>An array of tools to pass to a model.</p>"
+        },
+        "toolChoice":{
+          "shape":"ToolChoice",
+          "documentation":"<p>Defines which tools the model should request when invoked.</p>"
         }
       },
       "documentation":"<p>Configuration information for the tools that the model can use when generating a response. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Use a tool to complete an Amazon Bedrock model response</a>.</p>"
@@ -9635,15 +10399,19 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z][a-zA-Z0-9_]*$"
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]*"
     },
     "ToolSpecification":{
       "type":"structure",
       "required":[
-        "inputSchema",
-        "name"
+        "name",
+        "inputSchema"
       ],
       "members":{
+        "name":{
+          "shape":"ToolName",
+          "documentation":"<p>The name of the tool.</p>"
+        },
         "description":{
           "shape":"NonEmptyString",
           "documentation":"<p>The description of the tool.</p>"
@@ -9651,10 +10419,6 @@
         "inputSchema":{
           "shape":"ToolInputSchema",
           "documentation":"<p>The input schema for the tool.</p>"
-        },
-        "name":{
-          "shape":"ToolName",
-          "documentation":"<p>The name of the tool.</p>"
         }
       },
       "documentation":"<p>Contains a specification for a tool. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Use a tool to complete an Amazon Bedrock model response</a>.</p>"
@@ -9674,17 +10438,17 @@
     "Transformation":{
       "type":"structure",
       "required":[
-        "stepToApply",
-        "transformationFunction"
+        "transformationFunction",
+        "stepToApply"
       ],
       "members":{
-        "stepToApply":{
-          "shape":"StepType",
-          "documentation":"<p>When the service applies the transformation.</p>"
-        },
         "transformationFunction":{
           "shape":"TransformationFunction",
           "documentation":"<p>A Lambda function that processes documents.</p>"
+        },
+        "stepToApply":{
+          "shape":"StepType",
+          "documentation":"<p>When the service applies the transformation.</p>"
         }
       },
       "documentation":"<p>A custom processing step for documents moving through a data source ingestion pipeline. To process documents after they have been converted into chunks, set the step to apply to <code>POST_CHUNKING</code>.</p>"
@@ -9730,17 +10494,17 @@
     "UnfulfilledNodeInputFlowValidationDetails":{
       "type":"structure",
       "required":[
-        "input",
-        "node"
+        "node",
+        "input"
       ],
       "members":{
-        "input":{
-          "shape":"FlowNodeInputName",
-          "documentation":"<p>The name of the unfulfilled input. An input is unfulfilled if there are no data connections to it.</p>"
-        },
         "node":{
           "shape":"FlowNodeName",
           "documentation":"<p>The name of the node containing the unfulfilled input.</p>"
+        },
+        "input":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the unfulfilled input. An input is unfulfilled if there are no data connections to it.</p>"
         }
       },
       "documentation":"<p>Details about an unfulfilled node input with no valid connections.</p>"
@@ -9800,6 +10564,42 @@
       },
       "documentation":"<p>Details about an unknown target input for a connection.</p>"
     },
+    "UnknownNodeInputFlowValidationDetails":{
+      "type":"structure",
+      "required":[
+        "node",
+        "input"
+      ],
+      "members":{
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The name of the unknown input.</p>"
+        },
+        "input":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the node with the unknown input.</p>"
+        }
+      },
+      "documentation":"<p>Details about an unknown input for a node.</p>"
+    },
+    "UnknownNodeOutputFlowValidationDetails":{
+      "type":"structure",
+      "required":[
+        "node",
+        "output"
+      ],
+      "members":{
+        "node":{
+          "shape":"FlowNodeName",
+          "documentation":"<p>The name of the node with the unknown output.</p>"
+        },
+        "output":{
+          "shape":"FlowNodeOutputName",
+          "documentation":"<p>The name of the unknown output.</p>"
+        }
+      },
+      "documentation":"<p>Details about an unknown output for a node.</p>"
+    },
     "UnreachableNodeFlowValidationDetails":{
       "type":"structure",
       "required":["node"],
@@ -9857,15 +10657,23 @@
     "UpdateAgentActionGroupRequest":{
       "type":"structure",
       "required":[
-        "actionGroupId",
-        "actionGroupName",
         "agentId",
-        "agentVersion"
+        "agentVersion",
+        "actionGroupId",
+        "actionGroupName"
       ],
       "members":{
-        "actionGroupExecutor":{
-          "shape":"ActionGroupExecutor",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action.</p>"
+        "agentId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the agent for which to update the action group.</p>",
+          "location":"uri",
+          "locationName":"agentId"
+        },
+        "agentVersion":{
+          "shape":"DraftVersion",
+          "documentation":"<p>The unique identifier of the agent version for which to update the action group.</p>",
+          "location":"uri",
+          "locationName":"agentVersion"
         },
         "actionGroupId":{
           "shape":"Id",
@@ -9877,37 +10685,33 @@
           "shape":"Name",
           "documentation":"<p>Specifies a new name for the action group.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>Specifies a new name for the action group.</p>"
+        },
+        "parentActionGroupSignature":{
+          "shape":"ActionGroupSignature",
+          "documentation":"<p>Update the built-in or computer use action for this action group. If you specify a value, you must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields empty for this action group. </p> <ul> <li> <p>To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. </p> </li> <li> <p>To allow your agent to generate, run, and troubleshoot code when trying to complete a task, set this field to <code>AMAZON.CodeInterpreter</code>.</p> </li> <li> <p>To allow your agent to use an Anthropic computer use tool, specify one of the following values. </p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Anthropic Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. When operating computer use functionality, we recommend taking additional security precautions, such as executing computer actions in virtual environments with restricted data access and limited internet connectivity. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important> <ul> <li> <p> <code>ANTHROPIC.Computer</code> - Gives the agent permission to use the mouse and keyboard and take screenshots.</p> </li> <li> <p> <code>ANTHROPIC.TextEditor</code> - Gives the agent permission to view, create and edit files.</p> </li> <li> <p> <code>ANTHROPIC.Bash</code> - Gives the agent permission to run commands in a bash shell.</p> </li> </ul> </li> </ul> <p>During orchestration, if your agent determines that it needs to invoke an API in an action group, but doesn't have enough information to complete the API request, it will invoke this action group instead and return an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Observation.html\">Observation</a> reprompting the user for more information.</p>"
+        },
+        "parentActionGroupSignatureParams":{
+          "shape":"ActionGroupSignatureParams",
+          "documentation":"<p>The configuration settings for a computer use action.</p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important>"
+        },
+        "actionGroupExecutor":{
+          "shape":"ActionGroupExecutor",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action.</p>"
+        },
         "actionGroupState":{
           "shape":"ActionGroupState",
           "documentation":"<p>Specifies whether the action group is available for the agent to invoke or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
         },
-        "agentId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the agent for which to update the action group.</p>",
-          "location":"uri",
-          "locationName":"agentId"
-        },
-        "agentVersion":{
-          "shape":"DraftVersion",
-          "documentation":"<p>The unique identifier of the agent version for which to update the action group.</p>",
-          "location":"uri",
-          "locationName":"agentVersion"
-        },
         "apiSchema":{
           "shape":"APISchema",
           "documentation":"<p>Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>Specifies a new name for the action group.</p>"
-        },
         "functionSchema":{
           "shape":"FunctionSchema",
           "documentation":"<p>Contains details about the function schema for the action group or the JSON or YAML-formatted payload defining the schema.</p>"
-        },
-        "parentActionGroupSignature":{
-          "shape":"ActionGroupSignature",
-          "documentation":"<p>To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. You must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields blank for this action group.</p> <p>During orchestration, if your agent determines that it needs to invoke an API in an action group, but doesn't have enough information to complete the API request, it will invoke this action group instead and return an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Observation.html\">Observation</a> reprompting the user for more information.</p>"
         }
       }
     },
@@ -9924,11 +10728,17 @@
     "UpdateAgentAliasRequest":{
       "type":"structure",
       "required":[
+        "agentId",
         "agentAliasId",
-        "agentAliasName",
-        "agentId"
+        "agentAliasName"
       ],
       "members":{
+        "agentId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the agent.</p>",
+          "location":"uri",
+          "locationName":"agentId"
+        },
         "agentAliasId":{
           "shape":"AgentAliasId",
           "documentation":"<p>The unique identifier of the alias.</p>",
@@ -9939,12 +10749,6 @@
           "shape":"Name",
           "documentation":"<p>Specifies a new name for the alias.</p>"
         },
-        "agentId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the agent.</p>",
-          "location":"uri",
-          "locationName":"agentId"
-        },
         "description":{
           "shape":"Description",
           "documentation":"<p>Specifies a new description for the alias.</p>"
@@ -9952,6 +10756,10 @@
         "routingConfiguration":{
           "shape":"AgentAliasRoutingConfiguration",
           "documentation":"<p>Contains details about the routing configuration of the alias.</p>"
+        },
+        "aliasInvocationState":{
+          "shape":"AliasInvocationState",
+          "documentation":"<p>The invocation state for the agent alias. To pause the agent alias, set the value to <code>REJECT_INVOCATIONS</code>. To start the agent alias running again, set the value to <code>ACCEPT_INVOCATIONS</code>. Use the <code>GetAgentAlias</code>, or <code>ListAgentAliases</code>, operation to get the invocation state of an agent alias.</p>"
         }
       }
     },
@@ -9968,18 +10776,14 @@
     "UpdateAgentCollaboratorRequest":{
       "type":"structure",
       "required":[
-        "agentDescriptor",
         "agentId",
         "agentVersion",
-        "collaborationInstruction",
         "collaboratorId",
-        "collaboratorName"
+        "agentDescriptor",
+        "collaboratorName",
+        "collaborationInstruction"
       ],
       "members":{
-        "agentDescriptor":{
-          "shape":"AgentDescriptor",
-          "documentation":"<p>An agent descriptor for the agent collaborator.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The agent's ID.</p>",
@@ -9992,20 +10796,24 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
-        "collaborationInstruction":{
-          "shape":"CollaborationInstruction",
-          "documentation":"<p>Instruction for the collaborator.</p>"
-        },
         "collaboratorId":{
           "shape":"Id",
           "documentation":"<p>The collaborator's ID.</p>",
           "location":"uri",
           "locationName":"collaboratorId"
         },
+        "agentDescriptor":{
+          "shape":"AgentDescriptor",
+          "documentation":"<p>An agent descriptor for the agent collaborator.</p>"
+        },
         "collaboratorName":{
           "shape":"Name",
           "documentation":"<p>The collaborator's name.</p>"
         },
+        "collaborationInstruction":{
+          "shape":"CollaborationInstruction",
+          "documentation":"<p>Instruction for the collaborator.</p>"
+        },
         "relayConversationHistory":{
           "shape":"RelayConversationHistory",
           "documentation":"<p>A relay conversation history for the collaborator.</p>"
@@ -10042,16 +10850,16 @@
           "location":"uri",
           "locationName":"agentVersion"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>Specifies a new description for the knowledge base associated with an agent.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base that has been associated with an agent.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>Specifies a new description for the knowledge base associated with an agent.</p>"
+        },
         "knowledgeBaseState":{
           "shape":"KnowledgeBaseState",
           "documentation":"<p>Specifies whether the agent uses the knowledge base or not when sending an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request.</p>"
@@ -10073,14 +10881,10 @@
       "required":[
         "agentId",
         "agentName",
-        "agentResourceRoleArn",
-        "foundationModel"
+        "foundationModel",
+        "agentResourceRoleArn"
       ],
       "members":{
-        "agentCollaboration":{
-          "shape":"AgentCollaboration",
-          "documentation":"<p>The agent's collaboration role.</p>"
-        },
         "agentId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the agent.</p>",
@@ -10091,49 +10895,53 @@
           "shape":"Name",
           "documentation":"<p>Specifies a new name for the agent.</p>"
         },
-        "agentResourceRoleArn":{
-          "shape":"AgentRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p>Specifies new instructions that tell the agent what it should do and how it should interact with users.</p>"
+        },
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The identifier for the model that you want to be used for orchestration by the agent you create.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>Specifies a new description of the agent.</p>"
+        },
+        "orchestrationType":{
+          "shape":"OrchestrationType",
+          "documentation":"<p> Specifies the type of orchestration strategy for the agent. This is set to <code>DEFAULT</code> orchestration type, by default. </p>"
         },
         "customOrchestration":{
           "shape":"CustomOrchestration",
           "documentation":"<p> Contains details of the custom orchestration configured for the agent. </p>"
         },
+        "idleSessionTTLInSeconds":{
+          "shape":"SessionTTL",
+          "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
+        },
+        "agentResourceRoleArn":{
+          "shape":"AgentRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent.</p>"
+        },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key with which to encrypt the agent.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>Specifies a new description of the agent.</p>"
-        },
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The identifier for the model that you want to be used for orchestration by the agent you create.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>"
+        "promptOverrideConfiguration":{
+          "shape":"PromptOverrideConfiguration",
+          "documentation":"<p>Contains configurations to override prompts in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
         },
         "guardrailConfiguration":{
           "shape":"GuardrailConfiguration",
           "documentation":"<p>The unique Guardrail configuration assigned to the agent when it is updated.</p>"
         },
-        "idleSessionTTLInSeconds":{
-          "shape":"SessionTTL",
-          "documentation":"<p>The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout.</p>"
-        },
-        "instruction":{
-          "shape":"Instruction",
-          "documentation":"<p>Specifies new instructions that tell the agent what it should do and how it should interact with users.</p>"
-        },
         "memoryConfiguration":{
           "shape":"MemoryConfiguration",
           "documentation":"<p>Specifies the new memory configuration for the agent. </p>"
         },
-        "orchestrationType":{
-          "shape":"OrchestrationType",
-          "documentation":"<p> Specifies the type of orchestration strategy for the agent. This is set to <code>DEFAULT</code> orchestration type, by default. </p>"
-        },
-        "promptOverrideConfiguration":{
-          "shape":"PromptOverrideConfiguration",
-          "documentation":"<p>Contains configurations to override prompts in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p>"
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p>The agent's collaboration role.</p>"
         }
       }
     },
@@ -10150,19 +10958,17 @@
     "UpdateDataSourceRequest":{
       "type":"structure",
       "required":[
-        "dataSourceConfiguration",
-        "dataSourceId",
         "knowledgeBaseId",
-        "name"
+        "dataSourceId",
+        "name",
+        "dataSourceConfiguration"
       ],
       "members":{
-        "dataDeletionPolicy":{
-          "shape":"DataDeletionPolicy",
-          "documentation":"<p>The data deletion policy for the data source that you want to update.</p>"
-        },
-        "dataSourceConfiguration":{
-          "shape":"DataSourceConfiguration",
-          "documentation":"<p>The connection configuration for the data source that you want to update.</p>"
+        "knowledgeBaseId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier of the knowledge base for the data source.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
         "dataSourceId":{
           "shape":"Id",
@@ -10170,19 +10976,21 @@
           "location":"uri",
           "locationName":"dataSourceId"
         },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>Specifies a new name for the data source.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>Specifies a new description for the data source.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Id",
-          "documentation":"<p>The unique identifier of the knowledge base for the data source.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "dataSourceConfiguration":{
+          "shape":"DataSourceConfiguration",
+          "documentation":"<p>The connection configuration for the data source that you want to update.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>Specifies a new name for the data source.</p>"
+        "dataDeletionPolicy":{
+          "shape":"DataDeletionPolicy",
+          "documentation":"<p>The data deletion policy for the data source that you want to update.</p>"
         },
         "serverSideEncryptionConfiguration":{
           "shape":"ServerSideEncryptionConfiguration",
@@ -10207,62 +11015,70 @@
     "UpdateFlowAliasRequest":{
       "type":"structure",
       "required":[
-        "aliasIdentifier",
-        "flowIdentifier",
         "name",
-        "routingConfiguration"
+        "routingConfiguration",
+        "flowIdentifier",
+        "aliasIdentifier"
       ],
       "members":{
-        "aliasIdentifier":{
-          "shape":"FlowAliasIdentifier",
-          "documentation":"<p>The unique identifier of the alias.</p>",
-          "location":"uri",
-          "locationName":"aliasIdentifier"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description for the alias.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>Contains information about the version to which to map the alias.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed in parallel.</p>"
+        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
-        },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>Contains information about the version to which to map the alias.</p>"
+        "aliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the alias.</p>",
+          "location":"uri",
+          "locationName":"aliasIdentifier"
         }
       }
     },
     "UpdateFlowAliasResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "flowId",
-        "id",
         "name",
         "routingConfiguration",
+        "flowId",
+        "id",
+        "arn",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowAliasArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the alias.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the flow.</p>"
         },
+        "routingConfiguration":{
+          "shape":"FlowAliasRoutingConfiguration",
+          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        },
+        "concurrencyConfiguration":{
+          "shape":"FlowAliasConcurrencyConfiguration",
+          "documentation":"<p>The configuration that specifies how nodes in the flow are executed in parallel.</p>"
+        },
         "flowId":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
@@ -10271,13 +11087,13 @@
           "shape":"FlowAliasId",
           "documentation":"<p>The unique identifier of the alias.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the alias.</p>"
+        "arn":{
+          "shape":"FlowAliasArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
-        "routingConfiguration":{
-          "shape":"FlowAliasRoutingConfiguration",
-          "documentation":"<p>Contains information about the version that the alias is mapped to.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
         },
         "updatedAt":{
           "shape":"DateTimestamp",
@@ -10288,18 +11104,14 @@
     "UpdateFlowRequest":{
       "type":"structure",
       "required":[
+        "name",
         "executionRoleArn",
-        "flowIdentifier",
-        "name"
+        "flowIdentifier"
       ],
       "members":{
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to encrypt the flow.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>A definition of the nodes and the connections between the nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>A name for the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -10309,46 +11121,38 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create and manage a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to encrypt the flow.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>A definition of the nodes and the connections between the nodes in the flow.</p>"
+        },
         "flowIdentifier":{
           "shape":"FlowIdentifier",
           "documentation":"<p>The unique identifier of the flow.</p>",
           "location":"uri",
           "locationName":"flowIdentifier"
-        },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>A name for the flow.</p>"
         }
       }
     },
     "UpdateFlowResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
+        "name",
         "executionRoleArn",
         "id",
-        "name",
+        "arn",
         "status",
+        "createdAt",
         "updatedAt",
         "version"
       ],
       "members":{
-        "arn":{
-          "shape":"FlowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
-        },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the flow was created.</p>"
-        },
-        "customerEncryptionKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the flow was encrypted with.</p>"
-        },
-        "definition":{
-          "shape":"FlowDefinition",
-          "documentation":"<p>A definition of the nodes and the connections between nodes in the flow.</p>"
+        "name":{
+          "shape":"FlowName",
+          "documentation":"<p>The name of the flow.</p>"
         },
         "description":{
           "shape":"FlowDescription",
@@ -10358,18 +11162,26 @@
           "shape":"FlowExecutionRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service role with permissions to create a flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-permissions.html\">Create a service role for flows in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p>"
         },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that the flow was encrypted with.</p>"
+        },
         "id":{
           "shape":"FlowId",
           "documentation":"<p>The unique identifier of the flow.</p>"
         },
-        "name":{
-          "shape":"FlowName",
-          "documentation":"<p>The name of the flow.</p>"
+        "arn":{
+          "shape":"FlowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
         },
         "status":{
           "shape":"FlowStatus",
           "documentation":"<p>The status of the flow. When you submit this request, the status will be <code>NotPrepared</code>. If updating fails, the status becomes <code>Failed</code>.</p>"
         },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the flow was created.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimestamp",
           "documentation":"<p>The time at which the flow was last updated.</p>"
@@ -10377,26 +11189,22 @@
         "version":{
           "shape":"DraftVersion",
           "documentation":"<p>The version of the flow. When you update a flow, the version updated is the <code>DRAFT</code> version.</p>"
+        },
+        "definition":{
+          "shape":"FlowDefinition",
+          "documentation":"<p>A definition of the nodes and the connections between nodes in the flow.</p>"
         }
       }
     },
     "UpdateKnowledgeBaseRequest":{
       "type":"structure",
       "required":[
-        "knowledgeBaseConfiguration",
         "knowledgeBaseId",
         "name",
-        "roleArn"
+        "roleArn",
+        "knowledgeBaseConfiguration"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>Specifies a new description for the knowledge base.</p>"
-        },
-        "knowledgeBaseConfiguration":{
-          "shape":"KnowledgeBaseConfiguration",
-          "documentation":"<p>Specifies the configuration for the embeddings model used for the knowledge base. You must use the same configuration as when the knowledge base was created.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Id",
           "documentation":"<p>The unique identifier of the knowledge base to update.</p>",
@@ -10407,10 +11215,18 @@
           "shape":"Name",
           "documentation":"<p>Specifies a new name for the knowledge base.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>Specifies a new description for the knowledge base.</p>"
+        },
         "roleArn":{
           "shape":"KnowledgeBaseRoleArn",
           "documentation":"<p>Specifies a different Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the knowledge base.</p>"
         },
+        "knowledgeBaseConfiguration":{
+          "shape":"KnowledgeBaseConfiguration",
+          "documentation":"<p>Specifies the configuration for the embeddings model used for the knowledge base. You must use the same configuration as when the knowledge base was created.</p>"
+        },
         "storageConfiguration":{
           "shape":"StorageConfiguration",
           "documentation":"<p>Specifies the configuration for the vector store used for the knowledge base. You must use the same configuration as when the knowledge base was created.</p>"
@@ -10434,6 +11250,14 @@
         "promptIdentifier"
       ],
       "members":{
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>A name for the prompt.</p>"
+        },
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>A description for the prompt.</p>"
+        },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to encrypt the prompt.</p>"
@@ -10442,44 +11266,36 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for the prompt. This value must match the <code>name</code> field in the relevant <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptVariant.html\">PromptVariant</a> object.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>A description for the prompt.</p>"
-        },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>A name for the prompt.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
         "promptIdentifier":{
           "shape":"PromptIdentifier",
           "documentation":"<p>The unique identifier of the prompt.</p>",
           "location":"uri",
           "locationName":"promptIdentifier"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         }
       }
     },
     "UpdatePromptResponse":{
       "type":"structure",
       "required":[
+        "name",
+        "id",
         "arn",
+        "version",
         "createdAt",
-        "id",
-        "name",
-        "updatedAt",
-        "version"
+        "updatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"PromptArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt.</p>"
+        "name":{
+          "shape":"PromptName",
+          "documentation":"<p>The name of the prompt.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was created.</p>"
+        "description":{
+          "shape":"PromptDescription",
+          "documentation":"<p>The description of the prompt.</p>"
         },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
@@ -10489,35 +11305,35 @@
           "shape":"PromptVariantName",
           "documentation":"<p>The name of the default variant for the prompt. This value must match the <code>name</code> field in the relevant <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptVariant.html\">PromptVariant</a> object.</p>"
         },
-        "description":{
-          "shape":"PromptDescription",
-          "documentation":"<p>The description of the prompt.</p>"
+        "variants":{
+          "shape":"PromptVariantList",
+          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
         },
         "id":{
           "shape":"PromptId",
           "documentation":"<p>The unique identifier of the prompt.</p>"
         },
-        "name":{
-          "shape":"PromptName",
-          "documentation":"<p>The name of the prompt.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time at which the prompt was last updated.</p>"
-        },
-        "variants":{
-          "shape":"PromptVariantList",
-          "documentation":"<p>A list of objects, each containing details about a variant of the prompt.</p>"
+        "arn":{
+          "shape":"PromptArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the prompt.</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>The version of the prompt. When you update a prompt, the version updated is the <code>DRAFT</code> version.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the prompt was last updated.</p>"
         }
       }
     },
     "Url":{
       "type":"string",
-      "pattern":"^https?://[A-Za-z0-9][^\\s]*$"
+      "pattern":"https?://[A-Za-z0-9][^\\s]*"
     },
     "UrlConfiguration":{
       "type":"structure",
@@ -10535,6 +11351,12 @@
       "min":15,
       "sensitive":true
     },
+    "UserAgentHeader":{
+      "type":"string",
+      "max":86,
+      "min":61,
+      "sensitive":true
+    },
     "ValidateFlowDefinitionRequest":{
       "type":"structure",
       "required":["definition"],
@@ -10558,11 +11380,11 @@
     "ValidationException":{
       "type":"structure",
       "members":{
+        "message":{"shape":"NonBlankString"},
         "fieldList":{
           "shape":"ValidationExceptionFieldList",
           "documentation":"<p>A list of objects containing fields that caused validation errors and their corresponding validation error messages.</p>"
-        },
-        "message":{"shape":"NonBlankString"}
+        }
       },
       "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>",
       "error":{
@@ -10574,17 +11396,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"NonBlankString",
-          "documentation":"<p>A message describing why this field failed validation.</p>"
-        },
         "name":{
           "shape":"NonBlankString",
           "documentation":"<p>The name of the field.</p>"
+        },
+        "message":{
+          "shape":"NonBlankString",
+          "documentation":"<p>A message describing why this field failed validation.</p>"
         }
       },
       "documentation":"<p>Stores information about a field passed inside a request that resulted in an validation error.</p>"
@@ -10593,6 +11415,10 @@
       "type":"list",
       "member":{"shape":"ValidationExceptionField"}
     },
+    "VectorBucketArn":{
+      "type":"string",
+      "sensitive":true
+    },
     "VectorIngestionConfiguration":{
       "type":"structure",
       "members":{
@@ -10607,6 +11433,10 @@
         "parsingConfiguration":{
           "shape":"ParsingConfiguration",
           "documentation":"<p>Configurations for a parser to use for parsing documents in your data source. If you exclude this field, the default parser will be used.</p>"
+        },
+        "contextEnrichmentConfiguration":{
+          "shape":"ContextEnrichmentConfiguration",
+          "documentation":"<p>The context enrichment configuration used for ingestion of the data into the vector store.</p>"
         }
       },
       "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
@@ -10617,7 +11447,7 @@
       "members":{
         "embeddingModelArn":{
           "shape":"BedrockEmbeddingModelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model or inference profile used to create vector embeddings for the knowledge base.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the model used to create vector embeddings for the knowledge base.</p>"
         },
         "embeddingModelConfiguration":{
           "shape":"EmbeddingModelConfiguration",
@@ -10630,11 +11460,70 @@
       },
       "documentation":"<p>Contains details about the model used to create vector embeddings for the knowledge base.</p>"
     },
+    "VectorSearchBedrockRerankingConfiguration":{
+      "type":"structure",
+      "required":["modelConfiguration"],
+      "members":{
+        "modelConfiguration":{
+          "shape":"VectorSearchBedrockRerankingModelConfiguration",
+          "documentation":"<p>Specifies the configuration for the Amazon Bedrock reranker model.</p>"
+        },
+        "numberOfRerankedResults":{
+          "shape":"VectorSearchBedrockRerankingConfigurationNumberOfRerankedResultsInteger",
+          "documentation":"<p>Specifies the number of results to return after reranking.</p>"
+        },
+        "metadataConfiguration":{
+          "shape":"MetadataConfigurationForReranking",
+          "documentation":"<p>Specifies how metadata fields should be handled during the reranking process.</p>"
+        }
+      },
+      "documentation":"<p>Configures the Amazon Bedrock reranker model to improve the relevance of retrieved results.</p>"
+    },
+    "VectorSearchBedrockRerankingConfigurationNumberOfRerankedResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "VectorSearchBedrockRerankingModelConfiguration":{
+      "type":"structure",
+      "required":["modelArn"],
+      "members":{
+        "modelArn":{
+          "shape":"BedrockRerankingModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Bedrock reranker model.</p>"
+        },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p>Specifies additional model-specific request parameters as key-value pairs that are included in the request to the Amazon Bedrock reranker model.</p>"
+        }
+      },
+      "documentation":"<p>Configures the Amazon Bedrock model used for reranking retrieved results.</p>"
+    },
+    "VectorSearchRerankingConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"VectorSearchRerankingConfigurationType",
+          "documentation":"<p>Specifies the type of reranking model to use. Currently, the only supported value is <code>BEDROCK_RERANKING_MODEL</code>.</p>"
+        },
+        "bedrockRerankingConfiguration":{
+          "shape":"VectorSearchBedrockRerankingConfiguration",
+          "documentation":"<p>Specifies the configuration for using an Amazon Bedrock reranker model to rerank retrieved results.</p>"
+        }
+      },
+      "documentation":"<p>Specifies how retrieved results from a knowledge base are reranked to improve relevance.</p>"
+    },
+    "VectorSearchRerankingConfigurationType":{
+      "type":"string",
+      "enum":["BEDROCK_RERANKING_MODEL"]
+    },
     "Version":{
       "type":"string",
       "max":5,
       "min":1,
-      "pattern":"^(DRAFT|[0-9]{0,4}[1-9][0-9]{0,4})$"
+      "pattern":"(DRAFT|[0-9]{0,4}[1-9][0-9]{0,4})"
     },
     "WebCrawlerConfiguration":{
       "type":"structure",
@@ -10643,21 +11532,25 @@
           "shape":"WebCrawlerLimits",
           "documentation":"<p>The configuration of crawl limits for the web URLs.</p>"
         },
-        "exclusionFilters":{
-          "shape":"FilterList",
-          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
-        },
         "inclusionFilters":{
           "shape":"FilterList",
           "documentation":"<p>A list of one or more inclusion regular expression patterns to include certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
         },
+        "exclusionFilters":{
+          "shape":"FilterList",
+          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
+        },
         "scope":{
           "shape":"WebScopeType",
           "documentation":"<p>The scope of what is crawled for your URLs.</p> <p>You can choose to crawl only web pages that belong to the same host or primary domain. For example, only web pages that contain the seed URL \"https://docs.aws.amazon.com/bedrock/latest/userguide/\" and no other domains. You can choose to include sub domains in addition to the host or primary domain. For example, web pages that contain \"aws.amazon.com\" can also include sub domain \"docs.aws.amazon.com\".</p>"
         },
         "userAgent":{
           "shape":"UserAgent",
-          "documentation":"<p>A string used for identifying the crawler or a bot when it accesses a web server. By default, this is set to <code>bedrockbot_UUID</code> for your crawler. You can optionally append a custom string to <code>bedrockbot_UUID</code> to allowlist a specific user agent permitted to access your source URLs. </p>"
+          "documentation":"<p>Returns the user agent suffix for your web crawler.</p>"
+        },
+        "userAgentHeader":{
+          "shape":"UserAgentHeader",
+          "documentation":"<p>A string used for identifying the crawler or bot when it accesses a web server. The user agent header value consists of the <code>bedrockbot</code>, UUID, and a user agent suffix for your crawler (if one is provided). By default, it is set to <code>bedrockbot_UUID</code>. You can optionally append a custom suffix to <code>bedrockbot_UUID</code> to allowlist a specific user agent permitted to access your source URLs. </p>"
         }
       },
       "documentation":"<p>The configuration of web URLs that you want to crawl. You should be authorized to crawl the URLs.</p>"
@@ -10665,13 +11558,13 @@
     "WebCrawlerLimits":{
       "type":"structure",
       "members":{
-        "maxPages":{
-          "shape":"WebCrawlerLimitsMaxPagesInteger",
-          "documentation":"<p> The max number of web pages crawled from your source URLs, up to 25,000 pages. If the web pages exceed this limit, the data source sync will fail and no web pages will be ingested. </p>"
-        },
         "rateLimit":{
           "shape":"WebCrawlerLimitsRateLimitInteger",
           "documentation":"<p>The max rate at which pages are crawled, up to 300 per minute per host.</p>"
+        },
+        "maxPages":{
+          "shape":"WebCrawlerLimitsMaxPagesInteger",
+          "documentation":"<p> The max number of web pages crawled from your source URLs, up to 25,000 pages. If the web pages exceed this limit, the data source sync will fail and no web pages will be ingested. </p>"
         }
       },
       "documentation":"<p>The rate limits for the URLs that you want to crawl. You should be authorized to crawl the URLs.</p>"
@@ -10691,13 +11584,13 @@
       "type":"structure",
       "required":["sourceConfiguration"],
       "members":{
-        "crawlerConfiguration":{
-          "shape":"WebCrawlerConfiguration",
-          "documentation":"<p>The Web Crawler configuration details for the web data source.</p>"
-        },
         "sourceConfiguration":{
           "shape":"WebSourceConfiguration",
           "documentation":"<p>The source configuration details for the web data source.</p>"
+        },
+        "crawlerConfiguration":{
+          "shape":"WebCrawlerConfiguration",
+          "documentation":"<p>The Web Crawler configuration details for the web data source.</p>"
         }
       },
       "documentation":"<p>The configuration details for the web data source.</p>"
@@ -10722,7 +11615,7 @@
     },
     "WorkgroupArn":{
       "type":"string",
-      "pattern":"^(arn:(aws(-[a-z]+)*):redshift-serverless:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:workgroup/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$"
+      "pattern":"(arn:(aws(-[a-z]+)*):redshift-serverless:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:workgroup/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"
     }
   },
   "documentation":"<p>Describes the API operations for creating and managing Amazon Bedrock agents.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/waiters-2.json 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent/2023-06-05/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent/2023-06-05/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,36 @@
       "input_token": "nextToken",
       "output_token": "nextToken",
       "result_key": "results"
+    },
+    "ListInvocationSteps": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "invocationStepSummaries"
+    },
+    "ListInvocations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "invocationSummaries"
+    },
+    "ListSessions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "sessionSummaries"
+    },
+    "ListFlowExecutionEvents": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "flowExecutionEvents"
+    },
+    "ListFlowExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "flowExecutionSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,18 +2,58 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-07-26",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"bedrock-agent-runtime",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Agents for Amazon Bedrock Runtime",
     "serviceId":"Bedrock Agent Runtime",
     "signatureVersion":"v4",
     "signingName":"bedrock",
-    "uid":"bedrock-agent-runtime-2023-07-26",
-    "auth":["aws.auth#sigv4"]
+    "uid":"bedrock-agent-runtime-2023-07-26"
   },
   "operations":{
+    "CreateInvocation":{
+      "name":"CreateInvocation",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/sessions/{sessionIdentifier}/invocations/",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateInvocationRequest"},
+      "output":{"shape":"CreateInvocationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a new invocation within a session. An invocation groups the related invocation steps that store the content from a conversation. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p> <p>Related APIs</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListInvocations.html\">ListInvocations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListSessions.html\">ListSessions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GetSession.html\">GetSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "CreateSession":{
+      "name":"CreateSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/sessions/",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateSessionRequest"},
+      "output":{"shape":"CreateSessionResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a session to temporarily store conversations for generative AI (GenAI) applications built with open-source frameworks such as LangGraph and LlamaIndex. Sessions enable you to save the state of conversations at checkpoints, with the added security and infrastructure of Amazon Web Services. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p> <p>By default, Amazon Bedrock uses Amazon Web Services-managed keys for session encryption, including session metadata, or you can use your own KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/session-encryption.html\">Amazon Bedrock session encryption</a>.</p> <note> <p> You use a session to store state and conversation history for generative AI applications built with open-source frameworks. For Amazon Bedrock Agents, the service automatically manages conversation context and associates them with the agent-specific sessionId you specify in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> API operation. </p> </note> <p>Related APIs:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListSessions.html\">ListSessions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GetSession.html\">GetSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_EndSession.html\">EndSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_DeleteSession.html\">DeleteSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
     "DeleteAgentMemory":{
       "name":"DeleteAgentMemory",
       "http":{
@@ -24,8 +64,8 @@
       "input":{"shape":"DeleteAgentMemoryRequest"},
       "output":{"shape":"DeleteAgentMemoryResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -37,6 +77,46 @@
       "documentation":"<p>Deletes memory from the specified memory identifier.</p>",
       "idempotent":true
     },
+    "DeleteSession":{
+      "name":"DeleteSession",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/sessions/{sessionIdentifier}/",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteSessionRequest"},
+      "output":{"shape":"DeleteSessionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a session that you ended. You can't delete a session with an <code>ACTIVE</code> status. To delete an active session, you must first end it with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_EndSession.html\">EndSession</a> API operation. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "idempotent":true
+    },
+    "EndSession":{
+      "name":"EndSession",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/sessions/{sessionIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"EndSessionRequest"},
+      "output":{"shape":"EndSessionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Ends the session. After you end a session, you can still access its content but you can’t add to it. To delete the session and it's content, you use the DeleteSession API operation. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "idempotent":true
+    },
     "GenerateQuery":{
       "name":"GenerateQuery",
       "http":{
@@ -47,8 +127,8 @@
       "input":{"shape":"GenerateQueryRequest"},
       "output":{"shape":"GenerateQueryResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -57,7 +137,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Generates an SQL query from a natural language query. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-generate-query.html\">Generate a query for structured data</a> in the Amazon Bedrock User Guide.</p>"
+      "documentation":"<p>Generates an SQL query from a natural language query. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-generate-query.html\">Generate a query for structured data</a> in the Amazon Bedrock User Guide.</p>",
+      "readonly":true
     },
     "GetAgentMemory":{
       "name":"GetAgentMemory",
@@ -69,8 +150,8 @@
       "input":{"shape":"GetAgentMemoryRequest"},
       "output":{"shape":"GetAgentMemoryResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -79,7 +160,84 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Gets the sessions stored in the memory of the agent.</p>"
+      "documentation":"<p>Gets the sessions stored in the memory of the agent.</p>",
+      "readonly":true
+    },
+    "GetExecutionFlowSnapshot":{
+      "name":"GetExecutionFlowSnapshot",
+      "http":{
+        "method":"GET",
+        "requestUri":"/flows/{flowIdentifier}/aliases/{flowAliasIdentifier}/executions/{executionIdentifier}/flowsnapshot",
+        "responseCode":200
+      },
+      "input":{"shape":"GetExecutionFlowSnapshotRequest"},
+      "output":{"shape":"GetExecutionFlowSnapshotResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the flow definition snapshot used for a flow execution. The snapshot represents the flow metadata and definition as it existed at the time the execution was started. Note that even if the flow is edited after an execution starts, the snapshot connected to the execution remains unchanged.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "readonly":true
+    },
+    "GetFlowExecution":{
+      "name":"GetFlowExecution",
+      "http":{
+        "method":"GET",
+        "requestUri":"/flows/{flowIdentifier}/aliases/{flowAliasIdentifier}/executions/{executionIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetFlowExecutionRequest"},
+      "output":{"shape":"GetFlowExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves details about a specific flow execution, including its status, start and end times, and any errors that occurred during execution.</p>",
+      "readonly":true
+    },
+    "GetInvocationStep":{
+      "name":"GetInvocationStep",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessions/{sessionIdentifier}/invocationSteps/{invocationStepId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInvocationStepRequest"},
+      "output":{"shape":"GetInvocationStepResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the details of a specific invocation step within an invocation in a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "readonly":true
+    },
+    "GetSession":{
+      "name":"GetSession",
+      "http":{
+        "method":"GET",
+        "requestUri":"/sessions/{sessionIdentifier}/",
+        "responseCode":200
+      },
+      "input":{"shape":"GetSessionRequest"},
+      "output":{"shape":"GetSessionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves details about a specific session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "readonly":true
     },
     "InvokeAgent":{
       "name":"InvokeAgent",
@@ -92,8 +250,8 @@
       "output":{"shape":"InvokeAgentResponse"},
       "errors":[
         {"shape":"ModelNotReadyException"},
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -102,7 +260,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<note> </note> <p>Sends a prompt for the agent to process and respond to. Note the following fields for the request:</p> <ul> <li> <p>To continue the same conversation with an agent, use the same <code>sessionId</code> value in the request.</p> </li> <li> <p>To activate trace enablement, turn <code>enableTrace</code> to <code>true</code>. Trace enablement helps you follow the agent's reasoning process that led it to the information it processed, the actions it took, and the final result it yielded. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-events\">Trace enablement</a>.</p> </li> <li> <p>To stream agent responses, make sure that only orchestration prompt is enabled. Agent streaming is not supported for the following steps: </p> <ul> <li> <p> <code>Pre-processing</code> </p> </li> <li> <p> <code>Post-processing</code> </p> </li> <li> <p>Agent with 1 Knowledge base and <code>User Input</code> not enabled</p> </li> </ul> </li> <li> <p>End a conversation by setting <code>endSession</code> to <code>true</code>.</p> </li> <li> <p>In the <code>sessionState</code> object, you can include attributes for the session or prompt or, if you configured an action group to return control, results from invocation of the action group.</p> </li> </ul> <p>The response contains both <b>chunk</b> and <b>trace</b> attributes.</p> <p>The final response is returned in the <code>bytes</code> field of the <code>chunk</code> object. The <code>InvokeAgent</code> returns one chunk for the entire interaction.</p> <ul> <li> <p>The <code>attribution</code> object contains citations for parts of the response.</p> </li> <li> <p>If you set <code>enableTrace</code> to <code>true</code> in the request, you can trace the agent's steps and reasoning process that led it to the response.</p> </li> <li> <p>If the action predicted was configured to return control, the response returns parameters for the action, elicited from the user, in the <code>returnControl</code> field.</p> </li> <li> <p>Errors are also surfaced in the response.</p> </li> </ul>"
+      "documentation":"<p><note> </note> <p>Sends a prompt for the agent to process and respond to. Note the following fields for the request:</p> <ul> <li> <p>To continue the same conversation with an agent, use the same <code>sessionId</code> value in the request.</p> </li> <li> <p>To activate trace enablement, turn <code>enableTrace</code> to <code>true</code>. Trace enablement helps you follow the agent's reasoning process that led it to the information it processed, the actions it took, and the final result it yielded. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-events\">Trace enablement</a>.</p> </li> <li> <p>End a conversation by setting <code>endSession</code> to <code>true</code>.</p> </li> <li> <p>In the <code>sessionState</code> object, you can include attributes for the session or prompt or, if you configured an action group to return control, results from invocation of the action group.</p> </li> </ul> <p>The response contains both <b>chunk</b> and <b>trace</b> attributes.</p> <p>The final response is returned in the <code>bytes</code> field of the <code>chunk</code> object. The <code>InvokeAgent</code> returns one chunk for the entire interaction.</p> <ul> <li> <p>The <code>attribution</code> object contains citations for parts of the response.</p> </li> <li> <p>If you set <code>enableTrace</code> to <code>true</code> in the request, you can trace the agent's steps and reasoning process that led it to the response.</p> </li> <li> <p>If the action predicted was configured to return control, the response returns parameters for the action, elicited from the user, in the <code>returnControl</code> field.</p> </li> <li> <p>Errors are also surfaced in the response.</p> </li> </ul></p>"
     },
     "InvokeFlow":{
       "name":"InvokeFlow",
@@ -114,8 +272,8 @@
       "input":{"shape":"InvokeFlowRequest"},
       "output":{"shape":"InvokeFlowResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -136,8 +294,8 @@
       "input":{"shape":"InvokeInlineAgentRequest"},
       "output":{"shape":"InvokeInlineAgentResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -148,6 +306,119 @@
       ],
       "documentation":"<p> Invokes an inline Amazon Bedrock agent using the configurations you provide with the request. </p> <ul> <li> <p>Specify the following fields for security purposes.</p> <ul> <li> <p>(Optional) <code>customerEncryptionKeyArn</code> – The Amazon Resource Name (ARN) of a KMS key to encrypt the creation of the agent.</p> </li> <li> <p>(Optional) <code>idleSessionTTLinSeconds</code> – Specify the number of seconds for which the agent should maintain session information. After this time expires, the subsequent <code>InvokeInlineAgent</code> request begins a new session.</p> </li> </ul> </li> <li> <p>To override the default prompt behavior for agent orchestration and to use advanced prompts, include a <code>promptOverrideConfiguration</code> object. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>.</p> </li> <li> <p>The agent instructions will not be honored if your agent has only one knowledge base, uses default prompts, has no action group, and user input is disabled.</p> </li> </ul> <note> </note>"
     },
+    "ListFlowExecutionEvents":{
+      "name":"ListFlowExecutionEvents",
+      "http":{
+        "method":"GET",
+        "requestUri":"/flows/{flowIdentifier}/aliases/{flowAliasIdentifier}/executions/{executionIdentifier}/events",
+        "responseCode":200
+      },
+      "input":{"shape":"ListFlowExecutionEventsRequest"},
+      "output":{"shape":"ListFlowExecutionEventsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists events that occurred during a flow execution. Events provide detailed information about the execution progress, including node inputs and outputs, flow inputs and outputs, condition results, and failure events.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "readonly":true
+    },
+    "ListFlowExecutions":{
+      "name":"ListFlowExecutions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/flows/{flowIdentifier}/executions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListFlowExecutionsRequest"},
+      "output":{"shape":"ListFlowExecutionsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all executions of a flow. Results can be paginated and include summary information about each execution, such as status, start and end times, and the execution's Amazon Resource Name (ARN).</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "readonly":true
+    },
+    "ListInvocationSteps":{
+      "name":"ListInvocationSteps",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessions/{sessionIdentifier}/invocationSteps/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListInvocationStepsRequest"},
+      "output":{"shape":"ListInvocationStepsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all invocation steps associated with a session and optionally, an invocation within the session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "readonly":true
+    },
+    "ListInvocations":{
+      "name":"ListInvocations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessions/{sessionIdentifier}/invocations/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListInvocationsRequest"},
+      "output":{"shape":"ListInvocationsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all invocations associated with a specific session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "readonly":true
+    },
+    "ListSessions":{
+      "name":"ListSessions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessions/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSessionsRequest"},
+      "output":{"shape":"ListSessionsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all sessions in your Amazon Web Services account. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>List all the tags for the resource you specify.</p>",
+      "readonly":true
+    },
     "OptimizePrompt":{
       "name":"OptimizePrompt",
       "http":{
@@ -167,6 +438,27 @@
       ],
       "documentation":"<p>Optimizes a prompt for the task that you specify. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-optimize.html\">Optimize a prompt</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
     },
+    "PutInvocationStep":{
+      "name":"PutInvocationStep",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/sessions/{sessionIdentifier}/invocationSteps/",
+        "responseCode":201
+      },
+      "input":{"shape":"PutInvocationStepRequest"},
+      "output":{"shape":"PutInvocationStepResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Add an invocation step to an invocation in a session. An invocation step stores fine-grained state checkpoints, including text and images, for each interaction. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p> <p>Related APIs:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GetInvocationStep.html\">GetInvocationStep</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListInvocationSteps.html\">ListInvocationSteps</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListInvocations.html\">ListInvocations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_ListInvocations.html\">ListSessions</a> </p> </li> </ul>",
+      "idempotent":true
+    },
     "Rerank":{
       "name":"Rerank",
       "http":{
@@ -177,8 +469,8 @@
       "input":{"shape":"RerankRequest"},
       "output":{"shape":"RerankResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -199,8 +491,8 @@
       "input":{"shape":"RetrieveRequest"},
       "output":{"shape":"RetrieveResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -209,7 +501,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Queries a knowledge base and retrieves information from it.</p>"
+      "documentation":"<p>Queries a knowledge base and retrieves information from it.</p>",
+      "readonly":true
     },
     "RetrieveAndGenerate":{
       "name":"RetrieveAndGenerate",
@@ -221,8 +514,8 @@
       "input":{"shape":"RetrieveAndGenerateRequest"},
       "output":{"shape":"RetrieveAndGenerateResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
@@ -243,30 +536,131 @@
       "input":{"shape":"RetrieveAndGenerateStreamRequest"},
       "output":{"shape":"RetrieveAndGenerateStreamResponse"},
       "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"DependencyFailedException"},
+        {"shape":"BadGatewayException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Queries a knowledge base and generates responses based on the retrieved results, with output in streaming format.</p> <note> <p>The CLI doesn't support streaming operations in Amazon Bedrock, including <code>InvokeModelWithResponseStream</code>.</p> </note> <p>This operation requires permission for the <code> bedrock:RetrieveAndGenerate</code> action.</p>"
+    },
+    "StartFlowExecution":{
+      "name":"StartFlowExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/flows/{flowIdentifier}/aliases/{flowAliasIdentifier}/executions",
+        "responseCode":200
+      },
+      "input":{"shape":"StartFlowExecutionRequest"},
+      "output":{"shape":"StartFlowExecutionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"DependencyFailedException"},
+        {"shape":"BadGatewayException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Starts an execution of an Amazon Bedrock flow. Unlike flows that run until completion or time out after five minutes, flow executions let you run flows asynchronously for longer durations. Flow executions also yield control so that your application can perform other tasks.</p> <p>This operation returns an Amazon Resource Name (ARN) that you can use to track and manage your flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>"
+    },
+    "StopFlowExecution":{
+      "name":"StopFlowExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/flows/{flowIdentifier}/aliases/{flowAliasIdentifier}/executions/{executionIdentifier}/stop",
+        "responseCode":200
+      },
+      "input":{"shape":"StopFlowExecutionRequest"},
+      "output":{"shape":"StopFlowExecutionResponse"},
+      "errors":[
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"DependencyFailedException"},
         {"shape":"BadGatewayException"},
         {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Stops an Amazon Bedrock flow's execution. This operation prevents further processing of the flow and changes the execution status to <code>Aborted</code>.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Queries a knowledge base and generates responses based on the retrieved results, with output in streaming format.</p> <note> <p>The CLI doesn't support streaming operations in Amazon Bedrock, including <code>InvokeModelWithResponseStream</code>.</p> </note>"
+      "documentation":"<p>Associate tags with a resource. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Tagging resources</a> in the Amazon Bedrock User Guide.</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Remove tags from a resource.</p>",
+      "idempotent":true
+    },
+    "UpdateSession":{
+      "name":"UpdateSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/sessions/{sessionIdentifier}/",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateSessionRequest"},
+      "output":{"shape":"UpdateSessionResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates the metadata or encryption settings of a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "idempotent":true
     }
   },
   "shapes":{
     "APISchema":{
       "type":"structure",
       "members":{
-        "payload":{
-          "shape":"Payload",
-          "documentation":"<p> The JSON or YAML-formatted payload defining the OpenAPI schema for the action group. </p>"
-        },
         "s3":{
           "shape":"S3Identifier",
           "documentation":"<p> Contains details about the S3 object containing the OpenAPI schema for the action group. </p>"
+        },
+        "payload":{
+          "shape":"Payload",
+          "documentation":"<p> The JSON or YAML-formatted payload defining the OpenAPI schema for the action group. </p>"
         }
       },
       "documentation":"<p> Contains details about the OpenAPI schema for the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>. You can either include the schema directly in the payload field or you can upload it to an S3 bucket and specify the S3 bucket location in the s3 field. </p>",
@@ -276,7 +670,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent/[0-9a-zA-Z]{10}$"
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent/[0-9a-zA-Z]{10}"
     },
     "AccessDeniedException":{
       "type":"structure",
@@ -293,13 +687,13 @@
     "ActionGroupExecutor":{
       "type":"structure",
       "members":{
-        "customControl":{
-          "shape":"CustomControlMethod",
-          "documentation":"<p> To return the action group invocation results directly in the <code>InvokeInlineAgent</code> response, specify <code>RETURN_CONTROL</code>. </p>"
-        },
         "lambda":{
           "shape":"LambdaResourceArn",
           "documentation":"<p> The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action. </p>"
+        },
+        "customControl":{
+          "shape":"CustomControlMethod",
+          "documentation":"<p> To return the action group invocation results directly in the <code>InvokeInlineAgent</code> response, specify <code>RETURN_CONTROL</code>. </p>"
         }
       },
       "documentation":"<p> Contains details about the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user. </p>",
@@ -312,22 +706,14 @@
           "shape":"ActionGroupName",
           "documentation":"<p>The name of the action group.</p>"
         },
+        "verb":{
+          "shape":"Verb",
+          "documentation":"<p>The API method being used, based off the action group.</p>"
+        },
         "apiPath":{
           "shape":"ApiPath",
           "documentation":"<p>The path to the API to call, based off the action group.</p>"
         },
-        "executionType":{
-          "shape":"ExecutionType",
-          "documentation":"<p>How fulfillment of the action is handled. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/action-handle.html\">Handling fulfillment of the action</a>.</p>"
-        },
-        "function":{
-          "shape":"Function",
-          "documentation":"<p>The function in the action group to call.</p>"
-        },
-        "invocationId":{
-          "shape":"String",
-          "documentation":"<p>The unique identifier of the invocation. Only returned if the <code>executionType</code> is <code>RETURN_CONTROL</code>.</p>"
-        },
         "parameters":{
           "shape":"Parameters",
           "documentation":"<p>The parameters in the Lambda input event.</p>"
@@ -336,9 +722,17 @@
           "shape":"RequestBody",
           "documentation":"<p>The parameters in the request body for the Lambda input event.</p>"
         },
-        "verb":{
-          "shape":"Verb",
-          "documentation":"<p>The API method being used, based off the action group.</p>"
+        "function":{
+          "shape":"Function",
+          "documentation":"<p>The function in the action group to call.</p>"
+        },
+        "executionType":{
+          "shape":"ExecutionType",
+          "documentation":"<p>How fulfillment of the action is handled. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/action-handle.html\">Handling fulfillment of the action</a>.</p>"
+        },
+        "invocationId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the invocation. Only returned if the <code>executionType</code> is <code>RETURN_CONTROL</code>.</p>"
         }
       },
       "documentation":"<p>Contains information about the action group being invoked. For more information about the possible structures, see the InvocationInput tab in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-orchestration.html\">OrchestrationTrace</a> in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-service.html\">Amazon Bedrock User Guide</a>.</p>"
@@ -349,6 +743,10 @@
         "text":{
           "shape":"ActionGroupOutputString",
           "documentation":"<p>The JSON-formatted string returned by the API invoked by the action group.</p>"
+        },
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the action group output.</p>"
         }
       },
       "documentation":"<p>Contains the JSON-formatted string returned by the API invoked by the action group.</p>"
@@ -365,9 +763,27 @@
       "type":"string",
       "enum":[
         "AMAZON.UserInput",
-        "AMAZON.CodeInterpreter"
+        "AMAZON.CodeInterpreter",
+        "ANTHROPIC.Computer",
+        "ANTHROPIC.Bash",
+        "ANTHROPIC.TextEditor"
       ]
     },
+    "ActionGroupSignatureParams":{
+      "type":"map",
+      "key":{"shape":"ActionGroupSignatureParamsKeyString"},
+      "value":{"shape":"ActionGroupSignatureParamsValueString"}
+    },
+    "ActionGroupSignatureParamsKeyString":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
+    "ActionGroupSignatureParamsValueString":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
     "ActionInvocationType":{
       "type":"string",
       "enum":[
@@ -388,37 +804,40 @@
     },
     "AdditionalModelRequestFieldsValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "AgentActionGroup":{
       "type":"structure",
       "required":["actionGroupName"],
       "members":{
-        "actionGroupExecutor":{
-          "shape":"ActionGroupExecutor",
-          "documentation":"<p> The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user. </p>"
-        },
         "actionGroupName":{
           "shape":"ResourceName",
           "documentation":"<p> The name of the action group. </p>"
         },
-        "apiSchema":{
-          "shape":"APISchema",
-          "documentation":"<p> Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>. </p>"
-        },
         "description":{
           "shape":"ResourceDescription",
           "documentation":"<p> A description of the action group. </p>"
         },
+        "parentActionGroupSignature":{
+          "shape":"ActionGroupSignature",
+          "documentation":"<p>Specify a built-in or computer use action for this action group. If you specify a value, you must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields empty for this action group. </p> <ul> <li> <p>To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. </p> </li> <li> <p>To allow your agent to generate, run, and troubleshoot code when trying to complete a task, set this field to <code>AMAZON.CodeInterpreter</code>.</p> </li> <li> <p>To allow your agent to use an Anthropic computer use tool, specify one of the following values. </p> <important> <p> Computer use is a new Anthropic Claude model capability (in beta) available with Anthropic Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. When operating computer use functionality, we recommend taking additional security precautions, such as executing computer actions in virtual environments with restricted data access and limited internet connectivity. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agent-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p> </important> <ul> <li> <p> <code>ANTHROPIC.Computer</code> - Gives the agent permission to use the mouse and keyboard and take screenshots.</p> </li> <li> <p> <code>ANTHROPIC.TextEditor</code> - Gives the agent permission to view, create and edit files.</p> </li> <li> <p> <code>ANTHROPIC.Bash</code> - Gives the agent permission to run commands in a bash shell.</p> </li> </ul> </li> </ul>"
+        },
+        "actionGroupExecutor":{
+          "shape":"ActionGroupExecutor",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action or the custom control method for handling the information elicited from the user. </p>"
+        },
+        "apiSchema":{
+          "shape":"APISchema",
+          "documentation":"<p> Contains either details about the S3 object containing the OpenAPI schema for the action group or the JSON or YAML-formatted payload defining the schema. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html\">Action group OpenAPI schemas</a>. </p>"
+        },
         "functionSchema":{
           "shape":"FunctionSchema",
           "documentation":"<p> Contains details about the function schema for the action group or the JSON or YAML-formatted payload defining the schema. </p>"
         },
-        "parentActionGroupSignature":{
-          "shape":"ActionGroupSignature",
-          "documentation":"<p> To allow your agent to request the user for additional information when trying to complete a task, set this field to <code>AMAZON.UserInput</code>. You must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields blank for this action group. </p> <p>To allow your agent to generate, run, and troubleshoot code when trying to complete a task, set this field to <code>AMAZON.CodeInterpreter</code>. You must leave the <code>description</code>, <code>apiSchema</code>, and <code>actionGroupExecutor</code> fields blank for this action group.</p> <p>During orchestration, if your agent determines that it needs to invoke an API in an action group, but doesn't have enough information to complete the API request, it will invoke this action group instead and return an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Observation.html\">Observation</a> reprompting the user for more information.</p>"
+        "parentActionGroupSignatureParams":{
+          "shape":"ActionGroupSignatureParams",
+          "documentation":"<p> The configuration settings for a computer use action. </p> <important> <p>Computer use is a new Anthropic Claude model capability (in beta) available with Claude 3.7 Sonnet and Claude 3.5 Sonnet v2 only. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agent-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>.</p> </important>"
         }
       },
       "documentation":"<p> Contains details of the inline agent's action group. </p>"
@@ -431,28 +850,36 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent-alias/[0-9a-zA-Z]{10}/[0-9a-zA-Z]{10}$"
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:agent-alias/[0-9a-zA-Z]{10}/[0-9a-zA-Z]{10}"
     },
     "AgentAliasId":{
       "type":"string",
       "max":10,
       "min":0,
-      "pattern":"^[0-9a-zA-Z]+$"
+      "pattern":"[0-9a-zA-Z]+"
+    },
+    "AgentCollaboration":{
+      "type":"string",
+      "enum":[
+        "SUPERVISOR",
+        "SUPERVISOR_ROUTER",
+        "DISABLED"
+      ]
     },
     "AgentCollaboratorInputPayload":{
       "type":"structure",
       "members":{
-        "returnControlResults":{
-          "shape":"ReturnControlResults",
-          "documentation":"<p>An action invocation result.</p>"
+        "type":{
+          "shape":"PayloadType",
+          "documentation":"<p>The input type.</p>"
         },
         "text":{
           "shape":"AgentCollaboratorPayloadString",
           "documentation":"<p>Input text.</p>"
         },
-        "type":{
-          "shape":"PayloadType",
-          "documentation":"<p>The input type.</p>"
+        "returnControlResults":{
+          "shape":"ReturnControlResults",
+          "documentation":"<p>An action invocation result.</p>"
         }
       },
       "documentation":"<p>Input for an agent collaborator. The input can be text or an action invocation result.</p>"
@@ -460,14 +887,14 @@
     "AgentCollaboratorInvocationInput":{
       "type":"structure",
       "members":{
-        "agentCollaboratorAliasArn":{
-          "shape":"AgentAliasArn",
-          "documentation":"<p>The collaborator's alias ARN.</p>"
-        },
         "agentCollaboratorName":{
           "shape":"String",
           "documentation":"<p>The collaborator's name.</p>"
         },
+        "agentCollaboratorAliasArn":{
+          "shape":"AgentAliasArn",
+          "documentation":"<p>The collaborator's alias ARN.</p>"
+        },
         "input":{
           "shape":"AgentCollaboratorInputPayload",
           "documentation":"<p>Text or action invocation result input for the collaborator.</p>"
@@ -478,17 +905,21 @@
     "AgentCollaboratorInvocationOutput":{
       "type":"structure",
       "members":{
-        "agentCollaboratorAliasArn":{
-          "shape":"AgentAliasArn",
-          "documentation":"<p>The output's agent collaborator alias ARN.</p>"
-        },
         "agentCollaboratorName":{
           "shape":"String",
           "documentation":"<p>The output's agent collaborator name.</p>"
         },
+        "agentCollaboratorAliasArn":{
+          "shape":"AgentAliasArn",
+          "documentation":"<p>The output's agent collaborator alias ARN.</p>"
+        },
         "output":{
           "shape":"AgentCollaboratorOutputPayload",
           "documentation":"<p>The output's output.</p>"
+        },
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the output from the agent collaborator.</p>"
         }
       },
       "documentation":"<p>Output from an agent collaborator.</p>"
@@ -496,17 +927,17 @@
     "AgentCollaboratorOutputPayload":{
       "type":"structure",
       "members":{
-        "returnControlPayload":{
-          "shape":"ReturnControlPayload",
-          "documentation":"<p>An action invocation result.</p>"
+        "type":{
+          "shape":"PayloadType",
+          "documentation":"<p>The type of output.</p>"
         },
         "text":{
           "shape":"AgentCollaboratorPayloadString",
           "documentation":"<p>Text output.</p>"
         },
-        "type":{
-          "shape":"PayloadType",
-          "documentation":"<p>The type of output.</p>"
+        "returnControlPayload":{
+          "shape":"ReturnControlPayload",
+          "documentation":"<p>An action invocation result.</p>"
         }
       },
       "documentation":"<p>Output from an agent collaborator. The output can be text or an action invocation result.</p>"
@@ -519,13 +950,17 @@
       "type":"string",
       "max":10,
       "min":0,
-      "pattern":"^[0-9a-zA-Z]+$"
+      "pattern":"[0-9a-zA-Z]+"
+    },
+    "AgentTraces":{
+      "type":"list",
+      "member":{"shape":"TracePart"}
     },
     "AgentVersion":{
       "type":"string",
       "max":5,
       "min":1,
-      "pattern":"^(DRAFT|[0-9]{0,4}[1-9][0-9]{0,4})$"
+      "pattern":"(DRAFT|[0-9]{0,4}[1-9][0-9]{0,4})"
     },
     "AnalyzePromptEvent":{
       "type":"structure",
@@ -552,26 +987,14 @@
           "shape":"String",
           "documentation":"<p>The action group that the API operation belongs to.</p>"
         },
-        "actionInvocationType":{
-          "shape":"ActionInvocationType",
-          "documentation":"<p>Contains information about the API operation to invoke.</p>"
-        },
-        "agentId":{
+        "httpMethod":{
           "shape":"String",
-          "documentation":"<p>The agent's ID.</p>"
+          "documentation":"<p>The HTTP method of the API operation.</p>"
         },
         "apiPath":{
           "shape":"ApiPath",
           "documentation":"<p>The path to the API operation.</p>"
         },
-        "collaboratorName":{
-          "shape":"Name",
-          "documentation":"<p>The agent collaborator's name.</p>"
-        },
-        "httpMethod":{
-          "shape":"String",
-          "documentation":"<p>The HTTP method of the API operation.</p>"
-        },
         "parameters":{
           "shape":"ApiParameters",
           "documentation":"<p>The parameters to provide for the API request, as the agent elicited from the user.</p>"
@@ -579,6 +1002,18 @@
         "requestBody":{
           "shape":"ApiRequestBody",
           "documentation":"<p>The request body to provide for the API request, as the agent elicited from the user.</p>"
+        },
+        "actionInvocationType":{
+          "shape":"ActionInvocationType",
+          "documentation":"<p>Contains information about the API operation to invoke.</p>"
+        },
+        "agentId":{
+          "shape":"String",
+          "documentation":"<p>The agent's ID.</p>"
+        },
+        "collaboratorName":{
+          "shape":"Name",
+          "documentation":"<p>The agent collaborator's name.</p>"
         }
       },
       "documentation":"<p>Contains information about the API operation that the agent predicts should be called.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p>In the <code>returnControl</code> field of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> </p> </li> </ul>"
@@ -627,9 +1062,9 @@
           "shape":"String",
           "documentation":"<p>The action group that the API operation belongs to.</p>"
         },
-        "agentId":{
+        "httpMethod":{
           "shape":"String",
-          "documentation":"<p>The agent's ID.</p>"
+          "documentation":"<p>The HTTP method for the API operation.</p>"
         },
         "apiPath":{
           "shape":"ApiPath",
@@ -639,9 +1074,9 @@
           "shape":"ConfirmationState",
           "documentation":"<p>Controls the API operations or functions to invoke based on the user confirmation.</p>"
         },
-        "httpMethod":{
-          "shape":"String",
-          "documentation":"<p>The HTTP method for the API operation.</p>"
+        "responseState":{
+          "shape":"ResponseState",
+          "documentation":"<p>Controls the final response state returned to end user when API/Function execution failed. When this state is FAILURE, the request would fail with dependency failure exception. When this state is REPROMPT, the API/function response will be sent to model for re-prompt</p>"
         },
         "httpStatusCode":{
           "shape":"Integer",
@@ -651,9 +1086,9 @@
           "shape":"ResponseBody",
           "documentation":"<p>The response body from the API operation. The key of the object is the content type (currently, only <code>TEXT</code> is supported). The response may be returned directly or from the Lambda function.</p>"
         },
-        "responseState":{
-          "shape":"ResponseState",
-          "documentation":"<p>Controls the final response state returned to end user when API/Function execution failed. When this state is FAILURE, the request would fail with dependency failure exception. When this state is REPROMPT, the API/function response will be sent to model for re-prompt</p>"
+        "agentId":{
+          "shape":"String",
+          "documentation":"<p>The agent's ID.</p>"
         }
       },
       "documentation":"<p>Contains information about the API operation that was called from the action group and the response body that was returned.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p>In the <code>returnControlInvocationResults</code> of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_RequestSyntax\">InvokeAgent request</a> </p> </li> </ul>"
@@ -701,7 +1136,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]+)?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?$"
+      "pattern":"(arn:aws(-[^:]+)?:(bedrock|sagemaker):[a-z0-9-]{1,20}:([0-9]{12})?:([a-z-]+/)?)?([a-z0-9.-]{1,63}){0,2}(([:][a-z0-9-]{1,63}){0,2})?(/[a-z0-9]{1,12})?"
     },
     "BedrockModelConfigurations":{
       "type":"structure",
@@ -717,13 +1152,13 @@
       "type":"structure",
       "required":["modelConfiguration"],
       "members":{
-        "modelConfiguration":{
-          "shape":"BedrockRerankingModelConfiguration",
-          "documentation":"<p>Contains configurations for a reranker model.</p>"
-        },
         "numberOfResults":{
           "shape":"BedrockRerankingConfigurationNumberOfResultsInteger",
           "documentation":"<p>The number of results to return after reranking.</p>"
+        },
+        "modelConfiguration":{
+          "shape":"BedrockRerankingModelConfiguration",
+          "documentation":"<p>Contains configurations for a reranker model.</p>"
         }
       },
       "documentation":"<p>Contains configurations for an Amazon Bedrock reranker model.</p>"
@@ -738,23 +1173,49 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/(.*))?$"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/(.*))?"
     },
     "BedrockRerankingModelConfiguration":{
       "type":"structure",
       "required":["modelArn"],
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"AdditionalModelRequestFields",
-          "documentation":"<p>A JSON object whose keys are request fields for the model and whose values are values for those fields.</p>"
-        },
         "modelArn":{
           "shape":"BedrockModelArn",
           "documentation":"<p>The ARN of the reranker model.</p>"
+        },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p>A JSON object whose keys are request fields for the model and whose values are values for those fields.</p>"
         }
       },
       "documentation":"<p>Contains configurations for a reranker model.</p>"
     },
+    "BedrockSessionContentBlock":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"BedrockSessionContentBlockTextString",
+          "documentation":"<p>The text in the invocation step.</p>"
+        },
+        "image":{
+          "shape":"ImageBlock",
+          "documentation":"<p>The image in the invocation step.</p>"
+        }
+      },
+      "documentation":"<p>A block of content that you pass to, or receive from, a Amazon Bedrock session in an invocation step. You pass the content to a session in the <code>payLoad</code> of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_PutInvocationStep.html\">PutInvocationStep</a> API operation. You retrieve the content with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GetInvocationStep.html\">GetInvocationStep</a> API operation.</p> <p>For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>",
+      "sensitive":true,
+      "union":true
+    },
+    "BedrockSessionContentBlockTextString":{
+      "type":"string",
+      "min":1
+    },
+    "BedrockSessionContentBlocks":{
+      "type":"list",
+      "member":{"shape":"BedrockSessionContentBlock"},
+      "min":1
+    },
+    "Blob":{"type":"blob"},
     "Boolean":{
       "type":"boolean",
       "box":true
@@ -768,11 +1229,15 @@
     "ByteContentDoc":{
       "type":"structure",
       "required":[
+        "identifier",
         "contentType",
-        "data",
-        "identifier"
+        "data"
       ],
       "members":{
+        "identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The file name of the document contained in the wrapper object.</p>"
+        },
         "contentType":{
           "shape":"ContentType",
           "documentation":"<p>The MIME type of the document contained in the wrapper object.</p>"
@@ -780,10 +1245,6 @@
         "data":{
           "shape":"ByteContentBlob",
           "documentation":"<p>The byte value of the file to upload, encoded as a Base-64 string.</p>"
-        },
-        "identifier":{
-          "shape":"Identifier",
-          "documentation":"<p>The file name of the document contained in the wrapper object.</p>"
         }
       },
       "documentation":"<p>This property contains the document to chat with, along with its attributes.</p>"
@@ -791,17 +1252,17 @@
     "ByteContentFile":{
       "type":"structure",
       "required":[
-        "data",
-        "mediaType"
+        "mediaType",
+        "data"
       ],
       "members":{
-        "data":{
-          "shape":"ByteContentBlob",
-          "documentation":"<p>The raw bytes of the file to attach. The maximum size of all files that is attached is 10MB. You can attach a maximum of 5 files. </p>"
-        },
         "mediaType":{
           "shape":"MimeType",
           "documentation":"<p>The MIME type of data contained in the file used for chat.</p>"
+        },
+        "data":{
+          "shape":"ByteContentBlob",
+          "documentation":"<p>The raw bytes of the file to attach. The maximum size of all files that is attached is 10MB. You can attach a maximum of 5 files. </p>"
         }
       },
       "documentation":"<p>The property contains the file to chat with, along with its attributes.</p>"
@@ -840,7 +1301,18 @@
       "members":{
         "citation":{
           "shape":"Citation",
-          "documentation":"<p>The citation.</p>"
+          "documentation":"<p>The citation.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Citation is deprecated. Please use GeneratedResponsePart and RetrievedReferences for citation event.",
+          "deprecatedSince":"2024-12-17"
+        },
+        "generatedResponsePart":{
+          "shape":"GeneratedResponsePart",
+          "documentation":"<p>The generated response to the citation event.</p>"
+        },
+        "retrievedReferences":{
+          "shape":"RetrievedReferences",
+          "documentation":"<p>The retrieved references of the citation event.</p>"
         }
       },
       "documentation":"<p>A citation event.</p>",
@@ -867,25 +1339,147 @@
     "CodeInterpreterInvocationOutput":{
       "type":"structure",
       "members":{
+        "executionOutput":{
+          "shape":"String",
+          "documentation":"<p>Contains the successful output returned from code execution</p>"
+        },
         "executionError":{
           "shape":"String",
           "documentation":"<p>Contains the error returned from code execution.</p>"
         },
-        "executionOutput":{
-          "shape":"String",
-          "documentation":"<p>Contains the successful output returned from code execution</p>"
+        "files":{
+          "shape":"Files",
+          "documentation":"<p>Contains output files, if generated by code execution.</p>"
         },
         "executionTimeout":{
           "shape":"Boolean",
           "documentation":"<p>Indicates if the execution of the code timed out.</p>"
         },
-        "files":{
-          "shape":"Files",
-          "documentation":"<p>Contains output files, if generated by code execution.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the output from the code interpreter.</p>"
         }
       },
       "documentation":"<p>Contains the JSON-formatted string returned by the API invoked by the code interpreter.</p>"
     },
+    "CollaborationInstruction":{
+      "type":"string",
+      "max":4000,
+      "min":1,
+      "sensitive":true
+    },
+    "Collaborator":{
+      "type":"structure",
+      "required":[
+        "foundationModel",
+        "instruction"
+      ],
+      "members":{
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the AWS KMS key that encrypts the inline collaborator. </p>"
+        },
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p> The foundation model used by the inline collaborator agent. </p>"
+        },
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p> Instruction that tell the inline collaborator agent what it should do and how it should interact with users. </p>"
+        },
+        "idleSessionTTLInSeconds":{
+          "shape":"SessionTTL",
+          "documentation":"<p> The number of seconds for which the Amazon Bedrock keeps information about the user's conversation with the inline collaborator agent.</p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout. </p>"
+        },
+        "actionGroups":{
+          "shape":"AgentActionGroups",
+          "documentation":"<p> List of action groups with each action group defining tasks the inline collaborator agent needs to carry out. </p>"
+        },
+        "knowledgeBases":{
+          "shape":"KnowledgeBases",
+          "documentation":"<p> Knowledge base associated with the inline collaborator agent. </p>"
+        },
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfigurationWithArn",
+          "documentation":"<p> Details of the guardwrail associated with the inline collaborator. </p>"
+        },
+        "promptOverrideConfiguration":{
+          "shape":"PromptOverrideConfiguration",
+          "documentation":"<p> Contains configurations to override prompt templates in different parts of an inline collaborator sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>. </p>"
+        },
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p> Defines how the inline supervisor agent handles information across multiple collaborator agents to coordinate a final response. </p>"
+        },
+        "collaboratorConfigurations":{
+          "shape":"CollaboratorConfigurations",
+          "documentation":"<p> Settings of the collaborator agent. </p>"
+        },
+        "agentName":{
+          "shape":"Name",
+          "documentation":"<p> Name of the inline collaborator agent which must be the same name as specified for <code>collaboratorName</code>. </p>"
+        }
+      },
+      "documentation":"<p> List of inline collaborators. </p>"
+    },
+    "CollaboratorConfiguration":{
+      "type":"structure",
+      "required":[
+        "collaboratorName",
+        "collaboratorInstruction"
+      ],
+      "members":{
+        "collaboratorName":{
+          "shape":"Name",
+          "documentation":"<p> Name of the inline collaborator agent which must be the same name as specified for <code>agentName</code>. </p>"
+        },
+        "collaboratorInstruction":{
+          "shape":"CollaborationInstruction",
+          "documentation":"<p> Instructions that tell the inline collaborator agent what it should do and how it should interact with users. </p>"
+        },
+        "agentAliasArn":{
+          "shape":"AgentAliasArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the inline collaborator agent. </p>"
+        },
+        "relayConversationHistory":{
+          "shape":"RelayConversationHistory",
+          "documentation":"<p> A relay conversation history for the inline collaborator agent. </p>"
+        }
+      },
+      "documentation":"<p> Settings of an inline collaborator agent. </p>"
+    },
+    "CollaboratorConfigurations":{
+      "type":"list",
+      "member":{"shape":"CollaboratorConfiguration"}
+    },
+    "Collaborators":{
+      "type":"list",
+      "member":{"shape":"Collaborator"}
+    },
+    "ConditionResultEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "satisfiedConditions"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the condition node that evaluated the conditions.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the condition evaluation occurred.</p>"
+        },
+        "satisfiedConditions":{
+          "shape":"SatisfiedConditions",
+          "documentation":"<p>A list of conditions that were satisfied during the evaluation.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a condition evaluation result during a flow execution. This event is generated when a condition node in the flow evaluates its conditions.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
     "ConfirmationState":{
       "type":"string",
       "enum":[
@@ -927,6 +1521,10 @@
         "body":{
           "shape":"String",
           "documentation":"<p>The body of the API response.</p>"
+        },
+        "images":{
+          "shape":"ImageInputs",
+          "documentation":"<p>Lists details, including format and source, for the image in the response from the function call. You can specify only one image and the function in the <code>returnControlInvocationResults</code> must be a computer use action. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agent-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>. </p>"
         }
       },
       "documentation":"<p>Contains the body of the API response.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p>In the <code>returnControlInvocationResults</code> field of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_RequestSyntax\">InvokeAgent request</a> </p> </li> </ul>"
@@ -938,7 +1536,7 @@
     },
     "ContentType":{
       "type":"string",
-      "pattern":"[a-z]{1,20}/.{1,20}"
+      "pattern":".*[a-z]{1,20}/.{1,20}.*"
     },
     "ConversationHistory":{
       "type":"structure",
@@ -957,6 +1555,92 @@
         "assistant"
       ]
     },
+    "CreateInvocationRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "invocationId":{
+          "shape":"Uuid",
+          "documentation":"<p>A unique identifier for the invocation in UUID format.</p>"
+        },
+        "description":{
+          "shape":"InvocationDescription",
+          "documentation":"<p>A description for the interactions in the invocation. For example, \"User asking about weather in Seattle\".</p>"
+        },
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the associated session for the invocation. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN). </p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "CreateInvocationResponse":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "invocationId",
+        "createdAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session associated with the invocation.</p>"
+        },
+        "invocationId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the invocation.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the invocation was created.</p>"
+        }
+      }
+    },
+    "CreateSessionRequest":{
+      "type":"structure",
+      "members":{
+        "sessionMetadata":{
+          "shape":"SessionMetadataMap",
+          "documentation":"<p>A map of key-value pairs containing attributes to be persisted across the session. For example, the user's ID, their language preference, and the type of device they are using.</p>"
+        },
+        "encryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to use to encrypt the session data. The user or role creating the session must have permission to use the key. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/session-encryption.html\">Amazon Bedrock session encryption</a>. </p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Specify the key-value pairs for the tags that you want to attach to the session.</p>"
+        }
+      }
+    },
+    "CreateSessionResponse":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "sessionArn",
+        "sessionStatus",
+        "createdAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session.</p>"
+        },
+        "sessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created session.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>The current status of the session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was created.</p>"
+        }
+      }
+    },
     "CreationMode":{
       "type":"string",
       "enum":[
@@ -968,16 +1652,26 @@
       "type":"string",
       "enum":["RETURN_CONTROL"]
     },
+    "CustomOrchestration":{
+      "type":"structure",
+      "members":{
+        "executor":{
+          "shape":"OrchestrationExecutor",
+          "documentation":"<p>The structure of the executor invoking the actions in custom orchestration. </p>"
+        }
+      },
+      "documentation":"<p>Contains details of the custom orchestration configured for the agent. </p>"
+    },
     "CustomOrchestrationTrace":{
       "type":"structure",
       "members":{
-        "event":{
-          "shape":"CustomOrchestrationTraceEvent",
-          "documentation":"<p> The event details used with the custom orchestration. </p>"
-        },
         "traceId":{
           "shape":"TraceId",
           "documentation":"<p> The unique identifier of the trace. </p>"
+        },
+        "event":{
+          "shape":"CustomOrchestrationTraceEvent",
+          "documentation":"<p> The event details used with the custom orchestration. </p>"
         }
       },
       "documentation":"<p> The trace behavior for the custom orchestration. </p>",
@@ -1002,22 +1696,22 @@
     "DeleteAgentMemoryRequest":{
       "type":"structure",
       "required":[
-        "agentAliasId",
-        "agentId"
+        "agentId",
+        "agentAliasId"
       ],
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The unique identifier of an alias of an agent.</p>",
-          "location":"uri",
-          "locationName":"agentAliasId"
-        },
         "agentId":{
           "shape":"AgentId",
           "documentation":"<p>The unique identifier of the agent to which the alias belongs.</p>",
           "location":"uri",
           "locationName":"agentId"
         },
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The unique identifier of an alias of an agent.</p>",
+          "location":"uri",
+          "locationName":"agentAliasId"
+        },
         "memoryId":{
           "shape":"MemoryId",
           "documentation":"<p>The unique identifier of the memory.</p>",
@@ -1034,9 +1728,24 @@
     },
     "DeleteAgentMemoryResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteSessionRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
       "members":{
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the session to be deleted. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
       }
     },
+    "DeleteSessionResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DependencyFailedException":{
       "type":"structure",
       "members":{
@@ -1055,14 +1764,47 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "Double":{
       "type":"double",
       "box":true
     },
+    "EndSessionRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the session to end. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "EndSessionResponse":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "sessionArn",
+        "sessionStatus"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier of the session you ended.</p>"
+        },
+        "sessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the session you ended.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>The current status of the session you ended.</p>"
+        }
+      }
+    },
     "ExecutionType":{
       "type":"string",
       "enum":[
@@ -1074,17 +1816,17 @@
       "type":"structure",
       "required":["sourceType"],
       "members":{
-        "byteContent":{
-          "shape":"ByteContentDoc",
-          "documentation":"<p>The identifier, contentType, and data of the external source wrapper object.</p>"
+        "sourceType":{
+          "shape":"ExternalSourceType",
+          "documentation":"<p>The source type of the external source wrapper object.</p>"
         },
         "s3Location":{
           "shape":"S3ObjectDoc",
           "documentation":"<p>The S3 location of the external source wrapper object.</p>"
         },
-        "sourceType":{
-          "shape":"ExternalSourceType",
-          "documentation":"<p>The source type of the external source wrapper object.</p>"
+        "byteContent":{
+          "shape":"ByteContentDoc",
+          "documentation":"<p>The identifier, contentType, and data of the external source wrapper object.</p>"
         }
       },
       "documentation":"<p>The unique external source of the content contained in the wrapper object.</p>"
@@ -1105,9 +1847,9 @@
     "ExternalSourcesGenerationConfiguration":{
       "type":"structure",
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"AdditionalModelRequestFields",
-          "documentation":"<p> Additional model parameters and their corresponding values not included in the textInferenceConfig structure for an external source. Takes in custom model parameters specific to the language model being used. </p>"
+        "promptTemplate":{
+          "shape":"PromptTemplate",
+          "documentation":"<p>Contain the textPromptTemplate string for the external source wrapper object.</p>"
         },
         "guardrailConfiguration":{
           "shape":"GuardrailConfiguration",
@@ -1117,13 +1859,13 @@
           "shape":"InferenceConfig",
           "documentation":"<p> Configuration settings for inference when using RetrieveAndGenerate to generate responses while using an external source.</p>"
         },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p> Additional model parameters and their corresponding values not included in the textInferenceConfig structure for an external source. Takes in custom model parameters specific to the language model being used. </p>"
+        },
         "performanceConfig":{
           "shape":"PerformanceConfiguration",
           "documentation":"<p>The latency configuration for the model.</p>"
-        },
-        "promptTemplate":{
-          "shape":"PromptTemplate",
-          "documentation":"<p>Contain the textPromptTemplate string for the external source wrapper object.</p>"
         }
       },
       "documentation":"<p>Contains the generation configuration of the external source wrapper object.</p>"
@@ -1135,10 +1877,6 @@
         "sources"
       ],
       "members":{
-        "generationConfiguration":{
-          "shape":"ExternalSourcesGenerationConfiguration",
-          "documentation":"<p>The prompt used with the external source wrapper object with the <code>retrieveAndGenerate</code> function.</p>"
-        },
         "modelArn":{
           "shape":"BedrockModelArn",
           "documentation":"<p>The model Amazon Resource Name (ARN) for the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
@@ -1146,6 +1884,10 @@
         "sources":{
           "shape":"ExternalSources",
           "documentation":"<p>The document for the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
+        },
+        "generationConfiguration":{
+          "shape":"ExternalSourcesGenerationConfiguration",
+          "documentation":"<p>The prompt used with the external source wrapper object with the <code>retrieveAndGenerate</code> function.</p>"
         }
       },
       "documentation":"<p>The configurations of the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
@@ -1157,13 +1899,21 @@
     "FailureTrace":{
       "type":"structure",
       "members":{
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
+        },
         "failureReason":{
           "shape":"FailureReasonString",
           "documentation":"<p>The reason the interaction failed.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "failureCode":{
+          "shape":"Integer",
+          "documentation":"<p>The failure code for the trace.</p>"
+        },
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Information about the failure that occurred.</p>"
         }
       },
       "documentation":"<p>Contains information about the failure of the interaction.</p>",
@@ -1213,17 +1963,17 @@
       "type":"structure",
       "required":["sourceType"],
       "members":{
-        "byteContent":{
-          "shape":"ByteContentFile",
-          "documentation":"<p>The data and the text of the attached files.</p>"
+        "sourceType":{
+          "shape":"FileSourceType",
+          "documentation":"<p>The source type of the files to attach.</p>"
         },
         "s3Location":{
           "shape":"S3ObjectFile",
           "documentation":"<p>The s3 location of the files to attach.</p>"
         },
-        "sourceType":{
-          "shape":"FileSourceType",
-          "documentation":"<p>The source type of the files to attach.</p>"
+        "byteContent":{
+          "shape":"ByteContentFile",
+          "documentation":"<p>The data and the text of the attached files.</p>"
         }
       },
       "documentation":"<p>The source file of the content contained in the wrapper object.</p>"
@@ -1271,8 +2021,7 @@
     },
     "FilterValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "FinalResponse":{
@@ -1281,6 +2030,10 @@
         "text":{
           "shape":"FinalResponseString",
           "documentation":"<p>The text in the response to the user.</p>"
+        },
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the invoke agent operation.</p>"
         }
       },
       "documentation":"<p>Contains details about the response to the user.</p>"
@@ -1297,7 +2050,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/[0-9a-zA-Z]{10})|(\\bTSTALIASID\\b|[0-9a-zA-Z]+)$"
+      "pattern":"(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/[0-9a-zA-Z]{10})|(\\bTSTALIASID\\b|[0-9a-zA-Z]+)"
     },
     "FlowCompletionEvent":{
       "type":"structure",
@@ -1319,33 +2072,282 @@
         "INPUT_REQUIRED"
       ]
     },
+    "FlowControlNodeType":{
+      "type":"string",
+      "enum":[
+        "Iterator",
+        "Loop"
+      ]
+    },
+    "FlowErrorCode":{
+      "type":"string",
+      "enum":[
+        "VALIDATION",
+        "INTERNAL_SERVER",
+        "NODE_EXECUTION_FAILED"
+      ]
+    },
+    "FlowExecutionContent":{
+      "type":"structure",
+      "members":{
+        "document":{
+          "shape":"Document",
+          "documentation":"<p>The document content of the field, which can contain text or structured data.</p>"
+        }
+      },
+      "documentation":"<p>Contains the content of an flow execution input or output field.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true,
+      "union":true
+    },
+    "FlowExecutionError":{
+      "type":"structure",
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node in the flow where the error occurred (if applicable).</p>"
+        },
+        "error":{
+          "shape":"FlowExecutionErrorType",
+          "documentation":"<p>The error code for the type of error that occurred.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A descriptive message that provides details about the error.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an error that occurred during an flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>"
+    },
+    "FlowExecutionErrorType":{
+      "type":"string",
+      "enum":["ExecutionTimedOut"]
+    },
+    "FlowExecutionErrors":{
+      "type":"list",
+      "member":{"shape":"FlowExecutionError"}
+    },
+    "FlowExecutionEvent":{
+      "type":"structure",
+      "members":{
+        "flowInputEvent":{
+          "shape":"FlowExecutionInputEvent",
+          "documentation":"<p>Contains information about the inputs provided to the flow at the start of execution.</p>"
+        },
+        "flowOutputEvent":{
+          "shape":"FlowExecutionOutputEvent",
+          "documentation":"<p>Contains information about the outputs produced by the flow at the end of execution.</p>"
+        },
+        "nodeInputEvent":{
+          "shape":"NodeInputEvent",
+          "documentation":"<p>Contains information about the inputs provided to a specific node during execution.</p>"
+        },
+        "nodeOutputEvent":{
+          "shape":"NodeOutputEvent",
+          "documentation":"<p>Contains information about the outputs produced by a specific node during execution.</p>"
+        },
+        "conditionResultEvent":{
+          "shape":"ConditionResultEvent",
+          "documentation":"<p>Contains information about a condition evaluation result during the flow execution. This event is generated when a condition node in the flow evaluates its conditions.</p>"
+        },
+        "nodeFailureEvent":{
+          "shape":"NodeFailureEvent",
+          "documentation":"<p>Contains information about a failure that occurred at a specific node during execution.</p>"
+        },
+        "flowFailureEvent":{
+          "shape":"FlowFailureEvent",
+          "documentation":"<p>Contains information about a failure that occurred at the flow level during execution.</p>"
+        },
+        "nodeActionEvent":{
+          "shape":"NodeActionEvent",
+          "documentation":"<p>Contains information about an action (operation) called by a node during execution.</p>"
+        },
+        "nodeDependencyEvent":{
+          "shape":"NodeDependencyEvent",
+          "documentation":"<p>Contains information about an internal trace of a specific node during execution.</p>"
+        }
+      },
+      "documentation":"<p>Represents an event that occurred during an flow execution. This is a union type that can contain one of several event types, such as node input and output events; flow input and output events; condition node result events, or failure events.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "union":true
+    },
+    "FlowExecutionEventType":{
+      "type":"string",
+      "enum":[
+        "Node",
+        "Flow"
+      ]
+    },
+    "FlowExecutionEvents":{
+      "type":"list",
+      "member":{"shape":"FlowExecutionEvent"},
+      "max":10,
+      "min":0
+    },
     "FlowExecutionId":{
       "type":"string",
       "max":100,
       "min":2,
-      "pattern":"^[0-9a-zA-Z._:-]+$"
+      "pattern":"[0-9a-zA-Z._:-]+"
     },
-    "FlowIdentifier":{
+    "FlowExecutionIdentifier":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10})|([0-9a-zA-Z]{10})$"
+      "pattern":"[a-zA-Z0-9-]{1,36}$|^(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10}/alias/[0-9a-zA-Z]{10}/execution/[a-zA-Z0-9-]{1,36})"
     },
-    "FlowInput":{
+    "FlowExecutionInputEvent":{
       "type":"structure",
       "required":[
-        "content",
-        "nodeName"
+        "nodeName",
+        "timestamp",
+        "fields"
       ],
       "members":{
-        "content":{
-          "shape":"FlowInputContent",
-          "documentation":"<p>Contains information about an input into the prompt flow.</p>"
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that receives the inputs.</p>"
         },
-        "nodeInputName":{
-          "shape":"NodeInputName",
-          "documentation":"<p>The name of the input from the flow input node.</p>"
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the inputs are provided.</p>"
+        },
+        "fields":{
+          "shape":"FlowInputFields",
+          "documentation":"<p>A list of input fields provided to the flow.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the inputs provided to the flow at the start of a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "FlowExecutionName":{
+      "type":"string",
+      "max":36,
+      "min":0,
+      "pattern":"[a-zA-Z0-9-]{1,36}"
+    },
+    "FlowExecutionOutputEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "fields"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that produces the outputs.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the outputs are produced.</p>"
+        },
+        "fields":{
+          "shape":"FlowOutputFields",
+          "documentation":"<p>A list of output fields produced by the flow.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the outputs produced by the flow during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "FlowExecutionRoleArn":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/(service-role/)?.+"
+    },
+    "FlowExecutionStatus":{
+      "type":"string",
+      "enum":[
+        "Running",
+        "Succeeded",
+        "Failed",
+        "TimedOut",
+        "Aborted"
+      ]
+    },
+    "FlowExecutionSummaries":{
+      "type":"list",
+      "member":{"shape":"FlowExecutionSummary"},
+      "max":10,
+      "min":0
+    },
+    "FlowExecutionSummary":{
+      "type":"structure",
+      "required":[
+        "executionArn",
+        "flowAliasIdentifier",
+        "flowIdentifier",
+        "flowVersion",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "executionArn":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the flow execution.</p>"
         },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the execution.</p>"
+        },
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>"
+        },
+        "flowVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the flow used for the execution.</p>"
+        },
+        "status":{
+          "shape":"FlowExecutionStatus",
+          "documentation":"<p>The current status of the flow execution.</p> <p>Flow executions time out after 24 hours.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the flow execution was created.</p>"
+        },
+        "endedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the flow execution ended. This field is only populated when the execution has completed, failed, timed out, or been aborted.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a flow execution, including its status, timestamps, and identifiers.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>"
+    },
+    "FlowFailureEvent":{
+      "type":"structure",
+      "required":[
+        "timestamp",
+        "errorCode",
+        "errorMessage"
+      ],
+      "members":{
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the failure occurred.</p>"
+        },
+        "errorCode":{
+          "shape":"FlowErrorCode",
+          "documentation":"<p>The error code that identifies the type of failure that occurred.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A descriptive message that provides details about the failure.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a failure that occurred at the flow level during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "FlowIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"(arn:aws:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:flow/[0-9a-zA-Z]{10})|([0-9a-zA-Z]{10})"
+    },
+    "FlowInput":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "content"
+      ],
+      "members":{
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the flow input node that begins the prompt flow.</p>"
@@ -1353,6 +2355,14 @@
         "nodeOutputName":{
           "shape":"NodeOutputName",
           "documentation":"<p>The name of the output from the flow input node that begins the prompt flow.</p>"
+        },
+        "content":{
+          "shape":"FlowInputContent",
+          "documentation":"<p>Contains information about an input into the prompt flow.</p>"
+        },
+        "nodeInputName":{
+          "shape":"NodeInputName",
+          "documentation":"<p>The name of the input from the flow input node.</p>"
         }
       },
       "documentation":"<p>Contains information about an input into the prompt flow and where to send it.</p>"
@@ -1369,6 +2379,31 @@
       "sensitive":true,
       "union":true
     },
+    "FlowInputField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "content"
+      ],
+      "members":{
+        "name":{
+          "shape":"NodeInputName",
+          "documentation":"<p>The name of the input field as defined in the flow's input schema.</p>"
+        },
+        "content":{
+          "shape":"FlowExecutionContent",
+          "documentation":"<p>The content of the input field, which can contain text or structured data.</p>"
+        }
+      },
+      "documentation":"<p>Represents an input field provided to a flow during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "FlowInputFields":{
+      "type":"list",
+      "member":{"shape":"FlowInputField"},
+      "max":5,
+      "min":1
+    },
     "FlowInputs":{
       "type":"list",
       "member":{"shape":"FlowInput"},
@@ -1389,15 +2424,11 @@
     "FlowMultiTurnInputRequestEvent":{
       "type":"structure",
       "required":[
-        "content",
         "nodeName",
-        "nodeType"
+        "nodeType",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"FlowMultiTurnInputContent",
-          "documentation":"<p>The content payload containing the input request details for the multi-turn interaction.</p>"
-        },
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the node in the flow that is requesting the input.</p>"
@@ -1405,12 +2436,48 @@
         "nodeType":{
           "shape":"NodeType",
           "documentation":"<p>The type of the node in the flow that is requesting the input.</p>"
+        },
+        "content":{
+          "shape":"FlowMultiTurnInputContent",
+          "documentation":"<p>The content payload containing the input request details for the multi-turn interaction.</p>"
         }
       },
       "documentation":"<p>Response object from the flow multi-turn node requesting additional information.</p>",
       "event":true,
       "sensitive":true
     },
+    "FlowNodeIODataType":{
+      "type":"string",
+      "enum":[
+        "String",
+        "Number",
+        "Boolean",
+        "Object",
+        "Array"
+      ]
+    },
+    "FlowNodeInputCategory":{
+      "type":"string",
+      "enum":[
+        "LoopCondition",
+        "ReturnValueToLoopStart",
+        "ExitLoop"
+      ]
+    },
+    "FlowNodeInputExpression":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "sensitive":true
+    },
+    "FlowNodeInputName":{
+      "type":"string",
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
+    },
+    "FlowNodeOutputName":{
+      "type":"string",
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){1,50}"
+    },
     "FlowOutputContent":{
       "type":"structure",
       "members":{
@@ -1425,15 +2492,11 @@
     "FlowOutputEvent":{
       "type":"structure",
       "required":[
-        "content",
         "nodeName",
-        "nodeType"
+        "nodeType",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"FlowOutputContent",
-          "documentation":"<p>The content in the output.</p>"
-        },
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the flow output node that the output is from.</p>"
@@ -1441,43 +2504,52 @@
         "nodeType":{
           "shape":"NodeType",
           "documentation":"<p>The type of the node that the output is from.</p>"
+        },
+        "content":{
+          "shape":"FlowOutputContent",
+          "documentation":"<p>The content in the output.</p>"
         }
       },
       "documentation":"<p>Contains information about an output from prompt flow invoction.</p>",
       "event":true,
       "sensitive":true
     },
-    "FlowResponseStream":{
+    "FlowOutputField":{
       "type":"structure",
+      "required":[
+        "name",
+        "content"
+      ],
       "members":{
-        "accessDeniedException":{
-          "shape":"AccessDeniedException",
-          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
-        },
-        "badGatewayException":{
-          "shape":"BadGatewayException",
-          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
-        },
-        "conflictException":{
-          "shape":"ConflictException",
-          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request.</p>"
+        "name":{
+          "shape":"NodeOutputName",
+          "documentation":"<p>The name of the output field as defined in the flow's output schema.</p>"
         },
-        "dependencyFailedException":{
-          "shape":"DependencyFailedException",
-          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        "content":{
+          "shape":"FlowExecutionContent",
+          "documentation":"<p>The content of the output field, which can contain text or structured data.</p>"
+        }
+      },
+      "documentation":"<p>Represents an output field produced by a flow during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "FlowOutputFields":{
+      "type":"list",
+      "member":{"shape":"FlowOutputField"},
+      "max":5,
+      "min":1
+    },
+    "FlowResponseStream":{
+      "type":"structure",
+      "members":{
+        "flowOutputEvent":{
+          "shape":"FlowOutputEvent",
+          "documentation":"<p>Contains information about an output from flow invocation.</p>"
         },
         "flowCompletionEvent":{
           "shape":"FlowCompletionEvent",
           "documentation":"<p>Contains information about why the flow completed.</p>"
         },
-        "flowMultiTurnInputRequestEvent":{
-          "shape":"FlowMultiTurnInputRequestEvent",
-          "documentation":"<p>The event stream containing the multi-turn input request information from the flow.</p>"
-        },
-        "flowOutputEvent":{
-          "shape":"FlowOutputEvent",
-          "documentation":"<p>Contains information about an output from flow invocation.</p>"
-        },
         "flowTraceEvent":{
           "shape":"FlowTraceEvent",
           "documentation":"<p>Contains information about a trace, which tracks an input or output for a node in the flow.</p>"
@@ -1486,6 +2558,10 @@
           "shape":"InternalServerException",
           "documentation":"<p>An internal server error occurred. Retry your request.</p>"
         },
+        "validationException":{
+          "shape":"ValidationException",
+          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        },
         "resourceNotFoundException":{
           "shape":"ResourceNotFoundException",
           "documentation":"<p>The specified resource Amazon Resource Name (ARN) was not found. Check the Amazon Resource Name (ARN) and try your request again.</p>"
@@ -1498,9 +2574,25 @@
           "shape":"ThrottlingException",
           "documentation":"<p>The number of requests exceeds the limit. Resubmit your request later.</p>"
         },
-        "validationException":{
-          "shape":"ValidationException",
-          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        "accessDeniedException":{
+          "shape":"AccessDeniedException",
+          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
+        },
+        "conflictException":{
+          "shape":"ConflictException",
+          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request.</p>"
+        },
+        "dependencyFailedException":{
+          "shape":"DependencyFailedException",
+          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        },
+        "badGatewayException":{
+          "shape":"BadGatewayException",
+          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
+        },
+        "flowMultiTurnInputRequestEvent":{
+          "shape":"FlowMultiTurnInputRequestEvent",
+          "documentation":"<p>The event stream containing the multi-turn input request information from the flow.</p>"
         }
       },
       "documentation":"<p>The output of the flow.</p>",
@@ -1509,10 +2601,6 @@
     "FlowTrace":{
       "type":"structure",
       "members":{
-        "conditionNodeResultTrace":{
-          "shape":"FlowTraceConditionNodeResultEvent",
-          "documentation":"<p>Contains information about an output from a condition node.</p>"
-        },
         "nodeInputTrace":{
           "shape":"FlowTraceNodeInputEvent",
           "documentation":"<p>Contains information about the input into a node.</p>"
@@ -1520,6 +2608,18 @@
         "nodeOutputTrace":{
           "shape":"FlowTraceNodeOutputEvent",
           "documentation":"<p>Contains information about the output from a node.</p>"
+        },
+        "conditionNodeResultTrace":{
+          "shape":"FlowTraceConditionNodeResultEvent",
+          "documentation":"<p>Contains information about an output from a condition node.</p>"
+        },
+        "nodeActionTrace":{
+          "shape":"FlowTraceNodeActionEvent",
+          "documentation":"<p>Contains information about an action (operation) called by a node.</p>"
+        },
+        "nodeDependencyTrace":{
+          "shape":"FlowTraceDependencyEvent",
+          "documentation":"<p>Contains information about an internal trace of a node.</p>"
         }
       },
       "documentation":"<p>Contains information about an input or output for a node in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
@@ -1542,21 +2642,21 @@
       "type":"structure",
       "required":[
         "nodeName",
-        "satisfiedConditions",
-        "timestamp"
+        "timestamp",
+        "satisfiedConditions"
       ],
       "members":{
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the condition node.</p>"
         },
-        "satisfiedConditions":{
-          "shape":"FlowTraceConditions",
-          "documentation":"<p>An array of objects containing information about the conditions that were satisfied.</p>"
-        },
         "timestamp":{
           "shape":"DateTimestamp",
           "documentation":"<p>The date and time that the trace was returned.</p>"
+        },
+        "satisfiedConditions":{
+          "shape":"FlowTraceConditions",
+          "documentation":"<p>An array of objects containing information about the conditions that were satisfied.</p>"
         }
       },
       "documentation":"<p>Contains information about an output from a condition node. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
@@ -1568,6 +2668,30 @@
       "max":5,
       "min":1
     },
+    "FlowTraceDependencyEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "traceElements"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that generated the dependency trace.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time that the dependency trace was generated.</p>"
+        },
+        "traceElements":{
+          "shape":"TraceElements",
+          "documentation":"<p>The trace elements containing detailed information about the dependency.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a dependency trace event in the flow.</p>",
+      "sensitive":true
+    },
     "FlowTraceEvent":{
       "type":"structure",
       "required":["trace"],
@@ -1580,6 +2704,48 @@
       "documentation":"<p>Contains information about a trace, which tracks an input or output for a node in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
       "event":true
     },
+    "FlowTraceNodeActionEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "requestId",
+        "serviceName",
+        "operationName"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that called the operation.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time that the operation was called.</p>"
+        },
+        "requestId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the request that the node made to the operation.</p>"
+        },
+        "serviceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service that the node called.</p>"
+        },
+        "operationName":{
+          "shape":"String",
+          "documentation":"<p>The name of the operation that the node called.</p>"
+        },
+        "operationRequest":{
+          "shape":"Document",
+          "documentation":"<p>The request payload sent to the downstream service.</p>"
+        },
+        "operationResponse":{
+          "shape":"Document",
+          "documentation":"<p>The response payload received from the downstream service.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an action (operation) called by a node in an Amazon Bedrock flow. The service generates action events for calls made by prompt nodes, agent nodes, and Amazon Web Services Lambda nodes. </p>",
+      "sensitive":true
+    },
     "FlowTraceNodeInputContent":{
       "type":"structure",
       "members":{
@@ -1595,15 +2761,11 @@
     "FlowTraceNodeInputEvent":{
       "type":"structure",
       "required":[
-        "fields",
         "nodeName",
-        "timestamp"
+        "timestamp",
+        "fields"
       ],
       "members":{
-        "fields":{
-          "shape":"FlowTraceNodeInputFields",
-          "documentation":"<p>An array of objects containing information about each field in the input.</p>"
-        },
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the node that received the input.</p>"
@@ -1611,25 +2773,73 @@
         "timestamp":{
           "shape":"DateTimestamp",
           "documentation":"<p>The date and time that the trace was returned.</p>"
+        },
+        "fields":{
+          "shape":"FlowTraceNodeInputFields",
+          "documentation":"<p>An array of objects containing information about each field in the input.</p>"
         }
       },
       "documentation":"<p>Contains information about the input into a node. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
       "sensitive":true
     },
+    "FlowTraceNodeInputExecutionChain":{
+      "type":"list",
+      "member":{"shape":"FlowTraceNodeInputExecutionChainItem"},
+      "sensitive":true
+    },
+    "FlowTraceNodeInputExecutionChainItem":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "type"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node in the execution chain.</p>"
+        },
+        "index":{
+          "shape":"Integer",
+          "documentation":"<p>The index position of this item in the execution chain.</p>"
+        },
+        "type":{
+          "shape":"FlowControlNodeType",
+          "documentation":"<p>The type of execution chain item. Supported values are Iterator and Loop.</p>"
+        }
+      },
+      "documentation":"<p>Represents an item in the execution chain for flow trace node input tracking.</p>",
+      "sensitive":true
+    },
     "FlowTraceNodeInputField":{
       "type":"structure",
       "required":[
-        "content",
-        "nodeInputName"
+        "nodeInputName",
+        "content"
       ],
       "members":{
+        "nodeInputName":{
+          "shape":"NodeInputName",
+          "documentation":"<p>The name of the node input.</p>"
+        },
         "content":{
           "shape":"FlowTraceNodeInputContent",
           "documentation":"<p>The content of the node input.</p>"
         },
-        "nodeInputName":{
-          "shape":"NodeInputName",
-          "documentation":"<p>The name of the node input.</p>"
+        "source":{
+          "shape":"FlowTraceNodeInputSource",
+          "documentation":"<p>The source node that provides input data to this field.</p>"
+        },
+        "type":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The data type of the input field for compatibility validation.</p>"
+        },
+        "category":{
+          "shape":"FlowNodeInputCategory",
+          "documentation":"<p>The category of the input field.</p>"
+        },
+        "executionChain":{
+          "shape":"FlowTraceNodeInputExecutionChain",
+          "documentation":"<p>The execution path through nested nodes like iterators and loops.</p>"
         }
       },
       "documentation":"<p>Contains information about a field in the input into a node. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
@@ -1641,6 +2851,30 @@
       "max":5,
       "min":1
     },
+    "FlowTraceNodeInputSource":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "outputFieldName",
+        "expression"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the source node that provides the input data.</p>"
+        },
+        "outputFieldName":{
+          "shape":"FlowNodeOutputName",
+          "documentation":"<p>The name of the output field from the source node.</p>"
+        },
+        "expression":{
+          "shape":"FlowNodeInputExpression",
+          "documentation":"<p>The expression used to extract data from the source.</p>"
+        }
+      },
+      "documentation":"<p>Represents the source of input data for a flow trace node field.</p>",
+      "sensitive":true
+    },
     "FlowTraceNodeOutputContent":{
       "type":"structure",
       "members":{
@@ -1655,15 +2889,11 @@
     "FlowTraceNodeOutputEvent":{
       "type":"structure",
       "required":[
-        "fields",
         "nodeName",
-        "timestamp"
+        "timestamp",
+        "fields"
       ],
       "members":{
-        "fields":{
-          "shape":"FlowTraceNodeOutputFields",
-          "documentation":"<p>An array of objects containing information about each field in the output.</p>"
-        },
         "nodeName":{
           "shape":"NodeName",
           "documentation":"<p>The name of the node that yielded the output.</p>"
@@ -1671,6 +2901,10 @@
         "timestamp":{
           "shape":"DateTimestamp",
           "documentation":"<p>The date and time that the trace was returned.</p>"
+        },
+        "fields":{
+          "shape":"FlowTraceNodeOutputFields",
+          "documentation":"<p>An array of objects containing information about each field in the output.</p>"
         }
       },
       "documentation":"<p>Contains information about the output from a node. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
@@ -1679,17 +2913,25 @@
     "FlowTraceNodeOutputField":{
       "type":"structure",
       "required":[
-        "content",
-        "nodeOutputName"
+        "nodeOutputName",
+        "content"
       ],
       "members":{
+        "nodeOutputName":{
+          "shape":"NodeOutputName",
+          "documentation":"<p>The name of the node output.</p>"
+        },
         "content":{
           "shape":"FlowTraceNodeOutputContent",
           "documentation":"<p>The content of the node output.</p>"
         },
-        "nodeOutputName":{
-          "shape":"NodeOutputName",
-          "documentation":"<p>The name of the node output.</p>"
+        "next":{
+          "shape":"FlowTraceNodeOutputNextList",
+          "documentation":"<p>The next node that receives output data from this field.</p>"
+        },
+        "type":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The data type of the output field for compatibility validation.</p>"
         }
       },
       "documentation":"<p>Contains information about a field in the output from a node. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>",
@@ -1701,6 +2943,29 @@
       "max":2,
       "min":1
     },
+    "FlowTraceNodeOutputNext":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "inputFieldName"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the next node that receives the output data.</p>"
+        },
+        "inputFieldName":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the input field in the next node that receives the data.</p>"
+        }
+      },
+      "documentation":"<p>Represents the next node that receives output data from a flow trace.</p>",
+      "sensitive":true
+    },
+    "FlowTraceNodeOutputNextList":{
+      "type":"list",
+      "member":{"shape":"FlowTraceNodeOutputNext"}
+    },
     "Function":{
       "type":"string",
       "sensitive":true
@@ -1709,14 +2974,14 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "description":{
-          "shape":"FunctionDescription",
-          "documentation":"<p> A description of the function and its purpose. </p>"
-        },
         "name":{
           "shape":"ResourceName",
           "documentation":"<p> A name for the function. </p>"
         },
+        "description":{
+          "shape":"FunctionDescription",
+          "documentation":"<p> A description of the function and its purpose. </p>"
+        },
         "parameters":{
           "shape":"ParameterMap",
           "documentation":"<p> The parameters that the agent elicits from the user to fulfill the function. </p>"
@@ -1741,6 +3006,14 @@
           "shape":"String",
           "documentation":"<p>The action group that the function belongs to.</p>"
         },
+        "parameters":{
+          "shape":"FunctionParameters",
+          "documentation":"<p>A list of parameters of the function.</p>"
+        },
+        "function":{
+          "shape":"String",
+          "documentation":"<p>The name of the function.</p>"
+        },
         "actionInvocationType":{
           "shape":"ActionInvocationType",
           "documentation":"<p>Contains information about the function to invoke,</p>"
@@ -1752,14 +3025,6 @@
         "collaboratorName":{
           "shape":"Name",
           "documentation":"<p>The collaborator's name.</p>"
-        },
-        "function":{
-          "shape":"String",
-          "documentation":"<p>The name of the function.</p>"
-        },
-        "parameters":{
-          "shape":"FunctionParameters",
-          "documentation":"<p>A list of parameters of the function.</p>"
         }
       },
       "documentation":"<p>Contains information about the function that the agent predicts should be called.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p>In the <code>returnControl</code> field of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> </p> </li> </ul>"
@@ -1794,10 +3059,6 @@
           "shape":"String",
           "documentation":"<p>The action group that the function belongs to.</p>"
         },
-        "agentId":{
-          "shape":"String",
-          "documentation":"<p>The agent's ID.</p>"
-        },
         "confirmationState":{
           "shape":"ConfirmationState",
           "documentation":"<p>Contains the user confirmation information about the function that was called.</p>"
@@ -1808,11 +3069,15 @@
         },
         "responseBody":{
           "shape":"ResponseBody",
-          "documentation":"<p>The response from the function call using the parameters. The key of the object is the content type (currently, only <code>TEXT</code> is supported). The response may be returned directly or from the Lambda function.</p>"
+          "documentation":"<p>The response from the function call using the parameters. The response might be returned directly or from the Lambda function. Specify <code>TEXT</code> or <code>IMAGES</code>. The key of the object is the content type. You can only specify one type. If you specify <code>IMAGES</code>, you can specify only one image. You can specify images only when the function in the <code>returnControlInvocationResults</code> is a computer use action. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agent-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>.</p>"
         },
         "responseState":{
           "shape":"ResponseState",
           "documentation":"<p>Controls the final response state returned to end user when API/Function execution failed. When this state is FAILURE, the request would fail with dependency failure exception. When this state is REPROMPT, the API/function response will be sent to model for re-prompt</p>"
+        },
+        "agentId":{
+          "shape":"String",
+          "documentation":"<p>The agent's ID.</p>"
         }
       },
       "documentation":"<p>Contains information about the function that was called from the action group and the response that was returned.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p>In the <code>returnControlInvocationResults</code> of the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_RequestSyntax\">InvokeAgent request</a> </p> </li> </ul>"
@@ -1866,13 +3131,13 @@
     "GeneratedQuery":{
       "type":"structure",
       "members":{
-        "sql":{
-          "shape":"String",
-          "documentation":"<p>An SQL query that corresponds to the natural language query.</p>"
-        },
         "type":{
           "shape":"GeneratedQueryType",
           "documentation":"<p>The type of transformed query.</p>"
+        },
+        "sql":{
+          "shape":"String",
+          "documentation":"<p>An SQL query that corresponds to the natural language query.</p>"
         }
       },
       "documentation":"<p>Contains information about a query generated for a natural language query.</p>",
@@ -1895,9 +3160,9 @@
     "GenerationConfiguration":{
       "type":"structure",
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"AdditionalModelRequestFields",
-          "documentation":"<p> Additional model parameters and corresponding values not included in the textInferenceConfig structure for a knowledge base. This allows users to provide custom model parameters specific to the language model being used. </p>"
+        "promptTemplate":{
+          "shape":"PromptTemplate",
+          "documentation":"<p>Contains the template for the prompt that's sent to the model for response generation. Generation prompts must include the <code>$search_results$</code> variable. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Use placeholder variables</a> in the user guide.</p>"
         },
         "guardrailConfiguration":{
           "shape":"GuardrailConfiguration",
@@ -1907,13 +3172,13 @@
           "shape":"InferenceConfig",
           "documentation":"<p> Configuration settings for inference when using RetrieveAndGenerate to generate responses while using a knowledge base as a source. </p>"
         },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p> Additional model parameters and corresponding values not included in the textInferenceConfig structure for a knowledge base. This allows users to provide custom model parameters specific to the language model being used. </p>"
+        },
         "performanceConfig":{
           "shape":"PerformanceConfiguration",
           "documentation":"<p>The latency configuration for the model.</p>"
-        },
-        "promptTemplate":{
-          "shape":"PromptTemplate",
-          "documentation":"<p>Contains the template for the prompt that's sent to the model for response generation. Generation prompts must include the <code>$search_results$</code> variable. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Use placeholder variables</a> in the user guide.</p>"
         }
       },
       "documentation":"<p>Contains configurations for response generation based on the knowledge base query results.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_RequestSyntax\">RetrieveAndGenerate request</a> </p> </li> </ul>"
@@ -1921,23 +3186,17 @@
     "GetAgentMemoryRequest":{
       "type":"structure",
       "required":[
-        "agentAliasId",
         "agentId",
-        "memoryId",
-        "memoryType"
+        "agentAliasId",
+        "memoryType",
+        "memoryId"
       ],
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The unique identifier of an alias of an agent.</p>",
-          "location":"uri",
-          "locationName":"agentAliasId"
-        },
-        "agentId":{
-          "shape":"AgentId",
-          "documentation":"<p>The unique identifier of the agent to which the alias belongs.</p>",
-          "location":"uri",
-          "locationName":"agentId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the maxItems value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxItems":{
           "shape":"MaxResults",
@@ -1945,11 +3204,17 @@
           "location":"querystring",
           "locationName":"maxItems"
         },
-        "memoryId":{
-          "shape":"MemoryId",
-          "documentation":"<p>The unique identifier of the memory. </p>",
-          "location":"querystring",
-          "locationName":"memoryId"
+        "agentId":{
+          "shape":"AgentId",
+          "documentation":"<p>The unique identifier of the agent to which the alias belongs.</p>",
+          "location":"uri",
+          "locationName":"agentId"
+        },
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The unique identifier of an alias of an agent.</p>",
+          "location":"uri",
+          "locationName":"agentAliasId"
         },
         "memoryType":{
           "shape":"MemoryType",
@@ -1957,24 +3222,249 @@
           "location":"querystring",
           "locationName":"memoryType"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the total number of results is greater than the maxItems value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>",
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory. </p>",
           "location":"querystring",
-          "locationName":"nextToken"
+          "locationName":"memoryId"
         }
       }
     },
     "GetAgentMemoryResponse":{
       "type":"structure",
       "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the maxItems value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        },
         "memoryContents":{
           "shape":"Memories",
           "documentation":"<p>Contains details of the sessions stored in the memory</p>"
+        }
+      }
+    },
+    "GetExecutionFlowSnapshotRequest":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "executionIdentifier"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the total number of results is greater than the maxItems value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the flow execution.</p>",
+          "location":"uri",
+          "locationName":"flowAliasIdentifier"
+        },
+        "executionIdentifier":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The unique identifier of the flow execution.</p>",
+          "location":"uri",
+          "locationName":"executionIdentifier"
+        }
+      }
+    },
+    "GetExecutionFlowSnapshotResponse":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "flowVersion",
+        "executionRoleArn",
+        "definition"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the flow execution.</p>"
+        },
+        "flowVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the flow used for the flow execution.</p>"
+        },
+        "executionRoleArn":{
+          "shape":"FlowExecutionRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM service role that's used by the flow execution.</p>"
+        },
+        "definition":{
+          "shape":"String",
+          "documentation":"<p>The flow definition used for the flow execution, including the nodes, connections, and configuration at the time when the execution started.</p> <p>The definition returns as a string that follows the structure of a <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_FlowDefinition.html\">FlowDefinition</a> object.</p>"
+        },
+        "customerEncryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer managed KMS key that's used to encrypt the flow snapshot.</p>"
+        }
+      }
+    },
+    "GetFlowExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "executionIdentifier"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the execution.</p>",
+          "location":"uri",
+          "locationName":"flowAliasIdentifier"
+        },
+        "executionIdentifier":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The unique identifier of the flow execution to retrieve.</p>",
+          "location":"uri",
+          "locationName":"executionIdentifier"
+        }
+      }
+    },
+    "GetFlowExecutionResponse":{
+      "type":"structure",
+      "required":[
+        "executionArn",
+        "status",
+        "startedAt",
+        "flowAliasIdentifier",
+        "flowIdentifier",
+        "flowVersion"
+      ],
+      "members":{
+        "executionArn":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the flow execution.</p>"
+        },
+        "status":{
+          "shape":"FlowExecutionStatus",
+          "documentation":"<p>The current status of the flow execution.</p> <p>Flow executions time out after 24 hours.</p>"
+        },
+        "startedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the flow execution started.</p>"
+        },
+        "endedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the flow execution ended. This field is only populated when the execution has completed, failed, timed out, or been aborted.</p>"
+        },
+        "errors":{
+          "shape":"FlowExecutionErrors",
+          "documentation":"<p>A list of errors that occurred during the flow execution. Each error includes an error code, message, and the node where the error occurred, if applicable.</p>"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the execution.</p>"
+        },
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>"
+        },
+        "flowVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the flow used for the execution.</p>"
+        }
+      }
+    },
+    "GetInvocationStepRequest":{
+      "type":"structure",
+      "required":[
+        "invocationIdentifier",
+        "invocationStepId",
+        "sessionIdentifier"
+      ],
+      "members":{
+        "invocationIdentifier":{
+          "shape":"InvocationIdentifier",
+          "documentation":"<p>The unique identifier for the invocation in UUID format.</p>"
+        },
+        "invocationStepId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier (in UUID format) for the specific invocation step to retrieve.</p>",
+          "location":"uri",
+          "locationName":"invocationStepId"
+        },
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the invocation step's associated session. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "GetInvocationStepResponse":{
+      "type":"structure",
+      "required":["invocationStep"],
+      "members":{
+        "invocationStep":{
+          "shape":"InvocationStep",
+          "documentation":"<p>The complete details of the requested invocation step.</p>"
+        }
+      }
+    },
+    "GetSessionRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>A unique identifier for the session to retrieve. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "GetSessionResponse":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "sessionArn",
+        "sessionStatus",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session in UUID format.</p>"
+        },
+        "sessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>The current status of the session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was last modified.</p>"
+        },
+        "sessionMetadata":{
+          "shape":"SessionMetadataMap",
+          "documentation":"<p>A map of key-value pairs containing attributes persisted across the session.</p>"
+        },
+        "encryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Key Management Service key used to encrypt the session data. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/session-encryption.html\">Amazon Bedrock session encryption</a>.</p>"
         }
       }
     },
@@ -1995,21 +3485,21 @@
     "GuardrailAssessment":{
       "type":"structure",
       "members":{
-        "contentPolicy":{
-          "shape":"GuardrailContentPolicyAssessment",
-          "documentation":"<p>Content policy details of the Guardrail.</p>"
-        },
-        "sensitiveInformationPolicy":{
-          "shape":"GuardrailSensitiveInformationPolicyAssessment",
-          "documentation":"<p>Sensitive Information policy details of Guardrail.</p>"
-        },
         "topicPolicy":{
           "shape":"GuardrailTopicPolicyAssessment",
           "documentation":"<p>Topic policy details of the Guardrail.</p>"
         },
+        "contentPolicy":{
+          "shape":"GuardrailContentPolicyAssessment",
+          "documentation":"<p>Content policy details of the Guardrail.</p>"
+        },
         "wordPolicy":{
           "shape":"GuardrailWordPolicyAssessment",
           "documentation":"<p>Word policy details of the Guardrail.</p>"
+        },
+        "sensitiveInformationPolicy":{
+          "shape":"GuardrailSensitiveInformationPolicyAssessment",
+          "documentation":"<p>Sensitive Information policy details of Guardrail.</p>"
         }
       },
       "documentation":"<p>Assessment details of the content analyzed by Guardrails.</p>",
@@ -2041,13 +3531,13 @@
       "type":"string",
       "max":64,
       "min":0,
-      "pattern":"^[a-z0-9]+$"
+      "pattern":"[a-z0-9]+"
     },
     "GuardrailConfigurationGuardrailVersionString":{
       "type":"string",
       "max":5,
       "min":1,
-      "pattern":"^(([1-9][0-9]{0,7})|(DRAFT))$"
+      "pattern":"(([1-9][0-9]{0,7})|(DRAFT))"
     },
     "GuardrailConfigurationWithArn":{
       "type":"structure",
@@ -2070,17 +3560,17 @@
     "GuardrailContentFilter":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailContentPolicyAction",
-          "documentation":"<p>The action placed on the content by the Guardrail filter.</p>"
+        "type":{
+          "shape":"GuardrailContentFilterType",
+          "documentation":"<p>The type of content detected in the filter by the Guardrail.</p>"
         },
         "confidence":{
           "shape":"GuardrailContentFilterConfidence",
           "documentation":"<p>The confidence level regarding the content detected in the filter by the Guardrail.</p>"
         },
-        "type":{
-          "shape":"GuardrailContentFilterType",
-          "documentation":"<p>The type of content detected in the filter by the Guardrail.</p>"
+        "action":{
+          "shape":"GuardrailContentPolicyAction",
+          "documentation":"<p>The action placed on the content by the Guardrail filter.</p>"
         }
       },
       "documentation":"<p>Details of the content filter used in the Guardrail.</p>",
@@ -2129,13 +3619,13 @@
     "GuardrailCustomWord":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailWordPolicyAction",
-          "documentation":"<p>The action details for the custom word filter in the Guardrail.</p>"
-        },
         "match":{
           "shape":"String",
           "documentation":"<p>The match details for the custom word filter in the Guardrail.</p>"
+        },
+        "action":{
+          "shape":"GuardrailWordPolicyAction",
+          "documentation":"<p>The action details for the custom word filter in the Guardrail.</p>"
         }
       },
       "documentation":"<p>The custom word details for the filter in the Guardrail.</p>",
@@ -2161,15 +3651,11 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))$"
+      "pattern":"(([a-z0-9]+)|(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:guardrail/[a-z0-9]+))"
     },
     "GuardrailManagedWord":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailWordPolicyAction",
-          "documentation":"<p>The action details for the managed word filter in the Guardrail.</p>"
-        },
         "match":{
           "shape":"String",
           "documentation":"<p>The match details for the managed word filter in the Guardrail.</p>"
@@ -2177,6 +3663,10 @@
         "type":{
           "shape":"GuardrailManagedWordType",
           "documentation":"<p>The type details for the managed word filter in the Guardrail.</p>"
+        },
+        "action":{
+          "shape":"GuardrailWordPolicyAction",
+          "documentation":"<p>The action details for the managed word filter in the Guardrail.</p>"
         }
       },
       "documentation":"<p>The managed word details for the filter in the Guardrail.</p>",
@@ -2194,17 +3684,17 @@
     "GuardrailPiiEntityFilter":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailSensitiveInformationPolicyAction",
-          "documentation":"<p>The action of the Guardrail filter to identify and remove PII.</p>"
+        "type":{
+          "shape":"GuardrailPiiEntityType",
+          "documentation":"<p>The type of PII the Guardrail filter has identified and removed.</p>"
         },
         "match":{
           "shape":"String",
           "documentation":"<p>The match to settings in the Guardrail filter to identify and remove PII.</p>"
         },
-        "type":{
-          "shape":"GuardrailPiiEntityType",
-          "documentation":"<p>The type of PII the Guardrail filter has identified and removed.</p>"
+        "action":{
+          "shape":"GuardrailSensitiveInformationPolicyAction",
+          "documentation":"<p>The action of the Guardrail filter to identify and remove PII.</p>"
         }
       },
       "documentation":"<p>The Guardrail filter to identify and remove personally identifiable information (PII).</p>",
@@ -2254,14 +3744,6 @@
     "GuardrailRegexFilter":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailSensitiveInformationPolicyAction",
-          "documentation":"<p>The action details for the regex filter used in the Guardrail.</p>"
-        },
-        "match":{
-          "shape":"String",
-          "documentation":"<p>The match details for the regex filter used in the Guardrail.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name details for the regex filter used in the Guardrail.</p>"
@@ -2269,6 +3751,14 @@
         "regex":{
           "shape":"String",
           "documentation":"<p>The regex details for the regex filter used in the Guardrail.</p>"
+        },
+        "match":{
+          "shape":"String",
+          "documentation":"<p>The match details for the regex filter used in the Guardrail.</p>"
+        },
+        "action":{
+          "shape":"GuardrailSensitiveInformationPolicyAction",
+          "documentation":"<p>The action details for the regex filter used in the Guardrail.</p>"
         }
       },
       "documentation":"<p>The details for the regex filter used in the Guardrail.</p>",
@@ -2304,10 +3794,6 @@
     "GuardrailTopic":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"GuardrailTopicPolicyAction",
-          "documentation":"<p>The action details on a specific topic in the Guardrail.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name details on a specific topic in the Guardrail.</p>"
@@ -2315,6 +3801,10 @@
         "type":{
           "shape":"GuardrailTopicType",
           "documentation":"<p>The type details on a specific topic in the Guardrail.</p>"
+        },
+        "action":{
+          "shape":"GuardrailTopicPolicyAction",
+          "documentation":"<p>The action details on a specific topic in the Guardrail.</p>"
         }
       },
       "documentation":"<p>The details for a specific topic defined in the Guardrail.</p>",
@@ -2351,6 +3841,10 @@
           "shape":"GuardrailAction",
           "documentation":"<p>The trace action details used with the Guardrail.</p>"
         },
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The details of the trace Id used in the Guardrail Trace.</p>"
+        },
         "inputAssessments":{
           "shape":"GuardrailAssessmentList",
           "documentation":"<p>The details of the input assessments used in the Guardrail Trace.</p>"
@@ -2359,9 +3853,9 @@
           "shape":"GuardrailAssessmentList",
           "documentation":"<p>The details of the output assessments used in the Guardrail Trace.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The details of the trace Id used in the Guardrail Trace.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the Guardrail output.</p>"
         }
       },
       "documentation":"<p>The trace details used in the Guardrail.</p>",
@@ -2371,7 +3865,7 @@
       "type":"string",
       "max":5,
       "min":1,
-      "pattern":"^(([1-9][0-9]{0,7})|(DRAFT))$"
+      "pattern":"(([1-9][0-9]{0,7})|(DRAFT))"
     },
     "GuardrailWordPolicyAction":{
       "type":"string",
@@ -2398,6 +3892,98 @@
       "min":1,
       "sensitive":true
     },
+    "ImageBlock":{
+      "type":"structure",
+      "required":[
+        "format",
+        "source"
+      ],
+      "members":{
+        "format":{
+          "shape":"ImageFormat",
+          "documentation":"<p>The format of the image.</p>"
+        },
+        "source":{
+          "shape":"ImageSource",
+          "documentation":"<p>The source for the image.</p>"
+        }
+      },
+      "documentation":"<p>Image content for an invocation step.</p>"
+    },
+    "ImageFormat":{
+      "type":"string",
+      "enum":[
+        "png",
+        "jpeg",
+        "gif",
+        "webp"
+      ]
+    },
+    "ImageInput":{
+      "type":"structure",
+      "required":[
+        "format",
+        "source"
+      ],
+      "members":{
+        "format":{
+          "shape":"ImageInputFormat",
+          "documentation":"<p>The type of image in the result.</p>"
+        },
+        "source":{
+          "shape":"ImageInputSource",
+          "documentation":"<p>The source of the image in the result.</p>"
+        }
+      },
+      "documentation":"<p>Details about an image in the result from a function in the action group invocation. You can specify images only when the function is a computer use action. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agent-computer-use.html\">Configure an Amazon Bedrock Agent to complete tasks with computer use tools</a>.</p>"
+    },
+    "ImageInputFormat":{
+      "type":"string",
+      "enum":[
+        "png",
+        "jpeg",
+        "gif",
+        "webp"
+      ]
+    },
+    "ImageInputSource":{
+      "type":"structure",
+      "members":{
+        "bytes":{
+          "shape":"ImageInputSourceBytesBlob",
+          "documentation":"<p> The raw image bytes for the image. If you use an Amazon Web Services SDK, you don't need to encode the image bytes in base64.</p>"
+        }
+      },
+      "documentation":"<p>Details about the source of an input image in the result from a function in the action group invocation.</p>",
+      "union":true
+    },
+    "ImageInputSourceBytesBlob":{
+      "type":"blob",
+      "min":1
+    },
+    "ImageInputs":{
+      "type":"list",
+      "member":{"shape":"ImageInput"}
+    },
+    "ImageSource":{
+      "type":"structure",
+      "members":{
+        "bytes":{
+          "shape":"ImageSourceBytesBlob",
+          "documentation":"<p> The raw image bytes for the image. If you use an Amazon Web Services SDK, you don't need to encode the image bytes in base64.</p>"
+        },
+        "s3Location":{
+          "shape":"S3Location",
+          "documentation":"<p>The path to the Amazon S3 bucket where the image is stored.</p>"
+        }
+      },
+      "documentation":"<p>The source for an image.</p>",
+      "union":true
+    },
+    "ImageSourceBytesBlob":{
+      "type":"blob",
+      "min":1
+    },
     "ImplicitFilterConfiguration":{
       "type":"structure",
       "required":[
@@ -2429,25 +4015,25 @@
     "InferenceConfiguration":{
       "type":"structure",
       "members":{
-        "maximumLength":{
-          "shape":"MaximumLength",
-          "documentation":"<p>The maximum number of tokens allowed in the generated response.</p>"
-        },
-        "stopSequences":{
-          "shape":"StopSequences",
-          "documentation":"<p>A list of stop sequences. A stop sequence is a sequence of characters that causes the model to stop generating the response.</p>"
-        },
         "temperature":{
           "shape":"Temperature",
           "documentation":"<p>The likelihood of the model selecting higher-probability options while generating a response. A lower value makes the model more likely to choose higher-probability options, while a higher value makes the model more likely to choose lower-probability options.</p>"
         },
+        "topP":{
+          "shape":"TopP",
+          "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>Top P</code> determines the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topP</code> to 0.8, the model only selects the next token from the top 80% of the probability distribution of next tokens.</p>"
+        },
         "topK":{
           "shape":"TopK",
           "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>topK</code> is the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topK</code> to 50, the model selects the next token from among the top 50 most likely choices.</p>"
         },
-        "topP":{
-          "shape":"TopP",
-          "documentation":"<p>While generating a response, the model determines the probability of the following token at each point of generation. The value that you set for <code>Top P</code> determines the number of most-likely candidates from which the model chooses the next token in the sequence. For example, if you set <code>topP</code> to 0.8, the model only selects the next token from the top 80% of the probability distribution of next tokens.</p>"
+        "maximumLength":{
+          "shape":"MaximumLength",
+          "documentation":"<p>The maximum number of tokens allowed in the generated response.</p>"
+        },
+        "stopSequences":{
+          "shape":"StopSequences",
+          "documentation":"<p>A list of stop sequences. A stop sequence is a sequence of characters that causes the model to stop generating the response.</p>"
         }
       },
       "documentation":"<p>Specifications about the inference parameters that were provided alongside the prompt. These are specified in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object that was set when the agent was created or updated. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p>"
@@ -2466,13 +4052,13 @@
     "InlineAgentPayloadPart":{
       "type":"structure",
       "members":{
-        "attribution":{
-          "shape":"Attribution",
-          "documentation":"<p>Contains citations for a part of an agent response.</p>"
-        },
         "bytes":{
           "shape":"PartBody",
           "documentation":"<p>A part of the agent response in bytes.</p>"
+        },
+        "attribution":{
+          "shape":"Attribution",
+          "documentation":"<p>Contains citations for a part of an agent response.</p>"
         }
       },
       "documentation":"<p>Contains a part of an agent response and citations for it. </p>",
@@ -2482,42 +4068,30 @@
     "InlineAgentResponseStream":{
       "type":"structure",
       "members":{
-        "accessDeniedException":{
-          "shape":"AccessDeniedException",
-          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
-        },
-        "badGatewayException":{
-          "shape":"BadGatewayException",
-          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request. </p>"
-        },
         "chunk":{
           "shape":"InlineAgentPayloadPart",
           "documentation":"<p>Contains a part of an agent response and citations for it.</p>"
         },
-        "conflictException":{
-          "shape":"ConflictException",
-          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request. </p>"
-        },
-        "dependencyFailedException":{
-          "shape":"DependencyFailedException",
-          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        "trace":{
+          "shape":"InlineAgentTracePart",
+          "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Trace events</a>. </p>"
         },
-        "files":{
-          "shape":"InlineAgentFilePart",
-          "documentation":"<p>Contains intermediate response for code interpreter if any files have been generated.</p>"
+        "returnControl":{
+          "shape":"InlineAgentReturnControlPayload",
+          "documentation":"<p>Contains the parameters and information that the agent elicited from the customer to carry out an action. This information is returned to the system and can be used in your own setup for fulfilling the action.</p>"
         },
         "internalServerException":{
           "shape":"InternalServerException",
           "documentation":"<p>An internal server error occurred. Retry your request.</p>"
         },
+        "validationException":{
+          "shape":"ValidationException",
+          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        },
         "resourceNotFoundException":{
           "shape":"ResourceNotFoundException",
           "documentation":"<p>The specified resource Amazon Resource Name (ARN) was not found. Check the Amazon Resource Name (ARN) and try your request again. </p>"
         },
-        "returnControl":{
-          "shape":"InlineAgentReturnControlPayload",
-          "documentation":"<p>Contains the parameters and information that the agent elicited from the customer to carry out an action. This information is returned to the system and can be used in your own setup for fulfilling the action.</p>"
-        },
         "serviceQuotaExceededException":{
           "shape":"ServiceQuotaExceededException",
           "documentation":"<p>The number of requests exceeds the service quota. Resubmit your request later.</p>"
@@ -2526,13 +4100,25 @@
           "shape":"ThrottlingException",
           "documentation":"<p>The number of requests exceeds the limit. Resubmit your request later.</p>"
         },
-        "trace":{
-          "shape":"InlineAgentTracePart",
-          "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Trace events</a>. </p>"
+        "accessDeniedException":{
+          "shape":"AccessDeniedException",
+          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
         },
-        "validationException":{
-          "shape":"ValidationException",
-          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        "conflictException":{
+          "shape":"ConflictException",
+          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request. </p>"
+        },
+        "dependencyFailedException":{
+          "shape":"DependencyFailedException",
+          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        },
+        "badGatewayException":{
+          "shape":"BadGatewayException",
+          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request. </p>"
+        },
+        "files":{
+          "shape":"InlineAgentFilePart",
+          "documentation":"<p>Contains intermediate response for code interpreter if any files have been generated.</p>"
         }
       },
       "documentation":"<p>The response from invoking the agent and associated citations and trace information.</p>",
@@ -2541,13 +4127,13 @@
     "InlineAgentReturnControlPayload":{
       "type":"structure",
       "members":{
-        "invocationId":{
-          "shape":"String",
-          "documentation":"<p>The identifier of the action group invocation. </p>"
-        },
         "invocationInputs":{
           "shape":"InvocationInputs",
           "documentation":"<p>A list of objects that contain information about the parameters and inputs that need to be sent into the API operation or function, based on what the agent determines from its session with the user.</p>"
+        },
+        "invocationId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the action group invocation. </p>"
         }
       },
       "documentation":"<p>Contains information to return from the action group that the agent has predicted to invoke.</p> <p>This data type is used in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> API operation.</p>",
@@ -2564,6 +4150,18 @@
         "trace":{
           "shape":"Trace",
           "documentation":"<p>Contains one part of the agent's reasoning process and results from calling API actions and querying knowledge bases. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>. </p>"
+        },
+        "callerChain":{
+          "shape":"CallerChain",
+          "documentation":"<p>The caller chain for the trace part.</p>"
+        },
+        "eventTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time that trace occurred. </p>"
+        },
+        "collaboratorName":{
+          "shape":"Name",
+          "documentation":"<p>The collaborator name for the trace part.</p>"
         }
       },
       "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling API actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>.</p>",
@@ -2583,13 +4181,9 @@
     "InlineSessionState":{
       "type":"structure",
       "members":{
-        "files":{
-          "shape":"InputFiles",
-          "documentation":"<p> Contains information about the files used by code interpreter. </p>"
-        },
-        "invocationId":{
-          "shape":"String",
-          "documentation":"<p> The identifier of the invocation of an action. This value must match the <code>invocationId</code> returned in the <code>InvokeInlineAgent</code> response for the action whose results are provided in the <code>returnControlInvocationResults</code> field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a>. </p>"
+        "sessionAttributes":{
+          "shape":"SessionAttributesMap",
+          "documentation":"<p> Contains attributes that persist across a session and the values of those attributes. </p>"
         },
         "promptSessionAttributes":{
           "shape":"PromptSessionAttributesMap",
@@ -2599,9 +4193,17 @@
           "shape":"ReturnControlInvocationResults",
           "documentation":"<p> Contains information about the results from the action group invocation. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a>. </p> <note> <p>If you include this field in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
         },
-        "sessionAttributes":{
-          "shape":"SessionAttributesMap",
-          "documentation":"<p> Contains attributes that persist across a session and the values of those attributes. </p>"
+        "invocationId":{
+          "shape":"String",
+          "documentation":"<p> The identifier of the invocation of an action. This value must match the <code>invocationId</code> returned in the <code>InvokeInlineAgent</code> response for the action whose results are provided in the <code>returnControlInvocationResults</code> field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a>. </p>"
+        },
+        "files":{
+          "shape":"InputFiles",
+          "documentation":"<p> Contains information about the files used by code interpreter. </p>"
+        },
+        "conversationHistory":{
+          "shape":"ConversationHistory",
+          "documentation":"<p> Contains the conversation history that persist across sessions. </p>"
         }
       },
       "documentation":"<p> Contains parameters that specify various attributes that persist across a session or prompt. You can define session state attributes as key-value pairs when writing a <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html\">Lambda function</a> for an action group or pass them when making an <code>InvokeInlineAgent</code> request. Use session state attributes to control and provide conversational context for your inline agent and to help customize your agent's behavior. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a> </p>"
@@ -2666,39 +4268,52 @@
     "InternalServerException":{
       "type":"structure",
       "members":{
-        "message":{"shape":"NonBlankString"}
+        "message":{"shape":"NonBlankString"},
+        "reason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the exception. If the reason is <code>BEDROCK_MODEL_INVOCATION_SERVICE_UNAVAILABLE</code>, the model invocation service is unavailable. Retry your request.</p>"
+        }
       },
       "documentation":"<p>An internal server error occurred. Retry your request.</p>",
       "error":{"httpStatusCode":500},
       "exception":true,
       "fault":true
     },
+    "InvocationDescription":{
+      "type":"string",
+      "max":200,
+      "min":1
+    },
+    "InvocationIdentifier":{
+      "type":"string",
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "InvocationInput":{
       "type":"structure",
       "members":{
-        "actionGroupInvocationInput":{
-          "shape":"ActionGroupInvocationInput",
-          "documentation":"<p>Contains information about the action group to be invoked.</p>"
-        },
-        "agentCollaboratorInvocationInput":{
-          "shape":"AgentCollaboratorInvocationInput",
-          "documentation":"<p>The collaborator's invocation input.</p>"
-        },
-        "codeInterpreterInvocationInput":{
-          "shape":"CodeInterpreterInvocationInput",
-          "documentation":"<p>Contains information about the code interpreter to be invoked.</p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
         },
         "invocationType":{
           "shape":"InvocationType",
           "documentation":"<p>Specifies whether the agent is invoking an action group or a knowledge base.</p>"
         },
+        "actionGroupInvocationInput":{
+          "shape":"ActionGroupInvocationInput",
+          "documentation":"<p>Contains information about the action group to be invoked.</p>"
+        },
         "knowledgeBaseLookupInput":{
           "shape":"KnowledgeBaseLookupInput",
           "documentation":"<p>Contains details about the knowledge base to look up and the query to be made.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "codeInterpreterInvocationInput":{
+          "shape":"CodeInterpreterInvocationInput",
+          "documentation":"<p>Contains information about the code interpreter to be invoked.</p>"
+        },
+        "agentCollaboratorInvocationInput":{
+          "shape":"AgentCollaboratorInvocationInput",
+          "documentation":"<p>The collaborator's invocation input.</p>"
         }
       },
       "documentation":"<p>Contains information pertaining to the action group or knowledge base that is being invoked.</p>",
@@ -2740,6 +4355,109 @@
       "documentation":"<p>A result from the invocation of an action. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_RequestSyntax\">InvokeAgent request</a> </p> </li> </ul>",
       "union":true
     },
+    "InvocationStep":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "invocationId",
+        "invocationStepId",
+        "invocationStepTime",
+        "payload"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier of the session containing the invocation step.</p>"
+        },
+        "invocationId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier (in UUID format) for the invocation that includes the invocation step.</p>"
+        },
+        "invocationStepId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier (in UUID format) for the invocation step.</p>"
+        },
+        "invocationStepTime":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the invocation step was created.</p>"
+        },
+        "payload":{
+          "shape":"InvocationStepPayload",
+          "documentation":"<p>Payload content, such as text and images, for the invocation step.</p>"
+        }
+      },
+      "documentation":"<p>Stores fine-grained state checkpoints, including text and images, for each interaction in an invocation in a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>. </p>"
+    },
+    "InvocationStepPayload":{
+      "type":"structure",
+      "members":{
+        "contentBlocks":{
+          "shape":"BedrockSessionContentBlocks",
+          "documentation":"<p>The content for the invocation step.</p>"
+        }
+      },
+      "documentation":"<p>Payload content, such as text and images, for the invocation step.</p>",
+      "union":true
+    },
+    "InvocationStepSummaries":{
+      "type":"list",
+      "member":{"shape":"InvocationStepSummary"}
+    },
+    "InvocationStepSummary":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "invocationId",
+        "invocationStepId",
+        "invocationStepTime"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session associated with the invocation step.</p>"
+        },
+        "invocationId":{
+          "shape":"Uuid",
+          "documentation":"<p>A unique identifier for the invocation in UUID format.</p>"
+        },
+        "invocationStepId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier (in UUID format) for the invocation step.</p>"
+        },
+        "invocationStepTime":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the invocation step was created.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about an invocation step within an invocation in a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>"
+    },
+    "InvocationSummaries":{
+      "type":"list",
+      "member":{"shape":"InvocationSummary"}
+    },
+    "InvocationSummary":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "invocationId",
+        "createdAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session associated with the invocation.</p>"
+        },
+        "invocationId":{
+          "shape":"Uuid",
+          "documentation":"<p>A unique identifier for the invocation in UUID format.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the invocation was created.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about an invocation in a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>"
+    },
     "InvocationType":{
       "type":"string",
       "enum":[
@@ -2753,16 +4471,14 @@
     "InvokeAgentRequest":{
       "type":"structure",
       "required":[
-        "agentAliasId",
         "agentId",
+        "agentAliasId",
         "sessionId"
       ],
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The alias of the agent to use.</p>",
-          "location":"uri",
-          "locationName":"agentAliasId"
+        "sessionState":{
+          "shape":"SessionState",
+          "documentation":"<p>Contains parameters that specify various attributes of the session. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
         },
         "agentId":{
           "shape":"AgentId",
@@ -2770,18 +4486,26 @@
           "location":"uri",
           "locationName":"agentId"
         },
-        "bedrockModelConfigurations":{
-          "shape":"BedrockModelConfigurations",
-          "documentation":"<p>Model performance settings for the request.</p>"
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The alias of the agent to use.</p>",
+          "location":"uri",
+          "locationName":"agentAliasId"
         },
-        "enableTrace":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether to turn on the trace or not to track the agent's reasoning process. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-events\">Trace enablement</a>.</p>"
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session. Use the same value across requests to continue the same conversation.</p>",
+          "location":"uri",
+          "locationName":"sessionId"
         },
         "endSession":{
           "shape":"Boolean",
           "documentation":"<p>Specifies whether to end the session with the agent or not.</p>"
         },
+        "enableTrace":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to turn on the trace or not to track the agent's reasoning process. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-events\">Trace enablement</a>.</p>"
+        },
         "inputText":{
           "shape":"InputText",
           "documentation":"<p>The prompt text to send the agent.</p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
@@ -2790,25 +4514,23 @@
           "shape":"MemoryId",
           "documentation":"<p>The unique identifier of the agent memory.</p>"
         },
-        "sessionId":{
-          "shape":"SessionId",
-          "documentation":"<p>The unique identifier of the session. Use the same value across requests to continue the same conversation.</p>",
-          "location":"uri",
-          "locationName":"sessionId"
+        "bedrockModelConfigurations":{
+          "shape":"BedrockModelConfigurations",
+          "documentation":"<p>Model performance settings for the request.</p>"
         },
-        "sessionState":{
-          "shape":"SessionState",
-          "documentation":"<p>Contains parameters that specify various attributes of the session. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
+        "streamingConfigurations":{
+          "shape":"StreamingConfigurations",
+          "documentation":"<p> Specifies the configurations for streaming. </p> <note> <p>To use agent streaming, you need permissions to perform the <code>bedrock:InvokeModelWithResponseStream</code> action.</p> </note>"
+        },
+        "promptCreationConfigurations":{
+          "shape":"PromptCreationConfigurations",
+          "documentation":"<p>Specifies parameters that control how the service populates the agent prompt for an <code>InvokeAgent</code> request. You can control which aspects of previous invocations in the same agent session the service uses to populate the agent prompt. This gives you more granular control over the contextual history that is used to process the current request.</p>"
         },
         "sourceArn":{
           "shape":"AWSResourceARN",
           "documentation":"<p>The ARN of the resource making the request.</p>",
           "location":"header",
           "locationName":"x-amz-source-arn"
-        },
-        "streamingConfigurations":{
-          "shape":"StreamingConfigurations",
-          "documentation":"<p> Specifies the configurations for streaming. </p> <note> <p>To use agent streaming, you need permissions to perform the <code>bedrock:InvokeModelWithResponseStream</code> action.</p> </note>"
         }
       }
     },
@@ -2830,17 +4552,17 @@
           "location":"header",
           "locationName":"x-amzn-bedrock-agent-content-type"
         },
-        "memoryId":{
-          "shape":"MemoryId",
-          "documentation":"<p>The unique identifier of the agent memory.</p>",
-          "location":"header",
-          "locationName":"x-amz-bedrock-agent-memory-id"
-        },
         "sessionId":{
           "shape":"SessionId",
           "documentation":"<p>The unique identifier of the session with the agent.</p>",
           "location":"header",
           "locationName":"x-amz-bedrock-agent-session-id"
+        },
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the agent memory.</p>",
+          "location":"header",
+          "locationName":"x-amz-bedrock-agent-memory-id"
         }
       },
       "payload":"completion"
@@ -2848,18 +4570,16 @@
     "InvokeFlowRequest":{
       "type":"structure",
       "required":[
-        "flowAliasIdentifier",
         "flowIdentifier",
+        "flowAliasIdentifier",
         "inputs"
       ],
       "members":{
-        "enableTrace":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether to return the trace for the flow or not. Traces track inputs and outputs for nodes in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>"
-        },
-        "executionId":{
-          "shape":"FlowExecutionId",
-          "documentation":"<p>The unique identifier for the current flow execution. If you don't provide a value, Amazon Bedrock creates the identifier for you. </p>"
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
         },
         "flowAliasIdentifier":{
           "shape":"FlowAliasIdentifier",
@@ -2867,19 +4587,21 @@
           "location":"uri",
           "locationName":"flowAliasIdentifier"
         },
-        "flowIdentifier":{
-          "shape":"FlowIdentifier",
-          "documentation":"<p>The unique identifier of the flow.</p>",
-          "location":"uri",
-          "locationName":"flowIdentifier"
-        },
         "inputs":{
           "shape":"FlowInputs",
           "documentation":"<p>A list of objects, each containing information about an input into the flow.</p>"
         },
+        "enableTrace":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to return the trace for the flow or not. Traces track inputs and outputs for nodes in the flow. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/flows-trace.html\">Track each step in your prompt flow by viewing its trace in Amazon Bedrock</a>.</p>"
+        },
         "modelPerformanceConfiguration":{
           "shape":"ModelPerformanceConfiguration",
           "documentation":"<p>Model performance settings for the request.</p>"
+        },
+        "executionId":{
+          "shape":"FlowExecutionId",
+          "documentation":"<p>The unique identifier for the current flow execution. If you don't provide a value, Amazon Bedrock creates the identifier for you. </p>"
         }
       }
     },
@@ -2887,15 +4609,15 @@
       "type":"structure",
       "required":["responseStream"],
       "members":{
+        "responseStream":{
+          "shape":"FlowResponseStream",
+          "documentation":"<p>The output of the flow, returned as a stream. If there's an error, the error is returned.</p>"
+        },
         "executionId":{
           "shape":"FlowExecutionId",
           "documentation":"<p>The unique identifier for the current flow execution.</p>",
           "location":"header",
           "locationName":"x-amz-bedrock-flow-execution-id"
-        },
-        "responseStream":{
-          "shape":"FlowResponseStream",
-          "documentation":"<p>The output of the flow, returned as a stream. If there's an error, the error is returned.</p>"
         }
       },
       "payload":"responseStream"
@@ -2908,67 +4630,95 @@
         "sessionId"
       ],
       "members":{
-        "actionGroups":{
-          "shape":"AgentActionGroups",
-          "documentation":"<p> A list of action groups with each action group defining the action the inline agent needs to carry out. </p>"
-        },
-        "bedrockModelConfigurations":{
-          "shape":"InlineBedrockModelConfigurations",
-          "documentation":"<p>Model settings for the request.</p>"
-        },
         "customerEncryptionKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p> The Amazon Resource Name (ARN) of the Amazon Web Services KMS key to use to encrypt your inline agent. </p>"
         },
-        "enableTrace":{
-          "shape":"Boolean",
-          "documentation":"<p> Specifies whether to turn on the trace or not to track the agent's reasoning process. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Using trace</a>. <pre><code> &lt;/p&gt; </code></pre>"
-        },
-        "endSession":{
-          "shape":"Boolean",
-          "documentation":"<p> Specifies whether to end the session with the inline agent or not. </p>"
-        },
         "foundationModel":{
           "shape":"ModelIdentifier",
           "documentation":"<p> The <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">model identifier (ID)</a> of the model to use for orchestration by the inline agent. For example, <code>meta.llama3-1-70b-instruct-v1:0</code>. </p>"
         },
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfigurationWithArn",
-          "documentation":"<p> The <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html\">guardrails</a> to assign to the inline agent. </p>"
+        "instruction":{
+          "shape":"Instruction",
+          "documentation":"<p> The instructions that tell the inline agent what it should do and how it should interact with users. </p>"
         },
         "idleSessionTTLInSeconds":{
           "shape":"SessionTTL",
           "documentation":"<p> The number of seconds for which the inline agent should maintain session information. After this time expires, the subsequent <code>InvokeInlineAgent</code> request begins a new session. </p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and the data provided before the timeout is deleted.</p>"
         },
-        "inlineSessionState":{
-          "shape":"InlineSessionState",
-          "documentation":"<p> Parameters that specify the various attributes of a sessions. You can include attributes for the session or prompt or, if you configured an action group to return control, results from invocation of the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>. </p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
-        },
-        "inputText":{
-          "shape":"InputText",
-          "documentation":"<p> The prompt text to send to the agent. </p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
-        },
-        "instruction":{
-          "shape":"Instruction",
-          "documentation":"<p> The instructions that tell the inline agent what it should do and how it should interact with users. </p>"
+        "actionGroups":{
+          "shape":"AgentActionGroups",
+          "documentation":"<p> A list of action groups with each action group defining the action the inline agent needs to carry out. </p>"
         },
         "knowledgeBases":{
           "shape":"KnowledgeBases",
           "documentation":"<p> Contains information of the knowledge bases to associate with. </p>"
         },
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfigurationWithArn",
+          "documentation":"<p> The <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html\">guardrails</a> to assign to the inline agent. </p>"
+        },
         "promptOverrideConfiguration":{
           "shape":"PromptOverrideConfiguration",
           "documentation":"<p> Configurations for advanced prompts used to override the default prompts to enhance the accuracy of the inline agent. </p>"
         },
+        "agentCollaboration":{
+          "shape":"AgentCollaboration",
+          "documentation":"<p> Defines how the inline collaborator agent handles information across multiple collaborator agents to coordinate a final response. The inline collaborator agent can also be the supervisor. </p>"
+        },
+        "collaboratorConfigurations":{
+          "shape":"CollaboratorConfigurations",
+          "documentation":"<p> Settings for an inline agent collaborator called with <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeInlineAgent.html\">InvokeInlineAgent</a>. </p>"
+        },
+        "agentName":{
+          "shape":"Name",
+          "documentation":"<p>The name for the agent.</p>"
+        },
         "sessionId":{
           "shape":"SessionId",
           "documentation":"<p> The unique identifier of the session. Use the same value across requests to continue the same conversation. </p>",
           "location":"uri",
           "locationName":"sessionId"
         },
+        "endSession":{
+          "shape":"Boolean",
+          "documentation":"<p> Specifies whether to end the session with the inline agent or not. </p>"
+        },
+        "enableTrace":{
+          "shape":"Boolean",
+          "documentation":"<p> Specifies whether to turn on the trace or not to track the agent's reasoning process. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Using trace</a>. </p>"
+        },
+        "inputText":{
+          "shape":"InputText",
+          "documentation":"<p> The prompt text to send to the agent. </p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
+        },
         "streamingConfigurations":{
           "shape":"StreamingConfigurations",
           "documentation":"<p> Specifies the configurations for streaming. </p> <note> <p>To use agent streaming, you need permissions to perform the <code>bedrock:InvokeModelWithResponseStream</code> action.</p> </note>"
+        },
+        "promptCreationConfigurations":{
+          "shape":"PromptCreationConfigurations",
+          "documentation":"<p>Specifies parameters that control how the service populates the agent prompt for an <code>InvokeInlineAgent</code> request. You can control which aspects of previous invocations in the same agent session the service uses to populate the agent prompt. This gives you more granular control over the contextual history that is used to process the current request.</p>"
+        },
+        "inlineSessionState":{
+          "shape":"InlineSessionState",
+          "documentation":"<p> Parameters that specify the various attributes of a sessions. You can include attributes for the session or prompt or, if you configured an action group to return control, results from invocation of the action group. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>. </p> <note> <p>If you include <code>returnControlInvocationResults</code> in the <code>sessionState</code> field, the <code>inputText</code> field will be ignored.</p> </note>"
+        },
+        "collaborators":{
+          "shape":"Collaborators",
+          "documentation":"<p> List of collaborator inline agents. </p>"
+        },
+        "bedrockModelConfigurations":{
+          "shape":"InlineBedrockModelConfigurations",
+          "documentation":"<p>Model settings for the request.</p>"
+        },
+        "orchestrationType":{
+          "shape":"OrchestrationType",
+          "documentation":"<p>Specifies the type of orchestration strategy for the agent. This is set to DEFAULT orchestration type, by default. </p>"
+        },
+        "customOrchestration":{
+          "shape":"CustomOrchestration",
+          "documentation":"<p>Contains details of the custom orchestration configured for the agent. </p>"
         }
       }
     },
@@ -2982,7 +4732,7 @@
       "members":{
         "completion":{
           "shape":"InlineAgentResponseStream",
-          "documentation":"<p> <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>The inline agent's response to the user prompt. </p>"
         },
         "contentType":{
           "shape":"MimeType",
@@ -3003,23 +4753,23 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}$"
+      "pattern":"arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}"
     },
     "KnowledgeBase":{
       "type":"structure",
       "required":[
-        "description",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "description"
       ],
       "members":{
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p> The description of the knowledge base associated with the inline agent. </p>"
-        },
         "knowledgeBaseId":{
           "shape":"KnowledgeBaseId",
           "documentation":"<p> The unique identifier for a knowledge base associated with the inline agent. </p>"
         },
+        "description":{
+          "shape":"ResourceDescription",
+          "documentation":"<p> The description of the knowledge base associated with the inline agent. </p>"
+        },
         "retrievalConfiguration":{
           "shape":"KnowledgeBaseRetrievalConfiguration",
           "documentation":"<p> The configurations to apply to the knowledge base during query. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>. </p>"
@@ -3031,7 +4781,7 @@
       "type":"string",
       "max":128,
       "min":0,
-      "pattern":"^arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:[0-9]{12}:knowledge-base/[0-9a-zA-Z]+$"
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:[0-9]{12}:knowledge-base/[0-9a-zA-Z]+"
     },
     "KnowledgeBaseConfiguration":{
       "type":"structure",
@@ -3060,18 +4810,18 @@
       "type":"string",
       "max":10,
       "min":0,
-      "pattern":"^[0-9a-zA-Z]+$"
+      "pattern":"[0-9a-zA-Z]+"
     },
     "KnowledgeBaseLookupInput":{
       "type":"structure",
       "members":{
-        "knowledgeBaseId":{
-          "shape":"TraceKnowledgeBaseId",
-          "documentation":"<p>The unique identifier of the knowledge base to look up.</p>"
-        },
         "text":{
           "shape":"KnowledgeBaseLookupInputString",
           "documentation":"<p>The query made to the knowledge base.</p>"
+        },
+        "knowledgeBaseId":{
+          "shape":"TraceKnowledgeBaseId",
+          "documentation":"<p>The unique identifier of the knowledge base to look up.</p>"
         }
       },
       "documentation":"<p>Contains details about the knowledge base to look up and the query to be made.</p>"
@@ -3086,6 +4836,10 @@
         "retrievedReferences":{
           "shape":"RetrievedReferences",
           "documentation":"<p>Contains metadata about the sources cited for the generated response.</p>"
+        },
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the knowledge base output.</p>"
         }
       },
       "documentation":"<p>Contains details about the results from looking up the knowledge base.</p>"
@@ -3130,13 +4884,13 @@
           "shape":"RetrievalResultLocation",
           "documentation":"<p>Contains information about the location of the data source.</p>"
         },
-        "metadata":{
-          "shape":"RetrievalResultMetadata",
-          "documentation":"<p>Contains metadata attributes and their values for the file in the data source. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ds.html#kb-ds-metadata\">Metadata and filtering</a>.</p>"
-        },
         "score":{
           "shape":"Double",
           "documentation":"<p>The level of relevance of the result to the query.</p>"
+        },
+        "metadata":{
+          "shape":"RetrievalResultMetadata",
+          "documentation":"<p>Contains metadata attributes and their values for the file in the data source. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ds.html#kb-ds-metadata\">Metadata and filtering</a>.</p>"
         }
       },
       "documentation":"<p>Details about a result from querying the knowledge base.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_ResponseSyntax\">Retrieve response</a> – in the <code>retrievalResults</code> field</p> </li> </ul>"
@@ -3153,10 +4907,6 @@
         "modelArn"
       ],
       "members":{
-        "generationConfiguration":{
-          "shape":"GenerationConfiguration",
-          "documentation":"<p>Contains configurations for response generation based on the knowledge base query results.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"KnowledgeBaseId",
           "documentation":"<p>The unique identifier of the knowledge base that is queried.</p>"
@@ -3165,13 +4915,17 @@
           "shape":"BedrockModelArn",
           "documentation":"<p>The ARN of the foundation model or <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html\">inference profile</a> used to generate a response.</p>"
         },
-        "orchestrationConfiguration":{
-          "shape":"OrchestrationConfiguration",
-          "documentation":"<p>Settings for how the model processes the prompt prior to retrieval and generation.</p>"
-        },
         "retrievalConfiguration":{
           "shape":"KnowledgeBaseRetrievalConfiguration",
           "documentation":"<p>Contains configurations for how to retrieve and return the knowledge base query.</p>"
+        },
+        "generationConfiguration":{
+          "shape":"GenerationConfiguration",
+          "documentation":"<p>Contains configurations for response generation based on the knowledge base query results.</p>"
+        },
+        "orchestrationConfiguration":{
+          "shape":"OrchestrationConfiguration",
+          "documentation":"<p>Settings for how the model processes the prompt prior to retrieval and generation.</p>"
         }
       },
       "documentation":"<p>Contains details about the resource being queried.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_RequestSyntax\">Retrieve request</a> – in the <code>knowledgeBaseConfiguration</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_RequestSyntax\">RetrieveAndGenerate request</a> – in the <code>knowledgeBaseConfiguration</code> field</p> </li> </ul>"
@@ -3179,14 +4933,6 @@
     "KnowledgeBaseVectorSearchConfiguration":{
       "type":"structure",
       "members":{
-        "filter":{
-          "shape":"RetrievalFilter",
-          "documentation":"<p>Specifies the filters to use on the metadata in the knowledge base data sources before returning results. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>.</p>"
-        },
-        "implicitFilterConfiguration":{
-          "shape":"ImplicitFilterConfiguration",
-          "documentation":"<p>Settings for implicit filtering.</p>"
-        },
         "numberOfResults":{
           "shape":"KnowledgeBaseVectorSearchConfigurationNumberOfResultsInteger",
           "documentation":"<p>The number of source chunks to retrieve.</p>",
@@ -3196,9 +4942,17 @@
           "shape":"SearchType",
           "documentation":"<p>By default, Amazon Bedrock decides a search strategy for you. If you're using an Amazon OpenSearch Serverless vector store that contains a filterable text field, you can specify whether to query the knowledge base with a <code>HYBRID</code> search using both vector embeddings and raw text, or <code>SEMANTIC</code> search using only vector embeddings. For other vector store configurations, only <code>SEMANTIC</code> search is available. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-test.html\">Test a knowledge base</a>.</p>"
         },
+        "filter":{
+          "shape":"RetrievalFilter",
+          "documentation":"<p>Specifies the filters to use on the metadata in the knowledge base data sources before returning results. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>.</p>"
+        },
         "rerankingConfiguration":{
           "shape":"VectorSearchRerankingConfiguration",
           "documentation":"<p>Contains configurations for reranking the retrieved results. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/rerank.html\">Improve the relevance of query responses with a reranker model</a>.</p>"
+        },
+        "implicitFilterConfiguration":{
+          "shape":"ImplicitFilterConfiguration",
+          "documentation":"<p>Settings for implicit filtering.</p>"
         }
       },
       "documentation":"<p>Configurations for how to perform the search query and return results. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_RequestSyntax\">Retrieve request</a> – in the <code>vectorSearchConfiguration</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_RequestSyntax\">RetrieveAndGenerate request</a> – in the <code>vectorSearchConfiguration</code> field</p> </li> </ul>"
@@ -3218,7 +4972,248 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$"
+      "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
+    },
+    "ListFlowExecutionEventsRequest":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "executionIdentifier",
+        "eventType"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the execution.</p>",
+          "location":"uri",
+          "locationName":"flowAliasIdentifier"
+        },
+        "executionIdentifier":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The unique identifier of the flow execution.</p>",
+          "location":"uri",
+          "locationName":"executionIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of events to return in a single response. If more events exist than the specified maxResults value, a token is included in the response so that the remaining results can be retrieved.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. This value is returned in the response if more results are available.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "eventType":{
+          "shape":"FlowExecutionEventType",
+          "documentation":"<p>The type of events to retrieve. Specify <code>Node</code> for node-level events or <code>Flow</code> for flow-level events.</p>",
+          "location":"querystring",
+          "locationName":"eventType"
+        }
+      }
+    },
+    "ListFlowExecutionEventsResponse":{
+      "type":"structure",
+      "required":["flowExecutionEvents"],
+      "members":{
+        "flowExecutionEvents":{
+          "shape":"FlowExecutionEvents",
+          "documentation":"<p>A list of events that occurred during the flow execution. Events can include node inputs and outputs, flow inputs and outputs, condition results, and failure events.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. This value is returned if more results are available.</p>"
+        }
+      }
+    },
+    "ListFlowExecutionsRequest":{
+      "type":"structure",
+      "required":["flowIdentifier"],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow to list executions for.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias to list executions for.</p>",
+          "location":"querystring",
+          "locationName":"flowAliasIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of flow executions to return in a single response. If more executions exist than the specified <code>maxResults</code> value, a token is included in the response so that the remaining results can be retrieved.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. This value is returned in the response if more results are available.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListFlowExecutionsResponse":{
+      "type":"structure",
+      "required":["flowExecutionSummaries"],
+      "members":{
+        "flowExecutionSummaries":{
+          "shape":"FlowExecutionSummaries",
+          "documentation":"<p>A list of flow execution summaries. Each summary includes the execution ARN, flow identifier, flow alias identifier, flow version, status, and timestamps.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. This value is returned if more results are available.</p>"
+        }
+      }
+    },
+    "ListInvocationStepsRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "invocationIdentifier":{
+          "shape":"InvocationIdentifier",
+          "documentation":"<p>The unique identifier (in UUID format) for the invocation to list invocation steps for.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results. </p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the session associated with the invocation steps. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "ListInvocationStepsResponse":{
+      "type":"structure",
+      "required":["invocationStepSummaries"],
+      "members":{
+        "invocationStepSummaries":{
+          "shape":"InvocationStepSummaries",
+          "documentation":"<p>A list of summaries for each invocation step associated with a session and if you specified it, an invocation within the session.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        }
+      }
+    },
+    "ListInvocationsRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results. </p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the session to list invocations for. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "ListInvocationsResponse":{
+      "type":"structure",
+      "required":["invocationSummaries"],
+      "members":{
+        "invocationSummaries":{
+          "shape":"InvocationSummaries",
+          "documentation":"<p>A list of invocation summaries associated with the session.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        }
+      }
+    },
+    "ListSessionsRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results. </p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListSessionsResponse":{
+      "type":"structure",
+      "required":["sessionSummaries"],
+      "members":{
+        "sessionSummaries":{
+          "shape":"SessionSummaries",
+          "documentation":"<p>A list of summaries for each session in your Amazon Web Services account.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource for which to list tags.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>The key-value pairs for the tags associated with the resource.</p>"
+        }
+      }
+    },
+    "Long":{
+      "type":"long",
+      "box":true
     },
     "MaxResults":{
       "type":"integer",
@@ -3236,7 +5231,7 @@
     "MaximumLength":{
       "type":"integer",
       "box":true,
-      "max":4096,
+      "max":8192,
       "min":0
     },
     "Memories":{
@@ -3258,7 +5253,7 @@
       "type":"string",
       "max":100,
       "min":2,
-      "pattern":"^[0-9a-zA-Z._:-]+$"
+      "pattern":"[0-9a-zA-Z._:-]+"
     },
     "MemorySessionSummary":{
       "type":"structure",
@@ -3267,10 +5262,6 @@
           "shape":"MemoryId",
           "documentation":"<p>The unique identifier of the memory where the session summary is stored.</p>"
         },
-        "sessionExpiryTime":{
-          "shape":"DateTimestamp",
-          "documentation":"<p>The time when the memory duration for the session is set to end.</p>"
-        },
         "sessionId":{
           "shape":"SessionId",
           "documentation":"<p>The identifier for this session.</p>"
@@ -3279,6 +5270,10 @@
           "shape":"DateTimestamp",
           "documentation":"<p>The start time for this session.</p>"
         },
+        "sessionExpiryTime":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time when the memory duration for the session is set to end.</p>"
+        },
         "summaryText":{
           "shape":"SummaryText",
           "documentation":"<p>The summarized text for this session.</p>"
@@ -3293,17 +5288,17 @@
     "Message":{
       "type":"structure",
       "required":[
-        "content",
-        "role"
+        "role",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"ContentBlocks",
-          "documentation":"<p>The message's content.</p>"
-        },
         "role":{
           "shape":"ConversationRole",
           "documentation":"<p>The message's role.</p>"
+        },
+        "content":{
+          "shape":"ContentBlocks",
+          "documentation":"<p>The message's content.</p>"
         }
       },
       "documentation":"<p>Details about a message.</p>"
@@ -3315,26 +5310,42 @@
     "Metadata":{
       "type":"structure",
       "members":{
+        "startTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>In the final response, <code>startTime</code> is the start time of the agent invocation operation.</p>"
+        },
+        "endTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>In the final response, <code>endTime</code> is the end time of the agent invocation operation.</p>"
+        },
+        "totalTimeMs":{
+          "shape":"Long",
+          "documentation":"<p> The total execution time for the specific invocation being processed (model, knowledge base, guardrail, agent collaborator, or code interpreter). It represents how long the individual invocation took.</p>"
+        },
+        "operationTotalTimeMs":{
+          "shape":"Long",
+          "documentation":"<p>The total time it took for the agent to complete execution. This field is only set for the final response.</p>"
+        },
+        "clientRequestId":{
+          "shape":"String",
+          "documentation":"<p>A unique identifier associated with the downstream invocation. This ID can be used for tracing, debugging, and identifying specific invocations in customer logs or systems.</p>"
+        },
         "usage":{
           "shape":"Usage",
-          "documentation":"<p>Contains details of the foundation model usage.</p>"
+          "documentation":"<p>Specific to model invocation and contains details about the usage of a foundation model.</p>"
         }
       },
-      "documentation":"<p>Provides details of the foundation model.</p>",
+      "documentation":"<p>Provides information about the execution process for different types of invocations, such as model invocation, knowledge base invocation, agent collaborator invocation, guardrail invocation, and code interpreter Invocation.</p>",
       "sensitive":true
     },
     "MetadataAttributeSchema":{
       "type":"structure",
       "required":[
-        "description",
         "key",
-        "type"
+        "type",
+        "description"
       ],
       "members":{
-        "description":{
-          "shape":"MetadataAttributeSchemaDescriptionString",
-          "documentation":"<p>The attribute's description.</p>"
-        },
         "key":{
           "shape":"MetadataAttributeSchemaKeyString",
           "documentation":"<p>The attribute's key.</p>"
@@ -3342,6 +5353,10 @@
         "type":{
           "shape":"AttributeType",
           "documentation":"<p>The attribute's type.</p>"
+        },
+        "description":{
+          "shape":"MetadataAttributeSchemaDescriptionString",
+          "documentation":"<p>The attribute's description.</p>"
         }
       },
       "documentation":"<p>Details about a metadata attribute.</p>",
@@ -3351,13 +5366,13 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[\\s\\S]+$"
+      "pattern":"[\\s\\S]+"
     },
     "MetadataAttributeSchemaKeyString":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[\\s\\S]+$"
+      "pattern":"[\\s\\S]+"
     },
     "MetadataAttributeSchemaList":{
       "type":"list",
@@ -3385,42 +5400,42 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})))|(([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2}))|(([0-9a-zA-Z][_-]?)+))$|(^arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:(|[0-9a-z-]{1,20}):(|[0-9]{12}):inference-profile/[a-zA-Z0-9-:.]+)$"
+      "pattern":".*(^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}(([:][a-z0-9-]{1,63}){0,2})?/[a-z0-9]{12})|(:foundation-model/([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2})))|(([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.]?[a-z0-9-]{1,63})([:][a-z0-9-]{1,63}){0,2}))|(([0-9a-zA-Z][_-]?)+))$|(^arn:aws(|-us-gov|-cn|-iso|-iso-b):bedrock:(|[0-9a-z-]{1,20}):(|[0-9]{12}):inference-profile/[a-zA-Z0-9-:.]+)"
     },
     "ModelInvocationInput":{
       "type":"structure",
       "members":{
-        "foundationModel":{
-          "shape":"ModelIdentifier",
-          "documentation":"<p>The identifier of a foundation model.</p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
         },
-        "inferenceConfiguration":{
-          "shape":"InferenceConfiguration",
-          "documentation":"<p>Specifications about the inference parameters that were provided alongside the prompt. These are specified in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object that was set when the agent was created or updated. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p>"
+        "text":{
+          "shape":"PromptText",
+          "documentation":"<p>The text that prompted the agent at this step.</p>"
+        },
+        "type":{
+          "shape":"PromptType",
+          "documentation":"<p>The step in the agent sequence.</p>"
         },
         "overrideLambda":{
           "shape":"LambdaArn",
           "documentation":"<p>The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence.</p>"
         },
-        "parserMode":{
-          "shape":"CreationMode",
-          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>.</p>"
-        },
         "promptCreationMode":{
           "shape":"CreationMode",
           "documentation":"<p>Specifies whether the default prompt template was <code>OVERRIDDEN</code>. If it was, the <code>basePromptTemplate</code> that was set in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object when the agent was created or updated is used instead.</p>"
         },
-        "text":{
-          "shape":"PromptText",
-          "documentation":"<p>The text that prompted the agent at this step.</p>"
+        "inferenceConfiguration":{
+          "shape":"InferenceConfiguration",
+          "documentation":"<p>Specifications about the inference parameters that were provided alongside the prompt. These are specified in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object that was set when the agent was created or updated. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models</a>.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "parserMode":{
+          "shape":"CreationMode",
+          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>.</p>"
         },
-        "type":{
-          "shape":"PromptType",
-          "documentation":"<p>The step in the agent sequence.</p>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p>The identifier of a foundation model.</p>"
         }
       },
       "documentation":"<p>The input for the pre-processing step.</p> <ul> <li> <p>The <code>type</code> matches the agent step.</p> </li> <li> <p>The <code>text</code> contains the prompt.</p> </li> <li> <p>The <code>inferenceConfiguration</code>, <code>parserMode</code>, and <code>overrideLambda</code> values are set in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object that was set when the agent was created or updated.</p> </li> </ul>",
@@ -3450,26 +5465,348 @@
     },
     "Name":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$",
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}",
       "sensitive":true
     },
     "NextToken":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^\\S*$"
+      "pattern":"\\S*"
+    },
+    "NodeActionEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "requestId",
+        "serviceName",
+        "operationName"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that called the operation.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time that the operation was called.</p>"
+        },
+        "requestId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the request that the node made to the operation.</p>"
+        },
+        "serviceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service that the node called.</p>"
+        },
+        "operationName":{
+          "shape":"String",
+          "documentation":"<p>The name of the operation that the node called.</p>"
+        },
+        "operationRequest":{
+          "shape":"Document",
+          "documentation":"<p>The request payload sent to the downstream service.</p>"
+        },
+        "operationResponse":{
+          "shape":"Document",
+          "documentation":"<p>The response payload received from the downstream service.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an action (operation) called by a node during execution.</p>",
+      "sensitive":true
+    },
+    "NodeDependencyEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "traceElements"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that generated the dependency trace.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time that the dependency trace was generated.</p>"
+        },
+        "traceElements":{
+          "shape":"NodeTraceElements",
+          "documentation":"<p>The trace elements containing detailed information about the node execution.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an internal trace of a specific node during execution.</p>",
+      "sensitive":true
+    },
+    "NodeErrorCode":{
+      "type":"string",
+      "enum":[
+        "VALIDATION",
+        "DEPENDENCY_FAILED",
+        "BAD_GATEWAY",
+        "INTERNAL_SERVER"
+      ]
+    },
+    "NodeExecutionContent":{
+      "type":"structure",
+      "members":{
+        "document":{
+          "shape":"Document",
+          "documentation":"<p>The document content of the field, which can contain text or structured data.</p>"
+        }
+      },
+      "documentation":"<p>Contains the content of a flow node's input or output field for a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true,
+      "union":true
+    },
+    "NodeFailureEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "errorCode",
+        "errorMessage"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node where the failure occurred.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the node failure occurred.</p>"
+        },
+        "errorCode":{
+          "shape":"NodeErrorCode",
+          "documentation":"<p>The error code that identifies the type of failure that occurred at the node.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A descriptive message that provides details about the node failure.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a failure that occurred at a specific node during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "NodeInputEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "fields"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that received the inputs.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the inputs were provided to the node.</p>"
+        },
+        "fields":{
+          "shape":"NodeInputFields",
+          "documentation":"<p>A list of input fields provided to the node.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the inputs provided to a specific node during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "NodeInputExecutionChain":{
+      "type":"list",
+      "member":{"shape":"NodeInputExecutionChainItem"}
+    },
+    "NodeInputExecutionChainItem":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "type"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node in the execution chain.</p>"
+        },
+        "index":{
+          "shape":"Integer",
+          "documentation":"<p>The index position of this item in the execution chain.</p>"
+        },
+        "type":{
+          "shape":"FlowControlNodeType",
+          "documentation":"<p>The type of execution chain item. Supported values are Iterator and Loop.</p>"
+        }
+      },
+      "documentation":"<p>Represents an item in the execution chain for node input tracking.</p>"
+    },
+    "NodeInputField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "content"
+      ],
+      "members":{
+        "name":{
+          "shape":"NodeInputName",
+          "documentation":"<p>The name of the input field as defined in the node's input schema.</p>"
+        },
+        "content":{
+          "shape":"NodeExecutionContent",
+          "documentation":"<p>The content of the input field, which can contain text or structured data.</p>"
+        },
+        "source":{
+          "shape":"NodeInputSource",
+          "documentation":"<p>The source node that provides input data to this field.</p>"
+        },
+        "type":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The data type of the input field for compatibility validation.</p>"
+        },
+        "category":{
+          "shape":"FlowNodeInputCategory",
+          "documentation":"<p>The category of the input field.</p>"
+        },
+        "executionChain":{
+          "shape":"NodeInputExecutionChain",
+          "documentation":"<p>The execution path through nested nodes like iterators and loops.</p>"
+        }
+      },
+      "documentation":"<p>Represents an input field provided to a node during a flow execution.</p>",
+      "sensitive":true
+    },
+    "NodeInputFields":{
+      "type":"list",
+      "member":{"shape":"NodeInputField"},
+      "max":5,
+      "min":1
     },
     "NodeInputName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}"
+    },
+    "NodeInputSource":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "outputFieldName",
+        "expression"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the source node that provides the input data.</p>"
+        },
+        "outputFieldName":{
+          "shape":"FlowNodeOutputName",
+          "documentation":"<p>The name of the output field from the source node.</p>"
+        },
+        "expression":{
+          "shape":"FlowNodeInputExpression",
+          "documentation":"<p>The expression used to extract data from the source.</p>"
+        }
+      },
+      "documentation":"<p>Represents the source of input data for a node field.</p>"
     },
     "NodeName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}"
+    },
+    "NodeOutputEvent":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "timestamp",
+        "fields"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the node that produced the outputs.</p>"
+        },
+        "timestamp":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the outputs were produced by the node.</p>"
+        },
+        "fields":{
+          "shape":"NodeOutputFields",
+          "documentation":"<p>A list of output fields produced by the node.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the outputs produced by a specific node during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "NodeOutputField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "content"
+      ],
+      "members":{
+        "name":{
+          "shape":"NodeOutputName",
+          "documentation":"<p>The name of the output field as defined in the node's output schema.</p>"
+        },
+        "content":{
+          "shape":"NodeExecutionContent",
+          "documentation":"<p>The content of the output field, which can contain text or structured data.</p>"
+        },
+        "next":{
+          "shape":"NodeOutputNextList",
+          "documentation":"<p>The next node that receives output data from this field.</p>"
+        },
+        "type":{
+          "shape":"FlowNodeIODataType",
+          "documentation":"<p>The data type of the output field for compatibility validation.</p>"
+        }
+      },
+      "documentation":"<p>Represents an output field produced by a node during a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "NodeOutputFields":{
+      "type":"list",
+      "member":{"shape":"NodeOutputField"},
+      "max":2,
+      "min":1
     },
     "NodeOutputName":{
       "type":"string",
-      "pattern":"^[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}$"
+      "pattern":"[a-zA-Z]([_]?[0-9a-zA-Z]){0,99}"
+    },
+    "NodeOutputNext":{
+      "type":"structure",
+      "required":[
+        "nodeName",
+        "inputFieldName"
+      ],
+      "members":{
+        "nodeName":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the next node that receives the output data.</p>"
+        },
+        "inputFieldName":{
+          "shape":"FlowNodeInputName",
+          "documentation":"<p>The name of the input field in the next node that receives the data.</p>"
+        }
+      },
+      "documentation":"<p>Represents the next node that receives output data.</p>",
+      "sensitive":true
+    },
+    "NodeOutputNextList":{
+      "type":"list",
+      "member":{"shape":"NodeOutputNext"}
+    },
+    "NodeTraceElements":{
+      "type":"structure",
+      "members":{
+        "agentTraces":{
+          "shape":"AgentTraces",
+          "documentation":"<p>Agent trace information for the node execution.</p>"
+        }
+      },
+      "documentation":"<p>Contains trace elements for node execution tracking.</p>",
+      "sensitive":true,
+      "union":true
     },
     "NodeType":{
       "type":"string",
@@ -3485,11 +5822,19 @@
     },
     "NonBlankString":{
       "type":"string",
-      "pattern":"^[\\s\\S]*$"
+      "pattern":"[\\s\\S]*"
     },
     "Observation":{
       "type":"structure",
       "members":{
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
+        },
+        "type":{
+          "shape":"Type",
+          "documentation":"<p>Specifies what kind of information the agent returns in the observation. The following values are possible.</p> <ul> <li> <p> <code>ACTION_GROUP</code> – The agent returns the result of an action group.</p> </li> <li> <p> <code>KNOWLEDGE_BASE</code> – The agent returns information from a knowledge base.</p> </li> <li> <p> <code>FINISH</code> – The agent returns a final response to the user with no follow-up.</p> </li> <li> <p> <code>ASK_USER</code> – The agent asks the user a question.</p> </li> <li> <p> <code>REPROMPT</code> – The agent prompts the user again for the same information.</p> </li> </ul>"
+        },
         "actionGroupInvocationOutput":{
           "shape":"ActionGroupInvocationOutput",
           "documentation":"<p>Contains the JSON-formatted string returned by the API invoked by the action group.</p>"
@@ -3498,29 +5843,21 @@
           "shape":"AgentCollaboratorInvocationOutput",
           "documentation":"<p>A collaborator's invocation output.</p>"
         },
-        "codeInterpreterInvocationOutput":{
-          "shape":"CodeInterpreterInvocationOutput",
-          "documentation":"<p>Contains the JSON-formatted string returned by the API invoked by the code interpreter.</p>"
+        "knowledgeBaseLookupOutput":{
+          "shape":"KnowledgeBaseLookupOutput",
+          "documentation":"<p>Contains details about the results from looking up the knowledge base.</p>"
         },
         "finalResponse":{
           "shape":"FinalResponse",
           "documentation":"<p>Contains details about the response to the user.</p>"
         },
-        "knowledgeBaseLookupOutput":{
-          "shape":"KnowledgeBaseLookupOutput",
-          "documentation":"<p>Contains details about the results from looking up the knowledge base.</p>"
-        },
         "repromptResponse":{
           "shape":"RepromptResponse",
           "documentation":"<p>Contains details about the response to reprompt the input.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
-        },
-        "type":{
-          "shape":"Type",
-          "documentation":"<p>Specifies what kind of information the agent returns in the observation. The following values are possible.</p> <ul> <li> <p> <code>ACTION_GROUP</code> – The agent returns the result of an action group.</p> </li> <li> <p> <code>KNOWLEDGE_BASE</code> – The agent returns information from a knowledge base.</p> </li> <li> <p> <code>FINISH</code> – The agent returns a final response to the user with no follow-up.</p> </li> <li> <p> <code>ASK_USER</code> – The agent asks the user a question.</p> </li> <li> <p> <code>REPROMPT</code> – The agent prompts the user again for the same information.</p> </li> </ul>"
+        "codeInterpreterInvocationOutput":{
+          "shape":"CodeInterpreterInvocationOutput",
+          "documentation":"<p>Contains the JSON-formatted string returned by the API invoked by the code interpreter.</p>"
         }
       },
       "documentation":"<p>Contains the result or output of an action group or knowledge base, or the response to the user.</p>",
@@ -3547,7 +5884,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:provisioned-model/[a-z0-9]{12})))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)$"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:provisioned-model/[a-z0-9]{12})))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)"
     },
     "OptimizePromptResponse":{
       "type":"structure",
@@ -3586,30 +5923,18 @@
     "OptimizedPromptStream":{
       "type":"structure",
       "members":{
-        "accessDeniedException":{
-          "shape":"AccessDeniedException",
-          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
+        "optimizedPromptEvent":{
+          "shape":"OptimizedPromptEvent",
+          "documentation":"<p>An event in which the prompt was optimized.</p>"
         },
         "analyzePromptEvent":{
           "shape":"AnalyzePromptEvent",
           "documentation":"<p>An event in which the prompt was analyzed in preparation for optimization.</p>"
         },
-        "badGatewayException":{
-          "shape":"BadGatewayException",
-          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
-        },
-        "dependencyFailedException":{
-          "shape":"DependencyFailedException",
-          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
-        },
         "internalServerException":{
           "shape":"InternalServerException",
           "documentation":"<p>An internal server error occurred. Retry your request.</p>"
         },
-        "optimizedPromptEvent":{
-          "shape":"OptimizedPromptEvent",
-          "documentation":"<p>An event in which the prompt was optimized.</p>"
-        },
         "throttlingException":{
           "shape":"ThrottlingException",
           "documentation":"<p>Your request was throttled because of service-wide limitations. Resubmit your request later or in a different region. You can also purchase <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html\">Provisioned Throughput</a> to increase the rate or number of tokens you can process.</p>"
@@ -3617,6 +5942,18 @@
         "validationException":{
           "shape":"ValidationException",
           "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        },
+        "dependencyFailedException":{
+          "shape":"DependencyFailedException",
+          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        },
+        "accessDeniedException":{
+          "shape":"AccessDeniedException",
+          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
+        },
+        "badGatewayException":{
+          "shape":"BadGatewayException",
+          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
         }
       },
       "documentation":"<p>The stream containing events in the prompt optimization process.</p>",
@@ -3625,43 +5962,58 @@
     "OrchestrationConfiguration":{
       "type":"structure",
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"AdditionalModelRequestFields",
-          "documentation":"<p> Additional model parameters and corresponding values not included in the textInferenceConfig structure for a knowledge base. This allows users to provide custom model parameters specific to the language model being used. </p>"
+        "promptTemplate":{
+          "shape":"PromptTemplate",
+          "documentation":"<p>Contains the template for the prompt that's sent to the model. Orchestration prompts must include the <code>$conversation_history$</code> and <code>$output_format_instructions$</code> variables. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Use placeholder variables</a> in the user guide.</p>"
         },
         "inferenceConfig":{
           "shape":"InferenceConfig",
           "documentation":"<p> Configuration settings for inference when using RetrieveAndGenerate to generate responses while using a knowledge base as a source. </p>"
         },
-        "performanceConfig":{
-          "shape":"PerformanceConfiguration",
-          "documentation":"<p>The latency configuration for the model.</p>"
-        },
-        "promptTemplate":{
-          "shape":"PromptTemplate",
-          "documentation":"<p>Contains the template for the prompt that's sent to the model. Orchestration prompts must include the <code>$conversation_history$</code> and <code>$output_format_instructions$</code> variables. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Use placeholder variables</a> in the user guide.</p>"
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p> Additional model parameters and corresponding values not included in the textInferenceConfig structure for a knowledge base. This allows users to provide custom model parameters specific to the language model being used. </p>"
         },
         "queryTransformationConfiguration":{
           "shape":"QueryTransformationConfiguration",
           "documentation":"<p>To split up the prompt and retrieve multiple sources, set the transformation type to <code>QUERY_DECOMPOSITION</code>.</p>"
+        },
+        "performanceConfig":{
+          "shape":"PerformanceConfiguration",
+          "documentation":"<p>The latency configuration for the model.</p>"
         }
       },
       "documentation":"<p>Settings for how the model processes the prompt prior to retrieval and generation.</p>"
     },
+    "OrchestrationExecutor":{
+      "type":"structure",
+      "members":{
+        "lambda":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function containing the business logic that is carried out upon invoking the action. </p>"
+        }
+      },
+      "documentation":"<p>The structure of the executor invoking the actions in custom orchestration.</p>",
+      "union":true
+    },
     "OrchestrationModelInvocationOutput":{
       "type":"structure",
       "members":{
-        "metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>Contains information about the foundation model output from the orchestration step.</p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
         },
         "rawResponse":{
           "shape":"RawResponse",
           "documentation":"<p>Contains details of the raw response from the foundation model output.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>Contains information about the foundation model output from the orchestration step.</p>"
+        },
+        "reasoningContent":{
+          "shape":"ReasoningContentBlock",
+          "documentation":"<p>Contains content about the reasoning that the model made during the orchestration step. </p>"
         }
       },
       "documentation":"<p>The foundation model output from the orchestration step.</p>",
@@ -3670,10 +6022,18 @@
     "OrchestrationTrace":{
       "type":"structure",
       "members":{
+        "rationale":{
+          "shape":"Rationale",
+          "documentation":"<p>Details about the reasoning, based on the input, that the agent uses to justify carrying out an action group or getting information from a knowledge base.</p>"
+        },
         "invocationInput":{
           "shape":"InvocationInput",
           "documentation":"<p>Contains information pertaining to the action group or knowledge base that is being invoked.</p>"
         },
+        "observation":{
+          "shape":"Observation",
+          "documentation":"<p>Details about the observation (the output of the action group Lambda or knowledge base) made by the agent.</p>"
+        },
         "modelInvocationInput":{
           "shape":"ModelInvocationInput",
           "documentation":"<p>The input for the orchestration step.</p> <ul> <li> <p>The <code>type</code> is <code>ORCHESTRATION</code>.</p> </li> <li> <p>The <code>text</code> contains the prompt.</p> </li> <li> <p>The <code>inferenceConfiguration</code>, <code>parserMode</code>, and <code>overrideLambda</code> values are set in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> object that was set when the agent was created or updated.</p> </li> </ul>"
@@ -3681,27 +6041,22 @@
         "modelInvocationOutput":{
           "shape":"OrchestrationModelInvocationOutput",
           "documentation":"<p>Contains information pertaining to the output from the foundation model that is being invoked.</p>"
-        },
-        "observation":{
-          "shape":"Observation",
-          "documentation":"<p>Details about the observation (the output of the action group Lambda or knowledge base) made by the agent.</p>"
-        },
-        "rationale":{
-          "shape":"Rationale",
-          "documentation":"<p>Details about the reasoning, based on the input, that the agent uses to justify carrying out an action group or getting information from a knowledge base.</p>"
         }
       },
       "documentation":"<p>Details about the orchestration step, in which the agent determines the order in which actions are executed and which knowledge bases are retrieved.</p>",
       "sensitive":true,
       "union":true
     },
+    "OrchestrationType":{
+      "type":"string",
+      "enum":[
+        "DEFAULT",
+        "CUSTOM_ORCHESTRATION"
+      ]
+    },
     "OutputFile":{
       "type":"structure",
       "members":{
-        "bytes":{
-          "shape":"FileBody",
-          "documentation":"<p>The byte count of files that contains response from code interpreter.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the file containing response from code interpreter.</p>"
@@ -3709,6 +6064,10 @@
         "type":{
           "shape":"MimeType",
           "documentation":"<p>The type of file that contains response from the code interpreter.</p>"
+        },
+        "bytes":{
+          "shape":"FileBody",
+          "documentation":"<p>The byte count of files that contains response from code interpreter.</p>"
         }
       },
       "documentation":"<p>Contains details of the response from code interpreter.</p>",
@@ -3755,13 +6114,13 @@
           "shape":"ParameterDescription",
           "documentation":"<p> A description of the parameter. Helps the foundation model determine how to elicit the parameters from the user. </p>"
         },
-        "required":{
-          "shape":"Boolean",
-          "documentation":"<p> Whether the parameter is required for the agent to complete the function for action group invocation. </p>"
-        },
         "type":{
           "shape":"ParameterType",
           "documentation":"<p> The data type of the parameter. </p>"
+        },
+        "required":{
+          "shape":"Boolean",
+          "documentation":"<p> Whether the parameter is required for the agent to complete the function for action group invocation. </p>"
         }
       },
       "documentation":"<p> Contains details about a parameter in a function for an action group. </p>"
@@ -3777,7 +6136,7 @@
     },
     "ParameterName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$"
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}"
     },
     "ParameterType":{
       "type":"string",
@@ -3806,13 +6165,13 @@
     "PayloadPart":{
       "type":"structure",
       "members":{
-        "attribution":{
-          "shape":"Attribution",
-          "documentation":"<p>Contains citations for a part of an agent response.</p>"
-        },
         "bytes":{
           "shape":"PartBody",
           "documentation":"<p>A part of the agent response in bytes.</p>"
+        },
+        "attribution":{
+          "shape":"Attribution",
+          "documentation":"<p>Contains citations for a part of an agent response.</p>"
         }
       },
       "documentation":"<p>Contains a part of an agent response and citations for it.</p>",
@@ -3846,9 +6205,9 @@
     "PostProcessingModelInvocationOutput":{
       "type":"structure",
       "members":{
-        "metadata":{
-          "shape":"Metadata",
-          "documentation":"<p> Contains information about the foundation model output from the post-processing step. </p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
         },
         "parsedResponse":{
           "shape":"PostProcessingParsedResponse",
@@ -3858,9 +6217,13 @@
           "shape":"RawResponse",
           "documentation":"<p> Details of the raw response from the foundation model output. </p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p> Contains information about the foundation model output from the post-processing step. </p>"
+        },
+        "reasoningContent":{
+          "shape":"ReasoningContentBlock",
+          "documentation":"<p>Contains content about the reasoning that the model made during the post-processing step.</p>"
         }
       },
       "documentation":"<p>The foundation model output from the post-processing step.</p>",
@@ -3896,9 +6259,9 @@
     "PreProcessingModelInvocationOutput":{
       "type":"structure",
       "members":{
-        "metadata":{
-          "shape":"Metadata",
-          "documentation":"<p> Contains information about the foundation model output from the pre-processing step. </p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The unique identifier of the trace.</p>"
         },
         "parsedResponse":{
           "shape":"PreProcessingParsedResponse",
@@ -3908,9 +6271,13 @@
           "shape":"RawResponse",
           "documentation":"<p> Details of the raw response from the foundation model output. </p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The unique identifier of the trace.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p> Contains information about the foundation model output from the pre-processing step. </p>"
+        },
+        "reasoningContent":{
+          "shape":"ReasoningContentBlock",
+          "documentation":"<p>Contains content about the reasoning that the model made during the pre-processing step. </p>"
         }
       },
       "documentation":"<p>The foundation model output from the pre-processing step.</p>",
@@ -3919,13 +6286,13 @@
     "PreProcessingParsedResponse":{
       "type":"structure",
       "members":{
-        "isValid":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the user input is valid or not. If <code>false</code>, the agent doesn't proceed to orchestration.</p>"
-        },
         "rationale":{
           "shape":"RationaleString",
           "documentation":"<p>The text returned by the parsing of the pre-processing step, explaining the steps that the agent plans to take in orchestration, if the user input is valid.</p>"
+        },
+        "isValid":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the user input is valid or not. If <code>false</code>, the agent doesn't proceed to orchestration.</p>"
         }
       },
       "documentation":"<p>Details about the response from the Lambda parsing of the output from the pre-processing step.</p>",
@@ -3950,6 +6317,18 @@
     "PromptConfiguration":{
       "type":"structure",
       "members":{
+        "promptType":{
+          "shape":"PromptType",
+          "documentation":"<p> The step in the agent sequence that this prompt configuration applies to. </p>"
+        },
+        "promptCreationMode":{
+          "shape":"CreationMode",
+          "documentation":"<p>Specifies whether to override the default prompt template for this <code>promptType</code>. Set this value to <code>OVERRIDDEN</code> to use the prompt that you provide in the <code>basePromptTemplate</code>. If you leave it as <code>DEFAULT</code>, the agent uses a default prompt template.</p>"
+        },
+        "promptState":{
+          "shape":"PromptState",
+          "documentation":"<p>Specifies whether to allow the inline agent to carry out the step specified in the <code>promptType</code>. If you set this value to <code>DISABLED</code>, the agent skips that step. The default state for each <code>promptType</code> is as follows.</p> <ul> <li> <p> <code>PRE_PROCESSING</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>ORCHESTRATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>KNOWLEDGE_BASE_RESPONSE_GENERATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>POST_PROCESSING</code> – <code>DISABLED</code> </p> </li> </ul>"
+        },
         "basePromptTemplate":{
           "shape":"BasePromptTemplate",
           "documentation":"<p>Defines the prompt template with which to replace the default prompt template. You can use placeholder variables in the base prompt template to customize the prompt. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Prompt template placeholder variables</a>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts-configure.html\">Configure the prompt templates</a>.</p>"
@@ -3960,19 +6339,15 @@
         },
         "parserMode":{
           "shape":"CreationMode",
-          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>. If you set the field as <code>OVERRIDEN</code>, the <code>overrideLambda</code> field in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> must be specified with the ARN of a Lambda function.</p>"
+          "documentation":"<p>Specifies whether to override the default parser Lambda function when parsing the raw foundation model output in the part of the agent sequence defined by the <code>promptType</code>. If you set the field as <code>OVERRIDDEN</code>, the <code>overrideLambda</code> field in the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent_PromptOverrideConfiguration.html\">PromptOverrideConfiguration</a> must be specified with the ARN of a Lambda function.</p>"
         },
-        "promptCreationMode":{
-          "shape":"CreationMode",
-          "documentation":"<p>Specifies whether to override the default prompt template for this <code>promptType</code>. Set this value to <code>OVERRIDDEN</code> to use the prompt that you provide in the <code>basePromptTemplate</code>. If you leave it as <code>DEFAULT</code>, the agent uses a default prompt template.</p>"
-        },
-        "promptState":{
-          "shape":"PromptState",
-          "documentation":"<p>Specifies whether to allow the inline agent to carry out the step specified in the <code>promptType</code>. If you set this value to <code>DISABLED</code>, the agent skips that step. The default state for each <code>promptType</code> is as follows.</p> <ul> <li> <p> <code>PRE_PROCESSING</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>ORCHESTRATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>KNOWLEDGE_BASE_RESPONSE_GENERATION</code> – <code>ENABLED</code> </p> </li> <li> <p> <code>POST_PROCESSING</code> – <code>DISABLED</code> </p> </li> </ul>"
+        "foundationModel":{
+          "shape":"ModelIdentifier",
+          "documentation":"<p> The foundation model to use. </p>"
         },
-        "promptType":{
-          "shape":"PromptType",
-          "documentation":"<p> The step in the agent sequence that this prompt configuration applies to. </p>"
+        "additionalModelRequestFields":{
+          "shape":"Document",
+          "documentation":"<p>If the Converse or ConverseStream operations support the model, <code>additionalModelRequestFields</code> contains additional inference parameters, beyond the base set of inference parameters in the <code>inferenceConfiguration</code> field. </p> <p>For more information, see <i>Inference request parameters and response fields for foundation models</i> in the Amazon Bedrock user guide.</p>"
         }
       },
       "documentation":"<p> Contains configurations to override a prompt template in one part of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>. </p>"
@@ -3983,17 +6358,36 @@
       "max":10,
       "min":0
     },
+    "PromptCreationConfigurations":{
+      "type":"structure",
+      "members":{
+        "previousConversationTurnsToInclude":{
+          "shape":"PromptCreationConfigurationsPreviousConversationTurnsToIncludeInteger",
+          "documentation":"<p>The number of previous conversations from the ongoing agent session to include in the conversation history of the agent prompt, during the current invocation. This gives you more granular control over the context that the model is made aware of, and helps the model remove older context which is no longer useful during the ongoing agent session.</p>"
+        },
+        "excludePreviousThinkingSteps":{
+          "shape":"Boolean",
+          "documentation":"<p>If <code>true</code>, the service removes any content between <code>&lt;thinking&gt;</code> tags from previous conversations in an agent session. The service will only remove content from already processed turns. This helps you remove content which might not be useful for current and subsequent invocations. This can reduce the input token count and potentially save costs. The default value is <code>false</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies parameters that control how the service populates the agent prompt for an <code>InvokeAgent</code> or <code>InvokeInlineAgent</code> request. You can control which aspects of previous invocations in the same agent session the service uses to populate the agent prompt. This gives you more granular control over the contextual history that is used to process the current request.</p>"
+    },
+    "PromptCreationConfigurationsPreviousConversationTurnsToIncludeInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "PromptOverrideConfiguration":{
       "type":"structure",
       "required":["promptConfigurations"],
       "members":{
-        "overrideLambda":{
-          "shape":"LambdaResourceArn",
-          "documentation":"<p>The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence. If you specify this field, at least one of the <code>promptConfigurations</code> must contain a <code>parserMode</code> value that is set to <code>OVERRIDDEN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/lambda-parser.html\">Parser Lambda function in Amazon Bedrock Agents</a>. </p>"
-        },
         "promptConfigurations":{
           "shape":"PromptConfigurations",
           "documentation":"<p>Contains configurations to override a prompt template in one part of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>. </p>"
+        },
+        "overrideLambda":{
+          "shape":"LambdaResourceArn",
+          "documentation":"<p>The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence. If you specify this field, at least one of the <code>promptConfigurations</code> must contain a <code>parserMode</code> value that is set to <code>OVERRIDDEN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/lambda-parser.html\">Parser Lambda function in Amazon Bedrock Agents</a>. </p>"
         }
       },
       "documentation":"<p>Contains configurations to override prompts in different parts of an agent sequence. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/advanced-prompts.html\">Advanced prompts</a>. </p>",
@@ -4045,20 +6439,63 @@
       },
       "documentation":"<p>Contains the parameters in the request body.</p>"
     },
-    "QueryGenerationInput":{
+    "PutInvocationStepRequest":{
       "type":"structure",
       "required":[
-        "text",
-        "type"
+        "sessionIdentifier",
+        "invocationIdentifier",
+        "invocationStepTime",
+        "payload"
       ],
       "members":{
-        "text":{
-          "shape":"QueryGenerationInputTextString",
-          "documentation":"<p>The text of the query.</p>"
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier for the session to add the invocation step to. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        },
+        "invocationIdentifier":{
+          "shape":"InvocationIdentifier",
+          "documentation":"<p>The unique identifier (in UUID format) of the invocation to add the invocation step to.</p>"
+        },
+        "invocationStepTime":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the invocation step occurred.</p>"
+        },
+        "payload":{
+          "shape":"InvocationStepPayload",
+          "documentation":"<p>The payload for the invocation step, including text and images for the interaction.</p>"
         },
+        "invocationStepId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier of the invocation step in UUID format.</p>"
+        }
+      }
+    },
+    "PutInvocationStepResponse":{
+      "type":"structure",
+      "required":["invocationStepId"],
+      "members":{
+        "invocationStepId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier of the invocation step in UUID format.</p>"
+        }
+      }
+    },
+    "QueryGenerationInput":{
+      "type":"structure",
+      "required":[
+        "type",
+        "text"
+      ],
+      "members":{
         "type":{
           "shape":"InputQueryType",
           "documentation":"<p>The type of the query.</p>"
+        },
+        "text":{
+          "shape":"QueryGenerationInputTextString",
+          "documentation":"<p>The text of the query.</p>"
         }
       },
       "documentation":"<p>Contains information about a natural language query to transform into SQL.</p>",
@@ -4102,13 +6539,13 @@
     "Rationale":{
       "type":"structure",
       "members":{
-        "text":{
-          "shape":"RationaleString",
-          "documentation":"<p>The reasoning or thought process of the agent, based on the input.</p>"
-        },
         "traceId":{
           "shape":"TraceId",
           "documentation":"<p>The unique identifier of the trace step.</p>"
+        },
+        "text":{
+          "shape":"RationaleString",
+          "documentation":"<p>The reasoning or thought process of the agent, based on the input.</p>"
         }
       },
       "documentation":"<p>Contains the reasoning, based on the input, that the agent uses to justify carrying out an action group or getting information from a knowledge base.</p>",
@@ -4129,16 +6566,55 @@
       "documentation":"<p>Contains the raw output from the foundation model.</p>",
       "sensitive":true
     },
-    "RepromptResponse":{
+    "ReasoningContentBlock":{
       "type":"structure",
       "members":{
-        "source":{
-          "shape":"Source",
-          "documentation":"<p>Specifies what output is prompting the agent to reprompt the input.</p>"
+        "reasoningText":{
+          "shape":"ReasoningTextBlock",
+          "documentation":"<p>Contains information about the reasoning that the model used to return the content in the content block.</p>"
+        },
+        "redactedContent":{
+          "shape":"Blob",
+          "documentation":"<p>The content in the reasoning that was encrypted by the model provider for trust and safety reasons.</p>"
+        }
+      },
+      "documentation":"<p>Contains content regarding the reasoning that the foundation model made with respect to the content in the content block. Reasoning refers to a Chain of Thought (CoT) that the model generates to enhance the accuracy of its final response.</p>",
+      "sensitive":true,
+      "union":true
+    },
+    "ReasoningTextBlock":{
+      "type":"structure",
+      "required":["text"],
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>Text describing the reasoning that the model used to return the content in the content block.</p>"
         },
+        "signature":{
+          "shape":"String",
+          "documentation":"<p>A hash of all the messages in the conversation to ensure that the content in the reasoning text block isn't tampered with. You must submit the signature in subsequent <code>Converse</code> requests, in addition to the previous messages. If the previous messages are tampered with, the response throws an error.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the reasoning that the model used to return the content in the content block.</p>",
+      "sensitive":true
+    },
+    "RelayConversationHistory":{
+      "type":"string",
+      "enum":[
+        "TO_COLLABORATOR",
+        "DISABLED"
+      ]
+    },
+    "RepromptResponse":{
+      "type":"structure",
+      "members":{
         "text":{
           "shape":"String",
           "documentation":"<p>The text reprompting the input.</p>"
+        },
+        "source":{
+          "shape":"Source",
+          "documentation":"<p>Specifies what output is prompting the agent to reprompt the input.</p>"
         }
       },
       "documentation":"<p>Contains details about the agent's response to reprompt the input.</p>",
@@ -4165,17 +6641,17 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "jsonDocument":{
-          "shape":"Document",
-          "documentation":"<p>Contains a JSON document to rerank.</p>"
+        "type":{
+          "shape":"RerankDocumentType",
+          "documentation":"<p>The type of document to rerank.</p>"
         },
         "textDocument":{
           "shape":"RerankTextDocument",
           "documentation":"<p>Contains information about a text document to rerank.</p>"
         },
-        "type":{
-          "shape":"RerankDocumentType",
-          "documentation":"<p>The type of document to rerank.</p>"
+        "jsonDocument":{
+          "shape":"Document",
+          "documentation":"<p>Contains a JSON document to rerank.</p>"
         }
       },
       "documentation":"<p>Contains information about a document to rerank. Choose the <code>type</code> to define and include the field that corresponds to the type.</p>",
@@ -4198,17 +6674,17 @@
     "RerankQuery":{
       "type":"structure",
       "required":[
-        "textQuery",
-        "type"
+        "type",
+        "textQuery"
       ],
       "members":{
-        "textQuery":{
-          "shape":"RerankTextDocument",
-          "documentation":"<p>Contains information about a text query.</p>"
-        },
         "type":{
           "shape":"RerankQueryContentType",
           "documentation":"<p>The type of the query.</p>"
+        },
+        "textQuery":{
+          "shape":"RerankTextDocument",
+          "documentation":"<p>Contains information about a text query.</p>"
         }
       },
       "documentation":"<p>Contains information about a query to submit to the reranker model.</p>",
@@ -4222,25 +6698,25 @@
       "type":"structure",
       "required":[
         "queries",
-        "rerankingConfiguration",
-        "sources"
+        "sources",
+        "rerankingConfiguration"
       ],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the total number of results was greater than could fit in a response, a token is returned in the <code>nextToken</code> field. You can enter that token in this field to return the next batch of results.</p>"
-        },
         "queries":{
           "shape":"RerankQueriesList",
           "documentation":"<p>An array of objects, each of which contains information about a query to submit to the reranker model.</p>"
         },
+        "sources":{
+          "shape":"RerankSourcesList",
+          "documentation":"<p>An array of objects, each of which contains information about the sources to rerank.</p>"
+        },
         "rerankingConfiguration":{
           "shape":"RerankingConfiguration",
           "documentation":"<p>Contains configurations for reranking.</p>"
         },
-        "sources":{
-          "shape":"RerankSourcesList",
-          "documentation":"<p>An array of objects, each of which contains information about the sources to rerank.</p>"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results was greater than could fit in a response, a token is returned in the <code>nextToken</code> field. You can enter that token in this field to return the next batch of results.</p>"
         }
       }
     },
@@ -4248,13 +6724,13 @@
       "type":"structure",
       "required":["results"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the total number of results is greater than can fit in the response, use this token in the <code>nextToken</code> field when making another request to return the next batch of results.</p>"
-        },
         "results":{
           "shape":"RerankResultsList",
           "documentation":"<p>An array of objects, each of which contains information about the results of reranking.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the total number of results is greater than can fit in the response, use this token in the <code>nextToken</code> field when making another request to return the next batch of results.</p>"
         }
       }
     },
@@ -4265,10 +6741,6 @@
         "relevanceScore"
       ],
       "members":{
-        "document":{
-          "shape":"RerankDocument",
-          "documentation":"<p>Contains information about the document.</p>"
-        },
         "index":{
           "shape":"RerankResultIndexInteger",
           "documentation":"<p>The ranking of the document. The lower a number, the higher the document is ranked.</p>"
@@ -4276,6 +6748,10 @@
         "relevanceScore":{
           "shape":"Float",
           "documentation":"<p>The relevance score of the document.</p>"
+        },
+        "document":{
+          "shape":"RerankDocument",
+          "documentation":"<p>Contains information about the document.</p>"
         }
       },
       "documentation":"<p>Contains information about a document that was reranked.</p>"
@@ -4293,17 +6769,17 @@
     "RerankSource":{
       "type":"structure",
       "required":[
-        "inlineDocumentSource",
-        "type"
+        "type",
+        "inlineDocumentSource"
       ],
       "members":{
-        "inlineDocumentSource":{
-          "shape":"RerankDocument",
-          "documentation":"<p>Contains an inline definition of a source for reranking.</p>"
-        },
         "type":{
           "shape":"RerankSourceType",
           "documentation":"<p>The type of the source.</p>"
+        },
+        "inlineDocumentSource":{
+          "shape":"RerankDocument",
+          "documentation":"<p>Contains an inline definition of a source for reranking.</p>"
         }
       },
       "documentation":"<p>Contains information about a source for reranking.</p>",
@@ -4333,23 +6809,23 @@
     },
     "RerankTextDocumentTextString":{
       "type":"string",
-      "max":9000,
+      "max":32000,
       "min":1
     },
     "RerankingConfiguration":{
       "type":"structure",
       "required":[
-        "bedrockRerankingConfiguration",
-        "type"
+        "type",
+        "bedrockRerankingConfiguration"
       ],
       "members":{
-        "bedrockRerankingConfiguration":{
-          "shape":"BedrockRerankingConfiguration",
-          "documentation":"<p>Contains configurations for an Amazon Bedrock reranker.</p>"
-        },
         "type":{
           "shape":"RerankingConfigurationType",
           "documentation":"<p>The type of reranker that the configurations apply to.</p>"
+        },
+        "bedrockRerankingConfiguration":{
+          "shape":"BedrockRerankingConfiguration",
+          "documentation":"<p>Contains configurations for an Amazon Bedrock reranker.</p>"
         }
       },
       "documentation":"<p>Contains configurations for reranking.</p>"
@@ -4368,13 +6844,13 @@
     "RerankingMetadataSelectiveModeConfiguration":{
       "type":"structure",
       "members":{
-        "fieldsToExclude":{
-          "shape":"FieldsForReranking",
-          "documentation":"<p>An array of objects, each of which specifies a metadata field to exclude from consideration when reranking.</p>"
-        },
         "fieldsToInclude":{
           "shape":"FieldsForReranking",
           "documentation":"<p>An array of objects, each of which specifies a metadata field to include in consideration when reranking. The remaining metadata fields are ignored.</p>"
+        },
+        "fieldsToExclude":{
+          "shape":"FieldsForReranking",
+          "documentation":"<p>An array of objects, each of which specifies a metadata field to exclude from consideration when reranking.</p>"
         }
       },
       "documentation":"<p>Contains configurations for the metadata fields to include or exclude when considering reranking. If you include the <code>fieldsToExclude</code> field, the reranker ignores all the metadata fields that you specify. If you include the <code>fieldsToInclude</code> field, the reranker uses only the metadata fields that you specify and ignores all others. You can include only one of these fields.</p>",
@@ -4389,7 +6865,7 @@
     },
     "ResourceName":{
       "type":"string",
-      "pattern":"^([0-9a-zA-Z][_-]?){1,100}$",
+      "pattern":"([0-9a-zA-Z][_-]?){1,100}",
       "sensitive":true
     },
     "ResourceNotFoundException":{
@@ -4419,46 +6895,30 @@
     "ResponseStream":{
       "type":"structure",
       "members":{
-        "accessDeniedException":{
-          "shape":"AccessDeniedException",
-          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
-        },
-        "badGatewayException":{
-          "shape":"BadGatewayException",
-          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
-        },
         "chunk":{
           "shape":"PayloadPart",
           "documentation":"<p>Contains a part of an agent response and citations for it.</p>"
         },
-        "conflictException":{
-          "shape":"ConflictException",
-          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request.</p>"
-        },
-        "dependencyFailedException":{
-          "shape":"DependencyFailedException",
-          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        "trace":{
+          "shape":"TracePart",
+          "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Trace events</a>.</p>"
         },
-        "files":{
-          "shape":"FilePart",
-          "documentation":"<p>Contains intermediate response for code interpreter if any files have been generated.</p>"
+        "returnControl":{
+          "shape":"ReturnControlPayload",
+          "documentation":"<p>Contains the parameters and information that the agent elicited from the customer to carry out an action. This information is returned to the system and can be used in your own setup for fulfilling the action.</p>"
         },
         "internalServerException":{
           "shape":"InternalServerException",
           "documentation":"<p>An internal server error occurred. Retry your request.</p>"
         },
-        "modelNotReadyException":{
-          "shape":"ModelNotReadyException",
-          "documentation":"<p> The model specified in the request is not ready to serve Inference requests. The AWS SDK will automatically retry the operation up to 5 times. For information about configuring automatic retries, see <a href=\"https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html\">Retry behavior</a> in the <i>AWS SDKs and Tools</i> reference guide. </p>"
+        "validationException":{
+          "shape":"ValidationException",
+          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
         },
         "resourceNotFoundException":{
           "shape":"ResourceNotFoundException",
           "documentation":"<p>The specified resource Amazon Resource Name (ARN) was not found. Check the Amazon Resource Name (ARN) and try your request again.</p>"
         },
-        "returnControl":{
-          "shape":"ReturnControlPayload",
-          "documentation":"<p>Contains the parameters and information that the agent elicited from the customer to carry out an action. This information is returned to the system and can be used in your own setup for fulfilling the action.</p>"
-        },
         "serviceQuotaExceededException":{
           "shape":"ServiceQuotaExceededException",
           "documentation":"<p>The number of requests exceeds the service quota. Resubmit your request later.</p>"
@@ -4467,13 +6927,29 @@
           "shape":"ThrottlingException",
           "documentation":"<p>The number of requests exceeds the limit. Resubmit your request later.</p>"
         },
-        "trace":{
-          "shape":"TracePart",
-          "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/trace-events.html\">Trace events</a>.</p>"
+        "accessDeniedException":{
+          "shape":"AccessDeniedException",
+          "documentation":"<p>The request is denied because of missing access permissions. Check your permissions and retry your request.</p>"
         },
-        "validationException":{
-          "shape":"ValidationException",
-          "documentation":"<p>Input validation failed. Check your request parameters and retry the request.</p>"
+        "conflictException":{
+          "shape":"ConflictException",
+          "documentation":"<p>There was a conflict performing an operation. Resolve the conflict and retry your request.</p>"
+        },
+        "dependencyFailedException":{
+          "shape":"DependencyFailedException",
+          "documentation":"<p>There was an issue with a dependency. Check the resource configurations and retry the request.</p>"
+        },
+        "badGatewayException":{
+          "shape":"BadGatewayException",
+          "documentation":"<p>There was an issue with a dependency due to a server issue. Retry your request.</p>"
+        },
+        "modelNotReadyException":{
+          "shape":"ModelNotReadyException",
+          "documentation":"<p> The model specified in the request is not ready to serve Inference requests. The AWS SDK will automatically retry the operation up to 5 times. For information about configuring automatic retries, see <a href=\"https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html\">Retry behavior</a> in the <i>AWS SDKs and Tools</i> reference guide. </p>"
+        },
+        "files":{
+          "shape":"FilePart",
+          "documentation":"<p>Contains intermediate response for code interpreter if any files have been generated.</p>"
         }
       },
       "documentation":"<p>The response from invoking the agent and associated citations and trace information.</p>",
@@ -4482,14 +6958,14 @@
     "RetrievalFilter":{
       "type":"structure",
       "members":{
-        "andAll":{
-          "shape":"RetrievalFilterList",
-          "documentation":"<p>Knowledge base data sources are returned if their metadata attributes fulfill all the filter conditions inside this list.</p>"
-        },
         "equals":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value matches the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>animal</code> attribute whose value is <code>cat</code>:</p> <p> <code>\"equals\": { \"key\": \"animal\", \"value\": \"cat\" }</code> </p>"
         },
+        "notEquals":{
+          "shape":"FilterAttribute",
+          "documentation":"<p>Knowledge base data sources are returned when:</p> <ul> <li> <p>It contains a metadata attribute whose name matches the <code>key</code> and whose value doesn't match the <code>value</code> in this object.</p> </li> <li> <p>The key is not present in the document.</p> </li> </ul> <p>The following example would return data sources that don't contain an <code>animal</code> attribute whose value is <code>cat</code>.</p> <p> <code>\"notEquals\": { \"key\": \"animal\", \"value\": \"cat\" }</code> </p>"
+        },
         "greaterThan":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is greater than the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>year</code> attribute whose value is greater than <code>1989</code>:</p> <p> <code>\"greaterThan\": { \"key\": \"year\", \"value\": 1989 }</code> </p>"
@@ -4498,10 +6974,6 @@
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is greater than or equal to the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>year</code> attribute whose value is greater than or equal to <code>1989</code>:</p> <p> <code>\"greaterThanOrEquals\": { \"key\": \"year\", \"value\": 1989 }</code> </p>"
         },
-        "in":{
-          "shape":"FilterAttribute",
-          "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is in the list specified in the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>animal</code> attribute that is either <code>cat</code> or <code>dog</code>:</p> <p> <code>\"in\": { \"key\": \"animal\", \"value\": [\"cat\", \"dog\"] }</code> </p>"
-        },
         "lessThan":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is less than the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>year</code> attribute whose value is less than to <code>1989</code>.</p> <p> <code>\"lessThan\": { \"key\": \"year\", \"value\": 1989 }</code> </p>"
@@ -4510,29 +6982,33 @@
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is less than or equal to the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>year</code> attribute whose value is less than or equal to <code>1989</code>.</p> <p> <code>\"lessThanOrEquals\": { \"key\": \"year\", \"value\": 1989 }</code> </p>"
         },
-        "listContains":{
-          "shape":"FilterAttribute",
-          "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is a list that contains the <code>value</code> as one of its members.</p> <p>The following example would return data sources with an <code>animals</code> attribute that is a list containing a <code>cat</code> member (for example <code>[\"dog\", \"cat\"]</code>).</p> <p> <code>\"listContains\": { \"key\": \"animals\", \"value\": \"cat\" }</code> </p>"
-        },
-        "notEquals":{
+        "in":{
           "shape":"FilterAttribute",
-          "documentation":"<p>Knowledge base data sources that contain a metadata attribute whose name matches the <code>key</code> and whose value doesn't match the <code>value</code> in this object are returned.</p> <p>The following example would return data sources that don't contain an <code>animal</code> attribute whose value is <code>cat</code>.</p> <p> <code>\"notEquals\": { \"key\": \"animal\", \"value\": \"cat\" }</code> </p>"
+          "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is in the list specified in the <code>value</code> in this object.</p> <p>The following example would return data sources with an <code>animal</code> attribute that is either <code>cat</code> or <code>dog</code>:</p> <p> <code>\"in\": { \"key\": \"animal\", \"value\": [\"cat\", \"dog\"] }</code> </p>"
         },
         "notIn":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value isn't in the list specified in the <code>value</code> in this object.</p> <p>The following example would return data sources whose <code>animal</code> attribute is neither <code>cat</code> nor <code>dog</code>.</p> <p> <code>\"notIn\": { \"key\": \"animal\", \"value\": [\"cat\", \"dog\"] }</code> </p>"
         },
-        "orAll":{
-          "shape":"RetrievalFilterList",
-          "documentation":"<p>Knowledge base data sources are returned if their metadata attributes fulfill at least one of the filter conditions inside this list.</p>"
-        },
         "startsWith":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value starts with the <code>value</code> in this object. This filter is currently only supported for Amazon OpenSearch Serverless vector stores.</p> <p>The following example would return data sources with an <code>animal</code> attribute starts with <code>ca</code> (for example, <code>cat</code> or <code>camel</code>).</p> <p> <code>\"startsWith\": { \"key\": \"animal\", \"value\": \"ca\" }</code> </p>"
         },
+        "listContains":{
+          "shape":"FilterAttribute",
+          "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is a list that contains the <code>value</code> as one of its members.</p> <p>The following example would return data sources with an <code>animals</code> attribute that is a list containing a <code>cat</code> member (for example <code>[\"dog\", \"cat\"]</code>).</p> <p> <code>\"listContains\": { \"key\": \"animals\", \"value\": \"cat\" }</code> </p>"
+        },
         "stringContains":{
           "shape":"FilterAttribute",
           "documentation":"<p>Knowledge base data sources are returned if they contain a metadata attribute whose name matches the <code>key</code> and whose value is one of the following:</p> <ul> <li> <p>A string that contains the <code>value</code> as a substring. The following example would return data sources with an <code>animal</code> attribute that contains the substring <code>at</code> (for example <code>cat</code>).</p> <p> <code>\"stringContains\": { \"key\": \"animal\", \"value\": \"at\" }</code> </p> </li> <li> <p>A list with a member that contains the <code>value</code> as a substring. The following example would return data sources with an <code>animals</code> attribute that is a list containing a member that contains the substring <code>at</code> (for example <code>[\"dog\", \"cat\"]</code>).</p> <p> <code>\"stringContains\": { \"key\": \"animals\", \"value\": \"at\" }</code> </p> </li> </ul>"
+        },
+        "andAll":{
+          "shape":"RetrievalFilterList",
+          "documentation":"<p>Knowledge base data sources are returned if their metadata attributes fulfill all the filter conditions inside this list.</p>"
+        },
+        "orAll":{
+          "shape":"RetrievalFilterList",
+          "documentation":"<p>Knowledge base data sources are returned if their metadata attributes fulfill at least one of the filter conditions inside this list.</p>"
         }
       },
       "documentation":"<p>Specifies the filters to use on the metadata attributes in the knowledge base data sources before returning results. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>. See the examples below to see how to use these filters.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_RequestSyntax\">Retrieve request</a> – in the <code>filter</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_RequestSyntax\">RetrieveAndGenerate request</a> – in the <code>filter</code> field</p> </li> </ul>",
@@ -4557,6 +7033,14 @@
     "RetrievalResultContent":{
       "type":"structure",
       "members":{
+        "type":{
+          "shape":"RetrievalResultContentType",
+          "documentation":"<p>The type of content in the retrieval result.</p>"
+        },
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The cited text from the data source.</p>"
+        },
         "byteContent":{
           "shape":"String",
           "documentation":"<p>A data URI with base64-encoded content from the data source. The URI is in the following format: returned in the following format: <code>data:image/jpeg;base64,${base64-encoded string}</code>.</p>"
@@ -4564,14 +7048,6 @@
         "row":{
           "shape":"RetrievalResultContentRow",
           "documentation":"<p>Specifies information about the rows with the cells to return in retrieval.</p>"
-        },
-        "text":{
-          "shape":"String",
-          "documentation":"<p>The cited text from the data source.</p>"
-        },
-        "type":{
-          "shape":"RetrievalResultContentType",
-          "documentation":"<p>The type of content in the retrieval result.</p>"
         }
       },
       "documentation":"<p>Contains information about a chunk of text from a data source in the knowledge base. If the result is from a structured data source, the cell in the database and the type of the value is also identified.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_ResponseSyntax\">Retrieve response</a> – in the <code>content</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_ResponseSyntax\">RetrieveAndGenerate response</a> – in the <code>content</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> – in the <code>content</code> field</p> </li> </ul>",
@@ -4644,22 +7120,22 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "confluenceLocation":{
-          "shape":"RetrievalResultConfluenceLocation",
-          "documentation":"<p>The Confluence data source location.</p>"
-        },
-        "customDocumentLocation":{
-          "shape":"RetrievalResultCustomDocumentLocation",
-          "documentation":"<p>Specifies the location of a document in a custom data source.</p>"
-        },
-        "kendraDocumentLocation":{
-          "shape":"RetrievalResultKendraDocumentLocation",
-          "documentation":"<p>The location of a document in Amazon Kendra.</p>"
+        "type":{
+          "shape":"RetrievalResultLocationType",
+          "documentation":"<p>The type of data source location.</p>"
         },
         "s3Location":{
           "shape":"RetrievalResultS3Location",
           "documentation":"<p>The S3 data source location.</p>"
         },
+        "webLocation":{
+          "shape":"RetrievalResultWebLocation",
+          "documentation":"<p>The web URL/URLs data source location.</p>"
+        },
+        "confluenceLocation":{
+          "shape":"RetrievalResultConfluenceLocation",
+          "documentation":"<p>The Confluence data source location.</p>"
+        },
         "salesforceLocation":{
           "shape":"RetrievalResultSalesforceLocation",
           "documentation":"<p>The Salesforce data source location.</p>"
@@ -4668,17 +7144,17 @@
           "shape":"RetrievalResultSharePointLocation",
           "documentation":"<p>The SharePoint data source location.</p>"
         },
+        "customDocumentLocation":{
+          "shape":"RetrievalResultCustomDocumentLocation",
+          "documentation":"<p>Specifies the location of a document in a custom data source.</p>"
+        },
+        "kendraDocumentLocation":{
+          "shape":"RetrievalResultKendraDocumentLocation",
+          "documentation":"<p>The location of a document in Amazon Kendra.</p>"
+        },
         "sqlLocation":{
           "shape":"RetrievalResultSqlLocation",
           "documentation":"<p>Specifies information about the SQL query used to retrieve the result.</p>"
-        },
-        "type":{
-          "shape":"RetrievalResultLocationType",
-          "documentation":"<p>The type of data source location.</p>"
-        },
-        "webLocation":{
-          "shape":"RetrievalResultWebLocation",
-          "documentation":"<p>The web URL/URLs data source location.</p>"
         }
       },
       "documentation":"<p>Contains information about the data source location.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html#API_agent-runtime_Retrieve_ResponseSyntax\">Retrieve response</a> – in the <code>location</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_ResponseSyntax\">RetrieveAndGenerate response</a> – in the <code>location</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> – in the <code>location</code> field</p> </li> </ul>",
@@ -4711,8 +7187,7 @@
     },
     "RetrievalResultMetadataValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "RetrievalResultS3Location":{
@@ -4769,17 +7244,17 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "externalSourcesConfiguration":{
-          "shape":"ExternalSourcesRetrieveAndGenerateConfiguration",
-          "documentation":"<p>The configuration for the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
+        "type":{
+          "shape":"RetrieveAndGenerateType",
+          "documentation":"<p>The type of resource that contains your data for retrieving information and generating responses.</p> <note> <p>If you choose to use <code>EXTERNAL_SOURCES</code>, then currently only Anthropic Claude 3 Sonnet models for knowledge bases are supported.</p> </note>"
         },
         "knowledgeBaseConfiguration":{
           "shape":"KnowledgeBaseRetrieveAndGenerateConfiguration",
           "documentation":"<p>Contains details about the knowledge base for retrieving information and generating responses.</p>"
         },
-        "type":{
-          "shape":"RetrieveAndGenerateType",
-          "documentation":"<p>The type of resource that contains your data for retrieving information and generating responses.</p> <p>If you choose ot use <code>EXTERNAL_SOURCES</code>, then currently only Claude 3 Sonnet models for knowledge bases are supported.</p>"
+        "externalSourcesConfiguration":{
+          "shape":"ExternalSourcesRetrieveAndGenerateConfiguration",
+          "documentation":"<p>The configuration for the external source wrapper object in the <code>retrieveAndGenerate</code> function.</p>"
         }
       },
       "documentation":"<p>Contains details about the resource being queried.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_RequestSyntax\">RetrieveAndGenerate request</a> – in the <code>retrieveAndGenerateConfiguration</code> field</p> </li> </ul>"
@@ -4830,6 +7305,10 @@
       "type":"structure",
       "required":["input"],
       "members":{
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
+        },
         "input":{
           "shape":"RetrieveAndGenerateInput",
           "documentation":"<p>Contains the query to be made to the knowledge base.</p>"
@@ -4841,20 +7320,24 @@
         "sessionConfiguration":{
           "shape":"RetrieveAndGenerateSessionConfiguration",
           "documentation":"<p>Contains details about the session with the knowledge base.</p>"
-        },
-        "sessionId":{
-          "shape":"SessionId",
-          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
         }
       }
     },
     "RetrieveAndGenerateResponse":{
       "type":"structure",
       "required":[
-        "output",
-        "sessionId"
+        "sessionId",
+        "output"
       ],
       "members":{
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
+        },
+        "output":{
+          "shape":"RetrieveAndGenerateOutput",
+          "documentation":"<p>Contains the response generated from querying the knowledge base.</p>"
+        },
         "citations":{
           "shape":"Citations",
           "documentation":"<p>A list of segments of the generated response that are based on sources in the knowledge base, alongside information about the sources.</p>"
@@ -4862,14 +7345,6 @@
         "guardrailAction":{
           "shape":"GuadrailAction",
           "documentation":"<p>Specifies if there is a guardrail intervention in the response.</p>"
-        },
-        "output":{
-          "shape":"RetrieveAndGenerateOutput",
-          "documentation":"<p>Contains the response generated from querying the knowledge base.</p>"
-        },
-        "sessionId":{
-          "shape":"SessionId",
-          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
         }
       }
     },
@@ -4888,6 +7363,10 @@
       "type":"structure",
       "required":["input"],
       "members":{
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
+        },
         "input":{
           "shape":"RetrieveAndGenerateInput",
           "documentation":"<p>Contains the query to be made to the knowledge base.</p>"
@@ -4899,29 +7378,25 @@
         "sessionConfiguration":{
           "shape":"RetrieveAndGenerateSessionConfiguration",
           "documentation":"<p>Contains details about the session with the knowledge base.</p>"
-        },
-        "sessionId":{
-          "shape":"SessionId",
-          "documentation":"<p>The unique identifier of the session. When you first make a <code>RetrieveAndGenerate</code> request, Amazon Bedrock automatically generates this value. You must reuse this value for all subsequent requests in the same conversational session. This value allows Amazon Bedrock to maintain context and knowledge from previous interactions. You can't explicitly set the <code>sessionId</code> yourself.</p>"
         }
       }
     },
     "RetrieveAndGenerateStreamResponse":{
       "type":"structure",
       "required":[
-        "sessionId",
-        "stream"
+        "stream",
+        "sessionId"
       ],
       "members":{
+        "stream":{
+          "shape":"RetrieveAndGenerateStreamResponseOutput",
+          "documentation":"<p>A stream of events from the model.</p>"
+        },
         "sessionId":{
           "shape":"SessionId",
           "documentation":"<p>The session ID.</p>",
           "location":"header",
           "locationName":"x-amzn-bedrock-knowledge-base-session-id"
-        },
-        "stream":{
-          "shape":"RetrieveAndGenerateStreamResponseOutput",
-          "documentation":"<p>A stream of events from the model.</p>"
         }
       },
       "payload":"stream"
@@ -4929,26 +7404,14 @@
     "RetrieveAndGenerateStreamResponseOutput":{
       "type":"structure",
       "members":{
-        "accessDeniedException":{
-          "shape":"AccessDeniedException",
-          "documentation":"<p>The request is denied because you do not have sufficient permissions to perform the requested action. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-access-denied\">AccessDeniedException</a> in the Amazon Bedrock User Guide.</p>"
-        },
-        "badGatewayException":{
-          "shape":"BadGatewayException",
-          "documentation":"<p>The request failed due to a bad gateway error.</p>"
+        "output":{
+          "shape":"RetrieveAndGenerateOutputEvent",
+          "documentation":"<p>An output event.</p>"
         },
         "citation":{
           "shape":"CitationEvent",
           "documentation":"<p>A citation event.</p>"
         },
-        "conflictException":{
-          "shape":"ConflictException",
-          "documentation":"<p>Error occurred because of a conflict while performing an operation.</p>"
-        },
-        "dependencyFailedException":{
-          "shape":"DependencyFailedException",
-          "documentation":"<p>The request failed due to a dependency error.</p>"
-        },
         "guardrail":{
           "shape":"GuardrailEvent",
           "documentation":"<p>A guardrail event.</p>"
@@ -4957,9 +7420,9 @@
           "shape":"InternalServerException",
           "documentation":"<p>An internal server error occurred. Retry your request.</p>"
         },
-        "output":{
-          "shape":"RetrieveAndGenerateOutputEvent",
-          "documentation":"<p>An output event.</p>"
+        "validationException":{
+          "shape":"ValidationException",
+          "documentation":"<p>The input fails to satisfy the constraints specified by <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-validation-error\">ValidationError</a> in the Amazon Bedrock User Guide.</p>"
         },
         "resourceNotFoundException":{
           "shape":"ResourceNotFoundException",
@@ -4973,9 +7436,21 @@
           "shape":"ThrottlingException",
           "documentation":"<p>Your request was denied due to exceeding the account quotas for <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-throttling-exception\">ThrottlingException</a> in the Amazon Bedrock User Guide.</p>"
         },
-        "validationException":{
-          "shape":"ValidationException",
-          "documentation":"<p>The input fails to satisfy the constraints specified by <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-validation-error\">ValidationError</a> in the Amazon Bedrock User Guide.</p>"
+        "accessDeniedException":{
+          "shape":"AccessDeniedException",
+          "documentation":"<p>The request is denied because you do not have sufficient permissions to perform the requested action. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-access-denied\">AccessDeniedException</a> in the Amazon Bedrock User Guide.</p>"
+        },
+        "conflictException":{
+          "shape":"ConflictException",
+          "documentation":"<p>Error occurred because of a conflict while performing an operation.</p>"
+        },
+        "dependencyFailedException":{
+          "shape":"DependencyFailedException",
+          "documentation":"<p>The request failed due to a dependency error.</p>"
+        },
+        "badGatewayException":{
+          "shape":"BadGatewayException",
+          "documentation":"<p>The request failed due to a bad gateway error.</p>"
         }
       },
       "documentation":"<p>A retrieve and generate stream response output.</p>",
@@ -4995,27 +7470,27 @@
         "retrievalQuery"
       ],
       "members":{
-        "guardrailConfiguration":{
-          "shape":"GuardrailConfiguration",
-          "documentation":"<p>Guardrail settings.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"KnowledgeBaseId",
           "documentation":"<p>The unique identifier of the knowledge base to query.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If there are more results than can fit in the response, the response returns a <code>nextToken</code>. Use this token in the <code>nextToken</code> field of another request to retrieve the next batch of results.</p>"
+        "retrievalQuery":{
+          "shape":"KnowledgeBaseQuery",
+          "documentation":"<p>Contains the query to send the knowledge base.</p>"
         },
         "retrievalConfiguration":{
           "shape":"KnowledgeBaseRetrievalConfiguration",
           "documentation":"<p>Contains configurations for the knowledge base query and retrieval process. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html\">Query configurations</a>.</p>"
         },
-        "retrievalQuery":{
-          "shape":"KnowledgeBaseQuery",
-          "documentation":"<p>Contains the query to send the knowledge base.</p>"
+        "guardrailConfiguration":{
+          "shape":"GuardrailConfiguration",
+          "documentation":"<p>Guardrail settings.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are more results than can fit in the response, the response returns a <code>nextToken</code>. Use this token in the <code>nextToken</code> field of another request to retrieve the next batch of results.</p>"
         }
       }
     },
@@ -5023,6 +7498,10 @@
       "type":"structure",
       "required":["retrievalResults"],
       "members":{
+        "retrievalResults":{
+          "shape":"KnowledgeBaseRetrievalResults",
+          "documentation":"<p>A list of results from querying the knowledge base.</p>"
+        },
         "guardrailAction":{
           "shape":"GuadrailAction",
           "documentation":"<p>Specifies if there is a guardrail intervention in the response.</p>"
@@ -5030,10 +7509,6 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>If there are more results than can fit in the response, the response returns a <code>nextToken</code>. Use this token in the <code>nextToken</code> field of another request to retrieve the next batch of results.</p>"
-        },
-        "retrievalResults":{
-          "shape":"KnowledgeBaseRetrievalResults",
-          "documentation":"<p>A list of results from querying the knowledge base.</p>"
         }
       }
     },
@@ -5068,13 +7543,13 @@
     "ReturnControlPayload":{
       "type":"structure",
       "members":{
-        "invocationId":{
-          "shape":"String",
-          "documentation":"<p>The identifier of the action group invocation.</p>"
-        },
         "invocationInputs":{
           "shape":"InvocationInputs",
           "documentation":"<p>A list of objects that contain information about the parameters and inputs that need to be sent into the API operation or function, based on what the agent determines from its session with the user.</p>"
+        },
+        "invocationId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the action group invocation.</p>"
         }
       },
       "documentation":"<p>Contains information to return from the action group that the agent has predicted to invoke.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> </p> </li> </ul>",
@@ -5098,17 +7573,17 @@
     "RoutingClassifierModelInvocationOutput":{
       "type":"structure",
       "members":{
-        "metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The invocation's metadata.</p>"
+        "traceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The invocation's trace ID.</p>"
         },
         "rawResponse":{
           "shape":"RawResponse",
           "documentation":"<p>The invocation's raw response.</p>"
         },
-        "traceId":{
-          "shape":"TraceId",
-          "documentation":"<p>The invocation's trace ID.</p>"
+        "metadata":{
+          "shape":"Metadata",
+          "documentation":"<p>The invocation's metadata.</p>"
         }
       },
       "documentation":"<p>Invocation output from a routing classifier model.</p>",
@@ -5121,6 +7596,10 @@
           "shape":"InvocationInput",
           "documentation":"<p>The classifier's invocation input.</p>"
         },
+        "observation":{
+          "shape":"Observation",
+          "documentation":"<p>The classifier's observation.</p>"
+        },
         "modelInvocationInput":{
           "shape":"ModelInvocationInput",
           "documentation":"<p>The classifier's model invocation input.</p>"
@@ -5128,10 +7607,6 @@
         "modelInvocationOutput":{
           "shape":"RoutingClassifierModelInvocationOutput",
           "documentation":"<p>The classifier's model invocation output.</p>"
-        },
-        "observation":{
-          "shape":"Observation",
-          "documentation":"<p>The classifier's observation.</p>"
         }
       },
       "documentation":"<p>A trace for a routing classifier.</p>",
@@ -5142,7 +7617,7 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$"
+      "pattern":"[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
     },
     "S3Identifier":{
       "type":"structure",
@@ -5158,6 +7633,17 @@
       },
       "documentation":"<p> The identifier information for an Amazon S3 bucket. </p>"
     },
+    "S3Location":{
+      "type":"structure",
+      "required":["uri"],
+      "members":{
+        "uri":{
+          "shape":"S3Uri",
+          "documentation":"<p>The path to the Amazon S3 bucket where the image is stored.</p>"
+        }
+      },
+      "documentation":"<p>Information about the Amazon S3 bucket where the image is stored.</p>"
+    },
     "S3ObjectDoc":{
       "type":"structure",
       "required":["uri"],
@@ -5184,13 +7670,31 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[\\.\\-\\!\\*\\_\\'\\(\\)a-zA-Z0-9][\\.\\-\\!\\*\\_\\'\\(\\)\\/a-zA-Z0-9]*$"
+      "pattern":"[\\.\\-\\!\\*\\_\\'\\(\\)a-zA-Z0-9][\\.\\-\\!\\*\\_\\'\\(\\)\\/a-zA-Z0-9]*"
     },
     "S3Uri":{
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}$"
+      "pattern":"s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}"
+    },
+    "SatisfiedCondition":{
+      "type":"structure",
+      "required":["conditionName"],
+      "members":{
+        "conditionName":{
+          "shape":"String",
+          "documentation":"<p>The name of the condition that was satisfied.</p>"
+        }
+      },
+      "documentation":"<p>Represents a condition that was satisfied during a condition node evaluation in a flow execution.</p> <note> <p>Flow executions is in preview release for Amazon Bedrock and is subject to change.</p> </note>",
+      "sensitive":true
+    },
+    "SatisfiedConditions":{
+      "type":"list",
+      "member":{"shape":"SatisfiedCondition"},
+      "max":5,
+      "min":1
     },
     "SearchType":{
       "type":"string",
@@ -5211,6 +7715,10 @@
       },
       "exception":true
     },
+    "SessionArn":{
+      "type":"string",
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]+:[0-9]{12}:session/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "SessionAttributesMap":{
       "type":"map",
       "key":{"shape":"String"},
@@ -5220,41 +7728,107 @@
       "type":"string",
       "max":100,
       "min":2,
-      "pattern":"^[0-9a-zA-Z._:-]+$"
+      "pattern":"[0-9a-zA-Z._:-]+"
+    },
+    "SessionIdentifier":{
+      "type":"string",
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]+:[0-9]{12}:session/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})|([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})"
+    },
+    "SessionMetadataKey":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "SessionMetadataMap":{
+      "type":"map",
+      "key":{"shape":"SessionMetadataKey"},
+      "value":{"shape":"SessionMetadataValue"},
+      "max":50,
+      "min":0
+    },
+    "SessionMetadataValue":{
+      "type":"string",
+      "max":5000,
+      "min":0
     },
     "SessionState":{
       "type":"structure",
       "members":{
-        "conversationHistory":{
-          "shape":"ConversationHistory",
-          "documentation":"<p>The state's conversation history.</p>"
+        "sessionAttributes":{
+          "shape":"SessionAttributesMap",
+          "documentation":"<p>Contains attributes that persist across a session and the values of those attributes. If <code>sessionAttributes</code> are passed to a supervisor agent in <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-multi-agent-collaboration.html\">multi-agent collaboration</a>, it will be forwarded to all agent collaborators.</p>"
         },
-        "files":{
-          "shape":"InputFiles",
-          "documentation":"<p>Contains information about the files used by code interpreter.</p>"
+        "promptSessionAttributes":{
+          "shape":"PromptSessionAttributesMap",
+          "documentation":"<p>Contains attributes that persist across a prompt and the values of those attributes. </p> <ul> <li> <p>In orchestration prompt template, these attributes replace the $prompt_session_attributes$ placeholder variable. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Prompt template placeholder variables</a>.</p> </li> <li> <p>In <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-multi-agent-collaboration.html\">multi-agent collaboration</a>, the <code>promptSessionAttributes</code> will only be used by supervisor agent when $prompt_session_attributes$ is present in prompt template. </p> </li> </ul>"
+        },
+        "returnControlInvocationResults":{
+          "shape":"ReturnControlInvocationResults",
+          "documentation":"<p>Contains information about the results from the action group invocation. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p> <note> <p>If you include this field, the <code>inputText</code> field will be ignored.</p> </note>"
         },
         "invocationId":{
           "shape":"String",
           "documentation":"<p>The identifier of the invocation of an action. This value must match the <code>invocationId</code> returned in the <code>InvokeAgent</code> response for the action whose results are provided in the <code>returnControlInvocationResults</code> field. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p>"
         },
+        "files":{
+          "shape":"InputFiles",
+          "documentation":"<p>Contains information about the files used by code interpreter.</p>"
+        },
         "knowledgeBaseConfigurations":{
           "shape":"KnowledgeBaseConfigurations",
           "documentation":"<p>An array of configurations, each of which applies to a knowledge base attached to the agent.</p>"
         },
-        "promptSessionAttributes":{
-          "shape":"PromptSessionAttributesMap",
-          "documentation":"<p>Contains attributes that persist across a prompt and the values of those attributes. These attributes replace the $prompt_session_attributes$ placeholder variable in the orchestration prompt template. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-placeholders.html\">Prompt template placeholder variables</a>.</p>"
+        "conversationHistory":{
+          "shape":"ConversationHistory",
+          "documentation":"<p>The state's conversation history.</p>"
+        }
+      },
+      "documentation":"<p>Contains parameters that specify various attributes that persist across a session or prompt. You can define session state attributes as key-value pairs when writing a <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html\">Lambda function</a> for an action group or pass them when making an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request. Use session state attributes to control and provide conversational context for your agent and to help customize your agent's behavior. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p>"
+    },
+    "SessionStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "EXPIRED",
+        "ENDED"
+      ]
+    },
+    "SessionSummaries":{
+      "type":"list",
+      "member":{"shape":"SessionSummary"}
+    },
+    "SessionSummary":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "sessionArn",
+        "sessionStatus",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier for the session.</p>"
         },
-        "returnControlInvocationResults":{
-          "shape":"ReturnControlInvocationResults",
-          "documentation":"<p>Contains information about the results from the action group invocation. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-returncontrol.html\">Return control to the agent developer</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p> <note> <p>If you include this field, the <code>inputText</code> field will be ignored.</p> </note>"
+        "sessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>The current status of the session.</p>"
         },
-        "sessionAttributes":{
-          "shape":"SessionAttributesMap",
-          "documentation":"<p>Contains attributes that persist across a session and the values of those attributes.</p>"
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was last modified.</p>"
         }
       },
-      "documentation":"<p>Contains parameters that specify various attributes that persist across a session or prompt. You can define session state attributes as key-value pairs when writing a <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html\">Lambda function</a> for an action group or pass them when making an <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html\">InvokeAgent</a> request. Use session state attributes to control and provide conversational context for your agent and to help customize your agent's behavior. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html\">Control session context</a>.</p>"
+      "documentation":"<p>Contains details about a session. For more information about sessions, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/sessions.html\">Store and retrieve conversation history and context with Amazon Bedrock sessions</a>.</p>"
     },
     "SessionTTL":{
       "type":"integer",
@@ -5274,13 +7848,13 @@
     "Span":{
       "type":"structure",
       "members":{
-        "end":{
-          "shape":"SpanEndInteger",
-          "documentation":"<p>Where the text with a citation ends in the generated output.</p>"
-        },
         "start":{
           "shape":"SpanStartInteger",
           "documentation":"<p>Where the text with a citation starts in the generated output.</p>"
+        },
+        "end":{
+          "shape":"SpanEndInteger",
+          "documentation":"<p>Where the text with a citation ends in the generated output.</p>"
         }
       },
       "documentation":"<p>Contains information about where the text with a citation begins and ends in the generated output.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_ResponseSyntax\">RetrieveAndGenerate response</a> – in the <code>span</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> – in the <code>span</code> field</p> </li> </ul>"
@@ -5295,6 +7869,91 @@
       "box":true,
       "min":0
     },
+    "StartFlowExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "inputs"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow to execute.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias to use for the flow execution.</p>",
+          "location":"uri",
+          "locationName":"flowAliasIdentifier"
+        },
+        "flowExecutionName":{
+          "shape":"FlowExecutionName",
+          "documentation":"<p>The unique name for the flow execution. If you don't provide one, a system-generated name is used.</p>"
+        },
+        "inputs":{
+          "shape":"FlowInputs",
+          "documentation":"<p>The input data required for the flow execution. This must match the input schema defined in the flow.</p>"
+        },
+        "modelPerformanceConfiguration":{
+          "shape":"ModelPerformanceConfiguration",
+          "documentation":"<p>The performance settings for the foundation model used in the flow execution.</p>"
+        }
+      }
+    },
+    "StartFlowExecutionResponse":{
+      "type":"structure",
+      "members":{
+        "executionArn":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the flow execution.</p>"
+        }
+      }
+    },
+    "StopFlowExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "flowIdentifier",
+        "flowAliasIdentifier",
+        "executionIdentifier"
+      ],
+      "members":{
+        "flowIdentifier":{
+          "shape":"FlowIdentifier",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"flowIdentifier"
+        },
+        "flowAliasIdentifier":{
+          "shape":"FlowAliasIdentifier",
+          "documentation":"<p>The unique identifier of the flow alias used for the execution.</p>",
+          "location":"uri",
+          "locationName":"flowAliasIdentifier"
+        },
+        "executionIdentifier":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The unique identifier of the flow execution to stop.</p>",
+          "location":"uri",
+          "locationName":"executionIdentifier"
+        }
+      }
+    },
+    "StopFlowExecutionResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "executionArn":{
+          "shape":"FlowExecutionIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the flow execution that was stopped.</p>"
+        },
+        "status":{
+          "shape":"FlowExecutionStatus",
+          "documentation":"<p>The updated status of the flow execution after the stop request. This will typically be ABORTED if the execution was successfully stopped.</p>"
+        }
+      }
+    },
     "StopSequences":{
       "type":"list",
       "member":{"shape":"String"},
@@ -5304,16 +7963,16 @@
     "StreamingConfigurations":{
       "type":"structure",
       "members":{
-        "applyGuardrailInterval":{
-          "shape":"StreamingConfigurationsApplyGuardrailIntervalInteger",
-          "documentation":"<p> The guardrail interval to apply as response is generated. </p>"
-        },
         "streamFinalResponse":{
           "shape":"Boolean",
           "documentation":"<p> Specifies whether to enable streaming for the final response. This is set to <code>false</code> by default. </p>"
+        },
+        "applyGuardrailInterval":{
+          "shape":"StreamingConfigurationsApplyGuardrailIntervalInteger",
+          "documentation":"<p> The guardrail interval to apply as response is generated. By default, the guardrail interval is set to 50 characters. If a larger interval is specified, the response will be generated in larger chunks with fewer <code>ApplyGuardrail</code> calls. The following examples show the response generated for <i>Hello, I am an agent</i> input string.</p> <p> <b>Example response in chunks: Interval set to 3 characters</b> </p> <p> <code>'Hel', 'lo, ','I am', ' an', ' Age', 'nt'</code> </p> <p>Each chunk has at least 3 characters except for the last chunk</p> <p> <b>Example response in chunks: Interval set to 20 or more characters</b> </p> <p> <code>Hello, I am an Agent</code> </p>"
         }
       },
-      "documentation":"<p> Configurations for streaming.</p>"
+      "documentation":"<p>Configurations for streaming.</p>"
     },
     "StreamingConfigurationsApplyGuardrailIntervalInteger":{
       "type":"integer",
@@ -5326,6 +7985,69 @@
       "max":25000000,
       "min":0
     },
+    "SyntheticTimestamp_date_time":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "TagKey":{
+      "type":"string",
+      "documentation":"<p>Key of a tag</p>",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "documentation":"<p>List of Tag Keys</p>",
+      "max":200,
+      "min":1
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to tag.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>An object containing key-value pairs that define the tags to attach to the resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "documentation":"<p>Value of a tag</p>",
+      "max":256,
+      "min":0,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "TaggableResourcesArn":{
+      "type":"string",
+      "documentation":"<p>ARN of Taggable resources: [session]</p>",
+      "max":1011,
+      "min":20,
+      "pattern":".*(^arn:aws(-[^:]+)?:bedrock:[a-zA-Z0-9-]+:[0-9]{12}:(session)/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$).*"
+    },
+    "TagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "documentation":"<p>A map of tag keys and values</p>",
+      "max":200,
+      "min":1
+    },
     "Temperature":{
       "type":"float",
       "box":true,
@@ -5335,14 +8057,6 @@
     "TextInferenceConfig":{
       "type":"structure",
       "members":{
-        "maxTokens":{
-          "shape":"MaxTokens",
-          "documentation":"<p>The maximum number of tokens to generate in the output text. Do not use the minimum of 0 or the maximum of 65536. The limit values described here are arbitary values, for actual values consult the limits defined by your specific model.</p>"
-        },
-        "stopSequences":{
-          "shape":"RAGStopSequences",
-          "documentation":"<p>A list of sequences of characters that, if generated, will cause the model to stop generating further tokens. Do not use a minimum length of 1 or a maximum length of 1000. The limit values described here are arbitary values, for actual values consult the limits defined by your specific model.</p>"
-        },
         "temperature":{
           "shape":"Temperature",
           "documentation":"<p> Controls the random-ness of text generated by the language model, influencing how much the model sticks to the most predictable next words versus exploring more surprising options. A lower temperature value (e.g. 0.2 or 0.3) makes model outputs more deterministic or predictable, while a higher temperature (e.g. 0.8 or 0.9) makes the outputs more creative or unpredictable. </p>"
@@ -5350,6 +8064,14 @@
         "topP":{
           "shape":"TopP",
           "documentation":"<p> A probability distribution threshold which controls what the model considers for the set of possible next tokens. The model will only consider the top p% of the probability distribution when generating the next token. </p>"
+        },
+        "maxTokens":{
+          "shape":"MaxTokens",
+          "documentation":"<p>The maximum number of tokens to generate in the output text. Do not use the minimum of 0 or the maximum of 65536. The limit values described here are arbitary values, for actual values consult the limits defined by your specific model.</p>"
+        },
+        "stopSequences":{
+          "shape":"RAGStopSequences",
+          "documentation":"<p>A list of sequences of characters that, if generated, will cause the model to stop generating further tokens. Do not use a minimum length of 1 or a maximum length of 1000. The limit values described here are arbitary values, for actual values consult the limits defined by your specific model.</p>"
         }
       },
       "documentation":"<p>Configuration settings for text generation using a language model via the RetrieveAndGenerate operation. Includes parameters like temperature, top-p, maximum token count, and stop sequences. </p> <note> <p>The valid range of <code>maxTokens</code> depends on the accepted values for your chosen model's inference parameters. To see the inference parameters for your model, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters for foundation models.</a> </p> </note>"
@@ -5380,13 +8102,13 @@
     "TextResponsePart":{
       "type":"structure",
       "members":{
-        "span":{
-          "shape":"Span",
-          "documentation":"<p>Contains information about where the text with a citation begins and ends in the generated output.</p>"
-        },
         "text":{
           "shape":"String",
           "documentation":"<p>The part of the generated text that contains a citation.</p>"
+        },
+        "span":{
+          "shape":"Span",
+          "documentation":"<p>Contains information about where the text with a citation begins and ends in the generated output.</p>"
         }
       },
       "documentation":"<p>Contains the part of the generated text that contains a citation, alongside where it begins and ends.</p> <p>This data type is used in the following API operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html#API_agent-runtime_RetrieveAndGenerate_ResponseSyntax\">RetrieveAndGenerate response</a> – in the <code>textResponsePart</code> field</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html#API_agent-runtime_InvokeAgent_ResponseSyntax\">InvokeAgent response</a> – in the <code>textResponsePart</code> field</p> </li> </ul>",
@@ -5396,13 +8118,13 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "knowledgeBaseConfiguration":{
-          "shape":"TextToSqlKnowledgeBaseConfiguration",
-          "documentation":"<p>Specifies configurations for a knowledge base to use in transformation.</p>"
-        },
         "type":{
           "shape":"TextToSqlConfigurationType",
           "documentation":"<p>The type of resource to use in transformation.</p>"
+        },
+        "knowledgeBaseConfiguration":{
+          "shape":"TextToSqlKnowledgeBaseConfiguration",
+          "documentation":"<p>Specifies configurations for a knowledge base to use in transformation.</p>"
         }
       },
       "documentation":"<p>Contains configurations for transforming text to SQL.</p>"
@@ -5449,18 +8171,14 @@
     "Trace":{
       "type":"structure",
       "members":{
-        "customOrchestrationTrace":{
-          "shape":"CustomOrchestrationTrace",
-          "documentation":"<p> Details about the custom orchestration step in which the agent determines the order in which actions are executed. </p>"
-        },
-        "failureTrace":{
-          "shape":"FailureTrace",
-          "documentation":"<p>Contains information about the failure of the interaction.</p>"
-        },
         "guardrailTrace":{
           "shape":"GuardrailTrace",
           "documentation":"<p>The trace details for a trace defined in the Guardrail filter.</p>"
         },
+        "preProcessingTrace":{
+          "shape":"PreProcessingTrace",
+          "documentation":"<p>Details about the pre-processing step, in which the agent contextualizes and categorizes user inputs.</p>"
+        },
         "orchestrationTrace":{
           "shape":"OrchestrationTrace",
           "documentation":"<p>Details about the orchestration step, in which the agent determines the order in which actions are executed and which knowledge bases are retrieved.</p>"
@@ -5469,19 +8187,35 @@
           "shape":"PostProcessingTrace",
           "documentation":"<p>Details about the post-processing step, in which the agent shapes the response..</p>"
         },
-        "preProcessingTrace":{
-          "shape":"PreProcessingTrace",
-          "documentation":"<p>Details about the pre-processing step, in which the agent contextualizes and categorizes user inputs.</p>"
-        },
         "routingClassifierTrace":{
           "shape":"RoutingClassifierTrace",
           "documentation":"<p>A routing classifier's trace.</p>"
+        },
+        "failureTrace":{
+          "shape":"FailureTrace",
+          "documentation":"<p>Contains information about the failure of the interaction.</p>"
+        },
+        "customOrchestrationTrace":{
+          "shape":"CustomOrchestrationTrace",
+          "documentation":"<p> Details about the custom orchestration step in which the agent determines the order in which actions are executed. </p>"
         }
       },
       "documentation":"<p>Contains one part of the agent's reasoning process and results from calling API actions and querying knowledge bases. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>.</p>",
       "sensitive":true,
       "union":true
     },
+    "TraceElements":{
+      "type":"structure",
+      "members":{
+        "agentTraces":{
+          "shape":"AgentTraces",
+          "documentation":"<p>Agent trace information for the flow execution.</p>"
+        }
+      },
+      "documentation":"<p>Contains trace elements for flow execution tracking.</p>",
+      "sensitive":true,
+      "union":true
+    },
     "TraceId":{
       "type":"string",
       "max":16,
@@ -5494,33 +8228,37 @@
     "TracePart":{
       "type":"structure",
       "members":{
-        "agentAliasId":{
-          "shape":"AgentAliasId",
-          "documentation":"<p>The unique identifier of the alias of the agent.</p>"
-        },
-        "agentId":{
-          "shape":"AgentId",
-          "documentation":"<p>The unique identifier of the agent.</p>"
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session with the agent.</p>"
         },
-        "agentVersion":{
-          "shape":"AgentVersion",
-          "documentation":"<p>The version of the agent.</p>"
+        "trace":{
+          "shape":"Trace",
+          "documentation":"<p>Contains one part of the agent's reasoning process and results from calling API actions and querying knowledge bases. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>.</p>"
         },
         "callerChain":{
           "shape":"CallerChain",
           "documentation":"<p>The part's caller chain.</p>"
         },
+        "eventTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The time of the trace. </p>"
+        },
         "collaboratorName":{
           "shape":"Name",
           "documentation":"<p>The part's collaborator name.</p>"
         },
-        "sessionId":{
-          "shape":"SessionId",
-          "documentation":"<p>The unique identifier of the session with the agent.</p>"
+        "agentId":{
+          "shape":"AgentId",
+          "documentation":"<p>The unique identifier of the agent.</p>"
         },
-        "trace":{
-          "shape":"Trace",
-          "documentation":"<p>Contains one part of the agent's reasoning process and results from calling API actions and querying knowledge bases. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>.</p>"
+        "agentAliasId":{
+          "shape":"AgentAliasId",
+          "documentation":"<p>The unique identifier of the alias of the agent.</p>"
+        },
+        "agentVersion":{
+          "shape":"AgentVersion",
+          "documentation":"<p>The version of the agent.</p>"
         }
       },
       "documentation":"<p>Contains information about the agent and session, alongside the agent's reasoning process and results from calling API actions and querying knowledge bases and metadata about the trace. You can use the trace to understand how the agent arrived at the response it provided the customer. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html#trace-enablement\">Trace enablement</a>.</p>",
@@ -5553,6 +8291,79 @@
         "REPROMPT"
       ]
     },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource from which to remove tags.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of keys of the tags to remove from the resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateSessionRequest":{
+      "type":"structure",
+      "required":["sessionIdentifier"],
+      "members":{
+        "sessionMetadata":{
+          "shape":"SessionMetadataMap",
+          "documentation":"<p>A map of key-value pairs containing attributes to be persisted across the session. For example the user's ID, their language preference, and the type of device they are using.</p>"
+        },
+        "sessionIdentifier":{
+          "shape":"SessionIdentifier",
+          "documentation":"<p>The unique identifier of the session to modify. You can specify either the session's <code>sessionId</code> or its Amazon Resource Name (ARN).</p>",
+          "location":"uri",
+          "locationName":"sessionIdentifier"
+        }
+      }
+    },
+    "UpdateSessionResponse":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "sessionArn",
+        "sessionStatus",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The unique identifier of the session you updated.</p>"
+        },
+        "sessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the session that was updated.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>The status of the session you updated.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp for when the session was last modified.</p>"
+        }
+      }
+    },
     "Usage":{
       "type":"structure",
       "members":{
@@ -5568,6 +8379,10 @@
       "documentation":"<p>Contains information of the usage of the foundation model.</p>",
       "sensitive":true
     },
+    "Uuid":{
+      "type":"string",
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -5584,10 +8399,6 @@
       "type":"structure",
       "required":["modelConfiguration"],
       "members":{
-        "metadataConfiguration":{
-          "shape":"MetadataConfigurationForReranking",
-          "documentation":"<p>Contains configurations for the metadata to use in reranking.</p>"
-        },
         "modelConfiguration":{
           "shape":"VectorSearchBedrockRerankingModelConfiguration",
           "documentation":"<p>Contains configurations for the reranker model.</p>"
@@ -5595,6 +8406,10 @@
         "numberOfRerankedResults":{
           "shape":"VectorSearchBedrockRerankingConfigurationNumberOfRerankedResultsInteger",
           "documentation":"<p>The number of results to return after reranking.</p>"
+        },
+        "metadataConfiguration":{
+          "shape":"MetadataConfigurationForReranking",
+          "documentation":"<p>Contains configurations for the metadata to use in reranking.</p>"
         }
       },
       "documentation":"<p>Contains configurations for reranking with an Amazon Bedrock reranker model.</p>"
@@ -5609,13 +8424,13 @@
       "type":"structure",
       "required":["modelArn"],
       "members":{
-        "additionalModelRequestFields":{
-          "shape":"AdditionalModelRequestFields",
-          "documentation":"<p>A JSON object whose keys are request fields for the model and whose values are values for those fields.</p>"
-        },
         "modelArn":{
           "shape":"BedrockRerankingModelArn",
           "documentation":"<p>The ARN of the reranker model to use.</p>"
+        },
+        "additionalModelRequestFields":{
+          "shape":"AdditionalModelRequestFields",
+          "documentation":"<p>A JSON object whose keys are request fields for the model and whose values are values for those fields.</p>"
         }
       },
       "documentation":"<p>Contains configurations for an Amazon Bedrock reranker model.</p>"
@@ -5624,13 +8439,13 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "bedrockRerankingConfiguration":{
-          "shape":"VectorSearchBedrockRerankingConfiguration",
-          "documentation":"<p>Contains configurations for an Amazon Bedrock reranker model.</p>"
-        },
         "type":{
           "shape":"VectorSearchRerankingConfigurationType",
           "documentation":"<p>The type of reranker model.</p>"
+        },
+        "bedrockRerankingConfiguration":{
+          "shape":"VectorSearchBedrockRerankingConfiguration",
+          "documentation":"<p>Contains configurations for an Amazon Bedrock reranker model.</p>"
         }
       },
       "documentation":"<p>Contains configurations for reranking the retrieved results.</p>"
@@ -5642,6 +8457,12 @@
     "Verb":{
       "type":"string",
       "sensitive":true
+    },
+    "Version":{
+      "type":"string",
+      "max":5,
+      "min":1,
+      "pattern":"(DRAFT|[0-9]{0,4}[1-9][0-9]{0,4})"
     }
   },
   "documentation":"<p>Contains APIs related to model invocation and querying of knowledge bases.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/waiters-2.json 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agent-runtime/2023-07-26/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://bedrock-agentcore.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/paginators-1.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,34 @@
+{
+  "pagination": {
+    "ListActors": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "actorSummaries"
+    },
+    "ListEvents": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "events"
+    },
+    "ListMemoryRecords": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "memoryRecordSummaries"
+    },
+    "ListSessions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "sessionSummaries"
+    },
+    "RetrieveMemoryRecords": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "memoryRecordSummaries"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,3747 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2024-02-28",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"bedrock-agentcore",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"Amazon Bedrock AgentCore",
+    "serviceId":"Bedrock AgentCore",
+    "signatureVersion":"v4",
+    "signingName":"bedrock-agentcore",
+    "uid":"bedrock-agentcore-2024-02-28"
+  },
+  "operations":{
+    "BatchCreateMemoryRecords":{
+      "name":"BatchCreateMemoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/memoryRecords/batchCreate",
+        "responseCode":201
+      },
+      "input":{"shape":"BatchCreateMemoryRecordsInput"},
+      "output":{"shape":"BatchCreateMemoryRecordsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Creates multiple memory records in a single batch operation for the specified memory with custom content.</p>",
+      "idempotent":true
+    },
+    "BatchDeleteMemoryRecords":{
+      "name":"BatchDeleteMemoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/memoryRecords/batchDelete",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchDeleteMemoryRecordsInput"},
+      "output":{"shape":"BatchDeleteMemoryRecordsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Deletes multiple memory records in a single batch operation from the specified memory.</p>"
+    },
+    "BatchUpdateMemoryRecords":{
+      "name":"BatchUpdateMemoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/memoryRecords/batchUpdate",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchUpdateMemoryRecordsInput"},
+      "output":{"shape":"BatchUpdateMemoryRecordsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Updates multiple memory records with custom content in a single batch operation within the specified memory.</p>"
+    },
+    "CompleteResourceTokenAuth":{
+      "name":"CompleteResourceTokenAuth",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/CompleteResourceTokenAuth",
+        "responseCode":200
+      },
+      "input":{"shape":"CompleteResourceTokenAuthRequest"},
+      "output":{"shape":"CompleteResourceTokenAuthResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Confirms the user authentication session for obtaining OAuth2.0 tokens for a resource.</p>"
+    },
+    "CreateEvent":{
+      "name":"CreateEvent",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/events",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateEventInput"},
+      "output":{"shape":"CreateEventOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Creates an event in an AgentCore Memory resource. Events represent interactions or activities that occur within a session and are associated with specific actors.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:CreateEvent</code> permission.</p> <p>This operation is subject to request rate limiting.</p>",
+      "idempotent":true
+    },
+    "DeleteEvent":{
+      "name":"DeleteEvent",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/memories/{memoryId}/actor/{actorId}/sessions/{sessionId}/events/{eventId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteEventInput"},
+      "output":{"shape":"DeleteEventOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Deletes an event from an AgentCore Memory resource. When you delete an event, it is permanently removed.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:DeleteEvent</code> permission.</p>"
+    },
+    "DeleteMemoryRecord":{
+      "name":"DeleteMemoryRecord",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/memories/{memoryId}/memoryRecords/{memoryRecordId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteMemoryRecordInput"},
+      "output":{"shape":"DeleteMemoryRecordOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Deletes a memory record from an AgentCore Memory resource. When you delete a memory record, it is permanently removed.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:DeleteMemoryRecord</code> permission.</p>"
+    },
+    "GetAgentCard":{
+      "name":"GetAgentCard",
+      "http":{
+        "method":"GET",
+        "requestUri":"/runtimes/{agentRuntimeArn}/invocations/.well-known/agent-card.json",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAgentCardRequest"},
+      "output":{"shape":"GetAgentCardResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RuntimeClientError"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves the A2A agent card associated with an AgentCore Runtime agent.</p>"
+    },
+    "GetBrowserSession":{
+      "name":"GetBrowserSession",
+      "http":{
+        "method":"GET",
+        "requestUri":"/browsers/{browserIdentifier}/sessions/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetBrowserSessionRequest"},
+      "output":{"shape":"GetBrowserSessionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific browser session in Amazon Bedrock. This operation returns the session's configuration, current status, associated streams, and metadata.</p> <p>To get a browser session, you must specify both the browser identifier and the session ID. The response includes information about the session's viewport configuration, timeout settings, and stream endpoints.</p> <p>The following operations are related to <code>GetBrowserSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartBrowserSession.html\">StartBrowserSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_ListBrowserSessions.html\">ListBrowserSessions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StopBrowserSession.html\">StopBrowserSession</a> </p> </li> </ul>"
+    },
+    "GetCodeInterpreterSession":{
+      "name":"GetCodeInterpreterSession",
+      "http":{
+        "method":"GET",
+        "requestUri":"/code-interpreters/{codeInterpreterIdentifier}/sessions/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCodeInterpreterSessionRequest"},
+      "output":{"shape":"GetCodeInterpreterSessionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific code interpreter session in Amazon Bedrock. This operation returns the session's configuration, current status, and metadata.</p> <p>To get a code interpreter session, you must specify both the code interpreter identifier and the session ID. The response includes information about the session's timeout settings and current status.</p> <p>The following operations are related to <code>GetCodeInterpreterSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartCodeInterpreterSession.html\">StartCodeInterpreterSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_ListCodeInterpreterSessions.html\">ListCodeInterpreterSessions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StopCodeInterpreterSession.html\">StopCodeInterpreterSession</a> </p> </li> </ul>"
+    },
+    "GetEvent":{
+      "name":"GetEvent",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memories/{memoryId}/actor/{actorId}/sessions/{sessionId}/events/{eventId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetEventInput"},
+      "output":{"shape":"GetEventOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Retrieves information about a specific event in an AgentCore Memory resource.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:GetEvent</code> permission.</p>"
+    },
+    "GetMemoryRecord":{
+      "name":"GetMemoryRecord",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memories/{memoryId}/memoryRecord/{memoryRecordId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetMemoryRecordInput"},
+      "output":{"shape":"GetMemoryRecordOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Retrieves a specific memory record from an AgentCore Memory resource.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:GetMemoryRecord</code> permission.</p>"
+    },
+    "GetResourceApiKey":{
+      "name":"GetResourceApiKey",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/api-key",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResourceApiKeyRequest"},
+      "output":{"shape":"GetResourceApiKeyResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves the API key associated with an API key credential provider.</p>"
+    },
+    "GetResourceOauth2Token":{
+      "name":"GetResourceOauth2Token",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/oauth2/token",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResourceOauth2TokenRequest"},
+      "output":{"shape":"GetResourceOauth2TokenResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns the OAuth 2.0 token of the provided resource.</p>"
+    },
+    "GetWorkloadAccessToken":{
+      "name":"GetWorkloadAccessToken",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetWorkloadAccessToken",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWorkloadAccessTokenRequest"},
+      "output":{"shape":"GetWorkloadAccessTokenResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Obtains a workload access token for agentic workloads not acting on behalf of a user.</p>"
+    },
+    "GetWorkloadAccessTokenForJWT":{
+      "name":"GetWorkloadAccessTokenForJWT",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetWorkloadAccessTokenForJWT",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWorkloadAccessTokenForJWTRequest"},
+      "output":{"shape":"GetWorkloadAccessTokenForJWTResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Obtains a workload access token for agentic workloads acting on behalf of a user, using a JWT token.</p>"
+    },
+    "GetWorkloadAccessTokenForUserId":{
+      "name":"GetWorkloadAccessTokenForUserId",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetWorkloadAccessTokenForUserId",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWorkloadAccessTokenForUserIdRequest"},
+      "output":{"shape":"GetWorkloadAccessTokenForUserIdResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Obtains a workload access token for agentic workloads acting on behalf of a user, using the user's ID.</p>"
+    },
+    "InvokeAgentRuntime":{
+      "name":"InvokeAgentRuntime",
+      "http":{
+        "method":"POST",
+        "requestUri":"/runtimes/{agentRuntimeArn}/invocations",
+        "responseCode":200
+      },
+      "input":{"shape":"InvokeAgentRuntimeRequest"},
+      "output":{"shape":"InvokeAgentRuntimeResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RuntimeClientError"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Sends a request to an agent or tool hosted in an Amazon Bedrock AgentCore Runtime and receives responses in real-time. </p> <p>To invoke an agent you must specify the AgentCore Runtime ARN and provide a payload containing your request. You can optionally specify a qualifier to target a specific version or endpoint of the agent.</p> <p>This operation supports streaming responses, allowing you to receive partial responses as they become available. We recommend using pagination to ensure that the operation returns quickly and successfully when processing large responses.</p> <p>For example code, see <a href=\"https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-invoke-agent.html\">Invoke an AgentCore Runtime agent</a>. </p> <p>If you're integrating your agent with OAuth, you can't use the Amazon Web Services SDK to call <code>InvokeAgentRuntime</code>. Instead, make a HTTPS request to <code>InvokeAgentRuntime</code>. For an example, see <a href=\"https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-oauth.html\">Authenticate and authorize with Inbound Auth and Outbound Auth</a>.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:InvokeAgentRuntime</code> permission. If you are making a call to <code>InvokeAgentRuntime</code> on behalf of a user ID with the <code>X-Amzn-Bedrock-AgentCore-Runtime-User-Id</code> header, You require permissions to both actions (<code>bedrock-agentcore:InvokeAgentRuntime</code> and <code>bedrock-agentcore:InvokeAgentRuntimeForUser</code>). </p>"
+    },
+    "InvokeCodeInterpreter":{
+      "name":"InvokeCodeInterpreter",
+      "http":{
+        "method":"POST",
+        "requestUri":"/code-interpreters/{codeInterpreterIdentifier}/tools/invoke",
+        "responseCode":200
+      },
+      "input":{"shape":"InvokeCodeInterpreterRequest"},
+      "output":{"shape":"InvokeCodeInterpreterResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Executes code within an active code interpreter session in Amazon Bedrock. This operation processes the provided code, runs it in a secure environment, and returns the execution results including output, errors, and generated visualizations.</p> <p>To execute code, you must specify the code interpreter identifier, session ID, and the code to run in the arguments parameter. The operation returns a stream containing the execution results, which can include text output, error messages, and data visualizations.</p> <p>This operation is subject to request rate limiting based on your account's service quotas.</p> <p>The following operations are related to <code>InvokeCodeInterpreter</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartCodeInterpreterSession.html\">StartCodeInterpreterSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetCodeInterpreterSession.html\">GetCodeInterpreterSession</a> </p> </li> </ul>"
+    },
+    "ListActors":{
+      "name":"ListActors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/actors",
+        "responseCode":200
+      },
+      "input":{"shape":"ListActorsInput"},
+      "output":{"shape":"ListActorsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Lists all actors in an AgentCore Memory resource. We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:ListActors</code> permission.</p>"
+    },
+    "ListBrowserSessions":{
+      "name":"ListBrowserSessions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/browsers/{browserIdentifier}/sessions/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListBrowserSessionsRequest"},
+      "output":{"shape":"ListBrowserSessionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves a list of browser sessions in Amazon Bedrock that match the specified criteria. This operation returns summary information about each session, including identifiers, status, and timestamps.</p> <p>You can filter the results by browser identifier and session status. The operation supports pagination to handle large result sets efficiently.</p> <p>We recommend using pagination to ensure that the operation returns quickly and successfully when retrieving large numbers of sessions.</p> <p>The following operations are related to <code>ListBrowserSessions</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartBrowserSession.html\">StartBrowserSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetBrowserSession.html\">GetBrowserSession</a> </p> </li> </ul>"
+    },
+    "ListCodeInterpreterSessions":{
+      "name":"ListCodeInterpreterSessions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/code-interpreters/{codeInterpreterIdentifier}/sessions/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCodeInterpreterSessionsRequest"},
+      "output":{"shape":"ListCodeInterpreterSessionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves a list of code interpreter sessions in Amazon Bedrock that match the specified criteria. This operation returns summary information about each session, including identifiers, status, and timestamps.</p> <p>You can filter the results by code interpreter identifier and session status. The operation supports pagination to handle large result sets efficiently.</p> <p>We recommend using pagination to ensure that the operation returns quickly and successfully when retrieving large numbers of sessions.</p> <p>The following operations are related to <code>ListCodeInterpreterSessions</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartCodeInterpreterSession.html\">StartCodeInterpreterSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetCodeInterpreterSession.html\">GetCodeInterpreterSession</a> </p> </li> </ul>"
+    },
+    "ListEvents":{
+      "name":"ListEvents",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/actor/{actorId}/sessions/{sessionId}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListEventsInput"},
+      "output":{"shape":"ListEventsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Lists events in an AgentCore Memory resource based on specified criteria. We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:ListEvents</code> permission.</p>"
+    },
+    "ListMemoryRecords":{
+      "name":"ListMemoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/memoryRecords",
+        "responseCode":200
+      },
+      "input":{"shape":"ListMemoryRecordsInput"},
+      "output":{"shape":"ListMemoryRecordsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Lists memory records in an AgentCore Memory resource based on specified criteria. We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:ListMemoryRecords</code> permission.</p>"
+    },
+    "ListSessions":{
+      "name":"ListSessions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/actor/{actorId}/sessions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSessionsInput"},
+      "output":{"shape":"ListSessionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Lists sessions in an AgentCore Memory resource based on specified criteria. We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:ListSessions</code> permission.</p>"
+    },
+    "RetrieveMemoryRecords":{
+      "name":"RetrieveMemoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/{memoryId}/retrieve",
+        "responseCode":200
+      },
+      "input":{"shape":"RetrieveMemoryRecordsInput"},
+      "output":{"shape":"RetrieveMemoryRecordsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Searches for and retrieves memory records from an AgentCore Memory resource based on specified search criteria. We recommend using pagination to ensure that the operation returns quickly and successfully.</p> <p>To use this operation, you must have the <code>bedrock-agentcore:RetrieveMemoryRecords</code> permission.</p>"
+    },
+    "StartBrowserSession":{
+      "name":"StartBrowserSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/browsers/{browserIdentifier}/sessions/start",
+        "responseCode":200
+      },
+      "input":{"shape":"StartBrowserSessionRequest"},
+      "output":{"shape":"StartBrowserSessionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates and initializes a browser session in Amazon Bedrock. The session enables agents to navigate and interact with web content, extract information from websites, and perform web-based tasks as part of their response generation.</p> <p>To create a session, you must specify a browser identifier and a name. You can also configure the viewport dimensions to control the visible area of web content. The session remains active until it times out or you explicitly stop it using the <code>StopBrowserSession</code> operation.</p> <p>The following operations are related to <code>StartBrowserSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetBrowserSession.html\">GetBrowserSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_UpdateBrowserStream.html\">UpdateBrowserStream</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StopBrowserSession.html\">StopBrowserSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "StartCodeInterpreterSession":{
+      "name":"StartCodeInterpreterSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/code-interpreters/{codeInterpreterIdentifier}/sessions/start",
+        "responseCode":200
+      },
+      "input":{"shape":"StartCodeInterpreterSessionRequest"},
+      "output":{"shape":"StartCodeInterpreterSessionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates and initializes a code interpreter session in Amazon Bedrock. The session enables agents to execute code as part of their response generation, supporting programming languages such as Python for data analysis, visualization, and computation tasks.</p> <p>To create a session, you must specify a code interpreter identifier and a name. The session remains active until it times out or you explicitly stop it using the <code>StopCodeInterpreterSession</code> operation.</p> <p>The following operations are related to <code>StartCodeInterpreterSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_InvokeCodeInterpreter.html\">InvokeCodeInterpreter</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetCodeInterpreterSession.html\">GetCodeInterpreterSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StopCodeInterpreterSession.html\">StopCodeInterpreterSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "StopBrowserSession":{
+      "name":"StopBrowserSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/browsers/{browserIdentifier}/sessions/stop",
+        "responseCode":200
+      },
+      "input":{"shape":"StopBrowserSessionRequest"},
+      "output":{"shape":"StopBrowserSessionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Terminates an active browser session in Amazon Bedrock. This operation stops the session, releases associated resources, and makes the session unavailable for further use.</p> <p>To stop a browser session, you must specify both the browser identifier and the session ID. Once stopped, a session cannot be restarted; you must create a new session using <code>StartBrowserSession</code>.</p> <p>The following operations are related to <code>StopBrowserSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartBrowserSession.html\">StartBrowserSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetBrowserSession.html\">GetBrowserSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "StopCodeInterpreterSession":{
+      "name":"StopCodeInterpreterSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/code-interpreters/{codeInterpreterIdentifier}/sessions/stop",
+        "responseCode":200
+      },
+      "input":{"shape":"StopCodeInterpreterSessionRequest"},
+      "output":{"shape":"StopCodeInterpreterSessionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Terminates an active code interpreter session in Amazon Bedrock. This operation stops the session, releases associated resources, and makes the session unavailable for further use.</p> <p>To stop a code interpreter session, you must specify both the code interpreter identifier and the session ID. Once stopped, a session cannot be restarted; you must create a new session using <code>StartCodeInterpreterSession</code>.</p> <p>The following operations are related to <code>StopCodeInterpreterSession</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/API_StartCodeInterpreterSession.html\">StartCodeInterpreterSession</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/API_GetCodeInterpreterSession.html\">GetCodeInterpreterSession</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "StopRuntimeSession":{
+      "name":"StopRuntimeSession",
+      "http":{
+        "method":"POST",
+        "requestUri":"/runtimes/{agentRuntimeArn}/stopruntimesession",
+        "responseCode":200
+      },
+      "input":{"shape":"StopRuntimeSessionRequest"},
+      "output":{"shape":"StopRuntimeSessionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"RuntimeClientError"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Stops a session that is running in an running AgentCore Runtime agent.</p>",
+      "idempotent":true
+    },
+    "UpdateBrowserStream":{
+      "name":"UpdateBrowserStream",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/browsers/{browserIdentifier}/sessions/streams/update",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateBrowserStreamRequest"},
+      "output":{"shape":"UpdateBrowserStreamResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates a browser stream. To use this operation, you must have permissions to perform the bedrock:UpdateBrowserStream action.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when you do not have sufficient permissions to perform an action. Verify that your IAM policy includes the necessary permissions for the operation you are trying to perform.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AccessTokenType":{
+      "type":"string",
+      "max":131072,
+      "min":1,
+      "sensitive":true
+    },
+    "ActorId":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-_/]*(?::[a-zA-Z0-9-_/]+)*[a-zA-Z0-9-_/]*"
+    },
+    "ActorSummary":{
+      "type":"structure",
+      "required":["actorId"],
+      "members":{
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The unique identifier of the actor.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about an actor in an AgentCore Memory resource.</p>"
+    },
+    "ActorSummaryList":{
+      "type":"list",
+      "member":{"shape":"ActorSummary"}
+    },
+    "AgentCard":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "ApiKeyType":{
+      "type":"string",
+      "max":65536,
+      "min":1,
+      "sensitive":true
+    },
+    "AuthorizationUrlType":{
+      "type":"string",
+      "min":1,
+      "sensitive":true
+    },
+    "AutomationStream":{
+      "type":"structure",
+      "required":[
+        "streamEndpoint",
+        "streamStatus"
+      ],
+      "members":{
+        "streamEndpoint":{
+          "shape":"BrowserStreamEndpoint",
+          "documentation":"<p>The endpoint URL for the automation stream. This URL is used to establish a WebSocket connection to the stream for sending commands and receiving responses.</p>"
+        },
+        "streamStatus":{
+          "shape":"AutomationStreamStatus",
+          "documentation":"<p>The current status of the automation stream. This indicates whether the stream is available for use. Possible values include ACTIVE, CONNECTING, and DISCONNECTED.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a stream that enables programmatic control of a browser session in Amazon Bedrock. This stream provides a bidirectional communication channel for sending commands to the browser and receiving responses, allowing agents to automate web interactions such as navigation, form filling, and element clicking.</p>"
+    },
+    "AutomationStreamStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "AutomationStreamUpdate":{
+      "type":"structure",
+      "members":{
+        "streamStatus":{
+          "shape":"AutomationStreamStatus",
+          "documentation":"<p>The status of the automation stream.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an update to an automation stream.</p>"
+    },
+    "BatchCreateMemoryRecordsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "records"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique ID of the memory resource where records will be created.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "records":{
+          "shape":"MemoryRecordsCreateInputList",
+          "documentation":"<p>A list of memory record creation inputs to be processed in the batch operation.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotent processing of the batch request.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "BatchCreateMemoryRecordsOutput":{
+      "type":"structure",
+      "required":[
+        "successfulRecords",
+        "failedRecords"
+      ],
+      "members":{
+        "successfulRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that were successfully created during the batch operation.</p>"
+        },
+        "failedRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that failed to be created, including error details for each failure.</p>"
+        }
+      }
+    },
+    "BatchDeleteMemoryRecordsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "records"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique ID of the memory resource where records will be deleted.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "records":{
+          "shape":"MemoryRecordsDeleteInputList",
+          "documentation":"<p>A list of memory record deletion inputs to be processed in the batch operation.</p>"
+        }
+      }
+    },
+    "BatchDeleteMemoryRecordsOutput":{
+      "type":"structure",
+      "required":[
+        "successfulRecords",
+        "failedRecords"
+      ],
+      "members":{
+        "successfulRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that were successfully deleted during the batch operation.</p>"
+        },
+        "failedRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that failed to be deleted, including error details for each failure.</p>"
+        }
+      }
+    },
+    "BatchUpdateMemoryRecordsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "records"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique ID of the memory resource where records will be updated.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "records":{
+          "shape":"MemoryRecordsUpdateInputList",
+          "documentation":"<p>A list of memory record update inputs to be processed in the batch operation.</p>"
+        }
+      }
+    },
+    "BatchUpdateMemoryRecordsOutput":{
+      "type":"structure",
+      "required":[
+        "successfulRecords",
+        "failedRecords"
+      ],
+      "members":{
+        "successfulRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that were successfully updated during the batch operation.</p>"
+        },
+        "failedRecords":{
+          "shape":"MemoryRecordsOutputList",
+          "documentation":"<p>A list of memory records that failed to be updated, including error details for each failure.</p>"
+        }
+      }
+    },
+    "Blob":{"type":"blob"},
+    "Body":{
+      "type":"blob",
+      "max":100000000,
+      "min":0,
+      "sensitive":true
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "Branch":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "rootEventId":{
+          "shape":"EventId",
+          "documentation":"<p>The identifier of the root event for this branch.</p>"
+        },
+        "name":{
+          "shape":"BranchName",
+          "documentation":"<p>The name of the branch.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a branch in an AgentCore Memory resource. Branches allow for organizing events into different conversation threads or paths.</p>"
+    },
+    "BranchFilter":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"BranchName",
+          "documentation":"<p>The name of the branch to filter by.</p>"
+        },
+        "includeParentBranches":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to include parent branches in the results. Set to true to include parent branches, or false to exclude them.</p>"
+        }
+      },
+      "documentation":"<p>Contains filter criteria for branches when listing events.</p>"
+    },
+    "BranchName":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-_]*"
+    },
+    "BrowserSessionId":{
+      "type":"string",
+      "pattern":"[0-9a-zA-Z]{1,40}"
+    },
+    "BrowserSessionStatus":{
+      "type":"string",
+      "enum":[
+        "READY",
+        "TERMINATED"
+      ]
+    },
+    "BrowserSessionStream":{
+      "type":"structure",
+      "required":["automationStream"],
+      "members":{
+        "automationStream":{
+          "shape":"AutomationStream",
+          "documentation":"<p>The stream that enables programmatic control of the browser. This stream allows agents to perform actions such as navigating to URLs, clicking elements, and filling forms.</p>"
+        },
+        "liveViewStream":{
+          "shape":"LiveViewStream",
+          "documentation":"<p>The stream that provides a visual representation of the browser content. This stream allows agents to observe the current state of the browser, including rendered web pages and visual elements.</p>"
+        }
+      },
+      "documentation":"<p>The collection of streams associated with a browser session in Amazon Bedrock. These streams provide different ways to interact with and observe the browser session, including programmatic control and visual representation of the browser content.</p>"
+    },
+    "BrowserSessionSummaries":{
+      "type":"list",
+      "member":{"shape":"BrowserSessionSummary"}
+    },
+    "BrowserSessionSummary":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the browser associated with the session. This identifier specifies which browser environment is used for the session.</p>"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The unique identifier of the browser session. This identifier is used in operations that interact with the session.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the browser session. This name helps identify and manage the session.</p>"
+        },
+        "status":{
+          "shape":"BrowserSessionStatus",
+          "documentation":"<p>The current status of the browser session. Possible values include ACTIVE, STOPPING, and STOPPED.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser session was created. This value is in ISO 8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser session was last updated. This value is in ISO 8601 format.</p>"
+        }
+      },
+      "documentation":"<p>A condensed representation of a browser session in Amazon Bedrock. This structure contains key information about a browser session, including identifiers, status, and timestamps, without the full details of the session configuration and streams.</p>"
+    },
+    "BrowserSessionTimeout":{
+      "type":"integer",
+      "box":true,
+      "max":28800,
+      "min":1
+    },
+    "BrowserStreamEndpoint":{
+      "type":"string",
+      "max":512,
+      "min":10
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":256,
+      "min":33,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,256}"
+    },
+    "CodeInterpreterResult":{
+      "type":"structure",
+      "required":["content"],
+      "members":{
+        "content":{
+          "shape":"ContentBlockList",
+          "documentation":"<p>The textual content of the execution result. This includes standard output from the code execution, such as print statements, console output, and text representations of results.</p>"
+        },
+        "structuredContent":{
+          "shape":"ToolResultStructuredContent",
+          "documentation":"<p>The structured content of the execution result. This includes additional metadata about the execution, such as execution time, memory usage, and structured representations of output data. The format depends on the specific code interpreter and execution context.</p>"
+        },
+        "isError":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the result represents an error. If true, the content contains error messages or exception information. If false, the content contains successful execution results.</p>"
+        }
+      },
+      "documentation":"<p>The output produced by executing code in a code interpreter session in Amazon Bedrock. This structure contains the results of code execution, including textual output, structured data, and error information. Agents use these results to generate responses that incorporate computation, data analysis, and visualization.</p>",
+      "event":true
+    },
+    "CodeInterpreterSessionId":{
+      "type":"string",
+      "pattern":"[0-9a-zA-Z]{1,40}"
+    },
+    "CodeInterpreterSessionStatus":{
+      "type":"string",
+      "enum":[
+        "READY",
+        "TERMINATED"
+      ]
+    },
+    "CodeInterpreterSessionSummaries":{
+      "type":"list",
+      "member":{"shape":"CodeInterpreterSessionSummary"}
+    },
+    "CodeInterpreterSessionSummary":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter associated with the session. This identifier specifies which code interpreter environment is used for the session.</p>"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The unique identifier of the code interpreter session. This identifier is used in operations that interact with the session.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the code interpreter session. This name helps identify and manage the session.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterSessionStatus",
+          "documentation":"<p>The current status of the code interpreter session. Possible values include ACTIVE, STOPPING, and STOPPED.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter session was created. This value is in ISO 8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter session was last updated. This value is in ISO 8601 format.</p>"
+        }
+      },
+      "documentation":"<p>A condensed representation of a code interpreter session in Amazon Bedrock. This structure contains key information about a code interpreter session, including identifiers, status, and timestamps, without the full details of the session configuration.</p>"
+    },
+    "CodeInterpreterSessionTimeout":{
+      "type":"integer",
+      "box":true,
+      "max":28800,
+      "min":1
+    },
+    "CodeInterpreterStreamOutput":{
+      "type":"structure",
+      "members":{
+        "result":{"shape":"CodeInterpreterResult"},
+        "accessDeniedException":{"shape":"AccessDeniedException"},
+        "conflictException":{"shape":"ConflictException"},
+        "internalServerException":{"shape":"InternalServerException"},
+        "resourceNotFoundException":{"shape":"ResourceNotFoundException"},
+        "serviceQuotaExceededException":{"shape":"ServiceQuotaExceededException"},
+        "throttlingException":{"shape":"ThrottlingException"},
+        "validationException":{"shape":"ValidationException"}
+      },
+      "documentation":"<p>Contains output from a code interpreter stream.</p>",
+      "eventstream":true
+    },
+    "CompleteResourceTokenAuthRequest":{
+      "type":"structure",
+      "required":[
+        "userIdentifier",
+        "sessionUri"
+      ],
+      "members":{
+        "userIdentifier":{
+          "shape":"UserIdentifier",
+          "documentation":"<p>The OAuth2.0 token or user ID that was used to generate the workload access token used for initiating the user authorization flow to retrieve OAuth2.0 tokens.</p>"
+        },
+        "sessionUri":{
+          "shape":"RequestUri",
+          "documentation":"<p>Unique identifier for the user's authentication session for retrieving OAuth2 tokens. This ID tracks the authorization flow state across multiple requests and responses during the OAuth2 authentication process.</p>"
+        }
+      }
+    },
+    "CompleteResourceTokenAuthResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when the request conflicts with the current state of the resource. This can happen when trying to modify a resource that is currently being modified by another request, or when trying to create a resource that already exists.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Content":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"ContentTextString",
+          "documentation":"<p>The text content of the memory item.</p>"
+        }
+      },
+      "documentation":"<p>Contains the content of a memory item.</p>",
+      "union":true
+    },
+    "ContentBlock":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ContentBlockType",
+          "documentation":"<p>The type of content in the block.</p>"
+        },
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text content of the block.</p>"
+        },
+        "data":{
+          "shape":"Blob",
+          "documentation":"<p>The binary data content of the block.</p>"
+        },
+        "mimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the content.</p>"
+        },
+        "uri":{
+          "shape":"String",
+          "documentation":"<p>The URI of the content.</p>"
+        },
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the content block.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of the content block.</p>"
+        },
+        "size":{
+          "shape":"Long",
+          "documentation":"<p>The size of the content in bytes.</p>"
+        },
+        "resource":{
+          "shape":"ResourceContent",
+          "documentation":"<p>The resource associated with the content block.</p>"
+        }
+      },
+      "documentation":"<p>A block of content in a response.</p>"
+    },
+    "ContentBlockList":{
+      "type":"list",
+      "member":{"shape":"ContentBlock"}
+    },
+    "ContentBlockType":{
+      "type":"string",
+      "enum":[
+        "text",
+        "image",
+        "resource",
+        "resource_link"
+      ]
+    },
+    "ContentTextString":{
+      "type":"string",
+      "max":9000,
+      "min":1,
+      "sensitive":true
+    },
+    "Conversational":{
+      "type":"structure",
+      "required":[
+        "content",
+        "role"
+      ],
+      "members":{
+        "content":{
+          "shape":"Content",
+          "documentation":"<p>The content of the conversation message.</p>"
+        },
+        "role":{
+          "shape":"Role",
+          "documentation":"<p>The role of the participant in the conversation (for example, \"user\" or \"assistant\").</p>"
+        }
+      },
+      "documentation":"<p>Contains conversational content for an event payload.</p>"
+    },
+    "CreateEventInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "actorId",
+        "eventTimestamp",
+        "payload"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource in which to create the event.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor associated with this event. An actor represents an entity that participates in sessions and generates events.</p>"
+        },
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the session in which this event occurs. A session represents a sequence of related events.</p>"
+        },
+        "eventTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the event occurred. If not specified, the current time is used.</p>"
+        },
+        "payload":{
+          "shape":"PayloadTypeList",
+          "documentation":"<p>The content payload of the event. This can include conversational data or binary content.</p>"
+        },
+        "branch":{
+          "shape":"Branch",
+          "documentation":"<p>The branch information for this event. Branches allow for organizing events into different conversation threads or paths.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, AgentCore ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "metadata":{
+          "shape":"MetadataMap",
+          "documentation":"<p>The key-value metadata to attach to the event.</p>"
+        }
+      }
+    },
+    "CreateEventOutput":{
+      "type":"structure",
+      "required":["event"],
+      "members":{
+        "event":{
+          "shape":"Event",
+          "documentation":"<p>The event that was created.</p>"
+        }
+      }
+    },
+    "CredentialProviderName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-_]+"
+    },
+    "CustomRequestKeyType":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-_\\.]+"
+    },
+    "CustomRequestParametersType":{
+      "type":"map",
+      "key":{"shape":"CustomRequestKeyType"},
+      "value":{"shape":"CustomRequestValueType"}
+    },
+    "CustomRequestValueType":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "sensitive":true
+    },
+    "DateTimestamp":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "DeleteEventInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "sessionId",
+        "eventId",
+        "actorId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource from which to delete the event.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the session containing the event to delete.</p>",
+          "location":"uri",
+          "locationName":"sessionId"
+        },
+        "eventId":{
+          "shape":"EventId",
+          "documentation":"<p>The identifier of the event to delete.</p>",
+          "location":"uri",
+          "locationName":"eventId"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor associated with the event to delete.</p>",
+          "location":"uri",
+          "locationName":"actorId"
+        }
+      }
+    },
+    "DeleteEventOutput":{
+      "type":"structure",
+      "required":["eventId"],
+      "members":{
+        "eventId":{
+          "shape":"EventId",
+          "documentation":"<p>The identifier of the event that was deleted.</p>"
+        }
+      }
+    },
+    "DeleteMemoryRecordInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "memoryRecordId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource from which to delete the memory record.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The identifier of the memory record to delete.</p>",
+          "location":"uri",
+          "locationName":"memoryRecordId"
+        }
+      }
+    },
+    "DeleteMemoryRecordOutput":{
+      "type":"structure",
+      "required":["memoryRecordId"],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The identifier of the memory record that was deleted.</p>"
+        }
+      }
+    },
+    "Document":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "Double":{
+      "type":"double",
+      "box":true
+    },
+    "Event":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "actorId",
+        "sessionId",
+        "eventId",
+        "eventTimestamp",
+        "payload"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource containing the event.</p>"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor associated with the event.</p>"
+        },
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the session containing the event.</p>"
+        },
+        "eventId":{
+          "shape":"EventId",
+          "documentation":"<p>The unique identifier of the event.</p>"
+        },
+        "eventTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the event occurred.</p>"
+        },
+        "payload":{
+          "shape":"PayloadTypeList",
+          "documentation":"<p>The content payload of the event.</p>"
+        },
+        "branch":{
+          "shape":"Branch",
+          "documentation":"<p>The branch information for the event.</p>"
+        },
+        "metadata":{
+          "shape":"MetadataMap",
+          "documentation":"<p>Metadata associated with an event.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an event in an AgentCore Memory resource.</p>"
+    },
+    "EventId":{
+      "type":"string",
+      "pattern":"[0-9]+#[a-fA-F0-9]+"
+    },
+    "EventList":{
+      "type":"list",
+      "member":{"shape":"Event"}
+    },
+    "EventMetadataFilterExpression":{
+      "type":"structure",
+      "required":[
+        "left",
+        "operator"
+      ],
+      "members":{
+        "left":{
+          "shape":"LeftExpression",
+          "documentation":"<p>Left operand of the event metadata filter expression.</p>"
+        },
+        "operator":{
+          "shape":"OperatorType",
+          "documentation":"<p>Operator applied to the event metadata filter expression.</p>"
+        },
+        "right":{
+          "shape":"RightExpression",
+          "documentation":"<p>Right operand of the event metadata filter expression.</p>"
+        }
+      },
+      "documentation":"<p>Filter expression for retrieving events based on metadata associated with an event.</p>"
+    },
+    "EventMetadataFilterList":{
+      "type":"list",
+      "member":{"shape":"EventMetadataFilterExpression"},
+      "max":5,
+      "min":1
+    },
+    "FilterInput":{
+      "type":"structure",
+      "members":{
+        "branch":{
+          "shape":"BranchFilter",
+          "documentation":"<p>The branch filter criteria to apply when listing events.</p>"
+        },
+        "eventMetadata":{
+          "shape":"EventMetadataFilterList",
+          "documentation":"<p>Event metadata filter criteria to apply when retrieving events.</p>"
+        }
+      },
+      "documentation":"<p>Contains filter criteria for listing events.</p>"
+    },
+    "GetAgentCardRequest":{
+      "type":"structure",
+      "required":["agentRuntimeArn"],
+      "members":{
+        "runtimeSessionId":{
+          "shape":"SessionType",
+          "documentation":"<p>The session ID that the AgentCore Runtime agent is using. </p>",
+          "idempotencyToken":true,
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "agentRuntimeArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the AgentCore Runtime agent for which you want to get the A2A agent card.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeArn"
+        },
+        "qualifier":{
+          "shape":"String",
+          "documentation":"<p>Optional qualifier to specify an agent alias, such as <code>prod</code>code&gt; or <code>dev</code>. If you don't provide a value, the DEFAULT alias is used. </p>",
+          "location":"querystring",
+          "locationName":"qualifier"
+        }
+      }
+    },
+    "GetAgentCardResponse":{
+      "type":"structure",
+      "required":["agentCard"],
+      "members":{
+        "runtimeSessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The ID of the session associated with the AgentCore Runtime agent.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "agentCard":{
+          "shape":"AgentCard",
+          "documentation":"<p>An agent card document that contains metadata and capabilities for an AgentCore Runtime agent.</p>"
+        },
+        "statusCode":{
+          "shape":"HttpResponseCode",
+          "documentation":"<p>The status code of the request.</p>",
+          "location":"statusCode"
+        }
+      },
+      "payload":"agentCard"
+    },
+    "GetBrowserSessionRequest":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the browser associated with the session.</p>",
+          "location":"uri",
+          "locationName":"browserIdentifier"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The unique identifier of the browser session to retrieve.</p>",
+          "location":"querystring",
+          "locationName":"sessionId"
+        }
+      }
+    },
+    "GetBrowserSessionResponse":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "createdAt"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the browser.</p>"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The identifier of the browser session.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the browser session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the browser session was created.</p>"
+        },
+        "viewPort":{"shape":"ViewPort"},
+        "sessionTimeoutSeconds":{
+          "shape":"BrowserSessionTimeout",
+          "documentation":"<p>The timeout period for the browser session in seconds.</p>"
+        },
+        "status":{
+          "shape":"BrowserSessionStatus",
+          "documentation":"<p>The current status of the browser session. Possible values include ACTIVE, STOPPING, and STOPPED.</p>"
+        },
+        "streams":{
+          "shape":"BrowserSessionStream",
+          "documentation":"<p>The streams associated with this browser session. These include the automation stream and live view stream.</p>"
+        },
+        "sessionReplayArtifact":{
+          "shape":"String",
+          "documentation":"<p>The artifact containing the session replay information.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the browser session was last updated.</p>"
+        }
+      }
+    },
+    "GetCodeInterpreterSessionRequest":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter associated with the session.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterIdentifier"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The unique identifier of the code interpreter session to retrieve.</p>",
+          "location":"querystring",
+          "locationName":"sessionId"
+        }
+      }
+    },
+    "GetCodeInterpreterSessionResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId",
+        "createdAt"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the code interpreter.</p>"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The identifier of the code interpreter session.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the code interpreter session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the code interpreter session was created.</p>"
+        },
+        "sessionTimeoutSeconds":{
+          "shape":"CodeInterpreterSessionTimeout",
+          "documentation":"<p>The timeout period for the code interpreter session in seconds.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterSessionStatus",
+          "documentation":"<p>The current status of the code interpreter session. Possible values include ACTIVE, STOPPING, and STOPPED.</p>"
+        }
+      }
+    },
+    "GetEventInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "sessionId",
+        "actorId",
+        "eventId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource containing the event.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the session containing the event.</p>",
+          "location":"uri",
+          "locationName":"sessionId"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor associated with the event.</p>",
+          "location":"uri",
+          "locationName":"actorId"
+        },
+        "eventId":{
+          "shape":"EventId",
+          "documentation":"<p>The identifier of the event to retrieve.</p>",
+          "location":"uri",
+          "locationName":"eventId"
+        }
+      }
+    },
+    "GetEventOutput":{
+      "type":"structure",
+      "required":["event"],
+      "members":{
+        "event":{
+          "shape":"Event",
+          "documentation":"<p>The requested event information.</p>"
+        }
+      }
+    },
+    "GetMemoryRecordInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "memoryRecordId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource containing the memory record.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The identifier of the memory record to retrieve.</p>",
+          "location":"uri",
+          "locationName":"memoryRecordId"
+        }
+      }
+    },
+    "GetMemoryRecordOutput":{
+      "type":"structure",
+      "required":["memoryRecord"],
+      "members":{
+        "memoryRecord":{
+          "shape":"MemoryRecord",
+          "documentation":"<p>The requested memory record.</p>"
+        }
+      }
+    },
+    "GetResourceApiKeyRequest":{
+      "type":"structure",
+      "required":[
+        "workloadIdentityToken",
+        "resourceCredentialProviderName"
+      ],
+      "members":{
+        "workloadIdentityToken":{
+          "shape":"WorkloadIdentityTokenType",
+          "documentation":"<p>The identity token of the workload from which you want to retrieve the API key.</p>"
+        },
+        "resourceCredentialProviderName":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The credential provider name for the resource from which you are retrieving the API key.</p>"
+        }
+      }
+    },
+    "GetResourceApiKeyResponse":{
+      "type":"structure",
+      "required":["apiKey"],
+      "members":{
+        "apiKey":{
+          "shape":"ApiKeyType",
+          "documentation":"<p>The API key associated with the resource requested.</p>"
+        }
+      }
+    },
+    "GetResourceOauth2TokenRequest":{
+      "type":"structure",
+      "required":[
+        "workloadIdentityToken",
+        "resourceCredentialProviderName",
+        "scopes",
+        "oauth2Flow"
+      ],
+      "members":{
+        "workloadIdentityToken":{
+          "shape":"WorkloadIdentityTokenType",
+          "documentation":"<p>The identity token of the workload from which you want to retrieve the OAuth2 token.</p>"
+        },
+        "resourceCredentialProviderName":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the resource's credential provider.</p>"
+        },
+        "scopes":{
+          "shape":"ScopesListType",
+          "documentation":"<p>The OAuth scopes being requested.</p>"
+        },
+        "oauth2Flow":{
+          "shape":"Oauth2FlowType",
+          "documentation":"<p>The type of flow to be performed.</p>"
+        },
+        "sessionUri":{
+          "shape":"RequestUri",
+          "documentation":"<p>Unique identifier for the user's authentication session for retrieving OAuth2 tokens. This ID tracks the authorization flow state across multiple requests and responses during the OAuth2 authentication process.</p>"
+        },
+        "resourceOauth2ReturnUrl":{
+          "shape":"ResourceOauth2ReturnUrlType",
+          "documentation":"<p>The callback URL to redirect to after the OAuth 2.0 token retrieval is complete. This URL must be one of the provided URLs configured for the workload identity.</p>"
+        },
+        "forceAuthentication":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to always initiate a new three-legged OAuth (3LO) flow, regardless of any existing session.</p>"
+        },
+        "customParameters":{
+          "shape":"CustomRequestParametersType",
+          "documentation":"<p>A map of custom parameters to include in the authorization request to the resource credential provider. These parameters are in addition to the standard OAuth 2.0 flow parameters, and will not override them.</p>"
+        },
+        "customState":{
+          "shape":"State",
+          "documentation":"<p>An opaque string that will be sent back to the callback URL provided in resourceOauth2ReturnUrl. This state should be used to protect the callback URL of your application against CSRF attacks by ensuring the response corresponds to the original request.</p>"
+        }
+      }
+    },
+    "GetResourceOauth2TokenResponse":{
+      "type":"structure",
+      "members":{
+        "authorizationUrl":{
+          "shape":"AuthorizationUrlType",
+          "documentation":"<p>The URL to initiate the authorization process, provided when the access token requires user authorization.</p>"
+        },
+        "accessToken":{
+          "shape":"AccessTokenType",
+          "documentation":"<p>The OAuth 2.0 access token to use.</p>"
+        },
+        "sessionUri":{
+          "shape":"RequestUri",
+          "documentation":"<p>Unique identifier for the user's authorization session for retrieving OAuth2 tokens. This matches the sessionId from the request and can be used to track the session state.</p>"
+        },
+        "sessionStatus":{
+          "shape":"SessionStatus",
+          "documentation":"<p>Status indicating whether the user's authorization session is in progress or has failed. This helps determine the next steps in the OAuth2 authentication flow.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenForJWTRequest":{
+      "type":"structure",
+      "required":[
+        "workloadName",
+        "userToken"
+      ],
+      "members":{
+        "workloadName":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The unique identifier for the registered workload.</p>"
+        },
+        "userToken":{
+          "shape":"UserTokenType",
+          "documentation":"<p>The OAuth 2.0 token issued by the user's identity provider.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenForJWTResponse":{
+      "type":"structure",
+      "required":["workloadAccessToken"],
+      "members":{
+        "workloadAccessToken":{
+          "shape":"WorkloadIdentityTokenType",
+          "documentation":"<p>An opaque token representing the identity of both the workload and the user.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenForUserIdRequest":{
+      "type":"structure",
+      "required":[
+        "workloadName",
+        "userId"
+      ],
+      "members":{
+        "workloadName":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload from which you want to retrieve the access token.</p>"
+        },
+        "userId":{
+          "shape":"UserIdType",
+          "documentation":"<p>The ID of the user for whom you are retrieving the access token.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenForUserIdResponse":{
+      "type":"structure",
+      "required":["workloadAccessToken"],
+      "members":{
+        "workloadAccessToken":{
+          "shape":"WorkloadIdentityTokenType",
+          "documentation":"<p>The access token for the specified workload.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenRequest":{
+      "type":"structure",
+      "required":["workloadName"],
+      "members":{
+        "workloadName":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The unique identifier for the registered workload.</p>"
+        }
+      }
+    },
+    "GetWorkloadAccessTokenResponse":{
+      "type":"structure",
+      "required":["workloadAccessToken"],
+      "members":{
+        "workloadAccessToken":{
+          "shape":"WorkloadIdentityTokenType",
+          "documentation":"<p>An opaque token representing the identity of both the workload and the user.</p>"
+        }
+      }
+    },
+    "HttpResponseCode":{
+      "type":"integer",
+      "box":true
+    },
+    "InputContentBlock":{
+      "type":"structure",
+      "required":["path"],
+      "members":{
+        "path":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The path to the input content.</p>"
+        },
+        "text":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The text input content.</p>"
+        },
+        "blob":{
+          "shape":"Body",
+          "documentation":"<p>The binary input content.</p>"
+        }
+      },
+      "documentation":"<p>A block of input content.</p>"
+    },
+    "InputContentBlockList":{
+      "type":"list",
+      "member":{"shape":"InputContentBlock"}
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when the service encounters an unexpected internal error. This is a temporary condition that will resolve itself with retries. We recommend implementing exponential backoff retry logic in your application.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "InvalidInputException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The input fails to satisfy the constraints specified by AgentCore. Check your input values and try again.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "InvokeAgentRuntimeRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeArn",
+        "payload"
+      ],
+      "members":{
+        "contentType":{
+          "shape":"MimeType",
+          "documentation":"<p>The MIME type of the input data in the payload. This tells the agent runtime how to interpret the payload data. Common values include application/json for JSON data.</p>",
+          "location":"header",
+          "locationName":"Content-Type"
+        },
+        "accept":{
+          "shape":"MimeType",
+          "documentation":"<p>The desired MIME type for the response from the agent runtime. This tells the agent runtime what format to use for the response data. Common values include application/json for JSON data.</p>",
+          "location":"header",
+          "locationName":"Accept"
+        },
+        "mcpSessionId":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the MCP session.</p>",
+          "location":"header",
+          "locationName":"Mcp-Session-Id"
+        },
+        "runtimeSessionId":{
+          "shape":"SessionType",
+          "documentation":"<p>The identifier of the runtime session.</p>",
+          "idempotencyToken":true,
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "mcpProtocolVersion":{
+          "shape":"StringType",
+          "documentation":"<p>The version of the MCP protocol being used.</p>",
+          "location":"header",
+          "locationName":"Mcp-Protocol-Version"
+        },
+        "runtimeUserId":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the runtime user.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-User-Id"
+        },
+        "traceId":{
+          "shape":"InvokeAgentRuntimeRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"InvokeAgentRuntimeRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "traceState":{
+          "shape":"InvokeAgentRuntimeRequestTraceStateString",
+          "documentation":"<p>The trace state information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"tracestate"
+        },
+        "baggage":{
+          "shape":"InvokeAgentRuntimeRequestBaggageString",
+          "documentation":"<p>Additional context information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"baggage"
+        },
+        "agentRuntimeArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Resource Name (ARN) of the agent runtime to invoke. The ARN uniquely identifies the agent runtime resource in Amazon Bedrock.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeArn"
+        },
+        "qualifier":{
+          "shape":"String",
+          "documentation":"<p>The qualifier to use for the agent runtime. This can be a version number or an endpoint name that points to a specific version. If not specified, Amazon Bedrock uses the default version of the agent runtime.</p>",
+          "location":"querystring",
+          "locationName":"qualifier"
+        },
+        "accountId":{
+          "shape":"InvokeAgentRuntimeRequestAccountIdString",
+          "documentation":"<p>The identifier of the Amazon Web Services account for the agent runtime resource.</p>",
+          "location":"querystring",
+          "locationName":"accountId"
+        },
+        "payload":{
+          "shape":"Body",
+          "documentation":"<p>The input data to send to the agent runtime. The format of this data depends on the specific agent configuration and must match the specified content type. For most agents, this is a JSON object containing the user's request.</p>"
+        }
+      },
+      "payload":"payload"
+    },
+    "InvokeAgentRuntimeRequestAccountIdString":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
+    "InvokeAgentRuntimeRequestBaggageString":{
+      "type":"string",
+      "max":8192,
+      "min":0
+    },
+    "InvokeAgentRuntimeRequestTraceIdString":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "InvokeAgentRuntimeRequestTraceParentString":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "InvokeAgentRuntimeRequestTraceStateString":{
+      "type":"string",
+      "max":512,
+      "min":0
+    },
+    "InvokeAgentRuntimeResponse":{
+      "type":"structure",
+      "required":["contentType"],
+      "members":{
+        "runtimeSessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the runtime session.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "mcpSessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the MCP session.</p>",
+          "location":"header",
+          "locationName":"Mcp-Session-Id"
+        },
+        "mcpProtocolVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the MCP protocol being used.</p>",
+          "location":"header",
+          "locationName":"Mcp-Protocol-Version"
+        },
+        "traceId":{
+          "shape":"String",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"String",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "traceState":{
+          "shape":"String",
+          "documentation":"<p>The trace state information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"tracestate"
+        },
+        "baggage":{
+          "shape":"String",
+          "documentation":"<p>Additional context information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"baggage"
+        },
+        "contentType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the response data. This indicates how to interpret the response data. Common values include application/json for JSON data.</p>",
+          "location":"header",
+          "locationName":"Content-Type"
+        },
+        "response":{
+          "shape":"ResponseStream",
+          "documentation":"<p>The response data from the agent runtime. The format of this data depends on the specific agent configuration and the requested accept type. For most agents, this is a JSON object containing the agent's response to the user's request.</p>"
+        },
+        "statusCode":{
+          "shape":"HttpResponseCode",
+          "documentation":"<p>The HTTP status code of the response. A status code of 200 indicates a successful operation. Other status codes indicate various error conditions.</p>",
+          "location":"statusCode"
+        }
+      },
+      "payload":"response"
+    },
+    "InvokeCodeInterpreterRequest":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "name"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter associated with the session. This must match the identifier used when creating the session with <code>StartCodeInterpreterSession</code>.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterIdentifier"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The unique identifier of the code interpreter session to use. This must be an active session created with <code>StartCodeInterpreterSession</code>. If the session has expired or been stopped, the request will fail.</p>",
+          "location":"header",
+          "locationName":"x-amzn-code-interpreter-session-id"
+        },
+        "traceId":{
+          "shape":"InvokeCodeInterpreterRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"InvokeCodeInterpreterRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "name":{
+          "shape":"ToolName",
+          "documentation":"<p>The name of the code interpreter to invoke.</p>"
+        },
+        "arguments":{
+          "shape":"ToolArguments",
+          "documentation":"<p>The arguments for the code interpreter. This includes the code to execute and any additional parameters such as the programming language, whether to clear the execution context, and other execution options. The structure of this parameter depends on the specific code interpreter being used.</p>"
+        }
+      }
+    },
+    "InvokeCodeInterpreterRequestTraceIdString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "InvokeCodeInterpreterRequestTraceParentString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "InvokeCodeInterpreterResponse":{
+      "type":"structure",
+      "required":["stream"],
+      "members":{
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The identifier of the code interpreter session.</p>",
+          "location":"header",
+          "locationName":"x-amzn-code-interpreter-session-id"
+        },
+        "stream":{
+          "shape":"CodeInterpreterStreamOutput",
+          "documentation":"<p>The stream containing the results of the code execution. This includes output, errors, and execution status.</p>"
+        }
+      },
+      "payload":"stream"
+    },
+    "LeftExpression":{
+      "type":"structure",
+      "members":{
+        "metadataKey":{
+          "shape":"MetadataKey",
+          "documentation":"<p>Key associated with the metadata in an event.</p>"
+        }
+      },
+      "documentation":"<p>Left expression of the event metadata filter.</p>",
+      "union":true
+    },
+    "ListActorsInput":{
+      "type":"structure",
+      "required":["memoryId"],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource for which to list actors.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. Minimum value of 1, maximum value of 100. Default is 20.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListActorsOutput":{
+      "type":"structure",
+      "required":["actorSummaries"],
+      "members":{
+        "actorSummaries":{
+          "shape":"ActorSummaryList",
+          "documentation":"<p>The list of actor summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use in a subsequent request to get the next set of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListBrowserSessionsRequest":{
+      "type":"structure",
+      "required":["browserIdentifier"],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the browser to list sessions for. If specified, only sessions for this browser are returned. If not specified, sessions for all browsers are returned.</p>",
+          "location":"uri",
+          "locationName":"browserIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. The default value is 10. Valid values range from 1 to 100. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. If not specified, Amazon Bedrock returns the first page of results.</p>"
+        },
+        "status":{
+          "shape":"BrowserSessionStatus",
+          "documentation":"<p>The status of the browser sessions to list. Valid values include ACTIVE, STOPPING, and STOPPED. If not specified, sessions with any status are returned.</p>"
+        }
+      }
+    },
+    "ListBrowserSessionsResponse":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"BrowserSessionSummaries",
+          "documentation":"<p>The list of browser sessions that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use in a subsequent <code>ListBrowserSessions</code> request to get the next set of results.</p>"
+        }
+      }
+    },
+    "ListCodeInterpreterSessionsRequest":{
+      "type":"structure",
+      "required":["codeInterpreterIdentifier"],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter to list sessions for. If specified, only sessions for this code interpreter are returned. If not specified, sessions for all code interpreters are returned.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. The default value is 10. Valid values range from 1 to 100. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. If not specified, Amazon Bedrock returns the first page of results.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterSessionStatus",
+          "documentation":"<p>The status of the code interpreter sessions to list. Valid values include ACTIVE, STOPPING, and STOPPED. If not specified, sessions with any status are returned.</p>"
+        }
+      }
+    },
+    "ListCodeInterpreterSessionsResponse":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"CodeInterpreterSessionSummaries",
+          "documentation":"<p>The list of code interpreter sessions that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use in a subsequent <code>ListCodeInterpreterSessions</code> request to get the next set of results.</p>"
+        }
+      }
+    },
+    "ListEventsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "sessionId",
+        "actorId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource for which to list events.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The identifier of the session for which to list events. If specified, only events from this session are returned.</p>",
+          "location":"uri",
+          "locationName":"sessionId"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor for which to list events. If specified, only events from this actor are returned.</p>",
+          "location":"uri",
+          "locationName":"actorId"
+        },
+        "includePayloads":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to include event payloads in the response. Set to true to include payloads, or false to exclude them.</p>"
+        },
+        "filter":{
+          "shape":"FilterInput",
+          "documentation":"<p>Filter criteria to apply when listing events.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. Minimum value of 1, maximum value of 100. Default is 20.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListEventsOutput":{
+      "type":"structure",
+      "required":["events"],
+      "members":{
+        "events":{
+          "shape":"EventList",
+          "documentation":"<p>The list of events that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use in a subsequent request to get the next set of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListMemoryRecordsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "namespace"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource for which to list memory records.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "namespace":{
+          "shape":"Namespace",
+          "documentation":"<p>The namespace to filter memory records by. If specified, only memory records in this namespace are returned.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The memory strategy identifier to filter memory records by. If specified, only memory records with this strategy ID are returned.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. Minimum value of 1, maximum value of 100. Default is 20.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListMemoryRecordsOutput":{
+      "type":"structure",
+      "required":["memoryRecordSummaries"],
+      "members":{
+        "memoryRecordSummaries":{
+          "shape":"MemoryRecordSummaryList",
+          "documentation":"<p>The list of memory record summaries that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use in a subsequent request to get the next set of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListSessionsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "actorId"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource for which to list sessions.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor for which to list sessions. If specified, only sessions involving this actor are returned.</p>",
+          "location":"uri",
+          "locationName":"actorId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. Minimum value of 1, maximum value of 100. Default is 20.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListSessionsOutput":{
+      "type":"structure",
+      "required":["sessionSummaries"],
+      "members":{
+        "sessionSummaries":{
+          "shape":"SessionSummaryList",
+          "documentation":"<p>The list of session summaries that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use in a subsequent request to get the next set of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "LiveViewStream":{
+      "type":"structure",
+      "members":{
+        "streamEndpoint":{
+          "shape":"BrowserStreamEndpoint",
+          "documentation":"<p>The endpoint URL for the live view stream. This URL is used to establish a connection to receive visual updates from the browser session.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a stream that provides a visual representation of a browser session in Amazon Bedrock. This stream enables agents to observe the current state of the browser, including rendered web pages, visual elements, and the results of interactions.</p>"
+    },
+    "Long":{
+      "type":"long",
+      "box":true
+    },
+    "MaxLenString":{
+      "type":"string",
+      "max":100000000,
+      "min":0
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "MemoryContent":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"MemoryContentTextString",
+          "documentation":"<p>The text content of the memory record.</p>"
+        }
+      },
+      "documentation":"<p>Contains the content of a memory record.</p>",
+      "union":true
+    },
+    "MemoryContentTextString":{
+      "type":"string",
+      "max":16000,
+      "min":1,
+      "sensitive":true
+    },
+    "MemoryId":{
+      "type":"string",
+      "min":12,
+      "pattern":"[a-zA-Z][a-zA-Z0-9-_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "MemoryRecord":{
+      "type":"structure",
+      "required":[
+        "memoryRecordId",
+        "content",
+        "memoryStrategyId",
+        "namespaces",
+        "createdAt"
+      ],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The unique identifier of the memory record.</p>"
+        },
+        "content":{
+          "shape":"MemoryContent",
+          "documentation":"<p>The content of the memory record.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The identifier of the memory strategy associated with this record.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with this memory record. Namespaces help organize and categorize memory records.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory record was created.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a memory record in an AgentCore Memory resource.</p>"
+    },
+    "MemoryRecordCreateInput":{
+      "type":"structure",
+      "required":[
+        "requestIdentifier",
+        "namespaces",
+        "content",
+        "timestamp"
+      ],
+      "members":{
+        "requestIdentifier":{
+          "shape":"RequestIdentifier",
+          "documentation":"<p>A client-provided identifier for tracking this specific record creation request.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>A list of namespace identifiers that categorize or group the memory record.</p>"
+        },
+        "content":{
+          "shape":"MemoryContent",
+          "documentation":"<p>The content to be stored within the memory record.</p>"
+        },
+        "timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>Time at which the memory record was created.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The ID of the memory strategy that defines how this memory record is grouped.</p>"
+        }
+      },
+      "documentation":"<p>Input structure to create a new memory record.</p>"
+    },
+    "MemoryRecordDeleteInput":{
+      "type":"structure",
+      "required":["memoryRecordId"],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The unique ID of the memory record to be deleted.</p>"
+        }
+      },
+      "documentation":"<p>Input structure to delete an existing memory record.</p>"
+    },
+    "MemoryRecordId":{
+      "type":"string",
+      "max":50,
+      "min":40,
+      "pattern":"mem-[a-zA-Z0-9-_]*"
+    },
+    "MemoryRecordOutput":{
+      "type":"structure",
+      "required":[
+        "memoryRecordId",
+        "status"
+      ],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The unique ID associated to the memory record.</p>"
+        },
+        "status":{
+          "shape":"MemoryRecordStatus",
+          "documentation":"<p>The status of the memory record operation (e.g., SUCCEEDED, FAILED).</p>"
+        },
+        "requestIdentifier":{
+          "shape":"RequestIdentifier",
+          "documentation":"<p>The client-provided identifier that was used to track this record operation.</p>"
+        },
+        "errorCode":{
+          "shape":"Integer",
+          "documentation":"<p>The error code returned when the memory record operation fails.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A human-readable error message describing why the memory record operation failed.</p>"
+        }
+      },
+      "documentation":"<p>Output information returned after processing a memory record operation.</p>"
+    },
+    "MemoryRecordStatus":{
+      "type":"string",
+      "enum":[
+        "SUCCEEDED",
+        "FAILED"
+      ]
+    },
+    "MemoryRecordSummary":{
+      "type":"structure",
+      "required":[
+        "memoryRecordId",
+        "content",
+        "memoryStrategyId",
+        "namespaces",
+        "createdAt"
+      ],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The unique identifier of the memory record.</p>"
+        },
+        "content":{
+          "shape":"MemoryContent",
+          "documentation":"<p>The content of the memory record.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The identifier of the memory strategy associated with this record.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with this memory record.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory record was created.</p>"
+        },
+        "score":{
+          "shape":"Double",
+          "documentation":"<p>The relevance score of the memory record when returned as part of a search result. Higher values indicate greater relevance to the search query.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a memory record.</p>"
+    },
+    "MemoryRecordSummaryList":{
+      "type":"list",
+      "member":{"shape":"MemoryRecordSummary"}
+    },
+    "MemoryRecordUpdateInput":{
+      "type":"structure",
+      "required":[
+        "memoryRecordId",
+        "timestamp"
+      ],
+      "members":{
+        "memoryRecordId":{
+          "shape":"MemoryRecordId",
+          "documentation":"<p>The unique ID of the memory record to be updated.</p>"
+        },
+        "timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>Time at which the memory record was updated</p>"
+        },
+        "content":{
+          "shape":"MemoryContent",
+          "documentation":"<p>The content to be stored within the memory record.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The updated list of namespace identifiers for categorizing the memory record.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The updated ID of the memory strategy that defines how this memory record is grouped.</p>"
+        }
+      },
+      "documentation":"<p>Input structure to update an existing memory record.</p>"
+    },
+    "MemoryRecordsCreateInputList":{
+      "type":"list",
+      "member":{"shape":"MemoryRecordCreateInput"},
+      "max":100,
+      "min":0
+    },
+    "MemoryRecordsDeleteInputList":{
+      "type":"list",
+      "member":{"shape":"MemoryRecordDeleteInput"},
+      "max":100,
+      "min":0
+    },
+    "MemoryRecordsOutputList":{
+      "type":"list",
+      "member":{"shape":"MemoryRecordOutput"}
+    },
+    "MemoryRecordsUpdateInputList":{
+      "type":"list",
+      "member":{"shape":"MemoryRecordUpdateInput"},
+      "max":100,
+      "min":0
+    },
+    "MemoryStrategyId":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-_]*"
+    },
+    "MetadataKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "MetadataMap":{
+      "type":"map",
+      "key":{"shape":"MetadataKey"},
+      "value":{"shape":"MetadataValue"},
+      "max":15,
+      "min":0
+    },
+    "MetadataValue":{
+      "type":"structure",
+      "members":{
+        "stringValue":{
+          "shape":"MetadataValueStringValueString",
+          "documentation":"<p>Value associated with the <code>eventMetadata</code> key.</p>"
+        }
+      },
+      "documentation":"<p>Value associated with the <code>eventMetadata</code> key.</p>",
+      "union":true
+    },
+    "MetadataValueStringValueString":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "MimeType":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "Name":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "Namespace":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[a-zA-Z0-9/*][a-zA-Z0-9-_/*]*(?::[a-zA-Z0-9-_/*]+)*[a-zA-Z0-9-_/*]*"
+    },
+    "NamespacesList":{
+      "type":"list",
+      "member":{"shape":"Namespace"},
+      "max":1,
+      "min":0
+    },
+    "NextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\S*"
+    },
+    "NonBlankString":{
+      "type":"string",
+      "pattern":"[\\s\\S]+"
+    },
+    "Oauth2FlowType":{
+      "type":"string",
+      "enum":[
+        "USER_FEDERATION",
+        "M2M"
+      ]
+    },
+    "OperatorType":{
+      "type":"string",
+      "enum":[
+        "EQUALS_TO",
+        "EXISTS",
+        "NOT_EXISTS"
+      ]
+    },
+    "PaginationToken":{"type":"string"},
+    "PayloadType":{
+      "type":"structure",
+      "members":{
+        "conversational":{
+          "shape":"Conversational",
+          "documentation":"<p>The conversational content of the payload.</p>"
+        },
+        "blob":{
+          "shape":"Document",
+          "documentation":"<p>The binary content of the payload.</p>"
+        }
+      },
+      "documentation":"<p>Contains the payload content for an event.</p>",
+      "union":true
+    },
+    "PayloadTypeList":{
+      "type":"list",
+      "member":{"shape":"PayloadType"},
+      "max":100,
+      "min":0
+    },
+    "ProgrammingLanguage":{
+      "type":"string",
+      "enum":[
+        "python",
+        "javascript",
+        "typescript"
+      ]
+    },
+    "RequestIdentifier":{
+      "type":"string",
+      "max":80,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_-]+"
+    },
+    "RequestUri":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"urn:ietf:params:oauth:request_uri:[a-zA-Z0-9-._~]+"
+    },
+    "ResourceContent":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ResourceContentType",
+          "documentation":"<p>The type of resource content.</p>"
+        },
+        "uri":{
+          "shape":"String",
+          "documentation":"<p>The URI of the resource content.</p>"
+        },
+        "mimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the resource content.</p>"
+        },
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text resource content.</p>"
+        },
+        "blob":{
+          "shape":"Blob",
+          "documentation":"<p>The binary resource content.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about resource content.</p>"
+    },
+    "ResourceContentType":{
+      "type":"string",
+      "enum":[
+        "text",
+        "blob"
+      ]
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when the specified resource does not exist. This can happen when using an invalid identifier or when trying to access a resource that has been deleted.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ResourceOauth2ReturnUrlType":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\w+:(\\/?\\/?)[^\\s]+"
+    },
+    "ResponseStream":{
+      "type":"blob",
+      "sensitive":true,
+      "streaming":true
+    },
+    "RetrieveMemoryRecordsInput":{
+      "type":"structure",
+      "required":[
+        "memoryId",
+        "namespace",
+        "searchCriteria"
+      ],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The identifier of the AgentCore Memory resource from which to retrieve memory records.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "namespace":{
+          "shape":"Namespace",
+          "documentation":"<p>The namespace to filter memory records by. If specified, only memory records in this namespace are searched.</p>"
+        },
+        "searchCriteria":{
+          "shape":"SearchCriteria",
+          "documentation":"<p>The search criteria to use for finding relevant memory records. This includes the search query, memory strategy ID, and other search parameters.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. Minimum value of 1, maximum value of 100. Default is 20.</p>"
+        }
+      }
+    },
+    "RetrieveMemoryRecordsOutput":{
+      "type":"structure",
+      "required":["memoryRecordSummaries"],
+      "members":{
+        "memoryRecordSummaries":{
+          "shape":"MemoryRecordSummaryList",
+          "documentation":"<p>The list of memory record summaries that match the search criteria, ordered by relevance.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use in a subsequent request to get the next set of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "RightExpression":{
+      "type":"structure",
+      "members":{
+        "metadataValue":{
+          "shape":"MetadataValue",
+          "documentation":"<p>Value associated with the key in <code>eventMetadata</code>.</p>"
+        }
+      },
+      "documentation":"<p>Right expression of the <code>eventMetadata</code>filter.</p>",
+      "union":true
+    },
+    "Role":{
+      "type":"string",
+      "enum":[
+        "ASSISTANT",
+        "USER",
+        "TOOL",
+        "OTHER"
+      ]
+    },
+    "RuntimeClientError":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when there is an error in the runtime client. This can happen due to network issues, invalid configuration, or other client-side problems. Check the error message for specific details about the error.</p>",
+      "error":{
+        "httpStatusCode":424,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ScopeType":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "ScopesListType":{
+      "type":"list",
+      "member":{"shape":"ScopeType"}
+    },
+    "SearchCriteria":{
+      "type":"structure",
+      "required":["searchQuery"],
+      "members":{
+        "searchQuery":{
+          "shape":"SearchCriteriaSearchQueryString",
+          "documentation":"<p>The search query to use for finding relevant memory records.</p>"
+        },
+        "memoryStrategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The memory strategy identifier to filter memory records by.</p>"
+        },
+        "topK":{
+          "shape":"SearchCriteriaTopKInteger",
+          "documentation":"<p>The maximum number of top-scoring memory records to return. This value is used for semantic search ranking.</p>"
+        }
+      },
+      "documentation":"<p>Contains search criteria for retrieving memory records.</p>"
+    },
+    "SearchCriteriaSearchQueryString":{
+      "type":"string",
+      "max":10000,
+      "min":1,
+      "sensitive":true
+    },
+    "SearchCriteriaTopKInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ServiceException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The service encountered an internal error. Try your request again later.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when the request would cause a service quota to be exceeded. Review your service quotas and either reduce your request rate or request a quota increase.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "SessionId":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-_]*"
+    },
+    "SessionStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "FAILED"
+      ]
+    },
+    "SessionSummary":{
+      "type":"structure",
+      "required":[
+        "sessionId",
+        "actorId",
+        "createdAt"
+      ],
+      "members":{
+        "sessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The unique identifier of the session.</p>"
+        },
+        "actorId":{
+          "shape":"ActorId",
+          "documentation":"<p>The identifier of the actor associated with the session.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the session was created.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a session in an AgentCore Memory resource.</p>"
+    },
+    "SessionSummaryList":{
+      "type":"list",
+      "member":{"shape":"SessionSummary"}
+    },
+    "SessionType":{
+      "type":"string",
+      "max":256,
+      "min":33
+    },
+    "StartBrowserSessionRequest":{
+      "type":"structure",
+      "required":["browserIdentifier"],
+      "members":{
+        "traceId":{
+          "shape":"StartBrowserSessionRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"StartBrowserSessionRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the browser to use for this session. This identifier specifies which browser environment to initialize for the session.</p>",
+          "location":"uri",
+          "locationName":"browserIdentifier"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the browser session. This name helps you identify and manage the session. The name does not need to be unique.</p>"
+        },
+        "sessionTimeoutSeconds":{
+          "shape":"BrowserSessionTimeout",
+          "documentation":"<p>The time in seconds after which the session automatically terminates if there is no activity. The default value is 3600 seconds (1 hour). The minimum allowed value is 60 seconds, and the maximum allowed value is 28800 seconds (8 hours).</p>"
+        },
+        "viewPort":{
+          "shape":"ViewPort",
+          "documentation":"<p>The dimensions of the browser viewport for this session. This determines the visible area of the web content and affects how web pages are rendered. If not specified, Amazon Bedrock uses a default viewport size.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. This parameter helps prevent the creation of duplicate sessions if there are temporary network issues.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StartBrowserSessionRequestTraceIdString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StartBrowserSessionRequestTraceParentString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StartBrowserSessionResponse":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "createdAt"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the browser.</p>"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The unique identifier of the created browser session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser session was created.</p>"
+        },
+        "streams":{
+          "shape":"BrowserSessionStream",
+          "documentation":"<p>The streams associated with this browser session. These include the automation stream and live view stream.</p>"
+        }
+      }
+    },
+    "StartCodeInterpreterSessionRequest":{
+      "type":"structure",
+      "required":["codeInterpreterIdentifier"],
+      "members":{
+        "traceId":{
+          "shape":"StartCodeInterpreterSessionRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"StartCodeInterpreterSessionRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter to use for this session. This identifier specifies which code interpreter environment to initialize for the session.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterIdentifier"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the code interpreter session. This name helps you identify and manage the session. The name does not need to be unique.</p>"
+        },
+        "sessionTimeoutSeconds":{
+          "shape":"CodeInterpreterSessionTimeout",
+          "documentation":"<p>The time in seconds after which the session automatically terminates if there is no activity. The default value is 900 seconds (15 minutes). The minimum allowed value is 60 seconds, and the maximum allowed value is 28800 seconds (8 hours).</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error. This parameter helps prevent the creation of duplicate sessions if there are temporary network issues.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StartCodeInterpreterSessionRequestTraceIdString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StartCodeInterpreterSessionRequestTraceParentString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StartCodeInterpreterSessionResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId",
+        "createdAt"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the code interpreter.</p>"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The unique identifier of the created code interpreter session.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the code interpreter session was created.</p>"
+        }
+      }
+    },
+    "State":{
+      "type":"string",
+      "max":4096,
+      "min":1,
+      "sensitive":true
+    },
+    "StopBrowserSessionRequest":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId"
+      ],
+      "members":{
+        "traceId":{
+          "shape":"StopBrowserSessionRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"StopBrowserSessionRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the browser associated with the session.</p>",
+          "location":"uri",
+          "locationName":"browserIdentifier"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The unique identifier of the browser session to stop.</p>",
+          "location":"querystring",
+          "locationName":"sessionId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StopBrowserSessionRequestTraceIdString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StopBrowserSessionRequestTraceParentString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StopBrowserSessionResponse":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the browser.</p>"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The identifier of the browser session.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the browser session was last updated.</p>"
+        }
+      }
+    },
+    "StopCodeInterpreterSessionRequest":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId"
+      ],
+      "members":{
+        "traceId":{
+          "shape":"StopCodeInterpreterSessionRequestTraceIdString",
+          "documentation":"<p>The trace identifier for request tracking.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Trace-Id"
+        },
+        "traceParent":{
+          "shape":"StopCodeInterpreterSessionRequestTraceParentString",
+          "documentation":"<p>The parent trace information for distributed tracing.</p>",
+          "location":"header",
+          "locationName":"traceparent"
+        },
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the code interpreter associated with the session.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterIdentifier"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The unique identifier of the code interpreter session to stop.</p>",
+          "location":"querystring",
+          "locationName":"sessionId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StopCodeInterpreterSessionRequestTraceIdString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StopCodeInterpreterSessionRequestTraceParentString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "StopCodeInterpreterSessionResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterIdentifier",
+        "sessionId",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "codeInterpreterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the code interpreter.</p>"
+        },
+        "sessionId":{
+          "shape":"CodeInterpreterSessionId",
+          "documentation":"<p>The identifier of the code interpreter session.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter session was last updated.</p>"
+        }
+      }
+    },
+    "StopRuntimeSessionRequest":{
+      "type":"structure",
+      "required":[
+        "runtimeSessionId",
+        "agentRuntimeArn"
+      ],
+      "members":{
+        "runtimeSessionId":{
+          "shape":"SessionType",
+          "documentation":"<p>The ID of the session that you want to stop.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "agentRuntimeArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the agent that contains the session that you want to stop.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeArn"
+        },
+        "qualifier":{
+          "shape":"String",
+          "documentation":"<p>Optional qualifier to specify an agent alias, such as <code>prod</code>code&gt; or <code>dev</code>. If you don't provide a value, the DEFAULT alias is used. </p>",
+          "location":"querystring",
+          "locationName":"qualifier"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Idempotent token used to identify the request. If you use the same token with multiple requests, the same response is returned. Use ClientToken to prevent the same request from being processed more than once.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "StopRuntimeSessionResponse":{
+      "type":"structure",
+      "members":{
+        "runtimeSessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>The ID of the session that you requested to stop.</p>",
+          "location":"header",
+          "locationName":"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
+        },
+        "statusCode":{
+          "shape":"HttpResponseCode",
+          "documentation":"<p>The status code of the request to stop the session.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
+    "StreamUpdate":{
+      "type":"structure",
+      "members":{
+        "automationStreamUpdate":{
+          "shape":"AutomationStreamUpdate",
+          "documentation":"<p>The update to an automation stream.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an update to a stream.</p>",
+      "union":true
+    },
+    "String":{"type":"string"},
+    "StringList":{
+      "type":"list",
+      "member":{"shape":"MaxLenString"}
+    },
+    "StringType":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "TaskStatus":{
+      "type":"string",
+      "enum":[
+        "submitted",
+        "working",
+        "completed",
+        "canceled",
+        "failed"
+      ]
+    },
+    "ThrottledException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request was denied due to request throttling. Reduce the frequency of requests and try again.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>The exception that occurs when the request was denied due to request throttling. This happens when you exceed the allowed request rate for an operation. Reduce the frequency of requests or implement exponential backoff retry logic in your application.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Timestamp":{"type":"timestamp"},
+    "ToolArguments":{
+      "type":"structure",
+      "members":{
+        "code":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The code to execute in a code interpreter session. This is the source code in the specified programming language that will be executed by the code interpreter.</p>"
+        },
+        "language":{
+          "shape":"ProgrammingLanguage",
+          "documentation":"<p>The programming language of the code to execute. This tells the code interpreter which language runtime to use for execution. Common values include 'python', 'javascript', and 'r'.</p>"
+        },
+        "clearContext":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to clear the context for the tool.</p>"
+        },
+        "command":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The command to execute with the tool.</p>"
+        },
+        "path":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The path for the tool operation.</p>"
+        },
+        "paths":{
+          "shape":"StringList",
+          "documentation":"<p>The paths for the tool operation.</p>"
+        },
+        "content":{
+          "shape":"InputContentBlockList",
+          "documentation":"<p>The content for the tool operation.</p>"
+        },
+        "directoryPath":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The directory path for the tool operation.</p>"
+        },
+        "taskId":{
+          "shape":"MaxLenString",
+          "documentation":"<p>The identifier of the task for the tool operation.</p>"
+        }
+      },
+      "documentation":"<p>The collection of arguments that specify the operation to perform and its parameters when invoking a tool in Amazon Bedrock. Different tools require different arguments, and this structure provides a flexible way to pass the appropriate arguments to each tool type.</p>"
+    },
+    "ToolName":{
+      "type":"string",
+      "enum":[
+        "executeCode",
+        "executeCommand",
+        "readFiles",
+        "listFiles",
+        "removeFiles",
+        "writeFiles",
+        "startCommandExecution",
+        "getTask",
+        "stopTask"
+      ]
+    },
+    "ToolResultStructuredContent":{
+      "type":"structure",
+      "members":{
+        "taskId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the task that produced the result.</p>"
+        },
+        "taskStatus":{
+          "shape":"TaskStatus",
+          "documentation":"<p>The status of the task that produced the result.</p>"
+        },
+        "stdout":{
+          "shape":"String",
+          "documentation":"<p>The standard output from the tool execution.</p>"
+        },
+        "stderr":{
+          "shape":"String",
+          "documentation":"<p>The standard error output from the tool execution.</p>"
+        },
+        "exitCode":{
+          "shape":"Integer",
+          "documentation":"<p>The exit code from the tool execution.</p>"
+        },
+        "executionTime":{
+          "shape":"Double",
+          "documentation":"<p>The execution time of the tool operation in milliseconds.</p>"
+        }
+      },
+      "documentation":"<p>Contains structured content from a tool result.</p>"
+    },
+    "UnauthorizedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when the JWT bearer token is invalid or not found for OAuth bearer token based access</p>",
+      "error":{
+        "httpStatusCode":401,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UpdateBrowserStreamRequest":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "streamUpdate"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the browser.</p>",
+          "location":"uri",
+          "locationName":"browserIdentifier"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The identifier of the browser session.</p>",
+          "location":"querystring",
+          "locationName":"sessionId"
+        },
+        "streamUpdate":{
+          "shape":"StreamUpdate",
+          "documentation":"<p>The update to apply to the browser stream.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request, but does not return an error.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateBrowserStreamResponse":{
+      "type":"structure",
+      "required":[
+        "browserIdentifier",
+        "sessionId",
+        "streams",
+        "updatedAt"
+      ],
+      "members":{
+        "browserIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the browser.</p>"
+        },
+        "sessionId":{
+          "shape":"BrowserSessionId",
+          "documentation":"<p>The identifier of the browser session.</p>"
+        },
+        "streams":{"shape":"BrowserSessionStream"},
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The time at which the browser stream was updated.</p>"
+        }
+      }
+    },
+    "UserIdType":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "UserIdentifier":{
+      "type":"structure",
+      "members":{
+        "userToken":{
+          "shape":"UserTokenType",
+          "documentation":"<p>The OAuth2.0 token issued by the user’s identity provider</p>"
+        },
+        "userId":{
+          "shape":"UserIdType",
+          "documentation":"<p>The ID of the user for whom you have retrieved a workload access token for</p>"
+        }
+      },
+      "documentation":"<p>The OAuth2.0 token or user ID that was used to generate the workload access token used for initiating the user authorization flow to retrieve OAuth2.0 tokens.</p>",
+      "union":true
+    },
+    "UserTokenType":{
+      "type":"string",
+      "max":131072,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_=]+.[A-Za-z0-9-_=]+.[A-Za-z0-9-_=]+",
+      "sensitive":true
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "reason"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "reason":{"shape":"ValidationExceptionReason"},
+        "fieldList":{"shape":"ValidationExceptionFieldList"}
+      },
+      "documentation":"<p>The exception that occurs when the input fails to satisfy the constraints specified by the service. Check the error message for details about which input parameter is invalid and correct your request.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "message"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A message describing why this field failed validation.</p>"
+        }
+      },
+      "documentation":"<p>Stores information about a field passed inside a request that resulted in an exception.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "CannotParse",
+        "FieldValidationFailed",
+        "IdempotentParameterMismatchException",
+        "EventInOtherSession",
+        "ResourceConflict"
+      ]
+    },
+    "ViewPort":{
+      "type":"structure",
+      "required":[
+        "width",
+        "height"
+      ],
+      "members":{
+        "width":{
+          "shape":"ViewPortWidth",
+          "documentation":"<p>The width of the viewport in pixels. This value determines the horizontal dimension of the visible area. Valid values range from 800 to 1920 pixels.</p>"
+        },
+        "height":{
+          "shape":"ViewPortHeight",
+          "documentation":"<p>The height of the viewport in pixels. This value determines the vertical dimension of the visible area. Valid values range from 600 to 1080 pixels.</p>"
+        }
+      },
+      "documentation":"<p>The configuration that defines the dimensions of a browser viewport in a browser session. The viewport determines the visible area of web content and affects how web pages are rendered and displayed. Proper viewport configuration ensures that web content is displayed correctly for the agent's browsing tasks.</p>"
+    },
+    "ViewPortHeight":{
+      "type":"integer",
+      "box":true,
+      "max":2160,
+      "min":240
+    },
+    "ViewPortWidth":{
+      "type":"integer",
+      "box":true,
+      "max":3840,
+      "min":320
+    },
+    "WorkloadIdentityNameType":{
+      "type":"string",
+      "max":255,
+      "min":3,
+      "pattern":"[A-Za-z0-9_.-]+"
+    },
+    "WorkloadIdentityTokenType":{
+      "type":"string",
+      "max":131072,
+      "min":1,
+      "sensitive":true
+    }
+  },
+  "documentation":"<p><note> <p>Amazon Bedrock AgentCore is in preview release and is subject to change.</p> </note> <p>Welcome to the Amazon Bedrock AgentCore Data Plane API reference. Data Plane actions process and handle data or workloads within Amazon Web Services services. </p></p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/waiters-2.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore/2024-02-28/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore-control-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore-control-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://bedrock-agentcore-control.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://bedrock-agentcore-control.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/paginators-1.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,70 @@
+{
+  "pagination": {
+    "ListAgentRuntimeEndpoints": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "runtimeEndpoints"
+    },
+    "ListAgentRuntimeVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "agentRuntimes"
+    },
+    "ListAgentRuntimes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "agentRuntimes"
+    },
+    "ListApiKeyCredentialProviders": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "credentialProviders"
+    },
+    "ListBrowsers": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "browserSummaries"
+    },
+    "ListCodeInterpreters": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "codeInterpreterSummaries"
+    },
+    "ListGatewayTargets": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListGateways": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListMemories": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "memories"
+    },
+    "ListOauth2CredentialProviders": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "credentialProviders"
+    },
+    "ListWorkloadIdentities": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "workloadIdentities"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7357 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2023-06-05",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"bedrock-agentcore-control",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"Amazon Bedrock AgentCore Control",
+    "serviceId":"Bedrock AgentCore Control",
+    "signatureVersion":"v4",
+    "signingName":"bedrock-agentcore",
+    "uid":"bedrock-agentcore-control-2023-06-05"
+  },
+  "operations":{
+    "CreateAgentRuntime":{
+      "name":"CreateAgentRuntime",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/runtimes/",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateAgentRuntimeRequest"},
+      "output":{"shape":"CreateAgentRuntimeResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates an Amazon Bedrock AgentCore Runtime.</p>",
+      "idempotent":true
+    },
+    "CreateAgentRuntimeEndpoint":{
+      "name":"CreateAgentRuntimeEndpoint",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/runtimes/{agentRuntimeId}/runtime-endpoints/",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateAgentRuntimeEndpointRequest"},
+      "output":{"shape":"CreateAgentRuntimeEndpointResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates an AgentCore Runtime endpoint.</p>",
+      "idempotent":true
+    },
+    "CreateApiKeyCredentialProvider":{
+      "name":"CreateApiKeyCredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/CreateApiKeyCredentialProvider",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateApiKeyCredentialProviderRequest"},
+      "output":{"shape":"CreateApiKeyCredentialProviderResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ResourceLimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"EncryptionFailure"}
+      ],
+      "documentation":"<p>Creates a new API key credential provider.</p>",
+      "idempotent":true
+    },
+    "CreateBrowser":{
+      "name":"CreateBrowser",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/browsers",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateBrowserRequest"},
+      "output":{"shape":"CreateBrowserResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a custom browser.</p>",
+      "idempotent":true
+    },
+    "CreateCodeInterpreter":{
+      "name":"CreateCodeInterpreter",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/code-interpreters",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateCodeInterpreterRequest"},
+      "output":{"shape":"CreateCodeInterpreterResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a custom code interpreter.</p>",
+      "idempotent":true
+    },
+    "CreateGateway":{
+      "name":"CreateGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateways/",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateGatewayRequest"},
+      "output":{"shape":"CreateGatewayResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a gateway for Amazon Bedrock Agent. A gateway serves as an integration point between your agent and external services.</p> <p>If you specify <code>CUSTOM_JWT</code> as the <code>authorizerType</code>, you must provide an <code>authorizerConfiguration</code>.</p>",
+      "idempotent":true
+    },
+    "CreateGatewayTarget":{
+      "name":"CreateGatewayTarget",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateways/{gatewayIdentifier}/targets/",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateGatewayTargetRequest"},
+      "output":{"shape":"CreateGatewayTargetResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a target for a gateway. A target defines an endpoint that the gateway can connect to.</p>",
+      "idempotent":true
+    },
+    "CreateMemory":{
+      "name":"CreateMemory",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/create",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateMemoryInput"},
+      "output":{"shape":"CreateMemoryOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ServiceException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"}
+      ],
+      "documentation":"<p>Creates a new Amazon Bedrock AgentCore Memory resource.</p>",
+      "idempotent":true
+    },
+    "CreateOauth2CredentialProvider":{
+      "name":"CreateOauth2CredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/CreateOauth2CredentialProvider",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateOauth2CredentialProviderRequest"},
+      "output":{"shape":"CreateOauth2CredentialProviderResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ResourceLimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"EncryptionFailure"}
+      ],
+      "documentation":"<p>Creates a new OAuth2 credential provider.</p>",
+      "idempotent":true
+    },
+    "CreateWorkloadIdentity":{
+      "name":"CreateWorkloadIdentity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/CreateWorkloadIdentity",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateWorkloadIdentityRequest"},
+      "output":{"shape":"CreateWorkloadIdentityResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a new workload identity.</p>",
+      "idempotent":true
+    },
+    "DeleteAgentRuntime":{
+      "name":"DeleteAgentRuntime",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/runtimes/{agentRuntimeId}/",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAgentRuntimeRequest"},
+      "output":{"shape":"DeleteAgentRuntimeResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes an Amazon Bedrock AgentCore Runtime.</p>",
+      "idempotent":true
+    },
+    "DeleteAgentRuntimeEndpoint":{
+      "name":"DeleteAgentRuntimeEndpoint",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/runtimes/{agentRuntimeId}/runtime-endpoints/{endpointName}/",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAgentRuntimeEndpointRequest"},
+      "output":{"shape":"DeleteAgentRuntimeEndpointResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes an AAgentCore Runtime endpoint.</p>",
+      "idempotent":true
+    },
+    "DeleteApiKeyCredentialProvider":{
+      "name":"DeleteApiKeyCredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/DeleteApiKeyCredentialProvider",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteApiKeyCredentialProviderRequest"},
+      "output":{"shape":"DeleteApiKeyCredentialProviderResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes an API key credential provider.</p>",
+      "idempotent":true
+    },
+    "DeleteBrowser":{
+      "name":"DeleteBrowser",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/browsers/{browserId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteBrowserRequest"},
+      "output":{"shape":"DeleteBrowserResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a custom browser.</p>",
+      "idempotent":true
+    },
+    "DeleteCodeInterpreter":{
+      "name":"DeleteCodeInterpreter",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/code-interpreters/{codeInterpreterId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteCodeInterpreterRequest"},
+      "output":{"shape":"DeleteCodeInterpreterResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a custom code interpreter.</p>",
+      "idempotent":true
+    },
+    "DeleteGateway":{
+      "name":"DeleteGateway",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/gateways/{gatewayIdentifier}/",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteGatewayRequest"},
+      "output":{"shape":"DeleteGatewayResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a gateway.</p>",
+      "idempotent":true
+    },
+    "DeleteGatewayTarget":{
+      "name":"DeleteGatewayTarget",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/gateways/{gatewayIdentifier}/targets/{targetId}/",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteGatewayTargetRequest"},
+      "output":{"shape":"DeleteGatewayTargetResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a gateway target.</p>",
+      "idempotent":true
+    },
+    "DeleteMemory":{
+      "name":"DeleteMemory",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/memories/{memoryId}/delete",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteMemoryInput"},
+      "output":{"shape":"DeleteMemoryOutput"},
+      "errors":[
+        {"shape":"ServiceException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"}
+      ],
+      "documentation":"<p>Deletes an Amazon Bedrock AgentCore Memory resource.</p>",
+      "idempotent":true
+    },
+    "DeleteOauth2CredentialProvider":{
+      "name":"DeleteOauth2CredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/DeleteOauth2CredentialProvider",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteOauth2CredentialProviderRequest"},
+      "output":{"shape":"DeleteOauth2CredentialProviderResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes an OAuth2 credential provider.</p>",
+      "idempotent":true
+    },
+    "DeleteWorkloadIdentity":{
+      "name":"DeleteWorkloadIdentity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/DeleteWorkloadIdentity",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteWorkloadIdentityRequest"},
+      "output":{"shape":"DeleteWorkloadIdentityResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a workload identity.</p>",
+      "idempotent":true
+    },
+    "GetAgentRuntime":{
+      "name":"GetAgentRuntime",
+      "http":{
+        "method":"GET",
+        "requestUri":"/runtimes/{agentRuntimeId}/",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAgentRuntimeRequest"},
+      "output":{"shape":"GetAgentRuntimeResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets an Amazon Bedrock AgentCore Runtime.</p>",
+      "readonly":true
+    },
+    "GetAgentRuntimeEndpoint":{
+      "name":"GetAgentRuntimeEndpoint",
+      "http":{
+        "method":"GET",
+        "requestUri":"/runtimes/{agentRuntimeId}/runtime-endpoints/{endpointName}/",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAgentRuntimeEndpointRequest"},
+      "output":{"shape":"GetAgentRuntimeEndpointResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets information about an Amazon Secure AgentEndpoint.</p>",
+      "readonly":true
+    },
+    "GetApiKeyCredentialProvider":{
+      "name":"GetApiKeyCredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetApiKeyCredentialProvider",
+        "responseCode":200
+      },
+      "input":{"shape":"GetApiKeyCredentialProviderRequest"},
+      "output":{"shape":"GetApiKeyCredentialProviderResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about an API key credential provider.</p>",
+      "readonly":true
+    },
+    "GetBrowser":{
+      "name":"GetBrowser",
+      "http":{
+        "method":"GET",
+        "requestUri":"/browsers/{browserId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetBrowserRequest"},
+      "output":{"shape":"GetBrowserResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets information about a custom browser.</p>",
+      "readonly":true
+    },
+    "GetCodeInterpreter":{
+      "name":"GetCodeInterpreter",
+      "http":{
+        "method":"GET",
+        "requestUri":"/code-interpreters/{codeInterpreterId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCodeInterpreterRequest"},
+      "output":{"shape":"GetCodeInterpreterResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets information about a custom code interpreter.</p>",
+      "readonly":true
+    },
+    "GetGateway":{
+      "name":"GetGateway",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateways/{gatewayIdentifier}/",
+        "responseCode":200
+      },
+      "input":{"shape":"GetGatewayRequest"},
+      "output":{"shape":"GetGatewayResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a specific Gateway.</p>",
+      "readonly":true
+    },
+    "GetGatewayTarget":{
+      "name":"GetGatewayTarget",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateways/{gatewayIdentifier}/targets/{targetId}/",
+        "responseCode":200
+      },
+      "input":{"shape":"GetGatewayTargetRequest"},
+      "output":{"shape":"GetGatewayTargetResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a specific gateway target.</p>",
+      "readonly":true
+    },
+    "GetMemory":{
+      "name":"GetMemory",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memories/{memoryId}/details",
+        "responseCode":200
+      },
+      "input":{"shape":"GetMemoryInput"},
+      "output":{"shape":"GetMemoryOutput"},
+      "errors":[
+        {"shape":"ServiceException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"}
+      ],
+      "documentation":"<p>Retrieve an existing Amazon Bedrock AgentCore Memory resource.</p>",
+      "readonly":true
+    },
+    "GetOauth2CredentialProvider":{
+      "name":"GetOauth2CredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetOauth2CredentialProvider",
+        "responseCode":200
+      },
+      "input":{"shape":"GetOauth2CredentialProviderRequest"},
+      "output":{"shape":"GetOauth2CredentialProviderResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about an OAuth2 credential provider.</p>",
+      "readonly":true
+    },
+    "GetTokenVault":{
+      "name":"GetTokenVault",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/get-token-vault",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTokenVaultRequest"},
+      "output":{"shape":"GetTokenVaultResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a token vault.</p>",
+      "readonly":true
+    },
+    "GetWorkloadIdentity":{
+      "name":"GetWorkloadIdentity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/GetWorkloadIdentity",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWorkloadIdentityRequest"},
+      "output":{"shape":"GetWorkloadIdentityResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a workload identity.</p>",
+      "readonly":true
+    },
+    "ListAgentRuntimeEndpoints":{
+      "name":"ListAgentRuntimeEndpoints",
+      "http":{
+        "method":"POST",
+        "requestUri":"/runtimes/{agentRuntimeId}/runtime-endpoints/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAgentRuntimeEndpointsRequest"},
+      "output":{"shape":"ListAgentRuntimeEndpointsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all endpoints for a specific Amazon Secure Agent.</p>",
+      "readonly":true
+    },
+    "ListAgentRuntimeVersions":{
+      "name":"ListAgentRuntimeVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/runtimes/{agentRuntimeId}/versions/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAgentRuntimeVersionsRequest"},
+      "output":{"shape":"ListAgentRuntimeVersionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all versions of a specific Amazon Secure Agent.</p>",
+      "readonly":true
+    },
+    "ListAgentRuntimes":{
+      "name":"ListAgentRuntimes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/runtimes/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAgentRuntimesRequest"},
+      "output":{"shape":"ListAgentRuntimesResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all Amazon Secure Agents in your account.</p>",
+      "readonly":true
+    },
+    "ListApiKeyCredentialProviders":{
+      "name":"ListApiKeyCredentialProviders",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/ListApiKeyCredentialProviders",
+        "responseCode":200
+      },
+      "input":{"shape":"ListApiKeyCredentialProvidersRequest"},
+      "output":{"shape":"ListApiKeyCredentialProvidersResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all API key credential providers in your account.</p>",
+      "readonly":true
+    },
+    "ListBrowsers":{
+      "name":"ListBrowsers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/browsers",
+        "responseCode":200
+      },
+      "input":{"shape":"ListBrowsersRequest"},
+      "output":{"shape":"ListBrowsersResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all custom browsers in your account.</p>",
+      "readonly":true
+    },
+    "ListCodeInterpreters":{
+      "name":"ListCodeInterpreters",
+      "http":{
+        "method":"POST",
+        "requestUri":"/code-interpreters",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCodeInterpretersRequest"},
+      "output":{"shape":"ListCodeInterpretersResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all custom code interpreters in your account.</p>",
+      "readonly":true
+    },
+    "ListGatewayTargets":{
+      "name":"ListGatewayTargets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateways/{gatewayIdentifier}/targets/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListGatewayTargetsRequest"},
+      "output":{"shape":"ListGatewayTargetsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all targets for a specific gateway.</p>",
+      "readonly":true
+    },
+    "ListGateways":{
+      "name":"ListGateways",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateways/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListGatewaysRequest"},
+      "output":{"shape":"ListGatewaysResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all gateways in the account.</p>",
+      "readonly":true
+    },
+    "ListMemories":{
+      "name":"ListMemories",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memories/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListMemoriesInput"},
+      "output":{"shape":"ListMemoriesOutput"},
+      "errors":[
+        {"shape":"ServiceException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"}
+      ],
+      "documentation":"<p>Lists the available Amazon Bedrock AgentCore Memory resources in the current Amazon Web Services Region.</p>",
+      "readonly":true
+    },
+    "ListOauth2CredentialProviders":{
+      "name":"ListOauth2CredentialProviders",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/ListOauth2CredentialProviders",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOauth2CredentialProvidersRequest"},
+      "output":{"shape":"ListOauth2CredentialProvidersResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all OAuth2 credential providers in your account.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the tags associated with the specified resource.</p> <note> <p>This feature is currently available only for AgentCore Runtime, Browser, Code Interpreter tool, and Gateway.</p> </note>",
+      "readonly":true
+    },
+    "ListWorkloadIdentities":{
+      "name":"ListWorkloadIdentities",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/ListWorkloadIdentities",
+        "responseCode":200
+      },
+      "input":{"shape":"ListWorkloadIdentitiesRequest"},
+      "output":{"shape":"ListWorkloadIdentitiesResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all workload identities in your account.</p>",
+      "readonly":true
+    },
+    "SetTokenVaultCMK":{
+      "name":"SetTokenVaultCMK",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/set-token-vault-cmk",
+        "responseCode":200
+      },
+      "input":{"shape":"SetTokenVaultCMKRequest"},
+      "output":{"shape":"SetTokenVaultCMKResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConcurrentModificationException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Sets the customer master key (CMK) for a token vault.</p>"
+    },
+    "SynchronizeGatewayTargets":{
+      "name":"SynchronizeGatewayTargets",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/gateways/{gatewayIdentifier}/synchronizeTargets",
+        "responseCode":202
+      },
+      "input":{"shape":"SynchronizeGatewayTargetsRequest"},
+      "output":{"shape":"SynchronizeGatewayTargetsResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>The gateway targets.</p>",
+      "idempotent":true
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Associates the specified tags to a resource with the specified resourceArn. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are also deleted.</p> <note> <p>This feature is currently available only for AgentCore Runtime, Browser, Code Interpreter tool, and Gateway.</p> </note>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes the specified tags from the specified resource.</p> <note> <p>This feature is currently available only for AgentCore Runtime, Browser, Code Interpreter tool, and Gateway.</p> </note>",
+      "idempotent":true
+    },
+    "UpdateAgentRuntime":{
+      "name":"UpdateAgentRuntime",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/runtimes/{agentRuntimeId}/",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateAgentRuntimeRequest"},
+      "output":{"shape":"UpdateAgentRuntimeResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing Amazon Secure Agent.</p>",
+      "idempotent":true
+    },
+    "UpdateAgentRuntimeEndpoint":{
+      "name":"UpdateAgentRuntimeEndpoint",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/runtimes/{agentRuntimeId}/runtime-endpoints/{endpointName}/",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateAgentRuntimeEndpointRequest"},
+      "output":{"shape":"UpdateAgentRuntimeEndpointResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing Amazon Bedrock AgentCore Runtime endpoint.</p>",
+      "idempotent":true
+    },
+    "UpdateApiKeyCredentialProvider":{
+      "name":"UpdateApiKeyCredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/UpdateApiKeyCredentialProvider",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateApiKeyCredentialProviderRequest"},
+      "output":{"shape":"UpdateApiKeyCredentialProviderResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"EncryptionFailure"}
+      ],
+      "documentation":"<p>Updates an existing API key credential provider.</p>",
+      "idempotent":true
+    },
+    "UpdateGateway":{
+      "name":"UpdateGateway",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/gateways/{gatewayIdentifier}/",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateGatewayRequest"},
+      "output":{"shape":"UpdateGatewayResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing gateway.</p>",
+      "idempotent":true
+    },
+    "UpdateGatewayTarget":{
+      "name":"UpdateGatewayTarget",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/gateways/{gatewayIdentifier}/targets/{targetId}/",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateGatewayTargetRequest"},
+      "output":{"shape":"UpdateGatewayTargetResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing gateway target.</p>",
+      "idempotent":true
+    },
+    "UpdateMemory":{
+      "name":"UpdateMemory",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/memories/{memoryId}/update",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateMemoryInput"},
+      "output":{"shape":"UpdateMemoryOutput"},
+      "errors":[
+        {"shape":"ServiceException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottledException"}
+      ],
+      "documentation":"<p>Update an Amazon Bedrock AgentCore Memory resource memory.</p>",
+      "idempotent":true
+    },
+    "UpdateOauth2CredentialProvider":{
+      "name":"UpdateOauth2CredentialProvider",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/UpdateOauth2CredentialProvider",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateOauth2CredentialProviderRequest"},
+      "output":{"shape":"UpdateOauth2CredentialProviderResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"DecryptionFailure"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"EncryptionFailure"}
+      ],
+      "documentation":"<p>Updates an existing OAuth2 credential provider.</p>"
+    },
+    "UpdateWorkloadIdentity":{
+      "name":"UpdateWorkloadIdentity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identities/UpdateWorkloadIdentity",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateWorkloadIdentityRequest"},
+      "output":{"shape":"UpdateWorkloadIdentityResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing workload identity.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when a request is denied per access permissions</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AgentEndpointDescription":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "AgentManagedRuntimeType":{
+      "type":"string",
+      "enum":[
+        "PYTHON_3_10",
+        "PYTHON_3_11",
+        "PYTHON_3_12",
+        "PYTHON_3_13"
+      ]
+    },
+    "AgentRuntime":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeArn",
+        "agentRuntimeId",
+        "agentRuntimeVersion",
+        "agentRuntimeName",
+        "description",
+        "lastUpdatedAt",
+        "status"
+      ],
+      "members":{
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent runtime.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the agent runtime.</p>"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the agent runtime.</p>"
+        },
+        "agentRuntimeName":{
+          "shape":"AgentRuntimeName",
+          "documentation":"<p>The name of the agent runtime.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the agent runtime.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the agent runtime was last updated.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeStatus",
+          "documentation":"<p>The current status of the agent runtime.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an agent runtime. An agent runtime is the execution environment for a Amazon Bedrock Agent.</p>"
+    },
+    "AgentRuntimeArn":{
+      "type":"string",
+      "pattern":"arn:(-[^:]+)?:bedrock-agentcore:[a-z0-9-]+:[0-9]{12}:agent/[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}:([0-9]{0,4}[1-9][0-9]{0,4})"
+    },
+    "AgentRuntimeArtifact":{
+      "type":"structure",
+      "members":{
+        "containerConfiguration":{
+          "shape":"ContainerConfiguration",
+          "documentation":"<p>The container configuration for the agent artifact.</p>"
+        },
+        "codeConfiguration":{
+          "shape":"CodeConfiguration",
+          "documentation":"<p>The code configuration for the agent runtime artifact, including the source code location and execution settings.</p>"
+        }
+      },
+      "documentation":"<p>The artifact of the agent.</p>",
+      "union":true
+    },
+    "AgentRuntimeEndpoint":{
+      "type":"structure",
+      "required":[
+        "name",
+        "agentRuntimeEndpointArn",
+        "agentRuntimeArn",
+        "status",
+        "id",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "name":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the agent runtime endpoint.</p>"
+        },
+        "liveVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The live version of the agent runtime endpoint. This is the version that is currently serving requests.</p>"
+        },
+        "targetVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The target version of the agent runtime endpoint. This is the version that the endpoint is being updated to.</p>"
+        },
+        "agentRuntimeEndpointArn":{
+          "shape":"AgentRuntimeEndpointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent runtime endpoint.</p>"
+        },
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent runtime associated with the endpoint.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeEndpointStatus",
+          "documentation":"<p>The current status of the agent runtime endpoint.</p>"
+        },
+        "id":{
+          "shape":"AgentRuntimeEndpointId",
+          "documentation":"<p>The unique identifier of the agent runtime endpoint.</p>"
+        },
+        "description":{
+          "shape":"AgentEndpointDescription",
+          "documentation":"<p>The description of the agent runtime endpoint.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the agent runtime endpoint was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the agent runtime endpoint was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an agent runtime endpoint. An endpoint provides a way to connect to and interact with an agent runtime.</p>"
+    },
+    "AgentRuntimeEndpointArn":{
+      "type":"string",
+      "pattern":"arn:(-[^:]+)?:bedrock-agentcore:[a-z0-9-]+:[0-9]{12}:agentEndpoint/[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
+    },
+    "AgentRuntimeEndpointId":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "AgentRuntimeEndpointStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATE_FAILED",
+        "UPDATING",
+        "UPDATE_FAILED",
+        "READY",
+        "DELETING"
+      ]
+    },
+    "AgentRuntimeEndpoints":{
+      "type":"list",
+      "member":{"shape":"AgentRuntimeEndpoint"}
+    },
+    "AgentRuntimeId":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "AgentRuntimeName":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,47}"
+    },
+    "AgentRuntimeStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATE_FAILED",
+        "UPDATING",
+        "UPDATE_FAILED",
+        "READY",
+        "DELETING"
+      ]
+    },
+    "AgentRuntimeVersion":{
+      "type":"string",
+      "max":5,
+      "min":1,
+      "pattern":"([1-9][0-9]{0,4})"
+    },
+    "AgentRuntimes":{
+      "type":"list",
+      "member":{"shape":"AgentRuntime"}
+    },
+    "AllowedAudience":{"type":"string"},
+    "AllowedAudienceList":{
+      "type":"list",
+      "member":{"shape":"AllowedAudience"},
+      "min":1
+    },
+    "AllowedClient":{"type":"string"},
+    "AllowedClientsList":{
+      "type":"list",
+      "member":{"shape":"AllowedClient"},
+      "min":1
+    },
+    "ApiKeyCredentialLocation":{
+      "type":"string",
+      "enum":[
+        "HEADER",
+        "QUERY_PARAMETER"
+      ]
+    },
+    "ApiKeyCredentialParameterName":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "ApiKeyCredentialPrefix":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "ApiKeyCredentialProvider":{
+      "type":"structure",
+      "required":["providerArn"],
+      "members":{
+        "providerArn":{
+          "shape":"ApiKeyCredentialProviderArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key credential provider. This ARN identifies the provider in Amazon Web Services.</p>"
+        },
+        "credentialParameterName":{
+          "shape":"ApiKeyCredentialParameterName",
+          "documentation":"<p>The name of the credential parameter for the API key. This parameter name is used when sending the API key to the target endpoint.</p>"
+        },
+        "credentialPrefix":{
+          "shape":"ApiKeyCredentialPrefix",
+          "documentation":"<p>The prefix for the API key credential. This prefix is added to the API key when sending it to the target endpoint.</p>"
+        },
+        "credentialLocation":{
+          "shape":"ApiKeyCredentialLocation",
+          "documentation":"<p>The location of the API key credential. This field specifies where in the request the API key should be placed.</p>"
+        }
+      },
+      "documentation":"<p>An API key credential provider for gateway authentication. This structure contains the configuration for authenticating with the target endpoint using an API key.</p>"
+    },
+    "ApiKeyCredentialProviderArn":{
+      "type":"string",
+      "pattern":"arn:([^:]*):([^:]*):([^:]*):([0-9]{12})?:(.+)"
+    },
+    "ApiKeyCredentialProviderArnType":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov):acps:[A-Za-z0-9-]{1,64}:[0-9]{12}:token-vault/[a-zA-Z0-9-.]+/apikeycredentialprovider/[a-zA-Z0-9-.]+"
+    },
+    "ApiKeyCredentialProviderItem":{
+      "type":"structure",
+      "required":[
+        "name",
+        "credentialProviderArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"ApiKeyCredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key credential provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an API key credential provider.</p>"
+    },
+    "ApiKeyCredentialProviders":{
+      "type":"list",
+      "member":{"shape":"ApiKeyCredentialProviderItem"}
+    },
+    "ApiKeyType":{
+      "type":"string",
+      "max":65536,
+      "min":1,
+      "sensitive":true
+    },
+    "ApiSchemaConfiguration":{
+      "type":"structure",
+      "members":{
+        "s3":{"shape":"S3Configuration"},
+        "inlinePayload":{
+          "shape":"InlinePayload",
+          "documentation":"<p>The inline payload containing the API schema definition.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for API schema.</p>",
+      "union":true
+    },
+    "Arn":{
+      "type":"string",
+      "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+    },
+    "AtlassianOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Atlassian OAuth2 provider. This identifier is assigned by Atlassian when you register your application.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the Atlassian OAuth2 provider. This secret is assigned by Atlassian and used along with the client ID to authenticate your application.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for connecting to Atlassian services using OAuth2 authentication. This includes the client credentials required to authenticate with Atlassian's OAuth2 authorization server.</p>"
+    },
+    "AtlassianOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{"shape":"Oauth2Discovery"},
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Atlassian OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details returned for an Atlassian OAuth2 provider, including the client ID and OAuth2 discovery information.</p>"
+    },
+    "AuthorizationEndpointType":{"type":"string"},
+    "AuthorizerConfiguration":{
+      "type":"structure",
+      "members":{
+        "customJWTAuthorizer":{
+          "shape":"CustomJWTAuthorizerConfiguration",
+          "documentation":"<p>The inbound JWT-based authorization, specifying how incoming requests should be authenticated.</p>"
+        }
+      },
+      "documentation":"<p>Represents inbound authorization configuration options used to authenticate incoming requests. </p>",
+      "union":true
+    },
+    "AuthorizerType":{
+      "type":"string",
+      "enum":[
+        "CUSTOM_JWT",
+        "AWS_IAM"
+      ]
+    },
+    "AwsAccountId":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "BrowserArn":{
+      "type":"string",
+      "pattern":"arn:(-[^:]+)?:bedrock-agentcore:[a-z0-9-]+:(aws|[0-9]{12}):browser(-custom)?/(aws\\.browser\\.v1|[a-zA-Z][a-zA-Z0-9_]{0,47}-[a-zA-Z0-9]{10})"
+    },
+    "BrowserId":{
+      "type":"string",
+      "pattern":"(aws\\.browser\\.v1|[a-zA-Z][a-zA-Z0-9_]{0,47}-[a-zA-Z0-9]{10})"
+    },
+    "BrowserNetworkConfiguration":{
+      "type":"structure",
+      "required":["networkMode"],
+      "members":{
+        "networkMode":{
+          "shape":"BrowserNetworkMode",
+          "documentation":"<p>The network mode for the browser. This field specifies how the browser connects to the network.</p>"
+        },
+        "vpcConfig":{"shape":"VpcConfig"}
+      },
+      "documentation":"<p>The network configuration for a browser. This structure defines how the browser connects to the network.</p>"
+    },
+    "BrowserNetworkMode":{
+      "type":"string",
+      "enum":[
+        "PUBLIC",
+        "VPC"
+      ]
+    },
+    "BrowserSigningConfigInput":{
+      "type":"structure",
+      "required":["enabled"],
+      "members":{
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether browser signing is enabled. When enabled, the browser will cryptographically sign HTTP requests to identify itself as an AI agent to bot control vendors.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for enabling browser signing capabilities that allow agents to cryptographically identify themselves to websites using HTTP message signatures.</p>"
+    },
+    "BrowserSigningConfigOutput":{
+      "type":"structure",
+      "required":["enabled"],
+      "members":{
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether browser signing is currently enabled for cryptographic agent identification using HTTP message signatures.</p>"
+        }
+      },
+      "documentation":"<p>The current browser signing configuration that shows whether cryptographic agent identification is enabled for web bot authentication.</p>"
+    },
+    "BrowserStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATE_FAILED",
+        "READY",
+        "DELETING",
+        "DELETE_FAILED",
+        "DELETED"
+      ]
+    },
+    "BrowserSummaries":{
+      "type":"list",
+      "member":{"shape":"BrowserSummary"}
+    },
+    "BrowserSummary":{
+      "type":"structure",
+      "required":[
+        "browserId",
+        "browserArn",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the browser.</p>"
+        },
+        "browserArn":{
+          "shape":"BrowserArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the browser.</p>"
+        },
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the browser.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the browser.</p>"
+        },
+        "status":{
+          "shape":"BrowserStatus",
+          "documentation":"<p>The current status of the browser.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a browser. A browser enables Amazon Bedrock Agent to interact with web content.</p>"
+    },
+    "ClientIdType":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "ClientSecretType":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "sensitive":true
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":256,
+      "min":33,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,256}"
+    },
+    "Code":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"S3Location",
+          "documentation":"<p>The Amazon Amazon S3 object that contains the source code for the agent runtime.</p>"
+        }
+      },
+      "documentation":"<p>The source code configuration that specifies the location and details of the code to be executed.</p>",
+      "union":true
+    },
+    "CodeConfiguration":{
+      "type":"structure",
+      "required":[
+        "code",
+        "runtime",
+        "entryPoint"
+      ],
+      "members":{
+        "code":{
+          "shape":"Code",
+          "documentation":"<p>The source code location and configuration details.</p>"
+        },
+        "runtime":{
+          "shape":"AgentManagedRuntimeType",
+          "documentation":"<p>The runtime environment for executing the code (for example, Python 3.9 or Node.js 18).</p>"
+        },
+        "entryPoint":{
+          "shape":"CodeConfigurationEntryPointList",
+          "documentation":"<p>The entry point for the code execution, specifying the function or method that should be invoked when the code runs.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the source code that defines how the agent runtime code should be executed, including the code location, runtime environment, and entry point.</p>"
+    },
+    "CodeConfigurationEntryPointList":{
+      "type":"list",
+      "member":{"shape":"entryPoint"},
+      "max":2,
+      "min":1
+    },
+    "CodeInterpreterArn":{
+      "type":"string",
+      "pattern":"arn:(-[^:]+)?:bedrock-agentcore:[a-z0-9-]+:(aws|[0-9]{12}):code-interpreter(-custom)?/(aws\\.codeinterpreter\\.v1|[a-zA-Z][a-zA-Z0-9_]{0,47}-[a-zA-Z0-9]{10})"
+    },
+    "CodeInterpreterId":{
+      "type":"string",
+      "pattern":"(aws\\.codeinterpreter\\.v1|[a-zA-Z][a-zA-Z0-9_]{0,47}-[a-zA-Z0-9]{10})"
+    },
+    "CodeInterpreterNetworkConfiguration":{
+      "type":"structure",
+      "required":["networkMode"],
+      "members":{
+        "networkMode":{
+          "shape":"CodeInterpreterNetworkMode",
+          "documentation":"<p>The network mode for the code interpreter. This field specifies how the code interpreter connects to the network.</p>"
+        },
+        "vpcConfig":{"shape":"VpcConfig"}
+      },
+      "documentation":"<p>The network configuration for a code interpreter. This structure defines how the code interpreter connects to the network.</p>"
+    },
+    "CodeInterpreterNetworkMode":{
+      "type":"string",
+      "enum":[
+        "PUBLIC",
+        "SANDBOX",
+        "VPC"
+      ]
+    },
+    "CodeInterpreterStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATE_FAILED",
+        "READY",
+        "DELETING",
+        "DELETE_FAILED",
+        "DELETED"
+      ]
+    },
+    "CodeInterpreterSummaries":{
+      "type":"list",
+      "member":{"shape":"CodeInterpreterSummary"}
+    },
+    "CodeInterpreterSummary":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterId",
+        "codeInterpreterArn",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the code interpreter.</p>"
+        },
+        "codeInterpreterArn":{
+          "shape":"CodeInterpreterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code interpreter.</p>"
+        },
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the code interpreter.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the code interpreter.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterStatus",
+          "documentation":"<p>The current status of the code interpreter.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a code interpreter. A code interpreter enables Amazon Bedrock Agent to execute code.</p>"
+    },
+    "ConcurrentModificationException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Exception thrown when a resource is modified concurrently by multiple requests.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when there is a conflict performing an operation</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ConsolidationConfiguration":{
+      "type":"structure",
+      "members":{
+        "customConsolidationConfiguration":{
+          "shape":"CustomConsolidationConfiguration",
+          "documentation":"<p>The custom consolidation configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains consolidation configuration information for a memory strategy.</p>",
+      "union":true
+    },
+    "ContainerConfiguration":{
+      "type":"structure",
+      "required":["containerUri"],
+      "members":{
+        "containerUri":{
+          "shape":"RuntimeContainerUri",
+          "documentation":"<p>The ECR URI of the container.</p>"
+        }
+      },
+      "documentation":"<p>Representation of a container configuration.</p>"
+    },
+    "CreateAgentRuntimeEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeId",
+        "name"
+      ],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to create an endpoint for.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "name":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint.</p>"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the AgentCore Runtime to use for the endpoint.</p>"
+        },
+        "description":{
+          "shape":"AgentEndpointDescription",
+          "documentation":"<p>The description of the AgentCore Runtime endpoint.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the agent runtime endpoint. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateAgentRuntimeEndpointResponse":{
+      "type":"structure",
+      "required":[
+        "targetVersion",
+        "agentRuntimeEndpointArn",
+        "agentRuntimeArn",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "targetVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The target version of the AgentCore Runtime for the endpoint.</p>"
+        },
+        "agentRuntimeEndpointArn":{
+          "shape":"AgentRuntimeEndpointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime endpoint.</p>"
+        },
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime.</p>"
+        },
+        "endpointName":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeEndpointStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime endpoint.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime endpoint was created.</p>"
+        }
+      }
+    },
+    "CreateAgentRuntimeRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeName",
+        "agentRuntimeArtifact",
+        "roleArn",
+        "networkConfiguration"
+      ],
+      "members":{
+        "agentRuntimeName":{
+          "shape":"AgentRuntimeName",
+          "documentation":"<p>The name of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeArtifact":{
+          "shape":"AgentRuntimeArtifact",
+          "documentation":"<p>The artifact of the AgentCore Runtime.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM role ARN that provides permissions for the AgentCore Runtime.</p>"
+        },
+        "networkConfiguration":{
+          "shape":"NetworkConfiguration",
+          "documentation":"<p>The network configuration for the AgentCore Runtime.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AgentCore Runtime.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The authorizer configuration for the AgentCore Runtime.</p>"
+        },
+        "requestHeaderConfiguration":{
+          "shape":"RequestHeaderConfiguration",
+          "documentation":"<p>Configuration for HTTP request headers that will be passed through to the runtime.</p>"
+        },
+        "protocolConfiguration":{"shape":"ProtocolConfiguration"},
+        "lifecycleConfiguration":{
+          "shape":"LifecycleConfiguration",
+          "documentation":"<p>The life cycle configuration for the AgentCore Runtime.</p>"
+        },
+        "environmentVariables":{
+          "shape":"EnvironmentVariablesMap",
+          "documentation":"<p>Environment variables to set in the AgentCore Runtime environment.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the agent runtime. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateAgentRuntimeResponse":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeArn",
+        "agentRuntimeId",
+        "agentRuntimeVersion",
+        "createdAt",
+        "status"
+      ],
+      "members":{
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the AgentCore Runtime.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime was created.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime.</p>"
+        }
+      }
+    },
+    "CreateApiKeyCredentialProviderRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "apiKey"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider. The name must be unique within your account.</p>"
+        },
+        "apiKey":{
+          "shape":"ApiKeyType",
+          "documentation":"<p>The API key to use for authentication. This value is encrypted and stored securely.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the API key credential provider. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateApiKeyCredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "apiKeySecretArn",
+        "name",
+        "credentialProviderArn"
+      ],
+      "members":{
+        "apiKeySecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the secret containing the API key.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the created API key credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"ApiKeyCredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created API key credential provider.</p>"
+        }
+      }
+    },
+    "CreateBrowserRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "networkConfiguration"
+      ],
+      "members":{
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the browser. The name must be unique within your account.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the browser.</p>"
+        },
+        "executionRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the browser to access Amazon Web Services services.</p>"
+        },
+        "networkConfiguration":{
+          "shape":"BrowserNetworkConfiguration",
+          "documentation":"<p>The network configuration for the browser. This configuration specifies the network mode for the browser.</p>"
+        },
+        "recording":{
+          "shape":"RecordingConfig",
+          "documentation":"<p>The recording configuration for the browser. When enabled, browser sessions are recorded and stored in the specified Amazon S3 location.</p>"
+        },
+        "browserSigning":{
+          "shape":"BrowserSigningConfigInput",
+          "documentation":"<p>The browser signing configuration that enables cryptographic agent identification using HTTP message signatures for web bot authentication.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the browser. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateBrowserResponse":{
+      "type":"structure",
+      "required":[
+        "browserId",
+        "browserArn",
+        "createdAt",
+        "status"
+      ],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the created browser.</p>"
+        },
+        "browserArn":{
+          "shape":"BrowserArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created browser.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was created.</p>"
+        },
+        "status":{
+          "shape":"BrowserStatus",
+          "documentation":"<p>The current status of the browser.</p>"
+        }
+      }
+    },
+    "CreateCodeInterpreterRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "networkConfiguration"
+      ],
+      "members":{
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the code interpreter. The name must be unique within your account.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the code interpreter.</p>"
+        },
+        "executionRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the code interpreter to access Amazon Web Services services.</p>"
+        },
+        "networkConfiguration":{
+          "shape":"CodeInterpreterNetworkConfiguration",
+          "documentation":"<p>The network configuration for the code interpreter. This configuration specifies the network mode for the code interpreter.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the code interpreter. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateCodeInterpreterResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterId",
+        "codeInterpreterArn",
+        "createdAt",
+        "status"
+      ],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the created code interpreter.</p>"
+        },
+        "codeInterpreterArn":{
+          "shape":"CodeInterpreterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created code interpreter.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was created.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterStatus",
+          "documentation":"<p>The current status of the code interpreter.</p>"
+        }
+      }
+    },
+    "CreateGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "roleArn",
+        "protocolType",
+        "authorizerType"
+      ],
+      "members":{
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway. The name must be unique within your account.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The description of the gateway.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If you don't specify this field, a value is randomly generated for you. If this token matches a previous request, the service ignores the request, but doesn't return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the gateway to access Amazon Web Services services.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>The protocol type for the gateway.</p>"
+        },
+        "protocolConfiguration":{
+          "shape":"GatewayProtocolConfiguration",
+          "documentation":"<p>The configuration settings for the protocol specified in the <code>protocolType</code> parameter.</p>"
+        },
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>The type of authorizer to use for the gateway.</p> <ul> <li> <p> <code>CUSTOM_JWT</code> - Authorize with a bearer token.</p> </li> <li> <p> <code>AWS_IAM</code> - Authorize with your Amazon Web Services IAM credentials.</p> </li> </ul>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The authorizer configuration for the gateway. Required if <code>authorizerType</code> is <code>CUSTOM_JWT</code>.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt data associated with the gateway.</p>"
+        },
+        "exceptionLevel":{
+          "shape":"ExceptionLevel",
+          "documentation":"<p>The level of detail in error messages returned when invoking the gateway.</p> <ul> <li> <p>If the value is <code>DEBUG</code>, granular exception messages are returned to help a user debug the gateway.</p> </li> <li> <p>If the value is omitted, a generic error message is returned to the end user.</p> </li> </ul>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of key-value pairs to associate with the gateway as metadata tags.</p>"
+        }
+      }
+    },
+    "CreateGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "gatewayId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "protocolType",
+        "authorizerType"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created gateway.</p>"
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the created gateway.</p>"
+        },
+        "gatewayUrl":{
+          "shape":"GatewayUrl",
+          "documentation":"<p>The URL endpoint for the created gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was last updated.</p>"
+        },
+        "status":{
+          "shape":"GatewayStatus",
+          "documentation":"<p>The current status of the gateway.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the gateway.</p>"
+        },
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The description of the gateway.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role associated with the gateway.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>The protocol type of the gateway.</p>"
+        },
+        "protocolConfiguration":{
+          "shape":"GatewayProtocolConfiguration",
+          "documentation":"<p>The configuration settings for the protocol used by the gateway.</p>"
+        },
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>The type of authorizer used by the gateway.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The authorizer configuration for the created gateway.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt data associated with the gateway.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the created gateway.</p>"
+        },
+        "exceptionLevel":{
+          "shape":"ExceptionLevel",
+          "documentation":"<p>The level of detail in error messages returned when invoking the gateway.</p> <ul> <li> <p>If the value is <code>DEBUG</code>, granular exception messages are returned to help a user debug the gateway.</p> </li> <li> <p>If the value is omitted, a generic error message is returned to the end user.</p> </li> </ul>"
+        }
+      }
+    },
+    "CreateGatewayTargetRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "name",
+        "targetConfiguration"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway to create a target for.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The name of the gateway target. The name must be unique within the gateway.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The description of the gateway target.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the API request completes no more than one time. If you don't specify this field, a value is randomly generated for you. If this token matches a previous request, the service ignores the request, but doesn't return an error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
+        "targetConfiguration":{
+          "shape":"TargetConfiguration",
+          "documentation":"<p>The configuration settings for the target, including endpoint information and schema definitions.</p>"
+        },
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The credential provider configurations for the target. These configurations specify how the gateway authenticates with the target endpoint.</p>"
+        }
+      }
+    },
+    "CreateGatewayTargetResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "targetId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "targetConfiguration",
+        "credentialProviderConfigurations"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway.</p>"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the created target.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the target was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the target was last updated.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The current status of the target.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the target.</p>"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The name of the target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The description of the target.</p>"
+        },
+        "targetConfiguration":{
+          "shape":"TargetConfiguration",
+          "documentation":"<p>The configuration settings for the target.</p>"
+        },
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The credential provider configurations for the target.</p>"
+        },
+        "lastSynchronizedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The last synchronization of the target.</p>"
+        }
+      }
+    },
+    "CreateMemoryInput":{
+      "type":"structure",
+      "required":[
+        "name",
+        "eventExpiryDuration"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"CreateMemoryInputClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, Amazon Bedrock ignores the request but does not return an error.</p>",
+          "idempotencyToken":true
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the memory. The name must be unique within your account.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the memory.</p>"
+        },
+        "encryptionKeyArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the memory data.</p>"
+        },
+        "memoryExecutionRoleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the memory to access Amazon Web Services services.</p>"
+        },
+        "eventExpiryDuration":{
+          "shape":"CreateMemoryInputEventExpiryDurationInteger",
+          "documentation":"<p>The duration after which memory events expire. Specified as an ISO 8601 duration.</p>"
+        },
+        "memoryStrategies":{
+          "shape":"MemoryStrategyInputList",
+          "documentation":"<p>The memory strategies to use for this memory. Strategies define how information is extracted, processed, and consolidated.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to an AgentCore Memory. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateMemoryInputClientTokenString":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "CreateMemoryInputEventExpiryDurationInteger":{
+      "type":"integer",
+      "box":true,
+      "max":365,
+      "min":7
+    },
+    "CreateMemoryOutput":{
+      "type":"structure",
+      "members":{
+        "memory":{
+          "shape":"Memory",
+          "documentation":"<p>The details of the created memory, including its ID, ARN, name, description, and configuration settings.</p>"
+        }
+      }
+    },
+    "CreateOauth2CredentialProviderRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "credentialProviderVendor",
+        "oauth2ProviderConfigInput"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider. The name must be unique within your account.</p>"
+        },
+        "credentialProviderVendor":{
+          "shape":"CredentialProviderVendorType",
+          "documentation":"<p>The vendor of the OAuth2 credential provider. This specifies which OAuth2 implementation to use.</p>"
+        },
+        "oauth2ProviderConfigInput":{
+          "shape":"Oauth2ProviderConfigInput",
+          "documentation":"<p>The configuration settings for the OAuth2 provider, including client ID, client secret, and other vendor-specific settings.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the OAuth2 credential provider. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateOauth2CredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "clientSecretArn",
+        "name",
+        "credentialProviderArn"
+      ],
+      "members":{
+        "clientSecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the client secret in AWS Secrets Manager.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"CredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OAuth2 credential provider.</p>"
+        },
+        "callbackUrl":{
+          "shape":"String",
+          "documentation":"<p>Callback URL to register on the OAuth2 credential provider as an allowed callback URL. This URL is where the OAuth2 authorization server redirects users after they complete the authorization flow.</p>"
+        },
+        "oauth2ProviderConfigOutput":{"shape":"Oauth2ProviderConfigOutput"}
+      }
+    },
+    "CreateWorkloadIdentityRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity. The name must be unique within your account.</p>"
+        },
+        "allowedResourceOauth2ReturnUrls":{
+          "shape":"ResourceOauth2ReturnUrlListType",
+          "documentation":"<p>The list of allowed OAuth2 return URLs for resources associated with this workload identity.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of tag keys and values to assign to the workload identity. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment.</p>"
+        }
+      }
+    },
+    "CreateWorkloadIdentityResponse":{
+      "type":"structure",
+      "required":[
+        "name",
+        "workloadIdentityArn"
+      ],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity.</p>"
+        },
+        "workloadIdentityArn":{
+          "shape":"WorkloadIdentityArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the workload identity.</p>"
+        },
+        "allowedResourceOauth2ReturnUrls":{
+          "shape":"ResourceOauth2ReturnUrlListType",
+          "documentation":"<p>The list of allowed OAuth2 return URLs for resources associated with this workload identity.</p>"
+        }
+      }
+    },
+    "CredentialProvider":{
+      "type":"structure",
+      "members":{
+        "oauthCredentialProvider":{
+          "shape":"OAuthCredentialProvider",
+          "documentation":"<p>The OAuth credential provider. This provider uses OAuth authentication to access the target endpoint.</p>"
+        },
+        "apiKeyCredentialProvider":{
+          "shape":"ApiKeyCredentialProvider",
+          "documentation":"<p>The API key credential provider. This provider uses an API key to authenticate with the target endpoint.</p>"
+        }
+      },
+      "documentation":"<p>A credential provider for gateway authentication. This structure contains the configuration for authenticating with the target endpoint.</p>",
+      "union":true
+    },
+    "CredentialProviderArnType":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov):acps:[A-Za-z0-9-]{1,64}:[0-9]{12}:token-vault/[a-zA-Z0-9-.]+/oauth2credentialprovider/[a-zA-Z0-9-.]+"
+    },
+    "CredentialProviderConfiguration":{
+      "type":"structure",
+      "required":["credentialProviderType"],
+      "members":{
+        "credentialProviderType":{
+          "shape":"CredentialProviderType",
+          "documentation":"<p>The type of credential provider. This field specifies which authentication method the gateway uses.</p>"
+        },
+        "credentialProvider":{
+          "shape":"CredentialProvider",
+          "documentation":"<p>The credential provider. This field contains the specific configuration for the credential provider type.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a credential provider. This structure defines how the gateway authenticates with the target endpoint.</p>"
+    },
+    "CredentialProviderConfigurations":{
+      "type":"list",
+      "member":{"shape":"CredentialProviderConfiguration"},
+      "max":1,
+      "min":1
+    },
+    "CredentialProviderName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-_]+"
+    },
+    "CredentialProviderType":{
+      "type":"string",
+      "enum":[
+        "GATEWAY_IAM_ROLE",
+        "OAUTH",
+        "API_KEY"
+      ]
+    },
+    "CredentialProviderVendorType":{
+      "type":"string",
+      "enum":[
+        "GoogleOauth2",
+        "GithubOauth2",
+        "SlackOauth2",
+        "SalesforceOauth2",
+        "MicrosoftOauth2",
+        "CustomOauth2",
+        "AtlassianOauth2",
+        "LinkedinOauth2",
+        "XOauth2",
+        "OktaOauth2",
+        "OneLoginOauth2",
+        "PingOneOauth2",
+        "FacebookOauth2",
+        "YandexOauth2",
+        "RedditOauth2",
+        "ZoomOauth2",
+        "TwitchOauth2",
+        "SpotifyOauth2",
+        "DropboxOauth2",
+        "NotionOauth2",
+        "HubspotOauth2",
+        "CyberArkOauth2",
+        "FusionAuthOauth2",
+        "Auth0Oauth2",
+        "CognitoOauth2"
+      ]
+    },
+    "CustomConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "semanticOverride":{
+          "shape":"SemanticOverrideConfigurationInput",
+          "documentation":"<p>The semantic override configuration for a custom memory strategy.</p>"
+        },
+        "summaryOverride":{
+          "shape":"SummaryOverrideConfigurationInput",
+          "documentation":"<p>The summary override configuration for a custom memory strategy.</p>"
+        },
+        "userPreferenceOverride":{
+          "shape":"UserPreferenceOverrideConfigurationInput",
+          "documentation":"<p>The user preference override configuration for a custom memory strategy.</p>"
+        },
+        "selfManagedConfiguration":{
+          "shape":"SelfManagedConfigurationInput",
+          "documentation":"<p>The self managed configuration for a custom memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for custom configuration of a memory strategy.</p>",
+      "union":true
+    },
+    "CustomConsolidationConfiguration":{
+      "type":"structure",
+      "members":{
+        "semanticConsolidationOverride":{
+          "shape":"SemanticConsolidationOverride",
+          "documentation":"<p>The semantic consolidation override configuration.</p>"
+        },
+        "summaryConsolidationOverride":{
+          "shape":"SummaryConsolidationOverride",
+          "documentation":"<p>The summary consolidation override configuration.</p>"
+        },
+        "userPreferenceConsolidationOverride":{
+          "shape":"UserPreferenceConsolidationOverride",
+          "documentation":"<p>The user preference consolidation override configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains custom consolidation configuration information.</p>",
+      "union":true
+    },
+    "CustomConsolidationConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "semanticConsolidationOverride":{
+          "shape":"SemanticOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The semantic consolidation override configuration input.</p>"
+        },
+        "summaryConsolidationOverride":{
+          "shape":"SummaryOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The summary consolidation override configuration input.</p>"
+        },
+        "userPreferenceConsolidationOverride":{
+          "shape":"UserPreferenceOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The user preference consolidation override configuration input.</p>"
+        }
+      },
+      "documentation":"<p>Input for a custom consolidation configuration.</p>",
+      "union":true
+    },
+    "CustomExtractionConfiguration":{
+      "type":"structure",
+      "members":{
+        "semanticExtractionOverride":{
+          "shape":"SemanticExtractionOverride",
+          "documentation":"<p>The semantic extraction override configuration.</p>"
+        },
+        "userPreferenceExtractionOverride":{
+          "shape":"UserPreferenceExtractionOverride",
+          "documentation":"<p>The user preference extraction override configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains custom extraction configuration information.</p>",
+      "union":true
+    },
+    "CustomExtractionConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "semanticExtractionOverride":{
+          "shape":"SemanticOverrideExtractionConfigurationInput",
+          "documentation":"<p>The semantic extraction override configuration input.</p>"
+        },
+        "userPreferenceExtractionOverride":{
+          "shape":"UserPreferenceOverrideExtractionConfigurationInput",
+          "documentation":"<p>The user preference extraction override configuration input.</p>"
+        }
+      },
+      "documentation":"<p>Input for a custom extraction configuration.</p>",
+      "union":true
+    },
+    "CustomJWTAuthorizerConfiguration":{
+      "type":"structure",
+      "required":["discoveryUrl"],
+      "members":{
+        "discoveryUrl":{
+          "shape":"DiscoveryUrl",
+          "documentation":"<p>This URL is used to fetch OpenID Connect configuration or authorization server metadata for validating incoming tokens.</p>"
+        },
+        "allowedAudience":{
+          "shape":"AllowedAudienceList",
+          "documentation":"<p>Represents individual audience values that are validated in the incoming JWT token validation process.</p>"
+        },
+        "allowedClients":{
+          "shape":"AllowedClientsList",
+          "documentation":"<p>Represents individual client IDs that are validated in the incoming JWT token validation process.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for inbound JWT-based authorization, specifying how incoming requests should be authenticated.</p>"
+    },
+    "CustomMemoryStrategyInput":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the custom memory strategy.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the custom memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with the custom memory strategy.</p>"
+        },
+        "configuration":{
+          "shape":"CustomConfigurationInput",
+          "documentation":"<p>The configuration for the custom memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for creating a custom memory strategy.</p>"
+    },
+    "CustomOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "oauthDiscovery",
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the custom provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the custom OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the custom OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a custom OAuth2 provider.</p>"
+    },
+    "CustomOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the custom provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the custom OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a custom OAuth2 provider.</p>"
+    },
+    "DateTimestamp":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "DecryptionFailure":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Exception thrown when decryption of a secret fails.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "DeleteAgentRuntimeEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeId",
+        "endpointName"
+      ],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime associated with the endpoint.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "endpointName":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint to delete.</p>",
+          "location":"uri",
+          "locationName":"endpointName"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteAgentRuntimeEndpointResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"AgentRuntimeEndpointStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime endpoint deletion.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime.</p>"
+        },
+        "endpointName":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint.</p>"
+        }
+      }
+    },
+    "DeleteAgentRuntimeRequest":{
+      "type":"structure",
+      "required":["agentRuntimeId"],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to delete.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure that the operation completes no more than one time. If this token matches a previous request, the service ignores the request but does not return an error.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteAgentRuntimeResponse":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"AgentRuntimeStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime deletion.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime.</p>"
+        }
+      }
+    },
+    "DeleteApiKeyCredentialProviderRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider to delete.</p>"
+        }
+      }
+    },
+    "DeleteApiKeyCredentialProviderResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteBrowserRequest":{
+      "type":"structure",
+      "required":["browserId"],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the browser to delete.</p>",
+          "location":"uri",
+          "locationName":"browserId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteBrowserResponse":{
+      "type":"structure",
+      "required":[
+        "browserId",
+        "status",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the deleted browser.</p>"
+        },
+        "status":{
+          "shape":"BrowserStatus",
+          "documentation":"<p>The current status of the browser deletion.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was last updated.</p>"
+        }
+      }
+    },
+    "DeleteCodeInterpreterRequest":{
+      "type":"structure",
+      "required":["codeInterpreterId"],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the code interpreter to delete.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteCodeInterpreterResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterId",
+        "status",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the deleted code interpreter.</p>"
+        },
+        "status":{
+          "shape":"CodeInterpreterStatus",
+          "documentation":"<p>The current status of the code interpreter deletion.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was last updated.</p>"
+        }
+      }
+    },
+    "DeleteGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayIdentifier"],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway to delete.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        }
+      }
+    },
+    "DeleteGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the deleted gateway.</p>"
+        },
+        "status":{
+          "shape":"GatewayStatus",
+          "documentation":"<p>The current status of the gateway deletion.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the gateway deletion.</p>"
+        }
+      }
+    },
+    "DeleteGatewayTargetRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "targetId"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The unique identifier of the gateway associated with the target.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the gateway target to delete.</p>",
+          "location":"uri",
+          "locationName":"targetId"
+        }
+      }
+    },
+    "DeleteGatewayTargetResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "targetId",
+        "status"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway.</p>"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the deleted gateway target.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The current status of the gateway target deletion.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the gateway target deletion.</p>"
+        }
+      }
+    },
+    "DeleteMemoryInput":{
+      "type":"structure",
+      "required":["memoryId"],
+      "members":{
+        "clientToken":{
+          "shape":"DeleteMemoryInputClientTokenString",
+          "documentation":"<p>A client token is used for keeping track of idempotent requests. It can contain a session id which can be around 250 chars, combined with a unique AWS identifier.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        },
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory to delete.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        }
+      }
+    },
+    "DeleteMemoryInputClientTokenString":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "DeleteMemoryOutput":{
+      "type":"structure",
+      "required":["memoryId"],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the deleted AgentCore Memory resource.</p>"
+        },
+        "status":{
+          "shape":"MemoryStatus",
+          "documentation":"<p>The current status of the AgentCore Memory resource deletion.</p>"
+        }
+      }
+    },
+    "DeleteMemoryStrategiesList":{
+      "type":"list",
+      "member":{"shape":"DeleteMemoryStrategyInput"}
+    },
+    "DeleteMemoryStrategyInput":{
+      "type":"structure",
+      "required":["memoryStrategyId"],
+      "members":{
+        "memoryStrategyId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the memory strategy to delete.</p>"
+        }
+      },
+      "documentation":"<p>Input for deleting a memory strategy.</p>"
+    },
+    "DeleteOauth2CredentialProviderRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider to delete.</p>"
+        }
+      }
+    },
+    "DeleteOauth2CredentialProviderResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteWorkloadIdentityRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity to delete.</p>"
+        }
+      }
+    },
+    "DeleteWorkloadIdentityResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "Description":{
+      "type":"string",
+      "max":4096,
+      "min":1,
+      "sensitive":true
+    },
+    "DiscoveryUrl":{
+      "type":"string",
+      "pattern":".+/\\.well-known/openid-configuration"
+    },
+    "DiscoveryUrlType":{
+      "type":"string",
+      "pattern":".+/\\.well-known/openid-configuration"
+    },
+    "EncryptionFailure":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Exception thrown when encryption of a secret fails.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "EndpointName":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,47}",
+      "sensitive":true
+    },
+    "EnvironmentVariableKey":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "EnvironmentVariableValue":{
+      "type":"string",
+      "max":5000,
+      "min":0
+    },
+    "EnvironmentVariablesMap":{
+      "type":"map",
+      "key":{"shape":"EnvironmentVariableKey"},
+      "value":{"shape":"EnvironmentVariableValue"},
+      "max":50,
+      "min":0,
+      "sensitive":true
+    },
+    "ExceptionLevel":{
+      "type":"string",
+      "enum":["DEBUG"]
+    },
+    "ExtractionConfiguration":{
+      "type":"structure",
+      "members":{
+        "customExtractionConfiguration":{
+          "shape":"CustomExtractionConfiguration",
+          "documentation":"<p>The custom extraction configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains extraction configuration information for a memory strategy.</p>",
+      "union":true
+    },
+    "GatewayArn":{
+      "type":"string",
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock-agentcore:[a-z0-9-]{1,20}:[0-9]{12}:gateway/[0-9a-zA-Z]{10}"
+    },
+    "GatewayDescription":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "sensitive":true
+    },
+    "GatewayId":{
+      "type":"string",
+      "pattern":"([0-9a-z][-]?){1,100}-[0-9a-z]{10}"
+    },
+    "GatewayIdentifier":{
+      "type":"string",
+      "pattern":"([0-9a-z][-]?){1,100}-[0-9a-z]{10}"
+    },
+    "GatewayMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "GatewayName":{
+      "type":"string",
+      "pattern":"([0-9a-zA-Z][-]?){1,100}",
+      "sensitive":true
+    },
+    "GatewayNextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\S*"
+    },
+    "GatewayProtocolConfiguration":{
+      "type":"structure",
+      "members":{
+        "mcp":{
+          "shape":"MCPGatewayConfiguration",
+          "documentation":"<p>The configuration for the Model Context Protocol (MCP). This protocol enables communication between Amazon Bedrock Agent and external tools.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a gateway protocol. This structure defines how the gateway communicates with external services.</p>",
+      "union":true
+    },
+    "GatewayProtocolType":{
+      "type":"string",
+      "enum":["MCP"]
+    },
+    "GatewayStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "UPDATING",
+        "UPDATE_UNSUCCESSFUL",
+        "DELETING",
+        "READY",
+        "FAILED"
+      ]
+    },
+    "GatewaySummaries":{
+      "type":"list",
+      "member":{"shape":"GatewaySummary"}
+    },
+    "GatewaySummary":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "name",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "authorizerType",
+        "protocolType"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway.</p>"
+        },
+        "status":{
+          "shape":"GatewayStatus",
+          "documentation":"<p>The current status of the gateway.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The description of the gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was last updated.</p>"
+        },
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>The type of authorizer used by the gateway.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>The protocol type used by the gateway.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a gateway.</p>"
+    },
+    "GatewayTarget":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "targetId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "targetConfiguration",
+        "credentialProviderConfigurations"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway target.</p>"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The target ID.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time at which the target was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time at which the target was updated.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The status of the gateway target.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The status reasons for the target status.</p>"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The name of the gateway target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The description for the gateway target.</p>"
+        },
+        "targetConfiguration":{"shape":"TargetConfiguration"},
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The provider configurations.</p>"
+        },
+        "lastSynchronizedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The last synchronization time.</p>"
+        }
+      },
+      "documentation":"<p>The gateway target.</p>"
+    },
+    "GatewayTargetList":{
+      "type":"list",
+      "member":{"shape":"GatewayTarget"}
+    },
+    "GatewayUrl":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "GetAgentRuntimeEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeId",
+        "endpointName"
+      ],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime associated with the endpoint.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "endpointName":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint to retrieve.</p>",
+          "location":"uri",
+          "locationName":"endpointName"
+        }
+      }
+    },
+    "GetAgentRuntimeEndpointResponse":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeEndpointArn",
+        "agentRuntimeArn",
+        "status",
+        "createdAt",
+        "lastUpdatedAt",
+        "name",
+        "id"
+      ],
+      "members":{
+        "liveVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The currently deployed version of the AgentCore Runtime on the endpoint.</p>"
+        },
+        "targetVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The target version of the AgentCore Runtime for the endpoint.</p>"
+        },
+        "agentRuntimeEndpointArn":{
+          "shape":"AgentRuntimeEndpointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime endpoint.</p>"
+        },
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime.</p>"
+        },
+        "description":{
+          "shape":"AgentEndpointDescription",
+          "documentation":"<p>The description of the AgentCore Runtime endpoint.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeEndpointStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime endpoint.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime endpoint was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime endpoint was last updated.</p>"
+        },
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for failure if the AgentCore Runtime endpoint is in a failed state.</p>"
+        },
+        "name":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint.</p>"
+        },
+        "id":{
+          "shape":"AgentRuntimeEndpointId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime endpoint.</p>"
+        }
+      }
+    },
+    "GetAgentRuntimeRequest":{
+      "type":"structure",
+      "required":["agentRuntimeId"],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to retrieve.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the AgentCore Runtime to retrieve.</p>",
+          "location":"querystring",
+          "locationName":"version"
+        }
+      }
+    },
+    "GetAgentRuntimeResponse":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeArn",
+        "agentRuntimeName",
+        "agentRuntimeId",
+        "agentRuntimeVersion",
+        "createdAt",
+        "lastUpdatedAt",
+        "roleArn",
+        "networkConfiguration",
+        "status",
+        "lifecycleConfiguration"
+      ],
+      "members":{
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeName":{
+          "shape":"AgentRuntimeName",
+          "documentation":"<p>The name of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the AgentCore Runtime.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime was last updated.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM role ARN that provides permissions for the AgentCore Runtime.</p>"
+        },
+        "networkConfiguration":{
+          "shape":"NetworkConfiguration",
+          "documentation":"<p>The network configuration for the AgentCore Runtime.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeStatus",
+          "documentation":"<p>The current status of the AgentCore Runtime.</p>"
+        },
+        "lifecycleConfiguration":{
+          "shape":"LifecycleConfiguration",
+          "documentation":"<p>The life cycle configuration for the AgentCore Runtime.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AgentCore Runtime.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the AgentCore Runtime.</p>"
+        },
+        "agentRuntimeArtifact":{
+          "shape":"AgentRuntimeArtifact",
+          "documentation":"<p>The artifact of the AgentCore Runtime.</p>"
+        },
+        "protocolConfiguration":{"shape":"ProtocolConfiguration"},
+        "environmentVariables":{
+          "shape":"EnvironmentVariablesMap",
+          "documentation":"<p>Environment variables set in the AgentCore Runtime environment.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The authorizer configuration for the AgentCore Runtime.</p>"
+        },
+        "requestHeaderConfiguration":{
+          "shape":"RequestHeaderConfiguration",
+          "documentation":"<p>Configuration for HTTP request headers that will be passed through to the runtime.</p>"
+        }
+      }
+    },
+    "GetApiKeyCredentialProviderRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider to retrieve.</p>"
+        }
+      }
+    },
+    "GetApiKeyCredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "apiKeySecretArn",
+        "name",
+        "credentialProviderArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "apiKeySecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key secret in AWS Secrets Manager.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"ApiKeyCredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key credential provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was last updated.</p>"
+        }
+      }
+    },
+    "GetBrowserRequest":{
+      "type":"structure",
+      "required":["browserId"],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the browser to retrieve.</p>",
+          "location":"uri",
+          "locationName":"browserId"
+        }
+      }
+    },
+    "GetBrowserResponse":{
+      "type":"structure",
+      "required":[
+        "browserId",
+        "browserArn",
+        "name",
+        "networkConfiguration",
+        "status",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "browserId":{
+          "shape":"BrowserId",
+          "documentation":"<p>The unique identifier of the browser.</p>"
+        },
+        "browserArn":{
+          "shape":"BrowserArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the browser.</p>"
+        },
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the browser.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the browser.</p>"
+        },
+        "executionRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM role ARN that provides permissions for the browser.</p>"
+        },
+        "networkConfiguration":{"shape":"BrowserNetworkConfiguration"},
+        "recording":{"shape":"RecordingConfig"},
+        "browserSigning":{
+          "shape":"BrowserSigningConfigOutput",
+          "documentation":"<p>The browser signing configuration that shows whether cryptographic agent identification is enabled for web bot authentication.</p>"
+        },
+        "status":{
+          "shape":"BrowserStatus",
+          "documentation":"<p>The current status of the browser.</p>"
+        },
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for failure if the browser is in a failed state.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the browser was last updated.</p>"
+        }
+      }
+    },
+    "GetCodeInterpreterRequest":{
+      "type":"structure",
+      "required":["codeInterpreterId"],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the code interpreter to retrieve.</p>",
+          "location":"uri",
+          "locationName":"codeInterpreterId"
+        }
+      }
+    },
+    "GetCodeInterpreterResponse":{
+      "type":"structure",
+      "required":[
+        "codeInterpreterId",
+        "codeInterpreterArn",
+        "name",
+        "networkConfiguration",
+        "status",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "codeInterpreterId":{
+          "shape":"CodeInterpreterId",
+          "documentation":"<p>The unique identifier of the code interpreter.</p>"
+        },
+        "codeInterpreterArn":{
+          "shape":"CodeInterpreterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code interpreter.</p>"
+        },
+        "name":{
+          "shape":"SandboxName",
+          "documentation":"<p>The name of the code interpreter.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the code interpreter.</p>"
+        },
+        "executionRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM role ARN that provides permissions for the code interpreter.</p>"
+        },
+        "networkConfiguration":{"shape":"CodeInterpreterNetworkConfiguration"},
+        "status":{
+          "shape":"CodeInterpreterStatus",
+          "documentation":"<p>The current status of the code interpreter.</p>"
+        },
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for failure if the code interpreter is in a failed state.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the code interpreter was last updated.</p>"
+        }
+      }
+    },
+    "GetGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayIdentifier"],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway to retrieve.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        }
+      }
+    },
+    "GetGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "gatewayId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "protocolType",
+        "authorizerType"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway.</p>"
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "gatewayUrl":{
+          "shape":"GatewayUrl",
+          "documentation":"<p>An endpoint for invoking gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was last updated.</p>"
+        },
+        "status":{
+          "shape":"GatewayStatus",
+          "documentation":"<p>The current status of the gateway.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the gateway.</p>"
+        },
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The description of the gateway.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The IAM role ARN that provides permissions for the gateway.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>Protocol applied to a gateway.</p>"
+        },
+        "protocolConfiguration":{"shape":"GatewayProtocolConfiguration"},
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>Authorizer type for the gateway.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The authorizer configuration for the gateway.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the gateway.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the gateway.</p>"
+        },
+        "exceptionLevel":{
+          "shape":"ExceptionLevel",
+          "documentation":"<p>The level of detail in error messages returned when invoking the gateway.</p> <ul> <li> <p>If the value is <code>DEBUG</code>, granular exception messages are returned to help a user debug the gateway.</p> </li> <li> <p>If the value is omitted, a generic error message is returned to the end user.</p> </li> </ul>"
+        }
+      }
+    },
+    "GetGatewayTargetRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "targetId"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway that contains the target.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the target to retrieve.</p>",
+          "location":"uri",
+          "locationName":"targetId"
+        }
+      }
+    },
+    "GetGatewayTargetResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "targetId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "targetConfiguration",
+        "credentialProviderConfigurations"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway.</p>"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the gateway target.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway target was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway target was last updated.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The current status of the gateway target.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the gateway target.</p>"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The name of the gateway target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The description of the gateway target.</p>"
+        },
+        "targetConfiguration":{"shape":"TargetConfiguration"},
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The credential provider configurations for the gateway target.</p>"
+        },
+        "lastSynchronizedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The last synchronization of the target.</p>"
+        }
+      }
+    },
+    "GetMemoryInput":{
+      "type":"structure",
+      "required":["memoryId"],
+      "members":{
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory to retrieve.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        }
+      }
+    },
+    "GetMemoryOutput":{
+      "type":"structure",
+      "required":["memory"],
+      "members":{
+        "memory":{
+          "shape":"Memory",
+          "documentation":"<p>The retrieved AgentCore Memory resource details.</p>"
+        }
+      }
+    },
+    "GetOauth2CredentialProviderRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider to retrieve.</p>"
+        }
+      }
+    },
+    "GetOauth2CredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "clientSecretArn",
+        "name",
+        "credentialProviderArn",
+        "credentialProviderVendor",
+        "oauth2ProviderConfigOutput",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "clientSecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the client secret in AWS Secrets Manager.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"CredentialProviderArnType",
+          "documentation":"<p>ARN of the credential provider requested.</p>"
+        },
+        "credentialProviderVendor":{
+          "shape":"CredentialProviderVendorType",
+          "documentation":"<p>The vendor of the OAuth2 credential provider.</p>"
+        },
+        "callbackUrl":{
+          "shape":"String",
+          "documentation":"<p>Callback URL to register on the OAuth2 credential provider as an allowed callback URL. This URL is where the OAuth2 authorization server redirects users after they complete the authorization flow.</p>"
+        },
+        "oauth2ProviderConfigOutput":{
+          "shape":"Oauth2ProviderConfigOutput",
+          "documentation":"<p>The configuration output for the OAuth2 provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was last updated.</p>"
+        }
+      }
+    },
+    "GetTokenVaultRequest":{
+      "type":"structure",
+      "members":{
+        "tokenVaultId":{
+          "shape":"TokenVaultIdType",
+          "documentation":"<p>The unique identifier of the token vault to retrieve.</p>"
+        }
+      }
+    },
+    "GetTokenVaultResponse":{
+      "type":"structure",
+      "required":[
+        "tokenVaultId",
+        "kmsConfiguration",
+        "lastModifiedDate"
+      ],
+      "members":{
+        "tokenVaultId":{
+          "shape":"TokenVaultIdType",
+          "documentation":"<p>The ID of the token vault.</p>"
+        },
+        "kmsConfiguration":{
+          "shape":"KmsConfiguration",
+          "documentation":"<p>The KMS configuration for the token vault.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the token vault was last modified.</p>"
+        }
+      }
+    },
+    "GetWorkloadIdentityRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity to retrieve.</p>"
+        }
+      }
+    },
+    "GetWorkloadIdentityResponse":{
+      "type":"structure",
+      "required":[
+        "name",
+        "workloadIdentityArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity.</p>"
+        },
+        "workloadIdentityArn":{
+          "shape":"WorkloadIdentityArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the workload identity.</p>"
+        },
+        "allowedResourceOauth2ReturnUrls":{
+          "shape":"ResourceOauth2ReturnUrlListType",
+          "documentation":"<p>The list of allowed OAuth2 return URLs for resources associated with this workload identity.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the workload identity was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the workload identity was last updated.</p>"
+        }
+      }
+    },
+    "GithubOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the GitHub OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the GitHub OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a GitHub OAuth2 provider.</p>"
+    },
+    "GithubOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the GitHub provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the GitHub OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a GitHub OAuth2 provider.</p>"
+    },
+    "GoogleOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Google OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the Google OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a Google OAuth2 provider.</p>"
+    },
+    "GoogleOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the Google provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Google OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a Google OAuth2 provider.</p>"
+    },
+    "HeaderName":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"(Authorization|X-Amzn-Bedrock-AgentCore-Runtime-Custom-[a-zA-Z0-9-]+)"
+    },
+    "IncludedOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the supported OAuth2 provider. This identifier is assigned by the OAuth2 provider when you register your application.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the supported OAuth2 provider. This secret is assigned by the OAuth2 provider and used along with the client ID to authenticate your application.</p>"
+        },
+        "issuer":{
+          "shape":"IssuerUrlType",
+          "documentation":"<p>Token issuer of your isolated OAuth2 application tenant. This URL identifies the authorization server that issues tokens for this provider.</p>"
+        },
+        "authorizationEndpoint":{
+          "shape":"AuthorizationEndpointType",
+          "documentation":"<p>OAuth2 authorization endpoint for your isolated OAuth2 application tenant. This is where users are redirected to authenticate and authorize access to their resources.</p>"
+        },
+        "tokenEndpoint":{
+          "shape":"TokenEndpointType",
+          "documentation":"<p>OAuth2 token endpoint for your isolated OAuth2 application tenant. This is where authorization codes are exchanged for access tokens.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for connecting to a supported OAuth2 provider. This includes client credentials and OAuth2 discovery information for providers that have built-in support.</p>"
+    },
+    "IncludedOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{"shape":"Oauth2Discovery"},
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the supported OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details returned for a supported OAuth2 provider, including client credentials and OAuth2 discovery information.</p>"
+    },
+    "InlinePayload":{
+      "type":"string",
+      "sensitive":true
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown if there was an unexpected error during processing of request</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "InvocationConfiguration":{
+      "type":"structure",
+      "required":[
+        "topicArn",
+        "payloadDeliveryBucketName"
+      ],
+      "members":{
+        "topicArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the SNS topic for job notifications.</p>"
+        },
+        "payloadDeliveryBucketName":{
+          "shape":"String",
+          "documentation":"<p>The S3 bucket name for event payload delivery.</p>"
+        }
+      },
+      "documentation":"<p>The configuration to invoke a self-managed memory processing pipeline with.</p>"
+    },
+    "InvocationConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "topicArn",
+        "payloadDeliveryBucketName"
+      ],
+      "members":{
+        "topicArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the SNS topic for job notifications.</p>"
+        },
+        "payloadDeliveryBucketName":{
+          "shape":"InvocationConfigurationInputPayloadDeliveryBucketNameString",
+          "documentation":"<p>The S3 bucket name for event payload delivery.</p>"
+        }
+      },
+      "documentation":"<p>The configuration to invoke a self-managed memory processing pipeline with.</p>"
+    },
+    "InvocationConfigurationInputPayloadDeliveryBucketNameString":{
+      "type":"string",
+      "pattern":"[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]"
+    },
+    "IssuerUrlType":{"type":"string"},
+    "KeyType":{
+      "type":"string",
+      "enum":[
+        "CustomerManagedKey",
+        "ServiceManagedKey"
+      ]
+    },
+    "KmsConfiguration":{
+      "type":"structure",
+      "required":["keyType"],
+      "members":{
+        "keyType":{
+          "shape":"KeyType",
+          "documentation":"<p>The type of KMS key (CustomerManagedKey or ServiceManagedKey).</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key.</p>"
+        }
+      },
+      "documentation":"<p>Contains the KMS configuration for a resource.</p>"
+    },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:aws(|-cn|-us-gov):kms:[a-zA-Z0-9-]*:[0-9]{12}:key/[a-zA-Z0-9-]{36}"
+    },
+    "LambdaFunctionArn":{
+      "type":"string",
+      "max":170,
+      "min":1,
+      "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:([a-z]{2}(-gov)?-[a-z]+-\\d{1}):(\\d{12}):function:([a-zA-Z0-9-_.]+)(:(\\$LATEST|[a-zA-Z0-9-]+))?"
+    },
+    "LifecycleConfiguration":{
+      "type":"structure",
+      "members":{
+        "idleRuntimeSessionTimeout":{
+          "shape":"LifecycleConfigurationIdleRuntimeSessionTimeoutInteger",
+          "documentation":"<p>Timeout in seconds for idle runtime sessions. When a session remains idle for this duration, it will be automatically terminated. Default: 900 seconds (15 minutes).</p>"
+        },
+        "maxLifetime":{
+          "shape":"LifecycleConfigurationMaxLifetimeInteger",
+          "documentation":"<p>Maximum lifetime for the instance in seconds. Once reached, instances will be automatically terminated and replaced. Default: 28800 seconds (8 hours).</p>"
+        }
+      },
+      "documentation":"<p>LifecycleConfiguration lets you manage the lifecycle of runtime sessions and resources in AgentCore Runtime. This configuration helps optimize resource utilization by automatically cleaning up idle sessions and preventing long-running instances from consuming resources indefinitely.</p>"
+    },
+    "LifecycleConfigurationIdleRuntimeSessionTimeoutInteger":{
+      "type":"integer",
+      "box":true,
+      "max":28800,
+      "min":60
+    },
+    "LifecycleConfigurationMaxLifetimeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":28800,
+      "min":60
+    },
+    "LinkedinOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the LinkedIn OAuth2 provider. This identifier is assigned by LinkedIn when you register your application.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the LinkedIn OAuth2 provider. This secret is assigned by LinkedIn and used along with the client ID to authenticate your application.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for connecting to LinkedIn services using OAuth2 authentication. This includes the client credentials required to authenticate with LinkedIn's OAuth2 authorization server.</p>"
+    },
+    "LinkedinOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{"shape":"Oauth2Discovery"},
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the LinkedIn OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details returned for a LinkedIn OAuth2 provider, including the client ID and OAuth2 discovery information.</p>"
+    },
+    "ListAgentRuntimeEndpointsRequest":{
+      "type":"structure",
+      "required":["agentRuntimeId"],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to list endpoints for.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListAgentRuntimeEndpointsResponse":{
+      "type":"structure",
+      "required":["runtimeEndpoints"],
+      "members":{
+        "runtimeEndpoints":{
+          "shape":"AgentRuntimeEndpoints",
+          "documentation":"<p>The list of AgentCore Runtime endpoints.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListAgentRuntimeVersionsRequest":{
+      "type":"structure",
+      "required":["agentRuntimeId"],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to list versions for.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListAgentRuntimeVersionsResponse":{
+      "type":"structure",
+      "required":["agentRuntimes"],
+      "members":{
+        "agentRuntimes":{
+          "shape":"AgentRuntimes",
+          "documentation":"<p>The list of AgentCore Runtime versions.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListAgentRuntimesRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListAgentRuntimesResponse":{
+      "type":"structure",
+      "required":["agentRuntimes"],
+      "members":{
+        "agentRuntimes":{
+          "shape":"AgentRuntimes",
+          "documentation":"<p>The list of AgentCore Runtime resources.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListApiKeyCredentialProvidersRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Maximum number of results to return.</p>"
+        }
+      }
+    },
+    "ListApiKeyCredentialProvidersResponse":{
+      "type":"structure",
+      "required":["credentialProviders"],
+      "members":{
+        "credentialProviders":{
+          "shape":"ApiKeyCredentialProviders",
+          "documentation":"<p>The list of API key credential providers.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token for the next page of results.</p>"
+        }
+      }
+    },
+    "ListBrowsersRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. The default value is 10. The maximum value is 50.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "type":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of browsers to list. If not specified, all browser types are returned.</p>",
+          "location":"querystring",
+          "locationName":"type"
+        }
+      }
+    },
+    "ListBrowsersResponse":{
+      "type":"structure",
+      "required":["browserSummaries"],
+      "members":{
+        "browserSummaries":{
+          "shape":"BrowserSummaries",
+          "documentation":"<p>The list of browser summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListCodeInterpretersRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "type":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of code interpreters to list.</p>",
+          "location":"querystring",
+          "locationName":"type"
+        }
+      }
+    },
+    "ListCodeInterpretersResponse":{
+      "type":"structure",
+      "required":["codeInterpreterSummaries"],
+      "members":{
+        "codeInterpreterSummaries":{
+          "shape":"CodeInterpreterSummaries",
+          "documentation":"<p>The list of code interpreter summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListGatewayTargetsRequest":{
+      "type":"structure",
+      "required":["gatewayIdentifier"],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway to list targets for.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "maxResults":{
+          "shape":"TargetMaxResults",
+          "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"TargetNextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewayTargetsResponse":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"TargetSummaries",
+          "documentation":"<p>The list of gateway target summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"TargetNextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        }
+      }
+    },
+    "ListGatewaysRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"GatewayMaxResults",
+          "documentation":"<p>The maximum number of results to return in the response. If the total number of results is greater than this value, use the token returned in the response in the <code>nextToken</code> field when making another request to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"GatewayNextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, enter the token returned in the <code>nextToken</code> field in the response in this field to return the next batch of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewaysResponse":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"GatewaySummaries",
+          "documentation":"<p>The list of gateway summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"GatewayNextToken",
+          "documentation":"<p>If the total number of results is greater than the <code>maxResults</code> value provided in the request, use this token when making another request in the <code>nextToken</code> field to return the next batch of results.</p>"
+        }
+      }
+    },
+    "ListMemoriesInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListMemoriesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in a single call. The default value is 10. The maximum value is 50.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListMemoriesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListMemoriesOutput":{
+      "type":"structure",
+      "required":["memories"],
+      "members":{
+        "memories":{
+          "shape":"MemorySummaryList",
+          "documentation":"<p>The list of AgentCore Memory resource summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "ListOauth2CredentialProvidersRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token.</p>"
+        },
+        "maxResults":{
+          "shape":"ListOauth2CredentialProvidersRequestMaxResultsInteger",
+          "documentation":"<p>Maximum number of results to return.</p>"
+        }
+      }
+    },
+    "ListOauth2CredentialProvidersRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "ListOauth2CredentialProvidersResponse":{
+      "type":"structure",
+      "required":["credentialProviders"],
+      "members":{
+        "credentialProviders":{
+          "shape":"Oauth2CredentialProviders",
+          "documentation":"<p>The list of OAuth2 credential providers.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token for the next page of results.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource for which you want to list tags.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>The tags associated with the resource.</p>"
+        }
+      }
+    },
+    "ListWorkloadIdentitiesRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token.</p>"
+        },
+        "maxResults":{
+          "shape":"ListWorkloadIdentitiesRequestMaxResultsInteger",
+          "documentation":"<p>Maximum number of results to return.</p>"
+        }
+      }
+    },
+    "ListWorkloadIdentitiesRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "ListWorkloadIdentitiesResponse":{
+      "type":"structure",
+      "required":["workloadIdentities"],
+      "members":{
+        "workloadIdentities":{
+          "shape":"WorkloadIdentityList",
+          "documentation":"<p>The list of workload identities.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Pagination token for the next page of results.</p>"
+        }
+      }
+    },
+    "MCPGatewayConfiguration":{
+      "type":"structure",
+      "members":{
+        "supportedVersions":{
+          "shape":"McpSupportedVersions",
+          "documentation":"<p>The supported versions of the Model Context Protocol. This field specifies which versions of the protocol the gateway can use.</p>"
+        },
+        "instructions":{
+          "shape":"McpInstructions",
+          "documentation":"<p>The instructions for using the Model Context Protocol gateway. These instructions provide guidance on how to interact with the gateway.</p>"
+        },
+        "searchType":{
+          "shape":"SearchType",
+          "documentation":"<p>The search type for the Model Context Protocol gateway. This field specifies how the gateway handles search operations.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a Model Context Protocol (MCP) gateway. This structure defines how the gateway implements the MCP protocol.</p>"
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "McpInstructions":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "McpLambdaTargetConfiguration":{
+      "type":"structure",
+      "required":[
+        "lambdaArn",
+        "toolSchema"
+      ],
+      "members":{
+        "lambdaArn":{
+          "shape":"LambdaFunctionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function. This function is invoked by the gateway to communicate with the target.</p>"
+        },
+        "toolSchema":{
+          "shape":"ToolSchema",
+          "documentation":"<p>The tool schema for the Lambda function. This schema defines the structure of the tools that the Lambda function provides.</p>"
+        }
+      },
+      "documentation":"<p>The Lambda configuration for a Model Context Protocol target. This structure defines how the gateway uses a Lambda function to communicate with the target.</p>"
+    },
+    "McpServerTargetConfiguration":{
+      "type":"structure",
+      "required":["endpoint"],
+      "members":{
+        "endpoint":{
+          "shape":"McpServerTargetConfigurationEndpointString",
+          "documentation":"<p>The endpoint for the MCP server target configuration.</p>"
+        }
+      },
+      "documentation":"<p>The target configuration for the MCP server.</p>"
+    },
+    "McpServerTargetConfigurationEndpointString":{
+      "type":"string",
+      "pattern":"https://.*"
+    },
+    "McpSupportedVersions":{
+      "type":"list",
+      "member":{"shape":"McpVersion"}
+    },
+    "McpTargetConfiguration":{
+      "type":"structure",
+      "members":{
+        "openApiSchema":{
+          "shape":"ApiSchemaConfiguration",
+          "documentation":"<p>The OpenAPI schema for the Model Context Protocol target. This schema defines the API structure of the target.</p>"
+        },
+        "smithyModel":{
+          "shape":"ApiSchemaConfiguration",
+          "documentation":"<p>The Smithy model for the Model Context Protocol target. This model defines the API structure of the target using the Smithy specification.</p>"
+        },
+        "lambda":{
+          "shape":"McpLambdaTargetConfiguration",
+          "documentation":"<p>The Lambda configuration for the Model Context Protocol target. This configuration defines how the gateway uses a Lambda function to communicate with the target.</p>"
+        },
+        "mcpServer":{
+          "shape":"McpServerTargetConfiguration",
+          "documentation":"<p>The MCP server specified as the gateway target.</p>"
+        }
+      },
+      "documentation":"<p>The Model Context Protocol (MCP) configuration for a target. This structure defines how the gateway uses MCP to communicate with the target.</p>",
+      "union":true
+    },
+    "McpVersion":{"type":"string"},
+    "Memory":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "id",
+        "name",
+        "eventExpiryDuration",
+        "status",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"MemoryArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the memory.</p>"
+        },
+        "id":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the memory.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the memory.</p>"
+        },
+        "encryptionKeyArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the KMS key used to encrypt the memory.</p>"
+        },
+        "memoryExecutionRoleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the IAM role that provides permissions for the memory.</p>"
+        },
+        "eventExpiryDuration":{
+          "shape":"MemoryEventExpiryDurationInteger",
+          "documentation":"<p>The number of days after which memory events will expire.</p>"
+        },
+        "status":{
+          "shape":"MemoryStatus",
+          "documentation":"<p>The current status of the memory.</p>"
+        },
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for failure if the memory is in a failed state.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory was last updated.</p>"
+        },
+        "strategies":{
+          "shape":"MemoryStrategyList",
+          "documentation":"<p>The list of memory strategies associated with this memory.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a memory resource.</p>"
+    },
+    "MemoryArn":{
+      "type":"string",
+      "pattern":"arn:aws:bedrock-agentcore:[a-z0-9-]+:[0-9]{12}:memory\\/[a-zA-Z][a-zA-Z0-9-_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "MemoryEventExpiryDurationInteger":{
+      "type":"integer",
+      "box":true,
+      "max":365,
+      "min":1
+    },
+    "MemoryId":{
+      "type":"string",
+      "min":12,
+      "pattern":"[a-zA-Z][a-zA-Z0-9-_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "MemoryStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "FAILED",
+        "DELETING"
+      ]
+    },
+    "MemoryStrategy":{
+      "type":"structure",
+      "required":[
+        "strategyId",
+        "name",
+        "type",
+        "namespaces"
+      ],
+      "members":{
+        "strategyId":{
+          "shape":"MemoryStrategyId",
+          "documentation":"<p>The unique identifier of the memory strategy.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the memory strategy.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the memory strategy.</p>"
+        },
+        "configuration":{
+          "shape":"StrategyConfiguration",
+          "documentation":"<p>The configuration of the memory strategy.</p>"
+        },
+        "type":{
+          "shape":"MemoryStrategyType",
+          "documentation":"<p>The type of the memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with the memory strategy.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory strategy was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory strategy was last updated.</p>"
+        },
+        "status":{
+          "shape":"MemoryStrategyStatus",
+          "documentation":"<p>The current status of the memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a memory strategy.</p>"
+    },
+    "MemoryStrategyId":{
+      "type":"string",
+      "min":12,
+      "pattern":"[a-zA-Z][a-zA-Z0-9-_]{0,99}-[a-zA-Z0-9]{10}"
+    },
+    "MemoryStrategyInput":{
+      "type":"structure",
+      "members":{
+        "semanticMemoryStrategy":{
+          "shape":"SemanticMemoryStrategyInput",
+          "documentation":"<p>Input for creating a semantic memory strategy.</p>"
+        },
+        "summaryMemoryStrategy":{
+          "shape":"SummaryMemoryStrategyInput",
+          "documentation":"<p>Input for creating a summary memory strategy.</p>"
+        },
+        "userPreferenceMemoryStrategy":{
+          "shape":"UserPreferenceMemoryStrategyInput",
+          "documentation":"<p>Input for creating a user preference memory strategy.</p>"
+        },
+        "customMemoryStrategy":{
+          "shape":"CustomMemoryStrategyInput",
+          "documentation":"<p>Input for creating a custom memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Contains input information for creating a memory strategy.</p>",
+      "union":true
+    },
+    "MemoryStrategyInputList":{
+      "type":"list",
+      "member":{"shape":"MemoryStrategyInput"}
+    },
+    "MemoryStrategyList":{
+      "type":"list",
+      "member":{"shape":"MemoryStrategy"}
+    },
+    "MemoryStrategyStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "DELETING",
+        "FAILED"
+      ]
+    },
+    "MemoryStrategyType":{
+      "type":"string",
+      "enum":[
+        "SEMANTIC",
+        "SUMMARIZATION",
+        "USER_PREFERENCE",
+        "CUSTOM"
+      ]
+    },
+    "MemorySummary":{
+      "type":"structure",
+      "required":[
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "arn":{
+          "shape":"MemoryArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the memory.</p>"
+        },
+        "id":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory.</p>"
+        },
+        "status":{
+          "shape":"MemoryStatus",
+          "documentation":"<p>The current status of the memory.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the memory was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a memory resource.</p>"
+    },
+    "MemorySummaryList":{
+      "type":"list",
+      "member":{"shape":"MemorySummary"}
+    },
+    "MessageBasedTrigger":{
+      "type":"structure",
+      "members":{
+        "messageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of messages that trigger memory processing.</p>"
+        }
+      },
+      "documentation":"<p>The trigger configuration based on a message.</p>"
+    },
+    "MessageBasedTriggerInput":{
+      "type":"structure",
+      "members":{
+        "messageCount":{
+          "shape":"MessageBasedTriggerInputMessageCountInteger",
+          "documentation":"<p>The number of messages that trigger memory processing.</p>"
+        }
+      },
+      "documentation":"<p>The trigger configuration based on a message.</p>"
+    },
+    "MessageBasedTriggerInputMessageCountInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":1
+    },
+    "MicrosoftOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Microsoft OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the Microsoft OAuth2 provider.</p>"
+        },
+        "tenantId":{
+          "shape":"TenantIdType",
+          "documentation":"<p>The Microsoft Entra ID (formerly Azure AD) tenant ID for your organization. This identifies the specific tenant within Microsoft's identity platform where your application is registered.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a Microsoft OAuth2 provider.</p>"
+    },
+    "MicrosoftOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the Microsoft provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Microsoft OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a Microsoft OAuth2 provider.</p>"
+    },
+    "ModifyConsolidationConfiguration":{
+      "type":"structure",
+      "members":{
+        "customConsolidationConfiguration":{
+          "shape":"CustomConsolidationConfigurationInput",
+          "documentation":"<p>The updated custom consolidation configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains information for modifying a consolidation configuration.</p>",
+      "union":true
+    },
+    "ModifyExtractionConfiguration":{
+      "type":"structure",
+      "members":{
+        "customExtractionConfiguration":{
+          "shape":"CustomExtractionConfigurationInput",
+          "documentation":"<p>The updated custom extraction configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains information for modifying an extraction configuration.</p>",
+      "union":true
+    },
+    "ModifyInvocationConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "topicArn":{
+          "shape":"Arn",
+          "documentation":"<p>The updated ARN of the SNS topic for job notifications.</p>"
+        },
+        "payloadDeliveryBucketName":{
+          "shape":"ModifyInvocationConfigurationInputPayloadDeliveryBucketNameString",
+          "documentation":"<p>The updated S3 bucket name for event payload delivery.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for updating invocation settings.</p>"
+    },
+    "ModifyInvocationConfigurationInputPayloadDeliveryBucketNameString":{
+      "type":"string",
+      "pattern":"[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]"
+    },
+    "ModifyMemoryStrategies":{
+      "type":"structure",
+      "members":{
+        "addMemoryStrategies":{
+          "shape":"MemoryStrategyInputList",
+          "documentation":"<p>The list of memory strategies to add.</p>"
+        },
+        "modifyMemoryStrategies":{
+          "shape":"ModifyMemoryStrategiesList",
+          "documentation":"<p>The list of memory strategies to modify.</p>"
+        },
+        "deleteMemoryStrategies":{
+          "shape":"DeleteMemoryStrategiesList",
+          "documentation":"<p>The list of memory strategies to delete.</p>"
+        }
+      },
+      "documentation":"<p>Contains information for modifying memory strategies.</p>"
+    },
+    "ModifyMemoryStrategiesList":{
+      "type":"list",
+      "member":{"shape":"ModifyMemoryStrategyInput"}
+    },
+    "ModifyMemoryStrategyInput":{
+      "type":"structure",
+      "required":["memoryStrategyId"],
+      "members":{
+        "memoryStrategyId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the memory strategy to modify.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The updated description of the memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The updated namespaces for the memory strategy.</p>"
+        },
+        "configuration":{
+          "shape":"ModifyStrategyConfiguration",
+          "documentation":"<p>The updated configuration for the memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for modifying a memory strategy.</p>"
+    },
+    "ModifySelfManagedConfiguration":{
+      "type":"structure",
+      "members":{
+        "triggerConditions":{
+          "shape":"TriggerConditionInputList",
+          "documentation":"<p>The updated list of conditions that trigger memory processing.</p>"
+        },
+        "invocationConfiguration":{
+          "shape":"ModifyInvocationConfigurationInput",
+          "documentation":"<p>The updated configuration to invoke self-managed memory processing pipeline.</p>"
+        },
+        "historicalContextWindowSize":{
+          "shape":"ModifySelfManagedConfigurationHistoricalContextWindowSizeInteger",
+          "documentation":"<p>The updated number of historical messages to include in processing context.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for updating the self-managed memory strategy.</p>"
+    },
+    "ModifySelfManagedConfigurationHistoricalContextWindowSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":0
+    },
+    "ModifyStrategyConfiguration":{
+      "type":"structure",
+      "members":{
+        "extraction":{
+          "shape":"ModifyExtractionConfiguration",
+          "documentation":"<p>The updated extraction configuration.</p>"
+        },
+        "consolidation":{
+          "shape":"ModifyConsolidationConfiguration",
+          "documentation":"<p>The updated consolidation configuration.</p>"
+        },
+        "selfManagedConfiguration":{
+          "shape":"ModifySelfManagedConfiguration",
+          "documentation":"<p>The updated self-managed configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains information for modifying a strategy configuration.</p>"
+    },
+    "Name":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,47}"
+    },
+    "Namespace":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-_\\/]*(\\{(actorId|sessionId|memoryStrategyId)\\}[a-zA-Z0-9\\-_\\/]*)*"
+    },
+    "NamespacesList":{
+      "type":"list",
+      "member":{"shape":"Namespace"},
+      "min":1
+    },
+    "NetworkConfiguration":{
+      "type":"structure",
+      "required":["networkMode"],
+      "members":{
+        "networkMode":{
+          "shape":"NetworkMode",
+          "documentation":"<p>The network mode for the AgentCore Runtime.</p>"
+        },
+        "networkModeConfig":{
+          "shape":"VpcConfig",
+          "documentation":"<p>The network mode configuration for the AgentCore Runtime.</p>"
+        }
+      },
+      "documentation":"<p>SecurityConfig for the Agent.</p>"
+    },
+    "NetworkMode":{
+      "type":"string",
+      "enum":[
+        "PUBLIC",
+        "VPC"
+      ]
+    },
+    "NextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\S*"
+    },
+    "NonBlankString":{
+      "type":"string",
+      "pattern":"[\\s\\S]+"
+    },
+    "OAuthCredentialProvider":{
+      "type":"structure",
+      "required":[
+        "providerArn",
+        "scopes"
+      ],
+      "members":{
+        "providerArn":{
+          "shape":"OAuthCredentialProviderArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OAuth credential provider. This ARN identifies the provider in Amazon Web Services.</p>"
+        },
+        "scopes":{
+          "shape":"OAuthScopes",
+          "documentation":"<p>The OAuth scopes for the credential provider. These scopes define the level of access requested from the OAuth provider.</p>"
+        },
+        "customParameters":{
+          "shape":"OAuthCustomParameters",
+          "documentation":"<p>The custom parameters for the OAuth credential provider. These parameters provide additional configuration for the OAuth authentication process.</p>"
+        }
+      },
+      "documentation":"<p>An OAuth credential provider for gateway authentication. This structure contains the configuration for authenticating with the target endpoint using OAuth.</p>"
+    },
+    "OAuthCredentialProviderArn":{
+      "type":"string",
+      "pattern":"arn:([^:]*):([^:]*):([^:]*):([0-9]{12})?:(.+)"
+    },
+    "OAuthCustomParameters":{
+      "type":"map",
+      "key":{"shape":"OAuthCustomParametersKey"},
+      "value":{"shape":"OAuthCustomParametersValue"},
+      "max":10,
+      "min":1
+    },
+    "OAuthCustomParametersKey":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "OAuthCustomParametersValue":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "sensitive":true
+    },
+    "OAuthScope":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "OAuthScopes":{
+      "type":"list",
+      "member":{"shape":"OAuthScope"},
+      "max":100,
+      "min":0
+    },
+    "Oauth2AuthorizationServerMetadata":{
+      "type":"structure",
+      "required":[
+        "issuer",
+        "authorizationEndpoint",
+        "tokenEndpoint"
+      ],
+      "members":{
+        "issuer":{
+          "shape":"IssuerUrlType",
+          "documentation":"<p>The issuer URL for the OAuth2 authorization server.</p>"
+        },
+        "authorizationEndpoint":{
+          "shape":"AuthorizationEndpointType",
+          "documentation":"<p>The authorization endpoint URL for the OAuth2 authorization server.</p>"
+        },
+        "tokenEndpoint":{
+          "shape":"TokenEndpointType",
+          "documentation":"<p>The token endpoint URL for the OAuth2 authorization server.</p>"
+        },
+        "responseTypes":{
+          "shape":"ResponseListType",
+          "documentation":"<p>The supported response types for the OAuth2 authorization server.</p>"
+        },
+        "tokenEndpointAuthMethods":{
+          "shape":"TokenEndpointAuthMethodsType",
+          "documentation":"<p>The authentication methods supported by the token endpoint. This specifies how clients can authenticate when requesting tokens from the authorization server.</p>"
+        }
+      },
+      "documentation":"<p>Contains the authorization server metadata for an OAuth2 provider.</p>"
+    },
+    "Oauth2CredentialProviderItem":{
+      "type":"structure",
+      "required":[
+        "name",
+        "credentialProviderVendor",
+        "credentialProviderArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderVendor":{
+          "shape":"CredentialProviderVendorType",
+          "documentation":"<p>The vendor of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"CredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OAuth2 credential provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an OAuth2 credential provider.</p>"
+    },
+    "Oauth2CredentialProviders":{
+      "type":"list",
+      "member":{"shape":"Oauth2CredentialProviderItem"}
+    },
+    "Oauth2Discovery":{
+      "type":"structure",
+      "members":{
+        "discoveryUrl":{
+          "shape":"DiscoveryUrlType",
+          "documentation":"<p>The discovery URL for the OAuth2 provider.</p>"
+        },
+        "authorizationServerMetadata":{
+          "shape":"Oauth2AuthorizationServerMetadata",
+          "documentation":"<p>The authorization server metadata for the OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Contains the discovery information for an OAuth2 provider.</p>",
+      "union":true
+    },
+    "Oauth2ProviderConfigInput":{
+      "type":"structure",
+      "members":{
+        "customOauth2ProviderConfig":{
+          "shape":"CustomOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a custom OAuth2 provider.</p>"
+        },
+        "googleOauth2ProviderConfig":{
+          "shape":"GoogleOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a Google OAuth2 provider.</p>"
+        },
+        "githubOauth2ProviderConfig":{
+          "shape":"GithubOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a GitHub OAuth2 provider.</p>"
+        },
+        "slackOauth2ProviderConfig":{
+          "shape":"SlackOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a Slack OAuth2 provider.</p>"
+        },
+        "salesforceOauth2ProviderConfig":{
+          "shape":"SalesforceOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a Salesforce OAuth2 provider.</p>"
+        },
+        "microsoftOauth2ProviderConfig":{
+          "shape":"MicrosoftOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a Microsoft OAuth2 provider.</p>"
+        },
+        "atlassianOauth2ProviderConfig":{
+          "shape":"AtlassianOauth2ProviderConfigInput",
+          "documentation":"<p>Configuration settings for Atlassian OAuth2 provider integration.</p>"
+        },
+        "linkedinOauth2ProviderConfig":{
+          "shape":"LinkedinOauth2ProviderConfigInput",
+          "documentation":"<p>Configuration settings for LinkedIn OAuth2 provider integration.</p>"
+        },
+        "includedOauth2ProviderConfig":{
+          "shape":"IncludedOauth2ProviderConfigInput",
+          "documentation":"<p>The configuration for a non-custom OAuth2 provider. This includes settings for supported OAuth2 providers that have built-in integration support.</p>"
+        }
+      },
+      "documentation":"<p>Contains the input configuration for an OAuth2 provider.</p>",
+      "union":true
+    },
+    "Oauth2ProviderConfigOutput":{
+      "type":"structure",
+      "members":{
+        "customOauth2ProviderConfig":{
+          "shape":"CustomOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a custom OAuth2 provider.</p>"
+        },
+        "googleOauth2ProviderConfig":{
+          "shape":"GoogleOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a Google OAuth2 provider.</p>"
+        },
+        "githubOauth2ProviderConfig":{
+          "shape":"GithubOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a GitHub OAuth2 provider.</p>"
+        },
+        "slackOauth2ProviderConfig":{
+          "shape":"SlackOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a Slack OAuth2 provider.</p>"
+        },
+        "salesforceOauth2ProviderConfig":{
+          "shape":"SalesforceOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a Salesforce OAuth2 provider.</p>"
+        },
+        "microsoftOauth2ProviderConfig":{
+          "shape":"MicrosoftOauth2ProviderConfigOutput",
+          "documentation":"<p>The output configuration for a Microsoft OAuth2 provider.</p>"
+        },
+        "atlassianOauth2ProviderConfig":{
+          "shape":"AtlassianOauth2ProviderConfigOutput",
+          "documentation":"<p>The configuration details for the Atlassian OAuth2 provider.</p>"
+        },
+        "linkedinOauth2ProviderConfig":{
+          "shape":"LinkedinOauth2ProviderConfigOutput",
+          "documentation":"<p>The configuration details for the LinkedIn OAuth2 provider.</p>"
+        },
+        "includedOauth2ProviderConfig":{
+          "shape":"IncludedOauth2ProviderConfigOutput",
+          "documentation":"<p>The configuration for a non-custom OAuth2 provider. This includes the configuration details for supported OAuth2 providers that have built-in integration support.</p>"
+        }
+      },
+      "documentation":"<p>Contains the output configuration for an OAuth2 provider.</p>",
+      "union":true
+    },
+    "OverrideType":{
+      "type":"string",
+      "enum":[
+        "SEMANTIC_OVERRIDE",
+        "SUMMARY_OVERRIDE",
+        "USER_PREFERENCE_OVERRIDE",
+        "SELF_MANAGED"
+      ]
+    },
+    "Prompt":{
+      "type":"string",
+      "max":30000,
+      "min":1,
+      "sensitive":true
+    },
+    "ProtocolConfiguration":{
+      "type":"structure",
+      "required":["serverProtocol"],
+      "members":{
+        "serverProtocol":{
+          "shape":"ServerProtocol",
+          "documentation":"<p>The server protocol for the agent runtime. This field specifies which protocol the agent runtime uses to communicate with clients.</p>"
+        }
+      },
+      "documentation":"<p>The protocol configuration for an agent runtime. This structure defines how the agent runtime communicates with clients.</p>"
+    },
+    "RecordingConfig":{
+      "type":"structure",
+      "members":{
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether recording is enabled for the browser. When set to true, browser sessions are recorded.</p>"
+        },
+        "s3Location":{
+          "shape":"S3Location",
+          "documentation":"<p>The Amazon S3 location where browser recordings are stored. This location contains the recorded browser sessions.</p>"
+        }
+      },
+      "documentation":"<p>The recording configuration for a browser. This structure defines how browser sessions are recorded.</p>"
+    },
+    "RequestHeaderAllowlist":{
+      "type":"list",
+      "member":{"shape":"HeaderName"},
+      "max":20,
+      "min":1
+    },
+    "RequestHeaderConfiguration":{
+      "type":"structure",
+      "members":{
+        "requestHeaderAllowlist":{
+          "shape":"RequestHeaderAllowlist",
+          "documentation":"<p>A list of HTTP request headers that are allowed to be passed through to the runtime.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for HTTP request headers that will be passed through to the runtime.</p>",
+      "union":true
+    },
+    "RequiredProperties":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "ResourceLimitExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Exception thrown when a resource limit is exceeded.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when a resource referenced by the operation does not exist</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ResourceOauth2ReturnUrlListType":{
+      "type":"list",
+      "member":{"shape":"ResourceOauth2ReturnUrlType"}
+    },
+    "ResourceOauth2ReturnUrlType":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\w+:(\\/?\\/?)[^\\s]+"
+    },
+    "ResourceType":{
+      "type":"string",
+      "enum":[
+        "SYSTEM",
+        "CUSTOM"
+      ]
+    },
+    "ResponseListType":{
+      "type":"list",
+      "member":{"shape":"ResponseType"}
+    },
+    "ResponseType":{"type":"string"},
+    "RoleArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:aws(-[^:]+)?:iam::([0-9]{12})?:role/.+"
+    },
+    "RuntimeContainerUri":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"([0-9]{12})\\.dkr\\.ecr\\.([a-z0-9-]+)\\.amazonaws\\.com/((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)(?::([^:@]{1,300}))?(?:@(.+))?"
+    },
+    "S3BucketUri":{
+      "type":"string",
+      "pattern":"s3://.{1,2043}"
+    },
+    "S3Configuration":{
+      "type":"structure",
+      "members":{
+        "uri":{
+          "shape":"S3BucketUri",
+          "documentation":"<p>The URI of the Amazon S3 object. This URI specifies the location of the object in Amazon S3.</p>"
+        },
+        "bucketOwnerAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The account ID of the Amazon S3 bucket owner. This ID is used for cross-account access to the bucket.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon S3 configuration for a gateway. This structure defines how the gateway accesses files in Amazon S3.</p>"
+    },
+    "S3Location":{
+      "type":"structure",
+      "required":[
+        "bucket",
+        "prefix"
+      ],
+      "members":{
+        "bucket":{
+          "shape":"S3LocationBucketString",
+          "documentation":"<p>The name of the Amazon S3 bucket. This bucket contains the stored data.</p>"
+        },
+        "prefix":{
+          "shape":"S3LocationPrefixString",
+          "documentation":"<p>The prefix for objects in the Amazon S3 bucket. This prefix is added to the object keys to organize the data.</p>"
+        },
+        "versionId":{
+          "shape":"S3LocationVersionIdString",
+          "documentation":"<p>The version ID of the Amazon Amazon S3 object. If not specified, the latest version of the object is used.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon S3 location for storing data. This structure defines where in Amazon S3 data is stored.</p>"
+    },
+    "S3LocationBucketString":{
+      "type":"string",
+      "pattern":"[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]"
+    },
+    "S3LocationPrefixString":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "S3LocationVersionIdString":{
+      "type":"string",
+      "max":1024,
+      "min":3
+    },
+    "SalesforceOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Salesforce OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the Salesforce OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a Salesforce OAuth2 provider.</p>"
+    },
+    "SalesforceOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the Salesforce provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Salesforce OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a Salesforce OAuth2 provider.</p>"
+    },
+    "SandboxName":{
+      "type":"string",
+      "pattern":"[a-zA-Z][a-zA-Z0-9_]{0,47}"
+    },
+    "SchemaDefinition":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"SchemaType",
+          "documentation":"<p>The type of the schema definition. This field specifies the data type of the schema.</p>"
+        },
+        "properties":{
+          "shape":"SchemaProperties",
+          "documentation":"<p>The properties of the schema definition. These properties define the fields in the schema.</p>"
+        },
+        "required":{
+          "shape":"RequiredProperties",
+          "documentation":"<p>The required fields in the schema definition. These fields must be provided when using the schema.</p>"
+        },
+        "items":{
+          "shape":"SchemaDefinition",
+          "documentation":"<p>The items in the schema definition. This field is used for array types to define the structure of the array elements.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of the schema definition. This description provides information about the purpose and usage of the schema.</p>"
+        }
+      },
+      "documentation":"<p>A schema definition for a gateway target. This structure defines the structure of the API that the target exposes.</p>"
+    },
+    "SchemaProperties":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"SchemaDefinition"}
+    },
+    "SchemaType":{
+      "type":"string",
+      "enum":[
+        "string",
+        "number",
+        "object",
+        "array",
+        "boolean",
+        "integer"
+      ]
+    },
+    "SearchType":{
+      "type":"string",
+      "enum":["SEMANTIC"]
+    },
+    "Secret":{
+      "type":"structure",
+      "required":["secretArn"],
+      "members":{
+        "secretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the secret in AWS Secrets Manager.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a secret in AWS Secrets Manager.</p>"
+    },
+    "SecretArn":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov):secretsmanager:[A-Za-z0-9-]{1,64}:[0-9]{12}:secret:[a-zA-Z0-9-_/+=.@!]+"
+    },
+    "SecurityGroupId":{
+      "type":"string",
+      "pattern":"sg-[0-9a-zA-Z]{8,17}"
+    },
+    "SecurityGroups":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "max":16,
+      "min":1
+    },
+    "SelfManagedConfiguration":{
+      "type":"structure",
+      "required":[
+        "triggerConditions",
+        "invocationConfiguration",
+        "historicalContextWindowSize"
+      ],
+      "members":{
+        "triggerConditions":{
+          "shape":"TriggerConditionsList",
+          "documentation":"<p>A list of conditions that trigger memory processing.</p>"
+        },
+        "invocationConfiguration":{
+          "shape":"InvocationConfiguration",
+          "documentation":"<p>The configuration to use when invoking memory processing.</p>"
+        },
+        "historicalContextWindowSize":{
+          "shape":"Integer",
+          "documentation":"<p>The number of historical messages to include in processing context.</p>"
+        }
+      },
+      "documentation":"<p>A configuration for a self-managed memory strategy.</p>"
+    },
+    "SelfManagedConfigurationInput":{
+      "type":"structure",
+      "required":["invocationConfiguration"],
+      "members":{
+        "triggerConditions":{
+          "shape":"TriggerConditionInputList",
+          "documentation":"<p>A list of conditions that trigger memory processing.</p>"
+        },
+        "invocationConfiguration":{
+          "shape":"InvocationConfigurationInput",
+          "documentation":"<p>Configuration to invoke a self-managed memory processing pipeline with.</p>"
+        },
+        "historicalContextWindowSize":{
+          "shape":"SelfManagedConfigurationInputHistoricalContextWindowSizeInteger",
+          "documentation":"<p>Number of historical messages to include in processing context.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a self-managed memory strategy.</p>"
+    },
+    "SelfManagedConfigurationInputHistoricalContextWindowSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":0
+    },
+    "SemanticConsolidationOverride":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for semantic consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for semantic consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Contains semantic consolidation override configuration.</p>"
+    },
+    "SemanticExtractionOverride":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for semantic extraction.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for semantic extraction.</p>"
+        }
+      },
+      "documentation":"<p>Contains semantic extraction override configuration.</p>"
+    },
+    "SemanticMemoryStrategyInput":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the semantic memory strategy.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the semantic memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with the semantic memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for creating a semantic memory strategy.</p>"
+    },
+    "SemanticOverrideConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "extraction":{
+          "shape":"SemanticOverrideExtractionConfigurationInput",
+          "documentation":"<p>The extraction configuration for a semantic override.</p>"
+        },
+        "consolidation":{
+          "shape":"SemanticOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The consolidation configuration for a semantic override.</p>"
+        }
+      },
+      "documentation":"<p>Input for semantic override configuration in a memory strategy.</p>"
+    },
+    "SemanticOverrideConsolidationConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for semantic consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for semantic consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Input for semantic override consolidation configuration in a memory strategy.</p>"
+    },
+    "SemanticOverrideExtractionConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for semantic extraction.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for semantic extraction.</p>"
+        }
+      },
+      "documentation":"<p>Input for semantic override extraction configuration in a memory strategy.</p>"
+    },
+    "ServerProtocol":{
+      "type":"string",
+      "enum":[
+        "MCP",
+        "HTTP",
+        "A2A"
+      ]
+    },
+    "ServiceException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>An internal error occurred.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when a request is made beyond the service quota</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "SetTokenVaultCMKRequest":{
+      "type":"structure",
+      "required":["kmsConfiguration"],
+      "members":{
+        "tokenVaultId":{
+          "shape":"TokenVaultIdType",
+          "documentation":"<p>The unique identifier of the token vault to update.</p>"
+        },
+        "kmsConfiguration":{
+          "shape":"KmsConfiguration",
+          "documentation":"<p>The KMS configuration for the token vault, including the key type and KMS key ARN.</p>"
+        }
+      }
+    },
+    "SetTokenVaultCMKResponse":{
+      "type":"structure",
+      "required":[
+        "tokenVaultId",
+        "kmsConfiguration",
+        "lastModifiedDate"
+      ],
+      "members":{
+        "tokenVaultId":{
+          "shape":"TokenVaultIdType",
+          "documentation":"<p>The ID of the token vault.</p>"
+        },
+        "kmsConfiguration":{
+          "shape":"KmsConfiguration",
+          "documentation":"<p>The KMS configuration for the token vault.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the token vault was last modified.</p>"
+        }
+      }
+    },
+    "SlackOauth2ProviderConfigInput":{
+      "type":"structure",
+      "required":[
+        "clientId",
+        "clientSecret"
+      ],
+      "members":{
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Slack OAuth2 provider.</p>"
+        },
+        "clientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret for the Slack OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Input configuration for a Slack OAuth2 provider.</p>"
+    },
+    "SlackOauth2ProviderConfigOutput":{
+      "type":"structure",
+      "required":["oauthDiscovery"],
+      "members":{
+        "oauthDiscovery":{
+          "shape":"Oauth2Discovery",
+          "documentation":"<p>The OAuth2 discovery information for the Slack provider.</p>"
+        },
+        "clientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The client ID for the Slack OAuth2 provider.</p>"
+        }
+      },
+      "documentation":"<p>Output configuration for a Slack OAuth2 provider.</p>"
+    },
+    "StatusReason":{
+      "type":"string",
+      "max":2048,
+      "min":0
+    },
+    "StatusReasons":{
+      "type":"list",
+      "member":{"shape":"StatusReason"},
+      "max":100,
+      "min":0
+    },
+    "StrategyConfiguration":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"OverrideType",
+          "documentation":"<p>The type of override for the strategy configuration.</p>"
+        },
+        "extraction":{
+          "shape":"ExtractionConfiguration",
+          "documentation":"<p>The extraction configuration for the memory strategy.</p>"
+        },
+        "consolidation":{
+          "shape":"ConsolidationConfiguration",
+          "documentation":"<p>The consolidation configuration for the memory strategy.</p>"
+        },
+        "selfManagedConfiguration":{
+          "shape":"SelfManagedConfiguration",
+          "documentation":"<p>Self-managed configuration settings.</p>"
+        }
+      },
+      "documentation":"<p>Contains configuration information for a memory strategy.</p>"
+    },
+    "String":{"type":"string"},
+    "SubnetId":{
+      "type":"string",
+      "pattern":"subnet-[0-9a-zA-Z]{8,17}"
+    },
+    "Subnets":{
+      "type":"list",
+      "member":{"shape":"SubnetId"},
+      "max":16,
+      "min":1
+    },
+    "SummaryConsolidationOverride":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for summary consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for summary consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary consolidation override configuration.</p>"
+    },
+    "SummaryMemoryStrategyInput":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the summary memory strategy.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the summary memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with the summary memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for creating a summary memory strategy.</p>"
+    },
+    "SummaryOverrideConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "consolidation":{
+          "shape":"SummaryOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The consolidation configuration for a summary override.</p>"
+        }
+      },
+      "documentation":"<p>Input for summary override configuration in a memory strategy.</p>"
+    },
+    "SummaryOverrideConsolidationConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for summary consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for summary consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Input for summary override consolidation configuration in a memory strategy.</p>"
+    },
+    "SynchronizeGatewayTargetsRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "targetIdList"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The gateway Identifier.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "targetIdList":{
+          "shape":"TargetIdList",
+          "documentation":"<p>The target ID list.</p>"
+        }
+      }
+    },
+    "SynchronizeGatewayTargetsResponse":{
+      "type":"structure",
+      "members":{
+        "targets":{
+          "shape":"GatewayTargetList",
+          "documentation":"<p>The gateway targets for synchronization.</p>"
+        }
+      }
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to tag.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>The tags to add to the resource. A tag is a key-value pair.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"[a-zA-Z0-9\\s._:/=+@-]*"
+    },
+    "TaggableResourcesArn":{
+      "type":"string",
+      "max":1011,
+      "min":20,
+      "pattern":"arn:(?:[^:]+)?:bedrock-agentcore:[a-z0-9-]+:[0-9]{12}:([a-z-]+/[^/]+)(?:/[a-z-]+/[^/]+)*"
+    },
+    "TagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":50,
+      "min":0
+    },
+    "TargetConfiguration":{
+      "type":"structure",
+      "members":{
+        "mcp":{
+          "shape":"McpTargetConfiguration",
+          "documentation":"<p>The Model Context Protocol (MCP) configuration for the target. This configuration defines how the gateway uses MCP to communicate with the target.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a gateway target. This structure defines how the gateway connects to and interacts with the target endpoint.</p>",
+      "union":true
+    },
+    "TargetDescription":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "sensitive":true
+    },
+    "TargetId":{
+      "type":"string",
+      "pattern":"[0-9a-zA-Z]{10}"
+    },
+    "TargetIdList":{
+      "type":"list",
+      "member":{"shape":"TargetId"},
+      "max":1,
+      "min":1
+    },
+    "TargetMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "TargetName":{
+      "type":"string",
+      "pattern":"([0-9a-zA-Z][-]?){1,100}",
+      "sensitive":true
+    },
+    "TargetNextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"\\S*"
+    },
+    "TargetStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "UPDATING",
+        "UPDATE_UNSUCCESSFUL",
+        "DELETING",
+        "READY",
+        "FAILED",
+        "SYNCHRONIZING",
+        "SYNCHRONIZE_UNSUCCESSFUL"
+      ]
+    },
+    "TargetSummaries":{
+      "type":"list",
+      "member":{"shape":"TargetSummary"}
+    },
+    "TargetSummary":{
+      "type":"structure",
+      "required":[
+        "targetId",
+        "name",
+        "status",
+        "createdAt",
+        "updatedAt"
+      ],
+      "members":{
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the target.</p>"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The name of the target.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The current status of the target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The description of the target.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the target was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the target was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a gateway target. A target represents an endpoint that the gateway can connect to.</p>"
+    },
+    "TenantIdType":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "ThrottledException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>API rate limit has been exceeded.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when the number of requests exceeds the limit</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "TimeBasedTrigger":{
+      "type":"structure",
+      "members":{
+        "idleSessionTimeout":{
+          "shape":"Integer",
+          "documentation":"<p>Idle session timeout (seconds) that triggers memory processing.</p>"
+        }
+      },
+      "documentation":"<p>Trigger configuration based on time.</p>"
+    },
+    "TimeBasedTriggerInput":{
+      "type":"structure",
+      "members":{
+        "idleSessionTimeout":{
+          "shape":"TimeBasedTriggerInputIdleSessionTimeoutInteger",
+          "documentation":"<p>Idle session timeout (seconds) that triggers memory processing.</p>"
+        }
+      },
+      "documentation":"<p>Trigger configuration based on time.</p>"
+    },
+    "TimeBasedTriggerInputIdleSessionTimeoutInteger":{
+      "type":"integer",
+      "box":true,
+      "max":3000,
+      "min":10
+    },
+    "Timestamp":{"type":"timestamp"},
+    "TokenAuthMethod":{
+      "type":"string",
+      "pattern":"(client_secret_post|client_secret_basic)"
+    },
+    "TokenBasedTrigger":{
+      "type":"structure",
+      "members":{
+        "tokenCount":{
+          "shape":"Integer",
+          "documentation":"<p>Number of tokens that trigger memory processing.</p>"
+        }
+      },
+      "documentation":"<p>Trigger configuration based on tokens.</p>"
+    },
+    "TokenBasedTriggerInput":{
+      "type":"structure",
+      "members":{
+        "tokenCount":{
+          "shape":"TokenBasedTriggerInputTokenCountInteger",
+          "documentation":"<p>Number of tokens that trigger memory processing.</p>"
+        }
+      },
+      "documentation":"<p>Trigger configuration based on tokens.</p>"
+    },
+    "TokenBasedTriggerInputTokenCountInteger":{
+      "type":"integer",
+      "box":true,
+      "max":500000,
+      "min":100
+    },
+    "TokenEndpointAuthMethodsType":{
+      "type":"list",
+      "member":{"shape":"TokenAuthMethod"},
+      "max":2,
+      "min":1
+    },
+    "TokenEndpointType":{"type":"string"},
+    "TokenVaultIdType":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-_]+"
+    },
+    "ToolDefinition":{
+      "type":"structure",
+      "required":[
+        "name",
+        "description",
+        "inputSchema"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the tool. This name identifies the tool in the Model Context Protocol.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of the tool. This description provides information about the purpose and usage of the tool.</p>"
+        },
+        "inputSchema":{
+          "shape":"SchemaDefinition",
+          "documentation":"<p>The input schema for the tool. This schema defines the structure of the input that the tool accepts.</p>"
+        },
+        "outputSchema":{
+          "shape":"SchemaDefinition",
+          "documentation":"<p>The output schema for the tool. This schema defines the structure of the output that the tool produces.</p>"
+        }
+      },
+      "documentation":"<p>A tool definition for a gateway target. This structure defines a tool that the target exposes through the Model Context Protocol.</p>"
+    },
+    "ToolDefinitions":{
+      "type":"list",
+      "member":{"shape":"ToolDefinition"}
+    },
+    "ToolSchema":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"S3Configuration",
+          "documentation":"<p>The Amazon S3 location of the tool schema. This location contains the schema definition file.</p>"
+        },
+        "inlinePayload":{
+          "shape":"ToolDefinitions",
+          "documentation":"<p>The inline payload of the tool schema. This payload contains the schema definition directly in the request.</p>"
+        }
+      },
+      "documentation":"<p>A tool schema for a gateway target. This structure defines the schema for a tool that the target exposes through the Model Context Protocol.</p>",
+      "union":true
+    },
+    "TriggerCondition":{
+      "type":"structure",
+      "members":{
+        "messageBasedTrigger":{
+          "shape":"MessageBasedTrigger",
+          "documentation":"<p>Message based trigger configuration.</p>"
+        },
+        "tokenBasedTrigger":{
+          "shape":"TokenBasedTrigger",
+          "documentation":"<p>Token based trigger configuration.</p>"
+        },
+        "timeBasedTrigger":{
+          "shape":"TimeBasedTrigger",
+          "documentation":"<p>Time based trigger configuration.</p>"
+        }
+      },
+      "documentation":"<p>Condition that triggers memory processing.</p>",
+      "union":true
+    },
+    "TriggerConditionInput":{
+      "type":"structure",
+      "members":{
+        "messageBasedTrigger":{
+          "shape":"MessageBasedTriggerInput",
+          "documentation":"<p>Message based trigger configuration.</p>"
+        },
+        "tokenBasedTrigger":{
+          "shape":"TokenBasedTriggerInput",
+          "documentation":"<p>Token based trigger configuration.</p>"
+        },
+        "timeBasedTrigger":{
+          "shape":"TimeBasedTriggerInput",
+          "documentation":"<p>Time based trigger configuration.</p>"
+        }
+      },
+      "documentation":"<p>Condition that triggers memory processing.</p>",
+      "union":true
+    },
+    "TriggerConditionInputList":{
+      "type":"list",
+      "member":{"shape":"TriggerConditionInput"},
+      "min":1
+    },
+    "TriggerConditionsList":{
+      "type":"list",
+      "member":{"shape":"TriggerCondition"},
+      "min":1
+    },
+    "UnauthorizedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"NonBlankString"}
+      },
+      "documentation":"<p>This exception is thrown when the JWT bearer token is invalid or not found for OAuth bearer token based access</p>",
+      "error":{
+        "httpStatusCode":401,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"TaggableResourcesArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to untag.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>The tag keys of the tags to remove from the resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateAgentRuntimeEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeId",
+        "endpointName"
+      ],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime associated with the endpoint.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "endpointName":{
+          "shape":"EndpointName",
+          "documentation":"<p>The name of the AgentCore Runtime endpoint to update.</p>",
+          "location":"uri",
+          "locationName":"endpointName"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The updated version of the AgentCore Runtime for the endpoint.</p>"
+        },
+        "description":{
+          "shape":"AgentEndpointDescription",
+          "documentation":"<p>The updated description of the AgentCore Runtime endpoint.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateAgentRuntimeEndpointResponse":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeEndpointArn",
+        "agentRuntimeArn",
+        "status",
+        "createdAt",
+        "lastUpdatedAt"
+      ],
+      "members":{
+        "liveVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The currently deployed version of the AgentCore Runtime on the endpoint.</p>"
+        },
+        "targetVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The target version of the AgentCore Runtime for the endpoint.</p>"
+        },
+        "agentRuntimeEndpointArn":{
+          "shape":"AgentRuntimeEndpointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime endpoint.</p>"
+        },
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AgentCore Runtime.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeEndpointStatus",
+          "documentation":"<p>The current status of the updated AgentCore Runtime endpoint.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime endpoint was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime endpoint was last updated.</p>"
+        }
+      }
+    },
+    "UpdateAgentRuntimeRequest":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeId",
+        "agentRuntimeArtifact",
+        "roleArn",
+        "networkConfiguration"
+      ],
+      "members":{
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the AgentCore Runtime to update.</p>",
+          "location":"uri",
+          "locationName":"agentRuntimeId"
+        },
+        "agentRuntimeArtifact":{
+          "shape":"AgentRuntimeArtifact",
+          "documentation":"<p>The updated artifact of the AgentCore Runtime.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The updated IAM role ARN that provides permissions for the AgentCore Runtime.</p>"
+        },
+        "networkConfiguration":{
+          "shape":"NetworkConfiguration",
+          "documentation":"<p>The updated network configuration for the AgentCore Runtime.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The updated description of the AgentCore Runtime.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The updated authorizer configuration for the AgentCore Runtime.</p>"
+        },
+        "requestHeaderConfiguration":{
+          "shape":"RequestHeaderConfiguration",
+          "documentation":"<p>The updated configuration for HTTP request headers that will be passed through to the runtime.</p>"
+        },
+        "protocolConfiguration":{"shape":"ProtocolConfiguration"},
+        "lifecycleConfiguration":{
+          "shape":"LifecycleConfiguration",
+          "documentation":"<p>The updated life cycle configuration for the AgentCore Runtime.</p>"
+        },
+        "environmentVariables":{
+          "shape":"EnvironmentVariablesMap",
+          "documentation":"<p>Updated environment variables to set in the AgentCore Runtime environment.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateAgentRuntimeResponse":{
+      "type":"structure",
+      "required":[
+        "agentRuntimeArn",
+        "agentRuntimeId",
+        "agentRuntimeVersion",
+        "createdAt",
+        "lastUpdatedAt",
+        "status"
+      ],
+      "members":{
+        "agentRuntimeArn":{
+          "shape":"AgentRuntimeArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated AgentCore Runtime.</p>"
+        },
+        "agentRuntimeId":{
+          "shape":"AgentRuntimeId",
+          "documentation":"<p>The unique identifier of the updated AgentCore Runtime.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the updated AgentCore Runtime.</p>"
+        },
+        "agentRuntimeVersion":{
+          "shape":"AgentRuntimeVersion",
+          "documentation":"<p>The version of the updated AgentCore Runtime.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime was created.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the AgentCore Runtime was last updated.</p>"
+        },
+        "status":{
+          "shape":"AgentRuntimeStatus",
+          "documentation":"<p>The current status of the updated AgentCore Runtime.</p>"
+        }
+      }
+    },
+    "UpdateApiKeyCredentialProviderRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "apiKey"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider to update.</p>"
+        },
+        "apiKey":{
+          "shape":"ApiKeyType",
+          "documentation":"<p>The new API key to use for authentication. This value replaces the existing API key and is encrypted and stored securely.</p>"
+        }
+      }
+    },
+    "UpdateApiKeyCredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "apiKeySecretArn",
+        "name",
+        "credentialProviderArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "apiKeySecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key secret in AWS Secrets Manager.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the API key credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"ApiKeyCredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the API key credential provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the API key credential provider was last updated.</p>"
+        }
+      }
+    },
+    "UpdateGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "name",
+        "roleArn",
+        "protocolType",
+        "authorizerType"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The identifier of the gateway to update.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway. This name must be the same as the one when the gateway was created.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The updated description for the gateway.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The updated IAM role ARN that provides permissions for the gateway.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>The updated protocol type for the gateway.</p>"
+        },
+        "protocolConfiguration":{"shape":"GatewayProtocolConfiguration"},
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>The updated authorizer type for the gateway.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The updated authorizer configuration for the gateway.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The updated ARN of the KMS key used to encrypt the gateway.</p>"
+        },
+        "exceptionLevel":{
+          "shape":"ExceptionLevel",
+          "documentation":"<p>The level of detail in error messages returned when invoking the gateway.</p> <ul> <li> <p>If the value is <code>DEBUG</code>, granular exception messages are returned to help a user debug the gateway.</p> </li> <li> <p>If the value is omitted, a generic error message is returned to the end user.</p> </li> </ul>"
+        }
+      }
+    },
+    "UpdateGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "gatewayId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "protocolType",
+        "authorizerType"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated gateway.</p>"
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the updated gateway.</p>"
+        },
+        "gatewayUrl":{
+          "shape":"GatewayUrl",
+          "documentation":"<p>An endpoint for invoking the updated gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway was last updated.</p>"
+        },
+        "status":{
+          "shape":"GatewayStatus",
+          "documentation":"<p>The current status of the updated gateway.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the updated gateway.</p>"
+        },
+        "name":{
+          "shape":"GatewayName",
+          "documentation":"<p>The name of the gateway.</p>"
+        },
+        "description":{
+          "shape":"GatewayDescription",
+          "documentation":"<p>The updated description of the gateway.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The updated IAM role ARN that provides permissions for the gateway.</p>"
+        },
+        "protocolType":{
+          "shape":"GatewayProtocolType",
+          "documentation":"<p>The updated protocol type for the gateway.</p>"
+        },
+        "protocolConfiguration":{"shape":"GatewayProtocolConfiguration"},
+        "authorizerType":{
+          "shape":"AuthorizerType",
+          "documentation":"<p>The updated authorizer type for the gateway.</p>"
+        },
+        "authorizerConfiguration":{
+          "shape":"AuthorizerConfiguration",
+          "documentation":"<p>The updated authorizer configuration for the gateway.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The updated ARN of the KMS key used to encrypt the gateway.</p>"
+        },
+        "workloadIdentityDetails":{
+          "shape":"WorkloadIdentityDetails",
+          "documentation":"<p>The workload identity details for the updated gateway.</p>"
+        },
+        "exceptionLevel":{
+          "shape":"ExceptionLevel",
+          "documentation":"<p>The level of detail in error messages returned when invoking the gateway.</p> <ul> <li> <p>If the value is <code>DEBUG</code>, granular exception messages are returned to help a user debug the gateway.</p> </li> <li> <p>If the value is omitted, a generic error message is returned to the end user.</p> </li> </ul>"
+        }
+      }
+    },
+    "UpdateGatewayTargetRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayIdentifier",
+        "targetId",
+        "name",
+        "targetConfiguration"
+      ],
+      "members":{
+        "gatewayIdentifier":{
+          "shape":"GatewayIdentifier",
+          "documentation":"<p>The unique identifier of the gateway associated with the target.</p>",
+          "location":"uri",
+          "locationName":"gatewayIdentifier"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the gateway target to update.</p>",
+          "location":"uri",
+          "locationName":"targetId"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The updated name for the gateway target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The updated description for the gateway target.</p>"
+        },
+        "targetConfiguration":{"shape":"TargetConfiguration"},
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The updated credential provider configurations for the gateway target.</p>"
+        }
+      }
+    },
+    "UpdateGatewayTargetResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayArn",
+        "targetId",
+        "createdAt",
+        "updatedAt",
+        "status",
+        "name",
+        "targetConfiguration",
+        "credentialProviderConfigurations"
+      ],
+      "members":{
+        "gatewayArn":{
+          "shape":"GatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway.</p>"
+        },
+        "targetId":{
+          "shape":"TargetId",
+          "documentation":"<p>The unique identifier of the updated gateway target.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway target was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The timestamp when the gateway target was last updated.</p>"
+        },
+        "status":{
+          "shape":"TargetStatus",
+          "documentation":"<p>The current status of the updated gateway target.</p>"
+        },
+        "statusReasons":{
+          "shape":"StatusReasons",
+          "documentation":"<p>The reasons for the current status of the updated gateway target.</p>"
+        },
+        "name":{
+          "shape":"TargetName",
+          "documentation":"<p>The updated name of the gateway target.</p>"
+        },
+        "description":{
+          "shape":"TargetDescription",
+          "documentation":"<p>The updated description of the gateway target.</p>"
+        },
+        "targetConfiguration":{"shape":"TargetConfiguration"},
+        "credentialProviderConfigurations":{
+          "shape":"CredentialProviderConfigurations",
+          "documentation":"<p>The updated credential provider configurations for the gateway target.</p>"
+        },
+        "lastSynchronizedAt":{
+          "shape":"DateTimestamp",
+          "documentation":"<p>The date and time at which the targets were last synchronized.</p>"
+        }
+      }
+    },
+    "UpdateMemoryInput":{
+      "type":"structure",
+      "required":["memoryId"],
+      "members":{
+        "clientToken":{
+          "shape":"UpdateMemoryInputClientTokenString",
+          "documentation":"<p>A client token is used for keeping track of idempotent requests. It can contain a session id which can be around 250 chars, combined with a unique AWS identifier.</p>",
+          "idempotencyToken":true
+        },
+        "memoryId":{
+          "shape":"MemoryId",
+          "documentation":"<p>The unique identifier of the memory to update.</p>",
+          "location":"uri",
+          "locationName":"memoryId"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The updated description of the AgentCore Memory resource.</p>"
+        },
+        "eventExpiryDuration":{
+          "shape":"UpdateMemoryInputEventExpiryDurationInteger",
+          "documentation":"<p>The number of days after which memory events will expire, between 7 and 365 days.</p>"
+        },
+        "memoryExecutionRoleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the IAM role that provides permissions for the AgentCore Memory resource.</p>"
+        },
+        "memoryStrategies":{
+          "shape":"ModifyMemoryStrategies",
+          "documentation":"<p>The memory strategies to add, modify, or delete.</p>"
+        }
+      }
+    },
+    "UpdateMemoryInputClientTokenString":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "UpdateMemoryInputEventExpiryDurationInteger":{
+      "type":"integer",
+      "box":true,
+      "max":365,
+      "min":7
+    },
+    "UpdateMemoryOutput":{
+      "type":"structure",
+      "members":{
+        "memory":{
+          "shape":"Memory",
+          "documentation":"<p>The updated AgentCore Memory resource details.</p>"
+        }
+      }
+    },
+    "UpdateOauth2CredentialProviderRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "credentialProviderVendor",
+        "oauth2ProviderConfigInput"
+      ],
+      "members":{
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider to update.</p>"
+        },
+        "credentialProviderVendor":{
+          "shape":"CredentialProviderVendorType",
+          "documentation":"<p>The vendor of the OAuth2 credential provider.</p>"
+        },
+        "oauth2ProviderConfigInput":{
+          "shape":"Oauth2ProviderConfigInput",
+          "documentation":"<p>The configuration input for the OAuth2 provider.</p>"
+        }
+      }
+    },
+    "UpdateOauth2CredentialProviderResponse":{
+      "type":"structure",
+      "required":[
+        "clientSecretArn",
+        "name",
+        "credentialProviderVendor",
+        "credentialProviderArn",
+        "oauth2ProviderConfigOutput",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "clientSecretArn":{
+          "shape":"Secret",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the client secret in AWS Secrets Manager.</p>"
+        },
+        "name":{
+          "shape":"CredentialProviderName",
+          "documentation":"<p>The name of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderVendor":{
+          "shape":"CredentialProviderVendorType",
+          "documentation":"<p>The vendor of the OAuth2 credential provider.</p>"
+        },
+        "credentialProviderArn":{
+          "shape":"CredentialProviderArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OAuth2 credential provider.</p>"
+        },
+        "callbackUrl":{
+          "shape":"String",
+          "documentation":"<p>Callback URL to register on the OAuth2 credential provider as an allowed callback URL. This URL is where the OAuth2 authorization server redirects users after they complete the authorization flow.</p>"
+        },
+        "oauth2ProviderConfigOutput":{
+          "shape":"Oauth2ProviderConfigOutput",
+          "documentation":"<p>The configuration output for the OAuth2 provider.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the OAuth2 credential provider was last updated.</p>"
+        }
+      }
+    },
+    "UpdateWorkloadIdentityRequest":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity to update.</p>"
+        },
+        "allowedResourceOauth2ReturnUrls":{
+          "shape":"ResourceOauth2ReturnUrlListType",
+          "documentation":"<p>The new list of allowed OAuth2 return URLs for resources associated with this workload identity. This list replaces the existing list.</p>"
+        }
+      }
+    },
+    "UpdateWorkloadIdentityResponse":{
+      "type":"structure",
+      "required":[
+        "name",
+        "workloadIdentityArn",
+        "createdTime",
+        "lastUpdatedTime"
+      ],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity.</p>"
+        },
+        "workloadIdentityArn":{
+          "shape":"WorkloadIdentityArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the workload identity.</p>"
+        },
+        "allowedResourceOauth2ReturnUrls":{
+          "shape":"ResourceOauth2ReturnUrlListType",
+          "documentation":"<p>The list of allowed OAuth2 return URLs for resources associated with this workload identity.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the workload identity was created.</p>"
+        },
+        "lastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the workload identity was last updated.</p>"
+        }
+      }
+    },
+    "UserPreferenceConsolidationOverride":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for user preference consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for user preference consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Contains user preference consolidation override configuration.</p>"
+    },
+    "UserPreferenceExtractionOverride":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for user preference extraction.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for user preference extraction.</p>"
+        }
+      },
+      "documentation":"<p>Contains user preference extraction override configuration.</p>"
+    },
+    "UserPreferenceMemoryStrategyInput":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the user preference memory strategy.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the user preference memory strategy.</p>"
+        },
+        "namespaces":{
+          "shape":"NamespacesList",
+          "documentation":"<p>The namespaces associated with the user preference memory strategy.</p>"
+        }
+      },
+      "documentation":"<p>Input for creating a user preference memory strategy.</p>"
+    },
+    "UserPreferenceOverrideConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "extraction":{
+          "shape":"UserPreferenceOverrideExtractionConfigurationInput",
+          "documentation":"<p>The extraction configuration for a user preference override.</p>"
+        },
+        "consolidation":{
+          "shape":"UserPreferenceOverrideConsolidationConfigurationInput",
+          "documentation":"<p>The consolidation configuration for a user preference override.</p>"
+        }
+      },
+      "documentation":"<p>Input for user preference override configuration in a memory strategy.</p>"
+    },
+    "UserPreferenceOverrideConsolidationConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for user preference consolidation.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for user preference consolidation.</p>"
+        }
+      },
+      "documentation":"<p>Input for user preference override consolidation configuration in a memory strategy.</p>"
+    },
+    "UserPreferenceOverrideExtractionConfigurationInput":{
+      "type":"structure",
+      "required":[
+        "appendToPrompt",
+        "modelId"
+      ],
+      "members":{
+        "appendToPrompt":{
+          "shape":"Prompt",
+          "documentation":"<p>The text to append to the prompt for user preference extraction.</p>"
+        },
+        "modelId":{
+          "shape":"String",
+          "documentation":"<p>The model ID to use for user preference extraction.</p>"
+        }
+      },
+      "documentation":"<p>Input for user preference override extraction configuration in a memory strategy.</p>"
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "reason"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "reason":{"shape":"ValidationExceptionReason"},
+        "fieldList":{"shape":"ValidationExceptionFieldList"}
+      },
+      "documentation":"<p>The input fails to satisfy the constraints specified by the service.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "message"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A message describing why this field failed validation.</p>"
+        }
+      },
+      "documentation":"<p>Stores information about a field passed inside a request that resulted in an exception.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "CannotParse",
+        "FieldValidationFailed",
+        "IdempotentParameterMismatchException",
+        "EventInOtherSession",
+        "ResourceConflict"
+      ]
+    },
+    "VpcConfig":{
+      "type":"structure",
+      "required":[
+        "securityGroups",
+        "subnets"
+      ],
+      "members":{
+        "securityGroups":{
+          "shape":"SecurityGroups",
+          "documentation":"<p>The security groups associated with the VPC configuration.</p>"
+        },
+        "subnets":{
+          "shape":"Subnets",
+          "documentation":"<p>The subnets associated with the VPC configuration.</p>"
+        }
+      },
+      "documentation":"<p>VpcConfig for the Agent.</p>"
+    },
+    "WorkloadIdentityArn":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "WorkloadIdentityArnType":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "WorkloadIdentityDetails":{
+      "type":"structure",
+      "required":["workloadIdentityArn"],
+      "members":{
+        "workloadIdentityArn":{
+          "shape":"WorkloadIdentityArn",
+          "documentation":"<p>The ARN associated with the workload identity.</p>"
+        }
+      },
+      "documentation":"<p>The information about the workload identity.</p>"
+    },
+    "WorkloadIdentityList":{
+      "type":"list",
+      "member":{"shape":"WorkloadIdentityType"}
+    },
+    "WorkloadIdentityNameType":{
+      "type":"string",
+      "max":255,
+      "min":3,
+      "pattern":"[A-Za-z0-9_.-]+"
+    },
+    "WorkloadIdentityType":{
+      "type":"structure",
+      "required":[
+        "name",
+        "workloadIdentityArn"
+      ],
+      "members":{
+        "name":{
+          "shape":"WorkloadIdentityNameType",
+          "documentation":"<p>The name of the workload identity.</p>"
+        },
+        "workloadIdentityArn":{
+          "shape":"WorkloadIdentityArnType",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the workload identity.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a workload identity.</p>"
+    },
+    "entryPoint":{
+      "type":"string",
+      "max":128,
+      "min":1
+    }
+  },
+  "documentation":"<p>Welcome to the Amazon Bedrock AgentCore Control plane API reference. Control plane actions configure, create, modify, and monitor Amazon Web Services resources.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/waiters-2.json 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-agentcore-control/2023-06-05/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,26 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "MemoryCreated" : {
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetMemory",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "memory.status",
+        "state" : "retry",
+        "expected" : "CREATING"
+      }, {
+        "matcher" : "path",
+        "argument" : "memory.status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "memory.status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-data-automation/2023-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -78,7 +78,7 @@
       "http":{
         "method":"DELETE",
         "requestUri":"/blueprints/{blueprintArn}/",
-        "responseCode":204
+        "responseCode":200
       },
       "input":{"shape":"DeleteBlueprintRequest"},
       "output":{"shape":"DeleteBlueprintResponse"},
@@ -97,7 +97,7 @@
       "http":{
         "method":"DELETE",
         "requestUri":"/data-automation-projects/{projectArn}/",
-        "responseCode":204
+        "responseCode":200
       },
       "input":{"shape":"DeleteDataAutomationProjectRequest"},
       "output":{"shape":"DeleteDataAutomationProjectResponse"},
@@ -127,7 +127,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets an existing Amazon Bedrock Data Automation Blueprint</p>"
+      "documentation":"<p>Gets an existing Amazon Bedrock Data Automation Blueprint</p>",
+      "readonly":true
     },
     "GetDataAutomationProject":{
       "name":"GetDataAutomationProject",
@@ -145,7 +146,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets an existing Amazon Bedrock Data Automation Project</p>"
+      "documentation":"<p>Gets an existing Amazon Bedrock Data Automation Project</p>",
+      "readonly":true
     },
     "ListBlueprints":{
       "name":"ListBlueprints",
@@ -163,7 +165,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists all existing Amazon Bedrock Data Automation Blueprints</p>"
+      "documentation":"<p>Lists all existing Amazon Bedrock Data Automation Blueprints</p>",
+      "readonly":true
     },
     "ListDataAutomationProjects":{
       "name":"ListDataAutomationProjects",
@@ -181,7 +184,63 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists all existing Amazon Bedrock Data Automation Projects</p>"
+      "documentation":"<p>Lists all existing Amazon Bedrock Data Automation Projects</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/listTagsForResource",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>List tags for an Amazon Bedrock Data Automation resource</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tagResource",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Tag an Amazon Bedrock Data Automation resource</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/untagResource",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Untag an Amazon Bedrock Data Automation resource</p>"
     },
     "UpdateBlueprint":{
       "name":"UpdateBlueprint",
@@ -213,6 +272,7 @@
       "input":{"shape":"UpdateDataAutomationProjectRequest"},
       "output":{"shape":"UpdateDataAutomationProjectResponse"},
       "errors":[
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -242,7 +302,8 @@
       "required":["state"],
       "members":{
         "state":{"shape":"State"},
-        "types":{"shape":"AudioExtractionCategoryTypes"}
+        "types":{"shape":"AudioExtractionCategoryTypes"},
+        "typeConfiguration":{"shape":"AudioExtractionCategoryTypeConfiguration"}
       },
       "documentation":"<p>Category of Audio Extraction</p>"
     },
@@ -250,15 +311,55 @@
       "type":"string",
       "enum":[
         "AUDIO_CONTENT_MODERATION",
-        "CHAPTER_CONTENT_MODERATION",
-        "TRANSCRIPT"
+        "TRANSCRIPT",
+        "TOPIC_CONTENT_MODERATION"
       ]
     },
+    "AudioExtractionCategoryTypeConfiguration":{
+      "type":"structure",
+      "members":{
+        "transcript":{"shape":"TranscriptConfiguration"}
+      },
+      "documentation":"<p>Configuration for different audio extraction category types</p>"
+    },
     "AudioExtractionCategoryTypes":{
       "type":"list",
       "member":{"shape":"AudioExtractionCategoryType"},
       "documentation":"<p>List of Audio Extraction Category Type</p>"
     },
+    "AudioGenerativeOutputLanguage":{
+      "type":"string",
+      "documentation":"<p>Configuration for Audio output language</p>",
+      "enum":[
+        "DEFAULT",
+        "EN"
+      ]
+    },
+    "AudioInputLanguages":{
+      "type":"list",
+      "member":{"shape":"Language"},
+      "documentation":"<p>List of supported audio languages</p>"
+    },
+    "AudioLanguageConfiguration":{
+      "type":"structure",
+      "members":{
+        "inputLanguages":{"shape":"AudioInputLanguages"},
+        "generativeOutputLanguage":{"shape":"AudioGenerativeOutputLanguage"},
+        "identifyMultipleLanguages":{
+          "shape":"Boolean",
+          "documentation":"<p>Enable multiple language identification in audio</p>"
+        }
+      },
+      "documentation":"<p>Optional configuration for audio language settings</p>"
+    },
+    "AudioOverrideConfiguration":{
+      "type":"structure",
+      "members":{
+        "modalityProcessing":{"shape":"ModalityProcessingConfiguration"},
+        "languageConfiguration":{"shape":"AudioLanguageConfiguration"}
+      },
+      "documentation":"<p>Override Configuration of Audio</p>"
+    },
     "AudioStandardExtraction":{
       "type":"structure",
       "required":["category"],
@@ -280,8 +381,8 @@
       "type":"string",
       "enum":[
         "AUDIO_SUMMARY",
-        "CHAPTER_SUMMARY",
-        "IAB"
+        "IAB",
+        "TOPIC_SUMMARY"
       ]
     },
     "AudioStandardGenerativeFieldTypes":{
@@ -366,7 +467,6 @@
       "documentation":"<p>Schema of the blueprint</p>",
       "max":100000,
       "min":1,
-      "pattern":"[a-zA-Z0-9\\s!\"\\#\\$%'&\\(\\)\\*\\+\\,\\-\\./:;=\\?@\\[\\\\\\]\\^_`\\{\\|\\}~><]+",
       "sensitive":true
     },
     "BlueprintStage":{
@@ -414,6 +514,18 @@
       "member":{"shape":"BlueprintSummary"},
       "documentation":"<p>List of Blueprints</p>"
     },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "ChannelLabelingConfiguration":{
+      "type":"structure",
+      "required":["state"],
+      "members":{
+        "state":{"shape":"State"}
+      },
+      "documentation":"<p>Channel labeling configuration</p>"
+    },
     "ClientToken":{
       "type":"string",
       "documentation":"<p>Client specified token used for idempotency checks</p>",
@@ -449,7 +561,8 @@
           "shape":"ClientToken",
           "idempotencyToken":true
         },
-        "encryptionConfiguration":{"shape":"EncryptionConfiguration"}
+        "encryptionConfiguration":{"shape":"EncryptionConfiguration"},
+        "tags":{"shape":"TagList"}
       },
       "documentation":"<p>Create Blueprint Request</p>"
     },
@@ -503,7 +616,8 @@
           "shape":"ClientToken",
           "idempotencyToken":true
         },
-        "encryptionConfiguration":{"shape":"EncryptionConfiguration"}
+        "encryptionConfiguration":{"shape":"EncryptionConfiguration"},
+        "tags":{"shape":"TagList"}
       },
       "documentation":"<p>Create DataAutomationProject Request</p>"
     },
@@ -559,6 +673,8 @@
     "DataAutomationProjectDescription":{
       "type":"string",
       "documentation":"<p>Description of the DataAutomationProject</p>",
+      "max":300,
+      "min":0,
       "sensitive":true
     },
     "DataAutomationProjectFilter":{
@@ -649,8 +765,7 @@
     },
     "DeleteBlueprintResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Delete Blueprint Response</p>"
     },
     "DeleteDataAutomationProjectRequest":{
@@ -675,6 +790,16 @@
       },
       "documentation":"<p>Delete DataAutomationProject Response</p>"
     },
+    "DesiredModality":{
+      "type":"string",
+      "documentation":"<p>Desired Modality types</p>",
+      "enum":[
+        "IMAGE",
+        "DOCUMENT",
+        "AUDIO",
+        "VIDEO"
+      ]
+    },
     "DocumentBoundingBox":{
       "type":"structure",
       "required":["state"],
@@ -749,7 +874,8 @@
     "DocumentOverrideConfiguration":{
       "type":"structure",
       "members":{
-        "splitter":{"shape":"SplitterConfiguration"}
+        "splitter":{"shape":"SplitterConfiguration"},
+        "modalityProcessing":{"shape":"ModalityProcessingConfiguration"}
       },
       "documentation":"<p>Override Configuration of Document</p>"
     },
@@ -791,6 +917,20 @@
       },
       "documentation":"<p>KMS Encryption Configuration</p>"
     },
+    "EncryptionContextKey":{
+      "type":"string",
+      "documentation":"<p>Encryption context key.</p>",
+      "max":2000,
+      "min":1,
+      "pattern":".*\\S.*"
+    },
+    "EncryptionContextValue":{
+      "type":"string",
+      "documentation":"<p>Encryption context value.</p>",
+      "max":2000,
+      "min":1,
+      "pattern":".*\\S.*"
+    },
     "GetBlueprintRequest":{
       "type":"structure",
       "required":["blueprintArn"],
@@ -866,7 +1006,8 @@
       "type":"string",
       "enum":[
         "CONTENT_MODERATION",
-        "TEXT_DETECTION"
+        "TEXT_DETECTION",
+        "LOGOS"
       ]
     },
     "ImageExtractionCategoryTypes":{
@@ -874,6 +1015,13 @@
       "member":{"shape":"ImageExtractionCategoryType"},
       "documentation":"<p>List of Image Extraction Category</p>"
     },
+    "ImageOverrideConfiguration":{
+      "type":"structure",
+      "members":{
+        "modalityProcessing":{"shape":"ModalityProcessingConfiguration"}
+      },
+      "documentation":"<p>Override Configuration of Image</p>"
+    },
     "ImageStandardExtraction":{
       "type":"structure",
       "required":[
@@ -927,8 +1075,8 @@
     },
     "KmsEncryptionContext":{
       "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"},
+      "key":{"shape":"EncryptionContextKey"},
+      "value":{"shape":"EncryptionContextValue"},
       "documentation":"<p>KMS Encryption Context</p>",
       "min":1
     },
@@ -936,7 +1084,25 @@
       "type":"string",
       "documentation":"<p>KMS Key Identifier</p>",
       "max":2048,
-      "min":1
+      "min":1,
+      "pattern":"[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]+"
+    },
+    "Language":{
+      "type":"string",
+      "documentation":"<p>Supported input languages</p>",
+      "enum":[
+        "EN",
+        "DE",
+        "ES",
+        "FR",
+        "IT",
+        "PT",
+        "JA",
+        "KO",
+        "CN",
+        "TW",
+        "HK"
+      ]
     },
     "ListBlueprintsRequest":{
       "type":"structure",
@@ -979,6 +1145,19 @@
       },
       "documentation":"<p>List DataAutomationProject Response</p>"
     },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceARN"],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"}
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{"shape":"TagList"}
+      }
+    },
     "MaxResults":{
       "type":"integer",
       "documentation":"<p>Max Results</p>",
@@ -986,6 +1165,23 @@
       "max":1000,
       "min":1
     },
+    "ModalityProcessingConfiguration":{
+      "type":"structure",
+      "members":{
+        "state":{"shape":"State"}
+      },
+      "documentation":"<p>Configuration to enable/disable processing of modality</p>"
+    },
+    "ModalityRoutingConfiguration":{
+      "type":"structure",
+      "members":{
+        "jpeg":{"shape":"DesiredModality"},
+        "png":{"shape":"DesiredModality"},
+        "mp4":{"shape":"DesiredModality"},
+        "mov":{"shape":"DesiredModality"}
+      },
+      "documentation":"<p>Configuration for routing file type to desired modality</p>"
+    },
     "NextToken":{
       "type":"string",
       "documentation":"<p>Pagination token</p>",
@@ -1001,7 +1197,11 @@
     "OverrideConfiguration":{
       "type":"structure",
       "members":{
-        "document":{"shape":"DocumentOverrideConfiguration"}
+        "document":{"shape":"DocumentOverrideConfiguration"},
+        "image":{"shape":"ImageOverrideConfiguration"},
+        "video":{"shape":"VideoOverrideConfiguration"},
+        "audio":{"shape":"AudioOverrideConfiguration"},
+        "modalityRouting":{"shape":"ModalityRoutingConfiguration"}
       },
       "documentation":"<p>Override configuration</p>"
     },
@@ -1037,6 +1237,14 @@
       },
       "exception":true
     },
+    "SpeakerLabelingConfiguration":{
+      "type":"structure",
+      "required":["state"],
+      "members":{
+        "state":{"shape":"State"}
+      },
+      "documentation":"<p>Speaker labeling configuration</p>"
+    },
     "SplitterConfiguration":{
       "type":"structure",
       "members":{
@@ -1062,7 +1270,66 @@
         "DISABLED"
       ]
     },
-    "String":{"type":"string"},
+    "Tag":{
+      "type":"structure",
+      "required":[
+        "key",
+        "value"
+      ],
+      "members":{
+        "key":{"shape":"TagKey"},
+        "value":{"shape":"TagValue"}
+      },
+      "documentation":"<p>Key value pair of a tag</p>"
+    },
+    "TagKey":{
+      "type":"string",
+      "documentation":"<p>Defines the context of the tag.</p>",
+      "max":128,
+      "min":1
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "documentation":"<p>List of tag keys</p>",
+      "max":200,
+      "min":0
+    },
+    "TagList":{
+      "type":"list",
+      "member":{"shape":"Tag"},
+      "documentation":"<p>List of tags</p>",
+      "max":200,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceARN",
+        "tags"
+      ],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"},
+        "tags":{"shape":"TagList"}
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "documentation":"<p>Defines the value within the context. e.g. &lt;key=reason, value=training&gt;.</p>",
+      "max":256,
+      "min":0
+    },
+    "TaggableResourceArn":{
+      "type":"string",
+      "documentation":"<p>ARN of a taggable resource</p>",
+      "max":1011,
+      "min":20,
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock:[a-z0-9-]*:[0-9]{12}:(blueprint|data-automation-project)/[a-zA-Z0-9-]{12,36}"
+    },
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -1075,14 +1342,39 @@
       },
       "exception":true
     },
+    "TranscriptConfiguration":{
+      "type":"structure",
+      "members":{
+        "speakerLabeling":{"shape":"SpeakerLabelingConfiguration"},
+        "channelLabeling":{"shape":"ChannelLabelingConfiguration"}
+      },
+      "documentation":"<p>Configuration for transcript related features</p>"
+    },
     "Type":{
       "type":"string",
       "documentation":"<p>Type</p>",
       "enum":[
         "DOCUMENT",
-        "IMAGE"
+        "IMAGE",
+        "AUDIO",
+        "VIDEO"
       ]
     },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceARN",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"},
+        "tagKeys":{"shape":"TagKeyList"}
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateBlueprintRequest":{
       "type":"structure",
       "required":[
@@ -1097,7 +1389,8 @@
           "locationName":"blueprintArn"
         },
         "schema":{"shape":"BlueprintSchema"},
-        "blueprintStage":{"shape":"BlueprintStage"}
+        "blueprintStage":{"shape":"BlueprintStage"},
+        "encryptionConfiguration":{"shape":"EncryptionConfiguration"}
       },
       "documentation":"<p>Update Blueprint Request</p>"
     },
@@ -1126,7 +1419,8 @@
         "projectDescription":{"shape":"DataAutomationProjectDescription"},
         "standardOutputConfiguration":{"shape":"StandardOutputConfiguration"},
         "customOutputConfiguration":{"shape":"CustomOutputConfiguration"},
-        "overrideConfiguration":{"shape":"OverrideConfiguration"}
+        "overrideConfiguration":{"shape":"OverrideConfiguration"},
+        "encryptionConfiguration":{"shape":"EncryptionConfiguration"}
       },
       "documentation":"<p>Update DataAutomationProject Request</p>"
     },
@@ -1192,7 +1486,8 @@
       "enum":[
         "CONTENT_MODERATION",
         "TEXT_DETECTION",
-        "TRANSCRIPT"
+        "TRANSCRIPT",
+        "LOGOS"
       ]
     },
     "VideoExtractionCategoryTypes":{
@@ -1200,6 +1495,13 @@
       "member":{"shape":"VideoExtractionCategoryType"},
       "documentation":"<p>List of Video Extraction Category Type</p>"
     },
+    "VideoOverrideConfiguration":{
+      "type":"structure",
+      "members":{
+        "modalityProcessing":{"shape":"ModalityProcessingConfiguration"}
+      },
+      "documentation":"<p>Override Configuration of Video</p>"
+    },
     "VideoStandardExtraction":{
       "type":"structure",
       "required":[
@@ -1225,8 +1527,8 @@
       "type":"string",
       "enum":[
         "VIDEO_SUMMARY",
-        "SCENE_SUMMARY",
-        "IAB"
+        "IAB",
+        "CHAPTER_SUMMARY"
       ]
     },
     "VideoStandardGenerativeFieldTypes":{
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-data-automation-runtime/2024-06-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,8 +24,8 @@
       "input":{"shape":"GetDataAutomationStatusRequest"},
       "output":{"shape":"GetDataAutomationStatusResponse"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"}
@@ -42,13 +42,65 @@
       "output":{"shape":"InvokeDataAutomationAsyncResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Async API: Invoke data automation.</p>",
       "idempotent":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List tags for an Amazon Bedrock Data Automation resource</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Tag an Amazon Bedrock Data Automation resource</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Untag an Amazon Bedrock Data Automation resource</p>"
     }
   },
   "shapes":{
@@ -60,6 +112,16 @@
       "documentation":"<p>This exception will be thrown when customer does not have access to API.</p>",
       "exception":true
     },
+    "AssetProcessingConfiguration":{
+      "type":"structure",
+      "members":{
+        "video":{
+          "shape":"VideoAssetProcessingConfiguration",
+          "documentation":"<p>Video asset processing configuration</p>"
+        }
+      },
+      "documentation":"<p>Config containing asset processing related knobs for all modalities</p>"
+    },
     "AutomationJobStatus":{
       "type":"string",
       "documentation":"<p>List of status supported by automation jobs</p>",
@@ -104,6 +166,7 @@
         "documentation":"<p>Blueprint.</p>"
       },
       "documentation":"<p>Blueprint list.</p>",
+      "max":40,
       "min":1
     },
     "BlueprintStage":{
@@ -134,11 +197,11 @@
     },
     "DataAutomationConfiguration":{
       "type":"structure",
-      "required":["dataAutomationArn"],
+      "required":["dataAutomationProjectArn"],
       "members":{
-        "dataAutomationArn":{
+        "dataAutomationProjectArn":{
           "shape":"DataAutomationArn",
-          "documentation":"<p>Data automation arn.</p>"
+          "documentation":"<p>Data automation project arn.</p>"
         },
         "stage":{
           "shape":"DataAutomationStage",
@@ -147,6 +210,13 @@
       },
       "documentation":"<p>Data automation configuration.</p>"
     },
+    "DataAutomationProfileArn":{
+      "type":"string",
+      "documentation":"<p>Data automation profile arn.</p>",
+      "max":128,
+      "min":1,
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:(aws|[0-9]{12}):data-automation-profile/[a-zA-Z0-9-_.]+"
+    },
     "DataAutomationStage":{
       "type":"string",
       "documentation":"<p>Data automation stage.</p>",
@@ -160,8 +230,8 @@
       "required":["kmsKeyId"],
       "members":{
         "kmsKeyId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>KMS key id.</p>"
+          "shape":"KMSKeyId",
+          "documentation":"<p>Customer KMS key used for encryption</p>"
         },
         "kmsEncryptionContext":{
           "shape":"EncryptionContextMap",
@@ -249,6 +319,10 @@
         "s3Uri":{
           "shape":"S3Uri",
           "documentation":"<p>S3 uri.</p>"
+        },
+        "assetProcessingConfiguration":{
+          "shape":"AssetProcessingConfiguration",
+          "documentation":"<p>Asset processing configuration</p>"
         }
       },
       "documentation":"<p>Input configuration.</p>"
@@ -273,7 +347,8 @@
       "type":"structure",
       "required":[
         "inputConfiguration",
-        "outputConfiguration"
+        "outputConfiguration",
+        "dataAutomationProfileArn"
       ],
       "members":{
         "clientToken":{
@@ -304,6 +379,14 @@
         "blueprints":{
           "shape":"BlueprintList",
           "documentation":"<p>Blueprint list.</p>"
+        },
+        "dataAutomationProfileArn":{
+          "shape":"DataAutomationProfileArn",
+          "documentation":"<p>Data automation profile ARN</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>List of tags.</p>"
         }
       },
       "documentation":"<p>Invoke Data Automation Async Request</p>"
@@ -319,13 +402,28 @@
       },
       "documentation":"<p>Invoke Data Automation Async Response</p>"
     },
-    "NonBlankString":{
+    "KMSKeyId":{
       "type":"string",
-      "pattern":"[\\s\\S]*"
+      "max":2048,
+      "min":1,
+      "pattern":"[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]+"
     },
-    "NonEmptyString":{
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceARN"],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"}
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{"shape":"TagList"}
+      }
+    },
+    "NonBlankString":{
       "type":"string",
-      "pattern":".*\\S.*"
+      "pattern":"[\\s\\S]*"
     },
     "NotificationConfiguration":{
       "type":"structure",
@@ -362,7 +460,7 @@
       "documentation":"<p>A path in S3</p>",
       "max":1024,
       "min":1,
-      "pattern":"s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]([^\\x00-\\x1F\\x7F\\{^}%`\\]\">\\[~<#|]*)?"
+      "pattern":"s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/[^\\x00-\\x1F\\x7F\\{^}%`\\]\">\\[~<#|]*)?"
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
@@ -373,6 +471,69 @@
       "exception":true
     },
     "String":{"type":"string"},
+    "Tag":{
+      "type":"structure",
+      "required":[
+        "key",
+        "value"
+      ],
+      "members":{
+        "key":{"shape":"TagKey"},
+        "value":{"shape":"TagValue"}
+      },
+      "documentation":"<p>Key value pair of a tag</p>"
+    },
+    "TagKey":{
+      "type":"string",
+      "documentation":"<p>Defines the context of the tag.</p>",
+      "max":128,
+      "min":1,
+      "pattern":"(?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*"
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "documentation":"<p>List of tag keys</p>",
+      "max":200,
+      "min":0
+    },
+    "TagList":{
+      "type":"list",
+      "member":{"shape":"Tag"},
+      "documentation":"<p>List of tags</p>",
+      "max":200,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceARN",
+        "tags"
+      ],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"},
+        "tags":{"shape":"TagList"}
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "TagValue":{
+      "type":"string",
+      "documentation":"<p>Defines the value within the context. e.g. &lt;key=reason, value=training&gt;.</p>",
+      "max":256,
+      "min":0,
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
+    },
+    "TaggableResourceArn":{
+      "type":"string",
+      "documentation":"<p>ARN of a taggable resource</p>",
+      "max":1011,
+      "min":20,
+      "pattern":"arn:aws(|-cn|-us-gov):bedrock:[a-zA-Z0-9-]*:[0-9]{12}:data-automation-invocation/[a-zA-Z0-9-_]+"
+    },
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -381,6 +542,50 @@
       "documentation":"<p>This exception will be thrown when customer reached API TPS limit.</p>",
       "exception":true
     },
+    "TimestampSegment":{
+      "type":"structure",
+      "required":[
+        "startTimeMillis",
+        "endTimeMillis"
+      ],
+      "members":{
+        "startTimeMillis":{
+          "shape":"TimestampSegmentStartTimeMillisLong",
+          "documentation":"<p>Start timestamp in milliseconds</p>"
+        },
+        "endTimeMillis":{
+          "shape":"TimestampSegmentEndTimeMillisLong",
+          "documentation":"<p>End timestamp in milliseconds</p>"
+        }
+      },
+      "documentation":"<p>Timestamp segment</p>"
+    },
+    "TimestampSegmentEndTimeMillisLong":{
+      "type":"long",
+      "box":true,
+      "min":300000
+    },
+    "TimestampSegmentStartTimeMillisLong":{
+      "type":"long",
+      "box":true,
+      "min":0
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceARN",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceARN":{"shape":"TaggableResourceArn"},
+        "tagKeys":{"shape":"TagKeyList"}
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -388,6 +593,27 @@
       },
       "documentation":"<p>This exception will be thrown when customer provided invalid parameters.</p>",
       "exception":true
+    },
+    "VideoAssetProcessingConfiguration":{
+      "type":"structure",
+      "members":{
+        "segmentConfiguration":{
+          "shape":"VideoSegmentConfiguration",
+          "documentation":"<p>Delimits the segment of the input that will be processed</p>"
+        }
+      },
+      "documentation":"<p>Video asset processing configuration</p>"
+    },
+    "VideoSegmentConfiguration":{
+      "type":"structure",
+      "members":{
+        "timestampSegment":{
+          "shape":"TimestampSegment",
+          "documentation":"<p>Timestamp segment</p>"
+        }
+      },
+      "documentation":"<p>Delimits the segment of the input that will be processed</p>",
+      "union":true
     }
   },
   "documentation":"<p>Amazon Bedrock Data Automation Runtime</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-runtime/2023-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/bedrock-runtime/2023-09-30/service-2.json 2.31.35-1/awscli/botocore/data/bedrock-runtime/2023-09-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/bedrock-runtime/2023-09-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/bedrock-runtime/2023-09-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,13 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-09-30",
-    "auth":["aws.auth#sigv4"],
+    "auth":[
+      "aws.auth#sigv4",
+      "smithy.api#httpBearerAuth"
+    ],
     "endpointPrefix":"bedrock-runtime",
     "protocol":"rest-json",
+    "protocolSettings":{"h2":"optional"},
     "protocols":["rest-json"],
     "serviceFullName":"Amazon Bedrock Runtime",
     "serviceId":"Bedrock Runtime",
@@ -27,6 +31,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
@@ -43,8 +48,8 @@
       "output":{"shape":"ConverseResponse"},
       "errors":[
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ModelTimeoutException"},
         {"shape":"InternalServerException"},
         {"shape":"ServiceUnavailableException"},
@@ -65,8 +70,8 @@
       "output":{"shape":"ConverseStreamResponse"},
       "errors":[
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ModelTimeoutException"},
         {"shape":"InternalServerException"},
         {"shape":"ServiceUnavailableException"},
@@ -76,6 +81,26 @@
       ],
       "documentation":"<p>Sends messages to the specified Amazon Bedrock model and returns the response in a stream. <code>ConverseStream</code> provides a consistent API that works with all Amazon Bedrock models that support messages. This allows you to write code once and use it with different models. Should a model have unique inference parameters, you can also pass those unique parameters to the model. </p> <p>To find out if a model supports streaming, call <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetFoundationModel.html\">GetFoundationModel</a> and check the <code>responseStreamingSupported</code> field in the response.</p> <note> <p>The CLI doesn't support streaming operations in Amazon Bedrock, including <code>ConverseStream</code>.</p> </note> <p>Amazon Bedrock doesn't store any text, images, or documents that you provide as content. The data is only used to generate the response.</p> <p>You can submit a prompt by including it in the <code>messages</code> field, specifying the <code>modelId</code> of a foundation model or inference profile to run inference on it, and including any other fields that are relevant to your use case.</p> <p>You can also submit a prompt from Prompt management by specifying the ARN of the prompt version and including a map of variables to values in the <code>promptVariables</code> field. You can append more messages to the prompt by using the <code>messages</code> field. If you use a prompt from Prompt management, you can't include the following fields in the request: <code>additionalModelRequestFields</code>, <code>inferenceConfig</code>, <code>system</code>, or <code>toolConfig</code>. Instead, these fields must be defined through Prompt management. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-use.html\">Use a prompt from Prompt management</a>.</p> <p>For information about the Converse API, see <i>Use the Converse API</i> in the <i>Amazon Bedrock User Guide</i>. To use a guardrail, see <i>Use a guardrail with the Converse API</i> in the <i>Amazon Bedrock User Guide</i>. To use a tool with a model, see <i>Tool use (Function calling)</i> in the <i>Amazon Bedrock User Guide</i> </p> <p>For example code, see <i>Conversation streaming example</i> in the <i>Amazon Bedrock User Guide</i>. </p> <p>This operation requires permission for the <code>bedrock:InvokeModelWithResponseStream</code> action.</p> <important> <p>To deny all inference access to resources that you specify in the modelId field, you need to deny access to the <code>bedrock:InvokeModel</code> and <code>bedrock:InvokeModelWithResponseStream</code> actions. Doing this also denies access to the resource through the base inference actions (<a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html\">InvokeModel</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html\">InvokeModelWithResponseStream</a>). For more information see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-deny-inference\">Deny access for inference on specific models</a>. </p> </important> <p>For troubleshooting some of the common errors you might encounter when using the <code>ConverseStream</code> API, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html\">Troubleshooting Amazon Bedrock API Error Codes</a> in the Amazon Bedrock User Guide</p>"
     },
+    "CountTokens":{
+      "name":"CountTokens",
+      "http":{
+        "method":"POST",
+        "requestUri":"/model/{modelId}/count-tokens",
+        "responseCode":200
+      },
+      "input":{"shape":"CountTokensRequest"},
+      "output":{"shape":"CountTokensResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Returns the token count for a given inference request. This operation helps you estimate token usage before sending requests to foundation models by returning the token count that would be used if the same input were sent to the model in an inference request.</p> <p>Token counting is model-specific because different models use different tokenization strategies. The token count returned by this operation will match the token count that would be charged if the same input were sent to the model in an <code>InvokeModel</code> or <code>Converse</code> request.</p> <p>You can use this operation to:</p> <ul> <li> <p>Estimate costs before sending inference requests.</p> </li> <li> <p>Optimize prompts to fit within token limits.</p> </li> <li> <p>Plan for token usage in your applications.</p> </li> </ul> <p>This operation accepts the same input formats as <code>InvokeModel</code> and <code>Converse</code>, allowing you to count tokens for both raw text inputs and structured conversation formats.</p> <p>The following operations are related to <code>CountTokens</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/API/API_runtime_InvokeModel.html\">InvokeModel</a> - Sends inference requests to foundation models</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/bedrock/latest/API/API_runtime_Converse.html\">Converse</a> - Sends conversation-based inference requests to foundation models</p> </li> </ul>",
+      "readonly":true
+    },
     "GetAsyncInvoke":{
       "name":"GetAsyncInvoke",
       "http":{
@@ -91,7 +116,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieve information about an asynchronous invocation.</p>"
+      "documentation":"<p>Retrieve information about an asynchronous invocation.</p>",
+      "readonly":true
     },
     "InvokeModel":{
       "name":"InvokeModel",
@@ -110,12 +136,36 @@
         {"shape":"InternalServerException"},
         {"shape":"ServiceUnavailableException"},
         {"shape":"ValidationException"},
-        {"shape":"ModelNotReadyException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ModelNotReadyException"},
         {"shape":"ModelErrorException"}
       ],
       "documentation":"<p>Invokes the specified Amazon Bedrock model to run inference using the prompt and inference parameters provided in the request body. You use model inference to generate text, images, and embeddings.</p> <p>For example code, see <i>Invoke model code examples</i> in the <i>Amazon Bedrock User Guide</i>. </p> <p>This operation requires permission for the <code>bedrock:InvokeModel</code> action.</p> <important> <p>To deny all inference access to resources that you specify in the modelId field, you need to deny access to the <code>bedrock:InvokeModel</code> and <code>bedrock:InvokeModelWithResponseStream</code> actions. Doing this also denies access to the resource through the Converse API actions (<a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a>). For more information see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-deny-inference\">Deny access for inference on specific models</a>. </p> </important> <p>For troubleshooting some of the common errors you might encounter when using the <code>InvokeModel</code> API, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html\">Troubleshooting Amazon Bedrock API Error Codes</a> in the Amazon Bedrock User Guide</p>"
     },
+    "InvokeModelWithBidirectionalStream":{
+      "name":"InvokeModelWithBidirectionalStream",
+      "http":{
+        "method":"POST",
+        "requestUri":"/model/{modelId}/invoke-with-bidirectional-stream",
+        "responseCode":200
+      },
+      "input":{"shape":"InvokeModelWithBidirectionalStreamRequest"},
+      "output":{"shape":"InvokeModelWithBidirectionalStreamResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ModelTimeoutException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ModelStreamErrorException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ModelNotReadyException"},
+        {"shape":"ModelErrorException"}
+      ],
+      "documentation":"<p>Invoke the specified Amazon Bedrock model to run inference using the bidirectional stream. The response is returned in a stream that remains open for 8 minutes. A single session can contain multiple prompts and responses from the model. The prompts to the model are provided as audio files and the model's responses are spoken back to the user and transcribed.</p> <p>It is possible for users to interrupt the model's response with a new prompt, which will halt the response speech. The model will retain contextual awareness of the conversation while pivoting to respond to the new prompt.</p>"
+    },
     "InvokeModelWithResponseStream":{
       "name":"InvokeModelWithResponseStream",
       "http":{
@@ -134,8 +184,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ModelStreamErrorException"},
         {"shape":"ValidationException"},
-        {"shape":"ModelNotReadyException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ModelNotReadyException"},
         {"shape":"ModelErrorException"}
       ],
       "documentation":"<p>Invoke the specified Amazon Bedrock model to run inference using the prompt and inference parameters provided in the request body. The response is returned in a stream.</p> <p>To see if a model supports streaming, call <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetFoundationModel.html\">GetFoundationModel</a> and check the <code>responseStreamingSupported</code> field in the response.</p> <note> <p>The CLI doesn't support streaming operations in Amazon Bedrock, including <code>InvokeModelWithResponseStream</code>.</p> </note> <p>For example code, see <i>Invoke model with streaming code example</i> in the <i>Amazon Bedrock User Guide</i>. </p> <p>This operation requires permissions to perform the <code>bedrock:InvokeModelWithResponseStream</code> action. </p> <important> <p>To deny all inference access to resources that you specify in the modelId field, you need to deny access to the <code>bedrock:InvokeModel</code> and <code>bedrock:InvokeModelWithResponseStream</code> actions. Doing this also denies access to the resource through the Converse API actions (<a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a> and <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a>). For more information see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-deny-inference\">Deny access for inference on specific models</a>. </p> </important> <p>For troubleshooting some of the common errors you might encounter when using the <code>InvokeModelWithResponseStream</code> API, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html\">Troubleshooting Amazon Bedrock API Error Codes</a> in the Amazon Bedrock User Guide</p>"
@@ -155,7 +205,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists asynchronous invocations.</p>"
+      "documentation":"<p>Lists asynchronous invocations.</p>",
+      "readonly":true
     },
     "StartAsyncInvoke":{
       "name":"StartAsyncInvoke",
@@ -168,8 +219,8 @@
       "output":{"shape":"StartAsyncInvokeResponse"},
       "errors":[
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
         {"shape":"ServiceUnavailableException"},
         {"shape":"ValidationException"},
@@ -199,9 +250,8 @@
     },
     "AnyToolChoice":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>The model must request at least one tool (no text is generated). For example, <code>{\"any\" : {}}</code>.</p>"
+      "members":{},
+      "documentation":"<p>The model must request at least one tool (no text is generated). For example, <code>{\"any\" : {}}</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ApplyGuardrailRequest":{
       "type":"structure",
@@ -231,6 +281,10 @@
         "content":{
           "shape":"GuardrailContentBlockList",
           "documentation":"<p>The content details used in the request to apply the guardrail.</p>"
+        },
+        "outputScope":{
+          "shape":"GuardrailOutputScope",
+          "documentation":"<p>Specifies the scope of the output that you get in the response. Set to <code>FULL</code> to return the entire output, including any detected and non-detected entries in the response for enhanced debugging.</p> <p>Note that the full output scope doesn't apply to word filters or regex in sensitive information filters. It does apply to all other filtering policies, including sensitive information with filters that can detect personally identifiable information (PII).</p>"
         }
       }
     },
@@ -251,6 +305,10 @@
           "shape":"GuardrailAction",
           "documentation":"<p>The action taken in the response from the guardrail.</p>"
         },
+        "actionReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the action taken when harmful content is detected.</p>"
+        },
         "outputs":{
           "shape":"GuardrailOutputContentList",
           "documentation":"<p>The output details in the response from the guardrail.</p>"
@@ -381,16 +439,197 @@
     },
     "AutoToolChoice":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>The Model automatically decides if a tool should be called or whether to generate text instead. For example, <code>{\"auto\" : {}}</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide</p>"
+    },
+    "AutomatedReasoningRuleIdentifier":{
+      "type":"string",
+      "max":12,
+      "min":0,
+      "pattern":"[a-z0-9]{12}"
+    },
+    "BidirectionalInputPayloadPart":{
+      "type":"structure",
+      "members":{
+        "bytes":{
+          "shape":"PartBody",
+          "documentation":"<p>The audio content for the bidirectional input.</p>"
+        }
+      },
+      "documentation":"<p>Payload content for the bidirectional input. The input is an audio stream.</p>",
+      "event":true,
+      "sensitive":true
+    },
+    "BidirectionalOutputPayloadPart":{
+      "type":"structure",
       "members":{
+        "bytes":{
+          "shape":"PartBody",
+          "documentation":"<p>The speech output of the bidirectional stream.</p>"
+        }
       },
-      "documentation":"<p>The Model automatically decides if a tool should be called or whether to generate text instead. For example, <code>{\"auto\" : {}}</code>.</p>"
+      "documentation":"<p>Output from the bidirectional stream. The output is speech and a text transcription.</p>",
+      "event":true,
+      "sensitive":true
     },
+    "Blob":{"type":"blob"},
     "Body":{
       "type":"blob",
       "max":25000000,
       "min":0,
       "sensitive":true
     },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CachePointBlock":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"CachePointType",
+          "documentation":"<p>Specifies the type of cache point within the CachePointBlock.</p>"
+        }
+      },
+      "documentation":"<p>Defines a section of content to be cached for reuse in subsequent API calls.</p>"
+    },
+    "CachePointType":{
+      "type":"string",
+      "enum":["default"]
+    },
+    "Citation":{
+      "type":"structure",
+      "members":{
+        "title":{
+          "shape":"String",
+          "documentation":"<p>The title or identifier of the source document being cited.</p>"
+        },
+        "sourceContent":{
+          "shape":"CitationSourceContentList",
+          "documentation":"<p>The specific content from the source document that was referenced or cited in the generated response.</p>"
+        },
+        "location":{
+          "shape":"CitationLocation",
+          "documentation":"<p>The precise location within the source document where the cited content can be found, including character positions, page numbers, or chunk identifiers.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a citation that references a specific source document. Citations provide traceability between the model's generated response and the source documents that informed that response.</p>"
+    },
+    "CitationGeneratedContent":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text content that was generated by the model and is supported by the associated citation.</p>"
+        }
+      },
+      "documentation":"<p>Contains the generated text content that corresponds to or is supported by a citation from a source document.</p>",
+      "union":true
+    },
+    "CitationGeneratedContentList":{
+      "type":"list",
+      "member":{"shape":"CitationGeneratedContent"}
+    },
+    "CitationLocation":{
+      "type":"structure",
+      "members":{
+        "web":{
+          "shape":"WebLocation",
+          "documentation":"<p>The web URL that was cited for this reference.</p>"
+        },
+        "documentChar":{
+          "shape":"DocumentCharLocation",
+          "documentation":"<p>The character-level location within the document where the cited content is found.</p>"
+        },
+        "documentPage":{
+          "shape":"DocumentPageLocation",
+          "documentation":"<p>The page-level location within the document where the cited content is found.</p>"
+        },
+        "documentChunk":{
+          "shape":"DocumentChunkLocation",
+          "documentation":"<p>The chunk-level location within the document where the cited content is found, typically used for documents that have been segmented into logical chunks.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the precise location within a source document where cited content can be found. This can include character-level positions, page numbers, or document chunks depending on the document type and indexing method.</p>",
+      "union":true
+    },
+    "CitationSourceContent":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text content from the source document that is being cited.</p>"
+        }
+      },
+      "documentation":"<p>Contains the actual text content from a source document that is being cited or referenced in the model's response.</p>",
+      "union":true
+    },
+    "CitationSourceContentDelta":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>An incremental update to the text content from the source document that is being cited.</p>"
+        }
+      },
+      "documentation":"<p>Contains incremental updates to the source content text during streaming responses, allowing clients to build up the cited content progressively.</p>"
+    },
+    "CitationSourceContentList":{
+      "type":"list",
+      "member":{"shape":"CitationSourceContent"}
+    },
+    "CitationSourceContentListDelta":{
+      "type":"list",
+      "member":{"shape":"CitationSourceContentDelta"}
+    },
+    "Citations":{
+      "type":"list",
+      "member":{"shape":"Citation"}
+    },
+    "CitationsConfig":{
+      "type":"structure",
+      "required":["enabled"],
+      "members":{
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether citations from the selected document should be used in the model's response. When set to true, the model can generate citations that reference the source documents used to inform the response.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for enabling and controlling document citations in Converse API responses. When enabled, the model can include citation information that links generated content back to specific source documents.</p>"
+    },
+    "CitationsContentBlock":{
+      "type":"structure",
+      "members":{
+        "content":{
+          "shape":"CitationGeneratedContentList",
+          "documentation":"<p>The generated content that is supported by the associated citations.</p>"
+        },
+        "citations":{
+          "shape":"Citations",
+          "documentation":"<p>An array of citations that reference the source documents used to generate the associated content.</p>"
+        }
+      },
+      "documentation":"<p>A content block that contains both generated text and associated citation information. This block type is returned when document citations are enabled, providing traceability between the generated content and the source documents that informed the response.</p>"
+    },
+    "CitationsDelta":{
+      "type":"structure",
+      "members":{
+        "title":{
+          "shape":"String",
+          "documentation":"<p>The title or identifier of the source document being cited.</p>"
+        },
+        "sourceContent":{
+          "shape":"CitationSourceContentListDelta",
+          "documentation":"<p>The specific content from the source document that was referenced or cited in the generated response.</p>"
+        },
+        "location":{
+          "shape":"CitationLocation",
+          "documentation":"<p>Specifies the precise location within a source document where cited content can be found. This can include character-level positions, page numbers, or document chunks depending on the document type and indexing method.</p>"
+        }
+      },
+      "documentation":"<p>Contains incremental updates to citation information during streaming responses. This allows clients to build up citation data progressively as the response is generated.</p>"
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -432,7 +671,19 @@
         },
         "guardContent":{
           "shape":"GuardrailConverseContentBlock",
-          "documentation":"<p>Contains the content to assess with the guardrail. If you don't specify <code>guardContent</code> in a call to the Converse API, the guardrail (if passed in the Converse API) assesses the entire message.</p> <p>For more information, see <i>Use a guardrail with the Converse API</i> in the <i>Amazon Bedrock User Guide</i>. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>Contains the content to assess with the guardrail. If you don't specify <code>guardContent</code> in a call to the Converse API, the guardrail (if passed in the Converse API) assesses the entire message.</p> <p>For more information, see <i>Use a guardrail with the Converse API</i> in the <i>Amazon Bedrock User Guide</i>.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>CachePoint to include in the message.</p>"
+        },
+        "reasoningContent":{
+          "shape":"ReasoningContentBlock",
+          "documentation":"<p>Contains content regarding the reasoning that is carried out by the model. Reasoning refers to a Chain of Thought (CoT) that the model generates to enhance the accuracy of its final response.</p>"
+        },
+        "citationsContent":{
+          "shape":"CitationsContentBlock",
+          "documentation":"<p>A content block that contains both generated text and associated citation information, providing traceability between the response and source documents.</p>"
         }
       },
       "documentation":"<p>A block of content for a message that you pass to, or receive from, a model with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a> or <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a> API operations.</p>",
@@ -448,9 +699,21 @@
         "toolUse":{
           "shape":"ToolUseBlockDelta",
           "documentation":"<p>Information about a tool that the model is requesting to use.</p>"
+        },
+        "toolResult":{
+          "shape":"ToolResultBlocksDelta",
+          "documentation":"<p>An incremental update that contains the results from a tool call.</p>"
+        },
+        "reasoningContent":{
+          "shape":"ReasoningContentBlockDelta",
+          "documentation":"<p>Contains content regarding the reasoning that is carried out by the model. Reasoning refers to a Chain of Thought (CoT) that the model generates to enhance the accuracy of its final response.</p>"
+        },
+        "citation":{
+          "shape":"CitationsDelta",
+          "documentation":"<p>Incremental citation information that is streamed as part of the response generation process.</p>"
         }
       },
-      "documentation":"<p>A bock of content in a streaming response.</p>",
+      "documentation":"<p>A block of content in a streaming response.</p>",
       "union":true
     },
     "ContentBlockDeltaEvent":{
@@ -478,6 +741,10 @@
         "toolUse":{
           "shape":"ToolUseBlockStart",
           "documentation":"<p>Information about a tool that the model is requesting to use.</p>"
+        },
+        "toolResult":{
+          "shape":"ToolResultBlockStart",
+          "documentation":"<p>The </p>"
         }
       },
       "documentation":"<p>Content block start information.</p>",
@@ -529,7 +796,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)|([a-zA-Z0-9-:.]+)|(^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?))$|(^arn:aws:sagemaker:[a-z0-9-]+:[0-9]{12}:endpoint/[a-zA-Z0-9-]+$)|(^arn:aws(-[^:]+)?:bedrock:([0-9a-z-]{1,20}):([0-9]{12}):default-prompt-router/[a-zA-Z0-9-:.]+$)"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:custom-model-deployment/[a-z0-9]{12})|([0-9]{12}:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)|([a-zA-Z0-9-:.]+)|(^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?))$|(^arn:aws:sagemaker:[a-z0-9-]+:[0-9]{12}:endpoint/[a-zA-Z0-9-]+$)|(^arn:aws(-[^:]+)?:bedrock:([0-9a-z-]{1,20}):([0-9]{12}):(default-)?prompt-router/[a-zA-Z0-9-:.]+$)"
     },
     "ConverseMetrics":{
       "type":"structure",
@@ -730,11 +997,11 @@
         },
         "validationException":{
           "shape":"ValidationException",
-          "documentation":"<p>The input fails to satisfy the constraints specified by <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-validation-error\">ValidationError</a> in the Amazon Bedrock User Guide</p>"
+          "documentation":"<p>The input fails to satisfy the constraints specified by <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-validation-error\">ValidationError</a> in the Amazon Bedrock User Guide.</p>"
         },
         "throttlingException":{
           "shape":"ThrottlingException",
-          "documentation":"<p>Your request was denied due to exceeding the account quotas for <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-throttling-exception\">ThrottlingException</a> in the Amazon Bedrock User Guide</p>"
+          "documentation":"<p>Your request was denied due to exceeding the account quotas for <i>Amazon Bedrock</i>. For troubleshooting this error, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html#ts-throttling-exception\">ThrottlingException</a> in the Amazon Bedrock User Guide.</p>"
         },
         "serviceUnavailableException":{
           "shape":"ServiceUnavailableException",
@@ -829,7 +1096,21 @@
           "documentation":"<p>The request's prompt router.</p>"
         }
       },
-      "documentation":"<p>The trace object in a response from <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a>. Currently, you can only trace guardrails.</p>"
+      "documentation":"<p>The trace object in a response from <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a>.</p>"
+    },
+    "ConverseTokensRequest":{
+      "type":"structure",
+      "members":{
+        "messages":{
+          "shape":"Messages",
+          "documentation":"<p>An array of messages to count tokens for.</p>"
+        },
+        "system":{
+          "shape":"SystemContentBlocks",
+          "documentation":"<p>The system content blocks to count tokens for. System content provides instructions or context to the model about how it should behave or respond. The token count will include any system content provided.</p>"
+        }
+      },
+      "documentation":"<p>The inputs from a <code>Converse</code> API request for token counting.</p> <p>This structure mirrors the input format for the <code>Converse</code> operation, allowing you to count tokens for conversation-based inference requests.</p>"
     },
     "ConverseTrace":{
       "type":"structure",
@@ -843,18 +1124,60 @@
           "documentation":"<p>The request's prompt router.</p>"
         }
       },
-      "documentation":"<p>The trace object in a response from <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a>. Currently, you can only trace guardrails.</p>"
+      "documentation":"<p>The trace object in a response from <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a>.</p>"
     },
-    "Document":{
+    "CountTokensInput":{
       "type":"structure",
       "members":{
+        "invokeModel":{
+          "shape":"InvokeModelTokensRequest",
+          "documentation":"<p>An <code>InvokeModel</code> request for which to count tokens. Use this field when you want to count tokens for a raw text input that would be sent to the <code>InvokeModel</code> operation.</p>"
+        },
+        "converse":{
+          "shape":"ConverseTokensRequest",
+          "documentation":"<p>A <code>Converse</code> request for which to count tokens. Use this field when you want to count tokens for a conversation-based input that would be sent to the <code>Converse</code> operation.</p>"
+        }
       },
+      "documentation":"<p>The input value for token counting. The value should be either an <code>InvokeModel</code> or <code>Converse</code> request body. </p>",
+      "union":true
+    },
+    "CountTokensRequest":{
+      "type":"structure",
+      "required":[
+        "modelId",
+        "input"
+      ],
+      "members":{
+        "modelId":{
+          "shape":"FoundationModelVersionIdentifier",
+          "documentation":"<p>The unique identifier or ARN of the foundation model to use for token counting. Each model processes tokens differently, so the token count is specific to the model you specify.</p>",
+          "location":"uri",
+          "locationName":"modelId"
+        },
+        "input":{
+          "shape":"CountTokensInput",
+          "documentation":"<p>The input for which to count tokens. The structure of this parameter depends on whether you're counting tokens for an <code>InvokeModel</code> or <code>Converse</code> request:</p> <ul> <li> <p>For <code>InvokeModel</code> requests, provide the request body in the <code>invokeModel</code> field</p> </li> <li> <p>For <code>Converse</code> requests, provide the messages and system content in the <code>converse</code> field</p> </li> </ul> <p>The input format must be compatible with the model specified in the <code>modelId</code> parameter.</p>"
+        }
+      }
+    },
+    "CountTokensResponse":{
+      "type":"structure",
+      "required":["inputTokens"],
+      "members":{
+        "inputTokens":{
+          "shape":"Integer",
+          "documentation":"<p>The number of tokens in the provided input according to the specified model's tokenization rules. This count represents the number of input tokens that would be processed if the same input were sent to the model in an inference request. Use this value to estimate costs and ensure your inputs stay within model token limits.</p>"
+        }
+      }
+    },
+    "Document":{
+      "type":"structure",
+      "members":{},
       "document":true
     },
     "DocumentBlock":{
       "type":"structure",
       "required":[
-        "format",
         "name",
         "source"
       ],
@@ -870,6 +1193,14 @@
         "source":{
           "shape":"DocumentSource",
           "documentation":"<p>Contains the content of the document.</p>"
+        },
+        "context":{
+          "shape":"String",
+          "documentation":"<p>Contextual information about how the document should be processed or interpreted by the model when generating citations.</p>"
+        },
+        "citations":{
+          "shape":"CitationsConfig",
+          "documentation":"<p>Configuration settings that control how citations should be generated for this specific document.</p>"
         }
       },
       "documentation":"<p>A document to include in a message.</p>"
@@ -879,6 +1210,87 @@
       "max":200,
       "min":1
     },
+    "DocumentCharLocation":{
+      "type":"structure",
+      "members":{
+        "documentIndex":{
+          "shape":"DocumentCharLocationDocumentIndexInteger",
+          "documentation":"<p>The index of the document within the array of documents provided in the request.</p>"
+        },
+        "start":{
+          "shape":"DocumentCharLocationStartInteger",
+          "documentation":"<p>The starting character position of the cited content within the document.</p>"
+        },
+        "end":{
+          "shape":"DocumentCharLocationEndInteger",
+          "documentation":"<p>The ending character position of the cited content within the document.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a character-level location within a document, providing precise positioning information for cited content using start and end character indices.</p>"
+    },
+    "DocumentCharLocationDocumentIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentCharLocationEndInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentCharLocationStartInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentChunkLocation":{
+      "type":"structure",
+      "members":{
+        "documentIndex":{
+          "shape":"DocumentChunkLocationDocumentIndexInteger",
+          "documentation":"<p>The index of the document within the array of documents provided in the request.</p>"
+        },
+        "start":{
+          "shape":"DocumentChunkLocationStartInteger",
+          "documentation":"<p>The starting chunk identifier or index of the cited content within the document.</p>"
+        },
+        "end":{
+          "shape":"DocumentChunkLocationEndInteger",
+          "documentation":"<p>The ending chunk identifier or index of the cited content within the document.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a chunk-level location within a document, providing positioning information for cited content using logical document segments or chunks.</p>"
+    },
+    "DocumentChunkLocationDocumentIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentChunkLocationEndInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentChunkLocationStartInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentContentBlock":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text content of the document.</p>"
+        }
+      },
+      "documentation":"<p>Contains the actual content of a document that can be processed by the model and potentially cited in the response.</p>",
+      "union":true
+    },
+    "DocumentContentBlocks":{
+      "type":"list",
+      "member":{"shape":"DocumentContentBlock"}
+    },
     "DocumentFormat":{
       "type":"string",
       "enum":[
@@ -893,12 +1305,57 @@
         "md"
       ]
     },
+    "DocumentPageLocation":{
+      "type":"structure",
+      "members":{
+        "documentIndex":{
+          "shape":"DocumentPageLocationDocumentIndexInteger",
+          "documentation":"<p>The index of the document within the array of documents provided in the request.</p>"
+        },
+        "start":{
+          "shape":"DocumentPageLocationStartInteger",
+          "documentation":"<p>The starting page number of the cited content within the document.</p>"
+        },
+        "end":{
+          "shape":"DocumentPageLocationEndInteger",
+          "documentation":"<p>The ending page number of the cited content within the document.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a page-level location within a document, providing positioning information for cited content using page numbers.</p>"
+    },
+    "DocumentPageLocationDocumentIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentPageLocationEndInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "DocumentPageLocationStartInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "DocumentSource":{
       "type":"structure",
       "members":{
         "bytes":{
           "shape":"DocumentSourceBytesBlob",
           "documentation":"<p>The raw bytes for the document. If you use an Amazon Web Services SDK, you don't need to encode the bytes in base64.</p>"
+        },
+        "s3Location":{
+          "shape":"S3Location",
+          "documentation":"<p>The location of a document object in an Amazon S3 bucket. To see which models support S3 uploads, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-supported-models-features.html\">Supported models and features for Converse</a>.</p>"
+        },
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The text content of the document source.</p>"
+        },
+        "content":{
+          "shape":"DocumentContentBlocks",
+          "documentation":"<p>The structured content of the document source, which may include various content blocks such as text, images, or other document elements.</p>"
         }
       },
       "documentation":"<p>Contains the content of a document.</p>",
@@ -908,6 +1365,13 @@
       "type":"blob",
       "min":1
     },
+    "FoundationModelVersionIdentifier":{
+      "type":"string",
+      "documentation":"<p>ARN or ID of a Bedrock model</p>",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z_\\.\\-/0-9:]+"
+    },
     "GetAsyncInvokeRequest":{
       "type":"structure",
       "required":["invocationArn"],
@@ -998,6 +1462,10 @@
           "shape":"GuardrailContextualGroundingPolicyAssessment",
           "documentation":"<p>The contextual grounding policy used for the guardrail assessment.</p>"
         },
+        "automatedReasoningPolicy":{
+          "shape":"GuardrailAutomatedReasoningPolicyAssessment",
+          "documentation":"<p>The automated reasoning policy assessment results, including logical validation findings for the input content.</p>"
+        },
         "invocationMetrics":{
           "shape":"GuardrailInvocationMetrics",
           "documentation":"<p>The invocation metrics for the guardrail assessment.</p>"
@@ -1019,6 +1487,328 @@
       "key":{"shape":"String"},
       "value":{"shape":"GuardrailAssessment"}
     },
+    "GuardrailAutomatedReasoningDifferenceScenarioList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningScenario"},
+      "max":2,
+      "min":0
+    },
+    "GuardrailAutomatedReasoningFinding":{
+      "type":"structure",
+      "members":{
+        "valid":{
+          "shape":"GuardrailAutomatedReasoningValidFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation determines that the claims in the input are logically valid and definitively true based on the provided premises and policy rules.</p>"
+        },
+        "invalid":{
+          "shape":"GuardrailAutomatedReasoningInvalidFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation determines that the claims in the input are logically invalid and contradict the established premises or policy rules.</p>"
+        },
+        "satisfiable":{
+          "shape":"GuardrailAutomatedReasoningSatisfiableFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation determines that the claims in the input could be either true or false depending on additional assumptions not provided in the input context.</p>"
+        },
+        "impossible":{
+          "shape":"GuardrailAutomatedReasoningImpossibleFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation determines that no valid logical conclusions can be drawn due to contradictions in the premises or policy rules themselves.</p>"
+        },
+        "translationAmbiguous":{
+          "shape":"GuardrailAutomatedReasoningTranslationAmbiguousFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation detects that the input has multiple valid logical interpretations, requiring additional context or clarification to proceed with validation.</p>"
+        },
+        "tooComplex":{
+          "shape":"GuardrailAutomatedReasoningTooComplexFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation cannot process the input due to its complexity or volume exceeding the system's processing capacity for logical analysis.</p>"
+        },
+        "noTranslations":{
+          "shape":"GuardrailAutomatedReasoningNoTranslationsFinding",
+          "documentation":"<p>Contains the result when the automated reasoning evaluation cannot extract any relevant logical information from the input that can be validated against the policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Represents a logical validation result from automated reasoning policy evaluation. The finding indicates whether claims in the input are logically valid, invalid, satisfiable, impossible, or have other logical issues.</p>",
+      "union":true
+    },
+    "GuardrailAutomatedReasoningFindingList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningFinding"}
+    },
+    "GuardrailAutomatedReasoningImpossibleFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"GuardrailAutomatedReasoningTranslation",
+          "documentation":"<p>The logical translation of the input that this finding evaluates.</p>"
+        },
+        "contradictingRules":{
+          "shape":"GuardrailAutomatedReasoningRuleList",
+          "documentation":"<p>The automated reasoning policy rules that contradict the claims and/or premises in the input.</p>"
+        },
+        "logicWarning":{
+          "shape":"GuardrailAutomatedReasoningLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that no valid claims can be made due to logical contradictions in the premises or rules.</p>"
+    },
+    "GuardrailAutomatedReasoningInputTextReference":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"GuardrailAutomatedReasoningStatementNaturalLanguageContent",
+          "documentation":"<p>The specific text from the original input that this reference points to.</p>"
+        }
+      },
+      "documentation":"<p>References a portion of the original input text that corresponds to logical elements.</p>"
+    },
+    "GuardrailAutomatedReasoningInputTextReferenceList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningInputTextReference"}
+    },
+    "GuardrailAutomatedReasoningInvalidFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"GuardrailAutomatedReasoningTranslation",
+          "documentation":"<p>The logical translation of the input that this finding invalidates.</p>"
+        },
+        "contradictingRules":{
+          "shape":"GuardrailAutomatedReasoningRuleList",
+          "documentation":"<p>The automated reasoning policy rules that contradict the claims in the input.</p>"
+        },
+        "logicWarning":{
+          "shape":"GuardrailAutomatedReasoningLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims are logically false and contradictory to the established rules or premises.</p>"
+    },
+    "GuardrailAutomatedReasoningLogicWarning":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"GuardrailAutomatedReasoningLogicWarningType",
+          "documentation":"<p>The category of the detected logical issue, such as statements that are always true or always false.</p>"
+        },
+        "premises":{
+          "shape":"GuardrailAutomatedReasoningStatementList",
+          "documentation":"<p>The logical statements that serve as premises under which the claims are validated.</p>"
+        },
+        "claims":{
+          "shape":"GuardrailAutomatedReasoningStatementList",
+          "documentation":"<p>The logical statements that are validated while assuming the policy and premises.</p>"
+        }
+      },
+      "documentation":"<p>Identifies logical issues in the translated statements that exist independent of any policy rules, such as statements that are always true or always false.</p>"
+    },
+    "GuardrailAutomatedReasoningLogicWarningType":{
+      "type":"string",
+      "enum":[
+        "ALWAYS_FALSE",
+        "ALWAYS_TRUE"
+      ]
+    },
+    "GuardrailAutomatedReasoningNoTranslationsFinding":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Indicates that no relevant logical information could be extracted from the input for validation.</p>"
+    },
+    "GuardrailAutomatedReasoningPoliciesProcessed":{
+      "type":"integer",
+      "box":true
+    },
+    "GuardrailAutomatedReasoningPolicyAssessment":{
+      "type":"structure",
+      "members":{
+        "findings":{
+          "shape":"GuardrailAutomatedReasoningFindingList",
+          "documentation":"<p>List of logical validation results produced by evaluating the input content against automated reasoning policies.</p>"
+        }
+      },
+      "documentation":"<p>Contains the results of automated reasoning policy evaluation, including logical findings about the validity of claims made in the input content.</p>"
+    },
+    "GuardrailAutomatedReasoningPolicyUnitsProcessed":{
+      "type":"integer",
+      "box":true
+    },
+    "GuardrailAutomatedReasoningPolicyVersionArn":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:automated-reasoning-policy/[a-z0-9]{12}(:([1-9][0-9]{0,11}))?"
+    },
+    "GuardrailAutomatedReasoningRule":{
+      "type":"structure",
+      "members":{
+        "identifier":{
+          "shape":"AutomatedReasoningRuleIdentifier",
+          "documentation":"<p>The unique identifier of the automated reasoning rule.</p>"
+        },
+        "policyVersionArn":{
+          "shape":"GuardrailAutomatedReasoningPolicyVersionArn",
+          "documentation":"<p>The ARN of the automated reasoning policy version that contains this rule.</p>"
+        }
+      },
+      "documentation":"<p>References a specific automated reasoning policy rule that was applied during evaluation.</p>"
+    },
+    "GuardrailAutomatedReasoningRuleList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningRule"}
+    },
+    "GuardrailAutomatedReasoningSatisfiableFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"GuardrailAutomatedReasoningTranslation",
+          "documentation":"<p>The logical translation of the input that this finding evaluates.</p>"
+        },
+        "claimsTrueScenario":{
+          "shape":"GuardrailAutomatedReasoningScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims could be logically true.</p>"
+        },
+        "claimsFalseScenario":{
+          "shape":"GuardrailAutomatedReasoningScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims could be logically false.</p>"
+        },
+        "logicWarning":{
+          "shape":"GuardrailAutomatedReasoningLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims could be either true or false depending on additional assumptions not provided in the input.</p>"
+    },
+    "GuardrailAutomatedReasoningScenario":{
+      "type":"structure",
+      "members":{
+        "statements":{
+          "shape":"GuardrailAutomatedReasoningStatementList",
+          "documentation":"<p>List of logical assignments and statements that define this scenario.</p>"
+        }
+      },
+      "documentation":"<p>Represents a logical scenario where claims can be evaluated as true or false, containing specific logical assignments.</p>"
+    },
+    "GuardrailAutomatedReasoningStatement":{
+      "type":"structure",
+      "members":{
+        "logic":{
+          "shape":"GuardrailAutomatedReasoningStatementLogicContent",
+          "documentation":"<p>The formal logical representation of the statement.</p>"
+        },
+        "naturalLanguage":{
+          "shape":"GuardrailAutomatedReasoningStatementNaturalLanguageContent",
+          "documentation":"<p>The natural language explanation of the logical statement.</p>"
+        }
+      },
+      "documentation":"<p>A logical statement that includes both formal logic representation and natural language explanation.</p>"
+    },
+    "GuardrailAutomatedReasoningStatementList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningStatement"}
+    },
+    "GuardrailAutomatedReasoningStatementLogicContent":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "sensitive":true
+    },
+    "GuardrailAutomatedReasoningStatementNaturalLanguageContent":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "sensitive":true
+    },
+    "GuardrailAutomatedReasoningTooComplexFinding":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Indicates that the input exceeds the processing capacity due to the volume or complexity of the logical information.</p>"
+    },
+    "GuardrailAutomatedReasoningTranslation":{
+      "type":"structure",
+      "members":{
+        "premises":{
+          "shape":"GuardrailAutomatedReasoningStatementList",
+          "documentation":"<p>The logical statements that serve as the foundation or assumptions for the claims.</p>"
+        },
+        "claims":{
+          "shape":"GuardrailAutomatedReasoningStatementList",
+          "documentation":"<p>The logical statements that are being validated against the premises and policy rules.</p>"
+        },
+        "untranslatedPremises":{
+          "shape":"GuardrailAutomatedReasoningInputTextReferenceList",
+          "documentation":"<p>References to portions of the original input text that correspond to the premises but could not be fully translated.</p>"
+        },
+        "untranslatedClaims":{
+          "shape":"GuardrailAutomatedReasoningInputTextReferenceList",
+          "documentation":"<p>References to portions of the original input text that correspond to the claims but could not be fully translated.</p>"
+        },
+        "confidence":{
+          "shape":"GuardrailAutomatedReasoningTranslationConfidence",
+          "documentation":"<p>A confidence score between 0 and 1 indicating how certain the system is about the logical translation.</p>"
+        }
+      },
+      "documentation":"<p>Contains the logical translation of natural language input into formal logical statements, including premises, claims, and confidence scores.</p>"
+    },
+    "GuardrailAutomatedReasoningTranslationAmbiguousFinding":{
+      "type":"structure",
+      "members":{
+        "options":{
+          "shape":"GuardrailAutomatedReasoningTranslationOptionList",
+          "documentation":"<p>Different logical interpretations that were detected during translation of the input.</p>"
+        },
+        "differenceScenarios":{
+          "shape":"GuardrailAutomatedReasoningDifferenceScenarioList",
+          "documentation":"<p>Scenarios showing how the different translation options differ in meaning.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the input has multiple valid logical interpretations, requiring additional context or clarification.</p>"
+    },
+    "GuardrailAutomatedReasoningTranslationConfidence":{
+      "type":"double",
+      "box":true,
+      "max":1,
+      "min":0
+    },
+    "GuardrailAutomatedReasoningTranslationList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningTranslation"}
+    },
+    "GuardrailAutomatedReasoningTranslationOption":{
+      "type":"structure",
+      "members":{
+        "translations":{
+          "shape":"GuardrailAutomatedReasoningTranslationList",
+          "documentation":"<p>Example translations that provide this possible interpretation of the input.</p>"
+        }
+      },
+      "documentation":"<p>Represents one possible logical interpretation of ambiguous input content.</p>"
+    },
+    "GuardrailAutomatedReasoningTranslationOptionList":{
+      "type":"list",
+      "member":{"shape":"GuardrailAutomatedReasoningTranslationOption"},
+      "max":2,
+      "min":0
+    },
+    "GuardrailAutomatedReasoningValidFinding":{
+      "type":"structure",
+      "members":{
+        "translation":{
+          "shape":"GuardrailAutomatedReasoningTranslation",
+          "documentation":"<p>The logical translation of the input that this finding validates.</p>"
+        },
+        "claimsTrueScenario":{
+          "shape":"GuardrailAutomatedReasoningScenario",
+          "documentation":"<p>An example scenario demonstrating how the claims are logically true.</p>"
+        },
+        "supportingRules":{
+          "shape":"GuardrailAutomatedReasoningRuleList",
+          "documentation":"<p>The automated reasoning policy rules that support why this result is considered valid.</p>"
+        },
+        "logicWarning":{
+          "shape":"GuardrailAutomatedReasoningLogicWarning",
+          "documentation":"<p>Indication of a logic issue with the translation without needing to consider the automated reasoning policy rules.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that the claims are definitively true and logically implied by the premises, with no possible alternative interpretations.</p>"
+    },
     "GuardrailConfiguration":{
       "type":"structure",
       "required":[
@@ -1083,6 +1873,10 @@
         "action":{
           "shape":"GuardrailContentPolicyAction",
           "documentation":"<p>The guardrail action.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether content that breaches the guardrail configuration is detected.</p>"
         }
       },
       "documentation":"<p>The content filter for a guardrail.</p>"
@@ -1122,7 +1916,10 @@
     },
     "GuardrailContentPolicyAction":{
       "type":"string",
-      "enum":["BLOCKED"]
+      "enum":[
+        "BLOCKED",
+        "NONE"
+      ]
     },
     "GuardrailContentPolicyAssessment":{
       "type":"structure",
@@ -1135,6 +1932,10 @@
       },
       "documentation":"<p>An assessment of a content policy for a guardrail.</p>"
     },
+    "GuardrailContentPolicyImageUnitsProcessed":{
+      "type":"integer",
+      "box":true
+    },
     "GuardrailContentPolicyUnitsProcessed":{
       "type":"integer",
       "box":true
@@ -1182,6 +1983,10 @@
         "action":{
           "shape":"GuardrailContextualGroundingPolicyAction",
           "documentation":"<p>The action performed by the guardrails contextual grounding filter.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether content that fails the contextual grounding evaluation (grounding or relevance score less than the corresponding threshold) was detected.</p>"
         }
       },
       "documentation":"<p>The details for the guardrails contextual grounding filter.</p>"
@@ -1312,7 +2117,7 @@
           "documentation":"<p>The qualifier details for the guardrails contextual grounding filter.</p>"
         }
       },
-      "documentation":"<p>A text block that contains text that you want to assess with a guardrail. For more information, see <a>GuardrailConverseContentBlock</a>.</p>"
+      "documentation":"<p>A text block that contains text that you want to assess with a guardrail. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailConverseContentBlock.html\">GuardrailConverseContentBlock</a>.</p>"
     },
     "GuardrailCoverage":{
       "type":"structure",
@@ -1342,6 +2147,10 @@
         "action":{
           "shape":"GuardrailWordPolicyAction",
           "documentation":"<p>The action for the custom word.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether custom word content that breaches the guardrail configuration is detected.</p>"
         }
       },
       "documentation":"<p>A custom word configured in a guardrail.</p>"
@@ -1449,6 +2258,10 @@
         "action":{
           "shape":"GuardrailWordPolicyAction",
           "documentation":"<p>The action for the managed word.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether managed word content that breaches the guardrail configuration is detected.</p>"
         }
       },
       "documentation":"<p>A managed word configured in a guardrail.</p>"
@@ -1475,6 +2288,13 @@
       "type":"list",
       "member":{"shape":"GuardrailOutputContent"}
     },
+    "GuardrailOutputScope":{
+      "type":"string",
+      "enum":[
+        "INTERVENTIONS",
+        "FULL"
+      ]
+    },
     "GuardrailOutputText":{"type":"string"},
     "GuardrailPiiEntityFilter":{
       "type":"structure",
@@ -1495,6 +2315,10 @@
         "action":{
           "shape":"GuardrailSensitiveInformationPolicyAction",
           "documentation":"<p>The PII entity filter action.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether personally identifiable information (PII) that breaches the guardrail configuration is detected.</p>"
         }
       },
       "documentation":"<p>A Personally Identifiable Information (PII) entity configured in a guardrail.</p>"
@@ -1562,6 +2386,10 @@
         "action":{
           "shape":"GuardrailSensitiveInformationPolicyAction",
           "documentation":"<p>The region filter action.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether custom regex entities that breach the guardrail configuration are detected.</p>"
         }
       },
       "documentation":"<p>A Regex filter configured in a guardrail.</p>"
@@ -1574,7 +2402,8 @@
       "type":"string",
       "enum":[
         "ANONYMIZED",
-        "BLOCKED"
+        "BLOCKED",
+        "NONE"
       ]
     },
     "GuardrailSensitiveInformationPolicyAssessment":{
@@ -1593,7 +2422,7 @@
           "documentation":"<p>The regex queries in the assessment.</p>"
         }
       },
-      "documentation":"<p>The assessment for aPersonally Identifiable Information (PII) policy. </p>"
+      "documentation":"<p>The assessment for a Personally Identifiable Information (PII) policy. </p>"
     },
     "GuardrailSensitiveInformationPolicyFreeUnitsProcessed":{
       "type":"integer",
@@ -1627,7 +2456,7 @@
           "documentation":"<p>The processing mode. </p> <p>The processing mode. For more information, see <i>Configure streaming response behavior</i> in the <i>Amazon Bedrock User Guide</i>. </p>"
         }
       },
-      "documentation":"<p>Configuration information for a guardrail that you use with the <a>ConverseStream</a> action. </p>"
+      "documentation":"<p>Configuration information for a guardrail that you use with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a> action. </p>"
     },
     "GuardrailStreamProcessingMode":{
       "type":"string",
@@ -1684,6 +2513,10 @@
         "action":{
           "shape":"GuardrailTopicPolicyAction",
           "documentation":"<p>The action the guardrail should take when it intervenes on a topic.</p>"
+        },
+        "detected":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether topic content that breaches the guardrail configuration is detected.</p>"
         }
       },
       "documentation":"<p>Information about a topic guardrail.</p>"
@@ -1694,7 +2527,10 @@
     },
     "GuardrailTopicPolicyAction":{
       "type":"string",
-      "enum":["BLOCKED"]
+      "enum":[
+        "BLOCKED",
+        "NONE"
+      ]
     },
     "GuardrailTopicPolicyAssessment":{
       "type":"structure",
@@ -1719,7 +2555,8 @@
       "type":"string",
       "enum":[
         "enabled",
-        "disabled"
+        "disabled",
+        "enabled_full"
       ]
     },
     "GuardrailTraceAssessment":{
@@ -1736,9 +2573,13 @@
         "outputAssessments":{
           "shape":"GuardrailAssessmentListMap",
           "documentation":"<p>the output assessments.</p>"
+        },
+        "actionReason":{
+          "shape":"String",
+          "documentation":"<p>Provides the reason for the action taken when harmful content is detected.</p>"
         }
       },
-      "documentation":"<p>A Top level guardrail trace object. For more information, see <a>ConverseTrace</a>.</p>"
+      "documentation":"<p>A Top level guardrail trace object. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseTrace.html\">ConverseTrace</a>.</p>"
     },
     "GuardrailUsage":{
       "type":"structure",
@@ -1774,6 +2615,18 @@
         "contextualGroundingPolicyUnits":{
           "shape":"GuardrailContextualGroundingPolicyUnitsProcessed",
           "documentation":"<p>The contextual grounding policy units processed by the guardrail.</p>"
+        },
+        "contentPolicyImageUnits":{
+          "shape":"GuardrailContentPolicyImageUnitsProcessed",
+          "documentation":"<p>The content policy image units processed by the guardrail.</p>"
+        },
+        "automatedReasoningPolicyUnits":{
+          "shape":"GuardrailAutomatedReasoningPolicyUnitsProcessed",
+          "documentation":"<p>The number of text units processed by the automated reasoning policy.</p>"
+        },
+        "automatedReasoningPolicies":{
+          "shape":"GuardrailAutomatedReasoningPoliciesProcessed",
+          "documentation":"<p>The number of automated reasoning policies that were processed during the guardrail evaluation.</p>"
         }
       },
       "documentation":"<p>The details on the use of the guardrail.</p>"
@@ -1784,7 +2637,10 @@
     },
     "GuardrailWordPolicyAction":{
       "type":"string",
-      "enum":["BLOCKED"]
+      "enum":[
+        "BLOCKED",
+        "NONE"
+      ]
     },
     "GuardrailWordPolicyAssessment":{
       "type":"structure",
@@ -1841,6 +2697,10 @@
         "bytes":{
           "shape":"ImageSourceBytesBlob",
           "documentation":"<p>The raw image bytes for the image. If you use an AWS SDK, you don't need to encode the image bytes in base64.</p>"
+        },
+        "s3Location":{
+          "shape":"S3Location",
+          "documentation":"<p>The location of an image object in an Amazon S3 bucket. To see which models support S3 uploads, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-supported-models-features.html\">Supported models and features for Converse</a>.</p>"
         }
       },
       "documentation":"<p>The source for an image.</p>",
@@ -1888,7 +2748,7 @@
     "InferenceConfigurationStopSequencesList":{
       "type":"list",
       "member":{"shape":"NonEmptyString"},
-      "max":4,
+      "max":2500,
       "min":0
     },
     "InferenceConfigurationTemperatureFloat":{
@@ -1903,6 +2763,10 @@
       "max":1,
       "min":0
     },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
     "InternalServerException":{
       "type":"structure",
       "members":{
@@ -1923,7 +2787,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)|([a-zA-Z0-9-:.]+)$|(^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?))$|(^arn:aws:sagemaker:[a-z0-9-]+:[0-9]{12}:endpoint/[a-zA-Z0-9-]+$)|(^arn:aws(-[^:]+)?:bedrock:([0-9a-z-]{1,20}):([0-9]{12}):default-prompt-router/[a-zA-Z0-9-:.]+$)"
+      "pattern":"(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:(([0-9]{12}:custom-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}/[a-z0-9]{12})|(:foundation-model/[a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|([0-9]{12}:imported-model/[a-z0-9]{12})|([0-9]{12}:provisioned-model/[a-z0-9]{12})|([0-9]{12}:custom-model-deployment/[a-z0-9]{12})|([0-9]{12}:(inference-profile|application-inference-profile)/[a-zA-Z0-9-:.]+)))|([a-z0-9-]{1,63}[.]{1}[a-z0-9-]{1,63}([.:]?[a-z0-9-]{1,63}))|(([0-9a-zA-Z][_-]?)+)|([a-zA-Z0-9-:.]+)$|(^(arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}:[0-9]{12}:prompt/[0-9a-zA-Z]{10}(?::[0-9]{1,5})?))$|(^arn:aws:sagemaker:[a-z0-9-]+:[0-9]{12}:endpoint/[a-zA-Z0-9-]+$)|(^arn:aws(-[^:]+)?:bedrock:([0-9a-z-]{1,20}):([0-9]{12}):(default-)?prompt-router/[a-zA-Z0-9-:.]+$)"
     },
     "InvokeModelRequest":{
       "type":"structure",
@@ -1947,7 +2811,7 @@
         },
         "modelId":{
           "shape":"InvokeModelIdentifier",
-          "documentation":"<p>The unique identifier of the model to invoke to run inference.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>",
+          "documentation":"<p>The unique identifier of the model to invoke to run inference.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, specify the ARN of the custom model deployment (for on-demand inference) or the ARN of your provisioned model (for Provisioned Throughput). For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>",
           "location":"uri",
           "locationName":"modelId"
         },
@@ -2004,6 +2868,94 @@
       },
       "payload":"body"
     },
+    "InvokeModelTokensRequest":{
+      "type":"structure",
+      "required":["body"],
+      "members":{
+        "body":{
+          "shape":"Body",
+          "documentation":"<p>The request body to count tokens for, formatted according to the model's expected input format. To learn about the input format for different models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Model inference parameters and responses</a>.</p>"
+        }
+      },
+      "documentation":"<p>The body of an <code>InvokeModel</code> API request for token counting. This structure mirrors the input format for the <code>InvokeModel</code> operation, allowing you to count tokens for raw text inference requests.</p>"
+    },
+    "InvokeModelWithBidirectionalStreamInput":{
+      "type":"structure",
+      "members":{
+        "chunk":{
+          "shape":"BidirectionalInputPayloadPart",
+          "documentation":"<p>The audio chunk that is used as input for the invocation step.</p>"
+        }
+      },
+      "documentation":"<p>Payload content, the speech chunk, for the bidirectional input of the invocation step.</p>",
+      "eventstream":true
+    },
+    "InvokeModelWithBidirectionalStreamOutput":{
+      "type":"structure",
+      "members":{
+        "chunk":{
+          "shape":"BidirectionalOutputPayloadPart",
+          "documentation":"<p>The speech chunk that was provided as output from the invocation step.</p>"
+        },
+        "internalServerException":{
+          "shape":"InternalServerException",
+          "documentation":"<p>The request encountered an unknown internal error.</p>"
+        },
+        "modelStreamErrorException":{
+          "shape":"ModelStreamErrorException",
+          "documentation":"<p>The request encountered an error with the model stream.</p>"
+        },
+        "validationException":{
+          "shape":"ValidationException",
+          "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>"
+        },
+        "throttlingException":{
+          "shape":"ThrottlingException",
+          "documentation":"<p>The request was denied due to request throttling.</p>"
+        },
+        "modelTimeoutException":{
+          "shape":"ModelTimeoutException",
+          "documentation":"<p>The connection was closed because a request was not received within the timeout period.</p>"
+        },
+        "serviceUnavailableException":{
+          "shape":"ServiceUnavailableException",
+          "documentation":"<p>The request has failed due to a temporary failure of the server.</p>"
+        }
+      },
+      "documentation":"<p>Output from the bidirectional stream that was used for model invocation.</p>",
+      "eventstream":true
+    },
+    "InvokeModelWithBidirectionalStreamRequest":{
+      "type":"structure",
+      "required":[
+        "modelId",
+        "body"
+      ],
+      "members":{
+        "modelId":{
+          "shape":"InvokeModelIdentifier",
+          "documentation":"<p>The model ID or ARN of the model ID to use. Currently, only <code>amazon.nova-sonic-v1:0</code> is supported.</p>",
+          "location":"uri",
+          "locationName":"modelId"
+        },
+        "body":{
+          "shape":"InvokeModelWithBidirectionalStreamInput",
+          "documentation":"<p>The prompt and inference parameters in the format specified in the <code>BidirectionalInputPayloadPart</code> in the header. You must provide the body in JSON format. To see the format and content of the request and response bodies for different models, refer to <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html\">Inference parameters</a>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/api-methods-run.html\">Run inference</a> in the Bedrock User Guide.</p>"
+        }
+      },
+      "payload":"body"
+    },
+    "InvokeModelWithBidirectionalStreamResponse":{
+      "type":"structure",
+      "required":["body"],
+      "members":{
+        "body":{
+          "shape":"InvokeModelWithBidirectionalStreamOutput",
+          "documentation":"<p>Streaming response from the model in the format specified by the <code>BidirectionalOutputPayloadPart</code> header.</p>"
+        }
+      },
+      "payload":"body"
+    },
     "InvokeModelWithResponseStreamRequest":{
       "type":"structure",
       "required":["modelId"],
@@ -2026,7 +2978,7 @@
         },
         "modelId":{
           "shape":"InvokeModelIdentifier",
-          "documentation":"<p>The unique identifier of the model to invoke to run inference.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, first purchase Provisioned Throughput for it. Then specify the ARN of the resulting provisioned model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>",
+          "documentation":"<p>The unique identifier of the model to invoke to run inference.</p> <p>The <code>modelId</code> to provide depends on the type of model or throughput that you use:</p> <ul> <li> <p>If you use a base model, specify the model ID or its ARN. For a list of model IDs for base models, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns\">Amazon Bedrock base model IDs (on-demand throughput)</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an inference profile, specify the inference profile ID or its ARN. For a list of inference profile IDs, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html\">Supported Regions and models for cross-region inference</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a provisioned model, specify the ARN of the Provisioned Throughput. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prov-thru-use.html\">Run inference using a Provisioned Throughput</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use a custom model, specify the ARN of the custom model deployment (for on-demand inference) or the ARN of your provisioned model (for Provisioned Throughput). For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html\">Use a custom model in Amazon Bedrock</a> in the Amazon Bedrock User Guide.</p> </li> <li> <p>If you use an <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-import-model.html\">imported model</a>, specify the ARN of the imported model. You can get the model ARN from a successful call to <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelImportJob.html\">CreateModelImportJob</a> or from the Imported models page in the Amazon Bedrock console.</p> </li> </ul>",
           "location":"uri",
           "locationName":"modelId"
         },
@@ -2236,8 +3188,7 @@
     },
     "ModelInputPayload":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true,
       "sensitive":true
     },
@@ -2371,6 +3322,58 @@
       "documentation":"<p>Contains a map of variables in a prompt from Prompt management to an object containing the values to fill in for them when running model invocation. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management-how.html\">How Prompt management works</a>.</p>",
       "union":true
     },
+    "ReasoningContentBlock":{
+      "type":"structure",
+      "members":{
+        "reasoningText":{
+          "shape":"ReasoningTextBlock",
+          "documentation":"<p>The reasoning that the model used to return the output.</p>"
+        },
+        "redactedContent":{
+          "shape":"Blob",
+          "documentation":"<p>The content in the reasoning that was encrypted by the model provider for safety reasons. The encryption doesn't affect the quality of responses.</p>"
+        }
+      },
+      "documentation":"<p>Contains content regarding the reasoning that is carried out by the model with respect to the content in the content block. Reasoning refers to a Chain of Thought (CoT) that the model generates to enhance the accuracy of its final response.</p>",
+      "sensitive":true,
+      "union":true
+    },
+    "ReasoningContentBlockDelta":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The reasoning that the model used to return the output.</p>"
+        },
+        "redactedContent":{
+          "shape":"Blob",
+          "documentation":"<p>The content in the reasoning that was encrypted by the model provider for safety reasons. The encryption doesn't affect the quality of responses.</p>"
+        },
+        "signature":{
+          "shape":"String",
+          "documentation":"<p>A token that verifies that the reasoning text was generated by the model. If you pass a reasoning block back to the API in a multi-turn conversation, include the text and its signature unmodified.</p>"
+        }
+      },
+      "documentation":"<p>Contains content regarding the reasoning that is carried out by the model with respect to the content in the content block. Reasoning refers to a Chain of Thought (CoT) that the model generates to enhance the accuracy of its final response.</p>",
+      "sensitive":true,
+      "union":true
+    },
+    "ReasoningTextBlock":{
+      "type":"structure",
+      "required":["text"],
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The reasoning that the model used to return the output.</p>"
+        },
+        "signature":{
+          "shape":"String",
+          "documentation":"<p>A token that verifies that the reasoning text was generated by the model. If you pass a reasoning block back to the API in a multi-turn conversation, include the text and its signature unmodified.</p>"
+        }
+      },
+      "documentation":"<p>Contains the reasoning that the model used to return the output.</p>",
+      "sensitive":true
+    },
     "RequestMetadata":{
       "type":"map",
       "key":{"shape":"RequestMetadataKeyString"},
@@ -2451,7 +3454,7 @@
           "documentation":"<p>If the bucket belongs to another AWS account, specify that account's ID.</p>"
         }
       },
-      "documentation":"<p>A storage location in an S3 bucket.</p>"
+      "documentation":"<p>A storage location in an Amazon S3 bucket.</p>"
     },
     "S3Uri":{
       "type":"string",
@@ -2501,7 +3504,7 @@
           "documentation":"<p>The name of the tool that the model must request. </p>"
         }
       },
-      "documentation":"<p>The model must request a specific tool. For example, <code>{\"tool\" : {\"name\" : \"Your tool name\"}}</code>.</p> <note> <p>This field is only supported by Anthropic Claude 3 models.</p> </note>"
+      "documentation":"<p>The model must request a specific tool. For example, <code>{\"tool\" : {\"name\" : \"Your tool name\"}}</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide</p> <note> <p>This field is only supported by Anthropic Claude 3 models.</p> </note>"
     },
     "StartAsyncInvokeRequest":{
       "type":"structure",
@@ -2558,7 +3561,8 @@
         "max_tokens",
         "stop_sequence",
         "guardrail_intervened",
-        "content_filtered"
+        "content_filtered",
+        "model_context_window_exceeded"
       ]
     },
     "String":{"type":"string"},
@@ -2572,15 +3576,30 @@
         "guardContent":{
           "shape":"GuardrailConverseContentBlock",
           "documentation":"<p>A content block to assess with the guardrail. Use with the <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html\">Converse</a> or <a href=\"https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html\">ConverseStream</a> API operations. </p> <p>For more information, see <i>Use a guardrail with the Converse API</i> in the <i>Amazon Bedrock User Guide</i>.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>CachePoint to include in the system prompt.</p>"
         }
       },
-      "documentation":"<p>A system content block.</p>",
+      "documentation":"<p>Contains configurations for instructions to provide the model for how to handle input. To learn more, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html\">Using the Converse API</a>.</p>",
       "union":true
     },
     "SystemContentBlocks":{
       "type":"list",
       "member":{"shape":"SystemContentBlock"}
     },
+    "SystemTool":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"ToolName",
+          "documentation":"<p>The name of the system-defined tool that you want to call. </p>"
+        }
+      },
+      "documentation":"<p>Specifies a system-defined tool for the model to use. <i>System-defined tools</i> are tools that are created and provided by the model provider.</p>"
+    },
     "Tag":{
       "type":"structure",
       "required":[
@@ -2660,10 +3679,28 @@
         "totalTokens":{
           "shape":"TokenUsageTotalTokensInteger",
           "documentation":"<p>The total of input tokens and tokens generated by the model.</p>"
+        },
+        "cacheReadInputTokens":{
+          "shape":"TokenUsageCacheReadInputTokensInteger",
+          "documentation":"<p>The number of input tokens read from the cache for the request.</p>"
+        },
+        "cacheWriteInputTokens":{
+          "shape":"TokenUsageCacheWriteInputTokensInteger",
+          "documentation":"<p>The number of input tokens written to the cache for the request.</p>"
         }
       },
       "documentation":"<p>The tokens used in a message API inference call. </p>"
     },
+    "TokenUsageCacheReadInputTokensInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "TokenUsageCacheWriteInputTokensInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "TokenUsageInputTokensInteger":{
       "type":"integer",
       "box":true,
@@ -2684,10 +3721,18 @@
       "members":{
         "toolSpec":{
           "shape":"ToolSpecification",
-          "documentation":"<p>The specfication for the tool.</p>"
+          "documentation":"<p>The specfication for the tool. </p>"
+        },
+        "systemTool":{
+          "shape":"SystemTool",
+          "documentation":"<p>Specifies the system-defined tool that you want use.</p>"
+        },
+        "cachePoint":{
+          "shape":"CachePointBlock",
+          "documentation":"<p>CachePoint to include in the tool configuration.</p>"
         }
       },
-      "documentation":"<p>Information about a tool that you can use with the Converse API. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Tool use (function calling)</a> in the Amazon Bedrock User Guide.</p>",
+      "documentation":"<p>Information about a tool that you can use with the Converse API. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>",
       "union":true
     },
     "ToolChoice":{
@@ -2703,10 +3748,10 @@
         },
         "tool":{
           "shape":"SpecificToolChoice",
-          "documentation":"<p>The Model must request the specified tool. Only supported by Anthropic Claude 3 models. </p>"
+          "documentation":"<p>The Model must request the specified tool. Only supported by Anthropic Claude 3 and Amazon Nova models. </p>"
         }
       },
-      "documentation":"<p>Determines which tools the model should request in a call to <code>Converse</code> or <code>ConverseStream</code>. <code>ToolChoice</code> is only supported by Anthropic Claude 3 models and by Mistral AI Mistral Large.</p>",
+      "documentation":"<p>Determines which tools the model should request in a call to <code>Converse</code> or <code>ConverseStream</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>",
       "union":true
     },
     "ToolConfiguration":{
@@ -2715,11 +3760,11 @@
       "members":{
         "tools":{
           "shape":"ToolConfigurationToolsList",
-          "documentation":"<p>An array of tools that you want to pass to a model.</p>"
+          "documentation":"<p>An array of tools that you want to pass to a model. </p>"
         },
         "toolChoice":{
           "shape":"ToolChoice",
-          "documentation":"<p>If supported by model, forces the model to request a tool.</p>"
+          "documentation":"<p>If supported by model, forces the model to request a tool. </p>"
         }
       },
       "documentation":"<p>Configuration information for the tools that you pass to a model. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Tool use (function calling)</a> in the Amazon Bedrock User Guide.</p>"
@@ -2737,7 +3782,7 @@
           "documentation":"<p>The JSON schema for the tool. For more information, see <a href=\"https://json-schema.org/understanding-json-schema/reference\">JSON Schema Reference</a>.</p>"
         }
       },
-      "documentation":"<p>The schema for the tool. The top level schema type must be <code>object</code>. </p>",
+      "documentation":"<p>The schema for the tool. The top level schema type must be <code>object</code>. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>",
       "union":true
     },
     "ToolName":{
@@ -2755,7 +3800,7 @@
       "members":{
         "toolUseId":{
           "shape":"ToolUseId",
-          "documentation":"<p>The ID of the tool request that this is the result for.</p>"
+          "documentation":"<p>The ID of the tool request that this is the result for. </p>"
         },
         "content":{
           "shape":"ToolResultContentBlocks",
@@ -2763,25 +3808,63 @@
         },
         "status":{
           "shape":"ToolResultStatus",
-          "documentation":"<p>The status for the tool result content block.</p> <note> <p>This field is only supported Anthropic Claude 3 models.</p> </note>"
+          "documentation":"<p>The status for the tool result content block.</p> <note> <p>This field is only supported by Amazon Nova and Anthropic Claude 3 and 4 models.</p> </note>"
+        },
+        "type":{
+          "shape":"String",
+          "documentation":"<p>The type for the tool result content block.</p>"
+        }
+      },
+      "documentation":"<p>A tool result block that contains the results for a tool request that the model previously made. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
+    },
+    "ToolResultBlockDelta":{
+      "type":"structure",
+      "members":{
+        "text":{
+          "shape":"String",
+          "documentation":"<p>The reasoning the model used to return the output.</p>"
+        }
+      },
+      "documentation":"<p>Contains incremental updates to tool results information during streaming responses. This allows clients to build up tool results data progressively as the response is generated.</p>",
+      "union":true
+    },
+    "ToolResultBlockStart":{
+      "type":"structure",
+      "required":["toolUseId"],
+      "members":{
+        "toolUseId":{
+          "shape":"ToolUseId",
+          "documentation":"<p>The ID of the tool that was used to generate this tool result block.</p>"
+        },
+        "type":{
+          "shape":"String",
+          "documentation":"<p>The type for the tool that was used to generate this tool result block.</p>"
+        },
+        "status":{
+          "shape":"ToolResultStatus",
+          "documentation":"<p>The status of the tool result block.</p>"
         }
       },
-      "documentation":"<p>A tool result block that contains the results for a tool request that the model previously made.</p>"
+      "documentation":"<p>The start of a tool result block. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
+    },
+    "ToolResultBlocksDelta":{
+      "type":"list",
+      "member":{"shape":"ToolResultBlockDelta"}
     },
     "ToolResultContentBlock":{
       "type":"structure",
       "members":{
         "json":{
           "shape":"Document",
-          "documentation":"<p>A tool result that is JSON format data.</p>"
+          "documentation":"<p>A tool result that is JSON format data. </p>"
         },
         "text":{
           "shape":"String",
-          "documentation":"<p>A tool result that is text.</p>"
+          "documentation":"<p>A tool result that is text. </p>"
         },
         "image":{
           "shape":"ImageBlock",
-          "documentation":"<p>A tool result that is an image.</p> <note> <p>This field is only supported by Anthropic Claude 3 models.</p> </note>"
+          "documentation":"<p>A tool result that is an image. </p> <note> <p>This field is only supported by Amazon Nova and Anthropic Claude 3 and 4 models.</p> </note>"
         },
         "document":{
           "shape":"DocumentBlock",
@@ -2792,7 +3875,7 @@
           "documentation":"<p>A tool result that is video.</p>"
         }
       },
-      "documentation":"<p>The tool result content block.</p>",
+      "documentation":"<p>The tool result content block. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>",
       "union":true
     },
     "ToolResultContentBlocks":{
@@ -2826,7 +3909,7 @@
           "documentation":"<p>The input schema for the tool in JSON format.</p>"
         }
       },
-      "documentation":"<p>The specification for the tool.</p>"
+      "documentation":"<p>The specification for the tool. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ToolUseBlock":{
       "type":"structure",
@@ -2847,9 +3930,13 @@
         "input":{
           "shape":"Document",
           "documentation":"<p>The input to pass to the tool. </p>"
+        },
+        "type":{
+          "shape":"ToolUseType",
+          "documentation":"<p>The type for the tool request.</p>"
         }
       },
-      "documentation":"<p>A tool use content block. Contains information about a tool that the model is requesting be run., The model uses the result from the tool to generate a response. </p>"
+      "documentation":"<p>A tool use content block. Contains information about a tool that the model is requesting be run., The model uses the result from the tool to generate a response. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ToolUseBlockDelta":{
       "type":"structure",
@@ -2876,9 +3963,13 @@
         "name":{
           "shape":"ToolName",
           "documentation":"<p>The name of the tool that the model is requesting to use.</p>"
+        },
+        "type":{
+          "shape":"ToolUseType",
+          "documentation":"<p>The type for the tool request.</p>"
         }
       },
-      "documentation":"<p>The start of a tool use block.</p>"
+      "documentation":"<p>The start of a tool use block. For more information, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/tool-use.html\">Call a tool with the Converse API</a> in the Amazon Bedrock User Guide.</p>"
     },
     "ToolUseId":{
       "type":"string",
@@ -2886,11 +3977,16 @@
       "min":1,
       "pattern":"[a-zA-Z0-9_-]+"
     },
+    "ToolUseType":{
+      "type":"string",
+      "enum":["server_tool_use"]
+    },
     "Trace":{
       "type":"string",
       "enum":[
         "ENABLED",
-        "DISABLED"
+        "DISABLED",
+        "ENABLED_FULL"
       ]
     },
     "ValidationException":{
@@ -2946,7 +4042,7 @@
         },
         "s3Location":{
           "shape":"S3Location",
-          "documentation":"<p>The location of a video object in an S3 bucket.</p>"
+          "documentation":"<p>The location of a video object in an Amazon S3 bucket. To see which models support S3 uploads, see <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-supported-models-features.html\">Supported models and features for Converse</a>.</p>"
         }
       },
       "documentation":"<p>A video source. You can upload a smaller video as a base64-encoded string as long as the encoded file is less than 25MB. You can also transfer videos up to 1GB in size from an S3 bucket.</p>",
@@ -2955,6 +4051,20 @@
     "VideoSourceBytesBlob":{
       "type":"blob",
       "min":1
+    },
+    "WebLocation":{
+      "type":"structure",
+      "members":{
+        "url":{
+          "shape":"String",
+          "documentation":"<p>The URL that was cited when performing a web search.</p>"
+        },
+        "domain":{
+          "shape":"String",
+          "documentation":"<p>The domain that was cited when performing a web search.</p>"
+        }
+      },
+      "documentation":"<p>Provides the URL and domain information for the website that was cited when performing a web search.</p>"
     }
   },
   "documentation":"<p>Describes the API operations for running inference using Amazon Bedrock models.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/billing/2023-09-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/billing/2023-09-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/billing/2023-09-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/billing/2023-09-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -51,14 +58,35 @@
                 },
                 {
                     "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
                         },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
                 }
             ],
             "type": "tree"
@@ -94,22 +122,96 @@
                                 {
                                     "conditions": [
                                         {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws"
+                                            ]
+                                        },
+                                        {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
                                                     "ref": "UseFIPS"
                                                 },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://billing-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "url": "https://billing.us-east-1.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://billing.us-east-1.api.aws",
                                         "properties": {
                                             "authSchemes": [
                                                 {
                                                     "name": "sigv4",
-                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                    "signingRegion": "us-east-1"
                                                 }
                                             ]
                                         },
@@ -118,9 +220,228 @@
                                     "type": "endpoint"
                                 },
                                 {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://billing-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://billing-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://billing.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
                                     "conditions": [],
                                     "endpoint": {
-                                        "url": "https://billing.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                        "url": "https://billing.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
                                         "properties": {
                                             "authSchemes": [
                                                 {
diff -pruN 2.23.6-1/awscli/botocore/data/billing/2023-09-07/service-2.json 2.31.35-1/awscli/botocore/data/billing/2023-09-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/billing/2023-09-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/billing/2023-09-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,27 @@
     "uid":"billing-2023-09-07"
   },
   "operations":{
+    "AssociateSourceViews":{
+      "name":"AssociateSourceViews",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateSourceViewsRequest"},
+      "output":{"shape":"AssociateSourceViewsResponse"},
+      "errors":[
+        {"shape":"BillingViewHealthStatusException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p> Associates one or more source billing views with an existing billing view. This allows creating aggregate billing views that combine data from multiple sources. </p>",
+      "idempotent":true
+    },
     "CreateBillingView":{
       "name":"CreateBillingView",
       "http":{
@@ -24,8 +45,10 @@
       "input":{"shape":"CreateBillingViewRequest"},
       "output":{"shape":"CreateBillingViewResponse"},
       "errors":[
+        {"shape":"BillingViewHealthStatusException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
@@ -52,6 +75,26 @@
       "documentation":"<p>Deletes the specified billing view.</p>",
       "idempotent":true
     },
+    "DisassociateSourceViews":{
+      "name":"DisassociateSourceViews",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateSourceViewsRequest"},
+      "output":{"shape":"DisassociateSourceViewsResponse"},
+      "errors":[
+        {"shape":"BillingViewHealthStatusException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p> Removes the association between one or more source billing views and an existing billing view. This allows modifying the composition of aggregate billing views. </p>",
+      "idempotent":true
+    },
     "GetBillingView":{
       "name":"GetBillingView",
       "http":{
@@ -67,7 +110,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns the metadata associated to the specified billing view ARN. </p>"
+      "documentation":"<p>Returns the metadata associated to the specified billing view ARN. </p>",
+      "readonly":true
     },
     "GetResourcePolicy":{
       "name":"GetResourcePolicy",
@@ -84,7 +128,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns the resource-based policy document attached to the resource in <code>JSON</code> format. </p>"
+      "documentation":"<p>Returns the resource-based policy document attached to the resource in <code>JSON</code> format. </p>",
+      "readonly":true
     },
     "ListBillingViews":{
       "name":"ListBillingViews",
@@ -100,7 +145,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the billing views available for a given time period. </p> <p>Every Amazon Web Services account has a unique <code>PRIMARY</code> billing view that represents the billing data available by default. Accounts that use Billing Conductor also have <code>BILLING_GROUP</code> billing views representing pro forma costs associated with each created billing group.</p>"
+      "documentation":"<p>Lists the billing views available for a given time period. </p> <p>Every Amazon Web Services account has a unique <code>PRIMARY</code> billing view that represents the billing data available by default. Accounts that use Billing Conductor also have <code>BILLING_GROUP</code> billing views representing pro forma costs associated with each created billing group.</p>",
+      "readonly":true
     },
     "ListSourceViewsForBillingView":{
       "name":"ListSourceViewsForBillingView",
@@ -117,7 +163,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the source views (managed Amazon Web Services billing views) associated with the billing view. </p>"
+      "documentation":"<p>Lists the source views (managed Amazon Web Services billing views) associated with the billing view. </p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -134,7 +181,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists tags associated with the billing view resource. </p>"
+      "documentation":"<p>Lists tags associated with the billing view resource. </p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -179,6 +227,7 @@
       "input":{"shape":"UpdateBillingViewRequest"},
       "output":{"shape":"UpdateBillingViewResponse"},
       "errors":[
+        {"shape":"BillingViewHealthStatusException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
@@ -223,9 +272,36 @@
       },
       "documentation":"<p>A time range with a start and end time.</p>"
     },
+    "AssociateSourceViewsRequest":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "sourceViews"
+      ],
+      "members":{
+        "arn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the billing view to associate source views with. </p>"
+        },
+        "sourceViews":{
+          "shape":"BillingViewSourceViewsList",
+          "documentation":"<p> A list of ARNs of the source billing views to associate. </p>"
+        }
+      }
+    },
+    "AssociateSourceViewsResponse":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p> The ARN of the billing view that the source views were associated with. </p>"
+        }
+      }
+    },
     "BillingViewArn":{
       "type":"string",
-      "pattern":"arn:aws[a-z-]*:(billing)::[0-9]{12}:billingview/[a-zA-Z0-9/:_\\+=\\.\\-@]{0,59}[a-zA-Z0-9]"
+      "pattern":"arn:aws[a-z-]*:(billing)::[0-9]{12}:billingview/[a-zA-Z0-9/:_\\+=\\.\\-@]{0,75}[a-zA-Z0-9]"
     },
     "BillingViewArnList":{
       "type":"list",
@@ -249,7 +325,7 @@
         },
         "name":{
           "shape":"BillingViewName",
-          "documentation":"<p> A list of names of the billing view. </p>"
+          "documentation":"<p> The account name of the billing view. </p>"
         },
         "description":{
           "shape":"BillingViewDescription",
@@ -261,11 +337,15 @@
         },
         "ownerAccountId":{
           "shape":"AccountId",
-          "documentation":"<p> The list of owners of the billing view. </p>"
+          "documentation":"<p>The account owner of the billing view. </p>"
+        },
+        "sourceAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The Amazon Web Services account ID that owns the source billing view, if this is a derived billing view. </p>"
         },
         "dataFilterExpression":{
           "shape":"Expression",
-          "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
+          "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_billing_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
         },
         "createdAt":{
           "shape":"Timestamp",
@@ -274,10 +354,49 @@
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The time when the billing view was last updated. </p>"
+        },
+        "derivedViewCount":{
+          "shape":"Integer",
+          "documentation":"<p> The number of billing views that use this billing view as a source. </p>"
+        },
+        "sourceViewCount":{
+          "shape":"Integer",
+          "documentation":"<p> The number of source views associated with this billing view. </p>"
+        },
+        "viewDefinitionLastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The timestamp of when the billing view definition was last updated. </p>"
+        },
+        "healthStatus":{
+          "shape":"BillingViewHealthStatus",
+          "documentation":"<p> The current health status of the billing view. </p>"
         }
       },
       "documentation":"<p>The metadata associated to the billing view. </p>"
     },
+    "BillingViewHealthStatus":{
+      "type":"structure",
+      "members":{
+        "statusCode":{
+          "shape":"BillingViewStatus",
+          "documentation":"<p>The current health status code of the billing view.</p>"
+        },
+        "statusReasons":{
+          "shape":"BillingViewStatusReasons",
+          "documentation":"<p>A list of reasons explaining the current health status, if applicable.</p>"
+        }
+      },
+      "documentation":"<p> Represents the health status of a billing view, including a status code and optional reasons for the status. </p>"
+    },
+    "BillingViewHealthStatusException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p> Exception thrown when a billing view's health status prevents an operation from being performed. This may occur if the billing view is in a state other than <code>HEALTHY</code>.</p>",
+      "exception":true
+    },
     "BillingViewList":{
       "type":"list",
       "member":{"shape":"BillingViewListElement"}
@@ -301,9 +420,17 @@
           "shape":"AccountId",
           "documentation":"<p> The list of owners of the Billing view. </p>"
         },
+        "sourceAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The Amazon Web Services account ID that owns the source billing view, if this is a derived billing view. </p>"
+        },
         "billingViewType":{
           "shape":"BillingViewType",
           "documentation":"<p>The type of billing view.</p>"
+        },
+        "healthStatus":{
+          "shape":"BillingViewHealthStatus",
+          "documentation":"<p> The current health status of the billing view. </p>"
         }
       },
       "documentation":"<p>A representation of a billing view.</p>"
@@ -318,9 +445,35 @@
     "BillingViewSourceViewsList":{
       "type":"list",
       "member":{"shape":"BillingViewArn"},
-      "max":1,
+      "max":10,
       "min":1
     },
+    "BillingViewStatus":{
+      "type":"string",
+      "enum":[
+        "HEALTHY",
+        "UNHEALTHY",
+        "CREATING",
+        "UPDATING"
+      ]
+    },
+    "BillingViewStatusReason":{
+      "type":"string",
+      "enum":[
+        "SOURCE_VIEW_UNHEALTHY",
+        "SOURCE_VIEW_UPDATING",
+        "SOURCE_VIEW_ACCESS_DENIED",
+        "SOURCE_VIEW_NOT_FOUND",
+        "CYCLIC_DEPENDENCY",
+        "SOURCE_VIEW_DEPTH_EXCEEDED",
+        "AGGREGATE_SOURCE",
+        "VIEW_OWNER_NOT_MANAGEMENT_ACCOUNT"
+      ]
+    },
+    "BillingViewStatusReasons":{
+      "type":"list",
+      "member":{"shape":"BillingViewStatusReason"}
+    },
     "BillingViewType":{
       "type":"string",
       "enum":[
@@ -339,6 +492,10 @@
       "max":100,
       "min":1
     },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
     "ClientToken":{
       "type":"string",
       "pattern":"[a-zA-Z0-9-]+"
@@ -385,7 +542,7 @@
         },
         "dataFilterExpression":{
           "shape":"Expression",
-          "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
+          "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_billing_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -419,6 +576,10 @@
         "arn":{
           "shape":"BillingViewArn",
           "documentation":"<p> The Amazon Resource Name (ARN) that can be used to uniquely identify the billing view. </p>"
+        },
+        "force":{
+          "shape":"Boolean",
+          "documentation":"<p> If set to true, forces deletion of the billing view even if it has derived resources (e.g. other billing views or budgets). Use with caution as this may break dependent resources. </p>"
         }
       }
     },
@@ -454,6 +615,33 @@
       },
       "documentation":"<p> The metadata that you can use to filter and group your results. </p>"
     },
+    "DisassociateSourceViewsRequest":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "sourceViews"
+      ],
+      "members":{
+        "arn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the billing view to disassociate source views from. </p>"
+        },
+        "sourceViews":{
+          "shape":"BillingViewSourceViewsList",
+          "documentation":"<p> A list of ARNs of the source billing views to disassociate. </p>"
+        }
+      }
+    },
+    "DisassociateSourceViewsResponse":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p> The ARN of the billing view that the source views were disassociated from. </p>"
+        }
+      }
+    },
     "ErrorMessage":{
       "type":"string",
       "max":1024,
@@ -469,9 +657,13 @@
         "tags":{
           "shape":"TagValues",
           "documentation":"<p> The specific <code>Tag</code> to use for <code>Expression</code>. </p>"
+        },
+        "timeRange":{
+          "shape":"TimeRange",
+          "documentation":"<p> Specifies a time range filter for the billing view data. </p>"
         }
       },
-      "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
+      "documentation":"<p> See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_billing_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
     },
     "FieldName":{
       "type":"string",
@@ -522,6 +714,10 @@
         }
       }
     },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
     "InternalServerException":{
       "type":"structure",
       "required":["message"],
@@ -551,6 +747,10 @@
           "shape":"AccountId",
           "documentation":"<p> The list of owners of the billing view. </p>"
         },
+        "sourceAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> Filters the results to include only billing views that use the specified account as a source. </p>"
+        },
         "maxResults":{
           "shape":"BillingViewsMaxResults",
           "documentation":"<p>The maximum number of billing views to retrieve. Default is 100. </p>"
@@ -770,8 +970,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValues":{
       "type":"structure",
@@ -800,6 +999,20 @@
       "documentation":"<p>The request was denied due to request throttling. </p>",
       "exception":true
     },
+    "TimeRange":{
+      "type":"structure",
+      "members":{
+        "beginDateInclusive":{
+          "shape":"Timestamp",
+          "documentation":"<p> The inclusive start date of the time range. </p>"
+        },
+        "endDateInclusive":{
+          "shape":"Timestamp",
+          "documentation":"<p> The inclusive end date of the time range. </p>"
+        }
+      },
+      "documentation":"<p> Specifies a time range with inclusive begin and end dates. </p>"
+    },
     "Timestamp":{"type":"timestamp"},
     "UntagResourceRequest":{
       "type":"structure",
@@ -820,8 +1033,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateBillingViewRequest":{
       "type":"structure",
@@ -841,7 +1053,7 @@
         },
         "dataFilterExpression":{
           "shape":"Expression",
-          "documentation":"<p>See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
+          "documentation":"<p>See <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_billing_Expression.html\">Expression</a>. Billing view only supports <code>LINKED_ACCOUNT</code> and <code>Tags</code>. </p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/billingconductor/2021-07-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/billingconductor/2021-07-30/service-2.json 2.31.35-1/awscli/botocore/data/billingconductor/2021-07-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/billingconductor/2021-07-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/billingconductor/2021-07-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2021-07-30",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"billingconductor",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWSBillingConductor",
     "serviceId":"billingconductor",
     "signatureVersion":"v4",
@@ -22,8 +23,8 @@
       "input":{"shape":"AssociateAccountsInput"},
       "output":{"shape":"AssociateAccountsOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -43,8 +44,8 @@
       "input":{"shape":"AssociatePricingRulesInput"},
       "output":{"shape":"AssociatePricingRulesOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -64,8 +65,8 @@
       "input":{"shape":"BatchAssociateResourcesToCustomLineItemInput"},
       "output":{"shape":"BatchAssociateResourcesToCustomLineItemOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -85,8 +86,8 @@
       "input":{"shape":"BatchDisassociateResourcesFromCustomLineItemInput"},
       "output":{"shape":"BatchDisassociateResourcesFromCustomLineItemOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -105,8 +106,8 @@
       "input":{"shape":"CreateBillingGroupInput"},
       "output":{"shape":"CreateBillingGroupOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -125,8 +126,8 @@
       "input":{"shape":"CreateCustomLineItemInput"},
       "output":{"shape":"CreateCustomLineItemOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -144,8 +145,8 @@
       "input":{"shape":"CreatePricingPlanInput"},
       "output":{"shape":"CreatePricingPlanOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -165,8 +166,8 @@
       "input":{"shape":"CreatePricingRuleInput"},
       "output":{"shape":"CreatePricingRuleOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceLimitExceededException"},
@@ -203,8 +204,8 @@
       "input":{"shape":"DeleteCustomLineItemInput"},
       "output":{"shape":"DeleteCustomLineItemOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
@@ -222,8 +223,8 @@
       "input":{"shape":"DeletePricingPlanInput"},
       "output":{"shape":"DeletePricingPlanOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
@@ -241,8 +242,8 @@
       "input":{"shape":"DeletePricingRuleInput"},
       "output":{"shape":"DeletePricingRuleOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
@@ -260,8 +261,8 @@
       "input":{"shape":"DisassociateAccountsInput"},
       "output":{"shape":"DisassociateAccountsOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -280,8 +281,8 @@
       "input":{"shape":"DisassociatePricingRulesInput"},
       "output":{"shape":"DisassociatePricingRulesOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -306,7 +307,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the margin summary report, which includes the Amazon Web Services cost and charged amount (pro forma cost) by Amazon Web Service for a specific billing group.</p>"
+      "documentation":"<p>Retrieves the margin summary report, which includes the Amazon Web Services cost and charged amount (pro forma cost) by Amazon Web Services service for a specific billing group.</p>"
     },
     "ListAccountAssociations":{
       "name":"ListAccountAssociations",
@@ -549,8 +550,8 @@
       "input":{"shape":"UpdateBillingGroupInput"},
       "output":{"shape":"UpdateBillingGroupOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -588,8 +589,8 @@
       "input":{"shape":"UpdatePricingPlanInput"},
       "output":{"shape":"UpdatePricingPlanOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -608,8 +609,8 @@
       "input":{"shape":"UpdatePricingRuleInput"},
       "output":{"shape":"UpdatePricingRuleOutput"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -885,11 +886,11 @@
     },
     "BillingEntity":{
       "type":"string",
-      "pattern":"[a-zA-Z0-9 ]+"
+      "pattern":"[a-zA-Z0-9() ]+"
     },
     "BillingGroupArn":{
       "type":"string",
-      "pattern":"(arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/)?[0-9]{12}"
+      "pattern":"(arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/)?[a-zA-Z0-9]{10,12}"
     },
     "BillingGroupArnList":{
       "type":"list",
@@ -977,7 +978,7 @@
     },
     "BillingGroupFullArn":{
       "type":"string",
-      "pattern":"arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/[0-9]{12}"
+      "pattern":"arn:aws(-cn)?:billingconductor::[0-9]{12}:billinggroup/[a-zA-Z0-9]{10,12}"
     },
     "BillingGroupList":{
       "type":"list",
@@ -1094,6 +1095,11 @@
       },
       "documentation":"<p>The preferences and settings that will be used to compute the Amazon Web Services charges for a billing group.</p>"
     },
+    "ComputationRuleEnum":{
+      "type":"string",
+      "documentation":"<p>The display settings of the custom line item</p>",
+      "enum":["CONSOLIDATED"]
+    },
     "ConflictException":{
       "type":"structure",
       "required":[
@@ -1143,7 +1149,7 @@
       "members":{
         "ClientToken":{
           "shape":"ClientToken",
-          "documentation":"<p> The token that is needed to support idempotency. Idempotency isn't currently supported, but will be implemented in a future update. </p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you specify to ensure idempotency of the request. Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p>",
           "idempotencyToken":true,
           "location":"header",
           "locationName":"X-Amzn-Client-Token"
@@ -1194,7 +1200,7 @@
       "members":{
         "ClientToken":{
           "shape":"ClientToken",
-          "documentation":"<p> The token that is needed to support idempotency. Idempotency isn't currently supported, but will be implemented in a future update. </p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you specify to ensure idempotency of the request. Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p>",
           "idempotencyToken":true,
           "location":"header",
           "locationName":"X-Amzn-Client-Token"
@@ -1226,7 +1232,9 @@
         "AccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account in which this custom line item will be applied to.</p>"
-        }
+        },
+        "ComputationRule":{"shape":"ComputationRuleEnum"},
+        "PresentationDetails":{"shape":"PresentationObject"}
       }
     },
     "CreateCustomLineItemOutput":{
@@ -1255,7 +1263,7 @@
       "members":{
         "ClientToken":{
           "shape":"ClientToken",
-          "documentation":"<p> The token that is needed to support idempotency. Idempotency isn't currently supported, but will be implemented in a future update. </p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you specify to ensure idempotency of the request. Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p>",
           "idempotencyToken":true,
           "location":"header",
           "locationName":"X-Amzn-Client-Token"
@@ -1297,7 +1305,7 @@
       "members":{
         "ClientToken":{
           "shape":"ClientToken",
-          "documentation":"<p> The token that's needed to support idempotency. Idempotency isn't currently supported, but will be implemented in a future update. </p>",
+          "documentation":"<p>A unique, case-sensitive identifier that you specify to ensure idempotency of the request. Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p>",
           "idempotencyToken":true,
           "location":"header",
           "locationName":"X-Amzn-Client-Token"
@@ -1320,7 +1328,7 @@
         },
         "ModifierPercentage":{
           "shape":"ModifierPercentage",
-          "documentation":"<p> A percentage modifier that's applied on the public pricing rates. </p>"
+          "documentation":"<p>A percentage modifier that's applied on the public pricing rates. Your entry will be rounded to the nearest 2 decimal places.</p>"
         },
         "Service":{
           "shape":"Service",
@@ -1340,7 +1348,7 @@
         },
         "UsageType":{
           "shape":"UsageType",
-          "documentation":"<p> Usage type is the unit that each service uses to measure the usage of a specific type of resource.</p> <p>If the <code>Scope</code> attribute is set to <code>SKU</code>, this attribute indicates which usage type the <code>PricingRule</code> is modifying. For example, <code>USW2-BoxUsage:m2.2xlarge</code> describes an<code> M2 High Memory Double Extra Large</code> instance in the US West (Oregon) Region. <pre><code>&lt;/p&gt; </code></pre>"
+          "documentation":"<p> Usage type is the unit that each service uses to measure the usage of a specific type of resource.</p> <p>If the <code>Scope</code> attribute is set to <code>SKU</code>, this attribute indicates which usage type the <code>PricingRule</code> is modifying. For example, <code>USW2-BoxUsage:m2.2xlarge</code> describes an<code> M2 High Memory Double Extra Large</code> instance in the US West (Oregon) Region. </p>"
         },
         "Operation":{
           "shape":"Operation",
@@ -1519,6 +1527,14 @@
         "AccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account in which this custom line item will be applied to.</p>"
+        },
+        "ComputationRule":{
+          "shape":"ComputationRuleEnum",
+          "documentation":"<p>The display settings of the custom line item</p>"
+        },
+        "PresentationDetails":{
+          "shape":"PresentationObject",
+          "documentation":"<p>The presentation configuration of the custom line item</p>"
         }
       },
       "documentation":"<p>A representation of a custom line item.</p>"
@@ -1635,6 +1651,14 @@
         "AccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account in which this custom line item will be applied to.</p>"
+        },
+        "ComputationRule":{
+          "shape":"ComputationRuleEnum",
+          "documentation":"<p>The display settings of the custom line item</p>"
+        },
+        "PresentationDetails":{
+          "shape":"PresentationObject",
+          "documentation":"<p>The presentation configuration of the custom line item</p>"
         }
       },
       "documentation":"<p>A representation of a custom line item version.</p>"
@@ -1811,7 +1835,7 @@
         },
         "GroupBy":{
           "shape":"GroupByAttributesList",
-          "documentation":"<p>A list of strings that specify the attributes that are used to break down costs in the margin summary reports for the billing group. For example, you can view your costs by the Amazon Web Service name or the billing period.</p>"
+          "documentation":"<p>A list of strings that specify the attributes that are used to break down costs in the margin summary reports for the billing group. For example, you can view your costs by the Amazon Web Services service name or the billing period.</p>"
         },
         "MaxResults":{
           "shape":"MaxBillingGroupCostReportResults",
@@ -2567,9 +2591,20 @@
       "min":1,
       "pattern":"\\S+"
     },
+    "PresentationObject":{
+      "type":"structure",
+      "required":["Service"],
+      "members":{
+        "Service":{
+          "shape":"Service",
+          "documentation":"<p>This defines the service of where the custom line item is presented</p>"
+        }
+      },
+      "documentation":"<p>The presentation configuration of the custom line item</p>"
+    },
     "PricingPlanArn":{
       "type":"string",
-      "pattern":"(arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingplan/)?[a-zA-Z0-9]{10}"
+      "pattern":"(arn:aws(-cn)?:billingconductor::(aws|[0-9]{12}):pricingplan/)?(BasicPricingPlan|[a-zA-Z0-9]{10})"
     },
     "PricingPlanArns":{
       "type":"list",
@@ -2585,7 +2620,7 @@
     },
     "PricingPlanFullArn":{
       "type":"string",
-      "pattern":"arn:aws(-cn)?:billingconductor::[0-9]{12}:pricingplan/[a-zA-Z0-9]{10}"
+      "pattern":"arn:aws(-cn)?:billingconductor::(aws|[0-9]{12}):pricingplan/(BasicPricingPlan|[a-zA-Z0-9]{10})"
     },
     "PricingPlanList":{
       "type":"list",
@@ -2713,7 +2748,7 @@
         },
         "UsageType":{
           "shape":"UsageType",
-          "documentation":"<p> Usage type is the unit that each service uses to measure the usage of a specific type of resource.</p> <p>If the <code>Scope</code> attribute is set to <code>SKU</code>, this attribute indicates which usage type the <code>PricingRule</code> is modifying. For example, <code>USW2-BoxUsage:m2.2xlarge</code> describes an<code> M2 High Memory Double Extra Large</code> instance in the US West (Oregon) Region. <pre><code>&lt;/p&gt; </code></pre>"
+          "documentation":"<p> Usage type is the unit that each service uses to measure the usage of a specific type of resource.</p> <p>If the <code>Scope</code> attribute is set to <code>SKU</code>, this attribute indicates which usage type the <code>PricingRule</code> is modifying. For example, <code>USW2-BoxUsage:m2.2xlarge</code> describes an<code> M2 High Memory Double Extra Large</code> instance in the US West (Oregon) Region. </p>"
         },
         "Operation":{
           "shape":"Operation",
@@ -2852,8 +2887,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2918,8 +2952,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateBillingGroupAccountGrouping":{
       "type":"structure",
@@ -3178,7 +3211,7 @@
         },
         "ModifierPercentage":{
           "shape":"ModifierPercentage",
-          "documentation":"<p> The new modifier to show pricing plan rates as a percentage. </p>"
+          "documentation":"<p> The new modifier to show pricing plan rates as a percentage. Your entry will be rounded to the nearest 2 decimal places. </p>"
         },
         "Tiering":{
           "shape":"UpdateTieringInput",
@@ -3274,7 +3307,7 @@
           "documentation":"<p>The fields that caused the error, if applicable. </p>"
         }
       },
-      "documentation":"<p>The input doesn't match with the constraints specified by Amazon Web Services.</p>",
+      "documentation":"<p>The input doesn't match with the constraints specified by Amazon Web Services services.</p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -3328,6 +3361,7 @@
         "MISSING_PRICINGPLAN",
         "MISMATCHED_PRICINGRULE_ARN",
         "DUPLICATE_PRICINGRULE_ARNS",
+        "MISSING_COSTCATEGORY",
         "ILLEGAL_EXPRESSION",
         "ILLEGAL_SCOPE",
         "ILLEGAL_SERVICE",
@@ -3365,9 +3399,12 @@
         "INVALID_FILTER",
         "TOO_MANY_AUTO_ASSOCIATE_BILLING_GROUPS",
         "CANNOT_DELETE_AUTO_ASSOCIATE_BILLING_GROUP",
-        "ILLEGAL_ACCOUNT_ID"
+        "ILLEGAL_ACCOUNT_ID",
+        "BILLING_GROUP_ALREADY_EXIST_IN_CURRENT_BILLING_PERIOD",
+        "ILLEGAL_COMPUTATION_RULE",
+        "ILLEGAL_LINE_ITEM_FILTER"
       ]
     }
   },
-  "documentation":"<p>Amazon Web Services Billing Conductor is a fully managed service that you can use to customize a <a href=\"https://docs.aws.amazon.com/billingconductor/latest/userguide/understanding-eb.html#eb-other-definitions\">proforma</a> version of your billing data each month, to accurately show or chargeback your end customers. Amazon Web Services Billing Conductor doesn't change the way you're billed by Amazon Web Services each month by design. Instead, it provides you with a mechanism to configure, generate, and display rates to certain customers over a given billing period. You can also analyze the difference between the rates you apply to your accounting groupings relative to your actual rates from Amazon Web Services. As a result of your Amazon Web Services Billing Conductor configuration, the payer account can also see the custom rate applied on the billing details page of the <a href=\"https://console.aws.amazon.com/billing\">Amazon Web Services Billing console</a>, or configure a cost and usage report per billing group.</p> <p>This documentation shows how you can configure Amazon Web Services Billing Conductor using its API. For more information about using the <a href=\"https://console.aws.amazon.com/billingconductor/\">Amazon Web Services Billing Conductor</a> user interface, see the <a href=\"https://docs.aws.amazon.com/billingconductor/latest/userguide/what-is-billingconductor.html\"> Amazon Web Services Billing Conductor User Guide</a>.</p>"
+  "documentation":"<p>Billing Conductor is a fully managed service that you can use to customize a <a href=\"https://docs.aws.amazon.com/billingconductor/latest/userguide/understanding-eb.html#eb-other-definitions\">pro forma</a> version of your billing data each month, to accurately show or chargeback your end customers. Billing Conductor doesn't change the way you're billed by Amazon Web Services each month by design. Instead, it provides you with a mechanism to configure, generate, and display rates to certain customers over a given billing period. You can also analyze the difference between the rates you apply to your accounting groupings relative to your actual rates from Amazon Web Services. As a result of your Billing Conductor configuration, the payer account can also see the custom rate applied on the billing details page of the <a href=\"https://console.aws.amazon.com/billing\">Billing console</a>, or configure a cost and usage report per billing group.</p> <p>This documentation shows how you can configure Billing Conductor by using its API. For more information about using the <a href=\"https://console.aws.amazon.com/billingconductor/\">Billing Conductor</a> user interface, see the <a href=\"https://docs.aws.amazon.com/billingconductor/latest/userguide/what-is-billingconductor.html\"> Billing Conductor User Guide</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/braket/2019-09-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/braket/2019-09-01/service-2.json 2.31.35-1/awscli/botocore/data/braket/2019-09-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/braket/2019-09-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/braket/2019-09-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2019-09-01",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"braket",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Braket",
     "serviceId":"Braket",
     "signatureVersion":"v4",
@@ -29,7 +30,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Cancels an Amazon Braket job.</p>",
+      "documentation":"<p>Cancels an Amazon Braket hybrid job.</p>",
       "idempotent":true
     },
     "CancelQuantumTask":{
@@ -67,11 +68,11 @@
         {"shape":"ThrottlingException"},
         {"shape":"DeviceOfflineException"},
         {"shape":"DeviceRetiredException"},
-        {"shape":"InternalServiceException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates an Amazon Braket job.</p>"
+      "documentation":"<p>Creates an Amazon Braket hybrid job.</p>"
     },
     "CreateQuantumTask":{
       "name":"CreateQuantumTask",
@@ -84,11 +85,11 @@
       "output":{"shape":"CreateQuantumTaskResponse"},
       "errors":[
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"DeviceOfflineException"},
+        {"shape":"ThrottlingException"},
         {"shape":"DeviceRetiredException"},
-        {"shape":"InternalServiceException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Creates a quantum task.</p>"
@@ -109,7 +110,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the devices available in Amazon Braket.</p> <note> <p>For backwards compatibility with older versions of BraketSchemas, OpenQASM information is omitted from GetDevice API calls. To get this information the user-agent needs to present a recent version of the BraketSchemas (1.8.0 or later). The Braket SDK automatically reports this for you. If you do not see OpenQASM results in the GetDevice response when using a Braket SDK, you may need to set AWS_EXECUTION_ENV environment variable to configure user-agent. See the code examples provided below for how to do this for the AWS CLI, Boto3, and the Go, Java, and JavaScript/TypeScript SDKs.</p> </note>"
+      "documentation":"<p>Retrieves the devices available in Amazon Braket.</p> <note> <p>For backwards compatibility with older versions of BraketSchemas, OpenQASM information is omitted from GetDevice API calls. To get this information the user-agent needs to present a recent version of the BraketSchemas (1.8.0 or later). The Braket SDK automatically reports this for you. If you do not see OpenQASM results in the GetDevice response when using a Braket SDK, you may need to set AWS_EXECUTION_ENV environment variable to configure user-agent. See the code examples provided below for how to do this for the AWS CLI, Boto3, and the Go, Java, and JavaScript/TypeScript SDKs.</p> </note>",
+      "readonly":true
     },
     "GetJob":{
       "name":"GetJob",
@@ -127,7 +129,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the specified Amazon Braket job.</p>"
+      "documentation":"<p>Retrieves the specified Amazon Braket hybrid job.</p>",
+      "readonly":true
     },
     "GetQuantumTask":{
       "name":"GetQuantumTask",
@@ -145,7 +148,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the specified quantum task.</p>"
+      "documentation":"<p>Retrieves the specified quantum task.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -161,7 +165,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Shows the tags associated with this resource.</p>"
+      "documentation":"<p>Shows the tags associated with this resource.</p>",
+      "readonly":true
     },
     "SearchDevices":{
       "name":"SearchDevices",
@@ -178,7 +183,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Searches for devices using the specified filters.</p>"
+      "documentation":"<p>Searches for devices using the specified filters.</p>",
+      "readonly":true
     },
     "SearchJobs":{
       "name":"SearchJobs",
@@ -195,7 +201,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Searches for Amazon Braket jobs that match the specified filter values.</p>"
+      "documentation":"<p>Searches for Amazon Braket hybrid jobs that match the specified filter values.</p>"
     },
     "SearchQuantumTasks":{
       "name":"SearchQuantumTasks",
@@ -212,7 +218,8 @@
         {"shape":"InternalServiceException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Searches for tasks that match the specified filter values.</p>"
+      "documentation":"<p>Searches for tasks that match the specified filter values.</p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -254,26 +261,45 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
+      "documentation":"<p>You do not have sufficient permissions to perform this action.</p>",
       "error":{
         "httpStatusCode":403,
         "senderFault":true
       },
       "exception":true
     },
-    "AlgorithmSpecification":{
+    "ActionMetadata":{
       "type":"structure",
+      "required":["actionType"],
       "members":{
-        "containerImage":{
-          "shape":"ContainerImage",
-          "documentation":"<p>The container image used to create an Amazon Braket job.</p>"
+        "actionType":{
+          "shape":"String",
+          "documentation":"<p>The type of action associated with the quantum task.</p>"
+        },
+        "programCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of programs in a program set. This is only available for a program set.</p>"
         },
+        "executableCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of executables in a program set. This is only available for a program set.</p>"
+        }
+      },
+      "documentation":"<p>Contains metadata about the quantum task action, including the action type and program statistics.</p>"
+    },
+    "AlgorithmSpecification":{
+      "type":"structure",
+      "members":{
         "scriptModeConfig":{
           "shape":"ScriptModeConfig",
           "documentation":"<p>Configures the paths to the Python scripts used for entry and training.</p>"
+        },
+        "containerImage":{
+          "shape":"ContainerImage",
+          "documentation":"<p>The container image used to create an Amazon Braket hybrid job.</p>"
         }
       },
-      "documentation":"<p>Defines the Amazon Braket job to be created. Specifies the container image the job uses and the paths to the Python scripts used for entry and training.</p>"
+      "documentation":"<p>Defines the Amazon Braket hybrid job to be created. Specifies the container image the job uses and the paths to the Python scripts used for entry and training.</p>"
     },
     "Association":{
       "type":"structure",
@@ -303,7 +329,7 @@
     },
     "BraketResourceArn":{
       "type":"string",
-      "pattern":"^arn:aws[a-z\\-]*:braket:[a-z0-9\\-]*:[0-9]{12}:.*$"
+      "pattern":"arn:aws[a-z\\-]*:braket:[a-z0-9\\-]*:[0-9]{12}:.*"
     },
     "CancelJobRequest":{
       "type":"structure",
@@ -311,7 +337,7 @@
       "members":{
         "jobArn":{
           "shape":"JobArn",
-          "documentation":"<p>The ARN of the Amazon Braket job to cancel.</p>",
+          "documentation":"<p>The ARN of the Amazon Braket hybrid job to cancel.</p>",
           "location":"uri",
           "locationName":"jobArn"
         }
@@ -320,54 +346,54 @@
     "CancelJobResponse":{
       "type":"structure",
       "required":[
-        "cancellationStatus",
-        "jobArn"
+        "jobArn",
+        "cancellationStatus"
       ],
       "members":{
-        "cancellationStatus":{
-          "shape":"CancellationStatus",
-          "documentation":"<p>The status of the job cancellation request.</p>"
-        },
         "jobArn":{
           "shape":"JobArn",
           "documentation":"<p>The ARN of the Amazon Braket job.</p>"
+        },
+        "cancellationStatus":{
+          "shape":"CancellationStatus",
+          "documentation":"<p>The status of the hybrid job.</p>"
         }
       }
     },
     "CancelQuantumTaskRequest":{
       "type":"structure",
       "required":[
-        "clientToken",
-        "quantumTaskArn"
+        "quantumTaskArn",
+        "clientToken"
       ],
       "members":{
-        "clientToken":{
-          "shape":"String64",
-          "documentation":"<p>The client token associated with the request.</p>",
-          "idempotencyToken":true
-        },
         "quantumTaskArn":{
           "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task to cancel.</p>",
+          "documentation":"<p>The ARN of the quantum task to cancel.</p>",
           "location":"uri",
           "locationName":"quantumTaskArn"
+        },
+        "clientToken":{
+          "shape":"String64",
+          "documentation":"<p>The client token associated with the cancellation request.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "CancelQuantumTaskResponse":{
       "type":"structure",
       "required":[
-        "cancellationStatus",
-        "quantumTaskArn"
+        "quantumTaskArn",
+        "cancellationStatus"
       ],
       "members":{
-        "cancellationStatus":{
-          "shape":"CancellationStatus",
-          "documentation":"<p>The status of the cancellation request.</p>"
-        },
         "quantumTaskArn":{
           "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task.</p>"
+          "documentation":"<p>The ARN of the quantum task.</p>"
+        },
+        "cancellationStatus":{
+          "shape":"CancellationStatus",
+          "documentation":"<p>The status of the quantum task.</p>"
         }
       }
     },
@@ -406,72 +432,72 @@
           "documentation":"<p>The URI locating the container image.</p>"
         }
       },
-      "documentation":"<p>The container image used to create an Amazon Braket job.</p>"
+      "documentation":"<p>The container image used to create an Amazon Braket hybrid job.</p>"
     },
     "CreateJobRequest":{
       "type":"structure",
       "required":[
-        "algorithmSpecification",
         "clientToken",
-        "deviceConfig",
-        "instanceConfig",
-        "jobName",
+        "algorithmSpecification",
         "outputDataConfig",
-        "roleArn"
+        "jobName",
+        "roleArn",
+        "instanceConfig",
+        "deviceConfig"
       ],
       "members":{
-        "algorithmSpecification":{
-          "shape":"AlgorithmSpecification",
-          "documentation":"<p>Definition of the Amazon Braket job to be created. Specifies the container image the job uses and information about the Python scripts used for entry and training.</p>"
-        },
-        "associations":{
-          "shape":"CreateJobRequestAssociationsList",
-          "documentation":"<p>The list of Amazon Braket resources associated with the hybrid job.</p>"
-        },
-        "checkpointConfig":{
-          "shape":"JobCheckpointConfig",
-          "documentation":"<p>Information about the output locations for job checkpoint data.</p>"
-        },
         "clientToken":{
           "shape":"String64",
-          "documentation":"<p>A unique token that guarantees that the call to this API is idempotent.</p>",
+          "documentation":"<p>The client token associated with this request that guarantees that the request is idempotent.</p>",
           "idempotencyToken":true
         },
-        "deviceConfig":{
-          "shape":"DeviceConfig",
-          "documentation":"<p>The quantum processing unit (QPU) or simulator used to create an Amazon Braket job.</p>"
-        },
-        "hyperParameters":{
-          "shape":"HyperParameters",
-          "documentation":"<p>Algorithm-specific parameters used by an Amazon Braket job that influence the quality of the training job. The values are set with a string of JSON key:value pairs, where the key is the name of the hyperparameter and the value is the value of th hyperparameter.</p>"
+        "algorithmSpecification":{
+          "shape":"AlgorithmSpecification",
+          "documentation":"<p>Definition of the Amazon Braket job to be created. Specifies the container image the job uses and information about the Python scripts used for entry and training.</p>"
         },
         "inputDataConfig":{
           "shape":"CreateJobRequestInputDataConfigList",
           "documentation":"<p>A list of parameters that specify the name and type of input data and where it is located.</p>"
         },
-        "instanceConfig":{
-          "shape":"InstanceConfig",
-          "documentation":"<p>Configuration of the resource instances to use while running the hybrid job on Amazon Braket.</p>"
+        "outputDataConfig":{
+          "shape":"JobOutputDataConfig",
+          "documentation":"<p>The path to the S3 location where you want to store hybrid job artifacts and the encryption key used to store them.</p>"
+        },
+        "checkpointConfig":{
+          "shape":"JobCheckpointConfig",
+          "documentation":"<p>Information about the output locations for hybrid job checkpoint data.</p>"
         },
         "jobName":{
           "shape":"CreateJobRequestJobNameString",
-          "documentation":"<p>The name of the Amazon Braket job.</p>"
-        },
-        "outputDataConfig":{
-          "shape":"JobOutputDataConfig",
-          "documentation":"<p>The path to the S3 location where you want to store job artifacts and the encryption key used to store them.</p>"
+          "documentation":"<p>The name of the Amazon Braket hybrid job.</p>"
         },
         "roleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that Amazon Braket can assume to perform tasks on behalf of a user. It can access user resources, run an Amazon Braket job container on behalf of user, and output resources to the users' s3 buckets.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that Amazon Braket can assume to perform tasks on behalf of a user. It can access user resources, run an Amazon Braket job container on behalf of user, and output results and hybrid job details to the users' s3 buckets.</p>"
         },
         "stoppingCondition":{
           "shape":"JobStoppingCondition",
-          "documentation":"<p> The user-defined criteria that specifies when a job stops running.</p>"
+          "documentation":"<p> The user-defined criteria that specifies when a hybrid job stops running.</p>"
+        },
+        "instanceConfig":{
+          "shape":"InstanceConfig",
+          "documentation":"<p>Configuration of the resource instances to use while running the hybrid job on Amazon Braket.</p>"
+        },
+        "hyperParameters":{
+          "shape":"HyperParameters",
+          "documentation":"<p>Algorithm-specific parameters used by an Amazon Braket hybrid job that influence the quality of the training job. The values are set with a map of JSON key:value pairs, where the key is the name of the hyperparameter and the value is the value of the hyperparameter.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any hyperparameter fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request hyperparameter variable or plain text fields.</p> </important>"
+        },
+        "deviceConfig":{
+          "shape":"DeviceConfig",
+          "documentation":"<p>The quantum processing unit (QPU) or simulator used to create an Amazon Braket hybrid job.</p>"
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>A tag object that consists of a key and an optional value, used to manage metadata for Amazon Braket resources.</p>"
+          "documentation":"<p>Tags to be added to the hybrid job you're creating.</p>"
+        },
+        "associations":{
+          "shape":"CreateJobRequestAssociationsList",
+          "documentation":"<p>The list of Amazon Braket resources associated with the hybrid job.</p>"
         }
       }
     },
@@ -491,7 +517,7 @@
       "type":"string",
       "max":50,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,50}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,50}"
     },
     "CreateJobResponse":{
       "type":"structure",
@@ -499,30 +525,21 @@
       "members":{
         "jobArn":{
           "shape":"JobArn",
-          "documentation":"<p>The ARN of the Amazon Braket job created.</p>"
+          "documentation":"<p>The ARN of the Amazon Braket hybrid job created.</p>"
         }
       }
     },
     "CreateQuantumTaskRequest":{
       "type":"structure",
       "required":[
-        "action",
         "clientToken",
         "deviceArn",
+        "shots",
         "outputS3Bucket",
         "outputS3KeyPrefix",
-        "shots"
+        "action"
       ],
       "members":{
-        "action":{
-          "shape":"JsonValue",
-          "documentation":"<p>The action associated with the task.</p>",
-          "jsonvalue":true
-        },
-        "associations":{
-          "shape":"CreateQuantumTaskRequestAssociationsList",
-          "documentation":"<p>The list of Amazon Braket resources associated with the quantum task.</p>"
-        },
         "clientToken":{
           "shape":"String64",
           "documentation":"<p>The client token associated with the request.</p>",
@@ -530,32 +547,45 @@
         },
         "deviceArn":{
           "shape":"DeviceArn",
-          "documentation":"<p>The ARN of the device to run the task on.</p>"
+          "documentation":"<p>The ARN of the device to run the quantum task on.</p>"
         },
         "deviceParameters":{
           "shape":"CreateQuantumTaskRequestDeviceParametersString",
-          "documentation":"<p>The parameters for the device to run the task on.</p>",
+          "documentation":"<p>The parameters for the device to run the quantum task on.</p>",
           "jsonvalue":true
         },
-        "jobToken":{
-          "shape":"JobToken",
-          "documentation":"<p>The token for an Amazon Braket job that associates it with the quantum task.</p>"
+        "shots":{
+          "shape":"CreateQuantumTaskRequestShotsLong",
+          "documentation":"<p>The number of shots to use for the quantum task.</p>"
         },
         "outputS3Bucket":{
           "shape":"CreateQuantumTaskRequestOutputS3BucketString",
-          "documentation":"<p>The S3 bucket to store task result files in.</p>"
+          "documentation":"<p>The S3 bucket to store quantum task result files in.</p>"
         },
         "outputS3KeyPrefix":{
           "shape":"CreateQuantumTaskRequestOutputS3KeyPrefixString",
-          "documentation":"<p>The key prefix for the location in the S3 bucket to store task results in.</p>"
+          "documentation":"<p>The key prefix for the location in the S3 bucket to store quantum task results in.</p>"
         },
-        "shots":{
-          "shape":"CreateQuantumTaskRequestShotsLong",
-          "documentation":"<p>The number of shots to use for the task.</p>"
+        "action":{
+          "shape":"JsonValue",
+          "documentation":"<p>The action associated with the quantum task.</p>",
+          "jsonvalue":true
         },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags to be added to the quantum task you're creating.</p>"
+        },
+        "jobToken":{
+          "shape":"JobToken",
+          "documentation":"<p>The token for an Amazon Braket hybrid job that associates it with the quantum task.</p>"
+        },
+        "associations":{
+          "shape":"CreateQuantumTaskRequestAssociationsList",
+          "documentation":"<p>The list of Amazon Braket resources associated with the quantum task.</p>"
+        },
+        "experimentalCapabilities":{
+          "shape":"ExperimentalCapabilities",
+          "documentation":"<p>Enable experimental capabilities for the quantum task.</p>"
         }
       }
     },
@@ -591,7 +621,7 @@
       "members":{
         "quantumTaskArn":{
           "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task created by the request.</p>"
+          "documentation":"<p>The ARN of the quantum task created by the request.</p>"
         }
       }
     },
@@ -601,10 +631,10 @@
       "members":{
         "s3DataSource":{
           "shape":"S3DataSource",
-          "documentation":"<p>Information about the data stored in Amazon S3 used by the Amazon Braket job.</p>"
+          "documentation":"<p>Amazon S3 path of the input data used by the hybrid job.</p>"
         }
       },
-      "documentation":"<p>Information about the source of the data used by the Amazon Braket job.</p>"
+      "documentation":"<p>Information about the source of the input data used by the Amazon Braket hybrid job.</p>"
     },
     "DeviceArn":{
       "type":"string",
@@ -617,10 +647,10 @@
       "members":{
         "device":{
           "shape":"String256",
-          "documentation":"<p>The primary quantum processing unit (QPU) or simulator used to create and run an Amazon Braket job.</p>"
+          "documentation":"<p>The primary device ARN used to create and run an Amazon Braket hybrid job.</p>"
         }
       },
-      "documentation":"<p>Configures the quantum processing units (QPUs) or simulator used to create and run an Amazon Braket job.</p>"
+      "documentation":"<p>Configures the primary device used to create and run an Amazon Braket hybrid job.</p>"
     },
     "DeviceOfflineException":{
       "type":"structure",
@@ -645,16 +675,16 @@
           "shape":"QueueName",
           "documentation":"<p>The name of the queue. </p>"
         },
-        "queuePriority":{
-          "shape":"QueuePriority",
-          "documentation":"<p>Optional. Specifies the priority of the queue. Tasks in a priority queue are processed before the tasks in a normal queue.</p>"
-        },
         "queueSize":{
           "shape":"String",
-          "documentation":"<p>The number of jobs or tasks in the queue for a given device. </p>"
+          "documentation":"<p>The number of hybrid jobs or quantum tasks in the queue for a given device. </p>"
+        },
+        "queuePriority":{
+          "shape":"QueuePriority",
+          "documentation":"<p>Optional. Specifies the priority of the queue. Quantum tasks in a priority queue are processed before the quantum tasks in a normal queue.</p>"
         }
       },
-      "documentation":"<p>Information about tasks and jobs queued on a device.</p>"
+      "documentation":"<p>Information about quantum tasks and hybrid jobs queued on a device.</p>"
     },
     "DeviceQueueInfoList":{
       "type":"list",
@@ -685,9 +715,9 @@
       "required":[
         "deviceArn",
         "deviceName",
-        "deviceStatus",
+        "providerName",
         "deviceType",
-        "providerName"
+        "deviceStatus"
       ],
       "members":{
         "deviceArn":{
@@ -698,17 +728,17 @@
           "shape":"String",
           "documentation":"<p>The name of the device.</p>"
         },
-        "deviceStatus":{
-          "shape":"DeviceStatus",
-          "documentation":"<p>The status of the device.</p>"
+        "providerName":{
+          "shape":"String",
+          "documentation":"<p>The provider of the device.</p>"
         },
         "deviceType":{
           "shape":"DeviceType",
           "documentation":"<p>The type of the device.</p>"
         },
-        "providerName":{
-          "shape":"String",
-          "documentation":"<p>The provider of the device.</p>"
+        "deviceStatus":{
+          "shape":"DeviceStatus",
+          "documentation":"<p>The status of the device.</p>"
         }
       },
       "documentation":"<p>Includes information about the device.</p>"
@@ -724,6 +754,24 @@
         "SIMULATOR"
       ]
     },
+    "ExperimentalCapabilities":{
+      "type":"structure",
+      "members":{
+        "enabled":{
+          "shape":"ExperimentalCapabilitiesEnablementType",
+          "documentation":"<p>Enabled experimental capabilities.</p>"
+        }
+      },
+      "documentation":"<p>Enabled experimental capabilities for quantum hardware. Note that the use of these features may impact device capabilities and performance beyond its standard specifications.</p>",
+      "union":true
+    },
+    "ExperimentalCapabilitiesEnablementType":{
+      "type":"string",
+      "enum":[
+        "ALL",
+        "NONE"
+      ]
+    },
     "GetDeviceRequest":{
       "type":"structure",
       "required":["deviceArn"],
@@ -740,41 +788,41 @@
       "type":"structure",
       "required":[
         "deviceArn",
-        "deviceCapabilities",
         "deviceName",
-        "deviceStatus",
+        "providerName",
         "deviceType",
-        "providerName"
+        "deviceStatus",
+        "deviceCapabilities"
       ],
       "members":{
         "deviceArn":{
           "shape":"DeviceArn",
           "documentation":"<p>The ARN of the device.</p>"
         },
-        "deviceCapabilities":{
-          "shape":"JsonValue",
-          "documentation":"<p>Details about the capabilities of the device.</p>",
-          "jsonvalue":true
-        },
         "deviceName":{
           "shape":"String",
           "documentation":"<p>The name of the device.</p>"
         },
-        "deviceQueueInfo":{
-          "shape":"DeviceQueueInfoList",
-          "documentation":"<p>List of information about tasks and jobs queued on a device.</p>"
+        "providerName":{
+          "shape":"String",
+          "documentation":"<p>The name of the partner company for the device.</p>"
+        },
+        "deviceType":{
+          "shape":"DeviceType",
+          "documentation":"<p>The type of the device.</p>"
         },
         "deviceStatus":{
           "shape":"DeviceStatus",
           "documentation":"<p>The status of the device.</p>"
         },
-        "deviceType":{
-          "shape":"DeviceType",
-          "documentation":"<p>The type of the device.</p>"
+        "deviceCapabilities":{
+          "shape":"JsonValue",
+          "documentation":"<p>Details about the capabilities of the device.</p>",
+          "jsonvalue":true
         },
-        "providerName":{
-          "shape":"String",
-          "documentation":"<p>The name of the partner company for the device.</p>"
+        "deviceQueueInfo":{
+          "shape":"DeviceQueueInfoList",
+          "documentation":"<p>The number of quantum tasks and hybrid jobs currently queued on the device.</p>"
         }
       }
     },
@@ -782,116 +830,116 @@
       "type":"structure",
       "required":["jobArn"],
       "members":{
-        "additionalAttributeNames":{
-          "shape":"HybridJobAdditionalAttributeNamesList",
-          "documentation":"<p>A list of attributes to return information for.</p>",
-          "location":"querystring",
-          "locationName":"additionalAttributeNames"
-        },
         "jobArn":{
           "shape":"JobArn",
-          "documentation":"<p>The ARN of the job to retrieve.</p>",
+          "documentation":"<p>The ARN of the hybrid job to retrieve.</p>",
           "location":"uri",
           "locationName":"jobArn"
+        },
+        "additionalAttributeNames":{
+          "shape":"HybridJobAdditionalAttributeNamesList",
+          "documentation":"<p>A list of attributes to return additional information for. Only the QueueInfo additional attribute name is currently supported. </p>",
+          "location":"querystring",
+          "locationName":"additionalAttributeNames"
         }
       }
     },
     "GetJobResponse":{
       "type":"structure",
       "required":[
-        "algorithmSpecification",
-        "createdAt",
-        "instanceConfig",
+        "status",
         "jobArn",
+        "roleArn",
         "jobName",
         "outputDataConfig",
-        "roleArn",
-        "status"
+        "algorithmSpecification",
+        "instanceConfig",
+        "createdAt"
       ],
       "members":{
-        "algorithmSpecification":{
-          "shape":"AlgorithmSpecification",
-          "documentation":"<p>Definition of the Amazon Braket job created. Specifies the container image the job uses, information about the Python scripts used for entry and training, and the user-defined metrics used to evaluation the job.</p>"
-        },
-        "associations":{
-          "shape":"Associations",
-          "documentation":"<p>The list of Amazon Braket resources associated with the hybrid job.</p>"
-        },
-        "billableDuration":{
-          "shape":"Integer",
-          "documentation":"<p>The billable time the Amazon Braket job used to complete.</p>"
-        },
-        "checkpointConfig":{
-          "shape":"JobCheckpointConfig",
-          "documentation":"<p>Information about the output locations for job checkpoint data.</p>"
-        },
-        "createdAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job was created.</p>"
-        },
-        "deviceConfig":{
-          "shape":"DeviceConfig",
-          "documentation":"<p>The quantum processing unit (QPU) or simulator used to run the Amazon Braket job.</p>"
+        "status":{
+          "shape":"JobPrimaryStatus",
+          "documentation":"<p>The status of the Amazon Braket hybrid job.</p>"
         },
-        "endedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job ended.</p>"
+        "jobArn":{
+          "shape":"JobArn",
+          "documentation":"<p>The ARN of the Amazon Braket hybrid job.</p>"
         },
-        "events":{
-          "shape":"JobEvents",
-          "documentation":"<p>Details about the type and time events occurred related to the Amazon Braket job.</p>"
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that Amazon Braket can assume to perform tasks on behalf of a user. It can access user resources, run an Amazon Braket job container on behalf of user, and output results and other hybrid job details to the s3 buckets of a user.</p>"
         },
         "failureReason":{
           "shape":"String1024",
-          "documentation":"<p>A description of the reason why an Amazon Braket job failed, if it failed.</p>"
+          "documentation":"<p>A description of the reason why an Amazon Braket hybrid job failed, if it failed.</p>"
+        },
+        "jobName":{
+          "shape":"GetJobResponseJobNameString",
+          "documentation":"<p>The name of the Amazon Braket hybrid job.</p>"
         },
         "hyperParameters":{
           "shape":"HyperParameters",
-          "documentation":"<p>Algorithm-specific parameters used by an Amazon Braket job that influence the quality of the traiing job. The values are set with a string of JSON key:value pairs, where the key is the name of the hyperparameter and the value is the value of th hyperparameter.</p>"
+          "documentation":"<p>Algorithm-specific parameters used by an Amazon Braket hybrid job that influence the quality of the traiing job. The values are set with a map of JSON key:value pairs, where the key is the name of the hyperparameter and the value is the value of th hyperparameter.</p>"
         },
         "inputDataConfig":{
           "shape":"InputConfigList",
           "documentation":"<p>A list of parameters that specify the name and type of input data and where it is located.</p>"
         },
-        "instanceConfig":{
-          "shape":"InstanceConfig",
-          "documentation":"<p>The resource instances to use while running the hybrid job on Amazon Braket.</p>"
+        "outputDataConfig":{
+          "shape":"JobOutputDataConfig",
+          "documentation":"<p>The path to the S3 location where hybrid job artifacts are stored and the encryption key used to store them there.</p>"
         },
-        "jobArn":{
-          "shape":"JobArn",
-          "documentation":"<p>The ARN of the Amazon Braket job.</p>"
+        "stoppingCondition":{
+          "shape":"JobStoppingCondition",
+          "documentation":"<p>The user-defined criteria that specifies when to stop a running hybrid job.</p>"
         },
-        "jobName":{
-          "shape":"GetJobResponseJobNameString",
-          "documentation":"<p>The name of the Amazon Braket job.</p>"
+        "checkpointConfig":{
+          "shape":"JobCheckpointConfig",
+          "documentation":"<p>Information about the output locations for hybrid job checkpoint data.</p>"
         },
-        "outputDataConfig":{
-          "shape":"JobOutputDataConfig",
-          "documentation":"<p>The path to the S3 location where job artifacts are stored and the encryption key used to store them there.</p>"
+        "algorithmSpecification":{
+          "shape":"AlgorithmSpecification",
+          "documentation":"<p>Definition of the Amazon Braket hybrid job created. Provides information about the container image used, and the Python scripts used for training.</p>"
         },
-        "queueInfo":{
-          "shape":"HybridJobQueueInfo",
-          "documentation":"<p>Queue information for the requested job. Only returned if <code>QueueInfo</code> is specified in the <code>additionalAttributeNames\"</code> field in the <code>GetJob</code> API request.</p>"
+        "instanceConfig":{
+          "shape":"InstanceConfig",
+          "documentation":"<p>The resource instances to use while running the hybrid job on Amazon Braket.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that Amazon Braket can assume to perform tasks on behalf of a user. It can access user resources, run an Amazon Braket job container on behalf of user, and output resources to the s3 buckets of a user.</p>"
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the Amazon Braket hybrid job was created.</p>"
         },
         "startedAt":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job was started.</p>"
+          "documentation":"<p>The time at which the Amazon Braket hybrid job was started.</p>"
         },
-        "status":{
-          "shape":"JobPrimaryStatus",
-          "documentation":"<p>The status of the Amazon Braket job.</p>"
+        "endedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the Amazon Braket hybrid job ended.</p>"
         },
-        "stoppingCondition":{
-          "shape":"JobStoppingCondition",
-          "documentation":"<p>The user-defined criteria that specifies when to stop a job running.</p>"
+        "billableDuration":{
+          "shape":"Integer",
+          "documentation":"<p>The billable time for which the Amazon Braket hybrid job used to complete.</p>"
+        },
+        "deviceConfig":{
+          "shape":"DeviceConfig",
+          "documentation":"<p>The primary device used by the Amazon Braket hybrid job.</p>"
+        },
+        "events":{
+          "shape":"JobEvents",
+          "documentation":"<p>Details about the time and type of events occurred related to the Amazon Braket hybrid job.</p>"
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>A tag object that consists of a key and an optional value, used to manage metadata for Amazon Braket resources.</p>"
+          "documentation":"<p>The tags associated with this hybrid job.</p>"
+        },
+        "queueInfo":{
+          "shape":"HybridJobQueueInfo",
+          "documentation":"<p>Queue information for the requested hybrid job. Only returned if <code>QueueInfo</code> is specified in the <code>additionalAttributeNames\"</code> field in the <code>GetJob</code> API request.</p>"
+        },
+        "associations":{
+          "shape":"Associations",
+          "documentation":"<p>The list of Amazon Braket resources associated with the hybrid job.</p>"
         }
       }
     },
@@ -899,95 +947,107 @@
       "type":"string",
       "max":50,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,50}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,50}"
     },
     "GetQuantumTaskRequest":{
       "type":"structure",
       "required":["quantumTaskArn"],
       "members":{
-        "additionalAttributeNames":{
-          "shape":"QuantumTaskAdditionalAttributeNamesList",
-          "documentation":"<p>A list of attributes to return information for.</p>",
-          "location":"querystring",
-          "locationName":"additionalAttributeNames"
-        },
         "quantumTaskArn":{
           "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task to retrieve.</p>",
+          "documentation":"<p>The ARN of the quantum task to retrieve.</p>",
           "location":"uri",
           "locationName":"quantumTaskArn"
+        },
+        "additionalAttributeNames":{
+          "shape":"QuantumTaskAdditionalAttributeNamesList",
+          "documentation":"<p>A list of attributes to return additional information for. Only the QueueInfo additional attribute name is currently supported.</p>",
+          "location":"querystring",
+          "locationName":"additionalAttributeNames"
         }
       }
     },
     "GetQuantumTaskResponse":{
       "type":"structure",
       "required":[
-        "createdAt",
+        "quantumTaskArn",
+        "status",
         "deviceArn",
         "deviceParameters",
+        "shots",
         "outputS3Bucket",
         "outputS3Directory",
-        "quantumTaskArn",
-        "shots",
-        "status"
+        "createdAt"
       ],
       "members":{
-        "associations":{
-          "shape":"Associations",
-          "documentation":"<p>The list of Amazon Braket resources associated with the quantum task.</p>"
+        "quantumTaskArn":{
+          "shape":"QuantumTaskArn",
+          "documentation":"<p>The ARN of the quantum task.</p>"
         },
-        "createdAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the task was created.</p>"
+        "status":{
+          "shape":"QuantumTaskStatus",
+          "documentation":"<p>The status of the quantum task.</p>"
+        },
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason that a quantum task failed.</p>"
         },
         "deviceArn":{
           "shape":"DeviceArn",
-          "documentation":"<p>The ARN of the device the task was run on.</p>"
+          "documentation":"<p>The ARN of the device the quantum task was run on.</p>"
         },
         "deviceParameters":{
           "shape":"JsonValue",
-          "documentation":"<p>The parameters for the device on which the task ran.</p>",
+          "documentation":"<p>The parameters for the device on which the quantum task ran.</p>",
           "jsonvalue":true
         },
-        "endedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the task ended.</p>"
-        },
-        "failureReason":{
-          "shape":"String",
-          "documentation":"<p>The reason that a task failed.</p>"
-        },
-        "jobArn":{
-          "shape":"JobArn",
-          "documentation":"<p>The ARN of the Amazon Braket job associated with the quantum task.</p>"
+        "shots":{
+          "shape":"Long",
+          "documentation":"<p>The number of shots used in the quantum task.</p>"
         },
         "outputS3Bucket":{
           "shape":"String",
-          "documentation":"<p>The S3 bucket where task results are stored.</p>"
+          "documentation":"<p>The S3 bucket where quantum task results are stored.</p>"
         },
         "outputS3Directory":{
           "shape":"String",
-          "documentation":"<p>The folder in the S3 bucket where task results are stored.</p>"
+          "documentation":"<p>The folder in the S3 bucket where quantum task results are stored.</p>"
         },
-        "quantumTaskArn":{
-          "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task.</p>"
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the quantum task was created.</p>"
+        },
+        "endedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the quantum task ended.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>The tags that belong to this quantum task.</p>"
+        },
+        "jobArn":{
+          "shape":"JobArn",
+          "documentation":"<p>The ARN of the Amazon Braket job associated with the quantum task.</p>"
         },
         "queueInfo":{
           "shape":"QuantumTaskQueueInfo",
           "documentation":"<p>Queue information for the requested quantum task. Only returned if <code>QueueInfo</code> is specified in the <code>additionalAttributeNames\"</code> field in the <code>GetQuantumTask</code> API request.</p>"
         },
-        "shots":{
-          "shape":"Long",
-          "documentation":"<p>The number of shots used in the task.</p>"
+        "associations":{
+          "shape":"Associations",
+          "documentation":"<p>The list of Amazon Braket resources associated with the quantum task.</p>"
         },
-        "status":{
-          "shape":"QuantumTaskStatus",
-          "documentation":"<p>The status of the task.</p>"
+        "numSuccessfulShots":{
+          "shape":"Long",
+          "documentation":"<p>The number of successful shots for the quantum task. This is available after a successfully completed quantum task.</p>"
         },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>The tags that belong to this task.</p>"
+        "actionMetadata":{
+          "shape":"ActionMetadata",
+          "documentation":"<p>Metadata about the action performed by the quantum task, including information about the type of action and program counts.</p>"
+        },
+        "experimentalCapabilities":{
+          "shape":"ExperimentalCapabilities",
+          "documentation":"<p>Enabled experimental capabilities for the quantum task, if any.</p>"
         }
       }
     },
@@ -1002,24 +1062,24 @@
     "HybridJobQueueInfo":{
       "type":"structure",
       "required":[
-        "position",
-        "queue"
+        "queue",
+        "position"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Optional. Provides more information about the queue position. For example, if the job is complete and no longer in the queue, the message field contains that information.</p>"
+        "queue":{
+          "shape":"QueueName",
+          "documentation":"<p>The name of the queue.</p>"
         },
         "position":{
           "shape":"String",
-          "documentation":"<p>Current position of the job in the jobs queue.</p>"
+          "documentation":"<p>Current position of the hybrid job in the jobs queue.</p>"
         },
-        "queue":{
-          "shape":"QueueName",
-          "documentation":"<p>The name of the queue.</p>"
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Optional. Provides more information about the queue position. For example, if the hybrid job is complete and no longer in the queue, the message field contains that information.</p>"
         }
       },
-      "documentation":"<p>Information about the queue for a specified job.</p>"
+      "documentation":"<p>Information about the queue for a specified hybrid job.</p>"
     },
     "HyperParameters":{
       "type":"map",
@@ -1032,7 +1092,7 @@
       "type":"string",
       "max":2500,
       "min":1,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "InputConfigList":{
       "type":"list",
@@ -1047,7 +1107,7 @@
       "members":{
         "channelName":{
           "shape":"InputFileConfigChannelNameString",
-          "documentation":"<p>A named input source that an Amazon Braket job can consume.</p>"
+          "documentation":"<p>A named input source that an Amazon Braket hybrid job can consume.</p>"
         },
         "contentType":{
           "shape":"String256",
@@ -1055,7 +1115,7 @@
         },
         "dataSource":{
           "shape":"DataSource",
-          "documentation":"<p>The location of the channel data.</p>"
+          "documentation":"<p>The location of the input data.</p>"
         }
       },
       "documentation":"<p>A list of parameters that specify the input channels, type of input data, and where it is located.</p>"
@@ -1064,7 +1124,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[A-Za-z0-9\\.\\-_]+$"
+      "pattern":"[A-Za-z0-9\\.\\-_]+"
     },
     "InstanceConfig":{
       "type":"structure",
@@ -1073,17 +1133,17 @@
         "volumeSizeInGb"
       ],
       "members":{
-        "instanceCount":{
-          "shape":"InstanceConfigInstanceCountInteger",
-          "documentation":"<p>Configures the number of resource instances to use while running an Amazon Braket job on Amazon Braket. The default value is 1.</p>"
-        },
         "instanceType":{
           "shape":"InstanceType",
-          "documentation":"<p>Configures the type resource instances to use while running an Amazon Braket hybrid job.</p>"
+          "documentation":"<p>Configures the type of resource instances to use while running an Amazon Braket hybrid job.</p>"
         },
         "volumeSizeInGb":{
           "shape":"InstanceConfigVolumeSizeInGbInteger",
-          "documentation":"<p>The size of the storage volume, in GB, that user wants to provision.</p>"
+          "documentation":"<p>The size of the storage volume, in GB, to provision.</p>"
+        },
+        "instanceCount":{
+          "shape":"InstanceConfigInstanceCountInteger",
+          "documentation":"<p>Configures the number of resource instances to use while running an Amazon Braket hybrid job on Amazon Braket. The default value is 1.</p>"
         }
       },
       "documentation":"<p>Configures the resource instances to use while running the Amazon Braket hybrid job on Amazon Braket.</p>"
@@ -1151,14 +1211,14 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The request processing has failed because of an unknown error, exception, or failure.</p>",
+      "documentation":"<p>The request failed because of an unknown error.</p>",
       "error":{"httpStatusCode":500},
       "exception":true,
       "fault":true
     },
     "JobArn":{
       "type":"string",
-      "pattern":"^arn:aws[a-z\\-]*:braket:[a-z0-9\\-]+:[0-9]{12}:job/.*$"
+      "pattern":"arn:aws[a-z\\-]*:braket:[a-z0-9\\-]+:[0-9]{12}:job/.*"
     },
     "JobCheckpointConfig":{
       "type":"structure",
@@ -1166,32 +1226,32 @@
       "members":{
         "localPath":{
           "shape":"String4096",
-          "documentation":"<p>(Optional) The local directory where checkpoints are written. The default directory is <code>/opt/braket/checkpoints/</code>.</p>"
+          "documentation":"<p>(Optional) The local directory where checkpoint data is stored. The default directory is <code>/opt/braket/checkpoints/</code>.</p>"
         },
         "s3Uri":{
           "shape":"S3Path",
-          "documentation":"<p>Identifies the S3 path where you want Amazon Braket to store checkpoints. For example, <code>s3://bucket-name/key-name-prefix</code>.</p>"
+          "documentation":"<p>Identifies the S3 path where you want Amazon Braket to store checkpoint data. For example, <code>s3://bucket-name/key-name-prefix</code>.</p>"
         }
       },
-      "documentation":"<p>Contains information about the output locations for job checkpoint data.</p>"
+      "documentation":"<p>Contains information about the output locations for hybrid job checkpoint data.</p>"
     },
     "JobEventDetails":{
       "type":"structure",
       "members":{
         "eventType":{
           "shape":"JobEventType",
-          "documentation":"<p>The type of event that occurred related to the Amazon Braket job.</p>"
-        },
-        "message":{
-          "shape":"JobEventDetailsMessageString",
-          "documentation":"<p>A message describing the event that occurred related to the Amazon Braket job.</p>"
+          "documentation":"<p>The type of event that occurred related to the Amazon Braket hybrid job.</p>"
         },
         "timeOfEvent":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The type of event that occurred related to the Amazon Braket job.</p>"
+          "documentation":"<p>The time of the event that occurred related to the Amazon Braket hybrid job.</p>"
+        },
+        "message":{
+          "shape":"JobEventDetailsMessageString",
+          "documentation":"<p>A message describing the event that occurred related to the Amazon Braket hybrid job.</p>"
         }
       },
-      "documentation":"<p>Details about the type and time events occurred related to the Amazon Braket job.</p>"
+      "documentation":"<p>Details about the type and time events that occurred related to the Amazon Braket hybrid job.</p>"
     },
     "JobEventDetailsMessageString":{
       "type":"string",
@@ -1226,14 +1286,14 @@
       "members":{
         "kmsKeyId":{
           "shape":"String2048",
-          "documentation":"<p>The AWS Key Management Service (AWS KMS) key that Amazon Braket uses to encrypt the job training artifacts at rest using Amazon S3 server-side encryption.</p>"
+          "documentation":"<p>The AWS Key Management Service (AWS KMS) key that Amazon Braket uses to encrypt the hybrid job training artifacts at rest using Amazon S3 server-side encryption.</p>"
         },
         "s3Path":{
           "shape":"S3Path",
-          "documentation":"<p>Identifies the S3 path where you want Amazon Braket to store the job training artifacts. For example, <code>s3://bucket-name/key-name-prefix</code>.</p>"
+          "documentation":"<p>Identifies the S3 path where you want Amazon Braket to store the hybrid job training artifacts. For example, <code>s3://bucket-name/key-name-prefix</code>.</p>"
         }
       },
-      "documentation":"<p>Specifies the path to the S3 location where you want to store job artifacts and the encryption key used to store them.</p>"
+      "documentation":"<p>Specifies the path to the S3 location where you want to store hybrid job artifacts and the encryption key used to store them.</p>"
     },
     "JobPrimaryStatus":{
       "type":"string",
@@ -1251,10 +1311,10 @@
       "members":{
         "maxRuntimeInSeconds":{
           "shape":"JobStoppingConditionMaxRuntimeInSecondsInteger",
-          "documentation":"<p>The maximum length of time, in seconds, that an Amazon Braket job can run.</p>"
+          "documentation":"<p>The maximum length of time, in seconds, that an Amazon Braket hybrid job can run.</p>"
         }
       },
-      "documentation":"<p>Specifies limits for how long an Amazon Braket job can run. </p>"
+      "documentation":"<p>Specifies limits for how long an Amazon Braket hybrid job can run. </p>"
     },
     "JobStoppingConditionMaxRuntimeInSecondsInteger":{
       "type":"integer",
@@ -1265,47 +1325,47 @@
     "JobSummary":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "device",
+        "status",
         "jobArn",
         "jobName",
-        "status"
+        "device",
+        "createdAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job was created.</p>"
-        },
-        "device":{
-          "shape":"String256",
-          "documentation":"<p>Provides summary information about the primary device used by an Amazon Braket job.</p>"
-        },
-        "endedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job ended.</p>"
+        "status":{
+          "shape":"JobPrimaryStatus",
+          "documentation":"<p>The status of the Amazon Braket hybrid job.</p>"
         },
         "jobArn":{
           "shape":"JobArn",
-          "documentation":"<p>The ARN of the Amazon Braket job.</p>"
+          "documentation":"<p>The ARN of the Amazon Braket hybrid job.</p>"
         },
         "jobName":{
           "shape":"String",
-          "documentation":"<p>The name of the Amazon Braket job.</p>"
+          "documentation":"<p>The name of the Amazon Braket hybrid job.</p>"
+        },
+        "device":{
+          "shape":"String256",
+          "documentation":"<p>The primary device used by an Amazon Braket hybrid job.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the Amazon Braket hybrid job was created.</p>"
         },
         "startedAt":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that the Amazon Braket job was started.</p>"
+          "documentation":"<p>The time at which the Amazon Braket hybrid job was started.</p>"
         },
-        "status":{
-          "shape":"JobPrimaryStatus",
-          "documentation":"<p>The status of the Amazon Braket job.</p>"
+        "endedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the Amazon Braket hybrid job ended.</p>"
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>A tag object that consists of a key and an optional value, used to manage metadata for Amazon Braket resources.</p>"
+          "documentation":"<p>Displays the key, value pairs of tags associated with this hybrid job.</p>"
         }
       },
-      "documentation":"<p>Provides summary information about an Amazon Braket job.</p>"
+      "documentation":"<p>Provides summary information about an Amazon Braket hybrid job.</p>"
     },
     "JobSummaryList":{
       "type":"list",
@@ -1342,6 +1402,33 @@
       "type":"long",
       "box":true
     },
+    "ProgramSetValidationFailure":{
+      "type":"structure",
+      "required":["programIndex"],
+      "members":{
+        "programIndex":{
+          "shape":"Long",
+          "documentation":"<p>The index of the program within the program set that failed validation.</p>"
+        },
+        "inputsIndex":{
+          "shape":"Long",
+          "documentation":"<p>The index of the input within the program set that failed validation.</p>"
+        },
+        "errors":{
+          "shape":"ProgramValidationFailuresList",
+          "documentation":"<p>A list of error messages describing the validation failures that occurred.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about validation failures that occurred during the processing of a program set in a quantum task.</p>"
+    },
+    "ProgramSetValidationFailuresList":{
+      "type":"list",
+      "member":{"shape":"ProgramSetValidationFailure"}
+    },
+    "ProgramValidationFailuresList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "QuantumTaskAdditionalAttributeName":{
       "type":"string",
       "enum":["QueueInfo"]
@@ -1358,28 +1445,28 @@
     "QuantumTaskQueueInfo":{
       "type":"structure",
       "required":[
-        "position",
-        "queue"
+        "queue",
+        "position"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Optional. Provides more information about the queue position. For example, if the task is complete and no longer in the queue, the message field contains that information.</p>"
-        },
-        "position":{
-          "shape":"String",
-          "documentation":"<p>Current position of the task in the quantum tasks queue.</p>"
-        },
         "queue":{
           "shape":"QueueName",
           "documentation":"<p>The name of the queue. </p>"
         },
+        "position":{
+          "shape":"String",
+          "documentation":"<p>Current position of the quantum task in the quantum tasks queue.</p>"
+        },
         "queuePriority":{
           "shape":"QueuePriority",
-          "documentation":"<p>Optional. Specifies the priority of the queue. Quantum tasks in a priority queue are processed before the tasks in a normal queue.</p>"
+          "documentation":"<p>Optional. Specifies the priority of the queue. Quantum tasks in a priority queue are processed before the quantum tasks in a normal queue.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Optional. Provides more information about the queue position. For example, if the quantum task is complete and no longer in the queue, the message field contains that information.</p>"
         }
       },
-      "documentation":"<p>Information about the queue for the specified quantum task.</p>"
+      "documentation":"<p>The queue information for the specified quantum task.</p>"
     },
     "QuantumTaskStatus":{
       "type":"string",
@@ -1396,46 +1483,46 @@
     "QuantumTaskSummary":{
       "type":"structure",
       "required":[
-        "createdAt",
+        "quantumTaskArn",
+        "status",
         "deviceArn",
+        "shots",
         "outputS3Bucket",
         "outputS3Directory",
-        "quantumTaskArn",
-        "shots",
-        "status"
+        "createdAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the task was created.</p>"
+        "quantumTaskArn":{
+          "shape":"QuantumTaskArn",
+          "documentation":"<p>The ARN of the quantum task.</p>"
+        },
+        "status":{
+          "shape":"QuantumTaskStatus",
+          "documentation":"<p>The status of the quantum task.</p>"
         },
         "deviceArn":{
           "shape":"DeviceArn",
-          "documentation":"<p>The ARN of the device the task ran on.</p>"
+          "documentation":"<p>The ARN of the device the quantum task ran on.</p>"
         },
-        "endedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the task finished.</p>"
+        "shots":{
+          "shape":"Long",
+          "documentation":"<p>The shots used for the quantum task.</p>"
         },
         "outputS3Bucket":{
           "shape":"String",
-          "documentation":"<p>The S3 bucket where the task result file is stored..</p>"
+          "documentation":"<p>The S3 bucket where the quantum task result file is stored.</p>"
         },
         "outputS3Directory":{
           "shape":"String",
-          "documentation":"<p>The folder in the S3 bucket where the task result file is stored.</p>"
+          "documentation":"<p>The folder in the S3 bucket where the quantum task result file is stored.</p>"
         },
-        "quantumTaskArn":{
-          "shape":"QuantumTaskArn",
-          "documentation":"<p>The ARN of the task.</p>"
-        },
-        "shots":{
-          "shape":"Long",
-          "documentation":"<p>The shots used for the task.</p>"
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the quantum task was created.</p>"
         },
-        "status":{
-          "shape":"QuantumTaskStatus",
-          "documentation":"<p>The status of the task.</p>"
+        "endedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the quantum task finished.</p>"
         },
         "tags":{
           "shape":"TagsMap",
@@ -1476,7 +1563,7 @@
     },
     "RoleArn":{
       "type":"string",
-      "pattern":"^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "S3DataSource":{
       "type":"structure",
@@ -1487,13 +1574,13 @@
           "documentation":"<p>Depending on the value specified for the <code>S3DataType</code>, identifies either a key name prefix or a manifest that locates the S3 data source.</p>"
         }
       },
-      "documentation":"<p>Information about the data stored in Amazon S3 used by the Amazon Braket job.</p>"
+      "documentation":"<p>Information about the Amazon S3 storage used by the Amazon Braket hybrid job.</p>"
     },
     "S3Path":{
       "type":"string",
       "max":1024,
       "min":0,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "ScriptModeConfig":{
       "type":"structure",
@@ -1502,20 +1589,20 @@
         "s3Uri"
       ],
       "members":{
-        "compressionType":{
-          "shape":"CompressionType",
-          "documentation":"<p>The type of compression used by the Python scripts for an Amazon Braket job.</p>"
-        },
         "entryPoint":{
           "shape":"String",
-          "documentation":"<p>The path to the Python script that serves as the entry point for an Amazon Braket job.</p>"
+          "documentation":"<p>The entry point in the algorithm scripts from where the execution begins in the hybrid job.</p>"
         },
         "s3Uri":{
           "shape":"S3Path",
-          "documentation":"<p>The URI that specifies the S3 path to the Python script module that contains the training script used by an Amazon Braket job.</p>"
+          "documentation":"<p>The URI that specifies the S3 path to the algorithm scripts used by an Amazon Braket hybrid job.</p>"
+        },
+        "compressionType":{
+          "shape":"CompressionType",
+          "documentation":"<p>The type of compression used to store the algorithm scripts in Amazon S3 storage.</p>"
         }
       },
-      "documentation":"<p>Contains information about the Python scripts used for entry and by an Amazon Braket job.</p>"
+      "documentation":"<p>Contains information about algorithm scripts used for the Amazon Braket hybrid job.</p>"
     },
     "SearchDevicesFilter":{
       "type":"structure",
@@ -1526,14 +1613,14 @@
       "members":{
         "name":{
           "shape":"SearchDevicesFilterNameString",
-          "documentation":"<p>The name to use to filter results.</p>"
+          "documentation":"<p>The name of the device parameter to filter based on. Only <code>deviceArn</code> filter name is currently supported.</p>"
         },
         "values":{
           "shape":"SearchDevicesFilterValuesList",
-          "documentation":"<p>The values to use to filter results.</p>"
+          "documentation":"<p>The values used to filter devices based on the filter name.</p>"
         }
       },
-      "documentation":"<p>The filter to use for searching devices.</p>"
+      "documentation":"<p>The filter used to search for devices.</p>"
     },
     "SearchDevicesFilterNameString":{
       "type":"string",
@@ -1550,17 +1637,17 @@
       "type":"structure",
       "required":["filters"],
       "members":{
-        "filters":{
-          "shape":"SearchDevicesRequestFiltersList",
-          "documentation":"<p>The filter values to use to search for a device.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request to continue search where the previous request ended.</p>"
         },
         "maxResults":{
           "shape":"SearchDevicesRequestMaxResultsInteger",
           "documentation":"<p>The maximum number of results to return in the response.</p>"
         },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request continue results where the previous request ended.</p>"
+        "filters":{
+          "shape":"SearchDevicesRequestFiltersList",
+          "documentation":"<p>Array of SearchDevicesFilter objects to use when searching for devices.</p>"
         }
       }
     },
@@ -1586,7 +1673,7 @@
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>A token used for pagination of results, or null if there are no additional results. Use the token value in a subsequent request to continue results where the previous request ended.</p>"
+          "documentation":"<p>A token used for pagination of results, or null if there are no additional results. Use the token value in a subsequent request to continue search where the previous request ended.</p>"
         }
       }
     },
@@ -1594,24 +1681,24 @@
       "type":"structure",
       "required":[
         "name",
-        "operator",
-        "values"
+        "values",
+        "operator"
       ],
       "members":{
         "name":{
           "shape":"String64",
-          "documentation":"<p>The name to use for the jobs filter.</p>"
-        },
-        "operator":{
-          "shape":"SearchJobsFilterOperator",
-          "documentation":"<p>An operator to use for the jobs filter.</p>"
+          "documentation":"<p>The name of the hybrid job parameter to filter based on. Filter name can be either <code>jobArn</code> or <code>createdAt</code>. </p>"
         },
         "values":{
           "shape":"SearchJobsFilterValuesList",
-          "documentation":"<p>The values to use for the jobs filter.</p>"
+          "documentation":"<p>The values used to filter hybrid jobs based on the filter name and operator.</p>"
+        },
+        "operator":{
+          "shape":"SearchJobsFilterOperator",
+          "documentation":"<p>An operator to use for the filter.</p>"
         }
       },
-      "documentation":"<p>A filter used to search for Amazon Braket jobs.</p>"
+      "documentation":"<p>A filter used to search for Amazon Braket hybrid jobs.</p>"
     },
     "SearchJobsFilterOperator":{
       "type":"string",
@@ -1635,17 +1722,17 @@
       "type":"structure",
       "required":["filters"],
       "members":{
-        "filters":{
-          "shape":"SearchJobsRequestFiltersList",
-          "documentation":"<p>The filter values to use when searching for a job.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request to continue search where the previous request ended.</p>"
         },
         "maxResults":{
           "shape":"SearchJobsRequestMaxResultsInteger",
           "documentation":"<p>The maximum number of results to return in the response.</p>"
         },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request to continue results where the previous request ended.</p>"
+        "filters":{
+          "shape":"SearchJobsRequestFiltersList",
+          "documentation":"<p>Array of SearchJobsFilter objects to use when searching for hybrid jobs.</p>"
         }
       }
     },
@@ -1671,7 +1758,7 @@
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>A token used for pagination of results, or <code>null</code> if there are no additional results. Use the token value in a subsequent request to continue results where the previous request ended.</p>"
+          "documentation":"<p>A token used for pagination of results, or <code>null</code> if there are no additional results. Use the token value in a subsequent request to continue search where the previous request ended.</p>"
         }
       }
     },
@@ -1679,24 +1766,24 @@
       "type":"structure",
       "required":[
         "name",
-        "operator",
-        "values"
+        "values",
+        "operator"
       ],
       "members":{
         "name":{
           "shape":"String64",
-          "documentation":"<p>The name of the device used for the task.</p>"
-        },
-        "operator":{
-          "shape":"SearchQuantumTasksFilterOperator",
-          "documentation":"<p>An operator to use in the filter.</p>"
+          "documentation":"<p>The name of the quantum task parameter to filter based on. Filter name can be either <code>quantumTaskArn</code>, <code>deviceArn</code>, <code>jobArn</code>, <code>status</code> or <code>createdAt</code>.</p>"
         },
         "values":{
           "shape":"SearchQuantumTasksFilterValuesList",
-          "documentation":"<p>The values to use for the filter.</p>"
+          "documentation":"<p>The values used to filter quantum tasks based on the filter name and operator.</p>"
+        },
+        "operator":{
+          "shape":"SearchQuantumTasksFilterOperator",
+          "documentation":"<p>An operator to use for the filter.</p>"
         }
       },
-      "documentation":"<p>A filter to use to search for tasks.</p>"
+      "documentation":"<p>A filter used to search for quantum tasks.</p>"
     },
     "SearchQuantumTasksFilterOperator":{
       "type":"string",
@@ -1719,17 +1806,17 @@
       "type":"structure",
       "required":["filters"],
       "members":{
-        "filters":{
-          "shape":"SearchQuantumTasksRequestFiltersList",
-          "documentation":"<p>Array of <code>SearchQuantumTasksFilter</code> objects.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request to continue search where the previous request ended.</p>"
         },
         "maxResults":{
           "shape":"SearchQuantumTasksRequestMaxResultsInteger",
           "documentation":"<p>Maximum number of results to return in the response.</p>"
         },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>A token used for pagination of results returned in the response. Use the token returned from the previous request continue results where the previous request ended.</p>"
+        "filters":{
+          "shape":"SearchQuantumTasksRequestFiltersList",
+          "documentation":"<p>Array of <code>SearchQuantumTasksFilter</code> objects to use when searching for quantum tasks.</p>"
         }
       }
     },
@@ -1749,13 +1836,13 @@
       "type":"structure",
       "required":["quantumTasks"],
       "members":{
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>A token used for pagination of results, or null if there are no additional results. Use the token value in a subsequent request to continue results where the previous request ended.</p>"
-        },
         "quantumTasks":{
           "shape":"QuantumTaskSummaryList",
-          "documentation":"<p>An array of <code>QuantumTaskSummary</code> objects for tasks that match the specified filters.</p>"
+          "documentation":"<p>An array of <code>QuantumTaskSummary</code> objects for quantum tasks that match the specified filters.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token used for pagination of results, or null if there are no additional results. Use the token value in a subsequent request to continue search where the previous request ended.</p>"
         }
       }
     },
@@ -1820,14 +1907,13 @@
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>Specify the tags to add to the resource.</p>"
+          "documentation":"<p>Specify the tags to add to the resource. Tags can be specified as a key-value map.</p>"
         }
       }
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagsMap":{
       "type":"map",
@@ -1839,7 +1925,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The throttling rate limit is met.</p>",
+      "documentation":"<p>The API throttling rate limit is exceeded.</p>",
       "error":{
         "httpStatusCode":429,
         "senderFault":true
@@ -1869,8 +1955,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Uri":{
       "type":"string",
@@ -1881,15 +1966,27 @@
     "ValidationException":{
       "type":"structure",
       "members":{
-        "message":{"shape":"String"}
+        "message":{"shape":"String"},
+        "reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>The reason for validation failure.</p>"
+        },
+        "programSetValidationFailures":{
+          "shape":"ProgramSetValidationFailuresList",
+          "documentation":"<p>The validation failures in the program set submitted in the request.</p>"
+        }
       },
-      "documentation":"<p>The input fails to satisfy the constraints specified by an AWS service.</p>",
+      "documentation":"<p>The input request failed to satisfy constraints expected by Amazon Braket.</p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
       },
       "exception":true
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":["ProgramSetValidationFailed"]
     }
   },
-  "documentation":"<p>The Amazon Braket API Reference provides information about the operations and structures supported in Amazon Braket.</p> <p>Additional Resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/braket/latest/developerguide/what-is-braket.html\">Amazon Braket Developer Guide</a> </p> </li> </ul>"
+  "documentation":"<p>The Amazon Braket API Reference provides information about the operations and structures supported by Amazon Braket.</p> <p>To learn about the permissions required to call an Amazon Braket API action, see <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbraket.html\">Actions, resources, and condition keys for Amazon Braket</a>. <a href=\"https://amazon-braket-sdk-python.readthedocs.io/en/latest/#\">Amazon Braket Python SDK</a> and the <a href=\"https://docs.aws.amazon.com/cli/latest/reference/braket/\">AWS Command Line Interface</a> can be used to make discovery and creation of API calls easier. For more information about Amazon Braket features, see <a href=\"https://docs.aws.amazon.com/braket/latest/developerguide/what-is-braket.html\">What is Amazon Braket?</a> and important <a href=\"https://docs.aws.amazon.com/braket/latest/developerguide/braket-terms.html\">terms and concepts</a> in the <i>Amazon Braket Developer Guide</i>.</p> <p> <b>In this guide:</b> </p> <ul> <li> <p/> </li> <li> <p/> </li> <li> <p> <a>CommonParameters</a> </p> </li> <li> <p> <a>CommonErrors</a> </p> </li> </ul> <p> <b>Available languages for AWS SDK:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Braket/NBraket.html\">.NET</a> </p> </li> <li> <p> <a href=\"https://sdk.amazonaws.com/cpp/api/LATEST/root/html/index.html\">C++</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdk-for-go/api/service/braket/\">Go API reference</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/braket/package-summary.html\">Java</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Braket.html\">JavaScript</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Braket.BraketClient.html\">PHP</a> </p> </li> <li> <p> <a href=\"https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/braket.html\">Python (Boto)</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/Braket.html\">Ruby</a> </p> </li> </ul> <p> <b>Code examples from the Amazon Braket Tutorials GitHub repository:</b> </p> <ul> <li> <p> <a href=\"https://github.com/amazon-braket/amazon-braket-examples\">Amazon Braket Examples</a> </p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/budgets/2016-10-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,564 +57,616 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "stringEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.us-east-1.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-iso-b"
                                             ]
                                         },
-                                        "aws-cn"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.amazonaws.com.cn",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "cn-northwest-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.global.sc2s.sgov.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isob-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-iso-e"
                                             ]
                                         },
-                                        "aws-iso"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.c2s.ic.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "us-iso-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.global.cloud.adc-e.uk",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eu-isoe-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-iso-f"
                                             ]
                                         },
-                                        "aws-iso-b"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.global.sc2s.sgov.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "us-isob-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.global.csp.hci.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isof-south-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-eusc"
                                             ]
                                         },
-                                        "aws-iso-e"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.global.cloud.adc-e.uk",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "eu-isoe-west-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.eusc-de-east-1.api.amazonwebservices.eu",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eusc-de-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-eusc"
                                             ]
                                         },
-                                        "aws-iso-f"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://budgets.global.csp.hci.ic.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "budgets",
-                                            "signingRegion": "us-isof-south-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
-                                },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://budgets.eusc-de-east-1.api.amazonwebservices.eu",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eusc-de-east-1"
+                                                }
+                                            ]
                                         },
-                                        true
-                                    ]
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://budgets-fips.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://budgets-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
+                                                    "ref": "UseFIPS"
                                                 },
                                                 true
                                             ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://budgets-fips.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://budgets-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://budgets.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://budgets.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://budgets.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://budgets.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/budgets/2016-10-20/service-2.json 2.31.35-1/awscli/botocore/data/budgets/2016-10-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/budgets/2016-10-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/budgets/2016-10-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,14 +25,16 @@
       "output":{"shape":"CreateBudgetResponse"},
       "errors":[
         {"shape":"InvalidParameterException"},
+        {"shape":"BillingViewHealthStatusException"},
         {"shape":"InternalErrorException"},
         {"shape":"CreationLimitExceededException"},
         {"shape":"DuplicateRecordException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Creates a budget and, if included, notifications and subscribers. </p> <important> <p>Only one of <code>BudgetLimit</code> or <code>PlannedBudgetLimits</code> can be present in the syntax at one time. Use the syntax that matches your case. The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_CreateBudget.html#API_CreateBudget_Examples\">Examples</a> section. </p> </important>"
+      "documentation":"<p>Creates a budget and, if included, notifications and subscribers. </p> <important> <p>Only one of <code>BudgetLimit</code> or <code>PlannedBudgetLimits</code> can be present in the syntax at one time. Use the syntax that matches your use case. The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_CreateBudget.html#API_CreateBudget_Examples\">Examples</a> section.</p> <p>Similarly, only one set of filter and metric selections can be present in the syntax at one time. Either <code>FilterExpression</code> and <code>Metrics</code> or <code>CostFilters</code> and <code>CostTypes</code>, not both or a different combination. We recommend using <code>FilterExpression</code> and <code>Metrics</code> as they provide more flexible and powerful filtering capabilities. The Request Syntax section shows the <code>FilterExpression</code>/<code>Metrics</code> syntax.</p> </important>"
     },
     "CreateBudgetAction":{
       "name":"CreateBudgetAction",
@@ -176,7 +178,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Describes a budget.</p> <important> <p>The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_DescribeBudget.html#API_DescribeBudget_Examples\">Examples</a> section. </p> </important>"
+      "documentation":"<p>Describes a budget.</p> <important> <p>The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_DescribeBudget.html#API_DescribeBudget_Examples\">Examples</a> section.</p> </important>"
     },
     "DescribeBudgetAction":{
       "name":"DescribeBudgetAction",
@@ -303,7 +305,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists the budgets that are associated with an account.</p> <important> <p>The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_DescribeBudgets.html#API_DescribeBudgets_Examples\">Examples</a> section. </p> </important>"
+      "documentation":"<p>Lists the budgets that are associated with an account.</p> <important> <p>The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_DescribeBudgets.html#API_DescribeBudgets_Examples\">Examples</a> section.</p> </important>"
     },
     "DescribeNotificationsForBudget":{
       "name":"DescribeNotificationsForBudget",
@@ -424,11 +426,12 @@
       "errors":[
         {"shape":"InternalErrorException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"BillingViewHealthStatusException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates a budget. You can change every part of a budget except for the <code>budgetName</code> and the <code>calculatedSpend</code>. When you modify a budget, the <code>calculatedSpend</code> drops to zero until Amazon Web Services has new usage data to use for forecasting.</p> <important> <p>Only one of <code>BudgetLimit</code> or <code>PlannedBudgetLimits</code> can be present in the syntax at one time. Use the syntax that matches your case. The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_UpdateBudget.html#API_UpdateBudget_Examples\">Examples</a> section. </p> </important>"
+      "documentation":"<p>Updates a budget. You can change every part of a budget except for the <code>budgetName</code> and the <code>calculatedSpend</code>. When you modify a budget, the <code>calculatedSpend</code> drops to zero until Amazon Web Services has new usage data to use for forecasting.</p> <important> <p>Only one of <code>BudgetLimit</code> or <code>PlannedBudgetLimits</code> can be present in the syntax at one time. Use the syntax that matches your case. The Request Syntax section shows the <code>BudgetLimit</code> syntax. For <code>PlannedBudgetLimits</code>, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_budgets_UpdateBudget.html#API_UpdateBudget_Examples\">Examples</a> section.</p> <p>Similarly, only one set of filter and metric selections can be present in the syntax at one time. Either <code>FilterExpression</code> and <code>Metrics</code> or <code>CostFilters</code> and <code>CostTypes</code>, not both or a different combination. We recommend using <code>FilterExpression</code> and <code>Metrics</code> as they provide more flexible and powerful filtering capabilities. The Request Syntax section shows the <code>FilterExpression</code>/<code>Metrics</code> syntax.</p> </important>"
     },
     "UpdateBudgetAction":{
       "name":"UpdateBudgetAction",
@@ -694,6 +697,20 @@
         "FORECAST"
       ]
     },
+    "BillingViewArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"^arn:aws[a-z-]*:(billing)::[0-9]{12}:billingview/[a-zA-Z0-9/:_\\+=\\.\\-@]{0,75}[a-zA-Z0-9]$"
+    },
+    "BillingViewHealthStatusException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"errorMessage"}
+      },
+      "documentation":"<p> The billing view status must be HEALTHY to perform this action. Try again when the status is HEALTHY. </p>",
+      "exception":true
+    },
     "Budget":{
       "type":"structure",
       "required":[
@@ -716,11 +733,17 @@
         },
         "CostFilters":{
           "shape":"CostFilters",
-          "documentation":"<p>The cost filters, such as <code>Region</code>, <code>Service</code>, <code>LinkedAccount</code>, <code>Tag</code>, or <code>CostCategory</code>, that are applied to a budget.</p> <p>Amazon Web Services Budgets supports the following services as a <code>Service</code> filter for RI budgets:</p> <ul> <li> <p>Amazon EC2</p> </li> <li> <p>Amazon Redshift</p> </li> <li> <p>Amazon Relational Database Service</p> </li> <li> <p>Amazon ElastiCache</p> </li> <li> <p>Amazon OpenSearch Service</p> </li> </ul>"
+          "documentation":"<p>The cost filters, such as <code>Region</code>, <code>Service</code>, <code>LinkedAccount</code>, <code>Tag</code>, or <code>CostCategory</code>, that are applied to a budget.</p> <p>Amazon Web Services Budgets supports the following services as a <code>Service</code> filter for RI budgets:</p> <ul> <li> <p>Amazon EC2</p> </li> <li> <p>Amazon Redshift</p> </li> <li> <p>Amazon Relational Database Service</p> </li> <li> <p>Amazon ElastiCache</p> </li> <li> <p>Amazon OpenSearch Service</p> </li> </ul>",
+          "deprecated":true,
+          "deprecatedMessage":"CostFilters lack support for newer dimensions and filtering options. Please consider using the new 'FilterExpression' field.",
+          "deprecatedSince":"2025-04-18"
         },
         "CostTypes":{
           "shape":"CostTypes",
-          "documentation":"<p>The types of costs that are included in this <code>COST</code> budget.</p> <p> <code>USAGE</code>, <code>RI_UTILIZATION</code>, <code>RI_COVERAGE</code>, <code>SAVINGS_PLANS_UTILIZATION</code>, and <code>SAVINGS_PLANS_COVERAGE</code> budgets do not have <code>CostTypes</code>.</p>"
+          "documentation":"<p>The types of costs that are included in this <code>COST</code> budget.</p> <p> <code>USAGE</code>, <code>RI_UTILIZATION</code>, <code>RI_COVERAGE</code>, <code>SAVINGS_PLANS_UTILIZATION</code>, and <code>SAVINGS_PLANS_COVERAGE</code> budgets do not have <code>CostTypes</code>.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"CostTypes lack support for newer record type dimensions and filtering options. Please consider using the new 'Metrics' field.",
+          "deprecatedSince":"2025-04-18"
         },
         "TimeUnit":{
           "shape":"TimeUnit",
@@ -728,7 +751,7 @@
         },
         "TimePeriod":{
           "shape":"TimePeriod",
-          "documentation":"<p>The period of time that's covered by a budget. You setthe start date and end date. The start date must come before the end date. The end date must come before <code>06/15/87 00:00 UTC</code>. </p> <p>If you create your budget and don't specify a start date, Amazon Web Services defaults to the start of your chosen time period (DAILY, MONTHLY, QUARTERLY, or ANNUALLY). For example, if you created your budget on January 24, 2018, chose <code>DAILY</code>, and didn't set a start date, Amazon Web Services set your start date to <code>01/24/18 00:00 UTC</code>. If you chose <code>MONTHLY</code>, Amazon Web Services set your start date to <code>01/01/18 00:00 UTC</code>. If you didn't specify an end date, Amazon Web Services set your end date to <code>06/15/87 00:00 UTC</code>. The defaults are the same for the Billing and Cost Management console and the API. </p> <p>You can change either date with the <code>UpdateBudget</code> operation.</p> <p>After the end date, Amazon Web Services deletes the budget and all the associated notifications and subscribers.</p>"
+          "documentation":"<p>The period of time that's covered by a budget. You set the start date and end date. The start date must come before the end date. The end date must come before <code>06/15/87 00:00 UTC</code>. </p> <p>If you create your budget and don't specify a start date, Amazon Web Services defaults to the start of your chosen time period (DAILY, MONTHLY, QUARTERLY, ANNUALLY, or CUSTOM). For example, if you created your budget on January 24, 2018, chose <code>DAILY</code>, and didn't set a start date, Amazon Web Services set your start date to <code>01/24/18 00:00 UTC</code>. If you chose <code>MONTHLY</code>, Amazon Web Services set your start date to <code>01/01/18 00:00 UTC</code>. If you didn't specify an end date, Amazon Web Services set your end date to <code>06/15/87 00:00 UTC</code>. The defaults are the same for the Billing and Cost Management console and the API. </p> <p>You can change either date with the <code>UpdateBudget</code> operation.</p> <p>After the end date, Amazon Web Services deletes the budget and all the associated notifications and subscribers.</p>"
         },
         "CalculatedSpend":{
           "shape":"CalculatedSpend",
@@ -745,6 +768,22 @@
         "AutoAdjustData":{
           "shape":"AutoAdjustData",
           "documentation":"<p>The parameters that determine the budget amount for an auto-adjusting budget.</p>"
+        },
+        "FilterExpression":{
+          "shape":"Expression",
+          "documentation":"<p>The filtering dimensions for the budget and their corresponding values.</p>"
+        },
+        "Metrics":{
+          "shape":"Metrics",
+          "documentation":"<p>The definition for how the budget data is aggregated.</p>"
+        },
+        "BillingViewArn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies a specific billing view. The ARN is used to specify which particular billing view you want to interact with or retrieve information from when making API calls related to Amazon Web Services Billing and Cost Management features. The BillingViewArn can be retrieved by calling the ListBillingViews API.</p>"
+        },
+        "HealthStatus":{
+          "shape":"HealthStatus",
+          "documentation":"<p>The current operational state of a Billing View derived resource.</p>"
         }
       },
       "documentation":"<p>Represents the output of the <code>CreateBudget</code> operation. The content consists of the detailed metadata and data file information, and the current status of the <code>budget</code> object.</p> <p>This is the Amazon Resource Name (ARN) pattern for a budget: </p> <p> <code>arn:aws:budgets::AccountId:budget/budgetName</code> </p>"
@@ -783,6 +822,10 @@
           "documentation":"<p>The history of the cost types for a budget during the specified time period.</p>"
         },
         "TimeUnit":{"shape":"TimeUnit"},
+        "BillingViewArn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies a specific billing view. The ARN is used to specify which particular billing view you want to interact with or retrieve information from when making API calls related to Amazon Web Services Billing and Cost Management features. The BillingViewArn can be retrieved by calling the ListBillingViews API.</p>"
+        },
         "BudgetedAndActualAmountsList":{
           "shape":"BudgetedAndActualAmountsList",
           "documentation":"<p>A list of amounts of cost or usage that you created budgets for, which are compared to your actual costs or usage.</p>"
@@ -853,6 +896,25 @@
         "EQUAL_TO"
       ]
     },
+    "CostCategoryName":{"type":"string"},
+    "CostCategoryValues":{
+      "type":"structure",
+      "members":{
+        "Key":{
+          "shape":"CostCategoryName",
+          "documentation":"<p>The unique name of the cost category.</p>"
+        },
+        "Values":{
+          "shape":"Values",
+          "documentation":"<p>The specific value of the cost category.</p>"
+        },
+        "MatchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options that you can use to filter your results. </p>"
+        }
+      },
+      "documentation":"<p>The cost category values used for filtering the costs.</p>"
+    },
     "CostFilters":{
       "type":"map",
       "key":{"shape":"GenericString"},
@@ -991,8 +1053,7 @@
     },
     "CreateBudgetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of CreateBudget </p>"
     },
     "CreateNotificationRequest":{
@@ -1025,8 +1086,7 @@
     },
     "CreateNotificationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of CreateNotification </p>"
     },
     "CreateSubscriberRequest":{
@@ -1059,8 +1119,7 @@
     },
     "CreateSubscriberResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of CreateSubscriber </p>"
     },
     "CreationLimitExceededException":{
@@ -1138,8 +1197,7 @@
     },
     "DeleteBudgetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of DeleteBudget </p>"
     },
     "DeleteNotificationRequest":{
@@ -1167,8 +1225,7 @@
     },
     "DeleteNotificationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of DeleteNotification </p>"
     },
     "DeleteSubscriberRequest":{
@@ -1201,8 +1258,7 @@
     },
     "DeleteSubscriberResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of DeleteSubscriber </p>"
     },
     "DescribeBudgetActionHistoriesRequest":{
@@ -1374,6 +1430,10 @@
         "BudgetName":{
           "shape":"BudgetName",
           "documentation":"<p>The name of the budget that you want a description of.</p>"
+        },
+        "ShowFilterExpression":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Specifies whether the response includes the filter expression associated with the budget. By showing the filter expression, you can see detailed filtering logic applied to the budget, such as Amazon Web Services services or tags that are being tracked.</p>"
         }
       },
       "documentation":"<p> Request of DescribeBudget </p>"
@@ -1403,6 +1463,10 @@
         "NextToken":{
           "shape":"GenericString",
           "documentation":"<p>The pagination token that you include in your request to indicate the next set of results that you want to retrieve.</p>"
+        },
+        "ShowFilterExpression":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Specifies whether the response includes the filter expression associated with the budgets. By showing the filter expression, you can see detailed filtering logic applied to the budgets, such as Amazon Web Services services or tags that are being tracked.</p>"
         }
       },
       "documentation":"<p> Request of DescribeBudgets </p>"
@@ -1506,6 +1570,44 @@
       },
       "documentation":"<p> Response of DescribeSubscribersForNotification </p>"
     },
+    "Dimension":{
+      "type":"string",
+      "enum":[
+        "AZ",
+        "INSTANCE_TYPE",
+        "LINKED_ACCOUNT",
+        "LINKED_ACCOUNT_NAME",
+        "OPERATION",
+        "PURCHASE_TYPE",
+        "REGION",
+        "SERVICE",
+        "SERVICE_CODE",
+        "USAGE_TYPE",
+        "USAGE_TYPE_GROUP",
+        "RECORD_TYPE",
+        "OPERATING_SYSTEM",
+        "TENANCY",
+        "SCOPE",
+        "PLATFORM",
+        "SUBSCRIPTION_ID",
+        "LEGAL_ENTITY_NAME",
+        "INVOICING_ENTITY",
+        "DEPLOYMENT_OPTION",
+        "DATABASE_ENGINE",
+        "CACHE_ENGINE",
+        "INSTANCE_TYPE_FAMILY",
+        "BILLING_ENTITY",
+        "RESERVATION_ID",
+        "RESOURCE_ID",
+        "RIGHTSIZING_TYPE",
+        "SAVINGS_PLANS_TYPE",
+        "SAVINGS_PLAN_ARN",
+        "PAYMENT_OPTION",
+        "RESERVATION_MODIFIED",
+        "TAG_KEY",
+        "COST_CATEGORY_NAME"
+      ]
+    },
     "DimensionValue":{
       "type":"string",
       "max":2147483647,
@@ -1593,6 +1695,62 @@
       "documentation":"<p>The pagination token expired.</p>",
       "exception":true
     },
+    "Expression":{
+      "type":"structure",
+      "members":{
+        "Or":{
+          "shape":"Expressions",
+          "documentation":"<p>Return results that match either Dimension object.</p>"
+        },
+        "And":{
+          "shape":"Expressions",
+          "documentation":"<p>Return results that match both Dimension objects.</p>"
+        },
+        "Not":{
+          "shape":"Expression",
+          "documentation":"<p>Return results that don't match a Dimension object.</p>"
+        },
+        "Dimensions":{
+          "shape":"ExpressionDimensionValues",
+          "documentation":"<p>The specific Dimension to use for Expression.</p>"
+        },
+        "Tags":{
+          "shape":"TagValues",
+          "documentation":"<p>The specific Tag to use for Expression.</p>"
+        },
+        "CostCategories":{
+          "shape":"CostCategoryValues",
+          "documentation":"<p>The filter that's based on CostCategoryValues.</p>"
+        }
+      },
+      "documentation":"<p>Use Expression to filter in various Budgets APIs.</p>"
+    },
+    "ExpressionDimensionValues":{
+      "type":"structure",
+      "required":[
+        "Key",
+        "Values"
+      ],
+      "members":{
+        "Key":{
+          "shape":"Dimension",
+          "documentation":"<p>The name of the dimension that you want to filter on.</p>"
+        },
+        "Values":{
+          "shape":"Values",
+          "documentation":"<p>The metadata values you can specify to filter upon, so that the results all match at least one of the specified values.</p>"
+        },
+        "MatchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options that you can use to filter your results. You can specify only one of these values in the array.</p>"
+        }
+      },
+      "documentation":"<p>Contains the specifications for the filters to use for your request.</p>"
+    },
+    "Expressions":{
+      "type":"list",
+      "member":{"shape":"Expression"}
+    },
     "GenericString":{
       "type":"string",
       "documentation":"<p> A generic string.</p>",
@@ -1616,6 +1774,37 @@
       "max":100,
       "min":1
     },
+    "HealthStatus":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"HealthStatusValue",
+          "documentation":"<p>The current status of the billing view resource.</p>"
+        },
+        "StatusReason":{
+          "shape":"HealthStatusReason",
+          "documentation":"<p>The reason for the current status.</p> <ul> <li> <p> <code>BILLING_VIEW_NO_ACCESS</code>: The billing view resource does not grant <code>billing:GetBillingViewData</code> permission to this account.</p> </li> <li> <p> <code>BILLING_VIEW_UNHEALTHY</code>: The billing view associated with the budget is unhealthy.</p> </li> <li> <p> <code>FILTER_INVALID</code>: The filter contains reference to an account you do not have access to.</p> </li> <li> <p> <code>MULTI_YEAR_HISTORICAL_DATA_DISABLED</code>: The budget is not being updated. Enable multi-year historical data in your Cost Management preferences.</p> </li> </ul>"
+        },
+        "LastUpdatedTime":{"shape":"GenericTimestamp"}
+      },
+      "documentation":"<p>Provides information about the current operational state of a billing view resource, including its ability to access and update based on its associated billing view.</p>"
+    },
+    "HealthStatusReason":{
+      "type":"string",
+      "enum":[
+        "BILLING_VIEW_NO_ACCESS",
+        "BILLING_VIEW_UNHEALTHY",
+        "FILTER_INVALID",
+        "MULTI_YEAR_HISTORICAL_DATA_DISABLED"
+      ]
+    },
+    "HealthStatusValue":{
+      "type":"string",
+      "enum":[
+        "HEALTHY",
+        "UNHEALTHY"
+      ]
+    },
     "HistoricalOptions":{
       "type":"structure",
       "required":["BudgetAdjustmentPeriod"],
@@ -1709,6 +1898,23 @@
         }
       }
     },
+    "MatchOption":{
+      "type":"string",
+      "enum":[
+        "EQUALS",
+        "ABSENT",
+        "STARTS_WITH",
+        "ENDS_WITH",
+        "CONTAINS",
+        "GREATER_THAN_OR_EQUAL",
+        "CASE_SENSITIVE",
+        "CASE_INSENSITIVE"
+      ]
+    },
+    "MatchOptions":{
+      "type":"list",
+      "member":{"shape":"MatchOption"}
+    },
     "MaxResults":{
       "type":"integer",
       "documentation":"<p> An integer that represents how many entries a paginated response contains. The maximum is 100.</p>",
@@ -1728,6 +1934,24 @@
       "max":1000,
       "min":1
     },
+    "Metric":{
+      "type":"string",
+      "enum":[
+        "BlendedCost",
+        "UnblendedCost",
+        "AmortizedCost",
+        "NetUnblendedCost",
+        "NetAmortizedCost",
+        "UsageQuantity",
+        "NormalizedUsageAmount",
+        "Hours"
+      ]
+    },
+    "Metrics":{
+      "type":"list",
+      "member":{"shape":"Metric"},
+      "max":1
+    },
     "NotFoundException":{
       "type":"structure",
       "members":{
@@ -1837,7 +2061,7 @@
       "type":"string",
       "max":684,
       "min":25,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso|-iso-[a-z]{1})?:iam::(\\d{12}|aws):policy(\\u002F[\\u0021-\\u007F]+\\u002F|\\u002F)[\\w+=,.@-]+$"
+      "pattern":"^arn:aws(-eusc|-cn|-us-gov|-iso|-iso-[a-z]{1})?:iam::(\\d{12}|aws):policy(\\u002F[\\u0021-\\u007F]+\\u002F|\\u002F)[\\w+=,.@-]+$"
     },
     "PolicyId":{
       "type":"string",
@@ -1849,7 +2073,7 @@
       "type":"string",
       "max":20,
       "min":9,
-      "pattern":"^\\w{2}-\\w+(-\\w+)?-\\d$"
+      "pattern":"^\\w{2,4}-\\w+(-\\w+)?-\\d$"
     },
     "ResourceLockedException":{
       "type":"structure",
@@ -1909,7 +2133,7 @@
       "type":"string",
       "max":618,
       "min":32,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso|-iso-[a-z]{1})?:iam::\\d{12}:role(\\u002F[\\u0021-\\u007F]+\\u002F|\\u002F)[\\w+=,.@-]+$"
+      "pattern":"^arn:aws(-eusc|-cn|-us-gov|-iso|-iso-[a-z]{1})?:iam::\\d{12}:role(\\u002F[\\u0021-\\u007F]+\\u002F|\\u002F)[\\w+=,.@-]+$"
     },
     "Roles":{
       "type":"list",
@@ -2025,6 +2249,12 @@
         "EMAIL"
       ]
     },
+    "TagKey":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\S\\s]*"
+    },
     "TagResourceRequest":{
       "type":"structure",
       "required":[
@@ -2044,8 +2274,25 @@
     },
     "TagResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "TagValues":{
+      "type":"structure",
       "members":{
-      }
+        "Key":{
+          "shape":"TagKey",
+          "documentation":"<p>The key for the tag.</p>"
+        },
+        "Values":{
+          "shape":"Values",
+          "documentation":"<p>The specific value of the tag.</p>"
+        },
+        "MatchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options that you can use to filter your results.</p>"
+        }
+      },
+      "documentation":"<p>The values that are available for a tag.</p>"
     },
     "TargetId":{
       "type":"string",
@@ -2080,7 +2327,7 @@
       "members":{
         "Start":{
           "shape":"GenericTimestamp",
-          "documentation":"<p>The start date for a budget. If you created your budget and didn't specify a start date, Amazon Web Services defaults to the start of your chosen time period (DAILY, MONTHLY, QUARTERLY, or ANNUALLY). For example, if you created your budget on January 24, 2018, chose <code>DAILY</code>, and didn't set a start date, Amazon Web Services set your start date to <code>01/24/18 00:00 UTC</code>. If you chose <code>MONTHLY</code>, Amazon Web Services set your start date to <code>01/01/18 00:00 UTC</code>. The defaults are the same for the Billing and Cost Management console and the API.</p> <p>You can change your start date with the <code>UpdateBudget</code> operation.</p>"
+          "documentation":"<p>The start date for a budget. If you created your budget and didn't specify a start date, Amazon Web Services defaults to the start of your chosen time period (DAILY, MONTHLY, QUARTERLY, ANNUALLY, or CUSTOM). For example, if you created your budget on January 24, 2018, chose <code>DAILY</code>, and didn't set a start date, Amazon Web Services set your start date to <code>01/24/18 00:00 UTC</code>. If you chose <code>MONTHLY</code>, Amazon Web Services set your start date to <code>01/01/18 00:00 UTC</code>. The defaults are the same for the Billing and Cost Management console and the API.</p> <p>You can change your start date with the <code>UpdateBudget</code> operation.</p>"
         },
         "End":{
           "shape":"GenericTimestamp",
@@ -2096,7 +2343,8 @@
         "DAILY",
         "MONTHLY",
         "QUARTERLY",
-        "ANNUALLY"
+        "ANNUALLY",
+        "CUSTOM"
       ]
     },
     "UnitValue":{
@@ -2125,8 +2373,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateBudgetActionRequest":{
       "type":"structure",
@@ -2197,8 +2444,7 @@
     },
     "UpdateBudgetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of UpdateBudget </p>"
     },
     "UpdateNotificationRequest":{
@@ -2231,8 +2477,7 @@
     },
     "UpdateNotificationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of UpdateNotification </p>"
     },
     "UpdateSubscriberRequest":{
@@ -2270,8 +2515,7 @@
     },
     "UpdateSubscriberResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Response of UpdateSubscriber </p>"
     },
     "User":{
@@ -2286,6 +2530,17 @@
       "max":100,
       "min":1
     },
+    "Value":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[\\S\\s]*"
+    },
+    "Values":{
+      "type":"list",
+      "member":{"shape":"Value"},
+      "min":1
+    },
     "errorMessage":{
       "type":"string",
       "documentation":"<p>The error message the exception carries.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ce/2017-10-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,254 +57,422 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "stringEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://ce.us-east-1.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "ce",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.us-east-1.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-cn"
                                             ]
                                         },
-                                        "aws-cn"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.cn-northwest-1.api.amazonwebservices.com.cn",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "cn-northwest-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso"
+                                            ]
                                         },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://ce.cn-northwest-1.amazonaws.com.cn",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "ce",
-                                            "signingRegion": "cn-northwest-1"
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.us-iso-east-1.c2s.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-iso-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso-b"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.us-isob-east-1.sc2s.sgov.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isob-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-iso-e"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.eu-isoe-west-1.cloud.adc-e.uk",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eu-isoe-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-iso-f"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://ce-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://ce.us-isof-south-1.csp.hci.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isof-south-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-eusc"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.eusc-de-east-1.api.amazonwebservices.eu",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eusc-de-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
                                                     "fn": "getAttr",
@@ -312,105 +480,293 @@
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-eusc"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://ce.eusc-de-east-1.api.amazonwebservices.eu",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eusc-de-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://ce-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://ce-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://ce-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://ce.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://ce.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://ce.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://ce.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/ce/2017-10-25/paginators-1.json 2.31.35-1/awscli/botocore/data/ce/2017-10-25/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ce/2017-10-25/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ce/2017-10-25/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,34 @@
 {
-  "pagination": {}
+  "pagination": {
+    "GetAnomalies": {
+      "input_token": "NextPageToken",
+      "output_token": "NextPageToken",
+      "limit_key": "MaxResults",
+      "result_key": "Anomalies"
+    },
+    "GetAnomalyMonitors": {
+      "input_token": "NextPageToken",
+      "output_token": "NextPageToken",
+      "limit_key": "MaxResults",
+      "result_key": "AnomalyMonitors"
+    },
+    "GetAnomalySubscriptions": {
+      "input_token": "NextPageToken",
+      "output_token": "NextPageToken",
+      "limit_key": "MaxResults",
+      "result_key": "AnomalySubscriptions"
+    },
+    "GetCostAndUsageComparisons": {
+      "input_token": "NextPageToken",
+      "output_token": "NextPageToken",
+      "limit_key": "MaxResults",
+      "result_key": "CostAndUsageComparisons"
+    },
+    "GetCostComparisonDrivers": {
+      "input_token": "NextPageToken",
+      "output_token": "NextPageToken",
+      "limit_key": "MaxResults",
+      "result_key": "CostComparisonDrivers"
+    }
+  }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ce/2017-10-25/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/ce/2017-10-25/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/ce/2017-10-25/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ce/2017-10-25/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "GetCostAndUsageComparisons": {
+        "non_aggregate_keys": [
+          "TotalCostAndUsage"
+        ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/ce/2017-10-25/service-2.json 2.31.35-1/awscli/botocore/data/ce/2017-10-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/ce/2017-10-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ce/2017-10-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -200,10 +200,28 @@
         {"shape":"DataUnavailableException"},
         {"shape":"InvalidNextTokenException"},
         {"shape":"RequestChangedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves cost and usage metrics for your account. You can specify which cost and usage-related metric that you want the request to return. For example, you can specify <code>BlendedCosts</code> or <code>UsageQuantity</code>. You can also filter and group your data by various dimensions, such as <code>SERVICE</code> or <code>AZ</code>, in a specific time range. For a complete list of valid dimensions, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetDimensionValues.html\">GetDimensionValues</a> operation. Management account in an organization in Organizations have access to all member accounts.</p> <p>For information about filter limitations, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-limits.html\">Quotas and restrictions</a> in the <i>Billing and Cost Management User Guide</i>.</p>"
     },
+    "GetCostAndUsageComparisons":{
+      "name":"GetCostAndUsageComparisons",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCostAndUsageComparisonsRequest"},
+      "output":{"shape":"GetCostAndUsageComparisonsResponse"},
+      "errors":[
+        {"shape":"DataUnavailableException"},
+        {"shape":"InvalidNextTokenException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
+      ],
+      "documentation":"<p>Retrieves cost and usage comparisons for your account between two periods within the last 13 months. If you have enabled multi-year data at monthly granularity, you can go back up to 38 months.</p>"
+    },
     "GetCostAndUsageWithResources":{
       "name":"GetCostAndUsageWithResources",
       "http":{
@@ -218,7 +236,8 @@
         {"shape":"BillExpirationException"},
         {"shape":"InvalidNextTokenException"},
         {"shape":"RequestChangedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves cost and usage metrics with resources for your account. You can specify which cost and usage-related metric, such as <code>BlendedCosts</code> or <code>UsageQuantity</code>, that you want the request to return. You can also filter and group your data by various dimensions, such as <code>SERVICE</code> or <code>AZ</code>, in a specific time range. For a complete list of valid dimensions, see the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetDimensionValues.html\">GetDimensionValues</a> operation. Management account in an organization in Organizations have access to all member accounts.</p> <p>Hourly granularity is only available for EC2-Instances (Elastic Compute Cloud) resource-level data. All other resource-level data is available at daily granularity.</p> <note> <p>This is an opt-in only feature. You can enable this feature from the Cost Explorer Settings page. For information about how to access the Settings page, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-access.html\">Controlling Access for Cost Explorer</a> in the <i>Billing and Cost Management User Guide</i>.</p> </note>"
     },
@@ -236,10 +255,28 @@
         {"shape":"DataUnavailableException"},
         {"shape":"InvalidNextTokenException"},
         {"shape":"RequestChangedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves an array of Cost Category names and values incurred cost.</p> <note> <p>If some Cost Category names and values are not associated with any cost, they will not be returned by this API.</p> </note>"
     },
+    "GetCostComparisonDrivers":{
+      "name":"GetCostComparisonDrivers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCostComparisonDriversRequest"},
+      "output":{"shape":"GetCostComparisonDriversResponse"},
+      "errors":[
+        {"shape":"DataUnavailableException"},
+        {"shape":"InvalidNextTokenException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
+      ],
+      "documentation":"<p>Retrieves key factors driving cost changes between two time periods within the last 13 months, such as usage changes, discount changes, and commitment-based savings. If you have enabled multi-year data at monthly granularity, you can go back up to 38 months.</p>"
+    },
     "GetCostForecast":{
       "name":"GetCostForecast",
       "http":{
@@ -251,7 +288,8 @@
       "errors":[
         {"shape":"LimitExceededException"},
         {"shape":"DataUnavailableException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves a forecast for how much Amazon Web Services predicts that you will spend over the forecast time period that you select, based on your past costs. </p>"
     },
@@ -269,7 +307,8 @@
         {"shape":"DataUnavailableException"},
         {"shape":"InvalidNextTokenException"},
         {"shape":"RequestChangedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves all available filter values for a specified filter over a period of time. You can search the dimension values for an arbitrary string. </p>"
     },
@@ -418,7 +457,8 @@
         {"shape":"DataUnavailableException"},
         {"shape":"InvalidNextTokenException"},
         {"shape":"RequestChangedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Queries for available tag keys and tag values for a specified period. You can search the tag values for an arbitrary string. </p>"
     },
@@ -434,7 +474,8 @@
         {"shape":"LimitExceededException"},
         {"shape":"DataUnavailableException"},
         {"shape":"UnresolvableUsageUnitException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"BillingViewHealthStatusException"}
       ],
       "documentation":"<p>Retrieves a forecast for how much Amazon Web Services predicts that you will use over the forecast time period that you select, based on your past usage. </p>"
     },
@@ -564,7 +605,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"BackfillLimitExceededException"}
       ],
-      "documentation":"<p> Request a cost allocation tag backfill. This will backfill the activation status (either <code>active</code> or <code>inactive</code>) for all tag keys from <code>para:BackfillFrom</code> up to the when this request is made.</p> <p>You can request a backfill once every 24 hours. </p>"
+      "documentation":"<p> Request a cost allocation tag backfill. This will backfill the activation status (either <code>active</code> or <code>inactive</code>) for all tag keys from <code>para:BackfillFrom</code> up to the time this request is made.</p> <p>You can request a backfill once every 24 hours. </p>"
     },
     "StartSavingsPlansPurchaseRecommendationGeneration":{
       "name":"StartSavingsPlansPurchaseRecommendationGeneration",
@@ -1013,6 +1054,14 @@
       "min":20,
       "pattern":"^arn:aws[a-z-]*:(billing)::[0-9]{12}:billingview/[-a-zA-Z0-9/:_+=.-@]{1,43}$"
     },
+    "BillingViewHealthStatusException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p> The billing view status must be <code>HEALTHY</code> to perform this action. Try again when the status is <code>HEALTHY</code>. </p>",
+      "exception":true
+    },
     "CommitmentPurchaseAnalysisConfiguration":{
       "type":"structure",
       "members":{
@@ -1023,6 +1072,33 @@
       },
       "documentation":"<p>The configuration for the commitment purchase analysis.</p>"
     },
+    "ComparisonMetricValue":{
+      "type":"structure",
+      "members":{
+        "BaselineTimePeriodAmount":{
+          "shape":"GenericString",
+          "documentation":"<p>The numeric value for the baseline time period measurement.</p>"
+        },
+        "ComparisonTimePeriodAmount":{
+          "shape":"GenericString",
+          "documentation":"<p>The numeric value for the comparison time period measurement.</p>"
+        },
+        "Difference":{
+          "shape":"GenericString",
+          "documentation":"<p>The calculated difference between <code>ComparisonTimePeriodAmount</code> and <code>BaselineTimePeriodAmount</code>.</p>"
+        },
+        "Unit":{
+          "shape":"GenericString",
+          "documentation":"<p>The unit of measurement applicable to all numeric values in this comparison.</p>"
+        }
+      },
+      "documentation":"<p>Contains cost or usage metric values for comparing two time periods. Each value includes amounts for the baseline and comparison time periods, their difference, and the unit of measurement.</p>"
+    },
+    "ComparisonMetrics":{
+      "type":"map",
+      "key":{"shape":"MetricName"},
+      "value":{"shape":"ComparisonMetricValue"}
+    },
     "Context":{
       "type":"string",
       "enum":[
@@ -1157,6 +1233,27 @@
       "max":1000,
       "min":1
     },
+    "CostAndUsageComparison":{
+      "type":"structure",
+      "members":{
+        "CostAndUsageSelector":{"shape":"Expression"},
+        "Metrics":{
+          "shape":"ComparisonMetrics",
+          "documentation":"<p>A mapping of metric names to their comparison values.</p>"
+        }
+      },
+      "documentation":"<p>Represents a comparison of cost and usage metrics between two time periods.</p>"
+    },
+    "CostAndUsageComparisons":{
+      "type":"list",
+      "member":{"shape":"CostAndUsageComparison"}
+    },
+    "CostAndUsageComparisonsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":2000,
+      "min":1
+    },
     "CostCategory":{
       "type":"structure",
       "required":[
@@ -1443,6 +1540,53 @@
       "type":"list",
       "member":{"shape":"CostCategoryValue"}
     },
+    "CostComparisonDriver":{
+      "type":"structure",
+      "members":{
+        "CostSelector":{"shape":"Expression"},
+        "Metrics":{
+          "shape":"ComparisonMetrics",
+          "documentation":"<p>A mapping of metric names to their comparison values.</p>"
+        },
+        "CostDrivers":{
+          "shape":"CostDrivers",
+          "documentation":"<p>An array of cost drivers, each representing a cost difference between the baseline and comparison time periods. Each entry also includes a metric delta (for example, usage change) that contributed to the cost variance, along with the identifier and type of change.</p>"
+        }
+      },
+      "documentation":"<p>Represents a collection of cost drivers and their associated metrics for cost comparison analysis.</p>"
+    },
+    "CostComparisonDrivers":{
+      "type":"list",
+      "member":{"shape":"CostComparisonDriver"}
+    },
+    "CostComparisonDriversMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "CostDriver":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"GenericString",
+          "documentation":"<p>The category or classification of the cost driver.</p> <p>Values include: BUNDLED_DISCOUNT, CREDIT, OUT_OF_CYCLE_CHARGE, REFUND, RECURRING_RESERVATION_FEE, RESERVATION_USAGE, RI_VOLUME_DISCOUNT, SAVINGS_PLAN_USAGE, SAVINGS_PLAN_RECURRING_FEE, SUPPORT_FEE, TAX, UPFRONT_RESERVATION_FEE, USAGE_CHANGE, COMMITMENT</p>"
+        },
+        "Name":{
+          "shape":"GenericString",
+          "documentation":"<p>The specific identifier of the cost driver.</p>"
+        },
+        "Metrics":{
+          "shape":"ComparisonMetrics",
+          "documentation":"<p>A mapping of metric names to their comparison values, measuring the impact of this cost driver.</p>"
+        }
+      },
+      "documentation":"<p>Represents factors that contribute to cost variations between the baseline and comparison time periods, including the type of driver, an identifier of the driver, and associated metrics.</p>"
+    },
+    "CostDrivers":{
+      "type":"list",
+      "member":{"shape":"CostDriver"}
+    },
     "Coverage":{
       "type":"structure",
       "members":{
@@ -1717,8 +1861,7 @@
     },
     "DeleteAnomalyMonitorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAnomalySubscriptionRequest":{
       "type":"structure",
@@ -1732,8 +1875,7 @@
     },
     "DeleteAnomalySubscriptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCostCategoryDefinitionRequest":{
       "type":"structure",
@@ -1784,6 +1926,7 @@
         "AZ",
         "INSTANCE_TYPE",
         "LINKED_ACCOUNT",
+        "PAYER_ACCOUNT",
         "LINKED_ACCOUNT_NAME",
         "OPERATION",
         "PURCHASE_TYPE",
@@ -1822,7 +1965,7 @@
       "members":{
         "Key":{
           "shape":"Dimension",
-          "documentation":"<p>The names of the metadata types that you can use to filter and group your results. For example, <code>AZ</code> returns a list of Availability Zones.</p> <p>Not all dimensions are supported in each API. Refer to the documentation for each specific API to see what is supported.</p> <p> <code>LINK_ACCOUNT_NAME</code> and <code>SERVICE_CODE</code> can only be used in <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategoryRule.html\">CostCategoryRule</a>.</p> <p> <code>ANOMALY_TOTAL_IMPACT_ABSOLUTE</code> and <code>ANOMALY_TOTAL_IMPACT_PERCENTAGE</code> can only be used in <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html\">AnomalySubscriptions</a>.</p>"
+          "documentation":"<p>The names of the metadata types that you can use to filter and group your results. For example, <code>AZ</code> returns a list of Availability Zones.</p> <p>Not all dimensions are supported in each API. Refer to the documentation for each specific API to see what is supported.</p> <p> <code>LINKED_ACCOUNT_NAME</code> and <code>SERVICE_CODE</code> can only be used in <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_CostCategoryRule.html\">CostCategoryRule</a>.</p> <p> <code>ANOMALY_TOTAL_IMPACT_ABSOLUTE</code> and <code>ANOMALY_TOTAL_IMPACT_PERCENTAGE</code> can only be used in <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalySubscription.html\">AnomalySubscriptions</a>.</p>"
         },
         "Values":{
           "shape":"Values",
@@ -2265,7 +2408,8 @@
         },
         "MaxResults":{
           "shape":"PageSize",
-          "documentation":"<p>The number of entries a paginated response contains. </p>"
+          "documentation":"<p>The number of entries a paginated response contains. </p>",
+          "box":true
         }
       }
     },
@@ -2296,7 +2440,8 @@
         },
         "MaxResults":{
           "shape":"PageSize",
-          "documentation":"<p>The number of entries that a paginated response contains. </p>"
+          "documentation":"<p>The number of entries that a paginated response contains. </p>",
+          "box":true
         }
       }
     },
@@ -2331,7 +2476,8 @@
         },
         "MaxResults":{
           "shape":"PageSize",
-          "documentation":"<p>The number of entries a paginated response contains. </p>"
+          "documentation":"<p>The number of entries a paginated response contains. </p>",
+          "box":true
         }
       }
     },
@@ -2441,6 +2587,63 @@
         }
       }
     },
+    "GetCostAndUsageComparisonsRequest":{
+      "type":"structure",
+      "required":[
+        "BaselineTimePeriod",
+        "ComparisonTimePeriod",
+        "MetricForComparison"
+      ],
+      "members":{
+        "BillingViewArn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies a specific billing view. The ARN is used to specify which particular billing view you want to interact with or retrieve information from when making API calls related to Amazon Web Services Billing and Cost Management features. The BillingViewArn can be retrieved by calling the ListBillingViews API.</p>"
+        },
+        "BaselineTimePeriod":{
+          "shape":"DateInterval",
+          "documentation":"<p>The reference time period for comparison. This time period serves as the baseline against which other cost and usage data will be compared. The interval must start and end on the first day of a month, with a duration of exactly one month.</p>"
+        },
+        "ComparisonTimePeriod":{
+          "shape":"DateInterval",
+          "documentation":"<p>The comparison time period for analysis. This time period's cost and usage data will be compared against the baseline time period. The interval must start and end on the first day of a month, with a duration of exactly one month.</p>"
+        },
+        "MetricForComparison":{
+          "shape":"MetricName",
+          "documentation":"<p>The cost and usage metric to compare. Valid values are <code>AmortizedCost</code>, <code>BlendedCost</code>, <code>NetAmortizedCost</code>, <code>NetUnblendedCost</code>, <code>NormalizedUsageAmount</code>, <code>UnblendedCost</code>, and <code>UsageQuantity</code>.</p>"
+        },
+        "Filter":{"shape":"Expression"},
+        "GroupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>You can group results using the attributes <code>DIMENSION</code>, <code>TAG</code>, and <code>COST_CATEGORY</code>. </p>"
+        },
+        "MaxResults":{
+          "shape":"CostAndUsageComparisonsMaxResults",
+          "documentation":"<p>The maximum number of results that are returned for the request.</p>",
+          "box":true
+        },
+        "NextPageToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token to retrieve the next set of paginated results.</p>"
+        }
+      }
+    },
+    "GetCostAndUsageComparisonsResponse":{
+      "type":"structure",
+      "members":{
+        "CostAndUsageComparisons":{
+          "shape":"CostAndUsageComparisons",
+          "documentation":"<p>An array of comparison results showing cost and usage metrics between <code>BaselineTimePeriod</code> and <code>ComparisonTimePeriod</code>.</p>"
+        },
+        "TotalCostAndUsage":{
+          "shape":"ComparisonMetrics",
+          "documentation":"<p>A summary of the total cost and usage, comparing amounts between <code>BaselineTimePeriod</code> and <code>ComparisonTimePeriod</code> and their differences. This total represents the aggregate total across all paginated results, if the response spans multiple pages.</p>"
+        },
+        "NextPageToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token to retrieve the next set of paginated results.</p>"
+        }
+      }
+    },
     "GetCostAndUsageRequest":{
       "type":"structure",
       "required":[
@@ -2518,7 +2721,7 @@
         },
         "Filter":{
           "shape":"Expression",
-          "documentation":"<p>Filters Amazon Web Services costs by different dimensions. For example, you can specify <code>SERVICE</code> and <code>LINKED_ACCOUNT</code> and get the costs that are associated with that account's usage of that service. You can nest <code>Expression</code> objects to define any combination of dimension filters. For more information, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. </p> <p>The <code>GetCostAndUsageWithResources</code> operation requires that you either group by or filter by a <code>ResourceId</code>. It requires the <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a> <code>\"SERVICE = Amazon Elastic Compute Cloud - Compute\"</code> in the filter.</p> <p>Valid values for <code>MatchOptions</code> for <code>Dimensions</code> are <code>EQUALS</code> and <code>CASE_SENSITIVE</code>.</p> <p>Valid values for <code>MatchOptions</code> for <code>CostCategories</code> and <code>Tags</code> are <code>EQUALS</code>, <code>ABSENT</code>, and <code>CASE_SENSITIVE</code>. Default values are <code>EQUALS</code> and <code>CASE_SENSITIVE</code>.</p>"
+          "documentation":"<p>Filters Amazon Web Services costs by different dimensions. For example, you can specify <code>SERVICE</code> and <code>LINKED_ACCOUNT</code> and get the costs that are associated with that account's usage of that service. You can nest <code>Expression</code> objects to define any combination of dimension filters. For more information, see <a href=\"https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html\">Expression</a>. </p> <p>Valid values for <code>MatchOptions</code> for <code>Dimensions</code> are <code>EQUALS</code> and <code>CASE_SENSITIVE</code>.</p> <p>Valid values for <code>MatchOptions</code> for <code>CostCategories</code> and <code>Tags</code> are <code>EQUALS</code>, <code>ABSENT</code>, and <code>CASE_SENSITIVE</code>. Default values are <code>EQUALS</code> and <code>CASE_SENSITIVE</code>.</p>"
         },
         "Metrics":{
           "shape":"MetricNames",
@@ -2617,6 +2820,59 @@
         }
       }
     },
+    "GetCostComparisonDriversRequest":{
+      "type":"structure",
+      "required":[
+        "BaselineTimePeriod",
+        "ComparisonTimePeriod",
+        "MetricForComparison"
+      ],
+      "members":{
+        "BillingViewArn":{
+          "shape":"BillingViewArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies a specific billing view. The ARN is used to specify which particular billing view you want to interact with or retrieve information from when making API calls related to Amazon Web Services Billing and Cost Management features. The BillingViewArn can be retrieved by calling the ListBillingViews API.</p>"
+        },
+        "BaselineTimePeriod":{
+          "shape":"DateInterval",
+          "documentation":"<p>The reference time period for comparison. This time period serves as the baseline against which other cost and usage data will be compared. The interval must start and end on the first day of a month, with a duration of exactly one month.</p>"
+        },
+        "ComparisonTimePeriod":{
+          "shape":"DateInterval",
+          "documentation":"<p>The comparison time period for analysis. This time period's cost and usage data will be compared against the baseline time period. The interval must start and end on the first day of a month, with a duration of exactly one month.</p>"
+        },
+        "MetricForComparison":{
+          "shape":"MetricName",
+          "documentation":"<p>The cost and usage metric to compare. Valid values are <code>AmortizedCost</code>, <code>BlendedCost</code>, <code>NetAmortizedCost</code>, <code>NetUnblendedCost</code>, <code>NormalizedUsageAmount</code>, <code>UnblendedCost</code>, and <code>UsageQuantity</code>.</p>"
+        },
+        "Filter":{"shape":"Expression"},
+        "GroupBy":{
+          "shape":"GroupDefinitions",
+          "documentation":"<p>You can group results using the attributes <code>DIMENSION</code>, <code>TAG</code>, and <code>COST_CATEGORY</code>. Note that <code>SERVICE</code> and <code>USAGE_TYPE</code> dimensions are automatically included in the cost comparison drivers analysis.</p>"
+        },
+        "MaxResults":{
+          "shape":"CostComparisonDriversMaxResults",
+          "documentation":"<p>The maximum number of results that are returned for the request.</p>",
+          "box":true
+        },
+        "NextPageToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token to retrieve the next set of paginated results.</p>"
+        }
+      }
+    },
+    "GetCostComparisonDriversResponse":{
+      "type":"structure",
+      "members":{
+        "CostComparisonDrivers":{
+          "shape":"CostComparisonDrivers",
+          "documentation":"<p>An array of comparison results showing factors that drive significant cost differences between <code>BaselineTimePeriod</code> and <code>ComparisonTimePeriod</code>.</p>"
+        },
+        "NextPageToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p>The token to retrieve the next set of paginated results.</p>"
+        }
+      }
+    },
     "GetCostForecastRequest":{
       "type":"structure",
       "required":[
@@ -2639,7 +2895,7 @@
         },
         "Filter":{
           "shape":"Expression",
-          "documentation":"<p>The filters that you want to use to filter your forecast. The <code>GetCostForecast</code> API supports filtering by the following dimensions:</p> <ul> <li> <p> <code>AZ</code> </p> </li> <li> <p> <code>INSTANCE_TYPE</code> </p> </li> <li> <p> <code>LINKED_ACCOUNT</code> </p> </li> <li> <p> <code>LINKED_ACCOUNT_NAME</code> </p> </li> <li> <p> <code>OPERATION</code> </p> </li> <li> <p> <code>PURCHASE_TYPE</code> </p> </li> <li> <p> <code>REGION</code> </p> </li> <li> <p> <code>SERVICE</code> </p> </li> <li> <p> <code>USAGE_TYPE</code> </p> </li> <li> <p> <code>USAGE_TYPE_GROUP</code> </p> </li> <li> <p> <code>RECORD_TYPE</code> </p> </li> <li> <p> <code>OPERATING_SYSTEM</code> </p> </li> <li> <p> <code>TENANCY</code> </p> </li> <li> <p> <code>SCOPE</code> </p> </li> <li> <p> <code>PLATFORM</code> </p> </li> <li> <p> <code>SUBSCRIPTION_ID</code> </p> </li> <li> <p> <code>LEGAL_ENTITY_NAME</code> </p> </li> <li> <p> <code>DEPLOYMENT_OPTION</code> </p> </li> <li> <p> <code>DATABASE_ENGINE</code> </p> </li> <li> <p> <code>INSTANCE_TYPE_FAMILY</code> </p> </li> <li> <p> <code>BILLING_ENTITY</code> </p> </li> <li> <p> <code>RESERVATION_ID</code> </p> </li> <li> <p> <code>SAVINGS_PLAN_ARN</code> </p> </li> </ul>"
+          "documentation":"<p>The filters that you want to use to filter your forecast. The <code>GetCostForecast</code> API supports filtering by the following dimensions:</p> <ul> <li> <p> <code>AZ</code> </p> </li> <li> <p> <code>INSTANCE_TYPE</code> </p> </li> <li> <p> <code>LINKED_ACCOUNT</code> </p> </li> <li> <p> <code>OPERATION</code> </p> </li> <li> <p> <code>PURCHASE_TYPE</code> </p> </li> <li> <p> <code>REGION</code> </p> </li> <li> <p> <code>SERVICE</code> </p> </li> <li> <p> <code>USAGE_TYPE</code> </p> </li> <li> <p> <code>USAGE_TYPE_GROUP</code> </p> </li> <li> <p> <code>RECORD_TYPE</code> </p> </li> <li> <p> <code>OPERATING_SYSTEM</code> </p> </li> <li> <p> <code>TENANCY</code> </p> </li> <li> <p> <code>SCOPE</code> </p> </li> <li> <p> <code>PLATFORM</code> </p> </li> <li> <p> <code>SUBSCRIPTION_ID</code> </p> </li> <li> <p> <code>LEGAL_ENTITY_NAME</code> </p> </li> <li> <p> <code>DEPLOYMENT_OPTION</code> </p> </li> <li> <p> <code>DATABASE_ENGINE</code> </p> </li> <li> <p> <code>INSTANCE_TYPE_FAMILY</code> </p> </li> <li> <p> <code>BILLING_ENTITY</code> </p> </li> <li> <p> <code>RESERVATION_ID</code> </p> </li> <li> <p> <code>SAVINGS_PLAN_ARN</code> </p> </li> </ul>"
         },
         "BillingViewArn":{
           "shape":"BillingViewArn",
@@ -5329,8 +5585,7 @@
     },
     "StartSavingsPlansPurchaseRecommendationGenerationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartSavingsPlansPurchaseRecommendationGenerationResponse":{
       "type":"structure",
@@ -5428,8 +5683,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValues":{
       "type":"structure",
@@ -5593,8 +5847,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UnusedHours":{"type":"string"},
     "UnusedUnits":{"type":"string"},
diff -pruN 2.23.6-1/awscli/botocore/data/chatbot/2017-10-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chatbot/2017-10-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chatbot/2017-10-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chatbot/2017-10-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime/2018-05-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -184,7 +182,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -219,7 +216,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -230,14 +226,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -251,14 +249,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -267,11 +263,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -282,14 +278,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -303,7 +301,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -323,7 +320,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -334,14 +330,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -352,9 +350,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/chime/2018-05-01/service-2.json 2.31.35-1/awscli/botocore/data/chime/2018-05-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime/2018-05-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime/2018-05-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,10 +4,12 @@
     "apiVersion":"2018-05-01",
     "endpointPrefix":"chime",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Chime",
     "serviceId":"Chime",
     "signatureVersion":"v4",
-    "uid":"chime-2018-05-01"
+    "uid":"chime-2018-05-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociatePhoneNumberWithUser":{
@@ -31,52 +33,6 @@
       ],
       "documentation":"<p>Associates a phone number with the specified Amazon Chime user.</p>"
     },
-    "AssociatePhoneNumbersWithVoiceConnector":{
-      "name":"AssociatePhoneNumbersWithVoiceConnector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}?operation=associate-phone-numbers",
-        "responseCode":200
-      },
-      "input":{"shape":"AssociatePhoneNumbersWithVoiceConnectorRequest"},
-      "output":{"shape":"AssociatePhoneNumbersWithVoiceConnectorResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Associates phone numbers with the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_AssociatePhoneNumbersWithVoiceConnector.html\">AssociatePhoneNumbersWithVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by AssociatePhoneNumbersWithVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "AssociatePhoneNumbersWithVoiceConnectorGroup":{
-      "name":"AssociatePhoneNumbersWithVoiceConnectorGroup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connector-groups/{voiceConnectorGroupId}?operation=associate-phone-numbers",
-        "responseCode":200
-      },
-      "input":{"shape":"AssociatePhoneNumbersWithVoiceConnectorGroupRequest"},
-      "output":{"shape":"AssociatePhoneNumbersWithVoiceConnectorGroupResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Associates phone numbers with the specified Amazon Chime Voice Connector group.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_AssociatePhoneNumbersWithVoiceConnectorGroup.html\">AssociatePhoneNumbersWithVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by AssociatePhoneNumbersWithVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
     "AssociateSigninDelegateGroupsWithAccount":{
       "name":"AssociateSigninDelegateGroupsWithAccount",
       "http":{
@@ -97,51 +53,6 @@
       ],
       "documentation":"<p>Associates the specified sign-in delegate groups with the specified Amazon Chime account.</p>"
     },
-    "BatchCreateAttendee":{
-      "name":"BatchCreateAttendee",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/attendees?operation=batch-create",
-        "responseCode":201
-      },
-      "input":{"shape":"BatchCreateAttendeeRequest"},
-      "output":{"shape":"BatchCreateAttendeeResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates up to 100 new attendees for an active Amazon Chime SDK meeting.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_BatchCreateAttendee.html\">BatchCreateAttendee</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important> <p>For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by BatchCreateAttendee in the Amazon Chime SDK Meetings Namespace"
-    },
-    "BatchCreateChannelMembership":{
-      "name":"BatchCreateChannelMembership",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/memberships?operation=batch-create",
-        "responseCode":200
-      },
-      "input":{"shape":"BatchCreateChannelMembershipRequest"},
-      "output":{"shape":"BatchCreateChannelMembershipResponse"},
-      "errors":[
-        {"shape":"ServiceFailureException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"}
-      ],
-      "documentation":"<p>Adds a specified number of users to a channel.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_BatchCreateChannelMembership.html\">BatchCreateChannelMembership</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by BatchCreateChannelMembership in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "BatchCreateRoomMembership":{
       "name":"BatchCreateRoomMembership",
       "http":{
@@ -282,101 +193,6 @@
       ],
       "documentation":"<p>Creates an Amazon Chime account under the administrator's AWS account. Only <code>Team</code> account types are currently supported for this action. For more information about different account types, see <a href=\"https://docs.aws.amazon.com/chime/latest/ag/manage-chime-account.html\">Managing Your Amazon Chime Accounts</a> in the <i>Amazon Chime Administration Guide</i>.</p>"
     },
-    "CreateAppInstance":{
-      "name":"CreateAppInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/app-instances",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateAppInstanceRequest"},
-      "output":{"shape":"CreateAppInstanceResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates an Amazon Chime SDK messaging <code>AppInstance</code> under an AWS account. Only SDK messaging customers use this API. <code>CreateAppInstance</code> supports idempotency behavior as described in the AWS API Standard.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_CreateAppInstance.html\">CreateAppInstance</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateAppInstance in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "CreateAppInstanceAdmin":{
-      "name":"CreateAppInstanceAdmin",
-      "http":{
-        "method":"POST",
-        "requestUri":"/app-instances/{appInstanceArn}/admins",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateAppInstanceAdminRequest"},
-      "output":{"shape":"CreateAppInstanceAdminResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Promotes an <code>AppInstanceUser</code> to an <code>AppInstanceAdmin</code>. The promoted user can perform the following actions. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_CreateAppInstanceAdmin.html\">CreateAppInstanceAdmin</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important> <ul> <li> <p> <code>ChannelModerator</code> actions across all channels in the <code>AppInstance</code>.</p> </li> <li> <p> <code>DeleteChannelMessage</code> actions.</p> </li> </ul> <p>Only an <code>AppInstanceUser</code> can be promoted to an <code>AppInstanceAdmin</code> role.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateAppInstanceAdmin in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "CreateAppInstanceUser":{
-      "name":"CreateAppInstanceUser",
-      "http":{
-        "method":"POST",
-        "requestUri":"/app-instance-users",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateAppInstanceUserRequest"},
-      "output":{"shape":"CreateAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a user under an Amazon Chime <code>AppInstance</code>. The request consists of a unique <code>appInstanceUserId</code> and <code>Name</code> for that user.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_CreateAppInstanceUser.html\">CreateAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateAppInstanceUser in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "CreateAttendee":{
-      "name":"CreateAttendee",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/attendees",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateAttendeeRequest"},
-      "output":{"shape":"CreateAttendeeResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Creates a new attendee for an active Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateAttendee.html\">CreateAttendee</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateAttendee in the Amazon Chime SDK Meetings Namespace"
-    },
     "CreateBot":{
       "name":"CreateBot",
       "http":{
@@ -398,146 +214,6 @@
       ],
       "documentation":"<p>Creates a bot for an Amazon Chime Enterprise account.</p>"
     },
-    "CreateChannel":{
-      "name":"CreateChannel",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateChannelRequest"},
-      "output":{"shape":"CreateChannelResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a channel to which you can add users and send messages.</p> <p> <b>Restriction</b>: You can't change a channel's privacy.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html\">CreateChannel</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateChannel in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "CreateChannelBan":{
-      "name":"CreateChannelBan",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/bans",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateChannelBanRequest"},
-      "output":{"shape":"CreateChannelBanResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Permanently bans a member from a channel. Moderators can't add banned members to a channel. To undo a ban, you first have to <code>DeleteChannelBan</code>, and then <code>CreateChannelMembership</code>. Bans are cleaned up when you delete users or channels.</p> <p>If you ban a user who is already part of a channel, that user is automatically kicked from the channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html\">CreateChannelBan</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateChannelBan in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "CreateChannelMembership":{
-      "name":"CreateChannelMembership",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/memberships",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateChannelMembershipRequest"},
-      "output":{"shape":"CreateChannelMembershipResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds a user to a channel. The <code>InvitedBy</code> response field is derived from the request header. A channel member can:</p> <ul> <li> <p>List messages</p> </li> <li> <p>Send messages</p> </li> <li> <p>Receive messages</p> </li> <li> <p>Edit their own messages</p> </li> <li> <p>Leave the channel</p> </li> </ul> <p>Privacy settings impact this action as follows:</p> <ul> <li> <p>Public Channels: You do not need to be a member to list messages, but you must be a member to send messages.</p> </li> <li> <p>Private Channels: You must be a member to list or send messages.</p> </li> </ul> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html\">CreateChannelMembership</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateChannelMembership in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "CreateChannelModerator":{
-      "name":"CreateChannelModerator",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/moderators",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateChannelModeratorRequest"},
-      "output":{"shape":"CreateChannelModeratorResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a new <code>ChannelModerator</code>. A channel moderator can:</p> <ul> <li> <p>Add and remove other members of the channel.</p> </li> <li> <p>Add and remove other moderators of the channel.</p> </li> <li> <p>Add and remove user bans for the channel.</p> </li> <li> <p>Redact messages in the channel.</p> </li> <li> <p>List messages in the channel.</p> </li> </ul> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelModerator.html\">CreateChannelModerator</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateChannelModerator in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "CreateMediaCapturePipeline":{
-      "name":"CreateMediaCapturePipeline",
-      "http":{
-        "method":"POST",
-        "requestUri":"/media-capture-pipelines",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateMediaCapturePipelineRequest"},
-      "output":{"shape":"CreateMediaCapturePipelineResponse"},
-      "errors":[
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a media capture pipeline.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaCapturePipeline\">CreateMediaCapturePipeline</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateMediaCapturePipeline in the Amazon Chime SDK Media Pipelines Namespace"
-    },
-    "CreateMeeting":{
-      "name":"CreateMeeting",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateMeetingRequest"},
-      "output":{"shape":"CreateMeetingResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a new Amazon Chime SDK meeting in the specified media Region with no initial attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html\">Amazon Chime SDK Media Regions</a> in the <i>Amazon Chime SDK Developer Guide</i> . For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html\">CreateMeeting</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateMeeting in the Amazon Chime SDK Meetings Namespace"
-    },
     "CreateMeetingDialOut":{
       "name":"CreateMeetingDialOut",
       "http":{
@@ -557,29 +233,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Uses the join token and call metadata in a meeting request (From number, To number, and so forth) to initiate an outbound call to a public switched telephone network (PSTN) and join them into a Chime meeting. Also ensures that the From number belongs to the customer.</p> <p>To play welcome audio or implement an interactive voice response (IVR), use the <code>CreateSipMediaApplicationCall</code> action with the corresponding SIP media application ID.</p> <important> <p> <b>This API is is not available in a dedicated namespace.</b> </p> </important>"
-    },
-    "CreateMeetingWithAttendees":{
-      "name":"CreateMeetingWithAttendees",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings?operation=create-attendees",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateMeetingWithAttendeesRequest"},
-      "output":{"shape":"CreateMeetingWithAttendeesResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Creates a new Amazon Chime SDK meeting in the specified media Region, with attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html\">Amazon Chime SDK Media Regions</a> in the <i>Amazon Chime SDK Developer Guide</i> . For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i> . </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeetingWithAttendees.html\">CreateMeetingWithAttendees</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateMeetingWithAttendees in the Amazon Chime SDK Meetings Namespace"
+      "documentation":"<p>Uses the join token and call metadata in a meeting request (From number, To number, and so forth) to initiate an outbound call to a public switched telephone network (PSTN) and join them into a Chime meeting. Also ensures that the From number belongs to the customer.</p> <p>To play welcome audio or implement an interactive voice response (IVR), use the <code>CreateSipMediaApplicationCall</code> action with the corresponding SIP media application ID.</p> <important> <p> <b>This API is not available in a dedicated namespace.</b> </p> </important>"
     },
     "CreatePhoneNumberOrder":{
       "name":"CreatePhoneNumberOrder",
@@ -602,28 +256,6 @@
       ],
       "documentation":"<p>Creates an order for phone numbers to be provisioned. For toll-free numbers, you cannot use the Amazon Chime Business Calling product type. For numbers outside the U.S., you must use the Amazon Chime SIP Media Application Dial-In product type.</p>"
     },
-    "CreateProxySession":{
-      "name":"CreateProxySession",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/proxy-sessions",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateProxySessionRequest"},
-      "output":{"shape":"CreateProxySessionResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a proxy session on the specified Amazon Chime Voice Connector for the specified participant phone numbers.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateProxySession.html\">CreateProxySession</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateProxySession in the Amazon Chime SDK Voice Namespace"
-    },
     "CreateRoom":{
       "name":"CreateRoom",
       "http":{
@@ -667,77 +299,6 @@
       ],
       "documentation":"<p>Adds a member to a chat room in an Amazon Chime Enterprise account. A member can be either a user or a bot. The member role designates whether the member is a chat room administrator or a general chat room member.</p>"
     },
-    "CreateSipMediaApplication":{
-      "name":"CreateSipMediaApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/sip-media-applications",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateSipMediaApplicationRequest"},
-      "output":{"shape":"CreateSipMediaApplicationResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ConflictException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a SIP media application.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateSipMediaApplication.html\">CreateSipMediaApplication</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateSipMediaApplication in the Amazon Chime SDK Voice Namespace"
-    },
-    "CreateSipMediaApplicationCall":{
-      "name":"CreateSipMediaApplicationCall",
-      "http":{
-        "method":"POST",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}/calls",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateSipMediaApplicationCallRequest"},
-      "output":{"shape":"CreateSipMediaApplicationCallResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates an outbound call to a phone number from the phone number specified in the request, and it invokes the endpoint of the specified <code>sipMediaApplicationId</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateSipMediaApplicationCall.html\">CreateSipMediaApplicationCall</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateSipMediaApplicationCall in the Amazon Chime SDK Voice Namespace"
-    },
-    "CreateSipRule":{
-      "name":"CreateSipRule",
-      "http":{
-        "method":"POST",
-        "requestUri":"/sip-rules",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateSipRuleRequest"},
-      "output":{"shape":"CreateSipRuleResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ConflictException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates a SIP rule which can be used to run a SIP media application as a target for a specific trigger type.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateSipRule.html\">CreateSipRule</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateSipRule in the Amazon Chime SDK Voice Namespace"
-    },
     "CreateUser":{
       "name":"CreateUser",
       "http":{
@@ -759,52 +320,6 @@
       ],
       "documentation":"<p>Creates a user under the specified Amazon Chime account.</p>"
     },
-    "CreateVoiceConnector":{
-      "name":"CreateVoiceConnector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateVoiceConnectorRequest"},
-      "output":{"shape":"CreateVoiceConnectorResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates an Amazon Chime Voice Connector under the administrator's AWS account. You can choose to create an Amazon Chime Voice Connector in a specific AWS Region.</p> <p>Enabling <a>CreateVoiceConnectorRequest$RequireEncryption</a> configures your Amazon Chime Voice Connector to use TLS transport for SIP signaling and Secure RTP (SRTP) for media. Inbound calls use TLS transport, and unencrypted outbound calls are blocked. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceConnector.html\">CreateVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "CreateVoiceConnectorGroup":{
-      "name":"CreateVoiceConnectorGroup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connector-groups",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateVoiceConnectorGroupRequest"},
-      "output":{"shape":"CreateVoiceConnectorGroupResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Creates an Amazon Chime Voice Connector group under the administrator's AWS account. You can associate Amazon Chime Voice Connectors with the Amazon Chime Voice Connector group by including <code>VoiceConnectorItems</code> in the request.</p> <p>You can include Amazon Chime Voice Connectors from different AWS Regions in your group. This creates a fault tolerant mechanism for fallback in case of availability events.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceConnectorGroup.html\">CreateVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by CreateVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
     "DeleteAccount":{
       "name":"DeleteAccount",
       "http":{
@@ -826,218 +341,6 @@
       ],
       "documentation":"<p>Deletes the specified Amazon Chime account. You must suspend all users before deleting <code>Team</code> account. You can use the <a>BatchSuspendUser</a> action to dodo.</p> <p>For <code>EnterpriseLWA</code> and <code>EnterpriseAD</code> accounts, you must release the claimed domains for your Amazon Chime account before deletion. As soon as you release the domain, all users under that account are suspended.</p> <p>Deleted accounts appear in your <code>Disabled</code> accounts list for 90 days. To restore deleted account from your <code>Disabled</code> accounts list, you must contact AWS Support.</p> <p>After 90 days, deleted accounts are permanently removed from your <code>Disabled</code> accounts list.</p>"
     },
-    "DeleteAppInstance":{
-      "name":"DeleteAppInstance",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/app-instances/{appInstanceArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteAppInstanceRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes an <code>AppInstance</code> and all associated data asynchronously.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DeleteAppInstance.html\">DeleteAppInstance</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteAppInstance in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DeleteAppInstanceAdmin":{
-      "name":"DeleteAppInstanceAdmin",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/app-instances/{appInstanceArn}/admins/{appInstanceAdminArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteAppInstanceAdminRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Demotes an <code>AppInstanceAdmin</code> to an <code>AppInstanceUser</code>. This action does not delete the user.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DeleteAppInstanceAdmin.html\">DeleteAppInstanceAdmin</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteAppInstanceAdmin in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DeleteAppInstanceStreamingConfigurations":{
-      "name":"DeleteAppInstanceStreamingConfigurations",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/app-instances/{appInstanceArn}/streaming-configurations",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteAppInstanceStreamingConfigurationsRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the streaming configurations of an <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DeleteAppInstanceStreamingConfigurations.html\">DeleteAppInstanceStreamingConfigurations</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteAppInstanceStreamingConfigurations in the Amazon Chime SDK Messaging Namespace"
-    },
-    "DeleteAppInstanceUser":{
-      "name":"DeleteAppInstanceUser",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/app-instance-users/{appInstanceUserArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteAppInstanceUserRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes an <code>AppInstanceUser</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DeleteAppInstanceUser.html\">DeleteAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteAppInstanceUser in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DeleteAttendee":{
-      "name":"DeleteAttendee",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/meetings/{meetingId}/attendees/{attendeeId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteAttendeeRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes an attendee from the specified Amazon Chime SDK meeting and deletes their <code>JoinToken</code>. Attendees are automatically deleted when a Amazon Chime SDK meeting is deleted. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteAttendee.html\">DeleteAttendee</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteAttendee in the Amazon Chime SDK Meetings Namespace"
-    },
-    "DeleteChannel":{
-      "name":"DeleteChannel",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/channels/{channelArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteChannelRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Immediately makes a channel and its memberships inaccessible and marks them for deletion. This is an irreversible process.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannel.html\">DeleteChannel</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteChannel in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DeleteChannelBan":{
-      "name":"DeleteChannelBan",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/channels/{channelArn}/bans/{memberArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteChannelBanRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Removes a user from a channel's ban list.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelBan.html\">DeleteChannelBan</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteChannelBan in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DeleteChannelMembership":{
-      "name":"DeleteChannelMembership",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/channels/{channelArn}/memberships/{memberArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteChannelMembershipRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Removes a member from a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMembership.html\">DeleteChannelMembership</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteChannelMembership in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DeleteChannelMessage":{
-      "name":"DeleteChannelMessage",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/channels/{channelArn}/messages/{messageId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteChannelMessageRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes a channel message. Only admins can perform this action. Deletion makes messages inaccessible immediately. A background process deletes any revisions created by <code>UpdateChannelMessage</code>.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMessage.html\">DeleteChannelMessage</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteChannelMessage in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DeleteChannelModerator":{
-      "name":"DeleteChannelModerator",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/channels/{channelArn}/moderators/{channelModeratorArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteChannelModeratorRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes a channel moderator.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelModerator.html\">DeleteChannelModerator</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteChannelModerator in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "DeleteEventsConfiguration":{
       "name":"DeleteEventsConfiguration",
       "http":{
@@ -1056,48 +359,6 @@
       ],
       "documentation":"<p>Deletes the events configuration that allows a bot to receive outgoing events.</p>"
     },
-    "DeleteMediaCapturePipeline":{
-      "name":"DeleteMediaCapturePipeline",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/media-capture-pipelines/{mediaPipelineId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteMediaCapturePipelineRequest"},
-      "errors":[
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the media capture pipeline.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaCapturePipeline.html\">DeleteMediaCapturePipeline</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteMediaCapturePipeline in the Amazon Chime SDK Media Pipelines Namespace"
-    },
-    "DeleteMeeting":{
-      "name":"DeleteMeeting",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/meetings/{meetingId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteMeetingRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the specified Amazon Chime SDK meeting. The operation deletes all attendees, disconnects all clients, and prevents new clients from joining the meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteMeeting.html\">DeleteMeeting</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteMeeting in the Amazon Chime SDK Meetings Namespace"
-    },
     "DeletePhoneNumber":{
       "name":"DeletePhoneNumber",
       "http":{
@@ -1117,27 +378,6 @@
       ],
       "documentation":"<p>Moves the specified phone number into the <b>Deletion queue</b>. A phone number must be disassociated from any users or Amazon Chime Voice Connectors before it can be deleted.</p> <p>Deleted phone numbers remain in the <b>Deletion queue</b> for 7 days before they are deleted permanently.</p>"
     },
-    "DeleteProxySession":{
-      "name":"DeleteProxySession",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/proxy-sessions/{proxySessionId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteProxySessionRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the specified proxy session from the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteProxySession.html\">DeleteProxySession</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteProxySession in the Amazon Chime SDK Voice Namespace"
-    },
     "DeleteRoom":{
       "name":"DeleteRoom",
       "http":{
@@ -1176,421 +416,6 @@
       ],
       "documentation":"<p>Removes a member from a chat room in an Amazon Chime Enterprise account.</p>"
     },
-    "DeleteSipMediaApplication":{
-      "name":"DeleteSipMediaApplication",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteSipMediaApplicationRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes a SIP media application.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteSipMediaApplication.html\">DeleteSipMediaApplication</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteSipMediaApplication in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteSipRule":{
-      "name":"DeleteSipRule",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/sip-rules/{sipRuleId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteSipRuleRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes a SIP rule. You must disable a SIP rule before you can delete it.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteSipRule.html\">DeleteSipRule</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteSipRule in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnector":{
-      "name":"DeleteVoiceConnector",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the specified Amazon Chime Voice Connector. Any phone numbers associated with the Amazon Chime Voice Connector must be disassociated from it before it can be deleted.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnector.html\">DeleteVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorEmergencyCallingConfiguration":{
-      "name":"DeleteVoiceConnectorEmergencyCallingConfiguration",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/emergency-calling-configuration",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorEmergencyCallingConfigurationRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the emergency calling configuration details from the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorEmergencyCallingConfiguration.html\">DeleteVoiceConnectorEmergencyCallingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorEmergencyCallingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorGroup":{
-      "name":"DeleteVoiceConnectorGroup",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connector-groups/{voiceConnectorGroupId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorGroupRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the specified Amazon Chime Voice Connector group. Any <code>VoiceConnectorItems</code> and phone numbers associated with the group must be removed before it can be deleted.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorGroup.html\">DeleteVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorOrigination":{
-      "name":"DeleteVoiceConnectorOrigination",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/origination",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorOriginationRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the origination settings for the specified Amazon Chime Voice Connector.</p> <note> <p>If emergency calling is configured for the Amazon Chime Voice Connector, it must be deleted prior to deleting the origination settings.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorOrigination.html\">DeleteVoiceConnectorOrigination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorOrigination in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorProxy":{
-      "name":"DeleteVoiceConnectorProxy",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/programmable-numbers/proxy",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorProxyRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the proxy configuration from the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorProxy.html\">DeleteVoiceProxy</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorProxy in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorStreamingConfiguration":{
-      "name":"DeleteVoiceConnectorStreamingConfiguration",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/streaming-configuration",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorStreamingConfigurationRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the streaming configuration for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorStreamingConfiguration.html\">DeleteVoiceConnectorStreamingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorStreamingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorTermination":{
-      "name":"DeleteVoiceConnectorTermination",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorTerminationRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the termination settings for the specified Amazon Chime Voice Connector.</p> <note> <p>If emergency calling is configured for the Amazon Chime Voice Connector, it must be deleted prior to deleting the termination settings.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorTermination.html\">DeleteVoiceConnectorTermination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorTermination in the Amazon Chime SDK Voice Namespace"
-    },
-    "DeleteVoiceConnectorTerminationCredentials":{
-      "name":"DeleteVoiceConnectorTerminationCredentials",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination/credentials?operation=delete",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteVoiceConnectorTerminationCredentialsRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Deletes the specified SIP credentials used by your equipment to authenticate during call termination.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceConnectorTerminationCredentials.html\">DeleteVoiceConnectorTerminationCredentials</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DeleteVoiceConnectorTerminationCredentials in the Amazon Chime SDK Voice Namespace"
-    },
-    "DescribeAppInstance":{
-      "name":"DescribeAppInstance",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances/{appInstanceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeAppInstanceRequest"},
-      "output":{"shape":"DescribeAppInstanceResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of an <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DescribeAppInstance.html\">DescribeAppInstance</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeAppInstance in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DescribeAppInstanceAdmin":{
-      "name":"DescribeAppInstanceAdmin",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances/{appInstanceArn}/admins/{appInstanceAdminArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeAppInstanceAdminRequest"},
-      "output":{"shape":"DescribeAppInstanceAdminResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of an <code>AppInstanceAdmin</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DescribeAppInstanceAdmin.html\">DescribeAppInstanceAdmin</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeAppInstanceAdmin in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DescribeAppInstanceUser":{
-      "name":"DescribeAppInstanceUser",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instance-users/{appInstanceUserArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeAppInstanceUserRequest"},
-      "output":{"shape":"DescribeAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of an <code>AppInstanceUser</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_DescribeAppInstanceUser.html\">DescribeAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeAppInstanceUser in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "DescribeChannel":{
-      "name":"DescribeChannel",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelRequest"},
-      "output":{"shape":"DescribeChannelResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of a channel in an Amazon Chime <code>AppInstance</code>.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannel.html\">DescribeChannel</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannel in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DescribeChannelBan":{
-      "name":"DescribeChannelBan",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/bans/{memberArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelBanRequest"},
-      "output":{"shape":"DescribeChannelBanResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of a channel ban.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannelBan.html\">DescribeChannelBan</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannelBan in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DescribeChannelMembership":{
-      "name":"DescribeChannelMembership",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/memberships/{memberArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelMembershipRequest"},
-      "output":{"shape":"DescribeChannelMembershipResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of a user's channel membership.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannelMembership.html\">DescribeChannelMembership</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannelMembership in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DescribeChannelMembershipForAppInstanceUser":{
-      "name":"DescribeChannelMembershipForAppInstanceUser",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}?scope=app-instance-user-membership",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelMembershipForAppInstanceUserRequest"},
-      "output":{"shape":"DescribeChannelMembershipForAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Returns the details of a channel based on the membership of the specified <code>AppInstanceUser</code>.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannelMembershipForAppInstanceUser.html\">DescribeChannelMembershipForAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannelMembershipForAppInstanceUser in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DescribeChannelModeratedByAppInstanceUser":{
-      "name":"DescribeChannelModeratedByAppInstanceUser",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}?scope=app-instance-user-moderated-channel",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelModeratedByAppInstanceUserRequest"},
-      "output":{"shape":"DescribeChannelModeratedByAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of a channel moderated by the specified <code>AppInstanceUser</code>.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannelModeratedByAppInstanceUser.html\">DescribeChannelModeratedByAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannelModeratedByAppInstanceUser in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "DescribeChannelModerator":{
-      "name":"DescribeChannelModerator",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/moderators/{channelModeratorArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeChannelModeratorRequest"},
-      "output":{"shape":"DescribeChannelModeratorResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the full details of a single ChannelModerator.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DescribeChannelModerator.html\">DescribeChannelModerator</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DescribeChannelModerator in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "DisassociatePhoneNumberFromUser":{
       "name":"DisassociatePhoneNumberFromUser",
       "http":{
@@ -1611,50 +436,6 @@
       ],
       "documentation":"<p>Disassociates the primary provisioned phone number from the specified Amazon Chime user.</p>"
     },
-    "DisassociatePhoneNumbersFromVoiceConnector":{
-      "name":"DisassociatePhoneNumbersFromVoiceConnector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}?operation=disassociate-phone-numbers",
-        "responseCode":200
-      },
-      "input":{"shape":"DisassociatePhoneNumbersFromVoiceConnectorRequest"},
-      "output":{"shape":"DisassociatePhoneNumbersFromVoiceConnectorResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Disassociates the specified phone numbers from the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DisassociatePhoneNumbersFromVoiceConnector.html\">DisassociatePhoneNumbersFromVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DisassociatePhoneNumbersFromVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "DisassociatePhoneNumbersFromVoiceConnectorGroup":{
-      "name":"DisassociatePhoneNumbersFromVoiceConnectorGroup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connector-groups/{voiceConnectorGroupId}?operation=disassociate-phone-numbers",
-        "responseCode":200
-      },
-      "input":{"shape":"DisassociatePhoneNumbersFromVoiceConnectorGroupRequest"},
-      "output":{"shape":"DisassociatePhoneNumbersFromVoiceConnectorGroupResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Disassociates the specified phone numbers from the specified Amazon Chime Voice Connector group.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DisassociatePhoneNumbersFromVoiceConnectorGroup.html\">DisassociatePhoneNumbersFromVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by DisassociatePhoneNumbersFromVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
     "DisassociateSigninDelegateGroupsFromAccount":{
       "name":"DisassociateSigninDelegateGroupsFromAccount",
       "http":{
@@ -1713,73 +494,6 @@
       ],
       "documentation":"<p>Retrieves account settings for the specified Amazon Chime account ID, such as remote control and dialout settings. For more information about these settings, see <a href=\"https://docs.aws.amazon.com/chime/latest/ag/policies.html\">Use the Policies Page</a> in the <i>Amazon Chime Administration Guide</i>. </p>"
     },
-    "GetAppInstanceRetentionSettings":{
-      "name":"GetAppInstanceRetentionSettings",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances/{appInstanceArn}/retention-settings",
-        "responseCode":200
-      },
-      "input":{"shape":"GetAppInstanceRetentionSettingsRequest"},
-      "output":{"shape":"GetAppInstanceRetentionSettingsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the retention settings for an <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_GetAppInstanceRetentionSettings.html\">GetMessagingRetentionSettings</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetAppInstanceRetentionSettings in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "GetAppInstanceStreamingConfigurations":{
-      "name":"GetAppInstanceStreamingConfigurations",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances/{appInstanceArn}/streaming-configurations",
-        "responseCode":200
-      },
-      "input":{"shape":"GetAppInstanceStreamingConfigurationsRequest"},
-      "output":{"shape":"GetAppInstanceStreamingConfigurationsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the streaming settings for an <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingStreamingConfigurations.html\">GetMessagingStreamingConfigurations</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetAppInstanceStreamingConfigurations in the Amazon Chime SDK Messaging Namespace"
-    },
-    "GetAttendee":{
-      "name":"GetAttendee",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings/{meetingId}/attendees/{attendeeId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetAttendeeRequest"},
-      "output":{"shape":"GetAttendeeResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Gets the Amazon Chime SDK attendee details for a specified meeting ID and attendee ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_GetAttendee.html\">GetAttendee</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetAttendee in the Amazon Chime SDK Meetings Namespace"
-    },
     "GetBot":{
       "name":"GetBot",
       "http":{
@@ -1800,29 +514,6 @@
       ],
       "documentation":"<p>Retrieves details for the specified bot, such as bot email address, bot type, status, and display name.</p>"
     },
-    "GetChannelMessage":{
-      "name":"GetChannelMessage",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/messages/{messageId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetChannelMessageRequest"},
-      "output":{"shape":"GetChannelMessageResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the full details of a channel message.</p> <note> <p>The x-amz-chime-bearer request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetChannelMessage.html\">GetChannelMessage</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetChannelMessage in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "GetEventsConfiguration":{
       "name":"GetEventsConfiguration",
       "http":{
@@ -1861,71 +552,6 @@
       ],
       "documentation":"<p>Retrieves global settings for the administrator's AWS account, such as Amazon Chime Business Calling and Amazon Chime Voice Connector settings.</p>"
     },
-    "GetMediaCapturePipeline":{
-      "name":"GetMediaCapturePipeline",
-      "http":{
-        "method":"GET",
-        "requestUri":"/media-capture-pipelines/{mediaPipelineId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetMediaCapturePipelineRequest"},
-      "output":{"shape":"GetMediaCapturePipelineResponse"},
-      "errors":[
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets an existing media capture pipeline.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaCapturePipeline.html\">GetMediaCapturePipeline</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetMediaCapturePipeline in the Amazon Chime SDK Media Pipelines Namespace"
-    },
-    "GetMeeting":{
-      "name":"GetMeeting",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings/{meetingId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetMeetingRequest"},
-      "output":{"shape":"GetMeetingResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_GetMeeting.html\">GetMeeting</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important> <p> Gets the Amazon Chime SDK meeting details for the specified meeting ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i> . </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetMeeting in the Amazon Chime SDK Meetings Namespace"
-    },
-    "GetMessagingSessionEndpoint":{
-      "name":"GetMessagingSessionEndpoint",
-      "http":{
-        "method":"GET",
-        "requestUri":"/endpoints/messaging-session",
-        "responseCode":200
-      },
-      "input":{"shape":"GetMessagingSessionEndpointRequest"},
-      "output":{"shape":"GetMessagingSessionEndpointResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>The details of the endpoint for the messaging session.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_GetMessagingSessionEndpoint.html\">GetMessagingSessionEndpoint</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetMessagingSessionEndpoint in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "GetPhoneNumber":{
       "name":"GetPhoneNumber",
       "http":{
@@ -1983,28 +609,6 @@
       ],
       "documentation":"<p>Retrieves the phone number settings for the administrator's AWS account, such as the default outbound calling name.</p>"
     },
-    "GetProxySession":{
-      "name":"GetProxySession",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/proxy-sessions/{proxySessionId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetProxySessionRequest"},
-      "output":{"shape":"GetProxySessionResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the specified proxy session details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetProxySession.html\">GetProxySession</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetProxySession in the Amazon Chime SDK Voice Namespace"
-    },
     "GetRetentionSettings":{
       "name":"GetRetentionSettings",
       "http":{
@@ -2044,72 +648,6 @@
       ],
       "documentation":"<p>Retrieves room details, such as the room name, for a room in an Amazon Chime Enterprise account.</p>"
     },
-    "GetSipMediaApplication":{
-      "name":"GetSipMediaApplication",
-      "http":{
-        "method":"GET",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetSipMediaApplicationRequest"},
-      "output":{"shape":"GetSipMediaApplicationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves the information for a SIP media application, including name, AWS Region, and endpoints.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSipMediaApplication.html\">GetSipMediaApplication</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetSipMediaApplication in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetSipMediaApplicationLoggingConfiguration":{
-      "name":"GetSipMediaApplicationLoggingConfiguration",
-      "http":{
-        "method":"GET",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}/logging-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"GetSipMediaApplicationLoggingConfigurationRequest"},
-      "output":{"shape":"GetSipMediaApplicationLoggingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns the logging configuration for the specified SIP media application.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSipMediaApplicationLoggingConfiguration.html\">GetSipMediaApplicationLoggingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetSipMediaApplicationLoggingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetSipRule":{
-      "name":"GetSipRule",
-      "http":{
-        "method":"GET",
-        "requestUri":"/sip-rules/{sipRuleId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetSipRuleRequest"},
-      "output":{"shape":"GetSipRuleResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves the details of a SIP rule, such as the rule ID, name, triggers, and target endpoints.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSipRule.html\">GetSipRule</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetSipRule in the Amazon Chime SDK Voice Namespace"
-    },
     "GetUser":{
       "name":"GetUser",
       "http":{
@@ -2150,204 +688,6 @@
       ],
       "documentation":"<p>Retrieves settings for the specified user ID, such as any associated phone number settings.</p>"
     },
-    "GetVoiceConnector":{
-      "name":"GetVoiceConnector",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorRequest"},
-      "output":{"shape":"GetVoiceConnectorResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves details for the specified Amazon Chime Voice Connector, such as timestamps,name, outbound host, and encryption requirements.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnector.html\">GetVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorEmergencyCallingConfiguration":{
-      "name":"GetVoiceConnectorEmergencyCallingConfiguration",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/emergency-calling-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorEmergencyCallingConfigurationRequest"},
-      "output":{"shape":"GetVoiceConnectorEmergencyCallingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the emergency calling configuration details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorEmergencyCallingConfiguration.html\">GetVoiceConnectorEmergencyCallingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorEmergencyCallingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorGroup":{
-      "name":"GetVoiceConnectorGroup",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connector-groups/{voiceConnectorGroupId}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorGroupRequest"},
-      "output":{"shape":"GetVoiceConnectorGroupResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Retrieves details for the specified Amazon Chime Voice Connector group, such as timestamps,name, and associated <code>VoiceConnectorItems</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorGroup.html\">GetVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorLoggingConfiguration":{
-      "name":"GetVoiceConnectorLoggingConfiguration",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/logging-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorLoggingConfigurationRequest"},
-      "output":{"shape":"GetVoiceConnectorLoggingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves the logging configuration details for the specified Amazon Chime Voice Connector. Shows whether SIP message logs are enabled for sending to Amazon CloudWatch Logs.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorLoggingConfiguration.html\">GetVoiceConnectorLoggingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorLoggingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorOrigination":{
-      "name":"GetVoiceConnectorOrigination",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/origination",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorOriginationRequest"},
-      "output":{"shape":"GetVoiceConnectorOriginationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves origination setting details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorOrigination.html\">GetVoiceConnectorOrigination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorOrigination in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorProxy":{
-      "name":"GetVoiceConnectorProxy",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/programmable-numbers/proxy",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorProxyRequest"},
-      "output":{"shape":"GetVoiceConnectorProxyResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Gets the proxy configuration details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorProxy.html\">GetVoiceConnectorProxy</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorProxy in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorStreamingConfiguration":{
-      "name":"GetVoiceConnectorStreamingConfiguration",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/streaming-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorStreamingConfigurationRequest"},
-      "output":{"shape":"GetVoiceConnectorStreamingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves the streaming configuration details for the specified Amazon Chime Voice Connector. Shows whether media streaming is enabled for sending to Amazon Kinesis. It also shows the retention period, in hours, for the Amazon Kinesis data.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorStreamingConfiguration.html\">GetVoiceConnectorStreamingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorStreamingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorTermination":{
-      "name":"GetVoiceConnectorTermination",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorTerminationRequest"},
-      "output":{"shape":"GetVoiceConnectorTerminationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Retrieves termination setting details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorTermination.html\">GetVoiceConnectorTermination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorTermination in the Amazon Chime SDK Voice Namespace"
-    },
-    "GetVoiceConnectorTerminationHealth":{
-      "name":"GetVoiceConnectorTerminationHealth",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination/health",
-        "responseCode":200
-      },
-      "input":{"shape":"GetVoiceConnectorTerminationHealthRequest"},
-      "output":{"shape":"GetVoiceConnectorTerminationHealthResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceConnectorTerminationHealth.html\">GetVoiceConnectorTerminationHealth</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important> <p>Retrieves information about the last time a SIP <code>OPTIONS</code> ping was received from your SIP infrastructure for the specified Amazon Chime Voice Connector.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by GetVoiceConnectorTerminationHealth in the Amazon Chime SDK Voice Namespace"
-    },
     "InviteUsers":{
       "name":"InviteUsers",
       "http":{
@@ -2387,116 +727,6 @@
       ],
       "documentation":"<p>Lists the Amazon Chime accounts under the administrator's AWS account. You can filter accounts by account name prefix. To find out which Amazon Chime account a user belongs to, you can filter by the user's email address, which returns one account result.</p>"
     },
-    "ListAppInstanceAdmins":{
-      "name":"ListAppInstanceAdmins",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances/{appInstanceArn}/admins",
-        "responseCode":200
-      },
-      "input":{"shape":"ListAppInstanceAdminsRequest"},
-      "output":{"shape":"ListAppInstanceAdminsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns a list of the administrators in the <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_ListAppInstanceAdmins.html\">ListAppInstanceAdmins</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListAppInstanceAdmins in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "ListAppInstanceUsers":{
-      "name":"ListAppInstanceUsers",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instance-users",
-        "responseCode":200
-      },
-      "input":{"shape":"ListAppInstanceUsersRequest"},
-      "output":{"shape":"ListAppInstanceUsersResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>List all <code>AppInstanceUsers</code> created under a single <code>AppInstance</code>. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_ListAppInstanceUsers.html\">ListAppInstanceUsers</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListAppInstanceUsers in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "ListAppInstances":{
-      "name":"ListAppInstances",
-      "http":{
-        "method":"GET",
-        "requestUri":"/app-instances",
-        "responseCode":200
-      },
-      "input":{"shape":"ListAppInstancesRequest"},
-      "output":{"shape":"ListAppInstancesResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists all Amazon Chime <code>AppInstance</code>s created under a single AWS account.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_ListAppInstances.html\">ListAppInstances</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListAppInstances in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "ListAttendeeTags":{
-      "name":"ListAttendeeTags",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings/{meetingId}/attendees/{attendeeId}/tags",
-        "responseCode":200
-      },
-      "input":{"shape":"ListAttendeeTagsRequest"},
-      "output":{"shape":"ListAttendeeTagsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the tags applied to an Amazon Chime SDK attendee resource.</p> <important> <p>ListAttendeeTags is not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Attendee Tags are not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API."
-    },
-    "ListAttendees":{
-      "name":"ListAttendees",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings/{meetingId}/attendees",
-        "responseCode":200
-      },
-      "input":{"shape":"ListAttendeesRequest"},
-      "output":{"shape":"ListAttendeesResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Lists the attendees for the specified Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_ListAttendees.html\">ListAttendees</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListAttendees in the Amazon Chime SDK Meetings Namespace"
-    },
     "ListBots":{
       "name":"ListBots",
       "http":{
@@ -2517,224 +747,6 @@
       ],
       "documentation":"<p>Lists the bots associated with the administrator's Amazon Chime Enterprise account ID.</p>"
     },
-    "ListChannelBans":{
-      "name":"ListChannelBans",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/bans",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelBansRequest"},
-      "output":{"shape":"ListChannelBansResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists all the users banned from a particular channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelBans.html\">ListChannelBans</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelBans in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannelMemberships":{
-      "name":"ListChannelMemberships",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/memberships",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelMembershipsRequest"},
-      "output":{"shape":"ListChannelMembershipsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists all channel memberships in a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMemberships.html\">ListChannelMemberships</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelMemberships in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannelMembershipsForAppInstanceUser":{
-      "name":"ListChannelMembershipsForAppInstanceUser",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels?scope=app-instance-user-memberships",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelMembershipsForAppInstanceUserRequest"},
-      "output":{"shape":"ListChannelMembershipsForAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p> Lists all channels that a particular <code>AppInstanceUser</code> is a part of. Only an <code>AppInstanceAdmin</code> can call the API with a user ARN that is not their own. </p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMembershipsForAppInstanceUser.html\">ListChannelMembershipsForAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelMembershipsForAppInstanceUser in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannelMessages":{
-      "name":"ListChannelMessages",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/messages",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelMessagesRequest"},
-      "output":{"shape":"ListChannelMessagesResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>List all the messages in a channel. Returns a paginated list of <code>ChannelMessages</code>. By default, sorted by creation timestamp in descending order.</p> <note> <p>Redacted messages appear in the results as empty, since they are only redacted, not deleted. Deleted messages do not appear in the results. This action always returns the latest version of an edited message.</p> <p>Also, the x-amz-chime-bearer request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMessages.html\">ListChannelMessages</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelMessages in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannelModerators":{
-      "name":"ListChannelModerators",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels/{channelArn}/moderators",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelModeratorsRequest"},
-      "output":{"shape":"ListChannelModeratorsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists all the moderators for a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelModerators.html\">ListChannelModerators</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelModerators in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannels":{
-      "name":"ListChannels",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelsRequest"},
-      "output":{"shape":"ListChannelsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists all Channels created under a single Chime App as a paginated list. You can specify filters to narrow results.</p> <p class=\"title\"> <b>Functionality &amp; restrictions</b> </p> <ul> <li> <p>Use privacy = <code>PUBLIC</code> to retrieve all public channels in the account.</p> </li> <li> <p>Only an <code>AppInstanceAdmin</code> can set privacy = <code>PRIVATE</code> to list the private channels in an account.</p> </li> </ul> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannels.html\">ListChannels</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannels in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListChannelsModeratedByAppInstanceUser":{
-      "name":"ListChannelsModeratedByAppInstanceUser",
-      "http":{
-        "method":"GET",
-        "requestUri":"/channels?scope=app-instance-user-moderated-channels",
-        "responseCode":200
-      },
-      "input":{"shape":"ListChannelsModeratedByAppInstanceUserRequest"},
-      "output":{"shape":"ListChannelsModeratedByAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>A list of the channels moderated by an <code>AppInstanceUser</code>.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelsModeratedByAppInstanceUser.html\">ListChannelsModeratedByAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListChannelsModeratedByAppInstanceUser in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "ListMediaCapturePipelines":{
-      "name":"ListMediaCapturePipelines",
-      "http":{
-        "method":"GET",
-        "requestUri":"/media-capture-pipelines",
-        "responseCode":200
-      },
-      "input":{"shape":"ListMediaCapturePipelinesRequest"},
-      "output":{"shape":"ListMediaCapturePipelinesResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Returns a list of media capture pipelines.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_ListMediaCapturePipelines.html\">ListMediaCapturePipelines</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListMediaCapturePipelines in the Amazon Chime SDK Media Pipelines Namespace"
-    },
-    "ListMeetingTags":{
-      "name":"ListMeetingTags",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings/{meetingId}/tags",
-        "responseCode":200
-      },
-      "input":{"shape":"ListMeetingTagsRequest"},
-      "output":{"shape":"ListMeetingTagsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the tags applied to an Amazon Chime SDK meeting resource.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_ListTagsForResource.html\">ListTagsForResource</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Use ListTagsForResource in the Amazon Chime SDK Meetings Namespace."
-    },
-    "ListMeetings":{
-      "name":"ListMeetings",
-      "http":{
-        "method":"GET",
-        "requestUri":"/meetings",
-        "responseCode":200
-      },
-      "input":{"shape":"ListMeetingsRequest"},
-      "output":{"shape":"ListMeetingsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists up to 100 active Amazon Chime SDK meetings.</p> <important> <p>ListMeetings is not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API.</p> </important> <p>For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"ListMeetings is not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API."
-    },
     "ListPhoneNumberOrders":{
       "name":"ListPhoneNumberOrders",
       "http":{
@@ -2773,28 +785,6 @@
       ],
       "documentation":"<p>Lists the phone numbers for the specified Amazon Chime account, Amazon Chime user, Amazon Chime Voice Connector, or Amazon Chime Voice Connector group.</p>"
     },
-    "ListProxySessions":{
-      "name":"ListProxySessions",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/proxy-sessions",
-        "responseCode":200
-      },
-      "input":{"shape":"ListProxySessionsRequest"},
-      "output":{"shape":"ListProxySessionsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the proxy sessions for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListProxySessions.html\">ListProxySessions</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListProxySessions in the Amazon Chime SDK Voice Namespace"
-    },
     "ListRoomMemberships":{
       "name":"ListRoomMemberships",
       "http":{
@@ -2835,48 +825,6 @@
       ],
       "documentation":"<p>Lists the room details for the specified Amazon Chime Enterprise account. Optionally, filter the results by a member ID (user ID or bot ID) to see a list of rooms that the member belongs to.</p>"
     },
-    "ListSipMediaApplications":{
-      "name":"ListSipMediaApplications",
-      "http":{
-        "method":"GET",
-        "requestUri":"/sip-media-applications",
-        "responseCode":200
-      },
-      "input":{"shape":"ListSipMediaApplicationsRequest"},
-      "output":{"shape":"ListSipMediaApplicationsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the SIP media applications under the administrator's AWS account.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListSipMediaApplications.html\">ListSipMediaApplications</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListSipMediaApplications in the Amazon Chime SDK Voice Namespace"
-    },
-    "ListSipRules":{
-      "name":"ListSipRules",
-      "http":{
-        "method":"GET",
-        "requestUri":"/sip-rules",
-        "responseCode":200
-      },
-      "input":{"shape":"ListSipRulesRequest"},
-      "output":{"shape":"ListSipRulesResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the SIP rules under the administrator's AWS account.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListSipRules.html\">ListSipRules</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListSipRules in the Amazon Chime SDK Voice Namespace"
-    },
     "ListSupportedPhoneNumberCountries":{
       "name":"ListSupportedPhoneNumberCountries",
       "http":{
@@ -2897,26 +845,6 @@
       ],
       "documentation":"<p>Lists supported phone number countries.</p>"
     },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the tags applied to an Amazon Chime SDK meeting and messaging resources.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the applicable latest version in the Amazon Chime SDK.</p> <ul> <li> <p>For meetings: <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_ListTagsForResource.html\">ListTagsForResource</a>.</p> </li> <li> <p>For messaging: <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListTagsForResource.html\">ListTagsForResource</a>.</p> </li> </ul> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListTagsForResource in the Amazon Chime SDK Voice, Amazon Chime SDK Meetings, Amazon Chime SDK Identity, Amazon Chime SDK Messaging, and Amazon Chime SDK Media Pipelines Namespaces"
-    },
     "ListUsers":{
       "name":"ListUsers",
       "http":{
@@ -2937,70 +865,6 @@
       ],
       "documentation":"<p>Lists the users that belong to the specified Amazon Chime account. You can specify an email address to list only the user that the email address belongs to.</p>"
     },
-    "ListVoiceConnectorGroups":{
-      "name":"ListVoiceConnectorGroups",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connector-groups",
-        "responseCode":200
-      },
-      "input":{"shape":"ListVoiceConnectorGroupsRequest"},
-      "output":{"shape":"ListVoiceConnectorGroupsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the Amazon Chime Voice Connector groups for the administrator's AWS account.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListVoiceConnectorGroups.html\">ListVoiceConnectorGroups</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListVoiceConnectorGroups in the Amazon Chime SDK Voice Namespace"
-    },
-    "ListVoiceConnectorTerminationCredentials":{
-      "name":"ListVoiceConnectorTerminationCredentials",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination/credentials",
-        "responseCode":200
-      },
-      "input":{"shape":"ListVoiceConnectorTerminationCredentialsRequest"},
-      "output":{"shape":"ListVoiceConnectorTerminationCredentialsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the SIP credentials for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListVoiceConnectorTerminationCredentials.html\">ListVoiceConnectorTerminationCredentials</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListVoiceConnectorTerminationCredentials in the Amazon Chime SDK Voice Namespace"
-    },
-    "ListVoiceConnectors":{
-      "name":"ListVoiceConnectors",
-      "http":{
-        "method":"GET",
-        "requestUri":"/voice-connectors",
-        "responseCode":200
-      },
-      "input":{"shape":"ListVoiceConnectorsRequest"},
-      "output":{"shape":"ListVoiceConnectorsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Lists the Amazon Chime Voice Connectors for the administrator's AWS account.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ListVoiceConnectors.html\">ListVoiceConnectors</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ListVoiceConnectors in the Amazon Chime SDK Voice Namespace"
-    },
     "LogoutUser":{
       "name":"LogoutUser",
       "http":{
@@ -3021,52 +885,6 @@
       ],
       "documentation":"<p>Logs out the specified user from all of the devices they are currently logged into.</p>"
     },
-    "PutAppInstanceRetentionSettings":{
-      "name":"PutAppInstanceRetentionSettings",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/app-instances/{appInstanceArn}/retention-settings",
-        "responseCode":200
-      },
-      "input":{"shape":"PutAppInstanceRetentionSettingsRequest"},
-      "output":{"shape":"PutAppInstanceRetentionSettingsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Sets the amount of time in days that a given <code>AppInstance</code> retains data.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_PutAppInstanceRetentionSettings.html\">PutAppInstanceRetentionSettings</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutAppInstanceRetentionSettings in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "PutAppInstanceStreamingConfigurations":{
-      "name":"PutAppInstanceStreamingConfigurations",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/app-instances/{appInstanceArn}/streaming-configurations",
-        "responseCode":200
-      },
-      "input":{"shape":"PutAppInstanceStreamingConfigurationsRequest"},
-      "output":{"shape":"PutAppInstanceStreamingConfigurationsResponse"},
-      "errors":[
-        {"shape":"NotFoundException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>The data streaming configurations of an <code>AppInstance</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_PutMessagingStreamingConfigurations.html\">PutMessagingStreamingConfigurations</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutAppInstanceStreamingConfigurations in the Amazon Chime SDK Messaging Namespace"
-    },
     "PutEventsConfiguration":{
       "name":"PutEventsConfiguration",
       "http":{
@@ -3108,204 +926,6 @@
       ],
       "documentation":"<p> Puts retention settings for the specified Amazon Chime Enterprise account. We recommend using AWS CloudTrail to monitor usage of this API for your account. For more information, see <a href=\"https://docs.aws.amazon.com/chime/latest/ag/cloudtrail.html\">Logging Amazon Chime API Calls with AWS CloudTrail</a> in the <i>Amazon Chime Administration Guide</i>.</p> <p> To turn off existing retention settings, remove the number of days from the corresponding <b>RetentionDays</b> field in the <b>RetentionSettings</b> object. For more information about retention settings, see <a href=\"https://docs.aws.amazon.com/chime/latest/ag/chat-retention.html\">Managing Chat Retention Policies</a> in the <i>Amazon Chime Administration Guide</i>.</p>"
     },
-    "PutSipMediaApplicationLoggingConfiguration":{
-      "name":"PutSipMediaApplicationLoggingConfiguration",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}/logging-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"PutSipMediaApplicationLoggingConfigurationRequest"},
-      "output":{"shape":"PutSipMediaApplicationLoggingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the logging configuration for the specified SIP media application.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutSipMediaApplicationLoggingConfiguration.html\">PutSipMediaApplicationLoggingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutSipMediaApplicationLoggingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorEmergencyCallingConfiguration":{
-      "name":"PutVoiceConnectorEmergencyCallingConfiguration",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/emergency-calling-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"PutVoiceConnectorEmergencyCallingConfigurationRequest"},
-      "output":{"shape":"PutVoiceConnectorEmergencyCallingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Puts emergency calling configuration details to the specified Amazon Chime Voice Connector, such as emergency phone numbers and calling countries. Origination and termination settings must be enabled for the Amazon Chime Voice Connector before emergency calling can be configured.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorEmergencyCallingConfiguration.html\">PutVoiceConnectorEmergencyCallingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorEmergencyCallingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorLoggingConfiguration":{
-      "name":"PutVoiceConnectorLoggingConfiguration",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/logging-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"PutVoiceConnectorLoggingConfigurationRequest"},
-      "output":{"shape":"PutVoiceConnectorLoggingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds a logging configuration for the specified Amazon Chime Voice Connector. The logging configuration specifies whether SIP message logs are enabled for sending to Amazon CloudWatch Logs.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorLoggingConfiguration.html\">PutVoiceConnectorLoggingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorLoggingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorOrigination":{
-      "name":"PutVoiceConnectorOrigination",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/origination",
-        "responseCode":200
-      },
-      "input":{"shape":"PutVoiceConnectorOriginationRequest"},
-      "output":{"shape":"PutVoiceConnectorOriginationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds origination settings for the specified Amazon Chime Voice Connector.</p> <note> <p>If emergency calling is configured for the Amazon Chime Voice Connector, it must be deleted prior to turning off origination settings.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorOrigination.html\">PutVoiceConnectorOrigination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorOrigination in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorProxy":{
-      "name":"PutVoiceConnectorProxy",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/programmable-numbers/proxy"
-      },
-      "input":{"shape":"PutVoiceConnectorProxyRequest"},
-      "output":{"shape":"PutVoiceConnectorProxyResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Puts the specified proxy configuration to the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorProxy.html\">PutVoiceConnectorProxy</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorProxy in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorStreamingConfiguration":{
-      "name":"PutVoiceConnectorStreamingConfiguration",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/streaming-configuration",
-        "responseCode":200
-      },
-      "input":{"shape":"PutVoiceConnectorStreamingConfigurationRequest"},
-      "output":{"shape":"PutVoiceConnectorStreamingConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds a streaming configuration for the specified Amazon Chime Voice Connector. The streaming configuration specifies whether media streaming is enabled for sending to Kinesis. It also sets the retention period, in hours, for the Amazon Kinesis data.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorStreamingConfiguration.html\">PutVoiceConnectorStreamingConfiguration</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorStreamingConfiguration in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorTermination":{
-      "name":"PutVoiceConnectorTermination",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination",
-        "responseCode":200
-      },
-      "input":{"shape":"PutVoiceConnectorTerminationRequest"},
-      "output":{"shape":"PutVoiceConnectorTerminationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds termination settings for the specified Amazon Chime Voice Connector.</p> <note> <p>If emergency calling is configured for the Amazon Chime Voice Connector, it must be deleted prior to turning off termination settings.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorTermination.html\">PutVoiceConnectorTermination</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorTermination in the Amazon Chime SDK Voice Namespace"
-    },
-    "PutVoiceConnectorTerminationCredentials":{
-      "name":"PutVoiceConnectorTerminationCredentials",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/termination/credentials?operation=put",
-        "responseCode":204
-      },
-      "input":{"shape":"PutVoiceConnectorTerminationCredentialsRequest"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Adds termination SIP credentials for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorTerminationCredentials.html\">PutVoiceConnectorTerminationCredentials</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by PutVoiceConnectorTerminationCredentials in the Amazon Chime SDK Voice Namespace"
-    },
-    "RedactChannelMessage":{
-      "name":"RedactChannelMessage",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/messages/{messageId}?operation=redact",
-        "responseCode":200
-      },
-      "input":{"shape":"RedactChannelMessageRequest"},
-      "output":{"shape":"RedactChannelMessageResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Redacts message content, but not metadata. The message exists in the back end, but the action returns null content, and the state shows as redacted.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_RedactChannelMessage.html\">RedactChannelMessage</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by RedactChannelMessage in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "RedactConversationMessage":{
       "name":"RedactConversationMessage",
       "http":{
@@ -3426,202 +1046,6 @@
       ],
       "documentation":"<p>Searches for phone numbers that can be ordered. For US numbers, provide at least one of the following search filters: <code>AreaCode</code>, <code>City</code>, <code>State</code>, or <code>TollFreePrefix</code>. If you provide <code>City</code>, you must also provide <code>State</code>. Numbers outside the US only support the <code>PhoneNumberType</code> filter, which you must use.</p>"
     },
-    "SendChannelMessage":{
-      "name":"SendChannelMessage",
-      "http":{
-        "method":"POST",
-        "requestUri":"/channels/{channelArn}/messages",
-        "responseCode":201
-      },
-      "input":{"shape":"SendChannelMessageRequest"},
-      "output":{"shape":"SendChannelMessageResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Sends a message to a particular channel that the member is a part of.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> <p>Also, <code>STANDARD</code> messages can contain 4KB of data and the 1KB of metadata. <code>CONTROL</code> messages can contain 30 bytes of data and no metadata.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html\">SendChannelMessage</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by SendChannelMessage in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "StartMeetingTranscription":{
-      "name":"StartMeetingTranscription",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/transcription?operation=start",
-        "responseCode":200
-      },
-      "input":{"shape":"StartMeetingTranscriptionRequest"},
-      "output":{"shape":"StartMeetingTranscriptionResponse"},
-      "errors":[
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"UnprocessableEntityException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Starts transcription for the specified <code>meetingId</code>. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meeting-transcription.html\"> Using Amazon Chime SDK live transcription </a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> <p>If you specify an invalid configuration, a <code>TranscriptFailed</code> event will be sent with the contents of the <code>BadRequestException</code> generated by Amazon Transcribe. For more information on each parameter and which combinations are valid, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/APIReference/API_streaming_StartStreamTranscription.html\">StartStreamTranscription</a> API in the <i>Amazon Transcribe Developer Guide</i>.</p> <note> <p>Amazon Chime SDK live transcription is powered by Amazon Transcribe. Use of Amazon Transcribe is subject to the <a href=\"https://aws.amazon.com/service-terms/\">AWS Service Terms</a>, including the terms specific to the AWS Machine Learning and Artificial Intelligence Services.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StartMeetingTranscription.html\">StartMeetingTranscription</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by StartMeetingTranscription in the Amazon Chime SDK Meetings Namespace"
-    },
-    "StopMeetingTranscription":{
-      "name":"StopMeetingTranscription",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/transcription?operation=stop",
-        "responseCode":200
-      },
-      "input":{"shape":"StopMeetingTranscriptionRequest"},
-      "output":{"shape":"StopMeetingTranscriptionResponse"},
-      "errors":[
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"UnprocessableEntityException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Stops transcription for the specified <code>meetingId</code>.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_StopMeetingTranscription.html\">StopMeetingTranscription</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by StopMeetingTranscription in the Amazon Chime SDK Meetings Namespace"
-    },
-    "TagAttendee":{
-      "name":"TagAttendee",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/attendees/{attendeeId}/tags?operation=add",
-        "responseCode":204
-      },
-      "input":{"shape":"TagAttendeeRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Applies the specified tags to the specified Amazon Chime attendee.</p> <important> <p>TagAttendee is not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Attendee Tags are not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API."
-    },
-    "TagMeeting":{
-      "name":"TagMeeting",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/tags?operation=add",
-        "responseCode":204
-      },
-      "input":{"shape":"TagMeetingRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Applies the specified tags to the specified Amazon Chime SDK meeting.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_TagResource.html\">TagResource</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Use TagResource in the Amazon Chime SDK Meetings Namespace."
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags?operation=tag-resource",
-        "responseCode":204
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Applies the specified tags to the specified Amazon Chime SDK meeting resource.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_TagResource.html\">TagResource</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by TagResource in the Amazon Chime SDK Voice, Amazon Chime SDK Meetings, Amazon Chime SDK Identity, Amazon Chime SDK Messaging, and Amazon Chime SDK Media Pipelines Namespaces"
-    },
-    "UntagAttendee":{
-      "name":"UntagAttendee",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/attendees/{attendeeId}/tags?operation=delete",
-        "responseCode":204
-      },
-      "input":{"shape":"UntagAttendeeRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Untags the specified tags from the specified Amazon Chime SDK attendee.</p> <important> <p>UntagAttendee is not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Attendee Tags are not supported in the Amazon Chime SDK Meetings Namespace. Update your application to remove calls to this API."
-    },
-    "UntagMeeting":{
-      "name":"UntagMeeting",
-      "http":{
-        "method":"POST",
-        "requestUri":"/meetings/{meetingId}/tags?operation=delete",
-        "responseCode":204
-      },
-      "input":{"shape":"UntagMeetingRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Untags the specified tags from the specified Amazon Chime SDK meeting.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_UntagResource.html\">UntagResource</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Use UntagResource in the Amazon Chime SDK Meetings Namespace."
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags?operation=untag-resource",
-        "responseCode":204
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"NotFoundException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Untags the specified tags from the specified Amazon Chime SDK meeting resource.</p> <p>Applies the specified tags to the specified Amazon Chime SDK meeting resource.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_UntagResource.html\">UntagResource</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UntagResource in the Amazon Chime SDK Voice, Amazon Chime SDK Meetings, Amazon Chime SDK Identity, Amazon Chime SDK Messaging, and Amazon Chime SDK Media Pipelines Namespaces"
-    },
     "UpdateAccount":{
       "name":"UpdateAccount",
       "http":{
@@ -3663,52 +1087,6 @@
       ],
       "documentation":"<p>Updates the settings for the specified Amazon Chime account. You can update settings for remote control of shared screens, or for the dial-out option. For more information about these settings, see <a href=\"https://docs.aws.amazon.com/chime/latest/ag/policies.html\">Use the Policies Page</a> in the <i>Amazon Chime Administration Guide</i>.</p>"
     },
-    "UpdateAppInstance":{
-      "name":"UpdateAppInstance",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/app-instances/{appInstanceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateAppInstanceRequest"},
-      "output":{"shape":"UpdateAppInstanceResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates <code>AppInstance</code> metadata.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_UpdateAppInstance.html\">UpdateAppInstance</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateAppInstance in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
-    "UpdateAppInstanceUser":{
-      "name":"UpdateAppInstanceUser",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/app-instance-users/{appInstanceUserArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateAppInstanceUserRequest"},
-      "output":{"shape":"UpdateAppInstanceUserResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the details of an <code>AppInstanceUser</code>. You can update names and metadata.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_identity-chime_UpdateAppInstanceUser.html\">UpdateAppInstanceUser</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateAppInstanceUser in the Amazon Chime SDK Identity Namespace",
-      "endpoint":{"hostPrefix":"identity-"}
-    },
     "UpdateBot":{
       "name":"UpdateBot",
       "http":{
@@ -3729,75 +1107,6 @@
       ],
       "documentation":"<p>Updates the status of the specified bot, such as starting or stopping the bot from running in your Amazon Chime Enterprise account.</p>"
     },
-    "UpdateChannel":{
-      "name":"UpdateChannel",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/channels/{channelArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateChannelRequest"},
-      "output":{"shape":"UpdateChannelResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ConflictException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Update a channel's attributes.</p> <p> <b>Restriction</b>: You can't change a channel's privacy. </p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannel.html\">UpdateChannel</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateChannel in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "UpdateChannelMessage":{
-      "name":"UpdateChannelMessage",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/channels/{channelArn}/messages/{messageId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateChannelMessageRequest"},
-      "output":{"shape":"UpdateChannelMessageResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the content of a message.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelMessage.html\">UpdateChannelMessage</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateChannelMessage in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
-    "UpdateChannelReadMarker":{
-      "name":"UpdateChannelReadMarker",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/channels/{channelArn}/readMarker",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateChannelReadMarkerRequest"},
-      "output":{"shape":"UpdateChannelReadMarkerResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ConflictException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>The details of the time when a user last read messages in a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the <code>AppInstanceUserArn</code> of the user that makes the API call as the value in the header.</p> </note> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelReadMarker.html\">UpdateChannelReadMarker</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateChannelReadMarker in the Amazon Chime SDK Messaging Namespace",
-      "endpoint":{"hostPrefix":"messaging-"}
-    },
     "UpdateGlobalSettings":{
       "name":"UpdateGlobalSettings",
       "http":{
@@ -3855,28 +1164,6 @@
       ],
       "documentation":"<p>Updates the phone number settings for the administrator's AWS account, such as the default outbound calling name. You can update the default outbound calling name once every seven days. Outbound calling names can take up to 72 hours to update.</p>"
     },
-    "UpdateProxySession":{
-      "name":"UpdateProxySession",
-      "http":{
-        "method":"POST",
-        "requestUri":"/voice-connectors/{voiceConnectorId}/proxy-sessions/{proxySessionId}",
-        "responseCode":201
-      },
-      "input":{"shape":"UpdateProxySessionRequest"},
-      "output":{"shape":"UpdateProxySessionResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the specified proxy session details, such as voice or SMS capabilities.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateProxySession.html\">UpdateProxySession</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateProxySession in the Amazon Chime SDK Voice Namespace"
-    },
     "UpdateRoom":{
       "name":"UpdateRoom",
       "http":{
@@ -3917,76 +1204,6 @@
       ],
       "documentation":"<p>Updates room membership details, such as the member role, for a room in an Amazon Chime Enterprise account. The member role designates whether the member is a chat room administrator or a general chat room member. The member role can be updated only for user IDs.</p>"
     },
-    "UpdateSipMediaApplication":{
-      "name":"UpdateSipMediaApplication",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateSipMediaApplicationRequest"},
-      "output":{"shape":"UpdateSipMediaApplicationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the details of the specified SIP media application.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateSipMediaApplication.html\">UpdateSipMediaApplication</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateSipMediaApplication in the Amazon Chime SDK Voice Namespace"
-    },
-    "UpdateSipMediaApplicationCall":{
-      "name":"UpdateSipMediaApplicationCall",
-      "http":{
-        "method":"POST",
-        "requestUri":"/sip-media-applications/{sipMediaApplicationId}/calls/{transactionId}",
-        "responseCode":202
-      },
-      "input":{"shape":"UpdateSipMediaApplicationCallRequest"},
-      "output":{"shape":"UpdateSipMediaApplicationCallResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Invokes the AWS Lambda function associated with the SIP media application and transaction ID in an update request. The Lambda function can then return a new set of actions.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateSipMediaApplicationCall.html\">UpdateSipMediaApplicationCall</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateSipMediaApplicationCall in the Amazon Chime SDK Voice Namespace"
-    },
-    "UpdateSipRule":{
-      "name":"UpdateSipRule",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/sip-rules/{sipRuleId}",
-        "responseCode":202
-      },
-      "input":{"shape":"UpdateSipRuleRequest"},
-      "output":{"shape":"UpdateSipRuleResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ResourceLimitExceededException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates the details of the specified SIP rule.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateSipRule.html\">UpdateSipRule</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateSipRule in the Amazon Chime SDK Voice Namespace"
-    },
     "UpdateUser":{
       "name":"UpdateUser",
       "http":{
@@ -4025,73 +1242,6 @@
         {"shape":"ServiceFailureException"}
       ],
       "documentation":"<p>Updates the settings for the specified user, such as phone number settings.</p>"
-    },
-    "UpdateVoiceConnector":{
-      "name":"UpdateVoiceConnector",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connectors/{voiceConnectorId}",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateVoiceConnectorRequest"},
-      "output":{"shape":"UpdateVoiceConnectorResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates details for the specified Amazon Chime Voice Connector.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceConnector.html\">UpdateVoiceConnector</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateVoiceConnector in the Amazon Chime SDK Voice Namespace"
-    },
-    "UpdateVoiceConnectorGroup":{
-      "name":"UpdateVoiceConnectorGroup",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/voice-connector-groups/{voiceConnectorGroupId}",
-        "responseCode":202
-      },
-      "input":{"shape":"UpdateVoiceConnectorGroupRequest"},
-      "output":{"shape":"UpdateVoiceConnectorGroupResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Updates details of the specified Amazon Chime Voice Connector group, such as the name and Amazon Chime Voice Connector priority ranking.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceConnectorGroup.html\">UpdateVoiceConnectorGroup</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by UpdateVoiceConnectorGroup in the Amazon Chime SDK Voice Namespace"
-    },
-    "ValidateE911Address":{
-      "name":"ValidateE911Address",
-      "http":{
-        "method":"POST",
-        "requestUri":"/emergency-calling/address",
-        "responseCode":202
-      },
-      "input":{"shape":"ValidateE911AddressRequest"},
-      "output":{"shape":"ValidateE911AddressResponse"},
-      "errors":[
-        {"shape":"UnauthorizedClientException"},
-        {"shape":"NotFoundException"},
-        {"shape":"ForbiddenException"},
-        {"shape":"BadRequestException"},
-        {"shape":"ThrottledClientException"},
-        {"shape":"ServiceUnavailableException"},
-        {"shape":"ServiceFailureException"}
-      ],
-      "documentation":"<p>Validates an address to be used for 911 calls made with Amazon Chime Voice Connectors. You can use validated addresses in a Presence Information Data Format Location Object file that you include in SIP requests. That helps ensure that addresses are routed to the appropriate Public Safety Answering Point.</p> <important> <p> <b>This API is is no longer supported and will not be updated.</b> We recommend using the latest version, <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_ValidateE911Address.html\">ValidateE911Address</a>, in the Amazon Chime SDK.</p> <p>Using the latest version requires migrating to a dedicated namespace. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/migrate-from-chm-namespace.html\">Migrating from the Amazon Chime namespace</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"Replaced by ValidateE911Address in the Amazon Chime SDK Voice Namespace"
     }
   },
   "shapes":{
@@ -4192,52 +1342,6 @@
         "EnterpriseOIDC"
       ]
     },
-    "Address":{
-      "type":"structure",
-      "members":{
-        "streetName":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address street, such as <code>8th Avenue</code>.</p>"
-        },
-        "streetSuffix":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address suffix, such as the <code>N</code> in <code>8th Avenue N</code>.</p>"
-        },
-        "postDirectional":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>An address suffix location, such as the <code>S. Unit A</code> in <code>Central Park S. Unit A</code>.</p>"
-        },
-        "preDirectional":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>An address prefix location, such as the <code>N</code> in <code>N. Third St.</code>.</p>"
-        },
-        "streetNumber":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The numeric portion of an address.</p>"
-        },
-        "city":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The city of an address.</p>"
-        },
-        "state":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The state of an address.</p>"
-        },
-        "postalCode":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The postal code of an address.</p>"
-        },
-        "postalCodePlus4":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The Zip + 4 or postal code + 4 of an address.</p>"
-        },
-        "country":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The country of an address. </p>"
-        }
-      },
-      "documentation":"<p>A validated address.</p>"
-    },
     "AlexaForBusinessMetadata":{
       "type":"structure",
       "members":{
@@ -4256,230 +1360,6 @@
       "type":"string",
       "pattern":"[A-Z]{2}"
     },
-    "AppInstance":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the messaging instance.</p>"
-        },
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of an <code>AppInstance</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of an <code>AppInstance</code>.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which an <code>AppInstance</code> was created. In epoch milliseconds.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time an <code>AppInstance</code> was last updated. In epoch milliseconds.</p>"
-        }
-      },
-      "documentation":"<p>The details of an <code>AppInstance</code>, an instance of an Amazon Chime SDK messaging application.</p>"
-    },
-    "AppInstanceAdmin":{
-      "type":"structure",
-      "members":{
-        "Admin":{
-          "shape":"Identity",
-          "documentation":"<p>The <code>AppInstanceAdmin</code> data.</p>"
-        },
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code> for which the user is an administrator.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which an administrator was created.</p>"
-        }
-      },
-      "documentation":"<p>The details of an <code>AppInstanceAdmin</code>.</p>"
-    },
-    "AppInstanceAdminList":{
-      "type":"list",
-      "member":{"shape":"AppInstanceAdminSummary"}
-    },
-    "AppInstanceAdminSummary":{
-      "type":"structure",
-      "members":{
-        "Admin":{
-          "shape":"Identity",
-          "documentation":"<p>The details of the <code>AppInstanceAdmin</code>.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of an <code>AppInstanceAdmin</code>.</p>"
-    },
-    "AppInstanceDataType":{
-      "type":"string",
-      "enum":[
-        "Channel",
-        "ChannelMessage"
-      ]
-    },
-    "AppInstanceList":{
-      "type":"list",
-      "member":{"shape":"AppInstanceSummary"}
-    },
-    "AppInstanceRetentionSettings":{
-      "type":"structure",
-      "members":{
-        "ChannelRetentionSettings":{
-          "shape":"ChannelRetentionSettings",
-          "documentation":"<p>The length of time in days to retain the messages in a channel.</p>"
-        }
-      },
-      "documentation":"<p>The details of the data-retention settings for an <code>AppInstance</code>.</p>"
-    },
-    "AppInstanceStreamingConfiguration":{
-      "type":"structure",
-      "required":[
-        "AppInstanceDataType",
-        "ResourceArn"
-      ],
-      "members":{
-        "AppInstanceDataType":{
-          "shape":"AppInstanceDataType",
-          "documentation":"<p>The type of data to be streamed.</p>"
-        },
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The resource ARN.</p>"
-        }
-      },
-      "documentation":"<p>The details of the streaming configuration of an <code>AppInstance</code>.</p>"
-    },
-    "AppInstanceStreamingConfigurationList":{
-      "type":"list",
-      "member":{"shape":"AppInstanceStreamingConfiguration"},
-      "max":2,
-      "min":1
-    },
-    "AppInstanceSummary":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstance</code> ARN.</p>"
-        },
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the <code>AppInstance</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the <code>AppInstance</code>.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the data for an <code>AppInstance</code>.</p>"
-    },
-    "AppInstanceUser":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>.</p>"
-        },
-        "Name":{
-          "shape":"UserName",
-          "documentation":"<p>The name of the <code>AppInstanceUser</code>.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the <code>AppInstanceUser</code> was created.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the <code>AppInstanceUser</code>.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the <code>AppInstanceUser</code> was last updated.</p>"
-        }
-      },
-      "documentation":"<p>The details of an <code>AppInstanceUser</code>.</p>"
-    },
-    "AppInstanceUserList":{
-      "type":"list",
-      "member":{"shape":"AppInstanceUserSummary"}
-    },
-    "AppInstanceUserMembershipSummary":{
-      "type":"structure",
-      "members":{
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The type of <code>ChannelMembership</code>.</p>"
-        },
-        "ReadMarkerTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a message was last read.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the membership details of an <code>AppInstanceUser</code>.</p>"
-    },
-    "AppInstanceUserSummary":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>.</p>"
-        },
-        "Name":{
-          "shape":"UserName",
-          "documentation":"<p>The name of an <code>AppInstanceUser</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the <code>AppInstanceUser</code>.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of an <code>AppInstanceUser</code>.</p>"
-    },
-    "AreaCode":{
-      "type":"string",
-      "pattern":"^$|^[0-9]{3,3}$"
-    },
-    "Arn":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":"^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$",
-      "sensitive":true
-    },
-    "ArtifactsConfiguration":{
-      "type":"structure",
-      "required":[
-        "Audio",
-        "Video",
-        "Content"
-      ],
-      "members":{
-        "Audio":{
-          "shape":"AudioArtifactsConfiguration",
-          "documentation":"<p>The configuration for the audio artifacts.</p>"
-        },
-        "Video":{
-          "shape":"VideoArtifactsConfiguration",
-          "documentation":"<p>The configuration for the video artifacts.</p>"
-        },
-        "Content":{
-          "shape":"ContentArtifactsConfiguration",
-          "documentation":"<p>The configuration for the content artifacts.</p>"
-        }
-      },
-      "documentation":"<p>The configuration for the artifacts.</p>"
-    },
-    "ArtifactsState":{
-      "type":"string",
-      "enum":[
-        "Enabled",
-        "Disabled"
-      ]
-    },
     "AssociatePhoneNumberWithUserRequest":{
       "type":"structure",
       "required":[
@@ -4508,72 +1388,7 @@
     },
     "AssociatePhoneNumberWithUserResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "AssociatePhoneNumbersWithVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorGroupId",
-        "E164PhoneNumbers"
-      ],
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorGroupId"
-        },
-        "E164PhoneNumbers":{
-          "shape":"E164PhoneNumberList",
-          "documentation":"<p>List of phone numbers, in E.164 format.</p>"
-        },
-        "ForceAssociate":{
-          "shape":"NullableBoolean",
-          "documentation":"<p>If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector Group and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.</p>"
-        }
-      }
-    },
-    "AssociatePhoneNumbersWithVoiceConnectorGroupResponse":{
-      "type":"structure",
-      "members":{
-        "PhoneNumberErrors":{
-          "shape":"PhoneNumberErrorList",
-          "documentation":"<p>If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.</p>"
-        }
-      }
-    },
-    "AssociatePhoneNumbersWithVoiceConnectorRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "E164PhoneNumbers"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "E164PhoneNumbers":{
-          "shape":"E164PhoneNumberList",
-          "documentation":"<p>List of phone numbers, in E.164 format.</p>"
-        },
-        "ForceAssociate":{
-          "shape":"NullableBoolean",
-          "documentation":"<p>If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.</p>"
-        }
-      }
-    },
-    "AssociatePhoneNumbersWithVoiceConnectorResponse":{
-      "type":"structure",
-      "members":{
-        "PhoneNumberErrors":{
-          "shape":"PhoneNumberErrorList",
-          "documentation":"<p>If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.</p>"
-        }
-      }
+      "members":{}
     },
     "AssociateSigninDelegateGroupsWithAccountRequest":{
       "type":"structure",
@@ -4596,65 +1411,7 @@
     },
     "AssociateSigninDelegateGroupsWithAccountResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "Attendee":{
-      "type":"structure",
-      "members":{
-        "ExternalUserId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.</p>"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>"
-        },
-        "JoinToken":{
-          "shape":"JoinTokenString",
-          "documentation":"<p>The join token used by the Amazon Chime SDK attendee.</p>"
-        }
-      },
-      "documentation":"<p> An Amazon Chime SDK meeting attendee. Includes a unique <code>AttendeeId</code> and <code>JoinToken</code> . The <code>JoinToken</code> allows a client to authenticate and join as the specified attendee. The <code>JoinToken</code> expires when the meeting ends or when <a>DeleteAttendee</a> is called. After that, the attendee is unable to join the meeting. </p> <p>We recommend securely transferring each <code>JoinToken</code> from your server application to the client so that no other client has access to the token except for the one authorized to represent the attendee.</p>"
-    },
-    "AttendeeIdList":{
-      "type":"list",
-      "member":{"shape":"GuidString"},
-      "min":1
-    },
-    "AttendeeList":{
-      "type":"list",
-      "member":{"shape":"Attendee"}
-    },
-    "AttendeeTagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":10,
-      "min":1
-    },
-    "AttendeeTagList":{
-      "type":"list",
-      "member":{"shape":"Tag"},
-      "max":10,
-      "min":1
-    },
-    "AudioArtifactsConfiguration":{
-      "type":"structure",
-      "required":["MuxType"],
-      "members":{
-        "MuxType":{
-          "shape":"AudioMuxType",
-          "documentation":"<p>The MUX type of the audio artifact configuration object.</p>"
-        }
-      },
-      "documentation":"<p>The audio artifact configuration object.</p>"
-    },
-    "AudioMuxType":{
-      "type":"string",
-      "enum":[
-        "AudioOnly",
-        "AudioWithActiveSpeakerVideo"
-      ]
+      "members":{}
     },
     "BadRequestException":{
       "type":"structure",
@@ -4666,128 +1423,6 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
-    "BatchChannelMemberships":{
-      "type":"structure",
-      "members":{
-        "InvitedBy":{
-          "shape":"Identity",
-          "documentation":"<p>The identifier of the member who invited another member.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The membership types set for the channel users.</p>"
-        },
-        "Members":{
-          "shape":"Members",
-          "documentation":"<p>The users successfully added to the request.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel to which you're adding users.</p>"
-        }
-      },
-      "documentation":"<p>The membership information, including member ARNs, the channel ARN, and membership types.</p>"
-    },
-    "BatchCreateAttendeeErrorList":{
-      "type":"list",
-      "member":{"shape":"CreateAttendeeError"}
-    },
-    "BatchCreateAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "Attendees"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "Attendees":{
-          "shape":"CreateAttendeeRequestItemList",
-          "documentation":"<p>The request containing the attendees to create.</p>"
-        }
-      }
-    },
-    "BatchCreateAttendeeResponse":{
-      "type":"structure",
-      "members":{
-        "Attendees":{
-          "shape":"AttendeeList",
-          "documentation":"<p>The attendee information, including attendees IDs and join tokens.</p>"
-        },
-        "Errors":{
-          "shape":"BatchCreateAttendeeErrorList",
-          "documentation":"<p>If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.</p>"
-        }
-      }
-    },
-    "BatchCreateChannelMembershipError":{
-      "type":"structure",
-      "members":{
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member that the service couldn't add.</p>"
-        },
-        "ErrorCode":{
-          "shape":"ErrorCode",
-          "documentation":"<p>The error code.</p>"
-        },
-        "ErrorMessage":{
-          "shape":"String",
-          "documentation":"<p>The error message.</p>"
-        }
-      },
-      "documentation":"<p>A list of failed member ARNs, error codes, and error messages.</p>"
-    },
-    "BatchCreateChannelMembershipErrors":{
-      "type":"list",
-      "member":{"shape":"BatchCreateChannelMembershipError"}
-    },
-    "BatchCreateChannelMembershipRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArns"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel to which you're adding users.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The membership type of a user, <code>DEFAULT</code> or <code>HIDDEN</code>. Default members are always returned as part of <code>ListChannelMemberships</code>. Hidden members are only returned if the type filter in <code>ListChannelMemberships</code> equals <code>HIDDEN</code>. Otherwise hidden members are not returned. This is only supported by moderators.</p>"
-        },
-        "MemberArns":{
-          "shape":"MemberArns",
-          "documentation":"<p>The ARNs of the members you want to add to the channel.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "BatchCreateChannelMembershipResponse":{
-      "type":"structure",
-      "members":{
-        "BatchChannelMemberships":{
-          "shape":"BatchChannelMemberships",
-          "documentation":"<p>The list of channel memberships in the response.</p>"
-        },
-        "Errors":{
-          "shape":"BatchCreateChannelMembershipErrors",
-          "documentation":"<p>If the action fails for one or more of the memberships in the request, a list of the memberships is returned, along with error codes and error messages.</p>"
-        }
-      }
-    },
     "BatchCreateRoomMembershipRequest":{
       "type":"structure",
       "required":[
@@ -5021,445 +1656,6 @@
         "UpdateFailed"
       ]
     },
-    "CallingRegion":{"type":"string"},
-    "CallingRegionList":{
-      "type":"list",
-      "member":{"shape":"CallingRegion"}
-    },
-    "CandidateAddress":{
-      "type":"structure",
-      "members":{
-        "streetInfo":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The street information of a candidate address</p>"
-        },
-        "streetNumber":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The numeric portion of a candidate address.</p>"
-        },
-        "city":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The city of a candidate address.</p>"
-        },
-        "state":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The state of a candidate address.</p>"
-        },
-        "postalCode":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The postal code of a candidate address.</p>"
-        },
-        "postalCodePlus4":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The Zip + 4 or postal code + 4 of a candidate address.</p>"
-        },
-        "country":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The country of a candidate address.</p>"
-        }
-      },
-      "documentation":"<p>A suggested address.</p>"
-    },
-    "CandidateAddressList":{
-      "type":"list",
-      "member":{"shape":"CandidateAddress"}
-    },
-    "Capability":{
-      "type":"string",
-      "enum":[
-        "Voice",
-        "SMS"
-      ]
-    },
-    "CapabilityList":{
-      "type":"list",
-      "member":{"shape":"Capability"}
-    },
-    "Channel":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the channel.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "Mode":{
-          "shape":"ChannelMode",
-          "documentation":"<p>The mode of the channel.</p>"
-        },
-        "Privacy":{
-          "shape":"ChannelPrivacy",
-          "documentation":"<p>The channel's privacy setting.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The channel's metadata.</p>"
-        },
-        "CreatedBy":{
-          "shape":"Identity",
-          "documentation":"<p>The <code>AppInstanceUser</code> who created the channel.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the <code>AppInstanceUser</code> created the channel.</p>"
-        },
-        "LastMessageTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a member sent the last message in the channel.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a channel was last updated.</p>"
-        }
-      },
-      "documentation":"<p>The details of a channel.</p>"
-    },
-    "ChannelBan":{
-      "type":"structure",
-      "members":{
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>The member being banned from the channel.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel from which a member is being banned.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the ban was created.</p>"
-        },
-        "CreatedBy":{
-          "shape":"Identity",
-          "documentation":"<p>The <code>AppInstanceUser</code> who created the ban.</p>"
-        }
-      },
-      "documentation":"<p>The details of a channel ban.</p>"
-    },
-    "ChannelBanSummary":{
-      "type":"structure",
-      "members":{
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>The member being banned from a channel.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of a <code>ChannelBan</code>.</p>"
-    },
-    "ChannelBanSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelBanSummary"}
-    },
-    "ChannelMembership":{
-      "type":"structure",
-      "members":{
-        "InvitedBy":{
-          "shape":"Identity",
-          "documentation":"<p>The identifier of the member who invited another member.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The membership type set for the channel member.</p>"
-        },
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>The data of the channel member.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member's channel.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the channel membership was created.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a channel membership was last updated.</p>"
-        }
-      },
-      "documentation":"<p>The details of a channel member.</p>"
-    },
-    "ChannelMembershipForAppInstanceUserSummary":{
-      "type":"structure",
-      "members":{
-        "ChannelSummary":{
-          "shape":"ChannelSummary",
-          "documentation":"<p>Summary of the details of a <code>Channel</code>.</p>"
-        },
-        "AppInstanceUserMembershipSummary":{
-          "shape":"AppInstanceUserMembershipSummary",
-          "documentation":"<p>Summary of the membership details of an <code>AppInstanceUser</code>.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the channel membership details of an <code>AppInstanceUser</code>.</p>"
-    },
-    "ChannelMembershipForAppInstanceUserSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelMembershipForAppInstanceUserSummary"}
-    },
-    "ChannelMembershipSummary":{
-      "type":"structure",
-      "members":{
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>A member's summary data.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of a <code>ChannelMembership</code>.</p>"
-    },
-    "ChannelMembershipSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelMembershipSummary"}
-    },
-    "ChannelMembershipType":{
-      "type":"string",
-      "enum":[
-        "DEFAULT",
-        "HIDDEN"
-      ]
-    },
-    "ChannelMessage":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of a message.</p>"
-        },
-        "Content":{
-          "shape":"Content",
-          "documentation":"<p>The message content.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The message metadata.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMessageType",
-          "documentation":"<p>The message type.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the message was created.</p>"
-        },
-        "LastEditedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a message was edited.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a message was updated.</p>"
-        },
-        "Sender":{
-          "shape":"Identity",
-          "documentation":"<p>The message sender.</p>"
-        },
-        "Redacted":{
-          "shape":"NonNullableBoolean",
-          "documentation":"<p>Hides the content of a message.</p>"
-        },
-        "Persistence":{
-          "shape":"ChannelMessagePersistenceType",
-          "documentation":"<p>The persistence setting for a channel message.</p>"
-        }
-      },
-      "documentation":"<p>The details of a message in a channel.</p>"
-    },
-    "ChannelMessagePersistenceType":{
-      "type":"string",
-      "enum":[
-        "PERSISTENT",
-        "NON_PERSISTENT"
-      ]
-    },
-    "ChannelMessageSummary":{
-      "type":"structure",
-      "members":{
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of the message.</p>"
-        },
-        "Content":{
-          "shape":"Content",
-          "documentation":"<p>The content of the message.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the message.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMessageType",
-          "documentation":"<p>The type of message.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the message summary was created.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a message was last updated.</p>"
-        },
-        "LastEditedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which a message was last edited.</p>"
-        },
-        "Sender":{
-          "shape":"Identity",
-          "documentation":"<p>The message sender.</p>"
-        },
-        "Redacted":{
-          "shape":"NonNullableBoolean",
-          "documentation":"<p>Indicates whether a message was redacted.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the messages in a <code>Channel</code>.</p>"
-    },
-    "ChannelMessageSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelMessageSummary"}
-    },
-    "ChannelMessageType":{
-      "type":"string",
-      "enum":[
-        "STANDARD",
-        "CONTROL"
-      ]
-    },
-    "ChannelMode":{
-      "type":"string",
-      "enum":[
-        "UNRESTRICTED",
-        "RESTRICTED"
-      ]
-    },
-    "ChannelModeratedByAppInstanceUserSummary":{
-      "type":"structure",
-      "members":{
-        "ChannelSummary":{
-          "shape":"ChannelSummary",
-          "documentation":"<p>Summary of the details of a <code>Channel</code>.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of a moderated channel.</p>"
-    },
-    "ChannelModeratedByAppInstanceUserSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelModeratedByAppInstanceUserSummary"}
-    },
-    "ChannelModerator":{
-      "type":"structure",
-      "members":{
-        "Moderator":{
-          "shape":"Identity",
-          "documentation":"<p>The moderator's data.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the moderator's channel.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the moderator was created.</p>"
-        },
-        "CreatedBy":{
-          "shape":"Identity",
-          "documentation":"<p>The <code>AppInstanceUser</code> who created the moderator.</p>"
-        }
-      },
-      "documentation":"<p>The details of a channel moderator.</p>"
-    },
-    "ChannelModeratorSummary":{
-      "type":"structure",
-      "members":{
-        "Moderator":{
-          "shape":"Identity",
-          "documentation":"<p>The data for a moderator.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of a <code>ChannelModerator</code>.</p>"
-    },
-    "ChannelModeratorSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelModeratorSummary"}
-    },
-    "ChannelPrivacy":{
-      "type":"string",
-      "enum":[
-        "PUBLIC",
-        "PRIVATE"
-      ]
-    },
-    "ChannelRetentionSettings":{
-      "type":"structure",
-      "members":{
-        "RetentionDays":{
-          "shape":"RetentionDays",
-          "documentation":"<p>The time in days to retain the messages in a channel.</p>"
-        }
-      },
-      "documentation":"<p>The details of the retention settings for a channel.</p>"
-    },
-    "ChannelSummary":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the channel.</p>"
-        },
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "Mode":{
-          "shape":"ChannelMode",
-          "documentation":"<p>The mode of the channel.</p>"
-        },
-        "Privacy":{
-          "shape":"ChannelPrivacy",
-          "documentation":"<p>The privacy setting of the channel.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the channel.</p>"
-        },
-        "LastMessageTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the last message in a channel was sent.</p>"
-        }
-      },
-      "documentation":"<p>Summary of the details of a <code>Channel</code>.</p>"
-    },
-    "ChannelSummaryList":{
-      "type":"list",
-      "member":{"shape":"ChannelSummary"}
-    },
-    "ChimeArn":{
-      "type":"string",
-      "max":1600,
-      "min":5,
-      "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
-    },
-    "ChimeSdkMeetingConfiguration":{
-      "type":"structure",
-      "members":{
-        "SourceConfiguration":{
-          "shape":"SourceConfiguration",
-          "documentation":"<p>The source configuration for a specified media capture pipeline.</p>"
-        },
-        "ArtifactsConfiguration":{
-          "shape":"ArtifactsConfiguration",
-          "documentation":"<p>The configuration for the artifacts in an Amazon Chime SDK meeting.</p>"
-        }
-      },
-      "documentation":"<p>The configuration object of the Amazon Chime SDK meeting for a specified media capture pipeline. <code>SourceType</code> must be <code>ChimeSdkMeeting</code>.</p>"
-    },
     "ClientRequestToken":{
       "type":"string",
       "max":64,
@@ -5477,32 +1673,6 @@
       "error":{"httpStatusCode":409},
       "exception":true
     },
-    "Content":{
-      "type":"string",
-      "max":4096,
-      "min":0,
-      "pattern":"[\\s\\S]*",
-      "sensitive":true
-    },
-    "ContentArtifactsConfiguration":{
-      "type":"structure",
-      "required":["State"],
-      "members":{
-        "State":{
-          "shape":"ArtifactsState",
-          "documentation":"<p>Indicates whether the content artifact is enabled or disabled.</p>"
-        },
-        "MuxType":{
-          "shape":"ContentMuxType",
-          "documentation":"<p>The MUX type of the artifact configuration.</p>"
-        }
-      },
-      "documentation":"<p>The content artifact object.</p>"
-    },
-    "ContentMuxType":{
-      "type":"string",
-      "enum":["ContentOnly"]
-    },
     "ConversationRetentionSettings":{
       "type":"structure",
       "members":{
@@ -5513,20 +1683,6 @@
       },
       "documentation":"<p>The retention settings that determine how long to retain conversation messages for an Amazon Chime Enterprise account.</p>"
     },
-    "Country":{
-      "type":"string",
-      "pattern":"^$|^[A-Z]{2,2}$"
-    },
-    "CountryList":{
-      "type":"list",
-      "member":{"shape":"Country"},
-      "max":100,
-      "min":1
-    },
-    "CpsLimit":{
-      "type":"integer",
-      "min":1
-    },
     "CreateAccountRequest":{
       "type":"structure",
       "required":["Name"],
@@ -5546,187 +1702,6 @@
         }
       }
     },
-    "CreateAppInstanceAdminRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceAdminArn",
-        "AppInstanceArn"
-      ],
-      "members":{
-        "AppInstanceAdminArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the administrator of the current <code>AppInstance</code>.</p>"
-        },
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "CreateAppInstanceAdminResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceAdmin":{
-          "shape":"Identity",
-          "documentation":"<p>The name and ARN of the admin for the <code>AppInstance</code>.</p>"
-        },
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the of the admin for the <code>AppInstance</code>.</p>"
-        }
-      }
-    },
-    "CreateAppInstanceRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "ClientRequestToken"
-      ],
-      "members":{
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the <code>AppInstance</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the <code>AppInstance</code>. Limited to a 1KB string in UTF-8.</p>"
-        },
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The <code>ClientRequestToken</code> of the <code>AppInstance</code>.</p>",
-          "idempotencyToken":true
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>Tags assigned to the <code>AppInstance</code>.</p>"
-        }
-      }
-    },
-    "CreateAppInstanceResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the <code>AppInstance</code>.</p>"
-        }
-      }
-    },
-    "CreateAppInstanceUserRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceArn",
-        "AppInstanceUserId",
-        "Name",
-        "ClientRequestToken"
-      ],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code> request.</p>"
-        },
-        "AppInstanceUserId":{
-          "shape":"UserId",
-          "documentation":"<p>The user ID of the <code>AppInstance</code>.</p>"
-        },
-        "Name":{
-          "shape":"UserName",
-          "documentation":"<p>The user's name.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The request's metadata. Limited to a 1KB string in UTF-8.</p>"
-        },
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The token assigned to the user requesting an <code>AppInstance</code>.</p>",
-          "idempotencyToken":true
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>Tags assigned to the <code>AppInstanceUser</code>.</p>"
-        }
-      }
-    },
-    "CreateAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The user's ARN.</p>"
-        }
-      }
-    },
-    "CreateAttendeeError":{
-      "type":"structure",
-      "members":{
-        "ExternalUserId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.</p>"
-        },
-        "ErrorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code.</p>"
-        },
-        "ErrorMessage":{
-          "shape":"String",
-          "documentation":"<p>The error message.</p>"
-        }
-      },
-      "documentation":"<p>The list of errors returned when errors are encountered during the BatchCreateAttendee and CreateAttendee actions. This includes external user IDs, error codes, and error messages.</p>"
-    },
-    "CreateAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "ExternalUserId"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "ExternalUserId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.</p>"
-        },
-        "Tags":{
-          "shape":"AttendeeTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        }
-      }
-    },
-    "CreateAttendeeRequestItem":{
-      "type":"structure",
-      "required":["ExternalUserId"],
-      "members":{
-        "ExternalUserId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.</p>"
-        },
-        "Tags":{
-          "shape":"AttendeeTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        }
-      },
-      "documentation":"<p>The Amazon Chime SDK attendee fields to create, used with the BatchCreateAttendee action.</p>"
-    },
-    "CreateAttendeeRequestItemList":{
-      "type":"list",
-      "member":{"shape":"CreateAttendeeRequestItem"}
-    },
-    "CreateAttendeeResponse":{
-      "type":"structure",
-      "members":{
-        "Attendee":{
-          "shape":"Attendee",
-          "documentation":"<p>The attendee information, including attendee ID and join token.</p>"
-        }
-      }
-    },
     "CreateBotRequest":{
       "type":"structure",
       "required":[
@@ -5759,224 +1734,6 @@
         }
       }
     },
-    "CreateChannelBanRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the ban request.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member being banned.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "CreateChannelBanResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the response to the ban request.</p>"
-        },
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>The <code>ChannelArn</code> and <code>BannedIdentity</code> of the member in the ban response.</p>"
-        }
-      }
-    },
-    "CreateChannelMembershipRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn",
-        "Type"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel to which you're adding users.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member you want to add to the channel.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The membership type of a user, <code>DEFAULT</code> or <code>HIDDEN</code>. Default members are always returned as part of <code>ListChannelMemberships</code>. Hidden members are only returned if the type filter in <code>ListChannelMemberships</code> equals <code>HIDDEN</code>. Otherwise hidden members are not returned. This is only supported by moderators.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "CreateChannelMembershipResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "Member":{
-          "shape":"Identity",
-          "documentation":"<p>The ARN and metadata of the member being added.</p>"
-        }
-      }
-    },
-    "CreateChannelModeratorRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "ChannelModeratorArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChannelModeratorArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the moderator.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "CreateChannelModeratorResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "ChannelModerator":{
-          "shape":"Identity",
-          "documentation":"<p>The ARNs of the channel and the moderator.</p>"
-        }
-      }
-    },
-    "CreateChannelRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceArn",
-        "Name",
-        "ClientRequestToken"
-      ],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel request.</p>"
-        },
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the channel.</p>"
-        },
-        "Mode":{
-          "shape":"ChannelMode",
-          "documentation":"<p>The channel mode: <code>UNRESTRICTED</code> or <code>RESTRICTED</code>. Administrators, moderators, and channel members can add themselves and other members to unrestricted channels. Only administrators and moderators can add members to restricted channels.</p>"
-        },
-        "Privacy":{
-          "shape":"ChannelPrivacy",
-          "documentation":"<p>The channel's privacy level: <code>PUBLIC</code> or <code>PRIVATE</code>. Private channels aren't discoverable by users outside the channel. Public channels are discoverable by anyone in the <code>AppInstance</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the creation request. Limited to 1KB and UTF-8.</p>"
-        },
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The client token for the request. An <code>Idempotency</code> token.</p>",
-          "idempotencyToken":true
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags for the creation request.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "CreateChannelResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        }
-      }
-    },
-    "CreateMediaCapturePipelineRequest":{
-      "type":"structure",
-      "required":[
-        "SourceType",
-        "SourceArn",
-        "SinkType",
-        "SinkArn"
-      ],
-      "members":{
-        "SourceType":{
-          "shape":"MediaPipelineSourceType",
-          "documentation":"<p>Source type from which the media artifacts will be captured. A Chime SDK Meeting is the only supported source.</p>"
-        },
-        "SourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>ARN of the source from which the media artifacts are captured.</p>"
-        },
-        "SinkType":{
-          "shape":"MediaPipelineSinkType",
-          "documentation":"<p>Destination type to which the media artifacts are saved. You must use an S3 bucket. </p>"
-        },
-        "SinkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the sink type.</p>"
-        },
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for the client request. The token makes the API request idempotent. Use a different token for different media pipeline requests.</p>",
-          "idempotencyToken":true
-        },
-        "ChimeSdkMeetingConfiguration":{
-          "shape":"ChimeSdkMeetingConfiguration",
-          "documentation":"<p>The configuration for a specified media capture pipeline. <code>SourceType</code> must be <code>ChimeSdkMeeting</code>.</p>"
-        }
-      }
-    },
-    "CreateMediaCapturePipelineResponse":{
-      "type":"structure",
-      "members":{
-        "MediaCapturePipeline":{
-          "shape":"MediaCapturePipeline",
-          "documentation":"<p>A media capture pipeline object, the ID, source type, source ARN, sink type, and sink ARN of a media capture pipeline object.</p>"
-        }
-      }
-    },
     "CreateMeetingDialOutRequest":{
       "type":"structure",
       "required":[
@@ -6015,104 +1772,6 @@
         }
       }
     },
-    "CreateMeetingRequest":{
-      "type":"structure",
-      "required":["ClientRequestToken"],
-      "members":{
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for the client request. Use a different token for different meetings.</p>",
-          "idempotencyToken":true
-        },
-        "ExternalMeetingId":{
-          "shape":"ExternalMeetingIdType",
-          "documentation":"<p>The external meeting ID.</p>"
-        },
-        "MeetingHostId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>Reserved.</p>"
-        },
-        "MediaRegion":{
-          "shape":"String",
-          "documentation":"<p> The Region in which to create the meeting. Default: <code>us-east-1</code>. </p> <p> Available values: <code>af-south-1</code> , <code>ap-northeast-1</code> , <code>ap-northeast-2</code> , <code>ap-south-1</code> , <code>ap-southeast-1</code> , <code>ap-southeast-2</code> , <code>ca-central-1</code> , <code>eu-central-1</code> , <code>eu-north-1</code> , <code>eu-south-1</code> , <code>eu-west-1</code> , <code>eu-west-2</code> , <code>eu-west-3</code> , <code>sa-east-1</code> , <code>us-east-1</code> , <code>us-east-2</code> , <code>us-west-1</code> , <code>us-west-2</code> . </p>"
-        },
-        "Tags":{
-          "shape":"MeetingTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        },
-        "NotificationsConfiguration":{
-          "shape":"MeetingNotificationConfiguration",
-          "documentation":"<p>The configuration for resource targets to receive notifications when meeting and attendee events occur.</p>"
-        }
-      }
-    },
-    "CreateMeetingResponse":{
-      "type":"structure",
-      "members":{
-        "Meeting":{
-          "shape":"Meeting",
-          "documentation":"<p> The meeting information, including the meeting ID and <code>MediaPlacement</code> . </p>"
-        }
-      }
-    },
-    "CreateMeetingWithAttendeesRequest":{
-      "type":"structure",
-      "required":["ClientRequestToken"],
-      "members":{
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for the client request. Use a different token for different meetings.</p>",
-          "idempotencyToken":true
-        },
-        "ExternalMeetingId":{
-          "shape":"ExternalMeetingIdType",
-          "documentation":"<p>The external meeting ID.</p>"
-        },
-        "MeetingHostId":{
-          "shape":"ExternalUserIdType",
-          "documentation":"<p>Reserved.</p>"
-        },
-        "MediaRegion":{
-          "shape":"String",
-          "documentation":"<p> The Region in which to create the meeting. Default: <code>us-east-1</code> . </p> <p> Available values: <code>af-south-1</code> , <code>ap-northeast-1</code> , <code>ap-northeast-2</code> , <code>ap-south-1</code> , <code>ap-southeast-1</code> , <code>ap-southeast-2</code> , <code>ca-central-1</code> , <code>eu-central-1</code> , <code>eu-north-1</code> , <code>eu-south-1</code> , <code>eu-west-1</code> , <code>eu-west-2</code> , <code>eu-west-3</code> , <code>sa-east-1</code> , <code>us-east-1</code> , <code>us-east-2</code> , <code>us-west-1</code> , <code>us-west-2</code> . </p>"
-        },
-        "Tags":{
-          "shape":"MeetingTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        },
-        "NotificationsConfiguration":{
-          "shape":"MeetingNotificationConfiguration",
-          "documentation":"<p>The resource target configurations for receiving Amazon Chime SDK meeting and attendee event notifications. The Amazon Chime SDK supports resource targets located in the US East (N. Virginia) AWS Region (us-east-1).</p>"
-        },
-        "Attendees":{
-          "shape":"CreateMeetingWithAttendeesRequestItemList",
-          "documentation":"<p>The request containing the attendees to create.</p>"
-        }
-      }
-    },
-    "CreateMeetingWithAttendeesRequestItemList":{
-      "type":"list",
-      "member":{"shape":"CreateAttendeeRequestItem"},
-      "max":10,
-      "min":1
-    },
-    "CreateMeetingWithAttendeesResponse":{
-      "type":"structure",
-      "members":{
-        "Meeting":{
-          "shape":"Meeting",
-          "documentation":"<p>A meeting created using the Amazon Chime SDK.</p>"
-        },
-        "Attendees":{
-          "shape":"AttendeeList",
-          "documentation":"<p>The attendee information, including attendees IDs and join tokens.</p>"
-        },
-        "Errors":{
-          "shape":"BatchCreateAttendeeErrorList",
-          "documentation":"<p>If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.</p>"
-        }
-      }
-    },
     "CreatePhoneNumberOrderRequest":{
       "type":"structure",
       "required":[
@@ -6139,59 +1798,6 @@
         }
       }
     },
-    "CreateProxySessionRequest":{
-      "type":"structure",
-      "required":[
-        "ParticipantPhoneNumbers",
-        "Capabilities",
-        "VoiceConnectorId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "ParticipantPhoneNumbers":{
-          "shape":"ParticipantPhoneNumberList",
-          "documentation":"<p>The participant phone numbers.</p>"
-        },
-        "Name":{
-          "shape":"ProxySessionNameString",
-          "documentation":"<p>The name of the proxy session.</p>"
-        },
-        "ExpiryMinutes":{
-          "shape":"PositiveInteger",
-          "documentation":"<p>The number of minutes allowed for the proxy session.</p>"
-        },
-        "Capabilities":{
-          "shape":"CapabilityList",
-          "documentation":"<p>The proxy session capabilities.</p>"
-        },
-        "NumberSelectionBehavior":{
-          "shape":"NumberSelectionBehavior",
-          "documentation":"<p>The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.</p>"
-        },
-        "GeoMatchLevel":{
-          "shape":"GeoMatchLevel",
-          "documentation":"<p>The preference for matching the country or area code of the proxy phone number with that of the first participant.</p>"
-        },
-        "GeoMatchParams":{
-          "shape":"GeoMatchParams",
-          "documentation":"<p>The country and area code for the proxy phone number.</p>"
-        }
-      }
-    },
-    "CreateProxySessionResponse":{
-      "type":"structure",
-      "members":{
-        "ProxySession":{
-          "shape":"ProxySession",
-          "documentation":"<p>The proxy session details.</p>"
-        }
-      }
-    },
     "CreateRoomMembershipRequest":{
       "type":"structure",
       "required":[
@@ -6264,114 +1870,6 @@
         }
       }
     },
-    "CreateSipMediaApplicationCallRequest":{
-      "type":"structure",
-      "required":[
-        "FromPhoneNumber",
-        "ToPhoneNumber",
-        "SipMediaApplicationId"
-      ],
-      "members":{
-        "FromPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The phone number that a user calls from. This is a phone number in your Amazon Chime phone number inventory.</p>"
-        },
-        "ToPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The phone number that the service should call.</p>"
-        },
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the SIP media application.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        },
-        "SipHeaders":{
-          "shape":"SipHeadersMap",
-          "documentation":"<p>The SIP headers added to an outbound call leg.</p>"
-        }
-      }
-    },
-    "CreateSipMediaApplicationCallResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationCall":{
-          "shape":"SipMediaApplicationCall",
-          "documentation":"<p>The actual call.</p>"
-        }
-      }
-    },
-    "CreateSipMediaApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "AwsRegion",
-        "Name",
-        "Endpoints"
-      ],
-      "members":{
-        "AwsRegion":{
-          "shape":"String",
-          "documentation":"<p>The AWS Region assigned to the SIP media application.</p>"
-        },
-        "Name":{
-          "shape":"SipMediaApplicationName",
-          "documentation":"<p>The SIP media application name.</p>"
-        },
-        "Endpoints":{
-          "shape":"SipMediaApplicationEndpointList",
-          "documentation":"<p>List of endpoints (Lambda Amazon Resource Names) specified for the SIP media application. Currently, only one endpoint is supported.</p>"
-        }
-      }
-    },
-    "CreateSipMediaApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplication":{
-          "shape":"SipMediaApplication",
-          "documentation":"<p>The SIP media application details.</p>"
-        }
-      }
-    },
-    "CreateSipRuleRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "TriggerType",
-        "TriggerValue",
-        "TargetApplications"
-      ],
-      "members":{
-        "Name":{
-          "shape":"SipRuleName",
-          "documentation":"<p>The name of the SIP rule.</p>"
-        },
-        "TriggerType":{
-          "shape":"SipRuleTriggerType",
-          "documentation":"<p>The type of trigger assigned to the SIP rule in <code>TriggerValue</code>, currently <code>RequestUriHostname</code> or <code>ToPhoneNumber</code>.</p>"
-        },
-        "TriggerValue":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>If <code>TriggerType</code> is <code>RequestUriHostname</code>, the value can be the outbound host name of an Amazon Chime Voice Connector. If <code>TriggerType</code> is <code>ToPhoneNumber</code>, the value can be a customer-owned phone number in the E164 format. The <code>SipMediaApplication</code> specified in the <code>SipRule</code> is triggered if the request URI in an incoming SIP request matches the <code>RequestUriHostname</code>, or if the <code>To</code> header in the incoming SIP request matches the <code>ToPhoneNumber</code> value.</p>"
-        },
-        "Disabled":{
-          "shape":"NullableBoolean",
-          "documentation":"<p>Enables or disables a rule. You must disable rules before you can delete them.</p>"
-        },
-        "TargetApplications":{
-          "shape":"SipRuleTargetApplicationList",
-          "documentation":"<p>List of SIP media applications with priority and AWS Region. Only one SIP application per AWS Region can be used.</p>"
-        }
-      }
-    },
-    "CreateSipRuleResponse":{
-      "type":"structure",
-      "members":{
-        "SipRule":{
-          "shape":"SipRule",
-          "documentation":"<p>Returns the SIP rule information, including the rule ID, triggers, and target applications.</p>"
-        }
-      }
-    },
     "CreateUserRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -6405,107 +1903,6 @@
         }
       }
     },
-    "CreateVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"VoiceConnectorGroupName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector group.</p>"
-        },
-        "VoiceConnectorItems":{
-          "shape":"VoiceConnectorItemList",
-          "documentation":"<p>The Amazon Chime Voice Connectors to route inbound calls to.</p>"
-        }
-      }
-    },
-    "CreateVoiceConnectorGroupResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorGroup":{
-          "shape":"VoiceConnectorGroup",
-          "documentation":"<p>The Amazon Chime Voice Connector group details.</p>"
-        }
-      }
-    },
-    "CreateVoiceConnectorRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "RequireEncryption"
-      ],
-      "members":{
-        "Name":{
-          "shape":"VoiceConnectorName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector.</p>"
-        },
-        "AwsRegion":{
-          "shape":"VoiceConnectorAwsRegion",
-          "documentation":"<p> The AWS Region in which the Amazon Chime Voice Connector is created. Default value: <code>us-east-1</code> . </p>"
-        },
-        "RequireEncryption":{
-          "shape":"Boolean",
-          "documentation":"<p>When enabled, requires encryption for the Amazon Chime Voice Connector.</p>"
-        }
-      }
-    },
-    "CreateVoiceConnectorResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnector":{
-          "shape":"VoiceConnector",
-          "documentation":"<p>The Amazon Chime Voice Connector details.</p>"
-        }
-      }
-    },
-    "Credential":{
-      "type":"structure",
-      "members":{
-        "Username":{
-          "shape":"SensitiveString",
-          "documentation":"<p>The RFC2617 compliant user name associated with the SIP credentials, in US-ASCII format.</p>"
-        },
-        "Password":{
-          "shape":"SensitiveString",
-          "documentation":"<p>The RFC2617 compliant password associated with the SIP credentials, in US-ASCII format.</p>"
-        }
-      },
-      "documentation":"<p>The SIP credentials used to authenticate requests to your Amazon Chime Voice Connector.</p>"
-    },
-    "CredentialList":{
-      "type":"list",
-      "member":{"shape":"Credential"}
-    },
-    "DNISEmergencyCallingConfiguration":{
-      "type":"structure",
-      "required":[
-        "EmergencyPhoneNumber",
-        "CallingCountry"
-      ],
-      "members":{
-        "EmergencyPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The DNIS phone number to route emergency calls to, in E.164 format.</p>"
-        },
-        "TestPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The DNIS phone number to route test emergency calls to, in E.164 format.</p>"
-        },
-        "CallingCountry":{
-          "shape":"Alpha2CountryCode",
-          "documentation":"<p>The country from which emergency calls are allowed, in ISO 3166-1 alpha-2 format.</p>"
-        }
-      },
-      "documentation":"<p>The Dialed Number Identification Service (DNIS) emergency calling configuration details associated with an Amazon Chime Voice Connector's emergency calling configuration.</p>"
-    },
-    "DNISEmergencyCallingConfigurationList":{
-      "type":"list",
-      "member":{"shape":"DNISEmergencyCallingConfiguration"}
-    },
-    "DataRetentionInHours":{
-      "type":"integer",
-      "min":0
-    },
     "DeleteAccountRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -6520,212 +1917,7 @@
     },
     "DeleteAccountResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAppInstanceAdminRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceAdminArn",
-        "AppInstanceArn"
-      ],
-      "members":{
-        "AppInstanceAdminArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>'s administrator.</p>",
-          "location":"uri",
-          "locationName":"appInstanceAdminArn"
-        },
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "DeleteAppInstanceRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "DeleteAppInstanceStreamingConfigurationsRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the streaming configurations being deleted.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "DeleteAppInstanceUserRequest":{
-      "type":"structure",
-      "required":["AppInstanceUserArn"],
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the user request being deleted.</p>",
-          "location":"uri",
-          "locationName":"appInstanceUserArn"
-        }
-      }
-    },
-    "DeleteAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "AttendeeId"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>",
-          "location":"uri",
-          "locationName":"attendeeId"
-        }
-      }
-    },
-    "DeleteChannelBanRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel from which the <code>AppInstanceUser</code> was banned.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code> that you want to reinstate.</p>",
-          "location":"uri",
-          "locationName":"memberArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DeleteChannelMembershipRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel from which you want to remove the user.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member that you're removing from the channel.</p>",
-          "location":"uri",
-          "locationName":"memberArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DeleteChannelMessageRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MessageId"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of the message being deleted.</p>",
-          "location":"uri",
-          "locationName":"messageId"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DeleteChannelModeratorRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "ChannelModeratorArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChannelModeratorArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the moderator being deleted.</p>",
-          "location":"uri",
-          "locationName":"channelModeratorArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DeleteChannelRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel being deleted.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
+      "members":{}
     },
     "DeleteEventsConfigurationRequest":{
       "type":"structure",
@@ -6748,30 +1940,6 @@
         }
       }
     },
-    "DeleteMediaCapturePipelineRequest":{
-      "type":"structure",
-      "required":["MediaPipelineId"],
-      "members":{
-        "MediaPipelineId":{
-          "shape":"GuidString",
-          "documentation":"<p>The ID of the media capture pipeline being deleted. </p>",
-          "location":"uri",
-          "locationName":"mediaPipelineId"
-        }
-      }
-    },
-    "DeleteMeetingRequest":{
-      "type":"structure",
-      "required":["MeetingId"],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        }
-      }
-    },
     "DeletePhoneNumberRequest":{
       "type":"structure",
       "required":["PhoneNumberId"],
@@ -6784,27 +1952,6 @@
         }
       }
     },
-    "DeleteProxySessionRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "ProxySessionId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "ProxySessionId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The proxy session ID.</p>",
-          "location":"uri",
-          "locationName":"proxySessionId"
-        }
-      }
-    },
     "DeleteRoomMembershipRequest":{
       "type":"structure",
       "required":[
@@ -6854,412 +2001,6 @@
         }
       }
     },
-    "DeleteSipMediaApplicationRequest":{
-      "type":"structure",
-      "required":["SipMediaApplicationId"],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        }
-      }
-    },
-    "DeleteSipRuleRequest":{
-      "type":"structure",
-      "required":["SipRuleId"],
-      "members":{
-        "SipRuleId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP rule ID.</p>",
-          "location":"uri",
-          "locationName":"sipRuleId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorEmergencyCallingConfigurationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorGroupId"],
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorGroupId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorOriginationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorProxyRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorStreamingConfigurationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DeleteVoiceConnectorTerminationCredentialsRequest":{
-      "type":"structure",
-      "required":[
-        "Usernames",
-        "VoiceConnectorId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Usernames":{
-          "shape":"SensitiveStringList",
-          "documentation":"<p>The RFC2617 compliant username associated with the SIP credentials, in US-ASCII format.</p>"
-        }
-      }
-    },
-    "DeleteVoiceConnectorTerminationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "DescribeAppInstanceAdminRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceAdminArn",
-        "AppInstanceArn"
-      ],
-      "members":{
-        "AppInstanceAdminArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceAdmin</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceAdminArn"
-        },
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "DescribeAppInstanceAdminResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceAdmin":{
-          "shape":"AppInstanceAdmin",
-          "documentation":"<p>The ARN and name of the <code>AppInstanceUser</code>, the ARN of the <code>AppInstance</code>, and the created and last-updated timestamps. All timestamps use epoch milliseconds.</p>"
-        }
-      }
-    },
-    "DescribeAppInstanceRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "DescribeAppInstanceResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstance":{
-          "shape":"AppInstance",
-          "documentation":"<p>The ARN, metadata, created and last-updated timestamps, and the name of the <code>AppInstance</code>. All timestamps use epoch milliseconds.</p>"
-        }
-      }
-    },
-    "DescribeAppInstanceUserRequest":{
-      "type":"structure",
-      "required":["AppInstanceUserArn"],
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceUserArn"
-        }
-      }
-    },
-    "DescribeAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUser":{
-          "shape":"AppInstanceUser",
-          "documentation":"<p>The name of the <code>AppInstanceUser</code>.</p>"
-        }
-      }
-    },
-    "DescribeChannelBanRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel from which the user is banned.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member being banned.</p>",
-          "location":"uri",
-          "locationName":"memberArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelBanResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelBan":{
-          "shape":"ChannelBan",
-          "documentation":"<p>The details of the ban.</p>"
-        }
-      }
-    },
-    "DescribeChannelMembershipForAppInstanceUserRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "AppInstanceUserArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel to which the user belongs.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the user in a channel.</p>",
-          "location":"querystring",
-          "locationName":"app-instance-user-arn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelMembershipForAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelMembership":{
-          "shape":"ChannelMembershipForAppInstanceUserSummary",
-          "documentation":"<p>The channel to which a user belongs.</p>"
-        }
-      }
-    },
-    "DescribeChannelMembershipRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MemberArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MemberArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the member.</p>",
-          "location":"uri",
-          "locationName":"memberArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelMembershipResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelMembership":{
-          "shape":"ChannelMembership",
-          "documentation":"<p>The details of the membership.</p>"
-        }
-      }
-    },
-    "DescribeChannelModeratedByAppInstanceUserRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "AppInstanceUserArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the moderated channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code> in the moderated channel.</p>",
-          "location":"querystring",
-          "locationName":"app-instance-user-arn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelModeratedByAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "Channel":{
-          "shape":"ChannelModeratedByAppInstanceUserSummary",
-          "documentation":"<p>The moderated channel.</p>"
-        }
-      }
-    },
-    "DescribeChannelModeratorRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "ChannelModeratorArn"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChannelModeratorArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel moderator.</p>",
-          "location":"uri",
-          "locationName":"channelModeratorArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelModeratorResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelModerator":{
-          "shape":"ChannelModerator",
-          "documentation":"<p>The details of the channel moderator.</p>"
-        }
-      }
-    },
-    "DescribeChannelRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "DescribeChannelResponse":{
-      "type":"structure",
-      "members":{
-        "Channel":{
-          "shape":"Channel",
-          "documentation":"<p>The channel details.</p>"
-        }
-      }
-    },
     "DisassociatePhoneNumberFromUserRequest":{
       "type":"structure",
       "required":[
@@ -7283,64 +2024,7 @@
     },
     "DisassociatePhoneNumberFromUserResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "DisassociatePhoneNumbersFromVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorGroupId",
-        "E164PhoneNumbers"
-      ],
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorGroupId"
-        },
-        "E164PhoneNumbers":{
-          "shape":"E164PhoneNumberList",
-          "documentation":"<p>List of phone numbers, in E.164 format.</p>"
-        }
-      }
-    },
-    "DisassociatePhoneNumbersFromVoiceConnectorGroupResponse":{
-      "type":"structure",
-      "members":{
-        "PhoneNumberErrors":{
-          "shape":"PhoneNumberErrorList",
-          "documentation":"<p>If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.</p>"
-        }
-      }
-    },
-    "DisassociatePhoneNumbersFromVoiceConnectorRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "E164PhoneNumbers"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "E164PhoneNumbers":{
-          "shape":"E164PhoneNumberList",
-          "documentation":"<p>List of phone numbers, in E.164 format.</p>"
-        }
-      }
-    },
-    "DisassociatePhoneNumbersFromVoiceConnectorResponse":{
-      "type":"structure",
-      "members":{
-        "PhoneNumberErrors":{
-          "shape":"PhoneNumberErrorList",
-          "documentation":"<p>If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.</p>"
-        }
-      }
+      "members":{}
     },
     "DisassociateSigninDelegateGroupsFromAccountRequest":{
       "type":"structure",
@@ -7363,8 +2047,7 @@
     },
     "DisassociateSigninDelegateGroupsFromAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "E164PhoneNumber":{
       "type":"string",
@@ -7388,121 +2071,6 @@
         "Failed"
       ]
     },
-    "EmergencyCallingConfiguration":{
-      "type":"structure",
-      "members":{
-        "DNIS":{
-          "shape":"DNISEmergencyCallingConfigurationList",
-          "documentation":"<p>The Dialed Number Identification Service (DNIS) emergency calling configuration details.</p>"
-        }
-      },
-      "documentation":"<p>The emergency calling configuration details associated with an Amazon Chime Voice Connector.</p>"
-    },
-    "EngineTranscribeMedicalSettings":{
-      "type":"structure",
-      "required":[
-        "LanguageCode",
-        "Specialty",
-        "Type"
-      ],
-      "members":{
-        "LanguageCode":{
-          "shape":"TranscribeMedicalLanguageCode",
-          "documentation":"<p>The language code specified for the Amazon Transcribe Medical engine.</p>"
-        },
-        "Specialty":{
-          "shape":"TranscribeMedicalSpecialty",
-          "documentation":"<p>The specialty specified for the Amazon Transcribe Medical engine.</p>"
-        },
-        "Type":{
-          "shape":"TranscribeMedicalType",
-          "documentation":"<p>The type of transcription.</p>"
-        },
-        "VocabularyName":{
-          "shape":"String",
-          "documentation":"<p>The name of the vocabulary passed to Amazon Transcribe Medical.</p>"
-        },
-        "Region":{
-          "shape":"TranscribeMedicalRegion",
-          "documentation":"<p>The AWS Region passed to Amazon Transcribe Medical. If you don't specify a Region, Amazon Chime uses the meeting's Region.</p>"
-        },
-        "ContentIdentificationType":{
-          "shape":"TranscribeMedicalContentIdentificationType",
-          "documentation":"<p>Labels all personally identifiable information (PII) identified in your transcript. If you don't include <code>PiiEntityTypes</code>, all PII is identified.</p> <p>You can’t set <code>ContentIdentificationType</code> and <code>ContentRedactionType</code>.</p>"
-        }
-      },
-      "documentation":"<p>Settings specific to the Amazon Transcribe Medical engine.</p>"
-    },
-    "EngineTranscribeSettings":{
-      "type":"structure",
-      "members":{
-        "LanguageCode":{
-          "shape":"TranscribeLanguageCode",
-          "documentation":"<p>Specify the language code that represents the language spoken.</p> <p>If you're unsure of the language spoken in your audio, consider using <code>IdentifyLanguage</code> to enable automatic language identification.</p>"
-        },
-        "VocabularyFilterMethod":{
-          "shape":"TranscribeVocabularyFilterMethod",
-          "documentation":"<p>Specify how you want your vocabulary filter applied to your transcript.</p> <p> To replace words with <code>***</code>, choose <code>mask</code>.</p> <p>To delete words, choose <code>remove</code>.</p> <p>To flag words without changing them, choose <code>tag</code>.</p>"
-        },
-        "VocabularyFilterName":{
-          "shape":"String",
-          "documentation":"<p>Specify the name of the custom vocabulary filter that you want to use when processing your transcription. Note that vocabulary filter names are case sensitive. </p> <p>If you use Amazon Transcribe in multiple Regions, the vocabulary filter must be available in Amazon Transcribe in each Region.</p> <p>If you include <code>IdentifyLanguage</code> and want to use one or more vocabulary filters with your transcription, use the <code>VocabularyFilterNames</code> parameter instead.</p>"
-        },
-        "VocabularyName":{
-          "shape":"String",
-          "documentation":"<p>Specify the name of the custom vocabulary that you want to use when processing your transcription. Note that vocabulary names are case sensitive.</p> <p>If you use Amazon Transcribe multiple Regions, the vocabulary must be available in Amazon Transcribe in each Region.</p> <p>If you include <code>IdentifyLanguage</code> and want to use one or more custom vocabularies with your transcription, use the <code>VocabularyNames</code> parameter instead.</p>"
-        },
-        "Region":{
-          "shape":"TranscribeRegion",
-          "documentation":"<p>The AWS Region in which to use Amazon Transcribe.</p> <p>If you don't specify a Region, then the <code>MediaRegion</code> parameter of the <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_CreateMeeting.html\">CreateMeeting.html</a> API will be used. However, if Amazon Transcribe is not available in the <code>MediaRegion</code>, then a TranscriptFailed event is sent.</p> <p>Use <code>auto</code> to use Amazon Transcribe in a Region near the meeting’s <code>MediaRegion</code>. For more information, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/transcription-options.html#choose-region\">Choosing a transcription Region</a> in the <i>Amazon Chime SDK Developer Guide</i>.</p>"
-        },
-        "EnablePartialResultsStabilization":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables partial result stabilization for your transcription. Partial result stabilization can reduce latency in your output, but may impact accuracy.</p>"
-        },
-        "PartialResultsStability":{
-          "shape":"TranscribePartialResultsStability",
-          "documentation":"<p>Specify the level of stability to use when you enable partial results stabilization (<code>EnablePartialResultsStabilization</code>).</p> <p>Low stability provides the highest accuracy. High stability transcribes faster, but with slightly lower accuracy.</p>"
-        },
-        "ContentIdentificationType":{
-          "shape":"TranscribeContentIdentificationType",
-          "documentation":"<p>Labels all personally identifiable information (PII) identified in your transcript. If you don't include <code>PiiEntityTypes</code>, all PII is identified.</p> <p>You can’t set <code>ContentIdentificationType</code> and <code>ContentRedactionType</code>.</p>"
-        },
-        "ContentRedactionType":{
-          "shape":"TranscribeContentRedactionType",
-          "documentation":"<p>Content redaction is performed at the segment level. If you don't include <code>PiiEntityTypes</code>, all PII is redacted.</p> <p>You can’t set <code>ContentIdentificationType</code> and <code>ContentRedactionType</code>.</p>"
-        },
-        "PiiEntityTypes":{
-          "shape":"TranscribePiiEntityTypes",
-          "documentation":"<p>Specify which types of personally identifiable information (PII) you want to redact in your transcript. You can include as many types as you'd like, or you can select <code>ALL</code>.</p> <p>Values must be comma-separated and can include: <code>ADDRESS</code>, <code>BANK_ACCOUNT_NUMBER</code>, <code>BANK_ROUTING</code>, <code>CREDIT_DEBIT_CVV</code>, <code>CREDIT_DEBIT_EXPIRY</code> <code>CREDIT_DEBIT_NUMBER</code>, <code>EMAIL</code>,<code>NAME</code>, <code>PHONE</code>, <code>PIN</code>, <code>SSN</code>, or <code>ALL</code>.</p> <p>Note that if you include <code>PiiEntityTypes</code>, you must also include <code>ContentIdentificationType</code> or <code>ContentRedactionType</code>.</p> <p>If you include <code>ContentRedactionType</code> or <code>ContentIdentificationType</code>, but do not include <code>PiiEntityTypes</code>, all PII is redacted or identified.</p>"
-        },
-        "LanguageModelName":{
-          "shape":"TranscribeLanguageModelName",
-          "documentation":"<p>Specify the name of the custom language model that you want to use when processing your transcription. Note that language model names are case sensitive.</p> <p>The language of the specified language model must match the language code. If the languages don't match, the custom language model isn't applied. There are no errors or warnings associated with a language mismatch.</p> <p>If you use Amazon Transcribe in multiple Regions, the custom language model must be available in Amazon Transcribe in each Region.</p>"
-        },
-        "IdentifyLanguage":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables automatic language identification for your transcription.</p> <p>If you include <code>IdentifyLanguage</code>, you can optionally use <code>LanguageOptions</code> to include a list of language codes that you think may be present in your audio stream. Including language options can improve transcription accuracy.</p> <p>You can also use <code>PreferredLanguage</code> to include a preferred language. Doing so can help Amazon Transcribe identify the language faster.</p> <p>You must include either <code>LanguageCode</code> or <code>IdentifyLanguage</code>.</p> <p>Language identification can't be combined with custom language models or redaction.</p>"
-        },
-        "LanguageOptions":{
-          "shape":"TranscribeLanguageOptions",
-          "documentation":"<p>Specify two or more language codes that represent the languages you think may be present in your media; including more than five is not recommended. If you're unsure what languages are present, do not include this parameter.</p> <p>Including language options can improve the accuracy of language identification.</p> <p>If you include <code>LanguageOptions</code>, you must also include <code>IdentifyLanguage</code>.</p> <important> <p>You can only include one language dialect per language. For example, you cannot include <code>en-US</code> and <code>en-AU</code>.</p> </important>"
-        },
-        "PreferredLanguage":{
-          "shape":"TranscribeLanguageCode",
-          "documentation":"<p>Specify a preferred language from the subset of languages codes you specified in <code>LanguageOptions</code>.</p> <p>You can only use this parameter if you include <code>IdentifyLanguage</code> and <code>LanguageOptions</code>.</p>"
-        },
-        "VocabularyNames":{
-          "shape":"TranscribeVocabularyNamesOrFilterNamesString",
-          "documentation":"<p>Specify the names of the custom vocabularies that you want to use when processing your transcription. Note that vocabulary names are case sensitive.</p> <p>If you use Amazon Transcribe in multiple Regions, the vocabulary must be available in Amazon Transcribe in each Region.</p> <p>If you don't include <code>IdentifyLanguage</code> and want to use a custom vocabulary with your transcription, use the <code>VocabularyName</code> parameter instead.</p>"
-        },
-        "VocabularyFilterNames":{
-          "shape":"TranscribeVocabularyNamesOrFilterNamesString",
-          "documentation":"<p>Specify the names of the custom vocabulary filters that you want to use when processing your transcription. Note that vocabulary filter names are case sensitive.</p> <p>If you use Amazon Transcribe in multiple Regions, the vocabulary filter must be available in Amazon Transcribe in each Region.</p> <p> If you're <i>not</i> including <code>IdentifyLanguage</code> and want to use a custom vocabulary filter with your transcription, use the <code>VocabularyFilterName</code> parameter instead.</p>"
-        }
-      },
-      "documentation":"<p>Settings specific for Amazon Transcribe as the live transcription engine.</p> <p>If you specify an invalid combination of parameters, a <code>TranscriptFailed</code> event will be sent with the contents of the <code>BadRequestException</code> generated by Amazon Transcribe. For more information on each parameter and which combinations are valid, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/APIReference/API_streaming_StartStreamTranscription.html\">StartStreamTranscription</a> API in the <i>Amazon Transcribe Developer Guide</i>.</p>"
-    },
     "ErrorCode":{
       "type":"string",
       "enum":[
@@ -7541,23 +2109,6 @@
       },
       "documentation":"<p>The configuration that allows a bot to receive outgoing events. Can be either an HTTPS endpoint or a Lambda function ARN.</p>"
     },
-    "ExternalMeetingIdType":{
-      "type":"string",
-      "max":64,
-      "min":2,
-      "sensitive":true
-    },
-    "ExternalUserIdList":{
-      "type":"list",
-      "member":{"shape":"ExternalUserIdType"},
-      "min":1
-    },
-    "ExternalUserIdType":{
-      "type":"string",
-      "max":64,
-      "min":2,
-      "sensitive":true
-    },
     "ForbiddenException":{
       "type":"structure",
       "members":{
@@ -7568,37 +2119,6 @@
       "error":{"httpStatusCode":403},
       "exception":true
     },
-    "FunctionArn":{
-      "type":"string",
-      "max":10000,
-      "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?",
-      "sensitive":true
-    },
-    "GeoMatchLevel":{
-      "type":"string",
-      "enum":[
-        "Country",
-        "AreaCode"
-      ]
-    },
-    "GeoMatchParams":{
-      "type":"structure",
-      "required":[
-        "Country",
-        "AreaCode"
-      ],
-      "members":{
-        "Country":{
-          "shape":"Country",
-          "documentation":"<p>The country.</p>"
-        },
-        "AreaCode":{
-          "shape":"AreaCode",
-          "documentation":"<p>The area code.</p>"
-        }
-      },
-      "documentation":"<p>The country and area code for a proxy phone number in a proxy phone session.</p>"
-    },
     "GetAccountRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -7641,82 +2161,6 @@
         }
       }
     },
-    "GetAppInstanceRetentionSettingsRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "GetAppInstanceRetentionSettingsResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceRetentionSettings":{
-          "shape":"AppInstanceRetentionSettings",
-          "documentation":"<p>The retention settings for the <code>AppInstance</code>.</p>"
-        },
-        "InitiateDeletionTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp representing the time at which the specified items are retained, in Epoch Seconds.</p>"
-        }
-      }
-    },
-    "GetAppInstanceStreamingConfigurationsRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        }
-      }
-    },
-    "GetAppInstanceStreamingConfigurationsResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceStreamingConfigurations":{
-          "shape":"AppInstanceStreamingConfigurationList",
-          "documentation":"<p>The streaming settings.</p>"
-        }
-      }
-    },
-    "GetAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "AttendeeId"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>",
-          "location":"uri",
-          "locationName":"attendeeId"
-        }
-      }
-    },
-    "GetAttendeeResponse":{
-      "type":"structure",
-      "members":{
-        "Attendee":{
-          "shape":"Attendee",
-          "documentation":"<p>The Amazon Chime SDK attendee information.</p>"
-        }
-      }
-    },
     "GetBotRequest":{
       "type":"structure",
       "required":[
@@ -7747,42 +2191,6 @@
         }
       }
     },
-    "GetChannelMessageRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MessageId"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of the message.</p>",
-          "location":"uri",
-          "locationName":"messageId"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "GetChannelMessageResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelMessage":{
-          "shape":"ChannelMessage",
-          "documentation":"<p>The details of and content in the message.</p>"
-        }
-      }
-    },
     "GetEventsConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -7826,62 +2234,6 @@
         }
       }
     },
-    "GetMediaCapturePipelineRequest":{
-      "type":"structure",
-      "required":["MediaPipelineId"],
-      "members":{
-        "MediaPipelineId":{
-          "shape":"GuidString",
-          "documentation":"<p>The ID of the pipeline that you want to get.</p>",
-          "location":"uri",
-          "locationName":"mediaPipelineId"
-        }
-      }
-    },
-    "GetMediaCapturePipelineResponse":{
-      "type":"structure",
-      "members":{
-        "MediaCapturePipeline":{
-          "shape":"MediaCapturePipeline",
-          "documentation":"<p>The media capture pipeline object.</p>"
-        }
-      }
-    },
-    "GetMeetingRequest":{
-      "type":"structure",
-      "required":["MeetingId"],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        }
-      }
-    },
-    "GetMeetingResponse":{
-      "type":"structure",
-      "members":{
-        "Meeting":{
-          "shape":"Meeting",
-          "documentation":"<p>The Amazon Chime SDK meeting information.</p>"
-        }
-      }
-    },
-    "GetMessagingSessionEndpointRequest":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "GetMessagingSessionEndpointResponse":{
-      "type":"structure",
-      "members":{
-        "Endpoint":{
-          "shape":"MessagingSessionEndpoint",
-          "documentation":"<p>The endpoint returned in the response.</p>"
-        }
-      }
-    },
     "GetPhoneNumberOrderRequest":{
       "type":"structure",
       "required":["PhoneNumberOrderId"],
@@ -7937,36 +2289,6 @@
         }
       }
     },
-    "GetProxySessionRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "ProxySessionId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "ProxySessionId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The proxy session ID.</p>",
-          "location":"uri",
-          "locationName":"proxySessionId"
-        }
-      }
-    },
-    "GetProxySessionResponse":{
-      "type":"structure",
-      "members":{
-        "ProxySession":{
-          "shape":"ProxySession",
-          "documentation":"<p>The proxy session details.</p>"
-        }
-      }
-    },
     "GetRetentionSettingsRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -8022,69 +2344,6 @@
         }
       }
     },
-    "GetSipMediaApplicationLoggingConfigurationRequest":{
-      "type":"structure",
-      "required":["SipMediaApplicationId"],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        }
-      }
-    },
-    "GetSipMediaApplicationLoggingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationLoggingConfiguration":{
-          "shape":"SipMediaApplicationLoggingConfiguration",
-          "documentation":"<p>The actual logging configuration.</p>"
-        }
-      }
-    },
-    "GetSipMediaApplicationRequest":{
-      "type":"structure",
-      "required":["SipMediaApplicationId"],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        }
-      }
-    },
-    "GetSipMediaApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplication":{
-          "shape":"SipMediaApplication",
-          "documentation":"<p>The SIP media application details.</p>"
-        }
-      }
-    },
-    "GetSipRuleRequest":{
-      "type":"structure",
-      "required":["SipRuleId"],
-      "members":{
-        "SipRuleId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP rule ID.</p>",
-          "location":"uri",
-          "locationName":"sipRuleId"
-        }
-      }
-    },
-    "GetSipRuleResponse":{
-      "type":"structure",
-      "members":{
-        "SipRule":{
-          "shape":"SipRule",
-          "documentation":"<p>The SIP rule details.</p>"
-        }
-      }
-    },
     "GetUserRequest":{
       "type":"structure",
       "required":[
@@ -8145,214 +2404,10 @@
         }
       }
     },
-    "GetVoiceConnectorEmergencyCallingConfigurationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorEmergencyCallingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "EmergencyCallingConfiguration":{
-          "shape":"EmergencyCallingConfiguration",
-          "documentation":"<p>The emergency calling configuration details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorGroupId"],
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorGroupId"
-        }
-      }
-    },
-    "GetVoiceConnectorGroupResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorGroup":{
-          "shape":"VoiceConnectorGroup",
-          "documentation":"<p>The Amazon Chime Voice Connector group details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorLoggingConfigurationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorLoggingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "LoggingConfiguration":{
-          "shape":"LoggingConfiguration",
-          "documentation":"<p>The logging configuration details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorOriginationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorOriginationResponse":{
-      "type":"structure",
-      "members":{
-        "Origination":{
-          "shape":"Origination",
-          "documentation":"<p>The origination setting details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorProxyRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorProxyResponse":{
-      "type":"structure",
-      "members":{
-        "Proxy":{
-          "shape":"Proxy",
-          "documentation":"<p>The proxy configuration details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnector":{
-          "shape":"VoiceConnector",
-          "documentation":"<p>The Amazon Chime Voice Connector details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorStreamingConfigurationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorStreamingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "StreamingConfiguration":{
-          "shape":"StreamingConfiguration",
-          "documentation":"<p>The streaming configuration details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorTerminationHealthRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorTerminationHealthResponse":{
-      "type":"structure",
-      "members":{
-        "TerminationHealth":{
-          "shape":"TerminationHealth",
-          "documentation":"<p>The termination health details.</p>"
-        }
-      }
-    },
-    "GetVoiceConnectorTerminationRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "GetVoiceConnectorTerminationResponse":{
-      "type":"structure",
-      "members":{
-        "Termination":{
-          "shape":"Termination",
-          "documentation":"<p>The termination setting details.</p>"
-        }
-      }
-    },
     "GuidString":{
       "type":"string",
       "pattern":"[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}"
     },
-    "Identity":{
-      "type":"structure",
-      "members":{
-        "Arn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN in an Identity.</p>"
-        },
-        "Name":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name in an Identity.</p>"
-        }
-      },
-      "documentation":"<p>The details of a user.</p>"
-    },
-    "Integer":{"type":"integer"},
     "Invite":{
       "type":"structure",
       "members":{
@@ -8485,185 +2540,6 @@
         }
       }
     },
-    "ListAppInstanceAdminsRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of administrators that you want to return.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of administrators is reached.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        }
-      }
-    },
-    "ListAppInstanceAdminsResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>"
-        },
-        "AppInstanceAdmins":{
-          "shape":"AppInstanceAdminList",
-          "documentation":"<p>The information for each administrator.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of administrators is reached.</p>"
-        }
-      }
-    },
-    "ListAppInstanceUsersRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"querystring",
-          "locationName":"app-instance-arn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of requests that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested users are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        }
-      }
-    },
-    "ListAppInstanceUsersResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>"
-        },
-        "AppInstanceUsers":{
-          "shape":"AppInstanceUserList",
-          "documentation":"<p>The information for each requested <code>AppInstanceUser</code>.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested users are returned.</p>"
-        }
-      }
-    },
-    "ListAppInstancesRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of <code>AppInstance</code>s that you want to return.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API requests until you reach the maximum number of <code>AppInstance</code>s.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        }
-      }
-    },
-    "ListAppInstancesResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstances":{
-          "shape":"AppInstanceList",
-          "documentation":"<p>The information for each <code>AppInstance</code>.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API requests until the maximum number of <code>AppInstance</code>s is reached.</p>"
-        }
-      }
-    },
-    "ListAttendeeTagsRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "AttendeeId"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>",
-          "location":"uri",
-          "locationName":"attendeeId"
-        }
-      }
-    },
-    "ListAttendeeTagsResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A list of tag key-value pairs.</p>"
-        }
-      }
-    },
-    "ListAttendeesRequest":{
-      "type":"structure",
-      "required":["MeetingId"],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListAttendeesResponse":{
-      "type":"structure",
-      "members":{
-        "Attendees":{
-          "shape":"AttendeeList",
-          "documentation":"<p>The Amazon Chime SDK attendee information.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
     "ListBotsRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -8701,432 +2577,6 @@
         }
       }
     },
-    "ListChannelBansRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of bans that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested bans are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelBansResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested bans are returned.</p>"
-        },
-        "ChannelBans":{
-          "shape":"ChannelBanSummaryList",
-          "documentation":"<p>The information for each requested ban.</p>"
-        }
-      }
-    },
-    "ListChannelMembershipsForAppInstanceUserRequest":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>s</p>",
-          "location":"querystring",
-          "locationName":"app-instance-user-arn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of users that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of channel memberships is reached.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelMembershipsForAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelMemberships":{
-          "shape":"ChannelMembershipForAppInstanceUserSummaryList",
-          "documentation":"<p>The information for the requested channel memberships.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested users are returned.</p>"
-        }
-      }
-    },
-    "ListChannelMembershipsRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The maximum number of channel memberships that you want returned.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "Type":{
-          "shape":"ChannelMembershipType",
-          "documentation":"<p>The membership type of a user, <code>DEFAULT</code> or <code>HIDDEN</code>. Default members are always returned as part of <code>ListChannelMemberships</code>. Hidden members are only returned if the type filter in <code>ListChannelMemberships</code> equals <code>HIDDEN</code>. Otherwise hidden members are not returned.</p>",
-          "location":"querystring",
-          "locationName":"type"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of channel memberships that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested channel memberships are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelMembershipsResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "ChannelMemberships":{
-          "shape":"ChannelMembershipSummaryList",
-          "documentation":"<p>The information for the requested channel memberships.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested channel memberships are returned.</p>"
-        }
-      }
-    },
-    "ListChannelMessagesRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "SortOrder":{
-          "shape":"SortOrder",
-          "documentation":"<p>The order in which you want messages sorted. Default is Descending, based on time created.</p>",
-          "location":"querystring",
-          "locationName":"sort-order"
-        },
-        "NotBefore":{
-          "shape":"Timestamp",
-          "documentation":"<p>The initial or starting time stamp for your requested messages.</p>",
-          "location":"querystring",
-          "locationName":"not-before"
-        },
-        "NotAfter":{
-          "shape":"Timestamp",
-          "documentation":"<p>The final or ending time stamp for your requested messages.</p>",
-          "location":"querystring",
-          "locationName":"not-after"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of messages that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested messages are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelMessagesResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel containing the requested messages.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested messages are returned.</p>"
-        },
-        "ChannelMessages":{
-          "shape":"ChannelMessageSummaryList",
-          "documentation":"<p>The information about, and content of, each requested message.</p>"
-        }
-      }
-    },
-    "ListChannelModeratorsRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of moderators that you want returned.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested moderators are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelModeratorsResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested moderators are returned.</p>"
-        },
-        "ChannelModerators":{
-          "shape":"ChannelModeratorSummaryList",
-          "documentation":"<p>The information about and names of each moderator.</p>"
-        }
-      }
-    },
-    "ListChannelsModeratedByAppInstanceUserRequest":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the user in the moderated channel.</p>",
-          "location":"querystring",
-          "locationName":"app-instance-user-arn"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of channels in the request.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of channels moderated by the user is reached.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelsModeratedByAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "Channels":{
-          "shape":"ChannelModeratedByAppInstanceUserSummaryList",
-          "documentation":"<p>The moderated channels in the request.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of channels moderated by the user is reached.</p>"
-        }
-      }
-    },
-    "ListChannelsRequest":{
-      "type":"structure",
-      "required":["AppInstanceArn"],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"querystring",
-          "locationName":"app-instance-arn"
-        },
-        "Privacy":{
-          "shape":"ChannelPrivacy",
-          "documentation":"<p>The privacy setting. <code>PUBLIC</code> retrieves all the public channels. <code>PRIVATE</code> retrieves private channels. Only an <code>AppInstanceAdmin</code> can retrieve private channels. </p>",
-          "location":"querystring",
-          "locationName":"privacy"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of channels that you want to return.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token passed by previous API calls until all requested channels are returned.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "ListChannelsResponse":{
-      "type":"structure",
-      "members":{
-        "Channels":{
-          "shape":"ChannelSummaryList",
-          "documentation":"<p>The information about each channel.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token returned from previous API requests until the number of channels is reached.</p>"
-        }
-      }
-    },
-    "ListMediaCapturePipelinesRequest":{
-      "type":"structure",
-      "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token used to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call. Valid Range: 1 - 99.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListMediaCapturePipelinesResponse":{
-      "type":"structure",
-      "members":{
-        "MediaCapturePipelines":{
-          "shape":"MediaCapturePipelineList",
-          "documentation":"<p>The media capture pipeline objects in the list.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token used to retrieve the next page of results. </p>"
-        }
-      }
-    },
-    "ListMeetingTagsRequest":{
-      "type":"structure",
-      "required":["MeetingId"],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        }
-      }
-    },
-    "ListMeetingTagsResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A list of tag key-value pairs.</p>"
-        }
-      }
-    },
-    "ListMeetingsRequest":{
-      "type":"structure",
-      "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListMeetingsResponse":{
-      "type":"structure",
-      "members":{
-        "Meetings":{
-          "shape":"MeetingList",
-          "documentation":"<p>The Amazon Chime SDK meeting information.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
     "ListPhoneNumberOrdersRequest":{
       "type":"structure",
       "members":{
@@ -9211,49 +2661,6 @@
         }
       }
     },
-    "ListProxySessionsRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Status":{
-          "shape":"ProxySessionStatus",
-          "documentation":"<p>The proxy session status.</p>",
-          "location":"querystring",
-          "locationName":"status"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListProxySessionsResponse":{
-      "type":"structure",
-      "members":{
-        "ProxySessions":{
-          "shape":"ProxySessions",
-          "documentation":"<p>The proxy session details.</p>"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
     "ListRoomMembershipsRequest":{
       "type":"structure",
       "required":[
@@ -9343,72 +2750,6 @@
         }
       }
     },
-    "ListSipMediaApplicationsRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call. Defaults to 100.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        }
-      }
-    },
-    "ListSipMediaApplicationsResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplications":{
-          "shape":"SipMediaApplicationList",
-          "documentation":"<p>List of SIP media applications and application details.</p>"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListSipRulesRequest":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"querystring",
-          "locationName":"sip-media-application"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call. Defaults to 100.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        }
-      }
-    },
-    "ListSipRulesResponse":{
-      "type":"structure",
-      "members":{
-        "SipRules":{
-          "shape":"SipRuleList",
-          "documentation":"<p>List of SIP rules and rule details.</p>"
-        },
-        "NextToken":{
-          "shape":"NextTokenString",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
     "ListSupportedPhoneNumberCountriesRequest":{
       "type":"structure",
       "required":["ProductType"],
@@ -9430,27 +2771,6 @@
         }
       }
     },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["ResourceARN"],
-      "members":{
-        "ResourceARN":{
-          "shape":"Arn",
-          "documentation":"<p>The resource ARN.</p>",
-          "location":"querystring",
-          "locationName":"arn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A list of tag-key value pairs.</p>"
-        }
-      }
-    },
     "ListUsersRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -9500,101 +2820,6 @@
         }
       }
     },
-    "ListVoiceConnectorGroupsRequest":{
-      "type":"structure",
-      "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListVoiceConnectorGroupsResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorGroups":{
-          "shape":"VoiceConnectorGroupList",
-          "documentation":"<p>The details of the Amazon Chime Voice Connector groups.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListVoiceConnectorTerminationCredentialsRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        }
-      }
-    },
-    "ListVoiceConnectorTerminationCredentialsResponse":{
-      "type":"structure",
-      "members":{
-        "Usernames":{
-          "shape":"SensitiveStringList",
-          "documentation":"<p>A list of user names.</p>"
-        }
-      }
-    },
-    "ListVoiceConnectorsRequest":{
-      "type":"structure",
-      "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"next-token"
-        },
-        "MaxResults":{
-          "shape":"ResultMax",
-          "documentation":"<p>The maximum number of results to return in a single call.</p>",
-          "location":"querystring",
-          "locationName":"max-results"
-        }
-      }
-    },
-    "ListVoiceConnectorsResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectors":{
-          "shape":"VoiceConnectorList",
-          "documentation":"<p>The details of the Amazon Chime Voice Connectors.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "LoggingConfiguration":{
-      "type":"structure",
-      "members":{
-        "EnableSIPLogs":{
-          "shape":"Boolean",
-          "documentation":"<p>Boolean that enables SIP message logs to Amazon CloudWatch logs.</p>"
-        },
-        "EnableMediaMetricLogs":{
-          "shape":"Boolean",
-          "documentation":"<p>Boolean that enables logging of detailed media metrics for Voice Connectors to Amazon CloudWatch logs.</p>"
-        }
-      },
-      "documentation":"<p>The logging configuration associated with an Amazon Chime Voice Connector. Specifies whether SIP message logs are enabled for sending to Amazon CloudWatch Logs.</p>"
-    },
     "LogoutUserRequest":{
       "type":"structure",
       "required":[
@@ -9618,167 +2843,7 @@
     },
     "LogoutUserResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "MaxResults":{
-      "type":"integer",
-      "max":50,
-      "min":1
-    },
-    "MediaCapturePipeline":{
-      "type":"structure",
-      "members":{
-        "MediaPipelineId":{
-          "shape":"GuidString",
-          "documentation":"<p>The ID of a media capture pipeline.</p>"
-        },
-        "SourceType":{
-          "shape":"MediaPipelineSourceType",
-          "documentation":"<p>Source type from which media artifacts are saved. You must use <code>ChimeMeeting</code>.</p>"
-        },
-        "SourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>ARN of the source from which the media artifacts will be saved.</p>"
-        },
-        "Status":{
-          "shape":"MediaPipelineStatus",
-          "documentation":"<p>The status of the media capture pipeline.</p>"
-        },
-        "SinkType":{
-          "shape":"MediaPipelineSinkType",
-          "documentation":"<p>Destination type to which the media artifacts are saved. You must use an S3 Bucket.</p>"
-        },
-        "SinkArn":{
-          "shape":"Arn",
-          "documentation":"<p>ARN of the destination to which the media artifacts are saved.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The time at which the capture pipeline was created, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The time at which the capture pipeline was updated, in ISO 8601 format.</p>"
-        },
-        "ChimeSdkMeetingConfiguration":{
-          "shape":"ChimeSdkMeetingConfiguration",
-          "documentation":"<p>The configuration for a specified media capture pipeline. <code>SourceType</code> must be <code>ChimeSdkMeeting</code>.</p>"
-        }
-      },
-      "documentation":"<p>A media capture pipeline object consisting of an ID, source type, source ARN, a sink type, a sink ARN, and a configuration object.</p>"
-    },
-    "MediaCapturePipelineList":{
-      "type":"list",
-      "member":{"shape":"MediaCapturePipeline"}
-    },
-    "MediaPipelineSinkType":{
-      "type":"string",
-      "enum":["S3Bucket"]
-    },
-    "MediaPipelineSourceType":{
-      "type":"string",
-      "enum":["ChimeSdkMeeting"]
-    },
-    "MediaPipelineStatus":{
-      "type":"string",
-      "enum":[
-        "Initializing",
-        "InProgress",
-        "Failed",
-        "Stopping",
-        "Stopped"
-      ]
-    },
-    "MediaPlacement":{
-      "type":"structure",
-      "members":{
-        "AudioHostUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The audio host URL.</p>"
-        },
-        "AudioFallbackUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The audio fallback URL.</p>"
-        },
-        "ScreenDataUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The screen data URL.</p> <important> <p> <b>This parameter is is no longer supported and no longer used by the Amazon Chime SDK.</b> </p> </important>"
-        },
-        "ScreenSharingUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The screen sharing URL.</p> <important> <p> <b>This parameter is is no longer supported and no longer used by the Amazon Chime SDK.</b>.</p> </important>"
-        },
-        "ScreenViewingUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The screen viewing URL.</p> <important> <p> <b>This parameter is is no longer supported and no longer used by the Amazon Chime SDK.</b> </p> </important>"
-        },
-        "SignalingUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The signaling URL.</p>"
-        },
-        "TurnControlUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The turn control URL.</p> <important> <p> <b>This parameter is is no longer supported and no longer used by the Amazon Chime SDK.</b> </p> </important>"
-        },
-        "EventIngestionUrl":{
-          "shape":"UriType",
-          "documentation":"<p>The event ingestion URL to which you send client meeting events.</p>"
-        }
-      },
-      "documentation":"<p>A set of endpoints used by clients to connect to the media service group for an Amazon Chime SDK meeting.</p>"
-    },
-    "Meeting":{
-      "type":"structure",
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>"
-        },
-        "ExternalMeetingId":{
-          "shape":"ExternalMeetingIdType",
-          "documentation":"<p>The external meeting ID.</p>"
-        },
-        "MediaPlacement":{
-          "shape":"MediaPlacement",
-          "documentation":"<p>The media placement for the meeting.</p>"
-        },
-        "MediaRegion":{
-          "shape":"String",
-          "documentation":"<p>The Region in which you create the meeting. Available values: <code>af-south-1</code>, <code>ap-northeast-1</code>, <code>ap-northeast-2</code>, <code>ap-south-1</code>, <code>ap-southeast-1</code>, <code>ap-southeast-2</code>, <code>ca-central-1</code>, <code>eu-central-1</code>, <code>eu-north-1</code>, <code>eu-south-1</code>, <code>eu-west-1</code>, <code>eu-west-2</code>, <code>eu-west-3</code>, <code>sa-east-1</code>, <code>us-east-1</code>, <code>us-east-2</code>, <code>us-west-1</code>, <code>us-west-2</code>.</p>"
-        }
-      },
-      "documentation":"<p>A meeting created using the Amazon Chime SDK.</p>"
-    },
-    "MeetingList":{
-      "type":"list",
-      "member":{"shape":"Meeting"}
-    },
-    "MeetingNotificationConfiguration":{
-      "type":"structure",
-      "members":{
-        "SnsTopicArn":{
-          "shape":"Arn",
-          "documentation":"<p>The SNS topic ARN.</p>"
-        },
-        "SqsQueueArn":{
-          "shape":"Arn",
-          "documentation":"<p>The SQS queue ARN.</p>"
-        }
-      },
-      "documentation":"<p> The resource target configurations for receiving Amazon Chime SDK meeting and attendee event notifications. The Amazon Chime SDK supports resource targets located in the US East (N. Virginia) AWS Region (<code>us-east-1</code>). </p>"
-    },
-    "MeetingTagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":50,
-      "min":1
-    },
-    "MeetingTagList":{
-      "type":"list",
-      "member":{"shape":"Tag"},
-      "max":50,
-      "min":1
+      "members":{}
     },
     "Member":{
       "type":"structure",
@@ -9806,12 +2871,6 @@
       },
       "documentation":"<p>The member details, such as email address, name, member ID, and member type.</p>"
     },
-    "MemberArns":{
-      "type":"list",
-      "member":{"shape":"ChimeArn"},
-      "max":100,
-      "min":1
-    },
     "MemberError":{
       "type":"structure",
       "members":{
@@ -9842,10 +2901,6 @@
         "Webhook"
       ]
     },
-    "Members":{
-      "type":"list",
-      "member":{"shape":"Identity"}
-    },
     "MembershipItem":{
       "type":"structure",
       "members":{
@@ -9865,69 +2920,15 @@
       "member":{"shape":"MembershipItem"},
       "max":50
     },
-    "MessageId":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"[-_a-zA-Z0-9]*"
-    },
-    "MessagingSessionEndpoint":{
-      "type":"structure",
-      "members":{
-        "Url":{
-          "shape":"UrlType",
-          "documentation":"<p>The endpoint to which you establish a websocket connection.</p>"
-        }
-      },
-      "documentation":"<p>The websocket endpoint used to connect to Amazon Chime SDK messaging.</p>"
-    },
-    "Metadata":{
-      "type":"string",
-      "max":1024,
-      "min":0,
-      "pattern":".*",
-      "sensitive":true
-    },
-    "NextToken":{
-      "type":"string",
-      "max":2048,
-      "min":0,
-      "pattern":".*",
-      "sensitive":true
-    },
-    "NextTokenString":{
-      "type":"string",
-      "max":65535
-    },
-    "NonEmptyContent":{
-      "type":"string",
-      "min":1,
-      "pattern":"[\\s\\S]*",
-      "sensitive":true
-    },
-    "NonEmptyResourceName":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*",
-      "sensitive":true
-    },
     "NonEmptyString":{
       "type":"string",
       "pattern":".*\\S.*"
     },
-    "NonEmptyString128":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
     "NonEmptyStringList":{
       "type":"list",
       "member":{"shape":"String"},
       "min":1
     },
-    "NonNullableBoolean":{"type":"boolean"},
     "NotFoundException":{
       "type":"structure",
       "members":{
@@ -9938,22 +2939,7 @@
       "error":{"httpStatusCode":404},
       "exception":true
     },
-    "NotificationTarget":{
-      "type":"string",
-      "enum":[
-        "EventBridge",
-        "SNS",
-        "SQS"
-      ]
-    },
     "NullableBoolean":{"type":"boolean"},
-    "NumberSelectionBehavior":{
-      "type":"string",
-      "enum":[
-        "PreferSticky",
-        "AvoidSticky"
-      ]
-    },
     "OrderedPhoneNumber":{
       "type":"structure",
       "members":{
@@ -9980,91 +2966,6 @@
         "Failed"
       ]
     },
-    "Origination":{
-      "type":"structure",
-      "members":{
-        "Routes":{
-          "shape":"OriginationRouteList",
-          "documentation":"<p>The call distribution properties defined for your SIP hosts. Valid range: Minimum value of 1. Maximum value of 20. This parameter is not required, but you must specify this parameter or <code>Disabled</code>.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>When origination settings are disabled, inbound calls are not enabled for your Amazon Chime Voice Connector. This parameter is not required, but you must specify this parameter or <code>Routes</code>.</p>"
-        }
-      },
-      "documentation":"<p>Origination settings enable your SIP hosts to receive inbound calls using your Amazon Chime Voice Connector.</p> <note> <p>The parameters listed below are not required, but you must use at least one. </p> </note>"
-    },
-    "OriginationRoute":{
-      "type":"structure",
-      "members":{
-        "Host":{
-          "shape":"String",
-          "documentation":"<p>The FQDN or IP address to contact for origination traffic.</p>"
-        },
-        "Port":{
-          "shape":"Port",
-          "documentation":"<p>The designated origination route port. Defaults to 5060.</p>"
-        },
-        "Protocol":{
-          "shape":"OriginationRouteProtocol",
-          "documentation":"<p>The protocol to use for the origination route. Encryption-enabled Amazon Chime Voice Connectors use TCP protocol by default.</p>"
-        },
-        "Priority":{
-          "shape":"OriginationRoutePriority",
-          "documentation":"<p>The priority associated with the host, with 1 being the highest priority. Higher priority hosts are attempted first.</p>"
-        },
-        "Weight":{
-          "shape":"OriginationRouteWeight",
-          "documentation":"<p>The weight associated with the host. If hosts are equal in priority, calls are redistributed among them based on their relative weight.</p>"
-        }
-      },
-      "documentation":"<p>Origination routes define call distribution properties for your SIP hosts to receive inbound calls using your Amazon Chime Voice Connector. Limit: Ten origination routes for each Amazon Chime Voice Connector.</p> <note> <p>The parameters listed below are not required, but you must use at least one. </p> </note>"
-    },
-    "OriginationRouteList":{
-      "type":"list",
-      "member":{"shape":"OriginationRoute"}
-    },
-    "OriginationRoutePriority":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "OriginationRouteProtocol":{
-      "type":"string",
-      "enum":[
-        "TCP",
-        "UDP"
-      ]
-    },
-    "OriginationRouteWeight":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "Participant":{
-      "type":"structure",
-      "members":{
-        "PhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The participant's phone number.</p>"
-        },
-        "ProxyPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The participant's proxy phone number.</p>"
-        }
-      },
-      "documentation":"<p>The phone number and proxy phone number for a participant in an Amazon Chime Voice Connector proxy session.</p>"
-    },
-    "ParticipantPhoneNumberList":{
-      "type":"list",
-      "member":{"shape":"E164PhoneNumber"},
-      "max":2,
-      "min":2
-    },
-    "Participants":{
-      "type":"list",
-      "member":{"shape":"Participant"}
-    },
     "PhoneNumber":{
       "type":"structure",
       "members":{
@@ -10309,177 +3210,11 @@
       "type":"list",
       "member":{"shape":"PhoneNumberType"}
     },
-    "Port":{
-      "type":"integer",
-      "max":65535,
-      "min":0
-    },
-    "PositiveInteger":{
-      "type":"integer",
-      "min":1
-    },
     "ProfileServiceMaxResults":{
       "type":"integer",
       "max":200,
       "min":1
     },
-    "Proxy":{
-      "type":"structure",
-      "members":{
-        "DefaultSessionExpiryMinutes":{
-          "shape":"Integer",
-          "documentation":"<p>The default number of minutes allowed for proxy sessions.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.</p>"
-        },
-        "FallBackPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The phone number to route calls to after a proxy session expires.</p>"
-        },
-        "PhoneNumberCountries":{
-          "shape":"StringList",
-          "documentation":"<p>The countries for proxy phone numbers to be selected from.</p>"
-        }
-      },
-      "documentation":"<p>The proxy configuration for an Amazon Chime Voice Connector.</p>"
-    },
-    "ProxySession":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>"
-        },
-        "ProxySessionId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The proxy session ID.</p>"
-        },
-        "Name":{
-          "shape":"String128",
-          "documentation":"<p>The name of the proxy session.</p>"
-        },
-        "Status":{
-          "shape":"ProxySessionStatus",
-          "documentation":"<p>The status of the proxy session.</p>"
-        },
-        "ExpiryMinutes":{
-          "shape":"PositiveInteger",
-          "documentation":"<p>The number of minutes allowed for the proxy session.</p>"
-        },
-        "Capabilities":{
-          "shape":"CapabilityList",
-          "documentation":"<p>The proxy session capabilities.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The created time stamp, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The updated time stamp, in ISO 8601 format.</p>"
-        },
-        "EndedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The ended time stamp, in ISO 8601 format.</p>"
-        },
-        "Participants":{
-          "shape":"Participants",
-          "documentation":"<p>The proxy session participants.</p>"
-        },
-        "NumberSelectionBehavior":{
-          "shape":"NumberSelectionBehavior",
-          "documentation":"<p>The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.</p>"
-        },
-        "GeoMatchLevel":{
-          "shape":"GeoMatchLevel",
-          "documentation":"<p>The preference for matching the country or area code of the proxy phone number with that of the first participant.</p>"
-        },
-        "GeoMatchParams":{
-          "shape":"GeoMatchParams",
-          "documentation":"<p>The country and area code for the proxy phone number.</p>"
-        }
-      },
-      "documentation":"<p>The proxy session for an Amazon Chime Voice Connector.</p>"
-    },
-    "ProxySessionNameString":{
-      "type":"string",
-      "pattern":"^$|^[a-zA-Z0-9 ]{0,30}$",
-      "sensitive":true
-    },
-    "ProxySessionStatus":{
-      "type":"string",
-      "enum":[
-        "Open",
-        "InProgress",
-        "Closed"
-      ]
-    },
-    "ProxySessions":{
-      "type":"list",
-      "member":{"shape":"ProxySession"}
-    },
-    "PutAppInstanceRetentionSettingsRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceArn",
-        "AppInstanceRetentionSettings"
-      ],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        },
-        "AppInstanceRetentionSettings":{
-          "shape":"AppInstanceRetentionSettings",
-          "documentation":"<p>The time in days to retain data. Data type: number.</p>"
-        }
-      }
-    },
-    "PutAppInstanceRetentionSettingsResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceRetentionSettings":{
-          "shape":"AppInstanceRetentionSettings",
-          "documentation":"<p>The time in days to retain data. Data type: number.</p>"
-        },
-        "InitiateDeletionTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the API deletes data.</p>"
-        }
-      }
-    },
-    "PutAppInstanceStreamingConfigurationsRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceArn",
-        "AppInstanceStreamingConfigurations"
-      ],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        },
-        "AppInstanceStreamingConfigurations":{
-          "shape":"AppInstanceStreamingConfigurationList",
-          "documentation":"<p>The streaming configurations set for an <code>AppInstance</code>.</p>"
-        }
-      }
-    },
-    "PutAppInstanceStreamingConfigurationsResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceStreamingConfigurations":{
-          "shape":"AppInstanceStreamingConfigurationList",
-          "documentation":"<p>The streaming configurations of an <code>AppInstance</code>.</p>"
-        }
-      }
-    },
     "PutEventsConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -10550,268 +3285,6 @@
         }
       }
     },
-    "PutSipMediaApplicationLoggingConfigurationRequest":{
-      "type":"structure",
-      "required":["SipMediaApplicationId"],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        },
-        "SipMediaApplicationLoggingConfiguration":{
-          "shape":"SipMediaApplicationLoggingConfiguration",
-          "documentation":"<p>The actual logging configuration.</p>"
-        }
-      }
-    },
-    "PutSipMediaApplicationLoggingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationLoggingConfiguration":{
-          "shape":"SipMediaApplicationLoggingConfiguration",
-          "documentation":"<p>The logging configuration of the SIP media application.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorEmergencyCallingConfigurationRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "EmergencyCallingConfiguration"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "EmergencyCallingConfiguration":{
-          "shape":"EmergencyCallingConfiguration",
-          "documentation":"<p>The emergency calling configuration details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorEmergencyCallingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "EmergencyCallingConfiguration":{
-          "shape":"EmergencyCallingConfiguration",
-          "documentation":"<p>The emergency calling configuration details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorLoggingConfigurationRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "LoggingConfiguration"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "LoggingConfiguration":{
-          "shape":"LoggingConfiguration",
-          "documentation":"<p>The logging configuration details to add.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorLoggingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "LoggingConfiguration":{
-          "shape":"LoggingConfiguration",
-          "documentation":"<p>The updated logging configuration details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorOriginationRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "Origination"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Origination":{
-          "shape":"Origination",
-          "documentation":"<p>The origination setting details to add.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorOriginationResponse":{
-      "type":"structure",
-      "members":{
-        "Origination":{
-          "shape":"Origination",
-          "documentation":"<p>The updated origination setting details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorProxyRequest":{
-      "type":"structure",
-      "required":[
-        "DefaultSessionExpiryMinutes",
-        "PhoneNumberPoolCountries",
-        "VoiceConnectorId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "DefaultSessionExpiryMinutes":{
-          "shape":"Integer",
-          "documentation":"<p>The default number of minutes allowed for proxy sessions.</p>"
-        },
-        "PhoneNumberPoolCountries":{
-          "shape":"CountryList",
-          "documentation":"<p>The countries for proxy phone numbers to be selected from.</p>"
-        },
-        "FallBackPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The phone number to route calls to after a proxy session expires.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorProxyResponse":{
-      "type":"structure",
-      "members":{
-        "Proxy":{
-          "shape":"Proxy",
-          "documentation":"<p>The proxy configuration details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorStreamingConfigurationRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "StreamingConfiguration"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "StreamingConfiguration":{
-          "shape":"StreamingConfiguration",
-          "documentation":"<p>The streaming configuration details to add.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorStreamingConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "StreamingConfiguration":{
-          "shape":"StreamingConfiguration",
-          "documentation":"<p>The updated streaming configuration details.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorTerminationCredentialsRequest":{
-      "type":"structure",
-      "required":["VoiceConnectorId"],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Credentials":{
-          "shape":"CredentialList",
-          "documentation":"<p>The termination SIP credentials.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorTerminationRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "Termination"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Termination":{
-          "shape":"Termination",
-          "documentation":"<p>The termination setting details to add.</p>"
-        }
-      }
-    },
-    "PutVoiceConnectorTerminationResponse":{
-      "type":"structure",
-      "members":{
-        "Termination":{
-          "shape":"Termination",
-          "documentation":"<p>The updated termination setting details.</p>"
-        }
-      }
-    },
-    "RedactChannelMessageRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MessageId"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel containing the messages that you want to redact.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of the message being redacted.</p>",
-          "location":"uri",
-          "locationName":"messageId"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "RedactChannelMessageResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel containing the messages that you want to redact.</p>"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID of the message being redacted.</p>"
-        }
-      }
-    },
     "RedactConversationMessageRequest":{
       "type":"structure",
       "required":[
@@ -10842,8 +3315,7 @@
     },
     "RedactConversationMessageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RedactRoomMessageRequest":{
       "type":"structure",
@@ -10875,8 +3347,7 @@
     },
     "RedactRoomMessageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RegenerateSecurityTokenRequest":{
       "type":"structure",
@@ -10956,13 +3427,6 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
-    "ResourceName":{
-      "type":"string",
-      "max":256,
-      "min":0,
-      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*",
-      "sensitive":true
-    },
     "RestorePhoneNumberRequest":{
       "type":"structure",
       "required":["PhoneNumberId"],
@@ -11089,13 +3553,6 @@
       },
       "documentation":"<p>The retention settings that determine how long to retain chat-room messages for an Amazon Chime Enterprise account.</p>"
     },
-    "SMAUpdateCallArgumentsMap":{
-      "type":"map",
-      "key":{"shape":"SensitiveString"},
-      "value":{"shape":"SensitiveString"},
-      "max":20,
-      "min":0
-    },
     "SearchAvailablePhoneNumbersRequest":{
       "type":"structure",
       "members":{
@@ -11162,91 +3619,10 @@
         }
       }
     },
-    "SelectedVideoStreams":{
-      "type":"structure",
-      "members":{
-        "AttendeeIds":{
-          "shape":"AttendeeIdList",
-          "documentation":"<p>The attendee IDs of the streams selected for a media capture pipeline. </p>"
-        },
-        "ExternalUserIds":{
-          "shape":"ExternalUserIdList",
-          "documentation":"<p>The external user IDs of the streams selected for a media capture pipeline.</p>"
-        }
-      },
-      "documentation":"<p>The video streams to capture for a specified media capture pipeline. The total number of video streams can't exceed 25.</p>"
-    },
-    "SendChannelMessageRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "Content",
-        "Type",
-        "Persistence",
-        "ClientRequestToken"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "Content":{
-          "shape":"NonEmptyContent",
-          "documentation":"<p>The content of the message.</p>"
-        },
-        "Type":{
-          "shape":"ChannelMessageType",
-          "documentation":"<p>The type of message, <code>STANDARD</code> or <code>CONTROL</code>.</p>"
-        },
-        "Persistence":{
-          "shape":"ChannelMessagePersistenceType",
-          "documentation":"<p>Boolean that controls whether the message is persisted on the back end. Required.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The optional metadata for each message.</p>"
-        },
-        "ClientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>The <code>Idempotency</code> token for each client request.</p>",
-          "idempotencyToken":true
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "SendChannelMessageResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID string assigned to each message.</p>"
-        }
-      }
-    },
-    "SensitiveNonEmptyString":{
-      "type":"string",
-      "pattern":".*\\S.*",
-      "sensitive":true
-    },
     "SensitiveString":{
       "type":"string",
       "sensitive":true
     },
-    "SensitiveStringList":{
-      "type":"list",
-      "member":{"shape":"SensitiveString"}
-    },
     "ServiceFailureException":{
       "type":"structure",
       "members":{
@@ -11283,377 +3659,7 @@
       "type":"list",
       "member":{"shape":"SigninDelegateGroup"}
     },
-    "SipApplicationPriority":{
-      "type":"integer",
-      "min":1
-    },
-    "SipHeadersMap":{
-      "type":"map",
-      "key":{"shape":"SensitiveString"},
-      "value":{"shape":"SensitiveString"},
-      "max":20,
-      "min":0
-    },
-    "SipMediaApplication":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>"
-        },
-        "AwsRegion":{
-          "shape":"String",
-          "documentation":"<p>The AWS Region in which the SIP media application is created.</p>"
-        },
-        "Name":{
-          "shape":"SipMediaApplicationName",
-          "documentation":"<p>The name of the SIP media application.</p>"
-        },
-        "Endpoints":{
-          "shape":"SipMediaApplicationEndpointList",
-          "documentation":"<p>List of endpoints for SIP media application. Currently, only one endpoint per SIP media application is permitted.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The SIP media application creation timestamp, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The SIP media application updated timestamp, in ISO 8601 format.</p>"
-        }
-      },
-      "documentation":"<p>The details of the SIP media application, including name and endpoints. An AWS account can have multiple SIP media applications.</p>"
-    },
-    "SipMediaApplicationCall":{
-      "type":"structure",
-      "members":{
-        "TransactionId":{
-          "shape":"GuidString",
-          "documentation":"<p>The transaction ID of a call.</p>"
-        }
-      },
-      "documentation":"<p>A <code>Call</code> instance for a SIP media application.</p>"
-    },
-    "SipMediaApplicationEndpoint":{
-      "type":"structure",
-      "members":{
-        "LambdaArn":{
-          "shape":"FunctionArn",
-          "documentation":"<p>Valid Amazon Resource Name (ARN) of the Lambda function, version, or alias. The function must be created in the same AWS Region as the SIP media application.</p>"
-        }
-      },
-      "documentation":"<p>The endpoint assigned to the SIP media application.</p>"
-    },
-    "SipMediaApplicationEndpointList":{
-      "type":"list",
-      "member":{"shape":"SipMediaApplicationEndpoint"},
-      "max":1,
-      "min":1
-    },
-    "SipMediaApplicationList":{
-      "type":"list",
-      "member":{"shape":"SipMediaApplication"}
-    },
-    "SipMediaApplicationLoggingConfiguration":{
-      "type":"structure",
-      "members":{
-        "EnableSipMediaApplicationMessageLogs":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables application message logs for the SIP media application.</p>"
-        }
-      },
-      "documentation":"<p>Logging configuration of the SIP media application.</p>"
-    },
-    "SipMediaApplicationName":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "SipRule":{
-      "type":"structure",
-      "members":{
-        "SipRuleId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP rule ID.</p>"
-        },
-        "Name":{
-          "shape":"SipRuleName",
-          "documentation":"<p>The name of the SIP rule.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the SIP rule is enabled or disabled. You must disable a rule before you can delete it.</p>"
-        },
-        "TriggerType":{
-          "shape":"SipRuleTriggerType",
-          "documentation":"<p>The type of trigger assigned to the SIP rule in <code>TriggerValue</code>, currently <code>RequestUriHostname</code> or <code>ToPhoneNumber</code>.</p>"
-        },
-        "TriggerValue":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>If <code>TriggerType</code> is <code>RequestUriHostname</code>, then the value can be the outbound host name of the Amazon Chime Voice Connector. If <code>TriggerType</code> is <code>ToPhoneNumber</code>, then the value can be a customer-owned phone number in E164 format. <code>SipRule</code> is triggered when a SIP rule requests host name or <code>ToPhoneNumber</code> matches in the incoming SIP request.</p>"
-        },
-        "TargetApplications":{
-          "shape":"SipRuleTargetApplicationList",
-          "documentation":"<p>Target SIP media application and other details, such as priority and AWS Region, to be specified in the SIP rule. Only one SIP rule per AWS Region can be provided.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The time at which the SIP rule was created, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The time at which the SIP rule was last updated, in ISO 8601 format.</p>"
-        }
-      },
-      "documentation":"<p>The SIP rule details, including name, triggers, and target applications. An AWS account can have multiple SIP rules.</p>"
-    },
-    "SipRuleList":{
-      "type":"list",
-      "member":{"shape":"SipRule"}
-    },
-    "SipRuleName":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "SipRuleTargetApplication":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>"
-        },
-        "Priority":{
-          "shape":"SipApplicationPriority",
-          "documentation":"<p>Priority of the SIP media application in the target list.</p>"
-        },
-        "AwsRegion":{
-          "shape":"String",
-          "documentation":"<p>The AWS Region of the target application.</p>"
-        }
-      },
-      "documentation":"<p>Target SIP media application and other details, such as priority and AWS Region, to be specified in the SIP rule. Only one SIP rule per AWS Region can be provided.</p>"
-    },
-    "SipRuleTargetApplicationList":{
-      "type":"list",
-      "member":{"shape":"SipRuleTargetApplication"},
-      "max":25,
-      "min":1
-    },
-    "SipRuleTriggerType":{
-      "type":"string",
-      "enum":[
-        "ToPhoneNumber",
-        "RequestUriHostname"
-      ]
-    },
-    "SortOrder":{
-      "type":"string",
-      "enum":[
-        "ASCENDING",
-        "DESCENDING"
-      ]
-    },
-    "SourceConfiguration":{
-      "type":"structure",
-      "members":{
-        "SelectedVideoStreams":{
-          "shape":"SelectedVideoStreams",
-          "documentation":"<p>The selected video streams to capture for a specified media capture pipeline. The number of video streams can't exceed 25.</p>"
-        }
-      },
-      "documentation":"<p>Source configuration for a specified media capture pipeline.</p>"
-    },
-    "StartMeetingTranscriptionRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "TranscriptionConfiguration"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The unique ID of the meeting being transcribed.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "TranscriptionConfiguration":{
-          "shape":"TranscriptionConfiguration",
-          "documentation":"<p>The configuration for the current transcription operation. Must contain <code>EngineTranscribeSettings</code> or <code>EngineTranscribeMedicalSettings</code>.</p>"
-        }
-      }
-    },
-    "StartMeetingTranscriptionResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "StopMeetingTranscriptionRequest":{
-      "type":"structure",
-      "required":["MeetingId"],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The unique ID of the meeting for which you stop transcription.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        }
-      }
-    },
-    "StopMeetingTranscriptionResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "StreamingConfiguration":{
-      "type":"structure",
-      "required":["DataRetentionInHours"],
-      "members":{
-        "DataRetentionInHours":{
-          "shape":"DataRetentionInHours",
-          "documentation":"<p>The retention period, in hours, for the Amazon Kinesis data.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>When true, media streaming to Amazon Kinesis is turned off.</p>"
-        },
-        "StreamingNotificationTargets":{
-          "shape":"StreamingNotificationTargetList",
-          "documentation":"<p>The streaming notification targets.</p>"
-        }
-      },
-      "documentation":"<p>The streaming configuration associated with an Amazon Chime Voice Connector. Specifies whether media streaming is enabled for sending to Amazon Kinesis, and shows the retention period for the Amazon Kinesis data, in hours.</p>"
-    },
-    "StreamingNotificationTarget":{
-      "type":"structure",
-      "required":["NotificationTarget"],
-      "members":{
-        "NotificationTarget":{
-          "shape":"NotificationTarget",
-          "documentation":"<p>The streaming notification target.</p>"
-        }
-      },
-      "documentation":"<p>The targeted recipient for a streaming configuration notification.</p>"
-    },
-    "StreamingNotificationTargetList":{
-      "type":"list",
-      "member":{"shape":"StreamingNotificationTarget"},
-      "max":3,
-      "min":1
-    },
     "String":{"type":"string"},
-    "String128":{
-      "type":"string",
-      "max":128
-    },
-    "StringList":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "Tag":{
-      "type":"structure",
-      "required":[
-        "Key",
-        "Value"
-      ],
-      "members":{
-        "Key":{
-          "shape":"TagKey",
-          "documentation":"<p>The key of the tag.</p>"
-        },
-        "Value":{
-          "shape":"TagValue",
-          "documentation":"<p>The value of the tag.</p>"
-        }
-      },
-      "documentation":"<p>Describes a tag applied to a resource.</p>"
-    },
-    "TagAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "AttendeeId",
-        "Tags"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>",
-          "location":"uri",
-          "locationName":"attendeeId"
-        },
-        "Tags":{
-          "shape":"AttendeeTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        }
-      }
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "sensitive":true
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":50,
-      "min":1
-    },
-    "TagList":{
-      "type":"list",
-      "member":{"shape":"Tag"},
-      "max":50,
-      "min":1
-    },
-    "TagMeetingRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "Tags"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "Tags":{
-          "shape":"MeetingTagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        }
-      }
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceARN",
-        "Tags"
-      ],
-      "members":{
-        "ResourceARN":{
-          "shape":"Arn",
-          "documentation":"<p>The resource ARN.</p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tag key-value pairs.</p>"
-        }
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "sensitive":true
-    },
     "TelephonySettings":{
       "type":"structure",
       "required":[
@@ -11677,46 +3683,6 @@
       },
       "documentation":"<p>Settings that allow management of telephony permissions for an Amazon Chime user, such as inbound and outbound calling and text messaging.</p>"
     },
-    "Termination":{
-      "type":"structure",
-      "members":{
-        "CpsLimit":{
-          "shape":"CpsLimit",
-          "documentation":"<p>The limit on calls per second. Max value based on account service quota. Default value of 1.</p>"
-        },
-        "DefaultPhoneNumber":{
-          "shape":"E164PhoneNumber",
-          "documentation":"<p>The default caller ID phone number.</p>"
-        },
-        "CallingRegions":{
-          "shape":"CallingRegionList",
-          "documentation":"<p>The countries to which calls are allowed, in ISO 3166-1 alpha-2 format. Required.</p>"
-        },
-        "CidrAllowedList":{
-          "shape":"StringList",
-          "documentation":"<p>The IP addresses allowed to make calls, in CIDR format. Required.</p>"
-        },
-        "Disabled":{
-          "shape":"Boolean",
-          "documentation":"<p>When termination settings are disabled, outbound calls can not be made.</p>"
-        }
-      },
-      "documentation":"<p>Termination settings enable your SIP hosts to make outbound calls using your Amazon Chime Voice Connector.</p>"
-    },
-    "TerminationHealth":{
-      "type":"structure",
-      "members":{
-        "Timestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The timestamp, in ISO 8601 format.</p>"
-        },
-        "Source":{
-          "shape":"String",
-          "documentation":"<p>The source IP address.</p>"
-        }
-      },
-      "documentation":"<p>The termination health details, including the source IP address and timestamp of the last successful SIP <code>OPTIONS</code> message from your SIP infrastructure.</p>"
-    },
     "ThrottledClientException":{
       "type":"structure",
       "members":{
@@ -11727,149 +3693,12 @@
       "error":{"httpStatusCode":429},
       "exception":true
     },
-    "Timestamp":{"type":"timestamp"},
     "TollFreePrefix":{
       "type":"string",
       "max":3,
       "min":3,
       "pattern":"^8(00|33|44|55|66|77|88)$"
     },
-    "TranscribeContentIdentificationType":{
-      "type":"string",
-      "enum":["PII"]
-    },
-    "TranscribeContentRedactionType":{
-      "type":"string",
-      "enum":["PII"]
-    },
-    "TranscribeLanguageCode":{
-      "type":"string",
-      "enum":[
-        "en-US",
-        "en-GB",
-        "es-US",
-        "fr-CA",
-        "fr-FR",
-        "en-AU",
-        "it-IT",
-        "de-DE",
-        "pt-BR",
-        "ja-JP",
-        "ko-KR",
-        "zh-CN",
-        "th-TH",
-        "hi-IN"
-      ]
-    },
-    "TranscribeLanguageModelName":{
-      "type":"string",
-      "max":200,
-      "min":1,
-      "pattern":"^[0-9a-zA-Z._-]+"
-    },
-    "TranscribeLanguageOptions":{
-      "type":"string",
-      "max":200,
-      "min":1,
-      "pattern":"^[a-zA-Z-,]+"
-    },
-    "TranscribeMedicalContentIdentificationType":{
-      "type":"string",
-      "enum":["PHI"]
-    },
-    "TranscribeMedicalLanguageCode":{
-      "type":"string",
-      "enum":["en-US"]
-    },
-    "TranscribeMedicalRegion":{
-      "type":"string",
-      "enum":[
-        "us-east-1",
-        "us-east-2",
-        "us-west-2",
-        "ap-southeast-2",
-        "ca-central-1",
-        "eu-west-1",
-        "auto"
-      ]
-    },
-    "TranscribeMedicalSpecialty":{
-      "type":"string",
-      "enum":[
-        "PRIMARYCARE",
-        "CARDIOLOGY",
-        "NEUROLOGY",
-        "ONCOLOGY",
-        "RADIOLOGY",
-        "UROLOGY"
-      ]
-    },
-    "TranscribeMedicalType":{
-      "type":"string",
-      "enum":[
-        "CONVERSATION",
-        "DICTATION"
-      ]
-    },
-    "TranscribePartialResultsStability":{
-      "type":"string",
-      "enum":[
-        "low",
-        "medium",
-        "high"
-      ]
-    },
-    "TranscribePiiEntityTypes":{
-      "type":"string",
-      "max":300,
-      "min":1,
-      "pattern":"^[A-Z_, ]+"
-    },
-    "TranscribeRegion":{
-      "type":"string",
-      "enum":[
-        "us-east-2",
-        "us-east-1",
-        "us-west-2",
-        "ap-northeast-2",
-        "ap-southeast-2",
-        "ap-northeast-1",
-        "ca-central-1",
-        "eu-central-1",
-        "eu-west-1",
-        "eu-west-2",
-        "sa-east-1",
-        "auto"
-      ]
-    },
-    "TranscribeVocabularyFilterMethod":{
-      "type":"string",
-      "enum":[
-        "remove",
-        "mask",
-        "tag"
-      ]
-    },
-    "TranscribeVocabularyNamesOrFilterNamesString":{
-      "type":"string",
-      "max":3000,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9,-._]+"
-    },
-    "TranscriptionConfiguration":{
-      "type":"structure",
-      "members":{
-        "EngineTranscribeSettings":{
-          "shape":"EngineTranscribeSettings",
-          "documentation":"<p>The transcription configuration settings passed to Amazon Transcribe.</p>"
-        },
-        "EngineTranscribeMedicalSettings":{
-          "shape":"EngineTranscribeMedicalSettings",
-          "documentation":"<p>The transcription configuration settings passed to Amazon Transcribe Medical.</p>"
-        }
-      },
-      "documentation":"<p>The configuration for the current transcription operation. Must contain <code>EngineTranscribeSettings</code> or <code>EngineTranscribeMedicalSettings</code>.</p>"
-    },
     "UnauthorizedClientException":{
       "type":"structure",
       "members":{
@@ -11890,68 +3719,6 @@
       "error":{"httpStatusCode":422},
       "exception":true
     },
-    "UntagAttendeeRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "TagKeys",
-        "AttendeeId"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "AttendeeId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>",
-          "location":"uri",
-          "locationName":"attendeeId"
-        },
-        "TagKeys":{
-          "shape":"AttendeeTagKeyList",
-          "documentation":"<p>The tag keys.</p>"
-        }
-      }
-    },
-    "UntagMeetingRequest":{
-      "type":"structure",
-      "required":[
-        "MeetingId",
-        "TagKeys"
-      ],
-      "members":{
-        "MeetingId":{
-          "shape":"GuidString",
-          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>",
-          "location":"uri",
-          "locationName":"meetingId"
-        },
-        "TagKeys":{
-          "shape":"MeetingTagKeyList",
-          "documentation":"<p>The tag keys.</p>"
-        }
-      }
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceARN",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceARN":{
-          "shape":"Arn",
-          "documentation":"<p>The resource ARN.</p>"
-        },
-        "TagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>The tag keys.</p>"
-        }
-      }
-    },
     "UpdateAccountRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -12002,72 +3769,7 @@
     },
     "UpdateAccountSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateAppInstanceRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceArn",
-        "Name"
-      ],
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceArn"
-        },
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name that you want to change.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata that you want to change.</p>"
-        }
-      }
-    },
-    "UpdateAppInstanceResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstance</code>. </p>"
-        }
-      }
-    },
-    "UpdateAppInstanceUserRequest":{
-      "type":"structure",
-      "required":[
-        "AppInstanceUserArn",
-        "Name"
-      ],
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>.</p>",
-          "location":"uri",
-          "locationName":"appInstanceUserArn"
-        },
-        "Name":{
-          "shape":"UserName",
-          "documentation":"<p>The name of the <code>AppInstanceUser</code>.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the <code>AppInstanceUser</code>.</p>"
-        }
-      }
-    },
-    "UpdateAppInstanceUserResponse":{
-      "type":"structure",
-      "members":{
-        "AppInstanceUserArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the <code>AppInstanceUser</code>.</p>"
-        }
-      }
+      "members":{}
     },
     "UpdateBotRequest":{
       "type":"structure",
@@ -12103,124 +3805,6 @@
         }
       }
     },
-    "UpdateChannelMessageRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "MessageId"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID string of the message being updated.</p>",
-          "location":"uri",
-          "locationName":"messageId"
-        },
-        "Content":{
-          "shape":"Content",
-          "documentation":"<p>The content of the message being updated.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata of the message being updated.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "UpdateChannelMessageResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        },
-        "MessageId":{
-          "shape":"MessageId",
-          "documentation":"<p>The ID string of the message being updated.</p>"
-        }
-      }
-    },
-    "UpdateChannelReadMarkerRequest":{
-      "type":"structure",
-      "required":["ChannelArn"],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "UpdateChannelReadMarkerResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        }
-      }
-    },
-    "UpdateChannelRequest":{
-      "type":"structure",
-      "required":[
-        "ChannelArn",
-        "Name",
-        "Mode"
-      ],
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>",
-          "location":"uri",
-          "locationName":"channelArn"
-        },
-        "Name":{
-          "shape":"NonEmptyResourceName",
-          "documentation":"<p>The name of the channel.</p>"
-        },
-        "Mode":{
-          "shape":"ChannelMode",
-          "documentation":"<p>The mode of the update request.</p>"
-        },
-        "Metadata":{
-          "shape":"Metadata",
-          "documentation":"<p>The metadata for the update request.</p>"
-        },
-        "ChimeBearer":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The <code>AppInstanceUserArn</code> of the user that makes the API call.</p>",
-          "location":"header",
-          "locationName":"x-amz-chime-bearer"
-        }
-      }
-    },
-    "UpdateChannelResponse":{
-      "type":"structure",
-      "members":{
-        "ChannelArn":{
-          "shape":"ChimeArn",
-          "documentation":"<p>The ARN of the channel.</p>"
-        }
-      }
-    },
     "UpdateGlobalSettingsRequest":{
       "type":"structure",
       "members":{
@@ -12296,45 +3880,6 @@
         }
       }
     },
-    "UpdateProxySessionRequest":{
-      "type":"structure",
-      "required":[
-        "Capabilities",
-        "VoiceConnectorId",
-        "ProxySessionId"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The Amazon Chime voice connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "ProxySessionId":{
-          "shape":"NonEmptyString128",
-          "documentation":"<p>The proxy session ID.</p>",
-          "location":"uri",
-          "locationName":"proxySessionId"
-        },
-        "Capabilities":{
-          "shape":"CapabilityList",
-          "documentation":"<p>The proxy session capabilities.</p>"
-        },
-        "ExpiryMinutes":{
-          "shape":"PositiveInteger",
-          "documentation":"<p>The number of minutes allowed for the proxy session.</p>"
-        }
-      }
-    },
-    "UpdateProxySessionResponse":{
-      "type":"structure",
-      "members":{
-        "ProxySession":{
-          "shape":"ProxySession",
-          "documentation":"<p>The proxy session details.</p>"
-        }
-      }
-    },
     "UpdateRoomMembershipRequest":{
       "type":"structure",
       "required":[
@@ -12410,106 +3955,6 @@
         }
       }
     },
-    "UpdateSipMediaApplicationCallRequest":{
-      "type":"structure",
-      "required":[
-        "SipMediaApplicationId",
-        "TransactionId",
-        "Arguments"
-      ],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the SIP media application handling the call.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        },
-        "TransactionId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the call transaction.</p>",
-          "location":"uri",
-          "locationName":"transactionId"
-        },
-        "Arguments":{
-          "shape":"SMAUpdateCallArgumentsMap",
-          "documentation":"<p>Arguments made available to the Lambda function as part of the <code>CALL_UPDATE_REQUESTED</code> event. Can contain 0-20 key-value pairs.</p>"
-        }
-      }
-    },
-    "UpdateSipMediaApplicationCallResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplicationCall":{
-          "shape":"SipMediaApplicationCall",
-          "documentation":"<p>A <code>Call</code> instance for a SIP media application.</p>"
-        }
-      }
-    },
-    "UpdateSipMediaApplicationRequest":{
-      "type":"structure",
-      "required":["SipMediaApplicationId"],
-      "members":{
-        "SipMediaApplicationId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP media application ID.</p>",
-          "location":"uri",
-          "locationName":"sipMediaApplicationId"
-        },
-        "Name":{
-          "shape":"SipMediaApplicationName",
-          "documentation":"<p>The new name for the specified SIP media application.</p>"
-        },
-        "Endpoints":{
-          "shape":"SipMediaApplicationEndpointList",
-          "documentation":"<p>The new set of endpoints for the specified SIP media application.</p>"
-        }
-      }
-    },
-    "UpdateSipMediaApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "SipMediaApplication":{
-          "shape":"SipMediaApplication",
-          "documentation":"<p>The updated SIP media application details.</p>"
-        }
-      }
-    },
-    "UpdateSipRuleRequest":{
-      "type":"structure",
-      "required":[
-        "SipRuleId",
-        "Name"
-      ],
-      "members":{
-        "SipRuleId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The SIP rule ID.</p>",
-          "location":"uri",
-          "locationName":"sipRuleId"
-        },
-        "Name":{
-          "shape":"SipRuleName",
-          "documentation":"<p>The new name for the specified SIP rule.</p>"
-        },
-        "Disabled":{
-          "shape":"NullableBoolean",
-          "documentation":"<p>The new value specified to indicate whether the rule is disabled.</p>"
-        },
-        "TargetApplications":{
-          "shape":"SipRuleTargetApplicationList",
-          "documentation":"<p>The new value of the list of target applications.</p>"
-        }
-      }
-    },
-    "UpdateSipRuleResponse":{
-      "type":"structure",
-      "members":{
-        "SipRule":{
-          "shape":"SipRule",
-          "documentation":"<p>Updated SIP rule details.</p>"
-        }
-      }
-    },
     "UpdateUserRequest":{
       "type":"structure",
       "required":[
@@ -12606,80 +4051,6 @@
         }
       }
     },
-    "UpdateVoiceConnectorGroupRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorGroupId",
-        "Name",
-        "VoiceConnectorItems"
-      ],
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorGroupId"
-        },
-        "Name":{
-          "shape":"VoiceConnectorGroupName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector group.</p>"
-        },
-        "VoiceConnectorItems":{
-          "shape":"VoiceConnectorItemList",
-          "documentation":"<p>The <code>VoiceConnectorItems</code> to associate with the group.</p>"
-        }
-      }
-    },
-    "UpdateVoiceConnectorGroupResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorGroup":{
-          "shape":"VoiceConnectorGroup",
-          "documentation":"<p>The updated Amazon Chime Voice Connector group details.</p>"
-        }
-      }
-    },
-    "UpdateVoiceConnectorRequest":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "Name",
-        "RequireEncryption"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>",
-          "location":"uri",
-          "locationName":"voiceConnectorId"
-        },
-        "Name":{
-          "shape":"VoiceConnectorName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector.</p>"
-        },
-        "RequireEncryption":{
-          "shape":"Boolean",
-          "documentation":"<p>When enabled, requires encryption for the Amazon Chime Voice Connector.</p>"
-        }
-      }
-    },
-    "UpdateVoiceConnectorResponse":{
-      "type":"structure",
-      "members":{
-        "VoiceConnector":{
-          "shape":"VoiceConnector",
-          "documentation":"<p>The updated Amazon Chime Voice Connector details.</p>"
-        }
-      }
-    },
-    "UriType":{
-      "type":"string",
-      "max":4096
-    },
-    "UrlType":{
-      "type":"string",
-      "max":4096
-    },
     "User":{
       "type":"structure",
       "required":["UserId"],
@@ -12766,13 +4137,6 @@
       "type":"list",
       "member":{"shape":"UserError"}
     },
-    "UserId":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"[A-Za-z0-9]([A-Za-z0-9\\:\\-\\_\\.\\@]{0,62}[A-Za-z0-9])?",
-      "sensitive":true
-    },
     "UserIdList":{
       "type":"list",
       "member":{"shape":"NonEmptyString"},
@@ -12782,13 +4146,6 @@
       "type":"list",
       "member":{"shape":"User"}
     },
-    "UserName":{
-      "type":"string",
-      "max":100,
-      "min":1,
-      "pattern":".*\\S.*",
-      "sensitive":true
-    },
     "UserSettings":{
       "type":"structure",
       "required":["Telephony"],
@@ -12807,213 +4164,6 @@
         "SharedDevice"
       ]
     },
-    "ValidateE911AddressRequest":{
-      "type":"structure",
-      "required":[
-        "AwsAccountId",
-        "StreetNumber",
-        "StreetInfo",
-        "City",
-        "State",
-        "Country",
-        "PostalCode"
-      ],
-      "members":{
-        "AwsAccountId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The AWS account ID.</p>"
-        },
-        "StreetNumber":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address street number, such as <code>200</code> or <code>2121</code>.</p>"
-        },
-        "StreetInfo":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address street information, such as <code>8th Avenue</code>.</p>"
-        },
-        "City":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address city, such as <code>Portland</code>.</p>"
-        },
-        "State":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address state, such as <code>ME</code>.</p>"
-        },
-        "Country":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address country, such as <code>US</code>. </p>"
-        },
-        "PostalCode":{
-          "shape":"SensitiveNonEmptyString",
-          "documentation":"<p>The address postal code, such as <code>04352</code>.</p>"
-        }
-      }
-    },
-    "ValidateE911AddressResponse":{
-      "type":"structure",
-      "members":{
-        "ValidationResult":{
-          "shape":"ValidationResult",
-          "documentation":"<p>Number indicating the result of address validation. <code>0</code> means the address was perfect as is and successfully validated. <code>1</code> means the address was corrected. <code>2</code> means the address sent was not close enough and was not validated.</p>"
-        },
-        "AddressExternalId":{
-          "shape":"String",
-          "documentation":"<p>The ID that represents the address.</p>"
-        },
-        "Address":{
-          "shape":"Address",
-          "documentation":"<p>The validated address.</p>"
-        },
-        "CandidateAddressList":{
-          "shape":"CandidateAddressList",
-          "documentation":"<p>The list of address suggestions.</p>"
-        }
-      }
-    },
-    "ValidationResult":{
-      "type":"integer",
-      "max":2,
-      "min":0
-    },
-    "VideoArtifactsConfiguration":{
-      "type":"structure",
-      "required":["State"],
-      "members":{
-        "State":{
-          "shape":"ArtifactsState",
-          "documentation":"<p>Indicates whether the video artifact is enabled or disabled.</p>"
-        },
-        "MuxType":{
-          "shape":"VideoMuxType",
-          "documentation":"<p>The MUX type of the video artifact configuration object.</p>"
-        }
-      },
-      "documentation":"<p>The video artifact configuration object.</p>"
-    },
-    "VideoMuxType":{
-      "type":"string",
-      "enum":["VideoOnly"]
-    },
-    "VoiceConnector":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>"
-        },
-        "AwsRegion":{
-          "shape":"VoiceConnectorAwsRegion",
-          "documentation":"<p> The AWS Region in which the Amazon Chime Voice Connector is created. Default: <code>us-east-1</code>. </p>"
-        },
-        "Name":{
-          "shape":"VoiceConnectorName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector.</p>"
-        },
-        "OutboundHostName":{
-          "shape":"String",
-          "documentation":"<p>The outbound host name for the Amazon Chime Voice Connector.</p>"
-        },
-        "RequireEncryption":{
-          "shape":"Boolean",
-          "documentation":"<p>Designates whether encryption is required for the Amazon Chime Voice Connector.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The Amazon Chime Voice Connector creation timestamp, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The updated Amazon Chime Voice Connector timestamp, in ISO 8601 format.</p>"
-        },
-        "VoiceConnectorArn":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ARN of the specified Amazon Chime Voice Connector.</p>"
-        }
-      },
-      "documentation":"<p>The Amazon Chime Voice Connector configuration, including outbound host name and encryption settings.</p>"
-    },
-    "VoiceConnectorAwsRegion":{
-      "type":"string",
-      "enum":[
-        "us-east-1",
-        "us-west-2"
-      ]
-    },
-    "VoiceConnectorGroup":{
-      "type":"structure",
-      "members":{
-        "VoiceConnectorGroupId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector group ID.</p>"
-        },
-        "Name":{
-          "shape":"VoiceConnectorGroupName",
-          "documentation":"<p>The name of the Amazon Chime Voice Connector group.</p>"
-        },
-        "VoiceConnectorItems":{
-          "shape":"VoiceConnectorItemList",
-          "documentation":"<p>The Amazon Chime Voice Connectors to which to route inbound calls.</p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The Amazon Chime Voice Connector group creation time stamp, in ISO 8601 format.</p>"
-        },
-        "UpdatedTimestamp":{
-          "shape":"Iso8601Timestamp",
-          "documentation":"<p>The updated Amazon Chime Voice Connector group time stamp, in ISO 8601 format.</p>"
-        },
-        "VoiceConnectorGroupArn":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ARN of the specified Amazon Chime Voice Connector group.</p>"
-        }
-      },
-      "documentation":"<p>The Amazon Chime Voice Connector group configuration, including associated Amazon Chime Voice Connectors. You can include Amazon Chime Voice Connectors from different AWS Regions in your group. This creates a fault tolerant mechanism for fallback in case of availability events.</p>"
-    },
-    "VoiceConnectorGroupList":{
-      "type":"list",
-      "member":{"shape":"VoiceConnectorGroup"}
-    },
-    "VoiceConnectorGroupName":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "VoiceConnectorItem":{
-      "type":"structure",
-      "required":[
-        "VoiceConnectorId",
-        "Priority"
-      ],
-      "members":{
-        "VoiceConnectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Chime Voice Connector ID.</p>"
-        },
-        "Priority":{
-          "shape":"VoiceConnectorItemPriority",
-          "documentation":"<p>The priority associated with the Amazon Chime Voice Connector, with 1 being the highest priority. Higher priority Amazon Chime Voice Connectors are attempted first.</p>"
-        }
-      },
-      "documentation":"<p>For Amazon Chime Voice Connector groups, the Amazon Chime Voice Connectors to which to route inbound calls. Includes priority configuration settings. Limit: 3 <code>VoiceConnectorItems</code> per Amazon Chime Voice Connector group.</p>"
-    },
-    "VoiceConnectorItemList":{
-      "type":"list",
-      "member":{"shape":"VoiceConnectorItem"}
-    },
-    "VoiceConnectorItemPriority":{
-      "type":"integer",
-      "max":99,
-      "min":1
-    },
-    "VoiceConnectorList":{
-      "type":"list",
-      "member":{"shape":"VoiceConnector"}
-    },
-    "VoiceConnectorName":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
     "VoiceConnectorSettings":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/service-2.json 2.31.35-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-identity/2021-04-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2021-04-20",
     "endpointPrefix":"identity-chime",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Chime SDK Identity",
     "serviceId":"Chime SDK Identity",
     "signatureVersion":"v4",
     "signingName":"chime",
-    "uid":"chime-sdk-identity-2021-04-20"
+    "uid":"chime-sdk-identity-2021-04-20",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateAppInstance":{
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json 2.31.35-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-media-pipelines/2021-07-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -3575,8 +3575,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3676,8 +3675,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMediaInsightsPipelineConfigurationRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json 2.31.35-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-meetings/2021-07-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2021-07-15",
     "endpointPrefix":"meetings-chime",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Chime SDK Meetings",
     "serviceId":"Chime SDK Meetings",
     "signatureVersion":"v4",
     "signingName":"chime",
-    "uid":"chime-sdk-meetings-2021-07-15"
+    "uid":"chime-sdk-meetings-2021-07-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchCreateAttendee":{
@@ -30,7 +32,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates up to 100 attendees for an active Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
+      "documentation":"<p>Creates up to 100 attendees for an active Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
     },
     "BatchUpdateAttendeeCapabilitiesExcept":{
       "name":"BatchUpdateAttendeeCapabilitiesExcept",
@@ -50,7 +52,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates <code>AttendeeCapabilities</code> except the capabilities listed in an <code>ExcludedAttendeeIds</code> table.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
+      "documentation":"<p>Updates <code>AttendeeCapabilities</code> except the capabilities listed in an <code>ExcludedAttendeeIds</code> table.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>If meeting features is defined as <code>Video:MaxResolution:None</code> but <code>Content:MaxResolution</code> is defined as something other than <code>None</code> and attendee capabilities are not defined in the API request, then the default attendee video capability is set to <code>Receive</code> and attendee content capability is set to <code>SendReceive</code>. This is because content <code>SendReceive</code> requires video to be at least <code>Receive</code>.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
     },
     "CreateAttendee":{
       "name":"CreateAttendee",
@@ -71,7 +73,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Creates a new attendee for an active Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
+      "documentation":"<p> Creates a new attendee for an active Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
     },
     "CreateMeeting":{
       "name":"CreateMeeting",
@@ -91,7 +93,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates a new Amazon Chime SDK meeting in the specified media Region with no initial attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/chime-sdk-meetings-regions.html\">Amazon Chime SDK Media Regions</a> in the <i>Amazon Chime Developer Guide</i>. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
+      "documentation":"<p>Creates a new Amazon Chime SDK meeting in the specified media Region with no initial attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions\">Available Regions</a> and <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html\">Using meeting Regions</a>, both in the <i>Amazon Chime SDK Developer Guide</i>. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p> <note> <p>If you use this API in conjuction with the and APIs, and you don't specify the <code>MeetingFeatures.Content.MaxResolution</code> or <code>MeetingFeatures.Video.MaxResolution</code> parameters, the following defaults are used:</p> <ul> <li> <p>Content.MaxResolution: FHD</p> </li> <li> <p>Video.MaxResolution: HD</p> </li> </ul> </note>"
     },
     "CreateMeetingWithAttendees":{
       "name":"CreateMeetingWithAttendees",
@@ -111,7 +113,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p> Creates a new Amazon Chime SDK meeting in the specified media Region, with attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/chime-sdk-meetings-regions.html\">Amazon Chime SDK Media Regions</a> in the <i>Amazon Chime Developer Guide</i>. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
+      "documentation":"<p> Creates a new Amazon Chime SDK meeting in the specified media Region, with attendees. For more information about specifying media Regions, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/sdk-available-regions\">Available Regions</a> and <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/chime-sdk-meetings-regions.html\">Using meeting Regions</a>, both in the <i>Amazon Chime SDK Developer Guide</i>. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime SDK Developer Guide</i>. </p> <note> <p>If you use this API in conjuction with the and APIs, and you don't specify the <code>MeetingFeatures.Content.MaxResolution</code> or <code>MeetingFeatures.Video.MaxResolution</code> parameters, the following defaults are used:</p> <ul> <li> <p>Content.MaxResolution: FHD</p> </li> <li> <p>Video.MaxResolution: HD</p> </li> </ul> </note>"
     },
     "DeleteAttendee":{
       "name":"DeleteAttendee",
@@ -130,7 +132,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes an attendee from the specified Amazon Chime SDK meeting and deletes their <code>JoinToken</code>. Attendees are automatically deleted when a Amazon Chime SDK meeting is deleted. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
+      "documentation":"<p>Deletes an attendee from the specified Amazon Chime SDK meeting and deletes their <code>JoinToken</code>. Attendees are automatically deleted when a Amazon Chime SDK meeting is deleted. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
     },
     "DeleteMeeting":{
       "name":"DeleteMeeting",
@@ -149,7 +151,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes the specified Amazon Chime SDK meeting. The operation deletes all attendees, disconnects all clients, and prevents new clients from joining the meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified Amazon Chime SDK meeting. The operation deletes all attendees, disconnects all clients, and prevents new clients from joining the meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
     },
     "GetAttendee":{
       "name":"GetAttendee",
@@ -168,7 +170,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Gets the Amazon Chime SDK attendee details for a specified meeting ID and attendee ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
+      "documentation":"<p> Gets the Amazon Chime SDK attendee details for a specified meeting ID and attendee ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
     },
     "GetMeeting":{
       "name":"GetMeeting",
@@ -187,7 +189,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets the Amazon Chime SDK meeting details for the specified meeting ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
+      "documentation":"<p>Gets the Amazon Chime SDK meeting details for the specified meeting ID. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>.</p>"
     },
     "ListAttendees":{
       "name":"ListAttendees",
@@ -207,7 +209,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Lists the attendees for the specified Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
+      "documentation":"<p> Lists the attendees for the specified Amazon Chime SDK meeting. For more information about the Amazon Chime SDK, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/meetings-sdk.html\">Using the Amazon Chime SDK</a> in the <i>Amazon Chime Developer Guide</i>. </p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -332,7 +334,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The capabilities that you want to update.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
+      "documentation":"<p>The capabilities that you want to update.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>If meeting features is defined as <code>Video:MaxResolution:None</code> but <code>Content:MaxResolution</code> is defined as something other than <code>None</code> and attendee capabilities are not defined in the API request, then the default attendee video capability is set to <code>Receive</code> and attendee content capability is set to <code>SendReceive</code>. This is because content <code>SendReceive</code> requires video to be at least <code>Receive</code>.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
     }
   },
   "shapes":{
@@ -366,7 +368,7 @@
         },
         "Capabilities":{
           "shape":"AttendeeCapabilities",
-          "documentation":"<p>The capabilities assigned to an attendee: audio, video, or content.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
+          "documentation":"<p>The capabilities assigned to an attendee: audio, video, or content.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>If meeting features is defined as <code>Video:MaxResolution:None</code> but <code>Content:MaxResolution</code> is defined as something other than <code>None</code> and attendee capabilities are not defined in the API request, then the default attendee video capability is set to <code>Receive</code> and attendee content capability is set to <code>SendReceive</code>. This is because content <code>SendReceive</code> requires video to be at least <code>Receive</code>.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
         }
       },
       "documentation":"<p>An Amazon Chime SDK meeting attendee. Includes a unique <code>AttendeeId</code> and <code>JoinToken</code>. The <code>JoinToken</code> allows a client to authenticate and join as the specified attendee. The <code>JoinToken</code> expires when the meeting ends, or when <a>DeleteAttendee</a> is called. After that, the attendee is unable to join the meeting. </p> <p>We recommend securely transferring each <code>JoinToken</code> from your server application to the client so that no other client has access to the token except for the one authorized to represent the attendee.</p>"
@@ -392,7 +394,7 @@
           "documentation":"<p>The content capability assigned to an attendee.</p>"
         }
       },
-      "documentation":"<p>The media capabilities of an attendee: audio, video, or content.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information, refer to and .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and an attendee unmutes their microphone, audio flows from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and the attendee turns on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
+      "documentation":"<p>The media capabilities of an attendee: audio, video, or content.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information, refer to and .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>If meeting features is defined as <code>Video:MaxResolution:None</code> but <code>Content:MaxResolution</code> is defined as something other than <code>None</code> and attendee capabilities are not defined in the API request, then the default attendee video capability is set to <code>Receive</code> and attendee content capability is set to <code>SendReceive</code>. This is because content <code>SendReceive</code> requires video to be at least <code>Receive</code>.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and an attendee unmutes their microphone, audio flows from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and the attendee turns on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
     },
     "AttendeeFeatures":{
       "type":"structure",
@@ -591,7 +593,7 @@
         },
         "Capabilities":{
           "shape":"AttendeeCapabilities",
-          "documentation":"<p>The capabilities (<code>audio</code>, <code>video</code>, or <code>content</code>) that you want to grant an attendee. If you don't specify capabilities, all users have send and receive capabilities on all media channels by default.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
+          "documentation":"<p>The capabilities (<code>audio</code>, <code>video</code>, or <code>content</code>) that you want to grant an attendee. If you don't specify capabilities, all users have send and receive capabilities on all media channels by default.</p> <note> <p>You use the capabilities with a set of values that control what the capabilities can do, such as <code>SendReceive</code> data. For more information about those values, see .</p> </note> <p>When using capabilities, be aware of these corner cases:</p> <ul> <li> <p>If you specify <code>MeetingFeatures:Video:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Video</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>If you specify <code>MeetingFeatures:Content:MaxResolution:None</code> when you create a meeting, all API requests that include <code>SendReceive</code>, <code>Send</code>, or <code>Receive</code> for <code>AttendeeCapabilities:Content</code> will be rejected with <code>ValidationError 400</code>.</p> </li> <li> <p>You can't set <code>content</code> capabilities to <code>SendReceive</code> or <code>Receive</code> unless you also set <code>video</code> capabilities to <code>SendReceive</code> or <code>Receive</code>. If you don't set the <code>video</code> capability to receive, the response will contain an HTTP 400 Bad Request status code. However, you can set your <code>video</code> capability to receive and you set your <code>content</code> capability to not receive.</p> </li> <li> <p>If meeting features is defined as <code>Video:MaxResolution:None</code> but <code>Content:MaxResolution</code> is defined as something other than <code>None</code> and attendee capabilities are not defined in the API request, then the default attendee video capability is set to <code>Receive</code> and attendee content capability is set to <code>SendReceive</code>. This is because content <code>SendReceive</code> requires video to be at least <code>Receive</code>.</p> </li> <li> <p>When you change an <code>audio</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee left their microphone unmuted, audio will flow from the attendee to the other meeting participants.</p> </li> <li> <p>When you change a <code>video</code> or <code>content</code> capability from <code>None</code> or <code>Receive</code> to <code>Send</code> or <code>SendReceive</code> , and if the attendee turned on their video or content streams, remote attendees can receive those streams, but only after media renegotiation between the client and the Amazon Chime back-end server.</p> </li> </ul>"
         }
       }
     },
@@ -669,6 +671,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>Applies one or more tags to an Amazon Chime SDK meeting. Note the following:</p> <ul> <li> <p>Not all resources have tags. For a list of services with resources that support tagging using this operation, see <a href=\"https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html\">Services that support the Resource Groups Tagging API</a>. If the resource doesn't yet support this operation, the resource's service might support tagging using its own API operations. For more information, refer to the documentation for that service.</p> </li> <li> <p>Each resource can have up to 50 tags. For other limits, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions\">Tag Naming and Usage Conventions</a> in the <i>AWS General Reference</i>.</p> </li> <li> <p>You can only tag resources that are located in the specified Amazon Web Services Region for the Amazon Web Services account.</p> </li> <li> <p>To add tags to a resource, you need the necessary permissions for the service that the resource belongs to as well as permissions for adding tags. For more information, see the documentation for each service.</p> </li> </ul> <important> <p>Do not store personally identifiable information (PII) or other confidential or sensitive information in tags. We use tags to provide you with billing and administration services. Tags are not intended to be used for private or sensitive data.</p> </important> <p> <b>Minimum permissions</b> </p> <p>In addition to the <code>tag:TagResources</code> permission required by this operation, you must also have the tagging permission defined by the service that created the resource. For example, to tag a <code>ChimeSDKMeetings</code> instance using the <code>TagResources</code> operation, you must have both of the following permissions:</p> <p> <code>tag:TagResources</code> </p> <p> <code>ChimeSDKMeetings:CreateTags</code> </p> <note> <p>Some services might have specific requirements for tagging some resources. For example, to tag an Amazon S3 bucket, you must also have the <code>s3:GetBucketTagging</code> permission. If the expected minimum permissions don't work, check the documentation for that service's tagging APIs for more information.</p> </note>"
+        },
+        "MediaPlacementNetworkType":{
+          "shape":"MediaPlacementNetworkType",
+          "documentation":"<p>The type of network for the media placement. Either IPv4 only or dual-stack (IPv4 and IPv6).</p>"
         }
       }
     },
@@ -730,6 +736,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags in the request.</p>"
+        },
+        "MediaPlacementNetworkType":{
+          "shape":"MediaPlacementNetworkType",
+          "documentation":"<p>The type of network for the media placement. Either IPv4 only or dual-stack (IPv4 and IPv6).</p>"
         }
       }
     },
@@ -1100,6 +1110,13 @@
       },
       "documentation":"<p>A set of endpoints used by clients to connect to the media service group for an Amazon Chime SDK meeting.</p>"
     },
+    "MediaPlacementNetworkType":{
+      "type":"string",
+      "enum":[
+        "Ipv4Only",
+        "DualStack"
+      ]
+    },
     "MediaRegion":{
       "type":"string",
       "max":64,
@@ -1363,8 +1380,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1600,8 +1616,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAttendeeCapabilitiesRequest":{
       "type":"structure",
@@ -1657,5 +1672,5 @@
       ]
     }
   },
-  "documentation":"<p>The Amazon Chime SDK meetings APIs in this section allow software developers to create Amazon Chime SDK meetings, set the Amazon Web Services Regions for meetings, create and manage users, and send and receive meeting notifications. For more information about the meeting APIs, see <a href=\"https://docs.aws.amazon.com/chime/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html\">Amazon Chime SDK meetings</a>.</p>"
+  "documentation":"<p>The Amazon Chime SDK meetings APIs in this section allow software developers to create Amazon Chime SDK meetings, set the Amazon Web Services Regions for meetings, create and manage users, and send and receive meeting notifications. For more information about the meeting APIs, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html\">Amazon Chime SDK meetings</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json 2.31.35-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-messaging/2021-05-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2021-05-15",
     "endpointPrefix":"messaging-chime",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Chime SDK Messaging",
     "serviceId":"Chime SDK Messaging",
     "signatureVersion":"v4",
     "signingName":"chime",
-    "uid":"chime-sdk-messaging-2021-05-15"
+    "uid":"chime-sdk-messaging-2021-05-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateChannelFlow":{
@@ -133,7 +135,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Creates a channel flow, a container for processors. Processors are AWS Lambda functions that perform actions on chat messages, such as stripping out profanity. You can associate channel flows with channels, and the processors in the channel flow then take action on all messages sent to that channel. This is a developer API.</p> <p>Channel flows process the following items:</p> <ol> <li> <p>New and updated messages</p> </li> <li> <p>Persistent and non-persistent messages</p> </li> <li> <p>The Standard message type</p> </li> </ol> <note> <p>Channel flows don't process Control or System messages. For more information about the message types provided by Chime SDK messaging, refer to <a href=\"https://docs.aws.amazon.com/chime/latest/dg/using-the-messaging-sdk.html#msg-types\">Message types</a> in the <i>Amazon Chime developer guide</i>.</p> </note>"
+      "documentation":"<p>Creates a channel flow, a container for processors. Processors are AWS Lambda functions that perform actions on chat messages, such as stripping out profanity. You can associate channel flows with channels, and the processors in the channel flow then take action on all messages sent to that channel. This is a developer API.</p> <p>Channel flows process the following items:</p> <ol> <li> <p>New and updated messages</p> </li> <li> <p>Persistent and non-persistent messages</p> </li> <li> <p>The Standard message type</p> </li> </ol> <note> <p>Channel flows don't process Control or System messages. For more information about the message types provided by Chime SDK messaging, refer to <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/dg/using-the-messaging-sdk.html#msg-types\">Message types</a> in the <i>Amazon Chime developer guide</i>.</p> </note>"
     },
     "CreateChannelMembership":{
       "name":"CreateChannelMembership",
@@ -614,7 +616,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists all channel memberships in a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p> </note> <p>If you want to list the channels to which a specific app instance user belongs, see the <a href=\"https://docs.aws.amazon.com/chime/latest/APIReference/API_messaging-chime_ListChannelMembershipsForAppInstanceUser.html\">ListChannelMembershipsForAppInstanceUser</a> API.</p>"
+      "documentation":"<p>Lists all channel memberships in a channel.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p> </note> <p>If you want to list the channels to which a specific app instance user belongs, see the <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMembershipsForAppInstanceUser.html\">ListChannelMembershipsForAppInstanceUser</a> API.</p>"
     },
     "ListChannelMembershipsForAppInstanceUser":{
       "name":"ListChannelMembershipsForAppInstanceUser",
@@ -847,7 +849,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Redacts message content, but not metadata. The message exists in the back end, but the action returns null content, and the state shows as redacted.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p> </note>"
+      "documentation":"<p>Redacts message content and metadata. The message exists in the back end, but the action returns null content, and the state shows as redacted.</p> <note> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p> </note>"
     },
     "SearchChannels":{
       "name":"SearchChannels",
@@ -866,7 +868,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Allows the <code>ChimeBearer</code> to search channels by channel members. Users or bots can search across the channels that they belong to. Users in the <code>AppInstanceAdmin</code> role can search across all channels.</p> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p>"
+      "documentation":"<p>Allows the <code>ChimeBearer</code> to search channels by channel members. Users or bots can search across the channels that they belong to. Users in the <code>AppInstanceAdmin</code> role can search across all channels.</p> <p>The <code>x-amz-chime-bearer</code> request header is mandatory. Use the ARN of the <code>AppInstanceUser</code> or <code>AppInstanceBot</code> that makes the API call as the value in the header.</p> <note> <p>This operation isn't supported for <code>AppInstanceUsers</code> with a large number of memberships.</p> </note>"
     },
     "SendChannelMessage":{
       "name":"SendChannelMessage",
@@ -2042,7 +2044,7 @@
         },
         "ChannelId":{
           "shape":"ChannelId",
-          "documentation":"<p>The ID of the channel in the request.</p>"
+          "documentation":"<p>An ID for the channel being created. If you do not specify an ID, a UUID will be created for the channel.</p>"
         },
         "MemberArns":{
           "shape":"ChannelMemberArns",
@@ -2740,6 +2742,12 @@
     "GetMessagingSessionEndpointRequest":{
       "type":"structure",
       "members":{
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The type of network for the messaging session endpoint. Either IPv4 only or dual-stack (IPv4 and IPv6).</p>",
+          "location":"querystring",
+          "locationName":"network-type"
+        }
       }
     },
     "GetMessagingSessionEndpointResponse":{
@@ -3425,6 +3433,13 @@
       "max":40,
       "min":1
     },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4_ONLY",
+        "DUAL_STACK"
+      ]
+    },
     "NextToken":{
       "type":"string",
       "max":2048,
@@ -3789,14 +3804,14 @@
         },
         "Values":{
           "shape":"SearchFieldValues",
-          "documentation":"<p>The values that you want to search for, a list of strings. The values must be <code>AppInstanceUserArns</code> specified as a list of strings.</p> <note> <p>This operation isn't supported for <code>AppInstanceUsers</code> with large number of memberships.</p> </note>"
+          "documentation":"<p>The values that you want to search for, a list of strings. The values must be <code>AppInstanceUserArns</code> specified as a list of strings.</p> <note> <p>This operation isn't supported for <code>AppInstanceUsers</code> with a large number of memberships.</p> </note>"
         },
         "Operator":{
           "shape":"SearchFieldOperator",
           "documentation":"<p>The operator used to compare field values, currently <code>EQUALS</code> or <code>INCLUDES</code>. Use the <code>EQUALS</code> operator to find channels whose memberships equal the specified values. Use the <code>INCLUDES</code> operator to find channels whose memberships include the specified values.</p>"
         }
       },
-      "documentation":"<p>A <code>Field</code> of the channel that you want to search.</p>"
+      "documentation":"<p>A <code>Field</code> of the channel that you want to search.</p> <note> <p>This operation isn't supported for <code>AppInstanceUsers</code> with a large number of memberships.</p> </note>"
     },
     "SearchFieldKey":{
       "type":"string",
@@ -4291,5 +4306,5 @@
       "max":4096
     }
   },
-  "documentation":"<p>The Amazon Chime SDK messaging APIs in this section allow software developers to send and receive messages in custom messaging applications. These APIs depend on the frameworks provided by the Amazon Chime SDK identity APIs. For more information about the messaging APIs, see <a href=\"https://docs.aws.amazon.com/chime/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html\">Amazon Chime SDK messaging</a>.</p>"
+  "documentation":"<p>The Amazon Chime SDK messaging APIs in this section allow software developers to send and receive messages in custom messaging applications. These APIs depend on the frameworks provided by the Amazon Chime SDK identity APIs. For more information about the messaging APIs, see <a href=\"https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Messaging.html\">Amazon Chime SDK messaging</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/service-2.json 2.31.35-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/chime-sdk-voice/2022-08-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1952,6 +1952,7 @@
         {"shape":"ForbiddenException"},
         {"shape":"BadRequestException"},
         {"shape":"ThrottledClientException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ServiceUnavailableException"},
         {"shape":"ServiceFailureException"}
       ],
@@ -1961,8 +1962,7 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You don't have the permissions needed to run this action.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -2113,8 +2113,7 @@
     },
     "BadRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input parameters don't match the service's restrictions.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -2262,8 +2261,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Multiple instances of the same request were made simultaneously.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -2542,6 +2540,10 @@
         "IntegrationType":{
           "shape":"VoiceConnectorIntegrationType",
           "documentation":"<p>The connectors for use with Amazon Connect.</p> <p>The following options are available:</p> <ul> <li> <p> <code>CONNECT_CALL_TRANSFER_CONNECTOR</code> - Enables enterprises to integrate Amazon Connect with other voice systems to directly transfer voice calls and metadata without using the public telephone network. They can use Amazon Connect telephony and Interactive Voice Response (IVR) with their existing voice systems to modernize the IVR experience of their existing contact center and their enterprise and branch voice systems. Additionally, enterprises migrating their contact center to Amazon Connect can start with Connect telephony and IVR for immediate modernization ahead of agent migration.</p> </li> <li> <p> <code>CONNECT_ANALYTICS_CONNECTOR</code> - Enables enterprises to integrate Amazon Connect with other voice systems for real-time and post-call analytics. They can use Amazon Connect Contact Lens with their existing voice systems to provides call recordings, conversational analytics (including contact transcript, sensitive data redaction, content categorization, theme detection, sentiment analysis, real-time alerts, and post-contact summary), and agent performance evaluations (including evaluation forms, automated evaluation, supervisor review) with a rich user experience to display, search and filter customer interactions, and programmatic access to data streams and the data lake. Additionally, enterprises migrating their contact center to Amazon Connect can start with Contact Lens analytics and performance insights ahead of agent migration.</p> </li> </ul>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The type of network for the Voice Connector. Either IPv4 only or dual-stack (IPv4 and IPv6).</p>"
         }
       }
     },
@@ -2967,8 +2969,7 @@
     },
     "ForbiddenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client is permanently forbidden from making the request.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -3503,8 +3504,7 @@
     },
     "GoneException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Access to the target resource is no longer available at the origin server. This condition is likely to be permanent.</p>",
       "error":{"httpStatusCode":410},
       "exception":true
@@ -3942,6 +3942,13 @@
       },
       "documentation":"<p>The configuration for a call analytics task.</p>"
     },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4_ONLY",
+        "DUAL_STACK"
+      ]
+    },
     "NextTokenString":{
       "type":"string",
       "max":65535
@@ -3969,8 +3976,7 @@
     },
     "NotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested resource couldn't be found.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
@@ -4314,6 +4320,10 @@
         "UpdatedTimestamp":{
           "shape":"Iso8601Timestamp",
           "documentation":"<p>The updated phone number order time stamp, in ISO 8601 format.</p>"
+        },
+        "FocDate":{
+          "shape":"Iso8601Timestamp",
+          "documentation":"<p>The Firm Order Commitment (FOC) date for phone number porting orders. This field is null if a phone number order is not a porting order.</p>"
         }
       },
       "documentation":"<p>The details of an Amazon Chime SDK phone number order.</p>"
@@ -4763,8 +4773,7 @@
     },
     "ResourceLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request exceeds the resource limit.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -4901,8 +4910,7 @@
     },
     "ServiceFailureException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The service encountered an unexpected error.</p>",
       "error":{"httpStatusCode":500},
       "exception":true,
@@ -4910,8 +4918,7 @@
     },
     "ServiceUnavailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The service is currently unavailable.</p>",
       "error":{"httpStatusCode":503},
       "exception":true,
@@ -5461,8 +5468,7 @@
     },
     "ThrottledClientException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of customer requests exceeds the request rate limit.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
@@ -5475,16 +5481,14 @@
     },
     "UnauthorizedClientException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client isn't authorized to request a resource.</p>",
       "error":{"httpStatusCode":401},
       "exception":true
     },
     "UnprocessableEntityException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A well-formed request couldn't be followed due to semantic errors.</p>",
       "error":{"httpStatusCode":422},
       "exception":true
@@ -5953,6 +5957,10 @@
         "IntegrationType":{
           "shape":"VoiceConnectorIntegrationType",
           "documentation":"<p>The connectors for use with Amazon Connect.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The type of network of the Voice Connector. Either IPv4 only or dual-stack (IPv4 and IPv6).</p>"
         }
       },
       "documentation":"<p>The Amazon Chime SDK Voice Connector configuration, including outbound host name and encryption settings.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/paginators-1.json 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -107,6 +107,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "idNamespaceAssociationSummaries"
+    },
+    "ListProtectedJobs": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "protectedJobs"
+    },
+    "ListCollaborationChangeRequests": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "collaborationChangeRequestSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/service-2.json 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/service-2.json
--- 2.23.6-1/awscli/botocore/data/cleanrooms/2022-02-17/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanrooms/2022-02-17/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,7 +29,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves multiple analysis templates within a collaboration by their Amazon Resource Names (ARNs).</p>"
+      "documentation":"<p>Retrieves multiple analysis templates within a collaboration by their Amazon Resource Names (ARNs).</p>",
+      "readonly":true
     },
     "BatchGetSchema":{
       "name":"BatchGetSchema",
@@ -47,7 +48,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves multiple schemas by their identifiers.</p>"
+      "documentation":"<p>Retrieves multiple schemas by their identifiers.</p>",
+      "readonly":true
     },
     "BatchGetSchemaAnalysisRule":{
       "name":"BatchGetSchemaAnalysisRule",
@@ -65,7 +67,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves multiple analysis rule schemas.</p>"
+      "documentation":"<p>Retrieves multiple analysis rule schemas.</p>",
+      "readonly":true
     },
     "CreateAnalysisTemplate":{
       "name":"CreateAnalysisTemplate",
@@ -105,6 +108,26 @@
       ],
       "documentation":"<p>Creates a new collaboration.</p>"
     },
+    "CreateCollaborationChangeRequest":{
+      "name":"CreateCollaborationChangeRequest",
+      "http":{
+        "method":"POST",
+        "requestUri":"/collaborations/{collaborationIdentifier}/changeRequests",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateCollaborationChangeRequestInput"},
+      "output":{"shape":"CreateCollaborationChangeRequestOutput"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Creates a new change request to modify an existing collaboration. This enables post-creation modifications to collaborations through a structured API-driven approach.</p>"
+    },
     "CreateConfiguredAudienceModelAssociation":{
       "name":"CreateConfiguredAudienceModelAssociation",
       "http":{
@@ -157,6 +180,7 @@
       "output":{"shape":"CreateConfiguredTableAnalysisRuleOutput"},
       "errors":[
         {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -277,13 +301,14 @@
       "output":{"shape":"CreatePrivacyBudgetTemplateOutput"},
       "errors":[
         {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates a privacy budget template for a specified membership. Each membership can have only one privacy budget template, but it can be deleted and recreated. If you need to change the privacy budget template for a membership, use the <a>UpdatePrivacyBudgetTemplate</a> operation.</p>"
+      "documentation":"<p>Creates a privacy budget template for a specified collaboration. Each collaboration can have only one privacy budget template. If you need to change the privacy budget template, use the <a>UpdatePrivacyBudgetTemplate</a> operation.</p>"
     },
     "DeleteAnalysisTemplate":{
       "name":"DeleteAnalysisTemplate",
@@ -515,7 +540,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Deletes a privacy budget template for a specified membership.</p>",
+      "documentation":"<p>Deletes a privacy budget template for a specified collaboration.</p>",
       "idempotent":true
     },
     "GetAnalysisTemplate":{
@@ -534,7 +559,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves an analysis template.</p>"
+      "documentation":"<p>Retrieves an analysis template.</p>",
+      "readonly":true
     },
     "GetCollaboration":{
       "name":"GetCollaboration",
@@ -551,7 +577,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns metadata about a collaboration.</p>"
+      "documentation":"<p>Returns metadata about a collaboration.</p>",
+      "readonly":true
     },
     "GetCollaborationAnalysisTemplate":{
       "name":"GetCollaborationAnalysisTemplate",
@@ -569,7 +596,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves an analysis template within a collaboration.</p>"
+      "documentation":"<p>Retrieves an analysis template within a collaboration.</p>",
+      "readonly":true
+    },
+    "GetCollaborationChangeRequest":{
+      "name":"GetCollaborationChangeRequest",
+      "http":{
+        "method":"GET",
+        "requestUri":"/collaborations/{collaborationIdentifier}/changeRequests/{changeRequestIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCollaborationChangeRequestInput"},
+      "output":{"shape":"GetCollaborationChangeRequestOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific collaboration change request.</p>",
+      "readonly":true
     },
     "GetCollaborationConfiguredAudienceModelAssociation":{
       "name":"GetCollaborationConfiguredAudienceModelAssociation",
@@ -587,7 +634,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a configured audience model association within a collaboration.</p>"
+      "documentation":"<p>Retrieves a configured audience model association within a collaboration.</p>",
+      "readonly":true
     },
     "GetCollaborationIdNamespaceAssociation":{
       "name":"GetCollaborationIdNamespaceAssociation",
@@ -605,7 +653,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves an ID namespace association from a specific collaboration.</p>"
+      "documentation":"<p>Retrieves an ID namespace association from a specific collaboration.</p>",
+      "readonly":true
     },
     "GetCollaborationPrivacyBudgetTemplate":{
       "name":"GetCollaborationPrivacyBudgetTemplate",
@@ -623,7 +672,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns details about a specified privacy budget template.</p>"
+      "documentation":"<p>Returns details about a specified privacy budget template.</p>",
+      "readonly":true
     },
     "GetConfiguredAudienceModelAssociation":{
       "name":"GetConfiguredAudienceModelAssociation",
@@ -641,7 +691,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns information about a configured audience model association.</p>"
+      "documentation":"<p>Returns information about a configured audience model association.</p>",
+      "readonly":true
     },
     "GetConfiguredTable":{
       "name":"GetConfiguredTable",
@@ -659,7 +710,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a configured table.</p>"
+      "documentation":"<p>Retrieves a configured table.</p>",
+      "readonly":true
     },
     "GetConfiguredTableAnalysisRule":{
       "name":"GetConfiguredTableAnalysisRule",
@@ -677,7 +729,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a configured table analysis rule.</p>"
+      "documentation":"<p>Retrieves a configured table analysis rule.</p>",
+      "readonly":true
     },
     "GetConfiguredTableAssociation":{
       "name":"GetConfiguredTableAssociation",
@@ -695,7 +748,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a configured table association.</p>"
+      "documentation":"<p>Retrieves a configured table association.</p>",
+      "readonly":true
     },
     "GetConfiguredTableAssociationAnalysisRule":{
       "name":"GetConfiguredTableAssociationAnalysisRule",
@@ -713,7 +767,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p> Retrieves the analysis rule for a configured table association.</p>"
+      "documentation":"<p> Retrieves the analysis rule for a configured table association.</p>",
+      "readonly":true
     },
     "GetIdMappingTable":{
       "name":"GetIdMappingTable",
@@ -731,7 +786,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves an ID mapping table.</p>"
+      "documentation":"<p>Retrieves an ID mapping table.</p>",
+      "readonly":true
     },
     "GetIdNamespaceAssociation":{
       "name":"GetIdNamespaceAssociation",
@@ -749,7 +805,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves an ID namespace association.</p>"
+      "documentation":"<p>Retrieves an ID namespace association.</p>",
+      "readonly":true
     },
     "GetMembership":{
       "name":"GetMembership",
@@ -767,7 +824,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a specified membership for an identifier.</p>"
+      "documentation":"<p>Retrieves a specified membership for an identifier.</p>",
+      "readonly":true
     },
     "GetPrivacyBudgetTemplate":{
       "name":"GetPrivacyBudgetTemplate",
@@ -785,7 +843,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns details for a specified privacy budget template.</p>"
+      "documentation":"<p>Returns details for a specified privacy budget template.</p>",
+      "readonly":true
+    },
+    "GetProtectedJob":{
+      "name":"GetProtectedJob",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memberships/{membershipIdentifier}/protectedJobs/{protectedJobIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetProtectedJobInput"},
+      "output":{"shape":"GetProtectedJobOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Returns job processing metadata.</p>",
+      "readonly":true
     },
     "GetProtectedQuery":{
       "name":"GetProtectedQuery",
@@ -803,7 +881,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns query processing metadata.</p>"
+      "documentation":"<p>Returns query processing metadata.</p>",
+      "readonly":true
     },
     "GetSchema":{
       "name":"GetSchema",
@@ -821,7 +900,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves the schema for a relation within a collaboration.</p>"
+      "documentation":"<p>Retrieves the schema for a relation within a collaboration.</p>",
+      "readonly":true
     },
     "GetSchemaAnalysisRule":{
       "name":"GetSchemaAnalysisRule",
@@ -839,7 +919,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a schema analysis rule.</p>"
+      "documentation":"<p>Retrieves a schema analysis rule.</p>",
+      "readonly":true
     },
     "ListAnalysisTemplates":{
       "name":"ListAnalysisTemplates",
@@ -857,7 +938,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists analysis templates that the caller owns.</p>"
+      "documentation":"<p>Lists analysis templates that the caller owns.</p>",
+      "readonly":true
     },
     "ListCollaborationAnalysisTemplates":{
       "name":"ListCollaborationAnalysisTemplates",
@@ -875,7 +957,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists analysis templates within a collaboration.</p>"
+      "documentation":"<p>Lists analysis templates within a collaboration.</p>",
+      "readonly":true
+    },
+    "ListCollaborationChangeRequests":{
+      "name":"ListCollaborationChangeRequests",
+      "http":{
+        "method":"GET",
+        "requestUri":"/collaborations/{collaborationIdentifier}/changeRequests",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCollaborationChangeRequestsInput"},
+      "output":{"shape":"ListCollaborationChangeRequestsOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all change requests for a collaboration with pagination support. Returns change requests sorted by creation time.</p>",
+      "readonly":true
     },
     "ListCollaborationConfiguredAudienceModelAssociations":{
       "name":"ListCollaborationConfiguredAudienceModelAssociations",
@@ -893,7 +995,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists configured audience model associations within a collaboration.</p>"
+      "documentation":"<p>Lists configured audience model associations within a collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationIdNamespaceAssociations":{
       "name":"ListCollaborationIdNamespaceAssociations",
@@ -911,7 +1014,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of the ID namespace associations in a collaboration.</p>"
+      "documentation":"<p>Returns a list of the ID namespace associations in a collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationPrivacyBudgetTemplates":{
       "name":"ListCollaborationPrivacyBudgetTemplates",
@@ -929,7 +1033,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns an array that summarizes each privacy budget template in a specified collaboration.</p>"
+      "documentation":"<p>Returns an array that summarizes each privacy budget template in a specified collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationPrivacyBudgets":{
       "name":"ListCollaborationPrivacyBudgets",
@@ -947,7 +1052,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns an array that summarizes each privacy budget in a specified collaboration. The summary includes the collaboration ARN, creation time, creating account, and privacy budget details.</p>"
+      "documentation":"<p>Returns an array that summarizes each privacy budget in a specified collaboration. The summary includes the collaboration ARN, creation time, creating account, and privacy budget details.</p>",
+      "readonly":true
     },
     "ListCollaborations":{
       "name":"ListCollaborations",
@@ -964,7 +1070,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists collaborations the caller owns, is active in, or has been invited to.</p>"
+      "documentation":"<p>Lists collaborations the caller owns, is active in, or has been invited to.</p>",
+      "readonly":true
     },
     "ListConfiguredAudienceModelAssociations":{
       "name":"ListConfiguredAudienceModelAssociations",
@@ -982,7 +1089,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists information about requested configured audience model associations.</p>"
+      "documentation":"<p>Lists information about requested configured audience model associations.</p>",
+      "readonly":true
     },
     "ListConfiguredTableAssociations":{
       "name":"ListConfiguredTableAssociations",
@@ -1000,7 +1108,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists configured table associations for a membership.</p>"
+      "documentation":"<p>Lists configured table associations for a membership.</p>",
+      "readonly":true
     },
     "ListConfiguredTables":{
       "name":"ListConfiguredTables",
@@ -1017,7 +1126,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists configured tables.</p>"
+      "documentation":"<p>Lists configured tables.</p>",
+      "readonly":true
     },
     "ListIdMappingTables":{
       "name":"ListIdMappingTables",
@@ -1035,7 +1145,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of ID mapping tables.</p>"
+      "documentation":"<p>Returns a list of ID mapping tables.</p>",
+      "readonly":true
     },
     "ListIdNamespaceAssociations":{
       "name":"ListIdNamespaceAssociations",
@@ -1053,7 +1164,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of ID namespace associations.</p>"
+      "documentation":"<p>Returns a list of ID namespace associations.</p>",
+      "readonly":true
     },
     "ListMembers":{
       "name":"ListMembers",
@@ -1071,7 +1183,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all members within a collaboration.</p>"
+      "documentation":"<p>Lists all members within a collaboration.</p>",
+      "readonly":true
     },
     "ListMemberships":{
       "name":"ListMemberships",
@@ -1088,7 +1201,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all memberships resources within the caller's account.</p>"
+      "documentation":"<p>Lists all memberships resources within the caller's account.</p>",
+      "readonly":true
     },
     "ListPrivacyBudgetTemplates":{
       "name":"ListPrivacyBudgetTemplates",
@@ -1106,7 +1220,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns detailed information about the privacy budget templates in a specified membership.</p>"
+      "documentation":"<p>Returns detailed information about the privacy budget templates in a specified membership.</p>",
+      "readonly":true
     },
     "ListPrivacyBudgets":{
       "name":"ListPrivacyBudgets",
@@ -1124,7 +1239,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns detailed information about the privacy budgets in a specified membership.</p>"
+      "documentation":"<p>Returns detailed information about the privacy budgets in a specified membership.</p>",
+      "readonly":true
+    },
+    "ListProtectedJobs":{
+      "name":"ListProtectedJobs",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memberships/{membershipIdentifier}/protectedJobs",
+        "responseCode":200
+      },
+      "input":{"shape":"ListProtectedJobsInput"},
+      "output":{"shape":"ListProtectedJobsOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists protected jobs, sorted by most recent job.</p>",
+      "readonly":true
     },
     "ListProtectedQueries":{
       "name":"ListProtectedQueries",
@@ -1142,7 +1277,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists protected queries, sorted by the most recent query.</p>"
+      "documentation":"<p>Lists protected queries, sorted by the most recent query.</p>",
+      "readonly":true
     },
     "ListSchemas":{
       "name":"ListSchemas",
@@ -1160,7 +1296,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists the schemas for relations within a collaboration.</p>"
+      "documentation":"<p>Lists the schemas for relations within a collaboration.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1175,7 +1312,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all of the tags that have been added to a resource.</p>"
+      "documentation":"<p>Lists all of the tags that have been added to a resource.</p>",
+      "readonly":true
     },
     "PopulateIdMappingTable":{
       "name":"PopulateIdMappingTable",
@@ -1215,6 +1353,25 @@
       ],
       "documentation":"<p>An estimate of the number of aggregation functions that the member who can query can run given epsilon and noise parameters.</p>"
     },
+    "StartProtectedJob":{
+      "name":"StartProtectedJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/memberships/{membershipIdentifier}/protectedJobs",
+        "responseCode":200
+      },
+      "input":{"shape":"StartProtectedJobInput"},
+      "output":{"shape":"StartProtectedJobOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Creates a protected job that is started by Clean Rooms.</p>"
+    },
     "StartProtectedQuery":{
       "name":"StartProtectedQuery",
       "http":{
@@ -1328,6 +1485,7 @@
       "output":{"shape":"UpdateConfiguredTableOutput"},
       "errors":[
         {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -1465,7 +1623,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Updates the privacy budget template for the specified membership.</p>"
+      "documentation":"<p>Updates the privacy budget template for the specified collaboration.</p>"
+    },
+    "UpdateProtectedJob":{
+      "name":"UpdateProtectedJob",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/memberships/{membershipIdentifier}/protectedJobs/{protectedJobIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateProtectedJobInput"},
+      "output":{"shape":"UpdateProtectedJobOutput"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates the processing of a currently running job.</p>",
+      "idempotent":true
     },
     "UpdateProtectedQuery":{
       "name":"UpdateProtectedQuery",
@@ -1489,6 +1667,127 @@
     }
   },
   "shapes":{
+    "AccessBudget":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "details",
+        "aggregateRemainingBudget"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access budget resource.</p>"
+        },
+        "details":{
+          "shape":"AccessBudgetDetailsList",
+          "documentation":"<p>Detailed budget information including time bounds, remaining budget, and refresh settings.</p>"
+        },
+        "aggregateRemainingBudget":{
+          "shape":"RemainingBudget",
+          "documentation":"<p>The total remaining budget across all budget parameters, showing the lower value between the per-period budget and lifetime budget for this access budget. For individual parameter budgets, see <code>remainingBudget</code>.</p>"
+        }
+      },
+      "documentation":"<p>Controls and tracks usage limits for associated configured tables within a collaboration across queries and job. Supports both period-based budgets that can renew (daily, weekly, or monthly) and fixed lifetime budgets. Contains the resource ARN, remaining budget information, and up to two budget configurations (period-based and lifetime). By default, table usage is unlimited unless a budget is configured.</p>"
+    },
+    "AccessBudgetDetails":{
+      "type":"structure",
+      "required":[
+        "startTime",
+        "remainingBudget",
+        "budget",
+        "budgetType"
+      ],
+      "members":{
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the access budget period.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the access budget period.</p>"
+        },
+        "remainingBudget":{
+          "shape":"RemainingBudget",
+          "documentation":"<p>The remaining budget amount available for use within this access budget.</p>"
+        },
+        "budget":{
+          "shape":"Budget",
+          "documentation":"<p>The total budget allocation amount for this access budget.</p>"
+        },
+        "budgetType":{
+          "shape":"AccessBudgetType",
+          "documentation":"<p>Specifies the time period for limiting table usage in queries and jobs. For calendar-based periods, the budget can renew if auto refresh is enabled. For lifetime budgets, the limit applies to the total usage throughout the collaboration. Valid values are:</p> <p> <code>CALENDAR_DAY</code> - Limit table usage per day.</p> <p> <code>CALENDAR_WEEK</code> - Limit table usage per week.</p> <p> <code>CALENDAR_MONTH</code> - Limit table usage per month.</p> <p> <code>LIFETIME</code> - Limit total table usage for the collaboration duration.</p>"
+        },
+        "autoRefresh":{
+          "shape":"AutoRefreshMode",
+          "documentation":"<p>Indicates whether the budget automatically refreshes for each time period specified in <code>budgetType</code>. Valid values are:</p> <p> <code>ENABLED</code> - The budget refreshes automatically at the start of each period.</p> <p> <code>DISABLED</code> - The budget must be refreshed manually.</p> <p> <code>NULL</code> - The value is null when <code>budgetType</code> is set to <code>LIFETIME</code>.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about an access budget including time bounds, budget allocation, and configuration settings.</p>"
+    },
+    "AccessBudgetDetailsList":{
+      "type":"list",
+      "member":{"shape":"AccessBudgetDetails"},
+      "max":2,
+      "min":1
+    },
+    "AccessBudgetType":{
+      "type":"string",
+      "enum":[
+        "CALENDAR_DAY",
+        "CALENDAR_MONTH",
+        "CALENDAR_WEEK",
+        "LIFETIME"
+      ]
+    },
+    "AccessBudgetsPrivacyTemplateParametersInput":{
+      "type":"structure",
+      "required":[
+        "budgetParameters",
+        "resourceArn"
+      ],
+      "members":{
+        "budgetParameters":{
+          "shape":"BudgetParameters",
+          "documentation":"<p>An array of budget parameters that define the access budget configuration for the privacy template.</p>"
+        },
+        "resourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource associated with this privacy budget template.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for privacy budget templates that support access budgets functionality, enabling enhanced budget management capabilities.</p>"
+    },
+    "AccessBudgetsPrivacyTemplateParametersOutput":{
+      "type":"structure",
+      "required":[
+        "budgetParameters",
+        "resourceArn"
+      ],
+      "members":{
+        "budgetParameters":{
+          "shape":"BudgetParameters",
+          "documentation":"<p>An array of budget parameters returned from the access budget configuration.</p>"
+        },
+        "resourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource associated with this privacy budget template.</p>"
+        }
+      },
+      "documentation":"<p>Output parameters for privacy budget templates with access budgets support, containing the configured budget information.</p>"
+    },
+    "AccessBudgetsPrivacyTemplateUpdateParameters":{
+      "type":"structure",
+      "required":["budgetParameters"],
+      "members":{
+        "budgetParameters":{
+          "shape":"BudgetParameters",
+          "documentation":"<p>Updated array of budget parameters for the access budget configuration.</p>"
+        }
+      },
+      "documentation":"<p>Update parameters for privacy budget templates with access budgets functionality, allowing modification of existing budget configurations.</p>"
+    },
     "AccessDeniedException":{
       "type":"structure",
       "members":{
@@ -1609,20 +1908,30 @@
     "AllowedColumnList":{
       "type":"list",
       "member":{"shape":"ColumnName"},
-      "max":225,
       "min":1
     },
     "AllowedResultReceivers":{
       "type":"list",
       "member":{"shape":"AccountId"}
     },
+    "AllowedResultRegions":{
+      "type":"list",
+      "member":{"shape":"SupportedS3Region"}
+    },
     "AnalysisFormat":{
       "type":"string",
-      "enum":["SQL"]
+      "enum":[
+        "SQL",
+        "PYSPARK_1_0"
+      ]
     },
     "AnalysisMethod":{
       "type":"string",
-      "enum":["DIRECT_QUERY"]
+      "enum":[
+        "DIRECT_QUERY",
+        "DIRECT_JOB",
+        "MULTIPLE"
+      ]
     },
     "AnalysisParameter":{
       "type":"structure",
@@ -1650,7 +1959,7 @@
     "AnalysisParameterList":{
       "type":"list",
       "member":{"shape":"AnalysisParameter"},
-      "max":10,
+      "max":50,
       "min":0
     },
     "AnalysisRule":{
@@ -1687,6 +1996,11 @@
         "policy":{
           "shape":"AnalysisRulePolicy",
           "documentation":"<p>A policy that describes the associated data usage limitations.</p>"
+        },
+        "collaborationPolicy":{"shape":"ConfiguredTableAssociationAnalysisRulePolicy"},
+        "consolidatedPolicy":{
+          "shape":"ConsolidatedPolicy",
+          "documentation":"<p> The consolidated policy for the analysis rule.</p>"
         }
       },
       "documentation":"<p>A specification about how data from the configured table can be used in a query.</p>"
@@ -1910,10 +2224,24 @@
         "text":{
           "shape":"AnalysisTemplateText",
           "documentation":"<p>The query text.</p>"
+        },
+        "artifacts":{
+          "shape":"AnalysisTemplateArtifacts",
+          "documentation":"<p> The artifacts of the analysis source.</p>"
         }
       },
       "documentation":"<p>The structure that defines the body of the analysis template.</p>",
-      "sensitive":true,
+      "union":true
+    },
+    "AnalysisSourceMetadata":{
+      "type":"structure",
+      "members":{
+        "artifacts":{
+          "shape":"AnalysisTemplateArtifactMetadata",
+          "documentation":"<p> The artifacts of the analysis source metadata.</p>"
+        }
+      },
+      "documentation":"<p>The analysis source metadata.</p>",
       "union":true
     },
     "AnalysisTemplate":{
@@ -1985,6 +2313,10 @@
           "shape":"AnalysisSource",
           "documentation":"<p>The source of the analysis template.</p>"
         },
+        "sourceMetadata":{
+          "shape":"AnalysisSourceMetadata",
+          "documentation":"<p> The source metadata for the analysis template.</p>"
+        },
         "analysisParameters":{
           "shape":"AnalysisParameterList",
           "documentation":"<p>The parameters of the analysis template.</p>"
@@ -1992,6 +2324,10 @@
         "validations":{
           "shape":"AnalysisTemplateValidationStatusDetailList",
           "documentation":"<p>Information about the validations performed on the analysis template.</p>"
+        },
+        "errorMessageConfiguration":{
+          "shape":"ErrorMessageConfiguration",
+          "documentation":"<p>The configuration that specifies the level of detail in error messages returned by analyses using this template. When set to <code>DETAILED</code>, error messages include more information to help troubleshoot issues with PySpark jobs. Detailed error messages may expose underlying data, including sensitive information. Recommended for faster troubleshooting in development and testing environments.</p>"
         }
       },
       "documentation":"<p>The analysis template.</p>"
@@ -2014,6 +2350,60 @@
       "min":0,
       "pattern":"(ANY_QUERY|ANY_JOB|arn:aws:cleanrooms:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:membership/[\\d\\w-]+/analysistemplate/[\\d\\w-]+)"
     },
+    "AnalysisTemplateArtifact":{
+      "type":"structure",
+      "required":["location"],
+      "members":{
+        "location":{
+          "shape":"S3Location",
+          "documentation":"<p> The artifact location.</p>"
+        }
+      },
+      "documentation":"<p>The analysis template artifact.</p>"
+    },
+    "AnalysisTemplateArtifactList":{
+      "type":"list",
+      "member":{"shape":"AnalysisTemplateArtifact"},
+      "max":1,
+      "min":1
+    },
+    "AnalysisTemplateArtifactMetadata":{
+      "type":"structure",
+      "required":["entryPointHash"],
+      "members":{
+        "entryPointHash":{
+          "shape":"Hash",
+          "documentation":"<p> The hash of the entry point for the analysis template artifact metadata.</p>"
+        },
+        "additionalArtifactHashes":{
+          "shape":"HashList",
+          "documentation":"<p> Additional artifact hashes for the analysis template.</p>"
+        }
+      },
+      "documentation":"<p>The analysis template artifact metadata.</p>"
+    },
+    "AnalysisTemplateArtifacts":{
+      "type":"structure",
+      "required":[
+        "entryPoint",
+        "roleArn"
+      ],
+      "members":{
+        "entryPoint":{
+          "shape":"AnalysisTemplateArtifact",
+          "documentation":"<p> The entry point for the analysis template artifacts.</p>"
+        },
+        "additionalArtifacts":{
+          "shape":"AnalysisTemplateArtifactList",
+          "documentation":"<p> Additional artifacts for the analysis template.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p> The role ARN for the analysis template artifacts.</p>"
+        }
+      },
+      "documentation":"<p>The analysis template artifacts.</p>"
+    },
     "AnalysisTemplateIdentifier":{
       "type":"string",
       "max":36,
@@ -2084,7 +2474,8 @@
     "AnalysisTemplateText":{
       "type":"string",
       "max":90000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AnalysisTemplateValidationStatus":{
       "type":"string",
@@ -2169,7 +2560,7 @@
       "type":"string",
       "max":128,
       "min":0,
-      "pattern":"[a-zA-Z0-9_](([a-zA-Z0-9_ ]+-)*([a-zA-Z0-9_ ]+))?"
+      "pattern":"[a-zA-Z0-9_](([a-zA-Z0-9_]+)*([a-zA-Z0-9_]+))?"
     },
     "AthenaTableReference":{
       "type":"structure",
@@ -2179,6 +2570,10 @@
         "tableName"
       ],
       "members":{
+        "region":{
+          "shape":"CommercialRegion",
+          "documentation":"<p>The Amazon Web Services Region where the Athena table is located. This parameter is required to uniquely identify and access tables across different Regions.</p>"
+        },
         "workGroup":{
           "shape":"AthenaWorkGroup",
           "documentation":"<p> The workgroup of the Athena table reference.</p>"
@@ -2204,6 +2599,21 @@
       "min":1,
       "pattern":"([a-zA-Z0-9._-])*"
     },
+    "AutoApprovedChangeType":{
+      "type":"string",
+      "enum":["ADD_MEMBER"]
+    },
+    "AutoApprovedChangeTypeList":{
+      "type":"list",
+      "member":{"shape":"AutoApprovedChangeType"}
+    },
+    "AutoRefreshMode":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "BatchGetCollaborationAnalysisTemplateError":{
       "type":"structure",
       "required":[
@@ -2404,6 +2814,17 @@
         }
       }
     },
+    "BilledJobResourceUtilization":{
+      "type":"structure",
+      "required":["units"],
+      "members":{
+        "units":{
+          "shape":"Double",
+          "documentation":"<p> The number of Clean Rooms Processing Unit (CRPU) hours that have been billed.</p>"
+        }
+      },
+      "documentation":"<p> Information related to the utilization of resources that have been billed or charged for in a given context, such as a protected job.</p>"
+    },
     "BilledResourceUtilization":{
       "type":"structure",
       "required":["units"],
@@ -2419,6 +2840,133 @@
       "type":"boolean",
       "box":true
     },
+    "Budget":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":0
+    },
+    "BudgetParameter":{
+      "type":"structure",
+      "required":[
+        "type",
+        "budget"
+      ],
+      "members":{
+        "type":{
+          "shape":"AccessBudgetType",
+          "documentation":"<p>The type of budget parameter being configured.</p>"
+        },
+        "budget":{
+          "shape":"Budget",
+          "documentation":"<p>The budget allocation amount for this specific parameter.</p>"
+        },
+        "autoRefresh":{
+          "shape":"AutoRefreshMode",
+          "documentation":"<p>Whether this individual budget parameter automatically refreshes when the budget period resets.</p>"
+        }
+      },
+      "documentation":"<p>Individual budget parameter configuration that defines specific budget allocation settings for access budgets.</p>"
+    },
+    "BudgetParameters":{
+      "type":"list",
+      "member":{"shape":"BudgetParameter"},
+      "max":2,
+      "min":1
+    },
+    "BudgetedResourceArn":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "pattern":"arn:aws:[\\w]+:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:membership/[\\d\\w-]+/configuredtableassociation/[\\d\\w-]+"
+    },
+    "Change":{
+      "type":"structure",
+      "required":[
+        "specificationType",
+        "specification",
+        "types"
+      ],
+      "members":{
+        "specificationType":{
+          "shape":"ChangeSpecificationType",
+          "documentation":"<p>The type of specification for this change.</p>"
+        },
+        "specification":{
+          "shape":"ChangeSpecification",
+          "documentation":"<p>The specification details for this change.</p>"
+        },
+        "types":{
+          "shape":"ChangeTypeList",
+          "documentation":"<p>The list of change types that were applied.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single change within a collaboration change request, containing the change identifier and specification.</p>"
+    },
+    "ChangeInput":{
+      "type":"structure",
+      "required":[
+        "specificationType",
+        "specification"
+      ],
+      "members":{
+        "specificationType":{
+          "shape":"ChangeSpecificationType",
+          "documentation":"<p>The type of specification for the change. Currently supports <code>MEMBER</code> for member-related changes.</p>"
+        },
+        "specification":{
+          "shape":"ChangeSpecification",
+          "documentation":"<p>The specification details for the change. The structure depends on the specification type.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a change to apply to a collaboration.</p>"
+    },
+    "ChangeInputList":{
+      "type":"list",
+      "member":{"shape":"ChangeInput"},
+      "max":10,
+      "min":1
+    },
+    "ChangeList":{
+      "type":"list",
+      "member":{"shape":"Change"},
+      "max":10,
+      "min":1
+    },
+    "ChangeRequestStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "APPROVED",
+        "CANCELLED",
+        "DENIED",
+        "COMMITTED"
+      ]
+    },
+    "ChangeSpecification":{
+      "type":"structure",
+      "members":{
+        "member":{
+          "shape":"MemberChangeSpecification",
+          "documentation":"<p>The member change specification when the change type is <code>MEMBER</code>.</p>"
+        }
+      },
+      "documentation":"<p>A union that contains the specification details for different types of changes.</p>",
+      "union":true
+    },
+    "ChangeSpecificationType":{
+      "type":"string",
+      "enum":["MEMBER"]
+    },
+    "ChangeType":{
+      "type":"string",
+      "enum":["ADD_MEMBER"]
+    },
+    "ChangeTypeList":{
+      "type":"list",
+      "member":{"shape":"ChangeType"},
+      "min":1
+    },
     "CleanroomsArn":{
       "type":"string",
       "max":100,
@@ -2489,11 +3037,23 @@
         },
         "queryLogStatus":{
           "shape":"CollaborationQueryLogStatus",
-          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the collaboration.</p>"
+          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the collaboration.</p> <p>When <code>ENABLED</code>, Clean Rooms logs details about queries run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
+        },
+        "jobLogStatus":{
+          "shape":"CollaborationJobLogStatus",
+          "documentation":"<p>An indicator as to whether job logging has been enabled or disabled for the collaboration. </p> <p>When <code>ENABLED</code>, Clean Rooms logs details about jobs run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
         },
         "analyticsEngine":{
           "shape":"AnalyticsEngine",
-          "documentation":"<p> The analytics engine for the collaboration.</p>"
+          "documentation":"<p> The analytics engine for the collaboration.</p> <note> <p>After July 16, 2025, the <code>CLEAN_ROOMS_SQL</code> parameter will no longer be available. </p> </note>"
+        },
+        "autoApprovedChangeTypes":{
+          "shape":"AutoApprovedChangeTypeList",
+          "documentation":"<p>The types of change requests that are automatically approved for this collaboration.</p>"
+        },
+        "allowedResultRegions":{
+          "shape":"AllowedResultRegions",
+          "documentation":"<p>The Amazon Web Services Regions where collaboration query results can be stored. Returns the list of Region identifiers that were specified when the collaboration was created. This list is used to enforce regional storage policies and compliance requirements.</p>"
         }
       },
       "documentation":"<p>The multi-party data share environment. The collaboration contains metadata about its purpose and participants.</p>"
@@ -2510,8 +3070,7 @@
         "createTime",
         "updateTime",
         "schema",
-        "format",
-        "source"
+        "format"
       ],
       "members":{
         "id":{
@@ -2562,6 +3121,10 @@
           "shape":"AnalysisSource",
           "documentation":"<p>The source of the analysis template within a collaboration.</p>"
         },
+        "sourceMetadata":{
+          "shape":"AnalysisSourceMetadata",
+          "documentation":"<p> The source metadata for the collaboration analysis template.</p>"
+        },
         "analysisParameters":{
           "shape":"AnalysisParameterList",
           "documentation":"<p>The analysis parameters that have been specified in the analysis template.</p>"
@@ -2569,6 +3132,10 @@
         "validations":{
           "shape":"AnalysisTemplateValidationStatusDetailList",
           "documentation":"<p>The validations that were performed.</p>"
+        },
+        "errorMessageConfiguration":{
+          "shape":"ErrorMessageConfiguration",
+          "documentation":"<p>The configuration that specifies the level of detail in error messages returned by analyses using this template. When set to <code>DETAILED</code>, error messages include more information to help troubleshoot issues with PySpark jobs. Detailed error messages may expose underlying data, including sensitive information. Recommended for faster troubleshooting in development and testing environments.</p>"
         }
       },
       "documentation":"<p>The analysis template within a collaboration.</p>"
@@ -2641,6 +3208,102 @@
       "min":0,
       "pattern":"arn:aws:[\\w]+:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:collaboration/[\\d\\w-]+"
     },
+    "CollaborationChangeRequest":{
+      "type":"structure",
+      "required":[
+        "id",
+        "collaborationId",
+        "createTime",
+        "updateTime",
+        "status",
+        "isAutoApproved",
+        "changes"
+      ],
+      "members":{
+        "id":{
+          "shape":"UUID",
+          "documentation":"<p>The unique identifier for the change request.</p>"
+        },
+        "collaborationId":{
+          "shape":"UUID",
+          "documentation":"<p>The unique identifier for the collaboration being modified.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the change request was created.</p>"
+        },
+        "updateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the change request was last updated.</p>"
+        },
+        "status":{
+          "shape":"ChangeRequestStatus",
+          "documentation":"<p>The current status of the change request. Valid values are <code>PENDING</code>, <code>APPROVED</code>, <code>DENIED</code>, <code>COMMITTED</code>, and <code>CANCELLED</code>.</p>"
+        },
+        "isAutoApproved":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the change request was automatically approved based on the collaboration's auto-approval settings.</p>"
+        },
+        "changes":{
+          "shape":"ChangeList",
+          "documentation":"<p>The list of changes specified in this change request.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to modify a collaboration. Change requests enable structured modifications to collaborations after they have been created.</p>"
+    },
+    "CollaborationChangeRequestIdentifier":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
+    "CollaborationChangeRequestSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "collaborationId",
+        "createTime",
+        "updateTime",
+        "status",
+        "isAutoApproved",
+        "changes"
+      ],
+      "members":{
+        "id":{
+          "shape":"UUID",
+          "documentation":"<p>The unique identifier for the change request.</p>"
+        },
+        "collaborationId":{
+          "shape":"UUID",
+          "documentation":"<p>The unique identifier for the collaboration.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the change request was created.</p>"
+        },
+        "updateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the change request was last updated.</p>"
+        },
+        "status":{
+          "shape":"ChangeRequestStatus",
+          "documentation":"<p>The current status of the change request.</p>"
+        },
+        "isAutoApproved":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the change request was automatically approved.</p>"
+        },
+        "changes":{
+          "shape":"ChangeList",
+          "documentation":"<p>Summary of the changes in this change request.</p>"
+        }
+      },
+      "documentation":"<p>Summary information about a collaboration change request.</p>"
+    },
+    "CollaborationChangeRequestSummaryList":{
+      "type":"list",
+      "member":{"shape":"CollaborationChangeRequestSummary"}
+    },
     "CollaborationConfiguredAudienceModelAssociation":{
       "type":"structure",
       "required":[
@@ -2895,6 +3558,13 @@
       "min":36,
       "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
     },
+    "CollaborationJobLogStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "CollaborationName":{
       "type":"string",
       "max":100,
@@ -3135,7 +3805,7 @@
         },
         "analyticsEngine":{
           "shape":"AnalyticsEngine",
-          "documentation":"<p> The analytics engine.</p>"
+          "documentation":"<p> The analytics engine.</p> <note> <p>After July 16, 2025, the <code>CLEAN_ROOMS_SQL</code> parameter will no longer be available. </p> </note>"
         }
       },
       "documentation":"<p>The metadata of the collaboration.</p>"
@@ -3178,6 +3848,44 @@
       "min":0,
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDBFF-\\uDC00\\uDFFF\\t]*"
     },
+    "CommercialRegion":{
+      "type":"string",
+      "enum":[
+        "us-west-1",
+        "us-west-2",
+        "us-east-1",
+        "us-east-2",
+        "af-south-1",
+        "ap-east-1",
+        "ap-south-2",
+        "ap-southeast-1",
+        "ap-southeast-2",
+        "ap-southeast-3",
+        "ap-southeast-5",
+        "ap-southeast-4",
+        "ap-southeast-7",
+        "ap-south-1",
+        "ap-northeast-3",
+        "ap-northeast-1",
+        "ap-northeast-2",
+        "ca-central-1",
+        "ca-west-1",
+        "eu-south-1",
+        "eu-west-3",
+        "eu-south-2",
+        "eu-central-2",
+        "eu-central-1",
+        "eu-north-1",
+        "eu-west-1",
+        "eu-west-2",
+        "me-south-1",
+        "me-central-1",
+        "il-central-1",
+        "sa-east-1",
+        "mx-central-1",
+        "ap-east-2"
+      ]
+    },
     "ComputeConfiguration":{
       "type":"structure",
       "members":{
@@ -3405,11 +4113,15 @@
         },
         "analysisMethod":{
           "shape":"AnalysisMethod",
-          "documentation":"<p>The analysis method for the configured table. The only valid value is currently `DIRECT_QUERY`.</p>"
+          "documentation":"<p>The analysis method for the configured table.</p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
         },
         "allowedColumns":{
           "shape":"AllowedColumnList",
-          "documentation":"<p>The columns within the underlying Glue table that can be utilized within collaborations.</p>"
+          "documentation":"<p>The columns within the underlying Glue table that can be used within collaborations.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The selected analysis methods for the configured table.</p>"
         }
       },
       "documentation":"<p>A table that has been configured for use in a collaboration.</p>"
@@ -3746,6 +4458,10 @@
         "arn":{
           "shape":"ConfiguredTableAssociationArn",
           "documentation":"<p>The unique ARN for the configured table association.</p>"
+        },
+        "analysisRuleTypes":{
+          "shape":"ConfiguredTableAssociationAnalysisRuleTypeList",
+          "documentation":"<p>The analysis rule types that are associated with the configured table associations in this summary. </p>"
         }
       },
       "documentation":"<p>The configured table association summary for the objects listed by the request.</p>"
@@ -3798,7 +4514,11 @@
         },
         "analysisMethod":{
           "shape":"AnalysisMethod",
-          "documentation":"<p>The analysis method for the configured tables. The only valid value is currently `DIRECT_QUERY`.</p>"
+          "documentation":"<p>The analysis method for the configured tables. </p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The selected analysis methods for the configured table summary.</p>"
         }
       },
       "documentation":"<p>The configured table summary for the objects listed by the request.</p>"
@@ -3842,6 +4562,175 @@
         "INVALID_STATE"
       ]
     },
+    "ConsolidatedPolicy":{
+      "type":"structure",
+      "members":{
+        "v1":{
+          "shape":"ConsolidatedPolicyV1",
+          "documentation":"<p> The consolidated policy version 1.</p>"
+        }
+      },
+      "documentation":"<p>Controls on the analysis specifications that can be run on a configured table.</p>",
+      "union":true
+    },
+    "ConsolidatedPolicyAggregation":{
+      "type":"structure",
+      "required":[
+        "aggregateColumns",
+        "joinColumns",
+        "dimensionColumns",
+        "scalarFunctions",
+        "outputConstraints"
+      ],
+      "members":{
+        "aggregateColumns":{
+          "shape":"ConsolidatedPolicyAggregationAggregateColumnsList",
+          "documentation":"<p> Aggregate columns in consolidated policy aggregation.</p>"
+        },
+        "joinColumns":{
+          "shape":"AnalysisRuleColumnList",
+          "documentation":"<p> The columns to join on.</p>"
+        },
+        "joinRequired":{
+          "shape":"JoinRequiredOption",
+          "documentation":"<p> Join required</p>"
+        },
+        "allowedJoinOperators":{
+          "shape":"JoinOperatorsList",
+          "documentation":"<p> The allowed join operators.</p>"
+        },
+        "dimensionColumns":{
+          "shape":"AnalysisRuleColumnList",
+          "documentation":"<p> The dimension columns of the consolidated policy aggregation.</p>"
+        },
+        "scalarFunctions":{
+          "shape":"ScalarFunctionsList",
+          "documentation":"<p> The scalar functions.</p>"
+        },
+        "outputConstraints":{
+          "shape":"AggregationConstraints",
+          "documentation":"<p> The output constraints of the consolidated policy aggregation.</p>"
+        },
+        "additionalAnalyses":{
+          "shape":"AdditionalAnalyses",
+          "documentation":"<p> Additional analyses for the consolidated policy aggregation.</p>"
+        },
+        "allowedResultReceivers":{
+          "shape":"AllowedResultReceivers",
+          "documentation":"<p> The allowed result receivers.</p>"
+        },
+        "allowedAdditionalAnalyses":{
+          "shape":"AllowedAdditionalAnalyses",
+          "documentation":"<p> The additional analyses allowed by the consolidated policy aggregation.</p>"
+        }
+      },
+      "documentation":"<p> Controls on the analysis specifications that can be run on a configured table.</p>"
+    },
+    "ConsolidatedPolicyAggregationAggregateColumnsList":{
+      "type":"list",
+      "member":{"shape":"AggregateColumn"},
+      "min":1
+    },
+    "ConsolidatedPolicyCustom":{
+      "type":"structure",
+      "required":["allowedAnalyses"],
+      "members":{
+        "allowedAnalyses":{
+          "shape":"ConsolidatedPolicyCustomAllowedAnalysesList",
+          "documentation":"<p> The allowed analyses.</p>"
+        },
+        "allowedAnalysisProviders":{
+          "shape":"ConsolidatedPolicyCustomAllowedAnalysisProvidersList",
+          "documentation":"<p> The allowed analysis providers.</p>"
+        },
+        "additionalAnalyses":{
+          "shape":"AdditionalAnalyses",
+          "documentation":"<p> Additional analyses for the consolidated policy.</p>"
+        },
+        "disallowedOutputColumns":{
+          "shape":"AnalysisRuleColumnList",
+          "documentation":"<p> Disallowed output columns</p>"
+        },
+        "differentialPrivacy":{"shape":"DifferentialPrivacyConfiguration"},
+        "allowedResultReceivers":{
+          "shape":"AllowedResultReceivers",
+          "documentation":"<p> The allowed result receivers.</p>"
+        },
+        "allowedAdditionalAnalyses":{
+          "shape":"AllowedAdditionalAnalyses",
+          "documentation":"<p> The additional analyses allowed by the consolidated policy.</p>"
+        }
+      },
+      "documentation":"<p>Controls on the analysis specifications that can be run on a configured table.</p>"
+    },
+    "ConsolidatedPolicyCustomAllowedAnalysesList":{
+      "type":"list",
+      "member":{"shape":"AnalysisTemplateArnOrQueryWildcard"},
+      "min":0
+    },
+    "ConsolidatedPolicyCustomAllowedAnalysisProvidersList":{
+      "type":"list",
+      "member":{"shape":"AccountId"},
+      "min":0
+    },
+    "ConsolidatedPolicyList":{
+      "type":"structure",
+      "required":[
+        "joinColumns",
+        "listColumns"
+      ],
+      "members":{
+        "joinColumns":{
+          "shape":"ConsolidatedPolicyListJoinColumnsList",
+          "documentation":"<p> The columns to join on.</p>"
+        },
+        "allowedJoinOperators":{
+          "shape":"JoinOperatorsList",
+          "documentation":"<p> The allowed join operators in the consolidated policy list.</p>"
+        },
+        "listColumns":{
+          "shape":"AnalysisRuleColumnList",
+          "documentation":"<p> The columns in the consolidated policy list.</p>"
+        },
+        "additionalAnalyses":{
+          "shape":"AdditionalAnalyses",
+          "documentation":"<p> Additional analyses for the consolidated policy list.</p>"
+        },
+        "allowedResultReceivers":{
+          "shape":"AllowedResultReceivers",
+          "documentation":"<p> The allowed result receivers.</p>"
+        },
+        "allowedAdditionalAnalyses":{
+          "shape":"AllowedAdditionalAnalyses",
+          "documentation":"<p> The additional analyses allowed by the consolidated policy list.</p>"
+        }
+      },
+      "documentation":"<p>Controls on the analysis specifications that can be run on a configured table.</p>"
+    },
+    "ConsolidatedPolicyListJoinColumnsList":{
+      "type":"list",
+      "member":{"shape":"AnalysisRuleColumnName"},
+      "min":1
+    },
+    "ConsolidatedPolicyV1":{
+      "type":"structure",
+      "members":{
+        "list":{
+          "shape":"ConsolidatedPolicyList",
+          "documentation":"<p> The list of consolidated policies.</p>"
+        },
+        "aggregation":{
+          "shape":"ConsolidatedPolicyAggregation",
+          "documentation":"<p> The aggregation setting for the consolidated policy.</p>"
+        },
+        "custom":{
+          "shape":"ConsolidatedPolicyCustom",
+          "documentation":"<p> Custom policy</p>"
+        }
+      },
+      "documentation":"<p>Controls on the analysis specifications that can be run on a configured table.</p>",
+      "union":true
+    },
     "CreateAnalysisTemplateInput":{
       "type":"structure",
       "required":[
@@ -3871,7 +4760,7 @@
         },
         "source":{
           "shape":"AnalysisSource",
-          "documentation":"<p>The information in the analysis template. Currently supports <code>text</code>, the query text for the analysis template.</p>"
+          "documentation":"<p>The information in the analysis template.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -3880,6 +4769,11 @@
         "analysisParameters":{
           "shape":"AnalysisParameterList",
           "documentation":"<p>The parameters of the analysis template.</p>"
+        },
+        "schema":{"shape":"AnalysisSchema"},
+        "errorMessageConfiguration":{
+          "shape":"ErrorMessageConfiguration",
+          "documentation":"<p>The configuration that specifies the level of detail in error messages returned by analyses using this template. When set to <code>DETAILED</code>, error messages include more information to help troubleshoot issues with PySpark jobs. Detailed error messages may expose underlying data, including sensitive information. Recommended for faster troubleshooting in development and testing environments.</p>"
         }
       }
     },
@@ -3893,6 +4787,32 @@
         }
       }
     },
+    "CreateCollaborationChangeRequestInput":{
+      "type":"structure",
+      "required":[
+        "collaborationIdentifier",
+        "changes"
+      ],
+      "members":{
+        "collaborationIdentifier":{
+          "shape":"CollaborationIdentifier",
+          "documentation":"<p>The identifier of the collaboration that the change request is made against.</p>",
+          "location":"uri",
+          "locationName":"collaborationIdentifier"
+        },
+        "changes":{
+          "shape":"ChangeInputList",
+          "documentation":"<p>The list of changes to apply to the collaboration. Each change specifies the type of modification and the details of what should be changed.</p>"
+        }
+      }
+    },
+    "CreateCollaborationChangeRequestOutput":{
+      "type":"structure",
+      "required":["collaborationChangeRequest"],
+      "members":{
+        "collaborationChangeRequest":{"shape":"CollaborationChangeRequest"}
+      }
+    },
     "CreateCollaborationInput":{
       "type":"structure",
       "required":[
@@ -3922,7 +4842,7 @@
         },
         "creatorMLMemberAbilities":{
           "shape":"MLMemberAbilities",
-          "documentation":"<p>The ML abilities granted to the collaboration creator.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>The ML abilities granted to the collaboration creator.</p>"
         },
         "creatorDisplayName":{
           "shape":"DisplayName",
@@ -3934,7 +4854,11 @@
         },
         "queryLogStatus":{
           "shape":"CollaborationQueryLogStatus",
-          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the collaboration.</p>"
+          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the collaboration.</p> <p>When <code>ENABLED</code>, Clean Rooms logs details about queries run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
+        },
+        "jobLogStatus":{
+          "shape":"CollaborationJobLogStatus",
+          "documentation":"<p>Specifies whether job logs are enabled for this collaboration. </p> <p>When <code>ENABLED</code>, Clean Rooms logs details about jobs run within this collaboration; those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -3946,7 +4870,15 @@
         },
         "analyticsEngine":{
           "shape":"AnalyticsEngine",
-          "documentation":"<p> The analytics engine.</p>"
+          "documentation":"<p> The analytics engine.</p> <note> <p>After July 16, 2025, the <code>CLEAN_ROOMS_SQL</code> parameter will no longer be available. </p> </note>"
+        },
+        "autoApprovedChangeRequestTypes":{
+          "shape":"AutoApprovedChangeTypeList",
+          "documentation":"<p>The types of change requests that are automatically approved for this collaboration.</p>"
+        },
+        "allowedResultRegions":{
+          "shape":"AllowedResultRegions",
+          "documentation":"<p>The Amazon Web Services Regions where collaboration query results can be stored. When specified, results can only be written to these Regions. This parameter enables you to meet your compliance and data governance requirements, and implement regional data governance policies.</p>"
         }
       }
     },
@@ -4156,7 +5088,11 @@
         },
         "analysisMethod":{
           "shape":"AnalysisMethod",
-          "documentation":"<p>The analysis method for the configured tables. The only valid value is currently `DIRECT_QUERY`.</p>"
+          "documentation":"<p>The analysis method allowed for the configured tables.</p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The analysis methods to enable for the configured table. When configured, you must specify at least two analysis methods.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -4279,7 +5215,11 @@
         },
         "queryLogStatus":{
           "shape":"MembershipQueryLogStatus",
-          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p>"
+          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p> <p>When <code>ENABLED</code>, Clean Rooms logs details about queries run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
+        },
+        "jobLogStatus":{
+          "shape":"MembershipJobLogStatus",
+          "documentation":"<p>An indicator as to whether job logging has been enabled or disabled for the collaboration. </p> <p>When <code>ENABLED</code>, Clean Rooms logs details about jobs run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -4289,6 +5229,10 @@
           "shape":"MembershipProtectedQueryResultConfiguration",
           "documentation":"<p>The default protected query result configuration as specified by the member who can receive results.</p>"
         },
+        "defaultJobResultConfiguration":{
+          "shape":"MembershipProtectedJobResultConfiguration",
+          "documentation":"<p>The default job result configuration that determines how job results are protected and managed within this membership. This configuration applies to all jobs.</p>"
+        },
         "paymentConfiguration":{
           "shape":"MembershipPaymentConfiguration",
           "documentation":"<p>The payment responsibilities accepted by the collaboration member.</p> <p>Not required if the collaboration member has the member ability to run queries. </p> <p>Required if the collaboration member doesn't have the member ability to run queries but is configured as a payer by the collaboration creator. </p>"
@@ -4309,7 +5253,6 @@
       "type":"structure",
       "required":[
         "membershipIdentifier",
-        "autoRefresh",
         "privacyBudgetType",
         "parameters"
       ],
@@ -4411,8 +5354,7 @@
     },
     "DeleteAnalysisTemplateOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCollaborationInput":{
       "type":"structure",
@@ -4428,8 +5370,7 @@
     },
     "DeleteCollaborationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConfiguredAudienceModelAssociationInput":{
       "type":"structure",
@@ -4454,8 +5395,7 @@
     },
     "DeleteConfiguredAudienceModelAssociationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConfiguredTableAnalysisRuleInput":{
       "type":"structure",
@@ -4480,8 +5420,7 @@
     },
     "DeleteConfiguredTableAnalysisRuleOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty response that indicates a successful delete.</p>"
     },
     "DeleteConfiguredTableAssociationAnalysisRuleInput":{
@@ -4514,8 +5453,7 @@
     },
     "DeleteConfiguredTableAssociationAnalysisRuleOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConfiguredTableAssociationInput":{
       "type":"structure",
@@ -4540,8 +5478,7 @@
     },
     "DeleteConfiguredTableAssociationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConfiguredTableInput":{
       "type":"structure",
@@ -4557,8 +5494,7 @@
     },
     "DeleteConfiguredTableOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The empty output for a successful deletion.</p>"
     },
     "DeleteIdMappingTableInput":{
@@ -4584,8 +5520,7 @@
     },
     "DeleteIdMappingTableOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIdNamespaceAssociationInput":{
       "type":"structure",
@@ -4610,8 +5545,7 @@
     },
     "DeleteIdNamespaceAssociationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMemberInput":{
       "type":"structure",
@@ -4636,8 +5570,7 @@
     },
     "DeleteMemberOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMembershipInput":{
       "type":"structure",
@@ -4653,8 +5586,7 @@
     },
     "DeleteMembershipOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePrivacyBudgetTemplateInput":{
       "type":"structure",
@@ -4679,8 +5611,7 @@
     },
     "DeletePrivacyBudgetTemplateOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DifferentialPrivacyAggregationExpression":{
       "type":"string",
@@ -4701,7 +5632,7 @@
       "required":["name"],
       "members":{
         "name":{
-          "shape":"String",
+          "shape":"ColumnName",
           "documentation":"<p>The name of the column, such as user_id, that contains the unique identifier of your users, whose privacy you want to protect. If you want to turn on differential privacy for two or more tables in a collaboration, you must configure the same column as the user identifier column in both analysis rules.</p>"
         }
       },
@@ -4954,8 +5885,7 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "Double":{
@@ -4968,6 +5898,21 @@
       "max":20,
       "min":1
     },
+    "ErrorMessageConfiguration":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"ErrorMessageType",
+          "documentation":"<p>The level of detail for error messages returned by the PySpark job. When set to DETAILED, error messages include more information to help troubleshoot issues with your PySpark job.</p> <p>Because this setting may expose sensitive data, it is recommended for development and testing environments.</p>"
+        }
+      },
+      "documentation":"<p>A structure that defines the level of detail included in error messages returned by PySpark jobs. This configuration allows you to control the verbosity of error messages to help with troubleshooting PySpark jobs while maintaining appropriate security controls.</p>"
+    },
+    "ErrorMessageType":{
+      "type":"string",
+      "enum":["DETAILED"]
+    },
     "FilterableMemberStatus":{
       "type":"string",
       "enum":[
@@ -5047,6 +5992,37 @@
         }
       }
     },
+    "GetCollaborationChangeRequestInput":{
+      "type":"structure",
+      "required":[
+        "collaborationIdentifier",
+        "changeRequestIdentifier"
+      ],
+      "members":{
+        "collaborationIdentifier":{
+          "shape":"CollaborationIdentifier",
+          "documentation":"<p>The identifier of the collaboration that the change request is made against.</p>",
+          "location":"uri",
+          "locationName":"collaborationIdentifier"
+        },
+        "changeRequestIdentifier":{
+          "shape":"CollaborationChangeRequestIdentifier",
+          "documentation":"<p>A unique identifier for the change request to retrieve.</p>",
+          "location":"uri",
+          "locationName":"changeRequestIdentifier"
+        }
+      }
+    },
+    "GetCollaborationChangeRequestOutput":{
+      "type":"structure",
+      "required":["collaborationChangeRequest"],
+      "members":{
+        "collaborationChangeRequest":{
+          "shape":"CollaborationChangeRequest",
+          "documentation":"<p>The collaboration change request that was requested.</p>"
+        }
+      }
+    },
     "GetCollaborationConfiguredAudienceModelAssociationInput":{
       "type":"structure",
       "required":[
@@ -5430,6 +6406,37 @@
         }
       }
     },
+    "GetProtectedJobInput":{
+      "type":"structure",
+      "required":[
+        "membershipIdentifier",
+        "protectedJobIdentifier"
+      ],
+      "members":{
+        "membershipIdentifier":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p> The identifier for a membership in a protected job instance.</p>",
+          "location":"uri",
+          "locationName":"membershipIdentifier"
+        },
+        "protectedJobIdentifier":{
+          "shape":"ProtectedJobIdentifier",
+          "documentation":"<p> The identifier for the protected job instance.</p>",
+          "location":"uri",
+          "locationName":"protectedJobIdentifier"
+        }
+      }
+    },
+    "GetProtectedJobOutput":{
+      "type":"structure",
+      "required":["protectedJob"],
+      "members":{
+        "protectedJob":{
+          "shape":"ProtectedJob",
+          "documentation":"<p> The protected job metadata.</p>"
+        }
+      }
+    },
     "GetProtectedQueryInput":{
       "type":"structure",
       "required":[
@@ -5549,6 +6556,10 @@
         "databaseName"
       ],
       "members":{
+        "region":{
+          "shape":"CommercialRegion",
+          "documentation":"<p>The Amazon Web Services Region where the Glue table is located. This parameter is required to uniquely identify and access tables across different Regions.</p>"
+        },
         "tableName":{
           "shape":"GlueTableName",
           "documentation":"<p>The name of the Glue table.</p>"
@@ -5560,6 +6571,20 @@
       },
       "documentation":"<p>A reference to a table within an Glue data catalog.</p>"
     },
+    "Hash":{
+      "type":"structure",
+      "members":{
+        "sha256":{
+          "shape":"String",
+          "documentation":"<p> The SHA-256 hash value.</p>"
+        }
+      },
+      "documentation":"<p> Hash</p>"
+    },
+    "HashList":{
+      "type":"list",
+      "member":{"shape":"Hash"}
+    },
     "IdMappingConfig":{
       "type":"structure",
       "required":["allowUseAsDimensionColumn"],
@@ -6012,6 +7037,25 @@
       "exception":true,
       "fault":true
     },
+    "JobComputePaymentConfig":{
+      "type":"structure",
+      "required":["isResponsible"],
+      "members":{
+        "isResponsible":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the collaboration creator has configured the collaboration member to pay for query and job compute costs (<code>TRUE</code>) or has not configured the collaboration member to pay for query and job compute costs (<code>FALSE</code>).</p> <p>Exactly one member can be configured to pay for query and job compute costs. An error is returned if the collaboration creator sets a <code>TRUE</code> value for more than one member in the collaboration. </p> <p>An error is returned if the collaboration creator sets a <code>FALSE</code> value for the member who can run queries and jobs.</p>"
+        }
+      },
+      "documentation":"<p>An object representing the collaboration member's payment responsibilities set by the collaboration creator for query and job compute costs.</p>"
+    },
+    "JobType":{
+      "type":"string",
+      "enum":[
+        "BATCH",
+        "INCREMENTAL",
+        "DELETE_ONLY"
+      ]
+    },
     "JoinOperator":{
       "type":"string",
       "enum":[
@@ -6117,6 +7161,50 @@
         }
       }
     },
+    "ListCollaborationChangeRequestsInput":{
+      "type":"structure",
+      "required":["collaborationIdentifier"],
+      "members":{
+        "collaborationIdentifier":{
+          "shape":"CollaborationIdentifier",
+          "documentation":"<p>The identifier of the collaboration that the change request is made against.</p>",
+          "location":"uri",
+          "locationName":"collaborationIdentifier"
+        },
+        "status":{
+          "shape":"ChangeRequestStatus",
+          "documentation":"<p>A filter to only return change requests with the specified status.</p>",
+          "location":"querystring",
+          "locationName":"status"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results that are returned for an API request call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListCollaborationChangeRequestsOutput":{
+      "type":"structure",
+      "required":["collaborationChangeRequestSummaries"],
+      "members":{
+        "collaborationChangeRequestSummaries":{
+          "shape":"CollaborationChangeRequestSummaryList",
+          "documentation":"<p>The list of collaboration change request summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>"
+        }
+      }
+    },
     "ListCollaborationConfiguredAudienceModelAssociationsInput":{
       "type":"structure",
       "required":["collaborationIdentifier"],
@@ -6261,6 +7349,12 @@
           "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "accessBudgetResourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Configured Table Association (ConfiguredTableAssociation) used to filter privacy budgets.</p>",
+          "location":"querystring",
+          "locationName":"accessBudgetResourceArn"
         }
       }
     },
@@ -6641,6 +7735,12 @@
           "documentation":"<p>The maximum number of results that are returned for an API request call. The service chooses a default number if you don't set one. The service might return a `nextToken` even if the `maxResults` value has not been met.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        },
+        "accessBudgetResourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access budget resource to filter privacy budgets by.</p>",
+          "location":"querystring",
+          "locationName":"accessBudgetResourceArn"
         }
       }
     },
@@ -6658,6 +7758,50 @@
         }
       }
     },
+    "ListProtectedJobsInput":{
+      "type":"structure",
+      "required":["membershipIdentifier"],
+      "members":{
+        "membershipIdentifier":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p>The identifier for the membership in the collaboration.</p>",
+          "location":"uri",
+          "locationName":"membershipIdentifier"
+        },
+        "status":{
+          "shape":"ProtectedJobStatus",
+          "documentation":"<p>A filter on the status of the protected job.</p>",
+          "location":"querystring",
+          "locationName":"status"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results that are returned for an API request call. The service chooses a default number if you don't set one. The service might return a `nextToken` even if the `maxResults` value has not been met. </p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListProtectedJobsOutput":{
+      "type":"structure",
+      "required":["protectedJobs"],
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>"
+        },
+        "protectedJobs":{
+          "shape":"ProtectedJobSummaryList",
+          "documentation":"<p>A list of protected job summaries.</p>"
+        }
+      }
+    },
     "ListProtectedQueriesInput":{
       "type":"structure",
       "required":["membershipIdentifier"],
@@ -6778,10 +7922,10 @@
       "members":{
         "customMLMemberAbilities":{
           "shape":"CustomMLMemberAbilities",
-          "documentation":"<p>The custom ML member abilities for a collaboration member. The inference feature is not available in the custom ML modeling beta.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>The custom ML member abilities for a collaboration member. </p>"
         }
       },
-      "documentation":"<p>The ML member abilities for a collaboration member.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+      "documentation":"<p>The ML member abilities for a collaboration member.</p>"
     },
     "MLPaymentConfig":{
       "type":"structure",
@@ -6811,9 +7955,32 @@
       "type":"string",
       "enum":[
         "CAN_QUERY",
-        "CAN_RECEIVE_RESULTS"
+        "CAN_RECEIVE_RESULTS",
+        "CAN_RUN_JOB"
       ]
     },
+    "MemberChangeSpecification":{
+      "type":"structure",
+      "required":[
+        "accountId",
+        "memberAbilities"
+      ],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID of the member to add to the collaboration.</p>"
+        },
+        "memberAbilities":{
+          "shape":"MemberAbilities",
+          "documentation":"<p>The abilities granted to the collaboration member. These determine what actions the member can perform within the collaboration.</p> <note> <p>The following values are currently not supported: <code>CAN_QUERY</code>, <code>CAN_RECEIVE_RESULTS,</code> and <code>CAN_RUN_JOB</code>. </p> <p>Set the value of <code>memberAbilities</code> to <code>[]</code> to allow a member to contribute data.</p> </note>"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>Specifies the display name that will be shown for this member in the collaboration. While this field is required when inviting new members, it becomes optional when modifying abilities of existing collaboration members. </p>"
+        }
+      },
+      "documentation":"<p>Specifies changes to collaboration membership, including adding new members with their abilities and display names.</p>"
+    },
     "MemberList":{
       "type":"list",
       "member":{"shape":"MemberSpecification"},
@@ -6838,7 +8005,7 @@
         },
         "mlMemberAbilities":{
           "shape":"MLMemberAbilities",
-          "documentation":"<p>The ML abilities granted to the collaboration member.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>The ML abilities granted to the collaboration member.</p>"
         },
         "displayName":{
           "shape":"DisplayName",
@@ -6890,7 +8057,7 @@
         },
         "mlAbilities":{
           "shape":"MLMemberAbilities",
-          "documentation":"<p>Provides a summary of the ML abilities for the collaboration member.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>Provides a summary of the ML abilities for the collaboration member.</p>"
         },
         "createTime":{
           "shape":"Timestamp",
@@ -6983,16 +8150,24 @@
         },
         "mlMemberAbilities":{
           "shape":"MLMemberAbilities",
-          "documentation":"<p>Specifies the ML member abilities that are granted to a collaboration member.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>Specifies the ML member abilities that are granted to a collaboration member.</p>"
         },
         "queryLogStatus":{
           "shape":"MembershipQueryLogStatus",
-          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p>"
+          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p> <p>When <code>ENABLED</code>, Clean Rooms logs details about queries run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
+        },
+        "jobLogStatus":{
+          "shape":"MembershipJobLogStatus",
+          "documentation":"<p>An indicator as to whether job logging has been enabled or disabled for the collaboration. </p> <p>When <code>ENABLED</code>, Clean Rooms logs details about jobs run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
         },
         "defaultResultConfiguration":{
           "shape":"MembershipProtectedQueryResultConfiguration",
           "documentation":"<p>The default protected query result configuration as specified by the member who can receive results.</p>"
         },
+        "defaultJobResultConfiguration":{
+          "shape":"MembershipProtectedJobResultConfiguration",
+          "documentation":"<p> The default job result configuration for the membership.</p>"
+        },
         "paymentConfiguration":{
           "shape":"MembershipPaymentConfiguration",
           "documentation":"<p>The payment responsibilities accepted by the collaboration member.</p>"
@@ -7012,6 +8187,24 @@
       "min":36,
       "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
     },
+    "MembershipJobComputePaymentConfig":{
+      "type":"structure",
+      "required":["isResponsible"],
+      "members":{
+        "isResponsible":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the collaboration member has accepted to pay for job compute costs (<code>TRUE</code>) or has not accepted to pay for query and job compute costs (<code>FALSE</code>).</p> <p>There is only one member who pays for queries and jobs. </p> <p>An error message is returned for the following reasons: </p> <ul> <li> <p>If you set the value to <code>FALSE</code> but you are responsible to pay for query and job compute costs. </p> </li> <li> <p>If you set the value to <code>TRUE</code> but you are not responsible to pay for query and job compute costs. </p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>An object representing the payment responsibilities accepted by the collaboration member for query and job compute costs.</p>"
+    },
+    "MembershipJobLogStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "MembershipMLPaymentConfig":{
       "type":"structure",
       "members":{
@@ -7059,10 +8252,43 @@
         "machineLearning":{
           "shape":"MembershipMLPaymentConfig",
           "documentation":"<p>The payment responsibilities accepted by the collaboration member for machine learning costs.</p>"
+        },
+        "jobCompute":{
+          "shape":"MembershipJobComputePaymentConfig",
+          "documentation":"<p>The payment responsibilities accepted by the collaboration member for job compute costs.</p>"
         }
       },
       "documentation":"<p>An object representing the payment responsibilities accepted by the collaboration member.</p>"
     },
+    "MembershipProtectedJobOutputConfiguration":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"ProtectedJobS3OutputConfigurationInput",
+          "documentation":"<p>Contains the configuration to write the job results to S3.</p>"
+        }
+      },
+      "documentation":"<p>Contains configurations for protected job results.</p>",
+      "union":true
+    },
+    "MembershipProtectedJobResultConfiguration":{
+      "type":"structure",
+      "required":[
+        "outputConfiguration",
+        "roleArn"
+      ],
+      "members":{
+        "outputConfiguration":{
+          "shape":"MembershipProtectedJobOutputConfiguration",
+          "documentation":"<p> The output configuration for a protected job result.</p>"
+        },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The unique ARN for an IAM role that is used by Clean Rooms to write protected job results to the result location, given by the member who can receive results.</p>"
+        }
+      },
+      "documentation":"<p>Contains configurations for protected job results.</p>"
+    },
     "MembershipProtectedQueryOutputConfiguration":{
       "type":"structure",
       "members":{
@@ -7175,7 +8401,7 @@
         },
         "mlMemberAbilities":{
           "shape":"MLMemberAbilities",
-          "documentation":"<p>Provides a summary of the ML abilities for the collaboration member.</p> <p>Custom ML modeling is in beta release and is subject to change. For beta terms and conditions, see <i>Betas and Previews</i> in the <a href=\"https://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a>.</p>"
+          "documentation":"<p>Provides a summary of the ML abilities for the collaboration member.</p>"
         },
         "paymentConfiguration":{
           "shape":"MembershipPaymentConfiguration",
@@ -7275,6 +8501,10 @@
         "machineLearning":{
           "shape":"MLPaymentConfig",
           "documentation":"<p>An object representing the collaboration member's machine learning payment responsibilities set by the collaboration creator.</p>"
+        },
+        "jobCompute":{
+          "shape":"JobComputePaymentConfig",
+          "documentation":"<p> The compute configuration for the job.</p>"
         }
       },
       "documentation":"<p>An object representing the collaboration member's payment responsibilities set by the collaboration creator.</p>"
@@ -7297,6 +8527,10 @@
           "documentation":"<p>The unique identifier of the membership that contains the ID mapping table that you want to populate.</p>",
           "location":"uri",
           "locationName":"membershipIdentifier"
+        },
+        "jobType":{
+          "shape":"JobType",
+          "documentation":"<p>The job type of the rule-based ID mapping job. Valid values include:</p> <p> <code>INCREMENTAL</code>: Processes only new or changed data since the last job run. This is the default job type if the ID mapping workflow was created in Entity Resolution with <code>incrementalRunConfig</code> specified.</p> <p> <code>BATCH</code>: Processes all data from the input source, regardless of previous job runs. This is the default job type if the ID mapping workflow was created in Entity Resolution but <code>incrementalRunConfig</code> wasn't specified.</p> <p> <code>DELETE_ONLY</code>: Processes only deletion requests from <code>BatchDeleteUniqueId</code>, which is set in Entity Resolution.</p> <p>For more information about <code>incrementalRunConfig</code> and <code>BatchDeleteUniqueId</code>, see the <a href=\"https://docs.aws.amazon.com/entityresolution/latest/apireference/Welcome.html\">Entity Resolution API Reference</a>.</p>"
         }
       }
     },
@@ -7356,6 +8590,10 @@
         "differentialPrivacy":{
           "shape":"DifferentialPrivacyPrivacyBudget",
           "documentation":"<p>An object that specifies the epsilon parameter and the utility in terms of total aggregations, as well as the remaining aggregations available.</p>"
+        },
+        "accessBudget":{
+          "shape":"AccessBudget",
+          "documentation":"<p>Access budget information associated with this privacy budget.</p>"
         }
       },
       "documentation":"<p>The epsilon parameter value and number of each aggregation function that you can perform.</p>",
@@ -7516,6 +8754,10 @@
         "differentialPrivacy":{
           "shape":"DifferentialPrivacyTemplateParametersInput",
           "documentation":"<p>An object that specifies the epsilon and noise parameters.</p>"
+        },
+        "accessBudget":{
+          "shape":"AccessBudgetsPrivacyTemplateParametersInput",
+          "documentation":"<p>Access budget configuration for the privacy budget template input, enabling integration with access budget functionality.</p>"
         }
       },
       "documentation":"<p>The epsilon and noise parameters that you want to use for the privacy budget template.</p>",
@@ -7527,6 +8769,10 @@
         "differentialPrivacy":{
           "shape":"DifferentialPrivacyTemplateParametersOutput",
           "documentation":"<p>The epsilon and noise parameters.</p>"
+        },
+        "accessBudget":{
+          "shape":"AccessBudgetsPrivacyTemplateParametersOutput",
+          "documentation":"<p>Access budget configuration returned from the privacy budget template, containing the configured access budget settings.</p>"
         }
       },
       "documentation":"<p>The epsilon and noise parameters that were used in the privacy budget template.</p>",
@@ -7595,6 +8841,10 @@
         "differentialPrivacy":{
           "shape":"DifferentialPrivacyTemplateUpdateParameters",
           "documentation":"<p>An object that specifies the new values for the epsilon and noise parameters.</p>"
+        },
+        "accessBudget":{
+          "shape":"AccessBudgetsPrivacyTemplateUpdateParameters",
+          "documentation":"<p> The new access budget configuration that completely replaces the existing access budget settings in the privacy budget template.</p>"
         }
       },
       "documentation":"<p>The epsilon and noise parameters that you want to update in the privacy budget template.</p>",
@@ -7602,7 +8852,10 @@
     },
     "PrivacyBudgetType":{
       "type":"string",
-      "enum":["DIFFERENTIAL_PRIVACY"]
+      "enum":[
+        "DIFFERENTIAL_PRIVACY",
+        "ACCESS_BUDGET"
+      ]
     },
     "PrivacyImpact":{
       "type":"structure",
@@ -7615,6 +8868,422 @@
       "documentation":"<p>Provides an estimate of the number of aggregation functions that the member who can query can run given the epsilon and noise parameters.</p>",
       "union":true
     },
+    "ProtectedJob":{
+      "type":"structure",
+      "required":[
+        "id",
+        "membershipId",
+        "membershipArn",
+        "createTime",
+        "status"
+      ],
+      "members":{
+        "id":{
+          "shape":"ProtectedJobIdentifier",
+          "documentation":"<p>The identifier for a protected job instance.</p>"
+        },
+        "membershipId":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p>he identifier for the membership.</p>"
+        },
+        "membershipArn":{
+          "shape":"MembershipArn",
+          "documentation":"<p>The ARN of the membership.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> The creation time of the protected job.</p>"
+        },
+        "jobParameters":{
+          "shape":"ProtectedJobParameters",
+          "documentation":"<p> The job parameters for the protected job.</p>"
+        },
+        "status":{
+          "shape":"ProtectedJobStatus",
+          "documentation":"<p> The status of the protected job.</p>"
+        },
+        "resultConfiguration":{
+          "shape":"ProtectedJobResultConfigurationOutput",
+          "documentation":"<p>Contains any details needed to write the job results.</p>"
+        },
+        "statistics":{
+          "shape":"ProtectedJobStatistics",
+          "documentation":"<p> The statistics of the protected job.</p>"
+        },
+        "result":{
+          "shape":"ProtectedJobResult",
+          "documentation":"<p> The result of the protected job.</p>"
+        },
+        "error":{
+          "shape":"ProtectedJobError",
+          "documentation":"<p> The error from the protected job.</p>"
+        },
+        "computeConfiguration":{
+          "shape":"ProtectedJobComputeConfiguration",
+          "documentation":"<p>The compute configuration for the protected job.</p>"
+        }
+      },
+      "documentation":"<p>The parameters for an Clean Rooms protected job.</p>"
+    },
+    "ProtectedJobAnalysisType":{
+      "type":"string",
+      "enum":["DIRECT_ANALYSIS"]
+    },
+    "ProtectedJobComputeConfiguration":{
+      "type":"structure",
+      "members":{
+        "worker":{
+          "shape":"ProtectedJobWorkerComputeConfiguration",
+          "documentation":"<p>The worker configuration for the compute environment.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of the compute resources for a PySpark job.</p>",
+      "union":true
+    },
+    "ProtectedJobConfigurationDetails":{
+      "type":"structure",
+      "members":{
+        "directAnalysisConfigurationDetails":{
+          "shape":"ProtectedJobDirectAnalysisConfigurationDetails",
+          "documentation":"<p>The details needed to configure the direct analysis.</p>"
+        }
+      },
+      "documentation":"<p>The protected job configuration details.</p>",
+      "union":true
+    },
+    "ProtectedJobDirectAnalysisConfigurationDetails":{
+      "type":"structure",
+      "members":{
+        "receiverAccountIds":{
+          "shape":"ProtectedJobReceiverAccountIds",
+          "documentation":"<p> The receiver account IDs.</p>"
+        }
+      },
+      "documentation":"<p>The protected job direct analysis configuration details.</p>"
+    },
+    "ProtectedJobError":{
+      "type":"structure",
+      "required":[
+        "message",
+        "code"
+      ],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p> The message for the protected job error.</p>"
+        },
+        "code":{
+          "shape":"String",
+          "documentation":"<p> The error code for the protected job.</p>"
+        }
+      },
+      "documentation":"<p>The protected job error.</p>"
+    },
+    "ProtectedJobIdentifier":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
+    "ProtectedJobMemberOutputConfigurationInput":{
+      "type":"structure",
+      "required":["accountId"],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The account ID.</p>"
+        }
+      },
+      "documentation":"<p> The protected job member output configuration input.</p>"
+    },
+    "ProtectedJobMemberOutputConfigurationOutput":{
+      "type":"structure",
+      "required":["accountId"],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The account ID.</p>"
+        }
+      },
+      "documentation":"<p> The protected job member output configuration output.</p>"
+    },
+    "ProtectedJobMemberOutputList":{
+      "type":"list",
+      "member":{"shape":"ProtectedJobSingleMemberOutput"}
+    },
+    "ProtectedJobOutput":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"ProtectedJobS3Output",
+          "documentation":"<p>If present, the output for a protected job with an `S3` output type.</p>"
+        },
+        "memberList":{
+          "shape":"ProtectedJobMemberOutputList",
+          "documentation":"<p>The list of member Amazon Web Services account(s) that received the results of the job. </p>"
+        }
+      },
+      "documentation":"<p>Contains details about the protected job output.</p>",
+      "union":true
+    },
+    "ProtectedJobOutputConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "member":{
+          "shape":"ProtectedJobMemberOutputConfigurationInput",
+          "documentation":"<p> The member of the protected job output configuration input.</p>"
+        }
+      },
+      "documentation":"<p> The protected job output configuration input.</p>",
+      "union":true
+    },
+    "ProtectedJobOutputConfigurationOutput":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"ProtectedJobS3OutputConfigurationOutput",
+          "documentation":"<p>If present, the output for a protected job with an `S3` output type.</p>"
+        },
+        "member":{
+          "shape":"ProtectedJobMemberOutputConfigurationOutput",
+          "documentation":"<p> The member output configuration for a protected job.</p>"
+        }
+      },
+      "documentation":"<p> The protected job output configuration output.</p>",
+      "union":true
+    },
+    "ProtectedJobParameters":{
+      "type":"structure",
+      "members":{
+        "analysisTemplateArn":{
+          "shape":"AnalysisTemplateArn",
+          "documentation":"<p> The ARN of the analysis template.</p>"
+        }
+      },
+      "documentation":"<p>The parameters for the protected job.</p>"
+    },
+    "ProtectedJobReceiverAccountIds":{
+      "type":"list",
+      "member":{"shape":"AccountId"}
+    },
+    "ProtectedJobReceiverConfiguration":{
+      "type":"structure",
+      "required":["analysisType"],
+      "members":{
+        "analysisType":{
+          "shape":"ProtectedJobAnalysisType",
+          "documentation":"<p> The analysis type for the protected job receiver configuration.</p>"
+        },
+        "configurationDetails":{
+          "shape":"ProtectedJobConfigurationDetails",
+          "documentation":"<p> The configuration details for the protected job receiver.</p>"
+        }
+      },
+      "documentation":"<p>The protected job receiver configuration.</p>"
+    },
+    "ProtectedJobReceiverConfigurations":{
+      "type":"list",
+      "member":{"shape":"ProtectedJobReceiverConfiguration"}
+    },
+    "ProtectedJobResult":{
+      "type":"structure",
+      "required":["output"],
+      "members":{
+        "output":{
+          "shape":"ProtectedJobOutput",
+          "documentation":"<p> The output of the protected job.</p>"
+        }
+      },
+      "documentation":"<p>Details about the job results.</p>"
+    },
+    "ProtectedJobResultConfigurationInput":{
+      "type":"structure",
+      "required":["outputConfiguration"],
+      "members":{
+        "outputConfiguration":{
+          "shape":"ProtectedJobOutputConfigurationInput",
+          "documentation":"<p> The output configuration for a protected job result.</p>"
+        }
+      },
+      "documentation":"<p>The protected job result configuration input.</p>"
+    },
+    "ProtectedJobResultConfigurationOutput":{
+      "type":"structure",
+      "required":["outputConfiguration"],
+      "members":{
+        "outputConfiguration":{
+          "shape":"ProtectedJobOutputConfigurationOutput",
+          "documentation":"<p>The output configuration.</p>"
+        }
+      },
+      "documentation":"<p>The output configuration for a protected job result.</p>"
+    },
+    "ProtectedJobS3Output":{
+      "type":"structure",
+      "required":["location"],
+      "members":{
+        "location":{
+          "shape":"String",
+          "documentation":"<p> The S3 location for the protected job output.</p>"
+        }
+      },
+      "documentation":"<p>Contains output information for protected jobs with an S3 output type.</p>"
+    },
+    "ProtectedJobS3OutputConfigurationInput":{
+      "type":"structure",
+      "required":["bucket"],
+      "members":{
+        "bucket":{
+          "shape":"ProtectedJobS3OutputConfigurationInputBucketString",
+          "documentation":"<p> The S3 bucket for job output.</p>"
+        },
+        "keyPrefix":{
+          "shape":"KeyPrefix",
+          "documentation":"<p>The S3 prefix to unload the protected job results.</p>"
+        }
+      },
+      "documentation":"<p>Contains input information for protected jobs with an S3 output type.</p>"
+    },
+    "ProtectedJobS3OutputConfigurationInputBucketString":{
+      "type":"string",
+      "max":63,
+      "min":3,
+      "pattern":".*(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$).*"
+    },
+    "ProtectedJobS3OutputConfigurationOutput":{
+      "type":"structure",
+      "required":["bucket"],
+      "members":{
+        "bucket":{
+          "shape":"ProtectedJobS3OutputConfigurationOutputBucketString",
+          "documentation":"<p> The S3 bucket for job output.</p>"
+        },
+        "keyPrefix":{
+          "shape":"KeyPrefix",
+          "documentation":"<p>The S3 prefix to unload the protected job results.</p>"
+        }
+      },
+      "documentation":"<p> The output configuration for a protected job's S3 output.</p>"
+    },
+    "ProtectedJobS3OutputConfigurationOutputBucketString":{
+      "type":"string",
+      "max":63,
+      "min":3,
+      "pattern":".*(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$).*"
+    },
+    "ProtectedJobSingleMemberOutput":{
+      "type":"structure",
+      "required":["accountId"],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID of the member in the collaboration who can receive results from analyses.</p>"
+        }
+      },
+      "documentation":"<p>Details about the member who received the job result.</p>"
+    },
+    "ProtectedJobStatistics":{
+      "type":"structure",
+      "members":{
+        "totalDurationInMillis":{
+          "shape":"Long",
+          "documentation":"<p>The duration of the protected job, from creation until job completion, in milliseconds.</p>"
+        },
+        "billedResourceUtilization":{
+          "shape":"BilledJobResourceUtilization",
+          "documentation":"<p> The billed resource utilization for the protected job.</p>"
+        }
+      },
+      "documentation":"<p>Contains statistics about the execution of the protected job.</p>"
+    },
+    "ProtectedJobStatus":{
+      "type":"string",
+      "enum":[
+        "SUBMITTED",
+        "STARTED",
+        "CANCELLED",
+        "CANCELLING",
+        "FAILED",
+        "SUCCESS"
+      ]
+    },
+    "ProtectedJobSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "membershipId",
+        "membershipArn",
+        "createTime",
+        "status",
+        "receiverConfigurations"
+      ],
+      "members":{
+        "id":{
+          "shape":"UUID",
+          "documentation":"<p> The ID of the protected job.</p>"
+        },
+        "membershipId":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p>The unique ID for the membership that initiated the protected job.</p>"
+        },
+        "membershipArn":{
+          "shape":"MembershipArn",
+          "documentation":"<p>The unique ARN for the membership that initiated the protected job.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the protected job was created.</p>"
+        },
+        "status":{
+          "shape":"ProtectedJobStatus",
+          "documentation":"<p>The status of the protected job.</p>"
+        },
+        "receiverConfigurations":{
+          "shape":"ProtectedJobReceiverConfigurations",
+          "documentation":"<p> The receiver configurations for the protected job.</p>"
+        }
+      },
+      "documentation":"<p>The protected job summary for the objects listed by the request.</p>"
+    },
+    "ProtectedJobSummaryList":{
+      "type":"list",
+      "member":{"shape":"ProtectedJobSummary"}
+    },
+    "ProtectedJobType":{
+      "type":"string",
+      "enum":["PYSPARK"]
+    },
+    "ProtectedJobWorkerComputeConfiguration":{
+      "type":"structure",
+      "required":[
+        "type",
+        "number"
+      ],
+      "members":{
+        "type":{
+          "shape":"ProtectedJobWorkerComputeType",
+          "documentation":"<p>The worker compute configuration type.</p>"
+        },
+        "number":{
+          "shape":"ProtectedJobWorkerComputeConfigurationNumberInteger",
+          "documentation":"<p>The number of workers for a PySpark job.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of the compute resources for a PySpark job.</p>"
+    },
+    "ProtectedJobWorkerComputeConfigurationNumberInteger":{
+      "type":"integer",
+      "box":true,
+      "max":128,
+      "min":4
+    },
+    "ProtectedJobWorkerComputeType":{
+      "type":"string",
+      "enum":[
+        "CR.1X",
+        "CR.4X"
+      ]
+    },
     "ProtectedQuery":{
       "type":"structure",
       "required":[
@@ -7676,6 +9345,42 @@
       },
       "documentation":"<p>The parameters for an Clean Rooms protected query.</p>"
     },
+    "ProtectedQueryDistributeOutput":{
+      "type":"structure",
+      "members":{
+        "s3":{"shape":"ProtectedQueryS3Output"},
+        "memberList":{
+          "shape":"ProtectedQueryMemberOutputList",
+          "documentation":"<p> Contains the output results for each member location specified in the distribute output configuration. Each entry provides details about the result distribution to a specific collaboration member. </p>"
+        }
+      },
+      "documentation":"<p> Contains the output information for a protected query with a distribute output configuration.</p> <p> This output type allows query results to be distributed to multiple receivers, including S3 and collaboration members. It is only available for queries using the Spark analytics engine.</p>"
+    },
+    "ProtectedQueryDistributeOutputConfiguration":{
+      "type":"structure",
+      "required":["locations"],
+      "members":{
+        "locations":{
+          "shape":"ProtectedQueryDistributeOutputConfigurationLocationsList",
+          "documentation":"<p> A list of locations where you want to distribute the protected query results. Each location must specify either an S3 destination or a collaboration member destination.</p> <important> <p>You can't specify more than one S3 location.</p> <p>You can't specify the query runner's account as a member location.</p> <p>You must include either an S3 or member output configuration for each location, but not both.</p> </important>"
+        }
+      },
+      "documentation":"<p> Specifies the configuration for distributing protected query results to multiple receivers, including S3 and collaboration members.</p>"
+    },
+    "ProtectedQueryDistributeOutputConfigurationLocation":{
+      "type":"structure",
+      "members":{
+        "s3":{"shape":"ProtectedQueryS3OutputConfiguration"},
+        "member":{"shape":"ProtectedQueryMemberOutputConfiguration"}
+      },
+      "documentation":"<p> Specifies where you'll distribute the results of your protected query. You must configure either an S3 destination or a collaboration member destination.</p>",
+      "union":true
+    },
+    "ProtectedQueryDistributeOutputConfigurationLocationsList":{
+      "type":"list",
+      "member":{"shape":"ProtectedQueryDistributeOutputConfigurationLocation"},
+      "min":1
+    },
     "ProtectedQueryError":{
       "type":"structure",
       "required":[
@@ -7720,11 +9425,15 @@
       "members":{
         "s3":{
           "shape":"ProtectedQueryS3Output",
-          "documentation":"<p>If present, the output for a protected query with an `S3` output type.</p>"
+          "documentation":"<p>If present, the output for a protected query with an <code>S3</code> output type.</p>"
         },
         "memberList":{
           "shape":"ProtectedQueryMemberOutputList",
           "documentation":"<p>The list of member Amazon Web Services account(s) that received the results of the query. </p>"
+        },
+        "distribute":{
+          "shape":"ProtectedQueryDistributeOutput",
+          "documentation":"<p>Contains output information for protected queries that use a <code>distribute</code> output type. This output type lets you send query results to multiple locations - either to S3 or to collaboration members. </p> <note> <p> You can only use the <code>distribute</code> output type with the Spark analytics engine. </p> </note>"
         }
       },
       "documentation":"<p>Contains details about the protected query output.</p>",
@@ -7740,6 +9449,10 @@
         "member":{
           "shape":"ProtectedQueryMemberOutputConfiguration",
           "documentation":"<p> Required configuration for a protected query with a <code>member</code> output type.</p>"
+        },
+        "distribute":{
+          "shape":"ProtectedQueryDistributeOutputConfiguration",
+          "documentation":"<p> Required configuration for a protected query with a <code>distribute</code> output type.</p>"
         }
       },
       "documentation":"<p>Contains configuration details for protected query output.</p>",
@@ -7850,7 +9563,7 @@
       "members":{
         "totalDurationInMillis":{
           "shape":"Long",
-          "documentation":"<p>The duration of the protected query, from creation until query completion.</p>"
+          "documentation":"<p>The duration of the protected query, from creation until query completion, in milliseconds.</p>"
         },
         "billedResourceUtilization":{
           "shape":"BilledResourceUtilization",
@@ -7982,6 +9695,11 @@
       "type":"list",
       "member":{"shape":"ReceiverConfiguration"}
     },
+    "RemainingBudget":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "ResourceAlias":{
       "type":"string",
       "max":128,
@@ -8041,6 +9759,36 @@
       "min":32,
       "pattern":"arn:aws:iam::[\\w]+:role/[\\w+=./@-]+"
     },
+    "S3Location":{
+      "type":"structure",
+      "required":[
+        "bucket",
+        "key"
+      ],
+      "members":{
+        "bucket":{
+          "shape":"S3LocationBucketString",
+          "documentation":"<p> The bucket name.</p>"
+        },
+        "key":{
+          "shape":"S3LocationKeyString",
+          "documentation":"<p> The object key.</p>"
+        }
+      },
+      "documentation":"<p>The S3 location.</p>"
+    },
+    "S3LocationBucketString":{
+      "type":"string",
+      "max":63,
+      "min":3,
+      "pattern":".*(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$).*"
+    },
+    "S3LocationKeyString":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[a-zA-Z0-9!_.*'()-/]+"
+    },
     "ScalarFunctions":{
       "type":"string",
       "enum":[
@@ -8105,7 +9853,11 @@
         },
         "analysisMethod":{
           "shape":"AnalysisMethod",
-          "documentation":"<p>The analysis method for the schema. The only valid value is currently <code>DIRECT_QUERY</code>.</p>"
+          "documentation":"<p>The analysis method for the schema. </p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The selected analysis methods for the schema.</p>"
         },
         "creatorAccountId":{
           "shape":"AccountId",
@@ -8143,6 +9895,10 @@
           "shape":"SchemaStatusDetailList",
           "documentation":"<p>Details about the status of the schema. Currently, only one entry is present.</p>"
         },
+        "resourceArn":{
+          "shape":"SchemaResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the schema resource.</p>"
+        },
         "schemaTypeProperties":{
           "shape":"SchemaTypeProperties",
           "documentation":"<p>The schema type properties.</p>"
@@ -8194,6 +9950,12 @@
       "max":25,
       "min":0
     },
+    "SchemaResourceArn":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "pattern":"arn:aws:cleanrooms:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:membership\\/[\\d\\w-]+\\/(configuredtableassociation|idmappingtable)\\/[\\d\\w-]+"
+    },
     "SchemaStatus":{
       "type":"string",
       "enum":[
@@ -8320,7 +10082,15 @@
         },
         "analysisMethod":{
           "shape":"AnalysisMethod",
-          "documentation":"<p>The analysis method for the associated schema. The only valid value is currently `DIRECT_QUERY`.</p>"
+          "documentation":"<p>The analysis method for the associated schema.</p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
+        },
+        "resourceArn":{
+          "shape":"SchemaResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the schema summary resource.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The selected analysis methods for the schema.</p>"
         }
       },
       "documentation":"<p>The schema summary for the objects listed by the request.</p>"
@@ -8353,6 +10123,17 @@
       "min":0,
       "pattern":"arn:aws:secretsmanager:[a-z]{2}-[a-z]+-[0-9]:\\d{12}:secret:.*"
     },
+    "SelectedAnalysisMethod":{
+      "type":"string",
+      "enum":[
+        "DIRECT_QUERY",
+        "DIRECT_JOB"
+      ]
+    },
+    "SelectedAnalysisMethods":{
+      "type":"list",
+      "member":{"shape":"SelectedAnalysisMethod"}
+    },
     "ServiceQuotaExceededException":{
       "type":"structure",
       "required":[
@@ -8475,6 +10256,65 @@
       },
       "documentation":"<p> The Snowflake table schema.</p>"
     },
+    "SparkProperties":{
+      "type":"map",
+      "key":{"shape":"SparkPropertyKey"},
+      "value":{"shape":"SparkPropertyValue"},
+      "max":50,
+      "min":0
+    },
+    "SparkPropertyKey":{
+      "type":"string",
+      "max":200,
+      "min":1
+    },
+    "SparkPropertyValue":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "StartProtectedJobInput":{
+      "type":"structure",
+      "required":[
+        "type",
+        "membershipIdentifier",
+        "jobParameters"
+      ],
+      "members":{
+        "type":{
+          "shape":"ProtectedJobType",
+          "documentation":"<p> The type of protected job to start.</p>"
+        },
+        "membershipIdentifier":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p>A unique identifier for the membership to run this job against. Currently accepts a membership ID.</p>",
+          "location":"uri",
+          "locationName":"membershipIdentifier"
+        },
+        "jobParameters":{
+          "shape":"ProtectedJobParameters",
+          "documentation":"<p> The job parameters.</p>"
+        },
+        "resultConfiguration":{
+          "shape":"ProtectedJobResultConfigurationInput",
+          "documentation":"<p>The details needed to write the job results.</p>"
+        },
+        "computeConfiguration":{
+          "shape":"ProtectedJobComputeConfiguration",
+          "documentation":"<p>The compute configuration for the protected job.</p>"
+        }
+      }
+    },
+    "StartProtectedJobOutput":{
+      "type":"structure",
+      "required":["protectedJob"],
+      "members":{
+        "protectedJob":{
+          "shape":"ProtectedJob",
+          "documentation":"<p> The protected job.</p>"
+        }
+      }
+    },
     "StartProtectedQueryInput":{
       "type":"structure",
       "required":[
@@ -8518,6 +10358,44 @@
       }
     },
     "String":{"type":"string"},
+    "SupportedS3Region":{
+      "type":"string",
+      "enum":[
+        "us-west-1",
+        "us-west-2",
+        "us-east-1",
+        "us-east-2",
+        "af-south-1",
+        "ap-east-1",
+        "ap-east-2",
+        "ap-south-2",
+        "ap-southeast-1",
+        "ap-southeast-2",
+        "ap-southeast-3",
+        "ap-southeast-5",
+        "ap-southeast-4",
+        "ap-southeast-7",
+        "ap-south-1",
+        "ap-northeast-3",
+        "ap-northeast-1",
+        "ap-northeast-2",
+        "ca-central-1",
+        "ca-west-1",
+        "eu-south-1",
+        "eu-west-3",
+        "eu-south-2",
+        "eu-central-2",
+        "eu-central-1",
+        "eu-north-1",
+        "eu-west-1",
+        "eu-west-2",
+        "me-south-1",
+        "me-central-1",
+        "il-central-1",
+        "sa-east-1",
+        "mx-central-1"
+      ]
+    },
     "TableAlias":{
       "type":"string",
       "max":128,
@@ -8593,14 +10471,17 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0
     },
+    "TargetProtectedJobStatus":{
+      "type":"string",
+      "enum":["CANCELLED"]
+    },
     "TargetProtectedQueryStatus":{
       "type":"string",
       "enum":["CANCELLED"]
@@ -8647,8 +10528,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAnalysisTemplateInput":{
       "type":"structure",
@@ -8702,6 +10582,10 @@
         "description":{
           "shape":"CollaborationDescription",
           "documentation":"<p>A description of the collaboration.</p>"
+        },
+        "analyticsEngine":{
+          "shape":"AnalyticsEngine",
+          "documentation":"<p>The analytics engine.</p> <note> <p>After July 16, 2025, the <code>CLEAN_ROOMS_SQL</code> parameter will no longer be available. </p> </note>"
         }
       }
     },
@@ -8889,6 +10773,19 @@
         "description":{
           "shape":"TableDescription",
           "documentation":"<p>A new description for the configured table.</p>"
+        },
+        "tableReference":{"shape":"TableReference"},
+        "allowedColumns":{
+          "shape":"AllowedColumnList",
+          "documentation":"<p>The columns of the underlying table that can be used by collaborations or analysis rules.</p>"
+        },
+        "analysisMethod":{
+          "shape":"AnalysisMethod",
+          "documentation":"<p> The analysis method for the configured table.</p> <p> <code>DIRECT_QUERY</code> allows SQL queries to be run directly on this table.</p> <p> <code>DIRECT_JOB</code> allows PySpark jobs to be run directly on this table.</p> <p> <code>MULTIPLE</code> allows both SQL queries and PySpark jobs to be run directly on this table.</p>"
+        },
+        "selectedAnalysisMethods":{
+          "shape":"SelectedAnalysisMethods",
+          "documentation":"<p> The selected analysis methods for the table configuration update.</p>"
         }
       }
     },
@@ -8996,11 +10893,19 @@
         },
         "queryLogStatus":{
           "shape":"MembershipQueryLogStatus",
-          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p>"
+          "documentation":"<p>An indicator as to whether query logging has been enabled or disabled for the membership.</p> <p>When <code>ENABLED</code>, Clean Rooms logs details about queries run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
+        },
+        "jobLogStatus":{
+          "shape":"MembershipJobLogStatus",
+          "documentation":"<p>An indicator as to whether job logging has been enabled or disabled for the collaboration. </p> <p>When <code>ENABLED</code>, Clean Rooms logs details about jobs run within this collaboration and those logs can be viewed in Amazon CloudWatch Logs. The default value is <code>DISABLED</code>.</p>"
         },
         "defaultResultConfiguration":{
           "shape":"MembershipProtectedQueryResultConfiguration",
           "documentation":"<p>The default protected query result configuration as specified by the member who can receive results.</p>"
+        },
+        "defaultJobResultConfiguration":{
+          "shape":"MembershipProtectedJobResultConfiguration",
+          "documentation":"<p> The default job result configuration.</p>"
         }
       }
     },
@@ -9051,6 +10956,42 @@
         }
       }
     },
+    "UpdateProtectedJobInput":{
+      "type":"structure",
+      "required":[
+        "membershipIdentifier",
+        "protectedJobIdentifier",
+        "targetStatus"
+      ],
+      "members":{
+        "membershipIdentifier":{
+          "shape":"MembershipIdentifier",
+          "documentation":"<p>The identifier for a member of a protected job instance.</p>",
+          "location":"uri",
+          "locationName":"membershipIdentifier"
+        },
+        "protectedJobIdentifier":{
+          "shape":"ProtectedJobIdentifier",
+          "documentation":"<p> The identifier of the protected job to update.</p>",
+          "location":"uri",
+          "locationName":"protectedJobIdentifier"
+        },
+        "targetStatus":{
+          "shape":"TargetProtectedJobStatus",
+          "documentation":"<p>The target status of a protected job. Used to update the execution status of a currently running job.</p>"
+        }
+      }
+    },
+    "UpdateProtectedJobOutput":{
+      "type":"structure",
+      "required":["protectedJob"],
+      "members":{
+        "protectedJob":{
+          "shape":"ProtectedJob",
+          "documentation":"<p>The protected job output.</p>"
+        }
+      }
+    },
     "UpdateProtectedQueryInput":{
       "type":"structure",
       "required":[
@@ -9153,7 +11094,11 @@
         },
         "number":{
           "shape":"WorkerComputeConfigurationNumberInteger",
-          "documentation":"<p> The number of workers.</p>"
+          "documentation":"<p> The number of workers.</p> <p>SQL queries support a minimum value of 2 and a maximum value of 400. </p> <p>PySpark jobs support a minimum value of 4 and a maximum value of 128.</p>"
+        },
+        "properties":{
+          "shape":"WorkerComputeConfigurationProperties",
+          "documentation":"<p>The configuration properties for the worker compute environment. These properties allow you to customize the compute settings for your Clean Rooms workloads.</p>"
         }
       },
       "documentation":"<p> The configuration of the compute resources for workers running an analysis with the Clean Rooms SQL analytics engine.</p>"
@@ -9164,6 +11109,17 @@
       "max":400,
       "min":2
     },
+    "WorkerComputeConfigurationProperties":{
+      "type":"structure",
+      "members":{
+        "spark":{
+          "shape":"SparkProperties",
+          "documentation":"<p>The Spark configuration properties for SQL workloads. This map contains key-value pairs that configure Apache Spark settings to optimize performance for your data processing jobs. You can specify up to 50 Spark properties, with each key being 1-200 characters and each value being 0-500 characters. These properties allow you to adjust compute capacity for large datasets and complex workloads.</p>"
+        }
+      },
+      "documentation":"<p>The configuration properties that define the compute environment settings for workers in Clean Rooms. These properties enable customization of the underlying compute environment to optimize performance for your specific workloads.</p>",
+      "union":true
+    },
     "WorkerComputeType":{
       "type":"string",
       "enum":[
@@ -9172,5 +11128,5 @@
       ]
     }
   },
-  "documentation":"<p>Welcome to the <i>Clean Rooms API Reference</i>.</p> <p>Clean Rooms is an Amazon Web Services service that helps multiple parties to join their data together in a secure collaboration workspace. In the collaboration, members who can query and receive results can get insights into the collective datasets without either party getting access to the other party's raw data.</p> <p>To learn more about Clean Rooms concepts, procedures, and best practices, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/userguide/what-is.html\">Clean Rooms User Guide</a>.</p> <p>To learn more about SQL commands, functions, and conditions supported in Clean Rooms, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html\">Clean Rooms SQL Reference</a>.</p>"
+  "documentation":"<p>Welcome to the <i>Clean Rooms API Reference</i>.</p> <p>Clean Rooms is an Amazon Web Services service that helps multiple parties to join their data together in a secure collaboration workspace. In the collaboration, members who can run queries and jobs and receive results can get insights into the collective datasets without either party getting access to the other party's raw data.</p> <p>To learn more about Clean Rooms concepts, procedures, and best practices, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/userguide/what-is.html\">Clean Rooms User Guide</a>.</p> <p>To learn more about SQL commands, functions, and conditions supported in Clean Rooms, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html\">Clean Rooms SQL Reference</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/paginators-1.json 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -89,6 +89,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "trainedModels"
+    },
+    "ListTrainedModelVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "trainedModels"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/service-2.json 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/cleanroomsml/2023-09-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cleanroomsml/2023-09-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,7 +25,8 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Submits a request to cancel the trained model job.</p>",
       "idempotent":true
@@ -42,7 +43,8 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Submits a request to cancel a trained model inference job.</p>",
       "idempotent":true
@@ -117,6 +119,7 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Associates a configured model algorithm to a collaboration for use by any member of the collaboration.</p>",
@@ -136,6 +139,7 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Provides the information to create an ML input channel. An ML input channel is the result of a query that can be used for ML modeling.</p>",
@@ -155,6 +159,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Creates a trained model from an associated configured model algorithm using data from any member of the collaboration.</p>",
@@ -273,7 +279,8 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deletes a configured model algorithm association.</p>",
       "idempotent":true
@@ -289,7 +296,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deletes a ML modeling configuration.</p>",
       "idempotent":true
@@ -306,7 +314,8 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Provides the information necessary to delete an ML input channel.</p>",
       "idempotent":true
@@ -323,9 +332,10 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes the output of a trained model.</p>",
+      "documentation":"<p>Deletes the model artifacts stored by the service.</p>",
       "idempotent":true
     },
     "DeleteTrainingDataset":{
@@ -359,7 +369,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about an audience generation job.</p>"
+      "documentation":"<p>Returns information about an audience generation job.</p>",
+      "readonly":true
     },
     "GetAudienceModel":{
       "name":"GetAudienceModel",
@@ -375,7 +386,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about an audience model</p>"
+      "documentation":"<p>Returns information about an audience model</p>",
+      "readonly":true
     },
     "GetCollaborationConfiguredModelAlgorithmAssociation":{
       "name":"GetCollaborationConfiguredModelAlgorithmAssociation",
@@ -389,9 +401,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about the configured model algorithm association in a collaboration.</p>"
+      "documentation":"<p>Returns information about the configured model algorithm association in a collaboration.</p>",
+      "readonly":true
     },
     "GetCollaborationMLInputChannel":{
       "name":"GetCollaborationMLInputChannel",
@@ -405,9 +419,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a specific ML input channel in a collaboration.</p>"
+      "documentation":"<p>Returns information about a specific ML input channel in a collaboration.</p>",
+      "readonly":true
     },
     "GetCollaborationTrainedModel":{
       "name":"GetCollaborationTrainedModel",
@@ -421,9 +437,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a trained model in a collaboration.</p>"
+      "documentation":"<p>Returns information about a trained model in a collaboration.</p>",
+      "readonly":true
     },
     "GetConfiguredAudienceModel":{
       "name":"GetConfiguredAudienceModel",
@@ -439,7 +457,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a specified configured audience model.</p>"
+      "documentation":"<p>Returns information about a specified configured audience model.</p>",
+      "readonly":true
     },
     "GetConfiguredAudienceModelPolicy":{
       "name":"GetConfiguredAudienceModelPolicy",
@@ -455,7 +474,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a configured audience model policy.</p>"
+      "documentation":"<p>Returns information about a configured audience model policy.</p>",
+      "readonly":true
     },
     "GetConfiguredModelAlgorithm":{
       "name":"GetConfiguredModelAlgorithm",
@@ -471,7 +491,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a configured model algorithm.</p>"
+      "documentation":"<p>Returns information about a configured model algorithm.</p>",
+      "readonly":true
     },
     "GetConfiguredModelAlgorithmAssociation":{
       "name":"GetConfiguredModelAlgorithmAssociation",
@@ -485,9 +506,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a configured model algorithm association.</p>"
+      "documentation":"<p>Returns information about a configured model algorithm association.</p>",
+      "readonly":true
     },
     "GetMLConfiguration":{
       "name":"GetMLConfiguration",
@@ -501,9 +524,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a specific ML configuration.</p>"
+      "documentation":"<p>Returns information about a specific ML configuration.</p>",
+      "readonly":true
     },
     "GetMLInputChannel":{
       "name":"GetMLInputChannel",
@@ -517,9 +542,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about an ML input channel.</p>"
+      "documentation":"<p>Returns information about an ML input channel.</p>",
+      "readonly":true
     },
     "GetTrainedModel":{
       "name":"GetTrainedModel",
@@ -533,9 +560,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a trained model.</p>"
+      "documentation":"<p>Returns information about a trained model.</p>",
+      "readonly":true
     },
     "GetTrainedModelInferenceJob":{
       "name":"GetTrainedModelInferenceJob",
@@ -549,9 +578,11 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns information about a trained model inference job.</p>"
+      "documentation":"<p>Returns information about a trained model inference job.</p>",
+      "readonly":true
     },
     "GetTrainingDataset":{
       "name":"GetTrainingDataset",
@@ -567,7 +598,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a training dataset.</p>"
+      "documentation":"<p>Returns information about a training dataset.</p>",
+      "readonly":true
     },
     "ListAudienceExportJobs":{
       "name":"ListAudienceExportJobs",
@@ -582,7 +614,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of the audience export jobs.</p>"
+      "documentation":"<p>Returns a list of the audience export jobs.</p>",
+      "readonly":true
     },
     "ListAudienceGenerationJobs":{
       "name":"ListAudienceGenerationJobs",
@@ -597,7 +630,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of audience generation jobs.</p>"
+      "documentation":"<p>Returns a list of audience generation jobs.</p>",
+      "readonly":true
     },
     "ListAudienceModels":{
       "name":"ListAudienceModels",
@@ -612,7 +646,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of audience models.</p>"
+      "documentation":"<p>Returns a list of audience models.</p>",
+      "readonly":true
     },
     "ListCollaborationConfiguredModelAlgorithmAssociations":{
       "name":"ListCollaborationConfiguredModelAlgorithmAssociations",
@@ -625,9 +660,11 @@
       "output":{"shape":"ListCollaborationConfiguredModelAlgorithmAssociationsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of the configured model algorithm associations in a collaboration.</p>"
+      "documentation":"<p>Returns a list of the configured model algorithm associations in a collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationMLInputChannels":{
       "name":"ListCollaborationMLInputChannels",
@@ -640,9 +677,11 @@
       "output":{"shape":"ListCollaborationMLInputChannelsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of the ML input channels in a collaboration.</p>"
+      "documentation":"<p>Returns a list of the ML input channels in a collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationTrainedModelExportJobs":{
       "name":"ListCollaborationTrainedModelExportJobs",
@@ -655,9 +694,11 @@
       "output":{"shape":"ListCollaborationTrainedModelExportJobsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of the export jobs for a trained model in a collaboration.</p>"
+      "documentation":"<p>Returns a list of the export jobs for a trained model in a collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationTrainedModelInferenceJobs":{
       "name":"ListCollaborationTrainedModelInferenceJobs",
@@ -670,9 +711,11 @@
       "output":{"shape":"ListCollaborationTrainedModelInferenceJobsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of trained model inference jobs in a specified collaboration.</p>"
+      "documentation":"<p>Returns a list of trained model inference jobs in a specified collaboration.</p>",
+      "readonly":true
     },
     "ListCollaborationTrainedModels":{
       "name":"ListCollaborationTrainedModels",
@@ -685,9 +728,11 @@
       "output":{"shape":"ListCollaborationTrainedModelsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of the trained models in a collaboration.</p>"
+      "documentation":"<p>Returns a list of the trained models in a collaboration.</p>",
+      "readonly":true
     },
     "ListConfiguredAudienceModels":{
       "name":"ListConfiguredAudienceModels",
@@ -702,7 +747,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of the configured audience models.</p>"
+      "documentation":"<p>Returns a list of the configured audience models.</p>",
+      "readonly":true
     },
     "ListConfiguredModelAlgorithmAssociations":{
       "name":"ListConfiguredModelAlgorithmAssociations",
@@ -715,9 +761,11 @@
       "output":{"shape":"ListConfiguredModelAlgorithmAssociationsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of configured model algorithm associations.</p>"
+      "documentation":"<p>Returns a list of configured model algorithm associations.</p>",
+      "readonly":true
     },
     "ListConfiguredModelAlgorithms":{
       "name":"ListConfiguredModelAlgorithms",
@@ -732,7 +780,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of configured model algorithms.</p>"
+      "documentation":"<p>Returns a list of configured model algorithms.</p>",
+      "readonly":true
     },
     "ListMLInputChannels":{
       "name":"ListMLInputChannels",
@@ -745,9 +794,11 @@
       "output":{"shape":"ListMLInputChannelsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of ML input channels.</p>"
+      "documentation":"<p>Returns a list of ML input channels.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -763,7 +814,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of tags for a provided resource.</p>"
+      "documentation":"<p>Returns a list of tags for a provided resource.</p>",
+      "readonly":true
     },
     "ListTrainedModelInferenceJobs":{
       "name":"ListTrainedModelInferenceJobs",
@@ -776,9 +828,29 @@
       "output":{"shape":"ListTrainedModelInferenceJobsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of trained model inference jobs that match the request parameters.</p>"
+      "documentation":"<p>Returns a list of trained model inference jobs that match the request parameters.</p>",
+      "readonly":true
+    },
+    "ListTrainedModelVersions":{
+      "name":"ListTrainedModelVersions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/memberships/{membershipIdentifier}/trained-models/{trainedModelArn}/versions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTrainedModelVersionsRequest"},
+      "output":{"shape":"ListTrainedModelVersionsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of trained model versions for a specified trained model. This operation allows you to view all versions of a trained model, including information about their status and creation details. You can use this to track the evolution of your trained models and select specific versions for inference or further training.</p>",
+      "readonly":true
     },
     "ListTrainedModels":{
       "name":"ListTrainedModels",
@@ -791,9 +863,11 @@
       "output":{"shape":"ListTrainedModelsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of trained models.</p>"
+      "documentation":"<p>Returns a list of trained models.</p>",
+      "readonly":true
     },
     "ListTrainingDatasets":{
       "name":"ListTrainingDatasets",
@@ -808,7 +882,8 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of training datasets.</p>"
+      "documentation":"<p>Returns a list of training datasets.</p>",
+      "readonly":true
     },
     "PutConfiguredAudienceModelPolicy":{
       "name":"PutConfiguredAudienceModelPolicy",
@@ -837,7 +912,8 @@
       "input":{"shape":"PutMLConfigurationRequest"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Assigns information about an ML configuration.</p>",
       "idempotent":true
@@ -874,6 +950,7 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Information necessary to start the audience generation job.</p>",
@@ -891,7 +968,8 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Provides the information necessary to start a trained model export job.</p>",
       "idempotent":true
@@ -910,6 +988,7 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Defines the information necessary to begin a trained model inference job.</p>",
@@ -968,6 +1047,86 @@
     }
   },
   "shapes":{
+    "AccessBudget":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "details",
+        "aggregateRemainingBudget"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"BudgetedResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that this access budget applies to.</p>"
+        },
+        "details":{
+          "shape":"AccessBudgetDetailsList",
+          "documentation":"<p>A list of budget details for this resource. Contains active budget periods that apply to the resource.</p>"
+        },
+        "aggregateRemainingBudget":{
+          "shape":"Budget",
+          "documentation":"<p>The total remaining budget across all active budget periods for this resource.</p>"
+        }
+      },
+      "documentation":"<p>An access budget that defines consumption limits for a specific resource within defined time periods.</p>"
+    },
+    "AccessBudgetDetails":{
+      "type":"structure",
+      "required":[
+        "startTime",
+        "remainingBudget",
+        "budget",
+        "budgetType"
+      ],
+      "members":{
+        "startTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The start time of this budget period.</p>"
+        },
+        "endTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The end time of this budget period. If not specified, the budget period continues indefinitely.</p>"
+        },
+        "remainingBudget":{
+          "shape":"Budget",
+          "documentation":"<p>The amount of budget remaining in this period.</p>"
+        },
+        "budget":{
+          "shape":"Budget",
+          "documentation":"<p>The total budget amount allocated for this period.</p>"
+        },
+        "budgetType":{
+          "shape":"AccessBudgetType",
+          "documentation":"<p>The type of budget period. Calendar-based types reset automatically at regular intervals, while LIFETIME budgets never reset.</p>"
+        },
+        "autoRefresh":{
+          "shape":"AutoRefreshMode",
+          "documentation":"<p>Specifies whether this budget automatically refreshes when the current period ends.</p>"
+        }
+      },
+      "documentation":"<p>The detailed information for a specific budget period, including time boundaries and budget amounts.</p>"
+    },
+    "AccessBudgetDetailsList":{
+      "type":"list",
+      "member":{"shape":"AccessBudgetDetails"},
+      "max":2,
+      "min":1
+    },
+    "AccessBudgetType":{
+      "type":"string",
+      "enum":[
+        "CALENDAR_DAY",
+        "CALENDAR_MONTH",
+        "CALENDAR_WEEK",
+        "LIFETIME"
+      ]
+    },
+    "AccessBudgets":{
+      "type":"list",
+      "member":{"shape":"AccessBudget"},
+      "max":100,
+      "min":1
+    },
     "AccessDeniedException":{
       "type":"structure",
       "required":["message"],
@@ -1305,10 +1464,28 @@
       "max":20000000,
       "min":1
     },
+    "AutoRefreshMode":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "Boolean":{
       "type":"boolean",
       "box":true
     },
+    "Budget":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "BudgetedResourceArn":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "pattern":"arn:aws:[\\w]+:[\\w]{2}-[\\w]{4,9}-[\\d]:[\\d]{12}:membership/[\\d\\w-]+/configuredtableassociation/[\\d\\w-]+"
+    },
     "CancelTrainedModelInferenceJobRequest":{
       "type":"structure",
       "required":[
@@ -1348,6 +1525,12 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model job that you want to cancel.</p>",
           "location":"uri",
           "locationName":"trainedModelArn"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to cancel. This parameter allows you to specify which version of the trained model you want to cancel when multiple versions exist.</p> <p>If <code>versionIdentifier</code> is not specified, the base model will be cancelled.</p>",
+          "location":"querystring",
+          "locationName":"versionIdentifier"
         }
       }
     },
@@ -1522,6 +1705,10 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that is being exported.</p>"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model that was exported in this job.</p>"
+        },
         "membershipIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The membership ID of the member that created the trained model export job.</p>"
@@ -1568,6 +1755,10 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that is used for the trained model inference job.</p>"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model that was used for inference in this job.</p>"
+        },
         "collaborationIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The collaboration ID of the collaboration that contains the trained model inference job.</p>"
@@ -1653,6 +1844,14 @@
           "shape":"NameString",
           "documentation":"<p>The name of the trained model.</p>"
         },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of this trained model version.</p>"
+        },
+        "incrementalTrainingDataChannels":{
+          "shape":"IncrementalTrainingDataChannelsOutput",
+          "documentation":"<p>Information about the incremental training data channels used to create this version of the trained model.</p>"
+        },
         "description":{
           "shape":"ResourceDescription",
           "documentation":"<p>The description of the trained model.</p>"
@@ -1817,7 +2016,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:(membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/)?configured-model-algorithm-association/[-a-zA-Z0-9_/.]+"
+      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/configured-model-algorithm-association/[-a-zA-Z0-9_/.]+"
     },
     "ConfiguredModelAlgorithmAssociationList":{
       "type":"list",
@@ -1937,7 +2136,7 @@
       "members":{
         "imageUri":{
           "shape":"AlgorithmImage",
-          "documentation":"<p>The registry path of the docker image that contains the algorithm. Clean Rooms ML supports both <code>registry/repository[:tag]</code> and <code>registry/repositry[@digest]</code> image path formats. For more information about using images in Clean Rooms ML, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html#sagemaker-Type-AlgorithmSpecification-TrainingImage\">Sagemaker API reference</a>.</p>"
+          "documentation":"<p>The registry path of the docker image that contains the algorithm. Clean Rooms ML currently only supports the <code>registry/repository[:tag]</code> image path format. For more information about using images in Clean Rooms ML, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html#sagemaker-Type-AlgorithmSpecification-TrainingImage\">Sagemaker API reference</a>.</p>"
         },
         "entrypoint":{
           "shape":"ContainerEntrypoint",
@@ -2271,9 +2470,17 @@
           "shape":"StoppingCondition",
           "documentation":"<p>The criteria that is used to stop model training.</p>"
         },
+        "incrementalTrainingDataChannels":{
+          "shape":"IncrementalTrainingDataChannels",
+          "documentation":"<p>Specifies the incremental training data channels for the trained model. </p> <p>Incremental training allows you to create a new trained model with updates without retraining from scratch. You can specify up to one incremental training data channel that references a previously trained model and its version.</p> <p>Limit: Maximum of 20 channels total (including both <code>incrementalTrainingDataChannels</code> and <code>dataChannels</code>).</p>"
+        },
         "dataChannels":{
           "shape":"ModelTrainingDataChannels",
-          "documentation":"<p>Defines the data channels that are used as input for the trained model request.</p>"
+          "documentation":"<p>Defines the data channels that are used as input for the trained model request.</p> <p>Limit: Maximum of 20 channels total (including both <code>dataChannels</code> and <code>incrementalTrainingDataChannels</code>).</p>"
+        },
+        "trainingInputMode":{
+          "shape":"TrainingInputMode",
+          "documentation":"<p>The input mode for accessing the training data. This parameter determines how the training data is made available to the training algorithm. Valid values are:</p> <ul> <li> <p> <code>File</code> - The training data is downloaded to the training instance and made available as files.</p> </li> <li> <p> <code>FastFile</code> - The training data is streamed directly from Amazon S3 to the training algorithm, providing faster access for large datasets.</p> </li> <li> <p> <code>Pipe</code> - The training data is streamed to the training algorithm using named pipes, which can improve performance for certain algorithms.</p> </li> </ul>"
         },
         "description":{
           "shape":"ResourceDescription",
@@ -2296,6 +2503,10 @@
         "trainedModelArn":{
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model.</p>"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The unique version identifier assigned to the newly created trained model. This identifier can be used to reference this specific version of the trained model in subsequent operations such as inference jobs or incremental training.</p> <p>The initial version identifier for the base version of the trained model is \"NULL\".</p>"
         }
       }
     },
@@ -2345,6 +2556,29 @@
         }
       }
     },
+    "CustomDataIdentifier":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\_\\#\\=\\@/\\;\\,\\-\\ \\^\\$\\?\\[\\]\\{\\}\\|\\\\\\*\\+\\.\\(\\)]+"
+    },
+    "CustomDataIdentifierList":{
+      "type":"list",
+      "member":{"shape":"CustomDataIdentifier"},
+      "max":10,
+      "min":1
+    },
+    "CustomEntityConfig":{
+      "type":"structure",
+      "required":["customDataIdentifiers"],
+      "members":{
+        "customDataIdentifiers":{
+          "shape":"CustomDataIdentifierList",
+          "documentation":"<p>Defines data identifiers for the custom entity configuration. Provide this only if CUSTOM redaction is configured. </p>"
+        }
+      },
+      "documentation":"<p>The configuration for defining custom patterns to be redacted from logs and error messages. This is for the CUSTOM config under entitiesToRedact. Both CustomEntityConfig and entitiesToRedact need to be present or not present.</p>"
+    },
     "DataSource":{
       "type":"structure",
       "required":["glueDataSource"],
@@ -2538,6 +2772,12 @@
           "documentation":"<p>The membership ID of the member that is deleting the trained model output.</p>",
           "location":"uri",
           "locationName":"membershipIdentifier"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to delete. If not specified, the operation will delete the base version of the trained model. When specified, only the particular version will be deleted.</p>",
+          "location":"querystring",
+          "locationName":"versionIdentifier"
         }
       }
     },
@@ -2561,6 +2801,19 @@
       },
       "documentation":"<p>The Amazon S3 location where the exported model artifacts are stored.</p>"
     },
+    "EntityType":{
+      "type":"string",
+      "enum":[
+        "ALL_PERSONALLY_IDENTIFIABLE_INFORMATION",
+        "NUMBERS",
+        "CUSTOM"
+      ]
+    },
+    "EntityTypeList":{
+      "type":"list",
+      "member":{"shape":"EntityType"},
+      "min":1
+    },
     "Environment":{
       "type":"map",
       "key":{"shape":"EnvironmentKeyString"},
@@ -2835,30 +3088,18 @@
     "GetCollaborationMLInputChannelResponse":{
       "type":"structure",
       "required":[
-        "createTime",
-        "updateTime",
-        "creatorAccountId",
         "membershipIdentifier",
         "collaborationIdentifier",
         "mlInputChannelArn",
         "name",
         "configuredModelAlgorithmAssociations",
         "status",
-        "retentionInDays"
+        "retentionInDays",
+        "createTime",
+        "updateTime",
+        "creatorAccountId"
       ],
       "members":{
-        "createTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the ML input channel was created.</p>"
-        },
-        "updateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The most recent time at which the ML input channel was updated.</p>"
-        },
-        "creatorAccountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The account ID of the member who created the ML input channel.</p>"
-        },
         "membershipIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The membership ID of the membership that contains the ML input channel.</p>"
@@ -2892,9 +3133,25 @@
           "shape":"GetCollaborationMLInputChannelResponseNumberOfRecordsLong",
           "documentation":"<p>The number of records in the ML input channel.</p>"
         },
+        "privacyBudgets":{
+          "shape":"PrivacyBudgets",
+          "documentation":"<p>Returns the privacy budgets that control access to this Clean Rooms ML input channel. Use these budgets to monitor and limit resource consumption over specified time periods.</p>"
+        },
         "description":{
           "shape":"ResourceDescription",
           "documentation":"<p>The description of the ML input channel.</p>"
+        },
+        "createTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the ML input channel was created.</p>"
+        },
+        "updateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The most recent time at which the ML input channel was updated.</p>"
+        },
+        "creatorAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the member who created the ML input channel.</p>"
         }
       }
     },
@@ -2934,6 +3191,12 @@
           "documentation":"<p>The collaboration ID that contains the trained model that you want to return information about.</p>",
           "location":"uri",
           "locationName":"collaborationIdentifier"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to retrieve. If not specified, the operation returns information about the latest version of the trained model.</p>",
+          "location":"querystring",
+          "locationName":"versionIdentifier"
         }
       }
     },
@@ -2963,6 +3226,14 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model.</p>"
         },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model. This unique identifier distinguishes this version from other versions of the same trained model.</p>"
+        },
+        "incrementalTrainingDataChannels":{
+          "shape":"IncrementalTrainingDataChannelsOutput",
+          "documentation":"<p>Information about the incremental training data channels used to create this version of the trained model. This includes details about the base model that was used for incremental training and the channel configuration.</p>"
+        },
         "name":{
           "shape":"NameString",
           "documentation":"<p>The name of the trained model.</p>"
@@ -2984,6 +3255,10 @@
           "shape":"ResourceConfig",
           "documentation":"<p>The EC2 resource configuration that was used to train this model.</p>"
         },
+        "trainingInputMode":{
+          "shape":"TrainingInputMode",
+          "documentation":"<p>The input mode that was used for accessing the training data when this trained model was created. This indicates how the training data was made available to the training algorithm.</p>"
+        },
         "stoppingCondition":{
           "shape":"StoppingCondition",
           "documentation":"<p>The stopping condition that determined when model training ended.</p>"
@@ -3337,26 +3612,18 @@
     "GetMLInputChannelResponse":{
       "type":"structure",
       "required":[
-        "createTime",
-        "updateTime",
         "membershipIdentifier",
         "collaborationIdentifier",
-        "inputChannel",
         "mlInputChannelArn",
         "name",
         "configuredModelAlgorithmAssociations",
         "status",
-        "retentionInDays"
+        "retentionInDays",
+        "createTime",
+        "updateTime",
+        "inputChannel"
       ],
       "members":{
-        "createTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the ML input channel was created.</p>"
-        },
-        "updateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The most recent time at which the ML input channel was updated.</p>"
-        },
         "membershipIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The membership ID of the membership that contains the ML input channel.</p>"
@@ -3365,14 +3632,6 @@
           "shape":"UUID",
           "documentation":"<p>The collaboration ID of the collaboration that contains the ML input channel.</p>"
         },
-        "inputChannel":{
-          "shape":"InputChannel",
-          "documentation":"<p>The input channel that was used to create the ML input channel.</p>"
-        },
-        "protectedQueryIdentifier":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the protected query that was used to create the ML input channel.</p>"
-        },
         "mlInputChannelArn":{
           "shape":"MLInputChannelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the ML input channel.</p>"
@@ -3398,6 +3657,30 @@
           "shape":"GetMLInputChannelResponseNumberOfRecordsLong",
           "documentation":"<p>The number of records in the ML input channel.</p>"
         },
+        "privacyBudgets":{
+          "shape":"PrivacyBudgets",
+          "documentation":"<p>Returns the privacy budgets that control access to this Clean Rooms ML input channel. Use these budgets to monitor and limit resource consumption over specified time periods.</p>"
+        },
+        "description":{
+          "shape":"ResourceDescription",
+          "documentation":"<p>The description of the ML input channel.</p>"
+        },
+        "createTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the ML input channel was created.</p>"
+        },
+        "updateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The most recent time at which the ML input channel was updated.</p>"
+        },
+        "inputChannel":{
+          "shape":"InputChannel",
+          "documentation":"<p>The input channel that was used to create the ML input channel.</p>"
+        },
+        "protectedQueryIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The ID of the protected query that was used to create the ML input channel.</p>"
+        },
         "numberOfFiles":{
           "shape":"GetMLInputChannelResponseNumberOfFilesDouble",
           "documentation":"<p>The number of files in the ML input channel.</p>"
@@ -3406,10 +3689,6 @@
           "shape":"GetMLInputChannelResponseSizeInGbDouble",
           "documentation":"<p>The size, in GB, of the ML input channel.</p>"
         },
-        "description":{
-          "shape":"ResourceDescription",
-          "documentation":"<p>The description of the ML input channel.</p>"
-        },
         "kmsKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that was used to create the ML input channel.</p>"
@@ -3514,6 +3793,10 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) for the trained model that was used for the trained model inference job.</p>"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model used for this inference job. This identifies the specific version of the trained model that was used to generate the inference results.</p>"
+        },
         "resourceConfig":{
           "shape":"InferenceResourceConfig",
           "documentation":"<p>The resource configuration information for the trained model inference job.</p>"
@@ -3591,6 +3874,12 @@
           "documentation":"<p>The membership ID of the member that created the trained model that you are interested in.</p>",
           "location":"uri",
           "locationName":"membershipIdentifier"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to retrieve. If not specified, the operation returns information about the latest version of the trained model.</p>",
+          "location":"querystring",
+          "locationName":"versionIdentifier"
         }
       }
     },
@@ -3620,6 +3909,14 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model.</p>"
         },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model. This unique identifier distinguishes this version from other versions of the same trained model.</p>"
+        },
+        "incrementalTrainingDataChannels":{
+          "shape":"IncrementalTrainingDataChannelsOutput",
+          "documentation":"<p>Information about the incremental training data channels used to create this version of the trained model. This includes details about the base model that was used for incremental training and the channel configuration.</p>"
+        },
         "name":{
           "shape":"NameString",
           "documentation":"<p>The name of the trained model.</p>"
@@ -3641,6 +3938,10 @@
           "shape":"ResourceConfig",
           "documentation":"<p>The EC2 resource configuration that was used to create the trained model.</p>"
         },
+        "trainingInputMode":{
+          "shape":"TrainingInputMode",
+          "documentation":"<p>The input mode that was used for accessing the training data when this trained model was created. This indicates how the training data was made available to the training algorithm.</p>"
+        },
         "stoppingCondition":{
           "shape":"StoppingCondition",
           "documentation":"<p>The stopping condition that was used to terminate model training.</p>"
@@ -3822,13 +4123,69 @@
       "min":20,
       "pattern":"arn:aws[-a-z]*:iam::[0-9]{12}:role/.+"
     },
+    "IncrementalTrainingDataChannel":{
+      "type":"structure",
+      "required":[
+        "trainedModelArn",
+        "channelName"
+      ],
+      "members":{
+        "trainedModelArn":{
+          "shape":"TrainedModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the base trained model to use for incremental training. This model serves as the starting point for the incremental training process.</p>"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the base trained model to use for incremental training. If not specified, the latest version of the trained model is used.</p>"
+        },
+        "channelName":{
+          "shape":"ModelTrainingDataChannelName",
+          "documentation":"<p>The name of the incremental training data channel. This name is used to identify the channel during the training process and must be unique within the training job.</p>"
+        }
+      },
+      "documentation":"<p>Defines an incremental training data channel that references a previously trained model. Incremental training allows you to update an existing trained model with new data, building upon the knowledge from a base model rather than training from scratch. This can significantly reduce training time and computational costs while improving model performance with additional data.</p>"
+    },
+    "IncrementalTrainingDataChannelOutput":{
+      "type":"structure",
+      "required":[
+        "channelName",
+        "modelName"
+      ],
+      "members":{
+        "channelName":{
+          "shape":"ModelTrainingDataChannelName",
+          "documentation":"<p>The name of the incremental training data channel that was used.</p>"
+        },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model that was used for incremental training.</p>"
+        },
+        "modelName":{
+          "shape":"NameString",
+          "documentation":"<p>The name of the base trained model that was used for incremental training.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an incremental training data channel that was used to create a trained model. This structure provides details about the base model and channel configuration used during incremental training.</p>"
+    },
+    "IncrementalTrainingDataChannels":{
+      "type":"list",
+      "member":{"shape":"IncrementalTrainingDataChannel"},
+      "max":1,
+      "min":1
+    },
+    "IncrementalTrainingDataChannelsOutput":{
+      "type":"list",
+      "member":{"shape":"IncrementalTrainingDataChannelOutput"},
+      "max":1,
+      "min":1
+    },
     "InferenceContainerConfig":{
       "type":"structure",
       "required":["imageUri"],
       "members":{
         "imageUri":{
           "shape":"AlgorithmImage",
-          "documentation":"<p>The registry path of the docker image that contains the inference algorithm. Clean Rooms ML supports both <code>registry/repository[:tag]</code> and <code>registry/repositry[@digest]</code> image path formats. For more information about using images in Clean Rooms ML, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html#sagemaker-Type-AlgorithmSpecification-TrainingImage\">Sagemaker API reference</a>.</p>"
+          "documentation":"<p>The registry path of the docker image that contains the inference algorithm. Clean Rooms ML currently only supports the <code>registry/repository[:tag]</code> image path format. For more information about using images in Clean Rooms ML, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html#sagemaker-Type-AlgorithmSpecification-TrainingImage\">Sagemaker API reference</a>.</p>"
         }
       },
       "documentation":"<p>Provides configuration information for the inference container.</p>"
@@ -3889,7 +4246,6 @@
         "ml.r6i.large",
         "ml.g5.2xlarge",
         "ml.m5.large",
-        "ml.p3.16xlarge",
         "ml.m7i.48xlarge",
         "ml.m6i.16xlarge",
         "ml.p2.16xlarge",
@@ -3937,7 +4293,6 @@
         "ml.m6i.2xlarge",
         "ml.g5.16xlarge",
         "ml.m7i.4xlarge",
-        "ml.p3.2xlarge",
         "ml.r6i.32xlarge",
         "ml.m6i.4xlarge",
         "ml.m5.xlarge",
@@ -3963,8 +4318,10 @@
         "ml.p2.8xlarge",
         "ml.r6i.4xlarge",
         "ml.m6i.32xlarge",
-        "ml.p3.8xlarge",
-        "ml.m4.4xlarge"
+        "ml.m4.4xlarge",
+        "ml.p3.16xlarge",
+        "ml.p3.2xlarge",
+        "ml.p3.8xlarge"
       ]
     },
     "InferenceOutputConfiguration":{
@@ -4039,7 +4396,7 @@
         },
         "roleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The ARN of the IAM role that Clean Rooms ML can assume to read the data referred to in the <code>dataSource</code> field the input channel.</p> <p>Passing a role across AWS accounts is not allowed. If you pass a role that isn't in your account, you get an <code>AccessDeniedException</code> error.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the role used to run the query specified in the <code>dataSource</code> field of the input channel.</p> <p>Passing a role across AWS accounts is not allowed. If you pass a role that isn't in your account, you get an <code>AccessDeniedException</code> error.</p>"
         }
       },
       "documentation":"<p>Provides information about the data source that is used to create an ML input channel.</p>"
@@ -4079,10 +4436,6 @@
         "ml.p2.xlarge",
         "ml.p2.8xlarge",
         "ml.p2.16xlarge",
-        "ml.p3.2xlarge",
-        "ml.p3.8xlarge",
-        "ml.p3.16xlarge",
-        "ml.p3dn.24xlarge",
         "ml.p4d.24xlarge",
         "ml.p4de.24xlarge",
         "ml.p5.48xlarge",
@@ -4143,9 +4496,68 @@
         "ml.r5.8xlarge",
         "ml.r5.12xlarge",
         "ml.r5.16xlarge",
-        "ml.r5.24xlarge"
+        "ml.r5.24xlarge",
+        "ml.c7i.large",
+        "ml.c7i.xlarge",
+        "ml.c7i.2xlarge",
+        "ml.c7i.4xlarge",
+        "ml.c7i.8xlarge",
+        "ml.c7i.12xlarge",
+        "ml.c7i.16xlarge",
+        "ml.c7i.24xlarge",
+        "ml.c7i.48xlarge",
+        "ml.m7i.large",
+        "ml.m7i.xlarge",
+        "ml.m7i.2xlarge",
+        "ml.m7i.4xlarge",
+        "ml.m7i.8xlarge",
+        "ml.m7i.12xlarge",
+        "ml.m7i.16xlarge",
+        "ml.m7i.24xlarge",
+        "ml.m7i.48xlarge",
+        "ml.r7i.large",
+        "ml.r7i.xlarge",
+        "ml.r7i.2xlarge",
+        "ml.r7i.4xlarge",
+        "ml.r7i.8xlarge",
+        "ml.r7i.12xlarge",
+        "ml.r7i.16xlarge",
+        "ml.r7i.24xlarge",
+        "ml.r7i.48xlarge",
+        "ml.g6.xlarge",
+        "ml.g6.2xlarge",
+        "ml.g6.4xlarge",
+        "ml.g6.8xlarge",
+        "ml.g6.12xlarge",
+        "ml.g6.16xlarge",
+        "ml.g6.24xlarge",
+        "ml.g6.48xlarge",
+        "ml.g6e.xlarge",
+        "ml.g6e.2xlarge",
+        "ml.g6e.4xlarge",
+        "ml.g6e.8xlarge",
+        "ml.g6e.12xlarge",
+        "ml.g6e.16xlarge",
+        "ml.g6e.24xlarge",
+        "ml.g6e.48xlarge",
+        "ml.p5en.48xlarge",
+        "ml.p3.2xlarge",
+        "ml.p3.8xlarge",
+        "ml.p3.16xlarge",
+        "ml.p3dn.24xlarge"
       ]
     },
+    "InternalServiceException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>An internal service error occurred. Retry your request. If the problem persists, contact AWS Support.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
     "KmsKeyArn":{
       "type":"string",
       "max":2048,
@@ -4369,6 +4781,12 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that was used to create the export jobs that you are interested in.</p>",
           "location":"uri",
           "locationName":"trainedModelArn"
+        },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to filter export jobs by. When specified, only export jobs for this specific version of the trained model are returned.</p>",
+          "location":"querystring",
+          "locationName":"trainedModelVersionIdentifier"
         }
       }
     },
@@ -4413,6 +4831,12 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that was used to create the trained model inference jobs that you are interested in.</p>",
           "location":"querystring",
           "locationName":"trainedModelArn"
+        },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to filter inference jobs by. When specified, only inference jobs that used this specific version of the trained model are returned.</p>",
+          "location":"querystring",
+          "locationName":"trainedModelVersionIdentifier"
         }
       }
     },
@@ -4655,6 +5079,12 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of a trained model that was used to create the trained model inference jobs that you are interested in.</p>",
           "location":"querystring",
           "locationName":"trainedModelArn"
+        },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to filter inference jobs by. When specified, only inference jobs that used this specific version of the trained model are returned.</p>",
+          "location":"querystring",
+          "locationName":"trainedModelVersionIdentifier"
         }
       }
     },
@@ -4672,6 +5102,59 @@
         }
       }
     },
+    "ListTrainedModelVersionsRequest":{
+      "type":"structure",
+      "required":[
+        "membershipIdentifier",
+        "trainedModelArn"
+      ],
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous <code>ListTrainedModelVersions</code> request. Use this token to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of trained model versions to return in a single page. The default value is 10, and the maximum value is 100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "membershipIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The membership identifier for the collaboration that contains the trained model.</p>",
+          "location":"uri",
+          "locationName":"membershipIdentifier"
+        },
+        "trainedModelArn":{
+          "shape":"TrainedModelArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the trained model for which to list versions.</p>",
+          "location":"uri",
+          "locationName":"trainedModelArn"
+        },
+        "status":{
+          "shape":"TrainedModelStatus",
+          "documentation":"<p>Filter the results to only include trained model versions with the specified status. Valid values include <code>CREATE_PENDING</code>, <code>CREATE_IN_PROGRESS</code>, <code>ACTIVE</code>, <code>CREATE_FAILED</code>, and others.</p>",
+          "location":"querystring",
+          "locationName":"status"
+        }
+      }
+    },
+    "ListTrainedModelVersionsResponse":{
+      "type":"structure",
+      "required":["trainedModels"],
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use in a subsequent <code>ListTrainedModelVersions</code> request to retrieve the next page of results. This value is null when there are no more results to return.</p>"
+        },
+        "trainedModels":{
+          "shape":"TrainedModelList",
+          "documentation":"<p>A list of trained model versions that match the specified criteria. Each entry contains summary information about a trained model version, including its version identifier, status, and creation details.</p>"
+        }
+      }
+    },
     "ListTrainedModelsRequest":{
       "type":"structure",
       "required":["membershipIdentifier"],
@@ -4741,6 +5224,28 @@
         }
       }
     },
+    "LogRedactionConfiguration":{
+      "type":"structure",
+      "required":["entitiesToRedact"],
+      "members":{
+        "entitiesToRedact":{
+          "shape":"EntityTypeList",
+          "documentation":"<p>Specifies the entities to be redacted from logs. Entities to redact are \"ALL_PERSONALLY_IDENTIFIABLE_INFORMATION\", \"NUMBERS\",\"CUSTOM\". If CUSTOM is supplied or configured, custom patterns (customDataIdentifiers) should be provided, and the patterns will be redacted in logs or error messages.</p>"
+        },
+        "customEntityConfig":{
+          "shape":"CustomEntityConfig",
+          "documentation":"<p>Specifies the configuration for custom entities in the context of log redaction.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for log redaction.</p>"
+    },
+    "LogType":{
+      "type":"string",
+      "enum":[
+        "ALL",
+        "ERROR_SUMMARY"
+      ]
+    },
     "LogsConfigurationPolicy":{
       "type":"structure",
       "required":["allowedAccountIds"],
@@ -4752,6 +5257,14 @@
         "filterPattern":{
           "shape":"LogsConfigurationPolicyFilterPatternString",
           "documentation":"<p>A regular expression pattern that is used to parse the logs and return information that matches the pattern.</p>"
+        },
+        "logType":{
+          "shape":"LogType",
+          "documentation":"<p>Specifies the type of log this policy applies to. The currently supported policies are ALL or ERROR_SUMMARY.</p>"
+        },
+        "logRedactionConfiguration":{
+          "shape":"LogRedactionConfiguration",
+          "documentation":"<p>Specifies the log redaction configuration for this policy.</p>"
         }
       },
       "documentation":"<p>Provides the information necessary for a user to access the logs.</p>"
@@ -4971,6 +5484,10 @@
         "channelName":{
           "shape":"ModelTrainingDataChannelName",
           "documentation":"<p>The name of the training data channel.</p>"
+        },
+        "s3DataDistributionType":{
+          "shape":"S3DataDistributionType",
+          "documentation":"<p>Specifies how the training data stored in Amazon S3 should be distributed to training instances. This parameter controls the data distribution strategy for the training job:</p> <ul> <li> <p> <code>FullyReplicated</code> - The entire dataset is replicated on each training instance. This is suitable for smaller datasets and algorithms that require access to the complete dataset.</p> </li> <li> <p> <code>ShardedByS3Key</code> - The dataset is distributed across training instances based on Amazon S3 key names. This is suitable for larger datasets and distributed training scenarios where each instance processes a subset of the data.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Information about the model training data channel. A training data channel is a named data source that the training algorithms can consume. </p>"
@@ -5030,6 +5547,17 @@
         "POLICY_MUST_NOT_EXIST"
       ]
     },
+    "PrivacyBudgets":{
+      "type":"structure",
+      "members":{
+        "accessBudgets":{
+          "shape":"AccessBudgets",
+          "documentation":"<p>A list of access budgets that apply to resources associated with this Clean Rooms ML input channel.</p>"
+        }
+      },
+      "documentation":"<p>The privacy budget information that controls access to Clean Rooms ML input channels.</p>",
+      "union":true
+    },
     "PrivacyConfiguration":{
       "type":"structure",
       "required":["policies"],
@@ -5067,6 +5595,10 @@
         "computeConfiguration":{
           "shape":"ComputeConfiguration",
           "documentation":"<p>Provides configuration information for the workers that will perform the protected query.</p>"
+        },
+        "resultFormat":{
+          "shape":"ResultFormat",
+          "documentation":"<p>The format in which the query results should be returned. If not specified, defaults to <code>CSV</code>. </p>"
         }
       },
       "documentation":"<p>Provides information necessary to perform the protected query.</p>"
@@ -5205,7 +5737,7 @@
     "ResourceConfigInstanceCountInteger":{
       "type":"integer",
       "box":true,
-      "max":1,
+      "max":5,
       "min":1
     },
     "ResourceConfigVolumeSizeInGBInteger":{
@@ -5238,6 +5770,14 @@
       "max":20480,
       "min":1
     },
+    "ResultFormat":{
+      "type":"string",
+      "documentation":"<p>File format of the returned data.</p>",
+      "enum":[
+        "CSV",
+        "PARQUET"
+      ]
+    },
     "S3ConfigMap":{
       "type":"structure",
       "required":["s3Uri"],
@@ -5249,6 +5789,13 @@
       },
       "documentation":"<p>Provides information about an Amazon S3 bucket and path.</p>"
     },
+    "S3DataDistributionType":{
+      "type":"string",
+      "enum":[
+        "FullyReplicated",
+        "ShardedByS3Key"
+      ]
+    },
     "S3Path":{
       "type":"string",
       "max":1285,
@@ -5259,7 +5806,15 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"}
+        "message":{"shape":"String"},
+        "quotaName":{
+          "shape":"String",
+          "documentation":"<p>The name of the service quota limit that was exceeded</p>"
+        },
+        "quotaValue":{
+          "shape":"ServiceQuotaExceededExceptionQuotaValueDouble",
+          "documentation":"<p>The current limit on the service quota that was exceeded</p>"
+        }
       },
       "documentation":"<p>You have exceeded your service quota.</p>",
       "error":{
@@ -5268,6 +5823,12 @@
       },
       "exception":true
     },
+    "ServiceQuotaExceededExceptionQuotaValueDouble":{
+      "type":"double",
+      "box":true,
+      "max":100000,
+      "min":0
+    },
     "SharedAudienceMetrics":{
       "type":"string",
       "enum":[
@@ -5365,6 +5926,10 @@
           "location":"uri",
           "locationName":"trainedModelArn"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to export. This specifies which version of the trained model should be exported to the specified destination.</p>"
+        },
         "membershipIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The membership ID of the member that is receiving the exported trained model artifacts.</p>",
@@ -5406,6 +5971,10 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that is used for this trained model inference job.</p>"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model to use for inference. This specifies which version of the trained model should be used to generate predictions on the input data.</p>"
+        },
         "configuredModelAlgorithmAssociationArn":{
           "shape":"ConfiguredModelAlgorithmAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the configured model algorithm association that is used for this trained model inference job.</p>"
@@ -5535,8 +6104,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5547,13 +6115,54 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:(membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/(configured-model-algorithm-association|trained-model|trained-model-inference-job|ml-input-channel)|training-dataset|audience-model|configured-audience-model|audience-generation-job|configured-model-algorithm|configured-model-algorithm-association|trained-model|trained-model-inference-job)/[-a-zA-Z0-9_/.]+"
+      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:((membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/(configured-model-algorithm-association|trained-model|trained-model-inference-job|ml-input-channel))|training-dataset|audience-model|configured-audience-model|audience-generation-job|configured-model-algorithm)/[-a-zA-Z0-9_/.]+"
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
     },
     "TrainedModelArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:(membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/)?trained-model/[-a-zA-Z0-9_/.]+"
+      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/trained-model/[-a-zA-Z0-9_/.]+"
+    },
+    "TrainedModelArtifactMaxSize":{
+      "type":"structure",
+      "required":[
+        "unit",
+        "value"
+      ],
+      "members":{
+        "unit":{
+          "shape":"TrainedModelArtifactMaxSizeUnitType",
+          "documentation":"<p>The unit of measurement for the maximum artifact size. Valid values include common storage units such as bytes, kilobytes, megabytes, gigabytes, and terabytes.</p>"
+        },
+        "value":{
+          "shape":"TrainedModelArtifactMaxSizeValue",
+          "documentation":"<p>The numerical value for the maximum artifact size limit. This value is interpreted according to the specified unit.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the maximum size limit for trained model artifacts. This configuration helps control storage costs and ensures that trained models don't exceed specified size constraints. The size limit applies to the total size of all artifacts produced by the training job.</p>"
+    },
+    "TrainedModelArtifactMaxSizeUnitType":{
+      "type":"string",
+      "enum":["GB"]
+    },
+    "TrainedModelArtifactMaxSizeValue":{
+      "type":"double",
+      "box":true,
+      "max":10.0,
+      "min":0.01
     },
     "TrainedModelExportFileType":{
       "type":"string",
@@ -5655,7 +6264,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:(membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/)?trained-model-inference-job/[-a-zA-Z0-9_/.]+"
+      "pattern":"arn:aws[-a-z]*:cleanrooms-ml:[-a-z0-9]+:[0-9]{12}:membership/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/trained-model-inference-job/[-a-zA-Z0-9_/.]+"
     },
     "TrainedModelInferenceJobList":{
       "type":"list",
@@ -5704,6 +6313,10 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model that is used for the trained model inference job.</p>"
         },
+        "trainedModelVersionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of the trained model that was used for inference in this job.</p>"
+        },
         "collaborationIdentifier":{
           "shape":"UUID",
           "documentation":"<p>The collaboration ID of the collaboration that contains the trained model inference job.</p>"
@@ -5790,7 +6403,7 @@
     "TrainedModelInferenceMaxOutputSizeValue":{
       "type":"double",
       "box":true,
-      "max":10.0,
+      "max":50.0,
       "min":0.01
     },
     "TrainedModelList":{
@@ -5838,6 +6451,14 @@
           "shape":"TrainedModelArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the trained model.</p>"
         },
+        "versionIdentifier":{
+          "shape":"UUID",
+          "documentation":"<p>The version identifier of this trained model version.</p>"
+        },
+        "incrementalTrainingDataChannels":{
+          "shape":"IncrementalTrainingDataChannelsOutput",
+          "documentation":"<p>Information about the incremental training data channels used to create this version of the trained model.</p>"
+        },
         "name":{
           "shape":"NameString",
           "documentation":"<p>The name of the trained model.</p>"
@@ -5875,6 +6496,10 @@
         "containerMetrics":{
           "shape":"MetricsConfigurationPolicy",
           "documentation":"<p>The container for the metrics of the trained model.</p>"
+        },
+        "maxArtifactSize":{
+          "shape":"TrainedModelArtifactMaxSize",
+          "documentation":"<p>The maximum size limit for trained model artifacts as defined in the configuration policy. This setting helps enforce consistent size limits across trained models in the collaboration.</p>"
         }
       },
       "documentation":"<p>The configuration policy for the trained models.</p>"
@@ -5930,6 +6555,14 @@
       },
       "documentation":"<p>Provides information about the training dataset.</p>"
     },
+    "TrainingInputMode":{
+      "type":"string",
+      "enum":[
+        "File",
+        "FastFile",
+        "Pipe"
+      ]
+    },
     "UUID":{
       "type":"string",
       "max":36,
@@ -5959,8 +6592,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConfiguredAudienceModelRequest":{
       "type":"structure",
@@ -6049,5 +6681,5 @@
       ]
     }
   },
-  "documentation":"<p>Welcome to the <i>Amazon Web Services Clean Rooms ML API Reference</i>.</p> <p>Amazon Web Services Clean Rooms ML provides a privacy-enhancing method for two parties to identify similar users in their data without the need to share their data with each other. The first party brings the training data to Clean Rooms so that they can create and configure an audience model (lookalike model) and associate it with a collaboration. The second party then brings their seed data to Clean Rooms and generates an audience (lookalike segment) that resembles the training data.</p> <p>To learn more about Amazon Web Services Clean Rooms ML concepts, procedures, and best practices, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/userguide/machine-learning.html\">Clean Rooms User Guide</a>.</p> <p>To learn more about SQL commands, functions, and conditions supported in Clean Rooms, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html\">Clean Rooms SQL Reference</a>.</p>"
+  "documentation":"<p>Welcome to the <i>Amazon Web Services Clean Rooms ML API Reference</i>.</p> <p>Amazon Web Services Clean Rooms ML provides a privacy-enhancing method for two parties to identify similar users in their data without the need to share their data with each other. The first party brings the training data to Clean Rooms so that they can create and configure an audience model (lookalike model) and associate it with a collaboration. The second party then brings their seed data to Clean Rooms and generates an audience (lookalike segment) that resembles the training data.</p> <p>To learn more about Amazon Web Services Clean Rooms ML concepts, procedures, and best practices, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/userguide/machine-learning.html\">Clean Rooms User Guide</a>.</p> <p>To learn more about SQL commands, functions, and conditions supported in Clean Rooms, see the <a href=\"https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html\">Clean Rooms SQL Reference</a>.</p> <p/>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloud9/2017-09-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cloud9/2017-09-23/service-2.json 2.31.35-1/awscli/botocore/data/cloud9/2017-09-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloud9/2017-09-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloud9/2017-09-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -267,8 +267,7 @@
     },
     "BadRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The target request is invalid.</p>",
       "exception":true
     },
@@ -284,15 +283,13 @@
     },
     "ConcurrentAccessException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A concurrent access issue occurred.</p>",
       "exception":true
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A conflict occurred.</p>",
       "exception":true
     },
@@ -417,8 +414,7 @@
     },
     "DeleteEnvironmentMembershipResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEnvironmentRequest":{
       "type":"structure",
@@ -432,8 +428,7 @@
     },
     "DeleteEnvironmentResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEnvironmentMembershipsRequest":{
       "type":"structure",
@@ -677,8 +672,7 @@
     },
     "ForbiddenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An access permissions issue occurred.</p>",
       "exception":true
     },
@@ -694,16 +688,14 @@
     },
     "InternalServerErrorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An internal server error occurred.</p>",
       "exception":true,
       "fault":true
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A service limit was exceeded.</p>",
       "exception":true
     },
@@ -790,8 +782,7 @@
     },
     "NotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The target resource cannot be found.</p>",
       "exception":true
     },
@@ -873,8 +864,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -885,8 +875,7 @@
     "Timestamp":{"type":"timestamp"},
     "TooManyRequestsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Too many service requests were made over the given time period.</p>",
       "exception":true
     },
@@ -909,8 +898,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEnvironmentMembershipRequest":{
       "type":"structure",
@@ -967,8 +955,7 @@
     },
     "UpdateEnvironmentResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UserArn":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudcontrol/2021-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/clouddirectory/2017-01-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/clouddirectory/2017-01-11/service-2.json 2.31.35-1/awscli/botocore/data/clouddirectory/2017-01-11/service-2.json
--- 2.23.6-1/awscli/botocore/data/clouddirectory/2017-01-11/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/clouddirectory/2017-01-11/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1498,8 +1498,7 @@
     },
     "AddFacetToObjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ApplySchemaRequest":{
       "type":"structure",
@@ -1602,8 +1601,7 @@
     },
     "AttachPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachToIndexRequest":{
       "type":"structure",
@@ -1787,8 +1785,7 @@
     },
     "BatchAddFacetToObjectResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of a batch add facet to object operation.</p>"
     },
     "BatchAttachObject":{
@@ -1844,8 +1841,7 @@
     },
     "BatchAttachPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of an <a>AttachPolicy</a> response operation.</p>"
     },
     "BatchAttachToIndex":{
@@ -2007,8 +2003,7 @@
     },
     "BatchDeleteObjectResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <a>DeleteObject</a> response operation.</p>"
     },
     "BatchDetachFromIndex":{
@@ -2091,8 +2086,7 @@
     },
     "BatchDetachPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <a>DetachPolicy</a> response operation.</p>"
     },
     "BatchDetachTypedLink":{
@@ -2108,8 +2102,7 @@
     },
     "BatchDetachTypedLinkResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <a>DetachTypedLink</a> response operation.</p>"
     },
     "BatchGetLinkAttributes":{
@@ -2816,8 +2809,7 @@
     },
     "BatchRemoveFacetFromObjectResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty result that represents success.</p>"
     },
     "BatchUpdateLinkAttributes":{
@@ -2840,8 +2832,7 @@
     },
     "BatchUpdateLinkAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the output of a <a>UpdateLinkAttributes</a> response operation.</p>"
     },
     "BatchUpdateObjectAttributes":{
@@ -3171,8 +3162,7 @@
     },
     "CreateFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateIndexRequest":{
       "type":"structure",
@@ -3295,8 +3285,7 @@
     },
     "CreateTypedLinkFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Date":{"type":"timestamp"},
     "DatetimeAttributeValue":{"type":"timestamp"},
@@ -3343,8 +3332,7 @@
     },
     "DeleteFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteObjectRequest":{
       "type":"structure",
@@ -3367,8 +3355,7 @@
     },
     "DeleteObjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSchemaRequest":{
       "type":"structure",
@@ -3412,8 +3399,7 @@
     },
     "DeleteTypedLinkFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachFromIndexRequest":{
       "type":"structure",
@@ -3507,8 +3493,7 @@
     },
     "DetachPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachTypedLinkRequest":{
       "type":"structure",
@@ -5388,8 +5373,7 @@
     },
     "RemoveFacetFromObjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequiredAttributeBehavior":{
       "type":"string",
@@ -5553,8 +5537,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{"type":"string"},
     "TagsNumberResults":{
@@ -5802,8 +5785,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateActionType":{
       "type":"string",
@@ -5841,8 +5823,7 @@
     },
     "UpdateFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLinkAttributesRequest":{
       "type":"structure",
@@ -5870,8 +5851,7 @@
     },
     "UpdateLinkAttributesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateObjectAttributesRequest":{
       "type":"structure",
@@ -5965,8 +5945,7 @@
     },
     "UpdateTypedLinkFacetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpgradeAppliedSchemaRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/paginators-1.json 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -119,6 +119,18 @@
       "limit_key": "MaxResults",
       "output_token": "NextToken",
       "result_key": "ResourceScanSummaries"
+    },
+    "ListStackRefactorActions": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "StackRefactorActions"
+    },
+    "ListStackRefactors": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "StackRefactorSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/service-2.json 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -45,7 +45,7 @@
         {"shape":"CFNRegistryException"},
         {"shape":"TypeNotFoundException"}
       ],
-      "documentation":"<p>Activates a public third-party extension, making it available for use in stack templates. Once you have activated a public third-party extension in your account and Region, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html\">SetTypeConfiguration</a> to specify configuration properties for the extension. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html\">Using public extensions</a> in the <i>CloudFormation User Guide</i>.</p>",
+      "documentation":"<p>Activates a public third-party extension, such as a resource or module, to make it available for use in stack templates in your current account and Region. It can also create CloudFormation Hooks, which allow you to evaluate resource configurations before CloudFormation provisions them. Hooks integrate with both CloudFormation and Cloud Control API operations.</p> <p>After you activate an extension, you can use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html\">SetTypeConfiguration</a> to set specific properties for the extension.</p> <p>To see which extensions have been activated, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListTypes.html\">ListTypes</a>. To see configuration details for an extension, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public-activate-extension.html\">Activate a third-party public extension in your account</a> in the <i>CloudFormation User Guide</i>. For information about creating Hooks, see the <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/what-is-cloudformation-hooks.html\">CloudFormation Hooks User Guide</a>.</p>",
       "idempotent":true
     },
     "BatchDescribeTypeConfigurations":{
@@ -63,7 +63,7 @@
         {"shape":"TypeConfigurationNotFoundException"},
         {"shape":"CFNRegistryException"}
       ],
-      "documentation":"<p>Returns configuration data for the specified CloudFormation extensions, from the CloudFormation registry for the account and Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p>"
+      "documentation":"<p>Returns configuration data for the specified CloudFormation extensions, from the CloudFormation registry in your current account and Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p>"
     },
     "CancelUpdateStack":{
       "name":"CancelUpdateStack",
@@ -91,7 +91,7 @@
       "errors":[
         {"shape":"TokenAlreadyExistsException"}
       ],
-      "documentation":"<p>For a specified stack that's in the <code>UPDATE_ROLLBACK_FAILED</code> state, continues rolling it back to the <code>UPDATE_ROLLBACK_COMPLETE</code> state. Depending on the cause of the failure, you can manually <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-update-rollback-failed\">fix the error</a> and continue the rollback. By continuing the rollback, you can return your stack to a working state (the <code>UPDATE_ROLLBACK_COMPLETE</code> state), and then try to update the stack again.</p> <p>A stack goes into the <code>UPDATE_ROLLBACK_FAILED</code> state when CloudFormation can't roll back all changes after a failed stack update. For example, you might have a stack that's rolling back to an old database instance that was deleted outside of CloudFormation. Because CloudFormation doesn't know the database was deleted, it assumes that the database instance still exists and attempts to roll back to it, causing the update rollback to fail.</p>"
+      "documentation":"<p>Continues rolling back a stack from <code>UPDATE_ROLLBACK_FAILED</code> to <code>UPDATE_ROLLBACK_COMPLETE</code> state. Depending on the cause of the failure, you can manually fix the error and continue the rollback. By continuing the rollback, you can return your stack to a working state (the <code>UPDATE_ROLLBACK_COMPLETE</code> state) and then try to update the stack again.</p> <p>A stack enters the <code>UPDATE_ROLLBACK_FAILED</code> state when CloudFormation can't roll back all changes after a failed stack update. For example, this might occur when a stack attempts to roll back to an old database that was deleted outside of CloudFormation. Because CloudFormation doesn't know the instance was deleted, it assumes the instance still exists and attempts to roll back to it, causing the update rollback to fail.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html\">Continue rolling back an update</a> in the <i>CloudFormation User Guide</i>. For information for troubleshooting a failed update rollback, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-update-rollback-failed\">Update rollback failed</a>.</p>"
     },
     "CreateChangeSet":{
       "name":"CreateChangeSet",
@@ -167,7 +167,20 @@
         {"shape":"InvalidOperationException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates stack instances for the specified accounts, within the specified Amazon Web Services Regions. A stack instance refers to a stack in a specific account and Region. You must specify at least one value for either <code>Accounts</code> or <code>DeploymentTargets</code>, and you must specify at least one value for <code>Regions</code>.</p>"
+      "documentation":"<p>Creates stack instances for the specified accounts, within the specified Amazon Web Services Regions. A stack instance refers to a stack in a specific account and Region. You must specify at least one value for either <code>Accounts</code> or <code>DeploymentTargets</code>, and you must specify at least one value for <code>Regions</code>.</p> <note> <p>The maximum number of organizational unit (OUs) supported by a <code>CreateStackInstances</code> operation is 50.</p> <p>If you need more than 50, consider the following options:</p> <ul> <li> <p> <i>Batch processing:</i> If you don't want to expose your OU hierarchy, split up the operations into multiple calls with less than 50 OUs each.</p> </li> <li> <p> <i>Parent OU strategy:</i> If you don't mind exposing the OU hierarchy, target a parent OU that contains all desired child OUs.</p> </li> </ul> </note>"
+    },
+    "CreateStackRefactor":{
+      "name":"CreateStackRefactor",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateStackRefactorInput"},
+      "output":{
+        "shape":"CreateStackRefactorOutput",
+        "resultWrapper":"CreateStackRefactorResult"
+      },
+      "documentation":"<p>Creates a refactor across multiple stacks, with the list of stacks and resources that are affected.</p>"
     },
     "CreateStackSet":{
       "name":"CreateStackSet",
@@ -185,7 +198,7 @@
         {"shape":"CreatedButModifiedException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates a stack set.</p>"
+      "documentation":"<p>Creates a StackSet.</p>"
     },
     "DeactivateOrganizationsAccess":{
       "name":"DeactivateOrganizationsAccess",
@@ -219,7 +232,7 @@
         {"shape":"CFNRegistryException"},
         {"shape":"TypeNotFoundException"}
       ],
-      "documentation":"<p>Deactivates a public extension that was previously activated in this account and Region.</p> <p>Once deactivated, an extension can't be used in any CloudFormation operation. This includes stack update operations where the stack template includes the extension, even if no updates are being made to the extension. In addition, deactivated extensions aren't automatically updated if a new version of the extension is released.</p>",
+      "documentation":"<p>Deactivates a public third-party extension, such as a resource or module, or a CloudFormation Hook when you no longer use it.</p> <p>Deactivating an extension deletes the configuration details that are associated with it. To temporarily disable a CloudFormation Hook instead, you can use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html\">SetTypeConfiguration</a>.</p> <p>Once deactivated, an extension can't be used in any CloudFormation operation. This includes stack update operations where the stack template includes the extension, even if no updates are being made to the extension. In addition, deactivated extensions aren't automatically updated if a new version of the extension is released.</p> <p>To see which extensions are currently activated, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListTypes.html\">ListTypes</a>.</p>",
       "idempotent":true
     },
     "DeleteChangeSet":{
@@ -281,7 +294,7 @@
         {"shape":"StaleRequestException"},
         {"shape":"InvalidOperationException"}
       ],
-      "documentation":"<p>Deletes stack instances for the specified accounts, in the specified Amazon Web Services Regions.</p>"
+      "documentation":"<p>Deletes stack instances for the specified accounts, in the specified Amazon Web Services Regions.</p> <note> <p>The maximum number of organizational unit (OUs) supported by a <code>DeleteStackInstances</code> operation is 50.</p> <p>If you need more than 50, consider the following options:</p> <ul> <li> <p> <i>Batch processing:</i> If you don't want to expose your OU hierarchy, split up the operations into multiple calls with less than 50 OUs each.</p> </li> <li> <p> <i>Parent OU strategy:</i> If you don't mind exposing the OU hierarchy, target a parent OU that contains all desired child OUs.</p> </li> </ul> </note>"
     },
     "DeleteStackSet":{
       "name":"DeleteStackSet",
@@ -298,7 +311,7 @@
         {"shape":"StackSetNotEmptyException"},
         {"shape":"OperationInProgressException"}
       ],
-      "documentation":"<p>Deletes a stack set. Before you can delete a stack set, all its member stack instances must be deleted. For more information about how to complete this, see <a>DeleteStackInstances</a>.</p>"
+      "documentation":"<p>Deletes a StackSet. Before you can delete a StackSet, all its member stack instances must be deleted. For more information about how to complete this, see <a>DeleteStackInstances</a>.</p>"
     },
     "DeregisterType":{
       "name":"DeregisterType",
@@ -315,7 +328,7 @@
         {"shape":"CFNRegistryException"},
         {"shape":"TypeNotFoundException"}
       ],
-      "documentation":"<p>Marks an extension or extension version as <code>DEPRECATED</code> in the CloudFormation registry, removing it from active use. Deprecated extensions or extension versions cannot be used in CloudFormation operations.</p> <p>To deregister an entire extension, you must individually deregister all active versions of that extension. If an extension has only a single active version, deregistering that version results in the extension itself being deregistered and marked as deprecated in the registry.</p> <p>You can't deregister the default version of an extension if there are other active version of that extension. If you do deregister the default version of an extension, the extension type itself is deregistered as well and marked as deprecated.</p> <p>To view the deprecation status of an extension or extension version, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>.</p>",
+      "documentation":"<p>Marks an extension or extension version as <code>DEPRECATED</code> in the CloudFormation registry, removing it from active use. Deprecated extensions or extension versions cannot be used in CloudFormation operations.</p> <p>To deregister an entire extension, you must individually deregister all active versions of that extension. If an extension has only a single active version, deregistering that version results in the extension itself being deregistered and marked as deprecated in the registry.</p> <p>You can't deregister the default version of an extension if there are other active version of that extension. If you do deregister the default version of an extension, the extension type itself is deregistered as well and marked as deprecated.</p> <p>To view the deprecation status of an extension or extension version, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-private-deregister-extension.html\">Remove third-party private extensions from your account</a> in the <i>CloudFormation User Guide</i>.</p>",
       "idempotent":true
     },
     "DescribeAccountLimits":{
@@ -472,6 +485,22 @@
       ],
       "documentation":"<p>Returns the stack instance that's associated with the specified StackSet, Amazon Web Services account, and Amazon Web Services Region.</p> <p>For a list of stack instances that are associated with a specific StackSet, use <a>ListStackInstances</a>.</p>"
     },
+    "DescribeStackRefactor":{
+      "name":"DescribeStackRefactor",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeStackRefactorInput"},
+      "output":{
+        "shape":"DescribeStackRefactorOutput",
+        "resultWrapper":"DescribeStackRefactorResult"
+      },
+      "errors":[
+        {"shape":"StackRefactorNotFoundException"}
+      ],
+      "documentation":"<p>Describes the stack refactor status.</p>"
+    },
     "DescribeStackResource":{
       "name":"DescribeStackResource",
       "http":{
@@ -525,7 +554,7 @@
       "errors":[
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Returns the description of the specified StackSet.</p>"
+      "documentation":"<p>Returns the description of the specified StackSet.</p> <note> <p>This API provides <i>strongly consistent</i> reads meaning it will always return the most up-to-date data.</p> </note>"
     },
     "DescribeStackSetOperation":{
       "name":"DescribeStackSetOperation",
@@ -542,7 +571,7 @@
         {"shape":"StackSetNotFoundException"},
         {"shape":"OperationNotFoundException"}
       ],
-      "documentation":"<p>Returns the description of the specified StackSet operation.</p>"
+      "documentation":"<p>Returns the description of the specified StackSet operation.</p> <note> <p>This API provides <i>strongly consistent</i> reads meaning it will always return the most up-to-date data.</p> </note>"
     },
     "DescribeStacks":{
       "name":"DescribeStacks",
@@ -572,7 +601,7 @@
         {"shape":"CFNRegistryException"},
         {"shape":"TypeNotFoundException"}
       ],
-      "documentation":"<p>Returns detailed information about an extension that has been registered.</p> <p>If you specify a <code>VersionId</code>, <code>DescribeType</code> returns information about that specific extension version. Otherwise, it returns information about the default extension version.</p>",
+      "documentation":"<p>Returns detailed information about an extension from the CloudFormation registry in your current account and Region.</p> <p>If you specify a <code>VersionId</code>, <code>DescribeType</code> returns information about that specific extension version. Otherwise, it returns information about the default extension version.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p>",
       "idempotent":true
     },
     "DescribeTypeRegistration":{
@@ -634,7 +663,7 @@
         {"shape":"OperationInProgressException"},
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Detect drift on a stack set. When CloudFormation performs drift detection on a stack set, it performs drift detection on the stack associated with each stack instance in the stack set. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">How CloudFormation performs drift detection on a stack set</a>.</p> <p> <code>DetectStackSetDrift</code> returns the <code>OperationId</code> of the stack set drift detection operation. Use this operation id with <a>DescribeStackSetOperation</a> to monitor the progress of the drift detection operation. The drift detection operation may take some time, depending on the number of stack instances included in the stack set, in addition to the number of resources included in each stack.</p> <p>Once the operation has completed, use the following actions to return drift information:</p> <ul> <li> <p>Use <a>DescribeStackSet</a> to return detailed information about the stack set, including detailed information about the last <i>completed</i> drift operation performed on the stack set. (Information about drift operations that are in progress isn't included.)</p> </li> <li> <p>Use <a>ListStackInstances</a> to return a list of stack instances belonging to the stack set, including the drift status and last drift time checked of each instance.</p> </li> <li> <p>Use <a>DescribeStackInstance</a> to return detailed information about a specific stack instance, including its drift status and last drift time checked.</p> </li> </ul> <p>For more information about performing a drift detection operation on a stack set, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Detecting unmanaged changes in stack sets</a>.</p> <p>You can only run a single drift detection operation on a given stack set at one time.</p> <p>To stop a drift detection stack set operation, use <a>StopStackSetOperation</a>.</p>"
+      "documentation":"<p>Detect drift on a StackSet. When CloudFormation performs drift detection on a StackSet, it performs drift detection on the stack associated with each stack instance in the StackSet. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Performing drift detection on CloudFormation StackSets</a>.</p> <p> <code>DetectStackSetDrift</code> returns the <code>OperationId</code> of the StackSet drift detection operation. Use this operation id with <a>DescribeStackSetOperation</a> to monitor the progress of the drift detection operation. The drift detection operation may take some time, depending on the number of stack instances included in the StackSet, in addition to the number of resources included in each stack.</p> <p>Once the operation has completed, use the following actions to return drift information:</p> <ul> <li> <p>Use <a>DescribeStackSet</a> to return detailed information about the stack set, including detailed information about the last <i>completed</i> drift operation performed on the StackSet. (Information about drift operations that are in progress isn't included.)</p> </li> <li> <p>Use <a>ListStackInstances</a> to return a list of stack instances belonging to the StackSet, including the drift status and last drift time checked of each instance.</p> </li> <li> <p>Use <a>DescribeStackInstance</a> to return detailed information about a specific stack instance, including its drift status and last drift time checked.</p> </li> </ul> <p>You can only run a single drift detection operation on a given StackSet at one time.</p> <p>To stop a drift detection StackSet operation, use <a>StopStackSetOperation</a>.</p>"
     },
     "EstimateTemplateCost":{
       "name":"EstimateTemplateCost",
@@ -668,6 +697,15 @@
       ],
       "documentation":"<p>Updates a stack using the input information that was provided when the specified change set was created. After the call successfully completes, CloudFormation starts updating the stack. Use the <a>DescribeStacks</a> action to view the status of the update.</p> <p>When you execute a change set, CloudFormation deletes all other change sets associated with the stack because they aren't valid for the updated stack.</p> <p>If a stack policy is associated with the stack, CloudFormation enforces the policy during the update. You can't specify a temporary stack policy that overrides the current policy.</p> <p>To create a change set for the entire stack hierarchy, <code>IncludeNestedStacks</code> must have been set to <code>True</code>.</p>"
     },
+    "ExecuteStackRefactor":{
+      "name":"ExecuteStackRefactor",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ExecuteStackRefactorInput"},
+      "documentation":"<p>Executes the stack refactor operation.</p>"
+    },
     "GetGeneratedTemplate":{
       "name":"GetGeneratedTemplate",
       "http":{
@@ -727,7 +765,7 @@
       "errors":[
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a new or existing template. The <code>GetTemplateSummary</code> action is useful for viewing parameter information, such as default parameter values and parameter types, before you create or update a stack or stack set.</p> <p>You can use the <code>GetTemplateSummary</code> action when you submit a template, or you can get template information for a stack set, or a running or deleted stack.</p> <p>For deleted stacks, <code>GetTemplateSummary</code> returns the template information for up to 90 days after the stack has been deleted. If the template doesn't exist, a <code>ValidationError</code> is returned.</p>"
+      "documentation":"<p>Returns information about a new or existing template. The <code>GetTemplateSummary</code> action is useful for viewing parameter information, such as default parameter values and parameter types, before you create or update a stack or StackSet.</p> <p>You can use the <code>GetTemplateSummary</code> action when you submit a template, or you can get template information for a StackSet, or a running or deleted stack.</p> <p>For deleted stacks, <code>GetTemplateSummary</code> returns the template information for up to 90 days after the stack has been deleted. If the template doesn't exist, a <code>ValidationError</code> is returned.</p>"
     },
     "ImportStacksToStackSet":{
       "name":"ImportStacksToStackSet",
@@ -749,7 +787,7 @@
         {"shape":"StackNotFoundException"},
         {"shape":"StaleRequestException"}
       ],
-      "documentation":"<p>Import existing stacks into a new stack sets. Use the stack import operation to import up to 10 stacks into a new stack set in the same account as the source stack or in a different administrator account and Region, by specifying the stack ID of the stack you intend to import.</p>"
+      "documentation":"<p>Import existing stacks into a new StackSets. Use the stack import operation to import up to 10 stacks into a new StackSet in the same account as the source stack or in a different administrator account and Region, by specifying the stack ID of the stack you intend to import.</p>"
     },
     "ListChangeSets":{
       "name":"ListChangeSets",
@@ -775,7 +813,7 @@
         "shape":"ListExportsOutput",
         "resultWrapper":"ListExportsResult"
       },
-      "documentation":"<p>Lists all exported output values in the account and Region in which you call this action. Use this action to see the exported output values that you can import into other stacks. To import values, use the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html\"> Fn::ImportValue</a> function.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html\">Get exported outputs from a deployed CloudFormation stack</a>.</p>"
+      "documentation":"<p>Lists all exported output values in the account and Region in which you call this action. Use this action to see the exported output values that you can import into other stacks. To import values, use the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html\"> Fn::ImportValue</a> function.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html\">Get exported outputs from a deployed CloudFormation stack</a>.</p>"
     },
     "ListGeneratedTemplates":{
       "name":"ListGeneratedTemplates",
@@ -804,7 +842,7 @@
       "errors":[
         {"shape":"HookResultNotFoundException"}
       ],
-      "documentation":"<p>Returns summaries of invoked Hooks when a change set or Cloud Control API operation target is provided.</p>"
+      "documentation":"<p>Returns summaries of invoked Hooks. For more information, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/hooks-view-invocations.html\">View invocation summaries for CloudFormation Hooks</a> in the <i>CloudFormation Hooks User Guide</i>.</p> <p>This operation supports the following parameter combinations:</p> <ul> <li> <p>No parameters: Returns all Hook invocation summaries.</p> </li> <li> <p> <code>TypeArn</code> only: Returns summaries for a specific Hook.</p> </li> <li> <p> <code>TypeArn</code> and <code>Status</code>: Returns summaries for a specific Hook filtered by status.</p> </li> <li> <p> <code>TargetId</code> and <code>TargetType</code>: Returns summaries for a specific Hook invocation target.</p> </li> </ul>"
     },
     "ListImports":{
       "name":"ListImports",
@@ -817,7 +855,7 @@
         "shape":"ListImportsOutput",
         "resultWrapper":"ListImportsResult"
       },
-      "documentation":"<p>Lists all stacks that are importing an exported output value. To modify or remove an exported output value, first use this action to see which stacks are using it. To see the exported output values in your account, see <a>ListExports</a>.</p> <p>For more information about importing an exported output value, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html\">Fn::ImportValue</a> function.</p>"
+      "documentation":"<p>Lists all stacks that are importing an exported output value. To modify or remove an exported output value, first use this action to see which stacks are using it. To see the exported output values in your account, see <a>ListExports</a>.</p> <p>For more information about importing an exported output value, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html\">Fn::ImportValue</a> function.</p>"
     },
     "ListResourceScanRelatedResources":{
       "name":"ListResourceScanRelatedResources",
@@ -898,7 +936,33 @@
       "errors":[
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Returns summary information about stack instances that are associated with the specified stack set. You can filter for stack instances that are associated with a specific Amazon Web Services account name or Region, or that have a specific status.</p>"
+      "documentation":"<p>Returns summary information about stack instances that are associated with the specified StackSet. You can filter for stack instances that are associated with a specific Amazon Web Services account name or Region, or that have a specific status.</p>"
+    },
+    "ListStackRefactorActions":{
+      "name":"ListStackRefactorActions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListStackRefactorActionsInput"},
+      "output":{
+        "shape":"ListStackRefactorActionsOutput",
+        "resultWrapper":"ListStackRefactorActionsResult"
+      },
+      "documentation":"<p>Lists the stack refactor actions that will be taken after calling the <a>ExecuteStackRefactor</a> action.</p>"
+    },
+    "ListStackRefactors":{
+      "name":"ListStackRefactors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListStackRefactorsInput"},
+      "output":{
+        "shape":"ListStackRefactorsOutput",
+        "resultWrapper":"ListStackRefactorsResult"
+      },
+      "documentation":"<p>Lists all account stack refactor operations and their statuses.</p>"
     },
     "ListStackResources":{
       "name":"ListStackResources",
@@ -927,7 +991,7 @@
       "errors":[
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Returns summary information about deployment targets for a stack set.</p>"
+      "documentation":"<p>Returns summary information about deployment targets for a StackSet.</p>"
     },
     "ListStackSetOperationResults":{
       "name":"ListStackSetOperationResults",
@@ -944,7 +1008,7 @@
         {"shape":"StackSetNotFoundException"},
         {"shape":"OperationNotFoundException"}
       ],
-      "documentation":"<p>Returns summary information about the results of a stack set operation.</p>"
+      "documentation":"<p>Returns summary information about the results of a StackSet operation.</p> <note> <p>This API provides <i>eventually consistent</i> reads meaning it may take some time but will eventually return the most up-to-date data.</p> </note>"
     },
     "ListStackSetOperations":{
       "name":"ListStackSetOperations",
@@ -960,7 +1024,7 @@
       "errors":[
         {"shape":"StackSetNotFoundException"}
       ],
-      "documentation":"<p>Returns summary information about operations performed on a stack set.</p>"
+      "documentation":"<p>Returns summary information about operations performed on a StackSet.</p> <note> <p>This API provides <i>eventually consistent</i> reads meaning it may take some time but will eventually return the most up-to-date data.</p> </note>"
     },
     "ListStackSets":{
       "name":"ListStackSets",
@@ -973,7 +1037,7 @@
         "shape":"ListStackSetsOutput",
         "resultWrapper":"ListStackSetsResult"
       },
-      "documentation":"<p>Returns summary information about stack sets that are associated with the user.</p> <ul> <li> <p>[Self-managed permissions] If you set the <code>CallAs</code> parameter to <code>SELF</code> while signed in to your Amazon Web Services account, <code>ListStackSets</code> returns all self-managed stack sets in your Amazon Web Services account.</p> </li> <li> <p>[Service-managed permissions] If you set the <code>CallAs</code> parameter to <code>SELF</code> while signed in to the organization's management account, <code>ListStackSets</code> returns all stack sets in the management account.</p> </li> <li> <p>[Service-managed permissions] If you set the <code>CallAs</code> parameter to <code>DELEGATED_ADMIN</code> while signed in to your member account, <code>ListStackSets</code> returns all stack sets with service-managed permissions in the management account.</p> </li> </ul>"
+      "documentation":"<p>Returns summary information about StackSets that are associated with the user.</p> <note> <p>This API provides <i>strongly consistent</i> reads meaning it will always return the most up-to-date data.</p> </note> <ul> <li> <p>[Self-managed permissions] If you set the <code>CallAs</code> parameter to <code>SELF</code> while signed in to your Amazon Web Services account, <code>ListStackSets</code> returns all self-managed StackSets in your Amazon Web Services account.</p> </li> <li> <p>[Service-managed permissions] If you set the <code>CallAs</code> parameter to <code>SELF</code> while signed in to the organization's management account, <code>ListStackSets</code> returns all StackSets in the management account.</p> </li> <li> <p>[Service-managed permissions] If you set the <code>CallAs</code> parameter to <code>DELEGATED_ADMIN</code> while signed in to your member account, <code>ListStackSets</code> returns all StackSets with service-managed permissions in the management account.</p> </li> </ul>"
     },
     "ListStacks":{
       "name":"ListStacks",
@@ -986,7 +1050,7 @@
         "shape":"ListStacksOutput",
         "resultWrapper":"ListStacksResult"
       },
-      "documentation":"<p>Returns the summary information for stacks whose status matches the specified StackStatusFilter. Summary information for stacks that have been deleted is kept for 90 days after the stack is deleted. If no StackStatusFilter is specified, summary information for all stacks is returned (including existing stacks and stacks that have been deleted).</p>"
+      "documentation":"<p>Returns the summary information for stacks whose status matches the specified <code>StackStatusFilter</code>. Summary information for stacks that have been deleted is kept for 90 days after the stack is deleted. If no <code>StackStatusFilter</code> is specified, summary information for all stacks is returned (including existing stacks and stacks that have been deleted).</p>"
     },
     "ListTypeRegistrations":{
       "name":"ListTypeRegistrations",
@@ -1036,7 +1100,7 @@
       "errors":[
         {"shape":"CFNRegistryException"}
       ],
-      "documentation":"<p>Returns summary information about extension that have been registered with CloudFormation.</p>",
+      "documentation":"<p>Returns summary information about all extensions, including your private resource types, modules, and Hooks as well as all public extensions from Amazon Web Services and third-party publishers.</p>",
       "idempotent":true
     },
     "PublishType":{
@@ -1149,7 +1213,7 @@
         {"shape":"CFNRegistryException"},
         {"shape":"TypeNotFoundException"}
       ],
-      "documentation":"<p>Specifies the configuration data for a registered CloudFormation extension, in the given account and Region.</p> <p>To view the current configuration data for an extension, refer to the <code>ConfigurationSchema</code> element of <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p> <important> <p>It's strongly recommended that you use dynamic references to restrict sensitive configuration definitions, such as third-party credentials. For more details on dynamic references, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html\">Specify values stored in other services using dynamic references</a> in the <i>CloudFormation User Guide</i>.</p> </important>"
+      "documentation":"<p>Specifies the configuration data for a CloudFormation extension, such as a resource or Hook, in the given account and Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p> <p>To view the current configuration data for an extension, refer to the <code>ConfigurationSchema</code> element of <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>.</p> <important> <p>It's strongly recommended that you use dynamic references to restrict sensitive configuration definitions, such as third-party credentials. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html\">Specify values stored in other services using dynamic references</a> in the <i>CloudFormation User Guide</i>.</p> </important> <p>For more information about setting the configuration data for resource types, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-model.html#resource-type-howto-configuration\">Defining the account-level configuration of an extension</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i>. For more information about setting the configuration data for Hooks, see the <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/what-is-cloudformation-hooks.html\">CloudFormation Hooks User Guide</a>.</p>"
     },
     "SetTypeDefaultVersion":{
       "name":"SetTypeDefaultVersion",
@@ -1211,7 +1275,7 @@
         {"shape":"OperationNotFoundException"},
         {"shape":"InvalidOperationException"}
       ],
-      "documentation":"<p>Stops an in-progress operation on a stack set and its associated stack instances. StackSets will cancel all the unstarted stack instance deployments and wait for those are in-progress to complete.</p>"
+      "documentation":"<p>Stops an in-progress operation on a StackSet and its associated stack instances. StackSets will cancel all the unstarted stack instance deployments and wait for those are in-progress to complete.</p>"
     },
     "TestType":{
       "name":"TestType",
@@ -1285,7 +1349,7 @@
         {"shape":"StaleRequestException"},
         {"shape":"InvalidOperationException"}
       ],
-      "documentation":"<p>Updates the parameter values for stack instances for the specified accounts, within the specified Amazon Web Services Regions. A stack instance refers to a stack in a specific account and Region.</p> <p>You can only update stack instances in Amazon Web Services Regions and accounts where they already exist; to create additional stack instances, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html\">CreateStackInstances</a>.</p> <p>During stack set updates, any parameters overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only update the parameter <i>values</i> that are specified in the stack set; to add or delete a parameter itself, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update the stack set template. If you add a parameter to a template, before you can override the parameter value specified in the stack set you must first use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update all stack instances with the updated template and parameter value specified in the stack set. Once a stack instance has been updated with the new parameter, you can then override the parameter value using <code>UpdateStackInstances</code>.</p>"
+      "documentation":"<p>Updates the parameter values for stack instances for the specified accounts, within the specified Amazon Web Services Regions. A stack instance refers to a stack in a specific account and Region.</p> <p>You can only update stack instances in Amazon Web Services Regions and accounts where they already exist; to create additional stack instances, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackInstances.html\">CreateStackInstances</a>.</p> <p>During StackSet updates, any parameters overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only update the parameter <i>values</i> that are specified in the StackSet. To add or delete a parameter itself, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update the StackSet template. If you add a parameter to a template, before you can override the parameter value specified in the StackSet you must first use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update all stack instances with the updated template and parameter value specified in the StackSet. Once a stack instance has been updated with the new parameter, you can then override the parameter value using <code>UpdateStackInstances</code>.</p> <note> <p>The maximum number of organizational unit (OUs) supported by a <code>UpdateStackInstances</code> operation is 50.</p> <p>If you need more than 50, consider the following options:</p> <ul> <li> <p> <i>Batch processing:</i> If you don't want to expose your OU hierarchy, split up the operations into multiple calls with less than 50 OUs each.</p> </li> <li> <p> <i>Parent OU strategy:</i> If you don't mind exposing the OU hierarchy, target a parent OU that contains all desired child OUs.</p> </li> </ul> </note>"
     },
     "UpdateStackSet":{
       "name":"UpdateStackSet",
@@ -1306,7 +1370,7 @@
         {"shape":"InvalidOperationException"},
         {"shape":"StackInstanceNotFoundException"}
       ],
-      "documentation":"<p>Updates the stack set, and associated stack instances in the specified accounts and Amazon Web Services Regions.</p> <p>Even if the stack set operation created by updating the stack set fails (completely or partially, below or above a specified failure tolerance), the stack set is updated with your changes. Subsequent <a>CreateStackInstances</a> calls on the specified stack set use the updated stack set.</p>"
+      "documentation":"<p>Updates the StackSet and associated stack instances in the specified accounts and Amazon Web Services Regions.</p> <p>Even if the StackSet operation created by updating the StackSet fails (completely or partially, below or above a specified failure tolerance), the StackSet is updated with your changes. Subsequent <a>CreateStackInstances</a> calls on the specified StackSet use the updated StackSet.</p> <note> <p>The maximum number of organizational unit (OUs) supported by a <code>UpdateStackSet</code> operation is 50.</p> <p>If you need more than 50, consider the following options:</p> <ul> <li> <p> <i>Batch processing:</i> If you don't want to expose your OU hierarchy, split up the operations into multiple calls with less than 50 OUs each.</p> </li> <li> <p> <i>Parent OU strategy:</i> If you don't mind exposing the OU hierarchy, target a parent OU that contains all desired child OUs.</p> </li> </ul> </note>"
     },
     "UpdateTerminationProtection":{
       "name":"UpdateTerminationProtection",
@@ -1355,14 +1419,14 @@
       "members":{
         "Status":{
           "shape":"AccountGateStatus",
-          "documentation":"<p>The status of the account gate function.</p> <ul> <li> <p> <code>SUCCEEDED</code>: The account gate function has determined that the account and Region passes any requirements for a stack set operation to occur. CloudFormation proceeds with the stack operation in that account and Region.</p> </li> <li> <p> <code>FAILED</code>: The account gate function has determined that the account and Region doesn't meet the requirements for a stack set operation to occur. CloudFormation cancels the stack set operation in that account and Region, and sets the stack set operation result status for that account and Region to <code>FAILED</code>.</p> </li> <li> <p> <code>SKIPPED</code>: CloudFormation has skipped calling the account gate function for this account and Region, for one of the following reasons:</p> <ul> <li> <p>An account gate function hasn't been specified for the account and Region. CloudFormation proceeds with the stack set operation in this account and Region.</p> </li> <li> <p>The <code>AWSCloudFormationStackSetExecutionRole</code> of the stack set administration account lacks permissions to invoke the function. CloudFormation proceeds with the stack set operation in this account and Region.</p> </li> <li> <p>Either no action is necessary, or no action is possible, on the stack. CloudFormation skips the stack set operation in this account and Region.</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>The status of the account gate function.</p> <ul> <li> <p> <code>SUCCEEDED</code>: The account gate function has determined that the account and Region passes any requirements for a StackSet operation to occur. CloudFormation proceeds with the stack operation in that account and Region.</p> </li> <li> <p> <code>FAILED</code>: The account gate function has determined that the account and Region doesn't meet the requirements for a StackSet operation to occur. CloudFormation cancels the StackSet operation in that account and Region, and sets the StackSet operation result status for that account and Region to <code>FAILED</code>.</p> </li> <li> <p> <code>SKIPPED</code>: CloudFormation has skipped calling the account gate function for this account and Region, for one of the following reasons:</p> <ul> <li> <p>An account gate function hasn't been specified for the account and Region. CloudFormation proceeds with the StackSet operation in this account and Region.</p> </li> <li> <p>The <code>AWSCloudFormationStackSetExecutionRole</code> of the administration account lacks permissions to invoke the function. CloudFormation proceeds with the StackSet operation in this account and Region.</p> </li> <li> <p>Either no action is necessary, or no action is possible, on the stack. CloudFormation skips the StackSet operation in this account and Region.</p> </li> </ul> </li> </ul>"
         },
         "StatusReason":{
           "shape":"AccountGateStatusReason",
-          "documentation":"<p>The reason for the account gate status assigned to this account and Region for the stack set operation.</p>"
+          "documentation":"<p>The reason for the account gate status assigned to this account and Region for the StackSet operation.</p>"
         }
       },
-      "documentation":"<p>Structure that contains the results of the account gate function which CloudFormation invokes, if present, before proceeding with a stack set operation in an account and Region.</p> <p>For each account and Region, CloudFormation lets you specify a Lambda function that encapsulates any requirements that must be met before CloudFormation can proceed with a stack set operation in that account and Region. CloudFormation invokes the function each time a stack set operation is requested for that account and Region; if the function returns <code>FAILED</code>, CloudFormation cancels the operation in that account and Region, and sets the stack set operation result status for that account and Region to <code>FAILED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-account-gating.html\">Configuring a target account gate</a>.</p>"
+      "documentation":"<p>Structure that contains the results of the account gate function which CloudFormation invokes, if present, before proceeding with a StackSet operation in an account and Region.</p> <p>For each account and Region, CloudFormation lets you specify a Lambda function that encapsulates any requirements that must be met before CloudFormation can proceed with a StackSet operation in that account and Region. CloudFormation invokes the function each time a StackSet operation is requested for that account and Region; if the function returns <code>FAILED</code>, CloudFormation cancels the operation in that account and Region, and sets the StackSet operation result status for that account and Region to <code>FAILED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-account-gating.html\">Prevent failed StackSets deployments using target account gates</a> in the <i>CloudFormation User Guide</i>.</p>"
     },
     "AccountGateStatus":{
       "type":"string",
@@ -1385,7 +1449,7 @@
           "documentation":"<p>The value that's associated with the account limit name.</p>"
         }
       },
-      "documentation":"<p>The AccountLimit data type.</p> <p>CloudFormation has the following limits per account:</p> <ul> <li> <p>Number of concurrent resources</p> </li> <li> <p>Number of stacks</p> </li> <li> <p>Number of stack outputs</p> </li> </ul> <p>For more information about these account limits, and other CloudFormation limits, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html\">Understand CloudFormation quotas</a> in the <i>CloudFormation User Guide</i>.</p>"
+      "documentation":"<p>Describes the current CloudFormation limits for your account.</p> <p>CloudFormation has the following limits per account:</p> <ul> <li> <p>Number of concurrent resources</p> </li> <li> <p>Number of stacks</p> </li> <li> <p>Number of stack outputs</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html\">Understand CloudFormation quotas</a> in the <i>CloudFormation User Guide</i>.</p>"
     },
     "AccountLimitList":{
       "type":"list",
@@ -1403,13 +1467,11 @@
     },
     "ActivateOrganizationsAccessInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ActivateOrganizationsAccessOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ActivateTypeInput":{
       "type":"structure",
@@ -1432,7 +1494,7 @@
         },
         "TypeNameAlias":{
           "shape":"TypeName",
-          "documentation":"<p>An alias to assign to the public extension, in this account and Region. If you specify an alias for the extension, CloudFormation treats the alias as the extension type name within this account and Region. You must use the alias to refer to the extension in your templates, API calls, and CloudFormation console.</p> <p>An extension alias must be unique within a given account and Region. You can activate the same public resource multiple times in the same account and Region, using different type name aliases.</p>"
+          "documentation":"<p>An alias to assign to the public extension in this account and Region. If you specify an alias for the extension, CloudFormation treats the alias as the extension type name within this account and Region. You must use the alias to refer to the extension in your templates, API calls, and CloudFormation console.</p> <p>An extension alias must be unique within a given account and Region. You can activate the same public resource multiple times in the same account and Region, using different type name aliases.</p>"
         },
         "AutoUpdate":{
           "shape":"AutoUpdate",
@@ -1461,7 +1523,7 @@
       "members":{
         "Arn":{
           "shape":"PrivateTypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the activated extension, in this account and Region.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the activated extension in this account and Region.</p>"
         }
       }
     },
@@ -1474,8 +1536,7 @@
     },
     "AlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource with the name requested already exists.</p>",
       "error":{
         "code":"AlreadyExistsException",
@@ -1505,7 +1566,7 @@
           "documentation":"<p>If set to <code>true</code>, stack resources are retained when an account is removed from a target organization or OU. If set to <code>false</code>, stack resources are deleted. Specify only if <code>Enabled</code> is set to <code>True</code>.</p>"
         }
       },
-      "documentation":"<p>[Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU).</p>"
+      "documentation":"<p>Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU). For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-manage-auto-deployment.html\">Enable or disable automatic deployments for StackSets in Organizations</a> in the <i>CloudFormation User Guide</i>.</p>"
     },
     "AutoDeploymentNullable":{"type":"boolean"},
     "AutoUpdate":{"type":"boolean"},
@@ -1640,7 +1701,7 @@
         },
         "HookInvocationCount":{
           "shape":"HookInvocationCount",
-          "documentation":"<p>Is either <code>null</code>, if no hooks invoke for the resource, or contains the number of hooks that will invoke for the resource.</p>"
+          "documentation":"<p>Is either <code>null</code>, if no Hooks invoke for the resource, or contains the number of Hooks that will invoke for the resource.</p>"
         },
         "ResourceChange":{
           "shape":"ResourceChange",
@@ -1664,15 +1725,15 @@
       "members":{
         "InvocationPoint":{
           "shape":"HookInvocationPoint",
-          "documentation":"<p>Specifies the points in provisioning logic where a hook is invoked.</p>"
+          "documentation":"<p>The specific point in the provisioning process where the Hook is invoked.</p>"
         },
         "FailureMode":{
           "shape":"HookFailureMode",
-          "documentation":"<p>Specify the hook failure mode for non-compliant resources in the followings ways.</p> <ul> <li> <p> <code>FAIL</code> Stops provisioning resources.</p> </li> <li> <p> <code>WARN</code> Allows provisioning to continue with a warning message.</p> </li> </ul>"
+          "documentation":"<p>Specify the Hook failure mode for non-compliant resources in the followings ways.</p> <ul> <li> <p> <code>FAIL</code> Stops provisioning resources.</p> </li> <li> <p> <code>WARN</code> Allows provisioning to continue with a warning message.</p> </li> </ul>"
         },
         "TypeName":{
           "shape":"HookTypeName",
-          "documentation":"<p>The unique name for your hook. Specifies a three-part namespace for your hook, with a recommended pattern of <code>Organization::Service::Hook</code>.</p> <note> <p>The following organization namespaces are reserved and can't be used in your hook type names:</p> <ul> <li> <p> <code>Alexa</code> </p> </li> <li> <p> <code>AMZN</code> </p> </li> <li> <p> <code>Amazon</code> </p> </li> <li> <p> <code>ASK</code> </p> </li> <li> <p> <code>AWS</code> </p> </li> <li> <p> <code>Custom</code> </p> </li> <li> <p> <code>Dev</code> </p> </li> </ul> </note>"
+          "documentation":"<p>The unique name for your Hook. Specifies a three-part namespace for your Hook, with a recommended pattern of <code>Organization::Service::Hook</code>.</p> <note> <p>The following organization namespaces are reserved and can't be used in your Hook type names:</p> <ul> <li> <p> <code>Alexa</code> </p> </li> <li> <p> <code>AMZN</code> </p> </li> <li> <p> <code>Amazon</code> </p> </li> <li> <p> <code>ASK</code> </p> </li> <li> <p> <code>AWS</code> </p> </li> <li> <p> <code>Custom</code> </p> </li> <li> <p> <code>Dev</code> </p> </li> </ul> </note>"
         },
         "TypeVersionId":{
           "shape":"HookTypeVersionId",
@@ -1684,10 +1745,10 @@
         },
         "TargetDetails":{
           "shape":"ChangeSetHookTargetDetails",
-          "documentation":"<p>Specifies details about the target that the hook will run against.</p>"
+          "documentation":"<p>Specifies details about the target that the Hook will run against.</p>"
         }
       },
-      "documentation":"<p>Specifies the resource, the hook, and the hook version to be invoked.</p>"
+      "documentation":"<p>Specifies the resource, the Hook, and the Hook version to be invoked.</p>"
     },
     "ChangeSetHookResourceTargetDetails":{
       "type":"structure",
@@ -1705,7 +1766,7 @@
           "documentation":"<p>Specifies the action of the resource.</p>"
         }
       },
-      "documentation":"<p>Specifies <code>RESOURCE</code> type target details for activated hooks.</p>"
+      "documentation":"<p>Specifies <code>RESOURCE</code> type target details for activated Hooks.</p>"
     },
     "ChangeSetHookTargetDetails":{
       "type":"structure",
@@ -1719,7 +1780,7 @@
           "documentation":"<p>Required if <code>TargetType</code> is <code>RESOURCE</code>.</p>"
         }
       },
-      "documentation":"<p>Specifies target details for an activated hook.</p>"
+      "documentation":"<p>Specifies target details for an activated Hook.</p>"
     },
     "ChangeSetHooks":{
       "type":"list",
@@ -1752,8 +1813,7 @@
     },
     "ChangeSetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified change set name or ID doesn't exit. To view valid change sets for a stack, use the <code>ListChangeSets</code> operation.</p>",
       "error":{
         "code":"ChangeSetNotFound",
@@ -1805,7 +1865,7 @@
         },
         "Status":{
           "shape":"ChangeSetStatus",
-          "documentation":"<p>The state of the change set, such as <code>CREATE_IN_PROGRESS</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The state of the change set, such as <code>CREATE_PENDING</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
         },
         "StatusReason":{
           "shape":"ChangeSetStatusReason",
@@ -1884,8 +1944,7 @@
     },
     "ConcurrentResourcesLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No more than 5 generated templates can be in an <code>InProgress</code> or <code>Pending</code> status at one time. This error is also returned if a generated template that is in an <code>InProgress</code> or <code>Pending</code> status is attempted to be updated or deleted.</p>",
       "error":{
         "code":"ConcurrentResourcesLimitExceeded",
@@ -1931,8 +1990,7 @@
     },
     "ContinueUpdateRollbackOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for a <a>ContinueUpdateRollback</a> operation.</p>"
     },
     "CreateChangeSetInput":{
@@ -1952,7 +2010,7 @@
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>The location of the file that contains the revised template. The URL must point to a template (max size: 460,800 bytes) that's located in an Amazon S3 bucket or a Systems Manager document. CloudFormation generates the change set by comparing this template with the stack that you specified. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify only <code>TemplateBody</code> or <code>TemplateURL</code>.</p>"
+          "documentation":"<p>The URL of the file that contains the revised template. The URL must point to a template (max size: 1 MB) that's located in an Amazon S3 bucket or a Systems Manager document. CloudFormation generates the change set by comparing this template with the stack that you specified. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>Conditional: You must specify only <code>TemplateBody</code> or <code>TemplateURL</code>.</p>"
         },
         "UsePreviousTemplate":{
           "shape":"UsePreviousTemplate",
@@ -1964,11 +2022,11 @@
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to create the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we suggest that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-accesskey.html\"> AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-group.html\"> AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\"> AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\"> AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-user.html\"> AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <note> <p>This capacity doesn't apply to creating change sets, and specifying it when creating change sets has no effect.</p> <p>If you want to create a stack from a stack template that contains macros <i>and</i> nested stacks, you must create or update the stack directly from the template using the <a>CreateStack</a> or <a>UpdateStack</a> action, and specifying this capability.</p> </note> <p>For more information about macros, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to create the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we suggest that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-accesskey.html\"> AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-group.html\"> AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-managedpolicy.html\"> AWS::IAM::ManagedPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-policy.html\"> AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html\"> AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html\"> AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-include.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <note> <p>This capacity doesn't apply to creating change sets, and specifying it when creating change sets has no effect.</p> <p>If you want to create a stack from a stack template that contains macros <i>and</i> nested stacks, you must create or update the stack directly from the template using the <a>CreateStack</a> or <a>UpdateStack</a> action, and specifying this capability.</p> </note> <p>For more information about macros, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "ResourceTypes":{
           "shape":"ResourceTypes",
-          "documentation":"<p>The template resource types that you have permissions to work with if you execute this change set, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>.</p> <p>If the list of resource types doesn't include a resource type that you're updating, the stack update fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for condition keys in IAM policies for CloudFormation. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html\">Control access with Identity and Access Management</a> in the <i>CloudFormation User Guide</i>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>The template resource types that you have permissions to work with if you execute this change set, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>.</p> <p>If the list of resource types doesn't include a resource type that you're updating, the stack update fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for condition keys in IAM policies for CloudFormation. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html\">Control access with Identity and Access Management</a> in the <i>CloudFormation User Guide</i>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "RoleARN":{
           "shape":"RoleARN",
@@ -2016,7 +2074,7 @@
         },
         "ImportExistingResources":{
           "shape":"ImportExistingResources",
-          "documentation":"<p>Indicates if the change set imports resources that already exist.</p> <note> <p>This parameter can only import resources that have custom names in templates. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html\">name type</a> in the <i>CloudFormation User Guide</i>. To import resources that do not accept custom names, such as EC2 instances, use the resource import feature instead. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html\">Import Amazon Web Services resources into a CloudFormation stack with a resource import</a> in the <i>CloudFormation User Guide</i>.</p> </note>"
+          "documentation":"<p>Indicates if the change set auto-imports resources that already exist. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/import-resources-automatically.html\">Import Amazon Web Services resources into a CloudFormation stack automatically</a> in the <i>CloudFormation User Guide</i>.</p> <note> <p>This parameter can only import resources that have custom names in templates. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html\">name type</a> in the <i>CloudFormation User Guide</i>. To import resources that do not accept custom names, such as EC2 instances, use the <code>ResourcesToImport</code> parameter instead.</p> </note>"
         }
       },
       "documentation":"<p>The input for the <a>CreateChangeSet</a> action.</p>"
@@ -2041,7 +2099,7 @@
       "members":{
         "Resources":{
           "shape":"ResourceDefinitions",
-          "documentation":"<p>An optional list of resources to be included in the generated template.</p> <p> If no resources are specified,the template will be created without any resources. Resources can be added to the template using the <code>UpdateGeneratedTemplate</code> API action.</p>"
+          "documentation":"<p>An optional list of resources to be included in the generated template.</p> <p>If no resources are specified,the template will be created without any resources. Resources can be added to the template using the <code>UpdateGeneratedTemplate</code> API action.</p>"
         },
         "GeneratedTemplateName":{
           "shape":"GeneratedTemplateName",
@@ -2076,11 +2134,11 @@
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify either the <code>TemplateBody</code> or the <code>TemplateURL</code> parameter, but not both.</p>"
+          "documentation":"<p>Structure that contains the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify either <code>TemplateBody</code> or <code>TemplateURL</code>, but not both.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify either the <code>TemplateBody</code> or the <code>TemplateURL</code> parameter, but not both.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template (max size: 1 MB) that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>Conditional: You must specify either the <code>TemplateBody</code> or the <code>TemplateURL</code> parameter, but not both.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -2104,11 +2162,11 @@
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to create the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <p>If you want to create a stack from a stack template that contains macros <i>and</i> nested stacks, you must create the stack directly from the template using this capability.</p> <important> <p>You should only create stacks directly from a stack template that contains macros if you know what processing the macro performs.</p> <p>Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified.</p> </important> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to create the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-managedpolicy.html\"> AWS::IAM::ManagedPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-include.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <p>If you want to create a stack from a stack template that contains macros <i>and</i> nested stacks, you must create the stack directly from the template using this capability.</p> <important> <p>You should only create stacks directly from a stack template that contains macros if you know what processing the macro performs.</p> <p>Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified.</p> </important> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "ResourceTypes":{
           "shape":"ResourceTypes",
-          "documentation":"<p>The template resource types that you have permissions to work with for this create stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>. Use the following syntax to describe template resource types: <code>AWS::*</code> (for all Amazon Web Services resources), <code>Custom::*</code> (for all custom resources), <code>Custom::<i>logical_ID</i> </code> (for a specific custom resource), <code>AWS::<i>service_name</i>::*</code> (for all resources of a particular Amazon Web Services service), and <code>AWS::<i>service_name</i>::<i>resource_logical_ID</i> </code> (for a specific Amazon Web Services resource).</p> <p>If the list of resource types doesn't include a resource that you're creating, the stack creation fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html\">Control access with Identity and Access Management</a>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>The template resource types that you have permissions to work with for this create stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>. Use the following syntax to describe template resource types: <code>AWS::*</code> (for all Amazon Web Services resources), <code>Custom::*</code> (for all custom resources), <code>Custom::<i>logical_ID</i> </code> (for a specific custom resource), <code>AWS::<i>service_name</i>::*</code> (for all resources of a particular Amazon Web Services service), and <code>AWS::<i>service_name</i>::<i>resource_logical_ID</i> </code> (for a specific Amazon Web Services resource).</p> <p>If the list of resource types doesn't include a resource that you're creating, the stack creation fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html\">Control access with Identity and Access Management</a>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "RoleARN":{
           "shape":"RoleARN",
@@ -2116,15 +2174,15 @@
         },
         "OnFailure":{
           "shape":"OnFailure",
-          "documentation":"<p>Determines what action will be taken if stack creation fails. This must be one of: <code>DO_NOTHING</code>, <code>ROLLBACK</code>, or <code>DELETE</code>. You can specify either <code>OnFailure</code> or <code>DisableRollback</code>, but not both.</p> <p>Default: <code>ROLLBACK</code> </p>"
+          "documentation":"<p>Determines what action will be taken if stack creation fails. This must be one of: <code>DO_NOTHING</code>, <code>ROLLBACK</code>, or <code>DELETE</code>. You can specify either <code>OnFailure</code> or <code>DisableRollback</code>, but not both.</p> <note> <p>Although the default setting is <code>ROLLBACK</code>, there is one exception. This exception occurs when a StackSet attempts to deploy a stack instance and the stack instance fails to create successfully. In this case, the <code>CreateStack</code> call overrides the default setting and sets the value of <code>OnFailure</code> to <code>DELETE</code>.</p> </note> <p>Default: <code>ROLLBACK</code> </p>"
         },
         "StackPolicyBody":{
           "shape":"StackPolicyBody",
-          "documentation":"<p>Structure containing the stack policy body. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
+          "documentation":"<p>Structure that contains the stack policy body. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
         },
         "StackPolicyURL":{
           "shape":"StackPolicyURL",
-          "documentation":"<p>Location of a file containing the stack policy. The URL must point to a policy (maximum size: 16 KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
+          "documentation":"<p>Location of a file that contains the stack policy. The URL must point to a policy (maximum size: 16 KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
         },
         "Tags":{
           "shape":"Tags",
@@ -2154,15 +2212,15 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to create stack instances from.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to create stack instances from.</p>"
         },
         "Accounts":{
           "shape":"AccountList",
-          "documentation":"<p>[Self-managed permissions] The names of one or more Amazon Web Services accounts that you want to create stack instances in the specified Region(s) for.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
+          "documentation":"<p>[Self-managed permissions] The account IDs of one or more Amazon Web Services accounts that you want to create stack instances in the specified Region(s) for.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
         },
         "DeploymentTargets":{
           "shape":"DeploymentTargets",
-          "documentation":"<p>[Service-managed permissions] The Organizations accounts for which to create stack instances in the specified Amazon Web Services Regions.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
+          "documentation":"<p>[Service-managed permissions] The Organizations accounts in which to create stack instances in the specified Amazon Web Services Regions.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
         },
         "Regions":{
           "shape":"RegionList",
@@ -2170,20 +2228,20 @@
         },
         "ParameterOverrides":{
           "shape":"Parameters",
-          "documentation":"<p>A list of stack set parameters whose values you want to override in the selected stack instances.</p> <p>Any overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions. When specifying parameters and their values, be aware of how CloudFormation sets parameter values during stack instance operations:</p> <ul> <li> <p>To override the current value for a parameter, include the parameter and specify its value.</p> </li> <li> <p>To leave an overridden parameter set to its present value, include the parameter and specify <code>UsePreviousValue</code> as <code>true</code>. (You can't specify both a value and set <code>UsePreviousValue</code> to <code>true</code>.)</p> </li> <li> <p>To set an overridden parameter back to the value specified in the stack set, specify a parameter list but don't include the parameter in the list.</p> </li> <li> <p>To leave all parameters set to their present values, don't specify this property at all.</p> </li> </ul> <p>During stack set updates, any parameter values overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only override the parameter <i>values</i> that are specified in the stack set; to add or delete a parameter itself, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update the stack set template.</p>"
+          "documentation":"<p>A list of StackSet parameters whose values you want to override in the selected stack instances.</p> <p>Any overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions. When specifying parameters and their values, be aware of how CloudFormation sets parameter values during stack instance operations:</p> <ul> <li> <p>To override the current value for a parameter, include the parameter and specify its value.</p> </li> <li> <p>To leave an overridden parameter set to its present value, include the parameter and specify <code>UsePreviousValue</code> as <code>true</code>. (You can't specify both a value and set <code>UsePreviousValue</code> to <code>true</code>.)</p> </li> <li> <p>To set an overridden parameter back to the value specified in the StackSet, specify a parameter list but don't include the parameter in the list.</p> </li> <li> <p>To leave all parameters set to their present values, don't specify this property at all.</p> </li> </ul> <p>During StackSet updates, any parameter values overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only override the parameter <i>values</i> that are specified in the StackSet; to add or delete a parameter itself, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update the StackSet template.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>Preferences for how CloudFormation performs this stack set operation.</p>"
+          "documentation":"<p>Preferences for how CloudFormation performs this StackSet operation.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the stack set operation only once, even if you retry the request multiple times. You might retry stack set operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p> <p>Repeating this stack set operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
+          "documentation":"<p>The unique identifier for this StackSet operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the StackSet operation only once, even if you retry the request multiple times. You might retry StackSet operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p> <p>Repeating this StackSet operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
           "idempotencyToken":true
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -2192,7 +2250,7 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p>"
+          "documentation":"<p>The unique identifier for this StackSet operation.</p>"
         }
       }
     },
@@ -2206,70 +2264,102 @@
       },
       "documentation":"<p>The output for a <a>CreateStack</a> action.</p>"
     },
+    "CreateStackRefactorInput":{
+      "type":"structure",
+      "required":["StackDefinitions"],
+      "members":{
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description to help you identify the stack refactor.</p>"
+        },
+        "EnableStackCreation":{
+          "shape":"EnableStackCreation",
+          "documentation":"<p>Determines if a new stack is created with the refactor.</p>"
+        },
+        "ResourceMappings":{
+          "shape":"ResourceMappings",
+          "documentation":"<p>The mappings for the stack resource <code>Source</code> and stack resource <code>Destination</code>.</p>"
+        },
+        "StackDefinitions":{
+          "shape":"StackDefinitions",
+          "documentation":"<p>The stacks being refactored.</p>"
+        }
+      }
+    },
+    "CreateStackRefactorOutput":{
+      "type":"structure",
+      "required":["StackRefactorId"],
+      "members":{
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        }
+      }
+    },
     "CreateStackSetInput":{
       "type":"structure",
       "required":["StackSetName"],
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name to associate with the stack set. The name must be unique in the Region where you create your stack set.</p> <note> <p>A stack name can contain only alphanumeric characters (case-sensitive) and hyphens. It must start with an alphabetic character and can't be longer than 128 characters.</p> </note>"
+          "documentation":"<p>The name to associate with the StackSet. The name must be unique in the Region where you create your StackSet.</p> <note> <p>A stack name can contain only alphanumeric characters (case-sensitive) and hyphens. It must start with an alphabetic character and can't be longer than 128 characters.</p> </note>"
         },
         "Description":{
           "shape":"Description",
-          "documentation":"<p>A description of the stack set. You can use the description to identify the stack set's purpose or other important information.</p>"
+          "documentation":"<p>A description of the StackSet. You can use the description to identify the StackSet's purpose or other important information.</p>"
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify either the TemplateBody or the TemplateURL parameter, but not both.</p>"
+          "documentation":"<p>The structure that contains the template body, with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify either the <code>TemplateBody</code> or the <code>TemplateURL</code> parameter, but not both.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>The location of the file that contains the template body. The URL must point to a template (maximum size: 460,800 bytes) that's located in an Amazon S3 bucket or a Systems Manager document.</p> <p>Conditional: You must specify either the TemplateBody or the TemplateURL parameter, but not both.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template (maximum size: 1 MB) that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>. S3 static website URLs are not supported.</p> <p>Conditional: You must specify either the <code>TemplateBody</code> or the <code>TemplateURL</code> parameter, but not both.</p>"
         },
         "StackId":{
           "shape":"StackId",
-          "documentation":"<p>The stack ID you are importing into a new stack set. Specify the Amazon Resource Name (ARN) of the stack.</p>"
+          "documentation":"<p>The stack ID you are importing into a new StackSet. Specify the Amazon Resource Name (ARN) of the stack.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>The input parameters for the stack set template.</p>"
+          "documentation":"<p>The input parameters for the StackSet template.</p>"
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack set template contains certain capabilities in order for CloudFormation to create the stack set and related stack instances.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those stack sets, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some templates reference macros. If your stack set template references one or more macros, you must create the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To create the stack set directly, you must acknowledge this capability. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Using CloudFormation Macros to Perform Custom Processing on Templates</a>.</p> <important> <p>Stack sets with service-managed permissions don't currently support the use of macros in templates. (This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail.</p> </important> </li> </ul>"
+          "documentation":"<p>In some cases, you must explicitly acknowledge that your StackSet template contains certain capabilities in order for CloudFormation to create the StackSet and related stack instances.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account; for example, by creating new IAM users. For those StackSets, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some templates reference macros. If your StackSet template references one or more macros, you must create the StackSet directly from the processed template, without first reviewing the resulting changes in a change set. To create the StackSet directly, you must acknowledge this capability. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> <important> <p>StackSets with service-managed permissions don't currently support the use of macros in templates. (This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-include.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a StackSet with service-managed permissions, if you reference a macro in your template the StackSet operation will fail.</p> </important> </li> </ul>"
         },
         "Tags":{
           "shape":"Tags",
-          "documentation":"<p>The key-value pairs to associate with this stack set and the stacks created from it. CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified.</p> <p>If you specify tags as part of a <code>CreateStackSet</code> action, CloudFormation checks to see if you have the required IAM permission to tag resources. If you don't, the entire <code>CreateStackSet</code> action fails with an <code>access denied</code> error, and the stack set is not created.</p>"
+          "documentation":"<p>The key-value pairs to associate with this StackSet and the stacks created from it. CloudFormation also propagates these tags to supported resources that are created in the stacks. A maximum number of 50 tags can be specified.</p> <p>If you specify tags as part of a <code>CreateStackSet</code> action, CloudFormation checks to see if you have the required IAM permission to tag resources. If you don't, the entire <code>CreateStackSet</code> action fails with an <code>access denied</code> error, and the StackSet is not created.</p>"
         },
         "AdministrationRoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to use to create this stack set.</p> <p>Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html\">Prerequisites: Granting Permissions for Stack Set Operations</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to use to create this StackSet.</p> <p>Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific StackSets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a> in the <i>CloudFormation User Guide</i>.</p> <p>Valid only if the permissions model is <code>SELF_MANAGED</code>.</p>"
         },
         "ExecutionRoleName":{
           "shape":"ExecutionRoleName",
-          "documentation":"<p>The name of the IAM execution role to use to create the stack set. If you do not specify an execution role, CloudFormation uses the <code>AWSCloudFormationStackSetExecutionRole</code> role for the stack set operation.</p> <p>Specify an IAM role only if you are using customized execution roles to control which stack resources users and groups can include in their stack sets.</p>"
+          "documentation":"<p>The name of the IAM execution role to use to create the StackSet. If you do not specify an execution role, CloudFormation uses the <code>AWSCloudFormationStackSetExecutionRole</code> role for the StackSet operation.</p> <p>Specify an IAM role only if you are using customized execution roles to control which stack resources users and groups can include in their StackSets.</p> <p>Valid only if the permissions model is <code>SELF_MANAGED</code>.</p>"
         },
         "PermissionModel":{
           "shape":"PermissionModels",
-          "documentation":"<p>Describes how the IAM roles required for stack set operations are created. By default, <code>SELF-MANAGED</code> is specified.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant Self-Managed Stack Set Permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-service-managed.html\">Grant Service-Managed Stack Set Permissions</a>.</p> </li> </ul>"
+          "documentation":"<p>Describes how the IAM roles required for StackSet operations are created. By default, <code>SELF-MANAGED</code> is specified.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-activate-trusted-access.html\">Activate trusted access for StackSets with Organizations</a>.</p> </li> </ul>"
         },
         "AutoDeployment":{
           "shape":"AutoDeployment",
-          "documentation":"<p>Describes whether StackSets automatically deploys to Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if <code>PermissionModel</code> is <code>SERVICE_MANAGED</code>.</p>"
+          "documentation":"<p>Describes whether StackSets automatically deploys to Organizations accounts that are added to the target organization or organizational unit (OU). For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-manage-auto-deployment.html\">Enable or disable automatic deployments for StackSets in Organizations</a> in the <i>CloudFormation User Guide</i>.</p> <p>Required if the permissions model is <code>SERVICE_MANAGED</code>. (Not used with self-managed permissions.)</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>To create a stack set with service-managed permissions while signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>To create a stack set with service-managed permissions while signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated admin in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul> <p>Stack sets with service-managed permissions are created in the management account, including stack sets that are created by delegated administrators.</p>"
+          "documentation":"<p>Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>To create a StackSet with service-managed permissions while signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>To create a StackSet with service-managed permissions while signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated admin in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul> <p>StackSets with service-managed permissions are created in the management account, including StackSets that are created by delegated administrators.</p> <p>Valid only if the permissions model is <code>SERVICE_MANAGED</code>.</p>"
         },
         "ClientRequestToken":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>A unique identifier for this <code>CreateStackSet</code> request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to create another stack set with the same name. You might retry <code>CreateStackSet</code> requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p>",
+          "documentation":"<p>A unique identifier for this <code>CreateStackSet</code> request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to create another StackSet with the same name. You might retry <code>CreateStackSet</code> requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p>",
           "idempotencyToken":true
         },
         "ManagedExecution":{
           "shape":"ManagedExecution",
-          "documentation":"<p>Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.</p>"
+          "documentation":"<p>Describes whether CloudFormation performs non-conflicting operations concurrently and queues conflicting operations.</p>"
         }
       }
     },
@@ -2278,14 +2368,13 @@
       "members":{
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The ID of the stack set that you're creating.</p>"
+          "documentation":"<p>The ID of the StackSet that you're creating.</p>"
         }
       }
     },
     "CreatedButModifiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource exists, but has been changed.</p>",
       "error":{
         "code":"CreatedButModifiedException",
@@ -2297,20 +2386,18 @@
     "CreationTime":{"type":"timestamp"},
     "DeactivateOrganizationsAccessInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeactivateOrganizationsAccessOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeactivateTypeInput":{
       "type":"structure",
       "members":{
         "TypeName":{
           "shape":"TypeName",
-          "documentation":"<p>The type name of the extension, in this account and Region. If you specified a type name alias when enabling the extension, use the type name alias.</p> <p>Conditional: You must specify either <code>Arn</code>, or <code>TypeName</code> and <code>Type</code>.</p>"
+          "documentation":"<p>The type name of the extension in this account and Region. If you specified a type name alias when enabling the extension, use the type name alias.</p> <p>Conditional: You must specify either <code>Arn</code>, or <code>TypeName</code> and <code>Type</code>.</p>"
         },
         "Type":{
           "shape":"ThirdPartyType",
@@ -2318,14 +2405,13 @@
         },
         "Arn":{
           "shape":"PrivateTypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the extension, in this account and Region.</p> <p>Conditional: You must specify either <code>Arn</code>, or <code>TypeName</code> and <code>Type</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the extension in this account and Region.</p> <p>Conditional: You must specify either <code>Arn</code>, or <code>TypeName</code> and <code>Type</code>.</p>"
         }
       }
     },
     "DeactivateTypeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteChangeSetInput":{
       "type":"structure",
@@ -2344,8 +2430,7 @@
     },
     "DeleteChangeSetOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the <a>DeleteChangeSet</a> action.</p>"
     },
     "DeleteGeneratedTemplateInput":{
@@ -2395,11 +2480,11 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to delete stack instances for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to delete stack instances for.</p>"
         },
         "Accounts":{
           "shape":"AccountList",
-          "documentation":"<p>[Self-managed permissions] The names of the Amazon Web Services accounts that you want to delete stack instances for.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
+          "documentation":"<p>[Self-managed permissions] The account IDs of the Amazon Web Services accounts that you want to delete stack instances for.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
         },
         "DeploymentTargets":{
           "shape":"DeploymentTargets",
@@ -2407,24 +2492,24 @@
         },
         "Regions":{
           "shape":"RegionList",
-          "documentation":"<p>The Amazon Web Services Regions where you want to delete stack set instances.</p>"
+          "documentation":"<p>The Amazon Web Services Regions where you want to delete StackSet instances.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>Preferences for how CloudFormation performs this stack set operation.</p>"
+          "documentation":"<p>Preferences for how CloudFormation performs this StackSet operation.</p>"
         },
         "RetainStacks":{
           "shape":"RetainStacks",
-          "documentation":"<p>Removes the stack instances from the specified stack set, but doesn't delete the stacks. You can't reassociate a retained stack or add an existing, saved stack to a new stack set.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-ops-options\">Stack set operation options</a>.</p>"
+          "documentation":"<p>Removes the stack instances from the specified StackSet, but doesn't delete the stacks. You can't reassociate a retained stack or add an existing, saved stack to a new stack set.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options\">StackSet operation options</a>.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the stack set operation only once, even if you retry the request multiple times. You can retry stack set operation requests to ensure that CloudFormation successfully received them.</p> <p>Repeating this stack set operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
+          "documentation":"<p>The unique identifier for this StackSet operation.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the StackSet operation only once, even if you retry the request multiple times. You can retry StackSet operation requests to ensure that CloudFormation successfully received them.</p> <p>Repeating this StackSet operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
           "idempotencyToken":true
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -2433,7 +2518,7 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p>"
+          "documentation":"<p>The unique identifier for this StackSet operation.</p>"
         }
       }
     },
@@ -2443,18 +2528,17 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you're deleting. You can obtain this value by running <a>ListStackSets</a>.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you're deleting. You can obtain this value by running <a>ListStackSets</a>.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
     "DeleteStackSetOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletionMode":{
       "type":"string",
@@ -2469,22 +2553,22 @@
       "members":{
         "Accounts":{
           "shape":"AccountList",
-          "documentation":"<p>The names of one or more Amazon Web Services accounts for which you want to deploy stack set updates.</p>"
+          "documentation":"<p>The Amazon Web Services account IDs where you want to perform stack operations. How these accounts are used depends on the <code>AccountFilterType</code> property.</p> <p>If you have many account numbers, you can provide those accounts using the <code>AccountsUrl</code> property instead.</p>"
         },
         "AccountsUrl":{
           "shape":"AccountsUrl",
-          "documentation":"<p>Returns the value of the <code>AccountsUrl</code> property.</p>"
+          "documentation":"<p>The Amazon S3 URL path to a file that contains a list of Amazon Web Services account IDs. The file format must be either <code>.csv</code> or <code>.txt</code>, and the data can be comma-separated or new-line-separated. There is currently a 10MB limit for the data (approximately 800,000 accounts).</p> <p>This property serves the same purpose as <code>Accounts</code> but allows you to specify a large number of accounts.</p>"
         },
         "OrganizationalUnitIds":{
           "shape":"OrganizationalUnitIdList",
-          "documentation":"<p>The organization root ID or organizational unit (OU) IDs to which StackSets deploys.</p>"
+          "documentation":"<p>The organization root ID or organizational unit (OU) IDs where you want to perform stack operations. CloudFormation will perform operations on accounts within these OUs and their child OUs.</p>"
         },
         "AccountFilterType":{
           "shape":"AccountFilterType",
-          "documentation":"<p>Limit deployment targets to individual accounts or include additional accounts with provided OUs.</p> <p>The following is a list of possible values for the <code>AccountFilterType</code> operation.</p> <ul> <li> <p> <code>INTERSECTION</code>: StackSets deploys to the accounts specified in <code>Accounts</code> parameter. </p> </li> <li> <p> <code>DIFFERENCE</code>: StackSets excludes the accounts specified in <code>Accounts</code> parameter. This enables user to avoid certain accounts within an OU such as suspended accounts.</p> </li> <li> <p> <code>UNION</code>: StackSets includes additional accounts deployment targets. </p> <p>This is the default value if <code>AccountFilterType</code> is not provided. This enables user to update an entire OU and individual accounts from a different OU in one request, which used to be two separate requests.</p> </li> <li> <p> <code>NONE</code>: Deploys to all the accounts in specified organizational units (OU).</p> </li> </ul>"
+          "documentation":"<p>Refines which accounts will have stack operations performed on them by specifying how to use the <code>Accounts</code> and <code>OrganizationalUnitIds</code> properties together.</p> <p>The following values determine how CloudFormation selects target accounts:</p> <ul> <li> <p> <code>INTERSECTION</code>: Performs stack operations only on specific individual accounts within the selected OUs. Only accounts that are both specified in the <code>Accounts</code> property and belong to the specified OUs will be targeted.</p> </li> <li> <p> <code>DIFFERENCE</code>: Performs stack operations on all accounts in the selected OUs except for specific accounts listed in the <code>Accounts</code> property. This enables you to exclude certain accounts within an OU, such as suspended accounts.</p> </li> <li> <p> <code>UNION</code>: Performs stack operations on the specified OUs plus additional individual accounts listed in the <code>Accounts</code> property. This is the default value if <code>AccountFilterType</code> is not provided. This lets you target an entire OU and individual accounts from a different OU in one request. Note that <code>UNION</code> is not supported for <code>CreateStackInstances</code> operations.</p> </li> <li> <p> <code>NONE</code>: Performs stack operations on all accounts in the specified organizational units (OUs).</p> </li> </ul>"
         }
       },
-      "documentation":"<p>[Service-managed permissions] The Organizations accounts to which StackSets deploys. StackSets doesn't deploy stack instances to the organization management account, even if the organization management account is in your organization or in an OU in your organization.</p> <p>For update operations, you can specify either <code>Accounts</code> or <code>OrganizationalUnitIds</code>. For create and delete operations, specify <code>OrganizationalUnitIds</code>.</p>"
+      "documentation":"<p>Specifies the Organizations accounts where you want to create, update, or delete stack instances. You can target either your entire organization or specific accounts using organizational units (OUs) and account filter options.</p> <p>CloudFormation doesn't deploy stack instances to the organization management account, even if the organization management account is in your organization or in an OU in your organization.</p> <p>When performing create operations, if you specify both <code>OrganizationalUnitIds</code> and <code>Accounts</code>, you must also specify the <code>AccountFilterType</code> property.</p>"
     },
     "DeprecatedStatus":{
       "type":"string",
@@ -2516,8 +2600,7 @@
     },
     "DeregisterTypeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountLimitsInput":{
       "type":"structure",
@@ -2561,7 +2644,7 @@
         },
         "LogicalResourceId":{
           "shape":"LogicalResourceId",
-          "documentation":"<p>If specified, lists only the hooks related to the specified <code>LogicalResourceId</code>.</p>"
+          "documentation":"<p>If specified, lists only the Hooks related to the specified <code>LogicalResourceId</code>.</p>"
         }
       }
     },
@@ -2578,7 +2661,7 @@
         },
         "Hooks":{
           "shape":"ChangeSetHooks",
-          "documentation":"<p>List of hook objects.</p>"
+          "documentation":"<p>List of Hook objects.</p>"
         },
         "Status":{
           "shape":"ChangeSetHooksStatus",
@@ -2658,7 +2741,7 @@
         },
         "Status":{
           "shape":"ChangeSetStatus",
-          "documentation":"<p>The current status of the change set, such as <code>CREATE_IN_PROGRESS</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The current status of the change set, such as <code>CREATE_PENDING</code>, <code>CREATE_COMPLETE</code>, or <code>FAILED</code>.</p>"
         },
         "StatusReason":{
           "shape":"ChangeSetStatusReason",
@@ -2706,7 +2789,7 @@
         },
         "ImportExistingResources":{
           "shape":"ImportExistingResources",
-          "documentation":"<p>Indicates if the change set imports resources that already exist.</p> <note> <p>This parameter can only import resources that have <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html\">custom names</a> in templates. To import resources that do not accept custom names, such as EC2 instances, use the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html\">resource import</a> feature instead.</p> </note>"
+          "documentation":"<p>Indicates if the change set imports resources that already exist.</p> <note> <p>This parameter can only import resources that have <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html\">custom names</a> in templates. To import resources that do not accept custom names, such as EC2 instances, use the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html\">resource import</a> feature instead.</p> </note>"
         }
       },
       "documentation":"<p>The output for the <a>DescribeChangeSet</a> action.</p>"
@@ -2837,7 +2920,7 @@
         },
         "Status":{
           "shape":"ResourceScanStatus",
-          "documentation":"<p>Status of the resource scan.</p> <dl> <dt> INPROGRESS </dt> <dd> <p>The resource scan is still in progress.</p> </dd> <dt> COMPLETE </dt> <dd> <p>The resource scan is complete.</p> </dd> <dt> EXPIRED </dt> <dd> <p>The resource scan has expired.</p> </dd> <dt> FAILED </dt> <dd> <p>The resource scan has failed.</p> </dd> </dl>"
+          "documentation":"<p>Status of the resource scan.</p> <dl> <dt> IN_PROGRESS </dt> <dd> <p>The resource scan is still in progress.</p> </dd> <dt> COMPLETE </dt> <dd> <p>The resource scan is complete.</p> </dd> <dt> EXPIRED </dt> <dd> <p>The resource scan has expired.</p> </dd> <dt> FAILED </dt> <dd> <p>The resource scan has failed.</p> </dd> </dl>"
         },
         "StatusReason":{
           "shape":"ResourceScanStatusReason",
@@ -2865,7 +2948,11 @@
         },
         "ResourcesRead":{
           "shape":"ResourcesRead",
-          "documentation":"<p>The number of resources that were read. This is only available for scans with a <code>Status</code> set to <code>COMPLETE</code>, <code>EXPIRED</code>, or <code>FAILED </code>.</p> <note> <p>This field may be 0 if the resource scan failed with a <code>ResourceScanLimitExceededException</code>.</p> </note>"
+          "documentation":"<p>The number of resources that were read. This is only available for scans with a <code>Status</code> set to <code>COMPLETE</code>, <code>EXPIRED</code>, or <code>FAILED</code>.</p> <note> <p>This field may be 0 if the resource scan failed with a <code>ResourceScanLimitExceededException</code>.</p> </note>"
+        },
+        "ScanFilters":{
+          "shape":"ScanFilters",
+          "documentation":"<p>The scan filters that were used.</p>"
         }
       }
     },
@@ -2898,7 +2985,7 @@
         },
         "StackDriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack's actual configuration compared to its expected configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the stack's actual configuration compared to its expected configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: CloudFormation could not run drift detection for a resource in the stack. See the <code>DetectionStatusReason</code> for details.</p> </li> </ul>"
         },
         "DetectionStatus":{
           "shape":"StackDriftDetectionStatus",
@@ -2923,7 +3010,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2956,7 +3043,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or the unique stack ID of the stack set that you want to get stack instance information for.</p>"
+          "documentation":"<p>The name or the unique stack ID of the StackSet that you want to get stack instance information for.</p>"
         },
         "StackInstanceAccount":{
           "shape":"Account",
@@ -2968,7 +3055,7 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -2981,6 +3068,49 @@
         }
       }
     },
+    "DescribeStackRefactorInput":{
+      "type":"structure",
+      "required":["StackRefactorId"],
+      "members":{
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        }
+      }
+    },
+    "DescribeStackRefactorOutput":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description to help you identify the refactor.</p>"
+        },
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        },
+        "StackIds":{
+          "shape":"StackIds",
+          "documentation":"<p>The unique ID for each stack.</p>"
+        },
+        "ExecutionStatus":{
+          "shape":"StackRefactorExecutionStatus",
+          "documentation":"<p>The stack refactor execution operation status that's provided after calling the <a>ExecuteStackRefactor</a> action.</p>"
+        },
+        "ExecutionStatusReason":{
+          "shape":"ExecutionStatusReason",
+          "documentation":"<p>A detailed explanation for the stack refactor <code>ExecutionStatus</code>.</p>"
+        },
+        "Status":{
+          "shape":"StackRefactorStatus",
+          "documentation":"<p>The stack refactor operation status that's provided after calling the <a>CreateStackRefactor</a> action.</p>"
+        },
+        "StatusReason":{
+          "shape":"StackRefactorStatusReason",
+          "documentation":"<p>A detailed explanation for the stack refactor operation <code>Status</code>.</p>"
+        }
+      }
+    },
     "DescribeStackResourceDriftsInput":{
       "type":"structure",
       "required":["StackName"],
@@ -2991,7 +3121,7 @@
         },
         "StackResourceDriftStatusFilters":{
           "shape":"StackResourceDriftStatusFilters",
-          "documentation":"<p>The resource drift status values to use as filters for the resource drift results returned.</p> <ul> <li> <p> <code>DELETED</code>: The resource differs from its expected template configuration in that the resource has been deleted.</p> </li> <li> <p> <code>MODIFIED</code>: One or more resource properties differ from their expected template values.</p> </li> <li> <p> <code>IN_SYNC</code>: The resource's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation doesn't currently return this value.</p> </li> </ul>"
+          "documentation":"<p>The resource drift status values to use as filters for the resource drift results returned.</p> <ul> <li> <p> <code>DELETED</code>: The resource differs from its expected template configuration in that the resource has been deleted.</p> </li> <li> <p> <code>MODIFIED</code>: One or more resource properties differ from their expected template values.</p> </li> <li> <p> <code>IN_SYNC</code>: The resource's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation doesn't currently return this value.</p> </li> <li> <p> <code>UNKNOWN</code>: CloudFormation could not run drift detection for the resource.</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -3026,11 +3156,11 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul>"
         },
         "LogicalResourceId":{
           "shape":"LogicalResourceId",
-          "documentation":"<p>The logical name of the resource as specified in the template.</p> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The logical name of the resource as specified in the template.</p>"
         }
       },
       "documentation":"<p>The input for <a>DescribeStackResource</a> action.</p>"
@@ -3040,7 +3170,7 @@
       "members":{
         "StackResourceDetail":{
           "shape":"StackResourceDetail",
-          "documentation":"<p>A <code>StackResourceDetail</code> structure containing the description of the specified resource in the specified stack.</p>"
+          "documentation":"<p>A <code>StackResourceDetail</code> structure that contains the description of the specified resource in the specified stack.</p>"
         }
       },
       "documentation":"<p>The output for a <a>DescribeStackResource</a> action.</p>"
@@ -3050,15 +3180,15 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p> <p>Required: Conditional. If you don't specify <code>StackName</code>, you must specify <code>PhysicalResourceId</code>.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Required: Conditional. If you don't specify <code>StackName</code>, you must specify <code>PhysicalResourceId</code>.</p>"
         },
         "LogicalResourceId":{
           "shape":"LogicalResourceId",
-          "documentation":"<p>The logical name of the resource as specified in the template.</p> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The logical name of the resource as specified in the template.</p>"
         },
         "PhysicalResourceId":{
           "shape":"PhysicalResourceId",
-          "documentation":"<p>The name or unique identifier that corresponds to a physical instance ID of a resource supported by CloudFormation.</p> <p>For example, for an Amazon Elastic Compute Cloud (EC2) instance, <code>PhysicalResourceId</code> corresponds to the <code>InstanceId</code>. You can pass the EC2 <code>InstanceId</code> to <code>DescribeStackResources</code> to find which stack the instance belongs to and what other resources are part of the stack.</p> <p>Required: Conditional. If you don't specify <code>PhysicalResourceId</code>, you must specify <code>StackName</code>.</p> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or unique identifier that corresponds to a physical instance ID of a resource supported by CloudFormation.</p> <p>For example, for an Amazon Elastic Compute Cloud (EC2) instance, <code>PhysicalResourceId</code> corresponds to the <code>InstanceId</code>. You can pass the EC2 <code>InstanceId</code> to <code>DescribeStackResources</code> to find which stack the instance belongs to and what other resources are part of the stack.</p> <p>Required: Conditional. If you don't specify <code>PhysicalResourceId</code>, you must specify <code>StackName</code>.</p>"
         }
       },
       "documentation":"<p>The input for <a>DescribeStackResources</a> action.</p>"
@@ -3079,11 +3209,11 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set whose description you want.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet whose description you want.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -3096,15 +3226,15 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or the unique stack ID of the stack set for the stack operation.</p>"
+          "documentation":"<p>The name or the unique stack ID of the StackSet for the stack operation.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique ID of the stack set operation.</p>"
+          "documentation":"<p>The unique ID of the StackSet operation.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -3113,7 +3243,7 @@
       "members":{
         "StackSetOperation":{
           "shape":"StackSetOperation",
-          "documentation":"<p>The specified stack set operation.</p>"
+          "documentation":"<p>The specified StackSet operation.</p>"
         }
       }
     },
@@ -3122,7 +3252,7 @@
       "members":{
         "StackSet":{
           "shape":"StackSet",
-          "documentation":"<p>The specified stack set.</p>"
+          "documentation":"<p>The specified StackSet.</p>"
         }
       }
     },
@@ -3131,7 +3261,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<note> <p>If you don't pass a parameter to <code>StackName</code>, the API returns a response that describes all resources in the account, which can impact performance. This requires <code>ListStacks</code> and <code>DescribeStacks</code> permissions.</p> <p>Consider using the <a>ListStacks</a> API if you're not passing a parameter to <code>StackName</code>.</p> <p>The IAM policy below can be added to IAM policies when you want to limit resource-level permissions and avoid returning a response when no parameter is sent in the request:</p> <p>{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Deny\", \"Action\": \"cloudformation:DescribeStacks\", \"NotResource\": \"arn:aws:cloudformation:*:*:stack/*/*\" }] }</p> </note> <p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<note> <p>If you don't pass a parameter to <code>StackName</code>, the API returns a response that describes all resources in the account, which can impact performance. This requires <code>ListStacks</code> and <code>DescribeStacks</code> permissions.</p> <p>Consider using the <a>ListStacks</a> API if you're not passing a parameter to <code>StackName</code>.</p> <p>The IAM policy below can be added to IAM policies when you want to limit resource-level permissions and avoid returning a response when no parameter is sent in the request:</p> <p>{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect\": \"Deny\", \"Action\": \"cloudformation:DescribeStacks\", \"NotResource\": \"arn:aws:cloudformation:*:*:stack/*/*\" }] }</p> </note> <p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -3220,7 +3350,7 @@
         },
         "Schema":{
           "shape":"TypeSchema",
-          "documentation":"<p>The schema that defines the extension.</p> <p>For more information about extension schemas, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html\">Resource type schema</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i>.</p>"
+          "documentation":"<p>The schema that defines the extension.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-schema.html\">Resource type schema</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i> and the <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/hooks-userguide/what-is-cloudformation-hooks.html\">CloudFormation Hooks User Guide</a>.</p>"
         },
         "ProvisioningType":{
           "shape":"ProvisioningType",
@@ -3264,7 +3394,7 @@
         },
         "ConfigurationSchema":{
           "shape":"ConfigurationSchema",
-          "documentation":"<p>A JSON string that represent the current configuration data for the extension in this account and Region.</p> <p>To set the configuration data for an extension, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html\">SetTypeConfiguration</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-set-configuration.html\">Edit configuration data for extensions in your account</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>A JSON string that represent the current configuration data for the extension in this account and Region.</p> <p>To set the configuration data for an extension, use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html\">SetTypeConfiguration</a>.</p>"
         },
         "PublisherId":{
           "shape":"PublisherId",
@@ -3396,20 +3526,20 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name of the stack set on which to perform the drift detection operation.</p>"
+          "documentation":"<p>The name of the StackSet on which to perform the drift detection operation.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>The user-specified preferences for how CloudFormation performs a stack set operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-ops-options\">Stack set operation options</a>.</p>"
+          "documentation":"<p>The user-specified preferences for how CloudFormation performs a StackSet operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options\">StackSet operation options</a>.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p> <i>The ID of the stack set operation.</i> </p>",
+          "documentation":"<p> <i>The ID of the StackSet operation.</i> </p>",
           "idempotencyToken":true
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -3418,10 +3548,11 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The ID of the drift detection stack set operation.</p> <p>You can use this operation ID with <a>DescribeStackSetOperation</a> to monitor the progress of the drift detection operation.</p>"
+          "documentation":"<p>The ID of the drift detection StackSet operation.</p> <p>You can use this operation ID with <a>DescribeStackSetOperation</a> to monitor the progress of the drift detection operation.</p>"
         }
       }
     },
+    "DetectionReason":{"type":"string"},
     "DifferenceType":{
       "type":"string",
       "enum":[
@@ -3435,6 +3566,7 @@
       "type":"integer",
       "min":0
     },
+    "EnableStackCreation":{"type":"boolean"},
     "EnableTerminationProtection":{"type":"boolean"},
     "ErrorCode":{
       "type":"string",
@@ -3451,11 +3583,11 @@
       "members":{
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
+          "documentation":"<p>Structure that contains the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must pass <code>TemplateBody</code> or <code>TemplateURL</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>Location of file containing the template body. The URL must point to a template that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -3511,10 +3643,19 @@
     },
     "ExecuteChangeSetOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the <a>ExecuteChangeSet</a> action.</p>"
     },
+    "ExecuteStackRefactorInput":{
+      "type":"structure",
+      "required":["StackRefactorId"],
+      "members":{
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        }
+      }
+    },
     "ExecutionRoleName":{
       "type":"string",
       "max":64,
@@ -3532,6 +3673,7 @@
         "OBSOLETE"
       ]
     },
+    "ExecutionStatusReason":{"type":"string"},
     "Export":{
       "type":"structure",
       "members":{
@@ -3548,7 +3690,7 @@
           "documentation":"<p>The value of the exported output, such as a resource physical ID. This value is defined in the <code>Export</code> field in the associated stack's <code>Outputs</code> section.</p>"
         }
       },
-      "documentation":"<p>The <code>Export</code> structure describes the exported output values for a stack.</p>"
+      "documentation":"<p>The <code>Export</code> structure describes the exported output values for a stack.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-exports.html\">Get exported outputs from a deployed CloudFormation stack</a>.</p>"
     },
     "ExportName":{"type":"string"},
     "ExportValue":{"type":"string"},
@@ -3588,8 +3730,7 @@
     },
     "GeneratedTemplateNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The generated template was not found.</p>",
       "error":{
         "code":"GeneratedTemplateNotFound",
@@ -3670,7 +3811,7 @@
       "members":{
         "StackPolicyBody":{
           "shape":"StackPolicyBody",
-          "documentation":"<p>Structure containing the stack policy body. (For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>.)</p>"
+          "documentation":"<p>Structure that contains the stack policy body. (For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>.)</p>"
         }
       },
       "documentation":"<p>The output for the <a>GetStackPolicy</a> action.</p>"
@@ -3680,7 +3821,7 @@
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that's associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul>"
         },
         "ChangeSetName":{
           "shape":"ChangeSetNameOrId",
@@ -3698,7 +3839,7 @@
       "members":{
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body.</p> <p>CloudFormation returns the same template that was used when the stack was created.</p>"
+          "documentation":"<p>Structure that contains the template body.</p> <p>CloudFormation returns the same template that was used when the stack was created.</p>"
         },
         "StagesAvailable":{
           "shape":"StageList",
@@ -3712,11 +3853,11 @@
       "members":{
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
+          "documentation":"<p>Structure that contains the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template (max size: 1 MB) that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
         },
         "StackName":{
           "shape":"StackNameOrId",
@@ -3724,11 +3865,11 @@
         },
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name or unique ID of the stack set from which the stack was created.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet from which the stack was created.</p> <p>Conditional: You must specify only one of the following parameters: <code>StackName</code>, <code>StackSetName</code>, <code>TemplateBody</code>, or <code>TemplateURL</code>.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         },
         "TemplateSummaryConfig":{
           "shape":"TemplateSummaryConfig",
@@ -3750,7 +3891,7 @@
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>The capabilities found within the template. If your template contains IAM resources, you must specify the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> value for this parameter when you use the <a>CreateStack</a> or <a>UpdateStack</a> actions with your template; otherwise, those actions return an <code>InsufficientCapabilities</code> error.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
+          "documentation":"<p>The capabilities found within the template. If your template contains IAM resources, you must specify the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> value for this parameter when you use the <a>CreateStack</a> or <a>UpdateStack</a> actions with your template; otherwise, those actions return an <code>InsufficientCapabilities</code> error.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
         },
         "CapabilitiesReason":{
           "shape":"CapabilitiesReason",
@@ -3778,7 +3919,7 @@
         },
         "Warnings":{
           "shape":"Warnings",
-          "documentation":"<p>An object containing any warnings returned.</p>"
+          "documentation":"<p>An object that contains any warnings returned.</p>"
         }
       },
       "documentation":"<p>The output for the <a>GetTemplateSummary</a> action.</p>"
@@ -3819,6 +3960,12 @@
       "max":100,
       "min":1
     },
+    "HookInvocationId":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+    },
     "HookInvocationPoint":{
       "type":"string",
       "enum":["PRE_PROVISION"]
@@ -3831,8 +3978,7 @@
     },
     "HookResultNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target doesn't have any requested Hook invocations.</p>",
       "error":{
         "code":"HookResultNotFound",
@@ -3848,33 +3994,57 @@
     "HookResultSummary":{
       "type":"structure",
       "members":{
+        "HookResultId":{
+          "shape":"HookInvocationId",
+          "documentation":"<p>The unique identifier for this Hook invocation result.</p>"
+        },
         "InvocationPoint":{
           "shape":"HookInvocationPoint",
-          "documentation":"<p>The exact point in the provisioning logic where the Hook runs.</p>"
+          "documentation":"<p>The specific point in the provisioning process where the Hook is invoked.</p>"
         },
         "FailureMode":{
           "shape":"HookFailureMode",
-          "documentation":"<p>The failure mode of the invocation. The following are potential modes:</p> <ul> <li> <p> <code>FAIL</code>: If the hook invocation returns a failure, then the requested target operation should fail.</p> </li> <li> <p> <code>WARN</code>: If the hook invocation returns a failure, then the requested target operation should warn.</p> </li> </ul>"
+          "documentation":"<p>The failure mode of the invocation.</p>"
         },
         "TypeName":{
           "shape":"HookTypeName",
-          "documentation":"<p>The type name of the Hook being invoked.</p>"
+          "documentation":"<p>The name of the Hook that was invoked.</p>"
         },
         "TypeVersionId":{
           "shape":"HookTypeVersionId",
-          "documentation":"<p>The version of the Hook being invoked.</p>"
+          "documentation":"<p>The version of the Hook that was invoked.</p>"
         },
         "TypeConfigurationVersionId":{
           "shape":"HookTypeConfigurationVersionId",
-          "documentation":"<p>The version of the Hook type configuration.</p>"
+          "documentation":"<p>The version of the Hook configuration.</p>"
         },
         "Status":{
           "shape":"HookStatus",
-          "documentation":"<p>The state of the Hook invocation.</p>"
+          "documentation":"<p>The status of the Hook invocation. The following statuses are possible:</p> <ul> <li> <p> <code>HOOK_IN_PROGRESS</code>: The Hook is currently running.</p> </li> <li> <p> <code>HOOK_COMPLETE_SUCCEEDED</code>: The Hook completed successfully.</p> </li> <li> <p> <code>HOOK_COMPLETE_FAILED</code>: The Hook completed but failed validation.</p> </li> <li> <p> <code>HOOK_FAILED</code>: The Hook encountered an error during execution.</p> </li> </ul>"
         },
         "HookStatusReason":{
           "shape":"HookStatusReason",
-          "documentation":"<p>A description of the Hook results status. For example, if the Hook result is in a <code>FAILED</code> state, this may contain additional information for the <code>FAILED</code> state.</p>"
+          "documentation":"<p>A description of the Hook results status. For example, if the Hook result is in a failed state, this may contain additional information for the failed state.</p>"
+        },
+        "InvokedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the Hook was invoked.</p> <p>Only shown in responses when the request does not specify <code>TargetType</code> and <code>TargetId</code> filters.</p>"
+        },
+        "TargetType":{
+          "shape":"ListHookResultsTargetType",
+          "documentation":"<p>The target type that the Hook was invoked against.</p>"
+        },
+        "TargetId":{
+          "shape":"HookResultId",
+          "documentation":"<p>The unique identifier of the Hook invocation target.</p>"
+        },
+        "TypeArn":{
+          "shape":"HookTypeArn",
+          "documentation":"<p>The ARN of the Hook that was invoked.</p>"
+        },
+        "HookExecutionTarget":{
+          "shape":"HookResultId",
+          "documentation":"<p>The ARN of the target stack or request token of the Cloud Control API operation.</p> <p>Only shown in responses when the request does not specify <code>TargetType</code> and <code>TargetId</code> filters.</p>"
         }
       },
       "documentation":"<p>Describes a Hook invocation, its status, and the reason for its status.</p>"
@@ -3908,6 +4078,11 @@
       "max":255,
       "min":1
     },
+    "HookTypeArn":{
+      "type":"string",
+      "max":1024,
+      "pattern":"arn:aws[A-Za-z0-9-]{0,64}:cloudformation:[A-Za-z0-9-]{1,64}:([0-9]{12})?:type/hook/[A-Za-z0-9-]+/?"
+    },
     "HookTypeConfigurationVersionId":{
       "type":"string",
       "max":128,
@@ -3940,11 +4115,11 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name of the stack set. The name must be unique in the Region where you create your stack set.</p>"
+          "documentation":"<p>The name of the StackSet. The name must be unique in the Region where you create your StackSet.</p>"
         },
         "StackIds":{
           "shape":"StackIdList",
-          "documentation":"<p>The IDs of the stacks you are importing into a stack set. You import up to 10 stacks per stack set at a time.</p> <p>Specify either <code>StackIds</code> or <code>StackIdsUrl</code>.</p>"
+          "documentation":"<p>The IDs of the stacks you are importing into a StackSet. You import up to 10 stacks per StackSet at a time.</p> <p>Specify either <code>StackIds</code> or <code>StackIdsUrl</code>.</p>"
         },
         "StackIdsUrl":{
           "shape":"StackIdsUrl",
@@ -3952,20 +4127,20 @@
         },
         "OrganizationalUnitIds":{
           "shape":"OrganizationalUnitIdList",
-          "documentation":"<p>The list of OU ID's to which the stacks being imported has to be mapped as deployment target.</p>"
+          "documentation":"<p>The list of OU ID's to which the imported stacks must be mapped as deployment targets.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>The user-specified preferences for how CloudFormation performs a stack set operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-ops-options\">Stack set operation options</a>.</p>"
+          "documentation":"<p>The user-specified preferences for how CloudFormation performs a StackSet operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options\">StackSet operation options</a>.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>A unique, user defined, identifier for the stack set operation.</p>",
+          "documentation":"<p>A unique, user defined, identifier for the StackSet operation.</p>",
           "idempotencyToken":true
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>For service managed stack sets, specify <code>DELEGATED_ADMIN</code>.</p> </li> </ul>"
+          "documentation":"<p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>For service managed StackSets, specify <code>DELEGATED_ADMIN</code>.</p> </li> </ul>"
         }
       }
     },
@@ -3974,7 +4149,7 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for the stack set operation.</p>"
+          "documentation":"<p>The unique identifier for the StackSet operation.</p>"
         }
       }
     },
@@ -3994,8 +4169,7 @@
     "IncludePropertyValues":{"type":"boolean"},
     "InsufficientCapabilitiesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The template contains resources with capabilities that weren't specified in the Capabilities parameter.</p>",
       "error":{
         "code":"InsufficientCapabilitiesException",
@@ -4006,8 +4180,7 @@
     },
     "InvalidChangeSetStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified change set can't be used to update the stack. For example, the change set status might be <code>CREATE_IN_PROGRESS</code>, or the stack status might be <code>UPDATE_IN_PROGRESS</code>.</p>",
       "error":{
         "code":"InvalidChangeSetStatus",
@@ -4018,8 +4191,7 @@
     },
     "InvalidOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified operation isn't valid.</p>",
       "error":{
         "code":"InvalidOperationException",
@@ -4030,8 +4202,7 @@
     },
     "InvalidStateTransitionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Error reserved for use by the <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html\">CloudFormation CLI</a>. CloudFormation doesn't return this error to users.</p>",
       "error":{
         "code":"InvalidStateTransition",
@@ -4060,8 +4231,7 @@
     "LastUpdatedTime":{"type":"timestamp"},
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for the resource has already been reached.</p> <p>For information about resource and stack limitations, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html\">CloudFormation quotas</a> in the <i>CloudFormation User Guide</i>.</p>",
       "error":{
         "code":"LimitExceededException",
@@ -4132,7 +4302,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p> If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListGeneratedTemplates</code> API action will return at most 50 results in each response. The maximum value is 100.</p>"
+          "documentation":"<p>If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListGeneratedTemplates</code> API action will return at most 50 results in each response. The maximum value is 100.</p>"
         }
       }
     },
@@ -4151,18 +4321,22 @@
     },
     "ListHookResultsInput":{
       "type":"structure",
-      "required":[
-        "TargetType",
-        "TargetId"
-      ],
       "members":{
         "TargetType":{
           "shape":"ListHookResultsTargetType",
-          "documentation":"<p>The type of operation being targeted by the Hook.</p>"
+          "documentation":"<p>Filters results by target type. Currently, only <code>CHANGE_SET</code> and <code>CLOUD_CONTROL</code> are supported filter options.</p> <p>Required when <code>TargetId</code> is specified and cannot be used otherwise.</p>"
         },
         "TargetId":{
           "shape":"HookResultId",
-          "documentation":"<p>The logical ID of the target the operation is acting on by the Hook. If the target is a change set, it's the ARN of the change set.</p> <p>If the target is a Cloud Control API operation, this will be the <code>HookRequestToken</code> returned by the Cloud Control API operation request. For more information on the <code>HookRequestToken</code>, see <a href=\"https://docs.aws.amazon.com/cloudcontrolapi/latest/APIReference/API_ProgressEvent.html\">ProgressEvent</a>.</p>"
+          "documentation":"<p>Filters results by the unique identifier of the target the Hook was invoked against.</p> <p>For change sets, this is the change set ARN. When the target is a Cloud Control API operation, this value must be the <code>HookRequestToken</code> returned by the Cloud Control API request. For more information on the <code>HookRequestToken</code>, see <a href=\"https://docs.aws.amazon.com/cloudcontrolapi/latest/APIReference/API_ProgressEvent.html\">ProgressEvent</a>.</p> <p>Required when <code>TargetType</code> is specified and cannot be used otherwise.</p>"
+        },
+        "TypeArn":{
+          "shape":"HookTypeArn",
+          "documentation":"<p>Filters results by the ARN of the Hook. Can be used alone or in combination with <code>Status</code>.</p>"
+        },
+        "Status":{
+          "shape":"HookStatus",
+          "documentation":"<p>Filters results by the status of Hook invocations. Can only be used in combination with <code>TypeArn</code>. Valid values are:</p> <ul> <li> <p> <code>HOOK_IN_PROGRESS</code>: The Hook is currently running.</p> </li> <li> <p> <code>HOOK_COMPLETE_SUCCEEDED</code>: The Hook completed successfully.</p> </li> <li> <p> <code>HOOK_COMPLETE_FAILED</code>: The Hook completed but failed validation.</p> </li> <li> <p> <code>HOOK_FAILED</code>: The Hook encountered an error during execution.</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4175,11 +4349,11 @@
       "members":{
         "TargetType":{
           "shape":"ListHookResultsTargetType",
-          "documentation":"<p>The type of operation being targeted by the Hook.</p>"
+          "documentation":"<p>The target type.</p>"
         },
         "TargetId":{
           "shape":"HookResultId",
-          "documentation":"<p>The logical ID of the target the operation is acting on by the Hook. If the target is a change set, it's the ARN of the change set.</p> <p>If the target is a Cloud Control API operation, this will be the <code>HooksRequestToken</code> returned by the Cloud Control API operation request. For more information on the <code>HooksRequestToken</code>, see <a href=\"https://docs.aws.amazon.com/cloudcontrolapi/latest/APIReference/API_ProgressEvent.html\">ProgressEvent</a>.</p>"
+          "documentation":"<p>The unique identifier of the Hook invocation target.</p>"
         },
         "HookResults":{
           "shape":"HookResultSummaries",
@@ -4248,7 +4422,7 @@
         },
         "MaxResults":{
           "shape":"BoxedMaxResults",
-          "documentation":"<p> If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListResourceScanRelatedResources</code> API action will return up to 100 results in each response. The maximum value is 100.</p>"
+          "documentation":"<p>If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListResourceScanRelatedResources</code> API action will return up to 100 results in each response. The maximum value is 100.</p>"
         }
       }
     },
@@ -4295,7 +4469,7 @@
         },
         "MaxResults":{
           "shape":"ResourceScannerMaxResults",
-          "documentation":"<p> If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListResourceScanResources</code> API action will return at most 100 results in each response. The maximum value is 100.</p>"
+          "documentation":"<p>If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. By default the <code>ListResourceScanResources</code> API action will return at most 100 results in each response. The maximum value is 100.</p>"
         }
       }
     },
@@ -4321,7 +4495,11 @@
         },
         "MaxResults":{
           "shape":"ResourceScannerMaxResults",
-          "documentation":"<p> If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. The default value is 10. The maximum value is 100.</p>"
+          "documentation":"<p>If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can use for the <code>NextToken</code> parameter to get the next set of results. The default value is 10. The maximum value is 100.</p>"
+        },
+        "ScanTypeFilter":{
+          "shape":"ScanType",
+          "documentation":"<p>The scan type that you want to get summary information about. The default is <code>FULL</code>.</p>"
         }
       }
     },
@@ -4349,7 +4527,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name or unique ID of the stack set that you want to list drifted resources for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to list drifted resources for.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4377,7 +4555,7 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -4400,7 +4578,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to list stack instances for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to list stack instances for.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4424,7 +4602,7 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -4441,13 +4619,76 @@
         }
       }
     },
+    "ListStackRefactorActionsInput":{
+      "type":"structure",
+      "required":["StackRefactorId"],
+      "members":{
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the request doesn't return all the remaining results, <code>NextToken</code> is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's <code>NextToken</code> parameter. If the request returns all results, <code>NextToken</code> is set to <code>null</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can assign to the <code>NextToken</code> request parameter to get the next set of results.</p>"
+        }
+      }
+    },
+    "ListStackRefactorActionsOutput":{
+      "type":"structure",
+      "required":["StackRefactorActions"],
+      "members":{
+        "StackRefactorActions":{
+          "shape":"StackRefactorActions",
+          "documentation":"<p>The stack refactor actions.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the request doesn't return all the remaining results, <code>NextToken</code> is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's <code>NextToken</code> parameter. If the request returns all results, <code>NextToken</code> is set to <code>null</code>.</p>"
+        }
+      }
+    },
+    "ListStackRefactorsInput":{
+      "type":"structure",
+      "members":{
+        "ExecutionStatusFilter":{
+          "shape":"StackRefactorExecutionStatusFilter",
+          "documentation":"<p>Execution status to use as a filter. Specify one or more execution status codes to list only stack refactors with the specified execution status codes.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the request doesn't return all the remaining results, <code>NextToken</code> is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's <code>NextToken</code> parameter. If the request returns all results, <code>NextToken</code> is set to <code>null</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can assign to the <code>NextToken</code> request parameter to get the next set of results.</p>"
+        }
+      }
+    },
+    "ListStackRefactorsOutput":{
+      "type":"structure",
+      "required":["StackRefactorSummaries"],
+      "members":{
+        "StackRefactorSummaries":{
+          "shape":"StackRefactorSummaries",
+          "documentation":"<p>Provides a summary of a stack refactor, including the following:</p> <ul> <li> <p> <code>StackRefactorId</code> </p> </li> <li> <p> <code>Status</code> </p> </li> <li> <p> <code>StatusReason</code> </p> </li> <li> <p> <code>ExecutionStatus</code> </p> </li> <li> <p> <code>ExecutionStatusReason</code> </p> </li> <li> <p> <code>Description</code> </p> </li> </ul>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the request doesn't return all the remaining results, <code>NextToken</code> is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's <code>NextToken</code> parameter. If the request returns all results, <code>NextToken</code> is set to <code>null</code>.</p>"
+        }
+      }
+    },
     "ListStackResourcesInput":{
       "type":"structure",
       "required":["StackName"],
       "members":{
         "StackName":{
           "shape":"StackName",
-          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul> <p>Default: There is no default value.</p>"
+          "documentation":"<p>The name or the unique stack ID that is associated with the stack, which aren't always interchangeable:</p> <ul> <li> <p>Running stacks: You can specify either the stack's name or its unique stack ID.</p> </li> <li> <p>Deleted stacks: You must specify the unique stack ID.</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4476,11 +4717,11 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name or unique ID of the stack set that you want to get automatic deployment targets for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to get automatic deployment targets for.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>A string that identifies the next page of stack set deployment targets that you want to retrieve.</p>"
+          "documentation":"<p>A string that identifies the next page of deployment targets that you want to retrieve.</p>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -4497,7 +4738,7 @@
       "members":{
         "Summaries":{
           "shape":"StackSetAutoDeploymentTargetSummaries",
-          "documentation":"<p>An array of summaries of the deployment targets for the stack set.</p>"
+          "documentation":"<p>An array of summaries of the deployment targets for the StackSet.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4514,11 +4755,11 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to get operation results for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to get operation results for.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The ID of the stack set operation.</p>"
+          "documentation":"<p>The ID of the StackSet operation.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4530,7 +4771,7 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         },
         "Filters":{
           "shape":"OperationResultFilters",
@@ -4557,7 +4798,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to get operation summaries for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to get operation summaries for.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4569,7 +4810,7 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -4578,7 +4819,7 @@
       "members":{
         "Summaries":{
           "shape":"StackSetOperationSummaries",
-          "documentation":"<p>A list of <code>StackSetOperationSummary</code> structures that contain summary information about operations for the specified stack set.</p>"
+          "documentation":"<p>A list of <code>StackSetOperationSummary</code> structures that contain summary information about operations for the specified StackSet.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4599,11 +4840,11 @@
         },
         "Status":{
           "shape":"StackSetStatus",
-          "documentation":"<p>The status of the stack sets that you want to get summary information about.</p>"
+          "documentation":"<p>The status of the StackSets that you want to get summary information about.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -4612,7 +4853,7 @@
       "members":{
         "Summaries":{
           "shape":"StackSetSummaries",
-          "documentation":"<p>A list of <code>StackSetSummary</code> structures that contain information about the user's stack sets.</p>"
+          "documentation":"<p>A list of <code>StackSetSummary</code> structures that contain information about the user's StackSets.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4639,7 +4880,7 @@
       "members":{
         "StackSummaries":{
           "shape":"StackSummaries",
-          "documentation":"<p>A list of <code>StackSummary</code> structures containing information about the specified stacks.</p>"
+          "documentation":"<p>A list of <code>StackSummary</code> structures that contains information about the specified stacks.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -4741,7 +4982,7 @@
       "members":{
         "Visibility":{
           "shape":"Visibility",
-          "documentation":"<p>The scope at which the extensions are visible and usable in CloudFormation operations.</p> <p>Valid values include:</p> <ul> <li> <p> <code>PRIVATE</code>: Extensions that are visible and usable within this account and Region. This includes:</p> <ul> <li> <p>Private extensions you have registered in this account and Region.</p> </li> <li> <p>Public extensions that you have activated in this account and Region.</p> </li> </ul> </li> <li> <p> <code>PUBLIC</code>: Extensions that are publicly visible and available to be activated within any Amazon Web Services account. This includes extensions from Amazon Web Services, in addition to third-party publishers.</p> </li> </ul> <p>The default is <code>PRIVATE</code>.</p>"
+          "documentation":"<p>The scope at which the extensions are visible and usable in CloudFormation operations.</p> <p>Valid values include:</p> <ul> <li> <p> <code>PRIVATE</code>: Extensions that are visible and usable within this account and Region. This includes:</p> <ul> <li> <p>Private extensions you have registered in this account and Region.</p> </li> <li> <p>Public extensions that you have activated in this account and Region.</p> </li> </ul> </li> <li> <p> <code>PUBLIC</code>: Extensions that are publicly visible and available to be activated within any Amazon Web Services account. This includes extensions from Amazon Web Services and third-party publishers.</p> </li> </ul> <p>The default is <code>PRIVATE</code>.</p>"
         },
         "ProvisioningType":{
           "shape":"ProvisioningType",
@@ -4825,7 +5066,7 @@
       "members":{
         "Active":{
           "shape":"ManagedExecutionNullable",
-          "documentation":"<p>When <code>true</code>, StackSets performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, StackSets starts queued operations in request order.</p> <note> <p>If there are already running or queued operations, StackSets queues all incoming operations even if they are non-conflicting.</p> <p>You can't modify your stack set's execution configuration while there are running or queued operations for that stack set.</p> </note> <p>When <code>false</code> (default), StackSets performs one operation at a time in request order.</p>"
+          "documentation":"<p>When <code>true</code>, CloudFormation performs non-conflicting operations concurrently and queues conflicting operations. After conflicting operations finish, CloudFormation starts queued operations in request order.</p> <note> <p>If there are already running or queued operations, CloudFormation queues all incoming operations even if they are non-conflicting.</p> <p>You can't modify your StackSet's execution configuration while there are running or queued operations for that StackSet.</p> </note> <p>When <code>false</code> (default), StackSets performs one operation at a time in request order.</p>"
         }
       },
       "documentation":"<p>Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.</p>"
@@ -4851,11 +5092,11 @@
       "members":{
         "TypeHierarchy":{
           "shape":"TypeHierarchy",
-          "documentation":"<p>A concatenated list of the module type or types containing the resource. Module types are listed starting with the inner-most nested module, and separated by <code>/</code>.</p> <p>In the following example, the resource was created from a module of type <code>AWS::First::Example::MODULE</code>, that's nested inside a parent module of type <code>AWS::Second::Example::MODULE</code>.</p> <p> <code>AWS::First::Example::MODULE/AWS::Second::Example::MODULE</code> </p>"
+          "documentation":"<p>A concatenated list of the module type or types that contains the resource. Module types are listed starting with the inner-most nested module, and separated by <code>/</code>.</p> <p>In the following example, the resource was created from a module of type <code>AWS::First::Example::MODULE</code>, that's nested inside a parent module of type <code>AWS::Second::Example::MODULE</code>.</p> <p> <code>AWS::First::Example::MODULE/AWS::Second::Example::MODULE</code> </p>"
         },
         "LogicalIdHierarchy":{
           "shape":"LogicalIdHierarchy",
-          "documentation":"<p>A concatenated list of the logical IDs of the module or modules containing the resource. Modules are listed starting with the inner-most nested module, and separated by <code>/</code>.</p> <p>In the following example, the resource was created from a module, <code>moduleA</code>, that's nested inside a parent module, <code>moduleB</code>.</p> <p> <code>moduleA/moduleB</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/module-ref-resources.html\">Reference module resources in CloudFormation templates</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>A concatenated list of the logical IDs of the module or modules that contains the resource. Modules are listed starting with the inner-most nested module, and separated by <code>/</code>.</p> <p>In the following example, the resource was created from a module, <code>moduleA</code>, that's nested inside a parent module, <code>moduleB</code>.</p> <p> <code>moduleA/moduleB</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/module-ref-resources.html\">Reference module resources in CloudFormation templates</a> in the <i>CloudFormation User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains information about the module from which the resource was created, if the resource was created from a module included in the stack template.</p> <p>For more information about modules, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/modules.html\">Create reusable resource configurations that can be included across templates with CloudFormation modules</a> in the <i>CloudFormation User Guide</i>.</p>"
@@ -4867,8 +5108,7 @@
     },
     "NameAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified name is already in use.</p>",
       "error":{
         "code":"NameAlreadyExistsException",
@@ -4911,8 +5151,7 @@
     },
     "OperationIdAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified operation ID already exists.</p>",
       "error":{
         "code":"OperationIdAlreadyExistsException",
@@ -4923,9 +5162,8 @@
     },
     "OperationInProgressException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Another operation is currently in progress for this stack set. Only one operation can be performed for a stack set at a given time.</p>",
+      "members":{},
+      "documentation":"<p>Another operation is currently in progress for this StackSet. Only one operation can be performed for a stack set at a given time.</p>",
       "error":{
         "code":"OperationInProgressException",
         "httpStatusCode":409,
@@ -4935,8 +5173,7 @@
     },
     "OperationNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified ID refers to an operation that doesn't exist.</p>",
       "error":{
         "code":"OperationNotFoundException",
@@ -4985,8 +5222,7 @@
     },
     "OperationStatusCheckFailedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Error reserved for use by the <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html\">CloudFormation CLI</a>. CloudFormation doesn't return this error to users.</p>",
       "error":{
         "code":"ConditionalCheckFailed",
@@ -5060,7 +5296,7 @@
         },
         "ResolvedValue":{
           "shape":"ParameterValue",
-          "documentation":"<p>Read-only. The value that corresponds to a Systems Manager parameter key. This field is returned only for Systems Manager parameter types in the template. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html\">Use CloudFormation-supplied parameter types</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>Read-only. The value that corresponds to a Systems Manager parameter key. This field is returned only for Systems Manager parameter types in the template. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html\">Specify existing resources at runtime with CloudFormation-supplied parameter types</a> in the <i>CloudFormation User Guide</i>.</p>"
         }
       },
       "documentation":"<p>The Parameter data type.</p>"
@@ -5308,8 +5544,7 @@
     },
     "RecordHandlerProgressOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RefreshAllResources":{"type":"boolean"},
     "Region":{
@@ -5362,11 +5597,11 @@
         },
         "TypeName":{
           "shape":"TypeName",
-          "documentation":"<p>The name of the extension being registered.</p> <p>We suggest that extension names adhere to the following patterns:</p> <ul> <li> <p>For resource types, <code>company_or_organization::service::type</code>.</p> </li> <li> <p>For modules, <code>company_or_organization::service::type::MODULE</code>.</p> </li> <li> <p>For hooks, <code>MyCompany::Testing::MyTestHook</code>.</p> </li> </ul> <note> <p>The following organization namespaces are reserved and can't be used in your extension names:</p> <ul> <li> <p> <code>Alexa</code> </p> </li> <li> <p> <code>AMZN</code> </p> </li> <li> <p> <code>Amazon</code> </p> </li> <li> <p> <code>AWS</code> </p> </li> <li> <p> <code>Custom</code> </p> </li> <li> <p> <code>Dev</code> </p> </li> </ul> </note>"
+          "documentation":"<p>The name of the extension being registered.</p> <p>We suggest that extension names adhere to the following patterns:</p> <ul> <li> <p>For resource types, <code>company_or_organization::service::type</code>.</p> </li> <li> <p>For modules, <code>company_or_organization::service::type::MODULE</code>.</p> </li> <li> <p>For Hooks, <code>MyCompany::Testing::MyTestHook</code>.</p> </li> </ul> <note> <p>The following organization namespaces are reserved and can't be used in your extension names:</p> <ul> <li> <p> <code>Alexa</code> </p> </li> <li> <p> <code>AMZN</code> </p> </li> <li> <p> <code>Amazon</code> </p> </li> <li> <p> <code>AWS</code> </p> </li> <li> <p> <code>Custom</code> </p> </li> <li> <p> <code>Dev</code> </p> </li> </ul> </note>"
         },
         "SchemaHandlerPackage":{
           "shape":"S3Url",
-          "documentation":"<p>A URL to the S3 bucket containing the extension project package that contains the necessary files for the extension you want to register.</p> <p>For information about generating a schema handler package for the extension you want to register, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html\">submit</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i>.</p> <note> <p>The user registering the extension must be able to access the package in the S3 bucket. That's, the user needs to have <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> permissions for the schema handler package. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html\">Actions, Resources, and Condition Keys for Amazon S3</a> in the <i>Identity and Access Management User Guide</i>.</p> </note>"
+          "documentation":"<p>A URL to the S3 bucket that contains the extension project package that contains the necessary files for the extension you want to register.</p> <p>For information about generating a schema handler package for the extension you want to register, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html\">submit</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i>.</p> <note> <p>The user registering the extension must be able to access the package in the S3 bucket. That's, the user needs to have <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> permissions for the schema handler package. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazons3.html\">Actions, Resources, and Condition Keys for Amazon S3</a> in the <i>Identity and Access Management User Guide</i>.</p> </note>"
         },
         "LoggingConfig":{
           "shape":"LoggingConfig",
@@ -5527,11 +5762,11 @@
         },
         "BeforeContext":{
           "shape":"BeforeContext",
-          "documentation":"<p>An encoded JSON string containing the context of the resource before the change is executed.</p>"
+          "documentation":"<p>An encoded JSON string that contains the context of the resource before the change is executed.</p>"
         },
         "AfterContext":{
           "shape":"AfterContext",
-          "documentation":"<p>An encoded JSON string containing the context of the resource after the change is executed.</p>"
+          "documentation":"<p>An encoded JSON string that contains the context of the resource after the change is executed.</p>"
         }
       },
       "documentation":"<p>The <code>ResourceChange</code> structure describes the resource and the action that CloudFormation will perform on it if you execute this change set.</p>"
@@ -5670,6 +5905,46 @@
       "type":"list",
       "member":{"shape":"ResourceIdentifierPropertyKey"}
     },
+    "ResourceLocation":{
+      "type":"structure",
+      "required":[
+        "StackName",
+        "LogicalResourceId"
+      ],
+      "members":{
+        "StackName":{
+          "shape":"StackName",
+          "documentation":"<p>The name associated with the stack.</p>"
+        },
+        "LogicalResourceId":{
+          "shape":"LogicalResourceId",
+          "documentation":"<p>The logical name of the resource specified in the template.</p>"
+        }
+      },
+      "documentation":"<p>The location of the resource in a stack template.</p>"
+    },
+    "ResourceMapping":{
+      "type":"structure",
+      "required":[
+        "Source",
+        "Destination"
+      ],
+      "members":{
+        "Source":{
+          "shape":"ResourceLocation",
+          "documentation":"<p>The source stack <code>StackName</code> and <code>LogicalResourceId</code> for the resource being refactored.</p>"
+        },
+        "Destination":{
+          "shape":"ResourceLocation",
+          "documentation":"<p>The destination stack <code>StackName</code> and <code>LogicalResourceId</code> for the resource being refactored.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the current source of the resource and the destination of where it will be moved to.</p>"
+    },
+    "ResourceMappings":{
+      "type":"list",
+      "member":{"shape":"ResourceMapping"}
+    },
     "ResourceModel":{
       "type":"string",
       "max":16384,
@@ -5680,8 +5955,7 @@
     "ResourceScanId":{"type":"string"},
     "ResourceScanInProgressException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A resource scan is currently in progress. Only one can be run at a time for an account in a Region.</p>",
       "error":{
         "code":"ResourceScanInProgress",
@@ -5692,8 +5966,7 @@
     },
     "ResourceScanLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The limit on resource scans has been exceeded. Reasons include:</p> <ul> <li> <p>Exceeded the daily quota for resource scans.</p> </li> <li> <p>A resource scan recently failed. You must wait 10 minutes before starting a new resource scan.</p> </li> <li> <p>The last resource scan failed after exceeding 100,000 resources. When this happens, you must wait 24 hours before starting a new resource scan.</p> </li> </ul>",
       "error":{
         "code":"ResourceScanLimitExceeded",
@@ -5704,8 +5977,7 @@
     },
     "ResourceScanNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource scan was not found.</p>",
       "error":{
         "code":"ResourceScanNotFound",
@@ -5737,7 +6009,7 @@
         },
         "Status":{
           "shape":"ResourceScanStatus",
-          "documentation":"<p>Status of the resource scan.</p> <dl> <dt> INPROGRESS </dt> <dd> <p>The resource scan is still in progress.</p> </dd> <dt> COMPLETE </dt> <dd> <p>The resource scan is complete.</p> </dd> <dt> EXPIRED </dt> <dd> <p>The resource scan has expired.</p> </dd> <dt> FAILED </dt> <dd> <p>The resource scan has failed.</p> </dd> </dl>"
+          "documentation":"<p>Status of the resource scan.</p> <dl> <dt> IN_PROGRESS </dt> <dd> <p>The resource scan is still in progress.</p> </dd> <dt> COMPLETE </dt> <dd> <p>The resource scan is complete.</p> </dd> <dt> EXPIRED </dt> <dd> <p>The resource scan has expired.</p> </dd> <dt> FAILED </dt> <dd> <p>The resource scan has failed.</p> </dd> </dl>"
         },
         "StatusReason":{
           "shape":"ResourceScanStatusReason",
@@ -5754,6 +6026,10 @@
         "PercentageCompleted":{
           "shape":"PercentageCompleted",
           "documentation":"<p>The percentage of the resource scan that has been completed.</p>"
+        },
+        "ScanType":{
+          "shape":"ScanType",
+          "documentation":"<p>The scan type that has been completed.</p>"
         }
       },
       "documentation":"<p>A summary of the resource scan. This is returned by the <code>ListResourceScan</code> API action.</p>"
@@ -5793,6 +6069,12 @@
         "IMPORT_ROLLBACK_IN_PROGRESS",
         "IMPORT_ROLLBACK_FAILED",
         "IMPORT_ROLLBACK_COMPLETE",
+        "EXPORT_FAILED",
+        "EXPORT_COMPLETE",
+        "EXPORT_IN_PROGRESS",
+        "EXPORT_ROLLBACK_IN_PROGRESS",
+        "EXPORT_ROLLBACK_FAILED",
+        "EXPORT_ROLLBACK_COMPLETE",
         "UPDATE_ROLLBACK_IN_PROGRESS",
         "UPDATE_ROLLBACK_COMPLETE",
         "UPDATE_ROLLBACK_FAILED",
@@ -5868,6 +6150,16 @@
       "max":256,
       "min":1
     },
+    "ResourceTypeFilter":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "ResourceTypeFilters":{
+      "type":"list",
+      "member":{"shape":"ResourceTypeFilter"},
+      "max":100
+    },
     "ResourceTypePrefix":{"type":"string"},
     "ResourceTypes":{
       "type":"list",
@@ -5931,7 +6223,7 @@
           "documentation":"<p>The amount of time, in minutes, during which CloudFormation should monitor all the rollback triggers after the stack creation or update operation deploys all necessary resources.</p> <p>The default is 0 minutes.</p> <p>If you specify a monitoring period but don't specify any rollback triggers, CloudFormation still waits the specified period of time before cleaning up old resources after update operations. You can use this monitoring period to perform any manual stack validation desired, and manually cancel the stack creation or update (using <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CancelUpdateStack.html\">CancelUpdateStack</a>, for example) as necessary.</p> <p>If you specify 0 for this parameter, CloudFormation still monitors the specified rollback triggers during stack creation and update operations. Then, for update operations, it begins disposing of old resources immediately once the operation completes.</p>"
         }
       },
-      "documentation":"<p>Structure containing the rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards.</p> <p>Rollback triggers enable you to have CloudFormation monitor the state of your application during stack creation and updating, and to roll back that operation if the application breaches the threshold of any of the alarms you've specified. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-rollback-triggers.html\">Roll back your CloudFormation stack on alarm breach with rollback triggers</a>.</p>"
+      "documentation":"<p>Structure that contains the rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards.</p> <p>Rollback triggers enable you to have CloudFormation monitor the state of your application during stack creation and updating, and to roll back that operation if the application breaches the threshold of any of the alarms you've specified. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-rollback-triggers.html\">Roll back your CloudFormation stack on alarm breach with rollback triggers</a>.</p>"
     },
     "RollbackStackInput":{
       "type":"structure",
@@ -5977,7 +6269,7 @@
         },
         "Type":{
           "shape":"Type",
-          "documentation":"<p>The resource type of the rollback trigger. Specify either <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-alarm.html\">AWS::CloudWatch::Alarm</a> or <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-compositealarm.html\">AWS::CloudWatch::CompositeAlarm</a> resource types.</p>"
+          "documentation":"<p>The resource type of the rollback trigger. Specify either <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudwatch-alarm.html\">AWS::CloudWatch::Alarm</a> or <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudwatch-compositealarm.html\">AWS::CloudWatch::CompositeAlarm</a> resource types.</p>"
         }
       },
       "documentation":"<p>A rollback trigger CloudFormation monitors during creation and updating of stacks. If any of the alarms you specify goes to ALARM state during the stack operation or within the specified monitoring period afterwards, CloudFormation rolls back the entire stack operation.</p>"
@@ -5998,6 +6290,29 @@
       "max":4096,
       "min":1
     },
+    "ScanFilter":{
+      "type":"structure",
+      "members":{
+        "Types":{
+          "shape":"ResourceTypeFilters",
+          "documentation":"<p>An array of strings where each string represents an Amazon Web Services resource type you want to scan. Each string defines the resource type using the format <code>AWS::ServiceName::ResourceType</code>, for example, <code>AWS::DynamoDB::Table</code>. For the full list of supported resource types, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html\">Resource type support</a> table in the <i>CloudFormation User Guide</i>.</p> <p>To scan all resource types within a service, you can use a wildcard, represented by an asterisk (<code>*</code>). You can place an asterisk at only the end of the string, for example, <code>AWS::S3::*</code>.</p>"
+        }
+      },
+      "documentation":"<p>A filter that is used to specify which resource types to scan.</p>"
+    },
+    "ScanFilters":{
+      "type":"list",
+      "member":{"shape":"ScanFilter"},
+      "max":1,
+      "min":1
+    },
+    "ScanType":{
+      "type":"string",
+      "enum":[
+        "FULL",
+        "PARTIAL"
+      ]
+    },
     "ScannedResource":{
       "type":"structure",
       "members":{
@@ -6056,11 +6371,11 @@
         },
         "StackPolicyBody":{
           "shape":"StackPolicyBody",
-          "documentation":"<p>Structure containing the stack policy body. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
+          "documentation":"<p>Structure that contains the stack policy body. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html\">Prevent updates to stack resources</a> in the <i>CloudFormation User Guide</i>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
         },
         "StackPolicyURL":{
           "shape":"StackPolicyURL",
-          "documentation":"<p>Location of a file containing the stack policy. The URL must point to a policy (maximum size: 16 KB) located in an Amazon S3 bucket in the same Amazon Web Services Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
+          "documentation":"<p>Location of a file that contains the stack policy. The URL must point to a policy (maximum size: 16 KB) located in an Amazon S3 bucket in the same Amazon Web Services Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p>"
         }
       },
       "documentation":"<p>The input for the <a>SetStackPolicy</a> action.</p>"
@@ -6071,11 +6386,11 @@
       "members":{
         "TypeArn":{
           "shape":"TypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the extension, in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p> <p>Do not include the extension versions suffix at the end of the ARN. You can set the configuration for an extension, but not for a specific extension version.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the extension in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p> <p>Do not include the extension versions suffix at the end of the ARN. You can set the configuration for an extension, but not for a specific extension version.</p>"
         },
         "Configuration":{
           "shape":"TypeConfiguration",
-          "documentation":"<p>The configuration data for the extension, in this account and Region.</p> <p>The configuration data must be formatted as JSON, and validate against the schema returned in the <code>ConfigurationSchema</code> response element of <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>. For more information, see <a href=\"https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-model.html#resource-type-howto-configuration\">Defining the account-level configuration of an extension</a> in the <i>CloudFormation Command Line Interface (CLI) User Guide</i>.</p>"
+          "documentation":"<p>The configuration data for the extension in this account and Region.</p> <p>The configuration data must be formatted as JSON and validate against the extension's schema returned in the <code>Schema</code> response element of <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html\">DescribeType</a>.</p>"
         },
         "ConfigurationAlias":{
           "shape":"TypeConfigurationAlias",
@@ -6096,7 +6411,7 @@
       "members":{
         "ConfigurationArn":{
           "shape":"TypeConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the configuration data, in this account and Region.</p> <p>Conditional: You must specify <code>ConfigurationArn</code>, or <code>Type</code> and <code>TypeName</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the configuration data in this account and Region.</p> <p>Conditional: You must specify <code>ConfigurationArn</code>, or <code>Type</code> and <code>TypeName</code>.</p>"
         }
       }
     },
@@ -6123,8 +6438,7 @@
     },
     "SetTypeDefaultVersionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SignalResourceInput":{
       "type":"structure",
@@ -6240,11 +6554,11 @@
         },
         "ParentId":{
           "shape":"StackId",
-          "documentation":"<p>For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Embed stacks within other stacks using nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>For nested stacks, the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "RootId":{
           "shape":"StackId",
-          "documentation":"<p>For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Embed stacks within other stacks using nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>For nested stacks, the stack ID of the top-level stack to which the nested stack ultimately belongs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "DriftInformation":{
           "shape":"StackDriftInformation",
@@ -6260,11 +6574,33 @@
         },
         "DetailedStatus":{
           "shape":"DetailedStatus",
-          "documentation":"<p>The detailed status of the resource or stack. If <code>CONFIGURATION_COMPLETE</code> is present, the resource or resource configuration phase has completed and the stabilization of the resources is in progress. The stack sets <code>CONFIGURATION_COMPLETE</code> when all of the resources in the stack have reached that event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-resource-configuration-complete.html\">Understand CloudFormation stack creation events</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>The detailed status of the resource or stack. If <code>CONFIGURATION_COMPLETE</code> is present, the resource or resource configuration phase has completed and the stabilization of the resources is in progress. The StackSets <code>CONFIGURATION_COMPLETE</code> when all of the resources in the stack have reached that event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-resource-configuration-complete.html\">Understand CloudFormation stack creation events</a> in the <i>CloudFormation User Guide</i>.</p>"
         }
       },
       "documentation":"<p>The Stack data type.</p>"
     },
+    "StackDefinition":{
+      "type":"structure",
+      "members":{
+        "StackName":{
+          "shape":"StackName",
+          "documentation":"<p>The name associated with the stack.</p>"
+        },
+        "TemplateBody":{
+          "shape":"TemplateBody",
+          "documentation":"<p>The file path for the stack template file.</p>"
+        },
+        "TemplateURL":{
+          "shape":"TemplateURL",
+          "documentation":"<p>The desired final state of the stack template.</p>"
+        }
+      },
+      "documentation":"<p>Describes the stack and the template used by the stack.</p>"
+    },
+    "StackDefinitions":{
+      "type":"list",
+      "member":{"shape":"StackDefinition"}
+    },
     "StackDriftDetectionId":{
       "type":"string",
       "max":36,
@@ -6285,7 +6621,7 @@
       "members":{
         "StackDriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack's actual configuration compared to its expected template configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the stack's actual configuration compared to its expected template configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: CloudFormation could not run drift detection for a resource in the stack.</p> </li> </ul>"
         },
         "LastCheckTimestamp":{
           "shape":"Timestamp",
@@ -6300,7 +6636,7 @@
       "members":{
         "StackDriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack's actual configuration compared to its expected template configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the stack's actual configuration compared to its expected template configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from its expected template configuration. A stack is considered to have drifted if one or more of its resources have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack differs from its expected template configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: CloudFormation could not run drift detection for a resource in the stack.</p> </li> </ul>"
         },
         "LastCheckTimestamp":{
           "shape":"Timestamp",
@@ -6333,7 +6669,7 @@
         },
         "EventId":{
           "shape":"EventId",
-          "documentation":"<p>The unique ID of this event.</p>"
+          "documentation":"<p>The unique identifier of this event.</p>"
         },
         "StackName":{
           "shape":"StackName",
@@ -6373,27 +6709,31 @@
         },
         "HookType":{
           "shape":"HookType",
-          "documentation":"<p>The name of the hook.</p>"
+          "documentation":"<p>The name of the Hook.</p>"
         },
         "HookStatus":{
           "shape":"HookStatus",
-          "documentation":"<p>Provides the status of the change set hook.</p>"
+          "documentation":"<p>Provides the status of the change set Hook.</p>"
         },
         "HookStatusReason":{
           "shape":"HookStatusReason",
-          "documentation":"<p>Provides the reason for the hook status.</p>"
+          "documentation":"<p>Provides the reason for the Hook status.</p>"
         },
         "HookInvocationPoint":{
           "shape":"HookInvocationPoint",
-          "documentation":"<p>Invocation points are points in provisioning logic where hooks are initiated.</p>"
+          "documentation":"<p>The specific point in the provisioning process where the Hook is invoked.</p>"
+        },
+        "HookInvocationId":{
+          "shape":"HookInvocationId",
+          "documentation":"<p>The unique identifier of the Hook invocation.</p>"
         },
         "HookFailureMode":{
           "shape":"HookFailureMode",
-          "documentation":"<p>Specify the hook failure mode for non-compliant resources in the followings ways.</p> <ul> <li> <p> <code>FAIL</code> Stops provisioning resources.</p> </li> <li> <p> <code>WARN</code> Allows provisioning to continue with a warning message.</p> </li> </ul>"
+          "documentation":"<p>Specify the Hook failure mode for non-compliant resources in the followings ways.</p> <ul> <li> <p> <code>FAIL</code> Stops provisioning resources.</p> </li> <li> <p> <code>WARN</code> Allows provisioning to continue with a warning message.</p> </li> </ul>"
         },
         "DetailedStatus":{
           "shape":"DetailedStatus",
-          "documentation":"<p>An optional field containing information about the detailed status of the stack event.</p> <ul> <li> <p> <code>CONFIGURATION_COMPLETE</code> - all of the resources in the stack have reached that event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-resource-configuration-complete.html\">Understand CloudFormation stack creation events</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul> <ul> <li> <p> <code>VALIDATION_FAILED</code> - template validation failed because of invalid properties in the template. The <code>ResourceStatusReason</code> field shows what properties are defined incorrectly.</p> </li> </ul>"
+          "documentation":"<p>An optional field that contains information about the detailed status of the stack event.</p> <ul> <li> <p> <code>CONFIGURATION_COMPLETE</code> - all of the resources in the stack have reached that event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-resource-configuration-complete.html\">Understand CloudFormation stack creation events</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul> <ul> <li> <p> <code>VALIDATION_FAILED</code> - template validation failed because of invalid properties in the template. The <code>ResourceStatusReason</code> field shows what properties are defined incorrectly.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The StackEvent data type.</p>"
@@ -6407,6 +6747,10 @@
       "type":"list",
       "member":{"shape":"StackId"}
     },
+    "StackIds":{
+      "type":"list",
+      "member":{"shape":"StackId"}
+    },
     "StackIdsUrl":{
       "type":"string",
       "max":5120,
@@ -6418,7 +6762,7 @@
       "members":{
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The name or unique ID of the stack set that the stack instance is associated with.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that the stack instance is associated with.</p>"
         },
         "Region":{
           "shape":"Region",
@@ -6434,11 +6778,11 @@
         },
         "ParameterOverrides":{
           "shape":"Parameters",
-          "documentation":"<p>A list of parameters from the stack set template whose values have been overridden in this stack instance.</p>"
+          "documentation":"<p>A list of parameters from the StackSet template whose values have been overridden in this stack instance.</p>"
         },
         "Status":{
           "shape":"StackInstanceStatus",
-          "documentation":"<p>The status of the stack instance, in terms of its synchronization with its associated stack set.</p> <ul> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually. <code>INOPERABLE</code> can be returned here when the cause is a failed import. If it's due to a failed import, the operation can be retried once the failures are fixed. To see if this is due to a failed import, look at the <code>DetailedStatus</code> member in the <code>StackInstanceSummary</code> member that is a peer to this <code>Status</code> member.</p> </li> <li> <p> <code>OUTDATED</code>: The stack isn't currently up to date with the stack set because:</p> <ul> <li> <p>The associated stack failed during a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation.</p> </li> <li> <p>The stack was part of a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation that failed or was stopped before the stack was created or updated.</p> </li> </ul> </li> <li> <p> <code>CURRENT</code>: The stack is currently up to date with the stack set.</p> </li> </ul>"
+          "documentation":"<p>The status of the stack instance, in terms of its synchronization with its associated stack set.</p> <ul> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually. <code>INOPERABLE</code> can be returned here when the cause is a failed import. If it's due to a failed import, the operation can be retried once the failures are fixed. To see if this is due to a failed import, look at the <code>DetailedStatus</code> member in the <code>StackInstanceSummary</code> member that is a peer to this <code>Status</code> member.</p> </li> <li> <p> <code>OUTDATED</code>: The stack isn't currently up to date with the StackSet because:</p> <ul> <li> <p>The associated stack failed during a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation.</p> </li> <li> <p>The stack was part of a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation that failed or was stopped before the stack was created or updated.</p> </li> </ul> </li> <li> <p> <code>CURRENT</code>: The stack is currently up to date with the StackSet.</p> </li> </ul>"
         },
         "StackInstanceStatus":{
           "shape":"StackInstanceComprehensiveStatus",
@@ -6454,25 +6798,25 @@
         },
         "DriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack instance's actual configuration compared to the expected template and parameter configuration of the stack set to which it belongs.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from the expected template and parameter configuration of the stack set to which it belongs. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack instance differs from its expected stack set configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack instance's actual configuration matches its expected stack set configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the stack instance's actual configuration compared to the expected template and parameter configuration of the StackSet it belongs to.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from the expected template and parameter configuration of the StackSet it belongs to. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack instance differs from its expected StackSet configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack instance's actual configuration matches its expected StackSset configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
         },
         "LastDriftCheckTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack instance. This value will be <code>NULL</code> for any stack instance on which drift detection hasn't yet been performed.</p>"
+          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack instance. This value will be <code>NULL</code> for any stack instance that drift detection hasn't yet been performed on.</p>"
         },
         "LastOperationId":{
           "shape":"ClientRequestToken",
           "documentation":"<p>The last unique ID of a StackSet operation performed on a stack instance.</p>"
         }
       },
-      "documentation":"<p>A CloudFormation stack, in a specific account and Region, that's part of a stack set operation. A stack instance is a reference to an attempted or actual stack in a given account within a given Region. A stack instance can exist without a stack—for example, if the stack couldn't be created for some reason. A stack instance is associated with only one stack set. Each stack instance contains the ID of its associated stack set, in addition to the ID of the actual stack and the stack status.</p>"
+      "documentation":"<p>A CloudFormation stack, in a specific account and Region, that's part of a StackSet operation. A stack instance is a reference to an attempted or actual stack in a given account within a given Region. A stack instance can exist without a stack—for example, if the stack couldn't be created for some reason. A stack instance is associated with only one StackSet. Each stack instance contains the ID of its associated StackSet, in addition to the ID of the actual stack and the stack status.</p>"
     },
     "StackInstanceComprehensiveStatus":{
       "type":"structure",
       "members":{
         "DetailedStatus":{
           "shape":"StackInstanceDetailedStatus",
-          "documentation":"<ul> <li> <p> <code>CANCELLED</code>: The operation in the specified account and Region has been canceled. This is either because a user has stopped the stack set operation, or because the failure tolerance of the stack set operation has been exceeded.</p> </li> <li> <p> <code>FAILED</code>: The operation in the specified account and Region failed. If the stack set operation fails in enough accounts within a Region, the failure tolerance for the stack set operation as a whole might be exceeded.</p> </li> <li> <p> <code>FAILED_IMPORT</code>: The import of the stack instance in the specified account and Region failed and left the stack in an unstable state. Once the issues causing the failure are fixed, the import operation can be retried. If enough stack set operations fail in enough accounts within a Region, the failure tolerance for the stack set operation as a whole might be exceeded.</p> </li> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually.</p> </li> <li> <p> <code>PENDING</code>: The operation in the specified account and Region has yet to start.</p> </li> <li> <p> <code>RUNNING</code>: The operation in the specified account and Region is currently in progress.</p> </li> <li> <p> <code>SKIPPED_SUSPENDED_ACCOUNT</code>: The operation in the specified account and Region has been skipped because the account was suspended at the time of the operation.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation in the specified account and Region completed successfully.</p> </li> </ul>"
+          "documentation":"<ul> <li> <p> <code>CANCELLED</code>: The operation in the specified account and Region has been canceled. This is either because a user has stopped the StackSet operation, or because the failure tolerance of the StackSet operation has been exceeded.</p> </li> <li> <p> <code>FAILED</code>: The operation in the specified account and Region failed. If the StackSet operation fails in enough accounts within a Region, the failure tolerance for the StackSet operation as a whole might be exceeded.</p> </li> <li> <p> <code>FAILED_IMPORT</code>: The import of the stack instance in the specified account and Region failed and left the stack in an unstable state. Once the issues causing the failure are fixed, the import operation can be retried. If enough StackSet operations fail in enough accounts within a Region, the failure tolerance for the StackSet operation as a whole might be exceeded.</p> </li> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually.</p> </li> <li> <p> <code>PENDING</code>: The operation in the specified account and Region has yet to start.</p> </li> <li> <p> <code>RUNNING</code>: The operation in the specified account and Region is currently in progress.</p> </li> <li> <p> <code>SKIPPED_SUSPENDED_ACCOUNT</code>: The operation in the specified account and Region has been skipped because the account was suspended at the time of the operation.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation in the specified account and Region completed successfully.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The detailed status of the stack instance.</p>"
@@ -6525,8 +6869,7 @@
     },
     "StackInstanceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified stack instance doesn't exist.</p>",
       "error":{
         "code":"StackInstanceNotFoundException",
@@ -6601,7 +6944,7 @@
       "members":{
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The name or unique ID of the stack set that the stack instance is associated with.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that the stack instance is associated with.</p>"
         },
         "Region":{
           "shape":"Region",
@@ -6617,7 +6960,7 @@
         },
         "Status":{
           "shape":"StackInstanceStatus",
-          "documentation":"<p>The status of the stack instance, in terms of its synchronization with its associated stack set.</p> <ul> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually. <code>INOPERABLE</code> can be returned here when the cause is a failed import. If it's due to a failed import, the operation can be retried once the failures are fixed. To see if this is due to a failed import, call the <a>DescribeStackInstance</a> API operation, look at the <code>DetailedStatus</code> member returned in the <code>StackInstanceSummary</code> member.</p> </li> <li> <p> <code>OUTDATED</code>: The stack isn't currently up to date with the stack set because:</p> <ul> <li> <p>The associated stack failed during a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation.</p> </li> <li> <p>The stack was part of a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation that failed or was stopped before the stack was created or updated.</p> </li> </ul> </li> <li> <p> <code>CURRENT</code>: The stack is currently up to date with the stack set.</p> </li> </ul>"
+          "documentation":"<p>The status of the stack instance, in terms of its synchronization with its associated stack set.</p> <ul> <li> <p> <code>INOPERABLE</code>: A <code>DeleteStackInstances</code> operation has failed and left the stack in an unstable state. Stacks in this state are excluded from further <code>UpdateStackSet</code> operations. You might need to perform a <code>DeleteStackInstances</code> operation, with <code>RetainStacks</code> set to <code>true</code>, to delete the stack instance, and then delete the stack manually. <code>INOPERABLE</code> can be returned here when the cause is a failed import. If it's due to a failed import, the operation can be retried once the failures are fixed. To see if this is due to a failed import, call the <a>DescribeStackInstance</a> API operation, look at the <code>DetailedStatus</code> member returned in the <code>StackInstanceSummary</code> member.</p> </li> <li> <p> <code>OUTDATED</code>: The stack isn't currently up to date with the StackSet because:</p> <ul> <li> <p>The associated stack failed during a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation.</p> </li> <li> <p>The stack was part of a <code>CreateStackSet</code> or <code>UpdateStackSet</code> operation that failed or was stopped before the stack was created or updated.</p> </li> </ul> </li> <li> <p> <code>CURRENT</code>: The stack is currently up to date with the StackSet.</p> </li> </ul>"
         },
         "StatusReason":{
           "shape":"Reason",
@@ -6633,11 +6976,11 @@
         },
         "DriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack instance's actual configuration compared to the expected template and parameter configuration of the stack set to which it belongs.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from the expected template and parameter configuration of the stack set to which it belongs. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack instance differs from its expected stack set configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack instance's actual configuration matches its expected stack set configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the stack instance's actual configuration compared to the expected template and parameter configuration of the StackSet it belongs to.</p> <ul> <li> <p> <code>DRIFTED</code>: The stack differs from the expected template and parameter configuration of the StackSet it belongs to. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked if the stack instance differs from its expected StackSet configuration.</p> </li> <li> <p> <code>IN_SYNC</code>: The stack instance's actual configuration matches its expected StackSet configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
         },
         "LastDriftCheckTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack instance. This value will be <code>NULL</code> for any stack instance on which drift detection hasn't yet been performed.</p>"
+          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack instance. This value will be <code>NULL</code> for any stack instance that drift detection hasn't yet been performed on.</p>"
         },
         "LastOperationId":{
           "shape":"ClientRequestToken",
@@ -6654,8 +6997,7 @@
     },
     "StackNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified stack ARN doesn't exist or stack doesn't exist corresponding to the ARN in input.</p>",
       "error":{
         "code":"StackNotFoundException",
@@ -6676,14 +7018,170 @@
     },
     "StackPolicyDuringUpdateURL":{
       "type":"string",
-      "max":1350,
+      "max":5120,
       "min":1
     },
     "StackPolicyURL":{
       "type":"string",
-      "max":1350,
+      "max":5120,
       "min":1
     },
+    "StackRefactorAction":{
+      "type":"structure",
+      "members":{
+        "Action":{
+          "shape":"StackRefactorActionType",
+          "documentation":"<p>The action that CloudFormation takes on the stack.</p>"
+        },
+        "Entity":{
+          "shape":"StackRefactorActionEntity",
+          "documentation":"<p>The type that will be evaluated in the <code>StackRefactorAction</code>. The following are potential <code>Entity</code> types:</p> <ul> <li> <p> <code>Stack</code> </p> </li> <li> <p> <code>Resource</code> </p> </li> </ul>"
+        },
+        "PhysicalResourceId":{
+          "shape":"PhysicalResourceId",
+          "documentation":"<p>The name or unique identifier associated with the physical instance of the resource.</p>"
+        },
+        "ResourceIdentifier":{
+          "shape":"StackRefactorResourceIdentifier",
+          "documentation":"<p>A key-value pair that identifies the target resource. The key is an identifier property (for example, <code>BucketName</code> for <code>AWS::S3::Bucket</code> resources) and the value is the actual property value (for example, <code>MyS3Bucket</code>).</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description to help you identify the refactor.</p>"
+        },
+        "Detection":{
+          "shape":"StackRefactorDetection",
+          "documentation":"<p>The detection type is one of the following:</p> <ul> <li> <p>Auto: CloudFormation figured out the mapping on its own.</p> </li> <li> <p>Manual: The customer provided the mapping in the <code>ResourceMapping</code> parameter.</p> </li> </ul>"
+        },
+        "DetectionReason":{
+          "shape":"DetectionReason",
+          "documentation":"<p>The description of the detection type.</p>"
+        },
+        "TagResources":{
+          "shape":"StackRefactorTagResources",
+          "documentation":"<p>Assigns one or more tags to specified resources.</p>"
+        },
+        "UntagResources":{
+          "shape":"StackRefactorUntagResources",
+          "documentation":"<p>Removes one or more tags to specified resources.</p>"
+        },
+        "ResourceMapping":{
+          "shape":"ResourceMapping",
+          "documentation":"<p>The mapping for the stack resource <code>Source</code> and stack resource <code>Destination</code>.</p>"
+        }
+      },
+      "documentation":"<p>Describes the stack and the action that CloudFormation will perform on it if you execute the stack refactor.</p>"
+    },
+    "StackRefactorActionEntity":{
+      "type":"string",
+      "enum":[
+        "RESOURCE",
+        "STACK"
+      ]
+    },
+    "StackRefactorActionType":{
+      "type":"string",
+      "enum":[
+        "MOVE",
+        "CREATE"
+      ]
+    },
+    "StackRefactorActions":{
+      "type":"list",
+      "member":{"shape":"StackRefactorAction"}
+    },
+    "StackRefactorDetection":{
+      "type":"string",
+      "enum":[
+        "AUTO",
+        "MANUAL"
+      ]
+    },
+    "StackRefactorExecutionStatus":{
+      "type":"string",
+      "enum":[
+        "UNAVAILABLE",
+        "AVAILABLE",
+        "OBSOLETE",
+        "EXECUTE_IN_PROGRESS",
+        "EXECUTE_COMPLETE",
+        "EXECUTE_FAILED",
+        "ROLLBACK_IN_PROGRESS",
+        "ROLLBACK_COMPLETE",
+        "ROLLBACK_FAILED"
+      ]
+    },
+    "StackRefactorExecutionStatusFilter":{
+      "type":"list",
+      "member":{"shape":"StackRefactorExecutionStatus"}
+    },
+    "StackRefactorId":{"type":"string"},
+    "StackRefactorNotFoundException":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The specified stack refactor can't be found.</p>",
+      "error":{
+        "code":"StackRefactorNotFoundException",
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "StackRefactorResourceIdentifier":{"type":"string"},
+    "StackRefactorStatus":{
+      "type":"string",
+      "enum":[
+        "CREATE_IN_PROGRESS",
+        "CREATE_COMPLETE",
+        "CREATE_FAILED",
+        "DELETE_IN_PROGRESS",
+        "DELETE_COMPLETE",
+        "DELETE_FAILED"
+      ]
+    },
+    "StackRefactorStatusReason":{"type":"string"},
+    "StackRefactorSummaries":{
+      "type":"list",
+      "member":{"shape":"StackRefactorSummary"}
+    },
+    "StackRefactorSummary":{
+      "type":"structure",
+      "members":{
+        "StackRefactorId":{
+          "shape":"StackRefactorId",
+          "documentation":"<p>The ID associated with the stack refactor created from the <a>CreateStackRefactor</a> action.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description to help you identify the refactor.</p>"
+        },
+        "ExecutionStatus":{
+          "shape":"StackRefactorExecutionStatus",
+          "documentation":"<p>The operation status that's provided after calling the <a>ExecuteStackRefactor</a> action.</p>"
+        },
+        "ExecutionStatusReason":{
+          "shape":"ExecutionStatusReason",
+          "documentation":"<p>A detailed explanation for the stack refactor <code>ExecutionStatus</code>.</p>"
+        },
+        "Status":{
+          "shape":"StackRefactorStatus",
+          "documentation":"<p>The stack refactor operation status that's provided after calling the <a>CreateStackRefactor</a> action.</p>"
+        },
+        "StatusReason":{
+          "shape":"StackRefactorStatusReason",
+          "documentation":"<p>A detailed explanation for the stack refactor <code>Status</code>.</p>"
+        }
+      },
+      "documentation":"<p>The summary of a stack refactor operation.</p>"
+    },
+    "StackRefactorTagResources":{
+      "type":"list",
+      "member":{"shape":"Tag"}
+    },
+    "StackRefactorUntagResources":{
+      "type":"list",
+      "member":{"shape":"TagKey"}
+    },
     "StackResource":{
       "type":"structure",
       "required":[
@@ -6832,11 +7330,11 @@
         },
         "ExpectedProperties":{
           "shape":"Properties",
-          "documentation":"<p>A JSON structure containing the expected property values of the stack resource, as defined in the stack template and any values specified as template parameters.</p> <p>For resources whose <code>StackResourceDriftStatus</code> is <code>DELETED</code>, this structure will not be present.</p>"
+          "documentation":"<p>A JSON structure that contains the expected property values of the stack resource, as defined in the stack template and any values specified as template parameters.</p> <p>For resources whose <code>StackResourceDriftStatus</code> is <code>DELETED</code>, this structure will not be present.</p>"
         },
         "ActualProperties":{
           "shape":"Properties",
-          "documentation":"<p>A JSON structure containing the actual property values of the stack resource.</p> <p>For resources whose <code>StackResourceDriftStatus</code> is <code>DELETED</code>, this structure will not be present.</p>"
+          "documentation":"<p>A JSON structure that contains the actual property values of the stack resource.</p> <p>For resources whose <code>StackResourceDriftStatus</code> is <code>DELETED</code>, this structure will not be present.</p>"
         },
         "PropertyDifferences":{
           "shape":"PropertyDifferences",
@@ -6844,7 +7342,7 @@
         },
         "StackResourceDriftStatus":{
           "shape":"StackResourceDriftStatus",
-          "documentation":"<p>Status of the resource's actual configuration compared to its expected configuration.</p> <ul> <li> <p> <code>DELETED</code>: The resource differs from its expected template configuration because the resource has been deleted.</p> </li> <li> <p> <code>MODIFIED</code>: One or more resource properties differ from their expected values (as defined in the stack template and any values specified as template parameters).</p> </li> <li> <p> <code>IN_SYNC</code>: The resource's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation does not currently return this value.</p> </li> </ul>"
+          "documentation":"<p>Status of the resource's actual configuration compared to its expected configuration.</p> <ul> <li> <p> <code>DELETED</code>: The resource differs from its expected template configuration because the resource has been deleted.</p> </li> <li> <p> <code>MODIFIED</code>: One or more resource properties differ from their expected values (as defined in the stack template and any values specified as template parameters).</p> </li> <li> <p> <code>IN_SYNC</code>: The resource's actual configuration matches its expected template configuration.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation does not currently return this value.</p> </li> <li> <p> <code>UNKNOWN</code>: CloudFormation could not run drift detection for the resource. See the <code>DriftStatusReason</code> for details.</p> </li> </ul>"
         },
         "Timestamp":{
           "shape":"Timestamp",
@@ -6853,6 +7351,10 @@
         "ModuleInfo":{
           "shape":"ModuleInfo",
           "documentation":"<p>Contains information about the module from which the resource was created, if the resource was created from a module included in the stack template.</p>"
+        },
+        "DriftStatusReason":{
+          "shape":"StackResourceDriftStatusReason",
+          "documentation":"<p>The reason for the drift status. </p>"
         }
       },
       "documentation":"<p>Contains the drift information for a resource that has been checked for drift. This includes actual and expected property values for resources in which CloudFormation has detected drift. Only resource properties explicitly defined in the stack template are checked for drift. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html\">Detect unmanaged configuration changes to stacks and resources with drift detection</a>.</p> <p>Resources that don't currently support drift detection can't be checked. For a list of resources that support drift detection, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html\">Resource type support for imports and drift detection</a>.</p> <p>Use <a>DetectStackResourceDrift</a> to detect drift on individual resources, or <a>DetectStackDrift</a> to detect drift on all resources in a given stack that support drift detection.</p>"
@@ -6893,7 +7395,8 @@
         "IN_SYNC",
         "MODIFIED",
         "DELETED",
-        "NOT_CHECKED"
+        "NOT_CHECKED",
+        "UNKNOWN"
       ]
     },
     "StackResourceDriftStatusFilters":{
@@ -6902,6 +7405,7 @@
       "max":4,
       "min":1
     },
+    "StackResourceDriftStatusReason":{"type":"string"},
     "StackResourceDrifts":{
       "type":"list",
       "member":{"shape":"StackResourceDrift"}
@@ -6963,59 +7467,59 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name that's associated with the stack set.</p>"
+          "documentation":"<p>The name that's associated with the StackSet.</p>"
         },
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The ID of the stack set.</p>"
+          "documentation":"<p>The ID of the StackSet.</p>"
         },
         "Description":{
           "shape":"Description",
-          "documentation":"<p>A description of the stack set that you specify when the stack set is created or updated.</p>"
+          "documentation":"<p>A description of the StackSet that you specify when the StackSet is created or updated.</p>"
         },
         "Status":{
           "shape":"StackSetStatus",
-          "documentation":"<p>The status of the stack set.</p>"
+          "documentation":"<p>The status of the StackSet.</p>"
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>The structure that contains the body of the template that was used to create or update the stack set.</p>"
+          "documentation":"<p>The structure that contains the body of the template that was used to create or update the StackSet.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>A list of input parameters for a stack set.</p>"
+          "documentation":"<p>A list of input parameters for a StackSet.</p>"
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>The capabilities that are allowed in the stack set. Some stack set templates might include resources that can affect permissions in your Amazon Web Services account—for example, by creating new Identity and Access Management (IAM) users. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
+          "documentation":"<p>The capabilities that are allowed in the StackSet. Some StackSet templates might include resources that can affect permissions in your Amazon Web Services account—for example, by creating new Identity and Access Management (IAM) users. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
         },
         "Tags":{
           "shape":"Tags",
-          "documentation":"<p>A list of tags that specify information about the stack set. A maximum number of 50 tags can be specified.</p>"
+          "documentation":"<p>A list of tags that specify information about the StackSet. A maximum number of 50 tags can be specified.</p>"
         },
         "StackSetARN":{
           "shape":"StackSetARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the stack set.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the StackSet.</p>"
         },
         "AdministrationRoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role used to create or update the stack set.</p> <p>Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html\">Prerequisites: Granting Permissions for Stack Set Operations</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role used to create or update the stack set.</p> <p>Use customized administrator roles to control which users or groups can manage specific StackSets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html\">Prerequisites for using CloudFormation StackSets</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "ExecutionRoleName":{
           "shape":"ExecutionRoleName",
-          "documentation":"<p>The name of the IAM execution role used to create or update the stack set.</p> <p>Use customized execution roles to control which stack resources users and groups can include in their stack sets.</p>"
+          "documentation":"<p>The name of the IAM execution role used to create or update the StackSet.</p> <p>Use customized execution roles to control which stack resources users and groups can include in their StackSets.</p>"
         },
         "StackSetDriftDetectionDetails":{
           "shape":"StackSetDriftDetectionDetails",
-          "documentation":"<p>Detailed information about the drift status of the stack set.</p> <p>For stack sets, contains information about the last <i>completed</i> drift operation performed on the stack set. Information about drift operations currently in progress isn't included.</p>"
+          "documentation":"<p>Detailed information about the drift status of the StackSet.</p> <p>For StackSets, contains information about the last <i>completed</i> drift operation performed on the StackSet. Information about drift operations currently in progress isn't included.</p>"
         },
         "AutoDeployment":{
           "shape":"AutoDeployment",
-          "documentation":"<p>[Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU).</p>"
+          "documentation":"<p>Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU). Valid only if the StackSet uses service-managed permissions.</p>"
         },
         "PermissionModel":{
           "shape":"PermissionModels",
-          "documentation":"<p>Describes how the IAM roles required for stack set operations are created.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant Self-Managed Stack Set Permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-service-managed.html\">Grant Service-Managed Stack Set Permissions</a>.</p> </li> </ul>"
+          "documentation":"<p>Describes how the IAM roles required for StackSet operations are created.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-activate-trusted-access.html\">Activate trusted access for StackSets with Organizations</a>.</p> </li> </ul>"
         },
         "OrganizationalUnitIds":{
           "shape":"OrganizationalUnitIdList",
@@ -7030,7 +7534,7 @@
           "documentation":"<p>Returns a list of all Amazon Web Services Regions the given StackSet has stack instances deployed in. The Amazon Web Services Regions list output is in no particular order.</p>"
         }
       },
-      "documentation":"<p>A structure that contains information about a stack set. A stack set enables you to provision stacks into Amazon Web Services accounts and across Regions by using a single CloudFormation template. In the stack set, you specify the template to use, in addition to any parameters and capabilities that the template requires.</p>"
+      "documentation":"<p>A structure that contains information about a StackSet. With StackSets, you can provision stacks across Amazon Web Services accounts and Regions from a single CloudFormation template. Each stack is based on the same CloudFormation template, but you can customize individual stacks using parameters.</p>"
     },
     "StackSetARN":{"type":"string"},
     "StackSetAutoDeploymentTargetSummaries":{
@@ -7042,41 +7546,41 @@
       "members":{
         "OrganizationalUnitId":{
           "shape":"OrganizationalUnitId",
-          "documentation":"<p>The organization root ID or organizational unit (OU) IDs where the stack set is targeted.</p>"
+          "documentation":"<p>The organization root ID or organizational unit (OU) IDs where the StackSet is targeted.</p>"
         },
         "Regions":{
           "shape":"RegionList",
           "documentation":"<p>The list of Regions targeted for this organization or OU.</p>"
         }
       },
-      "documentation":"<p>One of the targets for the stack set. Returned by the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStackSetAutoDeploymentTargets.html\">ListStackSetAutoDeploymentTargets</a> API operation.</p>"
+      "documentation":"<p>One of the targets for the StackSet. Returned by the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStackSetAutoDeploymentTargets.html\">ListStackSetAutoDeploymentTargets</a> API operation.</p>"
     },
     "StackSetDriftDetectionDetails":{
       "type":"structure",
       "members":{
         "DriftStatus":{
           "shape":"StackSetDriftStatus",
-          "documentation":"<p>Status of the stack set's actual configuration compared to its expected template and parameter configuration. A stack set is considered to have drifted if one or more of its stack instances have drifted from their expected template and parameter configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: One or more of the stack instances belonging to the stack set stack differs from the expected template and parameter configuration. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked the stack set for drift.</p> </li> <li> <p> <code>IN_SYNC</code>: All of the stack instances belonging to the stack set stack match from the expected template and parameter configuration.</p> </li> </ul>"
+          "documentation":"<p>Status of the StackSet's actual configuration compared to its expected template and parameter configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: One or more of the stack instances belonging to the StackSet differs from the expected template and parameter configuration. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked the StackSet for drift.</p> </li> <li> <p> <code>IN_SYNC</code>: All of the stack instances belonging to the StackSet stack match the expected template and parameter configuration.</p> </li> </ul>"
         },
         "DriftDetectionStatus":{
           "shape":"StackSetDriftDetectionStatus",
-          "documentation":"<p>The status of the stack set drift detection operation.</p> <ul> <li> <p> <code>COMPLETED</code>: The drift detection operation completed without failing on any stack instances.</p> </li> <li> <p> <code>FAILED</code>: The drift detection operation exceeded the specified failure tolerance.</p> </li> <li> <p> <code>PARTIAL_SUCCESS</code>: The drift detection operation completed without exceeding the failure tolerance for the operation.</p> </li> <li> <p> <code>IN_PROGRESS</code>: The drift detection operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the drift detection operation.</p> </li> </ul>"
+          "documentation":"<p>The status of the StackSet drift detection operation.</p> <ul> <li> <p> <code>COMPLETED</code>: The drift detection operation completed without failing on any stack instances.</p> </li> <li> <p> <code>FAILED</code>: The drift detection operation exceeded the specified failure tolerance.</p> </li> <li> <p> <code>PARTIAL_SUCCESS</code>: The drift detection operation completed without exceeding the failure tolerance for the operation.</p> </li> <li> <p> <code>IN_PROGRESS</code>: The drift detection operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the drift detection operation.</p> </li> </ul>"
         },
         "LastDriftCheckTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack set. This value will be <code>NULL</code> for any stack set on which drift detection hasn't yet been performed.</p>"
+          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the StackSet. This value will be <code>NULL</code> for any StackSet that drift detection hasn't yet been performed on.</p>"
         },
         "TotalStackInstancesCount":{
           "shape":"TotalStackInstancesCount",
-          "documentation":"<p>The total number of stack instances belonging to this stack set.</p> <p>The total number of stack instances is equal to the total of:</p> <ul> <li> <p>Stack instances that match the stack set configuration.</p> </li> <li> <p>Stack instances that have drifted from the stack set configuration.</p> </li> <li> <p>Stack instances where the drift detection operation has failed.</p> </li> <li> <p>Stack instances currently being checked for drift.</p> </li> </ul>"
+          "documentation":"<p>The total number of stack instances belonging to this StackSet.</p> <p>The total number of stack instances is equal to the total of:</p> <ul> <li> <p>Stack instances that match the StackSet configuration.</p> </li> <li> <p>Stack instances that have drifted from the StackSet configuration.</p> </li> <li> <p>Stack instances where the drift detection operation has failed.</p> </li> <li> <p>Stack instances currently being checked for drift.</p> </li> </ul>"
         },
         "DriftedStackInstancesCount":{
           "shape":"DriftedStackInstancesCount",
-          "documentation":"<p>The number of stack instances that have drifted from the expected template and parameter configuration of the stack set. A stack instance is considered to have drifted if one or more of the resources in the associated stack don't match their expected configuration.</p>"
+          "documentation":"<p>The number of stack instances that have drifted from the expected template and parameter configuration of the StackSet. A stack instance is considered to have drifted if one or more of the resources in the associated stack don't match their expected configuration.</p>"
         },
         "InSyncStackInstancesCount":{
           "shape":"InSyncStackInstancesCount",
-          "documentation":"<p>The number of stack instances which match the expected template and parameter configuration of the stack set.</p>"
+          "documentation":"<p>The number of stack instances which match the expected template and parameter configuration of the StackSet.</p>"
         },
         "InProgressStackInstancesCount":{
           "shape":"InProgressStackInstancesCount",
@@ -7087,7 +7591,7 @@
           "documentation":"<p>The number of stack instances for which the drift detection operation failed.</p>"
         }
       },
-      "documentation":"<p>Detailed information about the drift status of the stack set.</p> <p>For stack sets, contains information about the last <i>completed</i> drift operation performed on the stack set. Information about drift operations in-progress isn't included.</p> <p>For stack set operations, includes information about drift operations currently being performed on the stack set.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Detecting unmanaged changes in stack sets</a> in the <i>CloudFormation User Guide</i>.</p>"
+      "documentation":"<p>Detailed information about the drift status of the StackSet.</p> <p>For StackSets, contains information about the last <i>completed</i> drift operation performed on the StackSet. Information about drift operations in-progress isn't included.</p> <p>For StackSet operations, includes information about drift operations currently being performed on the StackSet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Performing drift detection on CloudFormation StackSets</a> in the <i>CloudFormation User Guide</i>.</p>"
     },
     "StackSetDriftDetectionStatus":{
       "type":"string",
@@ -7115,9 +7619,8 @@
     },
     "StackSetNotEmptyException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You can't yet delete this stack set, because it still contains one or more stack instances. Delete all stack instances from the stack set before deleting the stack set.</p>",
+      "members":{},
+      "documentation":"<p>You can't yet delete this StackSet, because it still contains one or more stack instances. Delete all stack instances from the StackSet before deleting the StackSet.</p>",
       "error":{
         "code":"StackSetNotEmptyException",
         "httpStatusCode":409,
@@ -7127,9 +7630,8 @@
     },
     "StackSetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>The specified stack set doesn't exist.</p>",
+      "members":{},
+      "documentation":"<p>The specified StackSet doesn't exist.</p>",
       "error":{
         "code":"StackSetNotFoundException",
         "httpStatusCode":404,
@@ -7142,35 +7644,35 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique ID of a stack set operation.</p>"
+          "documentation":"<p>The unique ID of a StackSet operation.</p>"
         },
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The ID of the stack set.</p>"
+          "documentation":"<p>The ID of the StackSet.</p>"
         },
         "Action":{
           "shape":"StackSetOperationAction",
-          "documentation":"<p>The type of stack set operation: <code>CREATE</code>, <code>UPDATE</code>, or <code>DELETE</code>. Create and delete operations affect only the specified stack set instances that are associated with the specified stack set. Update operations affect both the stack set itself, in addition to <i>all</i> associated stack set instances.</p>"
+          "documentation":"<p>The type of StackSet operation: <code>CREATE</code>, <code>UPDATE</code>, or <code>DELETE</code>. Create and delete operations affect only the specified stack instances that are associated with the specified StackSet. Update operations affect both the StackSet itself, in addition to <i>all</i> associated stack instances.</p>"
         },
         "Status":{
           "shape":"StackSetOperationStatus",
-          "documentation":"<p>The status of the operation.</p> <ul> <li> <p> <code>FAILED</code>: The operation exceeded the specified failure tolerance. The failure tolerance value that you've set for an operation is applied for each Region during stack create and update operations. If the number of failed stacks within a Region exceeds the failure tolerance, the status of the operation in the Region is set to <code>FAILED</code>. This in turn sets the status of the operation as a whole to <code>FAILED</code>, and CloudFormation cancels the operation in any remaining Regions.</p> </li> <li> <p> <code>QUEUED</code>: [Service-managed permissions] For automatic deployments that require a sequence of operations, the operation is queued to be performed. For more information, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-status-codes\">stack set operation status codes</a> in the <i>CloudFormation User Guide</i>.</p> </li> <li> <p> <code>RUNNING</code>: The operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the operation.</p> </li> <li> <p> <code>STOPPING</code>: The operation is in the process of stopping, at user request.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation completed creating or updating all the specified stacks without exceeding the failure tolerance for the operation.</p> </li> </ul>"
+          "documentation":"<p>The status of the operation.</p> <ul> <li> <p> <code>FAILED</code>: The operation exceeded the specified failure tolerance. The failure tolerance value that you've set for an operation is applied for each Region during stack create and update operations. If the number of failed stacks within a Region exceeds the failure tolerance, the status of the operation in the Region is set to <code>FAILED</code>. This in turn sets the status of the operation as a whole to <code>FAILED</code>, and CloudFormation cancels the operation in any remaining Regions.</p> </li> <li> <p> <code>QUEUED</code>: [Service-managed permissions] For automatic deployments that require a sequence of operations, the operation is queued to be performed. For more information, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-status-codes\">StackSets status codes</a> in the <i>CloudFormation User Guide</i>.</p> </li> <li> <p> <code>RUNNING</code>: The operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the operation.</p> </li> <li> <p> <code>STOPPING</code>: The operation is in the process of stopping, at user request.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation completed creating or updating all the specified stacks without exceeding the failure tolerance for the operation.</p> </li> </ul>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>The preferences for how CloudFormation performs this stack set operation.</p>"
+          "documentation":"<p>The preferences for how CloudFormation performs this StackSet operation.</p>"
         },
         "RetainStacks":{
           "shape":"RetainStacksNullable",
-          "documentation":"<p>For stack set operations of action type <code>DELETE</code>, specifies whether to remove the stack instances from the specified stack set, but doesn't delete the stacks. You can't re-associate a retained stack, or add an existing, saved stack to a new stack set.</p>"
+          "documentation":"<p>For StackSet operations of action type <code>DELETE</code>, specifies whether to remove the stack instances from the specified StackSet, but doesn't delete the stacks. You can't re-associate a retained stack, or add an existing, saved stack to a new StackSet.</p>"
         },
         "AdministrationRoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role used to perform this stack set operation.</p> <p>Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html\">Define Permissions for Multiple Administrators</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role used to perform this StackSet operation.</p> <p>Use customized administrator roles to control which users or groups can manage specific StackSets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "ExecutionRoleName":{
           "shape":"ExecutionRoleName",
-          "documentation":"<p>The name of the IAM execution role used to create or update the stack set.</p> <p>Use customized execution roles to control which stack resources users and groups can include in their stack sets.</p>"
+          "documentation":"<p>The name of the IAM execution role used to create or update the StackSet.</p> <p>Use customized execution roles to control which stack resources users and groups can include in their StackSets.</p>"
         },
         "CreationTimestamp":{
           "shape":"Timestamp",
@@ -7178,15 +7680,15 @@
         },
         "EndTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>The time at which the stack set operation ended, across all accounts and Regions specified. Note that this doesn't necessarily mean that the stack set operation was successful, or even attempted, in each account or Region.</p>"
+          "documentation":"<p>The time at which the StackSet operation ended, across all accounts and Regions specified. Note that this doesn't necessarily mean that the StackSet operation was successful, or even attempted, in each account or Region.</p>"
         },
         "DeploymentTargets":{
           "shape":"DeploymentTargets",
-          "documentation":"<p>[Service-managed permissions] The Organizations accounts affected by the stack operation.</p>"
+          "documentation":"<p>The Organizations accounts affected by the stack operation. Valid only if the StackSet uses service-managed permissions.</p>"
         },
         "StackSetDriftDetectionDetails":{
           "shape":"StackSetDriftDetectionDetails",
-          "documentation":"<p>Detailed information about the drift status of the stack set. This includes information about drift operations currently being performed on the stack set.</p> <p>This information will only be present for stack set operations whose <code>Action</code> type is <code>DETECT_DRIFT</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Detect stack set drift</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>Detailed information about the drift status of the StackSet. This includes information about drift operations currently being performed on the StackSet.</p> <p>This information will only be present for StackSet operations whose <code>Action</code> type is <code>DETECT_DRIFT</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-drift.html\">Performing drift detection on CloudFormation StackSets</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "StatusReason":{
           "shape":"StackSetOperationStatusReason",
@@ -7197,7 +7699,7 @@
           "documentation":"<p>Detailed information about the StackSet operation.</p>"
         }
       },
-      "documentation":"<p>The structure that contains information about a stack set operation.</p>"
+      "documentation":"<p>The structure that contains information about a StackSet operation.</p>"
     },
     "StackSetOperationAction":{
       "type":"string",
@@ -7217,30 +7719,30 @@
         },
         "RegionOrder":{
           "shape":"RegionList",
-          "documentation":"<p>The order of the Regions where you want to perform the stack operation.</p> <note> <p> <code>RegionOrder</code> isn't followed if <code>AutoDeployment</code> is enabled.</p> </note>"
+          "documentation":"<p>The order of the Regions where you want to perform the stack operation.</p>"
         },
         "FailureToleranceCount":{
           "shape":"FailureToleranceCount",
-          "documentation":"<p>The number of accounts, per Region, for which this operation can fail before CloudFormation stops the operation in that Region. If the operation is stopped in a Region, CloudFormation doesn't attempt the operation in any subsequent Regions.</p> <p>Conditional: You must specify either <code>FailureToleranceCount</code> or <code>FailureTolerancePercentage</code> (but not both).</p> <p>By default, <code>0</code> is specified.</p>"
+          "documentation":"<p>The number of accounts per Region this operation can fail in before CloudFormation stops the operation in that Region. If the operation is stopped in a Region, CloudFormation doesn't attempt the operation in any subsequent Regions.</p> <p>You can specify either <code>FailureToleranceCount</code> or <code>FailureTolerancePercentage</code>, but not both.</p> <p>By default, <code>0</code> is specified.</p>"
         },
         "FailureTolerancePercentage":{
           "shape":"FailureTolerancePercentage",
-          "documentation":"<p>The percentage of accounts, per Region, for which this stack operation can fail before CloudFormation stops the operation in that Region. If the operation is stopped in a Region, CloudFormation doesn't attempt the operation in any subsequent Regions.</p> <p>When calculating the number of accounts based on the specified percentage, CloudFormation rounds <i>down</i> to the next whole number.</p> <p>Conditional: You must specify either <code>FailureToleranceCount</code> or <code>FailureTolerancePercentage</code>, but not both.</p> <p>By default, <code>0</code> is specified.</p>"
+          "documentation":"<p>The percentage of accounts per Region this stack operation can fail in before CloudFormation stops the operation in that Region. If the operation is stopped in a Region, CloudFormation doesn't attempt the operation in any subsequent Regions.</p> <p>When calculating the number of accounts based on the specified percentage, CloudFormation rounds <i>down</i> to the next whole number.</p> <p>You can specify either <code>FailureToleranceCount</code> or <code>FailureTolerancePercentage</code>, but not both.</p> <p>By default, <code>0</code> is specified.</p>"
         },
         "MaxConcurrentCount":{
           "shape":"MaxConcurrentCount",
-          "documentation":"<p>The maximum number of accounts in which to perform this operation at one time. This can depend on the value of <code>FailureToleranceCount</code> depending on your <code>ConcurrencyMode</code>. <code>MaxConcurrentCount</code> is at most one more than the <code>FailureToleranceCount</code> if you're using <code>STRICT_FAILURE_TOLERANCE</code>.</p> <p>Note that this setting lets you specify the <i>maximum</i> for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.</p> <p>Conditional: You must specify either <code>MaxConcurrentCount</code> or <code>MaxConcurrentPercentage</code>, but not both.</p> <p>By default, <code>1</code> is specified.</p>"
+          "documentation":"<p>The maximum number of accounts in which to perform this operation at one time. This can depend on the value of <code>FailureToleranceCount</code> depending on your <code>ConcurrencyMode</code>. <code>MaxConcurrentCount</code> is at most one more than the <code>FailureToleranceCount</code> if you're using <code>STRICT_FAILURE_TOLERANCE</code>.</p> <p>Note that this setting lets you specify the <i>maximum</i> for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.</p> <p>You can specify either <code>MaxConcurrentCount</code> or <code>MaxConcurrentPercentage</code>, but not both.</p> <p>By default, <code>1</code> is specified.</p>"
         },
         "MaxConcurrentPercentage":{
           "shape":"MaxConcurrentPercentage",
-          "documentation":"<p>The maximum percentage of accounts in which to perform this operation at one time.</p> <p>When calculating the number of accounts based on the specified percentage, CloudFormation rounds down to the next whole number. This is true except in cases where rounding down would result is zero. In this case, CloudFormation sets the number as one instead.</p> <p>Note that this setting lets you specify the <i>maximum</i> for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.</p> <p>Conditional: You must specify either <code>MaxConcurrentCount</code> or <code>MaxConcurrentPercentage</code>, but not both.</p> <p>By default, <code>1</code> is specified.</p>"
+          "documentation":"<p>The maximum percentage of accounts in which to perform this operation at one time.</p> <p>When calculating the number of accounts based on the specified percentage, CloudFormation rounds down to the next whole number. This is true except in cases where rounding down would result is zero. In this case, CloudFormation sets the number as one instead.</p> <p>Note that this setting lets you specify the <i>maximum</i> for operations. For large deployments, under certain circumstances the actual number of accounts acted upon concurrently may be lower due to service throttling.</p> <p>You can specify either <code>MaxConcurrentCount</code> or <code>MaxConcurrentPercentage</code>, but not both.</p> <p>By default, <code>1</code> is specified.</p>"
         },
         "ConcurrencyMode":{
           "shape":"ConcurrencyMode",
-          "documentation":"<p>Specifies how the concurrency level behaves during the operation execution.</p> <ul> <li> <p> <code>STRICT_FAILURE_TOLERANCE</code>: This option dynamically lowers the concurrency level to ensure the number of failed accounts never exceeds the value of <code>FailureToleranceCount</code> +1. The initial actual concurrency is set to the lower of either the value of the <code>MaxConcurrentCount</code>, or the value of <code>FailureToleranceCount</code> +1. The actual concurrency is then reduced proportionally by the number of failures. This is the default behavior.</p> <p>If failure tolerance or Maximum concurrent accounts are set to percentages, the behavior is similar.</p> </li> <li> <p> <code>SOFT_FAILURE_TOLERANCE</code>: This option decouples <code>FailureToleranceCount</code> from the actual concurrency. This allows stack set operations to run at the concurrency level set by the <code>MaxConcurrentCount</code> value, or <code>MaxConcurrentPercentage</code>, regardless of the number of failures.</p> </li> </ul>"
+          "documentation":"<p>Specifies how the concurrency level behaves during the operation execution.</p> <ul> <li> <p> <code>STRICT_FAILURE_TOLERANCE</code>: This option dynamically lowers the concurrency level to ensure the number of failed accounts never exceeds the value of <code>FailureToleranceCount</code> +1. The initial actual concurrency is set to the lower of either the value of the <code>MaxConcurrentCount</code>, or the value of <code>FailureToleranceCount</code> +1. The actual concurrency is then reduced proportionally by the number of failures. This is the default behavior.</p> <p>If failure tolerance or Maximum concurrent accounts are set to percentages, the behavior is similar.</p> </li> <li> <p> <code>SOFT_FAILURE_TOLERANCE</code>: This option decouples <code>FailureToleranceCount</code> from the actual concurrency. This allows StackSet operations to run at the concurrency level set by the <code>MaxConcurrentCount</code> value, or <code>MaxConcurrentPercentage</code>, regardless of the number of failures.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>The user-specified preferences for how CloudFormation performs a stack set operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-ops-options\">Stack set operation options</a>.</p>"
+      "documentation":"<p>The user-specified preferences for how CloudFormation performs a StackSet operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options\">StackSet operation options</a>.</p> <note> <p> <code>StackSetOperationPreferences</code> don't apply to <code>AutoDeployment</code>, even if it's enabled.</p> </note>"
     },
     "StackSetOperationResultStatus":{
       "type":"string",
@@ -7269,7 +7771,7 @@
         },
         "Status":{
           "shape":"StackSetOperationResultStatus",
-          "documentation":"<p>The result status of the stack set operation for the given account in the given Region.</p> <ul> <li> <p> <code>CANCELLED</code>: The operation in the specified account and Region has been canceled. This is either because a user has stopped the stack set operation, or because the failure tolerance of the stack set operation has been exceeded.</p> </li> <li> <p> <code>FAILED</code>: The operation in the specified account and Region failed.</p> <p>If the stack set operation fails in enough accounts within a Region, the failure tolerance for the stack set operation as a whole might be exceeded.</p> </li> <li> <p> <code>RUNNING</code>: The operation in the specified account and Region is currently in progress.</p> </li> <li> <p> <code>PENDING</code>: The operation in the specified account and Region has yet to start.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation in the specified account and Region completed successfully.</p> </li> </ul>"
+          "documentation":"<p>The result status of the StackSet operation for the given account in the given Region.</p> <ul> <li> <p> <code>CANCELLED</code>: The operation in the specified account and Region has been canceled. This is either because a user has stopped the StackSet operation, or because the failure tolerance of the StackSet operation has been exceeded.</p> </li> <li> <p> <code>FAILED</code>: The operation in the specified account and Region failed.</p> <p>If the StackSet operation fails in enough accounts within a Region, the failure tolerance for the StackSet operation as a whole might be exceeded.</p> </li> <li> <p> <code>RUNNING</code>: The operation in the specified account and Region is currently in progress.</p> </li> <li> <p> <code>PENDING</code>: The operation in the specified account and Region has yet to start.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation in the specified account and Region completed successfully.</p> </li> </ul>"
         },
         "StatusReason":{
           "shape":"Reason",
@@ -7277,7 +7779,7 @@
         },
         "AccountGateResult":{
           "shape":"AccountGateResult",
-          "documentation":"<p>The results of the account gate function CloudFormation invokes, if present, before proceeding with stack set operations in an account.</p>"
+          "documentation":"<p>The results of the account gate function CloudFormation invokes, if present, before proceeding with StackSet operations in an account.</p>"
         },
         "OrganizationalUnitId":{
           "shape":"OrganizationalUnitId",
@@ -7317,23 +7819,23 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique ID of the stack set operation.</p>"
+          "documentation":"<p>The unique ID of the StackSet operation.</p>"
         },
         "Action":{
           "shape":"StackSetOperationAction",
-          "documentation":"<p>The type of operation: <code>CREATE</code>, <code>UPDATE</code>, or <code>DELETE</code>. Create and delete operations affect only the specified stack instances that are associated with the specified stack set. Update operations affect both the stack set itself and <i>all</i> associated stack set instances.</p>"
+          "documentation":"<p>The type of operation: <code>CREATE</code>, <code>UPDATE</code>, or <code>DELETE</code>. Create and delete operations affect only the specified stack instances that are associated with the specified StackSet. Update operations affect both the StackSet itself and <i>all</i> associated StackSet instances.</p>"
         },
         "Status":{
           "shape":"StackSetOperationStatus",
-          "documentation":"<p>The overall status of the operation.</p> <ul> <li> <p> <code>FAILED</code>: The operation exceeded the specified failure tolerance. The failure tolerance value that you've set for an operation is applied for each Region during stack create and update operations. If the number of failed stacks within a Region exceeds the failure tolerance, the status of the operation in the Region is set to <code>FAILED</code>. This in turn sets the status of the operation as a whole to <code>FAILED</code>, and CloudFormation cancels the operation in any remaining Regions.</p> </li> <li> <p> <code>QUEUED</code>: [Service-managed permissions] For automatic deployments that require a sequence of operations, the operation is queued to be performed. For more information, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-status-codes\">stack set operation status codes</a> in the <i>CloudFormation User Guide</i>.</p> </li> <li> <p> <code>RUNNING</code>: The operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the operation.</p> </li> <li> <p> <code>STOPPING</code>: The operation is in the process of stopping, at user request.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation completed creating or updating all the specified stacks without exceeding the failure tolerance for the operation.</p> </li> </ul>"
+          "documentation":"<p>The overall status of the operation.</p> <ul> <li> <p> <code>FAILED</code>: The operation exceeded the specified failure tolerance. The failure tolerance value that you've set for an operation is applied for each Region during stack create and update operations. If the number of failed stacks within a Region exceeds the failure tolerance, the status of the operation in the Region is set to <code>FAILED</code>. This in turn sets the status of the operation as a whole to <code>FAILED</code>, and CloudFormation cancels the operation in any remaining Regions.</p> </li> <li> <p> <code>QUEUED</code>: [Service-managed permissions] For automatic deployments that require a sequence of operations, the operation is queued to be performed. For more information, see the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-status-codes\">StackSet status codes</a> in the <i>CloudFormation User Guide</i>.</p> </li> <li> <p> <code>RUNNING</code>: The operation is currently being performed.</p> </li> <li> <p> <code>STOPPED</code>: The user has canceled the operation.</p> </li> <li> <p> <code>STOPPING</code>: The operation is in the process of stopping, at user request.</p> </li> <li> <p> <code>SUCCEEDED</code>: The operation completed creating or updating all the specified stacks without exceeding the failure tolerance for the operation.</p> </li> </ul>"
         },
         "CreationTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>The time at which the operation was initiated. Note that the creation times for the stack set operation might differ from the creation time of the individual stacks themselves. This is because CloudFormation needs to perform preparatory work for the operation, such as dispatching the work to the requested Regions, before actually creating the first stacks.</p>"
+          "documentation":"<p>The time at which the operation was initiated. Note that the creation times for the StackSet operation might differ from the creation time of the individual stacks themselves. This is because CloudFormation needs to perform preparatory work for the operation, such as dispatching the work to the requested Regions, before actually creating the first stacks.</p>"
         },
         "EndTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>The time at which the stack set operation ended, across all accounts and Regions specified. Note that this doesn't necessarily mean that the stack set operation was successful, or even attempted, in each account or Region.</p>"
+          "documentation":"<p>The time at which the StackSet operation ended, across all accounts and Regions specified. Note that this doesn't necessarily mean that the StackSet operation was successful, or even attempted, in each account or Region.</p>"
         },
         "StatusReason":{
           "shape":"StackSetOperationStatusReason",
@@ -7341,11 +7843,11 @@
         },
         "StatusDetails":{
           "shape":"StackSetOperationStatusDetails",
-          "documentation":"<p>Detailed information about the stack set operation.</p>"
+          "documentation":"<p>Detailed information about the StackSet operation.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>The user-specified preferences for how CloudFormation performs a stack set operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html#stackset-ops-options\">Stack set operation options</a>.</p>"
+          "documentation":"<p>The user-specified preferences for how CloudFormation performs a StackSet operation.</p> <p>For more information about maximum concurrent accounts and failure tolerance, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html#stackset-ops-options\">StackSet operation options</a>.</p>"
         }
       },
       "documentation":"<p>The structures that contain summary information about the specified operation.</p>"
@@ -7366,19 +7868,19 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name of the stack set.</p>"
+          "documentation":"<p>The name of the StackSet.</p>"
         },
         "StackSetId":{
           "shape":"StackSetId",
-          "documentation":"<p>The ID of the stack set.</p>"
+          "documentation":"<p>The ID of the StackSet.</p>"
         },
         "Description":{
           "shape":"Description",
-          "documentation":"<p>A description of the stack set that you specify when the stack set is created or updated.</p>"
+          "documentation":"<p>A description of the StackSet that you specify when the StackSet is created or updated.</p>"
         },
         "Status":{
           "shape":"StackSetStatus",
-          "documentation":"<p>The status of the stack set.</p>"
+          "documentation":"<p>The status of the StackSet.</p>"
         },
         "AutoDeployment":{
           "shape":"AutoDeployment",
@@ -7386,22 +7888,22 @@
         },
         "PermissionModel":{
           "shape":"PermissionModels",
-          "documentation":"<p>Describes how the IAM roles required for stack set operations are created.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant Self-Managed Stack Set Permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-service-managed.html\">Grant Service-Managed Stack Set Permissions</a>.</p> </li> </ul>"
+          "documentation":"<p>Describes how the IAM roles required for StackSet operations are created.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-activate-trusted-access.html\">Activate trusted access for StackSets with Organizations</a>.</p> </li> </ul>"
         },
         "DriftStatus":{
           "shape":"StackDriftStatus",
-          "documentation":"<p>Status of the stack set's actual configuration compared to its expected template and parameter configuration. A stack set is considered to have drifted if one or more of its stack instances have drifted from their expected template and parameter configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: One or more of the stack instances belonging to the stack set stack differs from the expected template and parameter configuration. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked the stack set for drift.</p> </li> <li> <p> <code>IN_SYNC</code>: All the stack instances belonging to the stack set stack match from the expected template and parameter configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
+          "documentation":"<p>Status of the StackSet's actual configuration compared to its expected template and parameter configuration.</p> <ul> <li> <p> <code>DRIFTED</code>: One or more of the stack instances belonging to the StackSet differs from the expected template and parameter configuration. A stack instance is considered to have drifted if one or more of the resources in the associated stack have drifted.</p> </li> <li> <p> <code>NOT_CHECKED</code>: CloudFormation hasn't checked the StackSet for drift.</p> </li> <li> <p> <code>IN_SYNC</code>: All the stack instances belonging to the StackSet match the expected template and parameter configuration.</p> </li> <li> <p> <code>UNKNOWN</code>: This value is reserved for future use.</p> </li> </ul>"
         },
         "LastDriftCheckTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the stack set. This value will be <code>NULL</code> for any stack set on which drift detection hasn't yet been performed.</p>"
+          "documentation":"<p>Most recent time when CloudFormation performed a drift detection operation on the StackSet. This value will be <code>NULL</code> for any StackSet that drift detection hasn't yet been performed on.</p>"
         },
         "ManagedExecution":{
           "shape":"ManagedExecution",
           "documentation":"<p>Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.</p>"
         }
       },
-      "documentation":"<p>The structures that contain summary information about the specified stack set.</p>"
+      "documentation":"<p>The structures that contain summary information about the specified StackSet.</p>"
     },
     "StackStatus":{
       "type":"string",
@@ -7482,11 +7984,11 @@
         },
         "ParentId":{
           "shape":"StackId",
-          "documentation":"<p>For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Embed stacks within other stacks using nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>For nested stacks, the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "RootId":{
           "shape":"StackId",
-          "documentation":"<p>For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Embed stacks within other stacks using nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
+          "documentation":"<p>For nested stacks, the stack ID of the top-level stack to which the nested stack ultimately belongs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html\">Nested stacks</a> in the <i>CloudFormation User Guide</i>.</p>"
         },
         "DriftInformation":{
           "shape":"StackDriftInformationSummary",
@@ -7505,9 +8007,8 @@
     },
     "StaleRequestException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Another operation has been performed on this stack set since the specified operation was performed.</p>",
+      "members":{},
+      "documentation":"<p>Another operation has been performed on this StackSet since the specified operation was performed.</p>",
       "error":{
         "code":"StaleRequestException",
         "httpStatusCode":409,
@@ -7521,6 +8022,10 @@
         "ClientRequestToken":{
           "shape":"ClientRequestToken",
           "documentation":"<p>A unique identifier for this <code>StartResourceScan</code> request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to start a new resource scan.</p>"
+        },
+        "ScanFilters":{
+          "shape":"ScanFilters",
+          "documentation":"<p>The scan filters to use.</p>"
         }
       }
     },
@@ -7546,7 +8051,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to stop the operation for.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to stop the operation for.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
@@ -7554,14 +8059,13 @@
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account. Valid only if the StackSet uses service-managed permissions.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
     "StopStackSetOperationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SupportedMajorVersion":{
       "type":"integer",
@@ -7581,11 +8085,11 @@
       "members":{
         "Key":{
           "shape":"TagKey",
-          "documentation":"<p> <i>Required</i>. A string used to identify this tag. You can specify a maximum of 128 characters for a tag key. Tags owned by Amazon Web Services have the reserved prefix: <code>aws:</code>.</p>"
+          "documentation":"<p>A string used to identify this tag. You can specify a maximum of 128 characters for a tag key. Tags owned by Amazon Web Services have the reserved prefix: <code>aws:</code>.</p>"
         },
         "Value":{
           "shape":"TagValue",
-          "documentation":"<p> <i>Required</i>. A string containing the value for this tag. You can specify a maximum of 256 characters for a tag value.</p>"
+          "documentation":"<p>A string that contains the value for this tag. You can specify a maximum of 256 characters for a tag value.</p>"
         }
       },
       "documentation":"<p>The Tag type enables you to specify a key-value pair that can be used to store information about an CloudFormation stack.</p>"
@@ -7741,7 +8245,7 @@
     },
     "TemplateURL":{
       "type":"string",
-      "max":1024,
+      "max":5120,
       "min":1
     },
     "TestTypeInput":{
@@ -7798,8 +8302,7 @@
     "Timestamp":{"type":"timestamp"},
     "TokenAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A client request token already exists.</p>",
       "error":{
         "code":"TokenAlreadyExistsException",
@@ -7850,7 +8353,7 @@
       "members":{
         "Arn":{
           "shape":"TypeConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the configuration data, in this account and Region.</p>"
+          "documentation":"<p>The ARN for the configuration data, in this account and Region.</p>"
         },
         "Alias":{
           "shape":"TypeConfigurationAlias",
@@ -7866,7 +8369,7 @@
         },
         "TypeArn":{
           "shape":"TypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the extension, in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p>"
+          "documentation":"<p>The ARN for the extension, in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p>"
         },
         "TypeName":{
           "shape":"TypeName",
@@ -7888,7 +8391,7 @@
       "members":{
         "TypeArn":{
           "shape":"TypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the extension, in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p>"
+          "documentation":"<p>The ARN for the extension, in this account and Region.</p> <p>For public extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ActivateType.html\">ActivateType</a> API operation in this account and Region. For private extensions, this will be the ARN assigned when you call the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html\">RegisterType</a> API operation in this account and Region.</p>"
         },
         "TypeConfigurationAlias":{
           "shape":"TypeConfigurationAlias",
@@ -7896,7 +8399,7 @@
         },
         "TypeConfigurationArn":{
           "shape":"TypeConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the configuration, in this account and Region.</p>"
+          "documentation":"<p>The ARN for the configuration, in this account and Region.</p>"
         },
         "Type":{
           "shape":"ThirdPartyType",
@@ -7916,8 +8419,7 @@
     },
     "TypeConfigurationNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified extension configuration can't be found.</p>",
       "error":{
         "code":"TypeConfigurationNotFoundException",
@@ -7959,8 +8461,7 @@
     },
     "TypeNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified extension doesn't exist in the CloudFormation registry.</p>",
       "error":{
         "code":"TypeNotFoundException",
@@ -7995,7 +8496,7 @@
         },
         "TypeArn":{
           "shape":"TypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the extension.</p>"
+          "documentation":"<p>The ARN of the extension.</p>"
         },
         "LastUpdated":{
           "shape":"Timestamp",
@@ -8074,7 +8575,7 @@
         },
         "VersionId":{
           "shape":"TypeVersionId",
-          "documentation":"<p>The ID of a specific version of the extension. The version ID is the value at the end of the Amazon Resource Name (ARN) assigned to the extension version when it's registered.</p>"
+          "documentation":"<p>The ID of a specific version of the extension. The version ID is the value at the end of the ARN assigned to the extension version when it's registered.</p>"
         },
         "IsDefaultVersion":{
           "shape":"IsDefaultVersion",
@@ -8082,7 +8583,7 @@
         },
         "Arn":{
           "shape":"TypeArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the extension version.</p>"
+          "documentation":"<p>The ARN of the extension version.</p>"
         },
         "TimeCreated":{
           "shape":"Timestamp",
@@ -8152,11 +8653,11 @@
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code>, <code>TemplateURL</code>, or set the <code>UsePreviousTemplate</code> to <code>true</code>.</p>"
+          "documentation":"<p>Structure that contains the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code>, <code>TemplateURL</code>, or set the <code>UsePreviousTemplate</code> to <code>true</code>.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>Location of file containing the template body. The URL must point to a template that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code>, <code>TemplateURL</code>, or set the <code>UsePreviousTemplate</code> to <code>true</code>.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template that's located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code>, <code>TemplateURL</code>, or set the <code>UsePreviousTemplate</code> to <code>true</code>.</p>"
         },
         "UsePreviousTemplate":{
           "shape":"UsePreviousTemplate",
@@ -8164,11 +8665,11 @@
         },
         "StackPolicyDuringUpdateBody":{
           "shape":"StackPolicyDuringUpdateBody",
-          "documentation":"<p>Structure containing the temporary overriding stack policy body. You can specify either the <code>StackPolicyDuringUpdateBody</code> or the <code>StackPolicyDuringUpdateURL</code> parameter, but not both.</p> <p>If you want to update protected resources, specify a temporary overriding stack policy during this update. If you don't specify a stack policy, the current policy that is associated with the stack will be used.</p>"
+          "documentation":"<p>Structure that contains the temporary overriding stack policy body. You can specify either the <code>StackPolicyDuringUpdateBody</code> or the <code>StackPolicyDuringUpdateURL</code> parameter, but not both.</p> <p>If you want to update protected resources, specify a temporary overriding stack policy during this update. If you don't specify a stack policy, the current policy that is associated with the stack will be used.</p>"
         },
         "StackPolicyDuringUpdateURL":{
           "shape":"StackPolicyDuringUpdateURL",
-          "documentation":"<p>Location of a file containing the temporary overriding stack policy. The URL must point to a policy (max size: 16KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. You can specify either the <code>StackPolicyDuringUpdateBody</code> or the <code>StackPolicyDuringUpdateURL</code> parameter, but not both.</p> <p>If you want to update protected resources, specify a temporary overriding stack policy during this update. If you don't specify a stack policy, the current policy that is associated with the stack will be used.</p>"
+          "documentation":"<p>Location of a file that contains the temporary overriding stack policy. The URL must point to a policy (max size: 16KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>You can specify either the <code>StackPolicyDuringUpdateBody</code> or the <code>StackPolicyDuringUpdateURL</code> parameter, but not both.</p> <p>If you want to update protected resources, specify a temporary overriding stack policy during this update. If you don't specify a stack policy, the current policy that is associated with the stack will be used.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -8176,11 +8677,11 @@
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to update the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account, for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we suggest that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-accesskey.html\"> AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-group.html\"> AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\"> AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-user.html\"> AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually updating the stack. If your stack template contains one or more macros, and you choose to update a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <p>If you want to update a stack from a stack template that contains macros <i>and</i> nested stacks, you must update the stack directly from the template using this capability.</p> <important> <p>You should only update stacks directly from a stack template that contains macros if you know what processing the macro performs.</p> <p>Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified.</p> </important> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to update the stack.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account, for example, by creating new IAM users. For those stacks, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we suggest that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-accesskey.html\"> AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-group.html\"> AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-managedpolicy.html\"> AWS::IAM::ManagedPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html\"> AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html\"> AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually updating the stack. If your stack template contains one or more macros, and you choose to update a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-include.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.</p> <p>If you want to update a stack from a stack template that contains macros <i>and</i> nested stacks, you must update the stack directly from the template using this capability.</p> <important> <p>You should only update stacks directly from a stack template that contains macros if you know what processing the macro performs.</p> <p>Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified.</p> </important> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> </li> </ul> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "ResourceTypes":{
           "shape":"ResourceTypes",
-          "documentation":"<p>The template resource types that you have permissions to work with for this update stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>.</p> <p>If the list of resource types doesn't include a resource that you're updating, the stack update fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html\">Control access with Identity and Access Management</a>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
+          "documentation":"<p>The template resource types that you have permissions to work with for this update stack action, such as <code>AWS::EC2::Instance</code>, <code>AWS::EC2::*</code>, or <code>Custom::MyCustomInstance</code>.</p> <p>If the list of resource types doesn't include a resource that you're updating, the stack update fails. By default, CloudFormation grants permissions to all resource types. IAM uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html\">Control access with Identity and Access Management</a>.</p> <note> <p>Only one of the <code>Capabilities</code> and <code>ResourceType</code> parameters can be specified.</p> </note>"
         },
         "RoleARN":{
           "shape":"RoleARN",
@@ -8192,11 +8693,11 @@
         },
         "StackPolicyBody":{
           "shape":"StackPolicyBody",
-          "documentation":"<p>Structure containing a new stack policy body. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p> <p>You might update the stack policy, for example, in order to protect a new resource that you created during a stack update. If you don't specify a stack policy, the current policy that is associated with the stack is unchanged.</p>"
+          "documentation":"<p>Structure that contains a new stack policy body. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p> <p>You might update the stack policy, for example, in order to protect a new resource that you created during a stack update. If you don't specify a stack policy, the current policy that is associated with the stack is unchanged.</p>"
         },
         "StackPolicyURL":{
           "shape":"StackPolicyURL",
-          "documentation":"<p>Location of a file containing the updated stack policy. The URL must point to a policy (max size: 16KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p> <p>You might update the stack policy, for example, in order to protect a new resource that you created during a stack update. If you don't specify a stack policy, the current policy that is associated with the stack is unchanged.</p>"
+          "documentation":"<p>Location of a file that contains the updated stack policy. The URL must point to a policy (max size: 16KB) located in an S3 bucket in the same Region as the stack. The location for an Amazon S3 bucket must start with <code>https://</code>. URLs from S3 static websites are not supported.</p> <p>You can specify either the <code>StackPolicyBody</code> or the <code>StackPolicyURL</code> parameter, but not both.</p> <p>You might update the stack policy, for example, in order to protect a new resource that you created during a stack update. If you don't specify a stack policy, the current policy that is associated with the stack is unchanged.</p>"
         },
         "NotificationARNs":{
           "shape":"NotificationARNs",
@@ -8230,15 +8731,15 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetNameOrId",
-          "documentation":"<p>The name or unique ID of the stack set associated with the stack instances.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet associated with the stack instances.</p>"
         },
         "Accounts":{
           "shape":"AccountList",
-          "documentation":"<p>[Self-managed permissions] The names of one or more Amazon Web Services accounts for which you want to update parameter values for stack instances. The overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
+          "documentation":"<p>[Self-managed permissions] The account IDs of one or more Amazon Web Services accounts in which you want to update parameter values for stack instances. The overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
         },
         "DeploymentTargets":{
           "shape":"DeploymentTargets",
-          "documentation":"<p>[Service-managed permissions] The Organizations accounts for which you want to update parameter values for stack instances. If your update targets OUs, the overridden parameter values only apply to the accounts that are currently in the target OUs and their child OUs. Accounts added to the target OUs and their child OUs in the future won't use the overridden values.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
+          "documentation":"<p>[Service-managed permissions] The Organizations accounts in which you want to update parameter values for stack instances. If your update targets OUs, the overridden parameter values only apply to the accounts that are currently in the target OUs and their child OUs. Accounts added to the target OUs and their child OUs in the future won't use the overridden values.</p> <p>You can specify <code>Accounts</code> or <code>DeploymentTargets</code>, but not both.</p>"
         },
         "Regions":{
           "shape":"RegionList",
@@ -8246,20 +8747,20 @@
         },
         "ParameterOverrides":{
           "shape":"Parameters",
-          "documentation":"<p>A list of input parameters whose values you want to update for the specified stack instances.</p> <p>Any overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions. When specifying parameters and their values, be aware of how CloudFormation sets parameter values during stack instance update operations:</p> <ul> <li> <p>To override the current value for a parameter, include the parameter and specify its value.</p> </li> <li> <p>To leave an overridden parameter set to its present value, include the parameter and specify <code>UsePreviousValue</code> as <code>true</code>. (You can't specify both a value and set <code>UsePreviousValue</code> to <code>true</code>.)</p> </li> <li> <p>To set an overridden parameter back to the value specified in the stack set, specify a parameter list but don't include the parameter in the list.</p> </li> <li> <p>To leave all parameters set to their present values, don't specify this property at all.</p> </li> </ul> <p>During stack set updates, any parameter values overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only override the parameter <i>values</i> that are specified in the stack set; to add or delete a parameter itself, use <code>UpdateStackSet</code> to update the stack set template. If you add a parameter to a template, before you can override the parameter value specified in the stack set you must first use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update all stack instances with the updated template and parameter value specified in the stack set. Once a stack instance has been updated with the new parameter, you can then override the parameter value using <code>UpdateStackInstances</code>.</p>"
+          "documentation":"<p>A list of input parameters whose values you want to update for the specified stack instances.</p> <p>Any overridden parameter values will be applied to all stack instances in the specified accounts and Amazon Web Services Regions. When specifying parameters and their values, be aware of how CloudFormation sets parameter values during stack instance update operations:</p> <ul> <li> <p>To override the current value for a parameter, include the parameter and specify its value.</p> </li> <li> <p>To leave an overridden parameter set to its present value, include the parameter and specify <code>UsePreviousValue</code> as <code>true</code>. (You can't specify both a value and set <code>UsePreviousValue</code> to <code>true</code>.)</p> </li> <li> <p>To set an overridden parameter back to the value specified in the StackSet, specify a parameter list but don't include the parameter in the list.</p> </li> <li> <p>To leave all parameters set to their present values, don't specify this property at all.</p> </li> </ul> <p>During StackSet updates, any parameter values overridden for a stack instance aren't updated, but retain their overridden value.</p> <p>You can only override the parameter <i>values</i> that are specified in the StackSet. To add or delete a parameter itself, use <code>UpdateStackSet</code> to update the StackSet template. If you add a parameter to a template, before you can override the parameter value specified in the StackSet you must first use <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html\">UpdateStackSet</a> to update all stack instances with the updated template and parameter value specified in the StackSet. Once a stack instance has been updated with the new parameter, you can then override the parameter value using <code>UpdateStackInstances</code>.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>Preferences for how CloudFormation performs this stack set operation.</p>"
+          "documentation":"<p>Preferences for how CloudFormation performs this StackSet operation.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the stack set operation only once, even if you retry the request multiple times. You might retry stack set operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p>",
+          "documentation":"<p>The unique identifier for this StackSet operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the StackSet operation only once, even if you retry the request multiple times. You might retry StackSet operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, the SDK generates one automatically.</p>",
           "idempotencyToken":true
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         }
       }
     },
@@ -8268,7 +8769,7 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique identifier for this stack set operation.</p>"
+          "documentation":"<p>The unique identifier for this StackSet operation.</p>"
         }
       }
     },
@@ -8288,7 +8789,7 @@
       "members":{
         "StackSetName":{
           "shape":"StackSetName",
-          "documentation":"<p>The name or unique ID of the stack set that you want to update.</p>"
+          "documentation":"<p>The name or unique ID of the StackSet that you want to update.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -8300,68 +8801,68 @@
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>The location of the file that contains the template body. The URL must point to a template (maximum size: 460,800 bytes) that is located in an Amazon S3 bucket or a Systems Manager document.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code> or <code>TemplateURL</code>—or set <code>UsePreviousTemplate</code> to true.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template (maximum size: 1 MB) that is located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>. S3 static website URLs are not supported.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code> or <code>TemplateURL</code>—or set <code>UsePreviousTemplate</code> to true.</p>"
         },
         "UsePreviousTemplate":{
           "shape":"UsePreviousTemplate",
-          "documentation":"<p>Use the existing template that's associated with the stack set that you're updating.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code> or <code>TemplateURL</code>—or set <code>UsePreviousTemplate</code> to true.</p>"
+          "documentation":"<p>Use the existing template that's associated with the StackSet that you're updating.</p> <p>Conditional: You must specify only one of the following parameters: <code>TemplateBody</code> or <code>TemplateURL</code>—or set <code>UsePreviousTemplate</code> to true.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
-          "documentation":"<p>A list of input parameters for the stack set template.</p>"
+          "documentation":"<p>A list of input parameters for the StackSet template.</p>"
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to update the stack set and its associated stack instances.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account, for example, by creating new IAM users. For those stacks sets, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some templates reference macros. If your stack set template references one or more macros, you must update the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To update the stack set directly, you must acknowledge this capability. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Using CloudFormation Macros to Perform Custom Processing on Templates</a>.</p> <important> <p>Stack sets with service-managed permissions do not currently support the use of macros in templates. (This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail.</p> </important> </li> </ul>"
+          "documentation":"<p>In some cases, you must explicitly acknowledge that your stack template contains certain capabilities in order for CloudFormation to update the StackSet and its associated stack instances.</p> <ul> <li> <p> <code>CAPABILITY_IAM</code> and <code>CAPABILITY_NAMED_IAM</code> </p> <p>Some stack templates might include resources that can affect permissions in your Amazon Web Services account, for example, by creating new IAM users. For those stacks sets, you must explicitly acknowledge this by specifying one of these capabilities.</p> <p>The following IAM resources require you to specify either the <code>CAPABILITY_IAM</code> or <code>CAPABILITY_NAMED_IAM</code> capability.</p> <ul> <li> <p>If you have IAM resources, you can specify either capability.</p> </li> <li> <p>If you have IAM resources with custom names, you <i>must</i> specify <code>CAPABILITY_NAMED_IAM</code>.</p> </li> <li> <p>If you don't specify either of these capabilities, CloudFormation returns an <code>InsufficientCapabilities</code> error.</p> </li> </ul> <p>If your stack template contains these resources, we recommend that you review all permissions associated with them and edit their permissions if necessary.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-accesskey.html\">AWS::IAM::AccessKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-group.html\">AWS::IAM::Group</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-policy.html\">AWS::IAM::Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html\">AWS::IAM::Role</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html\">AWS::IAM::User</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-usertogroupaddition.html\">AWS::IAM::UserToGroupAddition</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p> </li> <li> <p> <code>CAPABILITY_AUTO_EXPAND</code> </p> <p>Some templates reference macros. If your StackSet template references one or more macros, you must update the StackSet directly from the processed template, without first reviewing the resulting changes in a change set. To update the StackSet directly, you must acknowledge this capability. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html\">Perform custom processing on CloudFormation templates with template macros</a>.</p> <important> <p>StackSets with service-managed permissions do not currently support the use of macros in templates. (This includes the <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-include.html\">AWS::Include</a> and <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html\">AWS::Serverless</a> transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a StackSet with service-managed permissions, if you reference a macro in your template the StackSet operation will fail.</p> </important> </li> </ul>"
         },
         "Tags":{
           "shape":"Tags",
-          "documentation":"<p>The key-value pairs to associate with this stack set and the stacks created from it. CloudFormation also propagates these tags to supported resources that are created in the stacks. You can specify a maximum number of 50 tags.</p> <p>If you specify tags for this parameter, those tags replace any list of tags that are currently associated with this stack set. This means:</p> <ul> <li> <p>If you don't specify this parameter, CloudFormation doesn't modify the stack's tags.</p> </li> <li> <p>If you specify <i>any</i> tags using this parameter, you must specify <i>all</i> the tags that you want associated with this stack set, even tags you've specified before (for example, when creating the stack set or during a previous update of the stack set.). Any tags that you don't include in the updated list of tags are removed from the stack set, and therefore from the stacks and resources as well.</p> </li> <li> <p>If you specify an empty value, CloudFormation removes all currently associated tags.</p> </li> </ul> <p>If you specify new tags as part of an <code>UpdateStackSet</code> action, CloudFormation checks to see if you have the required IAM permission to tag resources. If you omit tags that are currently associated with the stack set from the list of tags you specify, CloudFormation assumes that you want to remove those tags from the stack set, and checks to see if you have permission to untag resources. If you don't have the necessary permission(s), the entire <code>UpdateStackSet</code> action fails with an <code>access denied</code> error, and the stack set is not updated.</p>"
+          "documentation":"<p>The key-value pairs to associate with this StackSet and the stacks created from it. CloudFormation also propagates these tags to supported resources that are created in the stacks. You can specify a maximum number of 50 tags.</p> <p>If you specify tags for this parameter, those tags replace any list of tags that are currently associated with this StackSet. This means:</p> <ul> <li> <p>If you don't specify this parameter, CloudFormation doesn't modify the stack's tags.</p> </li> <li> <p>If you specify <i>any</i> tags using this parameter, you must specify <i>all</i> the tags that you want associated with this StackSet, even tags you've specified before (for example, when creating the StackSet or during a previous update of the StackSet.). Any tags that you don't include in the updated list of tags are removed from the StackSet, and therefore from the stacks and resources as well.</p> </li> <li> <p>If you specify an empty value, CloudFormation removes all currently associated tags.</p> </li> </ul> <p>If you specify new tags as part of an <code>UpdateStackSet</code> action, CloudFormation checks to see if you have the required IAM permission to tag resources. If you omit tags that are currently associated with the StackSet from the list of tags you specify, CloudFormation assumes that you want to remove those tags from the StackSet, and checks to see if you have permission to untag resources. If you don't have the necessary permission(s), the entire <code>UpdateStackSet</code> action fails with an <code>access denied</code> error, and the StackSet is not updated.</p>"
         },
         "OperationPreferences":{
           "shape":"StackSetOperationPreferences",
-          "documentation":"<p>Preferences for how CloudFormation performs this stack set operation.</p>"
+          "documentation":"<p>Preferences for how CloudFormation performs this StackSet operation.</p>"
         },
         "AdministrationRoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to use to update this stack set.</p> <p>Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html\">Granting Permissions for Stack Set Operations</a> in the <i>CloudFormation User Guide</i>.</p> <p>If you specified a customized administrator role when you created the stack set, you must specify a customized administrator role, even if it is the same customized administrator role used with this stack set previously.</p>"
+          "documentation":"<p>[Self-managed permissions] The Amazon Resource Name (ARN) of the IAM role to use to update this StackSet.</p> <p>Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific StackSets within the same administrator account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a> in the <i>CloudFormation User Guide</i>.</p> <p>If you specified a customized administrator role when you created the StackSet, you must specify a customized administrator role, even if it is the same customized administrator role used with this StackSet previously.</p>"
         },
         "ExecutionRoleName":{
           "shape":"ExecutionRoleName",
-          "documentation":"<p>The name of the IAM execution role to use to update the stack set. If you do not specify an execution role, CloudFormation uses the <code>AWSCloudFormationStackSetExecutionRole</code> role for the stack set operation.</p> <p>Specify an IAM role only if you are using customized execution roles to control which stack resources users and groups can include in their stack sets.</p> <p>If you specify a customized execution role, CloudFormation uses that role to update the stack. If you do not specify a customized execution role, CloudFormation performs the update using the role previously associated with the stack set, so long as you have permissions to perform operations on the stack set.</p>"
+          "documentation":"<p>[Self-managed permissions] The name of the IAM execution role to use to update the stack set. If you do not specify an execution role, CloudFormation uses the <code>AWSCloudFormationStackSetExecutionRole</code> role for the StackSet operation.</p> <p>Specify an IAM role only if you are using customized execution roles to control which stack resources users and groups can include in their StackSets.</p> <p>If you specify a customized execution role, CloudFormation uses that role to update the stack. If you do not specify a customized execution role, CloudFormation performs the update using the role previously associated with the StackSet, so long as you have permissions to perform operations on the StackSet.</p>"
         },
         "DeploymentTargets":{
           "shape":"DeploymentTargets",
-          "documentation":"<p>[Service-managed permissions] The Organizations accounts in which to update associated stack instances.</p> <p>To update all the stack instances associated with this stack set, do not specify <code>DeploymentTargets</code> or <code>Regions</code>.</p> <p>If the stack set update includes changes to the template (that is, if <code>TemplateBody</code> or <code>TemplateURL</code> is specified), or the <code>Parameters</code>, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the stack set update doesn't include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Regions, while leaving all other stack instances with their existing stack instance status.</p>"
+          "documentation":"<p>[Service-managed permissions] The Organizations accounts in which to update associated stack instances.</p> <p>To update all the stack instances associated with this StackSet, do not specify <code>DeploymentTargets</code> or <code>Regions</code>.</p> <p>If the StackSet update includes changes to the template (that is, if <code>TemplateBody</code> or <code>TemplateURL</code> is specified), or the <code>Parameters</code>, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the StackSet update doesn't include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Regions, while leaving all other stack instances with their existing stack instance status.</p>"
         },
         "PermissionModel":{
           "shape":"PermissionModels",
-          "documentation":"<p>Describes how the IAM roles required for stack set operations are created. You cannot modify <code>PermissionModel</code> if there are stack instances associated with your stack set.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant Self-Managed Stack Set Permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-service-managed.html\">Grant Service-Managed Stack Set Permissions</a>.</p> </li> </ul>"
+          "documentation":"<p>Describes how the IAM roles required for StackSet operations are created. You cannot modify <code>PermissionModel</code> if there are stack instances associated with your stack set.</p> <ul> <li> <p>With <code>self-managed</code> permissions, you must create the administrator and execution roles required to deploy to target accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html\">Grant self-managed permissions</a>.</p> </li> <li> <p>With <code>service-managed</code> permissions, StackSets automatically creates the IAM roles required to deploy to accounts managed by Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-activate-trusted-access.html\">Activate trusted access for StackSets with Organizations</a>.</p> </li> </ul>"
         },
         "AutoDeployment":{
           "shape":"AutoDeployment",
-          "documentation":"<p>[Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU).</p> <p>If you specify <code>AutoDeployment</code>, don't specify <code>DeploymentTargets</code> or <code>Regions</code>.</p>"
+          "documentation":"<p>[Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU). For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-manage-auto-deployment.html\">Enable or disable automatic deployments for StackSets in Organizations</a> in the <i>CloudFormation User Guide</i>.</p> <p>If you specify <code>AutoDeployment</code>, don't specify <code>DeploymentTargets</code> or <code>Regions</code>.</p>"
         },
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique ID for this stack set operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the stack set operation only once, even if you retry the request multiple times. You might retry stack set operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, CloudFormation generates one automatically.</p> <p>Repeating this stack set operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
+          "documentation":"<p>The unique ID for this StackSet operation.</p> <p>The operation ID also functions as an idempotency token, to ensure that CloudFormation performs the StackSet operation only once, even if you retry the request multiple times. You might retry StackSet operation requests to ensure that CloudFormation successfully received them.</p> <p>If you don't specify an operation ID, CloudFormation generates one automatically.</p> <p>Repeating this StackSet operation with a new operation ID retries all stack instances whose status is <code>OUTDATED</code>.</p>",
           "idempotencyToken":true
         },
         "Accounts":{
           "shape":"AccountList",
-          "documentation":"<p>[Self-managed permissions] The accounts in which to update associated stack instances. If you specify accounts, you must also specify the Amazon Web Services Regions in which to update stack set instances.</p> <p>To update <i>all</i> the stack instances associated with this stack set, don't specify the <code>Accounts</code> or <code>Regions</code> properties.</p> <p>If the stack set update includes changes to the template (that is, if the <code>TemplateBody</code> or <code>TemplateURL</code> properties are specified), or the <code>Parameters</code> property, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the stack set update does not include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Amazon Web Services Regions, while leaving all other stack instances with their existing stack instance status.</p>"
+          "documentation":"<p>[Self-managed permissions] The accounts in which to update associated stack instances. If you specify accounts, you must also specify the Amazon Web Services Regions in which to update StackSet instances.</p> <p>To update <i>all</i> the stack instances associated with this StackSet, don't specify the <code>Accounts</code> or <code>Regions</code> properties.</p> <p>If the StackSet update includes changes to the template (that is, if the <code>TemplateBody</code> or <code>TemplateURL</code> properties are specified), or the <code>Parameters</code> property, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the StackSet update does not include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Amazon Web Services Regions, while leaving all other stack instances with their existing stack instance status.</p>"
         },
         "Regions":{
           "shape":"RegionList",
-          "documentation":"<p>The Amazon Web Services Regions in which to update associated stack instances. If you specify Regions, you must also specify accounts in which to update stack set instances.</p> <p>To update <i>all</i> the stack instances associated with this stack set, do not specify the <code>Accounts</code> or <code>Regions</code> properties.</p> <p>If the stack set update includes changes to the template (that is, if the <code>TemplateBody</code> or <code>TemplateURL</code> properties are specified), or the <code>Parameters</code> property, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Regions. If the stack set update does not include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Regions, while leaving all other stack instances with their existing stack instance status.</p>"
+          "documentation":"<p>The Amazon Web Services Regions in which to update associated stack instances. If you specify Regions, you must also specify accounts in which to update StackSet instances.</p> <p>To update <i>all</i> the stack instances associated with this StackSet, do not specify the <code>Accounts</code> or <code>Regions</code> properties.</p> <p>If the StackSet update includes changes to the template (that is, if the <code>TemplateBody</code> or <code>TemplateURL</code> properties are specified), or the <code>Parameters</code> property, CloudFormation marks all stack instances with a status of <code>OUTDATED</code> prior to updating the stack instances in the specified accounts and Regions. If the StackSet update does not include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Regions, while leaving all other stack instances with their existing stack instance status.</p>"
         },
         "CallAs":{
           "shape":"CallAs",
-          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for stack sets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
+          "documentation":"<p>[Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account.</p> <p>By default, <code>SELF</code> is specified. Use <code>SELF</code> for StackSets with self-managed permissions.</p> <ul> <li> <p>If you are signed in to the management account, specify <code>SELF</code>.</p> </li> <li> <p>If you are signed in to a delegated administrator account, specify <code>DELEGATED_ADMIN</code>.</p> <p>Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html\">Register a delegated administrator</a> in the <i>CloudFormation User Guide</i>.</p> </li> </ul>"
         },
         "ManagedExecution":{
           "shape":"ManagedExecution",
-          "documentation":"<p>Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.</p>"
+          "documentation":"<p>Describes whether CloudFormation performs non-conflicting operations concurrently and queues conflicting operations.</p>"
         }
       }
     },
@@ -8370,7 +8871,7 @@
       "members":{
         "OperationId":{
           "shape":"ClientRequestToken",
-          "documentation":"<p>The unique ID for this stack set operation.</p>"
+          "documentation":"<p>The unique ID for this StackSet operation.</p>"
         }
       }
     },
@@ -8408,11 +8909,11 @@
       "members":{
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
+          "documentation":"<p>Structure that contains the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
         },
         "TemplateURL":{
           "shape":"TemplateURL",
-          "documentation":"<p>Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that is located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
+          "documentation":"<p>The URL of a file that contains the template body. The URL must point to a template (max size: 1 MB) that is located in an Amazon S3 bucket or a Systems Manager document. The location for an Amazon S3 bucket must start with <code>https://</code>.</p> <p>Conditional: You must pass <code>TemplateURL</code> or <code>TemplateBody</code>. If both are passed, only <code>TemplateBody</code> is used.</p>"
         }
       },
       "documentation":"<p>The input for <a>ValidateTemplate</a> action.</p>"
@@ -8430,7 +8931,7 @@
         },
         "Capabilities":{
           "shape":"Capabilities",
-          "documentation":"<p>The capabilities found within the template. If your template contains IAM resources, you must specify the CAPABILITY_IAM or CAPABILITY_NAMED_IAM value for this parameter when you use the <a>CreateStack</a> or <a>UpdateStack</a> actions with your template; otherwise, those actions return an InsufficientCapabilities error.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
+          "documentation":"<p>The capabilities found within the template. If your template contains IAM resources, you must specify the CAPABILITY_IAM or CAPABILITY_NAMED_IAM value for this parameter when you use the <a>CreateStack</a> or <a>UpdateStack</a> actions with your template; otherwise, those actions return an InsufficientCapabilities error.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html#using-iam-capabilities\">Acknowledging IAM resources in CloudFormation templates</a>.</p>"
         },
         "CapabilitiesReason":{
           "shape":"CapabilitiesReason",
@@ -8504,7 +9005,9 @@
       "enum":[
         "MUTUALLY_EXCLUSIVE_PROPERTIES",
         "UNSUPPORTED_PROPERTIES",
-        "MUTUALLY_EXCLUSIVE_TYPES"
+        "MUTUALLY_EXCLUSIVE_TYPES",
+        "EXCLUDED_PROPERTIES",
+        "EXCLUDED_RESOURCES"
       ]
     },
     "Warnings":{
diff -pruN 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/waiters-2.json 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/cloudformation/2010-05-15/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudformation/2010-05-15/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -324,6 +324,62 @@
         }
       ]
     },
+    "StackRefactorCreateComplete": {
+      "delay": 5,
+      "operation": "DescribeStackRefactor",
+      "maxAttempts": 120,
+      "description": "Wait until the stack refactor status is CREATE_COMPLETE.",
+      "acceptors": [
+        {
+          "argument": "Status",
+          "expected": "CREATE_COMPLETE",
+          "matcher": "path",
+          "state": "success"
+        },
+        {
+          "argument": "Status",
+          "expected": "CREATE_FAILED",
+          "matcher": "path",
+          "state": "failure"
+        },
+        {
+          "expected": "ValidationError",
+          "matcher": "error",
+          "state": "failure"
+        }
+      ]
+    },
+    "StackRefactorExecuteComplete": {
+      "delay": 15,
+      "operation": "DescribeStackRefactor",
+      "maxAttempts": 120,
+      "description": "Wait until the stack refactor status is EXECUTE_COMPLETE.",
+      "acceptors": [
+        {
+          "argument": "ExecutionStatus",
+          "expected": "EXECUTE_COMPLETE",
+          "matcher": "path",
+          "state": "success"
+        },
+        {
+          "argument": "ExecutionStatus",
+          "expected": "EXECUTE_FAILED",
+          "matcher": "path",
+          "state": "failure"
+        },
+        {
+          "argument": "ExecutionStatus",
+          "expected": "ROLLBACK_COMPLETE",
+          "matcher": "path",
+          "state": "failure"
+        },
+        {
+          "expected": "ValidationError",
+          "matcher": "error",
+          "state": "failure"
+        }
+      ]
+    },
     "TypeRegistrationComplete": {
       "delay": 30,
       "operation": "DescribeTypeRegistration",
diff -pruN 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,314 +57,284 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "stringEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://cloudfront.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "cloudfront",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://cloudfront.global.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://cloudfront-fips.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "cloudfront",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://cloudfront-fips.global.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-cn"
                                             ]
                                         },
-                                        "aws-cn"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://cloudfront.cn-northwest-1.amazonaws.com.cn",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "cloudfront",
-                                            "signingRegion": "cn-northwest-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
-                                },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://cloudfront.cn-northwest-1.amazonaws.com.cn",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "cn-northwest-1"
+                                                }
+                                            ]
                                         },
-                                        true
-                                    ]
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-cn"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://cloudfront-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://cloudfront-fips.cn-northwest-1.amazonaws.com.cn",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "cn-northwest-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
+                                                    "ref": "UseDualStack"
                                                 },
                                                 true
                                             ]
@@ -372,96 +342,231 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://cloudfront-fips.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://cloudfront-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://cloudfront-fips.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://cloudfront.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://cloudfront.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://cloudfront.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://cloudfront.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/paginators-1.json 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -39,6 +39,48 @@
       "output_token": "PublicKeyList.NextMarker",
       "limit_key": "MaxItems",
       "result_key": "PublicKeyList.Items"
+    },
+    "ListConnectionGroups": {
+      "input_token": "Marker",
+      "output_token": "NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "ConnectionGroups"
+    },
+    "ListDistributionTenants": {
+      "input_token": "Marker",
+      "output_token": "NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "DistributionTenantList"
+    },
+    "ListDistributionTenantsByCustomization": {
+      "input_token": "Marker",
+      "output_token": "NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "DistributionTenantList"
+    },
+    "ListDistributionsByConnectionMode": {
+      "input_token": "Marker",
+      "output_token": "DistributionList.NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "DistributionList.Items"
+    },
+    "ListDomainConflicts": {
+      "input_token": "Marker",
+      "output_token": "NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "DomainConflicts"
+    },
+    "ListInvalidationsForDistributionTenant": {
+      "input_token": "Marker",
+      "output_token": "InvalidationList.NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "InvalidationList.Items"
+    },
+    "ListOriginAccessControls": {
+      "input_token": "Marker",
+      "output_token": "OriginAccessControlList.NextMarker",
+      "limit_key": "MaxItems",
+      "result_key": "OriginAccessControlList.Items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/service-2.json 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -26,11 +26,55 @@
       "errors":[
         {"shape":"NoSuchDistribution"},
         {"shape":"AccessDenied"},
+        {"shape":"IllegalUpdate"},
         {"shape":"InvalidArgument"},
-        {"shape":"TooManyDistributionCNAMEs"},
-        {"shape":"IllegalUpdate"}
+        {"shape":"TooManyDistributionCNAMEs"}
+      ],
+      "documentation":"<p><note> <p>The <code>AssociateAlias</code> API operation only supports standard distributions. To move domains between distribution tenants and/or standard distributions, we recommend that you use the <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDomainAssociation.html\">UpdateDomainAssociation</a> API operation instead.</p> </note> <p>Associates an alias with a CloudFront standard distribution. An alias is commonly known as a custom domain or vanity domain. It can also be called a CNAME or alternate domain name.</p> <p>With this operation, you can move an alias that's already used for a standard distribution to a different standard distribution. This prevents the downtime that could occur if you first remove the alias from one standard distribution and then separately add the alias to another standard distribution.</p> <p>To use this operation, specify the alias and the ID of the target standard distribution.</p> <p>For more information, including how to set up the target standard distribution, prerequisites that you must complete, and other restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different standard distribution or distribution tenant</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>"
+    },
+    "AssociateDistributionTenantWebACL":{
+      "name":"AssociateDistributionTenantWebACL2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}/associate-web-acl",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"AssociateDistributionTenantWebACLRequest",
+        "locationName":"AssociateDistributionTenantWebACLRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"AssociateDistributionTenantWebACLResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Associates the WAF web ACL with a distribution tenant.</p>"
+    },
+    "AssociateDistributionWebACL":{
+      "name":"AssociateDistributionWebACL2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/distribution/{Id}/associate-web-acl",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"AssociateDistributionWebACLRequest",
+        "locationName":"AssociateDistributionWebACLRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"AssociateDistributionWebACLResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
       ],
-      "documentation":"<p>Associates an alias (also known as a CNAME or an alternate domain name) with a CloudFront distribution.</p> <p>With this operation you can move an alias that's already in use on a CloudFront distribution to a different distribution in one step. This prevents the downtime that could occur if you first remove the alias from one distribution and then separately add the alias to another distribution.</p> <p>To use this operation to associate an alias with a distribution, you provide the alias and the ID of the target distribution for the alias. For more information, including how to set up the target distribution, prerequisites that you must complete, and other restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+      "documentation":"<p>Associates the WAF web ACL with a distribution.</p>"
     },
     "CopyDistribution":{
       "name":"CopyDistribution2020_05_31",
@@ -131,8 +175,8 @@
         {"shape":"UnsupportedOperation"},
         {"shape":"EntityAlreadyExists"},
         {"shape":"InvalidTagging"},
-        {"shape":"InvalidArgument"},
-        {"shape":"EntityLimitExceeded"}
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"}
       ],
       "documentation":"<p>Creates an Anycast static IP list.</p>"
     },
@@ -155,7 +199,7 @@
         {"shape":"InvalidArgument"},
         {"shape":"TooManyQueryStringsInCachePolicy"}
       ],
-      "documentation":"<p>Creates a cache policy.</p> <p>After you create a cache policy, you can attach it to one or more cache behaviors. When it's attached to a cache behavior, the cache policy determines the following:</p> <ul> <li> <p>The values that CloudFront includes in the <i>cache key</i>. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.</p> </li> <li> <p>The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.</p> </li> </ul> <p>The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find an object in its cache that matches the request's cache key. If you want to send values to the origin but <i>not</i> include them in the cache key, use <code>OriginRequestPolicy</code>.</p> <p>For more information about cache policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html\">Controlling the cache key</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+      "documentation":"<p>Creates a cache policy.</p> <p>After you create a cache policy, you can attach it to one or more cache behaviors. When it's attached to a cache behavior, the cache policy determines the following:</p> <ul> <li> <p>The values that CloudFront includes in the <i>cache key</i>. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.</p> </li> <li> <p>The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.</p> <important> <p>If your minimum TTL is greater than 0, CloudFront will cache content for at least the duration specified in the cache policy's minimum TTL, even if the <code>Cache-Control: no-cache</code>, <code>no-store</code>, or <code>private</code> directives are present in the origin headers.</p> </important> </li> </ul> <p>The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find an object in its cache that matches the request's cache key. If you want to send values to the origin but <i>not</i> include them in the cache key, use <code>OriginRequestPolicy</code>.</p> <p>For more information about cache policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html\">Controlling the cache key</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
     "CreateCloudFrontOriginAccessIdentity":{
       "name":"CreateCloudFrontOriginAccessIdentity2020_05_31",
@@ -170,11 +214,34 @@
         {"shape":"MissingBody"},
         {"shape":"TooManyCloudFrontOriginAccessIdentities"},
         {"shape":"InconsistentQuantities"},
-        {"shape":"InvalidArgument"},
-        {"shape":"CloudFrontOriginAccessIdentityAlreadyExists"}
+        {"shape":"CloudFrontOriginAccessIdentityAlreadyExists"},
+        {"shape":"InvalidArgument"}
       ],
       "documentation":"<p>Creates a new origin access identity. If you're using Amazon S3 for your origin, you can use an origin access identity to require users to access your content using a CloudFront URL instead of the Amazon S3 URL. For more information about how to use origin access identities, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
+    "CreateConnectionGroup":{
+      "name":"CreateConnectionGroup2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/connection-group",
+        "responseCode":201
+      },
+      "input":{
+        "shape":"CreateConnectionGroupRequest",
+        "locationName":"CreateConnectionGroupRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"CreateConnectionGroupResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"EntityAlreadyExists"},
+        {"shape":"InvalidTagging"},
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Creates a connection group.</p>"
+    },
     "CreateContinuousDeploymentPolicy":{
       "name":"CreateContinuousDeploymentPolicy2020_05_31",
       "http":{
@@ -267,12 +334,38 @@
         {"shape":"InvalidFunctionAssociation"},
         {"shape":"TooManyDistributionsWithLambdaAssociations"},
         {"shape":"TooManyDistributionsAssociatedToKeyGroup"},
+        {"shape":"EntityLimitExceeded"},
         {"shape":"DistributionAlreadyExists"},
         {"shape":"NoSuchOrigin"},
         {"shape":"TooManyCacheBehaviors"}
       ],
       "documentation":"<p>Creates a CloudFront distribution.</p>"
     },
+    "CreateDistributionTenant":{
+      "name":"CreateDistributionTenant2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/distribution-tenant",
+        "responseCode":201
+      },
+      "input":{
+        "shape":"CreateDistributionTenantRequest",
+        "locationName":"CreateDistributionTenantRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"CreateDistributionTenantResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"EntityAlreadyExists"},
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"InvalidTagging"},
+        {"shape":"InvalidAssociation"},
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Creates a distribution tenant.</p>"
+    },
     "CreateDistributionWithTags":{
       "name":"CreateDistributionWithTags2020_05_31",
       "http":{
@@ -364,8 +457,8 @@
       "output":{"shape":"CreateFieldLevelEncryptionConfigResult"},
       "errors":[
         {"shape":"QueryArgProfileEmpty"},
-        {"shape":"TooManyFieldLevelEncryptionQueryArgProfiles"},
         {"shape":"TooManyFieldLevelEncryptionContentTypeProfiles"},
+        {"shape":"TooManyFieldLevelEncryptionQueryArgProfiles"},
         {"shape":"FieldLevelEncryptionConfigAlreadyExists"},
         {"shape":"InconsistentQuantities"},
         {"shape":"TooManyFieldLevelEncryptionConfigs"},
@@ -432,11 +525,31 @@
         {"shape":"TooManyInvalidationsInProgress"},
         {"shape":"MissingBody"},
         {"shape":"InconsistentQuantities"},
-        {"shape":"InvalidArgument"},
-        {"shape":"BatchTooLarge"}
+        {"shape":"BatchTooLarge"},
+        {"shape":"InvalidArgument"}
       ],
       "documentation":"<p>Create a new invalidation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html\">Invalidating files</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
+    "CreateInvalidationForDistributionTenant":{
+      "name":"CreateInvalidationForDistributionTenant2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}/invalidation",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateInvalidationForDistributionTenantRequest"},
+      "output":{"shape":"CreateInvalidationForDistributionTenantResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"TooManyInvalidationsInProgress"},
+        {"shape":"MissingBody"},
+        {"shape":"InconsistentQuantities"},
+        {"shape":"BatchTooLarge"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Creates an invalidation for a distribution tenant. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html\">Invalidating files</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
     "CreateKeyGroup":{
       "name":"CreateKeyGroup2020_05_31",
       "http":{
@@ -471,8 +584,8 @@
         {"shape":"AccessDenied"},
         {"shape":"UnsupportedOperation"},
         {"shape":"EntityAlreadyExists"},
-        {"shape":"InvalidArgument"},
         {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"},
         {"shape":"EntitySizeLimitExceeded"}
       ],
       "documentation":"<p>Specifies the key value store resource to add to your account. In your account, the key value store names must be unique. You can also import key value store data in JSON format from an S3 bucket by providing a valid <code>ImportSource</code> that you own.</p>"
@@ -492,7 +605,7 @@
         {"shape":"MonitoringSubscriptionAlreadyExists"},
         {"shape":"UnsupportedOperation"}
       ],
-      "documentation":"<p>Enables additional CloudWatch metrics for the specified CloudFront distribution. The additional metrics incur an additional cost.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/viewing-cloudfront-metrics.html#monitoring-console.distributions-additional\">Viewing additional CloudFront distribution metrics</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+      "documentation":"<p>Enables or disables additional Amazon CloudWatch metrics for the specified CloudFront distribution. The additional metrics incur an additional cost.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/viewing-cloudfront-metrics.html#monitoring-console.distributions-additional\">Viewing additional CloudFront distribution metrics</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
     "CreateOriginAccessControl":{
       "name":"CreateOriginAccessControl2020_05_31",
@@ -658,11 +771,11 @@
       "errors":[
         {"shape":"AccessDenied"},
         {"shape":"UnsupportedOperation"},
-        {"shape":"InconsistentQuantities"},
         {"shape":"EntityAlreadyExists"},
+        {"shape":"InconsistentQuantities"},
         {"shape":"InvalidTagging"},
-        {"shape":"InvalidArgument"},
-        {"shape":"EntityLimitExceeded"}
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"}
       ],
       "documentation":"<p>Create an Amazon CloudFront VPC origin.</p>"
     },
@@ -677,8 +790,8 @@
       "errors":[
         {"shape":"CannotDeleteEntityWhileInUse"},
         {"shape":"PreconditionFailed"},
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"IllegalDelete"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"},
@@ -715,12 +828,30 @@
       "errors":[
         {"shape":"PreconditionFailed"},
         {"shape":"AccessDenied"},
+        {"shape":"CloudFrontOriginAccessIdentityInUse"},
         {"shape":"InvalidIfMatchVersion"},
-        {"shape":"NoSuchCloudFrontOriginAccessIdentity"},
-        {"shape":"CloudFrontOriginAccessIdentityInUse"}
+        {"shape":"NoSuchCloudFrontOriginAccessIdentity"}
       ],
       "documentation":"<p>Delete an origin access identity.</p>"
     },
+    "DeleteConnectionGroup":{
+      "name":"DeleteConnectionGroup2020_05_31",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2020-05-31/connection-group/{Id}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteConnectionGroupRequest"},
+      "errors":[
+        {"shape":"CannotDeleteEntityWhileInUse"},
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"ResourceNotDisabled"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Deletes a connection group.</p>"
+    },
     "DeleteContinuousDeploymentPolicy":{
       "name":"DeleteContinuousDeploymentPolicy2020_05_31",
       "http":{
@@ -748,13 +879,31 @@
       },
       "input":{"shape":"DeleteDistributionRequest"},
       "errors":[
+        {"shape":"ResourceInUse"},
         {"shape":"NoSuchDistribution"},
         {"shape":"PreconditionFailed"},
         {"shape":"AccessDenied"},
         {"shape":"DistributionNotDisabled"},
         {"shape":"InvalidIfMatchVersion"}
       ],
-      "documentation":"<p>Delete a distribution.</p>"
+      "documentation":"<p>Delete a distribution.</p> <important> <p>Before you can delete a distribution, you must disable it, which requires permission to update the distribution. Once deleted, a distribution cannot be recovered.</p> </important>"
+    },
+    "DeleteDistributionTenant":{
+      "name":"DeleteDistributionTenant2020_05_31",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteDistributionTenantRequest"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"ResourceNotDisabled"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Deletes a distribution tenant. If you use this API operation to delete a distribution tenant that is currently enabled, the request will fail.</p> <p>To delete a distribution tenant, you must first disable the distribution tenant by using the <code>UpdateDistributionTenant</code> API operation.</p>"
     },
     "DeleteFieldLevelEncryptionConfig":{
       "name":"DeleteFieldLevelEncryptionConfig2020_05_31",
@@ -816,8 +965,8 @@
       },
       "input":{"shape":"DeleteKeyGroupRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
         {"shape":"PreconditionFailed"},
+        {"shape":"ResourceInUse"},
         {"shape":"NoSuchResource"},
         {"shape":"InvalidIfMatchVersion"}
       ],
@@ -834,8 +983,8 @@
       "errors":[
         {"shape":"CannotDeleteEntityWhileInUse"},
         {"shape":"PreconditionFailed"},
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidIfMatchVersion"}
       ],
@@ -926,11 +1075,33 @@
       "errors":[
         {"shape":"AccessDenied"},
         {"shape":"InvalidArgument"},
-        {"shape":"RealtimeLogConfigInUse"},
-        {"shape":"NoSuchRealtimeLogConfig"}
+        {"shape":"NoSuchRealtimeLogConfig"},
+        {"shape":"RealtimeLogConfigInUse"}
       ],
       "documentation":"<p>Deletes a real-time log configuration.</p> <p>You cannot delete a real-time log configuration if it's attached to a cache behavior. First update your distributions to remove the real-time log configuration from all cache behaviors, then delete the real-time log configuration.</p> <p>To delete a real-time log configuration, you can provide the configuration's name or its Amazon Resource Name (ARN). You must provide at least one. If you provide both, CloudFront uses the name to identify the real-time log configuration to delete.</p>"
     },
+    "DeleteResourcePolicy":{
+      "name":"DeleteResourcePolicy2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/delete-resource-policy",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"DeleteResourcePolicyRequest",
+        "locationName":"DeleteResourcePolicyRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"IllegalDelete"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Deletes the resource policy attached to the CloudFront resource.</p>"
+    },
     "DeleteResponseHeadersPolicy":{
       "name":"DeleteResponseHeadersPolicy2020_05_31",
       "http":{
@@ -940,8 +1111,8 @@
       },
       "input":{"shape":"DeleteResponseHeadersPolicyRequest"},
       "errors":[
-        {"shape":"ResponseHeadersPolicyInUse"},
         {"shape":"PreconditionFailed"},
+        {"shape":"ResponseHeadersPolicyInUse"},
         {"shape":"AccessDenied"},
         {"shape":"IllegalDelete"},
         {"shape":"NoSuchResponseHeadersPolicy"},
@@ -960,8 +1131,8 @@
       "errors":[
         {"shape":"PreconditionFailed"},
         {"shape":"AccessDenied"},
-        {"shape":"StreamingDistributionNotDisabled"},
         {"shape":"NoSuchStreamingDistribution"},
+        {"shape":"StreamingDistributionNotDisabled"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Delete a streaming distribution. To delete an RTMP distribution using the CloudFront API, perform the following steps.</p> <p> <b>To delete an RTMP distribution using the CloudFront API</b>:</p> <ol> <li> <p>Disable the RTMP distribution.</p> </li> <li> <p>Submit a <code>GET Streaming Distribution Config</code> request to get the current configuration and the <code>Etag</code> header for the distribution. </p> </li> <li> <p>Update the XML document that was returned in the response to your <code>GET Streaming Distribution Config</code> request to change the value of <code>Enabled</code> to <code>false</code>.</p> </li> <li> <p>Submit a <code>PUT Streaming Distribution Config</code> request to update the configuration for your distribution. In the request body, include the XML document that you updated in Step 3. Then set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Streaming Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to the <code>PUT Streaming Distribution Config</code> request to confirm that the distribution was successfully disabled.</p> </li> <li> <p>Submit a <code>GET Streaming Distribution Config</code> request to confirm that your changes have propagated. When propagation is complete, the value of <code>Status</code> is <code>Deployed</code>.</p> </li> <li> <p>Submit a <code>DELETE Streaming Distribution</code> request. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Streaming Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to your <code>DELETE Streaming Distribution</code> request to confirm that the distribution was successfully deleted.</p> </li> </ol> <p>For information about deleting a distribution using the CloudFront console, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToDeleteDistribution.html\">Deleting a Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
@@ -978,8 +1149,8 @@
       "errors":[
         {"shape":"CannotDeleteEntityWhileInUse"},
         {"shape":"PreconditionFailed"},
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"IllegalDelete"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"},
@@ -1012,13 +1183,49 @@
       "input":{"shape":"DescribeKeyValueStoreRequest"},
       "output":{"shape":"DescribeKeyValueStoreResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
       "documentation":"<p>Specifies the key value store and its configuration.</p>"
     },
+    "DisassociateDistributionTenantWebACL":{
+      "name":"DisassociateDistributionTenantWebACL2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}/disassociate-web-acl",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateDistributionTenantWebACLRequest"},
+      "output":{"shape":"DisassociateDistributionTenantWebACLResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Disassociates a distribution tenant from the WAF web ACL.</p>"
+    },
+    "DisassociateDistributionWebACL":{
+      "name":"DisassociateDistributionWebACL2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/distribution/{Id}/disassociate-web-acl",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateDistributionWebACLRequest"},
+      "output":{"shape":"DisassociateDistributionWebACLResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Disassociates a distribution from the WAF web ACL.</p>"
+    },
     "GetAnycastIpList":{
       "name":"GetAnycastIpList2020_05_31",
       "http":{
@@ -1029,8 +1236,8 @@
       "input":{"shape":"GetAnycastIpListRequest"},
       "output":{"shape":"GetAnycastIpListResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1096,6 +1303,36 @@
       ],
       "documentation":"<p>Get the configuration information about an origin access identity.</p>"
     },
+    "GetConnectionGroup":{
+      "name":"GetConnectionGroup2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/connection-group/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetConnectionGroupRequest"},
+      "output":{"shape":"GetConnectionGroupResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"}
+      ],
+      "documentation":"<p>Gets information about a connection group.</p>"
+    },
+    "GetConnectionGroupByRoutingEndpoint":{
+      "name":"GetConnectionGroupByRoutingEndpoint2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/connection-group",
+        "responseCode":200
+      },
+      "input":{"shape":"GetConnectionGroupByRoutingEndpointRequest"},
+      "output":{"shape":"GetConnectionGroupByRoutingEndpointResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"}
+      ],
+      "documentation":"<p>Gets information about a connection group by using the endpoint that you specify.</p>"
+    },
     "GetContinuousDeploymentPolicy":{
       "name":"GetContinuousDeploymentPolicy2020_05_31",
       "http":{
@@ -1156,6 +1393,36 @@
       ],
       "documentation":"<p>Get the configuration information about a distribution.</p>"
     },
+    "GetDistributionTenant":{
+      "name":"GetDistributionTenant2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distribution-tenant/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDistributionTenantRequest"},
+      "output":{"shape":"GetDistributionTenantResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"}
+      ],
+      "documentation":"<p>Gets information about a distribution tenant.</p>"
+    },
+    "GetDistributionTenantByDomain":{
+      "name":"GetDistributionTenantByDomain2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distribution-tenant",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDistributionTenantByDomainRequest"},
+      "output":{"shape":"GetDistributionTenantByDomainResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"}
+      ],
+      "documentation":"<p>Gets information about a distribution tenant by the associated domain.</p>"
+    },
     "GetFieldLevelEncryption":{
       "name":"GetFieldLevelEncryption2020_05_31",
       "http":{
@@ -1247,6 +1514,22 @@
       ],
       "documentation":"<p>Get the information about an invalidation.</p>"
     },
+    "GetInvalidationForDistributionTenant":{
+      "name":"GetInvalidationForDistributionTenant2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distribution-tenant/{DistributionTenantId}/invalidation/{Id}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInvalidationForDistributionTenantRequest"},
+      "output":{"shape":"GetInvalidationForDistributionTenantResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"NoSuchInvalidation"}
+      ],
+      "documentation":"<p>Gets information about a specific invalidation for a distribution tenant.</p>"
+    },
     "GetKeyGroup":{
       "name":"GetKeyGroup2020_05_31",
       "http":{
@@ -1275,6 +1558,21 @@
       ],
       "documentation":"<p>Gets a key group configuration.</p> <p>To get a key group configuration, you must provide the key group's identifier. If the key group is referenced in a distribution's cache behavior, you can get the key group's identifier using <code>ListDistributions</code> or <code>GetDistribution</code>. If the key group is not referenced in a cache behavior, you can get the identifier using <code>ListKeyGroups</code>.</p>"
     },
+    "GetManagedCertificateDetails":{
+      "name":"GetManagedCertificateDetails2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/managed-certificate/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedCertificateDetailsRequest"},
+      "output":{"shape":"GetManagedCertificateDetailsResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"}
+      ],
+      "documentation":"<p>Gets details about the CloudFront managed ACM certificate.</p>"
+    },
     "GetMonitoringSubscription":{
       "name":"GetMonitoringSubscription2020_05_31",
       "http":{
@@ -1402,6 +1700,27 @@
       ],
       "documentation":"<p>Gets a real-time log configuration.</p> <p>To get a real-time log configuration, you can provide the configuration's name or its Amazon Resource Name (ARN). You must provide at least one. If you provide both, CloudFront uses the name to identify the real-time log configuration to get.</p>"
     },
+    "GetResourcePolicy":{
+      "name":"GetResourcePolicy2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/get-resource-policy",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"GetResourcePolicyRequest",
+        "locationName":"GetResourcePolicyRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"GetResourcePolicyResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Retrieves the resource policy for the specified CloudFront resource that you own and have shared.</p>"
+    },
     "GetResponseHeadersPolicy":{
       "name":"GetResponseHeadersPolicy2020_05_31",
       "http":{
@@ -1472,8 +1791,8 @@
       "input":{"shape":"GetVpcOriginRequest"},
       "output":{"shape":"GetVpcOriginResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1489,8 +1808,8 @@
       "input":{"shape":"ListAnycastIpListsRequest"},
       "output":{"shape":"ListAnycastIpListsResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1539,7 +1858,27 @@
         {"shape":"NoSuchDistribution"},
         {"shape":"InvalidArgument"}
       ],
-      "documentation":"<p>Gets a list of aliases (also called CNAMEs or alternate domain names) that conflict or overlap with the provided alias, and the associated CloudFront distributions and Amazon Web Services accounts for each conflicting alias. In the returned list, the distribution and account IDs are partially hidden, which allows you to identify the distributions and accounts that you own, but helps to protect the information of ones that you don't own.</p> <p>Use this operation to find aliases that are in use in CloudFront that conflict or overlap with the provided alias. For example, if you provide <code>www.example.com</code> as input, the returned list can include <code>www.example.com</code> and the overlapping wildcard alternate domain name (<code>*.example.com</code>), if they exist. If you provide <code>*.example.com</code> as input, the returned list can include <code>*.example.com</code> and any alternate domain names covered by that wildcard (for example, <code>www.example.com</code>, <code>test.example.com</code>, <code>dev.example.com</code>, and so on), if they exist.</p> <p>To list conflicting aliases, you provide the alias to search and the ID of a distribution in your account that has an attached SSL/TLS certificate that includes the provided alias. For more information, including how to set up the distribution and certificate, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p>"
+      "documentation":"<p><note> <p>The <code>ListConflictingAliases</code> API operation only supports standard distributions. To list domain conflicts for both standard distributions and distribution tenants, we recommend that you use the <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDomainConflicts.html\">ListDomainConflicts</a> API operation instead.</p> </note> <p>Gets a list of aliases that conflict or overlap with the provided alias, and the associated CloudFront standard distribution and Amazon Web Services accounts for each conflicting alias. An alias is commonly known as a custom domain or vanity domain. It can also be called a CNAME or alternate domain name.</p> <p>In the returned list, the standard distribution and account IDs are partially hidden, which allows you to identify the standard distribution and accounts that you own, and helps to protect the information of ones that you don't own.</p> <p>Use this operation to find aliases that are in use in CloudFront that conflict or overlap with the provided alias. For example, if you provide <code>www.example.com</code> as input, the returned list can include <code>www.example.com</code> and the overlapping wildcard alternate domain name (<code><em>.example.com</code>), if they exist. If you provide <code></em>.example.com</code> as input, the returned list can include <code>*.example.com</code> and any alternate domain names covered by that wildcard (for example, <code>www.example.com</code>, <code>test.example.com</code>, <code>dev.example.com</code>, and so on), if they exist.</p> <p>To list conflicting aliases, specify the alias to search and the ID of a standard distribution in your account that has an attached TLS certificate that includes the provided alias. For more information, including how to set up the standard distribution and certificate, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different standard distribution or distribution tenant</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p></p>"
+    },
+    "ListConnectionGroups":{
+      "name":"ListConnectionGroups2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/connection-groups",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"ListConnectionGroupsRequest",
+        "locationName":"ListConnectionGroupsRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"ListConnectionGroupsResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists the connection groups in your Amazon Web Services account.</p>"
     },
     "ListContinuousDeploymentPolicies":{
       "name":"ListContinuousDeploymentPolicies2020_05_31",
@@ -1557,6 +1896,46 @@
       ],
       "documentation":"<p>Gets a list of the continuous deployment policies in your Amazon Web Services account.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p>"
     },
+    "ListDistributionTenants":{
+      "name":"ListDistributionTenants2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/distribution-tenants",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"ListDistributionTenantsRequest",
+        "locationName":"ListDistributionTenantsRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"ListDistributionTenantsResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists the distribution tenants in your Amazon Web Services account.</p>"
+    },
+    "ListDistributionTenantsByCustomization":{
+      "name":"ListDistributionTenantsByCustomization2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/distribution-tenants-by-customization",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"ListDistributionTenantsByCustomizationRequest",
+        "locationName":"ListDistributionTenantsByCustomizationRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"ListDistributionTenantsByCustomizationResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists distribution tenants by the customization that you specify.</p> <p>You must specify either the <code>CertificateArn</code> parameter or <code>WebACLArn</code> parameter, but not both in the same request.</p>"
+    },
     "ListDistributions":{
       "name":"ListDistributions2020_05_31",
       "http":{
@@ -1581,8 +1960,8 @@
       "input":{"shape":"ListDistributionsByAnycastIpListIdRequest"},
       "output":{"shape":"ListDistributionsByAnycastIpListIdResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1604,6 +1983,21 @@
       ],
       "documentation":"<p>Gets a list of distribution IDs for distributions that have a cache behavior that's associated with the specified cache policy.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p>"
     },
+    "ListDistributionsByConnectionMode":{
+      "name":"ListDistributionsByConnectionMode2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distributionsByConnectionMode/{ConnectionMode}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDistributionsByConnectionModeRequest"},
+      "output":{"shape":"ListDistributionsByConnectionModeResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists the distributions by the connection mode that you specify.</p>"
+    },
     "ListDistributionsByKeyGroup":{
       "name":"ListDistributionsByKeyGroup2020_05_31",
       "http":{
@@ -1635,6 +2029,23 @@
       ],
       "documentation":"<p>Gets a list of distribution IDs for distributions that have a cache behavior that's associated with the specified origin request policy.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p>"
     },
+    "ListDistributionsByOwnedResource":{
+      "name":"ListDistributionsByOwnedResource2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distributionsByOwnedResource/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDistributionsByOwnedResourceRequest"},
+      "output":{"shape":"ListDistributionsByOwnedResourceResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists the CloudFront distributions that are associated with the specified resource that you own.</p>"
+    },
     "ListDistributionsByRealtimeLogConfig":{
       "name":"ListDistributionsByRealtimeLogConfig2020_05_31",
       "http":{
@@ -1679,8 +2090,8 @@
       "input":{"shape":"ListDistributionsByVpcOriginIdRequest"},
       "output":{"shape":"ListDistributionsByVpcOriginIdResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1701,6 +2112,26 @@
       ],
       "documentation":"<p>List the distributions that are associated with a specified WAF web ACL.</p>"
     },
+    "ListDomainConflicts":{
+      "name":"ListDomainConflicts2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/domain-conflicts",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"ListDomainConflictsRequest",
+        "locationName":"ListDomainConflictsRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"ListDomainConflictsResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p><note> <p>We recommend that you use the <code>ListDomainConflicts</code> API operation to check for domain conflicts, as it supports both standard distributions and distribution tenants. <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListConflictingAliases.html\">ListConflictingAliases</a> performs similar checks but only supports standard distributions.</p> </note> <p>Lists existing domain associations that conflict with the domain that you specify.</p> <p>You can use this API operation to identify potential domain conflicts when moving domains between standard distributions and/or distribution tenants. Domain conflicts must be resolved first before they can be moved. </p> <p>For example, if you provide <code>www.example.com</code> as input, the returned list can include <code>www.example.com</code> and the overlapping wildcard alternate domain name (<code><em>.example.com</code>), if they exist. If you provide <code></em>.example.com</code> as input, the returned list can include <code>*.example.com</code> and any alternate domain names covered by that wildcard (for example, <code>www.example.com</code>, <code>test.example.com</code>, <code>dev.example.com</code>, and so on), if they exist.</p> <p>To list conflicting domains, specify the following:</p> <ul> <li> <p>The domain to search for</p> </li> <li> <p>The ID of a standard distribution or distribution tenant in your account that has an attached TLS certificate, which covers the specified domain</p> </li> </ul> <p>For more information, including how to set up the standard distribution or distribution tenant, and the certificate, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different standard distribution or distribution tenant</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You can optionally specify the maximum number of items to receive in the response. If the total number of items in the list exceeds the maximum that you specify, or the default maximum, the response is paginated. To get the next page of items, send a subsequent request that specifies the <code>NextMarker</code> value from the current response as the <code>Marker</code> value in the subsequent request.</p></p>"
+    },
     "ListFieldLevelEncryptionConfigs":{
       "name":"ListFieldLevelEncryptionConfigs2020_05_31",
       "http":{
@@ -1760,6 +2191,22 @@
       ],
       "documentation":"<p>Lists invalidation batches.</p>"
     },
+    "ListInvalidationsForDistributionTenant":{
+      "name":"ListInvalidationsForDistributionTenant2020_05_31",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}/invalidation",
+        "responseCode":200
+      },
+      "input":{"shape":"ListInvalidationsForDistributionTenantRequest"},
+      "output":{"shape":"ListInvalidationsForDistributionTenantResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Lists the invalidations for a distribution tenant.</p>"
+    },
     "ListKeyGroups":{
       "name":"ListKeyGroups2020_05_31",
       "http":{
@@ -1907,8 +2354,8 @@
       "input":{"shape":"ListVpcOriginsRequest"},
       "output":{"shape":"ListVpcOriginsResult"},
       "errors":[
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"}
       ],
@@ -1932,6 +2379,29 @@
       ],
       "documentation":"<p>Publishes a CloudFront function by copying the function code from the <code>DEVELOPMENT</code> stage to <code>LIVE</code>. This automatically updates all cache behaviors that are using this function to use the newly published copy in the <code>LIVE</code> stage.</p> <p>When a function is published to the <code>LIVE</code> stage, you can attach the function to a distribution's cache behavior, using the function's Amazon Resource Name (ARN).</p> <p>To publish a function, you must provide the function's name and version (<code>ETag</code> value). To get these values, you can use <code>ListFunctions</code> and <code>DescribeFunction</code>.</p>"
     },
+    "PutResourcePolicy":{
+      "name":"PutResourcePolicy2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/put-resource-policy",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"PutResourcePolicyRequest",
+        "locationName":"PutResourcePolicyRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"PutResourcePolicyResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"InvalidArgument"},
+        {"shape":"IllegalUpdate"}
+      ],
+      "documentation":"<p>Creates a resource control policy for a given CloudFront resource.</p>"
+    },
     "TagResource":{
       "name":"TagResource2020_05_31",
       "http":{
@@ -1986,6 +2456,29 @@
       ],
       "documentation":"<p>Remove tags from a CloudFront resource. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/tagging.html\">Tagging a distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
+    "UpdateAnycastIpList":{
+      "name":"UpdateAnycastIpList2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/anycast-ip-list/{Id}",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"UpdateAnycastIpListRequest",
+        "locationName":"UpdateAnycastIpListRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"UpdateAnycastIpListResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Updates an Anycast static IP list.</p>"
+    },
     "UpdateCachePolicy":{
       "name":"UpdateCachePolicy2020_05_31",
       "http":{
@@ -2003,12 +2496,12 @@
         {"shape":"CachePolicyAlreadyExists"},
         {"shape":"TooManyCookiesInCachePolicy"},
         {"shape":"InconsistentQuantities"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"TooManyQueryStringsInCachePolicy"},
         {"shape":"InvalidIfMatchVersion"}
       ],
-      "documentation":"<p>Updates a cache policy configuration.</p> <p>When you update a cache policy configuration, all the fields are updated with the values provided in the request. You cannot update some fields independent of others. To update a cache policy configuration:</p> <ol> <li> <p>Use <code>GetCachePolicyConfig</code> to get the current configuration.</p> </li> <li> <p>Locally modify the fields in the cache policy configuration that you want to update.</p> </li> <li> <p>Call <code>UpdateCachePolicy</code> by providing the entire cache policy configuration, including the fields that you modified and those that you didn't.</p> </li> </ol>"
+      "documentation":"<p>Updates a cache policy configuration.</p> <p>When you update a cache policy configuration, all the fields are updated with the values provided in the request. You cannot update some fields independent of others. To update a cache policy configuration:</p> <ol> <li> <p>Use <code>GetCachePolicyConfig</code> to get the current configuration.</p> </li> <li> <p>Locally modify the fields in the cache policy configuration that you want to update.</p> </li> <li> <p>Call <code>UpdateCachePolicy</code> by providing the entire cache policy configuration, including the fields that you modified and those that you didn't.</p> </li> </ol> <important> <p>If your minimum TTL is greater than 0, CloudFront will cache content for at least the duration specified in the cache policy's minimum TTL, even if the <code>Cache-Control: no-cache</code>, <code>no-store</code>, or <code>private</code> directives are present in the origin headers.</p> </important>"
     },
     "UpdateCloudFrontOriginAccessIdentity":{
       "name":"UpdateCloudFrontOriginAccessIdentity2020_05_31",
@@ -2024,13 +2517,38 @@
         {"shape":"AccessDenied"},
         {"shape":"MissingBody"},
         {"shape":"InconsistentQuantities"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"},
         {"shape":"NoSuchCloudFrontOriginAccessIdentity"}
       ],
       "documentation":"<p>Update an origin access identity.</p>"
     },
+    "UpdateConnectionGroup":{
+      "name":"UpdateConnectionGroup2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/connection-group/{Id}",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"UpdateConnectionGroupRequest",
+        "locationName":"UpdateConnectionGroupRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"UpdateConnectionGroupResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"ResourceInUse"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"EntityAlreadyExists"},
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Updates a connection group.</p>"
+    },
     "UpdateContinuousDeploymentPolicy":{
       "name":"UpdateContinuousDeploymentPolicy2020_05_31",
       "http":{
@@ -2131,6 +2649,32 @@
       ],
       "documentation":"<p>Updates the configuration for a CloudFront distribution.</p> <p>The update process includes getting the current distribution configuration, updating it to make your changes, and then submitting an <code>UpdateDistribution</code> request to make the updates.</p> <p> <b>To update a web distribution using the CloudFront API</b> </p> <ol> <li> <p>Use <code>GetDistributionConfig</code> to get the current configuration, including the version identifier (<code>ETag</code>).</p> </li> <li> <p>Update the distribution configuration that was returned in the response. Note the following important requirements and restrictions:</p> <ul> <li> <p>You must copy the <code>ETag</code> field value from the response. (You'll use it for the <code>IfMatch</code> parameter in your request.) Then, remove the <code>ETag</code> field from the distribution configuration.</p> </li> <li> <p>You can't change the value of <code>CallerReference</code>.</p> </li> </ul> </li> <li> <p>Submit an <code>UpdateDistribution</code> request, providing the updated distribution configuration. The new configuration replaces the existing configuration. The values that you specify in an <code>UpdateDistribution</code> request are not merged into your existing configuration. Make sure to include all fields: the ones that you modified and also the ones that you didn't.</p> </li> </ol>"
     },
+    "UpdateDistributionTenant":{
+      "name":"UpdateDistributionTenant2020_05_31",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2020-05-31/distribution-tenant/{Id}",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"UpdateDistributionTenantRequest",
+        "locationName":"UpdateDistributionTenantRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"UpdateDistributionTenantResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"EntityAlreadyExists"},
+        {"shape":"CNAMEAlreadyExists"},
+        {"shape":"InvalidAssociation"},
+        {"shape":"EntityLimitExceeded"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p>Updates a distribution tenant.</p>"
+    },
     "UpdateDistributionWithStagingConfig":{
       "name":"UpdateDistributionWithStagingConfig2020_05_31",
       "http":{
@@ -2162,9 +2706,9 @@
         {"shape":"InvalidTTLOrder"},
         {"shape":"IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior"},
         {"shape":"InvalidOriginKeepaliveTimeout"},
+        {"shape":"IllegalUpdate"},
         {"shape":"InvalidArgument"},
         {"shape":"InvalidOriginReadTimeout"},
-        {"shape":"IllegalUpdate"},
         {"shape":"InvalidOriginAccessControl"},
         {"shape":"EntityNotFound"},
         {"shape":"InvalidHeadersForS3Origin"},
@@ -2183,21 +2727,21 @@
         {"shape":"InvalidIfMatchVersion"},
         {"shape":"TooManyDistributionsAssociatedToOriginRequestPolicy"},
         {"shape":"TooManyQueryStringParameters"},
-        {"shape":"RealtimeLogConfigOwnerMismatch"},
         {"shape":"PreconditionFailed"},
+        {"shape":"RealtimeLogConfigOwnerMismatch"},
         {"shape":"MissingBody"},
         {"shape":"TooManyHeadersInForwardedValues"},
         {"shape":"InvalidLambdaFunctionAssociation"},
         {"shape":"CNAMEAlreadyExists"},
         {"shape":"TooManyCertificates"},
-        {"shape":"TrustedKeyGroupDoesNotExist"},
         {"shape":"TooManyDistributionsAssociatedToResponseHeadersPolicy"},
+        {"shape":"TrustedKeyGroupDoesNotExist"},
         {"shape":"NoSuchResponseHeadersPolicy"},
-        {"shape":"NoSuchRealtimeLogConfig"},
         {"shape":"InvalidResponseCode"},
+        {"shape":"NoSuchRealtimeLogConfig"},
         {"shape":"InvalidGeoRestrictionParameter"},
-        {"shape":"TooManyOrigins"},
         {"shape":"InvalidViewerCertificate"},
+        {"shape":"TooManyOrigins"},
         {"shape":"InvalidFunctionAssociation"},
         {"shape":"TooManyDistributionsWithLambdaAssociations"},
         {"shape":"TooManyDistributionsAssociatedToKeyGroup"},
@@ -2206,6 +2750,29 @@
       ],
       "documentation":"<p>Copies the staging distribution's configuration to its corresponding primary distribution. The primary distribution retains its <code>Aliases</code> (also known as alternate domain names or CNAMEs) and <code>ContinuousDeploymentPolicyId</code> value, but otherwise its configuration is overwritten to match the staging distribution.</p> <p>You can use this operation in a continuous deployment workflow after you have tested configuration changes on the staging distribution. After using a continuous deployment policy to move a portion of your domain name's traffic to the staging distribution and verifying that it works as intended, you can use this operation to copy the staging distribution's configuration to the primary distribution. This action will disable the continuous deployment policy and move your domain's traffic back to the primary distribution.</p> <p>This API operation requires the following IAM permissions:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html\">GetDistribution</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> </p> </li> </ul>"
     },
+    "UpdateDomainAssociation":{
+      "name":"UpdateDomainAssociation2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/domain-association",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"UpdateDomainAssociationRequest",
+        "locationName":"UpdateDomainAssociationRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"UpdateDomainAssociationResult"},
+      "errors":[
+        {"shape":"PreconditionFailed"},
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
+        {"shape":"InvalidIfMatchVersion"}
+      ],
+      "documentation":"<p><note> <p>We recommend that you use the <code>UpdateDomainAssociation</code> API operation to move a domain association, as it supports both standard distributions and distribution tenants. <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_AssociateAlias.html\">AssociateAlias</a> performs similar checks but only supports standard distributions.</p> </note> <p>Moves a domain from its current standard distribution or distribution tenant to another one.</p> <p>You must first disable the source distribution (standard distribution or distribution tenant) and then separately call this operation to move the domain to another target distribution (standard distribution or distribution tenant).</p> <p>To use this operation, specify the domain and the ID of the target resource (standard distribution or distribution tenant). For more information, including how to set up the target resource, prerequisites that you must complete, and other restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move\">Moving an alternate domain name to a different standard distribution or distribution tenant</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>"
+    },
     "UpdateFieldLevelEncryptionConfig":{
       "name":"UpdateFieldLevelEncryptionConfig2020_05_31",
       "http":{
@@ -2216,16 +2783,16 @@
       "input":{"shape":"UpdateFieldLevelEncryptionConfigRequest"},
       "output":{"shape":"UpdateFieldLevelEncryptionConfigResult"},
       "errors":[
-        {"shape":"QueryArgProfileEmpty"},
         {"shape":"PreconditionFailed"},
+        {"shape":"QueryArgProfileEmpty"},
         {"shape":"AccessDenied"},
-        {"shape":"TooManyFieldLevelEncryptionQueryArgProfiles"},
         {"shape":"NoSuchFieldLevelEncryptionConfig"},
         {"shape":"TooManyFieldLevelEncryptionContentTypeProfiles"},
+        {"shape":"TooManyFieldLevelEncryptionQueryArgProfiles"},
         {"shape":"InconsistentQuantities"},
         {"shape":"NoSuchFieldLevelEncryptionProfile"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Update a field-level encryption configuration.</p>"
@@ -2249,8 +2816,8 @@
         {"shape":"InconsistentQuantities"},
         {"shape":"NoSuchFieldLevelEncryptionProfile"},
         {"shape":"TooManyFieldLevelEncryptionEncryptionEntities"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Update a field-level encryption profile.</p>"
@@ -2312,8 +2879,8 @@
       "output":{"shape":"UpdateKeyValueStoreResult"},
       "errors":[
         {"shape":"PreconditionFailed"},
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
@@ -2332,11 +2899,11 @@
       "output":{"shape":"UpdateOriginAccessControlResult"},
       "errors":[
         {"shape":"PreconditionFailed"},
-        {"shape":"OriginAccessControlAlreadyExists"},
         {"shape":"AccessDenied"},
+        {"shape":"OriginAccessControlAlreadyExists"},
         {"shape":"NoSuchOriginAccessControl"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Updates a CloudFront origin access control.</p>"
@@ -2359,8 +2926,8 @@
         {"shape":"InconsistentQuantities"},
         {"shape":"OriginRequestPolicyAlreadyExists"},
         {"shape":"TooManyQueryStringsInOriginRequestPolicy"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Updates an origin request policy configuration.</p> <p>When you update an origin request policy configuration, all the fields are updated with the values provided in the request. You cannot update some fields independent of others. To update an origin request policy configuration:</p> <ol> <li> <p>Use <code>GetOriginRequestPolicyConfig</code> to get the current configuration.</p> </li> <li> <p>Locally modify the fields in the origin request policy configuration that you want to update.</p> </li> <li> <p>Call <code>UpdateOriginRequestPolicy</code> by providing the entire origin request policy configuration, including the fields that you modified and those that you didn't.</p> </li> </ol>"
@@ -2379,8 +2946,8 @@
         {"shape":"AccessDenied"},
         {"shape":"NoSuchPublicKey"},
         {"shape":"CannotChangeImmutablePublicKeyFields"},
-        {"shape":"InvalidArgument"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Update public key information. Note that the only value you can change is the comment.</p>"
@@ -2420,11 +2987,11 @@
         {"shape":"TooManyCustomHeadersInResponseHeadersPolicy"},
         {"shape":"ResponseHeadersPolicyAlreadyExists"},
         {"shape":"InconsistentQuantities"},
-        {"shape":"TooLongCSPInResponseHeadersPolicy"},
         {"shape":"NoSuchResponseHeadersPolicy"},
+        {"shape":"TooLongCSPInResponseHeadersPolicy"},
+        {"shape":"IllegalUpdate"},
         {"shape":"InvalidArgument"},
         {"shape":"TooManyRemoveHeadersInResponseHeadersPolicy"},
-        {"shape":"IllegalUpdate"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Updates a response headers policy.</p> <p>When you update a response headers policy, the entire policy is replaced. You cannot update some policy fields independent of others. To update a response headers policy configuration:</p> <ol> <li> <p>Use <code>GetResponseHeadersPolicyConfig</code> to get the current policy's configuration.</p> </li> <li> <p>Modify the fields in the response headers policy configuration that you want to update.</p> </li> <li> <p>Call <code>UpdateResponseHeadersPolicy</code>, providing the entire response headers policy configuration, including the fields that you modified and those that you didn't.</p> </li> </ol>"
@@ -2467,18 +3034,38 @@
       "output":{"shape":"UpdateVpcOriginResult"},
       "errors":[
         {"shape":"PreconditionFailed"},
-        {"shape":"EntityNotFound"},
         {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
         {"shape":"UnsupportedOperation"},
-        {"shape":"InconsistentQuantities"},
         {"shape":"EntityAlreadyExists"},
+        {"shape":"InconsistentQuantities"},
         {"shape":"CannotUpdateEntityWhileInUse"},
-        {"shape":"InvalidArgument"},
         {"shape":"EntityLimitExceeded"},
         {"shape":"IllegalUpdate"},
+        {"shape":"InvalidArgument"},
         {"shape":"InvalidIfMatchVersion"}
       ],
       "documentation":"<p>Update an Amazon CloudFront VPC origin in your account.</p>"
+    },
+    "VerifyDnsConfiguration":{
+      "name":"VerifyDnsConfiguration2020_05_31",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2020-05-31/verify-dns-configuration",
+        "responseCode":200
+      },
+      "input":{
+        "shape":"VerifyDnsConfigurationRequest",
+        "locationName":"VerifyDnsConfigurationRequest",
+        "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+      },
+      "output":{"shape":"VerifyDnsConfigurationResult"},
+      "errors":[
+        {"shape":"AccessDenied"},
+        {"shape":"EntityNotFound"},
+        {"shape":"InvalidArgument"}
+      ],
+      "documentation":"<p>Verify the DNS configuration for your domain names. This API operation checks whether your domain name points to the correct routing endpoint of the connection group, such as d111111abcdef8.cloudfront.net. You can use this API operation to troubleshoot and resolve DNS configuration issues.</p>"
     }
   },
   "shapes":{
@@ -2575,7 +3162,7 @@
         },
         "ICPRecordalStatus":{
           "shape":"ICPRecordalStatus",
-          "documentation":"<p>The Internet Content Provider (ICP) recordal status for a CNAME. The ICPRecordalStatus is set to APPROVED for all CNAMEs (aliases) in regions outside of China.</p> <p>The status values returned are the following:</p> <ul> <li> <p> <b>APPROVED</b> indicates that the associated CNAME has a valid ICP recordal number. Multiple CNAMEs can be associated with a distribution, and CNAMEs can correspond to different ICP recordals. To be marked as APPROVED, that is, valid to use with China region, a CNAME must have one ICP recordal number associated with it.</p> </li> <li> <p> <b>SUSPENDED</b> indicates that the associated CNAME does not have a valid ICP recordal number.</p> </li> <li> <p> <b>PENDING</b> indicates that CloudFront can't determine the ICP recordal status of the CNAME associated with the distribution because there was an error in trying to determine the status. You can try again to see if the error is resolved in which case CloudFront returns an APPROVED or SUSPENDED status.</p> </li> </ul>"
+          "documentation":"<p>The Internet Content Provider (ICP) recordal status for a CNAME. The ICPRecordalStatus is set to APPROVED for all CNAMEs (aliases) in Amazon Web Services Regions outside of China.</p> <p>The status values returned are the following:</p> <ul> <li> <p> <b>APPROVED</b> indicates that the associated CNAME has a valid ICP recordal number. Multiple CNAMEs can be associated with a distribution, and CNAMEs can correspond to different ICP recordals. To be marked as APPROVED, that is, valid to use with the China Regions, a CNAME must have one ICP recordal number associated with it.</p> </li> <li> <p> <b>SUSPENDED</b> indicates that the associated CNAME does not have a valid ICP recordal number.</p> </li> <li> <p> <b>PENDING</b> indicates that CloudFront can't determine the ICP recordal status of the CNAME associated with the distribution because there was an error in trying to determine the status. You can try again to see if the error is resolved in which case CloudFront returns an APPROVED or SUSPENDED status.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Amazon Web Services services in China customers must file for an Internet Content Provider (ICP) recordal if they want to serve content publicly on an alternate domain name, also known as a CNAME, that they've added to CloudFront. AliasICPRecordal provides the ICP recordal status for CNAMEs associated with distributions. The status is returned in the CloudFront response; you can't configure it yourself.</p> <p>For more information about ICP recordals, see <a href=\"https://docs.amazonaws.cn/en_us/aws/latest/userguide/accounts-and-credentials.html\"> Signup, Accounts, and Credentials</a> in <i>Getting Started with Amazon Web Services services in China</i>.</p>"
@@ -2656,6 +3243,10 @@
           "shape":"string",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Anycast static IP list.</p>"
         },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type for the Anycast static IP list.</p>"
+        },
         "AnycastIps":{
           "shape":"AnycastIps",
           "documentation":"<p>The static IP addresses that are allocated to the Anycast static IP list.</p>"
@@ -2669,7 +3260,7 @@
           "documentation":"<p>The last time the Anycast static IP list was modified.</p>"
         }
       },
-      "documentation":"<p>An Anycast static IP list.</p>"
+      "documentation":"<p>An Anycast static IP list. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/request-static-ips.html\">Request Anycast static IPs to use for allowlisting</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
     "AnycastIpListCollection":{
       "type":"structure",
@@ -2754,6 +3345,14 @@
         "LastModifiedTime":{
           "shape":"timestamp",
           "documentation":"<p>The last time the Anycast static IP list was modified.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type for the Anycast static IP list.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version (ETag value) of the Anycast static IP list.</p>"
         }
       },
       "documentation":"<p>An abbreviated version of the <a>AnycastIpList</a> structure. Omits the allocated static IP addresses (<a>AnycastIpList$AnycastIps</a>).</p>"
@@ -2774,18 +3373,106 @@
       "members":{
         "TargetDistributionId":{
           "shape":"string",
-          "documentation":"<p>The ID of the distribution that you're associating the alias with.</p>",
+          "documentation":"<p>The ID of the standard distribution that you're associating the alias with.</p>",
           "location":"uri",
           "locationName":"TargetDistributionId"
         },
         "Alias":{
           "shape":"string",
-          "documentation":"<p>The alias (also known as a CNAME) to add to the target distribution.</p>",
+          "documentation":"<p>The alias (also known as a CNAME) to add to the target standard distribution.</p>",
           "location":"querystring",
           "locationName":"Alias"
         }
       }
     },
+    "AssociateDistributionTenantWebACLRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "WebACLArn"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "WebACLArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the WAF web ACL to associate.</p>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The current <code>ETag</code> of the distribution tenant. This value is returned in the response of the <code>GetDistributionTenant</code> API operation.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "AssociateDistributionTenantWebACLResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>"
+        },
+        "WebACLArn":{
+          "shape":"string",
+          "documentation":"<p>The ARN of the WAF web ACL that you associated with the distribution tenant.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      }
+    },
+    "AssociateDistributionWebACLRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "WebACLArn"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "WebACLArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the WAF web ACL to associate.</p>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the distribution that you're associating with the WAF web ACL.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "AssociateDistributionWebACLResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution.</p>"
+        },
+        "WebACLArn":{
+          "shape":"string",
+          "documentation":"<p>The ARN of the WAF web ACL that you associated with the distribution.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      }
+    },
     "AwsAccountNumberList":{
       "type":"list",
       "member":{
@@ -2835,7 +3522,7 @@
         },
         "TrustedSigners":{
           "shape":"TrustedSigners",
-          "documentation":"<important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <p>A list of Amazon Web Services account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.</p> <p>When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in the trusted signer's Amazon Web Services account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving private content</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p><important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A list of Amazon Web Services account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.</p> <p>When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in the trusted signer's Amazon Web Services account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving private content</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>"
         },
         "TrustedKeyGroups":{
           "shape":"TrustedKeyGroups",
@@ -2848,7 +3535,7 @@
         "AllowedMethods":{"shape":"AllowedMethods"},
         "SmoothStreaming":{
           "shape":"boolean",
-          "documentation":"<p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>.</p></p>"
         },
         "Compress":{
           "shape":"boolean",
@@ -2893,21 +3580,21 @@
         },
         "MinTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>MinTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\"> Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i> Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>MinTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\"> Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i> Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p></p>",
           "deprecated":true
         },
         "DefaultTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>DefaultTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>DefaultTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>",
           "deprecated":true
         },
         "MaxTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>MaxTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>MaxTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>",
           "deprecated":true
         }
       },
-      "documentation":"<p>A complex type that describes how CloudFront processes requests.</p> <p>You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.</p> <p>For the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html\">Quotas</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you don't want to specify any cache behaviors, include only an empty <code>CacheBehaviors</code> element. Don't specify an empty individual <code>CacheBehavior</code> element, because this is invalid. For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CacheBehaviors.html\">CacheBehaviors</a>. </p> <p>To delete all cache behaviors in an existing distribution, update the distribution configuration and include only an empty <code>CacheBehaviors</code> element.</p> <p>To add, change, or remove one or more cache behaviors, update the distribution configuration and specify all of the cache behaviors that you want to include in the updated distribution.</p> <p>For more information about cache behaviors, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCacheBehavior\">Cache Behavior Settings</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+      "documentation":"<p>A complex type that describes how CloudFront processes requests.</p> <p>You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to serve objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.</p> <p>For the current quota (formerly known as limit) on the number of cache behaviors that you can add to a distribution, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html\">Quotas</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you don't want to specify any cache behaviors, include only an empty <code>CacheBehaviors</code> element. Don't specify an empty individual <code>CacheBehavior</code> element, because this is invalid. For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CacheBehaviors.html\">CacheBehaviors</a>. </p> <p>To delete all cache behaviors in an existing distribution, update the distribution configuration and include only an empty <code>CacheBehaviors</code> element.</p> <p>To add, change, or remove one or more cache behaviors, update the distribution configuration and specify all of the cache behaviors that you want to include in the updated distribution.</p> <important> <p>If your minimum TTL is greater than 0, CloudFront will cache content for at least the duration specified in the cache policy's minimum TTL, even if the <code>Cache-Control: no-cache</code>, <code>no-store</code>, or <code>private</code> directives are present in the origin headers.</p> </important> <p>For more information about cache behaviors, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCacheBehavior\">Cache Behavior Settings</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
     "CacheBehaviorList":{
       "type":"list",
@@ -2998,7 +3685,7 @@
           "documentation":"<p>The HTTP headers, cookies, and URL query strings to include in the cache key. The values included in the cache key are also included in requests that CloudFront sends to the origin.</p>"
         }
       },
-      "documentation":"<p>A cache policy configuration.</p> <p>This configuration determines the following:</p> <ul> <li> <p>The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.</p> </li> <li> <p>The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.</p> </li> </ul> <p>The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find a valid object in its cache that matches the request's cache key. If you want to send values to the origin but <i>not</i> include them in the cache key, use <code>OriginRequestPolicy</code>.</p>"
+      "documentation":"<p>A cache policy configuration.</p> <p>This configuration determines the following:</p> <ul> <li> <p>The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.</p> </li> <li> <p>The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.</p> <important> <p>If your minimum TTL is greater than 0, CloudFront will cache content for at least the duration specified in the cache policy's minimum TTL, even if the <code>Cache-Control: no-cache</code>, <code>no-store</code>, or <code>private</code> directives are present in the origin headers.</p> </important> </li> </ul> <p>The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find a valid object in its cache that matches the request's cache key. If you want to send values to the origin but <i>not</i> include them in the cache key, use <code>OriginRequestPolicy</code>.</p>"
     },
     "CachePolicyCookieBehavior":{
       "type":"string",
@@ -3188,6 +3875,17 @@
       },
       "exception":true
     },
+    "Certificate":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ACM certificate.</p>"
+        }
+      },
+      "documentation":"<p>The Certificate Manager (ACM) certificate associated with your distribution.</p>"
+    },
     "CertificateSource":{
       "type":"string",
       "enum":[
@@ -3196,6 +3894,13 @@
         "acm"
       ]
     },
+    "CertificateTransparencyLoggingPreference":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
     "CloudFrontOriginAccessIdentity":{
       "type":"structure",
       "required":[
@@ -3339,14 +4044,14 @@
         },
         "DistributionId":{
           "shape":"string",
-          "documentation":"<p>The (partially hidden) ID of the CloudFront distribution associated with the alias.</p>"
+          "documentation":"<p>The (partially hidden) ID of the CloudFront standard distribution associated with the alias.</p>"
         },
         "AccountId":{
           "shape":"string",
-          "documentation":"<p>The (partially hidden) ID of the Amazon Web Services account that owns the distribution that's associated with the alias.</p>"
+          "documentation":"<p>The (partially hidden) ID of the Amazon Web Services account that owns the standard distribution that's associated with the alias.</p>"
         }
       },
-      "documentation":"<p>An alias (also called a CNAME) and the CloudFront distribution and Amazon Web Services account ID that it's associated with. The distribution and account IDs are partially hidden, which allows you to identify the distributions and accounts that you own, but helps to protect the information of ones that you don't own.</p>"
+      "documentation":"<p>An alias (also called a CNAME) and the CloudFront standard distribution and Amazon Web Services account ID that it's associated with. The standard distribution and account IDs are partially hidden, which allows you to identify the standard distributions and accounts that you own, and helps to protect the information of ones that you don't own.</p>"
     },
     "ConflictingAliases":{
       "type":"list",
@@ -3375,7 +4080,141 @@
           "documentation":"<p>Contains the conflicting aliases in the list.</p>"
         }
       },
-      "documentation":"<p>A list of aliases (also called CNAMEs) and the CloudFront distributions and Amazon Web Services accounts that they are associated with. In the list, the distribution and account IDs are partially hidden, which allows you to identify the distributions and accounts that you own, but helps to protect the information of ones that you don't own.</p>"
+      "documentation":"<p>A list of aliases (also called CNAMEs) and the CloudFront standard distributions and Amazon Web Services accounts that they are associated with. In the list, the standard distribution and account IDs are partially hidden, which allows you to identify the standard distributions and accounts that you own, but helps to protect the information of ones that you don't own.</p>"
+    },
+    "ConnectionGroup":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group.</p>"
+        },
+        "Name":{
+          "shape":"string",
+          "documentation":"<p>The name of the connection group.</p>"
+        },
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection group.</p>"
+        },
+        "CreatedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the connection group was created.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the connection group was updated.</p>"
+        },
+        "Tags":{"shape":"Tags"},
+        "Ipv6Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>IPv6 is enabled for the connection group.</p>"
+        },
+        "RoutingEndpoint":{
+          "shape":"string",
+          "documentation":"<p>The routing endpoint (also known as the DNS name) that is assigned to the connection group, such as d111111abcdef8.cloudfront.net.</p>"
+        },
+        "AnycastIpListId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>"
+        },
+        "Status":{
+          "shape":"string",
+          "documentation":"<p>The status of the connection group.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the connection group is enabled.</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the connection group is the default connection group for the distribution tenants.</p>"
+        }
+      },
+      "documentation":"<p>The connection group for your distribution tenants. When you first create a distribution tenant and you don't specify a connection group, CloudFront will automatically create a default connection group for you. When you create a new distribution tenant and don't specify a connection group, the default one will be associated with your distribution tenant.</p>"
+    },
+    "ConnectionGroupAssociationFilter":{
+      "type":"structure",
+      "members":{
+        "AnycastIpListId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about what CloudFront resources your connection groups are associated with.</p>"
+    },
+    "ConnectionGroupSummary":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "Name",
+        "Arn",
+        "RoutingEndpoint",
+        "CreatedTime",
+        "LastModifiedTime",
+        "ETag"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group.</p>"
+        },
+        "Name":{
+          "shape":"string",
+          "documentation":"<p>The name of the connection group.</p>"
+        },
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection group.</p>"
+        },
+        "RoutingEndpoint":{
+          "shape":"string",
+          "documentation":"<p>The routing endpoint (also known as the DNS name) that is assigned to the connection group, such as d111111abcdef8.cloudfront.net.</p>"
+        },
+        "CreatedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the connection group was created.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the connection group was updated.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the connection group.</p>"
+        },
+        "AnycastIpListId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the connection group is enabled</p>"
+        },
+        "Status":{
+          "shape":"string",
+          "documentation":"<p>The status of the connection group.</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the connection group is the default connection group for the distribution tenants.</p>"
+        }
+      },
+      "documentation":"<p>A summary that contains details about your connection groups.</p>"
+    },
+    "ConnectionGroupSummaryList":{
+      "type":"list",
+      "member":{
+        "shape":"ConnectionGroupSummary",
+        "locationName":"ConnectionGroupSummary"
+      }
+    },
+    "ConnectionMode":{
+      "type":"string",
+      "enum":[
+        "direct",
+        "tenant-only"
+      ]
     },
     "ContentTypeProfile":{
       "type":"structure",
@@ -3687,9 +4526,13 @@
         },
         "IpCount":{
           "shape":"integer",
-          "documentation":"<p>The number of static IP addresses that are allocated to the Anycast static IP list.</p>"
+          "documentation":"<p>The number of static IP addresses that are allocated to the Anycast static IP list. Valid values: 21 or 3.</p>"
         },
-        "Tags":{"shape":"Tags"}
+        "Tags":{"shape":"Tags"},
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type for the Anycast static IP list. You can specify one of the following options:</p> <ul> <li> <p> <code>ipv4</code> - Allocate a list of only IPv4 addresses</p> </li> <li> <p> <code>ipv6</code> - Allocate a list of only IPv4 addresses</p> </li> <li> <p> <code>dualstack</code> - Allocate a list of both IPv4 and IPv6 addresses</p> </li> </ul>"
+        }
       }
     },
     "CreateAnycastIpListResult":{
@@ -3780,6 +4623,45 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"CloudFrontOriginAccessIdentity"
     },
+    "CreateConnectionGroupRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"string",
+          "documentation":"<p>The name of the connection group. Enter a friendly identifier that is unique within your Amazon Web Services account. This name can't be updated after you create the connection group.</p>"
+        },
+        "Ipv6Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Enable IPv6 for the connection group. The default is <code>true</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesEnableIPv6\">Enable IPv6</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Tags":{"shape":"Tags"},
+        "AnycastIpListId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Enable the connection group.</p>"
+        }
+      }
+    },
+    "CreateConnectionGroupResult":{
+      "type":"structure",
+      "members":{
+        "ConnectionGroup":{
+          "shape":"ConnectionGroup",
+          "documentation":"<p>The connection group that you created.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the connection group.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"ConnectionGroup"
+    },
     "CreateContinuousDeploymentPolicyRequest":{
       "type":"structure",
       "required":["ContinuousDeploymentPolicyConfig"],
@@ -3852,6 +4734,69 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"Distribution"
     },
+    "CreateDistributionTenantRequest":{
+      "type":"structure",
+      "required":[
+        "DistributionId",
+        "Name",
+        "Domains"
+      ],
+      "members":{
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the multi-tenant distribution to use for creating the distribution tenant.</p>"
+        },
+        "Name":{
+          "shape":"CreateDistributionTenantRequestNameString",
+          "documentation":"<p>The name of the distribution tenant. Enter a friendly identifier that is unique within your Amazon Web Services account. This name can't be updated after you create the distribution tenant.</p>"
+        },
+        "Domains":{
+          "shape":"DomainList",
+          "documentation":"<p>The domains associated with the distribution tenant. You must specify at least one domain in the request.</p>"
+        },
+        "Tags":{"shape":"Tags"},
+        "Customizations":{
+          "shape":"Customizations",
+          "documentation":"<p>Customizations for the distribution tenant. For each distribution tenant, you can specify the geographic restrictions, and the Amazon Resource Names (ARNs) for the ACM certificate and WAF web ACL. These are specific values that you can override or disable from the multi-tenant distribution that was used to create the distribution tenant.</p>"
+        },
+        "Parameters":{
+          "shape":"Parameters",
+          "documentation":"<p>A list of parameter values to add to the resource. A parameter is specified as a key-value pair. A valid parameter value must exist for any parameter that is marked as required in the multi-tenant distribution.</p>"
+        },
+        "ConnectionGroupId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group to associate with the distribution tenant.</p>"
+        },
+        "ManagedCertificateRequest":{
+          "shape":"ManagedCertificateRequest",
+          "documentation":"<p>The configuration for the CloudFront managed ACM certificate request.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Indicates whether the distribution tenant should be enabled when created. If the distribution tenant is disabled, the distribution tenant won't serve traffic.</p>"
+        }
+      }
+    },
+    "CreateDistributionTenantRequestNameString":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-.]{1,126}[a-zA-Z0-9]"
+    },
+    "CreateDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "DistributionTenant":{
+          "shape":"DistributionTenant",
+          "documentation":"<p>The distribution tenant that you created.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"DistributionTenant"
+    },
     "CreateDistributionWithTagsRequest":{
       "type":"structure",
       "required":["DistributionConfigWithTags"],
@@ -4003,6 +4948,40 @@
       },
       "payload":"FunctionSummary"
     },
+    "CreateInvalidationForDistributionTenantRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "InvalidationBatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "InvalidationBatch":{
+          "shape":"InvalidationBatch",
+          "locationName":"InvalidationBatch",
+          "xmlNamespace":{"uri":"http://cloudfront.amazonaws.com/doc/2020-05-31/"}
+        }
+      },
+      "payload":"InvalidationBatch"
+    },
+    "CreateInvalidationForDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "Location":{
+          "shape":"string",
+          "documentation":"<p>The location for the invalidation.</p>",
+          "location":"header",
+          "locationName":"Location"
+        },
+        "Invalidation":{"shape":"Invalidation"}
+      },
+      "payload":"Invalidation"
+    },
     "CreateInvalidationRequest":{
       "type":"structure",
       "required":[
@@ -4515,19 +5494,48 @@
         },
         "OriginSslProtocols":{
           "shape":"OriginSslProtocols",
-          "documentation":"<p>Specifies the minimum SSL/TLS protocol that CloudFront uses when connecting to your origin over HTTPS. Valid values include <code>SSLv3</code>, <code>TLSv1</code>, <code>TLSv1.1</code>, and <code>TLSv1.2</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginSSLProtocols\">Minimum Origin SSL Protocol</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the minimum SSL/TLS protocol that CloudFront uses when connecting to your origin over HTTPS. Valid values include <code>SSLv3</code>, <code>TLSv1</code>, <code>TLSv1.1</code>, and <code>TLSv1.2</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginSSLProtocols\">Minimum Origin SSL Protocol</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         },
         "OriginReadTimeout":{
           "shape":"integer",
-          "documentation":"<p>Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the <i>origin response timeout</i>. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 30 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout\">Response timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the <i>origin response timeout</i>. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 30 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout\">Response timeout</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         },
         "OriginKeepaliveTimeout":{
           "shape":"integer",
-          "documentation":"<p>Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 5 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginKeepaliveTimeout\">Keep-alive timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 5 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginKeepaliveTimeout\">Keep-alive timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>Specifies which IP protocol CloudFront uses when connecting to your origin. If your origin uses both IPv4 and IPv6 protocols, you can choose <code>dualstack</code> to help optimize reliability.</p>"
         }
       },
       "documentation":"<p>A custom origin. A custom origin is any origin that is <i>not</i> an Amazon S3 bucket, with one exception. An Amazon S3 bucket that is <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">configured with static website hosting</a> <i>is</i> a custom origin.</p>"
     },
+    "CustomizationActionType":{
+      "type":"string",
+      "enum":[
+        "override",
+        "disable"
+      ]
+    },
+    "Customizations":{
+      "type":"structure",
+      "members":{
+        "WebAcl":{
+          "shape":"WebAclCustomization",
+          "documentation":"<p>The WAF web ACL.</p>"
+        },
+        "Certificate":{
+          "shape":"Certificate",
+          "documentation":"<p>The Certificate Manager (ACM) certificate.</p>"
+        },
+        "GeoRestrictions":{
+          "shape":"GeoRestrictionCustomization",
+          "documentation":"<p>The geographic restrictions.</p>"
+        }
+      },
+      "documentation":"<p>Customizations for the distribution tenant. For each distribution tenant, you can specify the geographic restrictions, and the Amazon Resource Names (ARNs) for the ACM certificate and WAF web ACL. These are specific values that you can override or disable from the multi-tenant distribution that was used to create the distribution tenant.</p>"
+    },
     "DefaultCacheBehavior":{
       "type":"structure",
       "required":[
@@ -4541,7 +5549,7 @@
         },
         "TrustedSigners":{
           "shape":"TrustedSigners",
-          "documentation":"<important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <p>A list of Amazon Web Services account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.</p> <p>When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in a trusted signer's Amazon Web Services account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving private content</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p><important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A list of Amazon Web Services account IDs whose public keys CloudFront can use to validate signed URLs or signed cookies.</p> <p>When a cache behavior contains trusted signers, CloudFront requires signed URLs or signed cookies for all requests that match the cache behavior. The URLs or cookies must be signed with the private key of a CloudFront key pair in a trusted signer's Amazon Web Services account. The signed URL or cookie contains information about which public key CloudFront should use to verify the signature. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving private content</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>"
         },
         "TrustedKeyGroups":{
           "shape":"TrustedKeyGroups",
@@ -4554,7 +5562,7 @@
         "AllowedMethods":{"shape":"AllowedMethods"},
         "SmoothStreaming":{
           "shape":"boolean",
-          "documentation":"<p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>.</p></p>"
         },
         "Compress":{
           "shape":"boolean",
@@ -4599,21 +5607,21 @@
         },
         "MinTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>MinTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>MinTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p></p>",
           "deprecated":true
         },
         "DefaultTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>DefaultTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>DefaultTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>",
           "deprecated":true
         },
         "MaxTTL":{
           "shape":"long",
-          "documentation":"<p>This field is deprecated. We recommend that you use the <code>MaxTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use the <code>MaxTTL</code> field in a cache policy instead of this field. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html\">Using the managed cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>",
           "deprecated":true
         }
       },
-      "documentation":"<p>A complex type that describes the default cache behavior if you don't specify a <code>CacheBehavior</code> element or if request URLs don't match any of the values of <code>PathPattern</code> in <code>CacheBehavior</code> elements. You must create exactly one default cache behavior.</p>"
+      "documentation":"<p>A complex type that describes the default cache behavior if you don't specify a <code>CacheBehavior</code> element or if request URLs don't match any of the values of <code>PathPattern</code> in <code>CacheBehavior</code> elements. You must create exactly one default cache behavior.</p> <important> <p>If your minimum TTL is greater than 0, CloudFront will cache content for at least the duration specified in the cache policy's minimum TTL, even if the <code>Cache-Control: no-cache</code>, <code>no-store</code>, or <code>private</code> directives are present in the origin headers.</p> </important>"
     },
     "DeleteAnycastIpListRequest":{
       "type":"structure",
@@ -4673,6 +5681,27 @@
       },
       "documentation":"<p>Deletes a origin access identity.</p>"
     },
+    "DeleteConnectionGroupRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "IfMatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group to delete.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the connection group to delete.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
     "DeleteContinuousDeploymentPolicyRequest":{
       "type":"structure",
       "required":["Id"],
@@ -4710,6 +5739,27 @@
       },
       "documentation":"<p>This action deletes a web distribution. To delete a web distribution using the CloudFront API, perform the following steps.</p> <p> <b>To delete a web distribution using the CloudFront API:</b> </p> <ol> <li> <p>Disable the web distribution</p> </li> <li> <p>Submit a <code>GET Distribution Config</code> request to get the current configuration and the <code>Etag</code> header for the distribution.</p> </li> <li> <p>Update the XML document that was returned in the response to your <code>GET Distribution Config</code> request to change the value of <code>Enabled</code> to <code>false</code>.</p> </li> <li> <p>Submit a <code>PUT Distribution Config</code> request to update the configuration for your distribution. In the request body, include the XML document that you updated in Step 3. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to the <code>PUT Distribution Config</code> request to confirm that the distribution was successfully disabled.</p> </li> <li> <p>Submit a <code>GET Distribution</code> request to confirm that your changes have propagated. When propagation is complete, the value of <code>Status</code> is <code>Deployed</code>.</p> </li> <li> <p>Submit a <code>DELETE Distribution</code> request. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Distribution Config</code> request in Step 6.</p> </li> <li> <p>Review the response to your <code>DELETE Distribution</code> request to confirm that the distribution was successfully deleted.</p> </li> </ol> <p>For information about deleting a distribution using the CloudFront console, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToDeleteDistribution.html\">Deleting a Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
     },
+    "DeleteDistributionTenantRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "IfMatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant to delete.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the distribution tenant. This value is returned in the response of the <code>GetDistributionTenant</code> API operation.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
     "DeleteFieldLevelEncryptionConfigRequest":{
       "type":"structure",
       "required":["Id"],
@@ -4754,7 +5804,7 @@
       ],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function that you are deleting.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -4820,8 +5870,7 @@
     },
     "DeleteMonitoringSubscriptionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOriginAccessControlRequest":{
       "type":"structure",
@@ -4890,6 +5939,16 @@
         }
       }
     },
+    "DeleteResourcePolicyRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the CloudFront resource for which the resource policy should be deleted.</p>"
+        }
+      }
+    },
     "DeleteResponseHeadersPolicyRequest":{
       "type":"structure",
       "required":["Id"],
@@ -4942,7 +6001,7 @@
         },
         "IfMatch":{
           "shape":"string",
-          "documentation":"<p>The VPC origin to delete, if a match occurs.</p>",
+          "documentation":"<p>The version identifier of the VPC origin to delete. This is the <code>ETag</code> value returned in the response to <a>GetVpcOrigin</a>.</p>",
           "location":"header",
           "locationName":"If-Match"
         }
@@ -4969,7 +6028,7 @@
       "required":["Name"],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function that you are getting information about.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -5026,6 +6085,72 @@
       },
       "payload":"KeyValueStore"
     },
+    "DisassociateDistributionTenantWebACLRequest":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant that you're disassociating from the WAF web ACL. This is the <code>ETag</code> value returned in the response to the <code>GetDistributionTenant</code> API operation.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "DisassociateDistributionTenantWebACLResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      }
+    },
+    "DisassociateDistributionWebACLRequest":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the distribution that you're disassociating from the WAF web ACL.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "DisassociateDistributionWebACLResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      }
+    },
     "Distribution":{
       "type":"structure",
       "required":[
@@ -5064,7 +6189,7 @@
         },
         "ActiveTrustedSigners":{
           "shape":"ActiveTrustedSigners",
-          "documentation":"<important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <p>This field contains a list of Amazon Web Services account IDs and the active CloudFront key pairs in each account that CloudFront can use to verify the signatures of signed URLs or signed cookies.</p>"
+          "documentation":"<p><important> <p>We recommend using <code>TrustedKeyGroups</code> instead of <code>TrustedSigners</code>.</p> </important> <p>This field contains a list of Amazon Web Services account IDs and the active CloudFront key pairs in each account that CloudFront can use to verify the signatures of signed URLs or signed cookies.</p></p>"
         },
         "ActiveTrustedKeyGroups":{
           "shape":"ActiveTrustedKeyGroups",
@@ -5109,7 +6234,7 @@
         },
         "Aliases":{
           "shape":"Aliases",
-          "documentation":"<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution.</p></p>"
         },
         "DefaultRootObject":{
           "shape":"string",
@@ -5145,7 +6270,7 @@
         },
         "PriceClass":{
           "shape":"PriceClass",
-          "documentation":"<p>The price class that corresponds with the maximum price that you want to pay for CloudFront service. If you specify <code>PriceClass_All</code>, CloudFront responds to requests for your objects from all CloudFront edge locations.</p> <p>If you specify a price class other than <code>PriceClass_All</code>, CloudFront serves your objects from the CloudFront edge location that has the lowest latency among the edge locations in your price class. Viewers who are in or near regions that are excluded from your specified price class may encounter slower performance.</p> <p>For more information about price classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html\">Choosing the Price Class for a CloudFront Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>. For information about CloudFront pricing, including how price classes (such as Price Class 100) map to CloudFront regions, see <a href=\"http://aws.amazon.com/cloudfront/pricing/\">Amazon CloudFront Pricing</a>.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>The price class that corresponds with the maximum price that you want to pay for CloudFront service. If you specify <code>PriceClass_All</code>, CloudFront responds to requests for your objects from all CloudFront edge locations.</p> <p>If you specify a price class other than <code>PriceClass_All</code>, CloudFront serves your objects from the CloudFront edge location that has the lowest latency among the edge locations in your price class. Viewers who are in or near regions that are excluded from your specified price class may encounter slower performance.</p> <p>For more information about price classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html\">Choosing the Price Class for a CloudFront Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>. For information about CloudFront pricing, including how price classes (such as Price Class 100) map to CloudFront regions, see <a href=\"http://aws.amazon.com/cloudfront/pricing/\">Amazon CloudFront Pricing</a>.</p></p>"
         },
         "Enabled":{
           "shape":"boolean",
@@ -5161,7 +6286,7 @@
         },
         "WebACLId":{
           "shape":"string",
-          "documentation":"<p>A unique identifier that specifies the WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of WAF, use the ACL ARN, for example <code>arn:aws:wafv2:us-east-1:123456789012:global/webacl/ExampleWebACL/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>. To specify a web ACL created using WAF Classic, use the ACL ID, for example <code>a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>.</p> <p>WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, CloudFront responds to requests either with the requested content or with an HTTP 403 status code (Forbidden). You can also configure CloudFront to return a custom error page when a request is blocked. For more information about WAF, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html\">WAF Developer Guide</a>.</p>"
+          "documentation":"<p><note> <p>Multi-tenant distributions only support WAF V2 web ACLs.</p> </note> <p>A unique identifier that specifies the WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of WAF, use the ACL ARN, for example <code>arn:aws:wafv2:us-east-1:123456789012:global/webacl/ExampleWebACL/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>. To specify a web ACL created using WAF Classic, use the ACL ID, for example <code>a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>.</p> <p>WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, CloudFront responds to requests either with the requested content or with an HTTP 403 status code (Forbidden). You can also configure CloudFront to return a custom error page when a request is blocked. For more information about WAF, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html\">WAF Developer Guide</a>.</p></p>"
         },
         "HttpVersion":{
           "shape":"HttpVersion",
@@ -5169,19 +6294,27 @@
         },
         "IsIPV6Enabled":{
           "shape":"boolean",
-          "documentation":"<p>If you want CloudFront to respond to IPv6 DNS requests with an IPv6 address for your distribution, specify <code>true</code>. If you specify <code>false</code>, CloudFront responds to IPv6 DNS requests with the DNS response code <code>NOERROR</code> and with no IP addresses. This allows viewers to submit a second request, for an IPv4 address for your distribution.</p> <p>In general, you should enable IPv6 if you have users on IPv6 networks who want to access your content. However, if you're using signed URLs or signed cookies to restrict access to your content, and if you're using a custom policy that includes the <code>IpAddress</code> parameter to restrict the IP addresses that can access your content, don't enable IPv6. If you want to restrict access to some content by IP address and not restrict access to other content (or restrict access but not by IP address), you can create two distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html\">Creating a Signed URL Using a Custom Policy</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you're using an Route 53 Amazon Web Services Integration alias resource record set to route traffic to your CloudFront distribution, you need to create a second alias resource record set when both of the following are true:</p> <ul> <li> <p>You enable IPv6 for the distribution</p> </li> <li> <p>You're using alternate domain names in the URLs for your objects</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html\">Routing Traffic to an Amazon CloudFront Web Distribution by Using Your Domain Name</a> in the <i>Route 53 Amazon Web Services Integration Developer Guide</i>.</p> <p>If you created a CNAME resource record set, either with Route 53 Amazon Web Services Integration or with another DNS service, you don't need to make any changes. A CNAME record will route traffic to your distribution regardless of the IP address format of the viewer request.</p>"
+          "documentation":"<p><note> <p>To use this field for a multi-tenant distribution, use a connection group instead. For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ConnectionGroup.html\">ConnectionGroup</a>.</p> </note> <p>If you want CloudFront to respond to IPv6 DNS requests with an IPv6 address for your distribution, specify <code>true</code>. If you specify <code>false</code>, CloudFront responds to IPv6 DNS requests with the DNS response code <code>NOERROR</code> and with no IP addresses. This allows viewers to submit a second request, for an IPv4 address for your distribution.</p> <p>In general, you should enable IPv6 if you have users on IPv6 networks who want to access your content. However, if you're using signed URLs or signed cookies to restrict access to your content, and if you're using a custom policy that includes the <code>IpAddress</code> parameter to restrict the IP addresses that can access your content, don't enable IPv6. If you want to restrict access to some content by IP address and not restrict access to other content (or restrict access but not by IP address), you can create two distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html\">Creating a Signed URL Using a Custom Policy</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you're using an Route 53 Amazon Web Services Integration alias resource record set to route traffic to your CloudFront distribution, you need to create a second alias resource record set when both of the following are true:</p> <ul> <li> <p>You enable IPv6 for the distribution</p> </li> <li> <p>You're using alternate domain names in the URLs for your objects</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html\">Routing Traffic to an Amazon CloudFront Web Distribution by Using Your Domain Name</a> in the <i>Route 53 Amazon Web Services Integration Developer Guide</i>.</p> <p>If you created a CNAME resource record set, either with Route 53 Amazon Web Services Integration or with another DNS service, you don't need to make any changes. A CNAME record will route traffic to your distribution regardless of the IP address format of the viewer request.</p></p>"
         },
         "ContinuousDeploymentPolicyId":{
           "shape":"string",
-          "documentation":"<p>The identifier of a continuous deployment policy. For more information, see <code>CreateContinuousDeploymentPolicy</code>.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>The identifier of a continuous deployment policy. For more information, see <code>CreateContinuousDeploymentPolicy</code>.</p></p>"
         },
         "Staging":{
           "shape":"boolean",
-          "documentation":"<p>A Boolean that indicates whether this is a staging distribution. When this value is <code>true</code>, this is a staging distribution. When this value is <code>false</code>, this is not a staging distribution.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A Boolean that indicates whether this is a staging distribution. When this value is <code>true</code>, this is a staging distribution. When this value is <code>false</code>, this is not a staging distribution.</p></p>"
         },
         "AnycastIpListId":{
           "shape":"string",
-          "documentation":"<p>ID of the Anycast static IP list that is associated with the distribution.</p>"
+          "documentation":"<p><note> <p>To use this field for a multi-tenant distribution, use a connection group instead. For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ConnectionGroup.html\">ConnectionGroup</a>.</p> </note> <p>ID of the Anycast static IP list that is associated with the distribution.</p></p>"
+        },
+        "TenantConfig":{
+          "shape":"TenantConfig",
+          "documentation":"<p><note> <p>This field only supports multi-tenant distributions. You can't specify this field for standard distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A distribution tenant configuration.</p></p>"
+        },
+        "ConnectionMode":{
+          "shape":"ConnectionMode",
+          "documentation":"<p>This field specifies whether the connection mode is through a standard distribution (direct) or a multi-tenant distribution with distribution tenants (tenant-only).</p>"
         }
       },
       "documentation":"<p>A distribution configuration.</p>"
@@ -5247,6 +6380,67 @@
         "locationName":"DistributionId"
       }
     },
+    "DistributionIdOwner":{
+      "type":"structure",
+      "required":[
+        "DistributionId",
+        "OwnerAccountId"
+      ],
+      "members":{
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution.</p>"
+        },
+        "OwnerAccountId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the distribution. </p>"
+        }
+      },
+      "documentation":"<p>A structure that pairs a CloudFront distribution ID with its owning Amazon Web Services account ID.</p>"
+    },
+    "DistributionIdOwnerItemList":{
+      "type":"list",
+      "member":{
+        "shape":"DistributionIdOwner",
+        "locationName":"DistributionIdOwner"
+      }
+    },
+    "DistributionIdOwnerList":{
+      "type":"structure",
+      "required":[
+        "Marker",
+        "MaxItems",
+        "IsTruncated",
+        "Quantity"
+      ],
+      "members":{
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>Use this field when paginating results to indicate where to begin in your list of <code>DistributionIdOwner</code> objects. The response includes distributions in the list that occur after the marker. To get the next page of the list, set this field's value to the value of <code>NextMarker</code> from the current page's response.</p>"
+        },
+        "NextMarker":{
+          "shape":"string",
+          "documentation":"<p>A token used for pagination of results returned in the response. You can use the token from the previous request to define where the current request should begin.</p>"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of <code>DistributionIdOwner</code> objects to return.</p>"
+        },
+        "IsTruncated":{
+          "shape":"boolean",
+          "documentation":"<p>A flag that indicates whether more <code>DistributionIdOwner</code> objects remain to be listed. If your results were truncated, you can make a follow-up pagination request using the <code>Marker</code> request parameter to retrieve more results in the list.</p>"
+        },
+        "Quantity":{
+          "shape":"integer",
+          "documentation":"<p>Specifies the actual number of <code>DistributionIdOwner</code> objects included in the list for the current page.</p>"
+        },
+        "Items":{
+          "shape":"DistributionIdOwnerItemList",
+          "documentation":"<p>The number of <code>DistributionIdOwner</code> objects.</p>"
+        }
+      },
+      "documentation":"<p>The list of distribution IDs and the Amazon Web Services accounts that they belong to.</p>"
+    },
     "DistributionList":{
       "type":"structure",
       "required":[
@@ -5295,6 +6489,27 @@
       },
       "exception":true
     },
+    "DistributionResourceId":{
+      "type":"structure",
+      "members":{
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the multi-tenant distribution.</p>"
+        },
+        "DistributionTenantId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>"
+        }
+      },
+      "documentation":"<p>The IDs for the distribution resources.</p>"
+    },
+    "DistributionResourceType":{
+      "type":"string",
+      "enum":[
+        "distribution",
+        "distribution-tenant"
+      ]
+    },
     "DistributionSummary":{
       "type":"structure",
       "required":[
@@ -5327,6 +6542,10 @@
           "shape":"string",
           "documentation":"<p>The ARN (Amazon Resource Name) for the distribution. For example: <code>arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5</code>, where <code>123456789012</code> is your Amazon Web Services account ID.</p>"
         },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution.</p>"
+        },
         "Status":{
           "shape":"string",
           "documentation":"<p>The current status of the distribution. When the status is <code>Deployed</code>, the distribution's information is propagated to all CloudFront edge locations.</p>"
@@ -5364,12 +6583,12 @@
           "documentation":"<p>A complex type that contains zero or more <code>CustomErrorResponses</code> elements.</p>"
         },
         "Comment":{
-          "shape":"string",
+          "shape":"sensitiveStringType",
           "documentation":"<p>The comment originally specified when this distribution was created.</p>"
         },
         "PriceClass":{
           "shape":"PriceClass",
-          "documentation":"<p>A complex type that contains information about price class for this streaming distribution.</p>"
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>A complex type that contains information about price class for this streaming distribution.</p></p>"
         },
         "Enabled":{
           "shape":"boolean",
@@ -5403,6 +6622,10 @@
           "shape":"boolean",
           "documentation":"<p>A Boolean that indicates whether this is a staging distribution. When this value is <code>true</code>, this is a staging distribution. When this value is <code>false</code>, this is not a staging distribution.</p>"
         },
+        "ConnectionMode":{
+          "shape":"ConnectionMode",
+          "documentation":"<p>This field specifies whether the connection mode is through a standard distribution (direct) or a multi-tenant distribution with distribution tenants (tenant-only).</p>"
+        },
         "AnycastIpListId":{
           "shape":"string",
           "documentation":"<p>ID of the Anycast static IP list that is associated with the distribution.</p>"
@@ -5417,6 +6640,259 @@
         "locationName":"DistributionSummary"
       }
     },
+    "DistributionTenant":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>"
+        },
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the multi-tenant distribution.</p>"
+        },
+        "Name":{
+          "shape":"string",
+          "documentation":"<p>The name of the distribution tenant.</p>"
+        },
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the distribution tenant.</p>"
+        },
+        "Domains":{
+          "shape":"DomainResultList",
+          "documentation":"<p>The domains associated with the distribution tenant.</p>"
+        },
+        "Tags":{"shape":"Tags"},
+        "Customizations":{
+          "shape":"Customizations",
+          "documentation":"<p>Customizations for the distribution tenant. For each distribution tenant, you can specify the geographic restrictions, and the Amazon Resource Names (ARNs) for the ACM certificate and WAF web ACL. These are specific values that you can override or disable from the multi-tenant distribution that was used to create the distribution tenant.</p>"
+        },
+        "Parameters":{
+          "shape":"Parameters",
+          "documentation":"<p>A list of parameter values to add to the resource. A parameter is specified as a key-value pair. A valid parameter value must exist for any parameter that is marked as required in the multi-tenant distribution.</p>"
+        },
+        "ConnectionGroupId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group for the distribution tenant. If you don't specify a connection group, CloudFront uses the default connection group.</p>"
+        },
+        "CreatedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the distribution tenant was created.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the distribution tenant was updated.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Indicates whether the distribution tenant is in an enabled state. If disabled, the distribution tenant won't serve traffic.</p>"
+        },
+        "Status":{
+          "shape":"string",
+          "documentation":"<p>The status of the distribution tenant.</p>"
+        }
+      },
+      "documentation":"<p>The distribution tenant.</p>"
+    },
+    "DistributionTenantAssociationFilter":{
+      "type":"structure",
+      "members":{
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The distribution ID to filter by. You can find distribution tenants associated with a specific distribution.</p>"
+        },
+        "ConnectionGroupId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group to filter by. You can find distribution tenants associated with a specific connection group.</p>"
+        }
+      },
+      "documentation":"<p>Filter by the associated distribution ID or connection group ID.</p>"
+    },
+    "DistributionTenantList":{
+      "type":"list",
+      "member":{
+        "shape":"DistributionTenantSummary",
+        "locationName":"DistributionTenantSummary"
+      }
+    },
+    "DistributionTenantSummary":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "DistributionId",
+        "Name",
+        "Arn",
+        "Domains",
+        "CreatedTime",
+        "LastModifiedTime",
+        "ETag"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>"
+        },
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The identifier for the multi-tenant distribution. For example: <code>EDFDVBD632BHDS5</code>.</p>"
+        },
+        "Name":{
+          "shape":"string",
+          "documentation":"<p>The name of the distribution tenant.</p>"
+        },
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the distribution tenant.</p>"
+        },
+        "Domains":{
+          "shape":"DomainResultList",
+          "documentation":"<p>The domains associated with the distribution tenant.</p>"
+        },
+        "ConnectionGroupId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group ID for the distribution tenant. If you don't specify a connection group, CloudFront uses the default connection group.</p>"
+        },
+        "Customizations":{
+          "shape":"Customizations",
+          "documentation":"<p>Customizations for the distribution tenant. For each distribution tenant, you can specify the geographic restrictions, and the Amazon Resource Names (ARNs) for the ACM certificate and WAF web ACL. These are specific values that you can override or disable from the multi-tenant distribution that was used to create the distribution tenant.</p>"
+        },
+        "CreatedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the distribution tenant was created.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the distribution tenant was updated.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Indicates whether the distribution tenants are in an enabled state. If disabled, the distribution tenant won't service traffic.</p>"
+        },
+        "Status":{
+          "shape":"string",
+          "documentation":"<p>The status of the distribution tenant.</p>"
+        }
+      },
+      "documentation":"<p>A summary of the information about a distribution tenant.</p>"
+    },
+    "DnsConfiguration":{
+      "type":"structure",
+      "required":[
+        "Domain",
+        "Status"
+      ],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain name that you're verifying.</p>"
+        },
+        "Status":{
+          "shape":"DnsConfigurationStatus",
+          "documentation":"<p>The status of your domain name.</p> <ul> <li> <p> <code>valid-configuration</code>: The domain name is correctly configured and points to the correct routing endpoint of the connection group.</p> </li> <li> <p> <code>invalid-configuration</code>: There is either a missing DNS record or the DNS record exists but it's using an incorrect routing endpoint. Update the DNS record to point to the correct routing endpoint.</p> </li> <li> <p> <code>unknown-configuration</code>: CloudFront can't validate your DNS configuration. This status can appear if CloudFront can't verify the DNS record, or the DNS lookup request failed or timed out.</p> </li> </ul>"
+        },
+        "Reason":{
+          "shape":"string",
+          "documentation":"<p>Explains the status of the DNS configuration.</p>"
+        }
+      },
+      "documentation":"<p>The DNS configuration for your domain names.</p>"
+    },
+    "DnsConfigurationList":{
+      "type":"list",
+      "member":{
+        "shape":"DnsConfiguration",
+        "locationName":"DnsConfiguration"
+      }
+    },
+    "DnsConfigurationStatus":{
+      "type":"string",
+      "enum":[
+        "valid-configuration",
+        "invalid-configuration",
+        "unknown-configuration"
+      ]
+    },
+    "DomainConflict":{
+      "type":"structure",
+      "required":[
+        "Domain",
+        "ResourceType",
+        "ResourceId",
+        "AccountId"
+      ],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain used to find existing conflicts for domain configurations.</p>"
+        },
+        "ResourceType":{
+          "shape":"DistributionResourceType",
+          "documentation":"<p>The CloudFront resource type that has a domain conflict.</p>"
+        },
+        "ResourceId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the resource that has a domain conflict.</p>"
+        },
+        "AccountId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Amazon Web Services account for the domain conflict.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the domain conflict. Use this information to determine the affected domain, the related resource, and the affected Amazon Web Services account.</p>"
+    },
+    "DomainConflictsList":{
+      "type":"list",
+      "member":{
+        "shape":"DomainConflict",
+        "locationName":"DomainConflicts"
+      }
+    },
+    "DomainItem":{
+      "type":"structure",
+      "required":["Domain"],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain name.</p>"
+        }
+      },
+      "documentation":"<p>The domain for the specified distribution tenant.</p>"
+    },
+    "DomainList":{
+      "type":"list",
+      "member":{"shape":"DomainItem"}
+    },
+    "DomainResult":{
+      "type":"structure",
+      "required":["Domain"],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The specified domain.</p>"
+        },
+        "Status":{
+          "shape":"DomainStatus",
+          "documentation":"<p>Whether the domain is active or inactive.</p>"
+        }
+      },
+      "documentation":"<p>The details about the domain result.</p>"
+    },
+    "DomainResultList":{
+      "type":"list",
+      "member":{"shape":"DomainResult"}
+    },
+    "DomainStatus":{
+      "type":"string",
+      "enum":[
+        "active",
+        "inactive"
+      ]
+    },
     "EncryptionEntities":{
       "type":"structure",
       "required":["Quantity"],
@@ -5472,10 +6948,10 @@
         },
         "KinesisStreamConfig":{
           "shape":"KinesisStreamConfig",
-          "documentation":"<p>Contains information about the Amazon Kinesis data stream where you are sending real-time log data.</p>"
+          "documentation":"<p>Contains information about the Amazon Kinesis data stream where you are sending real-time log data in a real-time log configuration.</p>"
         }
       },
-      "documentation":"<p>Contains information about the Amazon Kinesis data stream where you are sending real-time log data in a real-time log configuration.</p>"
+      "documentation":"<p>Contains information about the Amazon Kinesis data stream where you're sending real-time log data in a real-time log configuration.</p>"
     },
     "EndPointList":{
       "type":"list",
@@ -5879,7 +7355,7 @@
           "documentation":"<p>This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.</p> <p>If you want to include query strings in the cache key, use a cache policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you want to send query strings to the origin but not include them in the cache key, use an origin request policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy\">Creating origin request policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>A complex type that contains information about the query string parameters that you want CloudFront to use for caching for this cache behavior.</p>"
         }
       },
-      "documentation":"<p>This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.</p> <p>If you want to include values in the cache key, use a cache policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy\">Creating origin request policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>A complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers.</p>"
+      "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>This field is deprecated. We recommend that you use a cache policy or an origin request policy instead of this field.</p> <p>If you want to include values in the cache key, use a cache policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html#cache-key-create-cache-policy\">Creating cache policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you want to send values to the origin but not include them in the cache key, use an origin request policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy\">Creating origin request policies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>A complex type that specifies how CloudFront handles query strings, cookies, and HTTP headers.</p></p>"
     },
     "FrameOptionsList":{
       "type":"string",
@@ -6137,6 +7613,21 @@
       },
       "documentation":"<p>A complex type that controls the countries in which your content is distributed. CloudFront determines the location of your users using <code>MaxMind</code> GeoIP databases. </p>"
     },
+    "GeoRestrictionCustomization":{
+      "type":"structure",
+      "required":["RestrictionType"],
+      "members":{
+        "RestrictionType":{
+          "shape":"GeoRestrictionType",
+          "documentation":"<p>The method that you want to use to restrict distribution of your content by country:</p> <ul> <li> <p> <code>none</code>: No geographic restriction is enabled, meaning access to content is not restricted by client geo location.</p> </li> <li> <p> <code>blacklist</code>: The <code>Location</code> elements specify the countries in which you don't want CloudFront to distribute your content.</p> </li> <li> <p> <code>whitelist</code>: The <code>Location</code> elements specify the countries in which you want CloudFront to distribute your content.</p> </li> </ul>"
+        },
+        "Locations":{
+          "shape":"LocationList",
+          "documentation":"<p>The locations for geographic restrictions.</p>"
+        }
+      },
+      "documentation":"<p>The customizations that you specified for the distribution tenant for geographic restrictions.</p>"
+    },
     "GeoRestrictionType":{
       "type":"string",
       "enum":[
@@ -6289,6 +7780,59 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"CloudFrontOriginAccessIdentity"
     },
+    "GetConnectionGroupByRoutingEndpointRequest":{
+      "type":"structure",
+      "required":["RoutingEndpoint"],
+      "members":{
+        "RoutingEndpoint":{
+          "shape":"string",
+          "documentation":"<p>The routing endpoint for the target connection group, such as d111111abcdef8.cloudfront.net.</p>",
+          "location":"querystring",
+          "locationName":"RoutingEndpoint"
+        }
+      }
+    },
+    "GetConnectionGroupByRoutingEndpointResult":{
+      "type":"structure",
+      "members":{
+        "ConnectionGroup":{"shape":"ConnectionGroup"},
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the connection group.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"ConnectionGroup"
+    },
+    "GetConnectionGroupRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"string",
+          "documentation":"<p>The ID, name, or Amazon Resource Name (ARN) of the connection group.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetConnectionGroupResult":{
+      "type":"structure",
+      "members":{
+        "ConnectionGroup":{
+          "shape":"ConnectionGroup",
+          "documentation":"<p>The connection group that you retrieved.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the connection group.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"ConnectionGroup"
+    },
     "GetContinuousDeploymentPolicyConfigRequest":{
       "type":"structure",
       "required":["Id"],
@@ -6402,6 +7946,59 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"Distribution"
     },
+    "GetDistributionTenantByDomainRequest":{
+      "type":"structure",
+      "required":["Domain"],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>A domain name associated with the target distribution tenant.</p>",
+          "location":"querystring",
+          "locationName":"domain"
+        }
+      }
+    },
+    "GetDistributionTenantByDomainResult":{
+      "type":"structure",
+      "members":{
+        "DistributionTenant":{"shape":"DistributionTenant"},
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"DistributionTenant"
+    },
+    "GetDistributionTenantRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"string",
+          "documentation":"<p>The identifier of the distribution tenant. You can specify the ARN, ID, or name of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "DistributionTenant":{
+          "shape":"DistributionTenant",
+          "documentation":"<p>The distribution tenant that you retrieved.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"DistributionTenant"
+    },
     "GetFieldLevelEncryptionConfigRequest":{
       "type":"structure",
       "required":["Id"],
@@ -6519,7 +8116,7 @@
       "required":["Name"],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function whose code you are getting.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -6554,6 +8151,34 @@
       },
       "payload":"FunctionCode"
     },
+    "GetInvalidationForDistributionTenantRequest":{
+      "type":"structure",
+      "required":[
+        "DistributionTenantId",
+        "Id"
+      ],
+      "members":{
+        "DistributionTenantId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"DistributionTenantId"
+        },
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the invalidation to retrieve.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        }
+      }
+    },
+    "GetInvalidationForDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "Invalidation":{"shape":"Invalidation"}
+      },
+      "payload":"Invalidation"
+    },
     "GetInvalidationRequest":{
       "type":"structure",
       "required":[
@@ -6643,6 +8268,28 @@
       },
       "payload":"KeyGroup"
     },
+    "GetManagedCertificateDetailsRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"string",
+          "documentation":"<p>The identifier of the distribution tenant. You can specify the ARN, ID, or name of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedCertificateDetailsResult":{
+      "type":"structure",
+      "members":{
+        "ManagedCertificateDetails":{
+          "shape":"ManagedCertificateDetails",
+          "documentation":"<p>Contains details about the CloudFront managed ACM certificate.</p>"
+        }
+      },
+      "payload":"ManagedCertificateDetails"
+    },
     "GetMonitoringSubscriptionRequest":{
       "type":"structure",
       "required":["DistributionId"],
@@ -6855,6 +8502,29 @@
         }
       }
     },
+    "GetResourcePolicyRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the CloudFront resource that is associated with the resource policy.</p>"
+        }
+      }
+    },
+    "GetResourcePolicyResult":{
+      "type":"structure",
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the CloudFront resource that is associated with the resource policy.</p>"
+        },
+        "PolicyDocument":{
+          "shape":"string",
+          "documentation":"<p>The resource policy in JSON format.</p>"
+        }
+      }
+    },
     "GetResponseHeadersPolicyConfigRequest":{
       "type":"structure",
       "required":["Id"],
@@ -7143,6 +8813,18 @@
       },
       "exception":true
     },
+    "InvalidAssociation":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"string"}
+      },
+      "documentation":"<p>The specified CloudFront resource can't be associated.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "InvalidDefaultRootObject":{
       "type":"structure",
       "members":{
@@ -7555,6 +9237,14 @@
         "locationName":"InvalidationSummary"
       }
     },
+    "IpAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6",
+        "dualstack"
+      ]
+    },
     "ItemSelection":{
       "type":"string",
       "enum":[
@@ -7986,7 +9676,7 @@
       "members":{
         "DistributionId":{
           "shape":"distributionIdString",
-          "documentation":"<p>The ID of a distribution in your account that has an attached SSL/TLS certificate that includes the provided alias.</p>",
+          "documentation":"<p>The ID of a standard distribution in your account that has an attached TLS certificate that includes the provided alias.</p>",
           "location":"querystring",
           "locationName":"DistributionId"
         },
@@ -8020,6 +9710,36 @@
       },
       "payload":"ConflictingAliasesList"
     },
+    "ListConnectionGroupsRequest":{
+      "type":"structure",
+      "members":{
+        "AssociationFilter":{
+          "shape":"ConnectionGroupAssociationFilter",
+          "documentation":"<p>Filter by associated Anycast IP list ID.</p>"
+        },
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>The marker for the next set of connection groups to retrieve.</p>"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of connection groups to return.</p>"
+        }
+      }
+    },
+    "ListConnectionGroupsResult":{
+      "type":"structure",
+      "members":{
+        "NextMarker":{
+          "shape":"string",
+          "documentation":"<p>A token used for pagination of results returned in the response. You can use the token from the previous request to define where the current request should begin.</p>"
+        },
+        "ConnectionGroups":{
+          "shape":"ConnectionGroupSummaryList",
+          "documentation":"<p>The list of connection groups that you retrieved.</p>"
+        }
+      }
+    },
     "ListContinuousDeploymentPoliciesRequest":{
       "type":"structure",
       "members":{
@@ -8047,6 +9767,67 @@
       },
       "payload":"ContinuousDeploymentPolicyList"
     },
+    "ListDistributionTenantsByCustomizationRequest":{
+      "type":"structure",
+      "members":{
+        "WebACLArn":{
+          "shape":"string",
+          "documentation":"<p>Filter by the ARN of the associated WAF web ACL.</p>"
+        },
+        "CertificateArn":{
+          "shape":"string",
+          "documentation":"<p>Filter by the ARN of the associated ACM certificate.</p>"
+        },
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>The marker for the next set of results.</p>"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of distribution tenants to return by the specified customization.</p>"
+        }
+      }
+    },
+    "ListDistributionTenantsByCustomizationResult":{
+      "type":"structure",
+      "members":{
+        "NextMarker":{
+          "shape":"string",
+          "documentation":"<p>A token used for pagination of results returned in the response. You can use the token from the previous request to define where the current request should begin.</p>"
+        },
+        "DistributionTenantList":{
+          "shape":"DistributionTenantList",
+          "documentation":"<p>A list of distribution tenants with the specified customization.</p>"
+        }
+      }
+    },
+    "ListDistributionTenantsRequest":{
+      "type":"structure",
+      "members":{
+        "AssociationFilter":{"shape":"DistributionTenantAssociationFilter"},
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>The marker for the next set of results.</p>"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of distribution tenants to return.</p>"
+        }
+      }
+    },
+    "ListDistributionTenantsResult":{
+      "type":"structure",
+      "members":{
+        "NextMarker":{
+          "shape":"string",
+          "documentation":"<p>A token used for pagination of results returned in the response. You can use the token from the previous request to define where the current request should begin.</p>"
+        },
+        "DistributionTenantList":{
+          "shape":"DistributionTenantList",
+          "documentation":"<p>The list of distribution tenants that you retrieved.</p>"
+        }
+      }
+    },
     "ListDistributionsByAnycastIpListIdRequest":{
       "type":"structure",
       "required":["AnycastIpListId"],
@@ -8112,6 +9893,37 @@
       },
       "payload":"DistributionIdList"
     },
+    "ListDistributionsByConnectionModeRequest":{
+      "type":"structure",
+      "required":["ConnectionMode"],
+      "members":{
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p> The marker for the next set of distributions to retrieve.</p>",
+          "location":"querystring",
+          "locationName":"Marker"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of distributions to return.</p>",
+          "location":"querystring",
+          "locationName":"MaxItems"
+        },
+        "ConnectionMode":{
+          "shape":"ConnectionMode",
+          "documentation":"<p>This field specifies whether the connection mode is through a standard distribution (direct) or a multi-tenant distribution with distribution tenants (tenant-only).</p>",
+          "location":"uri",
+          "locationName":"ConnectionMode"
+        }
+      }
+    },
+    "ListDistributionsByConnectionModeResult":{
+      "type":"structure",
+      "members":{
+        "DistributionList":{"shape":"DistributionList"}
+      },
+      "payload":"DistributionList"
+    },
     "ListDistributionsByKeyGroupRequest":{
       "type":"structure",
       "required":["KeyGroupId"],
@@ -8177,6 +9989,40 @@
       },
       "payload":"DistributionIdList"
     },
+    "ListDistributionsByOwnedResourceRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The ARN of the CloudFront resource that you've shared with other Amazon Web Services accounts.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>Use this field when paginating results to indicate where to begin in your list of distributions. The response includes distributions in the list that occur after the marker. To get the next page of the list, set this field's value to the value of <code>NextMarker</code> from the current page's response.</p>",
+          "location":"querystring",
+          "locationName":"Marker"
+        },
+        "MaxItems":{
+          "shape":"string",
+          "documentation":"<p>The maximum number of distributions to return.</p>",
+          "location":"querystring",
+          "locationName":"MaxItems"
+        }
+      }
+    },
+    "ListDistributionsByOwnedResourceResult":{
+      "type":"structure",
+      "members":{
+        "DistributionList":{
+          "shape":"DistributionIdOwnerList",
+          "documentation":"<p>The list of distributions that are using the shared resource.</p>"
+        }
+      },
+      "payload":"DistributionList"
+    },
     "ListDistributionsByRealtimeLogConfigRequest":{
       "type":"structure",
       "members":{
@@ -8332,6 +10178,44 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"DistributionList"
     },
+    "ListDomainConflictsRequest":{
+      "type":"structure",
+      "required":[
+        "Domain",
+        "DomainControlValidationResource"
+      ],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain to check for conflicts.</p>"
+        },
+        "DomainControlValidationResource":{
+          "shape":"DistributionResourceId",
+          "documentation":"<p>The distribution resource identifier. This can be the standard distribution or distribution tenant that has a valid certificate, which covers the domain that you specify.</p>"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of domain conflicts to return.</p>"
+        },
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>The marker for the next set of domain conflicts.</p>"
+        }
+      }
+    },
+    "ListDomainConflictsResult":{
+      "type":"structure",
+      "members":{
+        "DomainConflicts":{
+          "shape":"DomainConflictsList",
+          "documentation":"<p>Contains details about the domain conflicts.</p>"
+        },
+        "NextMarker":{
+          "shape":"string",
+          "documentation":"<p>A token used for pagination of results returned in the response. You can use the token from the previous request to define where the current request should begin.</p>"
+        }
+      }
+    },
     "ListFieldLevelEncryptionConfigsRequest":{
       "type":"structure",
       "members":{
@@ -8419,6 +10303,37 @@
       },
       "payload":"FunctionList"
     },
+    "ListInvalidationsForDistributionTenantRequest":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "Marker":{
+          "shape":"string",
+          "documentation":"<p>Use this parameter when paginating results to indicate where to begin in your list of invalidation batches. Because the results are returned in decreasing order from most recent to oldest, the most recent results are on the first page, the second page will contain earlier results, and so on. To get the next page of results, set <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response. This value is the same as the ID of the last invalidation batch on that page.</p>",
+          "location":"querystring",
+          "locationName":"Marker"
+        },
+        "MaxItems":{
+          "shape":"integer",
+          "documentation":"<p>The maximum number of invalidations to return for the distribution tenant.</p>",
+          "location":"querystring",
+          "locationName":"MaxItems"
+        }
+      }
+    },
+    "ListInvalidationsForDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "InvalidationList":{"shape":"InvalidationList"}
+      },
+      "payload":"InvalidationList"
+    },
     "ListInvalidationsRequest":{
       "type":"structure",
       "required":["DistributionId"],
@@ -8774,6 +10689,59 @@
       },
       "documentation":"<p>A complex type that specifies whether access logs are written for the distribution.</p> <note> <p>If you already enabled standard logging (legacy) and you want to enable standard logging (v2) to send your access logs to Amazon S3, we recommend that you specify a <i>different</i> Amazon S3 bucket or use a <i>separate path</i> in the same bucket (for example, use a log prefix or partitioning). This helps you keep track of which log files are associated with which logging subscription and prevents log files from overwriting each other. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html\">Standard logging (access logs)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note>"
     },
+    "ManagedCertificateDetails":{
+      "type":"structure",
+      "members":{
+        "CertificateArn":{
+          "shape":"string",
+          "documentation":"<p>The ARN of the CloudFront managed ACM certificate.</p>"
+        },
+        "CertificateStatus":{
+          "shape":"ManagedCertificateStatus",
+          "documentation":"<p>The status of the CloudFront managed ACM certificate.</p> <note> <p>Your distribution tenant will be updated with the latest certificate status. When calling the <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistributionTenant.html\">UpdateDistributionTenant</a> operation, use the latest value for the <code>ETag</code>.</p> </note>"
+        },
+        "ValidationTokenHost":{
+          "shape":"ValidationTokenHost",
+          "documentation":"<p>Contains details about the validation token host of the specified CloudFront managed ACM certificate.</p> <ul> <li> <p>For <code>cloudfront</code>, CloudFront will automatically serve the validation token. Choose this mode if you can point the domain's DNS to CloudFront immediately.</p> </li> <li> <p>For <code>self-hosted</code>, you serve the validation token from your existing infrastructure. Choose this mode when you need to maintain current traffic flow while your certificate is being issued. You can place the validation token at the well-known path on your existing web server, wait for ACM to validate and issue the certificate, and then update your DNS to point to CloudFront.</p> </li> </ul> <note> <p>This setting only affects the initial certificate request. Once the DNS points to CloudFront, all future certificate renewals are automatically handled through CloudFront.</p> </note>"
+        },
+        "ValidationTokenDetails":{
+          "shape":"ValidationTokenDetailList",
+          "documentation":"<p>Contains details about the validation token of the specified CloudFront managed ACM certificate.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the CloudFront managed ACM certificate.</p>"
+    },
+    "ManagedCertificateRequest":{
+      "type":"structure",
+      "required":["ValidationTokenHost"],
+      "members":{
+        "ValidationTokenHost":{
+          "shape":"ValidationTokenHost",
+          "documentation":"<p>Specify how the HTTP validation token will be served when requesting the CloudFront managed ACM certificate.</p> <ul> <li> <p>For <code>cloudfront</code>, CloudFront will automatically serve the validation token. Choose this mode if you can point the domain's DNS to CloudFront immediately.</p> </li> <li> <p>For <code>self-hosted</code>, you serve the validation token from your existing infrastructure. Choose this mode when you need to maintain current traffic flow while your certificate is being issued. You can place the validation token at the well-known path on your existing web server, wait for ACM to validate and issue the certificate, and then update your DNS to point to CloudFront.</p> </li> </ul>"
+        },
+        "PrimaryDomainName":{
+          "shape":"string",
+          "documentation":"<p>The primary domain name associated with the CloudFront managed ACM certificate.</p>"
+        },
+        "CertificateTransparencyLoggingPreference":{
+          "shape":"CertificateTransparencyLoggingPreference",
+          "documentation":"<p>You can opt out of certificate transparency logging by specifying the <code>disabled</code> option. Opt in by specifying <code>enabled</code>. For more information, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-concepts.html#concept-transparency\">Certificate Transparency Logging </a> in the <i>Certificate Manager User Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>An object that represents the request for the Amazon CloudFront managed ACM certificate.</p>"
+    },
+    "ManagedCertificateStatus":{
+      "type":"string",
+      "enum":[
+        "pending-validation",
+        "issued",
+        "inactive",
+        "expired",
+        "validation-timed-out",
+        "revoked",
+        "failed"
+      ]
+    },
     "Method":{
       "type":"string",
       "enum":[
@@ -8802,7 +10770,9 @@
         "TLSv1.1_2016",
         "TLSv1.2_2018",
         "TLSv1.2_2019",
-        "TLSv1.2_2021"
+        "TLSv1.2_2021",
+        "TLSv1.3_2025",
+        "TLSv1.2_2025"
       ]
     },
     "MissingBody":{
@@ -9086,6 +11056,10 @@
           "shape":"integer",
           "documentation":"<p>The number of seconds that CloudFront waits when trying to establish a connection to the origin. The minimum timeout is 1 second, the maximum is 10 seconds, and the default (if you don't specify otherwise) is 10 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#origin-connection-timeout\">Origin Connection Timeout</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         },
+        "ResponseCompletionTimeout":{
+          "shape":"integer",
+          "documentation":"<p>The time (in seconds) that a request from CloudFront to the origin can stay open and wait for a response. If the complete response isn't received from the origin by this time, CloudFront ends the connection.</p> <p>The value for <code>ResponseCompletionTimeout</code> must be equal to or greater than the value for <code>OriginReadTimeout</code>. If you don't set a value for <code>ResponseCompletionTimeout</code>, CloudFront doesn't enforce a maximum value.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#response-completion-timeout\">Response completion timeout</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
         "OriginShield":{
           "shape":"OriginShield",
           "documentation":"<p>CloudFront Origin Shield. Using Origin Shield can help reduce the load on your origin.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/origin-shield.html\">Using Origin Shield</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
@@ -9095,7 +11069,7 @@
           "documentation":"<p>The unique identifier of an origin access control for this origin.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html\">Restricting access to an Amazon S3 origin</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         }
       },
-      "documentation":"<p>An origin.</p> <p>An origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin:</p> <ul> <li> <p>Use <code>S3OriginConfig</code> to specify an Amazon S3 bucket that is not configured with static website hosting.</p> </li> <li> <p>Use <code>CustomOriginConfig</code> to specify all other kinds of origins, including:</p> <ul> <li> <p>An Amazon S3 bucket that is configured with static website hosting</p> </li> <li> <p>An Elastic Load Balancing load balancer</p> </li> <li> <p>An Elemental MediaPackage endpoint</p> </li> <li> <p>An Elemental MediaStore container</p> </li> <li> <p>Any other HTTP server, running on an Amazon EC2 instance or any other kind of host</p> </li> </ul> </li> </ul> <p>For the current maximum number of origins that you can specify per distribution, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions\">General Quotas on Web Distributions</a> in the <i>Amazon CloudFront Developer Guide</i> (quotas were formerly referred to as limits).</p>"
+      "documentation":"<p>An origin.</p> <p>An origin is the location where content is stored, and from which CloudFront gets content to serve to viewers. To specify an origin:</p> <ul> <li> <p>Use <code>S3OriginConfig</code> to specify an Amazon S3 bucket that is not configured with static website hosting.</p> </li> <li> <p>Use <code>VpcOriginConfig</code> to specify a VPC origin.</p> </li> <li> <p>Use <code>CustomOriginConfig</code> to specify all other kinds of origins, including:</p> <ul> <li> <p>An Amazon S3 bucket that is configured with static website hosting</p> </li> <li> <p>An Elastic Load Balancing load balancer</p> </li> <li> <p>An Elemental MediaPackage endpoint</p> </li> <li> <p>An Elemental MediaStore container</p> </li> <li> <p>Any other HTTP server, running on an Amazon EC2 instance or any other kind of host</p> </li> </ul> </li> </ul> <p>For the current maximum number of origins that you can specify per distribution, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html#limits-web-distributions\">General Quotas on Web Distributions</a> in the <i>Amazon CloudFront Developer Guide</i> (quotas were formerly referred to as limits).</p>"
     },
     "OriginAccessControl":{
       "type":"structure",
@@ -9679,6 +11653,71 @@
       },
       "documentation":"<p>Contains information about the origins for this distribution.</p>"
     },
+    "Parameter":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Value"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ParameterName",
+          "documentation":"<p>The parameter name.</p>"
+        },
+        "Value":{
+          "shape":"ParameterValue",
+          "documentation":"<p>The parameter value.</p>"
+        }
+      },
+      "documentation":"<p>A list of parameter values to add to the resource. A parameter is specified as a key-value pair. A valid parameter value must exist for any parameter that is marked as required in the multi-tenant distribution.</p>"
+    },
+    "ParameterDefinition":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Definition"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ParameterName",
+          "documentation":"<p>The name of the parameter.</p>"
+        },
+        "Definition":{
+          "shape":"ParameterDefinitionSchema",
+          "documentation":"<p>The value that you assigned to the parameter.</p>"
+        }
+      },
+      "documentation":"<p>A list of parameter values to add to the resource. A parameter is specified as a key-value pair. A valid parameter value must exist for any parameter that is marked as required in the multi-tenant distribution.</p>"
+    },
+    "ParameterDefinitionSchema":{
+      "type":"structure",
+      "members":{
+        "StringSchema":{
+          "shape":"StringSchemaConfig",
+          "documentation":"<p>An object that contains information about the string schema.</p>"
+        }
+      },
+      "documentation":"<p>An object that contains information about the parameter definition.</p>"
+    },
+    "ParameterDefinitions":{
+      "type":"list",
+      "member":{"shape":"ParameterDefinition"}
+    },
+    "ParameterName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-_]+"
+    },
+    "ParameterValue":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "Parameters":{
+      "type":"list",
+      "member":{"shape":"Parameter"}
+    },
     "ParametersInCacheKeyAndForwardedToOrigin":{
       "type":"structure",
       "required":[
@@ -9750,7 +11789,8 @@
       "enum":[
         "PriceClass_100",
         "PriceClass_200",
-        "PriceClass_All"
+        "PriceClass_All",
+        "None"
       ]
     },
     "PublicKey":{
@@ -9774,7 +11814,7 @@
           "documentation":"<p>Configuration information about a public key that you can use with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">signed URLs and signed cookies</a>, or with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html\">field-level encryption</a>.</p>"
         }
       },
-      "documentation":"<p>A public key that you can use with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">signed URLs and signed cookies</a>, or with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html\">field-level encryption</a>.</p>"
+      "documentation":"<p>A public key that you can use with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">signed URLs and signed cookies</a>, or with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html\">field-level encryption</a>.</p> <p>CloudFront supports signed URLs and signed cookies with RSA 2048 or ECDSA 256 key signatures. Field-level encryption is only compatible with RSA 2048 key signatures.</p>"
     },
     "PublicKeyAlreadyExists":{
       "type":"structure",
@@ -9813,7 +11853,7 @@
           "documentation":"<p>A comment to describe the public key. The comment cannot be longer than 128 characters.</p>"
         }
       },
-      "documentation":"<p>Configuration information about a public key that you can use with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">signed URLs and signed cookies</a>, or with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html\">field-level encryption</a>.</p>"
+      "documentation":"<p>Configuration information about a public key that you can use with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">signed URLs and signed cookies</a>, or with <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html\">field-level encryption</a>.</p> <p>CloudFront supports signed URLs and signed cookies with RSA 2048 or ECDSA 256 key signatures. Field-level encryption is only compatible with RSA 2048 key signatures.</p>"
     },
     "PublicKeyIdList":{
       "type":"list",
@@ -9907,7 +11947,7 @@
       ],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function that you are publishing.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -9930,6 +11970,32 @@
       },
       "payload":"FunctionSummary"
     },
+    "PutResourcePolicyRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "PolicyDocument"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the CloudFront resource for which the policy is being created.</p>"
+        },
+        "PolicyDocument":{
+          "shape":"string",
+          "documentation":"<p>The JSON-formatted resource policy to create.</p>"
+        }
+      }
+    },
+    "PutResourcePolicyResult":{
+      "type":"structure",
+      "members":{
+        "ResourceArn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the CloudFront resource for which the policy was created.</p>"
+        }
+      }
+    },
     "QueryArgProfile":{
       "type":"structure",
       "required":[
@@ -10192,6 +12258,18 @@
       },
       "exception":true
     },
+    "ResourceNotDisabled":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"string"}
+      },
+      "documentation":"<p>The specified CloudFront resource hasn't been disabled yet.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ResponseHeadersPolicy":{
       "type":"structure",
       "required":[
@@ -10730,7 +12808,11 @@
       "members":{
         "OriginAccessIdentity":{
           "shape":"string",
-          "documentation":"<note> <p>If you're using origin access control (OAC) instead of origin access identity, specify an empty <code>OriginAccessIdentity</code> element. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html\">Restricting access to an Amazon Web Services</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>The CloudFront origin access identity to associate with the origin. Use an origin access identity to configure the origin so that viewers can <i>only</i> access objects in an Amazon S3 bucket through CloudFront. The format of the value is:</p> <p> <code>origin-access-identity/cloudfront/ID-of-origin-access-identity</code> </p> <p>The <code> <i>ID-of-origin-access-identity</i> </code> is the value that CloudFront returned in the <code>ID</code> element when you created the origin access identity.</p> <p>If you want viewers to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty <code>OriginAccessIdentity</code> element.</p> <p>To delete the origin access identity from an existing distribution, update the distribution configuration and include an empty <code>OriginAccessIdentity</code> element.</p> <p>To replace the origin access identity, update the distribution configuration and specify the new origin access identity.</p> <p>For more information about the origin access identity, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p><note> <p>If you're using origin access control (OAC) instead of origin access identity, specify an empty <code>OriginAccessIdentity</code> element. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html\">Restricting access to an Amazon Web Services</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>The CloudFront origin access identity to associate with the origin. Use an origin access identity to configure the origin so that viewers can <i>only</i> access objects in an Amazon S3 bucket through CloudFront. The format of the value is:</p> <p> <code>origin-access-identity/cloudfront/ID-of-origin-access-identity</code> </p> <p>The <code> <i>ID-of-origin-access-identity</i> </code> is the value that CloudFront returned in the <code>ID</code> element when you created the origin access identity.</p> <p>If you want viewers to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty <code>OriginAccessIdentity</code> element.</p> <p>To delete the origin access identity from an existing distribution, update the distribution configuration and include an empty <code>OriginAccessIdentity</code> element.</p> <p>To replace the origin access identity, update the distribution configuration and specify the new origin access identity.</p> <p>For more information about the origin access identity, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p></p>"
+        },
+        "OriginReadTimeout":{
+          "shape":"integer",
+          "documentation":"<p>Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the <i>origin response timeout</i>. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 30 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout\">Response timeout</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin or an S3 bucket that is configured as a website endpoint, use the <code>CustomOriginConfig</code> element instead.</p>"
@@ -10749,6 +12831,11 @@
       "max":100.0,
       "min":0.0
     },
+    "ServerCertificateId":{
+      "type":"string",
+      "max":32,
+      "min":0
+    },
     "SessionStickinessConfig":{
       "type":"structure",
       "required":[
@@ -11123,6 +13210,25 @@
       },
       "documentation":"<p>A complex type that controls whether access logs are written for this streaming distribution.</p>"
     },
+    "StringSchemaConfig":{
+      "type":"structure",
+      "required":["Required"],
+      "members":{
+        "Comment":{
+          "shape":"sensitiveStringType",
+          "documentation":"<p>A comment to describe the parameter.</p>"
+        },
+        "DefaultValue":{
+          "shape":"ParameterValue",
+          "documentation":"<p>The default value of the parameter.</p>"
+        },
+        "Required":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the defined parameter is required.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a string schema.</p>"
+    },
     "Tag":{
       "type":"structure",
       "required":["Key"],
@@ -11208,6 +13314,16 @@
       },
       "documentation":"<p>A complex type that contains zero or more <code>Tag</code> elements.</p>"
     },
+    "TenantConfig":{
+      "type":"structure",
+      "members":{
+        "ParameterDefinitions":{
+          "shape":"ParameterDefinitions",
+          "documentation":"<p>The parameters that you specify for a distribution tenant.</p>"
+        }
+      },
+      "documentation":"<p><note> <p>This field only supports multi-tenant distributions. You can't specify this field for standard distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>The configuration for a distribution tenant.</p></p>"
+    },
     "TestFunctionFailed":{
       "type":"structure",
       "members":{
@@ -11227,7 +13343,7 @@
       ],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function that you are testing.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -12007,7 +14123,7 @@
       "members":{
         "Message":{"shape":"string"}
       },
-      "documentation":"<p>This operation is not supported in this region.</p>",
+      "documentation":"<p>This operation is not supported in this Amazon Web Services Region.</p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -12037,6 +14153,44 @@
       "documentation":"<p>The request to remove tags from a CloudFront resource.</p>",
       "payload":"TagKeys"
     },
+    "UpdateAnycastIpListRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "IfMatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type for the Anycast static IP list. You can specify one of the following options:</p> <ul> <li> <p> <code>ipv4</code> - Allocate a list of only IPv4 addresses</p> </li> <li> <p> <code>ipv6</code> - Allocate a list of only IPv4 addresses</p> </li> <li> <p> <code>dualstack</code> - Allocate a list of both IPv4 and IPv6 addresses</p> </li> </ul>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The current version (ETag value) of the Anycast static IP list that you are updating.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "UpdateAnycastIpListResult":{
+      "type":"structure",
+      "members":{
+        "AnycastIpList":{"shape":"AnycastIpList"},
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the Anycast static IP list.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"AnycastIpList"
+    },
     "UpdateCachePolicyRequest":{
       "type":"structure",
       "required":[
@@ -12127,6 +14281,55 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"CloudFrontOriginAccessIdentity"
     },
+    "UpdateConnectionGroupRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "IfMatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the connection group.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "Ipv6Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Enable IPv6 for the connection group. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesEnableIPv6\">Enable IPv6</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the connection group that you're updating.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        },
+        "AnycastIpListId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the Anycast static IP list.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Whether the connection group is enabled.</p>"
+        }
+      }
+    },
+    "UpdateConnectionGroupResult":{
+      "type":"structure",
+      "members":{
+        "ConnectionGroup":{
+          "shape":"ConnectionGroup",
+          "documentation":"<p>The connection group that you updated.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the connection group.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"ConnectionGroup"
+    },
     "UpdateContinuousDeploymentPolicyRequest":{
       "type":"structure",
       "required":[
@@ -12217,6 +14420,71 @@
       "documentation":"<p>The returned result of the corresponding request.</p>",
       "payload":"Distribution"
     },
+    "UpdateDistributionTenantRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "IfMatch"
+      ],
+      "members":{
+        "Id":{
+          "shape":"string",
+          "documentation":"<p>The ID of the distribution tenant.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "DistributionId":{
+          "shape":"string",
+          "documentation":"<p>The ID for the multi-tenant distribution.</p>"
+        },
+        "Domains":{
+          "shape":"DomainList",
+          "documentation":"<p>The domains to update for the distribution tenant. A domain object can contain only a domain property. You must specify at least one domain. Each distribution tenant can have up to 5 domains.</p>"
+        },
+        "Customizations":{
+          "shape":"Customizations",
+          "documentation":"<p>Customizations for the distribution tenant. For each distribution tenant, you can specify the geographic restrictions, and the Amazon Resource Names (ARNs) for the ACM certificate and WAF web ACL. These are specific values that you can override or disable from the multi-tenant distribution that was used to create the distribution tenant.</p>"
+        },
+        "Parameters":{
+          "shape":"Parameters",
+          "documentation":"<p>A list of parameter values to add to the resource. A parameter is specified as a key-value pair. A valid parameter value must exist for any parameter that is marked as required in the multi-tenant distribution.</p>"
+        },
+        "ConnectionGroupId":{
+          "shape":"string",
+          "documentation":"<p>The ID of the target connection group.</p>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> header that you received when retrieving the distribution tenant to update. This value is returned in the response of the <code>GetDistributionTenant</code> API operation.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        },
+        "ManagedCertificateRequest":{
+          "shape":"ManagedCertificateRequest",
+          "documentation":"<p>An object that contains the CloudFront managed ACM certificate request.</p>"
+        },
+        "Enabled":{
+          "shape":"boolean",
+          "documentation":"<p>Indicates whether the distribution tenant should be updated to an enabled state. If you update the distribution tenant and it's not enabled, the distribution tenant won't serve traffic.</p>"
+        }
+      }
+    },
+    "UpdateDistributionTenantResult":{
+      "type":"structure",
+      "members":{
+        "DistributionTenant":{
+          "shape":"DistributionTenant",
+          "documentation":"<p>The distribution tenant that you're updating.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the distribution tenant.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      },
+      "payload":"DistributionTenant"
+    },
     "UpdateDistributionWithStagingConfigRequest":{
       "type":"structure",
       "required":["Id"],
@@ -12254,6 +14522,48 @@
       },
       "payload":"Distribution"
     },
+    "UpdateDomainAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "Domain",
+        "TargetResource"
+      ],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain to update.</p>"
+        },
+        "TargetResource":{
+          "shape":"DistributionResourceId",
+          "documentation":"<p>The target standard distribution or distribution tenant resource for the domain. You can specify either <code>DistributionId</code> or <code>DistributionTenantId</code>, but not both.</p>"
+        },
+        "IfMatch":{
+          "shape":"string",
+          "documentation":"<p>The value of the <code>ETag</code> identifier for the standard distribution or distribution tenant that will be associated with the domain.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        }
+      }
+    },
+    "UpdateDomainAssociationResult":{
+      "type":"structure",
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain that you're moving.</p>"
+        },
+        "ResourceId":{
+          "shape":"string",
+          "documentation":"<p>The intended destination for the domain.</p>"
+        },
+        "ETag":{
+          "shape":"string",
+          "documentation":"<p>The current version of the target standard distribution or distribution tenant that was associated with the domain.</p>",
+          "location":"header",
+          "locationName":"ETag"
+        }
+      }
+    },
     "UpdateFieldLevelEncryptionConfigRequest":{
       "type":"structure",
       "required":[
@@ -12352,7 +14662,7 @@
       ],
       "members":{
         "Name":{
-          "shape":"string",
+          "shape":"FunctionName",
           "documentation":"<p>The name of the function that you are updating.</p>",
           "location":"uri",
           "locationName":"Name"
@@ -12776,6 +15086,59 @@
       },
       "payload":"VpcOrigin"
     },
+    "ValidationTokenDetail":{
+      "type":"structure",
+      "required":["Domain"],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain name.</p>"
+        },
+        "RedirectTo":{
+          "shape":"string",
+          "documentation":"<p>The domain to redirect to.</p>"
+        },
+        "RedirectFrom":{
+          "shape":"string",
+          "documentation":"<p>The domain to redirect from.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the validation token.</p>"
+    },
+    "ValidationTokenDetailList":{
+      "type":"list",
+      "member":{"shape":"ValidationTokenDetail"}
+    },
+    "ValidationTokenHost":{
+      "type":"string",
+      "enum":[
+        "cloudfront",
+        "self-hosted"
+      ]
+    },
+    "VerifyDnsConfigurationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Domain":{
+          "shape":"string",
+          "documentation":"<p>The domain name that you're verifying.</p>"
+        },
+        "Identifier":{
+          "shape":"string",
+          "documentation":"<p>The identifier of the distribution tenant. You can specify the ARN, ID, or name of the distribution tenant.</p>"
+        }
+      }
+    },
+    "VerifyDnsConfigurationResult":{
+      "type":"structure",
+      "members":{
+        "DnsConfigurationList":{
+          "shape":"DnsConfigurationList",
+          "documentation":"<p>The list of domain names, their statuses, and a description of each status.</p>"
+        }
+      }
+    },
     "ViewerCertificate":{
       "type":"structure",
       "members":{
@@ -12784,8 +15147,8 @@
           "documentation":"<p>If the distribution uses the CloudFront domain name such as <code>d111111abcdef8.cloudfront.net</code>, set this field to <code>true</code>.</p> <p>If the distribution uses <code>Aliases</code> (alternate domain names or CNAMEs), set this field to <code>false</code> and specify values for the following fields:</p> <ul> <li> <p> <code>ACMCertificateArn</code> or <code>IAMCertificateId</code> (specify a value for one, not both)</p> </li> <li> <p> <code>MinimumProtocolVersion</code> </p> </li> <li> <p> <code>SSLSupportMethod</code> </p> </li> </ul>"
         },
         "IAMCertificateId":{
-          "shape":"string",
-          "documentation":"<p>If the distribution uses <code>Aliases</code> (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html\">Identity and Access Management (IAM)</a>, provide the ID of the IAM certificate.</p> <p>If you specify an IAM certificate ID, you must also specify values for <code>MinimumProtocolVersion</code> and <code>SSLSupportMethod</code>. </p>"
+          "shape":"ServerCertificateId",
+          "documentation":"<p><note> <p>This field only supports standard distributions. You can't specify this field for multi-tenant distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html#unsupported-saas\">Unsupported features for SaaS Manager for Amazon CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note> <p>If the distribution uses <code>Aliases</code> (alternate domain names or CNAMEs) and the SSL/TLS certificate is stored in <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html\">Identity and Access Management (IAM)</a>, provide the ID of the IAM certificate.</p> <p>If you specify an IAM certificate ID, you must also specify values for <code>MinimumProtocolVersion</code> and <code>SSLSupportMethod</code>. </p></p>"
         },
         "ACMCertificateArn":{
           "shape":"string",
@@ -12793,7 +15156,7 @@
         },
         "SSLSupportMethod":{
           "shape":"SSLSupportMethod",
-          "documentation":"<p>If the distribution uses <code>Aliases</code> (alternate domain names or CNAMEs), specify which viewers the distribution accepts HTTPS connections from.</p> <ul> <li> <p> <code>sni-only</code> – The distribution accepts HTTPS connections from only viewers that support <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">server name indication (SNI)</a>. This is recommended. Most browsers and clients support SNI.</p> </li> <li> <p> <code>vip</code> – The distribution accepts HTTPS connections from all viewers including those that don't support SNI. This is not recommended, and results in additional monthly charges from CloudFront.</p> </li> <li> <p> <code>static-ip</code> - Do not specify this value unless your distribution has been enabled for this feature by the CloudFront team. If you have a use case that requires static IP addresses for a distribution, contact CloudFront through the <a href=\"https://console.aws.amazon.com/support/home\">Amazon Web Services Support Center</a>.</p> </li> </ul> <p>If the distribution uses the CloudFront domain name such as <code>d111111abcdef8.cloudfront.net</code>, don't set a value for this field.</p>"
+          "documentation":"<p>If the distribution uses <code>Aliases</code> (alternate domain names or CNAMEs), specify which viewers the distribution accepts HTTPS connections from.</p> <ul> <li> <p> <code>sni-only</code> – The distribution accepts HTTPS connections from only viewers that support <a href=\"https://en.wikipedia.org/wiki/Server_Name_Indication\">server name indication (SNI)</a>. This is recommended. Most browsers and clients support SNI.</p> </li> <li> <p> <code>vip</code> – The distribution accepts HTTPS connections from all viewers including those that don't support SNI. This is not recommended, and results in additional monthly charges from CloudFront.</p> </li> <li> <p> <code>static-ip</code> - Do not specify this value unless your distribution has been enabled for this feature by the CloudFront team. If you have a use case that requires static IP addresses for a distribution, contact CloudFront through the <a href=\"https://console.aws.amazon.com/support/home\">Amazon Web ServicesSupport Center</a>.</p> </li> </ul> <p>If the distribution uses the CloudFront domain name such as <code>d111111abcdef8.cloudfront.net</code>, don't set a value for this field.</p>"
         },
         "MinimumProtocolVersion":{
           "shape":"MinimumProtocolVersion",
@@ -12839,6 +15202,10 @@
           "shape":"string",
           "documentation":"<p>The VPC origin ARN.</p>"
         },
+        "AccountId":{
+          "shape":"string",
+          "documentation":"<p>The account ID of the Amazon Web Services account that owns the VPC origin.</p>"
+        },
         "Status":{
           "shape":"string",
           "documentation":"<p>The VPC origin status.</p>"
@@ -12866,13 +15233,17 @@
           "shape":"string",
           "documentation":"<p>The VPC origin ID.</p>"
         },
+        "OwnerAccountId":{
+          "shape":"string",
+          "documentation":"<p>The account ID of the Amazon Web Services account that owns the VPC origin.</p>"
+        },
         "OriginReadTimeout":{
           "shape":"integer",
-          "documentation":"<p>Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the <i>origin response timeout</i>. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 30 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginResponseTimeout\">Response timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the <i>origin response timeout</i>. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 30 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginResponseTimeout\">Response timeout</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         },
         "OriginKeepaliveTimeout":{
           "shape":"integer",
-          "documentation":"<p>Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 60 seconds, and the default (if you don't specify otherwise) is 5 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesOriginKeepaliveTimeout\">Keep-alive timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies how long, in seconds, CloudFront persists its connection to the origin. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 5 seconds.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistValuesOrigin.html#DownloadDistValuesOriginKeepaliveTimeout\">Keep-alive timeout (custom origins only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>An Amazon CloudFront VPC origin configuration.</p>"
@@ -12897,11 +15268,11 @@
         },
         "HTTPPort":{
           "shape":"integer",
-          "documentation":"<p>The HTTP port for the CloudFront VPC origin endpoint configuration.</p>"
+          "documentation":"<p>The HTTP port for the CloudFront VPC origin endpoint configuration. The default value is <code>80</code>.</p>"
         },
         "HTTPSPort":{
           "shape":"integer",
-          "documentation":"<p>The HTTPS port of the CloudFront VPC origin endpoint configuration.</p>"
+          "documentation":"<p>The HTTPS port of the CloudFront VPC origin endpoint configuration. The default value is <code>443</code>.</p>"
         },
         "OriginProtocolPolicy":{
           "shape":"OriginProtocolPolicy",
@@ -12983,6 +15354,10 @@
           "shape":"string",
           "documentation":"<p>The VPC origin summary ARN.</p>"
         },
+        "AccountId":{
+          "shape":"string",
+          "documentation":"<p>The account ID of the Amazon Web Services account that owns the VPC origin.</p>"
+        },
         "OriginEndpointArn":{
           "shape":"string",
           "documentation":"<p>The VPC origin summary origin endpoint ARN.</p>"
@@ -12997,6 +15372,21 @@
         "locationName":"VpcOriginSummary"
       }
     },
+    "WebAclCustomization":{
+      "type":"structure",
+      "required":["Action"],
+      "members":{
+        "Action":{
+          "shape":"CustomizationActionType",
+          "documentation":"<p>The action for the WAF web ACL customization. You can specify <code>override</code> to specify a separate WAF web ACL for the distribution tenant. If you specify <code>disable</code>, the distribution tenant won't have WAF web ACL protections and won't inherit from the multi-tenant distribution.</p>"
+        },
+        "Arn":{
+          "shape":"string",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the WAF web ACL.</p>"
+        }
+      },
+      "documentation":"<p>The WAF web ACL customization specified for the distribution tenant.</p>"
+    },
     "aliasString":{
       "type":"string",
       "max":253,
diff -pruN 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/waiters-2.json 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/cloudfront/2020-05-31/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudfront/2020-05-31/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,18 @@
         "expected" : "Completed"
       } ]
     },
+    "InvalidationForDistributionTenantCompleted" : {
+      "description" : "Wait until an invalidation for distribution tenant has completed.",
+      "delay" : 20,
+      "maxAttempts" : 30,
+      "operation" : "GetInvalidationForDistributionTenant",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Invalidation.Status",
+        "state" : "success",
+        "expected" : "Completed"
+      } ]
+    },
     "StreamingDistributionDeployed" : {
       "description" : "Wait until a streaming distribution is deployed.",
       "delay" : 60,
diff -pruN 2.23.6-1/awscli/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudfront-keyvaluestore/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,26 +4,26 @@
         "KvsARN": {
             "required": false,
             "documentation": "The ARN of the Key Value Store",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudhsm/2014-05-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/cloudhsm/2014-05-30/service-2.json 2.31.35-1/awscli/botocore/data/cloudhsm/2014-05-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudhsm/2014-05-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudhsm/2014-05-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"cloudhsm",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"CloudHSM",
     "serviceFullName":"Amazon CloudHSM",
     "serviceId":"CloudHSM",
     "signatureVersion":"v4",
     "targetPrefix":"CloudHsmFrontendService",
-    "uid":"cloudhsm-2014-05-30"
+    "uid":"cloudhsm-2014-05-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddTagsToResource":{
@@ -424,8 +426,7 @@
     },
     "CloudHsmInternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that an internal error occurred.</p>",
       "exception":true,
       "fault":true
@@ -893,8 +894,7 @@
     },
     "InvalidRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that one or more of the request parameters are not valid.</p>",
       "exception":true
     },
@@ -908,8 +908,7 @@
     },
     "ListAvailableZonesRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the inputs for the <a>ListAvailableZones</a> action.</p>"
     },
     "ListAvailableZonesResponse":{
diff -pruN 2.23.6-1/awscli/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudhsmv2/2017-04-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cloudhsmv2/2017-04-28/service-2.json 2.31.35-1/awscli/botocore/data/cloudhsmv2/2017-04-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudhsmv2/2017-04-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudhsmv2/2017-04-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1335,8 +1335,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1364,8 +1363,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "VpcId":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudsearch/2013-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/cloudsearch/2013-01-01/service-2.json 2.31.35-1/awscli/botocore/data/cloudsearch/2013-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudsearch/2013-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudsearch/2013-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2013-01-01",
     "endpointPrefix":"cloudsearch",
     "protocol":"query",
+    "protocols":["query"],
     "serviceFullName":"Amazon CloudSearch",
     "serviceId":"CloudSearch",
     "signatureVersion":"v4",
     "uid":"cloudsearch-2013-01-01",
-    "xmlNamespace":"http://cloudsearch.amazonaws.com/doc/2013-01-01/"
+    "xmlNamespace":"http://cloudsearch.amazonaws.com/doc/2013-01-01/",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BuildSuggesters":{
@@ -1193,8 +1195,7 @@
     },
     "DisabledOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because it attempted an operation which is not enabled.</p>",
       "error":{
         "code":"DisabledAction",
@@ -1609,8 +1610,7 @@
     },
     "InternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An internal error occurred while processing the request. If this problem persists, report an issue from the <a href=\"http://status.aws.amazon.com/\" target=\"_blank\">Service Health Dashboard</a>.</p>",
       "error":{
         "code":"InternalException",
@@ -1620,8 +1620,7 @@
     },
     "InvalidTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because it specified an invalid type definition.</p>",
       "error":{
         "code":"InvalidType",
@@ -1659,8 +1658,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because a resource limit has already been met.</p>",
       "error":{
         "code":"LimitExceeded",
@@ -1828,8 +1826,7 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because it attempted to create a resource that already exists.</p>",
       "error":{
         "code":"ResourceAlreadyExists",
@@ -1840,8 +1837,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because it attempted to reference a resource that does not exist.</p>",
       "error":{
         "code":"ResourceNotFound",
@@ -2111,8 +2107,7 @@
     "UpdateTimestamp":{"type":"timestamp"},
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because it has invalid parameters.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/paginators-1.json 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,3 @@
+{
+  "pagination": {}
+}
diff -pruN 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/service-2.json 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudsearchdomain/2013-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"cloudsearchdomain",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon CloudSearch Domain",
     "serviceId":"CloudSearch Domain",
     "signatureVersion":"v4",
     "signingName":"cloudsearch",
-    "uid":"cloudsearchdomain-2013-01-01"
+    "uid":"cloudsearchdomain-2013-01-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "Search":{
diff -pruN 2.23.6-1/awscli/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudtrail/2013-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cloudtrail/2013-11-01/service-2.json 2.31.35-1/awscli/botocore/data/cloudtrail/2013-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudtrail/2013-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudtrail/2013-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -459,6 +459,29 @@
       "documentation":"<p> Returns the specified dashboard. </p>",
       "idempotent":true
     },
+    "GetEventConfiguration":{
+      "name":"GetEventConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetEventConfigurationRequest"},
+      "output":{"shape":"GetEventConfigurationResponse"},
+      "errors":[
+        {"shape":"CloudTrailARNInvalidException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"EventDataStoreARNInvalidException"},
+        {"shape":"EventDataStoreNotFoundException"},
+        {"shape":"InvalidEventDataStoreStatusException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"InvalidEventDataStoreCategoryException"},
+        {"shape":"NoManagementAccountSLRExistsException"},
+        {"shape":"InvalidParameterCombinationException"}
+      ],
+      "documentation":"<p>Retrieves the current event configuration settings for the specified event data store, including details about maximum event size and context key selectors configured for the event data store.</p>",
+      "idempotent":true
+    },
     "GetEventDataStore":{
       "name":"GetEventDataStore",
       "http":{
@@ -814,6 +837,35 @@
       "documentation":"<p>Looks up <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-management-events\">management events</a> or <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-insights-events\">CloudTrail Insights events</a> that are captured by CloudTrail. You can look up events that occurred in a Region within the last 90 days.</p> <note> <p> <code>LookupEvents</code> returns recent Insights events for trails that enable Insights. To view Insights events for an event data store, you can run queries on your Insights event data store, and you can also view the Lake dashboard for Insights.</p> </note> <p>Lookup supports the following attributes for management events:</p> <ul> <li> <p>Amazon Web Services access key</p> </li> <li> <p>Event ID</p> </li> <li> <p>Event name</p> </li> <li> <p>Event source</p> </li> <li> <p>Read only</p> </li> <li> <p>Resource name</p> </li> <li> <p>Resource type</p> </li> <li> <p>User name</p> </li> </ul> <p>Lookup supports the following attributes for Insights events:</p> <ul> <li> <p>Event ID</p> </li> <li> <p>Event name</p> </li> <li> <p>Event source</p> </li> </ul> <p>All attributes are optional. The default number of results returned is 50, with a maximum of 50 possible. The response includes a token that you can use to get the next page of results.</p> <important> <p>The rate of lookup requests is limited to two per second, per account, per Region. If this limit is exceeded, a throttling error occurs.</p> </important>",
       "idempotent":true
     },
+    "PutEventConfiguration":{
+      "name":"PutEventConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"PutEventConfigurationRequest"},
+      "output":{"shape":"PutEventConfigurationResponse"},
+      "errors":[
+        {"shape":"EventDataStoreARNInvalidException"},
+        {"shape":"EventDataStoreNotFoundException"},
+        {"shape":"InvalidEventDataStoreStatusException"},
+        {"shape":"InvalidEventDataStoreCategoryException"},
+        {"shape":"InactiveEventDataStoreException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"InvalidParameterCombinationException"},
+        {"shape":"CloudTrailARNInvalidException"},
+        {"shape":"ConflictException"},
+        {"shape":"NotOrganizationMasterAccountException"},
+        {"shape":"NoManagementAccountSLRExistsException"},
+        {"shape":"InsufficientDependencyServiceAccessPermissionException"},
+        {"shape":"InsufficientIAMAccessPermissionException"}
+      ],
+      "documentation":"<p>Updates the event configuration settings for the specified event data store. You can update the maximum event size and context key selectors.</p>",
+      "idempotent":true
+    },
     "PutEventSelectors":{
       "name":"PutEventSelectors",
       "http":{
@@ -909,7 +961,8 @@
         {"shape":"OrganizationNotInAllFeaturesModeException"},
         {"shape":"OrganizationsNotInUseException"},
         {"shape":"UnsupportedOperationException"},
-        {"shape":"OperationNotPermittedException"}
+        {"shape":"OperationNotPermittedException"},
+        {"shape":"InsufficientIAMAccessPermissionException"}
       ],
       "documentation":"<p>Registers an organization’s member account as the CloudTrail <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-delegated-administrator.html\">delegated administrator</a>.</p>",
       "idempotent":true
@@ -1019,7 +1072,8 @@
         {"shape":"UnsupportedOperationException"},
         {"shape":"NotOrganizationMasterAccountException"},
         {"shape":"NoManagementAccountSLRExistsException"},
-        {"shape":"InsufficientDependencyServiceAccessPermissionException"}
+        {"shape":"InsufficientDependencyServiceAccessPermissionException"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Starts the ingestion of live events on an event data store specified as either an ARN or the ID portion of the ARN. To start ingestion, the event data store <code>Status</code> must be <code>STOPPED_INGESTION</code> and the <code>eventCategory</code> must be <code>Management</code>, <code>Data</code>, <code>NetworkActivity</code>, or <code>ConfigurationItem</code>.</p>"
     },
@@ -1118,7 +1172,8 @@
         {"shape":"UnsupportedOperationException"},
         {"shape":"NotOrganizationMasterAccountException"},
         {"shape":"NoManagementAccountSLRExistsException"},
-        {"shape":"InsufficientDependencyServiceAccessPermissionException"}
+        {"shape":"InsufficientDependencyServiceAccessPermissionException"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Stops the ingestion of live events on an event data store specified as either an ARN or the ID portion of the ARN. To stop ingestion, the event data store <code>Status</code> must be <code>ENABLED</code> and the <code>eventCategory</code> must be <code>Management</code>, <code>Data</code>, <code>NetworkActivity</code>, or <code>ConfigurationItem</code>.</p>"
     },
@@ -1289,15 +1344,13 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> You do not have sufficient access to perform this action. </p>",
       "exception":true
     },
     "AccountHasOngoingImportException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when you start a new import and a previous import is still in progress. </p>",
       "exception":true
     },
@@ -1309,22 +1362,19 @@
     },
     "AccountNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified account is not found or not part of an organization.</p>",
       "exception":true
     },
     "AccountNotRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified account is not registered as the CloudTrail delegated administrator.</p>",
       "exception":true
     },
     "AccountRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the account is already registered as the CloudTrail delegated administrator.</p>",
       "exception":true
     },
@@ -1348,8 +1398,7 @@
     },
     "AddTagsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the objects or data if successful. Otherwise, returns an error.</p>"
     },
     "AdvancedEventSelector":{
@@ -1463,8 +1512,7 @@
     },
     "CannotDelegateManagementAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the management account of an organization is registered as the CloudTrail delegated administrator.</p>",
       "exception":true
     },
@@ -1484,15 +1532,13 @@
     },
     "ChannelARNInvalidException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified value of <code>ChannelARN</code> is not valid.</p>",
       "exception":true
     },
     "ChannelAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the provided channel already exists. </p>",
       "exception":true
     },
@@ -1504,15 +1550,13 @@
     },
     "ChannelExistsForEDSException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified event data store cannot yet be deleted because it is in use by a channel.</p>",
       "exception":true
     },
     "ChannelMaxLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the maximum number of channels limit is exceeded. </p>",
       "exception":true
     },
@@ -1524,8 +1568,7 @@
     },
     "ChannelNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when CloudTrail cannot find the specified channel.</p>",
       "exception":true
     },
@@ -1535,46 +1578,63 @@
     },
     "CloudTrailARNInvalidException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when an operation is called with an ARN that is not valid.</p> <p>The following is the format of a trail ARN: <code>arn:aws:cloudtrail:us-east-2:123456789012:trail/MyTrail</code> </p> <p>The following is the format of an event data store ARN: <code>arn:aws:cloudtrail:us-east-2:123456789012:eventdatastore/EXAMPLE-f852-4e8f-8bd1-bcf6cEXAMPLE</code> </p> <p>The following is the format of a dashboard ARN: <code>arn:aws:cloudtrail:us-east-1:123456789012:dashboard/exampleDash</code> </p> <p>The following is the format of a channel ARN: <code>arn:aws:cloudtrail:us-east-2:123456789012:channel/01234567890</code> </p>",
       "exception":true
     },
     "CloudTrailAccessNotEnabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when trusted access has not been enabled between CloudTrail and Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html#orgs_how-to-enable-disable-trusted-access\">How to enable or disable trusted access</a> in the <i>Organizations User Guide</i> and <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html\">Prepare For Creating a Trail For Your Organization</a> in the <i>CloudTrail User Guide</i>.</p>",
       "exception":true
     },
     "CloudTrailInvalidClientTokenIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when a call results in the <code>InvalidClientTokenId</code> error code. This can occur when you are creating or updating a trail to send notifications to an Amazon SNS topic that is in a suspended Amazon Web Services account.</p>",
       "exception":true
     },
     "CloudWatchLogsDeliveryUnavailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cannot set a CloudWatch Logs delivery for this Region.</p>",
       "exception":true
     },
     "ConcurrentModificationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> You are trying to update a resource when another request is in progress. Allow sufficient wait time for the previous request to complete, then retry your request. </p>",
       "exception":true
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified resource is not ready for an operation. This can occur when you try to run an operation on a resource before CloudTrail has time to fully load the resource, or because another operation is modifying the resource. If this exception occurs, wait a few minutes, and then try the operation again.</p>",
       "exception":true
     },
+    "ContextKeySelector":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Equals"
+      ],
+      "members":{
+        "Type":{
+          "shape":"Type",
+          "documentation":"<p>Specifies the type of the event record field in ContextKeySelector. Valid values include RequestContext, TagContext.</p>"
+        },
+        "Equals":{
+          "shape":"OperatorTargetList",
+          "documentation":"<p>A list of keys defined by Type to be included in CloudTrail enriched events. </p>"
+        }
+      },
+      "documentation":"<p>An object that contains information types to be included in CloudTrail enriched events.</p>"
+    },
+    "ContextKeySelectors":{
+      "type":"list",
+      "member":{"shape":"ContextKeySelector"},
+      "max":2
+    },
     "CreateChannelRequest":{
       "type":"structure",
       "required":[
@@ -1791,7 +1851,7 @@
         },
         "SnsTopicName":{
           "shape":"String",
-          "documentation":"<p>Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.</p>"
+          "documentation":"<p>Specifies the name or ARN of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.</p>"
         },
         "IncludeGlobalServiceEvents":{
           "shape":"Boolean",
@@ -1954,8 +2014,7 @@
     "Date":{"type":"timestamp"},
     "DelegatedAdminAccountLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the maximum number of CloudTrail delegated administrators is reached.</p>",
       "exception":true
     },
@@ -1971,8 +2030,7 @@
     },
     "DeleteChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDashboardRequest":{
       "type":"structure",
@@ -1986,8 +2044,7 @@
     },
     "DeleteDashboardResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventDataStoreRequest":{
       "type":"structure",
@@ -2001,8 +2058,7 @@
     },
     "DeleteEventDataStoreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourcePolicyRequest":{
       "type":"structure",
@@ -2016,8 +2072,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrailRequest":{
       "type":"structure",
@@ -2032,8 +2087,7 @@
     },
     "DeleteTrailResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the objects or data listed below if successful. Otherwise, returns an error.</p>"
     },
     "DeliveryS3Uri":{
@@ -2068,8 +2122,7 @@
     },
     "DeregisterOrganizationDelegatedAdminResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the following response if successful. Otherwise, returns an error.</p>"
     },
     "DescribeQueryRequest":{
@@ -2374,15 +2427,13 @@
     },
     "EventDataStoreARNInvalidException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified event data store ARN is not valid or does not map to an event data store in your account.</p>",
       "exception":true
     },
     "EventDataStoreAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An event data store with that name already exists.</p>",
       "exception":true
     },
@@ -2394,15 +2445,13 @@
     },
     "EventDataStoreFederationEnabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> You cannot delete the event data store because Lake query federation is enabled. To delete the event data store, run the <code>DisableFederation</code> operation to disable Lake query federation on the event data store. </p>",
       "exception":true
     },
     "EventDataStoreHasOngoingImportException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when you try to update or delete an event data store that currently has an import in progress. </p>",
       "exception":true
     },
@@ -2420,8 +2469,7 @@
     },
     "EventDataStoreMaxLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Your account has used the maximum number of event data stores.</p>",
       "exception":true
     },
@@ -2433,8 +2481,7 @@
     },
     "EventDataStoreNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified event data store was not found.</p>",
       "exception":true
     },
@@ -2451,8 +2498,7 @@
     },
     "EventDataStoreTerminationProtectedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event data store cannot be deleted because termination protection is enabled for it.</p>",
       "exception":true
     },
@@ -2555,8 +2601,7 @@
     },
     "GenerateResponseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when a valid query could not be generated for the provided prompt. </p>",
       "exception":true
     },
@@ -2654,6 +2699,32 @@
         }
       }
     },
+    "GetEventConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "EventDataStore":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) or ID suffix of the ARN of the event data store for which you want to retrieve event configuration settings.</p>"
+        }
+      }
+    },
+    "GetEventConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "EventDataStoreArn":{
+          "shape":"EventDataStoreArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) or ID suffix of the ARN of the event data store for which the event configuration settings are returned.</p>"
+        },
+        "MaxEventSize":{
+          "shape":"MaxEventSize",
+          "documentation":"<p>The maximum allowed size for events stored in the specified event data store.</p>"
+        },
+        "ContextKeySelectors":{
+          "shape":"ContextKeySelectors",
+          "documentation":"<p>The list of context key selectors that are configured for the event data store.</p>"
+        }
+      }
+    },
     "GetEventDataStoreRequest":{
       "type":"structure",
       "required":["EventDataStore"],
@@ -3068,8 +3139,7 @@
     },
     "ImportNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The specified import was not found. </p>",
       "exception":true
     },
@@ -3152,15 +3222,13 @@
     },
     "InactiveEventDataStoreException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event data store is inactive.</p>",
       "exception":true
     },
     "InactiveQueryException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified query cannot be canceled because it is in the <code>FINISHED</code>, <code>FAILED</code>, <code>TIMED_OUT</code>, or <code>CANCELLED</code> state.</p>",
       "exception":true
     },
@@ -3192,8 +3260,7 @@
     },
     "InsightNotEnabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If you run <code>GetInsightSelectors</code> on a trail or event data store that does not have Insights events enabled, the operation throws the exception <code>InsightNotEnabledException</code>.</p>",
       "exception":true
     },
@@ -3246,234 +3313,207 @@
     },
     "InsufficientDependencyServiceAccessPermissionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the IAM identity that is used to create the organization resource lacks one or more required permissions for creating an organization resource in a required service.</p>",
       "exception":true
     },
     "InsufficientEncryptionPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>For the <code>CreateTrail</code> <code>PutInsightSelectors</code>, <code>UpdateTrail</code>, <code>StartQuery</code>, and <code>StartImport</code> operations, this exception is thrown when the policy on the S3 bucket or KMS key does not have sufficient permissions for the operation.</p> <p>For all other operations, this exception is thrown when the policy for the KMS key does not have sufficient permissions for the operation.</p>",
       "exception":true
     },
+    "InsufficientIAMAccessPermissionException":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The task can't be completed because you are signed in with an account that lacks permissions to view or create a service-linked role. Sign in with an account that has the required permissions and then try again.</p>",
+      "exception":true
+    },
     "InsufficientS3BucketPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the policy on the S3 bucket is not sufficient.</p>",
       "exception":true
     },
     "InsufficientSnsTopicPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the policy on the Amazon SNS topic is not sufficient.</p>",
       "exception":true
     },
     "Integer":{"type":"integer"},
     "InvalidCloudWatchLogsLogGroupArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided CloudWatch Logs log group is not valid.</p>",
       "exception":true
     },
     "InvalidCloudWatchLogsRoleArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided role is not valid.</p>",
       "exception":true
     },
     "InvalidDateRangeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A date range for the query was specified that is not valid. Be sure that the start time is chronologically before the end time. For more information about writing a query, see <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-create-edit-query.html\">Create or edit a query</a> in the <i>CloudTrail User Guide</i>.</p>",
       "exception":true
     },
     "InvalidEventCategoryException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Occurs if an event category that is not valid is specified as a value of <code>EventCategory</code>.</p>",
       "exception":true
     },
     "InvalidEventDataStoreCategoryException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when event categories of specified event data stores are not valid.</p>",
       "exception":true
     },
     "InvalidEventDataStoreStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event data store is not in a status that supports the operation.</p>",
       "exception":true
     },
     "InvalidEventSelectorsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the <code>PutEventSelectors</code> operation is called with a number of event selectors, advanced event selectors, or data resources that is not valid. The combination of event selectors or advanced event selectors and data resources is not valid. A trail can have up to 5 event selectors. If a trail uses advanced event selectors, a maximum of 500 total values for all conditions in all advanced event selectors is allowed. A trail is limited to 250 data resources. These data resources can be distributed across event selectors, but the overall total cannot exceed 250.</p> <p>You can:</p> <ul> <li> <p>Specify a valid number of event selectors (1 to 5) for a trail.</p> </li> <li> <p>Specify a valid number of data resources (1 to 250) for an event selector. The limit of number of resources on an individual event selector is configurable up to 250. However, this upper limit is allowed only if the total number of data resources does not exceed 250 across all event selectors for a trail.</p> </li> <li> <p>Specify up to 500 values for all conditions in all advanced event selectors for a trail.</p> </li> <li> <p>Specify a valid value for a parameter. For example, specifying the <code>ReadWriteType</code> parameter with a value of <code>read-only</code> is not valid.</p> </li> </ul>",
       "exception":true
     },
     "InvalidHomeRegionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when an operation is called on a trail from a Region other than the Region in which the trail was created.</p>",
       "exception":true
     },
     "InvalidImportSourceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the provided source S3 bucket is not valid for import. </p>",
       "exception":true
     },
     "InvalidInsightSelectorsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>For <code>PutInsightSelectors</code>, this exception is thrown when the formatting or syntax of the <code>InsightSelectors</code> JSON statement is not valid, or the specified <code>InsightType</code> in the <code>InsightSelectors</code> statement is not valid. Valid values for <code>InsightType</code> are <code>ApiCallRateInsight</code> and <code>ApiErrorRateInsight</code>. To enable Insights on an event data store, the destination event data store specified by the <code>InsightsDestination</code> parameter must log Insights events and the source event data store specified by the <code>EventDataStore</code> parameter must log management events.</p> <p>For <code>UpdateEventDataStore</code>, this exception is thrown if Insights are enabled on the event data store and the updated advanced event selectors are not compatible with the configured <code>InsightSelectors</code>. If the <code>InsightSelectors</code> includes an <code>InsightType</code> of <code>ApiCallRateInsight</code>, the source event data store must log <code>write</code> management events. If the <code>InsightSelectors</code> includes an <code>InsightType</code> of <code>ApiErrorRateInsight</code>, the source event data store must log management events.</p>",
       "exception":true
     },
     "InvalidKmsKeyIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the KMS key ARN is not valid.</p>",
       "exception":true
     },
     "InvalidLookupAttributesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Occurs when a lookup attribute is specified that is not valid.</p>",
       "exception":true
     },
     "InvalidMaxResultsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown if the limit specified is not valid.</p>",
       "exception":true
     },
     "InvalidNextTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A token that is not valid, or a token that was previously used in a request with different parameters. This exception is thrown if the token is not valid.</p>",
       "exception":true
     },
     "InvalidParameterCombinationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the combination of parameters provided is not valid.</p>",
       "exception":true
     },
     "InvalidParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request includes a parameter that is not valid.</p>",
       "exception":true
     },
     "InvalidQueryStatementException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The query that was submitted has validation errors, or uses incorrect syntax or unsupported keywords. For more information about writing a query, see <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-create-edit-query.html\">Create or edit a query</a> in the <i>CloudTrail User Guide</i>.</p>",
       "exception":true
     },
     "InvalidQueryStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The query status is not valid for the operation.</p>",
       "exception":true
     },
     "InvalidS3BucketNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided S3 bucket name is not valid.</p>",
       "exception":true
     },
     "InvalidS3PrefixException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided S3 prefix is not valid.</p>",
       "exception":true
     },
     "InvalidSnsTopicNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided SNS topic name is not valid.</p>",
       "exception":true
     },
     "InvalidSourceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified value of <code>Source</code> is not valid.</p>",
       "exception":true
     },
     "InvalidTagParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified tag key or values are not valid. It can also occur if there are duplicate tags or too many tags on the resource.</p>",
       "exception":true
     },
     "InvalidTimeRangeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Occurs if the timestamp values are not valid. Either the start time occurs after the end time, or the time range is outside the range of possible values.</p>",
       "exception":true
     },
     "InvalidTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Reserved for future use.</p>",
       "exception":true
     },
     "InvalidTrailNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the provided trail name is not valid. Trail names must meet the following requirements:</p> <ul> <li> <p>Contain only ASCII letters (a-z, A-Z), numbers (0-9), periods (.), underscores (_), or dashes (-)</p> </li> <li> <p>Start with a letter or number, and end with a letter or number</p> </li> <li> <p>Be between 3 and 128 characters</p> </li> <li> <p>Have no adjacent periods, underscores or dashes. Names like <code>my-_namespace</code> and <code>my--namespace</code> are not valid.</p> </li> <li> <p>Not be in IP address format (for example, 192.168.5.4)</p> </li> </ul>",
       "exception":true
     },
     "KmsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when there is an issue with the specified KMS key and the trail or event data store can't be updated.</p>",
       "exception":true
     },
     "KmsKeyDisabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is no longer in use.</p>",
       "deprecated":true,
       "exception":true
     },
     "KmsKeyNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the KMS key does not exist, when the S3 bucket and the KMS key are not in the same Region, or when the KMS key associated with the Amazon SNS topic either does not exist or is not in the same Region.</p>",
       "exception":true
     },
@@ -3871,7 +3911,7 @@
       "type":"string",
       "max":1024,
       "min":3,
-      "pattern":"^[a-zA-Z0-9._/\\-:]+$"
+      "pattern":"^[a-zA-Z0-9._/\\-:*]+$"
     },
     "Long":{"type":"long"},
     "LookupAttribute":{
@@ -3960,11 +4000,17 @@
     },
     "MaxConcurrentQueriesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You are already running the maximum number of concurrent queries. The maximum number of concurrent queries is 10. Wait a minute for some queries to finish, and then run the query again.</p>",
       "exception":true
     },
+    "MaxEventSize":{
+      "type":"string",
+      "enum":[
+        "Standard",
+        "Large"
+      ]
+    },
     "MaxQueryResults":{
       "type":"integer",
       "max":1000,
@@ -3977,37 +4023,32 @@
     },
     "MaximumNumberOfTrailsExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the maximum number of trails is reached.</p>",
       "exception":true
     },
     "NextToken":{"type":"string"},
     "NoManagementAccountSLRExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the management account does not have a service-linked role. </p>",
       "exception":true
     },
     "NotOrganizationManagementAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the account making the request is not the organization's management account. </p>",
       "exception":true
     },
     "NotOrganizationMasterAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the Amazon Web Services account making the request to create or update an organization trail or event data store is not the management account for an organization in Organizations. For more information, see <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-an-organizational-trail-prepare.html\">Prepare For Creating a Trail For Your Organization</a> or <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-organizations.html\">Organization event data stores</a>.</p>",
       "exception":true
     },
     "OperationNotPermittedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the requested operation is not permitted.</p>",
       "exception":true
     },
@@ -4016,6 +4057,17 @@
       "member":{"shape":"OperatorValue"},
       "min":1
     },
+    "OperatorTargetList":{
+      "type":"list",
+      "member":{"shape":"OperatorTargetListMember"},
+      "max":50,
+      "min":1
+    },
+    "OperatorTargetListMember":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "OperatorValue":{
       "type":"string",
       "max":2048,
@@ -4024,15 +4076,13 @@
     },
     "OrganizationNotInAllFeaturesModeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when Organizations is not configured to support all features. All features must be enabled in Organizations to support creating an organization trail or event data store.</p>",
       "exception":true
     },
     "OrganizationsNotInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the request is made from an Amazon Web Services account that is not a member of an organization. To make this request, sign in using the credentials of an account that belongs to an organization.</p>",
       "exception":true
     },
@@ -4109,6 +4159,44 @@
       "type":"list",
       "member":{"shape":"PublicKey"}
     },
+    "PutEventConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "MaxEventSize",
+        "ContextKeySelectors"
+      ],
+      "members":{
+        "EventDataStore":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) or ID suffix of the ARN of the event data store for which you want to update event configuration settings.</p>"
+        },
+        "MaxEventSize":{
+          "shape":"MaxEventSize",
+          "documentation":"<p>The maximum allowed size for events to be stored in the specified event data store. If you are using context key selectors, MaxEventSize must be set to Large.</p>"
+        },
+        "ContextKeySelectors":{
+          "shape":"ContextKeySelectors",
+          "documentation":"<p>A list of context key selectors that will be included to provide enriched event data.</p>"
+        }
+      }
+    },
+    "PutEventConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "EventDataStoreArn":{
+          "shape":"EventDataStoreArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) or ID suffix of the ARN of the event data store for which the event configuration settings were updated.</p>"
+        },
+        "MaxEventSize":{
+          "shape":"MaxEventSize",
+          "documentation":"<p>The maximum allowed size for events stored in the specified event data store.</p>"
+        },
+        "ContextKeySelectors":{
+          "shape":"ContextKeySelectors",
+          "documentation":"<p>The list of context key selectors that are configured for the event data store.</p>"
+        }
+      }
+    },
     "PutEventSelectorsRequest":{
       "type":"structure",
       "required":["TrailName"],
@@ -4251,8 +4339,7 @@
     },
     "QueryIdNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The query ID does not exist or does not map to a query.</p>",
       "exception":true
     },
@@ -4435,8 +4522,7 @@
     },
     "RegisterOrganizationDelegatedAdminResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the following response if successful. Otherwise, returns an error.</p>"
     },
     "RemoveTagsRequest":{
@@ -4459,8 +4545,7 @@
     },
     "RemoveTagsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the objects or data listed below if successful. Otherwise, returns an error.</p>"
     },
     "RequestWidget":{
@@ -4505,8 +4590,7 @@
     },
     "ResourceARNNotValidException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the provided resource does not exist, or the ARN format of the resource is not valid. </p> <p>The following is the format of an event data store ARN: <code>arn:aws:cloudtrail:us-east-2:123456789012:eventdatastore/EXAMPLE-f852-4e8f-8bd1-bcf6cEXAMPLE</code> </p> <p>The following is the format of a dashboard ARN: <code>arn:aws:cloudtrail:us-east-1:123456789012:dashboard/exampleDash</code> </p> <p>The following is the format of a channel ARN: <code>arn:aws:cloudtrail:us-east-2:123456789012:channel/01234567890</code> </p>",
       "exception":true
     },
@@ -4527,8 +4611,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified resource is not found.</p>",
       "exception":true
     },
@@ -4539,15 +4622,13 @@
     },
     "ResourcePolicyNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the specified resource policy is not found. </p>",
       "exception":true
     },
     "ResourcePolicyNotValidException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the resouce-based policy has syntax errors, or contains a principal that is not valid. </p>",
       "exception":true
     },
@@ -4571,8 +4652,7 @@
     },
     "ResourceTypeNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified resource type is not supported by CloudTrail.</p>",
       "exception":true
     },
@@ -4646,8 +4726,7 @@
     },
     "S3BucketDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified S3 bucket does not exist.</p>",
       "exception":true
     },
@@ -4760,8 +4839,7 @@
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the quota is exceeded. For information about CloudTrail quotas, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/ct.html#limits_cloudtrail\">Service quotas</a> in the <i>Amazon Web Services General Reference</i>. </p>",
       "exception":true
     },
@@ -4820,8 +4898,7 @@
     },
     "StartEventDataStoreIngestionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartImportRequest":{
       "type":"structure",
@@ -4898,8 +4975,7 @@
     },
     "StartLoggingResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the objects or data listed below if successful. Otherwise, returns an error.</p>"
     },
     "StartQueryRequest":{
@@ -4952,8 +5028,7 @@
     },
     "StopEventDataStoreIngestionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopImportRequest":{
       "type":"structure",
@@ -5019,8 +5094,7 @@
     },
     "StopLoggingResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returns the objects or data listed below if successful. Otherwise, returns an error.</p>"
     },
     "String":{"type":"string"},
@@ -5051,8 +5125,7 @@
     },
     "TagsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of tags per trail, event data store, dashboard, or channel has exceeded the permitted amount. Currently, the limit is 50.</p>",
       "exception":true
     },
@@ -5065,8 +5138,7 @@
     "TerminationProtectionEnabled":{"type":"boolean"},
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> This exception is thrown when the request rate exceeds the limit. </p>",
       "exception":true
     },
@@ -5151,8 +5223,7 @@
     },
     "TrailAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the specified trail already exists.</p>",
       "exception":true
     },
@@ -5184,15 +5255,13 @@
     },
     "TrailNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the trail with the given name is not found.</p>",
       "exception":true
     },
     "TrailNotProvidedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is no longer in use.</p>",
       "exception":true
     },
@@ -5200,6 +5269,13 @@
       "type":"list",
       "member":{"shape":"TrailInfo"}
     },
+    "Type":{
+      "type":"string",
+      "enum":[
+        "TagContext",
+        "RequestContext"
+      ]
+    },
     "UUID":{
       "type":"string",
       "max":36,
@@ -5208,8 +5284,7 @@
     },
     "UnsupportedOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception is thrown when the requested operation is not supported.</p>",
       "exception":true
     },
@@ -5432,7 +5507,7 @@
         },
         "SnsTopicName":{
           "shape":"String",
-          "documentation":"<p>Specifies the name of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.</p>"
+          "documentation":"<p>Specifies the name or ARN of the Amazon SNS topic defined for notification of log file delivery. The maximum length is 256 characters.</p>"
         },
         "IncludeGlobalServiceEvents":{
           "shape":"Boolean",
diff -pruN 2.23.6-1/awscli/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudtrail-data/2021-08-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudwatch/2010-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,161 +57,170 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://monitoring.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://monitoring-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://monitoring.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
+                                                    "ref": "UseDualStack"
                                                 },
                                                 true
                                             ]
@@ -221,119 +230,201 @@
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "stringEquals",
+                                                    "fn": "booleanEquals",
                                                     "argv": [
+                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "name"
+                                                                "supportsFIPS"
                                                             ]
-                                                        },
-                                                        "aws-us-gov"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://monitoring.{Region}.amazonaws.com",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://monitoring-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://monitoring-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://monitoring-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://monitoring.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://monitoring.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://monitoring.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://monitoring.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json 2.31.35-1/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cloudwatch/2010-08-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,7 @@
       "errors":[
         {"shape":"ResourceNotFound"}
       ],
-      "documentation":"<p>Deletes the specified alarms. You can delete up to 100 alarms in one operation. However, this total can include no more than one composite alarm. For example, you could delete 99 metric alarms and one composite alarms with one operation, but you can't delete two composite alarms with one operation.</p> <p> If you specify an incorrect alarm name or make any other error in the operation, no alarms are deleted. To confirm that alarms were deleted successfully, you can use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarms.html\">DescribeAlarms</a> operation after using <code>DeleteAlarms</code>.</p> <note> <p>It is possible to create a loop or cycle of composite alarms, where composite alarm A depends on composite alarm B, and composite alarm B also depends on composite alarm A. In this scenario, you can't delete any composite alarm that is part of the cycle because there is always still a composite alarm that depends on that alarm that you want to delete.</p> <p>To get out of such a situation, you must break the cycle by changing the rule of one of the composite alarms in the cycle to remove a dependency that creates the cycle. The simplest change to make to break a cycle is to change the <code>AlarmRule</code> of one of the alarms to <code>false</code>. </p> <p>Additionally, the evaluation of composite alarms stops if CloudWatch detects a cycle in the evaluation path. </p> </note>"
+      "documentation":"<p>Deletes the specified alarms. You can delete up to 100 alarms in one operation. However, this total can include no more than one composite alarm. For example, you could delete 99 metric alarms and one composite alarms with one operation, but you can't delete two composite alarms with one operation.</p> <p> If you specify any incorrect alarm names, the alarms you specify with correct names are still deleted. Other syntax errors might result in no alarms being deleted. To confirm that alarms were deleted successfully, you can use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarms.html\">DescribeAlarms</a> operation after using <code>DeleteAlarms</code>.</p> <note> <p>It is possible to create a loop or cycle of composite alarms, where composite alarm A depends on composite alarm B, and composite alarm B also depends on composite alarm A. In this scenario, you can't delete any composite alarm that is part of the cycle because there is always still a composite alarm that depends on that alarm that you want to delete.</p> <p>To get out of such a situation, you must break the cycle by changing the rule of one of the composite alarms in the cycle to remove a dependency that creates the cycle. The simplest change to make to break a cycle is to change the <code>AlarmRule</code> of one of the alarms to <code>false</code>. </p> <p>Additionally, the evaluation of composite alarms stops if CloudWatch detects a cycle in the evaluation path. </p> </note>"
     },
     "DeleteAnomalyDetector":{
       "name":"DeleteAnomalyDetector",
@@ -60,7 +60,8 @@
       "errors":[
         {"shape":"InvalidParameterValueException"},
         {"shape":"DashboardNotFoundError"},
-        {"shape":"InternalServiceFault"}
+        {"shape":"InternalServiceFault"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Deletes all dashboards that you specify. You can specify up to 100 dashboards to delete. If there is an error during this call, no dashboards are deleted.</p>"
     },
@@ -99,6 +100,23 @@
       ],
       "documentation":"<p>Permanently deletes the metric stream that you specify.</p>"
     },
+    "DescribeAlarmContributors":{
+      "name":"DescribeAlarmContributors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeAlarmContributorsInput"},
+      "output":{
+        "shape":"DescribeAlarmContributorsOutput",
+        "resultWrapper":"DescribeAlarmContributorsResult"
+      },
+      "errors":[
+        {"shape":"InvalidNextToken"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns the information of the current alarm contributors that are in <code>ALARM</code> state. This operation returns details about the individual time series that contribute to the alarm's state.</p>"
+    },
     "DescribeAlarmHistory":{
       "name":"DescribeAlarmHistory",
       "http":{
@@ -470,7 +488,8 @@
       },
       "errors":[
         {"shape":"DashboardInvalidInputError"},
-        {"shape":"InternalServiceFault"}
+        {"shape":"InternalServiceFault"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Creates a dashboard if it does not already exist, or updates an existing dashboard. If you update a dashboard, the entire contents are replaced with what you specify here.</p> <p>All dashboards in your account are global, not region-specific.</p> <p>A simple way to create a dashboard using <code>PutDashboard</code> is to copy an existing dashboard. To copy an existing dashboard using the console, you can load the dashboard and then use the View/edit source command in the Actions menu to display the JSON block for that dashboard. Another way to copy a dashboard is to use <code>GetDashboard</code>, and then use the data returned within <code>DashboardBody</code> as the template for the new dashboard when you call <code>PutDashboard</code>.</p> <p>When you create a dashboard with <code>PutDashboard</code>, a good practice is to add a text widget at the top of the dashboard with a message that the dashboard was created by script and should not be changed in the console. This message could also point console users to the location of the <code>DashboardBody</code> script or the CloudFormation template used to create the dashboard.</p>"
     },
@@ -621,7 +640,8 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConcurrentModificationException"},
-        {"shape":"InternalServiceFault"}
+        {"shape":"InternalServiceFault"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified CloudWatch resource. Currently, the only CloudWatch resources that can be tagged are alarms and Contributor Insights rules.</p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values.</p> <p>Tags don't have any semantic meaning to Amazon Web Services and are interpreted strictly as strings of characters.</p> <p>You can use the <code>TagResource</code> action with an alarm that already has tags. If you specify a new tag key for the alarm, this tag is appended to the list of tags associated with the alarm. If you specify a tag key that is already associated with the alarm, the new tag value that you specify replaces the previous value for that tag.</p> <p>You can associate as many as 50 tags with a CloudWatch resource.</p>"
     },
@@ -640,7 +660,8 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConcurrentModificationException"},
-        {"shape":"InternalServiceFault"}
+        {"shape":"InternalServiceFault"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Removes one or more tags from the specified resource.</p>"
     }
@@ -675,6 +696,43 @@
       "max":1600,
       "min":1
     },
+    "AlarmContributor":{
+      "type":"structure",
+      "required":[
+        "ContributorId",
+        "ContributorAttributes",
+        "StateReason"
+      ],
+      "members":{
+        "ContributorId":{
+          "shape":"ContributorId",
+          "documentation":"<p>The unique identifier for this alarm contributor.</p>"
+        },
+        "ContributorAttributes":{
+          "shape":"ContributorAttributes",
+          "documentation":"<p>A map of attributes that describe the contributor, such as metric dimensions and other identifying characteristics.</p>"
+        },
+        "StateReason":{
+          "shape":"StateReason",
+          "documentation":"<p>An explanation for the contributor's current state, providing context about why it is in its current condition.</p>"
+        },
+        "StateTransitionedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the contributor last transitioned to its current state.</p>"
+        }
+      },
+      "documentation":"<p>Represents an individual contributor to a multi-timeseries alarm, containing information about a specific time series and its contribution to the alarm's state.</p>",
+      "xmlOrder":[
+        "ContributorId",
+        "ContributorAttributes",
+        "StateReason",
+        "StateTransitionedTimestamp"
+      ]
+    },
+    "AlarmContributors":{
+      "type":"list",
+      "member":{"shape":"AlarmContributor"}
+    },
     "AlarmDescription":{
       "type":"string",
       "max":1024,
@@ -687,6 +745,10 @@
           "shape":"AlarmName",
           "documentation":"<p>The descriptive name for the alarm.</p>"
         },
+        "AlarmContributorId":{
+          "shape":"ContributorId",
+          "documentation":"<p>The unique identifier of the alarm contributor associated with this history item, if applicable.</p>"
+        },
         "AlarmType":{
           "shape":"AlarmType",
           "documentation":"<p>The type of alarm, either metric alarm or composite alarm.</p>"
@@ -706,6 +768,10 @@
         "HistoryData":{
           "shape":"HistoryData",
           "documentation":"<p>Data about the alarm, in JSON format.</p>"
+        },
+        "AlarmContributorAttributes":{
+          "shape":"ContributorAttributes",
+          "documentation":"<p>A map of attributes that describe the alarm contributor associated with this history item, providing context about the contributor's characteristics at the time of the event.</p>"
         }
       },
       "documentation":"<p>Represents the history of a specific alarm.</p>"
@@ -852,6 +918,16 @@
       "type":"list",
       "member":{"shape":"AnomalyDetector"}
     },
+    "AttributeName":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "AttributeValue":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "AwsQueryErrorMessage":{"type":"string"},
     "BatchFailures":{
       "type":"list",
@@ -978,8 +1054,7 @@
     },
     "ConcurrentModificationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>More than one process tried to modify a resource at the same time.</p>",
       "error":{
         "code":"ConcurrentModificationException",
@@ -988,6 +1063,25 @@
       },
       "exception":true
     },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>This operation attempted to create a resource that already exists.</p>",
+      "exception":true
+    },
+    "ContributorAttributes":{
+      "type":"map",
+      "key":{"shape":"AttributeName"},
+      "value":{"shape":"AttributeValue"},
+      "max":30
+    },
+    "ContributorId":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "Counts":{
       "type":"list",
       "member":{"shape":"DatapointValue"}
@@ -1188,8 +1282,7 @@
     },
     "DeleteAnomalyDetectorOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDashboardsInput":{
       "type":"structure",
@@ -1203,8 +1296,7 @@
     },
     "DeleteDashboardsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInsightRulesInput":{
       "type":"structure",
@@ -1237,7 +1329,34 @@
     },
     "DeleteMetricStreamOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DescribeAlarmContributorsInput":{
+      "type":"structure",
+      "required":["AlarmName"],
       "members":{
+        "AlarmName":{
+          "shape":"AlarmName",
+          "documentation":"<p>The name of the alarm for which to retrieve contributor information.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token returned by a previous call to indicate that there is more data available.</p>"
+        }
+      }
+    },
+    "DescribeAlarmContributorsOutput":{
+      "type":"structure",
+      "required":["AlarmContributors"],
+      "members":{
+        "AlarmContributors":{
+          "shape":"AlarmContributors",
+          "documentation":"<p>A list of alarm contributors that provide details about the individual time series contributing to the alarm's state.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token that marks the start of the next batch of returned results.</p>"
+        }
       }
     },
     "DescribeAlarmHistoryInput":{
@@ -1247,6 +1366,10 @@
           "shape":"AlarmName",
           "documentation":"<p>The name of the alarm.</p>"
         },
+        "AlarmContributorId":{
+          "shape":"ContributorId",
+          "documentation":"<p>The unique identifier of a specific alarm contributor to filter the alarm history results.</p>"
+        },
         "AlarmTypes":{
           "shape":"AlarmTypes",
           "documentation":"<p>Use this parameter to specify whether you want the operation to return metric alarms or composite alarms. If you omit this parameter, only metric alarms are returned.</p>"
@@ -1782,7 +1905,7 @@
         },
         "StartTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time stamp indicating the earliest data to be returned.</p> <p>The value specified is inclusive; results include data points with the specified time stamp. </p> <p>CloudWatch rounds the specified time stamp as follows:</p> <ul> <li> <p>Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.</p> </li> <li> <p>Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.</p> </li> <li> <p>Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.</p> </li> </ul> <p>If you set <code>Period</code> to 5, 10, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15. </p> <p>For better performance, specify <code>StartTime</code> and <code>EndTime</code> values that align with the value of the metric's <code>Period</code> and sync up with the beginning and end of an hour. For example, if the <code>Period</code> of a metric is 5 minutes, specifying 12:05 or 12:30 as <code>StartTime</code> can get a faster response from CloudWatch than setting 12:07 or 12:29 as the <code>StartTime</code>.</p>"
+          "documentation":"<p>The time stamp indicating the earliest data to be returned.</p> <p>The value specified is inclusive; results include data points with the specified time stamp. </p> <p>CloudWatch rounds the specified time stamp as follows:</p> <ul> <li> <p>Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.</p> </li> <li> <p>Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.</p> </li> <li> <p>Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.</p> </li> </ul> <p>If you set <code>Period</code> to 5, 10, 20, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, 20-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15. </p> <p>For better performance, specify <code>StartTime</code> and <code>EndTime</code> values that align with the value of the metric's <code>Period</code> and sync up with the beginning and end of an hour. For example, if the <code>Period</code> of a metric is 5 minutes, specifying 12:05 or 12:30 as <code>StartTime</code> can get a faster response from CloudWatch than setting 12:07 or 12:29 as the <code>StartTime</code>.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
@@ -1849,7 +1972,7 @@
         },
         "StartTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time stamp that determines the first data point to return. Start times are evaluated relative to the time that CloudWatch receives the request.</p> <p>The value specified is inclusive; results include data points with the specified time stamp. In a raw HTTP query, the time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z).</p> <p>CloudWatch rounds the specified time stamp as follows:</p> <ul> <li> <p>Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.</p> </li> <li> <p>Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.</p> </li> <li> <p>Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.</p> </li> </ul> <p>If you set <code>Period</code> to 5, 10, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15. </p>"
+          "documentation":"<p>The time stamp that determines the first data point to return. Start times are evaluated relative to the time that CloudWatch receives the request.</p> <p>The value specified is inclusive; results include data points with the specified time stamp. In a raw HTTP query, the time stamp must be in ISO 8601 UTC format (for example, 2016-10-03T23:00:00Z).</p> <p>CloudWatch rounds the specified time stamp as follows:</p> <ul> <li> <p>Start time less than 15 days ago - Round down to the nearest whole minute. For example, 12:32:34 is rounded down to 12:32:00.</p> </li> <li> <p>Start time between 15 and 63 days ago - Round down to the nearest 5-minute clock interval. For example, 12:32:34 is rounded down to 12:30:00.</p> </li> <li> <p>Start time greater than 63 days ago - Round down to the nearest 1-hour clock interval. For example, 12:32:34 is rounded down to 12:00:00.</p> </li> </ul> <p>If you set <code>Period</code> to 5, 10, 20, or 30, the start time of your request is rounded down to the nearest time that corresponds to even 5-, 10-, 20-, or 30-second divisions of a minute. For example, if you make a query at (HH:mm:ss) 01:05:23 for the previous 10-second period, the start time of your request is rounded down and you receive data from 01:05:10 to 01:05:20. If you make a query at 15:07:17 for the previous 5 minutes of data, using a period of 5 seconds, you receive data timestamped between 15:02:15 and 15:07:15. </p>"
         },
         "EndTime":{
           "shape":"Timestamp",
@@ -1857,7 +1980,7 @@
         },
         "Period":{
           "shape":"Period",
-          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> call that includes a <code>StorageResolution</code> of 1 second.</p> <p>If the <code>StartTime</code> parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:</p> <ul> <li> <p>Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).</p> </li> <li> <p>Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).</p> </li> <li> <p>Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).</p> </li> </ul>"
+          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 20, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> call that includes a <code>StorageResolution</code> of 1 second.</p> <p>If the <code>StartTime</code> parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:</p> <ul> <li> <p>Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).</p> </li> <li> <p>Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).</p> </li> <li> <p>Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).</p> </li> </ul>"
         },
         "Statistics":{
           "shape":"Statistics",
@@ -1982,7 +2105,9 @@
       "enum":[
         "ConfigurationUpdate",
         "StateUpdate",
-        "Action"
+        "Action",
+        "AlarmContributorStateUpdate",
+        "AlarmContributorAction"
       ]
     },
     "HistorySummary":{
@@ -2020,6 +2145,10 @@
         "ManagedRule":{
           "shape":"InsightRuleIsManaged",
           "documentation":"<p> An optional built-in rule that Amazon Web Services manages. </p>"
+        },
+        "ApplyOnTransformedLogs":{
+          "shape":"InsightRuleOnTransformedLogs",
+          "documentation":"<p>Displays whether the rule is evaluated on the transformed versions of logs, for log groups that have <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html\">Log transformation</a> enabled. If this is <code>false</code>, log events are evaluated before they are transformed.</p>"
         }
       },
       "documentation":"<p>This structure contains the definition for a Contributor Insights rule. For more information about this rule, see<a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html\"> Using Constributor Insights to analyze high-cardinality data</a> in the <i>Amazon CloudWatch User Guide</i>.</p>"
@@ -2159,6 +2288,7 @@
       "type":"list",
       "member":{"shape":"InsightRuleName"}
     },
+    "InsightRuleOnTransformedLogs":{"type":"boolean"},
     "InsightRuleOrderBy":{
       "type":"string",
       "max":32,
@@ -2274,8 +2404,7 @@
     "LastModified":{"type":"timestamp"},
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation exceeded one or more limits.</p>",
       "error":{
         "code":"LimitExceededException",
@@ -2401,7 +2530,7 @@
         },
         "Dimensions":{
           "shape":"DimensionFilters",
-          "documentation":"<p>The dimensions to filter against. Only the dimensions that match exactly will be returned.</p>"
+          "documentation":"<p>The dimensions to filter against. Only the dimension with names that match exactly will be returned. If you specify one dimension name and a metric has that dimension and also other dimensions, it will be returned.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2778,7 +2907,7 @@
         },
         "Period":{
           "shape":"Period",
-          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> operation that includes a <code>StorageResolution of 1 second</code>.</p>"
+          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 20, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> operation that includes a <code>StorageResolution of 1 second</code>.</p>"
         },
         "AccountId":{
           "shape":"AccountId",
@@ -2908,7 +3037,7 @@
         },
         "Period":{
           "shape":"Period",
-          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> call that includes a <code>StorageResolution</code> of 1 second.</p> <p>If the <code>StartTime</code> parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:</p> <ul> <li> <p>Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).</p> </li> <li> <p>Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).</p> </li> <li> <p>Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).</p> </li> </ul>"
+          "documentation":"<p>The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 20, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a <code>PutMetricData</code> call that includes a <code>StorageResolution</code> of 1 second.</p> <p>If the <code>StartTime</code> parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time range is returned:</p> <ul> <li> <p>Start time between 3 hours and 15 days ago - Use a multiple of 60 seconds (1 minute).</p> </li> <li> <p>Start time between 15 and 63 days ago - Use a multiple of 300 seconds (5 minutes).</p> </li> <li> <p>Start time greater than 63 days ago - Use a multiple of 3600 seconds (1 hour).</p> </li> </ul>"
         },
         "Stat":{
           "shape":"Stat",
@@ -3159,8 +3288,7 @@
     },
     "PutAnomalyDetectorOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutCompositeAlarmInput":{
       "type":"structure",
@@ -3175,7 +3303,7 @@
         },
         "AlarmActions":{
           "shape":"ResourceList",
-          "documentation":"<p>The actions to execute when this alarm transitions to the <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Name (ARN).</p> <p>Valid Values: ]</p> <p> <b>Amazon SNS actions:</b> </p> <p> <code>arn:aws:sns:<i>region</i>:<i>account-id</i>:<i>sns-topic-name</i> </code> </p> <p> <b>Lambda actions:</b> </p> <ul> <li> <p>Invoke the latest version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i> </code> </p> </li> <li> <p>Invoke a specific version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>version-number</i> </code> </p> </li> <li> <p>Invoke a function by using an alias Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>alias-name</i> </code> </p> </li> </ul> <p> <b>Systems Manager actions:</b> </p> <p> <code>arn:aws:ssm:<i>region</i>:<i>account-id</i>:opsitem:<i>severity</i> </code> </p> <p> <b>Start a Amazon Q Developer operational investigation</b> </p> <p> <code>arn:aws:aiops:<i>region</i>:<i>account-id</i>:investigation-group:<i>ingestigation-group-id</i> </code> </p>"
+          "documentation":"<p>The actions to execute when this alarm transitions to the <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Name (ARN).</p> <p>Valid Values: ]</p> <p> <b>Amazon SNS actions:</b> </p> <p> <code>arn:aws:sns:<i>region</i>:<i>account-id</i>:<i>sns-topic-name</i> </code> </p> <p> <b>Lambda actions:</b> </p> <ul> <li> <p>Invoke the latest version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i> </code> </p> </li> <li> <p>Invoke a specific version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>version-number</i> </code> </p> </li> <li> <p>Invoke a function by using an alias Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>alias-name</i> </code> </p> </li> </ul> <p> <b>Systems Manager actions:</b> </p> <p> <code>arn:aws:ssm:<i>region</i>:<i>account-id</i>:opsitem:<i>severity</i> </code> </p> <p> <b>Start a Amazon Q Developer operational investigation</b> </p> <p> <code>arn:aws:aiops:<i>region</i>:<i>account-id</i>:investigation-group:<i>investigation-group-id</i> </code> </p>"
         },
         "AlarmDescription":{
           "shape":"AlarmDescription",
@@ -3263,13 +3391,16 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>A list of key-value pairs to associate with the Contributor Insights rule. You can associate as many as 50 tags with a rule.</p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only the resources that have certain tag values.</p> <p>To be able to associate tags with a rule, you must have the <code>cloudwatch:TagResource</code> permission in addition to the <code>cloudwatch:PutInsightRule</code> permission.</p> <p>If you are using this operation to update an existing Contributor Insights rule, any tags you specify in this parameter are ignored. To change the tags of an existing rule, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_TagResource.html\">TagResource</a>.</p>"
+        },
+        "ApplyOnTransformedLogs":{
+          "shape":"InsightRuleOnTransformedLogs",
+          "documentation":"<p>Specify <code>true</code> to have this rule evaluate log events after they have been transformed by <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html\">Log transformation</a>. If you specify <code>true</code>, then the log events in log groups that have transformers will be evaluated by Contributor Insights after being transformed. Log groups that don't have transformers will still have their original log events evaluated by Contributor Insights.</p> <p>The default is <code>false</code> </p> <note> <p>If a log group has a transformer, and transformation fails for some log events, those log events won't be evaluated by Contributor Insights. For information about investigating log transformation failures, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Transformation-Errors-Metrics.html\">Transformation metrics and errors</a>.</p> </note>"
         }
       }
     },
     "PutInsightRuleOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutManagedInsightRulesInput":{
       "type":"structure",
@@ -3316,7 +3447,7 @@
         },
         "AlarmActions":{
           "shape":"ResourceList",
-          "documentation":"<p>The actions to execute when this alarm transitions to the <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid values:</p> <p> <b>EC2 actions:</b> </p> <ul> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:stop</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:terminate</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:reboot</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:recover</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Stop/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Terminate/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Reboot/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Recover/1.0</code> </p> </li> </ul> <p> <b>Autoscaling action:</b> </p> <ul> <li> <p> <code>arn:aws:autoscaling:<i>region</i>:<i>account-id</i>:scalingPolicy:<i>policy-id</i>:autoScalingGroupName/<i>group-friendly-name</i>:policyName/<i>policy-friendly-name</i> </code> </p> </li> </ul> <p> <b>Lambda actions:</b> </p> <ul> <li> <p>Invoke the latest version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i> </code> </p> </li> <li> <p>Invoke a specific version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>version-number</i> </code> </p> </li> <li> <p>Invoke a function by using an alias Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>alias-name</i> </code> </p> </li> </ul> <p> <b>SNS notification action:</b> </p> <ul> <li> <p> <code>arn:aws:sns:<i>region</i>:<i>account-id</i>:<i>sns-topic-name</i> </code> </p> </li> </ul> <p> <b>SSM integration actions:</b> </p> <ul> <li> <p> <code>arn:aws:ssm:<i>region</i>:<i>account-id</i>:opsitem:<i>severity</i>#CATEGORY=<i>category-name</i> </code> </p> </li> <li> <p> <code>arn:aws:ssm-incidents::<i>account-id</i>:responseplan/<i>response-plan-name</i> </code> </p> </li> </ul> <p> <b>Start a Amazon Q Developer operational investigation</b> </p> <p> <code>arn:aws:aiops:<i>region</i>:<i>account-id</i>:investigation-group:<i>ingestigation-group-id</i> </code> </p>"
+          "documentation":"<p>The actions to execute when this alarm transitions to the <code>ALARM</code> state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid values:</p> <p> <b>EC2 actions:</b> </p> <ul> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:stop</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:terminate</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:reboot</code> </p> </li> <li> <p> <code>arn:aws:automate:<i>region</i>:ec2:recover</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Stop/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Terminate/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Reboot/1.0</code> </p> </li> <li> <p> <code>arn:aws:swf:<i>region</i>:<i>account-id</i>:action/actions/AWS_EC2.InstanceId.Recover/1.0</code> </p> </li> </ul> <p> <b>Autoscaling action:</b> </p> <ul> <li> <p> <code>arn:aws:autoscaling:<i>region</i>:<i>account-id</i>:scalingPolicy:<i>policy-id</i>:autoScalingGroupName/<i>group-friendly-name</i>:policyName/<i>policy-friendly-name</i> </code> </p> </li> </ul> <p> <b>Lambda actions:</b> </p> <ul> <li> <p>Invoke the latest version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i> </code> </p> </li> <li> <p>Invoke a specific version of a Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>version-number</i> </code> </p> </li> <li> <p>Invoke a function by using an alias Lambda function: <code>arn:aws:lambda:<i>region</i>:<i>account-id</i>:function:<i>function-name</i>:<i>alias-name</i> </code> </p> </li> </ul> <p> <b>SNS notification action:</b> </p> <ul> <li> <p> <code>arn:aws:sns:<i>region</i>:<i>account-id</i>:<i>sns-topic-name</i> </code> </p> </li> </ul> <p> <b>SSM integration actions:</b> </p> <ul> <li> <p> <code>arn:aws:ssm:<i>region</i>:<i>account-id</i>:opsitem:<i>severity</i>#CATEGORY=<i>category-name</i> </code> </p> </li> <li> <p> <code>arn:aws:ssm-incidents::<i>account-id</i>:responseplan/<i>response-plan-name</i> </code> </p> </li> </ul> <p> <b>Start a Amazon Q Developer operational investigation</b> </p> <p> <code>arn:aws:aiops:<i>region</i>:<i>account-id</i>:investigation-group:<i>investigation-group-id</i> </code> </p>"
         },
         "InsufficientDataActions":{
           "shape":"ResourceList",
@@ -3344,7 +3475,7 @@
         },
         "Period":{
           "shape":"Period",
-          "documentation":"<p>The length, in seconds, used each time the metric specified in <code>MetricName</code> is evaluated. Valid values are 10, 30, and any multiple of 60.</p> <p> <code>Period</code> is required for alarms based on static thresholds. If you are creating an alarm based on a metric math expression, you specify the period for each metric within the objects in the <code>Metrics</code> array.</p> <p>Be sure to specify 10 or 30 only for metrics that are stored by a <code>PutMetricData</code> call with a <code>StorageResolution</code> of 1. If you specify a period of 10 or 30 for a metric that does not have sub-minute resolution, the alarm still attempts to gather data at the period rate that you specify. In this case, it does not receive data for the attempts that do not correspond to a one-minute data resolution, and the alarm might often lapse into INSUFFICENT_DATA status. Specifying 10 or 30 also sets this alarm as a high-resolution alarm, which has a higher charge than other alarms. For more information about pricing, see <a href=\"https://aws.amazon.com/cloudwatch/pricing/\">Amazon CloudWatch Pricing</a>.</p> <p>An alarm's total current evaluation period can be no longer than one day, so <code>Period</code> multiplied by <code>EvaluationPeriods</code> cannot be more than 86,400 seconds.</p>"
+          "documentation":"<p>The length, in seconds, used each time the metric specified in <code>MetricName</code> is evaluated. Valid values are 10, 20, 30, and any multiple of 60.</p> <p> <code>Period</code> is required for alarms based on static thresholds. If you are creating an alarm based on a metric math expression, you specify the period for each metric within the objects in the <code>Metrics</code> array.</p> <p>Be sure to specify 10, 20, or 30 only for metrics that are stored by a <code>PutMetricData</code> call with a <code>StorageResolution</code> of 1. If you specify a period of 10, 20, or 30 for a metric that does not have sub-minute resolution, the alarm still attempts to gather data at the period rate that you specify. In this case, it does not receive data for the attempts that do not correspond to a one-minute data resolution, and the alarm might often lapse into INSUFFICENT_DATA status. Specifying 10, 20, or 30 also sets this alarm as a high-resolution alarm, which has a higher charge than other alarms. For more information about pricing, see <a href=\"https://aws.amazon.com/cloudwatch/pricing/\">Amazon CloudWatch Pricing</a>.</p> <p>An alarm's total current evaluation period can be no longer than seven days, so <code>Period</code> multiplied by <code>EvaluationPeriods</code> can't be more than 604,800 seconds. For alarms with a period of less than one hour (3,600 seconds), the total evaluation period can't be longer than one day (86,400 seconds).</p>"
         },
         "Unit":{
           "shape":"StandardUnit",
@@ -3352,7 +3483,7 @@
         },
         "EvaluationPeriods":{
           "shape":"EvaluationPeriods",
-          "documentation":"<p>The number of periods over which data is compared to the specified threshold. If you are setting an alarm that requires that a number of consecutive data points be breaching to trigger the alarm, this value specifies that number. If you are setting an \"M out of N\" alarm, this value is the N.</p> <p>An alarm's total current evaluation period can be no longer than one day, so this number multiplied by <code>Period</code> cannot be more than 86,400 seconds.</p>"
+          "documentation":"<p>The number of periods over which data is compared to the specified threshold. If you are setting an alarm that requires that a number of consecutive data points be breaching to trigger the alarm, this value specifies that number. If you are setting an \"M out of N\" alarm, this value is the N.</p>"
         },
         "DatapointsToAlarm":{
           "shape":"DatapointsToAlarm",
@@ -3406,7 +3537,7 @@
         },
         "StrictEntityValidation":{
           "shape":"StrictEntityValidation",
-          "documentation":"<p>Whether to accept valid metric data when an invalid entity is sent.</p> <ul> <li> <p>When set to <code>true</code>: Any validation error (for entity or metric data) will fail the entire request, and no data will be ingested. The failed operation will return a 400 result with the error.</p> </li> <li> <p>When set to <code>false</code>: Validation errors in the entity will not associate the metric with the entity, but the metric data will still be accepted and ingested. Validation errors in the metric data will fail the entire request, and no data will be ingested.</p> <p>In the case of an invalid entity, the operation will return a <code>200</code> status, but an additional response header will contain information about the validation errors. The new header, <code>X-Amzn-Failure-Message</code> is an enumeration of the following values:</p> <ul> <li> <p> <code>InvalidEntity</code> - The provided entity is invalid.</p> </li> <li> <p> <code>InvalidKeyAttributes</code> - The provided <code>KeyAttributes</code> of an entity is invalid.</p> </li> <li> <p> <code>InvalidAttributes</code> - The provided <code>Attributes</code> of an entity is invalid.</p> </li> <li> <p> <code>InvalidTypeValue</code> - The provided <code>Type</code> in the <code>KeyAttributes</code> of an entity is invalid.</p> </li> <li> <p> <code>EntitySizeTooLarge</code> - The number of <code>EntityMetricData</code> objects allowed is 2.</p> </li> <li> <p> <code>MissingRequiredFields</code> - There are missing required fields in the <code>KeyAttributes</code> for the provided <code>Type</code>.</p> </li> </ul> <p>For details of the requirements for specifying an entity, see <a href=\"https://docs.aws.amazon.com/adding-your-own-related-telemetry.html\">How to add related information to telemetry</a> in the <i>CloudWatch User Guide</i>.</p> </li> </ul> <p>This parameter is <i>required</i> when <code>EntityMetricData</code> is included.</p>",
+          "documentation":"<p>Whether to accept valid metric data when an invalid entity is sent.</p> <ul> <li> <p>When set to <code>true</code>: Any validation error (for entity or metric data) will fail the entire request, and no data will be ingested. The failed operation will return a 400 result with the error.</p> </li> <li> <p>When set to <code>false</code>: Validation errors in the entity will not associate the metric with the entity, but the metric data will still be accepted and ingested. Validation errors in the metric data will fail the entire request, and no data will be ingested.</p> <p>In the case of an invalid entity, the operation will return a <code>200</code> status, but an additional response header will contain information about the validation errors. The new header, <code>X-Amzn-Failure-Message</code> is an enumeration of the following values:</p> <ul> <li> <p> <code>InvalidEntity</code> - The provided entity is invalid.</p> </li> <li> <p> <code>InvalidKeyAttributes</code> - The provided <code>KeyAttributes</code> of an entity is invalid.</p> </li> <li> <p> <code>InvalidAttributes</code> - The provided <code>Attributes</code> of an entity is invalid.</p> </li> <li> <p> <code>InvalidTypeValue</code> - The provided <code>Type</code> in the <code>KeyAttributes</code> of an entity is invalid.</p> </li> <li> <p> <code>EntitySizeTooLarge</code> - The number of <code>EntityMetricData</code> objects allowed is 2.</p> </li> <li> <p> <code>MissingRequiredFields</code> - There are missing required fields in the <code>KeyAttributes</code> for the provided <code>Type</code>.</p> </li> </ul> <p>For details of the requirements for specifying an entity, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/adding-your-own-related-telemetry.html\">How to add related information to telemetry</a> in the <i>CloudWatch User Guide</i>.</p> </li> </ul> <p>This parameter is <i>required</i> when <code>EntityMetricData</code> is included.</p>",
           "box":true
         }
       }
@@ -3640,8 +3771,7 @@
     },
     "StartMetricStreamsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Stat":{"type":"string"},
     "StateReason":{
@@ -3727,8 +3857,7 @@
     },
     "StopMetricStreamsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StorageResolution":{
       "type":"integer",
@@ -3786,8 +3915,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3830,8 +3958,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Values":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeartifact/2018-09-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codeartifact/2018-09-22/service-2.json 2.31.35-1/awscli/botocore/data/codeartifact/2018-09-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/codeartifact/2018-09-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeartifact/2018-09-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4256,8 +4256,7 @@
     },
     "TagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4303,8 +4302,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePackageGroupOriginConfigurationRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/paginators-1.json 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -68,6 +68,24 @@
       "limit_key": "maxResults",
       "output_token": "nextToken",
       "result_key": "ids"
+    },
+    "ListCommandExecutionsForSandbox": {
+      "input_token": "nextToken",
+      "limit_key": "maxResults",
+      "output_token": "nextToken",
+      "result_key": "commandExecutions"
+    },
+    "ListSandboxes": {
+      "input_token": "nextToken",
+      "limit_key": "maxResults",
+      "output_token": "nextToken",
+      "result_key": "ids"
+    },
+    "ListSandboxesForProject": {
+      "input_token": "nextToken",
+      "limit_key": "maxResults",
+      "output_token": "nextToken",
+      "result_key": "ids"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/service-2.json 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/codebuild/2016-10-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codebuild/2016-10-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,6 +53,19 @@
       ],
       "documentation":"<p>Gets information about one or more builds.</p>"
     },
+    "BatchGetCommandExecutions":{
+      "name":"BatchGetCommandExecutions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"BatchGetCommandExecutionsInput"},
+      "output":{"shape":"BatchGetCommandExecutionsOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"}
+      ],
+      "documentation":"<p>Gets information about the command executions.</p>"
+    },
     "BatchGetFleets":{
       "name":"BatchGetFleets",
       "http":{
@@ -105,6 +118,19 @@
       ],
       "documentation":"<p> Returns an array of reports. </p>"
     },
+    "BatchGetSandboxes":{
+      "name":"BatchGetSandboxes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"BatchGetSandboxesInput"},
+      "output":{"shape":"BatchGetSandboxesOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"}
+      ],
+      "documentation":"<p>Gets information about the sandbox status.</p>"
+    },
     "CreateFleet":{
       "name":"CreateFleet",
       "http":{
@@ -411,6 +437,20 @@
       ],
       "documentation":"<p>Gets a list of build identifiers for the specified build project, with each build identifier representing a single build.</p>"
     },
+    "ListCommandExecutionsForSandbox":{
+      "name":"ListCommandExecutionsForSandbox",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListCommandExecutionsForSandboxInput"},
+      "output":{"shape":"ListCommandExecutionsForSandboxOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Gets a list of command executions for a sandbox.</p>"
+    },
     "ListCuratedEnvironmentImages":{
       "name":"ListCuratedEnvironmentImages",
       "http":{
@@ -487,6 +527,33 @@
       ],
       "documentation":"<p> Returns a list of ARNs for the reports that belong to a <code>ReportGroup</code>. </p>"
     },
+    "ListSandboxes":{
+      "name":"ListSandboxes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListSandboxesInput"},
+      "output":{"shape":"ListSandboxesOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"}
+      ],
+      "documentation":"<p>Gets a list of sandboxes.</p>"
+    },
+    "ListSandboxesForProject":{
+      "name":"ListSandboxesForProject",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListSandboxesForProjectInput"},
+      "output":{"shape":"ListSandboxesForProjectOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Gets a list of sandboxes for a given project.</p>"
+    },
     "ListSharedProjects":{
       "name":"ListSharedProjects",
       "http":{
@@ -598,6 +665,49 @@
       ],
       "documentation":"<p>Starts a batch build for a project.</p>"
     },
+    "StartCommandExecution":{
+      "name":"StartCommandExecution",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartCommandExecutionInput"},
+      "output":{"shape":"StartCommandExecutionOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Starts a command execution.</p>"
+    },
+    "StartSandbox":{
+      "name":"StartSandbox",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartSandboxInput"},
+      "output":{"shape":"StartSandboxOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccountSuspendedException"}
+      ],
+      "documentation":"<p>Starts a sandbox.</p>"
+    },
+    "StartSandboxConnection":{
+      "name":"StartSandboxConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartSandboxConnectionInput"},
+      "output":{"shape":"StartSandboxConnectionOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Starts a sandbox connection.</p>"
+    },
     "StopBuild":{
       "name":"StopBuild",
       "http":{
@@ -626,6 +736,20 @@
       ],
       "documentation":"<p>Stops a running batch build.</p>"
     },
+    "StopSandbox":{
+      "name":"StopSandbox",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StopSandboxInput"},
+      "output":{"shape":"StopSandboxOutput"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Stops a sandbox.</p>"
+    },
     "UpdateFleet":{
       "name":"UpdateFleet",
       "http":{
@@ -702,11 +826,16 @@
   "shapes":{
     "AccountLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon Web Services service limit was exceeded for the calling Amazon Web Services account.</p>",
       "exception":true
     },
+    "AccountSuspendedException":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The CodeBuild access has been suspended for the calling Amazon Web Services account.</p>",
+      "exception":true
+    },
     "ArtifactNamespace":{
       "type":"string",
       "enum":[
@@ -830,6 +959,36 @@
         }
       }
     },
+    "BatchGetCommandExecutionsInput":{
+      "type":"structure",
+      "required":[
+        "sandboxId",
+        "commandExecutionIds"
+      ],
+      "members":{
+        "sandboxId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxId</code> or <code>sandboxArn</code>.</p>"
+        },
+        "commandExecutionIds":{
+          "shape":"CommandExecutionIds",
+          "documentation":"<p>A comma separated list of <code>commandExecutionIds</code>.</p>"
+        }
+      }
+    },
+    "BatchGetCommandExecutionsOutput":{
+      "type":"structure",
+      "members":{
+        "commandExecutions":{
+          "shape":"CommandExecutions",
+          "documentation":"<p>Information about the requested command executions.</p>"
+        },
+        "commandExecutionsNotFound":{
+          "shape":"CommandExecutionIds",
+          "documentation":"<p>The IDs of command executions for which information could not be found.</p>"
+        }
+      }
+    },
     "BatchGetFleetsInput":{
       "type":"structure",
       "required":["names"],
@@ -922,6 +1081,29 @@
         }
       }
     },
+    "BatchGetSandboxesInput":{
+      "type":"structure",
+      "required":["ids"],
+      "members":{
+        "ids":{
+          "shape":"SandboxIds",
+          "documentation":"<p>A comma separated list of <code>sandboxIds</code> or <code>sandboxArns</code>.</p>"
+        }
+      }
+    },
+    "BatchGetSandboxesOutput":{
+      "type":"structure",
+      "members":{
+        "sandboxes":{
+          "shape":"Sandboxes",
+          "documentation":"<p>Information about the requested sandboxes.</p>"
+        },
+        "sandboxesNotFound":{
+          "shape":"SandboxIds",
+          "documentation":"<p>The IDs of sandboxes for which information could not be found.</p>"
+        }
+      }
+    },
     "BatchReportModeType":{
       "type":"string",
       "enum":[
@@ -1236,6 +1418,10 @@
         "debugSessionEnabled":{
           "shape":"WrapperBoolean",
           "documentation":"<p>Specifies if session debugging is enabled for this batch build. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html\">Viewing a running build in Session Manager</a>. Batch session debugging is not supported for matrix batch builds.</p>"
+        },
+        "reportArns":{
+          "shape":"BuildReportArns",
+          "documentation":"<p>An array that contains the ARNs of reports created by merging reports from builds associated with this batch build.</p>"
         }
       },
       "documentation":"<p>Contains information about a batch build.</p>"
@@ -1584,6 +1770,75 @@
       "type":"list",
       "member":{"shape":"CodeCoverage"}
     },
+    "CommandExecution":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the command execution.</p>"
+        },
+        "sandboxId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxId</code>.</p>"
+        },
+        "submitTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the command execution process was initially submitted, expressed in Unix time format.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the command execution process started, expressed in Unix time format.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the command execution process ended, expressed in Unix time format.</p>"
+        },
+        "status":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The status of the command execution.</p>"
+        },
+        "command":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The command that needs to be executed.</p>"
+        },
+        "type":{
+          "shape":"CommandType",
+          "documentation":"<p>The command type.</p>"
+        },
+        "exitCode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The exit code to return upon completion.</p>"
+        },
+        "standardOutputContent":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The text written by the command to stdout.</p>"
+        },
+        "standardErrContent":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The text written by the command to stderr.</p>"
+        },
+        "logs":{"shape":"LogsLocation"},
+        "sandboxArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxArn</code>.</p>"
+        }
+      },
+      "documentation":"<p>Contains command execution information.</p>"
+    },
+    "CommandExecutionIds":{
+      "type":"list",
+      "member":{"shape":"NonEmptyString"},
+      "max":100,
+      "min":1
+    },
+    "CommandExecutions":{
+      "type":"list",
+      "member":{"shape":"CommandExecution"}
+    },
+    "CommandType":{
+      "type":"string",
+      "enum":["SHELL"]
+    },
     "ComputeConfiguration":{
       "type":"structure",
       "members":{
@@ -1602,9 +1857,13 @@
         "machineType":{
           "shape":"MachineType",
           "documentation":"<p>The machine type of the instance type included in your fleet.</p>"
+        },
+        "instanceType":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The EC2 instance type to be launched in your fleet.</p>"
         }
       },
-      "documentation":"<p>Contains compute attributes. These attributes only need be specified when your project's or fleet's <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code>.</p>"
+      "documentation":"<p>Contains compute attributes. These attributes only need be specified when your project's or fleet's <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code> or <code>CUSTOM_INSTANCE_TYPE</code>.</p>"
     },
     "ComputeType":{
       "type":"string",
@@ -1619,7 +1878,8 @@
         "BUILD_LAMBDA_4GB",
         "BUILD_LAMBDA_8GB",
         "BUILD_LAMBDA_10GB",
-        "ATTRIBUTE_BASED_COMPUTE"
+        "ATTRIBUTE_BASED_COMPUTE",
+        "CUSTOM_INSTANCE_TYPE"
       ]
     },
     "ComputeTypesAllowed":{
@@ -1649,11 +1909,11 @@
         },
         "computeType":{
           "shape":"ComputeType",
-          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
+          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>CUSTOM_INSTANCE_TYPE</code>: Specify the instance type for your compute fleet. For a list of supported instance types, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.instance-types\">Supported instance families </a> in the <i>CodeBuild User Guide</i>.</p> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
         },
         "computeConfiguration":{
           "shape":"ComputeConfiguration",
-          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code>.</p>"
+          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code> or <code>CUSTOM_INSTANCE_TYPE</code>.</p>"
         },
         "scalingConfiguration":{
           "shape":"ScalingConfigurationInput",
@@ -1853,7 +2113,7 @@
         },
         "buildType":{
           "shape":"WebhookBuildType",
-          "documentation":"<p>Specifies the type of build this webhook will trigger.</p>"
+          "documentation":"<p>Specifies the type of build this webhook will trigger.</p> <note> <p> <code>RUNNER_BUILDKITE_BUILD</code> is only available for <code>NO_SOURCE</code> source type projects configured for Buildkite runner builds. For more information about CodeBuild-hosted Buildkite runner builds, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/sample-runner-buildkite.html\">Tutorial: Configure a CodeBuild-hosted Buildkite runner</a> in the <i>CodeBuild user guide</i>.</p> </note>"
         },
         "manualCreation":{
           "shape":"WrapperBoolean",
@@ -1862,6 +2122,10 @@
         "scopeConfiguration":{
           "shape":"ScopeConfiguration",
           "documentation":"<p>The scope configuration for global or organization webhooks.</p> <note> <p>Global or organization webhooks are only available for GitHub and Github Enterprise webhooks.</p> </note>"
+        },
+        "pullRequestBuildPolicy":{
+          "shape":"PullRequestBuildPolicy",
+          "documentation":"<p>A PullRequestBuildPolicy object that defines comment-based approval requirements for triggering builds on pull requests. This policy helps control when automated builds are executed based on contributor permissions and approval workflows.</p>"
         }
       }
     },
@@ -1931,8 +2195,7 @@
     },
     "DeleteFleetOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectInput":{
       "type":"structure",
@@ -1946,8 +2209,7 @@
     },
     "DeleteProjectOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteReportGroupInput":{
       "type":"structure",
@@ -1965,8 +2227,7 @@
     },
     "DeleteReportGroupOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteReportInput":{
       "type":"structure",
@@ -1980,8 +2241,7 @@
     },
     "DeleteReportOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourcePolicyInput":{
       "type":"structure",
@@ -1995,8 +2255,7 @@
     },
     "DeleteResourcePolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSourceCredentialsInput":{
       "type":"structure",
@@ -2029,8 +2288,7 @@
     },
     "DeleteWebhookOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeCodeCoveragesInput":{
       "type":"structure",
@@ -2114,6 +2372,39 @@
         }
       }
     },
+    "DockerServer":{
+      "type":"structure",
+      "required":["computeType"],
+      "members":{
+        "computeType":{
+          "shape":"ComputeType",
+          "documentation":"<p>Information about the compute resources the docker server uses. Available values include:</p> <ul> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for your docker server.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for your docker server.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for your docker server.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 64 GiB memory and 32 vCPUs for your docker server.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 128 GiB memory and 64 vCPUs for your docker server.</p> </li> </ul>"
+        },
+        "securityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>A list of one or more security groups IDs.</p> <note> <p>Security groups configured for Docker servers should allow ingress network traffic from the VPC configured in the project. They should allow ingress on port 9876.</p> </note>"
+        },
+        "status":{
+          "shape":"DockerServerStatus",
+          "documentation":"<p>A DockerServerStatus object to use for this docker server.</p>"
+        }
+      },
+      "documentation":"<p>Contains docker server information.</p>"
+    },
+    "DockerServerStatus":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"String",
+          "documentation":"<p>The status of the docker server.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A message associated with the status of a docker server.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the status of the docker server.</p>"
+    },
     "EnvironmentImage":{
       "type":"structure",
       "members":{
@@ -2180,6 +2471,7 @@
         "LINUX_GPU_CONTAINER",
         "ARM_CONTAINER",
         "WINDOWS_SERVER_2019_CONTAINER",
+        "WINDOWS_SERVER_2022_CONTAINER",
         "LINUX_LAMBDA_CONTAINER",
         "ARM_LAMBDA_CONTAINER",
         "LINUX_EC2",
@@ -2289,11 +2581,11 @@
         },
         "computeType":{
           "shape":"ComputeType",
-          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
+          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>CUSTOM_INSTANCE_TYPE</code>: Specify the instance type for your compute fleet. For a list of supported instance types, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.instance-types\">Supported instance families </a> in the <i>CodeBuild User Guide</i>.</p> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
         },
         "computeConfiguration":{
           "shape":"ComputeConfiguration",
-          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code>.</p>"
+          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code> or <code>CUSTOM_INSTANCE_TYPE</code>.</p>"
         },
         "scalingConfiguration":{
           "shape":"ScalingConfigurationOutput",
@@ -2329,10 +2621,7 @@
       "max":100,
       "min":1
     },
-    "FleetCapacity":{
-      "type":"integer",
-      "min":1
-    },
+    "FleetCapacity":{"type":"integer"},
     "FleetContextCode":{
       "type":"string",
       "enum":[
@@ -2598,8 +2887,7 @@
     },
     "InvalidInputException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input value that was provided is not valid.</p>",
       "exception":true
     },
@@ -2615,8 +2903,7 @@
     },
     "InvalidateProjectCacheOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "KeyInput":{
       "type":"string",
@@ -2768,11 +3055,45 @@
         }
       }
     },
-    "ListCuratedEnvironmentImagesInput":{
+    "ListCommandExecutionsForSandboxInput":{
       "type":"structure",
+      "required":["sandboxId"],
       "members":{
+        "sandboxId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxId</code> or <code>sandboxArn</code>.</p>"
+        },
+        "maxResults":{
+          "shape":"PageSize",
+          "documentation":"<p>The maximum number of sandbox records to be retrieved.</p>"
+        },
+        "sortOrder":{
+          "shape":"SortOrderType",
+          "documentation":"<p>The order in which sandbox records should be retrieved.</p>"
+        },
+        "nextToken":{
+          "shape":"SensitiveString",
+          "documentation":"<p>The next token, if any, to get paginated results. You will get this value from previous execution of list sandboxes.</p>"
+        }
       }
     },
+    "ListCommandExecutionsForSandboxOutput":{
+      "type":"structure",
+      "members":{
+        "commandExecutions":{
+          "shape":"CommandExecutions",
+          "documentation":"<p>Information about the requested command executions.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Information about the next token to get paginated results.</p>"
+        }
+      }
+    },
+    "ListCuratedEnvironmentImagesInput":{
+      "type":"structure",
+      "members":{}
+    },
     "ListCuratedEnvironmentImagesOutput":{
       "type":"structure",
       "members":{
@@ -2953,6 +3274,71 @@
         }
       }
     },
+    "ListSandboxesForProjectInput":{
+      "type":"structure",
+      "required":["projectName"],
+      "members":{
+        "projectName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The CodeBuild project name.</p>"
+        },
+        "maxResults":{
+          "shape":"PageSize",
+          "documentation":"<p>The maximum number of sandbox records to be retrieved.</p>"
+        },
+        "sortOrder":{
+          "shape":"SortOrderType",
+          "documentation":"<p>The order in which sandbox records should be retrieved.</p>"
+        },
+        "nextToken":{
+          "shape":"SensitiveString",
+          "documentation":"<p>The next token, if any, to get paginated results. You will get this value from previous execution of list sandboxes.</p>"
+        }
+      }
+    },
+    "ListSandboxesForProjectOutput":{
+      "type":"structure",
+      "members":{
+        "ids":{
+          "shape":"SandboxIds",
+          "documentation":"<p>Information about the requested sandbox IDs.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Information about the next token to get paginated results.</p>"
+        }
+      }
+    },
+    "ListSandboxesInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"PageSize",
+          "documentation":"<p>The maximum number of sandbox records to be retrieved.</p>"
+        },
+        "sortOrder":{
+          "shape":"SortOrderType",
+          "documentation":"<p>The order in which sandbox records should be retrieved.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The next token, if any, to get paginated results. You will get this value from previous execution of list sandboxes.</p>"
+        }
+      }
+    },
+    "ListSandboxesOutput":{
+      "type":"structure",
+      "members":{
+        "ids":{
+          "shape":"SandboxIds",
+          "documentation":"<p>Information about the requested sandbox IDs.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>Information about the next token to get paginated results.</p>"
+        }
+      }
+    },
     "ListSharedProjectsInput":{
       "type":"structure",
       "members":{
@@ -3023,8 +3409,7 @@
     },
     "ListSourceCredentialsInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListSourceCredentialsOutput":{
       "type":"structure",
@@ -3125,8 +3510,7 @@
     },
     "OAuthProviderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There was a problem with the underlying OAuth provider.</p>",
       "exception":true
     },
@@ -3397,6 +3781,10 @@
         "modes":{
           "shape":"ProjectCacheModes",
           "documentation":"<p>An array of strings that specify the local cache modes. You can use one or more local cache modes at the same time. This is only used for <code>LOCAL</code> cache types.</p> <p>Possible values are:</p> <dl> <dt>LOCAL_SOURCE_CACHE</dt> <dd> <p>Caches Git metadata for primary and secondary sources. After the cache is created, subsequent builds pull only the change between commits. This mode is a good choice for projects with a clean working directory and a source that is a large Git repository. If you choose this option and your project does not use a Git repository (GitHub, GitHub Enterprise, or Bitbucket), the option is ignored. </p> </dd> <dt>LOCAL_DOCKER_LAYER_CACHE</dt> <dd> <p>Caches existing Docker layers. This mode is a good choice for projects that build or pull large Docker images. It can prevent the performance issues caused by pulling large Docker images down from the network. </p> <note> <ul> <li> <p>You can use a Docker layer cache in the Linux environment only. </p> </li> <li> <p>The <code>privileged</code> flag must be set so that your project has the required Docker permissions. </p> </li> <li> <p>You should consider the security implications before you use a Docker layer cache. </p> </li> </ul> </note> </dd> <dt>LOCAL_CUSTOM_CACHE</dt> <dd> <p>Caches directories you specify in the buildspec file. This mode is a good choice if your build scenario is not suited to one of the other three local cache modes. If you use a custom cache: </p> <ul> <li> <p>Only directories can be specified for caching. You cannot specify individual files. </p> </li> <li> <p>Symlinks are used to reference cached directories. </p> </li> <li> <p>Cached directories are linked to your build before it downloads its project sources. Cached items are overridden if a source item has the same name. Directories are specified using cache paths in the buildspec file. </p> </li> </ul> </dd> </dl>"
+        },
+        "cacheNamespace":{
+          "shape":"String",
+          "documentation":"<p>Defines the scope of the cache. You can use this namespace to share a cache across multiple projects. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/caching-s3.html#caching-s3-sharing\">Cache sharing between projects</a> in the <i>CodeBuild User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Information about the cache for the build project.</p>"
@@ -3420,7 +3808,7 @@
       "members":{
         "type":{
           "shape":"EnvironmentType",
-          "documentation":"<p>The type of build environment to use for related builds.</p> <ul> <li> <p>The environment type <code>ARM_CONTAINER</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), EU (Ireland), Asia Pacific (Mumbai), Asia Pacific (Tokyo), Asia Pacific (Sydney), and EU (Frankfurt).</p> </li> <li> <p>The environment type <code>LINUX_CONTAINER</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), Canada (Central), EU (Ireland), EU (London), EU (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), China (Beijing), and China (Ningxia).</p> </li> <li> <p>The environment type <code>LINUX_GPU_CONTAINER</code> is available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), Canada (Central), EU (Ireland), EU (London), EU (Frankfurt), Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney) , China (Beijing), and China (Ningxia).</p> </li> </ul> <ul> <li> <p>The environment types <code>ARM_LAMBDA_CONTAINER</code> and <code>LINUX_LAMBDA_CONTAINER</code> are available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), Asia Pacific (Mumbai), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), EU (Frankfurt), EU (Ireland), and South America (São Paulo).</p> </li> </ul> <ul> <li> <p>The environment types <code>WINDOWS_CONTAINER</code> and <code>WINDOWS_SERVER_2019_CONTAINER</code> are available only in regions US East (N. Virginia), US East (Ohio), US West (Oregon), and EU (Ireland).</p> </li> </ul> <note> <p>If you're using compute fleets during project creation, <code>type</code> will be ignored.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html\">Build environment compute types</a> in the <i>CodeBuild user guide</i>.</p>"
+          "documentation":"<p>The type of build environment to use for related builds.</p> <note> <p>If you're using compute fleets during project creation, <code>type</code> will be ignored.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html\">Build environment compute types</a> in the <i>CodeBuild user guide</i>.</p>"
         },
         "image":{
           "shape":"NonEmptyString",
@@ -3457,6 +3845,10 @@
         "imagePullCredentialsType":{
           "shape":"ImagePullCredentialsType",
           "documentation":"<p> The type of credentials CodeBuild uses to pull images in your build. There are two valid values: </p> <ul> <li> <p> <code>CODEBUILD</code> specifies that CodeBuild uses its own credentials. This requires that you modify your ECR repository policy to trust CodeBuild service principal. </p> </li> <li> <p> <code>SERVICE_ROLE</code> specifies that CodeBuild uses your build project's service role. </p> </li> </ul> <p> When you use a cross-account or private registry image, you must use SERVICE_ROLE credentials. When you use an CodeBuild curated image, you must use CODEBUILD credentials. </p>"
+        },
+        "dockerServer":{
+          "shape":"DockerServer",
+          "documentation":"<p>A DockerServer object to use for this build project.</p>"
         }
       },
       "documentation":"<p>Information about the build environment of the build project.</p>"
@@ -3624,6 +4016,52 @@
       },
       "documentation":"<p>Information about the proxy configurations that apply network access control to your reserved capacity instances.</p>"
     },
+    "PullRequestBuildApproverRole":{
+      "type":"string",
+      "enum":[
+        "GITHUB_READ",
+        "GITHUB_TRIAGE",
+        "GITHUB_WRITE",
+        "GITHUB_MAINTAIN",
+        "GITHUB_ADMIN",
+        "GITLAB_GUEST",
+        "GITLAB_PLANNER",
+        "GITLAB_REPORTER",
+        "GITLAB_DEVELOPER",
+        "GITLAB_MAINTAINER",
+        "GITLAB_OWNER",
+        "BITBUCKET_READ",
+        "BITBUCKET_WRITE",
+        "BITBUCKET_ADMIN"
+      ]
+    },
+    "PullRequestBuildApproverRoles":{
+      "type":"list",
+      "member":{"shape":"PullRequestBuildApproverRole"}
+    },
+    "PullRequestBuildCommentApproval":{
+      "type":"string",
+      "enum":[
+        "DISABLED",
+        "ALL_PULL_REQUESTS",
+        "FORK_PULL_REQUESTS"
+      ]
+    },
+    "PullRequestBuildPolicy":{
+      "type":"structure",
+      "required":["requiresCommentApproval"],
+      "members":{
+        "requiresCommentApproval":{
+          "shape":"PullRequestBuildCommentApproval",
+          "documentation":"<p>Specifies when comment-based approval is required before triggering a build on pull requests. This setting determines whether builds run automatically or require explicit approval through comments.</p> <ul> <li> <p> <i>DISABLED</i>: Builds trigger automatically without requiring comment approval</p> </li> <li> <p> <i>ALL_PULL_REQUESTS</i>: All pull requests require comment approval before builds execute (unless contributor is one of the approver roles)</p> </li> <li> <p> <i>FORK_PULL_REQUESTS</i>: Only pull requests from forked repositories require comment approval (unless contributor is one of the approver roles)</p> </li> </ul>"
+        },
+        "approverRoles":{
+          "shape":"PullRequestBuildApproverRoles",
+          "documentation":"<p>List of repository roles that have approval privileges for pull request builds when comment approval is required. Only users with these roles can provide valid comment approvals. If a pull request contributor is one of these roles, their pull request builds will trigger automatically. This field is only applicable when <code>requiresCommentApproval</code> is not <i>DISABLED</i>.</p>"
+        }
+      },
+      "documentation":"<p>A PullRequestBuildPolicy object that defines comment-based approval requirements for triggering builds on pull requests. This policy helps control when automated builds are executed based on contributor permissions and approval workflows.</p>"
+    },
     "PutResourcePolicyInput":{
       "type":"structure",
       "required":[
@@ -3945,15 +4383,13 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon Web Services resource cannot be created, because an Amazon Web Services resource with the same settings already exists.</p>",
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon Web Services resource cannot be found.</p>",
       "exception":true
     },
@@ -4056,6 +4492,176 @@
       },
       "documentation":"<p> Information about the S3 bucket where the raw data of a report are exported. </p>"
     },
+    "SSMSession":{
+      "type":"structure",
+      "members":{
+        "sessionId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the session.</p>"
+        },
+        "tokenValue":{
+          "shape":"String",
+          "documentation":"<p>An encrypted token value containing session and caller information.</p>"
+        },
+        "streamUrl":{
+          "shape":"String",
+          "documentation":"<p>A URL back to SSM Agent on the managed node that the Session Manager client uses to send commands and receive output from the node.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the Session Manager session.</p>"
+    },
+    "Sandbox":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the sandbox.</p>"
+        },
+        "arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the sandbox.</p>"
+        },
+        "projectName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The CodeBuild project name.</p>"
+        },
+        "requestTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox process was initially requested, expressed in Unix time format.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox process started, expressed in Unix time format.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox process ended, expressed in Unix time format.</p>"
+        },
+        "status":{
+          "shape":"String",
+          "documentation":"<p>The status of the sandbox.</p>"
+        },
+        "source":{"shape":"ProjectSource"},
+        "sourceVersion":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Any version identifier for the version of the sandbox to be built.</p>"
+        },
+        "secondarySources":{
+          "shape":"ProjectSources",
+          "documentation":"<p> An array of <code>ProjectSource</code> objects. </p>"
+        },
+        "secondarySourceVersions":{
+          "shape":"ProjectSecondarySourceVersions",
+          "documentation":"<p> An array of <code>ProjectSourceVersion</code> objects.</p>"
+        },
+        "environment":{"shape":"ProjectEnvironment"},
+        "fileSystemLocations":{
+          "shape":"ProjectFileSystemLocations",
+          "documentation":"<p> An array of <code>ProjectFileSystemLocation</code> objects for a CodeBuild build project. A <code>ProjectFileSystemLocation</code> object specifies the <code>identifier</code>, <code>location</code>, <code>mountOptions</code>, <code>mountPoint</code>, and <code>type</code> of a file system created using Amazon Elastic File System. </p>"
+        },
+        "timeoutInMinutes":{
+          "shape":"WrapperInt",
+          "documentation":"<p>How long, in minutes, from 5 to 2160 (36 hours), for CodeBuild to wait before timing out this sandbox if it does not get marked as completed.</p>"
+        },
+        "queuedTimeoutInMinutes":{
+          "shape":"WrapperInt",
+          "documentation":"<p>The number of minutes a sandbox is allowed to be queued before it times out. </p>"
+        },
+        "vpcConfig":{"shape":"VpcConfig"},
+        "logConfig":{"shape":"LogsConfig"},
+        "encryptionKey":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Key Management Service customer master key (CMK) to be used for encrypting the sandbox output artifacts.</p>"
+        },
+        "serviceRole":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of a service role used for this sandbox.</p>"
+        },
+        "currentSession":{
+          "shape":"SandboxSession",
+          "documentation":"<p>The current session for the sandbox.</p>"
+        }
+      },
+      "documentation":"<p>Contains sandbox information.</p>"
+    },
+    "SandboxIds":{
+      "type":"list",
+      "member":{"shape":"NonEmptyString"}
+    },
+    "SandboxSession":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the sandbox session.</p>"
+        },
+        "status":{
+          "shape":"String",
+          "documentation":"<p>The status of the sandbox session.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox session started, expressed in Unix time format.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox session ended, expressed in Unix time format.</p>"
+        },
+        "currentPhase":{
+          "shape":"String",
+          "documentation":"<p>The current phase for the sandbox.</p>"
+        },
+        "phases":{
+          "shape":"SandboxSessionPhases",
+          "documentation":"<p> An array of <code>SandboxSessionPhase</code> objects. </p>"
+        },
+        "resolvedSourceVersion":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>An identifier for the version of this sandbox's source code.</p>"
+        },
+        "logs":{"shape":"LogsLocation"},
+        "networkInterface":{"shape":"NetworkInterface"}
+      },
+      "documentation":"<p>Contains information about the sandbox session.</p>"
+    },
+    "SandboxSessionPhase":{
+      "type":"structure",
+      "members":{
+        "phaseType":{
+          "shape":"String",
+          "documentation":"<p>The name of the sandbox phase.</p>"
+        },
+        "phaseStatus":{
+          "shape":"StatusType",
+          "documentation":"<p>The current status of the sandbox phase. Valid values include:</p> <dl> <dt>FAILED</dt> <dd> <p>The sandbox phase failed.</p> </dd> <dt>FAULT</dt> <dd> <p>The sandbox phase faulted.</p> </dd> <dt>IN_PROGRESS</dt> <dd> <p>The sandbox phase is still in progress.</p> </dd> <dt>STOPPED</dt> <dd> <p>The sandbox phase stopped.</p> </dd> <dt>SUCCEEDED</dt> <dd> <p>The sandbox phase succeeded.</p> </dd> <dt>TIMED_OUT</dt> <dd> <p>The sandbox phase timed out.</p> </dd> </dl>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox phase started, expressed in Unix time format.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sandbox phase ended, expressed in Unix time format.</p>"
+        },
+        "durationInSeconds":{
+          "shape":"WrapperLong",
+          "documentation":"<p>How long, in seconds, between the starting and ending times of the sandbox's phase.</p>"
+        },
+        "contexts":{
+          "shape":"PhaseContexts",
+          "documentation":"<p> An array of <code>PhaseContext</code> objects. </p>"
+        }
+      },
+      "documentation":"<p>Contains information about the sandbox phase.</p>"
+    },
+    "SandboxSessionPhases":{
+      "type":"list",
+      "member":{"shape":"SandboxSessionPhase"}
+    },
+    "Sandboxes":{
+      "type":"list",
+      "member":{"shape":"Sandbox"}
+    },
     "ScalingConfigurationInput":{
       "type":"structure",
       "members":{
@@ -4113,7 +4719,7 @@
         },
         "scope":{
           "shape":"WebhookScopeType",
-          "documentation":"<p>The type of scope for a GitHub or GitLab webhook.</p>"
+          "documentation":"<p>The type of scope for a GitHub or GitLab webhook. The scope default is GITHUB_ORGANIZATION.</p>"
         }
       },
       "documentation":"<p>Contains configuration information about the scope for a webhook. </p>"
@@ -4412,7 +5018,7 @@
         },
         "buildspecOverride":{
           "shape":"String",
-          "documentation":"<p>A buildspec file declaration that overrides the latest one defined in the build project, for this build only. The buildspec defined on the project is not changed.</p> <p>If this value is set, it can be either an inline buildspec definition, the path to an alternate buildspec file relative to the value of the built-in <code>CODEBUILD_SRC_DIR</code> environment variable, or the path to an S3 bucket. The bucket must be in the same Amazon Web Services Region as the build project. Specify the buildspec file using its ARN (for example, <code>arn:aws:s3:::my-codebuild-sample2/buildspec.yml</code>). If this value is not provided or is set to an empty string, the source code must contain a buildspec file in its root directory. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage\">Buildspec File Name and Storage Location</a>.</p> <note> <p>Since this property allows you to change the build commands that will run in the container, you should note that an IAM principal with the ability to call this API and set this parameter can override the default settings. Moreover, we encourage that you use a trustworthy buildspec location like a file in your source repository or a Amazon S3 bucket.</p> </note>"
+          "documentation":"<p>A buildspec file declaration that overrides the latest one defined in the build project, for this build only. The buildspec defined on the project is not changed.</p> <p>If this value is set, it can be either an inline buildspec definition, the path to an alternate buildspec file relative to the value of the built-in <code>CODEBUILD_SRC_DIR</code> environment variable, or the path to an S3 bucket. The bucket must be in the same Amazon Web Services Region as the build project. Specify the buildspec file using its ARN (for example, <code>arn:aws:s3:::my-codebuild-sample2/buildspec.yml</code>). If this value is not provided or is set to an empty string, the source code must contain a buildspec file in its root directory. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage\">Buildspec File Name and Storage Location</a>.</p> <note> <p>Since this property allows you to change the build commands that will run in the container, you should note that an IAM principal with the ability to call this API and set this parameter can override the default settings. Moreover, we encourage that you use a trustworthy buildspec location like a file in your source repository or a Amazon S3 bucket. Alternatively, you can restrict overrides to the buildspec by using a condition key: <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/action-context-keys.html#action-context-keys-example-overridebuildspec.html\">Prevent unauthorized modifications to project buildspec</a>.</p> </note>"
         },
         "insecureSslOverride":{
           "shape":"WrapperBoolean",
@@ -4505,6 +5111,77 @@
         }
       }
     },
+    "StartCommandExecutionInput":{
+      "type":"structure",
+      "required":[
+        "sandboxId",
+        "command"
+      ],
+      "members":{
+        "sandboxId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxId</code> or <code>sandboxArn</code>.</p>"
+        },
+        "command":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The command that needs to be executed.</p>"
+        },
+        "type":{
+          "shape":"CommandType",
+          "documentation":"<p>The command type.</p>"
+        }
+      }
+    },
+    "StartCommandExecutionOutput":{
+      "type":"structure",
+      "members":{
+        "commandExecution":{
+          "shape":"CommandExecution",
+          "documentation":"<p>Information about the requested command executions.</p>"
+        }
+      }
+    },
+    "StartSandboxConnectionInput":{
+      "type":"structure",
+      "required":["sandboxId"],
+      "members":{
+        "sandboxId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A <code>sandboxId</code> or <code>sandboxArn</code>.</p>"
+        }
+      }
+    },
+    "StartSandboxConnectionOutput":{
+      "type":"structure",
+      "members":{
+        "ssmSession":{
+          "shape":"SSMSession",
+          "documentation":"<p>Information about the Session Manager session.</p>"
+        }
+      }
+    },
+    "StartSandboxInput":{
+      "type":"structure",
+      "members":{
+        "projectName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The CodeBuild project name.</p>"
+        },
+        "idempotencyToken":{
+          "shape":"SensitiveString",
+          "documentation":"<p>A unique client token.</p>"
+        }
+      }
+    },
+    "StartSandboxOutput":{
+      "type":"structure",
+      "members":{
+        "sandbox":{
+          "shape":"Sandbox",
+          "documentation":"<p>Information about the requested sandbox.</p>"
+        }
+      }
+    },
     "StatusType":{
       "type":"string",
       "enum":[
@@ -4551,6 +5228,25 @@
         }
       }
     },
+    "StopSandboxInput":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Information about the requested sandbox ID.</p>"
+        }
+      }
+    },
+    "StopSandboxOutput":{
+      "type":"structure",
+      "members":{
+        "sandbox":{
+          "shape":"Sandbox",
+          "documentation":"<p>Information about the requested sandbox.</p>"
+        }
+      }
+    },
     "String":{"type":"string"},
     "Subnets":{
       "type":"list",
@@ -4629,6 +5325,10 @@
         "expired":{
           "shape":"Timestamp",
           "documentation":"<p> The date and time a test case expires. A test case expires 30 days after it is created. An expired test case is not available to view in CodeBuild. </p>"
+        },
+        "testSuiteName":{
+          "shape":"String",
+          "documentation":"<p>The name of the test suite that the test case is a part of.</p>"
         }
       },
       "documentation":"<p> Information about a test case created using a framework such as NUnit or Cucumber. A test case might be a unit test or a configuration test. </p>"
@@ -4698,11 +5398,11 @@
         },
         "computeType":{
           "shape":"ComputeType",
-          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
+          "documentation":"<p>Information about the compute resources the compute fleet uses. Available values include:</p> <ul> <li> <p> <code>ATTRIBUTE_BASED_COMPUTE</code>: Specify the amount of vCPUs, memory, disk space, and the type of machine.</p> <note> <p> If you use <code>ATTRIBUTE_BASED_COMPUTE</code>, you must define your attributes by using <code>computeConfiguration</code>. CodeBuild will select the cheapest instance that satisfies your specified attributes. For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.types\">Reserved capacity environment types</a> in the <i>CodeBuild User Guide</i>.</p> </note> </li> <li> <p> <code>CUSTOM_INSTANCE_TYPE</code>: Specify the instance type for your compute fleet. For a list of supported instance types, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.instance-types\">Supported instance families </a> in the <i>CodeBuild User Guide</i>.</p> </li> <li> <p> <code>BUILD_GENERAL1_SMALL</code>: Use up to 4 GiB memory and 2 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_MEDIUM</code>: Use up to 8 GiB memory and 4 vCPUs for builds.</p> </li> <li> <p> <code>BUILD_GENERAL1_LARGE</code>: Use up to 16 GiB memory and 8 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_XLARGE</code>: Use up to 72 GiB memory and 36 vCPUs for builds, depending on your environment type.</p> </li> <li> <p> <code>BUILD_GENERAL1_2XLARGE</code>: Use up to 144 GiB memory, 72 vCPUs, and 824 GB of SSD storage for builds. This compute type supports Docker images up to 100 GB uncompressed.</p> </li> <li> <p> <code>BUILD_LAMBDA_1GB</code>: Use up to 1 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_2GB</code>: Use up to 2 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_4GB</code>: Use up to 4 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_8GB</code>: Use up to 8 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> <li> <p> <code>BUILD_LAMBDA_10GB</code>: Use up to 10 GiB memory for builds. Only available for environment type <code>LINUX_LAMBDA_CONTAINER</code> and <code>ARM_LAMBDA_CONTAINER</code>.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_SMALL</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 16 GiB memory, 4 vCPUs, and 1 NVIDIA A10G Tensor Core GPU for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 4 GiB memory and 2 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p> If you use <code>BUILD_GENERAL1_LARGE</code>: </p> <ul> <li> <p> For environment type <code>LINUX_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs for builds. </p> </li> <li> <p> For environment type <code>LINUX_GPU_CONTAINER</code>, you can use up to 255 GiB memory, 32 vCPUs, and 4 NVIDIA Tesla V100 GPUs for builds.</p> </li> <li> <p> For environment type <code>ARM_CONTAINER</code>, you can use up to 16 GiB memory and 8 vCPUs on ARM-based processors for builds.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types\">On-demand environment types</a> in the <i>CodeBuild User Guide.</i> </p>"
         },
         "computeConfiguration":{
           "shape":"ComputeConfiguration",
-          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code>.</p>"
+          "documentation":"<p>The compute configuration of the compute fleet. This is only required if <code>computeType</code> is set to <code>ATTRIBUTE_BASED_COMPUTE</code> or <code>CUSTOM_INSTANCE_TYPE</code>.</p>"
         },
         "scalingConfiguration":{
           "shape":"ScalingConfigurationInput",
@@ -4921,7 +5621,11 @@
         },
         "buildType":{
           "shape":"WebhookBuildType",
-          "documentation":"<p>Specifies the type of build this webhook will trigger.</p>"
+          "documentation":"<p>Specifies the type of build this webhook will trigger.</p> <note> <p> <code>RUNNER_BUILDKITE_BUILD</code> is only available for <code>NO_SOURCE</code> source type projects configured for Buildkite runner builds. For more information about CodeBuild-hosted Buildkite runner builds, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/sample-runner-buildkite.html\">Tutorial: Configure a CodeBuild-hosted Buildkite runner</a> in the <i>CodeBuild user guide</i>.</p> </note>"
+        },
+        "pullRequestBuildPolicy":{
+          "shape":"PullRequestBuildPolicy",
+          "documentation":"<p>A PullRequestBuildPolicy object that defines comment-based approval requirements for triggering builds on pull requests. This policy helps control when automated builds are executed based on contributor permissions and approval workflows.</p>"
         }
       }
     },
@@ -4983,7 +5687,7 @@
         },
         "buildType":{
           "shape":"WebhookBuildType",
-          "documentation":"<p>Specifies the type of build this webhook will trigger.</p>"
+          "documentation":"<p>Specifies the type of build this webhook will trigger.</p> <note> <p> <code>RUNNER_BUILDKITE_BUILD</code> is only available for <code>NO_SOURCE</code> source type projects configured for Buildkite runner builds. For more information about CodeBuild-hosted Buildkite runner builds, see <a href=\"https://docs.aws.amazon.com/codebuild/latest/userguide/sample-runner-buildkite.html\">Tutorial: Configure a CodeBuild-hosted Buildkite runner</a> in the <i>CodeBuild user guide</i>.</p> </note>"
         },
         "manualCreation":{
           "shape":"WrapperBoolean",
@@ -4996,7 +5700,16 @@
         "scopeConfiguration":{
           "shape":"ScopeConfiguration",
           "documentation":"<p>The scope configuration for global or organization webhooks.</p> <note> <p>Global or organization webhooks are only available for GitHub and Github Enterprise webhooks.</p> </note>"
-        }
+        },
+        "status":{
+          "shape":"WebhookStatus",
+          "documentation":"<p>The status of the webhook. Valid values include:</p> <ul> <li> <p> <code>CREATING</code>: The webhook is being created.</p> </li> <li> <p> <code>CREATE_FAILED</code>: The webhook has failed to create.</p> </li> <li> <p> <code>ACTIVE</code>: The webhook has succeeded and is active.</p> </li> <li> <p> <code>DELETING</code>: The webhook is being deleted.</p> </li> </ul>"
+        },
+        "statusMessage":{
+          "shape":"String",
+          "documentation":"<p>A message associated with the status of a webhook.</p>"
+        },
+        "pullRequestBuildPolicy":{"shape":"PullRequestBuildPolicy"}
       },
       "documentation":"<p>Information about a webhook that connects repository events to a build project in CodeBuild.</p>"
     },
@@ -5004,7 +5717,8 @@
       "type":"string",
       "enum":[
         "BUILD",
-        "BUILD_BATCH"
+        "BUILD_BATCH",
+        "RUNNER_BUILDKITE_BUILD"
       ]
     },
     "WebhookFilter":{
@@ -5016,7 +5730,7 @@
       "members":{
         "type":{
           "shape":"WebhookFilterType",
-          "documentation":"<p> The type of webhook filter. There are nine webhook filter types: <code>EVENT</code>, <code>ACTOR_ACCOUNT_ID</code>, <code>HEAD_REF</code>, <code>BASE_REF</code>, <code>FILE_PATH</code>, <code>COMMIT_MESSAGE</code>, <code>TAG_NAME</code>, <code>RELEASE_NAME</code>, and <code>WORKFLOW_NAME</code>. </p> <ul> <li> <p> EVENT </p> <ul> <li> <p> A webhook event triggers a build when the provided <code>pattern</code> matches one of nine event types: <code>PUSH</code>, <code>PULL_REQUEST_CREATED</code>, <code>PULL_REQUEST_UPDATED</code>, <code>PULL_REQUEST_CLOSED</code>, <code>PULL_REQUEST_REOPENED</code>, <code>PULL_REQUEST_MERGED</code>, <code>RELEASED</code>, <code>PRERELEASED</code>, and <code>WORKFLOW_JOB_QUEUED</code>. The <code>EVENT</code> patterns are specified as a comma-separated string. For example, <code>PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED</code> filters all push, pull request created, and pull request updated events. </p> <note> <p> Types <code>PULL_REQUEST_REOPENED</code> and <code>WORKFLOW_JOB_QUEUED</code> work with GitHub and GitHub Enterprise only. Types <code>RELEASED</code> and <code>PRERELEASED</code> work with GitHub only.</p> </note> </li> </ul> </li> <li> <p>ACTOR_ACCOUNT_ID</p> <ul> <li> <p> A webhook event triggers a build when a GitHub, GitHub Enterprise, or Bitbucket account ID matches the regular expression <code>pattern</code>. </p> </li> </ul> </li> <li> <p>HEAD_REF</p> <ul> <li> <p> A webhook event triggers a build when the head reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code> and <code>refs/tags/tag-name</code>. </p> <note> <p> Works with GitHub and GitHub Enterprise push, GitHub and GitHub Enterprise pull request, Bitbucket push, and Bitbucket pull request events.</p> </note> </li> </ul> </li> <li> <p>BASE_REF</p> <ul> <li> <p> A webhook event triggers a build when the base reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code>. </p> <note> <p> Works with pull request events only. </p> </note> </li> </ul> </li> <li> <p>FILE_PATH</p> <ul> <li> <p> A webhook triggers a build when the path of a changed file matches the regular expression <code>pattern</code>. </p> <note> <p> Works with GitHub and Bitbucket events push and pull requests events. Also works with GitHub Enterprise push events, but does not work with GitHub Enterprise pull request events. </p> </note> </li> </ul> </li> <li> <p>COMMIT_MESSAGE</p> <ul> <li> <p>A webhook triggers a build when the head commit message matches the regular expression <code>pattern</code>.</p> <note> <p> Works with GitHub and Bitbucket events push and pull requests events. Also works with GitHub Enterprise push events, but does not work with GitHub Enterprise pull request events. </p> </note> </li> </ul> </li> <li> <p>TAG_NAME</p> <ul> <li> <p>A webhook triggers a build when the tag name of the release matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>RELEASED</code> and <code>PRERELEASED</code> events only. </p> </note> </li> </ul> </li> <li> <p>RELEASE_NAME</p> <ul> <li> <p>A webhook triggers a build when the release name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>RELEASED</code> and <code>PRERELEASED</code> events only. </p> </note> </li> </ul> </li> <li> <p>REPOSITORY_NAME</p> <ul> <li> <p>A webhook triggers a build when the repository name matches the regular expression pattern.</p> <note> <p> Works with GitHub global or organization webhooks only. </p> </note> </li> </ul> </li> <li> <p>WORKFLOW_NAME</p> <ul> <li> <p>A webhook triggers a build when the workflow name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>WORKFLOW_JOB_QUEUED</code> events only. </p> </note> </li> </ul> </li> </ul>"
+          "documentation":"<p> The type of webhook filter. There are 11 webhook filter types: <code>EVENT</code>, <code>ACTOR_ACCOUNT_ID</code>, <code>HEAD_REF</code>, <code>BASE_REF</code>, <code>FILE_PATH</code>, <code>COMMIT_MESSAGE</code>, <code>TAG_NAME</code>, <code>RELEASE_NAME</code>, <code>REPOSITORY_NAME</code>, <code>ORGANIZATION_NAME</code>, and <code>WORKFLOW_NAME</code>. </p> <ul> <li> <p> EVENT </p> <ul> <li> <p> A webhook event triggers a build when the provided <code>pattern</code> matches one of nine event types: <code>PUSH</code>, <code>PULL_REQUEST_CREATED</code>, <code>PULL_REQUEST_UPDATED</code>, <code>PULL_REQUEST_CLOSED</code>, <code>PULL_REQUEST_REOPENED</code>, <code>PULL_REQUEST_MERGED</code>, <code>RELEASED</code>, <code>PRERELEASED</code>, and <code>WORKFLOW_JOB_QUEUED</code>. The <code>EVENT</code> patterns are specified as a comma-separated string. For example, <code>PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED</code> filters all push, pull request created, and pull request updated events. </p> <note> <p> Types <code>PULL_REQUEST_REOPENED</code> and <code>WORKFLOW_JOB_QUEUED</code> work with GitHub and GitHub Enterprise only. Types <code>RELEASED</code> and <code>PRERELEASED</code> work with GitHub only.</p> </note> </li> </ul> </li> <li> <p>ACTOR_ACCOUNT_ID</p> <ul> <li> <p> A webhook event triggers a build when a GitHub, GitHub Enterprise, or Bitbucket account ID matches the regular expression <code>pattern</code>. </p> </li> </ul> </li> <li> <p>HEAD_REF</p> <ul> <li> <p> A webhook event triggers a build when the head reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code> and <code>refs/tags/tag-name</code>. </p> <note> <p> Works with GitHub and GitHub Enterprise push, GitHub and GitHub Enterprise pull request, Bitbucket push, and Bitbucket pull request events.</p> </note> </li> </ul> </li> <li> <p>BASE_REF</p> <ul> <li> <p> A webhook event triggers a build when the base reference matches the regular expression <code>pattern</code>. For example, <code>refs/heads/branch-name</code>. </p> <note> <p> Works with pull request events only. </p> </note> </li> </ul> </li> <li> <p>FILE_PATH</p> <ul> <li> <p> A webhook triggers a build when the path of a changed file matches the regular expression <code>pattern</code>. </p> <note> <p> Works with push and pull request events only. </p> </note> </li> </ul> </li> <li> <p>COMMIT_MESSAGE</p> <ul> <li> <p>A webhook triggers a build when the head commit message matches the regular expression <code>pattern</code>.</p> <note> <p> Works with push and pull request events only. </p> </note> </li> </ul> </li> <li> <p>TAG_NAME</p> <ul> <li> <p>A webhook triggers a build when the tag name of the release matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>RELEASED</code> and <code>PRERELEASED</code> events only. </p> </note> </li> </ul> </li> <li> <p>RELEASE_NAME</p> <ul> <li> <p>A webhook triggers a build when the release name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>RELEASED</code> and <code>PRERELEASED</code> events only. </p> </note> </li> </ul> </li> <li> <p>REPOSITORY_NAME</p> <ul> <li> <p>A webhook triggers a build when the repository name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with GitHub global or organization webhooks only. </p> </note> </li> </ul> </li> <li> <p>ORGANIZATION_NAME</p> <ul> <li> <p>A webhook triggers a build when the organization name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with GitHub global webhooks only. </p> </note> </li> </ul> </li> <li> <p>WORKFLOW_NAME</p> <ul> <li> <p>A webhook triggers a build when the workflow name matches the regular expression <code>pattern</code>.</p> <note> <p> Works with <code>WORKFLOW_JOB_QUEUED</code> events only. </p> </note> <note> <p>For CodeBuild-hosted Buildkite runner builds, WORKFLOW_NAME filters will filter by pipeline name.</p> </note> </li> </ul> </li> </ul>"
         },
         "pattern":{
           "shape":"String",
@@ -5027,7 +5741,7 @@
           "documentation":"<p> Used to indicate that the <code>pattern</code> determines which webhook events do not trigger a build. If true, then a webhook event that does not match the <code>pattern</code> triggers a build. If false, then a webhook event that matches the <code>pattern</code> triggers a build. </p>"
         }
       },
-      "documentation":"<p> A filter used to determine which webhooks trigger a build. </p>"
+      "documentation":"<p>A filter used to determine which webhooks trigger a build. </p>"
     },
     "WebhookFilterType":{
       "type":"string",
@@ -5041,7 +5755,8 @@
         "WORKFLOW_NAME",
         "TAG_NAME",
         "RELEASE_NAME",
-        "REPOSITORY_NAME"
+        "REPOSITORY_NAME",
+        "ORGANIZATION_NAME"
       ]
     },
     "WebhookScopeType":{
@@ -5052,6 +5767,15 @@
         "GITLAB_GROUP"
       ]
     },
+    "WebhookStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATE_FAILED",
+        "ACTIVE",
+        "DELETING"
+      ]
+    },
     "WrapperBoolean":{"type":"boolean"},
     "WrapperDouble":{"type":"double"},
     "WrapperInt":{"type":"integer"},
diff -pruN 2.23.6-1/awscli/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codecatalyst/2022-09-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codecommit/2015-04-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codecommit/2015-04-13/service-2.json 2.31.35-1/awscli/botocore/data/codecommit/2015-04-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/codecommit/2015-04-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codecommit/2015-04-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2060,8 +2060,7 @@
     "AccountId":{"type":"string"},
     "ActorDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon Resource Name (ARN) does not exist in the Amazon Web Services account.</p>",
       "exception":true
     },
@@ -2129,15 +2128,13 @@
     },
     "ApprovalRuleContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The content for the approval rule is empty. You must provide some content for an approval rule. The content cannot be null.</p>",
       "exception":true
     },
     "ApprovalRuleDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified approval rule does not exist.</p>",
       "exception":true
     },
@@ -2167,15 +2164,13 @@
     },
     "ApprovalRuleNameAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An approval rule with that name already exists. Approval rule names must be unique within the scope of a pull request.</p>",
       "exception":true
     },
     "ApprovalRuleNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An approval rule name is required, but was not specified.</p>",
       "exception":true
     },
@@ -2238,8 +2233,7 @@
     },
     "ApprovalRuleTemplateContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The content for the approval rule template is empty. You must provide some content for an approval rule template. The content cannot be null.</p>",
       "exception":true
     },
@@ -2250,16 +2244,14 @@
     },
     "ApprovalRuleTemplateDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified approval rule template does not exist. Verify that the name is correct and that you are signed in to the Amazon Web Services Region where the template was created, and then try again.</p>",
       "exception":true
     },
     "ApprovalRuleTemplateId":{"type":"string"},
     "ApprovalRuleTemplateInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval rule template is associated with one or more repositories. You cannot delete a template that is associated with a repository. Remove all associations, and then try again.</p>",
       "exception":true
     },
@@ -2270,8 +2262,7 @@
     },
     "ApprovalRuleTemplateNameAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot create an approval rule template with that name because a template with that name already exists in this Amazon Web Services Region for your Amazon Web Services account. Approval rule template names must be unique.</p>",
       "exception":true
     },
@@ -2281,8 +2272,7 @@
     },
     "ApprovalRuleTemplateNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An approval rule template name is required, but was not specified.</p>",
       "exception":true
     },
@@ -2321,8 +2311,7 @@
     },
     "ApprovalStateRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An approval state is required, but was not specified.</p>",
       "exception":true
     },
@@ -2347,8 +2336,7 @@
     },
     "AuthorDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon Resource Name (ARN) does not exist in the Amazon Web Services account.</p>",
       "exception":true
     },
@@ -2696,22 +2684,19 @@
     },
     "BeforeCommitIdAndAfterCommitIdAreSameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The before commit ID and the after commit ID are the same, which is not valid. The before commit ID and the after commit ID must be different commit IDs.</p>",
       "exception":true
     },
     "BlobIdDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified blob does not exist.</p>",
       "exception":true
     },
     "BlobIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A blob ID is required, but was not specified.</p>",
       "exception":true
     },
@@ -2735,8 +2720,7 @@
     },
     "BranchDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified branch does not exist.</p>",
       "exception":true
     },
@@ -2761,15 +2745,13 @@
     },
     "BranchNameExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cannot create the branch with the specified name because the commit conflicts with an existing branch with the same name. Branch names must be unique.</p>",
       "exception":true
     },
     "BranchNameIsTagNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified branch name is not valid because it is a tag name. Enter the name of a branch in the repository. For a list of valid branch names, use <a>ListBranches</a>.</p>",
       "exception":true
     },
@@ -2779,8 +2761,7 @@
     },
     "BranchNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A branch name is required, but was not specified.</p>",
       "exception":true
     },
@@ -2790,15 +2771,13 @@
     },
     "CannotDeleteApprovalRuleFromTemplateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval rule cannot be deleted from the pull request because it was created by an approval rule template and applied to the pull request automatically.</p>",
       "exception":true
     },
     "CannotModifyApprovalRuleFromTemplateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval rule cannot be modified for the pull request because it was created by an approval rule template and applied to the pull request automatically.</p>",
       "exception":true
     },
@@ -2814,8 +2793,7 @@
     "ClientRequestToken":{"type":"string"},
     "ClientRequestTokenRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A client request token is required. A client request token is an unique, client-generated idempotency token that, when provided in a request, ensures the request cannot be repeated with a changed parameter. If a request is received with the same parameters and a token is included, the request returns information about the initial request that used that token.</p>",
       "exception":true
     },
@@ -2869,44 +2847,38 @@
     },
     "CommentContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The comment is empty. You must provide some content for a comment. The content cannot be null.</p>",
       "exception":true
     },
     "CommentContentSizeLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The comment is too large. Comments are limited to 10,240 characters.</p>",
       "exception":true
     },
     "CommentDeletedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This comment has already been deleted. You cannot edit or delete a deleted comment.</p>",
       "exception":true
     },
     "CommentDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No comment exists with the provided ID. Verify that you have used the correct ID, and then try again.</p>",
       "exception":true
     },
     "CommentId":{"type":"string"},
     "CommentIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The comment ID is missing or null. A comment ID is required.</p>",
       "exception":true
     },
     "CommentNotCreatedByCallerException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot modify or delete this comment. Only comment authors can modify or delete their comments.</p>",
       "exception":true
     },
@@ -3030,23 +3002,20 @@
     },
     "CommitDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified commit does not exist or no commit was specified, and the specified repository has no default branch.</p>",
       "exception":true
     },
     "CommitId":{"type":"string"},
     "CommitIdDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified commit ID does not exist.</p>",
       "exception":true
     },
     "CommitIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A commit ID was not specified.</p>",
       "exception":true
     },
@@ -3056,22 +3025,19 @@
     },
     "CommitIdsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of allowed commit IDs in a batch request is 100. Verify that your batch requests contains no more than 100 commit IDs, and then try again.</p>",
       "exception":true
     },
     "CommitIdsListRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A list of commit IDs is required, but was either not specified or the list was empty.</p>",
       "exception":true
     },
     "CommitMessageLengthExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit message is too long. Provide a shorter string. </p>",
       "exception":true
     },
@@ -3082,15 +3048,13 @@
     },
     "CommitRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A commit was not specified.</p>",
       "exception":true
     },
     "ConcurrentReferenceUpdateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The merge cannot be completed because the target branch has been modified. Another user might have modified the target branch while the merge was in progress. Wait a few minutes, and then try again.</p>",
       "exception":true
     },
@@ -3499,8 +3463,7 @@
     "Date":{"type":"string"},
     "DefaultBranchCannotBeDeletedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified branch is the default branch for the repository, and cannot be deleted. To delete this branch, you must first set another branch as the default branch.</p>",
       "exception":true
     },
@@ -3855,8 +3818,7 @@
     },
     "DirectoryNameConflictsWithFileNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A file cannot be added to the repository because the specified path name has the same name as a file that already exists in this repository. Either provide a different name for the file, or specify a different path for the file.</p>",
       "exception":true
     },
@@ -3880,58 +3842,50 @@
     "Email":{"type":"string"},
     "EncryptionIntegrityChecksFailedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An encryption integrity check failed.</p>",
       "exception":true,
       "fault":true
     },
     "EncryptionKeyAccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An encryption key could not be accessed.</p>",
       "exception":true
     },
     "EncryptionKeyDisabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The encryption key is disabled.</p>",
       "exception":true
     },
     "EncryptionKeyInvalidIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Key Management Service encryption key is not valid.</p>",
       "exception":true
     },
     "EncryptionKeyInvalidUsageException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A KMS encryption key was used to try and encrypt or decrypt a repository, but either the repository or the key was not in a valid state to support the operation.</p>",
       "exception":true
     },
     "EncryptionKeyNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No encryption key was found.</p>",
       "exception":true
     },
     "EncryptionKeyRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A KMS encryption key ID is required but was not specified.</p>",
       "exception":true
     },
     "EncryptionKeyUnavailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The encryption key is not available.</p>",
       "exception":true
     },
@@ -4016,36 +3970,31 @@
     },
     "FileContentAndSourceFileSpecifiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because both a source file and file content have been specified for the same file. You cannot provide both. Either specify a source file or provide the file content directly.</p>",
       "exception":true
     },
     "FileContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The file cannot be added because it is empty. Empty files cannot be added to the repository with this API.</p>",
       "exception":true
     },
     "FileContentSizeLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The file cannot be added because it is too large. The maximum file size is 6 MB, and the combined file content change size is 7 MB. Consider making these changes using a Git client.</p>",
       "exception":true
     },
     "FileDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified file does not exist. Verify that you have used the correct file name, full path, and extension.</p>",
       "exception":true
     },
     "FileEntryRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because no files have been specified as added, updated, or changed (PutFile or DeleteFile) for the commit.</p>",
       "exception":true
     },
@@ -4073,8 +4022,7 @@
     },
     "FileModeRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because no file mode has been specified. A file mode is required to update mode permissions for a file.</p>",
       "exception":true
     },
@@ -4106,15 +4054,13 @@
     },
     "FileNameConflictsWithDirectoryNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A file cannot be added to the repository because the specified file name has the same name as a directory in this repository. Either provide another name for the file, or add the file in a directory that does not match the file name.</p>",
       "exception":true
     },
     "FilePathConflictsWithSubmodulePathException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because a specified file path points to a submodule. Verify that the destination files have valid file paths that do not point to a submodule.</p>",
       "exception":true
     },
@@ -4143,8 +4089,7 @@
     },
     "FileTooLargeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified file exceeds the file size limit for CodeCommit. For more information about limits in CodeCommit, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/limits.html\">Quotas</a> in the <i>CodeCommit User Guide</i>.</p>",
       "exception":true
     },
@@ -4191,15 +4136,13 @@
     },
     "FolderContentSizeLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because at least one of the overall changes in the commit results in a folder whose contents exceed the limit of 6 MB. Either reduce the number and size of your changes, or split the changes across multiple folders.</p>",
       "exception":true
     },
     "FolderDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified folder does not exist. Either the folder name is not correct, or you did not enter the full path to the folder.</p>",
       "exception":true
     },
@@ -4926,449 +4869,385 @@
     "HunkContent":{"type":"string"},
     "IdempotencyParameterMismatchException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client request token is not valid. Either the token is not in a valid format, or the token has been used in a previous request and cannot be reused.</p>",
       "exception":true
     },
     "InvalidActorArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Resource Name (ARN) is not valid. Make sure that you have provided the full ARN for the user who initiated the change for the pull request, and then try again.</p>",
       "exception":true
     },
     "InvalidApprovalRuleContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The content for the approval rule is not valid.</p>",
       "exception":true
     },
     "InvalidApprovalRuleNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The name for the approval rule is not valid.</p>",
       "exception":true
     },
     "InvalidApprovalRuleTemplateContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The content of the approval rule template is not valid.</p>",
       "exception":true
     },
     "InvalidApprovalRuleTemplateDescriptionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The description for the approval rule template is not valid because it exceeds the maximum characters allowed for a description. For more information about limits in CodeCommit, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/limits.html\">Quotas</a> in the <i>CodeCommit User Guide</i>.</p>",
       "exception":true
     },
     "InvalidApprovalRuleTemplateNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The name of the approval rule template is not valid. Template names must be between 1 and 100 valid characters in length. For more information about limits in CodeCommit, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/limits.html\">Quotas</a> in the <i>CodeCommit User Guide</i>.</p>",
       "exception":true
     },
     "InvalidApprovalStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state for the approval is not valid. Valid values include APPROVE and REVOKE. </p>",
       "exception":true
     },
     "InvalidAuthorArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Resource Name (ARN) is not valid. Make sure that you have provided the full ARN for the author of the pull request, and then try again.</p>",
       "exception":true
     },
     "InvalidBlobIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified blob is not valid.</p>",
       "exception":true
     },
     "InvalidBranchNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reference name is not valid.</p>",
       "exception":true
     },
     "InvalidClientRequestTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client request token is not valid.</p>",
       "exception":true
     },
     "InvalidCommentIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The comment ID is not in a valid format. Make sure that you have provided the full comment ID.</p>",
       "exception":true
     },
     "InvalidCommitException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified commit is not valid.</p>",
       "exception":true
     },
     "InvalidCommitIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified commit ID is not valid.</p>",
       "exception":true
     },
     "InvalidConflictDetailLevelException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified conflict detail level is not valid.</p>",
       "exception":true
     },
     "InvalidConflictResolutionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified conflict resolution list is not valid.</p>",
       "exception":true
     },
     "InvalidConflictResolutionStrategyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified conflict resolution strategy is not valid.</p>",
       "exception":true
     },
     "InvalidContinuationTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified continuation token is not valid.</p>",
       "exception":true
     },
     "InvalidDeletionParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified deletion parameter is not valid.</p>",
       "exception":true
     },
     "InvalidDescriptionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request description is not valid. Descriptions cannot be more than 1,000 characters.</p>",
       "exception":true
     },
     "InvalidDestinationCommitSpecifierException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The destination commit specifier is not valid. You must provide a valid branch name, tag, or full commit ID. </p>",
       "exception":true
     },
     "InvalidEmailException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified email address either contains one or more characters that are not allowed, or it exceeds the maximum number of characters allowed for an email address.</p>",
       "exception":true
     },
     "InvalidFileLocationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The location of the file is not valid. Make sure that you include the file name and extension.</p>",
       "exception":true
     },
     "InvalidFileModeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified file mode permission is not valid. For a list of valid file mode permissions, see <a>PutFile</a>. </p>",
       "exception":true
     },
     "InvalidFilePositionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The position is not valid. Make sure that the line number exists in the version of the file you want to comment on.</p>",
       "exception":true
     },
     "InvalidMaxConflictFilesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified value for the number of conflict files to return is not valid.</p>",
       "exception":true
     },
     "InvalidMaxMergeHunksException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified value for the number of merge hunks to return is not valid.</p>",
       "exception":true
     },
     "InvalidMaxResultsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified number of maximum results is not valid.</p>",
       "exception":true
     },
     "InvalidMergeOptionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified merge option is not valid for this operation. Not all merge strategies are supported for all operations.</p>",
       "exception":true
     },
     "InvalidOrderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified sort order is not valid.</p>",
       "exception":true
     },
     "InvalidOverrideStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The override status is not valid. Valid statuses are OVERRIDE and REVOKE.</p>",
       "exception":true
     },
     "InvalidParentCommitIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The parent commit ID is not valid. The commit ID cannot be empty, and must match the head commit ID for the branch of the repository where you want to add or update a file.</p>",
       "exception":true
     },
     "InvalidPathException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified path is not valid.</p>",
       "exception":true
     },
     "InvalidPullRequestEventTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request event type is not valid. </p>",
       "exception":true
     },
     "InvalidPullRequestIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request ID is not valid. Make sure that you have provided the full ID and that the pull request is in the specified repository, and then try again.</p>",
       "exception":true
     },
     "InvalidPullRequestStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request status is not valid. The only valid values are <code>OPEN</code> and <code>CLOSED</code>.</p>",
       "exception":true
     },
     "InvalidPullRequestStatusUpdateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request status update is not valid. The only valid update is from <code>OPEN</code> to <code>CLOSED</code>.</p>",
       "exception":true
     },
     "InvalidReactionUserArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Resource Name (ARN) of the user or identity is not valid.</p>",
       "exception":true
     },
     "InvalidReactionValueException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value of the reaction is not valid. For more information, see the <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html\">CodeCommit User Guide</a>.</p>",
       "exception":true
     },
     "InvalidReferenceNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reference name format is not valid. Reference names must conform to the Git references format (for example, refs/heads/main). For more information, see <a href=\"https://git-scm.com/book/en/v2/Git-Internals-Git-References\">Git Internals - Git References</a> or consult your Git documentation.</p>",
       "exception":true
     },
     "InvalidRelativeFileVersionEnumException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Either the enum is not in a valid format, or the specified file version enum is not valid in respect to the current file version.</p>",
       "exception":true
     },
     "InvalidReplacementContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Automerge was specified for resolving the conflict, but the replacement type is not valid or content is missing. </p>",
       "exception":true
     },
     "InvalidReplacementTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Automerge was specified for resolving the conflict, but the specified replacement type is not valid.</p>",
       "exception":true
     },
     "InvalidRepositoryDescriptionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified repository description is not valid.</p>",
       "exception":true
     },
     "InvalidRepositoryNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A specified repository name is not valid.</p> <note> <p>This exception occurs only when a specified repository name is not valid. Other exceptions occur when a required repository parameter is missing, or when a specified repository does not exist.</p> </note>",
       "exception":true
     },
     "InvalidRepositoryTriggerBranchNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more branch names specified for the trigger is not valid.</p>",
       "exception":true
     },
     "InvalidRepositoryTriggerCustomDataException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The custom data provided for the trigger is not valid.</p>",
       "exception":true
     },
     "InvalidRepositoryTriggerDestinationArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Resource Name (ARN) for the trigger is not valid for the specified destination. The most common reason for this error is that the ARN does not meet the requirements for the service type.</p>",
       "exception":true
     },
     "InvalidRepositoryTriggerEventsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more events specified for the trigger is not valid. Check to make sure that all events specified match the requirements for allowed events.</p>",
       "exception":true
     },
     "InvalidRepositoryTriggerNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The name of the trigger is not valid.</p>",
       "exception":true
     },
     "InvalidRepositoryTriggerRegionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Web Services Region for the trigger target does not match the Amazon Web Services Region for the repository. Triggers must be created in the same Amazon Web Services Region as the target for the trigger.</p>",
       "exception":true
     },
     "InvalidResourceArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value for the resource ARN is not valid. For more information about resources in CodeCommit, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-iam-access-control-identity-based.html#arn-formats\">CodeCommit Resources and Operations</a> in the CodeCommit User Guide.</p>",
       "exception":true
     },
     "InvalidRevisionIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The revision ID is not valid. Use GetPullRequest to determine the value.</p>",
       "exception":true
     },
     "InvalidRuleContentSha256Exception":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The SHA-256 hash signature for the rule content is not valid.</p>",
       "exception":true
     },
     "InvalidSortByException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified sort by value is not valid.</p>",
       "exception":true
     },
     "InvalidSourceCommitSpecifierException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source commit specifier is not valid. You must provide a valid branch name, tag, or full commit ID.</p>",
       "exception":true
     },
     "InvalidSystemTagUsageException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified tag is not valid. Key names cannot be prefixed with aws:.</p>",
       "exception":true
     },
     "InvalidTagKeysListException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The list of tags is not valid.</p>",
       "exception":true
     },
     "InvalidTagsMapException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The map of tags is not valid.</p>",
       "exception":true
     },
     "InvalidTargetBranchException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target branch is not valid.</p>",
       "exception":true
     },
     "InvalidTargetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The target for the pull request is not valid. A target must contain the full values for the repository name, source branch, and destination branch for the pull request.</p>",
       "exception":true
     },
     "InvalidTargetsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The targets for the pull request is not valid or not in a valid format. Targets are a list of target objects. Each target object must contain the full values for the repository name, source branch, and destination branch for a pull request.</p>",
       "exception":true
     },
     "InvalidTitleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The title of the pull request is not valid. Pull request titles cannot exceed 100 characters in length.</p>",
       "exception":true
     },
@@ -5688,79 +5567,68 @@
     },
     "ManualMergeRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request cannot be merged automatically into the destination branch. You must manually merge the branches and resolve any conflicts.</p>",
       "exception":true
     },
     "MaxResults":{"type":"integer"},
     "MaximumBranchesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of branches for the trigger was exceeded.</p>",
       "exception":true
     },
     "MaximumConflictResolutionEntriesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of allowed conflict resolution entries was exceeded.</p>",
       "exception":true
     },
     "MaximumFileContentToLoadExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of files to load exceeds the allowed limit.</p>",
       "exception":true
     },
     "MaximumFileEntriesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of specified files to change as part of this commit exceeds the maximum number of files that can be changed in a single commit. Consider using a Git client for these changes.</p>",
       "exception":true
     },
     "MaximumItemsToCompareExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of items to compare between the source or destination branches and the merge base has exceeded the maximum allowed.</p>",
       "exception":true
     },
     "MaximumNumberOfApprovalsExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of approvals required for the approval rule exceeds the maximum number allowed.</p>",
       "exception":true
     },
     "MaximumOpenPullRequestsExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot create the pull request because the repository has too many open pull requests. The maximum number of open pull requests for a repository is 1,000. Close one or more open pull requests, and then try again.</p>",
       "exception":true
     },
     "MaximumRepositoryNamesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of allowed repository names was exceeded. Currently, this number is 100.</p>",
       "exception":true
     },
     "MaximumRepositoryTriggersExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of triggers allowed for the repository was exceeded.</p>",
       "exception":true
     },
     "MaximumRuleTemplatesAssociatedWithRepositoryException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of approval rule templates for a repository has been exceeded. You cannot associate more than 25 approval rule templates with a repository.</p>",
       "exception":true
     },
@@ -6019,8 +5887,7 @@
     },
     "MergeOptionRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A merge option or stategy is required, and none was provided.</p>",
       "exception":true
     },
@@ -6180,46 +6047,40 @@
     "Mode":{"type":"string"},
     "MultipleConflictResolutionEntriesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>More than one conflict resolution entries exists for the conflict. A conflict can have only one conflict resolution entry.</p>",
       "exception":true
     },
     "MultipleRepositoriesInPullRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot include more than one repository in a pull request. Make sure you have specified only one repository name in your request, and then try again.</p>",
       "exception":true
     },
     "Name":{"type":"string"},
     "NameLengthExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user name is not valid because it has exceeded the character limit for author names. </p>",
       "exception":true
     },
     "NextToken":{"type":"string"},
     "NoChangeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because no changes will be made to the repository as a result of this commit. A commit must contain at least one change.</p>",
       "exception":true
     },
     "NumberOfConflicts":{"type":"integer"},
     "NumberOfRuleTemplatesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of approval rule templates has been exceeded for this Amazon Web Services Region. </p>",
       "exception":true
     },
     "NumberOfRulesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval rule cannot be added. The pull request has the maximum number of approval rules associated with it.</p>",
       "exception":true
     },
@@ -6254,8 +6115,7 @@
     },
     "OperationNotAllowedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested action is not allowed.</p>",
       "exception":true
     },
@@ -6283,8 +6143,7 @@
     "Overridden":{"type":"boolean"},
     "OverrideAlreadySetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request has already had its approval rules set to override.</p>",
       "exception":true
     },
@@ -6319,29 +6178,25 @@
     },
     "OverrideStatusRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An override status is required, but no value was provided. Valid values include OVERRIDE and REVOKE.</p>",
       "exception":true
     },
     "ParentCommitDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The parent commit ID is not valid because it does not exist. The specified parent commit ID does not exist in the specified branch of the repository.</p>",
       "exception":true
     },
     "ParentCommitIdOutdatedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The file could not be added because the provided parent commit ID is not the current tip of the specified branch. To view the full commit ID of the current head of the branch, use <a>GetBranch</a>.</p>",
       "exception":true
     },
     "ParentCommitIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A parent commit ID is required. To view the full commit ID of a branch in a repository, use <a>GetBranch</a> or a Git command (for example, git pull or git log).</p>",
       "exception":true
     },
@@ -6352,15 +6207,13 @@
     "Path":{"type":"string"},
     "PathDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified path does not exist.</p>",
       "exception":true
     },
     "PathRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The folderPath for a location cannot be null.</p>",
       "exception":true
     },
@@ -6594,22 +6447,19 @@
     },
     "PullRequestAlreadyClosedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request status cannot be updated because it is already closed.</p>",
       "exception":true
     },
     "PullRequestApprovalRulesNotSatisfiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request cannot be merged because one or more approval rules applied to the pull request have conditions that have not been met.</p>",
       "exception":true
     },
     "PullRequestCannotBeApprovedByAuthorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval cannot be applied because the user approving the pull request matches the user who created the pull request. You cannot approve a pull request that you created.</p>",
       "exception":true
     },
@@ -6637,8 +6487,7 @@
     },
     "PullRequestDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pull request ID could not be found. Make sure that you have specified the correct repository name and pull request ID, and then try again.</p>",
       "exception":true
     },
@@ -6717,8 +6566,7 @@
     },
     "PullRequestIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A pull request ID is required, but none was provided.</p>",
       "exception":true
     },
@@ -6781,8 +6629,7 @@
     },
     "PullRequestStatusRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A pull request status is required, but none was provided.</p>",
       "exception":true
     },
@@ -6870,8 +6717,7 @@
     },
     "PutFileEntryConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because one or more files specified in the commit reference both a file and a folder.</p>",
       "exception":true
     },
@@ -6998,8 +6844,7 @@
     },
     "ReactionLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of reactions has been exceeded. Reactions are limited to one reaction per user for each individual comment ID.</p>",
       "exception":true
     },
@@ -7030,8 +6875,7 @@
     },
     "ReactionValueRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A reaction value is required. </p>",
       "exception":true
     },
@@ -7041,23 +6885,20 @@
     },
     "ReferenceDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reference does not exist. You must provide a full commit ID.</p>",
       "exception":true
     },
     "ReferenceName":{"type":"string"},
     "ReferenceNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A reference name is required, but none was provided.</p>",
       "exception":true
     },
     "ReferenceTypeNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reference is not a supported type. </p>",
       "exception":true
     },
@@ -7100,8 +6941,7 @@
     },
     "ReplacementContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>USE_NEW_CONTENT was specified, but no replacement content has been provided.</p>",
       "exception":true
     },
@@ -7116,8 +6956,7 @@
     },
     "ReplacementTypeRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A replacement type is required.</p>",
       "exception":true
     },
@@ -7127,16 +6966,14 @@
     },
     "RepositoryDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified repository does not exist.</p>",
       "exception":true
     },
     "RepositoryId":{"type":"string"},
     "RepositoryLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A repository resource limit was exceeded.</p>",
       "exception":true
     },
@@ -7202,8 +7039,7 @@
     },
     "RepositoryNameExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified repository name already exists.</p>",
       "exception":true
     },
@@ -7231,22 +7067,19 @@
     },
     "RepositoryNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A repository name is required, but was not specified.</p>",
       "exception":true
     },
     "RepositoryNamesRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one repository name object is required, but was not specified.</p>",
       "exception":true
     },
     "RepositoryNotAssociatedWithPullRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The repository does not contain any pull requests with that pull request ID. Use GetPullRequest to verify the correct repository name for the pull request ID.</p>",
       "exception":true
     },
@@ -7287,16 +7120,14 @@
     },
     "RepositoryTriggerBranchNameListRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one branch name is required, but was not specified in the trigger configuration.</p>",
       "exception":true
     },
     "RepositoryTriggerCustomData":{"type":"string"},
     "RepositoryTriggerDestinationArnRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A destination ARN for the target service for the trigger is required, but was not specified.</p>",
       "exception":true
     },
@@ -7315,8 +7146,7 @@
     },
     "RepositoryTriggerEventsListRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one event for the trigger is required, but was not specified.</p>",
       "exception":true
     },
@@ -7346,8 +7176,7 @@
     },
     "RepositoryTriggerNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A name for the trigger is required, but was not specified.</p>",
       "exception":true
     },
@@ -7358,23 +7187,20 @@
     },
     "RepositoryTriggersListRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The list of triggers for the repository is required, but was not specified.</p>",
       "exception":true
     },
     "ResourceArn":{"type":"string"},
     "ResourceArnRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A valid Amazon Resource Name (ARN) for an CodeCommit resource is required. For a list of valid resources in CodeCommit, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-iam-access-control-identity-based.html#arn-formats\">CodeCommit Resources and Operations</a> in the CodeCommit User Guide.</p>",
       "exception":true
     },
     "RestrictedSourceFileException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because one of the changes specifies copying or moving a .gitkeep file.</p>",
       "exception":true
     },
@@ -7389,30 +7215,26 @@
     "RevisionId":{"type":"string"},
     "RevisionIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A revision ID is required, but was not provided.</p>",
       "exception":true
     },
     "RevisionNotCurrentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The revision ID provided in the request does not match the current revision ID. Use GetPullRequest to retrieve the current revision ID.</p>",
       "exception":true
     },
     "RuleContentSha256":{"type":"string"},
     "SameFileContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The file was not added or updated because the content of the file is exactly the same as the content of that file in the repository and branch that you specified.</p>",
       "exception":true
     },
     "SamePathRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because one or more changes in this commit duplicate actions in the same file path. For example, you cannot make the same delete request to the same file in the same file path twice, or make a delete request and a move request to the same file as part of the same commit.</p>",
       "exception":true
     },
@@ -7447,15 +7269,13 @@
     },
     "SourceAndDestinationAreSameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source branch and destination branch for the pull request are the same. You must specify different branches for the source and destination.</p>",
       "exception":true
     },
     "SourceFileOrContentRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The commit cannot be created because no source files or file content have been specified for the commit.</p>",
       "exception":true
     },
@@ -7533,15 +7353,13 @@
     },
     "TagKeysListRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A list of tag keys is required. The list cannot be empty or null.</p>",
       "exception":true
     },
     "TagPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag policy is not valid.</p>",
       "exception":true
     },
@@ -7574,8 +7392,7 @@
     },
     "TagsMapRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A map of tags is required.</p>",
       "exception":true
     },
@@ -7607,15 +7424,13 @@
     },
     "TargetRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A pull request target is required. It cannot be empty or null. A pull request target must contain the full values for the repository name, source branch, and destination branch for the pull request.</p>",
       "exception":true
     },
     "TargetsRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An array of target objects is required. It cannot be empty or null.</p>",
       "exception":true
     },
@@ -7653,15 +7468,13 @@
     },
     "TipOfSourceReferenceIsDifferentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tip of the source branch in the destination repository does not match the tip of the source branch specified in your request. The pull request might have been updated. Make sure that you have the latest changes.</p>",
       "exception":true
     },
     "TipsDivergenceExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The divergence between the tips of the provided commit specifiers is too great to determine whether there might be any merge conflicts. Locally compare the specifiers using <code>git diff</code> or a diff tool.</p>",
       "exception":true
     },
@@ -7671,15 +7484,13 @@
     },
     "TitleRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A pull request title is required. It cannot be empty or null.</p>",
       "exception":true
     },
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of tags for an CodeCommit resource has been exceeded.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/codeconnections/2023-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codeconnections/2023-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codeconnections/2023-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeconnections/2023-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codeconnections/2023-12-01/service-2.json 2.31.35-1/awscli/botocore/data/codeconnections/2023-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/codeconnections/2023-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeconnections/2023-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -520,7 +520,7 @@
         },
         "ConnectionArn":{
           "shape":"ConnectionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between Amazon Web Servicesservices.</p> <note> <p>The ARN is never reused if the connection is deleted.</p> </note>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between Amazon Web Services services.</p> <note> <p>The ARN is never reused if the connection is deleted.</p> </note>"
         },
         "ProviderType":{
           "shape":"ProviderType",
@@ -756,8 +756,7 @@
     },
     "DeleteConnectionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteHostInput":{
       "type":"structure",
@@ -771,8 +770,7 @@
     },
     "DeleteHostOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRepositoryLinkInput":{
       "type":"structure",
@@ -786,8 +784,7 @@
     },
     "DeleteRepositoryLinkOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSyncConfigurationInput":{
       "type":"structure",
@@ -808,8 +805,7 @@
     },
     "DeleteSyncConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeploymentFilePath":{"type":"string"},
     "Directory":{"type":"string"},
@@ -1317,7 +1313,8 @@
         "GitHub",
         "GitHubEnterpriseServer",
         "GitLab",
-        "GitLabSelfManaged"
+        "GitLabSelfManaged",
+        "AzureDevOps"
       ]
     },
     "PublishDeploymentStatus":{
@@ -1915,8 +1912,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1983,8 +1979,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateHostInput":{
       "type":"structure",
@@ -2006,8 +2001,7 @@
     },
     "UpdateHostOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOutOfSyncException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codedeploy/2014-10-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codedeploy/2014-10-06/service-2.json 2.31.35-1/awscli/botocore/data/codedeploy/2014-10-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/codedeploy/2014-10-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codedeploy/2014-10-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -971,8 +971,7 @@
     "AlarmName":{"type":"string"},
     "AlarmsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of alarms for a deployment group (10) was exceeded.</p>",
       "exception":true
     },
@@ -992,15 +991,13 @@
     },
     "ApplicationAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An application with the specified name with the user or Amazon Web Services account already exists.</p>",
       "exception":true
     },
     "ApplicationDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The application does not exist with the user or Amazon Web Services account.</p>",
       "exception":true
     },
@@ -1037,8 +1034,7 @@
     },
     "ApplicationLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>More applications were attempted to be created than are allowed.</p>",
       "exception":true
     },
@@ -1049,8 +1045,7 @@
     },
     "ApplicationNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The minimum number of required application names was not specified.</p>",
       "exception":true
     },
@@ -1077,8 +1072,7 @@
     },
     "ArnNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The specified ARN is not supported. For example, it might be an ARN for a resource that is not expected. </p>",
       "exception":true
     },
@@ -1327,8 +1321,7 @@
     },
     "BatchLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of names or IDs allowed for this request (100) was exceeded.</p>",
       "exception":true
     },
@@ -1367,8 +1360,7 @@
     "Boolean":{"type":"boolean"},
     "BucketNameFilterRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A bucket name is required, but was not provided.</p>",
       "exception":true
     },
@@ -1744,42 +1736,36 @@
     },
     "DeleteResourcesByExternalIdOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeploymentAlreadyCompletedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment is already complete.</p>",
       "exception":true
     },
     "DeploymentAlreadyStartedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> A deployment to a target was attempted while another deployment was in progress. </p>",
       "exception":true
     },
     "DeploymentConfigAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A deployment configuration with the specified name with the user or Amazon Web Services account already exists.</p>",
       "exception":true
     },
     "DeploymentConfigDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment configuration does not exist with the user or Amazon Web Services account.</p>",
       "exception":true
     },
     "DeploymentConfigId":{"type":"string"},
     "DeploymentConfigInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment configuration is still in use.</p>",
       "exception":true
     },
@@ -1819,8 +1805,7 @@
     },
     "DeploymentConfigLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment configurations limit was exceeded.</p>",
       "exception":true
     },
@@ -1831,8 +1816,7 @@
     },
     "DeploymentConfigNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment configuration name was not specified.</p>",
       "exception":true
     },
@@ -1855,22 +1839,19 @@
     },
     "DeploymentDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment with the user or Amazon Web Services account does not exist.</p>",
       "exception":true
     },
     "DeploymentGroupAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A deployment group with the specified name with the user or Amazon Web Services account already exists.</p>",
       "exception":true
     },
     "DeploymentGroupDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The named deployment group with the user or Amazon Web Services account does not exist.</p>",
       "exception":true
     },
@@ -1979,8 +1960,7 @@
     },
     "DeploymentGroupLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The deployment groups limit was exceeded.</p>",
       "exception":true
     },
@@ -1991,8 +1971,7 @@
     },
     "DeploymentGroupNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment group name was not specified.</p>",
       "exception":true
     },
@@ -2003,8 +1982,7 @@
     "DeploymentId":{"type":"string"},
     "DeploymentIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one deployment ID must be specified.</p>",
       "exception":true
     },
@@ -2130,22 +2108,19 @@
     },
     "DeploymentIsNotInReadyStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment does not have a status of Ready and can't continue yet.</p>",
       "exception":true
     },
     "DeploymentLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of allowed deployments was exceeded.</p>",
       "exception":true
     },
     "DeploymentNotStartedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified deployment has not started.</p>",
       "exception":true
     },
@@ -2267,15 +2242,13 @@
     },
     "DeploymentTargetDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The provided target ID does not belong to the attempted deployment. </p>",
       "exception":true
     },
     "DeploymentTargetIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> A deployment target ID was not provided. </p>",
       "exception":true
     },
@@ -2285,8 +2258,7 @@
     },
     "DeploymentTargetListSizeExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The maximum number of targets that can be associated with an Amazon ECS or Lambda deployment was exceeded. The target list of both types of deployments must have exactly one item. This exception does not apply to EC2/On-premises deployments. </p>",
       "exception":true
     },
@@ -2335,8 +2307,7 @@
     "Description":{"type":"string"},
     "DescriptionTooLongException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The description is too long.</p>",
       "exception":true
     },
@@ -2428,8 +2399,7 @@
     },
     "ECSServiceMappingLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The Amazon ECS service is associated with more than one deployment groups. An Amazon ECS service can be associated with only one deployment group. </p>",
       "exception":true
     },
@@ -2827,8 +2797,7 @@
     },
     "GitHubAccountTokenDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No GitHub account connection exists with the named specified in the call.</p>",
       "exception":true
     },
@@ -2839,8 +2808,7 @@
     },
     "GitHubAccountTokenNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The call is missing a required GitHub account connection name.</p>",
       "exception":true
     },
@@ -2877,31 +2845,27 @@
     },
     "IamArnRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No IAM ARN was included in the request. You must use an IAM session ARN or user ARN in the request.</p>",
       "exception":true
     },
     "IamSessionArn":{"type":"string"},
     "IamSessionArnAlreadyRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request included an IAM session ARN that has already been used to register a different instance.</p>",
       "exception":true
     },
     "IamUserArn":{"type":"string"},
     "IamUserArnAlreadyRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified user ARN is already registered with an on-premises instance.</p>",
       "exception":true
     },
     "IamUserArnRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An user ARN was not specified.</p>",
       "exception":true
     },
@@ -2916,8 +2880,7 @@
     "InstanceCount":{"type":"long"},
     "InstanceDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified instance does not exist in the deployment group.</p>",
       "deprecated":true,
       "deprecatedMessage":"This exception is deprecated, use DeploymentTargetDoesNotExistException instead.",
@@ -2926,8 +2889,7 @@
     "InstanceId":{"type":"string"},
     "InstanceIdRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The instance ID was not specified.</p>",
       "deprecated":true,
       "deprecatedMessage":"This exception is deprecated, use DeploymentTargetIdRequiredException instead.",
@@ -2973,16 +2935,14 @@
     },
     "InstanceLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of allowed on-premises instances in a single call was exceeded.</p>",
       "exception":true
     },
     "InstanceName":{"type":"string"},
     "InstanceNameAlreadyRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified on-premises instance name is already registered.</p>",
       "exception":true
     },
@@ -2992,15 +2952,13 @@
     },
     "InstanceNameRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An on-premises instance name was not specified.</p>",
       "exception":true
     },
     "InstanceNotRegisteredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified on-premises instance is not registered.</p>",
       "exception":true
     },
@@ -3109,400 +3067,343 @@
     },
     "InvalidAlarmConfigException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The format of the alarm configuration is invalid. Possible causes include:</p> <ul> <li> <p>The alarm list is null.</p> </li> <li> <p>The alarm object is null.</p> </li> <li> <p>The alarm name is empty or null or exceeds the limit of 255 characters.</p> </li> <li> <p>Two alarms with the same name have been specified.</p> </li> <li> <p>The alarm configuration is enabled, but the alarm list is empty.</p> </li> </ul>",
       "exception":true
     },
     "InvalidApplicationNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The application name was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The specified ARN is not in a valid format. </p>",
       "exception":true
     },
     "InvalidAutoRollbackConfigException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The automatic rollback configuration was specified in an invalid format. For example, automatic rollback is enabled, but an invalid triggering event type or no event types were listed.</p>",
       "exception":true
     },
     "InvalidAutoScalingGroupException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Auto Scaling group was specified in an invalid format or does not exist.</p>",
       "exception":true
     },
     "InvalidBlueGreenDeploymentConfigurationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The configuration for the blue/green deployment group was provided in an invalid format. For information about deployment configuration format, see <a>CreateDeploymentConfig</a>.</p>",
       "exception":true
     },
     "InvalidBucketNameFilterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The bucket name either doesn't exist or was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidComputePlatformException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The computePlatform is invalid. The computePlatform should be <code>Lambda</code>, <code>Server</code>, or <code>ECS</code>.</p>",
       "exception":true
     },
     "InvalidDeployedStateFilterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployed state filter was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidDeploymentConfigNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment configuration name was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidDeploymentGroupNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The deployment group name was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidDeploymentIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one of the deployment IDs was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidDeploymentInstanceTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An instance type was specified for an in-place deployment. Instance types are supported for blue/green deployments only.</p>",
       "exception":true
     },
     "InvalidDeploymentStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified deployment status doesn't exist or cannot be determined.</p>",
       "exception":true
     },
     "InvalidDeploymentStyleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid deployment style was specified. Valid deployment types include \"IN_PLACE\" and \"BLUE_GREEN.\" Valid deployment options include \"WITH_TRAFFIC_CONTROL\" and \"WITHOUT_TRAFFIC_CONTROL.\"</p>",
       "exception":true
     },
     "InvalidDeploymentTargetIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The target ID provided was not valid. </p>",
       "exception":true
     },
     "InvalidDeploymentWaitTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The wait type is invalid. </p>",
       "exception":true
     },
     "InvalidEC2TagCombinationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A call was submitted that specified both Ec2TagFilters and Ec2TagSet, but only one of these data types can be used in a single call.</p>",
       "exception":true
     },
     "InvalidEC2TagException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidECSServiceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The Amazon ECS service identifier is not valid. </p>",
       "exception":true
     },
     "InvalidExternalIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The external ID was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidFileExistsBehaviorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid fileExistsBehavior option was specified to determine how CodeDeploy handles files or directories that already exist in a deployment target location, but weren't part of the previous successful deployment. Valid values include \"DISALLOW,\" \"OVERWRITE,\" and \"RETAIN.\"</p>",
       "exception":true
     },
     "InvalidGitHubAccountTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The GitHub token is not valid.</p>",
       "exception":true
     },
     "InvalidGitHubAccountTokenNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The format of the specified GitHub account connection name is invalid.</p>",
       "exception":true
     },
     "InvalidIamSessionArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The IAM session ARN was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidIamUserArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user ARN was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidIgnoreApplicationStopFailuresValueException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The IgnoreApplicationStopFailures value is invalid. For Lambda deployments, <code>false</code> is expected. For EC2/On-premises deployments, <code>true</code> or <code>false</code> is expected.</p>",
       "exception":true
     },
     "InvalidInputException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidInstanceIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> </p>",
       "exception":true
     },
     "InvalidInstanceNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The on-premises instance name was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidInstanceStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified instance status does not exist.</p>",
       "exception":true
     },
     "InvalidInstanceTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid instance type was specified for instances in a blue/green deployment. Valid values include \"Blue\" for an original environment and \"Green\" for a replacement environment.</p>",
       "exception":true
     },
     "InvalidKeyPrefixFilterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified key prefix filter was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidLifecycleEventHookExecutionIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A lifecycle event hook is invalid. Review the <code>hooks</code> section in your AppSpec file to ensure the lifecycle events and <code>hooks</code> functions are valid.</p>",
       "exception":true
     },
     "InvalidLifecycleEventHookExecutionStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of a Lambda validation function that verifies a lifecycle event is invalid. It should return <code>Succeeded</code> or <code>Failed</code>.</p>",
       "exception":true
     },
     "InvalidLoadBalancerInfoException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid load balancer name, or no load balancer name, was specified.</p>",
       "exception":true
     },
     "InvalidMinimumHealthyHostValueException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The minimum healthy instance value was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidNextTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The next token was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidOnPremisesTagCombinationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A call was submitted that specified both OnPremisesTagFilters and OnPremisesTagSet, but only one of these data types can be used in a single call.</p>",
       "exception":true
     },
     "InvalidOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid operation was detected.</p>",
       "exception":true
     },
     "InvalidRegistrationStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The registration status was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidRevisionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The revision was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidRoleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The service role ARN was specified in an invalid format. Or, if an Auto Scaling group was specified, the specified service role does not grant the appropriate permissions to Amazon EC2 Auto Scaling.</p>",
       "exception":true
     },
     "InvalidSortByException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The column name to sort by is either not present or was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidSortOrderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The sort order was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidTagException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidTagFilterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag filter was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidTagsToAddException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The specified tags are not valid. </p>",
       "exception":true
     },
     "InvalidTargetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> A target is not valid. </p>",
       "exception":true
     },
     "InvalidTargetFilterNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The target filter name is invalid. </p>",
       "exception":true
     },
     "InvalidTargetGroupPairException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> A target group pair associated with this deployment is not valid. </p>",
       "exception":true
     },
     "InvalidTargetInstancesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The target instance configuration is invalid. Possible causes include:</p> <ul> <li> <p>Configuration data for target instances was entered for an in-place deployment.</p> </li> <li> <p>The limit of 10 tags for a tag type was exceeded.</p> </li> <li> <p>The combined length of the tag names exceeded the limit. </p> </li> <li> <p>A specified tag is not currently applied to any instances.</p> </li> </ul>",
       "exception":true
     },
     "InvalidTimeRangeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified time range was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidTrafficRoutingConfigurationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The configuration that specifies how traffic is routed during a deployment is invalid.</p>",
       "exception":true
     },
     "InvalidTriggerConfigException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The trigger was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidUpdateOutdatedInstancesOnlyValueException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The UpdateOutdatedInstancesOnly value is invalid. For Lambda deployments, <code>false</code> is expected. For EC2/On-premises deployments, <code>true</code> or <code>false</code> is expected.</p>",
       "exception":true
     },
     "InvalidZonalDeploymentConfigurationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>ZonalConfig</code> object is not valid.</p>",
       "exception":true
     },
@@ -3630,8 +3531,7 @@
     },
     "LifecycleEventAlreadyCompletedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An attempt to return the status of an already completed lifecycle event occurred.</p>",
       "exception":true
     },
@@ -3654,8 +3554,7 @@
     },
     "LifecycleHookLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The limit for lifecycle hooks was exceeded.</p>",
       "exception":true
     },
@@ -4064,8 +3963,7 @@
     "MinimumHealthyHostsValue":{"type":"integer"},
     "MultipleIamArnsProvidedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Both an user ARN and an IAM session ARN were included in the request. Use only one ARN type.</p>",
       "exception":true
     },
@@ -4087,8 +3985,7 @@
     },
     "OperationNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The API used does not support the deployment.</p>",
       "exception":true
     },
@@ -4227,22 +4124,19 @@
     "Repository":{"type":"string"},
     "ResourceArnRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The ARN of a resource is required, but was not found. </p>",
       "exception":true
     },
     "ResourceValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource could not be validated.</p>",
       "exception":true
     },
     "RevisionDoesNotExistException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The named revision does not exist with the user or Amazon Web Services account.</p>",
       "exception":true
     },
@@ -4305,16 +4199,14 @@
     },
     "RevisionRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The revision ID was not specified.</p>",
       "exception":true
     },
     "Role":{"type":"string"},
     "RoleRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The role ID was not specified.</p>",
       "exception":true
     },
@@ -4467,8 +4359,7 @@
     },
     "TagLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum allowed number of tags was exceeded.</p>",
       "exception":true
     },
@@ -4478,8 +4369,7 @@
     },
     "TagRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A tag was not specified.</p>",
       "exception":true
     },
@@ -4502,13 +4392,11 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagSetListLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of tag groups included in the tag set list exceeded the maximum allowed limit of 3.</p>",
       "exception":true
     },
@@ -4606,8 +4494,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An API function was called too frequently.</p>",
       "exception":true
     },
@@ -4737,15 +4624,13 @@
     "TriggerTargetArn":{"type":"string"},
     "TriggerTargetsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum allowed number of triggers was exceeded.</p>",
       "exception":true
     },
     "UnsupportedActionForDeploymentTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A call was submitted that is not supported for the specified deployment type.</p>",
       "exception":true
     },
@@ -4768,8 +4653,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationInput":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/service-2.json 2.31.35-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguru-reviewer/2019-09-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"codeguru-reviewer",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"CodeGuruReviewer",
     "serviceFullName":"Amazon CodeGuru Reviewer",
     "serviceId":"CodeGuru Reviewer",
     "signatureVersion":"v4",
     "signingName":"codeguru-reviewer",
-    "uid":"codeguru-reviewer-2019-09-19"
+    "uid":"codeguru-reviewer-2019-09-19",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateRepository":{
@@ -1155,8 +1157,7 @@
     },
     "PutRecommendationFeedbackResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Reaction":{
       "type":"string",
@@ -1682,8 +1683,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1757,8 +1757,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UserId":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,8 +2,8 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"codeguru-security",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Amazon CodeGuru Security",
@@ -25,8 +25,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns a list of requested findings from standard scans.</p>"
     },
@@ -44,8 +44,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Use to create a scan using code uploaded to an Amazon S3 bucket.</p>"
     },
@@ -61,8 +61,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Generates a pre-signed URL, request headers used to upload a code resource, and code artifact identifier for the uploaded resource.</p> <p>You can upload your code resource to the URL with the request headers using any HTTP client.</p>"
     },
@@ -78,8 +78,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Use to get the encryption configuration for an account.</p>"
     },
@@ -97,8 +97,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns a list of all findings generated by a particular scan.</p>"
     },
@@ -114,8 +114,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns a summary of metrics for an account from a specified date, including number of open findings, the categories with most findings, the scans with most open findings, and scans with most open critical findings. </p>"
     },
@@ -132,8 +132,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns details about a scan, including whether or not a scan has completed.</p>"
     },
@@ -149,8 +149,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns metrics about all findings in an account within a specified time range.</p>"
     },
@@ -166,8 +166,8 @@
       "errors":[
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns a list of all scans in an account. Does not return <code>EXPRESS</code> scans.</p>"
     },
@@ -185,8 +185,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Returns a list of all tags associated with a scan.</p>"
     },
@@ -204,8 +204,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Use to add one or more tags to an existing scan.</p>"
     },
@@ -223,8 +223,8 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Use to remove one or more tags from an existing scan.</p>",
       "idempotent":true
@@ -242,8 +242,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
       ],
       "documentation":"<p>Use to update the encryption configuration for an account.</p>"
     }
@@ -283,25 +283,25 @@
     "AccountFindingsMetric":{
       "type":"structure",
       "members":{
-        "closedFindings":{
-          "shape":"FindingMetricsValuePerSeverity",
-          "documentation":"<p>The number of closed findings of each severity on the specified date.</p>"
-        },
         "date":{
           "shape":"Timestamp",
           "documentation":"<p>The date from which the findings metrics were retrieved.</p>"
         },
-        "meanTimeToClose":{
-          "shape":"FindingMetricsValuePerSeverity",
-          "documentation":"<p>The average time in days it takes to close findings of each severity as of a specified date.</p>"
-        },
         "newFindings":{
           "shape":"FindingMetricsValuePerSeverity",
           "documentation":"<p>The number of new findings of each severity on the specified date.</p>"
         },
+        "closedFindings":{
+          "shape":"FindingMetricsValuePerSeverity",
+          "documentation":"<p>The number of closed findings of each severity on the specified date.</p>"
+        },
         "openFindings":{
           "shape":"FindingMetricsValuePerSeverity",
           "documentation":"<p>The number of open findings of each severity as of the specified date.</p>"
+        },
+        "meanTimeToClose":{
+          "shape":"FindingMetricsValuePerSeverity",
+          "documentation":"<p>The average time in days it takes to close findings of each severity as of a specified date.</p>"
         }
       },
       "documentation":"<p>A summary of findings metrics for an account on a specified date.</p>"
@@ -316,27 +316,27 @@
     "BatchGetFindingsError":{
       "type":"structure",
       "required":[
-        "errorCode",
+        "scanName",
         "findingId",
-        "message",
-        "scanName"
+        "errorCode",
+        "message"
       ],
       "members":{
-        "errorCode":{
-          "shape":"ErrorCode",
-          "documentation":"<p>A code associated with the type of error.</p>"
+        "scanName":{
+          "shape":"ScanName",
+          "documentation":"<p>The name of the scan that generated the finding.</p>"
         },
         "findingId":{
           "shape":"String",
           "documentation":"<p>The finding ID of the finding that was not fetched.</p>"
         },
+        "errorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>A code associated with the type of error.</p>"
+        },
         "message":{
           "shape":"String",
           "documentation":"<p>Describes the error.</p>"
-        },
-        "scanName":{
-          "shape":"ScanName",
-          "documentation":"<p>The name of the scan that generated the finding.</p>"
         }
       },
       "documentation":"<p>Contains information about the error that caused a finding to fail to be retrieved.</p>"
@@ -358,17 +358,17 @@
     "BatchGetFindingsResponse":{
       "type":"structure",
       "required":[
-        "failedFindings",
-        "findings"
+        "findings",
+        "failedFindings"
       ],
       "members":{
-        "failedFindings":{
-          "shape":"BatchGetFindingsErrors",
-          "documentation":"<p>A list of errors for individual findings which were not fetched. Each BatchGetFindingsError contains the <code>scanName</code>, <code>findingId</code>, <code>errorCode</code> and error <code>message</code>.</p>"
-        },
         "findings":{
           "shape":"Findings",
           "documentation":"<p> A list of all findings which were successfully fetched.</p>"
+        },
+        "failedFindings":{
+          "shape":"BatchGetFindingsErrors",
+          "documentation":"<p>A list of errors for individual findings which were not fetched. Each BatchGetFindingsError contains the <code>scanName</code>, <code>findingId</code>, <code>errorCode</code> and error <code>message</code>.</p>"
         }
       }
     },
@@ -396,18 +396,18 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[\\S]+$"
+      "pattern":"[\\S]+"
     },
     "CodeLine":{
       "type":"structure",
       "members":{
-        "content":{
-          "shape":"String",
-          "documentation":"<p>The code that contains a vulnerability.</p>"
-        },
         "number":{
           "shape":"Integer",
           "documentation":"<p>The code line number.</p>"
+        },
+        "content":{
+          "shape":"String",
+          "documentation":"<p>The code that contains a vulnerability.</p>"
         }
       },
       "documentation":"<p>The line of code where a finding was detected.</p>"
@@ -456,10 +456,6 @@
         "scanName"
       ],
       "members":{
-        "analysisType":{
-          "shape":"AnalysisType",
-          "documentation":"<p>The type of analysis you want CodeGuru Security to perform in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings. Defaults to <code>Security</code> type if missing.</p>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>The idempotency token for the request. Amazon CodeGuru Security uses this value to prevent the accidental creation of duplicate scans if there are failures and retries.</p>",
@@ -477,6 +473,10 @@
           "shape":"ScanType",
           "documentation":"<p>The type of scan, either <code>Standard</code> or <code>Express</code>. Defaults to <code>Standard</code> type if missing.</p> <p> <code>Express</code> scans run on limited resources and use a limited set of detectors to analyze your code in near-real time. <code>Standard</code> scans have standard resource limits and use the full set of detectors to analyze your code.</p>"
         },
+        "analysisType":{
+          "shape":"AnalysisType",
+          "documentation":"<p>The type of analysis you want CodeGuru Security to perform in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings. Defaults to <code>Security</code> type if missing.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>An array of key-value pairs used to tag a scan. A tag is a custom attribute label with two parts:</p> <ul> <li> <p>A tag key. For example, <code>CostCenter</code>, <code>Environment</code>, or <code>Secret</code>. Tag keys are case sensitive.</p> </li> <li> <p>An optional tag value field. For example, <code>111122223333</code>, <code>Production</code>, or a team name. Omitting the tag value is the same as using an empty string. Tag values are case sensitive.</p> </li> </ul>"
@@ -486,31 +486,31 @@
     "CreateScanResponse":{
       "type":"structure",
       "required":[
-        "resourceId",
-        "runId",
         "scanName",
+        "runId",
+        "resourceId",
         "scanState"
       ],
       "members":{
-        "resourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The identifier for the resource object that contains resources that were scanned.</p>"
+        "scanName":{
+          "shape":"ScanName",
+          "documentation":"<p>The name of the scan.</p>"
         },
         "runId":{
           "shape":"Uuid",
           "documentation":"<p>UUID that identifies the individual scan run.</p>"
         },
-        "scanName":{
-          "shape":"ScanName",
-          "documentation":"<p>The name of the scan.</p>"
-        },
-        "scanNameArn":{
-          "shape":"ScanNameArn",
-          "documentation":"<p>The ARN for the scan name.</p>"
+        "resourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The identifier for the resource object that contains resources that were scanned.</p>"
         },
         "scanState":{
           "shape":"ScanState",
           "documentation":"<p>The current state of the scan. Returns either <code>InProgress</code>, <code>Successful</code>, or <code>Failed</code>.</p>"
+        },
+        "scanNameArn":{
+          "shape":"ScanNameArn",
+          "documentation":"<p>The ARN for the scan name.</p>"
         }
       }
     },
@@ -527,22 +527,22 @@
     "CreateUploadUrlResponse":{
       "type":"structure",
       "required":[
-        "codeArtifactId",
+        "s3Url",
         "requestHeaders",
-        "s3Url"
+        "codeArtifactId"
       ],
       "members":{
-        "codeArtifactId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier for the uploaded code resource. Pass this to <code>CreateScan</code> to use the uploaded resources.</p>"
+        "s3Url":{
+          "shape":"S3Url",
+          "documentation":"<p>A pre-signed S3 URL. You can upload the code file you want to scan with the required <code>requestHeaders</code> using any HTTP client.</p>"
         },
         "requestHeaders":{
           "shape":"RequestHeaderMap",
           "documentation":"<p>A set of key-value pairs that contain the required headers when uploading your resource.</p>"
         },
-        "s3Url":{
-          "shape":"S3Url",
-          "documentation":"<p>A pre-signed S3 URL. You can upload the code file you want to scan with the required <code>requestHeaders</code> using any HTTP client.</p>"
+        "codeArtifactId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier for the uploaded code resource. Pass this to <code>CreateScan</code> to use the uploaded resources.</p>"
         }
       }
     },
@@ -581,14 +581,6 @@
     "FilePath":{
       "type":"structure",
       "members":{
-        "codeSnippet":{
-          "shape":"CodeSnippet",
-          "documentation":"<p>A list of <code>CodeLine</code> objects that describe where the security vulnerability appears in your code.</p>"
-        },
-        "endLine":{
-          "shape":"Integer",
-          "documentation":"<p>The last line number of the code snippet where the security vulnerability appears in your code.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the file.</p>"
@@ -600,6 +592,14 @@
         "startLine":{
           "shape":"Integer",
           "documentation":"<p>The first line number of the code snippet where the security vulnerability appears in your code.</p>"
+        },
+        "endLine":{
+          "shape":"Integer",
+          "documentation":"<p>The last line number of the code snippet where the security vulnerability appears in your code.</p>"
+        },
+        "codeSnippet":{
+          "shape":"CodeSnippet",
+          "documentation":"<p>A list of <code>CodeLine</code> objects that describe where the security vulnerability appears in your code.</p>"
         }
       },
       "documentation":"<p>Information about the location of security vulnerabilities that Amazon CodeGuru Security detected in your code.</p>"
@@ -615,18 +615,6 @@
           "shape":"String",
           "documentation":"<p>A description of the finding.</p>"
         },
-        "detectorId":{
-          "shape":"String",
-          "documentation":"<p>The identifier for the detector that detected the finding in your code. A detector is a defined rule based on industry standards and AWS best practices. </p>"
-        },
-        "detectorName":{
-          "shape":"String",
-          "documentation":"<p>The name of the detector that identified the security vulnerability in your code. </p>"
-        },
-        "detectorTags":{
-          "shape":"DetectorTags",
-          "documentation":"<p>One or more tags or categorizations that are associated with a detector. These tags are defined by type, programming language, or other classification such as maintainability or consistency.</p>"
-        },
         "generatorId":{
           "shape":"String",
           "documentation":"<p>The identifier for the component that generated a finding such as AmazonCodeGuruSecurity.</p>"
@@ -635,41 +623,53 @@
           "shape":"String",
           "documentation":"<p>The identifier for a finding.</p>"
         },
-        "remediation":{
-          "shape":"Remediation",
-          "documentation":"<p>An object that contains the details about how to remediate a finding.</p>"
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the finding was last updated. Findings are updated when you remediate them or when the finding code location changes. </p>"
+        },
+        "type":{
+          "shape":"String",
+          "documentation":"<p>The type of finding. </p>"
+        },
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the finding. A finding status can be open or closed. </p>"
         },
         "resource":{
           "shape":"Resource",
           "documentation":"<p>The resource where Amazon CodeGuru Security detected a finding.</p>"
         },
-        "ruleId":{
-          "shape":"String",
-          "documentation":"<p>The identifier for the rule that generated the finding.</p>"
+        "vulnerability":{
+          "shape":"Vulnerability",
+          "documentation":"<p>An object that describes the detected security vulnerability.</p>"
         },
         "severity":{
           "shape":"Severity",
           "documentation":"<p>The severity of the finding. Severity can be critical, high, medium, low, or informational. For information on severity levels, see <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/findings-overview.html#severity-distribution\">Finding severity</a> in the <i>Amazon CodeGuru Security User Guide</i>.</p>"
         },
-        "status":{
-          "shape":"Status",
-          "documentation":"<p>The status of the finding. A finding status can be open or closed. </p>"
+        "remediation":{
+          "shape":"Remediation",
+          "documentation":"<p>An object that contains the details about how to remediate a finding.</p>"
         },
         "title":{
           "shape":"String",
           "documentation":"<p>The title of the finding.</p>"
         },
-        "type":{
+        "detectorTags":{
+          "shape":"DetectorTags",
+          "documentation":"<p>One or more tags or categorizations that are associated with a detector. These tags are defined by type, programming language, or other classification such as maintainability or consistency.</p>"
+        },
+        "detectorId":{
           "shape":"String",
-          "documentation":"<p>The type of finding. </p>"
+          "documentation":"<p>The identifier for the detector that detected the finding in your code. A detector is a defined rule based on industry standards and AWS best practices. </p>"
         },
-        "updatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when the finding was last updated. Findings are updated when you remediate them or when the finding code location changes. </p>"
+        "detectorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the detector that identified the security vulnerability in your code. </p>"
         },
-        "vulnerability":{
-          "shape":"Vulnerability",
-          "documentation":"<p>An object that describes the detected security vulnerability.</p>"
+        "ruleId":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the rule that generated the finding.</p>"
         }
       },
       "documentation":"<p>Information about a finding that was detected in your code.</p>"
@@ -677,17 +677,17 @@
     "FindingIdentifier":{
       "type":"structure",
       "required":[
-        "findingId",
-        "scanName"
+        "scanName",
+        "findingId"
       ],
       "members":{
-        "findingId":{
-          "shape":"String",
-          "documentation":"<p>The identifier for a finding.</p>"
-        },
         "scanName":{
           "shape":"String",
           "documentation":"<p>The name of the scan that generated the finding. </p>"
+        },
+        "findingId":{
+          "shape":"String",
+          "documentation":"<p>The identifier for a finding.</p>"
         }
       },
       "documentation":"<p>An object that contains information about a finding and the scan that generated it. </p>"
@@ -701,14 +701,6 @@
     "FindingMetricsValuePerSeverity":{
       "type":"structure",
       "members":{
-        "critical":{
-          "shape":"Double",
-          "documentation":"<p>A numeric value corresponding to a critical finding.</p>"
-        },
-        "high":{
-          "shape":"Double",
-          "documentation":"<p>A numeric value corresponding to a high severity finding.</p>"
-        },
         "info":{
           "shape":"Double",
           "documentation":"<p>A numeric value corresponding to an informational finding.</p>"
@@ -720,6 +712,14 @@
         "medium":{
           "shape":"Double",
           "documentation":"<p>A numeric value corresponding to a medium severity finding.</p>"
+        },
+        "high":{
+          "shape":"Double",
+          "documentation":"<p>A numeric value corresponding to a high severity finding.</p>"
+        },
+        "critical":{
+          "shape":"Double",
+          "documentation":"<p>A numeric value corresponding to a critical finding.</p>"
         }
       },
       "documentation":"<p>A numeric value corresponding to the severity of a finding, such as the number of open findings or the average time it takes to close findings of a given severity.</p>"
@@ -734,8 +734,7 @@
     },
     "GetAccountConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAccountConfigurationResponse":{
       "type":"structure",
@@ -751,11 +750,11 @@
       "type":"structure",
       "required":["scanName"],
       "members":{
-        "maxResults":{
-          "shape":"GetFindingsRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 1000 results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "scanName":{
+          "shape":"ScanName",
+          "documentation":"<p>The name of the scan you want to retrieve findings from.</p>",
+          "location":"uri",
+          "locationName":"scanName"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -763,11 +762,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "scanName":{
-          "shape":"ScanName",
-          "documentation":"<p>The name of the scan you want to retrieve findings from.</p>",
-          "location":"uri",
-          "locationName":"scanName"
+        "maxResults":{
+          "shape":"GetFindingsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 1000 results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         },
         "status":{
           "shape":"Status",
@@ -821,65 +820,65 @@
       "type":"structure",
       "required":["scanName"],
       "members":{
-        "runId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID that identifies the individual scan run you want to view details about. You retrieve this when you call the <code>CreateScan</code> operation. Defaults to the latest scan run if missing.</p>",
-          "location":"querystring",
-          "locationName":"runId"
-        },
         "scanName":{
           "shape":"ScanName",
           "documentation":"<p>The name of the scan you want to view details about.</p>",
           "location":"uri",
           "locationName":"scanName"
+        },
+        "runId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID that identifies the individual scan run you want to view details about. You retrieve this when you call the <code>CreateScan</code> operation. Defaults to the latest scan run if missing.</p>",
+          "location":"querystring",
+          "locationName":"runId"
         }
       }
     },
     "GetScanResponse":{
       "type":"structure",
       "required":[
-        "analysisType",
-        "createdAt",
-        "runId",
         "scanName",
-        "scanState"
+        "runId",
+        "scanState",
+        "createdAt",
+        "analysisType"
       ],
       "members":{
-        "analysisType":{
-          "shape":"AnalysisType",
-          "documentation":"<p>The type of analysis CodeGuru Security performed in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings.</p>"
+        "scanName":{
+          "shape":"ScanName",
+          "documentation":"<p>The name of the scan.</p>"
+        },
+        "runId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID that identifies the individual scan run.</p>"
+        },
+        "scanState":{
+          "shape":"ScanState",
+          "documentation":"<p>The current state of the scan. Returns either <code>InProgress</code>, <code>Successful</code>, or <code>Failed</code>.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The time the scan was created.</p>"
         },
-        "errorMessage":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>Details about the error that causes a scan to fail to be retrieved.</p>"
+        "analysisType":{
+          "shape":"AnalysisType",
+          "documentation":"<p>The type of analysis CodeGuru Security performed in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the scan was last updated. Only available for <code>STANDARD</code> scan types.</p>"
         },
         "numberOfRevisions":{
           "shape":"Long",
           "documentation":"<p>The number of times a scan has been re-run on a revised resource.</p>"
         },
-        "runId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID that identifies the individual scan run.</p>"
-        },
-        "scanName":{
-          "shape":"ScanName",
-          "documentation":"<p>The name of the scan.</p>"
-        },
         "scanNameArn":{
           "shape":"ScanNameArn",
           "documentation":"<p>The ARN for the scan name.</p>"
         },
-        "scanState":{
-          "shape":"ScanState",
-          "documentation":"<p>The current state of the scan. Returns either <code>InProgress</code>, <code>Successful</code>, or <code>Failed</code>.</p>"
-        },
-        "updatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when the scan was last updated. Only available for <code>STANDARD</code> scan types.</p>"
+        "errorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>Details about the error that causes a scan to fail to be retrieved.</p>"
         }
       }
     },
@@ -917,20 +916,20 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws:kms:[\\S]+:[\\d]{12}:key\\/(([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})|(mrk-[0-9a-zA-Z]{32}))$"
+      "pattern":"arn:aws:kms:[\\S]+:[\\d]{12}:key\\/(([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})|(mrk-[0-9a-zA-Z]{32}))"
     },
     "ListFindingsMetricsRequest":{
       "type":"structure",
       "required":[
-        "endDate",
-        "startDate"
+        "startDate",
+        "endDate"
       ],
       "members":{
-        "endDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end date of the interval which you want to retrieve metrics from. Round to the nearest day.</p>",
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
           "location":"querystring",
-          "locationName":"endDate"
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"ListFindingsMetricsRequestMaxResultsInteger",
@@ -938,17 +937,17 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
         "startDate":{
           "shape":"Timestamp",
           "documentation":"<p>The start date of the interval which you want to retrieve metrics from. Rounds to the nearest day.</p>",
           "location":"querystring",
           "locationName":"startDate"
+        },
+        "endDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end date of the interval which you want to retrieve metrics from. Round to the nearest day.</p>",
+          "location":"querystring",
+          "locationName":"endDate"
         }
       }
     },
@@ -974,17 +973,17 @@
     "ListScansRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListScansRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 100 results.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListScansRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 100 results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -997,13 +996,13 @@
     "ListScansResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token. You can use this in future calls to <code>ListScans</code> to continue listing results after the current page.</p>"
-        },
         "summaries":{
           "shape":"ScanSummaries",
           "documentation":"<p>A list of <code>ScanSummary</code> objects with information about all scans in an account.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token. You can use this in future calls to <code>ListScans</code> to continue listing results after the current page.</p>"
         }
       }
     },
@@ -1035,10 +1034,6 @@
     "MetricsSummary":{
       "type":"structure",
       "members":{
-        "categoriesWithMostFindings":{
-          "shape":"CategoriesWithMostFindings",
-          "documentation":"<p>A list of <code>CategoryWithFindingNum</code> objects for the top 5 finding categories with the most findings.</p>"
-        },
         "date":{
           "shape":"Timestamp",
           "documentation":"<p>The date from which the metrics summary information was retrieved.</p>"
@@ -1047,13 +1042,17 @@
           "shape":"FindingMetricsValuePerSeverity",
           "documentation":"<p>The number of open findings of each severity.</p>"
         },
-        "scansWithMostOpenCriticalFindings":{
-          "shape":"ScansWithMostOpenCriticalFindings",
-          "documentation":"<p>A list of <code>ScanNameWithFindingNum</code> objects for the top 3 scans with the most number of open critical findings.</p>"
+        "categoriesWithMostFindings":{
+          "shape":"CategoriesWithMostFindings",
+          "documentation":"<p>A list of <code>CategoryWithFindingNum</code> objects for the top 5 finding categories with the most findings.</p>"
         },
         "scansWithMostOpenFindings":{
           "shape":"ScansWithMostOpenFindings",
           "documentation":"<p>A list of <code>ScanNameWithFindingNum</code> objects for the top 3 scans with the most number of open findings.</p>"
+        },
+        "scansWithMostOpenCriticalFindings":{
+          "shape":"ScansWithMostOpenCriticalFindings",
+          "documentation":"<p>A list of <code>ScanNameWithFindingNum</code> objects for the top 3 scans with the most number of open critical findings.</p>"
         }
       },
       "documentation":"<p>A summary of metrics for an account as of a specified date.</p>"
@@ -1062,7 +1061,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^[\\S]+$"
+      "pattern":"[\\S]+"
     },
     "Recommendation":{
       "type":"structure",
@@ -1173,24 +1172,24 @@
       "type":"string",
       "max":140,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-_$:.]*$"
+      "pattern":"[a-zA-Z0-9-_$:.]*"
     },
     "ScanNameArn":{
       "type":"string",
       "max":300,
       "min":1,
-      "pattern":"^arn:aws:codeguru-security:[\\S]+:[\\d]{12}:scans\\/[a-zA-Z0-9-_$:.]*$"
+      "pattern":"arn:aws:codeguru-security:[\\S]+:[\\d]{12}:scans\\/[a-zA-Z0-9-_$:.]*"
     },
     "ScanNameWithFindingNum":{
       "type":"structure",
       "members":{
-        "findingNumber":{
-          "shape":"Integer",
-          "documentation":"<p>The number of findings generated by a scan.</p>"
-        },
         "scanName":{
           "shape":"String",
           "documentation":"<p>The name of the scan.</p>"
+        },
+        "findingNumber":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings generated by a scan.</p>"
         }
       },
       "documentation":"<p>Information about the number of findings generated by a scan.</p>"
@@ -1210,35 +1209,35 @@
     "ScanSummary":{
       "type":"structure",
       "required":[
+        "scanState",
         "createdAt",
-        "runId",
         "scanName",
-        "scanState"
+        "runId"
       ],
       "members":{
+        "scanState":{
+          "shape":"ScanState",
+          "documentation":"<p>The state of the scan. A scan can be <code>In Progress</code>, <code>Complete</code>, or <code>Failed</code>. </p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p> The time when the scan was created. </p>"
         },
-        "runId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier for the scan run. </p>"
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the scan was last updated. A scan is updated when it is re-run.</p>"
         },
         "scanName":{
           "shape":"ScanName",
           "documentation":"<p>The name of the scan. </p>"
         },
+        "runId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier for the scan run. </p>"
+        },
         "scanNameArn":{
           "shape":"ScanNameArn",
           "documentation":"<p>The ARN for the scan name.</p>"
-        },
-        "scanState":{
-          "shape":"ScanState",
-          "documentation":"<p>The state of the scan. A scan can be <code>In Progress</code>, <code>Complete</code>, or <code>Failed</code>. </p>"
-        },
-        "updatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the scan was last updated. A scan is updated when it is re-run.</p>"
         }
       },
       "documentation":"<p>Information about a scan. </p>"
@@ -1284,13 +1283,13 @@
     "SuggestedFix":{
       "type":"structure",
       "members":{
-        "code":{
-          "shape":"String",
-          "documentation":"<p>The suggested code fix. If applicable, includes code patch to replace your source code. </p>"
-        },
         "description":{
           "shape":"String",
           "documentation":"<p>A description of the suggested code fix and why it is being suggested. </p>"
+        },
+        "code":{
+          "shape":"String",
+          "documentation":"<p>The suggested code fix. If applicable, includes code patch to replace your source code. </p>"
         }
       },
       "documentation":"<p>Information about the suggested code fix to remediate a finding.</p>"
@@ -1338,8 +1337,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1361,13 +1359,13 @@
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
         },
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>The identifier for the originating quota.</p>"
-        },
         "serviceCode":{
           "shape":"String",
           "documentation":"<p>The identifier for the originating service.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the originating quota.</p>"
         }
       },
       "documentation":"<p>The request was denied due to request throttling.</p>",
@@ -1402,8 +1400,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccountConfigurationRequest":{
       "type":"structure",
@@ -1427,7 +1424,7 @@
     },
     "Uuid":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
     },
     "ValidationException":{
       "type":"structure",
@@ -1441,10 +1438,6 @@
           "shape":"String",
           "documentation":"<p>The identifier for the error.</p>"
         },
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The field that caused the error, if applicable.</p>"
-        },
         "message":{
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
@@ -1452,6 +1445,10 @@
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>The reason the request failed validation.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>The field that caused the error, if applicable.</p>"
         }
       },
       "documentation":"<p>The input fails to satisfy the specified constraints.</p>",
@@ -1464,17 +1461,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Describes the exception.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the exception.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the exception.</p>"
         }
       },
       "documentation":"<p>Information about a validation exception.</p>"
@@ -1496,31 +1493,31 @@
     "Vulnerability":{
       "type":"structure",
       "members":{
-        "filePath":{
-          "shape":"FilePath",
-          "documentation":"<p> An object that describes the location of the detected security vulnerability in your code.</p>"
+        "referenceUrls":{
+          "shape":"ReferenceUrls",
+          "documentation":"<p>One or more URL addresses that contain details about a vulnerability.</p>"
+        },
+        "relatedVulnerabilities":{
+          "shape":"RelatedVulnerabilities",
+          "documentation":"<p>One or more vulnerabilities that are related to the vulnerability being described.</p>"
         },
         "id":{
           "shape":"String",
           "documentation":"<p>The identifier for the vulnerability.</p>"
         },
+        "filePath":{
+          "shape":"FilePath",
+          "documentation":"<p> An object that describes the location of the detected security vulnerability in your code.</p>"
+        },
         "itemCount":{
           "shape":"Integer",
           "documentation":"<p>The number of times the vulnerability appears in your code.</p>",
           "deprecated":true,
           "deprecatedMessage":"This shape is not used."
-        },
-        "referenceUrls":{
-          "shape":"ReferenceUrls",
-          "documentation":"<p>One or more URL addresses that contain details about a vulnerability.</p>"
-        },
-        "relatedVulnerabilities":{
-          "shape":"RelatedVulnerabilities",
-          "documentation":"<p>One or more vulnerabilities that are related to the vulnerability being described.</p>"
         }
       },
       "documentation":"<p>Information about a security vulnerability that Amazon CodeGuru Security detected.</p>"
     }
   },
-  "documentation":"<note> <p>Amazon CodeGuru Security is in preview release and is subject to change.</p> </note> <p>This section provides documentation for the Amazon CodeGuru Security API operations. CodeGuru Security is a service that uses program analysis and machine learning to detect security policy violations and vulnerabilities, and recommends ways to address these security risks.</p> <p>By proactively detecting and providing recommendations for addressing security risks, CodeGuru Security improves the overall security of your application code. For more information about CodeGuru Security, see the <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html\">Amazon CodeGuru Security User Guide</a>. </p>"
+  "documentation":"<p><note> <p>On November 20, 2025, AWS will discontinue support for Amazon CodeGuru Security. After November 20, 2025, you will no longer be able to access the /codeguru/security console, service resources, or documentation. For more information, see <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/end-of-support.html\">https://docs.aws.amazon.com/codeguru/latest/security-ug/end-of-support.html</a>.</p> </note> <p>This section provides documentation for the Amazon CodeGuru Security API operations. CodeGuru Security is a service that uses program analysis and machine learning to detect security policy violations and vulnerabilities, and recommends ways to address these security risks.</p> <p>By proactively detecting and providing recommendations for addressing security risks, CodeGuru Security improves the overall security of your application code. For more information about CodeGuru Security, see the <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html\">Amazon CodeGuru Security User Guide</a>. </p></p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/waiters-2.json 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/codeguru-security/2018-05-10/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguru-security/2018-05-10/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codeguruprofiler/2019-07-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/paginators-1.json 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -40,6 +40,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "ruleExecutionDetails"
+    },
+    "ListDeployActionExecutionTargets": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "targets"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/service-2.json 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/service-2.json
--- 2.23.6-1/awscli/botocore/data/codepipeline/2015-07-09/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codepipeline/2015-07-09/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -285,6 +285,22 @@
       ],
       "documentation":"<p>Gets a summary of all CodePipeline action types associated with your account.</p>"
     },
+    "ListDeployActionExecutionTargets":{
+      "name":"ListDeployActionExecutionTargets",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDeployActionExecutionTargetsInput"},
+      "output":{"shape":"ListDeployActionExecutionTargetsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"PipelineNotFoundException"},
+        {"shape":"InvalidNextTokenException"},
+        {"shape":"ActionExecutionNotFoundException"}
+      ],
+      "documentation":"<p>Lists the targets for the deploy action.</p>"
+    },
     "ListPipelineExecutions":{
       "name":"ListPipelineExecutions",
       "http":{
@@ -342,7 +358,7 @@
         {"shape":"ValidationException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the rules for the condition. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
+      "documentation":"<p>Lists the rules for the condition. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>.For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -390,7 +406,7 @@
         {"shape":"NotLatestPipelineExecutionException"},
         {"shape":"ConcurrentPipelineExecutionsLimitExceededException"}
       ],
-      "documentation":"<p>Used to override a stage condition.</p>"
+      "documentation":"<p>Used to override a stage condition. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>.</p>"
     },
     "PollForJobs":{
       "name":"PollForJobs",
@@ -950,6 +966,10 @@
         "timeoutInMinutes":{
           "shape":"ActionTimeout",
           "documentation":"<p>A timeout duration in minutes that can be applied against the ActionType’s default timeout value specified in <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/limits.html\">Quotas for CodePipeline </a>. This attribute is available only to the manual approval ActionType.</p>"
+        },
+        "environmentVariables":{
+          "shape":"EnvironmentVariableList",
+          "documentation":"<p>The environment variables for the action.</p>"
         }
       },
       "documentation":"<p>Represents information about an action declaration.</p>"
@@ -1104,6 +1124,14 @@
       },
       "documentation":"<p>Input information used for an action execution.</p>"
     },
+    "ActionExecutionNotFoundException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"Message"}
+      },
+      "documentation":"<p>The action execution was not found.</p>",
+      "exception":true
+    },
     "ActionExecutionOutput":{
       "type":"structure",
       "members":{
@@ -1169,8 +1197,7 @@
     },
     "ActionNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified action cannot be found.</p>",
       "exception":true
     },
@@ -1285,8 +1312,7 @@
     },
     "ActionTypeAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified action type already exists with a different definition.</p>",
       "exception":true
     },
@@ -1445,8 +1471,7 @@
     },
     "ActionTypeNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified action type cannot be found.</p>",
       "exception":true
     },
@@ -1562,8 +1587,7 @@
     },
     "ApprovalAlreadyCompletedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval action has already been approved or rejected.</p>",
       "exception":true
     },
@@ -1763,7 +1787,7 @@
           "documentation":"<p>The conditions that are configured as entry conditions.</p>"
         }
       },
-      "documentation":"<p>The conditions for making checks for entry to a stage. </p>"
+      "documentation":"<p>The conditions for making checks for entry to a stage. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>. </p>"
     },
     "BlockerDeclaration":{
       "type":"structure",
@@ -1848,7 +1872,7 @@
           "documentation":"<p>The rules that make up the condition.</p>"
         }
       },
-      "documentation":"<p>The condition for the stage. A condition is made up of the rules and the result for the condition. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
+      "documentation":"<p>The condition for the stage. A condition is made up of the rules and the result for the condition. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>.. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
     },
     "ConditionExecution":{
       "type":"structure",
@@ -2093,8 +2117,85 @@
     },
     "DeleteWebhookOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DeployActionExecutionTarget":{
+      "type":"structure",
       "members":{
-      }
+        "targetId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the target for the deploy action.</p>"
+        },
+        "targetType":{
+          "shape":"String",
+          "documentation":"<p>The type of target for the deploy action.</p>"
+        },
+        "status":{
+          "shape":"String",
+          "documentation":"<p>The status of the deploy action.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the deploy action.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the deploy action.</p>"
+        },
+        "events":{
+          "shape":"DeployTargetEventList",
+          "documentation":"<p>The lifecycle events for the deploy action.</p>"
+        }
+      },
+      "documentation":"<p>The target for the deploy action.</p>"
+    },
+    "DeployActionExecutionTargetList":{
+      "type":"list",
+      "member":{"shape":"DeployActionExecutionTarget"}
+    },
+    "DeployTargetEvent":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the event for the deploy action.</p>"
+        },
+        "status":{
+          "shape":"String",
+          "documentation":"<p>The status of the event for the deploy action.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the event for the deploy action.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time for the event for the deploy action.</p>"
+        },
+        "context":{
+          "shape":"DeployTargetEventContext",
+          "documentation":"<p>The context for the event for the deploy action.</p>"
+        }
+      },
+      "documentation":"<p>A lifecycle event for the deploy action.</p>"
+    },
+    "DeployTargetEventContext":{
+      "type":"structure",
+      "members":{
+        "ssmCommandId":{
+          "shape":"String",
+          "documentation":"<p>The command ID for the event for the deploy action.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The context message for the event for the deploy action.</p>"
+        }
+      },
+      "documentation":"<p>The context for the event for the deploy action.</p>"
+    },
+    "DeployTargetEventList":{
+      "type":"list",
+      "member":{"shape":"DeployTargetEvent"}
     },
     "DeregisterWebhookWithThirdPartyInput":{
       "type":"structure",
@@ -2107,8 +2208,7 @@
     },
     "DeregisterWebhookWithThirdPartyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Description":{
       "type":"string",
@@ -2208,6 +2308,53 @@
       "type":"string",
       "enum":["KMS"]
     },
+    "EnvironmentVariable":{
+      "type":"structure",
+      "required":[
+        "name",
+        "value"
+      ],
+      "members":{
+        "name":{
+          "shape":"EnvironmentVariableName",
+          "documentation":"<p>The environment variable name in the key-value pair.</p>"
+        },
+        "value":{
+          "shape":"EnvironmentVariableValue",
+          "documentation":"<p>The environment variable value in the key-value pair.</p>"
+        },
+        "type":{
+          "shape":"EnvironmentVariableType",
+          "documentation":"<p>Specifies the type of use for the environment variable value. The value can be either <code>PLAINTEXT</code> or <code>SECRETS_MANAGER</code>. If the value is <code>SECRETS_MANAGER</code>, provide the Secrets reference in the EnvironmentVariable value.</p>"
+        }
+      },
+      "documentation":"<p>The environment variables for the action.</p>"
+    },
+    "EnvironmentVariableList":{
+      "type":"list",
+      "member":{"shape":"EnvironmentVariable"},
+      "max":10,
+      "min":1
+    },
+    "EnvironmentVariableName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9_]+"
+    },
+    "EnvironmentVariableType":{
+      "type":"string",
+      "enum":[
+        "PLAINTEXT",
+        "SECRETS_MANAGER"
+      ]
+    },
+    "EnvironmentVariableValue":{
+      "type":"string",
+      "max":2000,
+      "min":1,
+      "pattern":".*"
+    },
     "ErrorDetails":{
       "type":"structure",
       "members":{
@@ -2315,10 +2462,10 @@
         },
         "conditions":{
           "shape":"ConditionList",
-          "documentation":"<p>The conditions that are configured as failure conditions.</p>"
+          "documentation":"<p>The conditions that are configured as failure conditions. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>.</p>"
         }
       },
-      "documentation":"<p>The configuration that specifies the result, such as rollback, to occur upon stage failure. </p>"
+      "documentation":"<p>The configuration that specifies the result, such as rollback, to occur upon stage failure. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>. </p>"
     },
     "FailureDetails":{
       "type":"structure",
@@ -2633,7 +2780,7 @@
       "members":{
         "events":{
           "shape":"GitPullRequestEventTypeList",
-          "documentation":"<p>The field that specifies which pull request events to filter on (opened, updated, closed) for the trigger configuration.</p>"
+          "documentation":"<p>The field that specifies which pull request events to filter on (OPEN, UPDATED, CLOSED) for the trigger configuration.</p>"
         },
         "branches":{
           "shape":"GitBranchFilterCriteria",
@@ -2644,7 +2791,7 @@
           "documentation":"<p>The field that specifies to filter on file paths for the pull request trigger configuration.</p>"
         }
       },
-      "documentation":"<p>The event criteria for the pull request trigger configuration, such as the lists of branches or file paths to include and exclude.</p>"
+      "documentation":"<p>The event criteria for the pull request trigger configuration, such as the lists of branches or file paths to include and exclude.</p> <p>The following are valid values for the events for this filter:</p> <ul> <li> <p>CLOSED</p> </li> <li> <p>OPEN</p> </li> <li> <p>UPDATED</p> </li> </ul>"
     },
     "GitPullRequestFilterList":{
       "type":"list",
@@ -2718,15 +2865,13 @@
     },
     "InvalidActionDeclarationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The action declaration was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidApprovalTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The approval request already received a response or has expired.</p>",
       "exception":true
     },
@@ -2740,57 +2885,49 @@
     },
     "InvalidBlockerDeclarationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Reserved for future use.</p>",
       "exception":true
     },
     "InvalidClientTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client token was specified in an invalid format</p>",
       "exception":true
     },
     "InvalidJobException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The job was specified in an invalid format or cannot be found.</p>",
       "exception":true
     },
     "InvalidJobStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The job state was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidNextTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The next token was specified in an invalid format. Make sure that the next token you provide is the token returned by a previous call.</p>",
       "exception":true
     },
     "InvalidNonceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The nonce was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidStageDeclarationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The stage declaration was specified in an invalid format.</p>",
       "exception":true
     },
     "InvalidStructureException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The structure was specified in an invalid format.</p>",
       "exception":true
     },
@@ -2804,15 +2941,13 @@
     },
     "InvalidWebhookAuthenticationParametersException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified authentication type is in an invalid format.</p>",
       "exception":true
     },
     "InvalidWebhookFilterPatternException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified event filter rule is in an invalid format.</p>",
       "exception":true
     },
@@ -2904,8 +3039,7 @@
     },
     "JobNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The job was specified in an invalid format or cannot be found.</p>",
       "exception":true
     },
@@ -2985,8 +3119,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of pipelines associated with the Amazon Web Services account has exceeded the limit allowed for the account.</p>",
       "exception":true
     },
@@ -3058,6 +3191,45 @@
       },
       "documentation":"<p>Represents the output of a <code>ListActionTypes</code> action.</p>"
     },
+    "ListDeployActionExecutionTargetsInput":{
+      "type":"structure",
+      "required":["actionExecutionId"],
+      "members":{
+        "pipelineName":{
+          "shape":"PipelineName",
+          "documentation":"<p>The name of the pipeline with the deploy action.</p>"
+        },
+        "actionExecutionId":{
+          "shape":"ActionExecutionId",
+          "documentation":"<p>The execution ID for the deploy action.</p>"
+        },
+        "filters":{
+          "shape":"TargetFilterList",
+          "documentation":"<p>Filters the targets for a specified deploy action.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>An identifier that was returned from the previous list action types call, which can be used to return the next set of action types in the list.</p>"
+        }
+      }
+    },
+    "ListDeployActionExecutionTargetsOutput":{
+      "type":"structure",
+      "members":{
+        "targets":{
+          "shape":"DeployActionExecutionTargetList",
+          "documentation":"<p>The targets for the deploy action.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>An identifier that was returned from the previous list action types call, which can be used to return the next set of action types in the list.</p>"
+        }
+      }
+    },
     "ListPipelineExecutionsInput":{
       "type":"structure",
       "required":["pipelineName"],
@@ -3337,8 +3509,7 @@
     },
     "NotLatestPipelineExecutionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The stage has failed in a later run of the pipeline and the <code>pipelineExecutionId</code> associated with the request is out of date.</p>",
       "exception":true
     },
@@ -3566,8 +3737,7 @@
     },
     "PipelineExecutionNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pipeline execution was specified in an invalid format or cannot be found, or an execution ID does not belong to the specified pipeline. </p>",
       "exception":true
     },
@@ -3675,7 +3845,7 @@
         },
         "pollingDisabledAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The date and time that polling for source changes (periodic checks) was stopped for the pipeline, in timestamp format. You can migrate (update) a polling pipeline to use event-based change detection. For example, for a pipeline with a CodeCommit source, we recommend you migrate (update) your pipeline to use CloudWatch Events. To learn more, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/update-change-detection.html\">Migrate polling pipelines to use event-based change detection</a> in the CodePipeline User Guide.</p>"
+          "documentation":"<p>The date and time that polling for source changes (periodic checks) was stopped for the pipeline, in timestamp format. </p> <important> <p>Pipelines that are inactive for longer than 30 days will have polling disabled for the pipeline. For more information, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html#metadata.pollingDisabledAt\">pollingDisabledAt</a> in the pipeline structure reference. For the steps to migrate your pipeline from polling to event-based change detection, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/update-change-detection.html\">Migrate polling pipelines to use event-based change detection</a>.</p> </important> <p>You can migrate (update) a polling pipeline to use event-based change detection. For example, for a pipeline with a CodeCommit source, we recommend you migrate (update) your pipeline to use CloudWatch Events. To learn more, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/update-change-detection.html\">Migrate polling pipelines to use event-based change detection</a> in the <i>CodePipeline User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Information about a pipeline.</p>"
@@ -3688,15 +3858,13 @@
     },
     "PipelineNameInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified pipeline name is already in use.</p>",
       "exception":true
     },
     "PipelineNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pipeline was specified in an invalid format or cannot be found.</p>",
       "exception":true
     },
@@ -3850,8 +4018,7 @@
     },
     "PipelineVersionNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The pipeline version was specified in an invalid format or cannot be found.</p>",
       "exception":true
     },
@@ -4001,7 +4168,7 @@
         },
         "token":{
           "shape":"ApprovalToken",
-          "documentation":"<p>The system-generated token used to identify a unique approval request. The token for each open approval request can be obtained using the <a>GetPipelineState</a> action. It is used to validate that the approval request corresponding to this token is still valid.</p> <important> <p>For a pipeline where the execution mode is set to PARALLEL, the token required to approve/reject approval request as detailed above is not available. Instead, use the <code>externalExecutionId</code> from the <code>GetPipelineState</code> action as the token in the approval request.</p> </important>"
+          "documentation":"<p>The system-generated token used to identify a unique approval request. The token for each open approval request can be obtained using the <a>GetPipelineState</a> action. It is used to validate that the approval request corresponding to this token is still valid.</p> <important> <p>For a pipeline where the execution mode is set to PARALLEL, the token required to approve/reject an approval request as detailed above is not available. Instead, use the <code>externalExecutionId</code> in the response output from the <a>ListActionExecutions</a> action as the token in the approval request.</p> </important>"
         }
       },
       "documentation":"<p>Represents the input of a <code>PutApprovalResult</code> action.</p>"
@@ -4155,8 +4322,7 @@
     },
     "RegisterWebhookWithThirdPartyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequestFailedException":{
       "type":"structure",
@@ -4200,8 +4366,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource was specified in an invalid format.</p>",
       "exception":true
     },
@@ -4457,7 +4622,7 @@
           "documentation":"<p>The action timeout for the rule.</p>"
         }
       },
-      "documentation":"<p>Represents information about the rule to be created for an associated condition. An example would be creating a new rule for an entry condition, such as a rule that checks for a test result before allowing the run to enter the deployment stage. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
+      "documentation":"<p>Represents information about the rule to be created for an associated condition. An example would be creating a new rule for an entry condition, such as a rule that checks for a test result before allowing the run to enter the deployment stage. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
     },
     "RuleDeclarationList":{
       "type":"list",
@@ -4579,7 +4744,7 @@
       "members":{
         "ruleTypeId":{
           "shape":"RuleTypeId",
-          "documentation":"<p>The ID for the rule type, which is made up of the combined values for category, owner, provider, and version.</p>"
+          "documentation":"<p>The ID for the rule type, which is made up of the combined values for category, owner, provider, and version. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
         },
         "configuration":{
           "shape":"RuleConfigurationMap",
@@ -4763,14 +4928,14 @@
         },
         "provider":{
           "shape":"RuleProvider",
-          "documentation":"<p>The rule provider, such as the <code>DeploymentWindow</code> rule.</p>"
+          "documentation":"<p>The rule provider, such as the <code>DeploymentWindow</code> rule. For a list of rule provider names, see the rules listed in the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
         },
         "version":{
           "shape":"Version",
           "documentation":"<p>A string that describes the rule version.</p>"
         }
       },
-      "documentation":"<p>The ID for the rule type, which is made up of the combined values for category, owner, provider, and version.</p>"
+      "documentation":"<p>The ID for the rule type, which is made up of the combined values for category, owner, provider, and version. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a>. For more information about rules, see the <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/rule-reference.html\">CodePipeline rule reference</a>.</p>"
     },
     "RuleTypeList":{
       "type":"list",
@@ -5046,15 +5211,13 @@
     },
     "StageNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The stage was specified in an invalid format or cannot be found.</p>",
       "exception":true
     },
     "StageNotRetryableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Unable to retry. The pipeline structure or stage state might have changed while actions awaited retry, or the stage contains no failed actions.</p>",
       "exception":true
     },
@@ -5228,7 +5391,7 @@
           "documentation":"<p>The conditions that are success conditions.</p>"
         }
       },
-      "documentation":"<p>The conditions for making checks that, if met, succeed a stage.</p>"
+      "documentation":"<p>The conditions for making checks that, if met, succeed a stage. For more information about conditions, see <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/stage-conditions.html\">Stage conditions</a> and <a href=\"https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-how-it-works-conditions.html\">How do stage conditions work?</a>.</p>"
     },
     "Tag":{
       "type":"structure",
@@ -5280,14 +5443,43 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0
     },
+    "TargetFilter":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"TargetFilterName",
+          "documentation":"<p>The name on which to filter.</p>"
+        },
+        "values":{
+          "shape":"TargetFilterValueList",
+          "documentation":"<p>The values on which to filter.</p>"
+        }
+      },
+      "documentation":"<p>Filters the list of targets.</p>"
+    },
+    "TargetFilterList":{
+      "type":"list",
+      "member":{"shape":"TargetFilter"}
+    },
+    "TargetFilterName":{
+      "type":"string",
+      "enum":["TARGET_STATUS"]
+    },
+    "TargetFilterValue":{
+      "type":"string",
+      "min":1
+    },
+    "TargetFilterValueList":{
+      "type":"list",
+      "member":{"shape":"TargetFilterValue"}
+    },
     "ThirdPartyJob":{
       "type":"structure",
       "members":{
@@ -5445,8 +5637,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateActionTypeInput":{
       "type":"structure",
@@ -5491,8 +5682,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The validation was specified in an invalid format.</p>",
       "exception":true
     },
@@ -5608,8 +5798,7 @@
     },
     "WebhookNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified webhook was entered in an invalid format or cannot be found.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codestar-connections/2019-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/codestar-connections/2019-12-01/service-2.json 2.31.35-1/awscli/botocore/data/codestar-connections/2019-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/codestar-connections/2019-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codestar-connections/2019-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"codestar-connections",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS CodeStar connections",
     "serviceId":"CodeStar connections",
     "signatureVersion":"v4",
     "signingName":"codestar-connections",
     "targetPrefix":"com.amazonaws.codestar.connections.CodeStar_connections_20191201",
-    "uid":"codestar-connections-2019-12-01"
+    "uid":"codestar-connections-2019-12-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateConnection":{
@@ -518,7 +520,7 @@
         },
         "ConnectionArn":{
           "shape":"ConnectionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between Amazon Web Services.</p> <note> <p>The ARN is never reused if the connection is deleted.</p> </note>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between Amazon Web Services services.</p> <note> <p>The ARN is never reused if the connection is deleted.</p> </note>"
         },
         "ProviderType":{
           "shape":"ProviderType",
@@ -750,8 +752,7 @@
     },
     "DeleteConnectionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteHostInput":{
       "type":"structure",
@@ -765,8 +766,7 @@
     },
     "DeleteHostOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRepositoryLinkInput":{
       "type":"structure",
@@ -780,8 +780,7 @@
     },
     "DeleteRepositoryLinkOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSyncConfigurationInput":{
       "type":"structure",
@@ -802,8 +801,7 @@
     },
     "DeleteSyncConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeploymentFilePath":{"type":"string"},
     "Directory":{"type":"string"},
@@ -1898,8 +1896,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1966,8 +1963,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateHostInput":{
       "type":"structure",
@@ -1989,8 +1985,7 @@
     },
     "UpdateHostOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOutOfSyncException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codestar-notifications/2019-10-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/codestar-notifications/2019-10-15/service-2.json 2.31.35-1/awscli/botocore/data/codestar-notifications/2019-10-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/codestar-notifications/2019-10-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/codestar-notifications/2019-10-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"codestar-notifications",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS CodeStar Notifications",
     "serviceId":"codestar notifications",
     "signatureVersion":"v4",
     "signingName":"codestar-notifications",
-    "uid":"codestar-notifications-2019-10-15"
+    "uid":"codestar-notifications-2019-10-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateNotificationRule":{
@@ -28,7 +30,7 @@
         {"shape":"ConcurrentModificationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates a notification rule for a resource. The rule specifies the events you want notifications about and the targets (such as Chatbot topics or Chatbot clients configured for Slack) where you want to receive them.</p>"
+      "documentation":"<p>Creates a notification rule for a resource. The rule specifies the events you want notifications about and the targets (such as Amazon Q Developer in chat applications topics or Amazon Q Developer in chat applications clients configured for Slack) where you want to receive them.</p>"
     },
     "DeleteNotificationRule":{
       "name":"DeleteNotificationRule",
@@ -141,7 +143,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConfigurationException"}
       ],
-      "documentation":"<p>Creates an association between a notification rule and an Chatbot topic or Chatbot client so that the associated target can receive notifications when the events described in the rule are triggered.</p>"
+      "documentation":"<p>Creates an association between a notification rule and an Amazon Q Developer in chat applications topic or Amazon Q Developer in chat applications client so that the associated target can receive notifications when the events described in the rule are triggered.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -170,7 +172,7 @@
       "errors":[
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Removes an association between a notification rule and an Chatbot topic so that subscribers to that topic stop receiving notifications when the events described in the rule are triggered.</p>"
+      "documentation":"<p>Removes an association between a notification rule and an Amazon Q Developer in chat applications topic so that subscribers to that topic stop receiving notifications when the events described in the rule are triggered.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -210,7 +212,7 @@
       "members":{
         "Message":{"shape":"Message"}
       },
-      "documentation":"<p>AWS CodeStar Notifications can't create the notification rule because you do not have sufficient permissions.</p>",
+      "documentation":"<p>CodeStar Notifications can't create the notification rule because you do not have sufficient permissions.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
     },
@@ -225,7 +227,7 @@
       "members":{
         "Message":{"shape":"Message"}
       },
-      "documentation":"<p>AWS CodeStar Notifications can't complete the request because the resource is being modified by another process. Wait a few minutes and try again.</p>",
+      "documentation":"<p>CodeStar Notifications can't complete the request because the resource is being modified by another process. Wait a few minutes and try again.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -262,11 +264,11 @@
         },
         "Targets":{
           "shape":"Targets",
-          "documentation":"<p>A list of Amazon Resource Names (ARNs) of Amazon Simple Notification Service topics and Chatbot clients to associate with the notification rule.</p>"
+          "documentation":"<p>A list of Amazon Resource Names (ARNs) of Amazon Simple Notification Service topics and Amazon Q Developer in chat applications clients to associate with the notification rule.</p>"
         },
         "DetailType":{
           "shape":"DetailType",
-          "documentation":"<p>The level of detail to include in the notifications for this resource. <code>BASIC</code> will include only the contents of the event as it would appear in Amazon CloudWatch. <code>FULL</code> will include any supplemental information provided by AWS CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
+          "documentation":"<p>The level of detail to include in the notifications for this resource. <code>BASIC</code> will include only the contents of the event as it would appear in Amazon CloudWatch. <code>FULL</code> will include any supplemental information provided by CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
         },
         "ClientRequestToken":{
           "shape":"ClientRequestToken",
@@ -318,18 +320,17 @@
       "members":{
         "TargetAddress":{
           "shape":"TargetAddress",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Chatbot topic or Chatbot client to delete.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Developer in chat applications topic or Amazon Q Developer in chat applications client to delete.</p>"
         },
         "ForceUnsubscribeAll":{
           "shape":"ForceUnsubscribeAll",
-          "documentation":"<p>A Boolean value that can be used to delete all associations with this Chatbot topic. The default value is FALSE. If set to TRUE, all associations between that target and every notification rule in your Amazon Web Services account are deleted.</p>"
+          "documentation":"<p>A Boolean value that can be used to delete all associations with this Amazon Q Developer in chat applications topic. The default value is FALSE. If set to TRUE, all associations between that target and every notification rule in your Amazon Web Services account are deleted.</p>"
         }
       }
     },
     "DeleteTargetResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeNotificationRuleRequest":{
       "type":"structure",
@@ -363,11 +364,11 @@
         },
         "Targets":{
           "shape":"TargetsBatch",
-          "documentation":"<p>A list of the Chatbot topics and Chatbot clients associated with the notification rule.</p>"
+          "documentation":"<p>A list of the Amazon Q Developer in chat applications topics and Amazon Q Developer in chat applications clients associated with the notification rule.</p>"
         },
         "DetailType":{
           "shape":"DetailType",
-          "documentation":"<p>The level of detail included in the notifications for this resource. BASIC will include only the contents of the event as it would appear in Amazon CloudWatch. FULL will include any supplemental information provided by AWS CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
+          "documentation":"<p>The level of detail included in the notifications for this resource. BASIC will include only the contents of the event as it would appear in Amazon CloudWatch. FULL will include any supplemental information provided by CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
         },
         "CreatedBy":{
           "shape":"NotificationRuleCreatedBy",
@@ -450,7 +451,7 @@
       "members":{
         "Message":{"shape":"Message"}
       },
-      "documentation":"<p>One of the AWS CodeStar Notifications limits has been exceeded. Limits apply to accounts, notification rules, notifications, resources, and targets. For more information, see Limits.</p>",
+      "documentation":"<p>One of the CodeStar Notifications limits has been exceeded. Limits apply to accounts, notification rules, notifications, resources, and targets. For more information, see Limits.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -616,7 +617,7 @@
           "documentation":"<p>The value of the attribute you want to use to filter the returned targets. For example, if you specify <code>SNS</code> for the Target type, you could specify an Amazon Resource Name (ARN) for a topic as the value.</p>"
         }
       },
-      "documentation":"<p>Information about a filter to apply to the list of returned targets. You can filter by target type, address, or status. For example, to filter results to notification rules that have active Chatbot topics as targets, you could specify a ListTargetsFilter Name as <code>TargetType</code> and a Value of <code>SNS</code>, and a Name of <code>TARGET_STATUS</code> and a Value of <code>ACTIVE</code>.</p>"
+      "documentation":"<p>Information about a filter to apply to the list of returned targets. You can filter by target type, address, or status. For example, to filter results to notification rules that have active Amazon Q Developer in chat applications topics as targets, you could specify a ListTargetsFilter Name as <code>TargetType</code> and a Value of <code>SNS</code>, and a Name of <code>TARGET_STATUS</code> and a Value of <code>ACTIVE</code>.</p>"
     },
     "ListTargetsFilterName":{
       "type":"string",
@@ -741,7 +742,7 @@
       "members":{
         "Message":{"shape":"Message"}
       },
-      "documentation":"<p>AWS CodeStar Notifications can't find a resource that matches the provided ARN. </p>",
+      "documentation":"<p>CodeStar Notifications can't find a resource that matches the provided ARN. </p>",
       "error":{"httpStatusCode":404},
       "exception":true
     },
@@ -829,14 +830,14 @@
       "members":{
         "TargetType":{
           "shape":"TargetType",
-          "documentation":"<p>The target type. Can be an Chatbot topic or Chatbot client.</p> <ul> <li> <p>Chatbot topics are specified as <code>SNS</code>.</p> </li> <li> <p>Chatbot clients are specified as <code>AWSChatbotSlack</code>.</p> </li> </ul>"
+          "documentation":"<p>The target type. Can be an Amazon Q Developer in chat applications topic or Amazon Q Developer in chat applications client.</p> <ul> <li> <p>Amazon Q Developer in chat applications topics are specified as <code>SNS</code>.</p> </li> <li> <p>Amazon Q Developer in chat applications clients are specified as <code>AWSChatbotSlack</code>.</p> </li> </ul>"
         },
         "TargetAddress":{
           "shape":"TargetAddress",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Chatbot topic or Chatbot client.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Developer in chat applications topic or Amazon Q Developer in chat applications client.</p>"
         }
       },
-      "documentation":"<p>Information about the Chatbot topics or Chatbot clients associated with a notification rule.</p>"
+      "documentation":"<p>Information about the Amazon Q Developer in chat applications topics or Amazon Q Developer in chat applications clients associated with a notification rule.</p>"
     },
     "TargetAddress":{
       "type":"string",
@@ -859,11 +860,11 @@
       "members":{
         "TargetAddress":{
           "shape":"TargetAddress",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Chatbot topic or Chatbot client.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Developer in chat applications topic or Amazon Q Developer in chat applications client.</p>"
         },
         "TargetType":{
           "shape":"TargetType",
-          "documentation":"<p>The type of the target (for example, <code>SNS</code>).</p> <ul> <li> <p>Chatbot topics are specified as <code>SNS</code>.</p> </li> <li> <p>Chatbot clients are specified as <code>AWSChatbotSlack</code>.</p> </li> </ul>"
+          "documentation":"<p>The type of the target (for example, <code>SNS</code>).</p> <ul> <li> <p>Amazon Q Developer in chat applications topics are specified as <code>SNS</code>.</p> </li> <li> <p>Amazon Q Developer in chat applications clients are specified as <code>AWSChatbotSlack</code>.</p> </li> </ul>"
         },
         "TargetStatus":{
           "shape":"TargetStatus",
@@ -898,7 +899,7 @@
         },
         "TargetAddress":{
           "shape":"TargetAddress",
-          "documentation":"<p>The ARN of the Chatbot topic to unsubscribe from the notification rule.</p>"
+          "documentation":"<p>The ARN of the Amazon Q Developer in chat applications topic to unsubscribe from the notification rule.</p>"
         }
       }
     },
@@ -935,8 +936,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotificationRuleRequest":{
       "type":"structure",
@@ -964,14 +964,13 @@
         },
         "DetailType":{
           "shape":"DetailType",
-          "documentation":"<p>The level of detail to include in the notifications for this resource. BASIC will include only the contents of the event as it would appear in Amazon CloudWatch. FULL will include any supplemental information provided by AWS CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
+          "documentation":"<p>The level of detail to include in the notifications for this resource. BASIC will include only the contents of the event as it would appear in Amazon CloudWatch. FULL will include any supplemental information provided by CodeStar Notifications and/or the service for the resource for which the notification is created.</p>"
         }
       }
     },
     "UpdateNotificationRuleResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -983,5 +982,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>This AWS CodeStar Notifications API Reference provides descriptions and usage examples of the operations and data types for the AWS CodeStar Notifications API. You can use the AWS CodeStar Notifications API to work with the following objects:</p> <p>Notification rules, by calling the following: </p> <ul> <li> <p> <a>CreateNotificationRule</a>, which creates a notification rule for a resource in your account. </p> </li> <li> <p> <a>DeleteNotificationRule</a>, which deletes a notification rule. </p> </li> <li> <p> <a>DescribeNotificationRule</a>, which provides information about a notification rule. </p> </li> <li> <p> <a>ListNotificationRules</a>, which lists the notification rules associated with your account. </p> </li> <li> <p> <a>UpdateNotificationRule</a>, which changes the name, events, or targets associated with a notification rule. </p> </li> <li> <p> <a>Subscribe</a>, which subscribes a target to a notification rule. </p> </li> <li> <p> <a>Unsubscribe</a>, which removes a target from a notification rule. </p> </li> </ul> <p>Targets, by calling the following: </p> <ul> <li> <p> <a>DeleteTarget</a>, which removes a notification rule target from a notification rule. </p> </li> <li> <p> <a>ListTargets</a>, which lists the targets associated with a notification rule. </p> </li> </ul> <p>Events, by calling the following: </p> <ul> <li> <p> <a>ListEventTypes</a>, which lists the event types you can include in a notification rule. </p> </li> </ul> <p>Tags, by calling the following: </p> <ul> <li> <p> <a>ListTagsForResource</a>, which lists the tags already associated with a notification rule in your account. </p> </li> <li> <p> <a>TagResource</a>, which associates a tag you provide with a notification rule in your account. </p> </li> <li> <p> <a>UntagResource</a>, which removes a tag from a notification rule in your account. </p> </li> </ul> <p> For information about how to use AWS CodeStar Notifications, see the <a href=\"https://docs.aws.amazon.com/dtconsole/latest/userguide/what-is-dtconsole.html\">Amazon Web Services Developer Tools Console User Guide</a>. </p>"
+  "documentation":"<p>This CodeStar Notifications API Reference provides descriptions and usage examples of the operations and data types for the CodeStar Notifications API. You can use the CodeStar Notifications API to work with the following objects:</p> <p>Notification rules, by calling the following: </p> <ul> <li> <p> <a>CreateNotificationRule</a>, which creates a notification rule for a resource in your account. </p> </li> <li> <p> <a>DeleteNotificationRule</a>, which deletes a notification rule. </p> </li> <li> <p> <a>DescribeNotificationRule</a>, which provides information about a notification rule. </p> </li> <li> <p> <a>ListNotificationRules</a>, which lists the notification rules associated with your account. </p> </li> <li> <p> <a>UpdateNotificationRule</a>, which changes the name, events, or targets associated with a notification rule. </p> </li> <li> <p> <a>Subscribe</a>, which subscribes a target to a notification rule. </p> </li> <li> <p> <a>Unsubscribe</a>, which removes a target from a notification rule. </p> </li> </ul> <p>Targets, by calling the following: </p> <ul> <li> <p> <a>DeleteTarget</a>, which removes a notification rule target from a notification rule. </p> </li> <li> <p> <a>ListTargets</a>, which lists the targets associated with a notification rule. </p> </li> </ul> <p>Events, by calling the following: </p> <ul> <li> <p> <a>ListEventTypes</a>, which lists the event types you can include in a notification rule. </p> </li> </ul> <p>Tags, by calling the following: </p> <ul> <li> <p> <a>ListTagsForResource</a>, which lists the tags already associated with a notification rule in your account. </p> </li> <li> <p> <a>TagResource</a>, which associates a tag you provide with a notification rule in your account. </p> </li> <li> <p> <a>UntagResource</a>, which removes a tag from a notification rule in your account. </p> </li> </ul> <p> For information about how to use CodeStar Notifications, see the <a href=\"https://docs.aws.amazon.com/dtconsole/latest/userguide/what-is-dtconsole.html\">Amazon Web Services Developer Tools Console User Guide</a>. </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-identity/2014-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-identity/2014-06-30/service-2.json 2.31.35-1/awscli/botocore/data/cognito-identity/2014-06-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/cognito-identity/2014-06-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-identity/2014-06-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates a new identity pool. The identity pool is a store of user identity information that is specific to your AWS account. The keys for <code>SupportedLoginProviders</code> are as follows:</p> <ul> <li> <p>Facebook: <code>graph.facebook.com</code> </p> </li> <li> <p>Google: <code>accounts.google.com</code> </p> </li> <li> <p>Amazon: <code>www.amazon.com</code> </p> </li> <li> <p>Twitter: <code>api.twitter.com</code> </p> </li> <li> <p>Digits: <code>www.digits.com</code> </p> </li> </ul> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Creates a new identity pool. The identity pool is a store of user identity information that is specific to your Amazon Web Services account. The keys for <code>SupportedLoginProviders</code> are as follows:</p> <ul> <li> <p>Facebook: <code>graph.facebook.com</code> </p> </li> <li> <p>Google: <code>accounts.google.com</code> </p> </li> <li> <p>Sign in With Apple: <code>appleid.apple.com</code> </p> </li> <li> <p>Amazon: <code>www.amazon.com</code> </p> </li> <li> <p>Twitter: <code>api.twitter.com</code> </p> </li> <li> <p>Digits: <code>www.digits.com</code> </p> </li> </ul> <important> <p>If you don't provide a value for a parameter, Amazon Cognito sets it to its default value. </p> </important> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "DeleteIdentities":{
       "name":"DeleteIdentities",
@@ -45,7 +45,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Deletes identities from an identity pool. You can specify a list of 1-60 identities that you want to delete.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Deletes identities from an identity pool. You can specify a list of 1-60 identities that you want to delete.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "DeleteIdentityPool":{
       "name":"DeleteIdentityPool",
@@ -61,7 +61,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Deletes an identity pool. Once a pool is deleted, users will not be able to authenticate with the pool.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Deletes an identity pool. Once a pool is deleted, users will not be able to authenticate with the pool.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "DescribeIdentity":{
       "name":"DescribeIdentity",
@@ -78,7 +78,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Returns metadata related to the given identity, including when the identity was created and any associated linked logins.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Returns metadata related to the given identity, including when the identity was created and any associated linked logins.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "DescribeIdentityPool":{
       "name":"DescribeIdentityPool",
@@ -95,7 +95,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets details about a particular identity pool, including the pool name, ID description, creation date, and current number of users.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Gets details about a particular identity pool, including the pool name, ID description, creation date, and current number of users.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "GetCredentialsForIdentity":{
       "name":"GetCredentialsForIdentity",
@@ -115,7 +115,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ExternalServiceException"}
       ],
-      "documentation":"<p>Returns credentials for the provided identity ID. Any provided logins will be validated against supported login providers. If the token is for cognito-identity.amazonaws.com, it will be passed through to AWS Security Token Service with the appropriate role for the token.</p> <p>This is a public API. You do not need any credentials to call this API.</p>",
+      "documentation":"<p>Returns credentials for the provided identity ID. Any provided logins will be validated against supported login providers. If the token is for <code>cognito-identity.amazonaws.com</code>, it will be passed through to Security Token Service with the appropriate role for the token.</p> <p>This is a public API. You do not need any credentials to call this API.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -137,7 +137,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ExternalServiceException"}
       ],
-      "documentation":"<p>Generates (or retrieves) a Cognito ID. Supplying multiple logins will create an implicit linked account.</p> <p>This is a public API. You do not need any credentials to call this API.</p>",
+      "documentation":"<p>Generates (or retrieves) IdentityID. Supplying multiple logins will create an implicit linked account.</p> <p>This is a public API. You do not need any credentials to call this API.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -157,7 +157,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets the roles for an identity pool.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Gets the roles for an identity pool.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "GetOpenIdToken":{
       "name":"GetOpenIdToken",
@@ -197,7 +197,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"DeveloperUserAlreadyRegisteredException"}
       ],
-      "documentation":"<p>Registers (or retrieves) a Cognito <code>IdentityId</code> and an OpenID Connect token for a user authenticated by your backend authentication process. Supplying multiple logins will create an implicit linked account. You can only specify one developer provider as part of the <code>Logins</code> map, which is linked to the identity pool. The developer provider is the \"domain\" by which Cognito will refer to your users.</p> <p>You can use <code>GetOpenIdTokenForDeveloperIdentity</code> to create a new identity and to link new logins (that is, user credentials issued by a public provider or developer provider) to an existing identity. When you want to create a new identity, the <code>IdentityId</code> should be null. When you want to associate a new login with an existing authenticated/unauthenticated identity, you can do so by providing the existing <code>IdentityId</code>. This API will create the identity in the specified <code>IdentityPoolId</code>.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Registers (or retrieves) a Cognito <code>IdentityId</code> and an OpenID Connect token for a user authenticated by your backend authentication process. Supplying multiple logins will create an implicit linked account. You can only specify one developer provider as part of the <code>Logins</code> map, which is linked to the identity pool. The developer provider is the \"domain\" by which Cognito will refer to your users.</p> <p>You can use <code>GetOpenIdTokenForDeveloperIdentity</code> to create a new identity and to link new logins (that is, user credentials issued by a public provider or developer provider) to an existing identity. When you want to create a new identity, the <code>IdentityId</code> should be null. When you want to associate a new login with an existing authenticated/unauthenticated identity, you can do so by providing the existing <code>IdentityId</code>. This API will create the identity in the specified <code>IdentityPoolId</code>.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "GetPrincipalTagAttributeMap":{
       "name":"GetPrincipalTagAttributeMap",
@@ -231,7 +231,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the identities in an identity pool.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Lists the identities in an identity pool.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "ListIdentityPools":{
       "name":"ListIdentityPools",
@@ -248,7 +248,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists all of the Cognito identity pools registered for your account.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Lists all of the Cognito identity pools registered for your account.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -283,7 +283,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Retrieves the <code>IdentityID</code> associated with a <code>DeveloperUserIdentifier</code> or the list of <code>DeveloperUserIdentifier</code> values associated with an <code>IdentityId</code> for an existing identity. Either <code>IdentityID</code> or <code>DeveloperUserIdentifier</code> must not be null. If you supply only one of these values, the other value will be searched in the database and returned as a part of the response. If you supply both, <code>DeveloperUserIdentifier</code> will be matched against <code>IdentityID</code>. If the values are verified against the database, the response returns both values and is the same as the request. Otherwise a <code>ResourceConflictException</code> is thrown.</p> <p> <code>LookupDeveloperIdentity</code> is intended for low-throughput control plane operations: for example, to enable customer service to locate an identity ID by username. If you are using it for higher-volume operations such as user authentication, your requests are likely to be throttled. <a>GetOpenIdTokenForDeveloperIdentity</a> is a better option for higher-volume operations for user authentication.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Retrieves the <code>IdentityID</code> associated with a <code>DeveloperUserIdentifier</code> or the list of <code>DeveloperUserIdentifier</code> values associated with an <code>IdentityId</code> for an existing identity. Either <code>IdentityID</code> or <code>DeveloperUserIdentifier</code> must not be null. If you supply only one of these values, the other value will be searched in the database and returned as a part of the response. If you supply both, <code>DeveloperUserIdentifier</code> will be matched against <code>IdentityID</code>. If the values are verified against the database, the response returns both values and is the same as the request. Otherwise, a <code>ResourceConflictException</code> is thrown.</p> <p> <code>LookupDeveloperIdentity</code> is intended for low-throughput control plane operations: for example, to enable customer service to locate an identity ID by username. If you are using it for higher-volume operations such as user authentication, your requests are likely to be throttled. <a>GetOpenIdTokenForDeveloperIdentity</a> is a better option for higher-volume operations for user authentication.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "MergeDeveloperIdentities":{
       "name":"MergeDeveloperIdentities",
@@ -301,7 +301,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Merges two users having different <code>IdentityId</code>s, existing in the same identity pool, and identified by the same developer provider. You can use this action to request that discrete users be merged and identified as a single user in the Cognito environment. Cognito associates the given source user (<code>SourceUserIdentifier</code>) with the <code>IdentityId</code> of the <code>DestinationUserIdentifier</code>. Only developer-authenticated users can be merged. If the users to be merged are associated with the same public provider, but as two different users, an exception will be thrown.</p> <p>The number of linked logins is limited to 20. So, the number of linked logins for the source user, <code>SourceUserIdentifier</code>, and the destination user, <code>DestinationUserIdentifier</code>, together should not be larger than 20. Otherwise, an exception will be thrown.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Merges two users having different <code>IdentityId</code>s, existing in the same identity pool, and identified by the same developer provider. You can use this action to request that discrete users be merged and identified as a single user in the Cognito environment. Cognito associates the given source user (<code>SourceUserIdentifier</code>) with the <code>IdentityId</code> of the <code>DestinationUserIdentifier</code>. Only developer-authenticated users can be merged. If the users to be merged are associated with the same public provider, but as two different users, an exception will be thrown.</p> <p>The number of linked logins is limited to 20. So, the number of linked logins for the source user, <code>SourceUserIdentifier</code>, and the destination user, <code>DestinationUserIdentifier</code>, together should not be larger than 20. Otherwise, an exception will be thrown.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "SetIdentityPoolRoles":{
       "name":"SetIdentityPoolRoles",
@@ -319,7 +319,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Sets the roles for an identity pool. These roles are used when making calls to <a>GetCredentialsForIdentity</a> action.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Sets the roles for an identity pool. These roles are used when making calls to <a>GetCredentialsForIdentity</a> action.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "SetPrincipalTagAttributeMap":{
       "name":"SetPrincipalTagAttributeMap",
@@ -370,7 +370,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Unlinks a <code>DeveloperUserIdentifier</code> from an existing identity. Unlinked developer users will be considered new identities next time they are seen. If, for a given Cognito identity, you remove all federated identities as well as the developer user identifier, the Cognito identity becomes inaccessible.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Unlinks a <code>DeveloperUserIdentifier</code> from an existing identity. Unlinked developer users will be considered new identities next time they are seen. If, for a given Cognito identity, you remove all federated identities as well as the developer user identifier, the Cognito identity becomes inaccessible.</p> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     },
     "UnlinkIdentity":{
       "name":"UnlinkIdentity",
@@ -427,7 +427,7 @@
         {"shape":"ConcurrentModificationException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Updates an identity pool.</p> <p>You must use AWS Developer credentials to call this API.</p>"
+      "documentation":"<p>Updates the configuration of an identity pool.</p> <important> <p>If you don't provide a value for a parameter, Amazon Cognito sets it to its default value. </p> </important> <p>You must use Amazon Web Services developer credentials to call this operation.</p>"
     }
   },
   "shapes":{
@@ -475,7 +475,7 @@
         },
         "ServerSideTokenCheck":{
           "shape":"CognitoIdentityProviderTokenCheck",
-          "documentation":"<p>TRUE if server-side token validation is enabled for the identity provider’s token.</p> <p>Once you set <code>ServerSideTokenCheck</code> to TRUE for an identity pool, that identity pool will check with the integrated user pools to make sure that the user has not been globally signed out or deleted before the identity pool provides an OIDC token or AWS credentials for the user.</p> <p>If the user is signed out or deleted, the identity pool will return a 400 Not Authorized error.</p>",
+          "documentation":"<p>TRUE if server-side token validation is enabled for the identity provider’s token.</p> <p>Once you set <code>ServerSideTokenCheck</code> to TRUE for an identity pool, that identity pool will check with the integrated user pools to make sure that the user has not been globally signed out or deleted before the identity pool provides an OIDC token or Amazon Web Services credentials for the user.</p> <p>If the user is signed out or deleted, the identity pool will return a 400 Not Authorized error.</p>",
           "box":true
         }
       },
@@ -715,7 +715,7 @@
       "members":{
         "AccountId":{
           "shape":"AccountId",
-          "documentation":"<p>A standard AWS account ID (9+ digits).</p>"
+          "documentation":"<p>A standard Amazon Web Services account ID (9+ digits).</p>"
         },
         "IdentityPoolId":{
           "shape":"IdentityPoolId",
@@ -762,7 +762,7 @@
         },
         "RoleMappings":{
           "shape":"RoleMappingMap",
-          "documentation":"<p>How users for a specific identity provider are to mapped to roles. This is a String-to-<a>RoleMapping</a> object map. The string identifies the identity provider, for example, \"graph.facebook.com\" or \"cognito-idp.us-east-1.amazonaws.com/us-east-1_abcdefghi:app_client_id\".</p>"
+          "documentation":"<p>How users for a specific identity provider are to mapped to roles. This is a String-to-<a>RoleMapping</a> object map. The string identifies the identity provider, for example, <code>graph.facebook.com</code> or <code>cognito-idp.us-east-1.amazonaws.com/us-east-1_abcdefghi:app_client_id</code>.</p>"
         }
       },
       "documentation":"<p>Returned in response to a successful <code>GetIdentityPoolRoles</code> operation.</p>"
@@ -792,7 +792,7 @@
         },
         "TokenDuration":{
           "shape":"TokenDuration",
-          "documentation":"<p>The expiration time of the token, in seconds. You can specify a custom expiration time for the token so that you can cache it. If you don't provide an expiration time, the token is valid for 15 minutes. You can exchange the token with Amazon STS for temporary AWS credentials, which are valid for a maximum of one hour. The maximum token duration you can set is 24 hours. You should take care in setting the expiration time for a token, as there are significant security implications: an attacker could use a leaked token to access your AWS resources for the token's duration.</p> <note> <p>Please provide for a small grace period, usually no more than 5 minutes, to account for clock skew.</p> </note>"
+          "documentation":"<p>The expiration time of the token, in seconds. You can specify a custom expiration time for the token so that you can cache it. If you don't provide an expiration time, the token is valid for 15 minutes. You can exchange the token with Amazon STS for temporary Amazon Web Services credentials, which are valid for a maximum of one hour. The maximum token duration you can set is 24 hours. You should take care in setting the expiration time for a token, as there are significant security implications: an attacker could use a leaked token to access your Amazon Web Services resources for the token's duration.</p> <note> <p>Please provide for a small grace period, usually no more than 5 minutes, to account for clock skew.</p> </note>"
         }
       },
       "documentation":"<p>Input to the <code>GetOpenIdTokenForDeveloperIdentity</code> action.</p>"
@@ -1051,7 +1051,7 @@
           "documentation":"<p>The message returned for an <code>InvalidIdentityPoolConfigurationException</code> </p>"
         }
       },
-      "documentation":"<p>Thrown if the identity pool has no role associated for the given auth type (auth/unauth) or if the AssumeRole fails.</p>",
+      "documentation":"<p>If you provided authentication information in the request, the identity pool has no authenticated role configured, or STS returned an error response to the request to assume the authenticated role from the identity pool. If you provided no authentication information in the request, the identity pool has no unauthenticated role configured, or STS returned an error response to the request to assume the unauthenticated role from the identity pool.</p> <p>Your role trust policy must grant <code>AssumeRoleWithWebIdentity</code> permissions to <code>cognito-identity.amazonaws.com</code>.</p>",
       "exception":true
     },
     "InvalidParameterException":{
@@ -1453,7 +1453,7 @@
         },
         "RoleMappings":{
           "shape":"RoleMappingMap",
-          "documentation":"<p>How users for a specific identity provider are to mapped to roles. This is a string to <a>RoleMapping</a> object map. The string identifies the identity provider, for example, \"graph.facebook.com\" or \"cognito-idp.us-east-1.amazonaws.com/us-east-1_abcdefghi:app_client_id\".</p> <p>Up to 25 rules can be specified per identity provider.</p>"
+          "documentation":"<p>How users for a specific identity provider are to mapped to roles. This is a string to <a>RoleMapping</a> object map. The string identifies the identity provider, for example, <code>graph.facebook.com</code> or <code>cognito-idp.us-east-1.amazonaws.com/us-east-1_abcdefghi:app_client_id</code>.</p> <p>Up to 25 rules can be specified per identity provider.</p>"
         }
       },
       "documentation":"<p>Input to the <code>SetIdentityPoolRoles</code> action.</p>"
@@ -1529,8 +1529,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValueType":{
       "type":"string",
@@ -1642,10 +1641,9 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UseDefaults":{"type":"boolean"}
   },
-  "documentation":"<fullname>Amazon Cognito Federated Identities</fullname> <p>Amazon Cognito Federated Identities is a web service that delivers scoped temporary credentials to mobile devices and other untrusted environments. It uniquely identifies a device and supplies the user with a consistent identity over the lifetime of an application.</p> <p>Using Amazon Cognito Federated Identities, you can enable authentication with one or more third-party identity providers (Facebook, Google, or Login with Amazon) or an Amazon Cognito user pool, and you can also choose to support unauthenticated access from your app. Cognito delivers a unique identifier for each user and acts as an OpenID token provider trusted by AWS Security Token Service (STS) to access temporary, limited-privilege AWS credentials.</p> <p>For a description of the authentication flow from the Amazon Cognito Developer Guide see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html\">Authentication Flow</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito Federated Identities</a>.</p>"
+  "documentation":"<fullname>Amazon Cognito Federated Identities</fullname> <p>Amazon Cognito Federated Identities is a web service that delivers scoped temporary credentials to mobile devices and other untrusted environments. It uniquely identifies a device and supplies the user with a consistent identity over the lifetime of an application.</p> <p>Using Amazon Cognito Federated Identities, you can enable authentication with one or more third-party identity providers (Facebook, Google, or Login with Amazon) or an Amazon Cognito user pool, and you can also choose to support unauthenticated access from your app. Cognito delivers a unique identifier for each user and acts as an OpenID token provider trusted by Security Token Service (STS) to access temporary, limited-privilege Amazon Web Services credentials.</p> <p>For a description of the authentication flow from the Amazon Cognito Developer Guide see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html\">Authentication Flow</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito Federated Identities</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-idp/2016-04-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-idp/2016-04-18/service-2.json 2.31.35-1/awscli/botocore/data/cognito-idp/2016-04-18/service-2.json
--- 2.23.6-1/awscli/botocore/data/cognito-idp/2016-04-18/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-idp/2016-04-18/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"UserImportInProgressException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Adds additional user attributes to the user pool schema. Custom attributes can be mutable or immutable and have a <code>custom:</code> or <code>dev:</code> prefix. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes\">Custom attributes</a>.</p> <p>You can also create custom attributes in the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema\">Schema parameter</a> of <code>CreateUserPool</code> and <code>UpdateUserPool</code>. You can't delete custom attributes after you create them.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Adds additional user attributes to the user pool schema. Custom attributes can be mutable or immutable and have a <code>custom:</code> or <code>dev:</code> prefix. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes\">Custom attributes</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminAddUserToGroup":{
       "name":"AdminAddUserToGroup",
@@ -70,7 +70,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Confirms user sign-up as an administrator. Unlike <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html\">ConfirmSignUp</a>, your IAM credentials authorize user account confirmation. No confirmation code is required.</p> <p>This request sets a user account active in a user pool that <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#signing-up-users-in-your-app-and-confirming-them-as-admin\">requires confirmation of new user accounts</a> before they can sign in. You can configure your user pool to not send confirmation codes to new users and instead confirm them with this API operation on the back end.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note> <p>To configure your user pool to require administrative confirmation of users, set <code>AllowAdminCreateUserOnly</code> to <code>true</code> in a <code>CreateUserPool</code> or <code>UpdateUserPool</code> request.</p>"
+      "documentation":"<p>Confirms user sign-up as an administrator. </p> <p>This request sets a user account active in a user pool that <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#signing-up-users-in-your-app-and-confirming-them-as-admin\">requires confirmation of new user accounts</a> before they can sign in. You can configure your user pool to not send confirmation codes to new users and instead confirm them with this API operation on the back end.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note> <p>To configure your user pool to require administrative confirmation of users, set <code>AllowAdminCreateUserOnly</code> to <code>true</code> in a <code>CreateUserPool</code> or <code>UpdateUserPool</code> request.</p>"
     },
     "AdminCreateUser":{
       "name":"AdminCreateUser",
@@ -98,7 +98,7 @@
         {"shape":"UnsupportedUserStateException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Creates a new user in the specified user pool.</p> <p>If <code>MessageAction</code> isn't set, the default is to send a welcome message via email or phone (SMS).</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password.</p> <p>Alternatively, you can call <code>AdminCreateUser</code> with <code>SUPPRESS</code> for the <code>MessageAction</code> parameter, and Amazon Cognito won't send any email. </p> <p>In either case, if the user has a password, they will be in the <code>FORCE_CHANGE_PASSWORD</code> state until they sign in and set their password. Your invitation message template must have the <code>{####}</code> password placeholder if your users have passwords. If your template doesn't have this placeholder, Amazon Cognito doesn't deliver the invitation message. In this case, you must update your message template and resend the password with a new <code>AdminCreateUser</code> request with a <code>MessageAction</code> value of <code>RESEND</code>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates a new user in the specified user pool.</p> <p>If <code>MessageAction</code> isn't set, the default is to send a welcome message via email or phone (SMS).</p> <p>This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password.</p> <p>Alternatively, you can call <code>AdminCreateUser</code> with <code>SUPPRESS</code> for the <code>MessageAction</code> parameter, and Amazon Cognito won't send any email. </p> <p>In either case, if the user has a password, they will be in the <code>FORCE_CHANGE_PASSWORD</code> state until they sign in and set their password. Your invitation message template must have the <code>{####}</code> password placeholder if your users have passwords. If your template doesn't have this placeholder, Amazon Cognito doesn't deliver the invitation message. In this case, you must update your message template and resend the password with a new <code>AdminCreateUser</code> request with a <code>MessageAction</code> value of <code>RESEND</code>.</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminDeleteUser":{
       "name":"AdminDeleteUser",
@@ -133,7 +133,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Deletes attribute values from a user. This operation doesn't affect tokens for existing user sessions. The next ID token that the user receives will no longer have this attribute.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Deletes attribute values from a user. This operation doesn't affect tokens for existing user sessions. The next ID token that the user receives will no longer have the deleted attributes.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminDisableProviderForUser":{
       "name":"AdminDisableProviderForUser",
@@ -152,7 +152,7 @@
         {"shape":"AliasExistsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked <code>DestinationUser</code>, the user must create a new user account. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html\">AdminLinkProviderForUser</a>.</p> <p>The <code>ProviderName</code> must match the value specified when creating an IdP for the pool. </p> <p>To deactivate a native username + password user, the <code>ProviderName</code> value must be <code>Cognito</code> and the <code>ProviderAttributeName</code> must be <code>Cognito_Subject</code>. The <code>ProviderAttributeValue</code> must be the name that is used in the user pool for the user.</p> <p>The <code>ProviderAttributeName</code> must always be <code>Cognito_Subject</code> for social IdPs. The <code>ProviderAttributeValue</code> must always be the exact subject that was used when the user was originally linked as a source user.</p> <p>For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the <code>ProviderAttributeName</code> and <code>ProviderAttributeValue</code> must be the same values that were used for the <code>SourceUser</code> when the identities were originally linked using <code> AdminLinkProviderForUser</code> call. (If the linking was done with <code>ProviderAttributeName</code> set to <code>Cognito_Subject</code>, the same applies here). However, if the user has already signed in, the <code>ProviderAttributeName</code> must be <code>Cognito_Subject</code> and <code>ProviderAttributeValue</code> must be the subject of the SAML assertion.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked <code>DestinationUser</code>, the user must create a new user account.</p> <p>The value of <code>ProviderName</code> must match the name of a user pool IdP.</p> <p>To deactivate a local user, set <code>ProviderName</code> to <code>Cognito</code> and the <code>ProviderAttributeName</code> to <code>Cognito_Subject</code>. The <code>ProviderAttributeValue</code> must be user's local username.</p> <p>The <code>ProviderAttributeName</code> must always be <code>Cognito_Subject</code> for social IdPs. The <code>ProviderAttributeValue</code> must always be the exact subject that was used when the user was originally linked as a source user.</p> <p>For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the <code>ProviderAttributeName</code> and <code>ProviderAttributeValue</code> must be the same values that were used for the <code>SourceUser</code> when the identities were originally linked using <code> AdminLinkProviderForUser</code> call. This is also true if the linking was done with <code>ProviderAttributeName</code> set to <code>Cognito_Subject</code>. If the user has already signed in, the <code>ProviderAttributeName</code> must be <code>Cognito_Subject</code> and <code>ProviderAttributeValue</code> must be the <code>NameID</code> from their SAML assertion.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminDisableUser":{
       "name":"AdminDisableUser",
@@ -188,7 +188,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Activate sign-in for a user profile that previously had sign-in access disabled.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Activates sign-in for a user profile that previously had sign-in access disabled.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminForgetDevice":{
       "name":"AdminForgetDevice",
@@ -224,7 +224,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"NotAuthorizedException"}
       ],
-      "documentation":"<p>Given the device key, returns details for a user' device. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given the device key, returns details for a user's device. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminGetUser":{
       "name":"AdminGetUser",
@@ -242,7 +242,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Given the username, returns details about a user profile in a user pool. This operation contributes to your monthly active user (MAU) count for the purpose of billing. You can specify alias attributes in the <code>Username</code> parameter.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a username, returns details about a user profile in a user pool. You can specify alias attributes in the <code>Username</code> request parameter.</p> <p>This operation contributes to your monthly active user (MAU) count for the purpose of billing.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminInitiateAuth":{
       "name":"AdminInitiateAuth",
@@ -254,6 +254,7 @@
       "output":{"shape":"AdminInitiateAuthResponse"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
+        {"shape":"UnsupportedOperationException"},
         {"shape":"InvalidParameterException"},
         {"shape":"NotAuthorizedException"},
         {"shape":"TooManyRequestsException"},
@@ -290,7 +291,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Links an existing user account in a user pool (<code>DestinationUser</code>) to an identity from an external IdP (<code>SourceUser</code>) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in. You can then use the federated user identity to sign in as the existing user account. </p> <p> For example, if there is an existing user with a username and password, this API links that user to a federated user identity. When the user signs in with a federated user identity, they sign in as the existing user account.</p> <note> <p>The maximum number of federated identities linked to a user is five.</p> </note> <important> <p>Because this API allows a user with an external federated identity to sign in as an existing user in the user pool, it is critical that it only be used with external IdPs and provider attributes that have been trusted by the application owner.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Links an existing user account in a user pool, or <code>DestinationUser</code>, to an identity from an external IdP, or <code>SourceUser</code>, based on a specified attribute name and value from the external IdP.</p> <p>This operation connects a local user profile with a user identity who hasn't yet signed in from their third-party IdP. When the user signs in with their IdP, they get access-control configuration from the local user profile. Linked local users can also sign in with SDK-based API operations like <code>InitiateAuth</code> after they sign in at least once through their IdP. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html\">Linking federated users</a>.</p> <note> <p>The maximum number of federated identities linked to a user is five.</p> </note> <important> <p>Because this API allows a user with an external federated identity to sign in as a local user, it is critical that it only be used with external IdPs and linked attributes that you trust.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminListDevices":{
       "name":"AdminListDevices",
@@ -362,7 +363,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Given a username and a group name. removes them from the group. User pool groups are identifiers that you can reference from the contents of ID and access tokens, and set preferred IAM roles for identity-pool authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a username and a group name, removes them from the group. User pool groups are identifiers that you can reference from the contents of ID and access tokens, and set preferred IAM roles for identity-pool authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminResetUserPassword":{
       "name":"AdminResetUserPassword",
@@ -387,7 +388,7 @@
         {"shape":"InvalidSmsRoleTrustRelationshipException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Resets the specified user's password in a user pool. This operation doesn't change the user's password, but sends a password-reset code. This operation is the administrative authentication API equivalent to <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html\">ForgotPassword</a>.</p> <p>This operation deactivates a user's password, requiring them to change it. If a user tries to sign in after the API request, Amazon Cognito responds with a <code>PasswordResetRequiredException</code> error. Your app must then complete the forgot-password flow by prompting the user for their code and a new password, then submitting those values in a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html\">ConfirmForgotPassword</a> request. In addition, if the user pool has phone verification selected and a verified phone number exists for the user, or if email verification is selected and a verified email exists for the user, calling this API will also result in sending a message to the end user with the code to change their password.</p> <p>To use this API operation, your user pool must have self-service account recovery configured. Use <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html\">AdminSetUserPassword</a> if you manage passwords as an administrator.</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Begins the password reset process. Sets the requested user’s account into a <code>RESET_REQUIRED</code> status, and sends them a password-reset code. Your user pool also sends the user a notification with a reset code and the information that their password has been reset. At sign-in, your application or the managed login session receives a challenge to complete the reset by confirming the code and setting a new password.</p> <p>To use this API operation, your user pool must have self-service account recovery configured.</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminRespondToAuthChallenge":{
       "name":"AdminRespondToAuthChallenge",
@@ -440,7 +441,7 @@
         {"shape":"UserNotConfirmedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Sets the user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in.</p> <p>This operation doesn't reset an existing TOTP MFA for a user. To register a new TOTP factor for a user, make an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html\">AssociateSoftwareToken</a> request. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa-totp.html\">TOTP software token MFA</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Sets the user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminSetUserPassword":{
       "name":"AdminSetUserPassword",
@@ -477,7 +478,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p> <i>This action is no longer supported.</i> You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html\">AdminSetUserMFAPreference</a> instead.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p> <i>This action is no longer supported.</i> You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminUpdateAuthEventFeedback":{
       "name":"AdminUpdateAuthEventFeedback",
@@ -496,7 +497,7 @@
         {"shape":"UserPoolAddOnNotEnabledException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Provides feedback for an authentication event indicating if it was from a valid user. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito threat protection. To train the threat-protection model to recognize trusted and untrusted sign-in characteristics, configure threat protection in audit-only mode and provide a mechanism for users or administrators to submit feedback. Your feedback can tell Amazon Cognito that a risk rating was assigned at a level you don't agree with.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Provides the feedback for an authentication event generated by threat protection features. Your response indicates that you think that the event either was from a valid user or was an unwanted authentication attempt. This feedback improves the risk evaluation decision for the user pool as part of Amazon Cognito threat protection. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p> <p>To train the threat-protection model to recognize trusted and untrusted sign-in characteristics, configure threat protection in audit-only mode and provide a mechanism for users or administrators to submit feedback. Your feedback can tell Amazon Cognito that a risk rating was assigned at a level you don't agree with.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "AdminUpdateDeviceStatus":{
       "name":"AdminUpdateDeviceStatus",
@@ -540,7 +541,7 @@
         {"shape":"InvalidEmailRoleAccessPolicyException"},
         {"shape":"InvalidSmsRoleTrustRelationshipException"}
       ],
-      "documentation":"<note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>Updates the specified user's attributes. To delete an attribute from your user, submit the attribute in your API request with a blank value.</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p> <p>This operation can set a user's email address or phone number as verified and permit immediate sign-in in user pools that require verification of these attributes. To do this, set the <code>email_verified</code> or <code>phone_number_verified</code> attribute to <code>true</code>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Updates the specified user's attributes. To delete an attribute from your user, submit the attribute in your API request with a blank value.</p> <p>For custom attributes, you must add a <code>custom:</code> prefix to the attribute name, for example <code>custom:department</code>.</p> <p>This operation can set a user's email address or phone number as verified and permit immediate sign-in in user pools that require verification of these attributes. To do this, set the <code>email_verified</code> or <code>phone_number_verified</code> attribute to <code>true</code>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>"
     },
     "AdminUserGlobalSignOut":{
       "name":"AdminUserGlobalSignOut",
@@ -577,7 +578,7 @@
         {"shape":"SoftwareTokenMFANotFoundException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an <code>AssociateSoftwareToken</code> request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito.</p> <note> <p>Amazon Cognito disassociates an existing software token when you verify the new token in a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html\"> VerifySoftwareToken</a> API request. If you don't verify the software token and your user pool doesn't require MFA, the user can then authenticate with user name and password credentials alone. If your user pool requires TOTP MFA, Amazon Cognito generates an <code>MFA_SETUP</code> or <code>SOFTWARE_TOKEN_SETUP</code> challenge each time your user signs in. Complete setup with <code>AssociateSoftwareToken</code> and <code>VerifySoftwareToken</code>.</p> <p>After you set up software token MFA for your user, Amazon Cognito generates a <code>SOFTWARE_TOKEN_MFA</code> challenge when they authenticate. Respond to this challenge with your user's TOTP.</p> </note> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
+      "documentation":"<p>Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an <code>AssociateSoftwareToken</code> request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -603,7 +604,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Changes the password for a specified user in a user pool.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Changes the password for the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -629,7 +630,7 @@
         {"shape":"WebAuthnOriginNotAllowedException"},
         {"shape":"WebAuthnCredentialNotSupportedException"}
       ],
-      "documentation":"<p>Completes registration of a passkey authenticator for the current user. Your application provides data from a successful registration request with the data from the output of a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartWebAuthnRegistration.html\"> StartWebAuthnRegistration</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
+      "documentation":"<p>Completes registration of a passkey authenticator for the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -654,6 +655,7 @@
         {"shape":"UserNotFoundException"},
         {"shape":"UserNotConfirmedException"},
         {"shape":"InternalErrorException"},
+        {"shape":"DeviceKeyExistsException"},
         {"shape":"ForbiddenException"}
       ],
       "documentation":"<p>Confirms a device that a user wants to remember. A remembered device is a \"Remember me on this device\" option for user pools that perform authentication with the device key of a trusted device in the back end, instead of a user-provided MFA code. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
@@ -716,7 +718,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>This public API operation submits a code that Amazon Cognito sent to your user when they signed up in your user pool via the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html\">SignUp</a> API operation. After your user enters their code, they confirm ownership of the email address or phone number that they provided, and their user account becomes active. Depending on your user pool configuration, your users will receive their confirmation code in an email or SMS message.</p> <p>Local users who signed up in your user pool are the only type of user who can confirm sign-up with a code. Users who federate through an external identity provider (IdP) have already been confirmed by their IdP. Administrator-created users, users created with the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html\">AdminCreateUser</a> API operation, confirm their accounts when they respond to their invitation email message and choose a password. They do not receive a confirmation code. Instead, they receive a temporary password.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Confirms the account of a new user. This public API operation submits a code that Amazon Cognito sent to your user when they signed up in your user pool. After your user enters their code, they confirm ownership of the email address or phone number that they provided, and their user account becomes active. Depending on your user pool configuration, your users will receive their confirmation code in an email or SMS message.</p> <p>Local users who signed up in your user pool are the only type of user who can confirm sign-up with a code. Users who federate through an external identity provider (IdP) have already been confirmed by their IdP.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -737,7 +739,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Creates a new group in the specified user pool. For more information about user pool groups see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates a new group in the specified user pool. For more information about user pool groups, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "CreateIdentityProvider":{
       "name":"CreateIdentityProvider",
@@ -776,7 +778,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Creates a new set of branding settings for a user pool style and associates it with an app client. This operation is the programmatic option for the creation of a new style in the branding designer.</p> <p>Provides values for UI customization in a <code>Settings</code> JSON object and image files in an <code>Assets</code> array. To send the JSON object <code>Document</code> type parameter in <code>Settings</code>, you might need to update to the most recent version of your Amazon Web Services SDK. To create a new style with default settings, set <code>UseCognitoProvidedValues</code> to <code>true</code> and don't provide values for any other options.</p> <p> This operation has a 2-megabyte request-size limit and include the CSS settings and image assets for your app client. Your branding settings might exceed 2MB in size. Amazon Cognito doesn't require that you pass all parameters in one request and preserves existing style settings that you don't specify. If your request is larger than 2MB, separate it into multiple requests, each with a size smaller than the limit. </p> <p>As a best practice, modify the output of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBrandingByClient.html\">DescribeManagedLoginBrandingByClient</a> into the request parameters for this operation. To get all settings, set <code>ReturnMergedResources</code> to <code>true</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/managed-login-brandingdesigner.html#branding-designer-api\">API and SDK operations for managed login branding</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates a new set of branding settings for a user pool style and associates it with an app client. This operation is the programmatic option for the creation of a new style in the branding editor.</p> <p>Provides values for UI customization in a <code>Settings</code> JSON object and image files in an <code>Assets</code> array. To send the JSON object <code>Document</code> type parameter in <code>Settings</code>, you might need to update to the most recent version of your Amazon Web Services SDK. To create a new style with default settings, set <code>UseCognitoProvidedValues</code> to <code>true</code> and don't provide values for any other options.</p> <p> This operation has a 2-megabyte request-size limit and include the CSS settings and image assets for your app client. Your branding settings might exceed 2MB in size. Amazon Cognito doesn't require that you pass all parameters in one request and preserves existing style settings that you don't specify. If your request is larger than 2MB, separate it into multiple requests, each with a size smaller than the limit. </p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "CreateResourceServer":{
       "name":"CreateResourceServer",
@@ -796,6 +798,26 @@
       ],
       "documentation":"<p>Creates a new OAuth2.0 resource server and defines custom scopes within it. Resource servers are associated with custom scopes and machine-to-machine (M2M) authorization. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\">Access control with resource servers</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
+    "CreateTerms":{
+      "name":"CreateTerms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateTermsRequest"},
+      "output":{"shape":"CreateTermsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConcurrentModificationException"},
+        {"shape":"TermsExistsException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Creates terms documents for the requested app client. When Terms and conditions and Privacy policy documents are configured, the app client displays links to them in the sign-up page of managed login for the app client.</p> <p>You can provide URLs for terms documents in the languages that are supported by <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-localization\">managed login localization</a>. Amazon Cognito directs users to the terms documents for their current language, with fallback to <code>default</code> if no document exists for the language.</p> <p>Each request accepts one type of terms document and a map of language-to-link for that document type. You must provide both types of terms documents in at least one language before Amazon Cognito displays your terms documents. Supply each type in separate requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-terms-documents\">Terms documents</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+    },
     "CreateUserImportJob":{
       "name":"CreateUserImportJob",
       "http":{
@@ -813,7 +835,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Creates a user import job. You can import users into user pools from a comma-separated values (CSV) file without adding Amazon Cognito MAU costs to your Amazon Web Services bill. To generate a template for your import, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetCSVHeader.html\">GetCSVHeader</a>. To learn more about CSV import, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users from a CSV file</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates a user import job. You can import users into user pools from a comma-separated values (CSV) file without adding Amazon Cognito MAU costs to your Amazon Web Services bill.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "CreateUserPool":{
       "name":"CreateUserPool",
@@ -836,7 +858,7 @@
         {"shape":"TierChangeNotAllowedException"},
         {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>Creates a new Amazon Cognito user pool. This operation sets basic and advanced configuration options. You can create a user pool in the Amazon Cognito console to your preferences and use the output of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a> to generate requests from that baseline.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates a new Amazon Cognito user pool. This operation sets basic and advanced configuration options.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "CreateUserPoolClient":{
       "name":"CreateUserPoolClient",
@@ -854,9 +876,10 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"ScopeDoesNotExistException"},
         {"shape":"InvalidOAuthFlowException"},
-        {"shape":"InternalErrorException"}
+        {"shape":"InternalErrorException"},
+        {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<p>Creates an app client in a user pool. This operation sets basic and advanced configuration options. You can create an app client in the Amazon Cognito console to your preferences and use the output of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">DescribeUserPoolClient</a> to generate requests from that baseline.</p> <p>New app clients activate token revocation by default. For more information about revoking tokens, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html\">RevokeToken</a>.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Creates an app client in a user pool. This operation sets basic and advanced configuration options.</p> <p>Unlike app clients created in the console, Amazon Cognito doesn't automatically assign a branding style to app clients that you configure with this API operation. Managed login and classic hosted UI pages aren't available for your client until after you apply a branding style.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "CreateUserPoolDomain":{
       "name":"CreateUserPoolDomain",
@@ -869,12 +892,13 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"NotAuthorizedException"},
+        {"shape":"ConcurrentModificationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"LimitExceededException"},
         {"shape":"InternalErrorException"},
         {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<p>A user pool domain hosts managed login, an authorization server and web server for authentication in your application. This operation creates a new user pool prefix or custom domain and sets the managed login branding version. Set the branding version to <code>1</code> for hosted UI (classic) or <code>2</code> for managed login. When you choose a custom domain, you must provide an SSL certificate in the US East (N. Virginia) Amazon Web Services Region in your request.</p> <p>Your prefix domain might take up to one minute to take effect. Your custom domain is online within five minutes, but it can take up to one hour to distribute your SSL certificate.</p> <p>For more information about adding a custom domain to your user pool, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html\">Configuring a user pool domain</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>A user pool domain hosts managed login, an authorization server and web server for authentication in your application. This operation creates a new user pool prefix domain or custom domain and sets the managed login branding version. Set the branding version to <code>1</code> for hosted UI (classic) or <code>2</code> for managed login. When you choose a custom domain, you must provide an SSL certificate in the US East (N. Virginia) Amazon Web Services Region in your request.</p> <p>Your prefix domain might take up to one minute to take effect. Your custom domain is online within five minutes, but it can take up to one hour to distribute your SSL certificate.</p> <p>For more information about adding a custom domain to your user pool, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html\">Configuring a user pool domain</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "DeleteGroup":{
       "name":"DeleteGroup",
@@ -943,6 +967,23 @@
       ],
       "documentation":"<p>Deletes a resource server. After you delete a resource server, users can no longer generate access tokens with scopes that are associate with that resource server.</p> <p>Resource servers are associated with custom scopes and machine-to-machine (M2M) authorization. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\">Access control with resource servers</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
+    "DeleteTerms":{
+      "name":"DeleteTerms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteTermsRequest"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConcurrentModificationException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Deletes the terms documents with the requested ID from your app client.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+    },
     "DeleteUser":{
       "name":"DeleteUser",
       "http":{
@@ -961,7 +1002,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Self-deletes a user profile. A deleted user profile can no longer be used to sign in and can't be restored.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Deletes the profile of the currently signed-in user. A deleted user profile can no longer be used to sign in and can't be restored.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -984,7 +1025,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Self-deletes attributes for a user. For example, your application can submit a request to this operation when a user wants to remove their <code>birthdate</code> attribute value.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Deletes attributes from the currently signed-in user. For example, your application can submit a request to this operation when a user wants to remove their <code>birthdate</code> attribute value.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1003,7 +1044,7 @@
         {"shape":"UserImportInProgressException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Deletes a user pool. After you delete a user pool, users can no longer sign in to any associated applications. </p> <p/>"
+      "documentation":"<p>Deletes a user pool. After you delete a user pool, users can no longer sign in to any associated applications. </p> <p>When you delete a user pool, it's no longer visible or operational in your Amazon Web Services account. Amazon Cognito retains deleted user pools in an inactive state for 14 days, then begins a cleanup process that fully removes them from Amazon Web Services systems. In case of accidental deletion, contact Amazon Web ServicesSupport within 14 days for restoration assistance.</p> <p>Amazon Cognito begins full deletion of all resources from deleted user pools after 14 days. In the case of large user pools, the cleanup process might take significant additional time before all user data is permanently deleted.</p>"
     },
     "DeleteUserPoolClient":{
       "name":"DeleteUserPoolClient",
@@ -1033,6 +1074,7 @@
       "errors":[
         {"shape":"NotAuthorizedException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"ConcurrentModificationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalErrorException"}
       ],
@@ -1050,10 +1092,12 @@
         {"shape":"ForbiddenException"},
         {"shape":"InternalErrorException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"LimitExceededException"},
         {"shape":"NotAuthorizedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes a registered passkey, or webauthN, authenticator for the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Deletes a registered passkey, or WebAuthn, authenticator for the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1143,6 +1187,23 @@
       ],
       "documentation":"<p>Given an app client or user pool ID where threat protection is configured, describes the risk configuration. This operation returns details about adaptive authentication, compromised credentials, and IP-address allow- and denylists. For more information about threat protection, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html\">Threat protection</a>.</p>"
     },
+    "DescribeTerms":{
+      "name":"DescribeTerms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeTermsRequest"},
+      "output":{"shape":"DescribeTermsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Returns details for the requested terms documents ID. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-terms-documents\">Terms documents</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+    },
     "DescribeUserImportJob":{
       "name":"DescribeUserImportJob",
       "http":{
@@ -1230,7 +1291,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Forgets the specified device. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Given a device key, deletes a remembered device as the currently signed-in user. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1259,7 +1320,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Calling this API causes a message to be sent to the end user with a confirmation code that is required to change the user's password. For the <code>Username</code> parameter, you can use the username or user alias. The method used to send the confirmation code is sent according to the specified AccountRecoverySetting. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-recover-a-user-account.html\">Recovering User Accounts</a> in the <i>Amazon Cognito Developer Guide</i>. To use the confirmation code for resetting the password, call <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html\">ConfirmForgotPassword</a>. </p> <p>If neither a verified phone number nor a verified email exists, this API returns <code>InvalidParameterException</code>. If your app client has a client secret and you don't provide a <code>SECRET_HASH</code> parameter, this API returns <code>NotAuthorizedException</code>.</p> <p>To use this API operation, your user pool must have self-service account recovery configured. Use <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html\">AdminSetUserPassword</a> if you manage passwords as an administrator.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
+      "documentation":"<p>Sends a password-reset confirmation code to the email address or phone number of the requested username. The message delivery method is determined by the user's available attributes and the <code>AccountRecoverySetting</code> configuration of the user pool.</p> <p>For the <code>Username</code> parameter, you can use the username or an email, phone, or preferred username alias.</p> <p>If neither a verified phone number nor a verified email exists, Amazon Cognito responds with an <code>InvalidParameterException</code> error . If your app client has a client secret and you don't provide a <code>SECRET_HASH</code> parameter, this API returns <code>NotAuthorizedException</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1278,7 +1339,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets the header information for the comma-separated value (CSV) file to be used as input for the user import job.</p>"
+      "documentation":"<p>Given a user pool ID, generates a comma-separated value (CSV) list populated with available user attributes in the user pool. This list is the header for the CSV file that determines the users in a user import job. Save the content of <code>CSVHeader</code> in the response as a <code>.csv</code> file and populate it with the usernames and attributes of users that you want to import. For more information about CSV user import, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users from a CSV file</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "GetDevice":{
       "name":"GetDevice",
@@ -1300,7 +1361,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Gets the device. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Given a device key, returns information about a remembered device for the current user. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1319,7 +1380,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets a group.</p> <p>Calling this action requires developer credentials.</p>"
+      "documentation":"<p>Given a user pool ID and a group name, returns information about the user group.</p> <p> For more information about user pool groups, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "GetIdentityProviderByIdentifier":{
       "name":"GetIdentityProviderByIdentifier",
@@ -1336,7 +1397,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets the specified IdP.</p>"
+      "documentation":"<p>Given the identifier of an identity provider (IdP), for example <code>examplecorp</code>, returns information about the user pool configuration for that IdP. For more information about IdPs, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\">Third-party IdP sign-in</a>.</p>"
     },
     "GetLogDeliveryConfiguration":{
       "name":"GetLogDeliveryConfiguration",
@@ -1353,7 +1414,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets the logging configuration of a user pool.</p>"
+      "documentation":"<p>Given a user pool ID, returns the logging configuration. User pools can export message-delivery error and threat-protection activity logs to external Amazon Web Services services. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/exporting-quotas-and-usage.html\">Exporting user pool logs</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "GetSigningCertificate":{
       "name":"GetSigningCertificate",
@@ -1368,7 +1429,32 @@
         {"shape":"InvalidParameterException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>This method takes a user pool ID, and returns the signing certificate. The issued certificate is valid for 10 years from the date of issue.</p> <p>Amazon Cognito issues and assigns a new signing certificate annually. This process returns a new value in the response to <code>GetSigningCertificate</code>, but doesn't invalidate the original certificate.</p>"
+      "documentation":"<p>Given a user pool ID, returns the signing certificate for SAML 2.0 federation.</p> <p>Issued certificates are valid for 10 years from the date of issue. Amazon Cognito issues and assigns a new signing certificate annually. This renewal process returns a new value in the response to <code>GetSigningCertificate</code>, but doesn't invalidate the original certificate.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-SAML-signing-encryption.html#cognito-user-pools-SAML-signing\">Signing SAML requests</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+    },
+    "GetTokensFromRefreshToken":{
+      "name":"GetTokensFromRefreshToken",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetTokensFromRefreshTokenRequest"},
+      "output":{"shape":"GetTokensFromRefreshTokenResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"UserNotFoundException"},
+        {"shape":"UnexpectedLambdaException"},
+        {"shape":"UserLambdaValidationException"},
+        {"shape":"InvalidLambdaResponseException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"RefreshTokenReuseException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Given a refresh token, issues new ID, access, and optionally refresh tokens for the user who owns the submitted token. This operation issues a new refresh token and invalidates the original refresh token after an optional grace period when refresh token rotation is enabled. If refresh token rotation is disabled, issues new ID and access tokens only.</p>",
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "GetUICustomization":{
       "name":"GetUICustomization",
@@ -1385,7 +1471,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets the user interface (UI) Customization information for a particular app client's app UI, if any such information exists for the client. If nothing is set for the particular client, but there is an existing pool level customization (the app <code>clientId</code> is <code>ALL</code>), then that information is returned. If nothing is present, then an empty shape is returned.</p>"
+      "documentation":"<p>Given a user pool ID or app client, returns information about classic hosted UI branding that you applied, if any. Returns user-pool level branding information if no app client branding is applied, or if you don't specify an app client ID. Returns an empty object if you haven't applied hosted UI branding to either the client or the user pool. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/hosted-ui-classic-branding.html\">Hosted UI (classic) branding</a>.</p>"
     },
     "GetUser":{
       "name":"GetUser",
@@ -1406,7 +1492,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Gets the user attributes and metadata for a user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Gets user attributes and and MFA settings for the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1437,7 +1523,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Generates a user attribute verification code for the specified attribute name. Sends a message to a user with a code that they must return in a VerifyUserAttribute request.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
+      "documentation":"<p>Given an attribute name, sends a user attribute verification code for the specified attribute name to the currently signed-in user.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1460,7 +1546,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Lists the authentication options for the currently signed-in user. Returns the following:</p> <ol> <li> <p>The user's multi-factor authentication (MFA) preferences.</p> </li> <li> <p>The user's options in the <code>USER_AUTH</code> flow that they can select in a <code>SELECT_CHALLENGE</code> response or request in a <code>PREFERRED_CHALLENGE</code>request.</p> </li> </ol>",
+      "documentation":"<p>Lists the authentication options for the currently signed-in user. Returns the following:</p> <ol> <li> <p>The user's multi-factor authentication (MFA) preferences.</p> </li> <li> <p>The user's options for choice-based authentication with the <code>USER_AUTH</code> flow.</p> </li> </ol> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1479,7 +1565,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Gets the user pool multi-factor authentication (MFA) configuration.</p>"
+      "documentation":"<p>Given a user pool ID, returns configuration for sign-in with WebAuthn authenticators and for multi-factor authentication (MFA). This operation describes the following:</p> <ul> <li> <p>The WebAuthn relying party (RP) ID and user-verification settings.</p> </li> <li> <p>The required, optional, or disabled state of MFA for all user pool users.</p> </li> <li> <p>The message templates for email and SMS MFA.</p> </li> <li> <p>The enabled or disabled state of time-based one-time password (TOTP) MFA.</p> </li> </ul> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "GlobalSignOut":{
       "name":"GlobalSignOut",
@@ -1512,6 +1598,7 @@
       "input":{"shape":"InitiateAuthRequest"},
       "output":{"shape":"InitiateAuthResponse"},
       "errors":[
+        {"shape":"UnsupportedOperationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
         {"shape":"NotAuthorizedException"},
@@ -1529,7 +1616,7 @@
         {"shape":"InvalidSmsRoleTrustRelationshipException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Initiates sign-in for a user in the Amazon Cognito user directory. You can't sign in a user with a federated IdP with <code>InitiateAuth</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\"> Adding user pool sign-in through a third party</a>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
+      "documentation":"<p>Declares an authentication flow and initiates sign-in for a user in the Amazon Cognito user directory. Amazon Cognito might respond with an additional challenge or an <code>AuthenticationResult</code> that contains the outcome of a successful authentication. You can't sign in a user with a federated IdP with <code>InitiateAuth</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html\">Authentication</a>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1553,7 +1640,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Lists the sign-in devices that Amazon Cognito has registered to the current user. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Lists the devices that Amazon Cognito has registered to the currently signed-in user. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1572,7 +1659,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the groups associated with a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, returns user pool groups and their details.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListIdentityProviders":{
       "name":"ListIdentityProviders",
@@ -1589,7 +1676,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists information about all IdPs for a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, returns information about configured identity providers (IdPs). For more information about IdPs, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\">Third-party IdP sign-in</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListResourceServers":{
       "name":"ListResourceServers",
@@ -1606,7 +1693,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the resource servers for a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, returns all resource servers and their details. For more information about resource servers, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\">Access control with resource servers</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1623,7 +1710,24 @@
         {"shape":"InvalidParameterException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the tags that are assigned to an Amazon Cognito user pool.</p> <p>A tag is a label that you can apply to user pools to categorize and manage them in different ways, such as by purpose, owner, environment, or other criteria.</p> <p>You can use this action up to 10 times per second, per account.</p>"
+      "documentation":"<p>Lists the tags that are assigned to an Amazon Cognito user pool. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/tagging.html\">Tagging resources</a>.</p>"
+    },
+    "ListTerms":{
+      "name":"ListTerms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTermsRequest"},
+      "output":{"shape":"ListTermsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Returns details about all terms documents for the requested user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListUserImportJobs":{
       "name":"ListUserImportJobs",
@@ -1640,7 +1744,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists user import jobs for a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, returns user import jobs and their details. Import jobs are retained in user pool configuration so that you can stage, stop, start, review, and delete them. For more information about user import, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users from a CSV file</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListUserPoolClients":{
       "name":"ListUserPoolClients",
@@ -1657,7 +1761,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the clients that have been created for the specified user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, lists app clients. App clients are sets of rules for the access that you want a user pool to grant to one application. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html\">App clients</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListUserPools":{
       "name":"ListUserPools",
@@ -1673,7 +1777,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the user pools associated with an Amazon Web Services account.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Lists user pools and their details in the current Amazon Web Services account.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListUsers":{
       "name":"ListUsers",
@@ -1690,7 +1794,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists users and their basic details in a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID, returns a list of users and their basic details in a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListUsersInGroup":{
       "name":"ListUsersInGroup",
@@ -1707,7 +1811,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Lists the users in the specified group.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool ID and a group name, returns a list of users in the group. For more information about user pool groups, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "ListWebAuthnCredentials":{
       "name":"ListWebAuthnCredentials",
@@ -1721,9 +1825,11 @@
         {"shape":"ForbiddenException"},
         {"shape":"InternalErrorException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"LimitExceededException"},
         {"shape":"NotAuthorizedException"}
       ],
-      "documentation":"<p>Generates a list of the current user's registered passkey, or webauthN, credentials.</p>",
+      "documentation":"<p>Generates a list of the currently signed-in user's registered passkey, or WebAuthn, credentials.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1752,7 +1858,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Resends the confirmation (for confirmation of registration) to a specific user in the user pool.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
+      "documentation":"<p>Resends the code that confirms a new account for a user who has signed up in your user pool. Amazon Cognito sends confirmation codes to the user attribute in the <code>AutoVerifiedAttributes</code> property of your user pool. When you prompt new users for the confirmation code, include a \"Resend code\" option that generates a call to this API operation.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1830,7 +1936,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<p>Sets up or modifies the logging configuration of a user pool. User pools can export user notification logs and advanced security features user activity logs.</p>"
+      "documentation":"<p>Sets up or modifies the logging configuration of a user pool. User pools can export user notification logs and, when threat protection is active, user-activity logs. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/exporting-quotas-and-usage.html\">Exporting user pool logs</a>.</p>"
     },
     "SetRiskConfiguration":{
       "name":"SetRiskConfiguration",
@@ -1850,7 +1956,7 @@
         {"shape":"InvalidEmailRoleAccessPolicyException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Configures actions on detected risks. To delete the risk configuration for <code>UserPoolId</code> or <code>ClientId</code>, pass null values for all four configuration types.</p> <p>To activate Amazon Cognito advanced security features, update the user pool to include the <code>UserPoolAddOns</code> key<code>AdvancedSecurityMode</code>.</p>"
+      "documentation":"<p>Configures threat protection for a user pool or app client. Sets configuration for the following.</p> <ul> <li> <p>Responses to risks with adaptive authentication</p> </li> <li> <p>Responses to vulnerable passwords with compromised-credentials detection</p> </li> <li> <p>Notifications to users who have had risky activity detected</p> </li> <li> <p>IP-address denylist and allowlist</p> </li> </ul> <p>To set the risk configuration for the user pool to defaults, send this request with only the <code>UserPoolId</code> parameter. To reset the threat protection settings of an app client to be inherited from the user pool, send <code>UserPoolId</code> and <code>ClientId</code> parameters only. To change threat protection to audit-only or off, update the value of <code>UserPoolAddOns</code> in an <code>UpdateUserPool</code> request. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
     },
     "SetUICustomization":{
       "name":"SetUICustomization",
@@ -1867,7 +1973,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Sets the user interface (UI) customization information for a user pool's built-in app UI.</p> <p>You can specify app UI customization settings for a single client (with a specific <code>clientId</code>) or for all clients (by setting the <code>clientId</code> to <code>ALL</code>). If you specify <code>ALL</code>, the default configuration is used for every client that has no previously set UI customization. If you specify UI customization settings for a particular client, it will no longer return to the <code>ALL</code> configuration.</p> <note> <p>To use this API, your user pool must have a domain associated with it. Otherwise, there is no place to host the app's pages, and the service will throw an error.</p> </note>"
+      "documentation":"<p>Configures UI branding settings for domains with the hosted UI (classic) branding version. Your user pool must have a domain. Configure a domain with .</p> <p>Set the default configuration for all clients with a <code>ClientId</code> of <code>ALL</code>. When the <code>ClientId</code> value is an app client ID, the settings you pass in this request apply to that app client and override the default <code>ALL</code> configuration.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "SetUserMFAPreference":{
       "name":"SetUserMFAPreference",
@@ -1887,7 +1993,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool.</p> <p>This operation doesn't reset an existing TOTP MFA for a user. To register a new TOTP factor for a user, make an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html\">AssociateSoftwareToken</a> request. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa-totp.html\">TOTP software token MFA</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1910,7 +2016,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<p>Sets the user pool multi-factor authentication (MFA) and passkey configuration.</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>"
+      "documentation":"<p>Sets user pool multi-factor authentication (MFA) and passkey configuration. For more information about user pool MFA, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html\">Adding MFA</a>. For more information about WebAuthn passkeys see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html#amazon-cognito-user-pools-authentication-flow-methods-passkey\">Authentication flows</a>.</p> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>"
     },
     "SetUserSettings":{
       "name":"SetUserSettings",
@@ -1930,7 +2036,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p> <i>This action is no longer supported.</i> You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html\">SetUserMFAPreference</a> instead.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p> <i>This action is no longer supported.</i> You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token or email MFA.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1960,7 +2066,7 @@
         {"shape":"CodeDeliveryFailureException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Registers the user in the specified user pool and creates a user name, password, and user attributes.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>You might receive a <code>LimitExceeded</code> exception in response to this request if you have exceeded a rate quota for email or SMS messages, and if your user pool automatically verifies email addresses or phone numbers. When you get this exception in the response, the user is successfully created and is in an <code>UNCONFIRMED</code> state. You can send a new code with the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html\"> ResendConfirmationCode</a> request, or confirm the user as an administrator with an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html\"> AdminConfirmSignUp</a> request.</p>",
+      "documentation":"<p>Registers a user with an app client and requests a user name, password, and user attributes in the user pool.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>You might receive a <code>LimitExceeded</code> exception in response to this request if you have exceeded a rate quota for email or SMS messages, and if your user pool automatically verifies email addresses or phone numbers. When you get this exception in the response, the user is successfully created and is in an <code>UNCONFIRMED</code> state.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -1980,7 +2086,7 @@
         {"shape":"PreconditionNotMetException"},
         {"shape":"NotAuthorizedException"}
       ],
-      "documentation":"<p>Starts the user import.</p>"
+      "documentation":"<p>Instructs your user pool to start importing users from a CSV file that contains their usernames and attributes. For more information about importing users from a CSV file, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users from a CSV file</a>.</p>"
     },
     "StartWebAuthnRegistration":{
       "name":"StartWebAuthnRegistration",
@@ -2000,7 +2106,7 @@
         {"shape":"WebAuthnNotEnabledException"},
         {"shape":"WebAuthnConfigurationMissingException"}
       ],
-      "documentation":"<p>Requests credential creation options from your user pool for registration of a passkey authenticator. Returns information about the user pool, the user profile, and authentication requirements. Users must provide this information in their request to enroll your application with their passkey provider.</p> <p>After users present this data and register with their passkey provider, return the response to your user pool in a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CompleteWebAuthnRegistration.html\"> CompleteWebAuthnRegistration</a> API request.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
+      "documentation":"<p>Requests credential creation options from your user pool for the currently signed-in user. Returns information about the user pool, the user profile, and authentication requirements. Users must provide this information in their request to enroll your application with their passkey provider.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -2020,7 +2126,7 @@
         {"shape":"PreconditionNotMetException"},
         {"shape":"NotAuthorizedException"}
       ],
-      "documentation":"<p>Stops the user import job.</p>"
+      "documentation":"<p>Instructs your user pool to stop a running job that's importing users from a CSV file that contains their usernames and attributes. For more information about importing users from a CSV file, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users from a CSV file</a>.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -2054,7 +2160,7 @@
         {"shape":"InvalidParameterException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Removes the specified tags from an Amazon Cognito user pool. You can use this action up to 5 times per second, per account.</p>"
+      "documentation":"<p>Given tag IDs that you previously assigned to a user pool, removes them.</p>"
     },
     "UpdateAuthEventFeedback":{
       "name":"UpdateAuthEventFeedback",
@@ -2073,7 +2179,7 @@
         {"shape":"UserPoolAddOnNotEnabledException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Provides the feedback for an authentication event, whether it was from a valid user or not. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Provides the feedback for an authentication event generated by threat protection features. The user's response indicates that you think that the event either was from a valid user or was an unwanted authentication attempt. This feedback improves the risk evaluation decision for the user pool as part of Amazon Cognito threat protection. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p> <p>This operation requires a <code>FeedbackToken</code> that Amazon Cognito generates and adds to notification emails when users have potentially suspicious authentication events. Users invoke this operation when they select the link that corresponds to <code>{one-click-link-valid}</code> or <code>{one-click-link-invalid}</code> in your notification template. Because <code>FeedbackToken</code> is a required parameter, you can't make requests to <code>UpdateAuthEventFeedback</code> without the contents of the notification email message.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -2097,7 +2203,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Updates the device status. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Updates the status of a the currently signed-in user's device so that it is marked as remembered or not remembered for the purpose of device authentication. Device authentication is a \"remember me\" mechanism that silently completes sign-in from trusted devices with a device key instead of a user-provided MFA code. This operation changes the status of a device without deleting it, so you can enable it again later. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -2116,7 +2222,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Updates the specified group with the specified attributes.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given the name of a user pool group, updates any of the properties for precedence, IAM role, or description. For more information about user pool groups, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html\">Adding groups to a user pool</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateIdentityProvider":{
       "name":"UpdateIdentityProvider",
@@ -2135,7 +2241,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Updates IdP information for a user pool.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Modifies the configuration and trust relationship between a third-party identity provider (IdP) and a user pool. Amazon Cognito accepts sign-in with third-party identity providers through managed login and OIDC relying-party libraries. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\">Third-party IdP sign-in</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateManagedLoginBranding":{
       "name":"UpdateManagedLoginBranding",
@@ -2153,7 +2259,7 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Configures the branding settings for a user pool style. This operation is the programmatic option for the configuration of a style in the branding designer.</p> <p>Provides values for UI customization in a <code>Settings</code> JSON object and image files in an <code>Assets</code> array.</p> <p> This operation has a 2-megabyte request-size limit and include the CSS settings and image assets for your app client. Your branding settings might exceed 2MB in size. Amazon Cognito doesn't require that you pass all parameters in one request and preserves existing style settings that you don't specify. If your request is larger than 2MB, separate it into multiple requests, each with a size smaller than the limit. </p> <p>As a best practice, modify the output of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBrandingByClient.html\">DescribeManagedLoginBrandingByClient</a> into the request parameters for this operation. To get all settings, set <code>ReturnMergedResources</code> to <code>true</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/managed-login-brandingdesigner.html#branding-designer-api\">API and SDK operations for managed login branding</a> </p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Configures the branding settings for a user pool style. This operation is the programmatic option for the configuration of a style in the branding editor.</p> <p>Provides values for UI customization in a <code>Settings</code> JSON object and image files in an <code>Assets</code> array.</p> <p> This operation has a 2-megabyte request-size limit and include the CSS settings and image assets for your app client. Your branding settings might exceed 2MB in size. Amazon Cognito doesn't require that you pass all parameters in one request and preserves existing style settings that you don't specify. If your request is larger than 2MB, separate it into multiple requests, each with a size smaller than the limit.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateResourceServer":{
       "name":"UpdateResourceServer",
@@ -2170,7 +2276,26 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"}
       ],
-      "documentation":"<p>Updates the name and scopes of resource server. All other fields are read-only.</p> <important> <p>If you don't provide a value for an attribute, it is set to the default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Updates the name and scopes of a resource server. All other fields are read-only. For more information about resource servers, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\">Access control with resource servers</a>.</p> <important> <p>If you don't provide a value for an attribute, it is set to the default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+    },
+    "UpdateTerms":{
+      "name":"UpdateTerms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateTermsRequest"},
+      "output":{"shape":"UpdateTermsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConcurrentModificationException"},
+        {"shape":"TermsExistsException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotAuthorizedException"},
+        {"shape":"InternalErrorException"}
+      ],
+      "documentation":"<p>Modifies existing terms documents for the requested app client. When Terms and conditions and Privacy policy documents are configured, the app client displays links to them in the sign-up page of managed login for the app client.</p> <p>You can provide URLs for terms documents in the languages that are supported by <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-localization\">managed login localization</a>. Amazon Cognito directs users to the terms documents for their current language, with fallback to <code>default</code> if no document exists for the language.</p> <p>Each request accepts one type of terms document and a map of language-to-link for that document type. You must provide both types of terms documents in at least one language before Amazon Cognito displays your terms documents. Supply each type in separate requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-terms-documents\">Terms documents</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateUserAttributes":{
       "name":"UpdateUserAttributes",
@@ -2201,7 +2326,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>With this operation, your users can update one or more of their attributes with their own credentials. You authorize this API request with the user's access token. To delete an attribute from your user, submit the attribute in your API request with a blank value. Custom attribute values in this request must include the <code>custom:</code> prefix.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
+      "documentation":"<p>Updates the currently signed-in user's attributes. To delete an attribute from the user, submit the attribute in your API request with a blank value.</p> <p>For custom attributes, you must add a <code>custom:</code> prefix to the attribute name, for example <code>custom:department</code>.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -2228,7 +2353,7 @@
         {"shape":"TierChangeNotAllowedException"},
         {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>Updates the specified user pool with the specified attributes. You can get a list of the current user pool settings using <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Updates the configuration of a user pool. To avoid setting parameters to Amazon Cognito defaults, construct this API request to pass the existing configuration of your user pool, modified to include the changes that you want to make.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <note> <p>This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with <a href=\"https://console.aws.amazon.com/pinpoint/home/\">Amazon Pinpoint</a>. Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in.</p> <p>If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Services service, Amazon Simple Notification Service might place your account in the SMS sandbox. In <i> <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html\">sandbox mode</a> </i>, you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\"> SMS message settings for Amazon Cognito user pools</a> in the <i>Amazon Cognito Developer Guide</i>.</p> </note> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateUserPoolClient":{
       "name":"UpdateUserPoolClient",
@@ -2246,9 +2371,10 @@
         {"shape":"NotAuthorizedException"},
         {"shape":"ScopeDoesNotExistException"},
         {"shape":"InvalidOAuthFlowException"},
-        {"shape":"InternalErrorException"}
+        {"shape":"InternalErrorException"},
+        {"shape":"FeatureUnavailableInTierException"}
       ],
-      "documentation":"<p>Updates the specified user pool app client with the specified attributes. You can get a list of the current user pool app client settings using <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">DescribeUserPoolClient</a>.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <p>You can also use this operation to enable token revocation for user pool clients. For more information about revoking tokens, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html\">RevokeToken</a>.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
+      "documentation":"<p>Given a user pool app client ID, updates the configuration. To avoid setting parameters to Amazon Cognito defaults, construct this API request to pass the existing configuration of your app client, modified to include the changes that you want to make.</p> <important> <p>If you don't provide a value for an attribute, Amazon Cognito sets it to its default value.</p> </important> <p>Unlike app clients created in the console, Amazon Cognito doesn't automatically assign a branding style to app clients that you configure with this API operation. Managed login and classic hosted UI pages aren't available for your client until after you apply a branding style.</p> <note> <p>Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy.</p> <p class=\"title\"> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html\">Signing Amazon Web Services API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> </p> </li> </ul> </note>"
     },
     "UpdateUserPoolDomain":{
       "name":"UpdateUserPoolDomain",
@@ -2261,6 +2387,7 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"NotAuthorizedException"},
+        {"shape":"ConcurrentModificationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalErrorException"},
@@ -2292,7 +2419,7 @@
         {"shape":"CodeMismatchException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Use this API to register a user's entered time-based one-time password (TOTP) code and mark the user's software token MFA status as \"verified\" if successful. The request takes an access token or a session string, but not both.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Registers the current user's time-based one-time password (TOTP) authenticator with a code generated in their authenticator app from a private key that's supplied by your user pool. Marks the user's software token MFA status as \"verified\" if successful. The request takes an access token or a session string, but not both.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     },
@@ -2319,7 +2446,7 @@
         {"shape":"AliasExistsException"},
         {"shape":"ForbiddenException"}
       ],
-      "documentation":"<p>Verifies the specified user attributes in the user pool.</p> <p> If your user pool requires verification before Amazon Cognito updates the attribute value, VerifyUserAttribute updates the affected attribute to its pending value. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserAttributeUpdateSettingsType.html\"> UserAttributeUpdateSettingsType</a>. </p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
+      "documentation":"<p>Submits a verification code for a signed-in user who has added or changed a value of an auto-verified attribute. When successful, the user's attribute becomes verified and the attribute <code>email_verified</code> or <code>phone_number_verified</code> becomes <code>true</code>.</p> <p> If your user pool requires verification before Amazon Cognito updates the attribute value, this operation updates the affected attribute to its pending value.</p> <p>Authorize this action with a signed-in user's access token. It must include the scope <code>aws.cognito.signin.user.admin</code>.</p> <note> <p>Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a>.</p> </note>",
       "authtype":"none",
       "auth":["smithy.api#noAuth"]
     }
@@ -2343,7 +2470,7 @@
           "documentation":"<p>The list of options and priorities for user message delivery in forgot-password operations. Sets or displays user pool preferences for email or SMS message priority, whether users should fall back to a second delivery method, and whether passwords should only be reset by administrators.</p>"
         }
       },
-      "documentation":"<p>The settings for user message delivery in forgot-password operations. Contains preference for email or SMS message delivery of password reset codes, or for admin-only password reset.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The settings for user message delivery in forgot-password operations. Contains preference for email or SMS message delivery of password reset codes, or for admin-only password reset.</p>"
     },
     "AccountTakeoverActionNotifyType":{"type":"boolean"},
     "AccountTakeoverActionType":{
@@ -2362,25 +2489,25 @@
           "documentation":"<p>The action to take for the attempted account takeover action for the associated risk level. Valid values are as follows:</p> <ul> <li> <p> <code>BLOCK</code>: Block the request.</p> </li> <li> <p> <code>MFA_IF_CONFIGURED</code>: Present an MFA challenge if possible. MFA is possible if the user pool has active MFA methods that the user can set up. For example, if the user pool only supports SMS message MFA but the user doesn't have a phone number attribute, MFA setup isn't possible. If MFA setup isn't possible, allow the request.</p> </li> <li> <p> <code>MFA_REQUIRED</code>: Present an MFA challenge if possible. Block the request if a user hasn't set up MFA. To sign in with required MFA, users must have an email address or phone number attribute, or a registered TOTP factor.</p> </li> <li> <p> <code>NO_ACTION</code>: Take no action. Permit sign-in.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>The automated response to a risk level for adaptive authentication in full-function, or <code>ENFORCED</code>, mode. You can assign an action to each risk level that advanced security features evaluates.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>The automated response to a risk level for adaptive authentication in full-function, or <code>ENFORCED</code>, mode. You can assign an action to each risk level that threat protection evaluates.</p>"
     },
     "AccountTakeoverActionsType":{
       "type":"structure",
       "members":{
         "LowAction":{
           "shape":"AccountTakeoverActionType",
-          "documentation":"<p>The action that you assign to a low-risk assessment by advanced security features.</p>"
+          "documentation":"<p>The action that you assign to a low-risk assessment by threat protection.</p>"
         },
         "MediumAction":{
           "shape":"AccountTakeoverActionType",
-          "documentation":"<p>The action that you assign to a medium-risk assessment by advanced security features.</p>"
+          "documentation":"<p>The action that you assign to a medium-risk assessment by threat protection.</p>"
         },
         "HighAction":{
           "shape":"AccountTakeoverActionType",
-          "documentation":"<p>The action that you assign to a high-risk assessment by advanced security features.</p>"
+          "documentation":"<p>The action that you assign to a high-risk assessment by threat protection.</p>"
         }
       },
-      "documentation":"<p>A list of account-takeover actions for each level of risk that Amazon Cognito might assess with advanced security features.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>A list of account-takeover actions for each level of risk that Amazon Cognito might assess with threat protection features.</p>"
     },
     "AccountTakeoverEventActionType":{
       "type":"string",
@@ -2397,14 +2524,14 @@
       "members":{
         "NotifyConfiguration":{
           "shape":"NotifyConfigurationType",
-          "documentation":"<p>The settings for composing and sending an email message when advanced security features assesses a risk level with adaptive authentication. When you choose to notify users in <code>AccountTakeoverRiskConfiguration</code>, Amazon Cognito sends an email message using the method and template that you set with this data type.</p>"
+          "documentation":"<p>The settings for composing and sending an email message when threat protection assesses a risk level with adaptive authentication. When you choose to notify users in <code>AccountTakeoverRiskConfiguration</code>, Amazon Cognito sends an email message using the method and template that you set with this data type.</p>"
         },
         "Actions":{
           "shape":"AccountTakeoverActionsType",
-          "documentation":"<p>A list of account-takeover actions for each level of risk that Amazon Cognito might assess with advanced security features.</p>"
+          "documentation":"<p>A list of account-takeover actions for each level of risk that Amazon Cognito might assess with threat protection.</p>"
         }
       },
-      "documentation":"<p>The settings for automated responses and notification templates for adaptive authentication with advanced security features.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>The settings for automated responses and notification templates for adaptive authentication with threat protection features.</p>"
     },
     "AddCustomAttributesRequest":{
       "type":"structure",
@@ -2426,8 +2553,7 @@
     },
     "AddCustomAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server for the request to add custom attributes.</p>"
     },
     "AdminAddUserToGroupRequest":{
@@ -2444,7 +2570,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "GroupName":{
           "shape":"GroupNameType",
@@ -2465,19 +2591,18 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>If your user pool configuration includes triggers, the AdminConfirmSignUp API action invokes the Lambda function that is specified for the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. In this payload, the <code>clientMetadata</code> attribute provides the data that you assigned to the ClientMetadata parameter in your AdminConfirmSignUp request. In your function code in Lambda, you can process the ClientMetadata value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>If your user pool configuration includes triggers, the AdminConfirmSignUp API action invokes the Lambda function that is specified for the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. In this payload, the <code>clientMetadata</code> attribute provides the data that you assigned to the ClientMetadata parameter in your AdminConfirmSignUp request. In your function code in Lambda, you can process the ClientMetadata value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Confirm a user's registration as a user pool administrator.</p>"
     },
     "AdminConfirmSignUpResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server for the request to confirm registration.</p>"
     },
     "AdminCreateUserConfigType":{
@@ -2485,18 +2610,18 @@
       "members":{
         "AllowAdminCreateUserOnly":{
           "shape":"BooleanType",
-          "documentation":"<p>The setting for allowing self-service sign-up. When <code>true</code>, only administrators can create new user profiles. When <code>false</code>, users can register themselves and create a new user profile with the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html\">SignUp</a> operation.</p>"
+          "documentation":"<p>The setting for allowing self-service sign-up. When <code>true</code>, only administrators can create new user profiles. When <code>false</code>, users can register themselves and create a new user profile with the <code>SignUp</code> operation.</p>"
         },
         "UnusedAccountValidityDays":{
           "shape":"AdminCreateUserUnusedAccountValidityDaysType",
-          "documentation":"<p>This parameter is no longer in use. Configure the duration of temporary passwords with the <code>TemporaryPasswordValidityDays</code> parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_PasswordPolicyType.html\">PasswordPolicyType</a>. For older user pools that have a <code>UnusedAccountValidityDays</code> configuration, that value is effective until you set a value for <code>TemporaryPasswordValidityDays</code>.</p> <p>The password expiration limit in days for administrator-created users. When this time expires, the user can't sign in with their temporary password. To reset the account after that time limit, you must call <code>AdminCreateUser</code> again, specifying <code>RESEND</code> for the <code>MessageAction</code> parameter. </p> <p>The default value for this parameter is 7.</p>"
+          "documentation":"<p>This parameter is no longer in use.</p> <p>The password expiration limit in days for administrator-created users. When this time expires, the user can't sign in with their temporary password. To reset the account after that time limit, you must call <code>AdminCreateUser</code> again, specifying <code>RESEND</code> for the <code>MessageAction</code> parameter. </p> <p>The default value for this parameter is 7.</p>"
         },
         "InviteMessageTemplate":{
           "shape":"MessageTemplateType",
           "documentation":"<p>The template for the welcome message to new users. This template must include the <code>{####}</code> temporary password placeholder if you are creating users with passwords. If your users don't have passwords, you can omit the placeholder.</p> <p>See also <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-customizations.html#cognito-user-pool-settings-user-invitation-message-customization\">Customizing User Invitation Messages</a>.</p>"
         }
       },
-      "documentation":"<p>The settings for administrator creation of users in a user pool. Contains settings for allowing user sign-up, customizing invitation messages to new users, and the amount of time before temporary passwords expire.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The settings for administrator creation of users in a user pool. Contains settings for allowing user sign-up, customizing invitation messages to new users, and the amount of time before temporary passwords expire.</p>"
     },
     "AdminCreateUserRequest":{
       "type":"structure",
@@ -2515,15 +2640,15 @@
         },
         "UserAttributes":{
           "shape":"AttributeListType",
-          "documentation":"<p>An array of name-value pairs that contain user attributes and attribute values to be set for the user to be created. You can create a user without specifying any attributes other than <code>Username</code>. However, any attributes that you specify as required (when creating a user pool or in the <b>Attributes</b> tab of the console) either you should supply (in your call to <code>AdminCreateUser</code>) or the user should supply (when they sign up in response to your welcome message).</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p> <p>To send a message inviting the user to sign up, you must specify the user's email address or phone number. You can do this in your call to AdminCreateUser or in the <b>Users</b> tab of the Amazon Cognito console for managing your user pools.</p> <p>You must also provide an email address or phone number when you expect the user to do passwordless sign-in with an email or SMS OTP. These attributes must be provided when passwordless options are the only available, or when you don't submit a <code>TemporaryPassword</code>.</p> <p>In your call to <code>AdminCreateUser</code>, you can set the <code>email_verified</code> attribute to <code>True</code>, and you can set the <code>phone_number_verified</code> attribute to <code>True</code>. You can also do this by calling <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html\">AdminUpdateUserAttributes</a>.</p> <ul> <li> <p> <b>email</b>: The email address of the user to whom the message that contains the code and username will be sent. Required if the <code>email_verified</code> attribute is set to <code>True</code>, or if <code>\"EMAIL\"</code> is specified in the <code>DesiredDeliveryMediums</code> parameter.</p> </li> <li> <p> <b>phone_number</b>: The phone number of the user to whom the message that contains the code and username will be sent. Required if the <code>phone_number_verified</code> attribute is set to <code>True</code>, or if <code>\"SMS\"</code> is specified in the <code>DesiredDeliveryMediums</code> parameter.</p> </li> </ul>"
+          "documentation":"<p>An array of name-value pairs that contain user attributes and attribute values to be set for the user to be created. You can create a user without specifying any attributes other than <code>Username</code>. However, any attributes that you specify as required (when creating a user pool or in the <b>Attributes</b> tab of the console) either you should supply (in your call to <code>AdminCreateUser</code>) or the user should supply (when they sign up in response to your welcome message).</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p> <p>To send a message inviting the user to sign up, you must specify the user's email address or phone number. You can do this in your call to AdminCreateUser or in the <b>Users</b> tab of the Amazon Cognito console for managing your user pools.</p> <p>You must also provide an email address or phone number when you expect the user to do passwordless sign-in with an email or SMS OTP. These attributes must be provided when passwordless options are the only available, or when you don't submit a <code>TemporaryPassword</code>.</p> <p>In your <code>AdminCreateUser</code> request, you can set the <code>email_verified</code> and <code>phone_number_verified</code> attributes to <code>true</code>. The following conditions apply:</p> <dl> <dt>email</dt> <dd> <p>The email address where you want the user to receive their confirmation code and username. You must provide a value for <code>email</code> when you want to set <code>email_verified</code> to <code>true</code>, or if you set <code>EMAIL</code> in the <code>DesiredDeliveryMediums</code> parameter.</p> </dd> <dt>phone_number</dt> <dd> <p>The phone number where you want the user to receive their confirmation code and username. You must provide a value for <code>phone_number</code> when you want to set <code>phone_number_verified</code> to <code>true</code>, or if you set <code>SMS</code> in the <code>DesiredDeliveryMediums</code> parameter.</p> </dd> </dl>"
         },
         "ValidationData":{
           "shape":"AttributeListType",
-          "documentation":"<p>Temporary user attributes that contribute to the outcomes of your pre sign-up Lambda trigger. This set of key-value pairs are for custom validation of information that you collect from your users but don't need to retain.</p> <p>Your Lambda function can analyze this additional data and act on it. Your function might perform external API operations like logging user attributes and validation data to Amazon CloudWatch Logs. Validation data might also affect the response that your function returns to Amazon Cognito, like automatically confirming the user if they sign up from within your network.</p> <p>For more information about the pre sign-up Lambda trigger, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html\">Pre sign-up Lambda trigger</a>.</p>"
+          "documentation":"<p>Temporary user attributes that contribute to the outcomes of your pre sign-up Lambda trigger. This set of key-value pairs are for custom validation of information that you collect from your users but don't need to retain.</p> <p>Your Lambda function can analyze this additional data and act on it. Your function can automatically confirm and verify select users or perform external API operations like logging user attributes and validation data to Amazon CloudWatch Logs.</p> <p>For more information about the pre sign-up Lambda trigger, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html\">Pre sign-up Lambda trigger</a>.</p>"
         },
         "TemporaryPassword":{
           "shape":"PasswordType",
-          "documentation":"<p>The user's temporary password. This password must conform to the password policy that you specified when you created the user pool.</p> <p>The exception to the requirement for a password is when your user pool supports passwordless sign-in with email or SMS OTPs. To create a user with no password, omit this parameter or submit a blank value. You can only create a passwordless user when passwordless sign-in is available. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignInPolicyType.html\">the SignInPolicyType</a> property of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>.</p> <p>The temporary password is valid only once. To complete the Admin Create User flow, the user must enter the temporary password in the sign-in page, along with a new password to be used in all future sign-ins.</p> <p>If you don't specify a value, Amazon Cognito generates one for you unless you have passwordless options active for your user pool.</p> <p>The temporary password can only be used until the user account expiration limit that you set for your user pool. To reset the account after that time limit, you must call <code>AdminCreateUser</code> again and specify <code>RESEND</code> for the <code>MessageAction</code> parameter.</p>"
+          "documentation":"<p>The user's temporary password. This password must conform to the password policy that you specified when you created the user pool.</p> <p>The exception to the requirement for a password is when your user pool supports passwordless sign-in with email or SMS OTPs. To create a user with no password, omit this parameter or submit a blank value. You can only create a passwordless user when passwordless sign-in is available.</p> <p>The temporary password is valid only once. To complete the Admin Create User flow, the user must enter the temporary password in the sign-in page, along with a new password to be used in all future sign-ins.</p> <p>If you don't specify a value, Amazon Cognito generates one for you unless you have passwordless options active for your user pool.</p> <p>The temporary password can only be used until the user account expiration limit that you set for your user pool. To reset the account after that time limit, you must call <code>AdminCreateUser</code> again and specify <code>RESEND</code> for the <code>MessageAction</code> parameter.</p>"
         },
         "ForceAliasCreation":{
           "shape":"ForceAliasCreation",
@@ -2539,7 +2664,7 @@
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminCreateUser API action, Amazon Cognito invokes the function that is assigned to the <i>pre sign-up</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>ClientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminCreateUser request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminCreateUser API action, Amazon Cognito invokes the function that is assigned to the <i>pre sign-up</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>ClientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminCreateUser request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Creates a new user in the specified user pool.</p>"
@@ -2573,7 +2698,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "UserAttributeNames":{
           "shape":"AttributeNameListType",
@@ -2584,8 +2709,7 @@
     },
     "AdminDeleteUserAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response received from the server for a request to delete user attributes.</p>"
     },
     "AdminDeleteUserRequest":{
@@ -2601,7 +2725,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>Represents the request to delete a user as an administrator.</p>"
@@ -2625,8 +2749,7 @@
     },
     "AdminDisableProviderForUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AdminDisableUserRequest":{
       "type":"structure",
@@ -2641,15 +2764,14 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>Represents the request to disable the user as an administrator.</p>"
     },
     "AdminDisableUserResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response received from the server to disable the user as an administrator.</p>"
     },
     "AdminEnableUserRequest":{
@@ -2665,15 +2787,14 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>Represents the request that enables the user as an administrator.</p>"
     },
     "AdminEnableUserResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server for the request to enable a user as an administrator.</p>"
     },
     "AdminForgetDeviceRequest":{
@@ -2690,11 +2811,11 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "DeviceKey":{
           "shape":"DeviceKeyType",
-          "documentation":"<p>The key ID of the device that you want to delete. You can get device keys in the response to an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html\">AdminListDevices</a> request.</p>"
+          "documentation":"<p>The key ID of the device that you want to delete.</p>"
         }
       },
       "documentation":"<p>Sends the forgot device request, as an administrator.</p>"
@@ -2709,7 +2830,7 @@
       "members":{
         "DeviceKey":{
           "shape":"DeviceKeyType",
-          "documentation":"<p>The key of the device that you want to delete. You can get device IDs in the response to an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html\">AdminListDevices</a> request.</p>"
+          "documentation":"<p>The key of the device that you want to delete.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
@@ -2717,7 +2838,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>Represents the request to get the device, as an administrator.</p>"
@@ -2746,7 +2867,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>Represents the request to get the specified user as an administrator.</p>"
@@ -2773,7 +2894,7 @@
         },
         "Enabled":{
           "shape":"BooleanType",
-          "documentation":"<p>Indicates whether the user is activated for sign-in. The <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html\">AdminDisableUser</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html\">AdminEnableUser</a> API operations deactivate and activate user sign-in, respectively.</p>"
+          "documentation":"<p>Indicates whether the user is activated for sign-in.</p>"
         },
         "UserStatus":{
           "shape":"UserStatusType",
@@ -2789,7 +2910,7 @@
         },
         "UserMFASettingList":{
           "shape":"UserMFASettingListType",
-          "documentation":"<p>The MFA options that are activated for the user. The possible values in this list are <code>SMS_MFA</code>, <code>EMAIL_OTP</code>, and <code>SOFTWARE_TOKEN_MFA</code>. You can change the MFA preference for users who have more than one available MFA factor with <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html\">AdminSetUserMFAPreference</a> or <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html\">SetUserMFAPreference</a>.</p>"
+          "documentation":"<p>The MFA options that are activated for the user. The possible values in this list are <code>SMS_MFA</code>, <code>EMAIL_OTP</code>, and <code>SOFTWARE_TOKEN_MFA</code>.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server from the request to get the specified user as an administrator.</p>"
@@ -2812,23 +2933,23 @@
         },
         "AuthFlow":{
           "shape":"AuthFlowType",
-          "documentation":"<p>The authentication flow that you want to initiate. Each <code>AuthFlow</code> has linked <code>AuthParameters</code> that you must submit. The following are some example flows and their parameters.</p> <ul> <li> <p> <code>USER_AUTH</code>: Request a preferred authentication type or review available authentication types. From the offered authentication types, select one in a challenge response and then authenticate with that method in an additional challenge response.</p> </li> <li> <p> <code>REFRESH_TOKEN_AUTH</code>: Receive new ID and access tokens when you pass a <code>REFRESH_TOKEN</code> parameter with a valid refresh token as the value.</p> </li> <li> <p> <code>USER_SRP_AUTH</code>: Receive secure remote password (SRP) variables for the next challenge, <code>PASSWORD_VERIFIER</code>, when you pass <code>USERNAME</code> and <code>SRP_A</code> parameters..</p> </li> <li> <p> <code>ADMIN_USER_PASSWORD_AUTH</code>: Receive new tokens or the next challenge, for example <code>SOFTWARE_TOKEN_MFA</code>, when you pass <code>USERNAME</code> and <code>PASSWORD</code> parameters.</p> </li> </ul> <p> <i>All flows</i> </p> <dl> <dt>USER_AUTH</dt> <dd> <p>The entry point for sign-in with passwords, one-time passwords, and WebAuthN authenticators.</p> </dd> <dt>USER_SRP_AUTH</dt> <dd> <p>Username-password authentication with the Secure Remote Password (SRP) protocol. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Using-SRP-password-verification-in-custom-authentication-flow\">Use SRP password verification in custom authentication flow</a>.</p> </dd> <dt>REFRESH_TOKEN_AUTH and REFRESH_TOKEN</dt> <dd> <p>Provide a valid refresh token and receive new ID and access tokens. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html\">Using the refresh token</a>.</p> </dd> <dt>CUSTOM_AUTH</dt> <dd> <p>Custom authentication with Lambda triggers. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\">Custom authentication challenge Lambda triggers</a>.</p> </dd> <dt>ADMIN_USER_PASSWORD_AUTH</dt> <dd> <p>Username-password authentication with the password sent directly in the request. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Built-in-authentication-flow-and-challenges\">Admin authentication flow</a>.</p> </dd> </dl> <p> <code>USER_PASSWORD_AUTH</code> is a flow type of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a> and isn't valid for AdminInitiateAuth.</p>"
+          "documentation":"<p>The authentication flow that you want to initiate. Each <code>AuthFlow</code> has linked <code>AuthParameters</code> that you must submit. The following are some example flows.</p> <dl> <dt>USER_AUTH</dt> <dd> <p>The entry point for <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a> with passwords, one-time passwords, and WebAuthn authenticators. Request a preferred authentication type or review available authentication types. From the offered authentication types, select one in a challenge response and then authenticate with that method in an additional challenge response. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p> </dd> <dt>USER_SRP_AUTH</dt> <dd> <p>Username-password authentication with the Secure Remote Password (SRP) protocol. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Using-SRP-password-verification-in-custom-authentication-flow\">Use SRP password verification in custom authentication flow</a>.</p> </dd> <dt>REFRESH_TOKEN_AUTH and REFRESH_TOKEN</dt> <dd> <p>Receive new ID and access tokens when you pass a <code>REFRESH_TOKEN</code> parameter with a valid refresh token as the value. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html\">Using the refresh token</a>.</p> </dd> <dt>CUSTOM_AUTH</dt> <dd> <p>Custom authentication with Lambda triggers. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\">Custom authentication challenge Lambda triggers</a>.</p> </dd> <dt>ADMIN_USER_PASSWORD_AUTH</dt> <dd> <p>Server-side username-password authentication with the password sent directly in the request. For more information about client-side and server-side authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-public-server-side.html\">SDK authorization models</a>.</p> </dd> </dl>"
         },
         "AuthParameters":{
           "shape":"AuthParametersType",
-          "documentation":"<p>The authentication parameters. These are inputs corresponding to the <code>AuthFlow</code> that you're invoking. The required values depend on the value of <code>AuthFlow</code>:</p> <ul> <li> <p>For <code>USER_AUTH</code>: <code>USERNAME</code> (required), <code>PREFERRED_CHALLENGE</code>. If you don't provide a value for <code>PREFERRED_CHALLENGE</code>, Amazon Cognito responds with the <code>AvailableChallenges</code> parameter that specifies the available sign-in methods.</p> </li> <li> <p>For <code>USER_SRP_AUTH</code>: <code>USERNAME</code> (required), <code>SRP_A</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>ADMIN_USER_PASSWORD_AUTH</code>: <code>USERNAME</code> (required), <code>PASSWORD</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>REFRESH_TOKEN_AUTH/REFRESH_TOKEN</code>: <code>REFRESH_TOKEN</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>CUSTOM_AUTH</code>: <code>USERNAME</code> (required), <code>SECRET_HASH</code> (if app client is configured with client secret), <code>DEVICE_KEY</code>. To start the authentication flow with password verification, include <code>ChallengeName: SRP_A</code> and <code>SRP_A: (The SRP_A Value)</code>.</p> </li> </ul> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
+          "documentation":"<p>The authentication parameters. These are inputs corresponding to the <code>AuthFlow</code> that you're invoking.</p> <p>The following are some authentication flows and their parameters. Add a <code>SECRET_HASH</code> parameter if your app client has a client secret. Add <code>DEVICE_KEY</code> if you want to bypass multi-factor authentication with a remembered device. </p> <dl> <dt>USER_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>PREFERRED_CHALLENGE</code>. If you don't provide a value for <code>PREFERRED_CHALLENGE</code>, Amazon Cognito responds with the <code>AvailableChallenges</code> parameter that specifies the available sign-in methods.</p> </li> </ul> </dd> <dt>USER_SRP_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>SRP_A</code> (required)</p> </li> </ul> </dd> <dt>ADMIN_USER_PASSWORD_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>PASSWORD</code> (required)</p> </li> </ul> </dd> <dt>REFRESH_TOKEN_AUTH/REFRESH_TOKEN</dt> <dd> <ul> <li> <p> <code>REFRESH_TOKEN</code>(required)</p> </li> </ul> </dd> <dt>CUSTOM_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>ChallengeName: SRP_A</code> (when preceding custom authentication with SRP authentication)</p> </li> <li> <p> <code>SRP_A: (An SRP_A value)</code> (when preceding custom authentication with SRP authentication)</p> </li> </ul> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for certain custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminInitiateAuth API action, Amazon Cognito invokes the Lambda functions that are specified for various triggers. The ClientMetadata value is passed as input to the functions for only the following triggers:</p> <ul> <li> <p>Pre signup</p> </li> <li> <p>Pre authentication</p> </li> <li> <p>User migration</p> </li> </ul> <p>When Amazon Cognito invokes the functions for these triggers, it passes a JSON payload, which the function receives as input. This payload contains a <code>validationData</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminInitiateAuth request. In your function code in Lambda, you can process the <code>validationData</code> value to enhance your workflow for your specific needs.</p> <p>When you use the AdminInitiateAuth API action, Amazon Cognito also invokes the functions for the following triggers, but it doesn't provide the ClientMetadata value as input:</p> <ul> <li> <p>Post authentication</p> </li> <li> <p>Custom message</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Custom email sender</p> </li> <li> <p>Custom SMS sender</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for certain custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminInitiateAuth API action, Amazon Cognito invokes the Lambda functions that are specified for various triggers. The ClientMetadata value is passed as input to the functions for only the following triggers:</p> <ul> <li> <p>Pre signup</p> </li> <li> <p>Pre authentication</p> </li> <li> <p>User migration</p> </li> </ul> <p>When Amazon Cognito invokes the functions for these triggers, it passes a JSON payload, which the function receives as input. This payload contains a <code>validationData</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminInitiateAuth request. In your function code in Lambda, you can process the <code>validationData</code> value to enhance your workflow for your specific needs.</p> <p>When you use the AdminInitiateAuth API action, Amazon Cognito also invokes the functions for the following triggers, but it doesn't provide the ClientMetadata value as input:</p> <ul> <li> <p>Post authentication</p> </li> <li> <p>Custom message</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Custom email sender</p> </li> <li> <p>Custom SMS sender</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The analytics metadata for collecting Amazon Pinpoint metrics.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "ContextData":{
           "shape":"ContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "Session":{
           "shape":"SessionType",
@@ -2842,19 +2963,23 @@
       "members":{
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The name of the challenge that you're responding to with this call. This is returned in the <code>AdminInitiateAuth</code> response if you must pass another challenge.</p> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a passkey, or webauthN, factor. These are typically biometric devices or security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with <code>USER_PASSWORD_AUTH</code> parameters: <code>USERNAME</code> (required), <code>PASSWORD</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with <code>USER_SRP_AUTH</code> parameters: <code>USERNAME</code> (required), <code>SRP_A</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond to the challenge with <code>USERNAME</code> and an <code>ANSWER</code> that matches one of the challenge types in the <code>AvailableChallenges</code> response parameter.</p> </li> <li> <p> <code>MFA_SETUP</code>: If MFA is required, users who don't have at least one of the MFA methods set up are presented with an <code>MFA_SETUP</code> challenge. The user must set up at least one MFA type to continue to authenticate.</p> </li> <li> <p> <code>SELECT_MFA_TYPE</code>: Selects the MFA type. Valid MFA options are <code>SMS_MFA</code> for SMS message MFA, <code>EMAIL_OTP</code> for email message MFA, and <code>SOFTWARE_TOKEN_MFA</code> for time-based one-time password (TOTP) software token MFA.</p> </li> <li> <p> <code>SMS_MFA</code>: Next challenge is to supply an <code>SMS_MFA_CODE</code>that your user pool delivered in an SMS message.</p> </li> <li> <p> <code>EMAIL_OTP</code>: Next challenge is to supply an <code>EMAIL_OTP_CODE</code> that your user pool delivered in an email message.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Next challenge is to supply <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after the client-side SRP calculations.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: If device tracking was activated in your user pool and the previous challenges were passed, this challenge is returned so that Amazon Cognito can start tracking this device.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Similar to <code>PASSWORD_VERIFIER</code>, but for devices only.</p> </li> <li> <p> <code>ADMIN_NO_SRP_AUTH</code>: This is returned if you must authenticate with <code>USERNAME</code> and <code>PASSWORD</code> directly. An app client must be enabled to use this flow.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. Because of this, and because in some cases you can create users who don't have values for required attributes, take care to collect and submit required-attribute values for all users who don't have passwords. You can create a user in the Amazon Cognito console without, for example, a required <code>birthdate</code> attribute. The API response from Amazon Cognito won't prompt you to submit a birthdate for the user if they don't have a password.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to set up an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p> To set up software token MFA, use the session returned here from <code>InitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>, and use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. To set up SMS MFA, users will need help from an administrator to add a phone number to their account and then call <code>InitiateAuth</code> again to restart sign-in.</p> </li> </ul>"
+          "documentation":"<p>The name of the challenge that you're responding to with this call. This is returned in the <code>AdminInitiateAuth</code> response if you must pass another challenge.</p> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that must be passed to challenge-response requests. If an <code>AdminInitiateAuth</code> or <code>AdminRespondToAuthChallenge</code> API request determines that the caller must pass another challenge, Amazon Cognito returns a session ID and the parameters of the next challenge. Pass this session Id in the <code>Session</code> parameter of <code>AdminRespondToAuthChallenge</code>.</p>"
+          "documentation":"<p>The session that must be passed to challenge-response requests. If an <code>AdminInitiateAuth</code> or <code>AdminRespondToAuthChallenge</code> API request results in another authentication challenge, Amazon Cognito returns a session ID and the parameters of the next challenge. Pass this session ID in the <code>Session</code> parameter of <code>AdminRespondToAuthChallenge</code>.</p>"
         },
         "ChallengeParameters":{
           "shape":"ChallengeParametersType",
-          "documentation":"<p>The challenge parameters. These are returned to you in the <code>AdminInitiateAuth</code> response if you must pass another challenge. The responses in this parameter should be used to compute inputs to the next call (<code>AdminRespondToAuthChallenge</code>).</p> <p>All challenges require <code>USERNAME</code> and <code>SECRET_HASH</code> (if applicable).</p> <p>The value of the <code>USER_ID_FOR_SRP</code> attribute is the user's actual username, not an alias (such as email address or phone number), even if you specified an alias in your call to <code>AdminInitiateAuth</code>. This happens because, in the <code>AdminRespondToAuthChallenge</code> API <code>ChallengeResponses</code>, the <code>USERNAME</code> attribute can't be an alias.</p>"
+          "documentation":"<p>The parameters of an authentication challenge. Amazon Cognito returns challenge parameters as a guide to the responses your user or application must provide for the returned <code>ChallengeName</code>. Calculate responses to the challenge parameters and pass them in the <code>ChallengeParameters</code> of <code>AdminRespondToAuthChallenge</code>.</p> <p>All challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code>.</p> <p>In SRP challenges, Amazon Cognito returns the <code>username</code> attribute in <code>USER_ID_FOR_SRP</code> instead of any email address, preferred username, or phone number alias that you might have specified in your <code>AdminInitiateAuth</code> request. You must use the username and not an alias in the <code>ChallengeResponses</code> of your challenge response.</p>"
         },
         "AuthenticationResult":{
           "shape":"AuthenticationResultType",
           "documentation":"<p>The outcome of successful authentication. This is only returned if the user pool has no additional challenges to return. If Amazon Cognito returns another challenge, the response includes <code>ChallengeName</code>, <code>ChallengeParameters</code>, and <code>Session</code> so that your user can answer the challenge.</p>"
+        },
+        "AvailableChallenges":{
+          "shape":"AvailableChallengeListType",
+          "documentation":"<p>This response parameter lists the available authentication challenges that users can select from in <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a>. For example, they might be able to choose between passkey authentication, a one-time password from an SMS message, and a traditional password.</p>"
         }
       },
       "documentation":"<p>Initiates the authentication response, as an administrator.</p>"
@@ -2883,8 +3008,7 @@
     },
     "AdminLinkProviderForUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AdminListDevicesRequest":{
       "type":"structure",
@@ -2899,7 +3023,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "Limit":{
           "shape":"QueryLimitType",
@@ -2935,7 +3059,7 @@
       "members":{
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
@@ -2977,7 +3101,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "MaxResults":{
           "shape":"QueryLimitType",
@@ -3016,7 +3140,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "GroupName":{
           "shape":"GroupNameType",
@@ -3037,19 +3161,18 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. The <code>AdminResetUserPassword</code> API operation invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminResetUserPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. The <code>AdminResetUserPassword</code> API operation invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminResetUserPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to reset a user's password as an administrator.</p>"
     },
     "AdminResetUserPasswordResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server to reset a user password as an administrator.</p>"
     },
     "AdminRespondToAuthChallengeRequest":{
@@ -3070,11 +3193,11 @@
         },
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The name of the challenge that you are responding to. You can find more information about values for <code>ChallengeName</code> in the response parameters of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-response-ChallengeName\">AdminInitiateAuth</a>.</p>"
+          "documentation":"<p>The name of the challenge that you are responding to.</p> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "ChallengeResponses":{
           "shape":"ChallengeResponsesType",
-          "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA or SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
+          "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>WEB_AUTHN</dt> <dd> <p> <code>\"ChallengeName\": \"WEB_AUTHN\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </dd> <dt>PASSWORD</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </dd> <dt>PASSWORD_SRP</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD_SRP\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA|EMAIL_MFA|SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
         },
         "Session":{
           "shape":"SessionType",
@@ -3082,15 +3205,15 @@
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The analytics metadata for collecting Amazon Pinpoint metrics for <code>AdminRespondToAuthChallenge</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "ContextData":{
           "shape":"ContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminRespondToAuthChallenge API action, Amazon Cognito invokes any functions that you have assigned to the following triggers: </p> <ul> <li> <p>Pre sign-up</p> </li> <li> <p>custom message</p> </li> <li> <p>Post authentication</p> </li> <li> <p>User migration</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Verify auth challenge response</p> </li> </ul> <p>When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute that provides the data that you assigned to the ClientMetadata parameter in your AdminRespondToAuthChallenge request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminRespondToAuthChallenge API action, Amazon Cognito invokes any functions that you have assigned to the following triggers: </p> <ul> <li> <p>Pre sign-up</p> </li> <li> <p>custom message</p> </li> <li> <p>Post authentication</p> </li> <li> <p>User migration</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Verify auth challenge response</p> </li> </ul> <p>When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute that provides the data that you assigned to the ClientMetadata parameter in your AdminRespondToAuthChallenge request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>The request to respond to the authentication challenge, as an administrator.</p>"
@@ -3100,7 +3223,7 @@
       "members":{
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The name of the challenge that you must next respond to. You can find more information about values for <code>ChallengeName</code> in the response parameters of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-response-ChallengeName\">AdminInitiateAuth</a>.</p>"
+          "documentation":"<p>The name of the next challenge that you must respond to.</p> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "Session":{
           "shape":"SessionType",
@@ -3108,7 +3231,7 @@
         },
         "ChallengeParameters":{
           "shape":"ChallengeParametersType",
-          "documentation":"<p>The parameters that define your response to the next challenge. Take the values in <code>ChallengeParameters</code> and provide values for them in the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html#CognitoUserPools-AdminRespondToAuthChallenge-request-ChallengeResponses\">ChallengeResponses</a> of the next <code>AdminRespondToAuthChallenge</code> request.</p>"
+          "documentation":"<p>The parameters that define your response to the next challenge.</p>"
         },
         "AuthenticationResult":{
           "shape":"AuthenticationResultType",
@@ -3130,15 +3253,15 @@
         },
         "SoftwareTokenMfaSettings":{
           "shape":"SoftwareTokenMfaSettingsType",
-          "documentation":"<p>User preferences for time-based one-time password (TOTP) MFA. Activates or deactivates TOTP MFA and sets it as the preferred MFA method when multiple methods are available.</p>"
+          "documentation":"<p>User preferences for time-based one-time password (TOTP) MFA. Activates or deactivates TOTP MFA and sets it as the preferred MFA method when multiple methods are available. This operation can set TOTP as a user's preferred MFA method before they register a TOTP authenticator.</p>"
         },
         "EmailMfaSettings":{
           "shape":"EmailMfaSettingsType",
-          "documentation":"<p>User preferences for email message MFA. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>User preferences for email message MFA. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
@@ -3148,8 +3271,7 @@
     },
     "AdminSetUserMFAPreferenceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AdminSetUserPasswordRequest":{
       "type":"structure",
@@ -3165,7 +3287,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "Password":{
           "shape":"PasswordType",
@@ -3179,8 +3301,7 @@
     },
     "AdminSetUserPasswordResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AdminSetUserSettingsRequest":{
       "type":"structure",
@@ -3196,7 +3317,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "MFAOptions":{
           "shape":"MFAOptionListType",
@@ -3207,8 +3328,7 @@
     },
     "AdminSetUserSettingsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server to set user settings as an administrator.</p>"
     },
     "AdminUpdateAuthEventFeedbackRequest":{
@@ -3226,22 +3346,21 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "EventId":{
           "shape":"EventIdType",
-          "documentation":"<p>The authentication event ID. To query authentication events for a user, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html\">AdminListUserAuthEvents</a>.</p>"
+          "documentation":"<p>The ID of the threat protection authentication event that you want to update.</p>"
         },
         "FeedbackValue":{
           "shape":"FeedbackValueType",
-          "documentation":"<p>The authentication event feedback value. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
+          "documentation":"<p>Your feedback to the authentication event. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
         }
       }
     },
     "AdminUpdateAuthEventFeedbackResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AdminUpdateDeviceStatusRequest":{
       "type":"structure",
@@ -3257,7 +3376,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "DeviceKey":{
           "shape":"DeviceKeyType",
@@ -3272,8 +3391,7 @@
     },
     "AdminUpdateDeviceStatusResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The status response to the request to update the device, as an administrator.</p>"
     },
     "AdminUpdateUserAttributesRequest":{
@@ -3290,7 +3408,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "UserAttributes":{
           "shape":"AttributeListType",
@@ -3298,15 +3416,14 @@
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminUpdateUserAttributes API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminUpdateUserAttributes request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the AdminUpdateUserAttributes API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your AdminUpdateUserAttributes request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to update the user's attributes as an administrator.</p>"
     },
     "AdminUpdateUserAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server for the request to update user attributes as an administrator.</p>"
     },
     "AdminUserGlobalSignOutRequest":{
@@ -3322,15 +3439,14 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         }
       },
       "documentation":"<p>The request to sign out of all devices, as an administrator.</p>"
     },
     "AdminUserGlobalSignOutResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The global sign-out response, as an administrator.</p>"
     },
     "AdvancedSecurityAdditionalFlowsType":{
@@ -3338,10 +3454,10 @@
       "members":{
         "CustomAuthMode":{
           "shape":"AdvancedSecurityEnabledModeType",
-          "documentation":"<p>The operating mode of advanced security features in custom authentication with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\"> Custom authentication challenge Lambda triggers</a>. </p>"
+          "documentation":"<p>The operating mode of threat protection in custom authentication with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\"> Custom authentication challenge Lambda triggers</a>. </p>"
         }
       },
-      "documentation":"<p>Advanced security configuration options for additional authentication types in your user pool, including custom authentication. </p>"
+      "documentation":"<p>Threat protection configuration options for additional authentication types in your user pool, including custom authentication. </p>"
     },
     "AdvancedSecurityEnabledModeType":{
       "type":"string",
@@ -3411,7 +3527,7 @@
           "documentation":"<p>If <code>UserDataShared</code> is <code>true</code>, Amazon Cognito includes user data in the events that it publishes to Amazon Pinpoint analytics.</p>"
         }
       },
-      "documentation":"<p>The settings for Amazon Pinpoint analytics configuration. With an analytics configuration, your application can collect user-activity metrics for user notifications with a Amazon Pinpoint campaign.</p> <p>Amazon Pinpoint isn't available in all Amazon Web Services Regions. For a list of available Regions, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html#cognito-user-pools-find-region-mappings\">Amazon Cognito and Amazon Pinpoint Region availability</a>.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html\">CreateUserPoolClient</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html\">UpdateUserPoolClient</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">DescribeUserPoolClient</a>.</p>"
+      "documentation":"<p>The settings for Amazon Pinpoint analytics configuration. With an analytics configuration, your application can collect user-activity metrics for user notifications with a Amazon Pinpoint campaign.</p> <p>Amazon Pinpoint isn't available in all Amazon Web Services Regions. For a list of available Regions, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html#cognito-user-pools-find-region-mappings\">Amazon Cognito and Amazon Pinpoint Region availability</a>.</p>"
     },
     "AnalyticsMetadataType":{
       "type":"structure",
@@ -3421,7 +3537,7 @@
           "documentation":"<p>The endpoint ID. Information that you want to pass to Amazon Pinpoint about where to send notifications.</p>"
         }
       },
-      "documentation":"<p>Information that your application adds to authentication requests. Applies an endpoint ID to the analytics data that your user pool sends to Amazon Pinpoint.</p> <p>An endpoint ID uniquely identifies a mobile device, email address or phone number that can receive messages from Amazon Pinpoint analytics. For more information about Amazon Web Services Regions that can contain Amazon Pinpoint resources for use with Amazon Cognito user pools, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html\">Using Amazon Pinpoint analytics with Amazon Cognito user pools</a>.</p> <p>This data type is a request parameter of authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>Information that your application adds to authentication requests. Applies an endpoint ID to the analytics data that your user pool sends to Amazon Pinpoint.</p> <p>An endpoint ID uniquely identifies a mobile device, email address or phone number that can receive messages from Amazon Pinpoint analytics. For more information about Amazon Web Services Regions that can contain Amazon Pinpoint resources for use with Amazon Cognito user pools, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html\">Using Amazon Pinpoint analytics with Amazon Cognito user pools</a>.</p>"
     },
     "ArnType":{
       "type":"string",
@@ -3498,14 +3614,14 @@
           "documentation":"<p>The ID of the asset.</p>"
         }
       },
-      "documentation":"<p>An image file from a managed login branding style in a user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html\">CreateManagedLoginBranding</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateManagedLoginBranding.html\">UpdateManagedLoginBranding</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBranding.html\">DescribeManagedLoginBranding</a>.</p>"
+      "documentation":"<p>An image file from a managed login branding style in a user pool.</p>"
     },
     "AssociateSoftwareTokenRequest":{
       "type":"structure",
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose software token you want to generate. You can provide either an access token or a session ID in the request.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p> <p>You can provide either an access token or a session ID in the request.</p>"
         },
         "Session":{
           "shape":"SessionType",
@@ -3522,7 +3638,7 @@
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session identifier that maintains the state of authentication requests and challenge responses. This session ID is valid for the next request in this flow, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html\">VerifySoftwareToken</a>.</p>"
+          "documentation":"<p>The session identifier that maintains the state of authentication requests and challenge responses.</p>"
         }
       }
     },
@@ -3572,7 +3688,7 @@
           "documentation":"<p>The value of the attribute.</p>"
         }
       },
-      "documentation":"<p>The name and value of a user attribute.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html\">AdminUpdateUserAttributes</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html\">UpdateUserAttributes</a>.</p>"
+      "documentation":"<p>The name and value of a user attribute.</p>"
     },
     "AttributeValueType":{
       "type":"string",
@@ -3616,10 +3732,10 @@
         },
         "EventFeedback":{
           "shape":"EventFeedbackType",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateAuthEventFeedback.html\">UpdateAuthEventFeedback</a> or <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateAuthEventFeedback.html\">AdminUpdateAuthEventFeedback</a> feedback that you or your user provided in response to the event. A value of <code>Valid</code> indicates that you disagreed with the level of risk that your user pool assigned, and evaluated a session to be valid, or likely safe. A value of <code>Invalid</code> indicates that you agreed with the user pool risk level and evaluated a session to be invalid, or likely malicious.</p>"
+          "documentation":"<p>The <code>UpdateAuthEventFeedback</code> or <code>AdminUpdateAuthEventFeedback</code> feedback that you or your user provided in response to the event. A value of <code>Valid</code> indicates that you disagreed with the level of risk that your user pool assigned, and evaluated a session to be valid, or likely safe. A value of <code>Invalid</code> indicates that you agreed with the user pool risk level and evaluated a session to be invalid, or likely malicious.</p>"
         }
       },
-      "documentation":"<p>One authentication event that Amazon Cognito logged in a user pool with advanced security features active. Contains user and device metadata and a risk assessment from your user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html\">AdminListUserAuthEvents</a>.</p>"
+      "documentation":"<p>One authentication event that Amazon Cognito logged in a user pool with threat protection active. Contains user and device metadata and a risk assessment from your user pool.</p>"
     },
     "AuthEventsType":{
       "type":"list",
@@ -3686,7 +3802,7 @@
           "documentation":"<p>The new device metadata from an authentication result.</p>"
         }
       },
-      "documentation":"<p>The object that your application receives after authentication. Contains tokens and information for device authentication.</p> <p>This data type is a response parameter of authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>The object that your application receives after authentication. Contains tokens and information for device authentication.</p>"
     },
     "AvailableChallengeListType":{
       "type":"list",
@@ -3766,7 +3882,7 @@
           "documentation":"<p>The set of key-value pairs that provides a response to the requested challenge.</p>"
         }
       },
-      "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA or SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>WEB_AUTHN</dt> <dd> <p> <code>\"ChallengeName\": \"WEB_AUTHN\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </dd> <dt>PASSWORD</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </dd> <dt>PASSWORD_SRP</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD_SRP\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA|EMAIL_MFA|SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
     },
     "ChallengeResponsesType":{
       "type":"map",
@@ -3798,8 +3914,7 @@
     },
     "ChangePasswordResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response from the server to the change password request.</p>"
     },
     "ClientIdType":{
@@ -3844,7 +3959,7 @@
           "documentation":"<p>The Amazon Resource Name (arn) of a CloudWatch Logs log group where your user pool sends logs. The log group must not be encrypted with Key Management Service and must be in the same Amazon Web Services account as your user pool.</p> <p>To send logs to log groups with a resource policy of a size greater than 5120 characters, configure a log group with a path that starts with <code>/aws/vendedlogs</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from certain Amazon Web Services services</a>.</p>"
         }
       },
-      "documentation":"<p>Configuration for the CloudWatch log group destination of user pool detailed activity logging, or of user activity log export with advanced security features.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html\">SetLogDeliveryConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetLogDeliveryConfiguration.html\">GetLogDeliveryConfiguration</a>.</p>"
+      "documentation":"<p>Configuration for the CloudWatch log group destination of user pool detailed activity logging, or of user activity log export with threat protection.</p>"
     },
     "CodeDeliveryDetailsListType":{
       "type":"list",
@@ -3866,7 +3981,7 @@
           "documentation":"<p>The name of the attribute that Amazon Cognito verifies with the code.</p>"
         }
       },
-      "documentation":"<p>The delivery details for an email or SMS message that Amazon Cognito sent for authentication or verification.</p> <p>This data type is a response parameter of operations that send a code for user profile confirmation, verification, or management, for example <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html\">ForgotPassword</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html\">SignUp</a>.</p>"
+      "documentation":"<p>The delivery details for an email or SMS message that Amazon Cognito sent for authentication or verification.</p>"
     },
     "CodeDeliveryFailureException":{
       "type":"structure",
@@ -3907,18 +4022,17 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose passkey registration you want to complete.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "Credential":{
           "shape":"Document",
-          "documentation":"<p>A <a href=\"https://www.w3.org/TR/webauthn-3/#dictdef-registrationresponsejson\">RegistrationResponseJSON</a> public-key credential response from the user's passkey provider.</p>"
+          "documentation":"<p>A <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-registrationresponsejson\">RegistrationResponseJSON</a> public-key credential response from the user's passkey provider.</p>"
         }
       }
     },
     "CompleteWebAuthnRegistrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CompletionMessageType":{
       "type":"string",
@@ -3935,7 +4049,7 @@
           "documentation":"<p>The action that Amazon Cognito takes when it detects compromised credentials.</p>"
         }
       },
-      "documentation":"<p>Settings for user pool actions when Amazon Cognito detects compromised credentials with advanced security features in full-function <code>ENFORCED</code> mode.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>Settings for user pool actions when Amazon Cognito detects compromised credentials with threat protection in full-function <code>ENFORCED</code> mode.</p>"
     },
     "CompromisedCredentialsEventActionType":{
       "type":"string",
@@ -3957,7 +4071,7 @@
           "documentation":"<p>Settings for the actions that you want your user pool to take when Amazon Cognito detects compromised credentials.</p>"
         }
       },
-      "documentation":"<p>Settings for compromised-credentials actions and authentication-event sources with advanced security features in full-function <code>ENFORCED</code> mode.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>Settings for compromised-credentials actions and authentication-event sources with threat protection in full-function <code>ENFORCED</code> mode.</p>"
     },
     "ConcurrentModificationException":{
       "type":"structure",
@@ -3985,7 +4099,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose device you want to confirm.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "DeviceKey":{
           "shape":"DeviceKeyType",
@@ -4007,7 +4121,7 @@
       "members":{
         "UserConfirmationNecessary":{
           "shape":"BooleanType",
-          "documentation":"<p>When <code>true</code>, your user must confirm that they want to remember the device. Prompt the user for an answer. You must then make an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html\">UpdateUserDevice</a> request that sets the device to <code>remembered</code> or <code>not_remembered</code>.</p> <p>When <code>false</code>, immediately sets the device as remembered and eligible for device authentication.</p> <p>You can configure your user pool to always remember devices, in which case this response is <code>false</code>, or to allow users to opt in, in which case this response is <code>true</code>. Configure this option under <i>Device tracking</i> in the <i>Sign-in</i> menu of your user pool. You can also configure this option with the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-DeviceConfiguration\">DeviceConfiguration</a> parameter of a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> or <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a> request.</p>"
+          "documentation":"<p>When <code>true</code>, your user must confirm that they want to remember the device. Prompt the user for an answer.</p> <p>When <code>false</code>, immediately sets the device as remembered and eligible for device authentication.</p> <p>You can configure your user pool to always remember devices, in which case this response is <code>false</code>, or to allow users to opt in, in which case this response is <code>true</code>. Configure this option under <i>Device tracking</i> in the <i>Sign-in</i> menu of your user pool.</p>"
         }
       },
       "documentation":"<p>The confirm-device response.</p>"
@@ -4023,7 +4137,7 @@
       "members":{
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The ID of the app client where the user wants to reset their password. This parameter is an identifier of the client application that users are resetting their password from, but this operation resets users' passwords for all app clients in the user pool.</p>"
+          "documentation":"<p>The ID of the app client where the user wants to reset their password. This parameter is an identifier of the client application that users are resetting their password from, but this operation resets users' irrespective of the app clients they sign in to.</p>"
         },
         "SecretHash":{
           "shape":"SecretHashType",
@@ -4031,11 +4145,11 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "ConfirmationCode":{
           "shape":"ConfirmationCodeType",
-          "documentation":"<p>The confirmation code that your user pool sent in response to an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html\">AdminResetUserPassword</a> or a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html\">ForgotPassword</a> request.</p>"
+          "documentation":"<p>The confirmation code that your user pool delivered when your user requested to reset their password.</p>"
         },
         "Password":{
           "shape":"PasswordType",
@@ -4043,23 +4157,22 @@
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata for collecting metrics for <code>ConfirmForgotPassword</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ConfirmForgotPassword API action, Amazon Cognito invokes the function that is assigned to the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ConfirmForgotPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ConfirmForgotPassword API action, Amazon Cognito invokes the function that is assigned to the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ConfirmForgotPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>The request representing the confirmation for a password reset.</p>"
     },
     "ConfirmForgotPasswordResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response from the server that results from a user's request to retrieve a forgotten password.</p>"
     },
     "ConfirmSignUpRequest":{
@@ -4080,7 +4193,7 @@
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "ConfirmationCode":{
           "shape":"ConfirmationCodeType",
@@ -4092,15 +4205,15 @@
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata for collecting metrics for <code>ConfirmSignUp</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ConfirmSignUp API action, Amazon Cognito invokes the function that is assigned to the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ConfirmSignUp request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ConfirmSignUp API action, Amazon Cognito invokes the function that is assigned to the <i>post confirmation</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ConfirmSignUp request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         },
         "Session":{
           "shape":"SessionType",
@@ -4114,7 +4227,7 @@
       "members":{
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>A session identifier that you can use to immediately sign in the confirmed user. You can automatically sign users in with the one-time password that they provided in a successful <code>ConfirmSignUp</code> request. To do this, pass the <code>Session</code> parameter from this response in the <code>Session</code> parameter of an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a> or <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a> request.</p>"
+          "documentation":"<p>A session identifier that you can use to immediately sign in the confirmed user. You can automatically sign users in with the one-time password that they provided in a successful <code>ConfirmSignUp</code> request.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server for the registration confirmation.</p>"
@@ -4155,7 +4268,7 @@
           "documentation":"<p>Encoded device-fingerprint details that your app collected with the Amazon Cognito context data collection library. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding user device and session data to API requests</a>.</p>"
         }
       },
-      "documentation":"<p>Contextual user data used for evaluating the risk of an authentication event by user pool threat protection.</p> <p>This data type is a request parameter of server-side authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>Contextual user data used for evaluating the risk of an authentication event by user pool threat protection.</p>"
     },
     "CreateGroupRequest":{
       "type":"structure",
@@ -4253,19 +4366,19 @@
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The app client that you want to create the branding style for. Each style is permanently linked to an app client. To change the style for an app client, delete the existing style with <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteManagedLoginBranding.html\">DeleteManagedLoginBranding</a> and create a new one.</p>"
+          "documentation":"<p>The app client that you want to create the branding style for. Each style is linked to an app client until you delete it.</p>"
         },
         "UseCognitoProvidedValues":{
           "shape":"BooleanType",
-          "documentation":"<p>When true, applies the default branding style options. These default options are managed by Amazon Cognito. You can modify them later in the branding designer.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
+          "documentation":"<p>When true, applies the default branding style options. These default options are managed by Amazon Cognito. You can modify them later in the branding editor.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
         },
         "Settings":{
           "shape":"Document",
-          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p>"
+          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p> <p>The following components are not currently implemented and reserved for future use:</p> <ul> <li> <p> <code>signUp</code> </p> </li> <li> <p> <code>instructions</code> </p> </li> <li> <p> <code>sessionTimerDisplay</code> </p> </li> <li> <p> <code>languageSelector</code> (for localization, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-localization\">Managed login localization)</a> </p> </li> </ul>"
         },
         "Assets":{
           "shape":"AssetListType",
-          "documentation":"<p>An array of image files that you want to apply to roles like backgrounds, logos, and icons. Each object must also indicate whether it is for dark mode, light mode, or browser-adaptive mode.</p>"
+          "documentation":"<p>An array of image files that you want to apply to functions like backgrounds, logos, and icons. Each object must also indicate whether it is for dark mode, light mode, or browser-adaptive mode.</p>"
         }
       }
     },
@@ -4314,6 +4427,51 @@
         }
       }
     },
+    "CreateTermsRequest":{
+      "type":"structure",
+      "required":[
+        "UserPoolId",
+        "ClientId",
+        "TermsName",
+        "TermsSource",
+        "Enforcement"
+      ],
+      "members":{
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool where you want to create terms documents.</p>"
+        },
+        "ClientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The ID of the app client where you want to create terms documents. Must be an app client in the requested user pool.</p>"
+        },
+        "TermsName":{
+          "shape":"TermsNameType",
+          "documentation":"<p>A friendly name for the document that you want to create in the current request. Must begin with <code>terms-of-use</code> or <code>privacy-policy</code> as identification of the document type. Provide URLs for both <code>terms-of-use</code> and <code>privacy-policy</code> in separate requests.</p>"
+        },
+        "TermsSource":{
+          "shape":"TermsSourceType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts only one value.</p>"
+        },
+        "Enforcement":{
+          "shape":"TermsEnforcementType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts only one value.</p>"
+        },
+        "Links":{
+          "shape":"LinksType",
+          "documentation":"<p>A map of URLs to languages. For each localized language that will view the requested <code>TermsName</code>, assign a URL. A selection of <code>cognito:default</code> displays for all languages that don't have a language-specific URL.</p> <p>For example, <code>\"cognito:default\": \"https://terms.example.com\", \"cognito:spanish\": \"https://terms.example.com/es\"</code>.</p>"
+        }
+      }
+    },
+    "CreateTermsResponse":{
+      "type":"structure",
+      "members":{
+        "Terms":{
+          "shape":"TermsType",
+          "documentation":"<p>A summary of your terms documents. Includes a unique identifier for later changes to the terms documents.</p>"
+        }
+      }
+    },
     "CreateUserImportJobRequest":{
       "type":"structure",
       "required":[
@@ -4342,7 +4500,7 @@
       "members":{
         "UserImportJob":{
           "shape":"UserImportJobType",
-          "documentation":"<p>The details of the user import job.</p>"
+          "documentation":"<p>The details of the user import job. Includes logging destination, status, and the Amazon S3 pre-signed URL for CSV upload.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to create the user import job.</p>"
@@ -4364,7 +4522,7 @@
         },
         "GenerateSecret":{
           "shape":"GenerateSecret",
-          "documentation":"<p>When <code>true</code>, generates a client secret for the app client. Client secrets are used with server-side and machine-to-machine applications. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types\">App client types</a>.</p>"
+          "documentation":"<p>When <code>true</code>, generates a client secret for the app client. Client secrets are used with server-side and machine-to-machine applications. Client secrets are automatically generated; you can't specify a secret value. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html#user-pool-settings-client-app-client-types\">App client types</a>.</p>"
         },
         "RefreshTokenValidity":{
           "shape":"RefreshTokenValidityType",
@@ -4384,27 +4542,27 @@
         },
         "ReadAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list. An example of this kind of activity is when your user selects a link to view their profile information. Your app makes a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html\">GetUser</a> API request to retrieve and display your user's profile data.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the Standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
         },
         "WriteAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list. An example of this kind of activity is when you present your user with a form to update their profile information and they change their last name. Your app then makes an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html\">UpdateUserAttributes</a> API request and sets <code>family_name</code> to the new value. </p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
         },
         "ExplicitAuthFlows":{
           "shape":"ExplicitAuthFlowsListType",
-          "documentation":"<p>The authentication flows that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your user client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html\">authentication flows</a> that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your app client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>. </p> </note> <p>The values for authentication flow options include the following.</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> <p>To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
         },
         "SupportedIdentityProviders":{
           "shape":"SupportedIdentityProvidersListType",
-          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This setting applies to providers that you can access with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a>. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent API-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>.</p>"
+          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This parameter sets the IdPs that <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a> will display on the login page for your app client. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent SDK-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>. </p>"
         },
         "CallbackURLs":{
           "shape":"CallbackURLsListType",
-          "documentation":"<p>A list of allowed redirect (callback) URLs for the IdPs.</p> <p>A redirect URI must:</p> <ul> <li> <p>Be an absolute URI.</p> </li> <li> <p>Be registered with the authorization server. Amazon Cognito doesn't accept authorization requests with <code>redirect_uri</code> values that aren't in the list of <code>CallbackURLs</code> that you provide in this parameter.</p> </li> <li> <p>Not include a fragment component.</p> </li> </ul> <p>See <a href=\"https://tools.ietf.org/html/rfc6749#section-3.1.2\">OAuth 2.0 - Redirection Endpoint</a>.</p> <p>Amazon Cognito requires HTTPS over HTTP except for http://localhost for testing purposes only.</p> <p>App callback URLs such as myapp://example are also supported.</p>"
+          "documentation":"<p>A list of allowed redirect, or callback, URLs for managed login authentication. These URLs are the paths where you want to send your users' browsers after they complete authentication with managed login or a third-party IdP. Typically, callback URLs are the home of an application that uses OAuth or OIDC libraries to process authentication outcomes.</p> <p>A redirect URI must meet the following requirements:</p> <ul> <li> <p>Be an absolute URI.</p> </li> <li> <p>Be registered with the authorization server. Amazon Cognito doesn't accept authorization requests with <code>redirect_uri</code> values that aren't in the list of <code>CallbackURLs</code> that you provide in this parameter.</p> </li> <li> <p>Not include a fragment component.</p> </li> </ul> <p>See <a href=\"https://tools.ietf.org/html/rfc6749#section-3.1.2\">OAuth 2.0 - Redirection Endpoint</a>.</p> <p>Amazon Cognito requires HTTPS over HTTP except for http://localhost for testing purposes only.</p> <p>App callback URLs such as myapp://example are also supported.</p>"
         },
         "LogoutURLs":{
           "shape":"LogoutURLsListType",
-          "documentation":"<p>A list of allowed logout URLs for managed login authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html\">Logout endpoint</a>.</p>"
+          "documentation":"<p>A list of allowed logout URLs for managed login authentication. When you pass <code>logout_uri</code> and <code>client_id</code> parameters to <code>/logout</code>, Amazon Cognito signs out your user and redirects them to the logout URL. This parameter describes the URLs that you want to be the permitted targets of <code>logout_uri</code>. A typical use of these URLs is when a user selects \"Sign out\" and you redirect them to your public homepage. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html\">Logout endpoint</a>.</p>"
         },
         "DefaultRedirectURI":{
           "shape":"RedirectUrlType",
@@ -4412,15 +4570,15 @@
         },
         "AllowedOAuthFlows":{
           "shape":"OAuthFlowsType",
-          "documentation":"<p>The OAuth grant types that you want your app client to generate. To create an app client that generates client credentials grants, you must add <code>client_credentials</code> as the only allowed OAuth flow.</p> <dl> <dt>code</dt> <dd> <p>Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the <code>/oauth2/token</code> endpoint.</p> </dd> <dt>implicit</dt> <dd> <p>Issue the access token (and, optionally, ID token, based on scopes) directly to your user.</p> </dd> <dt>client_credentials</dt> <dd> <p>Issue the access token from the <code>/oauth2/token</code> endpoint directly to a non-person user using a combination of the client ID and client secret.</p> </dd> </dl>"
+          "documentation":"<p>The OAuth grant types that you want your app client to generate for clients in managed login authentication. To create an app client that generates client credentials grants, you must add <code>client_credentials</code> as the only allowed OAuth flow.</p> <dl> <dt>code</dt> <dd> <p>Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the <code>/oauth2/token</code> endpoint.</p> </dd> <dt>implicit</dt> <dd> <p>Issue the access token, and the ID token when scopes like <code>openid</code> and <code>profile</code> are requested, directly to your user.</p> </dd> <dt>client_credentials</dt> <dd> <p>Issue the access token from the <code>/oauth2/token</code> endpoint directly to a non-person user, authorized by a combination of the client ID and client secret.</p> </dd> </dl>"
         },
         "AllowedOAuthScopes":{
           "shape":"ScopeListType",
-          "documentation":"<p>The OAuth 2.0 scopes that you want to permit your app client to authorize. Scopes govern access control to user pool self-service API operations, user data from the <code>userInfo</code> endpoint, and third-party APIs. Possible values provided by OAuth are <code>phone</code>, <code>email</code>, <code>openid</code>, and <code>profile</code>. Possible values provided by Amazon Web Services are <code>aws.cognito.signin.user.admin</code>. Custom scopes created in Resource Servers are also supported.</p>"
+          "documentation":"<p>The OAuth, OpenID Connect (OIDC), and custom scopes that you want to permit your app client to authorize access with. Scopes govern access control to user pool self-service API operations, user data from the <code>userInfo</code> endpoint, and third-party APIs. Scope values include <code>phone</code>, <code>email</code>, <code>openid</code>, and <code>profile</code>. The <code>aws.cognito.signin.user.admin</code> scope authorizes user self-service operations. Custom scopes with resource servers authorize access to external APIs.</p>"
         },
         "AllowedOAuthFlowsUserPoolClient":{
           "shape":"BooleanType",
-          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 features in your user pool app client.</p> <p> <code>AllowedOAuthFlowsUserPoolClient</code> must be <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>.</p>"
+          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 authorization server features in your app client.</p> <p>This parameter must have a value of <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use authorization server features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>. When <code>false</code>, only SDK-based API sign-in is permitted.</p>"
         },
         "AnalyticsConfiguration":{
           "shape":"AnalyticsConfigurationType",
@@ -4428,19 +4586,23 @@
         },
         "PreventUserExistenceErrors":{
           "shape":"PreventUserExistenceErrorTypes",
-          "documentation":"<p>Errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Valid values include:</p> <ul> <li> <p> <code>ENABLED</code> - This prevents user existence-related errors.</p> </li> <li> <p> <code>LEGACY</code> - This represents the early behavior of Amazon Cognito where user existence related errors aren't prevented.</p> </li> </ul> <p>Defaults to <code>LEGACY</code> when you don't provide a value.</p>"
+          "documentation":"<p>When <code>ENABLED</code>, suppresses messages that might indicate a valid user exists when someone attempts sign-in. This parameters sets your preference for the errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Defaults to <code>LEGACY</code>.</p>"
         },
         "EnableTokenRevocation":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>Activates or deactivates token revocation. For more information about revoking tokens, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html\">RevokeToken</a>.</p> <p>If you don't include this parameter, token revocation is automatically activated for the new user pool client.</p>"
+          "documentation":"<p>Activates or deactivates <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html\">token revocation</a> in the target app client.</p> <p>If you don't include this parameter, token revocation is automatically activated for the new user pool client.</p>"
         },
         "EnablePropagateAdditionalUserContextData":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>Activates the propagation of additional user context data. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html\"> Adding advanced security to a user pool</a>. If you don’t include this parameter, you can't send device fingerprint information, including source IP address, to Amazon Cognito advanced security. You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret.</p>"
+          "documentation":"<p>When <code>true</code>, your application can include additional <code>UserContextData</code> in authentication requests. This data includes the IP address, and contributes to analysis by threat protection features. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding session data to API requests</a>. If you don’t include this parameter, you can't send the source IP address to Amazon Cognito threat protection features. You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret.</p>"
         },
         "AuthSessionValidity":{
           "shape":"AuthSessionValidityType",
           "documentation":"<p>Amazon Cognito creates a session token for each API request in an authentication flow. <code>AuthSessionValidity</code> is the duration, in minutes, of that session token. Your user pool native user must respond to each authentication challenge before the session expires.</p>"
+        },
+        "RefreshTokenRotation":{
+          "shape":"RefreshTokenRotationType",
+          "documentation":"<p>The configuration of your app client for refresh token rotation. When enabled, your app client issues new ID, access, and refresh tokens when users renew their sessions with refresh tokens. When disabled, token refresh issues only ID and access tokens.</p>"
         }
       },
       "documentation":"<p>Represents the request to create a user pool client.</p>"
@@ -4464,7 +4626,7 @@
       "members":{
         "Domain":{
           "shape":"DomainType",
-          "documentation":"<p>The domain string. For custom domains, this is the fully-qualified domain name, such as <code>auth.example.com</code>. For prefix domains, this is the prefix alone, such as <code>myprefix</code>. A prefix value of <code>myprefix</code> for a user pool in the us-east-1 Region results in a domain of <code>myprefix.auth.us-east-1.amazoncognito.com</code>.</p>"
+          "documentation":"<p>The domain string. For custom domains, this is the fully-qualified domain name, such as <code>auth.example.com</code>. For prefix domains, this is the prefix alone, such as <code>myprefix</code>. A prefix value of <code>myprefix</code> for a user pool in the <code>us-east-1</code> Region results in a domain of <code>myprefix.auth.us-east-1.amazoncognito.com</code>.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
@@ -4476,7 +4638,7 @@
         },
         "CustomDomainConfig":{
           "shape":"CustomDomainConfigType",
-          "documentation":"<p>The configuration for a custom domain. Configures your domain with an Certificate Manager certificate in the <code>us-east-1</code> Region.</p> <p>Provide this parameter only if you want to use a custom domain for your user pool. Otherwise, you can exclude this parameter and use a prefix domain instead.</p> <p>For more information about the hosted domain and custom domains, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-assign-domain.html\">Configuring a User Pool Domain</a>.</p>"
+          "documentation":"<p>The configuration for a custom domain. Configures your domain with an Certificate Manager certificate in the <code>us-east-1</code> Region.</p> <p>Provide this parameter only if you want to use a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html\">custom domain</a> for your user pool. Otherwise, you can omit this parameter and use a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-assign-domain-prefix.html\">prefix domain</a> instead.</p> <p>When you create a custom domain, the passkey RP ID defaults to the custom domain. If you had a prefix domain active, this will cause passkey integration for your prefix domain to stop working due to a mismatch in RP ID. To keep the prefix domain passkey integration working, you can explicitly set RP ID to the prefix domain.</p>"
         }
       }
     },
@@ -4489,7 +4651,7 @@
         },
         "CloudFrontDomain":{
           "shape":"DomainType",
-          "documentation":"<p>The Amazon CloudFront endpoint that you use as the target of the alias that you set up with your Domain Name Service (DNS) provider. Amazon Cognito returns this value if you set a custom domain with <code>CustomDomainConfig</code>. If you set an Amazon Cognito prefix domain, this operation returns a blank response.</p>"
+          "documentation":"<p>The fully-qualified domain name (FQDN) of the Amazon CloudFront distribution that hosts your managed login or classic hosted UI pages. Your domain-name authority must have an alias record that points requests for your custom domain to this FQDN. Amazon Cognito returns this value if you set a custom domain with <code>CustomDomainConfig</code>. If you set an Amazon Cognito prefix domain, this parameter returns null.</p>"
         }
       }
     },
@@ -4499,7 +4661,7 @@
       "members":{
         "PoolName":{
           "shape":"UserPoolNameType",
-          "documentation":"<p>A friendlhy name for your user pool.</p>"
+          "documentation":"<p>A friendly name for your user pool.</p>"
         },
         "Policies":{
           "shape":"UserPoolPolicyType",
@@ -4515,11 +4677,11 @@
         },
         "AutoVerifiedAttributes":{
           "shape":"VerifiedAttributesListType",
-          "documentation":"<p>The attributes that you want your user pool to automatically verify. Possible values: <b>email</b>, <b>phone_number</b>. For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#allowing-users-to-sign-up-and-confirm-themselves\">Verifying contact information at sign-up</a>.</p>"
+          "documentation":"<p>The attributes that you want your user pool to automatically verify. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#allowing-users-to-sign-up-and-confirm-themselves\">Verifying contact information at sign-up</a>.</p>"
         },
         "AliasAttributes":{
           "shape":"AliasAttributesListType",
-          "documentation":"<p>Attributes supported as an alias for this user pool. Possible values: <b>phone_number</b>, <b>email</b>, or <b>preferred_username</b>. For more information about alias attributes, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases\">Customizing sign-in attributes</a>.</p>"
+          "documentation":"<p>Attributes supported as an alias for this user pool. For more information about alias attributes, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases\">Customizing sign-in attributes</a>.</p>"
         },
         "UsernameAttributes":{
           "shape":"UsernameAttributesListType",
@@ -4527,15 +4689,15 @@
         },
         "SmsVerificationMessage":{
           "shape":"SmsVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationMessage":{
           "shape":"EmailVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationSubject":{
           "shape":"EmailVerificationSubjectType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "VerificationMessageTemplate":{
           "shape":"VerificationMessageTemplateType",
@@ -4543,11 +4705,11 @@
         },
         "SmsAuthenticationMessage":{
           "shape":"SmsVerificationMessageType",
-          "documentation":"<p>A string representing the SMS authentication message.</p>"
+          "documentation":"<p>The contents of the SMS message that your user pool sends to users in SMS OTP and MFA authentication.</p>"
         },
         "MfaConfiguration":{
           "shape":"UserPoolMfaType",
-          "documentation":"<p>Sets multi-factor authentication (MFA) to be on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p>"
+          "documentation":"<p>Sets multi-factor authentication (MFA) to be on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p> <p>When <code>MfaConfiguration</code> is <code>OPTIONAL</code>, managed login doesn't automatically prompt users to set up MFA. Amazon Cognito generates MFA prompts in API responses and in managed login for users who have chosen and configured a preferred MFA factor.</p>"
         },
         "UserAttributeUpdateSettings":{
           "shape":"UserAttributeUpdateSettingsType",
@@ -4555,7 +4717,7 @@
         },
         "DeviceConfiguration":{
           "shape":"DeviceConfigurationType",
-          "documentation":"<p>The device-remembering configuration for a user pool. Device remembering or device tracking is a \"Remember me on this device\" option for user pools that perform authentication with the device key of a trusted device in the back end, instead of a user-provided MFA code. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>. A null value indicates that you have deactivated device remembering in your user pool.</p> <note> <p>When you provide a value for any <code>DeviceConfiguration</code> field, you activate the Amazon Cognito device-remembering feature. For more infor</p> </note>"
+          "documentation":"<p>The device-remembering configuration for a user pool. Device remembering or device tracking is a \"Remember me on this device\" option for user pools that perform authentication with the device key of a trusted device in the back end, instead of a user-provided MFA code. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>. A null value indicates that you have deactivated device remembering in your user pool.</p> <note> <p>When you provide a value for any <code>DeviceConfiguration</code> field, you activate the Amazon Cognito device-remembering feature. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p> </note>"
         },
         "EmailConfiguration":{
           "shape":"EmailConfigurationType",
@@ -4563,7 +4725,7 @@
         },
         "SmsConfiguration":{
           "shape":"SmsConfigurationType",
-          "documentation":"<p>The SMS configuration with the settings that your Amazon Cognito user pool must use to send an SMS message from your Amazon Web Services account through Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account. For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\">SMS message settings</a>.</p>"
+          "documentation":"<p>The settings for your Amazon Cognito user pool to send SMS messages with Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account. For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\">SMS message settings</a>.</p>"
         },
         "UserPoolTags":{
           "shape":"UserPoolTagsType",
@@ -4571,7 +4733,7 @@
         },
         "AdminCreateUserConfig":{
           "shape":"AdminCreateUserConfigType",
-          "documentation":"<p>The configuration for <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html\">AdminCreateUser</a> requests. Includes the template for the invitation message for new users, the duration of temporary passwords, and permitting self-service sign-up.</p>"
+          "documentation":"<p>The configuration for administrative creation of users. Includes the template for the invitation message for new users, the duration of temporary passwords, and permitting self-service sign-up.</p>"
         },
         "Schema":{
           "shape":"SchemaAttributesListType",
@@ -4579,7 +4741,7 @@
         },
         "UserPoolAddOns":{
           "shape":"UserPoolAddOnsType",
-          "documentation":"<p>User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to risky traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>.</p>"
+          "documentation":"<p>Contains settings for activation of threat protection, including the operating mode and additional authentication types. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to potentially unwanted traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
         },
         "UsernameConfiguration":{
           "shape":"UsernameConfigurationType",
@@ -4587,7 +4749,7 @@
         },
         "AccountRecoverySetting":{
           "shape":"AccountRecoverySettingType",
-          "documentation":"<p>The available verified method a user can use to recover their password when they call <code>ForgotPassword</code>. You can use this setting to define a preferred method when a user has more than one method available. With this setting, SMS doesn't qualify for a valid password recovery mechanism if the user also has SMS multi-factor authentication (MFA) activated. In the absence of this setting, Amazon Cognito uses the legacy behavior to determine the recovery method where SMS is preferred through email.</p>"
+          "documentation":"<p>The available verified method a user can use to recover their password when they call <code>ForgotPassword</code>. You can use this setting to define a preferred method when a user has more than one method available. With this setting, SMS doesn't qualify for a valid password recovery mechanism if the user also has SMS multi-factor authentication (MFA) activated. Email MFA is also disqualifying for account recovery with email. In the absence of this setting, Amazon Cognito uses the legacy behavior to determine the recovery method where SMS is preferred over email.</p> <p>As a best practice, configure both <code>verified_email</code> and <code>verified_phone_number</code>, with one having a higher priority than the other.</p>"
         },
         "UserPoolTier":{
           "shape":"UserPoolTierType",
@@ -4627,7 +4789,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of an Certificate Manager SSL certificate. You use this certificate for the subdomain of your custom domain.</p>"
         }
       },
-      "documentation":"<p>The configuration for a hosted UI custom domain.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html\">CreateUserPoolDomain</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html\">UpdateUserPoolDomain</a>.</p>"
+      "documentation":"<p>The configuration for a hosted UI custom domain.</p>"
     },
     "CustomEmailLambdaVersionConfigType":{
       "type":"structure",
@@ -4645,7 +4807,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the function that you want to assign to your Lambda trigger.</p>"
         }
       },
-      "documentation":"<p>The properties of a custom email sender Lambda trigger.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The properties of a custom email sender Lambda trigger.</p>"
     },
     "CustomEmailSenderLambdaVersionType":{
       "type":"string",
@@ -4667,7 +4829,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the function that you want to assign to your Lambda trigger.</p>"
         }
       },
-      "documentation":"<p>The properties of a custom SMS sender Lambda trigger.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The properties of a custom SMS sender Lambda trigger.</p>"
     },
     "CustomSMSSenderLambdaVersionType":{
       "type":"string",
@@ -4749,6 +4911,23 @@
         }
       }
     },
+    "DeleteTermsRequest":{
+      "type":"structure",
+      "required":[
+        "TermsId",
+        "UserPoolId"
+      ],
+      "members":{
+        "TermsId":{
+          "shape":"TermsIdType",
+          "documentation":"<p>The ID of the terms documents that you want to delete.</p>"
+        },
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool that contains the terms documents that you want to delete.</p>"
+        }
+      }
+    },
     "DeleteUserAttributesRequest":{
       "type":"structure",
       "required":[
@@ -4762,15 +4941,14 @@
         },
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose attributes you want to delete.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to delete user attributes.</p>"
     },
     "DeleteUserAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server to delete user attributes.</p>"
     },
     "DeleteUserPoolClientRequest":{
@@ -4800,7 +4978,7 @@
       "members":{
         "Domain":{
           "shape":"DomainType",
-          "documentation":"<p>The domain that you want to delete. For custom domains, this is the fully-qualified domain name, such as <code>auth.example.com</code>. For Amazon Cognito prefix domains, this is the prefix alone, such as <code>auth</code>.</p>"
+          "documentation":"<p>The domain that you want to delete. For custom domains, this is the fully-qualified domain name like <code>auth.example.com</code>. For Amazon Cognito prefix domains, this is the prefix alone, like <code>myprefix</code>.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
@@ -4810,8 +4988,7 @@
     },
     "DeleteUserPoolDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserPoolRequest":{
       "type":"structure",
@@ -4830,7 +5007,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose user profile you want to delete.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to delete a user.</p>"
@@ -4844,18 +5021,17 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose passkey credential you want to delete.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "CredentialId":{
           "shape":"StringType",
-          "documentation":"<p>The unique identifier of the passkey that you want to delete. Look up registered devices with <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListWebAuthnCredentials.html\">ListWebAuthnCredentials</a>.</p>"
+          "documentation":"<p>The unique identifier of the passkey that you want to delete.</p>"
         }
       }
     },
     "DeleteWebAuthnCredentialResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletionProtectionType":{
       "type":"string",
@@ -5013,6 +5189,32 @@
         }
       }
     },
+    "DescribeTermsRequest":{
+      "type":"structure",
+      "required":[
+        "TermsId",
+        "UserPoolId"
+      ],
+      "members":{
+        "TermsId":{
+          "shape":"TermsIdType",
+          "documentation":"<p>The ID of the terms documents that you want to describe.</p>"
+        },
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool that contains the terms documents that you want to describe.</p>"
+        }
+      }
+    },
+    "DescribeTermsResponse":{
+      "type":"structure",
+      "members":{
+        "Terms":{
+          "shape":"TermsType",
+          "documentation":"<p>A summary of the requested terms documents. Includes a unique identifier for later changes to the terms documents.</p>"
+        }
+      }
+    },
     "DescribeUserImportJobRequest":{
       "type":"structure",
       "required":[
@@ -5036,7 +5238,7 @@
       "members":{
         "UserImportJob":{
           "shape":"UserImportJobType",
-          "documentation":"<p>The details of the user import job.</p>"
+          "documentation":"<p>The details of the user import job. Includes logging destination, status, and the Amazon S3 pre-signed URL for CSV upload.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to describe the user import job.</p>"
@@ -5122,10 +5324,18 @@
         },
         "DeviceOnlyRememberedOnUserPrompt":{
           "shape":"BooleanType",
-          "documentation":"<p>When true, Amazon Cognito doesn't automatically remember a user's device when your app sends a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html\"> ConfirmDevice</a> API request. In your app, create a prompt for your user to choose whether they want to remember their device. Return the user's choice in an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html\"> UpdateDeviceStatus</a> API request.</p> <p>When <code>DeviceOnlyRememberedOnUserPrompt</code> is <code>false</code>, Amazon Cognito immediately remembers devices that you register in a <code>ConfirmDevice</code> API request.</p>"
+          "documentation":"<p>When true, Amazon Cognito doesn't automatically remember a user's device when your app sends a <code>ConfirmDevice</code> API request. In your app, create a prompt for your user to choose whether they want to remember their device. Return the user's choice in an <code>UpdateDeviceStatus</code> API request.</p> <p>When <code>DeviceOnlyRememberedOnUserPrompt</code> is <code>false</code>, Amazon Cognito immediately remembers devices that you register in a <code>ConfirmDevice</code> API request.</p>"
         }
       },
-      "documentation":"<p>The device-remembering configuration for a user pool. A <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\"> DescribeUserPool</a> request returns a null value for this object when the user pool isn't configured to remember devices. When device remembering is active, you can remember a user's device with a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html\">ConfirmDevice</a> API request. Additionally. when the property <code>DeviceOnlyRememberedOnUserPrompt</code> is <code>true</code>, you must follow <code>ConfirmDevice</code> with an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html\">UpdateDeviceStatus</a> API request that sets the user's device to <code>remembered</code> or <code>not_remembered</code>.</p> <p>To sign in with a remembered device, include <code>DEVICE_KEY</code> in the authentication parameters in your user's <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\"> InitiateAuth</a> request. If your app doesn't include a <code>DEVICE_KEY</code> parameter, the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#API_InitiateAuth_ResponseSyntax\">response</a> from Amazon Cognito includes newly-generated <code>DEVICE_KEY</code> and <code>DEVICE_GROUP_KEY</code> values under <code>NewDeviceMetadata</code>. Store these values to use in future device-authentication requests.</p> <note> <p>When you provide a value for any property of <code>DeviceConfiguration</code>, you activate the device remembering for the user pool.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p> </note>"
+      "documentation":"<p>The device-remembering configuration for a user pool.</p> <note> <p>When you provide a value for any property of <code>DeviceConfiguration</code>, you activate the device remembering for the user pool.</p> </note>"
+    },
+    "DeviceKeyExistsException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"MessageType"}
+      },
+      "documentation":"<p>This exception is thrown when a user attempts to confirm a device with a device key that already exists.</p>",
+      "exception":true
     },
     "DeviceKeyType":{
       "type":"string",
@@ -5161,7 +5371,7 @@
           "documentation":"<p>The salt that you want to use in SRP authentication with the user's device.</p>"
         }
       },
-      "documentation":"<p>A Secure Remote Password (SRP) value that your application generates when you register a user's device. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-getting-a-device-key\">Getting a device key</a>.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html\">ConfirmDevice</a>.</p>"
+      "documentation":"<p>A Secure Remote Password (SRP) value that your application generates when you register a user's device. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-getting-a-device-key\">Getting a device key</a>.</p>"
     },
     "DeviceType":{
       "type":"structure",
@@ -5187,12 +5397,11 @@
           "documentation":"<p>The date when the user last signed in with the device.</p>"
         }
       },
-      "documentation":"<p>Information about a user's device that they've registered for device SRP authentication in your application. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p> <p>The data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html\">AdminGetDevice</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html\">AdminListDevices</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html\">GetDevice</a>.</p>"
+      "documentation":"<p>Information about a user's device that they've registered for device SRP authentication in your application. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "DomainDescriptionType":{
@@ -5235,7 +5444,7 @@
           "documentation":"<p>The version of managed login branding that you want to apply to your domain. A value of <code>1</code> indicates hosted UI (classic) branding and a version of <code>2</code> indicates managed login branding.</p> <p>Managed login requires that your user pool be configured for any <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-sign-in-feature-plans.html\">feature plan</a> other than <code>Lite</code>.</p>"
         }
       },
-      "documentation":"<p>A container for information about the user pool domain associated with the hosted UI and OAuth endpoints.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolDomain.html\">DescribeUserPoolDomain</a>.</p>"
+      "documentation":"<p>A container for information about the user pool domain associated with the hosted UI and OAuth endpoints.</p>"
     },
     "DomainStatusType":{
       "type":"string",
@@ -5294,7 +5503,7 @@
           "documentation":"<p>The set of configuration rules that can be applied to emails sent using Amazon Simple Email Service. A configuration set is applied to an email by including a reference to the configuration set in the headers of the email. Once applied, all of the rules in that configuration set are applied to the email. Configuration sets can be used to apply the following types of rules to emails: </p> <dl> <dt>Event publishing</dt> <dd> <p>Amazon Simple Email Service can track the number of send, delivery, open, click, bounce, and complaint events for each email sent. Use event publishing to send information about these events to other Amazon Web Services services such as and Amazon CloudWatch</p> </dd> <dt>IP pool management</dt> <dd> <p>When leasing dedicated IP addresses with Amazon Simple Email Service, you can create groups of IP addresses, called dedicated IP pools. You can then associate the dedicated IP pools with configuration sets.</p> </dd> </dl>"
         }
       },
-      "documentation":"<p>The email configuration of your user pool. The email configuration type sets your preferred sending method, Amazon Web Services Region, and sender for messages from your user pool.</p> <note> <p>Amazon Cognito can send email messages with Amazon Simple Email Service resources in the Amazon Web Services Region where you created your user pool, and in alternate Regions in some cases. For more information on the supported Regions, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html\">Email settings for Amazon Cognito user pools</a>.</p> </note> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>.</p>"
+      "documentation":"<p>The email configuration of your user pool. The email configuration type sets your preferred sending method, Amazon Web Services Region, and sender for messages from your user pool.</p> <note> <p>Amazon Cognito can send email messages with Amazon Simple Email Service resources in the Amazon Web Services Region where you created your user pool, and in alternate Regions in some cases. For more information on the supported Regions, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html\">Email settings for Amazon Cognito user pools</a>.</p> </note>"
     },
     "EmailInviteMessageType":{
       "type":"string",
@@ -5307,14 +5516,14 @@
       "members":{
         "Message":{
           "shape":"EmailMfaMessageType",
-          "documentation":"<p>The template for the email message that your user pool sends to users with a code for MFA and sign-in with an email OTP. The message must contain the <code>{####}</code> placeholder. In the message, Amazon Cognito replaces this placeholder with the code. If you don't provide this parameter, Amazon Cognito sends messages in the default format.</p>"
+          "documentation":"<p>The template for the email messages that your user pool sends to users with codes for MFA and sign-in with email OTPs. The message must contain the <code>{####}</code> placeholder. In the message, Amazon Cognito replaces this placeholder with the code. If you don't provide this parameter, Amazon Cognito sends messages in the default format.</p>"
         },
         "Subject":{
           "shape":"EmailMfaSubjectType",
-          "documentation":"<p>The subject of the email message that your user pool sends to users with a code for MFA and email OTP sign-in.</p>"
+          "documentation":"<p>The subject of the email messages that your user pool sends to users with codes for MFA and email OTP sign-in.</p>"
         }
       },
-      "documentation":"<p>Sets or shows user pool email message configuration for MFA. Includes the subject and body of the email message template for MFA messages. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>.</p>"
+      "documentation":"<p>Sets or shows configuration for user pool email message MFA and sign-in with one-time passwords (OTPs). Includes the subject and body of the email message template for sign-in and MFA messages. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
     },
     "EmailMfaMessageType":{
       "type":"string",
@@ -5334,7 +5543,7 @@
           "documentation":"<p>Specifies whether email message MFA is the user's preferred method.</p>"
         }
       },
-      "documentation":"<p>User preferences for multi-factor authentication with email messages. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html\">SetUserMFAPreference</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html\">AdminSetUserMFAPreference</a>. </p>"
+      "documentation":"<p>User preferences for multi-factor authentication with email messages. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
     },
     "EmailMfaSubjectType":{
       "type":"string",
@@ -5415,7 +5624,7 @@
           "documentation":"<p>The user's country.</p>"
         }
       },
-      "documentation":"<p>The context data that your application submitted in an authentication request with advanced security features, as displayed in an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html\">AdminListUserAuthEvents</a> response.</p>"
+      "documentation":"<p>The context data that your application submitted in an authentication request with threat protection, as displayed in an <code>AdminListUserAuthEvents</code> response.</p>"
     },
     "EventFeedbackType":{
       "type":"structure",
@@ -5426,7 +5635,7 @@
       "members":{
         "FeedbackValue":{
           "shape":"FeedbackValueType",
-          "documentation":"<p>The authentication event feedback value. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
+          "documentation":"<p>Your feedback to the authentication event. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
         },
         "Provider":{
           "shape":"StringType",
@@ -5437,7 +5646,7 @@
           "documentation":"<p>The date that you or your user submitted the feedback.</p>"
         }
       },
-      "documentation":"<p>The feedback that your application submitted to an advanced security features event log, as displayed in an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html\">AdminListUserAuthEvents</a> response.</p>"
+      "documentation":"<p>The feedback that your application submitted to a threat protection event log, as displayed in an <code>AdminListUserAuthEvents</code> response.</p>"
     },
     "EventFilterType":{
       "type":"string",
@@ -5481,7 +5690,7 @@
           "documentation":"<p>Indicates whether compromised credentials were detected during an authentication event.</p>"
         }
       },
-      "documentation":"<p>The risk evaluation by adaptive authentication, as displayed in an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html\">AdminListUserAuthEvents</a> response. Contains evaluations of compromised-credentials detection and assessed risk level and action taken by adaptive authentication.</p>"
+      "documentation":"<p>The risk evaluation by adaptive authentication, as displayed in an <code>AdminListUserAuthEvents</code> response. Contains evaluations of compromised-credentials detection and assessed risk level and action taken by adaptive authentication.</p>"
     },
     "EventSourceName":{
       "type":"string",
@@ -5529,6 +5738,13 @@
         "ALLOW_USER_AUTH"
       ]
     },
+    "FeatureType":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "FeatureUnavailableInTierException":{
       "type":"structure",
       "members":{
@@ -5549,10 +5765,10 @@
       "members":{
         "StreamArn":{
           "shape":"ArnType",
-          "documentation":"<p>The ARN of an Amazon Data Firehose stream that's the destination for advanced security features log export.</p>"
+          "documentation":"<p>The ARN of an Amazon Data Firehose stream that's the destination for threat protection log export.</p>"
         }
       },
-      "documentation":"<p>Configuration for the Amazon Data Firehose stream destination of user activity log export with advanced security features.</p>"
+      "documentation":"<p>Configuration for the Amazon Data Firehose stream destination of user activity log export with threat protection.</p>"
     },
     "ForbiddenException":{
       "type":"structure",
@@ -5572,11 +5788,11 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose registered device you want to forget.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "DeviceKey":{
           "shape":"DeviceKeyType",
-          "documentation":"<p>The device key.</p>"
+          "documentation":"<p>The unique identifier, or device key, of the device that the user wants to forget.</p>"
         }
       },
       "documentation":"<p>Represents the request to forget the device.</p>"
@@ -5590,7 +5806,7 @@
       "members":{
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The ID of the client associated with the user pool.</p>"
+          "documentation":"<p>The ID of the user pool app client associated with the current signed-in user.</p>"
         },
         "SecretHash":{
           "shape":"SecretHashType",
@@ -5598,19 +5814,19 @@
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata that contributes to your metrics for <code>ForgotPassword</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ForgotPassword API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>pre sign-up</i>, <i>custom message</i>, and <i>user migration</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ForgotPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ForgotPassword API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>pre sign-up</i>, <i>custom message</i>, and <i>user migration</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ForgotPassword request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to reset a user's password.</p>"
@@ -5620,7 +5836,7 @@
       "members":{
         "CodeDeliveryDetails":{
           "shape":"CodeDeliveryDetailsType",
-          "documentation":"<p>The code delivery details returned by the server in response to the request to reset a password.</p>"
+          "documentation":"<p>Information about the phone number or email address that Amazon Cognito sent the password-recovery code to.</p>"
         }
       },
       "documentation":"<p>The response from Amazon Cognito to a request to reset a password.</p>"
@@ -5632,7 +5848,7 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that the users are to be imported into.</p>"
+          "documentation":"<p>The ID of the user pool that you want to import users into.</p>"
         }
       },
       "documentation":"<p>Represents the request to get the header information of the CSV file for the user import job.</p>"
@@ -5642,11 +5858,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that the users are to be imported into.</p>"
+          "documentation":"<p>The ID of the requested user pool.</p>"
         },
         "CSVHeader":{
           "shape":"ListOfStringTypes",
-          "documentation":"<p>The header information of the CSV file for the user import job.</p>"
+          "documentation":"<p>A comma-separated list of attributes from your user pool. Save this output to a <code>.csv</code> file and populate it with the attributes of the users that you want to import.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to get the header information of the CSV file for the user import job.</p>"
@@ -5657,11 +5873,11 @@
       "members":{
         "DeviceKey":{
           "shape":"DeviceKeyType",
-          "documentation":"<p>The device key.</p>"
+          "documentation":"<p>The key of the device that you want to get information about.</p>"
         },
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose device information you want to request.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to get the device.</p>"
@@ -5672,7 +5888,7 @@
       "members":{
         "Device":{
           "shape":"DeviceType",
-          "documentation":"<p>The device.</p>"
+          "documentation":"<p>Details of the requested device. Includes device information, last-accessed and created dates, and the device key.</p>"
         }
       },
       "documentation":"<p>Gets the device response.</p>"
@@ -5686,11 +5902,11 @@
       "members":{
         "GroupName":{
           "shape":"GroupNameType",
-          "documentation":"<p>The name of the group.</p>"
+          "documentation":"<p>The name of the group that you want to get information about.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool that contains the group that you want to query.</p>"
         }
       }
     },
@@ -5699,7 +5915,7 @@
       "members":{
         "Group":{
           "shape":"GroupType",
-          "documentation":"<p>The group object for the group.</p>"
+          "documentation":"<p>A container for the requested group. Includes description, precedence, and IAM role values.</p>"
         }
       }
     },
@@ -5712,11 +5928,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The ID of the user pool where you want to get information about the IdP.</p>"
         },
         "IdpIdentifier":{
           "shape":"IdpIdentifierType",
-          "documentation":"<p>The IdP identifier.</p>"
+          "documentation":"<p>The identifier that you assigned to your user pool. The identifier is an alternative name for an IdP that is distinct from the IdP name. For example, an IdP with a name of <code>MyIdP</code> might have an identifier of the email domain <code>example.com</code>.</p>"
         }
       }
     },
@@ -5726,7 +5942,7 @@
       "members":{
         "IdentityProvider":{
           "shape":"IdentityProviderType",
-          "documentation":"<p>The identity provider details.</p>"
+          "documentation":"<p>The configuration of the IdP in your user pool. Includes additional identifiers, the IdP name and type, and trust-relationship details like the issuer URL.</p>"
         }
       }
     },
@@ -5745,7 +5961,7 @@
       "members":{
         "LogDeliveryConfiguration":{
           "shape":"LogDeliveryConfigurationType",
-          "documentation":"<p>The logging configuration of the requested user pool.</p>"
+          "documentation":"<p>The logging configuration of the requested user pool. Includes types of logs configured and their destinations.</p>"
         }
       }
     },
@@ -5755,7 +5971,7 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The ID of the user pool where you want to view the signing certificate.</p>"
         }
       },
       "documentation":"<p>Request to get a signing certificate from Amazon Cognito.</p>"
@@ -5765,22 +5981,57 @@
       "members":{
         "Certificate":{
           "shape":"StringType",
-          "documentation":"<p>The signing certificate.</p>"
+          "documentation":"<p>The x.509 certificate that signs SAML 2.0 authentication requests for your user pool.</p>"
         }
       },
       "documentation":"<p>Response from Amazon Cognito for a signing certificate request.</p>"
     },
+    "GetTokensFromRefreshTokenRequest":{
+      "type":"structure",
+      "required":[
+        "RefreshToken",
+        "ClientId"
+      ],
+      "members":{
+        "RefreshToken":{
+          "shape":"TokenModelType",
+          "documentation":"<p>A valid refresh token that can authorize the request for new tokens. When refresh token rotation is active in the requested app client, this token is invalidated after the request is complete and after an optional grace period.</p>"
+        },
+        "ClientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The app client that issued the refresh token to the user who wants to request new tokens.</p>"
+        },
+        "ClientSecret":{
+          "shape":"ClientSecretType",
+          "documentation":"<p>The client secret of the requested app client, if the client has a secret.</p>"
+        },
+        "DeviceKey":{
+          "shape":"DeviceKeyType",
+          "documentation":"<p>When you enable device remembering, Amazon Cognito issues a device key that you can use for device authentication that bypasses multi-factor authentication (MFA). To implement <code>GetTokensFromRefreshToken</code> in a user pool with device remembering, you must capture the device key from the initial authentication request. If your application doesn't provide the key of a registered device, Amazon Cognito issues a new one. You must provide the confirmed device key in this request if device remembering is enabled in your user pool.</p> <p>For more information about device remembering, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p>"
+        },
+        "ClientMetadata":{
+          "shape":"ClientMetadataType",
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for certain custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the <code>GetTokensFromRefreshToken</code> API action, Amazon Cognito invokes the Lambda function the pre token generation trigger.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+        }
+      }
+    },
+    "GetTokensFromRefreshTokenResponse":{
+      "type":"structure",
+      "members":{
+        "AuthenticationResult":{"shape":"AuthenticationResultType"}
+      }
+    },
     "GetUICustomizationRequest":{
       "type":"structure",
       "required":["UserPoolId"],
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool that you want to query for branding settings.</p>"
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The client ID for the client app.</p>"
+          "documentation":"<p>The ID of the app client that you want to query for branding settings.</p>"
         }
       }
     },
@@ -5790,7 +6041,7 @@
       "members":{
         "UICustomization":{
           "shape":"UICustomizationType",
-          "documentation":"<p>The UI customization information.</p>"
+          "documentation":"<p>Information about the classic hosted UI custom CSS and logo-image branding that you applied to the user pool or app client.</p>"
         }
       }
     },
@@ -5803,15 +6054,15 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A non-expired access token for the user whose attribute verification code you want to generate.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "AttributeName":{
           "shape":"AttributeNameType",
-          "documentation":"<p>The attribute name returned by the server response to get the user attribute verification code.</p>"
+          "documentation":"<p>The name of the attribute that the user wants to verify, for example <code>email</code>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the GetUserAttributeVerificationCode API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your GetUserAttributeVerificationCode request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the GetUserAttributeVerificationCode API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your GetUserAttributeVerificationCode request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to get user attribute verification.</p>"
@@ -5821,7 +6072,7 @@
       "members":{
         "CodeDeliveryDetails":{
           "shape":"CodeDeliveryDetailsType",
-          "documentation":"<p>The code delivery details returned by the server in response to the request to get the user attribute verification code.</p>"
+          "documentation":"<p>Information about the delivery destination of the user attribute verification code.</p>"
         }
       },
       "documentation":"<p>The verification code response returned by the server response to get the user attribute verification code.</p>"
@@ -5832,7 +6083,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose authentication factors you want to view.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       }
     },
@@ -5842,11 +6093,11 @@
       "members":{
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the currently sign-in user.</p>"
+          "documentation":"<p>The name of the user who is eligible for the authentication factors in the response.</p>"
         },
         "PreferredMfaSetting":{
           "shape":"StringType",
-          "documentation":"<p>The user's preferred MFA setting.</p>"
+          "documentation":"<p>The challenge method that Amazon Cognito returns to the user in response to sign-in requests. Users can prefer SMS message, email message, or TOTP MFA.</p>"
         },
         "UserMFASettingList":{
           "shape":"UserMFASettingListType",
@@ -5854,7 +6105,7 @@
         },
         "ConfiguredUserAuthFactors":{
           "shape":"ConfiguredUserAuthFactorsListType",
-          "documentation":"<p>The authentication types that are available to the user with <code>USER_AUTH</code> sign-in. </p>"
+          "documentation":"<p>The authentication types that are available to the user with <code>USER_AUTH</code> sign-in, for example <code>[\"PASSWORD\", \"WEB_AUTHN\"]</code>.</p>"
         }
       }
     },
@@ -5864,7 +6115,7 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The ID of the user pool where you want to query WebAuthn and MFA configuration.</p>"
         }
       }
     },
@@ -5873,7 +6124,7 @@
       "members":{
         "SmsMfaConfiguration":{
           "shape":"SmsMfaConfigType",
-          "documentation":"<p>Shows user pool SMS message configuration for MFA. Includes the message template and the SMS message sending configuration for Amazon SNS.</p>"
+          "documentation":"<p>Shows user pool configuration for SMS message MFA. Includes the message template and the SMS message sending configuration for Amazon SNS.</p>"
         },
         "SoftwareTokenMfaConfiguration":{
           "shape":"SoftwareTokenMfaConfigType",
@@ -5881,15 +6132,15 @@
         },
         "EmailMfaConfiguration":{
           "shape":"EmailMfaConfigType",
-          "documentation":"<p>Shows user pool email message configuration for MFA. Includes the subject and body of the email message template for MFA messages. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>Shows configuration for user pool email message MFA and sign-in with one-time passwords (OTPs). Includes the subject and body of the email message template for sign-in and MFA messages. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
         },
         "MfaConfiguration":{
           "shape":"UserPoolMfaType",
-          "documentation":"<p>The multi-factor authentication (MFA) configuration. Valid values include:</p> <ul> <li> <p> <code>OFF</code> MFA won't be used for any users.</p> </li> <li> <p> <code>ON</code> MFA is required for all users to sign in.</p> </li> <li> <p> <code>OPTIONAL</code> MFA will be required only for individual users who have an MFA factor activated.</p> </li> </ul>"
+          "documentation":"<p>Displays the state of multi-factor authentication (MFA) as on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p> <p>When <code>MfaConfiguration</code> is <code>OPTIONAL</code>, managed login doesn't automatically prompt users to set up MFA. Amazon Cognito generates MFA prompts in API responses and in managed login for users who have chosen and configured a preferred MFA factor.</p>"
         },
         "WebAuthnConfiguration":{
           "shape":"WebAuthnConfigurationType",
-          "documentation":"<p>Shows user pool configuration for MFA with passkeys from biometric devices and security keys.</p>"
+          "documentation":"<p>Shows user pool configuration for sign-in with passkey authenticators like biometric devices and security keys. Passkeys are not eligible MFA factors. They are instead an eligible primary sign-in factor for <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a>, or the <code>USER_AUTH</code> flow.</p>"
         }
       }
     },
@@ -5899,7 +6150,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A non-expired access token for the user whose information you want to query.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to get information about the user.</p>"
@@ -5913,11 +6164,11 @@
       "members":{
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you requested.</p>"
+          "documentation":"<p>The name of the user that you requested.</p>"
         },
         "UserAttributes":{
           "shape":"AttributeListType",
-          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p>"
+          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>Custom attributes are prepended with the <code>custom:</code> prefix.</p>"
         },
         "MFAOptions":{
           "shape":"MFAOptionListType",
@@ -5925,7 +6176,7 @@
         },
         "PreferredMfaSetting":{
           "shape":"StringType",
-          "documentation":"<p>The user's preferred MFA setting.</p>"
+          "documentation":"<p>The user's preferred MFA. Users can prefer SMS message, email message, or TOTP MFA.</p>"
         },
         "UserMFASettingList":{
           "shape":"UserMFASettingListType",
@@ -5940,15 +6191,14 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user who you want to sign out.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to sign out all devices.</p>"
     },
     "GlobalSignOutResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response to the request to sign out all devices.</p>"
     },
     "GroupExistsException":{
@@ -6001,7 +6251,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>A user pool group. Contains details about the group and the way that it contributes to IAM role decisions with identity pools. Identity pools can make decisions about the IAM role to assign based on groups: users get credentials for the role associated with their highest-priority group.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListGroupsForUser.html\">AdminListGroupsForUser</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateGroup.html\">CreateGroup</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetGroup.html\">GetGroup</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListGroups.html\">ListGroups</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateGroup.html\">UpdateGroup</a>.</p>"
+      "documentation":"<p>A user pool group. Contains details about the group and the way that it contributes to IAM role decisions with identity pools. Identity pools can make decisions about the IAM role to assign based on groups: users get credentials for the role associated with their highest-priority group.</p>"
     },
     "HexStringType":{
       "type":"string",
@@ -6019,7 +6269,7 @@
           "documentation":"<p>The header value.</p>"
         }
       },
-      "documentation":"<p>The HTTP header in the <code>ContextData</code> parameter.</p> <p>This data type is a request parameter of server-side authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>The HTTP header in the <code>ContextData</code> parameter.</p>"
     },
     "HttpHeaderList":{
       "type":"list",
@@ -6066,7 +6316,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>A user pool identity provider (IdP). Contains information about a third-party IdP to a user pool, the attributes that it populates to user profiles, and the trust relationship between the IdP and your user pool.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html\">CreateIdentityProvider</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html\">DescribeIdentityProvider</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetIdentityProviderByIdentifier.html\">GetIdentityProviderByIdentifier</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html\">UpdateIdentityProvider</a>.</p>"
+      "documentation":"<p>A user pool identity provider (IdP). Contains information about a third-party IdP to a user pool, the attributes that it populates to user profiles, and the trust relationship between the IdP and your user pool.</p>"
     },
     "IdentityProviderTypeType":{
       "type":"string",
@@ -6106,31 +6356,31 @@
       "members":{
         "AuthFlow":{
           "shape":"AuthFlowType",
-          "documentation":"<p>The authentication flow that you want to initiate. Each <code>AuthFlow</code> has linked <code>AuthParameters</code> that you must submit. The following are some example flows and their parameters.</p> <ul> <li> <p> <code>USER_AUTH</code>: Request a preferred authentication type or review available authentication types. From the offered authentication types, select one in a challenge response and then authenticate with that method in an additional challenge response.</p> </li> <li> <p> <code>REFRESH_TOKEN_AUTH</code>: Receive new ID and access tokens when you pass a <code>REFRESH_TOKEN</code> parameter with a valid refresh token as the value.</p> </li> <li> <p> <code>USER_SRP_AUTH</code>: Receive secure remote password (SRP) variables for the next challenge, <code>PASSWORD_VERIFIER</code>, when you pass <code>USERNAME</code> and <code>SRP_A</code> parameters.</p> </li> <li> <p> <code>USER_PASSWORD_AUTH</code>: Receive new tokens or the next challenge, for example <code>SOFTWARE_TOKEN_MFA</code>, when you pass <code>USERNAME</code> and <code>PASSWORD</code> parameters.</p> </li> </ul> <p> <i>All flows</i> </p> <dl> <dt>USER_AUTH</dt> <dd> <p>The entry point for sign-in with passwords, one-time passwords, and WebAuthN authenticators.</p> </dd> <dt>USER_SRP_AUTH</dt> <dd> <p>Username-password authentication with the Secure Remote Password (SRP) protocol. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Using-SRP-password-verification-in-custom-authentication-flow\">Use SRP password verification in custom authentication flow</a>.</p> </dd> <dt>REFRESH_TOKEN_AUTH and REFRESH_TOKEN</dt> <dd> <p>Provide a valid refresh token and receive new ID and access tokens. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html\">Using the refresh token</a>.</p> </dd> <dt>CUSTOM_AUTH</dt> <dd> <p>Custom authentication with Lambda triggers. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\">Custom authentication challenge Lambda triggers</a>.</p> </dd> <dt>USER_PASSWORD_AUTH</dt> <dd> <p>Username-password authentication with the password sent directly in the request. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Built-in-authentication-flow-and-challenges\">Admin authentication flow</a>.</p> </dd> </dl> <p> <code>ADMIN_USER_PASSWORD_AUTH</code> is a flow type of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a> and isn't valid for InitiateAuth. <code>ADMIN_NO_SRP_AUTH</code> is a legacy server-side username-password flow and isn't valid for InitiateAuth.</p>"
+          "documentation":"<p>The authentication flow that you want to initiate. Each <code>AuthFlow</code> has linked <code>AuthParameters</code> that you must submit. The following are some example flows.</p> <dl> <dt>USER_AUTH</dt> <dd> <p>The entry point for <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a> with passwords, one-time passwords, and WebAuthn authenticators. Request a preferred authentication type or review available authentication types. From the offered authentication types, select one in a challenge response and then authenticate with that method in an additional challenge response. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p> </dd> <dt>USER_SRP_AUTH</dt> <dd> <p>Username-password authentication with the Secure Remote Password (SRP) protocol. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#Using-SRP-password-verification-in-custom-authentication-flow\">Use SRP password verification in custom authentication flow</a>.</p> </dd> <dt>REFRESH_TOKEN_AUTH and REFRESH_TOKEN</dt> <dd> <p>Receive new ID and access tokens when you pass a <code>REFRESH_TOKEN</code> parameter with a valid refresh token as the value. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html\">Using the refresh token</a>.</p> </dd> <dt>CUSTOM_AUTH</dt> <dd> <p>Custom authentication with Lambda triggers. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html\">Custom authentication challenge Lambda triggers</a>.</p> </dd> <dt>USER_PASSWORD_AUTH</dt> <dd> <p>Client-side username-password authentication with the password sent directly in the request. For more information about client-side and server-side authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-public-server-side.html\">SDK authorization models</a>.</p> </dd> </dl> <p> <code>ADMIN_USER_PASSWORD_AUTH</code> is a flow type of <code>AdminInitiateAuth</code> and isn't valid for InitiateAuth. <code>ADMIN_NO_SRP_AUTH</code> is a legacy server-side username-password flow and isn't valid for InitiateAuth.</p>"
         },
         "AuthParameters":{
           "shape":"AuthParametersType",
-          "documentation":"<p>The authentication parameters. These are inputs corresponding to the <code>AuthFlow</code> that you're invoking. The required values depend on the value of <code>AuthFlow</code>:</p> <ul> <li> <p>For <code>USER_AUTH</code>: <code>USERNAME</code> (required), <code>PREFERRED_CHALLENGE</code>. If you don't provide a value for <code>PREFERRED_CHALLENGE</code>, Amazon Cognito responds with the <code>AvailableChallenges</code> parameter that specifies the available sign-in methods.</p> </li> <li> <p>For <code>USER_SRP_AUTH</code>: <code>USERNAME</code> (required), <code>SRP_A</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>USER_PASSWORD_AUTH</code>: <code>USERNAME</code> (required), <code>PASSWORD</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>REFRESH_TOKEN_AUTH/REFRESH_TOKEN</code>: <code>REFRESH_TOKEN</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p>For <code>CUSTOM_AUTH</code>: <code>USERNAME</code> (required), <code>SECRET_HASH</code> (if app client is configured with client secret), <code>DEVICE_KEY</code>. To start the authentication flow with password verification, include <code>ChallengeName: SRP_A</code> and <code>SRP_A: (The SRP_A Value)</code>.</p> </li> </ul> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
+          "documentation":"<p>The authentication parameters. These are inputs corresponding to the <code>AuthFlow</code> that you're invoking.</p> <p>The following are some authentication flows and their parameters. Add a <code>SECRET_HASH</code> parameter if your app client has a client secret. Add <code>DEVICE_KEY</code> if you want to bypass multi-factor authentication with a remembered device. </p> <dl> <dt>USER_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>PREFERRED_CHALLENGE</code>. If you don't provide a value for <code>PREFERRED_CHALLENGE</code>, Amazon Cognito responds with the <code>AvailableChallenges</code> parameter that specifies the available sign-in methods.</p> </li> </ul> </dd> <dt>USER_SRP_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>SRP_A</code> (required)</p> </li> </ul> </dd> <dt>USER_PASSWORD_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>PASSWORD</code> (required)</p> </li> </ul> </dd> <dt>REFRESH_TOKEN_AUTH/REFRESH_TOKEN</dt> <dd> <ul> <li> <p> <code>REFRESH_TOKEN</code>(required)</p> </li> </ul> </dd> <dt>CUSTOM_AUTH</dt> <dd> <ul> <li> <p> <code>USERNAME</code> (required)</p> </li> <li> <p> <code>ChallengeName: SRP_A</code> (when doing SRP authentication before custom challenges)</p> </li> <li> <p> <code>SRP_A: (An SRP_A value)</code> (when doing SRP authentication before custom challenges)</p> </li> </ul> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for certain custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the InitiateAuth API action, Amazon Cognito invokes the Lambda functions that are specified for various triggers. The ClientMetadata value is passed as input to the functions for only the following triggers:</p> <ul> <li> <p>Pre signup</p> </li> <li> <p>Pre authentication</p> </li> <li> <p>User migration</p> </li> </ul> <p>When Amazon Cognito invokes the functions for these triggers, it passes a JSON payload, which the function receives as input. This payload contains a <code>validationData</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your InitiateAuth request. In your function code in Lambda, you can process the <code>validationData</code> value to enhance your workflow for your specific needs.</p> <p>When you use the InitiateAuth API action, Amazon Cognito also invokes the functions for the following triggers, but it doesn't provide the ClientMetadata value as input:</p> <ul> <li> <p>Post authentication</p> </li> <li> <p>Custom message</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Custom email sender</p> </li> <li> <p>Custom SMS sender</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for certain custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you send an <code>InitiateAuth</code> request, Amazon Cognito invokes the Lambda functions that are specified for various triggers. The <code>ClientMetadata</code> value is passed as input to the functions for only the following triggers.</p> <ul> <li> <p>Pre sign-up</p> </li> <li> <p>Pre authentication</p> </li> <li> <p>User migration</p> </li> </ul> <p>When Amazon Cognito invokes the functions for these triggers, it passes a JSON payload as input to the function. This payload contains a <code>validationData</code> attribute with the data that you assigned to the <code>ClientMetadata</code> parameter in your <code>InitiateAuth</code> request. In your function, <code>validationData</code> can contribute to operations that require data that isn't in the default payload.</p> <p> <code>InitiateAuth</code> requests invokes the following triggers without <code>ClientMetadata</code> as input.</p> <ul> <li> <p>Post authentication</p> </li> <li> <p>Custom message</p> </li> <li> <p>Pre token generation</p> </li> <li> <p>Create auth challenge</p> </li> <li> <p>Define auth challenge</p> </li> <li> <p>Custom email sender</p> </li> <li> <p>Custom SMS sender</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The app client ID.</p>"
+          "documentation":"<p>The ID of the app client that your user wants to sign in to.</p>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata that contributes to your metrics for <code>InitiateAuth</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The optional session ID from a <code>ConfirmSignUp</code> API request. You can sign in a user directly from the sign-up process with the <code>USER_AUTH</code> authentication flow.</p>"
+          "documentation":"<p>The optional session ID from a <code>ConfirmSignUp</code> API request. You can sign in a user directly from the sign-up process with the <code>USER_AUTH</code> authentication flow. When you pass the session ID to <code>InitiateAuth</code>, Amazon Cognito assumes the SMS or email message one-time verification password from <code>ConfirmSignUp</code> as the primary authentication factor. You're not required to submit this code a second time. This option is only valid for users who have confirmed their sign-up and are signing in for the first time within the authentication flow session duration of the session ID.</p>"
         }
       },
       "documentation":"<p>Initiates the authentication request.</p>"
@@ -6140,23 +6390,23 @@
       "members":{
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The name of the challenge that you're responding to with this call. This name is returned in the <code>InitiateAuth</code> response if you must pass another challenge.</p> <p>Valid values include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and <code>SECRET_HASH</code> (if applicable) in the parameters.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a passkey, or webauthN, factor. These are typically biometric devices or security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with <code>USER_PASSWORD_AUTH</code> parameters: <code>USERNAME</code> (required), <code>PASSWORD</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with <code>USER_SRP_AUTH</code> parameters: <code>USERNAME</code> (required), <code>SRP_A</code> (required), <code>SECRET_HASH</code> (required if the app client is configured with a client secret), <code>DEVICE_KEY</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond to the challenge with <code>USERNAME</code> and an <code>ANSWER</code> that matches one of the challenge types in the <code>AvailableChallenges</code> response parameter.</p> </li> <li> <p> <code>SMS_MFA</code>: Next challenge is to supply an <code>SMS_MFA_CODE</code>that your user pool delivered in an SMS message.</p> </li> <li> <p> <code>EMAIL_OTP</code>: Next challenge is to supply an <code>EMAIL_OTP_CODE</code> that your user pool delivered in an email message.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Next challenge is to supply <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after the client-side SRP calculations.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: If device tracking was activated on your user pool and the previous challenges were passed, this challenge is returned so that Amazon Cognito can start tracking this device.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Similar to <code>PASSWORD_VERIFIER</code>, but for devices only.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login.</p> <p>Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a>.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. Because of this, and because in some cases you can create users who don't have values for required attributes, take care to collect and submit required-attribute values for all users who don't have passwords. You can create a user in the Amazon Cognito console without, for example, a required <code>birthdate</code> attribute. The API response from Amazon Cognito won't prompt you to submit a birthdate for the user if they don't have a password.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p> To set up software token MFA, use the session returned here from <code>InitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. To set up SMS MFA, an administrator should help the user to add a phone number to their account, and then the user should call <code>InitiateAuth</code> again to restart sign-in.</p> </li> </ul>"
+          "documentation":"<p>The name of an additional authentication challenge that you must respond to.</p> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that should pass both ways in challenge-response calls to the service. If the caller must pass another challenge, they return a session with other challenge parameters. Include this session identifier in a <code>RespondToAuthChallenge</code> API request.</p>"
+          "documentation":"<p>The session identifier that links a challenge response to the initial authentication request. If the user must pass another challenge, Amazon Cognito returns a session ID and challenge parameters.</p>"
         },
         "ChallengeParameters":{
           "shape":"ChallengeParametersType",
-          "documentation":"<p>The challenge parameters. These are returned in the <code>InitiateAuth</code> response if you must pass another challenge. The responses in this parameter should be used to compute inputs to the next call (<code>RespondToAuthChallenge</code>). </p> <p>All challenges require <code>USERNAME</code>. They also require <code>SECRET_HASH</code> if your app client has a client secret.</p>"
+          "documentation":"<p>The required parameters of the <code>ChallengeName</code> challenge.</p> <p>All challenges require <code>USERNAME</code>. They also require <code>SECRET_HASH</code> if your app client has a client secret.</p>"
         },
         "AuthenticationResult":{
           "shape":"AuthenticationResultType",
-          "documentation":"<p>The result of the authentication response. This result is only returned if the caller doesn't need to pass another challenge. If the caller does need to pass another challenge before it gets tokens, <code>ChallengeName</code>, <code>ChallengeParameters</code>, and <code>Session</code> are returned.</p>"
+          "documentation":"<p>The result of a successful and complete authentication request. This result is only returned if the user doesn't need to pass another challenge. If they must pass another challenge before they get tokens, Amazon Cognito returns a challenge in <code>ChallengeName</code>, <code>ChallengeParameters</code>, and <code>Session</code> response parameters.</p>"
         },
         "AvailableChallenges":{
           "shape":"AvailableChallengeListType",
-          "documentation":"<p>This response parameter prompts a user to select from multiple available challenges that they can complete authentication with. For example, they might be able to continue with passwordless authentication or with a one-time password from an SMS message.</p>"
+          "documentation":"<p>This response parameter lists the available authentication challenges that users can select from in <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a>. For example, they might be able to choose between passkey authentication, a one-time password from an SMS message, and a traditional password.</p>"
         }
       },
       "documentation":"<p>Initiates the authentication response.</p>"
@@ -6324,7 +6574,11 @@
           "documentation":"<p>The ARN of an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys\">KMS key</a>. Amazon Cognito uses the key to encrypt codes and temporary passwords sent to custom sender Lambda triggers.</p>"
         }
       },
-      "documentation":"<p>A collection of user pool Lambda triggers. Amazon Cognito invokes triggers at several possible stages of user pool operations. Triggers can modify the outcome of the operations that invoked them.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>A collection of user pool Lambda triggers. Amazon Cognito invokes triggers at several possible stages of user pool operations. Triggers can modify the outcome of the operations that invoked them.</p>"
+    },
+    "LanguageIdType":{
+      "type":"string",
+      "pattern":"^cognito:(default|english|french|spanish|german|bahasa-indonesia|italian|japanese|korean|portuguese-brazil|chinese-(simplified|traditional))$"
     },
     "LimitExceededException":{
       "type":"structure",
@@ -6337,17 +6591,30 @@
       "documentation":"<p>This exception is thrown when a user exceeds the limit for a requested Amazon Web Services resource.</p>",
       "exception":true
     },
+    "LinkUrlType":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"^[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+$"
+    },
+    "LinksType":{
+      "type":"map",
+      "key":{"shape":"LanguageIdType"},
+      "value":{"shape":"LinkUrlType"},
+      "max":12,
+      "min":1
+    },
     "ListDevicesRequest":{
       "type":"structure",
       "required":["AccessToken"],
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose list of devices you want to view.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "Limit":{
           "shape":"QueryLimitType",
-          "documentation":"<p>The limit of the device request.</p>"
+          "documentation":"<p>The maximum number of devices that you want Amazon Cognito to return in the response.</p>"
         },
         "PaginationToken":{
           "shape":"SearchPaginationTokenType",
@@ -6361,7 +6628,7 @@
       "members":{
         "Devices":{
           "shape":"DeviceListType",
-          "documentation":"<p>The devices returned in the list devices response.</p>"
+          "documentation":"<p>An array of devices and their details. Each entry that's returned includes device information, last-accessed and created dates, and the device key.</p>"
         },
         "PaginationToken":{
           "shape":"SearchPaginationTokenType",
@@ -6376,15 +6643,15 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool where you want to list user groups.</p>"
         },
         "Limit":{
           "shape":"QueryLimitType",
-          "documentation":"<p>The limit of the request to list groups.</p>"
+          "documentation":"<p>The maximum number of groups that you want Amazon Cognito to return in the response.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6393,11 +6660,11 @@
       "members":{
         "Groups":{
           "shape":"GroupListType",
-          "documentation":"<p>The group objects for the groups.</p>"
+          "documentation":"<p>An array of groups and their details. Each entry that's returned includes description, precedence, and IAM role values.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6407,15 +6674,15 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The ID of the user pool where you want to list IdPs.</p>"
         },
         "MaxResults":{
           "shape":"ListProvidersLimitType",
-          "documentation":"<p>The maximum number of IdPs to return.</p>"
+          "documentation":"<p>The maximum number of IdPs that you want Amazon Cognito to return in the response.</p>"
         },
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>A pagination token.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6425,11 +6692,11 @@
       "members":{
         "Providers":{
           "shape":"ProvidersListType",
-          "documentation":"<p>A list of IdP objects.</p>"
+          "documentation":"<p>An array of the IdPs in your user pool. For each, the response includes identifiers, the IdP name and type, and trust-relationship details like the issuer URL.</p>"
         },
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>A pagination token.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6453,15 +6720,15 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool where you want to list resource servers.</p>"
         },
         "MaxResults":{
           "shape":"ListResourceServersLimitType",
-          "documentation":"<p>The maximum number of resource servers to return.</p>"
+          "documentation":"<p>The maximum number of resource servers that you want Amazon Cognito to return in the response.</p>"
         },
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>A pagination token.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6471,11 +6738,11 @@
       "members":{
         "ResourceServers":{
           "shape":"ResourceServersListType",
-          "documentation":"<p>The resource servers.</p>"
+          "documentation":"<p>An array of resource servers and the details of their configuration. For each, the response includes names, identifiers, and custom scopes.</p>"
         },
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>A pagination token.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6498,6 +6765,43 @@
         }
       }
     },
+    "ListTermsRequest":{
+      "type":"structure",
+      "required":["UserPoolId"],
+      "members":{
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool where you want to list terms documents.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListTermsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of terms documents that you want Amazon Cognito to return in the response.</p>"
+        },
+        "NextToken":{
+          "shape":"StringType",
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
+        }
+      }
+    },
+    "ListTermsRequestMaxResultsInteger":{
+      "type":"integer",
+      "max":60,
+      "min":1
+    },
+    "ListTermsResponse":{
+      "type":"structure",
+      "required":["Terms"],
+      "members":{
+        "Terms":{
+          "shape":"TermsDescriptionListType",
+          "documentation":"<p>A summary of the requested terms documents. Includes unique identifiers for later changes to the terms documents.</p>"
+        },
+        "NextToken":{
+          "shape":"StringType",
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
+        }
+      }
+    },
     "ListUserImportJobsRequest":{
       "type":"structure",
       "required":[
@@ -6507,11 +6811,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that the users are being imported into.</p>"
+          "documentation":"<p>The ID of the user pool where you want to list import jobs.</p>"
         },
         "MaxResults":{
           "shape":"PoolQueryLimitType",
-          "documentation":"<p>The maximum number of import jobs you want the request to return.</p>"
+          "documentation":"<p>The maximum number of import jobs that you want Amazon Cognito to return in the response.</p>"
         },
         "PaginationToken":{
           "shape":"PaginationKeyType",
@@ -6525,7 +6829,7 @@
       "members":{
         "UserImportJobs":{
           "shape":"UserImportJobsListType",
-          "documentation":"<p>The user import jobs.</p>"
+          "documentation":"<p>An array of user import jobs from the requested user pool. For each, the response includes logging destination, status, and the Amazon S3 pre-signed URL for CSV upload.</p>"
         },
         "PaginationToken":{
           "shape":"PaginationKeyType",
@@ -6544,11 +6848,11 @@
         },
         "MaxResults":{
           "shape":"QueryLimit",
-          "documentation":"<p>The maximum number of results you want the request to return when listing the user pool clients.</p>"
+          "documentation":"<p>The maximum number of app clients that you want Amazon Cognito to return in the response.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         }
       },
       "documentation":"<p>Represents the request to list the user pool clients.</p>"
@@ -6558,11 +6862,11 @@
       "members":{
         "UserPoolClients":{
           "shape":"UserPoolClientListType",
-          "documentation":"<p>The user pool clients in the response that lists user pool clients.</p>"
+          "documentation":"<p>An array of app clients and their details. Includes app client ID and name.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server that lists user pool clients.</p>"
@@ -6573,11 +6877,11 @@
       "members":{
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         },
         "MaxResults":{
           "shape":"PoolQueryLimitType",
-          "documentation":"<p>The maximum number of results you want the request to return when listing the user pools.</p>"
+          "documentation":"<p>The maximum number of user pools that you want Amazon Cognito to return in the response.</p>"
         }
       },
       "documentation":"<p>Represents the request to list user pools.</p>"
@@ -6587,11 +6891,11 @@
       "members":{
         "UserPools":{
           "shape":"UserPoolListType",
-          "documentation":"<p>The user pools from the response to list users.</p>"
+          "documentation":"<p>An array of user pools and their configuration details.</p>"
         },
         "NextToken":{
           "shape":"PaginationKeyType",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       },
       "documentation":"<p>Represents the response to list user pools.</p>"
@@ -6605,19 +6909,19 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool where you want to view the membership of the requested group.</p>"
         },
         "GroupName":{
           "shape":"GroupNameType",
-          "documentation":"<p>The name of the group.</p>"
+          "documentation":"<p>The name of the group that you want to query for user membership.</p>"
         },
         "Limit":{
           "shape":"QueryLimitType",
-          "documentation":"<p>The maximum number of users that you want to retrieve before pagination.</p>"
+          "documentation":"<p>The maximum number of groups that you want Amazon Cognito to return in the response.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6626,11 +6930,11 @@
       "members":{
         "Users":{
           "shape":"UsersListType",
-          "documentation":"<p>A list of users in the group, and their attributes.</p>"
+          "documentation":"<p>An array of users who are members in the group, and their attributes.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that you can use in a later request to return the next set of items in the list.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6640,7 +6944,7 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool on which the search should be performed.</p>"
+          "documentation":"<p>The ID of the user pool where you want to display or search for users.</p>"
         },
         "AttributesToGet":{
           "shape":"SearchedAttributeNamesListType",
@@ -6648,7 +6952,7 @@
         },
         "Limit":{
           "shape":"QueryLimitType",
-          "documentation":"<p>Maximum number of users to be returned.</p>"
+          "documentation":"<p>The maximum number of users that you want Amazon Cognito to return in the response.</p>"
         },
         "PaginationToken":{
           "shape":"SearchPaginationTokenType",
@@ -6666,7 +6970,7 @@
       "members":{
         "Users":{
           "shape":"UsersListType",
-          "documentation":"<p>A list of the user pool users, and their attributes, that match your query.</p> <note> <p>Amazon Cognito creates a profile in your user pool for each native user in your user pool, and each unique user ID from your third-party identity providers (IdPs). When you link users with the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html\">AdminLinkProviderForUser</a> API operation, the output of <code>ListUsers</code> displays both the IdP user and the native user that you linked. You can identify IdP users in the <code>Users</code> object of this API response by the IdP prefix that Amazon Cognito appends to <code>Username</code>.</p> </note>"
+          "documentation":"<p>An array of user pool users who match your query, and their attributes.</p>"
         },
         "PaginationToken":{
           "shape":"SearchPaginationTokenType",
@@ -6681,11 +6985,11 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose registered passkeys you want to list.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.</p>"
+          "documentation":"<p>This API operation returns a limited number of results. The pagination token is an identifier that you can present in an additional API request with the same parameters. When you include the pagination token, Amazon Cognito returns the next set of items after the current list. Subsequent requests return a new pagination token. By use of this token, you can paginate through the full list of items.</p>"
         },
         "MaxResults":{
           "shape":"WebAuthnCredentialsQueryLimitType",
@@ -6703,7 +7007,7 @@
         },
         "NextToken":{
           "shape":"PaginationKey",
-          "documentation":"<p>An identifier that you can use in a later request to return the next set of items in the list.</p>"
+          "documentation":"<p>The identifier that Amazon Cognito returned with the previous request to this operation. When you include a pagination token in your request, Amazon Cognito returns the next set of items in the list. By use of this token, you can paginate through the full list of items.</p>"
         }
       }
     },
@@ -6722,26 +7026,26 @@
       "members":{
         "LogLevel":{
           "shape":"LogLevel",
-          "documentation":"<p>The <code>errorlevel</code> selection of logs that a user pool sends for detailed activity logging. To send <code>userNotification</code> activity with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/tracking-quotas-and-usage-in-cloud-watch-logs.html\">information about message delivery</a>, choose <code>ERROR</code> with <code>CloudWatchLogsConfiguration</code>. To send <code>userAuthEvents</code> activity with user logs from advanced security features, choose <code>INFO</code> with one of <code>CloudWatchLogsConfiguration</code>, <code>FirehoseConfiguration</code>, or <code>S3Configuration</code>.</p>"
+          "documentation":"<p>The <code>errorlevel</code> selection of logs that a user pool sends for detailed activity logging. To send <code>userNotification</code> activity with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/exporting-quotas-and-usage.html\">information about message delivery</a>, choose <code>ERROR</code> with <code>CloudWatchLogsConfiguration</code>. To send <code>userAuthEvents</code> activity with user logs from threat protection with the Plus feature plan, choose <code>INFO</code> with one of <code>CloudWatchLogsConfiguration</code>, <code>FirehoseConfiguration</code>, or <code>S3Configuration</code>.</p>"
         },
         "EventSource":{
           "shape":"EventSourceName",
-          "documentation":"<p>The source of events that your user pool sends for logging. To send error-level logs about user notification activity, set to <code>userNotification</code>. To send info-level logs about advanced security features user activity, set to <code>userAuthEvents</code>.</p>"
+          "documentation":"<p>The source of events that your user pool sends for logging. To send error-level logs about user notification activity, set to <code>userNotification</code>. To send info-level logs about threat-protection user activity in user pools with the Plus feature plan, set to <code>userAuthEvents</code>.</p>"
         },
         "CloudWatchLogsConfiguration":{
           "shape":"CloudWatchLogsConfigurationType",
-          "documentation":"<p>The CloudWatch log group destination of user pool detailed activity logs, or of user activity log export with advanced security features.</p>"
+          "documentation":"<p>The CloudWatch log group destination of user pool detailed activity logs, or of user activity log export with threat protection.</p>"
         },
         "S3Configuration":{
           "shape":"S3ConfigurationType",
-          "documentation":"<p>The Amazon S3 bucket destination of user activity log export with advanced security features. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>The Amazon S3 bucket destination of user activity log export with threat protection. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
         },
         "FirehoseConfiguration":{
           "shape":"FirehoseConfigurationType",
-          "documentation":"<p>The Amazon Data Firehose stream destination of user activity log export with advanced security features. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>The Amazon Data Firehose stream destination of user activity log export with threat protection. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
         }
       },
-      "documentation":"<p>The configuration of user event logs to an external Amazon Web Services service like Amazon Data Firehose, Amazon S3, or Amazon CloudWatch Logs.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html\">SetLogDeliveryConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetLogDeliveryConfiguration.html\">GetLogDeliveryConfiguration</a>.</p>"
+      "documentation":"<p>The configuration of user event logs to an external Amazon Web Services service like Amazon Data Firehose, Amazon S3, or Amazon CloudWatch Logs.</p>"
     },
     "LogDeliveryConfigurationType":{
       "type":"structure",
@@ -6759,7 +7063,7 @@
           "documentation":"<p>A logging destination of a user pool. User pools can have multiple logging destinations for message-delivery and user-activity logs.</p>"
         }
       },
-      "documentation":"<p>The logging parameters of a user pool, as returned in the response to a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetLogDeliveryConfiguration.html\">GetLogDeliveryConfiguration</a> request.</p>"
+      "documentation":"<p>The logging parameters of a user pool, as returned in the response to a <code>GetLogDeliveryConfiguration</code> request.</p>"
     },
     "LogLevel":{
       "type":"string",
@@ -6829,11 +7133,11 @@
         },
         "UseCognitoProvidedValues":{
           "shape":"BooleanType",
-          "documentation":"<p>When true, applies the default branding style options. This option reverts to default style options that are managed by Amazon Cognito. You can modify them later in the branding designer.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
+          "documentation":"<p>When true, applies the default branding style options. This option reverts to default style options that are managed by Amazon Cognito. You can modify them later in the branding editor.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
         },
         "Settings":{
           "shape":"Document",
-          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p>"
+          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p> <p>The following components are not currently implemented and reserved for future use:</p> <ul> <li> <p> <code>signUp</code> </p> </li> <li> <p> <code>instructions</code> </p> </li> <li> <p> <code>sessionTimerDisplay</code> </p> </li> <li> <p> <code>languageSelector</code> (for localization, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-localization\">Managed login localization)</a> </p> </li> </ul>"
         },
         "Assets":{
           "shape":"AssetListType",
@@ -6848,7 +7152,7 @@
           "documentation":"<p>The date and time when the item was modified. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>A managed login branding style that's assigned to a user pool app client.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html\">CreateManagedLoginBranding</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateManagedLoginBranding.html\">UpdateManagedLoginBranding</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBranding.html\">DescribeManagedLoginBranding</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBrandingByClient.html\">DescribeManagedLoginBrandingByClient</a>.</p>"
+      "documentation":"<p>A managed login branding style that's assigned to a user pool app client.</p>"
     },
     "MessageActionType":{
       "type":"string",
@@ -6888,7 +7192,7 @@
           "documentation":"<p>The device group key, an identifier used in generating the <code>DEVICE_PASSWORD_VERIFIER</code> for device SRP authentication.</p>"
         }
       },
-      "documentation":"<p>Information that your user pool responds with in <code>AuthenticationResult</code>when you configure it to remember devices and a user signs in with an unrecognized device. Amazon Cognito presents a new device key that you can use to set up <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">device authentication</a> in a \"Remember me on this device\" authentication model.</p> <p>This data type is a response parameter of authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html\">AdminInitiateAuth</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html\">AdminRespondToAuthChallenge</a>.</p>"
+      "documentation":"<p>Information that your user pool responds with in <code>AuthenticationResult</code>when you configure it to remember devices and a user signs in with an unrecognized device. Amazon Cognito presents a new device key that you can use to set up <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">device authentication</a> in a \"Remember me on this device\" authentication model.</p>"
     },
     "NotAuthorizedException":{
       "type":"structure",
@@ -6930,7 +7234,7 @@
           "documentation":"<p>The template for the email message that your user pool sends when MFA is challenged in response to a detected risk.</p>"
         }
       },
-      "documentation":"<p>The configuration for Amazon SES email messages that advanced security features sends to a user when your adaptive authentication automated response has a <i>Notify</i> action.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>The configuration for Amazon SES email messages that threat protection sends to a user when your adaptive authentication automated response has a <i>Notify</i> action.</p>"
     },
     "NotifyEmailType":{
       "type":"structure",
@@ -6949,7 +7253,7 @@
           "documentation":"<p>The body of an email notification formatted in plaintext. Choose an <code>HtmlBody</code> or a <code>TextBody</code> to send an HTML-formatted or plaintext message, respectively.</p>"
         }
       },
-      "documentation":"<p>The template for email messages that advanced security features sends to a user when your threat protection automated response has a <i>Notify</i> action.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>The template for email messages that threat protection sends to a user when your threat protection automated response has a <i>Notify</i> action.</p>"
     },
     "NumberAttributeConstraintsType":{
       "type":"structure",
@@ -6963,7 +7267,7 @@
           "documentation":"<p>The maximum length of a number attribute value. Must be a number less than or equal to <code>2^1023</code>, represented as a string with a length of 131072 characters or fewer.</p>"
         }
       },
-      "documentation":"<p>The minimum and maximum values of an attribute that is of the number type, for example <code>custom:age</code>.</p> <p>This data type is part of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SchemaAttributeType.html\">SchemaAttributeType</a>. It defines the length constraints on number-type attributes that you configure in <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and displays the length constraints of all number-type attributes in the response to <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a> </p>"
+      "documentation":"<p>The minimum and maximum values of an attribute that is of the number type, for example <code>custom:age</code>.</p>"
     },
     "OAuthFlowType":{
       "type":"string",
@@ -7033,14 +7337,14 @@
         },
         "PasswordHistorySize":{
           "shape":"PasswordHistorySizeType",
-          "documentation":"<p>The number of previous passwords that you want Amazon Cognito to restrict each user from reusing. Users can't set a password that matches any of <code>n</code> previous passwords, where <code>n</code> is the value of <code>PasswordHistorySize</code>.</p> <p>Password history isn't enforced and isn't displayed in <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a> responses when you set this value to <code>0</code> or don't provide it. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>The number of previous passwords that you want Amazon Cognito to restrict each user from reusing. Users can't set a password that matches any of <code>n</code> previous passwords, where <code>n</code> is the value of <code>PasswordHistorySize</code>.</p>"
         },
         "TemporaryPasswordValidityDays":{
           "shape":"TemporaryPasswordValidityDaysType",
           "documentation":"<p>The number of days a temporary password is valid in the password policy. If the user doesn't sign in during this time, an administrator must reset their password. Defaults to <code>7</code>. If you submit a value of <code>0</code>, Amazon Cognito treats it as a null value and sets <code>TemporaryPasswordValidityDays</code> to its default value.</p> <note> <p>When you set <code>TemporaryPasswordValidityDays</code> for a user pool, you can no longer set a value for the legacy <code>UnusedAccountValidityDays</code> parameter in that user pool.</p> </note>"
         }
       },
-      "documentation":"<p>The password policy settings for a user pool, including complexity, history, and length requirements.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The password policy settings for a user pool, including complexity, history, and length requirements.</p>"
     },
     "PasswordResetRequiredException":{
       "type":"structure",
@@ -7073,7 +7377,8 @@
       "type":"string",
       "enum":[
         "V1_0",
-        "V2_0"
+        "V2_0",
+        "V3_0"
       ]
     },
     "PreTokenGenerationVersionConfigType":{
@@ -7092,7 +7397,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the function that you want to assign to your Lambda trigger.</p> <p>This parameter and the <code>PreTokenGeneration</code> property of <code>LambdaConfig</code> have the same value. For new instances of pre token generation triggers, set <code>LambdaArn</code>.</p>"
         }
       },
-      "documentation":"<p>The properties of a pre token generation Lambda trigger.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The properties of a pre token generation Lambda trigger.</p>"
     },
     "PrecedenceType":{
       "type":"integer",
@@ -7141,7 +7446,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>The details of a user pool identity provider (IdP), including name and type.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html\">ListIdentityProviders</a>.</p>"
+      "documentation":"<p>The details of a user pool identity provider (IdP), including name and type.</p>"
     },
     "ProviderDetailsType":{
       "type":"map",
@@ -7176,7 +7481,7 @@
           "documentation":"<p>The value of the provider attribute to link to, such as <code>xxxxx_account</code>.</p>"
         }
       },
-      "documentation":"<p>The characteristics of a source or destination user for linking a federated user profile to a local user profile.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html\">AdminLinkProviderForUser</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableProviderForUser.html\">AdminDisableProviderForUser</a>.</p>"
+      "documentation":"<p>The characteristics of a source or destination user for linking a federated user profile to a local user profile.</p>"
     },
     "ProvidersListType":{
       "type":"list",
@@ -7224,7 +7529,7 @@
           "documentation":"<p>The recovery method that this object sets a recovery option for.</p>"
         }
       },
-      "documentation":"<p>A recovery option for a user. The <code>AccountRecoverySettingType</code> data type is an array of this object. Each <code>RecoveryOptionType</code> has a priority property that determines whether it is a primary or secondary option.</p> <p>For example, if <code>verified_email</code> has a priority of <code>1</code> and <code>verified_phone_number</code> has a priority of <code>2</code>, your user pool sends account-recovery messages to a verified email address but falls back to an SMS message if the user has a verified phone number. The <code>admin_only</code> option prevents self-service account recovery.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>A recovery option for a user. The <code>AccountRecoverySettingType</code> data type is an array of this object. Each <code>RecoveryOptionType</code> has a priority property that determines whether it is a primary or secondary option.</p> <p>For example, if <code>verified_email</code> has a priority of <code>1</code> and <code>verified_phone_number</code> has a priority of <code>2</code>, your user pool sends account-recovery messages to a verified email address but falls back to an SMS message if the user has a verified phone number. The <code>admin_only</code> option prevents self-service account recovery.</p>"
     },
     "RedirectUrlType":{
       "type":"string",
@@ -7232,6 +7537,29 @@
       "min":1,
       "pattern":"[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+"
     },
+    "RefreshTokenReuseException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"MessageType"}
+      },
+      "documentation":"<p>This exception is throw when your application requests token refresh with a refresh token that has been invalidated by refresh-token rotation.</p>",
+      "exception":true
+    },
+    "RefreshTokenRotationType":{
+      "type":"structure",
+      "required":["Feature"],
+      "members":{
+        "Feature":{
+          "shape":"FeatureType",
+          "documentation":"<p>The state of refresh token rotation for the current app client.</p>"
+        },
+        "RetryGracePeriodSeconds":{
+          "shape":"RetryGracePeriodSecondsType",
+          "documentation":"<p>When you request a token refresh with <code>GetTokensFromRefreshToken</code>, the original refresh token that you're rotating out can remain valid for a period of time of up to 60 seconds. This allows for client-side retries. When <code>RetryGracePeriodSeconds</code> is <code>0</code>, the grace period is disabled and a successful request immediately invalidates the submitted refresh token.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of your app client for refresh token rotation. When enabled, your app client issues new ID, access, and refresh tokens when users renew their sessions with refresh tokens. When disabled, token refresh issues only ID and access tokens.</p>"
+    },
     "RefreshTokenValidityType":{
       "type":"integer",
       "max":315360000,
@@ -7256,7 +7584,7 @@
       "members":{
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The ID of the client associated with the user pool.</p>"
+          "documentation":"<p>The ID of the user pool app client where the user signed up.</p>"
         },
         "SecretHash":{
           "shape":"SecretHashType",
@@ -7264,19 +7592,19 @@
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata that contributes to your metrics for <code>ResendConfirmationCode</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ResendConfirmationCode API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ResendConfirmationCode request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the ResendConfirmationCode API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your ResendConfirmationCode request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to resend the confirmation code.</p>"
@@ -7286,7 +7614,7 @@
       "members":{
         "CodeDeliveryDetails":{
           "shape":"CodeDeliveryDetailsType",
-          "documentation":"<p>The code delivery details returned by the server in response to the request to resend the confirmation code.</p>"
+          "documentation":"<p>Information about the phone number or email address that Amazon Cognito sent the confirmation code to.</p>"
         }
       },
       "documentation":"<p>The response from the server when Amazon Cognito makes the request to resend a confirmation code.</p>"
@@ -7352,7 +7680,7 @@
           "documentation":"<p>A friendly description of a custom scope.</p>"
         }
       },
-      "documentation":"<p>One custom scope associated with a user pool resource server. This data type is a member of <code>ResourceServerScopeType</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\"> Scopes, M2M, and API authorization with resource servers</a>. </p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateResourceServer.html\">CreateResourceServer</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeResourceServer.html\">DescribeResourceServer</a>. </p>"
+      "documentation":"<p>One custom scope associated with a user pool resource server. This data type is a member of <code>ResourceServerScopeType</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html\"> Scopes, M2M, and API authorization with resource servers</a>. </p>"
     },
     "ResourceServerType":{
       "type":"structure",
@@ -7374,7 +7702,7 @@
           "documentation":"<p>A list of scopes that are defined for the resource server.</p>"
         }
       },
-      "documentation":"<p>The details of a resource server configuration and associated custom scopes in a user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateResourceServer.html\">CreateResourceServer</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeResourceServer.html\">DescribeResourceServer</a>. </p>"
+      "documentation":"<p>The details of a resource server configuration and associated custom scopes in a user pool.</p>"
     },
     "ResourceServersListType":{
       "type":"list",
@@ -7389,31 +7717,31 @@
       "members":{
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The app client ID.</p>"
+          "documentation":"<p>The ID of the app client where the user is signing in.</p>"
         },
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The challenge name. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>.</p> <p> <code>ADMIN_NO_SRP_AUTH</code> isn't a valid value.</p>"
+          "documentation":"<p>The name of the challenge that you are responding to.</p> <note> <p>You can't respond to an <code>ADMIN_NO_SRP_AUTH</code> challenge with this operation.</p> </note> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that should be passed both ways in challenge-response calls to the service. If <code>InitiateAuth</code> or <code>RespondToAuthChallenge</code> API call determines that the caller must pass another challenge, they return a session with other challenge parameters. This session should be passed as it is to the next <code>RespondToAuthChallenge</code> API call.</p>"
+          "documentation":"<p>The session identifier that maintains the state of authentication requests and challenge responses. If an <code>AdminInitiateAuth</code> or <code>AdminRespondToAuthChallenge</code> API request results in a determination that your application must pass another challenge, Amazon Cognito returns a session with other challenge parameters. Send this session identifier, unmodified, to the next <code>AdminRespondToAuthChallenge</code> request.</p>"
         },
         "ChallengeResponses":{
           "shape":"ChallengeResponsesType",
-          "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> <p>Add <code>\"DEVICE_KEY\"</code> when you sign in with a remembered device.</p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA or SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
+          "documentation":"<p>The responses to the challenge that you received in the previous request. Each challenge has its own required response parameters. The following examples are partial JSON request bodies that highlight challenge-response parameters.</p> <important> <p>You must provide a SECRET_HASH parameter in all challenge responses to an app client that has a client secret. Include a <code>DEVICE_KEY</code> for device authentication.</p> </important> <dl> <dt>SELECT_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"ANSWER\": \"[Challenge name]\"}</code> </p> <p>Available challenges are <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, <code>EMAIL_OTP</code>, <code>SMS_OTP</code>, and <code>WEB_AUTHN</code>.</p> <p>Complete authentication in the <code>SELECT_CHALLENGE</code> response for <code>PASSWORD</code>, <code>PASSWORD_SRP</code>, and <code>WEB_AUTHN</code>:</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"WEB_AUTHN\", \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD\", \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"PASSWORD_SRP\", \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </li> </ul> <p>For <code>SMS_OTP</code> and <code>EMAIL_OTP</code>, respond with the username and answer. Your user pool will send a code for the user to submit in the next challenge response.</p> <ul> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"SMS_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> <li> <p> <code>\"ChallengeName\": \"SELECT_CHALLENGE\", \"ChallengeResponses\": { \"ANSWER\": \"EMAIL_OTP\", \"USERNAME\": \"[username]\"}</code> </p> </li> </ul> </dd> <dt>WEB_AUTHN</dt> <dd> <p> <code>\"ChallengeName\": \"WEB_AUTHN\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"CREDENTIAL\": \"[AuthenticationResponseJSON]\"}</code> </p> <p>See <a href=\"https://www.w3.org/TR/WebAuthn-3/#dictdef-authenticationresponsejson\"> AuthenticationResponseJSON</a>.</p> </dd> <dt>PASSWORD</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"PASSWORD\": \"[password]\"}</code> </p> </dd> <dt>PASSWORD_SRP</dt> <dd> <p> <code>\"ChallengeName\": \"PASSWORD_SRP\", \"ChallengeResponses\": { \"USERNAME\": \"[username]\", \"SRP_A\": \"[SRP_A]\"}</code> </p> </dd> <dt>SMS_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_OTP\", \"ChallengeResponses\": {\"SMS_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>EMAIL_OTP</dt> <dd> <p> <code>\"ChallengeName\": \"EMAIL_OTP\", \"ChallengeResponses\": {\"EMAIL_OTP_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>SMS_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SMS_MFA\", \"ChallengeResponses\": {\"SMS_MFA_CODE\": \"[code]\", \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>PASSWORD_VERIFIER</dt> <dd> <p>This challenge response is part of the SRP flow. Amazon Cognito requires that your application respond to this challenge within a few seconds. When the response time exceeds this period, your user pool returns a <code>NotAuthorizedException</code> error.</p> <p> <code>\"ChallengeName\": \"PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>CUSTOM_CHALLENGE</dt> <dd> <p> <code>\"ChallengeName\": \"CUSTOM_CHALLENGE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[challenge_answer]\"}</code> </p> </dd> <dt>NEW_PASSWORD_REQUIRED</dt> <dd> <p> <code>\"ChallengeName\": \"NEW_PASSWORD_REQUIRED\", \"ChallengeResponses\": {\"NEW_PASSWORD\": \"[new_password]\", \"USERNAME\": \"[username]\"}</code> </p> <p>To set any required attributes that <code>InitiateAuth</code> returned in an <code>requiredAttributes</code> parameter, add <code>\"userAttributes.[attribute_name]\": \"[attribute_value]\"</code>. This parameter can also set values for writable attributes that aren't required by your user pool.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </dd> <dt>SOFTWARE_TOKEN_MFA</dt> <dd> <p> <code>\"ChallengeName\": \"SOFTWARE_TOKEN_MFA\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"SOFTWARE_TOKEN_MFA_CODE\": [authenticator_code]}</code> </p> </dd> <dt>DEVICE_SRP_AUTH</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_SRP_AUTH\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"DEVICE_KEY\": \"[device_key]\", \"SRP_A\": \"[srp_a]\"}</code> </p> </dd> <dt>DEVICE_PASSWORD_VERIFIER</dt> <dd> <p> <code>\"ChallengeName\": \"DEVICE_PASSWORD_VERIFIER\", \"ChallengeResponses\": {\"DEVICE_KEY\": \"[device_key]\", \"PASSWORD_CLAIM_SIGNATURE\": \"[claim_signature]\", \"PASSWORD_CLAIM_SECRET_BLOCK\": \"[secret_block]\", \"TIMESTAMP\": [timestamp], \"USERNAME\": \"[username]\"}</code> </p> </dd> <dt>MFA_SETUP</dt> <dd> <p> <code>\"ChallengeName\": \"MFA_SETUP\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\"}, \"SESSION\": \"[Session ID from VerifySoftwareToken]\"</code> </p> </dd> <dt>SELECT_MFA_TYPE</dt> <dd> <p> <code>\"ChallengeName\": \"SELECT_MFA_TYPE\", \"ChallengeResponses\": {\"USERNAME\": \"[username]\", \"ANSWER\": \"[SMS_MFA|EMAIL_MFA|SOFTWARE_TOKEN_MFA]\"}</code> </p> </dd> </dl> <p>For more information about <code>SECRET_HASH</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash\">Computing secret hash values</a>. For information about <code>DEVICE_KEY</code>, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>.</p>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata that contributes to your metrics for <code>RespondToAuthChallenge</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the RespondToAuthChallenge API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>post authentication</i>, <i>pre token generation</i>, <i>define auth challenge</i>, <i>create auth challenge</i>, and <i>verify auth challenge</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your RespondToAuthChallenge request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the RespondToAuthChallenge API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>post authentication</i>, <i>pre token generation</i>, <i>define auth challenge</i>, <i>create auth challenge</i>, and <i>verify auth challenge</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your RespondToAuthChallenge request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>The request to respond to an authentication challenge.</p>"
@@ -7423,23 +7751,28 @@
       "members":{
         "ChallengeName":{
           "shape":"ChallengeNameType",
-          "documentation":"<p>The challenge name. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>.</p>"
+          "documentation":"<p>The name of the next challenge that you must respond to.</p> <p>Possible challenges include the following:</p> <note> <p>All of the following challenges require <code>USERNAME</code> and, when the app client has a client secret, <code>SECRET_HASH</code> in the parameters. Include a <code>DEVICE_KEY</code> for device authentication.</p> </note> <ul> <li> <p> <code>WEB_AUTHN</code>: Respond to the challenge with the results of a successful authentication with a WebAuthn authenticator, or passkey, as <code>CREDENTIAL</code>. Examples of WebAuthn authenticators include biometric devices and security keys.</p> </li> <li> <p> <code>PASSWORD</code>: Respond with the user's password as <code>PASSWORD</code>.</p> </li> <li> <p> <code>PASSWORD_SRP</code>: Respond with the initial SRP secret as <code>SRP_A</code>.</p> </li> <li> <p> <code>SELECT_CHALLENGE</code>: Respond with a challenge selection as <code>ANSWER</code>. It must be one of the challenge types in the <code>AvailableChallenges</code> response parameter. Add the parameters of the selected challenge, for example <code>USERNAME</code> and <code>SMS_OTP</code>.</p> </li> <li> <p> <code>SMS_MFA</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_MFA</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_MFA_CODE</code> </p> </li> <li> <p> <code>EMAIL_OTP</code>: Respond with the code that your user pool delivered in an email message, as <code>EMAIL_OTP_CODE</code> .</p> </li> <li> <p> <code>SMS_OTP</code>: Respond with the code that your user pool delivered in an SMS message, as <code>SMS_OTP_CODE</code>.</p> </li> <li> <p> <code>PASSWORD_VERIFIER</code>: Respond with the second stage of SRP secrets as <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code>.</p> </li> <li> <p> <code>CUSTOM_CHALLENGE</code>: This is returned if your custom authentication flow determines that the user should pass another challenge before tokens are issued. The parameters of the challenge are determined by your Lambda function and issued in the <code>ChallengeParameters</code> of a challenge response.</p> </li> <li> <p> <code>DEVICE_SRP_AUTH</code>: Respond with the initial parameters of device SRP authentication. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>DEVICE_PASSWORD_VERIFIER</code>: Respond with <code>PASSWORD_CLAIM_SIGNATURE</code>, <code>PASSWORD_CLAIM_SECRET_BLOCK</code>, and <code>TIMESTAMP</code> after client-side SRP calculations. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html#user-pools-remembered-devices-signing-in-with-a-device\">Signing in with a device</a>.</p> </li> <li> <p> <code>NEW_PASSWORD_REQUIRED</code>: For users who are required to change their passwords after successful first login. Respond to this challenge with <code>NEW_PASSWORD</code> and any required attributes that Amazon Cognito returned in the <code>requiredAttributes</code> parameter. You can also set values for attributes that aren't required by your user pool and that your app client can write.</p> <p>Amazon Cognito only returns this challenge for users who have temporary passwords. When you create passwordless users, you must provide values for all required attributes.</p> <note> <p>In a <code>NEW_PASSWORD_REQUIRED</code> challenge response, you can't modify a required attribute that already has a value. In <code>AdminRespondToAuthChallenge</code> or <code>RespondToAuthChallenge</code>, set a value for any keys that Amazon Cognito returned in the <code>requiredAttributes</code> parameter, then use the <code>AdminUpdateUserAttributes</code> or <code>UpdateUserAttributes</code> API operation to modify the value of any additional attributes.</p> </note> </li> <li> <p> <code>MFA_SETUP</code>: For users who are required to setup an MFA factor before they can sign in. The MFA types activated for the user pool will be listed in the challenge parameters <code>MFAS_CAN_SETUP</code> value. </p> <p>To set up time-based one-time password (TOTP) MFA, use the session returned in this challenge from <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> as an input to <code>AssociateSoftwareToken</code>. Then, use the session returned by <code>VerifySoftwareToken</code> as an input to <code>RespondToAuthChallenge</code> or <code>AdminRespondToAuthChallenge</code> with challenge name <code>MFA_SETUP</code> to complete sign-in. </p> <p>To set up SMS or email MFA, collect a <code>phone_number</code> or <code>email</code> attribute for the user. Then restart the authentication flow with an <code>InitiateAuth</code> or <code>AdminInitiateAuth</code> request. </p> </li> </ul>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that should be passed both ways in challenge-response calls to the service. If the caller must pass another challenge, they return a session with other challenge parameters. This session should be passed as it is to the next <code>RespondToAuthChallenge</code> API call.</p>"
+          "documentation":"<p>The session identifier that maintains the state of authentication requests and challenge responses. If an <code>InitiateAuth</code> or <code>RespondToAuthChallenge</code> API request results in a determination that your application must pass another challenge, Amazon Cognito returns a session with other challenge parameters. Send this session identifier, unmodified, to the next <code>RespondToAuthChallenge</code> request.</p>"
         },
         "ChallengeParameters":{
           "shape":"ChallengeParametersType",
-          "documentation":"<p>The challenge parameters. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a>.</p>"
+          "documentation":"<p>The parameters that define your response to the next challenge.</p>"
         },
         "AuthenticationResult":{
           "shape":"AuthenticationResultType",
-          "documentation":"<p>The result returned by the server in response to the request to respond to the authentication challenge.</p>"
+          "documentation":"<p>The outcome of a successful authentication process. After your application has passed all challenges, Amazon Cognito returns an <code>AuthenticationResult</code> with the JSON web tokens (JWTs) that indicate successful sign-in.</p>"
         }
       },
       "documentation":"<p>The response to respond to the authentication challenge.</p>"
     },
+    "RetryGracePeriodSecondsType":{
+      "type":"integer",
+      "max":60,
+      "min":0
+    },
     "RevokeTokenRequest":{
       "type":"structure",
       "required":[
@@ -7453,18 +7786,17 @@
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The client ID for the token that you want to revoke.</p>"
+          "documentation":"<p>The ID of the app client where the token that you want to revoke was issued.</p>"
         },
         "ClientSecret":{
           "shape":"ClientSecretType",
-          "documentation":"<p>The secret for the client ID. This is required only if the client ID has a secret.</p>"
+          "documentation":"<p>The client secret of the requested app client, if the client has a secret.</p>"
         }
       }
     },
     "RevokeTokenResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RiskConfigurationType":{
       "type":"structure",
@@ -7479,11 +7811,11 @@
         },
         "CompromisedCredentialsRiskConfiguration":{
           "shape":"CompromisedCredentialsRiskConfigurationType",
-          "documentation":"<p>Settings for compromised-credentials actions and authentication types with advanced security features in full-function <code>ENFORCED</code> mode.</p>"
+          "documentation":"<p>Settings for compromised-credentials actions and authentication types with threat protection in full-function <code>ENFORCED</code> mode.</p>"
         },
         "AccountTakeoverRiskConfiguration":{
           "shape":"AccountTakeoverRiskConfigurationType",
-          "documentation":"<p>The settings for automated responses and notification templates for adaptive authentication with advanced security features.</p>"
+          "documentation":"<p>The settings for automated responses and notification templates for adaptive authentication with threat protection.</p>"
         },
         "RiskExceptionConfiguration":{
           "shape":"RiskExceptionConfigurationType",
@@ -7494,7 +7826,7 @@
           "documentation":"<p>The date and time when the item was modified. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>The settings of risk configuration for threat protection with advanced security features in a user pool.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a>.</p>"
+      "documentation":"<p>The settings of risk configuration for threat protection with threat protection in a user pool.</p>"
     },
     "RiskDecisionType":{
       "type":"string",
@@ -7516,7 +7848,7 @@
           "documentation":"<p>An always-allow IP address list. Risk detection isn't performed on the IP addresses in this range list. This parameter is displayed and set in CIDR notation.</p>"
         }
       },
-      "documentation":"<p>Exceptions to the risk evaluation configuration, including always-allow and always-block IP address ranges. </p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html\">SetRiskConfiguration</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html\">DescribeRiskConfiguration</a>.</p>"
+      "documentation":"<p>Exceptions to the risk evaluation configuration, including always-allow and always-block IP address ranges. </p>"
     },
     "RiskLevelType":{
       "type":"string",
@@ -7543,10 +7875,10 @@
       "members":{
         "BucketArn":{
           "shape":"S3ArnType",
-          "documentation":"<p>The ARN of an Amazon S3 bucket that's the destination for advanced security features log export.</p>"
+          "documentation":"<p>The ARN of an Amazon S3 bucket that's the destination for threat protection log export.</p>"
         }
       },
-      "documentation":"<p>Configuration for the Amazon S3 bucket destination of user activity log export with advanced security features.</p>"
+      "documentation":"<p>Configuration for the Amazon S3 bucket destination of user activity log export with threat protection.</p>"
     },
     "SESConfigurationSet":{
       "type":"string",
@@ -7566,7 +7898,7 @@
           "documentation":"<p>Specifies whether SMS is the preferred MFA method. If true, your user pool prompts the specified user for a code delivered by SMS message after username-password sign-in succeeds. </p>"
         }
       },
-      "documentation":"<p>A user's preference for using SMS message multi-factor authentication (MFA). Turns SMS MFA on and off, and can set SMS as preferred when other MFA options are available. You can't turn off SMS MFA for any of your users when MFA is required in your user pool; you can only set the type that your user prefers. </p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html\">SetUserMFAPreference</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html\">AdminSetUserMFAPreference</a>. </p>"
+      "documentation":"<p>A user's preference for using SMS message multi-factor authentication (MFA). Turns SMS MFA on and off, and can set SMS as preferred when other MFA options are available. You can't turn off SMS MFA for any of your users when MFA is required in your user pool; you can only set the type that your user prefers. </p>"
     },
     "SchemaAttributeType":{
       "type":"structure",
@@ -7603,7 +7935,7 @@
           "documentation":"<p>Specifies the constraints for an attribute of the string type.</p>"
         }
       },
-      "documentation":"<p>A list of the user attributes and their properties in your user pool. The attribute schema contains standard attributes, custom attributes with a <code>custom:</code> prefix, and developer attributes with a <code>dev:</code> prefix. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html\">User pool attributes</a>.</p> <p>Developer-only <code>dev:</code> attributes are a legacy feature of user pools, and are read-only to all app clients. You can create and update developer-only attributes only with IAM-authenticated API operations. Use app client read/write permissions instead.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>A list of the user attributes and their properties in your user pool. The attribute schema contains standard attributes, custom attributes with a <code>custom:</code> prefix, and developer attributes with a <code>dev:</code> prefix. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html\">User pool attributes</a>.</p> <p>Developer-only <code>dev:</code> attributes are a legacy feature of user pools, and are read-only to all app clients. You can create and update developer-only attributes only with IAM-authenticated API operations. Use app client read/write permissions instead.</p>"
     },
     "SchemaAttributesListType":{
       "type":"list",
@@ -7680,7 +8012,7 @@
       "members":{
         "LogDeliveryConfiguration":{
           "shape":"LogDeliveryConfigurationType",
-          "documentation":"<p>The detailed activity logging configuration that you applied to the requested user pool.</p>"
+          "documentation":"<p>The logging configuration that you applied to the requested user pool.</p>"
         }
       }
     },
@@ -7690,23 +8022,23 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID. </p>"
+          "documentation":"<p>The ID of the user pool where you want to set a risk configuration. If you include <code>UserPoolId</code> in your request, don't include <code>ClientId</code>. When the client ID is null, the same risk configuration is applied to all the clients in the userPool. When you include both <code>ClientId</code> and <code>UserPoolId</code>, Amazon Cognito maps the configuration to the app client only.</p>"
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The app client ID. If <code>ClientId</code> is null, then the risk configuration is mapped to <code>userPoolId</code>. When the client ID is null, the same risk configuration is applied to all the clients in the userPool.</p> <p>Otherwise, <code>ClientId</code> is mapped to the client. When the client ID isn't null, the user pool configuration is overridden and the risk configuration for the client is used instead.</p>"
+          "documentation":"<p>The ID of the app client where you want to set a risk configuration. If <code>ClientId</code> is null, then the risk configuration is mapped to <code>UserPoolId</code>. When the client ID is null, the same risk configuration is applied to all the clients in the userPool.</p> <p>When you include a <code>ClientId</code> parameter, Amazon Cognito maps the configuration to the app client. When you include both <code>ClientId</code> and <code>UserPoolId</code>, Amazon Cognito maps the configuration to the app client only.</p>"
         },
         "CompromisedCredentialsRiskConfiguration":{
           "shape":"CompromisedCredentialsRiskConfigurationType",
-          "documentation":"<p>The compromised credentials risk configuration.</p>"
+          "documentation":"<p>The configuration of automated reactions to detected compromised credentials. Includes settings for blocking future sign-in requests and for the types of password-submission events you want to monitor.</p>"
         },
         "AccountTakeoverRiskConfiguration":{
           "shape":"AccountTakeoverRiskConfigurationType",
-          "documentation":"<p>The account takeover risk configuration.</p>"
+          "documentation":"<p>The settings for automated responses and notification templates for adaptive authentication with threat protection.</p>"
         },
         "RiskExceptionConfiguration":{
           "shape":"RiskExceptionConfigurationType",
-          "documentation":"<p>The configuration to override the risk decision.</p>"
+          "documentation":"<p>A set of IP-address overrides to threat protection. You can set up IP-address always-block and always-allow lists.</p>"
         }
       }
     },
@@ -7716,7 +8048,7 @@
       "members":{
         "RiskConfiguration":{
           "shape":"RiskConfigurationType",
-          "documentation":"<p>The risk configuration.</p>"
+          "documentation":"<p>The API response that contains the risk configuration that you set and the timestamp of the most recent change.</p>"
         }
       }
     },
@@ -7726,19 +8058,19 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool where you want to apply branding to the classic hosted UI.</p>"
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The client ID for the client app.</p>"
+          "documentation":"<p>The ID of the app client that you want to customize. To apply a default style to all app clients not configured with client-level branding, set this parameter value to <code>ALL</code>.</p>"
         },
         "CSS":{
           "shape":"CSSType",
-          "documentation":"<p>The CSS values in the UI customization.</p>"
+          "documentation":"<p>A plaintext CSS file that contains the custom fields that you want to apply to your user pool or app client. To download a template, go to the Amazon Cognito console. Navigate to your user pool <i>App clients</i> tab, select <i>Login pages</i>, edit <i>Hosted UI (classic) style</i>, and select the link to <code>CSS template.css</code>.</p>"
         },
         "ImageFile":{
           "shape":"ImageFileType",
-          "documentation":"<p>The uploaded logo image for the UI customization.</p>"
+          "documentation":"<p>The image that you want to set as your login in the classic hosted UI, as a Base64-formatted binary object.</p>"
         }
       }
     },
@@ -7748,7 +8080,7 @@
       "members":{
         "UICustomization":{
           "shape":"UICustomizationType",
-          "documentation":"<p>The UI customization information.</p>"
+          "documentation":"<p>Information about the hosted UI branding that you applied.</p>"
         }
       }
     },
@@ -7762,22 +8094,21 @@
         },
         "SoftwareTokenMfaSettings":{
           "shape":"SoftwareTokenMfaSettingsType",
-          "documentation":"<p>User preferences for time-based one-time password (TOTP) MFA. Activates or deactivates TOTP MFA and sets it as the preferred MFA method when multiple methods are available.</p>"
+          "documentation":"<p>User preferences for time-based one-time password (TOTP) MFA. Activates or deactivates TOTP MFA and sets it as the preferred MFA method when multiple methods are available. Users must register a TOTP authenticator before they set this as their preferred MFA method.</p>"
         },
         "EmailMfaSettings":{
           "shape":"EmailMfaSettingsType",
-          "documentation":"<p>User preferences for email message MFA. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>User preferences for email message MFA. Activates or deactivates email MFA and sets it as the preferred MFA method when multiple methods are available. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
         },
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose MFA preference you want to set.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       }
     },
     "SetUserMFAPreferenceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SetUserPoolMfaConfigRequest":{
       "type":"structure",
@@ -7797,15 +8128,15 @@
         },
         "EmailMfaConfiguration":{
           "shape":"EmailMfaConfigType",
-          "documentation":"<p>Configures user pool email messages for MFA. Sets the subject and body of the email message template for MFA messages. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>Sets configuration for user pool email message MFA and sign-in with one-time passwords (OTPs). Includes the subject and body of the email message template for sign-in and MFA messages. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
         },
         "MfaConfiguration":{
           "shape":"UserPoolMfaType",
-          "documentation":"<p>The MFA configuration. If you set the MfaConfiguration value to ‘ON’, only users who have set up an MFA factor can sign in. To learn more, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html\">Adding Multi-Factor Authentication (MFA) to a user pool</a>. Valid values include:</p> <ul> <li> <p> <code>OFF</code> MFA won't be used for any users.</p> </li> <li> <p> <code>ON</code> MFA is required for all users to sign in.</p> </li> <li> <p> <code>OPTIONAL</code> MFA will be required only for individual users who have an MFA factor activated.</p> </li> </ul>"
+          "documentation":"<p>Sets multi-factor authentication (MFA) to be on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p> <p>When <code>MfaConfiguration</code> is <code>OPTIONAL</code>, managed login doesn't automatically prompt users to set up MFA. Amazon Cognito generates MFA prompts in API responses and in managed login for users who have chosen and configured a preferred MFA factor.</p>"
         },
         "WebAuthnConfiguration":{
           "shape":"WebAuthnConfigurationType",
-          "documentation":"<p>The configuration of your user pool for passkey, or webauthN, authentication and registration. You can set this configuration independent of the MFA configuration options in this operation.</p>"
+          "documentation":"<p>The configuration of your user pool for passkey, or WebAuthn, authentication and registration. You can set this configuration independent of the MFA configuration options in this operation.</p>"
         }
       }
     },
@@ -7814,7 +8145,7 @@
       "members":{
         "SmsMfaConfiguration":{
           "shape":"SmsMfaConfigType",
-          "documentation":"<p>Shows user pool SMS message configuration for MFA. Includes the message template and the SMS message sending configuration for Amazon SNS.</p>"
+          "documentation":"<p>Shows user pool SMS message configuration for MFA and sign-in with SMS-message OTPs. Includes the message template and the SMS message sending configuration for Amazon SNS.</p>"
         },
         "SoftwareTokenMfaConfiguration":{
           "shape":"SoftwareTokenMfaConfigType",
@@ -7822,15 +8153,15 @@
         },
         "EmailMfaConfiguration":{
           "shape":"EmailMfaConfigType",
-          "documentation":"<p>Shows user pool email message configuration for MFA. Includes the subject and body of the email message template for MFA messages. To activate this setting, <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\"> advanced security features</a> must be active in your user pool.</p>"
+          "documentation":"<p>Shows configuration for user pool email message MFA and sign-in with one-time passwords (OTPs). Includes the subject and body of the email message template for sign-in and MFA messages. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
         },
         "MfaConfiguration":{
           "shape":"UserPoolMfaType",
-          "documentation":"<p>The MFA configuration. Valid values include:</p> <ul> <li> <p> <code>OFF</code> MFA won't be used for any users.</p> </li> <li> <p> <code>ON</code> MFA is required for all users to sign in.</p> </li> <li> <p> <code>OPTIONAL</code> MFA will be required only for individual users who have an MFA factor enabled.</p> </li> </ul>"
+          "documentation":"<p>Displays multi-factor authentication (MFA) as on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p> <p>When <code>MfaConfiguration</code> is <code>OPTIONAL</code>, managed login doesn't automatically prompt users to set up MFA. Amazon Cognito generates MFA prompts in API responses and in managed login for users who have chosen and configured a preferred MFA factor.</p>"
         },
         "WebAuthnConfiguration":{
           "shape":"WebAuthnConfigurationType",
-          "documentation":"<p>The configuration of your user pool for passkey, or webauthN, biometric and security-key devices.</p>"
+          "documentation":"<p>The configuration of your user pool for passkey, or WebAuthn, sign-in with authenticators like biometric and security-key devices. Includes relying-party configuration and settings for user-verification requirements.</p>"
         }
       }
     },
@@ -7843,7 +8174,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose user settings you want to configure.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "MFAOptions":{
           "shape":"MFAOptionListType",
@@ -7854,8 +8185,7 @@
     },
     "SetUserSettingsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response from the server for a set user settings request.</p>"
     },
     "SignInPolicyType":{
@@ -7866,7 +8196,7 @@
           "documentation":"<p>The sign-in methods that a user pool supports as the first factor. You can permit users to start authentication with a standard username and password, or with other one-time password and hardware factors.</p>"
         }
       },
-      "documentation":"<p>The policy for allowed types of authentication in a user pool.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The policy for allowed types of authentication in a user pool. To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p>"
     },
     "SignUpRequest":{
       "type":"structure",
@@ -7877,7 +8207,7 @@
       "members":{
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The ID of the client associated with the user pool.</p>"
+          "documentation":"<p>The ID of the app client where the user wants to sign up.</p>"
         },
         "SecretHash":{
           "shape":"SecretHashType",
@@ -7889,27 +8219,27 @@
         },
         "Password":{
           "shape":"PasswordType",
-          "documentation":"<p>The password of the user you want to register.</p> <p>Users can sign up without a password when your user pool supports passwordless sign-in with email or SMS OTPs. To create a user with no password, omit this parameter or submit a blank value. You can only create a passwordless user when passwordless sign-in is available. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignInPolicyType.html\">the SignInPolicyType</a> property of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>.</p>"
+          "documentation":"<p>The user's proposed password. The password must comply with the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users-passwords.html\">password requirements</a> of your user pool.</p> <p>Users can sign up without a password when your user pool supports passwordless sign-in with email or SMS OTPs. To create a user with no password, omit this parameter or submit a blank value. You can only create a passwordless user when passwordless sign-in is available.</p>"
         },
         "UserAttributes":{
           "shape":"AttributeListType",
-          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p>"
+          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>For custom attributes, include a <code>custom:</code> prefix in the attribute name, for example <code>custom:department</code>.</p>"
         },
         "ValidationData":{
           "shape":"AttributeListType",
-          "documentation":"<p>Temporary user attributes that contribute to the outcomes of your pre sign-up Lambda trigger. This set of key-value pairs are for custom validation of information that you collect from your users but don't need to retain.</p> <p>Your Lambda function can analyze this additional data and act on it. Your function might perform external API operations like logging user attributes and validation data to Amazon CloudWatch Logs. Validation data might also affect the response that your function returns to Amazon Cognito, like automatically confirming the user if they sign up from within your network.</p> <p>For more information about the pre sign-up Lambda trigger, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html\">Pre sign-up Lambda trigger</a>.</p>"
+          "documentation":"<p>Temporary user attributes that contribute to the outcomes of your pre sign-up Lambda trigger. This set of key-value pairs are for custom validation of information that you collect from your users but don't need to retain.</p> <p>Your Lambda function can analyze this additional data and act on it. Your function can automatically confirm and verify select users or perform external API operations like logging user attributes and validation data to Amazon CloudWatch Logs.</p> <p>For more information about the pre sign-up Lambda trigger, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html\">Pre sign-up Lambda trigger</a>.</p>"
         },
         "AnalyticsMetadata":{
           "shape":"AnalyticsMetadataType",
-          "documentation":"<p>The Amazon Pinpoint analytics metadata that contributes to your metrics for <code>SignUp</code> calls.</p>"
+          "documentation":"<p>Information that supports analytics outcomes with Amazon Pinpoint, including the user's endpoint ID. The endpoint ID is a destination for Amazon Pinpoint push notifications, for example a device identifier, email address, or phone number.</p>"
         },
         "UserContextData":{
           "shape":"UserContextDataType",
-          "documentation":"<p>Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
+          "documentation":"<p>Contextual data about your user session like the device fingerprint, IP address, or location. Amazon Cognito threat protection evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-viewing-threat-protection-app.html\">Collecting data for threat protection in applications</a>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the SignUp API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>pre sign-up</i>, <i>custom message</i>, and <i>post confirmation</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your SignUp request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers.</p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the SignUp API action, Amazon Cognito invokes any functions that are assigned to the following triggers: <i>pre sign-up</i>, <i>custom message</i>, and <i>post confirmation</i>. When Amazon Cognito invokes any of these functions, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your SignUp request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to register a user.</p>"
@@ -7923,15 +8253,15 @@
       "members":{
         "UserConfirmed":{
           "shape":"BooleanType",
-          "documentation":"<p>A response from the server indicating that a user registration has been confirmed.</p>"
+          "documentation":"<p>Indicates whether the user was automatically confirmed. You can auto-confirm users with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html\">pre sign-up Lambda trigger</a>.</p>"
         },
         "CodeDeliveryDetails":{
           "shape":"CodeDeliveryDetailsType",
-          "documentation":"<p>The code delivery details returned by the server response to the user registration request.</p>"
+          "documentation":"<p>In user pools that automatically verify and confirm new users, Amazon Cognito sends users a message with a code or link that confirms ownership of the phone number or email address that they entered. The <code>CodeDeliveryDetails</code> object is information about the delivery destination for that link or code.</p>"
         },
         "UserSub":{
           "shape":"StringType",
-          "documentation":"<p>The 128-bit ID of the authenticated user. This isn't the same as <code>username</code>.</p>"
+          "documentation":"<p>The unique identifier of the new user, for example <code>a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>.</p>"
         },
         "Session":{
           "shape":"SessionType",
@@ -7962,7 +8292,7 @@
           "documentation":"<p>The Amazon Web Services Region to use with Amazon SNS integration. You can choose the same Region as your user pool, or a supported <b>Legacy Amazon SNS alternate Region</b>. </p> <p> Amazon Cognito resources in the Asia Pacific (Seoul) Amazon Web Services Region must use your Amazon SNS configuration in the Asia Pacific (Tokyo) Region. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\">SMS message settings for Amazon Cognito user pools</a>.</p>"
         }
       },
-      "documentation":"<p>User pool configuration for delivery of SMS messages with Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>.</p>"
+      "documentation":"<p>User pool configuration for delivery of SMS messages with Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account.</p>"
     },
     "SmsInviteMessageType":{
       "type":"string",
@@ -7982,7 +8312,7 @@
           "documentation":"<p>User pool configuration for delivery of SMS messages with Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account.</p> <p>You can set <code>SmsConfiguration</code> in <code>CreateUserPool</code> and <code> UpdateUserPool</code>, or in <code>SetUserPoolMfaConfig</code>.</p>"
         }
       },
-      "documentation":"<p>The configuration of multi-factor authentication (MFA) with SMS messages in a user pool.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>.</p>"
+      "documentation":"<p>The configuration of multi-factor authentication (MFA) with SMS messages in a user pool.</p>"
     },
     "SmsVerificationMessageType":{
       "type":"string",
@@ -8013,7 +8343,7 @@
           "documentation":"<p>The activation state of TOTP MFA.</p>"
         }
       },
-      "documentation":"<p>Settings for time-based one-time password (TOTP) multi-factor authentication (MFA) in a user pool. Enables and disables availability of this feature.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>. </p>"
+      "documentation":"<p>Settings for time-based one-time password (TOTP) multi-factor authentication (MFA) in a user pool. Enables and disables availability of this feature.</p>"
     },
     "SoftwareTokenMfaSettingsType":{
       "type":"structure",
@@ -8027,7 +8357,7 @@
           "documentation":"<p>Specifies whether software token MFA is the preferred MFA method.</p>"
         }
       },
-      "documentation":"<p>A user's preference for using time-based one-time password (TOTP) multi-factor authentication (MFA). Turns TOTP MFA on and off, and can set TOTP as preferred when other MFA options are available. You can't turn off TOTP MFA for any of your users when MFA is required in your user pool; you can only set the type that your user prefers. </p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html\">SetUserMFAPreference</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html\">AdminSetUserMFAPreference</a>. </p>"
+      "documentation":"<p>A user's preference for using time-based one-time password (TOTP) multi-factor authentication (MFA). Turns TOTP MFA on and off, and can set TOTP as preferred when other MFA options are available. You can't turn off TOTP MFA for any of your users when MFA is required in your user pool; you can only set the type that your user prefers. </p>"
     },
     "StartUserImportJobRequest":{
       "type":"structure",
@@ -8038,11 +8368,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that the users are being imported into.</p>"
+          "documentation":"<p>The ID of the user pool that you want to start importing users into.</p>"
         },
         "JobId":{
           "shape":"UserImportJobIdType",
-          "documentation":"<p>The job ID for the user import job.</p>"
+          "documentation":"<p>The ID of a user import job that you previously created.</p>"
         }
       },
       "documentation":"<p>Represents the request to start the user import job.</p>"
@@ -8052,7 +8382,7 @@
       "members":{
         "UserImportJob":{
           "shape":"UserImportJobType",
-          "documentation":"<p>The job object that represents the user import job.</p>"
+          "documentation":"<p>The details of the user import job. Includes logging destination, status, and the Amazon S3 pre-signed URL for CSV upload.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to start the user import job.</p>"
@@ -8063,7 +8393,7 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose passkey metadata you want to generate.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         }
       }
     },
@@ -8093,11 +8423,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that the users are being imported into.</p>"
+          "documentation":"<p>The ID of the user pool that you want to stop.</p>"
         },
         "JobId":{
           "shape":"UserImportJobIdType",
-          "documentation":"<p>The job ID for the user import job.</p>"
+          "documentation":"<p>The ID of a running user import job.</p>"
         }
       },
       "documentation":"<p>Represents the request to stop the user import job.</p>"
@@ -8107,7 +8437,7 @@
       "members":{
         "UserImportJob":{
           "shape":"UserImportJobType",
-          "documentation":"<p>The job object that represents the user import job.</p>"
+          "documentation":"<p>The details of the user import job. Includes logging destination, status, and the Amazon S3 pre-signed URL for CSV upload.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to stop the user import job.</p>"
@@ -8124,7 +8454,7 @@
           "documentation":"<p>The maximum length of a string attribute value. Must be a number less than or equal to <code>2^1023</code>, represented as a string with a length of 131072 characters or fewer.</p>"
         }
       },
-      "documentation":"<p>The minimum and maximum length values of an attribute that is of the string type, for example <code>custom:department</code>.</p> <p>This data type is part of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SchemaAttributeType.html\">SchemaAttributeType</a>. It defines the length constraints on string-type attributes that you configure in <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and displays the length constraints of all string-type attributes in the response to <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a> </p>"
+      "documentation":"<p>The minimum and maximum length values of an attribute that is of the string type, for example <code>custom:department</code>.</p>"
     },
     "StringType":{
       "type":"string",
@@ -8153,14 +8483,13 @@
         },
         "Tags":{
           "shape":"UserPoolTagsType",
-          "documentation":"<p>The tags to assign to the user pool.</p>"
+          "documentation":"<p>An array of tag keys and values that you want to assign to the user pool.</p>"
         }
       }
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValueType":{
       "type":"string",
@@ -8172,6 +8501,120 @@
       "max":365,
       "min":0
     },
+    "TermsDescriptionListType":{
+      "type":"list",
+      "member":{"shape":"TermsDescriptionType"}
+    },
+    "TermsDescriptionType":{
+      "type":"structure",
+      "required":[
+        "TermsId",
+        "TermsName",
+        "Enforcement",
+        "CreationDate",
+        "LastModifiedDate"
+      ],
+      "members":{
+        "TermsId":{
+          "shape":"TermsIdType",
+          "documentation":"<p>The ID of the requested terms documents.</p>"
+        },
+        "TermsName":{
+          "shape":"TermsNameType",
+          "documentation":"<p>The type and friendly name of the requested terms documents.</p>"
+        },
+        "Enforcement":{
+          "shape":"TermsEnforcementType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts one value.</p>"
+        },
+        "CreationDate":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
+        },
+        "LastModifiedDate":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time when the item was modified. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
+        }
+      },
+      "documentation":"<p>The details of a set of terms documents. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-terms-documents\">Terms documents</a>.</p>"
+    },
+    "TermsEnforcementType":{
+      "type":"string",
+      "enum":["NONE"]
+    },
+    "TermsExistsException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"MessageType"}
+      },
+      "documentation":"<p>Terms document names must be unique to the app client. This exception is thrown when you attempt to create terms documents with a duplicate <code>TermsName</code>.</p>",
+      "exception":true
+    },
+    "TermsIdType":{
+      "type":"string",
+      "pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[4][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
+    },
+    "TermsNameType":{
+      "type":"string",
+      "pattern":"^(terms-of-use|privacy-policy)$"
+    },
+    "TermsSourceType":{
+      "type":"string",
+      "enum":["LINK"]
+    },
+    "TermsType":{
+      "type":"structure",
+      "required":[
+        "TermsId",
+        "UserPoolId",
+        "ClientId",
+        "TermsName",
+        "TermsSource",
+        "Enforcement",
+        "Links",
+        "CreationDate",
+        "LastModifiedDate"
+      ],
+      "members":{
+        "TermsId":{
+          "shape":"TermsIdType",
+          "documentation":"<p>The ID of the terms documents.</p>"
+        },
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool that contains the terms documents.</p>"
+        },
+        "ClientId":{
+          "shape":"ClientIdType",
+          "documentation":"<p>The ID of the app client that the terms documents are assigned to.</p>"
+        },
+        "TermsName":{
+          "shape":"TermsNameType",
+          "documentation":"<p>The type and friendly name of the terms documents.</p>"
+        },
+        "TermsSource":{
+          "shape":"TermsSourceType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts one value.</p>"
+        },
+        "Enforcement":{
+          "shape":"TermsEnforcementType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts one value.</p>"
+        },
+        "Links":{
+          "shape":"LinksType",
+          "documentation":"<p>A map of URLs to languages. For each localized language that will view the requested <code>TermsName</code>, assign a URL. A selection of <code>cognito:default</code> displays for all languages that don't have a language-specific URL.</p> <p>For example, <code>\"cognito:default\": \"https://terms.example.com\", \"cognito:spanish\": \"https://terms.example.com/es\"</code>.</p>"
+        },
+        "CreationDate":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
+        },
+        "LastModifiedDate":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time when the item was modified. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
+        }
+      },
+      "documentation":"<p>The details of a set of terms documents. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-terms-documents\">Terms documents</a>.</p>"
+    },
     "TierChangeNotAllowedException":{
       "type":"structure",
       "members":{
@@ -8210,7 +8653,7 @@
           "documentation":"<p>A time unit for the value that you set in the <code>RefreshTokenValidity</code> parameter. The default <code>RefreshTokenValidity</code> time unit is <code>days</code>. <code>RefreshTokenValidity</code> duration can range from 60 minutes to 10 years.</p>"
         }
       },
-      "documentation":"<p>The time units that, with <code>IdTokenValidity</code>, <code>AccessTokenValidity</code>, and <code>RefreshTokenValidity</code>, set and display the duration of ID, access, and refresh tokens for an app client. You can assign a separate token validity unit to each type of token. </p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html\">CreateUserPoolClient</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html\">UpdateUserPoolClient</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">DescribeUserPoolClient</a>.</p>"
+      "documentation":"<p>The time units that, with <code>IdTokenValidity</code>, <code>AccessTokenValidity</code>, and <code>RefreshTokenValidity</code>, set and display the duration of ID, access, and refresh tokens for an app client. You can assign a separate token validity unit to each type of token. </p>"
     },
     "TooManyFailedAttemptsException":{
       "type":"structure",
@@ -8251,7 +8694,7 @@
         },
         "CSS":{
           "shape":"CSSType",
-          "documentation":"<p>The CSS values in the UI customization. To get a template with your UI customization options, make a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUiCustomization.html\">GetUiCustomization</a> request.</p>"
+          "documentation":"<p>The CSS values in the UI customization.</p>"
         },
         "CSSVersion":{
           "shape":"CSSVersionType",
@@ -8266,7 +8709,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>A container for the UI customization information for the hosted UI in a user pool.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">GetUICustomization</a>.</p>"
+      "documentation":"<p>A container for the UI customization information for the hosted UI in a user pool.</p>"
     },
     "UnauthorizedException":{
       "type":"structure",
@@ -8335,14 +8778,13 @@
         },
         "TagKeys":{
           "shape":"UserPoolTagsListType",
-          "documentation":"<p>The keys of the tags to remove from the user pool.</p>"
+          "documentation":"<p>An array of tag keys that you want to remove from the user pool.</p>"
         }
       }
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAuthEventFeedbackRequest":{
       "type":"structure",
@@ -8356,30 +8798,29 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The ID of the user pool where you want to update auth event feedback.</p>"
         },
         "Username":{
           "shape":"UsernameType",
-          "documentation":"<p>The username of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
+          "documentation":"<p>The name of the user that you want to query or modify. The value of this parameter is typically your user's username, but it can be any of their alias attributes. If <code>username</code> isn't an alias attribute in your user pool, this value must be the <code>sub</code> of a local user or the username of a user from a third-party IdP.</p>"
         },
         "EventId":{
           "shape":"EventIdType",
-          "documentation":"<p>The event ID.</p>"
+          "documentation":"<p>The ID of the authentication event that you want to submit feedback for.</p>"
         },
         "FeedbackToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>The feedback token.</p>"
+          "documentation":"<p>The feedback token, an encrypted object generated by Amazon Cognito and passed to your user in the notification email message from the event.</p>"
         },
         "FeedbackValue":{
           "shape":"FeedbackValueType",
-          "documentation":"<p>The authentication event feedback value. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
+          "documentation":"<p>Your feedback to the authentication event. When you provide a <code>FeedbackValue</code> value of <code>valid</code>, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a <code>FeedbackValue</code> value of <code>invalid</code>, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level.</p>"
         }
       }
     },
     "UpdateAuthEventFeedbackResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDeviceStatusRequest":{
       "type":"structure",
@@ -8390,23 +8831,22 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose device status you want to update.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "DeviceKey":{
           "shape":"DeviceKeyType",
-          "documentation":"<p>The device key.</p>"
+          "documentation":"<p>The device key of the device you want to update, for example <code>us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111</code>.</p>"
         },
         "DeviceRememberedStatus":{
           "shape":"DeviceRememberedStatusType",
-          "documentation":"<p>The status of whether a device is remembered.</p>"
+          "documentation":"<p>To enable device authentication with the specified device, set to <code>remembered</code>.To disable, set to <code>not_remembered</code>.</p>"
         }
       },
       "documentation":"<p>Represents the request to update the device status.</p>"
     },
     "UpdateDeviceStatusResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response to the request to update the device status.</p>"
     },
     "UpdateGroupRequest":{
@@ -8418,23 +8858,23 @@
       "members":{
         "GroupName":{
           "shape":"GroupNameType",
-          "documentation":"<p>The name of the group.</p>"
+          "documentation":"<p>The name of the group that you want to update.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool that contains the group you want to update.</p>"
         },
         "Description":{
           "shape":"DescriptionType",
-          "documentation":"<p>A string containing the new description of the group.</p>"
+          "documentation":"<p>A new description of the existing group.</p>"
         },
         "RoleArn":{
           "shape":"ArnType",
-          "documentation":"<p>The new role Amazon Resource Name (ARN) for the group. This is used for setting the <code>cognito:roles</code> and <code>cognito:preferred_role</code> claims in the token.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that you want to associate with the group. The role assignment contributes to the <code>cognito:roles</code> and <code>cognito:preferred_role</code> claims in group members' tokens.</p>"
         },
         "Precedence":{
           "shape":"PrecedenceType",
-          "documentation":"<p>The new precedence value for the group. For more information about this parameter, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateGroup.html\">CreateGroup</a>.</p>"
+          "documentation":"<p>A non-negative integer value that specifies the precedence of this group relative to the other groups that a user can belong to in the user pool. Zero is the highest precedence value. Groups with lower <code>Precedence</code> values take precedence over groups with higher or null <code>Precedence</code> values. If a user belongs to two or more groups, it is the group with the lowest precedence value whose role ARN is given in the user's tokens for the <code>cognito:roles</code> and <code>cognito:preferred_role</code> claims.</p> <p>Two groups can have the same <code>Precedence</code> value. If this happens, neither group takes precedence over the other. If two groups with the same <code>Precedence</code> have the same role ARN, that role is used in the <code>cognito:preferred_role</code> claim in tokens for users in each group. If the two groups have different role ARNs, the <code>cognito:preferred_role</code> claim isn't set in users' tokens.</p> <p>The default <code>Precedence</code> value is null. The maximum <code>Precedence</code> value is <code>2^31-1</code>.</p>"
         }
       }
     },
@@ -8443,7 +8883,7 @@
       "members":{
         "Group":{
           "shape":"GroupType",
-          "documentation":"<p>The group object for the group.</p>"
+          "documentation":"<p>Contains the updated details of the group, including precedence, IAM role, and description.</p>"
         }
       }
     },
@@ -8456,11 +8896,11 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The user pool ID.</p>"
+          "documentation":"<p>The Id of the user pool where you want to update your IdP.</p>"
         },
         "ProviderName":{
           "shape":"ProviderNameType",
-          "documentation":"<p>The IdP name.</p>"
+          "documentation":"<p>The name of the IdP that you want to update. You can pass the identity provider name in the <code>identity_provider</code> query parameter of requests to the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html\">Authorize endpoint</a> to silently redirect to sign-in with the associated IdP.</p>"
         },
         "ProviderDetails":{
           "shape":"ProviderDetailsType",
@@ -8468,11 +8908,11 @@
         },
         "AttributeMapping":{
           "shape":"AttributeMappingType",
-          "documentation":"<p>The IdP attribute mapping to be changed.</p>"
+          "documentation":"<p>A mapping of IdP attributes to standard and custom user pool attributes. Specify a user pool attribute as the key of the key-value pair, and the IdP attribute claim name as the value.</p>"
         },
         "IdpIdentifiers":{
           "shape":"IdpIdentifiersListType",
-          "documentation":"<p>A list of IdP identifiers.</p>"
+          "documentation":"<p>An array of IdP identifiers, for example <code>\"IdPIdentifiers\": [ \"MyIdP\", \"MyIdP2\" ]</code>. Identifiers are friendly names that you can pass in the <code>idp_identifier</code> query parameter of requests to the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html\">Authorize endpoint</a> to silently redirect to sign-in with the associated IdP. Identifiers in a domain format also enable the use of <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managing-saml-idp-naming.html\">email-address matching with SAML providers</a>. </p>"
         }
       }
     },
@@ -8499,11 +8939,11 @@
         },
         "UseCognitoProvidedValues":{
           "shape":"BooleanType",
-          "documentation":"<p>When true, applies the default branding style options. This option reverts to default style options that are managed by Amazon Cognito. You can modify them later in the branding designer.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
+          "documentation":"<p>When <code>true</code>, applies the default branding style options. This option reverts to default style options that are managed by Amazon Cognito. You can modify them later in the branding editor.</p> <p>When you specify <code>true</code> for this option, you must also omit values for <code>Settings</code> and <code>Assets</code> in the request.</p>"
         },
         "Settings":{
           "shape":"Document",
-          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p>"
+          "documentation":"<p>A JSON file, encoded as a <code>Document</code> type, with the the settings that you want to apply to your style.</p> <p>The following components are not currently implemented and reserved for future use:</p> <ul> <li> <p> <code>signUp</code> </p> </li> <li> <p> <code>instructions</code> </p> </li> <li> <p> <code>sessionTimerDisplay</code> </p> </li> <li> <p> <code>languageSelector</code> (for localization, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html#managed-login-localization\">Managed login localization)</a> </p> </li> </ul>"
         },
         "Assets":{
           "shape":"AssetListType",
@@ -8530,7 +8970,7 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool.</p>"
+          "documentation":"<p>The ID of the user pool that contains the resource server that you want to update.</p>"
         },
         "Identifier":{
           "shape":"ResourceServerIdentifierType",
@@ -8538,11 +8978,11 @@
         },
         "Name":{
           "shape":"ResourceServerNameType",
-          "documentation":"<p>The name of the resource server.</p>"
+          "documentation":"<p>The updated name of the resource server.</p>"
         },
         "Scopes":{
           "shape":"ResourceServerScopeListType",
-          "documentation":"<p>The scope values to be set for the resource server.</p>"
+          "documentation":"<p>An array of updated custom scope names and descriptions that you want to associate with your resource server.</p>"
         }
       }
     },
@@ -8552,7 +8992,49 @@
       "members":{
         "ResourceServer":{
           "shape":"ResourceServerType",
-          "documentation":"<p>The resource server.</p>"
+          "documentation":"<p>The updated details of the requested resource server.</p>"
+        }
+      }
+    },
+    "UpdateTermsRequest":{
+      "type":"structure",
+      "required":[
+        "TermsId",
+        "UserPoolId"
+      ],
+      "members":{
+        "TermsId":{
+          "shape":"TermsIdType",
+          "documentation":"<p>The ID of the terms document that you want to update.</p>"
+        },
+        "UserPoolId":{
+          "shape":"UserPoolIdType",
+          "documentation":"<p>The ID of the user pool that contains the terms that you want to update.</p>"
+        },
+        "TermsName":{
+          "shape":"TermsNameType",
+          "documentation":"<p>The new name that you want to apply to the requested terms documents.</p>"
+        },
+        "TermsSource":{
+          "shape":"TermsSourceType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts only one value.</p>"
+        },
+        "Enforcement":{
+          "shape":"TermsEnforcementType",
+          "documentation":"<p>This parameter is reserved for future use and currently accepts only one value.</p>"
+        },
+        "Links":{
+          "shape":"LinksType",
+          "documentation":"<p>A map of URLs to languages. For each localized language that will view the requested <code>TermsName</code>, assign a URL. A selection of <code>cognito:default</code> displays for all languages that don't have a language-specific URL.</p> <p>For example, <code>\"cognito:default\": \"https://terms.example.com\", \"cognito:spanish\": \"https://terms.example.com/es\"</code>.</p>"
+        }
+      }
+    },
+    "UpdateTermsResponse":{
+      "type":"structure",
+      "members":{
+        "Terms":{
+          "shape":"TermsType",
+          "documentation":"<p>A summary of the updates to your terms documents.</p>"
         }
       }
     },
@@ -8565,15 +9047,15 @@
       "members":{
         "UserAttributes":{
           "shape":"AttributeListType",
-          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>For custom attributes, you must prepend the <code>custom:</code> prefix to the attribute name.</p> <p>If you have set an attribute to require verification before Amazon Cognito updates its value, this request doesn’t immediately update the value of that attribute. After your user receives and responds to a verification message to verify the new value, Amazon Cognito updates the attribute value. Your user can sign in and receive messages with the original attribute value until they verify the new value.</p>"
+          "documentation":"<p>An array of name-value pairs representing user attributes.</p> <p>For custom attributes, you must add a <code>custom:</code> prefix to the attribute name.</p> <p>If you have set an attribute to require verification before Amazon Cognito updates its value, this request doesn’t immediately update the value of that attribute. After your user receives and responds to a verification message to verify the new value, Amazon Cognito updates the attribute value. Your user can sign in and receive messages with the original attribute value until they verify the new value.</p>"
         },
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose user attributes you want to update.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "ClientMetadata":{
           "shape":"ClientMetadataType",
-          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action initiates. </p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the UpdateUserAttributes API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your UpdateUserAttributes request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Customizing user pool Workflows with Lambda Triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A map of custom key-value pairs that you can provide as input for any custom workflows that this action initiates. </p> <p>You create custom workflows by assigning Lambda functions to user pool triggers. When you use the UpdateUserAttributes API action, Amazon Cognito invokes the function that is assigned to the <i>custom message</i> trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. This payload contains a <code>clientMetadata</code> attribute, which provides the data that you assigned to the ClientMetadata parameter in your UpdateUserAttributes request. In your function code in Lambda, you can process the <code>clientMetadata</code> value to enhance your workflow for your specific needs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html\"> Using Lambda triggers</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <note> <p>When you use the <code>ClientMetadata</code> parameter, note that Amazon Cognito won't do the following:</p> <ul> <li> <p>Store the <code>ClientMetadata</code> value. This data is available only to Lambda triggers that are assigned to a user pool to support custom workflows. If your user pool configuration doesn't include triggers, the <code>ClientMetadata</code> parameter serves no purpose.</p> </li> <li> <p>Validate the <code>ClientMetadata</code> value.</p> </li> <li> <p>Encrypt the <code>ClientMetadata</code> value. Don't send sensitive information in this parameter.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>Represents the request to update user attributes.</p>"
@@ -8583,7 +9065,7 @@
       "members":{
         "CodeDeliveryDetailsList":{
           "shape":"CodeDeliveryDetailsListType",
-          "documentation":"<p>The code delivery details list from the server for the request to update user attributes.</p>"
+          "documentation":"<p>When the attribute-update request includes an email address or phone number attribute, Amazon Cognito sends a message to users with a code that confirms ownership of the new value that they entered. The <code>CodeDeliveryDetails</code> object is information about the delivery destination for that link or code. This behavior happens in user pools configured to automatically verify changes to those attributes. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#verifying-when-users-change-their-email-or-phone-number\">Verifying when users change their email or phone number</a>.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server for the request to update user attributes.</p>"
@@ -8597,15 +9079,15 @@
       "members":{
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool where you want to update the user pool client.</p>"
+          "documentation":"<p>The ID of the user pool where you want to update the app client.</p>"
         },
         "ClientId":{
           "shape":"ClientIdType",
-          "documentation":"<p>The ID of the client associated with the user pool.</p>"
+          "documentation":"<p>The ID of the app client that you want to update.</p>"
         },
         "ClientName":{
           "shape":"ClientNameType",
-          "documentation":"<p>The client name from the update user pool client request.</p>"
+          "documentation":"<p>A friendly name for the app client.</p>"
         },
         "RefreshTokenValidity":{
           "shape":"RefreshTokenValidityType",
@@ -8621,67 +9103,71 @@
         },
         "TokenValidityUnits":{
           "shape":"TokenValidityUnitsType",
-          "documentation":"<p>The time units you use when you set the duration of ID, access, and refresh tokens. The default unit for RefreshToken is days, and the default for ID and access tokens is hours.</p>"
+          "documentation":"<p>The units that validity times are represented in. The default unit for refresh tokens is days, and the default for ID and access tokens are hours.</p>"
         },
         "ReadAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list. An example of this kind of activity is when your user selects a link to view their profile information. Your app makes a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html\">GetUser</a> API request to retrieve and display your user's profile data.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the Standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
         },
         "WriteAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list. An example of this kind of activity is when you present your user with a form to update their profile information and they change their last name. Your app then makes an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html\">UpdateUserAttributes</a> API request and sets <code>family_name</code> to the new value. </p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
         },
         "ExplicitAuthFlows":{
           "shape":"ExplicitAuthFlowsListType",
-          "documentation":"<p>The authentication flows that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your user client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html\">authentication flows</a> that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your app client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>. </p> </note> <p>The values for authentication flow options include the following.</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> <p>To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
         },
         "SupportedIdentityProviders":{
           "shape":"SupportedIdentityProvidersListType",
-          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This setting applies to providers that you can access with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a>. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent API-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>.</p>"
+          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This parameter sets the IdPs that <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a> will display on the login page for your app client. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent SDK-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>. </p>"
         },
         "CallbackURLs":{
           "shape":"CallbackURLsListType",
-          "documentation":"<p>A list of allowed redirect (callback) URLs for the IdPs.</p> <p>A redirect URI must:</p> <ul> <li> <p>Be an absolute URI.</p> </li> <li> <p>Be registered with the authorization server.</p> </li> <li> <p>Not include a fragment component.</p> </li> </ul> <p>See <a href=\"https://tools.ietf.org/html/rfc6749#section-3.1.2\">OAuth 2.0 - Redirection Endpoint</a>.</p> <p>Amazon Cognito requires HTTPS over HTTP except for http://localhost for testing purposes only.</p> <p>App callback URLs such as <code>myapp://example</code> are also supported.</p>"
+          "documentation":"<p>A list of allowed redirect, or callback, URLs for managed login authentication. These URLs are the paths where you want to send your users' browsers after they complete authentication with managed login or a third-party IdP. Typically, callback URLs are the home of an application that uses OAuth or OIDC libraries to process authentication outcomes.</p> <p>A redirect URI must meet the following requirements:</p> <ul> <li> <p>Be an absolute URI.</p> </li> <li> <p>Be registered with the authorization server. Amazon Cognito doesn't accept authorization requests with <code>redirect_uri</code> values that aren't in the list of <code>CallbackURLs</code> that you provide in this parameter.</p> </li> <li> <p>Not include a fragment component.</p> </li> </ul> <p>See <a href=\"https://tools.ietf.org/html/rfc6749#section-3.1.2\">OAuth 2.0 - Redirection Endpoint</a>.</p> <p>Amazon Cognito requires HTTPS over HTTP except for http://localhost for testing purposes only.</p> <p>App callback URLs such as <code>myapp://example</code> are also supported.</p>"
         },
         "LogoutURLs":{
           "shape":"LogoutURLsListType",
-          "documentation":"<p>A list of allowed logout URLs for the IdPs.</p>"
+          "documentation":"<p>A list of allowed logout URLs for managed login authentication. When you pass <code>logout_uri</code> and <code>client_id</code> parameters to <code>/logout</code>, Amazon Cognito signs out your user and redirects them to the logout URL. This parameter describes the URLs that you want to be the permitted targets of <code>logout_uri</code>. A typical use of these URLs is when a user selects \"Sign out\" and you redirect them to your public homepage. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/logout-endpoint.html\">Logout endpoint</a>.</p>"
         },
         "DefaultRedirectURI":{
           "shape":"RedirectUrlType",
-          "documentation":"<p>The default redirect URI. Must be in the <code>CallbackURLs</code> list.</p> <p>A redirect URI must:</p> <ul> <li> <p>Be an absolute URI.</p> </li> <li> <p>Be registered with the authorization server.</p> </li> <li> <p>Not include a fragment component.</p> </li> </ul> <p>See <a href=\"https://tools.ietf.org/html/rfc6749#section-3.1.2\">OAuth 2.0 - Redirection Endpoint</a>.</p> <p>Amazon Cognito requires HTTPS over HTTP except for <code>http://localhost</code> for testing purposes only.</p> <p>App callback URLs such as <code>myapp://example</code> are also supported.</p>"
+          "documentation":"<p>The default redirect URI. In app clients with one assigned IdP, replaces <code>redirect_uri</code> in authentication requests. Must be in the <code>CallbackURLs</code> list.</p>"
         },
         "AllowedOAuthFlows":{
           "shape":"OAuthFlowsType",
-          "documentation":"<p>The allowed OAuth flows.</p> <dl> <dt>code</dt> <dd> <p>Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the <code>/oauth2/token</code> endpoint.</p> </dd> <dt>implicit</dt> <dd> <p>Issue the access token (and, optionally, ID token, based on scopes) directly to your user.</p> </dd> <dt>client_credentials</dt> <dd> <p>Issue the access token from the <code>/oauth2/token</code> endpoint directly to a non-person user using a combination of the client ID and client secret.</p> </dd> </dl>"
+          "documentation":"<p>The OAuth grant types that you want your app client to generate. To create an app client that generates client credentials grants, you must add <code>client_credentials</code> as the only allowed OAuth flow.</p> <dl> <dt>code</dt> <dd> <p>Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the <code>/oauth2/token</code> endpoint.</p> </dd> <dt>implicit</dt> <dd> <p>Issue the access token (and, optionally, ID token, based on scopes) directly to your user.</p> </dd> <dt>client_credentials</dt> <dd> <p>Issue the access token from the <code>/oauth2/token</code> endpoint directly to a non-person user using a combination of the client ID and client secret.</p> </dd> </dl>"
         },
         "AllowedOAuthScopes":{
           "shape":"ScopeListType",
-          "documentation":"<p>The allowed OAuth scopes. Possible values provided by OAuth are <code>phone</code>, <code>email</code>, <code>openid</code>, and <code>profile</code>. Possible values provided by Amazon Web Services are <code>aws.cognito.signin.user.admin</code>. Custom scopes created in Resource Servers are also supported.</p>"
+          "documentation":"<p>The OAuth, OpenID Connect (OIDC), and custom scopes that you want to permit your app client to authorize access with. Scopes govern access control to user pool self-service API operations, user data from the <code>userInfo</code> endpoint, and third-party APIs. Scope values include <code>phone</code>, <code>email</code>, <code>openid</code>, and <code>profile</code>. The <code>aws.cognito.signin.user.admin</code> scope authorizes user self-service operations. Custom scopes with resource servers authorize access to external APIs.</p>"
         },
         "AllowedOAuthFlowsUserPoolClient":{
           "shape":"BooleanType",
-          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 features in your user pool app client.</p> <p> <code>AllowedOAuthFlowsUserPoolClient</code> must be <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>.</p>"
+          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 authorization server features in your app client.</p> <p>This parameter must have a value of <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use authorization server features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>. When <code>false</code>, only SDK-based API sign-in is permitted.</p>"
         },
         "AnalyticsConfiguration":{
           "shape":"AnalyticsConfigurationType",
-          "documentation":"<p>The Amazon Pinpoint analytics configuration necessary to collect metrics for this user pool.</p> <note> <p>In Amazon Web Services Regions where Amazon Pinpoint isn't available, user pools only support sending events to Amazon Pinpoint projects in us-east-1. In Regions where Amazon Pinpoint is available, user pools support sending events to Amazon Pinpoint projects within that same Region.</p> </note>"
+          "documentation":"<p>The user pool analytics configuration for collecting metrics and sending them to your Amazon Pinpoint campaign.</p> <p>In Amazon Web Services Regions where Amazon Pinpoint isn't available, user pools might not have access to analytics or might be configurable with campaigns in the US East (N. Virginia) Region. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-pinpoint-integration.html\">Using Amazon Pinpoint analytics</a>.</p>"
         },
         "PreventUserExistenceErrors":{
           "shape":"PreventUserExistenceErrorTypes",
-          "documentation":"<p>Errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Valid values include:</p> <ul> <li> <p> <code>ENABLED</code> - This prevents user existence-related errors.</p> </li> <li> <p> <code>LEGACY</code> - This represents the early behavior of Amazon Cognito where user existence related errors aren't prevented.</p> </li> </ul> <p>Defaults to <code>LEGACY</code> when you don't provide a value.</p>"
+          "documentation":"<p>When <code>ENABLED</code>, suppresses messages that might indicate a valid user exists when someone attempts sign-in. This parameters sets your preference for the errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Defaults to <code>LEGACY</code>.</p>"
         },
         "EnableTokenRevocation":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>Activates or deactivates token revocation. For more information about revoking tokens, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html\">RevokeToken</a>.</p>"
+          "documentation":"<p>Activates or deactivates <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html\">token revocation</a> in the target app client.</p>"
         },
         "EnablePropagateAdditionalUserContextData":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>Activates the propagation of additional user context data. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html\"> Adding advanced security to a user pool</a>. If you don’t include this parameter, you can't send device fingerprint information, including source IP address, to Amazon Cognito advanced security. You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret.</p>"
+          "documentation":"<p>When <code>true</code>, your application can include additional <code>UserContextData</code> in authentication requests. This data includes the IP address, and contributes to analysis by threat protection features. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding session data to API requests</a>. If you don’t include this parameter, you can't send the source IP address to Amazon Cognito threat protection features. You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret.</p>"
         },
         "AuthSessionValidity":{
           "shape":"AuthSessionValidityType",
           "documentation":"<p>Amazon Cognito creates a session token for each API request in an authentication flow. <code>AuthSessionValidity</code> is the duration, in minutes, of that session token. Your user pool native user must respond to each authentication challenge before the session expires.</p>"
+        },
+        "RefreshTokenRotation":{
+          "shape":"RefreshTokenRotationType",
+          "documentation":"<p>The configuration of your app client for refresh token rotation. When enabled, your app client issues new ID, access, and refresh tokens when users renew their sessions with refresh tokens. When disabled, token refresh issues only ID and access tokens.</p>"
         }
       },
       "documentation":"<p>Represents the request to update the user pool client.</p>"
@@ -8691,7 +9177,7 @@
       "members":{
         "UserPoolClient":{
           "shape":"UserPoolClientType",
-          "documentation":"<p>The user pool client value from the response from the server when you request to update the user pool client.</p>"
+          "documentation":"<p>The updated details of your app client.</p>"
         }
       },
       "documentation":"<p>Represents the response from the server to the request to update the user pool client.</p>"
@@ -8705,19 +9191,19 @@
       "members":{
         "Domain":{
           "shape":"DomainType",
-          "documentation":"<p>The domain name for the custom domain that hosts the sign-up and sign-in pages for your application. One example might be <code>auth.example.com</code>. </p> <p>This string can include only lowercase letters, numbers, and hyphens. Don't use a hyphen for the first or last character. Use periods to separate subdomain names.</p>"
+          "documentation":"<p>The name of the domain that you want to update. For custom domains, this is the fully-qualified domain name, for example <code>auth.example.com</code>. For prefix domains, this is the prefix alone, such as <code>myprefix</code>.</p>"
         },
         "UserPoolId":{
           "shape":"UserPoolIdType",
-          "documentation":"<p>The ID of the user pool that is associated with the custom domain whose certificate you're updating.</p>"
+          "documentation":"<p>The ID of the user pool that is associated with the domain you're updating.</p>"
         },
         "ManagedLoginVersion":{
           "shape":"WrappedIntegerType",
-          "documentation":"<p>A version number that indicates the state of managed login for your domain. Version <code>1</code> is hosted UI (classic). Version <code>2</code> is the newer managed login with the branding designer. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">Managed login</a>.</p>"
+          "documentation":"<p>A version number that indicates the state of managed login for your domain. Version <code>1</code> is hosted UI (classic). Version <code>2</code> is the newer managed login with the branding editor. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">Managed login</a>.</p>"
         },
         "CustomDomainConfig":{
           "shape":"CustomDomainConfigType",
-          "documentation":"<p>The configuration for a custom domain that hosts the sign-up and sign-in pages for your application. Use this object to specify an SSL certificate that is managed by ACM.</p> <p>When you create a custom domain, the passkey RP ID defaults to the custom domain. If you had a prefix domain active, this will cause passkey integration for your prefix domain to stop working due to a mismatch in RP ID. To keep the prefix domain passkey integration working, you can explicitly set RP ID to the prefix domain. Update the RP ID in a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> request.</p>"
+          "documentation":"<p>The configuration for a custom domain that hosts managed login for your application. In an <code>UpdateUserPoolDomain</code> request, this parameter specifies an SSL certificate for the managed login hosted webserver. The certificate must be an ACM ARN in <code>us-east-1</code>.</p> <p>When you create a custom domain, the passkey RP ID defaults to the custom domain. If you had a prefix domain active, this will cause passkey integration for your prefix domain to stop working due to a mismatch in RP ID. To keep the prefix domain passkey integration working, you can explicitly set RP ID to the prefix domain.</p>"
         }
       },
       "documentation":"<p>The UpdateUserPoolDomain request input.</p>"
@@ -8727,11 +9213,11 @@
       "members":{
         "ManagedLoginVersion":{
           "shape":"WrappedIntegerType",
-          "documentation":"<p>A version number that indicates the state of managed login for your domain. Version <code>1</code> is hosted UI (classic). Version <code>2</code> is the newer managed login with the branding designer. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">Managed login</a>.</p>"
+          "documentation":"<p>A version number that indicates the state of managed login for your domain. Version <code>1</code> is hosted UI (classic). Version <code>2</code> is the newer managed login with the branding editor. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">Managed login</a>.</p>"
         },
         "CloudFrontDomain":{
           "shape":"DomainType",
-          "documentation":"<p>The Amazon CloudFront endpoint that Amazon Cognito set up when you added the custom domain to your user pool.</p>"
+          "documentation":"<p>The fully-qualified domain name (FQDN) of the Amazon CloudFront distribution that hosts your managed login or classic hosted UI pages. You domain-name authority must have an alias record that points requests for your custom domain to this FQDN. Amazon Cognito returns this value if you set a custom domain with <code>CustomDomainConfig</code>. If you set an Amazon Cognito prefix domain, this operation returns a blank response.</p>"
         }
       },
       "documentation":"<p>The UpdateUserPoolDomain response output.</p>"
@@ -8746,7 +9232,7 @@
         },
         "Policies":{
           "shape":"UserPoolPolicyType",
-          "documentation":"<p>A container with the policies you want to update in a user pool.</p>"
+          "documentation":"<p>The password policy and sign-in policy in the user pool. The password policy sets options like password complexity requirements and password history. The sign-in policy sets the options available to applications in <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-selection-sdk.html#authentication-flows-selection-choice\">choice-based authentication</a>.</p>"
         },
         "DeletionProtection":{
           "shape":"DeletionProtectionType",
@@ -8754,31 +9240,31 @@
         },
         "LambdaConfig":{
           "shape":"LambdaConfigType",
-          "documentation":"<p>The Lambda configuration information from the request to update the user pool.</p>"
+          "documentation":"<p>A collection of user pool Lambda triggers. Amazon Cognito invokes triggers at several possible stages of authentication operations. Triggers can modify the outcome of the operations that invoked them.</p>"
         },
         "AutoVerifiedAttributes":{
           "shape":"VerifiedAttributesListType",
-          "documentation":"<p>The attributes that are automatically verified when Amazon Cognito requests to update user pools.</p>"
+          "documentation":"<p>The attributes that you want your user pool to automatically verify. Possible values: <b>email</b>, <b>phone_number</b>. For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#allowing-users-to-sign-up-and-confirm-themselves\">Verifying contact information at sign-up</a>.</p>"
         },
         "SmsVerificationMessage":{
           "shape":"SmsVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationMessage":{
           "shape":"EmailVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationSubject":{
           "shape":"EmailVerificationSubjectType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "VerificationMessageTemplate":{
           "shape":"VerificationMessageTemplateType",
-          "documentation":"<p>The template for verification messages.</p>"
+          "documentation":"<p>The template for the verification message that your user pool delivers to users who set an email address or phone number attribute.</p> <p>Set the email message type that corresponds to your <code>DefaultEmailOption</code> selection. For <code>CONFIRM_WITH_LINK</code>, specify an <code>EmailMessageByLink</code> and leave <code>EmailMessage</code> blank. For <code>CONFIRM_WITH_CODE</code>, specify an <code>EmailMessage</code> and leave <code>EmailMessageByLink</code> blank. When you supply both parameters with either choice, Amazon Cognito returns an error.</p>"
         },
         "SmsAuthenticationMessage":{
           "shape":"SmsVerificationMessageType",
-          "documentation":"<p>The contents of the SMS authentication message.</p>"
+          "documentation":"<p>The contents of the SMS message that your user pool sends to users in SMS authentication.</p>"
         },
         "UserAttributeUpdateSettings":{
           "shape":"UserAttributeUpdateSettingsType",
@@ -8786,11 +9272,11 @@
         },
         "MfaConfiguration":{
           "shape":"UserPoolMfaType",
-          "documentation":"<p>Possible values include:</p> <ul> <li> <p> <code>OFF</code> - MFA tokens aren't required and can't be specified during user registration.</p> </li> <li> <p> <code>ON</code> - MFA tokens are required for all user registrations. You can only specify ON when you're initially creating a user pool. You can use the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> API operation to turn MFA \"ON\" for existing user pools. </p> </li> <li> <p> <code>OPTIONAL</code> - Users have the option when registering to create an MFA token.</p> </li> </ul>"
+          "documentation":"<p>Sets multi-factor authentication (MFA) to be on, off, or optional. When <code>ON</code>, all users must set up MFA before they can sign in. When <code>OPTIONAL</code>, your application must make a client-side determination of whether a user wants to register an MFA device. For user pools with adaptive authentication with threat protection, choose <code>OPTIONAL</code>.</p> <p>When <code>MfaConfiguration</code> is <code>OPTIONAL</code>, managed login doesn't automatically prompt users to set up MFA. Amazon Cognito generates MFA prompts in API responses and in managed login for users who have chosen and configured a preferred MFA factor.</p>"
         },
         "DeviceConfiguration":{
           "shape":"DeviceConfigurationType",
-          "documentation":"<p>The device-remembering configuration for a user pool. A null value indicates that you have deactivated device remembering in your user pool.</p> <note> <p>When you provide a value for any <code>DeviceConfiguration</code> field, you activate the Amazon Cognito device-remembering feature.</p> </note>"
+          "documentation":"<p>The device-remembering configuration for a user pool. Device remembering or device tracking is a \"Remember me on this device\" option for user pools that perform authentication with the device key of a trusted device in the back end, instead of a user-provided MFA code. For more information about device authentication, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with user devices in your user pool</a>. A null value indicates that you have deactivated device remembering in your user pool.</p> <note> <p>When you provide a value for any <code>DeviceConfiguration</code> field, you activate the Amazon Cognito device-remembering feature. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html\">Working with devices</a>.</p> </note>"
         },
         "EmailConfiguration":{
           "shape":"EmailConfigurationType",
@@ -8798,7 +9284,7 @@
         },
         "SmsConfiguration":{
           "shape":"SmsConfigurationType",
-          "documentation":"<p>The SMS configuration with the settings that your Amazon Cognito user pool must use to send an SMS message from your Amazon Web Services account through Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account.</p>"
+          "documentation":"<p>The SMS configuration with the settings for your Amazon Cognito user pool to send SMS message with Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account. For more information see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html\">SMS message settings</a>.</p>"
         },
         "UserPoolTags":{
           "shape":"UserPoolTagsType",
@@ -8806,11 +9292,11 @@
         },
         "AdminCreateUserConfig":{
           "shape":"AdminCreateUserConfigType",
-          "documentation":"<p>The configuration for <code>AdminCreateUser</code> requests.</p>"
+          "documentation":"<p>The configuration for administrative creation of users. Includes the template for the invitation message for new users, the duration of temporary passwords, and permitting self-service sign-up.</p>"
         },
         "UserPoolAddOns":{
           "shape":"UserPoolAddOnsType",
-          "documentation":"<p>User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to risky traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>.</p>"
+          "documentation":"<p>Contains settings for activation of threat protection, including the operating mode and additional authentication types. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to potentially unwanted traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
         },
         "AccountRecoverySetting":{
           "shape":"AccountRecoverySettingType",
@@ -8829,8 +9315,7 @@
     },
     "UpdateUserPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the response from the server when you make a request to update the user pool.</p>"
     },
     "UserAttributeUpdateSettingsType":{
@@ -8838,10 +9323,10 @@
       "members":{
         "AttributesRequireVerificationBeforeUpdate":{
           "shape":"AttributesRequireVerificationBeforeUpdateType",
-          "documentation":"<p>Requires that your user verifies their email address, phone number, or both before Amazon Cognito updates the value of that attribute. When you update a user attribute that has this option activated, Amazon Cognito sends a verification message to the new phone number or email address. Amazon Cognito doesn’t change the value of the attribute until your user responds to the verification message and confirms the new value.</p> <p>You can verify an updated email address or phone number with a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html\">VerifyUserAttribute</a> API request. You can also call the <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html\">AdminUpdateUserAttributes</a> API and set <code>email_verified</code> or <code>phone_number_verified</code> to true.</p> <p>When <code>AttributesRequireVerificationBeforeUpdate</code> is false, your user pool doesn't require that your users verify attribute changes before Amazon Cognito updates them. In a user pool where <code>AttributesRequireVerificationBeforeUpdate</code> is false, API operations that change attribute values can immediately update a user’s <code>email</code> or <code>phone_number</code> attribute.</p>"
+          "documentation":"<p>Requires that your user verifies their email address, phone number, or both before Amazon Cognito updates the value of that attribute. When you update a user attribute that has this option activated, Amazon Cognito sends a verification message to the new phone number or email address. Amazon Cognito doesn’t change the value of the attribute until your user responds to the verification message and confirms the new value.</p> <p>When <code>AttributesRequireVerificationBeforeUpdate</code> is false, your user pool doesn't require that your users verify attribute changes before Amazon Cognito updates them. In a user pool where <code>AttributesRequireVerificationBeforeUpdate</code> is false, API operations that change attribute values can immediately update a user’s <code>email</code> or <code>phone_number</code> attribute.</p>"
         }
       },
-      "documentation":"<p>The settings for updates to user attributes. These settings include the property <code>AttributesRequireVerificationBeforeUpdate</code>, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates\"> Verifying updates to email addresses and phone numbers</a>.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The settings for updates to user attributes. These settings include the property <code>AttributesRequireVerificationBeforeUpdate</code>, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates\"> Verifying updates to email addresses and phone numbers</a>.</p>"
     },
     "UserContextDataType":{
       "type":"structure",
@@ -8855,7 +9340,7 @@
           "documentation":"<p>Encoded device-fingerprint details that your app collected with the Amazon Cognito context data collection library. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding user device and session data to API requests</a>.</p>"
         }
       },
-      "documentation":"<p>Contextual data, such as the user's device fingerprint, IP address, or location, used for evaluating the risk of an unexpected event by Amazon Cognito advanced security.</p> <p>This data type is a request parameter of public-client authentication operations like <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html\">InitiateAuth</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html\">RespondToAuthChallenge</a>.</p>",
+      "documentation":"<p>Contextual data, such as the user's device fingerprint, IP address, or location, used for evaluating the risk of an unexpected event by Amazon Cognito threat protection.</p>",
       "sensitive":true
     },
     "UserFilterType":{
@@ -8954,7 +9439,7 @@
           "documentation":"<p>The message returned when the user import job is completed.</p>"
         }
       },
-      "documentation":"<p>A user import job in a user pool. Describes the status of user import with a CSV file. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users into user pools from a CSV file</a>.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserImportJob.html\">CreateUserImportJob</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserImportJob.html\">DescribeUserImportJob</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserImportJobs.html\">ListUserImportJobs</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html\">StartUserImportJob</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StopUserImportJob.html\">StopUserImportJob</a>.</p>"
+      "documentation":"<p>A user import job in a user pool. Describes the status of user import with a CSV file. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html\">Importing users into user pools from a CSV file</a>.</p>"
     },
     "UserImportJobsListType":{
       "type":"list",
@@ -9013,14 +9498,14 @@
       "members":{
         "AdvancedSecurityMode":{
           "shape":"AdvancedSecurityModeType",
-          "documentation":"<p>The operating mode of advanced security features for standard authentication types in your user pool, including username-password and secure remote password (SRP) authentication. </p>"
+          "documentation":"<p>The operating mode of threat protection for standard authentication types in your user pool, including username-password and secure remote password (SRP) authentication. </p>"
         },
         "AdvancedSecurityAdditionalFlows":{
           "shape":"AdvancedSecurityAdditionalFlowsType",
-          "documentation":"<p>Advanced security configuration options for additional authentication types in your user pool, including custom authentication. </p>"
+          "documentation":"<p>Threat protection configuration options for additional authentication types in your user pool, including custom authentication. </p>"
         }
       },
-      "documentation":"<p>User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to risky traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>Contains settings for activation of threat protection, including the operating mode and additional authentication types. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to potentially unwanted traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
     },
     "UserPoolClientDescription":{
       "type":"structure",
@@ -9038,7 +9523,7 @@
           "documentation":"<p>The app client name.</p>"
         }
       },
-      "documentation":"<p>A short description of a user pool app client.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPoolClients.html\">ListUserPoolClients</a>. </p>"
+      "documentation":"<p>A short description of a user pool app client.</p>"
     },
     "UserPoolClientListType":{
       "type":"list",
@@ -9089,19 +9574,19 @@
         },
         "ReadAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list. An example of this kind of activity is when your user selects a link to view their profile information. Your app makes a <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html\">GetUser</a> API request to retrieve and display your user's profile data.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the Standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have read access to. After your user authenticates in your app, their access token authorizes them to read their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>ReadAttributes</code> for your app client, your app can read the values of <code>email_verified</code>, <code>phone_number_verified</code>, and the standard attributes of your user pool. When your user pool app client has read access to these default attributes, <code>ReadAttributes</code> doesn't return any information. Amazon Cognito only populates <code>ReadAttributes</code> in the API response if you have specified your own custom set of read attributes.</p>"
         },
         "WriteAttributes":{
           "shape":"ClientPermissionListType",
-          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list. An example of this kind of activity is when you present your user with a form to update their profile information and they change their last name. Your app then makes an <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html\">UpdateUserAttributes</a> API request and sets <code>family_name</code> to the new value. </p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
+          "documentation":"<p>The list of user attributes that you want your app client to have write access to. After your user authenticates in your app, their access token authorizes them to set or modify their own attribute value for any attribute in this list.</p> <p>When you don't specify the <code>WriteAttributes</code> for your app client, your app can write the values of the Standard attributes of your user pool. When your user pool has write access to these default attributes, <code>WriteAttributes</code> doesn't return any information. Amazon Cognito only populates <code>WriteAttributes</code> in the API response if you have specified your own custom set of write attributes.</p> <p>If your app client allows users to sign in through an IdP, this array must include all attributes that you have mapped to IdP attributes. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If your app client does not have write access to a mapped attribute, Amazon Cognito throws an error when it tries to update the attribute. For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html\">Specifying IdP Attribute Mappings for Your user pool</a>.</p>"
         },
         "ExplicitAuthFlows":{
           "shape":"ExplicitAuthFlowsListType",
-          "documentation":"<p>The authentication flows that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your user client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html\">authentication flows</a> that you want your user pool client to support. For each app client in your user pool, you can sign in your users with any combination of one or more flows, including with a user name and Secure Remote Password (SRP), a user name and password, or a custom authentication process that you define with Lambda functions.</p> <note> <p>If you don't specify a value for <code>ExplicitAuthFlows</code>, your app client supports <code>ALLOW_REFRESH_TOKEN_AUTH</code>, <code>ALLOW_USER_SRP_AUTH</code>, and <code>ALLOW_CUSTOM_AUTH</code>. </p> </note> <p>The values for authentication flow options include the following.</p> <ul> <li> <p> <code>ALLOW_USER_AUTH</code>: Enable selection-based sign-in with <code>USER_AUTH</code>. This setting covers username-password, secure remote password (SRP), passwordless, and passkey authentication. This authentiation flow can do username-password and SRP authentication without other <code>ExplicitAuthFlows</code> permitting them. For example users can complete an SRP challenge through <code>USER_AUTH</code> without the flow <code>USER_SRP_AUTH</code> being active for the app client. This flow doesn't include <code>CUSTOM_AUTH</code>. </p> <p>To activate this setting, your user pool must be in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-essentials.html\"> Essentials tier</a> or higher.</p> </li> <li> <p> <code>ALLOW_ADMIN_USER_PASSWORD_AUTH</code>: Enable admin based user password authentication flow <code>ADMIN_USER_PASSWORD_AUTH</code>. This setting replaces the <code>ADMIN_NO_SRP_AUTH</code> setting. With this authentication flow, your app passes a user name and password to Amazon Cognito in the request, instead of using the Secure Remote Password (SRP) protocol to securely transmit the password.</p> </li> <li> <p> <code>ALLOW_CUSTOM_AUTH</code>: Enable Lambda trigger based authentication.</p> </li> <li> <p> <code>ALLOW_USER_PASSWORD_AUTH</code>: Enable user password-based authentication. In this flow, Amazon Cognito receives the password in the request instead of using the SRP protocol to verify passwords.</p> </li> <li> <p> <code>ALLOW_USER_SRP_AUTH</code>: Enable SRP-based authentication.</p> </li> <li> <p> <code>ALLOW_REFRESH_TOKEN_AUTH</code>: Enable authflow to refresh tokens.</p> </li> </ul> <p>In some environments, you will see the values <code>ADMIN_NO_SRP_AUTH</code>, <code>CUSTOM_AUTH_FLOW_ONLY</code>, or <code>USER_PASSWORD_AUTH</code>. You can't assign these legacy <code>ExplicitAuthFlows</code> values to user pool clients at the same time as values that begin with <code>ALLOW_</code>, like <code>ALLOW_USER_SRP_AUTH</code>.</p>"
         },
         "SupportedIdentityProviders":{
           "shape":"SupportedIdentityProvidersListType",
-          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This setting applies to providers that you can access with <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a>. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent API-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>.</p>"
+          "documentation":"<p>A list of provider names for the identity providers (IdPs) that are supported on this client. The following are supported: <code>COGNITO</code>, <code>Facebook</code>, <code>Google</code>, <code>SignInWithApple</code>, and <code>LoginWithAmazon</code>. You can also specify the names that you configured for the SAML and OIDC IdPs in your user pool, for example <code>MySAMLIdP</code> or <code>MyOIDCIdP</code>.</p> <p>This parameter sets the IdPs that <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html\">managed login</a> will display on the login page for your app client. The removal of <code>COGNITO</code> from this list doesn't prevent authentication operations for local users with the user pools API in an Amazon Web Services SDK. The only way to prevent SDK-based authentication is to block access with a <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-waf.html\">WAF rule</a>. </p>"
         },
         "CallbackURLs":{
           "shape":"CallbackURLsListType",
@@ -9125,7 +9610,7 @@
         },
         "AllowedOAuthFlowsUserPoolClient":{
           "shape":"BooleanType",
-          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 features in your user pool app client.</p> <p> <code>AllowedOAuthFlowsUserPoolClient</code> must be <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>.</p>",
+          "documentation":"<p>Set to <code>true</code> to use OAuth 2.0 authorization server features in your app client.</p> <p>This parameter must have a value of <code>true</code> before you can configure the following features in your app client.</p> <ul> <li> <p> <code>CallBackURLs</code>: Callback URLs.</p> </li> <li> <p> <code>LogoutURLs</code>: Sign-out redirect URLs.</p> </li> <li> <p> <code>AllowedOAuthScopes</code>: OAuth 2.0 scopes.</p> </li> <li> <p> <code>AllowedOAuthFlows</code>: Support for authorization code, implicit, and client credentials OAuth 2.0 grants.</p> </li> </ul> <p>To use authorization server features, configure one of these features in the Amazon Cognito console or set <code>AllowedOAuthFlowsUserPoolClient</code> to <code>true</code> in a <code>CreateUserPoolClient</code> or <code>UpdateUserPoolClient</code> API request. If you don't set a value for <code>AllowedOAuthFlowsUserPoolClient</code> in a request with the CLI or SDKs, it defaults to <code>false</code>. When <code>false</code>, only SDK-based API sign-in is permitted.</p>",
           "box":true
         },
         "AnalyticsConfiguration":{
@@ -9134,22 +9619,26 @@
         },
         "PreventUserExistenceErrors":{
           "shape":"PreventUserExistenceErrorTypes",
-          "documentation":"<p>Errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Valid values include:</p> <ul> <li> <p> <code>ENABLED</code> - This prevents user existence-related errors.</p> </li> <li> <p> <code>LEGACY</code> - This represents the early behavior of Amazon Cognito where user existence related errors aren't prevented.</p> </li> </ul> <p>Defaults to <code>LEGACY</code> when you don't provide a value.</p>"
+          "documentation":"<p>When <code>ENABLED</code>, suppresses messages that might indicate a valid user exists when someone attempts sign-in. This parameters sets your preference for the errors and responses that you want Amazon Cognito APIs to return during authentication, account confirmation, and password recovery when the user doesn't exist in the user pool. When set to <code>ENABLED</code> and the user doesn't exist, authentication returns an error indicating either the username or password was incorrect. Account confirmation and password recovery return a response indicating a code was sent to a simulated destination. When set to <code>LEGACY</code>, those APIs return a <code>UserNotFoundException</code> exception if the user doesn't exist in the user pool.</p> <p>Defaults to <code>LEGACY</code>.</p>"
         },
         "EnableTokenRevocation":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>Indicates whether token revocation is activated for the user pool client. When you create a new user pool client, token revocation is activated by default. For more information about revoking tokens, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html\">RevokeToken</a>.</p>"
+          "documentation":"<p>Indicates whether token revocation is activated for the user pool client. When you create a new user pool client, token revocation is activated by default.</p>"
         },
         "EnablePropagateAdditionalUserContextData":{
           "shape":"WrappedBooleanType",
-          "documentation":"<p>When <code>EnablePropagateAdditionalUserContextData</code> is true, Amazon Cognito accepts an <code>IpAddress</code> value that you send in the <code>UserContextData</code> parameter. The <code>UserContextData</code> parameter sends information to Amazon Cognito advanced security for risk analysis. You can send <code>UserContextData</code> when you sign in Amazon Cognito native users with the <code>InitiateAuth</code> and <code>RespondToAuthChallenge</code> API operations.</p> <p>When <code>EnablePropagateAdditionalUserContextData</code> is false, you can't send your user's source IP address to Amazon Cognito advanced security with unauthenticated API operations. <code>EnablePropagateAdditionalUserContextData</code> doesn't affect whether you can send a source IP address in a <code>ContextData</code> parameter with the authenticated API operations <code>AdminInitiateAuth</code> and <code>AdminRespondToAuthChallenge</code>.</p> <p>You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding user device and session data to API requests</a>.</p>"
+          "documentation":"<p>When <code>EnablePropagateAdditionalUserContextData</code> is true, Amazon Cognito accepts an <code>IpAddress</code> value that you send in the <code>UserContextData</code> parameter. The <code>UserContextData</code> parameter sends information to Amazon Cognito threat protection for risk analysis. You can send <code>UserContextData</code> when you sign in Amazon Cognito native users with the <code>InitiateAuth</code> and <code>RespondToAuthChallenge</code> API operations.</p> <p>When <code>EnablePropagateAdditionalUserContextData</code> is false, you can't send your user's source IP address to Amazon Cognito threat protection with unauthenticated API operations. <code>EnablePropagateAdditionalUserContextData</code> doesn't affect whether you can send a source IP address in a <code>ContextData</code> parameter with the authenticated API operations <code>AdminInitiateAuth</code> and <code>AdminRespondToAuthChallenge</code>.</p> <p>You can only activate <code>EnablePropagateAdditionalUserContextData</code> in an app client that has a client secret. For more information about propagation of user context data, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-adaptive-authentication.html#user-pool-settings-adaptive-authentication-device-fingerprint\">Adding user device and session data to API requests</a>.</p>"
         },
         "AuthSessionValidity":{
           "shape":"AuthSessionValidityType",
           "documentation":"<p>Amazon Cognito creates a session token for each API request in an authentication flow. <code>AuthSessionValidity</code> is the duration, in minutes, of that session token. Your user pool native user must respond to each authentication challenge before the session expires.</p>"
+        },
+        "RefreshTokenRotation":{
+          "shape":"RefreshTokenRotationType",
+          "documentation":"<p>The configuration of your app client for refresh token rotation. When enabled, your app client issues new ID, access, and refresh tokens when users renew their sessions with refresh tokens. When disabled, token refresh issues only ID and access tokens.</p>"
         }
       },
-      "documentation":"<p>The configuration of a user pool client.</p> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html\">CreateUserPoolClient</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html\">UpdateUserPoolClient</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html\">DescribeUserPoolClient</a>.</p>"
+      "documentation":"<p>The configuration of a user pool client.</p>"
     },
     "UserPoolDescriptionType":{
       "type":"structure",
@@ -9181,7 +9670,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>A short description of a user pool.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPools.html\">ListUserPools</a>. </p>"
+      "documentation":"<p>A short description of a user pool.</p>"
     },
     "UserPoolIdType":{
       "type":"string",
@@ -9219,7 +9708,7 @@
           "documentation":"<p>The policy for allowed types of authentication in a user pool.</p>"
         }
       },
-      "documentation":"<p>A list of user pool policies. Contains the policy that sets password-complexity requirements.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>A list of user pool policies. Contains the policy that sets password-complexity requirements.</p>"
     },
     "UserPoolTaggingException":{
       "type":"structure",
@@ -9301,15 +9790,15 @@
         },
         "SmsVerificationMessage":{
           "shape":"SmsVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationMessage":{
           "shape":"EmailVerificationMessageType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "EmailVerificationSubject":{
           "shape":"EmailVerificationSubjectType",
-          "documentation":"<p>This parameter is no longer used. See <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html\">VerificationMessageTemplateType</a>.</p>"
+          "documentation":"<p>This parameter is no longer used.</p>"
         },
         "VerificationMessageTemplate":{
           "shape":"VerificationMessageTemplateType",
@@ -9369,11 +9858,11 @@
         },
         "UserPoolAddOns":{
           "shape":"UserPoolAddOnsType",
-          "documentation":"<p>User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to risky traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>.</p>"
+          "documentation":"<p>Contains settings for activation of threat protection, including the operating mode and additional authentication types. To log user security information but take no action, set to <code>AUDIT</code>. To configure automatic security responses to potentially unwanted traffic to your user pool, set to <code>ENFORCED</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html\">Adding advanced security to a user pool</a>. To activate this setting, your user pool must be on the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/feature-plans-features-plus.html\"> Plus tier</a>.</p>"
         },
         "UsernameConfiguration":{
           "shape":"UsernameConfigurationType",
-          "documentation":"<p>Case sensitivity of the username input for the selected sign-in option. When case sensitivity is set to <code>False</code> (case insensitive), users can sign in with any combination of capital and lowercase letters. For example, <code>username</code>, <code>USERNAME</code>, or <code>UserName</code>, or for email, <code>email@example.com</code> or <code>EMaiL@eXamplE.Com</code>. For most use cases, set case sensitivity to <code>False</code> (case insensitive) as a best practice. When usernames and email addresses are case insensitive, Amazon Cognito treats any variation in case as the same user, and prevents a case variation from being assigned to the same attribute for a different user.</p> <p>This configuration is immutable after you set it. For more information, see <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UsernameConfigurationType.html\">UsernameConfigurationType</a>.</p>"
+          "documentation":"<p>Case sensitivity of the username input for the selected sign-in option. When case sensitivity is set to <code>False</code> (case insensitive), users can sign in with any combination of capital and lowercase letters. For example, <code>username</code>, <code>USERNAME</code>, or <code>UserName</code>, or for email, <code>email@example.com</code> or <code>EMaiL@eXamplE.Com</code>. For most use cases, set case sensitivity to <code>False</code> (case insensitive) as a best practice. When usernames and email addresses are case insensitive, Amazon Cognito treats any variation in case as the same user, and prevents a case variation from being assigned to the same attribute for a different user.</p>"
         },
         "Arn":{
           "shape":"ArnType",
@@ -9388,7 +9877,7 @@
           "documentation":"<p>The user pool <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-sign-in-feature-plans.html\">feature plan</a>, or tier. This parameter determines the eligibility of the user pool for features like managed login, access-token customization, and threat protection. Defaults to <code>ESSENTIALS</code>.</p>"
         }
       },
-      "documentation":"<p>The configuration of a user pool.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a>, <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The configuration of a user pool.</p>"
     },
     "UserStatusType":{
       "type":"string",
@@ -9428,14 +9917,14 @@
         },
         "UserStatus":{
           "shape":"UserStatusType",
-          "documentation":"<p>The user status. This can be one of the following:</p> <ul> <li> <p>UNCONFIRMED - User has been created but not confirmed.</p> </li> <li> <p>CONFIRMED - User has been confirmed.</p> </li> <li> <p>EXTERNAL_PROVIDER - User signed in with a third-party IdP.</p> </li> <li> <p>UNKNOWN - User status isn't known.</p> </li> <li> <p>RESET_REQUIRED - User is confirmed, but the user must request a code and reset their password before they can sign in.</p> </li> <li> <p>FORCE_CHANGE_PASSWORD - The user is confirmed and the user can sign in using a temporary password, but on first sign-in, the user must change their password to a new value before doing anything else. </p> </li> </ul>"
+          "documentation":"<p>The user status. This can be one of the following:</p> <ul> <li> <p> <code>UNCONFIRMED</code>: User has been created but not confirmed.</p> </li> <li> <p> <code>CONFIRMED</code>: User has been confirmed.</p> </li> <li> <p> <code>EXTERNAL_PROVIDER</code>: User signed in with a third-party IdP.</p> </li> <li> <p> <code>RESET_REQUIRED</code>: User is confirmed, but the user must request a code and reset their password before they can sign in.</p> </li> <li> <p> <code>FORCE_CHANGE_PASSWORD</code>: The user is confirmed and the user can sign in using a temporary password, but on first sign-in, the user must change their password to a new value before doing anything else. </p> </li> </ul> <p>The statuses <code>ARCHIVED</code>, <code>UNKNOWN</code>, and <code>COMPROMISED</code> are no longer used.</p>"
         },
         "MFAOptions":{
           "shape":"MFAOptionListType",
           "documentation":"<p>The user's MFA configuration.</p>"
         }
       },
-      "documentation":"<p>A user profile in a Amazon Cognito user pool.</p> <p>This data type is a response parameter to <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html\">AdminCreateUser</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html\">ListUsers</a>. </p>"
+      "documentation":"<p>A user profile in a Amazon Cognito user pool.</p>"
     },
     "UserVerificationType":{
       "type":"string",
@@ -9464,7 +9953,7 @@
           "documentation":"<p>Specifies whether user name case sensitivity will be applied for all users in the user pool through Amazon Cognito APIs. For most use cases, set case sensitivity to <code>False</code> (case insensitive) as a best practice. When usernames and email addresses are case insensitive, users can sign in as the same user when they enter a different capitalization of their user name.</p> <p>Valid values include:</p> <dl> <dt>true</dt> <dd> <p>Enables case sensitivity for all username input. When this option is set to <code>true</code>, users must sign in using the exact capitalization of their given username, such as “UserName”. This is the default value.</p> </dd> <dt>false</dt> <dd> <p>Enables case insensitivity for all username input. For example, when this option is set to <code>false</code>, users can sign in using <code>username</code>, <code>USERNAME</code>, or <code>UserName</code>. This option also enables both <code>preferred_username</code> and <code>email</code> alias to be case insensitive, in addition to the <code>username</code> attribute.</p> </dd> </dl>"
         }
       },
-      "documentation":"<p>The configuration of a user pool for username case sensitivity.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The configuration of a user pool for username case sensitivity.</p>"
     },
     "UsernameExistsException":{
       "type":"structure",
@@ -9516,7 +10005,7 @@
           "documentation":"<p>The configuration of verification emails to contain a clickable link or a verification code.</p> <p>For link, your template body must contain link text in the format <code>{##Click here##}</code>. \"Click here\" in the example is a customizable string. For code, your template body must contain a code placeholder in the format <code>{####}</code>.</p>"
         }
       },
-      "documentation":"<p>The template for the verification message that your user pool delivers to users who set an email address or phone number attribute.</p> <p>This data type is a request and response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html\">CreateUserPool</a> and <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html\">UpdateUserPool</a>, and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html\">DescribeUserPool</a>.</p>"
+      "documentation":"<p>The template for the verification message that your user pool delivers to users who set an email address or phone number attribute.</p>"
     },
     "VerifiedAttributeType":{
       "type":"string",
@@ -9535,19 +10024,19 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose software token you want to verify.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that should be passed both ways in challenge-response calls to the service.</p>"
+          "documentation":"<p>The session ID from an <code>AssociateSoftwareToken</code> request.</p>"
         },
         "UserCode":{
           "shape":"SoftwareTokenMFAUserCodeType",
-          "documentation":"<p>The one- time password computed using the secret code returned by <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html\">AssociateSoftwareToken</a>.</p>"
+          "documentation":"<p>A TOTP that the user generated in their configured authenticator app.</p>"
         },
         "FriendlyDeviceName":{
           "shape":"StringType",
-          "documentation":"<p>The friendly device name.</p>"
+          "documentation":"<p>A friendly name for the device that's running the TOTP authenticator.</p>"
         }
       }
     },
@@ -9556,11 +10045,11 @@
       "members":{
         "Status":{
           "shape":"VerifySoftwareTokenResponseType",
-          "documentation":"<p>The status of the verify software token.</p>"
+          "documentation":"<p>Amazon Cognito can accept or reject the code that you provide. This response parameter indicates the success of TOTP verification. Some reasons that this operation might return an error are clock skew on the user's device and excessive retries.</p>"
         },
         "Session":{
           "shape":"SessionType",
-          "documentation":"<p>The session that should be passed both ways in challenge-response calls to the service.</p>"
+          "documentation":"<p>This session ID satisfies an <code>MFA_SETUP</code> challenge. Supply the session ID in your challenge response.</p>"
         }
       }
     },
@@ -9581,23 +10070,22 @@
       "members":{
         "AccessToken":{
           "shape":"TokenModelType",
-          "documentation":"<p>A valid access token that Amazon Cognito issued to the user whose user attributes you want to verify.</p>"
+          "documentation":"<p>A valid access token that Amazon Cognito issued to the currently signed-in user. Must include a scope claim for <code>aws.cognito.signin.user.admin</code>.</p>"
         },
         "AttributeName":{
           "shape":"AttributeNameType",
-          "documentation":"<p>The attribute name in the request to verify user attributes.</p>"
+          "documentation":"<p>The name of the attribute that you want to verify.</p>"
         },
         "Code":{
           "shape":"ConfirmationCodeType",
-          "documentation":"<p>The verification code in the request to verify user attributes.</p>"
+          "documentation":"<p>The verification code that your user pool sent to the added or changed attribute, for example the user's email address.</p>"
         }
       },
       "documentation":"<p>Represents the request to verify user attributes.</p>"
     },
     "VerifyUserAttributeResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A container representing the response from the server from the request to verify user attributes.</p>"
     },
     "WebAuthnAuthenticatorAttachmentType":{"type":"string"},
@@ -9642,7 +10130,7 @@
           "documentation":"<p>When <code>required</code>, users can only register and sign in users with passkeys that are capable of <a href=\"https://www.w3.org/TR/webauthn-2/#enum-userVerificationRequirement\">user verification</a>. When <code>preferred</code>, your user pool doesn't require the use of authenticators with user verification but encourages it.</p>"
         }
       },
-      "documentation":"<p>Settings for multi-factor authentication (MFA) with passkey, or webauthN, biometric and security-key devices in a user pool. Configures the following:</p> <ul> <li> <p>Configuration at the user-pool level for whether you want to require passkey configuration as an MFA factor, or include it as a choice.</p> </li> <li> <p>The user pool relying-party ID. This is the user pool domain that user's passkey providers should trust as a receiver of passkey authentication.</p> </li> <li> <p>The providers that you want to allow as origins for passkey authentication.</p> </li> </ul> <p>This data type is a request parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html\">SetUserPoolMfaConfig</a> and a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html\">GetUserPoolMfaConfig</a>. </p>"
+      "documentation":"<p>Settings for authentication (MFA) with passkey, or webauthN, biometric and security-key devices in a user pool. Configures the following:</p> <ul> <li> <p>Configuration for requiring user-verification support in passkeys.</p> </li> <li> <p>The user pool relying-party ID. This is the domain, typically your user pool domain, that user's passkey providers should trust as a receiver of passkey authentication.</p> </li> <li> <p>The providers that you want to allow as origins for passkey authentication.</p> </li> </ul>"
     },
     "WebAuthnCredentialDescription":{
       "type":"structure",
@@ -9679,7 +10167,7 @@
           "documentation":"<p>The date and time when the item was created. Amazon Cognito returns this timestamp in UNIX epoch time format. Your SDK might render the output in a human-readable format like ISO 8601 or a Java <code>Date</code> object.</p>"
         }
       },
-      "documentation":"<p>The details of a passkey, or webauthN, biometric or security-key authentication factor for a user.</p> <p>This data type is a response parameter of <a href=\"https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListWebAuthnCredentials.html\">ListWebAuthnCredentials</a>.</p>"
+      "documentation":"<p>The details of a passkey, or webauthN, biometric or security-key authentication factor for a user.</p>"
     },
     "WebAuthnCredentialDescriptionListType":{
       "type":"list",
@@ -9725,5 +10213,5 @@
     "WrappedBooleanType":{"type":"boolean"},
     "WrappedIntegerType":{"type":"integer"}
   },
-  "documentation":"<p>With the Amazon Cognito user pools API, you can configure user pools and authenticate users. To authenticate users from third-party identity providers (IdPs) in this API, you can <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html\">link IdP users to native user profiles</a>. Learn more about the authentication and authorization of federated users at <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\">Adding user pool sign-in through a third party</a> and in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html\">User pool federation endpoints and hosted UI reference</a>.</p> <p>This API reference provides detailed information about API operations and object types in Amazon Cognito.</p> <p>Along with resource management operations, the Amazon Cognito user pools API includes classes of operations and authorization models for client-side and server-side authentication of users. You can interact with operations in the Amazon Cognito user pools API as any of the following subjects.</p> <ol> <li> <p>An administrator who wants to configure user pools, app clients, users, groups, or other user pool functions.</p> </li> <li> <p>A server-side app, like a web application, that wants to use its Amazon Web Services privileges to manage, authenticate, or authorize a user.</p> </li> <li> <p>A client-side app, like a mobile app, that wants to make unauthenticated requests to manage, authenticate, or authorize a user.</p> </li> </ol> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html\">Using the Amazon Cognito user pools API and user pool endpoints</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <p>With your Amazon Web Services SDK, you can build the logic to support operational flows in every use case for this API. You can also make direct REST API requests to <a href=\"https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_your_user_pools_region\">Amazon Cognito user pools service endpoints</a>. The following links can get you started with the <code>CognitoIdentityProvider</code> client in other supported Amazon Web Services SDKs.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html#cli-aws-cognito-idp\">Amazon Web Services Command Line Interface</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html\">Amazon Web Services SDK for .NET</a> </p> </li> <li> <p> <a href=\"https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-cognito-idp/html/class_aws_1_1_cognito_identity_provider_1_1_cognito_identity_provider_client.html\">Amazon Web Services SDK for C++</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdk-for-go/api/service/cognitoidentityprovider/#CognitoIdentityProvider\">Amazon Web Services SDK for Go</a> </p> </li> <li> <p> <a href=\"https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cognitoidentityprovider/CognitoIdentityProviderClient.html\">Amazon Web Services SDK for Java V2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html\">Amazon Web Services SDK for JavaScript</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cognito-idp-2016-04-18.html\">Amazon Web Services SDK for PHP V3</a> </p> </li> <li> <p> <a href=\"https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cognito-idp.html\">Amazon Web Services SDK for Python</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CognitoIdentityProvider/Client.html\">Amazon Web Services SDK for Ruby V3</a> </p> </li> <li> <p> <a href=\"https://sdk.amazonaws.com/kotlin/api/latest/cognitoidentityprovider/aws.sdk.kotlin.services.cognitoidentityprovider/-cognito-identity-provider-client/index.html\">Amazon Web Services SDK for Kotlin</a> </p> </li> </ul> <p>To get started with an Amazon Web Services SDK, see <a href=\"http://aws.amazon.com/developer/tools/\">Tools to Build on Amazon Web Services</a>. For example actions and scenarios, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples_cognito-identity-provider.html\">Code examples for Amazon Cognito Identity Provider using Amazon Web Services SDKs</a>.</p>"
+  "documentation":"<p>With the Amazon Cognito user pools API, you can configure user pools and authenticate users. To authenticate users from third-party identity providers (IdPs) in this API, you can <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html\">link IdP users to native user profiles</a>. Learn more about the authentication and authorization of federated users at <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html\">Adding user pool sign-in through a third party</a> and in the <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html\">User pool federation endpoints and managed login reference</a>.</p> <p>This API reference provides detailed information about API operations and object types in Amazon Cognito.</p> <p>Along with resource management operations, the Amazon Cognito user pools API includes classes of operations and authorization models for client-side and server-side authentication of users. You can interact with operations in the Amazon Cognito user pools API as any of the following subjects.</p> <ol> <li> <p>An administrator who wants to configure user pools, app clients, users, groups, or other user pool functions.</p> </li> <li> <p>A server-side app, like a web application, that wants to use its Amazon Web Services privileges to manage, authenticate, or authorize a user.</p> </li> <li> <p>A client-side app, like a mobile app, that wants to make unauthenticated requests to manage, authenticate, or authorize a user.</p> </li> </ol> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flows-public-server-side.html#user-pools-API-operations\">Understanding API, OIDC, and managed login pages authentication</a> in the <i>Amazon Cognito Developer Guide</i>.</p> <p>With your Amazon Web Services SDK, you can build the logic to support operational flows in every use case for this API. You can also make direct REST API requests to <a href=\"https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_your_user_pools_region\">Amazon Cognito user pools service endpoints</a>. The following links can get you started with the <code>CognitoIdentityProvider</code> client in supported Amazon Web Services SDKs.</p> <p>To get started with an Amazon Web Services SDK, see <a href=\"http://aws.amazon.com/developer/tools/\">Tools to Build on Amazon Web Services</a>. For example actions and scenarios, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples_cognito-identity-provider.html\">Code examples for Amazon Cognito Identity Provider using Amazon Web Services SDKs</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-sync/2014-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/cognito-sync/2014-06-30/service-2.json 2.31.35-1/awscli/botocore/data/cognito-sync/2014-06-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/cognito-sync/2014-06-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cognito-sync/2014-06-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,10 +5,12 @@
     "endpointPrefix":"cognito-sync",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Cognito Sync",
     "serviceId":"Cognito Sync",
     "signatureVersion":"v4",
-    "uid":"cognito-sync-2014-06-30"
+    "uid":"cognito-sync-2014-06-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BulkPublish":{
@@ -1350,8 +1352,7 @@
     },
     "SubscribeToDatasetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Response to a SubscribeToDataset request.</p>"
     },
     "SyncSessionToken":{"type":"string"},
@@ -1406,8 +1407,7 @@
     },
     "UnsubscribeFromDatasetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Response to an UnsubscribeFromDataset request.</p>"
     },
     "UpdateRecordsRequest":{
diff -pruN 2.23.6-1/awscli/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/comprehend/2017-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/comprehend/2017-11-27/service-2.json 2.31.35-1/awscli/botocore/data/comprehend/2017-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/comprehend/2017-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/comprehend/2017-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"comprehend",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Comprehend",
     "serviceId":"Comprehend",
     "signatureVersion":"v4",
     "signingName":"comprehend",
     "targetPrefix":"Comprehend_20171127",
-    "uid":"comprehend-2017-11-27"
+    "uid":"comprehend-2017-11-27",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchDetectDominantLanguage":{
@@ -2650,8 +2652,7 @@
     },
     "DeleteDocumentClassifierResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEndpointRequest":{
       "type":"structure",
@@ -2665,8 +2666,7 @@
     },
     "DeleteEndpointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEntityRecognizerRequest":{
       "type":"structure",
@@ -2680,8 +2680,7 @@
     },
     "DeleteEntityRecognizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFlywheelRequest":{
       "type":"structure",
@@ -2695,8 +2694,7 @@
     },
     "DeleteFlywheelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourcePolicyRequest":{
       "type":"structure",
@@ -2714,8 +2712,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDatasetRequest":{
       "type":"structure",
@@ -7116,8 +7113,7 @@
     },
     "StopTrainingDocumentClassifierResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopTrainingEntityRecognizerRequest":{
       "type":"structure",
@@ -7131,8 +7127,7 @@
     },
     "StopTrainingEntityRecognizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{
       "type":"string",
@@ -7238,8 +7233,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7610,8 +7604,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataSecurityConfig":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/comprehendmedical/2018-10-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/comprehendmedical/2018-10-30/service-2.json 2.31.35-1/awscli/botocore/data/comprehendmedical/2018-10-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/comprehendmedical/2018-10-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/comprehendmedical/2018-10-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,13 +5,15 @@
     "endpointPrefix":"comprehendmedical",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"ComprehendMedical",
     "serviceFullName":"AWS Comprehend Medical",
     "serviceId":"ComprehendMedical",
     "signatureVersion":"v4",
     "signingName":"comprehendmedical",
     "targetPrefix":"ComprehendMedical_20181030",
-    "uid":"comprehendmedical-2018-10-30"
+    "uid":"comprehendmedical-2018-10-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DescribeEntitiesDetectionV2Job":{
diff -pruN 2.23.6-1/awscli/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/compute-optimizer/2019-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json 2.31.35-1/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/compute-optimizer/2019-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -213,7 +213,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p> Export optimization recommendations for your Amazon Relational Database Service (Amazon RDS). </p> <p>Recommendations are exported in a comma-separated values (CSV) file, and its metadata in a JavaScript Object Notation (JSON) file, to an existing Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more information, see <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html\">Exporting Recommendations</a> in the <i>Compute Optimizer User Guide</i>.</p> <p>You can have only one Amazon RDS export job in progress per Amazon Web Services Region.</p>"
+      "documentation":"<p> Export optimization recommendations for your Amazon Aurora and Amazon Relational Database Service (Amazon RDS) databases. </p> <p>Recommendations are exported in a comma-separated values (CSV) file, and its metadata in a JavaScript Object Notation (JSON) file, to an existing Amazon Simple Storage Service (Amazon S3) bucket that you specify. For more information, see <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/exporting-recommendations.html\">Exporting Recommendations</a> in the <i>Compute Optimizer User Guide</i>.</p> <p>You can have only one Amazon Aurora or RDS export job in progress per Amazon Web Services Region.</p>"
     },
     "GetAutoScalingGroupRecommendations":{
       "name":"GetAutoScalingGroupRecommendations",
@@ -469,7 +469,7 @@
         {"shape":"MissingAuthenticationToken"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Returns the projected metrics of Amazon RDS recommendations. </p>"
+      "documentation":"<p> Returns the projected metrics of Aurora and RDS database recommendations. </p>"
     },
     "GetRDSDatabaseRecommendations":{
       "name":"GetRDSDatabaseRecommendations",
@@ -489,7 +489,7 @@
         {"shape":"MissingAuthenticationToken"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> Returns Amazon RDS recommendations. </p> <p>Compute Optimizer generates recommendations for Amazon RDS that meet a specific set of requirements. For more information, see the <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html\">Supported resources and requirements</a> in the <i>Compute Optimizer User Guide</i>.</p>"
+      "documentation":"<p> Returns Amazon Aurora and RDS database recommendations. </p> <p>Compute Optimizer generates recommendations for Amazon Aurora and RDS databases that meet a specific set of requirements. For more information, see the <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html\">Supported resources and requirements</a> in the <i>Compute Optimizer User Guide</i>.</p>"
     },
     "GetRecommendationPreferences":{
       "name":"GetRecommendationPreferences",
@@ -528,7 +528,7 @@
         {"shape":"MissingAuthenticationToken"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns the optimization findings for an account.</p> <p>It returns the number of:</p> <ul> <li> <p>Amazon EC2 instances in an account that are <code>Underprovisioned</code>, <code>Overprovisioned</code>, or <code>Optimized</code>.</p> </li> <li> <p>Auto Scaling groups in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Amazon EBS volumes in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Lambda functions in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Amazon ECS services in an account that are <code>Underprovisioned</code>, <code>Overprovisioned</code>, or <code>Optimized</code>.</p> </li> </ul>"
+      "documentation":"<p>Returns the optimization findings for an account.</p> <p>It returns the number of:</p> <ul> <li> <p>Amazon EC2 instances in an account that are <code>Underprovisioned</code>, <code>Overprovisioned</code>, or <code>Optimized</code>.</p> </li> <li> <p>EC2Auto Scaling groups in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Amazon EBS volumes in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Lambda functions in an account that are <code>NotOptimized</code>, or <code>Optimized</code>.</p> </li> <li> <p>Amazon ECS services in an account that are <code>Underprovisioned</code>, <code>Overprovisioned</code>, or <code>Optimized</code>.</p> </li> <li> <p>Commercial software licenses in an account that are <code>InsufficientMetrics</code>, <code>NotOptimized</code> or <code>Optimized</code>.</p> </li> <li> <p>Amazon Aurora and Amazon RDS databases in an account that are <code>Underprovisioned</code>, <code>Overprovisioned</code>, <code>Optimized</code>, or <code>NotOptimized</code>.</p> </li> </ul>"
     },
     "PutRecommendationPreferences":{
       "name":"PutRecommendationPreferences",
@@ -952,23 +952,23 @@
       "members":{
         "storageType":{
           "shape":"StorageType",
-          "documentation":"<p> The type of RDS storage. </p>"
+          "documentation":"<p> The type of DB storage. </p>"
         },
         "allocatedStorage":{
           "shape":"AllocatedStorage",
-          "documentation":"<p> The size of the RDS storage in gigabytes (GB). </p>"
+          "documentation":"<p> The size of the DB storage in gigabytes (GB). </p>"
         },
         "iops":{
           "shape":"NullableIOPS",
-          "documentation":"<p> The provisioned IOPs of the RDS storage. </p>"
+          "documentation":"<p> The provisioned IOPs of the DB storage. </p>"
         },
         "maxAllocatedStorage":{
           "shape":"NullableMaxAllocatedStorage",
-          "documentation":"<p> The maximum limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the RDS instance. </p>"
+          "documentation":"<p> The maximum limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance. </p>"
         },
         "storageThroughput":{
           "shape":"NullableStorageThroughput",
-          "documentation":"<p> The storage throughput of the RDS storage. </p>"
+          "documentation":"<p> The storage throughput of the DB storage. </p>"
         }
       },
       "documentation":"<p> The configuration of the recommended RDS storage. </p>"
@@ -996,8 +996,7 @@
     },
     "DeleteRecommendationPreferencesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeRecommendationExportJobsRequest":{
       "type":"structure",
@@ -1877,11 +1876,11 @@
       "members":{
         "accountIds":{
           "shape":"AccountIds",
-          "documentation":"<p> The Amazon Web Services account IDs for the export Amazon RDS recommendations. </p> <p>If your account is the management account or the delegated administrator of an organization, use this parameter to specify the member account you want to export recommendations to.</p> <p>This parameter can't be specified together with the include member accounts parameter. The parameters are mutually exclusive.</p> <p>If this parameter or the include member accounts parameter is omitted, the recommendations for member accounts aren't included in the export.</p> <p>You can specify multiple account IDs per request.</p>"
+          "documentation":"<p> The Amazon Web Services account IDs for the export Amazon Aurora and RDS database recommendations. </p> <p>If your account is the management account or the delegated administrator of an organization, use this parameter to specify the member account you want to export recommendations to.</p> <p>This parameter can't be specified together with the include member accounts parameter. The parameters are mutually exclusive.</p> <p>If this parameter or the include member accounts parameter is omitted, the recommendations for member accounts aren't included in the export.</p> <p>You can specify multiple account IDs per request.</p>"
         },
         "filters":{
           "shape":"RDSDBRecommendationFilters",
-          "documentation":"<p> An array of objects to specify a filter that exports a more specific set of Amazon RDS recommendations. </p>"
+          "documentation":"<p> An array of objects to specify a filter that exports a more specific set of Amazon Aurora and RDS recommendations. </p>"
         },
         "fieldsToExport":{
           "shape":"ExportableRDSDBFields",
@@ -2216,15 +2215,20 @@
         "EngineVersion",
         "Idle",
         "MultiAZDBInstance",
+        "ClusterWriter",
         "CurrentDBInstanceClass",
         "CurrentStorageConfigurationStorageType",
         "CurrentStorageConfigurationAllocatedStorage",
         "CurrentStorageConfigurationMaxAllocatedStorage",
         "CurrentStorageConfigurationIOPS",
         "CurrentStorageConfigurationStorageThroughput",
+        "CurrentStorageEstimatedMonthlyVolumeIOPsCostVariation",
         "CurrentInstanceOnDemandHourlyPrice",
         "CurrentStorageOnDemandMonthlyPrice",
         "LookbackPeriodInDays",
+        "CurrentStorageEstimatedClusterInstanceOnDemandMonthlyCost",
+        "CurrentStorageEstimatedClusterStorageOnDemandMonthlyCost",
+        "CurrentStorageEstimatedClusterStorageIOOnDemandMonthlyCost",
         "CurrentInstancePerformanceRisk",
         "UtilizationMetricsCpuMaximum",
         "UtilizationMetricsMemoryMaximum",
@@ -2244,6 +2248,9 @@
         "UtilizationMetricsAuroraMemoryNumKillQueryTotalMaximum",
         "UtilizationMetricsReadIOPSEphemeralStorageMaximum",
         "UtilizationMetricsWriteIOPSEphemeralStorageMaximum",
+        "UtilizationMetricsVolumeBytesUsedAverage",
+        "UtilizationMetricsVolumeReadIOPsAverage",
+        "UtilizationMetricsVolumeWriteIOPsAverage",
         "InstanceFinding",
         "InstanceFindingReasonCodes",
         "StorageFinding",
@@ -2258,6 +2265,7 @@
         "StorageRecommendationOptionsIOPS",
         "StorageRecommendationOptionsStorageThroughput",
         "StorageRecommendationOptionsRank",
+        "StorageRecommendationOptionsEstimatedMonthlyVolumeIOPsCostVariation",
         "InstanceRecommendationOptionsInstanceOnDemandHourlyPrice",
         "InstanceRecommendationOptionsSavingsOpportunityPercentage",
         "InstanceRecommendationOptionsEstimatedMonthlySavingsCurrency",
@@ -2266,6 +2274,9 @@
         "InstanceRecommendationOptionsEstimatedMonthlySavingsCurrencyAfterDiscounts",
         "InstanceRecommendationOptionsEstimatedMonthlySavingsValueAfterDiscounts",
         "StorageRecommendationOptionsOnDemandMonthlyPrice",
+        "StorageRecommendationOptionsEstimatedClusterInstanceOnDemandMonthlyCost",
+        "StorageRecommendationOptionsEstimatedClusterStorageOnDemandMonthlyCost",
+        "StorageRecommendationOptionsEstimatedClusterStorageIOOnDemandMonthlyCost",
         "StorageRecommendationOptionsSavingsOpportunityPercentage",
         "StorageRecommendationOptionsEstimatedMonthlySavingsCurrency",
         "StorageRecommendationOptionsEstimatedMonthlySavingsValue",
@@ -2737,8 +2748,7 @@
     },
     "GetEnrollmentStatusRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetEnrollmentStatusResponse":{
       "type":"structure",
@@ -2933,7 +2943,7 @@
       "members":{
         "resourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p> The ARN that identifies the Amazon RDS. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p>"
+          "documentation":"<p> The ARN that identifies the Amazon Aurora or RDS database. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p>"
         },
         "stat":{
           "shape":"MetricStatistic",
@@ -2968,23 +2978,23 @@
       "members":{
         "resourceArns":{
           "shape":"ResourceArns",
-          "documentation":"<p> The ARN that identifies the Amazon RDS. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p> <p> The following is the format of a DB Cluster ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:cluster:{resourceName}</code> </p>"
+          "documentation":"<p> The ARN that identifies the Amazon Aurora or RDS database. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p> <p> The following is the format of a DB Cluster ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:cluster:{resourceName}</code> </p>"
         },
         "nextToken":{
           "shape":"NextToken",
-          "documentation":"<p> The token to advance to the next page of Amazon RDS recommendations. </p>"
+          "documentation":"<p> The token to advance to the next page of Amazon Aurora and RDS database recommendations. </p>"
         },
         "maxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of Amazon RDS recommendations to return with a single request.</p> <p>To retrieve the remaining results, make another request with the returned <code>nextToken</code> value.</p>"
+          "documentation":"<p>The maximum number of Amazon Aurora and RDS database recommendations to return with a single request.</p> <p>To retrieve the remaining results, make another request with the returned <code>nextToken</code> value.</p>"
         },
         "filters":{
           "shape":"RDSDBRecommendationFilters",
-          "documentation":"<p> An array of objects to specify a filter that returns a more specific list of Amazon RDS recommendations. </p>"
+          "documentation":"<p> An array of objects to specify a filter that returns a more specific list of Amazon Aurora and RDS database recommendations. </p>"
         },
         "accountIds":{
           "shape":"AccountIds",
-          "documentation":"<p> Return the Amazon RDS recommendations to the specified Amazon Web Services account IDs. </p> <p>If your account is the management account or the delegated administrator of an organization, use this parameter to return the Amazon RDS recommendations to specific member accounts.</p> <p>You can only specify one account ID per request.</p>"
+          "documentation":"<p> Return the Amazon Aurora and RDS database recommendations to the specified Amazon Web Services account IDs. </p> <p>If your account is the management account or the delegated administrator of an organization, use this parameter to return the Amazon Aurora and RDS database recommendations to specific member accounts.</p> <p>You can only specify one account ID per request.</p>"
         },
         "recommendationPreferences":{"shape":"RecommendationPreferences"}
       }
@@ -2994,11 +3004,11 @@
       "members":{
         "nextToken":{
           "shape":"NextToken",
-          "documentation":"<p> The token to advance to the next page of Amazon RDS recommendations. </p>"
+          "documentation":"<p> The token to advance to the next page of Amazon Aurora and RDS database recommendations. </p>"
         },
         "rdsDBRecommendations":{
           "shape":"RDSDBRecommendations",
-          "documentation":"<p> An array of objects that describe the Amazon RDS recommendations. </p>"
+          "documentation":"<p> An array of objects that describe the Amazon Aurora and RDS database recommendations. </p>"
         },
         "errors":{
           "shape":"GetRecommendationErrors",
@@ -4431,8 +4441,7 @@
     },
     "PutRecommendationPreferencesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RDSCurrentInstancePerformanceRisk":{
       "type":"string",
@@ -4448,27 +4457,27 @@
       "members":{
         "dbInstanceClass":{
           "shape":"DBInstanceClass",
-          "documentation":"<p> Describes the DB instance class recommendation option for your Amazon RDS instance. </p>"
+          "documentation":"<p> Describes the DB instance class recommendation option for your Amazon Aurora or RDS database. </p>"
         },
         "projectedUtilizationMetrics":{
           "shape":"RDSDBProjectedUtilizationMetrics",
-          "documentation":"<p> An array of objects that describe the projected utilization metrics of the RDS instance recommendation option. </p>"
+          "documentation":"<p> An array of objects that describe the projected utilization metrics of the DB instance recommendation option. </p>"
         },
         "performanceRisk":{
           "shape":"PerformanceRisk",
-          "documentation":"<p> The performance risk of the RDS instance recommendation option. </p>"
+          "documentation":"<p> The performance risk of the DB instance recommendation option. </p>"
         },
         "rank":{
           "shape":"Rank",
-          "documentation":"<p> The rank identifier of the RDS instance recommendation option. </p>"
+          "documentation":"<p> The rank identifier of the DB instance recommendation option. </p>"
         },
         "savingsOpportunity":{"shape":"SavingsOpportunity"},
         "savingsOpportunityAfterDiscounts":{
           "shape":"RDSInstanceSavingsOpportunityAfterDiscounts",
-          "documentation":"<p> Describes the savings opportunity for Amazon RDS recommendations or for the recommendation option. </p> <p>Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation.</p>"
+          "documentation":"<p> Describes the savings opportunity for Amazon Aurora and RDS database recommendations or for the recommendation option. </p> <p>Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation.</p>"
         }
       },
-      "documentation":"<p> Describes the recommendation options for an Amazon RDS instance. </p>"
+      "documentation":"<p> Describes the recommendation options for a DB instance. </p>"
     },
     "RDSDBInstanceRecommendationOptions":{
       "type":"list",
@@ -4494,7 +4503,10 @@
         "AuroraMemoryNumKillConnTotal",
         "AuroraMemoryNumKillQueryTotal",
         "ReadIOPSEphemeralStorage",
-        "WriteIOPSEphemeralStorage"
+        "WriteIOPSEphemeralStorage",
+        "VolumeReadIOPs",
+        "VolumeBytesUsed",
+        "VolumeWriteIOPs"
       ]
     },
     "RDSDBMetricStatistic":{
@@ -4514,15 +4526,15 @@
       "members":{
         "resourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p> The ARN of the current Amazon RDS. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p>"
+          "documentation":"<p> The ARN of the current Amazon Aurora or RDS database. </p> <p> The following is the format of the ARN: </p> <p> <code>arn:aws:rds:{region}:{accountId}:db:{resourceName}</code> </p>"
         },
         "accountId":{
           "shape":"AccountId",
-          "documentation":"<p> The Amazon Web Services account ID of the Amazon RDS. </p>"
+          "documentation":"<p> The Amazon Web Services account ID of the Amazon Aurora or RDS database. </p>"
         },
         "engine":{
           "shape":"Engine",
-          "documentation":"<p> The engine of the RDS instance. </p>"
+          "documentation":"<p> The engine of the DB instance. </p>"
         },
         "engineVersion":{
           "shape":"EngineVersion",
@@ -4534,11 +4546,11 @@
         },
         "currentDBInstanceClass":{
           "shape":"CurrentDBInstanceClass",
-          "documentation":"<p> The DB instance class of the current RDS instance. </p>"
+          "documentation":"<p> The DB instance class of the current Aurora or RDS DB instance. </p>"
         },
         "currentStorageConfiguration":{
           "shape":"DBStorageConfiguration",
-          "documentation":"<p> The configuration of the current RDS storage. </p>"
+          "documentation":"<p> The configuration of the current DB storage. </p>"
         },
         "dbClusterIdentifier":{
           "shape":"DBClusterIdentifier",
@@ -4546,72 +4558,76 @@
         },
         "idle":{
           "shape":"Idle",
-          "documentation":"<p> This indicates if the RDS instance is idle or not. </p>"
+          "documentation":"<p> This indicates if the DB instance is idle or not. </p>"
         },
         "instanceFinding":{
           "shape":"RDSInstanceFinding",
-          "documentation":"<p> The finding classification of an Amazon RDS instance. </p> <p>Findings for Amazon RDS instance include:</p> <ul> <li> <p> <b> <code>Underprovisioned</code> </b> — When Compute Optimizer detects that there’s not enough resource specifications, an Amazon RDS is considered under-provisioned.</p> </li> <li> <p> <b> <code>Overprovisioned</code> </b> — When Compute Optimizer detects that there’s excessive resource specifications, an Amazon RDS is considered over-provisioned.</p> </li> <li> <p> <b> <code>Optimized</code> </b> — When the specifications of your Amazon RDS instance meet the performance requirements of your workload, the service is considered optimized.</p> </li> </ul>"
+          "documentation":"<p> The finding classification of an Amazon Aurora and RDS DB instance. </p> <p>For more information about finding classifications, see <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-rds-recommendations.html#rds-recommendations-findings\"> Finding classifications for Aurora and RDS databases</a> in the <i>Compute Optimizer User Guide</i>.</p>"
         },
         "storageFinding":{
           "shape":"RDSStorageFinding",
-          "documentation":"<p> The finding classification of Amazon RDS storage. </p> <p>Findings for Amazon RDS instance include:</p> <ul> <li> <p> <b> <code>Underprovisioned</code> </b> — When Compute Optimizer detects that there’s not enough storage, an Amazon RDS is considered under-provisioned.</p> </li> <li> <p> <b> <code>Overprovisioned</code> </b> — When Compute Optimizer detects that there’s excessive storage, an Amazon RDS is considered over-provisioned.</p> </li> <li> <p> <b> <code>Optimized</code> </b> — When the storage of your Amazon RDS meet the performance requirements of your workload, the service is considered optimized.</p> </li> </ul>"
+          "documentation":"<p> The finding classification of Amazon RDS DB instance storage. </p> <p>For more information about finding classifications, see <a href=\"https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-rds-recommendations.html#rds-recommendations-findings\"> Finding classifications for Aurora and RDS databases</a> in the <i>Compute Optimizer User Guide</i>.</p>"
         },
         "instanceFindingReasonCodes":{
           "shape":"RDSInstanceFindingReasonCodes",
-          "documentation":"<p> The reason for the finding classification of an Amazon RDS instance. </p>"
+          "documentation":"<p> The reason for the finding classification of a DB instance. </p>"
         },
         "currentInstancePerformanceRisk":{
           "shape":"RDSCurrentInstancePerformanceRisk",
           "documentation":"<p>The performance risk for the current DB instance.</p>"
         },
+        "currentStorageEstimatedMonthlyVolumeIOPsCostVariation":{
+          "shape":"RDSEstimatedMonthlyVolumeIOPsCostVariation",
+          "documentation":"<p> The level of variation in monthly I/O costs for the current DB storage configuration. </p>"
+        },
         "storageFindingReasonCodes":{
           "shape":"RDSStorageFindingReasonCodes",
-          "documentation":"<p> The reason for the finding classification of Amazon RDS storage. </p>"
+          "documentation":"<p> The reason for the finding classification of RDS DB instance storage. </p>"
         },
         "instanceRecommendationOptions":{
           "shape":"RDSDBInstanceRecommendationOptions",
-          "documentation":"<p> An array of objects that describe the recommendation options for the Amazon RDS instance. </p>"
+          "documentation":"<p> An array of objects that describe the recommendation options for the RDS DB instance. </p>"
         },
         "storageRecommendationOptions":{
           "shape":"RDSDBStorageRecommendationOptions",
-          "documentation":"<p> An array of objects that describe the recommendation options for Amazon RDS storage. </p>"
+          "documentation":"<p> An array of objects that describe the recommendation options for DB instance storage. </p>"
         },
         "utilizationMetrics":{
           "shape":"RDSDBUtilizationMetrics",
-          "documentation":"<p> An array of objects that describe the utilization metrics of the Amazon RDS. </p>"
+          "documentation":"<p> An array of objects that describe the utilization metrics of the DB instance. </p>"
         },
         "effectiveRecommendationPreferences":{
           "shape":"RDSEffectiveRecommendationPreferences",
-          "documentation":"<p> Describes the effective recommendation preferences for Amazon RDS. </p>"
+          "documentation":"<p> Describes the effective recommendation preferences for DB instances. </p>"
         },
         "lookbackPeriodInDays":{
           "shape":"LookBackPeriodInDays",
-          "documentation":"<p> The number of days the Amazon RDS utilization metrics were analyzed. </p>"
+          "documentation":"<p> The number of days the DB instance utilization metrics were analyzed. </p>"
         },
         "lastRefreshTimestamp":{
           "shape":"LastRefreshTimestamp",
-          "documentation":"<p> The timestamp of when the Amazon RDS recommendation was last generated. </p>"
+          "documentation":"<p> The timestamp of when the DB instance recommendation was last generated. </p>"
         },
         "tags":{
           "shape":"Tags",
-          "documentation":"<p> A list of tags assigned to your Amazon RDS recommendations. </p>"
+          "documentation":"<p> A list of tags assigned to your DB instance recommendations. </p>"
         }
       },
-      "documentation":"<p> Describes an Amazon RDS recommendation. </p>"
+      "documentation":"<p> Describes an Amazon Aurora and RDS database recommendation. </p>"
     },
     "RDSDBRecommendationFilter":{
       "type":"structure",
       "members":{
         "name":{
           "shape":"RDSDBRecommendationFilterName",
-          "documentation":"<p> The name of the filter. </p> <p> Specify <code>Finding</code> to return recommendations with a specific finding classification. </p> <p>You can filter your Amazon RDS recommendations by <code>tag:key</code> and <code>tag-key</code> tags.</p> <p>A <code>tag:key</code> is a key and value combination of a tag assigned to your Amazon RDS recommendations. Use the tag key in the filter name and the tag value as the filter value. For example, to find all Amazon RDS service recommendations that have a tag with the key of <code>Owner</code> and the value of <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> <p>A <code>tag-key</code> is the key of a tag assigned to your Amazon RDS recommendations. Use this filter to find all of your Amazon RDS recommendations that have a tag with a specific key. This doesn’t consider the tag value. For example, you can find your Amazon RDS service recommendations with a tag key value of <code>Owner</code> or without any tag keys assigned.</p>"
+          "documentation":"<p> The name of the filter. </p> <p> Specify <code>Finding</code> to return recommendations with a specific finding classification. </p> <p>You can filter your DB instance recommendations by <code>tag:key</code> and <code>tag-key</code> tags.</p> <p>A <code>tag:key</code> is a key and value combination of a tag assigned to your DB instance recommendations. Use the tag key in the filter name and the tag value as the filter value. For example, to find all DB instance recommendations that have a tag with the key of <code>Owner</code> and the value of <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> <p>A <code>tag-key</code> is the key of a tag assigned to your DB instance recommendations. Use this filter to find all of your DB instance recommendations that have a tag with a specific key. This doesn’t consider the tag value. For example, you can find your DB instance recommendations with a tag key value of <code>Owner</code> or without any tag keys assigned.</p>"
         },
         "values":{
           "shape":"FilterValues",
           "documentation":"<p> The value of the filter. </p>"
         }
       },
-      "documentation":"<p> Describes a filter that returns a more specific list of Amazon RDS recommendations. Use this filter with the <a>GetECSServiceRecommendations</a> action. </p>"
+      "documentation":"<p> Describes a filter that returns a more specific list of DB instance recommendations. Use this filter with the <a>GetECSServiceRecommendations</a> action. </p>"
     },
     "RDSDBRecommendationFilterName":{
       "type":"string",
@@ -4640,15 +4656,19 @@
         },
         "rank":{
           "shape":"Rank",
-          "documentation":"<p> The rank identifier of the RDS storage recommendation option. </p>"
+          "documentation":"<p> The rank identifier of the DB storage recommendation option. </p>"
         },
         "savingsOpportunity":{"shape":"SavingsOpportunity"},
         "savingsOpportunityAfterDiscounts":{
           "shape":"RDSStorageSavingsOpportunityAfterDiscounts",
-          "documentation":"<p> Describes the savings opportunity for Amazon RDS storage recommendations or for the recommendation option. </p> <p> Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation. </p>"
+          "documentation":"<p> Describes the savings opportunity for DB storage recommendations or for the recommendation option. </p> <p> Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation. </p>"
+        },
+        "estimatedMonthlyVolumeIOPsCostVariation":{
+          "shape":"RDSEstimatedMonthlyVolumeIOPsCostVariation",
+          "documentation":"<p> The projected level of variation in monthly I/O costs for the DB storage recommendation option. </p>"
         }
       },
-      "documentation":"<p> Describes the recommendation options for Amazon RDS storage. </p>"
+      "documentation":"<p> Describes the recommendation options for DB storage. </p>"
     },
     "RDSDBStorageRecommendationOptions":{
       "type":"list",
@@ -4670,7 +4690,7 @@
           "documentation":"<p> The value of the utilization metric. </p>"
         }
       },
-      "documentation":"<p> Describes the utilization metric of an Amazon RDS. </p> <p> To determine the performance difference between your current Amazon RDS and the recommended option, compare the utilization metric data of your service against its projected utilization metric data. </p>"
+      "documentation":"<p> Describes the utilization metric of an Amazon Aurora and RDS database. </p> <p> To determine the performance difference between your current DB instance and the recommended option, compare the utilization metric data of your service against its projected utilization metric data. </p>"
     },
     "RDSDBUtilizationMetrics":{
       "type":"list",
@@ -4692,7 +4712,7 @@
           "documentation":"<p> The values for the projected metric. </p>"
         }
       },
-      "documentation":"<p> Describes the projected metrics of an Amazon RDS recommendation option. </p> <p> To determine the performance difference between your current Amazon RDS and the recommended option, compare the metric data of your service against its projected metric data. </p>"
+      "documentation":"<p> Describes the projected metrics of an Amazon Aurora and RDS database recommendation option. </p> <p> To determine the performance difference between your current Amazon Aurora and RDS database and the recommended option, compare the metric data of your service against its projected metric data. </p>"
     },
     "RDSDatabaseProjectedMetrics":{
       "type":"list",
@@ -4703,18 +4723,18 @@
       "members":{
         "recommendedDBInstanceClass":{
           "shape":"RecommendedDBInstanceClass",
-          "documentation":"<p> The recommended DB instance class for the Amazon RDS. </p>"
+          "documentation":"<p> The recommended DB instance class for the Amazon Aurora or RDS database. </p>"
         },
         "rank":{
           "shape":"Rank",
-          "documentation":"<p> The rank identifier of the RDS instance recommendation option. </p>"
+          "documentation":"<p> The rank identifier of the Amazon Aurora or RDS DB instance recommendation option. </p>"
         },
         "projectedMetrics":{
           "shape":"RDSDatabaseProjectedMetrics",
           "documentation":"<p> An array of objects that describe the projected metric. </p>"
         }
       },
-      "documentation":"<p> Describes the projected metrics of an Amazon RDS recommendation option. </p> <p> To determine the performance difference between your current Amazon RDS and the recommended option, compare the metric data of your service against its projected metric data. </p>"
+      "documentation":"<p> Describes the projected metrics of an Amazon Aurora and RDS database recommendation option. </p> <p> To determine the performance difference between your current Amazon Aurora and RDS database and the recommended option, compare the metric data of your service against its projected metric data. </p>"
     },
     "RDSDatabaseRecommendedOptionProjectedMetrics":{
       "type":"list",
@@ -4725,7 +4745,7 @@
       "members":{
         "cpuVendorArchitectures":{
           "shape":"CpuVendorArchitectures",
-          "documentation":"<p> Describes the CPU vendor and architecture for Amazon RDS recommendations. </p>"
+          "documentation":"<p> Describes the CPU vendor and architecture for DB instance recommendations. </p>"
         },
         "enhancedInfrastructureMetrics":{
           "shape":"EnhancedInfrastructureMetrics",
@@ -4733,14 +4753,23 @@
         },
         "lookBackPeriod":{
           "shape":"LookBackPeriodPreference",
-          "documentation":"<p> The number of days the utilization metrics of the Amazon RDS are analyzed. </p>"
+          "documentation":"<p> The number of days the utilization metrics of the DB instance are analyzed. </p>"
         },
         "savingsEstimationMode":{
           "shape":"RDSSavingsEstimationMode",
-          "documentation":"<p> Describes the savings estimation mode preference applied for calculating savings opportunity for Amazon RDS. </p>"
+          "documentation":"<p> Describes the savings estimation mode preference applied for calculating savings opportunity for DB instances. </p>"
         }
       },
-      "documentation":"<p> Describes the effective recommendation preferences for Amazon RDS. </p>"
+      "documentation":"<p> Describes the effective recommendation preferences for Amazon Aurora and RDS databases. </p>"
+    },
+    "RDSEstimatedMonthlyVolumeIOPsCostVariation":{
+      "type":"string",
+      "enum":[
+        "None",
+        "Low",
+        "Medium",
+        "High"
+      ]
     },
     "RDSInstanceEstimatedMonthlySavings":{
       "type":"structure",
@@ -4751,10 +4780,10 @@
         },
         "value":{
           "shape":"Value",
-          "documentation":"<p> The value of the estimated monthly savings for Amazon RDS instances. </p>"
+          "documentation":"<p> The value of the estimated monthly savings for DB instances. </p>"
         }
       },
-      "documentation":"<p> Describes the estimated monthly savings possible for Amazon RDS instances by adopting Compute Optimizer recommendations. This is based on Amazon RDS pricing after applying Savings Plans discounts. </p>"
+      "documentation":"<p> Describes the estimated monthly savings possible for DB instances by adopting Compute Optimizer recommendations. This is based on DB instance pricing after applying Savings Plans discounts. </p>"
     },
     "RDSInstanceFinding":{
       "type":"string",
@@ -4792,24 +4821,24 @@
       "members":{
         "savingsOpportunityPercentage":{
           "shape":"SavingsOpportunityPercentage",
-          "documentation":"<p> The estimated monthly savings possible as a percentage of monthly cost by adopting Compute Optimizer’s Amazon RDS instance recommendations. This includes any applicable Savings Plans discounts. </p>"
+          "documentation":"<p> The estimated monthly savings possible as a percentage of monthly cost by adopting Compute Optimizer’s DB instance recommendations. This includes any applicable Savings Plans discounts. </p>"
         },
         "estimatedMonthlySavings":{
           "shape":"RDSInstanceEstimatedMonthlySavings",
-          "documentation":"<p> The estimated monthly savings possible by adopting Compute Optimizer’s Amazon RDS instance recommendations. This includes any applicable Savings Plans discounts. </p>"
+          "documentation":"<p> The estimated monthly savings possible by adopting Compute Optimizer’s DB instance recommendations. This includes any applicable Savings Plans discounts. </p>"
         }
       },
-      "documentation":"<p> Describes the savings opportunity for Amazon RDS instance recommendations after applying Savings Plans discounts. </p> <p> Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation. </p>"
+      "documentation":"<p> Describes the savings opportunity for DB instance recommendations after applying Savings Plans discounts. </p> <p> Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation. </p>"
     },
     "RDSSavingsEstimationMode":{
       "type":"structure",
       "members":{
         "source":{
           "shape":"RDSSavingsEstimationModeSource",
-          "documentation":"<p> Describes the source for calculating the savings opportunity for Amazon RDS. </p>"
+          "documentation":"<p> Describes the source for calculating the savings opportunity for DB instances. </p>"
         }
       },
-      "documentation":"<p> Describes the savings estimation mode used for calculating savings opportunity for Amazon RDS. </p>"
+      "documentation":"<p> Describes the savings estimation mode used for calculating savings opportunity for DB instances. </p>"
     },
     "RDSSavingsEstimationModeSource":{
       "type":"string",
@@ -4828,17 +4857,18 @@
         },
         "value":{
           "shape":"Value",
-          "documentation":"<p> The value of the estimated monthly savings for Amazon RDS storage. </p>"
+          "documentation":"<p> The value of the estimated monthly savings for DB instance storage. </p>"
         }
       },
-      "documentation":"<p> Describes the estimated monthly savings possible for Amazon RDS storage by adopting Compute Optimizer recommendations. This is based on Amazon RDS pricing after applying Savings Plans discounts. </p>"
+      "documentation":"<p> Describes the estimated monthly savings possible for DB instance storage by adopting Compute Optimizer recommendations. This is based on DB instance pricing after applying Savings Plans discounts. </p>"
     },
     "RDSStorageFinding":{
       "type":"string",
       "enum":[
         "Optimized",
         "Underprovisioned",
-        "Overprovisioned"
+        "Overprovisioned",
+        "NotOptimized"
       ]
     },
     "RDSStorageFindingReasonCode":{
@@ -4848,7 +4878,9 @@
         "EBSVolumeThroughputUnderprovisioned",
         "EBSVolumeIOPSOverprovisioned",
         "EBSVolumeThroughputOverprovisioned",
-        "NewGenerationStorageTypeAvailable"
+        "NewGenerationStorageTypeAvailable",
+        "DBClusterStorageOptionAvailable",
+        "DBClusterStorageSavingsAvailable"
       ]
     },
     "RDSStorageFindingReasonCodes":{
@@ -4860,11 +4892,11 @@
       "members":{
         "savingsOpportunityPercentage":{
           "shape":"SavingsOpportunityPercentage",
-          "documentation":"<p> The estimated monthly savings possible as a percentage of monthly cost by adopting Compute Optimizer’s Amazon RDS storage recommendations. This includes any applicable Savings Plans discounts. </p>"
+          "documentation":"<p> The estimated monthly savings possible as a percentage of monthly cost by adopting Compute Optimizer’s DB instance storage recommendations. This includes any applicable Savings Plans discounts. </p>"
         },
         "estimatedMonthlySavings":{
           "shape":"RDSStorageEstimatedMonthlySavings",
-          "documentation":"<p> The estimated monthly savings possible by adopting Compute Optimizer’s Amazon RDS storage recommendations. This includes any applicable Savings Plans discounts. </p>"
+          "documentation":"<p> The estimated monthly savings possible by adopting Compute Optimizer’s DB instance storage recommendations. This includes any applicable Savings Plans discounts. </p>"
         }
       },
       "documentation":"<p> Describes the savings opportunity for Amazon RDS storage recommendations after applying Savings Plans discounts. </p> <p> Savings opportunity represents the estimated monthly savings after applying Savings Plans discounts. You can achieve this by implementing a given Compute Optimizer recommendation. </p>"
@@ -5026,7 +5058,8 @@
         "EcsService",
         "License",
         "RdsDBInstance",
-        "RdsDBInstanceStorage"
+        "RdsDBInstanceStorage",
+        "AuroraDBClusterStorage"
       ]
     },
     "RecommendationSources":{
@@ -5123,6 +5156,7 @@
         "EcsService",
         "License",
         "RdsDBInstance",
+        "AuroraDBClusterStorage",
         "Idle"
       ]
     },
diff -pruN 2.23.6-1/awscli/botocore/data/config/2014-11-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/config/2014-11-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/config/2014-11-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/config/2014-11-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/config/2014-11-12/service-2.json 2.31.35-1/awscli/botocore/data/config/2014-11-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/config/2014-11-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/config/2014-11-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -81,7 +81,7 @@
         {"shape":"NoSuchConfigRuleException"},
         {"shape":"ResourceInUseException"}
       ],
-      "documentation":"<p>Deletes the specified Config rule and all of its evaluation results.</p> <p>Config sets the state of a rule to <code>DELETING</code> until the deletion is complete. You cannot update a rule while it is in this state. If you make a <code>PutConfigRule</code> or <code>DeleteConfigRule</code> request for the rule, you will receive a <code>ResourceInUseException</code>.</p> <p>You can check the state of a rule by using the <code>DescribeConfigRules</code> request.</p> <note> <p> <b>Recommendation: Stop recording resource compliance before deleting rules</b> </p> <p>It is highly recommended that you stop recording for the <code>AWS::Config::ResourceCompliance</code> resource type before you delete rules in your account. Deleting rules creates CIs for <code>AWS::Config::ResourceCompliance</code> and can affect your Config <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html\">configuration recorder</a> costs. If you are deleting rules which evaluate a large number of resource types, this can lead to a spike in the number of CIs recorded.</p> <p>Best practice:</p> <ol> <li> <p>Stop recording <code>AWS::Config::ResourceCompliance</code> </p> </li> <li> <p>Delete rule(s)</p> </li> <li> <p>Turn on recording for <code>AWS::Config::ResourceCompliance</code> </p> </li> </ol> </note>"
+      "documentation":"<p>Deletes the specified Config rule and all of its evaluation results.</p> <p>Config sets the state of a rule to <code>DELETING</code> until the deletion is complete. You cannot update a rule while it is in this state. If you make a <code>PutConfigRule</code> or <code>DeleteConfigRule</code> request for the rule, you will receive a <code>ResourceInUseException</code>.</p> <p>You can check the state of a rule by using the <code>DescribeConfigRules</code> request.</p> <note> <p> <b>Recommendation: Consider excluding the <code>AWS::Config::ResourceCompliance</code> resource type from recording before deleting rules</b> </p> <p>Deleting rules creates configuration items (CIs) for <code>AWS::Config::ResourceCompliance</code> that can affect your costs for the configuration recorder. If you are deleting rules which evaluate a large number of resource types, this can lead to a spike in the number of CIs recorded.</p> <p>To avoid the associated costs, you can opt to disable recording for the <code>AWS::Config::ResourceCompliance</code> resource type before deleting rules, and re-enable recording after the rules have been deleted.</p> <p>However, since deleting rules is an asynchronous process, it might take an hour or more to complete. During the time when recording is disabled for <code>AWS::Config::ResourceCompliance</code>, rule evaluations will not be recorded in the associated resource’s history.</p> </note>"
     },
     "DeleteConfigurationAggregator":{
       "name":"DeleteConfigurationAggregator",
@@ -119,7 +119,7 @@
         {"shape":"NoSuchConformancePackException"},
         {"shape":"ResourceInUseException"}
       ],
-      "documentation":"<p>Deletes the specified conformance pack and all the Config rules, remediation actions, and all evaluation results within that conformance pack.</p> <p>Config sets the conformance pack to <code>DELETE_IN_PROGRESS</code> until the deletion is complete. You cannot update a conformance pack while it is in this state.</p>"
+      "documentation":"<p>Deletes the specified conformance pack and all the Config rules, remediation actions, and all evaluation results within that conformance pack.</p> <p>Config sets the conformance pack to <code>DELETE_IN_PROGRESS</code> until the deletion is complete. You cannot update a conformance pack while it is in this state.</p> <note> <p> <b>Recommendation: Consider excluding the <code>AWS::Config::ResourceCompliance</code> resource type from recording before deleting rules</b> </p> <p>Deleting rules creates configuration items (CIs) for <code>AWS::Config::ResourceCompliance</code> that can affect your costs for the configuration recorder. If you are deleting rules which evaluate a large number of resource types, this can lead to a spike in the number of CIs recorded.</p> <p>To avoid the associated costs, you can opt to disable recording for the <code>AWS::Config::ResourceCompliance</code> resource type before deleting rules, and re-enable recording after the rules have been deleted.</p> <p>However, since deleting rules is an asynchronous process, it might take an hour or more to complete. During the time when recording is disabled for <code>AWS::Config::ResourceCompliance</code>, rule evaluations will not be recorded in the associated resource’s history.</p> </note>"
     },
     "DeleteDeliveryChannel":{
       "name":"DeleteDeliveryChannel",
@@ -160,7 +160,7 @@
         {"shape":"ResourceInUseException"},
         {"shape":"OrganizationAccessDeniedException"}
       ],
-      "documentation":"<p>Deletes the specified organization Config rule and all of its evaluation results from all member accounts in that organization. </p> <p>Only a management account and a delegated administrator account can delete an organization Config rule. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added.</p> <p>Config sets the state of a rule to DELETE_IN_PROGRESS until the deletion is complete. You cannot update a rule while it is in this state.</p>"
+      "documentation":"<p>Deletes the specified organization Config rule and all of its evaluation results from all member accounts in that organization. </p> <p>Only a management account and a delegated administrator account can delete an organization Config rule. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added.</p> <p>Config sets the state of a rule to DELETE_IN_PROGRESS until the deletion is complete. You cannot update a rule while it is in this state.</p> <note> <p> <b>Recommendation: Consider excluding the <code>AWS::Config::ResourceCompliance</code> resource type from recording before deleting rules</b> </p> <p>Deleting rules creates configuration items (CIs) for <code>AWS::Config::ResourceCompliance</code> that can affect your costs for the configuration recorder. If you are deleting rules which evaluate a large number of resource types, this can lead to a spike in the number of CIs recorded.</p> <p>To avoid the associated costs, you can opt to disable recording for the <code>AWS::Config::ResourceCompliance</code> resource type before deleting rules, and re-enable recording after the rules have been deleted.</p> <p>However, since deleting rules is an asynchronous process, it might take an hour or more to complete. During the time when recording is disabled for <code>AWS::Config::ResourceCompliance</code>, rule evaluations will not be recorded in the associated resource’s history.</p> </note>"
     },
     "DeleteOrganizationConformancePack":{
       "name":"DeleteOrganizationConformancePack",
@@ -174,7 +174,7 @@
         {"shape":"ResourceInUseException"},
         {"shape":"OrganizationAccessDeniedException"}
       ],
-      "documentation":"<p>Deletes the specified organization conformance pack and all of the Config rules and remediation actions from all member accounts in that organization. </p> <p> Only a management account or a delegated administrator account can delete an organization conformance pack. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added.</p> <p>Config sets the state of a conformance pack to DELETE_IN_PROGRESS until the deletion is complete. You cannot update a conformance pack while it is in this state. </p>"
+      "documentation":"<p>Deletes the specified organization conformance pack and all of the Config rules and remediation actions from all member accounts in that organization. </p> <p> Only a management account or a delegated administrator account can delete an organization conformance pack. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added.</p> <p>Config sets the state of a conformance pack to DELETE_IN_PROGRESS until the deletion is complete. You cannot update a conformance pack while it is in this state. </p> <note> <p> <b>Recommendation: Consider excluding the <code>AWS::Config::ResourceCompliance</code> resource type from recording before deleting rules</b> </p> <p>Deleting rules creates configuration items (CIs) for <code>AWS::Config::ResourceCompliance</code> that can affect your costs for the configuration recorder. If you are deleting rules which evaluate a large number of resource types, this can lead to a spike in the number of CIs recorded.</p> <p>To avoid the associated costs, you can opt to disable recording for the <code>AWS::Config::ResourceCompliance</code> resource type before deleting rules, and re-enable recording after the rules have been deleted.</p> <p>However, since deleting rules is an asynchronous process, it might take an hour or more to complete. During the time when recording is disabled for <code>AWS::Config::ResourceCompliance</code>, rule evaluations will not be recorded in the associated resource’s history.</p> </note>"
     },
     "DeletePendingAggregationRequest":{
       "name":"DeletePendingAggregationRequest",
@@ -927,7 +927,7 @@
         {"shape":"NoAvailableConfigurationRecorderException"},
         {"shape":"ResourceNotDiscoveredException"}
       ],
-      "documentation":"<important> <p>For accurate reporting on the compliance status, you must record the <code>AWS::Config::ResourceCompliance</code> resource type. For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html\">Selecting Which Resources Config Records</a>.</p> </important> <p>Returns a list of <code>ConfigurationItems</code> for the specified resource. The list contains details about each state of the resource during the specified time interval. If you specified a retention period to retain your <code>ConfigurationItems</code> between a minimum of 30 days and a maximum of 7 years (2557 days), Config returns the <code>ConfigurationItems</code> for the specified retention period. </p> <p>The response is paginated. By default, Config returns a limit of 10 configuration items per page. You can customize this number with the <code>limit</code> parameter. The response includes a <code>nextToken</code> string. To get the next page of results, run the request again and specify the string for the <code>nextToken</code> parameter.</p> <note> <p>Each call to the API is limited to span a duration of seven days. It is likely that the number of records returned is smaller than the specified <code>limit</code>. In such cases, you can make another call, using the <code>nextToken</code>.</p> </note>"
+      "documentation":"<important> <p>For accurate reporting on the compliance status, you must record the <code>AWS::Config::ResourceCompliance</code> resource type.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html\">Recording Amazon Web Services Resources</a> in the <i>Config Resources Developer Guide</i>.</p> </important> <p>Returns a list of configurations items (CIs) for the specified resource.</p> <p> <b>Contents</b> </p> <p>The list contains details about each state of the resource during the specified time interval. If you specified a retention period to retain your CIs between a minimum of 30 days and a maximum of 7 years (2557 days), Config returns the CIs for the specified retention period. </p> <p> <b>Pagination</b> </p> <p>The response is paginated. By default, Config returns a limit of 10 configuration items per page. You can customize this number with the <code>limit</code> parameter. The response includes a <code>nextToken</code> string. To get the next page of results, run the request again and specify the string for the <code>nextToken</code> parameter.</p> <note> <p>Each call to the API is limited to span a duration of seven days. It is likely that the number of records returned is smaller than the specified <code>limit</code>. In such cases, you can make another call, using the <code>nextToken</code>.</p> </note>"
     },
     "GetResourceEvaluationSummary":{
       "name":"GetResourceEvaluationSummary",
@@ -1014,7 +1014,7 @@
         {"shape":"InvalidNextTokenException"},
         {"shape":"NoAvailableConfigurationRecorderException"}
       ],
-      "documentation":"<p>Accepts a resource type and returns a list of resource identifiers for the resources of that type. A resource identifier includes the resource type, ID, and (if available) the custom resource name. The results consist of resources that Config has discovered, including those that Config is not currently recording. You can narrow the results to include only resources that have specific resource IDs or a resource name.</p> <note> <p>You can specify either resource IDs or a resource name, but not both, in the same request.</p> </note> <p>The response is paginated. By default, Config lists 100 resource identifiers on each page. You can customize this number with the <code>limit</code> parameter. The response includes a <code>nextToken</code> string. To get the next page of results, run the request again and specify the string for the <code>nextToken</code> parameter.</p>"
+      "documentation":"<p>Returns a list of resource resource identifiers for the specified resource types for the resources of that type. A <i>resource identifier</i> includes the resource type, ID, and (if available) the custom resource name.</p> <p>The results consist of resources that Config has <i>discovered</i>, including those that Config is not currently recording. You can narrow the results to include only resources that have specific resource IDs or a resource name.</p> <note> <p>You can specify either resource IDs or a resource name, but not both, in the same request.</p> </note> <important> <p> <i>CloudFormation stack recording behavior in Config</i> </p> <p>When a CloudFormation stack fails to create (for example, it enters the <code>ROLLBACK_FAILED</code> state), Config does not record a configuration item (CI) for that stack. Configuration items are only recorded for stacks that reach the following states:</p> <ul> <li> <p> <code>CREATE_COMPLETE</code> </p> </li> <li> <p> <code>UPDATE_COMPLETE</code> </p> </li> <li> <p> <code>UPDATE_ROLLBACK_COMPLETE</code> </p> </li> <li> <p> <code>UPDATE_ROLLBACK_FAILED</code> </p> </li> <li> <p> <code>DELETE_FAILED</code> </p> </li> <li> <p> <code>DELETE_COMPLETE</code> </p> </li> </ul> <p>Because no CI is created for a failed stack creation, you won't see configuration history for that stack in Config, even after the stack is deleted. This helps make sure that Config only tracks resources that were successfully provisioned.</p> </important>"
     },
     "ListResourceEvaluations":{
       "name":"ListResourceEvaluations",
@@ -1140,7 +1140,7 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"MaxNumberOfConformancePacksExceededException"}
       ],
-      "documentation":"<p>Creates or updates a conformance pack. A conformance pack is a collection of Config rules that can be easily deployed in an account and a region and across an organization. For information on how many conformance packs you can have per account, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p> <p>This API creates a service-linked role <code>AWSServiceRoleForConfigConforms</code> in your account. The service-linked role is created only when the role does not exist in your account. </p> <note> <p>You must specify only one of the follow parameters: <code>TemplateS3Uri</code>, <code>TemplateBody</code> or <code>TemplateSSMDocumentDetails</code>.</p> </note>"
+      "documentation":"<p>Creates or updates a conformance pack. A conformance pack is a collection of Config rules that can be easily deployed in an account and a region and across an organization. For information on how many conformance packs you can have per account, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p> <important> <p>When you use <code>PutConformancePack</code> to deploy conformance packs in your account, the operation can create Config rules and remediation actions without requiring <code>config:PutConfigRule</code> or <code>config:PutRemediationConfigurations</code> permissions in your account IAM policies.</p> <p>This API uses the <code>AWSServiceRoleForConfigConforms</code> service-linked role in your account to create conformance pack resources. This service-linked role includes the permissions to create Config rules and remediation configurations, even if your account IAM policies explicitly deny these actions.</p> </important> <p>This API creates a service-linked role <code>AWSServiceRoleForConfigConforms</code> in your account. The service-linked role is created only when the role does not exist in your account. </p> <note> <p>You must specify only one of the follow parameters: <code>TemplateS3Uri</code>, <code>TemplateBody</code> or <code>TemplateSSMDocumentDetails</code>.</p> </note>"
     },
     "PutDeliveryChannel":{
       "name":"PutDeliveryChannel",
@@ -1228,7 +1228,7 @@
         {"shape":"OrganizationAllFeaturesNotEnabledException"},
         {"shape":"NoAvailableOrganizationException"}
       ],
-      "documentation":"<p>Deploys conformance packs across member accounts in an Amazon Web Services Organization. For information on how many organization conformance packs and how many Config rules you can have per account, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p> <p>Only a management account and a delegated administrator can call this API. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added. An organization can have up to 3 delegated administrators.</p> <p>This API enables organization service access for <code>config-multiaccountsetup.amazonaws.com</code> through the <code>EnableAWSServiceAccess</code> action and creates a service-linked role <code>AWSServiceRoleForConfigMultiAccountSetup</code> in the management or delegated administrator account of your organization. The service-linked role is created only when the role does not exist in the caller account. To use this API with delegated administrator, register a delegated administrator by calling Amazon Web Services Organization <code>register-delegate-admin</code> for <code>config-multiaccountsetup.amazonaws.com</code>.</p> <note> <p>Prerequisite: Ensure you call <code>EnableAllFeatures</code> API to enable all features in an organization.</p> <p>You must specify either the <code>TemplateS3Uri</code> or the <code>TemplateBody</code> parameter, but not both. If you provide both Config uses the <code>TemplateS3Uri</code> parameter and ignores the <code>TemplateBody</code> parameter.</p> <p>Config sets the state of a conformance pack to CREATE_IN_PROGRESS and UPDATE_IN_PROGRESS until the conformance pack is created or updated. You cannot update a conformance pack while it is in this state.</p> </note>"
+      "documentation":"<p>Deploys conformance packs across member accounts in an Amazon Web Services Organization. For information on how many organization conformance packs and how many Config rules you can have per account, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p> <p>Only a management account and a delegated administrator can call this API. When calling this API with a delegated administrator, you must ensure Organizations <code>ListDelegatedAdministrator</code> permissions are added. An organization can have up to 3 delegated administrators.</p> <important> <p>When you use <code>PutOrganizationConformancePack</code> to deploy conformance packs across member accounts, the operation can create Config rules and remediation actions without requiring <code>config:PutConfigRule</code> or <code>config:PutRemediationConfigurations</code> permissions in member account IAM policies.</p> <p>This API uses the <code>AWSServiceRoleForConfigConforms</code> service-linked role in each member account to create conformance pack resources. This service-linked role includes the permissions to create Config rules and remediation configurations, even if member account IAM policies explicitly deny these actions.</p> </important> <p>This API enables organization service access for <code>config-multiaccountsetup.amazonaws.com</code> through the <code>EnableAWSServiceAccess</code> action and creates a service-linked role <code>AWSServiceRoleForConfigMultiAccountSetup</code> in the management or delegated administrator account of your organization. The service-linked role is created only when the role does not exist in the caller account. To use this API with delegated administrator, register a delegated administrator by calling Amazon Web Services Organization <code>register-delegate-admin</code> for <code>config-multiaccountsetup.amazonaws.com</code>.</p> <note> <p>Prerequisite: Ensure you call <code>EnableAllFeatures</code> API to enable all features in an organization.</p> <p>You must specify either the <code>TemplateS3Uri</code> or the <code>TemplateBody</code> parameter, but not both. If you provide both Config uses the <code>TemplateS3Uri</code> parameter and ignores the <code>TemplateBody</code> parameter.</p> <p>Config sets the state of a conformance pack to CREATE_IN_PROGRESS and UPDATE_IN_PROGRESS until the conformance pack is created or updated. You cannot update a conformance pack while it is in this state.</p> </note>"
     },
     "PutRemediationConfigurations":{
       "name":"PutRemediationConfigurations",
@@ -1301,7 +1301,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates a service-linked configuration recorder that is linked to a specific Amazon Web Services service based on the <code>ServicePrincipal</code> you specify.</p> <p>The configuration recorder's <code>name</code>, <code>recordingGroup</code>, <code>recordingMode</code>, and <code>recordingScope</code> is set by the service that is linked to the configuration recorder.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html\"> <b>Working with the Configuration Recorder</b> </a> in the <i>Config Developer Guide</i>.</p> <p>This API creates a service-linked role <code>AWSServiceRoleForConfig</code> in your account. The service-linked role is created only when the role does not exist in your account.</p> <note> <p> <b>The recording scope determines if you receive configuration items</b> </p> <p>The recording scope is set by the service that is linked to the configuration recorder and determines whether you receive configuration items (CIs) in the delivery channel. If the recording scope is internal, you will not receive CIs in the delivery channel.</p> <p> <b>Tags are added at creation and cannot be updated with this operation</b> </p> <p>Use <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_TagResource.html\">TagResource</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_UntagResource.html\">UntagResource</a> to update tags after creation.</p> </note>"
+      "documentation":"<p>Creates a service-linked configuration recorder that is linked to a specific Amazon Web Services service based on the <code>ServicePrincipal</code> you specify.</p> <p>The configuration recorder's <code>name</code>, <code>recordingGroup</code>, <code>recordingMode</code>, and <code>recordingScope</code> is set by the service that is linked to the configuration recorder.</p> <p>For more information and a list of supported services/service principals, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/stop-start-recorder.html\"> <b>Working with the Configuration Recorder</b> </a> in the <i>Config Developer Guide</i>.</p> <p>This API creates a service-linked role <code>AWSServiceRoleForConfig</code> in your account. The service-linked role is created only when the role does not exist in your account.</p> <note> <p> <b>The recording scope determines if you receive configuration items</b> </p> <p>The recording scope is set by the service that is linked to the configuration recorder and determines whether you receive configuration items (CIs) in the delivery channel. If the recording scope is internal, you will not receive CIs in the delivery channel.</p> <p> <b>Tags are added at creation and cannot be updated with this operation</b> </p> <p>Use <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_TagResource.html\">TagResource</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_UntagResource.html\">UntagResource</a> to update tags after creation.</p> </note>"
     },
     "PutStoredQuery":{
       "name":"PutStoredQuery",
@@ -1963,15 +1963,15 @@
         },
         "configuration":{
           "shape":"Configuration",
-          "documentation":"<p>The description of the resource configuration.</p>"
+          "documentation":"<p>A JSON-encoded string that contains the contents for the resource configuration. This string needs to be deserialized using <code>json.loads()</code> before you can access the contents. </p>"
         },
         "supplementaryConfiguration":{
           "shape":"SupplementaryConfiguration",
-          "documentation":"<p>Configuration attributes that Config returns for certain resource types to supplement the information returned for the configuration parameter.</p>"
+          "documentation":"<p>A string to string map that contains additional contents for the resource configuration.Config returns this field for certain resource types to supplement the information returned for the <code>configuration</code> field.</p> <p>This string needs to be deserialized using <code>json.loads()</code> before you can access the contents.</p>"
         },
         "recordingFrequency":{
           "shape":"RecordingFrequency",
-          "documentation":"<p>The recording frequency that Config uses to record configuration changes for the resource.</p>"
+          "documentation":"<p>The recording frequency that Config uses to record configuration changes for the resource.</p> <note> <p>This field only appears in the API response when <code>DAILY</code> recording is enabled for a resource type. If this field is not present, <code>CONTINUOUS</code> recording is enabled for that resource type. For more information on daily recording and continuous recording, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html#select-resources-recording-frequency\">Recording Frequency</a> in the <i>Config Developer Guide</i>.</p> </note>"
         },
         "configurationItemDeliveryTime":{
           "shape":"ConfigurationItemDeliveryTime",
@@ -2238,7 +2238,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Defines which resources can trigger an evaluation for the rule. The scope can include one or more resource types, a combination of one resource type and one resource ID, or a combination of a tag key and value. Specify a scope to constrain the resources that can trigger an evaluation for the rule. If you do not specify a scope, evaluations are triggered when any resource in the recording group changes.</p> <note> <p>The scope can be empty. </p> </note>"
+          "documentation":"<p>Defines which resources can trigger an evaluation for the rule. The scope can include one or more resource types, a combination of one resource type and one resource ID, or a combination of a tag key and value. Specify a scope to constrain the resources that can trigger an evaluation for the rule. If you do not specify a scope, evaluations are triggered when any resource in the recording group changes.</p>"
         },
         "Source":{
           "shape":"Source",
@@ -2565,19 +2565,19 @@
         },
         "configuration":{
           "shape":"Configuration",
-          "documentation":"<p>The description of the resource configuration.</p>"
+          "documentation":"<p>A JSON-encoded string that contains the contents for the resource configuration. This string needs to be deserialized using <code>json.loads()</code> before you can access the contents.</p>"
         },
         "supplementaryConfiguration":{
           "shape":"SupplementaryConfiguration",
-          "documentation":"<p>Configuration attributes that Config returns for certain resource types to supplement the information returned for the <code>configuration</code> parameter.</p>"
+          "documentation":"<p>A string to string map that contains additional contents for the resource configuration.Config returns this field for certain resource types to supplement the information returned for the <code>configuration</code> field.</p> <p>This string to string map needs to be deserialized using <code>json.loads()</code> before you can accessing the contents.</p>"
         },
         "recordingFrequency":{
           "shape":"RecordingFrequency",
-          "documentation":"<p>The recording frequency that Config uses to record configuration changes for the resource.</p>"
+          "documentation":"<p>The recording frequency that Config uses to record configuration changes for the resource.</p> <note> <p>This field only appears in the API response when <code>DAILY</code> recording is enabled for a resource type. If this field is not present, <code>CONTINUOUS</code> recording is enabled for that resource type. For more information on daily recording and continuous recording, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html#select-resources-recording-frequency\">Recording Frequency</a> in the <i>Config Developer Guide</i>.</p> </note>"
         },
         "configurationItemDeliveryTime":{
           "shape":"ConfigurationItemDeliveryTime",
-          "documentation":"<p>The time when configuration changes for the resource were delivered.</p> <note> <p>This field is optional and is not guaranteed to be present in a configuration item (CI). If you are using daily recording, this field will be populated. However, if you are using continuous recording, this field will be omitted since the delivery time is instantaneous as the CI is available right away. For more information on daily recording and continuous recording, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html#select-resources-recording-frequency\">Recording Frequency</a> in the <i>Config Developer Guide</i>.</p> </note>"
+          "documentation":"<p>The time when configuration changes for the resource were delivered.</p> <note> <p>This field is optional and is not guaranteed to be present in a configuration item (CI). If you are using daily recording, this field will be populated. However, if you are using continuous recording, this field will be omitted since the delivery time is instantaneous as the CI is available right away.</p> <p>For more information on daily recording and continuous recording, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html#select-resources-recording-frequency\">Recording Frequency</a> in the <i>Config Developer Guide</i>.</p> </note>"
         }
       },
       "documentation":"<p>A list that contains detailed configurations of a specified resource.</p>"
@@ -2608,7 +2608,7 @@
         },
         "name":{
           "shape":"RecorderName",
-          "documentation":"<p>The name of the configuration recorder.</p> <p>For customer managed configuration recorders, Config automatically assigns the name of \"default\" when creating a configuration recorder if you do not specify a name at creation time.</p> <p>For service-linked configuration recorders, Config automatically assigns a name that has the prefix \"<code>AWS</code>\" to a new service-linked configuration recorder.</p> <note> <p> <b>Changing the name of a configuration recorder</b> </p> <p>To change the name of the customer managed configuration recorder, you must delete it and create a new customer managed configuration recorder with a new name.</p> <p>You cannot change the name of a service-linked configuration recorder.</p> </note>"
+          "documentation":"<p>The name of the configuration recorder.</p> <p>For customer managed configuration recorders, Config automatically assigns the name of \"default\" when creating a configuration recorder if you do not specify a name at creation time.</p> <p>For service-linked configuration recorders, Config automatically assigns a name that has the prefix \"<code>AWSConfigurationRecorderFor</code>\" to a new service-linked configuration recorder.</p> <note> <p> <b>Changing the name of a configuration recorder</b> </p> <p>To change the name of the customer managed configuration recorder, you must delete it and create a new customer managed configuration recorder with a new name.</p> <p>You cannot change the name of a service-linked configuration recorder.</p> </note>"
         },
         "roleARN":{
           "shape":"String",
@@ -2755,8 +2755,7 @@
     "ConfigurationStateId":{"type":"string"},
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutServiceLinkedConfigurationRecorder.html\">PutServiceLinkedConfigurationRecorder</a>, you cannot create a service-linked recorder because a service-linked recorder already exists for the specified service.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteServiceLinkedConfigurationRecorder.html\">DeleteServiceLinkedConfigurationRecorder</a>, you cannot delete the service-linked recorder because it is currently in use by the linked Amazon Web Services service.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteDeliveryChannel.html\">DeleteDeliveryChannel</a>, you cannot delete the specified delivery channel because the customer managed configuration recorder is running. Use the <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_StopConfigurationRecorder.html\">StopConfigurationRecorder</a> operation to stop the customer managed configuration recorder.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_AssociateResourceTypes.html\">AssociateResourceTypes</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DisassociateResourceTypes.html\">DisassociateResourceTypes</a>, one of the following errors:</p> <ul> <li> <p>For service-linked configuration recorders, the configuration recorder is not in use by the service. No association or dissociation of resource types is permitted.</p> </li> <li> <p>For service-linked configuration recorders, your requested change to the configuration recorder has been denied by its linked Amazon Web Services service.</p> </li> </ul>",
       "exception":true
     },
@@ -3112,8 +3111,7 @@
     },
     "ConformancePackTemplateValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a template that is not valid or supported.</p>",
       "exception":true
     },
@@ -3240,8 +3238,7 @@
     },
     "DeleteEvaluationResultsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output when you delete the evaluation results for the specified Config rule.</p>"
     },
     "DeleteOrganizationConfigRuleRequest":{
@@ -3297,8 +3294,7 @@
     },
     "DeleteRemediationConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRemediationExceptionsRequest":{
       "type":"structure",
@@ -3392,8 +3388,7 @@
     },
     "DeleteStoredQueryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeliverConfigSnapshotRequest":{
       "type":"structure",
@@ -3810,7 +3805,7 @@
       "members":{
         "ConfigurationRecorderNames":{
           "shape":"ConfigurationRecorderNameList",
-          "documentation":"<p>The name of the configuration recorder. If the name is not specified, the opertation returns the status for the customer managed configuration recorder configured for the account, if applicable.</p> <note> <p>When making a request to this operation, you can only specify one configuration recorder.</p> </note>"
+          "documentation":"<p>The name of the configuration recorder. If the name is not specified, the operation returns the status for the customer managed configuration recorder configured for the account, if applicable.</p> <note> <p>When making a request to this operation, you can only specify one configuration recorder.</p> </note>"
         },
         "ServicePrincipal":{
           "shape":"ServicePrincipal",
@@ -3838,7 +3833,7 @@
       "members":{
         "ConfigurationRecorderNames":{
           "shape":"ConfigurationRecorderNameList",
-          "documentation":"<p>A list of names of the configuration recorders that you want to specify.</p>"
+          "documentation":"<p>A list of names of the configuration recorders that you want to specify.</p> <note> <p>When making a request to this operation, you can only specify one configuration recorder.</p> </note>"
         },
         "ServicePrincipal":{
           "shape":"ServicePrincipal",
@@ -5198,7 +5193,7 @@
       "members":{
         "configurationItems":{
           "shape":"ConfigurationItemList",
-          "documentation":"<p>A list that contains the configuration history of one or more resources.</p>"
+          "documentation":"<p>An array of <code>ConfigurationItems</code> Objects. Contatins the configuration history for one or more resources.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -5307,114 +5302,98 @@
     "IncludeGlobalResourceTypes":{"type":"boolean"},
     "InsufficientDeliveryPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Your Amazon S3 bucket policy does not allow Config to write to it.</p>",
       "exception":true
     },
     "InsufficientPermissionsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates one of the following errors:</p> <ul> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html\">PutConfigRule</a>, the rule cannot be created because the IAM role assigned to Config lacks permissions to perform the config:Put* action.</p> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html\">PutConfigRule</a>, the Lambda function cannot be invoked. Check the function ARN, and check the function's permissions.</p> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutOrganizationConfigRule.html\">PutOrganizationConfigRule</a>, organization Config rule cannot be created because you do not have permissions to call IAM <code>GetRole</code> action or create a service-linked role.</p> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutConformancePack.html\">PutConformancePack</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutOrganizationConformancePack.html\">PutOrganizationConformancePack</a>, a conformance pack cannot be created because you do not have the following permissions: </p> <ul> <li> <p>You do not have permission to call IAM <code>GetRole</code> action or create a service-linked role.</p> </li> <li> <p>You do not have permission to read Amazon S3 bucket or call SSM:GetDocument.</p> </li> </ul> </li> <li> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutServiceLinkedConfigurationRecorder.html\">PutServiceLinkedConfigurationRecorder</a>, a service-linked configuration recorder cannot be created because you do not have the following permissions: IAM <code>CreateServiceLinkedRole</code>.</p> </li> </ul>",
       "exception":true
     },
     "Integer":{"type":"integer"},
     "InvalidConfigurationRecorderNameException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You have provided a name for the customer managed configuration recorder that is not valid.</p>",
+      "members":{},
+      "documentation":"<p>The configuration recorder name is not valid. The prefix \"<code>AWSConfigurationRecorderFor</code>\" is reserved for service-linked configuration recorders.</p>",
       "exception":true
     },
     "InvalidDeliveryChannelNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified delivery channel name is not valid.</p>",
       "exception":true
     },
     "InvalidExpressionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The syntax of the query is incorrect.</p>",
       "exception":true
     },
     "InvalidLimitException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified limit is outside the allowable range.</p>",
       "exception":true
     },
     "InvalidNextTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified next token is not valid. Specify the <code>nextToken</code> string that was returned in the previous response to get the next page of results.</p>",
       "exception":true
     },
     "InvalidParameterValueException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more of the specified parameters are not valid. Verify that your parameters are valid and try again.</p>",
       "exception":true
     },
     "InvalidRecordingGroupException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One of the following errors:</p> <ul> <li> <p>You have provided a combination of parameter values that is not valid. For example:</p> <ul> <li> <p>Setting the <code>allSupported</code> field of <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_RecordingGroup.html\">RecordingGroup</a> to <code>true</code>, but providing a non-empty list for the <code>resourceTypes</code>field of <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_RecordingGroup.html\">RecordingGroup</a>.</p> </li> <li> <p>Setting the <code>allSupported</code> field of <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_RecordingGroup.html\">RecordingGroup</a> to <code>true</code>, but also setting the <code>useOnly</code> field of <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_RecordingStrategy.html\">RecordingStrategy</a> to <code>EXCLUSION_BY_RESOURCE_TYPES</code>.</p> </li> </ul> </li> <li> <p>Every parameter is either null, false, or empty.</p> </li> <li> <p>You have reached the limit of the number of resource types you can provide for the recording group.</p> </li> <li> <p>You have provided resource types or a recording strategy that are not valid.</p> </li> </ul>",
       "exception":true
     },
     "InvalidResultTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified <code>ResultToken</code> is not valid.</p>",
       "exception":true
     },
     "InvalidRoleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have provided a null or empty Amazon Resource Name (ARN) for the IAM role assumed by Config and used by the customer managed configuration recorder.</p>",
       "exception":true
     },
     "InvalidS3KeyPrefixException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon S3 key prefix is not valid.</p>",
       "exception":true
     },
     "InvalidS3KmsKeyArnException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon KMS Key ARN is not valid.</p>",
       "exception":true
     },
     "InvalidSNSTopicARNException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon SNS topic does not exist.</p>",
       "exception":true
     },
     "InvalidTimeRangeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified time range is not valid. The earlier time is not chronologically before the later time.</p>",
       "exception":true
     },
     "LastDeliveryChannelDeleteFailedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot delete the delivery channel you specified because the customer managed configuration recorder is running.</p>",
       "exception":true
     },
@@ -5427,8 +5406,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>For <code>PutServiceLinkedConfigurationRecorder</code> API, this exception is thrown if the number of service-linked roles in the account exceeds the limit.</p> <p>For <code>StartConfigRulesEvaluation</code> API, this exception is thrown if an evaluation is in progress or if you call the <a>StartConfigRulesEvaluation</a> API more than once per minute.</p> <p>For <code>PutConfigurationAggregator</code> API, this exception is thrown if the number of accounts and aggregators exceeds the limit.</p>",
       "exception":true
     },
@@ -5687,57 +5665,49 @@
     "Long":{"type":"long"},
     "MaxActiveResourcesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of active custom resource types in your account. There is a limit of 100,000. Delete unused resources using <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteResourceConfig.html\">DeleteResourceConfig</a> <code/>.</p>",
       "exception":true
     },
     "MaxNumberOfConfigRulesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Failed to add the Config rule because the account already contains the maximum number of 1000 rules. Consider deleting any deactivated rules before you add new rules.</p>",
       "exception":true
     },
     "MaxNumberOfConfigurationRecordersExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of configuration recorders you can create.</p>",
       "exception":true
     },
     "MaxNumberOfConformancePacksExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of conformance packs you can create in an account. For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p>",
       "exception":true
     },
     "MaxNumberOfDeliveryChannelsExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of delivery channels you can create.</p>",
       "exception":true
     },
     "MaxNumberOfOrganizationConfigRulesExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of organization Config rules you can create. For more information, see see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p>",
       "exception":true
     },
     "MaxNumberOfOrganizationConformancePacksExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of organization conformance packs you can create in an account. For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p>",
       "exception":true
     },
     "MaxNumberOfRetentionConfigurationsExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Failed to add the retention configuration because a retention configuration with that name already exists.</p>",
       "exception":true
     },
@@ -5818,121 +5788,104 @@
     "NextToken":{"type":"string"},
     "NoAvailableConfigurationRecorderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There are no customer managed configuration recorders available to record your resources. Use the <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigurationRecorder.html\">PutConfigurationRecorder</a> operation to create the customer managed configuration recorder.</p>",
       "exception":true
     },
     "NoAvailableDeliveryChannelException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is no delivery channel available to record configurations.</p>",
       "exception":true
     },
     "NoAvailableOrganizationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Organization is no longer available.</p>",
       "exception":true
     },
     "NoRunningConfigurationRecorderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is no configuration recorder running.</p>",
       "exception":true
     },
     "NoSuchBucketException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon S3 bucket does not exist.</p>",
       "exception":true
     },
     "NoSuchConfigRuleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Config rule in the request is not valid. Verify that the rule is an Config Process Check rule, that the rule name is correct, and that valid Amazon Resouce Names (ARNs) are used before trying again.</p>",
       "exception":true
     },
     "NoSuchConfigRuleInConformancePackException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Config rule that you passed in the filter does not exist.</p>",
       "exception":true
     },
     "NoSuchConfigurationAggregatorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a configuration aggregator that does not exist.</p>",
       "exception":true
     },
     "NoSuchConfigurationRecorderException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a configuration recorder that does not exist.</p>",
       "exception":true
     },
     "NoSuchConformancePackException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You specified one or more conformance packs that do not exist.</p>",
       "exception":true
     },
     "NoSuchDeliveryChannelException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a delivery channel that does not exist.</p>",
       "exception":true
     },
     "NoSuchOrganizationConfigRuleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Config rule in the request is not valid. Verify that the rule is an organization Config Process Check rule, that the rule name is correct, and that valid Amazon Resouce Names (ARNs) are used before trying again.</p>",
       "exception":true
     },
     "NoSuchOrganizationConformancePackException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Config organization conformance pack that you passed in the filter does not exist.</p> <p>For DeleteOrganizationConformancePack, you tried to delete an organization conformance pack that does not exist.</p>",
       "exception":true
     },
     "NoSuchRemediationConfigurationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You specified an Config rule without a remediation configuration.</p>",
       "exception":true
     },
     "NoSuchRemediationExceptionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You tried to delete a remediation exception that does not exist.</p>",
       "exception":true
     },
     "NoSuchRetentionConfigurationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a retention configuration that does not exist.</p>",
       "exception":true
     },
     "OrderingTimestamp":{"type":"timestamp"},
     "OrganizationAccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>For <code>PutConfigurationAggregator</code> API, you can see this exception for the following reasons:</p> <ul> <li> <p>No permission to call <code>EnableAWSServiceAccess</code> API</p> </li> <li> <p>The configuration aggregator cannot be updated because your Amazon Web Services Organization management account or the delegated administrator role changed. Delete this aggregator and create a new one with the current Amazon Web Services Organization.</p> </li> <li> <p>The configuration aggregator is associated with a previous Amazon Web Services Organization and Config cannot aggregate data with current Amazon Web Services Organization. Delete this aggregator and create a new one with the current Amazon Web Services Organization.</p> </li> <li> <p>You are not a registered delegated administrator for Config with permissions to call <code>ListDelegatedAdministrators</code> API. Ensure that the management account registers delagated administrator for Config service principal name before the delegated administrator creates an aggregator.</p> </li> </ul> <p>For all <code>OrganizationConfigRule</code> and <code>OrganizationConformancePack</code> APIs, Config throws an exception if APIs are called from member accounts. All APIs must be called from organization management account.</p>",
       "exception":true
     },
@@ -5957,8 +5910,7 @@
     },
     "OrganizationAllFeaturesNotEnabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Config resource cannot be created because your organization does not have all features enabled.</p>",
       "exception":true
     },
@@ -6203,8 +6155,7 @@
     },
     "OrganizationConformancePackTemplateValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a template that is not valid or supported.</p>",
       "exception":true
     },
@@ -6455,8 +6406,7 @@
     },
     "OversizedConfigurationItemException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The configuration item size is outside the allowable range.</p>",
       "exception":true
     },
@@ -6626,7 +6576,7 @@
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>A string containing the full conformance pack template body. The structure containing the template body has a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <note> <p>You can use a YAML template with two resource types: Config rule (<code>AWS::Config::ConfigRule</code>) and remediation action (<code>AWS::Config::RemediationConfiguration</code>).</p> </note>"
+          "documentation":"<p>A string that contains the full conformance pack template body. The structure containing the template body has a minimum length of 1 byte and a maximum length of 51,200 bytes.</p> <note> <p>You can use a YAML template with two resource types: Config rule (<code>AWS::Config::ConfigRule</code>) and remediation action (<code>AWS::Config::RemediationConfiguration</code>).</p> </note>"
         },
         "DeliveryS3Bucket":{
           "shape":"DeliveryS3Bucket",
@@ -6714,8 +6664,7 @@
     },
     "PutExternalEvaluationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutOrganizationConfigRuleRequest":{
       "type":"structure",
@@ -6766,7 +6715,7 @@
         },
         "TemplateBody":{
           "shape":"TemplateBody",
-          "documentation":"<p>A string containing full conformance pack template body. Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p>"
+          "documentation":"<p>A string that contains the full conformance pack template body. Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes.</p>"
         },
         "DeliveryS3Bucket":{
           "shape":"DeliveryS3Bucket",
@@ -6925,7 +6874,7 @@
         },
         "Name":{
           "shape":"RecorderName",
-          "documentation":"<p>The name of the specified configuration recorder.</p> <p>For service-linked configuration recorders, Config automatically assigns a name that has the prefix \"<code>AWS</code>\" to the new service-linked configuration recorder.</p>"
+          "documentation":"<p>The name of the specified configuration recorder.</p> <p>For service-linked configuration recorders, Config automatically assigns a name that has the prefix \"<code>AWSConfigurationRecorderFor</code>\" to the new service-linked configuration recorder.</p>"
         }
       }
     },
@@ -7277,7 +7226,8 @@
         "QUEUED",
         "IN_PROGRESS",
         "SUCCEEDED",
-        "FAILED"
+        "FAILED",
+        "UNKNOWN"
       ]
     },
     "RemediationExecutionStatus":{
@@ -7338,7 +7288,10 @@
       "enum":[
         "SUCCEEDED",
         "PENDING",
-        "FAILED"
+        "FAILED",
+        "IN_PROGRESS",
+        "EXITED",
+        "UNKNOWN"
       ]
     },
     "RemediationExecutionSteps":{
@@ -7347,8 +7300,7 @@
     },
     "RemediationInProgressException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Remediation action is in progress. You can either cancel execution in Amazon Web Services Systems Manager or wait and try again later. </p>",
       "exception":true
     },
@@ -7585,8 +7537,7 @@
     },
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You see this exception in the following cases: </p> <ul> <li> <p>For DeleteConfigRule, Config is deleting this rule. Try your request again later.</p> </li> <li> <p>For DeleteConfigRule, the rule is deleting your evaluation results. Try your request again later.</p> </li> <li> <p>For DeleteConfigRule, a remediation action is associated with the rule and Config cannot delete this rule. Delete the remediation action associated with the rule before deleting the rule and try your request again later.</p> </li> <li> <p>For PutConfigOrganizationRule, organization Config rule deletion is in progress. Try your request again later.</p> </li> <li> <p>For DeleteOrganizationConfigRule, organization Config rule creation is in progress. Try your request again later.</p> </li> <li> <p>For PutConformancePack and PutOrganizationConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p> </li> <li> <p>For DeleteConformancePack, a conformance pack creation, update, and deletion is in progress. Try your request again later.</p> </li> </ul>",
       "exception":true
     },
@@ -7617,15 +7568,13 @@
     "ResourceName":{"type":"string"},
     "ResourceNotDiscoveredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a resource that is either unknown or has not been discovered.</p>",
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have specified a resource that does not exist.</p>",
       "exception":true
     },
@@ -8038,7 +7987,42 @@
         "AWS::RDS::OptionGroup",
         "AWS::Redshift::EndpointAccess",
         "AWS::Route53Resolver::FirewallRuleGroup",
-        "AWS::SSM::Document"
+        "AWS::SSM::Document",
+        "AWS::AppConfig::ExtensionAssociation",
+        "AWS::AppIntegrations::Application",
+        "AWS::AppSync::ApiCache",
+        "AWS::Bedrock::Guardrail",
+        "AWS::Bedrock::KnowledgeBase",
+        "AWS::Cognito::IdentityPool",
+        "AWS::Connect::Rule",
+        "AWS::Connect::User",
+        "AWS::EC2::ClientVpnTargetNetworkAssociation",
+        "AWS::EC2::EIPAssociation",
+        "AWS::EC2::IPAMResourceDiscovery",
+        "AWS::EC2::IPAMResourceDiscoveryAssociation",
+        "AWS::EC2::InstanceConnectEndpoint",
+        "AWS::EC2::SnapshotBlockPublicAccess",
+        "AWS::EC2::VPCBlockPublicAccessExclusion",
+        "AWS::EC2::VPCBlockPublicAccessOptions",
+        "AWS::EC2::VPCEndpointConnectionNotification",
+        "AWS::EC2::VPNConnectionRoute",
+        "AWS::Evidently::Segment",
+        "AWS::IAM::OIDCProvider",
+        "AWS::InspectorV2::Activation",
+        "AWS::MSK::ClusterPolicy",
+        "AWS::MSK::VpcConnection",
+        "AWS::MediaConnect::Gateway",
+        "AWS::MemoryDB::SubnetGroup",
+        "AWS::OpenSearchServerless::Collection",
+        "AWS::OpenSearchServerless::VpcEndpoint",
+        "AWS::Redshift::EndpointAuthorization",
+        "AWS::Route53Profiles::Profile",
+        "AWS::S3::StorageLensGroup",
+        "AWS::S3Express::BucketPolicy",
+        "AWS::S3Express::DirectoryBucket",
+        "AWS::SageMaker::InferenceExperiment",
+        "AWS::SecurityHub::Standard",
+        "AWS::Transfer::Profile"
       ]
     },
     "ResourceTypeList":{
@@ -8354,8 +8338,7 @@
     },
     "StartConfigRulesEvaluationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output when you start the evaluation for the specified Config rule.</p>"
     },
     "StartConfigurationRecorderRequest":{
@@ -8416,7 +8399,7 @@
         },
         "EvaluationMode":{
           "shape":"EvaluationMode",
-          "documentation":"<p>The mode of an evaluation. The valid values for this API are <code>DETECTIVE</code> and <code>PROACTIVE</code>.</p>"
+          "documentation":"<p>The mode of an evaluation.</p> <note> <p>The only valid value for this API is <code>PROACTIVE</code>.</p> </note>"
         },
         "EvaluationTimeout":{
           "shape":"EvaluationTimeout",
@@ -8690,15 +8673,13 @@
     },
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit of the number of tags you can use. For more information, see <a href=\"https://docs.aws.amazon.com/config/latest/developerguide/configlimits.html\"> <b>Service Limits</b> </a> in the <i>Config Developer Guide</i>.</p>",
       "exception":true
     },
     "UnmodifiableEntityException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation is not valid.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigurationRecorder.html\">PutConfigurationRecorder</a>, you will see this exception because you cannot use this operation to create a service-linked configuration recorder. Use the <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutServiceLinkedConfigurationRecorder.html\">PutServiceLinkedConfigurationRecorder</a> operation to create a service-linked configuration recorder.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteConfigurationRecorder.html\">DeleteConfigurationRecorder</a>, you will see this exception because you cannot use this operation to delete a service-linked configuration recorder. Use the <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteServiceLinkedConfigurationRecorder.html\">DeleteServiceLinkedConfigurationRecorder</a> operation to delete a service-linked configuration recorder.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_StartConfigurationRecorder.html\">StartConfigurationRecorder</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_StopConfigurationRecorder.html\">StopConfigurationRecorder</a>, you will see this exception because these operations do not affect service-linked configuration recorders. Service-linked configuration recorders are always recording. To stop recording, you must delete the service-linked configuration recorder. Use the <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DeleteServiceLinkedConfigurationRecorder.html\">DeleteServiceLinkedConfigurationRecorder</a> operation to delete a service-linked configuration recorder.</p>",
       "exception":true
     },
@@ -8725,8 +8706,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation is not valid. You will see this exception if there are missing required fields or if the input value fails the validation.</p> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_PutStoredQuery.html\">PutStoredQuery</a>, one of the following errors:</p> <ul> <li> <p>There are missing required fields.</p> </li> <li> <p>The input value fails the validation.</p> </li> <li> <p>You are trying to create more than 300 queries.</p> </li> </ul> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationRecorders.html\">DescribeConfigurationRecorders</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DescribeConfigurationRecorderStatus.html\">DescribeConfigurationRecorderStatus</a>, one of the following errors:</p> <ul> <li> <p>You have specified more than one configuration recorder.</p> </li> <li> <p>You have provided a service principal for service-linked configuration recorder that is not valid.</p> </li> </ul> <p>For <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_AssociateResourceTypes.html\">AssociateResourceTypes</a> and <a href=\"https://docs.aws.amazon.com/config/latest/APIReference/API_DisassociateResourceTypes.html\">DisassociateResourceTypes</a>, one of the following errors:</p> <ul> <li> <p>Your configuraiton recorder has a recording strategy that does not allow the association or disassociation of resource types.</p> </li> <li> <p>One or more of the specified resource types are already associated or disassociated with the configuration recorder.</p> </li> <li> <p>For service-linked configuration recorders, the configuration recorder does not record one or more of the specified resource types.</p> </li> </ul>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connect/2017-08-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connect/2017-08-08/paginators-1.json 2.31.35-1/awscli/botocore/data/connect/2017-08-08/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/connect/2017-08-08/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connect/2017-08-08/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -435,6 +435,16 @@
       ],
       "output_token": "NextToken",
       "result_key": "HoursOfOperationOverrides"
+    },
+    "ListRoutingProfileManualAssignmentQueues": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "non_aggregate_keys": [
+        "LastModifiedRegion",
+        "LastModifiedTime"
+      ],
+      "output_token": "NextToken",
+      "result_key": "RoutingProfileManualAssignmentQueueConfigSummaryList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/connect/2017-08-08/service-2.json 2.31.35-1/awscli/botocore/data/connect/2017-08-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/connect/2017-08-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connect/2017-08-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -85,6 +85,24 @@
       ],
       "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Allows the specified Amazon Connect instance to access the specified Amazon Lex or Amazon Lex V2 bot.</p>"
     },
+    "AssociateContactWithUser":{
+      "name":"AssociateContactWithUser",
+      "http":{
+        "method":"POST",
+        "requestUri":"/contacts/{InstanceId}/{ContactId}/associate-user"
+      },
+      "input":{"shape":"AssociateContactWithUserRequest"},
+      "output":{"shape":"AssociateContactWithUserResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Associates a queued contact with an agent.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Programmatically assign queued contacts to available users.</p> </li> <li> <p>Leverage the IAM context key <code>connect:PreferredUserArn</code> to restrict contact association to specific preferred user.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>Use this API with chat, email, and task contacts. It does not support voice contacts.</p> </li> <li> <p>Use it to associate contacts with users regardless of their current state, including custom states. Ensure your application logic accounts for user availability before making associations.</p> </li> <li> <p>It honors the IAM context key <code>connect:PreferredUserArn</code> to prevent unauthorized contact associations.</p> </li> <li> <p>It respects the IAM context key <code>connect:PreferredUserArn</code> to enforce authorization controls and prevent unauthorized contact associations. Verify that your IAM policies are properly configured to support your intended use cases.</p> </li> <li> <p>The service quota <i>Queues per routing profile per instance</i> applies to manually assigned queues, too. For more information about this quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a> in the <i>Amazon Connect Administrator Guide</i>.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
+    },
     "AssociateDefaultVocabulary":{
       "name":"AssociateDefaultVocabulary",
       "http":{
@@ -102,6 +120,26 @@
       ],
       "documentation":"<p>Associates an existing vocabulary as the default. Contact Lens for Amazon Connect uses the vocabulary in post-call and real-time analysis sessions for the given language.</p>"
     },
+    "AssociateEmailAddressAlias":{
+      "name":"AssociateEmailAddressAlias",
+      "http":{
+        "method":"POST",
+        "requestUri":"/email-addresses/{InstanceId}/{EmailAddressId}/associate-alias"
+      },
+      "input":{"shape":"AssociateEmailAddressAliasRequest"},
+      "output":{"shape":"AssociateEmailAddressAliasResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"IdempotencyException"}
+      ],
+      "documentation":"<p>Associates an email address alias with an existing email address in an Amazon Connect instance. This creates a forwarding relationship where emails sent to the alias email address are automatically forwarded to the primary email address. </p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p> <b>Unified customer support</b>: Create multiple entry points (for example, support@example.com, help@example.com, customercare@example.com) that all forward to a single agent queue for streamlined management.</p> </li> <li> <p> <b>Department consolidation</b>: Forward emails from legacy department addresses (for example, sales@example.com, info@example.com) to a centralized customer service email during organizational restructuring.</p> </li> <li> <p> <b>Brand management</b>: Enable you to use familiar brand-specific email addresses that forward to the appropriate Amazon Connect instance email address.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>Each email address can have a maximum of one alias. You cannot create multiple aliases for the same email address. </p> </li> <li> <p>If the alias email address already receives direct emails, it continues to receive direct emails plus forwarded emails.</p> </li> <li> <p>You cannot chain email aliases together (that is, create an alias of an alias).</p> </li> </ul> <p> <code>AssociateEmailAddressAlias</code> does not return the following information:</p> <ul> <li> <p>A confirmation of the alias relationship details (you must call <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeEmailAddress.html\">DescribeEmailAddress</a> to verify).</p> </li> <li> <p>The timestamp of when the association occurred.</p> </li> <li> <p>The status of the forwarding configuration.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DisassociateEmailAddressAlias.html\">DisassociateEmailAddressAlias</a>: Removes the alias association between two email addresses in an Amazon Connect instance.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeEmailAddress.html\">DescribeEmailAddress</a>: View current alias configurations for an email address.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_SearchEmailAddresses.html\">SearchEmailAddresses</a>: Find email addresses and their alias relationships across an instance.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateEmailAddress.html\">CreateEmailAddress</a>: Create new email addresses that can participate in alias relationships.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteEmailAddress.html\">DeleteEmailAddress</a>: Remove email addresses (automatically removes any alias relationships).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_UpdateEmailAddressMetadata.html\">UpdateEmailAddressMetadata</a>: Modify email address properties (does not affect alias relationships).</p> </li> </ul>"
+    },
     "AssociateFlow":{
       "name":"AssociateFlow",
       "http":{
@@ -205,7 +243,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Associates a set of quick connects with a queue.</p>"
+      "documentation":"<p>Associates a set of quick connects with a queue.</p>"
     },
     "AssociateRoutingProfileQueues":{
       "name":"AssociateRoutingProfileQueues",
@@ -417,7 +455,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Creates an agent status for the specified Amazon Connect instance.</p>"
+      "documentation":"<p>Creates an agent status for the specified Amazon Connect instance.</p>"
     },
     "CreateContact":{
       "name":"CreateContact",
@@ -438,7 +476,7 @@
         {"shape":"ConflictException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a new contact.</p>"
+      "documentation":"<important> <p>Only the VOICE, EMAIL, and TASK channels are supported. </p> <ul> <li> <p>For VOICE: The supported initiation method is <code>TRANSFER</code>. The contacts created with this initiation method have a subtype <code>connect:ExternalAudio</code>. </p> </li> <li> <p>For EMAIL: The supported initiation methods are <code>OUTBOUND</code>, <code>AGENT_REPLY</code>, and <code>FLOW</code>. </p> </li> <li> <p>For TASK: The supported initiation method is <code>API</code>. Contacts created with this API have a sub-type of <code>connect:ExternalTask</code>.</p> </li> </ul> </important> <p>Creates a new VOICE, EMAIL, or TASK contact. </p> <p>After a contact is created, you can move it to the desired state by using the <code>InitiateAs</code> parameter. While you can use API to create task contacts that are in the <code>COMPLETED</code> state, you must contact Amazon Web Services Support before using it for bulk import use cases. Bulk import causes your requests to be throttled or fail if your CreateContact limits aren't high enough. </p>"
     },
     "CreateContactFlow":{
       "name":"CreateContactFlow",
@@ -559,7 +597,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Creates hours of operation. </p>"
+      "documentation":"<p>Creates hours of operation. </p>"
     },
     "CreateHoursOfOperationOverride":{
       "name":"CreateHoursOfOperationOverride",
@@ -578,7 +616,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates an hours of operation override in an Amazon Connect hours of operation resource</p>"
+      "documentation":"<p>Creates an hours of operation override in an Amazon Connect hours of operation resource.</p>"
     },
     "CreateInstance":{
       "name":"CreateInstance",
@@ -627,9 +665,10 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServiceException"},
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Adds a new participant into an on-going chat contact. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-customize-flow.html\">Customize chat flow experiences by integrating custom participants</a>.</p>"
+      "documentation":"<p>Adds a new participant into an on-going chat contact or webRTC call. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-customize-flow.html\">Customize chat flow experiences by integrating custom participants</a> or <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-multiuser-inapp.html\">Enable multi-user web, in-app, and video calling</a>.</p>"
     },
     "CreatePersistentContactAssociation":{
       "name":"CreatePersistentContactAssociation",
@@ -665,7 +704,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a new predefined attribute for the specified Amazon Connect instance. <i>Predefined attributes</i> are attributes in an Amazon Connect instance that can be used to route contacts to an agent or pools of agents within a queue. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p>"
+      "documentation":"<p>Creates a new predefined attribute for the specified Amazon Connect instance. A <i>predefined attribute</i> is made up of a name and a value.</p> <p>For the predefined attributes per instance quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a>.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Create an attribute for routing proficiency (for example, agent certification) that has predefined values (for example, a list of possible certifications). For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p> </li> <li> <p>Create an attribute for business unit name that has a list of predefined business unit names used in your organization. This is a use case where information for a contact varies between transfers or conferences. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/use-contact-segment-attributes.html\">Use contact segment attributes</a>.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "CreatePrompt":{
       "name":"CreatePrompt",
@@ -870,7 +909,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a user account for the specified Amazon Connect instance.</p> <important> <p>Certain <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_UserIdentityInfo.html\">UserIdentityInfo</a> parameters are required in some situations. For example, <code>Email</code> is required if you are using SAML for identity management. <code>FirstName</code> and <code>LastName</code> are required if you are using Amazon Connect or SAML for identity management.</p> </important> <p>For information about how to create users using the Amazon Connect admin website, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/user-management.html\">Add Users</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+      "documentation":"<p>Creates a user account for the specified Amazon Connect instance.</p> <important> <p>Certain <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_UserIdentityInfo.html\">UserIdentityInfo</a> parameters are required in some situations. For example, <code>Email</code>, <code>FirstName</code> and <code>LastName</code> are required if you are using Amazon Connect or SAML for identity management.</p> </important> <p>For information about how to create users using the Amazon Connect admin website, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/user-management.html\">Add Users</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
     },
     "CreateUserHierarchyGroup":{
       "name":"CreateUserHierarchyGroup",
@@ -1108,7 +1147,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Deletes an hours of operation.</p>"
+      "documentation":"<p>Deletes an hours of operation.</p>"
     },
     "DeleteHoursOfOperationOverride":{
       "name":"DeleteHoursOfOperationOverride",
@@ -1124,7 +1163,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Deletes an hours of operation override in an Amazon Connect hours of operation resource</p>"
+      "documentation":"<p>Deletes an hours of operation override in an Amazon Connect hours of operation resource.</p>"
     },
     "DeleteInstance":{
       "name":"DeleteInstance",
@@ -1443,7 +1482,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Describes an agent status.</p>"
+      "documentation":"<p>Describes an agent status.</p>"
     },
     "DescribeAuthenticationProfile":{
       "name":"DescribeAuthenticationProfile",
@@ -1477,7 +1516,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Describes the specified contact. </p> <important> <p>Contact information remains available in Amazon Connect for 24 months from the InitiationTimestamp, and then it is deleted. Only contact information that is available in Amazon Connect is returned by this API</p> </important>"
+      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Describes the specified contact. </p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Retrieve contact information such as the caller's phone number and the specific number the caller dialed to integrate into custom monitoring or custom agent experience solutions.</p> </li> <li> <p>Detect when a customer chat session disconnects due to a network issue on the agent's end. Use the DisconnectReason field in the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord\">ContactTraceRecord</a> to detect this event and then re-queue the chat for followup.</p> </li> <li> <p>Identify after contact work (ACW) duration and call recordings information when a COMPLETED event is received by using the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/contact-events.html\">contact event stream</a>. </p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p> <code>SystemEndpoint</code> is not populated for contacts with initiation method of MONITOR, QUEUE_TRANSFER, or CALLBACK</p> </li> <li> <p>Contact information remains available in Amazon Connect for 24 months from the <code>InitiationTimestamp</code>, and then it is deleted. Only contact information that is available in Amazon Connect is returned by this API.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "DescribeContactEvaluation":{
       "name":"DescribeContactEvaluation",
@@ -1580,7 +1619,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Describes the hours of operation.</p>"
+      "documentation":"<p>Describes the hours of operation.</p>"
     },
     "DescribeHoursOfOperationOverride":{
       "name":"DescribeHoursOfOperationOverride",
@@ -1680,7 +1719,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Describes a predefined attribute for the specified Amazon Connect instance. <i>Predefined attributes</i> are attributes in an Amazon Connect instance that can be used to route contacts to an agent or pools of agents within a queue. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p>"
+      "documentation":"<p>Describes a predefined attribute for the specified Amazon Connect instance. A <i>predefined attribute</i> is made up of a name and a value. You can use predefined attributes for:</p> <ul> <li> <p>Routing proficiency (for example, agent certification) that has predefined values (for example, a list of possible certifications). For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p> </li> <li> <p>Contact information that varies between transfers or conferences, such as the name of the business unit handling the contact. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/use-contact-segment-attributes.html\">Use contact segment attributes</a>.</p> </li> </ul> <p>For the predefined attributes per instance quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a>.</p> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "DescribePrompt":{
       "name":"DescribePrompt",
@@ -1714,7 +1753,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Describes the specified queue.</p>"
+      "documentation":"<p>Describes the specified queue.</p>"
     },
     "DescribeQuickConnect":{
       "name":"DescribeQuickConnect",
@@ -1748,7 +1787,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Describes the specified routing profile.</p>"
+      "documentation":"<p>Describes the specified routing profile.</p> <note> <p> <code>DescribeRoutingProfile</code> does not populate AssociatedQueueIds in its response. The example Response Syntax shown on this page is incorrect; we are working to update it. <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_SearchRoutingProfiles.html\">SearchRoutingProfiles</a> does include AssociatedQueueIds.</p> </note>"
     },
     "DescribeRule":{
       "name":"DescribeRule",
@@ -1934,6 +1973,25 @@
       ],
       "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Revokes authorization from the specified instance to access the specified Amazon Lex or Amazon Lex V2 bot. </p>"
     },
+    "DisassociateEmailAddressAlias":{
+      "name":"DisassociateEmailAddressAlias",
+      "http":{
+        "method":"POST",
+        "requestUri":"/email-addresses/{InstanceId}/{EmailAddressId}/disassociate-alias"
+      },
+      "input":{"shape":"DisassociateEmailAddressAliasRequest"},
+      "output":{"shape":"DisassociateEmailAddressAliasResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"ResourceConflictException"}
+      ],
+      "documentation":"<p>Removes the alias association between two email addresses in an Amazon Connect instance. After disassociation, emails sent to the former alias email address are no longer forwarded to the primary email address. Both email addresses continue to exist independently and can receive emails directly.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p> <b>Department separation</b>: Remove alias relationships when splitting a consolidated support queue back into separate department-specific queues.</p> </li> <li> <p> <b>Email address retirement</b>: Cleanly remove forwarding relationships before decommissioning old email addresses.</p> </li> <li> <p> <b>Organizational restructuring</b>: Reconfigure email routing when business processes change and aliases are no longer needed.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>Concurrent operations: This API uses distributed locking, so concurrent operations on the same email addresses may be temporarily blocked.</p> </li> <li> <p>Emails sent to the former alias address are still delivered directly to that address if it exists.</p> </li> <li> <p>You do not need to delete the email addresses after disassociation. Both addresses remain active independently.</p> </li> <li> <p>After a successful disassociation, you can immediately create a new alias relationship with the same addresses.</p> </li> <li> <p>200 status means alias was successfully disassociated.</p> </li> </ul> <p> <code>DisassociateEmailAddressAlias</code> does not return the following information:</p> <ul> <li> <p>Details in the response about the email that was disassociated. The response returns an empty body.</p> </li> <li> <p>The timestamp of when the disassociation occurred.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_AssociateEmailAddressAlias.html\">AssociateEmailAddressAlias</a>: Associates an email address alias with an existing email address in an Amazon Connect instance.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeEmailAddress.html\">DescribeEmailAddress</a>: View current alias configurations for an email address.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_SearchEmailAddresses.html\">SearchEmailAddresses</a>: Find email addresses and their alias relationships across an instance.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateEmailAddress.html\">CreateEmailAddress</a>: Create new email addresses that can participate in alias relationships.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteEmailAddress.html\">DeleteEmailAddress</a>: Remove email addresses (automatically removes any alias relationships).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_UpdateEmailAddressMetadata.html\">UpdateEmailAddressMetadata</a>: Modify email address properties (does not affect alias relationships).</p> </li> </ul>"
+    },
     "DisassociateFlow":{
       "name":"DisassociateFlow",
       "http":{
@@ -2030,7 +2088,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Disassociates a set of quick connects from a queue.</p>"
+      "documentation":"<p>Disassociates a set of quick connects from a queue.</p>"
     },
     "DisassociateRoutingProfileQueues":{
       "name":"DisassociateRoutingProfileQueues",
@@ -2046,7 +2104,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Disassociates a set of queues from a routing profile.</p>"
+      "documentation":"<p>Disassociates a set of queues from a routing profile.</p> <p>Up to 10 queue references can be disassociated in a single API call. More than 10 queue references results in a single call results in an InvalidParameterException.</p>"
     },
     "DisassociateSecurityKey":{
       "name":"DisassociateSecurityKey",
@@ -2149,6 +2207,24 @@
       ],
       "documentation":"<p>Retrieves the contact attributes for the specified contact.</p>"
     },
+    "GetContactMetrics":{
+      "name":"GetContactMetrics",
+      "http":{
+        "method":"POST",
+        "requestUri":"/metrics/contact"
+      },
+      "input":{"shape":"GetContactMetricsRequest"},
+      "output":{"shape":"GetContactMetricsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Retrieves the position of the contact in the queue.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for position in queue:</p> <ul> <li> <p>Understand the expected wait experience of a contact.</p> </li> <li> <p>Inform customers of their position in queue and potentially offer a callback.</p> </li> <li> <p>Make data-driven routing decisions between primary and alternative queues.</p> </li> <li> <p>Enhance queue visibility and leverage agent proficiencies to streamline contact routing.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>The only way to retrieve the position of the contact in queue is by using this API. You can't retrieve the position by using flows and attributes.</p> </li> <li> <p>For more information, see the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Position in queue</a> metric in the <i>Amazon Connect Administrator Guide</i>. </p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
+    },
     "GetCurrentMetricData":{
       "name":"GetCurrentMetricData",
       "http":{
@@ -2164,7 +2240,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets the real-time metric data from the specified Amazon Connect instance.</p> <p>For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html\">Real-time Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+      "documentation":"<p>Gets the real-time metric data from the specified Amazon Connect instance.</p> <p>For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>When you make a successful API request, you can expect the following metric values in the response:</p> <ol> <li> <p> <b>Metric value is null</b>: The calculation cannot be performed due to divide by zero or insufficient data</p> </li> <li> <p> <b>Metric value is a number (including 0) of defined type</b>: The number provided is the calculation result</p> </li> <li> <p> <b>MetricResult list is empty</b>: The request cannot find any data in the system</p> </li> </ol> <p>The following guidelines can help you work with the API:</p> <ul> <li> <p>Each dimension in the metric response must contain a value</p> </li> <li> <p>Each item in MetricResult must include all requested metrics</p> </li> <li> <p>If the response is slow due to large result sets, try these approaches:</p> <ul> <li> <p>Add filters to reduce the amount of data returned</p> </li> </ul> </li> </ul> </note>"
     },
     "GetCurrentUserData":{
       "name":"GetCurrentUserData",
@@ -2251,7 +2327,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets historical metric data from the specified Amazon Connect instance.</p> <p>For a description of each historical metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html\">Historical Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>We recommend using the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html\">GetMetricDataV2</a> API. It provides more flexibility, features, and the ability to query longer time ranges than <code>GetMetricData</code>. Use it to retrieve historical agent and contact metrics for the last 3 months, at varying intervals. You can also use it to build custom dashboards to measure historical queue and agent performance. For example, you can track the number of incoming contacts for the last 7 days, with data split by day, to see how contact volume changed per day of the week.</p> </note>"
+      "documentation":"<p>Gets historical metric data from the specified Amazon Connect instance.</p> <p>For a description of each historical metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>We recommend using the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricDataV2.html\">GetMetricDataV2</a> API. It provides more flexibility, features, and the ability to query longer time ranges than <code>GetMetricData</code>. Use it to retrieve historical agent and contact metrics for the last 3 months, at varying intervals. You can also use it to build custom dashboards to measure historical queue and agent performance. For example, you can track the number of incoming contacts for the last 7 days, with data split by day, to see how contact volume changed per day of the week.</p> </note>"
     },
     "GetMetricDataV2":{
       "name":"GetMetricDataV2",
@@ -2268,7 +2344,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Gets metric data from the specified Amazon Connect instance. </p> <p> <code>GetMetricDataV2</code> offers more features than <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricData.html\">GetMetricData</a>, the previous version of this API. It has new metrics, offers filtering at a metric level, and offers the ability to filter and group data by channels, queues, routing profiles, agents, and agent hierarchy levels. It can retrieve historical data for the last 3 months, at varying intervals. It does not support agent queues.</p> <p>For a description of the historical metrics that are supported by <code>GetMetricDataV2</code> and <code>GetMetricData</code>, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html\">Historical metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+      "documentation":"<p>Gets metric data from the specified Amazon Connect instance. </p> <p> <code>GetMetricDataV2</code> offers more features than <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_GetMetricData.html\">GetMetricData</a>, the previous version of this API. It has new metrics, offers filtering at a metric level, and offers the ability to filter and group data by channels, queues, routing profiles, agents, and agent hierarchy levels. It can retrieve historical data for the last 3 months, at varying intervals. It does not support agent queues.</p> <p>For a description of the historical metrics that are supported by <code>GetMetricDataV2</code> and <code>GetMetricData</code>, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>When you make a successful API request, you can expect the following metric values in the response:</p> <ol> <li> <p> <b>Metric value is null</b>: The calculation cannot be performed due to divide by zero or insufficient data</p> </li> <li> <p> <b>Metric value is a number (including 0) of defined type</b>: The number provided is the calculation result</p> </li> <li> <p> <b>MetricResult list is empty</b>: The request cannot find any data in the system</p> </li> </ol> <p>The following guidelines can help you work with the API:</p> <ul> <li> <p>Each dimension in the metric response must contain a value</p> </li> <li> <p>Each item in MetricResult must include all requested metrics</p> </li> <li> <p>If the response is slow due to large result sets, try these approaches:</p> <ul> <li> <p>Narrow the time range of your request</p> </li> <li> <p>Add filters to reduce the amount of data returned</p> </li> </ul> </li> </ul> </note>"
     },
     "GetPromptFile":{
       "name":"GetPromptFile",
@@ -2354,7 +2430,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Lists agent statuses.</p>"
+      "documentation":"<p>Lists agent statuses.</p>"
     },
     "ListAnalyticsDataAssociations":{
       "name":"ListAnalyticsDataAssociations",
@@ -2373,6 +2449,23 @@
       ],
       "documentation":"<p>Lists the association status of requested dataset ID for a given Amazon Connect instance.</p>"
     },
+    "ListAnalyticsDataLakeDataSets":{
+      "name":"ListAnalyticsDataLakeDataSets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/analytics-data/instance/{InstanceId}/datasets"
+      },
+      "input":{"shape":"ListAnalyticsDataLakeDataSetsRequest"},
+      "output":{"shape":"ListAnalyticsDataLakeDataSetsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Lists the data lake datasets available to associate with for a given Amazon Connect instance.</p>"
+    },
     "ListApprovedOrigins":{
       "name":"ListApprovedOrigins",
       "http":{
@@ -2773,7 +2866,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Lists predefined attributes for the specified Amazon Connect instance. <i>Predefined attributes</i> are attributes in an Amazon Connect instance that can be used to route contacts to an agent or pools of agents within a queue. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p>"
+      "documentation":"<p>Lists predefined attributes for the specified Amazon Connect instance. A <i>predefined attribute</i> is made up of a name and a value. You can use predefined attributes for:</p> <ul> <li> <p>Routing proficiency (for example, agent certification) that has predefined values (for example, a list of possible certifications). For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p> </li> <li> <p>Contact information that varies between transfers or conferences, such as the name of the business unit handling the contact. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/use-contact-segment-attributes.html\">Use contact segment attributes</a>.</p> </li> </ul> <p>For the predefined attributes per instance quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a>.</p> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "ListPrompts":{
       "name":"ListPrompts",
@@ -2807,7 +2900,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Lists the quick connects associated with a queue.</p>"
+      "documentation":"<p>Lists the quick connects associated with a queue.</p>"
     },
     "ListQueues":{
       "name":"ListQueues",
@@ -2859,7 +2952,24 @@
         {"shape":"InternalServiceException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Provides a list of analysis segments for a real-time analysis session. </p>"
+      "documentation":"<p>Provides a list of analysis segments for a real-time chat analysis session. This API supports CHAT channels only. </p> <important> <p>This API does not support VOICE. If you attempt to use it for VOICE, an <code>InvalidRequestException</code> occurs.</p> </important>"
+    },
+    "ListRoutingProfileManualAssignmentQueues":{
+      "name":"ListRoutingProfileManualAssignmentQueues",
+      "http":{
+        "method":"GET",
+        "requestUri":"/routing-profiles/{InstanceId}/{RoutingProfileId}/manual-assignment-queues"
+      },
+      "input":{"shape":"ListRoutingProfileManualAssignmentQueuesRequest"},
+      "output":{"shape":"ListRoutingProfileManualAssignmentQueuesResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Lists the manual assignment queues associated with a routing profile.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>This API returns list of queues where contacts can be manually assigned or picked by an agent who has access to the Worklist app. The user can additionally filter on queues, if they have access to those queues (otherwise a invalid request exception will be thrown).</p> <p>For information about how manual contact assignment works in the agent workspace, see the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/worklist-app.html\">Access the Worklist app in the Amazon Connect agent workspace</a> in the <i>Amazon Connect Administrator Guide</i>. </p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>This API only returns the manual assignment queues associated with a routing profile. Use the ListRoutingProfileQueues API to list the auto assignment queues for the routing profile.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "ListRoutingProfileQueues":{
       "name":"ListRoutingProfileQueues",
@@ -3312,6 +3422,23 @@
       ],
       "documentation":"<p>Searches for available phone numbers that you can claim to your Amazon Connect instance or traffic distribution group. If the provided <code>TargetArn</code> is a traffic distribution group, you can call this API in both Amazon Web Services Regions associated with the traffic distribution group.</p>"
     },
+    "SearchContactEvaluations":{
+      "name":"SearchContactEvaluations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/search-contact-evaluations"
+      },
+      "input":{"shape":"SearchContactEvaluationsRequest"},
+      "output":{"shape":"SearchContactEvaluationsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Searches contact evaluations in an Amazon Connect instance, with optional filtering. </p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Find contact evaluations by using specific search criteria.</p> </li> <li> <p>Find contact evaluations that are tagged with a specific set of tags.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>A Search operation, unlike a List operation, takes time to index changes to resource (create, update or delete). If you don't see updated information for recently changed contact evaluations, try calling the API again in a few seconds. Contact Evaluations may not be fully backfilled with historical data in all regions yet, however all recently created Contact Evaluations should be available for search.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
+    },
     "SearchContactFlowModules":{
       "name":"SearchContactFlowModules",
       "http":{
@@ -3381,6 +3508,23 @@
       ],
       "documentation":"<p>Searches email address in an instance, with optional filtering.</p>"
     },
+    "SearchEvaluationForms":{
+      "name":"SearchEvaluationForms",
+      "http":{
+        "method":"POST",
+        "requestUri":"/search-evaluation-forms"
+      },
+      "input":{"shape":"SearchEvaluationFormsRequest"},
+      "output":{"shape":"SearchEvaluationFormsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceException"}
+      ],
+      "documentation":"<p>Searches evaluation forms in an Amazon Connect instance, with optional filtering.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>List all evaluation forms in an instance.</p> </li> <li> <p>Find all evaluation forms that meet specific criteria, such as Title, Description, Status, and more.</p> </li> <li> <p>Find all evaluation forms that are tagged with a specific set of tags.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>A Search operation, unlike a List operation, takes time to index changes to resource (create, update or delete). If you don't see updated information for recently changed contact evaluations, try calling the API again in a few seconds.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
+    },
     "SearchHoursOfOperationOverrides":{
       "name":"SearchHoursOfOperationOverrides",
       "http":{
@@ -3430,7 +3574,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Searches predefined attributes that meet certain criteria. <i>Predefined attributes</i> are attributes in an Amazon Connect instance that can be used to route contacts to an agent or pools of agents within a queue. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p>"
+      "documentation":"<p>Searches predefined attributes that meet certain criteria. A <i>predefined attribute</i> is made up of a name and a value. You can use predefined attributes for:</p> <ul> <li> <p>Routing proficiency (for example, agent certification) that has predefined values (for example, a list of possible certifications). For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p> </li> <li> <p>Contact information that varies between transfers or conferences, such as the name of the business unit handling the contact. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/use-contact-segment-attributes.html\">Use contact segment attributes</a>.</p> </li> </ul> <p>For the predefined attributes per instance quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a>.</p> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "SearchPrompts":{
       "name":"SearchPrompts",
@@ -3516,7 +3660,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Searches routing profiles in an Amazon Connect instance, with optional filtering.</p>"
+      "documentation":"<p>Searches routing profiles in an Amazon Connect instance, with optional filtering.</p> <note> <p> <code>SearchRoutingProfiles</code> does not populate LastModifiedRegion, LastModifiedTime, MediaConcurrencies.CrossChannelBehavior, and AgentAvailabilityTimer in its response, but <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeRoutingProfile.html\">DescribeRoutingProfile</a> does.</p> </note>"
     },
     "SearchSecurityProfiles":{
       "name":"SearchSecurityProfiles",
@@ -3915,7 +4059,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>When a contact is being recorded, this API suspends recording whatever is selected in the flow configuration: call, screen, or both. If only call recording or only screen recording is enabled, then it would be suspended. For example, you might suspend the screen recording while collecting sensitive information, such as a credit card number. Then use ResumeContactRecording to restart recording the screen.</p> <p>The period of time that the recording is suspended is filled with silence in the final recording.</p> <p>Voice and screen recordings are supported.</p>"
+      "documentation":"<p>When a contact is being recorded, this API suspends recording whatever is selected in the flow configuration: call (IVR or agent), screen, or both. If only call recording or only screen recording is enabled, then it would be suspended. For example, you might suspend the screen recording while collecting sensitive information, such as a credit card number. Then use <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_ResumeContactRecording.html\">ResumeContactRecording</a> to restart recording the screen.</p> <p>The period of time that the recording is suspended is filled with silence in the final recording. </p> <p> Voice (IVR, agent) and screen recordings are supported.</p>"
     },
     "TagContact":{
       "name":"TagContact",
@@ -3968,7 +4112,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Transfers contacts from one agent or queue to another agent or queue at any point after a contact is created. You can transfer a contact to another queue by providing the flow which orchestrates the contact to the destination queue. This gives you more control over contact handling and helps you adhere to the service level agreement (SLA) guaranteed to your customers.</p> <p>Note the following requirements:</p> <ul> <li> <p>Transfer is supported for only <code>TASK</code> contacts.</p> </li> <li> <p>Do not use both <code>QueueId</code> and <code>UserId</code> in the same call.</p> </li> <li> <p>The following flow types are supported: Inbound flow, Transfer to agent flow, and Transfer to queue flow.</p> </li> <li> <p>The <code>TransferContact</code> API can be called only on active contacts.</p> </li> <li> <p>A contact cannot be transferred more than 11 times.</p> </li> </ul>"
+      "documentation":"<p>Transfers <code>TASK</code> or <code>EMAIL</code> contacts from one agent or queue to another agent or queue at any point after a contact is created. You can transfer a contact to another queue by providing the flow which orchestrates the contact to the destination queue. This gives you more control over contact handling and helps you adhere to the service level agreement (SLA) guaranteed to your customers.</p> <p>Note the following requirements:</p> <ul> <li> <p>Transfer is only supported for <code>TASK</code> and <code>EMAIL</code> contacts.</p> </li> <li> <p>Do not use both <code>QueueId</code> and <code>UserId</code> in the same call.</p> </li> <li> <p>The following flow types are supported: Inbound flow, Transfer to agent flow, and Transfer to queue flow.</p> </li> <li> <p>The <code>TransferContact</code> API can be called only on active contacts.</p> </li> <li> <p>A contact cannot be transferred more than 11 times.</p> </li> </ul>"
     },
     "UntagContact":{
       "name":"UntagContact",
@@ -4020,7 +4164,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates agent status.</p>"
+      "documentation":"<p>Updates agent status.</p>"
     },
     "UpdateAuthenticationProfile":{
       "name":"UpdateAuthenticationProfile",
@@ -4270,7 +4414,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the hours of operation.</p>"
+      "documentation":"<p>Updates the hours of operation.</p>"
     },
     "UpdateHoursOfOperationOverride":{
       "name":"UpdateHoursOfOperationOverride",
@@ -4410,7 +4554,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates a predefined attribute for the specified Amazon Connect instance. <i>Predefined attributes</i> are attributes in an Amazon Connect instance that can be used to route contacts to an agent or pools of agents within a queue. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p>"
+      "documentation":"<p>Updates a predefined attribute for the specified Amazon Connect instance. A <i>predefined attribute</i> is made up of a name and a value.</p> <p>For the predefined attributes per instance quota, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#connect-quotas\">Amazon Connect quotas</a>.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Update routing proficiency (for example, agent certification) that has predefined values (for example, a list of possible certifications). For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/predefined-attributes.html\">Create predefined attributes for routing contacts to agents</a>.</p> </li> <li> <p>Update an attribute for business unit name that has a list of predefined business unit names used in your organization. This is a use case where information for a contact varies between transfers or conferences. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/use-contact-segment-attributes.html\">Use contact segment attributes</a>.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>"
     },
     "UpdatePrompt":{
       "name":"UpdatePrompt",
@@ -4443,7 +4587,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the hours of operation for the specified queue.</p>"
+      "documentation":"<p>Updates the hours of operation for the specified queue.</p>"
     },
     "UpdateQueueMaxContacts":{
       "name":"UpdateQueueMaxContacts",
@@ -4459,7 +4603,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the maximum number of contacts allowed in a queue before it is considered full.</p>"
+      "documentation":"<p>Updates the maximum number of contacts allowed in a queue before it is considered full.</p>"
     },
     "UpdateQueueName":{
       "name":"UpdateQueueName",
@@ -4476,7 +4620,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the name and description of a queue. At least <code>Name</code> or <code>Description</code> must be provided.</p>"
+      "documentation":"<p>Updates the name and description of a queue. At least <code>Name</code> or <code>Description</code> must be provided.</p>"
     },
     "UpdateQueueOutboundCallerConfig":{
       "name":"UpdateQueueOutboundCallerConfig",
@@ -4492,7 +4636,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the outbound caller ID name, number, and outbound whisper flow for a specified queue.</p> <important> <ul> <li> <p>If the phone number is claimed to a traffic distribution group that was created in the same Region as the Amazon Connect instance where you are calling this API, then you can use a full phone number ARN or a UUID for <code>OutboundCallerIdNumberId</code>. However, if the phone number is claimed to a traffic distribution group that is in one Region, and you are calling this API from an instance in another Amazon Web Services Region that is associated with the traffic distribution group, you must provide a full phone number ARN. If a UUID is provided in this scenario, you will receive a <code>ResourceNotFoundException</code>.</p> </li> <li> <p>Only use the phone number ARN format that doesn't contain <code>instance</code> in the path, for example, <code>arn:aws:connect:us-east-1:1234567890:phone-number/uuid</code>. This is the same ARN format that is returned when you call the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_ListPhoneNumbersV2.html\">ListPhoneNumbersV2</a> API.</p> </li> <li> <p>If you plan to use IAM policies to allow/deny access to this API for phone number resources claimed to a traffic distribution group, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security_iam_resource-level-policy-examples.html#allow-deny-queue-actions-replica-region\">Allow or Deny queue API actions for phone numbers in a replica Region</a>.</p> </li> </ul> </important>"
+      "documentation":"<p>Updates the outbound caller ID name, number, and outbound whisper flow for a specified queue.</p> <important> <ul> <li> <p>If the phone number is claimed to a traffic distribution group that was created in the same Region as the Amazon Connect instance where you are calling this API, then you can use a full phone number ARN or a UUID for <code>OutboundCallerIdNumberId</code>. However, if the phone number is claimed to a traffic distribution group that is in one Region, and you are calling this API from an instance in another Amazon Web Services Region that is associated with the traffic distribution group, you must provide a full phone number ARN. If a UUID is provided in this scenario, you will receive a <code>ResourceNotFoundException</code>.</p> </li> <li> <p>Only use the phone number ARN format that doesn't contain <code>instance</code> in the path, for example, <code>arn:aws:connect:us-east-1:1234567890:phone-number/uuid</code>. This is the same ARN format that is returned when you call the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_ListPhoneNumbersV2.html\">ListPhoneNumbersV2</a> API.</p> </li> <li> <p>If you plan to use IAM policies to allow/deny access to this API for phone number resources claimed to a traffic distribution group, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security_iam_resource-level-policy-examples.html#allow-deny-queue-actions-replica-region\">Allow or Deny queue API actions for phone numbers in a replica Region</a>.</p> </li> </ul> </important>"
     },
     "UpdateQueueOutboundEmailConfig":{
       "name":"UpdateQueueOutboundEmailConfig",
@@ -4526,7 +4670,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Updates the status of the queue.</p>"
+      "documentation":"<p>Updates the status of the queue.</p>"
     },
     "UpdateQuickConnectConfig":{
       "name":"UpdateQuickConnectConfig",
@@ -4708,7 +4852,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates the traffic distribution for a given traffic distribution group. </p> <note> <p>The <code>SignInConfig</code> distribution is available only on a default <code>TrafficDistributionGroup</code> (see the <code>IsDefault</code> parameter in the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_TrafficDistributionGroup.html\">TrafficDistributionGroup</a> data type). If you call <code>UpdateTrafficDistribution</code> with a modified <code>SignInConfig</code> and a non-default <code>TrafficDistributionGroup</code>, an <code>InvalidRequestException</code> is returned.</p> </note> <p>For more information about updating a traffic distribution group, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/update-telephony-traffic-distribution.html\">Update telephony traffic distribution across Amazon Web Services Regions </a> in the <i>Amazon Connect Administrator Guide</i>. </p>"
+      "documentation":"<p>Updates the traffic distribution for a given traffic distribution group. </p> <important> <p>When you shift telephony traffic, also shift agents and/or agent sign-ins to ensure they can handle the calls in the other Region. If you don't shift the agents, voice calls will go to the shifted Region but there won't be any agents available to receive the calls.</p> </important> <note> <p>The <code>SignInConfig</code> distribution is available only on a default <code>TrafficDistributionGroup</code> (see the <code>IsDefault</code> parameter in the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_TrafficDistributionGroup.html\">TrafficDistributionGroup</a> data type). If you call <code>UpdateTrafficDistribution</code> with a modified <code>SignInConfig</code> and a non-default <code>TrafficDistributionGroup</code>, an <code>InvalidRequestException</code> is returned.</p> </note> <p>For more information about updating a traffic distribution group, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/update-telephony-traffic-distribution.html\">Update telephony traffic distribution across Amazon Web Services Regions </a> in the <i>Amazon Connect Administrator Guide</i>. </p>"
     },
     "UpdateUserHierarchy":{
       "name":"UpdateUserHierarchy",
@@ -4922,6 +5066,7 @@
         "SEND_NOTIFICATION",
         "CREATE_CASE",
         "UPDATE_CASE",
+        "ASSIGN_SLA",
         "END_ASSOCIATED_TASKS",
         "SUBMIT_AUTO_EVALUATION"
       ]
@@ -5045,6 +5190,16 @@
       "type":"list",
       "member":{"shape":"AgentContactReference"}
     },
+    "AgentFirst":{
+      "type":"structure",
+      "members":{
+        "Preview":{
+          "shape":"Preview",
+          "documentation":"<p>Information about preview configuration of agent first outbound strategy</p>"
+        }
+      },
+      "documentation":"<p>Information about agent-first outbound strategy configuration.</p>"
+    },
     "AgentFirstName":{
       "type":"string",
       "max":255,
@@ -5102,6 +5257,14 @@
           "shape":"AgentResourceId",
           "documentation":"<p>The identifier of the agent who accepted the contact.</p>"
         },
+        "AcceptedByAgentTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the contact was accepted by the agent.</p>"
+        },
+        "PreviewEndTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the agent finished previewing the contact.</p>"
+        },
         "ConnectedToAgentTimestamp":{
           "shape":"timestamp",
           "documentation":"<p>The timestamp when the contact was connected to the agent.</p>"
@@ -5118,7 +5281,27 @@
           "shape":"DeviceInfo",
           "documentation":"<p>Information regarding Agent’s device.</p>"
         },
-        "Capabilities":{"shape":"ParticipantCapabilities"}
+        "Capabilities":{"shape":"ParticipantCapabilities"},
+        "AfterContactWorkDuration":{
+          "shape":"Duration",
+          "documentation":"<p>The difference in time, in whole seconds, between <code>AfterContactWorkStartTimestamp</code> and <code>AfterContactWorkEndTimestamp</code>.</p>"
+        },
+        "AfterContactWorkStartTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the agent started doing After Contact Work for the contact, in UTC time.</p>"
+        },
+        "AfterContactWorkEndTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the agent ended After Contact Work for the contact, in UTC time. In cases when agent finishes doing <code>AfterContactWork</code> for chat contacts and switches their activity status to offline or equivalent without clearing the contact in CCP, discrepancies may be noticed for <code>AfterContactWorkEndTimestamp</code>.</p>"
+        },
+        "AgentInitiatedHoldDuration":{
+          "shape":"Duration",
+          "documentation":"<p>The total hold duration in seconds initiated by the agent.</p>"
+        },
+        "StateTransitions":{
+          "shape":"StateTransitions",
+          "documentation":"<p>List of <code>StateTransition</code> for a supervisor.</p>"
+        }
       },
       "documentation":"<p>Information about the agent who accepted the contact.</p>"
     },
@@ -5205,6 +5388,20 @@
       "min":1
     },
     "AgentStatusId":{"type":"string"},
+    "AgentStatusIdentifier":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the agent status.</p>"
+        },
+        "Id":{
+          "shape":"AgentStatusId",
+          "documentation":"<p>The identifier of the agent status.</p>"
+        }
+      },
+      "documentation":"<p>Information about the agent status assigned to the user.</p>"
+    },
     "AgentStatusList":{
       "type":"list",
       "member":{"shape":"AgentStatus"}
@@ -5323,6 +5520,10 @@
       "member":{"shape":"AgentStatusType"},
       "max":3
     },
+    "AgentStatuses":{
+      "type":"list",
+      "member":{"shape":"AgentStatusId"}
+    },
     "AgentUsername":{
       "type":"string",
       "max":100,
@@ -5349,6 +5550,22 @@
       "max":100,
       "min":1
     },
+    "AliasConfiguration":{
+      "type":"structure",
+      "required":["EmailAddressId"],
+      "members":{
+        "EmailAddressId":{
+          "shape":"EmailAddressId",
+          "documentation":"<p>The email address ID.</p>"
+        }
+      },
+      "documentation":"<p>Configuration information of an email alias.</p>"
+    },
+    "AliasConfigurationList":{
+      "type":"list",
+      "member":{"shape":"AliasConfiguration"},
+      "max":1
+    },
     "AllowedAccessControlTags":{
       "type":"map",
       "key":{"shape":"SecurityProfilePolicyKey"},
@@ -5374,6 +5591,17 @@
       "member":{"shape":"MonitorCapability"},
       "max":2
     },
+    "AllowedUserAction":{
+      "type":"string",
+      "enum":[
+        "CALL",
+        "DISCARD"
+      ]
+    },
+    "AllowedUserActions":{
+      "type":"list",
+      "member":{"shape":"AllowedUserAction"}
+    },
     "AnalyticsDataAssociationResult":{
       "type":"structure",
       "members":{
@@ -5392,6 +5620,10 @@
         "ResourceShareArn":{
           "shape":"ARN",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Resource Access Manager share. </p>"
+        },
+        "ResourceShareStatus":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Resource Access Manager status of association.</p>"
         }
       },
       "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change.</p> <p>Information about associations that are successfully created: <code>DataSetId</code>, <code>TargetAccountId</code>, <code>ResourceShareId</code>, <code>ResourceShareArn</code>. </p>"
@@ -5400,6 +5632,24 @@
       "type":"list",
       "member":{"shape":"AnalyticsDataAssociationResult"}
     },
+    "AnalyticsDataSetsResult":{
+      "type":"structure",
+      "members":{
+        "DataSetId":{
+          "shape":"DataSetId",
+          "documentation":"<p>The identifier of the dataset.</p>"
+        },
+        "DataSetName":{
+          "shape":"String",
+          "documentation":"<p>The name of the dataset.</p>"
+        }
+      },
+      "documentation":"<p>Information about datasets that are available to associate with: <code>DataSetId</code>, <code>DataSetName</code>.</p>"
+    },
+    "AnalyticsDataSetsResults":{
+      "type":"list",
+      "member":{"shape":"AnalyticsDataSetsResult"}
+    },
     "AnswerMachineDetectionConfig":{
       "type":"structure",
       "members":{
@@ -5474,9 +5724,23 @@
     },
     "AssignContactCategoryActionDefinition":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>This action must be set if <code>TriggerEventSource</code> is one of the following values: <code>OnPostCallAnalysisAvailable</code> | <code>OnRealTimeCallAnalysisAvailable</code> | <code>OnRealTimeChatAnalysisAvailable</code> | <code>OnPostChatAnalysisAvailable</code>. Contact is categorized using the rule name.</p> <p> <code>RuleName</code> is used as <code>ContactCategory</code>.</p>"
+    },
+    "AssignSlaActionDefinition":{
+      "type":"structure",
+      "required":["SlaAssignmentType"],
       "members":{
+        "SlaAssignmentType":{
+          "shape":"SlaAssignmentType",
+          "documentation":"<p>Type of SLA assignment.</p>"
+        },
+        "CaseSlaConfiguration":{
+          "shape":"CaseSlaConfiguration",
+          "documentation":"<p>The SLA configuration for Case SLA Assignment.</p>"
+        }
       },
-      "documentation":"<p>This action must be set if <code>TriggerEventSource</code> is one of the following values: <code>OnPostCallAnalysisAvailable</code> | <code>OnRealTimeCallAnalysisAvailable</code> | <code>OnRealTimeChatAnalysisAvailable</code> | <code>OnPostChatAnalysisAvailable</code>. Contact is categorized using the rule name.</p> <p> <code>RuleName</code> is used as <code>ContactCategory</code>.</p>"
+      "documentation":"<p>The AssignSla action definition.</p>"
     },
     "AssociateAnalyticsDataSetRequest":{
       "type":"structure",
@@ -5538,6 +5802,11 @@
         "Origin":{
           "shape":"Origin",
           "documentation":"<p>The domain to add to your allow list.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -5555,9 +5824,44 @@
         "LexV2Bot":{
           "shape":"LexV2Bot",
           "documentation":"<p>The Amazon Lex V2 bot to associate with the instance.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
+    "AssociateContactWithUserRequest":{
+      "type":"structure",
+      "required":[
+        "InstanceId",
+        "ContactId",
+        "UserId"
+      ],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "location":"uri",
+          "locationName":"InstanceId"
+        },
+        "ContactId":{
+          "shape":"ContactId",
+          "documentation":"<p>The identifier of the contact in this instance of Amazon Connect. </p>",
+          "location":"uri",
+          "locationName":"ContactId"
+        },
+        "UserId":{
+          "shape":"AgentResourceId",
+          "documentation":"<p>The identifier for the user. This can be the ID or the ARN of the user.</p>"
+        }
+      }
+    },
+    "AssociateContactWithUserResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "AssociateDefaultVocabularyRequest":{
       "type":"structure",
       "required":[
@@ -5585,9 +5889,43 @@
     },
     "AssociateDefaultVocabularyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "AssociateEmailAddressAliasRequest":{
+      "type":"structure",
+      "required":[
+        "EmailAddressId",
+        "InstanceId",
+        "AliasConfiguration"
+      ],
       "members":{
+        "EmailAddressId":{
+          "shape":"EmailAddressId",
+          "documentation":"<p>The identifier of the email address.</p>",
+          "location":"uri",
+          "locationName":"EmailAddressId"
+        },
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "location":"uri",
+          "locationName":"InstanceId"
+        },
+        "AliasConfiguration":{
+          "shape":"AliasConfiguration",
+          "documentation":"<p>Configuration object that specifies which email address will serve as the alias. The specified email address must already exist in the Amazon Connect instance and cannot already be configured as an alias or have an alias of its own.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
+        }
       }
     },
+    "AssociateEmailAddressAliasResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "AssociateFlowRequest":{
       "type":"structure",
       "required":[
@@ -5619,8 +5957,7 @@
     },
     "AssociateFlowResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateInstanceStorageConfigRequest":{
       "type":"structure",
@@ -5643,6 +5980,11 @@
         "StorageConfig":{
           "shape":"InstanceStorageConfig",
           "documentation":"<p>A valid storage type.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -5671,6 +6013,11 @@
         "FunctionArn":{
           "shape":"FunctionArn",
           "documentation":"<p>The Amazon Resource Name (ARN) for the Lambda function being associated. Maximum number of characters allowed is 140.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -5690,6 +6037,11 @@
         "LexBot":{
           "shape":"LexBot",
           "documentation":"<p>The Amazon Lex bot to associate with the instance.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -5747,8 +6099,7 @@
       "type":"structure",
       "required":[
         "InstanceId",
-        "RoutingProfileId",
-        "QueueConfigs"
+        "RoutingProfileId"
       ],
       "members":{
         "InstanceId":{
@@ -5766,6 +6117,10 @@
         "QueueConfigs":{
           "shape":"RoutingProfileQueueConfigList",
           "documentation":"<p>The queues to associate with this routing profile.</p>"
+        },
+        "ManualAssignmentQueueConfigs":{
+          "shape":"RoutingProfileManualAssignmentQueueConfigList",
+          "documentation":"<p>The manual assignment queues to associate with this routing profile.</p>"
         }
       }
     },
@@ -5785,6 +6140,11 @@
         "Key":{
           "shape":"PEM",
           "documentation":"<p>A valid security key in PEM format as a String.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -5823,8 +6183,7 @@
     },
     "AssociateTrafficDistributionGroupUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateUserProficienciesRequest":{
       "type":"structure",
@@ -5869,7 +6228,7 @@
         },
         "DisconnectTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>The timestamp when the customer endpoint disconnected from Amazon Connect.</p>"
+          "documentation":"<p>The date and time that the customer endpoint disconnected from the current contact, in UTC time. In transfer scenarios, the DisconnectTimestamp of the previous contact indicates the date and time when that contact ended.</p>"
         },
         "InitialContactId":{
           "shape":"ContactId",
@@ -6207,11 +6566,24 @@
         },
         "PeriodicSessionDuration":{
           "shape":"AccessTokenDuration",
-          "documentation":"<p>The short lived session duration configuration for users logged in to Amazon Connect, in minutes. This value determines the maximum possible time before an agent is authenticated. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/authentication-profiles.html#configure-session-timeouts\">Configure the session duration</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+          "documentation":"<p>The short lived session duration configuration for users logged in to Amazon Connect, in minutes. This value determines the maximum possible time before an agent is authenticated. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/authentication-profiles.html#configure-session-timeouts\">Configure the session duration</a> in the <i>Amazon Connect Administrator Guide</i>.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"PeriodicSessionDuration is deprecated. Use SessionInactivityDuration instead.",
+          "deprecatedSince":"10/31/2025"
         },
         "MaxSessionDuration":{
           "shape":"RefreshTokenDuration",
           "documentation":"<p>The long lived session duration for users logged in to Amazon Connect, in minutes. After this time period, users must log in again. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/authentication-profiles.html#configure-session-timeouts\">Configure the session duration</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+        },
+        "SessionInactivityDuration":{
+          "shape":"InactivityDuration",
+          "documentation":"<p>The period, in minutes, before an agent is automatically signed out of the contact center when they go inactive.</p>",
+          "box":true
+        },
+        "SessionInactivityHandlingEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if automatic logout on user inactivity is enabled.</p>",
+          "box":true
         }
       },
       "documentation":"<p>This API is in preview release for Amazon Connect and is subject to change. To request access to this API, contact Amazon Web Services Support.</p> <p>Information about an authentication profile. An authentication profile is a resource that stores the authentication settings for users in your contact center. You use authentication profiles to set up IP address range restrictions and session timeouts. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/authentication-profiles.html\">Set IP address restrictions or session timeouts</a>. </p>"
@@ -6272,6 +6644,50 @@
       "sensitive":true
     },
     "AutoAccept":{"type":"boolean"},
+    "AutoEvaluationConfiguration":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether automated evaluations are enabled.</p>"
+        }
+      },
+      "documentation":"<p>Configuration information about automated evaluations.</p>"
+    },
+    "AutoEvaluationDetails":{
+      "type":"structure",
+      "required":["AutoEvaluationEnabled"],
+      "members":{
+        "AutoEvaluationEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether automated evaluation is enabled.</p>"
+        },
+        "AutoEvaluationStatus":{
+          "shape":"AutoEvaluationStatus",
+          "documentation":"<p>The status of the contact auto-evaluation. </p>"
+        }
+      },
+      "documentation":"<p>Details about automated evaluations.</p>"
+    },
+    "AutoEvaluationStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "FAILED",
+        "SUCCEEDED"
+      ]
+    },
+    "AutomaticFailConfiguration":{
+      "type":"structure",
+      "members":{
+        "TargetSection":{
+          "shape":"ReferenceId",
+          "documentation":"<p>The referenceId of the target section for auto failure.</p>"
+        }
+      },
+      "documentation":"<p>Information about automatic fail configuration for an evaluation form.</p>"
+    },
     "AvailableNumberSummary":{
       "type":"structure",
       "members":{
@@ -6494,6 +6910,27 @@
       "sensitive":true
     },
     "Boolean":{"type":"boolean"},
+    "BooleanComparisonType":{
+      "type":"string",
+      "enum":[
+        "IS_TRUE",
+        "IS_FALSE"
+      ]
+    },
+    "BooleanCondition":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"String",
+          "documentation":"<p>A name of the property to be searched.</p>"
+        },
+        "ComparisonType":{
+          "shape":"BooleanComparisonType",
+          "documentation":"<p>Boolean property comparison type.</p>"
+        }
+      },
+      "documentation":"<p>A boolean search condition for Search APIs.</p>"
+    },
     "BotName":{
       "type":"string",
       "max":50
@@ -6519,6 +6956,37 @@
       "max":100,
       "min":1
     },
+    "CaseSlaConfiguration":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Type",
+        "TargetSlaMinutes"
+      ],
+      "members":{
+        "Name":{
+          "shape":"SlaName",
+          "documentation":"<p>Name of an SLA.</p>"
+        },
+        "Type":{
+          "shape":"SlaType",
+          "documentation":"<p>Type of SLA for Case SlaAssignmentType.</p>"
+        },
+        "FieldId":{
+          "shape":"FieldValueId",
+          "documentation":"<p>Unique identifier of a Case field.</p>"
+        },
+        "TargetFieldValues":{
+          "shape":"SlaFieldValueUnionList",
+          "documentation":"<p>Represents a list of target field values for the fieldId specified in CaseSlaConfiguration. The SLA is considered met if any one of these target field values matches the actual field value.</p>"
+        },
+        "TargetSlaMinutes":{
+          "shape":"TargetSlaMinutes",
+          "documentation":"<p>Target duration in minutes within which an SLA should be completed.</p>"
+        }
+      },
+      "documentation":"<p>The SLA configuration for Case SlaAssignmentType.</p>"
+    },
     "Channel":{
       "type":"string",
       "enum":[
@@ -6542,6 +7010,44 @@
       "member":{"shape":"Channel"},
       "max":4
     },
+    "ChatContactMetrics":{
+      "type":"structure",
+      "members":{
+        "MultiParty":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>A boolean flag indicating whether multiparty chat or supervisor barge were enabled on this contact.</p>"
+        },
+        "TotalMessages":{
+          "shape":"Count",
+          "documentation":"<p>The number of chat messages on the contact.</p>"
+        },
+        "TotalBotMessages":{
+          "shape":"Count",
+          "documentation":"<p>The total number of bot and automated messages on a chat contact.</p>"
+        },
+        "TotalBotMessageLengthInChars":{
+          "shape":"Count",
+          "documentation":"<p>The total number of characters from bot and automated messages on a chat contact.</p>"
+        },
+        "ConversationCloseTimeInMillis":{
+          "shape":"DurationMillis",
+          "documentation":"<p>The time it took for a contact to end after the last customer message.</p>"
+        },
+        "ConversationTurnCount":{
+          "shape":"Count",
+          "documentation":"<p>The number of conversation turns in a chat contact, which represents the back-and-forth exchanges between customer and other participants.</p>"
+        },
+        "AgentFirstResponseTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The agent first response timestamp for a chat contact.</p>"
+        },
+        "AgentFirstResponseTimeInMillis":{
+          "shape":"DurationMillis",
+          "documentation":"<p>The time for an agent to respond after obtaining a chat contact.</p>"
+        }
+      },
+      "documentation":"<p>Information about the overall participant interactions at the contact level.</p>"
+    },
     "ChatContent":{
       "type":"string",
       "max":16384,
@@ -6602,6 +7108,24 @@
       },
       "documentation":"<p>A chat message.</p>"
     },
+    "ChatMetrics":{
+      "type":"structure",
+      "members":{
+        "ChatContactMetrics":{
+          "shape":"ChatContactMetrics",
+          "documentation":"<p>Information about the overall participant interactions at the contact level.</p>"
+        },
+        "AgentMetrics":{
+          "shape":"ParticipantMetrics",
+          "documentation":"<p>Information about agent interactions in a contact.</p>"
+        },
+        "CustomerMetrics":{
+          "shape":"ParticipantMetrics",
+          "documentation":"<p>Information about customer interactions in a contact.</p>"
+        }
+      },
+      "documentation":"<p>Information about how agent, bot, and customer interact in a chat contact.</p>"
+    },
     "ChatParticipantRoleConfig":{
       "type":"structure",
       "required":["ParticipantTimerConfigList"],
@@ -6794,8 +7318,7 @@
     },
     "CompleteAttachedFileUploadResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"Response from CompleteAttachedFileUpload API"
     },
     "Concurrency":{
@@ -6906,7 +7429,7 @@
         },
         "DisconnectTimestamp":{
           "shape":"timestamp",
-          "documentation":"<p>The timestamp when the customer endpoint disconnected from Amazon Connect.</p>"
+          "documentation":"<p>The date and time that the customer endpoint disconnected from the current contact, in UTC time. In transfer scenarios, the DisconnectTimestamp of the previous contact indicates the date and time when that contact ended.</p>"
         },
         "LastUpdateTimestamp":{
           "shape":"timestamp",
@@ -6989,6 +7512,10 @@
           "shape":"QualityMetrics",
           "documentation":"<p>Information about the quality of the participant's media connection.</p>"
         },
+        "ChatMetrics":{
+          "shape":"ChatMetrics",
+          "documentation":"<p>Information about how agent, bot, and customer interact in a chat contact.</p>"
+        },
         "DisconnectDetails":{
           "shape":"DisconnectDetails",
           "documentation":"<p>Information about the call disconnect experience.</p>"
@@ -7000,6 +7527,34 @@
         "SegmentAttributes":{
           "shape":"SegmentAttributes",
           "documentation":"<p>A set of system defined key-value pairs stored on individual contact segments using an attribute map. The attributes are standard Amazon Connect attributes and can be accessed in flows. Attribute keys can include only alphanumeric, -, and _ characters. This field can be used to show channel subtype. For example, <code>connect:Guide</code> or <code>connect:SMS</code>.</p>"
+        },
+        "Recordings":{
+          "shape":"Recordings",
+          "documentation":"<p>If recording was enabled, this is information about the recordings.</p>"
+        },
+        "DisconnectReason":{
+          "shape":"String",
+          "documentation":"<p>The disconnect reason for the contact. For a list and description of all the possible disconnect reasons by channel, see DisconnectReason under <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord\">ContactTraceRecord</a> in the <i>Amazon Connect Administrator Guide</i>. </p>"
+        },
+        "ContactEvaluations":{
+          "shape":"ContactEvaluations",
+          "documentation":"<p>Information about the contact evaluations where the key is the FormId, which is a unique identifier for the form.</p>"
+        },
+        "TaskTemplateInfo":{
+          "shape":"TaskTemplateInfoV2",
+          "documentation":"<p>If this contact was created using a task template, this contains information about the task template.</p>"
+        },
+        "ContactDetails":{
+          "shape":"ContactDetails",
+          "documentation":"<p>A map of string key/value pairs that contain user-defined attributes which are lightly typed within the contact. This object is used only for task contacts.</p>"
+        },
+        "OutboundStrategy":{
+          "shape":"OutboundStrategy",
+          "documentation":"<p>Information about the outbound strategy.</p>"
+        },
+        "Attributes":{
+          "shape":"Attributes",
+          "documentation":"<p>The attributes of the contact.</p>"
         }
       },
       "documentation":"<p>Contains information about a contact.</p>"
@@ -7059,6 +7614,10 @@
         "Campaign":{
           "shape":"Campaign",
           "documentation":"<p>Structure to store information associated with a campaign.</p>"
+        },
+        "OutboundStrategy":{
+          "shape":"OutboundStrategy",
+          "documentation":"<p>Information about the outbound strategy.</p>"
         }
       },
       "documentation":"<p>Request object with information to create a contact.</p>"
@@ -7069,6 +7628,69 @@
       "max":25,
       "min":1
     },
+    "ContactDetailDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ContactDetailName":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ContactDetails":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"ContactDetailName",
+          "documentation":"<p>The name of the contact details.</p>"
+        },
+        "Description":{
+          "shape":"ContactDetailDescription",
+          "documentation":"<p>Teh description of the contact details.</p>"
+        }
+      },
+      "documentation":"<p>A map of string key/value pairs that contain user-defined attributes which are lightly typed within the contact. This object is used only for task contacts. </p>"
+    },
+    "ContactEvaluation":{
+      "type":"structure",
+      "members":{
+        "FormId":{
+          "shape":"FormId",
+          "documentation":"<p>The <code>FormId</code> of the contact evaluation.</p>"
+        },
+        "EvaluationArn":{
+          "shape":"EvaluationArn",
+          "documentation":"<p>The Amazon Resource Name for the evaluation form. It is always present.</p>"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the evaluation.</p>"
+        },
+        "StartTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the evaluation was started, in UTC time.</p>"
+        },
+        "EndTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the evaluation was submitted, in UTC time.</p>"
+        },
+        "DeleteTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the evaluation was deleted, in UTC time.</p>"
+        },
+        "ExportLocation":{
+          "shape":"ExportLocation",
+          "documentation":"<p>The path where evaluation was exported.</p>"
+        }
+      },
+      "documentation":"<p>Information about the contact evaluations where the key is the FormId, which is a unique identifier for the form.</p>"
+    },
+    "ContactEvaluations":{
+      "type":"map",
+      "key":{"shape":"EvaluationId"},
+      "value":{"shape":"ContactEvaluation"}
+    },
     "ContactFilter":{
       "type":"structure",
       "members":{
@@ -7452,6 +8074,59 @@
         "FLOW"
       ]
     },
+    "ContactMetricInfo":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"ContactMetricName",
+          "documentation":"<p>The name of the metric being retrieved in type String.</p>"
+        }
+      },
+      "documentation":"<p>The object that contains information about metric being requested.</p>"
+    },
+    "ContactMetricName":{
+      "type":"string",
+      "enum":["POSITION_IN_QUEUE"]
+    },
+    "ContactMetricResult":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Value"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ContactMetricName",
+          "documentation":"<p>The name of the metric being retrieved in type String.</p>"
+        },
+        "Value":{
+          "shape":"ContactMetricValue",
+          "documentation":"<p>Object result associated with the metric received.</p>"
+        }
+      },
+      "documentation":"<p>Object containing information about metric requested for the contact.</p>"
+    },
+    "ContactMetricResults":{
+      "type":"list",
+      "member":{"shape":"ContactMetricResult"}
+    },
+    "ContactMetricValue":{
+      "type":"structure",
+      "members":{
+        "Number":{
+          "shape":"Double",
+          "documentation":"<p>The number of type Double. This number is the contact's position in queue.</p>"
+        }
+      },
+      "documentation":"<p>Object which contains the number.</p>",
+      "union":true
+    },
+    "ContactMetrics":{
+      "type":"list",
+      "member":{"shape":"ContactMetricInfo"},
+      "min":1
+    },
     "ContactNotFoundException":{
       "type":"structure",
       "members":{
@@ -7460,7 +8135,7 @@
           "documentation":"<p>The message.</p>"
         }
       },
-      "documentation":"<p>The contact with the specified ID is not active or does not exist. Applies to Voice calls only, not to Chat or Task contacts.</p>",
+      "documentation":"<p>The contact with the specified ID does not exist.</p>",
       "error":{"httpStatusCode":410},
       "exception":true
     },
@@ -7527,7 +8202,12 @@
         "SegmentAttributes":{
           "shape":"ContactSearchSummarySegmentAttributes",
           "documentation":"<p>Set of segment attributes for a contact.</p>"
-        }
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>Indicates name of the contact.</p>"
+        },
+        "RoutingCriteria":{"shape":"RoutingCriteria"}
       },
       "documentation":"<p>Information of returned contact.</p>"
     },
@@ -7565,6 +8245,10 @@
         "ValueString":{
           "shape":"SegmentAttributeValueString",
           "documentation":"<p>The value of a segment attribute represented as a string.</p>"
+        },
+        "ValueMap":{
+          "shape":"SegmentAttributeValueMap",
+          "documentation":"<p>The key and value of a segment attribute.</p>"
         }
       },
       "documentation":"<p>The value of a segment attribute. This is structured as a map with a single key-value pair. The key 'valueString' indicates that the attribute type is a string, and its corresponding value is the actual string value of the segment attribute.</p>"
@@ -7572,7 +8256,8 @@
     "ContactSearchSummarySegmentAttributes":{
       "type":"map",
       "key":{"shape":"SegmentAttributeName"},
-      "value":{"shape":"ContactSearchSummarySegmentAttributeValue"}
+      "value":{"shape":"ContactSearchSummarySegmentAttributeValue"},
+      "sensitive":true
     },
     "ContactState":{
       "type":"string",
@@ -7679,6 +8364,7 @@
       },
       "documentation":"<p>An object that can be used to specify Tag conditions or Hierarchy Group conditions inside the <code>SearchFilter</code>.</p> <p>This accepts an <code>OR</code> of <code>AND</code> (List of List) input where:</p> <ul> <li> <p>The top level list specifies conditions that need to be applied with <code>OR</code> operator</p> </li> <li> <p>The inner list specifies conditions that need to be applied with <code>AND</code> operator.</p> </li> </ul> <note> <p>Only one field can be populated. Maximum number of allowed Tag conditions is 25. Maximum number of allowed Hierarchy Group conditions is 20. </p> </note>"
     },
+    "Count":{"type":"integer"},
     "CreateAgentStatusRequest":{
       "type":"structure",
       "required":[
@@ -7936,15 +8622,15 @@
         },
         "References":{
           "shape":"ContactReferences",
-          "documentation":"<p>A formatted URL that is shown to an agent in the Contact Control Panel (CCP). Tasks can have the following reference types at the time of creation: URL | NUMBER | STRING | DATE | EMAIL | ATTACHMENT.</p>"
+          "documentation":"<p>A formatted URL that is shown to an agent in the Contact Control Panel (CCP). Tasks can have the following reference types at the time of creation: <code>URL</code> | <code>NUMBER</code> | <code>STRING</code> | <code>DATE</code> | <code>EMAIL</code> | <code>ATTACHMENT</code>.</p>"
         },
         "Channel":{
           "shape":"Channel",
-          "documentation":"<p>The channel for the contact</p>"
+          "documentation":"<p>The channel for the contact.</p> <important> <p>The CHAT channel is not supported. The following information is incorrect. We're working to correct it.</p> </important>"
         },
         "InitiationMethod":{
           "shape":"ContactInitiationMethod",
-          "documentation":"<p>Indicates how the contact was initiated.</p>"
+          "documentation":"<p>Indicates how the contact was initiated. </p> <important> <p>CreateContact only supports the following initiation methods. Valid values by channel are: </p> <ul> <li> <p>For VOICE: <code>TRANSFER</code> and the subtype <code>connect:ExternalAudio</code> </p> </li> <li> <p>For EMAIL: <code>OUTBOUND</code> | <code>AGENT_REPLY</code> | <code>FLOW</code> </p> </li> <li> <p>For TASK: <code>API</code> </p> </li> </ul> <p>The other channels listed below are incorrect. We're working to correct this information.</p> </important>"
         },
         "ExpiryDurationInMinutes":{
           "shape":"ExpiryDurationInMinutes",
@@ -7952,11 +8638,11 @@
         },
         "UserInfo":{
           "shape":"UserInfo",
-          "documentation":"<p>User details for the contact</p>"
+          "documentation":"<p>User details for the contact</p> <important> <p>UserInfo is required when creating an EMAIL contact with <code>OUTBOUND</code> and <code>AGENT_REPLY</code> contact initiation methods.</p> </important>"
         },
         "InitiateAs":{
           "shape":"InitiateAs",
-          "documentation":"<p>Initial state of the contact when it's created</p>"
+          "documentation":"<p>Initial state of the contact when it's created. Only TASK channel contacts can be initiated with <code>COMPLETED</code> state.</p>"
         },
         "Name":{
           "shape":"Name",
@@ -7969,6 +8655,10 @@
         "SegmentAttributes":{
           "shape":"SegmentAttributes",
           "documentation":"<p>A set of system defined key-value pairs stored on individual contact segments (unique contact ID) using an attribute map. The attributes are standard Amazon Connect attributes. They can be accessed in flows.</p> <p>Attribute keys can include only alphanumeric, -, and _.</p> <p>This field can be used to set Segment Contact Expiry as a duration in minutes.</p> <note> <p>To set contact expiry, a ValueMap must be specified containing the integer number of minutes the contact will be active for before expiring, with <code>SegmentAttributes</code> like { <code> \"connect:ContactExpiry\": {\"ValueMap\" : { \"ExpiryDuration\": { \"ValueInteger\": 135}}}}</code>. </p> </note>"
+        },
+        "PreviousContactId":{
+          "shape":"ContactId",
+          "documentation":"<p>The ID of the previous contact when creating a transfer contact. This value can be provided only for external audio contacts. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/contact-lens-integration.html\">Integrate Amazon Connect Contact Lens with external voice systems</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
         }
       }
     },
@@ -8004,7 +8694,7 @@
         },
         "EmailAddress":{
           "shape":"EmailAddress",
-          "documentation":"<p>The email address with the instance, in [^\\s@]+@[^\\s@]+\\.[^\\s@]+ format.</p>"
+          "documentation":"<p>The email address, including the domain.</p>"
         },
         "DisplayName":{
           "shape":"EmailAddressDisplayName",
@@ -8063,10 +8753,18 @@
           "shape":"EvaluationFormScoringStrategy",
           "documentation":"<p>A scoring strategy of the evaluation form.</p>"
         },
+        "AutoEvaluationConfiguration":{
+          "shape":"EvaluationFormAutoEvaluationConfiguration",
+          "documentation":"<p>Configuration information about automated evaluations.</p>"
+        },
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
           "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
         }
       }
     },
@@ -8124,11 +8822,11 @@
         },
         "EffectiveFrom":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The date from when the hours of operation override would be effective.</p>"
+          "documentation":"<p>The date from when the hours of operation override is effective.</p>"
         },
         "EffectiveTill":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The date until when the hours of operation override would be effective.</p>"
+          "documentation":"<p>The date until when the hours of operation override is effective.</p>"
         }
       }
     },
@@ -8201,7 +8899,8 @@
       "members":{
         "ClientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>The idempotency token.</p>"
+          "documentation":"<p>The idempotency token.</p>",
+          "idempotencyToken":true
         },
         "IdentityManagementType":{
           "shape":"DirectoryType",
@@ -8309,7 +9008,7 @@
         },
         "ContactId":{
           "shape":"ContactId",
-          "documentation":"<p>The identifier of the contact in this instance of Amazon Connect. Only contacts in the CHAT channel are supported.</p>"
+          "documentation":"<p>The identifier of the contact in this instance of Amazon Connect. Supports contacts in the CHAT channel and VOICE (WebRTC) channels. For WebRTC calls, this should be the initial contact ID that was generated when the contact was first created (from the StartWebRTCContact API) in the VOICE channel</p>"
         },
         "ClientToken":{
           "shape":"ClientToken",
@@ -8318,7 +9017,7 @@
         },
         "ParticipantDetails":{
           "shape":"ParticipantDetailsToAdd",
-          "documentation":"<p>Information identifying the participant.</p> <important> <p>The only Valid value for <code>ParticipantRole</code> is <code>CUSTOM_BOT</code>. </p> <p> <code>DisplayName</code> is <b>Required</b>.</p> </important>"
+          "documentation":"<p>Information identifying the participant.</p> <important> <p>The only valid value for <code>ParticipantRole</code> is <code>CUSTOM_BOT</code> for chat contact and <code>CUSTOMER</code> for voice contact.</p> </important>"
         }
       }
     },
@@ -8383,8 +9082,7 @@
       "type":"structure",
       "required":[
         "InstanceId",
-        "Name",
-        "Values"
+        "Name"
       ],
       "members":{
         "InstanceId":{
@@ -8400,6 +9098,14 @@
         "Values":{
           "shape":"PredefinedAttributeValues",
           "documentation":"<p> The values of the predefined attribute. </p>"
+        },
+        "Purposes":{
+          "shape":"PredefinedAttributePurposeNameList",
+          "documentation":"<p>Values that enable you to categorize your predefined attributes. You can use them in custom UI elements across the Amazon Connect admin website.</p>"
+        },
+        "AttributeConfiguration":{
+          "shape":"InputPredefinedAttributeConfiguration",
+          "documentation":"<p>Custom metadata that is associated to predefined attributes to control behavior in upstream services, such as controlling how a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
         }
       }
     },
@@ -8636,6 +9342,10 @@
           "shape":"RoutingProfileQueueConfigList",
           "documentation":"<p>The inbound queues associated with the routing profile. If no queue is added, the agent can make only outbound calls.</p> <p>The limit of 10 array members applies to the maximum number of <code>RoutingProfileQueueConfig</code> objects that can be passed during a CreateRoutingProfile API request. It is different from the quota of 50 queues per routing profile per instance that is listed in <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html\">Amazon Connect service quotas</a>. </p>"
         },
+        "ManualAssignmentQueueConfigs":{
+          "shape":"RoutingProfileManualAssignmentQueueConfigList",
+          "documentation":"<p>The manual assignment queues associated with the routing profile. If no queue is added, agents and supervisors can't pick or assign any contacts from this routing profile. The limit of 10 array members applies to the maximum number of RoutingProfileManualAssignmentQueueConfig objects that can be passed during a CreateRoutingProfile API request. It is different from the quota of 50 queues per routing profile per instance that is listed in Amazon Connect service quotas.</p>"
+        },
         "MediaConcurrencies":{
           "shape":"MediaConcurrencies",
           "documentation":"<p>The channels that agents can handle in the Contact Control Panel (CCP) for this routing profile.</p>"
@@ -8765,7 +9475,7 @@
         },
         "TagRestrictedResources":{
           "shape":"TagRestrictedResourceList",
-          "documentation":"<p>The list of resources that a security profile applies tag restrictions to in Amazon Connect. Following are acceptable ResourceNames: <code>User</code> | <code>SecurityProfile</code> | <code>Queue</code> | <code>RoutingProfile</code> </p>"
+          "documentation":"<p>The list of resources that a security profile applies tag restrictions to in Amazon Connect. For a list of Amazon Connect resources that you can tag, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/tagging.html\">Add tags to resources in Amazon Connect</a> in the <i>Amazon Connect Administrator Guide</i>. </p>"
         },
         "Applications":{
           "shape":"Applications",
@@ -9266,7 +9976,7 @@
           "documentation":"<p>The unit for the metric.</p>"
         }
       },
-      "documentation":"<p>Contains information about a real-time metric. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html\">Real-time Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+      "documentation":"<p>Contains information about a real-time metric. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
     },
     "CurrentMetricData":{
       "type":"structure",
@@ -9443,6 +10153,43 @@
       },
       "documentation":"<p>Information about a reference when the <code>referenceType</code> is <code>DATE</code>. Otherwise, null.</p>"
     },
+    "DateTimeComparisonType":{
+      "type":"string",
+      "enum":[
+        "GREATER_THAN",
+        "LESS_THAN",
+        "GREATER_THAN_OR_EQUAL_TO",
+        "LESS_THAN_OR_EQUAL_TO",
+        "EQUAL_TO",
+        "RANGE"
+      ]
+    },
+    "DateTimeCondition":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"String",
+          "documentation":"<p>A name of the datetime property to be searched</p>"
+        },
+        "MinValue":{
+          "shape":"DateTimeFormat",
+          "documentation":"<p>A minimum value of the property. </p>"
+        },
+        "MaxValue":{
+          "shape":"DateTimeFormat",
+          "documentation":"<p>A maximum value of the property. </p>"
+        },
+        "ComparisonType":{
+          "shape":"DateTimeComparisonType",
+          "documentation":"<p>Datetime property comparison type. </p>"
+        }
+      },
+      "documentation":"<p>A datetime search condition for Search APIs.</p>"
+    },
+    "DateTimeFormat":{
+      "type":"string",
+      "pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$"
+    },
     "DateYearMonthDayFormat":{
       "type":"string",
       "pattern":"^\\d{4}-\\d{2}-\\d{2}$"
@@ -9495,6 +10242,40 @@
         }
       }
     },
+    "DecimalComparisonType":{
+      "type":"string",
+      "enum":[
+        "GREATER_OR_EQUAL",
+        "GREATER",
+        "LESSER_OR_EQUAL",
+        "LESSER",
+        "EQUAL",
+        "NOT_EQUAL",
+        "RANGE"
+      ]
+    },
+    "DecimalCondition":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"String",
+          "documentation":"<p>A name of the decimal property to be searched.</p>"
+        },
+        "MinValue":{
+          "shape":"NullableDouble",
+          "documentation":"<p>A minimum value of the decimal property.</p>"
+        },
+        "MaxValue":{
+          "shape":"NullableDouble",
+          "documentation":"<p>A maximum value of the decimal property.</p>"
+        },
+        "ComparisonType":{
+          "shape":"DecimalComparisonType",
+          "documentation":"<p>The type of comparison to be made when evaluating the decimal condition. </p>"
+        }
+      },
+      "documentation":"<p>A decimal search condition for Search APIs.</p>"
+    },
     "DefaultVocabulary":{
       "type":"structure",
       "required":[
@@ -9563,8 +10344,7 @@
     },
     "DeleteAttachedFileResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"Response from DeleteAttachedFile API"
     },
     "DeleteContactEvaluationRequest":{
@@ -9611,8 +10391,7 @@
     },
     "DeleteContactFlowModuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContactFlowRequest":{
       "type":"structure",
@@ -9637,8 +10416,7 @@
     },
     "DeleteContactFlowResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContactFlowVersionRequest":{
       "type":"structure",
@@ -9670,8 +10448,7 @@
     },
     "DeleteContactFlowVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEmailAddressRequest":{
       "type":"structure",
@@ -9696,8 +10473,7 @@
     },
     "DeleteEmailAddressResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEvaluationFormRequest":{
       "type":"structure",
@@ -9785,6 +10561,13 @@
           "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
           "location":"uri",
           "locationName":"InstanceId"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -9881,8 +10664,7 @@
     },
     "DeletePushNotificationRegistrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteQueueRequest":{
       "type":"structure",
@@ -10012,8 +10794,7 @@
     },
     "DeleteTaskTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrafficDistributionGroupRequest":{
       "type":"structure",
@@ -10029,8 +10810,7 @@
     },
     "DeleteTrafficDistributionGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUseCaseRequest":{
       "type":"structure",
@@ -10125,8 +10905,7 @@
     },
     "DeleteViewResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteViewVersionRequest":{
       "type":"structure",
@@ -10158,8 +10937,7 @@
     },
     "DeleteViewVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVocabularyRequest":{
       "type":"structure",
@@ -10426,7 +11204,7 @@
         },
         "EmailAddress":{
           "shape":"EmailAddress",
-          "documentation":"<p>The email address with the instance, in [^\\s@]+@[^\\s@]+\\.[^\\s@]+ format.</p>"
+          "documentation":"<p>The email address, including the domain.</p>"
         },
         "DisplayName":{
           "shape":"EmailAddressDisplayName",
@@ -10444,6 +11222,10 @@
           "shape":"ISO8601Datetime",
           "documentation":"<p>The email address last modification timestamp in ISO 8601 Datetime.</p>"
         },
+        "AliasConfigurations":{
+          "shape":"AliasConfigurationList",
+          "documentation":"<p>A list of alias configurations associated with this email address. Contains details about email addresses that forward to this primary email address. The list can contain at most one alias configuration per email address.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -11117,6 +11899,10 @@
         "RoutingStepExpression":{
           "shape":"RoutingExpression",
           "documentation":"<p>The expression of a step in a routing criteria.</p>"
+        },
+        "AgentStatus":{
+          "shape":"AgentStatusIdentifier",
+          "documentation":"<p>Information about the agent status assigned to the user.</p>"
         }
       },
       "documentation":"<p>Contains information about the dimensions for a set of metrics.</p>"
@@ -11191,6 +11977,13 @@
           "documentation":"<p>The domain URL of the integrated application.</p>",
           "location":"querystring",
           "locationName":"origin"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -11208,9 +12001,49 @@
         "LexV2Bot":{
           "shape":"LexV2Bot",
           "documentation":"<p>The Amazon Lex V2 bot to disassociate from the instance.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
+    "DisassociateEmailAddressAliasRequest":{
+      "type":"structure",
+      "required":[
+        "EmailAddressId",
+        "InstanceId",
+        "AliasConfiguration"
+      ],
+      "members":{
+        "EmailAddressId":{
+          "shape":"EmailAddressId",
+          "documentation":"<p>The identifier of the email address.</p>",
+          "location":"uri",
+          "locationName":"EmailAddressId"
+        },
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "location":"uri",
+          "locationName":"InstanceId"
+        },
+        "AliasConfiguration":{
+          "shape":"AliasConfiguration",
+          "documentation":"<p>Configuration object that specifies which alias relationship to remove. The alias association must currently exist between the primary email address and the specified alias email address.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "DisassociateEmailAddressAliasResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DisassociateFlowRequest":{
       "type":"structure",
       "required":[
@@ -11241,8 +12074,7 @@
     },
     "DisassociateFlowResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateInstanceStorageConfigRequest":{
       "type":"structure",
@@ -11269,6 +12101,13 @@
           "documentation":"<p>A valid resource type.</p>",
           "location":"querystring",
           "locationName":"resourceType"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -11290,6 +12129,13 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function being disassociated.</p>",
           "location":"querystring",
           "locationName":"functionArn"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -11318,6 +12164,13 @@
           "documentation":"<p>The Amazon Web Services Region in which the Amazon Lex bot has been created.</p>",
           "location":"querystring",
           "locationName":"lexRegion"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -11372,8 +12225,7 @@
       "type":"structure",
       "required":[
         "InstanceId",
-        "RoutingProfileId",
-        "QueueReferences"
+        "RoutingProfileId"
       ],
       "members":{
         "InstanceId":{
@@ -11391,6 +12243,10 @@
         "QueueReferences":{
           "shape":"RoutingProfileQueueReferenceList",
           "documentation":"<p>The queues to disassociate from this routing profile.</p>"
+        },
+        "ManualAssignmentQueueReferences":{
+          "shape":"RoutingProfileQueueReferenceList",
+          "documentation":"<p>The manual assignment queues to disassociate with this routing profile.</p>"
         }
       }
     },
@@ -11412,6 +12268,13 @@
           "documentation":"<p>The existing association identifier that uniquely identifies the resource type and storage config for the given instance ID.</p>",
           "location":"uri",
           "locationName":"AssociationId"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
         }
       }
     },
@@ -11445,8 +12308,7 @@
     },
     "DisassociateTrafficDistributionGroupUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateUserProficienciesRequest":{
       "type":"structure",
@@ -11523,8 +12385,7 @@
     },
     "DismissUserContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisplayName":{
       "type":"string",
@@ -11577,7 +12438,15 @@
       "error":{"httpStatusCode":409},
       "exception":true
     },
+    "Duration":{
+      "type":"integer",
+      "min":0
+    },
     "DurationInSeconds":{"type":"integer"},
+    "DurationMillis":{
+      "type":"long",
+      "min":0
+    },
     "EffectiveHoursOfOperationList":{
       "type":"list",
       "member":{"shape":"EffectiveHoursOfOperations"}
@@ -11629,14 +12498,14 @@
       "members":{
         "EmailAddress":{
           "shape":"EmailAddress",
-          "documentation":"<p>The email address with the instance, in [^\\s@]+@[^\\s@]+\\.[^\\s@]+ format.</p>"
+          "documentation":"<p>The email address, including the domain.</p>"
         },
         "DisplayName":{
           "shape":"EmailAddressDisplayName",
           "documentation":"<p>The display name of email address.</p>"
         }
       },
-      "documentation":"<p>Contains information about a source or destination email address</p>"
+      "documentation":"<p>Contains information about a source or destination email address.</p>"
     },
     "EmailAddressList":{
       "type":"list",
@@ -11655,7 +12524,7 @@
         },
         "EmailAddress":{
           "shape":"EmailAddress",
-          "documentation":"<p>The email address with the instance, in [^\\s@]+@[^\\s@]+\\.[^\\s@]+ format.</p>"
+          "documentation":"<p>The email address, including the domain.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -11664,6 +12533,10 @@
         "DisplayName":{
           "shape":"EmailAddressDisplayName",
           "documentation":"<p>The display name of email address.</p>"
+        },
+        "AliasConfigurations":{
+          "shape":"AliasConfigurationList",
+          "documentation":"<p>A list of alias configurations for this email address, showing which email addresses forward to this primary address. Each configuration contains the email address ID of an alias that forwards emails to this address.</p>"
         }
       },
       "documentation":"<p>Contains information about an email address for a contact center.</p>"
@@ -11671,7 +12544,7 @@
     "EmailAddressRecipientList":{
       "type":"list",
       "member":{"shape":"EmailAddressInfo"},
-      "max":10,
+      "max":50,
       "min":1
     },
     "EmailAddressSearchConditionList":{
@@ -11769,11 +12642,11 @@
       "members":{
         "Address":{
           "shape":"EndpointAddress",
-          "documentation":"<p>Address of the email recipient.</p> <p>Type: String</p> <p>Length Constraints: Minimum length of 1. Maximum length of 256.</p>"
+          "documentation":"<p>Address of the email recipient.</p>"
         },
         "DisplayName":{
           "shape":"EndpointDisplayName",
-          "documentation":"<p>Display name of the email recipient.</p> <p>Type: String</p> <p>Length Constraints: Minimum length of 1. Maximum length of 256.</p>"
+          "documentation":"<p>Display name of the email recipient.</p>"
         }
       },
       "documentation":"<p>Information about the email recipient</p>"
@@ -11798,10 +12671,10 @@
     },
     "EmptyFieldValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty value.</p>"
     },
+    "EnableValueValidationOnAssociation":{"type":"boolean"},
     "EncryptionConfig":{
       "type":"structure",
       "required":[
@@ -11826,8 +12699,7 @@
     },
     "EndAssociatedTasksActionDefinition":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>End associated tasks related to a case.</p>"
     },
     "Endpoint":{
@@ -11951,6 +12823,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The timestamp for when the evaluation was last updated.</p>"
         },
+        "EvaluationType":{
+          "shape":"EvaluationType",
+          "documentation":"<p>Type of the evaluation. </p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -11958,6 +12834,51 @@
       },
       "documentation":"<p>Information about a contact evaluation.</p>"
     },
+    "EvaluationAcknowledgement":{
+      "type":"structure",
+      "required":[
+        "AcknowledgedTime",
+        "AcknowledgedBy"
+      ],
+      "members":{
+        "AcknowledgedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the agent acknowledged the evaluation.</p>"
+        },
+        "AcknowledgedBy":{
+          "shape":"ARN",
+          "documentation":"<p>The agent who acknowledged the evaluation.</p>"
+        },
+        "AcknowledgerComment":{
+          "shape":"EvaluationAcknowledgerCommentString",
+          "documentation":"<p>A comment from the agent when they confirmed they acknowledged the evaluation.</p>"
+        }
+      },
+      "documentation":"<p>Information about the evaluation acknowledgement.</p>"
+    },
+    "EvaluationAcknowledgementSummary":{
+      "type":"structure",
+      "members":{
+        "AcknowledgedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when an agent acknowledged the evaluation.</p>"
+        },
+        "AcknowledgedBy":{
+          "shape":"ARN",
+          "documentation":"<p>The agent who acknowledged the evaluation.</p>"
+        },
+        "AcknowledgerComment":{
+          "shape":"EvaluationAcknowledgerCommentString",
+          "documentation":"<p>A comment from the agent when they confirmed they acknowledged the evaluation.</p>"
+        }
+      },
+      "documentation":"<p>Summary information about an evaluation acknowledgement.</p>"
+    },
+    "EvaluationAcknowledgerCommentString":{
+      "type":"string",
+      "max":3072,
+      "min":0
+    },
     "EvaluationAnswerData":{
       "type":"structure",
       "members":{
@@ -11980,7 +12901,7 @@
     "EvaluationAnswerDataNumericValue":{"type":"double"},
     "EvaluationAnswerDataStringValue":{
       "type":"string",
-      "max":128,
+      "max":300,
       "min":0
     },
     "EvaluationAnswerInput":{
@@ -12003,6 +12924,10 @@
         "SystemSuggestedValue":{
           "shape":"EvaluationAnswerData",
           "documentation":"<p>The system suggested value for an answer in a contact evaluation.</p>"
+        },
+        "SuggestedAnswers":{
+          "shape":"EvaluationSuggestedAnswersList",
+          "documentation":"<p>Automation suggested answers for the questions.</p>"
         }
       },
       "documentation":"<p>Information about output answers for a contact evaluation.</p>"
@@ -12019,6 +12944,43 @@
       "value":{"shape":"EvaluationAnswerOutput"},
       "max":100
     },
+    "EvaluationArn":{"type":"string"},
+    "EvaluationAutomationRuleCategory":{
+      "type":"structure",
+      "required":[
+        "Category",
+        "Condition"
+      ],
+      "members":{
+        "Category":{
+          "shape":"QuestionRuleCategoryAutomationLabel",
+          "documentation":"<p>A category label.</p>"
+        },
+        "Condition":{
+          "shape":"QuestionRuleCategoryAutomationCondition",
+          "documentation":"<p>An automation condition for a Contact Lens category.</p>"
+        },
+        "PointsOfInterest":{
+          "shape":"EvaluationTranscriptPointsOfInterest",
+          "documentation":"<p>A point of interest in a contact transcript that indicates match of condition.</p>"
+        }
+      },
+      "documentation":"<p>The Contact Lens category used by evaluation automation.</p>"
+    },
+    "EvaluationAutomationRuleCategoryList":{
+      "type":"list",
+      "member":{"shape":"EvaluationAutomationRuleCategory"}
+    },
+    "EvaluationContactLensAnswerAnalysisDetails":{
+      "type":"structure",
+      "members":{
+        "MatchedRuleCategories":{
+          "shape":"EvaluationAutomationRuleCategoryList",
+          "documentation":"<p>A list of match rule categories.</p>"
+        }
+      },
+      "documentation":"<p>Analysis details providing explanation for Contact Lens automation decision.</p>"
+    },
     "EvaluationForm":{
       "type":"structure",
       "required":[
@@ -12087,6 +13049,10 @@
           "shape":"ARN",
           "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the evaluation form.</p>"
         },
+        "AutoEvaluationConfiguration":{
+          "shape":"EvaluationFormAutoEvaluationConfiguration",
+          "documentation":"<p>The automatic evaluation configuration of an evaluation form.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -12094,6 +13060,17 @@
       },
       "documentation":"<p>Information about the evaluation form.</p>"
     },
+    "EvaluationFormAutoEvaluationConfiguration":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>When automated evaluation is enabled.</p>"
+        }
+      },
+      "documentation":"<p>The automatic evaluation configuration of an evaluation form.</p>"
+    },
     "EvaluationFormContent":{
       "type":"structure",
       "required":[
@@ -12131,6 +13108,10 @@
         "ScoringStrategy":{
           "shape":"EvaluationFormScoringStrategy",
           "documentation":"<p>A scoring strategy of the evaluation form.</p>"
+        },
+        "AutoEvaluationConfiguration":{
+          "shape":"EvaluationFormAutoEvaluationConfiguration",
+          "documentation":"<p>The configuration of the automated evaluation.</p>"
         }
       },
       "documentation":"<p>Information about an evaluation form used in a contact evaluation.</p>"
@@ -12160,6 +13141,150 @@
       "documentation":"<p>Information about an item from an evaluation form. The item must be either a section or a question.</p>",
       "union":true
     },
+    "EvaluationFormItemEnablementAction":{
+      "type":"string",
+      "enum":[
+        "DISABLE",
+        "ENABLE"
+      ]
+    },
+    "EvaluationFormItemEnablementCondition":{
+      "type":"structure",
+      "required":["Operands"],
+      "members":{
+        "Operands":{
+          "shape":"EvaluationFormItemEnablementConditionOperandList",
+          "documentation":"<p>Operands of the enablement condition.</p>"
+        },
+        "Operator":{
+          "shape":"EvaluationFormItemEnablementOperator",
+          "documentation":"<p>The operator to be used to be applied to operands if more than one provided. </p>"
+        }
+      },
+      "documentation":"<p>A condition for item enablement.</p>"
+    },
+    "EvaluationFormItemEnablementConditionOperand":{
+      "type":"structure",
+      "members":{
+        "Expression":{
+          "shape":"EvaluationFormItemEnablementExpression",
+          "documentation":"<p>An expression of the enablement condition.</p>"
+        },
+        "Condition":{
+          "shape":"EvaluationFormItemEnablementCondition",
+          "documentation":"<p>A condition for item enablement.</p>"
+        }
+      },
+      "documentation":"<p>An operand of the enablement condition.</p>",
+      "union":true
+    },
+    "EvaluationFormItemEnablementConditionOperandList":{
+      "type":"list",
+      "member":{"shape":"EvaluationFormItemEnablementConditionOperand"},
+      "min":1
+    },
+    "EvaluationFormItemEnablementConfiguration":{
+      "type":"structure",
+      "required":[
+        "Condition",
+        "Action"
+      ],
+      "members":{
+        "Condition":{
+          "shape":"EvaluationFormItemEnablementCondition",
+          "documentation":"<p>A condition for item enablement configuration.</p>"
+        },
+        "Action":{
+          "shape":"EvaluationFormItemEnablementAction",
+          "documentation":"<p>An enablement action that if condition is satisfied. </p>"
+        },
+        "DefaultAction":{
+          "shape":"EvaluationFormItemEnablementAction",
+          "documentation":"<p>An enablement action that if condition is not satisfied. </p>"
+        }
+      },
+      "documentation":"<p>An item enablement configuration.</p>"
+    },
+    "EvaluationFormItemEnablementExpression":{
+      "type":"structure",
+      "required":[
+        "Source",
+        "Values",
+        "Comparator"
+      ],
+      "members":{
+        "Source":{
+          "shape":"EvaluationFormItemEnablementSource",
+          "documentation":"<p>A source item of enablement expression.</p>"
+        },
+        "Values":{
+          "shape":"EvaluationFormItemEnablementSourceValueList",
+          "documentation":"<p>A list of values from source item.</p>"
+        },
+        "Comparator":{
+          "shape":"EvaluationFormItemSourceValuesComparator",
+          "documentation":"<p>A comparator to be used against list of values. </p>"
+        }
+      },
+      "documentation":"<p>An expression that defines a basic building block of conditional enablement.</p>"
+    },
+    "EvaluationFormItemEnablementOperator":{
+      "type":"string",
+      "enum":[
+        "OR",
+        "AND"
+      ]
+    },
+    "EvaluationFormItemEnablementSource":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"EvaluationFormItemEnablementSourceType",
+          "documentation":"<p>A type of source item. </p>"
+        },
+        "RefId":{
+          "shape":"ReferenceId",
+          "documentation":"<p>A referenceId of the source item.</p>"
+        }
+      },
+      "documentation":"<p>An enablement expression source item.</p>"
+    },
+    "EvaluationFormItemEnablementSourceType":{
+      "type":"string",
+      "enum":["QUESTION_REF_ID"]
+    },
+    "EvaluationFormItemEnablementSourceValue":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"EvaluationFormItemEnablementSourceValueType",
+          "documentation":"<p>A type of source item value. </p>"
+        },
+        "RefId":{
+          "shape":"ReferenceId",
+          "documentation":"<p>A referenceId of the source value.</p>"
+        }
+      },
+      "documentation":"<p>An enablement expression source value.</p>"
+    },
+    "EvaluationFormItemEnablementSourceValueList":{
+      "type":"list",
+      "member":{"shape":"EvaluationFormItemEnablementSourceValue"},
+      "min":1
+    },
+    "EvaluationFormItemEnablementSourceValueType":{
+      "type":"string",
+      "enum":["OPTION_REF_ID"]
+    },
+    "EvaluationFormItemSourceValuesComparator":{
+      "type":"string",
+      "enum":[
+        "IN",
+        "NOT_IN"
+      ]
+    },
     "EvaluationFormItemWeight":{
       "type":"double",
       "max":100,
@@ -12177,6 +13302,10 @@
         "PropertyValue":{
           "shape":"NumericQuestionPropertyValueAutomation",
           "documentation":"<p>The property value of the automation.</p>"
+        },
+        "AnswerSource":{
+          "shape":"EvaluationFormQuestionAutomationAnswerSource",
+          "documentation":"<p>A source of automation answer for numeric question.</p>"
         }
       },
       "documentation":"<p>Information about the automation configuration in numeric questions.</p>",
@@ -12204,6 +13333,10 @@
         "AutomaticFail":{
           "shape":"Boolean",
           "documentation":"<p>The flag to mark the option as automatic fail. If an automatic fail answer is provided, the overall evaluation gets a score of 0.</p>"
+        },
+        "AutomaticFailConfiguration":{
+          "shape":"AutomaticFailConfiguration",
+          "documentation":"<p>A configuration for automatic fail.</p>"
         }
       },
       "documentation":"<p>Information about the option range used for scoring in numeric questions.</p>"
@@ -12272,6 +13405,10 @@
           "shape":"EvaluationFormQuestionTypeProperties",
           "documentation":"<p>The properties of the type of question. Text questions do not have to define question type properties.</p>"
         },
+        "Enablement":{
+          "shape":"EvaluationFormItemEnablementConfiguration",
+          "documentation":"<p>A question conditional enablement.</p>"
+        },
         "Weight":{
           "shape":"EvaluationFormItemWeight",
           "documentation":"<p>The scoring weight of the section.</p>"
@@ -12284,6 +13421,24 @@
       "max":10,
       "min":0
     },
+    "EvaluationFormQuestionAutomationAnswerSource":{
+      "type":"structure",
+      "required":["SourceType"],
+      "members":{
+        "SourceType":{
+          "shape":"EvaluationFormQuestionAutomationAnswerSourceType",
+          "documentation":"<p>The automation answer source type.</p>"
+        }
+      },
+      "documentation":"<p>A question automation answer.</p>"
+    },
+    "EvaluationFormQuestionAutomationAnswerSourceType":{
+      "type":"string",
+      "enum":[
+        "CONTACT_LENS_DATA",
+        "GEN_AI"
+      ]
+    },
     "EvaluationFormQuestionInstructions":{
       "type":"string",
       "max":1024,
@@ -12312,6 +13467,10 @@
         "SingleSelect":{
           "shape":"EvaluationFormSingleSelectQuestionProperties",
           "documentation":"<p>The properties of the numeric question.</p>"
+        },
+        "Text":{
+          "shape":"EvaluationFormTextQuestionProperties",
+          "documentation":"<p>The properties of the text question.</p>"
         }
       },
       "documentation":"<p>Information about properties for a question in an evaluation form. The question type properties must be either for a numeric question or a single select question.</p>",
@@ -12349,6 +13508,124 @@
       },
       "documentation":"<p>Information about scoring strategy for an evaluation form.</p>"
     },
+    "EvaluationFormSearchConditionList":{
+      "type":"list",
+      "member":{"shape":"EvaluationFormSearchCriteria"}
+    },
+    "EvaluationFormSearchCriteria":{
+      "type":"structure",
+      "members":{
+        "OrConditions":{
+          "shape":"EvaluationFormSearchConditionList",
+          "documentation":"<p>A list of conditions which would be applied together with an OR condition.</p>"
+        },
+        "AndConditions":{
+          "shape":"EvaluationFormSearchConditionList",
+          "documentation":"<p>A list of conditions which would be applied together with an AND condition.</p>"
+        },
+        "StringCondition":{"shape":"StringCondition"},
+        "NumberCondition":{"shape":"NumberCondition"},
+        "BooleanCondition":{
+          "shape":"BooleanCondition",
+          "documentation":"<p>Boolean search condition.</p>"
+        },
+        "DateTimeCondition":{
+          "shape":"DateTimeCondition",
+          "documentation":"<p>Datetime search condition.</p>"
+        }
+      },
+      "documentation":"<p>The search criteria to be used to return evaluation forms.</p>"
+    },
+    "EvaluationFormSearchFilter":{
+      "type":"structure",
+      "members":{
+        "AttributeFilter":{"shape":"ControlPlaneAttributeFilter"}
+      },
+      "documentation":"<p>Filters to be applied to search results.</p>"
+    },
+    "EvaluationFormSearchSummary":{
+      "type":"structure",
+      "required":[
+        "EvaluationFormId",
+        "EvaluationFormArn",
+        "Title",
+        "Status",
+        "CreatedTime",
+        "CreatedBy",
+        "LastModifiedTime",
+        "LastModifiedBy",
+        "LatestVersion"
+      ],
+      "members":{
+        "EvaluationFormId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier for the evaluation form.</p>"
+        },
+        "EvaluationFormArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the evaluation form resource.</p>"
+        },
+        "Title":{
+          "shape":"EvaluationFormTitle",
+          "documentation":"<p>The title of the evaluation form.</p>"
+        },
+        "Status":{
+          "shape":"EvaluationFormVersionStatus",
+          "documentation":"<p>The status of the evaluation form.</p>"
+        },
+        "Description":{
+          "shape":"EvaluationFormDescription",
+          "documentation":"<p>The description of the evaluation form.</p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the evaluation form was created.</p>"
+        },
+        "CreatedBy":{
+          "shape":"ARN",
+          "documentation":"<p>Who created the evaluation form.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the evaluation form was last changed.</p>"
+        },
+        "LastModifiedBy":{
+          "shape":"ARN",
+          "documentation":"<p>Who changed the evaluation form.</p>"
+        },
+        "LastActivatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the evaluation format was last activated.</p>"
+        },
+        "LastActivatedBy":{
+          "shape":"ARN",
+          "documentation":"<p>The ID of user who last activated evaluation form.</p>"
+        },
+        "LatestVersion":{
+          "shape":"VersionNumber",
+          "documentation":"<p>Latest version of the evaluation form.</p>",
+          "box":true
+        },
+        "ActiveVersion":{
+          "shape":"VersionNumber",
+          "documentation":"<p>Active version of the evaluation form.</p>",
+          "box":true
+        },
+        "AutoEvaluationEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether automated evaluation is enabled.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
+        }
+      },
+      "documentation":"<p>Information about the returned evaluation forms.</p>"
+    },
+    "EvaluationFormSearchSummaryList":{
+      "type":"list",
+      "member":{"shape":"EvaluationFormSearchSummary"}
+    },
     "EvaluationFormSection":{
       "type":"structure",
       "required":[
@@ -12387,7 +13664,6 @@
     },
     "EvaluationFormSingleSelectQuestionAutomation":{
       "type":"structure",
-      "required":["Options"],
       "members":{
         "Options":{
           "shape":"EvaluationFormSingleSelectQuestionAutomationOptionList",
@@ -12396,6 +13672,10 @@
         "DefaultOptionRefId":{
           "shape":"ReferenceId",
           "documentation":"<p>The identifier of the default answer option, when none of the automation options match the criteria.</p>"
+        },
+        "AnswerSource":{
+          "shape":"EvaluationFormQuestionAutomationAnswerSource",
+          "documentation":"<p>Automation answer source.</p>"
         }
       },
       "documentation":"<p>Information about the automation configuration in single select questions. Automation options are evaluated in order, and the first matched option is applied. If no automation option matches, and there is a default option, then the default option is applied.</p>"
@@ -12414,8 +13694,7 @@
     "EvaluationFormSingleSelectQuestionAutomationOptionList":{
       "type":"list",
       "member":{"shape":"EvaluationFormSingleSelectQuestionAutomationOption"},
-      "max":20,
-      "min":1
+      "max":20
     },
     "EvaluationFormSingleSelectQuestionDisplayMode":{
       "type":"string",
@@ -12446,6 +13725,10 @@
         "AutomaticFail":{
           "shape":"Boolean",
           "documentation":"<p>The flag to mark the option as automatic fail. If an automatic fail answer is provided, the overall evaluation gets a score of 0.</p>"
+        },
+        "AutomaticFailConfiguration":{
+          "shape":"AutomaticFailConfiguration",
+          "documentation":"<p>Whether automatic fail is configured on a single select question. </p>"
         }
       },
       "documentation":"<p>Information about the automation configuration in single select questions.</p>"
@@ -12545,6 +13828,26 @@
       "type":"list",
       "member":{"shape":"EvaluationFormSummary"}
     },
+    "EvaluationFormTextQuestionAutomation":{
+      "type":"structure",
+      "members":{
+        "AnswerSource":{
+          "shape":"EvaluationFormQuestionAutomationAnswerSource",
+          "documentation":"<p>Automation answer source.</p>"
+        }
+      },
+      "documentation":"<p>Information about the automation configuration in text questions.</p>"
+    },
+    "EvaluationFormTextQuestionProperties":{
+      "type":"structure",
+      "members":{
+        "Automation":{
+          "shape":"EvaluationFormTextQuestionAutomation",
+          "documentation":"<p>The automation properties of the text question.</p>"
+        }
+      },
+      "documentation":"<p>Information about properties for a text question in an evaluation form.</p>"
+    },
     "EvaluationFormTitle":{
       "type":"string",
       "max":128,
@@ -12615,6 +13918,21 @@
       "type":"list",
       "member":{"shape":"EvaluationFormVersionSummary"}
     },
+    "EvaluationGenAIAnswerAnalysisDetails":{
+      "type":"structure",
+      "members":{
+        "Justification":{
+          "shape":"EvaluationSuggestedAnswerJustification",
+          "documentation":"<p>Generative AI automation answer justification.</p>"
+        },
+        "PointsOfInterest":{
+          "shape":"EvaluationTranscriptPointsOfInterest",
+          "documentation":"<p>Generative AI automation answer analysis points of interest.</p>"
+        }
+      },
+      "documentation":"<p>An analysis for a generative AI answer to the question.</p>"
+    },
+    "EvaluationId":{"type":"string"},
     "EvaluationMetadata":{
       "type":"structure",
       "required":[
@@ -12634,9 +13952,21 @@
           "shape":"ResourceId",
           "documentation":"<p>The identifier of the agent who performed the contact.</p>"
         },
+        "CalibrationSessionId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The calibration session ID that this evaluation belongs to.</p>"
+        },
         "Score":{
           "shape":"EvaluationScore",
           "documentation":"<p>The overall score of the contact evaluation.</p>"
+        },
+        "AutoEvaluation":{
+          "shape":"AutoEvaluationDetails",
+          "documentation":"<p>Information related to automated evaluation.</p>"
+        },
+        "Acknowledgement":{
+          "shape":"EvaluationAcknowledgement",
+          "documentation":"<p>Information related to evaluation acknowledgement.</p>"
         }
       },
       "documentation":"<p>Metadata information about a contact evaluation.</p>"
@@ -12662,6 +13992,38 @@
       "value":{"shape":"EvaluationNote"},
       "max":100
     },
+    "EvaluationQuestionAnswerAnalysisDetails":{
+      "type":"structure",
+      "members":{
+        "GenAI":{
+          "shape":"EvaluationGenAIAnswerAnalysisDetails",
+          "documentation":"<p>Analysis results from the generative AI automation for the question.</p>"
+        },
+        "ContactLens":{
+          "shape":"EvaluationContactLensAnswerAnalysisDetails",
+          "documentation":"<p>Analysis results from the Contact Lens automation for the question.</p>"
+        }
+      },
+      "documentation":"<p>Detailed analysis results of the automated answer to the evaluation question.</p>",
+      "union":true
+    },
+    "EvaluationQuestionAnswerAnalysisType":{
+      "type":"string",
+      "enum":[
+        "CONTACT_LENS_DATA",
+        "GEN_AI"
+      ]
+    },
+    "EvaluationQuestionInputDetails":{
+      "type":"structure",
+      "members":{
+        "TranscriptType":{
+          "shape":"EvaluationTranscriptType",
+          "documentation":"<p>Transcript type.</p>"
+        }
+      },
+      "documentation":"<p>Details of the input data used for automated question processing.</p>"
+    },
     "EvaluationScore":{
       "type":"structure",
       "members":{
@@ -12691,6 +14053,163 @@
       "value":{"shape":"EvaluationScore"},
       "max":100
     },
+    "EvaluationSearchConditionList":{
+      "type":"list",
+      "member":{"shape":"EvaluationSearchCriteria"}
+    },
+    "EvaluationSearchCriteria":{
+      "type":"structure",
+      "members":{
+        "OrConditions":{
+          "shape":"EvaluationSearchConditionList",
+          "documentation":"<p>A list of conditions which would be applied together with an OR condition.</p>"
+        },
+        "AndConditions":{
+          "shape":"EvaluationSearchConditionList",
+          "documentation":"<p>A list of conditions which would be applied together with an AND condition.</p>"
+        },
+        "StringCondition":{"shape":"StringCondition"},
+        "NumberCondition":{"shape":"NumberCondition"},
+        "BooleanCondition":{
+          "shape":"BooleanCondition",
+          "documentation":"<p>The boolean condition search criteria for searching evaluations.</p>"
+        },
+        "DateTimeCondition":{
+          "shape":"DateTimeCondition",
+          "documentation":"<p>The datetime condition search criteria for searching evaluations.</p>"
+        },
+        "DecimalCondition":{
+          "shape":"DecimalCondition",
+          "documentation":"<p>The decimal condition search criteria for searching evaluations.</p>"
+        }
+      },
+      "documentation":"<p>The search criteria to be used to return evaluations.</p>"
+    },
+    "EvaluationSearchFilter":{
+      "type":"structure",
+      "members":{
+        "AttributeFilter":{"shape":"ControlPlaneAttributeFilter"}
+      },
+      "documentation":"<p>Filters to be applied to search results.</p>"
+    },
+    "EvaluationSearchMetadata":{
+      "type":"structure",
+      "required":[
+        "ContactId",
+        "EvaluatorArn"
+      ],
+      "members":{
+        "ContactId":{
+          "shape":"ContactId",
+          "documentation":"<p>The identifier of the contact in this instance of Amazon Connect. </p>"
+        },
+        "EvaluatorArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the person who evaluated the contact.</p>"
+        },
+        "ContactAgentId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique ID of the agent who handled the contact.</p>"
+        },
+        "CalibrationSessionId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The calibration session ID that this evaluation belongs to.</p>"
+        },
+        "ScorePercentage":{
+          "shape":"EvaluationScorePercentage",
+          "documentation":"<p>The total evaluation score expressed as a percentage.</p>"
+        },
+        "ScoreAutomaticFail":{
+          "shape":"Boolean",
+          "documentation":"<p>The flag that marks the item as automatic fail. If the item or a child item gets an automatic fail answer, this flag is true.</p>"
+        },
+        "ScoreNotApplicable":{
+          "shape":"Boolean",
+          "documentation":"<p>The flag to mark the item as not applicable for scoring.</p>"
+        },
+        "AutoEvaluationEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether auto-evaluation is enabled.</p>"
+        },
+        "AutoEvaluationStatus":{
+          "shape":"AutoEvaluationStatus",
+          "documentation":"<p>The status of the contact auto evaluation. </p>"
+        },
+        "AcknowledgedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the evaluation was acknowledged by the agent.</p>"
+        },
+        "AcknowledgedBy":{
+          "shape":"ARN",
+          "documentation":"<p>The agent who acknowledged the evaluation.</p>"
+        },
+        "AcknowledgerComment":{
+          "shape":"EvaluationAcknowledgerCommentString",
+          "documentation":"<p>The comment from the agent when they acknowledged the evaluation.</p>"
+        }
+      },
+      "documentation":"<p>Metadata information about an evaluation search.</p>"
+    },
+    "EvaluationSearchSummary":{
+      "type":"structure",
+      "required":[
+        "EvaluationId",
+        "EvaluationArn",
+        "EvaluationFormVersion",
+        "Metadata",
+        "Status",
+        "CreatedTime",
+        "LastModifiedTime"
+      ],
+      "members":{
+        "EvaluationId":{
+          "shape":"ResourceId",
+          "documentation":"<p>A unique identifier for the contact evaluation.</p>"
+        },
+        "EvaluationArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the contact evaluation resource.</p>"
+        },
+        "EvaluationFormId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier for the evaluation form.</p>"
+        },
+        "EvaluationFormVersion":{
+          "shape":"VersionNumber",
+          "documentation":"<p>A version of the evaluation form.</p>",
+          "box":true
+        },
+        "Metadata":{
+          "shape":"EvaluationSearchMetadata",
+          "documentation":"<p>Summary information about the evaluation search.</p>"
+        },
+        "Status":{
+          "shape":"EvaluationStatus",
+          "documentation":"<p>The status of the evaluation. </p>"
+        },
+        "EvaluationType":{
+          "shape":"EvaluationType",
+          "documentation":"<p>Type of the evaluation. </p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the evaluation was created, in UTC time.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the evaluation was modified last time, in UTC time.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
+        }
+      },
+      "documentation":"<p>Summary of evaluation obtained from the search operation.</p>"
+    },
+    "EvaluationSearchSummaryList":{
+      "type":"list",
+      "member":{"shape":"EvaluationSearchSummary"}
+    },
     "EvaluationStatus":{
       "type":"string",
       "enum":[
@@ -12698,6 +14217,65 @@
         "SUBMITTED"
       ]
     },
+    "EvaluationSuggestedAnswer":{
+      "type":"structure",
+      "required":[
+        "Status",
+        "AnalysisType"
+      ],
+      "members":{
+        "Value":{"shape":"EvaluationAnswerData"},
+        "Status":{
+          "shape":"EvaluationSuggestedAnswerStatus",
+          "documentation":"<p>The status of the suggested answer. D</p>"
+        },
+        "Input":{
+          "shape":"EvaluationQuestionInputDetails",
+          "documentation":"<p>Details about the input used to question automation.</p>"
+        },
+        "AnalysisType":{
+          "shape":"EvaluationQuestionAnswerAnalysisType",
+          "documentation":"<p>Type of analysis used to provide suggested answer.</p>"
+        },
+        "AnalysisDetails":{
+          "shape":"EvaluationQuestionAnswerAnalysisDetails",
+          "documentation":"<p>Detailed analysis results.</p>"
+        }
+      },
+      "documentation":"<p>The information about the suggested answer for the question.</p>"
+    },
+    "EvaluationSuggestedAnswerJustification":{
+      "type":"string",
+      "min":1
+    },
+    "EvaluationSuggestedAnswerStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "FAILED",
+        "SUCCEEDED"
+      ]
+    },
+    "EvaluationSuggestedAnswerTranscriptMillisOffset":{
+      "type":"integer",
+      "min":0
+    },
+    "EvaluationSuggestedAnswerTranscriptMillisecondOffsets":{
+      "type":"structure",
+      "required":["BeginOffsetMillis"],
+      "members":{
+        "BeginOffsetMillis":{
+          "shape":"EvaluationSuggestedAnswerTranscriptMillisOffset",
+          "documentation":"<p>Offset in milliseconds from the beginning of the transcript.</p>"
+        }
+      },
+      "documentation":"<p>The milliseconds offset for transcript reference in suggested answer.</p>"
+    },
+    "EvaluationSuggestedAnswerTranscriptSegment":{"type":"string"},
+    "EvaluationSuggestedAnswersList":{
+      "type":"list",
+      "member":{"shape":"EvaluationSuggestedAnswer"}
+    },
     "EvaluationSummary":{
       "type":"structure",
       "required":[
@@ -12727,10 +14305,22 @@
           "shape":"ResourceId",
           "documentation":"<p>The unique identifier for the evaluation form.</p>"
         },
+        "CalibrationSessionId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The calibration session ID that this evaluation belongs to.</p>"
+        },
         "Status":{
           "shape":"EvaluationStatus",
           "documentation":"<p>The status of the contact evaluation.</p>"
         },
+        "AutoEvaluationEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether automated evaluation is enabled.</p>"
+        },
+        "AutoEvaluationStatus":{
+          "shape":"AutoEvaluationStatus",
+          "documentation":"<p>The status of the contact auto evaluation. </p>"
+        },
         "EvaluatorArn":{
           "shape":"ARN",
           "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the evaluation.</p>"
@@ -12739,6 +14329,14 @@
           "shape":"EvaluationScore",
           "documentation":"<p>The overall score of the contact evaluation.</p>"
         },
+        "Acknowledgement":{
+          "shape":"EvaluationAcknowledgementSummary",
+          "documentation":"<p>Information related to evaluation acknowledgement.</p>"
+        },
+        "EvaluationType":{
+          "shape":"EvaluationType",
+          "documentation":"<p>Type of the evaluation. </p>"
+        },
         "CreatedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp for when the evaluation was created.</p>"
@@ -12754,6 +14352,51 @@
       "type":"list",
       "member":{"shape":"EvaluationSummary"}
     },
+    "EvaluationTranscriptPointOfInterest":{
+      "type":"structure",
+      "members":{
+        "MillisecondOffsets":{
+          "shape":"EvaluationSuggestedAnswerTranscriptMillisecondOffsets",
+          "documentation":"<p>Offset in milliseconds from the beginning of transcript.</p>"
+        },
+        "TranscriptSegment":{
+          "shape":"EvaluationSuggestedAnswerTranscriptSegment",
+          "documentation":"<p>Segment of transcript.</p>"
+        }
+      },
+      "documentation":"<p>Information about the point of interest in transcript provided to evaluation.</p>"
+    },
+    "EvaluationTranscriptPointsOfInterest":{
+      "type":"list",
+      "member":{"shape":"EvaluationTranscriptPointOfInterest"},
+      "max":100,
+      "min":0
+    },
+    "EvaluationTranscriptType":{
+      "type":"string",
+      "enum":[
+        "RAW",
+        "REDACTED"
+      ]
+    },
+    "EvaluationType":{
+      "type":"string",
+      "enum":[
+        "STANDARD",
+        "CALIBRATION"
+      ]
+    },
+    "EvaluatorUserUnion":{
+      "type":"structure",
+      "members":{
+        "ConnectUserArn":{
+          "shape":"ARN",
+          "documentation":"<p>Represents the Amazon Connect ARN of the user.</p>"
+        }
+      },
+      "documentation":"<p>Represents the entity that performed the action on the evaluation.</p>",
+      "union":true
+    },
     "EventBridgeActionDefinition":{
       "type":"structure",
       "required":["Name"],
@@ -12783,7 +14426,8 @@
         "OnContactEvaluationSubmit",
         "OnMetricDataUpdate",
         "OnCaseCreate",
-        "OnCaseUpdate"
+        "OnCaseUpdate",
+        "OnSlaBreach"
       ]
     },
     "Expiry":{
@@ -12801,6 +14445,7 @@
       "documentation":"<p>An object to specify the expiration of a routing step.</p>"
     },
     "ExpiryDurationInMinutes":{"type":"integer"},
+    "ExportLocation":{"type":"string"},
     "Expression":{
       "type":"structure",
       "members":{
@@ -12853,6 +14498,7 @@
         "INVALID_CUSTOMER_ENDPOINT",
         "INVALID_SYSTEM_ENDPOINT",
         "INVALID_QUEUE",
+        "INVALID_OUTBOUND_STRATEGY",
         "MISSING_CAMPAIGN",
         "MISSING_CUSTOMER_ENDPOINT",
         "MISSING_QUEUE_ID_AND_SYSTEM_ENDPOINT",
@@ -12991,6 +14637,10 @@
         "RoutingStepExpressions":{
           "shape":"RoutingExpressions",
           "documentation":"<p>A list of expressions as a filter, in which an expression is an object of a step in a routing criteria.</p>"
+        },
+        "AgentStatuses":{
+          "shape":"AgentStatuses",
+          "documentation":"<p>A list of up to 50 agent status IDs or ARNs.</p>"
         }
       },
       "documentation":"<p>Contains the filter to apply when retrieving metrics.</p>"
@@ -13039,6 +14689,12 @@
       "min":1,
       "pattern":"^[a-zA-Z0-9]{64}$"
     },
+    "FormId":{"type":"string"},
+    "FragmentNumber":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
     "FunctionArn":{
       "type":"string",
       "max":140,
@@ -13165,6 +14821,45 @@
         }
       }
     },
+    "GetContactMetricsRequest":{
+      "type":"structure",
+      "required":[
+        "InstanceId",
+        "ContactId",
+        "Metrics"
+      ],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceIdOrArn",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>"
+        },
+        "ContactId":{
+          "shape":"InstanceIdOrArn",
+          "documentation":"<p>The identifier of the contact in this instance of Amazon Connect. </p>"
+        },
+        "Metrics":{
+          "shape":"ContactMetrics",
+          "documentation":"<p>A list of contact-level metrics to retrieve.</p>"
+        }
+      }
+    },
+    "GetContactMetricsResponse":{
+      "type":"structure",
+      "members":{
+        "MetricResults":{
+          "shape":"ContactMetricResults",
+          "documentation":"<p>A list of metric results containing the calculated values for each requested metric. Each result includes the metric name and its corresponding calculated value.</p>"
+        },
+        "Id":{
+          "shape":"ContactId",
+          "documentation":"<p>The unique identifier of the contact for which metrics were retrieved.</p>"
+        },
+        "Arn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the contact for which metrics were retrieved.</p>"
+        }
+      }
+    },
     "GetCurrentMetricDataRequest":{
       "type":"structure",
       "required":[
@@ -13181,15 +14876,15 @@
         },
         "Filters":{
           "shape":"Filters",
-          "documentation":"<p>The filters to apply to returned metrics. You can filter up to the following limits:</p> <ul> <li> <p>Queues: 100</p> </li> <li> <p>Routing profiles: 100</p> </li> <li> <p>Channels: 3 (VOICE, CHAT, and TASK channels are supported.)</p> </li> <li> <p>RoutingStepExpressions: 50</p> </li> </ul> <p>Metric data is retrieved only for the resources associated with the queues or routing profiles, and by any channels included in the filter. (You cannot filter by both queue AND routing profile.) You can include both resource IDs and resource ARNs in the same request.</p> <p>When using the <code>RoutingStepExpression</code> filter, you need to pass exactly one <code>QueueId</code>. The filter is also case sensitive so when using the <code>RoutingStepExpression</code> filter, grouping by <code>ROUTING_STEP_EXPRESSION</code> is required.</p> <p>Currently tagging is only supported on the resources that are passed in the filter.</p>"
+          "documentation":"<p>The filters to apply to returned metrics. You can filter up to the following limits:</p> <ul> <li> <p>Queues: 100</p> </li> <li> <p>Routing profiles: 100</p> </li> <li> <p>Channels: 3 (VOICE, CHAT, and TASK channels are supported.)</p> </li> <li> <p>RoutingStepExpressions: 50</p> </li> <li> <p>AgentStatuses: 50</p> </li> </ul> <p>Metric data is retrieved only for the resources associated with the queues or routing profiles, and by any channels included in the filter. (You cannot filter by both queue AND routing profile.) You can include both resource IDs and resource ARNs in the same request.</p> <p>When using <code>AgentStatuses</code> as filter make sure Queues is added as primary filter.</p> <p>When using the <code>RoutingStepExpression</code> filter, you need to pass exactly one <code>QueueId</code>. The filter is also case sensitive so when using the <code>RoutingStepExpression</code> filter, grouping by <code>ROUTING_STEP_EXPRESSION</code> is required.</p> <p>Currently tagging is only supported on the resources that are passed in the filter.</p>"
         },
         "Groupings":{
           "shape":"Groupings",
-          "documentation":"<p>The grouping applied to the metrics returned. For example, when grouped by <code>QUEUE</code>, the metrics returned apply to each queue rather than aggregated for all queues. </p> <ul> <li> <p>If you group by <code>CHANNEL</code>, you should include a Channels filter. VOICE, CHAT, and TASK channels are supported.</p> </li> <li> <p>If you group by <code>ROUTING_PROFILE</code>, you must include either a queue or routing profile filter. In addition, a routing profile filter is required for metrics <code>CONTACTS_SCHEDULED</code>, <code>CONTACTS_IN_QUEUE</code>, and <code> OLDEST_CONTACT_AGE</code>.</p> </li> <li> <p>If no <code>Grouping</code> is included in the request, a summary of metrics is returned.</p> </li> <li> <p>When using the <code>RoutingStepExpression</code> filter, group by <code>ROUTING_STEP_EXPRESSION</code> is required.</p> </li> </ul>"
+          "documentation":"<p>Defines the level of aggregation for metrics data by a dimension(s). Its similar to sorting items into buckets based on a common characteristic, then counting or calculating something for each bucket. For example, when grouped by <code>QUEUE</code>, the metrics returned apply to each queue rather than aggregated for all queues. </p> <p>The grouping list is an ordered list, with the first item in the list defined as the primary grouping. If no grouping is included in the request, the aggregation happens at the instance-level.</p> <ul> <li> <p>If you group by <code>CHANNEL</code>, you should include a Channels filter. VOICE, CHAT, and TASK channels are supported.</p> </li> <li> <p>If you group by <code>AGENT_STATUS</code>, you must include the <code>QUEUE</code> as the primary grouping and use queue filter. When you group by <code>AGENT_STATUS</code>, the only metric available is the <code>AGENTS_ONLINE</code> metric.</p> </li> <li> <p>If you group by <code>ROUTING_PROFILE</code>, you must include either a queue or routing profile filter. In addition, a routing profile filter is required for metrics <code>CONTACTS_SCHEDULED</code>, <code>CONTACTS_IN_QUEUE</code>, and <code> OLDEST_CONTACT_AGE</code>.</p> </li> <li> <p>When using the <code>RoutingStepExpression</code> filter, group by <code>ROUTING_STEP_EXPRESSION</code> is required.</p> </li> </ul>"
         },
         "CurrentMetrics":{
           "shape":"CurrentMetrics",
-          "documentation":"<p>The metrics to retrieve. Specify the name and unit for each metric. The following metrics are available. For a description of all the metrics, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html\">Real-time Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <dl> <dt>AGENTS_AFTER_CONTACT_WORK</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#aftercallwork-real-time\">ACW</a> </p> </dd> <dt>AGENTS_AVAILABLE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#available-real-time\">Available</a> </p> </dd> <dt>AGENTS_ERROR</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#error-real-time\">Error</a> </p> </dd> <dt>AGENTS_NON_PRODUCTIVE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#non-productive-time-real-time\">NPT (Non-Productive Time)</a> </p> </dd> <dt>AGENTS_ON_CALL</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time\">On contact</a> </p> </dd> <dt>AGENTS_ON_CONTACT</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#on-call-real-time\">On contact</a> </p> </dd> <dt>AGENTS_ONLINE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#online-real-time\">Online</a> </p> </dd> <dt>AGENTS_STAFFED</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#staffed-real-time\">Staffed</a> </p> </dd> <dt>CONTACTS_IN_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#in-queue-real-time\">In queue</a> </p> </dd> <dt>CONTACTS_SCHEDULED</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#scheduled-real-time\">Scheduled</a> </p> </dd> <dt>OLDEST_CONTACT_AGE</dt> <dd> <p>Unit: SECONDS</p> <p>When you use groupings, Unit says SECONDS and the Value is returned in SECONDS. </p> <p>When you do not use groupings, Unit says SECONDS but the Value is returned in MILLISECONDS. For example, if you get a response like this:</p> <p> <code>{ \"Metric\": { \"Name\": \"OLDEST_CONTACT_AGE\", \"Unit\": \"SECONDS\" }, \"Value\": 24113.0 </code>}</p> <p>The actual OLDEST_CONTACT_AGE is 24 seconds.</p> <p>When the filter <code>RoutingStepExpression</code> is used, this metric is still calculated from enqueue time. For example, if a contact that has been queued under <code>&lt;Expression 1&gt;</code> for 10 seconds has expired and <code>&lt;Expression 2&gt;</code> becomes active, then <code>OLDEST_CONTACT_AGE</code> for this queue will be counted starting from 10, not 0.</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#oldest-real-time\">Oldest</a> </p> </dd> <dt>SLOTS_ACTIVE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#active-real-time\">Active</a> </p> </dd> <dt>SLOTS_AVAILABLE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/real-time-metrics-definitions.html#availability-real-time\">Availability</a> </p> </dd> </dl>"
+          "documentation":"<p>The metrics to retrieve. Specify the name and unit for each metric. The following metrics are available. For a description of all the metrics, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <dl> <dt>AGENTS_AFTER_CONTACT_WORK</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#aftercallwork-real-time\">ACW</a> </p> </dd> <dt>AGENTS_AVAILABLE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#available-real-time\">Available</a> </p> </dd> <dt>AGENTS_ERROR</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#error-real-time\">Error</a> </p> </dd> <dt>AGENTS_NON_PRODUCTIVE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-productive-time-real-time\">NPT (Non-Productive Time)</a> </p> </dd> <dt>AGENTS_ON_CALL</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#on-call-real-time\">On contact</a> </p> </dd> <dt>AGENTS_ON_CONTACT</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#on-call-real-time\">On contact</a> </p> </dd> <dt>AGENTS_ONLINE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#online-real-time\">Online</a> </p> </dd> <dt>AGENTS_STAFFED</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#staffed-real-time\">Staffed</a> </p> </dd> <dt>CONTACTS_IN_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#in-queue-real-time\">In queue</a> </p> </dd> <dt>CONTACTS_SCHEDULED</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#scheduled-real-time\">Scheduled</a> </p> </dd> <dt>OLDEST_CONTACT_AGE</dt> <dd> <p>Unit: SECONDS</p> <p>When you use groupings, Unit says SECONDS and the Value is returned in SECONDS. </p> <p>When you do not use groupings, Unit says SECONDS but the Value is returned in MILLISECONDS. For example, if you get a response like this:</p> <p> <code>{ \"Metric\": { \"Name\": \"OLDEST_CONTACT_AGE\", \"Unit\": \"SECONDS\" }, \"Value\": 24113.0 </code>}</p> <p>The actual OLDEST_CONTACT_AGE is 24 seconds.</p> <p>When the filter <code>RoutingStepExpression</code> is used, this metric is still calculated from enqueue time. For example, if a contact that has been queued under <code>&lt;Expression 1&gt;</code> for 10 seconds has expired and <code>&lt;Expression 2&gt;</code> becomes active, then <code>OLDEST_CONTACT_AGE</code> for this queue will be counted starting from 10, not 0.</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#oldest-real-time\">Oldest</a> </p> </dd> <dt>SLOTS_ACTIVE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#active-real-time\">Active</a> </p> </dd> <dt>SLOTS_AVAILABLE</dt> <dd> <p>Unit: COUNT</p> <p>Name in real-time metrics report: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#availability-real-time\">Availability</a> </p> </dd> </dl>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -13295,13 +14990,13 @@
         },
         "FromDate":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The Date from when the hours of operation are listed.</p>",
+          "documentation":"<p>The date from when the hours of operation are listed.</p>",
           "location":"querystring",
           "locationName":"fromDate"
         },
         "ToDate":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The Date until when the hours of operation are listed.</p>",
+          "documentation":"<p>The date until when the hours of operation are listed.</p>",
           "location":"querystring",
           "locationName":"toDate"
         }
@@ -13312,7 +15007,7 @@
       "members":{
         "EffectiveHoursOfOperationList":{
           "shape":"EffectiveHoursOfOperationList",
-          "documentation":"<p>Information about the effective hours of operations</p>"
+          "documentation":"<p>Information about the effective hours of operations.</p>"
         },
         "TimeZone":{
           "shape":"TimeZone",
@@ -13432,7 +15127,7 @@
         },
         "HistoricalMetrics":{
           "shape":"HistoricalMetrics",
-          "documentation":"<p>The metrics to retrieve. Specify the name, unit, and statistic for each metric. The following historical metrics are available. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html\">Historical Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>This API does not support a contacts incoming metric (there's no CONTACTS_INCOMING metric missing from the documented list). </p> </note> <dl> <dt>ABANDON_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>API_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CALLBACK_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_ABANDONED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_AGENT_HUNG_UP_FIRST</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_CONSULTED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_HANDLED_INCOMING</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_HANDLED_OUTBOUND</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_HOLD_ABANDONS</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_MISSED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_QUEUED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_TRANSFERRED_IN</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_TRANSFERRED_IN_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_TRANSFERRED_OUT</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> </dd> <dt>HANDLE_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>INTERACTION_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>OCCUPANCY</dt> <dd> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> </dd> <dt>QUEUE_ANSWER_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> </dd> <dt>QUEUED_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: MAX</p> </dd> <dt>SERVICE_LEVEL</dt> <dd> <p>You can include up to 20 SERVICE_LEVEL metrics in a request.</p> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>LT</code> (for \"Less than\"). </p> </dd> </dl>"
+          "documentation":"<p>The metrics to retrieve. Specify the name, unit, and statistic for each metric. The following historical metrics are available. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definition</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <note> <p>This API does not support a contacts incoming metric (there's no CONTACTS_INCOMING metric missing from the documented list). </p> </note> <dl> <dt>ABANDON_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-abandon-time\">Average queue abandon time</a> </p> </dd> <dt>AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time\">After contact work time</a> </p> </dd> <dt>API_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#api-contacts-handled\">API contacts handled</a> </p> </dd> <dt>AVG_HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time\">Average customer hold time</a> </p> </dd> <dt>CALLBACK_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#callback-contacts-handled\">Callback contacts handled</a> </p> </dd> <dt>CONTACTS_ABANDONED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned\">Contacts abandoned</a> </p> </dd> <dt>CONTACTS_AGENT_HUNG_UP_FIRST</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-agent-hung-up-first\">Contacts agent hung up first</a> </p> </dd> <dt>CONTACTS_CONSULTED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-consulted\">Contacts consulted</a> </p> </dd> <dt>CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled\">Contacts handled</a> </p> </dd> <dt>CONTACTS_HANDLED_INCOMING</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-incoming\">Contacts handled incoming</a> </p> </dd> <dt>CONTACTS_HANDLED_OUTBOUND</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-outbound\">Contacts handled outbound</a> </p> </dd> <dt>CONTACTS_HOLD_ABANDONS</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-disconnect\">Contacts hold disconnect</a> </p> </dd> <dt>CONTACTS_MISSED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response\">AGENT_NON_RESPONSE</a> </p> </dd> <dt>CONTACTS_QUEUED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued\">Contacts queued</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_IN</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-in\">Contacts transferred in</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_IN_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue\">Contacts transferred out queue</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out\">Contacts transferred out</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue\">Contacts transferred out queue</a> </p> </dd> <dt>HANDLE_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-handle-time\">Average handle time</a> </p> </dd> <dt>INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-and-customer-hold-time\">Average agent interaction and customer hold time</a> </p> </dd> <dt>INTERACTION_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#aaverage-agent-interaction-time\">Average agent interaction time</a> </p> </dd> <dt>OCCUPANCY</dt> <dd> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#occupancy\">Occupancy</a> </p> </dd> <dt>QUEUE_ANSWER_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html##average-queue-answer-time\">Average queue answer time</a> </p> </dd> <dt>QUEUED_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: MAX</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#minimum-flow-time\">Minimum flow time</a> </p> </dd> <dt>SERVICE_LEVEL</dt> <dd> <p>You can include up to 20 SERVICE_LEVEL metrics in a request.</p> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>LT</code> (for \"Less than\"). </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-abandon-time\">Average queue abandon time</a> </p> </dd> </dl>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -13486,15 +15181,15 @@
         },
         "Filters":{
           "shape":"FiltersV2List",
-          "documentation":"<p>The filters to apply to returned metrics. You can filter on the following resources:</p> <ul> <li> <p>Agents</p> </li> <li> <p>Campaigns</p> </li> <li> <p>Channels</p> </li> <li> <p>Feature</p> </li> <li> <p>Queues</p> </li> <li> <p>Routing profiles</p> </li> <li> <p>Routing step expression</p> </li> <li> <p>User hierarchy groups</p> </li> </ul> <p>At least one filter must be passed from queues, routing profiles, agents, or user hierarchy groups.</p> <p>For metrics for outbound campaigns analytics, you can also use campaigns to satisfy at least one filter requirement.</p> <p>To filter by phone number, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/create-historical-metrics-report.html\">Create a historical metrics report</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p>Note the following limits:</p> <ul> <li> <p> <b>Filter keys</b>: A maximum of 5 filter keys are supported in a single request. Valid filter keys: <code>AGENT</code> | <code>AGENT_HIERARCHY_LEVEL_ONE</code> | <code>AGENT_HIERARCHY_LEVEL_TWO</code> | <code>AGENT_HIERARCHY_LEVEL_THREE</code> | <code>AGENT_HIERARCHY_LEVEL_FOUR</code> | <code>AGENT_HIERARCHY_LEVEL_FIVE</code> | <code>ANSWERING_MACHINE_DETECTION_STATUS</code> | <code> BOT_ID</code> | <code>BOT_ALIAS</code> | <code>BOT_VERSION</code> | <code>BOT_LOCALE</code> | <code>BOT_INTENT_NAME</code> | <code>CAMPAIGN</code> | <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code> |<code>CASE_TEMPLATE_ARN</code> | <code>CASE_STATUS</code> | <code>CHANNEL</code> | <code>contact/segmentAttributes/connect:Subtype</code> | <code>DISCONNECT_REASON</code> | <code>FEATURE</code> | <code>FLOW_ACTION_ID</code> | <code>FLOW_TYPE</code> | <code>FLOWS_MODULE_RESOURCE_ID</code> | <code>FLOWS_NEXT_RESOURCE_ID</code> | <code>FLOWS_NEXT_RESOURCE_QUEUE_ID</code> | <code>FLOWS_OUTCOME_TYPE</code> | <code>FLOWS_RESOURCE_ID</code> | <code>INITIATION_METHOD</code> | <code>INVOKING_RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>INVOKING_RESOURCE_TYPE</code> | <code>PARENT_FLOWS_RESOURCE_ID</code> | <code>RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>ROUTING_PROFILE</code> | <code>ROUTING_STEP_EXPRESSION</code> | <code>QUEUE</code> | <code>Q_CONNECT_ENABLED</code> | </p> </li> <li> <p> <b>Filter values</b>: A maximum of 100 filter values are supported in a single request. VOICE, CHAT, and TASK are valid <code>filterValue</code> for the CHANNEL filter key. They do not count towards limitation of 100 filter values. For example, a GetMetricDataV2 request can filter by 50 queues, 35 agents, and 15 routing profiles for a total of 100 filter values, along with 3 channel filters. </p> <p> <code>contact_lens_conversational_analytics</code> is a valid filterValue for the <code>FEATURE</code> filter key. It is available only to contacts analyzed by Contact Lens conversational analytics.</p> <p> <code>connect:Chat</code>, <code>connect:SMS</code>, <code>connect:Telephony</code>, and <code>connect:WebRTC</code> are valid <code>filterValue</code> examples (not exhaustive) for the <code>contact/segmentAttributes/connect:Subtype filter</code> key.</p> <p> <code>ROUTING_STEP_EXPRESSION</code> is a valid filter key with a filter value up to 3000 length. This filter is case and order sensitive. JSON string fields must be sorted in ascending order and JSON array order should be kept as is.</p> <p> <code>Q_CONNECT_ENABLED</code>. TRUE and FALSE are the only valid filterValues for the <code>Q_CONNECT_ENABLED</code> filter key. </p> <ul> <li> <p>TRUE includes all contacts that had Amazon Q in Connect enabled as part of the flow.</p> </li> <li> <p>FALSE includes all contacts that did not have Amazon Q in Connect enabled as part of the flow</p> </li> </ul> <p>This filter is available only for contact record-driven metrics. </p> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns_Campaign.html\">Campaign</a> ARNs are valid <code>filterValues</code> for the <code>CAMPAIGN</code> filter key.</p> </li> </ul>"
+          "documentation":"<p>The filters to apply to returned metrics. You can filter on the following resources:</p> <ul> <li> <p>Agents</p> </li> <li> <p>Campaigns</p> </li> <li> <p>Channels</p> </li> <li> <p>Feature</p> </li> <li> <p>Queues</p> </li> <li> <p>Routing profiles</p> </li> <li> <p>Routing step expression</p> </li> <li> <p>User hierarchy groups</p> </li> </ul> <p>At least one filter must be passed from queues, routing profiles, agents, or user hierarchy groups.</p> <p>For metrics for outbound campaigns analytics, you can also use campaigns to satisfy at least one filter requirement.</p> <p>To filter by phone number, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/create-historical-metrics-report.html\">Create a historical metrics report</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p>Note the following limits:</p> <ul> <li> <p> <b>Filter keys</b>: A maximum of 5 filter keys are supported in a single request. Valid filter keys: <code>AGENT</code> | <code>AGENT_HIERARCHY_LEVEL_ONE</code> | <code>AGENT_HIERARCHY_LEVEL_TWO</code> | <code>AGENT_HIERARCHY_LEVEL_THREE</code> | <code>AGENT_HIERARCHY_LEVEL_FOUR</code> | <code>AGENT_HIERARCHY_LEVEL_FIVE</code> | <code>ANSWERING_MACHINE_DETECTION_STATUS</code> | <code> BOT_ID</code> | <code>BOT_ALIAS</code> | <code>BOT_VERSION</code> | <code>BOT_LOCALE</code> | <code>BOT_INTENT_NAME</code> | <code>CAMPAIGN</code> | <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code> | <code>CAMPAIGN_EXCLUDED_EVENT_TYPE </code> | <code>CASE_TEMPLATE_ARN</code> | <code>CASE_STATUS</code> | <code>CHANNEL</code> | <code>contact/segmentAttributes/connect:Subtype</code> | <code>DISCONNECT_REASON</code> | <code>EVALUATION_FORM</code> | <code>EVALUATION_SECTION</code> | <code>EVALUATION_QUESTION</code> | <code>EVALUATION_SOURCE</code> | <code>FEATURE</code> | <code>FLOW_ACTION_ID</code> | <code>FLOW_TYPE</code> | <code>FLOWS_MODULE_RESOURCE_ID</code> | <code>FLOWS_NEXT_RESOURCE_ID</code> | <code>FLOWS_NEXT_RESOURCE_QUEUE_ID</code> | <code>FLOWS_OUTCOME_TYPE</code> | <code>FLOWS_RESOURCE_ID</code> | <code>FORM_VERSION</code> | <code>INITIATION_METHOD</code> | <code>INVOKING_RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>INVOKING_RESOURCE_TYPE</code> | <code>PARENT_FLOWS_RESOURCE_ID</code> | <code>RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>ROUTING_PROFILE</code> | <code>ROUTING_STEP_EXPRESSION</code> | <code>QUEUE</code> | <code>Q_CONNECT_ENABLED</code> | </p> </li> <li> <p> <b>Filter values</b>: A maximum of 100 filter values are supported in a single request. VOICE, CHAT, and TASK are valid <code>filterValue</code> for the CHANNEL filter key. They do not count towards limitation of 100 filter values. For example, a GetMetricDataV2 request can filter by 50 queues, 35 agents, and 15 routing profiles for a total of 100 filter values, along with 3 channel filters. </p> <p> <code>contact_lens_conversational_analytics</code> is a valid filterValue for the <code>FEATURE</code> filter key. It is available only to contacts analyzed by Contact Lens conversational analytics.</p> <p> <code>connect:Chat</code>, <code>connect:SMS</code>, <code>connect:Telephony</code>, and <code>connect:WebRTC</code> are valid <code>filterValue</code> examples (not exhaustive) for the <code>contact/segmentAttributes/connect:Subtype filter</code> key.</p> <p> <code>ROUTING_STEP_EXPRESSION</code> is a valid filter key with a filter value up to 3000 length. This filter is case and order sensitive. JSON string fields must be sorted in ascending order and JSON array order should be kept as is.</p> <p> <code>Q_CONNECT_ENABLED</code>. TRUE and FALSE are the only valid filterValues for the <code>Q_CONNECT_ENABLED</code> filter key. </p> <ul> <li> <p>TRUE includes all contacts that had Amazon Q in Connect enabled as part of the flow.</p> </li> <li> <p>FALSE includes all contacts that did not have Amazon Q in Connect enabled as part of the flow</p> </li> </ul> <p>This filter is available only for contact record-driven metrics. </p> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns_Campaign.html\">Campaign</a> ARNs are valid <code>filterValues</code> for the <code>CAMPAIGN</code> filter key.</p> </li> </ul>"
         },
         "Groupings":{
           "shape":"GroupingsV2",
-          "documentation":"<p>The grouping applied to the metrics that are returned. For example, when results are grouped by queue, the metrics returned are grouped by queue. The values that are returned apply to the metrics for each queue. They are not aggregated for all queues.</p> <p>If no grouping is specified, a summary of all metrics is returned.</p> <p>Valid grouping keys: <code>AGENT</code> | <code>AGENT_HIERARCHY_LEVEL_ONE</code> | <code>AGENT_HIERARCHY_LEVEL_TWO</code> | <code>AGENT_HIERARCHY_LEVEL_THREE</code> | <code>AGENT_HIERARCHY_LEVEL_FOUR</code> | <code>AGENT_HIERARCHY_LEVEL_FIVE</code> | <code>ANSWERING_MACHINE_DETECTION_STATUS</code> | <code>BOT_ID</code> | <code>BOT_ALIAS</code> | <code>BOT_VERSION</code> | <code>BOT_LOCALE</code> | <code>BOT_INTENT_NAME</code> | <code>CAMPAIGN</code> | <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code> | <code>CASE_TEMPLATE_ARN</code> | <code>CASE_STATUS</code> | <code>CHANNEL</code> | <code>contact/segmentAttributes/connect:Subtype</code> | <code>DISCONNECT_REASON</code> | <code>FLOWS_RESOURCE_ID</code> | <code>FLOWS_MODULE_RESOURCE_ID</code> | <code>FLOW_ACTION_ID</code> | <code>FLOW_TYPE</code> | <code>FLOWS_OUTCOME_TYPE</code> | <code>INITIATION_METHOD</code> | <code>INVOKING_RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>INVOKING_RESOURCE_TYPE</code> | <code>PARENT_FLOWS_RESOURCE_ID</code> | <code>Q_CONNECT_ENABLED</code> | <code>QUEUE</code> | <code>RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>ROUTING_PROFILE</code> | <code>ROUTING_STEP_EXPRESSION</code> </p>"
+          "documentation":"<p>The grouping applied to the metrics that are returned. For example, when results are grouped by queue, the metrics returned are grouped by queue. The values that are returned apply to the metrics for each queue. They are not aggregated for all queues.</p> <p>If no grouping is specified, a summary of all metrics is returned.</p> <p>Valid grouping keys: <code>AGENT</code> | <code>AGENT_HIERARCHY_LEVEL_ONE</code> | <code>AGENT_HIERARCHY_LEVEL_TWO</code> | <code>AGENT_HIERARCHY_LEVEL_THREE</code> | <code>AGENT_HIERARCHY_LEVEL_FOUR</code> | <code>AGENT_HIERARCHY_LEVEL_FIVE</code> | <code>ANSWERING_MACHINE_DETECTION_STATUS</code> | <code>BOT_ID</code> | <code>BOT_ALIAS</code> | <code>BOT_VERSION</code> | <code>BOT_LOCALE</code> | <code>BOT_INTENT_NAME</code> | <code>CAMPAIGN</code> | <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code> | <code>CAMPAIGN_EXCLUDED_EVENT_TYPE</code> | <code>CAMPAIGN_EXECUTION_TIMESTAMP</code> | <code>CASE_TEMPLATE_ARN</code> | <code>CASE_STATUS</code> | <code>CHANNEL</code> | <code>contact/segmentAttributes/connect:Subtype</code> | <code>DISCONNECT_REASON</code> | <code>EVALUATION_FORM</code> | <code>EVALUATION_SECTION</code> | <code>EVALUATION_QUESTION</code> | <code>EVALUATION_SOURCE</code> | <code>FLOWS_RESOURCE_ID</code> | <code>FLOWS_MODULE_RESOURCE_ID</code> | <code>FLOW_ACTION_ID</code> | <code>FLOW_TYPE</code> | <code>FLOWS_OUTCOME_TYPE</code> | <code>FORM_VERSION</code> | <code>INITIATION_METHOD</code> | <code>INVOKING_RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>INVOKING_RESOURCE_TYPE</code> | <code>PARENT_FLOWS_RESOURCE_ID</code> | <code>Q_CONNECT_ENABLED</code> | <code>QUEUE</code> | <code>RESOURCE_PUBLISHED_TIMESTAMP</code> | <code>ROUTING_PROFILE</code> | <code>ROUTING_STEP_EXPRESSION</code> </p> <p>Type: Array of strings</p> <p>Array Members: Maximum number of 4 items</p> <p>Required: No</p>"
         },
         "Metrics":{
           "shape":"MetricsV2",
-          "documentation":"<p>The metrics to retrieve. Specify the name, groupings, and filters for each metric. The following historical metrics are available. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html\">Historical metrics definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <dl> <dt>ABANDONMENT_RATE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#abandonment-rate-historical\">Abandonment rate</a> </p> </dd> <dt>AGENT_ADHERENT_TIME</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#adherent-time-historical\">Adherent time</a> </p> </dd> <dt>AGENT_ANSWER_RATE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-answer-rate-historical\">Agent answer rate</a> </p> </dd> <dt>AGENT_NON_ADHERENT_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#non-adherent-time\">Non-adherent time</a> </p> </dd> <dt>AGENT_NON_RESPONSE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-non-response\">Agent non-response</a> </p> </dd> <dt>AGENT_NON_RESPONSE_WITHOUT_CUSTOMER_ABANDONS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>Data for this metric is available starting from October 1, 2023 0:00:00 GMT.</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-nonresponse-no-abandon-historical\">Agent non-response without customer abandons</a> </p> </dd> <dt>AGENT_OCCUPANCY</dt> <dd> <p>Unit: Percentage</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#occupancy-historical\">Occupancy</a> </p> </dd> <dt>AGENT_SCHEDULE_ADHERENCE</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#adherence-historical\">Adherence</a> </p> </dd> <dt>AGENT_SCHEDULED_TIME</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#scheduled-time-historical\">Scheduled time</a> </p> </dd> <dt>AVG_ABANDON_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-queue-abandon-time-historical\">Average queue abandon time</a> </p> </dd> <dt>AVG_ACTIVE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-active-time-historical\">Average active time</a> </p> </dd> <dt>AVG_AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-acw-time-historical\">Average after contact work time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_AGENT_CONNECTING_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>. For now, this metric only supports the following as <code>INITIATION_METHOD</code>: <code>INBOUND</code> | <code>OUTBOUND</code> | <code>CALLBACK</code> | <code>API</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#htm-avg-agent-api-connecting-time\">Average agent API connecting time</a> </p> <note> <p>The <code>Negate</code> key in metric-level filters is not applicable for this metric.</p> </note> </dd> <dt>AVG_AGENT_PAUSE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-agent-pause-time-historical\">Average agent pause time</a> </p> </dd> <dt>AVG_BOT_CONVERSATION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-time-metric\">Average bot conversation time</a> </p> </dd> <dt>AVG_BOT_CONVERSATION_TURNS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-turns-metric\">Average bot conversation turns</a> </p> </dd> <dt>AVG_CASE_RELATED_CONTACTS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-contacts-case-historical\">Average contacts per case</a> </p> </dd> <dt>AVG_CASE_RESOLUTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-case-resolution-time-historical\">Average case resolution time</a> </p> </dd> <dt>AVG_CONTACT_DURATION</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-contact-duration-historical\">Average contact duration</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_CONVERSATION_DURATION</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-conversation-duration-historical\">Average conversation duration</a> </p> </dd> <dt>AVG_DIALS_PER_MINUTE</dt> <dd> <p>This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-dials-historical\">Average dials per minute</a> </p> </dd> <dt>AVG_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-flow-time-historical\">Average flow time</a> </p> </dd> <dt>AVG_GREETING_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-greeting-time-agent-historical\">Average agent greeting time</a> </p> </dd> <dt>AVG_HANDLE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, RoutingStepExpression</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-handle-time-historical\">Average handle time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-customer-hold-time-historical\">Average customer hold time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_HOLD_TIME_ALL_CONTACTS</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#avg-customer-hold-time-all-contacts-historical\">Average customer hold time all contacts</a> </p> </dd> <dt>AVG_HOLDS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-holds-historical\">Average holds</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-agent-interaction-customer-hold-time-historical\">Average agent interaction and customer hold time</a> </p> </dd> <dt>AVG_INTERACTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-agent-interaction-time-historical\">Average agent interaction time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_INTERRUPTIONS_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-interruptions-agent-historical\">Average agent interruptions</a> </p> </dd> <dt>AVG_INTERRUPTION_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-interruptions-time-agent-historical\">Average agent interruption time</a> </p> </dd> <dt>AVG_NON_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html##average-non-talk-time-historical\">Average non-talk time</a> </p> </dd> <dt>AVG_QUEUE_ANSWER_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-queue-answer-time-historical\">Average queue answer time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_RESOLUTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-resolution-time-historical\">Average resolution time</a> </p> </dd> <dt>AVG_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-talk-time-historical\">Average talk time</a> </p> </dd> <dt>AVG_TALK_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-talk-time-agent-historical\">Average agent talk time</a> </p> </dd> <dt>AVG_TALK_TIME_CUSTOMER</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-talk-time-customer-historical\">Average customer talk time</a> </p> </dd> <dt>AVG_WAIT_TIME_AFTER_CUSTOMER_CONNECTION</dt> <dd> <p>This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#average-wait-time-historical\">Average wait time after customer connection</a> </p> </dd> <dt>BOT_CONVERSATIONS_COMPLETED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-conversations-completed-metric\">Bot conversations</a> </p> </dd> <dt>BOT_INTENTS_COMPLETED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed-metric\">Bot intents completed</a> </p> </dd> <dt>CAMPAIGN_CONTACTS_ABANDONED_AFTER_X</dt> <dd> <p>This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>GT</code> (for <i>Greater than</i>).</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#campaign-contacts-abandoned-historical\">Campaign contacts abandoned after X</a> </p> </dd> <dt>CAMPAIGN_CONTACTS_ABANDONED_AFTER_X_RATE</dt> <dd> <p>This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>GT</code> (for <i>Greater than</i>).</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#campaign-contacts-abandoned-rate-historical\">Campaign contacts abandoned after X rate</a> </p> </dd> <dt>CAMPAIGN_INTERACTIONS</dt> <dd> <p>This metric is available only for outbound campaigns using the email delivery mode. </p> <p>Unit: Count</p> <p>Valid metric filter key: CAMPAIGN_INTERACTION_EVENT_TYPE</p> <p>Valid groupings and filters: Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#campaign-interactions-historical\">Campaign interactions</a> </p> </dd> <dt>CAMPAIGN_SEND_ATTEMPTS</dt> <dd> <p>This metric is available only for outbound campaigns.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Channel, contact/segmentAttributes/connect:Subtype </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#campaign-send-attempts-historical\">Campaign send attempts</a> </p> </dd> <dt>CASES_CREATED</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#cases-created-historical\">Cases created</a> </p> </dd> <dt>CONTACTS_CREATED</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-created-historical\">Contacts created</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_HANDLED</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, RoutingStepExpression, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#api-contacts-handled-historical\">API contacts handled</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_HANDLED_BY_CONNECTED_TO_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-handled-by-connected-to-agent-historical\">Contacts handled (connected to agent timestamp)</a> </p> </dd> <dt>CONTACTS_HOLD_ABANDONS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-handled-by-connected-to-agent-historical\">Contacts hold disconnect</a> </p> </dd> <dt>CONTACTS_ON_HOLD_AGENT_DISCONNECT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-hold-agent-disconnect-historical\">Contacts hold agent disconnect</a> </p> </dd> <dt>CONTACTS_ON_HOLD_CUSTOMER_DISCONNECT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-hold-customer-disconnect-historical\">Contacts hold customer disconnect</a> </p> </dd> <dt>CONTACTS_PUT_ON_HOLD</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-hold-customer-disconnect-historical\">Contacts put on hold</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_EXTERNAL</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-transferred-out-external-historical\">Contacts transferred out external</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_INTERNAL</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-transferred-out-internal-historical\">Contacts transferred out internal</a> </p> </dd> <dt>CONTACTS_QUEUED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-queued-historical\">Contacts queued</a> </p> </dd> <dt>CONTACTS_QUEUED_BY_ENQUEUE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-queued-by-enqueue-historical\">Contacts queued (enqueue timestamp)</a> </p> </dd> <dt>CONTACTS_REMOVED_FROM_QUEUE_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-removed-historical\">Contacts removed from queue in X seconds</a> </p> </dd> <dt>CONTACTS_RESOLVED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-resolved-historical\">Contacts resolved in X</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-transferred-out-historical\">Contacts transferred out</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_TRANSFERRED_OUT_BY_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-transferred-out-by-agent-historical\">Contacts transferred out by agent</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_FROM_QUEUE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-transferred-out-by-agent-historical\">Contacts transferred out queue</a> </p> </dd> <dt>CURRENT_CASES</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#current-cases-historical\">Current cases</a> </p> </dd> <dt>DELIVERY_ATTEMPTS</dt> <dd> <p>This metric is available only for outbound campaigns.</p> <p>Unit: Count</p> <p>Valid metric filter key: <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Agent, Answering Machine Detection Status, Campaign, Campaign Delivery EventType, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#delivery-attempts-historical\">Delivery attempts</a> </p> <note> <p>Campaign Delivery EventType filter and grouping are only available for SMS and Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine Detection Status and Disconnect Reason are only available for agent assisted voice and automated voice delivery modes. </p> </note> </dd> <dt>DELIVERY_ATTEMPT_DISPOSITION_RATE</dt> <dd> <p>This metric is available only for outbound campaigns. Dispositions for the agent assisted voice and automated voice delivery modes are only available with answering machine detection enabled.</p> <p>Unit: Percent</p> <p>Valid metric filter key: <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Agent, Answering Machine Detection Status, Campaign, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#delivery-attempt-disposition-rate-historical\">Delivery attempt disposition rate</a> </p> <note> <p>Campaign Delivery Event Type filter and grouping are only available for SMS and Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine Detection Status and Disconnect Reason are only available for agent assisted voice and automated voice delivery modes. </p> </note> </dd> <dt>FLOWS_OUTCOME</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#flows-outcome-historical\">Flows outcome</a> </p> </dd> <dt>FLOWS_STARTED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#flows-started-historical\">Flows started</a> </p> </dd> <dt>HUMAN_ANSWERED_CALLS</dt> <dd> <p>This metric is available only for outbound campaigns. Dispositions for the agent assisted voice and automated voice delivery modes are only available with answering machine detection enabled. </p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#human-answered-historical\">Human answered</a> </p> </dd> <dt>MAX_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#maximum-flow-time-historical\">Maximum flow time</a> </p> </dd> <dt>MAX_QUEUED_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#maximum-queued-time-historical\">Maximum queued time</a> </p> </dd> <dt>MIN_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#minimum-flow-time-historical\">Minimum flow time</a> </p> </dd> <dt>PERCENT_BOT_CONVERSATIONS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-conversations-outcome-metric\">Percent bot conversations outcome</a> </p> </dd> <dt>PERCENT_BOT_INTENTS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-intents-outcome-metric\">Percent bot intents outcome</a> </p> </dd> <dt>PERCENT_CASES_FIRST_CONTACT_RESOLVED</dt> <dd> <p>Unit: Percent</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#cases-resolved-first-contact-historical\">Cases resolved on first contact</a> </p> </dd> <dt>PERCENT_CONTACTS_STEP_EXPIRED</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>PERCENT_CONTACTS_STEP_JOINED</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>PERCENT_FLOWS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid metric filter key: <code>FLOWS_OUTCOME_TYPE</code> </p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#flows-outcome-percentage-historical\">Flows outcome percentage</a>.</p> <note> <p>The <code>FLOWS_OUTCOME_TYPE</code> is not a valid grouping.</p> </note> </dd> <dt>PERCENT_NON_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#ntt-historical\">Non-talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#tt-historical\">Talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#ttagent-historical\">Agent talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME_CUSTOMER</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#ttcustomer-historical\">Customer talk time percent</a> </p> </dd> <dt>REOPENED_CASE_ACTIONS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#cases-reopened-historical\">Cases reopened</a> </p> </dd> <dt>RESOLVED_CASE_ACTIONS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#cases-resolved-historical\">Cases resolved</a> </p> </dd> <dt>SERVICE_LEVEL</dt> <dd> <p>You can include up to 20 SERVICE_LEVEL metrics in a request.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#service-level-historical\">Service level X</a> </p> </dd> <dt>STEP_CONTACTS_QUEUED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>SUM_AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#acw-historical\">After contact work time</a> </p> </dd> <dt>SUM_CONNECTING_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>. This metric only supports the following filter keys as <code>INITIATION_METHOD</code>: <code>INBOUND</code> | <code>OUTBOUND</code> | <code>CALLBACK</code> | <code>API</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#htm-agent-api-connecting-time\">Agent API connecting time</a> </p> <note> <p>The <code>Negate</code> key in metric-level filters is not applicable for this metric.</p> </note> </dd> <dt>CONTACTS_ABANDONED</dt> <dd> <p>Unit: Count</p> <p>Metric filter: </p> <ul> <li> <p>Valid values: <code>API</code>| <code>Incoming</code> | <code>Outbound</code> | <code>Transfer</code> | <code>Callback</code> | <code>Queue_Transfer</code>| <code>Disconnect</code> </p> </li> </ul> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, RoutingStepExpression, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-abandoned-historical\">Contact abandoned</a> </p> </dd> <dt>SUM_CONTACTS_ABANDONED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-abandoned-x-historical\">Contacts abandoned in X seconds</a> </p> </dd> <dt>SUM_CONTACTS_ANSWERED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contacts-answered-x-historical\">Contacts answered in X seconds</a> </p> </dd> <dt>SUM_CONTACT_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contact-flow-time-historical\">Contact flow time</a> </p> </dd> <dt>SUM_CONTACT_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-on-contact-time-historical\">Agent on contact time</a> </p> </dd> <dt>SUM_CONTACTS_DISCONNECTED </dt> <dd> <p>Valid metric filter key: <code>DISCONNECT_REASON</code> </p> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contact-disconnected-historical\">Contact disconnected</a> </p> </dd> <dt>SUM_ERROR_STATUS_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#error-status-time-historical\">Error status time</a> </p> </dd> <dt>SUM_HANDLE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#contact-handle-time-historical\">Contact handle time</a> </p> </dd> <dt>SUM_HOLD_TIME</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#customer-hold-time-historical\">Customer hold time</a> </p> </dd> <dt>SUM_IDLE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-idle-time-historica\">Agent idle time</a> </p> </dd> <dt>SUM_INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-interaction-hold-time-historical\">Agent interaction and hold time</a> </p> </dd> <dt>SUM_INTERACTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#agent-interaction-time-historical\">Agent interaction time</a> </p> </dd> <dt>SUM_NON_PRODUCTIVE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#npt-historical\">Non-Productive Time</a> </p> </dd> <dt>SUM_ONLINE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#online-time-historical\">Online time</a> </p> </dd> <dt>SUM_RETRY_CALLBACK_ATTEMPTS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#callback-attempts-historical\">Callback attempts</a> </p> </dd> </dl>"
+          "documentation":"<p>The metrics to retrieve. Specify the name, groupings, and filters for each metric. The following historical metrics are available. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html\">Metrics definition</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <dl> <dt>ABANDONMENT_RATE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#abandonment-rate\">Abandonment rate</a> </p> </dd> <dt>AGENT_ADHERENT_TIME</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#adherent-time\">Adherent time</a> </p> </dd> <dt>AGENT_ANSWER_RATE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-answer-rate\">Agent answer rate</a> </p> </dd> <dt>AGENT_NON_ADHERENT_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-adherent-time\">Non-adherent time</a> </p> </dd> <dt>AGENT_NON_RESPONSE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response\">Agent non-response</a> </p> </dd> <dt>AGENT_NON_RESPONSE_WITHOUT_CUSTOMER_ABANDONS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>Data for this metric is available starting from October 1, 2023 0:00:00 GMT.</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response-without-customer-abandons\">Agent non-response without customer abandons</a> </p> </dd> <dt>AGENT_OCCUPANCY</dt> <dd> <p>Unit: Percentage</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#occupancy\">Occupancy</a> </p> </dd> <dt>AGENT_SCHEDULE_ADHERENCE</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#adherence\">Adherence</a> </p> </dd> <dt>AGENT_SCHEDULED_TIME</dt> <dd> <p>This metric is available only in Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region\">Forecasting, capacity planning, and scheduling</a> is available.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#scheduled-time\">Scheduled time</a> </p> </dd> <dt>AVG_ABANDON_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-abandon-time\">Average queue abandon time</a> </p> </dd> <dt>AVG_ACTIVE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-active-time\">Average active time</a> </p> </dd> <dt>AVG_AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time\">Average after contact work time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_AGENT_CONNECTING_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>. For now, this metric only supports the following as <code>INITIATION_METHOD</code>: <code>INBOUND</code> | <code>OUTBOUND</code> | <code>CALLBACK</code> | <code>API</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-api-connecting-time\">Average agent API connecting time</a> </p> <note> <p>The <code>Negate</code> key in metric-level filters is not applicable for this metric.</p> </note> </dd> <dt>AVG_AGENT_PAUSE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-pause-time\">Average agent pause time</a> </p> </dd> <dt>AVG_BOT_CONVERSATION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-time\">Average bot conversation time</a> </p> </dd> <dt>AVG_BOT_CONVERSATION_TURNS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#average-bot-conversation-turns\">Average bot conversation turns</a> </p> </dd> <dt>AVG_CASE_RELATED_CONTACTS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-contacts-per-case\">Average contacts per case</a> </p> </dd> <dt>AVG_CASE_RESOLUTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-case-resolution-time\">Average case resolution time</a> </p> </dd> <dt>AVG_CONTACT_DURATION</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-contact-duration\">Average contact duration</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_CONTACT_FIRST_RESPONSE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-average-contact-first-response-wait-time\">Agent average contact first response wait time</a> </p> </dd> <dt>AVG_CONVERSATION_CLOSE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-conversation-close-time\">Average conversation close time</a> </p> </dd> <dt>AVG_CONVERSATION_DURATION</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-conversation-duration\">Average conversation duration</a> </p> </dd> <dt>AVG_DIALS_PER_MINUTE</dt> <dd> <p>This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-dials-per-minute\">Average dials per minute</a> </p> </dd> <dt>AVG_EVALUATION_SCORE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form ID, Evaluation Section ID, Evaluation Question ID, Evaluation Source, Form Version, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-evaluation-score\">Average evaluation score</a> </p> </dd> <dt>AVG_FIRST_RESPONSE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-first-response-time\">Average agent first response time</a> </p> </dd> <dt>AVG_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-flow-time\">Average flow time</a> </p> </dd> <dt>AVG_GREETING_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-greeting-time\">Average agent greeting time</a> </p> </dd> <dt>AVG_HANDLE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, RoutingStepExpression</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-handle-time\">Average handle time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time\">Average customer hold time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_HOLD_TIME_ALL_CONTACTS</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time-all-contacts\">Average customer hold time all contacts</a> </p> </dd> <dt>AVG_HOLDS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-holds\">Average holds</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-and-customer-hold-time\">Average agent interaction and customer hold time</a> </p> </dd> <dt>AVG_INTERACTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-time\">Average agent interaction time</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_INTERRUPTIONS_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interruptions\">Average agent interruptions</a> </p> </dd> <dt>AVG_INTERRUPTION_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interruption-time\">Average agent interruption time</a> </p> </dd> <dt>AVG_MESSAGE_LENGTH_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-message-length\">Average agent message length</a> </p> </dd> <dt>AVG_MESSAGE_LENGTH_CUSTOMER</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-message-length\">Average customer message length</a> </p> </dd> <dt>AVG_MESSAGES</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-messages\">Average messages</a> </p> </dd> <dt>AVG_MESSAGES_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-messages\">Average agent messages</a> </p> </dd> <dt>AVG_MESSAGES_BOT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-bot-messages\">Average bot messages</a> </p> </dd> <dt>AVG_MESSAGES_CUSTOMER</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-messages\">Average customer messages</a> </p> </dd> <dt>AVG_NON_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-non-talk-time\">Average non-talk time</a> </p> </dd> <dt>AVG_QUEUE_ANSWER_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-answer-time\">Average queue answer time</a> </p> <p>Valid metric level filters: <code>INITIATION_METHOD</code>, <code>FEATURE</code>, <code>DISCONNECT_REASON</code> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>AVG_QUEUE_ANSWER_TIME_CUSTOMER_FIRST_CALLBACK</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-answer-time-customer-first-callback\">Avg. queue answer time - customer first callback</a> </p> </dd> <dt>AVG_RESPONSE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-response-time-agent\">Average agent response time</a> </p> </dd> <dt>AVG_RESPONSE_TIME_CUSTOMER</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-time-agent\">Average customer response time</a> </p> </dd> <dt>AVG_RESOLUTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-resolution-time\">Average resolution time</a> </p> </dd> <dt>AVG_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-talk-time\">Average talk time</a> </p> </dd> <dt>AVG_TALK_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-talk-time\">Average agent talk time</a> </p> </dd> <dt>AVG_TALK_TIME_CUSTOMER</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-talk-time\">Average customer talk time</a> </p> </dd> <dt>AVG_WAIT_TIME_AFTER_CUSTOMER_CONNECTION</dt> <dd> <p>This metric is available only for outbound campaigns that use the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Seconds</p> <p>Valid groupings and filters: Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-wait-time-after-customer-connection\">Average wait time after customer connection</a> </p> </dd> <dt>AVG_WAIT_TIME_AFTER_CUSTOMER_FIRST_CALLBACK_CONNECTION</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-wait-time-after-customer-connection-customer-first-callback\">Avg. wait time after customer connection - customer first callback</a> </p> </dd> <dt>AVG_WEIGHTED_EVALUATION_SCORE</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form Id, Evaluation Section ID, Evaluation Question ID, Evaluation Source, Form Version, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-weighted-evaluation-score\">Average weighted evaluation score</a> </p> </dd> <dt>BOT_CONVERSATIONS_COMPLETED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-conversations-completed\">Bot conversations completed</a> </p> </dd> <dt>BOT_INTENTS_COMPLETED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed\">Bot intents completed</a> </p> </dd> <dt>CAMPAIGN_CONTACTS_ABANDONED_AFTER_X</dt> <dd> <p>This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>GT</code> (for <i>Greater than</i>).</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-contacts-abandoned-after-x\">Campaign contacts abandoned after X</a> </p> </dd> <dt>CAMPAIGN_CONTACTS_ABANDONED_AFTER_X_RATE</dt> <dd> <p>This metric is available only for outbound campaigns using the agent assisted voice and automated voice delivery modes.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>GT</code> (for <i>Greater than</i>).</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-contacts-abandoned-after-x-rate\">Campaign contacts abandoned after X rate</a> </p> </dd> <dt>CAMPAIGN_INTERACTIONS</dt> <dd> <p>This metric is available only for outbound campaigns using the email delivery mode. </p> <p>Unit: Count</p> <p>Valid metric filter key: CAMPAIGN_INTERACTION_EVENT_TYPE</p> <p>Valid groupings and filters: Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-interactions\">Campaign interactions</a> </p> </dd> <dt>CAMPAIGN_PROGRESS_RATE</dt> <dd> <p>This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Campaign, Campaign Execution Timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-progress-rate\">Campaign progress rate</a> </p> </dd> <dt>CAMPAIGN_SEND_ATTEMPTS</dt> <dd> <p>This metric is available only for outbound campaigns.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Channel, contact/segmentAttributes/connect:Subtype </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-send-attempts\">Campaign send attempts</a> </p> </dd> <dt>CAMPAIGN_SEND_EXCLUSIONS</dt> <dd> <p>This metric is available only for outbound campaigns.</p> <p>Valid metric filter key: CAMPAIGN_EXCLUDED_EVENT_TYPE</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Campaign Excluded Event Type, Campaign Execution Timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#campaign-send-exclusions\">Campaign send exclusions</a> </p> </dd> <dt>CASES_CREATED</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-created\">Cases created</a> </p> </dd> <dt>CONTACTS_CREATED</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-created\">Contacts created</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_HANDLED</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, RoutingStepExpression, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled\">Contacts handled</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_HANDLED_BY_CONNECTED_TO_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code> </p> <p>Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-by-connected-to-agent-timestamp\">Contacts handled (connected to agent timestamp)</a> </p> </dd> <dt>CONTACTS_HOLD_ABANDONS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-disconnect\">Contacts hold disconnect</a> </p> </dd> <dt>CONTACTS_ON_HOLD_AGENT_DISCONNECT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-agent-disconnect\">Contacts hold agent disconnect</a> </p> </dd> <dt>CONTACTS_ON_HOLD_CUSTOMER_DISCONNECT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-customer-disconnect\">Contacts hold customer disconnect</a> </p> </dd> <dt>CONTACTS_PUT_ON_HOLD</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-put-on-hold\">Contacts put on hold</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_EXTERNAL</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-external\">Contacts transferred out external</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_INTERNAL</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-internal\">Contacts transferred out internal</a> </p> </dd> <dt>CONTACTS_QUEUED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued\">Contacts queued</a> </p> </dd> <dt>CONTACTS_QUEUED_BY_ENQUEUE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued-by-enqueue\">Contacts queued (enqueue timestamp)</a> </p> </dd> <dt>CONTACTS_REMOVED_FROM_QUEUE_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-removed-from-queue\">Contacts removed from queue in X seconds</a> </p> </dd> <dt>CONTACTS_RESOLVED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-resolved\">Contacts resolved in X</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out\">Contacts transferred out</a> </p> <note> <p>Feature is a valid filter but not a valid grouping.</p> </note> </dd> <dt>CONTACTS_TRANSFERRED_OUT_BY_AGENT</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-by-agent\">Contacts transferred out by agent</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_FROM_QUEUE</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue\">Contacts transferred out queue</a> </p> </dd> <dt>CURRENT_CASES</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#current-cases\">Current cases</a> </p> </dd> <dt>CONVERSATIONS_ABANDONED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Feature, RoutingStepExpression, Initiation method, Routing Profile, Queue, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#conversations-abandoned\">Conversations abandoned</a> </p> </dd> <dt>DELIVERY_ATTEMPTS</dt> <dd> <p>This metric is available only for outbound campaigns.</p> <p>Unit: Count</p> <p>Valid metric filter key: <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Agent, Answering Machine Detection Status, Campaign, Campaign Delivery EventType, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#delivery-attempts\">Delivery attempts</a> </p> <note> <p>Campaign Delivery EventType filter and grouping are only available for SMS and Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine Detection Status and Disconnect Reason are only available for agent assisted voice and automated voice delivery modes. </p> </note> </dd> <dt>DELIVERY_ATTEMPT_DISPOSITION_RATE</dt> <dd> <p>This metric is available only for outbound campaigns. Dispositions for the agent assisted voice and automated voice delivery modes are only available with answering machine detection enabled.</p> <p>Unit: Percent</p> <p>Valid metric filter key: <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, <code>CAMPAIGN_DELIVERY_EVENT_TYPE</code>, <code>DISCONNECT_REASON</code> </p> <p>Valid groupings and filters: Agent, Answering Machine Detection Status, Campaign, Channel, contact/segmentAttributes/connect:Subtype, Disconnect Reason, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#delivery-attempt-disposition-rate\">Delivery attempt disposition rate</a> </p> <note> <p>Campaign Delivery Event Type filter and grouping are only available for SMS and Email campaign delivery modes. Agent, Queue, Routing Profile, Answering Machine Detection Status and Disconnect Reason are only available for agent assisted voice and automated voice delivery modes. </p> </note> </dd> <dt>EVALUATIONS_PERFORMED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form ID, Evaluation Source, Form Version, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#evaluations-performed\">Evaluations performed</a> </p> </dd> <dt>FLOWS_OUTCOME</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-outcome\">Flows outcome</a> </p> </dd> <dt>FLOWS_STARTED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-started\">Flows started</a> </p> </dd> <dt>HUMAN_ANSWERED_CALLS</dt> <dd> <p>This metric is available only for outbound campaigns. Dispositions for the agent assisted voice and automated voice delivery modes are only available with answering machine detection enabled. </p> <p>Unit: Count</p> <p>Valid groupings and filters: Agent, Campaign</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#human-answered\">Human answered</a> </p> </dd> <dt>MAX_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#maximum-flow-time\">Maximum flow time</a> </p> </dd> <dt>MAX_QUEUED_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#maximum-queued-time\">Maximum queued time</a> </p> </dd> <dt>MIN_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#minimum-flow-time\">Minimum flow time</a> </p> </dd> <dt>PERCENT_AUTOMATIC_FAILS</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Agent, Agent Hierarchy, Channel, Evaluation Form ID, Evaluation Source, Form Version, Queue, Routing Profile</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#automatic-fails-percent\">Automatic fails percent</a> </p> </dd> <dt>PERCENT_BOT_CONVERSATIONS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-conversations-outcome\">Percent bot conversations outcome</a> </p> </dd> <dt>PERCENT_BOT_INTENTS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Bot ID, Bot alias, Bot version, Bot locale, Bot intent name, Flows resource ID, Flows module resource ID, Flow type, Flow action ID, Invoking resource published timestamp, Initiation method, Invoking resource type, Parent flows resource ID</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#percent-bot-intents-outcome\">Percent bot intents outcome</a> </p> </dd> <dt>PERCENT_CASES_FIRST_CONTACT_RESOLVED</dt> <dd> <p>Unit: Percent</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-resolved-on-first-contact\">Cases resolved on first contact</a> </p> </dd> <dt>PERCENT_CONTACTS_STEP_EXPIRED</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>PERCENT_CONTACTS_STEP_JOINED</dt> <dd> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>PERCENT_FLOWS_OUTCOME</dt> <dd> <p>Unit: Percent</p> <p>Valid metric filter key: <code>FLOWS_OUTCOME_TYPE</code> </p> <p>Valid groupings and filters: Channel, contact/segmentAttributes/connect:Subtype, Flow type, Flows module resource ID, Flows next resource ID, Flows next resource queue ID, Flows outcome type, Flows resource ID, Initiation method, Resource published timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-outcome-percentage\">Flows outcome percentage</a>.</p> <note> <p>The <code>FLOWS_OUTCOME_TYPE</code> is not a valid grouping.</p> </note> </dd> <dt>PERCENT_NON_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#non-talk-time-percent\">Non-talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#talk-time-percent\">Talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME_AGENT</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-talk-time-percent\">Agent talk time percent</a> </p> </dd> <dt>PERCENT_TALK_TIME_CUSTOMER</dt> <dd> <p>This metric is available only for contacts analyzed by Contact Lens conversational analytics.</p> <p>Unit: Percentage</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#customer-talk-time-percent\">Customer talk time percent</a> </p> </dd> <dt>RECIPIENTS_ATTEMPTED</dt> <dd> <p>This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Campaign Execution Timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-attempted\">Recipients attempted</a> </p> </dd> <dt>RECIPIENTS_INTERACTED</dt> <dd> <p>This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.</p> <p>Valid metric filter key: CAMPAIGN_INTERACTION_EVENT_TYPE</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Channel, contact/segmentAttributes/connect:Subtype, Campaign Execution Timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-interacted\">Recipients interacted</a> </p> </dd> <dt>RECIPIENTS_TARGETED</dt> <dd> <p>This metric is only available for outbound campaigns initiated using a customer segment. It is not available for event triggered campaigns.</p> <p>Unit: Count</p> <p>Valid groupings and filters: Campaign, Campaign Execution Timestamp</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#recipients-targeted\">Recipients targeted</a> </p> </dd> <dt>REOPENED_CASE_ACTIONS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-reopened\">Cases reopened</a> </p> </dd> <dt>RESOLVED_CASE_ACTIONS</dt> <dd> <p>Unit: Count</p> <p>Required filter key: CASE_TEMPLATE_ARN</p> <p>Valid groupings and filters: CASE_TEMPLATE_ARN, CASE_STATUS</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#cases-resolved\">Cases resolved</a> </p> </dd> <dt>SERVICE_LEVEL</dt> <dd> <p>You can include up to 20 SERVICE_LEVEL metrics in a request.</p> <p>Unit: Percent</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#service-level\">Service level X</a> </p> </dd> <dt>STEP_CONTACTS_QUEUED</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, RoutingStepExpression</p> <p>UI name: This metric is available in Real-time Metrics UI but not on the Historical Metrics UI.</p> </dd> <dt>SUM_AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time\">After contact work time</a> </p> </dd> <dt>SUM_CONNECTING_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid metric filter key: <code>INITIATION_METHOD</code>. This metric only supports the following filter keys as <code>INITIATION_METHOD</code>: <code>INBOUND</code> | <code>OUTBOUND</code> | <code>CALLBACK</code> | <code>API</code> | <code>CALLBACK_CUSTOMER_FIRST_DIALED</code> </p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-api-connecting-time\">Agent API connecting time</a> </p> <note> <p>The <code>Negate</code> key in metric-level filters is not applicable for this metric.</p> </note> </dd> <dt>CONTACTS_ABANDONED</dt> <dd> <p>Unit: Count</p> <p>Metric filter: </p> <ul> <li> <p>Valid values: <code>API</code>| <code>INCOMING</code> | <code>OUTBOUND</code> | <code>TRANSFER</code> | <code>CALLBACK</code> | <code>QUEUE_TRANSFER</code>| <code>Disconnect</code> | <code>CALLBACK_CUSTOMER_FIRST_DIALED</code> </p> </li> </ul> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, RoutingStepExpression, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned\">Contact abandoned</a> </p> </dd> <dt>SUM_CONTACTS_ABANDONED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned-in-x-seconds\">Contacts abandoned in X seconds</a> </p> </dd> <dt>SUM_CONTACTS_ANSWERED_IN_X</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you can use <code>LT</code> (for \"Less than\") or <code>LTE</code> (for \"Less than equal\").</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-answered-in-x-seconds\">Contacts answered in X seconds</a> </p> </dd> <dt>SUM_CONTACT_FLOW_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-flow-time\">Contact flow time</a> </p> </dd> <dt>SUM_CONTACT_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-on-contact-time\">Agent on contact time</a> </p> </dd> <dt>SUM_CONTACTS_DISCONNECTED </dt> <dd> <p>Valid metric filter key: <code>DISCONNECT_REASON</code> </p> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-disconnected\">Contact disconnected</a> </p> </dd> <dt>SUM_ERROR_STATUS_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#error-status-time\">Error status time</a> </p> </dd> <dt>SUM_HANDLE_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contact-handle-time\">Contact handle time</a> </p> </dd> <dt>SUM_HOLD_TIME</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#customer-hold-time\">Customer hold time</a> </p> </dd> <dt>SUM_IDLE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-idle-time\">Agent idle time</a> </p> </dd> <dt>SUM_INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-interaction-and-hold-time\">Agent interaction and hold time</a> </p> </dd> <dt>SUM_INTERACTION_TIME</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-interaction-time\">Agent interaction time</a> </p> </dd> <dt>SUM_NON_PRODUCTIVE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-productive-time\">Agent non-productive time</a> </p> </dd> <dt>SUM_ONLINE_TIME_AGENT</dt> <dd> <p>Unit: Seconds</p> <p>Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#online-time\">Online time</a> </p> </dd> <dt>SUM_RETRY_CALLBACK_ATTEMPTS</dt> <dd> <p>Unit: Count</p> <p>Valid groupings and filters: Queue, Channel, Routing Profile, contact/segmentAttributes/connect:Subtype, Q in Connect</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#callback-attempts\">Callback attempts</a> </p> </dd> </dl>"
         },
         "NextToken":{
           "shape":"NextToken2500",
@@ -13619,7 +15314,7 @@
         },
         "SelfAssignFlowId":{
           "shape":"ContactFlowId",
-          "documentation":"<p>ContactFlowId for the flow that will be run if this template is used to create a self-assigned task</p>"
+          "documentation":"<p>The ContactFlowId for the flow that will be run if this template is used to create a self-assigned task.</p>"
         },
         "Constraints":{
           "shape":"TaskTemplateConstraints",
@@ -13699,7 +15394,8 @@
         "QUEUE",
         "CHANNEL",
         "ROUTING_PROFILE",
-        "ROUTING_STEP_EXPRESSION"
+        "ROUTING_STEP_EXPRESSION",
+        "AGENT_STATUS"
       ]
     },
     "GroupingV2":{"type":"string"},
@@ -14007,7 +15703,7 @@
       "members":{
         "Name":{
           "shape":"HistoricalMetricName",
-          "documentation":"<p>The name of the metric.</p>"
+          "documentation":"<p>The name of the metric. Following is a list of each supported metric mapped to the UI name, linked to a detailed description in the <i>Amazon Connect Administrator Guide</i>. </p> <dl> <dt>ABANDON_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-queue-abandon-time\">Average queue abandon time</a> </p> </dd> <dt>AFTER_CONTACT_WORK_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#after-contact-work-time\">After contact work time</a> </p> </dd> <dt>API_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#api-contacts-handled\">API contacts handled</a> </p> </dd> <dt>AVG_HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-customer-hold-time\">Average customer hold time</a> </p> </dd> <dt>CALLBACK_CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#callback-contacts-handled\">Callback contacts handled</a> </p> </dd> <dt>CONTACTS_ABANDONED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-abandoned\">Contacts abandoned</a> </p> </dd> <dt>CONTACTS_AGENT_HUNG_UP_FIRST</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-agent-hung-up-first\">Contacts agent hung up first</a> </p> </dd> <dt>CONTACTS_CONSULTED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-consulted\">Contacts consulted</a> </p> </dd> <dt>CONTACTS_HANDLED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled\">Contacts handled</a> </p> </dd> <dt>CONTACTS_HANDLED_INCOMING</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-incoming\">Contacts handled incoming</a> </p> </dd> <dt>CONTACTS_HANDLED_OUTBOUND</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-handled-outbound\">Contacts handled outbound</a> </p> </dd> <dt>CONTACTS_HOLD_ABANDONS</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-hold-disconnect\">Contacts hold disconnect</a> </p> </dd> <dt>CONTACTS_MISSED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#agent-non-response\">AGENT_NON_RESPONSE</a> </p> </dd> <dt>CONTACTS_QUEUED</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-queued\">Contacts queued</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_IN</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-in\">Contacts transferred in</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_IN_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue\">Contacts transferred out queue</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out\">Contacts transferred out</a> </p> </dd> <dt>CONTACTS_TRANSFERRED_OUT_FROM_QUEUE</dt> <dd> <p>Unit: COUNT</p> <p>Statistic: SUM</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#contacts-transferred-out-queue\">Contacts transferred out queue</a> </p> </dd> <dt>HANDLE_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-handle-time\">Average handle time</a> </p> </dd> <dt>INTERACTION_AND_HOLD_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#average-agent-interaction-and-customer-hold-time\">Average agent interaction and customer hold time</a> </p> </dd> <dt>INTERACTION_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#aaverage-agent-interaction-time\">Average agent interaction time</a> </p> </dd> <dt>OCCUPANCY</dt> <dd> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#occupancy\">Occupancy</a> </p> </dd> <dt>QUEUE_ANSWER_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: AVG</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html##average-queue-answer-time\">Average queue answer time</a> </p> </dd> <dt>QUEUED_TIME</dt> <dd> <p>Unit: SECONDS</p> <p>Statistic: MAX</p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#minimum-flow-time\">Minimum flow time</a> </p> </dd> <dt>SERVICE_LEVEL</dt> <dd> <p>You can include up to 20 SERVICE_LEVEL metrics in a request.</p> <p>Unit: PERCENT</p> <p>Statistic: AVG</p> <p>Threshold: For <code>ThresholdValue</code>, enter any whole number from 1 to 604800 (inclusive), in seconds. For <code>Comparison</code>, you must enter <code>LT</code> (for \"Less than\"). </p> <p>UI name: <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#service-level\">Service level X</a> </p> </dd> </dl>"
         },
         "Threshold":{
           "shape":"Threshold",
@@ -14023,7 +15719,7 @@
           "documentation":"<p>The unit for the metric.</p>"
         }
       },
-      "documentation":"<p>Contains information about a historical metric. For a description of each metric, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html\">Historical Metrics Definitions</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+      "documentation":"<p>Contains information about a historical metric. </p>"
     },
     "HistoricalMetricData":{
       "type":"structure",
@@ -14234,7 +15930,7 @@
         },
         "EffectiveTill":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The date till which the hours of operation override would be effective.</p>"
+          "documentation":"<p>The date until the hours of operation override is effective.</p>"
         }
       },
       "documentation":"<p>Information about the hours of operations override.</p>"
@@ -14431,19 +16127,25 @@
         }
       }
     },
+    "InactivityDuration":{
+      "type":"integer",
+      "box":true,
+      "max":720,
+      "min":15
+    },
     "InboundAdditionalRecipients":{
       "type":"structure",
       "members":{
         "ToAddresses":{
           "shape":"EmailAddressRecipientList",
-          "documentation":"<p>The additional recipients information present in to list.</p>"
+          "documentation":"<p>The <b>additional</b> recipients information present in to list. You must have 1 required recipient (<code>DestinationEmailAddress</code>). You can then specify up to 49 additional recipients (across <code>ToAddresses</code> and <code>CcAddresses</code>), for a total of 50 recipients.</p>"
         },
         "CcAddresses":{
           "shape":"EmailAddressRecipientList",
-          "documentation":"<p>The additional recipients information present in cc list.</p>"
+          "documentation":"<p>The <b>additional</b> recipients information present in cc list. You must have 1 required recipient (<code>DestinationEmailAddress</code>). You can then specify up to 49 additional recipients (across <code>ToAddresses</code> and <code>CcAddresses</code>), for a total of 50 recipients.</p>"
         }
       },
-      "documentation":"<p>The additional TO CC recipients information of inbound email.</p>"
+      "documentation":"<p>Information about the additional TO and CC recipients of an inbound email contact.</p> <note> <p>You can include up to 50 email addresses in total, distributed across <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_StartEmailContact.html#API_StartEmailContact_RequestBody\">DestinationEmailAddress</a>, <code>ToAddresses</code>, and <code>CcAddresses</code>. This total must include one required <code>DestinationEmailAddress</code>. You can then specify up to 49 addresses allocated across <code>ToAddresses</code> and <code>CcAddresses</code> as needed.</p> </note>"
     },
     "InboundCallsEnabled":{"type":"boolean"},
     "InboundEmailContent":{
@@ -14502,12 +16204,25 @@
     "Index":{"type":"integer"},
     "InitiateAs":{
       "type":"string",
-      "enum":["CONNECTED_TO_USER"]
+      "enum":[
+        "CONNECTED_TO_USER",
+        "COMPLETED"
+      ]
     },
     "InitiationMethodList":{
       "type":"list",
       "member":{"shape":"ContactInitiationMethod"}
     },
+    "InputPredefinedAttributeConfiguration":{
+      "type":"structure",
+      "members":{
+        "EnableValueValidationOnAssociation":{
+          "shape":"EnableValueValidationOnAssociation",
+          "documentation":"<p>When this parameter is set to true, Amazon Connect enforces strict validation on the specific values, if the values are predefined in attributes. The contact will store only valid and predefined values for the predefined attribute key.</p>"
+        }
+      },
+      "documentation":"<p>Custom metadata that is associated to predefined attributes to control behavior in upstream services, such as controlling how a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
+    },
     "Instance":{
       "type":"structure",
       "members":{
@@ -14920,6 +16635,7 @@
       "type":"list",
       "member":{"shape":"IpCidr"}
     },
+    "IsReadOnly":{"type":"boolean"},
     "IvrRecordingTrack":{
       "type":"string",
       "enum":["ALL"]
@@ -15140,6 +16856,43 @@
         }
       }
     },
+    "ListAnalyticsDataLakeDataSetsRequest":{
+      "type":"structure",
+      "required":["InstanceId"],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "location":"uri",
+          "locationName":"InstanceId"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResult1000",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAnalyticsDataLakeDataSetsResponse":{
+      "type":"structure",
+      "members":{
+        "Results":{
+          "shape":"AnalyticsDataSetsResults",
+          "documentation":"<p>An array of successful results: <code>DataSetId</code>, <code>DataSetName</code>. This is a paginated API, so <code>nextToken</code> is given if there are more results to be returned.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
+        }
+      }
+    },
     "ListApprovedOriginsRequest":{
       "type":"structure",
       "required":["InstanceId"],
@@ -15199,7 +16952,7 @@
         },
         "MaxResults":{
           "shape":"ListAssociatedContactsRequestMaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p> <p>The maximum number of results to return per page. The default MaxResult size is 25.</p> <p>Valid Range: Minimum value of 1. Maximum value of 100.</p>",
+          "documentation":"<p>The maximum number of results to return per page. </p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
@@ -15744,7 +17497,7 @@
         },
         "HoursOfOperationId":{
           "shape":"HoursOfOperationId",
-          "documentation":"<p>The identifier for the hours of operation</p>",
+          "documentation":"<p>The identifier for the hours of operation.</p>",
           "location":"uri",
           "locationName":"HoursOfOperationId"
         },
@@ -15756,7 +17509,7 @@
         },
         "MaxResults":{
           "shape":"MaxResult100",
-          "documentation":"<p>The maximum number of results to return per page. The default MaxResult size is 100. Valid Range: Minimum value of 1. Maximum value of 1000.</p>",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
           "box":true,
           "location":"querystring",
           "locationName":"maxResults"
@@ -15776,7 +17529,7 @@
         },
         "LastModifiedRegion":{
           "shape":"RegionName",
-          "documentation":"<p>The AWS Region where this resource was last modified.</p>"
+          "documentation":"<p>The Amazon Web Services Region where this resource was last modified.</p>"
         },
         "LastModifiedTime":{
           "shape":"Timestamp",
@@ -16223,7 +17976,7 @@
         },
         "MaxResults":{
           "shape":"MaxResult100",
-          "documentation":"<p>The maximum number of results to return per page. </p>",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
           "box":true,
           "location":"querystring",
           "locationName":"maxResults"
@@ -16385,7 +18138,7 @@
       "members":{
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance. Both Instance ID and Instance ARN are supported input formats. </p>",
           "location":"uri",
           "locationName":"InstanceId"
         },
@@ -16472,7 +18225,7 @@
       "members":{
         "Channel":{
           "shape":"RealTimeContactAnalysisSupportedChannel",
-          "documentation":"<p>The channel of the contact. <code>Voice</code> will not be returned. </p>"
+          "documentation":"<p>The channel of the contact. </p> <important> <p>Only <code>CHAT</code> is supported. This API does not support <code>VOICE</code>. If you attempt to use it for the VOICE channel, an <code>InvalidRequestException</code> error occurs.</p> </important>"
         },
         "Status":{
           "shape":"RealTimeContactAnalysisStatus",
@@ -16488,6 +18241,61 @@
         }
       }
     },
+    "ListRoutingProfileManualAssignmentQueuesRequest":{
+      "type":"structure",
+      "required":[
+        "InstanceId",
+        "RoutingProfileId"
+      ],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>",
+          "location":"uri",
+          "locationName":"InstanceId"
+        },
+        "RoutingProfileId":{
+          "shape":"RoutingProfileId",
+          "documentation":"<p>The identifier of the routing profile.</p>",
+          "location":"uri",
+          "locationName":"RoutingProfileId"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResult100",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "box":true,
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListRoutingProfileManualAssignmentQueuesResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
+        },
+        "RoutingProfileManualAssignmentQueueConfigSummaryList":{
+          "shape":"RoutingProfileManualAssignmentQueueConfigSummaryList",
+          "documentation":"<p>Information about the manual assignment queues associated with the routing profile.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when this resource was last modified.</p>"
+        },
+        "LastModifiedRegion":{
+          "shape":"RegionName",
+          "documentation":"<p>The Amazon Web Services Region where this resource was last modified.</p>"
+        }
+      }
+    },
     "ListRoutingProfileQueuesRequest":{
       "type":"structure",
       "required":[
@@ -17351,6 +19159,13 @@
       "documentation":"<p>A set of endpoints used by clients to connect to the media service group for an Amazon Chime SDK meeting.</p>"
     },
     "MediaRegion":{"type":"string"},
+    "MediaStreamType":{
+      "type":"string",
+      "enum":[
+        "AUDIO",
+        "VIDEO"
+      ]
+    },
     "Meeting":{
       "type":"structure",
       "members":{
@@ -17435,7 +19250,7 @@
         },
         "MetricFilterValues":{
           "shape":"MetricFilterValueList",
-          "documentation":"<p>The values to use for filtering data. Values for metric-level filters can be either a fixed set of values or a customized list, depending on the use case.</p> <p>For valid values of metric-level filters <code>INITIATION_METHOD</code>, <code>DISCONNECT_REASON</code>, and <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord\">ContactTraceRecord</a> in the <i>Amazon Connect Administrator Guide</i>. </p> <p>For valid values of the metric-level filter <code>FLOWS_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html#flows-outcome-historical\">Flow outcome</a> metric in the <i>Amazon Connect Administrator Guide</i>.</p> <p>For valid values of the metric-level filter <code>BOT_CONVERSATION_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-conversations-completed-metric\">Bot conversations completed</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p>For valid values of the metric-level filter <code>BOT_INTENT_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed-metric\">Bot intents completed</a> metric in the <i>Amazon Connect Administrator Guide</i>.</p>"
+          "documentation":"<p>The values to use for filtering data. Values for metric-level filters can be either a fixed set of values or a customized list, depending on the use case.</p> <p>For valid values of metric-level filters <code>INITIATION_METHOD</code>, <code>DISCONNECT_REASON</code>, and <code>ANSWERING_MACHINE_DETECTION_STATUS</code>, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord\">ContactTraceRecord</a> in the <i>Amazon Connect Administrator Guide</i>. </p> <p>For valid values of the metric-level filter <code>FLOWS_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/metrics-definitions.html#flows-outcome\">Flow outcome</a> metric in the <i>Amazon Connect Administrator Guide</i>.</p> <p>For valid values of the metric-level filter <code>BOT_CONVERSATION_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-conversations-completed-metric\">Bot conversations completed</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p>For valid values of the metric-level filter <code>BOT_INTENT_OUTCOME_TYPE</code>, see the description for the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed-metric\">Bot intents completed</a> metric in the <i>Amazon Connect Administrator Guide</i>.</p>"
         },
         "Negate":{
           "shape":"Boolean",
@@ -17586,6 +19401,24 @@
       "min":1,
       "pattern":"(^[\\S].*[\\S]$)|(^[\\S]$)"
     },
+    "NameCriteria":{
+      "type":"structure",
+      "required":[
+        "SearchText",
+        "MatchType"
+      ],
+      "members":{
+        "SearchText":{
+          "shape":"SearchTextList",
+          "documentation":"<p>The words or phrases used to match the contact name.</p>"
+        },
+        "MatchType":{
+          "shape":"SearchContactsMatchType",
+          "documentation":"<p>The match type combining name search criteria using multiple search texts in a name criteria.</p>"
+        }
+      },
+      "documentation":"<p>The search criteria based on the contact name</p>"
+    },
     "Namespace":{
       "type":"string",
       "max":128,
@@ -17631,11 +19464,13 @@
         },
         "UserIds":{
           "shape":"UserIdList",
-          "documentation":"<p>A list of user IDs.</p>"
+          "documentation":"<p>A list of user IDs. Supports variable injection of <code>$.ContactLens.ContactEvaluation.Agent.AgentId</code> for <code>OnContactEvaluationSubmit</code> event source. </p>"
         }
       },
       "documentation":"<p>The type of notification recipient.</p>"
     },
+    "NullableBoolean":{"type":"boolean"},
+    "NullableDouble":{"type":"double"},
     "NullableProficiencyLevel":{
       "type":"float",
       "max":5.0,
@@ -17700,7 +19535,10 @@
         "NUMBER_OF_INTERRUPTIONS",
         "CONTACT_DURATION",
         "AGENT_INTERACTION_DURATION",
-        "CUSTOMER_HOLD_TIME"
+        "CUSTOMER_HOLD_TIME",
+        "LONGEST_HOLD_DURATION",
+        "NUMBER_OF_HOLDS",
+        "AGENT_INTERACTION_AND_HOLD_DURATION"
       ]
     },
     "NumericQuestionPropertyValueAutomation":{
@@ -17750,10 +19588,10 @@
       "members":{
         "CcEmailAddresses":{
           "shape":"EmailAddressRecipientList",
-          "documentation":"<p>The additional CC email address recipients information.</p>"
+          "documentation":"<p>Information about the <b>additional</b> CC email address recipients. Email recipients are limited to 50 total addresses: 1 required recipient in the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_SendOutboundEmail.html#API_SendOutboundEmail_RequestBody\">DestinationEmailAddress</a> field and up to 49 recipients in the 'CcEmailAddresses' field.</p>"
         }
       },
-      "documentation":"<p>The additional recipients information of outbound email.</p>"
+      "documentation":"<p>Information about the additional recipients of outbound email.</p>"
     },
     "OutboundCallerConfig":{
       "type":"structure",
@@ -17799,7 +19637,7 @@
           "documentation":"<p>The identifier of the email address.</p>"
         }
       },
-      "documentation":"<p>The outbound email address Id.</p>"
+      "documentation":"<p>The outbound email address ID.</p>"
     },
     "OutboundEmailContent":{
       "type":"structure",
@@ -17855,6 +19693,35 @@
       "max":36,
       "min":36
     },
+    "OutboundStrategy":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"OutboundStrategyType",
+          "documentation":"<p>Type of the outbound strategy.</p>"
+        },
+        "Config":{
+          "shape":"OutboundStrategyConfig",
+          "documentation":"<p>Config of the outbound strategy.</p>"
+        }
+      },
+      "documentation":"<p>Information about the outbound strategy.</p>"
+    },
+    "OutboundStrategyConfig":{
+      "type":"structure",
+      "members":{
+        "AgentFirst":{
+          "shape":"AgentFirst",
+          "documentation":"<p>The config of agent first outbound strategy.</p>"
+        }
+      },
+      "documentation":"<p>The config of the outbound strategy.</p>"
+    },
+    "OutboundStrategyType":{
+      "type":"string",
+      "enum":["AGENT_FIRST"]
+    },
     "OutboundSubject":{
       "type":"string",
       "max":998,
@@ -17942,7 +19809,8 @@
         "DisplayName":{
           "shape":"DisplayName",
           "documentation":"<p>The display name of the participant.</p>"
-        }
+        },
+        "ParticipantCapabilities":{"shape":"ParticipantCapabilities"}
       },
       "documentation":"<p>The details to add for the participant.</p>"
     },
@@ -17951,6 +19819,48 @@
       "max":256,
       "min":1
     },
+    "ParticipantMetrics":{
+      "type":"structure",
+      "members":{
+        "ParticipantId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>The Participant's ID.</p>"
+        },
+        "ParticipantType":{
+          "shape":"ParticipantType",
+          "documentation":"<p>Information about the conversation participant. Following are the participant types: [Agent, Customer, Supervisor].</p>"
+        },
+        "ConversationAbandon":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>A boolean flag indicating whether the chat conversation was abandoned by a Participant.</p>"
+        },
+        "MessagesSent":{
+          "shape":"Count",
+          "documentation":"<p>Number of chat messages sent by Participant.</p>"
+        },
+        "NumResponses":{
+          "shape":"Count",
+          "documentation":"<p>Number of chat messages sent by Participant.</p>"
+        },
+        "MessageLengthInChars":{
+          "shape":"Count",
+          "documentation":"<p>Number of chat characters sent by Participant.</p>"
+        },
+        "TotalResponseTimeInMillis":{
+          "shape":"DurationMillis",
+          "documentation":"<p>Total chat response time by Participant.</p>"
+        },
+        "MaxResponseTimeInMillis":{
+          "shape":"DurationMillis",
+          "documentation":"<p>Maximum chat response time by Participant.</p>"
+        },
+        "LastMessageTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>Timestamp of last chat message by Participant.</p>"
+        }
+      },
+      "documentation":"<p>Information about a participant's interactions in a contact.</p>"
+    },
     "ParticipantRole":{
       "type":"string",
       "enum":[
@@ -17961,6 +19871,15 @@
         "SUPERVISOR"
       ]
     },
+    "ParticipantState":{
+      "type":"string",
+      "enum":[
+        "INITIAL",
+        "CONNECTED",
+        "DISCONNECTED",
+        "MISSED"
+      ]
+    },
     "ParticipantTimerAction":{
       "type":"string",
       "enum":["Unset"]
@@ -18040,6 +19959,16 @@
       },
       "documentation":"<p>The credentials used by the participant.</p>"
     },
+    "ParticipantType":{
+      "type":"string",
+      "enum":[
+        "ALL",
+        "MANAGER",
+        "AGENT",
+        "CUSTOMER",
+        "THIRDPARTY"
+      ]
+    },
     "Password":{
       "type":"string",
       "pattern":"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d\\S]{8,64}$/",
@@ -18068,8 +19997,7 @@
     },
     "PauseContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Percentage":{
       "type":"integer",
@@ -18100,6 +20028,7 @@
       },
       "documentation":"<p>Enable persistent chats. For more information about enabling persistent chat, and for example use cases and how to configure for them, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-persistence.html\">Enable persistent chat</a>.</p>"
     },
+    "PersistentConnection":{"type":"boolean"},
     "PhoneNumber":{
       "type":"string",
       "pattern":"\\\\+[1-9]\\\\d{1,14}$"
@@ -18465,6 +20394,21 @@
       "max":128,
       "min":0
     },
+    "PostAcceptPreviewTimeoutDurationInSeconds":{
+      "type":"integer",
+      "min":0
+    },
+    "PostAcceptTimeoutConfig":{
+      "type":"structure",
+      "required":["DurationInSeconds"],
+      "members":{
+        "DurationInSeconds":{
+          "shape":"PostAcceptPreviewTimeoutDurationInSeconds",
+          "documentation":"<p>Duration in seconds for the countdown timer after the agent accepted the contact.</p>"
+        }
+      },
+      "documentation":"<p>Countdown timer configuration after the agent accepted the contact.</p>"
+    },
     "PotentialAudioQualityIssue":{
       "type":"string",
       "max":128,
@@ -18497,6 +20441,14 @@
           "shape":"PredefinedAttributeValues",
           "documentation":"<p>The values of the predefined attribute.</p>"
         },
+        "Purposes":{
+          "shape":"PredefinedAttributePurposeNameList",
+          "documentation":"<p>Values that enable you to categorize your predefined attributes. You can use them in custom UI elements across the Amazon Connect admin website.</p>"
+        },
+        "AttributeConfiguration":{
+          "shape":"PredefinedAttributeConfiguration",
+          "documentation":"<p>Custom metadata that is associated to predefined attributes to control behavior in upstream services, such as controlling how a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
+        },
         "LastModifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>Last modified time.</p>"
@@ -18508,11 +20460,36 @@
       },
       "documentation":"<p>Information about a predefined attribute.</p>"
     },
+    "PredefinedAttributeConfiguration":{
+      "type":"structure",
+      "members":{
+        "EnableValueValidationOnAssociation":{
+          "shape":"EnableValueValidationOnAssociation",
+          "documentation":"<p>When this parameter is set to true, Amazon Connect enforces strict validation on the specific values, if the values are predefined in attributes. The contact will store only valid and predefined values for teh predefined attribute key.</p>"
+        },
+        "IsReadOnly":{
+          "shape":"IsReadOnly",
+          "documentation":"<p>A boolean flag used to indicate whether a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
+        }
+      },
+      "documentation":"<p>Custom metadata that is associated to predefined attributes to control behavior in upstream services, such as controlling how a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
+    },
     "PredefinedAttributeName":{
       "type":"string",
-      "max":64,
+      "max":100,
       "min":1
     },
+    "PredefinedAttributePurposeName":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "PredefinedAttributePurposeNameList":{
+      "type":"list",
+      "member":{"shape":"PredefinedAttributePurposeName"},
+      "max":10,
+      "min":0
+    },
     "PredefinedAttributeSearchConditionList":{
       "type":"list",
       "member":{"shape":"PredefinedAttributeSearchCriteria"}
@@ -18538,14 +20515,14 @@
     },
     "PredefinedAttributeStringValue":{
       "type":"string",
-      "max":64,
+      "max":100,
       "min":1
     },
     "PredefinedAttributeStringValuesList":{
       "type":"list",
       "member":{"shape":"PredefinedAttributeStringValue"},
-      "max":128,
-      "min":1
+      "max":500,
+      "min":0
     },
     "PredefinedAttributeSummary":{
       "type":"structure",
@@ -18585,6 +20562,24 @@
       "max":128,
       "min":1
     },
+    "Preview":{
+      "type":"structure",
+      "required":[
+        "PostAcceptTimeoutConfig",
+        "AllowedUserActions"
+      ],
+      "members":{
+        "PostAcceptTimeoutConfig":{
+          "shape":"PostAcceptTimeoutConfig",
+          "documentation":"<p>Countdown timer configuration after the agent accepted the preview outbound contact.</p>"
+        },
+        "AllowedUserActions":{
+          "shape":"AllowedUserActions",
+          "documentation":"<p>The actions the agent can perform after accepting the preview outbound contact.</p>"
+        }
+      },
+      "documentation":"<p>Information about agent-first preview mode outbound strategy configuration.</p>"
+    },
     "Priority":{
       "type":"integer",
       "max":99,
@@ -18816,8 +20811,7 @@
     },
     "PutUserStatusResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "QualityMetrics":{
       "type":"structure",
@@ -18833,6 +20827,18 @@
       },
       "documentation":"<p>Information about the quality of the participant's media connection.</p>"
     },
+    "QuestionRuleCategoryAutomationCondition":{
+      "type":"string",
+      "enum":[
+        "PRESENT",
+        "NOT_PRESENT"
+      ]
+    },
+    "QuestionRuleCategoryAutomationLabel":{
+      "type":"string",
+      "max":50,
+      "min":1
+    },
     "Queue":{
       "type":"structure",
       "members":{
@@ -19703,6 +21709,69 @@
       "type":"list",
       "member":{"shape":"RealtimeContactAnalysisSegment"}
     },
+    "RecordingDeletionReason":{"type":"string"},
+    "RecordingInfo":{
+      "type":"structure",
+      "members":{
+        "StorageType":{
+          "shape":"StorageType",
+          "documentation":"<p>Where the recording/transcript is stored.</p>"
+        },
+        "Location":{
+          "shape":"RecordingLocation",
+          "documentation":"<p>The location, in Amazon S3, for the recording/transcript.</p>"
+        },
+        "MediaStreamType":{
+          "shape":"MediaStreamType",
+          "documentation":"<p>Information about the media stream used during the conversation.</p>"
+        },
+        "ParticipantType":{
+          "shape":"ParticipantType",
+          "documentation":"<p>Information about the conversation participant, whether they are an agent or contact. The participant types are as follows:</p> <ul> <li> <p>All</p> </li> <li> <p>Manager</p> </li> <li> <p>Agent</p> </li> <li> <p>Customer</p> </li> <li> <p>Thirdparty</p> </li> <li> <p>Supervisor</p> </li> </ul>"
+        },
+        "FragmentStartNumber":{
+          "shape":"FragmentNumber",
+          "documentation":"<p>The number that identifies the Kinesis Video Streams fragment where the customer audio stream started.</p>"
+        },
+        "FragmentStopNumber":{
+          "shape":"FragmentNumber",
+          "documentation":"<p>The number that identifies the Kinesis Video Streams fragment where the customer audio stream stopped.</p>"
+        },
+        "StartTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>When the conversation of the last leg of the recording started in UTC time.</p>"
+        },
+        "StopTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>When the conversation of the last leg of recording stopped in UTC time.</p>"
+        },
+        "Status":{
+          "shape":"RecordingStatus",
+          "documentation":"<p>The status of the recording/transcript.</p>"
+        },
+        "DeletionReason":{
+          "shape":"RecordingDeletionReason",
+          "documentation":"<p>If the recording/transcript was deleted, this is the reason entered for the deletion.</p>"
+        }
+      },
+      "documentation":"<p>Information about a voice recording, chat transcript, or screen recording.</p>"
+    },
+    "RecordingLocation":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "RecordingStatus":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "DELETED"
+      ]
+    },
+    "Recordings":{
+      "type":"list",
+      "member":{"shape":"RecordingInfo"}
+    },
     "Reference":{
       "type":"structure",
       "required":["Type"],
@@ -20004,7 +22073,7 @@
           "documentation":"<p>The identifier for the resource.</p>"
         }
       },
-      "documentation":"<p>That resource is already in use. Please try another.</p>",
+      "documentation":"<p>That resource is already in use (for example, you're trying to add a record with the same name as an existing record). If you are trying to delete a resource (for example, DeleteHoursOfOperation or DeletePredefinedAttribute), remove its reference from related resources and then try again.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
@@ -20088,8 +22157,7 @@
     },
     "ResumeContactRecordingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResumeContactRequest":{
       "type":"structure",
@@ -20114,8 +22182,7 @@
     },
     "ResumeContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RoutingCriteria":{
       "type":"structure",
@@ -20231,6 +22298,10 @@
           "shape":"Long",
           "documentation":"<p>The number of associated queues in routing profile.</p>"
         },
+        "NumberOfAssociatedManualAssignmentQueues":{
+          "shape":"Long",
+          "documentation":"<p>The number of associated manual assignment queues in routing profile.</p>"
+        },
         "NumberOfAssociatedUsers":{
           "shape":"Long",
           "documentation":"<p>The number of associated users in routing profile.</p>"
@@ -20254,6 +22325,10 @@
         "AssociatedQueueIds":{
           "shape":"AssociatedQueueIdList",
           "documentation":"<p>The IDs of the associated queue.</p>"
+        },
+        "AssociatedManualAssignmentQueueIds":{
+          "shape":"AssociatedQueueIdList",
+          "documentation":"<p>The IDs of the associated manual assignment queues.</p>"
         }
       },
       "documentation":"<p>Contains information about a routing profile.</p>"
@@ -20268,6 +22343,52 @@
       "type":"list",
       "member":{"shape":"RoutingProfile"}
     },
+    "RoutingProfileManualAssignmentQueueConfig":{
+      "type":"structure",
+      "required":["QueueReference"],
+      "members":{
+        "QueueReference":{"shape":"RoutingProfileQueueReference"}
+      },
+      "documentation":"<p>Contains information about the queue and channel for manual assignment behaviour can be enabled.</p>"
+    },
+    "RoutingProfileManualAssignmentQueueConfigList":{
+      "type":"list",
+      "member":{"shape":"RoutingProfileManualAssignmentQueueConfig"},
+      "max":10,
+      "min":1
+    },
+    "RoutingProfileManualAssignmentQueueConfigSummary":{
+      "type":"structure",
+      "required":[
+        "QueueId",
+        "QueueArn",
+        "QueueName",
+        "Channel"
+      ],
+      "members":{
+        "QueueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The identifier for the queue.</p>"
+        },
+        "QueueArn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the queue.</p>"
+        },
+        "QueueName":{
+          "shape":"QueueName",
+          "documentation":"<p>The name of the queue.</p>"
+        },
+        "Channel":{
+          "shape":"Channel",
+          "documentation":"<p>The channels this queue supports. Valid Values: CHAT | TASK | EMAIL </p> <important> <p>VOICE is not supported. The information shown below is incorrect. We're working to correct it. </p> </important>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a routing profile manual assignment queue.</p>"
+    },
+    "RoutingProfileManualAssignmentQueueConfigSummaryList":{
+      "type":"list",
+      "member":{"shape":"RoutingProfileManualAssignmentQueueConfigSummary"}
+    },
     "RoutingProfileName":{
       "type":"string",
       "max":127,
@@ -20541,6 +22662,10 @@
           "shape":"UpdateCaseActionDefinition",
           "documentation":"<p>Information about the update case action.</p> <p>Supported only for <code>TriggerEventSource</code> values: <code>OnCaseCreate</code> | <code>OnCaseUpdate</code>.</p>"
         },
+        "AssignSlaAction":{
+          "shape":"AssignSlaActionDefinition",
+          "documentation":"<p>Information about the assign SLA action.</p>"
+        },
         "EndAssociatedTasksAction":{
           "shape":"EndAssociatedTasksActionDefinition",
           "documentation":"<p>Information about the end associated tasks action.</p> <p>Supported only for <code>TriggerEventSource</code> values: <code>OnCaseUpdate</code>.</p>"
@@ -20769,6 +22894,50 @@
         }
       }
     },
+    "SearchContactEvaluationsRequest":{
+      "type":"structure",
+      "required":["InstanceId"],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResult100",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "box":true
+        },
+        "SearchCriteria":{
+          "shape":"EvaluationSearchCriteria",
+          "documentation":"<p>The search criteria to be used to return contact evaluations.</p>"
+        },
+        "SearchFilter":{
+          "shape":"EvaluationSearchFilter",
+          "documentation":"<p>Filters to be applied to search results.</p>"
+        }
+      }
+    },
+    "SearchContactEvaluationsResponse":{
+      "type":"structure",
+      "members":{
+        "EvaluationSearchSummaryList":{
+          "shape":"EvaluationSearchSummaryList",
+          "documentation":"<p>Contains information about contact evaluations.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
+        },
+        "ApproximateTotalCount":{
+          "shape":"ApproximateTotalCount",
+          "documentation":"<p>The total number of contact evaluations that matched your search query.</p>"
+        }
+      }
+    },
     "SearchContactFlowModulesRequest":{
       "type":"structure",
       "required":["InstanceId"],
@@ -20857,11 +23026,46 @@
         }
       }
     },
+    "SearchContactsAdditionalTimeRange":{
+      "type":"structure",
+      "required":[
+        "Criteria",
+        "MatchType"
+      ],
+      "members":{
+        "Criteria":{
+          "shape":"SearchContactsAdditionalTimeRangeCriteriaList",
+          "documentation":"<p>List of criteria of the time range to additionally filter on.</p>"
+        },
+        "MatchType":{
+          "shape":"SearchContactsMatchType",
+          "documentation":"<p>The match type combining multiple time range filters.</p>"
+        }
+      },
+      "documentation":"<p>Time range that you <b>additionally</b> want to filter on.</p> <note> <p>This is different from the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_SearchContactsTimeRange.html\">SearchContactsTimeRange</a> data type.</p> </note>"
+    },
+    "SearchContactsAdditionalTimeRangeCriteria":{
+      "type":"structure",
+      "members":{
+        "TimeRange":{"shape":"SearchContactsTimeRange"},
+        "TimestampCondition":{
+          "shape":"SearchContactsTimestampCondition",
+          "documentation":"<p>List of the timestamp conditions.</p>"
+        }
+      },
+      "documentation":"<p>The criteria of the time range to additionally filter on.</p>"
+    },
+    "SearchContactsAdditionalTimeRangeCriteriaList":{
+      "type":"list",
+      "member":{"shape":"SearchContactsAdditionalTimeRangeCriteria"}
+    },
     "SearchContactsMatchType":{
       "type":"string",
       "enum":[
         "MATCH_ALL",
-        "MATCH_ANY"
+        "MATCH_ANY",
+        "MATCH_EXACT",
+        "MATCH_NONE"
       ]
     },
     "SearchContactsRequest":{
@@ -20939,18 +23143,45 @@
       },
       "documentation":"<p>A structure of time range that you want to search results.</p>"
     },
+    "SearchContactsTimeRangeConditionType":{
+      "type":"string",
+      "enum":["NOT_EXISTS"]
+    },
     "SearchContactsTimeRangeType":{
       "type":"string",
       "enum":[
         "INITIATION_TIMESTAMP",
         "SCHEDULED_TIMESTAMP",
         "CONNECTED_TO_AGENT_TIMESTAMP",
-        "DISCONNECT_TIMESTAMP"
+        "DISCONNECT_TIMESTAMP",
+        "ENQUEUE_TIMESTAMP"
       ]
     },
+    "SearchContactsTimestampCondition":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "ConditionType"
+      ],
+      "members":{
+        "Type":{
+          "shape":"SearchContactsTimeRangeType",
+          "documentation":"<p>Type of the timestamps to use for the filter.</p>"
+        },
+        "ConditionType":{
+          "shape":"SearchContactsTimeRangeConditionType",
+          "documentation":"<p>Condition of the timestamp on the contact.</p>"
+        }
+      },
+      "documentation":"<p>The timestamp condition indicating which contact timestamp should be used and how it should be filtered. It is not an actual timestamp value. </p>"
+    },
     "SearchCriteria":{
       "type":"structure",
       "members":{
+        "Name":{
+          "shape":"NameCriteria",
+          "documentation":"<p>Name of the contact.</p>"
+        },
         "AgentIds":{
           "shape":"AgentResourceIdList",
           "documentation":"<p>The identifiers of agents who handled the contacts.</p>"
@@ -20975,6 +23206,14 @@
           "shape":"QueueIdList",
           "documentation":"<p>The list of queue IDs associated with contacts.</p>"
         },
+        "RoutingCriteria":{
+          "shape":"SearchableRoutingCriteria",
+          "documentation":"<p>Routing criteria for the contact.</p>"
+        },
+        "AdditionalTimeRange":{
+          "shape":"SearchContactsAdditionalTimeRange",
+          "documentation":"<p>Additional TimeRange used to filter contacts.</p>"
+        },
         "SearchableContactAttributes":{
           "shape":"SearchableContactAttributes",
           "documentation":"<p>The search criteria based on user-defined contact attributes that have been configured for contact search. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/search-custom-attributes.html\">Search by custom contact attributes</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <important> <p>To use <code>SearchableContactAttributes</code> in a search request, the <code>GetContactAttributes</code> action is required to perform an API request. For more information, see <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonconnect.html#amazonconnect-actions-as-permissions\">https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonconnect.html#amazonconnect-actions-as-permissions</a>Actions defined by Amazon Connect.</p> </important>"
@@ -21029,6 +23268,50 @@
         }
       }
     },
+    "SearchEvaluationFormsRequest":{
+      "type":"structure",
+      "required":["InstanceId"],
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResult100",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "box":true
+        },
+        "SearchCriteria":{
+          "shape":"EvaluationFormSearchCriteria",
+          "documentation":"<p>The search criteria to be used to return evaluation forms.</p>"
+        },
+        "SearchFilter":{
+          "shape":"EvaluationFormSearchFilter",
+          "documentation":"<p>Filters to be applied to search results.</p>"
+        }
+      }
+    },
+    "SearchEvaluationFormsResponse":{
+      "type":"structure",
+      "members":{
+        "EvaluationFormSearchSummaryList":{
+          "shape":"EvaluationFormSearchSummaryList",
+          "documentation":"<p>Information about the returned evaluation forms.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
+        },
+        "ApproximateTotalCount":{
+          "shape":"ApproximateTotalCount",
+          "documentation":"<p>The total number of evaluation forms that matched your search query.</p>"
+        }
+      }
+    },
     "SearchHoursOfOperationOverridesRequest":{
       "type":"structure",
       "required":["InstanceId"],
@@ -21039,11 +23322,11 @@
         },
         "NextToken":{
           "shape":"NextToken2500",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. Length Constraints: Minimum length of 1. Maximum length of 2500.</p>"
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. </p>"
         },
         "MaxResults":{
           "shape":"MaxResult100",
-          "documentation":"<p>The maximum number of results to return per page. Valid Range: Minimum value of 1. Maximum value of 100.</p>",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
           "box":true
         },
         "SearchFilter":{"shape":"HoursOfOperationSearchFilter"},
@@ -21062,7 +23345,7 @@
         },
         "NextToken":{
           "shape":"NextToken2500",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. Length Constraints: Minimum length of 1. Maximum length of 2500.</p>"
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. </p>"
         },
         "ApproximateTotalCount":{
           "shape":"ApproximateTotalCount",
@@ -21296,7 +23579,7 @@
         },
         "ResourceTypes":{
           "shape":"ResourceTypeList",
-          "documentation":"<p>The list of resource types to be used to search tags from. If not provided or if any empty list is provided, this API will search from all supported resource types.</p> <p class=\"title\"> <b>Supported resource types</b> </p> <ul> <li> <p>AGENT</p> </li> <li> <p>ROUTING_PROFILE</p> </li> <li> <p>STANDARD_QUEUE</p> </li> <li> <p>SECURITY_PROFILE</p> </li> <li> <p>OPERATING_HOURS</p> </li> <li> <p>PROMPT</p> </li> <li> <p>CONTACT_FLOW</p> </li> <li> <p>FLOW_MODULE</p> </li> </ul>"
+          "documentation":"<p>The list of resource types to be used to search tags from. If not provided or if any empty list is provided, this API will search from all supported resource types. Note that lowercase and - are required.</p> <p class=\"title\"> <b>Supported resource types</b> </p> <ul> <li> <p>agent</p> </li> <li> <p>agent-state</p> </li> <li> <p>routing-profile</p> </li> <li> <p>standard-queue</p> </li> <li> <p>security-profile</p> </li> <li> <p>operating-hours</p> </li> <li> <p>prompt</p> </li> <li> <p>contact-flow</p> </li> <li> <p>flow- module</p> </li> <li> <p>transfer-destination (also known as quick connect)</p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken2500",
@@ -21475,7 +23758,7 @@
       "members":{
         "InstanceId":{
           "shape":"InstanceId",
-          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p> <note> <p>InstanceID is a required field. The \"Required: No\" below is incorrect.</p> </note>"
+          "documentation":"<p>The identifier of the Amazon Connect instance. You can <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html\">find the instance ID</a> in the Amazon Resource Name (ARN) of the instance.</p>"
         },
         "NextToken":{
           "shape":"NextToken2500",
@@ -21555,6 +23838,20 @@
         }
       }
     },
+    "SearchableAgentCriteriaStep":{
+      "type":"structure",
+      "members":{
+        "AgentIds":{
+          "shape":"AgentResourceIdList",
+          "documentation":"<p>The identifiers of agents used in preferred agents matching.</p>"
+        },
+        "MatchType":{
+          "shape":"SearchContactsMatchType",
+          "documentation":"<p>The match type combining multiple agent criteria steps.</p>"
+        }
+      },
+      "documentation":"<p>The agent criteria to search for preferred agents on the routing criteria.</p>"
+    },
     "SearchableContactAttributeKey":{
       "type":"string",
       "max":100,
@@ -21616,6 +23913,30 @@
       "type":"string",
       "enum":["STANDARD"]
     },
+    "SearchableRoutingCriteria":{
+      "type":"structure",
+      "members":{
+        "Steps":{
+          "shape":"SearchableRoutingCriteriaStepList",
+          "documentation":"<p>The list of Routing criteria steps of the contact routing.</p>"
+        }
+      },
+      "documentation":"<p>Routing criteria of the contact to match on.</p>"
+    },
+    "SearchableRoutingCriteriaStep":{
+      "type":"structure",
+      "members":{
+        "AgentCriteria":{
+          "shape":"SearchableAgentCriteriaStep",
+          "documentation":"<p>Agent matching the routing step of the routing criteria</p>"
+        }
+      },
+      "documentation":"<p>Routing criteria of the contact to match on.</p>"
+    },
+    "SearchableRoutingCriteriaStepList":{
+      "type":"list",
+      "member":{"shape":"SearchableRoutingCriteriaStep"}
+    },
     "SearchableSegmentAttributeKey":{
       "type":"string",
       "max":64,
@@ -21889,11 +24210,23 @@
         "ValueInteger":{
           "shape":"SegmentAttributeValueInteger",
           "documentation":"<p>The value of a segment attribute.</p>"
+        },
+        "ValueList":{
+          "shape":"SegmentAttributeValueList",
+          "documentation":"<p>The value of a segment attribute. This is only supported for system-defined attributes, not for user-defined attributes.</p>"
+        },
+        "ValueArn":{
+          "shape":"SegmentAttributeValueString",
+          "documentation":"<p>The value of a segment attribute that has to be a valid ARN. This is only supported for system-defined attributes, not for user-defined attributes.</p>"
         }
       },
       "documentation":"<p>A value for a segment attribute. This is structured as a map where the key is <code>valueString</code> and the value is a string.</p>"
     },
     "SegmentAttributeValueInteger":{"type":"integer"},
+    "SegmentAttributeValueList":{
+      "type":"list",
+      "member":{"shape":"SegmentAttributeValue"}
+    },
     "SegmentAttributeValueMap":{
       "type":"map",
       "key":{"shape":"SegmentAttributeName"},
@@ -22018,7 +24351,7 @@
         },
         "TrafficType":{
           "shape":"TrafficType",
-          "documentation":"<p>Denotes the class of traffic.</p>"
+          "documentation":"<p>Denotes the class of traffic.</p> <note> <p>Only the CAMPAIGN traffic type is supported.</p> </note>"
         },
         "SourceCampaign":{
           "shape":"SourceCampaign",
@@ -22033,8 +24366,7 @@
     },
     "SendOutboundEmailResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
@@ -22129,6 +24461,25 @@
       "max":50,
       "min":1
     },
+    "SlaAssignmentType":{
+      "type":"string",
+      "enum":["CASES"]
+    },
+    "SlaFieldValueUnionList":{
+      "type":"list",
+      "member":{"shape":"FieldValueUnion"},
+      "max":1
+    },
+    "SlaName":{
+      "type":"string",
+      "max":500,
+      "min":1,
+      "pattern":"^.*[\\S]$"
+    },
+    "SlaType":{
+      "type":"string",
+      "enum":["CaseField"]
+    },
     "SnapshotVersion":{"type":"string"},
     "Sort":{
       "type":"structure",
@@ -22163,7 +24514,8 @@
         "CONNECTED_TO_AGENT_TIMESTAMP",
         "DISCONNECT_TIMESTAMP",
         "INITIATION_METHOD",
-        "CHANNEL"
+        "CHANNEL",
+        "EXPIRY_TIMESTAMP"
       ]
     },
     "SourceApplicationName":{
@@ -22309,7 +24661,7 @@
         },
         "InitialMessage":{
           "shape":"ChatMessage",
-          "documentation":"<p>The initial message to be sent to the newly created chat. If you have a Lex bot in your flow, the initial message is not delivered to the Lex bot.</p>"
+          "documentation":"<p>The initial message to be sent to the newly created chat.</p>"
         },
         "ClientToken":{
           "shape":"ClientToken",
@@ -22385,10 +24737,18 @@
           "shape":"ResourceId",
           "documentation":"<p>The unique identifier for the evaluation form.</p>"
         },
+        "AutoEvaluationConfiguration":{
+          "shape":"AutoEvaluationConfiguration",
+          "documentation":"<p>Whether automated evaluations are enabled.</p>"
+        },
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
           "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource. For example, { \"Tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
         }
       }
     },
@@ -22438,8 +24798,7 @@
     },
     "StartContactRecordingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartContactStreamingRequest":{
       "type":"structure",
@@ -22498,7 +24857,7 @@
         },
         "DestinationEmailAddress":{
           "shape":"EmailAddress",
-          "documentation":"<p>The email address associated with the instance.</p>"
+          "documentation":"<p>The email address associated with the Amazon Connect instance.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -22518,7 +24877,7 @@
         },
         "AdditionalRecipients":{
           "shape":"InboundAdditionalRecipients",
-          "documentation":"<p>The addtional recipients address of the email.</p>"
+          "documentation":"<p>The additional recipients address of the email.</p>"
         },
         "Attachments":{
           "shape":"EmailAttachments",
@@ -22633,7 +24992,7 @@
         },
         "FromEmailAddress":{
           "shape":"EmailAddressInfo",
-          "documentation":"<p>The email address associated with the instance.</p>"
+          "documentation":"<p>The email address associated with the Amazon Connect instance.</p>"
         },
         "DestinationEmailAddress":{
           "shape":"EmailAddressInfo",
@@ -22641,7 +25000,7 @@
         },
         "AdditionalRecipients":{
           "shape":"OutboundAdditionalRecipients",
-          "documentation":"<p>The addtional recipients address of email in CC.</p>"
+          "documentation":"<p>The additional recipients address of email in CC.</p>"
         },
         "EmailMessage":{
           "shape":"OutboundEmailContent",
@@ -22677,7 +25036,7 @@
         },
         "Description":{
           "shape":"Description",
-          "documentation":"<p>A description of the voice contact that is shown to an agent in the Contact Control Panel (CCP).</p>"
+          "documentation":"<p>A description of the voice contact that appears in the agent's snapshot in the CCP logs. For more information about CCP logs, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/download-ccp-logs.html\">Download and review CCP logs</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
         },
         "References":{
           "shape":"ContactReferences",
@@ -22727,6 +25086,10 @@
         "TrafficType":{
           "shape":"TrafficType",
           "documentation":"<p>Denotes the class of traffic. Calls with different traffic types are handled differently by Amazon Connect. The default value is <code>GENERAL</code>. Use <code>CAMPAIGN</code> if <code>EnableAnswerMachineDetection</code> is set to <code>true</code>. For all other cases, use <code>GENERAL</code>. </p>"
+        },
+        "OutboundStrategy":{
+          "shape":"OutboundStrategy",
+          "documentation":"<p>Information about the outbound strategy.</p>"
         }
       }
     },
@@ -22763,8 +25126,7 @@
     },
     "StartScreenSharingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartTaskContactRequest":{
       "type":"structure",
@@ -22902,6 +25264,28 @@
         }
       }
     },
+    "StateTransition":{
+      "type":"structure",
+      "members":{
+        "State":{
+          "shape":"ParticipantState",
+          "documentation":"<p>The state of the transition.</p>"
+        },
+        "StateStartTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the state started in UTC time.</p>"
+        },
+        "StateEndTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The date and time when the state ended in UTC time.</p>"
+        }
+      },
+      "documentation":"<p>Information about the state transition of a supervisor.</p>"
+    },
+    "StateTransitions":{
+      "type":"list",
+      "member":{"shape":"StateTransition"}
+    },
     "Statistic":{
       "type":"string",
       "enum":[
@@ -22910,6 +25294,14 @@
         "AVG"
       ]
     },
+    "Status":{
+      "type":"string",
+      "enum":[
+        "COMPLETE",
+        "IN_PROGRESS",
+        "DELETED"
+      ]
+    },
     "Step":{
       "type":"structure",
       "members":{
@@ -22960,8 +25352,7 @@
     },
     "StopContactRecordingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopContactRequest":{
       "type":"structure",
@@ -22980,14 +25371,13 @@
         },
         "DisconnectReason":{
           "shape":"DisconnectReason",
-          "documentation":"<p>The reason a contact can be disconnected. Only Amazon Connect outbound campaigns can provide this field.</p>"
+          "documentation":"<p>The reason a contact can be disconnected. Only Amazon Connect outbound campaigns can provide this field. For a list and description of all the possible disconnect reasons by channel (including outbound campaign voice contacts) see DisconnectReason under <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord\">ContactTraceRecord</a> in the <i>Amazon Connect Administrator Guide</i>. </p>"
         }
       }
     },
     "StopContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopContactStreamingRequest":{
       "type":"structure",
@@ -23013,8 +25403,7 @@
     },
     "StopContactStreamingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StorageType":{
       "type":"string",
@@ -23113,6 +25502,10 @@
         "Notes":{
           "shape":"EvaluationNotesMap",
           "documentation":"<p>A map of question identifiers to note value.</p>"
+        },
+        "SubmittedBy":{
+          "shape":"EvaluatorUserUnion",
+          "documentation":"<p>The ID of the user who submitted the contact evaluation.</p>"
         }
       }
     },
@@ -23193,8 +25586,7 @@
     },
     "SuspendContactRecordingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagAndConditionList":{
       "type":"list",
@@ -23238,8 +25630,7 @@
     },
     "TagContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagKey":{
       "type":"string",
@@ -23349,6 +25740,11 @@
       "type":"string",
       "enum":["PROFICIENCIES"]
     },
+    "TargetSlaMinutes":{
+      "type":"long",
+      "max":129600,
+      "min":1
+    },
     "TaskActionDefinition":{
       "type":"structure",
       "required":[
@@ -23517,6 +25913,20 @@
       "max":500,
       "min":1
     },
+    "TaskTemplateInfoV2":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"ARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the task template used to create this contact.</p>"
+        },
+        "Name":{
+          "shape":"TaskTemplateName",
+          "documentation":"<p>The name of the task template used to create this contact.</p>"
+        }
+      },
+      "documentation":"<p>Information about the task template used to create this contact.</p>"
+    },
     "TaskTemplateList":{
       "type":"list",
       "member":{"shape":"TaskTemplateMetadata"}
@@ -23958,8 +26368,7 @@
     },
     "UntagContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -24067,6 +26476,19 @@
         "PeriodicSessionDuration":{
           "shape":"AccessTokenDuration",
           "documentation":"<p>The short lived session duration configuration for users logged in to Amazon Connect, in minutes. This value determines the maximum possible time before an agent is authenticated. For more information, For more information on how to configure IP addresses, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/authentication-profiles.html#configure-session-timeouts\">Configure session timeouts</a> in the <i>Amazon Connect Administrator Guide</i>. </p>",
+          "box":true,
+          "deprecated":true,
+          "deprecatedMessage":"PeriodicSessionDuration is deprecated. Use SessionInactivityDuration instead.",
+          "deprecatedSince":"10/31/2025"
+        },
+        "SessionInactivityDuration":{
+          "shape":"InactivityDuration",
+          "documentation":"<p>The period, in minutes, before an agent is automatically signed out of the contact center when they go inactive.</p>",
+          "box":true
+        },
+        "SessionInactivityHandlingEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if automatic logout on user inactivity is enabled.</p>",
           "box":true
         }
       }
@@ -24100,14 +26522,13 @@
         },
         "Attributes":{
           "shape":"Attributes",
-          "documentation":"<p>The Amazon Connect attributes. These attributes can be accessed in flows just like any other contact attributes.</p> <p>You can have up to 32,768 UTF-8 bytes across all attributes for a contact. Attribute keys can include only alphanumeric, dash, and underscore characters.</p> <p>When the attributes for a contact exceed 32 KB, the contact is routed down the Error branch of the flow. As a mitigation, consider the following options:</p> <ul> <li> <p>Remove unnecessary attributes by setting their values to empty.</p> </li> <li> <p>If the attributes are only used in one flow and don't need to be referred to outside of that flow (for example, by a Lambda or another flow), then use flow attributes. This way you aren't needlessly persisting the 32 KB of information from one flow to another. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/set-contact-attributes.html\">Flow block: Set contact attributes</a> in the <i>Amazon Connect Administrator Guide</i>. </p> </li> </ul>"
+          "documentation":"<p>The Amazon Connect attributes. These attributes can be accessed in flows just like any other contact attributes.</p> <p>You can have up to 32,768 UTF-8 bytes across all attributes for a contact. Attribute keys can include only alphanumeric, dash, and underscore characters.</p> <p>In the <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/set-contact-attributes.html\">Set contact attributes</a> block, when the attributes for a contact exceed 32 KB, the contact is routed down the Error branch of the flow. As a mitigation, consider the following options:</p> <ul> <li> <p>Remove unnecessary attributes by setting their values to empty.</p> </li> <li> <p>If the attributes are only used in one flow and don't need to be referred to outside of that flow (for example, by a Lambda or another flow), then use flow attributes. This way you aren't needlessly persisting the 32 KB of information from one flow to another. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/set-contact-attributes.html\">Flow block: Set contact attributes</a> in the <i>Amazon Connect Administrator Guide</i>. </p> </li> </ul>"
         }
       }
     },
     "UpdateContactAttributesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactEvaluationRequest":{
       "type":"structure",
@@ -24135,6 +26556,10 @@
         "Notes":{
           "shape":"EvaluationNotesMap",
           "documentation":"<p>A map of question identifiers to note value.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"EvaluatorUserUnion",
+          "documentation":"<p>The ID of the user who updated the contact evaluation.</p>"
         }
       }
     },
@@ -24183,8 +26608,7 @@
     },
     "UpdateContactFlowContentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactFlowMetadataRequest":{
       "type":"structure",
@@ -24221,8 +26645,7 @@
     },
     "UpdateContactFlowMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactFlowModuleContentRequest":{
       "type":"structure",
@@ -24252,8 +26675,7 @@
     },
     "UpdateContactFlowModuleContentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactFlowModuleMetadataRequest":{
       "type":"structure",
@@ -24290,8 +26712,7 @@
     },
     "UpdateContactFlowModuleMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactFlowNameRequest":{
       "type":"structure",
@@ -24324,8 +26745,7 @@
     },
     "UpdateContactFlowNameResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactRequest":{
       "type":"structure",
@@ -24360,7 +26780,7 @@
         },
         "SegmentAttributes":{
           "shape":"SegmentAttributes",
-          "documentation":"<p>A set of system defined key-value pairs stored on individual contact segments (unique contact ID) using an attribute map. The attributes are standard Amazon Connect attributes. They can be accessed in flows.</p> <p>Attribute keys can include only alphanumeric, -, and _.</p> <p>This field can be used to show channel subtype, such as <code>connect:Guide</code>.</p> <p>Currently Contact Expiry is the only segment attribute which can be updated by using the UpdateContact API.</p>"
+          "documentation":"<p>A set of system defined key-value pairs stored on individual contact segments (unique contact ID) using an attribute map. The attributes are standard Amazon Connect attributes. They can be accessed in flows.</p> <p>Attribute keys can include only alphanumeric, -, and _.</p> <p>This field can be used to show channel subtype, such as <code>connect:Guide</code>.</p> <p>Contact Expiry, and user-defined attributes (String - String) that are defined in predefined attributes, can be updated by using the UpdateContact API.</p>"
         },
         "QueueInfo":{
           "shape":"QueueInfoInput",
@@ -24382,8 +26802,7 @@
     },
     "UpdateContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactRoutingDataRequest":{
       "type":"structure",
@@ -24420,8 +26839,7 @@
     },
     "UpdateContactRoutingDataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactScheduleRequest":{
       "type":"structure",
@@ -24447,8 +26865,7 @@
     },
     "UpdateContactScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEmailAddressMetadataRequest":{
       "type":"structure",
@@ -24543,6 +26960,10 @@
           "shape":"EvaluationFormScoringStrategy",
           "documentation":"<p>A scoring strategy of the evaluation form.</p>"
         },
+        "AutoEvaluationConfiguration":{
+          "shape":"EvaluationFormAutoEvaluationConfiguration",
+          "documentation":"<p>Whether automated evaluations are enabled.</p>"
+        },
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
@@ -24621,7 +27042,7 @@
         },
         "EffectiveTill":{
           "shape":"HoursOfOperationOverrideYearMonthDayDateFormat",
-          "documentation":"<p>The date till when the hours of operation override would be effective.</p>"
+          "documentation":"<p>The date until the hours of operation override is effective.</p>"
         }
       }
     },
@@ -24685,6 +27106,11 @@
         "Value":{
           "shape":"InstanceAttributeValue",
           "documentation":"<p>The value for the attribute. Maximum character limit is 100. </p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -24715,7 +27141,12 @@
           "location":"querystring",
           "locationName":"resourceType"
         },
-        "StorageConfig":{"shape":"InstanceStorageConfig"}
+        "StorageConfig":{"shape":"InstanceStorageConfig"},
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
+        }
       }
     },
     "UpdateParticipantAuthenticationRequest":{
@@ -24749,8 +27180,7 @@
     },
     "UpdateParticipantAuthenticationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateParticipantRoleConfigChannelInfo":{
       "type":"structure",
@@ -24791,8 +27221,7 @@
     },
     "UpdateParticipantRoleConfigResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePhoneNumberMetadataRequest":{
       "type":"structure",
@@ -24875,6 +27304,14 @@
         "Values":{
           "shape":"PredefinedAttributeValues",
           "documentation":"<p>The values of the predefined attribute.</p>"
+        },
+        "Purposes":{
+          "shape":"PredefinedAttributePurposeNameList",
+          "documentation":"<p>Values that enable you to categorize your predefined attributes. You can use them in custom UI elements across the Amazon Connect admin website.</p>"
+        },
+        "AttributeConfiguration":{
+          "shape":"InputPredefinedAttributeConfiguration",
+          "documentation":"<p>Custom metadata that is associated to predefined attributes to control behavior in upstream services, such as controlling how a predefined attribute should be displayed in the Amazon Connect admin website.</p>"
         }
       }
     },
@@ -25502,8 +27939,7 @@
     },
     "UpdateTrafficDistributionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateUserHierarchyGroupNameRequest":{
       "type":"structure",
@@ -25776,8 +28212,7 @@
     },
     "UpdateViewMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UploadUrlMetadata":{
       "type":"structure",
@@ -26112,6 +28547,11 @@
         "DeskPhoneNumber":{
           "shape":"PhoneNumber",
           "documentation":"<p>The phone number for the user's desk phone.</p>"
+        },
+        "PersistentConnection":{
+          "shape":"PersistentConnection",
+          "documentation":"<p>The persistent connection setting for the user.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Contains information about the phone configuration settings for a user.</p>"
@@ -26214,7 +28654,7 @@
         },
         "StringCondition":{
           "shape":"StringCondition",
-          "documentation":"<p>A leaf node condition which can be used to specify a string condition.</p> <p>The currently supported values for <code>FieldName</code> are <code>Username</code>, <code>FirstName</code>, <code>LastName</code>, <code>RoutingProfileId</code>, <code>SecurityProfileId</code>, <code>ResourceId</code>.</p>"
+          "documentation":"<p>A leaf node condition which can be used to specify a string condition.</p> <p>The currently supported values for <code>FieldName</code> are <code>Username</code>, <code>FirstName</code>, <code>LastName</code>, <code>RoutingProfileId</code>, <code>SecurityProfileId</code>, <code>resourceId</code>.</p>"
         },
         "ListCondition":{
           "shape":"ListCondition",
diff -pruN 2.23.6-1/awscli/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connect-contact-lens/2020-08-21/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connect-contact-lens/2020-08-21/service-2.json 2.31.35-1/awscli/botocore/data/connect-contact-lens/2020-08-21/service-2.json
--- 2.23.6-1/awscli/botocore/data/connect-contact-lens/2020-08-21/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connect-contact-lens/2020-08-21/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -353,8 +353,7 @@
         "ParticipantRole",
         "Content",
         "BeginOffsetMillis",
-        "EndOffsetMillis",
-        "Sentiment"
+        "EndOffsetMillis"
       ],
       "members":{
         "Id":{
diff -pruN 2.23.6-1/awscli/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcampaigns/2021-01-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/service-2.json 2.31.35-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcampaignsv2/2024-04-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -231,6 +231,23 @@
       ],
       "documentation":"<p>Get the specific Connect instance config.</p>"
     },
+    "GetInstanceCommunicationLimits":{
+      "name":"GetInstanceCommunicationLimits",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v2/connect-instance/{connectInstanceId}/communication-limits",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInstanceCommunicationLimitsRequest"},
+      "output":{"shape":"GetInstanceCommunicationLimitsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Get the instance communication limits.</p>"
+    },
     "GetInstanceOnboardingJobStatus":{
       "name":"GetInstanceOnboardingJobStatus",
       "http":{
@@ -338,6 +355,24 @@
       "documentation":"<p>Put or update the integration for the specified Amazon Connect instance.</p>",
       "idempotent":true
     },
+    "PutInstanceCommunicationLimits":{
+      "name":"PutInstanceCommunicationLimits",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v2/connect-instance/{connectInstanceId}/communication-limits",
+        "responseCode":200
+      },
+      "input":{"shape":"PutInstanceCommunicationLimitsRequest"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Put the instance communication limits. This API is idempotent.</p>",
+      "idempotent":true
+    },
     "PutOutboundRequestBatch":{
       "name":"PutOutboundRequestBatch",
       "http":{
@@ -644,6 +679,16 @@
       },
       "exception":true
     },
+    "AgentAction":{
+      "type":"string",
+      "documentation":"<p>Actions that can performed on a contact by an agent</p>",
+      "enum":["DISCARD"]
+    },
+    "AgentActions":{
+      "type":"list",
+      "member":{"shape":"AgentAction"},
+      "documentation":"<p>Actions that can be performed by agent during preview phase.</p>"
+    },
     "AgentlessConfig":{
       "type":"structure",
       "members":{
@@ -753,8 +798,8 @@
       "type":"string",
       "documentation":"<p>Identifier representing a Campaign</p>",
       "max":256,
-      "min":0,
-      "pattern":"[a-zA-Z0-9\\-:/]*"
+      "min":1,
+      "pattern":"[-:/a-zA-Z0-9]+"
     },
     "CampaignName":{
       "type":"string",
@@ -900,7 +945,8 @@
     "CommunicationLimitsConfig":{
       "type":"structure",
       "members":{
-        "allChannelSubtypes":{"shape":"CommunicationLimits"}
+        "allChannelSubtypes":{"shape":"CommunicationLimits"},
+        "instanceLimitsHandling":{"shape":"InstanceLimitsHandling"}
       },
       "documentation":"<p>Communication limits config</p>"
     },
@@ -1181,8 +1227,8 @@
       "type":"string",
       "documentation":"<p>Identifier representing a Dial request</p>",
       "max":256,
-      "min":0,
-      "pattern":"[a-zA-Z0-9_\\-.]*"
+      "min":1,
+      "pattern":"[-_.a-zA-Z0-9]+"
     },
     "EmailAddress":{
       "type":"string",
@@ -1415,6 +1461,25 @@
       },
       "documentation":"<p>The response for GetConnectInstanceConfig API.</p>"
     },
+    "GetInstanceCommunicationLimitsRequest":{
+      "type":"structure",
+      "required":["connectInstanceId"],
+      "members":{
+        "connectInstanceId":{
+          "shape":"InstanceId",
+          "location":"uri",
+          "locationName":"connectInstanceId"
+        }
+      },
+      "documentation":"<p>The request for GetInstanceCommunicationLimits API.</p>"
+    },
+    "GetInstanceCommunicationLimitsResponse":{
+      "type":"structure",
+      "members":{
+        "communicationLimitsConfig":{"shape":"InstanceCommunicationLimitsConfig"}
+      },
+      "documentation":"<p>The response for GetInstanceCommunicationLimits API.</p>"
+    },
     "GetInstanceOnboardingJobStatusRequest":{
       "type":"structure",
       "required":["connectInstanceId"],
@@ -1434,6 +1499,13 @@
       },
       "documentation":"<p>The response for GetInstanceOnboardingJobStatus API.</p>"
     },
+    "InstanceCommunicationLimitsConfig":{
+      "type":"structure",
+      "members":{
+        "allChannelSubtypes":{"shape":"CommunicationLimits"}
+      },
+      "documentation":"<p>Instance Communication limits config</p>"
+    },
     "InstanceConfig":{
       "type":"structure",
       "required":[
@@ -1452,8 +1524,8 @@
       "type":"string",
       "documentation":"<p>Amazon Connect Instance Id</p>",
       "max":256,
-      "min":0,
-      "pattern":"[a-zA-Z0-9_\\-.]*"
+      "min":1,
+      "pattern":"[-_.a-zA-Z0-9]+"
     },
     "InstanceIdFilter":{
       "type":"structure",
@@ -1472,6 +1544,14 @@
       "documentation":"<p>Operators for Connect instance identifier filter</p>",
       "enum":["Eq"]
     },
+    "InstanceLimitsHandling":{
+      "type":"string",
+      "documentation":"<p>Instance limits handling</p>",
+      "enum":[
+        "OPT_IN",
+        "OPT_OUT"
+      ]
+    },
     "InstanceOnboardingJobFailureCode":{
       "type":"string",
       "documentation":"<p>Enumeration of the possible failure codes for instance onboarding job</p>",
@@ -1773,6 +1853,19 @@
       },
       "documentation":"<p>Predictive config</p>"
     },
+    "PreviewConfig":{
+      "type":"structure",
+      "required":[
+        "bandwidthAllocation",
+        "timeoutConfig"
+      ],
+      "members":{
+        "bandwidthAllocation":{"shape":"BandwidthAllocation"},
+        "timeoutConfig":{"shape":"TimeoutConfig"},
+        "agentActions":{"shape":"AgentActions"}
+      },
+      "documentation":"<p>Preview config</p>"
+    },
     "ProfileId":{
       "type":"string",
       "documentation":"<p>Identifier of the customer profile</p>",
@@ -1840,6 +1933,22 @@
       },
       "documentation":"<p>The request for PutConnectInstanceIntegration API.</p>"
     },
+    "PutInstanceCommunicationLimitsRequest":{
+      "type":"structure",
+      "required":[
+        "connectInstanceId",
+        "communicationLimitsConfig"
+      ],
+      "members":{
+        "connectInstanceId":{
+          "shape":"InstanceId",
+          "location":"uri",
+          "locationName":"connectInstanceId"
+        },
+        "communicationLimitsConfig":{"shape":"InstanceCommunicationLimitsConfig"}
+      },
+      "documentation":"<p>The request for PutInstanceCommunicationLimits API.</p>"
+    },
     "PutOutboundRequestBatchRequest":{
       "type":"structure",
       "required":[
@@ -2257,7 +2366,8 @@
       "members":{
         "progressive":{"shape":"ProgressiveConfig"},
         "predictive":{"shape":"PredictiveConfig"},
-        "agentless":{"shape":"AgentlessConfig"}
+        "agentless":{"shape":"AgentlessConfig"},
+        "preview":{"shape":"PreviewConfig"}
       },
       "documentation":"<p>Telephony Outbound Mode</p>",
       "union":true
@@ -2319,6 +2429,21 @@
       "min":0,
       "pattern":"[a-zA-Z0-9_\\-/]*"
     },
+    "TimeoutConfig":{
+      "type":"structure",
+      "required":["durationInSeconds"],
+      "members":{
+        "durationInSeconds":{"shape":"TimeoutDuration"}
+      },
+      "documentation":"<p>Timeout Config for preview contacts.</p>"
+    },
+    "TimeoutDuration":{
+      "type":"integer",
+      "documentation":"<p>Timeout duration for a preview contact in seconds.</p>",
+      "box":true,
+      "max":300,
+      "min":1
+    },
     "UntagResourceRequest":{
       "type":"structure",
       "required":[
diff -pruN 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/paginators-1.json 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "relatedItems"
+    },
+    "ListCaseRules": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "caseRules"
+    },
+    "SearchAllRelatedItems": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "relatedItems"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/service-2.json 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-10-03",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"cases",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"ConnectCases",
     "serviceFullName":"Amazon Connect Cases",
     "serviceId":"ConnectCases",
@@ -13,6 +14,25 @@
     "uid":"connectcases-2022-10-03"
   },
   "operations":{
+    "BatchGetCaseRule":{
+      "name":"BatchGetCaseRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{domainId}/rules-batch",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchGetCaseRuleRequest"},
+      "output":{"shape":"BatchGetCaseRuleResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Gets a batch of case rules. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "readonly":true
+    },
     "BatchGetField":{
       "name":"BatchGetField",
       "http":{
@@ -29,7 +49,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the description for the list of fields in the request parameters. </p>"
+      "documentation":"<p>Returns the description for the list of fields in the request parameters. </p>",
+      "readonly":true
     },
     "BatchPutFieldOptions":{
       "name":"BatchPutFieldOptions",
@@ -68,7 +89,28 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<note> <p>If you provide a value for <code>PerformedBy.UserArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">connect:DescribeUser</a> permission on the User ARN resource that you provide</p> </note> <pre><code> &lt;p&gt;Creates a case in the specified Cases domain. Case system and custom fields are taken as an array id/value pairs with a declared data types.&lt;/p&gt; &lt;p&gt;The following fields are required when creating a case:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt; &lt;code&gt;customer_id&lt;/code&gt; - You must provide the full customer profile ARN in this format: &lt;code&gt;arn:aws:profile:your_AWS_Region:your_AWS_account ID:domains/your_profiles_domain_name/profiles/profile_ID&lt;/code&gt; &lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt; &lt;code&gt;title&lt;/code&gt; &lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; </code></pre>",
+      "documentation":"<p><note> <p>If you provide a value for <code>PerformedBy.UserArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">connect:DescribeUser</a> permission on the User ARN resource that you provide</p> </note> <p>Creates a case in the specified Cases domain. Case system and custom fields are taken as an array id/value pairs with a declared data types.</p> <p>The following fields are required when creating a case:</p> <ul> <li> <p> <code>customer_id</code> - You must provide the full customer profile ARN in this format: <code>arn:aws:profile:your_AWS_Region:your_AWS_account ID:domains/your_profiles_domain_name/profiles/profile_ID</code> </p> </li> <li> <p> <code>title</code> </p> </li> </ul></p>",
+      "idempotent":true
+    },
+    "CreateCaseRule":{
+      "name":"CreateCaseRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{domainId}/case-rules",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateCaseRuleRequest"},
+      "output":{"shape":"CreateCaseRuleResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a new case rule. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
       "idempotent":true
     },
     "CreateDomain":{
@@ -88,7 +130,7 @@
         {"shape":"ConflictException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a domain, which is a container for all case data, such as cases, fields, templates and layouts. Each Amazon Connect instance can be associated with only one Cases domain.</p> <important> <p>This will not associate your connect instance to Cases domain. Instead, use the Amazon Connect <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateIntegrationAssociation.html\">CreateIntegrationAssociation</a> API. You need specific IAM permissions to successfully associate the Cases domain. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/required-permissions-iam-cases.html#onboard-cases-iam\">Onboard to Cases</a>.</p> <pre><code> &lt;/important&gt; </code></pre>",
+      "documentation":"<p>Creates a domain, which is a container for all case data, such as cases, fields, templates and layouts. Each Amazon Connect instance can be associated with only one Cases domain.</p> <important> <p>This will not associate your connect instance to Cases domain. Instead, use the Amazon Connect <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateIntegrationAssociation.html\">CreateIntegrationAssociation</a> API. You need specific IAM permissions to successfully associate the Cases domain. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/required-permissions-iam-cases.html#onboard-cases-iam\">Onboard to Cases</a>.</p> </important>",
       "idempotent":true
     },
     "CreateField":{
@@ -149,7 +191,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a related item (comments, tasks, and contacts) and associates it with a case.</p> <note> <ul> <li> <p>A Related Item is a resource that is associated with a case. It may or may not have an external identifier linking it to an external resource (for example, a <code>contactArn</code>). All Related Items have their own internal identifier, the <code>relatedItemArn</code>. Examples of related items include <code>comments</code> and <code>contacts</code>.</p> </li> <li> <p>If you provide a value for <code>performedBy.userArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">DescribeUser</a> permission on the ARN of the user that you provide.</p> </li> </ul> <pre><code> &lt;/note&gt; </code></pre>",
+      "documentation":"<p>Creates a related item (comments, tasks, and contacts) and associates it with a case.</p> <p>There's a quota for the number of fields allowed in a Custom type related item. See <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#cases-quotas\">Amazon Connect Cases quotas</a>.</p> <p> <b>Use cases</b> </p> <p>Following are examples of related items that you may want to associate with a case:</p> <ul> <li> <p>Related contacts, such as calls, chats, emails tasks</p> </li> <li> <p>Comments, for agent notes</p> </li> <li> <p>SLAs, to capture target resolution goals</p> </li> <li> <p>Cases, to capture related Amazon Connect Cases</p> </li> <li> <p>Files, such as policy documentation or customer-provided attachments</p> </li> <li> <p>Custom related items, which provide flexibility for you to define related items that such as bookings, orders, products, notices, and more</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>If you are associating a contact to a case by passing in <code>Contact</code> for a <code>type</code>, you must have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeContact.html\">DescribeContact</a> permission on the ARN of the contact that you provide in <code>content.contact.contactArn</code>.</p> </li> <li> <p>A Related Item is a resource that is associated with a case. It may or may not have an external identifier linking it to an external resource (for example, a <code>contactArn</code>). All Related Items have their own internal identifier, the <code>relatedItemArn</code>. Examples of related items include <code>comments</code> and <code>contacts</code>.</p> </li> <li> <p>If you provide a value for <code>performedBy.userArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">DescribeUser</a> permission on the ARN of the user that you provide.</p> </li> <li> <p>The <code>type</code> field is reserved for internal use only.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>",
       "idempotent":true
     },
     "CreateTemplate":{
@@ -170,7 +212,45 @@
         {"shape":"ConflictException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a template in the Cases domain. This template is used to define the case object model (that is, to define what data can be captured on cases) in a Cases domain. A template must have a unique name within a domain, and it must reference existing field IDs and layout IDs. Additionally, multiple fields with same IDs are not allowed within the same Template. A template can be either Active or Inactive, as indicated by its status. Inactive templates cannot be used to create cases.</p>",
+      "documentation":"<p>Creates a template in the Cases domain. This template is used to define the case object model (that is, to define what data can be captured on cases) in a Cases domain. A template must have a unique name within a domain, and it must reference existing field IDs and layout IDs. Additionally, multiple fields with same IDs are not allowed within the same Template. A template can be either Active or Inactive, as indicated by its status. Inactive templates cannot be used to create cases.</p> <p> Other template APIs are: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_DeleteTemplate.html\">DeleteTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_GetTemplate.html\">GetTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_ListTemplates.html\">ListTemplates</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_UpdateTemplate.html\">UpdateTemplate</a> </p> </li> </ul>",
+      "idempotent":true
+    },
+    "DeleteCase":{
+      "name":"DeleteCase",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/domains/{domainId}/cases/{caseId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCaseRequest"},
+      "output":{"shape":"DeleteCaseResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p> The DeleteCase API permanently deletes a case and all its associated resources from the cases data store. After a successful deletion, you cannot:</p> <ul> <li> <p>Retrieve related items</p> </li> <li> <p>Access audit history</p> </li> <li> <p>Perform any operations that require the CaseID</p> </li> </ul> <important> <p>This action is irreversible. After you delete a case, you cannot recover its data.</p> </important>",
+      "idempotent":true
+    },
+    "DeleteCaseRule":{
+      "name":"DeleteCaseRule",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/domains/{domainId}/case-rules/{caseRuleId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCaseRuleRequest"},
+      "output":{"shape":"DeleteCaseRuleResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes a case rule. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
       "idempotent":true
     },
     "DeleteDomain":{
@@ -190,7 +270,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Deletes a Cases domain.</p> <pre><code> &lt;note&gt; &lt;p&gt;After deleting your domain you must disassociate the deleted domain from your Amazon Connect instance with another API call before being able to use Cases again with this Amazon Connect instance. See &lt;a href=&quot;https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteIntegrationAssociation.html&quot;&gt;DeleteIntegrationAssociation&lt;/a&gt;.&lt;/p&gt; &lt;/note&gt; </code></pre>",
+      "documentation":"<p>Deletes a Cases domain.</p> <note> <p>After deleting your domain you must disassociate the deleted domain from your Amazon Connect instance with another API call before being able to use Cases again with this Amazon Connect instance. See <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteIntegrationAssociation.html\">DeleteIntegrationAssociation</a>.</p> </note>",
       "idempotent":true
     },
     "DeleteField":{
@@ -211,7 +291,7 @@
         {"shape":"ConflictException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Deletes a field from a cases template. You can delete up to 100 fields per domain.</p> <p>After a field is deleted:</p> <ul> <li> <p>You can still retrieve the field by calling <code>BatchGetField</code>.</p> </li> <li> <p>You cannot update a deleted field by calling <code>UpdateField</code>; it throws a <code>ValidationException</code>.</p> </li> <li> <p>Deleted fields are not included in the <code>ListFields</code> response.</p> </li> <li> <p>Calling <code>CreateCase</code> with a deleted field throws a <code>ValidationException</code> denoting which field IDs in the request have been deleted.</p> </li> <li> <p>Calling <code>GetCase</code> with a deleted field ID returns the deleted field's value if one exists.</p> </li> <li> <p>Calling <code>UpdateCase</code> with a deleted field ID throws a <code>ValidationException</code> if the case does not already contain a value for the deleted field. Otherwise it succeeds, allowing you to update or remove (using <code>emptyValue: {}</code>) the field's value from the case.</p> </li> <li> <p> <code>GetTemplate</code> does not return field IDs for deleted fields.</p> </li> <li> <p> <code>GetLayout</code> does not return field IDs for deleted fields.</p> </li> <li> <p>Calling <code>SearchCases</code> with the deleted field ID as a filter returns any cases that have a value for the deleted field that matches the filter criteria.</p> </li> <li> <p>Calling <code>SearchCases</code> with a <code>searchTerm</code> value that matches a deleted field's value on a case returns the case in the response.</p> </li> <li> <p>Calling <code>BatchPutFieldOptions</code> with a deleted field ID throw a <code>ValidationException</code>.</p> </li> <li> <p>Calling <code>GetCaseEventConfiguration</code> does not return field IDs for deleted fields.</p> </li> </ul>",
+      "documentation":"<p>Deletes a field from a cases template. You can delete up to 100 fields per domain.</p> <p>After a field is deleted:</p> <ul> <li> <p>You can still retrieve the field by calling <code>BatchGetField</code>.</p> </li> <li> <p>You cannot update a deleted field by calling <code>UpdateField</code>; it throws a <code>ValidationException</code>.</p> </li> <li> <p>Deleted fields are not included in the <code>ListFields</code> response.</p> </li> <li> <p>Calling <code>CreateCase</code> with a deleted field throws a <code>ValidationException</code> denoting which field identifiers in the request have been deleted.</p> </li> <li> <p>Calling <code>GetCase</code> with a deleted field identifier returns the deleted field's value if one exists.</p> </li> <li> <p>Calling <code>UpdateCase</code> with a deleted field ID throws a <code>ValidationException</code> if the case does not already contain a value for the deleted field. Otherwise it succeeds, allowing you to update or remove (using <code>emptyValue: {}</code>) the field's value from the case.</p> </li> <li> <p> <code>GetTemplate</code> does not return field IDs for deleted fields.</p> </li> <li> <p> <code>GetLayout</code> does not return field IDs for deleted fields.</p> </li> <li> <p>Calling <code>SearchCases</code> with the deleted field ID as a filter returns any cases that have a value for the deleted field that matches the filter criteria.</p> </li> <li> <p>Calling <code>SearchCases</code> with a <code>searchTerm</code> value that matches a deleted field's value on a case returns the case in the response.</p> </li> <li> <p>Calling <code>BatchPutFieldOptions</code> with a deleted field ID throw a <code>ValidationException</code>.</p> </li> <li> <p>Calling <code>GetCaseEventConfiguration</code> does not return field IDs for deleted fields.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteLayout":{
@@ -231,7 +311,26 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Deletes a layout from a cases template. You can delete up to 100 layouts per domain.</p> <pre><code> &lt;p&gt;After a layout is deleted:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;You can still retrieve the layout by calling &lt;code&gt;GetLayout&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;You cannot update a deleted layout by calling &lt;code&gt;UpdateLayout&lt;/code&gt;; it throws a &lt;code&gt;ValidationException&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;Deleted layouts are not included in the &lt;code&gt;ListLayouts&lt;/code&gt; response.&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; </code></pre>",
+      "documentation":"<p>Deletes a layout from a cases template. You can delete up to 100 layouts per domain.</p> <p>After a layout is deleted:</p> <ul> <li> <p>You can still retrieve the layout by calling <code>GetLayout</code>.</p> </li> <li> <p>You cannot update a deleted layout by calling <code>UpdateLayout</code>; it throws a <code>ValidationException</code>.</p> </li> <li> <p>Deleted layouts are not included in the <code>ListLayouts</code> response.</p> </li> </ul>",
+      "idempotent":true
+    },
+    "DeleteRelatedItem":{
+      "name":"DeleteRelatedItem",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/domains/{domainId}/cases/{caseId}/related-items/{relatedItemId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteRelatedItemRequest"},
+      "output":{"shape":"DeleteRelatedItemResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes the related item resource under a case.</p> <note> <p>This API cannot be used on a FILE type related attachment. To delete this type of file, use the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteAttachedFile.html\">DeleteAttachedFile</a> API</p> </note>",
       "idempotent":true
     },
     "DeleteTemplate":{
@@ -251,7 +350,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Deletes a cases template. You can delete up to 100 templates per domain.</p> <pre><code> &lt;p&gt;After a cases template is deleted:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;You can still retrieve the template by calling &lt;code&gt;GetTemplate&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;You cannot update the template. &lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;You cannot create a case by using the deleted template.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;Deleted templates are not included in the &lt;code&gt;ListTemplates&lt;/code&gt; response.&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; </code></pre>",
+      "documentation":"<p>Deletes a cases template. You can delete up to 100 templates per domain.</p> <p>After a cases template is deleted:</p> <ul> <li> <p>You can still retrieve the template by calling <code>GetTemplate</code>.</p> </li> <li> <p>You cannot update the template. </p> </li> <li> <p>You cannot create a case by using the deleted template.</p> </li> <li> <p>Deleted templates are not included in the <code>ListTemplates</code> response.</p> </li> </ul>",
       "idempotent":true
     },
     "GetCase":{
@@ -270,7 +369,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns information about a specific case if it exists. </p>"
+      "documentation":"<p>Returns information about a specific case if it exists. </p>",
+      "readonly":true
     },
     "GetCaseAuditEvents":{
       "name":"GetCaseAuditEvents",
@@ -288,7 +388,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the audit history about a specific case if it exists.</p>"
+      "documentation":"<p>Returns the audit history about a specific case if it exists.</p>",
+      "readonly":true
     },
     "GetCaseEventConfiguration":{
       "name":"GetCaseEventConfiguration",
@@ -306,7 +407,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the case event publishing configuration.</p>"
+      "documentation":"<p>Returns the case event publishing configuration.</p>",
+      "readonly":true
     },
     "GetDomain":{
       "name":"GetDomain",
@@ -324,7 +426,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns information about a specific domain if it exists. </p>"
+      "documentation":"<p>Returns information about a specific domain if it exists. </p>",
+      "readonly":true
     },
     "GetLayout":{
       "name":"GetLayout",
@@ -342,7 +445,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the details for the requested layout.</p>"
+      "documentation":"<p>Returns the details for the requested layout.</p>",
+      "readonly":true
     },
     "GetTemplate":{
       "name":"GetTemplate",
@@ -360,7 +464,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns the details for the requested template. </p>"
+      "documentation":"<p>Returns the details for the requested template. Other template APIs are: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_CreateTemplate.html\">CreateTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_DeleteTemplate.html\">DeleteTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_ListTemplates.html\">ListTemplates</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_UpdateTemplate.html\">UpdateTemplate</a> </p> </li> </ul>",
+      "readonly":true
+    },
+    "ListCaseRules":{
+      "name":"ListCaseRules",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{domainId}/rules-list/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCaseRulesRequest"},
+      "output":{"shape":"ListCaseRulesResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all case rules in a Cases domain. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "readonly":true
     },
     "ListCasesForContact":{
       "name":"ListCasesForContact",
@@ -378,7 +502,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists cases for a given contact.</p>"
+      "documentation":"<p>Lists cases for a given contact.</p>",
+      "readonly":true
     },
     "ListDomains":{
       "name":"ListDomains",
@@ -395,7 +520,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all cases domains in the Amazon Web Services account. Each list item is a condensed summary object of the domain.</p>"
+      "documentation":"<p>Lists all cases domains in the Amazon Web Services account. Each list item is a condensed summary object of the domain.</p>",
+      "readonly":true
     },
     "ListFieldOptions":{
       "name":"ListFieldOptions",
@@ -413,7 +539,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all of the field options for a field identifier in the domain. </p>"
+      "documentation":"<p>Lists all of the field options for a field identifier in the domain. </p>",
+      "readonly":true
     },
     "ListFields":{
       "name":"ListFields",
@@ -431,7 +558,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all fields in a Cases domain.</p>"
+      "documentation":"<p>Lists all fields in a Cases domain.</p>",
+      "readonly":true
     },
     "ListLayouts":{
       "name":"ListLayouts",
@@ -449,7 +577,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all layouts in the given cases domain. Each list item is a condensed summary object of the layout.</p>"
+      "documentation":"<p>Lists all layouts in the given cases domain. Each list item is a condensed summary object of the layout.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -486,7 +615,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all of the templates in a Cases domain. Each list item is a condensed summary object of the template. </p>"
+      "documentation":"<p>Lists all of the templates in a Cases domain. Each list item is a condensed summary object of the template. </p> <p> Other template APIs are: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_CreateTemplate.html\">CreateTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_DeleteTemplate.html\">DeleteTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_GetTemplate.html\">GetTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_UpdateTemplate.html\">UpdateTemplate</a> </p> </li> </ul>",
+      "readonly":true
     },
     "PutCaseEventConfiguration":{
       "name":"PutCaseEventConfiguration",
@@ -502,10 +632,30 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Adds case event publishing configuration. For a complete list of fields you can add to the event message, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-fields.html\">Create case fields</a> in the <i>Amazon Connect Administrator Guide</i> </p>"
     },
+    "SearchAllRelatedItems":{
+      "name":"SearchAllRelatedItems",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{domainId}/related-items-search",
+        "responseCode":200
+      },
+      "input":{"shape":"SearchAllRelatedItemsRequest"},
+      "output":{"shape":"SearchAllRelatedItemsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Searches for related items across all cases within a domain. This is a global search operation that returns related items from multiple cases, unlike the case-specific <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_SearchRelatedItems.html\">SearchRelatedItems</a> API.</p> <p> <b>Use cases</b> </p> <p>Following are common uses cases for this API:</p> <ul> <li> <p>Find cases with similar issues across the domain. For example, search for all cases containing comments about \"product defect\" to identify patterns and existing solutions.</p> </li> <li> <p>Locate all cases associated with specific contacts or orders. For example, find all cases linked to a contactArn to understand the complete customer journey. </p> </li> <li> <p>Monitor SLA compliance across cases. For example, search for all cases with \"Active\" SLA status to prioritize remediation efforts.</p> </li> </ul> <p> <b>Important things to know</b> </p> <ul> <li> <p>This API returns case identifiers, not complete case objects. To retrieve full case details, you must make additional calls to the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_GetCase.html\">GetCase</a> API for each returned case ID. </p> </li> <li> <p>This API searches across related items content, not case fields. Use the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_SearchCases.html\">SearchCases</a> API to search within case field values.</p> </li> </ul> <p> <b>Endpoints</b>: See <a href=\"https://docs.aws.amazon.com/general/latest/gr/connect_region.html\">Amazon Connect endpoints and quotas</a>.</p>",
+      "readonly":true
+    },
     "SearchCases":{
       "name":"SearchCases",
       "http":{
@@ -522,7 +672,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Searches for cases within their associated Cases domain. Search results are returned as a paginated list of abridged case documents.</p> <note> <p>For <code>customer_id</code> you must provide the full customer profile ARN in this format: <code> arn:aws:profile:your AWS Region:your AWS account ID:domains/profiles domain name/profiles/profile ID</code>. </p> </note>"
+      "documentation":"<p>Searches for cases within their associated Cases domain. Search results are returned as a paginated list of abridged case documents.</p> <note> <p>For <code>customer_id</code> you must provide the full customer profile ARN in this format: <code> arn:aws:profile:your AWS Region:your AWS account ID:domains/profiles domain name/profiles/profile ID</code>. </p> </note>",
+      "readonly":true
     },
     "SearchRelatedItems":{
       "name":"SearchRelatedItems",
@@ -540,7 +691,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Searches for related items that are associated with a case.</p> <note> <p>If no filters are provided, this returns all related items associated with a case.</p> </note>"
+      "documentation":"<p>Searches for related items that are associated with a case.</p> <note> <p>If no filters are provided, this returns all related items associated with a case.</p> </note>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -594,7 +746,28 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<note> <p>If you provide a value for <code>PerformedBy.UserArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">connect:DescribeUser</a> permission on the User ARN resource that you provide</p> </note> <pre><code> &lt;p&gt;Updates the values of fields on a case. Fields to be updated are received as an array of id/value pairs identical to the &lt;code&gt;CreateCase&lt;/code&gt; input .&lt;/p&gt; &lt;p&gt;If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.&lt;/p&gt; </code></pre>"
+      "documentation":"<p><note> <p>If you provide a value for <code>PerformedBy.UserArn</code> you must also have <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeUser.html\">connect:DescribeUser</a> permission on the User ARN resource that you provide</p> </note> <p>Updates the values of fields on a case. Fields to be updated are received as an array of id/value pairs identical to the <code>CreateCase</code> input .</p> <p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p></p>"
+    },
+    "UpdateCaseRule":{
+      "name":"UpdateCaseRule",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/domains/{domainId}/case-rules/{caseRuleId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateCaseRuleRequest"},
+      "output":{"shape":"UpdateCaseRuleResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Updates a case rule. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "idempotent":true
     },
     "UpdateField":{
       "name":"UpdateField",
@@ -652,9 +825,10 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Updates the attributes of an existing template. The template attributes that can be modified include <code>name</code>, <code>description</code>, <code>layoutConfiguration</code>, <code>requiredFields</code>, and <code>status</code>. At least one of these attributes must not be null. If a null value is provided for a given attribute, that attribute is ignored and its current value is preserved.</p>",
+      "documentation":"<p>Updates the attributes of an existing template. The template attributes that can be modified include <code>name</code>, <code>description</code>, <code>layoutConfiguration</code>, <code>requiredFields</code>, and <code>status</code>. At least one of these attributes must not be null. If a null value is provided for a given attribute, that attribute is ignored and its current value is preserved.</p> <p>Other template APIs are:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_CreateTemplate.html\">CreateTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_DeleteTemplate.html\">DeleteTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_GetTemplate.html\">GetTemplate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_ListTemplates.html\">ListTemplates</a> </p> </li> </ul>",
       "idempotent":true
     }
   },
@@ -685,34 +859,34 @@
       "type":"structure",
       "required":[
         "eventId",
-        "fields",
+        "type",
         "performedTime",
-        "type"
+        "fields"
       ],
       "members":{
         "eventId":{
           "shape":"AuditEventId",
           "documentation":"<p>Unique identifier of a case audit history event.</p>"
         },
-        "fields":{
-          "shape":"AuditEventFieldList",
-          "documentation":"<p>A list of Case Audit History event fields.</p>"
+        "type":{
+          "shape":"AuditEventType",
+          "documentation":"<p>The Type of an audit history event.</p>"
         },
-        "performedBy":{
-          "shape":"AuditEventPerformedBy",
-          "documentation":"<p>Information of the user which performed the audit.</p>"
+        "relatedItemType":{
+          "shape":"RelatedItemType",
+          "documentation":"<p>The Type of the related item.</p>"
         },
         "performedTime":{
           "shape":"AuditEventDateTime",
           "documentation":"<p>Time at which an Audit History event took place.</p>"
         },
-        "relatedItemType":{
-          "shape":"RelatedItemType",
-          "documentation":"<p>The Type of the related item.</p>"
+        "fields":{
+          "shape":"AuditEventFieldList",
+          "documentation":"<p>A list of Case Audit History event fields.</p>"
         },
-        "type":{
-          "shape":"AuditEventType",
-          "documentation":"<p>The Type of an audit history event.</p>"
+        "performedBy":{
+          "shape":"AuditEventPerformedBy",
+          "documentation":"<p>Information of the user which performed the audit.</p>"
         }
       },
       "documentation":"<p>Represents the content of a particular audit event.</p>"
@@ -732,11 +906,11 @@
           "shape":"AuditEventFieldId",
           "documentation":"<p>Unique identifier of field in an Audit History entry.</p>"
         },
-        "newValue":{
+        "oldValue":{
           "shape":"AuditEventFieldValueUnion",
           "documentation":"<p>Union of potential field value types.</p>"
         },
-        "oldValue":{
+        "newValue":{
           "shape":"AuditEventFieldValueUnion",
           "documentation":"<p>Union of potential field value types.</p>"
         }
@@ -755,19 +929,19 @@
     "AuditEventFieldValueUnion":{
       "type":"structure",
       "members":{
-        "booleanValue":{
-          "shape":"Boolean",
-          "documentation":"<p>Can be either null, or have a Boolean value type. Only one value can be provided.</p>"
+        "stringValue":{
+          "shape":"AuditEventFieldValueUnionStringValueString",
+          "documentation":"<p>Can be either null, or have a String value type. Only one value can be provided.</p>"
         },
         "doubleValue":{
           "shape":"Double",
           "documentation":"<p>Can be either null, or have a Double value type. Only one value can be provided.</p>"
         },
-        "emptyValue":{"shape":"EmptyFieldValue"},
-        "stringValue":{
-          "shape":"AuditEventFieldValueUnionStringValueString",
-          "documentation":"<p>Can be either null, or have a String value type. Only one value can be provided.</p>"
+        "booleanValue":{
+          "shape":"Boolean",
+          "documentation":"<p>Can be either null, or have a Boolean value type. Only one value can be provided.</p>"
         },
+        "emptyValue":{"shape":"EmptyFieldValue"},
         "userArnValue":{
           "shape":"String",
           "documentation":"<p>Can be either null, or have a String value type formatted as an ARN. Only one value can be provided.</p>"
@@ -790,11 +964,11 @@
       "type":"structure",
       "required":["iamPrincipalArn"],
       "members":{
+        "user":{"shape":"UserUnion"},
         "iamPrincipalArn":{
           "shape":"IamPrincipalArn",
           "documentation":"<p>Unique identifier of an IAM role.</p>"
-        },
-        "user":{"shape":"UserUnion"}
+        }
       },
       "documentation":"<p>Information of the user which performed the audit.</p>"
     },
@@ -809,17 +983,75 @@
     "BasicLayout":{
       "type":"structure",
       "members":{
-        "moreInfo":{
-          "shape":"LayoutSections",
-          "documentation":"<p>This represents sections in a tab of the page layout.</p>"
-        },
         "topPanel":{
           "shape":"LayoutSections",
           "documentation":"<p>This represents sections in a panel of the page layout.</p>"
+        },
+        "moreInfo":{
+          "shape":"LayoutSections",
+          "documentation":"<p>This represents sections in a tab of the page layout.</p>"
         }
       },
       "documentation":"<p>Content specific to <code>BasicLayout</code> type. It configures fields in the top panel and More Info tab of agent application. </p>"
     },
+    "BatchGetCaseRuleRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "caseRules"
+      ],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>Unique identifier of a Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "caseRules":{
+          "shape":"CaseRuleIdentifierList",
+          "documentation":"<p>A list of case rule identifiers.</p>"
+        }
+      }
+    },
+    "BatchGetCaseRuleResponse":{
+      "type":"structure",
+      "required":[
+        "caseRules",
+        "errors"
+      ],
+      "members":{
+        "caseRules":{
+          "shape":"BatchGetCaseRuleResponseCaseRulesList",
+          "documentation":"<p>A list of detailed case rule information.</p>"
+        },
+        "errors":{
+          "shape":"BatchGetCaseRuleResponseErrorsList",
+          "documentation":"<p>A list of case rule errors.</p>"
+        },
+        "unprocessedCaseRules":{
+          "shape":"BatchGetCaseRuleResponseUnprocessedCaseRulesList",
+          "documentation":"<p>A list of unprocessed case rule identifiers.</p>"
+        }
+      }
+    },
+    "BatchGetCaseRuleResponseCaseRulesList":{
+      "type":"list",
+      "member":{"shape":"GetCaseRuleResponse"},
+      "max":50,
+      "min":0
+    },
+    "BatchGetCaseRuleResponseErrorsList":{
+      "type":"list",
+      "member":{"shape":"CaseRuleError"},
+      "max":50,
+      "min":0
+    },
+    "BatchGetCaseRuleResponseUnprocessedCaseRulesList":{
+      "type":"list",
+      "member":{"shape":"CaseRuleId"},
+      "max":50,
+      "min":0
+    },
     "BatchGetFieldIdentifierList":{
       "type":"list",
       "member":{"shape":"FieldIdentifier"},
@@ -848,17 +1080,17 @@
     "BatchGetFieldResponse":{
       "type":"structure",
       "required":[
-        "errors",
-        "fields"
+        "fields",
+        "errors"
       ],
       "members":{
-        "errors":{
-          "shape":"BatchGetFieldResponseErrorsList",
-          "documentation":"<p>A list of field errors. </p>"
-        },
         "fields":{
           "shape":"BatchGetFieldResponseFieldsList",
           "documentation":"<p>A list of detailed field information. </p>"
+        },
+        "errors":{
+          "shape":"BatchGetFieldResponseErrorsList",
+          "documentation":"<p>A list of field errors. </p>"
         }
       }
     },
@@ -925,6 +1157,50 @@
       "type":"boolean",
       "box":true
     },
+    "BooleanCondition":{
+      "type":"structure",
+      "members":{
+        "equalTo":{
+          "shape":"BooleanOperands",
+          "documentation":"<p>Tests that operandOne is equal to operandTwo.</p>"
+        },
+        "notEqualTo":{
+          "shape":"BooleanOperands",
+          "documentation":"<p>Tests that operandOne is not equal to operandTwo.</p>"
+        }
+      },
+      "documentation":"<p>Boolean condition for a rule. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "union":true
+    },
+    "BooleanConditionList":{
+      "type":"list",
+      "member":{"shape":"BooleanCondition"},
+      "max":100,
+      "min":0
+    },
+    "BooleanOperands":{
+      "type":"structure",
+      "required":[
+        "operandOne",
+        "operandTwo",
+        "result"
+      ],
+      "members":{
+        "operandOne":{
+          "shape":"OperandOne",
+          "documentation":"<p>Represents the left hand operand in the condition.</p>"
+        },
+        "operandTwo":{
+          "shape":"OperandTwo",
+          "documentation":"<p>Represents the right hand operand in the condition.</p>"
+        },
+        "result":{
+          "shape":"Boolean",
+          "documentation":"<p>The value of the outer rule if the condition evaluates to true.</p>"
+        }
+      },
+      "documentation":"<p>Boolean operands for a condition. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
     "CaseArn":{
       "type":"string",
       "max":500,
@@ -950,15 +1226,15 @@
     "CaseFilter":{
       "type":"structure",
       "members":{
-        "andAll":{
-          "shape":"CaseFilterAndAllList",
-          "documentation":"<p>Provides \"and all\" filtering.</p>"
-        },
         "field":{
           "shape":"FieldFilter",
           "documentation":"<p>A list of fields to filter on.</p>"
         },
         "not":{"shape":"CaseFilter"},
+        "andAll":{
+          "shape":"CaseFilterAndAllList",
+          "documentation":"<p>Provides \"and all\" filtering.</p>"
+        },
         "orAll":{
           "shape":"CaseFilterOrAllList",
           "documentation":"<p>Provides \"or all\" filtering.</p>"
@@ -984,6 +1260,117 @@
       "max":500,
       "min":1
     },
+    "CaseRuleArn":{
+      "type":"string",
+      "max":500,
+      "min":1
+    },
+    "CaseRuleDescription":{
+      "type":"string",
+      "max":255,
+      "min":0
+    },
+    "CaseRuleDetails":{
+      "type":"structure",
+      "members":{
+        "required":{
+          "shape":"RequiredCaseRule",
+          "documentation":"<p>Required rule type, used to indicate whether a field is required.</p>"
+        },
+        "fieldOptions":{
+          "shape":"FieldOptionsCaseRule",
+          "documentation":"<p>Which options are available in a child field based on the selected value in a parent field.</p>"
+        },
+        "hidden":{
+          "shape":"HiddenCaseRule",
+          "documentation":"<p>Whether a field is visible, based on values in other fields.</p>"
+        }
+      },
+      "documentation":"<p>Represents what rule type should take place, under what conditions. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "union":true
+    },
+    "CaseRuleError":{
+      "type":"structure",
+      "required":[
+        "id",
+        "errorCode"
+      ],
+      "members":{
+        "id":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>The case rule identifier that caused the error.</p>"
+        },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>Error code from getting a case rule.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Error message from getting a case rule.</p>"
+        }
+      },
+      "documentation":"<p>Error for batch describe case rules API failure. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
+    "CaseRuleId":{
+      "type":"string",
+      "max":500,
+      "min":1
+    },
+    "CaseRuleIdentifier":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>"
+        }
+      },
+      "documentation":"<p>Object containing case rule identifier information.</p>"
+    },
+    "CaseRuleIdentifierList":{
+      "type":"list",
+      "member":{"shape":"CaseRuleIdentifier"},
+      "max":50,
+      "min":1
+    },
+    "CaseRuleName":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":".*[\\S]"
+    },
+    "CaseRuleSummary":{
+      "type":"structure",
+      "required":[
+        "caseRuleId",
+        "name",
+        "caseRuleArn",
+        "ruleType"
+      ],
+      "members":{
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>"
+        },
+        "name":{
+          "shape":"CaseRuleName",
+          "documentation":"<p>Name of the case rule.</p>"
+        },
+        "caseRuleArn":{
+          "shape":"CaseRuleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the case rule. </p>"
+        },
+        "ruleType":{
+          "shape":"RuleType",
+          "documentation":"<p>Possible types for a rule.</p>"
+        },
+        "description":{
+          "shape":"CaseRuleDescription",
+          "documentation":"<p>Description of a case rule.</p>"
+        }
+      },
+      "documentation":"<p>Summary information of this case rule. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
     "CaseSummary":{
       "type":"structure",
       "required":[
@@ -1009,7 +1396,7 @@
     },
     "CommentBody":{
       "type":"string",
-      "max":3000,
+      "max":15000,
       "min":1
     },
     "CommentBodyTextType":{
@@ -1036,8 +1423,7 @@
     },
     "CommentFilter":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A filter for related items of type <code>Comment</code>.</p>"
     },
     "ConflictException":{
@@ -1053,6 +1439,38 @@
       },
       "exception":true
     },
+    "ConnectCaseContent":{
+      "type":"structure",
+      "required":["caseId"],
+      "members":{
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of a <code>ConnectCase</code> type related item.</p>"
+    },
+    "ConnectCaseFilter":{
+      "type":"structure",
+      "members":{
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>"
+        }
+      },
+      "documentation":"<p>A filter for related items of type <code>ConnectCase</code>.</p>"
+    },
+    "ConnectCaseInputContent":{
+      "type":"structure",
+      "required":["caseId"],
+      "members":{
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of a <code>ConnectCase</code> related item.</p>"
+    },
     "ConnectedToSystemTime":{
       "type":"timestamp",
       "timestampFormat":"iso8601"
@@ -1076,11 +1494,15 @@
     "ContactContent":{
       "type":"structure",
       "required":[
+        "contactArn",
         "channel",
-        "connectedToSystemTime",
-        "contactArn"
+        "connectedToSystemTime"
       ],
       "members":{
+        "contactArn":{
+          "shape":"ContactArn",
+          "documentation":"<p>A unique identifier of a contact in Amazon Connect.</p>"
+        },
         "channel":{
           "shape":"Channel",
           "documentation":"<p>A list of channels to filter on for related items of type <code>Contact</code>.</p>"
@@ -1088,10 +1510,6 @@
         "connectedToSystemTime":{
           "shape":"ConnectedToSystemTime",
           "documentation":"<p>The difference between the <code>InitiationTimestamp</code> and the <code>DisconnectTimestamp</code> of the contact.</p>"
-        },
-        "contactArn":{
-          "shape":"ContactArn",
-          "documentation":"<p>A unique identifier of a contact in Amazon Connect.</p>"
         }
       },
       "documentation":"<p>An object that represents a content of an Amazon Connect contact object.</p>"
@@ -1120,30 +1538,30 @@
       "type":"structure",
       "required":[
         "domainId",
-        "fields",
-        "templateId"
+        "templateId",
+        "fields"
       ],
       "members":{
-        "clientToken":{
-          "shape":"CreateCaseRequestClientTokenString",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
-          "idempotencyToken":true
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>A unique identifier of a template.</p>"
+        },
         "fields":{
           "shape":"CreateCaseRequestFieldsList",
           "documentation":"<p>An array of objects with field ID (matching ListFields/DescribeField) and value union data.</p>"
         },
-        "performedBy":{"shape":"UserUnion"},
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>A unique identifier of a template.</p>"
-        }
+        "clientToken":{
+          "shape":"CreateCaseRequestClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
+        },
+        "performedBy":{"shape":"UserUnion"}
       }
     },
     "CreateCaseRequestClientTokenString":{
@@ -1160,17 +1578,62 @@
     "CreateCaseResponse":{
       "type":"structure",
       "required":[
-        "caseArn",
-        "caseId"
+        "caseId",
+        "caseArn"
       ],
       "members":{
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>"
+        },
         "caseArn":{
           "shape":"CaseArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the case.</p>"
+        }
+      }
+    },
+    "CreateCaseRuleRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "name",
+        "rule"
+      ],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>Unique identifier of a Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
         },
-        "caseId":{
-          "shape":"CaseId",
-          "documentation":"<p>A unique identifier of the case.</p>"
+        "name":{
+          "shape":"CaseRuleName",
+          "documentation":"<p>Name of the case rule.</p>"
+        },
+        "description":{
+          "shape":"CaseRuleDescription",
+          "documentation":"<p>The description of a case rule.</p>"
+        },
+        "rule":{
+          "shape":"CaseRuleDetails",
+          "documentation":"<p>Represents what rule type should take place, under what conditions.</p>"
+        }
+      }
+    },
+    "CreateCaseRuleResponse":{
+      "type":"structure",
+      "required":[
+        "caseRuleId",
+        "caseRuleArn"
+      ],
+      "members":{
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>"
+        },
+        "caseRuleArn":{
+          "shape":"CaseRuleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a case rule.</p>"
         }
       }
     },
@@ -1187,19 +1650,19 @@
     "CreateDomainResponse":{
       "type":"structure",
       "required":[
-        "domainArn",
         "domainId",
+        "domainArn",
         "domainStatus"
       ],
       "members":{
-        "domainArn":{
-          "shape":"DomainArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the Cases domain.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>"
         },
+        "domainArn":{
+          "shape":"DomainArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the Cases domain.</p>"
+        },
         "domainStatus":{
           "shape":"DomainStatus",
           "documentation":"<p>The status of the domain.</p>"
@@ -1214,10 +1677,6 @@
         "type"
       ],
       "members":{
-        "description":{
-          "shape":"FieldDescription",
-          "documentation":"<p>The description of the field.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
@@ -1231,38 +1690,38 @@
         "type":{
           "shape":"FieldType",
           "documentation":"<p>Defines the data type, some system constraints, and default display of the field.</p>"
+        },
+        "description":{
+          "shape":"FieldDescription",
+          "documentation":"<p>The description of the field.</p>"
         }
       }
     },
     "CreateFieldResponse":{
       "type":"structure",
       "required":[
-        "fieldArn",
-        "fieldId"
+        "fieldId",
+        "fieldArn"
       ],
       "members":{
-        "fieldArn":{
-          "shape":"FieldArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
-        },
         "fieldId":{
           "shape":"FieldId",
           "documentation":"<p>The unique identifier of a field.</p>"
+        },
+        "fieldArn":{
+          "shape":"FieldArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
         }
       }
     },
     "CreateLayoutRequest":{
       "type":"structure",
       "required":[
-        "content",
         "domainId",
-        "name"
+        "name",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"LayoutContent",
-          "documentation":"<p>Information about which fields will be present in the layout, and information about the order of the fields.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
@@ -1272,75 +1731,79 @@
         "name":{
           "shape":"LayoutName",
           "documentation":"<p>The name of the layout. It must be unique for the Cases domain.</p>"
+        },
+        "content":{
+          "shape":"LayoutContent",
+          "documentation":"<p>Information about which fields will be present in the layout, and information about the order of the fields.</p>"
         }
       }
     },
     "CreateLayoutResponse":{
       "type":"structure",
       "required":[
-        "layoutArn",
-        "layoutId"
+        "layoutId",
+        "layoutArn"
       ],
       "members":{
-        "layoutArn":{
-          "shape":"LayoutArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created layout.</p>"
-        },
         "layoutId":{
           "shape":"LayoutId",
           "documentation":"<p>The unique identifier of the layout.</p>"
+        },
+        "layoutArn":{
+          "shape":"LayoutArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created layout.</p>"
         }
       }
     },
     "CreateRelatedItemRequest":{
       "type":"structure",
       "required":[
-        "caseId",
-        "content",
         "domainId",
-        "type"
+        "caseId",
+        "type",
+        "content"
       ],
       "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The unique identifier of the Cases domain. </p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
         "caseId":{
           "shape":"CaseId",
           "documentation":"<p>A unique identifier of the case.</p>",
           "location":"uri",
           "locationName":"caseId"
         },
+        "type":{
+          "shape":"RelatedItemType",
+          "documentation":"<p>The type of a related item.</p>"
+        },
         "content":{
           "shape":"RelatedItemInputContent",
           "documentation":"<p>The content of a related item to be created.</p>"
         },
-        "domainId":{
-          "shape":"DomainId",
-          "documentation":"<p>The unique identifier of the Cases domain. </p>",
-          "location":"uri",
-          "locationName":"domainId"
-        },
         "performedBy":{
           "shape":"UserUnion",
           "documentation":"<p>Represents the creator of the related item.</p>"
-        },
-        "type":{
-          "shape":"RelatedItemType",
-          "documentation":"<p>The type of a related item.</p>"
         }
       }
     },
     "CreateRelatedItemResponse":{
       "type":"structure",
       "required":[
-        "relatedItemArn",
-        "relatedItemId"
+        "relatedItemId",
+        "relatedItemArn"
       ],
       "members":{
-        "relatedItemArn":{
-          "shape":"RelatedItemArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the related item.</p>"
-        },
         "relatedItemId":{
           "shape":"RelatedItemId",
           "documentation":"<p>The unique identifier of the related item.</p>"
+        },
+        "relatedItemArn":{
+          "shape":"RelatedItemArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the related item.</p>"
         }
       }
     },
@@ -1351,24 +1814,24 @@
         "name"
       ],
       "members":{
-        "description":{
-          "shape":"TemplateDescription",
-          "documentation":"<p>A brief description of the template.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
-        "layoutConfiguration":{
-          "shape":"LayoutConfiguration",
-          "documentation":"<p>Configuration of layouts associated to the template.</p>"
-        },
         "name":{
           "shape":"TemplateName",
           "documentation":"<p>A name for the template. It must be unique per domain.</p>"
         },
+        "description":{
+          "shape":"TemplateDescription",
+          "documentation":"<p>A brief description of the template.</p>"
+        },
+        "layoutConfiguration":{
+          "shape":"LayoutConfiguration",
+          "documentation":"<p>Configuration of layouts associated to the template.</p>"
+        },
         "requiredFields":{
           "shape":"RequiredFieldList",
           "documentation":"<p>A list of fields that must contain a value for a case to be successfully created with this template.</p>"
@@ -1376,23 +1839,27 @@
         "status":{
           "shape":"TemplateStatus",
           "documentation":"<p>The status of the template.</p>"
+        },
+        "rules":{
+          "shape":"TemplateCaseRuleList",
+          "documentation":"<p>A list of case rules (also known as <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">case field conditions</a>) on a template. </p>"
         }
       }
     },
     "CreateTemplateResponse":{
       "type":"structure",
       "required":[
-        "templateArn",
-        "templateId"
+        "templateId",
+        "templateArn"
       ],
       "members":{
-        "templateArn":{
-          "shape":"TemplateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created template.</p>"
-        },
         "templateId":{
           "shape":"TemplateId",
           "documentation":"<p>A unique identifier of a template.</p>"
+        },
+        "templateArn":{
+          "shape":"TemplateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created template.</p>"
         }
       }
     },
@@ -1400,6 +1867,133 @@
       "type":"timestamp",
       "timestampFormat":"iso8601"
     },
+    "CustomContent":{
+      "type":"structure",
+      "required":["fields"],
+      "members":{
+        "fields":{
+          "shape":"FieldValueList",
+          "documentation":"<p>List of field values for the <code>Custom</code> related item.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of a <code>Custom</code> type related item.</p>"
+    },
+    "CustomEntity":{
+      "type":"string",
+      "max":500,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_\\-\\.@:/ ]*[a-zA-Z0-9_\\-\\.@:/]",
+      "sensitive":true
+    },
+    "CustomFieldsFilter":{
+      "type":"structure",
+      "members":{
+        "field":{"shape":"FieldFilter"},
+        "not":{
+          "shape":"CustomFieldsFilter",
+          "documentation":"<p>Excludes items matching the filter.</p>"
+        },
+        "andAll":{
+          "shape":"CustomFieldsFilterAndAllList",
+          "documentation":"<p>Provides \"and all\" filtering.</p>"
+        },
+        "orAll":{
+          "shape":"CustomFieldsFilterOrAllList",
+          "documentation":"<p>Provides \"or all\" filtering.</p>"
+        }
+      },
+      "documentation":"<p>A filter for fields in <code>Custom</code> type related items. Only one value can be provided.</p>",
+      "union":true
+    },
+    "CustomFieldsFilterAndAllList":{
+      "type":"list",
+      "member":{"shape":"CustomFieldsFilter"},
+      "max":10,
+      "min":0
+    },
+    "CustomFieldsFilterOrAllList":{
+      "type":"list",
+      "member":{"shape":"CustomFieldsFilter"},
+      "max":10,
+      "min":0
+    },
+    "CustomFilter":{
+      "type":"structure",
+      "members":{
+        "fields":{
+          "shape":"CustomFieldsFilter",
+          "documentation":"<p>Filter conditions for custom fields.</p>"
+        }
+      },
+      "documentation":"<p>A filter for related items of type <code>Custom</code>.</p>"
+    },
+    "CustomInputContent":{
+      "type":"structure",
+      "required":["fields"],
+      "members":{
+        "fields":{
+          "shape":"CustomInputContentFieldsList",
+          "documentation":"<p>List of field values for the <code>Custom</code> related item.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of a <code>Custom</code> related item.</p>"
+    },
+    "CustomInputContentFieldsList":{
+      "type":"list",
+      "member":{"shape":"FieldValue"},
+      "max":50,
+      "min":1
+    },
+    "DeleteCaseRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "caseId"
+      ],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>A unique identifier of the Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>",
+          "location":"uri",
+          "locationName":"caseId"
+        }
+      }
+    },
+    "DeleteCaseResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteCaseRuleRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "caseRuleId"
+      ],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>Unique identifier of a Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>",
+          "location":"uri",
+          "locationName":"caseRuleId"
+        }
+      }
+    },
+    "DeleteCaseRuleResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteDomainRequest":{
       "type":"structure",
       "required":["domainId"],
@@ -1414,8 +2008,7 @@
     },
     "DeleteDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFieldRequest":{
       "type":"structure",
@@ -1440,8 +2033,7 @@
     },
     "DeleteFieldResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLayoutRequest":{
       "type":"structure",
@@ -1466,9 +2058,40 @@
     },
     "DeleteLayoutResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteRelatedItemRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "caseId",
+        "relatedItemId"
+      ],
       "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>A unique identifier of the Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>",
+          "location":"uri",
+          "locationName":"caseId"
+        },
+        "relatedItemId":{
+          "shape":"RelatedItemId",
+          "documentation":"<p>A unique identifier of a related item.</p>",
+          "location":"uri",
+          "locationName":"relatedItemId"
+        }
       }
     },
+    "DeleteRelatedItemResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteTemplateRequest":{
       "type":"structure",
       "required":[
@@ -1492,8 +2115,7 @@
     },
     "DeleteTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Deleted":{"type":"boolean"},
     "DomainArn":{
@@ -1510,7 +2132,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
     },
     "DomainStatus":{
       "type":"string",
@@ -1523,19 +2145,19 @@
     "DomainSummary":{
       "type":"structure",
       "required":[
-        "domainArn",
         "domainId",
+        "domainArn",
         "name"
       ],
       "members":{
-        "domainArn":{
-          "shape":"DomainArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the domain.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the domain.</p>"
         },
+        "domainArn":{
+          "shape":"DomainArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the domain.</p>"
+        },
         "name":{
           "shape":"DomainName",
           "documentation":"<p>The name of the domain.</p>"
@@ -1553,10 +2175,14 @@
     },
     "EmptyFieldValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty value. You cannot set <code>EmptyFieldValue</code> on a field that is required on a case template.</p> <p>This structure will never have any data members. It signifies an empty value on a case field.</p>"
     },
+    "EmptyOperandValue":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Represents an empty operand value. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
     "EventBridgeConfiguration":{
       "type":"structure",
       "required":["enabled"],
@@ -1599,18 +2225,18 @@
     "FieldError":{
       "type":"structure",
       "required":[
-        "errorCode",
-        "id"
+        "id",
+        "errorCode"
       ],
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code from getting a field.</p>"
-        },
         "id":{
           "shape":"FieldId",
           "documentation":"<p>The field identifier that caused the error.</p>"
         },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>The error code from getting a field.</p>"
+        },
         "message":{
           "shape":"String",
           "documentation":"<p>The error message from getting a field.</p>"
@@ -1621,11 +2247,11 @@
     "FieldFilter":{
       "type":"structure",
       "members":{
-        "contains":{
+        "equalTo":{
           "shape":"FieldValue",
           "documentation":"<p>Object containing field identifier and value information.</p>"
         },
-        "equalTo":{
+        "contains":{
           "shape":"FieldValue",
           "documentation":"<p>Object containing field identifier and value information.</p>"
         },
@@ -1653,13 +2279,13 @@
       "type":"structure",
       "required":["fields"],
       "members":{
-        "fields":{
-          "shape":"FieldGroupFieldsList",
-          "documentation":"<p>Represents an ordered list containing field related information.</p>"
-        },
         "name":{
           "shape":"FieldGroupNameString",
           "documentation":"<p>Name of the field group.</p>"
+        },
+        "fields":{
+          "shape":"FieldGroupFieldsList",
+          "documentation":"<p>Represents an ordered list containing field related information.</p>"
         }
       },
       "documentation":"<p>Object for a group of fields and associated properties.</p>"
@@ -1706,7 +2332,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
     },
     "FieldNamespace":{
       "type":"string",
@@ -1718,15 +2344,11 @@
     "FieldOption":{
       "type":"structure",
       "required":[
-        "active",
         "name",
-        "value"
+        "value",
+        "active"
       ],
       "members":{
-        "active":{
-          "shape":"Boolean",
-          "documentation":"<p>Describes whether the <code>FieldOption</code> is active (displayed) or inactive.</p>"
-        },
         "name":{
           "shape":"FieldOptionName",
           "documentation":"<p> <code>FieldOptionName</code> has max length 100 and disallows trailing spaces.</p>"
@@ -1734,6 +2356,10 @@
         "value":{
           "shape":"FieldOptionValue",
           "documentation":"<p> <code>FieldOptionValue</code> has max length 100 and must be alphanumeric with hyphens and underscores.</p>"
+        },
+        "active":{
+          "shape":"Boolean",
+          "documentation":"<p>Describes whether the <code>FieldOption</code> is active (displayed) or inactive.</p>"
         }
       },
       "documentation":"<p>Object for field Options information.</p>"
@@ -1741,19 +2367,19 @@
     "FieldOptionError":{
       "type":"structure",
       "required":[
-        "errorCode",
         "message",
+        "errorCode",
         "value"
       ],
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>Error code from creating or updating field option.</p>"
-        },
         "message":{
           "shape":"String",
           "documentation":"<p>Error message from creating or updating field option.</p>"
         },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>Error code from creating or updating field option.</p>"
+        },
         "value":{
           "shape":"FieldOptionValue",
           "documentation":"<p>The field option value that caused the error.</p>"
@@ -1765,13 +2391,32 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
     },
     "FieldOptionValue":{
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
+    },
+    "FieldOptionsCaseRule":{
+      "type":"structure",
+      "required":["parentChildFieldOptionsMappings"],
+      "members":{
+        "parentFieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>The identifier of the parent field that controls options.</p>"
+        },
+        "childFieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>The identifier of the child field whose options are controlled.</p>"
+        },
+        "parentChildFieldOptionsMappings":{
+          "shape":"ParentChildFieldOptionsMappingList",
+          "documentation":"<p>A mapping between a parent field option value and child field option values.</p>"
+        }
+      },
+      "documentation":"<p>Rules that control which options are available in a child field based on the selected value in a parent field.</p>"
     },
     "FieldOptionsList":{
       "type":"list",
@@ -1780,32 +2425,32 @@
     "FieldSummary":{
       "type":"structure",
       "required":[
-        "fieldArn",
         "fieldId",
+        "fieldArn",
         "name",
-        "namespace",
-        "type"
+        "type",
+        "namespace"
       ],
       "members":{
-        "fieldArn":{
-          "shape":"FieldArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
-        },
         "fieldId":{
           "shape":"FieldId",
           "documentation":"<p>The unique identifier of a field.</p>"
         },
+        "fieldArn":{
+          "shape":"FieldArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
+        },
         "name":{
           "shape":"FieldName",
           "documentation":"<p>Name of the field.</p>"
         },
-        "namespace":{
-          "shape":"FieldNamespace",
-          "documentation":"<p>The namespace of a field.</p>"
-        },
         "type":{
           "shape":"FieldType",
           "documentation":"<p>The type of a field.</p>"
+        },
+        "namespace":{
+          "shape":"FieldNamespace",
+          "documentation":"<p>The namespace of a field.</p>"
         }
       },
       "documentation":"<p>Object for the summarized details of the field.</p>"
@@ -1840,36 +2485,40 @@
       },
       "documentation":"<p>Object for case field values.</p>"
     },
+    "FieldValueList":{
+      "type":"list",
+      "member":{"shape":"FieldValue"}
+    },
     "FieldValueUnion":{
       "type":"structure",
       "members":{
-        "booleanValue":{
-          "shape":"Boolean",
-          "documentation":"<p>Can be either null, or have a Boolean value type. Only one value can be provided.</p>"
+        "stringValue":{
+          "shape":"FieldValueUnionStringValueString",
+          "documentation":"<p>String value type.</p>"
         },
         "doubleValue":{
           "shape":"Double",
           "documentation":"<p>Can be either null, or have a Double number value type. Only one value can be provided.</p>"
         },
+        "booleanValue":{
+          "shape":"Boolean",
+          "documentation":"<p>Can be either null, or have a Boolean value type. Only one value can be provided.</p>"
+        },
         "emptyValue":{
           "shape":"EmptyFieldValue",
           "documentation":"<p>An empty value.</p>"
         },
-        "stringValue":{
-          "shape":"FieldValueUnionStringValueString",
-          "documentation":"<p>String value type.</p>"
-        },
         "userArnValue":{
           "shape":"String",
           "documentation":"<p>Represents the user that performed the audit.</p>"
         }
       },
-      "documentation":"<p>Object to store union of Field values.</p> <note> <p>The <code>Summary</code> system field accepts 1500 characters while all other fields accept 500 characters.</p> </note>",
+      "documentation":"<p>Object to store union of Field values.</p> <note> <p>The <code>Summary</code> system field accepts 3000 characters while all other fields accept 500 characters.</p> </note>",
       "union":true
     },
     "FieldValueUnionStringValueString":{
       "type":"string",
-      "max":1500,
+      "max":3000,
       "min":0
     },
     "FileArn":{
@@ -1919,7 +2568,7 @@
         },
         "maxResults":{
           "shape":"GetCaseAuditEventsRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of audit events to return. The current maximum supported value is 25. This is also the default when no other value is provided.</p>"
+          "documentation":"<p>The maximum number of audit events to return. When no value is provided, 25 is the default.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -1937,13 +2586,13 @@
       "type":"structure",
       "required":["auditEvents"],
       "members":{
-        "auditEvents":{
-          "shape":"GetCaseAuditEventsResponseAuditEventsList",
-          "documentation":"<p>A list of case audits where each represents a particular edit of the case.</p>"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
+        },
+        "auditEvents":{
+          "shape":"GetCaseAuditEventsResponseAuditEventsList",
+          "documentation":"<p>A list of case audits where each represents a particular edit of the case.</p>"
         }
       }
     },
@@ -2022,6 +2671,10 @@
           "shape":"GetCaseResponseFieldsList",
           "documentation":"<p>A list of detailed field information. </p>"
         },
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>A unique identifier of a template.</p>"
+        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
@@ -2029,10 +2682,6 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
-        },
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>A unique identifier of a template.</p>"
         }
       }
     },
@@ -2042,6 +2691,54 @@
       "max":100,
       "min":0
     },
+    "GetCaseRuleResponse":{
+      "type":"structure",
+      "required":[
+        "caseRuleId",
+        "name",
+        "caseRuleArn",
+        "rule"
+      ],
+      "members":{
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>"
+        },
+        "name":{
+          "shape":"CaseRuleName",
+          "documentation":"<p>Name of the case rule.</p>"
+        },
+        "caseRuleArn":{
+          "shape":"CaseRuleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the case rule.</p>"
+        },
+        "rule":{
+          "shape":"CaseRuleDetails",
+          "documentation":"<p>Represents what rule type should take place, under what conditions.</p>"
+        },
+        "description":{
+          "shape":"CaseRuleDescription",
+          "documentation":"<p>Description of a case rule.</p>"
+        },
+        "deleted":{
+          "shape":"Deleted",
+          "documentation":"<p>Indicates whether the resource has been deleted.</p>"
+        },
+        "createdTime":{
+          "shape":"CreatedTime",
+          "documentation":"<p>Timestamp when the resource was created.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"LastModifiedTime",
+          "documentation":"<p>Timestamp when the resource was created or last modified.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
+        }
+      },
+      "documentation":"<p>Detailed case rule information. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
     "GetDomainRequest":{
       "type":"structure",
       "required":["domainId"],
@@ -2057,33 +2754,33 @@
     "GetDomainResponse":{
       "type":"structure",
       "required":[
-        "createdTime",
-        "domainArn",
         "domainId",
-        "domainStatus",
-        "name"
+        "domainArn",
+        "name",
+        "createdTime",
+        "domainStatus"
       ],
       "members":{
-        "createdTime":{
-          "shape":"CreatedTime",
-          "documentation":"<p>The timestamp when the Cases domain was created.</p>"
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The unique identifier of the Cases domain. </p>"
         },
         "domainArn":{
           "shape":"DomainArn",
           "documentation":"<p>The Amazon Resource Name (ARN) for the Cases domain.</p>"
         },
-        "domainId":{
-          "shape":"DomainId",
-          "documentation":"<p>The unique identifier of the Cases domain. </p>"
+        "name":{
+          "shape":"DomainName",
+          "documentation":"<p>The name of the Cases domain.</p>"
+        },
+        "createdTime":{
+          "shape":"CreatedTime",
+          "documentation":"<p>The timestamp when the Cases domain was created.</p>"
         },
         "domainStatus":{
           "shape":"DomainStatus",
           "documentation":"<p>The status of the Cases domain.</p>"
         },
-        "name":{
-          "shape":"DomainName",
-          "documentation":"<p>The name of the Cases domain.</p>"
-        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
@@ -2093,41 +2790,33 @@
     "GetFieldResponse":{
       "type":"structure",
       "required":[
-        "fieldArn",
         "fieldId",
         "name",
-        "namespace",
-        "type"
+        "fieldArn",
+        "type",
+        "namespace"
       ],
       "members":{
-        "createdTime":{
-          "shape":"CreatedTime",
-          "documentation":"<p>Timestamp at which the resource was created.</p>"
-        },
-        "deleted":{
-          "shape":"Deleted",
-          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
-        },
-        "description":{
-          "shape":"FieldDescription",
-          "documentation":"<p>Description of the field.</p>"
-        },
-        "fieldArn":{
-          "shape":"FieldArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
-        },
         "fieldId":{
           "shape":"FieldId",
           "documentation":"<p>Unique identifier of the field.</p>"
         },
-        "lastModifiedTime":{
-          "shape":"LastModifiedTime",
-          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
-        },
         "name":{
           "shape":"FieldName",
           "documentation":"<p>Name of the field.</p>"
         },
+        "fieldArn":{
+          "shape":"FieldArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the field.</p>"
+        },
+        "description":{
+          "shape":"FieldDescription",
+          "documentation":"<p>Description of the field.</p>"
+        },
+        "type":{
+          "shape":"FieldType",
+          "documentation":"<p>Type of the field.</p>"
+        },
         "namespace":{
           "shape":"FieldNamespace",
           "documentation":"<p>Namespace of the field.</p>"
@@ -2136,9 +2825,17 @@
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
         },
-        "type":{
-          "shape":"FieldType",
-          "documentation":"<p>Type of the field.</p>"
+        "deleted":{
+          "shape":"Deleted",
+          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
+        },
+        "createdTime":{
+          "shape":"CreatedTime",
+          "documentation":"<p>Timestamp at which the resource was created.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"LastModifiedTime",
+          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
         }
       },
       "documentation":"<p>Object to store detailed field information.</p>"
@@ -2167,43 +2864,43 @@
     "GetLayoutResponse":{
       "type":"structure",
       "required":[
-        "content",
-        "layoutArn",
         "layoutId",
-        "name"
+        "layoutArn",
+        "name",
+        "content"
       ],
       "members":{
-        "content":{
-          "shape":"LayoutContent",
-          "documentation":"<p>Information about which fields will be present in the layout, the order of the fields, and read-only attribute of the field. </p>"
-        },
-        "createdTime":{
-          "shape":"CreatedTime",
-          "documentation":"<p>Timestamp at which the resource was created.</p>"
-        },
-        "deleted":{
-          "shape":"Deleted",
-          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
-        },
-        "lastModifiedTime":{
-          "shape":"LastModifiedTime",
-          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
+        "layoutId":{
+          "shape":"LayoutId",
+          "documentation":"<p>The unique identifier of the layout.</p>"
         },
         "layoutArn":{
           "shape":"LayoutArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the newly created layout.</p>"
         },
-        "layoutId":{
-          "shape":"LayoutId",
-          "documentation":"<p>The unique identifier of the layout.</p>"
-        },
         "name":{
           "shape":"LayoutName",
           "documentation":"<p>The name of the layout. It must be unique.</p>"
         },
+        "content":{
+          "shape":"LayoutContent",
+          "documentation":"<p>Information about which fields will be present in the layout, the order of the fields, and read-only attribute of the field. </p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
+        },
+        "deleted":{
+          "shape":"Deleted",
+          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
+        },
+        "createdTime":{
+          "shape":"CreatedTime",
+          "documentation":"<p>Timestamp at which the resource was created.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"LastModifiedTime",
+          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
         }
       }
     },
@@ -2231,58 +2928,80 @@
     "GetTemplateResponse":{
       "type":"structure",
       "required":[
-        "name",
-        "status",
+        "templateId",
         "templateArn",
-        "templateId"
+        "name",
+        "status"
       ],
       "members":{
-        "createdTime":{
-          "shape":"CreatedTime",
-          "documentation":"<p>Timestamp at which the resource was created.</p>"
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>A unique identifier of a template.</p>"
         },
-        "deleted":{
-          "shape":"Deleted",
-          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
+        "templateArn":{
+          "shape":"TemplateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the template.</p>"
+        },
+        "name":{
+          "shape":"TemplateName",
+          "documentation":"<p>The name of the template.</p>"
         },
         "description":{
           "shape":"TemplateDescription",
           "documentation":"<p>A brief description of the template.</p>"
         },
-        "lastModifiedTime":{
-          "shape":"LastModifiedTime",
-          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
-        },
         "layoutConfiguration":{
           "shape":"LayoutConfiguration",
           "documentation":"<p>Configuration of layouts associated to the template.</p>"
         },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the template.</p>"
-        },
         "requiredFields":{
           "shape":"RequiredFieldList",
           "documentation":"<p>A list of fields that must contain a value for a case to be successfully created with this template.</p>"
         },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
+        },
         "status":{
           "shape":"TemplateStatus",
           "documentation":"<p>The status of the template.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
+        "deleted":{
+          "shape":"Deleted",
+          "documentation":"<p>Denotes whether or not the resource has been deleted.</p>"
         },
-        "templateArn":{
-          "shape":"TemplateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the template.</p>"
+        "createdTime":{
+          "shape":"CreatedTime",
+          "documentation":"<p>Timestamp at which the resource was created.</p>"
         },
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>A unique identifier of a template.</p>"
+        "lastModifiedTime":{
+          "shape":"LastModifiedTime",
+          "documentation":"<p>Timestamp at which the resource was created or last modified.</p>"
+        },
+        "rules":{
+          "shape":"TemplateCaseRuleList",
+          "documentation":"<p>A list of case rules (also known as <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">case field conditions</a>) on a template. </p>"
         }
       }
     },
+    "HiddenCaseRule":{
+      "type":"structure",
+      "required":[
+        "defaultValue",
+        "conditions"
+      ],
+      "members":{
+        "defaultValue":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the field is hidden when no conditions match.</p>"
+        },
+        "conditions":{
+          "shape":"BooleanConditionList",
+          "documentation":"<p>A list of conditions that determine field visibility.</p>"
+        }
+      },
+      "documentation":"<p>A rule that controls field visibility based on conditions. Fields can be shown or hidden dynamically based on values in other fields.</p>"
+    },
     "IamPrincipalArn":{
       "type":"string",
       "max":500,
@@ -2349,7 +3068,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
     },
     "LayoutSections":{
       "type":"structure",
@@ -2361,19 +3080,19 @@
     "LayoutSummary":{
       "type":"structure",
       "required":[
-        "layoutArn",
         "layoutId",
+        "layoutArn",
         "name"
       ],
       "members":{
-        "layoutArn":{
-          "shape":"LayoutArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the layout.</p>"
-        },
         "layoutId":{
           "shape":"LayoutId",
           "documentation":"<p>The unique identifier for of the layout.</p>"
         },
+        "layoutArn":{
+          "shape":"LayoutArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the layout.</p>"
+        },
         "name":{
           "shape":"LayoutName",
           "documentation":"<p>The name of the layout.</p>"
@@ -2385,23 +3104,67 @@
       "type":"list",
       "member":{"shape":"LayoutSummary"}
     },
+    "ListCaseRulesRequest":{
+      "type":"structure",
+      "required":["domainId"],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>Unique identifier of a Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListCaseRulesResponse":{
+      "type":"structure",
+      "required":["caseRules"],
+      "members":{
+        "caseRules":{
+          "shape":"ListCaseRulesResponseCaseRulesList",
+          "documentation":"<p>A list of field summary objects.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListCaseRulesResponseCaseRulesList":{
+      "type":"list",
+      "member":{"shape":"CaseRuleSummary"},
+      "max":100,
+      "min":0
+    },
     "ListCasesForContactRequest":{
       "type":"structure",
       "required":[
-        "contactArn",
-        "domainId"
+        "domainId",
+        "contactArn"
       ],
       "members":{
-        "contactArn":{
-          "shape":"ContactArn",
-          "documentation":"<p>A unique identifier of a contact in Amazon Connect.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
+        "contactArn":{
+          "shape":"ContactArn",
+          "documentation":"<p>A unique identifier of a contact in Amazon Connect.</p>"
+        },
         "maxResults":{
           "shape":"ListCasesForContactRequestMaxResultsInteger",
           "documentation":"<p>The maximum number of results to return per page.</p>"
@@ -2518,13 +3281,13 @@
       "type":"structure",
       "required":["options"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
-        },
         "options":{
           "shape":"FieldOptionsList",
           "documentation":"<p>A list of <code>FieldOption</code> objects.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
         }
       }
     },
@@ -2665,13 +3428,13 @@
       "type":"structure",
       "required":["templates"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
-        },
         "templates":{
           "shape":"ListTemplatesResponseTemplatesList",
           "documentation":"<p>List of template summary objects.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
         }
       }
     },
@@ -2692,6 +3455,45 @@
       "max":9000,
       "min":0
     },
+    "OperandOne":{
+      "type":"structure",
+      "members":{
+        "fieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>The field ID that this operand should take the value of.</p>"
+        }
+      },
+      "documentation":"<p>Represents the left hand operand in the condition. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "union":true
+    },
+    "OperandTwo":{
+      "type":"structure",
+      "members":{
+        "stringValue":{
+          "shape":"OperandTwoStringValueString",
+          "documentation":"<p>String value type.</p>"
+        },
+        "booleanValue":{
+          "shape":"Boolean",
+          "documentation":"<p>Boolean value type.</p>"
+        },
+        "doubleValue":{
+          "shape":"Double",
+          "documentation":"<p>Double value type.</p>"
+        },
+        "emptyValue":{
+          "shape":"EmptyOperandValue",
+          "documentation":"<p>Empty value type.</p>"
+        }
+      },
+      "documentation":"<p>Represents the right hand operand in the condition. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>",
+      "union":true
+    },
+    "OperandTwoStringValueString":{
+      "type":"string",
+      "max":1500,
+      "min":1
+    },
     "Order":{
       "type":"string",
       "enum":[
@@ -2699,6 +3501,42 @@
         "Desc"
       ]
     },
+    "ParentChildFieldOptionValue":{
+      "type":"string",
+      "max":100,
+      "min":0,
+      "pattern":"$|^.*[\\S]"
+    },
+    "ParentChildFieldOptionsMapping":{
+      "type":"structure",
+      "required":[
+        "parentFieldOptionValue",
+        "childFieldOptionValues"
+      ],
+      "members":{
+        "parentFieldOptionValue":{
+          "shape":"ParentChildFieldOptionValue",
+          "documentation":"<p>The value in the parent field.</p>"
+        },
+        "childFieldOptionValues":{
+          "shape":"ParentChildFieldOptionsMappingChildFieldOptionValuesList",
+          "documentation":"<p>A list of allowed values in the child field.</p>"
+        }
+      },
+      "documentation":"<p>A mapping between a parent field option value and child field option values.</p>"
+    },
+    "ParentChildFieldOptionsMappingChildFieldOptionValuesList":{
+      "type":"list",
+      "member":{"shape":"ParentChildFieldOptionValue"},
+      "max":1500,
+      "min":0
+    },
+    "ParentChildFieldOptionsMappingList":{
+      "type":"list",
+      "member":{"shape":"ParentChildFieldOptionsMapping"},
+      "max":200,
+      "min":1
+    },
     "PutCaseEventConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -2720,8 +3558,7 @@
     },
     "PutCaseEventConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RelatedItemArn":{
       "type":"string",
@@ -2731,17 +3568,29 @@
     "RelatedItemContent":{
       "type":"structure",
       "members":{
-        "comment":{
-          "shape":"CommentContent",
-          "documentation":"<p>Represents the content of a comment to be returned to agents.</p>"
-        },
         "contact":{
           "shape":"ContactContent",
           "documentation":"<p>Represents the content of a contact to be returned to agents.</p>"
         },
+        "comment":{
+          "shape":"CommentContent",
+          "documentation":"<p>Represents the content of a comment to be returned to agents.</p>"
+        },
         "file":{
           "shape":"FileContent",
           "documentation":"<p>Represents the content of a File to be returned to agents.</p>"
+        },
+        "sla":{
+          "shape":"SlaContent",
+          "documentation":"<p>Represents the content of an SLA to be returned to agents.</p>"
+        },
+        "connectCase":{
+          "shape":"ConnectCaseContent",
+          "documentation":"<p>Represents the Amazon Connect case to be created as a related item.</p>"
+        },
+        "custom":{
+          "shape":"CustomContent",
+          "documentation":"<p>Represents the content of a <code>Custom</code> type related item.</p>"
         }
       },
       "documentation":"<p>Represents the content of a particular type of related item.</p>",
@@ -2766,17 +3615,29 @@
     "RelatedItemInputContent":{
       "type":"structure",
       "members":{
-        "comment":{
-          "shape":"CommentContent",
-          "documentation":"<p>Represents the content of a comment to be returned to agents.</p>"
-        },
         "contact":{
           "shape":"Contact",
           "documentation":"<p>Object representing a contact in Amazon Connect as an API request field.</p>"
         },
+        "comment":{
+          "shape":"CommentContent",
+          "documentation":"<p>Represents the content of a comment to be returned to agents.</p>"
+        },
         "file":{
           "shape":"FileContent",
           "documentation":"<p>A file of related items.</p>"
+        },
+        "sla":{
+          "shape":"SlaInputContent",
+          "documentation":"<p>Represents the content of an SLA to be created.</p>"
+        },
+        "connectCase":{
+          "shape":"ConnectCaseInputContent",
+          "documentation":"<p>Represents the Amazon Connect case to be created as a related item.</p>"
+        },
+        "custom":{
+          "shape":"CustomInputContent",
+          "documentation":"<p>Represents the content of a <code>Custom</code> type related item.</p>"
         }
       },
       "documentation":"<p>Represents the content of a related item to be created.</p>",
@@ -2787,28 +3648,61 @@
       "enum":[
         "Contact",
         "Comment",
-        "File"
+        "File",
+        "Sla",
+        "ConnectCase",
+        "Custom"
       ]
     },
     "RelatedItemTypeFilter":{
       "type":"structure",
       "members":{
-        "comment":{
-          "shape":"CommentFilter",
-          "documentation":"<p>A filter for related items of type <code>Comment</code>.</p>"
-        },
         "contact":{
           "shape":"ContactFilter",
           "documentation":"<p>A filter for related items of type <code>Contact</code>.</p>"
         },
+        "comment":{
+          "shape":"CommentFilter",
+          "documentation":"<p>A filter for related items of type <code>Comment</code>.</p>"
+        },
         "file":{
           "shape":"FileFilter",
           "documentation":"<p>A filter for related items of this type of <code>File</code>.</p>"
+        },
+        "sla":{
+          "shape":"SlaFilter",
+          "documentation":"<p> Filter for related items of type <code>SLA</code>.</p>"
+        },
+        "connectCase":{
+          "shape":"ConnectCaseFilter",
+          "documentation":"<p>Represents the Amazon Connect case to be created as a related item.</p>"
+        },
+        "custom":{
+          "shape":"CustomFilter",
+          "documentation":"<p>Represents the content of a <code>Custom</code> type related item.</p>"
         }
       },
       "documentation":"<p>The list of types of related items and their parameters to use for filtering.</p>",
       "union":true
     },
+    "RequiredCaseRule":{
+      "type":"structure",
+      "required":[
+        "defaultValue",
+        "conditions"
+      ],
+      "members":{
+        "defaultValue":{
+          "shape":"Boolean",
+          "documentation":"<p>The value of the rule (that is, whether the field is required) should none of the conditions evaluate to true.</p>"
+        },
+        "conditions":{
+          "shape":"BooleanConditionList",
+          "documentation":"<p>List of conditions for the required rule; the first condition to evaluate to true dictates the value of the rule.</p>"
+        }
+      },
+      "documentation":"<p>Required rule type, used to indicate whether a field is required. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
+    },
     "RequiredField":{
       "type":"structure",
       "required":["fieldId"],
@@ -2851,7 +3745,15 @@
       },
       "exception":true
     },
-    "SearchCasesRequest":{
+    "RuleType":{
+      "type":"string",
+      "enum":[
+        "Required",
+        "Hidden",
+        "FieldOptions"
+      ]
+    },
+    "SearchAllRelatedItemsRequest":{
       "type":"structure",
       "required":["domainId"],
       "members":{
@@ -2861,17 +3763,135 @@
           "location":"uri",
           "locationName":"domainId"
         },
-        "fields":{
-          "shape":"SearchCasesRequestFieldsList",
-          "documentation":"<p>The list of field identifiers to be returned as part of the response.</p>"
+        "maxResults":{
+          "shape":"SearchAllRelatedItemsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return per page.</p>"
         },
-        "filter":{
-          "shape":"CaseFilter",
-          "documentation":"<p>A list of filter objects.</p>"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        },
+        "filters":{
+          "shape":"SearchAllRelatedItemsRequestFiltersList",
+          "documentation":"<p>The list of types of related items and their parameters to use for filtering. The filters work as an OR condition: caller gets back related items that match any of the specified filter types.</p>"
+        },
+        "sorts":{
+          "shape":"SearchAllRelatedItemsRequestSortsList",
+          "documentation":"<p>A structured set of sort terms to specify the order in which related items should be returned. Supports sorting by association time or case ID. The sorts work in the order specified: first sort term takes precedence over subsequent terms.</p>"
+        }
+      }
+    },
+    "SearchAllRelatedItemsRequestFiltersList":{
+      "type":"list",
+      "member":{"shape":"RelatedItemTypeFilter"},
+      "max":10,
+      "min":0
+    },
+    "SearchAllRelatedItemsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":25,
+      "min":1
+    },
+    "SearchAllRelatedItemsRequestSortsList":{
+      "type":"list",
+      "member":{"shape":"SearchAllRelatedItemsSort"},
+      "max":2,
+      "min":0
+    },
+    "SearchAllRelatedItemsResponse":{
+      "type":"structure",
+      "required":["relatedItems"],
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
+        },
+        "relatedItems":{
+          "shape":"SearchAllRelatedItemsResponseRelatedItemsList",
+          "documentation":"<p>A list of items related to a case.</p>"
+        }
+      }
+    },
+    "SearchAllRelatedItemsResponseItem":{
+      "type":"structure",
+      "required":[
+        "relatedItemId",
+        "caseId",
+        "type",
+        "associationTime",
+        "content"
+      ],
+      "members":{
+        "relatedItemId":{
+          "shape":"RelatedItemId",
+          "documentation":"<p>Unique identifier of a related item.</p>"
+        },
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>"
+        },
+        "type":{
+          "shape":"RelatedItemType",
+          "documentation":"<p>Type of a related item.</p>"
+        },
+        "associationTime":{
+          "shape":"AssociationTime",
+          "documentation":"<p>Time at which a related item was associated with a case.</p>"
+        },
+        "content":{"shape":"RelatedItemContent"},
+        "performedBy":{"shape":"UserUnion"},
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
+        }
+      },
+      "documentation":"<p>A list of items that represent RelatedItems. This data type is similar to <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-cases_SearchRelatedItemsResponseItem.html\">SearchRelatedItemsResponseItem</a> except Search<b>All</b>RelatedItemsResponseItem has a caseId field.</p>"
+    },
+    "SearchAllRelatedItemsResponseRelatedItemsList":{
+      "type":"list",
+      "member":{"shape":"SearchAllRelatedItemsResponseItem"},
+      "max":25,
+      "min":0
+    },
+    "SearchAllRelatedItemsSort":{
+      "type":"structure",
+      "required":[
+        "sortProperty",
+        "sortOrder"
+      ],
+      "members":{
+        "sortProperty":{
+          "shape":"SearchAllRelatedItemsSortProperty",
+          "documentation":"<p>Whether related items should be sorted in ascending or descending order. </p>"
+        },
+        "sortOrder":{
+          "shape":"Order",
+          "documentation":"<p>Whether related items should be sorted by association time or case ID. </p>"
+        }
+      },
+      "documentation":"<p>The order in which all returned related items should be sorted.</p>"
+    },
+    "SearchAllRelatedItemsSortProperty":{
+      "type":"string",
+      "enum":[
+        "AssociationTime",
+        "CaseId"
+      ]
+    },
+    "SearchCasesRequest":{
+      "type":"structure",
+      "required":["domainId"],
+      "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The unique identifier of the Cases domain. </p>",
+          "location":"uri",
+          "locationName":"domainId"
         },
         "maxResults":{
           "shape":"SearchCasesRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of cases to return. The current maximum supported value is 25. This is also the default value when no other value is provided.</p>"
+          "documentation":"<p>The maximum number of cases to return. When no value is provided, 25 is the default.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -2881,9 +3901,17 @@
           "shape":"SearchCasesRequestSearchTermString",
           "documentation":"<p>A word or phrase used to perform a quick search.</p>"
         },
+        "filter":{
+          "shape":"CaseFilter",
+          "documentation":"<p>A list of filter objects.</p>"
+        },
         "sorts":{
           "shape":"SearchCasesRequestSortsList",
           "documentation":"<p>A list of sorts where each sort specifies a field and their sort order to be applied to the results. </p>"
+        },
+        "fields":{
+          "shape":"SearchCasesRequestFieldsList",
+          "documentation":"<p>The list of field identifiers to be returned as part of the response.</p>"
         }
       }
     },
@@ -2896,7 +3924,7 @@
     "SearchCasesRequestMaxResultsInteger":{
       "type":"integer",
       "box":true,
-      "max":25,
+      "max":100,
       "min":1
     },
     "SearchCasesRequestSearchTermString":{
@@ -2914,34 +3942,38 @@
       "type":"structure",
       "required":["cases"],
       "members":{
-        "cases":{
-          "shape":"SearchCasesResponseCasesList",
-          "documentation":"<p>A list of case documents where each case contains the properties <code>CaseId</code> and <code>Fields</code> where each field is a complex union structure. </p>"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. This is null if there are no more results to return.</p>"
+        },
+        "cases":{
+          "shape":"SearchCasesResponseCasesList",
+          "documentation":"<p>A list of case documents where each case contains the properties <code>CaseId</code> and <code>Fields</code> where each field is a complex union structure. </p>"
         }
       }
     },
     "SearchCasesResponseCasesList":{
       "type":"list",
       "member":{"shape":"SearchCasesResponseItem"},
-      "max":25,
+      "max":100,
       "min":0
     },
     "SearchCasesResponseItem":{
       "type":"structure",
       "required":[
         "caseId",
-        "fields",
-        "templateId"
+        "templateId",
+        "fields"
       ],
       "members":{
         "caseId":{
           "shape":"CaseId",
           "documentation":"<p>A unique identifier of the case.</p>"
         },
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>A unique identifier of a template.</p>"
+        },
         "fields":{
           "shape":"SearchCasesResponseItemFieldsList",
           "documentation":"<p>List of case field values.</p>"
@@ -2949,10 +3981,6 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
-        },
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>A unique identifier of a template.</p>"
         }
       },
       "documentation":"<p>A list of items that represent cases.</p>"
@@ -2966,25 +3994,21 @@
     "SearchRelatedItemsRequest":{
       "type":"structure",
       "required":[
-        "caseId",
-        "domainId"
+        "domainId",
+        "caseId"
       ],
       "members":{
-        "caseId":{
-          "shape":"CaseId",
-          "documentation":"<p>A unique identifier of the case.</p>",
-          "location":"uri",
-          "locationName":"caseId"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
-        "filters":{
-          "shape":"SearchRelatedItemsRequestFiltersList",
-          "documentation":"<p>The list of types of related items and their parameters to use for filtering.</p>"
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>",
+          "location":"uri",
+          "locationName":"caseId"
         },
         "maxResults":{
           "shape":"SearchRelatedItemsRequestMaxResultsInteger",
@@ -2993,6 +4017,10 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
+        },
+        "filters":{
+          "shape":"SearchRelatedItemsRequestFiltersList",
+          "documentation":"<p>The list of types of related items and their parameters to use for filtering.</p>"
         }
       }
     },
@@ -3025,12 +4053,20 @@
     "SearchRelatedItemsResponseItem":{
       "type":"structure",
       "required":[
-        "associationTime",
-        "content",
         "relatedItemId",
-        "type"
+        "type",
+        "associationTime",
+        "content"
       ],
       "members":{
+        "relatedItemId":{
+          "shape":"RelatedItemId",
+          "documentation":"<p>Unique identifier of a related item.</p>"
+        },
+        "type":{
+          "shape":"RelatedItemType",
+          "documentation":"<p>Type of a related item.</p>"
+        },
         "associationTime":{
           "shape":"AssociationTime",
           "documentation":"<p>Time at which a related item was associated with a case.</p>"
@@ -3039,21 +4075,13 @@
           "shape":"RelatedItemContent",
           "documentation":"<p>Represents the content of a particular type of related item.</p>"
         },
-        "performedBy":{
-          "shape":"UserUnion",
-          "documentation":"<p>Represents the creator of the related item.</p>"
-        },
-        "relatedItemId":{
-          "shape":"RelatedItemId",
-          "documentation":"<p>Unique identifier of a related item.</p>"
-        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>A map of of key-value pairs that represent tags on a resource. Tags are used to organize, track, or control access for this resource.</p>"
         },
-        "type":{
-          "shape":"RelatedItemType",
-          "documentation":"<p>Type of a related item.</p>"
+        "performedBy":{
+          "shape":"UserUnion",
+          "documentation":"<p>Represents the creator of the related item.</p>"
         }
       },
       "documentation":"<p>A list of items that represent RelatedItems.</p>"
@@ -3095,6 +4123,147 @@
       },
       "exception":true
     },
+    "SlaCompletionTime":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "SlaConfiguration":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type",
+        "status",
+        "targetTime"
+      ],
+      "members":{
+        "name":{
+          "shape":"SlaName",
+          "documentation":"<p>Name of an SLA.</p>"
+        },
+        "type":{
+          "shape":"SlaType",
+          "documentation":"<p>Type of SLA.</p>"
+        },
+        "status":{
+          "shape":"SlaStatus",
+          "documentation":"<p>Status of an SLA.</p>"
+        },
+        "fieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>Unique identifier of a field.</p>"
+        },
+        "targetFieldValues":{
+          "shape":"SlaFieldValueUnionList",
+          "documentation":"<p>Represents a list of target field values for the fieldId specified in SlaConfiguration.</p>"
+        },
+        "targetTime":{
+          "shape":"SlaTargetTime",
+          "documentation":"<p>Target time by which an SLA should be completed.</p>"
+        },
+        "completionTime":{
+          "shape":"SlaCompletionTime",
+          "documentation":"<p>Time at which an SLA was completed.</p>"
+        }
+      },
+      "documentation":"<p>Represents an SLA configuration.</p>"
+    },
+    "SlaContent":{
+      "type":"structure",
+      "required":["slaConfiguration"],
+      "members":{
+        "slaConfiguration":{
+          "shape":"SlaConfiguration",
+          "documentation":"<p>Represents an SLA configuration.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of an SLA to be returned to agents.</p>"
+    },
+    "SlaFieldValueUnionList":{
+      "type":"list",
+      "member":{"shape":"FieldValueUnion"},
+      "max":1,
+      "min":1
+    },
+    "SlaFilter":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"SlaName",
+          "documentation":"<p>Name of an SLA.</p>"
+        },
+        "status":{
+          "shape":"SlaStatus",
+          "documentation":"<p>Status of an SLA.</p>"
+        }
+      },
+      "documentation":"<p>A filter for related items of type <code>SLA</code>.</p>"
+    },
+    "SlaInputConfiguration":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type",
+        "targetSlaMinutes"
+      ],
+      "members":{
+        "name":{
+          "shape":"SlaName",
+          "documentation":"<p>Name of an SLA.</p>"
+        },
+        "type":{
+          "shape":"SlaType",
+          "documentation":"<p>Type of SLA.</p>"
+        },
+        "fieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>Unique identifier of a field.</p>"
+        },
+        "targetFieldValues":{
+          "shape":"SlaFieldValueUnionList",
+          "documentation":"<p>Represents a list of target field values for the fieldId specified in SlaInputConfiguration. The SLA is considered met if any one of these target field values matches the actual field value.</p>"
+        },
+        "targetSlaMinutes":{
+          "shape":"TargetSlaMinutes",
+          "documentation":"<p>Target duration in minutes within which an SLA should be completed.</p>"
+        }
+      },
+      "documentation":"<p>Represents the input configuration of an SLA being created.</p>"
+    },
+    "SlaInputContent":{
+      "type":"structure",
+      "members":{
+        "slaInputConfiguration":{
+          "shape":"SlaInputConfiguration",
+          "documentation":"<p>Represents an input SLA configuration.</p>"
+        }
+      },
+      "documentation":"<p>Represents the content of an SLA.</p>",
+      "union":true
+    },
+    "SlaName":{
+      "type":"string",
+      "max":500,
+      "min":1,
+      "pattern":".*[\\S]",
+      "sensitive":true
+    },
+    "SlaStatus":{
+      "type":"string",
+      "enum":[
+        "Active",
+        "Overdue",
+        "Met",
+        "NotMet"
+      ]
+    },
+    "SlaTargetTime":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "SlaType":{
+      "type":"string",
+      "enum":["CaseField"]
+    },
     "Sort":{
       "type":"structure",
       "required":[
@@ -3118,7 +4287,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^(?!aws:)[a-zA-Z+-=._:/]+$"
+      "pattern":"(?!aws:)[a-zA-Z+-=._:/]+"
     },
     "TagKeyList":{
       "type":"list",
@@ -3150,11 +4319,23 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "TargetSlaMinutes":{
+      "type":"long",
+      "box":true,
+      "max":129600,
+      "min":1
+    },
     "TemplateArn":{
       "type":"string",
       "max":500,
       "min":1
     },
+    "TemplateCaseRuleList":{
+      "type":"list",
+      "member":{"shape":"TemplateRule"},
+      "max":50,
+      "min":0
+    },
     "TemplateDescription":{
       "type":"string",
       "max":255,
@@ -3169,7 +4350,22 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^.*[\\S]$"
+      "pattern":".*[\\S]"
+    },
+    "TemplateRule":{
+      "type":"structure",
+      "required":["caseRuleId"],
+      "members":{
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>"
+        },
+        "fieldId":{
+          "shape":"FieldId",
+          "documentation":"<p>Unique identifier of a field.</p>"
+        }
+      },
+      "documentation":"<p>An association representing a case rule acting upon a field. In the Amazon Connect admin website, case rules are known as <i>case field conditions</i>. For more information about case field conditions, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">Add case field conditions to a case template</a>.</p>"
     },
     "TemplateStatus":{
       "type":"string",
@@ -3187,12 +4383,20 @@
     "TemplateSummary":{
       "type":"structure",
       "required":[
-        "name",
-        "status",
+        "templateId",
         "templateArn",
-        "templateId"
+        "name",
+        "status"
       ],
       "members":{
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>The unique identifier for the template.</p>"
+        },
+        "templateArn":{
+          "shape":"TemplateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the template.</p>"
+        },
         "name":{
           "shape":"TemplateName",
           "documentation":"<p>The template name.</p>"
@@ -3200,14 +4404,6 @@
         "status":{
           "shape":"TemplateStatus",
           "documentation":"<p>The status of the template.</p>"
-        },
-        "templateArn":{
-          "shape":"TemplateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the template.</p>"
-        },
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>The unique identifier for the template.</p>"
         }
       },
       "documentation":"<p>Template summary information.</p>"
@@ -3250,23 +4446,23 @@
     "UpdateCaseRequest":{
       "type":"structure",
       "required":[
-        "caseId",
         "domainId",
+        "caseId",
         "fields"
       ],
       "members":{
-        "caseId":{
-          "shape":"CaseId",
-          "documentation":"<p>A unique identifier of the case.</p>",
-          "location":"uri",
-          "locationName":"caseId"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
+        "caseId":{
+          "shape":"CaseId",
+          "documentation":"<p>A unique identifier of the case.</p>",
+          "location":"uri",
+          "locationName":"caseId"
+        },
         "fields":{
           "shape":"UpdateCaseRequestFieldsList",
           "documentation":"<p>An array of objects with <code>fieldId</code> (matching ListFields/DescribeField) and value union data, structured identical to <code>CreateCase</code>.</p>"
@@ -3282,9 +4478,45 @@
     },
     "UpdateCaseResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateCaseRuleRequest":{
+      "type":"structure",
+      "required":[
+        "domainId",
+        "caseRuleId"
+      ],
       "members":{
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>Unique identifier of a Cases domain.</p>",
+          "location":"uri",
+          "locationName":"domainId"
+        },
+        "caseRuleId":{
+          "shape":"CaseRuleId",
+          "documentation":"<p>Unique identifier of a case rule.</p>",
+          "location":"uri",
+          "locationName":"caseRuleId"
+        },
+        "name":{
+          "shape":"CaseRuleName",
+          "documentation":"<p>Name of the case rule.</p>"
+        },
+        "description":{
+          "shape":"CaseRuleDescription",
+          "documentation":"<p>Description of a case rule.</p>"
+        },
+        "rule":{
+          "shape":"CaseRuleDetails",
+          "documentation":"<p>Represents what rule type should take place, under what conditions.</p>"
+        }
       }
     },
+    "UpdateCaseRuleResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateFieldRequest":{
       "type":"structure",
       "required":[
@@ -3292,10 +4524,6 @@
         "fieldId"
       ],
       "members":{
-        "description":{
-          "shape":"FieldDescription",
-          "documentation":"<p>The description of a field.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
@@ -3311,13 +4539,16 @@
         "name":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field.</p>"
+        },
+        "description":{
+          "shape":"FieldDescription",
+          "documentation":"<p>The description of a field.</p>"
         }
       }
     },
     "UpdateFieldResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLayoutRequest":{
       "type":"structure",
@@ -3326,10 +4557,6 @@
         "layoutId"
       ],
       "members":{
-        "content":{
-          "shape":"LayoutContent",
-          "documentation":"<p>Information about which fields will be present in the layout, the order of the fields.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
@@ -3345,13 +4572,16 @@
         "name":{
           "shape":"LayoutName",
           "documentation":"<p>The name of the layout. It must be unique per domain.</p>"
+        },
+        "content":{
+          "shape":"LayoutContent",
+          "documentation":"<p>Information about which fields will be present in the layout, the order of the fields.</p>"
         }
       }
     },
     "UpdateLayoutResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTemplateRequest":{
       "type":"structure",
@@ -3360,24 +4590,30 @@
         "templateId"
       ],
       "members":{
-        "description":{
-          "shape":"TemplateDescription",
-          "documentation":"<p>A brief description of the template.</p>"
-        },
         "domainId":{
           "shape":"DomainId",
           "documentation":"<p>The unique identifier of the Cases domain. </p>",
           "location":"uri",
           "locationName":"domainId"
         },
-        "layoutConfiguration":{
-          "shape":"LayoutConfiguration",
-          "documentation":"<p>Configuration of layouts associated to the template.</p>"
+        "templateId":{
+          "shape":"TemplateId",
+          "documentation":"<p>A unique identifier for the template.</p>",
+          "location":"uri",
+          "locationName":"templateId"
         },
         "name":{
           "shape":"TemplateName",
           "documentation":"<p>The name of the template. It must be unique per domain.</p>"
         },
+        "description":{
+          "shape":"TemplateDescription",
+          "documentation":"<p>A brief description of the template.</p>"
+        },
+        "layoutConfiguration":{
+          "shape":"LayoutConfiguration",
+          "documentation":"<p>Configuration of layouts associated to the template.</p>"
+        },
         "requiredFields":{
           "shape":"RequiredFieldList",
           "documentation":"<p>A list of fields that must contain a value for a case to be successfully created with this template.</p>"
@@ -3386,18 +4622,15 @@
           "shape":"TemplateStatus",
           "documentation":"<p>The status of the template.</p>"
         },
-        "templateId":{
-          "shape":"TemplateId",
-          "documentation":"<p>A unique identifier for the template.</p>",
-          "location":"uri",
-          "locationName":"templateId"
+        "rules":{
+          "shape":"TemplateCaseRuleList",
+          "documentation":"<p>A list of case rules (also known as <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/case-field-conditions.html\">case field conditions</a>) on a template.</p>"
         }
       }
     },
     "UpdateTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UserArn":{
       "type":"string",
@@ -3410,9 +4643,13 @@
         "userArn":{
           "shape":"UserArn",
           "documentation":"<p>Represents the Amazon Connect ARN of the user.</p>"
+        },
+        "customEntity":{
+          "shape":"CustomEntity",
+          "documentation":"<p>Any provided entity.</p>"
         }
       },
-      "documentation":"<p>Represents the identity of the person who performed the action.</p>",
+      "documentation":"<p>Represents the entity that performed the action.</p>",
       "union":true
     },
     "ValidationException":{
@@ -3440,5 +4677,5 @@
       "min":0
     }
   },
-  "documentation":"<p>With Amazon Connect Cases, your agents can track and manage customer issues that require multiple interactions, follow-up tasks, and teams in your contact center. A case represents a customer issue. It records the issue, the steps and interactions taken to resolve the issue, and the outcome. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/cases.html\">Amazon Connect Cases</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
+  "documentation":"<ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Operations_Amazon_Connect_Cases.html\">Cases actions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Types_Amazon_Connect_Cases.html\">Cases data types</a> </p> </li> </ul> <p>With Amazon Connect Cases, your agents can track and manage customer issues that require multiple interactions, follow-up tasks, and teams in your contact center. A case represents a customer issue. It records the issue, the steps and interactions taken to resolve the issue, and the outcome. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/cases.html\">Amazon Connect Cases</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/waiters-2.json 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/connectcases/2022-10-03/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectcases/2022-10-03/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectparticipant/2018-09-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/connectparticipant/2018-09-07/service-2.json 2.31.35-1/awscli/botocore/data/connectparticipant/2018-09-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/connectparticipant/2018-09-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/connectparticipant/2018-09-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,7 +29,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Cancels the authentication session. The opted out branch of the Authenticate Customer flow block will be taken.</p> <note> <p>The current supported channel is chat. This API is not supported for Apple Messages for Business, WhatsApp, or SMS chats.</p> </note>"
+      "documentation":"<p>Cancels the authentication session. The opted out branch of the Authenticate Customer flow block will be taken.</p> <note> <p>The current supported channel is chat. This API is not supported for Apple Messages for Business, WhatsApp, or SMS chats.</p> </note> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "CompleteAttachmentUpload":{
       "name":"CompleteAttachmentUpload",
@@ -47,7 +47,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Allows you to confirm that the attachment has been uploaded using the pre-signed URL provided in StartAttachmentUpload API. A conflict exception is thrown when an attachment with that identifier is already being uploaded.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Allows you to confirm that the attachment has been uploaded using the pre-signed URL provided in StartAttachmentUpload API. A conflict exception is thrown when an attachment with that identifier is already being uploaded.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "CreateParticipantConnection":{
       "name":"CreateParticipantConnection",
@@ -63,7 +63,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates the participant's connection. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ParticipantToken</code> is used for invoking this API instead of <code>ConnectionToken</code>.</p> </note> <p>The participant token is valid for the lifetime of the participant – until they are part of a contact.</p> <p>The response URL for <code>WEBSOCKET</code> Type has a connect expiry timeout of 100s. Clients must manually connect to the returned websocket URL and subscribe to the desired topic. </p> <p>For chat, you need to publish the following on the established websocket connection:</p> <p> <code>{\"topic\":\"aws/subscribe\",\"content\":{\"topics\":[\"aws/chat\"]}}</code> </p> <p>Upon websocket URL expiry, as specified in the response ConnectionExpiry parameter, clients need to call this API again to obtain a new websocket URL and perform the same steps as before.</p> <p> <b>Message streaming support</b>: This API can also be used together with the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html\">StartContactStreaming</a> API to create a participant connection for chat contacts that are not using a websocket. For more information about message streaming, <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-message-streaming.html\">Enable real-time chat message streaming</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p> <b>Feature specifications</b>: For information about feature specifications, such as the allowed number of open websocket connections per participant, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#feature-limits\">Feature specifications</a> in the <i>Amazon Connect Administrator Guide</i>. </p> <note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p> </note>"
+      "documentation":"<p>Creates the participant's connection. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <p>For WebRTC security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-webrtc-security\">Amazon Connect WebRTC security best practices</a>. </p> <note> <p> <code>ParticipantToken</code> is used for invoking this API instead of <code>ConnectionToken</code>.</p> </note> <p>The participant token is valid for the lifetime of the participant – until they are part of a contact. For WebRTC participants, if they leave or are disconnected for 60 seconds, a new participant needs to be created using the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html\">CreateParticipant</a> API. </p> <p> <b>For <code>WEBSOCKET</code> Type</b>: </p> <p>The response URL for has a connect expiry timeout of 100s. Clients must manually connect to the returned websocket URL and subscribe to the desired topic. </p> <p>For chat, you need to publish the following on the established websocket connection:</p> <p> <code>{\"topic\":\"aws/subscribe\",\"content\":{\"topics\":[\"aws/chat\"]}}</code> </p> <p>Upon websocket URL expiry, as specified in the response ConnectionExpiry parameter, clients need to call this API again to obtain a new websocket URL and perform the same steps as before.</p> <p>The expiry time for the connection token is different than the <code>ChatDurationInMinutes</code>. Expiry time for the connection token is 1 day.</p> <p> <b>For <code>WEBRTC_CONNECTION</code> Type</b>: </p> <p>The response includes connection data required for the client application to join the call using the Amazon Chime SDK client libraries. The WebRTCConnection response contains Meeting and Attendee information needed to establish the media connection. </p> <p>The attendee join token in WebRTCConnection response is valid for the lifetime of the participant in the call. If a participant leaves or is disconnected for 60 seconds, their participant credentials will no longer be valid, and a new participant will need to be created to rejoin the call. </p> <p> <b>Message streaming support</b>: This API can also be used together with the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html\">StartContactStreaming</a> API to create a participant connection for chat contacts that are not using a websocket. For more information about message streaming, <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-message-streaming.html\">Enable real-time chat message streaming</a> in the <i>Amazon Connect Administrator Guide</i>.</p> <p> <b>Multi-user web, in-app, video calling support</b>: </p> <p>For WebRTC calls, this API is used in conjunction with the CreateParticipant API to enable multi-party calling. The StartWebRTCContact API creates the initial contact and routes it to an agent, while CreateParticipant adds additional participants to the ongoing call. For more information about multi-party WebRTC calls, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-multiuser-inapp.html\">Enable multi-user web, in-app, and video calling</a> in the <i>Amazon Connect Administrator Guide</i>. </p> <p> <b>Feature specifications</b>: For information about feature specifications, such as the allowed number of open websocket connections per participant or maximum number of WebRTC participants, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-service-limits.html#feature-limits\">Feature specifications</a> in the <i>Amazon Connect Administrator Guide</i>. </p> <note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p> </note>"
     },
     "DescribeView":{
       "name":"DescribeView",
@@ -80,7 +80,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the view for the specified view token.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p>"
+      "documentation":"<p>Retrieves the view for the specified view token.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p>"
     },
     "DisconnectParticipant":{
       "name":"DisconnectParticipant",
@@ -96,7 +96,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Disconnects a participant. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Disconnects a participant. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "GetAttachment":{
       "name":"GetAttachment",
@@ -112,7 +112,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Provides a pre-signed URL for download of a completed attachment. This is an asynchronous API for use with active contacts.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Provides a pre-signed URL for download of a completed attachment. This is an asynchronous API for use with active contacts.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <ul> <li> <p>The participant role <code>CUSTOM_BOT</code> is not permitted to access attachments customers may upload. An <code>AccessDeniedException</code> can indicate that the participant may be a CUSTOM_BOT, and it doesn't have access to attachments.</p> </li> <li> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </li> </ul> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "GetAuthenticationUrl":{
       "name":"GetAuthenticationUrl",
@@ -128,7 +128,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the AuthenticationUrl for the current authentication session for the AuthenticateCustomer flow block. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <ul> <li> <p>This API can only be called within one minute of receiving the authenticationInitiated event.</p> </li> <li> <p>The current supported channel is chat. This API is not supported for Apple Messages for Business, WhatsApp, or SMS chats.</p> </li> </ul> </note>"
+      "documentation":"<p>Retrieves the AuthenticationUrl for the current authentication session for the AuthenticateCustomer flow block. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <ul> <li> <p>This API can only be called within one minute of receiving the authenticationInitiated event.</p> </li> <li> <p>The current supported channel is chat. This API is not supported for Apple Messages for Business, WhatsApp, or SMS chats.</p> </li> </ul> </note> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "GetTranscript":{
       "name":"GetTranscript",
@@ -144,7 +144,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves a transcript of the session, including details about any attachments. For information about accessing past chat contact transcripts for a persistent chat, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-persistence.html\">Enable persistent chat</a>. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <p>If you have a process that consumes events in the transcript of an chat that has ended, note that chat transcripts contain the following event content types if the event has occurred during the chat session:</p> <ul> <li> <p> <code>application/vnd.amazonaws.connect.event.participant.left</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.participant.joined</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.chat.ended</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.transfer.succeeded</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.transfer.failed</code> </p> </li> </ul> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Retrieves a transcript of the session, including details about any attachments. For information about accessing past chat contact transcripts for a persistent chat, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/chat-persistence.html\">Enable persistent chat</a>. </p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <p>If you have a process that consumes events in the transcript of an chat that has ended, note that chat transcripts contain the following event content types if the event has occurred during the chat session:</p> <ul> <li> <p> <code>application/vnd.amazonaws.connect.event.participant.invited</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.participant.joined</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.participant.left</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.chat.ended</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.transfer.succeeded</code> </p> </li> <li> <p> <code>application/vnd.amazonaws.connect.event.transfer.failed</code> </p> </li> </ul> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "SendEvent":{
       "name":"SendEvent",
@@ -161,7 +161,7 @@
         {"shape":"ValidationException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<note> <p>The <code>application/vnd.amazonaws.connect.event.connection.acknowledged</code> ContentType will no longer be supported starting December 31, 2024. This event has been migrated to the <a href=\"https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html\">CreateParticipantConnection</a> API using the <code>ConnectParticipant</code> field.</p> </note> <p>Sends an event. Message receipts are not supported when there are more than two active participants in the chat. Using the SendEvent API for message receipts when a supervisor is barged-in will result in a conflict exception.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<note> <p>The <code>application/vnd.amazonaws.connect.event.connection.acknowledged</code> ContentType is no longer maintained since December 31, 2024. This event has been migrated to the <a href=\"https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html\">CreateParticipantConnection</a> API using the <code>ConnectParticipant</code> field.</p> </note> <p>Sends an event. Message receipts are not supported when there are more than two active participants in the chat. Using the SendEvent API for message receipts when a supervisor is barged-in will result in a conflict exception.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "SendMessage":{
       "name":"SendMessage",
@@ -177,7 +177,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Sends a message.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Sends a message.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     },
     "StartAttachmentUpload":{
       "name":"StartAttachmentUpload",
@@ -194,7 +194,7 @@
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Provides a pre-signed Amazon S3 URL in response for uploading the file directly to S3.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>.</p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
+      "documentation":"<p>Provides a pre-signed Amazon S3 URL in response for uploading the file directly to S3.</p> <p>For security recommendations, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/security-best-practices.html#bp-security-chat\">Amazon Connect Chat security best practices</a>. </p> <note> <p> <code>ConnectionToken</code> is used for invoking this API instead of <code>ParticipantToken</code>.</p> </note> <p>The Amazon Connect Participant Service APIs do not use <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 authentication</a>.</p>"
     }
   },
   "shapes":{
@@ -263,6 +263,31 @@
       "type":"list",
       "member":{"shape":"AttachmentItem"}
     },
+    "Attendee":{
+      "type":"structure",
+      "members":{
+        "AttendeeId":{
+          "shape":"AttendeeId",
+          "documentation":"<p>The Amazon Chime SDK attendee ID.</p>"
+        },
+        "JoinToken":{
+          "shape":"JoinToken",
+          "documentation":"<p>The join token used by the Amazon Chime SDK attendee.</p>"
+        }
+      },
+      "documentation":"<p>The attendee information, including attendee ID and join token.</p>"
+    },
+    "AttendeeId":{"type":"string"},
+    "AudioFeatures":{
+      "type":"structure",
+      "members":{
+        "EchoReduction":{
+          "shape":"MeetingFeatureStatus",
+          "documentation":"<p>Makes echo reduction available to clients who connect to the meeting.</p>"
+        }
+      },
+      "documentation":"<p>Has audio-specific configurations as the operating parameter for Echo Reduction.</p>"
+    },
     "AuthenticationUrl":{
       "type":"string",
       "max":2083,
@@ -290,8 +315,7 @@
     },
     "CancelParticipantAuthenticationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ChatContent":{
       "type":"string",
@@ -356,8 +380,7 @@
     },
     "CompleteAttachmentUploadResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConflictException":{
       "type":"structure",
@@ -387,7 +410,8 @@
       "type":"string",
       "enum":[
         "WEBSOCKET",
-        "CONNECTION_CREDENTIALS"
+        "CONNECTION_CREDENTIALS",
+        "WEBRTC_CONNECTION"
       ]
     },
     "ConnectionTypeList":{
@@ -435,6 +459,10 @@
         "ConnectionCredentials":{
           "shape":"ConnectionCredentials",
           "documentation":"<p>Creates the participant's connection credentials. The authentication token associated with the participant's connection.</p>"
+        },
+        "WebRTCConnection":{
+          "shape":"WebRTCConnection",
+          "documentation":"<p>Creates the participant's WebRTC connection data required for the client application (mobile application or website) to connect to the call. </p>"
         }
       }
     },
@@ -487,8 +515,7 @@
     },
     "DisconnectParticipantResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisplayName":{
       "type":"string",
@@ -624,6 +651,10 @@
         }
       }
     },
+    "GuidString":{
+      "type":"string",
+      "pattern":"[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}"
+    },
     "ISO8601Datetime":{"type":"string"},
     "Instant":{
       "type":"string",
@@ -695,11 +726,32 @@
       },
       "documentation":"<p>An item - message or event - that has been sent. </p>"
     },
+    "JoinToken":{
+      "type":"string",
+      "sensitive":true
+    },
     "MaxResults":{
       "type":"integer",
       "max":100,
       "min":0
     },
+    "MeetingFeatureStatus":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "UNAVAILABLE"
+      ]
+    },
+    "MeetingFeaturesConfiguration":{
+      "type":"structure",
+      "members":{
+        "Audio":{
+          "shape":"AudioFeatures",
+          "documentation":"<p>The configuration settings for the audio features available to a meeting.</p>"
+        }
+      },
+      "documentation":"<p>The configuration settings of the features available to a meeting.</p>"
+    },
     "Message":{"type":"string"},
     "MessageMetadata":{
       "type":"structure",
@@ -839,7 +891,7 @@
       "members":{
         "ContentType":{
           "shape":"ChatContentType",
-          "documentation":"<p>The content type of the request. Supported types are:</p> <ul> <li> <p>application/vnd.amazonaws.connect.event.typing</p> </li> <li> <p>application/vnd.amazonaws.connect.event.connection.acknowledged (will be deprecated on December 31, 2024) </p> </li> <li> <p>application/vnd.amazonaws.connect.event.message.delivered</p> </li> <li> <p>application/vnd.amazonaws.connect.event.message.read</p> </li> </ul>"
+          "documentation":"<p>The content type of the request. Supported types are:</p> <ul> <li> <p>application/vnd.amazonaws.connect.event.typing</p> </li> <li> <p>application/vnd.amazonaws.connect.event.connection.acknowledged (is no longer maintained since December 31, 2024) </p> </li> <li> <p>application/vnd.amazonaws.connect.event.message.delivered</p> </li> <li> <p>application/vnd.amazonaws.connect.event.message.read</p> </li> </ul>"
         },
         "Content":{
           "shape":"ChatContent",
@@ -881,7 +933,7 @@
       "members":{
         "ContentType":{
           "shape":"ChatContentType",
-          "documentation":"<p>The type of the content. Supported types are <code>text/plain</code>, <code>text/markdown</code>, <code>application/json</code>, and <code>application/vnd.amazonaws.connect.message.interactive.response</code>.</p>"
+          "documentation":"<p>The type of the content. Possible types are <code>text/plain</code>, <code>text/markdown</code>, <code>application/json</code>, and <code>application/vnd.amazonaws.connect.message.interactive.response</code>. </p> <p>Supported types on the contact are configured through <code>SupportedMessagingContentTypes</code> on <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html\">StartChatContact</a> and <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_StartOutboundChatContact.html\">StartOutboundChatContact</a>.</p> <p> For Apple Messages for Business, SMS, and WhatsApp Business Messaging contacts, only <code>text/plain</code> is supported.</p>"
         },
         "Content":{
           "shape":"ChatContent",
@@ -1015,6 +1067,11 @@
       "type":"list",
       "member":{"shape":"Item"}
     },
+    "URI":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
     "URLExpiryInSeconds":{
       "type":"integer",
       "max":300,
@@ -1150,6 +1207,54 @@
       "min":1
     },
     "ViewVersion":{"type":"integer"},
+    "WebRTCConnection":{
+      "type":"structure",
+      "members":{
+        "Attendee":{"shape":"Attendee"},
+        "Meeting":{
+          "shape":"WebRTCMeeting",
+          "documentation":"<p>A meeting created using the Amazon Chime SDK.</p>"
+        }
+      },
+      "documentation":"<p>Creates the participant’s WebRTC connection data required for the client application (mobile or web) to connect to the call.</p>"
+    },
+    "WebRTCMediaPlacement":{
+      "type":"structure",
+      "members":{
+        "AudioHostUrl":{
+          "shape":"URI",
+          "documentation":"<p>The audio host URL.</p>"
+        },
+        "AudioFallbackUrl":{
+          "shape":"URI",
+          "documentation":"<p>The audio fallback URL.</p>"
+        },
+        "SignalingUrl":{
+          "shape":"URI",
+          "documentation":"<p>The signaling URL.</p>"
+        },
+        "EventIngestionUrl":{
+          "shape":"URI",
+          "documentation":"<p>The event ingestion URL to which you send client meeting events.</p>"
+        }
+      },
+      "documentation":"<p>A set of endpoints used by clients to connect to the media service group for an Amazon Chime SDK meeting.</p>"
+    },
+    "WebRTCMeeting":{
+      "type":"structure",
+      "members":{
+        "MediaPlacement":{
+          "shape":"WebRTCMediaPlacement",
+          "documentation":"<p>The media placement for the meeting.</p>"
+        },
+        "MeetingFeatures":{"shape":"MeetingFeaturesConfiguration"},
+        "MeetingId":{
+          "shape":"GuidString",
+          "documentation":"<p>The Amazon Chime SDK meeting ID.</p>"
+        }
+      },
+      "documentation":"<p>A meeting created using the Amazon Chime SDK.</p>"
+    },
     "Websocket":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,12 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "Controls"
+    },
+    "ListControlMappings": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ControlMappings"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/controlcatalog/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controlcatalog/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -48,6 +48,23 @@
       ],
       "documentation":"<p>Returns a paginated list of common controls from the Amazon Web Services Control Catalog.</p> <p>You can apply an optional filter to see common controls that have a specific objective. If you don’t provide a filter, the operation returns all common controls. </p>"
     },
+    "ListControlMappings":{
+      "name":"ListControlMappings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/list-control-mappings",
+        "responseCode":200
+      },
+      "input":{"shape":"ListControlMappingsRequest"},
+      "output":{"shape":"ListControlMappingsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a paginated list of control mappings from the Control Catalog. Control mappings show relationships between controls and other entities, such as common controls or compliance frameworks.</p>"
+    },
     "ListControls":{
       "name":"ListControls",
       "http":{
@@ -63,7 +80,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a paginated list of all available controls in the Amazon Web Services Control Catalog library. Allows you to discover available controls. The list of controls is given as structures of type <i>controlSummary</i>. The ARN is returned in the global <i>controlcatalog</i> format, as shown in the examples.</p>"
+      "documentation":"<p>Returns a paginated list of all available controls in the Control Catalog library. Allows you to discover available controls. The list of controls is given as structures of type <i>controlSummary</i>. The ARN is returned in the global <i>controlcatalog</i> format, as shown in the examples.</p>"
     },
     "ListDomains":{
       "name":"ListDomains",
@@ -80,7 +97,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a paginated list of domains from the Amazon Web Services Control Catalog.</p>"
+      "documentation":"<p>Returns a paginated list of domains from the Control Catalog.</p>"
     },
     "ListObjectives":{
       "name":"ListObjectives",
@@ -97,7 +114,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a paginated list of objectives from the Amazon Web Services Control Catalog.</p> <p>You can apply an optional filter to see the objectives that belong to a specific domain. If you don’t provide a filter, the operation returns all objectives. </p>"
+      "documentation":"<p>Returns a paginated list of objectives from the Control Catalog.</p> <p>You can apply an optional filter to see the objectives that belong to a specific domain. If you don’t provide a filter, the operation returns all objectives. </p>"
     }
   },
   "shapes":{
@@ -147,16 +164,33 @@
       "min":41,
       "pattern":"arn:(aws(?:[-a-z]*)?):controlcatalog:::common-control/[0-9a-z]+"
     },
+    "CommonControlArnFilterList":{
+      "type":"list",
+      "member":{"shape":"CommonControlArn"},
+      "max":1,
+      "min":1
+    },
     "CommonControlFilter":{
       "type":"structure",
       "members":{
         "Objectives":{
           "shape":"ObjectiveResourceFilterList",
-          "documentation":"<p>The objective that's used as filter criteria.</p> <p>You can use this parameter to specify one objective ARN at a time. Passing multiple ARNs in the <code>CommonControlFilter</code> isn’t currently supported.</p>"
+          "documentation":"<p>The objective that's used as filter criteria.</p> <p>You can use this parameter to specify one objective ARN at a time. Passing multiple ARNs in the <code>CommonControlFilter</code> isn’t supported.</p>"
         }
       },
       "documentation":"<p>An optional filter that narrows the results to a specific objective.</p>"
     },
+    "CommonControlMappingDetails":{
+      "type":"structure",
+      "required":["CommonControlArn"],
+      "members":{
+        "CommonControlArn":{
+          "shape":"CommonControlArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the common control in the mapping.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains details about a common control mapping. In particular, it returns the Amazon Resource Name (ARN) of the common control.</p>"
+    },
     "CommonControlSummary":{
       "type":"structure",
       "required":[
@@ -204,12 +238,26 @@
       "type":"list",
       "member":{"shape":"CommonControlSummary"}
     },
+    "ControlAlias":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,254}[a-zA-Z0-9])"
+    },
+    "ControlAliases":{
+      "type":"list",
+      "member":{"shape":"ControlAlias"}
+    },
     "ControlArn":{
       "type":"string",
       "max":2048,
       "min":34,
       "pattern":"arn:(aws(?:[-a-z]*)?):(controlcatalog|controltower):[a-zA-Z0-9-]*::control/[0-9a-zA-Z_\\-]+"
     },
+    "ControlArnFilterList":{
+      "type":"list",
+      "member":{"shape":"ControlArn"},
+      "max":1,
+      "min":1
+    },
     "ControlBehavior":{
       "type":"string",
       "enum":[
@@ -218,6 +266,61 @@
         "DETECTIVE"
       ]
     },
+    "ControlFilter":{
+      "type":"structure",
+      "members":{
+        "Implementations":{
+          "shape":"ImplementationFilter",
+          "documentation":"<p>A filter that narrows the results to controls with specific implementation types or identifiers. This field allows you to find controls that are implemented by specific Amazon Web Services services or with specific service identifiers.</p>"
+        }
+      },
+      "documentation":"<p>A structure that defines filtering criteria for the ListControls operation. You can use this filter to narrow down the list of controls based on their implementation details.</p>"
+    },
+    "ControlMapping":{
+      "type":"structure",
+      "required":[
+        "ControlArn",
+        "MappingType",
+        "Mapping"
+      ],
+      "members":{
+        "ControlArn":{
+          "shape":"ControlArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the control in the mapping.</p>"
+        },
+        "MappingType":{
+          "shape":"MappingType",
+          "documentation":"<p>The type of mapping relationship between the control and other entities. Indicates whether the mapping is to a framework or common control.</p>"
+        },
+        "Mapping":{
+          "shape":"Mapping",
+          "documentation":"<p>The details of the mapping relationship, containing either framework or common control information.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains information about a control mapping, including the control ARN, mapping type, and mapping details.</p>"
+    },
+    "ControlMappingFilter":{
+      "type":"structure",
+      "members":{
+        "ControlArns":{
+          "shape":"ControlArnFilterList",
+          "documentation":"<p>A list of control ARNs to filter the mappings. When specified, only mappings associated with these controls are returned.</p>"
+        },
+        "CommonControlArns":{
+          "shape":"CommonControlArnFilterList",
+          "documentation":"<p>A list of common control ARNs to filter the mappings. When specified, only mappings associated with these common controls are returned.</p>"
+        },
+        "MappingTypes":{
+          "shape":"MappingTypeFilterList",
+          "documentation":"<p>A list of mapping types to filter the mappings. When specified, only mappings of these types are returned.</p>"
+        }
+      },
+      "documentation":"<p>A structure that defines filtering criteria for the ListControlMappings operation. You can use this filter to narrow down the list of control mappings based on control ARNs, common control ARNs, or mapping types.</p>"
+    },
+    "ControlMappings":{
+      "type":"list",
+      "member":{"shape":"ControlMapping"}
+    },
     "ControlParameter":{
       "type":"structure",
       "required":["Name"],
@@ -227,7 +330,7 @@
           "documentation":"<p>The parameter name. This name is the parameter <code>key</code> when you call <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_EnableControl.html\"> <code>EnableControl</code> </a> or <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateEnabledControl.html\"> <code>UpdateEnabledControl</code> </a>.</p>"
         }
       },
-      "documentation":"<p>Four types of control parameters are supported.</p> <ul> <li> <p> <b>AllowedRegions</b>: List of Amazon Web Services Regions exempted from the control. Each string is expected to be an Amazon Web Services Region code. This parameter is mandatory for the <b>OU Region deny</b> control, <b>CT.MULTISERVICE.PV.1</b>.</p> <p>Example: <code>[\"us-east-1\",\"us-west-2\"]</code> </p> </li> <li> <p> <b>ExemptedActions</b>: List of Amazon Web Services IAM actions exempted from the control. Each string is expected to be an IAM action.</p> <p>Example: <code>[\"logs:DescribeLogGroups\",\"logs:StartQuery\",\"logs:GetQueryResults\"]</code> </p> </li> <li> <p> <b>ExemptedPrincipalArns</b>: List of Amazon Web Services IAM principal ARNs exempted from the control. Each string is expected to be an IAM principal that follows the pattern <code>^arn:(aws|aws-us-gov):(iam|sts)::.+:.+$</code> </p> <p>Example: <code>[\"arn:aws:iam::*:role/ReadOnly\",\"arn:aws:sts::*:assumed-role/ReadOnly/*\"]</code> </p> </li> <li> <p> <b>ExemptedResourceArns</b>: List of resource ARNs exempted from the control. Each string is expected to be a resource ARN.</p> <p>Example: <code>[\"arn:aws:s3:::my-bucket-name\"]</code> </p> </li> </ul>"
+      "documentation":"<p>Five types of control parameters are supported.</p> <ul> <li> <p> <b>AllowedRegions</b>: List of Amazon Web Services Regions exempted from the control. Each string is expected to be an Amazon Web Services Region code. This parameter is mandatory for the <b>OU Region deny</b> control, <b>CT.MULTISERVICE.PV.1</b>.</p> <p>Example: <code>[\"us-east-1\",\"us-west-2\"]</code> </p> </li> <li> <p> <b>ExemptedActions</b>: List of Amazon Web Services IAM actions exempted from the control. Each string is expected to be an IAM action.</p> <p>Example: <code>[\"logs:DescribeLogGroups\",\"logs:StartQuery\",\"logs:GetQueryResults\"]</code> </p> </li> <li> <p> <b>ExemptedPrincipalArns</b>: List of Amazon Web Services IAM principal ARNs exempted from the control. Each string is expected to be an IAM principal that follows the pattern <code>^arn:(aws|aws-us-gov):(iam|sts)::.+:.+$</code> </p> <p>Example: <code>[\"arn:aws:iam::*:role/ReadOnly\",\"arn:aws:sts::*:assumed-role/ReadOnly/*\"]</code> </p> </li> <li> <p> <b>ExemptedResourceArns</b>: List of resource ARNs exempted from the control. Each string is expected to be a resource ARN.</p> <p>Example: <code>[\"arn:aws:s3:::my-bucket-name\"]</code> </p> </li> <li> <p> <b>ExemptAssumeRoot</b>: A parameter that lets you choose whether to exempt requests made with <code>AssumeRoot</code> from this control, for this OU. For member accounts, the <code>AssumeRoot</code> property is included in requests initiated by IAM centralized root access. This parameter applies only to the <code>AWS-GR_RESTRICT_ROOT_USER</code> control. If you add the parameter when enabling the control, the <code>AssumeRoot</code> exemption is allowed. If you omit the parameter, the <code>AssumeRoot</code> exception is not permitted. The parameter does not accept <code>False</code> as a value.</p> <p> <i>Example: Enabling the control and allowing <code>AssumeRoot</code> </i> </p> <p> <code>{ \"controlIdentifier\": \"arn:aws:controlcatalog:::control/5kvme4m5d2b4d7if2fs5yg2ui\", \"parameters\": [ { \"key\": \"ExemptAssumeRoot\", \"value\": true } ], \"targetIdentifier\": \"arn:aws:organizations::8633900XXXXX:ou/o-6jmn81636m/ou-qsah-jtiihcla\" }</code> </p> </li> </ul>"
     },
     "ControlParameters":{
       "type":"list",
@@ -240,6 +343,15 @@
         "REGIONAL"
       ]
     },
+    "ControlSeverity":{
+      "type":"string",
+      "enum":[
+        "LOW",
+        "MEDIUM",
+        "HIGH",
+        "CRITICAL"
+      ]
+    },
     "ControlSummary":{
       "type":"structure",
       "required":[
@@ -252,6 +364,10 @@
           "shape":"ControlArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the control.</p>"
         },
+        "Aliases":{
+          "shape":"ControlAliases",
+          "documentation":"<p>A list of alternative identifiers for the control. These are human-readable designators, such as <code>SH.S3.1</code>. Several aliases can refer to the same control across different Amazon Web Services services or compliance frameworks.</p>"
+        },
         "Name":{
           "shape":"String",
           "documentation":"<p>The display name of the control.</p>"
@@ -259,6 +375,26 @@
         "Description":{
           "shape":"String",
           "documentation":"<p>A description of the control, as it may appear in the console. Describes the functionality of the control.</p>"
+        },
+        "Behavior":{
+          "shape":"ControlBehavior",
+          "documentation":"<p>An enumerated type, with the following possible values:</p>"
+        },
+        "Severity":{
+          "shape":"ControlSeverity",
+          "documentation":"<p>An enumerated type, with the following possible values:</p>"
+        },
+        "Implementation":{
+          "shape":"ImplementationSummary",
+          "documentation":"<p>An object of type <code>ImplementationSummary</code> that describes how the control is implemented.</p>"
+        },
+        "CreateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that notes the time when the control was released (start of its life) as a governance capability in Amazon Web Services.</p>"
+        },
+        "GovernedResources":{
+          "shape":"GovernedResources",
+          "documentation":"<p>A list of Amazon Web Services resource types that are governed by this control. This information helps you understand which controls can govern certain types of resources, and conversely, which resources are affected when the control is implemented. The resources are represented as Amazon Web Services CloudFormation resource types. If <code>GovernedResources</code> cannot be represented by available CloudFormation resource types, it’s returned as an empty list.</p>"
         }
       },
       "documentation":"<p>Overview of information about a control.</p>"
@@ -328,6 +464,34 @@
       "type":"list",
       "member":{"shape":"DomainSummary"}
     },
+    "FrameworkItem":{
+      "type":"string",
+      "max":250,
+      "min":3
+    },
+    "FrameworkMappingDetails":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Item"
+      ],
+      "members":{
+        "Name":{
+          "shape":"FrameworkName",
+          "documentation":"<p>The name of the compliance framework that the control maps to.</p>"
+        },
+        "Item":{
+          "shape":"FrameworkItem",
+          "documentation":"<p>The specific item or requirement within the framework that the control maps to.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains details about a framework mapping, including the framework name and specific item within the framework that the control maps to.</p>"
+    },
+    "FrameworkName":{
+      "type":"string",
+      "max":250,
+      "min":3
+    },
     "GetControlRequest":{
       "type":"structure",
       "required":["ControlArn"],
@@ -352,6 +516,10 @@
           "shape":"ControlArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the control.</p>"
         },
+        "Aliases":{
+          "shape":"ControlAliases",
+          "documentation":"<p>A list of alternative identifiers for the control. These are human-readable designators, such as <code>SH.S3.1</code>. Several aliases can refer to the same control across different Amazon Web Services services or compliance frameworks.</p>"
+        },
         "Name":{
           "shape":"String",
           "documentation":"<p>The display name of the control.</p>"
@@ -364,6 +532,10 @@
           "shape":"ControlBehavior",
           "documentation":"<p>A term that identifies the control's functional behavior. One of <code>Preventive</code>, <code>Detective</code>, <code>Proactive</code> </p>"
         },
+        "Severity":{
+          "shape":"ControlSeverity",
+          "documentation":"<p>An enumerated type, with the following possible values:</p>"
+        },
         "RegionConfiguration":{"shape":"RegionConfiguration"},
         "Implementation":{
           "shape":"ImplementationDetails",
@@ -372,9 +544,25 @@
         "Parameters":{
           "shape":"ControlParameters",
           "documentation":"<p>Returns an array of <code>ControlParameter</code> objects that specify the parameters a control supports. An empty list is returned for controls that don’t support parameters. </p>"
+        },
+        "CreateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that notes the time when the control was released (start of its life) as a governance capability in Amazon Web Services.</p>"
+        },
+        "GovernedResources":{
+          "shape":"GovernedResources",
+          "documentation":"<p>A list of Amazon Web Services resource types that are governed by this control. This information helps you understand which controls can govern certain types of resources, and conversely, which resources are affected when the control is implemented. The resources are represented as Amazon Web Services CloudFormation resource types. If <code>GovernedResources</code> cannot be represented by available CloudFormation resource types, it’s returned as an empty list.</p>"
         }
       }
     },
+    "GovernedResource":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}"
+    },
+    "GovernedResources":{
+      "type":"list",
+      "member":{"shape":"GovernedResource"}
+    },
     "ImplementationDetails":{
       "type":"structure",
       "required":["Type"],
@@ -382,16 +570,67 @@
         "Type":{
           "shape":"ImplementationType",
           "documentation":"<p>A string that describes a control's implementation type.</p>"
+        },
+        "Identifier":{
+          "shape":"ImplementationIdentifier",
+          "documentation":"<p>A service-specific identifier for the control, assigned by the service that implemented the control. For example, this identifier could be an Amazon Web Services Config Rule ID or a Security Hub Control ID.</p>"
         }
       },
       "documentation":"<p>An object that describes the implementation type for a control.</p> <p>Our <code>ImplementationDetails</code> <code>Type</code> format has three required segments:</p> <ul> <li> <p> <code>SERVICE-PROVIDER::SERVICE-NAME::RESOURCE-NAME</code> </p> </li> </ul> <p>For example, <code>AWS::Config::ConfigRule</code> <b>or</b> <code>AWS::SecurityHub::SecurityControl</code> resources have the format with three required segments.</p> <p>Our <code>ImplementationDetails</code> <code>Type</code> format has an optional fourth segment, which is present for applicable implementation types. The format is as follows: </p> <ul> <li> <p> <code>SERVICE-PROVIDER::SERVICE-NAME::RESOURCE-NAME::RESOURCE-TYPE-DESCRIPTION</code> </p> </li> </ul> <p>For example, <code>AWS::Organizations::Policy::SERVICE_CONTROL_POLICY</code> <b>or</b> <code>AWS::CloudFormation::Type::HOOK</code> have the format with four segments.</p> <p>Although the format is similar, the values for the <code>Type</code> field do not match any Amazon Web Services CloudFormation values.</p>"
     },
+    "ImplementationFilter":{
+      "type":"structure",
+      "members":{
+        "Types":{
+          "shape":"ImplementationTypeFilterList",
+          "documentation":"<p>A list of implementation types that can serve as filters. For example, you can filter for controls implemented as Amazon Web Services Config Rules by specifying AWS::Config::ConfigRule as a type.</p>"
+        },
+        "Identifiers":{
+          "shape":"ImplementationIdentifierFilterList",
+          "documentation":"<p>A list of service-specific identifiers that can serve as filters. For example, you can filter for controls with specific Amazon Web Services Config Rule IDs or Security Hub Control IDs.</p>"
+        }
+      },
+      "documentation":"<p>A structure that defines filtering criteria for control implementations. You can use this filter to find controls that are implemented by specific Amazon Web Services services or with specific service identifiers.</p>"
+    },
+    "ImplementationIdentifier":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_\\.-]+"
+    },
+    "ImplementationIdentifierFilterList":{
+      "type":"list",
+      "member":{"shape":"ImplementationIdentifier"},
+      "max":1,
+      "min":1
+    },
+    "ImplementationSummary":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"ImplementationType",
+          "documentation":"<p>A string that represents the Amazon Web Services service that implements this control. For example, a value of <code>AWS::Config::ConfigRule</code> indicates that the control is implemented by Amazon Web Services Config, and <code>AWS::SecurityHub::SecurityControl</code> indicates implementation by Amazon Web Services Security Hub.</p>"
+        },
+        "Identifier":{
+          "shape":"ImplementationIdentifier",
+          "documentation":"<p>The identifier originally assigned by the Amazon Web Services service that implements the control. For example, <code>CODEPIPELINE_DEPLOYMENT_COUNT_CHECK</code>.</p>"
+        }
+      },
+      "documentation":"<p>A summary of how the control is implemented, including the Amazon Web Services service that enforces the control and its service-specific identifier. For example, the value of this field could indicate that the control is implemented as an Amazon Web Services Config Rule or an Amazon Web Services Security Hub control.</p>"
+    },
     "ImplementationType":{
       "type":"string",
       "max":2048,
       "min":7,
       "pattern":"[A-Za-z0-9]+(::[A-Za-z0-9_]+){2,3}"
     },
+    "ImplementationTypeFilterList":{
+      "type":"list",
+      "member":{"shape":"ImplementationType"},
+      "max":1,
+      "min":1
+    },
     "InternalServerException":{
       "type":"structure",
       "members":{
@@ -420,7 +659,7 @@
         },
         "CommonControlFilter":{
           "shape":"CommonControlFilter",
-          "documentation":"<p>An optional filter that narrows the results to a specific objective.</p> <p>This filter allows you to specify one objective ARN at a time. Passing multiple ARNs in the <code>CommonControlFilter</code> isn’t currently supported.</p>"
+          "documentation":"<p>An optional filter that narrows the results to a specific objective.</p> <p>This filter allows you to specify one objective ARN at a time. Passing multiple ARNs in the <code>CommonControlFilter</code> isn’t supported.</p>"
         }
       }
     },
@@ -438,6 +677,41 @@
         }
       }
     },
+    "ListControlMappingsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxListControlMappingsResults",
+          "documentation":"<p>The maximum number of results on a page or for an API request call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "Filter":{
+          "shape":"ControlMappingFilter",
+          "documentation":"<p>An optional filter that narrows the results to specific control mappings based on control ARNs, common control ARNs, or mapping types.</p>"
+        }
+      }
+    },
+    "ListControlMappingsResponse":{
+      "type":"structure",
+      "required":["ControlMappings"],
+      "members":{
+        "ControlMappings":{
+          "shape":"ControlMappings",
+          "documentation":"<p>The list of control mappings that the ListControlMappings API returns.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token that's used to fetch the next set of results.</p>"
+        }
+      }
+    },
     "ListControlsRequest":{
       "type":"structure",
       "members":{
@@ -452,6 +726,10 @@
           "documentation":"<p>The maximum number of results on a page or for an API request call.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        },
+        "Filter":{
+          "shape":"ControlFilter",
+          "documentation":"<p>An optional filter that narrows the results to controls with specific implementation types or identifiers. If you don't provide a filter, the operation returns all available controls.</p>"
         }
       }
     },
@@ -517,7 +795,7 @@
         },
         "ObjectiveFilter":{
           "shape":"ObjectiveFilter",
-          "documentation":"<p>An optional filter that narrows the results to a specific domain.</p> <p>This filter allows you to specify one domain ARN at a time. Passing multiple ARNs in the <code>ObjectiveFilter</code> isn’t currently supported.</p>"
+          "documentation":"<p>An optional filter that narrows the results to a specific domain.</p> <p>This filter allows you to specify one domain ARN at a time. Passing multiple ARNs in the <code>ObjectiveFilter</code> isn’t supported.</p>"
         }
       }
     },
@@ -535,12 +813,46 @@
         }
       }
     },
+    "Mapping":{
+      "type":"structure",
+      "members":{
+        "Framework":{
+          "shape":"FrameworkMappingDetails",
+          "documentation":"<p>The framework mapping details when the mapping type relates to a compliance framework.</p>"
+        },
+        "CommonControl":{
+          "shape":"CommonControlMappingDetails",
+          "documentation":"<p>The common control mapping details when the mapping type relates to a common control.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains the details of a mapping relationship, which can be either to a framework or to a common control.</p>",
+      "union":true
+    },
+    "MappingType":{
+      "type":"string",
+      "enum":[
+        "FRAMEWORK",
+        "COMMON_CONTROL"
+      ]
+    },
+    "MappingTypeFilterList":{
+      "type":"list",
+      "member":{"shape":"MappingType"},
+      "max":1,
+      "min":1
+    },
     "MaxListCommonControlsResults":{
       "type":"integer",
       "box":true,
       "max":100,
       "min":1
     },
+    "MaxListControlMappingsResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
     "MaxListControlsResults":{
       "type":"integer",
       "box":true,
@@ -570,7 +882,7 @@
       "members":{
         "Domains":{
           "shape":"DomainResourceFilterList",
-          "documentation":"<p>The domain that's used as filter criteria.</p> <p>You can use this parameter to specify one domain ARN at a time. Passing multiple ARNs in the <code>ObjectiveFilter</code> isn’t currently supported.</p>"
+          "documentation":"<p>The domain that's used as filter criteria.</p> <p>You can use this parameter to specify one domain ARN at a time. Passing multiple ARNs in the <code>ObjectiveFilter</code> isn’t supported.</p>"
         }
       },
       "documentation":"<p>An optional filter that narrows the list of objectives to a specific domain.</p>"
@@ -653,7 +965,7 @@
           "documentation":"<p>Regions in which the control is available to be deployed.</p>"
         }
       },
-      "documentation":"<p>Returns information about the control, including the scope of the control, if enabled, and the Regions in which the control currently is available for deployment. For more information about scope, see <a href=\"https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html\">Global services</a>.</p> <p>If you are applying controls through an Amazon Web Services Control Tower landing zone environment, remember that the values returned in the <code>RegionConfiguration</code> API operation are not related to the governed Regions in your landing zone. For example, if you are governing Regions <code>A</code>,<code>B</code>,and <code>C</code> while the control is available in Regions <code>A</code>, <code>B</code>, C<code>,</code> and <code>D</code>, you'd see a response with <code>DeployableRegions</code> of <code>A</code>, <code>B</code>, <code>C</code>, and <code>D</code> for a control with <code>REGIONAL</code> scope, even though you may not intend to deploy the control in Region <code>D</code>, because you do not govern it through your landing zone.</p>"
+      "documentation":"<p>Returns information about the control, including the scope of the control, if enabled, and the Regions in which the control is available for deployment. For more information about scope, see <a href=\"https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/global-services.html\">Global services</a>.</p> <p>If you are applying controls through an Amazon Web Services Control Tower landing zone environment, remember that the values returned in the <code>RegionConfiguration</code> API operation are not related to the governed Regions in your landing zone. For example, if you are governing Regions <code>A</code>,<code>B</code>,and <code>C</code> while the control is available in Regions <code>A</code>, <code>B</code>, C<code>,</code> and <code>D</code>, you'd see a response with <code>DeployableRegions</code> of <code>A</code>, <code>B</code>, <code>C</code>, and <code>D</code> for a control with <code>REGIONAL</code> scope, even though you may not intend to deploy the control in Region <code>D</code>, because you do not govern it through your landing zone.</p>"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -695,5 +1007,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>Welcome to the Amazon Web Services Control Catalog API reference. This guide is for developers who need detailed information about how to programmatically identify and filter the common controls and related metadata that are available to Amazon Web Services customers. This API reference provides descriptions, syntax, and usage examples for each of the actions and data types that are supported by Amazon Web Services Control Catalog. </p> <p>Use the following links to get started with the Amazon Web Services Control Catalog API:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_Operations.html\">Actions</a>: An alphabetical list of all Control Catalog API operations.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_Types.html\">Data types</a>: An alphabetical list of all Control Catalog data types.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/CommonParameters.html\">Common parameters</a>: Parameters that all operations can use.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/CommonErrors.html\">Common errors</a>: Client and server errors that all operations can return.</p> </li> </ul>"
+  "documentation":"<p>Welcome to the Control Catalog API reference. This guide is for developers who need detailed information about how to programmatically identify and filter the common controls and related metadata that are available to Amazon Web Services customers. This API reference provides descriptions, syntax, and usage examples for each of the actions and data types that are supported by Control Catalog. </p> <p>Use the following links to get started with the Control Catalog API:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_Operations.html\">Actions</a>: An alphabetical list of all Control Catalog API operations.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/API_Types.html\">Data types</a>: An alphabetical list of all Control Catalog data types.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/CommonParameters.html\">Common parameters</a>: Parameters that all operations can use.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controlcatalog/latest/APIReference/CommonErrors.html\">Common errors</a>: Client and server errors that all operations can return.</p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"controltower",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS Control Tower",
     "serviceId":"ControlTower",
     "signatureVersion":"v4",
     "signingName":"controltower",
-    "uid":"controltower-2018-05-10",
-    "auth":["aws.auth#sigv4"]
+    "uid":"controltower-2018-05-10"
   },
   "operations":{
     "CreateLandingZone":{
@@ -24,8 +23,8 @@
       "input":{"shape":"CreateLandingZoneInput"},
       "output":{"shape":"CreateLandingZoneOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
@@ -42,14 +41,14 @@
       "input":{"shape":"DeleteLandingZoneInput"},
       "output":{"shape":"DeleteLandingZoneOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Decommissions a landing zone. This API call starts an asynchronous operation that deletes Amazon Web Services Control Tower resources deployed in accounts managed by Amazon Web Services Control Tower.</p>",
+      "documentation":"<p>Decommissions a landing zone. This API call starts an asynchronous operation that deletes Amazon Web Services Control Tower resources deployed in accounts managed by Amazon Web Services Control Tower.</p> <p>Decommissioning a landing zone is a process with significant consequences, and it cannot be undone. We strongly recommend that you perform this decommissioning process only if you intend to stop using your landing zone.</p>",
       "idempotent":true
     },
     "DisableBaseline":{
@@ -62,13 +61,13 @@
       "input":{"shape":"DisableBaselineInput"},
       "output":{"shape":"DisableBaselineOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Disable an <code>EnabledBaseline</code> resource on the specified Target. This API starts an asynchronous operation to remove all resources deployed as part of the baseline enablement. The resource will vary depending on the enabled baseline. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>",
       "idempotent":true
@@ -83,13 +82,13 @@
       "input":{"shape":"DisableControlInput"},
       "output":{"shape":"DisableControlOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This API call turns off a control. It starts an asynchronous operation that deletes Amazon Web Services resources on the specified organizational unit and the accounts it contains. The resources will vary according to the control that you specify. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
     },
@@ -103,13 +102,13 @@
       "input":{"shape":"EnableBaselineInput"},
       "output":{"shape":"EnableBaselineOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Enable (apply) a <code>Baseline</code> to a Target. This API starts an asynchronous operation to deploy resources specified by the <code>Baseline</code> to the specified Target. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
     },
@@ -123,13 +122,13 @@
       "input":{"shape":"EnableControlInput"},
       "output":{"shape":"EnableControlOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This API call activates a control. It starts an asynchronous operation that creates Amazon Web Services resources on the specified organizational unit and the accounts it contains. The resources created will vary according to the control that you specify. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
     },
@@ -146,10 +145,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieve details about an existing <code>Baseline</code> resource by specifying its identifier. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
+      "documentation":"<p>Retrieve details about an existing <code>Baseline</code> resource by specifying its identifier. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>",
+      "readonly":true
     },
     "GetBaselineOperation":{
       "name":"GetBaselineOperation",
@@ -164,10 +164,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns the details of an asynchronous baseline operation, as initiated by any of these APIs: <code>EnableBaseline</code>, <code>DisableBaseline</code>, <code>UpdateEnabledBaseline</code>, <code>ResetEnabledBaseline</code>. A status message is displayed in case of operation failure. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
+      "documentation":"<p>Returns the details of an asynchronous baseline operation, as initiated by any of these APIs: <code>EnableBaseline</code>, <code>DisableBaseline</code>, <code>UpdateEnabledBaseline</code>, <code>ResetEnabledBaseline</code>. A status message is displayed in case of operation failure. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>",
+      "readonly":true
     },
     "GetControlOperation":{
       "name":"GetControlOperation",
@@ -182,10 +183,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns the status of a particular <code>EnableControl</code> or <code>DisableControl</code> operation. Displays a message in case of error. Details for an operation are available for 90 days. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
+      "documentation":"<p>Returns the status of a particular <code>EnableControl</code> or <code>DisableControl</code> operation. Displays a message in case of error. Details for an operation are available for 90 days. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>",
+      "readonly":true
     },
     "GetEnabledBaseline":{
       "name":"GetEnabledBaseline",
@@ -200,10 +202,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieve details of an <code>EnabledBaseline</code> resource by specifying its identifier.</p>"
+      "documentation":"<p>Retrieve details of an <code>EnabledBaseline</code> resource by specifying its identifier.</p>",
+      "readonly":true
     },
     "GetEnabledControl":{
       "name":"GetEnabledControl",
@@ -218,10 +221,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves details about an enabled control. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
+      "documentation":"<p>Retrieves details about an enabled control. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>",
+      "readonly":true
     },
     "GetLandingZone":{
       "name":"GetLandingZone",
@@ -236,10 +240,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns details about the landing zone. Displays a message in case of error.</p>"
+      "documentation":"<p>Returns details about the landing zone. Displays a message in case of error.</p>",
+      "readonly":true
     },
     "GetLandingZoneOperation":{
       "name":"GetLandingZoneOperation",
@@ -254,10 +259,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns the status of the specified landing zone operation. Details for an operation are available for 90 days.</p>"
+      "documentation":"<p>Returns the status of the specified landing zone operation. Details for an operation are available for 90 days.</p>",
+      "readonly":true
     },
     "ListBaselines":{
       "name":"ListBaselines",
@@ -274,7 +280,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a summary list of all available baselines. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
+      "documentation":"<p>Returns a summary list of all available baselines. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>",
+      "readonly":true
     },
     "ListControlOperations":{
       "name":"ListControlOperations",
@@ -291,7 +298,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Provides a list of operations in progress or queued. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html#list-control-operations-api-examples\">ListControlOperation examples</a>.</p>"
+      "documentation":"<p>Provides a list of operations in progress or queued. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html#list-control-operations-api-examples\">ListControlOperation examples</a>.</p>",
+      "readonly":true
     },
     "ListEnabledBaselines":{
       "name":"ListEnabledBaselines",
@@ -308,7 +316,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a list of summaries describing <code>EnabledBaseline</code> resources. You can filter the list by the corresponding <code>Baseline</code> or <code>Target</code> of the <code>EnabledBaseline</code> resources. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
+      "documentation":"<p>Returns a list of summaries describing <code>EnabledBaseline</code> resources. You can filter the list by the corresponding <code>Baseline</code> or <code>Target</code> of the <code>EnabledBaseline</code> resources. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>",
+      "readonly":true
     },
     "ListEnabledControls":{
       "name":"ListEnabledControls",
@@ -323,10 +332,11 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists the controls enabled by Amazon Web Services Control Tower on the specified organizational unit and the accounts it contains. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
+      "documentation":"<p>Lists the controls enabled by Amazon Web Services Control Tower on the specified organizational unit and the accounts it contains. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>",
+      "readonly":true
     },
     "ListLandingZoneOperations":{
       "name":"ListLandingZoneOperations",
@@ -343,7 +353,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists all landing zone operations from the past 90 days. Results are sorted by time, with the most recent operation first.</p>"
+      "documentation":"<p>Lists all landing zone operations from the past 90 days. Results are sorted by time, with the most recent operation first.</p>",
+      "readonly":true
     },
     "ListLandingZones":{
       "name":"ListLandingZones",
@@ -360,7 +371,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns the landing zone ARN for the landing zone deployed in your managed account. This API also creates an ARN for existing accounts that do not yet have a landing zone ARN. </p> <p>Returns one landing zone ARN.</p>"
+      "documentation":"<p>Returns the landing zone ARN for the landing zone deployed in your managed account. This API also creates an ARN for existing accounts that do not yet have a landing zone ARN. </p> <p>Returns one landing zone ARN.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -376,7 +388,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of tags associated with the resource. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>"
+      "documentation":"<p>Returns a list of tags associated with the resource. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>.</p>",
+      "readonly":true
     },
     "ResetEnabledBaseline":{
       "name":"ResetEnabledBaseline",
@@ -388,13 +401,13 @@
       "input":{"shape":"ResetEnabledBaselineInput"},
       "output":{"shape":"ResetEnabledBaselineOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Re-enables an <code>EnabledBaseline</code> resource. For example, this API can re-apply the existing <code>Baseline</code> after a new member account is moved to the target OU. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
     },
@@ -408,15 +421,15 @@
       "input":{"shape":"ResetEnabledControlInput"},
       "output":{"shape":"ResetEnabledControlOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Resets an enabled control.</p>"
+      "documentation":"<p>Resets an enabled control. Does not work for controls implemented with SCPs.</p>"
     },
     "ResetLandingZone":{
       "name":"ResetLandingZone",
@@ -428,12 +441,12 @@
       "input":{"shape":"ResetLandingZoneInput"},
       "output":{"shape":"ResetLandingZoneOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This API call resets a landing zone. It starts an asynchronous operation that resets the landing zone to the parameters specified in the original configuration, which you specified in the manifest file. Nothing in the manifest file's original landing zone configuration is changed during the reset process, by default. This API is not the same as a rollback of a landing zone version, which is not a supported operation.</p>"
     },
@@ -479,13 +492,13 @@
       "input":{"shape":"UpdateEnabledBaselineInput"},
       "output":{"shape":"UpdateEnabledBaselineOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Updates an <code>EnabledBaseline</code> resource's applied parameters or version. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\"> <i>the Amazon Web Services Control Tower User Guide</i> </a>.</p>"
     },
@@ -499,13 +512,13 @@
       "input":{"shape":"UpdateEnabledControlInput"},
       "output":{"shape":"UpdateEnabledControlOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p> Updates the configuration of an already enabled control.</p> <p>If the enabled control shows an <code>EnablementStatus</code> of SUCCEEDED, supply parameters that are different from the currently configured parameters. Otherwise, Amazon Web Services Control Tower will not accept the request.</p> <p>If the enabled control shows an <code>EnablementStatus</code> of FAILED, Amazon Web Services Control Tower updates the control to match any valid parameters that you supply.</p> <p>If the <code>DriftSummary</code> status for the control shows as <code>DRIFTED</code>, you cannot call this API. Instead, you can update the control by calling the <code>ResetEnabledControl</code> API. Alternatively, you can call <code>DisableControl</code> and then call <code>EnableControl</code> again. Also, you can run an extending governance operation to repair drift. For usage examples, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\"> <i>Controls Reference Guide</i> </a>. </p>"
     },
@@ -519,12 +532,12 @@
       "input":{"shape":"UpdateLandingZoneInput"},
       "output":{"shape":"UpdateLandingZoneOutput"},
       "errors":[
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This API call updates the landing zone. It starts an asynchronous operation that updates the landing zone based on the new landing zone version, or on the changed parameters specified in the updated manifest file. </p>"
     }
@@ -547,19 +560,15 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[0-9a-zA-Z_\\-:\\/]+$"
+      "pattern":"arn:aws[0-9a-zA-Z_\\-:\\/]+"
     },
     "BaselineArn":{
       "type":"string",
-      "pattern":"^arn:[a-z-]+:controltower:[a-z0-9-]*:[0-9]{0,12}:baseline/[A-Z0-9]{16}$"
+      "pattern":"arn:[a-z-]+:controltower:[a-z0-9-]*:[0-9]{0,12}:baseline/[A-Z0-9]{16}"
     },
     "BaselineOperation":{
       "type":"structure",
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end time of the operation (if applicable), in ISO 8601 format.</p>"
-        },
         "operationIdentifier":{
           "shape":"OperationIdentifier",
           "documentation":"<p>The identifier of the specified operation.</p>"
@@ -568,13 +577,17 @@
           "shape":"BaselineOperationType",
           "documentation":"<p>An enumerated type (<code>enum</code>) with possible values of <code>ENABLE_BASELINE</code>, <code>DISABLE_BASELINE</code>, <code>UPDATE_ENABLED_BASELINE</code>, or <code>RESET_ENABLED_BASELINE</code>.</p>"
         },
+        "status":{
+          "shape":"BaselineOperationStatus",
+          "documentation":"<p>An enumerated type (<code>enum</code>) with possible values of <code>SUCCEEDED</code>, <code>FAILED</code>, or <code>IN_PROGRESS</code>.</p>"
+        },
         "startTime":{
           "shape":"Timestamp",
           "documentation":"<p>The start time of the operation, in ISO 8601 format.</p>"
         },
-        "status":{
-          "shape":"BaselineOperationStatus",
-          "documentation":"<p>An enumerated type (<code>enum</code>) with possible values of <code>SUCCEEDED</code>, <code>FAILED</code>, or <code>IN_PROGRESS</code>.</p>"
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time of the operation (if applicable), in ISO 8601 format.</p>"
         },
         "statusMessage":{
           "shape":"String",
@@ -611,13 +624,13 @@
           "shape":"String",
           "documentation":"<p>The full ARN of a Baseline.</p>"
         },
-        "description":{
-          "shape":"String",
-          "documentation":"<p>A summary description of a Baseline.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The human-readable name of a Baseline.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>A summary description of a Baseline.</p>"
         }
       },
       "documentation":"<p>Returns a summary of information about a <code>Baseline</code> object.</p>"
@@ -626,7 +639,7 @@
       "type":"string",
       "max":10,
       "min":1,
-      "pattern":"^\\d+(?:\\.\\d+){0,2}$"
+      "pattern":"\\d+(?:\\.\\d+){0,2}"
     },
     "Baselines":{
       "type":"list",
@@ -653,7 +666,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[0-9a-zA-Z_\\-:\\/]+$"
+      "pattern":"arn:aws[0-9a-zA-Z_\\-:\\/]+"
     },
     "ControlIdentifiers":{
       "type":"list",
@@ -664,22 +677,6 @@
     "ControlOperation":{
       "type":"structure",
       "members":{
-        "controlIdentifier":{
-          "shape":"ControlIdentifier",
-          "documentation":"<p>The <code>controlIdentifier</code> of the control for the operation.</p>"
-        },
-        "enabledControlIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p>The <code>controlIdentifier</code> of the enabled control.</p>"
-        },
-        "endTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time that the operation finished.</p>"
-        },
-        "operationIdentifier":{
-          "shape":"OperationIdentifier",
-          "documentation":"<p>The identifier of the specified operation.</p>"
-        },
         "operationType":{
           "shape":"ControlOperationType",
           "documentation":"<p>One of <code>ENABLE_CONTROL</code> or <code>DISABLE_CONTROL</code>.</p>"
@@ -688,6 +685,10 @@
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The time that the operation began.</p>"
         },
+        "endTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time that the operation finished.</p>"
+        },
         "status":{
           "shape":"ControlOperationStatus",
           "documentation":"<p>One of <code>IN_PROGRESS</code>, <code>SUCEEDED</code>, or <code>FAILED</code>.</p>"
@@ -696,9 +697,21 @@
           "shape":"String",
           "documentation":"<p>If the operation result is <code>FAILED</code>, this string contains a message explaining why the operation failed.</p>"
         },
+        "operationIdentifier":{
+          "shape":"OperationIdentifier",
+          "documentation":"<p>The identifier of the specified operation.</p>"
+        },
+        "controlIdentifier":{
+          "shape":"ControlIdentifier",
+          "documentation":"<p>The <code>controlIdentifier</code> of the control for the operation.</p>"
+        },
         "targetIdentifier":{
           "shape":"TargetIdentifier",
           "documentation":"<p>The target upon which the control operation is working.</p>"
+        },
+        "enabledControlIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>The <code>controlIdentifier</code> of the enabled control.</p>"
         }
       },
       "documentation":"<p>An operation performed by the control.</p>"
@@ -710,9 +723,9 @@
           "shape":"ControlIdentifiers",
           "documentation":"<p>The set of <code>controlIdentifier</code> returned by the filter.</p>"
         },
-        "controlOperationTypes":{
-          "shape":"ControlOperationTypes",
-          "documentation":"<p>The set of <code>ControlOperation</code> objects returned by the filter.</p>"
+        "targetIdentifiers":{
+          "shape":"TargetIdentifiers",
+          "documentation":"<p>The set of <code>targetIdentifier</code> objects returned by the filter.</p>"
         },
         "enabledControlIdentifiers":{
           "shape":"EnabledControlIdentifiers",
@@ -722,9 +735,9 @@
           "shape":"ControlOperationStatuses",
           "documentation":"<p>Lists the status of control operations.</p>"
         },
-        "targetIdentifiers":{
-          "shape":"TargetIdentifiers",
-          "documentation":"<p>The set of <code>targetIdentifier</code> objects returned by the filter.</p>"
+        "controlOperationTypes":{
+          "shape":"ControlOperationTypes",
+          "documentation":"<p>The set of <code>ControlOperation</code> objects returned by the filter.</p>"
         }
       },
       "documentation":"<p>A filter object that lets you call <code>ListControlOperations</code> with a specific filter.</p>"
@@ -746,22 +759,6 @@
     "ControlOperationSummary":{
       "type":"structure",
       "members":{
-        "controlIdentifier":{
-          "shape":"ControlIdentifier",
-          "documentation":"<p>The <code>controlIdentifier</code> of a control.</p>"
-        },
-        "enabledControlIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p>The <code>controlIdentifier</code> of an enabled control.</p>"
-        },
-        "endTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The time at which the control operation was completed.</p>"
-        },
-        "operationIdentifier":{
-          "shape":"OperationIdentifier",
-          "documentation":"<p>The unique identifier of a control operation.</p>"
-        },
         "operationType":{
           "shape":"ControlOperationType",
           "documentation":"<p>The type of operation.</p>"
@@ -770,6 +767,10 @@
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The time at which a control operation began.</p>"
         },
+        "endTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The time at which the control operation was completed.</p>"
+        },
         "status":{
           "shape":"ControlOperationStatus",
           "documentation":"<p>The status of the specified control operation.</p>"
@@ -778,9 +779,21 @@
           "shape":"String",
           "documentation":"<p>A speficic message displayed as part of the control status.</p>"
         },
+        "operationIdentifier":{
+          "shape":"OperationIdentifier",
+          "documentation":"<p>The unique identifier of a control operation.</p>"
+        },
+        "controlIdentifier":{
+          "shape":"ControlIdentifier",
+          "documentation":"<p>The <code>controlIdentifier</code> of a control.</p>"
+        },
         "targetIdentifier":{
           "shape":"TargetIdentifier",
           "documentation":"<p>The unique identifier of the target of a control operation.</p>"
+        },
+        "enabledControlIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>The <code>controlIdentifier</code> of an enabled control.</p>"
         }
       },
       "documentation":"<p>A summary of information about the specified control operation.</p>"
@@ -807,21 +820,25 @@
     "CreateLandingZoneInput":{
       "type":"structure",
       "required":[
-        "manifest",
-        "version"
+        "version",
+        "manifest"
       ],
       "members":{
+        "version":{
+          "shape":"LandingZoneVersion",
+          "documentation":"<p>The landing zone version, for example, 3.0.</p>"
+        },
         "manifest":{
           "shape":"Manifest",
           "documentation":"<p>The manifest JSON file is a text file that describes your Amazon Web Services resources. For examples, review <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-api-launch\">Launch your landing zone</a>. </p>"
         },
+        "remediationTypes":{
+          "shape":"RemediationTypes",
+          "documentation":"<p>Specifies the types of remediation actions to apply when creating the landing zone, such as automatic drift correction or compliance enforcement.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Tags to be applied to the landing zone. </p>"
-        },
-        "version":{
-          "shape":"LandingZoneVersion",
-          "documentation":"<p>The landing zone version, for example, 3.0.</p>"
         }
       }
     },
@@ -884,10 +901,6 @@
     },
     "DisableControlInput":{
       "type":"structure",
-      "required":[
-        "controlIdentifier",
-        "targetIdentifier"
-      ],
       "members":{
         "controlIdentifier":{
           "shape":"ControlIdentifier",
@@ -896,6 +909,10 @@
         "targetIdentifier":{
           "shape":"TargetIdentifier",
           "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
+        },
+        "enabledControlIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the enabled control to be disabled, which uniquely identifies the control instance on the target organizational unit.</p>"
         }
       }
     },
@@ -911,8 +928,7 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "DriftStatus":{
@@ -930,6 +946,10 @@
         "driftStatus":{
           "shape":"DriftStatus",
           "documentation":"<p> The drift status of the enabled control.</p> <p>Valid values:</p> <ul> <li> <p> <code>DRIFTED</code>: The <code>enabledControl</code> deployed in this configuration doesn’t match the configuration that Amazon Web Services Control Tower expected. </p> </li> <li> <p> <code>IN_SYNC</code>: The <code>enabledControl</code> deployed in this configuration matches the configuration that Amazon Web Services Control Tower expected.</p> </li> <li> <p> <code>NOT_CHECKING</code>: Amazon Web Services Control Tower does not check drift for this enabled control. Drift is not supported for the control type.</p> </li> <li> <p> <code>UNKNOWN</code>: Amazon Web Services Control Tower is not able to check the drift status for the enabled control. </p> </li> </ul>"
+        },
+        "types":{
+          "shape":"EnabledControlDriftTypes",
+          "documentation":"<p>An object that categorizes the different types of drift detected for the enabled control.</p>"
         }
       },
       "documentation":"<p>The drift summary of the enabled control.</p> <p>Amazon Web Services Control Tower expects the enabled control configuration to include all supported and governed Regions. If the enabled control differs from the expected configuration, it is defined to be in a state of drift. You can repair this drift by resetting the enabled control.</p>"
@@ -943,15 +963,11 @@
     "EnableBaselineInput":{
       "type":"structure",
       "required":[
-        "baselineIdentifier",
         "baselineVersion",
+        "baselineIdentifier",
         "targetIdentifier"
       ],
       "members":{
-        "baselineIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the baseline to be enabled.</p>"
-        },
         "baselineVersion":{
           "shape":"BaselineVersion",
           "documentation":"<p>The specific version to be enabled of the specified baseline.</p>"
@@ -960,30 +976,34 @@
           "shape":"EnabledBaselineParameters",
           "documentation":"<p>A list of <code>key-value</code> objects that specify enablement parameters, where <code>key</code> is a string and <code>value</code> is a document of any type.</p>"
         },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>Tags associated with input to <code>EnableBaseline</code>.</p>"
+        "baselineIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the baseline to be enabled.</p>"
         },
         "targetIdentifier":{
           "shape":"Arn",
           "documentation":"<p>The ARN of the target on which the baseline will be enabled. Only OUs are supported as targets.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>Tags associated with input to <code>EnableBaseline</code>.</p>"
         }
       }
     },
     "EnableBaselineOutput":{
       "type":"structure",
       "required":[
-        "arn",
-        "operationIdentifier"
+        "operationIdentifier",
+        "arn"
       ],
       "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the <code>EnabledBaseline</code> resource.</p>"
-        },
         "operationIdentifier":{
           "shape":"OperationIdentifier",
           "documentation":"<p>The ID (in UUID format) of the asynchronous <code>EnableBaseline</code> operation. This <code>operationIdentifier</code> is used to track status through calls to the <code>GetBaselineOperation</code> API.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the <code>EnabledBaseline</code> resource.</p>"
         }
       }
     },
@@ -998,17 +1018,17 @@
           "shape":"ControlIdentifier",
           "documentation":"<p>The ARN of the control. Only <b>Strongly recommended</b> and <b>Elective</b> controls are permitted, with the exception of the <b>Region deny</b> control. For information on how to find the <code>controlIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
         },
-        "parameters":{
-          "shape":"EnabledControlParameters",
-          "documentation":"<p>A list of input parameter values, which are specified to configure the control when you enable it.</p>"
+        "targetIdentifier":{
+          "shape":"TargetIdentifier",
+          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Tags to be applied to the <code>EnabledControl</code> resource.</p>"
         },
-        "targetIdentifier":{
-          "shape":"TargetIdentifier",
-          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
+        "parameters":{
+          "shape":"EnabledControlParameters",
+          "documentation":"<p>A list of input parameter values, which are specified to configure the control when you enable it.</p>"
         }
       }
     },
@@ -1016,13 +1036,13 @@
       "type":"structure",
       "required":["operationIdentifier"],
       "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the <code>EnabledControl</code> resource.</p>"
-        },
         "operationIdentifier":{
           "shape":"OperationIdentifier",
           "documentation":"<p>The ID of the asynchronous operation, which is used to track status. The operation is available for 90 days.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the <code>EnabledControl</code> resource.</p>"
         }
       }
     },
@@ -1037,8 +1057,8 @@
       "required":[
         "arn",
         "baselineIdentifier",
-        "statusSummary",
-        "targetIdentifier"
+        "targetIdentifier",
+        "statusSummary"
       ],
       "members":{
         "arn":{
@@ -1053,25 +1073,72 @@
           "shape":"String",
           "documentation":"<p>The enabled version of the <code>Baseline</code>.</p>"
         },
-        "parameters":{
-          "shape":"EnabledBaselineParameterSummaries",
-          "documentation":"<p>Shows the parameters that are applied when enabling this <code>Baseline</code>.</p>"
+        "driftStatusSummary":{
+          "shape":"EnabledBaselineDriftStatusSummary",
+          "documentation":"<p>The drift status of the enabled baseline.</p>"
+        },
+        "targetIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The target on which to enable the <code>Baseline</code>.</p>"
         },
         "parentIdentifier":{
           "shape":"Arn",
           "documentation":"<p>An ARN that represents the parent <code>EnabledBaseline</code> at the Organizational Unit (OU) level, from which the child <code>EnabledBaseline</code> inherits its configuration. The value is returned by <code>GetEnabledBaseline</code>.</p>"
         },
         "statusSummary":{"shape":"EnablementStatusSummary"},
-        "targetIdentifier":{
-          "shape":"String",
-          "documentation":"<p>The target on which to enable the <code>Baseline</code>.</p>"
+        "parameters":{
+          "shape":"EnabledBaselineParameterSummaries",
+          "documentation":"<p>Shows the parameters that are applied when enabling this <code>Baseline</code>.</p>"
         }
       },
       "documentation":"<p>Details of the <code>EnabledBaseline</code> resource.</p>"
     },
+    "EnabledBaselineDriftStatus":{
+      "type":"string",
+      "enum":[
+        "IN_SYNC",
+        "DRIFTED"
+      ]
+    },
+    "EnabledBaselineDriftStatusSummary":{
+      "type":"structure",
+      "members":{
+        "types":{
+          "shape":"EnabledBaselineDriftTypes",
+          "documentation":"<p>The types of drift that can be detected for an enabled baseline. Amazon Web Services Control Tower detects inheritance drift on enabled baselines that apply at the OU level. </p>"
+        }
+      },
+      "documentation":"<p>The drift summary of the enabled baseline. Amazon Web Services Control Tower reports inheritance drift when an enabled baseline configuration of a member account is different than the configuration that applies to the OU. Amazon Web Services Control Tower reports this type of drift for a parent or child enabled baseline. One way to repair this drift by resetting the parent enabled baseline, on the OU.</p> <p>For example, you may see this type of drift if you move accounts between OUs, but the accounts are not yet (re-)enrolled.</p>"
+    },
+    "EnabledBaselineDriftStatuses":{
+      "type":"list",
+      "member":{"shape":"EnabledBaselineDriftStatus"},
+      "max":1,
+      "min":1
+    },
+    "EnabledBaselineDriftTypes":{
+      "type":"structure",
+      "members":{
+        "inheritance":{
+          "shape":"EnabledBaselineInheritanceDrift",
+          "documentation":"<p>At least one account within the target OU does not match the baseline configuration defined on that OU. An account is in inheritance drift when it does not match the configuration of a parent OU, possibly a new parent OU, if the account is moved. </p>"
+        }
+      },
+      "documentation":"<p>The types of drift that can be detected for an enabled baseline.</p> <ul> <li> <p> Amazon Web Services Control Tower detects inheritance drift on the enabled baselines that target OUs: <code>AWSControlTowerBaseline</code> and <code>BackupBaseline</code>. </p> </li> <li> <p>Amazon Web Services Control Tower does not detect drift on the baselines that apply to your landing zone: <code>IdentityCenterBaseline</code>, <code>AuditBaseline</code>, <code>LogArchiveBaseline</code>, <code>BackupCentralVaultBaseline</code>, or <code>BackupAdminBaseline</code>. For more information, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/types-of-baselines.html\">Types of baselines</a>.</p> </li> </ul> <p>Baselines enabled on an OU are inherited by its member accounts as child <code>EnabledBaseline</code> resources. The baseline on the OU serves as the parent <code>EnabledBaseline</code>, which governs the configuration of each child <code>EnabledBaseline</code>.</p> <p>If the baseline configuration of a member account in an OU does not match the configuration of the parent OU, the parent and child baseline is in a state of inheritance drift. This drift could occur in the <code>AWSControlTowerBaseline</code> or the <code>BackupBaseline</code> related to that account.</p>"
+    },
+    "EnabledBaselineEnablementStatuses":{
+      "type":"list",
+      "member":{"shape":"EnablementStatus"},
+      "max":1,
+      "min":1
+    },
     "EnabledBaselineFilter":{
       "type":"structure",
       "members":{
+        "targetIdentifiers":{
+          "shape":"EnabledBaselineTargetIdentifiers",
+          "documentation":"<p>Identifiers for the targets of the <code>Baseline</code> filter operation.</p>"
+        },
         "baselineIdentifiers":{
           "shape":"EnabledBaselineBaselineIdentifiers",
           "documentation":"<p>Identifiers for the <code>Baseline</code> objects returned as part of the filter operation.</p>"
@@ -1080,13 +1147,27 @@
           "shape":"EnabledBaselineParentIdentifiers",
           "documentation":"<p>An optional filter that sets up a list of <code>parentIdentifiers</code> to filter the results of the <code>ListEnabledBaseline</code> output.</p>"
         },
-        "targetIdentifiers":{
-          "shape":"EnabledBaselineTargetIdentifiers",
-          "documentation":"<p>Identifiers for the targets of the <code>Baseline</code> filter operation.</p>"
+        "statuses":{
+          "shape":"EnabledBaselineEnablementStatuses",
+          "documentation":"<p>A list of <code>EnablementStatus</code> items.</p>"
+        },
+        "inheritanceDriftStatuses":{
+          "shape":"EnabledBaselineDriftStatuses",
+          "documentation":"<p>A list of <code>EnabledBaselineDriftStatus</code> items for enabled baselines.</p>"
         }
       },
       "documentation":"<p>A filter applied on the <code>ListEnabledBaseline</code> operation. Allowed filters are <code>baselineIdentifiers</code> and <code>targetIdentifiers</code>. The filter can be applied for either, or both.</p>"
     },
+    "EnabledBaselineInheritanceDrift":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"EnabledBaselineDriftStatus",
+          "documentation":"<p>The inheritance drift status for enabled baselines.</p>"
+        }
+      },
+      "documentation":"<p>The inheritance drift summary for the enabled baseline. Inheritance drift occurs when any accounts in the target OU do not match the baseline configuration defined on that OU. </p>"
+    },
     "EnabledBaselineParameter":{
       "type":"structure",
       "required":[
@@ -1107,8 +1188,7 @@
     },
     "EnabledBaselineParameterDocument":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "EnabledBaselineParameterSummaries":{
@@ -1148,8 +1228,8 @@
       "required":[
         "arn",
         "baselineIdentifier",
-        "statusSummary",
-        "targetIdentifier"
+        "targetIdentifier",
+        "statusSummary"
       ],
       "members":{
         "arn":{
@@ -1164,15 +1244,19 @@
           "shape":"String",
           "documentation":"<p>The enabled version of the baseline.</p>"
         },
-        "parentIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p>An ARN that represents an object returned by <code>ListEnabledBaseline</code>, to describe an enabled baseline.</p>"
+        "driftStatusSummary":{
+          "shape":"EnabledBaselineDriftStatusSummary",
+          "documentation":"<p>The drift status of the enabled baseline.</p>"
         },
-        "statusSummary":{"shape":"EnablementStatusSummary"},
         "targetIdentifier":{
           "shape":"String",
           "documentation":"<p>The target upon which the baseline is enabled.</p>"
-        }
+        },
+        "parentIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>An ARN that represents an object returned by <code>ListEnabledBaseline</code>, to describe an enabled baseline.</p>"
+        },
+        "statusSummary":{"shape":"EnablementStatusSummary"}
       },
       "documentation":"<p>Returns a summary of information about an <code>EnabledBaseline</code> object.</p>"
     },
@@ -1197,29 +1281,47 @@
           "shape":"ControlIdentifier",
           "documentation":"<p>The control identifier of the enabled control. For information on how to find the <code>controlIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
         },
-        "driftStatusSummary":{
-          "shape":"DriftStatusSummary",
-          "documentation":"<p>The drift status of the enabled control.</p>"
-        },
-        "parameters":{
-          "shape":"EnabledControlParameterSummaries",
-          "documentation":"<p>Array of <code>EnabledControlParameter</code> objects.</p>"
+        "targetIdentifier":{
+          "shape":"TargetIdentifier",
+          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
         },
         "statusSummary":{
           "shape":"EnablementStatusSummary",
           "documentation":"<p>The deployment summary of the enabled control.</p>"
         },
-        "targetIdentifier":{
-          "shape":"TargetIdentifier",
-          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
+        "driftStatusSummary":{
+          "shape":"DriftStatusSummary",
+          "documentation":"<p>The drift status of the enabled control.</p>"
+        },
+        "parentIdentifier":{
+          "shape":"ParentIdentifier",
+          "documentation":"<p>The ARN of the parent enabled control from which this control inherits its configuration, if applicable.</p>"
         },
         "targetRegions":{
           "shape":"TargetRegions",
           "documentation":"<p>Target Amazon Web Services Regions for the enabled control.</p>"
+        },
+        "parameters":{
+          "shape":"EnabledControlParameterSummaries",
+          "documentation":"<p>Array of <code>EnabledControlParameter</code> objects.</p>"
         }
       },
       "documentation":"<p>Information about the enabled control.</p>"
     },
+    "EnabledControlDriftTypes":{
+      "type":"structure",
+      "members":{
+        "inheritance":{
+          "shape":"EnabledControlInheritanceDrift",
+          "documentation":"<p>Indicates drift related to inheritance configuration between parent and child controls.</p>"
+        },
+        "resource":{
+          "shape":"EnabledControlResourceDrift",
+          "documentation":"<p>Indicates drift related to the underlying Amazon Web Services resources managed by the control.</p>"
+        }
+      },
+      "documentation":"<p>Defines the various categories of drift that can occur for an enabled control resource.</p>"
+    },
     "EnabledControlFilter":{
       "type":"structure",
       "members":{
@@ -1227,13 +1329,25 @@
           "shape":"ControlIdentifiers",
           "documentation":"<p>The set of <code>controlIdentifier</code> returned by the filter. </p>"
         },
+        "statuses":{
+          "shape":"EnablementStatuses",
+          "documentation":"<p>A list of <code>EnablementStatus</code> items.</p>"
+        },
         "driftStatuses":{
           "shape":"DriftStatuses",
           "documentation":"<p>A list of <code>DriftStatus</code> items.</p>"
         },
-        "statuses":{
-          "shape":"EnablementStatuses",
-          "documentation":"<p>A list of <code>EnablementStatus</code> items.</p>"
+        "parentIdentifiers":{
+          "shape":"ParentIdentifiers",
+          "documentation":"<p>Filters enabled controls by their parent control identifiers, allowing you to find child controls of specific parent controls.</p>"
+        },
+        "inheritanceDriftStatuses":{
+          "shape":"DriftStatuses",
+          "documentation":"<p>Filters enabled controls by their inheritance drift status, allowing you to find controls with specific inheritance-related drift conditions.</p>"
+        },
+        "resourceDriftStatuses":{
+          "shape":"DriftStatuses",
+          "documentation":"<p>Filters enabled controls by their resource drift status, allowing you to find controls with specific resource-related drift conditions.</p>"
         }
       },
       "documentation":"<p>A structure that returns a set of control identifiers, the control status for each control in the set, and the drift status for each control in the set.</p>"
@@ -1244,6 +1358,16 @@
       "max":1,
       "min":1
     },
+    "EnabledControlInheritanceDrift":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"DriftStatus",
+          "documentation":"<p>The status of inheritance drift for the enabled control, indicating whether inheritance configuration matches expectations.</p>"
+        }
+      },
+      "documentation":"<p>Represents drift information related to control inheritance between organizational units.</p>"
+    },
     "EnabledControlParameter":{
       "type":"structure",
       "required":[
@@ -1288,6 +1412,16 @@
       "type":"list",
       "member":{"shape":"EnabledControlParameter"}
     },
+    "EnabledControlResourceDrift":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"DriftStatus",
+          "documentation":"<p>The status of resource drift for the enabled control, indicating whether the underlying resources match the expected configuration.</p>"
+        }
+      },
+      "documentation":"<p>Represents drift information related to the underlying Amazon Web Services resources managed by the control.</p>"
+    },
     "EnabledControlSummary":{
       "type":"structure",
       "members":{
@@ -1299,17 +1433,21 @@
           "shape":"ControlIdentifier",
           "documentation":"<p>The <code>controlIdentifier</code> of the enabled control.</p>"
         },
-        "driftStatusSummary":{
-          "shape":"DriftStatusSummary",
-          "documentation":"<p>The drift status of the enabled control.</p>"
+        "targetIdentifier":{
+          "shape":"TargetIdentifier",
+          "documentation":"<p>The ARN of the organizational unit.</p>"
         },
         "statusSummary":{
           "shape":"EnablementStatusSummary",
           "documentation":"<p>A short description of the status of the enabled control.</p>"
         },
-        "targetIdentifier":{
-          "shape":"TargetIdentifier",
-          "documentation":"<p>The ARN of the organizational unit.</p>"
+        "driftStatusSummary":{
+          "shape":"DriftStatusSummary",
+          "documentation":"<p>The drift status of the enabled control.</p>"
+        },
+        "parentIdentifier":{
+          "shape":"ParentIdentifier",
+          "documentation":"<p>The ARN of the parent enabled control from which this control inherits its configuration, if applicable.</p>"
         }
       },
       "documentation":"<p>Returns a summary of information about an enabled control.</p>"
@@ -1329,13 +1467,13 @@
     "EnablementStatusSummary":{
       "type":"structure",
       "members":{
-        "lastOperationIdentifier":{
-          "shape":"OperationIdentifier",
-          "documentation":"<p>The last operation identifier for the enabled resource.</p>"
-        },
         "status":{
           "shape":"EnablementStatus",
           "documentation":"<p> The deployment status of the enabled resource.</p> <p>Valid values:</p> <ul> <li> <p> <code>SUCCEEDED</code>: The <code>EnabledControl</code> or <code>EnabledBaseline</code> configuration was deployed successfully.</p> </li> <li> <p> <code>UNDER_CHANGE</code>: The <code>EnabledControl</code> or <code>EnabledBaseline</code> configuration is changing. </p> </li> <li> <p> <code>FAILED</code>: The <code>EnabledControl</code> or <code>EnabledBaseline</code> configuration failed to deploy.</p> </li> </ul>"
+        },
+        "lastOperationIdentifier":{
+          "shape":"OperationIdentifier",
+          "documentation":"<p>The last operation identifier for the enabled resource.</p>"
         }
       },
       "documentation":"<p>The deployment summary of an <code>EnabledControl</code> or <code>EnabledBaseline</code> resource.</p>"
@@ -1387,13 +1525,13 @@
           "shape":"BaselineArn",
           "documentation":"<p>The baseline ARN.</p>"
         },
-        "description":{
-          "shape":"String",
-          "documentation":"<p>A description of the baseline.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>A user-friendly name for the baseline.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>A description of the baseline.</p>"
         }
       }
     },
@@ -1515,33 +1653,37 @@
     "LandingZoneDetail":{
       "type":"structure",
       "required":[
-        "manifest",
-        "version"
+        "version",
+        "manifest"
       ],
       "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the landing zone.</p>"
-        },
-        "driftStatus":{
-          "shape":"LandingZoneDriftStatusSummary",
-          "documentation":"<p>The drift status of the landing zone.</p>"
-        },
-        "latestAvailableVersion":{
+        "version":{
           "shape":"LandingZoneVersion",
-          "documentation":"<p>The latest available version of the landing zone.</p>"
+          "documentation":"<p>The landing zone's current deployed version.</p>"
         },
         "manifest":{
           "shape":"Manifest",
           "documentation":"<p>The landing zone manifest JSON text file that specifies the landing zone configurations. </p>"
         },
+        "remediationTypes":{
+          "shape":"RemediationTypes",
+          "documentation":"<p>The types of remediation actions configured for the landing zone, such as automatic drift correction or compliance enforcement.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the landing zone.</p>"
+        },
         "status":{
           "shape":"LandingZoneStatus",
           "documentation":"<p>The landing zone deployment status. One of <code>ACTIVE</code>, <code>PROCESSING</code>, <code>FAILED</code>.</p>"
         },
-        "version":{
+        "latestAvailableVersion":{
           "shape":"LandingZoneVersion",
-          "documentation":"<p>The landing zone's current deployed version.</p>"
+          "documentation":"<p>The latest available version of the landing zone.</p>"
+        },
+        "driftStatus":{
+          "shape":"LandingZoneDriftStatusSummary",
+          "documentation":"<p>The drift status of the landing zone.</p>"
         }
       },
       "documentation":"<p>Information about the landing zone.</p>"
@@ -1566,25 +1708,25 @@
     "LandingZoneOperationDetail":{
       "type":"structure",
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The landing zone operation end time.</p>"
+        "operationType":{
+          "shape":"LandingZoneOperationType",
+          "documentation":"<p>The landing zone operation type. </p> <p>Valid values:</p> <ul> <li> <p> <code>DELETE</code>: The <code>DeleteLandingZone</code> operation. </p> </li> <li> <p> <code>CREATE</code>: The <code>CreateLandingZone</code> operation. </p> </li> <li> <p> <code>UPDATE</code>: The <code>UpdateLandingZone</code> operation. </p> </li> <li> <p> <code>RESET</code>: The <code>ResetLandingZone</code> operation. </p> </li> </ul>"
         },
         "operationIdentifier":{
           "shape":"OperationIdentifier",
           "documentation":"<p>The <code>operationIdentifier</code> of the landing zone operation.</p>"
         },
-        "operationType":{
-          "shape":"LandingZoneOperationType",
-          "documentation":"<p>The landing zone operation type. </p> <p>Valid values:</p> <ul> <li> <p> <code>DELETE</code>: The <code>DeleteLandingZone</code> operation. </p> </li> <li> <p> <code>CREATE</code>: The <code>CreateLandingZone</code> operation. </p> </li> <li> <p> <code>UPDATE</code>: The <code>UpdateLandingZone</code> operation. </p> </li> <li> <p> <code>RESET</code>: The <code>ResetLandingZone</code> operation. </p> </li> </ul>"
+        "status":{
+          "shape":"LandingZoneOperationStatus",
+          "documentation":"<p>Valid values:</p> <ul> <li> <p> <code>SUCCEEDED</code>: The landing zone operation succeeded. </p> </li> <li> <p> <code>IN_PROGRESS</code>: The landing zone operation is in progress. </p> </li> <li> <p> <code>FAILED</code>: The landing zone operation failed. </p> </li> </ul>"
         },
         "startTime":{
           "shape":"Timestamp",
           "documentation":"<p>The landing zone operation start time.</p>"
         },
-        "status":{
-          "shape":"LandingZoneOperationStatus",
-          "documentation":"<p>Valid values:</p> <ul> <li> <p> <code>SUCCEEDED</code>: The landing zone operation succeeded. </p> </li> <li> <p> <code>IN_PROGRESS</code>: The landing zone operation is in progress. </p> </li> <li> <p> <code>FAILED</code>: The landing zone operation failed. </p> </li> </ul>"
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The landing zone operation end time.</p>"
         },
         "statusMessage":{
           "shape":"String",
@@ -1596,13 +1738,13 @@
     "LandingZoneOperationFilter":{
       "type":"structure",
       "members":{
-        "statuses":{
-          "shape":"LandingZoneOperationStatuses",
-          "documentation":"<p>The statuses of the set of landing zone operations selected by the filter.</p>"
-        },
         "types":{
           "shape":"LandingZoneOperationTypes",
           "documentation":"<p>The set of landing zone operation types selected by the filter.</p>"
+        },
+        "statuses":{
+          "shape":"LandingZoneOperationStatuses",
+          "documentation":"<p>The statuses of the set of landing zone operations selected by the filter.</p>"
         }
       },
       "documentation":"<p>A filter object that lets you call <code>ListLandingZoneOperations</code> with a specific filter.</p>"
@@ -1624,14 +1766,14 @@
     "LandingZoneOperationSummary":{
       "type":"structure",
       "members":{
-        "operationIdentifier":{
-          "shape":"OperationIdentifier",
-          "documentation":"<p>The <code>operationIdentifier</code> of the landing zone operation.</p>"
-        },
         "operationType":{
           "shape":"LandingZoneOperationType",
           "documentation":"<p>The type of the landing zone operation.</p>"
         },
+        "operationIdentifier":{
+          "shape":"OperationIdentifier",
+          "documentation":"<p>The <code>operationIdentifier</code> of the landing zone operation.</p>"
+        },
         "status":{
           "shape":"LandingZoneOperationStatus",
           "documentation":"<p>The status of the landing zone operation.</p>"
@@ -1680,18 +1822,18 @@
       "type":"string",
       "max":10,
       "min":3,
-      "pattern":"^\\d+.\\d+$"
+      "pattern":"\\d+.\\d+"
     },
     "ListBaselinesInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListBaselinesMaxResults",
-          "documentation":"<p>The maximum number of results to be shown.</p>"
-        },
         "nextToken":{
           "shape":"String",
           "documentation":"<p>A pagination token.</p>"
+        },
+        "maxResults":{
+          "shape":"ListBaselinesMaxResults",
+          "documentation":"<p>The maximum number of results to be shown.</p>"
         }
       }
     },
@@ -1722,13 +1864,13 @@
           "shape":"ControlOperationFilter",
           "documentation":"<p>An input filter for the <code>ListControlOperations</code> API that lets you select the types of control operations to view.</p>"
         },
-        "maxResults":{
-          "shape":"ListControlOperationsMaxResults",
-          "documentation":"<p>The maximum number of results to be shown.</p>"
-        },
         "nextToken":{
           "shape":"ListControlOperationsNextToken",
           "documentation":"<p>A pagination token.</p>"
+        },
+        "maxResults":{
+          "shape":"ListControlOperationsMaxResults",
+          "documentation":"<p>The maximum number of results to be shown.</p>"
         }
       }
     },
@@ -1740,7 +1882,7 @@
     },
     "ListControlOperationsNextToken":{
       "type":"string",
-      "pattern":"\\S+"
+      "pattern":".*\\S+.*"
     },
     "ListControlOperationsOutput":{
       "type":"structure",
@@ -1763,17 +1905,17 @@
           "shape":"EnabledBaselineFilter",
           "documentation":"<p>A filter applied on the <code>ListEnabledBaseline</code> operation. Allowed filters are <code>baselineIdentifiers</code> and <code>targetIdentifiers</code>. The filter can be applied for either, or both.</p>"
         },
-        "includeChildren":{
-          "shape":"Boolean",
-          "documentation":"<p>A value that can be set to include the child enabled baselines in responses. The default value is false.</p>"
+        "nextToken":{
+          "shape":"ListEnabledBaselinesNextToken",
+          "documentation":"<p>A pagination token.</p>"
         },
         "maxResults":{
           "shape":"ListEnabledBaselinesMaxResults",
           "documentation":"<p>The maximum number of results to be shown.</p>"
         },
-        "nextToken":{
-          "shape":"ListEnabledBaselinesNextToken",
-          "documentation":"<p>A pagination token.</p>"
+        "includeChildren":{
+          "shape":"Boolean",
+          "documentation":"<p>A value that can be set to include the child enabled baselines in responses. The default value is false.</p>"
         }
       }
     },
@@ -1785,7 +1927,7 @@
     },
     "ListEnabledBaselinesNextToken":{
       "type":"string",
-      "pattern":"\\S+"
+      "pattern":".*\\S+.*"
     },
     "ListEnabledBaselinesOutput":{
       "type":"structure",
@@ -1804,21 +1946,25 @@
     "ListEnabledControlsInput":{
       "type":"structure",
       "members":{
-        "filter":{
-          "shape":"EnabledControlFilter",
-          "documentation":"<p>An input filter for the <code>ListEnabledControls</code> API that lets you select the types of control operations to view.</p>"
+        "targetIdentifier":{
+          "shape":"TargetIdentifier",
+          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to continue the list from a previous API call with the same parameters.</p>"
         },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>How many results to return per API call.</p>"
         },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>The token to continue the list from a previous API call with the same parameters.</p>"
+        "filter":{
+          "shape":"EnabledControlFilter",
+          "documentation":"<p>An input filter for the <code>ListEnabledControls</code> API that lets you select the types of control operations to view.</p>"
         },
-        "targetIdentifier":{
-          "shape":"TargetIdentifier",
-          "documentation":"<p>The ARN of the organizational unit. For information on how to find the <code>targetIdentifier</code>, see <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/Welcome.html\">the overview page</a>.</p>"
+        "includeChildren":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value that determines whether to include enabled controls from child organizational units in the response.</p>"
         }
       }
     },
@@ -1843,13 +1989,13 @@
           "shape":"LandingZoneOperationFilter",
           "documentation":"<p>An input filter for the <code>ListLandingZoneOperations</code> API that lets you select the types of landing zone operations to view.</p>"
         },
-        "maxResults":{
-          "shape":"ListLandingZoneOperationsMaxResults",
-          "documentation":"<p>How many results to return per API call.</p>"
-        },
         "nextToken":{
           "shape":"String",
           "documentation":"<p>The token to continue the list from a previous API call with the same parameters.</p>"
+        },
+        "maxResults":{
+          "shape":"ListLandingZoneOperationsMaxResults",
+          "documentation":"<p>How many results to return per API call.</p>"
         }
       }
     },
@@ -1876,13 +2022,13 @@
     "ListLandingZonesInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListLandingZonesMaxResults",
-          "documentation":"<p>The maximum number of returned landing zone ARNs, which is one.</p>"
-        },
         "nextToken":{
           "shape":"String",
           "documentation":"<p>The token to continue the list from a previous API call with the same parameters.</p>"
+        },
+        "maxResults":{
+          "shape":"ListLandingZonesMaxResults",
+          "documentation":"<p>The maximum number of returned landing zone ARNs, which is one.</p>"
         }
       }
     },
@@ -1936,8 +2082,7 @@
     },
     "Manifest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "MaxResults":{
@@ -1950,7 +2095,19 @@
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
+    "ParentIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws[0-9a-zA-Z_\\-:\\/]+"
+    },
+    "ParentIdentifiers":{
+      "type":"list",
+      "member":{"shape":"ParentIdentifier"},
+      "max":1,
+      "min":1
     },
     "Region":{
       "type":"structure",
@@ -1967,6 +2124,16 @@
       "max":50,
       "min":1
     },
+    "RemediationType":{
+      "type":"string",
+      "enum":["INHERITANCE_DRIFT"]
+    },
+    "RemediationTypes":{
+      "type":"list",
+      "member":{"shape":"RemediationType"},
+      "max":1,
+      "min":1
+    },
     "ResetEnabledBaselineInput":{
       "type":"structure",
       "required":["enabledBaselineIdentifier"],
@@ -2046,7 +2213,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The request would cause a service quota to be exceeded. The limit is 10 concurrent operations.</p>",
+      "documentation":"<p>The request would cause a service quota to be exceeded. See <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/request-an-increase.html\">Service quotas</a>.</p>",
       "error":{
         "httpStatusCode":402,
         "senderFault":true
@@ -2097,8 +2264,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2109,7 +2275,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[0-9a-zA-Z_\\-:\\/]+$"
+      "pattern":"arn:aws[0-9a-zA-Z_\\-:\\/]+"
     },
     "TargetIdentifiers":{
       "type":"list",
@@ -2126,6 +2292,10 @@
       "required":["message"],
       "members":{
         "message":{"shape":"String"},
+        "serviceCode":{
+          "shape":"String",
+          "documentation":"<p>The ID of the service that is associated with the error.</p>"
+        },
         "quotaCode":{
           "shape":"String",
           "documentation":"<p>The ID of the service quota that was exceeded.</p>"
@@ -2135,10 +2305,6 @@
           "documentation":"<p>The number of seconds the caller should wait before retrying.</p>",
           "location":"header",
           "locationName":"Retry-After"
-        },
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>The ID of the service that is associated with the error.</p>"
         }
       },
       "documentation":"<p>The request was denied due to request throttling.</p>",
@@ -2176,8 +2342,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEnabledBaselineInput":{
       "type":"structure",
@@ -2190,13 +2355,13 @@
           "shape":"BaselineVersion",
           "documentation":"<p>Specifies the new <code>Baseline</code> version, to which the <code>EnabledBaseline</code> should be updated.</p>"
         },
-        "enabledBaselineIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p>Specifies the <code>EnabledBaseline</code> resource to be updated.</p>"
-        },
         "parameters":{
           "shape":"EnabledBaselineParameters",
           "documentation":"<p>Parameters to apply when making an update.</p>"
+        },
+        "enabledBaselineIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p>Specifies the <code>EnabledBaseline</code> resource to be updated.</p>"
         }
       }
     },
@@ -2213,17 +2378,17 @@
     "UpdateEnabledControlInput":{
       "type":"structure",
       "required":[
-        "enabledControlIdentifier",
-        "parameters"
+        "parameters",
+        "enabledControlIdentifier"
       ],
       "members":{
-        "enabledControlIdentifier":{
-          "shape":"Arn",
-          "documentation":"<p> The ARN of the enabled control that will be updated. </p>"
-        },
         "parameters":{
           "shape":"EnabledControlParameters",
           "documentation":"<p>A key/value pair, where <code>Key</code> is of type <code>String</code> and <code>Value</code> is of type <code>Document</code>.</p>"
+        },
+        "enabledControlIdentifier":{
+          "shape":"Arn",
+          "documentation":"<p> The ARN of the enabled control that will be updated. </p>"
         }
       }
     },
@@ -2240,22 +2405,26 @@
     "UpdateLandingZoneInput":{
       "type":"structure",
       "required":[
-        "landingZoneIdentifier",
+        "version",
         "manifest",
-        "version"
+        "landingZoneIdentifier"
       ],
       "members":{
-        "landingZoneIdentifier":{
-          "shape":"String",
-          "documentation":"<p>The unique identifier of the landing zone.</p>"
+        "version":{
+          "shape":"LandingZoneVersion",
+          "documentation":"<p>The landing zone version, for example, 3.2.</p>"
         },
         "manifest":{
           "shape":"Manifest",
           "documentation":"<p>The manifest file (JSON) is a text file that describes your Amazon Web Services resources. For an example, review <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-api-launch\">Launch your landing zone</a>. The example manifest file contains each of the available parameters. The schema for the landing zone's JSON manifest file is not published, by design.</p>"
         },
-        "version":{
-          "shape":"LandingZoneVersion",
-          "documentation":"<p>The landing zone version, for example, 3.2.</p>"
+        "remediationTypes":{
+          "shape":"RemediationTypes",
+          "documentation":"<p>Specifies the types of remediation actions to apply when updating the landing zone configuration.</p>"
+        },
+        "landingZoneIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the landing zone.</p>"
         }
       }
     },
@@ -2283,5 +2452,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>Amazon Web Services Control Tower offers application programming interface (API) operations that support programmatic interaction with these types of resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/controls.html\"> <i>Controls</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DisableControl.html\">DisableControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_EnableControl.html\">EnableControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetEnabledControl.html\">GetEnabledControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListControlOperations.html\">ListControlOperations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListEnabledControls.html\">ListEnabledControls</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateEnabledControl.html\">UpdateEnabledControl</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-api-launch.html\"> <i>Landing zones</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_CreateLandingZone.html\">CreateLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DeleteLandingZone.html\">DeleteLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetLandingZone.html\">GetLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetLandingZoneOperation.html\">GetLandingZoneOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListLandingZones.html\">ListLandingZones</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListLandingZoneOperations.html\">ListLandingZoneOperations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ResetLandingZone.html\">ResetLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateLandingZone.html\">UpdateLandingZone</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/types-of-baselines.html\"> <i>Baselines</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DisableBaseline.html\">DisableBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_EnableBaseline.html\">EnableBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetBaseline.html\">GetBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetBaselineOperation.html\">GetBaselineOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetEnabledBaseline.html\">GetEnabledBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListBaselines.html\">ListBaselines</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListEnabledBaselines.html\">ListEnabledBaselines</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ResetEnabledBaseline.html\">ResetEnabledBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateEnabledBaseline.html\">UpdateEnabledBaseline</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/tagging.html\"> <i>Tagging</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListTagsForResource.html\">ListTagsForResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_TagResource.html\">TagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UntagResource.html\">UntagResource</a> </p> </li> </ul> </li> </ul> <p>For more information about these types of resources, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html\"> <i>Amazon Web Services Control Tower User Guide</i> </a>.</p> <p> <b>About control APIs</b> </p> <p>These interfaces allow you to apply the Amazon Web Services library of pre-defined <i>controls</i> to your organizational units, programmatically. In Amazon Web Services Control Tower, the terms \"control\" and \"guardrail\" are synonyms.</p> <p>To call these APIs, you'll need to know:</p> <ul> <li> <p>the <code>controlIdentifier</code> for the control--or guardrail--you are targeting.</p> </li> <li> <p>the ARN associated with the target organizational unit (OU), which we call the <code>targetIdentifier</code>.</p> </li> <li> <p>the ARN associated with a resource that you wish to tag or untag.</p> </li> </ul> <p> <b>To get the <code>controlIdentifier</code> for your Amazon Web Services Control Tower control:</b> </p> <p>The <code>controlIdentifier</code> is an ARN that is specified for each control. You can view the <code>controlIdentifier</code> in the console on the <b>Control details</b> page, as well as in the documentation.</p> <p> <b>About identifiers for Amazon Web Services Control Tower</b> </p> <p>The Amazon Web Services Control Tower <code>controlIdentifier</code> is unique in each Amazon Web Services Region for each control. You can find the <code>controlIdentifier</code> for each Region and control in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html\">Tables of control metadata</a> or the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-region-tables.html\">Control availability by Region tables</a> in the <i>Amazon Web Services Control Tower Controls Reference Guide</i>.</p> <p>A quick-reference list of control identifers for the Amazon Web Services Control Tower legacy <i>Strongly recommended</i> and <i>Elective</i> controls is given in <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html.html\">Resource identifiers for APIs and controls</a> in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html\"> <i>Amazon Web Services Control Tower Controls Reference Guide</i> </a>. Remember that <i>Mandatory</i> controls cannot be added or removed.</p> <note> <p> <b>Some controls have two identifiers</b> </p> <ul> <li> <p> <b>ARN format for Amazon Web Services Control Tower:</b> <code>arn:aws:controltower:{REGION}::control/{CONTROL_TOWER_OPAQUE_ID}</code> </p> <p> <b>Example:</b> </p> <p> <code>arn:aws:controltower:us-west-2::control/AWS-GR_AUTOSCALING_LAUNCH_CONFIG_PUBLIC_IP_DISABLED</code> </p> </li> <li> <p> <b>ARN format for Amazon Web Services Control Catalog:</b> <code>arn:{PARTITION}:controlcatalog:::control/{CONTROL_CATALOG_OPAQUE_ID}</code> </p> </li> </ul> <p>You can find the <code>{CONTROL_CATALOG_OPAQUE_ID}</code> in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html\"> <i>Amazon Web Services Control Tower Controls Reference Guide</i> </a>, or in the Amazon Web Services Control Tower console, on the <b>Control details</b> page.</p> <p>The Amazon Web Services Control Tower APIs for enabled controls, such as <code>GetEnabledControl</code> and <code>ListEnabledControls</code> always return an ARN of the same type given when the control was enabled.</p> </note> <p> <b>To get the <code>targetIdentifier</code>:</b> </p> <p>The <code>targetIdentifier</code> is the ARN for an OU.</p> <p>In the Amazon Web Services Organizations console, you can find the ARN for the OU on the <b>Organizational unit details</b> page associated with that OU.</p> <note> <p> <b>OU ARN format:</b> </p> <p> <code>arn:${Partition}:organizations::${MasterAccountId}:ou/o-${OrganizationId}/ou-${OrganizationalUnitId}</code> </p> </note> <p> <b> About landing zone APIs</b> </p> <p>You can configure and launch an Amazon Web Services Control Tower landing zone with APIs. For an introduction and steps, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-apis.html\">Getting started with Amazon Web Services Control Tower using APIs</a>.</p> <p>For an overview of landing zone API operations, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#landing-zone-apis\"> Amazon Web Services Control Tower supports landing zone APIs</a>. The individual API operations for landing zones are detailed in this document, the <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_Operations.html\">API reference manual</a>, in the \"Actions\" section.</p> <p> <b>About baseline APIs</b> </p> <p>You can apply the <code>AWSControlTowerBaseline</code> baseline to an organizational unit (OU) as a way to register the OU with Amazon Web Services Control Tower, programmatically. For a general overview of this capability, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/2024-all.html#baseline-apis\">Amazon Web Services Control Tower supports APIs for OU registration and configuration with baselines</a>.</p> <p>You can call the baseline API operations to view the baselines that Amazon Web Services Control Tower enables for your landing zone, on your behalf, when setting up the landing zone. These baselines are read-only baselines.</p> <p>The individual API operations for baselines are detailed in this document, the <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_Operations.html\">API reference manual</a>, in the \"Actions\" section. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\">Baseline API input and output examples with CLI</a>.</p> <p> <b> About Amazon Web Services Control Catalog identifiers</b> </p> <ul> <li> <p>The <code>EnableControl</code> and <code>DisableControl</code> API operations can be called by specifying either the Amazon Web Services Control Tower identifer or the Amazon Web Services Control Catalog identifier. The API response returns the same type of identifier that you specified when calling the API.</p> </li> <li> <p>If you use an Amazon Web Services Control Tower identifier to call the <code>EnableControl</code> API, and then call <code>EnableControl</code> again with an Amazon Web Services Control Catalog identifier, Amazon Web Services Control Tower returns an error message stating that the control is already enabled. Similar behavior applies to the <code>DisableControl</code> API operation. </p> </li> <li> <p>Mandatory controls and the landing-zone-level Region deny control have Amazon Web Services Control Tower identifiers only.</p> </li> </ul> <p class=\"title\"> <b>Details and examples</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\">Control API input and output examples with CLI</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\">Baseline API input and output examples with CLI</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/enable-controls.html\">Enable controls with CloudFormation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-apis-cfn-setup.html\">Launch a landing zone with CloudFormation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html\">Control metadata tables (large page)</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-region-tables.html\">Control availability by Region tables (large page)</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html\">List of identifiers for legacy controls</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html\">Controls reference guide</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/controls-reference.html\">Controls library groupings</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/creating-resources-with-cloudformation.html\">Creating Amazon Web Services Control Tower resources with Amazon Web Services CloudFormation</a> </p> </li> </ul> <p>To view the open source resource repository on GitHub, see <a href=\"https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-controltower\">aws-cloudformation/aws-cloudformation-resource-providers-controltower</a> </p> <p> <b>Recording API Requests</b> </p> <p>Amazon Web Services Control Tower supports Amazon Web Services CloudTrail, a service that records Amazon Web Services API calls for your Amazon Web Services account and delivers log files to an Amazon S3 bucket. By using information collected by CloudTrail, you can determine which requests the Amazon Web Services Control Tower service received, who made the request and when, and so on. For more about Amazon Web Services Control Tower and its support for CloudTrail, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/logging-using-cloudtrail.html\">Logging Amazon Web Services Control Tower Actions with Amazon Web Services CloudTrail</a> in the Amazon Web Services Control Tower User Guide. To learn more about CloudTrail, including how to turn it on and find your log files, see the Amazon Web Services CloudTrail User Guide.</p>"
+  "documentation":"<p>Amazon Web Services Control Tower offers application programming interface (API) operations that support programmatic interaction with these types of resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/controls.html\"> <i>Controls</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DisableControl.html\">DisableControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_EnableControl.html\">EnableControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetEnabledControl.html\">GetEnabledControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetControlOperation.html\">GetControlOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListControlOperations.html\">ListControlOperations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListEnabledControls.html\">ListEnabledControls</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ResetEnabledControl.html\">ResetEnabledControl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateEnabledControl.html\">UpdateEnabledControl</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-api-launch.html\"> <i>Landing zones</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_CreateLandingZone.html\">CreateLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DeleteLandingZone.html\">DeleteLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetLandingZone.html\">GetLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetLandingZoneOperation.html\">GetLandingZoneOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListLandingZones.html\">ListLandingZones</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListLandingZoneOperations.html\">ListLandingZoneOperations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ResetLandingZone.html\">ResetLandingZone</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateLandingZone.html\">UpdateLandingZone</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/types-of-baselines.html\"> <i>Baselines</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_DisableBaseline.html\">DisableBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_EnableBaseline.html\">EnableBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetBaseline.html\">GetBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetBaselineOperation.html\">GetBaselineOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_GetEnabledBaseline.html\">GetEnabledBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListBaselines.html\">ListBaselines</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListEnabledBaselines.html\">ListEnabledBaselines</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ResetEnabledBaseline.html\">ResetEnabledBaseline</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UpdateEnabledBaseline.html\">UpdateEnabledBaseline</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/tagging.html\"> <i>Tagging</i> </a> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_ListTagsForResource.html\">ListTagsForResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_TagResource.html\">TagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_UntagResource.html\">UntagResource</a> </p> </li> </ul> </li> </ul> <p>For more information about these types of resources, see the <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html\"> <i>Amazon Web Services Control Tower User Guide</i> </a>.</p> <p> <b>About control APIs</b> </p> <p>These interfaces allow you to apply the Amazon Web Services library of pre-defined <i>controls</i> to your organizational units, programmatically. In Amazon Web Services Control Tower, the terms \"control\" and \"guardrail\" are synonyms.</p> <p>To call these APIs, you'll need to know:</p> <ul> <li> <p>the <code>controlIdentifier</code> for the control--or guardrail--you are targeting.</p> </li> <li> <p>the ARN associated with the target organizational unit (OU), which we call the <code>targetIdentifier</code>.</p> </li> <li> <p>the ARN associated with a resource that you wish to tag or untag.</p> </li> </ul> <p> <b>To get the <code>controlIdentifier</code> for your Amazon Web Services Control Tower control:</b> </p> <p>The <code>controlIdentifier</code> is an ARN that is specified for each control. You can view the <code>controlIdentifier</code> in the console on the <b>Control details</b> page, as well as in the documentation.</p> <p> <b>About identifiers for Amazon Web Services Control Tower</b> </p> <p>The Amazon Web Services Control Tower <code>controlIdentifier</code> is unique in each Amazon Web Services Region for each control. You can find the <code>controlIdentifier</code> for each Region and control in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html\">Tables of control metadata</a> or the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-region-tables.html\">Control availability by Region tables</a> in the <i>Amazon Web Services Control Tower Controls Reference Guide</i>.</p> <p>A quick-reference list of control identifers for the Amazon Web Services Control Tower legacy <i>Strongly recommended</i> and <i>Elective</i> controls is given in <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html.html\">Resource identifiers for APIs and controls</a> in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html\"> <i>Amazon Web Services Control Tower Controls Reference Guide</i> </a>. Remember that <i>Mandatory</i> controls cannot be added or removed.</p> <note> <p> <b>Some controls have two identifiers</b> </p> <ul> <li> <p> <b>ARN format for Amazon Web Services Control Tower:</b> <code>arn:aws:controltower:{REGION}::control/{CONTROL_TOWER_OPAQUE_ID}</code> </p> <p> <b>Example:</b> </p> <p> <code>arn:aws:controltower:us-west-2::control/AWS-GR_AUTOSCALING_LAUNCH_CONFIG_PUBLIC_IP_DISABLED</code> </p> </li> <li> <p> <b>ARN format for Amazon Web Services Control Catalog:</b> <code>arn:{PARTITION}:controlcatalog:::control/{CONTROL_CATALOG_OPAQUE_ID}</code> </p> </li> </ul> <p>You can find the <code>{CONTROL_CATALOG_OPAQUE_ID}</code> in the <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html\"> <i>Amazon Web Services Control Tower Controls Reference Guide</i> </a>, or in the Amazon Web Services Control Tower console, on the <b>Control details</b> page.</p> <p>The Amazon Web Services Control Tower APIs for enabled controls, such as <code>GetEnabledControl</code> and <code>ListEnabledControls</code> always return an ARN of the same type given when the control was enabled.</p> </note> <p> <b>To get the <code>targetIdentifier</code>:</b> </p> <p>The <code>targetIdentifier</code> is the ARN for an OU.</p> <p>In the Amazon Web Services Organizations console, you can find the ARN for the OU on the <b>Organizational unit details</b> page associated with that OU.</p> <note> <p> <b>OU ARN format:</b> </p> <p> <code>arn:${Partition}:organizations::${MasterAccountId}:ou/o-${OrganizationId}/ou-${OrganizationalUnitId}</code> </p> </note> <p> <b> About landing zone APIs</b> </p> <p>You can configure and launch an Amazon Web Services Control Tower landing zone with APIs. For an introduction and steps, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-apis.html\">Getting started with Amazon Web Services Control Tower using APIs</a>.</p> <p>For an overview of landing zone API operations, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#landing-zone-apis\"> Amazon Web Services Control Tower supports landing zone APIs</a>. The individual API operations for landing zones are detailed in this document, the <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_Operations.html\">API reference manual</a>, in the \"Actions\" section.</p> <p> <b>About baseline APIs</b> </p> <p>You can apply the <code>AWSControlTowerBaseline</code> baseline to an organizational unit (OU) as a way to register the OU with Amazon Web Services Control Tower, programmatically. For a general overview of this capability, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/2024-all.html#baseline-apis\">Amazon Web Services Control Tower supports APIs for OU registration and configuration with baselines</a>.</p> <p>You can call the baseline API operations to view the baselines that Amazon Web Services Control Tower enables for your landing zone, on your behalf, when setting up the landing zone. These baselines are read-only baselines.</p> <p>The individual API operations for baselines are detailed in this document, the <a href=\"https://docs.aws.amazon.com/controltower/latest/APIReference/API_Operations.html\">API reference manual</a>, in the \"Actions\" section. For usage examples, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\">Baseline API input and output examples with CLI</a>.</p> <p> <b> About Amazon Web Services Control Catalog identifiers</b> </p> <ul> <li> <p>The <code>EnableControl</code> and <code>DisableControl</code> API operations can be called by specifying either the Amazon Web Services Control Tower identifer or the Amazon Web Services Control Catalog identifier. The API response returns the same type of identifier that you specified when calling the API.</p> </li> <li> <p>If you use an Amazon Web Services Control Tower identifier to call the <code>EnableControl</code> API, and then call <code>EnableControl</code> again with an Amazon Web Services Control Catalog identifier, Amazon Web Services Control Tower returns an error message stating that the control is already enabled. Similar behavior applies to the <code>DisableControl</code> API operation. </p> </li> <li> <p>Mandatory controls and the landing-zone-level Region deny control have Amazon Web Services Control Tower identifiers only.</p> </li> </ul> <p class=\"title\"> <b>Details and examples</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-api-examples-short.html\">Control API input and output examples with CLI</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/baseline-api-examples.html\">Baseline API input and output examples with CLI</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/enable-controls.html\">Enable controls with CloudFormation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/lz-apis-cfn-setup.html\">Launch a landing zone with CloudFormation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html\">Control metadata tables (large page)</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-region-tables.html\">Control availability by Region tables (large page)</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/control-identifiers.html\">List of identifiers for legacy controls</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html\">Controls reference guide</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/controlreference/controls-reference.html\">Controls library groupings</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/creating-resources-with-cloudformation.html\">Creating Amazon Web Services Control Tower resources with Amazon Web Services CloudFormation</a> </p> </li> </ul> <p>To view the open source resource repository on GitHub, see <a href=\"https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-controltower\">aws-cloudformation/aws-cloudformation-resource-providers-controltower</a> </p> <p> <b>Recording API Requests</b> </p> <p>Amazon Web Services Control Tower supports Amazon Web Services CloudTrail, a service that records Amazon Web Services API calls for your Amazon Web Services account and delivers log files to an Amazon S3 bucket. By using information collected by CloudTrail, you can determine which requests the Amazon Web Services Control Tower service received, who made the request and when, and so on. For more about Amazon Web Services Control Tower and its support for CloudTrail, see <a href=\"https://docs.aws.amazon.com/controltower/latest/userguide/logging-using-cloudtrail.html\">Logging Amazon Web Services Control Tower Actions with Amazon Web Services CloudTrail</a> in the Amazon Web Services Control Tower User Guide. To learn more about CloudTrail, including how to turn it on and find your log files, see the Amazon Web Services CloudTrail User Guide.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/waiters-2.json 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/controltower/2018-05-10/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/controltower/2018-05-10/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json 2.31.35-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cost-optimization-hub/2022-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -184,7 +184,8 @@
         "PurchaseSavingsPlans",
         "PurchaseReservedInstances",
         "MigrateToGraviton",
-        "Delete"
+        "Delete",
+        "ScaleIn"
       ]
     },
     "ActionTypeList":{
@@ -193,6 +194,34 @@
       "max":100,
       "min":1
     },
+    "AllocationStrategy":{
+      "type":"string",
+      "enum":[
+        "Prioritized",
+        "LowestPrice"
+      ]
+    },
+    "AuroraDbClusterStorage":{
+      "type":"structure",
+      "members":{
+        "configuration":{
+          "shape":"AuroraDbClusterStorageConfiguration",
+          "documentation":"<p>The Aurora DB cluster storage configuration used for recommendations.</p>"
+        },
+        "costCalculation":{"shape":"ResourceCostCalculation"}
+      },
+      "documentation":"<p>Contains the details of an Aurora DB cluster storage.</p>"
+    },
+    "AuroraDbClusterStorageConfiguration":{
+      "type":"structure",
+      "members":{
+        "storageType":{
+          "shape":"String",
+          "documentation":"<p>The storage type to associate with the Aurora DB cluster.</p>"
+        }
+      },
+      "documentation":"<p>The Aurora DB cluster storage configuration used for recommendations.</p>"
+    },
     "BlockStoragePerformanceConfiguration":{
       "type":"structure",
       "members":{
@@ -252,7 +281,7 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for. Amazon Web Services calculates recommendations including the management account and member accounts if the value is set to <code>PAYER</code>. If the value is <code>LINKED</code>, recommendations are calculated for individual member accounts only.</p>"
+          "documentation":"<p>The account scope for which you want recommendations. Amazon Web Services calculates recommendations including the management account and member accounts if the value is set to <code>PAYER</code>. If the value is <code>LINKED</code>, recommendations are calculated for individual member accounts only.</p>"
         },
         "term":{
           "shape":"String",
@@ -284,6 +313,59 @@
       "type":"double",
       "box":true
     },
+    "DynamoDbReservedCapacity":{
+      "type":"structure",
+      "members":{
+        "configuration":{
+          "shape":"DynamoDbReservedCapacityConfiguration",
+          "documentation":"<p>The DynamoDB reserved capacity configuration used for recommendations.</p>"
+        },
+        "costCalculation":{"shape":"ReservedInstancesCostCalculation"}
+      },
+      "documentation":"<p>The DynamoDB reserved capacity recommendation details.</p>"
+    },
+    "DynamoDbReservedCapacityConfiguration":{
+      "type":"structure",
+      "members":{
+        "accountScope":{
+          "shape":"String",
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
+        },
+        "service":{
+          "shape":"String",
+          "documentation":"<p>The service for which you want recommendations.</p>"
+        },
+        "term":{
+          "shape":"String",
+          "documentation":"<p>The reserved capacity recommendation term in years.</p>"
+        },
+        "paymentOption":{
+          "shape":"String",
+          "documentation":"<p>The payment option for the commitment.</p>"
+        },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this reserved capacity costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this reserved capacity costs you on a monthly basis.</p>"
+        },
+        "numberOfCapacityUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of reserved capacity units that Amazon Web Services recommends that you purchase.</p>"
+        },
+        "capacityUnits":{
+          "shape":"String",
+          "documentation":"<p>The capacity unit of the recommended reservation.</p>"
+        }
+      },
+      "documentation":"<p>The DynamoDB reserved capacity configuration used for recommendations.</p>"
+    },
     "EbsVolume":{
       "type":"structure",
       "members":{
@@ -335,10 +417,29 @@
       "members":{
         "instance":{
           "shape":"InstanceConfiguration",
-          "documentation":"<p>Details about the instance.</p>"
+          "documentation":"<p>Details about the instance for the EC2 Auto Scaling group with a single instance type.</p>"
+        },
+        "mixedInstances":{
+          "shape":"MixedInstanceConfigurationList",
+          "documentation":"<p>A list of instance types for an EC2 Auto Scaling group with mixed instance types.</p>"
+        },
+        "type":{
+          "shape":"Ec2AutoScalingGroupType",
+          "documentation":"<p>The type of EC2 Auto Scaling group, showing whether it consists of a single instance type or mixed instance types.</p>"
+        },
+        "allocationStrategy":{
+          "shape":"AllocationStrategy",
+          "documentation":"<p>The strategy used for allocating instances, based on a predefined priority order or based on the lowest available price.</p>"
         }
       },
-      "documentation":"<p>The EC2 auto scaling group configuration used for recommendations.</p>"
+      "documentation":"<p>The EC2 Auto Scaling group configuration used for recommendations.</p>"
+    },
+    "Ec2AutoScalingGroupType":{
+      "type":"string",
+      "enum":[
+        "SingleInstanceType",
+        "MixedInstanceTypes"
+      ]
     },
     "Ec2Instance":{
       "type":"structure",
@@ -383,7 +484,7 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -427,15 +528,11 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "service":{
           "shape":"String",
-          "documentation":"<p>The service that you want your recommendations for.</p>"
-        },
-        "normalizedUnitsToPurchase":{
-          "shape":"String",
-          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+          "documentation":"<p>The service for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -445,6 +542,22 @@
           "shape":"String",
           "documentation":"<p>The payment option for the commitment.</p>"
         },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
         "numberOfInstancesToPurchase":{
           "shape":"String",
           "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
@@ -461,10 +574,6 @@
           "shape":"String",
           "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
         },
-        "reservedInstancesRegion":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
-        },
         "currentGeneration":{
           "shape":"String",
           "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
@@ -480,14 +589,6 @@
         "sizeFlexEligible":{
           "shape":"Boolean",
           "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
-        },
-        "upfrontCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
-        },
-        "monthlyRecurringCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing reserved instances costs you on a monthly basis.</p>"
         }
       },
       "documentation":"<p>The EC2 reserved instances configuration used for recommendations.</p>"
@@ -535,15 +636,11 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "service":{
           "shape":"String",
-          "documentation":"<p>The service that you want your recommendations for.</p>"
-        },
-        "normalizedUnitsToPurchase":{
-          "shape":"String",
-          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+          "documentation":"<p>The service for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -553,6 +650,22 @@
           "shape":"String",
           "documentation":"<p>The payment option for the commitment.</p>"
         },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
         "numberOfInstancesToPurchase":{
           "shape":"String",
           "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
@@ -565,10 +678,6 @@
           "shape":"String",
           "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
         },
-        "reservedInstancesRegion":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
-        },
         "currentGeneration":{
           "shape":"String",
           "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
@@ -576,14 +685,6 @@
         "sizeFlexEligible":{
           "shape":"Boolean",
           "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
-        },
-        "upfrontCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
-        },
-        "monthlyRecurringCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing reserved instances costs you on a monthly basis.</p>"
         }
       },
       "documentation":"<p>The ElastiCache reserved instances configuration used for recommendations.</p>"
@@ -630,7 +731,7 @@
         },
         "accountIds":{
           "shape":"AccountIdList",
-          "documentation":"<p>The account that the recommendation is for.</p>"
+          "documentation":"<p>The account to which the recommendation applies.</p>"
         },
         "regions":{
           "shape":"RegionList",
@@ -678,6 +779,10 @@
         "memberAccountDiscountVisibility":{
           "shape":"MemberAccountDiscountVisibility",
           "documentation":"<p>Retrieves the status of the \"member account discount visibility\" preference.</p>"
+        },
+        "preferredCommitment":{
+          "shape":"PreferredCommitment",
+          "documentation":"<p>Retrieves the current preferences for how Reserved Instances and Savings Plans cost-saving opportunities are prioritized in terms of payment option and term length.</p>"
         }
       }
     },
@@ -708,7 +813,7 @@
         },
         "accountId":{
           "shape":"String",
-          "documentation":"<p>The account that the recommendation is for.</p>"
+          "documentation":"<p>The account to which the recommendation applies.</p>"
         },
         "currencyCode":{
           "shape":"String",
@@ -809,10 +914,10 @@
       "members":{
         "type":{
           "shape":"String",
-          "documentation":"<p>Details about the type.</p>"
+          "documentation":"<p>The instance type of the configuration.</p>"
         }
       },
-      "documentation":"<p>The Instance configuration used for recommendations.</p>"
+      "documentation":"<p>The instance configuration used for recommendations.</p>"
     },
     "Integer":{
       "type":"integer",
@@ -1005,6 +1110,89 @@
         "None"
       ]
     },
+    "MemoryDbReservedInstances":{
+      "type":"structure",
+      "members":{
+        "configuration":{
+          "shape":"MemoryDbReservedInstancesConfiguration",
+          "documentation":"<p>The MemoryDB reserved instances configuration used for recommendations.</p>"
+        },
+        "costCalculation":{"shape":"ReservedInstancesCostCalculation"}
+      },
+      "documentation":"<p>The MemoryDB reserved instances recommendation details.</p> <note> <p>While the API reference uses \"MemoryDB reserved instances\", the user guide and other documentation refer to them as \"MemoryDB reserved nodes\", as the terms are used interchangeably.</p> </note>"
+    },
+    "MemoryDbReservedInstancesConfiguration":{
+      "type":"structure",
+      "members":{
+        "accountScope":{
+          "shape":"String",
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
+        },
+        "service":{
+          "shape":"String",
+          "documentation":"<p>The service for which you want recommendations.</p>"
+        },
+        "term":{
+          "shape":"String",
+          "documentation":"<p>The reserved instances recommendation term in years.</p>"
+        },
+        "paymentOption":{
+          "shape":"String",
+          "documentation":"<p>The payment option for the commitment.</p>"
+        },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
+        "numberOfInstancesToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
+        },
+        "instanceType":{
+          "shape":"String",
+          "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
+        },
+        "instanceFamily":{
+          "shape":"String",
+          "documentation":"<p>The instance family of the recommended reservation.</p>"
+        },
+        "sizeFlexEligible":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
+        },
+        "currentGeneration":{
+          "shape":"String",
+          "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
+        }
+      },
+      "documentation":"<p>The MemoryDB reserved instances configuration used for recommendations.</p> <note> <p>While the API reference uses \"MemoryDB reserved instances\", the user guide and other documentation refer to them as \"MemoryDB reserved nodes\", as the terms are used interchangeably.</p> </note>"
+    },
+    "MixedInstanceConfiguration":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"String",
+          "documentation":"<p>The instance type of the configuration.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the EC2 Auto Scaling group with mixed instance types.</p>"
+    },
+    "MixedInstanceConfigurationList":{
+      "type":"list",
+      "member":{"shape":"MixedInstanceConfiguration"}
+    },
     "OpenSearchReservedInstances":{
       "type":"structure",
       "members":{
@@ -1024,15 +1212,11 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "service":{
           "shape":"String",
-          "documentation":"<p>The service that you want your recommendations for.</p>"
-        },
-        "normalizedUnitsToPurchase":{
-          "shape":"String",
-          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+          "documentation":"<p>The service for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -1042,6 +1226,22 @@
           "shape":"String",
           "documentation":"<p>The payment option for the commitment.</p>"
         },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
         "numberOfInstancesToPurchase":{
           "shape":"String",
           "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
@@ -1050,10 +1250,6 @@
           "shape":"String",
           "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
         },
-        "reservedInstancesRegion":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
-        },
         "currentGeneration":{
           "shape":"String",
           "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
@@ -1061,14 +1257,6 @@
         "sizeFlexEligible":{
           "shape":"Boolean",
           "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
-        },
-        "upfrontCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
-        },
-        "monthlyRecurringCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing reserved instances costs you on a monthly basis.</p>"
         }
       },
       "documentation":"<p>The OpenSearch reserved instances configuration used for recommendations.</p>"
@@ -1094,6 +1282,28 @@
       },
       "documentation":"<p>Defines how rows will be sorted in the response.</p>"
     },
+    "PaymentOption":{
+      "type":"string",
+      "enum":[
+        "AllUpfront",
+        "PartialUpfront",
+        "NoUpfront"
+      ]
+    },
+    "PreferredCommitment":{
+      "type":"structure",
+      "members":{
+        "term":{
+          "shape":"Term",
+          "documentation":"<p>The preferred length of the commitment period. If the value is null, it will default to <code>ThreeYears</code> (highest savings) where applicable.</p>"
+        },
+        "paymentOption":{
+          "shape":"PaymentOption",
+          "documentation":"<p>The preferred upfront payment structure for commitments. If the value is null, it will default to <code>AllUpfront</code> (highest savings) where applicable.</p>"
+        }
+      },
+      "documentation":"<p>The preferred configuration for Reserved Instances and Savings Plans commitment-based discounts, consisting of a payment option and a commitment duration.</p>"
+    },
     "PrimitiveBoolean":{"type":"boolean"},
     "RdsDbInstance":{
       "type":"structure",
@@ -1168,15 +1378,11 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "service":{
           "shape":"String",
-          "documentation":"<p>The service that you want your recommendations for.</p>"
-        },
-        "normalizedUnitsToPurchase":{
-          "shape":"String",
-          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+          "documentation":"<p>The service for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -1186,6 +1392,22 @@
           "shape":"String",
           "documentation":"<p>The payment option for the commitment.</p>"
         },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
         "numberOfInstancesToPurchase":{
           "shape":"String",
           "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
@@ -1198,10 +1420,6 @@
           "shape":"String",
           "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
         },
-        "reservedInstancesRegion":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
-        },
         "sizeFlexEligible":{
           "shape":"Boolean",
           "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
@@ -1210,14 +1428,6 @@
           "shape":"String",
           "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
         },
-        "upfrontCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
-        },
-        "monthlyRecurringCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you on a monthly basis.</p>"
-        },
         "licenseModel":{
           "shape":"String",
           "documentation":"<p>The license model that the recommended reservation supports.</p>"
@@ -1246,7 +1456,7 @@
         },
         "accountId":{
           "shape":"String",
-          "documentation":"<p>The account that the recommendation is for.</p>"
+          "documentation":"<p>The account to which the recommendation applies.</p>"
         },
         "region":{
           "shape":"String",
@@ -1378,15 +1588,11 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "service":{
           "shape":"String",
-          "documentation":"<p>The service that you want your recommendations for.</p>"
-        },
-        "normalizedUnitsToPurchase":{
-          "shape":"String",
-          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+          "documentation":"<p>The service for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -1396,6 +1602,22 @@
           "shape":"String",
           "documentation":"<p>The payment option for the commitment.</p>"
         },
+        "reservedInstancesRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
+        },
+        "upfrontCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
+        },
+        "monthlyRecurringCost":{
+          "shape":"String",
+          "documentation":"<p>How much purchasing these reserved instances costs you on a monthly basis.</p>"
+        },
+        "normalizedUnitsToPurchase":{
+          "shape":"String",
+          "documentation":"<p>The number of normalized units that Amazon Web Services recommends that you purchase.</p>"
+        },
         "numberOfInstancesToPurchase":{
           "shape":"String",
           "documentation":"<p>The number of instances that Amazon Web Services recommends that you purchase.</p>"
@@ -1408,10 +1630,6 @@
           "shape":"String",
           "documentation":"<p>The type of instance that Amazon Web Services recommends.</p>"
         },
-        "reservedInstancesRegion":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region of the commitment.</p>"
-        },
         "sizeFlexEligible":{
           "shape":"Boolean",
           "documentation":"<p>Determines whether the recommendation is size flexible.</p>"
@@ -1419,14 +1637,6 @@
         "currentGeneration":{
           "shape":"String",
           "documentation":"<p>Determines whether the recommendation is for a current generation instance.</p>"
-        },
-        "upfrontCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing this instance costs you upfront.</p>"
-        },
-        "monthlyRecurringCost":{
-          "shape":"String",
-          "documentation":"<p>How much purchasing reserved instances costs you on a monthly basis.</p>"
         }
       },
       "documentation":"<p>The Redshift reserved instances configuration used for recommendations.</p>"
@@ -1542,7 +1752,7 @@
         },
         "sageMakerSavingsPlans":{
           "shape":"SageMakerSavingsPlans",
-          "documentation":"<p>The SageMaker Savings Plans recommendation details.</p>"
+          "documentation":"<p>The SageMaker AI Savings Plans recommendation details.</p>"
         },
         "rdsDbInstance":{
           "shape":"RdsDbInstance",
@@ -1551,6 +1761,18 @@
         "rdsDbInstanceStorage":{
           "shape":"RdsDbInstanceStorage",
           "documentation":"<p>The DB instance storage recommendation details.</p>"
+        },
+        "auroraDbClusterStorage":{
+          "shape":"AuroraDbClusterStorage",
+          "documentation":"<p>The Aurora DB cluster storage recommendation details.</p>"
+        },
+        "dynamoDbReservedCapacity":{
+          "shape":"DynamoDbReservedCapacity",
+          "documentation":"<p>The DynamoDB reserved capacity recommendation details.</p>"
+        },
+        "memoryDbReservedInstances":{
+          "shape":"MemoryDbReservedInstances",
+          "documentation":"<p>The MemoryDB reserved instances recommendation details.</p>"
         }
       },
       "documentation":"<p>Contains detailed information about the specified resource.</p>",
@@ -1617,7 +1839,10 @@
         "RedshiftReservedInstances",
         "ElastiCacheReservedInstances",
         "RdsDbInstanceStorage",
-        "RdsDbInstance"
+        "RdsDbInstance",
+        "AuroraDbClusterStorage",
+        "DynamoDbReservedCapacity",
+        "MemoryDbReservedInstances"
       ]
     },
     "ResourceTypeList":{
@@ -1645,7 +1870,7 @@
       "members":{
         "accountScope":{
           "shape":"String",
-          "documentation":"<p>The account scope that you want your recommendations for.</p>"
+          "documentation":"<p>The account scope for which you want recommendations.</p>"
         },
         "term":{
           "shape":"String",
@@ -1763,6 +1988,13 @@
       "max":100,
       "min":1
     },
+    "Term":{
+      "type":"string",
+      "enum":[
+        "OneYear",
+        "ThreeYears"
+      ]
+    },
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -1805,6 +2037,10 @@
         "memberAccountDiscountVisibility":{
           "shape":"MemberAccountDiscountVisibility",
           "documentation":"<p>Sets the \"member account discount visibility\" preference.</p>"
+        },
+        "preferredCommitment":{
+          "shape":"PreferredCommitment",
+          "documentation":"<p>Sets the preferences for how Reserved Instances and Savings Plans cost-saving opportunities are prioritized in terms of payment option and term length.</p>"
         }
       }
     },
@@ -1818,6 +2054,10 @@
         "memberAccountDiscountVisibility":{
           "shape":"MemberAccountDiscountVisibility",
           "documentation":"<p>Shows the status of the \"member account discount visibility\" preference.</p>"
+        },
+        "preferredCommitment":{
+          "shape":"PreferredCommitment",
+          "documentation":"<p>Shows the updated preferences for how Reserved Instances and Savings Plans cost-saving opportunities are prioritized in terms of payment option and term length.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cur/2017-01-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/cur/2017-01-06/service-2.json 2.31.35-1/awscli/botocore/data/cur/2017-01-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/cur/2017-01-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/cur/2017-01-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -303,8 +303,7 @@
     },
     "ModifyReportDefinitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutReportDefinitionRequest":{
       "type":"structure",
@@ -323,8 +322,7 @@
     },
     "PutReportDefinitionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "RefreshClosedReports":{
@@ -515,8 +513,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -552,8 +549,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/paginators-1.json 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -35,6 +35,18 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "Items"
+    },
+    "ListDomainLayouts": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListUploadJobs": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/service-2.json 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/customer-profiles/2020-08-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/customer-profiles/2020-08-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -100,6 +100,23 @@
       ],
       "documentation":"<p>Creates a domain, which is a container for all customer data, such as customer profile attributes, object types, profile keys, and encryption keys. You can create multiple domains, and each domain can have multiple third-party integrations.</p> <p>Each Amazon Connect instance can be associated with only one domain. Multiple Amazon Connect instances can be associated with one domain.</p> <p>Use this API or <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UpdateDomain.html\">UpdateDomain</a> to enable <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html\">identity resolution</a>: set <code>Matching</code> to true.</p> <p>To prevent cross-service impersonation when you call this API, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html\">Cross-service confused deputy prevention</a> for sample policies that you should apply. </p> <note> <p>It is not possible to associate a Customer Profiles domain with an Amazon Connect Instance directly from the API. If you would like to create a domain and associate a Customer Profiles domain, use the Amazon Connect admin website. For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-customer-profiles.html#enable-customer-profiles-step1\">Enable Customer Profiles</a>.</p> <p>Each Amazon Connect instance can be associated with only one domain. Multiple Amazon Connect instances can be associated with one domain.</p> </note>"
     },
+    "CreateDomainLayout":{
+      "name":"CreateDomainLayout",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{DomainName}/layouts/{LayoutDefinitionName}"
+      },
+      "input":{"shape":"CreateDomainLayoutRequest"},
+      "output":{"shape":"CreateDomainLayoutResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates the layout to view data for a specific domain. This API can only be invoked from the Amazon Connect admin website.</p>"
+    },
     "CreateEventStream":{
       "name":"CreateEventStream",
       "http":{
@@ -221,6 +238,24 @@
       ],
       "documentation":"<p>Triggers a job to export a segment to a specified destination.</p>"
     },
+    "CreateUploadJob":{
+      "name":"CreateUploadJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{DomainName}/upload-jobs",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateUploadJobRequest"},
+      "output":{"shape":"CreateUploadJobResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Creates an Upload job to ingest data for segment imports. The metadata is created for the job with the provided field mapping and unique key. </p>"
+    },
     "DeleteCalculatedAttributeDefinition":{
       "name":"DeleteCalculatedAttributeDefinition",
       "http":{
@@ -255,6 +290,23 @@
       ],
       "documentation":"<p>Deletes a specific domain and all of its customer data, such as customer profile attributes and their related objects.</p>"
     },
+    "DeleteDomainLayout":{
+      "name":"DeleteDomainLayout",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/domains/{DomainName}/layouts/{LayoutDefinitionName}"
+      },
+      "input":{"shape":"DeleteDomainLayoutRequest"},
+      "output":{"shape":"DeleteDomainLayoutResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes the layout used to view data for a specific domain. This API can only be invoked from the Amazon Connect admin website.</p>"
+    },
     "DeleteEventStream":{
       "name":"DeleteEventStream",
       "http":{
@@ -496,6 +548,23 @@
       ],
       "documentation":"<p>Returns information about a specific domain.</p>"
     },
+    "GetDomainLayout":{
+      "name":"GetDomainLayout",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/layouts/{LayoutDefinitionName}"
+      },
+      "input":{"shape":"GetDomainLayoutRequest"},
+      "output":{"shape":"GetDomainLayoutResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets the layout to view data for a specific domain. This API can only be invoked from the Amazon Connect admin website.</p>"
+    },
     "GetEventStream":{
       "name":"GetEventStream",
       "http":{
@@ -581,6 +650,23 @@
       ],
       "documentation":"<p>Before calling this API, use <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_CreateDomain.html\">CreateDomain</a> or <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UpdateDomain.html\">UpdateDomain</a> to enable identity resolution: set <code>Matching</code> to true.</p> <p>GetMatches returns potentially matching profiles, based on the results of the latest run of a machine learning process. </p> <important> <p>The process of matching duplicate profiles. If <code>Matching</code> = <code>true</code>, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. </p> <p>After the Identity Resolution Job completes, use the <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html\">GetMatches</a> API to return and review the results. Or, if you have configured <code>ExportingConfig</code> in the <code>MatchingRequest</code>, you can download the results from S3.</p> </important> <p>Amazon Connect uses the following profile attributes to identify matches:</p> <ul> <li> <p>PhoneNumber</p> </li> <li> <p>HomePhoneNumber</p> </li> <li> <p>BusinessPhoneNumber</p> </li> <li> <p>MobilePhoneNumber</p> </li> <li> <p>EmailAddress</p> </li> <li> <p>PersonalEmailAddress</p> </li> <li> <p>BusinessEmailAddress</p> </li> <li> <p>FullName</p> </li> </ul> <p>For example, two or more profiles—with spelling mistakes such as <b>John Doe</b> and <b>Jhn Doe</b>, or different casing email addresses such as <b>JOHN_DOE@ANYCOMPANY.COM</b> and <b>johndoe@anycompany.com</b>, or different phone number formats such as <b>555-010-0000</b> and <b>+1-555-010-0000</b>—can be detected as belonging to the same customer <b>John Doe</b> and merged into a unified profile.</p>"
     },
+    "GetProfileHistoryRecord":{
+      "name":"GetProfileHistoryRecord",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/profiles/{ProfileId}/history-records/{Id}"
+      },
+      "input":{"shape":"GetProfileHistoryRecordRequest"},
+      "output":{"shape":"GetProfileHistoryRecordResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a history record for a specific profile, for a specific domain.</p>"
+    },
     "GetProfileObjectType":{
       "name":"GetProfileObjectType",
       "http":{
@@ -631,7 +717,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets a segment definition from the domain.</p>"
+      "documentation":"<p>Gets a segment definition from the domain.</p>",
+      "readonly":true
     },
     "GetSegmentEstimate":{
       "name":"GetSegmentEstimate",
@@ -703,6 +790,44 @@
       ],
       "documentation":"<p>Returns a set of profiles that belong to the same matching group using the <code>matchId</code> or <code>profileId</code>. You can also specify the type of matching that you want for finding similar profiles using either <code>RULE_BASED_MATCHING</code> or <code>ML_BASED_MATCHING</code>.</p>"
     },
+    "GetUploadJob":{
+      "name":"GetUploadJob",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/upload-jobs/{JobId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetUploadJobRequest"},
+      "output":{"shape":"GetUploadJobResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This API retrieves the details of a specific upload job. </p>",
+      "readonly":true
+    },
+    "GetUploadJobPath":{
+      "name":"GetUploadJobPath",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/upload-jobs/{JobId}/path",
+        "responseCode":200
+      },
+      "input":{"shape":"GetUploadJobPathRequest"},
+      "output":{"shape":"GetUploadJobPathResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This API retrieves the pre-signed URL and client token for uploading the file associated with the upload job. </p>",
+      "readonly":true
+    },
     "GetWorkflow":{
       "name":"GetWorkflow",
       "http":{
@@ -788,6 +913,23 @@
       ],
       "documentation":"<p>Retrieve a list of calculated attributes for a customer profile.</p>"
     },
+    "ListDomainLayouts":{
+      "name":"ListDomainLayouts",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/layouts"
+      },
+      "input":{"shape":"ListDomainLayoutsRequest"},
+      "output":{"shape":"ListDomainLayoutsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the existing layouts that can be used to view data for a specific domain. This API can only be invoked from the Amazon Connect admin website.</p>"
+    },
     "ListDomains":{
       "name":"ListDomains",
       "http":{
@@ -907,6 +1049,23 @@
       ],
       "documentation":"<p>Fetch the possible attribute values given the attribute name.</p>"
     },
+    "ListProfileHistoryRecords":{
+      "name":"ListProfileHistoryRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domains/{DomainName}/profiles/history-records"
+      },
+      "input":{"shape":"ListProfileHistoryRecordsRequest"},
+      "output":{"shape":"ListProfileHistoryRecordsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of history records for a specific profile, for a specific domain.</p>"
+    },
     "ListProfileObjectTypeTemplates":{
       "name":"ListProfileObjectTypeTemplates",
       "http":{
@@ -991,7 +1150,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists all segment definitions under a domain.</p>"
+      "documentation":"<p>Lists all segment definitions under a domain.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1008,6 +1168,25 @@
       ],
       "documentation":"<p>Displays the tags associated with an Amazon Connect Customer Profiles resource. In Connect Customer Profiles, domains, profile object types, and integrations can be tagged.</p>"
     },
+    "ListUploadJobs":{
+      "name":"ListUploadJobs",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domains/{DomainName}/upload-jobs",
+        "responseCode":200
+      },
+      "input":{"shape":"ListUploadJobsRequest"},
+      "output":{"shape":"ListUploadJobsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This API retrieves a list of upload jobs for the specified domain. </p>",
+      "readonly":true
+    },
     "ListWorkflows":{
       "name":"ListWorkflows",
       "http":{
@@ -1109,6 +1288,42 @@
       ],
       "documentation":"<p>Searches for profiles within a specific domain using one or more predefined search keys (e.g., _fullName, _phone, _email, _account, etc.) and/or custom-defined search keys. A search key is a data type pair that consists of a <code>KeyName</code> and <code>Values</code> list.</p> <p>This operation supports searching for profiles with a minimum of 1 key-value(s) pair and up to 5 key-value(s) pairs using either <code>AND</code> or <code>OR</code> logic.</p>"
     },
+    "StartUploadJob":{
+      "name":"StartUploadJob",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/domains/{DomainName}/upload-jobs/{JobId}",
+        "responseCode":200
+      },
+      "input":{"shape":"StartUploadJobRequest"},
+      "output":{"shape":"StartUploadJobResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This API starts the processing of an upload job to ingest profile data. </p>"
+    },
+    "StopUploadJob":{
+      "name":"StopUploadJob",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/domains/{DomainName}/upload-jobs/{JobId}/stop",
+        "responseCode":200
+      },
+      "input":{"shape":"StopUploadJobRequest"},
+      "output":{"shape":"StopUploadJobResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This API stops the processing of an upload job. </p>"
+    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -1173,6 +1388,23 @@
       ],
       "documentation":"<p>Updates the properties of a domain, including creating or selecting a dead letter queue or an encryption key.</p> <p>After a domain is created, the name can’t be changed.</p> <p>Use this API or <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_CreateDomain.html\">CreateDomain</a> to enable <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html\">identity resolution</a>: set <code>Matching</code> to true.</p> <p>To prevent cross-service impersonation when you call this API, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html\">Cross-service confused deputy prevention</a> for sample policies that you should apply. </p> <p>To add or remove tags on an existing Domain, see <a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_TagResource.html\">TagResource</a>/<a href=\"https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_UntagResource.html\">UntagResource</a>.</p>"
     },
+    "UpdateDomainLayout":{
+      "name":"UpdateDomainLayout",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/domains/{DomainName}/layouts/{LayoutDefinitionName}"
+      },
+      "input":{"shape":"UpdateDomainLayoutRequest"},
+      "output":{"shape":"UpdateDomainLayoutResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates the layout used to view data for a specific domain. This API can only be invoked from the Amazon Connect admin website.</p>"
+    },
     "UpdateEventTrigger":{
       "name":"UpdateEventTrigger",
       "http":{
@@ -1224,6 +1456,20 @@
       "error":{"httpStatusCode":403},
       "exception":true
     },
+    "ActionType":{
+      "type":"string",
+      "enum":[
+        "ADDED_PROFILE_KEY",
+        "DELETED_PROFILE_KEY",
+        "CREATED",
+        "UPDATED",
+        "INGESTED",
+        "DELETED_BY_CUSTOMER",
+        "EXPIRED",
+        "MERGED",
+        "DELETED_BY_MERGE"
+      ]
+    },
     "AddProfileKeyRequest":{
       "type":"structure",
       "required":[
@@ -1551,7 +1797,7 @@
     "AttributeList":{
       "type":"list",
       "member":{"shape":"AttributeItem"},
-      "max":2,
+      "max":50,
       "min":1
     },
     "AttributeMap":{
@@ -1876,6 +2122,10 @@
         "Value":{
           "shape":"string1To255",
           "documentation":"<p>The value of the calculated attribute.</p>"
+        },
+        "LastObjectTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of the newest object included in the calculated attribute calculation.</p>"
         }
       },
       "documentation":"<p>The object containing the values of a single calculated attribute value.</p>"
@@ -2007,6 +2257,40 @@
       },
       "documentation":"<p>The matching criteria to be used during the auto-merging process. </p>"
     },
+    "ContactPreference":{
+      "type":"structure",
+      "members":{
+        "KeyName":{
+          "shape":"name",
+          "documentation":"<p>A searchable, unique identifier of a customer profile.</p>"
+        },
+        "KeyValue":{
+          "shape":"string1To255",
+          "documentation":"<p>The key value used to look up profile based off the keyName.</p>"
+        },
+        "ProfileId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of a customer profile.</p>"
+        },
+        "ContactType":{
+          "shape":"ContactType",
+          "documentation":"<p>The contact type used for engagement. For example: HomePhoneNumber, PersonalEmailAddress.</p>"
+        }
+      },
+      "documentation":"<p>Object that defines users contact preference.</p>"
+    },
+    "ContactType":{
+      "type":"string",
+      "enum":[
+        "PhoneNumber",
+        "MobilePhoneNumber",
+        "HomePhoneNumber",
+        "BusinessPhoneNumber",
+        "EmailAddress",
+        "PersonalEmailAddress",
+        "BusinessEmailAddress"
+      ]
+    },
     "CreateCalculatedAttributeDefinitionRequest":{
       "type":"structure",
       "required":[
@@ -2052,6 +2336,10 @@
           "shape":"Statistic",
           "documentation":"<p>The aggregation operation to perform for the calculated attribute.</p>"
         },
+        "UseHistoricalData":{
+          "shape":"optionalBoolean",
+          "documentation":"<p>Whether historical data ingested before the Calculated Attribute was created should be included in calculations.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -2097,12 +2385,127 @@
           "shape":"timestamp",
           "documentation":"<p>The timestamp of when the calculated attribute definition was most recently edited.</p>"
         },
+        "UseHistoricalData":{
+          "shape":"optionalBoolean",
+          "documentation":"<p>Whether historical data ingested before the Calculated Attribute was created should be included in calculations.</p>"
+        },
+        "Status":{
+          "shape":"ReadinessStatus",
+          "documentation":"<p>Status of the Calculated Attribute creation (whether all historical data has been indexed.)</p>"
+        },
+        "Readiness":{
+          "shape":"Readiness",
+          "documentation":"<p>Information indicating if the Calculated Attribute is ready for use by confirming all historical data has been processed and reflected.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
+    "CreateDomainLayoutRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "LayoutDefinitionName",
+        "Description",
+        "DisplayName",
+        "LayoutType",
+        "Layout"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>",
+          "location":"uri",
+          "locationName":"LayoutDefinitionName"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then the layout will not be used by default, but it can be used to view data by explicitly selecting it in the console.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Layout":{
+          "shape":"sensitiveString1To2000000",
+          "documentation":"<p>A customizable layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        }
+      }
+    },
+    "CreateDomainLayoutResponse":{
+      "type":"structure",
+      "required":[
+        "LayoutDefinitionName",
+        "Description",
+        "DisplayName",
+        "LayoutType",
+        "Layout",
+        "Version",
+        "CreatedAt"
+      ],
+      "members":{
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then the layout will not be used by default, but it can be used to view data by explicitly selecting it in the console.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under customer profiles domain.</p>"
+        },
+        "Layout":{
+          "shape":"sensitiveString1To2000000",
+          "documentation":"<p>A customizable layout that can be used to view data under Customer Profiles domain.</p>"
+        },
+        "Version":{
+          "shape":"string1To255",
+          "documentation":"<p>The version used to create layout.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was most recently updated.</p>"
+        }
+      }
+    },
     "CreateDomainRequest":{
       "type":"structure",
       "required":[
@@ -2388,7 +2791,7 @@
         },
         "AccountNumber":{
           "shape":"sensitiveString1To255",
-          "documentation":"<p>An account number that you have given to the customer.</p>"
+          "documentation":"<p>An account number that you have assigned to the customer.</p>"
         },
         "AdditionalInformation":{
           "shape":"sensitiveString1To1000",
@@ -2477,6 +2880,14 @@
         "GenderString":{
           "shape":"sensitiveString1To255",
           "documentation":"<p>An alternative to <code>Gender</code> which accepts any string as input.</p>"
+        },
+        "ProfileType":{
+          "shape":"ProfileType",
+          "documentation":"<p>The type of the profile.</p>"
+        },
+        "EngagementPreferences":{
+          "shape":"EngagementPreferences",
+          "documentation":"<p>Object that defines the preferred methods of engagement, per channel.</p>"
         }
       }
     },
@@ -2650,6 +3061,50 @@
         }
       }
     },
+    "CreateUploadJobRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "DisplayName",
+        "Fields",
+        "UniqueKey"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain. Domain should be exists for the upload job to be created. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "DisplayName":{
+          "shape":"string1To255",
+          "documentation":"<p>The unique name of the upload job. Could be a file name to identify the upload job.</p>"
+        },
+        "Fields":{
+          "shape":"FieldMap",
+          "documentation":"<p>The mapping between CSV Columns and Profile Object attributes. A map of the name and ObjectType field.</p>"
+        },
+        "UniqueKey":{
+          "shape":"text",
+          "documentation":"<p>The unique key columns for de-duping the profiles used to map data to the profile. </p>"
+        },
+        "DataExpiry":{
+          "shape":"expirationDaysInteger",
+          "documentation":"<p>The expiry duration for the profiles ingested with the job. If not provided, the system default of 2 weeks is used. </p>"
+        }
+      }
+    },
+    "CreateUploadJobResponse":{
+      "type":"structure",
+      "required":["JobId"],
+      "members":{
+        "JobId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier for the created upload job. </p>",
+          "locationName":"JobId"
+        }
+      }
+    },
     "CustomAttributes":{
       "type":"map",
       "key":{"shape":"typeName"},
@@ -2735,7 +3190,37 @@
     },
     "DeleteCalculatedAttributeDefinitionResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteDomainLayoutRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "LayoutDefinitionName"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>",
+          "location":"uri",
+          "locationName":"LayoutDefinitionName"
+        }
+      }
+    },
+    "DeleteDomainLayoutResponse":{
+      "type":"structure",
+      "required":["Message"],
       "members":{
+        "Message":{
+          "shape":"message",
+          "documentation":"<p>A message that indicates the delete request is done.</p>"
+        }
       }
     },
     "DeleteDomainRequest":{
@@ -2783,8 +3268,7 @@
     },
     "DeleteEventStreamResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventTriggerRequest":{
       "type":"structure",
@@ -3035,8 +3519,7 @@
     },
     "DeleteWorkflowResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DestinationField":{
       "type":"string",
@@ -3174,10 +3657,25 @@
       "max":3,
       "min":1
     },
-    "End":{
-      "type":"integer",
-      "max":366,
-      "min":0
+    "EmailPreferenceList":{
+      "type":"list",
+      "member":{"shape":"ContactPreference"}
+    },
+    "End":{"type":"integer"},
+    "EngagementPreferences":{
+      "type":"structure",
+      "members":{
+        "Phone":{
+          "shape":"PhonePreferenceList",
+          "documentation":"<p>A list of phone-related contact preferences</p>"
+        },
+        "Email":{
+          "shape":"EmailPreferenceList",
+          "documentation":"<p>A list of email-related contact preferences</p>"
+        }
+      },
+      "documentation":"<p>Object that defines users preferred methods of engagement.</p>",
+      "sensitive":true
     },
     "EstimateStatus":{
       "type":"string",
@@ -3444,7 +3942,7 @@
     },
     "FieldMap":{
       "type":"map",
-      "key":{"shape":"name"},
+      "key":{"shape":"fieldName"},
       "value":{"shape":"ObjectTypeField"},
       "sensitive":true
     },
@@ -3538,6 +4036,14 @@
         "Attributes":{
           "shape":"AttributeSourceIdMap",
           "documentation":"<p>A unique identifier for the attributes field to be merged.</p>"
+        },
+        "ProfileType":{
+          "shape":"uuid",
+          "documentation":"<p>A unique identifier for the profile type field to be merged.</p>"
+        },
+        "EngagementPreferences":{
+          "shape":"uuid",
+          "documentation":"<p>A unique identifier for the engagement preferences field to be merged.</p>"
         }
       },
       "documentation":"<p>A duplicate customer profile that is to be merged into a main profile. </p>"
@@ -3815,6 +4321,18 @@
           "shape":"AttributeDetails",
           "documentation":"<p>Mathematical expression and a list of attribute items specified in that expression.</p>"
         },
+        "UseHistoricalData":{
+          "shape":"optionalBoolean",
+          "documentation":"<p>Whether historical data ingested before the Calculated Attribute was created should be included in calculations.</p>"
+        },
+        "Status":{
+          "shape":"ReadinessStatus",
+          "documentation":"<p>Status of the Calculated Attribute creation (whether all historical data has been indexed).</p>"
+        },
+        "Readiness":{
+          "shape":"Readiness",
+          "documentation":"<p>Information indicating if the Calculated Attribute is ready for use by confirming all historical data has been processed and reflected.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -3867,6 +4385,86 @@
         "Value":{
           "shape":"string1To255",
           "documentation":"<p>The value of the calculated attribute.</p>"
+        },
+        "LastObjectTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of the newest object included in the calculated attribute calculation.</p>"
+        }
+      }
+    },
+    "GetDomainLayoutRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "LayoutDefinitionName"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>",
+          "location":"uri",
+          "locationName":"LayoutDefinitionName"
+        }
+      }
+    },
+    "GetDomainLayoutResponse":{
+      "type":"structure",
+      "required":[
+        "LayoutDefinitionName",
+        "Description",
+        "DisplayName",
+        "LayoutType",
+        "Layout",
+        "Version",
+        "CreatedAt",
+        "LastUpdatedAt"
+      ],
+      "members":{
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then the layout will not be used by default, but it can be used to view data by explicitly selecting it in the console.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Layout":{
+          "shape":"sensitiveString1To2000000",
+          "documentation":"<p>A customizable layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Version":{
+          "shape":"string1To255",
+          "documentation":"<p>The version used to create layout.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was most recently updated.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
@@ -4244,6 +4842,77 @@
         }
       }
     },
+    "GetProfileHistoryRecordRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "ProfileId",
+        "Id"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain for which to return a profile history record.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "ProfileId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the profile for which to return a history record.</p>",
+          "location":"uri",
+          "locationName":"ProfileId"
+        },
+        "Id":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the profile history record to return.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        }
+      }
+    },
+    "GetProfileHistoryRecordResponse":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "ObjectTypeName",
+        "CreatedAt",
+        "ActionType"
+      ],
+      "members":{
+        "Id":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the profile history record.</p>"
+        },
+        "ObjectTypeName":{
+          "shape":"typeName",
+          "documentation":"<p>The name of the profile object type.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the profile history record was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the profile history record was last updated.</p>"
+        },
+        "ActionType":{
+          "shape":"ActionType",
+          "documentation":"<p>The action type of the profile history record.</p>"
+        },
+        "ProfileObjectUniqueKey":{
+          "shape":"string1To255",
+          "documentation":"<p>The unique identifier of the profile object generated by the service.</p>"
+        },
+        "Content":{
+          "shape":"stringifiedJson",
+          "documentation":"<p>A string containing the customer profile, profile object, or profile key content.</p>"
+        },
+        "PerformedBy":{
+          "shape":"string1To255",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the person or service principal who performed the action.</p>"
+        }
+      }
+    },
     "GetProfileObjectTypeRequest":{
       "type":"structure",
       "required":[
@@ -4676,6 +5345,124 @@
         }
       }
     },
+    "GetUploadJobPathRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "JobId"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain containing the upload job. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "JobId":{
+          "shape":"name",
+          "documentation":"<p>The unique identifier of the upload job to retrieve the upload path for. This is generated from the CreateUploadJob API. </p>",
+          "location":"uri",
+          "locationName":"JobId"
+        }
+      }
+    },
+    "GetUploadJobPathResponse":{
+      "type":"structure",
+      "required":["Url"],
+      "members":{
+        "Url":{
+          "shape":"stringTo2048",
+          "documentation":"<p>The pre-signed S3 URL for uploading the CSV file associated with the upload job. </p>",
+          "locationName":"Url"
+        },
+        "ClientToken":{
+          "shape":"text",
+          "documentation":"<p>The plaintext data key used to encrypt the upload file. </p> <p>To persist to the pre-signed url, use the client token and MD5 client token as header. The required headers are as follows: </p> <ul> <li> <p>x-amz-server-side-encryption-customer-key: Client Token </p> </li> <li> <p>x-amz-server-side-encryption-customer-key-MD5: MD5 Client Token </p> </li> <li> <p>x-amz-server-side-encryption-customer-algorithm: AES256 </p> </li> </ul>",
+          "locationName":"ClientToken"
+        },
+        "ValidUntil":{
+          "shape":"timestamp",
+          "documentation":"<p>The expiry timestamp for the pre-signed URL, after which the URL will no longer be valid. </p>",
+          "locationName":"ValidUntil"
+        }
+      }
+    },
+    "GetUploadJobRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "JobId"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain containing the upload job. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "JobId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the upload job to retrieve. </p>",
+          "location":"uri",
+          "locationName":"JobId"
+        }
+      }
+    },
+    "GetUploadJobResponse":{
+      "type":"structure",
+      "members":{
+        "JobId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the upload job. </p>",
+          "locationName":"JobId"
+        },
+        "DisplayName":{
+          "shape":"string1To255",
+          "documentation":"<p>The unique name of the upload job. Could be a file name to identify the upload job. </p>",
+          "locationName":"DisplayName"
+        },
+        "Status":{
+          "shape":"UploadJobStatus",
+          "documentation":"<p>The status describing the status for the upload job. The following are Valid Values: </p> <ul> <li> <p> <b>CREATED</b>: The upload job has been created, but has not started processing yet. </p> </li> <li> <p> <b>IN_PROGRESS</b>: The upload job is currently in progress, ingesting and processing the profile data. </p> </li> <li> <p> <b>PARTIALLY_SUCCEEDED</b>: The upload job has successfully completed the ingestion and processing of all profile data. </p> </li> <li> <p> <b>SUCCEEDED</b>: The upload job has successfully completed the ingestion and processing of all profile data. </p> </li> <li> <p> <b>FAILED</b>: The upload job has failed to complete. </p> </li> <li> <p> <b>STOPPED</b>: The upload job has been manually stopped or terminated before completion. </p> </li> </ul>",
+          "locationName":"Status"
+        },
+        "StatusReason":{
+          "shape":"StatusReason",
+          "documentation":"<p>The reason for the current status of the upload job. Possible reasons: </p> <ul> <li> <p> <b>VALIDATION_FAILURE</b>: The upload job has encountered an error or issue and was unable to complete the profile data ingestion. </p> </li> <li> <p> <b>INTERNAL_FAILURE</b>: Failure caused from service side </p> </li> </ul>",
+          "locationName":"StatusReason"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the upload job was created. </p>",
+          "locationName":"CreatedAt"
+        },
+        "CompletedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the upload job was completed. </p>",
+          "locationName":"CompletedAt"
+        },
+        "Fields":{
+          "shape":"FieldMap",
+          "documentation":"<p>The mapping between CSV Columns and Profile Object attributes for the upload job. </p>",
+          "locationName":"Fields"
+        },
+        "UniqueKey":{
+          "shape":"text",
+          "documentation":"<p>The unique key columns used for de-duping the keys in the upload job. </p>",
+          "locationName":"UniqueKey"
+        },
+        "ResultsSummary":{
+          "shape":"ResultsSummary",
+          "documentation":"<p>The summary of results for the upload job, including the number of updated, created, and failed records. </p>",
+          "locationName":"ResultsSummary"
+        },
+        "DataExpiry":{
+          "shape":"expirationDaysInteger",
+          "documentation":"<p>The expiry duration for the profiles ingested with the upload job. </p>",
+          "locationName":"DataExpiry"
+        }
+      }
+    },
     "GetWorkflowRequest":{
       "type":"structure",
       "required":[
@@ -4990,6 +5777,60 @@
       "min":20,
       "pattern":"arn:aws:kms:.*:[0-9]+:.*"
     },
+    "LayoutItem":{
+      "type":"structure",
+      "required":[
+        "LayoutDefinitionName",
+        "Description",
+        "DisplayName",
+        "LayoutType",
+        "CreatedAt",
+        "LastUpdatedAt"
+      ],
+      "members":{
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then layout will not be used by default but it can be used to view data by explicit selection on UI.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under customer profiles domain.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was most recently updated.</p>"
+        }
+      },
+      "documentation":"<p>The layout object that contains LayoutDefinitionName, Description, DisplayName, IsDefault, LayoutType, Tags, CreatedAt, LastUpdatedAt </p>"
+    },
+    "LayoutList":{
+      "type":"list",
+      "member":{"shape":"LayoutItem"}
+    },
+    "LayoutType":{
+      "type":"string",
+      "enum":["PROFILE_EXPLORER"]
+    },
     "ListAccountIntegrationsRequest":{
       "type":"structure",
       "required":["Uri"],
@@ -5054,6 +5895,14 @@
           "shape":"timestamp",
           "documentation":"<p>The timestamp of when the calculated attribute definition was most recently edited.</p>"
         },
+        "UseHistoricalData":{
+          "shape":"optionalBoolean",
+          "documentation":"<p>Whether historical data ingested before the Calculated Attribute was created should be included in calculations.</p>"
+        },
+        "Status":{
+          "shape":"ReadinessStatus",
+          "documentation":"<p>Status of the Calculated Attribute creation (whether all historical data has been indexed.)</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -5116,6 +5965,10 @@
         "Value":{
           "shape":"string1To255",
           "documentation":"<p>The value of the calculated attribute.</p>"
+        },
+        "LastObjectTimestamp":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of the newest object included in the calculated attribute calculation.</p>"
         }
       },
       "documentation":"<p>The details of a single calculated attribute for a profile.</p>"
@@ -5193,6 +6046,43 @@
       },
       "documentation":"<p>An object in a list that represents a domain.</p>"
     },
+    "ListDomainLayoutsRequest":{
+      "type":"structure",
+      "required":["DomainName"],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>Identifies the next page of results to return.</p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        },
+        "MaxResults":{
+          "shape":"maxSize100",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        }
+      }
+    },
+    "ListDomainLayoutsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"LayoutList",
+          "documentation":"<p>Contains summary information about an EventStream.</p>"
+        },
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>Identifies the next page of results to return.</p>"
+        }
+      }
+    },
     "ListDomainsRequest":{
       "type":"structure",
       "members":{
@@ -5501,6 +6391,62 @@
         }
       }
     },
+    "ListProfileHistoryRecordsRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "ProfileId"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain for which to return profile history records.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "ProfileId":{
+          "shape":"uuid",
+          "documentation":"<p>The identifier of the profile to be taken.</p>"
+        },
+        "ObjectTypeName":{
+          "shape":"typeName",
+          "documentation":"<p>Applies a filter to include profile history records only with the specified <code>ObjectTypeName</code> value in the response.</p>"
+        },
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        },
+        "MaxResults":{
+          "shape":"maxSize100",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        },
+        "ActionType":{
+          "shape":"ActionType",
+          "documentation":"<p>Applies a filter to include profile history records only with the specified <code>ActionType</code> value in the response.</p>"
+        },
+        "PerformedBy":{
+          "shape":"string1To255",
+          "documentation":"<p>Applies a filter to include profile history records only with the specified <code>PerformedBy</code> value in the response. The <code>PerformedBy</code> value can be the Amazon Resource Name (ARN) of the person or service principal who performed the action.</p>"
+        }
+      }
+    },
+    "ListProfileHistoryRecordsResponse":{
+      "type":"structure",
+      "members":{
+        "ProfileHistoryRecords":{
+          "shape":"ProfileHistoryRecords",
+          "documentation":"<p>The list of profile history records.</p>"
+        },
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
+        }
+      }
+    },
     "ListProfileObjectTypeItem":{
       "type":"structure",
       "required":[
@@ -5792,6 +6738,45 @@
         }
       }
     },
+    "ListUploadJobsRequest":{
+      "type":"structure",
+      "required":["DomainName"],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain to list upload jobs for. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "MaxResults":{
+          "shape":"MaxSize500",
+          "documentation":"<p>The maximum number of upload jobs to return per page. </p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        },
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>The pagination token from the previous call to retrieve the next page of results. </p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        }
+      }
+    },
+    "ListUploadJobsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"token",
+          "documentation":"<p>The pagination token to use to retrieve the next page of results. </p>",
+          "locationName":"NextToken"
+        },
+        "Items":{
+          "shape":"UploadJobsList",
+          "documentation":"<p>The list of upload jobs for the specified domain. </p>",
+          "locationName":"Items"
+        }
+      }
+    },
     "ListWorkflowsItem":{
       "type":"structure",
       "required":[
@@ -6120,7 +7105,6 @@
     },
     "ObjectCount":{
       "type":"integer",
-      "max":100,
       "min":1
     },
     "ObjectFilter":{
@@ -6274,6 +7258,10 @@
       "max":4,
       "min":1
     },
+    "PhonePreferenceList":{
+      "type":"list",
+      "member":{"shape":"ContactPreference"}
+    },
     "Profile":{
       "type":"structure",
       "members":{
@@ -6283,7 +7271,7 @@
         },
         "AccountNumber":{
           "shape":"sensitiveString1To255",
-          "documentation":"<p>An account number that you have given to the customer.</p>"
+          "documentation":"<p>An account number that you have assigned to the customer.</p>"
         },
         "AdditionalInformation":{
           "shape":"sensitiveString1To1000",
@@ -6376,6 +7364,14 @@
         "GenderString":{
           "shape":"sensitiveString1To255",
           "documentation":"<p>An alternative to Gender which accepts any string as input.</p>"
+        },
+        "ProfileType":{
+          "shape":"ProfileType",
+          "documentation":"<p>The type of the profile.</p>"
+        },
+        "EngagementPreferences":{
+          "shape":"EngagementPreferences",
+          "documentation":"<p>The customer or account’s engagement preferences.</p>"
         }
       },
       "documentation":"<p>The standard profile of a customer.</p>"
@@ -6530,6 +7526,11 @@
           "shape":"CustomAttributes",
           "documentation":"<p>A field to describe values to segment on within attributes.</p>",
           "locationName":"Attributes"
+        },
+        "ProfileType":{
+          "shape":"ProfileTypeDimension",
+          "documentation":"<p>A field to describe values to segment on within profile type.</p>",
+          "locationName":"ProfileType"
         }
       },
       "documentation":"<p>The object used to segment on attributes within the customer profile.</p>",
@@ -6555,6 +7556,50 @@
       },
       "documentation":"<p>Object to hold the dimensions of a profile's fields to segment on.</p>"
     },
+    "ProfileHistoryRecord":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "ObjectTypeName",
+        "CreatedAt",
+        "ActionType"
+      ],
+      "members":{
+        "Id":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the profile history record.</p>"
+        },
+        "ObjectTypeName":{
+          "shape":"typeName",
+          "documentation":"<p>The name of the profile object type.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the profile history record was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the profile history record was last updated.</p>"
+        },
+        "ActionType":{
+          "shape":"ActionType",
+          "documentation":"<p>The action type of the profile history record.</p>"
+        },
+        "ProfileObjectUniqueKey":{
+          "shape":"string1To255",
+          "documentation":"<p>The unique identifier of the profile object generated by the service.</p>"
+        },
+        "PerformedBy":{
+          "shape":"string1To255",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the person or service principal who performed the action.</p>"
+        }
+      },
+      "documentation":"<p>Contains profile history record metadata.</p>"
+    },
+    "ProfileHistoryRecords":{
+      "type":"list",
+      "member":{"shape":"ProfileHistoryRecord"}
+    },
     "ProfileId":{"type":"string"},
     "ProfileIdList":{
       "type":"list",
@@ -6638,6 +7683,47 @@
       },
       "documentation":"<p>Object that holds the results for membership.</p>"
     },
+    "ProfileType":{
+      "type":"string",
+      "enum":[
+        "ACCOUNT_PROFILE",
+        "PROFILE"
+      ],
+      "sensitive":true
+    },
+    "ProfileTypeDimension":{
+      "type":"structure",
+      "required":[
+        "DimensionType",
+        "Values"
+      ],
+      "members":{
+        "DimensionType":{
+          "shape":"ProfileTypeDimensionType",
+          "documentation":"<p>The action to segment on.</p>",
+          "locationName":"DimensionType"
+        },
+        "Values":{
+          "shape":"ProfileTypeValues",
+          "documentation":"<p>The values to apply the DimensionType on.</p>",
+          "locationName":"Values"
+        }
+      },
+      "documentation":"<p>Object to hold the dimension of a profile type field to segment on.</p>"
+    },
+    "ProfileTypeDimensionType":{
+      "type":"string",
+      "enum":[
+        "INCLUSIVE",
+        "EXCLUSIVE"
+      ]
+    },
+    "ProfileTypeValues":{
+      "type":"list",
+      "member":{"shape":"ProfileType"},
+      "max":1,
+      "min":1
+    },
     "Profiles":{
       "type":"list",
       "member":{"shape":"ProfileQueryResult"}
@@ -6911,10 +7997,6 @@
     },
     "Range":{
       "type":"structure",
-      "required":[
-        "Value",
-        "Unit"
-      ],
       "members":{
         "Value":{
           "shape":"Value",
@@ -6923,6 +8005,18 @@
         "Unit":{
           "shape":"Unit",
           "documentation":"<p>The unit of time.</p>"
+        },
+        "ValueRange":{
+          "shape":"ValueRange",
+          "documentation":"<p>A structure letting customers specify a relative time window over which over which data is included in the Calculated Attribute. Use positive numbers to indicate that the endpoint is in the past, and negative numbers to indicate it is in the future. ValueRange overrides Value.</p>"
+        },
+        "TimestampSource":{
+          "shape":"string1To255",
+          "documentation":"<p>An expression specifying the field in your JSON object from which the date should be parsed. The expression should follow the structure of \\\"{ObjectTypeName.&lt;Location of timestamp field in JSON pointer format&gt;}\\\". E.g. if your object type is MyType and source JSON is {\"generatedAt\": {\"timestamp\": \"1737587945945\"}}, then TimestampSource should be \"{MyType.generatedAt.timestamp}\".</p>"
+        },
+        "TimestampFormat":{
+          "shape":"string1To255",
+          "documentation":"<p>The format the timestamp field in your JSON object is specified. This value should be one of EPOCHMILLI (for Unix epoch timestamps with second/millisecond level precision) or ISO_8601 (following ISO_8601 format with second/millisecond level precision, with an optional offset of Z or in the format HH:MM or HHMM.). E.g. if your object type is MyType and source JSON is {\"generatedAt\": {\"timestamp\": \"2001-07-04T12:08:56.235-0700\"}}, then TimestampFormat should be \"ISO_8601\".</p>"
         }
       },
       "documentation":"<p>The relative time period over which data is included in the aggregation.</p>"
@@ -6953,6 +8047,29 @@
       "type":"string",
       "enum":["DAYS"]
     },
+    "Readiness":{
+      "type":"structure",
+      "members":{
+        "ProgressPercentage":{
+          "shape":"percentageInteger",
+          "documentation":"<p>Approximately how far the Calculated Attribute creation is from completion.</p>"
+        },
+        "Message":{
+          "shape":"text",
+          "documentation":"<p>Any customer messaging.</p>"
+        }
+      },
+      "documentation":"<p>Information indicating if the Calculated Attribute is ready for use by confirming all historical data has been processed and reflected.</p>"
+    },
+    "ReadinessStatus":{
+      "type":"string",
+      "enum":[
+        "PREPARING",
+        "IN_PROGRESS",
+        "COMPLETED",
+        "FAILED"
+      ]
+    },
     "ResourceNotFoundException":{
       "type":"structure",
       "members":{
@@ -6962,6 +8079,27 @@
       "error":{"httpStatusCode":404},
       "exception":true
     },
+    "ResultsSummary":{
+      "type":"structure",
+      "members":{
+        "UpdatedRecords":{
+          "shape":"optionalLong",
+          "documentation":"<p>The number of records that were updated during the upload job. </p>",
+          "locationName":"UpdatedRecords"
+        },
+        "CreatedRecords":{
+          "shape":"optionalLong",
+          "documentation":"<p>The number of records that were newly created during the upload job. </p>",
+          "locationName":"CreatedRecords"
+        },
+        "FailedRecords":{
+          "shape":"optionalLong",
+          "documentation":"<p>The number of records that failed to be processed during the upload job. </p>",
+          "locationName":"FailedRecords"
+        }
+      },
+      "documentation":"<p>The summary of results for an upload job, including the number of updated, created, and failed records. </p>"
+    },
     "RoleArn":{
       "type":"string",
       "max":512,
@@ -7472,6 +8610,15 @@
         "CASE",
         "ORDER",
         "COMMUNICATION_RECORD",
+        "AIR_PREFERENCE",
+        "HOTEL_PREFERENCE",
+        "AIR_BOOKING",
+        "AIR_SEGMENT",
+        "HOTEL_RESERVATION",
+        "HOTEL_STAY_REVENUE",
+        "LOYALTY",
+        "LOYALTY_TRANSACTION",
+        "LOYALTY_PROMOTION",
         "UNIQUE",
         "SECONDARY",
         "LOOKUP_ONLY",
@@ -7482,10 +8629,31 @@
       "type":"list",
       "member":{"shape":"StandardIdentifier"}
     },
-    "Start":{
-      "type":"integer",
-      "max":366,
-      "min":1
+    "Start":{"type":"integer"},
+    "StartUploadJobRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "JobId"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain containing the upload job to start. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "JobId":{
+          "shape":"name",
+          "documentation":"<p>The unique identifier of the upload job to start. </p>",
+          "location":"uri",
+          "locationName":"JobId"
+        }
+      }
+    },
+    "StartUploadJobResponse":{
+      "type":"structure",
+      "members":{}
     },
     "Statistic":{
       "type":"string",
@@ -7514,6 +8682,38 @@
       ]
     },
     "StatusCode":{"type":"integer"},
+    "StatusReason":{
+      "type":"string",
+      "enum":[
+        "VALIDATION_FAILURE",
+        "INTERNAL_FAILURE"
+      ]
+    },
+    "StopUploadJobRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "JobId"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain containing the upload job to stop. </p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "JobId":{
+          "shape":"name",
+          "documentation":"<p>The unique identifier of the upload job to stop. </p>",
+          "location":"uri",
+          "locationName":"JobId"
+        }
+      }
+    },
+    "StopUploadJobResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "String":{"type":"string"},
     "StringDimensionType":{
       "type":"string",
@@ -7570,8 +8770,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7728,8 +8927,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAddress":{
       "type":"structure",
@@ -7852,6 +9050,104 @@
           "shape":"AttributeDetails",
           "documentation":"<p>The mathematical expression and a list of attribute items specified in that expression.</p>"
         },
+        "UseHistoricalData":{
+          "shape":"optionalBoolean",
+          "documentation":"<p>Whether historical data ingested before the Calculated Attribute was created should be included in calculations.</p>"
+        },
+        "Status":{
+          "shape":"ReadinessStatus",
+          "documentation":"<p>Status of the Calculated Attribute creation (whether all historical data has been indexed.)</p>"
+        },
+        "Readiness":{
+          "shape":"Readiness",
+          "documentation":"<p>Information indicating if the Calculated Attribute is ready for use by confirming all historical data has been processed and reflected.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        }
+      }
+    },
+    "UpdateDomainLayoutRequest":{
+      "type":"structure",
+      "required":[
+        "DomainName",
+        "LayoutDefinitionName"
+      ],
+      "members":{
+        "DomainName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the domain.</p>",
+          "location":"uri",
+          "locationName":"DomainName"
+        },
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>",
+          "location":"uri",
+          "locationName":"LayoutDefinitionName"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then the layout will not be used by default, but it can be used to view data by explicitly selecting it in the console.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Layout":{
+          "shape":"sensitiveString1To2000000",
+          "documentation":"<p>A customizable layout that can be used to view data under a Customer Profiles domain.</p>"
+        }
+      }
+    },
+    "UpdateDomainLayoutResponse":{
+      "type":"structure",
+      "members":{
+        "LayoutDefinitionName":{
+          "shape":"name",
+          "documentation":"<p>The unique name of the layout.</p>"
+        },
+        "Description":{
+          "shape":"sensitiveText",
+          "documentation":"<p>The description of the layout</p>"
+        },
+        "DisplayName":{
+          "shape":"displayName",
+          "documentation":"<p>The display name of the layout</p>"
+        },
+        "IsDefault":{
+          "shape":"boolean",
+          "documentation":"<p>If set to true for a layout, this layout will be used by default to view data. If set to false, then the layout will not be used by default, but it can be used to view data by explicitly selecting it in the console.</p>"
+        },
+        "LayoutType":{
+          "shape":"LayoutType",
+          "documentation":"<p>The type of layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Layout":{
+          "shape":"sensitiveString1To2000000",
+          "documentation":"<p>A customizable layout that can be used to view data under a Customer Profiles domain.</p>"
+        },
+        "Version":{
+          "shape":"string1To255",
+          "documentation":"<p>The version used to create layout.</p>"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp of when the layout was most recently updated.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -8045,7 +9341,7 @@
         },
         "AccountNumber":{
           "shape":"sensitiveString0To255",
-          "documentation":"<p>An account number that you have given to the customer.</p>"
+          "documentation":"<p>An account number that you have assigned to the customer.</p>"
         },
         "PartyType":{
           "shape":"PartyType",
@@ -8130,6 +9426,14 @@
         "GenderString":{
           "shape":"sensitiveString0To255",
           "documentation":"<p>An alternative to <code>Gender</code> which accepts any string as input.</p>"
+        },
+        "ProfileType":{
+          "shape":"ProfileType",
+          "documentation":"<p>Determines the type of the profile.</p>"
+        },
+        "EngagementPreferences":{
+          "shape":"EngagementPreferences",
+          "documentation":"<p>Object that defines users preferred methods of engagement.</p>"
         }
       }
     },
@@ -8143,10 +9447,66 @@
         }
       }
     },
+    "UploadJobItem":{
+      "type":"structure",
+      "members":{
+        "JobId":{
+          "shape":"uuid",
+          "documentation":"<p>The unique identifier of the upload job. </p>",
+          "locationName":"JobId"
+        },
+        "DisplayName":{
+          "shape":"string1To255",
+          "documentation":"<p>The name of the upload job. </p>",
+          "locationName":"DisplayName"
+        },
+        "Status":{
+          "shape":"UploadJobStatus",
+          "documentation":"<p>The current status of the upload job. </p>",
+          "locationName":"Status"
+        },
+        "StatusReason":{
+          "shape":"StatusReason",
+          "documentation":"<p>The reason for the current status of the upload job. </p>",
+          "locationName":"StatusReason"
+        },
+        "CreatedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the upload job was created. </p>",
+          "locationName":"CreatedAt"
+        },
+        "CompletedAt":{
+          "shape":"timestamp",
+          "documentation":"<p>The timestamp when the upload job was completed. </p>",
+          "locationName":"CompletedAt"
+        },
+        "DataExpiry":{
+          "shape":"expirationDaysInteger",
+          "documentation":"<p>The expiry duration for the profiles ingested with the upload job. </p>",
+          "locationName":"DataExpiry"
+        }
+      },
+      "documentation":"<p>The summary information for an individual upload job. </p>"
+    },
+    "UploadJobStatus":{
+      "type":"string",
+      "enum":[
+        "CREATED",
+        "IN_PROGRESS",
+        "PARTIALLY_SUCCEEDED",
+        "SUCCEEDED",
+        "FAILED",
+        "STOPPED"
+      ]
+    },
+    "UploadJobsList":{
+      "type":"list",
+      "member":{"shape":"UploadJobItem"}
+    },
     "Value":{
       "type":"integer",
-      "max":366,
-      "min":1
+      "max":2147483647,
+      "min":0
     },
     "ValueList":{
       "type":"list",
@@ -8154,6 +9514,26 @@
       "max":10,
       "min":1
     },
+    "ValueRange":{
+      "type":"structure",
+      "required":[
+        "Start",
+        "End"
+      ],
+      "members":{
+        "Start":{
+          "shape":"ValueRangeStart",
+          "documentation":"<p>The start time of when to include objects. Use positive numbers to indicate that the starting point is in the past, and negative numbers to indicate it is in the future.</p>"
+        },
+        "End":{
+          "shape":"ValueRangeEnd",
+          "documentation":"<p>The end time of when to include objects. Use positive numbers to indicate that the starting point is in the past, and negative numbers to indicate it is in the future.</p>"
+        }
+      },
+      "documentation":"<p>A structure letting customers specify a relative time window over which over which data is included in the Calculated Attribute. Use positive numbers to indicate that the endpoint is in the past, and negative numbers to indicate it is in the future. ValueRange overrides Value.</p>"
+    },
+    "ValueRangeEnd":{"type":"integer"},
+    "ValueRangeStart":{"type":"integer"},
     "Values":{
       "type":"list",
       "member":{"shape":"string1To255"},
@@ -8311,6 +9691,11 @@
     },
     "optionalBoolean":{"type":"boolean"},
     "optionalLong":{"type":"long"},
+    "percentageInteger":{
+      "type":"integer",
+      "max":100,
+      "min":0
+    },
     "requestValueList":{
       "type":"list",
       "member":{"shape":"string1To255"}
@@ -8351,6 +9736,12 @@
       "min":1,
       "sensitive":true
     },
+    "sensitiveString1To2000000":{
+      "type":"string",
+      "max":2000000,
+      "min":1,
+      "sensitive":true
+    },
     "sensitiveString1To255":{
       "type":"string",
       "max":255,
diff -pruN 2.23.6-1/awscli/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/databrew/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -250,14 +246,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -271,7 +269,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -291,7 +288,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -302,14 +298,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -320,9 +318,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/databrew/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/databrew/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/databrew/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/databrew/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"databrew",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS Glue DataBrew",
     "serviceId":"DataBrew",
     "signatureVersion":"v4",
     "signingName":"databrew",
-    "uid":"databrew-2017-07-25"
+    "uid":"databrew-2017-07-25",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchDeleteRecipeVersion":{
@@ -3943,8 +3945,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4027,8 +4028,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatasetRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dataexchange/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/dataexchange/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/dataexchange/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/dataexchange/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dataexchange/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -990,7 +990,7 @@
       "required":["JobId"],
       "members":{
         "JobId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a job.</p>",
           "location":"uri",
           "locationName":"JobId"
@@ -1245,6 +1245,10 @@
         "Event":{
           "shape":"Event",
           "documentation":"<p>What occurs to start an action.</p>"
+        },
+        "Tags":{
+          "shape":"MapOf__string",
+          "documentation":"<p>Key-value pairs that you can associate with the event action.</p>"
         }
       }
     },
@@ -1271,6 +1275,10 @@
           "shape":"Id",
           "documentation":"<p>The unique identifier for the event action.</p>"
         },
+        "Tags":{
+          "shape":"MapOf__string",
+          "documentation":"<p>The tags for the event action.</p>"
+        },
         "UpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the event action was last updated, in ISO 8601 format.</p>"
@@ -1340,7 +1348,7 @@
           "documentation":"<p>An optional comment about the revision.</p>"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -1649,19 +1657,19 @@
       ],
       "members":{
         "AssetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for an asset.</p>",
           "location":"uri",
           "locationName":"AssetId"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -1685,7 +1693,7 @@
       "required":["DataSetId"],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -1712,13 +1720,13 @@
       ],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -1986,19 +1994,19 @@
       ],
       "members":{
         "AssetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for an asset.</p>",
           "location":"uri",
           "locationName":"AssetId"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -2145,7 +2153,7 @@
       "required":["DataSetId"],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -2236,6 +2244,10 @@
           "shape":"Id",
           "documentation":"<p>The unique identifier for the event action.</p>"
         },
+        "Tags":{
+          "shape":"MapOf__string",
+          "documentation":"<p>The tags for the event action.</p>"
+        },
         "UpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the event action was last updated, in ISO 8601 format.</p>"
@@ -2247,7 +2259,7 @@
       "required":["JobId"],
       "members":{
         "JobId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a job.</p>",
           "location":"uri",
           "locationName":"JobId"
@@ -2379,13 +2391,13 @@
       ],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -2452,7 +2464,10 @@
         "NONE"
       ]
     },
-    "Id":{"type":"string"},
+    "Id":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9]{30,40}"
+    },
     "ImportAssetFromApiGatewayApiRequestDetails":{
       "type":"structure",
       "required":[
@@ -3131,7 +3146,7 @@
       "required":["DataSetId"],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -3416,7 +3431,7 @@
       ],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -3434,7 +3449,7 @@
           "locationName":"nextToken"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -3879,13 +3894,13 @@
       ],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -4184,7 +4199,7 @@
           "documentation":"<p>Free-form text field for providers to add information about their notifications.</p>"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>Affected data set of the notification.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -4244,7 +4259,7 @@
       "required":["JobId"],
       "members":{
         "JobId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a job.</p>",
           "location":"uri",
           "locationName":"JobId"
@@ -4389,13 +4404,13 @@
       ],
       "members":{
         "AssetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for an asset.</p>",
           "location":"uri",
           "locationName":"AssetId"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -4405,7 +4420,7 @@
           "documentation":"<p>The name of the asset. When importing from Amazon S3, the Amazon S3 object key is used as the asset name. When exporting to Amazon S3, the asset name is used as default target Amazon S3 object key. When importing from Amazon API Gateway API, the API name is used as the asset name. When importing from Amazon Redshift, the datashare name is used as the asset name. When importing from AWS Lake Formation, the static values of \"Database(s) included in the LF-tag policy\" or \"Table(s) included in LF-tag policy\" are used as the name.</p>"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
@@ -4462,7 +4477,7 @@
       "required":["DataSetId"],
       "members":{
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -4579,7 +4594,7 @@
           "documentation":"<p>An optional comment about the revision.</p>"
         },
         "DataSetId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a data set.</p>",
           "location":"uri",
           "locationName":"DataSetId"
@@ -4589,7 +4604,7 @@
           "documentation":"<p>Finalizing a revision tells AWS Data Exchange that your changes to the assets in the revision are complete. After it's in this read-only state, you can publish the revision to your products.</p>"
         },
         "RevisionId":{
-          "shape":"__string",
+          "shape":"Id",
           "documentation":"<p>The unique identifier for a revision.</p>",
           "location":"uri",
           "locationName":"RevisionId"
diff -pruN 2.23.6-1/awscli/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datapipeline/2012-10-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/datapipeline/2012-10-29/service-2.json 2.31.35-1/awscli/botocore/data/datapipeline/2012-10-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/datapipeline/2012-10-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datapipeline/2012-10-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"datapipeline",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Data Pipeline",
     "serviceId":"Data Pipeline",
     "signatureVersion":"v4",
     "targetPrefix":"DataPipeline",
-    "uid":"datapipeline-2012-10-29"
+    "uid":"datapipeline-2012-10-29",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "ActivatePipeline":{
@@ -332,8 +334,7 @@
     },
     "ActivatePipelineOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of ActivatePipeline.</p>"
     },
     "AddTagsInput":{
@@ -356,8 +357,7 @@
     },
     "AddTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of AddTags.</p>"
     },
     "CreatePipelineInput":{
@@ -414,8 +414,7 @@
     },
     "DeactivatePipelineOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of DeactivatePipeline.</p>"
     },
     "DeletePipelineInput":{
@@ -993,8 +992,7 @@
     },
     "RemoveTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of RemoveTags.</p>"
     },
     "ReportTaskProgressInput":{
@@ -1124,8 +1122,7 @@
     },
     "SetTaskStatusOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of SetTaskStatus.</p>"
     },
     "Tag":{
diff -pruN 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/paginators-1.json 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,24 +29,6 @@
       "limit_key": "MaxResults",
       "output_token": "NextToken",
       "result_key": "Tasks"
-    },
-    "DescribeStorageSystemResourceMetrics": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "Metrics"
-    },
-    "ListDiscoveryJobs": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "DiscoveryJobs"
-    },
-    "ListStorageSystems": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "StorageSystems"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/service-2.json 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/service-2.json
--- 2.23.6-1/awscli/botocore/data/datasync/2018-11-09/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datasync/2018-11-09/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -16,21 +16,6 @@
     "auth":["aws.auth#sigv4"]
   },
   "operations":{
-    "AddStorageSystem":{
-      "name":"AddStorageSystem",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AddStorageSystemRequest"},
-      "output":{"shape":"AddStorageSystemResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Creates an Amazon Web Services resource for an on-premises storage system that you want DataSync Discovery to collect information about.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "CancelTaskExecution":{
       "name":"CancelTaskExecution",
       "http":{
@@ -71,7 +56,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalException"}
       ],
-      "documentation":"<p>Creates a transfer <i>location</i> for a Microsoft Azure Blob Storage container. DataSync can use this location as a transfer source or destination.</p> <p>Before you begin, make sure you know <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access\">how DataSync accesses Azure Blob Storage</a> and works with <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers\">access tiers</a> and <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#blob-types\">blob types</a>. You also need a <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-creating-agent\">DataSync agent</a> that can connect to your container.</p>"
+      "documentation":"<p>Creates a transfer <i>location</i> for a Microsoft Azure Blob Storage container. DataSync can use this location as a transfer source or destination. You can make transfers with or without a <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-creating-agent\">DataSync agent</a> that connects to your container.</p> <p>Before you begin, make sure you know <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access\">how DataSync accesses Azure Blob Storage</a> and works with <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers\">access tiers</a> and <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#blob-types\">blob types</a>.</p>"
     },
     "CreateLocationEfs":{
       "name":"CreateLocationEfs",
@@ -183,7 +168,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalException"}
       ],
-      "documentation":"<p>Creates a transfer <i>location</i> for an object storage system. DataSync can use this location as a source or destination for transferring data.</p> <p>Before you begin, make sure that you understand the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html#create-object-location-prerequisites\">prerequisites</a> for DataSync to work with object storage systems.</p>"
+      "documentation":"<p>Creates a transfer <i>location</i> for an object storage system. DataSync can use this location as a source or destination for transferring data. You can make transfers with or without a <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/do-i-need-datasync-agent.html#when-agent-required\">DataSync agent</a>.</p> <p>Before you begin, make sure that you understand the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html#create-object-location-prerequisites\">prerequisites</a> for DataSync to work with object storage systems.</p>"
     },
     "CreateLocationS3":{
       "name":"CreateLocationS3",
@@ -211,7 +196,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalException"}
       ],
-      "documentation":"<p>Creates a transfer <i>location</i> for a Server Message Block (SMB) file server. DataSync can use this location as a source or destination for transferring data.</p> <p>Before you begin, make sure that you understand how DataSync <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb\">accesses SMB file servers</a>.</p>"
+      "documentation":"<p>Creates a transfer <i>location</i> for a Server Message Block (SMB) file server. DataSync can use this location as a source or destination for transferring data.</p> <p>Before you begin, make sure that you understand how DataSync accesses SMB file servers. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
     },
     "CreateTask":{
       "name":"CreateTask",
@@ -283,21 +268,6 @@
       ],
       "documentation":"<p>Returns information about an DataSync agent, such as its name, service endpoint type, and status.</p>"
     },
-    "DescribeDiscoveryJob":{
-      "name":"DescribeDiscoveryJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeDiscoveryJobRequest"},
-      "output":{"shape":"DescribeDiscoveryJobResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Returns information about a DataSync discovery job.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "DescribeLocationAzureBlob":{
       "name":"DescribeLocationAzureBlob",
       "http":{
@@ -452,51 +422,6 @@
       ],
       "documentation":"<p>Provides details about how an DataSync transfer location for a Server Message Block (SMB) file server is configured.</p>"
     },
-    "DescribeStorageSystem":{
-      "name":"DescribeStorageSystem",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStorageSystemRequest"},
-      "output":{"shape":"DescribeStorageSystemResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Returns information about an on-premises storage system that you're using with DataSync Discovery.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
-    "DescribeStorageSystemResourceMetrics":{
-      "name":"DescribeStorageSystemResourceMetrics",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStorageSystemResourceMetricsRequest"},
-      "output":{"shape":"DescribeStorageSystemResourceMetricsResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Returns information, including performance data and capacity usage, which DataSync Discovery collects about a specific resource in your-premises storage system.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
-    "DescribeStorageSystemResources":{
-      "name":"DescribeStorageSystemResources",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStorageSystemResourcesRequest"},
-      "output":{"shape":"DescribeStorageSystemResourcesResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Returns information that DataSync Discovery collects about resources in your on-premises storage system.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "DescribeTask":{
       "name":"DescribeTask",
       "http":{
@@ -525,21 +450,6 @@
       ],
       "documentation":"<p>Provides information about an execution of your DataSync task. You can use this operation to help monitor the progress of an ongoing data transfer or check the results of the transfer.</p> <note> <p>Some <code>DescribeTaskExecution</code> response elements are only relevant to a specific task mode. For information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences\">Understanding task mode differences</a> and <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/transfer-performance-counters.html\">Understanding data transfer performance counters</a>.</p> </note>"
     },
-    "GenerateRecommendations":{
-      "name":"GenerateRecommendations",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GenerateRecommendationsRequest"},
-      "output":{"shape":"GenerateRecommendationsResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Creates recommendations about where to migrate your data to in Amazon Web Services. Recommendations are generated based on information that DataSync Discovery collects about your on-premises storage system's resources. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">Recommendations provided by DataSync Discovery</a>.</p> <p>Once generated, you can view your recommendations by using the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_DescribeStorageSystemResources.html\">DescribeStorageSystemResources</a> operation.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "ListAgents":{
       "name":"ListAgents",
       "http":{
@@ -554,21 +464,6 @@
       ],
       "documentation":"<p>Returns a list of DataSync agents that belong to an Amazon Web Services account in the Amazon Web Services Region specified in the request.</p> <p>With pagination, you can reduce the number of agents returned in a response. If you get a truncated list of agents in a response, the response contains a marker that you can specify in your next request to fetch the next page of agents.</p> <p> <code>ListAgents</code> is eventually consistent. This means the result of running the operation might not reflect that you just created or deleted an agent. For example, if you create an agent with <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_CreateAgent.html\">CreateAgent</a> and then immediately run <code>ListAgents</code>, that agent might not show up in the list right away. In situations like this, you can always confirm whether an agent has been created (or deleted) by using <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_DescribeAgent.html\">DescribeAgent</a>.</p>"
     },
-    "ListDiscoveryJobs":{
-      "name":"ListDiscoveryJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListDiscoveryJobsRequest"},
-      "output":{"shape":"ListDiscoveryJobsResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Provides a list of the existing discovery jobs in the Amazon Web Services Region and Amazon Web Services account where you're using DataSync Discovery.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "ListLocations":{
       "name":"ListLocations",
       "http":{
@@ -583,21 +478,6 @@
       ],
       "documentation":"<p>Returns a list of source and destination locations.</p> <p>If you have more locations than are returned in a response (that is, the response returns only a truncated list of your agents), the response contains a token that you can specify in your next request to fetch the next page of locations.</p>"
     },
-    "ListStorageSystems":{
-      "name":"ListStorageSystems",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListStorageSystemsRequest"},
-      "output":{"shape":"ListStorageSystemsResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Lists the on-premises storage systems that you're using with DataSync Discovery.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
       "http":{
@@ -640,36 +520,6 @@
       ],
       "documentation":"<p>Returns a list of the DataSync tasks you created.</p>"
     },
-    "RemoveStorageSystem":{
-      "name":"RemoveStorageSystem",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RemoveStorageSystemRequest"},
-      "output":{"shape":"RemoveStorageSystemResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Permanently removes a storage system resource from DataSync Discovery, including the associated discovery jobs, collected data, and recommendations.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
-    "StartDiscoveryJob":{
-      "name":"StartDiscoveryJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartDiscoveryJobRequest"},
-      "output":{"shape":"StartDiscoveryJobResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Runs a DataSync discovery job on your on-premises storage system. If you haven't added the storage system to DataSync Discovery yet, do this first by using the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_AddStorageSystem.html\">AddStorageSystem</a> operation.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "StartTaskExecution":{
       "name":"StartTaskExecution",
       "http":{
@@ -684,21 +534,6 @@
       ],
       "documentation":"<p>Starts an DataSync transfer task. For each task, you can only run one task execution at a time.</p> <p>There are several steps to a task execution. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/working-with-task-executions.html#understand-task-execution-statuses\">Task execution statuses</a>.</p> <important> <p>If you're planning to transfer data to or from an Amazon S3 location, review <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#create-s3-location-s3-requests\">how DataSync can affect your S3 request charges</a> and the <a href=\"http://aws.amazon.com/datasync/pricing/\">DataSync pricing page</a> before you begin.</p> </important>"
     },
-    "StopDiscoveryJob":{
-      "name":"StopDiscoveryJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StopDiscoveryJobRequest"},
-      "output":{"shape":"StopDiscoveryJobResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Stops a running DataSync discovery job.</p> <p>You can stop a discovery job anytime. A job that's stopped before it's scheduled to end likely will provide you some information about your on-premises storage system resources. To get recommendations for a stopped job, you must use the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_GenerateRecommendations.html\">GenerateRecommendations</a> operation.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -741,21 +576,6 @@
       ],
       "documentation":"<p>Updates the name of an DataSync agent.</p>"
     },
-    "UpdateDiscoveryJob":{
-      "name":"UpdateDiscoveryJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateDiscoveryJobRequest"},
-      "output":{"shape":"UpdateDiscoveryJobResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Edits a DataSync discovery job configuration.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "UpdateLocationAzureBlob":{
       "name":"UpdateLocationAzureBlob",
       "http":{
@@ -910,21 +730,6 @@
       ],
       "documentation":"<p>Modifies the following configuration parameters of the Server Message Block (SMB) transfer location that you're using with DataSync.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html\">Configuring DataSync transfers with an SMB file server</a>.</p>"
     },
-    "UpdateStorageSystem":{
-      "name":"UpdateStorageSystem",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateStorageSystemRequest"},
-      "output":{"shape":"UpdateStorageSystemResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalException"}
-      ],
-      "documentation":"<p>Modifies some configurations of an on-premises storage system resource that you're using with DataSync Discovery.</p>",
-      "endpoint":{"hostPrefix":"discovery-"}
-    },
     "UpdateTask":{
       "name":"UpdateTask",
       "http":{
@@ -960,61 +765,6 @@
       "max":29,
       "pattern":"[A-Z0-9]{5}(-[A-Z0-9]{5}){4}"
     },
-    "AddStorageSystemRequest":{
-      "type":"structure",
-      "required":[
-        "ServerConfiguration",
-        "SystemType",
-        "AgentArns",
-        "ClientToken",
-        "Credentials"
-      ],
-      "members":{
-        "ServerConfiguration":{
-          "shape":"DiscoveryServerConfiguration",
-          "documentation":"<p>Specifies the server name and network port required to connect with the management interface of your on-premises storage system.</p>"
-        },
-        "SystemType":{
-          "shape":"DiscoverySystemType",
-          "documentation":"<p>Specifies the type of on-premises storage system that you want DataSync Discovery to collect information about.</p> <note> <p>DataSync Discovery currently supports NetApp Fabric-Attached Storage (FAS) and All Flash FAS (AFF) systems running ONTAP 9.7 or later.</p> </note>"
-        },
-        "AgentArns":{
-          "shape":"DiscoveryAgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads from your on-premises storage system's management interface. You can only specify one ARN.</p>"
-        },
-        "CloudWatchLogGroupArn":{
-          "shape":"LogGroupArn",
-          "documentation":"<p>Specifies the ARN of the Amazon CloudWatch log group for monitoring and logging discovery job events.</p>"
-        },
-        "Tags":{
-          "shape":"InputTagList",
-          "documentation":"<p>Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your on-premises storage system.</p>"
-        },
-        "Name":{
-          "shape":"Name",
-          "documentation":"<p>Specifies a familiar name for your on-premises storage system.</p>"
-        },
-        "ClientToken":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>Specifies a client token to make sure requests with this API operation are idempotent. If you don't specify a client token, DataSync generates one for you automatically.</p>",
-          "idempotencyToken":true
-        },
-        "Credentials":{
-          "shape":"Credentials",
-          "documentation":"<p>Specifies the user name and password for accessing your on-premises storage system's management interface.</p>"
-        }
-      }
-    },
-    "AddStorageSystemResponse":{
-      "type":"structure",
-      "required":["StorageSystemArn"],
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>The ARN of the on-premises storage system that you can use with DataSync Discovery.</p>"
-        }
-      }
-    },
     "AgentArn":{
       "type":"string",
       "max":128,
@@ -1082,7 +832,10 @@
     },
     "AzureBlobAuthenticationType":{
       "type":"string",
-      "enum":["SAS"]
+      "enum":[
+        "SAS",
+        "NONE"
+      ]
     },
     "AzureBlobContainerUrl":{
       "type":"string",
@@ -1133,35 +886,21 @@
     },
     "CancelTaskExecutionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
-    "Capacity":{
+    "CmkSecretConfig":{
       "type":"structure",
       "members":{
-        "Used":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of space that's being used in a storage system resource.</p>"
-        },
-        "Provisioned":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The total amount of space available in a storage system resource.</p>"
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>Specifies the ARN for the DataSync-managed Secrets Manager secret that that is used to access a specific storage location. This property is generated by DataSync and is read-only. DataSync encrypts this secret with the KMS key that you specify for <code>KmsKeyArn</code>.</p>"
         },
-        "LogicalUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of space that's being used in a storage system resource without accounting for compression or deduplication.</p>"
-        },
-        "ClusterCloudStorageUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of space in the cluster that's in cloud storage (for example, if you're using data tiering).</p>"
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>Specifies the ARN for the customer-managed KMS key that DataSync uses to encrypt the DataSync-managed secret stored for <code>SecretArn</code>. DataSync provides this key to Secrets Manager.</p>"
         }
       },
-      "documentation":"<p>The storage capacity of an on-premises storage system resource (for example, a volume).</p>"
-    },
-    "CollectionDurationMinutes":{
-      "type":"integer",
-      "max":44640,
-      "min":60
+      "documentation":"<p>Specifies configuration information for a DataSync-managed secret, such as an authentication token or secret key that DataSync uses to access a specific storage location, with a customer-managed KMS key.</p> <note> <p>You can use either <code>CmkSecretConfig</code> or <code>CustomSecretConfig</code> to provide credentials for a <code>CreateLocation</code> request. Do not provide both parameters for the same request.</p> </note>"
     },
     "CreateAgentRequest":{
       "type":"structure",
@@ -1208,8 +947,7 @@
       "type":"structure",
       "required":[
         "ContainerUrl",
-        "AuthenticationType",
-        "AgentArns"
+        "AuthenticationType"
       ],
       "members":{
         "ContainerUrl":{
@@ -1222,7 +960,7 @@
         },
         "SasConfiguration":{
           "shape":"AzureBlobSasConfiguration",
-          "documentation":"<p>Specifies the SAS configuration that allows DataSync to access your Azure Blob Storage.</p>"
+          "documentation":"<p>Specifies the SAS configuration that allows DataSync to access your Azure Blob Storage.</p> <note> <p>If you provide an authentication token using <code>SasConfiguration</code>, but do not provide secret configuration details using <code>CmkSecretConfig</code> or <code>CustomSecretConfig</code>, then DataSync stores the token using your Amazon Web Services account's secrets manager secret.</p> </note>"
         },
         "BlobType":{
           "shape":"AzureBlobType",
@@ -1238,11 +976,19 @@
         },
         "AgentArns":{
           "shape":"AgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container.</p> <p>You can specify more than one agent. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html\">Using multiple agents for your transfer</a>.</p>"
+          "documentation":"<p>(Optional) Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container. If you are setting up an agentless cross-cloud transfer, you do not need to specify a value for this parameter.</p> <p>You can specify more than one agent. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html\">Using multiple agents for your transfer</a>.</p> <note> <p>Make sure you configure this parameter correctly when you first create your storage location. You cannot add or remove agents from a storage location after you create it.</p> </note>"
         },
         "Tags":{
           "shape":"InputTagList",
           "documentation":"<p>Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your transfer location.</p>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Specifies configuration information for a DataSync-managed secret, which includes the authentication token that DataSync uses to access a specific AzureBlob storage location, with a customer-managed KMS key.</p> <p>When you include this paramater as part of a <code>CreateLocationAzureBlob</code> request, you provide only the KMS key ARN. DataSync uses this KMS key together with the authentication token you specify for <code>SasConfiguration</code> to create a DataSync-managed secret to store the location access credentials.</p> <p>Make sure the DataSync has permission to access the KMS key that you specify.</p> <note> <p>You can use either <code>CmkSecretConfig</code> (with <code>SasConfiguration</code>) or <code>CustomSecretConfig</code> (without <code>SasConfiguration</code>) to provide credentials for a <code>CreateLocationAzureBlob</code> request. Do not provide both parameters for the same request.</p> </note>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Specifies configuration information for a customer-managed Secrets Manager secret where the authentication token for an AzureBlob storage location is stored in plain text. This configuration includes the secret ARN, and the ARN for an IAM role that provides access to the secret.</p> <note> <p>You can use either <code>CmkSecretConfig</code> (with <code>SasConfiguration</code>) or <code>CustomSecretConfig</code> (without <code>SasConfiguration</code>) to provide credentials for a <code>CreateLocationAzureBlob</code> request. Do not provide both parameters for the same request.</p> </note>"
         }
       }
     },
@@ -1506,7 +1252,7 @@
         },
         "KerberosKeytab":{
           "shape":"KerberosKeytabFile",
-          "documentation":"<p>The Kerberos key table (keytab) that contains mappings between the defined Kerberos principal and the encrypted keys. You can load the keytab from a file by providing the file's address. If you're using the CLI, it performs base64 encoding for you. Otherwise, provide the base64-encoded text. </p> <note> <p>If <code>KERBEROS</code> is specified for <code>AuthenticationType</code>, this parameter is required. </p> </note>"
+          "documentation":"<p>The Kerberos key table (keytab) that contains mappings between the defined Kerberos principal and the encrypted keys. You can load the keytab from a file by providing the file's address.</p> <note> <p>If <code>KERBEROS</code> is specified for <code>AuthenticationType</code>, this parameter is required. </p> </note>"
         },
         "KerberosKrb5Conf":{
           "shape":"KerberosKrb5ConfFile",
@@ -1545,7 +1291,7 @@
         },
         "ServerHostname":{
           "shape":"ServerHostname",
-          "documentation":"<p>Specifies the Domain Name System (DNS) name or IP version 4 address of the NFS file server that your DataSync agent connects to.</p>"
+          "documentation":"<p>Specifies the DNS name or IP address (IPv4 or IPv6) of the NFS file server that your DataSync agent connects to.</p>"
         },
         "OnPremConfig":{
           "shape":"OnPremConfig",
@@ -1576,13 +1322,12 @@
       "type":"structure",
       "required":[
         "ServerHostname",
-        "BucketName",
-        "AgentArns"
+        "BucketName"
       ],
       "members":{
         "ServerHostname":{
           "shape":"ServerHostname",
-          "documentation":"<p>Specifies the domain name or IP address of the object storage server. A DataSync agent uses this hostname to mount the object storage server in a network.</p>"
+          "documentation":"<p>Specifies the domain name or IP address (IPv4 or IPv6) of the object storage server that your DataSync agent connects to.</p>"
         },
         "ServerPort":{
           "shape":"ObjectStorageServerPort",
@@ -1590,7 +1335,7 @@
         },
         "ServerProtocol":{
           "shape":"ObjectStorageServerProtocol",
-          "documentation":"<p>Specifies the protocol that your object storage server uses to communicate.</p>"
+          "documentation":"<p>Specifies the protocol that your object storage server uses to communicate. If not specified, the default value is <code>HTTPS</code>.</p>"
         },
         "Subdirectory":{
           "shape":"S3Subdirectory",
@@ -1606,11 +1351,11 @@
         },
         "SecretKey":{
           "shape":"ObjectStorageSecretKey",
-          "documentation":"<p>Specifies the secret key (for example, a password) if credentials are required to authenticate with the object storage server.</p>"
+          "documentation":"<p>Specifies the secret key (for example, a password) if credentials are required to authenticate with the object storage server.</p> <note> <p>If you provide a secret using <code>SecretKey</code>, but do not provide secret configuration details using <code>CmkSecretConfig</code> or <code>CustomSecretConfig</code>, then DataSync stores the token using your Amazon Web Services account's Secrets Manager secret.</p> </note>"
         },
         "AgentArns":{
           "shape":"AgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Names (ARNs) of the DataSync agents that can connect with your object storage system.</p>"
+          "documentation":"<p>(Optional) Specifies the Amazon Resource Names (ARNs) of the DataSync agents that can connect with your object storage system. If you are setting up an agentless cross-cloud transfer, you do not need to specify a value for this parameter.</p> <note> <p>Make sure you configure this parameter correctly when you first create your storage location. You cannot add or remove agents from a storage location after you create it.</p> </note>"
         },
         "Tags":{
           "shape":"InputTagList",
@@ -1619,6 +1364,14 @@
         "ServerCertificate":{
           "shape":"ObjectStorageCertificate",
           "documentation":"<p>Specifies a certificate chain for DataSync to authenticate with your object storage system if the system uses a private or self-signed certificate authority (CA). You must specify a single <code>.pem</code> file with a full certificate chain (for example, <code>file:///home/user/.ssh/object_storage_certificates.pem</code>).</p> <p>The certificate chain might include:</p> <ul> <li> <p>The object storage system's certificate</p> </li> <li> <p>All intermediate certificates (if there are any)</p> </li> <li> <p>The root certificate of the signing CA</p> </li> </ul> <p>You can concatenate your certificates into a <code>.pem</code> file (which can be up to 32768 bytes before base64 encoding). The following example <code>cat</code> command creates an <code>object_storage_certificates.pem</code> file that includes three certificates:</p> <p> <code>cat object_server_certificate.pem intermediate_certificate.pem ca_root_certificate.pem &gt; object_storage_certificates.pem</code> </p> <p>To use this parameter, configure <code>ServerProtocol</code> to <code>HTTPS</code>.</p>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Specifies configuration information for a DataSync-managed secret, which includes the <code>SecretKey</code> that DataSync uses to access a specific object storage location, with a customer-managed KMS key.</p> <p>When you include this paramater as part of a <code>CreateLocationObjectStorage</code> request, you provide only the KMS key ARN. DataSync uses this KMS key together with the value you specify for the <code>SecretKey</code> parameter to create a DataSync-managed secret to store the location access credentials.</p> <p>Make sure the DataSync has permission to access the KMS key that you specify.</p> <note> <p>You can use either <code>CmkSecretConfig</code> (with <code>SecretKey</code>) or <code>CustomSecretConfig</code> (without <code>SecretKey</code>) to provide credentials for a <code>CreateLocationObjectStorage</code> request. Do not provide both parameters for the same request.</p> </note>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Specifies configuration information for a customer-managed Secrets Manager secret where the secret key for a specific object storage location is stored in plain text. This configuration includes the secret ARN, and the ARN for an IAM role that provides access to the secret.</p> <note> <p>You can use either <code>CmkSecretConfig</code> (with <code>SecretKey</code>) or <code>CustomSecretConfig</code> (without <code>SecretKey</code>) to provide credentials for a <code>CreateLocationObjectStorage</code> request. Do not provide both parameters for the same request.</p> </note>"
         }
       },
       "documentation":"<p>CreateLocationObjectStorageRequest</p>"
@@ -1679,30 +1432,28 @@
       "required":[
         "Subdirectory",
         "ServerHostname",
-        "User",
-        "Password",
         "AgentArns"
       ],
       "members":{
         "Subdirectory":{
           "shape":"SmbSubdirectory",
-          "documentation":"<p>Specifies the name of the share exported by your SMB file server where DataSync will read or write data. You can include a subdirectory in the share path (for example, <code>/path/to/subdirectory</code>). Make sure that other SMB clients in your network can also mount this path.</p> <p>To copy all data in the subdirectory, DataSync must be able to mount the SMB share and access all of its data. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the name of the share exported by your SMB file server where DataSync will read or write data. You can include a subdirectory in the share path (for example, <code>/path/to/subdirectory</code>). Make sure that other SMB clients in your network can also mount this path.</p> <p>To copy all data in the subdirectory, DataSync must be able to mount the SMB share and access all of its data. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
         },
         "ServerHostname":{
           "shape":"ServerHostname",
-          "documentation":"<p>Specifies the Domain Name Service (DNS) name or IP address of the SMB file server that your DataSync agent will mount.</p> <note> <p>You can't specify an IP version 6 (IPv6) address.</p> </note>"
+          "documentation":"<p>Specifies the domain name or IP address (IPv4 or IPv6) of the SMB file server that your DataSync agent connects to.</p> <note> <p>If you're using Kerberos authentication, you must specify a domain name.</p> </note>"
         },
         "User":{
           "shape":"SmbUser",
-          "documentation":"<p>Specifies the user that can mount and access the files, folders, and file metadata in your SMB file server.</p> <p>For information about choosing a user with the right level of access for your transfer, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the user that can mount and access the files, folders, and file metadata in your SMB file server. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p> <p>For information about choosing a user with the right level of access for your transfer, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
         },
         "Domain":{
           "shape":"SmbDomain",
-          "documentation":"<p>Specifies the name of the Active Directory domain that your SMB file server belongs to. </p> <p>If you have multiple Active Directory domains in your environment, configuring this parameter makes sure that DataSync connects to the right file server.</p>"
+          "documentation":"<p>Specifies the Windows domain name that your SMB file server belongs to. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p> <p>If you have multiple domains in your environment, configuring this parameter makes sure that DataSync connects to the right file server.</p>"
         },
         "Password":{
           "shape":"SmbPassword",
-          "documentation":"<p>Specifies the password of the user who can mount your SMB file server and has permission to access the files and folders involved in your transfer.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the password of the user who can mount your SMB file server and has permission to access the files and folders involved in your transfer. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p>"
         },
         "AgentArns":{
           "shape":"AgentArnList",
@@ -1715,6 +1466,26 @@
         "Tags":{
           "shape":"InputTagList",
           "documentation":"<p>Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your location.</p>"
+        },
+        "AuthenticationType":{
+          "shape":"SmbAuthenticationType",
+          "documentation":"<p>Specifies the authentication protocol that DataSync uses to connect to your SMB file server. DataSync supports <code>NTLM</code> (default) and <code>KERBEROS</code> authentication.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
+        },
+        "DnsIpAddresses":{
+          "shape":"DnsIpList",
+          "documentation":"<p>Specifies the IPv4 or IPv6 addresses for the DNS servers that your SMB file server belongs to. This parameter applies only if <code>AuthenticationType</code> is set to <code>KERBEROS</code>.</p> <p>If you have multiple domains in your environment, configuring this parameter makes sure that DataSync connects to the right SMB file server.</p>"
+        },
+        "KerberosPrincipal":{
+          "shape":"KerberosPrincipal",
+          "documentation":"<p>Specifies a Kerberos principal, which is an identity in your Kerberos realm that has permission to access the files, folders, and file metadata in your SMB file server.</p> <p>A Kerberos principal might look like <code>HOST/kerberosuser@MYDOMAIN.ORG</code>.</p> <p>Principal names are case sensitive. Your DataSync task execution will fail if the principal that you specify for this parameter doesn’t exactly match the principal that you use to create the keytab file.</p>"
+        },
+        "KerberosKeytab":{
+          "shape":"KerberosKeytabFile",
+          "documentation":"<p>Specifies your Kerberos key table (keytab) file, which includes mappings between your Kerberos principal and encryption keys.</p> <p>To avoid task execution errors, make sure that the Kerberos principal that you use to create the keytab file matches exactly what you specify for <code>KerberosPrincipal</code>. </p>"
+        },
+        "KerberosKrb5Conf":{
+          "shape":"KerberosKrb5ConfFile",
+          "documentation":"<p>Specifies a Kerberos configuration file (<code>krb5.conf</code>) that defines your Kerberos realm configuration.</p> <p>The file must be base64 encoded. If you're using the CLI, the encoding is done for you.</p>"
         }
       },
       "documentation":"<p>CreateLocationSmbRequest</p>"
@@ -1782,7 +1553,7 @@
         },
         "TaskMode":{
           "shape":"TaskMode",
-          "documentation":"<p>Specifies one of the following task modes for your data transfer:</p> <ul> <li> <p> <code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations.</p> <note> <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p> </note> </li> <li> <p> <code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html\">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences\">Understanding task mode differences</a>.</p>"
+          "documentation":"<p>Specifies one of the following task modes for your data transfer:</p> <ul> <li> <p> <code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p> <note> <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p> </note> </li> <li> <p> <code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html\">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences\">Understanding task mode differences</a>.</p>"
         }
       },
       "documentation":"<p>CreateTaskRequest</p>"
@@ -1797,23 +1568,19 @@
       },
       "documentation":"<p>CreateTaskResponse</p>"
     },
-    "Credentials":{
+    "CustomSecretConfig":{
       "type":"structure",
-      "required":[
-        "Username",
-        "Password"
-      ],
       "members":{
-        "Username":{
-          "shape":"PtolemyUsername",
-          "documentation":"<p>Specifies the user name for your storage system's management interface.</p>"
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>Specifies the ARN for an Secrets Manager secret.</p>"
         },
-        "Password":{
-          "shape":"PtolemyPassword",
-          "documentation":"<p>Specifies the password for your storage system's management interface.</p>"
+        "SecretAccessRoleArn":{
+          "shape":"IamRoleArnOrEmptyString",
+          "documentation":"<p>Specifies the ARN for the Identity and Access Management role that DataSync uses to access the secret specified for <code>SecretArn</code>.</p>"
         }
       },
-      "documentation":"<p>The credentials that provide DataSync Discovery read access to your on-premises storage system's management interface.</p> <p>DataSync Discovery stores these credentials in <a href=\"https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html\">Secrets Manager</a>. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-configure-storage.html\">Accessing your on-premises storage system</a>.</p>"
+      "documentation":"<p>Specifies configuration information for a customer-managed Secrets Manager secret where a storage location authentication token or secret key is stored in plain text. This configuration includes the secret ARN, and the ARN for an IAM role that provides access to the secret.</p> <note> <p>You can use either <code>CmkSecretConfig</code> or <code>CustomSecretConfig</code> to provide credentials for a <code>CreateLocation</code> request. Do not provide both parameters for the same request.</p> </note>"
     },
     "DeleteAgentRequest":{
       "type":"structure",
@@ -1828,8 +1595,7 @@
     },
     "DeleteAgentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLocationRequest":{
       "type":"structure",
@@ -1844,8 +1610,7 @@
     },
     "DeleteLocationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTaskRequest":{
       "type":"structure",
@@ -1860,8 +1625,7 @@
     },
     "DeleteTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAgentRequest":{
       "type":"structure",
@@ -1912,45 +1676,6 @@
       },
       "documentation":"<p>DescribeAgentResponse</p>"
     },
-    "DescribeDiscoveryJobRequest":{
-      "type":"structure",
-      "required":["DiscoveryJobArn"],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that you want information about.</p>"
-        }
-      }
-    },
-    "DescribeDiscoveryJobResponse":{
-      "type":"structure",
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>The ARN of the on-premises storage system you're running the discovery job on.</p>"
-        },
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>The ARN of the discovery job.</p>"
-        },
-        "CollectionDurationMinutes":{
-          "shape":"CollectionDurationMinutes",
-          "documentation":"<p>The number of minutes that the discovery job runs.</p>"
-        },
-        "Status":{
-          "shape":"DiscoveryJobStatus",
-          "documentation":"<p>Indicates the status of a discovery job. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#discovery-job-statuses-table\">Discovery job statuses</a>.</p>"
-        },
-        "JobStartTime":{
-          "shape":"DiscoveryTime",
-          "documentation":"<p>The time when the discovery job started.</p>"
-        },
-        "JobEndTime":{
-          "shape":"DiscoveryTime",
-          "documentation":"<p>The time when the discovery job ended.</p>"
-        }
-      }
-    },
     "DescribeLocationAzureBlobRequest":{
       "type":"structure",
       "required":["LocationArn"],
@@ -1991,6 +1716,18 @@
         "CreationTime":{
           "shape":"Time",
           "documentation":"<p>The time that your Azure Blob Storage transfer location was created.</p>"
+        },
+        "ManagedSecretConfig":{
+          "shape":"ManagedSecretConfig",
+          "documentation":"<p>Describes configuration information for a DataSync-managed secret, such as an authentication token that DataSync uses to access a specific storage location. DataSync uses the default Amazon Web Services-managed KMS key to encrypt this secret in Secrets Manager.</p>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Describes configuration information for a DataSync-managed secret, such as an authentication token that DataSync uses to access a specific storage location, with a customer-managed KMS key.</p>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Describes configuration information for a customer-managed secret, such as an authentication token that DataSync uses to access a specific storage location, with a customer-managed KMS key.</p>"
         }
       }
     },
@@ -2323,6 +2060,18 @@
         "ServerCertificate":{
           "shape":"ObjectStorageCertificate",
           "documentation":"<p>The certificate chain for DataSync to authenticate with your object storage system if the system uses a private or self-signed certificate authority (CA).</p>"
+        },
+        "ManagedSecretConfig":{
+          "shape":"ManagedSecretConfig",
+          "documentation":"<p>Describes configuration information for a DataSync-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location. DataSync uses the default Amazon Web Services-managed KMS key to encrypt this secret in Secrets Manager.</p>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Describes configuration information for a DataSync-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Describes configuration information for a customer-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
         }
       },
       "documentation":"<p>DescribeLocationObjectStorageResponse</p>"
@@ -2393,174 +2142,34 @@
         },
         "User":{
           "shape":"SmbUser",
-          "documentation":"<p>The user that can mount and access the files, folders, and file metadata in your SMB file server.</p>"
+          "documentation":"<p>The user that can mount and access the files, folders, and file metadata in your SMB file server. This element applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p>"
         },
         "Domain":{
           "shape":"SmbDomain",
-          "documentation":"<p>The name of the Microsoft Active Directory domain that the SMB file server belongs to.</p>"
+          "documentation":"<p>The name of the Windows domain that the SMB file server belongs to. This element applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p>"
         },
         "MountOptions":{
           "shape":"SmbMountOptions",
-          "documentation":"<p>The protocol that DataSync use to access your SMB file.</p>"
+          "documentation":"<p>The SMB protocol version that DataSync uses to access your SMB file server.</p>"
         },
         "CreationTime":{
           "shape":"Time",
           "documentation":"<p>The time that the SMB location was created.</p>"
-        }
-      },
-      "documentation":"<p>DescribeLocationSmbResponse</p>"
-    },
-    "DescribeStorageSystemRequest":{
-      "type":"structure",
-      "required":["StorageSystemArn"],
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of an on-premises storage system that you're using with DataSync Discovery.</p>"
-        }
-      }
-    },
-    "DescribeStorageSystemResourceMetricsRequest":{
-      "type":"structure",
-      "required":[
-        "DiscoveryJobArn",
-        "ResourceType",
-        "ResourceId"
-      ],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that collects information about your on-premises storage system.</p>"
-        },
-        "ResourceType":{
-          "shape":"DiscoveryResourceType",
-          "documentation":"<p>Specifies the kind of storage system resource that you want information about.</p>"
-        },
-        "ResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>Specifies the universally unique identifier (UUID) of the storage system resource that you want information about.</p>"
-        },
-        "StartTime":{
-          "shape":"DiscoveryTime",
-          "documentation":"<p>Specifies a time within the total duration that the discovery job ran. To see information gathered during a certain time frame, use this parameter with <code>EndTime</code>.</p>"
-        },
-        "EndTime":{
-          "shape":"DiscoveryTime",
-          "documentation":"<p>Specifies a time within the total duration that the discovery job ran. To see information gathered during a certain time frame, use this parameter with <code>StartTime</code>.</p>"
-        },
-        "MaxResults":{
-          "shape":"DiscoveryMaxResults",
-          "documentation":"<p>Specifies how many results that you want in the response.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>Specifies an opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
-    "DescribeStorageSystemResourceMetricsResponse":{
-      "type":"structure",
-      "members":{
-        "Metrics":{
-          "shape":"Metrics",
-          "documentation":"<p>The details that your discovery job collected about your storage system resource.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>The opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
-    "DescribeStorageSystemResourcesRequest":{
-      "type":"structure",
-      "required":[
-        "DiscoveryJobArn",
-        "ResourceType"
-      ],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that's collecting data from your on-premises storage system.</p>"
-        },
-        "ResourceType":{
-          "shape":"DiscoveryResourceType",
-          "documentation":"<p>Specifies what kind of storage system resources that you want information about.</p>"
-        },
-        "ResourceIds":{
-          "shape":"ResourceIds",
-          "documentation":"<p>Specifies the universally unique identifiers (UUIDs) of the storage system resources that you want information about. You can't use this parameter in combination with the <code>Filter</code> parameter.</p>"
-        },
-        "Filter":{
-          "shape":"ResourceFilters",
-          "documentation":"<p>Filters the storage system resources that you want returned. For example, this might be volumes associated with a specific storage virtual machine (SVM).</p>"
-        },
-        "MaxResults":{
-          "shape":"DiscoveryMaxResults",
-          "documentation":"<p>Specifies the maximum number of storage system resources that you want to list in a response.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>Specifies an opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
-    "DescribeStorageSystemResourcesResponse":{
-      "type":"structure",
-      "members":{
-        "ResourceDetails":{
-          "shape":"ResourceDetails",
-          "documentation":"<p>The information collected about your storage system's resources. A response can also include Amazon Web Services storage service recommendations.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-findings.html\">storage resource information</a> collected by and <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">recommendations</a> provided by DataSync Discovery.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>The opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
-    "DescribeStorageSystemResponse":{
-      "type":"structure",
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>The ARN of the on-premises storage system that the discovery job looked at.</p>"
-        },
-        "ServerConfiguration":{
-          "shape":"DiscoveryServerConfiguration",
-          "documentation":"<p>The server name and network port required to connect with your on-premises storage system's management interface.</p>"
-        },
-        "SystemType":{
-          "shape":"DiscoverySystemType",
-          "documentation":"<p>The type of on-premises storage system.</p> <note> <p>DataSync Discovery currently only supports NetApp Fabric-Attached Storage (FAS) and All Flash FAS (AFF) systems running ONTAP 9.7 or later. </p> </note>"
         },
-        "AgentArns":{
-          "shape":"DiscoveryAgentArnList",
-          "documentation":"<p>The ARN of the DataSync agent that connects to and reads from your on-premises storage system.</p>"
-        },
-        "Name":{
-          "shape":"Name",
-          "documentation":"<p>The name that you gave your on-premises storage system when adding it to DataSync Discovery.</p>"
+        "DnsIpAddresses":{
+          "shape":"DnsIpList",
+          "documentation":"<p>The IPv4 or IPv6 addresses for the DNS servers that your SMB file server belongs to. This element applies only if <code>AuthenticationType</code> is set to <code>KERBEROS</code>.</p>"
         },
-        "ErrorMessage":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>Describes the connectivity error that the DataSync agent is encountering with your on-premises storage system.</p>"
-        },
-        "ConnectivityStatus":{
-          "shape":"StorageSystemConnectivityStatus",
-          "documentation":"<p>Indicates whether your DataSync agent can connect to your on-premises storage system.</p>"
-        },
-        "CloudWatchLogGroupArn":{
-          "shape":"LogGroupArn",
-          "documentation":"<p>The ARN of the Amazon CloudWatch log group that's used to monitor and log discovery job events.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when you added the on-premises storage system to DataSync Discovery.</p>"
+        "KerberosPrincipal":{
+          "shape":"KerberosPrincipal",
+          "documentation":"<p>The Kerberos principal that has permission to access the files, folders, and file metadata in your SMB file server.</p>"
         },
-        "SecretsManagerArn":{
-          "shape":"SecretsManagerArn",
-          "documentation":"<p>The ARN of the secret that stores your on-premises storage system's credentials. DataSync Discovery stores these credentials in <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-configure-storage.html#discovery-add-storage\">Secrets Manager</a>.</p>"
+        "AuthenticationType":{
+          "shape":"SmbAuthenticationType",
+          "documentation":"<p>The authentication protocol that DataSync uses to connect to your SMB file server.</p>"
         }
-      }
+      },
+      "documentation":"<p>DescribeLocationSmbResponse</p>"
     },
     "DescribeTaskExecutionRequest":{
       "type":"structure",
@@ -2599,7 +2208,7 @@
         },
         "StartTime":{
           "shape":"Time",
-          "documentation":"<p>The time when the task execution started.</p>"
+          "documentation":"<p>The time that DataSync sends the request to start the task execution. For non-queued tasks, <code>LaunchTime</code> and <code>StartTime</code> are typically the same. For queued tasks, <code>LaunchTime</code> is typically later than <code>StartTime</code> because previously queued tasks must finish running before newer tasks can begin.</p>"
         },
         "EstimatedFilesToTransfer":{
           "shape":"long",
@@ -2668,6 +2277,14 @@
         "FilesFailed":{
           "shape":"TaskExecutionFilesFailedDetail",
           "documentation":"<p>The number of objects that DataSync fails to prepare, transfer, verify, and delete during your task execution.</p> <note> <p>Applies only to <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html\">Enhanced mode tasks</a>.</p> </note>"
+        },
+        "LaunchTime":{
+          "shape":"Time",
+          "documentation":"<p>The time that the task execution actually begins. For non-queued tasks, <code>LaunchTime</code> and <code>StartTime</code> are typically the same. For queued tasks, <code>LaunchTime</code> is typically later than <code>StartTime</code> because previously queued tasks must finish running before newer tasks can begin.</p>"
+        },
+        "EndTime":{
+          "shape":"Time",
+          "documentation":"<p>The time that the transfer task ends.</p>"
         }
       },
       "documentation":"<p>DescribeTaskExecutionResponse</p>"
@@ -2773,100 +2390,11 @@
       "type":"list",
       "member":{"shape":"NetworkInterfaceArn"}
     },
-    "DiscoveryAgentArnList":{
+    "DnsIpList":{
       "type":"list",
-      "member":{"shape":"AgentArn"},
-      "max":1,
-      "min":1
-    },
-    "DiscoveryJobArn":{
-      "type":"string",
-      "max":256,
-      "pattern":"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:system/storage-system-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/job/discovery-job-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
-    },
-    "DiscoveryJobList":{
-      "type":"list",
-      "member":{"shape":"DiscoveryJobListEntry"}
-    },
-    "DiscoveryJobListEntry":{
-      "type":"structure",
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a discovery job.</p>"
-        },
-        "Status":{
-          "shape":"DiscoveryJobStatus",
-          "documentation":"<p>The status of a discovery job. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#discovery-job-statuses-table\">Discovery job statuses</a>.</p>"
-        }
-      },
-      "documentation":"<p>The details about a specific DataSync discovery job.</p>"
-    },
-    "DiscoveryJobStatus":{
-      "type":"string",
-      "enum":[
-        "RUNNING",
-        "WARNING",
-        "TERMINATED",
-        "FAILED",
-        "STOPPED",
-        "COMPLETED",
-        "COMPLETED_WITH_ISSUES"
-      ]
-    },
-    "DiscoveryMaxResults":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "DiscoveryNextToken":{
-      "type":"string",
-      "max":65535,
-      "pattern":"[a-zA-Z0-9=_-]+"
+      "member":{"shape":"ServerIpAddress"},
+      "max":2
     },
-    "DiscoveryResourceFilter":{
-      "type":"string",
-      "enum":["SVM"]
-    },
-    "DiscoveryResourceType":{
-      "type":"string",
-      "enum":[
-        "SVM",
-        "VOLUME",
-        "CLUSTER"
-      ]
-    },
-    "DiscoveryServerConfiguration":{
-      "type":"structure",
-      "required":["ServerHostname"],
-      "members":{
-        "ServerHostname":{
-          "shape":"DiscoveryServerHostname",
-          "documentation":"<p>The domain name or IP address of your storage system's management interface.</p>"
-        },
-        "ServerPort":{
-          "shape":"DiscoveryServerPort",
-          "documentation":"<p>The network port for accessing the storage system's management interface.</p>"
-        }
-      },
-      "documentation":"<p>The network settings that DataSync Discovery uses to connect with your on-premises storage system's management interface.</p>"
-    },
-    "DiscoveryServerHostname":{
-      "type":"string",
-      "max":255,
-      "pattern":"^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$"
-    },
-    "DiscoveryServerPort":{
-      "type":"integer",
-      "box":true,
-      "max":65535,
-      "min":1
-    },
-    "DiscoverySystemType":{
-      "type":"string",
-      "enum":["NetAppONTAP"]
-    },
-    "DiscoveryTime":{"type":"timestamp"},
     "Duration":{
       "type":"long",
       "min":0
@@ -2927,10 +2455,6 @@
       "max":4096,
       "pattern":"^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\p{Zs}]*$"
     },
-    "EnabledProtocols":{
-      "type":"list",
-      "member":{"shape":"PtolemyString"}
-    },
     "Endpoint":{
       "type":"string",
       "max":15,
@@ -2942,14 +2466,10 @@
       "enum":[
         "PUBLIC",
         "PRIVATE_LINK",
-        "FIPS"
+        "FIPS",
+        "FIPS_PRIVATE_LINK"
       ]
     },
-    "ErrorMessage":{
-      "type":"string",
-      "max":128,
-      "pattern":".*"
-    },
     "FilterAttributeValue":{
       "type":"string",
       "max":255,
@@ -2962,10 +2482,6 @@
       "max":1,
       "min":0
     },
-    "FilterMembers":{
-      "type":"list",
-      "member":{"shape":"PtolemyString"}
-    },
     "FilterRule":{
       "type":"structure",
       "members":{
@@ -3074,7 +2590,7 @@
       "type":"structure",
       "members":{
         "Domain":{
-          "shape":"FsxUpdateSmbDomain",
+          "shape":"UpdateSmbDomain",
           "documentation":"<p>Specifies the name of the Windows domain that your storage virtual machine (SVM) belongs to.</p> <p>If you have multiple Active Directory domains in your environment, configuring this parameter makes sure that DataSync connects to the right SVM.</p>"
         },
         "MountOptions":{"shape":"SmbMountOptions"},
@@ -3089,43 +2605,11 @@
       },
       "documentation":"<p>Specifies the Server Message Block (SMB) protocol configuration that DataSync uses to access your Amazon FSx for NetApp ONTAP file system's storage virtual machine (SVM). For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-ontap-location.html#create-ontap-location-access\">Providing DataSync access to FSx for ONTAP file systems</a>.</p>"
     },
-    "FsxUpdateSmbDomain":{
-      "type":"string",
-      "max":253,
-      "pattern":"^([A-Za-z0-9]((\\.|-+)?[A-Za-z0-9]){0,252})?$"
-    },
     "FsxWindowsSubdirectory":{
       "type":"string",
       "max":4096,
       "pattern":"^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
     },
-    "GenerateRecommendationsRequest":{
-      "type":"structure",
-      "required":[
-        "DiscoveryJobArn",
-        "ResourceIds",
-        "ResourceType"
-      ],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that collects information about your on-premises storage system.</p>"
-        },
-        "ResourceIds":{
-          "shape":"ResourceIds",
-          "documentation":"<p>Specifies the universally unique identifiers (UUIDs) of the resources in your storage system that you want recommendations on.</p>"
-        },
-        "ResourceType":{
-          "shape":"DiscoveryResourceType",
-          "documentation":"<p>Specifies the type of resource in your storage system that you want recommendations on.</p>"
-        }
-      }
-    },
-    "GenerateRecommendationsResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
     "Gid":{
       "type":"string",
       "enum":[
@@ -3218,33 +2702,16 @@
       "min":1,
       "pattern":"^[_.A-Za-z0-9][-_.A-Za-z0-9]*$"
     },
-    "IOPS":{
-      "type":"structure",
-      "members":{
-        "Read":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS related to read operations.</p>"
-        },
-        "Write":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS related to write operations.</p>"
-        },
-        "Other":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS unrelated to read and write operations.</p>"
-        },
-        "Total":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak total IOPS on your on-premises storage system resource.</p>"
-        }
-      },
-      "documentation":"<p>The IOPS peaks for an on-premises storage system resource. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-    },
     "IamRoleArn":{
       "type":"string",
       "max":2048,
       "pattern":"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/.*$"
     },
+    "IamRoleArnOrEmptyString":{
+      "type":"string",
+      "max":2048,
+      "pattern":"^(arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):iam::[0-9]{12}:role/[a-zA-Z0-9+=,.@_-]+|)$"
+    },
     "InputTagList":{
       "type":"list",
       "member":{"shape":"TagListEntry"},
@@ -3285,30 +2752,17 @@
       "min":1,
       "pattern":"^.+$"
     },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":2048,
+      "pattern":"^(arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):kms:[a-z\\-0-9]+:[0-9]{12}:key/.*|)$"
+    },
     "KmsKeyProviderUri":{
       "type":"string",
       "max":255,
       "min":1,
       "pattern":"^kms:\\/\\/http[s]?@(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])(;(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9]))*:[0-9]{1,5}\\/kms$"
     },
-    "Latency":{
-      "type":"structure",
-      "members":{
-        "Read":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for read operations.</p>"
-        },
-        "Write":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for write operations.</p>"
-        },
-        "Other":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for operations unrelated to read and write operations.</p>"
-        }
-      },
-      "documentation":"<p>The latency peaks for an on-premises storage system resource. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-    },
     "ListAgentsRequest":{
       "type":"structure",
       "members":{
@@ -3337,36 +2791,6 @@
       },
       "documentation":"<p>ListAgentsResponse</p>"
     },
-    "ListDiscoveryJobsRequest":{
-      "type":"structure",
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of an on-premises storage system. Use this parameter if you only want to list the discovery jobs that are associated with a specific storage system.</p>"
-        },
-        "MaxResults":{
-          "shape":"DiscoveryMaxResults",
-          "documentation":"<p>Specifies how many results you want in the response.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>Specifies an opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
-    "ListDiscoveryJobsResponse":{
-      "type":"structure",
-      "members":{
-        "DiscoveryJobs":{
-          "shape":"DiscoveryJobList",
-          "documentation":"<p>The discovery jobs that you've run.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>The opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
     "ListLocationsRequest":{
       "type":"structure",
       "members":{
@@ -3399,32 +2823,6 @@
       },
       "documentation":"<p>ListLocationsResponse</p>"
     },
-    "ListStorageSystemsRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"DiscoveryMaxResults",
-          "documentation":"<p>Specifies how many results you want in the response.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>Specifies an opaque string that indicates the position to begin the next list of results in the response. </p>"
-        }
-      }
-    },
-    "ListStorageSystemsResponse":{
-      "type":"structure",
-      "members":{
-        "StorageSystems":{
-          "shape":"StorageSystemList",
-          "documentation":"<p>The Amazon Resource Names ARNs) of the on-premises storage systems that you're using with DataSync Discovery.</p>"
-        },
-        "NextToken":{
-          "shape":"DiscoveryNextToken",
-          "documentation":"<p>The opaque string that indicates the position to begin the next list of results in the response.</p>"
-        }
-      }
-    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["ResourceArn"],
@@ -3575,7 +2973,7 @@
         },
         "LocationUri":{
           "shape":"LocationUri",
-          "documentation":"<p>Represents a list of URIs of a location. <code>LocationUri</code> returns an array that contains a list of locations when the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html\">ListLocations</a> operation is called.</p> <p>Format: <code>TYPE://GLOBAL_ID/SUBDIR</code>.</p> <p>TYPE designates the type of location (for example, <code>nfs</code> or <code>s3</code>).</p> <p>GLOBAL_ID is the globally unique identifier of the resource that backs the location. An example for EFS is <code>us-east-2.fs-abcd1234</code>. An example for Amazon S3 is the bucket name, such as <code>myBucket</code>. An example for NFS is a valid IPv4 address or a hostname that is compliant with Domain Name Service (DNS).</p> <p>SUBDIR is a valid file system path, delimited by forward slashes as is the *nix convention. For NFS and Amazon EFS, it's the export path to mount the location. For Amazon S3, it's the prefix path that you mount to and treat as the root of the location.</p> <p/>"
+          "documentation":"<p>Represents a list of URIs of a location. <code>LocationUri</code> returns an array that contains a list of locations when the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html\">ListLocations</a> operation is called.</p> <p>Format: <code>TYPE://GLOBAL_ID/SUBDIR</code>.</p> <p>TYPE designates the type of location (for example, <code>nfs</code> or <code>s3</code>).</p> <p>GLOBAL_ID is the globally unique identifier of the resource that backs the location. An example for EFS is <code>us-east-2.fs-abcd1234</code>. An example for Amazon S3 is the bucket name, such as <code>myBucket</code>. An example for NFS is a valid IPv4 or IPv6 address or a hostname that is compliant with DNS.</p> <p>SUBDIR is a valid file system path, delimited by forward slashes as is the *nix convention. For NFS and Amazon EFS, it's the export path to mount the location. For Amazon S3, it's the prefix path that you mount to and treat as the root of the location.</p> <p/>"
         }
       },
       "documentation":"<p>Represents a single entry in a list of locations. <code>LocationListEntry</code> returns an array that contains a list of locations when the <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/API_ListLocations.html\">ListLocations</a> operation is called.</p>"
@@ -3598,6 +2996,16 @@
         "TRANSFER"
       ]
     },
+    "ManagedSecretConfig":{
+      "type":"structure",
+      "members":{
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>Specifies the ARN for an Secrets Manager secret.</p>"
+        }
+      },
+      "documentation":"<p>Specifies configuration information for a DataSync-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location. DataSync uses the default Amazon Web Services-managed KMS key to encrypt this secret in Secrets Manager.</p>"
+    },
     "ManifestAction":{
       "type":"string",
       "enum":["TRANSFER"]
@@ -3624,65 +3032,11 @@
       "type":"string",
       "enum":["CSV"]
     },
-    "MaxP95Performance":{
-      "type":"structure",
-      "members":{
-        "IopsRead":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS related to read operations.</p>"
-        },
-        "IopsWrite":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS related to write operations.</p>"
-        },
-        "IopsOther":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak IOPS unrelated to read and write operations.</p>"
-        },
-        "IopsTotal":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak total IOPS on your on-premises storage system resource.</p>"
-        },
-        "ThroughputRead":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput related to read operations.</p>"
-        },
-        "ThroughputWrite":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput related to write operations.</p>"
-        },
-        "ThroughputOther":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput unrelated to read and write operations.</p>"
-        },
-        "ThroughputTotal":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak total throughput on your on-premises storage system resource.</p>"
-        },
-        "LatencyRead":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for read operations.</p>"
-        },
-        "LatencyWrite":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for write operations.</p>"
-        },
-        "LatencyOther":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak latency for operations unrelated to read and write operations.</p>"
-        }
-      },
-      "documentation":"<p>The performance data that DataSync Discovery collects about an on-premises storage system resource.</p>"
-    },
     "MaxResults":{
       "type":"integer",
       "max":100,
       "min":0
     },
-    "Metrics":{
-      "type":"list",
-      "member":{"shape":"ResourceMetrics"}
-    },
     "Mtime":{
       "type":"string",
       "enum":[
@@ -3690,206 +3044,6 @@
         "PRESERVE"
       ]
     },
-    "Name":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"^[\\p{L}\\p{M}\\p{N}\\s+=._:@\\/-]+$"
-    },
-    "NetAppONTAPCluster":{
-      "type":"structure",
-      "members":{
-        "CifsShareCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of CIFS shares in the cluster.</p>"
-        },
-        "NfsExportedVolumes":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of NFS volumes in the cluster.</p>"
-        },
-        "ResourceId":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>The universally unique identifier (UUID) of the cluster.</p>"
-        },
-        "ClusterName":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The name of the cluster.</p>"
-        },
-        "MaxP95Performance":{
-          "shape":"MaxP95Performance",
-          "documentation":"<p>The performance data that DataSync Discovery collects about the cluster.</p>"
-        },
-        "ClusterBlockStorageSize":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The total storage space that's available in the cluster.</p>"
-        },
-        "ClusterBlockStorageUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in a cluster.</p>"
-        },
-        "ClusterBlockStorageLogicalUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in the cluster without accounting for compression or deduplication.</p>"
-        },
-        "Recommendations":{
-          "shape":"Recommendations",
-          "documentation":"<p>The Amazon Web Services storage services that DataSync Discovery recommends for the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">Recommendations provided by DataSync Discovery</a>.</p>"
-        },
-        "RecommendationStatus":{
-          "shape":"RecommendationStatus",
-          "documentation":"<p>Indicates whether DataSync Discovery recommendations for the cluster are ready to view, incomplete, or can't be determined.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#recommendation-statuses-table\">Recommendation statuses</a>.</p>"
-        },
-        "LunCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of LUNs (logical unit numbers) in the cluster.</p>"
-        },
-        "ClusterCloudStorageUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of space in the cluster that's in cloud storage (for example, if you're using data tiering).</p>"
-        }
-      },
-      "documentation":"<p>The information that DataSync Discovery collects about an on-premises storage system cluster.</p>"
-    },
-    "NetAppONTAPClusters":{
-      "type":"list",
-      "member":{"shape":"NetAppONTAPCluster"}
-    },
-    "NetAppONTAPSVM":{
-      "type":"structure",
-      "members":{
-        "ClusterUuid":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>The universally unique identifier (UUID) of the cluster associated with the SVM.</p>"
-        },
-        "ResourceId":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>The UUID of the SVM.</p>"
-        },
-        "SvmName":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The name of the SVM</p>"
-        },
-        "CifsShareCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of CIFS shares in the SVM.</p>"
-        },
-        "EnabledProtocols":{
-          "shape":"EnabledProtocols",
-          "documentation":"<p>The data transfer protocols (such as NFS) configured for the SVM.</p>"
-        },
-        "TotalCapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in the SVM.</p>"
-        },
-        "TotalCapacityProvisioned":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The total storage space that's available in the SVM.</p>"
-        },
-        "TotalLogicalCapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in the SVM without accounting for compression or deduplication.</p>"
-        },
-        "MaxP95Performance":{
-          "shape":"MaxP95Performance",
-          "documentation":"<p>The performance data that DataSync Discovery collects about the SVM.</p>"
-        },
-        "Recommendations":{
-          "shape":"Recommendations",
-          "documentation":"<p>The Amazon Web Services storage services that DataSync Discovery recommends for the SVM. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">Recommendations provided by DataSync Discovery</a>.</p>"
-        },
-        "NfsExportedVolumes":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of NFS volumes in the SVM.</p>"
-        },
-        "RecommendationStatus":{
-          "shape":"RecommendationStatus",
-          "documentation":"<p>Indicates whether DataSync Discovery recommendations for the SVM are ready to view, incomplete, or can't be determined.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#recommendation-statuses-table\">Recommendation statuses</a>.</p>"
-        },
-        "TotalSnapshotCapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of storage in the SVM that's being used for snapshots.</p>"
-        },
-        "LunCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of LUNs (logical unit numbers) in the SVM.</p>"
-        }
-      },
-      "documentation":"<p>The information that DataSync Discovery collects about a storage virtual machine (SVM) in your on-premises storage system.</p>"
-    },
-    "NetAppONTAPSVMs":{
-      "type":"list",
-      "member":{"shape":"NetAppONTAPSVM"}
-    },
-    "NetAppONTAPVolume":{
-      "type":"structure",
-      "members":{
-        "VolumeName":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The name of the volume.</p>"
-        },
-        "ResourceId":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>The universally unique identifier (UUID) of the volume.</p>"
-        },
-        "CifsShareCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of CIFS shares in the volume.</p>"
-        },
-        "SecurityStyle":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The volume's security style (such as Unix or NTFS).</p>"
-        },
-        "SvmUuid":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>The UUID of the storage virtual machine (SVM) associated with the volume.</p>"
-        },
-        "SvmName":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The name of the SVM associated with the volume.</p>"
-        },
-        "CapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in the volume.</p>"
-        },
-        "CapacityProvisioned":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The total storage space that's available in the volume.</p>"
-        },
-        "LogicalCapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The storage space that's being used in the volume without accounting for compression or deduplication.</p>"
-        },
-        "NfsExported":{
-          "shape":"PtolemyBoolean",
-          "documentation":"<p>The number of NFS volumes in the volume.</p>"
-        },
-        "SnapshotCapacityUsed":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The amount of storage in the volume that's being used for snapshots.</p>"
-        },
-        "MaxP95Performance":{
-          "shape":"MaxP95Performance",
-          "documentation":"<p>The performance data that DataSync Discovery collects about the volume.</p>"
-        },
-        "Recommendations":{
-          "shape":"Recommendations",
-          "documentation":"<p>The Amazon Web Services storage services that DataSync Discovery recommends for the volume. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">Recommendations provided by DataSync Discovery</a>.</p>"
-        },
-        "RecommendationStatus":{
-          "shape":"RecommendationStatus",
-          "documentation":"<p>Indicates whether DataSync Discovery recommendations for the volume are ready to view, incomplete, or can't be determined.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#recommendation-statuses-table\">Recommendation statuses</a>.</p>"
-        },
-        "LunCount":{
-          "shape":"NonNegativeLong",
-          "documentation":"<p>The number of LUNs (logical unit numbers) in the volume.</p>"
-        }
-      },
-      "documentation":"<p>The information that DataSync Discovery collects about a volume in your on-premises storage system.</p>"
-    },
-    "NetAppONTAPVolumes":{
-      "type":"list",
-      "member":{"shape":"NetAppONTAPVolume"}
-    },
     "NetworkInterfaceArn":{
       "type":"string",
       "max":128,
@@ -3924,16 +3078,6 @@
         "NFS4_1"
       ]
     },
-    "NonNegativeDouble":{
-      "type":"double",
-      "box":true,
-      "min":0
-    },
-    "NonNegativeLong":{
-      "type":"long",
-      "box":true,
-      "min":0
-    },
     "ObjectStorageAccessKey":{
       "type":"string",
       "max":200,
@@ -3944,7 +3088,7 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[a-zA-Z0-9_\\-\\+\\./\\(\\)\\$\\p{Zs}]+$"
+      "pattern":"^[a-zA-Z0-9_\\-\\+\\.\\(\\)\\$\\p{Zs}]+$"
     },
     "ObjectStorageCertificate":{
       "type":"blob",
@@ -4089,24 +3233,6 @@
         "NEVER"
       ]
     },
-    "P95Metrics":{
-      "type":"structure",
-      "members":{
-        "IOPS":{
-          "shape":"IOPS",
-          "documentation":"<p>The IOPS peaks for an on-premises storage system resource. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-        },
-        "Throughput":{
-          "shape":"Throughput",
-          "documentation":"<p>The throughput peaks for an on-premises storage system resource. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-        },
-        "Latency":{
-          "shape":"Latency",
-          "documentation":"<p>The latency peaks for an on-premises storage system resource. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-        }
-      },
-      "documentation":"<p>The types of performance data that DataSync Discovery collects about an on-premises storage system resource.</p>"
-    },
     "PLSecurityGroupArnList":{
       "type":"list",
       "member":{"shape":"Ec2SecurityGroupArn"},
@@ -4180,28 +3306,6 @@
       },
       "documentation":"<p>Specifies how your DataSync agent connects to Amazon Web Services using a <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/choose-service-endpoint.html#choose-service-endpoint-vpc\">virtual private cloud (VPC) service endpoint</a>. An agent that uses a VPC endpoint isn't accessible over the public internet.</p>"
     },
-    "PtolemyBoolean":{"type":"boolean"},
-    "PtolemyPassword":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^(?!.*[:\\\"][^:\"]*$).+$",
-      "sensitive":true
-    },
-    "PtolemyString":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^.{0,1024}$"
-    },
-    "PtolemyUUID":{
-      "type":"string",
-      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
-    },
-    "PtolemyUsername":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^(?!.*[:\\\"][^:\"]*$).+$",
-      "sensitive":true
-    },
     "QopConfiguration":{
       "type":"structure",
       "members":{
@@ -4216,57 +3320,6 @@
       },
       "documentation":"<p>The Quality of Protection (QOP) configuration specifies the Remote Procedure Call (RPC) and data transfer privacy settings configured on the Hadoop Distributed File System (HDFS) cluster.</p>"
     },
-    "Recommendation":{
-      "type":"structure",
-      "members":{
-        "StorageType":{
-          "shape":"PtolemyString",
-          "documentation":"<p>A recommended Amazon Web Services storage service that you can migrate data to based on information that DataSync Discovery collects about your on-premises storage system.</p>"
-        },
-        "StorageConfiguration":{
-          "shape":"RecommendationsConfigMap",
-          "documentation":"<p>Information about how you can set up a recommended Amazon Web Services storage service.</p>"
-        },
-        "EstimatedMonthlyStorageCost":{
-          "shape":"PtolemyString",
-          "documentation":"<p>The estimated monthly cost of the recommended Amazon Web Services storage service.</p>"
-        }
-      },
-      "documentation":"<p>The details about an Amazon Web Services storage service that DataSync Discovery recommends for a resource in your on-premises storage system.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html\">Recommendations provided by DataSync Discovery</a>.</p>"
-    },
-    "RecommendationStatus":{
-      "type":"string",
-      "enum":[
-        "NONE",
-        "IN_PROGRESS",
-        "COMPLETED",
-        "FAILED"
-      ]
-    },
-    "Recommendations":{
-      "type":"list",
-      "member":{"shape":"Recommendation"}
-    },
-    "RecommendationsConfigMap":{
-      "type":"map",
-      "key":{"shape":"PtolemyString"},
-      "value":{"shape":"PtolemyString"}
-    },
-    "RemoveStorageSystemRequest":{
-      "type":"structure",
-      "required":["StorageSystemArn"],
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the storage system that you want to permanently remove from DataSync Discovery.</p>"
-        }
-      }
-    },
-    "RemoveStorageSystemResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
     "ReportDestination":{
       "type":"structure",
       "members":{
@@ -4363,65 +3416,6 @@
       },
       "documentation":"<p>Indicates whether DataSync created a complete <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html\">task report</a> for your transfer.</p>"
     },
-    "ResourceDetails":{
-      "type":"structure",
-      "members":{
-        "NetAppONTAPSVMs":{
-          "shape":"NetAppONTAPSVMs",
-          "documentation":"<p>The information that DataSync Discovery collects about storage virtual machines (SVMs) in your on-premises storage system.</p>"
-        },
-        "NetAppONTAPVolumes":{
-          "shape":"NetAppONTAPVolumes",
-          "documentation":"<p>The information that DataSync Discovery collects about volumes in your on-premises storage system.</p>"
-        },
-        "NetAppONTAPClusters":{
-          "shape":"NetAppONTAPClusters",
-          "documentation":"<p>The information that DataSync Discovery collects about the cluster in your on-premises storage system.</p>"
-        }
-      },
-      "documentation":"<p>Information provided by DataSync Discovery about the resources in your on-premises storage system.</p>"
-    },
-    "ResourceFilters":{
-      "type":"map",
-      "key":{"shape":"DiscoveryResourceFilter"},
-      "value":{"shape":"FilterMembers"}
-    },
-    "ResourceId":{
-      "type":"string",
-      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
-    },
-    "ResourceIds":{
-      "type":"list",
-      "member":{"shape":"ResourceId"},
-      "max":100,
-      "min":1
-    },
-    "ResourceMetrics":{
-      "type":"structure",
-      "members":{
-        "Timestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when DataSync Discovery collected this information from the resource.</p>"
-        },
-        "P95Metrics":{
-          "shape":"P95Metrics",
-          "documentation":"<p>The types of performance data that DataSync Discovery collects about the on-premises storage system resource.</p>"
-        },
-        "Capacity":{
-          "shape":"Capacity",
-          "documentation":"<p>The storage capacity of the on-premises storage system resource.</p>"
-        },
-        "ResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The universally unique identifier (UUID) of the on-premises storage system resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"DiscoveryResourceType",
-          "documentation":"<p>The type of on-premises storage system resource.</p>"
-        }
-      },
-      "documentation":"<p>Information, including performance data and capacity usage, provided by DataSync Discovery about a resource in your on-premises storage system.</p>"
-    },
     "S3BucketArn":{
       "type":"string",
       "max":268,
@@ -4513,15 +3507,28 @@
         "DISABLED"
       ]
     },
-    "SecretsManagerArn":{
+    "SecretArn":{
       "type":"string",
       "max":2048,
-      "pattern":"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):secretsmanager:[a-z\\-0-9]+:[0-9]{12}:secret:.*"
+      "pattern":"^(arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):secretsmanager:[a-z\\-0-9]+:[0-9]{12}:secret:.*|)$"
     },
     "ServerHostname":{
       "type":"string",
       "max":255,
-      "pattern":"^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])$"
+      "pattern":"^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-:]*[A-Za-z0-9])$"
+    },
+    "ServerIpAddress":{
+      "type":"string",
+      "max":39,
+      "min":7,
+      "pattern":"\\A((25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}|([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}))\\z"
+    },
+    "SmbAuthenticationType":{
+      "type":"string",
+      "enum":[
+        "NTLM",
+        "KERBEROS"
+      ]
     },
     "SmbDomain":{
       "type":"string",
@@ -4560,7 +3567,7 @@
     "SmbUser":{
       "type":"string",
       "max":104,
-      "pattern":"^[^\\x5B\\x5D\\\\/:;|=,+*?]{1,104}$"
+      "pattern":"^[^\\x22\\x5B\\x5D/\\\\:;|=,+*?\\x3C\\x3E]{1,104}$"
     },
     "SmbVersion":{
       "type":"string",
@@ -4587,42 +3594,6 @@
       "type":"list",
       "member":{"shape":"NetworkInterfaceArn"}
     },
-    "StartDiscoveryJobRequest":{
-      "type":"structure",
-      "required":[
-        "StorageSystemArn",
-        "CollectionDurationMinutes",
-        "ClientToken"
-      ],
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the on-premises storage system that you want to run the discovery job on.</p>"
-        },
-        "CollectionDurationMinutes":{
-          "shape":"CollectionDurationMinutes",
-          "documentation":"<p>Specifies in minutes how long you want the discovery job to run.</p> <note> <p>For more accurate recommendations, we recommend a duration of at least 14 days. Longer durations allow time to collect a sufficient number of data points and provide a realistic representation of storage performance and utilization.</p> </note>"
-        },
-        "ClientToken":{
-          "shape":"PtolemyUUID",
-          "documentation":"<p>Specifies a client token to make sure requests with this API operation are idempotent. If you don't specify a client token, DataSync generates one for you automatically.</p>",
-          "idempotencyToken":true
-        },
-        "Tags":{
-          "shape":"InputTagList",
-          "documentation":"<p>Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources.</p>"
-        }
-      }
-    },
-    "StartDiscoveryJobResponse":{
-      "type":"structure",
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>The ARN of the discovery job that you started.</p>"
-        }
-      }
-    },
     "StartTaskExecutionRequest":{
       "type":"structure",
       "required":["TaskArn"],
@@ -4665,52 +3636,6 @@
       },
       "documentation":"<p>StartTaskExecutionResponse</p>"
     },
-    "StopDiscoveryJobRequest":{
-      "type":"structure",
-      "required":["DiscoveryJobArn"],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that you want to stop. </p>"
-        }
-      }
-    },
-    "StopDiscoveryJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "StorageSystemArn":{
-      "type":"string",
-      "max":128,
-      "pattern":"^arn:(aws|aws-cn|aws-us-gov|aws-iso|aws-iso-b):datasync:[a-z\\-0-9]+:[0-9]{12}:system/storage-system-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
-    },
-    "StorageSystemConnectivityStatus":{
-      "type":"string",
-      "enum":[
-        "PASS",
-        "FAIL",
-        "UNKNOWN"
-      ]
-    },
-    "StorageSystemList":{
-      "type":"list",
-      "member":{"shape":"StorageSystemListEntry"}
-    },
-    "StorageSystemListEntry":{
-      "type":"structure",
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>The Amazon Resource Names (ARN) of an on-premises storage system that you added to DataSync Discovery.</p>"
-        },
-        "Name":{
-          "shape":"Name",
-          "documentation":"<p>The name of an on-premises storage system that you added to DataSync Discovery.</p>"
-        }
-      },
-      "documentation":"<p>Information that identifies an on-premises storage system that you're using with DataSync Discovery.</p>"
-    },
     "StorageVirtualMachineArn":{
       "type":"string",
       "max":162,
@@ -4763,8 +3688,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5043,30 +3967,7 @@
         "UNAVAILABLE"
       ]
     },
-    "Throughput":{
-      "type":"structure",
-      "members":{
-        "Read":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput related to read operations.</p>"
-        },
-        "Write":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput related to write operations.</p>"
-        },
-        "Other":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak throughput unrelated to read and write operations.</p>"
-        },
-        "Total":{
-          "shape":"NonNegativeDouble",
-          "documentation":"<p>Peak total throughput on your on-premises storage system resource.</p>"
-        }
-      },
-      "documentation":"<p>The throughput peaks for an on-premises storage system volume. Each data point represents the 95th percentile peak value during a 1-hour interval.</p>"
-    },
     "Time":{"type":"timestamp"},
-    "Timestamp":{"type":"timestamp"},
     "TransferMode":{
       "type":"string",
       "enum":[
@@ -5103,8 +4004,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAgentRequest":{
       "type":"structure",
@@ -5123,30 +4023,7 @@
     },
     "UpdateAgentResponse":{
       "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateDiscoveryJobRequest":{
-      "type":"structure",
-      "required":[
-        "DiscoveryJobArn",
-        "CollectionDurationMinutes"
-      ],
-      "members":{
-        "DiscoveryJobArn":{
-          "shape":"DiscoveryJobArn",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the discovery job that you want to update.</p>"
-        },
-        "CollectionDurationMinutes":{
-          "shape":"CollectionDurationMinutes",
-          "documentation":"<p>Specifies in minutes how long that you want the discovery job to run. (You can't set this parameter to less than the number of minutes that the job has already run for.)</p>"
-        }
-      }
-    },
-    "UpdateDiscoveryJobResponse":{
-      "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationAzureBlobRequest":{
       "type":"structure",
@@ -5178,14 +4055,21 @@
         },
         "AgentArns":{
           "shape":"AgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container.</p> <p>You can specify more than one agent. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html\">Using multiple agents for your transfer</a>.</p>"
+          "documentation":"<p>(Optional) Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container. If you are setting up an agentless cross-cloud transfer, you do not need to specify a value for this parameter.</p> <p>You can specify more than one agent. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html\">Using multiple agents for your transfer</a>.</p> <note> <p>You cannot add or remove agents from a storage location after you initially create it.</p> </note>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Specifies configuration information for a DataSync-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Specifies configuration information for a customer-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
         }
       }
     },
     "UpdateLocationAzureBlobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationEfsRequest":{
       "type":"structure",
@@ -5215,8 +4099,7 @@
     },
     "UpdateLocationEfsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationFsxLustreRequest":{
       "type":"structure",
@@ -5234,8 +4117,7 @@
     },
     "UpdateLocationFsxLustreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationFsxOntapRequest":{
       "type":"structure",
@@ -5257,8 +4139,7 @@
     },
     "UpdateLocationFsxOntapResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationFsxOpenZfsRequest":{
       "type":"structure",
@@ -5277,8 +4158,7 @@
     },
     "UpdateLocationFsxOpenZfsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationFsxWindowsRequest":{
       "type":"structure",
@@ -5293,7 +4173,7 @@
           "documentation":"<p>Specifies a mount path for your file system using forward slashes. DataSync uses this subdirectory to read or write data (depending on whether the file system is a source or destination location).</p>"
         },
         "Domain":{
-          "shape":"FsxUpdateSmbDomain",
+          "shape":"UpdateSmbDomain",
           "documentation":"<p>Specifies the name of the Windows domain that your FSx for Windows File Server file system belongs to.</p> <p>If you have multiple Active Directory domains in your environment, configuring this parameter makes sure that DataSync connects to the right file system.</p>"
         },
         "User":{
@@ -5308,8 +4188,7 @@
     },
     "UpdateLocationFsxWindowsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationHdfsRequest":{
       "type":"structure",
@@ -5357,7 +4236,7 @@
         },
         "KerberosKeytab":{
           "shape":"KerberosKeytabFile",
-          "documentation":"<p>The Kerberos key table (keytab) that contains mappings between the defined Kerberos principal and the encrypted keys. You can load the keytab from a file by providing the file's address. If you use the CLI, it performs base64 encoding for you. Otherwise, provide the base64-encoded text.</p>"
+          "documentation":"<p>The Kerberos key table (keytab) that contains mappings between the defined Kerberos principal and the encrypted keys. You can load the keytab from a file by providing the file's address.</p>"
         },
         "KerberosKrb5Conf":{
           "shape":"KerberosKrb5ConfFile",
@@ -5371,8 +4250,7 @@
     },
     "UpdateLocationHdfsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationNfsRequest":{
       "type":"structure",
@@ -5386,14 +4264,17 @@
           "shape":"NfsSubdirectory",
           "documentation":"<p>Specifies the export path in your NFS file server that you want DataSync to mount.</p> <p>This path (or a subdirectory of the path) is where DataSync transfers data to or from. For information on configuring an export for DataSync, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#accessing-nfs\">Accessing NFS file servers</a>.</p>"
         },
+        "ServerHostname":{
+          "shape":"ServerHostname",
+          "documentation":"<p>Specifies the DNS name or IP address (IPv4 or IPv6) of the NFS file server that your DataSync agent connects to.</p>"
+        },
         "OnPremConfig":{"shape":"OnPremConfig"},
         "MountOptions":{"shape":"NfsMountOptions"}
       }
     },
     "UpdateLocationNfsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationObjectStorageRequest":{
       "type":"structure",
@@ -5415,28 +4296,39 @@
           "shape":"S3Subdirectory",
           "documentation":"<p>Specifies the object prefix for your object storage server. If this is a source location, DataSync only copies objects with this prefix. If this is a destination location, DataSync writes all objects with this prefix.</p>"
         },
+        "ServerHostname":{
+          "shape":"ServerHostname",
+          "documentation":"<p>Specifies the domain name or IP address (IPv4 or IPv6) of the object storage server that your DataSync agent connects to.</p>"
+        },
         "AccessKey":{
           "shape":"ObjectStorageAccessKey",
           "documentation":"<p>Specifies the access key (for example, a user name) if credentials are required to authenticate with the object storage server.</p>"
         },
         "SecretKey":{
           "shape":"ObjectStorageSecretKey",
-          "documentation":"<p>Specifies the secret key (for example, a password) if credentials are required to authenticate with the object storage server.</p>"
+          "documentation":"<p>Specifies the secret key (for example, a password) if credentials are required to authenticate with the object storage server.</p> <note> <p>If you provide a secret using <code>SecretKey</code>, but do not provide secret configuration details using <code>CmkSecretConfig</code> or <code>CustomSecretConfig</code>, then DataSync stores the token using your Amazon Web Services account's Secrets Manager secret.</p> </note>"
         },
         "AgentArns":{
           "shape":"AgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Names (ARNs) of the DataSync agents that can connect with your object storage system.</p>"
+          "documentation":"<p>(Optional) Specifies the Amazon Resource Names (ARNs) of the DataSync agents that can connect with your object storage system. If you are setting up an agentless cross-cloud transfer, you do not need to specify a value for this parameter.</p> <note> <p>You cannot add or remove agents from a storage location after you initially create it.</p> </note>"
         },
         "ServerCertificate":{
           "shape":"ObjectStorageCertificate",
           "documentation":"<p>Specifies a certificate chain for DataSync to authenticate with your object storage system if the system uses a private or self-signed certificate authority (CA). You must specify a single <code>.pem</code> file with a full certificate chain (for example, <code>file:///home/user/.ssh/object_storage_certificates.pem</code>).</p> <p>The certificate chain might include:</p> <ul> <li> <p>The object storage system's certificate</p> </li> <li> <p>All intermediate certificates (if there are any)</p> </li> <li> <p>The root certificate of the signing CA</p> </li> </ul> <p>You can concatenate your certificates into a <code>.pem</code> file (which can be up to 32768 bytes before base64 encoding). The following example <code>cat</code> command creates an <code>object_storage_certificates.pem</code> file that includes three certificates:</p> <p> <code>cat object_server_certificate.pem intermediate_certificate.pem ca_root_certificate.pem &gt; object_storage_certificates.pem</code> </p> <p>To use this parameter, configure <code>ServerProtocol</code> to <code>HTTPS</code>.</p> <p>Updating this parameter doesn't interfere with tasks that you have in progress.</p>"
+        },
+        "CmkSecretConfig":{
+          "shape":"CmkSecretConfig",
+          "documentation":"<p>Specifies configuration information for a DataSync-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
+        },
+        "CustomSecretConfig":{
+          "shape":"CustomSecretConfig",
+          "documentation":"<p>Specifies configuration information for a customer-managed secret, such as an authentication token or set of credentials that DataSync uses to access a specific transfer location, and a customer-managed KMS key.</p>"
         }
       }
     },
     "UpdateLocationObjectStorageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationS3Request":{
       "type":"structure",
@@ -5459,8 +4351,7 @@
     },
     "UpdateLocationS3Response":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLocationSmbRequest":{
       "type":"structure",
@@ -5472,66 +4363,59 @@
         },
         "Subdirectory":{
           "shape":"SmbSubdirectory",
-          "documentation":"<p>Specifies the name of the share exported by your SMB file server where DataSync will read or write data. You can include a subdirectory in the share path (for example, <code>/path/to/subdirectory</code>). Make sure that other SMB clients in your network can also mount this path.</p> <p>To copy all data in the specified subdirectory, DataSync must be able to mount the SMB share and access all of its data. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the name of the share exported by your SMB file server where DataSync will read or write data. You can include a subdirectory in the share path (for example, <code>/path/to/subdirectory</code>). Make sure that other SMB clients in your network can also mount this path.</p> <p>To copy all data in the specified subdirectory, DataSync must be able to mount the SMB share and access all of its data. For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
+        },
+        "ServerHostname":{
+          "shape":"ServerHostname",
+          "documentation":"<p>Specifies the domain name or IP address (IPv4 or IPv6) of the SMB file server that your DataSync agent connects to.</p> <note> <p>If you're using Kerberos authentication, you must specify a domain name.</p> </note>"
         },
         "User":{
           "shape":"SmbUser",
-          "documentation":"<p>Specifies the user name that can mount your SMB file server and has permission to access the files and folders involved in your transfer.</p> <p>For information about choosing a user with the right level of access for your transfer, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the user name that can mount your SMB file server and has permission to access the files and folders involved in your transfer. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p> <p>For information about choosing a user with the right level of access for your transfer, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
         },
         "Domain":{
           "shape":"SmbDomain",
-          "documentation":"<p>Specifies the Windows domain name that your SMB file server belongs to. </p> <p>If you have multiple domains in your environment, configuring this parameter makes sure that DataSync connects to the right file server.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the Windows domain name that your SMB file server belongs to. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p> <p>If you have multiple domains in your environment, configuring this parameter makes sure that DataSync connects to the right file server.</p>"
         },
         "Password":{
           "shape":"SmbPassword",
-          "documentation":"<p>Specifies the password of the user who can mount your SMB file server and has permission to access the files and folders involved in your transfer.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">required permissions</a> for SMB locations.</p>"
+          "documentation":"<p>Specifies the password of the user who can mount your SMB file server and has permission to access the files and folders involved in your transfer. This parameter applies only if <code>AuthenticationType</code> is set to <code>NTLM</code>.</p>"
         },
         "AgentArns":{
           "shape":"AgentArnList",
           "documentation":"<p>Specifies the DataSync agent (or agents) that can connect to your SMB file server. You specify an agent by using its Amazon Resource Name (ARN).</p>"
         },
-        "MountOptions":{"shape":"SmbMountOptions"}
-      }
-    },
-    "UpdateLocationSmbResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateStorageSystemRequest":{
-      "type":"structure",
-      "required":["StorageSystemArn"],
-      "members":{
-        "StorageSystemArn":{
-          "shape":"StorageSystemArn",
-          "documentation":"<p>Specifies the ARN of the on-premises storage system that you want reconfigure.</p>"
+        "MountOptions":{"shape":"SmbMountOptions"},
+        "AuthenticationType":{
+          "shape":"SmbAuthenticationType",
+          "documentation":"<p>Specifies the authentication protocol that DataSync uses to connect to your SMB file server. DataSync supports <code>NTLM</code> (default) and <code>KERBEROS</code> authentication.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html#configuring-smb-permissions\">Providing DataSync access to SMB file servers</a>.</p>"
         },
-        "ServerConfiguration":{
-          "shape":"DiscoveryServerConfiguration",
-          "documentation":"<p>Specifies the server name and network port required to connect with your on-premises storage system's management interface.</p>"
+        "DnsIpAddresses":{
+          "shape":"DnsIpList",
+          "documentation":"<p>Specifies the IP addresses (IPv4 or IPv6) for the DNS servers that your SMB file server belongs to. This parameter applies only if <code>AuthenticationType</code> is set to <code>KERBEROS</code>.</p> <p>If you have multiple domains in your environment, configuring this parameter makes sure that DataSync connects to the right SMB file server. </p>"
         },
-        "AgentArns":{
-          "shape":"DiscoveryAgentArnList",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads your on-premises storage system. You can only specify one ARN.</p>"
-        },
-        "Name":{
-          "shape":"Name",
-          "documentation":"<p>Specifies a familiar name for your on-premises storage system.</p>"
+        "KerberosPrincipal":{
+          "shape":"KerberosPrincipal",
+          "documentation":"<p>Specifies a Kerberos prinicpal, which is an identity in your Kerberos realm that has permission to access the files, folders, and file metadata in your SMB file server.</p> <p>A Kerberos principal might look like <code>HOST/kerberosuser@MYDOMAIN.ORG</code>.</p> <p>Principal names are case sensitive. Your DataSync task execution will fail if the principal that you specify for this parameter doesn’t exactly match the principal that you use to create the keytab file.</p>"
         },
-        "CloudWatchLogGroupArn":{
-          "shape":"LogGroupArn",
-          "documentation":"<p>Specifies the ARN of the Amazon CloudWatch log group for monitoring and logging discovery job events.</p>"
+        "KerberosKeytab":{
+          "shape":"KerberosKeytabFile",
+          "documentation":"<p>Specifies your Kerberos key table (keytab) file, which includes mappings between your Kerberos principal and encryption keys.</p> <p>To avoid task execution errors, make sure that the Kerberos principal that you use to create the keytab file matches exactly what you specify for <code>KerberosPrincipal</code>.</p>"
         },
-        "Credentials":{
-          "shape":"Credentials",
-          "documentation":"<p>Specifies the user name and password for accessing your on-premises storage system's management interface.</p>"
+        "KerberosKrb5Conf":{
+          "shape":"KerberosKrb5ConfFile",
+          "documentation":"<p>Specifies a Kerberos configuration file (<code>krb5.conf</code>) that defines your Kerberos realm configuration.</p> <p>The file must be base64 encoded. If you're using the CLI, the encoding is done for you.</p>"
         }
       }
     },
-    "UpdateStorageSystemResponse":{
+    "UpdateLocationSmbResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "UpdateSmbDomain":{
+      "type":"string",
+      "max":253,
+      "pattern":"^([A-Za-z0-9]((\\.|-+)?[A-Za-z0-9]){0,252})?$"
     },
     "UpdateTaskExecutionRequest":{
       "type":"structure",
@@ -5549,8 +4433,7 @@
     },
     "UpdateTaskExecutionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTaskRequest":{
       "type":"structure",
@@ -5594,8 +4477,7 @@
     },
     "UpdateTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatedEfsAccessPointArn":{
       "type":"string",
@@ -5622,5 +4504,5 @@
     "long":{"type":"long"},
     "string":{"type":"string"}
   },
-  "documentation":"<fullname>DataSync</fullname> <p>DataSync is an online data movement and discovery service that simplifies data migration and helps you quickly, easily, and securely transfer your file or object data to, from, and between Amazon Web Services storage services.</p> <p>This API interface reference includes documentation for using DataSync programmatically. For complete information, see the <i> <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html\">DataSync User Guide</a> </i>.</p>"
+  "documentation":"<fullname>DataSync</fullname> <p>DataSync is an online data movement service that simplifies data migration and helps you quickly, easily, and securely transfer your file or object data to, from, and between Amazon Web Services storage services.</p> <p>This API interface reference includes documentation for using DataSync programmatically. For complete information, see the <i> <a href=\"https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html\">DataSync User Guide</a> </i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,6 +209,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "items"
+    },
+    "ListAccountPools": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListAccountsInAccountPool": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -9,7 +9,8 @@
       },
       "SearchListings": {
         "non_aggregate_keys": [
-          "totalMatchCount"
+          "totalMatchCount",
+          "aggregates"
         ]
       },
       "SearchTypes": {
diff -pruN 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/datazone/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/datazone/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"datazone",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon DataZone",
     "serviceId":"DataZone",
     "signatureVersion":"v4",
     "signingName":"datazone",
-    "uid":"datazone-2018-05-10"
+    "uid":"datazone-2018-05-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptPredictions":{
@@ -117,6 +119,26 @@
       ],
       "documentation":"<p>Associates the environment role in Amazon DataZone.</p>"
     },
+    "AssociateGovernedTerms":{
+      "name":"AssociateGovernedTerms",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/v2/domains/{domainIdentifier}/entities/{entityType}/{entityIdentifier}/associate-governed-terms",
+        "responseCode":200
+      },
+      "input":{"shape":"AssociateGovernedTermsInput"},
+      "output":{"shape":"AssociateGovernedTermsOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Associates governed terms with an asset.</p>"
+    },
     "CancelMetadataGenerationRun":{
       "name":"CancelMetadataGenerationRun",
       "http":{
@@ -135,7 +157,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Cancels the metadata generation run.</p>"
+      "documentation":"<p>Cancels the metadata generation run.</p> <p>Prerequisites:</p> <ul> <li> <p>The run must exist and be in a cancelable status (e.g., SUBMITTED, IN_PROGRESS). </p> </li> <li> <p>Runs in SUCCEEDED status cannot be cancelled.</p> </li> <li> <p>User must have access to the run and cancel permissions.</p> </li> </ul>"
     },
     "CancelSubscription":{
       "name":"CancelSubscription",
@@ -158,6 +180,27 @@
       "documentation":"<p>Cancels the subscription to the specified asset.</p>",
       "idempotent":true
     },
+    "CreateAccountPool":{
+      "name":"CreateAccountPool",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateAccountPoolInput"},
+      "output":{"shape":"CreateAccountPoolOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Creates an account pool. </p>"
+    },
     "CreateAsset":{
       "name":"CreateAsset",
       "http":{
@@ -177,7 +220,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates an asset in Amazon DataZone catalog.</p>",
+      "documentation":"<p>Creates an asset in Amazon DataZone catalog.</p> <p>Before creating assets, make sure that the following requirements are met:</p> <ul> <li> <p> <code>--domain-identifier</code> must refer to an existing domain.</p> </li> <li> <p> <code>--owning-project-identifier</code> must be a valid project within the domain.</p> </li> <li> <p>Asset type must be created beforehand using <code>create-asset-type</code>, or be a supported system-defined type. For more information, see <a href=\"https://docs.aws.amazon.com/cli/latest/reference/datazone/create-asset-type.html\">create-asset-type</a>.</p> </li> <li> <p> <code>--type-revision</code> (if used) must match a valid revision of the asset type.</p> </li> <li> <p> <code>formsInput</code> is required when it is associated as required in the <code>asset-type</code>. For more information, see <a href=\"https://docs.aws.amazon.com/cli/latest/reference/datazone/create-form-type.html\">create-form-type</a>.</p> </li> <li> <p>Form content must include all required fields as per the form schema (e.g., <code>bucketArn</code>).</p> </li> </ul> <p>You must invoke the following pre-requisite commands before invoking this API:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/datazone/latest/APIReference/API_CreateFormType.html\">CreateFormType</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/datazone/latest/APIReference/API_CreateAssetType.html\">CreateAssetType</a> </p> </li> </ul>",
       "idempotent":true
     },
     "CreateAssetFilter":{
@@ -199,7 +242,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a data asset filter.</p>",
+      "documentation":"<p>Creates a data asset filter.</p> <p>Asset filters provide a sophisticated way to create controlled views of data assets by selecting specific columns or applying row-level filters. This capability is crucial for organizations that need to share data while maintaining security and privacy controls. For example, your database might be filtered to show only non-PII fields to certain users, or sales data might be filtered by region for different regional teams. Asset filters enable fine-grained access control while maintaining a single source of truth.</p> <p>Prerequisites:</p> <ul> <li> <p>A valid domain (<code>--domain-identifier</code>) must exist. </p> </li> <li> <p>A data asset (<code>--asset-identifier</code>) must already be created under that domain.</p> </li> <li> <p>The asset must have the referenced columns available in its schema for column-based filtering.</p> </li> <li> <p>You cannot specify both (<code>columnConfiguration</code>, <code>rowConfiguration</code>)at the same time.</p> </li> </ul>",
       "idempotent":true
     },
     "CreateAssetRevision":{
@@ -220,7 +263,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a revision of the asset.</p>",
+      "documentation":"<p>Creates a revision of the asset.</p> <p>Asset revisions represent new versions of existing assets, capturing changes to either the underlying data or its metadata. They maintain a historical record of how assets evolve over time, who made changes, and when those changes occurred. This versioning capability is crucial for governance and compliance, allowing organizations to track changes, understand their impact, and roll back if necessary.</p> <p>Prerequisites:</p> <ul> <li> <p>Asset must already exist in the domain with identifier. </p> </li> <li> <p> <code>formsInput</code> is required when asset has the form type. <code>typeRevision</code> should be the latest version of form type. </p> </li> <li> <p>The form content must include all required fields (e.g., <code>bucketArn</code> for <code>S3ObjectCollectionForm</code>).</p> </li> <li> <p>The owning project of the original asset must still exist and be active.</p> </li> <li> <p>User must have write access to the project and domain.</p> </li> </ul>",
       "idempotent":true
     },
     "CreateAssetType":{
@@ -241,7 +284,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a custom asset type.</p>"
+      "documentation":"<p>Creates a custom asset type.</p> <p>Prerequisites:</p> <ul> <li> <p>The <code>formsInput</code> field is required, however, can be passed as empty (e.g. <code>-forms-input {})</code>. </p> </li> <li> <p>You must have <code>CreateAssetType</code> permissions.</p> </li> <li> <p>The domain-identifier and owning-project-identifier must be valid and active.</p> </li> <li> <p>The name of the asset type must be unique within the domain — duplicate names will cause failure.</p> </li> <li> <p>JSON input must be valid — incorrect formatting causes Invalid JSON errors.</p> </li> </ul>"
     },
     "CreateConnection":{
       "name":"CreateConnection",
@@ -284,7 +327,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a data product.</p>",
+      "documentation":"<p>Creates a data product.</p> <p>A data product is a comprehensive package that combines data assets with their associated metadata, documentation, and access controls. It's designed to serve specific business needs or use cases, making it easier for users to find and consume data appropriately. Data products include important information about data quality, freshness, and usage guidelines, effectively bridging the gap between data producers and consumers while ensuring proper governance.</p> <p>Prerequisites:</p> <ul> <li> <p>The domain must exist and be accessible. </p> </li> <li> <p>The owning project must be valid and active.</p> </li> <li> <p>The name must be unique within the domain (no existing data product with the same name).</p> </li> <li> <p>User must have create permissions for data products in the project.</p> </li> </ul>",
       "idempotent":true
     },
     "CreateDataProductRevision":{
@@ -305,7 +348,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a data product revision.</p>",
+      "documentation":"<p>Creates a data product revision.</p> <p>Prerequisites:</p> <ul> <li> <p>The original data product must exist in the given domain. </p> </li> <li> <p>User must have permissions on the data product.</p> </li> <li> <p>The domain must be valid and accessible.</p> </li> <li> <p>The new revision name must comply with naming constraints (if required).</p> </li> </ul>",
       "idempotent":true
     },
     "CreateDataSource":{
@@ -413,6 +456,27 @@
       ],
       "documentation":"<p>Creates an action for the environment, for example, creates a console link for an analytics tool that is available in this environment.</p>"
     },
+    "CreateEnvironmentBlueprint":{
+      "name":"CreateEnvironmentBlueprint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/domains/{domainIdentifier}/environment-blueprints",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateEnvironmentBlueprintInput"},
+      "output":{"shape":"CreateEnvironmentBlueprintOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Creates a Amazon DataZone blueprint.</p>"
+    },
     "CreateEnvironmentProfile":{
       "name":"CreateEnvironmentProfile",
       "http":{
@@ -452,7 +516,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a metadata form type.</p>"
+      "documentation":"<p>Creates a metadata form type.</p> <p>Prerequisites:</p> <ul> <li> <p>The domain must exist and be in an <code>ENABLED</code> state. </p> </li> <li> <p>The owning project must exist and be accessible.</p> </li> <li> <p>The name must be unique within the domain.</p> </li> </ul> <p>For custom form types, to indicate that a field should be searchable, annotate it with <code>@amazon.datazone#searchable</code>. By default, searchable fields are indexed for semantic search, where related query terms will match the attribute value even if they are not stemmed or keyword matches. To indicate that a field should be indexed for lexical search (which disables semantic search but supports stemmed and partial matches), annotate it with <code>@amazon.datazone#searchable(modes:[\"LEXICAL\"])</code>. To indicate that a field should be indexed for technical identifier search (for more information on technical identifier search, see: <a href=\"https://aws.amazon.com/blogs/big-data/streamline-data-discovery-with-precise-technical-identifier-search-in-amazon-sagemaker-unified-studio/\">https://aws.amazon.com/blogs/big-data/streamline-data-discovery-with-precise-technical-identifier-search-in-amazon-sagemaker-unified-studio/</a>), annotate it with <code>@amazon.datazone#searchable(modes:[\"TECHNICAL\"])</code>.</p> <p>To denote that a field will store glossary term ids (which are filterable via the Search/SearchListings APIs), annotate it with <code>@amazon.datazone#glossaryterm(\"${GLOSSARY_ID}\")</code>, where <code>${GLOSSARY_ID}</code> is the id of the glossary that the glossary terms stored in the field belong to. </p>"
     },
     "CreateGlossary":{
       "name":"CreateGlossary",
@@ -472,7 +536,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates an Amazon DataZone business glossary.</p>",
+      "documentation":"<p>Creates an Amazon DataZone business glossary.</p> <p>Specifies that this is a create glossary policy.</p> <p>A glossary serves as the central repository for business terminology and definitions within an organization. It helps establish and maintain a common language across different departments and teams, reducing miscommunication and ensuring consistent interpretation of business concepts. Glossaries can include hierarchical relationships between terms, cross-references, and links to actual data assets, making them invaluable for both business users and technical teams trying to understand and use data correctly.</p> <p>Prerequisites:</p> <ul> <li> <p>Domain must exist and be in an active state. </p> </li> <li> <p>Owning project must exist and be accessible by the caller.</p> </li> <li> <p>The glossary name must be unique within the domain.</p> </li> </ul>",
       "idempotent":true
     },
     "CreateGlossaryTerm":{
@@ -494,7 +558,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Creates a business glossary term.</p>",
+      "documentation":"<p>Creates a business glossary term.</p> <p>A glossary term represents an individual entry within the Amazon DataZone glossary, serving as a standardized definition for a specific business concept or data element. Each term can include rich metadata such as detailed definitions, synonyms, related terms, and usage examples. Glossary terms can be linked directly to data assets, providing business context to technical data elements. This linking capability helps users understand the business meaning of data fields and ensures consistent interpretation across different systems and teams. Terms can also have relationships with other terms, creating a semantic network that reflects the complexity of business concepts.</p> <p>Prerequisites:</p> <ul> <li> <p>Domain must exist. </p> </li> <li> <p>Glossary must exist.</p> </li> <li> <p>The term name must be unique within the glossary.</p> </li> <li> <p>Ensure term does not conflict with existing terms in hierarchy.</p> </li> </ul>",
       "idempotent":true
     },
     "CreateGroupProfile":{
@@ -701,6 +765,26 @@
       "documentation":"<p>Creates a user profile in Amazon DataZone.</p>",
       "idempotent":true
     },
+    "DeleteAccountPool":{
+      "name":"DeleteAccountPool",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools/{identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteAccountPoolInput"},
+      "output":{"shape":"DeleteAccountPoolOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Deletes an account pool.</p>",
+      "idempotent":true
+    },
     "DeleteAsset":{
       "name":"DeleteAsset",
       "http":{
@@ -719,7 +803,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes an asset in Amazon DataZone.</p>",
+      "documentation":"<p>Deletes an asset in Amazon DataZone.</p> <ul> <li> <p>--domain-identifier must refer to a valid and existing domain. </p> </li> <li> <p>--identifier must refer to an existing asset in the specified domain.</p> </li> <li> <p>Asset must not be referenced in any existing asset filters.</p> </li> <li> <p>Asset must not be linked to any draft or published data product.</p> </li> <li> <p>User must have delete permissions for the domain and project.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteAssetFilter":{
@@ -739,7 +823,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes an asset filter.</p>",
+      "documentation":"<p>Deletes an asset filter.</p> <p>Prerequisites:</p> <ul> <li> <p>The asset filter must exist. </p> </li> <li> <p>The domain and asset must not have been deleted.</p> </li> <li> <p>Ensure the --identifier refers to a valid filter ID.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteAssetType":{
@@ -760,7 +844,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes an asset type in Amazon DataZone.</p>"
+      "documentation":"<p>Deletes an asset type in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The asset type must exist in the domain. </p> </li> <li> <p>You must have DeleteAssetType permission.</p> </li> <li> <p>The asset type must not be in use (e.g., assigned to any asset). If used, deletion will fail.</p> </li> <li> <p>You should retrieve the asset type using get-asset-type to confirm its presence before deletion.</p> </li> </ul>"
     },
     "DeleteConnection":{
       "name":"DeleteConnection",
@@ -800,7 +884,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes a data product in Amazon DataZone.</p>",
+      "documentation":"<p>Deletes a data product in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The data product must exist and not be deleted or archived. </p> </li> <li> <p>The user must have delete permissions for the data product.</p> </li> <li> <p>Domain and project must be active.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteDataSource":{
@@ -906,6 +990,26 @@
       "documentation":"<p>Deletes an action for the environment, for example, deletes a console link for an analytics tool that is available in this environment.</p>",
       "idempotent":true
     },
+    "DeleteEnvironmentBlueprint":{
+      "name":"DeleteEnvironmentBlueprint",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v2/domains/{domainIdentifier}/environment-blueprints/{identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteEnvironmentBlueprintInput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Deletes a blueprint in Amazon DataZone.</p>",
+      "idempotent":true
+    },
     "DeleteEnvironmentBlueprintConfiguration":{
       "name":"DeleteEnvironmentBlueprintConfiguration",
       "http":{
@@ -962,7 +1066,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Delets and metadata form type in Amazon DataZone.</p>"
+      "documentation":"<p>Deletes and metadata form type in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The form type must exist in the domain. </p> </li> <li> <p>The form type must not be in use by any asset types or assets.</p> </li> <li> <p>The domain must be valid and accessible.</p> </li> <li> <p>User must have delete permissions on the form type.</p> </li> <li> <p>Any dependencies (such as linked asset types) must be removed first.</p> </li> </ul>"
     },
     "DeleteGlossary":{
       "name":"DeleteGlossary",
@@ -982,7 +1086,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes a business glossary in Amazon DataZone.</p>",
+      "documentation":"<p>Deletes a business glossary in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The glossary must be in DISABLED state. </p> </li> <li> <p>The glossary must not have any glossary terms associated with it.</p> </li> <li> <p>The glossary must exist in the specified domain.</p> </li> <li> <p>The caller must have the <code>datazone:DeleteGlossary</code> permission in the domain and glossary.</p> </li> <li> <p>Glossary should not be linked to any active metadata forms.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteGlossaryTerm":{
@@ -1003,7 +1107,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Deletes a business glossary term in Amazon DataZone.</p>",
+      "documentation":"<p>Deletes a business glossary term in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>Glossary term must exist and be active. </p> </li> <li> <p>The term must not be linked to other assets or child terms.</p> </li> <li> <p>Caller must have delete permissions in the domain/glossary.</p> </li> <li> <p>Ensure all associations (such as to assets or parent terms) are removed before deletion.</p> </li> </ul>",
       "idempotent":true
     },
     "DeleteListing":{
@@ -1207,6 +1311,45 @@
       ],
       "documentation":"<p>Disassociates the environment role in Amazon DataZone.</p>"
     },
+    "DisassociateGovernedTerms":{
+      "name":"DisassociateGovernedTerms",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/v2/domains/{domainIdentifier}/entities/{entityType}/{entityIdentifier}/disassociate-governed-terms",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateGovernedTermsInput"},
+      "output":{"shape":"DisassociateGovernedTermsOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Disassociates restricted terms from an asset.</p>"
+    },
+    "GetAccountPool":{
+      "name":"GetAccountPool",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAccountPoolInput"},
+      "output":{"shape":"GetAccountPoolOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Gets the details of the account pool.</p>"
+    },
     "GetAsset":{
       "name":"GetAsset",
       "http":{
@@ -1224,7 +1367,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets an Amazon DataZone asset.</p>"
+      "documentation":"<p>Gets an Amazon DataZone asset.</p> <p>An asset is the fundamental building block in Amazon DataZone, representing any data resource that needs to be cataloged and managed. It can take many forms, from Amazon S3 buckets and database tables to dashboards and machine learning models. Each asset contains comprehensive metadata about the resource, including its location, schema, ownership, and lineage information. Assets are essential for organizing and managing data resources across an organization, making them discoverable and usable while maintaining proper governance.</p> <p>Before using the Amazon DataZone GetAsset command, ensure the following prerequisites are met:</p> <ul> <li> <p>Domain identifier must exist and be valid</p> </li> <li> <p>Asset identifier must exist</p> </li> <li> <p>User must have the required permissions to perform the action</p> </li> </ul>"
     },
     "GetAssetFilter":{
       "name":"GetAssetFilter",
@@ -1243,7 +1386,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets an asset filter.</p>"
+      "documentation":"<p>Gets an asset filter.</p> <p>Prerequisites:</p> <ul> <li> <p>Domain (<code>--domain-identifier</code>), asset (<code>--asset-identifier</code>), and filter (<code>--identifier</code>) must all exist. </p> </li> <li> <p>The asset filter should not have been deleted.</p> </li> <li> <p>The asset must still exist (since the filter is linked to it).</p> </li> </ul>"
     },
     "GetAssetType":{
       "name":"GetAssetType",
@@ -1262,7 +1405,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets an Amazon DataZone asset type.</p>"
+      "documentation":"<p>Gets an Amazon DataZone asset type.</p> <p>Asset types define the categories and characteristics of different kinds of data assets within Amazon DataZone.. They determine what metadata fields are required, what operations are possible, and how the asset integrates with other Amazon Web Services services. Asset types can range from built-in types like Amazon S3 buckets and Amazon Web Services Glue tables to custom types defined for specific organizational needs. Understanding asset types is crucial for properly organizing and managing different kinds of data resources.</p> <p>Prerequisites:</p> <ul> <li> <p>The asset type with identifier must exist in the domain. ResourceNotFoundException.</p> </li> <li> <p>You must have the GetAssetType permission.</p> </li> <li> <p>Ensure the domain-identifier value is correct and accessible.</p> </li> </ul>"
     },
     "GetConnection":{
       "name":"GetConnection",
@@ -1300,7 +1443,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets the data product.</p>"
+      "documentation":"<p>Gets the data product.</p> <p>Prerequisites:</p> <ul> <li> <p>The data product ID must exist. </p> </li> <li> <p>The domain must be valid and accessible.</p> </li> <li> <p>User must have read or discovery permissions for the data product.</p> </li> </ul>"
     },
     "GetDataSource":{
       "name":"GetDataSource",
@@ -1514,7 +1657,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets a metadata form type in Amazon DataZone.</p>"
+      "documentation":"<p>Gets a metadata form type in Amazon DataZone.</p> <p>Form types define the structure and validation rules for collecting metadata about assets in Amazon DataZone. They act as templates that ensure consistent metadata capture across similar types of assets, while allowing for customization to meet specific organizational needs. Form types can include required fields, validation rules, and dependencies, helping maintain high-quality metadata that makes data assets more discoverable and usable.</p> <ul> <li> <p>The form type with the specified identifier must exist in the given domain. </p> </li> <li> <p>The domain must be valid and active.</p> </li> <li> <p>User must have permission on the form type.</p> </li> <li> <p>The form type should not be deleted or in an invalid state.</p> </li> </ul> <p>One use case for this API is to determine whether a form field is indexed for search. </p> <p>A searchable field will be annotated with <code>@amazon.datazone#searchable</code>. By default, searchable fields are indexed for semantic search, where related query terms will match the attribute value even if they are not stemmed or keyword matches. If a field is indexed technical identifier search, it will be annotated with <code>@amazon.datazone#searchable(modes:[\"TECHNICAL\"])</code>. If a field is indexed for lexical search (supports stemmed and prefix matches but not semantic matches), it will be annotated with <code>@amazon.datazone#searchable(modes:[\"LEXICAL\"])</code>.</p> <p>A field storing glossary term IDs (which is filterable) will be annotated with <code>@amazon.datazone#glossaryterm(\"${glossaryId}\")</code>. </p>"
     },
     "GetGlossary":{
       "name":"GetGlossary",
@@ -1533,7 +1676,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets a business glossary in Amazon DataZone.</p>"
+      "documentation":"<p>Gets a business glossary in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The specified glossary ID must exist and be associated with the given domain. </p> </li> <li> <p>The caller must have the <code>datazone:GetGlossary</code> permission on the domain.</p> </li> </ul>"
     },
     "GetGlossaryTerm":{
       "name":"GetGlossaryTerm",
@@ -1552,7 +1695,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets a business glossary term in Amazon DataZone.</p>"
+      "documentation":"<p>Gets a business glossary term in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>Glossary term with identifier must exist in the domain. </p> </li> <li> <p>User must have permission on the glossary term.</p> </li> <li> <p>Domain must be accessible and active.</p> </li> </ul>"
     },
     "GetGroupProfile":{
       "name":"GetGroupProfile",
@@ -1686,7 +1829,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Gets a metadata generation run in Amazon DataZone.</p>"
+      "documentation":"<p>Gets a metadata generation run in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>Valid domain and run identifier. </p> </li> <li> <p>The metadata generation run must exist.</p> </li> <li> <p>User must have read access to the metadata run.</p> </li> </ul>"
     },
     "GetProject":{
       "name":"GetProject",
@@ -1859,6 +2002,43 @@
       ],
       "documentation":"<p>Gets a user profile in Amazon DataZone.</p>"
     },
+    "ListAccountPools":{
+      "name":"ListAccountPools",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAccountPoolsInput"},
+      "output":{"shape":"ListAccountPoolsOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Lists existing account pools.</p>"
+    },
+    "ListAccountsInAccountPool":{
+      "name":"ListAccountsInAccountPool",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools/{identifier}/accounts",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAccountsInAccountPoolInput"},
+      "output":{"shape":"ListAccountsInAccountPoolOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Lists the accounts in the specified account pool.</p>"
+    },
     "ListAssetFilters":{
       "name":"ListAssetFilters",
       "http":{
@@ -1876,7 +2056,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Lists asset filters.</p>"
+      "documentation":"<p>Lists asset filters.</p> <p>Prerequisites:</p> <ul> <li> <p>A valid domain and asset must exist. </p> </li> <li> <p>The asset must have at least one filter created to return results. </p> </li> </ul>"
     },
     "ListAssetRevisions":{
       "name":"ListAssetRevisions",
@@ -1895,7 +2075,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Lists the revisions for the asset.</p>"
+      "documentation":"<p>Lists the revisions for the asset.</p> <p>Prerequisites:</p> <ul> <li> <p>The asset must exist in the domain. </p> </li> <li> <p>There must be at least one revision of the asset (which happens automatically after creation).</p> </li> <li> <p>The domain must be valid and active.</p> </li> <li> <p>User must have permissions on the asset and domain.</p> </li> </ul>"
     },
     "ListConnections":{
       "name":"ListConnections",
@@ -1932,7 +2112,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Lists data product revisions.</p>"
+      "documentation":"<p>Lists data product revisions.</p> <p>Prerequisites:</p> <ul> <li> <p>The data product ID must exist within the domain. </p> </li> <li> <p>User must have view permissions on the data product.</p> </li> <li> <p>The domain must be in a valid and accessible state.</p> </li> </ul>"
     },
     "ListDataSourceRunActivities":{
       "name":"ListDataSourceRunActivities",
@@ -2219,7 +2399,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Lists all metadata generation runs.</p>"
+      "documentation":"<p>Lists all metadata generation runs.</p> <p>Metadata generation runs represent automated processes that leverage AI/ML capabilities to create or enhance asset metadata at scale. This feature helps organizations maintain comprehensive and consistent metadata across large numbers of assets without manual intervention. It can automatically generate business descriptions, tags, and other metadata elements, significantly reducing the time and effort required for metadata management while improving consistency and completeness.</p> <p>Prerequisites:</p> <ul> <li> <p>Valid domain identifier. </p> </li> <li> <p>User must have access to metadata generation runs in the domain.</p> </li> </ul>"
     },
     "ListNotifications":{
       "name":"ListNotifications",
@@ -2629,7 +2809,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Searches for assets in Amazon DataZone.</p>"
+      "documentation":"<p>Searches for assets in Amazon DataZone.</p> <p>Search in Amazon DataZone is a powerful capability that enables users to discover and explore data assets, glossary terms, and data products across their organization. It provides both basic and advanced search functionality, allowing users to find resources based on names, descriptions, metadata, and other attributes. Search can be scoped to specific types of resources (like assets, glossary terms, or data products) and can be filtered using various criteria such as creation date, owner, or status. The search functionality is essential for making the wealth of data resources in an organization discoverable and usable, helping users find the right data for their needs quickly and efficiently.</p> <p>Many search commands in Amazon DataZone are paginated, including <code>search</code> and <code>search-types</code>. When the result set is large, Amazon DataZone returns a <code>nextToken</code> in the response. This token can be used to retrieve the next page of results. </p> <p>Prerequisites:</p> <ul> <li> <p>The --domain-identifier must refer to an existing Amazon DataZone domain. </p> </li> <li> <p>--search-scope must be one of: ASSET, GLOSSARY_TERM, DATA_PRODUCT, or GLOSSARY.</p> </li> <li> <p>The user must have search permissions in the specified domain.</p> </li> <li> <p>If using --filters, ensure that the JSON is well-formed and that each filter includes valid attribute and value keys. </p> </li> <li> <p>For paginated results, be prepared to use --next-token to fetch additional pages.</p> </li> </ul>"
     },
     "SearchGroupProfiles":{
       "name":"SearchGroupProfiles",
@@ -2666,7 +2846,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Searches listings (records of an asset at a given time) in Amazon DataZone.</p>"
+      "documentation":"<p>Searches listings in Amazon DataZone.</p> <p>SearchListings is a powerful capability that enables users to discover and explore published assets and data products across their organization. It provides both basic and advanced search functionality, allowing users to find resources based on names, descriptions, metadata, and other attributes. SearchListings also supports filtering using various criteria such as creation date, owner, or status. This API is essential for making the wealth of data resources in an organization discoverable and usable, helping users find the right data for their needs quickly and efficiently.</p> <p>SearchListings returns results in a paginated format. When the result set is large, the response will include a nextToken, which can be used to retrieve the next page of results.</p> <p>The SearchListings API gives users flexibility in specifying what kind of search is run.</p> <p>To run a free-text search, the <code>searchText</code> parameter must be supplied. By default, all searchable fields are indexed for semantic search and will return semantic matches for SearchListings queries. To prevent semantic search indexing for a custom form attribute, see the <a href=\"https://docs.aws.amazon.com/datazone/latest/APIReference/API_CreateFormType.html\">CreateFormType API documentation</a>. To run a lexical search query, enclose the query with double quotes (\"\"). This will disable semantic search even for fields that have semantic search enabled and will only return results that contain the keywords wrapped by double quotes (order of tokens in the query is not enforced). Free-text search is supported for all attributes annotated with @amazon.datazone#searchable.</p> <p>To run a filtered search, provide filter clause using the filters parameter. To filter on glossary terms, use the special attribute <code>__DataZoneGlossaryTerms</code>.</p> <p> To find out whether an attribute has been annotated and indexed for a given search type, use the GetFormType API to retrieve the form containing the attribute.</p>"
     },
     "SearchTypes":{
       "name":"SearchTypes",
@@ -2684,7 +2864,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Searches for types in Amazon DataZone.</p>"
+      "documentation":"<p>Searches for types in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The --domain-identifier must refer to an existing Amazon DataZone domain. </p> </li> <li> <p>--search-scope must be one of the valid values including: ASSET_TYPE, GLOSSARY_TERM_TYPE, DATA_PRODUCT_TYPE.</p> </li> <li> <p>The --managed flag must be present without a value.</p> </li> <li> <p>The user must have permissions for form or asset types in the domain.</p> </li> <li> <p>If using --filters, ensure that the JSON is valid.</p> </li> <li> <p>Filters contain correct structure (attribute, value, operator).</p> </li> </ul>"
     },
     "SearchUserProfiles":{
       "name":"SearchUserProfiles",
@@ -2746,7 +2926,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Starts the metadata generation run.</p>",
+      "documentation":"<p>Starts the metadata generation run.</p> <p>Prerequisites:</p> <ul> <li> <p>Asset must be created and belong to the specified domain and project. </p> </li> <li> <p>Asset type must be supported for metadata generation (e.g., Amazon Web Services Glue table).</p> </li> <li> <p>Asset must have a structured schema with valid rows and columns.</p> </li> <li> <p>Valid values for --type: BUSINESS_DESCRIPTIONS, BUSINESS_NAMES.</p> </li> <li> <p>The user must have permission to run metadata generation in the domain/project.</p> </li> </ul>",
       "idempotent":true
     },
     "TagResource":{
@@ -2787,6 +2967,28 @@
       "documentation":"<p>Untags a resource in Amazon DataZone.</p>",
       "idempotent":true
     },
+    "UpdateAccountPool":{
+      "name":"UpdateAccountPool",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/v2/domains/{domainIdentifier}/account-pools/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateAccountPoolInput"},
+      "output":{"shape":"UpdateAccountPoolOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Updates the account pool.</p>",
+      "idempotent":true
+    },
     "UpdateAssetFilter":{
       "name":"UpdateAssetFilter",
       "http":{
@@ -2805,7 +3007,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates an asset filter.</p>",
+      "documentation":"<p>Updates an asset filter.</p> <p>Prerequisites:</p> <ul> <li> <p>The domain, asset, and asset filter identifier must all exist. </p> </li> <li> <p>The asset must contain the columns being referenced in the update.</p> </li> <li> <p>If applying a row filter, ensure the column referenced in the expression exists in the asset schema.</p> </li> </ul>",
       "idempotent":true
     },
     "UpdateConnection":{
@@ -2935,6 +3137,28 @@
       ],
       "documentation":"<p>Updates an environment action.</p>"
     },
+    "UpdateEnvironmentBlueprint":{
+      "name":"UpdateEnvironmentBlueprint",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/v2/domains/{domainIdentifier}/environment-blueprints/{identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateEnvironmentBlueprintInput"},
+      "output":{"shape":"UpdateEnvironmentBlueprintOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"}
+      ],
+      "documentation":"<p>Updates an environment blueprint in Amazon DataZone.</p>",
+      "idempotent":true
+    },
     "UpdateEnvironmentProfile":{
       "name":"UpdateEnvironmentProfile",
       "http":{
@@ -2974,7 +3198,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates the business glossary in Amazon DataZone.</p>",
+      "documentation":"<p>Updates the business glossary in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>The glossary must exist in the given domain. </p> </li> <li> <p>The caller must have the <code>datazone:UpdateGlossary</code> permission to update it.</p> </li> <li> <p>When updating the name, the new name must be unique within the domain.</p> </li> <li> <p>The glossary must not be deleted or in a terminal state.</p> </li> </ul>",
       "idempotent":true
     },
     "UpdateGlossaryTerm":{
@@ -2995,7 +3219,7 @@
         {"shape":"ValidationException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates a business glossary term in Amazon DataZone.</p>",
+      "documentation":"<p>Updates a business glossary term in Amazon DataZone.</p> <p>Prerequisites:</p> <ul> <li> <p>Glossary term must exist in the specified domain. </p> </li> <li> <p>New name must not conflict with existing terms in the same glossary.</p> </li> <li> <p>User must have permissions on the term.</p> </li> <li> <p>The term must not be in DELETED status.</p> </li> </ul>",
       "idempotent":true
     },
     "UpdateGroupProfile":{
@@ -3421,6 +3645,104 @@
       },
       "exception":true
     },
+    "AccountInfo":{
+      "type":"structure",
+      "required":[
+        "awsAccountId",
+        "supportedRegions"
+      ],
+      "members":{
+        "awsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The account ID.</p>"
+        },
+        "awsAccountName":{
+          "shape":"AwsAccountName",
+          "documentation":"<p>The account name.</p>"
+        },
+        "supportedRegions":{
+          "shape":"AwsRegionList",
+          "documentation":"<p>The regions supported for an account within an account pool. </p>"
+        }
+      },
+      "documentation":"<p>The account information within an account pool.</p>"
+    },
+    "AccountInfoList":{
+      "type":"list",
+      "member":{"shape":"AccountInfo"},
+      "max":25,
+      "min":1
+    },
+    "AccountPoolId":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9_-]{1,36}$"
+    },
+    "AccountPoolList":{
+      "type":"list",
+      "member":{"shape":"AccountPoolId"},
+      "max":10,
+      "min":1
+    },
+    "AccountPoolName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"^[\\w -]+$",
+      "sensitive":true
+    },
+    "AccountPoolSummaries":{
+      "type":"list",
+      "member":{"shape":"AccountPoolSummary"}
+    },
+    "AccountPoolSummary":{
+      "type":"structure",
+      "members":{
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user who created the account pool.</p>"
+        },
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain.</p>"
+        },
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The ID of the domain unit.</p>"
+        },
+        "id":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool.</p>"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user who updated the account pool.</p>"
+        }
+      },
+      "documentation":"<p>The summary of the account pool.</p>"
+    },
+    "AccountSource":{
+      "type":"structure",
+      "members":{
+        "accounts":{
+          "shape":"AccountInfoList",
+          "documentation":"<p>The static list of accounts within an account pool.</p>"
+        },
+        "customAccountPoolHandler":{
+          "shape":"CustomAccountPoolHandler",
+          "documentation":"<p>The custom Amazon Web Services Lambda handler within an account pool.</p>"
+        }
+      },
+      "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>",
+      "union":true
+    },
     "ActionLink":{
       "type":"string",
       "sensitive":true
@@ -3476,8 +3798,7 @@
     },
     "AddEntityOwnerOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddPolicyGrantInput":{
       "type":"structure",
@@ -3530,6 +3851,10 @@
     "AddPolicyGrantOutput":{
       "type":"structure",
       "members":{
+        "grantId":{
+          "shape":"GrantIdentifier",
+          "documentation":"<p>The ID of the policy grant that was added to a specified entity.</p>"
+        }
       }
     },
     "AddToProjectMemberPoolPolicyGrantDetail":{
@@ -3542,17 +3867,177 @@
       },
       "documentation":"<p>The details of the policy grant.</p>"
     },
-    "AllDomainUnitsGrantFilter":{
+    "AggregationAttributeDisplayValue":{"type":"string"},
+    "AggregationAttributeValue":{"type":"string"},
+    "AggregationDisplayValue":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "AggregationList":{
+      "type":"list",
+      "member":{"shape":"AggregationListItem"},
+      "max":10,
+      "min":1
+    },
+    "AggregationListItem":{
+      "type":"structure",
+      "required":["attribute"],
+      "members":{
+        "attribute":{
+          "shape":"Attribute",
+          "documentation":"<p>An attribute on which to compute aggregations.</p>"
+        },
+        "displayValue":{
+          "shape":"AggregationDisplayValue",
+          "documentation":"<p>The display value of the aggregation list item. Supported values include <code>value</code> and <code>glossaryTerm.name</code>.</p>"
+        }
+      },
+      "documentation":"<p>An aggregation list item.</p>"
+    },
+    "AggregationOutput":{
       "type":"structure",
       "members":{
+        "attribute":{
+          "shape":"Attribute",
+          "documentation":"<p>The attribute for this aggregation.</p>"
+        },
+        "displayValue":{
+          "shape":"AggregationDisplayValue",
+          "documentation":"<p>The display value of the aggregation output item.</p>"
+        },
+        "items":{
+          "shape":"AggregationOutputItems",
+          "documentation":"<p>A list of aggregation output items.</p>"
+        }
       },
+      "documentation":"<p>The aggregation for an attribute.</p>"
+    },
+    "AggregationOutputItem":{
+      "type":"structure",
+      "members":{
+        "count":{
+          "shape":"Integer",
+          "documentation":"<p>The count of the aggregation output item.</p>"
+        },
+        "displayValue":{
+          "shape":"AggregationAttributeDisplayValue",
+          "documentation":"<p>The display value of the aggregation. If the attribute being aggregated corresponds to the id of a public resource, the service automatically resolves the id to the provided display value.</p>"
+        },
+        "value":{
+          "shape":"AggregationAttributeValue",
+          "documentation":"<p>The attribute value of the aggregation output item.</p>"
+        }
+      },
+      "documentation":"<p>An aggregation output item.</p>"
+    },
+    "AggregationOutputItems":{
+      "type":"list",
+      "member":{"shape":"AggregationOutputItem"}
+    },
+    "AggregationOutputList":{
+      "type":"list",
+      "member":{"shape":"AggregationOutput"}
+    },
+    "AllDomainUnitsGrantFilter":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>The grant filter for all domain units.</p>"
     },
     "AllUsersGrantFilter":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>The all users grant filter.</p>"
+    },
+    "AmazonQPropertiesInput":{
+      "type":"structure",
+      "required":["isEnabled"],
       "members":{
+        "authMode":{
+          "shape":"AmazonQPropertiesInputAuthModeString",
+          "documentation":"<p>The authentication mode of the connection's Amazon Q properties.</p>"
+        },
+        "isEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether Amazon Q is enabled for the connection.</p>"
+        },
+        "profileArn":{
+          "shape":"AmazonQPropertiesInputProfileArnString",
+          "documentation":"<p>The profile ARN of the connection's Amazon Q properties.</p>"
+        }
       },
-      "documentation":"<p>The all users grant filter.</p>"
+      "documentation":"<p>The Amazon Q properties of the connection.</p>"
+    },
+    "AmazonQPropertiesInputAuthModeString":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "AmazonQPropertiesInputProfileArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"^arn:aws[a-z\\-]*:[a-z0-9\\-]+:[a-z0-9\\-]*:[0-9]*:.*"
+    },
+    "AmazonQPropertiesOutput":{
+      "type":"structure",
+      "required":["isEnabled"],
+      "members":{
+        "authMode":{
+          "shape":"AmazonQPropertiesOutputAuthModeString",
+          "documentation":"<p>The authentication mode of the connection's Amazon Q properties.</p>"
+        },
+        "isEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether Amazon Q is enabled for the connection.</p>"
+        },
+        "profileArn":{
+          "shape":"AmazonQPropertiesOutputProfileArnString",
+          "documentation":"<p>The profile ARN of the connection's Amazon Q properties.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Q properties of the connection.</p>"
+    },
+    "AmazonQPropertiesOutputAuthModeString":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "AmazonQPropertiesOutputProfileArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"^arn:aws[a-z\\-]*:[a-z0-9\\-]+:[a-z0-9\\-]*:[0-9]*:.*"
+    },
+    "AmazonQPropertiesPatch":{
+      "type":"structure",
+      "required":["isEnabled"],
+      "members":{
+        "authMode":{
+          "shape":"AmazonQPropertiesPatchAuthModeString",
+          "documentation":"<p>The authentication mode of the connection's Amazon Q properties.</p>"
+        },
+        "isEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether Amazon Q is enabled for the connection.</p>"
+        },
+        "profileArn":{
+          "shape":"AmazonQPropertiesPatchProfileArnString",
+          "documentation":"<p>The profile ARN of the connection's Amazon Q properties.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Q properties of the connection.</p>"
+    },
+    "AmazonQPropertiesPatchAuthModeString":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "AmazonQPropertiesPatchProfileArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"^arn:aws[a-z\\-]*:[a-z0-9\\-]+:[a-z0-9\\-]*:[0-9]*:.*"
     },
     "ApplicableAssetTypes":{
       "type":"list",
@@ -3706,6 +4191,10 @@
           "shape":"GlossaryTerms",
           "documentation":"<p>The glossary terms attached to the Amazon DataZone inventory asset.</p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"AssetItemGovernedGlossaryTermsList",
+          "documentation":"<p>The restricted glossary terms accociated with an asset.</p>"
+        },
         "identifier":{
           "shape":"AssetIdentifier",
           "documentation":"<p>the identifier of the Amazon DataZone inventory asset.</p>"
@@ -3740,6 +4229,10 @@
           "shape":"TimeSeriesDataPointSummaryFormOutputList",
           "documentation":"<p>The latest time series data points forms included in the additional attributes of an asset.</p>"
         },
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
+        },
         "readOnlyFormsOutput":{
           "shape":"FormOutputList",
           "documentation":"<p>The read-only forms included in the additional attributes of an inventory asset.</p>"
@@ -3747,6 +4240,12 @@
       },
       "documentation":"<p>The additional attributes of an inventory asset.</p>"
     },
+    "AssetItemGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":20,
+      "min":0
+    },
     "AssetListing":{
       "type":"structure",
       "members":{
@@ -3774,6 +4273,10 @@
           "shape":"DetailedGlossaryTerms",
           "documentation":"<p>The glossary terms attached to an asset published in an Amazon DataZone catalog. </p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"AssetListingGovernedGlossaryTermsList",
+          "documentation":"<p>The restricted glossary terms associated with an asset.</p>"
+        },
         "latestTimeSeriesDataPointForms":{
           "shape":"TimeSeriesDataPointSummaryFormOutputList",
           "documentation":"<p>The latest time series data points forms included in the additional attributes of an asset.</p>"
@@ -3803,6 +4306,12 @@
       },
       "documentation":"<p>The details of an asset published in an Amazon DataZone catalog. </p>"
     },
+    "AssetListingGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"DetailedGlossaryTerm"},
+      "max":20,
+      "min":0
+    },
     "AssetListingItem":{
       "type":"structure",
       "members":{
@@ -3834,6 +4343,10 @@
           "shape":"DetailedGlossaryTerms",
           "documentation":"<p>Glossary terms attached to the inventory asset.</p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"AssetListingItemGovernedGlossaryTermsList",
+          "documentation":"<p>The restricted glossary terms associated with an asset.</p>"
+        },
         "listingCreatedBy":{
           "shape":"CreatedBy",
           "documentation":"<p>The Amazon DataZone user who created the listing.</p>"
@@ -3871,10 +4384,20 @@
         "latestTimeSeriesDataPointForms":{
           "shape":"TimeSeriesDataPointSummaryFormOutputList",
           "documentation":"<p>The latest time series data points forms included in the additional attributes of an asset.</p>"
+        },
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
         }
       },
       "documentation":"<p>Additional attributes of an inventory asset.</p>"
     },
+    "AssetListingItemGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"DetailedGlossaryTerm"},
+      "max":20,
+      "min":0
+    },
     "AssetName":{
       "type":"string",
       "max":256,
@@ -4076,9 +4599,51 @@
     },
     "AssociateEnvironmentRoleOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "AssociateGovernedTermsInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "entityIdentifier",
+        "entityType",
+        "governedGlossaryTerms"
+      ],
       "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where governed terms are to be associated with an asset.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "entityIdentifier":{
+          "shape":"EntityIdentifier",
+          "documentation":"<p>The ID of the asset with which you want to associate a governed term.</p>",
+          "location":"uri",
+          "locationName":"entityIdentifier"
+        },
+        "entityType":{
+          "shape":"GovernedEntityType",
+          "documentation":"<p>The type of the asset with which you want to associate a governed term.</p>",
+          "location":"uri",
+          "locationName":"entityType"
+        },
+        "governedGlossaryTerms":{
+          "shape":"AssociateGovernedTermsInputGovernedGlossaryTermsList",
+          "documentation":"<p>The glossary terms in a restricted glossary.</p>"
+        }
       }
     },
+    "AssociateGovernedTermsInputGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":5,
+      "min":1
+    },
+    "AssociateGovernedTermsOutput":{
+      "type":"structure",
+      "members":{}
+    },
     "AthenaPropertiesInput":{
       "type":"structure",
       "members":{
@@ -4253,7 +4818,7 @@
     "AuthorizedPrincipalIdentifiers":{
       "type":"list",
       "member":{"shape":"AuthorizedPrincipalIdentifier"},
-      "max":10,
+      "max":20,
       "min":1
     },
     "AwsAccount":{
@@ -4275,6 +4840,12 @@
       "type":"string",
       "pattern":"^\\d{12}$"
     },
+    "AwsAccountName":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "sensitive":true
+    },
     "AwsConsoleLinkParameters":{
       "type":"structure",
       "members":{
@@ -4315,6 +4886,12 @@
       "type":"string",
       "pattern":"^[a-z]{2}-[a-z]{4,10}-\\d$"
     },
+    "AwsRegionList":{
+      "type":"list",
+      "member":{"shape":"AwsRegion"},
+      "max":3,
+      "min":1
+    },
     "BasicAuthenticationCredentials":{
       "type":"structure",
       "members":{
@@ -4379,8 +4956,7 @@
     },
     "CancelMetadataGenerationRunOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelSubscriptionInput":{
       "type":"structure",
@@ -4615,6 +5191,10 @@
     "ConnectionPropertiesInput":{
       "type":"structure",
       "members":{
+        "amazonQProperties":{
+          "shape":"AmazonQPropertiesInput",
+          "documentation":"<p>The Amazon Q properties of the connection.</p>"
+        },
         "athenaProperties":{
           "shape":"AthenaPropertiesInput",
           "documentation":"<p>The Amazon Athena properties of a connection.</p>"
@@ -4631,10 +5211,18 @@
           "shape":"IamPropertiesInput",
           "documentation":"<p>The IAM properties of a connection.</p>"
         },
+        "mlflowProperties":{
+          "shape":"MlflowPropertiesInput",
+          "documentation":"<p>The MLflow properties of a connection.</p>"
+        },
         "redshiftProperties":{
           "shape":"RedshiftPropertiesInput",
           "documentation":"<p>The Amazon Redshift properties of a connection.</p>"
         },
+        "s3Properties":{
+          "shape":"S3PropertiesInput",
+          "documentation":"<p>The Amazon S3 properties of a connection.</p>"
+        },
         "sparkEmrProperties":{
           "shape":"SparkEmrPropertiesInput",
           "documentation":"<p>The Spark EMR properties of a connection.</p>"
@@ -4650,6 +5238,10 @@
     "ConnectionPropertiesOutput":{
       "type":"structure",
       "members":{
+        "amazonQProperties":{
+          "shape":"AmazonQPropertiesOutput",
+          "documentation":"<p>The Amazon Q properties of the connection.</p>"
+        },
         "athenaProperties":{
           "shape":"AthenaPropertiesOutput",
           "documentation":"<p>The Amazon Athena properties of a connection.</p>"
@@ -4666,10 +5258,18 @@
           "shape":"IamPropertiesOutput",
           "documentation":"<p>The IAM properties of a connection.</p>"
         },
+        "mlflowProperties":{
+          "shape":"MlflowPropertiesOutput",
+          "documentation":"<p>The MLflow properties of a connection.</p>"
+        },
         "redshiftProperties":{
           "shape":"RedshiftPropertiesOutput",
           "documentation":"<p>The Amazon Redshift properties of a connection.</p>"
         },
+        "s3Properties":{
+          "shape":"S3PropertiesOutput",
+          "documentation":"<p>The Amazon S3 properties of a connection.</p>"
+        },
         "sparkEmrProperties":{
           "shape":"SparkEmrPropertiesOutput",
           "documentation":"<p>The Spark EMR properties of a connection.</p>"
@@ -4685,6 +5285,10 @@
     "ConnectionPropertiesPatch":{
       "type":"structure",
       "members":{
+        "amazonQProperties":{
+          "shape":"AmazonQPropertiesPatch",
+          "documentation":"<p>The Amazon Q properties of the connection.</p>"
+        },
         "athenaProperties":{
           "shape":"AthenaPropertiesPatch",
           "documentation":"<p>The Amazon Athena properties of a connection properties patch.</p>"
@@ -4697,10 +5301,18 @@
           "shape":"IamPropertiesPatch",
           "documentation":"<p>The IAM properties of a connection properties patch.</p>"
         },
+        "mlflowProperties":{
+          "shape":"MlflowPropertiesPatch",
+          "documentation":"<p>The MLflow properties of a connection.</p>"
+        },
         "redshiftProperties":{
           "shape":"RedshiftPropertiesPatch",
           "documentation":"<p>The Amazon Redshift properties of a connection properties patch.</p>"
         },
+        "s3Properties":{
+          "shape":"S3PropertiesPatch",
+          "documentation":"<p>The Amazon S3 properties of a connection properties patch.</p>"
+        },
         "sparkEmrProperties":{
           "shape":"SparkEmrPropertiesPatch",
           "documentation":"<p>The Spark EMR properties of a connection properties patch.</p>"
@@ -4714,6 +5326,13 @@
       "max":2048,
       "min":1
     },
+    "ConnectionScope":{
+      "type":"string",
+      "enum":[
+        "DOMAIN",
+        "PROJECT"
+      ]
+    },
     "ConnectionStatus":{
       "type":"string",
       "enum":[
@@ -4774,6 +5393,10 @@
           "shape":"ConnectionPropertiesOutput",
           "documentation":"<p>The connection props.</p>"
         },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>"
+        },
         "type":{
           "shape":"ConnectionType",
           "documentation":"<p>The connection type.</p>"
@@ -4796,15 +5419,104 @@
         "ORACLE",
         "POSTGRESQL",
         "REDSHIFT",
+        "S3",
         "SAPHANA",
         "SNOWFLAKE",
         "SPARK",
         "SQLSERVER",
         "TERADATA",
         "VERTICA",
-        "WORKFLOWS_MWAA"
+        "WORKFLOWS_MWAA",
+        "AMAZON_Q",
+        "MLFLOW"
       ]
     },
+    "CreateAccountPoolInput":{
+      "type":"structure",
+      "required":[
+        "accountSource",
+        "domainIdentifier",
+        "name",
+        "resolutionStrategy"
+      ],
+      "members":{
+        "accountSource":{
+          "shape":"AccountSource",
+          "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the account pool.</p>"
+        },
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where the account pool is created.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        }
+      }
+    },
+    "CreateAccountPoolOutput":{
+      "type":"structure",
+      "required":[
+        "accountSource",
+        "createdBy"
+      ],
+      "members":{
+        "accountSource":{
+          "shape":"AccountSource",
+          "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user who created the account pool.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the account pool.</p>"
+        },
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where the account pool is created.</p>"
+        },
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The ID of the domain where the account pool is created.</p>"
+        },
+        "id":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was last updated.</p>"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user who last updated the account pool.</p>"
+        }
+      }
+    },
     "CreateAssetFilterInput":{
       "type":"structure",
       "required":[
@@ -4927,7 +5639,7 @@
         },
         "externalIdentifier":{
           "shape":"ExternalIdentifier",
-          "documentation":"<p>The external identifier of the asset.</p>"
+          "documentation":"<p>The external identifier of the asset.</p> <p>If the value for the <code>externalIdentifier</code> parameter is specified, it must be a unique value.</p>"
         },
         "formsInput":{
           "shape":"FormInputList",
@@ -5008,6 +5720,10 @@
           "shape":"GlossaryTerms",
           "documentation":"<p>The glossary terms that are attached to the created asset.</p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"CreateAssetOutputGovernedGlossaryTermsList",
+          "documentation":"<p>The glossary terms in a restricted glossary.</p>"
+        },
         "id":{
           "shape":"AssetId",
           "documentation":"<p>The unique identifier of the created asset.</p>"
@@ -5050,6 +5766,12 @@
         }
       }
     },
+    "CreateAssetOutputGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":20,
+      "min":0
+    },
     "CreateAssetRevisionInput":{
       "type":"structure",
       "required":[
@@ -5150,6 +5872,10 @@
           "shape":"GlossaryTerms",
           "documentation":"<p>The glossary terms that were attached to the asset as part of asset revision.</p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"CreateAssetRevisionOutputGovernedGlossaryTermsList",
+          "documentation":"<p>The glossary terms in a restricted glossary.</p>"
+        },
         "id":{
           "shape":"AssetId",
           "documentation":"<p>The unique identifier of the asset revision.</p>"
@@ -5192,6 +5918,12 @@
         }
       }
     },
+    "CreateAssetRevisionOutputGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":20,
+      "min":0
+    },
     "CreateAssetTypeInput":{
       "type":"structure",
       "required":[
@@ -5298,7 +6030,6 @@
       "type":"structure",
       "required":[
         "domainIdentifier",
-        "environmentIdentifier",
         "name"
       ],
       "members":{
@@ -5321,6 +6052,10 @@
           "location":"uri",
           "locationName":"domainIdentifier"
         },
+        "enableTrustedIdentityPropagation":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the trusted identity propagation is enabled.</p>"
+        },
         "environmentIdentifier":{
           "shape":"EnvironmentId",
           "documentation":"<p>The ID of the environment where the connection is created.</p>"
@@ -5332,6 +6067,10 @@
         "props":{
           "shape":"ConnectionPropertiesInput",
           "documentation":"<p>The connection props.</p>"
+        },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>"
         }
       }
     },
@@ -5388,6 +6127,10 @@
           "shape":"ConnectionPropertiesOutput",
           "documentation":"<p>The connection props.</p>"
         },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>"
+        },
         "type":{
           "shape":"ConnectionType",
           "documentation":"<p>The connection type.</p>"
@@ -5690,7 +6433,7 @@
         },
         "type":{
           "shape":"DataSourceType",
-          "documentation":"<p>The type of the data source.</p>"
+          "documentation":"<p>The type of the data source. In Amazon DataZone, you can use data sources to import technical metadata of assets (data) from the source databases or data warehouses into Amazon DataZone. In the current release of Amazon DataZone, you can create and run data sources for Amazon Web Services Glue and Amazon Redshift.</p>"
         }
       }
     },
@@ -6067,11 +6810,93 @@
         }
       }
     },
+    "CreateEnvironmentBlueprintInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "name",
+        "provisioningProperties"
+      ],
+      "members":{
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the Amazon DataZone blueprint.</p>"
+        },
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The identifier of the domain in which this blueprint is created.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "name":{
+          "shape":"EnvironmentBlueprintName",
+          "documentation":"<p>The name of this Amazon DataZone blueprint.</p>"
+        },
+        "provisioningProperties":{
+          "shape":"ProvisioningProperties",
+          "documentation":"<p>The provisioning properties of this Amazon DataZone blueprint.</p>"
+        },
+        "userParameters":{
+          "shape":"CustomParameterList",
+          "documentation":"<p>The user parameters of this Amazon DataZone blueprint.</p>"
+        }
+      }
+    },
+    "CreateEnvironmentBlueprintOutput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "provider",
+        "provisioningProperties"
+      ],
+      "members":{
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the environment blueprint was created.</p>"
+        },
+        "deploymentProperties":{
+          "shape":"DeploymentProperties",
+          "documentation":"<p>The deployment properties of this Amazon DataZone blueprint.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of this Amazon DataZone blueprint.</p>"
+        },
+        "glossaryTerms":{
+          "shape":"GlossaryTerms",
+          "documentation":"<p>The glossary terms attached to this Amazon DataZone blueprint.</p>"
+        },
+        "id":{
+          "shape":"EnvironmentBlueprintId",
+          "documentation":"<p>The ID of this Amazon DataZone blueprint.</p>"
+        },
+        "name":{
+          "shape":"EnvironmentBlueprintName",
+          "documentation":"<p>The name of this Amazon DataZone blueprint.</p>"
+        },
+        "provider":{
+          "shape":"String",
+          "documentation":"<p>The provider of this Amazon DataZone blueprint.</p>"
+        },
+        "provisioningProperties":{
+          "shape":"ProvisioningProperties",
+          "documentation":"<p>The provisioning properties of this Amazon DataZone blueprint.</p>"
+        },
+        "updatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp of when this blueprint was updated.</p>"
+        },
+        "userParameters":{
+          "shape":"CustomParameterList",
+          "documentation":"<p>The user parameters of this Amazon DataZone blueprint.</p>"
+        }
+      }
+    },
     "CreateEnvironmentInput":{
       "type":"structure",
       "required":[
         "domainIdentifier",
-        "environmentProfileIdentifier",
         "name",
         "projectIdentifier"
       ],
@@ -6174,6 +6999,10 @@
           "shape":"EnvironmentBlueprintId",
           "documentation":"<p>The ID of the blueprint with which this Amazon DataZone environment was created.</p>"
         },
+        "environmentConfigurationId":{
+          "shape":"EnvironmentConfigurationId",
+          "documentation":"<p>The configuration ID of the environment.</p>"
+        },
         "environmentProfileId":{
           "shape":"EnvironmentProfileId",
           "documentation":"<p>The ID of the environment profile with which this Amazon DataZone environment was created.</p>"
@@ -6458,6 +7287,10 @@
         "status":{
           "shape":"GlossaryStatus",
           "documentation":"<p>The status of this business glossary.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of the restricted glossary.</p>"
         }
       }
     },
@@ -6493,6 +7326,10 @@
         "status":{
           "shape":"GlossaryStatus",
           "documentation":"<p>The status of this business glossary.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of the restricted glossary.</p>"
         }
       }
     },
@@ -6592,6 +7429,10 @@
         "termRelations":{
           "shape":"TermRelations",
           "documentation":"<p>The term relations of this business glossary term.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of the restricted glossary.</p>"
         }
       }
     },
@@ -6747,12 +7588,23 @@
           "shape":"ProjectProfileId",
           "documentation":"<p>The ID of the project profile.</p>"
         },
+        "resourceTags":{
+          "shape":"CreateProjectInputResourceTagsMap",
+          "documentation":"<p>The resource tags of the project.</p>"
+        },
         "userParameters":{
           "shape":"EnvironmentConfigurationUserParametersList",
           "documentation":"<p>The user parameters of the project.</p>"
         }
       }
     },
+    "CreateProjectInputResourceTagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":25,
+      "min":0
+    },
     "CreateProjectMembershipInput":{
       "type":"structure",
       "required":[
@@ -6786,8 +7638,7 @@
     },
     "CreateProjectMembershipOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateProjectOutput":{
       "type":"structure",
@@ -6850,6 +7701,10 @@
           "shape":"ProjectStatus",
           "documentation":"<p>The status of the Amazon DataZone project that was created.</p>"
         },
+        "resourceTags":{
+          "shape":"ResourceTags",
+          "documentation":"<p>The resource tags of the project.</p>"
+        },
         "userParameters":{
           "shape":"EnvironmentConfigurationUserParametersList",
           "documentation":"<p>The user parameters of the project.</p>"
@@ -6873,6 +7728,10 @@
         "name"
       ],
       "members":{
+        "allowCustomProjectResourceTags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether custom project resource tags are supported.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of a project profile.</p>"
@@ -6895,6 +7754,14 @@
           "shape":"ProjectProfileName",
           "documentation":"<p>Project profile name.</p>"
         },
+        "projectResourceTags":{
+          "shape":"ProjectResourceTagParameters",
+          "documentation":"<p>The resource tags of the project profile.</p>"
+        },
+        "projectResourceTagsDescription":{
+          "shape":"Description",
+          "documentation":"<p>Field viewable through the UI that provides a project user with the allowed resource tag specifications.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>Project profile status.</p>"
@@ -6910,6 +7777,10 @@
         "name"
       ],
       "members":{
+        "allowCustomProjectResourceTags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether custom project resource tags are supported.</p>"
+        },
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>A timestamp at which a project profile is created.</p>"
@@ -6946,6 +7817,14 @@
           "shape":"ProjectProfileName",
           "documentation":"<p>Project profile name.</p>"
         },
+        "projectResourceTags":{
+          "shape":"ProjectResourceTagParameters",
+          "documentation":"<p>The resource tags of the project profile.</p>"
+        },
+        "projectResourceTagsDescription":{
+          "shape":"Description",
+          "documentation":"<p>Field viewable through the UI that provides a project user with the allowed resource tag specifications.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>Project profile status.</p>"
@@ -7493,6 +8372,21 @@
       "min":1,
       "pattern":"cron\\((\\b[0-5]?[0-9]\\b) (\\b2[0-3]\\b|\\b[0-1]?[0-9]\\b) ([-?*,/\\dLW]){1,83} ([-*,/\\d]|[a-zA-Z]{3}){1,23} ([-?#*,/\\dL]|[a-zA-Z]{3}){1,13} ([^\\)]+)\\)"
     },
+    "CustomAccountPoolHandler":{
+      "type":"structure",
+      "required":["lambdaFunctionArn"],
+      "members":{
+        "lambdaExecutionRoleArn":{
+          "shape":"LambdaExecutionRoleArn",
+          "documentation":"<p>The ARN of the IAM role that enables Amazon SageMaker Unified Studio to invoke the Amazon Web Services Lambda funtion if the account source is the custom account pool handler.</p>"
+        },
+        "lambdaFunctionArn":{
+          "shape":"LambdaFunctionArn",
+          "documentation":"<p>The ARN of the Amazon Web Services Lambda function for the custom Amazon Web Services Lambda handler.</p>"
+        }
+      },
+      "documentation":"<p>The custom Amazon Web Services Lambda handler within an account pool.</p>"
+    },
     "CustomParameter":{
       "type":"structure",
       "required":[
@@ -7520,6 +8414,10 @@
           "shape":"Boolean",
           "documentation":"<p>Specifies whether the custom parameter is optional.</p>"
         },
+        "isUpdateSupported":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether a parameter value can be updated after creation. </p>"
+        },
         "keyName":{
           "shape":"CustomParameterKeyNameString",
           "documentation":"<p>The key name of the parameter.</p>"
@@ -7588,6 +8486,16 @@
       },
       "documentation":"<p>The data product.</p>"
     },
+    "DataProductItemAdditionalAttributes":{
+      "type":"structure",
+      "members":{
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
+        }
+      },
+      "documentation":"<p>The additional attributes of an Amazon DataZone data product.</p>"
+    },
     "DataProductItemType":{
       "type":"string",
       "enum":["ASSET"]
@@ -7695,6 +8603,10 @@
         "forms":{
           "shape":"Forms",
           "documentation":"<p>The metadata forms of the asset of the data product. </p>"
+        },
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
         }
       },
       "documentation":"<p>The additional attributes of the asset of the data product. </p>"
@@ -7714,6 +8626,10 @@
         "owningProjectId"
       ],
       "members":{
+        "additionalAttributes":{
+          "shape":"DataProductItemAdditionalAttributes",
+          "documentation":"<p>The additional attributes of an Amazon DataZone data product.</p>"
+        },
         "createdAt":{
           "shape":"CreatedAt",
           "documentation":"<p>The timestamp at which the data product was created.</p>"
@@ -8123,6 +9039,31 @@
       "min":1,
       "sensitive":true
     },
+    "DeleteAccountPoolInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
+      "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where the account pool is deleted.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool to be deleted.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "DeleteAccountPoolOutput":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteAssetFilterInput":{
       "type":"structure",
       "required":[
@@ -8174,8 +9115,7 @@
     },
     "DeleteAssetOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssetTypeInput":{
       "type":"structure",
@@ -8200,8 +9140,7 @@
     },
     "DeleteAssetTypeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConnectionInput":{
       "type":"structure",
@@ -8256,8 +9195,7 @@
     },
     "DeleteDataProductOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataSourceInput":{
       "type":"structure",
@@ -8452,8 +9390,7 @@
     },
     "DeleteDomainUnitOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEnvironmentActionInput":{
       "type":"structure",
@@ -8506,7 +9443,27 @@
     },
     "DeleteEnvironmentBlueprintConfigurationOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteEnvironmentBlueprintInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
       "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the Amazon DataZone domain in which the blueprint is deleted.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"EnvironmentBlueprintId",
+          "documentation":"<p>The ID of the blueprint that is deleted.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
       }
     },
     "DeleteEnvironmentInput":{
@@ -8574,8 +9531,7 @@
     },
     "DeleteFormTypeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGlossaryInput":{
       "type":"structure",
@@ -8600,8 +9556,7 @@
     },
     "DeleteGlossaryOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGlossaryTermInput":{
       "type":"structure",
@@ -8626,8 +9581,7 @@
     },
     "DeleteGlossaryTermOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteListingInput":{
       "type":"structure",
@@ -8652,8 +9606,7 @@
     },
     "DeleteListingOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectInput":{
       "type":"structure",
@@ -8710,13 +9663,11 @@
     },
     "DeleteProjectMembershipOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectProfileInput":{
       "type":"structure",
@@ -8741,8 +9692,7 @@
     },
     "DeleteProjectProfileOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleInput":{
       "type":"structure",
@@ -8767,8 +9717,7 @@
     },
     "DeleteRuleOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSubscriptionGrantInput":{
       "type":"structure",
@@ -8945,8 +9894,7 @@
     },
     "DeleteTimeSeriesDataPointsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Deployment":{
       "type":"structure",
@@ -9093,9 +10041,51 @@
     },
     "DisassociateEnvironmentRoleOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DisassociateGovernedTermsInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "entityIdentifier",
+        "entityType",
+        "governedGlossaryTerms"
+      ],
       "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where you want to disassociate restricted terms from an asset.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "entityIdentifier":{
+          "shape":"EntityIdentifier",
+          "documentation":"<p>The ID of an asset from which you want to disassociate restricted terms.</p>",
+          "location":"uri",
+          "locationName":"entityIdentifier"
+        },
+        "entityType":{
+          "shape":"GovernedEntityType",
+          "documentation":"<p>The type of the asset from which you want to disassociate restricted terms.</p>",
+          "location":"uri",
+          "locationName":"entityType"
+        },
+        "governedGlossaryTerms":{
+          "shape":"DisassociateGovernedTermsInputGovernedGlossaryTermsList",
+          "documentation":"<p>The restricted glossary terms that you want to disassociate from an asset.</p>"
+        }
       }
     },
+    "DisassociateGovernedTermsInputGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":5,
+      "min":1
+    },
+    "DisassociateGovernedTermsOutput":{
+      "type":"structure",
+      "members":{}
+    },
     "DomainDescription":{
       "type":"string",
       "sensitive":true
@@ -9535,12 +10525,14 @@
     "EnvironmentConfiguration":{
       "type":"structure",
       "required":[
-        "awsAccount",
-        "awsRegion",
         "environmentBlueprintId",
         "name"
       ],
       "members":{
+        "accountPools":{
+          "shape":"AccountPoolList",
+          "documentation":"<p>The account pools used by a custom project profile.</p>"
+        },
         "awsAccount":{
           "shape":"AwsAccount",
           "documentation":"<p>The Amazon Web Services account of the environment.</p>"
@@ -9643,9 +10635,17 @@
           "shape":"EnvironmentConfigurationName",
           "documentation":"<p>The environment configuration name.</p>"
         },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>The ID of the environment.</p>"
+        },
         "environmentParameters":{
           "shape":"EnvironmentParametersList",
           "documentation":"<p>The environment parameters.</p>"
+        },
+        "environmentResolvedAccount":{
+          "shape":"EnvironmentResolvedAccount",
+          "documentation":"<p>Specifies the account/Region that is to be used during project creation for a particular blueprint.</p>"
         }
       },
       "documentation":"<p>The environment configuration user parameters.</p>"
@@ -9797,6 +10797,28 @@
       },
       "documentation":"<p>The details of an environment profile.</p>"
     },
+    "EnvironmentResolvedAccount":{
+      "type":"structure",
+      "required":[
+        "awsAccountId",
+        "regionName"
+      ],
+      "members":{
+        "awsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The ID of the resolved account.</p>"
+        },
+        "regionName":{
+          "shape":"AwsRegion",
+          "documentation":"<p>The name of the resolved Region.</p>"
+        },
+        "sourceAccountPoolId":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the account/Region that is to be used during project creation for a particular blueprint.</p>"
+    },
     "EnvironmentStatus":{
       "type":"string",
       "enum":[
@@ -9853,6 +10875,10 @@
           "shape":"DomainId",
           "documentation":"<p>The identifier of the Amazon DataZone domain in which the environment exists.</p>"
         },
+        "environmentConfigurationId":{
+          "shape":"EnvironmentConfigurationId",
+          "documentation":"<p>The configuration ID with which the environment is created.</p>"
+        },
         "environmentProfileId":{
           "shape":"EnvironmentProfileId",
           "documentation":"<p>The identifier of the environment profile with which the environment was created.</p>"
@@ -10260,6 +11286,80 @@
       "max":10,
       "min":0
     },
+    "GetAccountPoolInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
+      "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain in which the account pool lives whose details are to be displayed.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool whose details are to be displayed.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "GetAccountPoolOutput":{
+      "type":"structure",
+      "required":[
+        "accountSource",
+        "createdBy"
+      ],
+      "members":{
+        "accountSource":{
+          "shape":"AccountSource",
+          "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user who created the account pool.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the account pool.</p>"
+        },
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain in which the account pool lives whose details are to be displayed.</p>"
+        },
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The domain unit ID of the account pool.</p>"
+        },
+        "id":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was last updated.</p>"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user who last updated the account pool.</p>"
+        }
+      }
+    },
     "GetAssetFilterInput":{
       "type":"structure",
       "required":[
@@ -10359,7 +11459,7 @@
         },
         "identifier":{
           "shape":"AssetIdentifier",
-          "documentation":"<p>The ID of the Amazon DataZone asset.</p>",
+          "documentation":"<p>The ID of the Amazon DataZone asset.</p> <p>This parameter supports either the value of <code>assetId</code> or <code>externalIdentifier</code> as input. If you are passing the value of <code>externalIdentifier</code>, you must prefix this value with <code>externalIdentifer%2F</code>.</p>",
           "location":"uri",
           "locationName":"identifier"
         },
@@ -10420,6 +11520,10 @@
           "shape":"GlossaryTerms",
           "documentation":"<p>The business glossary terms attached to the asset.</p>"
         },
+        "governedGlossaryTerms":{
+          "shape":"GetAssetOutputGovernedGlossaryTermsList",
+          "documentation":"<p>The restricted glossary terms attached to an asset.</p>"
+        },
         "id":{
           "shape":"AssetId",
           "documentation":"<p>The ID of the asset.</p>"
@@ -10458,6 +11562,12 @@
         }
       }
     },
+    "GetAssetOutputGovernedGlossaryTermsList":{
+      "type":"list",
+      "member":{"shape":"GlossaryTermId"},
+      "max":20,
+      "min":0
+    },
     "GetAssetTypeInput":{
       "type":"structure",
       "required":[
@@ -10627,6 +11737,10 @@
           "shape":"ConnectionPropertiesOutput",
           "documentation":"<p>Connection props.</p>"
         },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>"
+        },
         "type":{
           "shape":"ConnectionType",
           "documentation":"<p>The type of the connection.</p>"
@@ -11415,6 +12529,10 @@
           "shape":"EnvironmentBlueprintId",
           "documentation":"<p>The blueprint with which the environment is created.</p>"
         },
+        "environmentConfigurationId":{
+          "shape":"EnvironmentConfigurationId",
+          "documentation":"<p>The configuration ID that is used to create the environment.</p>"
+        },
         "environmentProfileId":{
           "shape":"EnvironmentProfileId",
           "documentation":"<p>The ID of the environment profile with which the environment is created.</p>"
@@ -11702,6 +12820,10 @@
         "updatedBy":{
           "shape":"UpdatedBy",
           "documentation":"<p>The Amazon DataZone user who updated the business glossary.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of the restricted glossary.</p>"
         }
       }
     },
@@ -11783,6 +12905,10 @@
         "updatedBy":{
           "shape":"UpdatedBy",
           "documentation":"<p>The Amazon DataZone user who updated the business glossary term.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of a term within a restricted glossary.</p>"
         }
       }
     },
@@ -12318,6 +13444,10 @@
           "shape":"ProjectStatus",
           "documentation":"<p>The status of the project.</p>"
         },
+        "resourceTags":{
+          "shape":"ResourceTags",
+          "documentation":"<p>The resource tags of the project.</p>"
+        },
         "userParameters":{
           "shape":"EnvironmentConfigurationUserParametersList",
           "documentation":"<p>The user parameters of a project.</p>"
@@ -12354,6 +13484,10 @@
         "name"
       ],
       "members":{
+        "allowCustomProjectResourceTags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether custom project resource tags are supported.</p>"
+        },
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp of when the project profile was created.</p>"
@@ -12390,6 +13524,14 @@
           "shape":"ProjectProfileName",
           "documentation":"<p>The name of the project profile.</p>"
         },
+        "projectResourceTags":{
+          "shape":"ProjectResourceTagParameters",
+          "documentation":"<p>The resource tags of the project profile.</p>"
+        },
+        "projectResourceTagsDescription":{
+          "shape":"Description",
+          "documentation":"<p>Field viewable through the UI that provides a project user with the allowed resource tag specifications.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of the project profile.</p>"
@@ -12988,6 +14130,11 @@
         }
       }
     },
+    "GlobalParameterMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"String"}
+    },
     "GlossaryDescription":{
       "type":"string",
       "max":4096,
@@ -13008,6 +14155,10 @@
         "status"
       ],
       "members":{
+        "additionalAttributes":{
+          "shape":"GlossaryItemAdditionalAttributes",
+          "documentation":"<p>The additional attributes of an Amazon DataZone glossary.</p>"
+        },
         "createdAt":{
           "shape":"CreatedAt",
           "documentation":"<p>The timestamp of when the glossary was created.</p>"
@@ -13047,10 +14198,24 @@
         "updatedBy":{
           "shape":"UpdatedBy",
           "documentation":"<p>The Amazon DataZone user who updated the business glossary.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restrictions associated with a goverened glossary term.</p>"
         }
       },
       "documentation":"<p>The details of a business glossary.</p>"
     },
+    "GlossaryItemAdditionalAttributes":{
+      "type":"structure",
+      "members":{
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
+        }
+      },
+      "documentation":"<p>The additional attributes of an Amazon DataZone glossary.</p>"
+    },
     "GlossaryName":{
       "type":"string",
       "max":256,
@@ -13078,6 +14243,10 @@
         "status"
       ],
       "members":{
+        "additionalAttributes":{
+          "shape":"GlossaryTermItemAdditionalAttributes",
+          "documentation":"<p>The additional attributes of an Amazon DataZone glossary term.</p>"
+        },
         "createdAt":{
           "shape":"CreatedAt",
           "documentation":"<p>The timestamp of when a business glossary term was created.</p>"
@@ -13125,10 +14294,24 @@
         "updatedBy":{
           "shape":"UpdatedBy",
           "documentation":"<p>The Amazon DataZone user who updated the business glossary term.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restrictions associated with a goverened glossary term.</p>"
         }
       },
       "documentation":"<p>The details of a business glossary term.</p>"
     },
+    "GlossaryTermItemAdditionalAttributes":{
+      "type":"structure",
+      "members":{
+        "matchRationale":{
+          "shape":"MatchRationale",
+          "documentation":"<p>List of rationales indicating why this item was matched by search.</p>"
+        }
+      },
+      "documentation":"<p>The additional attributes of an Amazon DataZone glossary term.</p>"
+    },
     "GlossaryTermName":{
       "type":"string",
       "max":256,
@@ -13148,6 +14331,16 @@
       "max":20,
       "min":1
     },
+    "GlossaryUsageRestriction":{
+      "type":"string",
+      "enum":["ASSET_GOVERNED_TERMS"]
+    },
+    "GlossaryUsageRestrictions":{
+      "type":"list",
+      "member":{"shape":"GlossaryUsageRestriction"},
+      "max":1,
+      "min":1
+    },
     "GlueConnection":{
       "type":"structure",
       "members":{
@@ -13525,6 +14718,14 @@
         "USER_MANAGED"
       ]
     },
+    "GovernedEntityType":{
+      "type":"string",
+      "enum":["ASSET"]
+    },
+    "GrantIdentifier":{
+      "type":"string",
+      "pattern":"^[A-Za-z0-9+/]{10}$"
+    },
     "GrantedEntity":{
       "type":"structure",
       "members":{
@@ -13752,6 +14953,10 @@
         "arn":{
           "shape":"String",
           "documentation":"<p>The ARN of an IAM user profile in Amazon DataZone.</p>"
+        },
+        "principalId":{
+          "shape":"String",
+          "documentation":"<p>Principal ID of the IAM user.</p>"
         }
       },
       "documentation":"<p>The details of an IAM user profile in Amazon DataZone.</p>"
@@ -13966,11 +15171,19 @@
         },
         "locationRegistrationRole":{
           "shape":"RoleArn",
-          "documentation":"<p>The role that is used to manage read/write access to the chosen Amazon S3 bucket(s) for Data Lake using AWS Lake Formation hybrid access mode.</p>"
+          "documentation":"<p>The role that is used to manage read/write access to the chosen Amazon S3 bucket(s) for Data Lake using Amazon Web Services Lake Formation hybrid access mode.</p>"
         }
       },
       "documentation":"<p>The Lake Formation configuration of the Data Lake blueprint.</p>"
     },
+    "LambdaExecutionRoleArn":{
+      "type":"string",
+      "pattern":"^arn:aws[^:]*:iam::\\d{12}:(role|role/service-role)/[\\w+=,.@-]*$"
+    },
+    "LambdaFunctionArn":{
+      "type":"string",
+      "pattern":"^arn:(?:aws|aws-cn|aws-us-gov):lambda:(?:[a-z]{2}(?:-gov)?-[a-z]+-\\d{1,}):(\\d{12}):function:[a-zA-Z0-9-_]+(?::[a-zA-Z0-9-_]+)?(?:\\$[\\w-]+)?$"
+    },
     "LastName":{
       "type":"string",
       "sensitive":true
@@ -14303,6 +15516,107 @@
       "type":"string",
       "pattern":"^cron\\((\\b[0-5]?[0-9]\\b) (\\b2[0-3]\\b|\\b[0-1]?[0-9]\\b) ([-?*,/\\dLW]){1,83} ([-*,/\\d]|[a-zA-Z]{3}){1,23} ([-?#*,/\\dL]|[a-zA-Z]{3}){1,13} ([^\\)]+)\\)$"
     },
+    "ListAccountPoolsInput":{
+      "type":"structure",
+      "required":["domainIdentifier"],
+      "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain where exsting account pools are to be listed.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of account pools to return in a single call to ListAccountPools. When the number of account pools to be listed is greater than the value of MaxResults, the response contains a NextToken value that you can use in a subsequent call to ListAccountPools to list the next set of account pools.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool to be listed.</p>",
+          "location":"querystring",
+          "locationName":"name"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When the number of account pools is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of account pools, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListAccountPools to list the next set of account pools.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "sortBy":{
+          "shape":"SortFieldAccountPool",
+          "documentation":"<p>The sort by mechanism in which the existing account pools are to be listed.</p>",
+          "location":"querystring",
+          "locationName":"sortBy"
+        },
+        "sortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The sort order in which the existing account pools are to be listed.</p>",
+          "location":"querystring",
+          "locationName":"sortOrder"
+        }
+      }
+    },
+    "ListAccountPoolsOutput":{
+      "type":"structure",
+      "members":{
+        "items":{
+          "shape":"AccountPoolSummaries",
+          "documentation":"<p>The results of the ListAccountPools operation.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When the number of account pools is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of account pools, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListAccountPools to list the next set of account pools.</p>"
+        }
+      }
+    },
+    "ListAccountsInAccountPoolInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
+      "members":{
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the domain in which the accounts in the specified account pool are to be listed.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool whose accounts are to be listed.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of accounts to return in a single call to ListAccountsInAccountPool. When the number of accounts to be listed is greater than the value of MaxResults, the response contains a NextToken value that you can use in a subsequent call to ListAccountsInAccountPool to list the next set of accounts.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When the number of accounts is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of accounts, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListAccountsInAccountPool to list the next set of accounts.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListAccountsInAccountPoolOutput":{
+      "type":"structure",
+      "members":{
+        "items":{
+          "shape":"AccountInfoList",
+          "documentation":"<p>The results of the ListAccountsInAccountPool operation.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When the number of accounts is greater than the default value for the MaxResults parameter, or if you explicitly specify a value for MaxResults that is less than the number of accounts, the response includes a pagination token named NextToken. You can specify this NextToken value in a subsequent call to ListAccountsInAccountPool to list the next set of accounts.</p>"
+        }
+      }
+    },
     "ListAssetFiltersInput":{
       "type":"structure",
       "required":[
@@ -14404,10 +15718,7 @@
     },
     "ListConnectionsInput":{
       "type":"structure",
-      "required":[
-        "domainIdentifier",
-        "projectIdentifier"
-      ],
+      "required":["domainIdentifier"],
       "members":{
         "domainIdentifier":{
           "shape":"DomainId",
@@ -14445,6 +15756,12 @@
           "location":"querystring",
           "locationName":"projectIdentifier"
         },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>",
+          "location":"querystring",
+          "locationName":"scope"
+        },
         "sortBy":{
           "shape":"SortFieldConnection",
           "documentation":"<p>Specifies how you want to sort the listed connections.</p>",
@@ -16283,6 +17600,26 @@
       "min":0,
       "sensitive":true
     },
+    "ManagedEndpointCredentials":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"ManagedEndpointCredentialsIdString",
+          "documentation":"<p>The identifier of the managed endpoint credentials.</p>"
+        },
+        "token":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the managed endpoint credentials.</p>"
+        }
+      },
+      "documentation":"<p>The managed endpoint credentials of the EMR on EKS cluster.</p>",
+      "sensitive":true
+    },
+    "ManagedEndpointCredentialsIdString":{
+      "type":"string",
+      "max":64,
+      "min":0
+    },
     "ManagedPolicyType":{
       "type":"string",
       "enum":[
@@ -16298,7 +17635,8 @@
         "DELEGATE_CREATE_ENVIRONMENT_PROFILE",
         "CREATE_ENVIRONMENT",
         "CREATE_ENVIRONMENT_FROM_BLUEPRINT",
-        "CREATE_PROJECT_FROM_PROJECT_PROFILE"
+        "CREATE_PROJECT_FROM_PROJECT_PROFILE",
+        "USE_ASSET_TYPE"
       ]
     },
     "MatchCriteria":{
@@ -16307,6 +17645,39 @@
       "max":10,
       "min":0
     },
+    "MatchOffset":{
+      "type":"structure",
+      "members":{
+        "endOffset":{
+          "shape":"Integer",
+          "documentation":"<p>The 0-indexed number indicating the end position (exclusive) of a matched term.</p>"
+        },
+        "startOffset":{
+          "shape":"Integer",
+          "documentation":"<p>The 0-indexed number indicating the start position (inclusive) of a matched term.</p>"
+        }
+      },
+      "documentation":"<p>The offset of a matched term.</p>"
+    },
+    "MatchOffsets":{
+      "type":"list",
+      "member":{"shape":"MatchOffset"}
+    },
+    "MatchRationale":{
+      "type":"list",
+      "member":{"shape":"MatchRationaleItem"}
+    },
+    "MatchRationaleItem":{
+      "type":"structure",
+      "members":{
+        "textMatches":{
+          "shape":"TextMatches",
+          "documentation":"<p>A list of TextMatchItems.</p>"
+        }
+      },
+      "documentation":"<p>A rationale indicating why this item was matched by search. </p>",
+      "union":true
+    },
     "MaxResults":{
       "type":"integer",
       "box":true,
@@ -16513,6 +17884,36 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "MlflowPropertiesInput":{
+      "type":"structure",
+      "members":{
+        "trackingServerArn":{
+          "shape":"String",
+          "documentation":"<p>The tracking server ARN as part of the MLflow properties of a connection.</p>"
+        }
+      },
+      "documentation":"<p>The MLflow properties of a connection.</p>"
+    },
+    "MlflowPropertiesOutput":{
+      "type":"structure",
+      "members":{
+        "trackingServerArn":{
+          "shape":"String",
+          "documentation":"<p>The tracking server ARN as part of the MLflow properties of a connection.</p>"
+        }
+      },
+      "documentation":"<p>The MLflow properties of a connection.</p>"
+    },
+    "MlflowPropertiesPatch":{
+      "type":"structure",
+      "members":{
+        "trackingServerArn":{
+          "shape":"String",
+          "documentation":"<p>The tracking server ARN as part of the MLflow properties of a connection.</p>"
+        }
+      },
+      "documentation":"<p>The MLflow properties of a connection.</p>"
+    },
     "Model":{
       "type":"structure",
       "members":{
@@ -16974,6 +18375,10 @@
           "shape":"AwsLocation",
           "documentation":"<p>The location of a connection.</p>"
         },
+        "enableTrustedIdentityPropagation":{
+          "shape":"Boolean",
+          "documentation":"<p>Specified whether trusted identity propagation for the connection is enabled.</p>"
+        },
         "glueConnection":{
           "shape":"GlueConnection",
           "documentation":"<p>The Amazon Web Services Glue connection.</p>"
@@ -17039,7 +18444,7 @@
         },
         "createGlossary":{
           "shape":"CreateGlossaryPolicyGrantDetail",
-          "documentation":"<p>Specifies that this is a create glossary policy.</p>"
+          "documentation":"<p> Specifies that this is a create glossary policy.</p>"
         },
         "createProject":{
           "shape":"CreateProjectPolicyGrantDetail",
@@ -17060,6 +18465,10 @@
         "overrideProjectOwners":{
           "shape":"OverrideProjectOwnersPolicyGrantDetail",
           "documentation":"<p>Specifies whether to override project owners.</p>"
+        },
+        "useAssetType":{
+          "shape":"UseAssetTypePolicyGrantDetail",
+          "documentation":"<p> Specifies the domain unit(s) whose projects can use this asset type while creating asset or asset revisions.</p>"
         }
       },
       "documentation":"<p>The details of the policy grant.</p>",
@@ -17084,6 +18493,10 @@
           "shape":"PolicyGrantDetail",
           "documentation":"<p>The details of the policy grant member.</p>"
         },
+        "grantId":{
+          "shape":"GrantIdentifier",
+          "documentation":"<p>The ID of the policy grant.</p>"
+        },
         "principal":{
           "shape":"PolicyGrantPrincipal",
           "documentation":"<p>The principal of the policy grant member.</p>"
@@ -17383,12 +18796,21 @@
       },
       "documentation":"<p>The summary of a project profile.</p>"
     },
+    "ProjectResourceTagParameters":{
+      "type":"list",
+      "member":{"shape":"ResourceTagParameter"},
+      "max":25,
+      "min":0
+    },
     "ProjectStatus":{
       "type":"string",
       "enum":[
         "ACTIVE",
         "DELETING",
-        "DELETE_FAILED"
+        "DELETE_FAILED",
+        "UPDATING",
+        "UPDATE_FAILED",
+        "MOVING"
       ]
     },
     "ProjectSummaries":{
@@ -17543,6 +18965,10 @@
           "shape":"PolicyArn",
           "documentation":"<p>The environment role permissions boundary.</p>"
         },
+        "globalParameters":{
+          "shape":"GlobalParameterMap",
+          "documentation":"<p>Region-agnostic environment blueprint parameters. </p>"
+        },
         "manageAccessRoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The ARN of the manage access role.</p>"
@@ -18276,8 +19702,7 @@
     },
     "RemoveEntityOwnerOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemovePolicyGrantInput":{
       "type":"structure",
@@ -18312,6 +19737,10 @@
           "location":"uri",
           "locationName":"entityType"
         },
+        "grantIdentifier":{
+          "shape":"GrantIdentifier",
+          "documentation":"<p>The ID of the policy grant that is to be removed from a specified entity.</p>"
+        },
         "policyType":{
           "shape":"ManagedPolicyType",
           "documentation":"<p>The type of the policy that you want to remove.</p>"
@@ -18324,8 +19753,7 @@
     },
     "RemovePolicyGrantOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequestReason":{
       "type":"string",
@@ -18339,6 +19767,10 @@
       "max":5,
       "min":1
     },
+    "ResolutionStrategy":{
+      "type":"string",
+      "enum":["MANUAL"]
+    },
     "Resource":{
       "type":"structure",
       "required":[
@@ -18382,6 +19814,65 @@
       },
       "exception":true
     },
+    "ResourceTag":{
+      "type":"structure",
+      "required":[
+        "key",
+        "source",
+        "value"
+      ],
+      "members":{
+        "key":{
+          "shape":"TagKey",
+          "documentation":"<p>The key of the resource tag of the project.</p>"
+        },
+        "source":{
+          "shape":"ResourceTagSource",
+          "documentation":"<p>The source of the resource tag of the project.</p>"
+        },
+        "value":{
+          "shape":"TagValue",
+          "documentation":"<p>The value of the resource tag of the project.</p>"
+        }
+      },
+      "documentation":"<p>The resource tag of the project.</p>"
+    },
+    "ResourceTagParameter":{
+      "type":"structure",
+      "required":[
+        "isValueEditable",
+        "key",
+        "value"
+      ],
+      "members":{
+        "isValueEditable":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the value of the resource tag parameter of the project profile is editable at the project level.</p>"
+        },
+        "key":{
+          "shape":"TagKey",
+          "documentation":"<p>The key of the resource tag parameter of the project profile.</p>"
+        },
+        "value":{
+          "shape":"TagValue",
+          "documentation":"<p>The value of the resource tag parameter key of the project profile.</p>"
+        }
+      },
+      "documentation":"<p>The resource tag parameter of the project profile.</p>"
+    },
+    "ResourceTagSource":{
+      "type":"string",
+      "enum":[
+        "PROJECT",
+        "PROJECT_PROFILE"
+      ]
+    },
+    "ResourceTags":{
+      "type":"list",
+      "member":{"shape":"ResourceTag"},
+      "max":25,
+      "min":0
+    },
     "Revision":{
       "type":"string",
       "max":64,
@@ -18576,7 +20067,10 @@
     },
     "RuleAction":{
       "type":"string",
-      "enum":["CREATE_SUBSCRIPTION_REQUEST"]
+      "enum":[
+        "CREATE_LISTING_CHANGE_SET",
+        "CREATE_SUBSCRIPTION_REQUEST"
+      ]
     },
     "RuleAssetTypeList":{
       "type":"list",
@@ -18734,6 +20228,12 @@
       },
       "documentation":"<p>The asset statistics from the data source run.</p>"
     },
+    "S3AccessGrantLocationId":{
+      "type":"string",
+      "max":64,
+      "min":0,
+      "pattern":"^[a-zA-Z0-9\\-]+$"
+    },
     "S3Location":{
       "type":"string",
       "max":1024,
@@ -18746,6 +20246,65 @@
       "max":20,
       "min":0
     },
+    "S3PropertiesInput":{
+      "type":"structure",
+      "required":["s3Uri"],
+      "members":{
+        "s3AccessGrantLocationId":{
+          "shape":"S3AccessGrantLocationId",
+          "documentation":"<p>The Amazon S3 Access Grant location ID that's part of the Amazon S3 properties of a connection.</p>"
+        },
+        "s3Uri":{
+          "shape":"S3Uri",
+          "documentation":"<p>The Amazon S3 URI that's part of the Amazon S3 properties of a connection.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon S3 properties of a connection.</p>"
+    },
+    "S3PropertiesOutput":{
+      "type":"structure",
+      "required":["s3Uri"],
+      "members":{
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>The error message that gets displayed.</p>"
+        },
+        "s3AccessGrantLocationId":{
+          "shape":"S3AccessGrantLocationId",
+          "documentation":"<p>The Amazon S3 Access Grant location ID that's part of the Amazon S3 properties of a connection.</p>"
+        },
+        "s3Uri":{
+          "shape":"S3Uri",
+          "documentation":"<p>The Amazon S3 URI that's part of the Amazon S3 properties of a connection.</p>"
+        },
+        "status":{
+          "shape":"ConnectionStatus",
+          "documentation":"<p>The status of the Amazon S3 connection.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon S3 properties of a connection.</p>"
+    },
+    "S3PropertiesPatch":{
+      "type":"structure",
+      "required":["s3Uri"],
+      "members":{
+        "s3AccessGrantLocationId":{
+          "shape":"S3AccessGrantLocationId",
+          "documentation":"<p>The Amazon S3 Access Grant location ID that's part of the Amazon S3 properties patch of a connection.</p>"
+        },
+        "s3Uri":{
+          "shape":"S3Uri",
+          "documentation":"<p>The Amazon S3 URI that's part of the Amazon S3 properties patch of a connection.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon S3 properties patch of a connection.</p>"
+    },
+    "S3Uri":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"^s3://.+$"
+    },
     "SageMakerAssetType":{
       "type":"string",
       "max":64,
@@ -18959,6 +20518,10 @@
           "shape":"SearchOutputAdditionalAttributes",
           "documentation":"<p>Specifies additional attributes for the search.</p>"
         },
+        "aggregations":{
+          "shape":"AggregationList",
+          "documentation":"<p>Enables you to specify one or more attributes to compute and return counts grouped by field values.</p>"
+        },
         "domainIdentifier":{
           "shape":"DomainId",
           "documentation":"<p>The identifier of the domain in which to search listings.</p>",
@@ -18982,7 +20545,7 @@
           "documentation":"<p>The details of the search.</p>"
         },
         "searchText":{
-          "shape":"String",
+          "shape":"SearchListingsInputSearchTextString",
           "documentation":"<p>Specifies the text for which to search.</p>"
         },
         "sort":{
@@ -18991,9 +20554,18 @@
         }
       }
     },
+    "SearchListingsInputSearchTextString":{
+      "type":"string",
+      "max":512,
+      "min":0
+    },
     "SearchListingsOutput":{
       "type":"structure",
       "members":{
+        "aggregates":{
+          "shape":"AggregationOutputList",
+          "documentation":"<p>Contains computed counts grouped by field values based on the requested aggregation attributes for the matching listings.</p>"
+        },
         "items":{
           "shape":"SearchResultItems",
           "documentation":"<p>The results of the <code>SearchListings</code> action.</p>"
@@ -19029,7 +20601,8 @@
       "type":"string",
       "enum":[
         "FORMS",
-        "TIME_SERIES_DATA_POINT_FORMS"
+        "TIME_SERIES_DATA_POINT_FORMS",
+        "TEXT_MATCH_RATIONALE"
       ]
     },
     "SearchOutputAdditionalAttributes":{
@@ -19072,7 +20645,7 @@
     },
     "SearchText":{
       "type":"string",
-      "max":4096,
+      "max":512,
       "min":1
     },
     "SearchTypesInput":{
@@ -19307,6 +20880,10 @@
     "SingleSignOn":{
       "type":"structure",
       "members":{
+        "idcInstanceArn":{
+          "shape":"SingleSignOnIdcInstanceArnString",
+          "documentation":"<p>The ARN of the IDC instance.</p>"
+        },
         "type":{
           "shape":"AuthType",
           "documentation":"<p>The type of single sign-on in Amazon DataZone.</p>"
@@ -19318,11 +20895,19 @@
       },
       "documentation":"<p>The single sign-on details in Amazon DataZone.</p>"
     },
+    "SingleSignOnIdcInstanceArnString":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}"
+    },
     "Smithy":{
       "type":"string",
       "max":100000,
       "min":1
     },
+    "SortFieldAccountPool":{
+      "type":"string",
+      "enum":["NAME"]
+    },
     "SortFieldConnection":{
       "type":"string",
       "enum":["NAME"]
@@ -19364,6 +20949,10 @@
           "shape":"SparkEmrPropertiesInputLogUriString",
           "documentation":"<p>The log URI of the Spark EMR.</p>"
         },
+        "managedEndpointArn":{
+          "shape":"SparkEmrPropertiesInputManagedEndpointArnString",
+          "documentation":"<p>The managed endpoint ARN of the EMR on EKS cluster.</p>"
+        },
         "pythonVirtualEnv":{
           "shape":"SparkEmrPropertiesInputPythonVirtualEnvString",
           "documentation":"<p>The Python virtual env of the Spark EMR.</p>"
@@ -19381,8 +20970,9 @@
     },
     "SparkEmrPropertiesInputComputeArnString":{
       "type":"string",
-      "max":256,
-      "min":0
+      "max":2048,
+      "min":0,
+      "pattern":"^arn:aws(-(cn|us-gov|iso(-[bef])?))?:(elasticmapreduce|emr-serverless|emr-containers):.*"
     },
     "SparkEmrPropertiesInputInstanceProfileArnString":{
       "type":"string",
@@ -19399,6 +20989,11 @@
       "max":256,
       "min":0
     },
+    "SparkEmrPropertiesInputManagedEndpointArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0
+    },
     "SparkEmrPropertiesInputPythonVirtualEnvString":{
       "type":"string",
       "max":256,
@@ -19416,6 +21011,10 @@
     "SparkEmrPropertiesOutput":{
       "type":"structure",
       "members":{
+        "certificateData":{
+          "shape":"String",
+          "documentation":"<p>The certificate data of the EMR on EKS cluster.</p>"
+        },
         "computeArn":{
           "shape":"String",
           "documentation":"<p>The compute ARN of the Spark EMR.</p>"
@@ -19448,6 +21047,14 @@
           "shape":"String",
           "documentation":"<p>The log URI of the Spark EMR.</p>"
         },
+        "managedEndpointArn":{
+          "shape":"SparkEmrPropertiesOutputManagedEndpointArnString",
+          "documentation":"<p>The managed endpoint ARN of the EMR on EKS cluster.</p>"
+        },
+        "managedEndpointCredentials":{
+          "shape":"ManagedEndpointCredentials",
+          "documentation":"<p>The managed endpoint credentials of the EMR on EKS cluster.</p>"
+        },
         "pythonVirtualEnv":{
           "shape":"String",
           "documentation":"<p>The Python virtual env of the Spark EMR.</p>"
@@ -19463,6 +21070,11 @@
       },
       "documentation":"<p>The Spark EMR properties.</p>"
     },
+    "SparkEmrPropertiesOutputManagedEndpointArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0
+    },
     "SparkEmrPropertiesPatch":{
       "type":"structure",
       "members":{
@@ -19482,6 +21094,10 @@
           "shape":"SparkEmrPropertiesPatchLogUriString",
           "documentation":"<p>The log URI in the Spark EMR properties patch.</p>"
         },
+        "managedEndpointArn":{
+          "shape":"SparkEmrPropertiesPatchManagedEndpointArnString",
+          "documentation":"<p>The managed endpoint ARN of the EMR on EKS cluster.</p>"
+        },
         "pythonVirtualEnv":{
           "shape":"SparkEmrPropertiesPatchPythonVirtualEnvString",
           "documentation":"<p>The Python virtual env in the Spark EMR properties patch.</p>"
@@ -19499,8 +21115,9 @@
     },
     "SparkEmrPropertiesPatchComputeArnString":{
       "type":"string",
-      "max":256,
-      "min":0
+      "max":2048,
+      "min":0,
+      "pattern":"^arn:aws(-(cn|us-gov|iso(-[bef])?))?:(elasticmapreduce|emr-serverless|emr-containers):.*"
     },
     "SparkEmrPropertiesPatchInstanceProfileArnString":{
       "type":"string",
@@ -19517,6 +21134,11 @@
       "max":256,
       "min":0
     },
+    "SparkEmrPropertiesPatchManagedEndpointArnString":{
+      "type":"string",
+      "max":2048,
+      "min":0
+    },
     "SparkEmrPropertiesPatchPythonVirtualEnvString":{
       "type":"string",
       "max":256,
@@ -20162,7 +21784,7 @@
         },
         "updatedAt":{
           "shape":"UpdatedAt",
-          "documentation":"<p>The timestampf of when the subscription grant was updated.</p>"
+          "documentation":"<p>The timestamp of when the subscription grant was updated.</p>"
         },
         "updatedBy":{
           "shape":"UpdatedBy",
@@ -20503,8 +22125,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -20522,7 +22143,8 @@
       "enum":[
         "DOMAIN_UNIT",
         "ENVIRONMENT_BLUEPRINT_CONFIGURATION",
-        "ENVIRONMENT_PROFILE"
+        "ENVIRONMENT_PROFILE",
+        "ASSET_TYPE"
       ]
     },
     "TaskId":{
@@ -20562,6 +22184,28 @@
       "max":10,
       "min":1
     },
+    "TextMatchItem":{
+      "type":"structure",
+      "members":{
+        "attribute":{
+          "shape":"Attribute",
+          "documentation":"<p>The name of the attribute.</p>"
+        },
+        "matchOffsets":{
+          "shape":"MatchOffsets",
+          "documentation":"<p>List of offsets indicating matching terms in the TextMatchItem text.</p>"
+        },
+        "text":{
+          "shape":"String",
+          "documentation":"<p>Snippet of attribute text containing highlighted content.</p>"
+        }
+      },
+      "documentation":"<p>A structure indicating matched terms for an attribute.</p>"
+    },
+    "TextMatches":{
+      "type":"list",
+      "member":{"shape":"TextMatchItem"}
+    },
     "ThrottlingException":{
       "type":"structure",
       "required":["message"],
@@ -20873,8 +22517,7 @@
     },
     "Unit":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The details of the policy of creating an environment.</p>"
     },
     "UntagResourceRequest":{
@@ -20900,7 +22543,96 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateAccountPoolInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
       "members":{
+        "accountSource":{
+          "shape":"AccountSource",
+          "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the account pool that is to be udpated.</p>"
+        },
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The domain ID where the account pool that is to be updated lives.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool that is to be updated.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool that is to be updated.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        }
+      }
+    },
+    "UpdateAccountPoolOutput":{
+      "type":"structure",
+      "required":[
+        "accountSource",
+        "createdBy"
+      ],
+      "members":{
+        "accountSource":{
+          "shape":"AccountSource",
+          "documentation":"<p>The source of accounts for the account pool. In the current release, it's either a static list of accounts provided by the customer or a custom Amazon Web Services Lambda handler. </p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user who created the account pool.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the account pool that is to be udpated.</p>"
+        },
+        "domainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The domain ID where the account pool that is to be updated lives.</p>"
+        },
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The domain ID in which the account pool that is to be updated lives.</p>"
+        },
+        "id":{
+          "shape":"AccountPoolId",
+          "documentation":"<p>The ID of the account pool that is to be updated.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp at which the account pool was last updated.</p>"
+        },
+        "name":{
+          "shape":"AccountPoolName",
+          "documentation":"<p>The name of the account pool that is to be updated.</p>"
+        },
+        "resolutionStrategy":{
+          "shape":"ResolutionStrategy",
+          "documentation":"<p>The mechanism used to resolve the account selection from the account pool.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user who last updated the account pool.</p>"
+        }
       }
     },
     "UpdateAssetFilterInput":{
@@ -21085,6 +22817,10 @@
           "shape":"ConnectionPropertiesOutput",
           "documentation":"<p>The connection props.</p>"
         },
+        "scope":{
+          "shape":"ConnectionScope",
+          "documentation":"<p>The scope of the connection.</p>"
+        },
         "type":{
           "shape":"ConnectionType",
           "documentation":"<p>The connection type.</p>"
@@ -21484,6 +23220,90 @@
         }
       }
     },
+    "UpdateEnvironmentBlueprintInput":{
+      "type":"structure",
+      "required":[
+        "domainIdentifier",
+        "identifier"
+      ],
+      "members":{
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "domainIdentifier":{
+          "shape":"DomainId",
+          "documentation":"<p>The identifier of the Amazon DataZone domain in which an environment blueprint is to be updated.</p>",
+          "location":"uri",
+          "locationName":"domainIdentifier"
+        },
+        "identifier":{
+          "shape":"EnvironmentBlueprintId",
+          "documentation":"<p>The identifier of the environment blueprint to be updated.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "provisioningProperties":{
+          "shape":"ProvisioningProperties",
+          "documentation":"<p>The provisioning properties to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "userParameters":{
+          "shape":"CustomParameterList",
+          "documentation":"<p>The user parameters to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        }
+      }
+    },
+    "UpdateEnvironmentBlueprintOutput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "provider",
+        "provisioningProperties"
+      ],
+      "members":{
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp of when the environment blueprint was created.</p>"
+        },
+        "deploymentProperties":{
+          "shape":"DeploymentProperties",
+          "documentation":"<p>The deployment properties to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "glossaryTerms":{
+          "shape":"GlossaryTerms",
+          "documentation":"<p>The glossary terms to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "id":{
+          "shape":"EnvironmentBlueprintId",
+          "documentation":"<p>The identifier of the blueprint to be updated.</p>"
+        },
+        "name":{
+          "shape":"EnvironmentBlueprintName",
+          "documentation":"<p>The name to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "provider":{
+          "shape":"String",
+          "documentation":"<p>The provider of the blueprint to be udpated.</p>"
+        },
+        "provisioningProperties":{
+          "shape":"ProvisioningProperties",
+          "documentation":"<p>The provisioning properties to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        },
+        "updatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp of when the blueprint was updated.</p>"
+        },
+        "userParameters":{
+          "shape":"CustomParameterList",
+          "documentation":"<p>The user parameters to be updated as part of the <code>UpdateEnvironmentBlueprint</code> action.</p>"
+        }
+      }
+    },
     "UpdateEnvironmentInput":{
       "type":"structure",
       "required":[
@@ -21491,6 +23311,10 @@
         "identifier"
       ],
       "members":{
+        "blueprintVersion":{
+          "shape":"String",
+          "documentation":"<p>The blueprint version to which the environment should be updated. You can only specify the following string for this parameter: <code>latest</code>.</p>"
+        },
         "description":{
           "shape":"String",
           "documentation":"<p>The description to be updated as part of the <code>UpdateEnvironment</code> action.</p>"
@@ -21514,6 +23338,10 @@
         "name":{
           "shape":"String",
           "documentation":"<p>The name to be updated as part of the <code>UpdateEnvironment</code> action.</p>"
+        },
+        "userParameters":{
+          "shape":"EnvironmentParametersList",
+          "documentation":"<p>The user parameters of the environment.</p>"
         }
       }
     },
@@ -21563,6 +23391,10 @@
           "shape":"EnvironmentBlueprintId",
           "documentation":"<p>The blueprint identifier of the environment.</p>"
         },
+        "environmentConfigurationId":{
+          "shape":"EnvironmentConfigurationId",
+          "documentation":"<p>The configuration ID of the environment.</p>"
+        },
         "environmentProfileId":{
           "shape":"EnvironmentProfileId",
           "documentation":"<p>The profile identifier of the environment.</p>"
@@ -21784,6 +23616,10 @@
         "status":{
           "shape":"GlossaryStatus",
           "documentation":"<p>The status to be updated as part of the <code>UpdateGlossary</code> action.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of the restricted glossary.</p>"
         }
       }
     },
@@ -21873,6 +23709,10 @@
         "termRelations":{
           "shape":"TermRelations",
           "documentation":"<p>The term relations to be updated as part of the <code>UpdateGlossaryTerm</code> action.</p>"
+        },
+        "usageRestrictions":{
+          "shape":"GlossaryUsageRestrictions",
+          "documentation":"<p>The usage restriction of a term within a restricted glossary.</p>"
         }
       }
     },
@@ -21940,6 +23780,10 @@
           "location":"uri",
           "locationName":"domainIdentifier"
         },
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The ID of the domain unit.</p>"
+        },
         "environmentDeploymentDetails":{
           "shape":"EnvironmentDeploymentDetails",
           "documentation":"<p>The environment deployment details of the project.</p>"
@@ -21957,9 +23801,28 @@
         "name":{
           "shape":"ProjectName",
           "documentation":"<p>The name to be updated as part of the <code>UpdateProject</code> action.</p>"
+        },
+        "projectProfileVersion":{
+          "shape":"String",
+          "documentation":"<p>The project profile version to which the project should be updated. You can only specify the following string for this parameter: <code>latest</code>.</p>"
+        },
+        "resourceTags":{
+          "shape":"UpdateProjectInputResourceTagsMap",
+          "documentation":"<p>The resource tags of the project.</p>"
+        },
+        "userParameters":{
+          "shape":"EnvironmentConfigurationUserParametersList",
+          "documentation":"<p>The user parameters of the project.</p>"
         }
       }
     },
+    "UpdateProjectInputResourceTagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":25,
+      "min":0
+    },
     "UpdateProjectOutput":{
       "type":"structure",
       "required":[
@@ -22021,6 +23884,10 @@
           "shape":"ProjectStatus",
           "documentation":"<p>The status of the project.</p>"
         },
+        "resourceTags":{
+          "shape":"ResourceTags",
+          "documentation":"<p>The resource tags of the project.</p>"
+        },
         "userParameters":{
           "shape":"EnvironmentConfigurationUserParametersList",
           "documentation":"<p>The user parameters of the project.</p>"
@@ -22034,6 +23901,10 @@
         "identifier"
       ],
       "members":{
+        "allowCustomProjectResourceTags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether custom project resource tags are supported.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of a project profile.</p>"
@@ -22062,6 +23933,14 @@
           "shape":"ProjectProfileName",
           "documentation":"<p>The name of a project profile.</p>"
         },
+        "projectResourceTags":{
+          "shape":"ProjectResourceTagParameters",
+          "documentation":"<p>The resource tags of the project profile.</p>"
+        },
+        "projectResourceTagsDescription":{
+          "shape":"Description",
+          "documentation":"<p>Field viewable through the UI that provides a project user with the allowed resource tag specifications.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of a project profile.</p>"
@@ -22077,6 +23956,10 @@
         "name"
       ],
       "members":{
+        "allowCustomProjectResourceTags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether custom project resource tags are supported.</p>"
+        },
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp at which a project profile is created.</p>"
@@ -22113,6 +23996,14 @@
           "shape":"ProjectProfileName",
           "documentation":"<p>The name of the project profile.</p>"
         },
+        "projectResourceTags":{
+          "shape":"ProjectResourceTagParameters",
+          "documentation":"<p>The resource tags of the project profile.</p>"
+        },
+        "projectResourceTagsDescription":{
+          "shape":"Description",
+          "documentation":"<p>Field viewable through the UI that provides a project user with the allowed resource tag specifications.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of the project profile.</p>"
@@ -22518,7 +24409,7 @@
         },
         "authorizedPrincipals":{
           "shape":"AuthorizedPrincipalIdentifiers",
-          "documentation":"<p>The authorized principals to be updated as part of the <code>UpdateSubscriptionTarget</code> action.</p>"
+          "documentation":"<p>The authorized principals to be updated as part of the <code>UpdateSubscriptionTarget</code> action. Updates are supported in batches of 5 at a time.</p>"
         },
         "createdAt":{
           "shape":"CreatedAt",
@@ -22628,6 +24519,16 @@
     },
     "UpdatedAt":{"type":"timestamp"},
     "UpdatedBy":{"type":"string"},
+    "UseAssetTypePolicyGrantDetail":{
+      "type":"structure",
+      "members":{
+        "domainUnitId":{
+          "shape":"DomainUnitId",
+          "documentation":"<p>The ID of the domain unit.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the domain unit(s) whose projects can use this asset type while creating asset or asset revisions.</p>"
+    },
     "UserAssignment":{
       "type":"string",
       "enum":[
diff -pruN 2.23.6-1/awscli/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dax/2017-04-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/dax/2017-04-19/service-2.json 2.31.35-1/awscli/botocore/data/dax/2017-04-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/dax/2017-04-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dax/2017-04-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"dax",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"Amazon DAX",
     "serviceFullName":"Amazon DynamoDB Accelerator (DAX)",
     "serviceId":"DAX",
     "signatureVersion":"v4",
     "targetPrefix":"AmazonDAXV3",
-    "uid":"dax-2017-04-19"
+    "uid":"dax-2017-04-19",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateCluster":{
@@ -71,7 +73,8 @@
         {"shape":"SubnetGroupQuotaExceededFault"},
         {"shape":"SubnetQuotaExceededFault"},
         {"shape":"InvalidSubnet"},
-        {"shape":"ServiceLinkedRoleNotFoundFault"}
+        {"shape":"ServiceLinkedRoleNotFoundFault"},
+        {"shape":"SubnetNotAllowedFault"}
       ],
       "documentation":"<p>Creates a new subnet group.</p>"
     },
@@ -289,7 +292,7 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"InvalidParameterCombinationException"}
       ],
-      "documentation":"<p>Reboots a single node of a DAX cluster. The reboot action takes place as soon as possible. During the reboot, the node status is set to REBOOTING.</p> <note> <p> <code>RebootNode</code> restarts the DAX engine process and does not remove the contents of the cache. </p> </note>"
+      "documentation":"<p>Reboots a single node of a DAX cluster. The reboot action takes place as soon as possible. During the reboot, the node status is set to REBOOTING.</p> <note> <p> <code>RebootNode</code> restarts the DAX engine process and does not remove the contents of the cache.</p> </note>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -378,7 +381,8 @@
         {"shape":"SubnetQuotaExceededFault"},
         {"shape":"SubnetInUse"},
         {"shape":"InvalidSubnet"},
-        {"shape":"ServiceLinkedRoleNotFoundFault"}
+        {"shape":"ServiceLinkedRoleNotFoundFault"},
+        {"shape":"SubnetNotAllowedFault"}
       ],
       "documentation":"<p>Modifies an existing subnet group.</p>"
     }
@@ -470,14 +474,17 @@
         "ClusterEndpointEncryptionType":{
           "shape":"ClusterEndpointEncryptionType",
           "documentation":"<p>The type of encryption supported by the cluster's endpoint. Values are:</p> <ul> <li> <p> <code>NONE</code> for no encryption</p> <p> <code>TLS</code> for Transport Layer Security</p> </li> </ul>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The IP address type of the cluster. Values are:</p> <ul> <li> <p> <code>ipv4</code> - IPv4 addresses only</p> </li> <li> <p> <code>ipv6</code> - IPv6 addresses only</p> </li> <li> <p> <code>dual_stack</code> - Both IPv4 and IPv6 addresses</p> </li> </ul>"
         }
       },
       "documentation":"<p>Contains all of the attributes of a specific DAX cluster.</p>"
     },
     "ClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a DAX cluster with the given identifier.</p>",
       "exception":true
     },
@@ -498,16 +505,14 @@
     },
     "ClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cluster ID does not refer to an existing DAX cluster.</p>",
       "exception":true
     },
     "ClusterQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You have attempted to exceed the maximum number of DAX clusters for your AWS account.</p>",
+      "members":{},
+      "documentation":"<p>You have attempted to exceed the maximum number of DAX clusters for your Amazon Web Services account.</p>",
       "exception":true
     },
     "CreateClusterRequest":{
@@ -533,7 +538,7 @@
         },
         "ReplicationFactor":{
           "shape":"Integer",
-          "documentation":"<p>The number of nodes in the DAX cluster. A replication factor of 1 will create a single-node cluster, without any read replicas. For additional fault tolerance, you can create a multiple node cluster with one or more read replicas. To do this, set <code>ReplicationFactor</code> to a number between 3 (one primary and two read replicas) and 10 (one primary and nine read replicas). <code>If the AvailabilityZones</code> parameter is provided, its length must equal the <code>ReplicationFactor</code>.</p> <note> <p>AWS recommends that you have at least two read replicas per cluster.</p> </note>"
+          "documentation":"<p>The number of nodes in the DAX cluster. A replication factor of 1 will create a single-node cluster, without any read replicas. For additional fault tolerance, you can create a multiple node cluster with one or more read replicas. To do this, set <code>ReplicationFactor</code> to a number between 3 (one primary and two read replicas) and 10 (one primary and nine read replicas). <code>If the AvailabilityZones</code> parameter is provided, its length must equal the <code>ReplicationFactor</code>.</p> <note> <p>Amazon Web Services recommends that you have at least two read replicas per cluster.</p> </note>"
         },
         "AvailabilityZones":{
           "shape":"AvailabilityZoneList",
@@ -574,6 +579,10 @@
         "ClusterEndpointEncryptionType":{
           "shape":"ClusterEndpointEncryptionType",
           "documentation":"<p>The type of encryption the cluster's endpoint should support. Values are:</p> <ul> <li> <p> <code>NONE</code> for no encryption</p> </li> <li> <p> <code>TLS</code> for Transport Layer Security</p> </li> </ul>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies the IP protocol(s) the cluster uses for network communications. Values are:</p> <ul> <li> <p> <code>ipv4</code> - The cluster is accessible only through IPv4 addresses</p> </li> <li> <p> <code>ipv6</code> - The cluster is accessible only through IPv6 addresses</p> </li> <li> <p> <code>dual_stack</code> - The cluster is accessible through both IPv4 and IPv6 addresses.</p> </li> </ul> <note> <p>If no explicit <code>NetworkType</code> is provided, the network type is derived based on the subnet group's configuration.</p> </note>"
         }
       }
     },
@@ -997,14 +1006,13 @@
       "members":{
         "Cluster":{
           "shape":"Cluster",
-          "documentation":"<p>A description of the DAX cluster. with its new replication factor.</p>"
+          "documentation":"<p>A description of the DAX cluster, with its new replication factor.</p>"
         }
       }
     },
     "InsufficientClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There are not enough system resources to create the cluster you requested (or to resize an already-existing cluster). </p>",
       "exception":true
     },
@@ -1012,15 +1020,13 @@
     "IntegerOptional":{"type":"integer"},
     "InvalidARNFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Resource Name (ARN) supplied in the request is not valid.</p>",
       "exception":true
     },
     "InvalidClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested DAX cluster is not in the <i>available</i> state.</p>",
       "exception":true
     },
@@ -1035,8 +1041,7 @@
     },
     "InvalidParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more parameters in a parameter group are in an invalid state.</p>",
       "exception":true
     },
@@ -1051,15 +1056,13 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid subnet identifier was specified.</p>",
       "exception":true
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The VPC network is in an invalid state.</p>",
       "exception":true
     },
@@ -1102,6 +1105,18 @@
         }
       }
     },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6",
+        "dual_stack"
+      ]
+    },
+    "NetworkTypeList":{
+      "type":"list",
+      "member":{"shape":"NetworkType"}
+    },
     "Node":{
       "type":"structure",
       "members":{
@@ -1142,23 +1157,20 @@
     },
     "NodeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>None of the nodes in the cluster have the given node ID.</p>",
       "exception":true
     },
     "NodeQuotaForClusterExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have attempted to exceed the maximum number of nodes for a DAX cluster.</p>",
       "exception":true
     },
     "NodeQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You have attempted to exceed the maximum number of nodes for your AWS account.</p>",
+      "members":{},
+      "documentation":"<p>You have attempted to exceed the maximum number of nodes for your Amazon Web Services account.</p>",
       "exception":true
     },
     "NodeTypeSpecificValue":{
@@ -1184,7 +1196,7 @@
       "members":{
         "TopicArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the topic. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the topic.</p>"
         },
         "TopicStatus":{
           "shape":"String",
@@ -1255,8 +1267,7 @@
     },
     "ParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified parameter group already exists.</p>",
       "exception":true
     },
@@ -1270,15 +1281,13 @@
     },
     "ParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified parameter group does not exist.</p>",
       "exception":true
     },
     "ParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have attempted to exceed the maximum number of parameter groups.</p>",
       "exception":true
     },
@@ -1410,16 +1419,14 @@
     },
     "ServiceLinkedRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified service linked role (SLR) was not found.</p>",
       "exception":true
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You have reached the maximum number of x509 certificates that can be created for encrypted clusters in a 30 day period. Contact AWS customer support to discuss options for continuing to create encrypted clusters.</p>",
+      "members":{},
+      "documentation":"<p>You have reached the maximum number of x509 certificates that can be created for encrypted clusters in a 30 day period. Contact Amazon Web Services customer support to discuss options for continuing to create encrypted clusters.</p>",
       "exception":true
     },
     "SourceType":{
@@ -1441,6 +1448,10 @@
         "SubnetAvailabilityZone":{
           "shape":"String",
           "documentation":"<p>The Availability Zone (AZ) for the subnet.</p>"
+        },
+        "SupportedNetworkTypes":{
+          "shape":"NetworkTypeList",
+          "documentation":"<p>The network types supported by this subnet. Returns an array of strings that can include <code>ipv4</code>, <code>ipv6</code>, or both, indicating whether the subnet supports IPv4 only, IPv6 only, or dual-stack deployments.</p>"
         }
       },
       "documentation":"<p>Represents the subnet associated with a DAX cluster. This parameter refers to subnets defined in Amazon Virtual Private Cloud (Amazon VPC) and used with DAX.</p>"
@@ -1463,21 +1474,23 @@
         "Subnets":{
           "shape":"SubnetList",
           "documentation":"<p>A list of subnets associated with the subnet group. </p>"
+        },
+        "SupportedNetworkTypes":{
+          "shape":"NetworkTypeList",
+          "documentation":"<p>The network types supported by this subnet. Returns an array of strings that can include <code>ipv4</code>, <code>ipv6</code>, or both, indicating whether the subnet group supports IPv4 only, IPv6 only, or dual-stack deployments. </p>"
         }
       },
       "documentation":"<p>Represents the output of one of the following actions:</p> <ul> <li> <p> <i>CreateSubnetGroup</i> </p> </li> <li> <p> <i>ModifySubnetGroup</i> </p> </li> </ul>"
     },
     "SubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified subnet group already exists.</p>",
       "exception":true
     },
     "SubnetGroupInUseFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified subnet group is currently in use.</p>",
       "exception":true
     },
@@ -1491,15 +1504,13 @@
     },
     "SubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet group name does not refer to an existing subnet group.</p>",
       "exception":true
     },
     "SubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of subnets in a subnet group.</p>",
       "exception":true
     },
@@ -1509,8 +1520,7 @@
     },
     "SubnetInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is being used by another subnet group.</p>",
       "exception":true
     },
@@ -1518,10 +1528,15 @@
       "type":"list",
       "member":{"shape":"Subnet"}
     },
+    "SubnetNotAllowedFault":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The specified subnet can't be used for the requested network type. This error occurs when either there aren't enough subnets of the required network type to create the cluster, or when you try to use a subnet that doesn't support the requested network type (for example, trying to create a dual-stack cluster with a subnet that doesn't have IPv6 CIDR). </p>",
+      "exception":true
+    },
     "SubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of subnets in a subnet group.</p>",
       "exception":true
     },
@@ -1535,10 +1550,10 @@
         },
         "Value":{
           "shape":"String",
-          "documentation":"<p>The value of the tag. Tag values are case-sensitive and can be null. </p>"
+          "documentation":"<p>The value of the tag. Tag values are case-sensitive and can be null.</p>"
         }
       },
-      "documentation":"<p>A description of a tag. Every tag is a key-value pair. You can add up to 50 tags to a single DAX cluster.</p> <p>AWS-assigned tag names and values are automatically assigned the <code>aws:</code> prefix, which the user cannot assign. AWS-assigned tag names do not count towards the tag limit of 50. User-assigned tag names have the prefix <code>user:</code>.</p> <p>You cannot backdate the application of a tag.</p>"
+      "documentation":"<p>A description of a tag. Every tag is a key-value pair. You can add up to 50 tags to a single DAX cluster.</p> <p>Amazon Web Services-assigned tag names and values are automatically assigned the <code>aws:</code> prefix, which the user cannot assign. Amazon Web Services-assigned tag names do not count towards the tag limit of 50. User-assigned tag names have the prefix <code>user:</code>.</p> <p>You cannot backdate the application of a tag.</p>"
     },
     "TagList":{
       "type":"list",
@@ -1546,15 +1561,13 @@
     },
     "TagNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag does not exist.</p>",
       "exception":true
     },
     "TagQuotaPerResourceExceeded":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of tags for this DAX cluster.</p>",
       "exception":true
     },
@@ -1707,5 +1720,5 @@
       }
     }
   },
-  "documentation":"<p>DAX is a managed caching service engineered for Amazon DynamoDB. DAX dramatically speeds up database reads by caching frequently-accessed data from DynamoDB, so applications can access that data with sub-millisecond latency. You can create a DAX cluster easily, using the AWS Management Console. With a few simple modifications to your code, your application can begin taking advantage of the DAX cluster and realize significant improvements in read performance.</p>"
+  "documentation":"<p>DAX is a managed caching service engineered for Amazon DynamoDB. DAX dramatically speeds up database reads by caching frequently-accessed data from DynamoDB, so applications can access that data with sub-millisecond latency. You can create a DAX cluster easily, using the Amazon Web Services Management Console. With a few simple modifications to your code, your application can begin taking advantage of the DAX cluster and realize significant improvements in read performance.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/paginators-1.json 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -161,6 +161,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "jobParameterDefinitions"
+    },
+    "ListLimits": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "limits"
+    },
+    "ListQueueLimitAssociations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "queueLimitAssociations"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/service-2.json 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -312,7 +312,7 @@
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a job. A job is a set of instructions that AWS Deadline Cloud uses to schedule and run work on available workers. For more information, see <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/userguide/deadline-cloud-jobs.html\">Deadline Cloud jobs</a>.</p>",
+      "documentation":"<p>Creates a job. A job is a set of instructions that Deadline Cloud uses to schedule and run work on available workers. For more information, see <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/userguide/deadline-cloud-jobs.html\">Deadline Cloud jobs</a>.</p>",
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
@@ -337,6 +337,27 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "CreateLimit":{
+      "name":"CreateLimit",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2023-10-12/farms/{farmId}/limits",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateLimitRequest"},
+      "output":{"shape":"CreateLimitResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a limit that manages the distribution of shared resources, such as floating licenses. A limit can throttle work assignments, help manage workloads, and track current usage. Before you use a limit, you must associate the limit with one or more queues. </p> <p>You must add the <code>amountRequirementName</code> to a step in a job template to declare the limit requirement.</p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "CreateMonitor":{
       "name":"CreateMonitor",
       "http":{
@@ -419,6 +440,26 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "CreateQueueLimitAssociation":{
+      "name":"CreateQueueLimitAssociation",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2023-10-12/farms/{farmId}/queue-limit-associations",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateQueueLimitAssociationRequest"},
+      "output":{"shape":"CreateQueueLimitAssociationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Associates a limit with a particular queue. After the limit is associated, all workers for jobs that specify the limit associated with the queue are subject to the limit. You can't associate two limits with the same <code>amountRequirementName</code> to the same queue.</p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "CreateStorageProfile":{
       "name":"CreateStorageProfile",
       "http":{
@@ -457,7 +498,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates a worker. A worker tells your instance how much processing power (vCPU), and memory (GiB) you’ll need to assemble the digital assets held within a particular instance. You can specify certain instance types to use, or let the worker know which instances types to exclude.</p>",
+      "documentation":"<p>Creates a worker. A worker tells your instance how much processing power (vCPU), and memory (GiB) you’ll need to assemble the digital assets held within a particular instance. You can specify certain instance types to use, or let the worker know which instances types to exclude.</p> <p>Deadline Cloud limits the number of workers to less than or equal to the fleet's maximum worker count. The service maintains eventual consistency for the worker count. If you make multiple rapid calls to <code>CreateWorker</code> before the field updates, you might exceed your fleet's maximum worker count. For example, if your <code>maxWorkerCount</code> is 10 and you currently have 9 workers, making two quick <code>CreateWorker</code> calls might successfully create 2 workers instead of 1, resulting in 11 total workers.</p>",
       "endpoint":{"hostPrefix":"scheduling."},
       "idempotent":true
     },
@@ -543,6 +584,25 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "DeleteLimit":{
+      "name":"DeleteLimit",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2023-10-12/farms/{farmId}/limits/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteLimitRequest"},
+      "output":{"shape":"DeleteLimitResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Removes a limit from the specified farm. Before you delete a limit you must use the <code>DeleteQueueLimitAssociation</code> operation to remove the association with any queues. </p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "DeleteMeteredProduct":{
       "name":"DeleteMeteredProduct",
       "http":{
@@ -644,6 +704,27 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "DeleteQueueLimitAssociation":{
+      "name":"DeleteQueueLimitAssociation",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2023-10-12/farms/{farmId}/queue-limit-associations/{queueId}/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteQueueLimitAssociationRequest"},
+      "output":{"shape":"DeleteQueueLimitAssociationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Removes the association between a queue and a limit. You must use the <code>UpdateQueueLimitAssociation</code> operation to set the status to <code>STOP_LIMIT_USAGE_AND_COMPLETE_TASKS</code> or <code>STOP_LIMIT_USAGE_AND_CANCEL_TASKS</code>. The status does not change immediately. Use the <code>GetQueueLimitAssociation</code> operation to see if the status changed to <code>STOPPED</code> before deleting the association.</p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "DeleteStorageProfile":{
       "name":"DeleteStorageProfile",
       "http":{
@@ -861,6 +942,25 @@
       "documentation":"<p>Gets a licence endpoint.</p>",
       "endpoint":{"hostPrefix":"management."}
     },
+    "GetLimit":{
+      "name":"GetLimit",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2023-10-12/farms/{farmId}/limits/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetLimitRequest"},
+      "output":{"shape":"GetLimitResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Gets information about a specific limit.</p>",
+      "endpoint":{"hostPrefix":"management."}
+    },
     "GetMonitor":{
       "name":"GetMonitor",
       "http":{
@@ -937,6 +1037,25 @@
       "documentation":"<p>Gets a queue-fleet association.</p>",
       "endpoint":{"hostPrefix":"management."}
     },
+    "GetQueueLimitAssociation":{
+      "name":"GetQueueLimitAssociation",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2023-10-12/farms/{farmId}/queue-limit-associations/{queueId}/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetQueueLimitAssociationRequest"},
+      "output":{"shape":"GetQueueLimitAssociationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Gets information about a specific association between a queue and a limit.</p>",
+      "endpoint":{"hostPrefix":"management."}
+    },
     "GetSession":{
       "name":"GetSession",
       "http":{
@@ -1275,6 +1394,25 @@
       "documentation":"<p>Lists license endpoints.</p>",
       "endpoint":{"hostPrefix":"management."}
     },
+    "ListLimits":{
+      "name":"ListLimits",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2023-10-12/farms/{farmId}/limits",
+        "responseCode":200
+      },
+      "input":{"shape":"ListLimitsRequest"},
+      "output":{"shape":"ListLimitsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Gets a list of limits defined in the specified farm.</p>",
+      "endpoint":{"hostPrefix":"management."}
+    },
     "ListMeteredProducts":{
       "name":"ListMeteredProducts",
       "http":{
@@ -1349,6 +1487,24 @@
       "documentation":"<p>Lists queue-fleet associations.</p>",
       "endpoint":{"hostPrefix":"management."}
     },
+    "ListQueueLimitAssociations":{
+      "name":"ListQueueLimitAssociations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2023-10-12/farms/{farmId}/queue-limit-associations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListQueueLimitAssociationsRequest"},
+      "output":{"shape":"ListQueueLimitAssociationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Gets a list of the associations between queues and limits defined in a farm.</p>",
+      "endpoint":{"hostPrefix":"management."}
+    },
     "ListQueueMembers":{
       "name":"ListQueueMembers",
       "http":{
@@ -1834,6 +1990,26 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "UpdateLimit":{
+      "name":"UpdateLimit",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/2023-10-12/farms/{farmId}/limits/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateLimitRequest"},
+      "output":{"shape":"UpdateLimitResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates the properties of the specified limit. </p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "UpdateMonitor":{
       "name":"UpdateMonitor",
       "http":{
@@ -1913,6 +2089,26 @@
       "endpoint":{"hostPrefix":"management."},
       "idempotent":true
     },
+    "UpdateQueueLimitAssociation":{
+      "name":"UpdateQueueLimitAssociation",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/2023-10-12/farms/{farmId}/queue-limit-associations/{queueId}/{limitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateQueueLimitAssociationRequest"},
+      "output":{"shape":"UpdateQueueLimitAssociationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates the status of the queue. If you set the status to one of the <code>STOP_LIMIT_USAGE*</code> values, there will be a delay before the status transitions to the <code>STOPPED</code> state. </p>",
+      "endpoint":{"hostPrefix":"management."},
+      "idempotent":true
+    },
     "UpdateSession":{
       "name":"UpdateSession",
       "http":{
@@ -2046,14 +2242,14 @@
       "members":{
         "selections":{
           "shape":"AcceleratorSelections",
-          "documentation":"<p>A list of objects that contain the GPU name of the accelerator and driver for the instance types that support the accelerator.</p>"
+          "documentation":"<p>A list of accelerator capabilities requested for this fleet. Only Amazon Elastic Compute Cloud instances that provide these capabilities will be used. For example, if you specify both L4 and T4 chips, Deadline Cloud will use Amazon EC2 instances that have either the L4 or the T4 chip installed.</p>"
         },
         "count":{
           "shape":"AcceleratorCountRange",
-          "documentation":"<p>The number of GPUs on each worker. The default is 1.</p>"
+          "documentation":"<p>The number of GPU accelerators specified for worker hosts in this fleet. </p>"
         }
       },
-      "documentation":"<p>Provides information about the GPU accelerators and drivers for the instance types in a fleet. If you include the <code>acceleratorCapabilities</code> property in the <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_ServiceManagedEc2InstanceCapabilities\">ServiceManagedEc2InstanceCapabilities</a> object, all of the Amazon EC2 instances will have at least one accelerator. </p>"
+      "documentation":"<p>Provides information about the GPU accelerators used for jobs processed by a fleet.</p>"
     },
     "AcceleratorCountRange":{
       "type":"structure",
@@ -2061,14 +2257,14 @@
       "members":{
         "min":{
           "shape":"MinZeroMaxInteger",
-          "documentation":"<p>The minimum number of GPUs for the accelerator. If you set the value to 0, a worker will still have 1 GPU.</p>"
+          "documentation":"<p>The minimum number of GPU accelerators in the worker host.</p>"
         },
         "max":{
           "shape":"MinZeroMaxInteger",
-          "documentation":"<p>The maximum number of GPUs for the accelerator.</p>"
+          "documentation":"<p>The maximum number of GPU accelerators in the worker host.</p>"
         }
       },
-      "documentation":"<p>The range for the GPU fleet acceleration.</p>"
+      "documentation":"<p>Defines the maximum and minimum number of GPU accelerators required for a worker instance..</p>"
     },
     "AcceleratorName":{
       "type":"string",
@@ -2090,14 +2286,14 @@
       "members":{
         "name":{
           "shape":"AcceleratorName",
-          "documentation":"<p>The name of the GPU accelerator.</p>"
+          "documentation":"<p>The name of the chip used by the GPU accelerator.</p> <p>If you specify <code>l4</code> as the name of the accelerator, you must specify <code>latest</code> or <code>grid:r570</code> as the runtime.</p> <p>The available GPU accelerators are:</p> <ul> <li> <p> <code>t4</code> - NVIDIA T4 Tensor Core GPU</p> </li> <li> <p> <code>a10g</code> - NVIDIA A10G Tensor Core GPU</p> </li> <li> <p> <code>l4</code> - NVIDIA L4 Tensor Core GPU</p> </li> <li> <p> <code>l40s</code> - NVIDIA L40S Tensor Core GPU</p> </li> </ul>"
         },
         "runtime":{
           "shape":"AcceleratorRuntime",
-          "documentation":"<p>The driver version that the GPU accelerator uses. </p>"
+          "documentation":"<p>Specifies the runtime driver to use for the GPU accelerator. You must use the same runtime for all GPUs. </p> <p>You can choose from the following runtimes:</p> <ul> <li> <p> <code>latest</code> - Use the latest runtime available for the chip. If you specify <code>latest</code> and a new version of the runtime is released, the new version of the runtime is used.</p> </li> <li> <p> <code>grid:r570</code> - <a href=\"https://docs.nvidia.com/vgpu/18.0/index.html\">NVIDIA vGPU software 18</a> </p> </li> <li> <p> <code>grid:r535</code> - <a href=\"https://docs.nvidia.com/vgpu/16.0/index.html\">NVIDIA vGPU software 16</a> </p> </li> </ul> <p>If you don't specify a runtime, Deadline Cloud uses <code>latest</code> as the default. However, if you have multiple accelerators and specify <code>latest</code> for some and leave others blank, Deadline Cloud raises an exception.</p>"
         }
       },
-      "documentation":"<p>Values that you can use to select a particular Amazon EC2 instance type. </p>"
+      "documentation":"<p>Describes a specific GPU accelerator required for an Amazon Elastic Compute Cloud worker host.</p>"
     },
     "AcceleratorSelections":{
       "type":"list",
@@ -2116,7 +2312,7 @@
           "documentation":"<p>The maximum amount of memory to use for the accelerator, measured in MiB.</p>"
         }
       },
-      "documentation":"<p>The range for memory, in MiB, to use for the accelerator.</p>"
+      "documentation":"<p>Defines the maximum and minimum amount of memory, in MiB, to use for the accelerator.</p>"
     },
     "AcceleratorType":{
       "type":"string",
@@ -2147,6 +2343,28 @@
       "type":"string",
       "sensitive":true
     },
+    "AcquiredLimit":{
+      "type":"structure",
+      "required":[
+        "limitId",
+        "count"
+      ],
+      "members":{
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit.</p>"
+        },
+        "count":{
+          "shape":"MinOneMaxInteger",
+          "documentation":"<p>The number of limit resources used.</p>"
+        }
+      },
+      "documentation":"<p>Provides information about the number of resources used.</p>"
+    },
+    "AcquiredLimits":{
+      "type":"list",
+      "member":{"shape":"AcquiredLimit"}
+    },
     "AggregationId":{
       "type":"string",
       "pattern":"[0-9a-f]{32}"
@@ -2163,6 +2381,11 @@
       "min":1,
       "pattern":"([a-zA-Z][a-zA-Z0-9]{0,63}:)?amount(\\.[a-zA-Z][a-zA-Z0-9]{0,63})+"
     },
+    "AmountRequirementName":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
     "AssignedEnvironmentEnterSessionActionDefinition":{
       "type":"structure",
       "required":["environmentId"],
@@ -2276,7 +2499,6 @@
     "AssignedTaskRunSessionActionDefinition":{
       "type":"structure",
       "required":[
-        "taskId",
         "stepId",
         "parameters"
       ],
@@ -3243,7 +3465,7 @@
         },
         "maxWorkerCount":{
           "shape":"MinZeroMaxInteger",
-          "documentation":"<p>The maximum number of workers for the fleet.</p>"
+          "documentation":"<p>The maximum number of workers for the fleet.</p> <p>Deadline Cloud limits the number of workers to less than or equal to the fleet's maximum worker count. The service maintains eventual consistency for the worker count. If you make multiple rapid calls to <code>CreateWorker</code> before the field updates, you might exceed your fleet's maximum worker count. For example, if your <code>maxWorkerCount</code> is 10 and you currently have 9 workers, making two quick <code>CreateWorker</code> calls might successfully create 2 workers instead of 1, resulting in 11 total workers.</p>"
         },
         "configuration":{
           "shape":"FleetConfiguration",
@@ -3252,6 +3474,10 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>Each tag consists of a tag key and a tag value. Tag keys and values are both required, but tag values can be empty strings.</p>"
+        },
+        "hostConfiguration":{
+          "shape":"HostConfiguration",
+          "documentation":"<p>Provides a script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet.</p>"
         }
       }
     },
@@ -3302,7 +3528,7 @@
         },
         "priority":{
           "shape":"JobPriority",
-          "documentation":"<p>The priority of the job on a scale of 0 to 100. The highest priority (first scheduled) is 100. When two jobs have the same priority, the oldest job is scheduled first.</p>"
+          "documentation":"<p>The priority of the job. The highest priority (first scheduled) is 100. When two jobs have the same priority, the oldest job is scheduled first.</p>"
         },
         "parameters":{
           "shape":"JobParameters",
@@ -3328,6 +3554,10 @@
           "shape":"MaxRetriesPerTask",
           "documentation":"<p>The maximum number of retries for each task.</p>"
         },
+        "maxWorkerCount":{
+          "shape":"MaxWorkerCount",
+          "documentation":"<p>The maximum number of worker hosts that can concurrently process a job. When the <code>maxWorkerCount</code> is reached, no more workers will be assigned to process the job, even if the fleets assigned to the job's queue has available workers.</p> <p>You can't set the <code>maxWorkerCount</code> to 0. If you set it to -1, there is no maximum number of workers.</p> <p>If you don't specify the <code>maxWorkerCount</code>, Deadline Cloud won't throttle the number of workers used to process the job.</p>"
+        },
         "sourceJobId":{
           "shape":"JobId",
           "documentation":"<p>The job ID for the source job.</p>"
@@ -3406,6 +3636,56 @@
         }
       }
     },
+    "CreateLimitRequest":{
+      "type":"structure",
+      "required":[
+        "displayName",
+        "amountRequirementName",
+        "maxCount",
+        "farmId"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>The unique token which the server uses to recognize retries of the same request.</p>",
+          "idempotencyToken":true,
+          "location":"header",
+          "locationName":"X-Amz-Client-Token"
+        },
+        "displayName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The display name of the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
+        },
+        "amountRequirementName":{
+          "shape":"AmountRequirementName",
+          "documentation":"<p>The value that you specify as the <code>name</code> in the <code>amounts</code> field of the <code>hostRequirements</code> in a step of a job template to declare the limit requirement.</p>"
+        },
+        "maxCount":{
+          "shape":"MaxCount",
+          "documentation":"<p>The maximum number of resources constrained by this limit. When all of the resources are in use, steps that require the limit won't be scheduled until the resource is available.</p> <p>The <code>maxCount</code> must not be 0. If the value is -1, there is no restriction on the number of resources that can be acquired for this limit.</p>"
+        },
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The farm ID of the farm that contains the limit.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the limit. A description helps you identify the purpose of the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
+        }
+      }
+    },
+    "CreateLimitResponse":{
+      "type":"structure",
+      "required":["limitId"],
+      "members":{
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>A unique identifier for the limit. Use this identifier in other operations, such as <code>CreateQueueLimitAssociation</code> and <code>DeleteLimit</code>.</p>"
+        }
+      }
+    },
     "CreateMonitorRequest":{
       "type":"structure",
       "required":[
@@ -3437,6 +3717,10 @@
         "roleArn":{
           "shape":"IamRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that the monitor uses to connect to Deadline Cloud. Every user that signs in to the monitor using IAM Identity Center uses this role to access Deadline Cloud resources.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags to add to your monitor. Each tag consists of a tag key and a tag value. Tag keys and values are both required, but tag values can be empty strings.</p>"
         }
       }
     },
@@ -3488,7 +3772,7 @@
         },
         "priority":{
           "shape":"Priority",
-          "documentation":"<p>Sets the priority of the environments in the queue from 0 to 10,000, where 0 is the highest priority. If two environments share the same priority value, the environment created first takes higher priority.</p>"
+          "documentation":"<p>Sets the priority of the environments in the queue from 0 to 10,000, where 0 is the highest priority (activated first and deactivated last). If two environments share the same priority value, the environment created first takes higher priority.</p>"
         },
         "templateType":{
           "shape":"EnvironmentTemplateType",
@@ -3539,6 +3823,35 @@
       "members":{
       }
     },
+    "CreateQueueLimitAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "queueId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the queue and limit to associate.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue to associate with the limit.</p>"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit to associate with the queue.</p>"
+        }
+      }
+    },
+    "CreateQueueLimitAssociationResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "CreateQueueRequest":{
       "type":"structure",
       "required":[
@@ -3681,6 +3994,10 @@
           "idempotencyToken":true,
           "location":"header",
           "locationName":"X-Amz-Client-Token"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>Each tag consists of a tag key and a tag value. Tag keys and values are both required, but tag values can be empty strings.</p>"
         }
       }
     },
@@ -3729,6 +4046,10 @@
         "storageProfileId":{
           "shape":"StorageProfileId",
           "documentation":"<p>The storage profile ID.</p>"
+        },
+        "tagPropagationMode":{
+          "shape":"TagPropagationMode",
+          "documentation":"<p>Specifies whether tags associated with a fleet are attached to workers when the worker is launched. </p> <p>When the <code>tagPropagationMode</code> is set to <code>PROPAGATE_TAGS_TO_WORKERS_AT_LAUNCH</code> any tag associated with a fleet is attached to workers when they launch. If the tags for a fleet change, the tags associated with running workers <b>do not</b> change.</p> <p>If you don't specify <code>tagPropagationMode</code>, the default is <code>NO_PROPAGATION</code>.</p>"
         }
       },
       "documentation":"<p>The details of a customer managed fleet configuration.</p>"
@@ -3913,6 +4234,32 @@
       "members":{
       }
     },
+    "DeleteLimitRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limit to delete.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit to delete.</p>",
+          "location":"uri",
+          "locationName":"limitId"
+        }
+      }
+    },
+    "DeleteLimitResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DeleteMeteredProductRequest":{
       "type":"structure",
       "required":[
@@ -4022,6 +4369,39 @@
       "members":{
       }
     },
+    "DeleteQueueLimitAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "queueId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the queue and limit to disassociate.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue to disassociate.</p>",
+          "location":"uri",
+          "locationName":"queueId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit to disassociate.</p>",
+          "location":"uri",
+          "locationName":"limitId"
+        }
+      }
+    },
+    "DeleteQueueLimitAssociationResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DeleteQueueRequest":{
       "type":"structure",
       "required":[
@@ -4288,10 +4668,7 @@
       "members":{
       }
     },
-    "DnsName":{
-      "type":"string",
-      "pattern":"vpce-[\\w]+-[\\w]+.vpce-svc-[\\w]+.*.vpce.amazonaws.com"
-    },
+    "DnsName":{"type":"string"},
     "Document":{
       "type":"structure",
       "members":{
@@ -4337,7 +4714,8 @@
       "type":"string",
       "enum":[
         "on-demand",
-        "spot"
+        "spot",
+        "wait-and-save"
       ]
     },
     "EndedAt":{
@@ -4622,8 +5000,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"[0-9A-Za-z ]*",
-      "sensitive":true
+      "pattern":"[0-9A-Za-z ]*"
     },
     "FileSystemLocationType":{
       "type":"string",
@@ -4790,7 +5167,8 @@
         "CREATE_IN_PROGRESS",
         "UPDATE_IN_PROGRESS",
         "CREATE_FAILED",
-        "UPDATE_FAILED"
+        "UPDATE_FAILED",
+        "SUSPENDED"
       ]
     },
     "FleetSummaries":{
@@ -4828,6 +5206,10 @@
           "shape":"FleetStatus",
           "documentation":"<p>The status of the fleet.</p>"
         },
+        "statusMessage":{
+          "shape":"String",
+          "documentation":"<p>A message that communicates a suspended status of the fleet.</p>"
+        },
         "autoScalingStatus":{
           "shape":"AutoScalingStatus",
           "documentation":"<p>The Auto Scaling status of a fleet.</p>"
@@ -5086,7 +5468,11 @@
         },
         "status":{
           "shape":"FleetStatus",
-          "documentation":"<p>The Auto Scaling status of the fleet.</p>"
+          "documentation":"<p>The status of the fleet.</p>"
+        },
+        "statusMessage":{
+          "shape":"String",
+          "documentation":"<p>A message that communicates a suspended status of the fleet.</p>"
         },
         "autoScalingStatus":{
           "shape":"AutoScalingStatus",
@@ -5112,6 +5498,10 @@
           "shape":"FleetConfiguration",
           "documentation":"<p>The configuration setting for the fleet.</p>"
         },
+        "hostConfiguration":{
+          "shape":"HostConfiguration",
+          "documentation":"<p>The script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet.</p>"
+        },
         "capabilities":{
           "shape":"FleetCapabilities",
           "documentation":"<p>Outlines what the fleet is capable of for minimums, maximums, and naming, in addition to attribute names and values.</p>"
@@ -5165,8 +5555,8 @@
       "type":"structure",
       "required":[
         "farmId",
-        "jobId",
-        "queueId"
+        "queueId",
+        "jobId"
       ],
       "members":{
         "farmId":{
@@ -5175,17 +5565,17 @@
           "location":"uri",
           "locationName":"farmId"
         },
-        "jobId":{
-          "shape":"JobId",
-          "documentation":"<p>The job ID.</p>",
-          "location":"uri",
-          "locationName":"jobId"
-        },
         "queueId":{
           "shape":"QueueId",
           "documentation":"<p>The queue ID associated with the job.</p>",
           "location":"uri",
           "locationName":"queueId"
+        },
+        "jobId":{
+          "shape":"JobId",
+          "documentation":"<p>The job ID.</p>",
+          "location":"uri",
+          "locationName":"jobId"
         }
       }
     },
@@ -5257,6 +5647,10 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the job failed and were retried.</p>"
+        },
         "storageProfileId":{
           "shape":"StorageProfileId",
           "documentation":"<p>The storage profile ID associated with the job.</p>"
@@ -5281,6 +5675,10 @@
           "shape":"JobDescription",
           "documentation":"<p>The description of the job.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
         },
+        "maxWorkerCount":{
+          "shape":"MaxWorkerCount",
+          "documentation":"<p>The maximum number of worker hosts that can concurrently process a job. When the <code>maxWorkerCount</code> is reached, no more workers will be assigned to process the job, even if the fleets assigned to the job's queue has available workers.</p> <p>If you don't set the <code>maxWorkerCount</code> when you create a job, this value is not returned in the response.</p>"
+        },
         "sourceJobId":{
           "shape":"JobId",
           "documentation":"<p>The job ID for the source job.</p>"
@@ -5349,6 +5747,86 @@
       "max":10,
       "min":1
     },
+    "GetLimitRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limit.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit to return.</p>",
+          "location":"uri",
+          "locationName":"limitId"
+        }
+      }
+    },
+    "GetLimitResponse":{
+      "type":"structure",
+      "required":[
+        "displayName",
+        "amountRequirementName",
+        "maxCount",
+        "createdAt",
+        "createdBy",
+        "farmId",
+        "limitId",
+        "currentCount"
+      ],
+      "members":{
+        "displayName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The display name of the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
+        },
+        "amountRequirementName":{
+          "shape":"AmountRequirementName",
+          "documentation":"<p>The value that you specify as the <code>name</code> in the <code>amounts</code> field of the <code>hostRequirements</code> in a step of a job template to declare the limit requirement.</p>"
+        },
+        "maxCount":{
+          "shape":"MaxCount",
+          "documentation":"<p>The maximum number of resources constrained by this limit. When all of the resources are in use, steps that require the limit won't be scheduled until the resource is available.</p> <p>The <code>maxValue</code> must not be 0. If the value is -1, there is no restriction on the number of resources that can be acquired for this limit.</p>"
+        },
+        "createdAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the limit was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user identifier of the person that created the limit.</p>"
+        },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the limit was last updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user identifier of the person that last updated the limit.</p>"
+        },
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limit.</p>"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit.</p>"
+        },
+        "currentCount":{
+          "shape":"MinZeroMaxInteger",
+          "documentation":"<p>The number of resources from the limit that are being used by jobs. The result is delayed and may not be the count at the time that you called the operation.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the limit that helps identify what the limit is used for.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
+        }
+      }
+    },
     "GetMonitorRequest":{
       "type":"structure",
       "required":["monitorId"],
@@ -5567,6 +6045,74 @@
         }
       }
     },
+    "GetQueueLimitAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "queueId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the associated queue and limit.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue associated with the limit.</p>",
+          "location":"uri",
+          "locationName":"queueId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit associated with the queue.</p>",
+          "location":"uri",
+          "locationName":"limitId"
+        }
+      }
+    },
+    "GetQueueLimitAssociationResponse":{
+      "type":"structure",
+      "required":[
+        "createdAt",
+        "createdBy",
+        "queueId",
+        "limitId",
+        "status"
+      ],
+      "members":{
+        "createdAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the association was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user identifier of the person that created the association.</p>"
+        },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the association was last updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user identifier of the person that last updated the association.</p>"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue associated with the limit.</p>"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit associated with the queue.</p>"
+        },
+        "status":{
+          "shape":"QueueLimitAssociationStatus",
+          "documentation":"<p>The current status of the limit.</p>"
+        }
+      }
+    },
     "GetQueueRequest":{
       "type":"structure",
       "required":[
@@ -5740,7 +6286,7 @@
         },
         "processExitCode":{
           "shape":"ProcessExitCode",
-          "documentation":"<p>The exit code to exit the session.</p>"
+          "documentation":"<p>The process exit code. The default Deadline Cloud worker agent converts unsigned 32-bit exit codes to signed 32-bit exit codes.</p>"
         },
         "progressMessage":{
           "shape":"SessionActionProgressMessage",
@@ -5749,6 +6295,14 @@
         "definition":{
           "shape":"SessionActionDefinition",
           "documentation":"<p>The session action definition.</p>"
+        },
+        "acquiredLimits":{
+          "shape":"AcquiredLimits",
+          "documentation":"<p>The limits and their amounts acquired during a session action. If no limits were acquired during the session, this field isn't returned.</p>"
+        },
+        "manifests":{
+          "shape":"TaskRunManifestPropertiesListResponse",
+          "documentation":"<p>The list of manifest properties that describe file attachments for the task run.</p>"
         }
       }
     },
@@ -5974,6 +6528,10 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the step failed and were retried.</p>"
+        },
         "targetTaskRunStatus":{
           "shape":"StepTargetTaskRunStatus",
           "documentation":"<p>The task status with which the job started.</p>"
@@ -6271,18 +6829,14 @@
     "GetWorkerResponse":{
       "type":"structure",
       "required":[
-        "workerId",
         "farmId",
         "fleetId",
+        "workerId",
         "status",
         "createdAt",
         "createdBy"
       ],
       "members":{
-        "workerId":{
-          "shape":"WorkerId",
-          "documentation":"<p>The worker ID.</p>"
-        },
         "farmId":{
           "shape":"FarmId",
           "documentation":"<p>The farm ID.</p>"
@@ -6291,6 +6845,10 @@
           "shape":"FleetId",
           "documentation":"<p>The fleet ID.</p>"
         },
+        "workerId":{
+          "shape":"WorkerId",
+          "documentation":"<p>The worker ID.</p>"
+        },
         "hostProperties":{
           "shape":"HostPropertiesResponse",
           "documentation":"<p>The host properties for the worker.</p>"
@@ -6321,6 +6879,33 @@
         }
       }
     },
+    "HostConfiguration":{
+      "type":"structure",
+      "required":["scriptBody"],
+      "members":{
+        "scriptBody":{
+          "shape":"HostConfigurationScript",
+          "documentation":"<p>The text of the script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet. The script runs after a worker enters the <code>STARTING</code> state and before the worker processes tasks.</p> <p>For more information about using the script, see <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/developerguide/smf-admin.html\">Run scripts as an administrator to configure workers</a> in the <i>Deadline Cloud Developer Guide</i>. </p> <important> <p>The script runs as an administrative user (<code>sudo root</code> on Linux, as an Administrator on Windows). </p> </important>"
+        },
+        "scriptTimeoutSeconds":{
+          "shape":"HostConfigurationScriptTimeoutSeconds",
+          "documentation":"<p>The maximum time that the host configuration can run. If the timeout expires, the worker enters the <code>NOT RESPONDING</code> state and shuts down. You are charged for the time that the worker is running the host configuration script.</p> <note> <p>You should configure your fleet for a maximum of one worker while testing your host configuration script to avoid starting additional workers.</p> </note> <p>The default is 300 seconds (5 minutes).</p>"
+        }
+      },
+      "documentation":"<p>Provides a script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet. </p> <p>To remove a script from a fleet, use the <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_UpdateFleet.html\">UpdateFleet</a> operation with the <code>hostConfiguration</code> <code>scriptBody</code> parameter set to an empty string (\"\").</p>"
+    },
+    "HostConfigurationScript":{
+      "type":"string",
+      "max":15000,
+      "min":0,
+      "sensitive":true
+    },
+    "HostConfigurationScriptTimeoutSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":3600,
+      "min":300
+    },
     "HostName":{
       "type":"string",
       "pattern":"[a-zA-Z0-9_\\.\\-]{0,255}"
@@ -6778,10 +7363,15 @@
     },
     "JobParameters":{
       "type":"map",
-      "key":{"shape":"String"},
+      "key":{"shape":"JobParametersKeyString"},
       "value":{"shape":"JobParameter"},
       "sensitive":true
     },
+    "JobParametersKeyString":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "JobPriority":{
       "type":"integer",
       "box":true,
@@ -6846,6 +7436,10 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the job failed and were retried.</p>"
+        },
         "priority":{
           "shape":"JobPriority",
           "documentation":"<p>The job priority.</p>"
@@ -6874,10 +7468,22 @@
           "shape":"StartedAt",
           "documentation":"<p>The date and time the resource started running.</p>"
         },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The date and time the resource was updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user or system that updated this resource.</p>"
+        },
         "jobParameters":{
           "shape":"JobParameters",
           "documentation":"<p>The job parameters.</p>"
         },
+        "maxWorkerCount":{
+          "shape":"MaxWorkerCount",
+          "documentation":"<p>The maximum number of worker hosts that can concurrently process a job. When the <code>maxWorkerCount</code> is reached, no more workers will be assigned to process the job, even if the fleets assigned to the job's queue has available workers.</p> <p>You can't set the <code>maxWorkerCount</code> to 0. If you set it to -1, there is no maximum number of workers.</p> <p>If you don't specify the <code>maxWorkerCount</code>, the default is -1.</p>"
+        },
         "sourceJobId":{
           "shape":"JobId",
           "documentation":"<p>The job ID for the source job.</p>"
@@ -6957,6 +7563,10 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the job failed and were retried.</p>"
+        },
         "maxFailedTasksCount":{
           "shape":"MaxFailedTasksCount",
           "documentation":"<p>The number of task failures before the job stops running and is marked as <code>FAILED</code>.</p>"
@@ -6965,6 +7575,10 @@
           "shape":"MaxRetriesPerTask",
           "documentation":"<p>The maximum number of retries for a job.</p>"
         },
+        "maxWorkerCount":{
+          "shape":"MaxWorkerCount",
+          "documentation":"<p>The maximum number of worker hosts that can concurrently process a job. When the <code>maxWorkerCount</code> is reached, no more workers will be assigned to process the job, even if the fleets assigned to the job's queue has available workers.</p> <p>You can't set the <code>maxWorkerCount</code> to 0. If you set it to -1, there is no maximum number of workers.</p> <p>If you don't specify the <code>maxWorkerCount</code>, the default is -1.</p>"
+        },
         "sourceJobId":{
           "shape":"JobId",
           "documentation":"<p>The job ID for the source job.</p>"
@@ -6985,7 +7599,7 @@
     },
     "JobTemplate":{
       "type":"string",
-      "max":300000,
+      "max":1000000,
       "min":1,
       "sensitive":true
     },
@@ -7040,6 +7654,70 @@
       "documentation":"<p>The details for a license endpoint.</p>"
     },
     "LicenseProduct":{"type":"string"},
+    "LimitId":{
+      "type":"string",
+      "pattern":"limit-[0-9a-f]{32}"
+    },
+    "LimitSummaries":{
+      "type":"list",
+      "member":{"shape":"LimitSummary"}
+    },
+    "LimitSummary":{
+      "type":"structure",
+      "required":[
+        "displayName",
+        "amountRequirementName",
+        "maxCount",
+        "createdAt",
+        "createdBy",
+        "farmId",
+        "limitId",
+        "currentCount"
+      ],
+      "members":{
+        "displayName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the limit used in lists to identify the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
+        },
+        "amountRequirementName":{
+          "shape":"AmountRequirementName",
+          "documentation":"<p>The value that you specify as the <code>name</code> in the <code>amounts</code> field of the <code>hostRequirements</code> in a step of a job template to declare the limit requirement.</p>"
+        },
+        "maxCount":{
+          "shape":"MaxCount",
+          "documentation":"<p>The maximum number of resources constrained by this limit. When all of the resources are in use, steps that require the limit won't be scheduled until the resource is available.</p> <p>The <code>maxValue</code> must not be 0. If the value is -1, there is no restriction on the number of resources that can be acquired for this limit.</p>"
+        },
+        "createdAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the limit was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user identifier of the person that created the limit.</p>"
+        },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the limit was last updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user identifier of the person that last updated the limit.</p>"
+        },
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limit.</p>"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit.</p>"
+        },
+        "currentCount":{
+          "shape":"MinZeroMaxInteger",
+          "documentation":"<p>The number of resources from the limit that are being used by jobs. The result is delayed and may not be the count at the time that you called the operation.</p>"
+        }
+      },
+      "documentation":"<p>Provides information about a specific limit.</p>"
+    },
     "ListAttributeCapabilityValue":{
       "type":"list",
       "member":{"shape":"AttributeCapabilityValue"}
@@ -7489,6 +8167,44 @@
         }
       }
     },
+    "ListLimitsRequest":{
+      "type":"structure",
+      "required":["farmId"],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limits.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of results, or <code>null</code> to start from the beginning.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of limits to return in each page of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListLimitsResponse":{
+      "type":"structure",
+      "required":["limits"],
+      "members":{
+        "limits":{
+          "shape":"LimitSummaries",
+          "documentation":"<p>A list of limits that the farm contains.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If Deadline Cloud returns <code>nextToken</code>, then there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. To retrieve the next page, call the operation again using the returned token. Keep all other arguments unchanged. If no results remain, then <code>nextToken</code> is set to <code>null</code>. Each pagination token expires after 24 hours. If you provide a token that isn't valid, then you receive an HTTP 400 <code>ValidationException</code> error.</p>"
+        }
+      }
+    },
     "ListMeteredProductsRequest":{
       "type":"structure",
       "required":["licenseEndpointId"],
@@ -7655,6 +8371,56 @@
         }
       }
     },
+    "ListQueueLimitAssociationsRequest":{
+      "type":"structure",
+      "required":["farmId"],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limits and associations.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>Specifies that the operation should return only the queue limit associations for the specified queue. If you specify both the <code>queueId</code> and the <code>limitId</code>, only the specified limit is returned if it exists.</p>",
+          "location":"querystring",
+          "locationName":"queueId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>Specifies that the operation should return only the queue limit associations for the specified limit. If you specify both the <code>queueId</code> and the <code>limitId</code>, only the specified limit is returned if it exists.</p>",
+          "location":"querystring",
+          "locationName":"limitId"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of results, or <code>null</code> to start from the beginning.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of associations to return in each page of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListQueueLimitAssociationsResponse":{
+      "type":"structure",
+      "required":["queueLimitAssociations"],
+      "members":{
+        "queueLimitAssociations":{
+          "shape":"QueueLimitAssociationSummaries",
+          "documentation":"<p>A list of associations between limits and queues in the farm specified in the request.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If Deadline Cloud returns <code>nextToken</code>, then there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. To retrieve the next page, call the operation again using the returned token. Keep all other arguments unchanged. If no results remain, then <code>nextToken</code> is set to <code>null</code>. Each pagination token expires after 24 hours. If you provide a token that isn't valid, then you receive an HTTP 400 <code>ValidationException</code> error.</p>"
+        }
+      }
+    },
     "ListQueueMembersRequest":{
       "type":"structure",
       "required":[
@@ -8411,7 +9177,7 @@
         },
         "inputManifestHash":{
           "shape":"ManifestPropertiesInputManifestHashString",
-          "documentation":"<p>The has value of the file.</p>"
+          "documentation":"<p>The hash value of the file.</p>"
         }
       },
       "documentation":"<p>The details of the manifest that links a job's source information.</p>",
@@ -8438,6 +9204,12 @@
       "max":1024,
       "min":1
     },
+    "MaxCount":{
+      "type":"integer",
+      "box":true,
+      "max":2147483647,
+      "min":-1
+    },
     "MaxFailedTasksCount":{
       "type":"integer",
       "box":true,
@@ -8456,6 +9228,12 @@
       "max":2147483647,
       "min":0
     },
+    "MaxWorkerCount":{
+      "type":"integer",
+      "box":true,
+      "max":2147483647,
+      "min":-1
+    },
     "MembershipLevel":{
       "type":"string",
       "enum":[
@@ -8522,6 +9300,12 @@
       "type":"list",
       "member":{"shape":"MeteredProductSummary"}
     },
+    "MinOneMaxInteger":{
+      "type":"integer",
+      "box":true,
+      "max":2147483647,
+      "min":1
+    },
     "MinOneMaxTenThousand":{
       "type":"integer",
       "box":true,
@@ -8912,6 +9696,60 @@
       "type":"string",
       "pattern":"queue-[0-9a-f]{32}"
     },
+    "QueueLimitAssociationStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "STOP_LIMIT_USAGE_AND_COMPLETE_TASKS",
+        "STOP_LIMIT_USAGE_AND_CANCEL_TASKS",
+        "STOPPED"
+      ]
+    },
+    "QueueLimitAssociationSummaries":{
+      "type":"list",
+      "member":{"shape":"QueueLimitAssociationSummary"}
+    },
+    "QueueLimitAssociationSummary":{
+      "type":"structure",
+      "required":[
+        "createdAt",
+        "createdBy",
+        "queueId",
+        "limitId",
+        "status"
+      ],
+      "members":{
+        "createdAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the association was created.</p>"
+        },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user identifier of the person that created the association.</p>"
+        },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The Unix timestamp of the date and time that the association was last updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user identifier of the person that updated the association.</p>"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue in the association.</p>"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit in the association.</p>"
+        },
+        "status":{
+          "shape":"QueueLimitAssociationStatus",
+          "documentation":"<p>The status of task scheduling in the queue-limit association.</p> <ul> <li> <p> <code>ACTIVE</code> - Association is active.</p> </li> <li> <p> <code>STOP_LIMIT_USAGE_AND_COMPLETE_TASKS</code> - Association has stopped scheduling new tasks and is completing current tasks.</p> </li> <li> <p> <code>STOP_LIMIT_USAGE_AND_CANCEL_TASKS</code> - Association has stopped scheduling new tasks and is canceling current tasks.</p> </li> <li> <p> <code>STOPPED</code> - Association has been stopped.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Provides information about the association between a queue and a limit.</p>"
+    },
     "QueueMember":{
       "type":"structure",
       "required":[
@@ -9451,10 +10289,21 @@
         "searchTerm":{
           "shape":"SearchTerm",
           "documentation":"<p>The term to search for.</p>"
+        },
+        "matchType":{
+          "shape":"SearchTermMatchingType",
+          "documentation":"<p>Specifies how Deadline Cloud matches your search term in the results. If you don't specify a <code>matchType</code> the default is <code>FUZZY_MATCH</code>.</p> <ul> <li> <p> <code>FUZZY_MATCH</code> - Matches if a portion of the search term is found in the result.</p> </li> <li> <p> <code>CONTAINS</code> - Matches if the exact search term is contained in the result.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Searches for a particular search term.</p>"
     },
+    "SearchTermMatchingType":{
+      "type":"string",
+      "enum":[
+        "FUZZY_MATCH",
+        "CONTAINS"
+      ]
+    },
     "SearchWorkersRequest":{
       "type":"structure",
       "required":[
@@ -9552,6 +10401,14 @@
         "instanceMarketOptions":{
           "shape":"ServiceManagedEc2InstanceMarketOptions",
           "documentation":"<p>The Amazon EC2 market type.</p>"
+        },
+        "vpcConfiguration":{
+          "shape":"VpcConfiguration",
+          "documentation":"<p>The VPC configuration details for a service managed Amazon EC2 fleet.</p>"
+        },
+        "storageProfileId":{
+          "shape":"StorageProfileId",
+          "documentation":"<p>The storage profile ID.</p>"
         }
       },
       "documentation":"<p>The configuration details for a service managed Amazon EC2 fleet.</p>"
@@ -9587,7 +10444,7 @@
         },
         "acceleratorCapabilities":{
           "shape":"AcceleratorCapabilities",
-          "documentation":"<p>The GPU accelerator capabilities required for the Amazon EC2 instances. If you include the <code>acceleratorCapabilities</code> property in the <a href=\"https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_ServiceManagedEc2InstanceCapabilities\">ServiceManagedEc2InstanceCapabilities</a> object, all of the Amazon EC2 instances will have at least one accelerator. </p>"
+          "documentation":"<p>Describes the GPU accelerator capabilities required for worker host instances in this fleet.</p>"
         },
         "allowedInstanceTypes":{
           "shape":"InstanceTypes",
@@ -9673,7 +10530,8 @@
       "type":"string",
       "enum":[
         "SERVICE_QUOTA_EXCEEDED_EXCEPTION",
-        "KMS_KEY_LIMIT_EXCEEDED"
+        "KMS_KEY_LIMIT_EXCEEDED",
+        "DEPENDENCY_LIMIT_EXCEEDED"
       ]
     },
     "SessionActionDefinition":{
@@ -9799,6 +10657,10 @@
         "definition":{
           "shape":"SessionActionDefinitionSummary",
           "documentation":"<p>The session action definition.</p>"
+        },
+        "manifests":{
+          "shape":"TaskRunManifestPropertiesListResponse",
+          "documentation":"<p>The list of manifest properties that describe file attachments for the task run.</p>"
         }
       },
       "documentation":"<p>The details of a session action.</p>"
@@ -10314,7 +11176,8 @@
         "INT",
         "FLOAT",
         "STRING",
-        "PATH"
+        "PATH",
+        "CHUNK_INT"
       ]
     },
     "StepRequiredCapabilities":{
@@ -10378,10 +11241,18 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the step failed and were retried.</p>"
+        },
         "createdAt":{
           "shape":"CreatedAt",
           "documentation":"<p>The date and time the resource was created.</p>"
         },
+        "createdBy":{
+          "shape":"CreatedBy",
+          "documentation":"<p>The user or system that created this resource.</p>"
+        },
         "startedAt":{
           "shape":"StartedAt",
           "documentation":"<p>The date and time the resource started running.</p>"
@@ -10390,6 +11261,14 @@
           "shape":"EndedAt",
           "documentation":"<p>The date and time the resource ended running.</p>"
         },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The date and time the resource was updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user or system that updated this resource.</p>"
+        },
         "parameterSpace":{
           "shape":"ParameterSpace",
           "documentation":"<p>The parameters and combination expressions for the search.</p>"
@@ -10437,6 +11316,10 @@
           "shape":"TaskRunStatusCounts",
           "documentation":"<p>The number of tasks running on the job.</p>"
         },
+        "taskFailureRetryCount":{
+          "shape":"TaskFailureRetryCount",
+          "documentation":"<p>The total number of times tasks from the step failed and were retried.</p>"
+        },
         "targetTaskRunStatus":{
           "shape":"StepTargetTaskRunStatus",
           "documentation":"<p>The task status to start with on the job.</p>"
@@ -10589,6 +11472,13 @@
       "type":"timestamp",
       "timestampFormat":"iso8601"
     },
+    "TagPropagationMode":{
+      "type":"string",
+      "enum":[
+        "NO_PROPAGATION",
+        "PROPAGATE_TAGS_TO_WORKERS_AT_LAUNCH"
+      ]
+    },
     "TagResourceRequest":{
       "type":"structure",
       "required":["resourceArn"],
@@ -10615,6 +11505,12 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "TaskFailureRetryCount":{
+      "type":"integer",
+      "box":true,
+      "max":2147483647,
+      "min":0
+    },
     "TaskId":{
       "type":"string",
       "pattern":"task-[0-9a-f]{32}-(0|([1-9][0-9]{0,9}))"
@@ -10637,6 +11533,10 @@
         "path":{
           "shape":"PathString",
           "documentation":"<p>A file system path represented as a string.</p>"
+        },
+        "chunkInt":{
+          "shape":"String",
+          "documentation":"<p>A range (for example 1-10) or selection of specific (for example 1,3,7,8,10) integers represented as a string.</p>"
         }
       },
       "documentation":"<p>The data types for the task parameters.</p>",
@@ -10655,10 +11555,57 @@
       "max":2147483647,
       "min":0
     },
+    "TaskRunManifestPropertiesListRequest":{
+      "type":"list",
+      "member":{"shape":"TaskRunManifestPropertiesRequest"},
+      "max":10,
+      "min":0
+    },
+    "TaskRunManifestPropertiesListResponse":{
+      "type":"list",
+      "member":{"shape":"TaskRunManifestPropertiesResponse"}
+    },
+    "TaskRunManifestPropertiesRequest":{
+      "type":"structure",
+      "members":{
+        "outputManifestPath":{
+          "shape":"TaskRunManifestPropertiesRequestOutputManifestPathString",
+          "documentation":"<p>The manifest file path.</p>"
+        },
+        "outputManifestHash":{
+          "shape":"TaskRunManifestPropertiesRequestOutputManifestHashString",
+          "documentation":"<p>The hash value of the file.</p>"
+        }
+      },
+      "documentation":"<p>The output manifest properties reported by the worker agent for a completed task run.</p>"
+    },
+    "TaskRunManifestPropertiesRequestOutputManifestHashString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "TaskRunManifestPropertiesRequestOutputManifestPathString":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
+    "TaskRunManifestPropertiesResponse":{
+      "type":"structure",
+      "members":{
+        "outputManifestPath":{
+          "shape":"String",
+          "documentation":"<p>The manifest file path.</p>"
+        },
+        "outputManifestHash":{
+          "shape":"String",
+          "documentation":"<p>The hash value of the file.</p>"
+        }
+      },
+      "documentation":"<p>The manifest properties for a task run, corresponding to the manifest properties in the job.</p>"
+    },
     "TaskRunSessionActionDefinition":{
       "type":"structure",
       "required":[
-        "taskId",
         "stepId",
         "parameters"
       ],
@@ -10680,10 +11627,7 @@
     },
     "TaskRunSessionActionDefinitionSummary":{
       "type":"structure",
-      "required":[
-        "taskId",
-        "stepId"
-      ],
+      "required":["stepId"],
       "members":{
         "taskId":{
           "shape":"TaskId",
@@ -10692,6 +11636,10 @@
         "stepId":{
           "shape":"StepId",
           "documentation":"<p>The step ID.</p>"
+        },
+        "parameters":{
+          "shape":"TaskParameters",
+          "documentation":"<p>The parameters of a task run in a session action.</p>"
         }
       },
       "documentation":"<p>The details of a task run in a session action.</p>"
@@ -10764,6 +11712,14 @@
         "endedAt":{
           "shape":"EndedAt",
           "documentation":"<p>The date and time the resource ended running.</p>"
+        },
+        "updatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The date and time the resource was updated.</p>"
+        },
+        "updatedBy":{
+          "shape":"UpdatedBy",
+          "documentation":"<p>The user or system that updated this resource.</p>"
         }
       },
       "documentation":"<p>The details of a task search.</p>"
@@ -11053,11 +12009,15 @@
         },
         "maxWorkerCount":{
           "shape":"MinZeroMaxInteger",
-          "documentation":"<p>The maximum number of workers in the fleet.</p>"
+          "documentation":"<p>The maximum number of workers in the fleet.</p> <p>Deadline Cloud limits the number of workers to less than or equal to the fleet's maximum worker count. The service maintains eventual consistency for the worker count. If you make multiple rapid calls to <code>CreateWorker</code> before the field updates, you might exceed your fleet's maximum worker count. For example, if your <code>maxWorkerCount</code> is 10 and you currently have 9 workers, making two quick <code>CreateWorker</code> calls might successfully create 2 workers instead of 1, resulting in 11 total workers.</p>"
         },
         "configuration":{
           "shape":"FleetConfiguration",
           "documentation":"<p>The fleet configuration to update.</p>"
+        },
+        "hostConfiguration":{
+          "shape":"HostConfiguration",
+          "documentation":"<p>Provides a script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet.</p>"
         }
       }
     },
@@ -11085,6 +12045,30 @@
           "location":"header",
           "locationName":"X-Amz-Client-Token"
         },
+        "targetTaskRunStatus":{
+          "shape":"JobTargetTaskRunStatus",
+          "documentation":"<p>The task status to update the job's tasks to.</p>"
+        },
+        "priority":{
+          "shape":"JobPriority",
+          "documentation":"<p>The job priority to update.</p>"
+        },
+        "maxFailedTasksCount":{
+          "shape":"MaxFailedTasksCount",
+          "documentation":"<p>The number of task failures before the job stops running and is marked as <code>FAILED</code>.</p>"
+        },
+        "maxRetriesPerTask":{
+          "shape":"MaxRetriesPerTask",
+          "documentation":"<p>The maximum number of retries for a job.</p>"
+        },
+        "lifecycleStatus":{
+          "shape":"UpdateJobLifecycleStatus",
+          "documentation":"<p>The status of a job in its lifecycle. When you change the status of the job to <code>ARCHIVED</code>, the job can't be scheduled or archived.</p> <important> <p>An archived jobs and its steps and tasks are deleted after 120 days. The job can't be recovered.</p> </important>"
+        },
+        "maxWorkerCount":{
+          "shape":"MaxWorkerCount",
+          "documentation":"<p>The maximum number of worker hosts that can concurrently process a job. When the <code>maxWorkerCount</code> is reached, no more workers will be assigned to process the job, even if the fleets assigned to the job's queue has available workers.</p> <p>You can't set the <code>maxWorkerCount</code> to 0. If you set it to -1, there is no maximum number of workers.</p> <p>If you don't specify the <code>maxWorkerCount</code>, the default is -1.</p> <p>The maximum number of workers that can process tasks in the job.</p>"
+        },
         "farmId":{
           "shape":"FarmId",
           "documentation":"<p>The farm ID of the job to update.</p>",
@@ -11102,30 +12086,48 @@
           "documentation":"<p>The job ID to update.</p>",
           "location":"uri",
           "locationName":"jobId"
+        }
+      }
+    },
+    "UpdateJobResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "UpdateLimitRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "limitId"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the limit.</p>",
+          "location":"uri",
+          "locationName":"farmId"
         },
-        "targetTaskRunStatus":{
-          "shape":"JobTargetTaskRunStatus",
-          "documentation":"<p>The task status to update the job's tasks to.</p>"
-        },
-        "priority":{
-          "shape":"JobPriority",
-          "documentation":"<p>The job priority to update.</p>"
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit to update.</p>",
+          "location":"uri",
+          "locationName":"limitId"
         },
-        "maxFailedTasksCount":{
-          "shape":"MaxFailedTasksCount",
-          "documentation":"<p>The number of task failures before the job stops running and is marked as <code>FAILED</code>.</p>"
+        "displayName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The new display name of the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
         },
-        "maxRetriesPerTask":{
-          "shape":"MaxRetriesPerTask",
-          "documentation":"<p>The maximum number of retries for a job.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The new description of the limit.</p> <important> <p>This field can store any content. Escape or encode this content before displaying it on a webpage or any other system that might interpret the content of this field.</p> </important>"
         },
-        "lifecycleStatus":{
-          "shape":"UpdateJobLifecycleStatus",
-          "documentation":"<p>The status of a job in its lifecycle. When you change the status of the job to <code>ARCHIVED</code>, the job can't be scheduled or archived.</p> <important> <p>An archived jobs and its steps and tasks are deleted after 120 days. The job can't be recovered.</p> </important>"
+        "maxCount":{
+          "shape":"MaxCount",
+          "documentation":"<p>The maximum number of resources constrained by this limit. When all of the resources are in use, steps that require the limit won't be scheduled until the resource is available.</p> <p>If more than the new maximum number is currently in use, running jobs finish but no new jobs are started until the number of resources in use is below the new maximum number.</p> <p>The <code>maxCount</code> must not be 0. If the value is -1, there is no restriction on the number of resources that can be acquired for this limit.</p>"
         }
       }
     },
-    "UpdateJobResponse":{
+    "UpdateLimitResponse":{
       "type":"structure",
       "members":{
       }
@@ -11257,6 +12259,52 @@
         "STOP_SCHEDULING_AND_CANCEL_TASKS"
       ]
     },
+    "UpdateQueueLimitAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "farmId",
+        "queueId",
+        "limitId",
+        "status"
+      ],
+      "members":{
+        "farmId":{
+          "shape":"FarmId",
+          "documentation":"<p>The unique identifier of the farm that contains the associated queues and limits.</p>",
+          "location":"uri",
+          "locationName":"farmId"
+        },
+        "queueId":{
+          "shape":"QueueId",
+          "documentation":"<p>The unique identifier of the queue associated to the limit.</p>",
+          "location":"uri",
+          "locationName":"queueId"
+        },
+        "limitId":{
+          "shape":"LimitId",
+          "documentation":"<p>The unique identifier of the limit associated to the queue.</p>",
+          "location":"uri",
+          "locationName":"limitId"
+        },
+        "status":{
+          "shape":"UpdateQueueLimitAssociationStatus",
+          "documentation":"<p>Sets the status of the limit. You can mark the limit active, or you can stop usage of the limit and either complete existing tasks or cancel any existing tasks immediately. </p>"
+        }
+      }
+    },
+    "UpdateQueueLimitAssociationResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "UpdateQueueLimitAssociationStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "STOP_LIMIT_USAGE_AND_COMPLETE_TASKS",
+        "STOP_LIMIT_USAGE_AND_CANCEL_TASKS"
+      ]
+    },
     "UpdateQueueRequest":{
       "type":"structure",
       "required":[
@@ -11333,11 +12381,11 @@
     "UpdateSessionRequest":{
       "type":"structure",
       "required":[
+        "targetLifecycleStatus",
         "farmId",
         "queueId",
         "jobId",
-        "sessionId",
-        "targetLifecycleStatus"
+        "sessionId"
       ],
       "members":{
         "clientToken":{
@@ -11347,6 +12395,10 @@
           "location":"header",
           "locationName":"X-Amz-Client-Token"
         },
+        "targetLifecycleStatus":{
+          "shape":"SessionLifecycleTargetStatus",
+          "documentation":"<p>The life cycle status to update in the session.</p>"
+        },
         "farmId":{
           "shape":"FarmId",
           "documentation":"<p>The farm ID to update in the session.</p>",
@@ -11370,10 +12422,6 @@
           "documentation":"<p>The session ID to update.</p>",
           "location":"uri",
           "locationName":"sessionId"
-        },
-        "targetLifecycleStatus":{
-          "shape":"SessionLifecycleTargetStatus",
-          "documentation":"<p>The life cycle status to update in the session.</p>"
         }
       }
     },
@@ -11385,13 +12433,17 @@
     "UpdateStepRequest":{
       "type":"structure",
       "required":[
+        "targetTaskRunStatus",
         "farmId",
         "queueId",
         "jobId",
-        "stepId",
-        "targetTaskRunStatus"
+        "stepId"
       ],
       "members":{
+        "targetTaskRunStatus":{
+          "shape":"StepTargetTaskRunStatus",
+          "documentation":"<p>The task status to update the step's tasks to.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>The unique token which the server uses to recognize retries of the same request.</p>",
@@ -11422,10 +12474,6 @@
           "documentation":"<p>The step ID to update.</p>",
           "location":"uri",
           "locationName":"stepId"
-        },
-        "targetTaskRunStatus":{
-          "shape":"StepTargetTaskRunStatus",
-          "documentation":"<p>The task status to update the step's tasks to.</p>"
         }
       }
     },
@@ -11486,12 +12534,12 @@
     "UpdateTaskRequest":{
       "type":"structure",
       "required":[
+        "targetRunStatus",
         "farmId",
         "queueId",
         "jobId",
         "stepId",
-        "taskId",
-        "targetRunStatus"
+        "taskId"
       ],
       "members":{
         "clientToken":{
@@ -11501,6 +12549,10 @@
           "location":"header",
           "locationName":"X-Amz-Client-Token"
         },
+        "targetRunStatus":{
+          "shape":"TaskTargetRunStatus",
+          "documentation":"<p>The run status with which to start the task.</p>"
+        },
         "farmId":{
           "shape":"FarmId",
           "documentation":"<p>The farm ID to update.</p>",
@@ -11530,10 +12582,6 @@
           "documentation":"<p>The task ID to update.</p>",
           "location":"uri",
           "locationName":"taskId"
-        },
-        "targetRunStatus":{
-          "shape":"TaskTargetRunStatus",
-          "documentation":"<p>The run status with which to start the task.</p>"
         }
       }
     },
@@ -11588,6 +12636,10 @@
         "log":{
           "shape":"LogConfiguration",
           "documentation":"<p>The worker log to update.</p>"
+        },
+        "hostConfiguration":{
+          "shape":"HostConfiguration",
+          "documentation":"<p>The script that runs as a worker is starting up that you can use to provide additional configuration for workers in your fleet.</p>"
         }
       }
     },
@@ -11668,7 +12720,7 @@
         },
         "processExitCode":{
           "shape":"ProcessExitCode",
-          "documentation":"<p>The process exit code.</p>"
+          "documentation":"<p>The process exit code. The default Deadline Cloud worker agent converts unsigned 32-bit exit codes to signed 32-bit exit codes.</p>"
         },
         "progressMessage":{
           "shape":"SessionActionProgressMessage",
@@ -11689,6 +12741,10 @@
         "progressPercent":{
           "shape":"SessionActionProgressPercent",
           "documentation":"<p>The percentage completed.</p>"
+        },
+        "manifests":{
+          "shape":"TaskRunManifestPropertiesListRequest",
+          "documentation":"<p>A list of output manifest properties reported by the worker agent, with each entry corresponding to a manifest property in the job.</p>"
         }
       },
       "documentation":"<p>The updated session action information as it relates to completion and progress of the session.</p>"
@@ -11844,12 +12900,31 @@
         "OTHER"
       ]
     },
+    "VpcConfiguration":{
+      "type":"structure",
+      "members":{
+        "resourceConfigurationArns":{
+          "shape":"VpcResourceConfigurationArns",
+          "documentation":"<p>The ARNs of the VPC Lattice resource configurations attached to the fleet.</p>"
+        }
+      },
+      "documentation":"<p>The configuration options for a service managed fleet's VPC.</p>"
+    },
     "VpcId":{
       "type":"string",
       "max":32,
       "min":1,
       "pattern":"vpc-[\\w]{1,120}"
     },
+    "VpcResourceConfigurationArn":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "VpcResourceConfigurationArns":{
+      "type":"list",
+      "member":{"shape":"VpcResourceConfigurationArn"}
+    },
     "WindowsUser":{
       "type":"structure",
       "required":[
diff -pruN 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/waiters-2.json 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/deadline/2023-10-12/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/deadline/2023-10-12/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -105,6 +105,18 @@
         "expected" : "STOPPED"
       } ]
     },
+    "QueueLimitAssociationStopped" : {
+      "description" : "Wait until a QueueLimitAssociation is stopped. Use this after setting the status to STOP_LIMIT_USAGE_AND_COMPLETE_TASKS or STOP_LIMIT_USAGE_AND_CANCEL_TASKS to wait for a QueueLimitAssociation to reach STOPPED",
+      "delay" : 10,
+      "maxAttempts" : 60,
+      "operation" : "GetQueueLimitAssociation",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "STOPPED"
+      } ]
+    },
     "QueueScheduling" : {
       "delay" : 10,
       "maxAttempts" : 70,
diff -pruN 2.23.6-1/awscli/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/detective/2018-10-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,152 +57,201 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://detective.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.detective-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://detective-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-us-gov"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://detective.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
                                                     "fn": "getAttr",
@@ -210,105 +259,258 @@
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://detective-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://api.detective-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.detective-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://api.detective-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://api.detective.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.detective.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://api.detective.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://api.detective.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/detective/2018-10-26/service-2.json 2.31.35-1/awscli/botocore/data/detective/2018-10-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/detective/2018-10-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/detective/2018-10-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1941,8 +1941,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2033,8 +2032,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatasourcePackagesRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/devicefarm/2015-06-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/devicefarm/2015-06-23/service-2.json 2.31.35-1/awscli/botocore/data/devicefarm/2015-06-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/devicefarm/2015-06-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/devicefarm/2015-06-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1383,6 +1383,12 @@
       "type":"list",
       "member":{"shape":"Artifact"}
     },
+    "AuxiliaryAppArnList":{
+      "type":"list",
+      "member":{"shape":"AmazonResourceName"},
+      "max":3,
+      "min":0
+    },
     "BillingMethod":{
       "type":"string",
       "enum":[
@@ -1635,6 +1641,10 @@
     "CreateRemoteAccessSessionConfiguration":{
       "type":"structure",
       "members":{
+        "auxiliaryApps":{
+          "shape":"AuxiliaryAppArnList",
+          "documentation":"<p>A list of upload ARNs for app packages to be installed onto your device. (Maximum 3)</p>"
+        },
         "billingMethod":{
           "shape":"BillingMethod",
           "documentation":"<p>The billing method for the remote access session.</p>"
@@ -1642,6 +1652,10 @@
         "vpceConfigurationArns":{
           "shape":"AmazonResourceNames",
           "documentation":"<p>An array of ARNs included in the VPC endpoint configuration.</p>"
+        },
+        "deviceProxy":{
+          "shape":"DeviceProxy",
+          "documentation":"<p>The device proxy to be configured on the device for the remote access session.</p>"
         }
       },
       "documentation":"<p>Configuration settings for a remote access session, including billing method.</p>"
@@ -1661,6 +1675,10 @@
           "shape":"AmazonResourceName",
           "documentation":"<p>The ARN of the device for which you want to create a remote access session.</p>"
         },
+        "appArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the app to create the remote access session.</p>"
+        },
         "instanceArn":{
           "shape":"AmazonResourceName",
           "documentation":"<p>The Amazon Resource Name (ARN) of the device instance for which you want to create a remote access session.</p>"
@@ -1879,8 +1897,7 @@
     },
     "DeleteDevicePoolResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the result of a delete device pool request.</p>"
     },
     "DeleteInstanceProfileRequest":{
@@ -1895,8 +1912,7 @@
     },
     "DeleteInstanceProfileResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNetworkProfileRequest":{
       "type":"structure",
@@ -1910,8 +1926,7 @@
     },
     "DeleteNetworkProfileResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectRequest":{
       "type":"structure",
@@ -1926,8 +1941,7 @@
     },
     "DeleteProjectResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the result of a delete project request.</p>"
     },
     "DeleteRemoteAccessSessionRequest":{
@@ -1943,8 +1957,7 @@
     },
     "DeleteRemoteAccessSessionResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response from the server when a request is made to delete the remote access session.</p>"
     },
     "DeleteRunRequest":{
@@ -1960,8 +1973,7 @@
     },
     "DeleteRunResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the result of a delete run request.</p>"
     },
     "DeleteTestGridProjectRequest":{
@@ -1976,8 +1988,7 @@
     },
     "DeleteTestGridProjectResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUploadRequest":{
       "type":"structure",
@@ -1992,8 +2003,7 @@
     },
     "DeleteUploadResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the result of a delete upload request.</p>"
     },
     "DeleteVPCEConfigurationRequest":{
@@ -2008,8 +2018,7 @@
     },
     "DeleteVPCEConfigurationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Device":{
       "type":"structure",
@@ -2315,6 +2324,36 @@
       "type":"list",
       "member":{"shape":"DevicePool"}
     },
+    "DeviceProxy":{
+      "type":"structure",
+      "required":[
+        "host",
+        "port"
+      ],
+      "members":{
+        "host":{
+          "shape":"DeviceProxyHost",
+          "documentation":"<p>Hostname or IPv4 address of the proxy.</p>"
+        },
+        "port":{
+          "shape":"DeviceProxyPort",
+          "documentation":"<p>The port number on which the http/s proxy is listening.</p>"
+        }
+      },
+      "documentation":"<p>Represents the http/s proxy configuration that will be applied to a device during a run.</p>"
+    },
+    "DeviceProxyHost":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"^([a-zA-Z0-9])([a-zA-Z0-9-.]+)([a-zA-Z0-9])$"
+    },
+    "DeviceProxyPort":{
+      "type":"integer",
+      "box":true,
+      "max":65535,
+      "min":1
+    },
     "DeviceSelectionConfiguration":{
       "type":"structure",
       "required":[
@@ -2423,8 +2462,7 @@
     },
     "GetAccountSettingsRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the request sent to retrieve the account settings.</p>"
     },
     "GetAccountSettingsResult":{
@@ -2479,6 +2517,10 @@
         "configuration":{
           "shape":"ScheduleRunConfiguration",
           "documentation":"<p>An object that contains information about the settings for a run.</p>"
+        },
+        "projectArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The ARN of the project for which you want to check device pool compatibility.</p>"
         }
       },
       "documentation":"<p>Represents a request to the get device pool compatibility operation.</p>"
@@ -4287,6 +4329,14 @@
         "vpcConfig":{
           "shape":"VpcConfig",
           "documentation":"<p>The VPC security groups and subnets that are attached to a project.</p>"
+        },
+        "deviceProxy":{
+          "shape":"DeviceProxy",
+          "documentation":"<p>The device proxy configured for the remote access session.</p>"
+        },
+        "appUpload":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The ARN for the app to be installed onto your device.</p>"
         }
       },
       "documentation":"<p>Represents information about the remote access session.</p>"
@@ -4457,6 +4507,10 @@
           "shape":"NetworkProfile",
           "documentation":"<p>The network profile being used for a test run.</p>"
         },
+        "deviceProxy":{
+          "shape":"DeviceProxy",
+          "documentation":"<p>The device proxy configured for the devices in the run.</p>"
+        },
         "parsingResultUrl":{
           "shape":"String",
           "documentation":"<p>Read-only URL for an object in an S3 bucket where you can get the parsing results of the test package. If the test package doesn't parse, the reason why it doesn't parse appears in the file that this URL points to.</p>"
@@ -4595,6 +4649,10 @@
           "shape":"AmazonResourceNames",
           "documentation":"<p>An array of ARNs for your VPC endpoint configurations.</p>"
         },
+        "deviceProxy":{
+          "shape":"DeviceProxy",
+          "documentation":"<p>The device proxy to be configured on the device for the run.</p>"
+        },
         "customerArtifactPaths":{
           "shape":"CustomerArtifactPaths",
           "documentation":"<p>Input <code>CustomerArtifactPaths</code> object for the scheduled run configuration.</p>"
@@ -4935,8 +4993,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5262,8 +5319,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDeviceInstanceRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/devops-guru/2020-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/devops-guru/2020-12-01/service-2.json 2.31.35-1/awscli/botocore/data/devops-guru/2020-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/devops-guru/2020-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/devops-guru/2020-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"devops-guru",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon DevOps Guru",
     "serviceId":"DevOps Guru",
     "signatureVersion":"v4",
     "signingName":"devops-guru",
-    "uid":"devops-guru-2020-12-01"
+    "uid":"devops-guru-2020-12-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddNotificationChannel":{
@@ -1055,13 +1057,11 @@
     },
     "DeleteInsightResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountHealthRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountHealthResponse":{
       "type":"structure",
@@ -1163,8 +1163,7 @@
     },
     "DescribeEventSourcesConfigRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEventSourcesConfigResponse":{
       "type":"structure",
@@ -1392,8 +1391,7 @@
     },
     "DescribeServiceIntegrationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeServiceIntegrationResponse":{
       "type":"structure",
@@ -2939,8 +2937,7 @@
     },
     "PutFeedbackResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReactiveAnomalies":{
       "type":"list",
@@ -3329,8 +3326,7 @@
     },
     "RemoveNotificationChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceArn":{
       "type":"string",
@@ -3781,8 +3777,7 @@
     },
     "StartCostEstimationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartTimeRange":{
       "type":"structure",
@@ -3970,8 +3965,7 @@
     },
     "UpdateEventSourcesConfigResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResourceCollectionAction":{
       "type":"string",
@@ -4010,8 +4004,7 @@
     },
     "UpdateResourceCollectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateServiceIntegrationConfig":{
       "type":"structure",
@@ -4040,8 +4033,7 @@
     },
     "UpdateServiceIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStackNames":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/directconnect/2012-10-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/directconnect/2012-10-25/service-2.json 2.31.35-1/awscli/botocore/data/directconnect/2012-10-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/directconnect/2012-10-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/directconnect/2012-10-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -147,7 +147,7 @@
         {"shape":"DirectConnectServerException"},
         {"shape":"DirectConnectClientException"}
       ],
-      "documentation":"<p>Associates a MAC Security (MACsec) Connection Key Name (CKN)/ Connectivity Association Key (CAK) pair with an Direct Connect dedicated connection.</p> <p>You must supply either the <code>secretARN,</code> or the CKN/CAK (<code>ckn</code> and <code>cak</code>) pair in the request.</p> <p>For information about MAC Security (MACsec) key considerations, see <a href=\"https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-mac-sec-getting-started.html#mac-sec-key-consideration\">MACsec pre-shared CKN/CAK key considerations </a> in the <i>Direct Connect User Guide</i>.</p>"
+      "documentation":"<p>Associates a MAC Security (MACsec) Connection Key Name (CKN)/ Connectivity Association Key (CAK) pair with a Direct Connect connection.</p> <p>You must supply either the <code>secretARN,</code> or the CKN/CAK (<code>ckn</code> and <code>cak</code>) pair in the request.</p> <p>For information about MAC Security (MACsec) key considerations, see <a href=\"https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-mac-sec-getting-started.html#mac-sec-key-consideration\">MACsec pre-shared CKN/CAK key considerations </a> in the <i>Direct Connect User Guide</i>.</p>"
     },
     "AssociateVirtualInterface":{
       "name":"AssociateVirtualInterface",
@@ -580,7 +580,7 @@
         {"shape":"DirectConnectServerException"},
         {"shape":"DirectConnectClientException"}
       ],
-      "documentation":"<p>Lists the associations between your Direct Connect gateways and virtual private gateways and transit gateways. You must specify one of the following:</p> <ul> <li> <p>A Direct Connect gateway</p> <p>The response contains all virtual private gateways and transit gateways associated with the Direct Connect gateway.</p> </li> <li> <p>A virtual private gateway</p> <p>The response contains the Direct Connect gateway.</p> </li> <li> <p>A transit gateway</p> <p>The response contains the Direct Connect gateway.</p> </li> <li> <p>A Direct Connect gateway and a virtual private gateway</p> <p>The response contains the association between the Direct Connect gateway and virtual private gateway.</p> </li> <li> <p>A Direct Connect gateway and a transit gateway</p> <p>The response contains the association between the Direct Connect gateway and transit gateway.</p> </li> </ul>"
+      "documentation":"<p>Lists the associations between your Direct Connect gateways and virtual private gateways and transit gateways. You must specify one of the following:</p> <ul> <li> <p>A Direct Connect gateway</p> <p>The response contains all virtual private gateways and transit gateways associated with the Direct Connect gateway.</p> </li> <li> <p>A virtual private gateway</p> <p>The response contains the Direct Connect gateway.</p> </li> <li> <p>A transit gateway</p> <p>The response contains the Direct Connect gateway.</p> </li> <li> <p>A Direct Connect gateway and a virtual private gateway</p> <p>The response contains the association between the Direct Connect gateway and virtual private gateway.</p> </li> <li> <p>A Direct Connect gateway and a transit gateway</p> <p>The response contains the association between the Direct Connect gateway and transit gateway.</p> </li> <li> <p>A Direct Connect gateway and a virtual private gateway</p> <p>The response contains the association between the Direct Connect gateway and virtual private gateway.</p> </li> <li> <p>A Direct Connect gateway association to a Cloud WAN core network</p> <p>The response contains the Cloud WAN core network ID that the Direct Connect gateway is associated to.</p> </li> </ul>"
     },
     "DescribeDirectConnectGatewayAttachments":{
       "name":"DescribeDirectConnectGatewayAttachments",
@@ -747,7 +747,7 @@
         {"shape":"DirectConnectServerException"},
         {"shape":"DirectConnectClientException"}
       ],
-      "documentation":"<p>Displays all virtual interfaces for an Amazon Web Services account. Virtual interfaces deleted fewer than 15 minutes before you make the request are also returned. If you specify a connection ID, only the virtual interfaces associated with the connection are returned. If you specify a virtual interface ID, then only a single virtual interface is returned.</p> <p>A virtual interface (VLAN) transmits the traffic between the Direct Connect location and the customer network.</p>"
+      "documentation":"<p>Displays all virtual interfaces for an Amazon Web Services account. Virtual interfaces deleted fewer than 15 minutes before you make the request are also returned. If you specify a connection ID, only the virtual interfaces associated with the connection are returned. If you specify a virtual interface ID, then only a single virtual interface is returned.</p> <p>A virtual interface (VLAN) transmits the traffic between the Direct Connect location and the customer network.</p> <ul> <li> <p>If you're using an <code>asn</code>, the response includes ASN value in both the <code>asn</code> and <code>asnLong</code> fields.</p> </li> <li> <p>If you're using <code>asnLong</code>, the response returns a value of <code>0</code> (zero) for the <code>asn</code> attribute because it exceeds the highest ASN value of 2,147,483,647 that it can support</p> </li> </ul>"
     },
     "DisassociateConnectionFromLag":{
       "name":"DisassociateConnectionFromLag",
@@ -775,7 +775,7 @@
         {"shape":"DirectConnectServerException"},
         {"shape":"DirectConnectClientException"}
       ],
-      "documentation":"<p>Removes the association between a MAC Security (MACsec) security key and an Direct Connect dedicated connection.</p>"
+      "documentation":"<p>Removes the association between a MAC Security (MACsec) security key and a Direct Connect connection.</p>"
     },
     "ListVirtualInterfaceTestHistory":{
       "name":"ListVirtualInterfaceTestHistory",
@@ -861,7 +861,7 @@
         {"shape":"DirectConnectServerException"},
         {"shape":"DirectConnectClientException"}
       ],
-      "documentation":"<p>Updates the Direct Connect dedicated connection configuration.</p> <p>You can update the following parameters for a connection:</p> <ul> <li> <p>The connection name</p> </li> <li> <p>The connection's MAC Security (MACsec) encryption mode.</p> </li> </ul>"
+      "documentation":"<p>Updates the Direct Connect connection configuration.</p> <p>You can update the following parameters for a connection:</p> <ul> <li> <p>The connection name</p> </li> <li> <p>The connection's MAC Security (MACsec) encryption mode.</p> </li> </ul>"
     },
     "UpdateDirectConnectGateway":{
       "name":"UpdateDirectConnectGateway",
@@ -1156,19 +1156,19 @@
       "members":{
         "connectionId":{
           "shape":"ConnectionId",
-          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), or the ID of the LAG (dxlag-xxxx).</p> <p>You can use <a>DescribeConnections</a> or <a>DescribeLags</a> to retrieve connection ID.</p>"
+          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), interconnect (dxcon-xxxx), or LAG (dxlag-xxxx).</p> <p>You can use <a>DescribeConnections</a>, <a>DescribeInterconnects</a>, or <a>DescribeLags</a> to retrieve connection ID.</p>"
         },
         "secretARN":{
           "shape":"SecretARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the MAC Security (MACsec) secret key to associate with the dedicated connection.</p> <p>You can use <a>DescribeConnections</a> or <a>DescribeLags</a> to retrieve the MAC Security (MACsec) secret key.</p> <p>If you use this request parameter, you do not use the <code>ckn</code> and <code>cak</code> request parameters.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the MAC Security (MACsec) secret key to associate with the connection.</p> <p>You can use <a>DescribeConnections</a> or <a>DescribeLags</a> to retrieve the MAC Security (MACsec) secret key.</p> <p>If you use this request parameter, you do not use the <code>ckn</code> and <code>cak</code> request parameters.</p>"
         },
         "ckn":{
           "shape":"Ckn",
-          "documentation":"<p>The MAC Security (MACsec) CKN to associate with the dedicated connection.</p> <p>You can create the CKN/CAK pair using an industry standard tool.</p> <p> The valid values are 64 hexadecimal characters (0-9, A-E).</p> <p>If you use this request parameter, you must use the <code>cak</code> request parameter and not use the <code>secretARN</code> request parameter.</p>"
+          "documentation":"<p>The MAC Security (MACsec) CKN to associate with the connection.</p> <p>You can create the CKN/CAK pair using an industry standard tool.</p> <p> The valid values are 64 hexadecimal characters (0-9, A-E).</p> <p>If you use this request parameter, you must use the <code>cak</code> request parameter and not use the <code>secretARN</code> request parameter.</p>"
         },
         "cak":{
           "shape":"Cak",
-          "documentation":"<p>The MAC Security (MACsec) CAK to associate with the dedicated connection.</p> <p>You can create the CKN/CAK pair using an industry standard tool.</p> <p> The valid values are 64 hexadecimal characters (0-9, A-E).</p> <p>If you use this request parameter, you must use the <code>ckn</code> request parameter and not use the <code>secretARN</code> request parameter.</p>"
+          "documentation":"<p>The MAC Security (MACsec) CAK to associate with the connection.</p> <p>You can create the CKN/CAK pair using an industry standard tool.</p> <p> The valid values are 64 hexadecimal characters (0-9, A-E).</p> <p>If you use this request parameter, you must use the <code>ckn</code> request parameter and not use the <code>secretARN</code> request parameter.</p>"
         }
       }
     },
@@ -1177,11 +1177,11 @@
       "members":{
         "connectionId":{
           "shape":"ConnectionId",
-          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), or the ID of the LAG (dxlag-xxxx).</p>"
+          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), interconnect (dxcon-xxxx), or LAG (dxlag-xxxx).</p>"
         },
         "macSecKeys":{
           "shape":"MacSecKeyList",
-          "documentation":"<p>The MAC Security (MACsec) security keys associated with the dedicated connection.</p>"
+          "documentation":"<p>The MAC Security (MACsec) security keys associated with the connection.</p>"
         }
       }
     },
@@ -1207,7 +1207,7 @@
       "members":{
         "id":{
           "shape":"CoreNetworkIdentifier",
-          "documentation":"<p>The ID of the Cloud WAN core network.</p>"
+          "documentation":"<p>The ID of the Cloud WAN core network that the Direct Connect gateway is associated to.</p>"
         },
         "ownerAccount":{
           "shape":"OwnerAccount",
@@ -1215,10 +1215,10 @@
         },
         "attachmentId":{
           "shape":"CoreNetworkAttachmentId",
-          "documentation":"<p>the ID of the Direct Connect attachment</p>"
+          "documentation":"<p>the ID of the Direct Connect gateway attachment.</p>"
         }
       },
-      "documentation":"<p>The Amazon Web Services Cloud WAN core network that the Direct Connect attachment is associated with.</p>"
+      "documentation":"<p>The Amazon Web Services Cloud WAN core network that the Direct Connect gateway is associated to. This is only returned when a Direct Connect gateway is associated to a Cloud WAN core network.</p>"
     },
     "AssociatedGateway":{
       "type":"structure",
@@ -1267,7 +1267,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for the BGP peer. The valid range is from 1 to 4294967294 for BGP configuration. </p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "authKey":{
           "shape":"BGPAuthKey",
@@ -1396,7 +1400,7 @@
       "members":{
         "virtualInterfaceState":{
           "shape":"VirtualInterfaceState",
-          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
+          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>testing</code>: A virtual interface is in this state immediately after calling <a>StartBgpFailoverTest</a> and remains in this state during the duration of the test.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
         }
       }
     },
@@ -1415,7 +1419,7 @@
       "members":{
         "virtualInterfaceState":{
           "shape":"VirtualInterfaceState",
-          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
+          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>testing</code>: A virtual interface is in this state immediately after calling <a>StartBgpFailoverTest</a> and remains in this state during the duration of the test.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
         }
       }
     },
@@ -1441,7 +1445,7 @@
       "members":{
         "virtualInterfaceState":{
           "shape":"VirtualInterfaceState",
-          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
+          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>testing</code>: A virtual interface is in this state immediately after calling <a>StartBgpFailoverTest</a> and remains in this state during the duration of the test.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
         }
       }
     },
@@ -1535,6 +1539,10 @@
         "macSecKeys":{
           "shape":"MacSecKeyList",
           "documentation":"<p>The MAC Security (MACsec) security keys associated with the connection.</p>"
+        },
+        "partnerInterconnectMacSecCapable":{
+          "shape":"PartnerInterconnectMacSecCapable",
+          "documentation":"<p>Indicates whether the interconnect hosting this connection supports MAC Security (MACsec).</p>"
         }
       },
       "documentation":"<p>Information about an Direct Connect connection.</p>"
@@ -1565,6 +1573,10 @@
         "connections":{
           "shape":"ConnectionList",
           "documentation":"<p>The connections.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
         }
       }
     },
@@ -1637,7 +1649,7 @@
         },
         "requestMACSec":{
           "shape":"RequestMACSec",
-          "documentation":"<p>Indicates whether you want the connection to support MAC Security (MACsec).</p> <p>MAC Security (MACsec) is only available on dedicated connections. For information about MAC Security (MACsec) prerequisties, see <a href=\"https://docs.aws.amazon.com/directconnect/latest/UserGuide/direct-connect-mac-sec-getting-started.html#mac-sec-prerequisites\">MACsec prerequisties</a> in the <i>Direct Connect User Guide</i>.</p>"
+          "documentation":"<p>Indicates whether you want the connection to support MAC Security (MACsec).</p> <p>MAC Security (MACsec) is unavailable on hosted connections. For information about MAC Security (MACsec) prerequisites, see <a href=\"https://docs.aws.amazon.com/directconnect/latest/UserGuide/MACSec.html\">MAC Security in Direct Connect</a> in the <i>Direct Connect User Guide</i>.</p>"
         }
       }
     },
@@ -1719,6 +1731,10 @@
           "shape":"DirectConnectGatewayName",
           "documentation":"<p>The name of the Direct Connect gateway.</p>"
         },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The key-value pair tags associated with the request.</p>"
+        },
         "amazonSideAsn":{
           "shape":"LongAsn",
           "documentation":"<p>The autonomous system number (ASN) for Border Gateway Protocol (BGP) to be configured on the Amazon side of the connection. The ASN must be in the private range of 64,512 to 65,534 or 4,200,000,000 to 4,294,967,294. The default is 64512.</p>"
@@ -1765,6 +1781,10 @@
         "providerName":{
           "shape":"ProviderName",
           "documentation":"<p>The name of the service provider associated with the interconnect.</p>"
+        },
+        "requestMACSec":{
+          "shape":"RequestMACSec",
+          "documentation":"<p>Indicates whether you want the interconnect to support MAC Security (MACsec).</p>"
         }
       }
     },
@@ -1899,7 +1919,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for the BGP peer to be deleted from a Direct Connect virtual interface. The valid range is from 1 to 4294967294 for BGP configuration. </p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "customerAddress":{
           "shape":"CustomerAddress",
@@ -2038,7 +2062,7 @@
       "members":{
         "virtualInterfaceState":{
           "shape":"VirtualInterfaceState",
-          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
+          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>testing</code>: A virtual interface is in this state immediately after calling <a>StartBgpFailoverTest</a> and remains in this state during the duration of the test.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
         }
       }
     },
@@ -2085,6 +2109,14 @@
         "connectionId":{
           "shape":"ConnectionId",
           "documentation":"<p>The ID of the connection.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResultSetSize",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p> <p>If <code>MaxResults</code> is given a value larger than 100, only 100 results are returned.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next page of results.</p>"
         }
       }
     },
@@ -2252,6 +2284,14 @@
         "connectionId":{
           "shape":"ConnectionId",
           "documentation":"<p>The ID of the interconnect or LAG.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResultSetSize",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p> <p>If <code>MaxResults</code> is given a value larger than 100, only 100 results are returned.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next page of results.</p>"
         }
       }
     },
@@ -2288,6 +2328,14 @@
         "interconnectId":{
           "shape":"InterconnectId",
           "documentation":"<p>The ID of the interconnect.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResultSetSize",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p> <p>If <code>MaxResults</code> is given a value larger than 100, only 100 results are returned.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next page of results.</p>"
         }
       }
     },
@@ -2297,6 +2345,14 @@
         "lagId":{
           "shape":"LagId",
           "documentation":"<p>The ID of the LAG.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResultSetSize",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p> <p>If <code>MaxResults</code> is given a value larger than 100, only 100 results are returned.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next page of results.</p>"
         }
       }
     },
@@ -2383,6 +2439,14 @@
         "virtualInterfaceId":{
           "shape":"VirtualInterfaceId",
           "documentation":"<p>The ID of the virtual interface.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResultSetSize",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p> <p>If <code>MaxResults</code> is given a value larger than 100, only 100 results are returned.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next page of results.</p>"
         }
       }
     },
@@ -2407,7 +2471,7 @@
         },
         "amazonSideAsn":{
           "shape":"LongAsn",
-          "documentation":"<p>The autonomous system number (ASN) for the Amazon side of the connection.</p>"
+          "documentation":"<p>The autonomous system number (AS) for the Amazon side of the connection.</p>"
         },
         "ownerAccount":{
           "shape":"OwnerAccount",
@@ -2420,6 +2484,10 @@
         "stateChangeError":{
           "shape":"StateChangeError",
           "documentation":"<p>The error message if the state of an object failed to advance.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>Information about a tag.</p>"
         }
       },
       "documentation":"<p>Information about a Direct Connect gateway, which enables you to connect virtual interfaces and virtual private gateway or transit gateways.</p>"
@@ -2457,7 +2525,7 @@
         },
         "associatedCoreNetwork":{
           "shape":"AssociatedCoreNetwork",
-          "documentation":"<p>The ID of the Cloud WAN core network associated with the Direct Connect attachment.</p>"
+          "documentation":"<p>The ID of the Cloud WAN core network associated with the Direct Connect gateway attachment.</p>"
         },
         "virtualGatewayId":{
           "shape":"VirtualGatewayId",
@@ -2639,7 +2707,7 @@
       "members":{
         "connectionId":{
           "shape":"ConnectionId",
-          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), or the ID of the LAG (dxlag-xxxx).</p> <p>You can use <a>DescribeConnections</a> or <a>DescribeLags</a> to retrieve connection ID.</p>"
+          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), interconnect (dxcon-xxxx), or LAG (dxlag-xxxx).</p> <p>You can use <a>DescribeConnections</a>, <a>DescribeInterconnects</a>, or <a>DescribeLags</a> to retrieve connection ID.</p>"
         },
         "secretARN":{
           "shape":"SecretARN",
@@ -2652,18 +2720,17 @@
       "members":{
         "connectionId":{
           "shape":"ConnectionId",
-          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), or the ID of the LAG (dxlag-xxxx).</p>"
+          "documentation":"<p>The ID of the dedicated connection (dxcon-xxxx), interconnect (dxcon-xxxx), or LAG (dxlag-xxxx).</p>"
         },
         "macSecKeys":{
           "shape":"MacSecKeyList",
-          "documentation":"<p>The MAC Security (MACsec) security keys no longer associated with the dedicated connection.</p>"
+          "documentation":"<p>The MAC Security (MACsec) security keys no longer associated with the connection.</p>"
         }
       }
     },
     "DuplicateTagKeysException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A tag key was specified more than once.</p>",
       "exception":true
     },
@@ -2751,6 +2818,22 @@
         "providerName":{
           "shape":"ProviderName",
           "documentation":"<p>The name of the service provider associated with the interconnect.</p>"
+        },
+        "macSecCapable":{
+          "shape":"MacSecCapable",
+          "documentation":"<p>Indicates whether the interconnect supports MAC Security (MACsec).</p>"
+        },
+        "portEncryptionStatus":{
+          "shape":"PortEncryptionStatus",
+          "documentation":"<p>The MAC Security (MACsec) port link status.</p> <p>The valid values are <code>Encryption Up</code>, which means that there is an active Connection Key Name, or <code>Encryption Down</code>.</p>"
+        },
+        "encryptionMode":{
+          "shape":"EncryptionMode",
+          "documentation":"<p>The MAC Security (MACsec) encryption mode.</p> <p>The valid values are <code>no_encrypt</code>, <code>should_encrypt</code>, and <code>must_encrypt</code>.</p>"
+        },
+        "macSecKeys":{
+          "shape":"MacSecKeyList",
+          "documentation":"<p>The MAC Security (MACsec) security keys.</p>"
         }
       },
       "documentation":"<p>Information about an interconnect.</p>"
@@ -2779,6 +2862,10 @@
         "interconnects":{
           "shape":"InterconnectList",
           "documentation":"<p>The interconnects.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
         }
       }
     },
@@ -2897,6 +2984,10 @@
         "lags":{
           "shape":"LagList",
           "documentation":"<p>The LAGs.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
         }
       }
     },
@@ -3045,7 +3136,11 @@
       "members":{
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for a new BGP peer. The valid range is from 1 to 4294967294.</p>"
         },
         "authKey":{
           "shape":"BGPAuthKey",
@@ -3070,8 +3165,7 @@
       "type":"structure",
       "required":[
         "virtualInterfaceName",
-        "vlan",
-        "asn"
+        "vlan"
       ],
       "members":{
         "virtualInterfaceName":{
@@ -3084,7 +3178,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note> <p>The valid values are 1-2147483646.</p>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for a new private virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "mtu":{
           "shape":"MTU",
@@ -3129,8 +3227,7 @@
       "type":"structure",
       "required":[
         "virtualInterfaceName",
-        "vlan",
-        "asn"
+        "vlan"
       ],
       "members":{
         "virtualInterfaceName":{
@@ -3143,7 +3240,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note> <p>The valid values are 1-2147483646.</p>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The ASN when allocating a new private virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "mtu":{
           "shape":"MTU",
@@ -3176,8 +3277,7 @@
       "type":"structure",
       "required":[
         "virtualInterfaceName",
-        "vlan",
-        "asn"
+        "vlan"
       ],
       "members":{
         "virtualInterfaceName":{
@@ -3190,7 +3290,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for a new public virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "authKey":{
           "shape":"BGPAuthKey",
@@ -3223,8 +3327,7 @@
       "type":"structure",
       "required":[
         "virtualInterfaceName",
-        "vlan",
-        "asn"
+        "vlan"
       ],
       "members":{
         "virtualInterfaceName":{
@@ -3237,7 +3340,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note> <p>The valid values are 1-2147483646.</p>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The ASN when allocating a new public virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "authKey":{
           "shape":"BGPAuthKey",
@@ -3279,7 +3386,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for a new transit virtual interface.The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "mtu":{
           "shape":"MTU",
@@ -3329,7 +3440,11 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note> <p>The valid values are 1-2147483646.</p>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The ASN when allocating a new transit virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "mtu":{
           "shape":"MTU",
@@ -3368,6 +3483,7 @@
     },
     "OwnerAccount":{"type":"string"},
     "PaginationToken":{"type":"string"},
+    "PartnerInterconnectMacSecCapable":{"type":"boolean"},
     "PartnerName":{"type":"string"},
     "Platform":{"type":"string"},
     "PortEncryptionStatus":{"type":"string"},
@@ -3554,8 +3670,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3570,8 +3685,7 @@
     "TestId":{"type":"string"},
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the limit on the number of tags that can be assigned.</p>",
       "exception":true
     },
@@ -3594,8 +3708,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectionRequest":{
       "type":"structure",
@@ -3603,7 +3716,7 @@
       "members":{
         "connectionId":{
           "shape":"ConnectionId",
-          "documentation":"<p>The ID of the dedicated connection.</p> <p>You can use <a>DescribeConnections</a> to retrieve the connection ID.</p>"
+          "documentation":"<p>The ID of the connection.</p> <p>You can use <a>DescribeConnections</a> to retrieve the connection ID.</p>"
         },
         "connectionName":{
           "shape":"ConnectionName",
@@ -3779,11 +3892,15 @@
         },
         "asn":{
           "shape":"ASN",
-          "documentation":"<p>The autonomous system (AS) number for Border Gateway Protocol (BGP) configuration.</p> <p>The valid values are 1-2147483647.</p>"
+          "documentation":"<p>The autonomous system number (ASN). The valid range is from 1 to 2147483646 for Border Gateway Protocol (BGP) configuration. If you provide a number greater than the maximum, an error is returned. Use <code>asnLong</code> instead.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
+        },
+        "asnLong":{
+          "shape":"LongAsn",
+          "documentation":"<p>The long ASN for the virtual interface. The valid range is from 1 to 4294967294 for BGP configuration.</p> <note> <p>You can use <code>asnLong</code> or <code>asn</code>, but not both. We recommend using <code>asnLong</code> as it supports a greater pool of numbers. </p> <ul> <li> <p>The <code>asnLong</code> attribute accepts both ASN and long ASN ranges.</p> </li> <li> <p>If you provide a value in the same API call for both <code>asn</code> and <code>asnLong</code>, the API will only accept the value for <code>asnLong</code>.</p> </li> </ul> </note>"
         },
         "amazonSideAsn":{
           "shape":"LongAsn",
-          "documentation":"<p>The autonomous system number (ASN) for the Amazon side of the connection.</p>"
+          "documentation":"<p>The autonomous system number (AS) for the Amazon side of the connection.</p>"
         },
         "authKey":{
           "shape":"BGPAuthKey",
@@ -3803,7 +3920,7 @@
         },
         "virtualInterfaceState":{
           "shape":"VirtualInterfaceState",
-          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
+          "documentation":"<p>The state of the virtual interface. The following are the possible values:</p> <ul> <li> <p> <code>confirming</code>: The creation of the virtual interface is pending confirmation from the virtual interface owner. If the owner of the virtual interface is different from the owner of the connection on which it is provisioned, then the virtual interface will remain in this state until it is confirmed by the virtual interface owner.</p> </li> <li> <p> <code>verifying</code>: This state only applies to public virtual interfaces. Each public virtual interface needs validation before the virtual interface can be created.</p> </li> <li> <p> <code>pending</code>: A virtual interface is in this state from the time that it is created until the virtual interface is ready to forward traffic.</p> </li> <li> <p> <code>available</code>: A virtual interface that is able to forward traffic.</p> </li> <li> <p> <code>down</code>: A virtual interface that is BGP down.</p> </li> <li> <p> <code>testing</code>: A virtual interface is in this state immediately after calling <a>StartBgpFailoverTest</a> and remains in this state during the duration of the test.</p> </li> <li> <p> <code>deleting</code>: A virtual interface is in this state immediately after calling <a>DeleteVirtualInterface</a> until it can no longer forward traffic.</p> </li> <li> <p> <code>deleted</code>: A virtual interface that cannot forward traffic.</p> </li> <li> <p> <code>rejected</code>: The virtual interface owner has declined creation of the virtual interface. If a virtual interface in the <code>Confirming</code> state is deleted by the virtual interface owner, the virtual interface enters the <code>Rejected</code> state.</p> </li> <li> <p> <code>unknown</code>: The state of the virtual interface is not available.</p> </li> </ul>"
         },
         "customerRouterConfig":{
           "shape":"RouterConfig",
@@ -3871,6 +3988,7 @@
         "pending",
         "available",
         "down",
+        "testing",
         "deleting",
         "deleted",
         "rejected",
@@ -3926,6 +4044,10 @@
         "virtualInterfaces":{
           "shape":"VirtualInterfaceList",
           "documentation":"<p>The virtual interfaces</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/discovery/2015-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/discovery/2015-11-01/service-2.json 2.31.35-1/awscli/botocore/data/discovery/2015-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/discovery/2015-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/discovery/2015-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -665,8 +665,7 @@
     },
     "AssociateConfigurationItemsToApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AuthorizationErrorException":{
       "type":"structure",
@@ -1018,8 +1017,7 @@
     },
     "CreateTagsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomerAgentInfo":{
       "type":"structure",
@@ -1243,8 +1241,7 @@
     },
     "DeleteApplicationsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTagsRequest":{
       "type":"structure",
@@ -1262,8 +1259,7 @@
     },
     "DeleteTagsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletionConfigurationItemType":{
       "type":"string",
@@ -1561,8 +1557,7 @@
     },
     "DisassociateConfigurationItemsFromApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EC2InstanceType":{
       "type":"string",
@@ -1802,8 +1797,7 @@
     },
     "GetDiscoverySummaryRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetDiscoverySummaryResponse":{
       "type":"structure",
@@ -2260,8 +2254,7 @@
     },
     "StartContinuousExportRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartContinuousExportResponse":{
       "type":"structure",
@@ -2520,8 +2513,7 @@
     },
     "UpdateApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UsageMetricBasis":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dlm/2018-01-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/dlm/2018-01-12/service-2.json 2.31.35-1/awscli/botocore/data/dlm/2018-01-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/dlm/2018-01-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dlm/2018-01-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,8 +469,7 @@
     },
     "DeleteLifecyclePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeprecateRule":{
       "type":"structure",
@@ -1356,8 +1355,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1438,8 +1436,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLifecyclePolicyRequest":{
       "type":"structure",
@@ -1495,8 +1492,7 @@
     },
     "UpdateLifecyclePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "VariableTagsList":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dms/2016-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/dms/2016-01-01/paginators-1.json 2.31.35-1/awscli/botocore/data/dms/2016-01-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/dms/2016-01-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dms/2016-01-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -83,6 +83,18 @@
       "output_token": "Marker",
       "limit_key": "MaxRecords",
       "result_key": "DataMigrations"
+    },
+    "DescribeMetadataModelChildren": {
+      "input_token": "Marker",
+      "output_token": "Marker",
+      "limit_key": "MaxRecords",
+      "result_key": "MetadataModelChildren"
+    },
+    "DescribeMetadataModelCreations": {
+      "input_token": "Marker",
+      "output_token": "Marker",
+      "limit_key": "MaxRecords",
+      "result_key": "Requests"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/dms/2016-01-01/service-2.json 2.31.35-1/awscli/botocore/data/dms/2016-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/dms/2016-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dms/2016-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -54,7 +54,37 @@
         {"shape":"AccessDeniedFault"},
         {"shape":"ResourceNotFoundFault"}
       ],
-      "documentation":"<p>Starts the analysis of up to 20 source databases to recommend target engines for each source database. This is a batch version of <a href=\"https://docs.aws.amazon.com/dms/latest/APIReference/API_StartRecommendations.html\">StartRecommendations</a>.</p> <p>The result of analysis of each source database is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of <code>200</code>.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Starts the analysis of up to 20 source databases to recommend target engines for each source database. This is a batch version of <a href=\"https://docs.aws.amazon.com/dms/latest/APIReference/API_StartRecommendations.html\">StartRecommendations</a>.</p> <p>The result of analysis of each source database is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of <code>200</code>.</p>"
+    },
+    "CancelMetadataModelConversion":{
+      "name":"CancelMetadataModelConversion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CancelMetadataModelConversionMessage"},
+      "output":{"shape":"CancelMetadataModelConversionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"InvalidResourceStateFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Cancels a single metadata model conversion operation that was started with <code>StartMetadataModelConversion</code>.</p>"
+    },
+    "CancelMetadataModelCreation":{
+      "name":"CancelMetadataModelCreation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CancelMetadataModelCreationMessage"},
+      "output":{"shape":"CancelMetadataModelCreationResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"InvalidResourceStateFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Cancels a single metadata model creation operation that was started with <code>StartMetadataModelCreation</code>.</p>"
     },
     "CancelReplicationTaskAssessmentRun":{
       "name":"CancelReplicationTaskAssessmentRun",
@@ -160,7 +190,7 @@
         {"shape":"S3ResourceNotFoundFault"},
         {"shape":"ResourceQuotaExceededFault"}
       ],
-      "documentation":"<p>Creates a Fleet Advisor collector using the specified parameters.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Creates a Fleet Advisor collector using the specified parameters.</p>"
     },
     "CreateInstanceProfile":{
       "name":"CreateInstanceProfile",
@@ -381,7 +411,7 @@
         {"shape":"CollectorNotFoundFault"},
         {"shape":"AccessDeniedFault"}
       ],
-      "documentation":"<p>Deletes the specified Fleet Advisor collector.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Deletes the specified Fleet Advisor collector.</p>"
     },
     "DeleteFleetAdvisorDatabases":{
       "name":"DeleteFleetAdvisorDatabases",
@@ -396,7 +426,7 @@
         {"shape":"InvalidOperationFault"},
         {"shape":"AccessDeniedFault"}
       ],
-      "documentation":"<p>Deletes the specified Fleet Advisor collector databases.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Deletes the specified Fleet Advisor collector databases.</p>"
     },
     "DeleteInstanceProfile":{
       "name":"DeleteInstanceProfile",
@@ -695,7 +725,7 @@
       "errors":[
         {"shape":"InvalidResourceStateFault"}
       ],
-      "documentation":"<p>Returns a list of the Fleet Advisor collectors in your account.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Returns a list of the Fleet Advisor collectors in your account.</p>"
     },
     "DescribeFleetAdvisorDatabases":{
       "name":"DescribeFleetAdvisorDatabases",
@@ -708,7 +738,7 @@
       "errors":[
         {"shape":"InvalidResourceStateFault"}
       ],
-      "documentation":"<p>Returns a list of Fleet Advisor databases in your account.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Returns a list of Fleet Advisor databases in your account.</p>"
     },
     "DescribeFleetAdvisorLsaAnalysis":{
       "name":"DescribeFleetAdvisorLsaAnalysis",
@@ -721,7 +751,7 @@
       "errors":[
         {"shape":"InvalidResourceStateFault"}
       ],
-      "documentation":"<p>Provides descriptions of large-scale assessment (LSA) analyses produced by your Fleet Advisor collectors. </p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Provides descriptions of large-scale assessment (LSA) analyses produced by your Fleet Advisor collectors. </p>"
     },
     "DescribeFleetAdvisorSchemaObjectSummary":{
       "name":"DescribeFleetAdvisorSchemaObjectSummary",
@@ -734,7 +764,7 @@
       "errors":[
         {"shape":"InvalidResourceStateFault"}
       ],
-      "documentation":"<p>Provides descriptions of the schemas discovered by your Fleet Advisor collectors.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Provides descriptions of the schemas discovered by your Fleet Advisor collectors.</p>"
     },
     "DescribeFleetAdvisorSchemas":{
       "name":"DescribeFleetAdvisorSchemas",
@@ -747,7 +777,7 @@
       "errors":[
         {"shape":"InvalidResourceStateFault"}
       ],
-      "documentation":"<p>Returns a list of schemas detected by Fleet Advisor Collectors in your account.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Returns a list of schemas detected by Fleet Advisor Collectors in your account.</p>"
     },
     "DescribeInstanceProfiles":{
       "name":"DescribeInstanceProfiles",
@@ -764,6 +794,20 @@
       ],
       "documentation":"<p>Returns a paginated list of instance profiles for your account in the current region.</p>"
     },
+    "DescribeMetadataModel":{
+      "name":"DescribeMetadataModel",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMetadataModelMessage"},
+      "output":{"shape":"DescribeMetadataModelResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Gets detailed information about the specified metadata model, including its definition and corresponding converted objects in the target database if applicable.</p>"
+    },
     "DescribeMetadataModelAssessments":{
       "name":"DescribeMetadataModelAssessments",
       "http":{
@@ -777,6 +821,20 @@
       ],
       "documentation":"<p>Returns a paginated list of metadata model assessments for your account in the current region.</p>"
     },
+    "DescribeMetadataModelChildren":{
+      "name":"DescribeMetadataModelChildren",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMetadataModelChildrenMessage"},
+      "output":{"shape":"DescribeMetadataModelChildrenResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Gets a list of child metadata models for the specified metadata model in the database hierarchy.</p>"
+    },
     "DescribeMetadataModelConversions":{
       "name":"DescribeMetadataModelConversions",
       "http":{
@@ -790,6 +848,20 @@
       ],
       "documentation":"<p>Returns a paginated list of metadata model conversions for a migration project.</p>"
     },
+    "DescribeMetadataModelCreations":{
+      "name":"DescribeMetadataModelCreations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMetadataModelCreationsMessage"},
+      "output":{"shape":"DescribeMetadataModelCreationsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Returns a paginated list of metadata model creation requests for a migration project.</p>"
+    },
     "DescribeMetadataModelExportsAsScript":{
       "name":"DescribeMetadataModelExportsAsScript",
       "http":{
@@ -865,7 +937,7 @@
       "errors":[
         {"shape":"ResourceNotFoundFault"}
       ],
-      "documentation":"<p>For internal use only</p>"
+      "documentation":"<p>Returns a list of upcoming maintenance events for replication instances in your account in the current Region.</p>"
     },
     "DescribeRecommendationLimitations":{
       "name":"DescribeRecommendationLimitations",
@@ -879,7 +951,7 @@
         {"shape":"InvalidResourceStateFault"},
         {"shape":"AccessDeniedFault"}
       ],
-      "documentation":"<p>Returns a paginated list of limitations for recommendations of target Amazon Web Services engines.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Returns a paginated list of limitations for recommendations of target Amazon Web Services engines.</p>"
     },
     "DescribeRecommendations":{
       "name":"DescribeRecommendations",
@@ -893,7 +965,7 @@
         {"shape":"InvalidResourceStateFault"},
         {"shape":"AccessDeniedFault"}
       ],
-      "documentation":"<p>Returns a paginated list of target engine recommendations for your source databases.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Returns a paginated list of target engine recommendations for your source databases.</p>"
     },
     "DescribeRefreshSchemasStatus":{
       "name":"DescribeRefreshSchemasStatus",
@@ -1083,6 +1155,21 @@
       ],
       "documentation":"<p>Saves a copy of a database migration assessment report to your Amazon S3 bucket. DMS can save your assessment report as a comma-separated value (CSV) or a PDF file. </p>"
     },
+    "GetTargetSelectionRules":{
+      "name":"GetTargetSelectionRules",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetTargetSelectionRulesMessage"},
+      "output":{"shape":"GetTargetSelectionRulesResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"InvalidResourceStateFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Converts source selection rules into their target counterparts for schema conversion operations.</p>"
+    },
     "ImportCertificate":{
       "name":"ImportCertificate",
       "http":{
@@ -1404,7 +1491,7 @@
         {"shape":"InvalidResourceStateFault"},
         {"shape":"ResourceNotFoundFault"}
       ],
-      "documentation":"<p>Runs large-scale assessment (LSA) analysis on every Fleet Advisor collector in your account.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Runs large-scale assessment (LSA) analysis on every Fleet Advisor collector in your account.</p>"
     },
     "StartDataMigration":{
       "name":"StartDataMigration",
@@ -1483,6 +1570,22 @@
       ],
       "documentation":"<p>Converts your source database objects to a format compatible with the target database. </p>"
     },
+    "StartMetadataModelCreation":{
+      "name":"StartMetadataModelCreation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartMetadataModelCreationMessage"},
+      "output":{"shape":"StartMetadataModelCreationResponse"},
+      "errors":[
+        {"shape":"ResourceAlreadyExistsFault"},
+        {"shape":"ResourceNotFoundFault"},
+        {"shape":"ResourceQuotaExceededFault"},
+        {"shape":"AccessDeniedFault"}
+      ],
+      "documentation":"<p>Creates source metadata model of the given type with the specified properties for schema conversion operations.</p> <note> <p>This action supports only these directions: from SQL Server to Aurora PostgreSQL, or from SQL Server to RDS for PostgreSQL.</p> </note>"
+    },
     "StartMetadataModelExportAsScript":{
       "name":"StartMetadataModelExportAsScript",
       "http":{
@@ -1555,7 +1658,7 @@
         {"shape":"AccessDeniedFault"},
         {"shape":"ResourceNotFoundFault"}
       ],
-      "documentation":"<p>Starts the analysis of your source database to provide recommendations of target engines.</p> <p>You can create recommendations for multiple source databases using <a href=\"https://docs.aws.amazon.com/dms/latest/APIReference/API_BatchStartRecommendations.html\">BatchStartRecommendations</a>.</p>"
+      "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Starts the analysis of your source database to provide recommendations of target engines.</p> <p>You can create recommendations for multiple source databases using <a href=\"https://docs.aws.amazon.com/dms/latest/APIReference/API_BatchStartRecommendations.html\">BatchStartRecommendations</a>.</p>"
     },
     "StartReplication":{
       "name":"StartReplication",
@@ -1755,8 +1858,7 @@
     },
     "AddTagsToResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "ApplyPendingMaintenanceActionMessage":{
@@ -1773,7 +1875,7 @@
         },
         "ApplyAction":{
           "shape":"String",
-          "documentation":"<p>The pending maintenance action to apply to this resource.</p> <p>Valid values: <code>os-upgrade</code>, <code>system-update</code>, <code>db-upgrade</code> </p>"
+          "documentation":"<p>The pending maintenance action to apply to this resource.</p> <p>Valid values: <code>os-upgrade</code>, <code>system-update</code>, <code>db-upgrade</code>, <code>os-patch</code> </p>"
         },
         "OptInType":{
           "shape":"String",
@@ -1883,6 +1985,52 @@
     },
     "Boolean":{"type":"boolean"},
     "BooleanOptional":{"type":"boolean"},
+    "CancelMetadataModelConversionMessage":{
+      "type":"structure",
+      "required":[
+        "MigrationProjectIdentifier",
+        "RequestIdentifier"
+      ],
+      "members":{
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "RequestIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the metadata model conversion operation to cancel. This operation was initiated by StartMetadataModelConversion.</p>"
+        }
+      }
+    },
+    "CancelMetadataModelConversionResponse":{
+      "type":"structure",
+      "members":{
+        "Request":{"shape":"SchemaConversionRequest"}
+      }
+    },
+    "CancelMetadataModelCreationMessage":{
+      "type":"structure",
+      "required":[
+        "MigrationProjectIdentifier",
+        "RequestIdentifier"
+      ],
+      "members":{
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "RequestIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the metadata model creation operation to cancel. This operation was initiated by <code>StartMetadataModelCreation</code>.</p>"
+        }
+      }
+    },
+    "CancelMetadataModelCreationResponse":{
+      "type":"structure",
+      "members":{
+        "Request":{"shape":"SchemaConversionRequest"}
+      }
+    },
     "CancelReplicationTaskAssessmentRunMessage":{
       "type":"structure",
       "required":["ReplicationTaskAssessmentRunArn"],
@@ -2202,6 +2350,10 @@
           "shape":"SourceDataSettings",
           "documentation":"<p>Specifies information about the source data provider.</p>"
         },
+        "TargetDataSettings":{
+          "shape":"TargetDataSettings",
+          "documentation":"<p>Specifies information about the target data provider.</p>"
+        },
         "NumberOfJobs":{
           "shape":"IntegerOptional",
           "documentation":"<p>The number of parallel jobs that trigger parallel threads to unload the tables from the source, and then load them to the target.</p>"
@@ -2242,7 +2394,11 @@
         },
         "Engine":{
           "shape":"String",
-          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, <code>db2</code>, <code>db2-zos</code> and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+        },
+        "Virtual":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the data provider is virtual.</p>"
         },
         "Settings":{
           "shape":"DataProviderSettings",
@@ -2526,7 +2682,7 @@
         },
         "KmsKeyArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses your default encryption key.</p> <p>KMS creates the default encryption key for your Amazon Web Services account. Your Amazon Web Services account has a different default encryption key for each Amazon Web Services Region.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses an Amazon Web Services owned encryption key to encrypt your resources.</p>"
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
@@ -2755,7 +2911,7 @@
         },
         "KerberosAuthenticationSettings":{
           "shape":"KerberosAuthenticationSettings",
-          "documentation":"<p>Specifies the ID of the secret that stores the key cache file required for kerberos authentication, when creating a replication instance.</p>"
+          "documentation":"<p>Specifies the settings required for kerberos authentication when creating the replication instance.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2784,7 +2940,7 @@
         },
         "ReplicationSubnetGroupDescription":{
           "shape":"String",
-          "documentation":"<p>The description for the subnet group.</p>"
+          "documentation":"<p>The description for the subnet group. </p> <p>Constraints: This parameter Must not contain non-printable control characters.</p>"
         },
         "SubnetIds":{
           "shape":"SubnetIdentifierList",
@@ -2933,6 +3089,10 @@
           "shape":"SourceDataSettings",
           "documentation":"<p>Specifies information about the data migration's source data provider.</p>"
         },
+        "TargetDataSettings":{
+          "shape":"TargetDataSettings",
+          "documentation":"<p>Specifies information about the data migration's target data provider.</p>"
+        },
         "DataMigrationStatistics":{
           "shape":"DataMigrationStatistics",
           "documentation":"<p>Provides information about the data migration's run, including start and stop time, latency, and data migration progress.</p>"
@@ -3049,7 +3209,11 @@
         },
         "Engine":{
           "shape":"String",
-          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, <code>db2</code>, <code>db2-zos</code> and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+        },
+        "Virtual":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the data provider is virtual.</p>"
         },
         "Settings":{
           "shape":"DataProviderSettings",
@@ -3124,6 +3288,14 @@
           "shape":"MariaDbDataProviderSettings",
           "documentation":"<p>Provides information that defines a MariaDB data provider.</p>"
         },
+        "IbmDb2LuwSettings":{
+          "shape":"IbmDb2LuwDataProviderSettings",
+          "documentation":"<p>Provides information that defines an IBM DB2 LUW data provider.</p>"
+        },
+        "IbmDb2zOsSettings":{
+          "shape":"IbmDb2zOsDataProviderSettings",
+          "documentation":"<p>Provides information that defines an IBM DB2 for z/OS data provider.</p>"
+        },
         "MongoDbSettings":{
           "shape":"MongoDbDataProviderSettings",
           "documentation":"<p>Provides information that defines a MongoDB data provider.</p>"
@@ -3511,8 +3683,7 @@
     },
     "DeleteReplicationSubnetGroupResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "DeleteReplicationTaskAssessmentRunMessage":{
@@ -3559,8 +3730,7 @@
     },
     "DescribeAccountAttributesMessage":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "DescribeAccountAttributesResponse":{
@@ -3588,6 +3758,10 @@
           "shape":"String",
           "documentation":"<p>ARN of a replication instance on which you want to base the default list of individual assessments.</p>"
         },
+        "ReplicationConfigArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) of a serverless replication on which you want to base the default list of individual assessments.</p>"
+        },
         "SourceEngineName":{
           "shape":"String",
           "documentation":"<p>Name of a database engine that the specified replication instance supports as a source.</p>"
@@ -3692,7 +3866,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The name or Amazon Resource Name (ARN) for the schema conversion project to describe.</p>"
         }
       }
@@ -3932,7 +4106,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>Filters applied to event subscriptions.</p> <p>Valid filter names: event-subscription-arn | event-subscription-id </p>"
+          "documentation":"<p>Filters applied to event subscriptions.</p> <p>Valid filter names: <code>event-subscription-arn</code> | <code>event-subscription-id</code> </p>"
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
@@ -4020,7 +4194,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The name or Amazon Resource Name (ARN) for the migration project.</p>"
         },
         "Filters":{
@@ -4145,7 +4319,7 @@
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
-          "documentation":"<p>Sets the maximum number of records returned in the response.</p>"
+          "documentation":"<important> <p> End of support notice: On May 20, 2026, Amazon Web Services will end support for Amazon Web Services DMS Fleet Advisor;. After May 20, 2026, you will no longer be able to access the Amazon Web Services DMS Fleet Advisor; console or Amazon Web Services DMS Fleet Advisor; resources. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/dms_fleet.advisor-end-of-support.html\">Amazon Web Services DMS Fleet Advisor end of support</a>. </p> </important> <p>Sets the maximum number of records returned in the response.</p>"
         },
         "NextToken":{
           "shape":"String",
@@ -4231,7 +4405,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The name or Amazon Resource Name (ARN) of the migration project.</p>"
         },
         "Filters":{
@@ -4261,12 +4435,55 @@
         }
       }
     },
+    "DescribeMetadataModelChildrenMessage":{
+      "type":"structure",
+      "required":[
+        "SelectionRules",
+        "MigrationProjectIdentifier",
+        "Origin"
+      ],
+      "members":{
+        "SelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string that specifies which metadata model's children to retrieve. Only one selection rule with \"rule-action\": \"explicit\" can be provided. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.html\">Selection Rules</a> in the DMS User Guide.</p>"
+        },
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "Origin":{
+          "shape":"OriginTypeValue",
+          "documentation":"<p>Specifies whether to retrieve metadata from the source or target tree. Valid values: SOURCE | TARGET</p>"
+        },
+        "Marker":{
+          "shape":"String",
+          "documentation":"<p>Specifies the unique pagination token that indicates where the next page should start. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords.</p>"
+        },
+        "MaxRecords":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The maximum number of metadata model children to include in the response. If more items exist than the specified MaxRecords value, a marker is included in the response so that the remaining results can be retrieved.</p>"
+        }
+      }
+    },
+    "DescribeMetadataModelChildrenResponse":{
+      "type":"structure",
+      "members":{
+        "Marker":{
+          "shape":"String",
+          "documentation":"<p>Specifies the unique pagination token that makes it possible to display the next page of metadata model children. If a marker is returned, there are more metadata model children available.</p>"
+        },
+        "MetadataModelChildren":{
+          "shape":"MetadataModelReferenceList",
+          "documentation":"<p>A list of child metadata models.</p>"
+        }
+      }
+    },
     "DescribeMetadataModelConversionsMessage":{
       "type":"structure",
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "Filters":{
@@ -4296,12 +4513,47 @@
         }
       }
     },
-    "DescribeMetadataModelExportsAsScriptMessage":{
+    "DescribeMetadataModelCreationsMessage":{
       "type":"structure",
       "required":["MigrationProjectIdentifier"],
       "members":{
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>Filters applied to the metadata model creation requests described in the form of key-value pairs. The supported filters are request-id and status.</p>"
+        },
+        "Marker":{
+          "shape":"String",
+          "documentation":"<p>Specifies the unique pagination token that makes it possible to display the next page of metadata model creation requests. If Marker is returned by a previous response, there are more metadata model creation requests available.</p>"
+        },
+        "MaxRecords":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The maximum number of metadata model creation requests to include in the response. If more requests exist than the specified MaxRecords value, a pagination token is provided in the response so that you can retrieve the remaining results.</p>"
+        },
         "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        }
+      }
+    },
+    "DescribeMetadataModelCreationsResponse":{
+      "type":"structure",
+      "members":{
+        "Marker":{
           "shape":"String",
+          "documentation":"<p>Specifies the unique pagination token that makes it possible to display the next page of metadata model creation requests. If Marker is returned, there are more metadata model creation requests available.</p>"
+        },
+        "Requests":{
+          "shape":"SchemaConversionRequestList",
+          "documentation":"<p>A list of metadata model creation requests. The ExportSqlDetails field will never be populated for the DescribeMetadataModelCreations operation.</p>"
+        }
+      }
+    },
+    "DescribeMetadataModelExportsAsScriptMessage":{
+      "type":"structure",
+      "required":["MigrationProjectIdentifier"],
+      "members":{
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "Filters":{
@@ -4336,7 +4588,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "Filters":{
@@ -4371,7 +4623,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "Filters":{
@@ -4401,6 +4653,49 @@
         }
       }
     },
+    "DescribeMetadataModelMessage":{
+      "type":"structure",
+      "required":[
+        "SelectionRules",
+        "MigrationProjectIdentifier",
+        "Origin"
+      ],
+      "members":{
+        "SelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string that specifies which metadata model to retrieve. Only one selection rule with \"rule-action\": \"explicit\" can be provided. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.html\">Selection Rules</a> in the DMS User Guide.</p>"
+        },
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "Origin":{
+          "shape":"OriginTypeValue",
+          "documentation":"<p>Specifies whether to retrieve metadata from the source or target tree. Valid values: SOURCE | TARGET</p>"
+        }
+      }
+    },
+    "DescribeMetadataModelResponse":{
+      "type":"structure",
+      "members":{
+        "MetadataModelName":{
+          "shape":"String",
+          "documentation":"<p>The name of the metadata model.</p>"
+        },
+        "MetadataModelType":{
+          "shape":"String",
+          "documentation":"<p>The type of the metadata model.</p>"
+        },
+        "TargetMetadataModels":{
+          "shape":"MetadataModelReferenceList",
+          "documentation":"<p>A list of counterpart metadata models in the target. This field is populated only when Origin is SOURCE and after the object has been converted by DMS Schema Conversion.</p>"
+        },
+        "Definition":{
+          "shape":"String",
+          "documentation":"<p>The SQL text of the metadata model. This field might not be populated for some metadata models.</p>"
+        }
+      }
+    },
     "DescribeMigrationProjectsMessage":{
       "type":"structure",
       "members":{
@@ -4500,7 +4795,7 @@
       "members":{
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>Filters applied to the limitations described in the form of key-value pairs.</p>"
+          "documentation":"<p>Filters applied to the limitations described in the form of key-value pairs.</p> <p>Valid filter names: <code>database-id</code> | <code>engine-name</code> </p>"
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
@@ -4530,7 +4825,7 @@
       "members":{
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>Filters applied to the target engine recommendations described in the form of key-value pairs.</p>"
+          "documentation":"<p>Filters applied to the target engine recommendations described in the form of key-value pairs.</p> <p>Valid filter names: <code>database-id</code> | <code>engine-name</code> </p>"
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
@@ -4889,7 +5184,7 @@
       "members":{
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>Filters applied to the replications.</p>"
+          "documentation":"<p>Filters applied to the replications.</p> <p> Valid filter names: <code>replication-config-arn</code> | <code>replication-config-id</code> </p>"
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
@@ -5528,7 +5823,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -5734,6 +6029,32 @@
       },
       "documentation":"<p>Settings in JSON format for the source GCP MySQL endpoint.</p>"
     },
+    "GetTargetSelectionRulesMessage":{
+      "type":"structure",
+      "required":[
+        "MigrationProjectIdentifier",
+        "SelectionRules"
+      ],
+      "members":{
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "SelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string representing the source selection rules for conversion. Selection rules must contain only supported metadata model types. For more information, see Selection Rules in the DMS User Guide.</p>"
+        }
+      }
+    },
+    "GetTargetSelectionRulesResponse":{
+      "type":"structure",
+      "members":{
+        "TargetSelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string representing the counterpart selection rules in the target.</p>"
+        }
+      }
+    },
     "IBMDb2Settings":{
       "type":"structure",
       "members":{
@@ -5796,6 +6117,74 @@
       },
       "documentation":"<p>Provides information that defines an IBM Db2 LUW endpoint.</p>"
     },
+    "IbmDb2LuwDataProviderSettings":{
+      "type":"structure",
+      "members":{
+        "ServerName":{
+          "shape":"String",
+          "documentation":"<p>The name of the DB2 LUW server.</p>"
+        },
+        "Port":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The port value for the DB2 LUW data provider.</p>"
+        },
+        "DatabaseName":{
+          "shape":"String",
+          "documentation":"<p>The database name on the DB2 LUW data provider.</p>"
+        },
+        "SslMode":{
+          "shape":"DmsSslModeValue",
+          "documentation":"<p>The SSL mode used to connect to the DB2 LUW data provider. The default value is <code>none</code>. Valid Values: <code>none</code> and <code>verify-ca</code>.</p>"
+        },
+        "CertificateArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
+        }
+      },
+      "documentation":"<p>Provides information about an IBM DB2 LUW data provider.</p>"
+    },
+    "IbmDb2zOsDataProviderSettings":{
+      "type":"structure",
+      "members":{
+        "ServerName":{
+          "shape":"String",
+          "documentation":"<p>The name of the DB2 for z/OS server.</p>"
+        },
+        "Port":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The port value for the DB2 for z/OS data provider.</p>"
+        },
+        "DatabaseName":{
+          "shape":"String",
+          "documentation":"<p>The database name on the DB2 for z/OS data provider.</p>"
+        },
+        "SslMode":{
+          "shape":"DmsSslModeValue",
+          "documentation":"<p>The SSL mode used to connect to the DB2 for z/OS data provider. The default value is <code>none</code>. Valid Values: <code>none</code> and <code>verify-ca</code>.</p>"
+        },
+        "CertificateArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
+        }
+      },
+      "documentation":"<p>Provides information about an IBM DB2 for z/OS data provider.</p>"
+    },
     "ImportCertificateMessage":{
       "type":"structure",
       "required":["CertificateIdentifier"],
@@ -5848,7 +6237,7 @@
         },
         "KmsKeyArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses your default encryption key.</p> <p>KMS creates the default encryption key for your Amazon Web Services account. Your Amazon Web Services account has a different default encryption key for each Amazon Web Services Region.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses an Amazon Web Services owned encryption key to encrypt your resources.</p>"
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
@@ -6135,18 +6524,18 @@
       "members":{
         "KeyCacheSecretId":{
           "shape":"String",
-          "documentation":"<p>Specifies the secret ID of the key cache for the replication instance.</p>"
+          "documentation":"<p>Specifies the ID of the secret that stores the key cache file required for kerberos authentication.</p>"
         },
         "KeyCacheSecretIamArn":{
           "shape":"String",
-          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the IAM role that grants Amazon Web Services DMS access to the secret containing key cache file for the replication instance.</p>"
+          "documentation":"<p>Specifies the Amazon Resource Name (ARN) of the IAM role that grants Amazon Web Services DMS access to the secret containing key cache file for the kerberos authentication.</p>"
         },
         "Krb5FileContents":{
           "shape":"String",
-          "documentation":"<p>Specifies the ID of the secret that stores the key cache file required for kerberos authentication of the replication instance.</p>"
+          "documentation":"<p>Specifies the contents of krb5 configuration file required for kerberos authentication.</p>"
         }
       },
-      "documentation":"<p>Specifies using Kerberos authentication settings for use with DMS.</p>"
+      "documentation":"<p>Specifies the settings required for kerberos authentication when creating the replication instance.</p>"
     },
     "KeyList":{
       "type":"list",
@@ -6288,6 +6677,14 @@
         "CertificateArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a MariaDB data provider.</p>"
@@ -6303,6 +6700,35 @@
         "json-unformatted"
       ]
     },
+    "MetadataModelProperties":{
+      "type":"structure",
+      "members":{
+        "StatementProperties":{
+          "shape":"StatementProperties",
+          "documentation":"<p>The properties of the statement.</p>"
+        }
+      },
+      "documentation":"<p>The properties of metadata model in JSON format. This object is a Union. Only one member of this object can be specified or returned.</p>",
+      "union":true
+    },
+    "MetadataModelReference":{
+      "type":"structure",
+      "members":{
+        "MetadataModelName":{
+          "shape":"String",
+          "documentation":"<p>The name of the metadata model.</p>"
+        },
+        "SelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string representing metadata model location.</p>"
+        }
+      },
+      "documentation":"<p>A reference to a metadata model, including its name and selection rules for location identification.</p>"
+    },
+    "MetadataModelReferenceList":{
+      "type":"list",
+      "member":{"shape":"MetadataModelReference"}
+    },
     "MicrosoftSQLServerSettings":{
       "type":"structure",
       "members":{
@@ -6376,7 +6802,7 @@
         },
         "AuthenticationMethod":{
           "shape":"SqlServerAuthenticationMethod",
-          "documentation":"<p>Specifies using Kerberos authentication with Microsoft SQL Server.</p>"
+          "documentation":"<p>Specifies the authentication method to be used with Microsoft SQL Server.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a Microsoft SQL Server endpoint.</p>"
@@ -6403,6 +6829,14 @@
         "CertificateArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a Microsoft SQL Server data provider.</p>"
@@ -6453,6 +6887,10 @@
       },
       "documentation":"<p>Provides information that defines a migration project.</p>"
     },
+    "MigrationProjectIdentifier":{
+      "type":"string",
+      "max":255
+    },
     "MigrationProjectList":{
       "type":"list",
       "member":{"shape":"MigrationProject"}
@@ -6473,7 +6911,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "ConversionConfiguration":{
@@ -6519,6 +6957,10 @@
           "shape":"SourceDataSettings",
           "documentation":"<p>The new information about the source data provider for the data migration.</p>"
         },
+        "TargetDataSettings":{
+          "shape":"TargetDataSettings",
+          "documentation":"<p>The new information about the target data provider for the data migration.</p>"
+        },
         "NumberOfJobs":{
           "shape":"IntegerOptional",
           "documentation":"<p>The number of parallel jobs that trigger parallel threads to unload the tables from the source, and then load them to the target.</p>"
@@ -6556,7 +6998,11 @@
         },
         "Engine":{
           "shape":"String",
-          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+          "documentation":"<p>The type of database engine for the data provider. Valid values include <code>\"aurora\"</code>, <code>\"aurora-postgresql\"</code>, <code>\"mysql\"</code>, <code>\"oracle\"</code>, <code>\"postgres\"</code>, <code>\"sqlserver\"</code>, <code>redshift</code>, <code>mariadb</code>, <code>mongodb</code>, <code>db2</code>, <code>db2-zos</code> and <code>docdb</code>. A value of <code>\"aurora\"</code> represents Amazon Aurora MySQL-Compatible Edition.</p>"
+        },
+        "Virtual":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the data provider is virtual.</p>"
         },
         "ExactSettings":{
           "shape":"BooleanOptional",
@@ -6778,7 +7224,7 @@
         },
         "KmsKeyArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses your default encryption key.</p> <p>KMS creates the default encryption key for your Amazon Web Services account. Your Amazon Web Services account has a different default encryption key for each Amazon Web Services Region.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key that is used to encrypt the connection parameters for the instance profile.</p> <p>If you don't specify a value for the <code>KmsKeyArn</code> parameter, then DMS uses an Amazon Web Services owned encryption key to encrypt your resources.</p>"
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
@@ -6968,7 +7414,7 @@
         },
         "KerberosAuthenticationSettings":{
           "shape":"KerberosAuthenticationSettings",
-          "documentation":"<p>Specifies the ID of the secret that stores the key cache file required for kerberos authentication, when modifying a replication instance.</p>"
+          "documentation":"<p>Specifies the settings required for kerberos authentication when modifying a replication instance.</p>"
         }
       },
       "documentation":"<p/>"
@@ -7204,6 +7650,13 @@
       },
       "documentation":"<p/>"
     },
+    "MySQLAuthenticationMethod":{
+      "type":"string",
+      "enum":[
+        "password",
+        "iam"
+      ]
+    },
     "MySQLSettings":{
       "type":"structure",
       "members":{
@@ -7266,6 +7719,14 @@
         "ExecuteTimeout":{
           "shape":"IntegerOptional",
           "documentation":"<p>Sets the client statement timeout (in seconds) for a MySQL source endpoint.</p>"
+        },
+        "ServiceAccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The IAM role you can use to authenticate when connecting to your endpoint. Ensure to include <code>iam:PassRole</code> and <code>rds-db:connect</code> actions in permission policy.</p>"
+        },
+        "AuthenticationMethod":{
+          "shape":"MySQLAuthenticationMethod",
+          "documentation":"<p>This attribute allows you to specify the authentication method as \"iam auth\".</p>"
         }
       },
       "documentation":"<p>Provides information that defines a MySQL endpoint.</p>"
@@ -7288,6 +7749,14 @@
         "CertificateArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a MySQL data provider.</p>"
@@ -7386,6 +7855,14 @@
         "SecretsManagerSecurityDbEncryptionAccessRoleArn":{
           "shape":"String",
           "documentation":"<p>The ARN of the IAM role that provides access to the secret in Secrets Manager that contains the TDE password.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines an Oracle data provider.</p>"
@@ -7567,7 +8044,7 @@
         },
         "AuthenticationMethod":{
           "shape":"OracleAuthenticationMethod",
-          "documentation":"<p>Specifies using Kerberos authentication with Oracle.</p>"
+          "documentation":"<p>Specifies the authentication method to be used with Oracle.</p>"
         }
       },
       "documentation":"<p>Provides information that defines an Oracle endpoint.</p>"
@@ -7678,6 +8155,13 @@
         "pglogical"
       ]
     },
+    "PostgreSQLAuthenticationMethod":{
+      "type":"string",
+      "enum":[
+        "password",
+        "iam"
+      ]
+    },
     "PostgreSQLSettings":{
       "type":"structure",
       "members":{
@@ -7780,6 +8264,14 @@
         "DisableUnicodeSourceFilter":{
           "shape":"BooleanOptional",
           "documentation":"<p>Disables the Unicode source filter with PostgreSQL, for values passed into the Selection rule filter on Source Endpoint column values. By default DMS performs source filter comparisons using a Unicode string which can cause look ups to ignore the indexes in the text columns and slow down migrations.</p> <p>Unicode support should only be disabled when using a selection rule filter is on a text column in the Source database that is indexed.</p>"
+        },
+        "ServiceAccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The IAM role arn you can use to authenticate the connection to your endpoint. Ensure to include <code>iam:PassRole</code> and <code>rds-db:connect</code> actions in permission policy.</p>"
+        },
+        "AuthenticationMethod":{
+          "shape":"PostgreSQLAuthenticationMethod",
+          "documentation":"<p>This attribute allows you to specify the authentication method as \"iam auth\".</p>"
         }
       },
       "documentation":"<p>Provides information that defines a PostgreSQL endpoint.</p>"
@@ -7806,10 +8298,66 @@
         "CertificateArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the certificate used for SSL connection.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a PostgreSQL data provider.</p>"
     },
+    "PremigrationAssessmentStatus":{
+      "type":"structure",
+      "members":{
+        "PremigrationAssessmentRunArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of this assessment run.</p>"
+        },
+        "FailOnAssessmentFailure":{
+          "shape":"Boolean",
+          "documentation":"<p>A configurable setting you can set to <code>true</code> (the defualt setting) or <code>false</code>. Use this setting to to stop the replication from starting automatically if the assessment fails. This can help you evaluate the issue that is preventing the replication from running successfully.</p>"
+        },
+        "Status":{
+          "shape":"String",
+          "documentation":"<p>This describes the assessment run status. The status can be one of the following values:</p> <ul> <li> <p> <code>cancelling</code>: The assessment run was canceled.</p> </li> <li> <p> <code>deleting</code>: The assessment run was deleted.</p> </li> <li> <p> <code>failed</code>: At least one individual assessment completed with a failed status. </p> </li> <li> <p> <code>error-provisioning</code>: An internal error occurred while resources were provisioned (during the <code>provisioning</code> status).</p> </li> <li> <p> <code>error-executing</code> An internal error occurred while individual assessments ran (during the <code>running</code> status).</p> </li> <li> <p> <code>invalid state</code>: The assessment run is in an unknown state. </p> </li> <li> <p> <code>passed</code>: All individual assessments have completed and none have a failed status.</p> </li> <li> <p> <code>provisioning</code>: The resources required to run individual assessments are being provisioned. </p> </li> <li> <p> <code>running</code>: Individual assessments are being run. </p> </li> <li> <p> <code>starting</code>: The assessment run is starting, but resources are not yet being provisioned for individual assessments. </p> </li> <li> <p> <code>warning</code>: At least one individual assessment completed with a warning status. </p> </li> </ul>"
+        },
+        "PremigrationAssessmentRunCreationDate":{
+          "shape":"TStamp",
+          "documentation":"<p>The date which the assessment run was created.</p>"
+        },
+        "AssessmentProgress":{"shape":"ReplicationTaskAssessmentRunProgress"},
+        "LastFailureMessage":{
+          "shape":"String",
+          "documentation":"<p>The last message generated by an individual assessment failure.</p>"
+        },
+        "ResultLocationBucket":{
+          "shape":"String",
+          "documentation":"<p>The Amazon S3 bucket that Database Migration Service Serverless created to store the results of this assessment run.</p>"
+        },
+        "ResultLocationFolder":{
+          "shape":"String",
+          "documentation":"<p>The folder within an Amazon S3 bucket where you want Database Migration Service to store the results of this assessment run.</p>"
+        },
+        "ResultEncryptionMode":{
+          "shape":"String",
+          "documentation":"<p>The supported values are <code>SSE_KMS</code> and <code>SSE_S3</code>. If these values are not provided, then the files are not encrypted at rest. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html#CHAP_Target.S3.KMSKeys\">Creating Amazon Web Services KMS keys to encrypt Amazon S3 target objects</a>.</p>"
+        },
+        "ResultKmsKeyArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of a custom KMS encryption key that you specify when you set <code>ResultEncryptionMode</code> to <code>SSE_KMS</code>.</p>"
+        },
+        "ResultStatistic":{"shape":"ReplicationTaskAssessmentRunResultStatistic"}
+      },
+      "documentation":"<p>The results returned in <code>describe-replications</code> to display the results of the premigration assessment from the replication configuration.</p>"
+    },
+    "PremigrationAssessmentStatusList":{
+      "type":"list",
+      "member":{"shape":"PremigrationAssessmentStatus"}
+    },
     "ProvisionData":{
       "type":"structure",
       "members":{
@@ -8088,6 +8636,14 @@
         "DatabaseName":{
           "shape":"String",
           "documentation":"<p>The database name on the Amazon Redshift data provider.</p>"
+        },
+        "S3Path":{
+          "shape":"String",
+          "documentation":"<p>The path for the Amazon S3 bucket that the application uses for accessing the user-defined schema.</p>"
+        },
+        "S3AccessRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN for the role the application uses to access its Amazon S3 bucket.</p>"
         }
       },
       "documentation":"<p>Provides information that defines an Amazon Redshift data provider.</p>"
@@ -8380,8 +8936,7 @@
     },
     "RemoveTagsFromResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "Replication":{
@@ -8415,6 +8970,10 @@
           "shape":"ProvisionData",
           "documentation":"<p>Information about provisioning resources for an DMS serverless replication.</p>"
         },
+        "PremigrationAssessmentStatuses":{
+          "shape":"PremigrationAssessmentStatusList",
+          "documentation":"<p>The status output of premigration assessment in describe-replications.</p>"
+        },
         "StopReason":{
           "shape":"String",
           "documentation":"<p>The reason the replication task was stopped. This response parameter can return one of the following values:</p> <ul> <li> <p> <code>\"Stop Reason NORMAL\"</code> </p> </li> <li> <p> <code>\"Stop Reason RECOVERABLE_ERROR\"</code> </p> </li> <li> <p> <code>\"Stop Reason FATAL_ERROR\"</code> </p> </li> <li> <p> <code>\"Stop Reason FULL_LOAD_ONLY_FINISHED\"</code> </p> </li> <li> <p> <code>\"Stop Reason STOPPED_AFTER_FULL_LOAD\"</code> – Full load completed, with cached changes not applied</p> </li> <li> <p> <code>\"Stop Reason STOPPED_AFTER_CACHED_EVENTS\"</code> – Full load completed, with cached changes applied</p> </li> <li> <p> <code>\"Stop Reason EXPRESS_LICENSE_LIMITS_REACHED\"</code> </p> </li> <li> <p> <code>\"Stop Reason STOPPED_AFTER_DDL_APPLY\"</code> – User-defined stop task after DDL applied</p> </li> <li> <p> <code>\"Stop Reason STOPPED_DUE_TO_LOW_MEMORY\"</code> </p> </li> <li> <p> <code>\"Stop Reason STOPPED_DUE_TO_LOW_DISK\"</code> </p> </li> <li> <p> <code>\"Stop Reason STOPPED_AT_SERVER_TIME\"</code> – User-defined server time for stopping task</p> </li> <li> <p> <code>\"Stop Reason STOPPED_AT_COMMIT_TIME\"</code> – User-defined commit time for stopping task</p> </li> <li> <p> <code>\"Stop Reason RECONFIGURATION_RESTART\"</code> </p> </li> <li> <p> <code>\"Stop Reason RECYCLE_TASK\"</code> </p> </li> </ul>"
@@ -8634,7 +9193,7 @@
         },
         "KerberosAuthenticationSettings":{
           "shape":"KerberosAuthenticationSettings",
-          "documentation":"<p>Specifies the ID of the secret that stores the key cache file required for kerberos authentication, when replicating an instance.</p>"
+          "documentation":"<p>Specifies the settings required for kerberos authentication when replicating an instance.</p>"
         }
       },
       "documentation":"<p>Provides information that defines a replication instance.</p>"
@@ -8943,7 +9502,7 @@
         },
         "Status":{
           "shape":"String",
-          "documentation":"<p>Assessment run status. </p> <p>This status can have one of the following values:</p> <ul> <li> <p> <code>\"cancelling\"</code> – The assessment run was canceled by the <code>CancelReplicationTaskAssessmentRun</code> operation.</p> </li> <li> <p> <code>\"deleting\"</code> – The assessment run was deleted by the <code>DeleteReplicationTaskAssessmentRun</code> operation.</p> </li> <li> <p> <code>\"failed\"</code> – At least one individual assessment completed with a <code>failed</code> status.</p> </li> <li> <p> <code>\"error-provisioning\"</code> – An internal error occurred while resources were provisioned (during <code>provisioning</code> status).</p> </li> <li> <p> <code>\"error-executing\"</code> – An internal error occurred while individual assessments ran (during <code>running</code> status).</p> </li> <li> <p> <code>\"invalid state\"</code> – The assessment run is in an unknown state.</p> </li> <li> <p> <code>\"passed\"</code> – All individual assessments have completed, and none has a <code>failed</code> status.</p> </li> <li> <p> <code>\"provisioning\"</code> – Resources required to run individual assessments are being provisioned.</p> </li> <li> <p> <code>\"running\"</code> – Individual assessments are being run.</p> </li> <li> <p> <code>\"starting\"</code> – The assessment run is starting, but resources are not yet being provisioned for individual assessments.</p> </li> <li> <p> <code>\"warning\"</code> – At least one individual assessment completed with a <code>warning</code> status.</p> </li> </ul>"
+          "documentation":"<p>Assessment run status. </p> <p>This status can have one of the following values:</p> <ul> <li> <p> <code>\"cancelling\"</code> – The assessment run was canceled by the <code>CancelReplicationTaskAssessmentRun</code> operation.</p> </li> <li> <p> <code>\"deleting\"</code> – The assessment run was deleted by the <code>DeleteReplicationTaskAssessmentRun</code> operation.</p> </li> <li> <p> <code>\"failed\"</code> – At least one individual assessment completed with a <code>failed</code> status.</p> </li> <li> <p> <code>\"error-provisioning\"</code> – An internal error occurred while resources were provisioned (during <code>provisioning</code> status).</p> </li> <li> <p> <code>\"error-executing\"</code> – An internal error occurred while individual assessments ran (during <code>running</code> status).</p> </li> <li> <p> <code>\"invalid state\"</code> – The assessment run is in an unknown state.</p> </li> <li> <p> <code>\"passed\"</code> – All individual assessments have completed, and none has a <code>failed</code> status.</p> </li> <li> <p> <code>\"provisioning\"</code> – Resources required to run individual assessments are being provisioned.</p> </li> <li> <p> <code>\"running\"</code> – Individual assessments are being run.</p> </li> <li> <p> <code>\"starting\"</code> – The assessment run is starting, but resources are not yet being provisioned for individual assessments.</p> </li> <li> <p> <code>\"warning\"</code> – At least one individual assessment completed with a <code>warning</code> status or all individual assessments were skipped (completed with a <code>skipped</code> status).</p> </li> </ul>"
         },
         "ReplicationTaskAssessmentRunCreationDate":{
           "shape":"TStamp",
@@ -9032,6 +9591,10 @@
         "Cancelled":{
           "shape":"Integer",
           "documentation":"<p> The number of individual assessments that were cancelled during the assessment run. </p>"
+        },
+        "Skipped":{
+          "shape":"Integer",
+          "documentation":"<p>The number of individual assessments that were skipped during the assessment run.</p>"
         }
       },
       "documentation":"<p>The object containing the result statistics for a completed assessment run.</p>"
@@ -9053,7 +9616,7 @@
         },
         "Status":{
           "shape":"String",
-          "documentation":"<p>Individual assessment status.</p> <p>This status can have one of the following values:</p> <ul> <li> <p> <code>\"cancelled\"</code> </p> </li> <li> <p> <code>\"error\"</code> </p> </li> <li> <p> <code>\"failed\"</code> </p> </li> <li> <p> <code>\"passed\"</code> </p> </li> <li> <p> <code>\"pending\"</code> </p> </li> <li> <p> <code>\"running\"</code> </p> </li> </ul>"
+          "documentation":"<p>Individual assessment status.</p> <p>This status can have one of the following values:</p> <ul> <li> <p> <code>\"cancelled\"</code> </p> </li> <li> <p> <code>\"error\"</code> </p> </li> <li> <p> <code>\"failed\"</code> </p> </li> <li> <p> <code>\"passed\"</code> </p> </li> <li> <p> <code>\"pending\"</code> </p> </li> <li> <p> <code>\"skipped\"</code> </p> </li> <li> <p> <code>\"running\"</code> </p> </li> </ul>"
         },
         "ReplicationTaskIndividualAssessmentStartDate":{
           "shape":"TStamp",
@@ -9354,7 +9917,7 @@
         },
         "DatePartitionTimezone":{
           "shape":"String",
-          "documentation":"<p>When creating an S3 target endpoint, set <code>DatePartitionTimezone</code> to convert the current UTC time into a specified time zone. The conversion occurs when a date partition folder is created and a CDC filename is generated. The time zone format is Area/Location. Use this parameter when <code>DatePartitionedEnabled</code> is set to <code>true</code>, as shown in the following example.</p> <p> <code>s3-settings='{\"DatePartitionEnabled\": true, \"DatePartitionSequence\": \"YYYYMMDDHH\", \"DatePartitionDelimiter\": \"SLASH\", \"DatePartitionTimezone\":\"<i>Asia/Seoul</i>\", \"BucketName\": \"dms-nattarat-test\"}'</code> </p>"
+          "documentation":"<p>When creating an S3 target endpoint, set <code>DatePartitionTimezone</code> to convert the current UTC time into a specified time zone. The conversion occurs when a date partition folder is created and a CDC filename is generated. The time zone format is Area/Location. Use this parameter when <code>DatePartitionedEnabled</code> is set to true, as shown in the following example:</p> <p> <code>s3-settings='{\"DatePartitionEnabled\": true, \"DatePartitionSequence\": \"YYYYMMDDHH\", \"DatePartitionDelimiter\": \"SLASH\", \"DatePartitionTimezone\":\"Asia/Seoul\", \"BucketName\": \"dms-nattarat-test\"}'</code> </p>"
         },
         "AddTrailingPaddingCharacter":{
           "shape":"BooleanOptional",
@@ -9609,7 +10172,7 @@
       "required":["MigrationProjectIdentifier"],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         }
       }
@@ -9631,7 +10194,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -9657,7 +10220,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -9675,6 +10238,42 @@
         }
       }
     },
+    "StartMetadataModelCreationMessage":{
+      "type":"structure",
+      "required":[
+        "MigrationProjectIdentifier",
+        "SelectionRules",
+        "MetadataModelName",
+        "Properties"
+      ],
+      "members":{
+        "MigrationProjectIdentifier":{
+          "shape":"MigrationProjectIdentifier",
+          "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
+        },
+        "SelectionRules":{
+          "shape":"String",
+          "documentation":"<p>The JSON string that specifies the location where the metadata model will be created. Selection rules must specify a single schema. For more information, see Selection Rules in the DMS User Guide.</p>"
+        },
+        "MetadataModelName":{
+          "shape":"String",
+          "documentation":"<p>The name of the metadata model.</p>"
+        },
+        "Properties":{
+          "shape":"MetadataModelProperties",
+          "documentation":"<p>The properties of metadata model in JSON format. This object is a Union. Only one member of this object can be specified or returned.</p>"
+        }
+      }
+    },
+    "StartMetadataModelCreationResponse":{
+      "type":"structure",
+      "members":{
+        "RequestIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the metadata model creation operation.</p>"
+        }
+      }
+    },
     "StartMetadataModelExportAsScriptMessage":{
       "type":"structure",
       "required":[
@@ -9684,7 +10283,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -9718,7 +10317,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -9749,7 +10348,7 @@
       ],
       "members":{
         "MigrationProjectIdentifier":{
-          "shape":"String",
+          "shape":"MigrationProjectIdentifier",
           "documentation":"<p>The migration project name or Amazon Resource Name (ARN).</p>"
         },
         "SelectionRules":{
@@ -9829,6 +10428,10 @@
           "shape":"String",
           "documentation":"<p>The replication type.</p> <p>When the replication type is <code>full-load</code> or <code>full-load-and-cdc</code>, the only valid value for the first run of the replication is <code>start-replication</code>. This option will start the replication.</p> <p>You can also use <a>ReloadTables</a> to reload specific tables that failed during replication instead of restarting the replication.</p> <p>The <code>resume-processing</code> option isn't applicable for a full-load replication, because you can't resume partially loaded tables during the full load phase.</p> <p>For a <code>full-load-and-cdc</code> replication, DMS migrates table data, and then applies data changes that occur on the source. To load all the tables again, and start capturing source changes, use <code>reload-target</code>. Otherwise use <code>resume-processing</code>, to replicate the changes from the last stop position.</p>"
         },
+        "PremigrationAssessmentSettings":{
+          "shape":"String",
+          "documentation":"<p>User-defined settings for the premigration assessment. The possible values are:</p> <ul> <li> <p> <code>ResultLocationFolder</code>: The folder within an Amazon S3 bucket where you want DMS to store the results of this assessment run.</p> </li> <li> <p> <code>ResultEncryptionMode</code>: The supported values are <code>SSE_KMS</code> and <code>SSE_S3</code>. If these values are not provided, then the files are not encrypted at rest. For more information, see <a href=\"https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html#CHAP_Target.S3.KMSKeys\">Creating Amazon Web Services KMS keys to encrypt Amazon S3 target objects</a>.</p> </li> <li> <p> <code>ResultKmsKeyArn</code>: The ARN of a customer KMS encryption key that you specify when you set <code>ResultEncryptionMode</code> to <code>SSE_KMS</code>.</p> </li> <li> <p> <code>IncludeOnly</code>: A space-separated list of names for specific individual assessments that you want to include. These names come from the default list of individual assessments that Database Migration Service supports for the associated migration.</p> </li> <li> <p> <code>Exclude</code>: A space-separated list of names for specific individual assessments that you want to exclude. These names come from the default list of individual assessments that Database Migration Service supports for the associated migration.</p> </li> <li> <p> <code>FailOnAssessmentFailure</code>: A configurable setting you can set to <code>true</code> (the default setting) or <code>false</code>. Use this setting to to stop the replication from starting automatically if the assessment fails. This can help you evaluate the issue that is preventing the replication from running successfully.</p> </li> </ul>"
+        },
         "CdcStartTime":{
           "shape":"TStamp",
           "documentation":"<p>Indicates the start time for a change data capture (CDC) operation. Use either <code>CdcStartTime</code> or <code>CdcStartPosition</code> to specify when you want a CDC operation to start. Specifying both values results in an error.</p>"
@@ -9958,7 +10561,7 @@
         },
         "StartReplicationTaskType":{
           "shape":"StartReplicationTaskTypeValue",
-          "documentation":"<p>The type of replication task to start.</p> <p>When the migration type is <code>full-load</code> or <code>full-load-and-cdc</code>, the only valid value for the first run of the task is <code>start-replication</code>. This option will start the migration.</p> <p>You can also use <a>ReloadTables</a> to reload specific tables that failed during migration instead of restarting the task.</p> <p>The <code>resume-processing</code> option isn't applicable for a full-load task, because you can't resume partially loaded tables during the full load phase.</p> <p>For a <code>full-load-and-cdc</code> task, DMS migrates table data, and then applies data changes that occur on the source. To load all the tables again, and start capturing source changes, use <code>reload-target</code>. Otherwise use <code>resume-processing</code>, to replicate the changes from the last stop position.</p>"
+          "documentation":"<p>The type of replication task to start.</p> <p> <code>start-replication</code> is the only valid action that can be used for the first time a task with the migration type of <code>full-load</code>full-load, <code>full-load-and-cdc</code> or <code>cdc</code> is run. Any other action used for the first time on a given task, such as <code>resume-processing</code> and reload-target will result in data errors.</p> <p>You can also use <a>ReloadTables</a> to reload specific tables that failed during migration instead of restarting the task.</p> <p>For a <code>full-load</code> task, the resume-processing option will reload any tables that were partially loaded or not yet loaded during the full load phase.</p> <p>For a <code>full-load-and-cdc</code> task, DMS migrates table data, and then applies data changes that occur on the source. To load all the tables again, and start capturing source changes, use <code>reload-target</code>. Otherwise use <code>resume-processing</code>, to replicate the changes from the last stop position.</p> <p>For a <code>cdc</code> only task, to start from a specific position, you must use start-replication and also specify the start position. Check the source endpoint DMS documentation for any limitations. For example, not all sources support starting from a time.</p> <note> <p> <code>resume-processing</code> is only available for previously executed tasks.</p> </note>"
         },
         "CdcStartTime":{
           "shape":"TStamp",
@@ -9993,6 +10596,17 @@
         "reload-target"
       ]
     },
+    "StatementProperties":{
+      "type":"structure",
+      "required":["Definition"],
+      "members":{
+        "Definition":{
+          "shape":"String",
+          "documentation":"<p>The SQL text of the statement.</p>"
+        }
+      },
+      "documentation":"<p>The properties of the statement for metadata model creation.</p>"
+    },
     "StopDataMigrationMessage":{
       "type":"structure",
       "required":["DataMigrationIdentifier"],
@@ -10175,6 +10789,14 @@
       "type":"list",
       "member":{"shape":"TableToReload"}
     },
+    "TablePreparationMode":{
+      "type":"string",
+      "enum":[
+        "drop-tables-on-target",
+        "truncate",
+        "do-nothing"
+      ]
+    },
     "TableStatistics":{
       "type":"structure",
       "members":{
@@ -10269,6 +10891,26 @@
         "ValidationStateDetails":{
           "shape":"String",
           "documentation":"<p>Additional details about the state of validation.</p>"
+        },
+        "ResyncState":{
+          "shape":"String",
+          "documentation":"<p>Records the current state of table resynchronization in the migration task.</p> <p>This parameter can have the following values:</p> <ul> <li> <p>Not enabled – Resync is not enabled for the table in the migration task.</p> </li> <li> <p>Pending – The tables are waiting for resync.</p> </li> <li> <p>In progress – Resync in progress for some records in the table.</p> </li> <li> <p>No primary key – The table could not be resynced because it has no primary key.</p> </li> <li> <p>Last resync at: <code>date/time</code> – Resync session is finished at time. Time provided in UTC format.</p> </li> </ul>"
+        },
+        "ResyncRowsAttempted":{
+          "shape":"LongOptional",
+          "documentation":"<p>Records the total number of mismatched data rows where the system attempted to apply fixes in the target database.</p>"
+        },
+        "ResyncRowsSucceeded":{
+          "shape":"LongOptional",
+          "documentation":"<p>Records the total number of mismatched data rows where fixes were successfully applied in the target database.</p>"
+        },
+        "ResyncRowsFailed":{
+          "shape":"LongOptional",
+          "documentation":"<p>Records the total number of mismatched data rows where fix attempts failed in the target database.</p>"
+        },
+        "ResyncProgress":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>Calculates the percentage of failed validations that were successfully resynced to the system.</p>"
         }
       },
       "documentation":"<p>Provides a collection of table statistics in response to a request by the <code>DescribeTableStatistics</code> operation.</p>"
@@ -10317,6 +10959,20 @@
       "type":"list",
       "member":{"shape":"Tag"}
     },
+    "TargetDataSetting":{
+      "type":"structure",
+      "members":{
+        "TablePreparationMode":{
+          "shape":"TablePreparationMode",
+          "documentation":"<p>This setting determines how DMS handles the target tables before starting a data migration, either by leaving them untouched, dropping and recreating them, or truncating the existing data in the target tables.</p>"
+        }
+      },
+      "documentation":"<p>Defines settings for a target data provider for a data migration.</p>"
+    },
+    "TargetDataSettings":{
+      "type":"list",
+      "member":{"shape":"TargetDataSetting"}
+    },
     "TargetDbType":{
       "type":"string",
       "enum":[
diff -pruN 2.23.6-1/awscli/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/docdb/2014-10-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/docdb/2014-10-31/service-2.json 2.31.35-1/awscli/botocore/data/docdb/2014-10-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/docdb/2014-10-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/docdb/2014-10-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -131,7 +131,8 @@
         {"shape":"DBInstanceNotFoundFault"},
         {"shape":"DBSubnetGroupDoesNotCoverEnoughAZs"},
         {"shape":"GlobalClusterNotFoundFault"},
-        {"shape":"InvalidGlobalClusterStateFault"}
+        {"shape":"InvalidGlobalClusterStateFault"},
+        {"shape":"NetworkTypeNotSupported"}
       ],
       "documentation":"<p>Creates a new Amazon DocumentDB cluster.</p>"
     },
@@ -261,7 +262,7 @@
         {"shape":"InvalidDBClusterStateFault"},
         {"shape":"DBClusterNotFoundFault"}
       ],
-      "documentation":"<p>Creates an Amazon DocumentDB global cluster that can span multiple multiple Amazon Web Services Regions. The global cluster contains one primary cluster with read-write capability, and up-to give read-only secondary clusters. Global clusters uses storage-based fast replication across regions with latencies less than one second, using dedicated infrastructure with no impact to your workload’s performance.</p> <p/> <p>You can create a global cluster that is initially empty, and then add a primary and a secondary to it. Or you can specify an existing cluster during the create operation, and this cluster becomes the primary of the global cluster. </p> <note> <p>This action only applies to Amazon DocumentDB clusters.</p> </note>"
+      "documentation":"<p>Creates an Amazon DocumentDB global cluster that can span multiple multiple Amazon Web Services Regions. The global cluster contains one primary cluster with read-write capability, and up-to 10 read-only secondary clusters. Global clusters uses storage-based fast replication across regions with latencies less than one second, using dedicated infrastructure with no impact to your workload’s performance.</p> <p/> <p>You can create a global cluster that is initially empty, and then add a primary and a secondary to it. Or you can specify an existing cluster during the create operation, and this cluster becomes the primary of the global cluster. </p> <note> <p>This action only applies to Amazon DocumentDB clusters.</p> </note>"
     },
     "DeleteDBCluster":{
       "name":"DeleteDBCluster",
@@ -699,7 +700,8 @@
         {"shape":"DBClusterParameterGroupNotFoundFault"},
         {"shape":"InvalidDBSecurityGroupStateFault"},
         {"shape":"InvalidDBInstanceStateFault"},
-        {"shape":"DBClusterAlreadyExistsFault"}
+        {"shape":"DBClusterAlreadyExistsFault"},
+        {"shape":"NetworkTypeNotSupported"}
       ],
       "documentation":"<p>Modifies a setting for an Amazon DocumentDB cluster. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. </p>"
     },
@@ -934,7 +936,8 @@
         {"shape":"InvalidRestoreFault"},
         {"shape":"DBSubnetGroupNotFoundFault"},
         {"shape":"InvalidSubnet"},
-        {"shape":"KMSKeyNotAccessibleFault"}
+        {"shape":"KMSKeyNotAccessibleFault"},
+        {"shape":"NetworkTypeNotSupported"}
       ],
       "documentation":"<p>Creates a new cluster from a snapshot or cluster snapshot.</p> <p>If a snapshot is specified, the target cluster is created from the source DB snapshot with a default configuration and default security group.</p> <p>If a cluster snapshot is specified, the target cluster is created from the source cluster restore point with the same configuration as the original source DB cluster, except that the new cluster is created with the default security group.</p>"
     },
@@ -964,7 +967,8 @@
         {"shape":"InvalidSubnet"},
         {"shape":"InvalidVPCNetworkStateFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
-        {"shape":"StorageQuotaExceededFault"}
+        {"shape":"StorageQuotaExceededFault"},
+        {"shape":"NetworkTypeNotSupported"}
       ],
       "documentation":"<p>Restores a cluster to an arbitrary point in time. Users can restore to any point in time before <code>LatestRestorableTime</code> for up to <code>BackupRetentionPeriod</code> days. The target cluster is created from the source cluster with the same configuration as the original cluster, except that the new cluster is created with the default security group. </p>"
     },
@@ -1112,8 +1116,7 @@
     },
     "AuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CIDR IP or Amazon EC2 security group isn't authorized for the specified security group.</p> <p>Amazon DocumentDB also might not be authorized to perform necessary actions on your behalf using IAM.</p>",
       "error":{
         "code":"AuthorizationNotFound",
@@ -1220,8 +1223,7 @@
     },
     "CertificateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>CertificateIdentifier</code> doesn't refer to an existing certificate. </p>",
       "error":{
         "code":"CertificateNotFound",
@@ -1304,7 +1306,7 @@
       "members":{
         "SourceDBClusterSnapshotIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the cluster snapshot to copy. This parameter is not case sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid system snapshot in the <i>available</i> state.</p> </li> <li> <p>If the source snapshot is in the same Amazon Web Services Region as the copy, specify a valid snapshot identifier.</p> </li> <li> <p>If the source snapshot is in a different Amazon Web Services Region than the copy, specify a valid cluster snapshot ARN.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
+          "documentation":"<p>The identifier of the cluster snapshot to copy. This parameter is not case sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid cluster snapshot in the <i>available</i> state.</p> </li> <li> <p>If the source cluster snapshot is in the same Amazon Web Services Region as the copy, specify a valid snapshot identifier.</p> </li> <li> <p>If the source cluster snapshot is in a different Amazon Web Services Region or owned by another Amazon Web Services account, specify the snapshot ARN.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
         },
         "TargetDBClusterSnapshotIdentifier":{
           "shape":"String",
@@ -1424,7 +1426,11 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p> <note> <p>When you create a DocumentDB DB cluster with the storage type set to <code>iopt1</code>, the storage type is returned in the response. The storage type isn't returned when you set it to <code>standard</code>.</p> </note>"
+          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p> <note> <p>When you create an Amazon DocumentDB cluster with the storage type set to <code>iopt1</code>, the storage type is returned in the response. The storage type isn't returned when you set it to <code>standard</code>.</p> </note>"
+        },
+        "ServerlessV2ScalingConfiguration":{
+          "shape":"ServerlessV2ScalingConfiguration",
+          "documentation":"<p>Contains the scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
         },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
@@ -1433,6 +1439,10 @@
         "MasterUserSecretKmsKeyId":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager. This setting is valid only if the master user password is managed by Amazon DocumentDB in Amazon Web Services Secrets Manager for the DB cluster.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/vpc-clusters.html\">DocumentDB clusters in a VPC</a> in the Amazon DocumentDB Developer Guide.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p>"
         }
       },
       "documentation":"<p>Represents the input to <a>CreateDBCluster</a>. </p>"
@@ -1823,13 +1833,25 @@
           "shape":"Boolean",
           "documentation":"<p>Specifies whether this cluster can be deleted. If <code>DeletionProtection</code> is enabled, the cluster cannot be deleted unless it is modified and <code>DeletionProtection</code> is disabled. <code>DeletionProtection</code> protects clusters from being accidentally deleted.</p>"
         },
+        "IOOptimizedNextAllowedModificationTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The next time you can modify the Amazon DocumentDB cluster to use the iopt1 storage type.</p>"
+        },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Storage type associated with your cluster</p> <p>Storage type associated with your cluster</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
+          "documentation":"<p>Storage type associated with your cluster</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
+        },
+        "ServerlessV2ScalingConfiguration":{
+          "shape":"ServerlessV2ScalingConfigurationInfo",
+          "documentation":"<p>The scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
         },
         "MasterUserSecret":{
           "shape":"ClusterMasterUserSecret",
           "documentation":"<p>The secret managed by Amazon DocumentDB in Amazon Web Services Secrets Manager for the master user password.</p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/vpc-clusters.html\">DocumentDB clusters in a VPC</a> in the Amazon DocumentDB Developer Guide.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p>"
         }
       },
       "documentation":"<p>Detailed information about a cluster. </p>",
@@ -1837,8 +1859,7 @@
     },
     "DBClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a cluster with the given identifier.</p>",
       "error":{
         "code":"DBClusterAlreadyExistsFault",
@@ -1906,8 +1927,7 @@
     },
     "DBClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterIdentifier</code> doesn't refer to an existing cluster. </p>",
       "error":{
         "code":"DBClusterNotFoundFault",
@@ -1972,8 +1992,7 @@
     },
     "DBClusterParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterParameterGroupName</code> doesn't refer to an existing cluster parameter group. </p>",
       "error":{
         "code":"DBClusterParameterGroupNotFound",
@@ -1998,8 +2017,7 @@
     },
     "DBClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster can't be created because you have reached the maximum allowed quota of clusters.</p>",
       "error":{
         "code":"DBClusterQuotaExceededFault",
@@ -2102,7 +2120,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Storage type associated with your cluster snapshot </p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
+          "documentation":"<p>Storage type associated with your cluster snapshot</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
         }
       },
       "documentation":"<p>Detailed information about a cluster snapshot. </p>",
@@ -2110,8 +2128,7 @@
     },
     "DBClusterSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a cluster snapshot with the given identifier.</p>",
       "error":{
         "code":"DBClusterSnapshotAlreadyExistsFault",
@@ -2179,8 +2196,7 @@
     },
     "DBClusterSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterSnapshotIdentifier</code> doesn't refer to an existing cluster snapshot. </p>",
       "error":{
         "code":"DBClusterSnapshotNotFoundFault",
@@ -2231,6 +2247,10 @@
         "SupportsCertificateRotationWithoutRestart":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the engine version supports rotating the server certificate without rebooting the DB instance.</p>"
+        },
+        "ServerlessV2FeaturesSupport":{
+          "shape":"ServerlessV2FeaturesSupport",
+          "documentation":"<p>Specifies any Amazon DocumentDB Serverless properties or limits that differ between Amazon DocumentDB engine versions. You can test the values of this attribute when deciding which Amazon DocumentDB version to use in a new or upgraded cluster. You can also retrieve the version of an existing cluster and check whether that version supports certain Amazon DocumentDB Serverless features before you attempt to use those features.</p>"
         }
       },
       "documentation":"<p> Detailed information about an engine version. </p>"
@@ -2385,8 +2405,7 @@
     },
     "DBInstanceAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a instance with the given identifier.</p>",
       "error":{
         "code":"DBInstanceAlreadyExists",
@@ -2418,8 +2437,7 @@
     },
     "DBInstanceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBInstanceIdentifier</code> doesn't refer to an existing instance. </p>",
       "error":{
         "code":"DBInstanceNotFound",
@@ -2459,8 +2477,7 @@
     },
     "DBParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A parameter group with the same name already exists.</p>",
       "error":{
         "code":"DBParameterGroupAlreadyExists",
@@ -2471,8 +2488,7 @@
     },
     "DBParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBParameterGroupName</code> doesn't refer to an existing parameter group. </p>",
       "error":{
         "code":"DBParameterGroupNotFound",
@@ -2483,8 +2499,7 @@
     },
     "DBParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This request would cause you to exceed the allowed number of parameter groups.</p>",
       "error":{
         "code":"DBParameterGroupQuotaExceeded",
@@ -2495,8 +2510,7 @@
     },
     "DBSecurityGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSecurityGroupName</code> doesn't refer to an existing security group. </p>",
       "error":{
         "code":"DBSecurityGroupNotFound",
@@ -2507,8 +2521,7 @@
     },
     "DBSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSnapshotIdentifier</code> is already being used by an existing snapshot. </p>",
       "error":{
         "code":"DBSnapshotAlreadyExists",
@@ -2519,8 +2532,7 @@
     },
     "DBSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSnapshotIdentifier</code> doesn't refer to an existing snapshot. </p>",
       "error":{
         "code":"DBSnapshotNotFound",
@@ -2555,6 +2567,10 @@
         "DBSubnetGroupArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) for the DB subnet group.</p>"
+        },
+        "SupportedNetworkTypes":{
+          "shape":"NetworkTypeList",
+          "documentation":"<p>The network type of the DB subnet group.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p> <p>A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (DUAL).</p>"
         }
       },
       "documentation":"<p>Detailed information about a subnet group. </p>",
@@ -2562,8 +2578,7 @@
     },
     "DBSubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSubnetGroupName</code> is already being used by an existing subnet group. </p>",
       "error":{
         "code":"DBSubnetGroupAlreadyExists",
@@ -2574,8 +2589,7 @@
     },
     "DBSubnetGroupDoesNotCoverEnoughAZs":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Subnets in the subnet group should cover at least two Availability Zones unless there is only one Availability Zone.</p>",
       "error":{
         "code":"DBSubnetGroupDoesNotCoverEnoughAZs",
@@ -2600,8 +2614,7 @@
     },
     "DBSubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSubnetGroupName</code> doesn't refer to an existing subnet group. </p>",
       "error":{
         "code":"DBSubnetGroupNotFoundFault",
@@ -2612,8 +2625,7 @@
     },
     "DBSubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would cause you to exceed the allowed number of subnet groups.</p>",
       "error":{
         "code":"DBSubnetGroupQuotaExceeded",
@@ -2631,8 +2643,7 @@
     },
     "DBSubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would cause you to exceed the allowed number of subnets in a subnet group.</p>",
       "error":{
         "code":"DBSubnetQuotaExceededFault",
@@ -2643,8 +2654,7 @@
     },
     "DBUpgradeDependencyFailureFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The upgrade failed because a resource that the depends on can't be modified.</p>",
       "error":{
         "code":"DBUpgradeDependencyFailure",
@@ -3190,6 +3200,7 @@
       },
       "documentation":"<p>Represents the input to <a>DescribePendingMaintenanceActions</a>.</p>"
     },
+    "DoubleOptional":{"type":"double"},
     "Endpoint":{
       "type":"structure",
       "members":{
@@ -3352,8 +3363,7 @@
     },
     "EventSubscriptionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the maximum number of event subscriptions. </p>",
       "error":{
         "code":"EventSubscriptionQuotaExceeded",
@@ -3448,6 +3458,37 @@
         "GlobalCluster":{"shape":"GlobalCluster"}
       }
     },
+    "FailoverState":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"FailoverStatus",
+          "documentation":"<p>The current status of the global cluster. Possible values are as follows:</p> <ul> <li> <p> <b>pending</b> – The service received a request to switch over or fail over the global cluster. The global cluster's primary cluster and the specified secondary cluster are being verified before the operation starts.</p> </li> <li> <p> <b>failing-over</b> – The chosen secondary cluster is being promoted to become the new primary cluster to fail over the global cluster.</p> </li> <li> <p> <b>cancelling</b> – The request to switch over or fail over the global cluster was cancelled and the primary cluster and the selected secondary cluster are returning to their previous states.</p> </li> </ul>"
+        },
+        "FromDbClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon DocumentDB cluster that is currently being demoted, and which is associated with this state.</p>"
+        },
+        "ToDbClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon DocumentDB cluster that is currently being promoted, and which is associated with this state.</p>"
+        },
+        "IsDataLossAllowed":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the operation is a global switchover or a global failover. If data loss is allowed, then the operation is a global failover. Otherwise, it's a switchover.</p>"
+        }
+      },
+      "documentation":"<p>Contains the state of scheduled or in-process operations on an Amazon DocumentDB global cluster. This data type is empty unless a switchover or failover operation is scheduled or is in progress on the global cluster.</p>",
+      "wrapper":true
+    },
+    "FailoverStatus":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "failing-over",
+        "cancelling"
+      ]
+    },
     "Filter":{
       "type":"structure",
       "required":[
@@ -3489,7 +3530,7 @@
         },
         "GlobalClusterResourceId":{
           "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region-unique, immutable identifier for the global database cluster. This identifier is found in CloudTrail log entries whenever the KMS customer master key (CMK) for the cluster is accessed. </p>"
+          "documentation":"<p>The Amazon Web Services RegionRegion-unique, immutable identifier for the global database cluster. This identifier is found in CloudTrail log entries whenever the KMS customer master key (CMK) for the cluster is accessed. </p>"
         },
         "GlobalClusterArn":{
           "shape":"String",
@@ -3522,6 +3563,14 @@
         "GlobalClusterMembers":{
           "shape":"GlobalClusterMemberList",
           "documentation":"<p>The list of cluster IDs for secondary clusters within the global cluster. Currently limited to one item. </p>"
+        },
+        "FailoverState":{
+          "shape":"FailoverState",
+          "documentation":"<p>A data object containing all properties for the current state of an in-process or pending switchover or failover process for this global cluster. This object is empty unless the <code>SwitchoverGlobalCluster</code> or <code>FailoverGlobalCluster</code> operation was called on this global cluster.</p>"
+        },
+        "TagList":{
+          "shape":"TagList",
+          "documentation":"<p>A list of global cluster tags.</p>"
         }
       },
       "documentation":"<p>A data type representing an Amazon DocumentDB global cluster.</p>",
@@ -3529,8 +3578,7 @@
     },
     "GlobalClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> already exists. Choose a new global cluster identifier (unique name) to create a new global cluster. </p>",
       "error":{
         "code":"GlobalClusterAlreadyExistsFault",
@@ -3561,11 +3609,15 @@
         },
         "Readers":{
           "shape":"ReadersArnList",
-          "documentation":"<p>The Amazon Resource Name (ARN) for each read-only secondary cluster associated with the Aurora global cluster.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for each read-only secondary cluster associated with the Amazon DocumentDB global cluster.</p>"
         },
         "IsWriter":{
           "shape":"Boolean",
           "documentation":"<p> Specifies whether the Amazon DocumentDB cluster is the primary cluster (that is, has read-write capability) for the Amazon DocumentDB global cluster with which it is associated. </p>"
+        },
+        "SynchronizationStatus":{
+          "shape":"GlobalClusterMemberSynchronizationStatus",
+          "documentation":"<p>The status of synchronization of each Amazon DocumentDB cluster in the global cluster.</p>"
         }
       },
       "documentation":"<p>A data structure with information about any primary and secondary clusters associated with an Amazon DocumentDB global clusters. </p>",
@@ -3578,10 +3630,16 @@
         "locationName":"GlobalClusterMember"
       }
     },
+    "GlobalClusterMemberSynchronizationStatus":{
+      "type":"string",
+      "enum":[
+        "connected",
+        "pending-resync"
+      ]
+    },
     "GlobalClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> doesn't refer to an existing global cluster.</p>",
       "error":{
         "code":"GlobalClusterNotFoundFault",
@@ -3592,8 +3650,7 @@
     },
     "GlobalClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of global clusters for this account is already at the maximum allowed.</p>",
       "error":{
         "code":"GlobalClusterQuotaExceededFault",
@@ -3617,8 +3674,7 @@
     },
     "InstanceQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would cause you to exceed the allowed number of instances.</p>",
       "error":{
         "code":"InstanceQuotaExceeded",
@@ -3629,8 +3685,7 @@
     },
     "InsufficientDBClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster doesn't have enough capacity for the current operation.</p>",
       "error":{
         "code":"InsufficientDBClusterCapacityFault",
@@ -3641,8 +3696,7 @@
     },
     "InsufficientDBInstanceCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified instance class isn't available in the specified Availability Zone.</p>",
       "error":{
         "code":"InsufficientDBInstanceCapacity",
@@ -3653,8 +3707,7 @@
     },
     "InsufficientStorageClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is not enough storage available for the current action. You might be able to resolve this error by updating your subnet group to use different Availability Zones that have more storage available. </p>",
       "error":{
         "code":"InsufficientStorageClusterCapacity",
@@ -3667,8 +3720,7 @@
     "IntegerOptional":{"type":"integer"},
     "InvalidDBClusterSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided value isn't a valid cluster snapshot state.</p>",
       "error":{
         "code":"InvalidDBClusterSnapshotStateFault",
@@ -3679,8 +3731,7 @@
     },
     "InvalidDBClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster isn't in a valid state.</p>",
       "error":{
         "code":"InvalidDBClusterStateFault",
@@ -3691,8 +3742,7 @@
     },
     "InvalidDBInstanceStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The specified instance isn't in the <i>available</i> state. </p>",
       "error":{
         "code":"InvalidDBInstanceState",
@@ -3703,8 +3753,7 @@
     },
     "InvalidDBParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The parameter group is in use, or it is in a state that is not valid. If you are trying to delete the parameter group, you can't delete it when the parameter group is in this state.</p>",
       "error":{
         "code":"InvalidDBParameterGroupState",
@@ -3715,8 +3764,7 @@
     },
     "InvalidDBSecurityGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the security group doesn't allow deletion.</p>",
       "error":{
         "code":"InvalidDBSecurityGroupState",
@@ -3727,8 +3775,7 @@
     },
     "InvalidDBSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the snapshot doesn't allow deletion.</p>",
       "error":{
         "code":"InvalidDBSnapshotState",
@@ -3739,8 +3786,7 @@
     },
     "InvalidDBSubnetGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subnet group can't be deleted because it's in use.</p>",
       "error":{
         "code":"InvalidDBSubnetGroupStateFault",
@@ -3751,8 +3797,7 @@
     },
     "InvalidDBSubnetStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The subnet isn't in the <i>available</i> state. </p>",
       "error":{
         "code":"InvalidDBSubnetStateFault",
@@ -3763,8 +3808,7 @@
     },
     "InvalidEventSubscriptionStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Someone else might be modifying a subscription. Wait a few seconds, and try again.</p>",
       "error":{
         "code":"InvalidEventSubscriptionState",
@@ -3775,8 +3819,7 @@
     },
     "InvalidGlobalClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation can't be performed while the cluster is in this state.</p>",
       "error":{
         "code":"InvalidGlobalClusterStateFault",
@@ -3787,8 +3830,7 @@
     },
     "InvalidRestoreFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot restore from a virtual private cloud (VPC) backup to a non-VPC DB instance.</p>",
       "error":{
         "code":"InvalidRestoreFault",
@@ -3799,8 +3841,7 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is not valid, or multiple subnets were requested that are not all in a common virtual private cloud (VPC).</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -3811,8 +3852,7 @@
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subnet group doesn't cover all Availability Zones after it is created because of changes that were made.</p>",
       "error":{
         "code":"InvalidVPCNetworkStateFault",
@@ -3823,8 +3863,7 @@
     },
     "KMSKeyNotAccessibleFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred when accessing an KMS key.</p>",
       "error":{
         "code":"KMSKeyNotAccessibleFault",
@@ -3910,7 +3949,7 @@
         },
         "AllowMajorVersionUpgrade":{
           "shape":"Boolean",
-          "documentation":"<p>A value that indicates whether major version upgrades are allowed.</p> <p>Constraints: You must allow major version upgrades when specifying a value for the <code>EngineVersion</code> parameter that is a different major version than the DB cluster's current version.</p>"
+          "documentation":"<p>A value that indicates whether major version upgrades are allowed.</p> <p>Constraints:</p> <ul> <li> <p>You must allow major version upgrades when specifying a value for the <code>EngineVersion</code> parameter that is a different major version than the cluster's current version.</p> </li> <li> <p>Since some parameters are version specific, changing them requires executing a new <code>ModifyDBCluster</code> API call after the in-place MVU completes.</p> </li> </ul> <note> <p>Performing an MVU directly impacts the following parameters:</p> <ul> <li> <p> <code>MasterUserPassword</code> </p> </li> <li> <p> <code>NewDBClusterIdentifier</code> </p> </li> <li> <p> <code>VpcSecurityGroupIds</code> </p> </li> <li> <p> <code>Port</code> </p> </li> </ul> </note>"
         },
         "DeletionProtection":{
           "shape":"BooleanOptional",
@@ -3920,6 +3959,10 @@
           "shape":"String",
           "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
         },
+        "ServerlessV2ScalingConfiguration":{
+          "shape":"ServerlessV2ScalingConfiguration",
+          "documentation":"<p>Contains the scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
+        },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager. If the cluster doesn't manage the master user password with Amazon Web Services Secrets Manager, you can turn on this management. In this case, you can't specify <code>MasterUserPassword</code>. If the cluster already manages the master user password with Amazon Web Services Secrets Manager, and you specify that the master user password is not managed with Amazon Web Services Secrets Manager, then you must specify <code>MasterUserPassword</code>. In this case, Amazon DocumentDB deletes the secret and uses the new password for the master user specified by <code>MasterUserPassword</code>.</p>"
@@ -3931,6 +3974,10 @@
         "RotateMasterUserPassword":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to rotate the secret managed by Amazon Web Services Secrets Manager for the master user password.</p> <p>This setting is valid only if the master user password is managed by Amazon DocumentDB in Amazon Web Services Secrets Manager for the cluster. The secret value contains the updated password.</p> <p>Constraint: You must apply the change immediately when rotating the master user password.</p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/vpc-clusters.html\">DocumentDB clusters in a VPC</a> in the Amazon DocumentDB Developer Guide.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p>"
         }
       },
       "documentation":"<p>Represents the input to <a>ModifyDBCluster</a>.</p>"
@@ -4138,6 +4185,21 @@
         "GlobalCluster":{"shape":"GlobalCluster"}
       }
     },
+    "NetworkTypeList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "NetworkTypeNotSupported":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The network type is not supported by either <code>DBSubnetGroup</code> or the DB engine version.</p>",
+      "error":{
+        "code":"NetworkTypeNotSupported",
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "OrderableDBInstanceOption":{
       "type":"structure",
       "members":{
@@ -4203,7 +4265,7 @@
         },
         "ParameterValue":{
           "shape":"String",
-          "documentation":"<p>Specifies the value of the parameter.</p>"
+          "documentation":"<p>Specifies the value of the parameter. Must be one or more of the cluster parameter's <code>AllowedValues</code> in CSV format:</p> <p>Valid values are:</p> <ul> <li> <p> <code>enabled</code>: The cluster accepts secure connections using TLS version 1.0 through 1.3. </p> </li> <li> <p> <code>disabled</code>: The cluster does not accept secure connections using TLS. </p> </li> <li> <p> <code>fips-140-3</code>: The cluster only accepts secure connections per the requirements of the Federal Information Processing Standards (FIPS) publication 140-3. Only supported starting with Amazon DocumentDB 5.0 (engine version 3.0.3727) clusters in these regions: ca-central-1, us-west-2, us-east-1, us-east-2, us-gov-east-1, us-gov-west-1.</p> </li> <li> <p> <code>tls1.2+</code>: The cluster accepts secure connections using TLS version 1.2 and above. Only supported starting with Amazon DocumentDB 4.0 (engine version 2.0.10980) and Amazon DocumentDB 5.0 (engine version 3.0.11051).</p> </li> <li> <p> <code>tls1.3+</code>: The cluster accepts secure connections using TLS version 1.3 and above. Only supported starting with Amazon DocumentDB 4.0 (engine version 2.0.10980) and Amazon DocumentDB 5.0 (engine version 3.0.11051).</p> </li> </ul>"
         },
         "Description":{
           "shape":"String",
@@ -4500,8 +4562,7 @@
     },
     "ResourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource ID was not found.</p>",
       "error":{
         "code":"ResourceNotFoundFault",
@@ -4585,9 +4646,17 @@
           "shape":"String",
           "documentation":"<p>The name of the DB cluster parameter group to associate with this DB cluster.</p> <p> <i>Type:</i> String.       <i>Required:</i> No.</p> <p>If this argument is omitted, the default DB cluster parameter group is used. If supplied, must match the name of an existing default DB cluster parameter group. The string must consist of from 1 to 255 letters, numbers or hyphens. Its first character must be a letter, and it cannot end with a hyphen or contain two consecutive hyphens.</p>"
         },
+        "ServerlessV2ScalingConfiguration":{
+          "shape":"ServerlessV2ScalingConfiguration",
+          "documentation":"<p>Contains the scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
+        },
         "StorageType":{
           "shape":"String",
           "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/vpc-clusters.html\">DocumentDB clusters in a VPC</a> in the Amazon DocumentDB Developer Guide.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p>"
         }
       },
       "documentation":"<p>Represents the input to <a>RestoreDBClusterFromSnapshot</a>.</p>"
@@ -4653,9 +4722,17 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether this cluster can be deleted. If <code>DeletionProtection</code> is enabled, the cluster cannot be deleted unless it is modified and <code>DeletionProtection</code> is disabled. <code>DeletionProtection</code> protects clusters from being accidentally deleted.</p>"
         },
+        "ServerlessV2ScalingConfiguration":{
+          "shape":"ServerlessV2ScalingConfiguration",
+          "documentation":"<p>Contains the scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
+        },
         "StorageType":{
           "shape":"String",
           "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Amazon DocumentDB clusters, see Cluster storage configurations in the <i>Amazon DocumentDB Developer Guide</i>.</p> <p>Valid values for storage type - <code>standard | iopt1</code> </p> <p>Default value is <code>standard </code> </p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/vpc-clusters.html\">DocumentDB clusters in a VPC</a> in the Amazon DocumentDB Developer Guide.</p> <p>Valid Values: <code>IPV4</code> | <code>DUAL</code> </p>"
         }
       },
       "documentation":"<p>Represents the input to <a>RestoreDBClusterToPointInTime</a>.</p>"
@@ -4668,8 +4745,7 @@
     },
     "SNSInvalidTopicFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon SNS has responded that there is a problem with the specified topic. </p>",
       "error":{
         "code":"SNSInvalidTopic",
@@ -4680,8 +4756,7 @@
     },
     "SNSNoAuthorizationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You do not have permission to publish to the SNS topic Amazon Resource Name (ARN). </p>",
       "error":{
         "code":"SNSNoAuthorization",
@@ -4692,8 +4767,7 @@
     },
     "SNSTopicArnNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The SNS topic Amazon Resource Name (ARN) does not exist. </p>",
       "error":{
         "code":"SNSTopicArnNotFound",
@@ -4702,10 +4776,51 @@
       },
       "exception":true
     },
-    "SharedSnapshotQuotaExceededFault":{
+    "ServerlessV2FeaturesSupport":{
+      "type":"structure",
+      "members":{
+        "MinCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The minimum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 8, 8.5, 9, and so on.</p>"
+        },
+        "MaxCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The maximum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 32, 32.5, 33, and so on.</p>"
+        }
+      },
+      "documentation":"<p>Specifies any Amazon DocumentDB Serverless properties or limits that differ between Amazon DocumentDB engine versions. You can test the values of this attribute when deciding which Amazon DocumentDB version to use in a new or upgraded cluster. You can also retrieve the version of an existing cluster and check whether that version supports certain Amazon DocumentDB Serverless features before you attempt to use those features.</p>"
+    },
+    "ServerlessV2ScalingConfiguration":{
       "type":"structure",
       "members":{
+        "MinCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The minimum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 8, 8.5, 9, and so on.</p>"
+        },
+        "MaxCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The maximum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 32, 32.5, 33, and so on.</p>"
+        }
       },
+      "documentation":"<p>Sets the scaling configuration of an Amazon DocumentDB Serverless cluster.</p>"
+    },
+    "ServerlessV2ScalingConfigurationInfo":{
+      "type":"structure",
+      "members":{
+        "MinCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The minimum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 8, 8.5, 9, and so on.</p>"
+        },
+        "MaxCapacity":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>The maximum number of Amazon DocumentDB capacity units (DCUs) for an instance in an Amazon DocumentDB Serverless cluster. You can specify DCU values in half-step increments, such as 32, 32.5, 33, and so on. </p>"
+        }
+      },
+      "documentation":"<p>Retrieves the scaling configuration for an Amazon DocumentDB Serverless cluster.</p>"
+    },
+    "SharedSnapshotQuotaExceededFault":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of accounts that you can share a manual DB snapshot with. </p>",
       "error":{
         "code":"SharedSnapshotQuotaExceeded",
@@ -4716,8 +4831,7 @@
     },
     "SnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would cause you to exceed the allowed number of snapshots.</p>",
       "error":{
         "code":"SnapshotQuotaExceeded",
@@ -4735,8 +4849,7 @@
     },
     "SourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested source could not be found. </p>",
       "error":{
         "code":"SourceNotFound",
@@ -4790,8 +4903,7 @@
     },
     "StorageQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would cause you to exceed the allowed amount of storage available across all instances.</p>",
       "error":{
         "code":"StorageQuotaExceeded",
@@ -4802,8 +4914,7 @@
     },
     "StorageTypeNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Storage of the specified <code>StorageType</code> can't be associated with the DB instance. </p>",
       "error":{
         "code":"StorageTypeNotSupported",
@@ -4833,8 +4944,7 @@
     },
     "SubnetAlreadyInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subnet is already in use in the Availability Zone.</p>",
       "error":{
         "code":"SubnetAlreadyInUse",
@@ -4859,8 +4969,7 @@
     },
     "SubscriptionAlreadyExistFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided subscription name already exists. </p>",
       "error":{
         "code":"SubscriptionAlreadyExist",
@@ -4871,8 +4980,7 @@
     },
     "SubscriptionCategoryNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided category does not exist. </p>",
       "error":{
         "code":"SubscriptionCategoryNotFound",
@@ -4883,8 +4991,7 @@
     },
     "SubscriptionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subscription name does not exist. </p>",
       "error":{
         "code":"SubscriptionNotFound",
diff -pruN 2.23.6-1/awscli/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/docdb-elastic/2022-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/drs/2020-02-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds/2015-04-16/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ds/2015-04-16/paginators-1.json 2.31.35-1/awscli/botocore/data/ds/2015-04-16/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ds/2015-04-16/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds/2015-04-16/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -81,6 +81,12 @@
       "limit_key": "Limit",
       "output_token": "NextToken",
       "result_key": "CertificatesInfo"
+    },
+    "ListADAssessments": {
+      "input_token": "NextToken",
+      "limit_key": "Limit",
+      "output_token": "NextToken",
+      "result_key": "Assessments"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ds/2015-04-16/service-2.json 2.31.35-1/awscli/botocore/data/ds/2015-04-16/service-2.json
--- 2.23.6-1/awscli/botocore/data/ds/2015-04-16/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds/2015-04-16/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -193,6 +193,25 @@
       ],
       "documentation":"<p>Creates a Simple AD directory. For more information, see <a href=\"https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html\">Simple Active Directory</a> in the <i>Directory Service Admin Guide</i>.</p> <p>Before you call <code>CreateDirectory</code>, ensure that all of the required permissions have been explicitly granted through a policy. For details about what permissions are required to run the <code>CreateDirectory</code> operation, see <a href=\"http://docs.aws.amazon.com/directoryservice/latest/admin-guide/UsingWithDS_IAM_ResourcePermissions.html\">Directory Service API Permissions: Actions, Resources, and Conditions Reference</a>.</p>"
     },
+    "CreateHybridAD":{
+      "name":"CreateHybridAD",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateHybridADRequest"},
+      "output":{"shape":"CreateHybridADResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"DirectoryLimitExceededException"},
+        {"shape":"ADAssessmentLimitExceededException"},
+        {"shape":"EntityDoesNotExistException"}
+      ],
+      "documentation":"<p>Creates a hybrid directory that connects your self-managed Active Directory (AD) infrastructure and Amazon Web Services.</p> <p>You must have a successful directory assessment using <a>StartADAssessment</a> to validate your environment compatibility before you use this operation.</p> <p>Updates are applied asynchronously. Use <a>DescribeDirectories</a> to monitor the progress of directory creation.</p>"
+    },
     "CreateLogSubscription":{
       "name":"CreateLogSubscription",
       "http":{
@@ -263,6 +282,23 @@
       ],
       "documentation":"<p>Directory Service for Microsoft Active Directory allows you to configure trust relationships. For example, you can establish a trust between your Managed Microsoft AD directory, and your existing self-managed Microsoft Active Directory. This would allow you to provide users and groups access to resources in either domain, with a single set of credentials.</p> <p>This action initiates the creation of the Amazon Web Services side of a trust relationship between an Managed Microsoft AD directory and an external domain. You can create either a forest trust or an external trust.</p>"
     },
+    "DeleteADAssessment":{
+      "name":"DeleteADAssessment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteADAssessmentRequest"},
+      "output":{"shape":"DeleteADAssessmentResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"EntityDoesNotExistException"}
+      ],
+      "documentation":"<p>Deletes a directory assessment and all associated data. This operation permanently removes the assessment results, validation reports, and configuration information.</p> <p>You cannot delete system-initiated assessments. You can delete customer-created assessments even if they are in progress.</p>"
+    },
     "DeleteConditionalForwarder":{
       "name":"DeleteConditionalForwarder",
       "http":{
@@ -381,6 +417,39 @@
       ],
       "documentation":"<p>Removes the specified directory as a publisher to the specified Amazon SNS topic.</p>"
     },
+    "DescribeADAssessment":{
+      "name":"DescribeADAssessment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeADAssessmentRequest"},
+      "output":{"shape":"DescribeADAssessmentResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"EntityDoesNotExistException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a directory assessment, including its current status, validation results, and configuration details. Use this operation to monitor assessment progress and review results.</p>"
+    },
+    "DescribeCAEnrollmentPolicy":{
+      "name":"DescribeCAEnrollmentPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCAEnrollmentPolicyRequest"},
+      "output":{"shape":"DescribeCAEnrollmentPolicyResult"},
+      "errors":[
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about the certificate authority (CA) enrollment policy for the specified directory. This policy determines how client certificates are automatically enrolled and managed through Amazon Web Services Private Certificate Authority. </p>"
+    },
     "DescribeCertificate":{
       "name":"DescribeCertificate",
       "http":{
@@ -503,6 +572,24 @@
       ],
       "documentation":"<p>Obtains information about which Amazon SNS topics receive status messages from the specified directory.</p> <p>If no input parameters are provided, such as DirectoryId or TopicName, this request describes all of the associations in the account.</p>"
     },
+    "DescribeHybridADUpdate":{
+      "name":"DescribeHybridADUpdate",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeHybridADUpdateRequest"},
+      "output":{"shape":"DescribeHybridADUpdateResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"InvalidNextTokenException"}
+      ],
+      "documentation":"<p>Retrieves information about update activities for a hybrid directory. This operation provides details about configuration changes, administrator account updates, and self-managed instance settings (IDs and DNS IPs).</p>"
+    },
     "DescribeLDAPSSettings":{
       "name":"DescribeLDAPSSettings",
       "http":{
@@ -629,6 +716,26 @@
       ],
       "documentation":"<p> Describes the updates of a directory for a particular update type. </p>"
     },
+    "DisableCAEnrollmentPolicy":{
+      "name":"DisableCAEnrollmentPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisableCAEnrollmentPolicyRequest"},
+      "output":{"shape":"DisableCAEnrollmentPolicyResult"},
+      "errors":[
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"DirectoryUnavailableException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"DisableAlreadyInProgressException"},
+        {"shape":"EntityDoesNotExistException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Disables the certificate authority (CA) enrollment policy for the specified directory. This stops automatic certificate enrollment and management for domain-joined clients, but does not affect existing certificates.</p> <important> <p>Disabling the CA enrollment policy prevents new certificates from being automatically enrolled, but existing certificates remain valid and functional until they expire.</p> </important>"
+    },
     "DisableClientAuthentication":{
       "name":"DisableClientAuthentication",
       "http":{
@@ -664,7 +771,7 @@
         {"shape":"ClientException"},
         {"shape":"ServiceException"}
       ],
-      "documentation":"<p>Deactivates access to directory data via the Directory Service Data API for the specified directory.</p>"
+      "documentation":"<p>Deactivates access to directory data via the Directory Service Data API for the specified directory. For more information, see <a href=\"https://docs.aws.amazon.com/directoryservicedata/latest/DirectoryServiceDataAPIReference/Welcome.html\">Directory Service Data API Reference</a>.</p>"
     },
     "DisableLDAPS":{
       "name":"DisableLDAPS",
@@ -717,6 +824,27 @@
       ],
       "documentation":"<p>Disables single-sign on for a directory.</p>"
     },
+    "EnableCAEnrollmentPolicy":{
+      "name":"EnableCAEnrollmentPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"EnableCAEnrollmentPolicyRequest"},
+      "output":{"shape":"EnableCAEnrollmentPolicyResult"},
+      "errors":[
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"DirectoryUnavailableException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"EntityAlreadyExistsException"},
+        {"shape":"EntityDoesNotExistException"},
+        {"shape":"EnableAlreadyInProgressException"},
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Enables certificate authority (CA) enrollment policy for the specified directory. This allows domain-joined clients to automatically request and receive certificates from the specified Amazon Web Services Private Certificate Authority.</p> <note> <p>Before enabling CA enrollment, ensure that the PCA connector is properly configured and accessible from the directory. The connector must be in an active state and have the necessary permissions.</p> </note>"
+    },
     "EnableClientAuthentication":{
       "name":"EnableClientAuthentication",
       "http":{
@@ -753,7 +881,7 @@
         {"shape":"ClientException"},
         {"shape":"ServiceException"}
       ],
-      "documentation":"<p>Enables access to directory data via the Directory Service Data API for the specified directory.</p>"
+      "documentation":"<p>Enables access to directory data via the Directory Service Data API for the specified directory. For more information, see <a href=\"https://docs.aws.amazon.com/directoryservicedata/latest/DirectoryServiceDataAPIReference/Welcome.html\">Directory Service Data API Reference</a>.</p>"
     },
     "EnableLDAPS":{
       "name":"EnableLDAPS",
@@ -839,6 +967,23 @@
       ],
       "documentation":"<p>Obtains the manual snapshot limits for a directory.</p>"
     },
+    "ListADAssessments":{
+      "name":"ListADAssessments",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListADAssessmentsRequest"},
+      "output":{"shape":"ListADAssessmentsResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"DirectoryDoesNotExistException"}
+      ],
+      "documentation":"<p>Retrieves a list of directory assessments for the specified directory or all assessments in your account. Use this operation to monitor assessment status and manage multiple assessments.</p>"
+    },
     "ListCertificates":{
       "name":"ListCertificates",
       "http":{
@@ -1085,6 +1230,24 @@
       ],
       "documentation":"<p>Shares a specified directory (<code>DirectoryId</code>) in your Amazon Web Services account (directory owner) with another Amazon Web Services account (directory consumer). With this operation you can use your directory from any Amazon Web Services account and from any Amazon VPC within an Amazon Web Services Region.</p> <p>When you share your Managed Microsoft AD directory, Directory Service creates a shared directory in the directory consumer account. This shared directory contains the metadata to provide access to the directory within the directory owner account. The shared directory is visible in all VPCs in the directory consumer account.</p> <p>The <code>ShareMethod</code> parameter determines whether the specified directory can be shared between Amazon Web Services accounts inside the same Amazon Web Services organization (<code>ORGANIZATIONS</code>). It also determines whether you can share the directory with any other Amazon Web Services account either inside or outside of the organization (<code>HANDSHAKE</code>).</p> <p>The <code>ShareNotes</code> parameter is only used when <code>HANDSHAKE</code> is called, which sends a directory sharing request to the directory consumer. </p>"
     },
+    "StartADAssessment":{
+      "name":"StartADAssessment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartADAssessmentRequest"},
+      "output":{"shape":"StartADAssessmentResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"ADAssessmentLimitExceededException"}
+      ],
+      "documentation":"<p>Initiates a directory assessment to validate your self-managed AD environment for hybrid domain join. The assessment checks compatibility and connectivity of the self-managed AD environment.</p> <p>A directory assessment is automatically created when you create a hybrid directory. There are two types of assessments: <code>CUSTOMER</code> and <code>SYSTEM</code>. Your Amazon Web Services account has a limit of 100 <code>CUSTOMER</code> directory assessments.</p> <p>The assessment process typically takes 30 minutes or more to complete. The assessment process is asynchronous and you can monitor it with <code>DescribeADAssessment</code>.</p> <p>The <code>InstanceIds</code> must have a one-to-one correspondence with <code>CustomerDnsIps</code>, meaning that if the IP address for instance i-10243410 is 10.24.34.100 and the IP address for instance i-10243420 is 10.24.34.200, then the input arrays must maintain the same order relationship, either [10.24.34.100, 10.24.34.200] paired with [i-10243410, i-10243420] or [10.24.34.200, 10.24.34.100] paired with [i-10243420, i-10243410].</p> <p>Note: You must provide exactly one <code>DirectoryId</code> or <code>AssessmentConfiguration</code>.</p>"
+    },
     "StartSchemaExtension":{
       "name":"StartSchemaExtension",
       "http":{
@@ -1157,7 +1320,25 @@
         {"shape":"ClientException"},
         {"shape":"ServiceException"}
       ],
-      "documentation":"<p> Updates the directory for a particular update type. </p>"
+      "documentation":"<p>Updates directory configuration for the specified update type.</p>"
+    },
+    "UpdateHybridAD":{
+      "name":"UpdateHybridAD",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateHybridADRequest"},
+      "output":{"shape":"UpdateHybridADResult"},
+      "errors":[
+        {"shape":"ClientException"},
+        {"shape":"ServiceException"},
+        {"shape":"UnsupportedOperationException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"DirectoryDoesNotExistException"},
+        {"shape":"ADAssessmentLimitExceededException"}
+      ],
+      "documentation":"<p>Updates the configuration of an existing hybrid directory. You can recover hybrid directory administrator account or modify self-managed instance settings.</p> <p>Updates are applied asynchronously. Use <a>DescribeHybridADUpdate</a> to monitor the progress of configuration changes.</p> <p>The <code>InstanceIds</code> must have a one-to-one correspondence with <code>CustomerDnsIps</code>, meaning that if the IP address for instance i-10243410 is 10.24.34.100 and the IP address for instance i-10243420 is 10.24.34.200, then the input arrays must maintain the same order relationship, either [10.24.34.100, 10.24.34.200] paired with [i-10243410, i-10243420] or [10.24.34.200, 10.24.34.100] paired with [i-10243420, i-10243410].</p> <note> <p>You must provide at least one update to <a>UpdateHybridADRequest$HybridAdministratorAccountUpdate</a> or <a>UpdateHybridADRequest$SelfManagedInstancesSettings</a>.</p> </note>"
     },
     "UpdateNumberOfDomainControllers":{
       "name":"UpdateNumberOfDomainControllers",
@@ -1249,6 +1430,15 @@
     }
   },
   "shapes":{
+    "ADAssessmentLimitExceededException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ExceptionMessage"},
+        "RequestId":{"shape":"RequestId"}
+      },
+      "documentation":"<p>A directory assessment is automatically created when you create a hybrid directory. There are two types of assessments: <code>CUSTOMER</code> and <code>SYSTEM</code>. Your Amazon Web Services account has a limit of 100 <code>CUSTOMER</code> directory assessments.</p> <p>If you attempt to create a hybrid directory; and you already have 100 <code>CUSTOMER</code> directory assessments;, you will encounter an error. Delete assessments to free up capacity before trying again.</p> <p>You can request an increase to your <code>CUSTOMER</code> directory assessment quota by contacting customer support or delete existing CUSTOMER directory assessments; to free up capacity.</p>",
+      "exception":true
+    },
     "AcceptSharedDirectoryRequest":{
       "type":"structure",
       "required":["SharedDirectoryId"],
@@ -1305,8 +1495,7 @@
     },
     "AddIpRoutesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddRegionRequest":{
       "type":"structure",
@@ -1329,8 +1518,7 @@
     },
     "AddRegionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddTagsToResourceRequest":{
       "type":"structure",
@@ -1351,8 +1539,7 @@
     },
     "AddTagsToResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddedDateTime":{"type":"timestamp"},
     "AdditionalRegions":{
@@ -1365,6 +1552,230 @@
       "min":1,
       "pattern":"^(?!D-|d-)([\\da-zA-Z]+)([-]*[\\da-zA-Z])*"
     },
+    "Assessment":{
+      "type":"structure",
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the directory assessment.</p>"
+        },
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory associated with this assessment.</p>"
+        },
+        "DnsName":{
+          "shape":"DirectoryName",
+          "documentation":"<p>The fully qualified domain name (FQDN) of the Active Directory domain being assessed.</p>"
+        },
+        "StartTime":{
+          "shape":"AssessmentStartTime",
+          "documentation":"<p>The date and time when the assessment was initiated.</p>"
+        },
+        "LastUpdateDateTime":{
+          "shape":"LastUpdateDateTime",
+          "documentation":"<p>The date and time when the assessment status was last updated.</p>"
+        },
+        "Status":{
+          "shape":"AssessmentStatus",
+          "documentation":"<p>The current status of the assessment. Valid values include <code>SUCCESS</code>, <code>FAILED</code>, <code>PENDING</code>, and <code>IN_PROGRESS</code>.</p>"
+        },
+        "StatusCode":{
+          "shape":"AssessmentStatusCode",
+          "documentation":"<p>A detailed status code providing additional information about the assessment state.</p>"
+        },
+        "StatusReason":{
+          "shape":"AssessmentStatusReason",
+          "documentation":"<p>A human-readable description of the current assessment status, including any error details or progress information.</p>"
+        },
+        "CustomerDnsIps":{
+          "shape":"CustomerDnsIps",
+          "documentation":"<p>The IP addresses of the DNS servers or domain controllers in your self-managed AD environment.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>Contains Amazon VPC information for the <code>StartADAssessment</code> operation. </p>"
+        },
+        "SubnetIds":{
+          "shape":"SubnetIds",
+          "documentation":"<p>A list of subnet identifiers in the Amazon VPC in which the hybrid directory is created.</p>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>The security groups identifiers attached to the network interfaces.</p>"
+        },
+        "SelfManagedInstanceIds":{
+          "shape":"AssessmentInstanceIds",
+          "documentation":"<p>The identifiers of the self-managed AD instances used to perform the assessment.</p>"
+        },
+        "ReportType":{
+          "shape":"AssessmentReportType",
+          "documentation":"<p>The type of assessment report generated. Valid values are <code>CUSTOMER</code> and <code>SYSTEM</code>.</p>"
+        },
+        "Version":{
+          "shape":"AssessmentVersion",
+          "documentation":"<p>The version of the assessment framework used to evaluate your self-managed AD environment.</p>"
+        }
+      },
+      "documentation":"<p>Contains detailed information about a directory assessment, including configuration parameters, status, and validation results.</p>"
+    },
+    "AssessmentConfiguration":{
+      "type":"structure",
+      "required":[
+        "CustomerDnsIps",
+        "DnsName",
+        "VpcSettings",
+        "InstanceIds"
+      ],
+      "members":{
+        "CustomerDnsIps":{
+          "shape":"CustomerDnsIps",
+          "documentation":"<p>A list of IP addresses for the DNS servers or domain controllers in your self-managed AD that are tested during the assessment.</p>"
+        },
+        "DnsName":{
+          "shape":"DirectoryName",
+          "documentation":"<p>The fully qualified domain name (FQDN) of the self-managed AD domain to assess.</p>"
+        },
+        "VpcSettings":{"shape":"DirectoryVpcSettings"},
+        "InstanceIds":{
+          "shape":"AssessmentInstanceIds",
+          "documentation":"<p>The identifiers of the self-managed instances with SSM that are used to perform connectivity and validation tests.</p>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>By default, the service attaches a security group to allow network access to the self-managed nodes in your Amazon VPC. You can optionally supply your own security group that allows network traffic to and from your self-managed domain controllers outside of your Amazon VPC. </p>"
+        }
+      },
+      "documentation":"<p>Contains configuration parameters required to perform a directory assessment.</p>"
+    },
+    "AssessmentId":{
+      "type":"string",
+      "pattern":"^da-[0-9a-f]{18}$"
+    },
+    "AssessmentInstanceId":{
+      "type":"string",
+      "pattern":"^(i-[0-9a-f]{8}|i-[0-9a-f]{17}|mi-[0-9a-f]{8}|mi-[0-9a-f]{17})$"
+    },
+    "AssessmentInstanceIds":{
+      "type":"list",
+      "member":{"shape":"AssessmentInstanceId"},
+      "max":2,
+      "min":2
+    },
+    "AssessmentLimit":{
+      "type":"integer",
+      "max":100,
+      "min":1
+    },
+    "AssessmentReport":{
+      "type":"structure",
+      "members":{
+        "DomainControllerIp":{
+          "shape":"IpAddr",
+          "documentation":"<p>The IP address of the domain controller that was tested during the assessment.</p>"
+        },
+        "Validations":{
+          "shape":"AssessmentValidations",
+          "documentation":"<p>A list of validation results for different test categories performed against this domain controller.</p>"
+        }
+      },
+      "documentation":"<p>Contains the results of validation tests performed against a specific domain controller during a directory assessment.</p>"
+    },
+    "AssessmentReportType":{"type":"string"},
+    "AssessmentReports":{
+      "type":"list",
+      "member":{"shape":"AssessmentReport"}
+    },
+    "AssessmentStartTime":{"type":"timestamp"},
+    "AssessmentStatus":{"type":"string"},
+    "AssessmentStatusCode":{"type":"string"},
+    "AssessmentStatusReason":{"type":"string"},
+    "AssessmentSummary":{
+      "type":"structure",
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the directory assessment.</p>"
+        },
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory associated with this assessment.</p>"
+        },
+        "DnsName":{
+          "shape":"DirectoryName",
+          "documentation":"<p>The fully qualified domain name (FQDN) of the Active Directory domain being assessed.</p>"
+        },
+        "StartTime":{
+          "shape":"AssessmentStartTime",
+          "documentation":"<p>The date and time when the assessment was initiated.</p>"
+        },
+        "LastUpdateDateTime":{
+          "shape":"LastUpdateDateTime",
+          "documentation":"<p>The date and time when the assessment status was last updated.</p>"
+        },
+        "Status":{
+          "shape":"AssessmentStatus",
+          "documentation":"<p>The current status of the assessment. Valid values include <code>SUCCESS</code>, <code>FAILED</code>, <code>PENDING</code>, and <code>IN_PROGRESS</code>.</p>"
+        },
+        "CustomerDnsIps":{
+          "shape":"CustomerDnsIps",
+          "documentation":"<p>The IP addresses of the DNS servers or domain controllers in your self-managed AD environment.</p>"
+        },
+        "ReportType":{
+          "shape":"AssessmentReportType",
+          "documentation":"<p>The type of assessment report generated. Valid values include <code>CUSTOMER</code> and <code>SYSTEM</code>.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about a directory assessment, providing a high-level overview without detailed validation results.</p>"
+    },
+    "AssessmentValidation":{
+      "type":"structure",
+      "members":{
+        "Category":{
+          "shape":"AssessmentValidationCategory",
+          "documentation":"<p>The category of the validation test.</p>"
+        },
+        "Name":{
+          "shape":"AssessmentValidationName",
+          "documentation":"<p>The name of the specific validation test performed within the category.</p>"
+        },
+        "Status":{
+          "shape":"AssessmentValidationStatus",
+          "documentation":"<p>The result status of the validation test. Valid values include <code>SUCCESS</code>, <code>FAILED</code>, <code>PENDING</code>, and <code>IN_PROGRESS</code>.</p>"
+        },
+        "StatusCode":{
+          "shape":"AssessmentValidationStatusCode",
+          "documentation":"<p>A detailed status code providing additional information about the validation result.</p>"
+        },
+        "StatusReason":{
+          "shape":"AssessmentValidationStatusReason",
+          "documentation":"<p>A human-readable description of the validation result, including any error details or recommendations.</p>"
+        },
+        "StartTime":{
+          "shape":"AssessmentValidationTimeStamp",
+          "documentation":"<p>The date and time when the validation test was started.</p>"
+        },
+        "LastUpdateDateTime":{
+          "shape":"AssessmentValidationTimeStamp",
+          "documentation":"<p>The date and time when the validation test was completed or last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a specific validation test performed during a directory assessment.</p>"
+    },
+    "AssessmentValidationCategory":{"type":"string"},
+    "AssessmentValidationName":{"type":"string"},
+    "AssessmentValidationStatus":{"type":"string"},
+    "AssessmentValidationStatusCode":{"type":"string"},
+    "AssessmentValidationStatusReason":{"type":"string"},
+    "AssessmentValidationTimeStamp":{"type":"timestamp"},
+    "AssessmentValidations":{
+      "type":"list",
+      "member":{"shape":"AssessmentValidation"}
+    },
+    "AssessmentVersion":{"type":"string"},
+    "Assessments":{
+      "type":"list",
+      "member":{"shape":"AssessmentSummary"}
+    },
     "Attribute":{
       "type":"structure",
       "members":{
@@ -1408,6 +1819,18 @@
       "type":"list",
       "member":{"shape":"AvailabilityZone"}
     },
+    "CaEnrollmentPolicyStatus":{
+      "type":"string",
+      "enum":[
+        "InProgress",
+        "Success",
+        "Failed",
+        "Disabling",
+        "Disabled",
+        "Impaired"
+      ]
+    },
+    "CaEnrollmentPolicyStatusReason":{"type":"string"},
     "CancelSchemaExtensionRequest":{
       "type":"structure",
       "required":[
@@ -1427,8 +1850,7 @@
     },
     "CancelSchemaExtensionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Certificate":{
       "type":"structure",
@@ -1573,6 +1995,14 @@
       "type":"list",
       "member":{"shape":"CidrIp"}
     },
+    "CidrIpv6":{
+      "type":"string",
+      "pattern":"^((([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,7}:)|(([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4})|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|([0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}))|(:((:[0-9a-fA-F]{1,4}){1,7}|:)))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$"
+    },
+    "CidrIpv6s":{
+      "type":"list",
+      "member":{"shape":"CidrIpv6"}
+    },
     "ClientAuthenticationSettingInfo":{
       "type":"structure",
       "members":{
@@ -1670,6 +2100,10 @@
           "shape":"DnsIpAddrs",
           "documentation":"<p>The IP addresses of the remote DNS server associated with RemoteDomainName. This is the IP address of the DNS server that your conditional forwarder points to.</p>"
         },
+        "DnsIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The IPv6 addresses of the remote DNS server associated with RemoteDomainName. This is the IPv6 address of the DNS server that your conditional forwarder points to.</p>"
+        },
         "ReplicationScope":{
           "shape":"ReplicationScope",
           "documentation":"<p>The replication scope of the conditional forwarder. The only allowed value is <code>Domain</code>, which will replicate the conditional forwarder to all of the domain controllers for your Amazon Web Services directory.</p>"
@@ -1717,6 +2151,10 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>The tags to be assigned to AD Connector.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The network type for your directory. The default value is <code>IPv4</code> or <code>IPv6</code> based on the provided subnet capabilities.</p>"
         }
       },
       "documentation":"<p>Contains the inputs for the <a>ConnectDirectory</a> operation.</p>"
@@ -1815,8 +2253,7 @@
       "type":"structure",
       "required":[
         "DirectoryId",
-        "RemoteDomainName",
-        "DnsIpAddrs"
+        "RemoteDomainName"
       ],
       "members":{
         "DirectoryId":{
@@ -1830,14 +2267,17 @@
         "DnsIpAddrs":{
           "shape":"DnsIpAddrs",
           "documentation":"<p>The IP addresses of the remote DNS server associated with RemoteDomainName.</p>"
+        },
+        "DnsIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The IPv6 addresses of the remote DNS server associated with RemoteDomainName.</p>"
         }
       },
       "documentation":"<p>Initiates the creation of a conditional forwarder for your Directory Service for Microsoft Active Directory. Conditional forwarders are required in order to set up a trust relationship with another domain.</p>"
     },
     "CreateConditionalForwarderResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of a CreateConditinalForwarder request.</p>"
     },
     "CreateDirectoryRequest":{
@@ -1875,6 +2315,10 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>The tags to be assigned to the Simple AD directory.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The network type for your directory. Simple AD supports IPv4 and Dual-stack only.</p>"
         }
       },
       "documentation":"<p>Contains the inputs for the <a>CreateDirectory</a> operation. </p>"
@@ -1889,6 +2333,36 @@
       },
       "documentation":"<p>Contains the results of the <a>CreateDirectory</a> operation.</p>"
     },
+    "CreateHybridADRequest":{
+      "type":"structure",
+      "required":[
+        "SecretArn",
+        "AssessmentId"
+      ],
+      "members":{
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret that contains the credentials for the service account used to join hybrid domain controllers to your self-managed AD domain. This secret is used once and not stored.</p> <p>The secret must contain key-value pairs with keys matching <code>customerAdAdminDomainUsername</code> and <code>customerAdAdminDomainPassword</code>. For example: <code>{\"customerAdAdminDomainUsername\":\"carlos_salazar\",\"customerAdAdminDomainPassword\":\"ExamplePassword123!\"}</code>.</p>"
+        },
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the successful directory assessment that validates your self-managed AD environment. You must have a successful directory assessment before you create a hybrid directory.</p>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags to be assigned to the directory. Each tag consists of a key and value pair. You can specify multiple tags as a list.</p>"
+        }
+      }
+    },
+    "CreateHybridADResult":{
+      "type":"structure",
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The unique identifier of the newly created hybrid directory.</p>"
+        }
+      }
+    },
     "CreateLogSubscriptionRequest":{
       "type":"structure",
       "required":[
@@ -1908,8 +2382,7 @@
     },
     "CreateLogSubscriptionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateMicrosoftADRequest":{
       "type":"structure",
@@ -1946,6 +2419,10 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>The tags to be assigned to the Managed Microsoft AD directory.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p> The network type for your domain. The default value is <code>IPv4</code> or <code>IPv6</code> based on the provided subnet capabilities.</p>"
         }
       },
       "documentation":"<p>Creates an Managed Microsoft AD directory.</p>"
@@ -2020,6 +2497,10 @@
           "shape":"DnsIpAddrs",
           "documentation":"<p>The IP addresses of the remote DNS server associated with RemoteDomainName.</p>"
         },
+        "ConditionalForwarderIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The IPv6 addresses of the remote DNS server associated with RemoteDomainName.</p>"
+        },
         "SelectiveAuth":{
           "shape":"SelectiveAuth",
           "documentation":"<p>Optional parameter to enable selective authentication for the trust.</p>"
@@ -2038,6 +2519,12 @@
       "documentation":"<p>The result of a CreateTrust request.</p>"
     },
     "CreatedDateTime":{"type":"timestamp"},
+    "CustomerDnsIps":{
+      "type":"list",
+      "member":{"shape":"IpAddr"},
+      "max":2,
+      "min":2
+    },
     "CustomerId":{
       "type":"string",
       "pattern":"^(\\d{12})$"
@@ -2058,6 +2545,25 @@
         "Failed"
       ]
     },
+    "DeleteADAssessmentRequest":{
+      "type":"structure",
+      "required":["AssessmentId"],
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the directory assessment to delete.</p>"
+        }
+      }
+    },
+    "DeleteADAssessmentResult":{
+      "type":"structure",
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the deleted directory assessment.</p>"
+        }
+      }
+    },
     "DeleteAssociatedConditionalForwarder":{"type":"boolean"},
     "DeleteConditionalForwarderRequest":{
       "type":"structure",
@@ -2079,8 +2585,7 @@
     },
     "DeleteConditionalForwarderResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of a DeleteConditionalForwarder request.</p>"
     },
     "DeleteDirectoryRequest":{
@@ -2116,8 +2621,7 @@
     },
     "DeleteLogSubscriptionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSnapshotRequest":{
       "type":"structure",
@@ -2184,8 +2688,7 @@
     },
     "DeregisterCertificateResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterEventTopicRequest":{
       "type":"structure",
@@ -2207,9 +2710,68 @@
     },
     "DeregisterEventTopicResult":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>The result of a DeregisterEventTopic request.</p>"
+    },
+    "DescribeADAssessmentRequest":{
+      "type":"structure",
+      "required":["AssessmentId"],
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The identifier of the directory assessment to describe.</p>"
+        }
+      }
+    },
+    "DescribeADAssessmentResult":{
+      "type":"structure",
       "members":{
+        "Assessment":{
+          "shape":"Assessment",
+          "documentation":"<p>Detailed information about the self-managed instance settings (IDs and DNS IPs).</p>"
+        },
+        "AssessmentReports":{
+          "shape":"AssessmentReports",
+          "documentation":"<p>A list of assessment reports containing validation results for each domain controller and test category. Each report includes specific validation details and outcomes.</p>"
+        }
+      }
+    },
+    "DescribeCAEnrollmentPolicyRequest":{
+      "type":"structure",
+      "required":["DirectoryId"],
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory for which to retrieve the CA enrollment policy information.</p>"
+        }
       },
-      "documentation":"<p>The result of a DeregisterEventTopic request.</p>"
+      "documentation":"<p>Contains the inputs for the <a>DescribeCAEnrollmentPolicy</a> operation.</p>"
+    },
+    "DescribeCAEnrollmentPolicyResult":{
+      "type":"structure",
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory associated with this CA enrollment policy.</p>"
+        },
+        "PcaConnectorArn":{
+          "shape":"PcaConnectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Private Certificate Authority (PCA) connector that is configured for automatic certificate enrollment in this directory.</p>"
+        },
+        "CaEnrollmentPolicyStatus":{
+          "shape":"CaEnrollmentPolicyStatus",
+          "documentation":"<p>The current status of the CA enrollment policy. This indicates if automatic certificate enrollment is currently active, inactive, or in a transitional state.</p> <p>Valid values:</p> <ul> <li> <p> <code>IN_PROGRESS</code> - The policy is being activated T</p> </li> <li> <p> <code>SUCCESS</code> - The policy is active and automatic certificate enrollment is operational</p> </li> <li> <p> <code>FAILED</code> - The policy activation or deactivation failed</p> </li> <li> <p> <code>DISABLING</code> - The policy is being deactivated</p> </li> <li> <p> <code>DISABLED</code> - The policy is inactive and automatic certificate enrollment is not available</p> </li> <li> <p> <code>IMPAIRED</code> - Network connectivity is impaired.</p> </li> </ul>"
+        },
+        "LastUpdatedDateTime":{
+          "shape":"LastUpdatedDateTime",
+          "documentation":"<p>The date and time when the CA enrollment policy was last modified or updated.</p>"
+        },
+        "CaEnrollmentPolicyStatusReason":{
+          "shape":"CaEnrollmentPolicyStatusReason",
+          "documentation":"<p>Additional information explaining the current status of the CA enrollment policy, particularly useful when the policy is in an error or transitional state.</p>"
+        }
+      },
+      "documentation":"<p>Contains the results of the <a>DescribeCAEnrollmentPolicy</a> operation.</p>"
     },
     "DescribeCertificateRequest":{
       "type":"structure",
@@ -2320,7 +2882,7 @@
       "members":{
         "DirectoryDescriptions":{
           "shape":"DirectoryDescriptions",
-          "documentation":"<p>The list of <a>DirectoryDescription</a> objects that were retrieved.</p> <p>It is possible that this list contains less than the number of items specified in the <code>Limit</code> member of the request. This occurs if there are less than the requested number of items left to retrieve, or if the limitations of the operation have been exceeded.</p>"
+          "documentation":"<p>The list of available <a>DirectoryDescription</a> objects that were retrieved.</p> <p>It is possible that this list contains less than the number of items specified in the <code>Limit</code> member of the request. This occurs if there are less than the requested number of items left to retrieve, or if the limitations of the operation have been exceeded.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2407,6 +2969,37 @@
       },
       "documentation":"<p>The result of a DescribeEventTopic request.</p>"
     },
+    "DescribeHybridADUpdateRequest":{
+      "type":"structure",
+      "required":["DirectoryId"],
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the hybrid directory for which to retrieve update information.</p>"
+        },
+        "UpdateType":{
+          "shape":"HybridUpdateType",
+          "documentation":"<p>The type of update activities to retrieve. Valid values include <code>SelfManagedInstances</code> and <code>HybridAdministratorAccount</code>.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request to <a>DescribeHybridADUpdate</a>. Pass null if this is the first request.</p>"
+        }
+      }
+    },
+    "DescribeHybridADUpdateResult":{
+      "type":"structure",
+      "members":{
+        "UpdateActivities":{
+          "shape":"HybridUpdateActivities",
+          "documentation":"<p>Information about update activities for the hybrid directory, organized by update type.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If not null, more results are available. Pass this value for the <code>NextToken</code> parameter in a subsequent request to retrieve the next set of items.</p>"
+        }
+      }
+    },
     "DescribeLDAPSSettingsRequest":{
       "type":"structure",
       "required":["DirectoryId"],
@@ -2719,7 +3312,6 @@
       "required":[
         "VpcId",
         "SubnetIds",
-        "CustomerDnsIps",
         "CustomerUserName"
       ],
       "members":{
@@ -2733,14 +3325,18 @@
         },
         "CustomerDnsIps":{
           "shape":"DnsIpAddrs",
-          "documentation":"<p>A list of one or more IP addresses of DNS servers or domain controllers in your self-managed directory.</p>"
+          "documentation":"<p>The IP addresses of DNS servers or domain controllers in your self-managed directory.</p>"
+        },
+        "CustomerDnsIpsV6":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The IPv6 addresses of DNS servers or domain controllers in your self-managed directory.</p>"
         },
         "CustomerUserName":{
           "shape":"UserName",
           "documentation":"<p>The user name of an account in your self-managed directory that is used to connect to the directory. This account must have the following permissions:</p> <ul> <li> <p>Read users and groups</p> </li> <li> <p>Create computer objects</p> </li> <li> <p>Join computers to the domain</p> </li> </ul>"
         }
       },
-      "documentation":"<p>Contains information for the <a>ConnectDirectory</a> operation when an AD Connector directory is being created.</p>"
+      "documentation":"<p>Contains connection settings for creating an AD Connector with the <a>ConnectDirectory</a> action.</p>"
     },
     "DirectoryConnectSettingsDescription":{
       "type":"structure",
@@ -2763,11 +3359,15 @@
         },
         "AvailabilityZones":{
           "shape":"AvailabilityZones",
-          "documentation":"<p>A list of the Availability Zones that the directory is in.</p>"
+          "documentation":"<p>The Availability Zones that the directory is in.</p>"
         },
         "ConnectIps":{
           "shape":"IpAddrs",
           "documentation":"<p>The IP addresses of the AD Connector servers.</p>"
+        },
+        "ConnectIpsV6":{
+          "shape":"IpV6Addrs",
+          "documentation":"<p>The IPv6 addresses of the AD Connector servers.</p>"
         }
       },
       "documentation":"<p>Contains information about an AD Connector directory.</p>"
@@ -2797,11 +3397,11 @@
         },
         "Alias":{
           "shape":"AliasName",
-          "documentation":"<p>The alias for the directory. If no alias has been created for the directory, the alias is the directory identifier, such as <code>d-XXXXXXXXXX</code>.</p>"
+          "documentation":"<p>The alias for the directory. If no alias exists, the alias is the directory identifier, such as <code>d-XXXXXXXXXX</code>.</p>"
         },
         "AccessUrl":{
           "shape":"AccessUrl",
-          "documentation":"<p>The access URL for the directory, such as <code>http://&lt;alias&gt;.awsapps.com</code>. If no alias has been created for the directory, <code>&lt;alias&gt;</code> is the directory identifier, such as <code>d-XXXXXXXXXX</code>.</p>"
+          "documentation":"<p>The access URL for the directory, such as <code>http://&lt;alias&gt;.awsapps.com</code>. If no alias exists, <code>&lt;alias&gt;</code> is the directory identifier, such as <code>d-XXXXXXXXXX</code>.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -2809,7 +3409,11 @@
         },
         "DnsIpAddrs":{
           "shape":"DnsIpAddrs",
-          "documentation":"<p>The IP addresses of the DNS servers for the directory. For a Simple AD or Microsoft AD directory, these are the IP addresses of the Simple AD or Microsoft AD directory servers. For an AD Connector directory, these are the IP addresses of the DNS servers or domain controllers in your self-managed directory to which the AD Connector is connected.</p>"
+          "documentation":"<p>The IP addresses of the DNS servers for the directory. For a Simple AD or Microsoft AD directory, these are the IP addresses of the Simple AD or Microsoft AD directory servers. For an AD Connector directory, these are the IP addresses of self-managed directory to which the AD Connector is connected.</p>"
+        },
+        "DnsIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The IPv6 addresses of the DNS servers for the directory. For a Simple AD or Microsoft AD directory, these are the IPv6 addresses of the Simple AD or Microsoft AD directory servers. For an AD Connector directory, these are the IPv6 addresses of the DNS servers or domain controllers in your self-managed directory to which the AD Connector is connected.</p>"
         },
         "Stage":{
           "shape":"DirectoryStage",
@@ -2829,11 +3433,11 @@
         },
         "LaunchTime":{
           "shape":"LaunchTime",
-          "documentation":"<p>Specifies when the directory was created.</p>"
+          "documentation":"<p>The date and time when the directory was created.</p>"
         },
         "StageLastUpdatedDateTime":{
           "shape":"LastUpdatedDateTime",
-          "documentation":"<p>The date and time that the stage was last updated.</p>"
+          "documentation":"<p>The date and time when the stage was last updated.</p>"
         },
         "Type":{
           "shape":"DirectoryType",
@@ -2841,15 +3445,15 @@
         },
         "VpcSettings":{
           "shape":"DirectoryVpcSettingsDescription",
-          "documentation":"<p>A <a>DirectoryVpcSettingsDescription</a> object that contains additional information about a directory. This member is only present if the directory is a Simple AD or Managed Microsoft AD directory.</p>"
+          "documentation":"<p>A <a>DirectoryVpcSettingsDescription</a> object that contains additional information about a directory. Present only for Simple AD and Managed Microsoft AD directories.</p>"
         },
         "ConnectSettings":{
           "shape":"DirectoryConnectSettingsDescription",
-          "documentation":"<p>A <a>DirectoryConnectSettingsDescription</a> object that contains additional information about an AD Connector directory. This member is only present if the directory is an AD Connector directory.</p>"
+          "documentation":"<p> <a>DirectoryConnectSettingsDescription</a> object that contains additional information about an AD Connector directory. Present only for AD Connector directories.</p>"
         },
         "RadiusSettings":{
           "shape":"RadiusSettings",
-          "documentation":"<p>A <a>RadiusSettings</a> object that contains information about the RADIUS server configured for this directory.</p>"
+          "documentation":"<p>Information about the <a>RadiusSettings</a> object configured for this directory.</p>"
         },
         "RadiusStatus":{
           "shape":"RadiusStatus",
@@ -2861,7 +3465,7 @@
         },
         "SsoEnabled":{
           "shape":"SsoEnabled",
-          "documentation":"<p>Indicates if single sign-on is enabled for the directory. For more information, see <a>EnableSso</a> and <a>DisableSso</a>.</p>"
+          "documentation":"<p>Indicates whether single sign-on is enabled for the directory. For more information, see <a>EnableSso</a> and <a>DisableSso</a>.</p>"
         },
         "DesiredNumberOfDomainControllers":{
           "shape":"DesiredNumberOfDomainControllers",
@@ -2878,6 +3482,14 @@
         "OsVersion":{
           "shape":"OSVersion",
           "documentation":"<p>The operating system (OS) version of the directory.</p>"
+        },
+        "HybridSettings":{
+          "shape":"HybridSettingsDescription",
+          "documentation":"<p>Contains information about the hybrid directory configuration for the directory, including Amazon Web Services System Manager managed node identifiers and DNS IPs.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The network type of the directory.</p>"
         }
       },
       "documentation":"<p>Contains information about an Directory Service directory.</p>"
@@ -2900,7 +3512,8 @@
       "type":"string",
       "enum":[
         "Enterprise",
-        "Standard"
+        "Standard",
+        "Hybrid"
       ]
     },
     "DirectoryId":{
@@ -2996,6 +3609,16 @@
         "Large"
       ]
     },
+    "DirectorySizeUpdateSettings":{
+      "type":"structure",
+      "members":{
+        "DirectorySize":{
+          "shape":"DirectorySize",
+          "documentation":"<p>The target directory size for the update operation.</p>"
+        }
+      },
+      "documentation":"<p>Contains the directory size configuration for update operations.</p>"
+    },
     "DirectoryStage":{
       "type":"string",
       "enum":[
@@ -3047,7 +3670,7 @@
           "documentation":"<p>The identifiers of the subnets for the directory servers. The two subnets must be in different Availability Zones. Directory Service creates a directory server and a DNS server in each of these subnets.</p>"
         }
       },
-      "documentation":"<p>Contains VPC information for the <a>CreateDirectory</a> or <a>CreateMicrosoftAD</a> operation.</p>"
+      "documentation":"<p>Contains VPC information for the <a>CreateDirectory</a>, <a>CreateMicrosoftAD</a>, or <a>CreateHybridAD</a> operation.</p>"
     },
     "DirectoryVpcSettingsDescription":{
       "type":"structure",
@@ -3071,6 +3694,31 @@
       },
       "documentation":"<p>Contains information about the directory.</p>"
     },
+    "DisableAlreadyInProgressException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ExceptionMessage"},
+        "RequestId":{"shape":"RequestId"}
+      },
+      "documentation":"<p>A disable operation for CA enrollment policy is already in progress for this directory.</p>",
+      "exception":true
+    },
+    "DisableCAEnrollmentPolicyRequest":{
+      "type":"structure",
+      "required":["DirectoryId"],
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory for which to disable the CA enrollment policy.</p>"
+        }
+      },
+      "documentation":"<p>Contains the inputs for the <a>DisableCAEnrollmentPolicy</a> operation.</p>"
+    },
+    "DisableCAEnrollmentPolicyResult":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Contains the results of the <a>DisableCAEnrollmentPolicy</a> operation.</p>"
+    },
     "DisableClientAuthenticationRequest":{
       "type":"structure",
       "required":[
@@ -3090,8 +3738,7 @@
     },
     "DisableClientAuthenticationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableDirectoryDataAccessRequest":{
       "type":"structure",
@@ -3105,8 +3752,7 @@
     },
     "DisableDirectoryDataAccessResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableLDAPSRequest":{
       "type":"structure",
@@ -3127,8 +3773,7 @@
     },
     "DisableLDAPSResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableRadiusRequest":{
       "type":"structure",
@@ -3143,8 +3788,7 @@
     },
     "DisableRadiusResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>DisableRadius</a> operation.</p>"
     },
     "DisableSsoRequest":{
@@ -3168,14 +3812,17 @@
     },
     "DisableSsoResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>DisableSso</a> operation.</p>"
     },
     "DnsIpAddrs":{
       "type":"list",
       "member":{"shape":"IpAddr"}
     },
+    "DnsIpv6Addrs":{
+      "type":"list",
+      "member":{"shape":"Ipv6Addr"}
+    },
     "DomainController":{
       "type":"structure",
       "members":{
@@ -3191,6 +3838,10 @@
           "shape":"IpAddr",
           "documentation":"<p>The IP address of the domain controller.</p>"
         },
+        "DnsIpv6Addr":{
+          "shape":"Ipv6Addr",
+          "documentation":"<p>The IPv6 address of the domain controller.</p>"
+        },
         "VpcId":{
           "shape":"VpcId",
           "documentation":"<p>The identifier of the VPC that contains the domain controller.</p>"
@@ -3257,6 +3908,38 @@
       "type":"list",
       "member":{"shape":"DomainController"}
     },
+    "EnableAlreadyInProgressException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ExceptionMessage"},
+        "RequestId":{"shape":"RequestId"}
+      },
+      "documentation":"<p>An enable operation for CA enrollment policy is already in progress for this directory.</p>",
+      "exception":true
+    },
+    "EnableCAEnrollmentPolicyRequest":{
+      "type":"structure",
+      "required":[
+        "DirectoryId",
+        "PcaConnectorArn"
+      ],
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory for which to enable the CA enrollment policy.</p>"
+        },
+        "PcaConnectorArn":{
+          "shape":"PcaConnectorArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Private Certificate Authority (PCA) connector to use for automatic certificate enrollment. This connector must be properly configured and accessible from the directory.</p> <p>The ARN format is: <code>arn:aws:pca-connector-ad:<i>region</i>:<i>account-id</i>:connector/<i>connector-id</i> </code> </p>"
+        }
+      },
+      "documentation":"<p>Contains the inputs for the <a>EnableCAEnrollmentPolicy</a> operation.</p>"
+    },
+    "EnableCAEnrollmentPolicyResult":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Contains the results of the <a>EnableCAEnrollmentPolicy</a> operation.</p>"
+    },
     "EnableClientAuthenticationRequest":{
       "type":"structure",
       "required":[
@@ -3276,8 +3959,7 @@
     },
     "EnableClientAuthenticationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableDirectoryDataAccessRequest":{
       "type":"structure",
@@ -3291,8 +3973,7 @@
     },
     "EnableDirectoryDataAccessResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableLDAPSRequest":{
       "type":"structure",
@@ -3313,8 +3994,7 @@
     },
     "EnableLDAPSResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableRadiusRequest":{
       "type":"structure",
@@ -3336,8 +4016,7 @@
     },
     "EnableRadiusResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>EnableRadius</a> operation.</p>"
     },
     "EnableSsoRequest":{
@@ -3361,8 +4040,7 @@
     },
     "EnableSsoResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>EnableSso</a> operation.</p>"
     },
     "EndDateTime":{"type":"timestamp"},
@@ -3420,8 +4098,7 @@
     },
     "GetDirectoryLimitsRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the inputs for the <a>GetDirectoryLimits</a> operation.</p>"
     },
     "GetDirectoryLimitsResult":{
@@ -3455,6 +4132,126 @@
       },
       "documentation":"<p>Contains the results of the <a>GetSnapshotLimits</a> operation.</p>"
     },
+    "HybridAdministratorAccountUpdate":{
+      "type":"structure",
+      "required":["SecretArn"],
+      "members":{
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret that contains the credentials for the AD administrator user, and enables hybrid domain controllers to join the managed AD domain. For example:</p> <p> <code> {\"customerAdAdminDomainUsername\":\"carlos_salazar\",\"customerAdAdminDomainPassword\":\"ExamplePassword123!\"}. </code> </p>"
+        }
+      },
+      "documentation":"<p> Use to recover to the hybrid directory administrator account credentials.</p>"
+    },
+    "HybridCustomerInstancesSettings":{
+      "type":"structure",
+      "required":[
+        "CustomerDnsIps",
+        "InstanceIds"
+      ],
+      "members":{
+        "CustomerDnsIps":{
+          "shape":"CustomerDnsIps",
+          "documentation":"<p>The IP addresses of the DNS servers or domain controllers in your self-managed AD environment.</p>"
+        },
+        "InstanceIds":{
+          "shape":"AssessmentInstanceIds",
+          "documentation":"<p>The identifiers of the self-managed instances with SSM used in hybrid directory.</p>"
+        }
+      },
+      "documentation":"<p>Contains configuration settings for self-managed instances with SSM used in hybrid directory operations.</p>"
+    },
+    "HybridSettingsDescription":{
+      "type":"structure",
+      "members":{
+        "SelfManagedDnsIpAddrs":{
+          "shape":"IpAddrs",
+          "documentation":"<p>The IP addresses of the DNS servers in your self-managed AD environment.</p>"
+        },
+        "SelfManagedInstanceIds":{
+          "shape":"AssessmentInstanceIds",
+          "documentation":"<p>The identifiers of the self-managed instances with SSM used for hybrid directory operations.</p>"
+        }
+      },
+      "documentation":"<p>Describes the current hybrid directory configuration settings for a directory.</p>"
+    },
+    "HybridUpdateActivities":{
+      "type":"structure",
+      "members":{
+        "SelfManagedInstances":{
+          "shape":"HybridUpdateInfoEntries",
+          "documentation":"<p>A list of update activities related to the self-managed instances with SSM in the self-managed instances with SSM hybrid directory configuration.</p>"
+        },
+        "HybridAdministratorAccount":{
+          "shape":"HybridUpdateInfoEntries",
+          "documentation":"<p>A list of update activities related to hybrid directory administrator account changes.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about update activities for different components of a hybrid directory.</p>"
+    },
+    "HybridUpdateInfoEntries":{
+      "type":"list",
+      "member":{"shape":"HybridUpdateInfoEntry"}
+    },
+    "HybridUpdateInfoEntry":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"UpdateStatus",
+          "documentation":"<p>The current status of the update activity. Valid values include <code>UPDATED</code>, <code>UPDATING</code>, and <code>UPDATE_FAILED</code>.</p>"
+        },
+        "StatusReason":{
+          "shape":"UpdateStatusReason",
+          "documentation":"<p>A human-readable description of the update status, including any error details or progress information.</p>"
+        },
+        "InitiatedBy":{
+          "shape":"InitiatedBy",
+          "documentation":"<p>Specifies if the update was initiated by the customer or Amazon Web Services.</p>"
+        },
+        "NewValue":{
+          "shape":"HybridUpdateValue",
+          "documentation":"<p>The new configuration values being applied in this update.</p>"
+        },
+        "PreviousValue":{
+          "shape":"HybridUpdateValue",
+          "documentation":"<p>The previous configuration values before this update was applied.</p>"
+        },
+        "StartTime":{
+          "shape":"StartDateTime",
+          "documentation":"<p>The date and time when the update activity was initiated.</p>"
+        },
+        "LastUpdatedDateTime":{
+          "shape":"LastUpdatedDateTime",
+          "documentation":"<p>The date and time when the update activity status was last updated.</p>"
+        },
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The identifier of the assessment performed to validate this update configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains detailed information about a specific update activity for a hybrid directory component.</p>"
+    },
+    "HybridUpdateType":{
+      "type":"string",
+      "enum":[
+        "SelfManagedInstances",
+        "HybridAdministratorAccount"
+      ]
+    },
+    "HybridUpdateValue":{
+      "type":"structure",
+      "members":{
+        "InstanceIds":{
+          "shape":"AssessmentInstanceIds",
+          "documentation":"<p>The identifiers of the self-managed instances with SSM in the hybrid directory configuration.</p>"
+        },
+        "DnsIps":{
+          "shape":"CustomerDnsIps",
+          "documentation":"<p>The IP addresses of the DNS servers or domain controllers in the hybrid directory configuration.</p>"
+        }
+      },
+      "documentation":"<p>Contains the configuration values for a hybrid directory update, including Amazon Web Services System Manager managed node and DNS information.</p>"
+    },
     "IncompatibleSettingsException":{
       "type":"structure",
       "members":{
@@ -3550,14 +4347,18 @@
       "members":{
         "CidrIp":{
           "shape":"CidrIp",
-          "documentation":"<p>IP address block using CIDR format, for example 10.0.0.0/24. This is often the address block of the DNS server used for your self-managed domain. For a single IP address use a CIDR address block with /32. For example 10.0.0.0/32.</p>"
+          "documentation":"<p>IP address block in CIDR format, such as 10.0.0.0/24. This is often the address block of the DNS server used for your self-managed domain. For a single IP address, use a CIDR address block with /32. For example, 10.0.0.0/32.</p>"
+        },
+        "CidrIpv6":{
+          "shape":"CidrIpv6",
+          "documentation":"<p>IPv6 address block in CIDR format, such as 2001:db8::/32. This is often the address block of the DNS server used for your self-managed domain. For a single IPv6 address, use a CIDR address block with /128. For example, 2001:db8::1/128.</p>"
         },
         "Description":{
           "shape":"Description",
           "documentation":"<p>Description of the address block.</p>"
         }
       },
-      "documentation":"<p>IP address block. This is often the address block of the DNS server used for your self-managed domain. </p>"
+      "documentation":"<p>Contains the IP address block. This is often the address block of the DNS server used for your self-managed domain. </p>"
     },
     "IpRouteInfo":{
       "type":"structure",
@@ -3570,6 +4371,10 @@
           "shape":"CidrIp",
           "documentation":"<p>IP address block in the <a>IpRoute</a>.</p>"
         },
+        "CidrIpv6":{
+          "shape":"CidrIpv6",
+          "documentation":"<p>IPv6 address block in the <a>IpRoute</a>.</p>"
+        },
         "IpRouteStatusMsg":{
           "shape":"IpRouteStatusMsg",
           "documentation":"<p>The status of the IP address block.</p>"
@@ -3618,6 +4423,14 @@
       "type":"list",
       "member":{"shape":"IpRouteInfo"}
     },
+    "IpV6Addrs":{
+      "type":"list",
+      "member":{"shape":"Ipv6Addr"}
+    },
+    "Ipv6Addr":{
+      "type":"string",
+      "pattern":"^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
+    },
     "LDAPSSettingInfo":{
       "type":"structure",
       "members":{
@@ -3654,6 +4467,7 @@
       "type":"string",
       "enum":["Client"]
     },
+    "LastUpdateDateTime":{"type":"timestamp"},
     "LastUpdatedDateTime":{"type":"timestamp"},
     "LaunchTime":{"type":"timestamp"},
     "LdifContent":{
@@ -3665,6 +4479,36 @@
       "type":"integer",
       "min":0
     },
+    "ListADAssessmentsRequest":{
+      "type":"structure",
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory for which to list assessments. If not specified, all assessments in your account are returned.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request to <a>ListADAssessments</a>. Pass null if this is the first request.</p>"
+        },
+        "Limit":{
+          "shape":"AssessmentLimit",
+          "documentation":"<p>The maximum number of assessment summaries to return.</p>"
+        }
+      }
+    },
+    "ListADAssessmentsResult":{
+      "type":"structure",
+      "members":{
+        "Assessments":{
+          "shape":"Assessments",
+          "documentation":"<p>A list of assessment summaries containing basic information about each directory assessment.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If not null, more results are available. Pass this value for the <code>NextToken</code> parameter in a subsequent request to retrieve the next set of items.</p>"
+        }
+      }
+    },
     "ListCertificatesRequest":{
       "type":"structure",
       "required":["DirectoryId"],
@@ -3848,6 +4692,28 @@
       "member":{"shape":"LogSubscription"}
     },
     "ManualSnapshotsLimitReached":{"type":"boolean"},
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "Dual-stack",
+        "IPv4",
+        "IPv6"
+      ]
+    },
+    "NetworkUpdateSettings":{
+      "type":"structure",
+      "members":{
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The target network type for the directory update.</p>"
+        },
+        "CustomerDnsIpsV6":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>IPv6 addresses of DNS servers or domain controllers in the self-managed directory. Required only when updating an AD Connector directory.</p>"
+        }
+      },
+      "documentation":"<p>Contains the network configuration for directory update operations.</p>"
+    },
     "NextToken":{"type":"string"},
     "NoAvailableCertificateException":{
       "type":"structure",
@@ -3874,10 +4740,10 @@
       "members":{
         "OSVersion":{
           "shape":"OSVersion",
-          "documentation":"<p> OS version that the directory needs to be updated to. </p>"
+          "documentation":"<p>OS version that the directory needs to be updated to.</p>"
         }
       },
-      "documentation":"<p> OS version that the directory needs to be updated to. </p>"
+      "documentation":"<p>OS version that the directory needs to be updated to.</p>"
     },
     "OSVersion":{
       "type":"string",
@@ -3915,20 +4781,28 @@
           "shape":"DnsIpAddrs",
           "documentation":"<p>IP address of the directory’s domain controllers.</p>"
         },
+        "DnsIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>IPv6 addresses of the directory’s domain controllers.</p>"
+        },
         "VpcSettings":{
           "shape":"DirectoryVpcSettingsDescription",
           "documentation":"<p>Information about the VPC settings for the directory.</p>"
         },
         "RadiusSettings":{
           "shape":"RadiusSettings",
-          "documentation":"<p>A <a>RadiusSettings</a> object that contains information about the RADIUS server.</p>"
+          "documentation":"<p>Information about the <a>RadiusSettings</a> object server configuration.</p>"
         },
         "RadiusStatus":{
           "shape":"RadiusStatus",
-          "documentation":"<p>Information about the status of the RADIUS server.</p>"
+          "documentation":"<p>The status of the RADIUS server.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Network type of the directory in the directory owner account.</p>"
         }
       },
-      "documentation":"<p>Describes the directory owner account details that have been shared to the directory consumer account.</p>"
+      "documentation":"<p>Contains the directory owner account details shared with the directory consumer account.</p>"
     },
     "PageLimit":{
       "type":"integer",
@@ -3940,6 +4814,10 @@
       "pattern":"(?=^.{8,64}$)((?=.*\\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\\d)(?=.*[^A-Za-z0-9\\s])(?=.*[a-z])|(?=.*[^A-Za-z0-9\\s])(?=.*[A-Z])(?=.*[a-z])|(?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\\s]))^.*",
       "sensitive":true
     },
+    "PcaConnectorArn":{
+      "type":"string",
+      "pattern":"^arn:[\\w-]+:pca-connector-ad:[\\w-]+:[0-9]+:connector\\/[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$"
+    },
     "PortNumber":{
       "type":"integer",
       "max":65535,
@@ -3969,7 +4847,11 @@
       "members":{
         "RadiusServers":{
           "shape":"Servers",
-          "documentation":"<p>An array of strings that contains the fully qualified domain name (FQDN) or IP addresses of the RADIUS server endpoints, or the FQDN or IP addresses of your RADIUS server load balancer.</p>"
+          "documentation":"<p>The fully qualified domain name (FQDN) or IP addresses of the RADIUS server endpoints, or the FQDN or IP addresses of your RADIUS server load balancer.</p>"
+        },
+        "RadiusServersIpv6":{
+          "shape":"Servers",
+          "documentation":"<p>The IPv6 addresses of the RADIUS server endpoints or RADIUS server load balancer.</p>"
         },
         "RadiusPort":{
           "shape":"PortNumber",
@@ -4154,8 +5036,7 @@
     },
     "RegisterEventTopicResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of a RegisterEventTopic request.</p>"
     },
     "RejectSharedDirectoryRequest":{
@@ -4188,10 +5069,7 @@
     },
     "RemoveIpRoutesRequest":{
       "type":"structure",
-      "required":[
-        "DirectoryId",
-        "CidrIps"
-      ],
+      "required":["DirectoryId"],
       "members":{
         "DirectoryId":{
           "shape":"DirectoryId",
@@ -4200,13 +5078,16 @@
         "CidrIps":{
           "shape":"CidrIps",
           "documentation":"<p>IP address blocks that you want to remove.</p>"
+        },
+        "CidrIpv6s":{
+          "shape":"CidrIpv6s",
+          "documentation":"<p>IPv6 address blocks that you want to remove.</p>"
         }
       }
     },
     "RemoveIpRoutesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveRegionRequest":{
       "type":"structure",
@@ -4220,8 +5101,7 @@
     },
     "RemoveRegionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveTagsFromResourceRequest":{
       "type":"structure",
@@ -4242,8 +5122,7 @@
     },
     "RemoveTagsFromResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReplicationScope":{
       "type":"string",
@@ -4278,8 +5157,7 @@
     },
     "ResetUserPasswordResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceId":{
       "type":"string",
@@ -4298,8 +5176,7 @@
     },
     "RestoreFromSnapshotResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>RestoreFromSnapshot</a> operation.</p>"
     },
     "SID":{
@@ -4365,10 +5242,20 @@
       "type":"list",
       "member":{"shape":"SchemaExtensionInfo"}
     },
+    "SecretArn":{
+      "type":"string",
+      "pattern":"^arn:aws:secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=.@-]+-[a-zA-Z0-9]{6}$"
+    },
     "SecurityGroupId":{
       "type":"string",
       "pattern":"^(sg-[0-9a-f]{8}|sg-[0-9a-f]{17})$"
     },
+    "SecurityGroupIds":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "max":1,
+      "min":1
+    },
     "SelectiveAuth":{
       "type":"string",
       "enum":[
@@ -4694,6 +5581,28 @@
     },
     "SsoEnabled":{"type":"boolean"},
     "StageReason":{"type":"string"},
+    "StartADAssessmentRequest":{
+      "type":"structure",
+      "members":{
+        "AssessmentConfiguration":{
+          "shape":"AssessmentConfiguration",
+          "documentation":"<p>Configuration parameters for the directory assessment, including DNS server information, domain name, Amazon VPC subnet, and Amazon Web Services System Manager managed node details.</p>"
+        },
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the directory for which to perform the assessment. This should be an existing directory. If the assessment is not for an existing directory, this parameter should be omitted.</p>"
+        }
+      }
+    },
+    "StartADAssessmentResult":{
+      "type":"structure",
+      "members":{
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The unique identifier of the newly started directory assessment. Use this identifier to monitor assessment progress and retrieve results.</p>"
+        }
+      }
+    },
     "StartDateTime":{"type":"timestamp"},
     "StartSchemaExtensionRequest":{
       "type":"structure",
@@ -4989,8 +5898,7 @@
       "type":"structure",
       "required":[
         "DirectoryId",
-        "RemoteDomainName",
-        "DnsIpAddrs"
+        "RemoteDomainName"
       ],
       "members":{
         "DirectoryId":{
@@ -5004,14 +5912,17 @@
         "DnsIpAddrs":{
           "shape":"DnsIpAddrs",
           "documentation":"<p>The updated IP addresses of the remote DNS server associated with the conditional forwarder.</p>"
+        },
+        "DnsIpv6Addrs":{
+          "shape":"DnsIpv6Addrs",
+          "documentation":"<p>The updated IPv6 addresses of the remote DNS server associated with the conditional forwarder.</p>"
         }
       },
       "documentation":"<p>Updates a conditional forwarder.</p>"
     },
     "UpdateConditionalForwarderResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result of an UpdateConditionalForwarder request.</p>"
     },
     "UpdateDirectorySetupRequest":{
@@ -5023,26 +5934,64 @@
       "members":{
         "DirectoryId":{
           "shape":"DirectoryId",
-          "documentation":"<p> The identifier of the directory on which you want to perform the update. </p>"
+          "documentation":"<p>The identifier of the directory to update.</p>"
         },
         "UpdateType":{
           "shape":"UpdateType",
-          "documentation":"<p> The type of update that needs to be performed on the directory. For example, OS. </p>"
+          "documentation":"<p>The type of update to perform on the directory.</p>"
         },
         "OSUpdateSettings":{
           "shape":"OSUpdateSettings",
-          "documentation":"<p> The settings for the OS update that needs to be performed on the directory. </p>"
+          "documentation":"<p>Operating system configuration to apply during the directory update operation.</p>"
+        },
+        "DirectorySizeUpdateSettings":{
+          "shape":"DirectorySizeUpdateSettings",
+          "documentation":"<p>Directory size configuration to apply during the update operation.</p>"
+        },
+        "NetworkUpdateSettings":{
+          "shape":"NetworkUpdateSettings",
+          "documentation":"<p>Network configuration to apply during the directory update operation.</p>"
         },
         "CreateSnapshotBeforeUpdate":{
           "shape":"CreateSnapshotBeforeUpdate",
-          "documentation":"<p> The boolean that specifies if a snapshot for the directory needs to be taken before updating the directory. </p>",
+          "documentation":"<p>Specifies whether to create a directory snapshot before performing the update.</p>",
           "box":true
         }
       }
     },
     "UpdateDirectorySetupResult":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateHybridADRequest":{
+      "type":"structure",
+      "required":["DirectoryId"],
+      "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the hybrid directory to update.</p>"
+        },
+        "HybridAdministratorAccountUpdate":{
+          "shape":"HybridAdministratorAccountUpdate",
+          "documentation":"<p>We create a hybrid directory administrator account when we create a hybrid directory. Use <code>HybridAdministratorAccountUpdate</code> to recover the hybrid directory administrator account if you have deleted it.</p> <p>To recover your hybrid directory administrator account, we need temporary access to a user in your self-managed AD with administrator permissions in the form of a secret from Amazon Web Services Secrets Manager. We use these credentials once during recovery and don't store them.</p> <p>If your hybrid directory administrator account exists, then you don’t need to use <code>HybridAdministratorAccountUpdate</code>, even if you have updated your self-managed AD administrator user.</p>"
+        },
+        "SelfManagedInstancesSettings":{
+          "shape":"HybridCustomerInstancesSettings",
+          "documentation":"<p>Updates to the self-managed AD configuration, including DNS server IP addresses and Amazon Web Services System Manager managed node identifiers.</p>"
+        }
+      }
+    },
+    "UpdateHybridADResult":{
+      "type":"structure",
       "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p>The identifier of the updated hybrid directory.</p>"
+        },
+        "AssessmentId":{
+          "shape":"AssessmentId",
+          "documentation":"<p>The identifier of the assessment performed to validate the update configuration. This assessment ensures the updated settings are compatible with your environment.</p>"
+        }
       }
     },
     "UpdateInfoEntry":{
@@ -5081,7 +6030,7 @@
           "documentation":"<p> The last updated date and time of a particular directory setting. </p>"
         }
       },
-      "documentation":"<p> An entry of update information related to a requested update type. </p>"
+      "documentation":"<p>An entry of update information related to a requested update type.</p>"
     },
     "UpdateNumberOfDomainControllersRequest":{
       "type":"structure",
@@ -5102,8 +6051,7 @@
     },
     "UpdateNumberOfDomainControllersResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRadiusRequest":{
       "type":"structure",
@@ -5125,8 +6073,7 @@
     },
     "UpdateRadiusResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the results of the <a>UpdateRadius</a> operation.</p>"
     },
     "UpdateSecurityGroupForDirectoryControllers":{"type":"boolean"},
@@ -5191,7 +6138,11 @@
     },
     "UpdateType":{
       "type":"string",
-      "enum":["OS"]
+      "enum":[
+        "OS",
+        "NETWORK",
+        "SIZE"
+      ]
     },
     "UpdateValue":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/ds/2015-04-16/waiters-2.json 2.31.35-1/awscli/botocore/data/ds/2015-04-16/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/ds/2015-04-16/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds/2015-04-16/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+{
+  "version": 2,
+  "waiters": {
+    "HybridADUpdated": {
+      "operation": "DescribeHybridADUpdate",
+      "delay": 120,
+      "maxAttempts": 60,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "pathAll",
+          "argument": "UpdateActivities.SelfManagedInstances[].Status",
+          "expected": "Updated"
+        },
+        {
+          "state": "failure",
+          "matcher": "pathAny",
+          "argument": "UpdateActivities.SelfManagedInstances[].Status",
+          "expected": "UpdateFailed"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/ds-data/2023-05-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ds-data/2023-05-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ds-data/2023-05-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds-data/2023-05-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ds-data/2023-05-31/service-2.json 2.31.35-1/awscli/botocore/data/ds-data/2023-05-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/ds-data/2023-05-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ds-data/2023-05-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,8 @@
     "serviceId":"Directory Service Data",
     "signatureVersion":"v4",
     "signingName":"ds-data",
-    "uid":"directory-service-data-2023-05-31"
+    "uid":"directory-service-data-2023-05-31",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddGroupMember":{
@@ -643,7 +644,7 @@
         },
         "OtherAttributes":{
           "shape":"LdapDisplayNameList",
-          "documentation":"<p> One or more attributes to be returned for the group. For a list of supported attributes, see <a href=\"https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_data-attributes.html\">Directory Service Data Attributes</a>. </p>"
+          "documentation":"<p> One or more attributes to be returned for the group. For a list of supported attributes, see <a href=\"https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_data_attributes.html\">Directory Service Data Attributes</a>. </p>"
         },
         "Realm":{
           "shape":"Realm",
@@ -764,7 +765,7 @@
         },
         "UserPrincipalName":{
           "shape":"UserPrincipalName",
-          "documentation":"<p> The UPN that is an Internet-style login name for a user and is based on the Internet standard <a href=\"https://www.ietf.org/rfc/rfc0822.txt\">RFC 822</a>. The UPN is shorter than the distinguished name and easier to remember. </p>"
+          "documentation":"<p> The UPN that is an Internet-style login name for a user and is based on the Internet standard <a href=\"https://datatracker.ietf.org/doc/html/rfc822\">RFC 822</a>. The UPN is shorter than the distinguished name and easier to remember. </p>"
         }
       }
     },
@@ -1532,7 +1533,7 @@
         },
         "OtherAttributes":{
           "shape":"Attributes",
-          "documentation":"<p> An expression that defines one or more attribute names with the data type and value of each attribute. A key is an attribute name, and the value is a list of maps. For a list of supported attributes, see <a href=\"https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_data-attributes.html\">Directory Service Data Attributes</a>. </p> <note> <p> Attribute names are case insensitive. </p> </note>"
+          "documentation":"<p> An expression that defines one or more attribute names with the data type and value of each attribute. A key is an attribute name, and the value is a list of maps. For a list of supported attributes, see <a href=\"https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_data_attributes.html\">Directory Service Data Attributes</a>. </p> <note> <p> Attribute names are case insensitive. </p> </note>"
         },
         "SAMAccountName":{
           "shape":"UserName",
@@ -1591,7 +1592,7 @@
         },
         "UserPrincipalName":{
           "shape":"UserPrincipalName",
-          "documentation":"<p> The UPN that is an internet-style login name for a user and based on the internet standard <a href=\"https://www.ietf.org/rfc/rfc0822.txt\">RFC 822</a>. The UPN is shorter than the distinguished name and easier to remember. </p>"
+          "documentation":"<p> The UPN that is an internet-style login name for a user and based on the internet standard <a href=\"https://datatracker.ietf.org/doc/html/rfc822\">RFC 822</a>. The UPN is shorter than the distinguished name and easier to remember. </p>"
         }
       },
       "documentation":"<p> A user object that contains identifying information and attributes for a specified user. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/completions-1.json 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/completions-1.json
--- 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/completions-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/completions-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,58 @@
+{
+  "version": "1.0",
+  "resources": {
+    "Cluster": {
+      "operation": "ListClusters",
+      "resourceIdentifier": {
+        "identifier": "clusters[].identifier",
+        "arn": "clusters[].arn"
+      }
+    }
+  },
+  "operations": {
+    "DeleteCluster": {
+      "identifier": {
+        "completions": [
+          {
+            "resourceName": "Cluster",
+            "resourceIdentifier": "identifier",
+            "parameters": {}
+          }
+        ]
+      }
+    },
+    "GetCluster": {
+      "identifier": {
+        "completions": [
+          {
+            "resourceName": "Cluster",
+            "resourceIdentifier": "identifier",
+            "parameters": {}
+          }
+        ]
+      }
+    },
+    "GetVpcEndpointServiceName": {
+      "identifier": {
+        "completions": [
+          {
+            "resourceName": "Cluster",
+            "resourceIdentifier": "identifier",
+            "parameters": {}
+          }
+        ]
+      }
+    },
+    "UpdateCluster": {
+      "identifier": {
+        "completions": [
+          {
+            "resourceName": "Cluster",
+            "resourceIdentifier": "identifier",
+            "parameters": {}
+          }
+        ]
+      }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/dsql/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dsql/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,31 +25,12 @@
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ConflictException"}
-      ],
-      "documentation":"<p>Creates a cluster in Amazon Aurora DSQL.</p>"
-    },
-    "CreateMultiRegionClusters":{
-      "name":"CreateMultiRegionClusters",
-      "http":{
-        "method":"POST",
-        "requestUri":"/multi-region-clusters",
-        "responseCode":200
-      },
-      "input":{"shape":"CreateMultiRegionClustersInput"},
-      "output":{"shape":"CreateMultiRegionClustersOutput"},
-      "errors":[
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Creates multi-Region clusters in Amazon Aurora DSQL. Multi-Region clusters require a linked Region list, which is an array of the Regions in which you want to create linked clusters. Multi-Region clusters require a witness Region, which participates in quorum in failure scenarios.</p>"
+      "documentation":"<p>The CreateCluster API allows you to create both single-Region clusters and multi-Region clusters. With the addition of the <i>multiRegionProperties</i> parameter, you can create a cluster with witness Region support and establish peer relationships with clusters in other Regions during creation.</p> <note> <p>Creating multi-Region clusters requires additional IAM permissions beyond those needed for single-Region clusters, as detailed in the <b>Required permissions</b> section below.</p> </note> <p> <b>Required permissions</b> </p> <dl> <dt>dsql:CreateCluster</dt> <dd> <p>Required to create a cluster.</p> <p>Resources: <code>arn:aws:dsql:region:account-id:cluster/*</code> </p> </dd> <dt>dsql:TagResource</dt> <dd> <p>Permission to add tags to a resource.</p> <p>Resources: <code>arn:aws:dsql:region:account-id:cluster/*</code> </p> </dd> <dt>dsql:PutMultiRegionProperties</dt> <dd> <p>Permission to configure multi-Region properties for a cluster.</p> <p>Resources: <code>arn:aws:dsql:region:account-id:cluster/*</code> </p> </dd> <dt>dsql:AddPeerCluster</dt> <dd> <p>When specifying <code>multiRegionProperties.clusters</code>, permission to add peer clusters.</p> <p>Resources:</p> <ul> <li> <p>Local cluster: <code>arn:aws:dsql:region:account-id:cluster/*</code> </p> </li> <li> <p>Each peer cluster: exact ARN of each specified peer cluster</p> </li> </ul> </dd> <dt>dsql:PutWitnessRegion</dt> <dd> <p>When specifying <code>multiRegionProperties.witnessRegion</code>, permission to set a witness Region. This permission is checked both in the cluster Region and in the witness Region.</p> <p>Resources: <code>arn:aws:dsql:region:account-id:cluster/*</code> </p> <p>Condition Keys: <code>dsql:WitnessRegion</code> (matching the specified witness region)</p> </dd> </dl> <important> <ul> <li> <p>The witness Region specified in <code>multiRegionProperties.witnessRegion</code> cannot be the same as the cluster's Region.</p> </li> </ul> </important>"
     },
     "DeleteCluster":{
       "name":"DeleteCluster",
@@ -71,23 +52,24 @@
       "documentation":"<p>Deletes a cluster in Amazon Aurora DSQL.</p>",
       "idempotent":true
     },
-    "DeleteMultiRegionClusters":{
-      "name":"DeleteMultiRegionClusters",
+    "DeleteClusterPolicy":{
+      "name":"DeleteClusterPolicy",
       "http":{
         "method":"DELETE",
-        "requestUri":"/multi-region-clusters",
+        "requestUri":"/cluster/{identifier}/policy",
         "responseCode":200
       },
-      "input":{"shape":"DeleteMultiRegionClustersInput"},
+      "input":{"shape":"DeleteClusterPolicyInput"},
+      "output":{"shape":"DeleteClusterPolicyOutput"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Deletes a multi-Region cluster in Amazon Aurora DSQL.</p>",
+      "documentation":"<p>Deletes the resource-based policy attached to a cluster. This removes all access permissions defined by the policy, reverting to default access controls.</p>",
       "idempotent":true
     },
     "GetCluster":{
@@ -106,7 +88,46 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves information about a cluster.</p>"
+      "documentation":"<p>Retrieves information about a cluster.</p>",
+      "readonly":true
+    },
+    "GetClusterPolicy":{
+      "name":"GetClusterPolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/cluster/{identifier}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"GetClusterPolicyInput"},
+      "output":{"shape":"GetClusterPolicyOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves the resource-based policy document attached to a cluster. This policy defines the access permissions and conditions for the cluster.</p>",
+      "readonly":true
+    },
+    "GetVpcEndpointServiceName":{
+      "name":"GetVpcEndpointServiceName",
+      "http":{
+        "method":"GET",
+        "requestUri":"/clusters/{identifier}/vpc-endpoint-service-name",
+        "responseCode":200
+      },
+      "input":{"shape":"GetVpcEndpointServiceNameInput"},
+      "output":{"shape":"GetVpcEndpointServiceNameOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves the VPC endpoint service name.</p>",
+      "readonly":true
     },
     "ListClusters":{
       "name":"ListClusters",
@@ -124,7 +145,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves information about a list of clusters.</p>"
+      "documentation":"<p>Retrieves information about a list of clusters.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -142,7 +164,28 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists all of the tags for a resource.</p>"
+      "documentation":"<p>Lists all of the tags for a resource.</p>",
+      "readonly":true
+    },
+    "PutClusterPolicy":{
+      "name":"PutClusterPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/cluster/{identifier}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"PutClusterPolicyInput"},
+      "output":{"shape":"PutClusterPolicyOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Attaches a resource-based policy to a cluster. This policy defines access permissions and conditions for the cluster, allowing you to control which principals can perform actions on the cluster.</p>",
+      "idempotent":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -192,13 +235,13 @@
       "output":{"shape":"UpdateClusterOutput"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Updates a cluster.</p>"
+      "documentation":"<p>The <i>UpdateCluster</i> API allows you to modify both single-Region and multi-Region cluster configurations. With the <i>multiRegionProperties</i> parameter, you can add or modify witness Region support and manage peer relationships with clusters in other Regions.</p> <note> <p>Note that updating multi-Region clusters requires additional IAM permissions beyond those needed for standard cluster updates, as detailed in the Permissions section.</p> </note> <p> <b>Required permissions</b> </p> <dl> <dt>dsql:UpdateCluster</dt> <dd> <p>Permission to update a DSQL cluster.</p> <p>Resources: <code>arn:aws:dsql:<i>region</i>:<i>account-id</i>:cluster/<i>cluster-id</i> </code> </p> </dd> </dl> <dl> <dt>dsql:PutMultiRegionProperties</dt> <dd> <p>Permission to configure multi-Region properties for a cluster.</p> <p>Resources: <code>arn:aws:dsql:<i>region</i>:<i>account-id</i>:cluster/<i>cluster-id</i> </code> </p> </dd> </dl> <dl> <dt>dsql:GetCluster</dt> <dd> <p>Permission to retrieve cluster information.</p> <p>Resources: <code>arn:aws:dsql:<i>region</i>:<i>account-id</i>:cluster/<i>cluster-id</i> </code> </p> </dd> <dt>dsql:AddPeerCluster</dt> <dd> <p>Permission to add peer clusters.</p> <p>Resources:</p> <ul> <li> <p>Local cluster: <code>arn:aws:dsql:<i>region</i>:<i>account-id</i>:cluster/<i>cluster-id</i> </code> </p> </li> <li> <p>Each peer cluster: exact ARN of each specified peer cluster</p> </li> </ul> </dd> <dt>dsql:RemovePeerCluster</dt> <dd> <p>Permission to remove peer clusters. The <i>dsql:RemovePeerCluster</i> permission uses a wildcard ARN pattern to simplify permission management during updates.</p> <p>Resources: <code>arn:aws:dsql:*:<i>account-id</i>:cluster/*</code> </p> </dd> </dl> <dl> <dt>dsql:PutWitnessRegion</dt> <dd> <p>Permission to set a witness Region.</p> <p>Resources: <code>arn:aws:dsql:<i>region</i>:<i>account-id</i>:cluster/<i>cluster-id</i> </code> </p> <p>Condition Keys: dsql:WitnessRegion (matching the specified witness Region)</p> <p> <b>This permission is checked both in the cluster Region and in the witness Region.</b> </p> </dd> </dl> <important> <ul> <li> <p>The witness region specified in <code>multiRegionProperties.witnessRegion</code> cannot be the same as the cluster's Region.</p> </li> <li> <p>When updating clusters with peer relationships, permissions are checked for both adding and removing peers.</p> </li> <li> <p>The <code>dsql:RemovePeerCluster</code> permission uses a wildcard ARN pattern to simplify permission management during updates.</p> </li> </ul> </important>"
     }
   },
   "shapes":{
@@ -217,56 +260,60 @@
     },
     "Arn":{
       "type":"string",
-      "documentation":"<p>Amazon Resource Name</p>",
+      "documentation":"<p>Amazon Resource Name.</p>",
       "max":1011,
       "min":1,
       "pattern":"arn:.+"
     },
+    "BypassPolicyLockoutSafetyCheck":{
+      "type":"boolean",
+      "box":true
+    },
     "ClientToken":{
       "type":"string",
-      "documentation":"<p>Idempotency Token</p>",
+      "documentation":"<p>Idempotency token so a request is only processed once.</p>",
       "max":128,
       "min":1,
       "pattern":"[!-~]+"
     },
     "ClusterArn":{
       "type":"string",
-      "documentation":"<p>Cluster ARN</p>"
+      "documentation":"<p>The Amazon Resource Name of the cluster.</p>",
+      "pattern":"arn:aws(-[^:]+)?:dsql:[a-z0-9-]{1,20}:[0-9]{12}:cluster/[a-z0-9]{26}"
     },
     "ClusterArnList":{
       "type":"list",
       "member":{"shape":"ClusterArn"},
-      "documentation":"<p>List of cluster arns</p>"
+      "documentation":"<p>A list of the Amazon Resource Names of the cluster.</p>"
     },
     "ClusterCreationTime":{
       "type":"timestamp",
-      "documentation":"<p>Timestamp when the Cluster was created</p>"
+      "documentation":"<p>The timestamp when the cluster was created.</p>"
     },
     "ClusterId":{
       "type":"string",
-      "documentation":"<p>The ID of the cluster</p>"
+      "documentation":"<p>The ID of the cluster.</p>",
+      "pattern":"[a-z0-9]{26}"
     },
     "ClusterList":{
       "type":"list",
       "member":{"shape":"ClusterSummary"},
-      "documentation":"<p>List of clusters</p>"
-    },
-    "ClusterPropertyMap":{
-      "type":"map",
-      "key":{"shape":"Region"},
-      "value":{"shape":"LinkedClusterProperties"},
-      "documentation":"<p>Properties for each linked cluster</p>"
+      "documentation":"<p>The list of clusters.</p>"
     },
     "ClusterStatus":{
       "type":"string",
-      "documentation":"<p>Cluster Status</p>",
+      "documentation":"<p>The current status of a cluster.</p>",
       "enum":[
         "CREATING",
         "ACTIVE",
+        "IDLE",
+        "INACTIVE",
         "UPDATING",
         "DELETING",
         "DELETED",
-        "FAILED"
+        "FAILED",
+        "PENDING_SETUP",
+        "PENDING_DELETE"
       ]
     },
     "ClusterSummary":{
@@ -315,6 +362,10 @@
           "shape":"DeletionProtectionEnabled",
           "documentation":"<p>If enabled, you can't delete your cluster. You must first disable this property before you can delete your cluster.</p>"
         },
+        "kmsEncryptionKey":{
+          "shape":"KmsEncryptionKey",
+          "documentation":"<p>The KMS key that encrypts and protects the data on your cluster. You can specify the ARN, ID, or alias of an existing key or have Amazon Web Services create a default key for you.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>A map of key and value pairs to use to tag your cluster.</p>"
@@ -323,6 +374,18 @@
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, the subsequent retries with the same client token return the result from the original successful request and they have no additional effect.</p> <p>If you don't specify a client token, the Amazon Web Services SDK automatically generates one.</p>",
           "idempotencyToken":true
+        },
+        "multiRegionProperties":{
+          "shape":"MultiRegionProperties",
+          "documentation":"<p>The configuration settings when creating a multi-Region cluster, including the witness region and linked cluster properties.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>An optional resource-based policy document in JSON format that defines access permissions for the cluster.</p>"
+        },
+        "bypassPolicyLockoutSafetyCheck":{
+          "shape":"BypassPolicyLockoutSafetyCheck",
+          "documentation":"<p>An optional field that controls whether to bypass the lockout prevention check. When set to true, this parameter allows you to apply a policy that might lock you out of the cluster. Use with caution.</p>"
         }
       }
     },
@@ -352,48 +415,24 @@
           "shape":"ClusterCreationTime",
           "documentation":"<p>The time of when created the cluster.</p>"
         },
+        "multiRegionProperties":{
+          "shape":"MultiRegionProperties",
+          "documentation":"<p>The multi-Region cluster configuration details that were set during cluster creation</p>"
+        },
+        "encryptionDetails":{
+          "shape":"EncryptionDetails",
+          "documentation":"<p>The encryption configuration for the cluster that was specified during the creation process, including the KMS key identifier and encryption state.</p>"
+        },
         "deletionProtectionEnabled":{
           "shape":"DeletionProtectionEnabled",
           "documentation":"<p>Whether deletion protection is enabled on this cluster.</p>"
-        }
-      },
-      "documentation":"<p>Output Mixin</p>"
-    },
-    "CreateMultiRegionClustersInput":{
-      "type":"structure",
-      "required":[
-        "linkedRegionList",
-        "witnessRegion"
-      ],
-      "members":{
-        "linkedRegionList":{
-          "shape":"RegionList",
-          "documentation":"<p>An array of the Regions in which you want to create additional clusters.</p>"
-        },
-        "clusterProperties":{
-          "shape":"ClusterPropertyMap",
-          "documentation":"<p>A mapping of properties to use when creating linked clusters.</p>"
         },
-        "witnessRegion":{
-          "shape":"Region",
-          "documentation":"<p>The witness Region of multi-Region clusters.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully. The subsequent retries with the same client token return the result from the original successful request and they have no additional effect.</p> <p>If you don't specify a client token, the Amazon Web Services SDK automatically generates one.</p>",
-          "idempotencyToken":true
-        }
-      }
-    },
-    "CreateMultiRegionClustersOutput":{
-      "type":"structure",
-      "required":["linkedClusterArns"],
-      "members":{
-        "linkedClusterArns":{
-          "shape":"ClusterArnList",
-          "documentation":"<p>An array that contains the ARNs of all linked clusters.</p>"
+        "endpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The connection endpoint for the created cluster.</p>"
         }
-      }
+      },
+      "documentation":"<p>The output of a created cluster.</p>"
     },
     "DeleteClusterInput":{
       "type":"structure",
@@ -420,8 +459,7 @@
         "identifier",
         "arn",
         "status",
-        "creationTime",
-        "deletionProtectionEnabled"
+        "creationTime"
       ],
       "members":{
         "identifier":{
@@ -439,38 +477,90 @@
         "creationTime":{
           "shape":"ClusterCreationTime",
           "documentation":"<p>The time of when the cluster was created.</p>"
-        },
-        "deletionProtectionEnabled":{
-          "shape":"DeletionProtectionEnabled",
-          "documentation":"<p>Specifies whether deletion protection was enabled on the cluster.</p>"
         }
       },
-      "documentation":"<p>Output Mixin</p>"
+      "documentation":"<p>The output from a deleted cluster.</p>"
     },
-    "DeleteMultiRegionClustersInput":{
+    "DeleteClusterPolicyInput":{
       "type":"structure",
-      "required":["linkedClusterArns"],
+      "required":["identifier"],
       "members":{
-        "linkedClusterArns":{
-          "shape":"ClusterArnList",
-          "documentation":"<p>The ARNs of the clusters linked to the cluster you want to delete. also deletes these clusters as part of the operation.</p>",
+        "identifier":{
+          "shape":"ClusterId",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "expectedPolicyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The expected version of the policy to delete. This parameter ensures that you're deleting the correct version of the policy and helps prevent accidental deletions.</p>",
           "location":"querystring",
-          "locationName":"linked-cluster-arns"
+          "locationName":"expected-policy-version"
         },
         "clientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully. The subsequent retries with the same client token return the result from the original successful request and they have no additional effect.</p> <p>If you don't specify a client token, the Amazon Web Services SDK automatically generates one.</p>",
           "idempotencyToken":true,
           "location":"querystring",
           "locationName":"client-token"
         }
       }
     },
+    "DeleteClusterPolicyOutput":{
+      "type":"structure",
+      "required":["policyVersion"],
+      "members":{
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the policy that was deleted.</p>"
+        }
+      }
+    },
     "DeletionProtectionEnabled":{
       "type":"boolean",
-      "documentation":"<p>Deletion Protection</p>",
+      "documentation":"<p>Indicates whether deletion protection is enabled for a cluster.</p>",
       "box":true
     },
+    "EncryptionDetails":{
+      "type":"structure",
+      "required":[
+        "encryptionType",
+        "encryptionStatus"
+      ],
+      "members":{
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of encryption that protects the data on your cluster.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ARN of the KMS key that encrypts data in the cluster.</p>"
+        },
+        "encryptionStatus":{
+          "shape":"EncryptionStatus",
+          "documentation":"<p>The status of encryption for the cluster.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details about encryption for the cluster including the KMS key ARN, encryption type, and encryption status.</p>"
+    },
+    "EncryptionStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "UPDATING",
+        "KMS_KEY_INACCESSIBLE",
+        "ENABLING"
+      ]
+    },
+    "EncryptionType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED_KMS_KEY",
+        "CUSTOMER_MANAGED_KMS_KEY"
+      ]
+    },
+    "Endpoint":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9.-]+"
+    },
     "GetClusterInput":{
       "type":"structure",
       "required":["identifier"],
@@ -513,16 +603,72 @@
           "shape":"DeletionProtectionEnabled",
           "documentation":"<p>Whether deletion protection is enabled in this cluster.</p>"
         },
-        "witnessRegion":{
-          "shape":"Region",
-          "documentation":"<p>The witness Region of the cluster. Applicable only for multi-Region clusters.</p>"
+        "multiRegionProperties":{
+          "shape":"MultiRegionProperties",
+          "documentation":"<p>Returns the current multi-Region cluster configuration, including witness region and linked cluster information.</p>"
         },
-        "linkedClusterArns":{
-          "shape":"ClusterArnList",
-          "documentation":"<p>The ARNs of the clusters linked to the retrieved cluster.</p>"
+        "tags":{"shape":"TagMap"},
+        "encryptionDetails":{
+          "shape":"EncryptionDetails",
+          "documentation":"<p>The current encryption configuration details for the cluster.</p>"
+        },
+        "endpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The connection endpoint for the cluster.</p>"
         }
       },
-      "documentation":"<p>Output Mixin</p>"
+      "documentation":"<p>The output of a cluster.</p>"
+    },
+    "GetClusterPolicyInput":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"ClusterId",
+          "documentation":"<p>The ID of the cluster to retrieve the policy from.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "GetClusterPolicyOutput":{
+      "type":"structure",
+      "required":[
+        "policy",
+        "policyVersion"
+      ],
+      "members":{
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy document attached to the cluster, returned as a JSON string.</p>"
+        },
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the policy document. This version number is incremented each time the policy is updated.</p>"
+        }
+      }
+    },
+    "GetVpcEndpointServiceNameInput":{
+      "type":"structure",
+      "required":["identifier"],
+      "members":{
+        "identifier":{
+          "shape":"ClusterId",
+          "documentation":"<p>The ID of the cluster to retrieve.</p>",
+          "location":"uri",
+          "locationName":"identifier"
+        }
+      }
+    },
+    "GetVpcEndpointServiceNameOutput":{
+      "type":"structure",
+      "required":["serviceName"],
+      "members":{
+        "serviceName":{
+          "shape":"ServiceName",
+          "documentation":"<p>The VPC endpoint service name.</p>"
+        }
+      }
     },
     "Integer":{
       "type":"integer",
@@ -546,20 +692,13 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
-    "LinkedClusterProperties":{
-      "type":"structure",
-      "members":{
-        "deletionProtectionEnabled":{
-          "shape":"DeletionProtectionEnabled",
-          "documentation":"<p>Whether deletion protection is enabled.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map of key and value pairs the linked cluster is tagged with.</p>"
-        }
-      },
-      "documentation":"<p>Properties of linked clusters.</p>"
+    "KmsEncryptionKey":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"[a-zA-Z0-9:/_-]+"
     },
+    "KmsKeyArn":{"type":"string"},
     "ListClustersInput":{
       "type":"structure",
       "members":{
@@ -614,26 +753,82 @@
     },
     "MaxResults":{
       "type":"integer",
-      "documentation":"<p>Max results that will be returned per page</p>",
+      "documentation":"<p>Max results that will be returned per page.</p>",
       "box":true,
       "max":100,
       "min":1
     },
+    "MultiRegionProperties":{
+      "type":"structure",
+      "members":{
+        "witnessRegion":{
+          "shape":"Region",
+          "documentation":"<p>The Region that serves as the witness region for a multi-Region cluster. The witness Region helps maintain cluster consistency and quorum.</p>"
+        },
+        "clusters":{
+          "shape":"ClusterArnList",
+          "documentation":"<p>The set of peered clusters that form the multi-Region cluster configuration. Each peered cluster represents a database instance in a different Region.</p>"
+        }
+      },
+      "documentation":"<p>Defines the structure for multi-Region cluster configurations, containing the witness region and linked cluster settings.</p>"
+    },
     "NextToken":{
       "type":"string",
-      "documentation":"<p>Opaque token used to retrieve next page</p>"
+      "documentation":"<p>Token used to retrieve next page.</p>"
+    },
+    "PolicyDocument":{
+      "type":"string",
+      "documentation":"<p>A resource-based policy document in JSON format. Length constraints: Minimum length of 1. Maximum length of 20480 characters (approximately 20KB).</p>",
+      "max":20480,
+      "min":1
+    },
+    "PolicyVersion":{"type":"string"},
+    "PutClusterPolicyInput":{
+      "type":"structure",
+      "required":[
+        "identifier",
+        "policy"
+      ],
+      "members":{
+        "identifier":{
+          "shape":"ClusterId",
+          "location":"uri",
+          "locationName":"identifier"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy document to attach to the cluster. This should be a valid JSON policy document that defines permissions and conditions.</p>"
+        },
+        "bypassPolicyLockoutSafetyCheck":{
+          "shape":"BypassPolicyLockoutSafetyCheck",
+          "documentation":"<p>A flag that allows you to bypass the policy lockout safety check. When set to true, this parameter allows you to apply a policy that might lock you out of the cluster. Use with caution.</p>"
+        },
+        "expectedPolicyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The expected version of the current policy. This parameter ensures that you're updating the correct version of the policy and helps prevent concurrent modification conflicts.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "PutClusterPolicyOutput":{
+      "type":"structure",
+      "required":["policyVersion"],
+      "members":{
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the policy after it has been updated or created.</p>"
+        }
+      }
     },
     "Region":{
       "type":"string",
-      "documentation":"<p>AWS Region name (e.g.: 'us-east-1')</p>",
-      "max":20,
+      "documentation":"<p> Region name.</p>",
+      "max":50,
       "min":0
     },
-    "RegionList":{
-      "type":"list",
-      "member":{"shape":"Region"},
-      "documentation":"<p>List of regions</p>"
-    },
     "ResourceNotFoundException":{
       "type":"structure",
       "required":[
@@ -645,11 +840,11 @@
         "message":{"shape":"String"},
         "resourceId":{
           "shape":"String",
-          "documentation":"<p>Hypothetical identifier of the resource which does not exist</p>"
+          "documentation":"<p>The resource ID could not be found.</p>"
         },
         "resourceType":{
           "shape":"String",
-          "documentation":"<p>Hypothetical type of the resource which does not exist</p>"
+          "documentation":"<p>The resource type could not be found.</p>"
         }
       },
       "documentation":"<p>The resource could not be found.</p>",
@@ -659,6 +854,13 @@
       },
       "exception":true
     },
+    "ServiceName":{
+      "type":"string",
+      "documentation":"<p>The name of the VPC endpoint service that provides access to your cluster. Use this endpoint to establish a private connection between your VPC and the cluster.</p>",
+      "max":128,
+      "min":1,
+      "pattern":"com\\.amazonaws\\.[a-z0-9-]+\\.dsql-[a-f0-9]{6}"
+    },
     "ServiceQuotaExceededException":{
       "type":"structure",
       "required":[
@@ -671,23 +873,23 @@
       "members":{
         "message":{
           "shape":"String",
-          "documentation":"<p>Description of the error</p>"
+          "documentation":"<p>The service exception for exceeding a quota.</p>"
         },
         "resourceId":{
           "shape":"String",
-          "documentation":"<p>Identifier of the resource affected</p>"
+          "documentation":"<p>The resource ID exceeds a quota.</p>"
         },
         "resourceType":{
           "shape":"String",
-          "documentation":"<p>Type of the resource affected</p>"
+          "documentation":"<p>The resource type exceeds a quota.</p>"
         },
         "serviceCode":{
           "shape":"String",
-          "documentation":"<p>Service Quotas requirement to identify originating service</p>"
+          "documentation":"<p>The request exceeds a service quota.</p>"
         },
         "quotaCode":{
           "shape":"String",
-          "documentation":"<p>Service Quotas requirement to identify originating quota</p>"
+          "documentation":"<p>The service exceeds a quota.</p>"
         }
       },
       "documentation":"<p>The service limit was exceeded.</p>",
@@ -700,7 +902,7 @@
     "String":{"type":"string"},
     "TagKey":{
       "type":"string",
-      "documentation":"<p>Unique tag key, maximum 128 Unicode characters in UTF-8</p>",
+      "documentation":"<p>Unique tag key, maximum 128 Unicode characters in UTF-8.</p>",
       "max":128,
       "min":1,
       "pattern":"[a-zA-Z0-9_.:/=+\\-@ ]*"
@@ -708,7 +910,7 @@
     "TagKeyList":{
       "type":"list",
       "member":{"shape":"TagKey"},
-      "documentation":"<p>List of tag keys</p>",
+      "documentation":"<p>List of tag keys.</p>",
       "max":200,
       "min":0
     },
@@ -716,7 +918,7 @@
       "type":"map",
       "key":{"shape":"TagKey"},
       "value":{"shape":"TagValue"},
-      "documentation":"<p>Map of tags</p>",
+      "documentation":"<p>Map of tags.</p>",
       "max":200,
       "min":0
     },
@@ -741,7 +943,7 @@
     },
     "TagValue":{
       "type":"string",
-      "documentation":"<p>Tag value, maximum 256 Unicode characters in UTF-8</p>",
+      "documentation":"<p>Tag value, maximum 256 Unicode characters in UTF-8.</p>",
       "max":256,
       "min":0,
       "pattern":"[a-zA-Z0-9_.:/=+\\-@ ]*"
@@ -752,19 +954,19 @@
       "members":{
         "message":{
           "shape":"String",
-          "documentation":"<p>Description of the error</p>"
+          "documentation":"<p>The message that the request was denied due to request throttling.</p>"
         },
         "serviceCode":{
           "shape":"String",
-          "documentation":"<p>Service Quotas requirement to identify originating service</p>"
+          "documentation":"<p>The request exceeds a service quota.</p>"
         },
         "quotaCode":{
           "shape":"String",
-          "documentation":"<p>Service Quotas requirement to identify originating quota</p>"
+          "documentation":"<p>The request exceeds a request rate quota.</p>"
         },
         "retryAfterSeconds":{
           "shape":"Integer",
-          "documentation":"<p>Advice to clients on when the call can be safely retried</p>",
+          "documentation":"<p>The request exceeds a request rate quota. Retry after seconds.</p>",
           "location":"header",
           "locationName":"Retry-After"
         }
@@ -812,10 +1014,18 @@
           "shape":"DeletionProtectionEnabled",
           "documentation":"<p>Specifies whether to enable deletion protection in your cluster.</p>"
         },
+        "kmsEncryptionKey":{
+          "shape":"KmsEncryptionKey",
+          "documentation":"<p>The KMS key that encrypts and protects the data on your cluster. You can specify the ARN, ID, or alias of an existing key or have Amazon Web Services create a default key for you.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully. The subsequent retries with the same client token return the result from the original successful request and they have no additional effect.</p> <p>If you don't specify a client token, the Amazon Web Services SDK automatically generates one.</p>",
           "idempotencyToken":true
+        },
+        "multiRegionProperties":{
+          "shape":"MultiRegionProperties",
+          "documentation":"<p>The new multi-Region cluster configuration settings to be applied during an update operation.</p>"
         }
       }
     },
@@ -825,8 +1035,7 @@
         "identifier",
         "arn",
         "status",
-        "creationTime",
-        "deletionProtectionEnabled"
+        "creationTime"
       ],
       "members":{
         "identifier":{
@@ -844,21 +1053,9 @@
         "creationTime":{
           "shape":"ClusterCreationTime",
           "documentation":"<p>The time of when the cluster was created.</p>"
-        },
-        "deletionProtectionEnabled":{
-          "shape":"DeletionProtectionEnabled",
-          "documentation":"<p>Whether deletion protection is enabled for the updated cluster.</p>"
-        },
-        "witnessRegion":{
-          "shape":"Region",
-          "documentation":"<p>The Region that receives all data you write to linked clusters.</p>"
-        },
-        "linkedClusterArns":{
-          "shape":"ClusterArnList",
-          "documentation":"<p>The ARNs of the clusters linked to the updated cluster. Applicable only for multi-Region clusters.</p>"
         }
       },
-      "documentation":"<p>Output Mixin</p>"
+      "documentation":"<p>The details of the cluster after it has been updated.</p>"
     },
     "ValidationException":{
       "type":"structure",
@@ -868,8 +1065,14 @@
       ],
       "members":{
         "message":{"shape":"String"},
-        "reason":{"shape":"ValidationExceptionReason"},
-        "fieldList":{"shape":"ValidationExceptionFieldList"}
+        "reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>The reason for the validation exception.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>A list of fields that didn't validate.</p>"
+        }
       },
       "documentation":"<p>The input failed to satisfy the constraints specified by an Amazon Web Services service.</p>",
       "error":{
@@ -899,11 +1102,11 @@
     "ValidationExceptionFieldList":{
       "type":"list",
       "member":{"shape":"ValidationExceptionField"},
-      "documentation":"<p>List of fields that caused the error</p>"
+      "documentation":"<p>A list of fields that didn't validate.</p>"
     },
     "ValidationExceptionReason":{
       "type":"string",
-      "documentation":"<p>Reason the request failed validation</p>",
+      "documentation":"<p>The reason for the validation exception.</p>",
       "enum":[
         "unknownOperation",
         "cannotParse",
@@ -913,5 +1116,5 @@
       ]
     }
   },
-  "documentation":"<p>This is an interface reference for Amazon Aurora DSQL. It contains documentation for one of the programming or command line interfaces you can use to manage Amazon Aurora DSQL.</p> <p>Amazon Aurora DSQL is a serverless, distributed SQL database suitable for workloads of any size. Aurora DSQL is available in both single-Region and multi-Region configurations, so your clusters and databases are always available even if an Availability Zone or an Amazon Web Services Region are unavailable. Aurora DSQL lets you focus on using your data to acquire new insights for your business and customers.</p>"
+  "documentation":"<p>This is an interface reference for Amazon Aurora DSQL. It contains documentation for one of the programming or command line interfaces you can use to manage Amazon Aurora DSQL.</p> <p>Amazon Aurora DSQL is a serverless, distributed SQL database suitable for workloads of any size. is available in both single-Region and multi-Region configurations, so your clusters and databases are always available even if an Availability Zone or an Amazon Web Services Region are unavailable. lets you focus on using your data to acquire new insights for your business and customers.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dynamodb/2012-08-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,39 +5,49 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "AccountId": {
             "builtIn": "AWS::Auth::AccountId",
             "required": false,
             "documentation": "The AWS AccountId used for the request.",
-            "type": "String"
+            "type": "string"
         },
         "AccountIdEndpointMode": {
             "builtIn": "AWS::Auth::AccountIdEndpointMode",
             "required": false,
             "documentation": "The AccountId Endpoint Mode.",
-            "type": "String"
+            "type": "string"
+        },
+        "ResourceArn": {
+            "required": false,
+            "documentation": "ResourceArn containing arn of resource",
+            "type": "string"
+        },
+        "ResourceArnList": {
+            "required": false,
+            "documentation": "ResourceArnList containing list of resource arns",
+            "type": "stringArray"
         }
     },
     "rules": [
@@ -50,6 +60,92 @@
                             "ref": "Endpoint"
                         }
                     ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                },
+                {
+                    "fn": "aws.partition",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ],
+                    "assign": "PartitionResult"
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseDualStack"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                },
+                                "https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}"
+                            ]
+                        }
+                    ],
+                    "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": "{Endpoint}",
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
                 }
             ],
             "rules": [
@@ -186,113 +282,6 @@
                         {
                             "conditions": [
                                 {
-                                    "fn": "isSet",
-                                    "argv": [
-                                        {
-                                            "ref": "AccountIdEndpointMode"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "AccountIdEndpointMode"
-                                        },
-                                        "required"
-                                    ]
-                                },
-                                {
-                                    "fn": "not",
-                                    "argv": [
-                                        {
-                                            "fn": "isSet",
-                                            "argv": [
-                                                {
-                                                    "ref": "AccountId"
-                                                }
-                                            ]
-                                        }
-                                    ]
-                                }
-                            ],
-                            "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded.",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "isSet",
-                                    "argv": [
-                                        {
-                                            "ref": "AccountId"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "name"
-                                            ]
-                                        },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "not",
-                                    "argv": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "not",
-                                    "argv": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "not",
-                                    "argv": [
-                                        {
-                                            "fn": "isValidHostLabel",
-                                            "argv": [
-                                                {
-                                                    "ref": "AccountId"
-                                                },
-                                                false
-                                            ]
-                                        }
-                                    ]
-                                }
-                            ],
-                            "error": "Credentials-sourced account ID parameter is invalid",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [
-                                {
                                     "fn": "booleanEquals",
                                     "argv": [
                                         {
@@ -362,16 +351,18 @@
                                                         {
                                                             "ref": "AccountIdEndpointMode"
                                                         },
-                                                        "disabled"
+                                                        "required"
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
@@ -460,16 +451,18 @@
                                                                 {
                                                                     "ref": "AccountIdEndpointMode"
                                                                 },
-                                                                "disabled"
+                                                                "required"
                                                             ]
                                                         }
                                                     ],
-                                                    "endpoint": {
-                                                        "url": "https://dynamodb.{Region}.{PartitionResult#dnsSuffix}",
-                                                        "properties": {},
-                                                        "headers": {}
-                                                    },
-                                                    "type": "endpoint"
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported",
+                                                            "type": "error"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
                                                 },
                                                 {
                                                     "conditions": [],
@@ -499,16 +492,18 @@
                                                         {
                                                             "ref": "AccountIdEndpointMode"
                                                         },
-                                                        "disabled"
+                                                        "required"
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
@@ -573,23 +568,472 @@
                                                     ]
                                                 },
                                                 {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "AccountIdEndpointMode"
+                                                                },
+                                                                "disabled"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        },
+                                                        "aws"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "ResourceArn"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "aws.parseArn",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "ResourceArn"
+                                                        }
+                                                    ],
+                                                    "assign": "ParsedArn"
+                                                },
+                                                {
                                                     "fn": "stringEquals",
                                                     "argv": [
                                                         {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "service"
+                                                            ]
+                                                        },
+                                                        "dynamodb"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isValidHostLabel",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "region"
+                                                            ]
+                                                        },
+                                                        false
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "region"
+                                                            ]
+                                                        },
+                                                        "{Region}"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isValidHostLabel",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "accountId"
+                                                            ]
+                                                        },
+                                                        false
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://{ParsedArn#accountId}.ddb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {
+                                                    "metricValues": [
+                                                        "O"
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
                                                             "ref": "AccountIdEndpointMode"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "AccountIdEndpointMode"
+                                                                },
+                                                                "disabled"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
                                                         },
-                                                        "disabled"
+                                                        "aws"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "ResourceArnList"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "ResourceArnList"
+                                                        },
+                                                        "[0]"
+                                                    ],
+                                                    "assign": "FirstArn"
+                                                },
+                                                {
+                                                    "fn": "aws.parseArn",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "FirstArn"
+                                                        }
+                                                    ],
+                                                    "assign": "ParsedArn"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "service"
+                                                            ]
+                                                        },
+                                                        "dynamodb"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isValidHostLabel",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "region"
+                                                            ]
+                                                        },
+                                                        false
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "region"
+                                                            ]
+                                                        },
+                                                        "{Region}"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isValidHostLabel",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "ParsedArn"
+                                                                },
+                                                                "accountId"
+                                                            ]
+                                                        },
+                                                        false
                                                     ]
                                                 }
                                             ],
                                             "endpoint": {
-                                                "url": "https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
+                                                "url": "https://{ParsedArn#accountId}.ddb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {
+                                                    "metricValues": [
+                                                        "O"
+                                                    ]
+                                                },
                                                 "headers": {}
                                             },
                                             "type": "endpoint"
                                         },
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "AccountIdEndpointMode"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "AccountIdEndpointMode"
+                                                                },
+                                                                "disabled"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        },
+                                                        "aws"
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "AccountId"
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "isValidHostLabel",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "AccountId"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://{AccountId}.ddb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {
+                                                                    "metricValues": [
+                                                                        "O"
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Credentials-sourced account ID parameter is invalid",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "AccountIdEndpointMode"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "AccountIdEndpointMode"
+                                                        },
+                                                        "required"
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "not",
+                                                            "argv": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "stringEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "fn": "getAttr",
+                                                                            "argv": [
+                                                                                {
+                                                                                    "ref": "PartitionResult"
+                                                                                },
+                                                                                "name"
+                                                                            ]
+                                                                        },
+                                                                        "aws"
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "rules": [
+                                                                {
+                                                                    "conditions": [],
+                                                                    "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded",
+                                                                    "type": "error"
+                                                                }
+                                                            ],
+                                                            "type": "tree"
+                                                        },
+                                                        {
+                                                            "conditions": [],
+                                                            "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition",
+                                                            "type": "error"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
@@ -620,18 +1064,133 @@
                                     ]
                                 },
                                 {
+                                    "fn": "not",
+                                    "argv": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccountIdEndpointMode"
+                                                },
+                                                "disabled"
+                                            ]
+                                        }
+                                    ]
+                                },
+                                {
                                     "fn": "stringEquals",
                                     "argv": [
                                         {
-                                            "ref": "AccountIdEndpointMode"
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "name"
+                                            ]
                                         },
-                                        "disabled"
+                                        "aws"
+                                    ]
+                                },
+                                {
+                                    "fn": "not",
+                                    "argv": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
+                                        {
+                                            "ref": "ResourceArn"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "aws.parseArn",
+                                    "argv": [
+                                        {
+                                            "ref": "ResourceArn"
+                                        }
+                                    ],
+                                    "assign": "ParsedArn"
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "service"
+                                            ]
+                                        },
+                                        "dynamodb"
+                                    ]
+                                },
+                                {
+                                    "fn": "isValidHostLabel",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "region"
+                                            ]
+                                        },
+                                        false
+                                    ]
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "region"
+                                            ]
+                                        },
+                                        "{Region}"
+                                    ]
+                                },
+                                {
+                                    "fn": "isValidHostLabel",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "accountId"
+                                            ]
+                                        },
+                                        false
                                     ]
                                 }
                             ],
                             "endpoint": {
-                                "url": "https://dynamodb.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
+                                "url": "https://{ParsedArn#accountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",
+                                "properties": {
+                                    "metricValues": [
+                                        "O"
+                                    ]
+                                },
                                 "headers": {}
                             },
                             "type": "endpoint"
@@ -642,7 +1201,21 @@
                                     "fn": "isSet",
                                     "argv": [
                                         {
-                                            "ref": "AccountId"
+                                            "ref": "AccountIdEndpointMode"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "not",
+                                    "argv": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccountIdEndpointMode"
+                                                },
+                                                "disabled"
+                                            ]
                                         }
                                     ]
                                 },
@@ -676,28 +1249,287 @@
                                     ]
                                 },
                                 {
-                                    "fn": "not",
+                                    "fn": "isSet",
                                     "argv": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "ref": "ResourceArnList"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "getAttr",
+                                    "argv": [
+                                        {
+                                            "ref": "ResourceArnList"
+                                        },
+                                        "[0]"
+                                    ],
+                                    "assign": "FirstArn"
+                                },
+                                {
+                                    "fn": "aws.parseArn",
+                                    "argv": [
+                                        {
+                                            "ref": "FirstArn"
+                                        }
+                                    ],
+                                    "assign": "ParsedArn"
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
                                             "argv": [
                                                 {
-                                                    "ref": "UseDualStack"
+                                                    "ref": "ParsedArn"
                                                 },
-                                                true
+                                                "service"
                                             ]
-                                        }
+                                        },
+                                        "dynamodb"
+                                    ]
+                                },
+                                {
+                                    "fn": "isValidHostLabel",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "region"
+                                            ]
+                                        },
+                                        false
+                                    ]
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "region"
+                                            ]
+                                        },
+                                        "{Region}"
+                                    ]
+                                },
+                                {
+                                    "fn": "isValidHostLabel",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "ParsedArn"
+                                                },
+                                                "accountId"
+                                            ]
+                                        },
+                                        false
                                     ]
                                 }
                             ],
                             "endpoint": {
-                                "url": "https://{AccountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
+                                "url": "https://{ParsedArn#accountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",
+                                "properties": {
+                                    "metricValues": [
+                                        "O"
+                                    ]
+                                },
                                 "headers": {}
                             },
                             "type": "endpoint"
                         },
                         {
+                            "conditions": [
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
+                                        {
+                                            "ref": "AccountIdEndpointMode"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "not",
+                                    "argv": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccountIdEndpointMode"
+                                                },
+                                                "disabled"
+                                            ]
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "name"
+                                            ]
+                                        },
+                                        "aws"
+                                    ]
+                                },
+                                {
+                                    "fn": "not",
+                                    "argv": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
+                                        {
+                                            "ref": "AccountId"
+                                        }
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isValidHostLabel",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccountId"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://{AccountId}.ddb.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "metricValues": [
+                                                        "O"
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "Credentials-sourced account ID parameter is invalid",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
+                                        {
+                                            "ref": "AccountIdEndpointMode"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "AccountIdEndpointMode"
+                                        },
+                                        "required"
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "not",
+                                            "argv": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        },
+                                                        "aws"
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
                             "conditions": [],
                             "endpoint": {
                                 "url": "https://dynamodb.{Region}.{PartitionResult#dnsSuffix}",
diff -pruN 2.23.6-1/awscli/botocore/data/dynamodb/2012-08-10/service-2.json 2.31.35-1/awscli/botocore/data/dynamodb/2012-08-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/dynamodb/2012-08-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dynamodb/2012-08-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -25,7 +25,8 @@
       "output":{"shape":"BatchExecuteStatementOutput"},
       "errors":[
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This operation allows you to perform batch reads or writes on data stored in DynamoDB, using PartiQL. Each read statement in a <code>BatchExecuteStatement</code> must specify an equality condition on all key attributes. This enforces that each <code>SELECT</code> statement in a batch returns at most a single item. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.multiplestatements.batching.html\">Running batch operations with PartiQL for DynamoDB </a>.</p> <note> <p>The entire batch must consist of either read statements or write statements, you cannot mix both in one batch.</p> </note> <important> <p>A HTTP 200 response does not mean that all statements in the BatchExecuteStatement succeeded. Error details for individual statements can be found under the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchStatementResponse.html#DDB-Type-BatchStatementResponse-Error\">Error</a> field of the <code>BatchStatementResponse</code> for each statement.</p> </important>"
     },
@@ -41,10 +42,13 @@
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The <code>BatchGetItem</code> operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key.</p> <p>A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. <code>BatchGetItem</code> returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, more than 1MB per partition is requested, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for <code>UnprocessedKeys</code>. You can use this value to retry the operation starting with the next item to get.</p> <important> <p>If you request more than 100 items, <code>BatchGetItem</code> returns a <code>ValidationException</code> with the message \"Too many items requested for the BatchGetItem call.\"</p> </important> <p>For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate <code>UnprocessedKeys</code> value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset.</p> <p>If <i>none</i> of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then <code>BatchGetItem</code> returns a <code>ProvisionedThroughputExceededException</code>. If <i>at least one</i> of the items is successfully processed, then <code>BatchGetItem</code> completes successfully, while returning the keys of the unread items in <code>UnprocessedKeys</code>.</p> <important> <p>If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, <i>we strongly recommend that you use an exponential backoff algorithm</i>. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations\">Batch Operations and Error Handling</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> </important> <p>By default, <code>BatchGetItem</code> performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set <code>ConsistentRead</code> to <code>true</code> for any or all tables.</p> <p>In order to minimize response latency, <code>BatchGetItem</code> may retrieve items in parallel.</p> <p>When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the <code>ProjectionExpression</code> parameter.</p> <p>If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations\">Working with Tables</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
-      "endpointdiscovery":{
+      "documentation":"<p>The <code>BatchGetItem</code> operation returns the attributes of one or more items from one or more tables. You identify requested items by primary key.</p> <p>A single operation can retrieve up to 16 MB of data, which can contain as many as 100 items. <code>BatchGetItem</code> returns a partial result if the response size limit is exceeded, the table's provisioned throughput is exceeded, more than 1MB per partition is requested, or an internal processing failure occurs. If a partial result is returned, the operation returns a value for <code>UnprocessedKeys</code>. You can use this value to retry the operation starting with the next item to get.</p> <important> <p>If you request more than 100 items, <code>BatchGetItem</code> returns a <code>ValidationException</code> with the message \"Too many items requested for the BatchGetItem call.\"</p> </important> <p>For example, if you ask to retrieve 100 items, but each individual item is 300 KB in size, the system returns 52 items (so as not to exceed the 16 MB limit). It also returns an appropriate <code>UnprocessedKeys</code> value so you can get the next page of results. If desired, your application can include its own logic to assemble the pages of results into one dataset.</p> <p>If <i>none</i> of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then <code>BatchGetItem</code> returns a <code>ProvisionedThroughputExceededException</code>. If <i>at least one</i> of the items is successfully processed, then <code>BatchGetItem</code> completes successfully, while returning the keys of the unread items in <code>UnprocessedKeys</code>.</p> <important> <p>If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, <i>we strongly recommend that you use an exponential backoff algorithm</i>. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations\">Batch Operations and Error Handling</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> </important> <p>By default, <code>BatchGetItem</code> performs eventually consistent reads on every table in the request. If you want strongly consistent reads instead, you can set <code>ConsistentRead</code> to <code>true</code> for any or all tables.</p> <p>In order to minimize response latency, <code>BatchGetItem</code> may retrieve items in parallel.</p> <p>When designing your application, keep in mind that DynamoDB does not return items in any particular order. To help parse the response by item, include the primary key values for the items in your request in the <code>ProjectionExpression</code> parameter.</p> <p>If a requested item does not exist, it is not returned in the result. Requests for nonexistent items consume the minimum read capacity units according to the type of read. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations\">Working with Tables</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> <note> <p> <code>BatchGetItem</code> will result in a <code>ValidationException</code> if the same key is specified multiple times.</p> </note>",
+      "endpointdiscovery":{},
+      "operationContextParams":{
+        "ResourceArnList":{"path":"keys(RequestItems)"}
       }
     },
     "BatchWriteItem":{
@@ -60,10 +64,14 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ItemCollectionSizeLimitExceededException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ReplicatedWriteConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>The <code>BatchWriteItem</code> operation puts or deletes multiple items in one or more tables. A single call to <code>BatchWriteItem</code> can transmit up to 16MB of data over the network, consisting of up to 25 item put or delete operations. While individual items can be up to 400 KB once stored, it's important to note that an item's representation might be greater than 400KB while being sent in DynamoDB's JSON format for the API call. For more details on this distinction, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html\">Naming Rules and Data Types</a>.</p> <note> <p> <code>BatchWriteItem</code> cannot update items. If you perform a <code>BatchWriteItem</code> operation on an existing item, that item's values will be overwritten by the operation and it will appear like it was updated. To update items, we recommend you use the <code>UpdateItem</code> action.</p> </note> <p>The individual <code>PutItem</code> and <code>DeleteItem</code> operations specified in <code>BatchWriteItem</code> are atomic; however <code>BatchWriteItem</code> as a whole is not. If any requested operations fail because the table's provisioned throughput is exceeded or an internal processing failure occurs, the failed operations are returned in the <code>UnprocessedItems</code> response parameter. You can investigate and optionally resend the requests. Typically, you would call <code>BatchWriteItem</code> in a loop. Each iteration would check for unprocessed items and submit a new <code>BatchWriteItem</code> request with those unprocessed items until all items have been processed.</p> <p>For tables and indexes with provisioned capacity, if none of the items can be processed due to insufficient provisioned throughput on all of the tables in the request, then <code>BatchWriteItem</code> returns a <code>ProvisionedThroughputExceededException</code>. For all tables and indexes, if none of the items can be processed due to other throttling scenarios (such as exceeding partition level limits), then <code>BatchWriteItem</code> returns a <code>ThrottlingException</code>.</p> <important> <p>If DynamoDB returns any unprocessed items, you should retry the batch operation on those items. However, <i>we strongly recommend that you use an exponential backoff algorithm</i>. If you retry the batch operation immediately, the underlying read or write requests can still fail due to throttling on the individual tables. If you delay the batch operation using exponential backoff, the individual requests in the batch are much more likely to succeed.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#Programming.Errors.BatchOperations\">Batch Operations and Error Handling</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> </important> <p>With <code>BatchWriteItem</code>, you can efficiently write or delete large amounts of data, such as from Amazon EMR, or copy data from another database into DynamoDB. In order to improve performance with these large-scale operations, <code>BatchWriteItem</code> does not behave in the same way as individual <code>PutItem</code> and <code>DeleteItem</code> calls would. For example, you cannot specify conditions on individual put and delete requests, and <code>BatchWriteItem</code> does not return deleted items in the response.</p> <p>If you use a programming language that supports concurrency, you can use threads to write items in parallel. Your application must include the necessary logic to manage the threads. With languages that don't support threading, you must update or delete the specified items one at a time. In both situations, <code>BatchWriteItem</code> performs the specified put and delete operations in parallel, giving you the power of the thread pool approach without having to introduce complexity into your application.</p> <p>Parallel processing reduces latency, but each specified put and delete request consumes the same number of write capacity units whether it is processed in parallel or not. Delete operations on nonexistent items consume one write capacity unit.</p> <p>If one or more of the following is true, DynamoDB rejects the entire batch write operation:</p> <ul> <li> <p>One or more tables specified in the <code>BatchWriteItem</code> request does not exist.</p> </li> <li> <p>Primary key attributes specified on an item in the request do not match those in the corresponding table's primary key schema.</p> </li> <li> <p>You try to perform multiple operations on the same item in the same <code>BatchWriteItem</code> request. For example, you cannot put and delete the same item in the same <code>BatchWriteItem</code> request. </p> </li> <li> <p> Your request contains at least two items with identical hash and range keys (which essentially is two put operations). </p> </li> <li> <p>There are more than 25 requests in the batch.</p> </li> <li> <p>Any individual item in a batch exceeds 400 KB.</p> </li> <li> <p>The total request size exceeds 16 MB.</p> </li> <li> <p>Any individual items with keys exceeding the key length limits. For a partition key, the limit is 2048 bytes and for a sort key, the limit is 1024 bytes.</p> </li> </ul>",
-      "endpointdiscovery":{
+      "endpointdiscovery":{},
+      "operationContextParams":{
+        "ResourceArnList":{"path":"keys(RequestItems)"}
       }
     },
     "CreateBackup":{
@@ -83,8 +91,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Creates a backup for an existing table.</p> <p> Each time you create an on-demand backup, the entire table data is backed up. There is no limit to the number of on-demand backups that can be taken. </p> <p> When you create an on-demand backup, a time marker of the request is cataloged, and the backup is created asynchronously, by applying all changes until the time of the request to the last full table snapshot. Backup requests are processed instantaneously and become available for restore within minutes. </p> <p>You can call <code>CreateBackup</code> at a maximum rate of 50 times per second.</p> <p>All backups in DynamoDB work without consuming any provisioned throughput on the table.</p> <p> If you submit a backup request on 2018-12-14 at 14:25:00, the backup is guaranteed to contain all data committed to the table up to 14:24:00, and data committed after 14:26:00 will not be. The backup might contain data modifications made between 14:24:00 and 14:26:00. On-demand backup does not support causal consistency. </p> <p> Along with data, the following are also included on the backups: </p> <ul> <li> <p>Global secondary indexes (GSIs)</p> </li> <li> <p>Local secondary indexes (LSIs)</p> </li> <li> <p>Streams</p> </li> <li> <p>Provisioned read and write capacity</p> </li> </ul>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "CreateGlobalTable":{
       "name":"CreateGlobalTable",
@@ -101,8 +108,7 @@
         {"shape":"TableNotFoundException"}
       ],
       "documentation":"<p>Creates a global table from an existing table. A global table creates a replication relationship between two or more DynamoDB tables with the same table name in the provided Regions. </p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important> <p>If you want to add a new replica table to a global table, each of the following conditions must be true:</p> <ul> <li> <p>The table must have the same primary key as all of the other replicas.</p> </li> <li> <p>The table must have the same name as all of the other replicas.</p> </li> <li> <p>The table must have DynamoDB Streams enabled, with the stream containing both the new and the old images of the item.</p> </li> <li> <p>None of the replica tables in the global table can contain any data.</p> </li> </ul> <p> If global secondary indexes are specified, then the following conditions must also be met: </p> <ul> <li> <p> The global secondary indexes must have the same name. </p> </li> <li> <p> The global secondary indexes must have the same hash key and sort key (if present). </p> </li> </ul> <p> If local secondary indexes are specified, then the following conditions must also be met: </p> <ul> <li> <p> The local secondary indexes must have the same name. </p> </li> <li> <p> The local secondary indexes must have the same hash key and sort key (if present). </p> </li> </ul> <important> <p> Write capacity settings should be set consistently across your replica tables and secondary indexes. DynamoDB strongly recommends enabling auto scaling to manage the write capacity settings for all of your global tables replicas and indexes. </p> <p> If you prefer to manage write capacity settings manually, you should provision equal replicated write capacity units to your replica tables. You should also provision equal replicated write capacity units to matching secondary indexes across your global table. </p> </important>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "CreateTable":{
       "name":"CreateTable",
@@ -118,8 +124,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>The <code>CreateTable</code> operation adds a new table to your account. In an Amazon Web Services account, table names must be unique within each Region. That is, you can have two tables with same name if you create the tables in different Regions.</p> <p> <code>CreateTable</code> is an asynchronous operation. Upon receiving a <code>CreateTable</code> request, DynamoDB immediately returns a response with a <code>TableStatus</code> of <code>CREATING</code>. After the table is created, DynamoDB sets the <code>TableStatus</code> to <code>ACTIVE</code>. You can perform read and write operations only on an <code>ACTIVE</code> table. </p> <p>You can optionally define secondary indexes on the new table, as part of the <code>CreateTable</code> operation. If you want to create multiple tables with secondary indexes on them, you must create the tables sequentially. Only one table with secondary indexes can be in the <code>CREATING</code> state at any given time.</p> <p>You can use the <code>DescribeTable</code> action to check the table status.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DeleteBackup":{
       "name":"DeleteBackup",
@@ -136,8 +141,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Deletes an existing backup of a table.</p> <p>You can call <code>DeleteBackup</code> at a maximum rate of 10 times per second.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DeleteItem":{
       "name":"DeleteItem",
@@ -155,11 +159,11 @@
         {"shape":"TransactionConflictException"},
         {"shape":"RequestLimitExceeded"},
         {"shape":"InternalServerError"},
-        {"shape":"ReplicatedWriteConflictException"}
+        {"shape":"ReplicatedWriteConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deletes a single item in a table by primary key. You can perform a conditional delete operation that deletes the item if it exists, or if it has an expected attribute value.</p> <p>In addition to deleting an item, you can also return the item's attribute values in the same operation, using the <code>ReturnValues</code> parameter.</p> <p>Unless you specify conditions, the <code>DeleteItem</code> is an idempotent operation; running it multiple times on the same item or attribute does <i>not</i> result in an error response.</p> <p>Conditional deletes are useful for deleting items only if specific conditions are met. If those conditions are met, DynamoDB performs the delete. Otherwise, the item is not deleted.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DeleteResourcePolicy":{
       "name":"DeleteResourcePolicy",
@@ -177,8 +181,7 @@
         {"shape":"LimitExceededException"}
       ],
       "documentation":"<p>Deletes the resource-based policy attached to the resource, which can be a table or stream.</p> <p> <code>DeleteResourcePolicy</code> is an idempotent operation; running it multiple times on the same resource <i>doesn't</i> result in an error response, unless you specify an <code>ExpectedRevisionId</code>, which will then return a <code>PolicyNotFoundException</code>.</p> <important> <p>To make sure that you don't inadvertently lock yourself out of your own resources, the root principal in your Amazon Web Services account can perform <code>DeleteResourcePolicy</code> requests, even if your resource-based policy explicitly denies the root principal's access. </p> </important> <note> <p> <code>DeleteResourcePolicy</code> is an asynchronous operation. If you issue a <code>GetResourcePolicy</code> request immediately after running the <code>DeleteResourcePolicy</code> request, DynamoDB might still return the deleted policy. This is because the policy for your resource might not have been deleted yet. Wait for a few seconds, and then try the <code>GetResourcePolicy</code> request again.</p> </note>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DeleteTable":{
       "name":"DeleteTable",
@@ -194,9 +197,8 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>The <code>DeleteTable</code> operation deletes a table and all of its items. After a <code>DeleteTable</code> request, the specified table is in the <code>DELETING</code> state until DynamoDB completes the deletion. If the table is in the <code>ACTIVE</code> state, you can delete it. If a table is in <code>CREATING</code> or <code>UPDATING</code> states, then DynamoDB returns a <code>ResourceInUseException</code>. If the specified table does not exist, DynamoDB returns a <code>ResourceNotFoundException</code>. If table is already in the <code>DELETING</code> state, no error is returned. </p> <important> <p>For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version). </p> </important> <note> <p>DynamoDB might continue to accept data read and write operations, such as <code>GetItem</code> and <code>PutItem</code>, on a table in the <code>DELETING</code> state until the table deletion is complete. For the full list of table states, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TableDescription.html#DDB-Type-TableDescription-TableStatus\">TableStatus</a>.</p> </note> <p>When you delete a table, any indexes on that table are also deleted.</p> <p>If you have DynamoDB Streams enabled on the table, then the corresponding stream on that table goes into the <code>DISABLED</code> state, and the stream is automatically deleted after 24 hours.</p> <p>Use the <code>DescribeTable</code> action to check the status of the table. </p>",
-      "endpointdiscovery":{
-      }
+      "documentation":"<p>The <code>DeleteTable</code> operation deletes a table and all of its items. After a <code>DeleteTable</code> request, the specified table is in the <code>DELETING</code> state until DynamoDB completes the deletion. If the table is in the <code>ACTIVE</code> state, you can delete it. If a table is in <code>CREATING</code> or <code>UPDATING</code> states, then DynamoDB returns a <code>ResourceInUseException</code>. If the specified table does not exist, DynamoDB returns a <code>ResourceNotFoundException</code>. If table is already in the <code>DELETING</code> state, no error is returned. </p> <note> <p>DynamoDB might continue to accept data read and write operations, such as <code>GetItem</code> and <code>PutItem</code>, on a table in the <code>DELETING</code> state until the table deletion is complete. For the full list of table states, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TableDescription.html#DDB-Type-TableDescription-TableStatus\">TableStatus</a>.</p> </note> <p>When you delete a table, any indexes on that table are also deleted.</p> <p>If you have DynamoDB Streams enabled on the table, then the corresponding stream on that table goes into the <code>DISABLED</code> state, and the stream is automatically deleted after 24 hours.</p> <p>Use the <code>DescribeTable</code> action to check the status of the table. </p>",
+      "endpointdiscovery":{}
     },
     "DescribeBackup":{
       "name":"DescribeBackup",
@@ -211,8 +213,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Describes an existing backup of a table.</p> <p>You can call <code>DescribeBackup</code> at a maximum rate of 10 times per second.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeContinuousBackups":{
       "name":"DescribeContinuousBackups",
@@ -227,8 +228,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Checks the status of continuous backups and point in time recovery on the specified table. Continuous backups are <code>ENABLED</code> on all tables at table creation. If point in time recovery is enabled, <code>PointInTimeRecoveryStatus</code> will be set to ENABLED.</p> <p> After continuous backups and point in time recovery are enabled, you can restore to any point in time within <code>EarliestRestorableDateTime</code> and <code>LatestRestorableDateTime</code>. </p> <p> <code>LatestRestorableDateTime</code> is typically 5 minutes before the current time. You can restore your table to any point in time in the last 35 days. You can set the recovery period to any value between 1 and 35 days. </p> <p>You can call <code>DescribeContinuousBackups</code> at a maximum rate of 10 times per second.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeContributorInsights":{
       "name":"DescribeContributorInsights",
@@ -283,8 +283,7 @@
         {"shape":"GlobalTableNotFoundException"}
       ],
       "documentation":"<p>Returns information about the specified global table.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeGlobalTableSettings":{
       "name":"DescribeGlobalTableSettings",
@@ -299,8 +298,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Describes Region-specific settings for a global table.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeImport":{
       "name":"DescribeImport",
@@ -328,8 +326,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Returns information about the status of Kinesis streaming.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeLimits":{
       "name":"DescribeLimits",
@@ -343,8 +340,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Returns the current provisioned-capacity quotas for your Amazon Web Services account in a Region, both for the Region as a whole and for any one DynamoDB table that you create there.</p> <p>When you establish an Amazon Web Services account, the account has initial quotas on the maximum read capacity units and write capacity units that you can provision across all of your DynamoDB tables in a given Region. Also, there are per-table quotas that apply when you create a table there. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html\">Service, Account, and Table Quotas</a> page in the <i>Amazon DynamoDB Developer Guide</i>.</p> <p>Although you can increase these quotas by filing a case at <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support Center</a>, obtaining the increase is not instantaneous. The <code>DescribeLimits</code> action lets you write code to compare the capacity you are currently using to those quotas imposed by your account so that you have enough time to apply for an increase before you hit a quota.</p> <p>For example, you could use one of the Amazon Web Services SDKs to do the following:</p> <ol> <li> <p>Call <code>DescribeLimits</code> for a particular Region to obtain your current account quotas on provisioned capacity there.</p> </li> <li> <p>Create a variable to hold the aggregate read capacity units provisioned for all your tables in that Region, and one to hold the aggregate write capacity units. Zero them both.</p> </li> <li> <p>Call <code>ListTables</code> to obtain a list of all your DynamoDB tables.</p> </li> <li> <p>For each table name listed by <code>ListTables</code>, do the following:</p> <ul> <li> <p>Call <code>DescribeTable</code> with the table name.</p> </li> <li> <p>Use the data returned by <code>DescribeTable</code> to add the read capacity units and write capacity units provisioned for the table itself to your variables.</p> </li> <li> <p>If the table has one or more global secondary indexes (GSIs), loop over these GSIs and add their provisioned capacity values to your variables as well.</p> </li> </ul> </li> <li> <p>Report the account quotas for that Region returned by <code>DescribeLimits</code>, along with the total current provisioned capacity levels you have calculated.</p> </li> </ol> <p>This will let you see whether you are getting close to your account-level quotas.</p> <p>The per-table quotas apply only when you are creating a new table. They restrict the sum of the provisioned capacity of the new table itself and all its global secondary indexes.</p> <p>For existing tables and their GSIs, DynamoDB doesn't let you increase provisioned capacity extremely rapidly, but the only quota that applies is that the aggregate provisioned capacity over all your tables and GSIs cannot exceed either of the per-account quotas.</p> <note> <p> <code>DescribeLimits</code> should only be called periodically. You can expect throttling errors if you call it more than once in a minute.</p> </note> <p>The <code>DescribeLimits</code> Request element has no content.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DescribeTable":{
       "name":"DescribeTable",
@@ -358,9 +354,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Returns information about the table, including the current status of the table, when it was created, the primary key schema, and any indexes on the table.</p> <important> <p>For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version). </p> </important> <note> <p>If you issue a <code>DescribeTable</code> request immediately after a <code>CreateTable</code> request, DynamoDB might return a <code>ResourceNotFoundException</code>. This is because <code>DescribeTable</code> uses an eventually consistent query, and the metadata for your table might not be available at that moment. Wait for a few seconds, and then try the <code>DescribeTable</code> request again.</p> </note>",
-      "endpointdiscovery":{
-      }
+      "documentation":"<p>Returns information about the table, including the current status of the table, when it was created, the primary key schema, and any indexes on the table.</p> <note> <p>If you issue a <code>DescribeTable</code> request immediately after a <code>CreateTable</code> request, DynamoDB might return a <code>ResourceNotFoundException</code>. This is because <code>DescribeTable</code> uses an eventually consistent query, and the metadata for your table might not be available at that moment. Wait for a few seconds, and then try the <code>DescribeTable</code> request again.</p> </note>",
+      "endpointdiscovery":{}
     },
     "DescribeTableReplicaAutoScaling":{
       "name":"DescribeTableReplicaAutoScaling",
@@ -374,7 +369,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Describes auto scaling settings across replicas of the global table at once.</p> <important> <p>For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version).</p> </important>"
+      "documentation":"<p>Describes auto scaling settings across replicas of the global table at once.</p>"
     },
     "DescribeTimeToLive":{
       "name":"DescribeTimeToLive",
@@ -389,8 +384,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Gives a description of the Time to Live (TTL) status on the specified table. </p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "DisableKinesisStreamingDestination":{
       "name":"DisableKinesisStreamingDestination",
@@ -407,8 +401,7 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Stops replication from the DynamoDB table to the Kinesis data stream. This is done without deleting either of the resources.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "EnableKinesisStreamingDestination":{
       "name":"EnableKinesisStreamingDestination",
@@ -425,8 +418,7 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Starts table data replication to the specified Kinesis data stream at a timestamp chosen during the enable workflow. If this operation doesn't return results immediately, use DescribeKinesisStreamingDestination to check if streaming to the Kinesis data stream is ACTIVE.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "ExecuteStatement":{
       "name":"ExecuteStatement",
@@ -444,7 +436,8 @@
         {"shape":"TransactionConflictException"},
         {"shape":"RequestLimitExceeded"},
         {"shape":"InternalServerError"},
-        {"shape":"DuplicateItemException"}
+        {"shape":"DuplicateItemException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This operation allows you to perform reads and singleton writes on data stored in DynamoDB, using PartiQL.</p> <p>For PartiQL reads (<code>SELECT</code> statement), if the total number of processed items exceeds the maximum dataset size limit of 1 MB, the read stops and results are returned to the user as a <code>LastEvaluatedKey</code> value to continue the read in a subsequent operation. If the filter criteria in <code>WHERE</code> clause does not match any data, the read will return an empty result set.</p> <p>A single <code>SELECT</code> statement response can return up to the maximum number of items (if using the Limit parameter) or a maximum of 1 MB of data (and then apply any filtering to the results using <code>WHERE</code> clause). If <code>LastEvaluatedKey</code> is present in the response, you need to paginate the result set. If <code>NextToken</code> is present, you need to paginate the result set and include <code>NextToken</code>.</p>"
     },
@@ -463,7 +456,8 @@
         {"shape":"IdempotentParameterMismatchException"},
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>This operation allows you to perform transactional reads or writes on data stored in DynamoDB, using PartiQL.</p> <note> <p>The entire transaction must consist of either read statements or write statements, you cannot mix both in one transaction. The EXISTS function is an exception and can be used to check the condition of specific attributes of the item in a similar manner to <code>ConditionCheck</code> in the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html#transaction-apis-txwriteitems\">TransactWriteItems</a> API.</p> </note>"
     },
@@ -497,11 +491,11 @@
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>The <code>GetItem</code> operation returns a set of attributes for the item with the given primary key. If there is no matching item, <code>GetItem</code> does not return any data and there will be no <code>Item</code> element in the response.</p> <p> <code>GetItem</code> provides an eventually consistent read by default. If your application requires a strongly consistent read, set <code>ConsistentRead</code> to <code>true</code>. Although a strongly consistent read might take more time than an eventually consistent read, it always returns the last updated value.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "GetResourcePolicy":{
       "name":"GetResourcePolicy",
@@ -517,8 +511,7 @@
         {"shape":"PolicyNotFoundException"}
       ],
       "documentation":"<p>Returns the resource-based policy document attached to the resource, which can be a table or stream, in JSON format.</p> <p> <code>GetResourcePolicy</code> follows an <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html\"> <i>eventually consistent</i> </a> model. The following list describes the outcomes when you issue the <code>GetResourcePolicy</code> request immediately after issuing another request:</p> <ul> <li> <p>If you issue a <code>GetResourcePolicy</code> request immediately after a <code>PutResourcePolicy</code> request, DynamoDB might return a <code>PolicyNotFoundException</code>.</p> </li> <li> <p>If you issue a <code>GetResourcePolicy</code>request immediately after a <code>DeleteResourcePolicy</code> request, DynamoDB might return the policy that was present before the deletion request.</p> </li> <li> <p>If you issue a <code>GetResourcePolicy</code> request immediately after a <code>CreateTable</code> request, which includes a resource-based policy, DynamoDB might return a <code>ResourceNotFoundException</code> or a <code>PolicyNotFoundException</code>.</p> </li> </ul> <p>Because <code>GetResourcePolicy</code> uses an <i>eventually consistent</i> query, the metadata for your policy or table might not be available at that moment. Wait for a few seconds, and then retry the <code>GetResourcePolicy</code> request.</p> <p>After a <code>GetResourcePolicy</code> request returns a policy created using the <code>PutResourcePolicy</code> request, the policy will be applied in the authorization of requests to the resource. Because this process is eventually consistent, it will take some time to apply the policy to all requests to a resource. Policies that you attach while creating a table using the <code>CreateTable</code> request will always be applied to all requests for that table.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "ImportTable":{
       "name":"ImportTable",
@@ -533,7 +526,10 @@
         {"shape":"LimitExceededException"},
         {"shape":"ImportConflictException"}
       ],
-      "documentation":"<p> Imports table data from an S3 bucket. </p>"
+      "documentation":"<p> Imports table data from an S3 bucket. </p>",
+      "operationContextParams":{
+        "ResourceArn":{"path":"TableCreationParameters.TableName"}
+      }
     },
     "ListBackups":{
       "name":"ListBackups",
@@ -547,8 +543,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>List DynamoDB backups that are associated with an Amazon Web Services account and weren't made with Amazon Web Services Backup. To list these backups for a given table, specify <code>TableName</code>. <code>ListBackups</code> returns a paginated list of results with at most 1 MB worth of items in a page. You can also specify a maximum number of entries to be returned in a page.</p> <p>In the request, start time is inclusive, but end time is exclusive. Note that these boundaries are for the time at which the original backup was requested.</p> <p>You can call <code>ListBackups</code> a maximum of five times per second.</p> <p>If you want to retrieve the complete list of backups made with Amazon Web Services Backup, use the <a href=\"https://docs.aws.amazon.com/aws-backup/latest/devguide/API_ListBackupJobs.html\">Amazon Web Services Backup list API.</a> </p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "ListContributorInsights":{
       "name":"ListContributorInsights",
@@ -590,8 +585,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Lists all global tables that have a replica in the specified Region.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "ListImports":{
       "name":"ListImports",
@@ -618,8 +612,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Returns an array of table names associated with the current account and endpoint. The output from <code>ListTables</code> is paginated, with each page returning a maximum of 100 table names.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "ListTagsOfResource":{
       "name":"ListTagsOfResource",
@@ -634,8 +627,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>List all tags on an Amazon DynamoDB resource. You can call ListTagsOfResource up to 10 times per second, per account.</p> <p>For an overview on tagging DynamoDB resources, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html\">Tagging for DynamoDB</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "PutItem":{
       "name":"PutItem",
@@ -653,11 +645,11 @@
         {"shape":"TransactionConflictException"},
         {"shape":"RequestLimitExceeded"},
         {"shape":"InternalServerError"},
-        {"shape":"ReplicatedWriteConflictException"}
+        {"shape":"ReplicatedWriteConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Creates a new item, or replaces an old item with a new item. If an item that has the same primary key as the new item already exists in the specified table, the new item completely replaces the existing item. You can perform a conditional put operation (add a new item if one with the specified primary key doesn't exist), or replace an existing item if it has certain attribute values. You can return the item's attribute values in the same operation, using the <code>ReturnValues</code> parameter.</p> <p>When you add an item, the primary key attributes are the only required attributes. </p> <p>Empty String and Binary attribute values are allowed. Attribute values of type String and Binary must have a length greater than zero if the attribute is used as a key attribute for a table or index. Set type attributes cannot be empty. </p> <p>Invalid Requests with empty values will be rejected with a <code>ValidationException</code> exception.</p> <note> <p>To prevent a new item from replacing an existing item, use a conditional expression that contains the <code>attribute_not_exists</code> function with the name of the attribute being used as the partition key for the table. Since every record must contain that attribute, the <code>attribute_not_exists</code> function will only succeed if no matching item exists.</p> </note> <p>For more information about <code>PutItem</code>, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html\">Working with Items</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "PutResourcePolicy":{
       "name":"PutResourcePolicy",
@@ -675,8 +667,7 @@
         {"shape":"ResourceInUseException"}
       ],
       "documentation":"<p>Attaches a resource-based policy document to the resource, which can be a table or stream. When you attach a resource-based policy using this API, the policy application is <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html\"> <i>eventually consistent</i> </a>.</p> <p> <code>PutResourcePolicy</code> is an idempotent operation; running it multiple times on the same resource using the same policy document will return the same revision ID. If you specify an <code>ExpectedRevisionId</code> that doesn't match the current policy's <code>RevisionId</code>, the <code>PolicyNotFoundException</code> will be returned.</p> <note> <p> <code>PutResourcePolicy</code> is an asynchronous operation. If you issue a <code>GetResourcePolicy</code> request immediately after a <code>PutResourcePolicy</code> request, DynamoDB might return your previous policy, if there was one, or return the <code>PolicyNotFoundException</code>. This is because <code>GetResourcePolicy</code> uses an eventually consistent query, and the metadata for your policy or table might not be available at that moment. Wait for a few seconds, and then try the <code>GetResourcePolicy</code> request again.</p> </note>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "Query":{
       "name":"Query",
@@ -690,11 +681,11 @@
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>You must provide the name of the partition key attribute and a single value for that attribute. <code>Query</code> returns all items with that partition key value. Optionally, you can provide a sort key attribute and use a comparison operator to refine the search results.</p> <p>Use the <code>KeyConditionExpression</code> parameter to provide a specific value for the partition key. The <code>Query</code> operation will return all of the items from the table or index with that partition key value. You can optionally narrow the scope of the <code>Query</code> operation by specifying a sort key value and a comparison operator in <code>KeyConditionExpression</code>. To further refine the <code>Query</code> results, you can optionally provide a <code>FilterExpression</code>. A <code>FilterExpression</code> determines which items within the results should be returned to you. All of the other results are discarded. </p> <p> A <code>Query</code> operation always returns a result set. If no matching items are found, the result set will be empty. Queries that do not return results consume the minimum number of read capacity units for that type of read operation. </p> <note> <p> DynamoDB calculates the number of read capacity units consumed based on item size, not on the amount of data that is returned to an application. The number of capacity units consumed will be the same whether you request all of the attributes (the default behavior) or just some of them (using a projection expression). The number will also be the same whether or not you use a <code>FilterExpression</code>. </p> </note> <p> <code>Query</code> results are always sorted by the sort key value. If the data type of the sort key is Number, the results are returned in numeric order; otherwise, the results are returned in order of UTF-8 bytes. By default, the sort order is ascending. To reverse the order, set the <code>ScanIndexForward</code> parameter to false. </p> <p> A single <code>Query</code> operation will read up to the maximum number of items set (if using the <code>Limit</code> parameter) or a maximum of 1 MB of data and then apply any filtering to the results using <code>FilterExpression</code>. If <code>LastEvaluatedKey</code> is present in the response, you will need to paginate the result set. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.Pagination\">Paginating the Results</a> in the <i>Amazon DynamoDB Developer Guide</i>. </p> <p> <code>FilterExpression</code> is applied after a <code>Query</code> finishes, but before the results are returned. A <code>FilterExpression</code> cannot contain partition key or sort key attributes. You need to specify those attributes in the <code>KeyConditionExpression</code>. </p> <note> <p> A <code>Query</code> operation can return an empty result set and a <code>LastEvaluatedKey</code> if all the items read for the page of results are filtered out. </p> </note> <p>You can query a table, a local secondary index, or a global secondary index. For a query on a table or on a local secondary index, you can set the <code>ConsistentRead</code> parameter to <code>true</code> and obtain a strongly consistent result. Global secondary indexes support eventually consistent reads only, so do not specify <code>ConsistentRead</code> when querying a global secondary index.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "RestoreTableFromBackup":{
       "name":"RestoreTableFromBackup",
@@ -713,8 +704,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Creates a new table from an existing backup. Any number of users can execute up to 50 concurrent restores (any type of restore) in a given account. </p> <p>You can call <code>RestoreTableFromBackup</code> at a maximum rate of 10 times per second.</p> <p>You must manually set up the following on the restored table:</p> <ul> <li> <p>Auto scaling policies</p> </li> <li> <p>IAM policies</p> </li> <li> <p>Amazon CloudWatch metrics and alarms</p> </li> <li> <p>Tags</p> </li> <li> <p>Stream settings</p> </li> <li> <p>Time to Live (TTL) settings</p> </li> </ul>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "RestoreTableToPointInTime":{
       "name":"RestoreTableToPointInTime",
@@ -734,8 +724,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Restores the specified table to the specified point in time within <code>EarliestRestorableDateTime</code> and <code>LatestRestorableDateTime</code>. You can restore your table to any point in time in the last 35 days. You can set the recovery period to any value between 1 and 35 days. Any number of users can execute up to 50 concurrent restores (any type of restore) in a given account. </p> <p>When you restore using point in time recovery, DynamoDB restores your table data to the state based on the selected date and time (day:hour:minute:second) to a new table. </p> <p>Along with data, the following are also included on the new restored table using point in time recovery: </p> <ul> <li> <p>Global secondary indexes (GSIs)</p> </li> <li> <p>Local secondary indexes (LSIs)</p> </li> <li> <p>Provisioned read and write capacity</p> </li> <li> <p>Encryption settings</p> <important> <p> All these settings come from the current settings of the source table at the time of restore. </p> </important> </li> </ul> <p>You must manually set up the following on the restored table:</p> <ul> <li> <p>Auto scaling policies</p> </li> <li> <p>IAM policies</p> </li> <li> <p>Amazon CloudWatch metrics and alarms</p> </li> <li> <p>Tags</p> </li> <li> <p>Stream settings</p> </li> <li> <p>Time to Live (TTL) settings</p> </li> <li> <p>Point in time recovery settings</p> </li> </ul>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "Scan":{
       "name":"Scan",
@@ -749,11 +738,11 @@
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>The <code>Scan</code> operation returns one or more items and item attributes by accessing every item in a table or a secondary index. To have DynamoDB return fewer items, you can provide a <code>FilterExpression</code> operation.</p> <p>If the total size of scanned items exceeds the maximum dataset size limit of 1 MB, the scan completes and results are returned to the user. The <code>LastEvaluatedKey</code> value is also returned and the requestor can use the <code>LastEvaluatedKey</code> to continue the scan in a subsequent operation. Each scan response also includes number of items that were scanned (ScannedCount) as part of the request. If using a <code>FilterExpression</code>, a scan result can result in no items meeting the criteria and the <code>Count</code> will result in zero. If you did not use a <code>FilterExpression</code> in the scan request, then <code>Count</code> is the same as <code>ScannedCount</code>.</p> <note> <p> <code>Count</code> and <code>ScannedCount</code> only return the count of items specific to a single scan request and, unless the table is less than 1MB, do not represent the total number of items in the table. </p> </note> <p>A single <code>Scan</code> operation first reads up to the maximum number of items set (if using the <code>Limit</code> parameter) or a maximum of 1 MB of data and then applies any filtering to the results if a <code>FilterExpression</code> is provided. If <code>LastEvaluatedKey</code> is present in the response, pagination is required to complete the full table scan. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination\">Paginating the Results</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> <p> <code>Scan</code> operations proceed sequentially; however, for faster performance on a large table or secondary index, applications can request a parallel <code>Scan</code> operation by providing the <code>Segment</code> and <code>TotalSegments</code> parameters. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan\">Parallel Scan</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> <p>By default, a <code>Scan</code> uses eventually consistent reads when accessing the items in a table. Therefore, the results from an eventually consistent <code>Scan</code> may not include the latest item changes at the time the scan iterates through each item in the table. If you require a strongly consistent read of each item as the scan iterates through the items in the table, you can set the <code>ConsistentRead</code> parameter to true. Strong consistency only relates to the consistency of the read at the item level.</p> <note> <p> DynamoDB does not provide snapshot isolation for a scan operation when the <code>ConsistentRead</code> parameter is set to true. Thus, a DynamoDB scan operation does not guarantee that all reads in a scan see a consistent snapshot of the table when the scan operation was requested. </p> </note>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "TagResource":{
       "name":"TagResource",
@@ -769,8 +758,7 @@
         {"shape":"ResourceInUseException"}
       ],
       "documentation":"<p>Associate a set of tags with an Amazon DynamoDB resource. You can then activate these user-defined tags so that they appear on the Billing and Cost Management console for cost allocation tracking. You can call TagResource up to five times per second, per account. </p> <ul> <li> <p> <code>TagResource</code> is an asynchronous operation. If you issue a <a>ListTagsOfResource</a> request immediately after a <code>TagResource</code> request, DynamoDB might return your previous tag set, if there was one, or an empty tag set. This is because <code>ListTagsOfResource</code> uses an eventually consistent query, and the metadata for your tags or table might not be available at that moment. Wait for a few seconds, and then try the <code>ListTagsOfResource</code> request again.</p> </li> <li> <p>The application or removal of tags using <code>TagResource</code> and <code>UntagResource</code> APIs is eventually consistent. <code>ListTagsOfResource</code> API will only reflect the changes after a few seconds.</p> </li> </ul> <p>For an overview on tagging DynamoDB resources, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html\">Tagging for DynamoDB</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "TransactGetItems":{
       "name":"TransactGetItems",
@@ -785,10 +773,13 @@
         {"shape":"TransactionCanceledException"},
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p> <code>TransactGetItems</code> is a synchronous operation that atomically retrieves multiple items from one or more tables (but not from indexes) in a single account and Region. A <code>TransactGetItems</code> call can contain up to 100 <code>TransactGetItem</code> objects, each of which contains a <code>Get</code> structure that specifies an item to retrieve from a table in the account and Region. A call to <code>TransactGetItems</code> cannot retrieve items from tables in more than one Amazon Web Services account or Region. The aggregate size of the items in the transaction cannot exceed 4 MB.</p> <p>DynamoDB rejects the entire <code>TransactGetItems</code> request if any of the following is true:</p> <ul> <li> <p>A conflicting operation is in the process of updating an item to be read.</p> </li> <li> <p>There is insufficient provisioned capacity for the transaction to be completed.</p> </li> <li> <p>There is a user error, such as an invalid data format.</p> </li> <li> <p>The aggregate size of the items in the transaction exceeded 4 MB.</p> </li> </ul>",
-      "endpointdiscovery":{
+      "endpointdiscovery":{},
+      "operationContextParams":{
+        "ResourceArnList":{"path":"TransactItems[*].Get.TableName"}
       }
     },
     "TransactWriteItems":{
@@ -806,10 +797,13 @@
         {"shape":"IdempotentParameterMismatchException"},
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"RequestLimitExceeded"},
-        {"shape":"InternalServerError"}
+        {"shape":"InternalServerError"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p> <code>TransactWriteItems</code> is a synchronous write operation that groups up to 100 action requests. These actions can target items in different tables, but not in different Amazon Web Services accounts or Regions, and no two actions can target the same item. For example, you cannot both <code>ConditionCheck</code> and <code>Update</code> the same item. The aggregate size of the items in the transaction cannot exceed 4 MB.</p> <p>The actions are completed atomically so that either all of them succeed, or all of them fail. They are defined by the following objects:</p> <ul> <li> <p> <code>Put</code>  —   Initiates a <code>PutItem</code> operation to write a new item. This structure specifies the primary key of the item to be written, the name of the table to write it in, an optional condition expression that must be satisfied for the write to succeed, a list of the item's attributes, and a field indicating whether to retrieve the item's attributes if the condition is not met.</p> </li> <li> <p> <code>Update</code>  —   Initiates an <code>UpdateItem</code> operation to update an existing item. This structure specifies the primary key of the item to be updated, the name of the table where it resides, an optional condition expression that must be satisfied for the update to succeed, an expression that defines one or more attributes to be updated, and a field indicating whether to retrieve the item's attributes if the condition is not met.</p> </li> <li> <p> <code>Delete</code>  —   Initiates a <code>DeleteItem</code> operation to delete an existing item. This structure specifies the primary key of the item to be deleted, the name of the table where it resides, an optional condition expression that must be satisfied for the deletion to succeed, and a field indicating whether to retrieve the item's attributes if the condition is not met.</p> </li> <li> <p> <code>ConditionCheck</code>  —   Applies a condition to an item that is not being modified by the transaction. This structure specifies the primary key of the item to be checked, the name of the table where it resides, a condition expression that must be satisfied for the transaction to succeed, and a field indicating whether to retrieve the item's attributes if the condition is not met.</p> </li> </ul> <p>DynamoDB rejects the entire <code>TransactWriteItems</code> request if any of the following is true:</p> <ul> <li> <p>A condition in one of the condition expressions is not met.</p> </li> <li> <p>An ongoing operation is in the process of updating the same item.</p> </li> <li> <p>There is insufficient provisioned capacity for the transaction to be completed.</p> </li> <li> <p>An item size becomes too large (bigger than 400 KB), a local secondary index (LSI) becomes too large, or a similar validation error occurs because of changes made by the transaction.</p> </li> <li> <p>The aggregate size of the items in the transaction exceeds 4 MB.</p> </li> <li> <p>There is a user error, such as an invalid data format.</p> </li> </ul>",
-      "endpointdiscovery":{
+      "endpointdiscovery":{},
+      "operationContextParams":{
+        "ResourceArnList":{"path":"TransactItems[*].[ConditionCheck.TableName, Put.TableName, Delete.TableName, Update.TableName][]"}
       }
     },
     "UntagResource":{
@@ -826,8 +820,7 @@
         {"shape":"ResourceInUseException"}
       ],
       "documentation":"<p>Removes the association of tags from an Amazon DynamoDB resource. You can call <code>UntagResource</code> up to five times per second, per account. </p> <ul> <li> <p> <code>UntagResource</code> is an asynchronous operation. If you issue a <a>ListTagsOfResource</a> request immediately after an <code>UntagResource</code> request, DynamoDB might return your previous tag set, if there was one, or an empty tag set. This is because <code>ListTagsOfResource</code> uses an eventually consistent query, and the metadata for your tags or table might not be available at that moment. Wait for a few seconds, and then try the <code>ListTagsOfResource</code> request again.</p> </li> <li> <p>The application or removal of tags using <code>TagResource</code> and <code>UntagResource</code> APIs is eventually consistent. <code>ListTagsOfResource</code> API will only reflect the changes after a few seconds.</p> </li> </ul> <p>For an overview on tagging DynamoDB resources, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html\">Tagging for DynamoDB</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "UpdateContinuousBackups":{
       "name":"UpdateContinuousBackups",
@@ -842,9 +835,8 @@
         {"shape":"ContinuousBackupsUnavailableException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p> <code>UpdateContinuousBackups</code> enables or disables point in time recovery for the specified table. A successful <code>UpdateContinuousBackups</code> call returns the current <code>ContinuousBackupsDescription</code>. Continuous backups are <code>ENABLED</code> on all tables at table creation. If point in time recovery is enabled, <code>PointInTimeRecoveryStatus</code> will be set to ENABLED.</p> <p> Once continuous backups and point in time recovery are enabled, you can restore to any point in time within <code>EarliestRestorableDateTime</code> and <code>LatestRestorableDateTime</code>. </p> <p> <code>LatestRestorableDateTime</code> is typically 5 minutes before the current time. You can restore your table to any point in time in the last 35 days. You can set the recovery period to any value between 1 and 35 days.</p>",
-      "endpointdiscovery":{
-      }
+      "documentation":"<p> <code>UpdateContinuousBackups</code> enables or disables point in time recovery for the specified table. A successful <code>UpdateContinuousBackups</code> call returns the current <code>ContinuousBackupsDescription</code>. Continuous backups are <code>ENABLED</code> on all tables at table creation. If point in time recovery is enabled, <code>PointInTimeRecoveryStatus</code> will be set to ENABLED.</p> <p> Once continuous backups and point in time recovery are enabled, you can restore to any point in time within <code>EarliestRestorableDateTime</code> and <code>LatestRestorableDateTime</code>. </p> <p> <code>LatestRestorableDateTime</code> is typically 5 minutes before the current time. You can restore your table to any point in time in the last 35 days. You can set the <code>RecoveryPeriodInDays</code> to any value between 1 and 35 days.</p>",
+      "endpointdiscovery":{}
     },
     "UpdateContributorInsights":{
       "name":"UpdateContributorInsights",
@@ -875,9 +867,8 @@
         {"shape":"ReplicaNotFoundException"},
         {"shape":"TableNotFoundException"}
       ],
-      "documentation":"<p>Adds or removes replicas in the specified global table. The global table must already exist to be able to use this operation. Any replica to be added must be empty, have the same name as the global table, have the same key schema, have DynamoDB Streams enabled, and have the same provisioned and maximum write capacity units.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important> <note> <p> For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version). If you are using global tables <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Version 2019.11.21</a> you can use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html\">UpdateTable</a> instead. </p> <p> Although you can use <code>UpdateGlobalTable</code> to add replicas and remove replicas in a single request, for simplicity we recommend that you issue separate requests for adding or removing replicas. </p> </note> <p> If global secondary indexes are specified, then the following conditions must also be met: </p> <ul> <li> <p> The global secondary indexes must have the same name. </p> </li> <li> <p> The global secondary indexes must have the same hash key and sort key (if present). </p> </li> <li> <p> The global secondary indexes must have the same provisioned and maximum write capacity units. </p> </li> </ul>",
-      "endpointdiscovery":{
-      }
+      "documentation":"<p>Adds or removes replicas in the specified global table. The global table must already exist to be able to use this operation. Any replica to be added must be empty, have the same name as the global table, have the same key schema, have DynamoDB Streams enabled, and have the same provisioned and maximum write capacity units.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important> <note> <p> If you are using global tables <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Version 2019.11.21</a> (Current) you can use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html\">UpdateTable</a> instead. </p> <p> Although you can use <code>UpdateGlobalTable</code> to add replicas and remove replicas in a single request, for simplicity we recommend that you issue separate requests for adding or removing replicas. </p> </note> <p> If global secondary indexes are specified, then the following conditions must also be met: </p> <ul> <li> <p> The global secondary indexes must have the same name. </p> </li> <li> <p> The global secondary indexes must have the same hash key and sort key (if present). </p> </li> <li> <p> The global secondary indexes must have the same provisioned and maximum write capacity units. </p> </li> </ul>",
+      "endpointdiscovery":{}
     },
     "UpdateGlobalTableSettings":{
       "name":"UpdateGlobalTableSettings",
@@ -896,8 +887,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Updates settings for a global table.</p> <important> <p>This documentation is for version 2017.11.29 (Legacy) of global tables, which should be avoided for new global tables. Customers should use <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html\">Global Tables version 2019.11.21 (Current)</a> when possible, because it provides greater flexibility, higher efficiency, and consumes less write capacity than 2017.11.29 (Legacy).</p> <p>To determine which version you're using, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.DetermineVersion.html\">Determining the global table version you are using</a>. To update existing global tables from version 2017.11.29 (Legacy) to version 2019.11.21 (Current), see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_upgrade.html\">Upgrading global tables</a>.</p> </important>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "UpdateItem":{
       "name":"UpdateItem",
@@ -915,11 +905,11 @@
         {"shape":"TransactionConflictException"},
         {"shape":"RequestLimitExceeded"},
         {"shape":"InternalServerError"},
-        {"shape":"ReplicatedWriteConflictException"}
+        {"shape":"ReplicatedWriteConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Edits an existing item's attributes, or adds a new item to the table if it does not already exist. You can put, delete, or add attribute values. You can also perform a conditional update on an existing item (insert a new attribute name-value pair if it doesn't exist, or replace an existing name-value pair if it has certain expected attribute values).</p> <p>You can also return the item's attribute values in the same <code>UpdateItem</code> operation using the <code>ReturnValues</code> parameter.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "UpdateKinesisStreamingDestination":{
       "name":"UpdateKinesisStreamingDestination",
@@ -936,8 +926,7 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>The command to update the Kinesis stream destination.</p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     },
     "UpdateTable":{
       "name":"UpdateTable",
@@ -953,9 +942,8 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Modifies the provisioned throughput settings, global secondary indexes, or DynamoDB Streams settings for a given table.</p> <important> <p>For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version). </p> </important> <p>You can only perform one of the following operations at once:</p> <ul> <li> <p>Modify the provisioned throughput settings of the table.</p> </li> <li> <p>Remove a global secondary index from the table.</p> </li> <li> <p>Create a new global secondary index on the table. After the index begins backfilling, you can use <code>UpdateTable</code> to perform other operations.</p> </li> </ul> <p> <code>UpdateTable</code> is an asynchronous operation; while it's executing, the table status changes from <code>ACTIVE</code> to <code>UPDATING</code>. While it's <code>UPDATING</code>, you can't issue another <code>UpdateTable</code> request. When the table returns to the <code>ACTIVE</code> state, the <code>UpdateTable</code> operation is complete.</p>",
-      "endpointdiscovery":{
-      }
+      "documentation":"<p>Modifies the provisioned throughput settings, global secondary indexes, or DynamoDB Streams settings for a given table.</p> <p>You can only perform one of the following operations at once:</p> <ul> <li> <p>Modify the provisioned throughput settings of the table.</p> </li> <li> <p>Remove a global secondary index from the table.</p> </li> <li> <p>Create a new global secondary index on the table. After the index begins backfilling, you can use <code>UpdateTable</code> to perform other operations.</p> </li> </ul> <p> <code>UpdateTable</code> is an asynchronous operation; while it's executing, the table status changes from <code>ACTIVE</code> to <code>UPDATING</code>. While it's <code>UPDATING</code>, you can't issue another <code>UpdateTable</code> request. When the table returns to the <code>ACTIVE</code> state, the <code>UpdateTable</code> operation is complete.</p>",
+      "endpointdiscovery":{}
     },
     "UpdateTableReplicaAutoScaling":{
       "name":"UpdateTableReplicaAutoScaling",
@@ -971,7 +959,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Updates auto scaling settings on your global tables at once.</p> <important> <p>For global tables, this operation only applies to global tables using Version 2019.11.21 (Current version). </p> </important>"
+      "documentation":"<p>Updates auto scaling settings on your global tables at once.</p>"
     },
     "UpdateTimeToLive":{
       "name":"UpdateTimeToLive",
@@ -988,8 +976,7 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>The <code>UpdateTimeToLive</code> method enables or disables Time to Live (TTL) for the specified table. A successful <code>UpdateTimeToLive</code> call returns the current <code>TimeToLiveSpecification</code>. It can take up to one hour for the change to fully process. Any additional <code>UpdateTimeToLive</code> calls for the same table during this one hour duration result in a <code>ValidationException</code>. </p> <p>TTL compares the current time in epoch time format to the time stored in the TTL attribute of an item. If the epoch time value stored in the attribute is less than the current time, the item is marked as expired and subsequently deleted.</p> <note> <p> The epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC. </p> </note> <p>DynamoDB deletes expired items on a best-effort basis to ensure availability of throughput for other data operations. </p> <important> <p>DynamoDB typically deletes expired items within two days of expiration. The exact duration within which an item gets deleted after expiration is specific to the nature of the workload. Items that have expired and not been deleted will still show up in reads, queries, and scans.</p> </important> <p>As items are deleted, they are removed from any local secondary index and global secondary index immediately in the same eventually consistent way as a standard delete operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html\">Time To Live</a> in the Amazon DynamoDB Developer Guide. </p>",
-      "endpointdiscovery":{
-      }
+      "endpointdiscovery":{}
     }
   },
   "shapes":{
@@ -1275,6 +1262,7 @@
       },
       "documentation":"<p>Represents the settings of a target tracking scaling policy that will be modified.</p>"
     },
+    "AvailabilityErrorMessage":{"type":"string"},
     "Backfilling":{"type":"boolean"},
     "BackupArn":{
       "type":"string",
@@ -1799,7 +1787,7 @@
           "documentation":"<p>Item which caused the <code>ConditionalCheckFailedException</code>.</p>"
         }
       },
-      "documentation":"<p>A condition specified in the operation could not be evaluated.</p>",
+      "documentation":"<p>A condition specified in the operation failed to be evaluated.</p>",
       "exception":true
     },
     "ConditionalOperator":{
@@ -1887,6 +1875,13 @@
         "DISABLE"
       ]
     },
+    "ContributorInsightsMode":{
+      "type":"string",
+      "enum":[
+        "ACCESSED_AND_THROTTLED_KEYS",
+        "THROTTLED_KEYS"
+      ]
+    },
     "ContributorInsightsRule":{
       "type":"string",
       "pattern":"[A-Za-z0-9][A-Za-z0-9\\-\\_\\.]{0,126}[A-Za-z0-9]"
@@ -1923,6 +1918,10 @@
         "ContributorInsightsStatus":{
           "shape":"ContributorInsightsStatus",
           "documentation":"<p>Describes the current status for contributor insights for the given table and index, if applicable.</p>"
+        },
+        "ContributorInsightsMode":{
+          "shape":"ContributorInsightsMode",
+          "documentation":"<p>Indicates the current mode of CloudWatch Contributor Insights, specifying whether it tracks all access and throttled events or throttled events only for the DynamoDB table or index.</p>"
         }
       },
       "documentation":"<p>Represents a Contributor Insights summary entry.</p>"
@@ -1936,7 +1935,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "BackupName":{
           "shape":"BackupName",
@@ -1979,7 +1979,7 @@
         },
         "OnDemandThroughput":{
           "shape":"OnDemandThroughput",
-          "documentation":"<p>The maximum number of read and write units for the global secondary index being created. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>"
+          "documentation":"<p>The maximum number of read and write units for the global secondary index being created. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both. You must use either <code>OnDemand Throughput</code> or <code>ProvisionedThroughput</code> based on your table's capacity mode.</p>"
         },
         "WarmThroughput":{
           "shape":"WarmThroughput",
@@ -1997,7 +1997,8 @@
       "members":{
         "GlobalTableName":{
           "shape":"TableName",
-          "documentation":"<p>The global table name.</p>"
+          "documentation":"<p>The global table name.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "ReplicationGroup":{
           "shape":"ReplicaList",
@@ -2014,6 +2015,17 @@
         }
       }
     },
+    "CreateGlobalTableWitnessGroupMemberAction":{
+      "type":"structure",
+      "required":["RegionName"],
+      "members":{
+        "RegionName":{
+          "shape":"RegionName",
+          "documentation":"<p>The Amazon Web Services Region name to be added as a witness Region for the MRSC global table. The witness must be in a different Region than the replicas and within the same Region set:</p> <ul> <li> <p>US Region set: US East (N. Virginia), US East (Ohio), US West (Oregon)</p> </li> <li> <p>EU Region set: Europe (Ireland), Europe (London), Europe (Paris), Europe (Frankfurt)</p> </li> <li> <p>AP Region set: Asia Pacific (Tokyo), Asia Pacific (Seoul), Asia Pacific (Osaka)</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Specifies the action to add a new witness Region to a MRSC global table. A MRSC global table can be configured with either three replicas, or with two replicas and one witness.</p>"
+    },
     "CreateReplicaAction":{
       "type":"structure",
       "required":["RegionName"],
@@ -2070,7 +2082,8 @@
         },
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to create. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to create. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "KeySchema":{
           "shape":"KeySchema",
@@ -2078,15 +2091,15 @@
         },
         "LocalSecondaryIndexes":{
           "shape":"LocalSecondaryIndexList",
-          "documentation":"<p>One or more local secondary indexes (the maximum is 5) to be created on the table. Each index is scoped to a given partition key value. There is a 10 GB size limit per partition key value; otherwise, the size of a local secondary index is unconstrained.</p> <p>Each local secondary index in the array includes the following:</p> <ul> <li> <p> <code>IndexName</code> - The name of the local secondary index. Must be unique only for this table.</p> <p/> </li> <li> <p> <code>KeySchema</code> - Specifies the key schema for the local secondary index. The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>One or more local secondary indexes (the maximum is 5) to be created on the table. Each index is scoped to a given partition key value. There is a 10 GB size limit per partition key value; otherwise, the size of a local secondary index is unconstrained.</p> <p>Each local secondary index in the array includes the following:</p> <ul> <li> <p> <code>IndexName</code> - The name of the local secondary index. Must be unique only for this table.</p> <p/> </li> <li> <p> <code>KeySchema</code> - Specifies the key schema for the local secondary index. The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p> </li> </ul> </li> </ul>"
         },
         "GlobalSecondaryIndexes":{
           "shape":"GlobalSecondaryIndexList",
-          "documentation":"<p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p> <ul> <li> <p> <code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p> <p/> </li> <li> <p> <code>KeySchema</code> - Specifies the key schema for the global secondary index.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.</p> </li> </ul> </li> <li> <p> <code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p> </li> </ul>"
+          "documentation":"<p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p> <ul> <li> <p> <code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p> <p/> </li> <li> <p> <code>KeySchema</code> - Specifies the key schema for the global secondary index.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p> </li> </ul> </li> <li> <p> <code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p> </li> </ul>"
         },
         "BillingMode":{
           "shape":"BillingMode",
-          "documentation":"<p>Controls how you are charged for read and write throughput and how you manage capacity. This setting can be changed later.</p> <ul> <li> <p> <code>PROVISIONED</code> - We recommend using <code>PROVISIONED</code> for predictable workloads. <code>PROVISIONED</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html\">Provisioned capacity mode</a>.</p> </li> <li> <p> <code>PAY_PER_REQUEST</code> - We recommend using <code>PAY_PER_REQUEST</code> for unpredictable workloads. <code>PAY_PER_REQUEST</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode.html\">On-demand capacity mode</a>. </p> </li> </ul>"
+          "documentation":"<p>Controls how you are charged for read and write throughput and how you manage capacity. This setting can be changed later.</p> <ul> <li> <p> <code>PAY_PER_REQUEST</code> - We recommend using <code>PAY_PER_REQUEST</code> for most DynamoDB workloads. <code>PAY_PER_REQUEST</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode.html\">On-demand capacity mode</a>. </p> </li> <li> <p> <code>PROVISIONED</code> - We recommend using <code>PROVISIONED</code> for steady workloads with predictable growth where capacity requirements can be reliably forecasted. <code>PROVISIONED</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html\">Provisioned capacity mode</a>.</p> </li> </ul>"
         },
         "ProvisionedThroughput":{
           "shape":"ProvisionedThroughput",
@@ -2210,7 +2223,8 @@
       "members":{
         "BackupArn":{
           "shape":"BackupArn",
-          "documentation":"<p>The ARN associated with the backup.</p>"
+          "documentation":"<p>The ARN associated with the backup.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2234,6 +2248,17 @@
       },
       "documentation":"<p>Represents a global secondary index to be deleted from an existing table.</p>"
     },
+    "DeleteGlobalTableWitnessGroupMemberAction":{
+      "type":"structure",
+      "required":["RegionName"],
+      "members":{
+        "RegionName":{
+          "shape":"RegionName",
+          "documentation":"<p>The witness Region name to be removed from the MRSC global table.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the action to remove a witness Region from a MRSC global table. You cannot delete a single witness from a MRSC global table - you must delete both a replica and the witness together. The deletion of both a witness and replica converts the remaining replica to a single-Region DynamoDB table. </p>"
+    },
     "DeleteItemInput":{
       "type":"structure",
       "required":[
@@ -2243,7 +2268,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table from which to delete the item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table from which to delete the item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Key":{
           "shape":"Key",
@@ -2342,7 +2368,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource from which the policy will be removed. The resources you can specify include tables and streams. If you remove the policy of a table, it will also remove the permissions for the table's indexes defined in that policy document. This is because index permissions are defined in the table's policy.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource from which the policy will be removed. The resources you can specify include tables and streams. If you remove the policy of a table, it will also remove the permissions for the table's indexes defined in that policy document. This is because index permissions are defined in the table's policy.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "ExpectedRevisionId":{
           "shape":"PolicyRevisionId",
@@ -2365,7 +2392,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to delete. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to delete. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       },
       "documentation":"<p>Represents the input of a <code>DeleteTable</code> operation.</p>"
@@ -2387,7 +2415,8 @@
       "members":{
         "BackupArn":{
           "shape":"BackupArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) associated with the backup.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the backup.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2406,7 +2435,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>Name of the table for which the customer wants to check the continuous backups and point in time recovery settings.</p> <p>You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>Name of the table for which the customer wants to check the continuous backups and point in time recovery settings.</p> <p>You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2425,7 +2455,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to describe. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to describe. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "IndexName":{
           "shape":"IndexName",
@@ -2459,13 +2490,16 @@
         "FailureException":{
           "shape":"FailureException",
           "documentation":"<p>Returns information about the last failure that was encountered.</p> <p>The most common exceptions for a FAILED status are:</p> <ul> <li> <p>LimitExceededException - Per-account Amazon CloudWatch Contributor Insights rule limit reached. Please disable Contributor Insights for other tables/indexes OR disable Contributor Insights rules before retrying.</p> </li> <li> <p>AccessDeniedException - Amazon CloudWatch Contributor Insights rules cannot be modified due to insufficient permissions.</p> </li> <li> <p>AccessDeniedException - Failed to create service-linked role for Contributor Insights due to insufficient permissions.</p> </li> <li> <p>InternalServerError - Failed to create Amazon CloudWatch Contributor Insights rules. Please retry request.</p> </li> </ul>"
+        },
+        "ContributorInsightsMode":{
+          "shape":"ContributorInsightsMode",
+          "documentation":"<p>The mode of CloudWatch Contributor Insights for DynamoDB that determines which events are emitted. Can be set to track all access and throttled events or throttled events only.</p>"
         }
       }
     },
     "DescribeEndpointsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEndpointsResponse":{
       "type":"structure",
@@ -2483,7 +2517,8 @@
       "members":{
         "ExportArn":{
           "shape":"ExportArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) associated with the export.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the export.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2502,7 +2537,8 @@
       "members":{
         "GlobalTableName":{
           "shape":"TableName",
-          "documentation":"<p>The name of the global table.</p>"
+          "documentation":"<p>The name of the global table.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2521,7 +2557,8 @@
       "members":{
         "GlobalTableName":{
           "shape":"TableName",
-          "documentation":"<p>The name of the global table to describe.</p>"
+          "documentation":"<p>The name of the global table to describe.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2544,7 +2581,8 @@
       "members":{
         "ImportArn":{
           "shape":"ImportArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) associated with the table you're importing to. </p>"
+          "documentation":"<p> The Amazon Resource Name (ARN) associated with the table you're importing to. </p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2564,7 +2602,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table being described. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table being described. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2583,8 +2622,7 @@
     },
     "DescribeLimitsInput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the input of a <code>DescribeLimits</code> operation. Has no content.</p>"
     },
     "DescribeLimitsOutput":{
@@ -2615,7 +2653,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to describe. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to describe. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       },
       "documentation":"<p>Represents the input of a <code>DescribeTable</code> operation.</p>"
@@ -2636,7 +2675,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2655,7 +2695,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to be described. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to be described. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -2997,7 +3038,8 @@
       "members":{
         "TableArn":{
           "shape":"TableArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) associated with the table to export.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the table to export.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "ExportTime":{
           "shape":"ExportTime",
@@ -3135,7 +3177,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table containing the requested item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table containing the requested item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Key":{
           "shape":"Key",
@@ -3181,7 +3224,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource to which the policy is attached. The resources you can specify include tables and streams.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource to which the policy is attached. The resources you can specify include tables and streams.</p>",
+          "contextParam":{"name":"ResourceArn"}
         }
       }
     },
@@ -3220,11 +3264,11 @@
         },
         "ProvisionedThroughput":{
           "shape":"ProvisionedThroughput",
-          "documentation":"<p>Represents the provisioned throughput settings for the specified global secondary index.</p> <p>For current minimum and maximum provisioned throughput values, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html\">Service, Account, and Table Quotas</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>"
+          "documentation":"<p>Represents the provisioned throughput settings for the specified global secondary index. You must use either <code>OnDemandThroughput</code> or <code>ProvisionedThroughput</code> based on your table's capacity mode.</p> <p>For current minimum and maximum provisioned throughput values, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html\">Service, Account, and Table Quotas</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>"
         },
         "OnDemandThroughput":{
           "shape":"OnDemandThroughput",
-          "documentation":"<p>The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>"
+          "documentation":"<p>The maximum number of read and write units for the specified global secondary index. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both. You must use either <code>OnDemandThroughput</code> or <code>ProvisionedThroughput</code> based on your table's capacity mode.</p>"
         },
         "WarmThroughput":{
           "shape":"WarmThroughput",
@@ -3469,6 +3513,44 @@
         "UPDATING"
       ]
     },
+    "GlobalTableWitnessDescription":{
+      "type":"structure",
+      "members":{
+        "RegionName":{
+          "shape":"RegionName",
+          "documentation":"<p>The name of the Amazon Web Services Region that serves as a witness for the MRSC global table.</p>"
+        },
+        "WitnessStatus":{
+          "shape":"WitnessStatus",
+          "documentation":"<p>The current status of the witness Region in the MRSC global table.</p>"
+        }
+      },
+      "documentation":"<p>Represents the properties of a witness Region in a MRSC global table. </p>"
+    },
+    "GlobalTableWitnessDescriptionList":{
+      "type":"list",
+      "member":{"shape":"GlobalTableWitnessDescription"}
+    },
+    "GlobalTableWitnessGroupUpdate":{
+      "type":"structure",
+      "members":{
+        "Create":{
+          "shape":"CreateGlobalTableWitnessGroupMemberAction",
+          "documentation":"<p>Specifies a witness Region to be added to a new MRSC global table. The witness must be added when creating the MRSC global table.</p>"
+        },
+        "Delete":{
+          "shape":"DeleteGlobalTableWitnessGroupMemberAction",
+          "documentation":"<p>Specifies a witness Region to be removed from an existing global table. Must be done in conjunction with removing a replica. The deletion of both a witness and replica converts the remaining replica to a single-Region DynamoDB table.</p>"
+        }
+      },
+      "documentation":"<p>Represents one of the following:</p> <ul> <li> <p>A new witness to be added to a new global table.</p> </li> <li> <p>An existing witness to be removed from an existing global table.</p> </li> </ul> <p>You can configure one witness per MRSC global table.</p>"
+    },
+    "GlobalTableWitnessGroupUpdateList":{
+      "type":"list",
+      "member":{"shape":"GlobalTableWitnessGroupUpdate"},
+      "max":1,
+      "min":1
+    },
     "IdempotentParameterMismatchException":{
       "type":"structure",
       "members":{
@@ -3971,7 +4053,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the DynamoDB table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the DynamoDB table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "StreamArn":{
           "shape":"StreamArn",
@@ -4025,7 +4108,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>Lists the backups from the table specified in <code>TableName</code>. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>Lists the backups from the table specified in <code>TableName</code>. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Limit":{
           "shape":"BackupsInputLimit",
@@ -4067,7 +4151,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "NextToken":{
           "shape":"NextTokenString",
@@ -4101,7 +4186,8 @@
       "members":{
         "TableArn":{
           "shape":"TableArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) associated with the exported table.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the exported table.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "MaxResults":{
           "shape":"ListExportsMaxLimit",
@@ -4166,7 +4252,8 @@
       "members":{
         "TableArn":{
           "shape":"TableArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) associated with the table that was imported to. </p>"
+          "documentation":"<p> The Amazon Resource Name (ARN) associated with the table that was imported to. </p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "PageSize":{
           "shape":"ListImportsMaxLimit",
@@ -4235,7 +4322,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>The Amazon DynamoDB resource with tags to be listed. This value is an Amazon Resource Name (ARN).</p>"
+          "documentation":"<p>The Amazon DynamoDB resource with tags to be listed. This value is an Amazon Resource Name (ARN).</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "NextToken":{
           "shape":"NextTokenString",
@@ -4453,7 +4541,7 @@
         },
         "RecoveryPeriodInDays":{
           "shape":"RecoveryPeriodInDays",
-          "documentation":"<p>The number of preceding days for which continuous backups are taken and maintained. Your table data is only recoverable to any point-in-time from within the configured recovery period. This parameter is optional. If no value is provided, the value will default to 35.</p>"
+          "documentation":"<p>The number of preceding days for which continuous backups are taken and maintained. Your table data is only recoverable to any point-in-time from within the configured recovery period. This parameter is optional.</p>"
         },
         "EarliestRestorableDateTime":{
           "shape":"Date",
@@ -4535,7 +4623,7 @@
         },
         "NonKeyAttributes":{
           "shape":"NonKeyAttributeNameList",
-          "documentation":"<p>Represents the non-key attribute names which will be projected into the index.</p> <p>For local secondary indexes, the total count of <code>NonKeyAttributes</code> summed across all of the local secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.</p>"
+          "documentation":"<p>Represents the non-key attribute names which will be projected into the index.</p> <p>For global and local secondary indexes, the total count of <code>NonKeyAttributes</code> summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p>"
         }
       },
       "documentation":"<p>Represents attributes that are copied (projected) from the table into an index. These are in addition to the primary key attributes and index key attributes, which are automatically projected.</p>"
@@ -4565,7 +4653,7 @@
           "documentation":"<p>The maximum number of writes consumed per second before DynamoDB returns a <code>ThrottlingException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html\">Specifying Read and Write Requirements</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p> <p>If read/write capacity mode is <code>PAY_PER_REQUEST</code> the value is set to 0.</p>"
         }
       },
-      "documentation":"<p>Represents the provisioned throughput settings for a specified table or index. The settings can be modified using the <code>UpdateTable</code> operation.</p> <p>For current minimum and maximum provisioned throughput values, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html\">Service, Account, and Table Quotas</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>"
+      "documentation":"<p>Represents the provisioned throughput settings for the specified global secondary index. You must use <code>ProvisionedThroughput</code> or <code>OnDemandThroughput</code> based on your table’s capacity mode.</p> <p>For current minimum and maximum provisioned throughput values, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html\">Service, Account, and Table Quotas</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>"
     },
     "ProvisionedThroughputDescription":{
       "type":"structure",
@@ -4599,9 +4687,13 @@
         "message":{
           "shape":"ErrorMessage",
           "documentation":"<p>You exceeded your maximum allowed provisioned throughput.</p>"
+        },
+        "ThrottlingReasons":{
+          "shape":"ThrottlingReasonList",
+          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> that provide detailed diagnostic information about why the request was throttled. </p>"
         }
       },
-      "documentation":"<p>Your request rate is too high. The Amazon Web Services SDKs for DynamoDB automatically retry requests that receive this exception. Your request is eventually successful, unless your retry queue is too large to finish. Reduce the frequency of requests and use exponential backoff. For more information, go to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.RetryAndBackoff\">Error Retries and Exponential Backoff</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
+      "documentation":"<p>The request was denied due to request throttling. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> field in the returned exception. The Amazon Web Services SDKs for DynamoDB automatically retry requests that receive this exception. Your request is eventually successful, unless your retry queue is too large to finish. Reduce the frequency of requests and use exponential backoff. For more information, go to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.RetryAndBackoff\">Error Retries and Exponential Backoff</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>",
       "exception":true
     },
     "ProvisionedThroughputOverride":{
@@ -4657,7 +4749,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to contain the item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to contain the item. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Item":{
           "shape":"PutItemInputAttributeMap",
@@ -4742,7 +4835,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource to which the policy will be attached. The resources you can specify include tables and streams.</p> <p>You can control index permissions using the base table's policy. To specify the same permission level for your table and its indexes, you can provide both the table and index Amazon Resource Name (ARN)s in the <code>Resource</code> field of a given <code>Statement</code> in your policy document. Alternatively, to specify different permissions for your table, indexes, or both, you can define multiple <code>Statement</code> fields in your policy document.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB resource to which the policy will be attached. The resources you can specify include tables and streams.</p> <p>You can control index permissions using the base table's policy. To specify the same permission level for your table and its indexes, you can provide both the table and index Amazon Resource Name (ARN)s in the <code>Resource</code> field of a given <code>Statement</code> in your policy document. Alternatively, to specify different permissions for your table, indexes, or both, you can define multiple <code>Statement</code> fields in your policy document.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Policy":{
           "shape":"ResourcePolicy",
@@ -4773,7 +4867,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table containing the requested items. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table containing the requested items. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "IndexName":{
           "shape":"IndexName",
@@ -4865,6 +4960,7 @@
       },
       "documentation":"<p>Represents the output of a <code>Query</code> operation.</p>"
     },
+    "Reason":{"type":"string"},
     "RecoveryPeriodInDays":{
       "type":"integer",
       "max":35,
@@ -5228,7 +5324,10 @@
         "DELETING",
         "ACTIVE",
         "REGION_DISABLED",
-        "INACCESSIBLE_ENCRYPTION_CREDENTIALS"
+        "INACCESSIBLE_ENCRYPTION_CREDENTIALS",
+        "ARCHIVING",
+        "ARCHIVED",
+        "REPLICATION_NOT_AUTHORIZED"
       ]
     },
     "ReplicaStatusDescription":{"type":"string"},
@@ -5257,7 +5356,8 @@
         "message":{"shape":"ErrorMessage"}
       },
       "documentation":"<p>The request was rejected because one or more items in the request are being modified by a request in another Region. </p>",
-      "exception":true
+      "exception":true,
+      "retryable":{"throttling":false}
     },
     "ReplicationGroupUpdate":{
       "type":"structure",
@@ -5285,11 +5385,16 @@
     "RequestLimitExceeded":{
       "type":"structure",
       "members":{
-        "message":{"shape":"ErrorMessage"}
+        "message":{"shape":"ErrorMessage"},
+        "ThrottlingReasons":{
+          "shape":"ThrottlingReasonList",
+          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> that provide detailed diagnostic information about why the request was throttled. </p>"
+        }
       },
-      "documentation":"<p>Throughput exceeds the current throughput quota for your account. Please contact <a href=\"https://aws.amazon.com/support\">Amazon Web Services Support</a> to request a quota increase.</p>",
+      "documentation":"<p>Throughput exceeds the current throughput quota for your account. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> field in the returned exception. Contact <a href=\"https://aws.amazon.com/support\">Amazon Web ServicesSupport</a> to request a quota increase.</p>",
       "exception":true
     },
+    "Resource":{"type":"string"},
     "ResourceArnString":{
       "type":"string",
       "max":1283,
@@ -5354,7 +5459,8 @@
       "members":{
         "TargetTableName":{
           "shape":"TableName",
-          "documentation":"<p>The name of the new table to which the backup must be restored.</p>"
+          "documentation":"<p>The name of the new table to which the backup must be restored.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "BackupArn":{
           "shape":"BackupArn",
@@ -5406,7 +5512,8 @@
         },
         "TargetTableName":{
           "shape":"TableName",
-          "documentation":"<p>The name of the new table to which it must be restored to.</p>"
+          "documentation":"<p>The name of the new table to which it must be restored to.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "UseLatestRestorableTime":{
           "shape":"BooleanObject",
@@ -5597,7 +5704,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table containing the requested items or if you provide <code>IndexName</code>, the name of the table to which that index belongs.</p> <p>You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table containing the requested items or if you provide <code>IndexName</code>, the name of the table to which that index belongs.</p> <p>You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "IndexName":{
           "shape":"IndexName",
@@ -5957,11 +6065,11 @@
         },
         "LocalSecondaryIndexes":{
           "shape":"LocalSecondaryIndexDescriptionList",
-          "documentation":"<p>Represents one or more local secondary indexes on the table. Each index is scoped to a given partition key value. Tables with one or more local secondary indexes are subject to an item collection size limit, where the amount of data within a given item collection cannot exceed 10 GB. Each element is composed of:</p> <ul> <li> <p> <code>IndexName</code> - The name of the local secondary index.</p> </li> <li> <p> <code>KeySchema</code> - Specifies the complete index key schema. The attribute names in the key schema must be between 1 and 255 characters (inclusive). The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.</p> </li> </ul> </li> <li> <p> <code>IndexSizeBytes</code> - Represents the total size of the index, in bytes. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value.</p> </li> <li> <p> <code>ItemCount</code> - Represents the number of items in the index. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value.</p> </li> </ul> <p>If the table is in the <code>DELETING</code> state, no information about indexes will be returned.</p>"
+          "documentation":"<p>Represents one or more local secondary indexes on the table. Each index is scoped to a given partition key value. Tables with one or more local secondary indexes are subject to an item collection size limit, where the amount of data within a given item collection cannot exceed 10 GB. Each element is composed of:</p> <ul> <li> <p> <code>IndexName</code> - The name of the local secondary index.</p> </li> <li> <p> <code>KeySchema</code> - Specifies the complete index key schema. The attribute names in the key schema must be between 1 and 255 characters (inclusive). The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p> </li> </ul> </li> <li> <p> <code>IndexSizeBytes</code> - Represents the total size of the index, in bytes. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value.</p> </li> <li> <p> <code>ItemCount</code> - Represents the number of items in the index. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value.</p> </li> </ul> <p>If the table is in the <code>DELETING</code> state, no information about indexes will be returned.</p>"
         },
         "GlobalSecondaryIndexes":{
           "shape":"GlobalSecondaryIndexDescriptionList",
-          "documentation":"<p>The global secondary indexes, if any, on the table. Each index is scoped to a given partition key value. Each element is composed of:</p> <ul> <li> <p> <code>Backfilling</code> - If true, then the index is currently in the backfilling phase. Backfilling occurs only when a new global secondary index is added to the table. It is the process by which DynamoDB populates the new index with data from the table. (This attribute does not appear for indexes that were created during a <code>CreateTable</code> operation.) </p> <p> You can delete an index that is being created during the <code>Backfilling</code> phase when <code>IndexStatus</code> is set to CREATING and <code>Backfilling</code> is true. You can't delete the index that is being created when <code>IndexStatus</code> is set to CREATING and <code>Backfilling</code> is false. (This attribute does not appear for indexes that were created during a <code>CreateTable</code> operation.)</p> </li> <li> <p> <code>IndexName</code> - The name of the global secondary index.</p> </li> <li> <p> <code>IndexSizeBytes</code> - The total size of the global secondary index, in bytes. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value. </p> </li> <li> <p> <code>IndexStatus</code> - The current status of the global secondary index:</p> <ul> <li> <p> <code>CREATING</code> - The index is being created.</p> </li> <li> <p> <code>UPDATING</code> - The index is being updated.</p> </li> <li> <p> <code>DELETING</code> - The index is being deleted.</p> </li> <li> <p> <code>ACTIVE</code> - The index is ready for use.</p> </li> </ul> </li> <li> <p> <code>ItemCount</code> - The number of items in the global secondary index. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value. </p> </li> <li> <p> <code>KeySchema</code> - Specifies the complete index key schema. The attribute names in the key schema must be between 1 and 255 characters (inclusive). The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - In addition to the attributes described in <code>KEYS_ONLY</code>, the secondary index will include other non-key attributes that you specify.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total.</p> </li> </ul> </li> <li> <p> <code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units, along with data about increases and decreases. </p> </li> </ul> <p>If the table is in the <code>DELETING</code> state, no information about indexes will be returned.</p>"
+          "documentation":"<p>The global secondary indexes, if any, on the table. Each index is scoped to a given partition key value. Each element is composed of:</p> <ul> <li> <p> <code>Backfilling</code> - If true, then the index is currently in the backfilling phase. Backfilling occurs only when a new global secondary index is added to the table. It is the process by which DynamoDB populates the new index with data from the table. (This attribute does not appear for indexes that were created during a <code>CreateTable</code> operation.) </p> <p> You can delete an index that is being created during the <code>Backfilling</code> phase when <code>IndexStatus</code> is set to CREATING and <code>Backfilling</code> is true. You can't delete the index that is being created when <code>IndexStatus</code> is set to CREATING and <code>Backfilling</code> is false. (This attribute does not appear for indexes that were created during a <code>CreateTable</code> operation.)</p> </li> <li> <p> <code>IndexName</code> - The name of the global secondary index.</p> </li> <li> <p> <code>IndexSizeBytes</code> - The total size of the global secondary index, in bytes. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value. </p> </li> <li> <p> <code>IndexStatus</code> - The current status of the global secondary index:</p> <ul> <li> <p> <code>CREATING</code> - The index is being created.</p> </li> <li> <p> <code>UPDATING</code> - The index is being updated.</p> </li> <li> <p> <code>DELETING</code> - The index is being deleted.</p> </li> <li> <p> <code>ACTIVE</code> - The index is ready for use.</p> </li> </ul> </li> <li> <p> <code>ItemCount</code> - The number of items in the global secondary index. DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value. </p> </li> <li> <p> <code>KeySchema</code> - Specifies the complete index key schema. The attribute names in the key schema must be between 1 and 255 characters (inclusive). The key schema must begin with the same partition key as the table.</p> </li> <li> <p> <code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p> <ul> <li> <p> <code>ProjectionType</code> - One of the following:</p> <ul> <li> <p> <code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p> </li> <li> <p> <code>INCLUDE</code> - In addition to the attributes described in <code>KEYS_ONLY</code>, the secondary index will include other non-key attributes that you specify.</p> </li> <li> <p> <code>ALL</code> - All of the table attributes are projected into the index.</p> </li> </ul> </li> <li> <p> <code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p> </li> </ul> </li> <li> <p> <code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units, along with data about increases and decreases. </p> </li> </ul> <p>If the table is in the <code>DELETING</code> state, no information about indexes will be returned.</p>"
         },
         "StreamSpecification":{
           "shape":"StreamSpecification",
@@ -5983,6 +6091,10 @@
           "shape":"ReplicaDescriptionList",
           "documentation":"<p>Represents replicas of the table.</p>"
         },
+        "GlobalTableWitnesses":{
+          "shape":"GlobalTableWitnessDescriptionList",
+          "documentation":"<p>The witness Region and its current status in the MRSC global table. Only one witness Region can be configured per MRSC global table.</p>"
+        },
         "RestoreSummary":{
           "shape":"RestoreSummary",
           "documentation":"<p>Contains details for the restore.</p>"
@@ -6013,7 +6125,7 @@
         },
         "MultiRegionConsistency":{
           "shape":"MultiRegionConsistency",
-          "documentation":"<p>Indicates one of the following consistency modes for a global table:</p> <ul> <li> <p> <code>EVENTUAL</code>: Indicates that the global table is configured for multi-Region eventual consistency.</p> </li> <li> <p> <code>STRONG</code>: Indicates that the global table is configured for multi-Region strong consistency (preview).</p> <note> <p>Multi-Region strong consistency (MRSC) is a new DynamoDB global tables capability currently available in preview mode. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PreviewFeatures.html#multi-region-strong-consistency-gt\">Global tables multi-Region strong consistency</a>.</p> </note> </li> </ul> <p>If you don't specify this field, the global table consistency mode defaults to <code>EVENTUAL</code>.</p>"
+          "documentation":"<p>Indicates one of the following consistency modes for a global table:</p> <ul> <li> <p> <code>EVENTUAL</code>: Indicates that the global table is configured for multi-Region eventual consistency (MREC).</p> </li> <li> <p> <code>STRONG</code>: Indicates that the global table is configured for multi-Region strong consistency (MRSC).</p> </li> </ul> <p>If you don't specify this field, the global table consistency mode defaults to <code>EVENTUAL</code>. For more information about global tables consistency modes, see <a href=\"https://docs.aws.amazon.com/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.consistency-modes\"> Consistency modes</a> in DynamoDB developer guide. </p>"
         }
       },
       "documentation":"<p>Represents the properties of a table.</p>"
@@ -6057,7 +6169,8 @@
         "ACTIVE",
         "INACCESSIBLE_ENCRYPTION_CREDENTIALS",
         "ARCHIVING",
-        "ARCHIVED"
+        "ARCHIVED",
+        "REPLICATION_NOT_AUTHORIZED"
       ]
     },
     "TableWarmThroughputDescription":{
@@ -6073,10 +6186,10 @@
         },
         "Status":{
           "shape":"TableStatus",
-          "documentation":"<p>Represents warm throughput value of the base table..</p>"
+          "documentation":"<p>Represents warm throughput value of the base table.</p>"
         }
       },
-      "documentation":"<p>Represents the warm throughput value (in read units per second and write units per second) of the base table.</p>"
+      "documentation":"<p>Represents the warm throughput value (in read units per second and write units per second) of the table. Warm throughput is applicable for DynamoDB Standard-IA tables and specifies the minimum provisioned capacity maintained for immediate data access.</p>"
     },
     "Tag":{
       "type":"structure",
@@ -6118,7 +6231,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>Identifies the Amazon DynamoDB resource to which tags should be added. This value is an Amazon Resource Name (ARN).</p>"
+          "documentation":"<p>Identifies the Amazon DynamoDB resource to which tags should be added. This value is an Amazon Resource Name (ARN).</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Tags":{
           "shape":"TagList",
@@ -6131,6 +6245,37 @@
       "max":256,
       "min":0
     },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"AvailabilityErrorMessage"},
+        "throttlingReasons":{
+          "shape":"ThrottlingReasonList",
+          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> that provide detailed diagnostic information about why the request was throttled. </p>"
+        }
+      },
+      "documentation":"<p>The request was denied due to request throttling. For detailed information about why the request was throttled and the ARN of the impacted resource, find the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ThrottlingReason.html\">ThrottlingReason</a> field in the returned exception.</p>",
+      "exception":true,
+      "synthetic":true
+    },
+    "ThrottlingReason":{
+      "type":"structure",
+      "members":{
+        "reason":{
+          "shape":"Reason",
+          "documentation":"<p>The reason for throttling. The throttling reason follows a specific format: <code>ResourceType+OperationType+LimitType</code>:</p> <ul> <li> <p>Resource Type (What is being throttled): Table or Index</p> </li> <li> <p>Operation Type (What kind of operation): Read or Write</p> </li> <li> <p>Limit Type (Why the throttling occurred):</p> <ul> <li> <p> <code>ProvisionedThroughputExceeded</code>: The request rate is exceeding the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html\">provisioned throughput capacity</a> (read or write capacity units) configured for a table or a global secondary index (GSI) in provisioned capacity mode.</p> </li> <li> <p> <code>AccountLimitExceeded</code>: The request rate has caused a table or global secondary index (GSI) in on-demand mode to exceed the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ServiceQuotas.html#default-limits-throughput\">per-table account-level service quotas</a> for read/write throughput in the current Amazon Web Services Region. </p> </li> <li> <p> <code>KeyRangeThroughputExceeded</code>: The request rate directed at a specific partition key value has exceeded the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-partition-key-design.html\">internal partition-level throughput limits</a>, indicating uneven access patterns across the table's or GSI's key space.</p> </li> <li> <p> <code>MaxOnDemandThroughputExceeded</code>: The request rate has exceeded the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode-max-throughput.html\">configured maximum throughput limits</a> set for a table or index in on-demand capacity mode.</p> </li> </ul> </li> </ul> <p>Examples of complete throttling reasons:</p> <ul> <li> <p>TableReadProvisionedThroughputExceeded</p> </li> <li> <p>IndexWriteAccountLimitExceeded</p> </li> </ul> <p>This helps identify exactly what resource is being throttled, what type of operation caused it, and why the throttling occurred.</p>"
+        },
+        "resource":{
+          "shape":"Resource",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB table or index that experienced the throttling event.</p>"
+        }
+      },
+      "documentation":"<p>Represents the specific reason why a DynamoDB request was throttled and the ARN of the impacted resource. This helps identify exactly what resource is being throttled, what type of operation caused it, and why the throttling occurred.</p>"
+    },
+    "ThrottlingReasonList":{
+      "type":"list",
+      "member":{"shape":"ThrottlingReason"}
+    },
     "TimeRangeLowerBound":{"type":"timestamp"},
     "TimeRangeUpperBound":{"type":"timestamp"},
     "TimeToLiveAttributeName":{
@@ -6322,7 +6467,8 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArnString",
-          "documentation":"<p>The DynamoDB resource that the tags will be removed from. This value is an Amazon Resource Name (ARN).</p>"
+          "documentation":"<p>The DynamoDB resource that the tags will be removed from. This value is an Amazon Resource Name (ARN).</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "TagKeys":{
           "shape":"TagKeyList",
@@ -6378,7 +6524,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "PointInTimeRecoverySpecification":{
           "shape":"PointInTimeRecoverySpecification",
@@ -6404,7 +6551,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "IndexName":{
           "shape":"IndexName",
@@ -6413,6 +6561,10 @@
         "ContributorInsightsAction":{
           "shape":"ContributorInsightsAction",
           "documentation":"<p>Represents the contributor insights action.</p>"
+        },
+        "ContributorInsightsMode":{
+          "shape":"ContributorInsightsMode",
+          "documentation":"<p>Specifies whether to track all access and throttled events or throttled events only for the DynamoDB table or index.</p>"
         }
       }
     },
@@ -6430,6 +6582,10 @@
         "ContributorInsightsStatus":{
           "shape":"ContributorInsightsStatus",
           "documentation":"<p>The status of contributor insights</p>"
+        },
+        "ContributorInsightsMode":{
+          "shape":"ContributorInsightsMode",
+          "documentation":"<p>The updated mode of CloudWatch Contributor Insights that determines whether to monitor all access and throttled events or to track throttled events exclusively.</p>"
         }
       }
     },
@@ -6466,7 +6622,8 @@
       "members":{
         "GlobalTableName":{
           "shape":"TableName",
-          "documentation":"<p>The global table name.</p>"
+          "documentation":"<p>The global table name.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "ReplicaUpdates":{
           "shape":"ReplicaUpdateList",
@@ -6489,7 +6646,8 @@
       "members":{
         "GlobalTableName":{
           "shape":"TableName",
-          "documentation":"<p>The name of the global table</p>"
+          "documentation":"<p>The name of the global table</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "GlobalTableBillingMode":{
           "shape":"BillingMode",
@@ -6535,7 +6693,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table containing the item to update. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table containing the item to update. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "Key":{
           "shape":"Key",
@@ -6622,7 +6781,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The table name for the Kinesis streaming destination input. You can also provide the ARN of the table in this parameter.</p>"
+          "documentation":"<p>The table name for the Kinesis streaming destination input. You can also provide the ARN of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "StreamArn":{
           "shape":"StreamArn",
@@ -6696,11 +6856,12 @@
         },
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to be updated. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to be updated. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "BillingMode":{
           "shape":"BillingMode",
-          "documentation":"<p>Controls how you are charged for read and write throughput and how you manage capacity. When switching from pay-per-request to provisioned capacity, initial provisioned capacity values must be set. The initial provisioned capacity values are estimated based on the consumed read and write capacity of your table and global secondary indexes over the past 30 minutes.</p> <ul> <li> <p> <code>PROVISIONED</code> - We recommend using <code>PROVISIONED</code> for predictable workloads. <code>PROVISIONED</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html\">Provisioned capacity mode</a>.</p> </li> <li> <p> <code>PAY_PER_REQUEST</code> - We recommend using <code>PAY_PER_REQUEST</code> for unpredictable workloads. <code>PAY_PER_REQUEST</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode.html\">On-demand capacity mode</a>. </p> </li> </ul>"
+          "documentation":"<p>Controls how you are charged for read and write throughput and how you manage capacity. When switching from pay-per-request to provisioned capacity, initial provisioned capacity values must be set. The initial provisioned capacity values are estimated based on the consumed read and write capacity of your table and global secondary indexes over the past 30 minutes.</p> <ul> <li> <p> <code>PAY_PER_REQUEST</code> - We recommend using <code>PAY_PER_REQUEST</code> for most DynamoDB workloads. <code>PAY_PER_REQUEST</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/on-demand-capacity-mode.html\">On-demand capacity mode</a>. </p> </li> <li> <p> <code>PROVISIONED</code> - We recommend using <code>PROVISIONED</code> for steady workloads with predictable growth where capacity requirements can be reliably forecasted. <code>PROVISIONED</code> sets the billing mode to <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/provisioned-capacity-mode.html\">Provisioned capacity mode</a>.</p> </li> </ul>"
         },
         "ProvisionedThroughput":{
           "shape":"ProvisionedThroughput",
@@ -6720,7 +6881,7 @@
         },
         "ReplicaUpdates":{
           "shape":"ReplicationGroupUpdateList",
-          "documentation":"<p>A list of replica update actions (create, delete, or update) for the table.</p> <note> <p>For global tables, this property only applies to global tables using Version 2019.11.21 (Current version). </p> </note>"
+          "documentation":"<p>A list of replica update actions (create, delete, or update) for the table.</p>"
         },
         "TableClass":{
           "shape":"TableClass",
@@ -6732,7 +6893,11 @@
         },
         "MultiRegionConsistency":{
           "shape":"MultiRegionConsistency",
-          "documentation":"<p>Specifies the consistency mode for a new global table. This parameter is only valid when you create a global table by specifying one or more <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ReplicationGroupUpdate.html#DDB-Type-ReplicationGroupUpdate-Create\">Create</a> actions in the <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html#DDB-UpdateTable-request-ReplicaUpdates\">ReplicaUpdates</a> action list.</p> <p>You can specify one of the following consistency modes:</p> <ul> <li> <p> <code>EVENTUAL</code>: Configures a new global table for multi-Region eventual consistency. This is the default consistency mode for global tables.</p> </li> <li> <p> <code>STRONG</code>: Configures a new global table for multi-Region strong consistency (preview).</p> <note> <p>Multi-Region strong consistency (MRSC) is a new DynamoDB global tables capability currently available in preview mode. For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PreviewFeatures.html#multi-region-strong-consistency-gt\">Global tables multi-Region strong consistency</a>.</p> </note> </li> </ul> <p>If you don't specify this parameter, the global table consistency mode defaults to <code>EVENTUAL</code>.</p>"
+          "documentation":"<p>Specifies the consistency mode for a new global table. This parameter is only valid when you create a global table by specifying one or more <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ReplicationGroupUpdate.html#DDB-Type-ReplicationGroupUpdate-Create\">Create</a> actions in the <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html#DDB-UpdateTable-request-ReplicaUpdates\">ReplicaUpdates</a> action list.</p> <p>You can specify one of the following consistency modes:</p> <ul> <li> <p> <code>EVENTUAL</code>: Configures a new global table for multi-Region eventual consistency (MREC). This is the default consistency mode for global tables.</p> </li> <li> <p> <code>STRONG</code>: Configures a new global table for multi-Region strong consistency (MRSC).</p> </li> </ul> <p>If you don't specify this field, the global table consistency mode defaults to <code>EVENTUAL</code>. For more information about global tables consistency modes, see <a href=\"https://docs.aws.amazon.com/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.consistency-modes\"> Consistency modes</a> in DynamoDB developer guide. </p>"
+        },
+        "GlobalTableWitnessUpdates":{
+          "shape":"GlobalTableWitnessGroupUpdateList",
+          "documentation":"<p>A list of witness updates for a MRSC global table. A witness provides a cost-effective alternative to a full replica in a MRSC global table by maintaining replicated change data written to global table replicas. You cannot perform read or write operations on a witness. For each witness, you can request one action:</p> <ul> <li> <p> <code>Create</code> - add a new witness to the global table.</p> </li> <li> <p> <code>Delete</code> - remove a witness from the global table.</p> </li> </ul> <p>You can create or delete only one witness per <code>UpdateTable</code> operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.consistency-modes\">Multi-Region strong consistency (MRSC)</a> in the Amazon DynamoDB Developer Guide</p>"
         },
         "OnDemandThroughput":{
           "shape":"OnDemandThroughput",
@@ -6765,7 +6930,8 @@
         },
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the global table to be updated. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the global table to be updated. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "ProvisionedWriteCapacityAutoScalingUpdate":{"shape":"AutoScalingSettingsUpdate"},
         "ReplicaUpdates":{
@@ -6792,7 +6958,8 @@
       "members":{
         "TableName":{
           "shape":"TableArn",
-          "documentation":"<p>The name of the table to be configured. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>"
+          "documentation":"<p>The name of the table to be configured. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>",
+          "contextParam":{"name":"ResourceArn"}
         },
         "TimeToLiveSpecification":{
           "shape":"TimeToLiveSpecification",
@@ -6824,6 +6991,14 @@
       },
       "documentation":"<p>Provides visibility into the number of read and write operations your table or secondary index can instantaneously support. The settings can be modified using the <code>UpdateTable</code> operation to meet the throughput requirements of an upcoming peak event.</p>"
     },
+    "WitnessStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "DELETING",
+        "ACTIVE"
+      ]
+    },
     "WriteRequest":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dynamodbstreams/2012-08-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,17 +118,31 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws"
+                                            ]
+                                        },
+                                        {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
                                                     "ref": "UseFIPS"
                                                 },
-                                                true
+                                                false
                                             ]
                                         },
                                         {
@@ -143,149 +155,270 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
-                                    "rules": [
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
                                         {
-                                            "conditions": [
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
                                                         {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
                                                         {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
                                                     ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
+                                                },
+                                                "aws-cn"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
                                                 {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
                                                         {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://streams.dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-cn"
                                             ]
                                         },
                                         {
-                                            "conditions": [],
-                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                            "type": "error"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
                                     "conditions": [
                                         {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
                                                     "ref": "UseFIPS"
                                                 },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
-                                    "rules": [
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
                                         {
-                                            "conditions": [
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
                                                         {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
                                                     ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
                                                 {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://streams-dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
                                                         {
-                                                            "conditions": [
-                                                                {
-                                                                    "fn": "stringEquals",
-                                                                    "argv": [
-                                                                        "aws-us-gov",
-                                                                        {
-                                                                            "fn": "getAttr",
-                                                                            "argv": [
-                                                                                {
-                                                                                    "ref": "PartitionResult"
-                                                                                },
-                                                                                "name"
-                                                                            ]
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ],
-                                                            "endpoint": {
-                                                                "url": "https://streams.dynamodb.{Region}.amazonaws.com",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
+                                                            "ref": "PartitionResult"
                                                         },
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://streams.dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
                                             ]
                                         },
                                         {
-                                            "conditions": [],
-                                            "error": "FIPS is enabled but this partition does not support FIPS",
-                                            "type": "error"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://streams.dynamodb.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
                                     "conditions": [
@@ -293,13 +426,21 @@
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
                                                     "ref": "UseDualStack"
                                                 },
                                                 true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -313,215 +454,192 @@
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
                                                                 "supportsDualStack"
                                                             ]
                                                         }
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://streams.dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ]
+                                                    "endpoint": {
+                                                        "url": "https://streams.dynamodb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
-                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "type": "tree",
-                                    "rules": [
+                                    "conditions": [
                                         {
-                                            "conditions": [
+                                            "fn": "booleanEquals",
+                                            "argv": [
                                                 {
-                                                    "fn": "stringEquals",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "Region"
-                                                        },
-                                                        "local"
-                                                    ]
-                                                }
-                                            ],
-                                            "endpoint": {
-                                                "url": "http://localhost:8000",
-                                                "properties": {
-                                                    "authSchemes": [
-                                                        {
-                                                            "name": "sigv4",
-                                                            "signingName": "dynamodb",
-                                                            "signingRegion": "us-east-1"
-                                                        }
-                                                    ]
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                true
+                                            ]
                                         },
                                         {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
                                             "conditions": [
                                                 {
-                                                    "fn": "stringEquals",
+                                                    "fn": "booleanEquals",
                                                     "argv": [
-                                                        "aws",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "name"
+                                                                "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.amazonaws.com",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
-                                        {
-                                            "conditions": [
+                                            "rules": [
                                                 {
-                                                    "fn": "stringEquals",
-                                                    "argv": [
-                                                        "aws-cn",
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "name"
-                                                            ]
-                                                        }
-                                                    ]
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://streams.dynamodb-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.amazonaws.com.cn",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "type": "tree"
                                         },
                                         {
-                                            "conditions": [
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
                                                 {
-                                                    "fn": "stringEquals",
-                                                    "argv": [
-                                                        "aws-us-gov",
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "name"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.amazonaws.com",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
                                         {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
                                             "conditions": [
                                                 {
-                                                    "fn": "stringEquals",
+                                                    "fn": "booleanEquals",
                                                     "argv": [
-                                                        "aws-iso",
+                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "name"
+                                                                "supportsDualStack"
                                                             ]
                                                         }
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.c2s.ic.gov",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
-                                        {
-                                            "conditions": [
+                                            "rules": [
                                                 {
-                                                    "fn": "stringEquals",
-                                                    "argv": [
-                                                        "aws-iso-b",
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "name"
-                                                            ]
-                                                        }
-                                                    ]
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://streams.dynamodb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.sc2s.sgov.gov",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://streams.dynamodb.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://streams.dynamodb.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/dynamodbstreams/2012-08-10/service-2.json 2.31.35-1/awscli/botocore/data/dynamodbstreams/2012-08-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/dynamodbstreams/2012-08-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/dynamodbstreams/2012-08-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"streams.dynamodb",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon DynamoDB Streams",
     "serviceId":"DynamoDB Streams",
     "signatureVersion":"v4",
     "signingName":"dynamodb",
     "targetPrefix":"DynamoDBStreams_20120810",
-    "uid":"streams-dynamodb-2012-08-10"
+    "uid":"streams-dynamodb-2012-08-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DescribeStream":{
@@ -152,6 +154,10 @@
         "ExclusiveStartShardId":{
           "shape":"ShardId",
           "documentation":"<p>The shard ID of the first item that this operation will evaluate. Use the value that was returned for <code>LastEvaluatedShardId</code> in the previous operation. </p>"
+        },
+        "ShardFilter":{
+          "shape":"ShardFilter",
+          "documentation":"<p>This optional field contains the filter definition for the <code>DescribeStream</code> API.</p>"
         }
       },
       "documentation":"<p>Represents the input of a <code>DescribeStream</code> operation.</p>"
@@ -470,6 +476,24 @@
       "type":"list",
       "member":{"shape":"Shard"}
     },
+    "ShardFilter":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"ShardFilterType",
+          "documentation":"<p>Contains the type of filter to be applied on the <code>DescribeStream</code> API. Currently, the only value this parameter accepts is <code>CHILD_SHARDS</code>.</p>"
+        },
+        "ShardId":{
+          "shape":"ShardId",
+          "documentation":"<p>Contains the <code>shardId</code> of the parent shard for which you are requesting child shards.</p> <p> <i>Sample request:</i> </p>"
+        }
+      },
+      "documentation":"<p>This optional field contains the filter definition for the <code>DescribeStream</code> API.</p>"
+    },
+    "ShardFilterType":{
+      "type":"string",
+      "enum":["CHILD_SHARDS"]
+    },
     "ShardId":{
       "type":"string",
       "max":65,
@@ -563,7 +587,7 @@
       "members":{
         "ApproximateCreationDateTime":{
           "shape":"Date",
-          "documentation":"<p>The approximate date and time when the stream record was created, in <a href=\"http://www.epochconverter.com/\">UNIX epoch time</a> format and rounded down to the closest second.</p>"
+          "documentation":"<p>The approximate date and time when the stream record was created, in <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601</a> format and rounded down to the closest second.</p>"
         },
         "Keys":{
           "shape":"AttributeMap",
diff -pruN 2.23.6-1/awscli/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ebs/2019-11-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/ebs/2019-11-02/service-2.json 2.31.35-1/awscli/botocore/data/ebs/2019-11-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/ebs/2019-11-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ebs/2019-11-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"ebs",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Amazon EBS",
     "serviceFullName":"Amazon Elastic Block Store",
     "serviceId":"EBS",
     "signatureVersion":"v4",
-    "uid":"ebs-2019-11-02"
+    "uid":"ebs-2019-11-02",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CompleteSnapshot":{
@@ -103,7 +105,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the <code>pending</code> state.</p> <p>Data written to a snapshot must be aligned with 512-KiB sectors.</p> <note> <p>You should always retry requests that receive server (<code>5xx</code>) error responses, and <code>ThrottlingException</code> and <code>RequestThrottledException</code> client error responses. For more information see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html\">Error retries</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> </note>",
-      "authtype":"v4-unsigned-body"
+      "authtype":"v4-unsigned-body",
+      "unsignedPayload":true
     },
     "StartSnapshot":{
       "name":"StartSnapshot",
diff -pruN 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/paginators-1.json 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -883,6 +883,108 @@
       "limit_key": "MaxResults",
       "output_token": "NextToken",
       "result_key": "CapacityBlockExtensionOfferings"
+    },
+    "DescribeRouteServerEndpoints": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "RouteServerEndpoints"
+    },
+    "DescribeRouteServerPeers": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "RouteServerPeers"
+    },
+    "DescribeRouteServers": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "RouteServers"
+    },
+    "DescribeMacModificationTasks": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "MacModificationTasks"
+    },
+    "DescribeCapacityBlockStatus": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "CapacityBlockStatuses"
+    },
+    "DescribeCapacityBlocks": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "CapacityBlocks"
+    },
+    "DescribeImageReferences": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "ImageReferences"
+    },
+    "DescribeImageUsageReportEntries": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "ImageUsageReportEntries"
+    },
+    "DescribeImageUsageReports": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "ImageUsageReports"
+    },
+    "DescribeCapacityManagerDataExports": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "CapacityManagerDataExports"
+    },
+    "GetCapacityManagerMetricData": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "MetricDataResults"
+    },
+    "GetCapacityManagerMetricDimensions": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "MetricDimensionResults"
+    },
+    "DescribeIpamPrefixListResolverTargets": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "IpamPrefixListResolverTargets"
+    },
+    "DescribeIpamPrefixListResolvers": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "IpamPrefixListResolvers"
+    },
+    "GetIpamPrefixListResolverRules": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "Rules"
+    },
+    "GetIpamPrefixListResolverVersionEntries": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "Entries"
+    },
+    "GetIpamPrefixListResolverVersions": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "IpamPrefixListResolverVersions"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/service-2.json 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -102,7 +102,7 @@
       },
       "input":{"shape":"AdvertiseByoipCidrRequest"},
       "output":{"shape":"AdvertiseByoipCidrResult"},
-      "documentation":"<p>Advertises an IPv4 or IPv6 address range that is provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP).</p> <p>You can perform this operation at most once every 10 seconds, even if you specify different address ranges each time.</p> <p>We recommend that you stop advertising the BYOIP CIDR from other locations when you advertise it from Amazon Web Services. To minimize down time, you can configure your Amazon Web Services resources to use an address from a BYOIP CIDR before it is advertised, and then simultaneously stop advertising it from the current location and start advertising it through Amazon Web Services.</p> <p>It can take a few minutes before traffic to the specified addresses starts routing to Amazon Web Services because of BGP propagation delays.</p> <p>To stop advertising the BYOIP CIDR, use <a>WithdrawByoipCidr</a>.</p>"
+      "documentation":"<p>Advertises an IPv4 or IPv6 address range that is provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP).</p> <p>You can perform this operation at most once every 10 seconds, even if you specify different address ranges each time.</p> <p>We recommend that you stop advertising the BYOIP CIDR from other locations when you advertise it from Amazon Web Services. To minimize down time, you can configure your Amazon Web Services resources to use an address from a BYOIP CIDR before it is advertised, and then simultaneously stop advertising it from the current location and start advertising it through Amazon Web Services.</p> <p>It can take a few minutes before traffic to the specified addresses starts routing to Amazon Web Services because of BGP propagation delays.</p>"
     },
     "AllocateAddress":{
       "name":"AllocateAddress",
@@ -112,7 +112,7 @@
       },
       "input":{"shape":"AllocateAddressRequest"},
       "output":{"shape":"AllocateAddressResult"},
-      "documentation":"<p>Allocates an Elastic IP address to your Amazon Web Services account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different Amazon Web Services account.</p> <p>You can allocate an Elastic IP address from an address pool owned by Amazon Web Services or from an address pool created from a public IPv4 address range that you have brought to Amazon Web Services for use with your Amazon Web Services resources using bring your own IP addresses (BYOIP). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">Bring Your Own IP Addresses (BYOIP)</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another Amazon Web Services account. To attempt to recover an Elastic IP address that you released, specify it in this operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>You can allocate a carrier IP address which is a public IP address from a telecommunication carrier, to a network interface which resides in a subnet in a Wavelength Zone (for example an EC2 instance).</p>"
+      "documentation":"<p>Allocates an Elastic IP address to your Amazon Web Services account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different Amazon Web Services account.</p> <p>You can allocate an Elastic IP address from one of the following address pools:</p> <ul> <li> <p>Amazon's pool of IPv4 addresses</p> </li> <li> <p>Public IPv4 address range that you own and bring to your Amazon Web Services account using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">Bring Your Own IP Addresses (BYOIP)</a> </p> </li> <li> <p>An IPv4 IPAM pool with an Amazon-provided or BYOIP public IPv4 address range</p> </li> <li> <p>IPv4 addresses from your on-premises network made available for use with an Outpost using a <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">customer-owned IP address pool</a> (CoIP pool)</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another Amazon Web Services account. To attempt to recover an Elastic IP address that you released, specify it in this operation.</p> <p>You can allocate a carrier IP address which is a public IP address from a telecommunication carrier, to a network interface which resides in a subnet in a Wavelength Zone (for example an EC2 instance).</p>"
     },
     "AllocateHosts":{
       "name":"AllocateHosts",
@@ -152,7 +152,7 @@
       },
       "input":{"shape":"AssignIpv6AddressesRequest"},
       "output":{"shape":"AssignIpv6AddressesResult"},
-      "documentation":"<p>Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type.</p> <p>You must specify either the IPv6 addresses or the IPv6 address count in the request. </p> <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html\"> Assigning prefixes to network interfaces</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Assigns the specified IPv6 addresses to the specified network interface. You can specify specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies by instance type.</p> <p>You must specify either the IPv6 addresses or the IPv6 address count in the request. </p> <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count. For information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html\"> Assigning prefixes to network interfaces</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "AssignPrivateIpAddresses":{
       "name":"AssignPrivateIpAddresses",
@@ -162,7 +162,7 @@
       },
       "input":{"shape":"AssignPrivateIpAddressesRequest"},
       "output":{"shape":"AssignPrivateIpAddressesResult"},
-      "documentation":"<p>Assigns one or more secondary private IP addresses to the specified network interface.</p> <p>You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For more information about Elastic IP addresses, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved.</p> <p>Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check <code>network/interfaces/macs/mac/local-ipv4s</code> in the instance metadata to confirm that the remapping is complete.</p> <p>You must specify either the IP addresses or the IP address count in the request.</p> <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html\"> Assigning prefixes to network interfaces</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Assigns the specified secondary private IP addresses to the specified network interface.</p> <p>You can specify specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned from the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For more information about Elastic IP addresses, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved.</p> <p>Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check <code>network/interfaces/macs/mac/local-ipv4s</code> in the instance metadata to confirm that the remapping is complete.</p> <p>You must specify either the IP addresses or the IP address count in the request.</p> <p>You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html\"> Assigning prefixes to network interfaces</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "AssignPrivateNatGatewayAddress":{
       "name":"AssignPrivateNatGatewayAddress",
@@ -273,6 +273,16 @@
       "output":{"shape":"AssociateNatGatewayAddressResult"},
       "documentation":"<p>Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT gateway. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html\">Work with NAT gateways</a> in the <i>Amazon VPC User Guide</i>.</p> <p>By default, you can associate up to 2 Elastic IP addresses per public NAT gateway. You can increase the limit by requesting a quota adjustment. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips\">Elastic IP address quotas</a> in the <i>Amazon VPC User Guide</i>.</p> <important> <p>When you associate an EIP or secondary EIPs with a public NAT gateway, the network border group of the EIPs must match the network border group of the Availability Zone (AZ) that the public NAT gateway is in. If it's not the same, the EIP will fail to associate. You can see the network border group for the subnet's AZ by viewing the details of the subnet. Similarly, you can view the network border group of an EIP by viewing the details of the EIP address. For more information about network border groups and EIPs, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html\">Allocate an Elastic IP address</a> in the <i>Amazon VPC User Guide</i>. </p> </important>"
     },
+    "AssociateRouteServer":{
+      "name":"AssociateRouteServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateRouteServerRequest"},
+      "output":{"shape":"AssociateRouteServerResult"},
+      "documentation":"<p>Associates a route server with a VPC to enable dynamic route updates.</p> <p>A route server association is the connection established between a route server and a VPC.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "AssociateRouteTable":{
       "name":"AssociateRouteTable",
       "http":{
@@ -291,7 +301,7 @@
       },
       "input":{"shape":"AssociateSecurityGroupVpcRequest"},
       "output":{"shape":"AssociateSecurityGroupVpcResult"},
-      "documentation":"<p>Associates a security group with another VPC in the same Region. This enables you to use the same security group with network interfaces and instances in the specified VPC.</p> <note> <ul> <li> <p>The VPC you want to associate the security group with must be in the same Region.</p> </li> <li> <p>You can associate the security group with another VPC if your account owns the VPC or if the VPC was shared with you.</p> </li> <li> <p>You must own the security group and the VPC that it was created in.</p> </li> <li> <p>You cannot use this feature with default security groups.</p> </li> <li> <p>You cannot use this feature with the default VPC.</p> </li> </ul> </note>"
+      "documentation":"<p>Associates a security group with another VPC in the same Region. This enables you to use the same security group with network interfaces and instances in the specified VPC.</p> <note> <ul> <li> <p>The VPC you want to associate the security group with must be in the same Region.</p> </li> <li> <p>You can associate the security group with another VPC if your account owns the VPC or if the VPC was shared with you.</p> </li> <li> <p>You must own the security group.</p> </li> <li> <p>You cannot use this feature with default security groups.</p> </li> <li> <p>You cannot use this feature with the default VPC.</p> </li> </ul> </note>"
     },
     "AssociateSubnetCidrBlock":{
       "name":"AssociateSubnetCidrBlock",
@@ -400,7 +410,7 @@
       },
       "input":{"shape":"AttachVolumeRequest"},
       "output":{"shape":"VolumeAttachment"},
-      "documentation":"<p>Attaches an EBS volume to a running or stopped instance and exposes it to the instance with the specified device name.</p> <p>Encrypted EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p> <p>After you attach an EBS volume, you must make it available. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-using-volumes.html\">Make an EBS volume available for use</a>.</p> <p>If a volume has an Amazon Web Services Marketplace product code:</p> <ul> <li> <p>The volume can be attached only to a stopped instance.</p> </li> <li> <p>Amazon Web Services Marketplace product codes are copied from the volume to the instance.</p> </li> <li> <p>You must be subscribed to the product.</p> </li> <li> <p>The instance type and operating system of the instance must support the product. For example, you can't detach a volume from a Windows instance and attach it to a Linux instance.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html\">Attach an Amazon EBS volume to an instance</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Attaches an Amazon EBS volume to a <code>running</code> or <code>stopped</code> instance, and exposes it to the instance with the specified device name.</p> <note> <p>The maximum number of Amazon EBS volumes that you can attach to an instance depends on the instance type. If you exceed the volume attachment limit for an instance type, the attachment request fails with the <code>AttachmentLimitExceeded</code> error. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html\">Instance volume limits</a>.</p> </note> <p>After you attach an EBS volume, you must make it available for use. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-using-volumes.html\">Make an EBS volume available for use</a>.</p> <p>If a volume has an Amazon Web Services Marketplace product code:</p> <ul> <li> <p>The volume can be attached only to a stopped instance.</p> </li> <li> <p>Amazon Web Services Marketplace product codes are copied from the volume to the instance.</p> </li> <li> <p>You must be subscribed to the product.</p> </li> <li> <p>The instance type and operating system of the instance must support the product. For example, you can't detach a volume from a Windows instance and attach it to a Linux instance.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html\">Attach an Amazon EBS volume to an instance</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "AttachVpnGateway":{
       "name":"AttachVpnGateway",
@@ -470,7 +480,7 @@
       },
       "input":{"shape":"CancelCapacityReservationRequest"},
       "output":{"shape":"CancelCapacityReservationResult"},
-      "documentation":"<p>Cancels the specified Capacity Reservation, releases the reserved capacity, and changes the Capacity Reservation's state to <code>cancelled</code>.</p> <p>You can cancel a Capacity Reservation that is in the following states:</p> <ul> <li> <p> <code>assessing</code> </p> </li> <li> <p> <code>active</code> and there is no commitment duration or the commitment duration has elapsed. You can't cancel a future-dated Capacity Reservation during the commitment duration.</p> </li> </ul> <p>If a future-dated Capacity Reservation enters the <code>delayed</code> state, the commitment duration is waived, and you can cancel it as soon as it enters the <code>active</code> state.</p> <p>Instances running in the reserved capacity continue running until you stop them. Stopped instances that target the Capacity Reservation can no longer launch. Modify these instances to either target a different Capacity Reservation, launch On-Demand Instance capacity, or run in any open Capacity Reservation that has matching attributes and sufficient capacity.</p>"
+      "documentation":"<p>Cancels the specified Capacity Reservation, releases the reserved capacity, and changes the Capacity Reservation's state to <code>cancelled</code>.</p> <p>You can cancel a Capacity Reservation that is in the following states:</p> <ul> <li> <p> <code>assessing</code> </p> </li> <li> <p> <code>active</code> and there is no commitment duration or the commitment duration has elapsed. You can't cancel a future-dated Capacity Reservation during the commitment duration.</p> </li> </ul> <note> <p>You can't modify or cancel a Capacity Block. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html\">Capacity Blocks for ML</a>.</p> </note> <p>If a future-dated Capacity Reservation enters the <code>delayed</code> state, the commitment duration is waived, and you can cancel it as soon as it enters the <code>active</code> state.</p> <p>Instances running in the reserved capacity continue running until you stop them. Stopped instances that target the Capacity Reservation can no longer launch. Modify these instances to either target a different Capacity Reservation, launch On-Demand Instance capacity, or run in any open Capacity Reservation that has matching attributes and sufficient capacity.</p>"
     },
     "CancelCapacityReservationFleets":{
       "name":"CancelCapacityReservationFleets",
@@ -518,7 +528,7 @@
       },
       "input":{"shape":"CancelImageLaunchPermissionRequest"},
       "output":{"shape":"CancelImageLaunchPermissionResult"},
-      "documentation":"<p>Removes your Amazon Web Services account from the launch permissions for the specified AMI. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cancel-sharing-an-AMI.html\"> Cancel having an AMI shared with your Amazon Web Services account</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Removes your Amazon Web Services account from the launch permissions for the specified AMI. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cancel-sharing-an-AMI.html\">Cancel having an AMI shared with your Amazon Web Services account</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CancelImportTask":{
       "name":"CancelImportTask",
@@ -548,7 +558,7 @@
       },
       "input":{"shape":"CancelSpotFleetRequestsRequest"},
       "output":{"shape":"CancelSpotFleetRequestsResponse"},
-      "documentation":"<p>Cancels the specified Spot Fleet requests.</p> <p>After you cancel a Spot Fleet request, the Spot Fleet launches no new instances.</p> <p>You must also specify whether a canceled Spot Fleet request should terminate its instances. If you choose to terminate the instances, the Spot Fleet request enters the <code>cancelled_terminating</code> state. Otherwise, the Spot Fleet request enters the <code>cancelled_running</code> state and the instances continue to run until they are interrupted or you terminate them manually.</p> <p class=\"title\"> <b>Restrictions</b> </p> <ul> <li> <p>You can delete up to 100 fleets in a single request. If you exceed the specified number, no fleets are deleted.</p> </li> </ul>"
+      "documentation":"<p>Cancels the specified Spot Fleet requests.</p> <p>After you cancel a Spot Fleet request, the Spot Fleet launches no new instances.</p> <p>You must also specify whether a canceled Spot Fleet request should terminate its instances. If you choose to terminate the instances, the Spot Fleet request enters the <code>cancelled_terminating</code> state. Otherwise, the Spot Fleet request enters the <code>cancelled_running</code> state and the instances continue to run until they are interrupted or you terminate them manually.</p> <important> <p> <b>Terminating an instance is permanent and irreversible.</b> </p> <p>After you terminate an instance, you can no longer connect to it, and it can't be recovered. All attached Amazon EBS volumes that are configured to be deleted on termination are also permanently deleted and can't be recovered. All data stored on instance store volumes is permanently lost. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-ec2-instance-termination-works.html\"> How instance termination works</a>.</p> <p>Before you terminate an instance, ensure that you have backed up all data that you need to retain after the termination to persistent storage.</p> </important> <p class=\"title\"> <b>Restrictions</b> </p> <ul> <li> <p>You can delete up to 100 fleets in a single request. If you exceed the specified number, no fleets are deleted.</p> </li> </ul>"
     },
     "CancelSpotInstanceRequests":{
       "name":"CancelSpotInstanceRequests",
@@ -588,7 +598,7 @@
       },
       "input":{"shape":"CopyImageRequest"},
       "output":{"shape":"CopyImageResult"},
-      "documentation":"<p>Initiates an AMI copy operation. You can copy an AMI from one Region to another, or from a Region to an Outpost. You can't copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost. To copy an AMI to another partition, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html\">CreateStoreImageTask</a>.</p> <p>When you copy an AMI from one Region to another, the destination Region is the current Region.</p> <p>When you copy an AMI from a Region to an Outpost, specify the ARN of the Outpost as the destination. Backing snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region or the key that you specify. Outposts do not support unencrypted snapshots.</p> <p>For information about the prerequisites when copying an AMI, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html\">Copy an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Initiates an AMI copy operation. You must specify the source AMI ID and both the source and destination locations. The copy operation must be initiated in the destination Region.</p> <p class=\"title\"> <b>CopyImage supports the following source to destination copies:</b> </p> <ul> <li> <p>Region to Region</p> </li> <li> <p>Region to Outpost</p> </li> <li> <p>Parent Region to Local Zone</p> </li> <li> <p>Local Zone to parent Region</p> </li> <li> <p>Between Local Zones with the same parent Region (only supported for certain Local Zones)</p> </li> </ul> <p class=\"title\"> <b>CopyImage does not support the following source to destination copies:</b> </p> <ul> <li> <p>Local Zone to non-parent Regions</p> </li> <li> <p>Between Local Zones with different parent Regions</p> </li> <li> <p>Local Zone to Outpost</p> </li> <li> <p>Outpost to Local Zone</p> </li> <li> <p>Outpost to Region</p> </li> <li> <p>Between Outposts</p> </li> <li> <p>Within same Outpost</p> </li> <li> <p>Cross-partition copies (use <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html\">CreateStoreImageTask</a> instead)</p> </li> </ul> <p class=\"title\"> <b>Destination specification</b> </p> <ul> <li> <p>Region to Region: The destination Region is the Region in which you initiate the copy operation.</p> </li> <li> <p>Region to Outpost: Specify the destination using the <code>DestinationOutpostArn</code> parameter (the ARN of the Outpost)</p> </li> <li> <p>Region to Local Zone, and Local Zone to Local Zone copies: Specify the destination using the <code>DestinationAvailabilityZone</code> parameter (the name of the destination Local Zone) or <code>DestinationAvailabilityZoneId</code> parameter (the ID of the destination Local Zone).</p> </li> </ul> <p class=\"title\"> <b>Snapshot encryption</b> </p> <ul> <li> <p>Region to Outpost: Backing snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region or the key that you specify. Outposts do not support unencrypted snapshots.</p> </li> <li> <p>Region to Local Zone, and Local Zone to Local Zone: Not all Local Zones require encrypted snapshots. In Local Zones that require encrypted snapshots, backing snapshots are automatically encrypted during copy. In Local Zones where encryption is not required, snapshots retain their original encryption state (encrypted or unencrypted) by default.</p> </li> </ul> <p>For more information, including the required permissions for copying an AMI, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html\">Copy an Amazon EC2 AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CopySnapshot":{
       "name":"CopySnapshot",
@@ -598,7 +608,27 @@
       },
       "input":{"shape":"CopySnapshotRequest"},
       "output":{"shape":"CopySnapshotResult"},
-      "documentation":"<p>Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy a snapshot within the same Region, from one Region to another, or from a Region to an Outpost. You can't copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p> <p>You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs).</p> <p>When copying snapshots to a Region, copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for the snapshot copy operation. By default, encrypted snapshot copies use the default KMS key; however, you can specify a different KMS key. To copy an encrypted snapshot that has been shared from another account, you must have permissions for the KMS key used to encrypt the snapshot.</p> <p>Snapshots copied to an Outpost are encrypted by default using the default encryption key for the Region, or a different key that you specify in the request using <b>KmsKeyId</b>. Outposts do not support unencrypted snapshots. For more information, <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami\"> Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EBS User Guide</i>.</p> <p>Snapshots created by copying another snapshot have an arbitrary volume ID that should not be used for any purpose.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html\">Copy an Amazon EBS snapshot</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Creates an exact copy of an Amazon EBS snapshot.</p> <p>The location of the source snapshot determines whether you can copy it or not, and the allowed destinations for the snapshot copy.</p> <ul> <li> <p>If the source snapshot is in a Region, you can copy it within that Region, to another Region, to an Outpost associated with that Region, or to a Local Zone in that Region.</p> </li> <li> <p>If the source snapshot is in a Local Zone, you can copy it within that Local Zone, to another Local Zone in the same zone group, or to the parent Region of the Local Zone.</p> </li> <li> <p>If the source snapshot is on an Outpost, you can't copy it.</p> </li> </ul> <p>When copying snapshots to a Region, the encryption outcome for the snapshot copy depends on the Amazon EBS encryption by default setting for the destination Region, the encryption status of the source snapshot, and the encryption parameters you specify in the request. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html#creating-encrypted-snapshots\"> Encryption and snapshot copying</a>.</p> <p>Snapshots copied to an Outpost must be encrypted. Unencrypted snapshots are not supported on Outposts. For more information, <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#considerations\"> Amazon EBS local snapshots on Outposts</a>.</p> <note> <p>Snapshots copies have an arbitrary source volume ID. Do not use this volume ID for any purpose.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html\">Copy an Amazon EBS snapshot</a> in the <i>Amazon EBS User Guide</i>.</p>"
+    },
+    "CopyVolumes":{
+      "name":"CopyVolumes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CopyVolumesRequest"},
+      "output":{"shape":"CopyVolumesResult"},
+      "documentation":"<p>Creates a crash-consistent, point-in-time copy of an existing Amazon EBS volume within the same Availability Zone. The volume copy can be attached to an Amazon EC2 instance once it reaches the <code>available</code> state. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copying-volume.html\">Copy an Amazon EBS volume</a>.</p>"
+    },
+    "CreateCapacityManagerDataExport":{
+      "name":"CreateCapacityManagerDataExport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateCapacityManagerDataExportRequest"},
+      "output":{"shape":"CreateCapacityManagerDataExportResult"},
+      "documentation":"<p> Creates a new data export configuration for EC2 Capacity Manager. This allows you to automatically export capacity usage data to an S3 bucket on a scheduled basis. The exported data includes metrics for On-Demand, Spot, and Capacity Reservations usage across your organization. </p>"
     },
     "CreateCapacityReservation":{
       "name":"CreateCapacityReservation",
@@ -710,6 +740,16 @@
       "output":{"shape":"CreateDefaultVpcResult"},
       "documentation":"<p>Creates a default VPC with a size <code>/16</code> IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html\">Default VPCs</a> in the <i>Amazon VPC User Guide</i>. You cannot specify the components of the default VPC yourself.</p> <p>If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region.</p>"
     },
+    "CreateDelegateMacVolumeOwnershipTask":{
+      "name":"CreateDelegateMacVolumeOwnershipTask",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateDelegateMacVolumeOwnershipTaskRequest"},
+      "output":{"shape":"CreateDelegateMacVolumeOwnershipTaskResult"},
+      "documentation":"<p>Delegates ownership of the Amazon EBS root volume for an Apple silicon Mac instance to an administrative user.</p>"
+    },
     "CreateDhcpOptions":{
       "name":"CreateDhcpOptions",
       "http":{
@@ -758,7 +798,7 @@
       },
       "input":{"shape":"CreateFpgaImageRequest"},
       "output":{"shape":"CreateFpgaImageResult"},
-      "documentation":"<p>Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP).</p> <p>The create operation is asynchronous. To verify that the AFI is ready for use, check the output logs.</p> <p>An AFI contains the FPGA bitstream that is ready to download to an FPGA. You can securely deploy an AFI on multiple FPGA-accelerated instances. For more information, see the <a href=\"https://github.com/aws/aws-fpga/\">Amazon Web Services FPGA Hardware Development Kit</a>.</p>"
+      "documentation":"<p>Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP).</p> <p>The create operation is asynchronous. To verify that the AFI was successfully created and is ready for use, check the output logs.</p> <p>An AFI contains the FPGA bitstream that is ready to download to an FPGA. You can securely deploy an AFI on multiple FPGA-accelerated instances. For more information, see the <a href=\"https://github.com/aws/aws-fpga/\">Amazon Web Services FPGA Hardware Development Kit</a>.</p>"
     },
     "CreateImage":{
       "name":"CreateImage",
@@ -768,7 +808,17 @@
       },
       "input":{"shape":"CreateImageRequest"},
       "output":{"shape":"CreateImageResult"},
-      "documentation":"<p>Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped.</p> <p>If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html\">Create an Amazon EBS-backed Linux AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+      "documentation":"<p>Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped.</p> <p>If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes.</p> <p>The location of the source instance determines where you can create the snapshots of the AMI:</p> <ul> <li> <p>If the source instance is in a Region, you must create the snapshots in the same Region as the instance.</p> </li> <li> <p>If the source instance is in a Local Zone, you can create the snapshots in the same Local Zone or in its parent Region.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html\">Create an Amazon EBS-backed AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "CreateImageUsageReport":{
+      "name":"CreateImageUsageReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateImageUsageReportRequest"},
+      "output":{"shape":"CreateImageUsageReportResult"},
+      "documentation":"<p>Creates a report that shows how your image is used across other Amazon Web Services accounts. The report provides visibility into which accounts are using the specified image, and how many resources (EC2 instances or launch templates) are referencing it.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html\">View your AMI usage</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateInstanceConnectEndpoint":{
       "name":"CreateInstanceConnectEndpoint",
@@ -778,7 +828,7 @@
       },
       "input":{"shape":"CreateInstanceConnectEndpointRequest"},
       "output":{"shape":"CreateInstanceConnectEndpointResult"},
-      "documentation":"<p>Creates an EC2 Instance Connect Endpoint.</p> <p>An EC2 Instance Connect Endpoint allows you to connect to an instance, without requiring the instance to have a public IPv4 address. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html\">Connect to your instances without requiring a public IPv4 address using EC2 Instance Connect Endpoint</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Creates an EC2 Instance Connect Endpoint.</p> <p>An EC2 Instance Connect Endpoint allows you to connect to an instance, without requiring the instance to have a public IPv4 or public IPv6 address. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html\">Connect to your instances using EC2 Instance Connect Endpoint</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateInstanceEventWindow":{
       "name":"CreateInstanceEventWindow",
@@ -828,7 +878,7 @@
       },
       "input":{"shape":"CreateIpamExternalResourceVerificationTokenRequest"},
       "output":{"shape":"CreateIpamExternalResourceVerificationTokenResult"},
-      "documentation":"<p>Create a verification token. A verification token is an Amazon Web Services-generated random value that you can use to prove ownership of an external resource. For example, you can use a verification token to validate that you control a public IP address range when you bring an IP address range to Amazon Web Services (BYOIP). </p>"
+      "documentation":"<p>Create a verification token.</p> <p>A verification token is an Amazon Web Services-generated random value that you can use to prove ownership of an external resource. For example, you can use a verification token to validate that you control a public IP address range when you bring an IP address range to Amazon Web Services (BYOIP). </p>"
     },
     "CreateIpamPool":{
       "name":"CreateIpamPool",
@@ -840,6 +890,26 @@
       "output":{"shape":"CreateIpamPoolResult"},
       "documentation":"<p>Create an IP address pool for Amazon VPC IP Address Manager (IPAM). In IPAM, a pool is a collection of contiguous IP addresses CIDRs. Pools enable you to organize your IP addresses according to your routing and security needs. For example, if you have separate routing and security needs for development and production applications, you can create a pool for each.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html\">Create a top-level pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>"
     },
+    "CreateIpamPrefixListResolver":{
+      "name":"CreateIpamPrefixListResolver",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateIpamPrefixListResolverRequest"},
+      "output":{"shape":"CreateIpamPrefixListResolverResult"},
+      "documentation":"<p>Creates an IPAM prefix list resolver.</p> <p>An IPAM prefix list resolver is a component that manages the synchronization between IPAM's CIDR selection rules and customer-managed prefix lists. It automates connectivity configurations by selecting CIDRs from IPAM's database based on your business logic and synchronizing them with prefix lists used in resources such as VPC route tables and security groups.</p> <p>For more information about IPAM prefix list resolver, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/automate-prefix-list-updates.html\">Automate prefix list updates with IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>"
+    },
+    "CreateIpamPrefixListResolverTarget":{
+      "name":"CreateIpamPrefixListResolverTarget",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateIpamPrefixListResolverTargetRequest"},
+      "output":{"shape":"CreateIpamPrefixListResolverTargetResult"},
+      "documentation":"<p>Creates an IPAM prefix list resolver target.</p> <p>An IPAM prefix list resolver target is an association between a specific customer-managed prefix list and an IPAM prefix list resolver. The target enables the resolver to synchronize CIDRs selected by its rules into the specified prefix list, which can then be referenced in Amazon Web Services resources.</p> <p>For more information about IPAM prefix list resolver, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/automate-prefix-list-updates.html\">Automate prefix list updates with IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>"
+    },
     "CreateIpamResourceDiscovery":{
       "name":"CreateIpamResourceDiscovery",
       "http":{
@@ -878,7 +948,7 @@
       },
       "input":{"shape":"CreateLaunchTemplateRequest"},
       "output":{"shape":"CreateLaunchTemplateResult"},
-      "documentation":"<p>Creates a launch template.</p> <p>A launch template contains the parameters to launch an instance. When you launch an instance using <a>RunInstances</a>, you can specify a launch template instead of providing the launch parameters in the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Launch an instance from a launch template</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>To clone an existing launch template as the basis for a new launch template, use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template-from-existing-launch-template\">Create a launch template from an existing launch template</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Creates a launch template.</p> <p>A launch template contains the parameters to launch an instance. When you launch an instance using <a>RunInstances</a>, you can specify a launch template instead of providing the launch parameters in the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Store instance launch parameters in Amazon EC2 launch templates</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>To clone an existing launch template as the basis for a new launch template, use the Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#create-launch-template-from-existing-launch-template\">Create a launch template from an existing launch template</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateLaunchTemplateVersion":{
       "name":"CreateLaunchTemplateVersion",
@@ -888,7 +958,7 @@
       },
       "input":{"shape":"CreateLaunchTemplateVersionRequest"},
       "output":{"shape":"CreateLaunchTemplateVersionResult"},
-      "documentation":"<p>Creates a new version of a launch template. You must specify an existing launch template, either by name or ID. You can determine whether the new version inherits parameters from a source version, and add or overwrite parameters as needed.</p> <p>Launch template versions are numbered in the order in which they are created. You can't specify, change, or replace the numbering of launch template versions.</p> <p>Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes the changes that you require.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#manage-launch-template-versions\">Modify a launch template (manage launch template versions)</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Creates a new version of a launch template. You must specify an existing launch template, either by name or ID. You can determine whether the new version inherits parameters from a source version, and add or overwrite parameters as needed.</p> <p>Launch template versions are numbered in the order in which they are created. You can't specify, change, or replace the numbering of launch template versions.</p> <p>Launch templates are immutable; after you create a launch template, you can't modify it. Instead, you can create a new version of the launch template that includes the changes that you require.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-launch-template-versions.html\">Modify a launch template (manage launch template versions)</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateLocalGatewayRoute":{
       "name":"CreateLocalGatewayRoute",
@@ -930,6 +1000,36 @@
       "output":{"shape":"CreateLocalGatewayRouteTableVpcAssociationResult"},
       "documentation":"<p>Associates the specified VPC with the specified local gateway route table.</p>"
     },
+    "CreateLocalGatewayVirtualInterface":{
+      "name":"CreateLocalGatewayVirtualInterface",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateLocalGatewayVirtualInterfaceRequest"},
+      "output":{"shape":"CreateLocalGatewayVirtualInterfaceResult"},
+      "documentation":"<p>Create a virtual interface for a local gateway. </p>"
+    },
+    "CreateLocalGatewayVirtualInterfaceGroup":{
+      "name":"CreateLocalGatewayVirtualInterfaceGroup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateLocalGatewayVirtualInterfaceGroupRequest"},
+      "output":{"shape":"CreateLocalGatewayVirtualInterfaceGroupResult"},
+      "documentation":"<p>Create a local gateway virtual interface group.</p>"
+    },
+    "CreateMacSystemIntegrityProtectionModificationTask":{
+      "name":"CreateMacSystemIntegrityProtectionModificationTask",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateMacSystemIntegrityProtectionModificationTaskRequest"},
+      "output":{"shape":"CreateMacSystemIntegrityProtectionModificationTaskResult"},
+      "documentation":"<p>Creates a System Integrity Protection (SIP) modification task to configure the SIP settings for an x86 Mac instance or Apple silicon Mac instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-configure\"> Configure SIP for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you configure the SIP settings for your instance, you can either enable or disable all SIP settings, or you can specify a custom SIP configuration that selectively enables or disables specific SIP settings.</p> <note> <p>If you implement a custom configuration, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-check-settings\"> connect to the instance and verify the settings</a> to ensure that your requirements are properly implemented and functioning as intended.</p> <p>SIP configurations might change with macOS updates. We recommend that you review custom SIP settings after any macOS version upgrade to ensure continued compatibility and proper functionality of your security configurations.</p> </note> <p>To enable or disable all SIP settings, use the <b>MacSystemIntegrityProtectionStatus</b> parameter only. For example, to enable all SIP settings, specify the following:</p> <ul> <li> <p> <code>MacSystemIntegrityProtectionStatus=enabled</code> </p> </li> </ul> <p>To specify a custom configuration that selectively enables or disables specific SIP settings, use the <b>MacSystemIntegrityProtectionStatus</b> parameter to enable or disable all SIP settings, and then use the <b>MacSystemIntegrityProtectionConfiguration</b> parameter to specify exceptions. In this case, the exceptions you specify for <b>MacSystemIntegrityProtectionConfiguration</b> override the value you specify for <b>MacSystemIntegrityProtectionStatus</b>. For example, to enable all SIP settings, except <code>NvramProtections</code>, specify the following:</p> <ul> <li> <p> <code>MacSystemIntegrityProtectionStatus=enabled</code> </p> </li> <li> <p> <code>MacSystemIntegrityProtectionConfigurationRequest \"NvramProtections=disabled\"</code> </p> </li> </ul>"
+    },
     "CreateManagedPrefixList":{
       "name":"CreateManagedPrefixList",
       "http":{
@@ -938,7 +1038,7 @@
       },
       "input":{"shape":"CreateManagedPrefixListRequest"},
       "output":{"shape":"CreateManagedPrefixListResult"},
-      "documentation":"<p>Creates a managed prefix list. You can specify one or more entries for the prefix list. Each entry consists of a CIDR block and an optional description.</p>"
+      "documentation":"<p>Creates a managed prefix list. You can specify entries for the prefix list. Each entry consists of a CIDR block and an optional description.</p>"
     },
     "CreateNatGateway":{
       "name":"CreateNatGateway",
@@ -1057,7 +1157,7 @@
       },
       "input":{"shape":"CreateRestoreImageTaskRequest"},
       "output":{"shape":"CreateRestoreImageTaskResult"},
-      "documentation":"<p>Starts a task that restores an AMI from an Amazon S3 object that was previously created by using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html\">CreateStoreImageTask</a>.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Starts a task that restores an AMI from an Amazon S3 object that was previously created by using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html\">CreateStoreImageTask</a>.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateRoute":{
       "name":"CreateRoute",
@@ -1069,6 +1169,36 @@
       "output":{"shape":"CreateRouteResult"},
       "documentation":"<p>Creates a route in a route table within a VPC.</p> <p>You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list.</p> <p>When determining how to route traffic, we use the route with the most specific match. For example, traffic is destined for the IPv4 address <code>192.0.2.3</code>, and the route table includes the following two IPv4 routes:</p> <ul> <li> <p> <code>192.0.2.0/24</code> (goes to some target A)</p> </li> <li> <p> <code>192.0.2.0/28</code> (goes to some target B)</p> </li> </ul> <p>Both routes apply to the traffic destined for <code>192.0.2.3</code>. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic.</p> <p>For more information about route tables, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html\">Route tables</a> in the <i>Amazon VPC User Guide</i>.</p>"
     },
+    "CreateRouteServer":{
+      "name":"CreateRouteServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateRouteServerRequest"},
+      "output":{"shape":"CreateRouteServerResult"},
+      "documentation":"<p>Creates a new route server to manage dynamic routing in a VPC.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "CreateRouteServerEndpoint":{
+      "name":"CreateRouteServerEndpoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateRouteServerEndpointRequest"},
+      "output":{"shape":"CreateRouteServerEndpointResult"},
+      "documentation":"<p>Creates a new endpoint for a route server in a specified subnet.</p> <p>A route server endpoint is an Amazon Web Services-managed component inside a subnet that facilitates <a href=\"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\">BGP (Border Gateway Protocol)</a> connections between your route server and your BGP peers.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "CreateRouteServerPeer":{
+      "name":"CreateRouteServerPeer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateRouteServerPeerRequest"},
+      "output":{"shape":"CreateRouteServerPeerResult"},
+      "documentation":"<p>Creates a new BGP peer for a specified route server endpoint.</p> <p>A route server peer is a session between a route server endpoint and the device deployed in Amazon Web Services (such as a firewall appliance or other network security function running on an EC2 instance). The device must meet these requirements:</p> <ul> <li> <p>Have an elastic network interface in the VPC</p> </li> <li> <p>Support BGP (Border Gateway Protocol)</p> </li> <li> <p>Can initiate BGP sessions</p> </li> </ul> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "CreateRouteTable":{
       "name":"CreateRouteTable",
       "http":{
@@ -1097,7 +1227,7 @@
       },
       "input":{"shape":"CreateSnapshotRequest"},
       "output":{"shape":"Snapshot"},
-      "documentation":"<p>Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance.</p> <p>The location of the source EBS volume determines where you can create the snapshot.</p> <ul> <li> <p>If the source volume is in a Region, you must create the snapshot in the same Region as the volume.</p> </li> <li> <p>If the source volume is in a Local Zone, you can create the snapshot in the same Local Zone or in parent Amazon Web Services Region.</p> </li> <li> <p>If the source volume is on an Outpost, you can create the snapshot on the same Outpost or in its parent Amazon Web Services Region.</p> </li> </ul> <p>When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot.</p> <p>You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is <code>pending</code>.</p> <p>When you create a snapshot for an EBS volume that serves as a root device, we recommend that you stop the instance before taking the snapshot.</p> <p>Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected. For more information, <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance.</p> <p>The location of the source EBS volume determines where you can create the snapshot.</p> <ul> <li> <p>If the source volume is in a Region, you must create the snapshot in the same Region as the volume.</p> </li> <li> <p>If the source volume is in a Local Zone, you can create the snapshot in the same Local Zone or in its parent Amazon Web Services Region.</p> </li> <li> <p>If the source volume is on an Outpost, you can create the snapshot on the same Outpost or in its parent Amazon Web Services Region.</p> </li> </ul> <p>When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot.</p> <p>You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is <code>pending</code>.</p> <p>When you create a snapshot for an EBS volume that serves as a root device, we recommend that you stop the instance before taking the snapshot.</p> <p>Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "CreateSnapshots":{
       "name":"CreateSnapshots",
@@ -1107,7 +1237,7 @@
       },
       "input":{"shape":"CreateSnapshotsRequest"},
       "output":{"shape":"CreateSnapshotsResult"},
-      "documentation":"<p>Creates crash-consistent snapshots of multiple EBS volumes attached to an Amazon EC2 instance. Volumes are chosen by specifying an instance. Each volume attached to the specified instance will produce one snapshot that is crash-consistent across the instance. You can include all of the volumes currently attached to the instance, or you can exclude the root volume or specific data (non-root) volumes from the multi-volume snapshot set.</p> <p>The location of the source instance determines where you can create the snapshots.</p> <ul> <li> <p>If the source instance is in a Region, you must create the snapshots in the same Region as the instance.</p> </li> <li> <p>If the source instance is in a Local Zone, you can create the snapshots in the same Local Zone or in parent Amazon Web Services Region.</p> </li> <li> <p>If the source instance is on an Outpost, you can create the snapshots on the same Outpost or in its parent Amazon Web Services Region.</p> </li> </ul>"
+      "documentation":"<p>Creates crash-consistent snapshots of multiple EBS volumes attached to an Amazon EC2 instance. Volumes are chosen by specifying an instance. Each volume attached to the specified instance will produce one snapshot that is crash-consistent across the instance. You can include all of the volumes currently attached to the instance, or you can exclude the root volume or specific data (non-root) volumes from the multi-volume snapshot set.</p> <p>The location of the source instance determines where you can create the snapshots.</p> <ul> <li> <p>If the source instance is in a Region, you must create the snapshots in the same Region as the instance.</p> </li> <li> <p>If the source instance is in a Local Zone, you can create the snapshots in the same Local Zone or in its parent Amazon Web Services Region.</p> </li> <li> <p>If the source instance is on an Outpost, you can create the snapshots on the same Outpost or in its parent Amazon Web Services Region.</p> </li> </ul>"
     },
     "CreateSpotDatafeedSubscription":{
       "name":"CreateSpotDatafeedSubscription",
@@ -1127,7 +1257,7 @@
       },
       "input":{"shape":"CreateStoreImageTaskRequest"},
       "output":{"shape":"CreateStoreImageTaskResult"},
-      "documentation":"<p>Stores an AMI as a single object in an Amazon S3 bucket.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Stores an AMI as a single object in an Amazon S3 bucket.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "CreateSubnet":{
       "name":"CreateSubnet",
@@ -1366,7 +1496,7 @@
       },
       "input":{"shape":"CreateVpcRequest"},
       "output":{"shape":"CreateVpcResult"},
-      "documentation":"<p>Creates a VPC with the specified CIDR blocks. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html\">IP addressing for your VPCs and subnets</a> in the <i>Amazon VPC User Guide</i>.</p> <p>You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses (<a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">BYOIP</a>).</p> <p>By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html\">DHCP option sets</a> in the <i>Amazon VPC User Guide</i>.</p> <p>You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html\">Dedicated Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Creates a VPC with the specified CIDR blocks.</p> <p>A VPC must have an associated IPv4 CIDR block. You can choose an IPv4 CIDR block or an IPAM-allocated IPv4 CIDR block. You can optionally associate an IPv6 CIDR block with a VPC. You can choose an IPv6 CIDR block, an Amazon-provided IPv6 CIDR block, an IPAM-allocated IPv6 CIDR block, or an IPv6 CIDR block that you brought to Amazon Web Services. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html\">IP addressing for your VPCs and subnets</a> in the <i>Amazon VPC User Guide</i>.</p> <p>By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html\">DHCP option sets</a> in the <i>Amazon VPC User Guide</i>.</p> <p>You can specify DNS options and tenancy for a VPC when you create it. You can't change the tenancy of a VPC after you create it. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc-options.html\">VPC configuration options</a> in the <i>Amazon VPC User Guide</i>.</p>"
     },
     "CreateVpcBlockPublicAccessExclusion":{
       "name":"CreateVpcBlockPublicAccessExclusion",
@@ -1447,6 +1577,16 @@
       "output":{"shape":"CreateVpnGatewayResult"},
       "documentation":"<p>Creates a virtual private gateway. A virtual private gateway is the endpoint on the VPC side of your VPN connection. You can create a virtual private gateway before creating the VPC itself.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html\">Amazon Web Services Site-to-Site VPN</a> in the <i>Amazon Web Services Site-to-Site VPN User Guide</i>.</p>"
     },
+    "DeleteCapacityManagerDataExport":{
+      "name":"DeleteCapacityManagerDataExport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteCapacityManagerDataExportRequest"},
+      "output":{"shape":"DeleteCapacityManagerDataExportResult"},
+      "documentation":"<p> Deletes an existing Capacity Manager data export configuration. This stops future scheduled exports but does not delete previously exported files from S3. </p>"
+    },
     "DeleteCarrierGateway":{
       "name":"DeleteCarrierGateway",
       "http":{
@@ -1533,7 +1673,7 @@
       },
       "input":{"shape":"DeleteFleetsRequest"},
       "output":{"shape":"DeleteFleetsResult"},
-      "documentation":"<p>Deletes the specified EC2 Fleets.</p> <p>After you delete an EC2 Fleet, it launches no new instances.</p> <p>You must also specify whether a deleted EC2 Fleet should terminate its instances. If you choose to terminate the instances, the EC2 Fleet enters the <code>deleted_terminating</code> state. Otherwise, the EC2 Fleet enters the <code>deleted_running</code> state, and the instances continue to run until they are interrupted or you terminate them manually.</p> <p>For <code>instant</code> fleets, EC2 Fleet must terminate the instances when the fleet is deleted. Up to 1000 instances can be terminated in a single request to delete <code>instant</code> fleets. A deleted <code>instant</code> fleet with running instances is not supported.</p> <p class=\"title\"> <b>Restrictions</b> </p> <ul> <li> <p>You can delete up to 25 fleets of type <code>instant</code> in a single request.</p> </li> <li> <p>You can delete up to 100 fleets of type <code>maintain</code> or <code>request</code> in a single request.</p> </li> <li> <p>You can delete up to 125 fleets in a single request, provided you do not exceed the quota for each fleet type, as specified above.</p> </li> <li> <p>If you exceed the specified number of fleets to delete, no fleets are deleted.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#delete-fleet\">Delete an EC2 Fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified EC2 Fleet request.</p> <p>After you delete an EC2 Fleet request, it launches no new instances.</p> <p>You must also specify whether a deleted EC2 Fleet request should terminate its instances. If you choose to terminate the instances, the EC2 Fleet request enters the <code>deleted_terminating</code> state. Otherwise, it enters the <code>deleted_running</code> state, and the instances continue to run until they are interrupted or you terminate them manually.</p> <p>A deleted <code>instant</code> fleet with running instances is not supported. When you delete an <code>instant</code> fleet, Amazon EC2 automatically terminates all its instances. For fleets with more than 1000 instances, the deletion request might fail. If your fleet has more than 1000 instances, first terminate most of the instances manually, leaving 1000 or fewer. Then delete the fleet, and the remaining instances will be terminated automatically.</p> <important> <p> <b>Terminating an instance is permanent and irreversible.</b> </p> <p>After you terminate an instance, you can no longer connect to it, and it can't be recovered. All attached Amazon EBS volumes that are configured to be deleted on termination are also permanently deleted and can't be recovered. All data stored on instance store volumes is permanently lost. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-ec2-instance-termination-works.html\"> How instance termination works</a>.</p> <p>Before you terminate an instance, ensure that you have backed up all data that you need to retain after the termination to persistent storage.</p> </important> <p class=\"title\"> <b>Restrictions</b> </p> <ul> <li> <p>You can delete up to 25 fleets of type <code>instant</code> in a single request.</p> </li> <li> <p>You can delete up to 100 fleets of type <code>maintain</code> or <code>request</code> in a single request.</p> </li> <li> <p>You can delete up to 125 fleets in a single request, provided you do not exceed the quota for each fleet type, as specified above.</p> </li> <li> <p>If you exceed the specified number of fleets to delete, no fleets are deleted.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/delete-fleet.html\">Delete an EC2 Fleet request and the instances in the fleet</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DeleteFlowLogs":{
       "name":"DeleteFlowLogs",
@@ -1555,6 +1695,16 @@
       "output":{"shape":"DeleteFpgaImageResult"},
       "documentation":"<p>Deletes the specified Amazon FPGA Image (AFI).</p>"
     },
+    "DeleteImageUsageReport":{
+      "name":"DeleteImageUsageReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteImageUsageReportRequest"},
+      "output":{"shape":"DeleteImageUsageReportResult"},
+      "documentation":"<p>Deletes the specified image usage report.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html\">View your AMI usage</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "DeleteInstanceConnectEndpoint":{
       "name":"DeleteInstanceConnectEndpoint",
       "http":{
@@ -1602,7 +1752,7 @@
       },
       "input":{"shape":"DeleteIpamExternalResourceVerificationTokenRequest"},
       "output":{"shape":"DeleteIpamExternalResourceVerificationTokenResult"},
-      "documentation":"<p>Delete a verification token. A verification token is an Amazon Web Services-generated random value that you can use to prove ownership of an external resource. For example, you can use a verification token to validate that you control a public IP address range when you bring an IP address range to Amazon Web Services (BYOIP). </p>"
+      "documentation":"<p>Delete a verification token.</p> <p>A verification token is an Amazon Web Services-generated random value that you can use to prove ownership of an external resource. For example, you can use a verification token to validate that you control a public IP address range when you bring an IP address range to Amazon Web Services (BYOIP). </p>"
     },
     "DeleteIpamPool":{
       "name":"DeleteIpamPool",
@@ -1614,6 +1764,26 @@
       "output":{"shape":"DeleteIpamPoolResult"},
       "documentation":"<p>Delete an IPAM pool.</p> <note> <p>You cannot delete an IPAM pool if there are allocations in it or CIDRs provisioned to it. To release allocations, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html\">ReleaseIpamPoolAllocation</a>. To deprovision pool CIDRs, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html\">DeprovisionIpamPoolCidr</a>.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/delete-pool-ipam.html\">Delete a pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>"
     },
+    "DeleteIpamPrefixListResolver":{
+      "name":"DeleteIpamPrefixListResolver",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteIpamPrefixListResolverRequest"},
+      "output":{"shape":"DeleteIpamPrefixListResolverResult"},
+      "documentation":"<p>Deletes an IPAM prefix list resolver. Before deleting a resolver, you must first delete all resolver targets associated with it.</p>"
+    },
+    "DeleteIpamPrefixListResolverTarget":{
+      "name":"DeleteIpamPrefixListResolverTarget",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteIpamPrefixListResolverTargetRequest"},
+      "output":{"shape":"DeleteIpamPrefixListResolverTargetResult"},
+      "documentation":"<p>Deletes an IPAM prefix list resolver target. This removes the association between the resolver and the managed prefix list, stopping automatic CIDR synchronization.</p> <p>For more information about IPAM prefix list resolver, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/automate-prefix-list-updates.html\">Automate prefix list updates with IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>"
+    },
     "DeleteIpamResourceDiscovery":{
       "name":"DeleteIpamResourceDiscovery",
       "http":{
@@ -1662,7 +1832,7 @@
       },
       "input":{"shape":"DeleteLaunchTemplateVersionsRequest"},
       "output":{"shape":"DeleteLaunchTemplateVersionsResult"},
-      "documentation":"<p>Deletes one or more versions of a launch template.</p> <p>You can't delete the default version of a launch template; you must first assign a different version as the default. If the default version is the only version for the launch template, you must delete the entire launch template using <a>DeleteLaunchTemplate</a>.</p> <p>You can delete up to 200 launch template versions in a single request. To delete more than 200 versions in a single request, use <a>DeleteLaunchTemplate</a>, which deletes the launch template and all of its versions.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-launch-template-versions.html#delete-launch-template-version\">Delete a launch template version</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Deletes one or more versions of a launch template.</p> <p>You can't delete the default version of a launch template; you must first assign a different version as the default. If the default version is the only version for the launch template, you must delete the entire launch template using <a>DeleteLaunchTemplate</a>.</p> <p>You can delete up to 200 launch template versions in a single request. To delete more than 200 versions in a single request, use <a>DeleteLaunchTemplate</a>, which deletes the launch template and all of its versions.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/delete-launch-template.html#delete-launch-template-version\">Delete a launch template version</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DeleteLocalGatewayRoute":{
       "name":"DeleteLocalGatewayRoute",
@@ -1704,6 +1874,26 @@
       "output":{"shape":"DeleteLocalGatewayRouteTableVpcAssociationResult"},
       "documentation":"<p>Deletes the specified association between a VPC and local gateway route table.</p>"
     },
+    "DeleteLocalGatewayVirtualInterface":{
+      "name":"DeleteLocalGatewayVirtualInterface",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteLocalGatewayVirtualInterfaceRequest"},
+      "output":{"shape":"DeleteLocalGatewayVirtualInterfaceResult"},
+      "documentation":"<p>Deletes the specified local gateway virtual interface.</p>"
+    },
+    "DeleteLocalGatewayVirtualInterfaceGroup":{
+      "name":"DeleteLocalGatewayVirtualInterfaceGroup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteLocalGatewayVirtualInterfaceGroupRequest"},
+      "output":{"shape":"DeleteLocalGatewayVirtualInterfaceGroupResult"},
+      "documentation":"<p>Delete the specified local gateway interface group.</p>"
+    },
     "DeleteManagedPrefixList":{
       "name":"DeleteManagedPrefixList",
       "http":{
@@ -1839,6 +2029,36 @@
       "input":{"shape":"DeleteRouteRequest"},
       "documentation":"<p>Deletes the specified route from the specified route table.</p>"
     },
+    "DeleteRouteServer":{
+      "name":"DeleteRouteServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteRouteServerRequest"},
+      "output":{"shape":"DeleteRouteServerResult"},
+      "documentation":"<p>Deletes the specified route server.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "DeleteRouteServerEndpoint":{
+      "name":"DeleteRouteServerEndpoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteRouteServerEndpointRequest"},
+      "output":{"shape":"DeleteRouteServerEndpointResult"},
+      "documentation":"<p>Deletes the specified route server endpoint.</p> <p>A route server endpoint is an Amazon Web Services-managed component inside a subnet that facilitates <a href=\"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\">BGP (Border Gateway Protocol)</a> connections between your route server and your BGP peers.</p>"
+    },
+    "DeleteRouteServerPeer":{
+      "name":"DeleteRouteServerPeer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteRouteServerPeerRequest"},
+      "output":{"shape":"DeleteRouteServerPeerResult"},
+      "documentation":"<p>Deletes the specified BGP peer from a route server.</p> <p>A route server peer is a session between a route server endpoint and the device deployed in Amazon Web Services (such as a firewall appliance or other network security function running on an EC2 instance). The device must meet these requirements:</p> <ul> <li> <p>Have an elastic network interface in the VPC</p> </li> <li> <p>Support BGP (Border Gateway Protocol)</p> </li> <li> <p>Can initiate BGP sessions</p> </li> </ul>"
+    },
     "DeleteRouteTable":{
       "name":"DeleteRouteTable",
       "http":{
@@ -1865,7 +2085,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"DeleteSnapshotRequest"},
-      "documentation":"<p>Deletes the specified snapshot.</p> <p>When you make periodic snapshots of a volume, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the volume.</p> <p>You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first de-register the AMI before you can delete the snapshot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html\">Delete an Amazon EBS snapshot</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified snapshot.</p> <p>When you make periodic snapshots of a volume, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the volume.</p> <p>You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first deregister the AMI before you can delete the snapshot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html\">Delete an Amazon EBS snapshot</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "DeleteSpotDatafeedSubscription":{
       "name":"DeleteSpotDatafeedSubscription",
@@ -2197,7 +2417,7 @@
       },
       "input":{"shape":"DeprovisionByoipCidrRequest"},
       "output":{"shape":"DeprovisionByoipCidrResult"},
-      "documentation":"<p>Releases the specified address range that you provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and deletes the corresponding address pool.</p> <p>Before you can release an address range, you must stop advertising it using <a>WithdrawByoipCidr</a> and you must not have any IP addresses allocated from its address range.</p>"
+      "documentation":"<p>Releases the specified address range that you provisioned for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and deletes the corresponding address pool.</p> <p>Before you can release an address range, you must stop advertising it and you must not have any IP addresses allocated from its address range.</p>"
     },
     "DeprovisionIpamByoasn":{
       "name":"DeprovisionIpamByoasn",
@@ -2236,7 +2456,8 @@
         "requestUri":"/"
       },
       "input":{"shape":"DeregisterImageRequest"},
-      "documentation":"<p>Deregisters the specified AMI. After you deregister an AMI, it can't be used to launch new instances.</p> <p>If you deregister an AMI that matches a Recycle Bin retention rule, the AMI is retained in the Recycle Bin for the specified retention period. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html\">Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you deregister an AMI, it doesn't affect any instances that you've already launched from the AMI. You'll continue to incur usage costs for those instances until you terminate them.</p> <p>When you deregister an Amazon EBS-backed AMI, it doesn't affect the snapshot that was created for the root volume of the instance during the AMI creation process. When you deregister an instance store-backed AMI, it doesn't affect the files that you uploaded to Amazon S3 when you created the AMI.</p>"
+      "output":{"shape":"DeregisterImageResult"},
+      "documentation":"<p>Deregisters the specified AMI. A deregistered AMI can't be used to launch new instances.</p> <p>If a deregistered EBS-backed AMI matches a Recycle Bin retention rule, it moves to the Recycle Bin for the specified retention period. It can be restored before its retention period expires, after which it is permanently deleted. If the deregistered AMI doesn't match a retention rule, it is permanently deleted immediately. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html\">Recover deleted Amazon EBS snapshots and EBS-backed AMIs with Recycle Bin</a> in the <i>Amazon EBS User Guide</i>.</p> <p>When deregistering an EBS-backed AMI, you can optionally delete its associated snapshots at the same time. However, if a snapshot is associated with multiple AMIs, it won't be deleted even if specified for deletion, although the AMI will still be deregistered.</p> <p>Deregistering an AMI does not delete the following:</p> <ul> <li> <p>Instances already launched from the AMI. You'll continue to incur usage costs for the instances until you terminate them.</p> </li> <li> <p>For EBS-backed AMIs: Snapshots that are associated with multiple AMIs. You'll continue to incur snapshot storage costs.</p> </li> <li> <p>For instance store-backed AMIs: The files uploaded to Amazon S3 during AMI creation. You'll continue to incur S3 storage costs.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html\">Deregister an Amazon EC2 AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DeregisterInstanceEventNotificationAttributes":{
       "name":"DeregisterInstanceEventNotificationAttributes",
@@ -2326,7 +2547,7 @@
       },
       "input":{"shape":"DescribeAvailabilityZonesRequest"},
       "output":{"shape":"DescribeAvailabilityZonesResult"},
-      "documentation":"<p>Describes the Availability Zones, Local Zones, and Wavelength Zones that are available to you. If there is an event impacting a zone, you can use this request to view the state and any provided messages for that zone.</p> <p>For more information about Availability Zones, Local Zones, and Wavelength Zones, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html\">Regions and zones</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
+      "documentation":"<p>Describes the Availability Zones, Local Zones, and Wavelength Zones that are available to you.</p> <p>For more information about Availability Zones, Local Zones, and Wavelength Zones, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html\">Regions and zones</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
     "DescribeAwsNetworkPerformanceMetricSubscriptions":{
       "name":"DescribeAwsNetworkPerformanceMetricSubscriptions",
@@ -2356,7 +2577,7 @@
       },
       "input":{"shape":"DescribeByoipCidrsRequest"},
       "output":{"shape":"DescribeByoipCidrsResult"},
-      "documentation":"<p>Describes the IP address ranges that were specified in calls to <a>ProvisionByoipCidr</a>.</p> <p>To describe the address pools that were created when you provisioned the address ranges, use <a>DescribePublicIpv4Pools</a> or <a>DescribeIpv6Pools</a>.</p>"
+      "documentation":"<p>Describes the IP address ranges that were provisioned for use with Amazon Web Services resources through through bring your own IP addresses (BYOIP).</p>"
     },
     "DescribeCapacityBlockExtensionHistory":{
       "name":"DescribeCapacityBlockExtensionHistory",
@@ -2386,7 +2607,37 @@
       },
       "input":{"shape":"DescribeCapacityBlockOfferingsRequest"},
       "output":{"shape":"DescribeCapacityBlockOfferingsResult"},
-      "documentation":"<p>Describes Capacity Block offerings available for purchase in the Amazon Web Services Region that you're currently using. With Capacity Blocks, you purchase a specific instance type for a period of time.</p>"
+      "documentation":"<p>Describes Capacity Block offerings available for purchase in the Amazon Web Services Region that you're currently using. With Capacity Blocks, you can purchase a specific GPU instance type or EC2 UltraServer for a period of time.</p> <p>To search for an available Capacity Block offering, you specify a reservation duration and instance count.</p>"
+    },
+    "DescribeCapacityBlockStatus":{
+      "name":"DescribeCapacityBlockStatus",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCapacityBlockStatusRequest"},
+      "output":{"shape":"DescribeCapacityBlockStatusResult"},
+      "documentation":"<p>Describes the availability of capacity for the specified Capacity blocks, or all of your Capacity Blocks.</p>"
+    },
+    "DescribeCapacityBlocks":{
+      "name":"DescribeCapacityBlocks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCapacityBlocksRequest"},
+      "output":{"shape":"DescribeCapacityBlocksResult"},
+      "documentation":"<p>Describes details about Capacity Blocks in the Amazon Web Services Region that you're currently using.</p>"
+    },
+    "DescribeCapacityManagerDataExports":{
+      "name":"DescribeCapacityManagerDataExports",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCapacityManagerDataExportsRequest"},
+      "output":{"shape":"DescribeCapacityManagerDataExportsResult"},
+      "documentation":"<p> Describes one or more Capacity Manager data export configurations. Returns information about export settings, delivery status, and recent export activity. </p>"
     },
     "DescribeCapacityReservationBillingRequests":{
       "name":"DescribeCapacityReservationBillingRequests",
@@ -2408,6 +2659,16 @@
       "output":{"shape":"DescribeCapacityReservationFleetsResult"},
       "documentation":"<p>Describes one or more Capacity Reservation Fleets.</p>"
     },
+    "DescribeCapacityReservationTopology":{
+      "name":"DescribeCapacityReservationTopology",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCapacityReservationTopologyRequest"},
+      "output":{"shape":"DescribeCapacityReservationTopologyResult"},
+      "documentation":"<p>Describes a tree-based hierarchy that represents the physical host placement of your pending or active Capacity Reservations within an Availability Zone or Local Zone. You can use this information to determine the relative proximity of your capacity within the Amazon Web Services network before it is launched and use this information to allocate capacity together to support your tightly coupled workloads.</p> <p>Capacity Reservation topology is supported for specific instance types only. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology-prerequisites.html\">Prerequisites for Amazon EC2 instance topology</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>The Amazon EC2 API follows an eventual consistency model due to the distributed nature of the system supporting it. As a result, when you call the DescribeCapacityReservationTopology API command immediately after launching instances, the response might return a <code>null</code> value for <code>capacityBlockId</code> because the data might not have fully propagated across all subsystems. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html\">Eventual consistency in the Amazon EC2 API</a> in the <i>Amazon EC2 Developer Guide</i>.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology.html\">Amazon EC2 topology</a> in the <i>Amazon EC2 User Guide</i>.</p> <p/>"
+    },
     "DescribeCapacityReservations":{
       "name":"DescribeCapacityReservations",
       "http":{
@@ -2728,6 +2989,36 @@
       "output":{"shape":"ImageAttribute"},
       "documentation":"<p>Describes the specified attribute of the specified AMI. You can specify only one attribute at a time.</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
+    "DescribeImageReferences":{
+      "name":"DescribeImageReferences",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeImageReferencesRequest"},
+      "output":{"shape":"DescribeImageReferencesResult"},
+      "documentation":"<p>Describes your Amazon Web Services resources that are referencing the specified images.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-ami-references.html\">Identify your resources referencing specified AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
+    "DescribeImageUsageReportEntries":{
+      "name":"DescribeImageUsageReportEntries",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeImageUsageReportEntriesRequest"},
+      "output":{"shape":"DescribeImageUsageReportEntriesResult"},
+      "documentation":"<p>Describes the entries in image usage reports, showing how your images are used across other Amazon Web Services accounts.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html\">View your AMI usage</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
+    "DescribeImageUsageReports":{
+      "name":"DescribeImageUsageReports",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeImageUsageReportsRequest"},
+      "output":{"shape":"DescribeImageUsageReportsResult"},
+      "documentation":"<p>Describes the configuration and status of image usage reports, filtered by report IDs or image IDs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html\">View your AMI usage</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "DescribeImages":{
       "name":"DescribeImages",
       "http":{
@@ -2736,7 +3027,7 @@
       },
       "input":{"shape":"DescribeImagesRequest"},
       "output":{"shape":"DescribeImagesResult"},
-      "documentation":"<p>Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of the images available to you.</p> <p>The images available to you include public images, private images that you own, and private images owned by other Amazon Web Services accounts for which you have explicit launch permissions.</p> <p>Recently deregistered images appear in the returned results for a short interval and then return empty results. After all instances that reference a deregistered AMI are terminated, specifying the ID of the image will eventually return an error indicating that the AMI ID cannot be found.</p> <p>When Allowed AMIs is set to <code>enabled</code>, only allowed images are returned in the results, with the <code>imageAllowed</code> field set to <code>true</code> for each image. In <code>audit-mode</code>, the <code>imageAllowed</code> field is set to <code>true</code> for images that meet the account's Allowed AMIs criteria, and <code>false</code> for images that don't meet the criteria. For more information, see <a>EnableAllowedImagesSettings</a>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
+      "documentation":"<p>Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of the images available to you.</p> <p>The images available to you include public images, private images that you own, and private images owned by other Amazon Web Services accounts for which you have explicit launch permissions.</p> <p>Recently deregistered images appear in the returned results for a short interval and then return empty results. After all instances that reference a deregistered AMI are terminated, specifying the ID of the image will eventually return an error indicating that the AMI ID cannot be found.</p> <p>When Allowed AMIs is set to <code>enabled</code>, only allowed images are returned in the results, with the <code>imageAllowed</code> field set to <code>true</code> for each image. In <code>audit-mode</code>, the <code>imageAllowed</code> field is set to <code>true</code> for images that meet the account's Allowed AMIs criteria, and <code>false</code> for images that don't meet the criteria. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html\">Allowed AMIs</a>.</p> <p>The Amazon EC2 API follows an eventual consistency model. This means that the result of an API command you run that creates or modifies resources might not be immediately available to all subsequent commands you run. For guidance on how to manage eventual consistency, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html\">Eventual consistency in the Amazon EC2 API</a> in the <i>Amazon EC2 Developer Guide</i>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
     "DescribeImportImageTasks":{
       "name":"DescribeImportImageTasks",
@@ -2766,7 +3057,7 @@
       },
       "input":{"shape":"DescribeInstanceAttributeRequest"},
       "output":{"shape":"InstanceAttribute"},
-      "documentation":"<p>Describes the specified attribute of the specified instance. You can specify only one attribute at a time. Valid attribute values are: <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>userData</code> | <code>disableApiTermination</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>rootDeviceName</code> | <code>blockDeviceMapping</code> | <code>productCodes</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> </p>"
+      "documentation":"<p>Describes the specified attribute of the specified instance. You can specify only one attribute at a time. </p>"
     },
     "DescribeInstanceConnectEndpoints":{
       "name":"DescribeInstanceConnectEndpoints",
@@ -2826,7 +3117,7 @@
       },
       "input":{"shape":"DescribeInstanceStatusRequest"},
       "output":{"shape":"DescribeInstanceStatusResult"},
-      "documentation":"<p>Describes the status of the specified instances or all of your instances. By default, only running instances are described, unless you specifically indicate to return the status of all instances.</p> <p>Instance status includes the following components:</p> <ul> <li> <p> <b>Status checks</b> - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html\">Status checks for your instances</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html\">Troubleshoot instances with failed status checks</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <b>Scheduled events</b> - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html\">Scheduled events for your instances</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <b>Instance state</b> - You can manage your instances from the moment you launch them through their termination. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> </ul> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
+      "documentation":"<p>Describes the status of the specified instances or all of your instances. By default, only running instances are described, unless you specifically indicate to return the status of all instances.</p> <p>Instance status includes the following components:</p> <ul> <li> <p> <b>Status checks</b> - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html\">Status checks for your instances</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html\">Troubleshoot instances with failed status checks</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <b>Scheduled events</b> - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html\">Scheduled events for your instances</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <b>Instance state</b> - You can manage your instances from the moment you launch them through their termination. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> </ul> <p>The Amazon EC2 API follows an eventual consistency model. This means that the result of an API command you run that creates or modifies resources might not be immediately available to all subsequent commands you run. For guidance on how to manage eventual consistency, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html\">Eventual consistency in the Amazon EC2 API</a> in the <i>Amazon EC2 Developer Guide</i>.</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
     "DescribeInstanceTopology":{
       "name":"DescribeInstanceTopology",
@@ -2836,7 +3127,7 @@
       },
       "input":{"shape":"DescribeInstanceTopologyRequest"},
       "output":{"shape":"DescribeInstanceTopologyResult"},
-      "documentation":"<p>Describes a tree-based hierarchy that represents the physical host placement of your EC2 instances within an Availability Zone or Local Zone. You can use this information to determine the relative proximity of your EC2 instances within the Amazon Web Services network to support your tightly coupled workloads.</p> <p class=\"title\"> <b>Limitations</b> </p> <ul> <li> <p>Supported zones</p> <ul> <li> <p>Availability Zone</p> </li> <li> <p>Local Zone</p> </li> </ul> </li> <li> <p>Supported instance types</p> <ul> <li> <p> <code>hpc6a.48xlarge</code> | <code>hpc6id.32xlarge</code> | <code>hpc7a.12xlarge</code> | <code>hpc7a.24xlarge</code> | <code>hpc7a.48xlarge</code> | <code>hpc7a.96xlarge</code> | <code>hpc7g.4xlarge</code> | <code>hpc7g.8xlarge</code> | <code>hpc7g.16xlarge</code> </p> </li> <li> <p> <code>p3dn.24xlarge</code> | <code>p4d.24xlarge</code> | <code>p4de.24xlarge</code> | <code>p5.48xlarge</code> | <code>p5e.48xlarge</code> | <code>p5en.48xlarge</code> </p> </li> <li> <p> <code>trn1.2xlarge</code> | <code>trn1.32xlarge</code> | <code>trn1n.32xlarge</code> </p> </li> </ul> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology.html\">Amazon EC2 instance topology</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Describes a tree-based hierarchy that represents the physical host placement of your EC2 instances within an Availability Zone or Local Zone. You can use this information to determine the relative proximity of your EC2 instances within the Amazon Web Services network to support your tightly coupled workloads.</p> <p>Instance topology is supported for specific instance types only. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology-prerequisites.html\">Prerequisites for Amazon EC2 instance topology</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>The Amazon EC2 API follows an eventual consistency model due to the distributed nature of the system supporting it. As a result, when you call the DescribeInstanceTopology API command immediately after launching instances, the response might return a <code>null</code> value for <code>capacityBlockId</code> because the data might not have fully propagated across all subsystems. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html\">Eventual consistency in the Amazon EC2 API</a> in the <i>Amazon EC2 Developer Guide</i>.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology.html\">Amazon EC2 topology</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DescribeInstanceTypeOfferings":{
       "name":"DescribeInstanceTypeOfferings",
@@ -2866,7 +3157,7 @@
       },
       "input":{"shape":"DescribeInstancesRequest"},
       "output":{"shape":"DescribeInstancesResult"},
-      "documentation":"<p>Describes the specified instances or all instances.</p> <p>If you specify instance IDs, the output includes information for only the specified instances. If you specify filters, the output includes information for only those instances that meet the filter criteria. If you do not specify instance IDs or filters, the output includes information for all instances, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully.</p> <p>If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the output.</p> <p>Recently terminated instances might appear in the returned results. This interval is usually less than one hour.</p> <p>If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
+      "documentation":"<p>Describes the specified instances or all instances.</p> <p>If you specify instance IDs, the output includes information for only the specified instances. If you specify filters, the output includes information for only those instances that meet the filter criteria. If you do not specify instance IDs or filters, the output includes information for all instances, which can affect performance. We recommend that you use pagination to ensure that the operation returns quickly and successfully.</p> <p>If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the output.</p> <p>Recently terminated instances might appear in the returned results. This interval is usually less than one hour.</p> <p>If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.</p> <p>The Amazon EC2 API follows an eventual consistency model. This means that the result of an API command you run that creates or modifies resources might not be immediately available to all subsequent commands you run. For guidance on how to manage eventual consistency, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html\">Eventual consistency in the Amazon EC2 API</a> in the <i>Amazon EC2 Developer Guide</i>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
     "DescribeInternetGateways":{
       "name":"DescribeInternetGateways",
@@ -2908,6 +3199,26 @@
       "output":{"shape":"DescribeIpamPoolsResult"},
       "documentation":"<p>Get information about your IPAM pools.</p>"
     },
+    "DescribeIpamPrefixListResolverTargets":{
+      "name":"DescribeIpamPrefixListResolverTargets",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeIpamPrefixListResolverTargetsRequest"},
+      "output":{"shape":"DescribeIpamPrefixListResolverTargetsResult"},
+      "documentation":"<p>Describes one or more IPAM prefix list resolver Targets. Use this operation to view the configuration and status of resolver targets.</p>"
+    },
+    "DescribeIpamPrefixListResolvers":{
+      "name":"DescribeIpamPrefixListResolvers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeIpamPrefixListResolversRequest"},
+      "output":{"shape":"DescribeIpamPrefixListResolversResult"},
+      "documentation":"<p>Describes one or more IPAM prefix list resolvers. Use this operation to view the configuration, status, and properties of your resolvers.</p>"
+    },
     "DescribeIpamResourceDiscoveries":{
       "name":"DescribeIpamResourceDiscoveries",
       "http":{
@@ -3068,6 +3379,16 @@
       "output":{"shape":"DescribeMacHostsResult"},
       "documentation":"<p>Describes the specified EC2 Mac Dedicated Host or all of your EC2 Mac Dedicated Hosts.</p>"
     },
+    "DescribeMacModificationTasks":{
+      "name":"DescribeMacModificationTasks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMacModificationTasksRequest"},
+      "output":{"shape":"DescribeMacModificationTasksResult"},
+      "documentation":"<p>Describes a System Integrity Protection (SIP) modification task or volume ownership delegation task for an Amazon EC2 Mac instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-configure\">Configure SIP for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "DescribeManagedPrefixLists":{
       "name":"DescribeManagedPrefixLists",
       "http":{
@@ -3076,7 +3397,7 @@
       },
       "input":{"shape":"DescribeManagedPrefixListsRequest"},
       "output":{"shape":"DescribeManagedPrefixListsResult"},
-      "documentation":"<p>Describes your managed prefix lists and any Amazon Web Services-managed prefix lists.</p> <p>To view the entries for your prefix list, use <a>GetManagedPrefixListEntries</a>.</p>"
+      "documentation":"<p>Describes your managed prefix lists and any Amazon Web Services-managed prefix lists.</p>"
     },
     "DescribeMovingAddresses":{
       "name":"DescribeMovingAddresses",
@@ -3176,7 +3497,17 @@
       },
       "input":{"shape":"DescribeNetworkInterfacesRequest"},
       "output":{"shape":"DescribeNetworkInterfacesResult"},
-      "documentation":"<p>Describes one or more of your network interfaces.</p> <p>If you have a large number of network interfaces, the operation fails unless you use pagination or one of the following filters: <code>group-id</code>, <code>mac-address</code>, <code>private-dns-name</code>, <code>private-ip-address</code>, <code>private-dns-name</code>, <code>subnet-id</code>, or <code>vpc-id</code>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important>"
+      "documentation":"<p>Describes the specified network interfaces or all your network interfaces.</p> <p>If you have a large number of network interfaces, the operation fails unless you use pagination or one of the following filters: <code>group-id</code>, <code>mac-address</code>, <code>private-dns-name</code>, <code>private-ip-address</code>, <code>subnet-id</code>, or <code>vpc-id</code>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important>"
+    },
+    "DescribeOutpostLags":{
+      "name":"DescribeOutpostLags",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeOutpostLagsRequest"},
+      "output":{"shape":"DescribeOutpostLagsResult"},
+      "documentation":"<p>Describes the Outposts link aggregation groups (LAGs).</p> <note> <p>LAGs are only available for second-generation Outposts racks at this time.</p> </note>"
     },
     "DescribePlacementGroups":{
       "name":"DescribePlacementGroups",
@@ -3196,7 +3527,7 @@
       },
       "input":{"shape":"DescribePrefixListsRequest"},
       "output":{"shape":"DescribePrefixListsResult"},
-      "documentation":"<p>Describes available Amazon Web Services services in a prefix list format, which includes the prefix list name and prefix list ID of the service and the IP address range for the service.</p> <p>We recommend that you use <a>DescribeManagedPrefixLists</a> instead.</p>"
+      "documentation":"<p>Describes available Amazon Web Services services in a prefix list format, which includes the prefix list name and prefix list ID of the service and the IP address range for the service.</p>"
     },
     "DescribePrincipalIdFormat":{
       "name":"DescribePrincipalIdFormat",
@@ -3278,6 +3609,36 @@
       "output":{"shape":"DescribeReservedInstancesOfferingsResult"},
       "documentation":"<p>Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used.</p> <p>If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html\">Sell in the Reserved Instance Marketplace</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
+    "DescribeRouteServerEndpoints":{
+      "name":"DescribeRouteServerEndpoints",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeRouteServerEndpointsRequest"},
+      "output":{"shape":"DescribeRouteServerEndpointsResult"},
+      "documentation":"<p>Describes one or more route server endpoints.</p> <p>A route server endpoint is an Amazon Web Services-managed component inside a subnet that facilitates <a href=\"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\">BGP (Border Gateway Protocol)</a> connections between your route server and your BGP peers.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "DescribeRouteServerPeers":{
+      "name":"DescribeRouteServerPeers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeRouteServerPeersRequest"},
+      "output":{"shape":"DescribeRouteServerPeersResult"},
+      "documentation":"<p>Describes one or more route server peers.</p> <p>A route server peer is a session between a route server endpoint and the device deployed in Amazon Web Services (such as a firewall appliance or other network security function running on an EC2 instance). The device must meet these requirements:</p> <ul> <li> <p>Have an elastic network interface in the VPC</p> </li> <li> <p>Support BGP (Border Gateway Protocol)</p> </li> <li> <p>Can initiate BGP sessions</p> </li> </ul> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "DescribeRouteServers":{
+      "name":"DescribeRouteServers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeRouteServersRequest"},
+      "output":{"shape":"DescribeRouteServersResult"},
+      "documentation":"<p>Describes one or more route servers.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "DescribeRouteTables":{
       "name":"DescribeRouteTables",
       "http":{
@@ -3348,6 +3709,16 @@
       "output":{"shape":"DescribeSecurityGroupsResult"},
       "documentation":"<p>Describes the specified security groups or all of your security groups.</p>"
     },
+    "DescribeServiceLinkVirtualInterfaces":{
+      "name":"DescribeServiceLinkVirtualInterfaces",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeServiceLinkVirtualInterfacesRequest"},
+      "output":{"shape":"DescribeServiceLinkVirtualInterfacesResult"},
+      "documentation":"<p>Describes the Outpost service link virtual interfaces.</p>"
+    },
     "DescribeSnapshotAttribute":{
       "name":"DescribeSnapshotAttribute",
       "http":{
@@ -3376,7 +3747,7 @@
       },
       "input":{"shape":"DescribeSnapshotsRequest"},
       "output":{"shape":"DescribeSnapshotsResult"},
-      "documentation":"<p>Describes the specified EBS snapshots available to you or all of the EBS snapshots available to you.</p> <p>The snapshots available to you include public snapshots, private snapshots that you own, and private snapshots owned by other Amazon Web Services accounts for which you have explicit create volume permissions.</p> <p>The create volume permissions fall into the following categories:</p> <ul> <li> <p> <i>public</i>: The owner of the snapshot granted create volume permissions for the snapshot to the <code>all</code> group. All Amazon Web Services accounts have create volume permissions for these snapshots.</p> </li> <li> <p> <i>explicit</i>: The owner of the snapshot granted create volume permissions to a specific Amazon Web Services account.</p> </li> <li> <p> <i>implicit</i>: An Amazon Web Services account has implicit create volume permissions for all snapshots it owns.</p> </li> </ul> <p>The list of snapshots returned can be filtered by specifying snapshot IDs, snapshot owners, or Amazon Web Services accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.</p> <p>If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.</p> <p>If you specify one or more snapshot owners using the <code>OwnerIds</code> option, only snapshots from the specified owners and for which you have access are returned. The results can include the Amazon Web Services account IDs of the specified owners, <code>amazon</code> for snapshots owned by Amazon, or <code>self</code> for snapshots that you own.</p> <p>If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify Amazon Web Services account IDs (if you own the snapshots), <code>self</code> for snapshots for which you own or have explicit permissions, or <code>all</code> for public snapshots.</p> <p>If you are describing a long list of snapshots, we recommend that you paginate the output to make the list more manageable. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p> <p>To get the state of fast snapshot restores for a snapshot, use <a>DescribeFastSnapshotRestores</a>.</p> <p>For more information about EBS snapshots, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html\">Amazon EBS snapshots</a> in the <i>Amazon EBS User Guide</i>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important>"
+      "documentation":"<p>Describes the specified EBS snapshots available to you or all of the EBS snapshots available to you.</p> <p>The snapshots available to you include public snapshots, private snapshots that you own, and private snapshots owned by other Amazon Web Services accounts for which you have explicit create volume permissions.</p> <p>The create volume permissions fall into the following categories:</p> <ul> <li> <p> <i>public</i>: The owner of the snapshot granted create volume permissions for the snapshot to the <code>all</code> group. All Amazon Web Services accounts have create volume permissions for these snapshots.</p> </li> <li> <p> <i>explicit</i>: The owner of the snapshot granted create volume permissions to a specific Amazon Web Services account.</p> </li> <li> <p> <i>implicit</i>: An Amazon Web Services account has implicit create volume permissions for all snapshots it owns.</p> </li> </ul> <p>The list of snapshots returned can be filtered by specifying snapshot IDs, snapshot owners, or Amazon Web Services accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.</p> <p>If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.</p> <p>If you specify one or more snapshot owners using the <code>OwnerIds</code> option, only snapshots from the specified owners and for which you have access are returned. The results can include the Amazon Web Services account IDs of the specified owners, <code>amazon</code> for snapshots owned by Amazon, or <code>self</code> for snapshots that you own.</p> <p>If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify Amazon Web Services account IDs (if you own the snapshots), <code>self</code> for snapshots for which you own or have explicit permissions, or <code>all</code> for public snapshots.</p> <p>If you are describing a long list of snapshots, we recommend that you paginate the output to make the list more manageable. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p> <p>For more information about EBS snapshots, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html\">Amazon EBS snapshots</a> in the <i>Amazon EBS User Guide</i>.</p> <important> <p>We strongly recommend using only paginated requests. Unpaginated requests are susceptible to throttling and timeouts.</p> </important>"
     },
     "DescribeSpotDatafeedSubscription":{
       "name":"DescribeSpotDatafeedSubscription",
@@ -3456,7 +3827,7 @@
       },
       "input":{"shape":"DescribeStoreImageTasksRequest"},
       "output":{"shape":"DescribeStoreImageTasksResult"},
-      "documentation":"<p>Describes the progress of the AMI store tasks. You can describe the store tasks for specified AMIs. If you don't specify the AMIs, you get a paginated list of store tasks from the last 31 days.</p> <p>For each AMI task, the response indicates if the task is <code>InProgress</code>, <code>Completed</code>, or <code>Failed</code>. For tasks <code>InProgress</code>, the response shows the estimated progress as a percentage.</p> <p>Tasks are listed in reverse chronological order. Currently, only tasks from the past 31 days can be viewed.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using Amazon S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Describes the progress of the AMI store tasks. You can describe the store tasks for specified AMIs. If you don't specify the AMIs, you get a paginated list of store tasks from the last 31 days.</p> <p>For each AMI task, the response indicates if the task is <code>InProgress</code>, <code>Completed</code>, or <code>Failed</code>. For tasks <code>InProgress</code>, the response shows the estimated progress as a percentage.</p> <p>Tasks are listed in reverse chronological order. Currently, only tasks from the past 31 days can be viewed.</p> <p>To use this API, you must have the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions\">Permissions for storing and restoring AMIs using S3</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html\">Store and restore an AMI using S3</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DescribeSubnets":{
       "name":"DescribeSubnets",
@@ -3696,7 +4067,7 @@
       },
       "input":{"shape":"DescribeVolumeStatusRequest"},
       "output":{"shape":"DescribeVolumeStatusResult"},
-      "documentation":"<p>Describes the status of the specified volumes. Volume status provides the result of the checks performed on your volumes to determine events that can impair the performance of your volumes. The performance of a volume can be affected if an issue occurs on the volume's underlying host. If the volume's underlying host experiences a power outage or system issue, after the system is restored, there could be data inconsistencies on the volume. Volume events notify you if this occurs. Volume actions notify you if any action needs to be taken in response to the event.</p> <p>The <code>DescribeVolumeStatus</code> operation provides the following information about the specified volumes:</p> <p> <i>Status</i>: Reflects the current status of the volume. The possible values are <code>ok</code>, <code>impaired</code> , <code>warning</code>, or <code>insufficient-data</code>. If all checks pass, the overall status of the volume is <code>ok</code>. If the check fails, the overall status is <code>impaired</code>. If the status is <code>insufficient-data</code>, then the checks might still be taking place on your volume at the time. We recommend that you retry the request. For more information about volume status, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-status.html\">Monitor the status of your volumes</a> in the <i>Amazon EBS User Guide</i>.</p> <p> <i>Events</i>: Reflect the cause of a volume status and might require you to take action. For example, if your volume returns an <code>impaired</code> status, then the volume event might be <code>potential-data-inconsistency</code>. This means that your volume has been affected by an issue with the underlying host, has all I/O operations disabled, and might have inconsistent data.</p> <p> <i>Actions</i>: Reflect the actions you might have to take in response to an event. For example, if the status of the volume is <code>impaired</code> and the volume event shows <code>potential-data-inconsistency</code>, then the action shows <code>enable-volume-io</code>. This means that you may want to enable the I/O operations for the volume by calling the <a>EnableVolumeIO</a> action and then check the volume for data consistency.</p> <p>Volume status is based on the volume status checks, and does not reflect the volume state. Therefore, volume status does not indicate volumes in the <code>error</code> state (for example, when a volume is incapable of accepting I/O.)</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
+      "documentation":"<p>Describes the status of the specified volumes. Volume status provides the result of the checks performed on your volumes to determine events that can impair the performance of your volumes. The performance of a volume can be affected if an issue occurs on the volume's underlying host. If the volume's underlying host experiences a power outage or system issue, after the system is restored, there could be data inconsistencies on the volume. Volume events notify you if this occurs. Volume actions notify you if any action needs to be taken in response to the event.</p> <p>The <code>DescribeVolumeStatus</code> operation provides the following information about the specified volumes:</p> <p> <i>Status</i>: Reflects the current status of the volume. The possible values are <code>ok</code>, <code>impaired</code> , <code>warning</code>, or <code>insufficient-data</code>. If all checks pass, the overall status of the volume is <code>ok</code>. If the check fails, the overall status is <code>impaired</code>. If the status is <code>insufficient-data</code>, then the checks might still be taking place on your volume at the time. We recommend that you retry the request. For more information about volume status, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-status.html\">Monitor the status of your volumes</a> in the <i>Amazon EBS User Guide</i>.</p> <p> <i>Events</i>: Reflect the cause of a volume status and might require you to take action. For example, if your volume returns an <code>impaired</code> status, then the volume event might be <code>potential-data-inconsistency</code>. This means that your volume has been affected by an issue with the underlying host, has all I/O operations disabled, and might have inconsistent data.</p> <p> <i>Actions</i>: Reflect the actions you might have to take in response to an event. For example, if the status of the volume is <code>impaired</code> and the volume event shows <code>potential-data-inconsistency</code>, then the action shows <code>enable-volume-io</code>. This means that you may want to enable the I/O operations for the volume and then check the volume for data consistency. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/work_volumes_impaired.html\">Work with an impaired EBS volume</a>.</p> <p>Volume status is based on the volume status checks, and does not reflect the volume state. Therefore, volume status does not indicate volumes in the <code>error</code> state (for example, when a volume is incapable of accepting I/O.)</p> <note> <p>The order of the elements in the response, including those within nested structures, might vary. Applications should not assume the elements appear in a particular order.</p> </note>"
     },
     "DescribeVolumes":{
       "name":"DescribeVolumes",
@@ -3816,7 +4187,7 @@
       },
       "input":{"shape":"DescribeVpcEndpointServicePermissionsRequest"},
       "output":{"shape":"DescribeVpcEndpointServicePermissionsResult"},
-      "documentation":"<p>Describes the principals (service consumers) that are permitted to discover your VPC endpoint service.</p>"
+      "documentation":"<p>Describes the principals (service consumers) that are permitted to discover your VPC endpoint service. Principal ARNs with path components aren't supported.</p>"
     },
     "DescribeVpcEndpointServices":{
       "name":"DescribeVpcEndpointServices",
@@ -3924,7 +4295,7 @@
       },
       "input":{"shape":"DetachVolumeRequest"},
       "output":{"shape":"VolumeAttachment"},
-      "documentation":"<p>Detaches an EBS volume from an instance. Make sure to unmount any file systems on the device within your operating system before detaching the volume. Failure to do so can result in the volume becoming stuck in the <code>busy</code> state while detaching. If this happens, detachment can be delayed indefinitely until you unmount the volume, force detachment, reboot the instance, or all three. If an EBS volume is the root device of an instance, it can't be detached while the instance is running. To detach the root volume, stop the instance first.</p> <p>When a volume with an Amazon Web Services Marketplace product code is detached from an instance, the product code is no longer associated with the instance.</p> <p>You can't detach or force detach volumes that are attached to Amazon ECS or Fargate tasks. Attempting to do this results in the <code>UnsupportedOperationException</code> exception with the <code>Unable to detach volume attached to ECS tasks</code> error message.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-detaching-volume.html\">Detach an Amazon EBS volume</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Detaches an EBS volume from an instance. Make sure to unmount any file systems on the device within your operating system before detaching the volume. Failure to do so can result in the volume becoming stuck in the <code>busy</code> state while detaching. If this happens, detachment can be delayed indefinitely until you unmount the volume, force detachment, reboot the instance, or all three. If an EBS volume is the root device of an instance, it can't be detached while the instance is running. To detach the root volume, stop the instance first.</p> <p>When a volume with an Amazon Web Services Marketplace product code is detached from an instance, the product code is no longer associated with the instance.</p> <p>You can't detach or force detach volumes that are attached to Amazon Web Services-managed resources. Attempting to do this results in the <code>UnsupportedOperationException</code> exception.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-detaching-volume.html\">Detach an Amazon EBS volume</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "DetachVpnGateway":{
       "name":"DetachVpnGateway",
@@ -3965,6 +4336,16 @@
       "output":{"shape":"DisableAwsNetworkPerformanceMetricSubscriptionResult"},
       "documentation":"<p>Disables Infrastructure Performance metric subscriptions.</p>"
     },
+    "DisableCapacityManager":{
+      "name":"DisableCapacityManager",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisableCapacityManagerRequest"},
+      "output":{"shape":"DisableCapacityManagerResult"},
+      "documentation":"<p> Disables EC2 Capacity Manager for your account. This stops data ingestion and removes access to capacity analytics and optimization recommendations. Previously collected data is retained but no new data will be processed. </p>"
+    },
     "DisableEbsEncryptionByDefault":{
       "name":"DisableEbsEncryptionByDefault",
       "http":{
@@ -4013,7 +4394,7 @@
       },
       "input":{"shape":"DisableImageBlockPublicAccessRequest"},
       "output":{"shape":"DisableImageBlockPublicAccessResult"},
-      "documentation":"<p>Disables <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region. This removes the <i>block public access</i> restriction from your account. With the restriction removed, you can publicly share your AMIs in the specified Amazon Web Services Region.</p> <p>The API can take up to 10 minutes to configure this setting. During this time, if you run <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetImageBlockPublicAccessState.html\">GetImageBlockPublicAccessState</a>, the response will be <code>block-new-sharing</code>. When the API has completed the configuration, the response will be <code>unblocked</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-intro.html#block-public-access-to-amis\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Disables <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region. This removes the <i>block public access</i> restriction from your account. With the restriction removed, you can publicly share your AMIs in the specified Amazon Web Services Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DisableImageDeprecation":{
       "name":"DisableImageDeprecation",
@@ -4023,7 +4404,7 @@
       },
       "input":{"shape":"DisableImageDeprecationRequest"},
       "output":{"shape":"DisableImageDeprecationResult"},
-      "documentation":"<p>Cancels the deprecation of the specified AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html\">Deprecate an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Cancels the deprecation of the specified AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html\">Deprecate an Amazon EC2 AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DisableImageDeregistrationProtection":{
       "name":"DisableImageDeregistrationProtection",
@@ -4033,7 +4414,7 @@
       },
       "input":{"shape":"DisableImageDeregistrationProtectionRequest"},
       "output":{"shape":"DisableImageDeregistrationProtectionResult"},
-      "documentation":"<p>Disables deregistration protection for an AMI. When deregistration protection is disabled, the AMI can be deregistered.</p> <p>If you chose to include a 24-hour cooldown period when you enabled deregistration protection for the AMI, then, when you disable deregistration protection, you won’t immediately be able to deregister the AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html#ami-deregistration-protection\">Protect an AMI from deregistration</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Disables deregistration protection for an AMI. When deregistration protection is disabled, the AMI can be deregistered.</p> <p>If you chose to include a 24-hour cooldown period when you enabled deregistration protection for the AMI, then, when you disable deregistration protection, you won’t immediately be able to deregister the AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html\">Protect an Amazon EC2 AMI from deregistration</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "DisableIpamOrganizationAdminAccount":{
       "name":"DisableIpamOrganizationAdminAccount",
@@ -4045,6 +4426,16 @@
       "output":{"shape":"DisableIpamOrganizationAdminAccountResult"},
       "documentation":"<p>Disable the IPAM account. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html\">Enable integration with Organizations</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>"
     },
+    "DisableRouteServerPropagation":{
+      "name":"DisableRouteServerPropagation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisableRouteServerPropagationRequest"},
+      "output":{"shape":"DisableRouteServerPropagationResult"},
+      "documentation":"<p>Disables route propagation from a route server to a specified route table.</p> <p>When enabled, route server propagation installs the routes in the FIB on the route table you've specified. Route server supports IPv4 and IPv6 route propagation.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "DisableSerialConsoleAccess":{
       "name":"DisableSerialConsoleAccess",
       "http":{
@@ -4111,7 +4502,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"DisassociateAddressRequest"},
-      "documentation":"<p>Disassociates an Elastic IP address from the instance or network interface it's associated with.</p> <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.</p>"
+      "documentation":"<p>Disassociates an Elastic IP address from the instance or network interface it's associated with.</p> <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.</p> <p>An address cannot be disassociated if the all of the following conditions are met:</p> <ul> <li> <p>Network interface has a <code>publicDualStackDnsName</code> publicDnsName</p> </li> <li> <p>Public IPv4 address is the primary public IPv4 address</p> </li> <li> <p>Network interface only has one remaining public IPv4 address</p> </li> </ul>"
     },
     "DisassociateCapacityReservationBillingOwner":{
       "name":"DisassociateCapacityReservationBillingOwner",
@@ -4193,6 +4584,16 @@
       "output":{"shape":"DisassociateNatGatewayAddressResult"},
       "documentation":"<p>Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway. You cannot disassociate your primary EIP. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html#nat-gateway-edit-secondary\">Edit secondary IP address associations</a> in the <i>Amazon VPC User Guide</i>.</p> <p>While disassociating is in progress, you cannot associate/disassociate additional EIPs while the connections are being drained. You are, however, allowed to delete the NAT gateway.</p> <p>An EIP is released only at the end of MaxDrainDurationSeconds. It stays associated and supports the existing connections but does not support any new connections (new connections are distributed across the remaining associated EIPs). As the existing connections drain out, the EIPs (and the corresponding private IP addresses mapped to them) are released.</p>"
     },
+    "DisassociateRouteServer":{
+      "name":"DisassociateRouteServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateRouteServerRequest"},
+      "output":{"shape":"DisassociateRouteServerResult"},
+      "documentation":"<p>Disassociates a route server from a VPC.</p> <p>A route server association is the connection established between a route server and a VPC.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "DisassociateRouteTable":{
       "name":"DisassociateRouteTable",
       "http":{
@@ -4302,6 +4703,16 @@
       "output":{"shape":"EnableAwsNetworkPerformanceMetricSubscriptionResult"},
       "documentation":"<p>Enables Infrastructure Performance subscriptions.</p>"
     },
+    "EnableCapacityManager":{
+      "name":"EnableCapacityManager",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"EnableCapacityManagerRequest"},
+      "output":{"shape":"EnableCapacityManagerResult"},
+      "documentation":"<p> Enables EC2 Capacity Manager for your account. This starts data ingestion for your EC2 capacity usage across On-Demand, Spot, and Capacity Reservations. Initial data processing may take several hours to complete. </p>"
+    },
     "EnableEbsEncryptionByDefault":{
       "name":"EnableEbsEncryptionByDefault",
       "http":{
@@ -4310,7 +4721,7 @@
       },
       "input":{"shape":"EnableEbsEncryptionByDefaultRequest"},
       "output":{"shape":"EnableEbsEncryptionByDefaultResult"},
-      "documentation":"<p>Enables EBS encryption by default for your account in the current Region.</p> <p>After you enable encryption by default, the EBS volumes that you create are always encrypted, either using the default KMS key or the KMS key that you specified when you created each volume. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p> <p>You can specify the default KMS key for encryption by default using <a>ModifyEbsDefaultKmsKeyId</a> or <a>ResetEbsDefaultKmsKeyId</a>.</p> <p>Enabling encryption by default has no effect on the encryption status of your existing volumes.</p> <p>After you enable encryption by default, you can no longer launch instances using instance types that do not support encryption. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances\">Supported instance types</a>.</p>"
+      "documentation":"<p>Enables EBS encryption by default for your account in the current Region.</p> <p>After you enable encryption by default, the EBS volumes that you create are always encrypted, either using the default KMS key or the KMS key that you specified when you created each volume. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p> <p>Enabling encryption by default has no effect on the encryption status of your existing volumes.</p> <p>After you enable encryption by default, you can no longer launch instances using instance types that do not support encryption. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances\">Supported instance types</a>.</p>"
     },
     "EnableFastLaunch":{
       "name":"EnableFastLaunch",
@@ -4330,7 +4741,7 @@
       },
       "input":{"shape":"EnableFastSnapshotRestoresRequest"},
       "output":{"shape":"EnableFastSnapshotRestoresResult"},
-      "documentation":"<p>Enables fast snapshot restores for the specified snapshots in the specified Availability Zones.</p> <p>You get the full benefit of fast snapshot restores after they enter the <code>enabled</code> state. To get the current state of fast snapshot restores, use <a>DescribeFastSnapshotRestores</a>. To disable fast snapshot restores, use <a>DisableFastSnapshotRestores</a>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-fast-snapshot-restore.html\">Amazon EBS fast snapshot restore</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Enables fast snapshot restores for the specified snapshots in the specified Availability Zones.</p> <p>You get the full benefit of fast snapshot restores after they enter the <code>enabled</code> state.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-fast-snapshot-restore.html\">Amazon EBS fast snapshot restore</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "EnableImage":{
       "name":"EnableImage",
@@ -4340,7 +4751,7 @@
       },
       "input":{"shape":"EnableImageRequest"},
       "output":{"shape":"EnableImageResult"},
-      "documentation":"<p>Re-enables a disabled AMI. The re-enabled AMI is marked as <code>available</code> and can be used for instance launches, appears in describe operations, and can be shared. Amazon Web Services accounts, organizations, and Organizational Units that lost access to the AMI when it was disabled do not regain access automatically. Once the AMI is available, it can be shared with them again.</p> <p>Only the AMI owner can re-enable a disabled AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disable-an-ami.html\">Disable an AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Re-enables a disabled AMI. The re-enabled AMI is marked as <code>available</code> and can be used for instance launches, appears in describe operations, and can be shared. Amazon Web Services accounts, organizations, and Organizational Units that lost access to the AMI when it was disabled do not regain access automatically. Once the AMI is available, it can be shared with them again.</p> <p>Only the AMI owner can re-enable a disabled AMI.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disable-an-ami.html\">Disable an Amazon EC2 AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "EnableImageBlockPublicAccess":{
       "name":"EnableImageBlockPublicAccess",
@@ -4350,7 +4761,7 @@
       },
       "input":{"shape":"EnableImageBlockPublicAccessRequest"},
       "output":{"shape":"EnableImageBlockPublicAccessResult"},
-      "documentation":"<p>Enables <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region. This prevents the public sharing of your AMIs. However, if you already have public AMIs, they will remain publicly available.</p> <p>The API can take up to 10 minutes to configure this setting. During this time, if you run <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetImageBlockPublicAccessState.html\">GetImageBlockPublicAccessState</a>, the response will be <code>unblocked</code>. When the API has completed the configuration, the response will be <code>block-new-sharing</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-intro.html#block-public-access-to-amis\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Enables <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region. This prevents the public sharing of your AMIs. However, if you already have public AMIs, they will remain publicly available.</p> <p>The API can take up to 10 minutes to configure this setting. During this time, if you run <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetImageBlockPublicAccessState.html\">GetImageBlockPublicAccessState</a>, the response will be <code>unblocked</code>. When the API has completed the configuration, the response will be <code>block-new-sharing</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "EnableImageDeprecation":{
       "name":"EnableImageDeprecation",
@@ -4370,7 +4781,7 @@
       },
       "input":{"shape":"EnableImageDeregistrationProtectionRequest"},
       "output":{"shape":"EnableImageDeregistrationProtectionResult"},
-      "documentation":"<p>Enables deregistration protection for an AMI. When deregistration protection is enabled, the AMI can't be deregistered.</p> <p>To allow the AMI to be deregistered, you must first disable deregistration protection using <a>DisableImageDeregistrationProtection</a>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html#ami-deregistration-protection\">Protect an AMI from deregistration</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Enables deregistration protection for an AMI. When deregistration protection is enabled, the AMI can't be deregistered.</p> <p>To allow the AMI to be deregistered, you must first disable deregistration protection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html\">Protect an Amazon EC2 AMI from deregistration</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "EnableIpamOrganizationAdminAccount":{
       "name":"EnableIpamOrganizationAdminAccount",
@@ -4392,6 +4803,16 @@
       "output":{"shape":"EnableReachabilityAnalyzerOrganizationSharingResult"},
       "documentation":"<p>Establishes a trust relationship between Reachability Analyzer and Organizations. This operation must be performed by the management account for the organization.</p> <p>After you establish a trust relationship, a user in the management account or a delegated administrator account can run a cross-account analysis using resources from the member accounts.</p>"
     },
+    "EnableRouteServerPropagation":{
+      "name":"EnableRouteServerPropagation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"EnableRouteServerPropagationRequest"},
+      "output":{"shape":"EnableRouteServerPropagationResult"},
+      "documentation":"<p>Defines which route tables the route server can update with routes.</p> <p>When enabled, route server propagation installs the routes in the FIB on the route table you've specified. Route server supports IPv4 and IPv6 route propagation.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "EnableSerialConsoleAccess":{
       "name":"EnableSerialConsoleAccess",
       "http":{
@@ -4510,6 +4931,16 @@
       "output":{"shape":"ExportVerifiedAccessInstanceClientConfigurationResult"},
       "documentation":"<p>Exports the client configuration for a Verified Access instance.</p>"
     },
+    "GetActiveVpnTunnelStatus":{
+      "name":"GetActiveVpnTunnelStatus",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetActiveVpnTunnelStatusRequest"},
+      "output":{"shape":"GetActiveVpnTunnelStatusResult"},
+      "documentation":"<p>Returns the currently negotiated security parameters for an active VPN tunnel, including IKE version, DH groups, encryption algorithms, and integrity algorithms.</p>"
+    },
     "GetAllowedImagesSettings":{
       "name":"GetAllowedImagesSettings",
       "http":{
@@ -4550,6 +4981,36 @@
       "output":{"shape":"GetAwsNetworkPerformanceDataResult"},
       "documentation":"<p>Gets network performance data.</p>"
     },
+    "GetCapacityManagerAttributes":{
+      "name":"GetCapacityManagerAttributes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCapacityManagerAttributesRequest"},
+      "output":{"shape":"GetCapacityManagerAttributesResult"},
+      "documentation":"<p> Retrieves the current configuration and status of EC2 Capacity Manager for your account, including enablement status, Organizations access settings, and data ingestion status. </p>"
+    },
+    "GetCapacityManagerMetricData":{
+      "name":"GetCapacityManagerMetricData",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCapacityManagerMetricDataRequest"},
+      "output":{"shape":"GetCapacityManagerMetricDataResult"},
+      "documentation":"<p> Retrieves capacity usage metrics for your EC2 resources. Returns time-series data for metrics like unused capacity, utilization rates, and costs across On-Demand, Spot, and Capacity Reservations. Data can be grouped and filtered by various dimensions such as region, account, and instance family. </p>"
+    },
+    "GetCapacityManagerMetricDimensions":{
+      "name":"GetCapacityManagerMetricDimensions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCapacityManagerMetricDimensionsRequest"},
+      "output":{"shape":"GetCapacityManagerMetricDimensionsResult"},
+      "documentation":"<p> Retrieves the available dimension values for capacity metrics within a specified time range. This is useful for discovering what accounts, regions, instance families, and other dimensions have data available for filtering and grouping. </p>"
+    },
     "GetCapacityReservationUsage":{
       "name":"GetCapacityReservationUsage",
       "http":{
@@ -4618,7 +5079,7 @@
       },
       "input":{"shape":"GetEbsDefaultKmsKeyIdRequest"},
       "output":{"shape":"GetEbsDefaultKmsKeyIdResult"},
-      "documentation":"<p>Describes the default KMS key for EBS encryption by default for your account in this Region. You can change the default KMS key for encryption by default using <a>ModifyEbsDefaultKmsKeyId</a> or <a>ResetEbsDefaultKmsKeyId</a>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Describes the default KMS key for EBS encryption by default for your account in this Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "GetEbsEncryptionByDefault":{
       "name":"GetEbsEncryptionByDefault",
@@ -4660,6 +5121,16 @@
       "output":{"shape":"GetHostReservationPurchasePreviewResult"},
       "documentation":"<p>Preview a reservation purchase with configurations that match those of your Dedicated Host. You must have active Dedicated Hosts in your account before you purchase a reservation.</p> <p>This is a preview of the <a>PurchaseHostReservation</a> action and does not result in the offering being purchased.</p>"
     },
+    "GetImageAncestry":{
+      "name":"GetImageAncestry",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetImageAncestryRequest"},
+      "output":{"shape":"GetImageAncestryResult"},
+      "documentation":"<p>Retrieves the ancestry chain of the specified AMI, tracing its lineage back to the root AMI. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-ancestry.html\">AMI ancestry</a> in <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "GetImageBlockPublicAccessState":{
       "name":"GetImageBlockPublicAccessState",
       "http":{
@@ -4668,7 +5139,7 @@
       },
       "input":{"shape":"GetImageBlockPublicAccessStateRequest"},
       "output":{"shape":"GetImageBlockPublicAccessStateResult"},
-      "documentation":"<p>Gets the current state of <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sharingamis-intro.html#block-public-access-to-amis\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Gets the current state of <i>block public access for AMIs</i> at the account level in the specified Amazon Web Services Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html\">Block public access to your AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "GetInstanceMetadataDefaults":{
       "name":"GetInstanceMetadataDefaults",
@@ -4770,6 +5241,36 @@
       "output":{"shape":"GetIpamPoolCidrsResult"},
       "documentation":"<p>Get the CIDRs provisioned to an IPAM pool.</p>"
     },
+    "GetIpamPrefixListResolverRules":{
+      "name":"GetIpamPrefixListResolverRules",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetIpamPrefixListResolverRulesRequest"},
+      "output":{"shape":"GetIpamPrefixListResolverRulesResult"},
+      "documentation":"<p>Retrieves the CIDR selection rules for an IPAM prefix list resolver. Use this operation to view the business logic that determines which CIDRs are selected for synchronization with prefix lists.</p>"
+    },
+    "GetIpamPrefixListResolverVersionEntries":{
+      "name":"GetIpamPrefixListResolverVersionEntries",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetIpamPrefixListResolverVersionEntriesRequest"},
+      "output":{"shape":"GetIpamPrefixListResolverVersionEntriesResult"},
+      "documentation":"<p>Retrieves the CIDR entries for a specific version of an IPAM prefix list resolver. This shows the actual CIDRs that were selected and synchronized at a particular point in time.</p>"
+    },
+    "GetIpamPrefixListResolverVersions":{
+      "name":"GetIpamPrefixListResolverVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetIpamPrefixListResolverVersionsRequest"},
+      "output":{"shape":"GetIpamPrefixListResolverVersionsResult"},
+      "documentation":"<p>Retrieves version information for an IPAM prefix list resolver.</p> <p>Each version is a snapshot of what CIDRs matched your rules at that moment in time. The version number increments every time the CIDR list changes due to infrastructure changes.</p> <p> <b>Version example:</b> </p> <p> <b>Initial State (Version 1)</b> </p> <p>Production environment:</p> <ul> <li> <p>vpc-prod-web (10.1.0.0/16) - tagged env=prod</p> </li> <li> <p>vpc-prod-db (10.2.0.0/16) - tagged env=prod</p> </li> </ul> <p>Resolver rule: Include all VPCs tagged env=prod</p> <p> <b>Version 1 CIDRs:</b> 10.1.0.0/16, 10.2.0.0/16</p> <p> <b>Infrastructure Change (Version 2)</b> </p> <p>New VPC added:</p> <ul> <li> <p>vpc-prod-api (10.3.0.0/16) - tagged env=prod</p> </li> </ul> <p>IPAM automatically detects the change and creates a new version.</p> <p> <b>Version 2 CIDRs:</b> 10.1.0.0/16, 10.2.0.0/16, 10.3.0.0/16</p>"
+    },
     "GetIpamResourceCidrs":{
       "name":"GetIpamResourceCidrs",
       "http":{
@@ -4850,6 +5351,36 @@
       "output":{"shape":"GetReservedInstancesExchangeQuoteResult"},
       "documentation":"<p>Returns a quote and exchange information for exchanging one or more specified Convertible Reserved Instances for a new Convertible Reserved Instance. If the exchange cannot be performed, the reason is returned in the response. Use <a>AcceptReservedInstancesExchangeQuote</a> to perform the exchange.</p>"
     },
+    "GetRouteServerAssociations":{
+      "name":"GetRouteServerAssociations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetRouteServerAssociationsRequest"},
+      "output":{"shape":"GetRouteServerAssociationsResult"},
+      "documentation":"<p>Gets information about the associations for the specified route server.</p> <p>A route server association is the connection established between a route server and a VPC.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
+    "GetRouteServerPropagations":{
+      "name":"GetRouteServerPropagations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetRouteServerPropagationsRequest"},
+      "output":{"shape":"GetRouteServerPropagationsResult"},
+      "documentation":"<p>Gets information about the route propagations for the specified route server.</p> <p>When enabled, route server propagation installs the routes in the FIB on the route table you've specified. Route server supports IPv4 and IPv6 route propagation.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p>"
+    },
+    "GetRouteServerRoutingDatabase":{
+      "name":"GetRouteServerRoutingDatabase",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetRouteServerRoutingDatabaseRequest"},
+      "output":{"shape":"GetRouteServerRoutingDatabaseResult"},
+      "documentation":"<p>Gets the routing database for the specified route server. The <a href=\"https://en.wikipedia.org/wiki/Routing_table\">Routing Information Base (RIB)</a> serves as a database that stores all the routing information and network topology data collected by a router or routing system, such as routes learned from BGP peers. The RIB is constantly updated as new routing information is received or existing routes change. This ensures that the route server always has the most current view of the network topology and can make optimal routing decisions.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p>"
+    },
     "GetSecurityGroupsForVpc":{
       "name":"GetSecurityGroupsForVpc",
       "http":{
@@ -5188,7 +5719,7 @@
       },
       "input":{"shape":"ModifyEbsDefaultKmsKeyIdRequest"},
       "output":{"shape":"ModifyEbsDefaultKmsKeyIdResult"},
-      "documentation":"<p>Changes the default KMS key for EBS encryption by default for your account in this Region.</p> <p>Amazon Web Services creates a unique Amazon Web Services managed KMS key in each Region for use with encryption by default. If you change the default KMS key to a symmetric customer managed KMS key, it is used instead of the Amazon Web Services managed KMS key. To reset the default KMS key to the Amazon Web Services managed KMS key for EBS, use <a>ResetEbsDefaultKmsKeyId</a>. Amazon EBS does not support asymmetric KMS keys.</p> <p>If you delete or disable the customer managed KMS key that you specified for use with encryption by default, your instances will fail to launch.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
+      "documentation":"<p>Changes the default KMS key for EBS encryption by default for your account in this Region.</p> <p>Amazon Web Services creates a unique Amazon Web Services managed KMS key in each Region for use with encryption by default. If you change the default KMS key to a symmetric customer managed KMS key, it is used instead of the Amazon Web Services managed KMS key. Amazon EBS does not support asymmetric KMS keys.</p> <p>If you delete or disable the customer managed KMS key that you specified for use with encryption by default, your instances will fail to launch.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>"
     },
     "ModifyFleet":{
       "name":"ModifyFleet",
@@ -5266,6 +5797,16 @@
       "output":{"shape":"ModifyInstanceCapacityReservationAttributesResult"},
       "documentation":"<p>Modifies the Capacity Reservation settings for a stopped instance. Use this action to configure an instance to target a specific Capacity Reservation, run in any <code>open</code> Capacity Reservation with matching attributes, run in On-Demand Instance capacity, or only run in a Capacity Reservation.</p>"
     },
+    "ModifyInstanceConnectEndpoint":{
+      "name":"ModifyInstanceConnectEndpoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyInstanceConnectEndpointRequest"},
+      "output":{"shape":"ModifyInstanceConnectEndpointResult"},
+      "documentation":"<p>Modifies the specified EC2 Instance Connect Endpoint.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/modify-ec2-instance-connect-endpoint.html\">Modify an EC2 Instance Connect Endpoint</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "ModifyInstanceCpuOptions":{
       "name":"ModifyInstanceCpuOptions",
       "http":{
@@ -5314,7 +5855,7 @@
       },
       "input":{"shape":"ModifyInstanceMaintenanceOptionsRequest"},
       "output":{"shape":"ModifyInstanceMaintenanceOptionsResult"},
-      "documentation":"<p>Modifies the recovery behavior of your instance to disable simplified automatic recovery or set the recovery behavior to default. The default configuration will not enable simplified automatic recovery for an unsupported instance type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery\">Simplified automatic recovery</a>.</p>"
+      "documentation":"<p>Modifies the recovery behavior of your instance to disable simplified automatic recovery or set the recovery behavior to default. The default configuration will not enable simplified automatic recovery for an unsupported instance type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery\">Simplified automatic recovery</a>.</p> <p>Modifies the reboot migration behavior during a user-initiated reboot of an instance that has a pending <code>system-reboot</code> event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration\">Enable or disable reboot migration</a>.</p>"
     },
     "ModifyInstanceMetadataDefaults":{
       "name":"ModifyInstanceMetadataDefaults",
@@ -5376,6 +5917,26 @@
       "output":{"shape":"ModifyIpamPoolResult"},
       "documentation":"<p>Modify the configurations of an IPAM pool.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html\">Modify a pool</a> in the <i>Amazon VPC IPAM User Guide</i>. </p>"
     },
+    "ModifyIpamPrefixListResolver":{
+      "name":"ModifyIpamPrefixListResolver",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyIpamPrefixListResolverRequest"},
+      "output":{"shape":"ModifyIpamPrefixListResolverResult"},
+      "documentation":"<p>Modifies an IPAM prefix list resolver. You can update the description and CIDR selection rules. Changes to rules will trigger re-evaluation and potential updates to associated prefix lists.</p>"
+    },
+    "ModifyIpamPrefixListResolverTarget":{
+      "name":"ModifyIpamPrefixListResolverTarget",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyIpamPrefixListResolverTargetRequest"},
+      "output":{"shape":"ModifyIpamPrefixListResolverTargetResult"},
+      "documentation":"<p>Modifies an IPAM prefix list resolver target. You can update version tracking settings and the desired version of the target prefix list.</p>"
+    },
     "ModifyIpamResourceCidr":{
       "name":"ModifyIpamResourceCidr",
       "http":{
@@ -5455,6 +6016,16 @@
       "output":{"shape":"ModifyPrivateDnsNameOptionsResult"},
       "documentation":"<p>Modifies the options for instance hostnames for the specified instance.</p>"
     },
+    "ModifyPublicIpDnsNameOptions":{
+      "name":"ModifyPublicIpDnsNameOptions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyPublicIpDnsNameOptionsRequest"},
+      "output":{"shape":"ModifyPublicIpDnsNameOptionsResult"},
+      "documentation":"<p>Modify public hostname options for a network interface. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
     "ModifyReservedInstances":{
       "name":"ModifyReservedInstances",
       "http":{
@@ -5465,6 +6036,16 @@
       "output":{"shape":"ModifyReservedInstancesResult"},
       "documentation":"<p>Modifies the configuration of your Reserved Instances, such as the Availability Zone, instance count, or instance type. The Reserved Instances to be modified must be identical, except for Availability Zone, network platform, and instance type.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html\">Modify Reserved Instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
+    "ModifyRouteServer":{
+      "name":"ModifyRouteServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyRouteServerRequest"},
+      "output":{"shape":"ModifyRouteServerResult"},
+      "documentation":"<p>Modifies the configuration of an existing route server.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p> <p>For more information see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html\">Dynamic routing in your VPC with VPC Route Server</a> in the <i>Amazon VPC User Guide</i>.</p>"
+    },
     "ModifySecurityGroupRules":{
       "name":"ModifySecurityGroupRules",
       "http":{
@@ -5739,7 +6320,7 @@
       },
       "input":{"shape":"ModifyVpcEndpointServicePermissionsRequest"},
       "output":{"shape":"ModifyVpcEndpointServicePermissionsResult"},
-      "documentation":"<p>Modifies the permissions for your VPC endpoint service. You can add or remove permissions for service consumers (Amazon Web Services accounts, users, and IAM roles) to connect to your endpoint service.</p> <p>If you grant permissions to all principals, the service is public. Any users who know the name of a public service can send a request to attach an endpoint. If the service does not require manual approval, attachments are automatically approved.</p>"
+      "documentation":"<p>Modifies the permissions for your VPC endpoint service. You can add or remove permissions for service consumers (Amazon Web Services accounts, users, and IAM roles) to connect to your endpoint service. Principal ARNs with path components aren't supported.</p> <p>If you grant permissions to all principals, the service is public. Any users who know the name of a public service can send a request to attach an endpoint. If the service does not require manual approval, attachments are automatically approved.</p>"
     },
     "ModifyVpcPeeringConnectionOptions":{
       "name":"ModifyVpcPeeringConnectionOptions",
@@ -5819,7 +6400,7 @@
       },
       "input":{"shape":"MoveAddressToVpcRequest"},
       "output":{"shape":"MoveAddressToVpcResult"},
-      "documentation":"<note> <p>This action is deprecated.</p> </note> <p>Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC platform. The Elastic IP address must be allocated to your account for more than 24 hours, and it must not be associated with an instance. After the Elastic IP address is moved, it is no longer available for use in the EC2-Classic platform, unless you move it back using the <a>RestoreAddressToClassic</a> request. You cannot move an Elastic IP address that was originally allocated for use in the EC2-VPC platform to the EC2-Classic platform.</p>"
+      "documentation":"<note> <p>This action is deprecated.</p> </note> <p>Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC platform. The Elastic IP address must be allocated to your account for more than 24 hours, and it must not be associated with an instance. After the Elastic IP address is moved, it is no longer available for use in the EC2-Classic platform. You cannot move an Elastic IP address that was originally allocated for use in the EC2-VPC platform to the EC2-Classic platform.</p>"
     },
     "MoveByoipCidrToIpam":{
       "name":"MoveByoipCidrToIpam",
@@ -5849,7 +6430,7 @@
       },
       "input":{"shape":"ProvisionByoipCidrRequest"},
       "output":{"shape":"ProvisionByoipCidrResult"},
-      "documentation":"<p>Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned, it is ready to be advertised using <a>AdvertiseByoipCidr</a>.</p> <p>Amazon Web Services verifies that you own the address range and are authorized to advertise it. You must ensure that the address range is registered to you and that you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address range. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">Bring your own IP addresses (BYOIP)</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Provisioning an address range is an asynchronous operation, so the call returns immediately, but the address range is not ready to use until its status changes from <code>pending-provision</code> to <code>provisioned</code>. To monitor the status of an address range, use <a>DescribeByoipCidrs</a>. To allocate an Elastic IP address from your IPv4 address pool, use <a>AllocateAddress</a> with either the specific address from the address pool or the ID of the address pool.</p>"
+      "documentation":"<p>Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services resources through bring your own IP addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned, it is ready to be advertised.</p> <p>Amazon Web Services verifies that you own the address range and are authorized to advertise it. You must ensure that the address range is registered to you and that you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address range. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">Bring your own IP addresses (BYOIP)</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Provisioning an address range is an asynchronous operation, so the call returns immediately, but the address range is not ready to use until its status changes from <code>pending-provision</code> to <code>provisioned</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/byoip-onboard.html\">Onboard your address range</a>.</p>"
     },
     "ProvisionIpamByoasn":{
       "name":"ProvisionIpamByoasn",
@@ -5948,7 +6529,7 @@
       },
       "input":{"shape":"RegisterImageRequest"},
       "output":{"shape":"RegisterImageResult"},
-      "documentation":"<p>Registers an AMI. When you're creating an instance-store backed AMI, registering the AMI is the final step in the creation process. For more information about creating AMIs, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot\">Create an AMI from a snapshot</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-instance-store.html\">Create an instance-store backed AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>For Amazon EBS-backed instances, <a>CreateImage</a> creates and registers the AMI in a single request, so you don't have to register the AMI yourself. We recommend that you always use <a>CreateImage</a> unless you have a specific reason to use RegisterImage.</p> </note> <p>If needed, you can deregister an AMI at any time. Any modifications you make to an AMI backed by an instance store volume invalidates its registration. If you make changes to an image, deregister the previous image and register the new image.</p> <p> <b>Register a snapshot of a root device volume</b> </p> <p>You can use <code>RegisterImage</code> to create an Amazon EBS-backed Linux AMI from a snapshot of a root device volume. You specify the snapshot using a block device mapping. You can't set the encryption state of the volume using the block device mapping. If the snapshot is encrypted, or encryption by default is enabled, the root volume of an instance launched from the AMI is encrypted.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot\">Create an AMI from a snapshot</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html\">Use encryption with Amazon EBS-backed AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> <b>Amazon Web Services Marketplace product codes</b> </p> <p>If any snapshots have Amazon Web Services Marketplace product codes, they are copied to the new AMI.</p> <p>In most cases, AMIs for Windows, RedHat, SUSE, and SQL Server require correct licensing information to be present on the AMI. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html\">Understand AMI billing information</a> in the <i>Amazon EC2 User Guide</i>. When creating an AMI from a snapshot, the <code>RegisterImage</code> operation derives the correct billing information from the snapshot's metadata, but this requires the appropriate metadata to be present. To verify if the correct billing information was applied, check the <code>PlatformDetails</code> field on the new AMI. If the field is empty or doesn't match the expected operating system code (for example, Windows, RedHat, SUSE, or SQL), the AMI creation was unsuccessful, and you should discard the AMI and instead create the AMI from an instance using <a>CreateImage</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#how-to-create-ebs-ami\">Create an AMI from an instance </a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you purchase a Reserved Instance to apply to an On-Demand Instance that was launched from an AMI with a billing product code, make sure that the Reserved Instance has the matching billing product code. If you purchase a Reserved Instance without the matching billing product code, the Reserved Instance will not be applied to the On-Demand Instance. For information about how to obtain the platform details and billing information of an AMI, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html\">Understand AMI billing information</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Registers an AMI. When you're creating an instance-store backed AMI, registering the AMI is the final step in the creation process. For more information about creating AMIs, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot\">Create an AMI from a snapshot</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-instance-store.html\">Create an instance-store backed AMI</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If needed, you can deregister an AMI at any time. Any modifications you make to an AMI backed by an instance store volume invalidates its registration. If you make changes to an image, deregister the previous image and register the new image.</p> <p> <b>Register a snapshot of a root device volume</b> </p> <p>You can use <code>RegisterImage</code> to create an Amazon EBS-backed Linux AMI from a snapshot of a root device volume. You specify the snapshot using a block device mapping. You can't set the encryption state of the volume using the block device mapping. If the snapshot is encrypted, or encryption by default is enabled, the root volume of an instance launched from the AMI is encrypted.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot\">Create an AMI from a snapshot</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html\">Use encryption with EBS-backed AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> <b>Amazon Web Services Marketplace product codes</b> </p> <p>If any snapshots have Amazon Web Services Marketplace product codes, they are copied to the new AMI.</p> <p>In most cases, AMIs for Windows, RedHat, SUSE, and SQL Server require correct licensing information to be present on the AMI. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html\">Understand AMI billing information</a> in the <i>Amazon EC2 User Guide</i>. When creating an AMI from a snapshot, the <code>RegisterImage</code> operation derives the correct billing information from the snapshot's metadata, but this requires the appropriate metadata to be present. To verify if the correct billing information was applied, check the <code>PlatformDetails</code> field on the new AMI. If the field is empty or doesn't match the expected operating system code (for example, Windows, RedHat, SUSE, or SQL), the AMI creation was unsuccessful, and you should discard the AMI and instead create the AMI from an instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#how-to-create-ebs-ami\">Create an AMI from an instance </a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you purchase a Reserved Instance to apply to an On-Demand Instance that was launched from an AMI with a billing product code, make sure that the Reserved Instance has the matching billing product code. If you purchase a Reserved Instance without the matching billing product code, the Reserved Instance is not applied to the On-Demand Instance. For information about how to obtain the platform details and billing information of an AMI, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html\">Understand AMI billing information</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "RegisterInstanceEventNotificationAttributes":{
       "name":"RegisterInstanceEventNotificationAttributes",
@@ -6047,7 +6628,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"ReleaseAddressRequest"},
-      "documentation":"<p>Releases the specified Elastic IP address.</p> <p>[Default VPC] Releasing an Elastic IP address automatically disassociates it from any instance that it's associated with. To disassociate an Elastic IP address without releasing it, use <a>DisassociateAddress</a>.</p> <p>[Nondefault VPC] You must use <a>DisassociateAddress</a> to disassociate the Elastic IP address before you can release it. Otherwise, Amazon EC2 returns an error (<code>InvalidIPAddress.InUse</code>).</p> <p>After releasing an Elastic IP address, it is released to the IP address pool. Be sure to update your DNS records and any servers or devices that communicate with the address. If you attempt to release an Elastic IP address that you already released, you'll get an <code>AuthFailure</code> error if the address is already allocated to another Amazon Web Services account.</p> <p>After you release an Elastic IP address, you might be able to recover it. For more information, see <a>AllocateAddress</a>.</p>"
+      "documentation":"<p>Releases the specified Elastic IP address.</p> <p>[Default VPC] Releasing an Elastic IP address automatically disassociates it from any instance that it's associated with. Alternatively, you can disassociate an Elastic IP address without releasing it.</p> <p>[Nondefault VPC] You must disassociate the Elastic IP address before you can release it. Otherwise, Amazon EC2 returns an error (<code>InvalidIPAddress.InUse</code>).</p> <p>After releasing an Elastic IP address, it is released to the IP address pool. Be sure to update your DNS records and any servers or devices that communicate with the address. If you attempt to release an Elastic IP address that you already released, you'll get an <code>AuthFailure</code> error if the address is already allocated to another Amazon Web Services account.</p> <p>After you release an Elastic IP address, you might be able to recover it. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing-eips-releasing.html\">Release an Elastic IP address</a>.</p>"
     },
     "ReleaseHosts":{
       "name":"ReleaseHosts",
@@ -6260,7 +6841,7 @@
       },
       "input":{"shape":"RestoreImageFromRecycleBinRequest"},
       "output":{"shape":"RestoreImageFromRecycleBinResult"},
-      "documentation":"<p>Restores an AMI from the Recycle Bin. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html\">Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Restores an AMI from the Recycle Bin. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html\">Recover deleted Amazon EBS snapshots and EBS-back AMIs with Recycle Bin</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "RestoreManagedPrefixListVersion":{
       "name":"RestoreManagedPrefixListVersion",
@@ -6389,7 +6970,7 @@
       },
       "input":{"shape":"StartDeclarativePoliciesReportRequest"},
       "output":{"shape":"StartDeclarativePoliciesReportResult"},
-      "documentation":"<p>Generates an account status report. The report is generated asynchronously, and can take several hours to complete.</p> <p>The report provides the current status of all attributes supported by declarative policies for the accounts within the specified scope. The scope is determined by the specified <code>TargetId</code>, which can represent an individual account, or all the accounts that fall under the specified organizational unit (OU) or root (the entire Amazon Web Services Organization).</p> <p>The report is saved to your specified S3 bucket, using the following path structure (with the <i>italicized placeholders</i> representing your specific values):</p> <p> <code>s3://<i>amzn-s3-demo-bucket</i>/<i>your-optional-s3-prefix</i>/ec2_<i>targetId</i>_<i>reportId</i>_<i>yyyyMMdd</i>T<i>hhmm</i>Z.csv</code> </p> <p class=\"title\"> <b>Prerequisites for generating a report</b> </p> <ul> <li> <p>The <code>StartDeclarativePoliciesReport</code> API can only be called by the management account or delegated administrators for the organization.</p> </li> <li> <p>An S3 bucket must be available before generating the report (you can create a new one or use an existing one), it must be in the same Region where the report generation request is made, and it must have an appropriate bucket policy. For a sample S3 policy, see <i>Sample Amazon S3 policy</i> under .</p> </li> <li> <p>Trusted access must be enabled for the service for which the declarative policy will enforce a baseline configuration. If you use the Amazon Web Services Organizations console, this is done automatically when you enable declarative policies. The API uses the following service principal to identify the EC2 service: <code>ec2.amazonaws.com</code>. For more information on how to enable trusted access with the Amazon Web Services CLI and Amazon Web Services SDKs, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Amazon Web Services Organizations User Guide</i>.</p> </li> <li> <p>Only one report per organization can be generated at a time. Attempting to generate a report while another is in progress will result in an error.</p> </li> </ul> <p>For more information, including the required IAM permissions to run this API, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html\">Generating the account status report for declarative policies</a> in the <i>Amazon Web Services Organizations User Guide</i>.</p>"
+      "documentation":"<p>Generates an account status report. The report is generated asynchronously, and can take several hours to complete.</p> <p>The report provides the current status of all attributes supported by declarative policies for the accounts within the specified scope. The scope is determined by the specified <code>TargetId</code>, which can represent an individual account, or all the accounts that fall under the specified organizational unit (OU) or root (the entire Amazon Web Services Organization).</p> <p>The report is saved to your specified S3 bucket, using the following path structure (with the capitalized placeholders representing your specific values):</p> <p> <code>s3://AMZN-S3-DEMO-BUCKET/YOUR-OPTIONAL-S3-PREFIX/ec2_TARGETID_REPORTID_YYYYMMDDTHHMMZ.csv</code> </p> <p class=\"title\"> <b>Prerequisites for generating a report</b> </p> <ul> <li> <p>The <code>StartDeclarativePoliciesReport</code> API can only be called by the management account or delegated administrators for the organization.</p> </li> <li> <p>An S3 bucket must be available before generating the report (you can create a new one or use an existing one), it must be in the same Region where the report generation request is made, and it must have an appropriate bucket policy. For a sample S3 policy, see <i>Sample Amazon S3 policy</i> under <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartDeclarativePoliciesReport.html#API_StartDeclarativePoliciesReport_Examples\">Examples</a>.</p> </li> <li> <p>Trusted access must be enabled for the service for which the declarative policy will enforce a baseline configuration. If you use the Amazon Web Services Organizations console, this is done automatically when you enable declarative policies. The API uses the following service principal to identify the EC2 service: <code>ec2.amazonaws.com</code>. For more information on how to enable trusted access with the Amazon Web Services CLI and Amazon Web Services SDKs, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Amazon Web Services Organizations User Guide</i>.</p> </li> <li> <p>Only one report per organization can be generated at a time. Attempting to generate a report while another is in progress will result in an error.</p> </li> </ul> <p>For more information, including the required IAM permissions to run this API, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html\">Generating the account status report for declarative policies</a> in the <i>Amazon Web Services Organizations User Guide</i>.</p>"
     },
     "StartInstances":{
       "name":"StartInstances",
@@ -6439,7 +7020,7 @@
       },
       "input":{"shape":"StopInstancesRequest"},
       "output":{"shape":"StopInstancesResult"},
-      "documentation":"<p>Stops an Amazon EBS-backed instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html\">Stop and start Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>You can use the Stop action to hibernate an instance if the instance is <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enabling-hibernation.html\">enabled for hibernation</a> and it meets the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html\">hibernation prerequisites</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate your Amazon EC2 instance</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>We don't charge usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains and continues to persist your data, and you are charged for Amazon EBS volume usage. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, and thereafter charges per second for instance usage.</p> <p>You can't stop or hibernate instance store-backed instances. You can't use the Stop action to hibernate Spot Instances, but you can specify that Amazon EC2 should hibernate Spot Instances when they are interrupted. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances\">Hibernating interrupted Spot Instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you stop or hibernate an instance, we shut it down. You can restart your instance at any time. Before stopping or hibernating an instance, make sure it is in a state from which it can be restarted. Stopping an instance does not preserve data stored in RAM, but hibernating an instance does preserve data stored in RAM. If an instance cannot hibernate successfully, a normal shutdown occurs.</p> <p>Stopping and hibernating an instance is different to rebooting or terminating it. For example, when you stop or hibernate an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, hibernating, and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you stop an instance, we attempt to shut it down forcibly after a short while. If your instance appears stuck in the stopping state after a period of time, there may be an issue with the underlying host computer. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshoot stopping your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Stops an Amazon EBS-backed instance. You can restart your instance at any time using the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html\">StartInstances</a> API. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html\">Stop and start Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you stop or hibernate an instance, we shut it down. By default, this includes a graceful operating system (OS) shutdown. To bypass the graceful shutdown, use the <code>skipOsShutdown</code> parameter; however, this might risk data integrity.</p> <p>You can use the StopInstances operation together with the <code>Hibernate</code> parameter to hibernate an instance if the instance is <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enabling-hibernation.html\">enabled for hibernation</a> and meets the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html\">hibernation prerequisites</a>. Stopping an instance doesn't preserve data stored in RAM, while hibernation does. If hibernation fails, a normal shutdown occurs. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate your Amazon EC2 instance</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If your instance appears stuck in the <code>stopping</code> state, there might be an issue with the underlying host computer. You can use the StopInstances operation together with the Force parameter to force stop your instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshoot Amazon EC2 instance stop issues</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Stopping and hibernating an instance differs from rebooting or terminating it. For example, a stopped or hibernated instance retains its root volume and any data volumes, unlike terminated instances where these volumes are automatically deleted. For more information about the differences between stopping, hibernating, rebooting, and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Amazon EC2 instance state changes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>We don't charge for instance usage or data transfer fees when an instance is stopped. However, the root volume and any data volumes remain and continue to persist your data, and you're charged for volume usage. Every time you start your instance, Amazon EC2 charges a one-minute minimum for instance usage, followed by per-second billing.</p> <p>You can't stop or hibernate instance store-backed instances.</p>"
     },
     "TerminateClientVpnConnections":{
       "name":"TerminateClientVpnConnections",
@@ -6459,7 +7040,7 @@
       },
       "input":{"shape":"TerminateInstancesRequest"},
       "output":{"shape":"TerminateInstancesResult"},
-      "documentation":"<p>Shuts down the specified instances. This operation is idempotent; if you terminate an instance more than once, each call succeeds. </p> <p>If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated.</p> <p>If you terminate multiple instances across multiple Availability Zones, and one or more of the specified instances are enabled for termination protection, the request fails with the following results:</p> <ul> <li> <p>The specified instances that are in the same Availability Zone as the protected instance are not terminated.</p> </li> <li> <p>The specified instances that are in different Availability Zones, where no other specified instances are protected, are successfully terminated.</p> </li> </ul> <p>For example, say you have the following instances:</p> <ul> <li> <p>Instance A: <code>us-east-1a</code>; Not protected</p> </li> <li> <p>Instance B: <code>us-east-1a</code>; Not protected</p> </li> <li> <p>Instance C: <code>us-east-1b</code>; Protected</p> </li> <li> <p>Instance D: <code>us-east-1b</code>; not protected</p> </li> </ul> <p>If you attempt to terminate all of these instances in the same request, the request reports failure with the following results:</p> <ul> <li> <p>Instance A and Instance B are successfully terminated because none of the specified instances in <code>us-east-1a</code> are enabled for termination protection.</p> </li> <li> <p>Instance C and Instance D fail to terminate because at least one of the specified instances in <code>us-east-1b</code> (Instance C) is enabled for termination protection.</p> </li> </ul> <p>Terminated instances remain visible after termination (for approximately one hour).</p> <p>By default, Amazon EC2 deletes all EBS volumes that were attached when the instance launched. Volumes attached after instance launch continue running.</p> <p>You can stop, start, and terminate EBS-backed instances. You can only terminate instance store-backed instances. What happens to an instance differs if you stop it or terminate it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, any attached EBS volumes with the <code>DeleteOnTermination</code> block device mapping parameter set to <code>true</code> are automatically deleted. For more information about the differences between stopping and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Instance lifecycle</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>For more information about troubleshooting, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html\">Troubleshooting terminating your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>Terminates (deletes) the specified instances. This operation is <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">idempotent</a>; if you terminate an instance more than once, each call succeeds.</p> <important> <p> <b>Terminating an instance is permanent and irreversible.</b> </p> <p>After you terminate an instance, you can no longer connect to it, and it can't be recovered. All attached Amazon EBS volumes that are configured to be deleted on termination are also permanently deleted and can't be recovered. All data stored on instance store volumes is permanently lost. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-ec2-instance-termination-works.html\"> How instance termination works</a>.</p> <p>Before you terminate an instance, ensure that you have backed up all data that you need to retain after the termination to persistent storage.</p> </important> <p>If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated.</p> <p>If you terminate multiple instances across multiple Availability Zones, and one or more of the specified instances are enabled for termination protection, the request fails with the following results:</p> <ul> <li> <p>The specified instances that are in the same Availability Zone as the protected instance are not terminated.</p> </li> <li> <p>The specified instances that are in different Availability Zones, where no other specified instances are protected, are successfully terminated.</p> </li> </ul> <p>For example, say you have the following instances:</p> <ul> <li> <p>Instance A: <code>us-east-1a</code>; Not protected</p> </li> <li> <p>Instance B: <code>us-east-1a</code>; Not protected</p> </li> <li> <p>Instance C: <code>us-east-1b</code>; Protected</p> </li> <li> <p>Instance D: <code>us-east-1b</code>; not protected</p> </li> </ul> <p>If you attempt to terminate all of these instances in the same request, the request reports failure with the following results:</p> <ul> <li> <p>Instance A and Instance B are successfully terminated because none of the specified instances in <code>us-east-1a</code> are enabled for termination protection.</p> </li> <li> <p>Instance C and Instance D fail to terminate because at least one of the specified instances in <code>us-east-1b</code> (Instance C) is enabled for termination protection.</p> </li> </ul> <p>Terminated instances remain visible after termination (for approximately one hour).</p> <p>By default, Amazon EC2 deletes all EBS volumes that were attached when the instance launched. Volumes attached after instance launch continue running.</p> <p>By default, the TerminateInstances operation includes a graceful operating system (OS) shutdown. To bypass the graceful shutdown, use the <code>skipOsShutdown</code> parameter; however, this might risk data integrity.</p> <p>You can stop, start, and terminate EBS-backed instances. You can only terminate instance store-backed instances. What happens to an instance differs if you stop or terminate it. For example, when you stop an instance, the root device and any other devices attached to the instance persist. When you terminate an instance, any attached EBS volumes with the <code>DeleteOnTermination</code> block device mapping parameter set to <code>true</code> are automatically deleted. For more information about the differences between stopping and terminating instances, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html\">Amazon EC2 instance state changes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>When you terminate an instance, we attempt to terminate it forcibly after a short while. If your instance appears stuck in the shutting-down state after a period of time, there might be an issue with the underlying host computer. For more information about terminating and troubleshooting terminating your instances, see <a href=\"https://docs.aws.amazon.com/\">Terminate Amazon EC2 instances</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html\">Troubleshooting terminating your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "UnassignIpv6Addresses":{
       "name":"UnassignIpv6Addresses",
@@ -6469,7 +7050,7 @@
       },
       "input":{"shape":"UnassignIpv6AddressesRequest"},
       "output":{"shape":"UnassignIpv6AddressesResult"},
-      "documentation":"<p>Unassigns one or more IPv6 addresses IPv4 Prefix Delegation prefixes from a network interface.</p>"
+      "documentation":"<p>Unassigns the specified IPv6 addresses or Prefix Delegation prefixes from a network interface.</p>"
     },
     "UnassignPrivateIpAddresses":{
       "name":"UnassignPrivateIpAddresses",
@@ -6478,7 +7059,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"UnassignPrivateIpAddressesRequest"},
-      "documentation":"<p>Unassigns one or more secondary private IP addresses, or IPv4 Prefix Delegation prefixes from a network interface.</p>"
+      "documentation":"<p>Unassigns the specified secondary private IP addresses or IPv4 Prefix Delegation prefixes from a network interface.</p>"
     },
     "UnassignPrivateNatGatewayAddress":{
       "name":"UnassignPrivateNatGatewayAddress",
@@ -6510,6 +7091,16 @@
       "output":{"shape":"UnmonitorInstancesResult"},
       "documentation":"<p>Disables detailed monitoring for a running instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html\">Monitoring your instances and volumes</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
+    "UpdateCapacityManagerOrganizationsAccess":{
+      "name":"UpdateCapacityManagerOrganizationsAccess",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateCapacityManagerOrganizationsAccessRequest"},
+      "output":{"shape":"UpdateCapacityManagerOrganizationsAccessResult"},
+      "documentation":"<p> Updates the Organizations access setting for EC2 Capacity Manager. This controls whether Capacity Manager can aggregate data from all accounts in your Amazon Web Services Organization or only from the current account. </p>"
+    },
     "UpdateSecurityGroupRuleDescriptionsEgress":{
       "name":"UpdateSecurityGroupRuleDescriptionsEgress",
       "http":{
@@ -7061,6 +7652,57 @@
         "locationName":"item"
       }
     },
+    "ActiveVpnTunnelStatus":{
+      "type":"structure",
+      "members":{
+        "Phase1EncryptionAlgorithm":{
+          "shape":"String",
+          "documentation":"<p>The encryption algorithm negotiated in Phase 1 IKE negotiations.</p>",
+          "locationName":"phase1EncryptionAlgorithm"
+        },
+        "Phase2EncryptionAlgorithm":{
+          "shape":"String",
+          "documentation":"<p>The encryption algorithm negotiated in Phase 2 IKE negotiations.</p>",
+          "locationName":"phase2EncryptionAlgorithm"
+        },
+        "Phase1IntegrityAlgorithm":{
+          "shape":"String",
+          "documentation":"<p>The integrity algorithm negotiated in Phase 1 IKE negotiations.</p>",
+          "locationName":"phase1IntegrityAlgorithm"
+        },
+        "Phase2IntegrityAlgorithm":{
+          "shape":"String",
+          "documentation":"<p>The integrity algorithm negotiated in Phase 2 IKE negotiations.</p>",
+          "locationName":"phase2IntegrityAlgorithm"
+        },
+        "Phase1DHGroup":{
+          "shape":"Integer",
+          "documentation":"<p>The Diffie-Hellman group number being used in Phase 1 IKE negotiations.</p>",
+          "locationName":"phase1DHGroup"
+        },
+        "Phase2DHGroup":{
+          "shape":"Integer",
+          "documentation":"<p>The Diffie-Hellman group number being used in Phase 2 IKE negotiations.</p>",
+          "locationName":"phase2DHGroup"
+        },
+        "IkeVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the Internet Key Exchange (IKE) protocol being used.</p>",
+          "locationName":"ikeVersion"
+        },
+        "ProvisioningStatus":{
+          "shape":"VpnTunnelProvisioningStatus",
+          "documentation":"<p>The current provisioning status of the VPN tunnel.</p>",
+          "locationName":"provisioningStatus"
+        },
+        "ProvisioningStatusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current provisioning status.</p>",
+          "locationName":"provisioningStatusReason"
+        }
+      },
+      "documentation":"<p>Contains information about the current security configuration of an active VPN tunnel.</p>"
+    },
     "ActivityStatus":{
       "type":"string",
       "enum":[
@@ -7272,6 +7914,16 @@
           "documentation":"<p>The carrier IP address associated. This option is only available for network interfaces which reside in a subnet in a Wavelength Zone (for example an EC2 instance). </p>",
           "locationName":"carrierIp"
         },
+        "SubnetId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the subnet where the IP address is allocated.</p>",
+          "locationName":"subnetId"
+        },
+        "ServiceManaged":{
+          "shape":"ServiceManaged",
+          "documentation":"<p>The service that manages the elastic IP address.</p> <note> <p>The only option supported today is <code>alb</code>.</p> </note>",
+          "locationName":"serviceManaged"
+        },
         "InstanceId":{
           "shape":"String",
           "documentation":"<p>The ID of the instance that the address is associated with (if any).</p>",
@@ -7480,7 +8132,7 @@
         },
         "PublicIpv4Pool":{
           "shape":"String",
-          "documentation":"<p>The ID of an address pool.</p>",
+          "documentation":"<p>The ID of an address pool that you own.</p>",
           "locationName":"publicIpv4Pool"
         },
         "NetworkBorderGroup":{
@@ -7505,19 +8157,18 @@
         },
         "CarrierIp":{
           "shape":"String",
-          "documentation":"<p>The carrier IP address. This option is only available for network interfaces that reside in a subnet in a Wavelength Zone.</p>",
+          "documentation":"<p>The carrier IP address. Available only for network interfaces that reside in a subnet in a Wavelength Zone.</p>",
           "locationName":"carrierIp"
         },
         "PublicIp":{
           "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>",
+          "documentation":"<p>The Amazon-owned IP address. Not available when using an address pool that you own.</p>",
           "locationName":"publicIp"
         }
       }
     },
     "AllocateHostsRequest":{
       "type":"structure",
-      "required":["AvailabilityZone"],
       "members":{
         "InstanceFamily":{
           "shape":"String",
@@ -7545,6 +8196,10 @@
           "documentation":"<p>The IDs of the Outpost hardware assets on which to allocate the Dedicated Hosts. Targeting specific hardware assets on an Outpost can help to minimize latency between your workloads. This parameter is supported only if you specify <b>OutpostArn</b>. If you are allocating the Dedicated Hosts in a Region, omit this parameter.</p> <ul> <li> <p>If you specify this parameter, you can omit <b>Quantity</b>. In this case, Amazon EC2 allocates a Dedicated Host on each specified hardware asset.</p> </li> <li> <p>If you specify both <b>AssetIds</b> and <b>Quantity</b>, then the value for <b>Quantity</b> must be equal to the number of asset IDs specified.</p> </li> </ul>",
           "locationName":"AssetId"
         },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone.</p>"
+        },
         "AutoPlacement":{
           "shape":"AutoPlacement",
           "documentation":"<p>Indicates whether the host accepts any untargeted instance launches that match its instance type configuration, or if it only accepts Host tenancy instance launches that specify its unique host ID. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding\"> Understanding auto-placement and affinity</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>off</code> </p>",
@@ -7875,6 +8530,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "Instance":{
           "shape":"AnalysisComponent",
           "documentation":"<p>Information about the instance.</p>",
@@ -8126,6 +8786,13 @@
         "locationName":"item"
       }
     },
+    "AsPath":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"item"
+      }
+    },
     "AsnAssociation":{
       "type":"structure",
       "members":{
@@ -8214,7 +8881,7 @@
         },
         "Ipv6Prefixes":{
           "shape":"IpPrefixList",
-          "documentation":"<p>One or more IPv6 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv6PrefixCount</code> option.</p>",
+          "documentation":"<p>One or more IPv6 prefixes assigned to the network interface. You can't use this option if you use the <code>Ipv6PrefixCount</code> option.</p>",
           "locationName":"Ipv6Prefix"
         },
         "NetworkInterfaceId":{
@@ -8260,12 +8927,12 @@
       "members":{
         "Ipv4Prefixes":{
           "shape":"IpPrefixList",
-          "documentation":"<p>One or more IPv4 prefixes assigned to the network interface. You cannot use this option if you use the <code>Ipv4PrefixCount</code> option.</p>",
+          "documentation":"<p>One or more IPv4 prefixes assigned to the network interface. You can't use this option if you use the <code>Ipv4PrefixCount</code> option.</p>",
           "locationName":"Ipv4Prefix"
         },
         "Ipv4PrefixCount":{
           "shape":"Integer",
-          "documentation":"<p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface. You cannot use this option if you use the <code>Ipv4 Prefixes</code> option.</p>"
+          "documentation":"<p>The number of IPv4 prefixes that Amazon Web Services automatically assigns to the network interface. You can't use this option if you use the <code>Ipv4 Prefixes</code> option.</p>"
         },
         "NetworkInterfaceId":{
           "shape":"NetworkInterfaceId",
@@ -8720,6 +9387,37 @@
         }
       }
     },
+    "AssociateRouteServerRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerId",
+        "VpcId"
+      ],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The unique identifier for the route server to be associated.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC to associate with the route server.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "AssociateRouteServerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerAssociation":{
+          "shape":"RouteServerAssociation",
+          "documentation":"<p>Information about the association between the route server and the VPC.</p>",
+          "locationName":"routeServerAssociation"
+        }
+      }
+    },
     "AssociateRouteTableRequest":{
       "type":"structure",
       "required":["RouteTableId"],
@@ -8728,6 +9426,10 @@
           "shape":"RouteGatewayId",
           "documentation":"<p>The ID of the internet gateway or virtual private gateway.</p>"
         },
+        "PublicIpv4Pool":{
+          "shape":"Ipv4PoolEc2Id",
+          "documentation":"<p>The ID of a public IPv4 pool. A public IPv4 pool is a pool of IPv4 addresses that you've brought to Amazon Web Services with BYOIP.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -9082,6 +9784,13 @@
         "locationName":"item"
       }
     },
+    "AssociatedSubnetList":{
+      "type":"list",
+      "member":{
+        "shape":"SubnetId",
+        "locationName":"item"
+      }
+    },
     "AssociatedTargetNetwork":{
       "type":"structure",
       "members":{
@@ -9253,6 +9962,10 @@
           "shape":"EnaSrdSpecification",
           "documentation":"<p>Configures ENA Express for the network interface that this action attaches to the instance.</p>"
         },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues to be created with the instance.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -9421,6 +10134,13 @@
       },
       "documentation":"<p>ENA Express is compatible with both TCP and UDP transport protocols. When it's enabled, TCP traffic automatically uses it. However, some UDP-based applications are designed to handle network packets that are out of order, without a need for retransmission, such as live video broadcasting or other near-real-time applications. For UDP traffic, you can specify whether to use ENA Express, based on your application environment needs.</p>"
     },
+    "AttachmentLimitType":{
+      "type":"string",
+      "enum":[
+        "shared",
+        "dedicated"
+      ]
+    },
     "AttachmentStatus":{
       "type":"string",
       "enum":[
@@ -9657,7 +10377,7 @@
       "members":{
         "CidrIp":{
           "shape":"String",
-          "documentation":"<p>The IPv4 address range, in CIDR format.</p> <p>To specify an IPv6 address range, use IP permissions instead.</p> <p>To specify multiple rules and descriptions for the rules, use IP permissions instead.</p>"
+          "documentation":"<p>The IPv4 address range, in CIDR format.</p> <note> <p> Amazon Web Services <a href=\"https://en.wikipedia.org/wiki/Canonicalization\">canonicalizes</a> IPv4 and IPv6 CIDRs. For example, if you specify 100.68.0.18/18 for the CIDR block, Amazon Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any subsequent DescribeSecurityGroups and DescribeSecurityGroupRules calls will return the canonicalized form of the CIDR block. Additionally, if you attempt to add another rule with the non-canonical form of the CIDR (such as 100.68.0.18/18) and there is already a rule for the canonicalized form of the CIDR block (such as 100.68.0.0/18), the API throws an duplicate rule error.</p> </note> <p>To specify an IPv6 address range, use IP permissions instead.</p> <p>To specify multiple rules and descriptions for the rules, use IP permissions instead.</p>"
         },
         "FromPort":{
           "shape":"Integer",
@@ -9745,7 +10465,7 @@
       "members":{
         "OptInStatus":{
           "shape":"AvailabilityZoneOptInStatus",
-          "documentation":"<p>For Availability Zones, this parameter always has the value of <code>opt-in-not-required</code>.</p> <p>For Local Zones and Wavelength Zones, this parameter is the opt-in status. The possible values are <code>opted-in</code>, and <code>not-opted-in</code>.</p>",
+          "documentation":"<p>For Availability Zones, this parameter always has the value of <code>opt-in-not-required</code>.</p> <p>For Local Zones and Wavelength Zones, this parameter is the opt-in status. The possible values are <code>opted-in</code> and <code>not-opted-in</code>.</p>",
           "locationName":"optInStatus"
         },
         "Messages":{
@@ -9770,7 +10490,7 @@
         },
         "GroupName":{
           "shape":"String",
-          "documentation":"<p> For Availability Zones, this parameter has the same value as the Region name.</p> <p>For Local Zones, the name of the associated group, for example <code>us-west-2-lax-1</code>.</p> <p>For Wavelength Zones, the name of the associated group, for example <code>us-east-1-wl1-bos-wlz-1</code>.</p>",
+          "documentation":"<p>The name of the zone group. For example:</p> <ul> <li> <p>Availability Zones - <code>us-east-1-zg-1</code> </p> </li> <li> <p>Local Zones - <code>us-west-2-lax-1</code> </p> </li> <li> <p>Wavelength Zones - <code>us-east-1-wl1-bos-wlz-1</code> </p> </li> </ul>",
           "locationName":"groupName"
         },
         "NetworkBorderGroup":{
@@ -9780,7 +10500,7 @@
         },
         "ZoneType":{
           "shape":"String",
-          "documentation":"<p>The type of zone. The valid values are <code>availability-zone</code>, <code>local-zone</code>, and <code>wavelength-zone</code>.</p>",
+          "documentation":"<p>The type of zone.</p> <p>Valid values: <code>availability-zone</code> | <code>local-zone</code> | <code>wavelength-zone</code> </p>",
           "locationName":"zoneType"
         },
         "ParentZoneName":{
@@ -9793,15 +10513,27 @@
           "documentation":"<p>The ID of the zone that handles some of the Local Zone or Wavelength Zone control plane operations, such as API calls.</p>",
           "locationName":"parentZoneId"
         },
+        "GroupLongName":{
+          "shape":"String",
+          "documentation":"<p>The long name of the Availability Zone group, Local Zone group, or Wavelength Zone group.</p>",
+          "locationName":"groupLongName"
+        },
         "State":{
           "shape":"AvailabilityZoneState",
-          "documentation":"<p>The state of the Availability Zone, Local Zone, or Wavelength Zone. This value is always <code>available</code>.</p>",
+          "documentation":"<p>The state of the Availability Zone, Local Zone, or Wavelength Zone. The possible values are <code>available</code>, <code>unavailable</code>, and <code>constrained</code>.</p>",
           "locationName":"zoneState"
         }
       },
       "documentation":"<p>Describes Availability Zones, Local Zones, and Wavelength Zones.</p>"
     },
     "AvailabilityZoneId":{"type":"string"},
+    "AvailabilityZoneIdStringList":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"AvailabilityZoneId"
+      }
+    },
     "AvailabilityZoneList":{
       "type":"list",
       "member":{
@@ -10006,7 +10738,7 @@
         },
         "DeviceName":{
           "shape":"String",
-          "documentation":"<p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>",
+          "documentation":"<p>The device name. For available device names, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html\">Device names for volumes</a>.</p>",
           "locationName":"deviceName"
         },
         "VirtualName":{
@@ -10031,6 +10763,39 @@
         "locationName":"BlockDeviceMapping"
       }
     },
+    "BlockDeviceMappingResponse":{
+      "type":"structure",
+      "members":{
+        "DeviceName":{
+          "shape":"String",
+          "documentation":"<p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>",
+          "locationName":"deviceName"
+        },
+        "VirtualName":{
+          "shape":"String",
+          "documentation":"<p>The virtual device name.</p>",
+          "locationName":"virtualName"
+        },
+        "Ebs":{
+          "shape":"EbsBlockDeviceResponse",
+          "documentation":"<p>Parameters used to automatically set up EBS volumes when the instance is launched.</p>",
+          "locationName":"ebs"
+        },
+        "NoDevice":{
+          "shape":"String",
+          "documentation":"<p>Suppresses the specified device included in the block device mapping.</p>",
+          "locationName":"noDevice"
+        }
+      },
+      "documentation":"<p>Describes a block device mapping, which defines the EBS volumes and instance store volumes to attach to an instance at launch.</p>"
+    },
+    "BlockDeviceMappingResponseList":{
+      "type":"list",
+      "member":{
+        "shape":"BlockDeviceMappingResponse",
+        "locationName":"item"
+      }
+    },
     "BlockPublicAccessMode":{
       "type":"string",
       "enum":[
@@ -10073,8 +10838,10 @@
         "uefi-preferred"
       ]
     },
+    "BoxedBoolean":{"type":"boolean"},
     "BoxedDouble":{"type":"double"},
     "BoxedInteger":{"type":"integer"},
+    "BoxedLong":{"type":"long"},
     "BundleId":{"type":"string"},
     "BundleIdStringList":{
       "type":"list",
@@ -10743,6 +11510,62 @@
         "locationName":"item"
       }
     },
+    "CapacityBlock":{
+      "type":"structure",
+      "members":{
+        "CapacityBlockId":{
+          "shape":"CapacityBlockId",
+          "documentation":"<p>The ID of the Capacity Block.</p>",
+          "locationName":"capacityBlockId"
+        },
+        "UltraserverType":{
+          "shape":"String",
+          "documentation":"<p>The EC2 UltraServer type of the Capacity Block.</p>",
+          "locationName":"ultraserverType"
+        },
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The Availability Zone of the Capacity Block.</p>",
+          "locationName":"availabilityZone"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The Availability Zone ID of the Capacity Block.</p>",
+          "locationName":"availabilityZoneId"
+        },
+        "CapacityReservationIds":{
+          "shape":"CapacityReservationIdSet",
+          "documentation":"<p>The ID of the Capacity Reservation.</p>",
+          "locationName":"capacityReservationIdSet"
+        },
+        "StartDate":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time at which the Capacity Block was started.</p>",
+          "locationName":"startDate"
+        },
+        "EndDate":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time at which the Capacity Block expires. When a Capacity Block expires, all instances in the Capacity Block are terminated.</p>",
+          "locationName":"endDate"
+        },
+        "CreateDate":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time at which the Capacity Block was created.</p>",
+          "locationName":"createDate"
+        },
+        "State":{
+          "shape":"CapacityBlockResourceState",
+          "documentation":"<p>The state of the Capacity Block.</p>",
+          "locationName":"state"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags assigned to the Capacity Block.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>Reserve powerful GPU instances on a future date to support your short duration machine learning (ML) workloads. Instances that run inside a Capacity Block are automatically placed close together inside <a href=\"http://aws.amazon.com/ec2/ultraclusters/\">Amazon EC2 UltraClusters</a>, for low-latency, petabit-scale, non-blocking networking.</p> <p>You can also reserve Amazon EC2 UltraServers. UltraServers connect multiple EC2 instances using a low-latency, high-bandwidth accelerator interconnect (NeuronLink). They are built to tackle very large-scale AI/ML workloads that require significant processing power. For more information, see Amazon EC2 UltraServers.</p>"
+    },
     "CapacityBlockExtension":{
       "type":"structure",
       "members":{
@@ -10902,6 +11725,22 @@
         "payment-succeeded"
       ]
     },
+    "CapacityBlockId":{"type":"string"},
+    "CapacityBlockIds":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityBlockId",
+        "locationName":"item"
+      }
+    },
+    "CapacityBlockInterconnectStatus":{
+      "type":"string",
+      "enum":[
+        "ok",
+        "impaired",
+        "insufficient-data"
+      ]
+    },
     "CapacityBlockOffering":{
       "type":"structure",
       "members":{
@@ -10955,6 +11794,16 @@
           "documentation":"<p>The tenancy of the Capacity Block.</p>",
           "locationName":"tenancy"
         },
+        "UltraserverType":{
+          "shape":"String",
+          "documentation":"<p>The EC2 UltraServer type of the Capacity Block offering.</p>",
+          "locationName":"ultraserverType"
+        },
+        "UltraserverCount":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The number of EC2 UltraServers in the offering.</p>",
+          "locationName":"ultraserverCount"
+        },
         "CapacityBlockDurationMinutes":{
           "shape":"Integer",
           "documentation":"<p>The number of minutes (in addition to <code>capacityBlockDurationHours</code>) for the duration of the Capacity Block reservation. For example, if a Capacity Block starts at <b>08:55</b> and ends at <b>11:30</b>, the minutes field would be <b>35</b>.</p>",
@@ -10970,6 +11819,271 @@
         "locationName":"item"
       }
     },
+    "CapacityBlockResourceState":{
+      "type":"string",
+      "enum":[
+        "active",
+        "expired",
+        "unavailable",
+        "cancelled",
+        "failed",
+        "scheduled",
+        "payment-pending",
+        "payment-failed"
+      ]
+    },
+    "CapacityBlockSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityBlock",
+        "locationName":"item"
+      }
+    },
+    "CapacityBlockStatus":{
+      "type":"structure",
+      "members":{
+        "CapacityBlockId":{
+          "shape":"CapacityBlockId",
+          "documentation":"<p>The ID of the Capacity Block.</p>",
+          "locationName":"capacityBlockId"
+        },
+        "InterconnectStatus":{
+          "shape":"CapacityBlockInterconnectStatus",
+          "documentation":"<p>The status of the high-bandwidth accelerator interconnect. Possible states include:</p> <ul> <li> <p> <code>ok</code> the accelerator interconnect is healthy.</p> </li> <li> <p> <code>impaired</code> - accelerator interconnect communication is impaired.</p> </li> <li> <p> <code>insufficient-data</code> - insufficient data to determine accelerator interconnect status.</p> </li> </ul>",
+          "locationName":"interconnectStatus"
+        },
+        "TotalCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The combined amount of <code>Available</code> and <code>Unavailable</code> capacity in the Capacity Block.</p>",
+          "locationName":"totalCapacity"
+        },
+        "TotalAvailableCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The remaining capacity. Indicates the number of resources that can be launched into the Capacity Block.</p>",
+          "locationName":"totalAvailableCapacity"
+        },
+        "TotalUnavailableCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The unavailable capacity. Indicates the instance capacity that is unavailable for use due to a system status check failure.</p>",
+          "locationName":"totalUnavailableCapacity"
+        },
+        "CapacityReservationStatuses":{
+          "shape":"CapacityReservationStatusSet",
+          "documentation":"<p>The availability of capacity for the Capacity Block reservations.</p>",
+          "locationName":"capacityReservationStatusSet"
+        }
+      },
+      "documentation":"<p>Describes the availability of capacity for a Capacity Block.</p>"
+    },
+    "CapacityBlockStatusSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityBlockStatus",
+        "locationName":"item"
+      }
+    },
+    "CapacityManagerCondition":{
+      "type":"structure",
+      "members":{
+        "DimensionCondition":{
+          "shape":"DimensionCondition",
+          "documentation":"<p> The dimension-based condition that specifies how to filter the data based on dimension values. </p>"
+        }
+      },
+      "documentation":"<p> Represents a filter condition for Capacity Manager queries. Contains dimension-based filtering criteria used to narrow down metric data and dimension results. </p>"
+    },
+    "CapacityManagerConditionSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityManagerCondition",
+        "locationName":"item"
+      },
+      "max":20,
+      "min":0
+    },
+    "CapacityManagerDataExportId":{"type":"string"},
+    "CapacityManagerDataExportIdSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityManagerDataExportId",
+        "locationName":"item"
+      }
+    },
+    "CapacityManagerDataExportResponse":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerDataExportId":{
+          "shape":"CapacityManagerDataExportId",
+          "documentation":"<p> The unique identifier for the data export configuration. </p>",
+          "locationName":"capacityManagerDataExportId"
+        },
+        "S3BucketName":{
+          "shape":"String",
+          "documentation":"<p> The name of the S3 bucket where export files are delivered. </p>",
+          "locationName":"s3BucketName"
+        },
+        "S3BucketPrefix":{
+          "shape":"String",
+          "documentation":"<p> The S3 key prefix used for organizing export files within the bucket. </p>",
+          "locationName":"s3BucketPrefix"
+        },
+        "Schedule":{
+          "shape":"Schedule",
+          "documentation":"<p> The frequency at which data exports are generated. </p>",
+          "locationName":"schedule"
+        },
+        "OutputFormat":{
+          "shape":"OutputFormat",
+          "documentation":"<p> The file format of the exported data. </p>",
+          "locationName":"outputFormat"
+        },
+        "CreateTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp when the data export configuration was created. </p>",
+          "locationName":"createTime"
+        },
+        "LatestDeliveryStatus":{
+          "shape":"CapacityManagerDataExportStatus",
+          "documentation":"<p> The status of the most recent export delivery. </p>",
+          "locationName":"latestDeliveryStatus"
+        },
+        "LatestDeliveryStatusMessage":{
+          "shape":"String",
+          "documentation":"<p> A message describing the status of the most recent export delivery, including any error details if the delivery failed. </p>",
+          "locationName":"latestDeliveryStatusMessage"
+        },
+        "LatestDeliveryS3LocationUri":{
+          "shape":"String",
+          "documentation":"<p> The S3 URI of the most recently delivered export file. </p>",
+          "locationName":"latestDeliveryS3LocationUri"
+        },
+        "LatestDeliveryTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp when the most recent export was delivered to S3. </p>",
+          "locationName":"latestDeliveryTime"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p> The tags associated with the data export configuration. </p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p> Contains information about a Capacity Manager data export configuration, including export settings, delivery status, and recent export activity. </p>"
+    },
+    "CapacityManagerDataExportResponseSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityManagerDataExportResponse",
+        "locationName":"item"
+      }
+    },
+    "CapacityManagerDataExportStatus":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "in-progress",
+        "delivered",
+        "failed"
+      ]
+    },
+    "CapacityManagerDimension":{
+      "type":"structure",
+      "members":{
+        "ResourceRegion":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Web Services Region where the capacity resource is located. </p>",
+          "locationName":"resourceRegion"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p> The unique identifier of the Availability Zone where the capacity resource is located. </p>",
+          "locationName":"availabilityZoneId"
+        },
+        "AccountId":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Web Services account ID that owns the capacity resource. </p>",
+          "locationName":"accountId"
+        },
+        "InstanceFamily":{
+          "shape":"String",
+          "documentation":"<p> The EC2 instance family of the capacity resource. </p>",
+          "locationName":"instanceFamily"
+        },
+        "InstanceType":{
+          "shape":"String",
+          "documentation":"<p> The specific EC2 instance type of the capacity resource. </p>",
+          "locationName":"instanceType"
+        },
+        "InstancePlatform":{
+          "shape":"String",
+          "documentation":"<p> The platform or operating system of the instance. </p>",
+          "locationName":"instancePlatform"
+        },
+        "ReservationArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the capacity reservation. This provides a unique identifier that can be used across Amazon Web Services services to reference the specific reservation. </p>",
+          "locationName":"reservationArn"
+        },
+        "ReservationId":{
+          "shape":"String",
+          "documentation":"<p> The unique identifier of the capacity reservation. </p>",
+          "locationName":"reservationId"
+        },
+        "ReservationType":{
+          "shape":"ReservationType",
+          "documentation":"<p> The type of capacity reservation. </p>",
+          "locationName":"reservationType"
+        },
+        "ReservationCreateTimestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp when the capacity reservation was originally created, in milliseconds since epoch. This differs from the start timestamp as reservations can be created before they become active. </p>",
+          "locationName":"reservationCreateTimestamp"
+        },
+        "ReservationStartTimestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp when the capacity reservation becomes active and available for use, in milliseconds since epoch. This is when the reservation begins providing capacity. </p>",
+          "locationName":"reservationStartTimestamp"
+        },
+        "ReservationEndTimestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp when the capacity reservation expires and is no longer available, in milliseconds since epoch. After this time, the reservation will not provide any capacity. </p>",
+          "locationName":"reservationEndTimestamp"
+        },
+        "ReservationEndDateType":{
+          "shape":"ReservationEndDateType",
+          "documentation":"<p> The type of end date for the capacity reservation. This indicates whether the reservation has a fixed end date, is open-ended, or follows a specific termination pattern. </p>",
+          "locationName":"reservationEndDateType"
+        },
+        "Tenancy":{
+          "shape":"CapacityTenancy",
+          "documentation":"<p> The tenancy of the EC2 instances associated with this capacity dimension. Valid values are 'default' for shared tenancy, 'dedicated' for dedicated instances, or 'host' for dedicated hosts. </p>",
+          "locationName":"tenancy"
+        },
+        "ReservationState":{
+          "shape":"ReservationState",
+          "documentation":"<p> The current state of the capacity reservation. </p>",
+          "locationName":"reservationState"
+        },
+        "ReservationInstanceMatchCriteria":{
+          "shape":"String",
+          "documentation":"<p> The instance matching criteria for the capacity reservation, determining how instances are matched to the reservation. </p>",
+          "locationName":"reservationInstanceMatchCriteria"
+        },
+        "ReservationUnusedFinancialOwner":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Web Services account ID that is financially responsible for unused capacity reservation costs. </p>",
+          "locationName":"reservationUnusedFinancialOwner"
+        }
+      },
+      "documentation":"<p> Represents dimension values for capacity metrics, including resource identifiers, geographic information, and reservation details used for grouping and filtering capacity data. </p>"
+    },
+    "CapacityManagerStatus":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
     "CapacityReservation":{
       "type":"structure",
       "members":{
@@ -10990,7 +12104,7 @@
         },
         "AvailabilityZoneId":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone ID of the Capacity Reservation.</p>",
+          "documentation":"<p>The ID of the Availability Zone in which the capacity is reserved.</p>",
           "locationName":"availabilityZoneId"
         },
         "InstanceType":{
@@ -11035,17 +12149,17 @@
         },
         "State":{
           "shape":"CapacityReservationState",
-          "documentation":"<p>The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p> <ul> <li> <p> <code>active</code> - The capacity is available for use.</p> </li> <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your reservation request. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>cancelled</code> - The Capacity Reservation was canceled. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li> <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request can fail due to request parameters that are not valid, capacity constraints, or instance limit constraints. You can view a failed request for 60 minutes.</p> </li> <li> <p> <code>scheduled</code> - (<i>Future-dated Capacity Reservations only</i>) The future-dated Capacity Reservation request was approved and the Capacity Reservation is scheduled for delivery on the requested start date.</p> </li> <li> <p> <code>assessing</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 is assessing your request for a future-dated Capacity Reservation.</p> </li> <li> <p> <code>delayed</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 encountered a delay in provisioning the requested future-dated Capacity Reservation. Amazon EC2 is unable to deliver the requested capacity by the requested start date and time.</p> </li> <li> <p> <code>unsupported</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 can't support the future-dated Capacity Reservation request due to capacity constraints. You can view unsupported requests for 30 days. The Capacity Reservation will not be delivered.</p> </li> </ul>",
+          "documentation":"<p>The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p> <ul> <li> <p> <code>active</code> - The capacity is available for use.</p> </li> <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your reservation request. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>cancelled</code> - The Capacity Reservation was canceled. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li> <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request can fail due to request parameters that are not valid, capacity constraints, or instance limit constraints. You can view a failed request for 60 minutes.</p> </li> <li> <p> <code>scheduled</code> - (<i>Future-dated Capacity Reservations</i>) The future-dated Capacity Reservation request was approved and the Capacity Reservation is scheduled for delivery on the requested start date.</p> </li> <li> <p> <code>payment-pending</code> - (<i>Capacity Blocks</i>) The upfront payment has not been processed yet.</p> </li> <li> <p> <code>payment-failed</code> - (<i>Capacity Blocks</i>) The upfront payment was not processed in the 12-hour time frame. Your Capacity Block was released.</p> </li> <li> <p> <code>assessing</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 is assessing your request for a future-dated Capacity Reservation.</p> </li> <li> <p> <code>delayed</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 encountered a delay in provisioning the requested future-dated Capacity Reservation. Amazon EC2 is unable to deliver the requested capacity by the requested start date and time.</p> </li> <li> <p> <code>unsupported</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 can't support the future-dated Capacity Reservation request due to capacity constraints. You can view unsupported requests for 30 days. The Capacity Reservation will not be delivered.</p> </li> </ul>",
           "locationName":"state"
         },
         "StartDate":{
           "shape":"MillisecondDateTime",
-          "documentation":"<p>The date and time at which the Capacity Reservation was started.</p>",
+          "documentation":"<p>The date and time the Capacity Reservation was started.</p>",
           "locationName":"startDate"
         },
         "EndDate":{
           "shape":"DateTime",
-          "documentation":"<p>The date and time at which the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>",
+          "documentation":"<p>The date and time the Capacity Reservation expires. When a Capacity Reservation expires, the reserved capacity is released and you can no longer launch instances into it. The Capacity Reservation's state changes to <code>expired</code> when it reaches its end date and time.</p>",
           "locationName":"endDate"
         },
         "EndDateType":{
@@ -11060,7 +12174,7 @@
         },
         "CreateDate":{
           "shape":"DateTime",
-          "documentation":"<p>The date and time at which the Capacity Reservation was created.</p>",
+          "documentation":"<p>The date and time the Capacity Reservation was created.</p>",
           "locationName":"createDate"
         },
         "Tags":{
@@ -11107,6 +12221,11 @@
           "shape":"CapacityReservationDeliveryPreference",
           "documentation":"<p>The delivery method for a future-dated Capacity Reservation. <code>incremental</code> indicates that the requested capacity is delivered in addition to any running instances and reserved capacity that you have in your account at the requested date and time.</p>",
           "locationName":"deliveryPreference"
+        },
+        "CapacityBlockId":{
+          "shape":"CapacityBlockId",
+          "documentation":"<p>The ID of the Capacity Block.</p>",
+          "locationName":"capacityBlockId"
         }
       },
       "documentation":"<p>Describes a Capacity Reservation.</p>"
@@ -11369,6 +12488,11 @@
           "shape":"CapacityReservationTenancy",
           "documentation":"<p>The tenancy of the Capacity Reservation.</p>",
           "locationName":"tenancy"
+        },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
         }
       },
       "documentation":"<p>Information about a Capacity Reservation.</p>"
@@ -11475,9 +12599,43 @@
         "payment-failed",
         "assessing",
         "delayed",
-        "unsupported"
+        "unsupported",
+        "unavailable"
       ]
     },
+    "CapacityReservationStatus":{
+      "type":"structure",
+      "members":{
+        "CapacityReservationId":{
+          "shape":"CapacityReservationId",
+          "documentation":"<p>The ID of the Capacity Reservation.</p>",
+          "locationName":"capacityReservationId"
+        },
+        "TotalCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The combined amount of <code>Available</code> and <code>Unavailable</code> capacity in the Capacity Reservation.</p>",
+          "locationName":"totalCapacity"
+        },
+        "TotalAvailableCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The remaining capacity. Indicates the amount of resources that can be launched into the Capacity Reservation.</p>",
+          "locationName":"totalAvailableCapacity"
+        },
+        "TotalUnavailableCapacity":{
+          "shape":"Integer",
+          "documentation":"<p>The used capacity. Indicates that the capacity is in use by resources that are running in the Capacity Reservation.</p>",
+          "locationName":"totalUnavailableCapacity"
+        }
+      },
+      "documentation":"<p>Describes the availability of capacity for a Capacity Reservation.</p>"
+    },
+    "CapacityReservationStatusSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityReservationStatus",
+        "locationName":"item"
+      }
+    },
     "CapacityReservationTarget":{
       "type":"structure",
       "members":{
@@ -11515,6 +12673,59 @@
         "dedicated"
       ]
     },
+    "CapacityReservationTopology":{
+      "type":"structure",
+      "members":{
+        "CapacityReservationId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Capacity Reservation.</p>",
+          "locationName":"capacityReservationId"
+        },
+        "CapacityBlockId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Capacity Block. This parameter is only supported for UltraServer instances and identifies instances within the UltraServer domain.</p>",
+          "locationName":"capacityBlockId"
+        },
+        "State":{
+          "shape":"String",
+          "documentation":"<p>The current state of the Capacity Reservation. For the list of possible states, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeCapacityReservations.html\">DescribeCapacityReservations</a>.</p>",
+          "locationName":"state"
+        },
+        "InstanceType":{
+          "shape":"String",
+          "documentation":"<p>The instance type.</p>",
+          "locationName":"instanceType"
+        },
+        "GroupName":{
+          "shape":"String",
+          "documentation":"<p>The name of the placement group that the Capacity Reservation is in.</p>",
+          "locationName":"groupName"
+        },
+        "NetworkNodes":{
+          "shape":"NetworkNodeSet",
+          "documentation":"<p>The network nodes. The nodes are hashed based on your account. Capacity Reservations from different accounts running under the same server will return a different hashed list of strings.</p> <p>The value is <code>null</code> or empty if:</p> <ul> <li> <p>The instance type is not supported.</p> </li> <li> <p>The Capacity Reservation is in a state other than <code>active</code> or <code>pending</code>.</p> </li> </ul>",
+          "locationName":"networkNodeSet"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone or Local Zone that the Capacity Reservation is in.</p>",
+          "locationName":"availabilityZoneId"
+        },
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The name of the Availability Zone or Local Zone that the Capacity Reservation is in.</p>",
+          "locationName":"availabilityZone"
+        }
+      },
+      "documentation":"<p>Information about the Capacity Reservation topology.</p>"
+    },
+    "CapacityReservationTopologySet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityReservationTopology",
+        "locationName":"item"
+      }
+    },
     "CapacityReservationType":{
       "type":"string",
       "enum":[
@@ -11522,6 +12733,13 @@
         "capacity-block"
       ]
     },
+    "CapacityTenancy":{
+      "type":"string",
+      "enum":[
+        "default",
+        "dedicated"
+      ]
+    },
     "CarrierGateway":{
       "type":"structure",
       "members":{
@@ -11835,6 +13053,27 @@
       },
       "documentation":"<p>Current state of options for customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>"
     },
+    "ClientRouteEnforcementOptions":{
+      "type":"structure",
+      "members":{
+        "Enforced":{
+          "shape":"Boolean",
+          "documentation":"<p>Enable or disable Client Route Enforcement. The state can either be <code>true</code> (enabled) or <code>false</code> (disabled). The default is <code>false</code>.</p> <p>Valid values: <code>true | false</code> </p> <p>Default value: <code>false</code> </p>"
+        }
+      },
+      "documentation":"<p>Client Route Enforcement is a feature of Client VPN that helps enforce administrator defined routes on devices connected through the VPN. This feature helps improve your security posture by ensuring that network traffic originating from a connected client is not inadvertently sent outside the VPN tunnel.</p> <p>Client Route Enforcement works by monitoring the route table of a connected device for routing policy changes to the VPN connection. If the feature detects any VPN routing policy modifications, it will automatically force an update to the route table, reverting it back to the expected route configurations.</p>"
+    },
+    "ClientRouteEnforcementResponseOptions":{
+      "type":"structure",
+      "members":{
+        "Enforced":{
+          "shape":"Boolean",
+          "documentation":"<p>Status of the client route enforcement feature, indicating whether Client Route Enforcement is <code>true</code> (enabled) or <code>false</code> (disabled).</p> <p>Valid values: <code>true | false</code> </p> <p>Default value: <code>false</code> </p>",
+          "locationName":"enforced"
+        }
+      },
+      "documentation":"<p>The current status of Client Route Enforcement. </p>"
+    },
     "ClientSecretType":{
       "type":"string",
       "sensitive":true
@@ -11984,6 +13223,11 @@
           "documentation":"<p>The IP address of the client.</p>",
           "locationName":"clientIp"
         },
+        "ClientIpv6Address":{
+          "shape":"String",
+          "documentation":"<p>The IPv6 address assigned to the client connection when using a dual-stack Client VPN endpoint. This field is only populated when the endpoint is configured for dual-stack addressing, and the client is using IPv6 for connectivity.</p>",
+          "locationName":"clientIpv6Address"
+        },
         "CommonName":{
           "shape":"String",
           "documentation":"<p>The common name associated with the client. This is either the name of the client certificate, or the Active Directory user name.</p>",
@@ -12159,10 +13403,25 @@
           "documentation":"<p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>",
           "locationName":"clientLoginBannerOptions"
         },
+        "ClientRouteEnforcementOptions":{
+          "shape":"ClientRouteEnforcementResponseOptions",
+          "documentation":"<p>Client route enforcement is a feature of the Client VPN service that helps enforce administrator defined routes on devices connected through the VPN. T his feature helps improve your security posture by ensuring that network traffic originating from a connected client is not inadvertently sent outside the VPN tunnel.</p> <p>Client route enforcement works by monitoring the route table of a connected device for routing policy changes to the VPN connection. If the feature detects any VPN routing policy modifications, it will automatically force an update to the route table, reverting it back to the expected route configurations.</p>",
+          "locationName":"clientRouteEnforcementOptions"
+        },
         "DisconnectOnSessionTimeout":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum <code>sessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>false</code>.</p>",
+          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum <code>sessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>true</code>.</p>",
           "locationName":"disconnectOnSessionTimeout"
+        },
+        "EndpointIpAddressType":{
+          "shape":"EndpointIpAddressType",
+          "documentation":"<p>The IP address type of the Client VPN endpoint. Possible values are <code>ipv4</code> for IPv4 addressing only, <code>ipv6</code> for IPv6 addressing only, or <code>dual-stack </code>for both IPv4 and IPv6 addressing.</p>",
+          "locationName":"endpointIpAddressType"
+        },
+        "TrafficIpAddressType":{
+          "shape":"TrafficIpAddressType",
+          "documentation":"<p>The IP address type of the Client VPN endpoint. Possible values are either <code>ipv4</code> for IPv4 addressing only, <code>ipv6</code> for IPv6 addressing only, or <code>dual-stack</code> for both IPv4 and IPv6 addressing.</p>",
+          "locationName":"trafficIpAddressType"
         }
       },
       "documentation":"<p>Describes a Client VPN endpoint.</p>"
@@ -12448,6 +13707,13 @@
         "locationName":"item"
       }
     },
+    "Comparison":{
+      "type":"string",
+      "enum":[
+        "equals",
+        "in"
+      ]
+    },
     "ComponentAccount":{
       "type":"string",
       "pattern":"\\d{12}"
@@ -12456,6 +13722,15 @@
       "type":"string",
       "pattern":"[a-z]{2}-[a-z]+-[1-9]+"
     },
+    "ConditionValueList":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"item"
+      },
+      "max":10,
+      "min":0
+    },
     "ConfirmProductInstanceRequest":{
       "type":"structure",
       "required":[
@@ -12810,15 +14085,16 @@
       "members":{
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>"
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency in Amazon EC2 API requests</a> in the <i>Amazon EC2 API Reference</i>.</p>",
+          "idempotencyToken":true
         },
         "Description":{
           "shape":"String",
-          "documentation":"<p>A description for the new AMI in the destination Region.</p>"
+          "documentation":"<p>A description for the new AMI.</p>"
         },
         "Encrypted":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether the destination snapshots of the copied image should be encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot create an unencrypted copy of an encrypted snapshot. The default KMS key for Amazon EBS is used unless you specify a non-default Key Management Service (KMS) KMS key using <code>KmsKeyId</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html\">Use encryption with EBS-backed AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>Specifies whether to encrypt the snapshots of the copied image.</p> <p>You can encrypt a copy of an unencrypted snapshot, but you cannot create an unencrypted copy of an encrypted snapshot. The default KMS key for Amazon EBS is used unless you specify a non-default Key Management Service (KMS) KMS key using <code>KmsKeyId</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html\">Use encryption with EBS-backed AMIs</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"encrypted"
         },
         "KmsKeyId":{
@@ -12828,7 +14104,7 @@
         },
         "Name":{
           "shape":"String",
-          "documentation":"<p>The name of the new AMI in the destination Region.</p>"
+          "documentation":"<p>The name of the new AMI.</p>"
         },
         "SourceImageId":{
           "shape":"String",
@@ -12840,17 +14116,29 @@
         },
         "DestinationOutpostArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI. Only specify this parameter when copying an AMI from an Amazon Web Services Region to an Outpost. The AMI must be in the Region of the destination Outpost. You cannot copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-amis\">Copy AMIs from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EBS User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost for the new AMI.</p> <p>Only specify this parameter when copying an AMI from an Amazon Web Services Region to an Outpost. The AMI must be in the Region of the destination Outpost. You can't copy an AMI from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-amis\">Copy AMIs from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EBS User Guide</i>.</p> <p>Only one of <code>DestinationAvailabilityZone</code>, <code>DestinationAvailabilityZoneId</code>, or <code>DestinationOutpostArn</code> can be specified.</p>"
         },
         "CopyImageTags":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether to include your user-defined AMI tags when copying the AMI.</p> <p>The following tags will not be copied:</p> <ul> <li> <p>System tags (prefixed with <code>aws:</code>)</p> </li> <li> <p>For public and shared AMIs, user-defined tags that are attached by other Amazon Web Services accounts</p> </li> </ul> <p>Default: Your user-defined AMI tags are not copied.</p>"
+          "documentation":"<p>Specifies whether to copy your user-defined AMI tags to the new AMI.</p> <p>The following tags are not be copied:</p> <ul> <li> <p>System tags (prefixed with <code>aws:</code>)</p> </li> <li> <p>For public and shared AMIs, user-defined tags that are attached by other Amazon Web Services accounts</p> </li> </ul> <p>Default: Your user-defined AMI tags are not copied.</p>"
         },
         "TagSpecifications":{
           "shape":"TagSpecificationList",
           "documentation":"<p>The tags to apply to the new AMI and new snapshots. You can tag the AMI, the snapshots, or both.</p> <ul> <li> <p>To tag the new AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li> <li> <p>To tag the new snapshots, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all the new snapshots.</p> </li> </ul> <p>If you specify other values for <code>ResourceType</code>, the request fails.</p> <p>To tag an AMI or snapshot after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>.</p>",
           "locationName":"TagSpecification"
         },
+        "SnapshotCopyCompletionDurationMinutes":{
+          "shape":"Long",
+          "documentation":"<p>Specify a completion duration, in 15 minute increments, to initiate a time-based AMI copy. The specified completion duration applies to each of the snapshots associated with the AMI. Each snapshot associated with the AMI will be completed within the specified completion duration, with copy throughput automatically adjusted for each snapshot based on its size to meet the timing target.</p> <p>If you do not specify a value, the AMI copy operation is completed on a best-effort basis.</p> <note> <p>This parameter is not supported when copying an AMI to or from a Local Zone, or to an Outpost.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html\">Time-based copies for Amazon EBS snapshots and EBS-backed AMIs</a>.</p>"
+        },
+        "DestinationAvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The Local Zone for the new AMI (for example, <code>cn-north-1-pkx-1a</code>).</p> <p>Only one of <code>DestinationAvailabilityZone</code>, <code>DestinationAvailabilityZoneId</code>, or <code>DestinationOutpostArn</code> can be specified.</p>"
+        },
+        "DestinationAvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Local Zone for the new AMI (for example, <code>cnn1-pkx1-az1</code>).</p> <p>Only one of <code>DestinationAvailabilityZone</code>, <code>DestinationAvailabilityZoneId</code>, or <code>DestinationOutpostArn</code> can be specified.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -12883,7 +14171,7 @@
         },
         "DestinationOutpostArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot. Only specify this parameter when copying a snapshot from an Amazon Web Services Region to an Outpost. The snapshot must be in the Region for the destination Outpost. You cannot copy a snapshot from an Outpost to a Region, from one Outpost to another, or within the same Outpost.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-snapshots\"> Copy snapshots from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EBS User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost to which to copy the snapshot.</p> <note> <p>Only supported when copying a snapshot to an Outpost.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-snapshots\"> Copy snapshots from an Amazon Web Services Region to an Outpost</a> in the <i>Amazon EBS User Guide</i>.</p>"
         },
         "DestinationRegion":{
           "shape":"String",
@@ -12892,7 +14180,7 @@
         },
         "Encrypted":{
           "shape":"Boolean",
-          "documentation":"<p>To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>",
+          "documentation":"<p>To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled, enable encryption using this parameter. Otherwise, omit this parameter. Copies of encrypted snapshots are encrypted, even if you omit this parameter and encryption by default is not enabled. You cannot set this parameter to false. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p>",
           "locationName":"encrypted"
         },
         "KmsKeyId":{
@@ -12920,7 +14208,11 @@
         },
         "CompletionDurationMinutes":{
           "shape":"SnapshotCompletionDurationMinutesRequest",
-          "documentation":"<p>Specify a completion duration, in 15 minute increments, to initiate a time-based snapshot copy. Time-based snapshot copy operations complete within the specified duration. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html\"> Time-based copies</a>.</p> <p>If you do not specify a value, the snapshot copy operation is completed on a best-effort basis.</p>"
+          "documentation":"<note> <p>Not supported when copying snapshots to or from Local Zones or Outposts.</p> </note> <p>Specify a completion duration, in 15 minute increments, to initiate a time-based snapshot copy. Time-based snapshot copy operations complete within the specified duration. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html\"> Time-based copies</a>.</p> <p>If you do not specify a value, the snapshot copy operation is completed on a best-effort basis.</p>"
+        },
+        "DestinationAvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The Local Zone, for example, <code>cn-north-1-pkx-1a</code> to which to copy the snapshot.</p> <note> <p>Only supported when copying a snapshot to a Local Zone.</p> </note>"
         },
         "DryRun":{
           "shape":"Boolean",
@@ -12952,6 +14244,60 @@
       "type":"string",
       "enum":["volume"]
     },
+    "CopyVolumesRequest":{
+      "type":"structure",
+      "required":["SourceVolumeId"],
+      "members":{
+        "SourceVolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>The ID of the source EBS volume to copy.</p>"
+        },
+        "Iops":{
+          "shape":"Integer",
+          "documentation":"<p>The number of I/O operations per second (IOPS) to provision for the volume copy. Required for <code>io1</code> and <code>io2</code> volumes. Optional for <code>gp3</code> volumes. Omit for all other volume types. Full provisioned IOPS performance can be achieved only once the volume copy is fully initialized. </p> <p>Valid ranges:</p> <ul> <li> <p>gp3: <code>3,000 </code>(<i>default</i>)<code> - 80,000</code> IOPS</p> </li> <li> <p>io1: <code>100 - 64,000</code> IOPS</p> </li> <li> <p>io2: <code>100 - 256,000</code> IOPS</p> </li> </ul> <note> <p> <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\"> Instances built on the Nitro System</a> can support up to 256,000 IOPS. Other instances can support up to 32,000 IOPS.</p> </note>"
+        },
+        "Size":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the volume copy, in GiBs. The size must be equal to or greater than the size of the source volume. If not specified, the size defaults to the size of the source volume.</p> <p>Maximum supported sizes:</p> <ul> <li> <p>gp2: <code>16,384</code> GiB</p> </li> <li> <p>gp3: <code>65,536</code> GiB</p> </li> <li> <p>io1: <code>16,384</code> GiB</p> </li> <li> <p>io2: <code>65,536</code> GiB</p> </li> <li> <p>st1 and sc1: <code>16,384</code> GiB</p> </li> <li> <p>standard: <code>1024</code> GiB</p> </li> </ul>"
+        },
+        "VolumeType":{
+          "shape":"VolumeType",
+          "documentation":"<p>The volume type for the volume copy. If not specified, the volume type defaults to <code>gp2</code>.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the volume copy during creation.</p>",
+          "locationName":"TagSpecification"
+        },
+        "MultiAttachEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to enable Amazon EBS Multi-Attach for the volume copy. If you enable Multi-Attach, you can attach the volume to up to 16 Nitro instances in the same Availability Zone simultaneously. Supported with <code>io1</code> and <code>io2</code> volumes only. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html\"> Amazon EBS Multi-Attach</a>.</p>"
+        },
+        "Throughput":{
+          "shape":"Integer",
+          "documentation":"<p>The throughput to provision for the volume copy, in MiB/s. Supported for <code>gp3</code> volumes only. Omit for all other volume types. Full provisioned throughput performance can be achieved only once the volume copy is fully initialized.</p> <p>Valid Range: <code>125 - 2000</code> MiB/s</p> <p/>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\"> Ensure Idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CopyVolumesResult":{
+      "type":"structure",
+      "members":{
+        "Volumes":{
+          "shape":"VolumeList",
+          "documentation":"<p>Information about the volume copy.</p>",
+          "locationName":"volumeSet"
+        }
+      }
+    },
     "CoreCount":{"type":"integer"},
     "CoreCountList":{
       "type":"list",
@@ -13039,6 +14385,56 @@
       },
       "documentation":"<p>The CPU performance to consider, using an instance family as the baseline reference.</p>"
     },
+    "CreateCapacityManagerDataExportRequest":{
+      "type":"structure",
+      "required":[
+        "S3BucketName",
+        "Schedule",
+        "OutputFormat"
+      ],
+      "members":{
+        "S3BucketName":{
+          "shape":"String",
+          "documentation":"<p> The name of the S3 bucket where the capacity data export files will be delivered. The bucket must exist and you must have write permissions to it. </p>"
+        },
+        "S3BucketPrefix":{
+          "shape":"String",
+          "documentation":"<p> The S3 key prefix for the exported data files. This allows you to organize exports in a specific folder structure within your bucket. If not specified, files are placed at the bucket root. </p>"
+        },
+        "Schedule":{
+          "shape":"Schedule",
+          "documentation":"<p> The frequency at which data exports are generated. </p>"
+        },
+        "OutputFormat":{
+          "shape":"OutputFormat",
+          "documentation":"<p> The file format for the exported data. Parquet format is recommended for large datasets and better compression. </p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p> Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see Ensure Idempotency. </p>",
+          "idempotencyToken":true
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p> The tags to apply to the data export configuration. You can tag the export for organization and cost tracking purposes. </p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateCapacityManagerDataExportResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerDataExportId":{
+          "shape":"CapacityManagerDataExportId",
+          "documentation":"<p> The unique identifier for the created data export configuration. Use this ID to reference the export in other API calls. </p>",
+          "locationName":"capacityManagerDataExportId"
+        }
+      }
+    },
     "CreateCapacityReservationBySplittingRequest":{
       "type":"structure",
       "required":[
@@ -13212,7 +14608,7 @@
         },
         "InstanceType":{
           "shape":"String",
-          "documentation":"<p>The instance type for which to reserve capacity.</p> <note> <p>You can request future-dated Capacity Reservations for instance types in the C, M, R, I, and T instance families only.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>The instance type for which to reserve capacity.</p> <note> <p>You can request future-dated Capacity Reservations for instance types in the C, M, R, I, T, and G instance families only.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "InstancePlatform":{
           "shape":"CapacityReservationInstancePlatform",
@@ -13232,7 +14628,7 @@
         },
         "InstanceCount":{
           "shape":"Integer",
-          "documentation":"<p>The number of instances for which to reserve capacity.</p> <note> <p>You can request future-dated Capacity Reservations for an instance count with a minimum of 100 VPUs. For example, if you request a future-dated Capacity Reservation for <code>m5.xlarge</code> instances, you must request at least 25 instances (<i>25 * m5.xlarge = 100 vCPUs</i>).</p> </note> <p>Valid range: 1 - 1000</p>"
+          "documentation":"<p>The number of instances for which to reserve capacity.</p> <note> <p>You can request future-dated Capacity Reservations for an instance count with a minimum of 64 vCPUs. For example, if you request a future-dated Capacity Reservation for <code>m5.xlarge</code> instances, you must request at least 25 instances (<i>16 * m5.xlarge = 64 vCPUs</i>).</p> </note> <p>Valid range: 1 - 1000</p>"
         },
         "EbsOptimized":{
           "shape":"Boolean",
@@ -13331,7 +14727,6 @@
     "CreateClientVpnEndpointRequest":{
       "type":"structure",
       "required":[
-        "ClientCidrBlock",
         "ServerCertificateArn",
         "AuthenticationOptions",
         "ConnectionLogOptions"
@@ -13413,9 +14808,21 @@
           "shape":"ClientLoginBannerOptions",
           "documentation":"<p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>"
         },
+        "ClientRouteEnforcementOptions":{
+          "shape":"ClientRouteEnforcementOptions",
+          "documentation":"<p>Client route enforcement is a feature of the Client VPN service that helps enforce administrator defined routes on devices connected through the VPN. T his feature helps improve your security posture by ensuring that network traffic originating from a connected client is not inadvertently sent outside the VPN tunnel.</p> <p>Client route enforcement works by monitoring the route table of a connected device for routing policy changes to the VPN connection. If the feature detects any VPN routing policy modifications, it will automatically force an update to the route table, reverting it back to the expected route configurations.</p>"
+        },
         "DisconnectOnSessionTimeout":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum timeout specified in <code>SessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>false</code>.</p>"
+          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum timeout specified in <code>SessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>true</code>.</p>"
+        },
+        "EndpointIpAddressType":{
+          "shape":"EndpointIpAddressType",
+          "documentation":"<p>The IP address type for the Client VPN endpoint. Valid values are <code>ipv4</code> (default) for IPv4 addressing only, <code>ipv6</code> for IPv6 addressing only, or <code>dual-stack</code> for both IPv4 and IPv6 addressing. When set to <code>dual-stack,</code> clients can connect to the endpoint using either IPv4 or IPv6 addresses..</p>"
+        },
+        "TrafficIpAddressType":{
+          "shape":"TrafficIpAddressType",
+          "documentation":"<p>The IP address type for traffic within the Client VPN tunnel. Valid values are <code>ipv4</code> (default) for IPv4 traffic only, <code>ipv6</code> for IPv6 addressing only, or <code>dual-stack</code> for both IPv4 and IPv6 traffic. When set to <code>dual-stack</code>, clients can access both IPv4 and IPv6 resources through the VPN .</p>"
         }
       }
     },
@@ -13575,7 +14982,7 @@
         },
         "IpAddress":{
           "shape":"String",
-          "documentation":"<p>IPv4 address for the customer gateway device's outside interface. The address must be static. If <code>OutsideIpAddressType</code> in your VPN connection options is set to <code>PrivateIpv4</code>, you can use an RFC6598 or RFC1918 private IPv4 address. If <code>OutsideIpAddressType</code> is set to <code>PublicIpv4</code>, you can use a public IPv4 address. </p>"
+          "documentation":"<p>The IP address for the customer gateway device's outside interface. The address must be static. If <code>OutsideIpAddressType</code> in your VPN connection options is set to <code>PrivateIpv4</code>, you can use an RFC6598 or RFC1918 private IPv4 address. If <code>OutsideIpAddressType</code> is set to <code>Ipv6</code>, you can use an IPv6 address. </p>"
         },
         "BgpAsnExtended":{
           "shape":"Long",
@@ -13602,11 +15009,10 @@
     },
     "CreateDefaultSubnetRequest":{
       "type":"structure",
-      "required":["AvailabilityZone"],
       "members":{
         "AvailabilityZone":{
           "shape":"AvailabilityZoneName",
-          "documentation":"<p>The Availability Zone in which to create the default subnet.</p>"
+          "documentation":"<p>The Availability Zone in which to create the default subnet.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>"
         },
         "DryRun":{
           "shape":"Boolean",
@@ -13615,6 +15021,10 @@
         "Ipv6Native":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to create an IPv6 only subnet. If you already have a default subnet for this Availability Zone, you must delete it before you can create an IPv6 only subnet.</p>"
+        },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>"
         }
       }
     },
@@ -13647,6 +15057,47 @@
         }
       }
     },
+    "CreateDelegateMacVolumeOwnershipTaskRequest":{
+      "type":"structure",
+      "required":[
+        "InstanceId",
+        "MacCredentials"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The ID of the Amazon EC2 Mac instance.</p>"
+        },
+        "MacCredentials":{
+          "shape":"SensitiveMacCredentials",
+          "documentation":"<p>Specifies the following credentials:</p> <ul> <li> <p> <b>Internal disk administrative user</b> </p> <ul> <li> <p> <b>Username</b> - Only the default administrative user (<code>aws-managed-user</code>) is supported and it is used by default. You can't specify a different administrative user.</p> </li> <li> <p> <b>Password</b> - If you did not change the default password for <code>aws-managed-user</code>, specify the default password, which is <i>blank</i>. Otherwise, specify your password.</p> </li> </ul> </li> <li> <p> <b>Amazon EBS root volume administrative user</b> </p> <ul> <li> <p> <b>Username</b> - If you did not change the default administrative user, specify <code>ec2-user</code>. Otherwise, specify the username for your administrative user.</p> </li> <li> <p> <b>Password</b> - Specify the password for the administrative user.</p> </li> </ul> </li> </ul> <p>The credentials must be specified in the following JSON format:</p> <p> <code>{ \"internalDiskPassword\":\"<i>internal-disk-admin_password</i>\", \"rootVolumeUsername\":\"<i>root-volume-admin_username</i>\", \"rootVolumepassword\":\"<i>root-volume-admin_password</i>\" }</code> </p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to assign to the volume ownership delegation task.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateDelegateMacVolumeOwnershipTaskResult":{
+      "type":"structure",
+      "members":{
+        "MacModificationTask":{
+          "shape":"MacModificationTask",
+          "documentation":"<p>Information about the volume ownership delegation task.</p>",
+          "locationName":"macModificationTask"
+        }
+      }
+    },
     "CreateDhcpOptionsRequest":{
       "type":"structure",
       "required":["DhcpConfigurations"],
@@ -13800,7 +15251,8 @@
         },
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>"
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
         },
         "SpotOptions":{
           "shape":"SpotOptionsRequest",
@@ -14022,6 +15474,10 @@
           "documentation":"<p>The tags to apply to the AMI and snapshots on creation. You can tag the AMI, the snapshots, or both.</p> <ul> <li> <p>To tag the AMI, the value for <code>ResourceType</code> must be <code>image</code>.</p> </li> <li> <p>To tag the snapshots that are created of the root volume and of other Amazon EBS volumes that are attached to the instance, the value for <code>ResourceType</code> must be <code>snapshot</code>. The same tag is applied to all of the snapshots that are created.</p> </li> </ul> <p>If you specify other values for <code>ResourceType</code>, the request fails.</p> <p>To tag an AMI or snapshot after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>. </p>",
           "locationName":"TagSpecification"
         },
+        "SnapshotLocation":{
+          "shape":"SnapshotLocationEnum",
+          "documentation":"<note> <p>Only supported for instances in Local Zones. If the source instance is not in a Local Zone, omit this parameter.</p> </note> <p>The Amazon S3 location where the snapshots will be stored.</p> <ul> <li> <p>To create local snapshots in the same Local Zone as the source instance, specify <code>local</code>.</p> </li> <li> <p>To create regional snapshots in the parent Region of the Local Zone, specify <code>regional</code> or omit this parameter.</p> </li> </ul> <p>Default: <code>regional</code> </p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -14049,7 +15505,7 @@
         },
         "BlockDeviceMappings":{
           "shape":"BlockDeviceMappingRequestList",
-          "documentation":"<p>The block device mappings.</p> <p>When using the CreateImage action:</p> <ul> <li> <p>You can't change the volume size using the VolumeSize parameter. If you want a different volume size, you must first change the volume size of the source instance.</p> </li> <li> <p>You can't modify the encryption status of existing volumes or snapshots. To create an AMI with volumes or snapshots that have a different encryption status (for example, where the source volume and snapshots are unencrypted, and you want to create an AMI with encrypted volumes or snapshots), use the <a>CopyImage</a> action.</p> </li> <li> <p>The only option that can be changed for existing mappings or snapshots is <code>DeleteOnTermination</code>.</p> </li> </ul>",
+          "documentation":"<p>The block device mappings.</p> <p>When using the CreateImage action:</p> <ul> <li> <p>You can't change the volume size using the VolumeSize parameter. If you want a different volume size, you must first change the volume size of the source instance.</p> </li> <li> <p>You can't modify the encryption status of existing volumes or snapshots. To create an AMI with volumes or snapshots that have a different encryption status (for example, where the source volume and snapshots are unencrypted, and you want to create an AMI with encrypted volumes or snapshots), copy the image instead.</p> </li> <li> <p>The only option that can be changed for existing mappings or snapshots is <code>DeleteOnTermination</code>.</p> </li> </ul>",
           "locationName":"blockDeviceMapping"
         }
       }
@@ -14064,6 +15520,53 @@
         }
       }
     },
+    "CreateImageUsageReportRequest":{
+      "type":"structure",
+      "required":[
+        "ImageId",
+        "ResourceTypes"
+      ],
+      "members":{
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the image to report on.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "ResourceTypes":{
+          "shape":"ImageUsageResourceTypeRequestList",
+          "documentation":"<p>The resource types to include in the report.</p>",
+          "locationName":"ResourceType"
+        },
+        "AccountIds":{
+          "shape":"ImageUsageReportUserIdStringList",
+          "documentation":"<p>The Amazon Web Services account IDs to include in the report. To include all accounts, omit this parameter.</p>",
+          "locationName":"AccountId"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the report on creation. The <code>ResourceType</code> must be set to <code>image-usage-report</code>; any other value will cause the report creation to fail.</p> <p>To tag a report after it has been created, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html\">CreateTags</a>.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateImageUsageReportResult":{
+      "type":"structure",
+      "members":{
+        "ReportId":{
+          "shape":"ImageUsageReportId",
+          "documentation":"<p>The ID of the report.</p>",
+          "locationName":"reportId"
+        }
+      }
+    },
     "CreateInstanceConnectEndpointRequest":{
       "type":"structure",
       "required":["SubnetId"],
@@ -14083,7 +15586,7 @@
         },
         "PreserveClientIp":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the client IP address is preserved as the source. The following are the possible values.</p> <ul> <li> <p> <code>true</code> - Use the client IP address as the source.</p> </li> <li> <p> <code>false</code> - Use the network interface IP address as the source.</p> </li> </ul> <p>Default: <code>false</code> </p>"
+          "documentation":"<p>Indicates whether the client IP address is preserved as the source. The following are the possible values.</p> <ul> <li> <p> <code>true</code> - Use the client IP address as the source.</p> </li> <li> <p> <code>false</code> - Use the network interface IP address as the source.</p> </li> </ul> <note> <p> <code>PreserveClientIp</code> is only supported on IPv4 EC2 Instance Connect Endpoints. To use <code>PreserveClientIp</code>, the value for <code>IpAddressType</code> must be <code>ipv4</code>.</p> </note> <p>Default: <code>false</code> </p>"
         },
         "ClientToken":{
           "shape":"String",
@@ -14094,6 +15597,10 @@
           "shape":"TagSpecificationList",
           "documentation":"<p>The tags to apply to the EC2 Instance Connect Endpoint during creation.</p>",
           "locationName":"TagSpecification"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type of the endpoint.</p> <p>If no value is specified, the default value is determined by the IP address type of the subnet:</p> <ul> <li> <p> <code>dualstack</code> - If the subnet has both IPv4 and IPv6 CIDRs</p> </li> <li> <p> <code>ipv4</code> - If the subnet has only IPv4 CIDRs</p> </li> <li> <p> <code>ipv6</code> - If the subnet has only IPv6 CIDRs</p> </li> </ul> <note> <p> <code>PreserveClientIp</code> is only supported on IPv4 EC2 Instance Connect Endpoints. To use <code>PreserveClientIp</code>, the value for <code>IpAddressType</code> must be <code>ipv4</code>.</p> </note>"
         }
       }
     },
@@ -14343,6 +15850,111 @@
         }
       }
     },
+    "CreateIpamPrefixListResolverRequest":{
+      "type":"structure",
+      "required":[
+        "IpamId",
+        "AddressFamily"
+      ],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamId":{
+          "shape":"IpamId",
+          "documentation":"<p>The ID of the IPAM that will serve as the source of the IP address database for CIDR selection. The IPAM must be in the Advanced tier to use this feature.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description for the IPAM prefix list resolver to help you identify its purpose and configuration.</p>"
+        },
+        "AddressFamily":{
+          "shape":"AddressFamily",
+          "documentation":"<p>The address family for the IPAM prefix list resolver. Valid values are <code>ipv4</code> and <code>ipv6</code>. You must create separate resolvers for IPv4 and IPv6 CIDRs as they cannot be mixed in the same resolver.</p>"
+        },
+        "Rules":{
+          "shape":"IpamPrefixListResolverRuleRequestSet",
+          "documentation":"<p>The CIDR selection rules for the resolver.</p> <p>CIDR selection rules define the business logic for selecting CIDRs from IPAM. If a CIDR matches any of the rules, it will be included. If a rule has multiple conditions, the CIDR has to match every condition of that rule. You can create a prefix list resolver without any CIDR selection rules, but it will generate empty versions (containing no CIDRs) until you add rules.</p>",
+          "locationName":"Rule"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the IPAM prefix list resolver during creation. Tags help you organize and manage your Amazon Web Services resources.</p>",
+          "locationName":"TagSpecification"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateIpamPrefixListResolverResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolver":{
+          "shape":"IpamPrefixListResolver",
+          "documentation":"<p>Information about the IPAM prefix list resolver that was created.</p>",
+          "locationName":"ipamPrefixListResolver"
+        }
+      }
+    },
+    "CreateIpamPrefixListResolverTargetRequest":{
+      "type":"structure",
+      "required":[
+        "IpamPrefixListResolverId",
+        "PrefixListId",
+        "PrefixListRegion",
+        "TrackLatestVersion"
+      ],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver that will manage the synchronization of CIDRs to the target prefix list.</p>"
+        },
+        "PrefixListId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the managed prefix list that will be synchronized with CIDRs selected by the IPAM prefix list resolver. This prefix list becomes an IPAM managed prefix list.</p> <p>An IPAM-managed prefix list is a customer-managed prefix list that has been associated with an IPAM prefix list resolver target. When a prefix list becomes IPAM managed, its CIDRs are automatically synchronized based on the IPAM prefix list resolver's CIDR selection rules, and direct CIDR modifications are restricted.</p>"
+        },
+        "PrefixListRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region where the prefix list is located. This is required when referencing a prefix list in a different Region.</p>"
+        },
+        "DesiredVersion":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The specific version of the prefix list to target. If not specified, the resolver will target the latest version.</p>"
+        },
+        "TrackLatestVersion":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the resolver target should automatically track the latest version of the prefix list. When enabled, the target will always synchronize with the most current version of the prefix list.</p> <p>Choose this for automatic updates when you want your prefix lists to stay current with infrastructure changes without manual intervention.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the IPAM prefix list resolver target during creation. Tags help you organize and manage your Amazon Web Services resources.</p>",
+          "locationName":"TagSpecification"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateIpamPrefixListResolverTargetResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolverTarget":{
+          "shape":"IpamPrefixListResolverTarget",
+          "documentation":"<p>Information about the IPAM prefix list resolver target that was created.</p>",
+          "locationName":"ipamPrefixListResolverTarget"
+        }
+      }
+    },
     "CreateIpamRequest":{
       "type":"structure",
       "members":{
@@ -14376,6 +15988,10 @@
         "EnablePrivateGua":{
           "shape":"Boolean",
           "documentation":"<p>Enable this option to use your own GUA ranges as private IPv6 addresses. This option is disabled by default.</p>"
+        },
+        "MeteredAccount":{
+          "shape":"IpamMeteredAccount",
+          "documentation":"<p>A metered account is an Amazon Web Services account that is charged for active IP addresses managed in IPAM. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html\">Enable cost distribution</a> in the <i>Amazon VPC IPAM User Guide</i>.</p> <p>Possible values:</p> <ul> <li> <p> <code>ipam-owner</code> (default): The Amazon Web Services account which owns the IPAM is charged for all active IP addresses managed in IPAM.</p> </li> <li> <p> <code>resource-owner</code>: The Amazon Web Services account that owns the IP address is charged for the active IP address.</p> </li> </ul>"
         }
       }
     },
@@ -14452,6 +16068,10 @@
           "shape":"String",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensuring idempotency</a>.</p>",
           "idempotencyToken":true
+        },
+        "ExternalAuthorityConfiguration":{
+          "shape":"ExternalAuthorityConfiguration",
+          "documentation":"<p>The configuration that links an Amazon VPC IPAM scope to an external authority system. It specifies the type of external system and the external resource identifier that identifies your account or instance in that system.</p> <p>In IPAM, an external authority is a third-party IP address management system that provides CIDR blocks when you provision address space for top-level IPAM pools. This allows you to use your existing IP management system to control which address ranges are allocated to Amazon Web Services while using Amazon VPC IPAM to manage subnets within those ranges.</p>"
         }
       }
     },
@@ -14506,7 +16126,8 @@
         },
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>"
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If a client token isn't specified, a randomly generated token is used in the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>",
+          "idempotencyToken":true
         },
         "LaunchTemplateName":{
           "shape":"LaunchTemplateName",
@@ -14556,7 +16177,8 @@
         },
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>"
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If a client token isn't specified, a randomly generated token is used in the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>",
+          "idempotencyToken":true
         },
         "LaunchTemplateId":{
           "shape":"LaunchTemplateId",
@@ -14580,7 +16202,7 @@
         },
         "ResolveAlias":{
           "shape":"Boolean",
-          "documentation":"<p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageID</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>"
+          "documentation":"<p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageID</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>"
         }
       }
     },
@@ -14744,6 +16366,151 @@
         }
       }
     },
+    "CreateLocalGatewayVirtualInterfaceGroupRequest":{
+      "type":"structure",
+      "required":["LocalGatewayId"],
+      "members":{
+        "LocalGatewayId":{
+          "shape":"LocalGatewayId",
+          "documentation":"<p>The ID of the local gateway.</p>"
+        },
+        "LocalBgpAsn":{
+          "shape":"Integer",
+          "documentation":"<p>The Autonomous System Number(ASN) for the local Border Gateway Protocol (BGP).</p>"
+        },
+        "LocalBgpAsnExtended":{
+          "shape":"Long",
+          "documentation":"<p>The extended 32-bit ASN for the local BGP configuration.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the local gateway virtual interface group when the resource is being created.</p>",
+          "locationName":"TagSpecification"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "CreateLocalGatewayVirtualInterfaceGroupResult":{
+      "type":"structure",
+      "members":{
+        "LocalGatewayVirtualInterfaceGroup":{
+          "shape":"LocalGatewayVirtualInterfaceGroup",
+          "documentation":"<p>Information about the created local gateway virtual interface group.</p>",
+          "locationName":"localGatewayVirtualInterfaceGroup"
+        }
+      }
+    },
+    "CreateLocalGatewayVirtualInterfaceRequest":{
+      "type":"structure",
+      "required":[
+        "LocalGatewayVirtualInterfaceGroupId",
+        "OutpostLagId",
+        "Vlan",
+        "LocalAddress",
+        "PeerAddress"
+      ],
+      "members":{
+        "LocalGatewayVirtualInterfaceGroupId":{
+          "shape":"LocalGatewayVirtualInterfaceGroupId",
+          "documentation":"<p>The ID of the local gateway virtual interface group.</p>"
+        },
+        "OutpostLagId":{
+          "shape":"OutpostLagId",
+          "documentation":"<p>References the Link Aggregation Group (LAG) that connects the Outpost to on-premises network devices.</p>"
+        },
+        "Vlan":{
+          "shape":"Integer",
+          "documentation":"<p>The virtual local area network (VLAN) used for the local gateway virtual interface.</p>"
+        },
+        "LocalAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address assigned to the local gateway virtual interface on the Outpost side. Only IPv4 is supported.</p>"
+        },
+        "PeerAddress":{
+          "shape":"String",
+          "documentation":"<p>The peer IP address for the local gateway virtual interface. Only IPv4 is supported.</p>"
+        },
+        "PeerBgpAsn":{
+          "shape":"Integer",
+          "documentation":"<p>The Autonomous System Number (ASN) of the Border Gateway Protocol (BGP) peer.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to a resource when the local gateway virtual interface is being created. </p>",
+          "locationName":"TagSpecification"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "PeerBgpAsnExtended":{
+          "shape":"Long",
+          "documentation":"<p>The extended 32-bit ASN of the BGP peer for use with larger ASN values.</p>"
+        }
+      }
+    },
+    "CreateLocalGatewayVirtualInterfaceResult":{
+      "type":"structure",
+      "members":{
+        "LocalGatewayVirtualInterface":{
+          "shape":"LocalGatewayVirtualInterface",
+          "documentation":"<p>Information about the local gateway virtual interface.</p>",
+          "locationName":"localGatewayVirtualInterface"
+        }
+      }
+    },
+    "CreateMacSystemIntegrityProtectionModificationTaskRequest":{
+      "type":"structure",
+      "required":[
+        "InstanceId",
+        "MacSystemIntegrityProtectionStatus"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p>",
+          "idempotencyToken":true
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The ID of the Amazon EC2 Mac instance.</p>"
+        },
+        "MacCredentials":{
+          "shape":"SensitiveMacCredentials",
+          "documentation":"<p> <b>[Apple silicon Mac instances only]</b> Specifies the following credentials:</p> <ul> <li> <p> <b>Internal disk administrative user</b> </p> <ul> <li> <p> <b>Username</b> - Only the default administrative user (<code>aws-managed-user</code>) is supported and it is used by default. You can't specify a different administrative user.</p> </li> <li> <p> <b>Password</b> - If you did not change the default password for <code>aws-managed-user</code>, specify the default password, which is <i>blank</i>. Otherwise, specify your password.</p> </li> </ul> </li> <li> <p> <b>Amazon EBS root volume administrative user</b> </p> <ul> <li> <p> <b>Username</b> - If you did not change the default administrative user, specify <code>ec2-user</code>. Otherwise, specify the username for your administrative user.</p> </li> <li> <p> <b>Password</b> - Specify the password for the administrative user.</p> </li> </ul> </li> </ul> <p>The credentials must be specified in the following JSON format:</p> <p> <code>{ \"internalDiskPassword\":\"<i>internal-disk-admin_password</i>\", \"rootVolumeUsername\":\"<i>root-volume-admin_username</i>\", \"rootVolumepassword\":\"<i>root-volume-admin_password</i>\" }</code> </p>"
+        },
+        "MacSystemIntegrityProtectionConfiguration":{
+          "shape":"MacSystemIntegrityProtectionConfigurationRequest",
+          "documentation":"<p>Specifies the overrides to selectively enable or disable individual SIP settings. The individual settings you specify here override the overall SIP status you specify for <b>MacSystemIntegrityProtectionStatus</b>.</p>"
+        },
+        "MacSystemIntegrityProtectionStatus":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Specifies the overall SIP status for the instance. To enable all SIP settings, specify <code>enabled</code>. To disable all SIP settings, specify <code>disabled</code>.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>Specifies tags to apply to the SIP modification task.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateMacSystemIntegrityProtectionModificationTaskResult":{
+      "type":"structure",
+      "members":{
+        "MacModificationTask":{
+          "shape":"MacModificationTask",
+          "documentation":"<p>Information about the SIP modification task.</p>",
+          "locationName":"macModificationTask"
+        }
+      }
+    },
     "CreateManagedPrefixListRequest":{
       "type":"structure",
       "required":[
@@ -15180,7 +16947,7 @@
         },
         "Groups":{
           "shape":"SecurityGroupIdStringList",
-          "documentation":"<p>The IDs of one or more security groups.</p>",
+          "documentation":"<p>The IDs of the security groups.</p>",
           "locationName":"SecurityGroupId"
         },
         "PrivateIpAddresses":{
@@ -15329,6 +17096,10 @@
         "DeleteReplacedRootVolume":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to automatically delete the original root volume after the root volume replacement task completes. To delete the original root volume, specify <code>true</code>. If you choose to keep the original root volume after the replacement task completes, you must manually delete it when you no longer need it.</p>"
+        },
+        "VolumeInitializationRate":{
+          "shape":"Long",
+          "documentation":"<p>Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the replacement root volume. This is also known as <i>volume initialization</i>. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation.</p> <p>Omit this parameter if:</p> <ul> <li> <p>You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.</p> <note> <p>If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.</p> </note> </li> <li> <p>You want to create a volume that is initialized at the default rate.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\"> Initialize Amazon EBS volumes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Valid range: 100 - 300 MiB/s</p>"
         }
       }
     },
@@ -15453,6 +17224,10 @@
           "shape":"CoreNetworkArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the core network.</p>"
         },
+        "OdbNetworkArn":{
+          "shape":"OdbNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -15515,6 +17290,134 @@
         }
       }
     },
+    "CreateRouteServerEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerId",
+        "SubnetId"
+      ],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to create an endpoint.</p>"
+        },
+        "SubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>The ID of the subnet in which to create the route server endpoint.</p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the route server endpoint during creation.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateRouteServerEndpointResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerEndpoint":{
+          "shape":"RouteServerEndpoint",
+          "documentation":"<p>Information about the created route server endpoint.</p>",
+          "locationName":"routeServerEndpoint"
+        }
+      }
+    },
+    "CreateRouteServerPeerRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerEndpointId",
+        "PeerAddress",
+        "BgpOptions"
+      ],
+      "members":{
+        "RouteServerEndpointId":{
+          "shape":"RouteServerEndpointId",
+          "documentation":"<p>The ID of the route server endpoint for which to create a peer.</p>"
+        },
+        "PeerAddress":{
+          "shape":"String",
+          "documentation":"<p>The IPv4 address of the peer device.</p>"
+        },
+        "BgpOptions":{
+          "shape":"RouteServerBgpOptionsRequest",
+          "documentation":"<p>The BGP options for the peer, including ASN (Autonomous System Number) and BFD (Bidrectional Forwarding Detection) settings.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the route server peer during creation.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateRouteServerPeerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPeer":{
+          "shape":"RouteServerPeer",
+          "documentation":"<p>Information about the created route server peer.</p>",
+          "locationName":"routeServerPeer"
+        }
+      }
+    },
+    "CreateRouteServerRequest":{
+      "type":"structure",
+      "required":["AmazonSideAsn"],
+      "members":{
+        "AmazonSideAsn":{
+          "shape":"Long",
+          "documentation":"<p>The private Autonomous System Number (ASN) for the Amazon side of the BGP session. Valid values are from 1 to 4294967295. We recommend using a private ASN in the 64512–65534 (16-bit ASN) or 4200000000–4294967294 (32-bit ASN) range.</p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "PersistRoutes":{
+          "shape":"RouteServerPersistRoutesAction",
+          "documentation":"<p>Indicates whether routes should be persisted after all BGP sessions are terminated.</p>"
+        },
+        "PersistRoutesDuration":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The number of minutes a route server will wait after BGP is re-established to unpersist the routes in the FIB and RIB. Value must be in the range of 1-5. Required if PersistRoutes is <code>enabled</code>.</p> <p>If you set the duration to 1 minute, then when your network appliance re-establishes BGP with route server, it has 1 minute to relearn it's adjacent network and advertise those routes to route server before route server resumes normal functionality. In most cases, 1 minute is probably sufficient. If, however, you have concerns that your BGP network may not be capable of fully re-establishing and re-learning everything in 1 minute, you can increase the duration up to 5 minutes.</p>"
+        },
+        "SnsNotificationsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether SNS notifications should be enabled for route server events. Enabling SNS notifications persists BGP status changes to an SNS topic provisioned by Amazon Web Services.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecificationList",
+          "documentation":"<p>The tags to apply to the route server during creation.</p>",
+          "locationName":"TagSpecification"
+        }
+      }
+    },
+    "CreateRouteServerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServer":{
+          "shape":"RouteServer",
+          "documentation":"<p>Information about the created route server.</p>",
+          "locationName":"routeServer"
+        }
+      }
+    },
     "CreateRouteTableRequest":{
       "type":"structure",
       "required":["VpcId"],
@@ -15570,7 +17473,7 @@
         },
         "GroupName":{
           "shape":"String",
-          "documentation":"<p>The name of the security group.</p> <p>Constraints: Up to 255 characters in length. Cannot start with <code>sg-</code>.</p> <p>Valid characters: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>"
+          "documentation":"<p>The name of the security group. Names are case-insensitive and must be unique within the VPC.</p> <p>Constraints: Up to 255 characters in length. Can't start with <code>sg-</code>.</p> <p>Valid characters: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&amp;;{}!$*</p>"
         },
         "VpcId":{
           "shape":"VpcId",
@@ -15671,7 +17574,7 @@
         },
         "Location":{
           "shape":"SnapshotLocationEnum",
-          "documentation":"<note> <p>Only supported for instances in Local Zones. If the source instance is not in a Local Zone, omit this parameter.</p> </note> <ul> <li> <p>To create local snapshots in the same Local Zone as the source instance, specify <code>local</code>.</p> </li> <li> <p>To create a regional snapshots in the parent Region of the Local Zone, specify <code>regional</code> or omit this parameter.</p> </li> </ul> <p>Default value: <code>regional</code> </p>"
+          "documentation":"<note> <p>Only supported for instances in Local Zones. If the source instance is not in a Local Zone, omit this parameter.</p> </note> <ul> <li> <p>To create local snapshots in the same Local Zone as the source instance, specify <code>local</code>.</p> </li> <li> <p>To create regional snapshots in the parent Region of the Local Zone, specify <code>regional</code> or omit this parameter.</p> </li> </ul> <p>Default value: <code>regional</code> </p>"
         }
       }
     },
@@ -16670,7 +18573,7 @@
         },
         "SubnetIds":{
           "shape":"CreateVerifiedAccessEndpointSubnetIdList",
-          "documentation":"<p>The IDs of the subnets.</p>",
+          "documentation":"<p>The IDs of the subnets. You can specify only one subnet per Availability Zone.</p>",
           "locationName":"SubnetId"
         },
         "PortRanges":{
@@ -16731,7 +18634,7 @@
         },
         "SubnetIds":{
           "shape":"CreateVerifiedAccessEndpointSubnetIdList",
-          "documentation":"<p>The IDs of the subnets.</p>",
+          "documentation":"<p>The IDs of the subnets. You can specify only one subnet per Availability Zone.</p>",
           "locationName":"SubnetId"
         }
       },
@@ -17116,11 +19019,14 @@
     },
     "CreateVolumeRequest":{
       "type":"structure",
-      "required":["AvailabilityZone"],
       "members":{
         "AvailabilityZone":{
           "shape":"AvailabilityZoneName",
-          "documentation":"<p>The ID of the Availability Zone in which to create the volume. For example, <code>us-east-1a</code>.</p>"
+          "documentation":"<p>The ID of the Availability Zone in which to create the volume. For example, <code>us-east-1a</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>"
+        },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone in which to create the volume. For example, <code>use1-az1</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>"
         },
         "Encrypted":{
           "shape":"Boolean",
@@ -17129,7 +19035,7 @@
         },
         "Iops":{
           "shape":"Integer",
-          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 16,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS. This parameter is not supported for <code>gp2</code>, <code>st1</code>, <code>sc1</code>, or <code>standard</code> volumes.</p>"
+          "documentation":"<p>The number of I/O operations per second (IOPS) to provision for the volume. Required for <code>io1</code> and <code>io2</code> volumes. Optional for <code>gp3</code> volumes. Omit for all other volume types. </p> <p>Valid ranges:</p> <ul> <li> <p>gp3: <code>3,000 </code>(<i>default</i>)<code> - 80,000</code> IOPS</p> </li> <li> <p>io1: <code>100 - 64,000</code> IOPS</p> </li> <li> <p>io2: <code>100 - 256,000</code> IOPS</p> </li> </ul> <note> <p> <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\"> Instances built on the Nitro System</a> can support up to 256,000 IOPS. Other instances can support up to 32,000 IOPS.</p> </note>"
         },
         "KmsKeyId":{
           "shape":"KmsKeyId",
@@ -17141,7 +19047,7 @@
         },
         "Size":{
           "shape":"Integer",
-          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p> <p>The following are the supported volumes sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code> and <code>gp3</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>"
+          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size, and you can specify a volume size that is equal to or larger than the snapshot size.</p> <p>Valid sizes:</p> <ul> <li> <p>gp2: <code>1 - 16,384</code> GiB</p> </li> <li> <p>gp3: <code>1 - 65,536</code> GiB</p> </li> <li> <p>io1: <code>4 - 16,384</code> GiB</p> </li> <li> <p>io2: <code>4 - 65,536</code> GiB</p> </li> <li> <p>st1 and sc1: <code>125 - 16,384</code> GiB</p> </li> <li> <p>standard: <code>1 - 1024</code> GiB</p> </li> </ul>"
         },
         "SnapshotId":{
           "shape":"SnapshotId",
@@ -17162,13 +19068,17 @@
         },
         "Throughput":{
           "shape":"Integer",
-          "documentation":"<p>The throughput to provision for a volume, with a maximum of 1,000 MiB/s.</p> <p>This parameter is valid only for <code>gp3</code> volumes.</p> <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>"
+          "documentation":"<p>The throughput to provision for the volume, in MiB/s. Supported for <code>gp3</code> volumes only. Omit for all other volume types.</p> <p>Valid Range: <code>125 - 2000</code> MiB/s</p>"
         },
         "ClientToken":{
           "shape":"String",
           "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensure Idempotency</a>.</p>",
           "idempotencyToken":true
         },
+        "VolumeInitializationRate":{
+          "shape":"Integer",
+          "documentation":"<p>Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as <i>volume initialization</i>. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation.</p> <p>This parameter is supported only for volumes created from snapshots. Omit this parameter if:</p> <ul> <li> <p>You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.</p> <note> <p>If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.</p> </note> </li> <li> <p>You want to create a volume that is initialized at the default rate.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\"> Initialize Amazon EBS volumes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Valid range: 100 - 300 MiB/s</p>"
+        },
         "Operator":{
           "shape":"OperatorRequest",
           "documentation":"<p>Reserved for internal use.</p>"
@@ -17318,7 +19228,7 @@
         },
         "PrivateDnsEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>(Interface endpoint) Indicates whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, <code>kinesis.us-east-1.amazonaws.com</code>), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.</p> <p>To use a private hosted zone, you must set the following VPC attributes to <code>true</code>: <code>enableDnsHostnames</code> and <code>enableDnsSupport</code>. Use <a>ModifyVpcAttribute</a> to set the VPC attributes.</p> <p>Default: <code>true</code> </p>"
+          "documentation":"<p>(Interface endpoint) Indicates whether to associate a private hosted zone with the specified VPC. The private hosted zone contains a record set for the default public DNS name for the service for the Region (for example, <code>kinesis.us-east-1.amazonaws.com</code>), which resolves to the private IP addresses of the endpoint network interfaces in the VPC. This enables you to make requests to the default public DNS name for the service instead of the public DNS names that are automatically generated by the VPC endpoint service.</p> <p>To use a private hosted zone, you must set the following VPC attributes to <code>true</code>: <code>enableDnsHostnames</code> and <code>enableDnsSupport</code>. Use <a>ModifyVpcAttribute</a> to set the VPC attributes.</p>"
         },
         "TagSpecifications":{
           "shape":"TagSpecificationList",
@@ -17560,6 +19470,10 @@
           "documentation":"<p>The tags to apply to the VPN connection.</p>",
           "locationName":"TagSpecification"
         },
+        "PreSharedKeyStorage":{
+          "shape":"String",
+          "documentation":"<p>Specifies the storage mode for the pre-shared key (PSK). Valid values are <code>Standard</code>\" (stored in the Site-to-Site VPN service) or <code>SecretsManager</code> (stored in Amazon Web Services Secrets Manager).</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -17642,6 +19556,27 @@
       },
       "documentation":"<p>Contains the output of CreateVpnGateway.</p>"
     },
+    "CreationDateCondition":{
+      "type":"structure",
+      "members":{
+        "MaximumDaysSinceCreated":{
+          "shape":"MaximumDaysSinceCreatedValue",
+          "documentation":"<p>The maximum number of days that have elapsed since the image was created. For example, a value of <code>300</code> allows images that were created within the last 300 days.</p>",
+          "locationName":"maximumDaysSinceCreated"
+        }
+      },
+      "documentation":"<p>The maximum age for allowed images.</p>"
+    },
+    "CreationDateConditionRequest":{
+      "type":"structure",
+      "members":{
+        "MaximumDaysSinceCreated":{
+          "shape":"MaximumDaysSinceCreatedValue",
+          "documentation":"<p>The maximum number of days that have elapsed since the image was created. For example, a value of <code>300</code> allows images that were created within the last 300 days.</p>"
+        }
+      },
+      "documentation":"<p>The maximum age for allowed images.</p>"
+    },
     "CreditSpecification":{
       "type":"structure",
       "members":{
@@ -17709,7 +19644,7 @@
         },
         "IpAddress":{
           "shape":"String",
-          "documentation":"<p> IPv4 address for the customer gateway device's outside interface. The address must be static. If <code>OutsideIpAddressType</code> in your VPN connection options is set to <code>PrivateIpv4</code>, you can use an RFC6598 or RFC1918 private IPv4 address. If <code>OutsideIpAddressType</code> is set to <code>PublicIpv4</code>, you can use a public IPv4 address. </p>",
+          "documentation":"<p> The IP address for the customer gateway device's outside interface. The address must be static. If <code>OutsideIpAddressType</code> in your VPN connection options is set to <code>PrivateIpv4</code>, you can use an RFC6598 or RFC1918 private IPv4 address. If <code>OutsideIpAddressType</code> is set to <code>PublicIpv4</code>, you can use a public IPv4 address. If <code>OutsideIpAddressType</code> is set to <code>Ipv6</code>, you can use a public IPv6 address. </p>",
           "locationName":"ipAddress"
         },
         "BgpAsn":{
@@ -17903,6 +19838,7 @@
         "locationName":"item"
       }
     },
+    "DefaultEnaQueueCountPerInterface":{"type":"integer"},
     "DefaultInstanceMetadataEndpointState":{
       "type":"string",
       "enum":[
@@ -17943,6 +19879,30 @@
       ]
     },
     "DefaultingDhcpOptionsId":{"type":"string"},
+    "DeleteCapacityManagerDataExportRequest":{
+      "type":"structure",
+      "required":["CapacityManagerDataExportId"],
+      "members":{
+        "CapacityManagerDataExportId":{
+          "shape":"CapacityManagerDataExportId",
+          "documentation":"<p> The unique identifier of the data export configuration to delete. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        }
+      }
+    },
+    "DeleteCapacityManagerDataExportResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerDataExportId":{
+          "shape":"CapacityManagerDataExportId",
+          "documentation":"<p> The unique identifier of the deleted data export configuration. </p>",
+          "locationName":"capacityManagerDataExportId"
+        }
+      }
+    },
     "DeleteCarrierGatewayRequest":{
       "type":"structure",
       "required":["CarrierGatewayId"],
@@ -18298,6 +20258,30 @@
         }
       }
     },
+    "DeleteImageUsageReportRequest":{
+      "type":"structure",
+      "required":["ReportId"],
+      "members":{
+        "ReportId":{
+          "shape":"ImageUsageReportId",
+          "documentation":"<p>The ID of the report to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteImageUsageReportResult":{
+      "type":"structure",
+      "members":{
+        "Return":{
+          "shape":"Boolean",
+          "documentation":"<p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>",
+          "locationName":"return"
+        }
+      }
+    },
     "DeleteInstanceConnectEndpointRequest":{
       "type":"structure",
       "required":["InstanceConnectEndpointId"],
@@ -18418,6 +20402,54 @@
         }
       }
     },
+    "DeleteIpamPrefixListResolverRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver to delete.</p>"
+        }
+      }
+    },
+    "DeleteIpamPrefixListResolverResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolver":{
+          "shape":"IpamPrefixListResolver",
+          "documentation":"<p>Information about the IPAM prefix list resolver that was deleted.</p>",
+          "locationName":"ipamPrefixListResolver"
+        }
+      }
+    },
+    "DeleteIpamPrefixListResolverTargetRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverTargetId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverTargetId":{
+          "shape":"IpamPrefixListResolverTargetId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver target to delete.</p>"
+        }
+      }
+    },
+    "DeleteIpamPrefixListResolverTargetResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolverTarget":{
+          "shape":"IpamPrefixListResolverTarget",
+          "documentation":"<p>Information about the IPAM prefix list resolver target that was deleted.</p>",
+          "locationName":"ipamPrefixListResolverTarget"
+        }
+      }
+    },
     "DeleteIpamRequest":{
       "type":"structure",
       "required":["IpamId"],
@@ -18757,6 +20789,54 @@
         }
       }
     },
+    "DeleteLocalGatewayVirtualInterfaceGroupRequest":{
+      "type":"structure",
+      "required":["LocalGatewayVirtualInterfaceGroupId"],
+      "members":{
+        "LocalGatewayVirtualInterfaceGroupId":{
+          "shape":"LocalGatewayVirtualInterfaceGroupId",
+          "documentation":"<p>The ID of the local gateway virtual interface group to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteLocalGatewayVirtualInterfaceGroupResult":{
+      "type":"structure",
+      "members":{
+        "LocalGatewayVirtualInterfaceGroup":{
+          "shape":"LocalGatewayVirtualInterfaceGroup",
+          "documentation":"<p>Information about the deleted local gateway virtual interface group.</p>",
+          "locationName":"localGatewayVirtualInterfaceGroup"
+        }
+      }
+    },
+    "DeleteLocalGatewayVirtualInterfaceRequest":{
+      "type":"structure",
+      "required":["LocalGatewayVirtualInterfaceId"],
+      "members":{
+        "LocalGatewayVirtualInterfaceId":{
+          "shape":"LocalGatewayVirtualInterfaceId",
+          "documentation":"<p>The ID of the local virtual interface to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteLocalGatewayVirtualInterfaceResult":{
+      "type":"structure",
+      "members":{
+        "LocalGatewayVirtualInterface":{
+          "shape":"LocalGatewayVirtualInterface",
+          "documentation":"<p>Information about the deleted local gateway virtual interface.</p>",
+          "locationName":"localGatewayVirtualInterface"
+        }
+      }
+    },
     "DeleteManagedPrefixListRequest":{
       "type":"structure",
       "required":["PrefixListId"],
@@ -18971,7 +21051,7 @@
       "members":{
         "Return":{
           "shape":"Boolean",
-          "documentation":"<p>Returns <code>true</code> if the request succeeds, otherwise returns an error.</p>",
+          "documentation":"<p>Is <code>true</code> if the request succeeds and an error otherwise.</p>",
           "locationName":"return"
         }
       },
@@ -19131,6 +21211,78 @@
         }
       }
     },
+    "DeleteRouteServerEndpointRequest":{
+      "type":"structure",
+      "required":["RouteServerEndpointId"],
+      "members":{
+        "RouteServerEndpointId":{
+          "shape":"RouteServerEndpointId",
+          "documentation":"<p>The ID of the route server endpoint to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteRouteServerEndpointResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerEndpoint":{
+          "shape":"RouteServerEndpoint",
+          "documentation":"<p>Information about the deleted route server endpoint.</p>",
+          "locationName":"routeServerEndpoint"
+        }
+      }
+    },
+    "DeleteRouteServerPeerRequest":{
+      "type":"structure",
+      "required":["RouteServerPeerId"],
+      "members":{
+        "RouteServerPeerId":{
+          "shape":"RouteServerPeerId",
+          "documentation":"<p>The ID of the route server peer to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteRouteServerPeerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPeer":{
+          "shape":"RouteServerPeer",
+          "documentation":"<p>Information about the deleted route server peer.</p>",
+          "locationName":"routeServerPeer"
+        }
+      }
+    },
+    "DeleteRouteServerRequest":{
+      "type":"structure",
+      "required":["RouteServerId"],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server to delete.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DeleteRouteServerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServer":{
+          "shape":"RouteServer",
+          "documentation":"<p>Information about the deleted route server.</p>",
+          "locationName":"routeServer"
+        }
+      }
+    },
     "DeleteRouteTableRequest":{
       "type":"structure",
       "required":["RouteTableId"],
@@ -19195,6 +21347,29 @@
         }
       }
     },
+    "DeleteSnapshotResultSet":{
+      "type":"list",
+      "member":{
+        "shape":"DeleteSnapshotReturnCode",
+        "locationName":"item"
+      }
+    },
+    "DeleteSnapshotReturnCode":{
+      "type":"structure",
+      "members":{
+        "SnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>The ID of the snapshot.</p>",
+          "locationName":"snapshotId"
+        },
+        "ReturnCode":{
+          "shape":"SnapshotReturnCodes",
+          "documentation":"<p>The result code from the snapshot deletion attempt. Possible values:</p> <ul> <li> <p> <code>success</code> - The snapshot was successfully deleted.</p> </li> <li> <p> <code>skipped</code> - The snapshot was not deleted because it's associated with other AMIs.</p> </li> <li> <p> <code>missing-permissions</code> - The snapshot was not deleted because the role lacks <code>DeleteSnapshot</code> permissions. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/security_iam_service-with-iam.html\">How Amazon EBS works with IAM</a>.</p> </li> <li> <p> <code>internal-error</code> - The snapshot was not deleted due to a server error.</p> </li> <li> <p> <code>client-error</code> - The snapshot was not deleted due to a client configuration error.</p> </li> </ul> <p>For details about an error, check the <code>DeleteSnapshot</code> event in the CloudTrail event history. For more information, see <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/tutorial-event-history.html\">View event history</a> in the <i>Amazon Web Services CloudTrail User Guide</i>.</p>",
+          "locationName":"returnCode"
+        }
+      },
+      "documentation":"<p>The snapshot ID and its deletion result code.</p>"
+    },
     "DeleteSpotDatafeedSubscriptionRequest":{
       "type":"structure",
       "members":{
@@ -19961,6 +22136,27 @@
       },
       "documentation":"<p>Contains the parameters for DeleteVpnGateway.</p>"
     },
+    "DeprecationTimeCondition":{
+      "type":"structure",
+      "members":{
+        "MaximumDaysSinceDeprecated":{
+          "shape":"MaximumDaysSinceDeprecatedValue",
+          "documentation":"<p>The maximum number of days that have elapsed since the image was deprecated. When set to <code>0</code>, no deprecated images are allowed.</p>",
+          "locationName":"maximumDaysSinceDeprecated"
+        }
+      },
+      "documentation":"<p>The maximum period since deprecation for allowed images.</p>"
+    },
+    "DeprecationTimeConditionRequest":{
+      "type":"structure",
+      "members":{
+        "MaximumDaysSinceDeprecated":{
+          "shape":"MaximumDaysSinceDeprecatedValue",
+          "documentation":"<p>The maximum number of days that have elapsed since the image was deprecated. Set to <code>0</code> to exclude all deprecated images.</p>"
+        }
+      },
+      "documentation":"<p>The maximum period since deprecation for allowed images.</p>"
+    },
     "DeprovisionByoipCidrRequest":{
       "type":"structure",
       "required":["Cidr"],
@@ -20061,7 +22257,7 @@
         },
         "Cidr":{
           "shape":"String",
-          "documentation":"<p>The CIDR you want to deprovision from the pool. Enter the CIDR you want to deprovision with a netmask of <code>/32</code>. You must rerun this command for each IP address in the CIDR range. If your CIDR is a <code>/24</code>, you will have to run this command to deprovision each of the 256 IP addresses in the <code>/24</code> CIDR.</p>"
+          "documentation":"<p>The CIDR you want to deprovision from the pool.</p>"
         }
       }
     },
@@ -20095,6 +22291,10 @@
           "shape":"ImageId",
           "documentation":"<p>The ID of the AMI.</p>"
         },
+        "DeleteAssociatedSnapshots":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to delete the snapshots associated with the AMI during deregistration.</p> <note> <p>If a snapshot is associated with multiple AMIs, it is not deleted, regardless of this setting.</p> </note> <p>Default: The snapshots are not deleted.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -20103,6 +22303,21 @@
       },
       "documentation":"<p>Contains the parameters for DeregisterImage.</p>"
     },
+    "DeregisterImageResult":{
+      "type":"structure",
+      "members":{
+        "Return":{
+          "shape":"Boolean",
+          "documentation":"<p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>",
+          "locationName":"return"
+        },
+        "DeleteSnapshotResults":{
+          "shape":"DeleteSnapshotResultSet",
+          "documentation":"<p>The deletion result for each snapshot associated with the AMI, including the snapshot ID and its success or error code.</p>",
+          "locationName":"deleteSnapshotResultSet"
+        }
+      }
+    },
     "DeregisterInstanceEventNotificationAttributesRequest":{
       "type":"structure",
       "required":["InstanceTagAttribute"],
@@ -20395,7 +22610,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>group-name</code> - For Availability Zones, use the Region name. For Local Zones, use the name of the group associated with the Local Zone (for example, <code>us-west-2-lax-1</code>) For Wavelength Zones, use the name of the group associated with the Wavelength Zone (for example, <code>us-east-1-wl1</code>).</p> </li> <li> <p> <code>message</code> - The Zone message.</p> </li> <li> <p> <code>opt-in-status</code> - The opt-in status (<code>opted-in</code> | <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li> <li> <p> <code>parent-zone-id</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li> <li> <p> <code>parent-zone-name</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li> <li> <p> <code>region-name</code> - The name of the Region for the Zone (for example, <code>us-east-1</code>).</p> </li> <li> <p> <code>state</code> - The state of the Availability Zone, the Local Zone, or the Wavelength Zone (<code>available</code>).</p> </li> <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>), the Local Zone (for example, <code>usw2-lax1-az1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li> <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>), the Local Zone (for example, <code>us-west-2-lax-1a</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li> <li> <p> <code>zone-type</code> - The type of zone (<code>availability-zone</code> | <code>local-zone</code> | <code>wavelength-zone</code>).</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>group-long-name</code> - The long name of the zone group for the Availability Zone (for example, <code>US West (Oregon) 1</code>), the Local Zone (for example, for Zone group <code>us-west-2-lax-1</code>, it is <code>US West (Los Angeles)</code>, or the Wavelength Zone (for example, for Zone group <code>us-east-1-wl1</code>, it is <code>US East (Verizon)</code>.</p> </li> <li> <p> <code>group-name</code> - The name of the zone group for the Availability Zone (for example, <code>us-east-1-zg-1</code>), the Local Zone (for example, <code>us-west-2-lax-1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1</code>).</p> </li> <li> <p> <code>message</code> - The Zone message.</p> </li> <li> <p> <code>opt-in-status</code> - The opt-in status (<code>opted-in</code> | <code>not-opted-in</code> | <code>opt-in-not-required</code>).</p> </li> <li> <p> <code>parent-zone-id</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li> <li> <p> <code>parent-zone-name</code> - The ID of the zone that handles some of the Local Zone and Wavelength Zone control plane operations, such as API calls.</p> </li> <li> <p> <code>region-name</code> - The name of the Region for the Zone (for example, <code>us-east-1</code>).</p> </li> <li> <p> <code>state</code> - The state of the Availability Zone, the Local Zone, or the Wavelength Zone (<code>available</code> | <code>unavailable</code> | <code>constrained</code>).</p> </li> <li> <p> <code>zone-id</code> - The ID of the Availability Zone (for example, <code>use1-az1</code>), the Local Zone (for example, <code>usw2-lax1-az1</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li> <li> <p> <code>zone-name</code> - The name of the Availability Zone (for example, <code>us-east-1a</code>), the Local Zone (for example, <code>us-west-2-lax-1a</code>), or the Wavelength Zone (for example, <code>us-east-1-wl1-bos-wlz-1</code>).</p> </li> <li> <p> <code>zone-type</code> - The type of zone (<code>availability-zone</code> | <code>local-zone</code> | <code>wavelength-zone</code>).</p> </li> </ul>",
           "locationName":"Filter"
         }
       }
@@ -20625,7 +22840,7 @@
         },
         "InstanceCount":{
           "shape":"Integer",
-          "documentation":"<p>The number of instances for which to reserve capacity.</p>"
+          "documentation":"<p>The number of instances for which to reserve capacity. Each Capacity Block can have up to 64 instances, and you can have up to 256 instances across Capacity Blocks.</p>"
         },
         "StartDateRange":{
           "shape":"MillisecondDateTime",
@@ -20637,7 +22852,7 @@
         },
         "CapacityDurationHours":{
           "shape":"Integer",
-          "documentation":"<p>The number of hours for which to reserve Capacity Block.</p>"
+          "documentation":"<p>The reservation duration for the Capacity Block, in hours. You must specify the duration in 1-day increments up 14 days, and in 7-day increments up to 182 days.</p>"
         },
         "NextToken":{
           "shape":"String",
@@ -20646,6 +22861,14 @@
         "MaxResults":{
           "shape":"DescribeCapacityBlockOfferingsMaxResults",
           "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "UltraserverType":{
+          "shape":"String",
+          "documentation":"<p>The EC2 UltraServer type of the Capacity Block offerings.</p>"
+        },
+        "UltraserverCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of EC2 UltraServers in the offerings.</p>"
         }
       }
     },
@@ -20664,6 +22887,147 @@
         }
       }
     },
+    "DescribeCapacityBlockStatusMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":1
+    },
+    "DescribeCapacityBlockStatusRequest":{
+      "type":"structure",
+      "members":{
+        "CapacityBlockIds":{
+          "shape":"CapacityBlockIds",
+          "documentation":"<p>The ID of the Capacity Block.</p>",
+          "locationName":"CapacityBlockId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeCapacityBlockStatusMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters. </p> <ul> <li> <p> <code>interconnect-status</code> - The status of the interconnect for the Capacity Block (<code>ok</code> | <code>impaired</code> | <code>insufficient-data</code>).</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeCapacityBlockStatusResult":{
+      "type":"structure",
+      "members":{
+        "CapacityBlockStatuses":{
+          "shape":"CapacityBlockStatusSet",
+          "documentation":"<p>The availability of capacity for a Capacity Block.</p>",
+          "locationName":"capacityBlockStatusSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "DescribeCapacityBlocksMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":1
+    },
+    "DescribeCapacityBlocksRequest":{
+      "type":"structure",
+      "members":{
+        "CapacityBlockIds":{
+          "shape":"CapacityBlockIds",
+          "documentation":"<p>The IDs of the Capacity Blocks.</p>",
+          "locationName":"CapacityBlockId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeCapacityBlocksMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p> One or more filters. </p> <ul> <li> <p> <code>capacity-block-id</code> - The ID of the Capacity Block.</p> </li> <li> <p> <code>ultraserver-type</code> - The Capacity Block type. The type can be <code>instances</code> or <code>ultraservers</code>.</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the Capacity Block.</p> </li> <li> <p> <code>start-date</code> - The date and time at which the Capacity Block was started.</p> </li> <li> <p> <code>end-date</code> - The date and time at which the Capacity Block expires. When a Capacity Block expires, all instances in the Capacity Block are terminated.</p> </li> <li> <p> <code>create-date</code> - The date and time at which the Capacity Block was created.</p> </li> <li> <p> <code>state</code> - The state of the Capacity Block (<code>active</code> | <code>expired</code> | <code>unavailable</code> | <code>cancelled</code> | <code>failed</code> | <code>scheduled</code> | <code>payment-pending</code> | <code>payment-failed</code>).</p> </li> <li> <p> <code>tags</code> - The tags assigned to the Capacity Block.</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeCapacityBlocksResult":{
+      "type":"structure",
+      "members":{
+        "CapacityBlocks":{
+          "shape":"CapacityBlockSet",
+          "documentation":"<p>The Capacity Blocks.</p>",
+          "locationName":"capacityBlockSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "DescribeCapacityManagerDataExportsRequest":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerDataExportIds":{
+          "shape":"CapacityManagerDataExportIdSet",
+          "documentation":"<p> The IDs of the data export configurations to describe. If not specified, all export configurations are returned. </p>",
+          "locationName":"CapacityManagerDataExportId"
+        },
+        "MaxResults":{
+          "shape":"DescribeCapacityManagerDataExportsRequestMaxResults",
+          "documentation":"<p> The maximum number of results to return in a single call. If not specified, up to 1000 results are returned. </p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token for the next page of results. Use this value in a subsequent call to retrieve additional results. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p> One or more filters to narrow the results. Supported filters include export status, creation date, and S3 bucket name. </p>",
+          "locationName":"Filter"
+        }
+      }
+    },
+    "DescribeCapacityManagerDataExportsRequestMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":1
+    },
+    "DescribeCapacityManagerDataExportsResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerDataExports":{
+          "shape":"CapacityManagerDataExportResponseSet",
+          "documentation":"<p> Information about the data export configurations, including export settings, delivery status, and recent activity. </p>",
+          "locationName":"capacityManagerDataExportSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token to use to retrieve the next page of results. This value is null when there are no more results to return. </p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "DescribeCapacityReservationBillingRequestsRequest":{
       "type":"structure",
       "required":["Role"],
@@ -20763,6 +23127,53 @@
         }
       }
     },
+    "DescribeCapacityReservationTopologyMaxResults":{
+      "type":"integer",
+      "max":10,
+      "min":1
+    },
+    "DescribeCapacityReservationTopologyRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeCapacityReservationTopologyMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p> <p>You can't specify this parameter and the Capacity Reservation IDs parameter in the same request.</p> <p>Default: <code>10</code> </p>"
+        },
+        "CapacityReservationIds":{
+          "shape":"CapacityReservationIdSet",
+          "documentation":"<p>The Capacity Reservation IDs.</p> <p>Default: Describes all your Capacity Reservations.</p> <p>Constraints: Maximum 100 explicitly specified Capacity Reservation IDs.</p>",
+          "locationName":"CapacityReservationId"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The name of the Availability Zone (for example, <code>us-west-2a</code>) or Local Zone (for example, <code>us-west-2-lax-1b</code>) that the Capacity Reservation is in.</p> </li> <li> <p> <code>instance-type</code> - The instance type (for example, <code>p4d.24xlarge</code>) or instance family (for example, <code>p4d*</code>). You can use the <code>*</code> wildcard to match zero or more characters, or the <code>?</code> wildcard to match zero or one character.</p> </li> </ul>",
+          "locationName":"Filter"
+        }
+      }
+    },
+    "DescribeCapacityReservationTopologyResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>",
+          "locationName":"nextToken"
+        },
+        "CapacityReservations":{
+          "shape":"CapacityReservationTopologySet",
+          "documentation":"<p>Information about the topology of each Capacity Reservation.</p>",
+          "locationName":"capacityReservationSet"
+        }
+      }
+    },
     "DescribeCapacityReservationsMaxResults":{
       "type":"integer",
       "max":1000,
@@ -21621,6 +24032,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "State":{
           "shape":"FastSnapshotRestoreStateCode",
           "documentation":"<p>The state of fast snapshot restores.</p>",
@@ -21686,7 +24102,7 @@
       "members":{
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters. The possible values are:</p> <ul> <li> <p> <code>availability-zone</code>: The Availability Zone of the snapshot.</p> </li> <li> <p> <code>owner-id</code>: The ID of the Amazon Web Services account that enabled fast snapshot restore on the snapshot.</p> </li> <li> <p> <code>snapshot-id</code>: The ID of the snapshot.</p> </li> <li> <p> <code>state</code>: The state of fast snapshot restores for the snapshot (<code>enabling</code> | <code>optimizing</code> | <code>enabled</code> | <code>disabling</code> | <code>disabled</code>).</p> </li> </ul>",
+          "documentation":"<p>The filters. The possible values are:</p> <ul> <li> <p> <code>availability-zone</code>: The Availability Zone of the snapshot. For example, <code>us-east-2a</code>.</p> </li> <li> <p> <code>availability-zone-id</code>: The ID of the Availability Zone of the snapshot. For example, <code>use2-az1</code>.</p> </li> <li> <p> <code>owner-id</code>: The ID of the Amazon Web Services account that enabled fast snapshot restore on the snapshot.</p> </li> <li> <p> <code>snapshot-id</code>: The ID of the snapshot.</p> </li> <li> <p> <code>state</code>: The state of fast snapshot restores for the snapshot (<code>enabling</code> | <code>optimizing</code> | <code>enabled</code> | <code>disabling</code> | <code>disabled</code>).</p> </li> </ul>",
           "locationName":"Filter"
         },
         "MaxResults":{
@@ -22292,7 +24708,7 @@
       "members":{
         "Attribute":{
           "shape":"ImageAttributeName",
-          "documentation":"<p>The AMI attribute.</p> <p> <b>Note</b>: The <code>blockDeviceMapping</code> attribute is deprecated. Using this attribute returns the <code>Client.AuthFailure</code> error. To get information about the block device mappings for an AMI, use the <a>DescribeImages</a> action.</p>"
+          "documentation":"<p>The AMI attribute.</p> <p> <b>Note</b>: The <code>blockDeviceMapping</code> attribute is deprecated. Using this attribute returns the <code>Client.AuthFailure</code> error. To get information about the block device mappings for an AMI, describe the image instead.</p>"
         },
         "ImageId":{
           "shape":"ImageId",
@@ -22306,6 +24722,171 @@
       },
       "documentation":"<p>Contains the parameters for DescribeImageAttribute.</p>"
     },
+    "DescribeImageReferencesImageIdStringList":{
+      "type":"list",
+      "member":{"shape":"ImageId"},
+      "max":10,
+      "min":1
+    },
+    "DescribeImageReferencesMaxResults":{
+      "type":"integer",
+      "min":5
+    },
+    "DescribeImageReferencesRequest":{
+      "type":"structure",
+      "required":["ImageIds"],
+      "members":{
+        "ImageIds":{
+          "shape":"DescribeImageReferencesImageIdStringList",
+          "documentation":"<p>The IDs of the images to check for resource references.</p>",
+          "locationName":"ImageId"
+        },
+        "IncludeAllResourceTypes":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to check all supported Amazon Web Services resource types for image references. When specified, default values are applied for <code>ResourceTypeOptions</code>. For the default values, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-ami-references.html#how-ami-references-works\">How AMI reference checks work</a> in the <i>Amazon EC2 User Guide</i>. If you also specify <code>ResourceTypes</code> with <code>ResourceTypeOptions</code>, your specified values override the default values.</p> <p>Supported resource types: <code>ec2:Instance</code> | <code>ec2:LaunchTemplate</code> | <code>ssm:Parameter</code> | <code>imagebuilder:ImageRecipe</code> | <code>imagebuilder:ContainerRecipe</code> </p> <p>Either <code>IncludeAllResourceTypes</code> or <code>ResourceTypes</code> must be specified.</p>"
+        },
+        "ResourceTypes":{
+          "shape":"ResourceTypeRequestList",
+          "documentation":"<p>The Amazon Web Services resource types to check for image references.</p> <p>Either <code>IncludeAllResourceTypes</code> or <code>ResourceTypes</code> must be specified.</p>",
+          "locationName":"ResourceType"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeImageReferencesMaxResults",
+          "documentation":"<p> The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>. </p>"
+        }
+      }
+    },
+    "DescribeImageReferencesResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>",
+          "locationName":"nextToken"
+        },
+        "ImageReferences":{
+          "shape":"ImageReferenceList",
+          "documentation":"<p>The resources that are referencing the specified images.</p>",
+          "locationName":"imageReferenceSet"
+        }
+      }
+    },
+    "DescribeImageUsageReportEntriesMaxResults":{
+      "type":"integer",
+      "min":1
+    },
+    "DescribeImageUsageReportEntriesRequest":{
+      "type":"structure",
+      "members":{
+        "ImageIds":{
+          "shape":"DescribeImageUsageReportsImageIdStringList",
+          "documentation":"<p>The IDs of the images for filtering the report entries. If specified, only report entries containing these images are returned.</p>",
+          "locationName":"ImageId"
+        },
+        "ReportIds":{
+          "shape":"ImageUsageReportIdStringList",
+          "documentation":"<p>The IDs of the usage reports.</p>",
+          "locationName":"ReportId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>account-id</code> - A 12-digit Amazon Web Services account ID.</p> </li> <li> <p> <code>creation-time</code> - The time when the report was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2025-11-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2025-11-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>resource-type</code> - The resource type (<code>ec2:Instance</code> | <code>ec2:LaunchTemplate</code>).</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeImageUsageReportEntriesMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        }
+      }
+    },
+    "DescribeImageUsageReportEntriesResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>",
+          "locationName":"nextToken"
+        },
+        "ImageUsageReportEntries":{
+          "shape":"ImageUsageReportEntryList",
+          "documentation":"<p>The content of the usage reports.</p>",
+          "locationName":"imageUsageReportEntrySet"
+        }
+      }
+    },
+    "DescribeImageUsageReportsImageIdStringList":{
+      "type":"list",
+      "member":{"shape":"ImageId"},
+      "max":200,
+      "min":0
+    },
+    "DescribeImageUsageReportsMaxResults":{
+      "type":"integer",
+      "min":1
+    },
+    "DescribeImageUsageReportsRequest":{
+      "type":"structure",
+      "members":{
+        "ImageIds":{
+          "shape":"DescribeImageUsageReportsImageIdStringList",
+          "documentation":"<p>The IDs of the images for filtering the reports. If specified, only reports containing these images are returned.</p>",
+          "locationName":"ImageId"
+        },
+        "ReportIds":{
+          "shape":"ImageUsageReportIdStringList",
+          "documentation":"<p>The IDs of the image usage reports.</p>",
+          "locationName":"ReportId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>creation-time</code> - The time when the report was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2025-11-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2025-11-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>state</code> - The state of the report (<code>available</code> | <code>pending</code> | <code>error</code>).</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"DescribeImageUsageReportsMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        }
+      }
+    },
+    "DescribeImageUsageReportsResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>",
+          "locationName":"nextToken"
+        },
+        "ImageUsageReports":{
+          "shape":"ImageUsageReportList",
+          "documentation":"<p>The image usage reports.</p>",
+          "locationName":"imageUsageReportSet"
+        }
+      }
+    },
     "DescribeImagesRequest":{
       "type":"structure",
       "members":{
@@ -22347,7 +24928,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>architecture</code> - The image architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code> | <code>x86_64_mac</code> | <code>arm64_mac</code>).</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.snapshot-id</code> - The ID of the snapshot used for the Amazon EBS volume.</p> </li> <li> <p> <code>block-device-mapping.volume-size</code> - The volume size of the Amazon EBS volume, in GiB.</p> </li> <li> <p> <code>block-device-mapping.volume-type</code> - The volume type of the Amazon EBS volume (<code>io1</code> | <code>io2</code> | <code>gp2</code> | <code>gp3</code> | <code>sc1 </code>| <code>st1</code> | <code>standard</code>).</p> </li> <li> <p> <code>block-device-mapping.encrypted</code> - A Boolean that indicates whether the Amazon EBS volume is encrypted.</p> </li> <li> <p> <code>creation-date</code> - The time when the image was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>description</code> - The description of the image (provided during image creation).</p> </li> <li> <p> <code>ena-support</code> - A Boolean that indicates whether enhanced networking with ENA is enabled.</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type (<code>ovm</code> | <code>xen</code>).</p> </li> <li> <p> <code>image-allowed</code> - A Boolean that indicates whether the image meets the criteria specified for Allowed AMIs.</p> </li> <li> <p> <code>image-id</code> - The ID of the image.</p> </li> <li> <p> <code>image-type</code> - The image type (<code>machine</code> | <code>kernel</code> | <code>ramdisk</code>).</p> </li> <li> <p> <code>is-public</code> - A Boolean that indicates whether the image is public.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>manifest-location</code> - The location of the image manifest.</p> </li> <li> <p> <code>name</code> - The name of the AMI (provided during image creation).</p> </li> <li> <p> <code>owner-alias</code> - The owner alias (<code>amazon</code> | <code>aws-backup-vault</code> | <code>aws-marketplace</code>). The valid aliases are defined in an Amazon-maintained list. This is not the Amazon Web Services account alias that can be set using the IAM console. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li> <li> <p> <code>platform</code> - The platform. The only supported value is <code>windows</code>.</p> </li> <li> <p> <code>product-code</code> - The product code.</p> </li> <li> <p> <code>product-code.type</code> - The type of the product code (<code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-image-id</code> - The ID of the source AMI from which the AMI was created.</p> </li> <li> <p> <code>source-image-region</code> - The Region of the source AMI.</p> </li> <li> <p> <code>source-instance-id</code> - The ID of the instance that the AMI was created from if the AMI was created using CreateImage. This filter is applicable only if the AMI was created using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a>.</p> </li> <li> <p> <code>state</code> - The state of the image (<code>available</code> | <code>pending</code> | <code>failed</code>).</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - The message for the state change.</p> </li> <li> <p> <code>sriov-net-support</code> - A value of <code>simple</code> indicates that enhanced networking with the Intel 82599 VF interface is enabled.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type (<code>paravirtual</code> | <code>hvm</code>).</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>architecture</code> - The image architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code> | <code>x86_64_mac</code> | <code>arm64_mac</code>).</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.snapshot-id</code> - The ID of the snapshot used for the Amazon EBS volume.</p> </li> <li> <p> <code>block-device-mapping.volume-size</code> - The volume size of the Amazon EBS volume, in GiB.</p> </li> <li> <p> <code>block-device-mapping.volume-type</code> - The volume type of the Amazon EBS volume (<code>io1</code> | <code>io2</code> | <code>gp2</code> | <code>gp3</code> | <code>sc1 </code>| <code>st1</code> | <code>standard</code>).</p> </li> <li> <p> <code>block-device-mapping.encrypted</code> - A Boolean that indicates whether the Amazon EBS volume is encrypted.</p> </li> <li> <p> <code>creation-date</code> - The time when the image was created, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>description</code> - The description of the image (provided during image creation).</p> </li> <li> <p> <code>ena-support</code> - A Boolean that indicates whether enhanced networking with ENA is enabled.</p> </li> <li> <p> <code>free-tier-eligible</code> - A Boolean that indicates whether this image can be used under the Amazon Web Services Free Tier (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type (<code>ovm</code> | <code>xen</code>).</p> </li> <li> <p> <code>image-allowed</code> - A Boolean that indicates whether the image meets the criteria specified for Allowed AMIs.</p> </li> <li> <p> <code>image-id</code> - The ID of the image.</p> </li> <li> <p> <code>image-type</code> - The image type (<code>machine</code> | <code>kernel</code> | <code>ramdisk</code>).</p> </li> <li> <p> <code>is-public</code> - A Boolean that indicates whether the image is public.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>manifest-location</code> - The location of the image manifest.</p> </li> <li> <p> <code>name</code> - The name of the AMI (provided during image creation).</p> </li> <li> <p> <code>owner-alias</code> - The owner alias (<code>amazon</code> | <code>aws-backup-vault</code> | <code>aws-marketplace</code>). The valid aliases are defined in an Amazon-maintained list. This is not the Amazon Web Services account alias that can be set using the IAM console. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the owner. We recommend that you use the <b>Owner</b> request parameter instead of this filter.</p> </li> <li> <p> <code>platform</code> - The platform. The only supported value is <code>windows</code>.</p> </li> <li> <p> <code>product-code</code> - The product code.</p> </li> <li> <p> <code>product-code.type</code> - The type of the product code (<code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-image-id</code> - The ID of the source AMI from which the AMI was created.</p> </li> <li> <p> <code>source-image-region</code> - The Region of the source AMI.</p> </li> <li> <p> <code>source-instance-id</code> - The ID of the instance that the AMI was created from if the AMI was created using CreateImage. This filter is applicable only if the AMI was created using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a>.</p> </li> <li> <p> <code>state</code> - The state of the image (<code>available</code> | <code>pending</code> | <code>failed</code>).</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - The message for the state change.</p> </li> <li> <p> <code>sriov-net-support</code> - A value of <code>simple</code> indicates that enhanced networking with the Intel 82599 VF interface is enabled.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type (<code>paravirtual</code> | <code>hvm</code>).</p> </li> </ul>",
           "locationName":"Filter"
         }
       }
@@ -22468,7 +25049,7 @@
         },
         "Attribute":{
           "shape":"InstanceAttributeName",
-          "documentation":"<p>The instance attribute.</p> <p>Note: The <code>enaSupport</code> attribute is not supported at this time.</p>",
+          "documentation":"<p>The instance attribute.</p> <p>Note that the <code>enaSupport</code> attribute is not supported.</p>",
           "locationName":"attribute"
         }
       }
@@ -22694,7 +25275,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li> <li> <p> <code>event.description</code> - A description of the event.</p> </li> <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li> <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed instance.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the instance. Only valid for managed instances, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> <li> <p> <code>attached-ebs-status.status</code> - The status of the attached EBS volume for the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone of the instance.</p> </li> <li> <p> <code>event.code</code> - The code for the scheduled event (<code>instance-reboot</code> | <code>system-reboot</code> | <code>system-maintenance</code> | <code>instance-retirement</code> | <code>instance-stop</code>).</p> </li> <li> <p> <code>event.description</code> - A description of the event.</p> </li> <li> <p> <code>event.instance-event-id</code> - The ID of the event whose date and time you are modifying.</p> </li> <li> <p> <code>event.not-after</code> - The latest end time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before</code> - The earliest start time for the scheduled event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>event.not-before-deadline</code> - The deadline for starting the event (for example, <code>2014-09-15T17:15:20.000Z</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The code for the instance state, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-status.reachability</code> - Filters on instance status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>instance-status.status</code> - The status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed instance.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the instance. Only valid for managed instances, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>system-status.reachability</code> - Filters on system status where the name is <code>reachability</code> (<code>passed</code> | <code>failed</code> | <code>initializing</code> | <code>insufficient-data</code>).</p> </li> <li> <p> <code>system-status.status</code> - The system status of the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> <li> <p> <code>attached-ebs-status.status</code> - The status of the attached EBS volume for the instance (<code>ok</code> | <code>impaired</code> | <code>initializing</code> | <code>insufficient-data</code> | <code>not-applicable</code>).</p> </li> </ul>",
           "locationName":"Filter"
         },
         "IncludeAllInstances":{
@@ -22834,7 +25415,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>auto-recovery-supported</code> - Indicates whether Amazon CloudWatch action based recovery is supported (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>burstable-performance-supported</code> - Indicates whether the instance type is a burstable performance T instance type (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps</code> - The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-iops</code> - The baseline input/output storage operations per second for an EBS-optimized instance type.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-throughput-in-mbps</code> - The baseline throughput performance for an EBS-optimized instance type, in MB/s.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps</code> - The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-iops</code> - The maximum input/output storage operations per second for an EBS-optimized instance type.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-throughput-in-mbps</code> - The maximum throughput performance for an EBS-optimized instance type, in MB/s.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized (<code>supported</code> | <code>unsupported</code> | <code>default</code>).</p> </li> <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>ebs-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for EBS volumes (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>free-tier-eligible</code> - Indicates whether the instance type is eligible to use in the free tier (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor (<code>nitro</code> | <code>xen</code>).</p> </li> <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li> <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li> <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks (<code>hdd</code> | <code>ssd</code>).</p> </li> <li> <p> <code>instance-storage-info.encryption-support</code> - Indicates whether data is encrypted at rest (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>instance-storage-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for instance store (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li> <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>instance-type</code> - The instance type (for example <code>c5.2xlarge</code> or c5*).</p> </li> <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li> <li> <p> <code>network-info.bandwidth-weightings</code> - For instances that support bandwidth weighting to boost performance (<code>default</code>, <code>vpc-1</code>, <code>ebs-1</code>).</p> </li> <li> <p> <code>network-info.efa-info.maximum-efa-interfaces</code> - The maximum number of Elastic Fabric Adapters (EFAs) per instance.</p> </li> <li> <p> <code>network-info.efa-supported</code> - Indicates whether the instance type supports Elastic Fabric Adapter (EFA) (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>network-info.encryption-in-transit-supported</code> - Indicates whether the instance type automatically encrypts in-transit traffic between instances (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6 (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.maximum-network-cards</code> - The maximum number of network cards per instance.</p> </li> <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li> <li> <p> <code>network-info.network-performance</code> - The network performance (for example, \"25 Gigabit\").</p> </li> <li> <p> <code>nitro-enclaves-support</code> - Indicates whether Nitro Enclaves is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>nitro-tpm-support</code> - Indicates whether NitroTPM is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>nitro-tpm-info.supported-versions</code> - The supported NitroTPM version (<code>2.0</code>).</p> </li> <li> <p> <code>processor-info.supported-architecture</code> - The CPU architecture (<code>arm64</code> | <code>i386</code> | <code>x86_64</code>).</p> </li> <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li> <li> <p> <code>processor-info.supported-features</code> - The supported CPU features (<code>amd-sev-snp</code>).</p> </li> <li> <p> <code>supported-boot-mode</code> - The boot mode (<code>legacy-bios</code> | <code>uefi</code>).</p> </li> <li> <p> <code>supported-root-device-type</code> - The root device type (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>supported-usage-class</code> - The usage class (<code>on-demand</code> | <code>spot</code> | <code>capacity-block</code>).</p> </li> <li> <p> <code>supported-virtualization-type</code> - The virtualization type (<code>hvm</code> | <code>paravirtual</code>).</p> </li> <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li> <li> <p> <code>vcpu-info.valid-cores</code> - The number of cores that can be configured for the instance type.</p> </li> <li> <p> <code>vcpu-info.valid-threads-per-core</code> - The number of threads per core that can be configured for the instance type. For example, \"1\" or \"1,2\".</p> </li> </ul>",
+          "documentation":"<p>One or more filters. Filter names and values are case-sensitive.</p> <ul> <li> <p> <code>auto-recovery-supported</code> - Indicates whether Amazon CloudWatch action based recovery is supported (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>bare-metal</code> - Indicates whether it is a bare metal instance type (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>burstable-performance-supported</code> - Indicates whether the instance type is a burstable performance T instance type (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>current-generation</code> - Indicates whether this instance type is the latest generation instance type of an instance family (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>dedicated-hosts-supported</code> - Indicates whether the instance type supports Dedicated Hosts. (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>ebs-info.attachment-limit-type</code> - The type of Amazon EBS volume attachment limit (<code>shared</code> | <code>dedicated</code>).</p> </li> <li> <p> <code>ebs-info.maximum-ebs-attachments</code> - The maximum number of Amazon EBS volumes that can be attached to the instance type.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps</code> - The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-iops</code> - The baseline input/output storage operations per second for an EBS-optimized instance type.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.baseline-throughput-in-mbps</code> - The baseline throughput performance for an EBS-optimized instance type, in MB/s.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps</code> - The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-iops</code> - The maximum input/output storage operations per second for an EBS-optimized instance type.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-info.maximum-throughput-in-mbps</code> - The maximum throughput performance for an EBS-optimized instance type, in MB/s.</p> </li> <li> <p> <code>ebs-info.ebs-optimized-support</code> - Indicates whether the instance type is EBS-optimized (<code>supported</code> | <code>unsupported</code> | <code>default</code>).</p> </li> <li> <p> <code>ebs-info.encryption-support</code> - Indicates whether EBS encryption is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>ebs-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for EBS volumes (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>free-tier-eligible</code> - A Boolean that indicates whether this instance type can be used under the Amazon Web Services Free Tier (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>hibernation-supported</code> - Indicates whether On-Demand hibernation is supported (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor (<code>nitro</code> | <code>xen</code>).</p> </li> <li> <p> <code>instance-storage-info.disk.count</code> - The number of local disks.</p> </li> <li> <p> <code>instance-storage-info.disk.size-in-gb</code> - The storage size of each instance storage disk, in GB.</p> </li> <li> <p> <code>instance-storage-info.disk.type</code> - The storage technology for the local instance storage disks (<code>hdd</code> | <code>ssd</code>).</p> </li> <li> <p> <code>instance-storage-info.encryption-support</code> - Indicates whether data is encrypted at rest (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>instance-storage-info.nvme-support</code> - Indicates whether non-volatile memory express (NVMe) is supported for instance store (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>instance-storage-info.total-size-in-gb</code> - The total amount of storage available from all local instance storage, in GB.</p> </li> <li> <p> <code>instance-storage-supported</code> - Indicates whether the instance type has local instance storage (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>instance-type</code> - The instance type (for example <code>c5.2xlarge</code> or c5*).</p> </li> <li> <p> <code>memory-info.size-in-mib</code> - The memory size.</p> </li> <li> <p> <code>network-info.bandwidth-weightings</code> - For instances that support bandwidth weighting to boost performance (<code>default</code>, <code>vpc-1</code>, <code>ebs-1</code>).</p> </li> <li> <p> <code>network-info.efa-info.maximum-efa-interfaces</code> - The maximum number of Elastic Fabric Adapters (EFAs) per instance.</p> </li> <li> <p> <code>network-info.efa-supported</code> - Indicates whether the instance type supports Elastic Fabric Adapter (EFA) (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.ena-support</code> - Indicates whether Elastic Network Adapter (ENA) is supported or required (<code>required</code> | <code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>network-info.flexible-ena-queues-support</code> - Indicates whether an instance supports flexible ENA queues (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>network-info.encryption-in-transit-supported</code> - Indicates whether the instance type automatically encrypts in-transit traffic between instances (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.ipv4-addresses-per-interface</code> - The maximum number of private IPv4 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-addresses-per-interface</code> - The maximum number of private IPv6 addresses per network interface.</p> </li> <li> <p> <code>network-info.ipv6-supported</code> - Indicates whether the instance type supports IPv6 (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>network-info.maximum-network-cards</code> - The maximum number of network cards per instance.</p> </li> <li> <p> <code>network-info.maximum-network-interfaces</code> - The maximum number of network interfaces per instance.</p> </li> <li> <p> <code>network-info.network-performance</code> - The network performance (for example, \"25 Gigabit\").</p> </li> <li> <p> <code>nitro-enclaves-support</code> - Indicates whether Nitro Enclaves is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>nitro-tpm-support</code> - Indicates whether NitroTPM is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>nitro-tpm-info.supported-versions</code> - The supported NitroTPM version (<code>2.0</code>).</p> </li> <li> <p> <code>processor-info.supported-architecture</code> - The CPU architecture (<code>arm64</code> | <code>i386</code> | <code>x86_64</code>).</p> </li> <li> <p> <code>processor-info.sustained-clock-speed-in-ghz</code> - The CPU clock speed, in GHz.</p> </li> <li> <p> <code>processor-info.supported-features</code> - The supported CPU features (<code>amd-sev-snp</code>).</p> </li> <li> <p> <code>reboot-migration-support</code> - Indicates whether enabling reboot migration is supported (<code>supported</code> | <code>unsupported</code>).</p> </li> <li> <p> <code>supported-boot-mode</code> - The boot mode (<code>legacy-bios</code> | <code>uefi</code>).</p> </li> <li> <p> <code>supported-root-device-type</code> - The root device type (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>supported-usage-class</code> - The usage class (<code>on-demand</code> | <code>spot</code> | <code>capacity-block</code>).</p> </li> <li> <p> <code>supported-virtualization-type</code> - The virtualization type (<code>hvm</code> | <code>paravirtual</code>).</p> </li> <li> <p> <code>vcpu-info.default-cores</code> - The default number of cores for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-threads-per-core</code> - The default number of threads per core for the instance type.</p> </li> <li> <p> <code>vcpu-info.default-vcpus</code> - The default number of vCPUs for the instance type.</p> </li> <li> <p> <code>vcpu-info.valid-cores</code> - The number of cores that can be configured for the instance type.</p> </li> <li> <p> <code>vcpu-info.valid-threads-per-core</code> - The number of threads per core that can be configured for the instance type. For example, \"1\" or \"1,2\".</p> </li> </ul>",
           "locationName":"Filter"
         },
         "MaxResults":{
@@ -22877,7 +25458,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2022-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li> <li> <p> <code>boot-mode</code> - The boot mode that was specified by the AMI (<code>legacy-bios</code> | <code>uefi</code> | <code>uefi-preferred</code>).</p> </li> <li> <p> <code>capacity-reservation-id</code> - The ID of the Capacity Reservation into which the instance was launched.</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-preference</code> - The instance's Capacity Reservation preference (<code>open</code> | <code>none</code>).</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-target.capacity-reservation-id</code> - The ID of the targeted Capacity Reservation.</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn</code> - The ARN of the targeted Capacity Reservation group.</p> </li> <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li> <li> <p> <code>current-instance-boot-mode</code> - The boot mode that is used to launch the instance at launch or start (<code>legacy-bios</code> | <code>uefi</code>).</p> </li> <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li> <li> <p> <code>ebs-optimized</code> - A Boolean that indicates whether the instance is optimized for Amazon EBS I/O.</p> </li> <li> <p> <code>ena-support</code> - A Boolean that indicates whether the instance is enabled for enhanced networking with ENA.</p> </li> <li> <p> <code>enclave-options.enabled</code> - A Boolean that indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves.</p> </li> <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation.</p> </li> <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li> <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li> <li> <p> <code>iam-instance-profile.id</code> - The instance profile associated with the instance. Specified as an ID.</p> </li> <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance, a Scheduled Instance, or a Capacity Block (<code>spot</code> | <code>scheduled</code> | <code>capacity-block</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li> <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li> <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li> <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li> <li> <p> <code>ipv6-address</code> - The IPv6 address of the instance.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li> <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li> <li> <p> <code>launch-time</code> - The time when the instance was launched, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>maintenance-options.auto-recovery</code> - The current automatic recovery behavior of the instance (<code>disabled</code> | <code>default</code>).</p> </li> <li> <p> <code>metadata-options.http-endpoint</code> - The status of access to the HTTP metadata endpoint on your instance (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>metadata-options.http-protocol-ipv4</code> - Indicates whether the IPv4 endpoint is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>metadata-options.http-protocol-ipv6</code> - Indicates whether the IPv6 endpoint is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The HTTP metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li> <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li> <li> <p> <code>metadata-options.instance-metadata-tags</code> - The status of access to instance tags from the instance metadata (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>metadata-options.state</code> - The state of the metadata option changes (<code>pending</code> | <code>applied</code>).</p> </li> <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>network-interface.addresses.association.allocation-id</code> - The allocation ID.</p> </li> <li> <p> <code>network-interface.addresses.association.association-id</code> - The association ID.</p> </li> <li> <p> <code>network-interface.addresses.association.carrier-ip</code> - The carrier IP address.</p> </li> <li> <p> <code>network-interface.addresses.association.customer-owned-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.addresses.association.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li> <li> <p> <code>network-interface.addresses.private-dns-name</code> - The private DNS name.</p> </li> <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>network-interface.association.carrier-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.association.customer-owned-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.network-card-index</code> - The index of the network card.</p> </li> <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li> <li> <p> <code>network-interface.deny-all-igw-traffic</code> - A Boolean that indicates whether a network interface with an IPv6 address is unreachable from the public internet.</p> </li> <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv4-prefixes.ipv4-prefix</code> - The IPv4 prefixes that are assigned to the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.is-primary-ipv6</code> - A Boolean that indicates whether this is the primary IPv6 address.</p> </li> <li> <p> <code>network-interface.ipv6-native</code> - A Boolean that indicates whether this is an IPv6 only network interface.</p> </li> <li> <p> <code>network-interface.ipv6-prefixes.ipv6-prefix</code> - The IPv6 prefix assigned to the network interface.</p> </li> <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.operator.managed</code> - A Boolean that indicates whether the instance has a managed network interface.</p> </li> <li> <p> <code>network-interface.operator.principal</code> - The principal that manages the network interface. Only valid for instances with managed network interfaces, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>network-interface.outpost-arn</code> - The ARN of the Outpost.</p> </li> <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li> <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li> <li> <p> <code>network-interface.private-ip-address</code> - The private IPv4 address.</p> </li> <li> <p> <code>network-interface.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li> <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by Amazon Web Services.</p> </li> <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li> <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>network-interface.tag-key</code> - The key of a tag assigned to the network interface.</p> </li> <li> <p> <code>network-interface.tag-value</code> - The value of a tag assigned to the network interface.</p> </li> <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li> <li> <p> <code>network-performance-options.bandwidth-weighting</code> - Where the performance boost is applied, if applicable. Valid values: <code>default</code>, <code>vpc-1</code>, <code>ebs-1</code>.</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed instance.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the instance. Only valid for managed instances, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the instance owner.</p> </li> <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li> <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li> <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li> <li> <p> <code>platform-details</code> - The platform (<code>Linux/UNIX</code> | <code>Red Hat BYOL Linux</code> | <code> Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Red Hat Enterprise Linux with SQL Server Standard and HA</code> | <code>Red Hat Enterprise Linux with SQL Server Enterprise and HA</code> | <code>Red Hat Enterprise Linux with SQL Server Standard</code> | <code>Red Hat Enterprise Linux with SQL Server Web</code> | <code>Red Hat Enterprise Linux with SQL Server Enterprise</code> | <code>SQL Server Enterprise</code> | <code>SQL Server Standard</code> | <code>SQL Server Web</code> | <code>SUSE Linux</code> | <code>Ubuntu Pro</code> | <code>Windows</code> | <code>Windows BYOL</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code>).</p> </li> <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li> <li> <p> <code>private-dns-name-options.enable-resource-name-dns-a-record</code> - A Boolean that indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p> </li> <li> <p> <code>private-dns-name-options.enable-resource-name-dns-aaaa-record</code> - A Boolean that indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p> </li> <li> <p> <code>private-dns-name-options.hostname-type</code> - The type of hostname (<code>ip-name</code> | <code>resource-name</code>).</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance. This can only be used to filter by the primary IP address of the network interface attached to the instance. To filter by additional IP addresses assigned to the network interface, use the filter <code>network-interface.addresses.private-ip-address</code>.</p> </li> <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li> <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows \"User Initiated [date]\" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li> <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>tpm-support</code> - Indicates if the instance is configured for NitroTPM support (<code>v2.0</code>). </p> </li> <li> <p> <code>usage-operation</code> - The usage operation value for the instance (<code>RunInstances</code> | <code>RunInstances:00g0</code> | <code>RunInstances:0010</code> | <code>RunInstances:1010</code> | <code>RunInstances:1014</code> | <code>RunInstances:1110</code> | <code>RunInstances:0014</code> | <code>RunInstances:0210</code> | <code>RunInstances:0110</code> | <code>RunInstances:0100</code> | <code>RunInstances:0004</code> | <code>RunInstances:0200</code> | <code>RunInstances:000g</code> | <code>RunInstances:0g00</code> | <code>RunInstances:0002</code> | <code>RunInstances:0800</code> | <code>RunInstances:0102</code> | <code>RunInstances:0006</code> | <code>RunInstances:0202</code>).</p> </li> <li> <p> <code>usage-operation-update-time</code> - The time that the usage operation was last updated, for example, <code>2022-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>affinity</code> - The affinity setting for an instance running on a Dedicated Host (<code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>architecture</code> - The instance architecture (<code>i386</code> | <code>x86_64</code> | <code>arm64</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the instance.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone of the instance.</p> </li> <li> <p> <code>block-device-mapping.attach-time</code> - The attach time for an EBS volume mapped to the instance, for example, <code>2022-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>block-device-mapping.delete-on-termination</code> - A Boolean that indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>block-device-mapping.device-name</code> - The device name specified in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>block-device-mapping.status</code> - The status for the EBS volume (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>block-device-mapping.volume-id</code> - The volume ID of the EBS volume.</p> </li> <li> <p> <code>boot-mode</code> - The boot mode that was specified by the AMI (<code>legacy-bios</code> | <code>uefi</code> | <code>uefi-preferred</code>).</p> </li> <li> <p> <code>capacity-reservation-id</code> - The ID of the Capacity Reservation into which the instance was launched.</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-preference</code> - The instance's Capacity Reservation preference (<code>open</code> | <code>none</code>).</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-target.capacity-reservation-id</code> - The ID of the targeted Capacity Reservation.</p> </li> <li> <p> <code>capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn</code> - The ARN of the targeted Capacity Reservation group.</p> </li> <li> <p> <code>client-token</code> - The idempotency token you provided when you launched the instance.</p> </li> <li> <p> <code>current-instance-boot-mode</code> - The boot mode that is used to launch the instance at launch or start (<code>legacy-bios</code> | <code>uefi</code>).</p> </li> <li> <p> <code>dns-name</code> - The public DNS name of the instance.</p> </li> <li> <p> <code>ebs-optimized</code> - A Boolean that indicates whether the instance is optimized for Amazon EBS I/O.</p> </li> <li> <p> <code>ena-support</code> - A Boolean that indicates whether the instance is enabled for enhanced networking with ENA.</p> </li> <li> <p> <code>enclave-options.enabled</code> - A Boolean that indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves.</p> </li> <li> <p> <code>hibernation-options.configured</code> - A Boolean that indicates whether the instance is enabled for hibernation. A value of <code>true</code> means that the instance is enabled for hibernation.</p> </li> <li> <p> <code>host-id</code> - The ID of the Dedicated Host on which the instance is running, if applicable.</p> </li> <li> <p> <code>hypervisor</code> - The hypervisor type of the instance (<code>ovm</code> | <code>xen</code>). The value <code>xen</code> is used for both Xen and Nitro hypervisors.</p> </li> <li> <p> <code>iam-instance-profile.arn</code> - The instance profile associated with the instance. Specified as an ARN.</p> </li> <li> <p> <code>iam-instance-profile.id</code> - The instance profile associated with the instance. Specified as an ID.</p> </li> <li> <p> <code>image-id</code> - The ID of the image used to launch the instance.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance.</p> </li> <li> <p> <code>instance-lifecycle</code> - Indicates whether this is a Spot Instance, a Scheduled Instance, or a Capacity Block (<code>spot</code> | <code>scheduled</code> | <code>capacity-block</code>).</p> </li> <li> <p> <code>instance-state-code</code> - The state of the instance, as a 16-bit unsigned integer. The high byte is used for internal purposes and should be ignored. The low byte is set based on the state represented. The valid values are: 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).</p> </li> <li> <p> <code>instance-state-name</code> - The state of the instance (<code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code>).</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>t2.micro</code>).</p> </li> <li> <p> <code>instance.group-id</code> - The ID of the security group for the instance. </p> </li> <li> <p> <code>instance.group-name</code> - The name of the security group for the instance. </p> </li> <li> <p> <code>ip-address</code> - The public IPv4 address of the instance.</p> </li> <li> <p> <code>ipv6-address</code> - The IPv6 address of the instance.</p> </li> <li> <p> <code>kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>key-name</code> - The name of the key pair used when the instance was launched.</p> </li> <li> <p> <code>launch-index</code> - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on). </p> </li> <li> <p> <code>launch-time</code> - The time when the instance was launched, in the ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for example, <code>2021-09-29T11:04:43.305Z</code>. You can use a wildcard (<code>*</code>), for example, <code>2021-09-29T*</code>, which matches an entire day.</p> </li> <li> <p> <code>maintenance-options.auto-recovery</code> - The current automatic recovery behavior of the instance (<code>disabled</code> | <code>default</code>).</p> </li> <li> <p> <code>metadata-options.http-endpoint</code> - The status of access to the HTTP metadata endpoint on your instance (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>metadata-options.http-protocol-ipv4</code> - Indicates whether the IPv4 endpoint is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>metadata-options.http-protocol-ipv6</code> - Indicates whether the IPv6 endpoint is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>metadata-options.http-put-response-hop-limit</code> - The HTTP metadata request put response hop limit (integer, possible values <code>1</code> to <code>64</code>)</p> </li> <li> <p> <code>metadata-options.http-tokens</code> - The metadata request authorization state (<code>optional</code> | <code>required</code>)</p> </li> <li> <p> <code>metadata-options.instance-metadata-tags</code> - The status of access to instance tags from the instance metadata (<code>enabled</code> | <code>disabled</code>)</p> </li> <li> <p> <code>metadata-options.state</code> - The state of the metadata option changes (<code>pending</code> | <code>applied</code>).</p> </li> <li> <p> <code>monitoring-state</code> - Indicates whether detailed monitoring is enabled (<code>disabled</code> | <code>enabled</code>).</p> </li> <li> <p> <code>network-interface.addresses.association.allocation-id</code> - The allocation ID.</p> </li> <li> <p> <code>network-interface.addresses.association.association-id</code> - The association ID.</p> </li> <li> <p> <code>network-interface.addresses.association.carrier-ip</code> - The carrier IP address.</p> </li> <li> <p> <code>network-interface.addresses.association.customer-owned-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.addresses.association.ip-owner-id</code> - The owner ID of the private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.addresses.association.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.addresses.association.public-ip</code> - The ID of the association of an Elastic IP address (IPv4) with a network interface.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.</p> </li> <li> <p> <code>network-interface.addresses.private-dns-name</code> - The private DNS name.</p> </li> <li> <p> <code>network-interface.addresses.private-ip-address</code> - The private IPv4 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>network-interface.association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>network-interface.association.carrier-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.association.customer-owned-ip</code> - The customer-owned IP address.</p> </li> <li> <p> <code>network-interface.association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>network-interface.association.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>network-interface.attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>network-interface.attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>network-interface.attachment.delete-on-termination</code> - Specifies whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>network-interface.attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>network-interface.attachment.network-card-index</code> - The index of the network card.</p> </li> <li> <p> <code>network-interface.attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>network-interface.availability-zone</code> - The Availability Zone for the network interface.</p> </li> <li> <p> <code>network-interface.deny-all-igw-traffic</code> - A Boolean that indicates whether a network interface with an IPv6 address is unreachable from the public internet.</p> </li> <li> <p> <code>network-interface.description</code> - The description of the network interface.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.group-name</code> - The name of a security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv4-prefixes.ipv4-prefix</code> - The IPv4 prefixes that are assigned to the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.ipv6-address</code> - The IPv6 address associated with the network interface.</p> </li> <li> <p> <code>network-interface.ipv6-addresses.is-primary-ipv6</code> - A Boolean that indicates whether this is the primary IPv6 address.</p> </li> <li> <p> <code>network-interface.ipv6-native</code> - A Boolean that indicates whether this is an IPv6 only network interface.</p> </li> <li> <p> <code>network-interface.ipv6-prefixes.ipv6-prefix</code> - The IPv6 prefix assigned to the network interface.</p> </li> <li> <p> <code>network-interface.mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.operator.managed</code> - A Boolean that indicates whether the instance has a managed network interface.</p> </li> <li> <p> <code>network-interface.operator.principal</code> - The principal that manages the network interface. Only valid for instances with managed network interfaces, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>network-interface.outpost-arn</code> - The ARN of the Outpost.</p> </li> <li> <p> <code>network-interface.owner-id</code> - The ID of the owner of the network interface.</p> </li> <li> <p> <code>network-interface.private-dns-name</code> - The private DNS name of the network interface.</p> </li> <li> <p> <code>network-interface.private-ip-address</code> - The private IPv4 address.</p> </li> <li> <p> <code>network-interface.public-dns-name</code> - The public DNS name.</p> </li> <li> <p> <code>network-interface.requester-id</code> - The requester ID for the network interface.</p> </li> <li> <p> <code>network-interface.requester-managed</code> - Indicates whether the network interface is being managed by Amazon Web Services.</p> </li> <li> <p> <code>network-interface.status</code> - The status of the network interface (<code>available</code>) | <code>in-use</code>).</p> </li> <li> <p> <code>network-interface.source-dest-check</code> - Whether the network interface performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>network-interface.tag-key</code> - The key of a tag assigned to the network interface.</p> </li> <li> <p> <code>network-interface.tag-value</code> - The value of a tag assigned to the network interface.</p> </li> <li> <p> <code>network-interface.vpc-id</code> - The ID of the VPC for the network interface.</p> </li> <li> <p> <code>network-performance-options.bandwidth-weighting</code> - Where the performance boost is applied, if applicable. Valid values: <code>default</code>, <code>vpc-1</code>, <code>ebs-1</code>.</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed instance.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the instance. Only valid for managed instances, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>outpost-arn</code> - The Amazon Resource Name (ARN) of the Outpost.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the instance owner.</p> </li> <li> <p> <code>placement-group-name</code> - The name of the placement group for the instance.</p> </li> <li> <p> <code>placement-partition-number</code> - The partition in which the instance is located.</p> </li> <li> <p> <code>platform</code> - The platform. To list only Windows instances, use <code>windows</code>.</p> </li> <li> <p> <code>platform-details</code> - The platform (<code>Linux/UNIX</code> | <code>Red Hat BYOL Linux</code> | <code> Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Red Hat Enterprise Linux with High Availability</code> | <code>Red Hat Enterprise Linux with SQL Server Standard and HA</code> | <code>Red Hat Enterprise Linux with SQL Server Enterprise and HA</code> | <code>Red Hat Enterprise Linux with SQL Server Standard</code> | <code>Red Hat Enterprise Linux with SQL Server Web</code> | <code>Red Hat Enterprise Linux with SQL Server Enterprise</code> | <code>SQL Server Enterprise</code> | <code>SQL Server Standard</code> | <code>SQL Server Web</code> | <code>SUSE Linux</code> | <code>Ubuntu Pro</code> | <code>Windows</code> | <code>Windows BYOL</code> | <code>Windows with SQL Server Enterprise</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code>).</p> </li> <li> <p> <code>private-dns-name</code> - The private IPv4 DNS name of the instance.</p> </li> <li> <p> <code>private-dns-name-options.enable-resource-name-dns-a-record</code> - A Boolean that indicates whether to respond to DNS queries for instance hostnames with DNS A records.</p> </li> <li> <p> <code>private-dns-name-options.enable-resource-name-dns-aaaa-record</code> - A Boolean that indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.</p> </li> <li> <p> <code>private-dns-name-options.hostname-type</code> - The type of hostname (<code>ip-name</code> | <code>resource-name</code>).</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address of the instance. This can only be used to filter by the primary IP address of the network interface attached to the instance. To filter by additional IP addresses assigned to the network interface, use the filter <code>network-interface.addresses.private-ip-address</code>.</p> </li> <li> <p> <code>product-code</code> - The product code associated with the AMI used to launch the instance.</p> </li> <li> <p> <code>product-code.type</code> - The type of product code (<code>devpay</code> | <code>marketplace</code>).</p> </li> <li> <p> <code>ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>reason</code> - The reason for the current state of the instance (for example, shows \"User Initiated [date]\" when you stop or terminate the instance). Similar to the state-reason-code filter.</p> </li> <li> <p> <code>requester-id</code> - The ID of the entity that launched the instance on your behalf (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>reservation-id</code> - The ID of the instance's reservation. A reservation ID is created any time you launch an instance. A reservation ID has a one-to-one relationship with an instance launch request, but can be associated with more than one instance if you launch multiple instances using the same launch request. For example, if you launch one instance, you get one reservation ID. If you launch ten instances using the same launch request, you also get one reservation ID.</p> </li> <li> <p> <code>root-device-name</code> - The device name of the root device volume (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>root-device-type</code> - The type of the root device volume (<code>ebs</code> | <code>instance-store</code>).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the instance performs source/destination checking. A value of <code>true</code> means that checking is enabled, and <code>false</code> means that checking is disabled. The value must be <code>false</code> for the instance to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>spot-instance-request-id</code> - The ID of the Spot Instance request.</p> </li> <li> <p> <code>state-reason-code</code> - The reason code for the state change.</p> </li> <li> <p> <code>state-reason-message</code> - A message that describes the state change.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources that have a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>tenancy</code> - The tenancy of an instance (<code>dedicated</code> | <code>default</code> | <code>host</code>).</p> </li> <li> <p> <code>tpm-support</code> - Indicates if the instance is configured for NitroTPM support (<code>v2.0</code>). </p> </li> <li> <p> <code>usage-operation</code> - The usage operation value for the instance (<code>RunInstances</code> | <code>RunInstances:00g0</code> | <code>RunInstances:0010</code> | <code>RunInstances:1010</code> | <code>RunInstances:1014</code> | <code>RunInstances:1110</code> | <code>RunInstances:0014</code> | <code>RunInstances:0210</code> | <code>RunInstances:0110</code> | <code>RunInstances:0100</code> | <code>RunInstances:0004</code> | <code>RunInstances:0200</code> | <code>RunInstances:000g</code> | <code>RunInstances:0g00</code> | <code>RunInstances:0002</code> | <code>RunInstances:0800</code> | <code>RunInstances:0102</code> | <code>RunInstances:0006</code> | <code>RunInstances:0202</code>).</p> </li> <li> <p> <code>usage-operation-update-time</code> - The time that the usage operation was last updated, for example, <code>2022-09-15T17:15:20.000Z</code>.</p> </li> <li> <p> <code>virtualization-type</code> - The virtualization type of the instance (<code>paravirtual</code> | <code>hvm</code>).</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC that the instance is running in.</p> </li> </ul>",
           "locationName":"Filter"
         },
         "NextToken":{
@@ -23076,6 +25657,94 @@
         }
       }
     },
+    "DescribeIpamPrefixListResolverTargetsRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to limit the results.</p>",
+          "locationName":"Filter"
+        },
+        "MaxResults":{
+          "shape":"IpamMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "IpamPrefixListResolverTargetIds":{
+          "shape":"ValueStringList",
+          "documentation":"<p>The IDs of the IPAM prefix list resolver Targets to describe. If not specified, all targets in your account are described.</p>",
+          "locationName":"IpamPrefixListResolverTargetId"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver to filter targets by. Only targets associated with this resolver will be returned.</p>"
+        }
+      }
+    },
+    "DescribeIpamPrefixListResolverTargetsResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        },
+        "IpamPrefixListResolverTargets":{
+          "shape":"IpamPrefixListResolverTargetSet",
+          "documentation":"<p>Information about the IPAM prefix list resolver Targets.</p>",
+          "locationName":"ipamPrefixListResolverTargetSet"
+        }
+      }
+    },
+    "DescribeIpamPrefixListResolversRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to limit the results.</p>",
+          "locationName":"Filter"
+        },
+        "MaxResults":{
+          "shape":"IpamMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "IpamPrefixListResolverIds":{
+          "shape":"ValueStringList",
+          "documentation":"<p>The IDs of the IPAM prefix list resolvers to describe. If not specified, all resolvers in your account are described.</p>",
+          "locationName":"IpamPrefixListResolverId"
+        }
+      }
+    },
+    "DescribeIpamPrefixListResolversResult":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        },
+        "IpamPrefixListResolvers":{
+          "shape":"IpamPrefixListResolverSet",
+          "documentation":"<p>Information about the IPAM prefix list resolvers.</p>",
+          "locationName":"ipamPrefixListResolverSet"
+        }
+      }
+    },
     "DescribeIpamResourceDiscoveriesRequest":{
       "type":"structure",
       "members":{
@@ -23368,7 +26037,7 @@
         },
         "ResolveAlias":{
           "shape":"Boolean",
-          "documentation":"<p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageId</code>.</p> <p>If <code>false</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the parameter is displayed in the response for <code>imageId</code>.</p> <p> For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>"
+          "documentation":"<p>If <code>true</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the AMI ID is displayed in the response for <code>imageId</code>.</p> <p>If <code>false</code>, and if a Systems Manager parameter is specified for <code>ImageId</code>, the parameter is displayed in the response for <code>imageId</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>"
         }
       }
     },
@@ -23781,6 +26450,53 @@
         }
       }
     },
+    "DescribeMacModificationTasksMaxResults":{
+      "type":"integer",
+      "max":500,
+      "min":1
+    },
+    "DescribeMacModificationTasksRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>Specifies one or more filters for the request:</p> <ul> <li> <p> <code>instance-id</code> - The ID of the instance for which the task was created.</p> </li> <li> <p> <code>task-state</code> - The state of the task (<code>successful</code> | <code>failed</code> | <code>in-progress</code> | <code>pending</code>).</p> </li> <li> <p> <code>mac-system-integrity-protection-configuration.sip-status</code> - The overall SIP state requested in the task (<code>enabled</code> | <code>disabled</code>).</p> </li> <li> <p> <code>start-time</code> - The date and time the task was created.</p> </li> <li> <p> <code>task-type</code> - The type of task (<code>sip-modification</code> | <code>volume-ownership-delegation</code>).</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "MacModificationTaskIds":{
+          "shape":"MacModificationTaskIdList",
+          "documentation":"<p>The ID of task.</p>",
+          "locationName":"MacModificationTaskId"
+        },
+        "MaxResults":{
+          "shape":"DescribeMacModificationTasksMaxResults",
+          "documentation":"<p>The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned <code>nextToken</code> value. This value can be between 5 and 500. If <code>maxResults</code> is given a larger value than 500, you receive an error.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "DescribeMacModificationTasksResult":{
+      "type":"structure",
+      "members":{
+        "MacModificationTasks":{
+          "shape":"MacModificationTaskList",
+          "documentation":"<p>Information about the tasks.</p>",
+          "locationName":"macModificationTaskSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "DescribeManagedPrefixListsRequest":{
       "type":"structure",
       "members":{
@@ -24290,7 +27006,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>addresses.association.owner-id</code> - The owner ID of the addresses associated with the network interface.</p> </li> <li> <p> <code>addresses.association.public-ip</code> - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).</p> </li> <li> <p> <code>addresses.primary</code> - Whether the private IPv4 address is the primary IP address associated with the network interface. </p> </li> <li> <p> <code>addresses.private-ip-address</code> - The private IPv4 addresses associated with the network interface.</p> </li> <li> <p> <code>association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>association.public-dns-name</code> - The public DNS name for the network interface (IPv4).</p> </li> <li> <p> <code>attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>attachment.delete-on-termination</code> - Indicates whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the network interface.</p> </li> <li> <p> <code>description</code> - The description of the network interface.</p> </li> <li> <p> <code>group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>ipv6-addresses.ipv6-address</code> - An IPv6 address associated with the network interface.</p> </li> <li> <p> <code>interface-type</code> - The type of network interface (<code>api_gateway_managed</code> | <code>aws_codestar_connections_managed</code> | <code>branch</code> | <code>ec2_instance_connect_endpoint</code> | <code>efa</code> | <code>efa-only</code> | <code>efs</code> | <code>gateway_load_balancer</code> | <code>gateway_load_balancer_endpoint</code> | <code>global_accelerator_managed</code> | <code>interface</code> | <code>iot_rules_managed</code> | <code>lambda</code> | <code>load_balancer</code> | <code>nat_gateway</code> | <code>network_load_balancer</code> | <code>quicksight</code> | <code>transit_gateway</code> | <code>trunk</code> | <code>vpc_endpoint</code>).</p> </li> <li> <p> <code>mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the network interface owner.</p> </li> <li> <p> <code>private-dns-name</code> - The private DNS name of the network interface (IPv4).</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address or addresses of the network interface.</p> </li> <li> <p> <code>requester-id</code> - The alias or Amazon Web Services account ID of the principal or service that created the network interface.</p> </li> <li> <p> <code>requester-managed</code> - Indicates whether the network interface is being managed by an Amazon Web Services service (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the network interface performs source/destination checking. A value of <code>true</code> means checking is enabled, and <code>false</code> means checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>status</code> - The status of the network interface. If the network interface is not attached to an instance, the status is <code>available</code>; if a network interface is attached to an instance the status is <code>in-use</code>.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC for the network interface.</p> </li> </ul>",
+          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>association.allocation-id</code> - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.</p> </li> <li> <p> <code>association.association-id</code> - The association ID returned when the network interface was associated with an IPv4 address.</p> </li> <li> <p> <code>addresses.association.owner-id</code> - The owner ID of the addresses associated with the network interface.</p> </li> <li> <p> <code>addresses.association.public-ip</code> - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).</p> </li> <li> <p> <code>addresses.primary</code> - Whether the private IPv4 address is the primary IP address associated with the network interface. </p> </li> <li> <p> <code>addresses.private-ip-address</code> - The private IPv4 addresses associated with the network interface.</p> </li> <li> <p> <code>association.ip-owner-id</code> - The owner of the Elastic IP address (IPv4) associated with the network interface.</p> </li> <li> <p> <code>association.public-ip</code> - The address of the Elastic IP address (IPv4) bound to the network interface.</p> </li> <li> <p> <code>association.public-dns-name</code> - The public DNS name for the network interface (IPv4).</p> </li> <li> <p> <code>attachment.attach-time</code> - The time that the network interface was attached to an instance.</p> </li> <li> <p> <code>attachment.attachment-id</code> - The ID of the interface attachment.</p> </li> <li> <p> <code>attachment.delete-on-termination</code> - Indicates whether the attachment is deleted when an instance is terminated.</p> </li> <li> <p> <code>attachment.device-index</code> - The device index to which the network interface is attached.</p> </li> <li> <p> <code>attachment.instance-id</code> - The ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>attachment.instance-owner-id</code> - The owner ID of the instance to which the network interface is attached.</p> </li> <li> <p> <code>attachment.status</code> - The status of the attachment (<code>attaching</code> | <code>attached</code> | <code>detaching</code> | <code>detached</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone of the network interface.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone of the network interface.</p> </li> <li> <p> <code>description</code> - The description of the network interface.</p> </li> <li> <p> <code>group-id</code> - The ID of a security group associated with the network interface.</p> </li> <li> <p> <code>ipv6-addresses.ipv6-address</code> - An IPv6 address associated with the network interface.</p> </li> <li> <p> <code>interface-type</code> - The type of network interface (<code>api_gateway_managed</code> | <code>aws_codestar_connections_managed</code> | <code>branch</code> | <code>ec2_instance_connect_endpoint</code> | <code>efa</code> | <code>efa-only</code> | <code>efs</code> | <code>evs</code> | <code>gateway_load_balancer</code> | <code>gateway_load_balancer_endpoint</code> | <code>global_accelerator_managed</code> | <code>interface</code> | <code>iot_rules_managed</code> | <code>lambda</code> | <code>load_balancer</code> | <code>nat_gateway</code> | <code>network_load_balancer</code> | <code>quicksight</code> | <code>transit_gateway</code> | <code>trunk</code> | <code>vpc_endpoint</code>).</p> </li> <li> <p> <code>mac-address</code> - The MAC address of the network interface.</p> </li> <li> <p> <code>network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed network interface.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the network interface. Only valid for managed network interfaces, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>owner-id</code> - The Amazon Web Services account ID of the network interface owner.</p> </li> <li> <p> <code>private-dns-name</code> - The private DNS name of the network interface (IPv4).</p> </li> <li> <p> <code>private-ip-address</code> - The private IPv4 address or addresses of the network interface.</p> </li> <li> <p> <code>requester-id</code> - The alias or Amazon Web Services account ID of the principal or service that created the network interface.</p> </li> <li> <p> <code>requester-managed</code> - Indicates whether the network interface is being managed by an Amazon Web Services service (for example, Amazon Web Services Management Console, Auto Scaling, and so on).</p> </li> <li> <p> <code>source-dest-check</code> - Indicates whether the network interface performs source/destination checking. A value of <code>true</code> means checking is enabled, and <code>false</code> means checking is disabled. The value must be <code>false</code> for the network interface to perform network address translation (NAT) in your VPC. </p> </li> <li> <p> <code>status</code> - The status of the network interface. If the network interface is not attached to an instance, the status is <code>available</code>; if a network interface is attached to an instance the status is <code>in-use</code>.</p> </li> <li> <p> <code>subnet-id</code> - The ID of the subnet for the network interface.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC for the network interface.</p> </li> </ul>",
           "locationName":"filter"
         }
       },
@@ -24311,6 +27027,48 @@
         }
       }
     },
+    "DescribeOutpostLagsRequest":{
+      "type":"structure",
+      "members":{
+        "OutpostLagIds":{
+          "shape":"OutpostLagIdSet",
+          "documentation":"<p>The IDs of the Outpost LAGs.</p>",
+          "locationName":"OutpostLagId"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters to use for narrowing down the request. The following filters are supported:</p> <ul> <li> <p> <code>service-link-virtual-interface-id</code> - The ID of the service link virtual interface.</p> </li> <li> <p> <code>service-link-virtual-interface-arn</code> - The ARN of the service link virtual interface.</p> </li> <li> <p> <code>outpost-id</code> - The Outpost ID.</p> </li> <li> <p> <code>outpost-arn</code> - The Outpost ARN.</p> </li> <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the service link virtual interface.</p> </li> <li> <p> <code>vlan</code> - The ID of the address pool.</p> </li> <li> <p> <code>local-address</code> - The local address.</p> </li> <li> <p> <code>peer-address</code> - The peer address.</p> </li> <li> <p> <code>peer-bgp-asn</code> - The peer BGP ASN.</p> </li> <li> <p> <code>outpost-lag-id</code> - The Outpost LAG ID.</p> </li> <li> <p> <code>configuration-state</code> - The configuration state of the service link virtual interface.</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "MaxResults":{
+          "shape":"OutpostLagMaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeOutpostLagsResult":{
+      "type":"structure",
+      "members":{
+        "OutpostLags":{
+          "shape":"OutpostLagSet",
+          "documentation":"<p>The Outpost LAGs.</p>",
+          "locationName":"outpostLagSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "DescribePlacementGroupsRequest":{
       "type":"structure",
       "members":{
@@ -24596,7 +27354,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>client-token</code> - The idempotency token for the modification request.</p> </li> <li> <p> <code>create-date</code> - The time when the modification request was created.</p> </li> <li> <p> <code>effective-date</code> - The time when the modification becomes effective.</p> </li> <li> <p> <code>modification-result.reserved-instances-id</code> - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is <code>fulfilled</code>.</p> </li> <li> <p> <code>modification-result.target-configuration.availability-zone</code> - The Availability Zone for the new Reserved Instances.</p> </li> <li> <p> <code>modification-result.target-configuration.instance-count </code> - The number of new Reserved Instances.</p> </li> <li> <p> <code>modification-result.target-configuration.instance-type</code> - The instance type of the new Reserved Instances.</p> </li> <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances modified.</p> </li> <li> <p> <code>reserved-instances-modification-id</code> - The ID of the modification request.</p> </li> <li> <p> <code>status</code> - The status of the Reserved Instances modification request (<code>processing</code> | <code>fulfilled</code> | <code>failed</code>).</p> </li> <li> <p> <code>status-message</code> - The reason for the status.</p> </li> <li> <p> <code>update-date</code> - The time when the modification request was last updated.</p> </li> </ul>",
+          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>client-token</code> - The idempotency token for the modification request.</p> </li> <li> <p> <code>create-date</code> - The time when the modification request was created.</p> </li> <li> <p> <code>effective-date</code> - The time when the modification becomes effective.</p> </li> <li> <p> <code>modification-result.reserved-instances-id</code> - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is <code>fulfilled</code>.</p> </li> <li> <p> <code>modification-result.target-configuration.availability-zone</code> - The Availability Zone for the new Reserved Instances.</p> </li> <li> <p> <code>modification-result.target-configuration.availability-zone-id</code> - The ID of the Availability Zone for the new Reserved Instances.</p> </li> <li> <p> <code>modification-result.target-configuration.instance-count </code> - The number of new Reserved Instances.</p> </li> <li> <p> <code>modification-result.target-configuration.instance-type</code> - The instance type of the new Reserved Instances.</p> </li> <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instances modified.</p> </li> <li> <p> <code>reserved-instances-modification-id</code> - The ID of the modification request.</p> </li> <li> <p> <code>status</code> - The status of the Reserved Instances modification request (<code>processing</code> | <code>fulfilled</code> | <code>failed</code>).</p> </li> <li> <p> <code>status-message</code> - The reason for the status.</p> </li> <li> <p> <code>update-date</code> - The time when the modification request was last updated.</p> </li> </ul>",
           "locationName":"Filter"
         }
       },
@@ -24623,7 +27381,7 @@
       "members":{
         "AvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone in which the Reserved Instance can be used.</p>"
+          "documentation":"<p>The Availability Zone in which the Reserved Instance can be used.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both.</p>"
         },
         "IncludeMarketplace":{
           "shape":"Boolean",
@@ -24658,6 +27416,10 @@
           "documentation":"<p>One or more Reserved Instances offering IDs.</p>",
           "locationName":"ReservedInstancesOfferingId"
         },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -24665,7 +27427,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>duration</code> - The duration of the Reserved Instance (for example, one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li> <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li> <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li> <li> <p> <code>marketplace</code> - Set to <code>true</code> to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both Amazon Web Services and the Reserved Instance Marketplace are listed.</p> </li> <li> <p> <code>product-description</code> - The Reserved Instance product platform description (<code>Linux/UNIX</code> | <code>Linux with SQL Server Standard</code> | <code>Linux with SQL Server Web</code> | <code>Linux with SQL Server Enterprise</code> | <code>SUSE Linux</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Windows</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Enterprise</code>).</p> </li> <li> <p> <code>reserved-instances-offering-id</code> - The Reserved Instances offering ID.</p> </li> <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Availability Zone</code> or <code>Region</code>).</p> </li> <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li> </ul>",
+          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>duration</code> - The duration of the Reserved Instance (for example, one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li> <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li> <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li> <li> <p> <code>marketplace</code> - Set to <code>true</code> to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both Amazon Web Services and the Reserved Instance Marketplace are listed.</p> </li> <li> <p> <code>product-description</code> - The Reserved Instance product platform description (<code>Linux/UNIX</code> | <code>Linux with SQL Server Standard</code> | <code>Linux with SQL Server Web</code> | <code>Linux with SQL Server Enterprise</code> | <code>SUSE Linux</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Windows</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Enterprise</code>).</p> </li> <li> <p> <code>reserved-instances-offering-id</code> - The Reserved Instances offering ID.</p> </li> <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Availability Zone</code> or <code>Region</code>).</p> </li> <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li> </ul>",
           "locationName":"Filter"
         },
         "InstanceTenancy":{
@@ -24726,7 +27488,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>duration</code> - The duration of the Reserved Instance (one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li> <li> <p> <code>end</code> - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).</p> </li> <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li> <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li> <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Region</code> or <code>Availability Zone</code>).</p> </li> <li> <p> <code>product-description</code> - The Reserved Instance product platform description (<code>Linux/UNIX</code> | <code>Linux with SQL Server Standard</code> | <code>Linux with SQL Server Web</code> | <code>Linux with SQL Server Enterprise</code> | <code>SUSE Linux</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Windows</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Enterprise</code>).</p> </li> <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instance.</p> </li> <li> <p> <code>start</code> - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).</p> </li> <li> <p> <code>state</code> - The state of the Reserved Instance (<code>payment-pending</code> | <code>active</code> | <code>payment-failed</code> | <code>retired</code>).</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li> </ul>",
+          "documentation":"<p>One or more filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone where the Reserved Instance can be used.</p> </li> <li> <p> <code>duration</code> - The duration of the Reserved Instance (one year or three years), in seconds (<code>31536000</code> | <code>94608000</code>).</p> </li> <li> <p> <code>end</code> - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).</p> </li> <li> <p> <code>fixed-price</code> - The purchase price of the Reserved Instance (for example, 9800.0).</p> </li> <li> <p> <code>instance-type</code> - The instance type that is covered by the reservation.</p> </li> <li> <p> <code>scope</code> - The scope of the Reserved Instance (<code>Region</code> or <code>Availability Zone</code>).</p> </li> <li> <p> <code>product-description</code> - The Reserved Instance product platform description (<code>Linux/UNIX</code> | <code>Linux with SQL Server Standard</code> | <code>Linux with SQL Server Web</code> | <code>Linux with SQL Server Enterprise</code> | <code>SUSE Linux</code> | <code>Red Hat Enterprise Linux</code> | <code>Red Hat Enterprise Linux with HA</code> | <code>Windows</code> | <code>Windows with SQL Server Standard</code> | <code>Windows with SQL Server Web</code> | <code>Windows with SQL Server Enterprise</code>).</p> </li> <li> <p> <code>reserved-instances-id</code> - The ID of the Reserved Instance.</p> </li> <li> <p> <code>start</code> - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).</p> </li> <li> <p> <code>state</code> - The state of the Reserved Instance (<code>payment-pending</code> | <code>active</code> | <code>payment-failed</code> | <code>retired</code>).</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>usage-price</code> - The usage price of the Reserved Instance, per hour (for example, 0.84).</p> </li> </ul>",
           "locationName":"Filter"
         },
         "OfferingType":{
@@ -24748,6 +27510,132 @@
       },
       "documentation":"<p>Contains the output for DescribeReservedInstances.</p>"
     },
+    "DescribeRouteServerEndpointsRequest":{
+      "type":"structure",
+      "members":{
+        "RouteServerEndpointIds":{
+          "shape":"RouteServerEndpointIdsList",
+          "documentation":"<p>The IDs of the route server endpoints to describe.</p>",
+          "locationName":"RouteServerEndpointId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"RouteServerMaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to apply to the describe request.</p>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeRouteServerEndpointsResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerEndpoints":{
+          "shape":"RouteServerEndpointsList",
+          "documentation":"<p>Information about the described route server endpoints.</p>",
+          "locationName":"routeServerEndpointSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "DescribeRouteServerPeersRequest":{
+      "type":"structure",
+      "members":{
+        "RouteServerPeerIds":{
+          "shape":"RouteServerPeerIdsList",
+          "documentation":"<p>The IDs of the route server peers to describe.</p>",
+          "locationName":"RouteServerPeerId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"RouteServerMaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to apply to the describe request.</p>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeRouteServerPeersResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPeers":{
+          "shape":"RouteServerPeersList",
+          "documentation":"<p>Information about the described route server peers.</p>",
+          "locationName":"routeServerPeerSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "DescribeRouteServersRequest":{
+      "type":"structure",
+      "members":{
+        "RouteServerIds":{
+          "shape":"RouteServerIdsList",
+          "documentation":"<p>The IDs of the route servers to describe.</p>",
+          "locationName":"RouteServerId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"RouteServerMaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to apply to the describe request.</p>",
+          "locationName":"Filter"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeRouteServersResult":{
+      "type":"structure",
+      "members":{
+        "RouteServers":{
+          "shape":"RouteServersList",
+          "documentation":"<p>Information about the described route servers.</p>",
+          "locationName":"routeServerSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "DescribeRouteTablesMaxResults":{
       "type":"integer",
       "max":100,
@@ -24990,7 +27878,7 @@
       "members":{
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>Security group VPC association filters.</p> <ul> <li> <p> <code>group-id</code>: The security group ID.</p> </li> <li> <p> <code>vpc-id</code>: The ID of the associated VPC.</p> </li> <li> <p> <code>vpc-owner-id</code>: The account ID of the VPC owner.</p> </li> <li> <p> <code>state</code>: The state of the association.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code>: The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code>: The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> </ul>",
+          "documentation":"<p>Security group VPC association filters.</p> <ul> <li> <p> <code>group-id</code>: The security group ID.</p> </li> <li> <p> <code>group-owner-id</code>: The group owner ID.</p> </li> <li> <p> <code>state</code>: The state of the association.</p> </li> <li> <p> <code>vpc-id</code>: The ID of the associated VPC.</p> </li> <li> <p> <code>vpc-owner-id</code>: The account ID of the VPC owner.</p> </li> </ul>",
           "locationName":"Filter"
         },
         "NextToken":{
@@ -25075,6 +27963,48 @@
         }
       }
     },
+    "DescribeServiceLinkVirtualInterfacesRequest":{
+      "type":"structure",
+      "members":{
+        "ServiceLinkVirtualInterfaceIds":{
+          "shape":"ServiceLinkVirtualInterfaceIdSet",
+          "documentation":"<p>The IDs of the service link virtual interfaces.</p>",
+          "locationName":"ServiceLinkVirtualInterfaceId"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters to use for narrowing down the request. The following filters are supported:</p> <ul> <li> <p> <code>outpost-lag-id</code> - The ID of the Outpost LAG.</p> </li> <li> <p> <code>outpost-arn</code> - The Outpost ARN.</p> </li> <li> <p> <code>owner-id</code> - The ID of the Amazon Web Services account that owns the service link virtual interface.</p> </li> <li> <p> <code>state</code> - The state of the Outpost LAG.</p> </li> <li> <p> <code>vlan</code> - The ID of the address pool.</p> </li> <li> <p> <code>service-link-virtual-interface-id</code> - The ID of the service link virtual interface.</p> </li> <li> <p> <code>local-gateway-virtual-interface-id</code> - The ID of the local gateway virtual interface.</p> </li> </ul>",
+          "locationName":"Filter"
+        },
+        "MaxResults":{
+          "shape":"ServiceLinkMaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DescribeServiceLinkVirtualInterfacesResult":{
+      "type":"structure",
+      "members":{
+        "ServiceLinkVirtualInterfaces":{
+          "shape":"ServiceLinkVirtualInterfaceSet",
+          "documentation":"<p>Describes the service link virtual interfaces.</p>",
+          "locationName":"serviceLinkVirtualInterfaceSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "DescribeSnapshotAttributeRequest":{
       "type":"structure",
       "required":[
@@ -25424,7 +28354,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone-group</code> - The Availability Zone group.</p> </li> <li> <p> <code>create-time</code> - The time stamp when the Spot Instance request was created.</p> </li> <li> <p> <code>fault-code</code> - The fault code related to the request.</p> </li> <li> <p> <code>fault-message</code> - The fault message related to the request.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance that fulfilled the request.</p> </li> <li> <p> <code>launch-group</code> - The Spot Instance launch group.</p> </li> <li> <p> <code>launch.block-device-mapping.delete-on-termination</code> - Indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>launch.block-device-mapping.device-name</code> - The device name for the volume in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>launch.block-device-mapping.snapshot-id</code> - The ID of the snapshot for the EBS volume.</p> </li> <li> <p> <code>launch.block-device-mapping.volume-size</code> - The size of the EBS volume, in GiB.</p> </li> <li> <p> <code>launch.block-device-mapping.volume-type</code> - The type of EBS volume: <code>gp2</code> or <code>gp3</code> for General Purpose SSD, <code>io1</code> or <code>io2</code> for Provisioned IOPS SSD, <code>st1</code> for Throughput Optimized HDD, <code>sc1</code> for Cold HDD, or <code>standard</code> for Magnetic.</p> </li> <li> <p> <code>launch.group-id</code> - The ID of the security group for the instance.</p> </li> <li> <p> <code>launch.group-name</code> - The name of the security group for the instance.</p> </li> <li> <p> <code>launch.image-id</code> - The ID of the AMI.</p> </li> <li> <p> <code>launch.instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li> <li> <p> <code>launch.kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>launch.key-name</code> - The name of the key pair the instance launched with.</p> </li> <li> <p> <code>launch.monitoring-enabled</code> - Whether detailed monitoring is enabled for the Spot Instance.</p> </li> <li> <p> <code>launch.ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>launched-availability-zone</code> - The Availability Zone in which the request is launched.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Indicates whether the IP address is the primary private IP address.</p> </li> <li> <p> <code>network-interface.delete-on-termination</code> - Indicates whether the network interface is deleted when the instance is terminated.</p> </li> <li> <p> <code>network-interface.description</code> - A description of the network interface.</p> </li> <li> <p> <code>network-interface.device-index</code> - The index of the device for the network interface attachment on the instance.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of the security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.private-ip-address</code> - The primary private IP address of the network interface.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>product-description</code> - The product description associated with the instance (<code>Linux/UNIX</code> | <code>Windows</code>).</p> </li> <li> <p> <code>spot-instance-request-id</code> - The Spot Instance request ID.</p> </li> <li> <p> <code>spot-price</code> - The maximum hourly price for any Spot Instance launched to fulfill the request.</p> </li> <li> <p> <code>state</code> - The state of the Spot Instance request (<code>open</code> | <code>active</code> | <code>closed</code> | <code>cancelled</code> | <code>failed</code>). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html\">Spot request status</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <code>status-code</code> - The short code describing the most recent evaluation of your Spot Instance request.</p> </li> <li> <p> <code>status-message</code> - The message explaining the status of the Spot Instance request.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>type</code> - The type of Spot Instance request (<code>one-time</code> | <code>persistent</code>).</p> </li> <li> <p> <code>valid-from</code> - The start date of the request.</p> </li> <li> <p> <code>valid-until</code> - The end date of the request.</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone-group</code> - The Availability Zone group.</p> </li> <li> <p> <code>create-time</code> - The time stamp when the Spot Instance request was created.</p> </li> <li> <p> <code>fault-code</code> - The fault code related to the request.</p> </li> <li> <p> <code>fault-message</code> - The fault message related to the request.</p> </li> <li> <p> <code>instance-id</code> - The ID of the instance that fulfilled the request.</p> </li> <li> <p> <code>launch-group</code> - The Spot Instance launch group.</p> </li> <li> <p> <code>launch.block-device-mapping.delete-on-termination</code> - Indicates whether the EBS volume is deleted on instance termination.</p> </li> <li> <p> <code>launch.block-device-mapping.device-name</code> - The device name for the volume in the block device mapping (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p> </li> <li> <p> <code>launch.block-device-mapping.snapshot-id</code> - The ID of the snapshot for the EBS volume.</p> </li> <li> <p> <code>launch.block-device-mapping.volume-size</code> - The size of the EBS volume, in GiB.</p> </li> <li> <p> <code>launch.block-device-mapping.volume-type</code> - The type of EBS volume: <code>gp2</code> or <code>gp3</code> for General Purpose SSD, <code>io1</code> or <code>io2</code> for Provisioned IOPS SSD, <code>st1</code> for Throughput Optimized HDD, <code>sc1</code> for Cold HDD, or <code>standard</code> for Magnetic.</p> </li> <li> <p> <code>launch.group-id</code> - The ID of the security group for the instance.</p> </li> <li> <p> <code>launch.group-name</code> - The name of the security group for the instance.</p> </li> <li> <p> <code>launch.image-id</code> - The ID of the AMI.</p> </li> <li> <p> <code>launch.instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li> <li> <p> <code>launch.kernel-id</code> - The kernel ID.</p> </li> <li> <p> <code>launch.key-name</code> - The name of the key pair the instance launched with.</p> </li> <li> <p> <code>launch.monitoring-enabled</code> - Whether detailed monitoring is enabled for the Spot Instance.</p> </li> <li> <p> <code>launch.ramdisk-id</code> - The RAM disk ID.</p> </li> <li> <p> <code>launched-availability-zone</code> - The Availability Zone in which the request is launched.</p> </li> <li> <p> <code>launched-availability-zone-id</code> - The ID of the Availability Zone in which the request is launched.</p> </li> <li> <p> <code>network-interface.addresses.primary</code> - Indicates whether the IP address is the primary private IP address.</p> </li> <li> <p> <code>network-interface.delete-on-termination</code> - Indicates whether the network interface is deleted when the instance is terminated.</p> </li> <li> <p> <code>network-interface.description</code> - A description of the network interface.</p> </li> <li> <p> <code>network-interface.device-index</code> - The index of the device for the network interface attachment on the instance.</p> </li> <li> <p> <code>network-interface.group-id</code> - The ID of the security group associated with the network interface.</p> </li> <li> <p> <code>network-interface.network-interface-id</code> - The ID of the network interface.</p> </li> <li> <p> <code>network-interface.private-ip-address</code> - The primary private IP address of the network interface.</p> </li> <li> <p> <code>network-interface.subnet-id</code> - The ID of the subnet for the instance.</p> </li> <li> <p> <code>product-description</code> - The product description associated with the instance (<code>Linux/UNIX</code> | <code>Windows</code>).</p> </li> <li> <p> <code>spot-instance-request-id</code> - The Spot Instance request ID.</p> </li> <li> <p> <code>spot-price</code> - The maximum hourly price for any Spot Instance launched to fulfill the request.</p> </li> <li> <p> <code>state</code> - The state of the Spot Instance request (<code>open</code> | <code>active</code> | <code>closed</code> | <code>cancelled</code> | <code>failed</code>). Spot request status information can help you track your Amazon EC2 Spot Instance requests. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html\">Spot request status</a> in the <i>Amazon EC2 User Guide</i>.</p> </li> <li> <p> <code>status-code</code> - The short code describing the most recent evaluation of your Spot Instance request.</p> </li> <li> <p> <code>status-message</code> - The message explaining the status of the Spot Instance request.</p> </li> <li> <p> <code>tag:&lt;key&gt;</code> - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>type</code> - The type of Spot Instance request (<code>one-time</code> | <code>persistent</code>).</p> </li> <li> <p> <code>valid-from</code> - The start date of the request.</p> </li> <li> <p> <code>valid-until</code> - The end date of the request.</p> </li> </ul>",
           "locationName":"Filter"
         }
       },
@@ -25449,6 +28379,10 @@
     "DescribeSpotPriceHistoryRequest":{
       "type":"structure",
       "members":{
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>Filters the results by the specified ID of the Availability Zone.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -25476,12 +28410,12 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone for which prices should be returned.</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li> <li> <p> <code>product-description</code> - The product description for the Spot price (<code>Linux/UNIX</code> | <code>Red Hat Enterprise Linux</code> | <code>SUSE Linux</code> | <code>Windows</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Windows (Amazon VPC)</code>).</p> </li> <li> <p> <code>spot-price</code> - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).</p> </li> <li> <p> <code>timestamp</code> - The time stamp of the Spot price history, in UTC format (for example, <i>ddd MMM dd HH</i>:<i>mm</i>:<i>ss</i> UTC <i>YYYY</i>). You can use wildcards (<code>*</code> and <code>?</code>). Greater than or less than comparison is not supported.</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>availability-zone</code> - The Availability Zone for which prices should be returned.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone for which prices should be returned.</p> </li> <li> <p> <code>instance-type</code> - The type of instance (for example, <code>m3.medium</code>).</p> </li> <li> <p> <code>product-description</code> - The product description for the Spot price (<code>Linux/UNIX</code> | <code>Red Hat Enterprise Linux</code> | <code>SUSE Linux</code> | <code>Windows</code> | <code>Linux/UNIX (Amazon VPC)</code> | <code>Red Hat Enterprise Linux (Amazon VPC)</code> | <code>SUSE Linux (Amazon VPC)</code> | <code>Windows (Amazon VPC)</code>).</p> </li> <li> <p> <code>spot-price</code> - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).</p> </li> <li> <p> <code>timestamp</code> - The time stamp of the Spot price history, in UTC format (for example, <i>ddd MMM dd HH</i>:<i>mm</i>:<i>ss</i> UTC <i>YYYY</i>). You can use wildcards (<code>*</code> and <code>?</code>). Greater than or less than comparison is not supported.</p> </li> </ul>",
           "locationName":"Filter"
         },
         "AvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>Filters the results by the specified Availability Zone.</p>",
+          "documentation":"<p>Filters the results by the specified Availability Zone.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>",
           "locationName":"availabilityZone"
         },
         "MaxResults":{
@@ -26713,7 +29647,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>attachment.attach-time</code> - The time stamp when the attachment initiated.</p> </li> <li> <p> <code>attachment.delete-on-termination</code> - Whether the volume is deleted on instance termination.</p> </li> <li> <p> <code>attachment.device</code> - The device name specified in the block device mapping (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>attachment.instance-id</code> - The ID of the instance the volume is attached to.</p> </li> <li> <p> <code>attachment.status</code> - The attachment state (<code>attaching</code> | <code>attached</code> | <code>detaching</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone in which the volume was created.</p> </li> <li> <p> <code>create-time</code> - The time stamp when the volume was created.</p> </li> <li> <p> <code>encrypted</code> - Indicates whether the volume is encrypted (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>fast-restored</code> - Indicates whether the volume was created from a snapshot that is enabled for fast snapshot restore (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>multi-attach-enabled</code> - Indicates whether the volume is enabled for Multi-Attach (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed volume.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the volume. Only valid for managed volumes, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>size</code> - The size of the volume, in GiB.</p> </li> <li> <p> <code>snapshot-id</code> - The snapshot from which the volume was created.</p> </li> <li> <p> <code>status</code> - The state of the volume (<code>creating</code> | <code>available</code> | <code>in-use</code> | <code>deleting</code> | <code>deleted</code> | <code>error</code>).</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>volume-id</code> - The volume ID.</p> </li> <li> <p> <code>volume-type</code> - The Amazon EBS volume type (<code>gp2</code> | <code>gp3</code> | <code>io1</code> | <code>io2</code> | <code>st1</code> | <code>sc1</code>| <code>standard</code>)</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>attachment.attach-time</code> - The time stamp when the attachment initiated.</p> </li> <li> <p> <code>attachment.delete-on-termination</code> - Whether the volume is deleted on instance termination.</p> </li> <li> <p> <code>attachment.device</code> - The device name specified in the block device mapping (for example, <code>/dev/sda1</code>).</p> </li> <li> <p> <code>attachment.instance-id</code> - The ID of the instance the volume is attached to.</p> </li> <li> <p> <code>attachment.status</code> - The attachment state (<code>attaching</code> | <code>attached</code> | <code>detaching</code>).</p> </li> <li> <p> <code>availability-zone</code> - The Availability Zone in which the volume was created.</p> </li> <li> <p> <code>availability-zone-id</code> - The ID of the Availability Zone in which the volume was created.</p> </li> <li> <p> <code>create-time</code> - The time stamp when the volume was created.</p> </li> <li> <p> <code>encrypted</code> - Indicates whether the volume is encrypted (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>fast-restored</code> - Indicates whether the volume was created from a snapshot that is enabled for fast snapshot restore (<code>true</code> | <code>false</code>).</p> </li> <li> <p> <code>multi-attach-enabled</code> - Indicates whether the volume is enabled for Multi-Attach (<code>true</code> | <code>false</code>)</p> </li> <li> <p> <code>operator.managed</code> - A Boolean that indicates whether this is a managed volume.</p> </li> <li> <p> <code>operator.principal</code> - The principal that manages the volume. Only valid for managed volumes, where <code>managed</code> is <code>true</code>.</p> </li> <li> <p> <code>size</code> - The size of the volume, in GiB.</p> </li> <li> <p> <code>snapshot-id</code> - The snapshot from which the volume was created.</p> </li> <li> <p> <code>status</code> - The state of the volume (<code>creating</code> | <code>available</code> | <code>in-use</code> | <code>deleting</code> | <code>deleted</code> | <code>error</code>).</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>volume-id</code> - The volume ID.</p> </li> <li> <p> <code>volume-type</code> - The Amazon EBS volume type (<code>gp2</code> | <code>gp3</code> | <code>io1</code> | <code>io2</code> | <code>st1</code> | <code>sc1</code>| <code>standard</code>)</p> </li> </ul>",
           "locationName":"Filter"
         },
         "NextToken":{
@@ -26944,7 +29878,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>vpc-endpoint-id</code> - The ID of the VPC endpoint.</p> </li> <li> <p> <code>associated-resource-accessibility</code> - The association state. When the state is <code>accessible</code>, it returns <code>AVAILABLE</code>. When the state is <code>inaccessible</code>, it returns <code>PENDING</code> or <code>FAILED</code>.</p> </li> <li> <p> <code>association-id</code> - The ID of the VPC endpoint association.</p> </li> <li> <p> <code>associated-resource-id</code> - The ID of the associated resource configuration.</p> </li> <li> <p> <code>service-network-arn</code> - The Amazon Resource Name (ARN) of the associated service network. Only VPC endpoints of type service network will be returned.</p> </li> <li> <p> <code>resource-configuration-group-arn</code> - The Amazon Resource Name (ARN) of the resource configuration of type GROUP.</p> </li> <li> <p> <code>service-network-resource-association-id</code> - The ID of the association.</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>vpc-endpoint-id</code> - The ID of the VPC endpoint.</p> </li> <li> <p> <code>associated-resource-accessibility</code> - The association state. When the state is <code>accessible</code>, it returns <code>AVAILABLE</code>. When the state is <code>inaccessible</code>, it returns <code>PENDING</code> or <code>FAILED</code>.</p> </li> <li> <p> <code>association-id</code> - The ID of the VPC endpoint association.</p> </li> <li> <p> <code>associated-resource-id</code> - The ID of the associated resource configuration.</p> </li> <li> <p> <code>service-network-arn</code> - The Amazon Resource Name (ARN) of the associated service network. Only VPC endpoints of type service network will be returned.</p> </li> <li> <p> <code>resource-configuration-group-arn</code> - The Amazon Resource Name (ARN) of the resource configuration of type GROUP.</p> </li> </ul>",
           "locationName":"Filter"
         },
         "MaxResults":{
@@ -27200,7 +30134,7 @@
         },
         "Filters":{
           "shape":"FilterList",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li> <li> <p> <code>service-name</code> - The name of the service.</p> </li> <li> <p> <code>service-region</code> - The Region of the service.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC in which the endpoint resides.</p> </li> <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li> <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li> <li> <p> <code>vpc-endpoint-type</code> - The type of VPC endpoint (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code>).</p> </li> </ul>",
+          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>ip-address-type</code> - The IP address type (<code>ipv4</code> | <code>ipv6</code>).</p> </li> <li> <p> <code>service-name</code> - The name of the service.</p> </li> <li> <p> <code>service-region</code> - The Region of the service.</p> </li> <li> <p> <code>tag</code>:&lt;key&gt; - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p> </li> <li> <p> <code>tag-key</code> - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value.</p> </li> <li> <p> <code>vpc-id</code> - The ID of the VPC in which the endpoint resides.</p> </li> <li> <p> <code>vpc-endpoint-id</code> - The ID of the endpoint.</p> </li> <li> <p> <code>vpc-endpoint-state</code> - The state of the endpoint (<code>pendingAcceptance</code> | <code>pending</code> | <code>available</code> | <code>deleting</code> | <code>deleted</code> | <code>rejected</code> | <code>failed</code>).</p> </li> <li> <p> <code>vpc-endpoint-type</code> - The type of VPC endpoint (<code>Interface</code> | <code>Gateway</code> | <code>GatewayLoadBalancer</code> | <code>Resource</code> | <code>ServiceNetwork</code>).</p> </li> </ul>",
           "locationName":"Filter"
         },
         "MaxResults":{
@@ -27714,6 +30648,25 @@
         "locationName":"item"
       }
     },
+    "DimensionCondition":{
+      "type":"structure",
+      "members":{
+        "Dimension":{
+          "shape":"FilterByDimension",
+          "documentation":"<p> The name of the dimension to filter by. </p>"
+        },
+        "Comparison":{
+          "shape":"Comparison",
+          "documentation":"<p> The comparison operator to use for the filter. </p>"
+        },
+        "Values":{
+          "shape":"ConditionValueList",
+          "documentation":"<p> The list of values to match against the specified dimension. For 'equals' comparison, only the first value is used. For 'in' comparison, any matching value will satisfy the condition. </p>",
+          "locationName":"Value"
+        }
+      },
+      "documentation":"<p> Specifies a condition for filtering capacity data based on dimension values. Used to create precise filters for metric queries and dimension lookups. </p>"
+    },
     "DirectoryServiceAuthentication":{
       "type":"structure",
       "members":{
@@ -27813,6 +30766,35 @@
         }
       }
     },
+    "DisableCapacityManagerRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p> Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. </p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "DisableCapacityManagerResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerStatus":{
+          "shape":"CapacityManagerStatus",
+          "documentation":"<p> The current status of Capacity Manager after the disable operation. </p>",
+          "locationName":"capacityManagerStatus"
+        },
+        "OrganizationsAccess":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates whether Organizations access is enabled. This will be <code>false</code> after disabling Capacity Manager. </p>",
+          "locationName":"organizationsAccess"
+        }
+      }
+    },
     "DisableEbsEncryptionByDefaultRequest":{
       "type":"structure",
       "members":{
@@ -27947,6 +30929,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "Error":{
           "shape":"DisableFastSnapshotRestoreStateError",
           "documentation":"<p>The error.</p>",
@@ -27975,6 +30962,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "State":{
           "shape":"FastSnapshotRestoreStateCode",
           "documentation":"<p>The state of fast snapshot restores for the snapshot.</p>",
@@ -28032,16 +31024,18 @@
     },
     "DisableFastSnapshotRestoresRequest":{
       "type":"structure",
-      "required":[
-        "AvailabilityZones",
-        "SourceSnapshotIds"
-      ],
+      "required":["SourceSnapshotIds"],
       "members":{
         "AvailabilityZones":{
           "shape":"AvailabilityZoneStringList",
-          "documentation":"<p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>",
+          "documentation":"<p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified in the request, but not both.</p>",
           "locationName":"AvailabilityZone"
         },
+        "AvailabilityZoneIds":{
+          "shape":"AvailabilityZoneIdStringList",
+          "documentation":"<p>One or more Availability Zone IDs. For example, <code>use2-az1</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified in the request, but not both.</p>",
+          "locationName":"AvailabilityZoneId"
+        },
         "SourceSnapshotIds":{
           "shape":"SnapshotIdStringList",
           "documentation":"<p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>.</p>",
@@ -28183,6 +31177,37 @@
         }
       }
     },
+    "DisableRouteServerPropagationRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerId",
+        "RouteTableId"
+      ],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to disable propagation.</p>"
+        },
+        "RouteTableId":{
+          "shape":"RouteTableId",
+          "documentation":"<p>The ID of the route table for which to disable route server propagation.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DisableRouteServerPropagationResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPropagation":{
+          "shape":"RouteServerPropagation",
+          "documentation":"<p>Information about the disabled route server propagation.</p>",
+          "locationName":"routeServerPropagation"
+        }
+      }
+    },
     "DisableSerialConsoleAccessRequest":{
       "type":"structure",
       "members":{
@@ -28583,6 +31608,37 @@
         }
       }
     },
+    "DisassociateRouteServerRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerId",
+        "VpcId"
+      ],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server to disassociate.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC to disassociate from the route server.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "DisassociateRouteServerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerAssociation":{
+          "shape":"RouteServerAssociation",
+          "documentation":"<p>Information about the disassociated route server.</p>",
+          "locationName":"routeServerAssociation"
+        }
+      }
+    },
     "DisassociateRouteTableRequest":{
       "type":"structure",
       "required":["AssociationId"],
@@ -28779,7 +31835,7 @@
       "members":{
         "Return":{
           "shape":"Boolean",
-          "documentation":"<p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>",
+          "documentation":"<p>Is <code>true</code> if the request succeeds and an error otherwise.</p>",
           "locationName":"return"
         },
         "ClientToken":{
@@ -28998,6 +32054,16 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to enable private DNS only for inbound endpoints.</p>",
           "locationName":"privateDnsOnlyForInboundResolverEndpoint"
+        },
+        "PrivateDnsPreference":{
+          "shape":"String",
+          "documentation":"<p> The preference for which private domains have a private hosted zone created for and associated with the specified VPC. Only supported when private DNS is enabled and when the VPC endpoint type is ServiceNetwork or Resource. </p> <ul> <li> <p> <code>ALL_DOMAINS</code> - VPC Lattice provisions private hosted zones for all custom domain names.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone only if custom domain name has been verified by the provider.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS</code> - VPC Lattice provisions private hosted zones for all verified custom domain names and other domain names that the resource consumer specifies. The resource consumer specifies the domain names in the PrivateDnsSpecifiedDomains parameter.</p> </li> <li> <p> <code>SPECIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone for domain names specified by the resource consumer. The resource consumer specifies the domain names in the PrivateDnsSpecifiedDomains parameter.</p> </li> </ul>",
+          "locationName":"privateDnsPreference"
+        },
+        "PrivateDnsSpecifiedDomains":{
+          "shape":"PrivateDnsSpecifiedDomainSet",
+          "documentation":"<p> Indicates which of the private domains to create private hosted zones for and associate with the specified VPC. Only supported when private DNS is enabled and the private DNS preference is <code>VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS</code> or <code>SPECIFIED_DOMAINS_ONLY</code>. </p>",
+          "locationName":"privateDnsSpecifiedDomainSet"
         }
       },
       "documentation":"<p>Describes the DNS options for an endpoint.</p>"
@@ -29012,6 +32078,15 @@
         "PrivateDnsOnlyForInboundResolverEndpoint":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to enable private DNS only for inbound endpoints. This option is available only for services that support both gateway and interface endpoints. It routes traffic that originates from the VPC to the gateway endpoint and traffic that originates from on-premises to the interface endpoint.</p>"
+        },
+        "PrivateDnsPreference":{
+          "shape":"String",
+          "documentation":"<p> The preference for which private domains have a private hosted zone created for and associated with the specified VPC. Only supported when private DNS is enabled and when the VPC endpoint type is ServiceNetwork or Resource. </p> <ul> <li> <p> <code>ALL_DOMAINS</code> - VPC Lattice provisions private hosted zones for all custom domain names.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone only if custom domain name has been verified by the provider.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS</code> - VPC Lattice provisions private hosted zones for all verified custom domain names and other domain names that the resource consumer specifies. The resource consumer specifies the domain names in the PrivateDnsSpecifiedDomains parameter.</p> </li> <li> <p> <code>SPECIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone for domain names specified by the resource consumer. The resource consumer specifies the domain names in the PrivateDnsSpecifiedDomains parameter.</p> </li> </ul>"
+        },
+        "PrivateDnsSpecifiedDomains":{
+          "shape":"PrivateDnsSpecifiedDomainSet",
+          "documentation":"<p> Indicates which of the private domains to create private hosted zones for and associate with the specified VPC. Only supported when private DNS is enabled and the private DNS preference is verified-domains-and-specified-domains or specified-domains-only. </p>",
+          "locationName":"PrivateDnsSpecifiedDomain"
         }
       },
       "documentation":"<p>Describes the DNS options for an endpoint.</p>"
@@ -29081,7 +32156,7 @@
         },
         "Iops":{
           "shape":"Integer",
-          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 16,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS.</p>",
+          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 80,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS.</p>",
           "locationName":"iops"
         },
         "SnapshotId":{
@@ -29091,7 +32166,7 @@
         },
         "VolumeSize":{
           "shape":"Integer",
-          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p> <p>The following are the supported sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code> and <code>gp3</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>",
+          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p> <p>The following are the supported sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>gp3</code>: 1 - 65,536 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>",
           "locationName":"volumeSize"
         },
         "VolumeType":{
@@ -29106,7 +32181,7 @@
         },
         "Throughput":{
           "shape":"Integer",
-          "documentation":"<p>The throughput that the volume supports, in MiB/s.</p> <p>This parameter is valid only for <code>gp3</code> volumes.</p> <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>",
+          "documentation":"<p>The throughput that the volume supports, in MiB/s.</p> <p>This parameter is valid only for <code>gp3</code> volumes.</p> <p>Valid Range: Minimum value of 125. Maximum value of 2,000.</p>",
           "locationName":"throughput"
         },
         "OutpostArn":{
@@ -29114,10 +32189,69 @@
           "documentation":"<p>The ARN of the Outpost on which the snapshot is stored.</p> <p>This parameter is not supported when using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a>.</p>",
           "locationName":"outpostArn"
         },
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The Availability Zone where the EBS volume will be created (for example, <code>us-east-1a</code>).</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both. If neither is specified, Amazon EC2 automatically selects an Availability Zone within the Region.</p> <p>This parameter is not supported when using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\">CreateFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html\">DescribeImages</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html\">RequestSpotFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html\">RequestSpotInstances</a>, and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances</a>.</p>",
+          "locationName":"availabilityZone"
+        },
         "Encrypted":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the encryption state of an EBS volume is changed while being restored from a backing snapshot. The effect of setting the encryption state to <code>true</code> depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html#encryption-parameters\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p> <p>In no case can you remove encryption from an encrypted volume.</p> <p>Encrypted volumes can only be attached to instances that support Amazon EBS encryption. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances\">Supported instance types</a>.</p> <p>This parameter is not returned by <a>DescribeImageAttribute</a>.</p> <p>For <a>CreateImage</a> and <a>RegisterImage</a>, whether you can include this parameter, and the allowed values differ depending on the type of block device mapping you are creating.</p> <ul> <li> <p>If you are creating a block device mapping for a <b>new (empty) volume</b>, you can include this parameter, and specify either <code>true</code> for an encrypted volume, or <code>false</code> for an unencrypted volume. If you omit this parameter, it defaults to <code>false</code> (unencrypted).</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing encrypted or unencrypted snapshot</b>, you must omit this parameter. If you include this parameter, the request will fail, regardless of the value that you specify.</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing unencrypted volume</b>, you can include this parameter, but you must specify <code>false</code>. If you specify <code>true</code>, the request will fail. In this case, we recommend that you omit the parameter.</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing encrypted volume</b>, you can include this parameter, and specify either <code>true</code> or <code>false</code>. However, if you specify <code>false</code>, the parameter is ignored and the block device mapping is always encrypted. In this case, we recommend that you omit the parameter.</p> </li> </ul>",
           "locationName":"encrypted"
+        },
+        "VolumeInitializationRate":{
+          "shape":"Integer",
+          "documentation":"<p>Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as <i>volume initialization</i>. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\">Initialize Amazon EBS volumes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>This parameter is supported only for volumes created from snapshots. Omit this parameter if:</p> <ul> <li> <p>You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.</p> <note> <p>If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.</p> </note> </li> <li> <p>You want to create a volume that is initialized at the default rate.</p> </li> </ul> <p>This parameter is not supported when using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html\">DescribeImages</a>.</p> <p>Valid range: 100 - 300 MiB/s</p>"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone where the EBS volume will be created (for example, <code>use1-az1</code>).</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both. If neither is specified, Amazon EC2 automatically selects an Availability Zone within the Region.</p> <p>This parameter is not supported when using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\">CreateFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html\">CreateImage</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html\">DescribeImages</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html\">RequestSpotFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html\">RequestSpotInstances</a>, and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances</a>.</p>"
+        }
+      },
+      "documentation":"<p>Describes a block device for an EBS volume.</p>"
+    },
+    "EbsBlockDeviceResponse":{
+      "type":"structure",
+      "members":{
+        "Encrypted":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the volume is encrypted.</p>",
+          "locationName":"encrypted"
+        },
+        "DeleteOnTermination":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the volume is deleted on instance termination.</p>",
+          "locationName":"deleteOnTermination"
+        },
+        "Iops":{
+          "shape":"Integer",
+          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>",
+          "locationName":"iops"
+        },
+        "Throughput":{
+          "shape":"Integer",
+          "documentation":"<p>The throughput that the volume supports, in MiB/s.</p>",
+          "locationName":"throughput"
+        },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>Identifier (key ID, key alias, key ARN, or alias ARN) of the customer managed KMS key to use for EBS encryption.</p>",
+          "locationName":"kmsKeyId"
+        },
+        "SnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>The ID of the snapshot.</p>",
+          "locationName":"snapshotId"
+        },
+        "VolumeSize":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the volume, in GiBs.</p>",
+          "locationName":"volumeSize"
+        },
+        "VolumeType":{
+          "shape":"VolumeType",
+          "documentation":"<p>The volume type. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html\">Amazon EBS volume types</a> in the <i>Amazon EBS User Guide</i>.</p>",
+          "locationName":"volumeType"
         }
       },
       "documentation":"<p>Describes a block device for an EBS volume.</p>"
@@ -29151,6 +32285,16 @@
           "shape":"EbsNvmeSupport",
           "documentation":"<p>Indicates whether non-volatile memory express (NVMe) is supported.</p>",
           "locationName":"nvmeSupport"
+        },
+        "MaximumEbsAttachments":{
+          "shape":"MaximumEbsAttachments",
+          "documentation":"<p>Indicates the maximum number of Amazon EBS volumes that can be attached to the instance type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html\">Amazon EBS volume limits for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"maximumEbsAttachments"
+        },
+        "AttachmentLimitType":{
+          "shape":"AttachmentLimitType",
+          "documentation":"<p>Indicates whether the instance type features a shared or dedicated Amazon EBS volume attachment limit. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html\">Amazon EBS volume limits for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"attachmentLimitType"
         }
       },
       "documentation":"<p>Describes the Amazon EBS features supported by the instance type.</p>"
@@ -29180,12 +32324,12 @@
         },
         "AssociatedResource":{
           "shape":"String",
-          "documentation":"<p>The ARN of the Amazon ECS or Fargate task to which the volume is attached.</p>",
+          "documentation":"<p>The ARN of the Amazon Web Services-managed resource to which the volume is attached.</p>",
           "locationName":"associatedResource"
         },
         "VolumeOwnerId":{
           "shape":"String",
-          "documentation":"<p>The ID of the Amazon Web Services account that owns the volume.</p> <p>This parameter is returned only for volumes that are attached to Fargate tasks.</p>",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the volume.</p> <p>This parameter is returned only for volumes that are attached to Amazon Web Services-managed resources.</p>",
           "locationName":"volumeOwnerId"
         },
         "Operator":{
@@ -29343,7 +32487,7 @@
         },
         "FipsDnsName":{
           "shape":"String",
-          "documentation":"<p/>",
+          "documentation":"<p>The Federal Information Processing Standards (FIPS) compliant DNS name of the EC2 Instance Connect Endpoint.</p>",
           "locationName":"fipsDnsName"
         },
         "NetworkInterfaceIds":{
@@ -29373,7 +32517,7 @@
         },
         "PreserveClientIp":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether your client's IP address is preserved as the source. The value is <code>true</code> or <code>false</code>.</p> <ul> <li> <p>If <code>true</code>, your client's IP address is used when you connect to a resource.</p> </li> <li> <p>If <code>false</code>, the elastic network interface IP address is used when you connect to a resource.</p> </li> </ul> <p>Default: <code>true</code> </p>",
+          "documentation":"<p>Indicates whether your client's IP address is preserved as the source when you connect to a resource. The following are the possible values.</p> <ul> <li> <p> <code>true</code> - Use the IP address of the client. Your instance must have an IPv4 address.</p> </li> <li> <p> <code>false</code> - Use the IP address of the network interface.</p> </li> </ul> <p>Default: <code>false</code> </p>",
           "locationName":"preserveClientIp"
         },
         "SecurityGroupIds":{
@@ -29385,9 +32529,19 @@
           "shape":"TagList",
           "documentation":"<p>The tags assigned to the EC2 Instance Connect Endpoint.</p>",
           "locationName":"tagSet"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The IP address type of the endpoint.</p>",
+          "locationName":"ipAddressType"
+        },
+        "PublicDnsNames":{
+          "shape":"InstanceConnectEndpointPublicDnsNames",
+          "documentation":"<p>The public DNS names of the endpoint.</p>",
+          "locationName":"publicDnsNames"
         }
       },
-      "documentation":"<p>The EC2 Instance Connect Endpoint.</p>"
+      "documentation":"<p>Describes an EC2 Instance Connect Endpoint.</p>"
     },
     "Ec2InstanceConnectEndpointState":{
       "type":"string",
@@ -29397,7 +32551,10 @@
         "create-failed",
         "delete-in-progress",
         "delete-complete",
-        "delete-failed"
+        "delete-failed",
+        "update-in-progress",
+        "update-complete",
+        "update-failed"
       ]
     },
     "EfaInfo":{
@@ -29556,11 +32713,11 @@
       "members":{
         "Type":{
           "shape":"String",
-          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances.</p> </note>",
+          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>",
           "locationName":"type"
         }
       },
-      "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances.</p> </note>"
+      "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>"
     },
     "ElasticGpuSpecificationResponseList":{
       "type":"list",
@@ -29707,11 +32864,11 @@
       "members":{
         "EnaSrdEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether ENA Express is enabled for the network interface when you launch an instance from your launch template.</p>"
+          "documentation":"<p>Specifies whether ENA Express is enabled for the network interface when you launch an instance.</p>"
         },
         "EnaSrdUdpSpecification":{
           "shape":"EnaSrdUdpSpecificationRequest",
-          "documentation":"<p>Contains ENA Express settings for UDP network traffic in your launch template.</p>"
+          "documentation":"<p>Contains ENA Express settings for UDP network traffic for the network interface attached to the instance.</p>"
         }
       },
       "documentation":"<p>Launch instances with ENA Express settings configured from your launch template.</p>"
@@ -29732,7 +32889,7 @@
       "members":{
         "EnaSrdUdpEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether UDP traffic uses ENA Express for your instance. To ensure that UDP traffic can use ENA Express when you launch an instance, you must also set <b>EnaSrdEnabled</b> in the <b>EnaSrdSpecificationRequest</b> to <code>true</code> in your launch template.</p>"
+          "documentation":"<p>Indicates whether UDP traffic uses ENA Express for your instance. To ensure that UDP traffic can use ENA Express when you launch an instance, you must also set <b>EnaSrdEnabled</b> in the <b>EnaSrdSpecificationRequest</b> to <code>true</code>.</p>"
         }
       },
       "documentation":"<p>Configures ENA Express for UDP network traffic from your launch template.</p>"
@@ -29835,6 +32992,39 @@
         }
       }
     },
+    "EnableCapacityManagerRequest":{
+      "type":"structure",
+      "members":{
+        "OrganizationsAccess":{
+          "shape":"Boolean",
+          "documentation":"<p> Specifies whether to enable cross-account access for Amazon Web Services Organizations. When enabled, Capacity Manager can aggregate data from all accounts in your organization. Default is false. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p> Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. </p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "EnableCapacityManagerResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerStatus":{
+          "shape":"CapacityManagerStatus",
+          "documentation":"<p> The current status of Capacity Manager after the enable operation. </p>",
+          "locationName":"capacityManagerStatus"
+        },
+        "OrganizationsAccess":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates whether Organizations access is enabled for cross-account data aggregation. </p>",
+          "locationName":"organizationsAccess"
+        }
+      }
+    },
     "EnableEbsEncryptionByDefaultRequest":{
       "type":"structure",
       "members":{
@@ -29981,6 +33171,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "Error":{
           "shape":"EnableFastSnapshotRestoreStateError",
           "documentation":"<p>The error.</p>",
@@ -30009,6 +33204,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "State":{
           "shape":"FastSnapshotRestoreStateCode",
           "documentation":"<p>The state of fast snapshot restores.</p>",
@@ -30066,16 +33266,18 @@
     },
     "EnableFastSnapshotRestoresRequest":{
       "type":"structure",
-      "required":[
-        "AvailabilityZones",
-        "SourceSnapshotIds"
-      ],
+      "required":["SourceSnapshotIds"],
       "members":{
         "AvailabilityZones":{
           "shape":"AvailabilityZoneStringList",
-          "documentation":"<p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p>",
+          "documentation":"<p>One or more Availability Zones. For example, <code>us-east-2a</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified in the request, but not both.</p>",
           "locationName":"AvailabilityZone"
         },
+        "AvailabilityZoneIds":{
+          "shape":"AvailabilityZoneIdStringList",
+          "documentation":"<p>One or more Availability Zone IDs. For example, <code>use2-az1</code>.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified in the request, but not both.</p>",
+          "locationName":"AvailabilityZoneId"
+        },
         "SourceSnapshotIds":{
           "shape":"SnapshotIdStringList",
           "documentation":"<p>The IDs of one or more snapshots. For example, <code>snap-1234567890abcdef0</code>. You can specify a snapshot that was shared with you from another Amazon Web Services account.</p>",
@@ -30252,6 +33454,37 @@
         }
       }
     },
+    "EnableRouteServerPropagationRequest":{
+      "type":"structure",
+      "required":[
+        "RouteServerId",
+        "RouteTableId"
+      ],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to enable propagation.</p>"
+        },
+        "RouteTableId":{
+          "shape":"RouteTableId",
+          "documentation":"<p>The ID of the route table to which route server will propagate routes.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "EnableRouteServerPropagationResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPropagation":{
+          "shape":"RouteServerPropagation",
+          "documentation":"<p>Information about the enabled route server propagation.</p>",
+          "locationName":"routeServerPropagation"
+        }
+      }
+    },
     "EnableSerialConsoleAccessRequest":{
       "type":"structure",
       "members":{
@@ -30439,6 +33672,14 @@
         "limited"
       ]
     },
+    "EndpointIpAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6",
+        "dual-stack"
+      ]
+    },
     "EndpointSet":{
       "type":"list",
       "member":{
@@ -30481,7 +33722,7 @@
         },
         "EventSubType":{
           "shape":"String",
-          "documentation":"<p>The event.</p> <p> <code>error</code> events:</p> <ul> <li> <p> <code>iamFleetRoleInvalid</code> - The EC2 Fleet or Spot Fleet does not have the required permissions either to launch or terminate an instance.</p> </li> <li> <p> <code>allLaunchSpecsTemporarilyBlacklisted</code> - None of the configurations are valid, and several attempts to launch instances have failed. For more information, see the description of the event.</p> </li> <li> <p> <code>spotInstanceCountLimitExceeded</code> - You've reached the limit on the number of Spot Instances that you can launch.</p> </li> <li> <p> <code>spotFleetRequestConfigurationInvalid</code> - The configuration is not valid. For more information, see the description of the event.</p> </li> </ul> <p> <code>fleetRequestChange</code> events:</p> <ul> <li> <p> <code>active</code> - The EC2 Fleet or Spot Fleet request has been validated and Amazon EC2 is attempting to maintain the target number of running instances.</p> </li> <li> <p> <code>deleted</code> (EC2 Fleet) / <code>cancelled</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and has no running instances. The EC2 Fleet or Spot Fleet will be deleted two days after its instances are terminated.</p> </li> <li> <p> <code>deleted_running</code> (EC2 Fleet) / <code>cancelled_running</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and does not launch additional instances. Its existing instances continue to run until they are interrupted or terminated. The request remains in this state until all instances are interrupted or terminated.</p> </li> <li> <p> <code>deleted_terminating</code> (EC2 Fleet) / <code>cancelled_terminating</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and its instances are terminating. The request remains in this state until all instances are terminated.</p> </li> <li> <p> <code>expired</code> - The EC2 Fleet or Spot Fleet request has expired. If the request was created with <code>TerminateInstancesWithExpiration</code> set, a subsequent <code>terminated</code> event indicates that the instances are terminated.</p> </li> <li> <p> <code>modify_in_progress</code> - The EC2 Fleet or Spot Fleet request is being modified. The request remains in this state until the modification is fully processed.</p> </li> <li> <p> <code>modify_succeeded</code> - The EC2 Fleet or Spot Fleet request was modified.</p> </li> <li> <p> <code>submitted</code> - The EC2 Fleet or Spot Fleet request is being evaluated and Amazon EC2 is preparing to launch the target number of instances.</p> </li> <li> <p> <code>progress</code> - The EC2 Fleet or Spot Fleet request is in the process of being fulfilled.</p> </li> </ul> <p> <code>instanceChange</code> events:</p> <ul> <li> <p> <code>launched</code> - A new instance was launched.</p> </li> <li> <p> <code>terminated</code> - An instance was terminated by the user.</p> </li> <li> <p> <code>termination_notified</code> - An instance termination notification was sent when a Spot Instance was terminated by Amazon EC2 during scale-down, when the target capacity of the fleet was modified down, for example, from a target capacity of 4 to a target capacity of 3.</p> </li> </ul> <p> <code>Information</code> events:</p> <ul> <li> <p> <code>fleetProgressHalted</code> - The price in every launch specification is not valid because it is below the Spot price (all the launch specifications have produced <code>launchSpecUnusable</code> events). A launch specification might become valid if the Spot price changes.</p> </li> <li> <p> <code>launchSpecTemporarilyBlacklisted</code> - The configuration is not valid and several attempts to launch instances have failed. For more information, see the description of the event.</p> </li> <li> <p> <code>launchSpecUnusable</code> - The price in a launch specification is not valid because it is below the Spot price.</p> </li> <li> <p> <code>registerWithLoadBalancersFailed</code> - An attempt to register instances with load balancers failed. For more information, see the description of the event.</p> </li> </ul>",
+          "documentation":"<p>The event.</p> <p> <code>error</code> events:</p> <ul> <li> <p> <code>iamFleetRoleInvalid</code> - The EC2 Fleet or Spot Fleet does not have the required permissions either to launch or terminate an instance.</p> </li> <li> <p> <code>allLaunchSpecsTemporarilyBlacklisted</code> - None of the configurations are valid, and several attempts to launch instances have failed. For more information, see the description of the event.</p> </li> <li> <p> <code>spotInstanceCountLimitExceeded</code> - You've reached the limit on the number of Spot Instances that you can launch.</p> </li> <li> <p> <code>spotFleetRequestConfigurationInvalid</code> - The configuration is not valid. For more information, see the description of the event.</p> </li> </ul> <p> <code>fleetRequestChange</code> events:</p> <ul> <li> <p> <code>active</code> - The EC2 Fleet or Spot Fleet request has been validated and Amazon EC2 is attempting to maintain the target number of running instances.</p> </li> <li> <p> <code>deleted</code> (EC2 Fleet) / <code>cancelled</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and has no running instances. The EC2 Fleet or Spot Fleet will be deleted two days after its instances are terminated.</p> </li> <li> <p> <code>deleted_running</code> (EC2 Fleet) / <code>cancelled_running</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and does not launch additional instances. Its existing instances continue to run until they are interrupted or terminated. The request remains in this state until all instances are interrupted or terminated.</p> </li> <li> <p> <code>deleted_terminating</code> (EC2 Fleet) / <code>cancelled_terminating</code> (Spot Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is canceled and its instances are terminating. The request remains in this state until all instances are terminated.</p> </li> <li> <p> <code>expired</code> - The EC2 Fleet or Spot Fleet request has expired. If the request was created with <code>TerminateInstancesWithExpiration</code> set, a subsequent <code>terminated</code> event indicates that the instances are terminated.</p> </li> <li> <p> <code>modify_in_progress</code> - The EC2 Fleet or Spot Fleet request is being modified. The request remains in this state until the modification is fully processed.</p> </li> <li> <p> <code>modify_succeeded</code> - The EC2 Fleet or Spot Fleet request was modified.</p> </li> <li> <p> <code>submitted</code> - The EC2 Fleet or Spot Fleet request is being evaluated and Amazon EC2 is preparing to launch the target number of instances.</p> </li> <li> <p> <code>progress</code> - The EC2 Fleet or Spot Fleet request is in the process of being fulfilled.</p> </li> </ul> <p> <code>instanceChange</code> events:</p> <ul> <li> <p> <code>launched</code> - A new instance was launched.</p> </li> <li> <p> <code>terminated</code> - An instance was terminated by the user.</p> </li> <li> <p> <code>termination_notified</code> - An instance termination notification was sent when a Spot Instance was terminated by Amazon EC2 during scale-down, when the target capacity of the fleet was modified down, for example, from a target capacity of 4 to a target capacity of 3.</p> </li> </ul> <p> <code>Information</code> events:</p> <ul> <li> <p> <code>fleetProgressHalted</code> - The price in every launch specification is not valid because it is below the Spot price (all the launch specifications have produced <code>launchSpecUnusable</code> events). A launch specification might become valid if the Spot price changes.</p> </li> <li> <p> <code>launchSpecTemporarilyBlacklisted</code> - The configuration is not valid and several attempts to launch instances have failed. For more information, see the description of the event.</p> </li> <li> <p> <code>launchSpecUnusable</code> - The price specified in a launch specification is not valid because it is below the Spot price for the requested Spot pools.</p> <p>Note: Even if a fleet with the <code>maintain</code> request type is in the process of being canceled, it may still publish a <code>launchSpecUnusable</code> event. This does not mean that the canceled fleet is attempting to launch a new instance.</p> </li> <li> <p> <code>registerWithLoadBalancersFailed</code> - An attempt to register instances with load balancers failed. For more information, see the description of the event.</p> </li> </ul>",
           "locationName":"eventSubType"
         },
         "InstanceId":{
@@ -30563,6 +33804,11 @@
           "documentation":"<p>The Availability Zones.</p>",
           "locationName":"availabilityZoneSet"
         },
+        "AvailabilityZoneIds":{
+          "shape":"ValueStringList",
+          "documentation":"<p>The IDs of the Availability Zones.</p>",
+          "locationName":"availabilityZoneIdSet"
+        },
         "Cidrs":{
           "shape":"ValueStringList",
           "documentation":"<p>The CIDR ranges.</p>",
@@ -31263,6 +34509,20 @@
       }
     },
     "ExportVmTaskId":{"type":"string"},
+    "ExternalAuthorityConfiguration":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"IpamScopeExternalAuthorityType",
+          "documentation":"<p>The type of external authority.</p>"
+        },
+        "ExternalResourceIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the external resource managing this scope. For Infoblox integrations, this is the Infoblox resource identifier in the format <code>&lt;version&gt;.identity.account.&lt;entity_realm&gt;.&lt;entity_id&gt;</code>.</p>"
+        }
+      },
+      "documentation":"<p>The configuration that links an Amazon VPC IPAM scope to an external authority system. It specifies the type of external system and the external resource identifier that identifies your account or instance in that system.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/integrate-infoblox-ipam.html\">Integrate VPC IPAM with Infoblox infrastructure</a> in the <i>Amazon VPC IPAM User Guide</i>..</p>"
+    },
     "FailedCapacityReservationFleetCancellationResult":{
       "type":"structure",
       "members":{
@@ -31447,6 +34707,28 @@
       },
       "documentation":"<p>A filter name and value pair that is used to return a more specific list of results from a describe operation. Filters can be used to match a set of resources by specific criteria, such as tags, attributes, or IDs.</p> <p>If you specify multiple filters, the filters are joined with an <code>AND</code>, and the request returns only results that match all of the specified filters.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Filtering.html#Filtering_Resources_CLI\">List and filter using the CLI and API</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
+    "FilterByDimension":{
+      "type":"string",
+      "enum":[
+        "resource-region",
+        "availability-zone-id",
+        "account-id",
+        "instance-family",
+        "instance-type",
+        "instance-platform",
+        "reservation-arn",
+        "reservation-id",
+        "reservation-type",
+        "reservation-create-timestamp",
+        "reservation-start-timestamp",
+        "reservation-end-timestamp",
+        "reservation-end-date-type",
+        "tenancy",
+        "reservation-state",
+        "reservation-instance-match-criteria",
+        "reservation-unused-financial-owner"
+      ]
+    },
     "FilterList":{
       "type":"list",
       "member":{
@@ -31579,6 +34861,35 @@
         "fulfilled"
       ]
     },
+    "FleetBlockDeviceMappingRequest":{
+      "type":"structure",
+      "members":{
+        "DeviceName":{
+          "shape":"String",
+          "documentation":"<p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>"
+        },
+        "VirtualName":{
+          "shape":"String",
+          "documentation":"<p>The virtual device name (<code>ephemeralN</code>). Instance store volumes are numbered starting from 0. An instance type with 2 available instance store volumes can specify mappings for <code>ephemeral0</code> and <code>ephemeral1</code>. The number of available instance store volumes depends on the instance type. After you connect to the instance, you must mount the volume.</p> <p>NVMe instance store volumes are automatically enumerated and assigned a device name. Including them in your block device mapping has no effect.</p> <p>Constraints: For M3 instances, you must specify instance store volumes in the block device mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes specified in the block device mapping for the AMI.</p>"
+        },
+        "Ebs":{
+          "shape":"FleetEbsBlockDeviceRequest",
+          "documentation":"<p>Parameters used to automatically set up EBS volumes when the instance is launched.</p>"
+        },
+        "NoDevice":{
+          "shape":"String",
+          "documentation":"<p>To omit the device from the block device mapping, specify an empty string. When this property is specified, the device is removed from the block device mapping regardless of the assigned value.</p>"
+        }
+      },
+      "documentation":"<p>Describes a block device mapping, which defines the EBS volumes and instance store volumes to attach to an instance at launch.</p> <p>To override a block device mapping specified in the launch template:</p> <ul> <li> <p>Specify the exact same <code>DeviceName</code> here as specified in the launch template.</p> </li> <li> <p>Only specify the parameters you want to change.</p> </li> <li> <p>Any parameters you don't specify here will keep their original launch template values.</p> </li> </ul> <p>To add a new block device mapping:</p> <ul> <li> <p>Specify a <code>DeviceName</code> that doesn't exist in the launch template.</p> </li> <li> <p>Specify all desired parameters here.</p> </li> </ul>"
+    },
+    "FleetBlockDeviceMappingRequestList":{
+      "type":"list",
+      "member":{
+        "shape":"FleetBlockDeviceMappingRequest",
+        "locationName":"BlockDeviceMapping"
+      }
+    },
     "FleetCapacityReservation":{
       "type":"structure",
       "members":{
@@ -31660,7 +34971,7 @@
       "members":{
         "ActivityStatus":{
           "shape":"FleetActivityStatus",
-          "documentation":"<p>The progress of the EC2 Fleet. If there is an error, the status is <code>error</code>. After all requests are placed, the status is <code>pending_fulfillment</code>. If the size of the EC2 Fleet is equal to or greater than its target capacity, the status is <code>fulfilled</code>. If the size of the EC2 Fleet is decreased, the status is <code>pending_termination</code> while instances are terminating.</p>",
+          "documentation":"<p>The progress of the EC2 Fleet.</p> <p>For fleets of type <code>instant</code>, the status is <code>fulfilled</code> after all requests are placed, regardless of whether target capacity is met (this is the only possible status for <code>instant</code> fleets).</p> <p>For fleets of type <code>request</code> or <code>maintain</code>, the status is <code>pending_fulfillment</code> after all requests are placed, <code>fulfilled</code> when the fleet size meets or exceeds target capacity, <code>pending_termination</code> while instances are terminating when fleet size is decreased, and <code>error</code> if there's an error.</p>",
           "locationName":"activityStatus"
         },
         "CreateTime":{
@@ -31766,6 +35077,44 @@
       },
       "documentation":"<p>Describes an EC2 Fleet.</p>"
     },
+    "FleetEbsBlockDeviceRequest":{
+      "type":"structure",
+      "members":{
+        "Encrypted":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the encryption state of an EBS volume is changed while being restored from a backing snapshot. The effect of setting the encryption state to <code>true</code> depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html\">Amazon EBS encryption</a> in the <i>Amazon EBS User Guide</i>.</p> <p>In no case can you remove encryption from an encrypted volume.</p> <p>Encrypted volumes can only be attached to instances that support Amazon EBS encryption. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances\">Supported instance types</a>.</p> <p>This parameter is not returned by <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImageAttribute\">DescribeImageAttribute</a>.</p> <p>For <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage\">CreateImage</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RegisterImage\">RegisterImage</a>, whether you can include this parameter, and the allowed values differ depending on the type of block device mapping you are creating.</p> <ul> <li> <p>If you are creating a block device mapping for a <b>new (empty) volume</b>, you can include this parameter, and specify either <code>true</code> for an encrypted volume, or <code>false</code> for an unencrypted volume. If you omit this parameter, it defaults to <code>false</code> (unencrypted).</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing encrypted or unencrypted snapshot</b>, you must omit this parameter. If you include this parameter, the request will fail, regardless of the value that you specify.</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing unencrypted volume</b>, you can include this parameter, but you must specify <code>false</code>. If you specify <code>true</code>, the request will fail. In this case, we recommend that you omit the parameter.</p> </li> <li> <p>If you are creating a block device mapping from an <b>existing encrypted volume</b>, you can include this parameter, and specify either <code>true</code> or <code>false</code>. However, if you specify <code>false</code>, the parameter is ignored and the block device mapping is always encrypted. In this case, we recommend that you omit the parameter.</p> </li> </ul>"
+        },
+        "DeleteOnTermination":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the EBS volume is deleted on instance termination. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/preserving-volumes-on-termination.html\">Preserve data when an instance is terminated</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "Iops":{
+          "shape":"Integer",
+          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 80,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is required for <code>io1</code> and <code>io2</code> volumes. The default for <code>gp3</code> volumes is 3,000 IOPS.</p>"
+        },
+        "Throughput":{
+          "shape":"Integer",
+          "documentation":"<p>The throughput that the volume supports, in MiB/s.</p> <p>This parameter is valid only for <code>gp3</code> volumes.</p> <p>Valid Range: Minimum value of 125. Maximum value of 2,000.</p>"
+        },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>Identifier (key ID, key alias, key ARN, or alias ARN) of the customer managed KMS key to use for EBS encryption.</p> <p>This parameter is only supported on <code>BlockDeviceMapping</code> objects called by <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html\">CreateFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html\">RequestSpotInstances</a>, and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances</a>.</p>"
+        },
+        "SnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>The ID of the snapshot.</p>"
+        },
+        "VolumeSize":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. If you specify a snapshot, the default is the snapshot size. You can specify a volume size that is equal to or larger than the snapshot size.</p> <p>The following are the supported sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>gp3</code>: 1 - 65,536 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>"
+        },
+        "VolumeType":{
+          "shape":"VolumeType",
+          "documentation":"<p>The volume type. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html\">Amazon EBS volume types</a> in the <i>Amazon EBS User Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>Describes a block device for an EBS volume.</p>"
+    },
     "FleetEventType":{
       "type":"string",
       "enum":[
@@ -31846,7 +35195,7 @@
         },
         "MaxPrice":{
           "shape":"String",
-          "documentation":"<p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. </p> <important> <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>",
+          "documentation":"<p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. </p> <important> <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p> <p>If you specify a maximum price, it must be more than USD $0.001. Specifying a value below USD $0.001 will result in an <code>InvalidParameterValue</code> error message.</p> </important>",
           "locationName":"maxPrice"
         },
         "SubnetId":{
@@ -31855,7 +35204,7 @@
           "locationName":"subnetId"
         },
         "AvailabilityZone":{
-          "shape":"String",
+          "shape":"AvailabilityZoneName",
           "documentation":"<p>The Availability Zone in which to launch the instances.</p>",
           "locationName":"availabilityZone"
         },
@@ -31883,6 +35232,11 @@
           "shape":"ImageId",
           "documentation":"<p>The ID of the AMI in the format <code>ami-17characters00000</code>.</p> <p>Alternatively, you can specify a Systems Manager parameter, using one of the following formats. The Systems Manager parameter will resolve to an AMI ID on launch.</p> <p>To reference a public parameter:</p> <ul> <li> <p> <code>resolve:ssm:<i>public-parameter</i> </code> </p> </li> </ul> <p>To reference a parameter stored in the same account:</p> <ul> <li> <p> <code>resolve:ssm:<i>parameter-name</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-name:version-number</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-name:label</i> </code> </p> </li> </ul> <p>To reference a parameter shared from another Amazon Web Services account:</p> <ul> <li> <p> <code>resolve:ssm:<i>parameter-ARN</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-ARN:version-number</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-ARN:label</i> </code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>This parameter is only available for fleets of type <code>instant</code>. For fleets of type <code>maintain</code> and <code>request</code>, you must specify the AMI ID in the launch template.</p> </note>",
           "locationName":"imageId"
+        },
+        "BlockDeviceMappings":{
+          "shape":"BlockDeviceMappingResponseList",
+          "documentation":"<p>The block device mappings, which define the EBS volumes and instance store volumes to attach to the instance at launch.</p> <p>Supported only for fleets of type <code>instant</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings for volumes on Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"blockDeviceMappingSet"
         }
       },
       "documentation":"<p>Describes overrides for a launch template.</p>"
@@ -31910,14 +35264,14 @@
         },
         "MaxPrice":{
           "shape":"String",
-          "documentation":"<p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. </p> <important> <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>"
+          "documentation":"<p>The maximum price per unit hour that you are willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. </p> <important> <p>If you specify a maximum price, your instances will be interrupted more frequently than if you do not specify this parameter.</p> <p>If you specify a maximum price, it must be more than USD $0.001. Specifying a value below USD $0.001 will result in an <code>InvalidParameterValue</code> error message.</p> </important>"
         },
         "SubnetId":{
           "shape":"SubnetId",
           "documentation":"<p>The IDs of the subnets in which to launch the instances. Separate multiple subnet IDs using commas (for example, <code>subnet-1234abcdeexample1, subnet-0987cdef6example2</code>). A request of type <code>instant</code> can have only one subnet ID.</p>"
         },
         "AvailabilityZone":{
-          "shape":"String",
+          "shape":"AvailabilityZoneName",
           "documentation":"<p>The Availability Zone in which to launch the instances.</p>"
         },
         "WeightedCapacity":{
@@ -31932,12 +35286,17 @@
           "shape":"Placement",
           "documentation":"<p>The location where the instance launched, if applicable.</p>"
         },
+        "BlockDeviceMappings":{
+          "shape":"FleetBlockDeviceMappingRequestList",
+          "documentation":"<p>The block device mappings, which define the EBS volumes and instance store volumes to attach to the instance at launch.</p> <p>Supported only for fleets of type <code>instant</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block device mappings for volumes on Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"BlockDeviceMapping"
+        },
         "InstanceRequirements":{
           "shape":"InstanceRequirementsRequest",
           "documentation":"<p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with those attributes.</p> <note> <p>If you specify <code>InstanceRequirements</code>, you can't specify <code>InstanceType</code>.</p> </note>"
         },
         "ImageId":{
-          "shape":"ImageId",
+          "shape":"String",
           "documentation":"<p>The ID of the AMI in the format <code>ami-17characters00000</code>.</p> <p>Alternatively, you can specify a Systems Manager parameter, using one of the following formats. The Systems Manager parameter will resolve to an AMI ID on launch.</p> <p>To reference a public parameter:</p> <ul> <li> <p> <code>resolve:ssm:<i>public-parameter</i> </code> </p> </li> </ul> <p>To reference a parameter stored in the same account:</p> <ul> <li> <p> <code>resolve:ssm:<i>parameter-name</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-name:version-number</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-name:label</i> </code> </p> </li> </ul> <p>To reference a parameter shared from another Amazon Web Services account:</p> <ul> <li> <p> <code>resolve:ssm:<i>parameter-ARN</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-ARN:version-number</i> </code> </p> </li> <li> <p> <code>resolve:ssm:<i>parameter-ARN:label</i> </code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p> <note> <p>This parameter is only available for fleets of type <code>instant</code>. For fleets of type <code>maintain</code> and <code>request</code>, you must specify the AMI ID in the launch template.</p> </note>"
         }
       },
@@ -32074,6 +35433,13 @@
         "instant"
       ]
     },
+    "FlexibleEnaQueuesSupport":{
+      "type":"string",
+      "enum":[
+        "unsupported",
+        "supported"
+      ]
+    },
     "Float":{"type":"float"},
     "FlowLog":{
       "type":"structure",
@@ -32442,6 +35808,37 @@
       "type":"string",
       "enum":["ipsec.1"]
     },
+    "GetActiveVpnTunnelStatusRequest":{
+      "type":"structure",
+      "required":[
+        "VpnConnectionId",
+        "VpnTunnelOutsideIpAddress"
+      ],
+      "members":{
+        "VpnConnectionId":{
+          "shape":"VpnConnectionId",
+          "documentation":"<p>The ID of the VPN connection for which to retrieve the active tunnel status.</p>"
+        },
+        "VpnTunnelOutsideIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The external IP address of the VPN tunnel for which to retrieve the active status.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request.</p>"
+        }
+      }
+    },
+    "GetActiveVpnTunnelStatusResult":{
+      "type":"structure",
+      "members":{
+        "ActiveVpnTunnelStatus":{
+          "shape":"ActiveVpnTunnelStatus",
+          "documentation":"<p>Information about the current security configuration of the VPN tunnel.</p>",
+          "locationName":"activeVpnTunnelStatus"
+        }
+      }
+    },
     "GetAllowedImagesSettingsRequest":{
       "type":"structure",
       "members":{
@@ -32577,6 +35974,177 @@
         }
       }
     },
+    "GetCapacityManagerAttributesRequest":{
+      "type":"structure",
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        }
+      }
+    },
+    "GetCapacityManagerAttributesResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerStatus":{
+          "shape":"CapacityManagerStatus",
+          "documentation":"<p> The current status of Capacity Manager. </p>",
+          "locationName":"capacityManagerStatus"
+        },
+        "OrganizationsAccess":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates whether Organizations access is enabled for cross-account data aggregation. </p>",
+          "locationName":"organizationsAccess"
+        },
+        "DataExportCount":{
+          "shape":"Integer",
+          "documentation":"<p> The number of active data export configurations for this account. This count includes all data exports regardless of their current delivery status. </p>",
+          "locationName":"dataExportCount"
+        },
+        "IngestionStatus":{
+          "shape":"IngestionStatus",
+          "documentation":"<p> The current data ingestion status. Initial ingestion may take several hours after enabling Capacity Manager. </p>",
+          "locationName":"ingestionStatus"
+        },
+        "IngestionStatusMessage":{
+          "shape":"String",
+          "documentation":"<p> A descriptive message providing additional details about the current ingestion status. This may include error information if ingestion has failed or progress details during initial setup. </p>",
+          "locationName":"ingestionStatusMessage"
+        },
+        "EarliestDatapointTimestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp of the earliest data point available in Capacity Manager, in milliseconds since epoch. This indicates how far back historical data is available for queries. </p>",
+          "locationName":"earliestDatapointTimestamp"
+        },
+        "LatestDatapointTimestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp of the most recent data point ingested by Capacity Manager, in milliseconds since epoch. This indicates how current your capacity data is. </p>",
+          "locationName":"latestDatapointTimestamp"
+        }
+      }
+    },
+    "GetCapacityManagerMetricDataRequest":{
+      "type":"structure",
+      "required":[
+        "MetricNames",
+        "StartTime",
+        "EndTime",
+        "Period"
+      ],
+      "members":{
+        "MetricNames":{
+          "shape":"MetricSet",
+          "documentation":"<p> The names of the metrics to retrieve. Maximum of 10 metrics per request. </p>",
+          "locationName":"MetricName"
+        },
+        "StartTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The start time for the metric data query, in ISO 8601 format. The time range (end time - start time) must be a multiple of the specified period. </p>"
+        },
+        "EndTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The end time for the metric data query, in ISO 8601 format. If the end time is beyond the latest ingested data, it will be automatically adjusted to the latest available data point. </p>"
+        },
+        "Period":{
+          "shape":"Period",
+          "documentation":"<p> The granularity, in seconds, of the returned data points. </p>"
+        },
+        "GroupBy":{
+          "shape":"GroupBySet",
+          "documentation":"<p> The dimensions by which to group the metric data. This determines how the data is aggregated and returned. </p>"
+        },
+        "FilterBy":{
+          "shape":"CapacityManagerConditionSet",
+          "documentation":"<p> Conditions to filter the metric data. Each filter specifies a dimension, comparison operator ('equals', 'in'), and values to match against. </p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of data points to return. Valid range is 1 to 100,000. Use with NextToken for pagination of large result sets. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token for the next page of results. Use this value in a subsequent call to retrieve additional data points. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        }
+      }
+    },
+    "GetCapacityManagerMetricDataResult":{
+      "type":"structure",
+      "members":{
+        "MetricDataResults":{
+          "shape":"MetricDataResultSet",
+          "documentation":"<p> The metric data points returned by the query. Each result contains dimension values, timestamp, and metric values with their associated statistics. </p>",
+          "locationName":"metricDataResultSet"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token to use to retrieve the next page of results. This value is null when there are no more results to return. </p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "GetCapacityManagerMetricDimensionsRequest":{
+      "type":"structure",
+      "required":[
+        "GroupBy",
+        "StartTime",
+        "EndTime",
+        "MetricNames"
+      ],
+      "members":{
+        "GroupBy":{
+          "shape":"GroupBySet",
+          "documentation":"<p> The dimensions to group by when retrieving available dimension values. This determines which dimension combinations are returned. Required parameter. </p>"
+        },
+        "FilterBy":{
+          "shape":"CapacityManagerConditionSet",
+          "documentation":"<p> Conditions to filter which dimension values are returned. Each filter specifies a dimension, comparison operator, and values to match against. </p>"
+        },
+        "StartTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The start time for the dimension query, in ISO 8601 format. Only dimensions with data in this time range will be returned. </p>"
+        },
+        "EndTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The end time for the dimension query, in ISO 8601 format. Only dimensions with data in this time range will be returned. </p>"
+        },
+        "MetricNames":{
+          "shape":"MetricSet",
+          "documentation":"<p> The metric names to use as an additional filter when retrieving dimensions. Only dimensions that have data for these metrics will be returned. Required parameter with maximum size of 1 for v1. </p>",
+          "locationName":"MetricName"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of dimension combinations to return. Valid range is 1 to 1000. Use with NextToken for pagination. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token for the next page of results. Use this value in a subsequent call to retrieve additional dimension values. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        }
+      }
+    },
+    "GetCapacityManagerMetricDimensionsResult":{
+      "type":"structure",
+      "members":{
+        "MetricDimensionResults":{
+          "shape":"MetricDimensionResultSet",
+          "documentation":"<p> The available dimension combinations that have data within the specified time range and filters. </p>",
+          "locationName":"metricDimensionResultSet"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token to use to retrieve the next page of results. This value is null when there are no more results to return. </p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "GetCapacityReservationUsageRequest":{
       "type":"structure",
       "required":["CapacityReservationId"],
@@ -32634,7 +36202,7 @@
         },
         "State":{
           "shape":"CapacityReservationState",
-          "documentation":"<p>The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p> <ul> <li> <p> <code>active</code> - The capacity is available for use.</p> </li> <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your reservation request. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>cancelled</code> - The Capacity Reservation was canceled. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li> <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request can fail due to request parameters that are not valid, capacity constraints, or instance limit constraints. You can view a failed request for 60 minutes.</p> </li> <li> <p> <code>scheduled</code> - (<i>Future-dated Capacity Reservations only</i>) The future-dated Capacity Reservation request was approved and the Capacity Reservation is scheduled for delivery on the requested start date.</p> </li> <li> <p> <code>assessing</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 is assessing your request for a future-dated Capacity Reservation.</p> </li> <li> <p> <code>delayed</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 encountered a delay in provisioning the requested future-dated Capacity Reservation. Amazon EC2 is unable to deliver the requested capacity by the requested start date and time.</p> </li> <li> <p> <code>unsupported</code> - (<i>Future-dated Capacity Reservations only</i>) Amazon EC2 can't support the future-dated Capacity Reservation request due to capacity constraints. You can view unsupported requests for 30 days. The Capacity Reservation will not be delivered.</p> </li> </ul>",
+          "documentation":"<p>The current state of the Capacity Reservation. A Capacity Reservation can be in one of the following states:</p> <ul> <li> <p> <code>active</code> - The capacity is available for use.</p> </li> <li> <p> <code>expired</code> - The Capacity Reservation expired automatically at the date and time specified in your reservation request. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>cancelled</code> - The Capacity Reservation was canceled. The reserved capacity is no longer available for your use.</p> </li> <li> <p> <code>pending</code> - The Capacity Reservation request was successful but the capacity provisioning is still pending.</p> </li> <li> <p> <code>failed</code> - The Capacity Reservation request has failed. A request can fail due to request parameters that are not valid, capacity constraints, or instance limit constraints. You can view a failed request for 60 minutes.</p> </li> <li> <p> <code>scheduled</code> - (<i>Future-dated Capacity Reservations</i>) The future-dated Capacity Reservation request was approved and the Capacity Reservation is scheduled for delivery on the requested start date.</p> </li> <li> <p> <code>payment-pending</code> - (<i>Capacity Blocks</i>) The upfront payment has not been processed yet.</p> </li> <li> <p> <code>payment-failed</code> - (<i>Capacity Blocks</i>) The upfront payment was not processed in the 12-hour time frame. Your Capacity Block was released.</p> </li> <li> <p> <code>assessing</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 is assessing your request for a future-dated Capacity Reservation.</p> </li> <li> <p> <code>delayed</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 encountered a delay in provisioning the requested future-dated Capacity Reservation. Amazon EC2 is unable to deliver the requested capacity by the requested start date and time.</p> </li> <li> <p> <code>unsupported</code> - (<i>Future-dated Capacity Reservations</i>) Amazon EC2 can't support the future-dated Capacity Reservation request due to capacity constraints. You can view unsupported requests for 30 days. The Capacity Reservation will not be delivered.</p> </li> </ul>",
           "locationName":"state"
         },
         "InstanceUsages":{
@@ -33020,6 +36588,30 @@
         }
       }
     },
+    "GetImageAncestryRequest":{
+      "type":"structure",
+      "required":["ImageId"],
+      "members":{
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the AMI whose ancestry you want to trace.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "GetImageAncestryResult":{
+      "type":"structure",
+      "members":{
+        "ImageAncestryEntries":{
+          "shape":"ImageAncestryEntryList",
+          "documentation":"<p>A list of entries in the AMI ancestry chain, from the specified AMI to the root AMI.</p>",
+          "locationName":"imageAncestryEntrySet"
+        }
+      }
+    },
     "GetImageBlockPublicAccessStateRequest":{
       "type":"structure",
       "members":{
@@ -33147,6 +36739,10 @@
         "NextToken":{
           "shape":"String",
           "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "Context":{
+          "shape":"String",
+          "documentation":"<p>Reserved.</p>"
         }
       }
     },
@@ -33495,6 +37091,139 @@
         }
       }
     },
+    "GetIpamPrefixListResolverRulesRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver whose rules you want to retrieve.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to limit the results.</p>",
+          "locationName":"Filter"
+        },
+        "MaxResults":{
+          "shape":"IpamMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "GetIpamPrefixListResolverRulesResult":{
+      "type":"structure",
+      "members":{
+        "Rules":{
+          "shape":"IpamPrefixListResolverRuleSet",
+          "documentation":"<p>The CIDR selection rules for the IPAM prefix list resolver.</p>",
+          "locationName":"ruleSet"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "GetIpamPrefixListResolverVersionEntriesRequest":{
+      "type":"structure",
+      "required":[
+        "IpamPrefixListResolverId",
+        "IpamPrefixListResolverVersion"
+      ],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver whose version entries you want to retrieve.</p>"
+        },
+        "IpamPrefixListResolverVersion":{
+          "shape":"Long",
+          "documentation":"<p>The version number of the resolver for which to retrieve CIDR entries. If not specified, the latest version is used.</p>"
+        },
+        "MaxResults":{
+          "shape":"IpamMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "GetIpamPrefixListResolverVersionEntriesResult":{
+      "type":"structure",
+      "members":{
+        "Entries":{
+          "shape":"IpamPrefixListResolverVersionEntrySet",
+          "documentation":"<p>The CIDR entries for the specified resolver version.</p>",
+          "locationName":"entrySet"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "GetIpamPrefixListResolverVersionsRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver whose versions you want to retrieve.</p>"
+        },
+        "IpamPrefixListResolverVersions":{
+          "shape":"IpamPrefixListResolverVersionNumberSet",
+          "documentation":"<p>Specific version numbers to retrieve. If not specified, all versions are returned.</p>",
+          "locationName":"IpamPrefixListResolverVersion"
+        },
+        "MaxResults":{
+          "shape":"IpamMaxResults",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination\">Pagination</a>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>One or more filters to limit the results.</p>",
+          "locationName":"Filter"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "GetIpamPrefixListResolverVersionsResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolverVersions":{
+          "shape":"IpamPrefixListResolverVersionSet",
+          "documentation":"<p>Information about the IPAM prefix list resolver versions.</p>",
+          "locationName":"ipamPrefixListResolverVersionSet"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "GetIpamResourceCidrsRequest":{
       "type":"structure",
       "required":["IpamScopeId"],
@@ -33847,6 +37576,105 @@
       },
       "documentation":"<p>Contains the output of GetReservedInstancesExchangeQuote.</p>"
     },
+    "GetRouteServerAssociationsRequest":{
+      "type":"structure",
+      "required":["RouteServerId"],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to get association information.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "GetRouteServerAssociationsResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerAssociations":{
+          "shape":"RouteServerAssociationsList",
+          "documentation":"<p>Information about the associations for the specified route server.</p>",
+          "locationName":"routeServerAssociationSet"
+        }
+      }
+    },
+    "GetRouteServerPropagationsRequest":{
+      "type":"structure",
+      "required":["RouteServerId"],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to get propagation information.</p>"
+        },
+        "RouteTableId":{
+          "shape":"RouteTableId",
+          "documentation":"<p>The ID of the route table for which to get propagation information.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "GetRouteServerPropagationsResult":{
+      "type":"structure",
+      "members":{
+        "RouteServerPropagations":{
+          "shape":"RouteServerPropagationsList",
+          "documentation":"<p>Information about the route propagations for the specified route server.</p>",
+          "locationName":"routeServerPropagationSet"
+        }
+      }
+    },
+    "GetRouteServerRoutingDatabaseRequest":{
+      "type":"structure",
+      "required":["RouteServerId"],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server for which to get the routing database.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"RouteServerMaxResults",
+          "documentation":"<p>The maximum number of routing database entries to return in a single response.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>Filters to apply to the routing database query.</p>",
+          "locationName":"Filter"
+        }
+      }
+    },
+    "GetRouteServerRoutingDatabaseResult":{
+      "type":"structure",
+      "members":{
+        "AreRoutesPersisted":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether routes are being persisted in the routing database.</p>",
+          "locationName":"areRoutesPersisted"
+        },
+        "Routes":{
+          "shape":"RouteServerRouteList",
+          "documentation":"<p>The collection of routes in the route server's routing database.</p>",
+          "locationName":"routeSet"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "GetSecurityGroupsForVpcRequest":{
       "type":"structure",
       "required":["VpcId"],
@@ -34461,6 +38289,10 @@
           "shape":"String",
           "documentation":"<p>The IKE version to be used in the sample configuration file for your customer gateway device. You can specify one of the following versions: <code>ikev1</code> or <code>ikev2</code>.</p>"
         },
+        "SampleType":{
+          "shape":"String",
+          "documentation":"<p>The type of sample configuration to generate. Valid values are \"compatibility\" (includes IKEv1) or \"recommended\" (throws UnsupportedOperationException for IKEv1).</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
@@ -34629,6 +38461,37 @@
       },
       "documentation":"<p>Describes the GPU accelerators for the instance type.</p>"
     },
+    "GroupBy":{
+      "type":"string",
+      "enum":[
+        "resource-region",
+        "availability-zone-id",
+        "account-id",
+        "instance-family",
+        "instance-type",
+        "instance-platform",
+        "reservation-arn",
+        "reservation-id",
+        "reservation-type",
+        "reservation-create-timestamp",
+        "reservation-start-timestamp",
+        "reservation-end-timestamp",
+        "reservation-end-date-type",
+        "tenancy",
+        "reservation-state",
+        "reservation-instance-match-criteria",
+        "reservation-unused-financial-owner"
+      ]
+    },
+    "GroupBySet":{
+      "type":"list",
+      "member":{
+        "shape":"GroupBy",
+        "locationName":"item"
+      },
+      "max":20,
+      "min":0
+    },
     "GroupIdStringList":{
       "type":"list",
       "member":{
@@ -35358,7 +39221,7 @@
         },
         "BootMode":{
           "shape":"BootModeValues",
-          "documentation":"<p>The boot mode of the image. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html\">Boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The boot mode of the image. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html\">Instance launch behavior with Amazon EC2 boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"bootMode"
         },
         "TpmSupport":{
@@ -35398,14 +39261,19 @@
         },
         "SourceImageId":{
           "shape":"String",
-          "documentation":"<p>The ID of the source AMI from which the AMI was created.</p> <p>The ID only appears if the AMI was created using <a>CreateImage</a>, <a>CopyImage</a>, or <a>CreateRestoreImageTask</a>. The ID does not appear if the AMI was created using any other API. For some older AMIs, the ID might not be available. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify-source-ami-used-to-create-new-ami.html\">Identify the source AMI used to create a new AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The ID of the source AMI from which the AMI was created.</p>",
           "locationName":"sourceImageId"
         },
         "SourceImageRegion":{
           "shape":"String",
-          "documentation":"<p>The Region of the source AMI. </p> <p>The Region only appears if the AMI was created using <a>CreateImage</a>, <a>CopyImage</a>, or <a>CreateRestoreImageTask</a>. The Region does not appear if the AMI was created using any other API. For some older AMIs, the Region might not be available. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify-source-ami-used-to-create-new-ami.html\">Identify the source AMI used to create a new AMI</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The Region of the source AMI.</p>",
           "locationName":"sourceImageRegion"
         },
+        "FreeTierEligible":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the image is eligible for Amazon Web Services Free Tier.</p> <ul> <li> <p>If <code>true</code>, the AMI is eligible for Free Tier and can be used to launch instances under the Free Tier limits.</p> </li> <li> <p>If <code>false</code>, the AMI is not eligible for Free Tier.</p> </li> </ul>",
+          "locationName":"freeTierEligible"
+        },
         "ImageId":{
           "shape":"String",
           "documentation":"<p>The ID of the AMI.</p>",
@@ -35469,6 +39337,44 @@
       },
       "documentation":"<p>Describes an image.</p>"
     },
+    "ImageAncestryEntry":{
+      "type":"structure",
+      "members":{
+        "CreationDate":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time when this AMI was created.</p>",
+          "locationName":"creationDate"
+        },
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of this AMI.</p>",
+          "locationName":"imageId"
+        },
+        "ImageOwnerAlias":{
+          "shape":"String",
+          "documentation":"<p>The owner alias (<code>amazon</code> | <code>aws-backup-vault</code> | <code>aws-marketplace</code> ) of this AMI, if one is assigned. Otherwise, the value is <code>null</code>.</p>",
+          "locationName":"imageOwnerAlias"
+        },
+        "SourceImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the parent AMI.</p>",
+          "locationName":"sourceImageId"
+        },
+        "SourceImageRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region of the parent AMI.</p>",
+          "locationName":"sourceImageRegion"
+        }
+      },
+      "documentation":"<p>Information about a single AMI in the ancestry chain and its source (parent) AMI.</p>"
+    },
+    "ImageAncestryEntryList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageAncestryEntry",
+        "locationName":"item"
+      }
+    },
     "ImageAttribute":{
       "type":"structure",
       "members":{
@@ -35504,7 +39410,7 @@
         },
         "UefiData":{
           "shape":"AttributeValue",
-          "documentation":"<p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData\">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href=\"https://github.com/awslabs/python-uefivars\">python-uefivars tool</a> on GitHub. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html\">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData\">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href=\"https://github.com/awslabs/python-uefivars\">python-uefivars tool</a> on GitHub. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html\">UEFI Secure Boot for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"uefiData"
         },
         "LastLaunchedTime":{
@@ -35576,11 +39482,31 @@
       "members":{
         "ImageProviders":{
           "shape":"ImageProviderList",
-          "documentation":"<p>A list of AMI providers whose AMIs are discoverable and useable in the account. Up to a total of 200 values can be specified.</p> <p>Possible values:</p> <p> <code>amazon</code>: Allow AMIs created by Amazon Web Services.</p> <p> <code>aws-marketplace</code>: Allow AMIs created by verified providers in the Amazon Web Services Marketplace.</p> <p> <code>aws-backup-vault</code>: Allow AMIs created by Amazon Web Services Backup. </p> <p>12-digit account ID: Allow AMIs created by this account. One or more account IDs can be specified.</p> <p> <code>none</code>: Allow AMIs created by your own account only.</p>",
+          "documentation":"<p>The image providers whose images are allowed.</p> <p>Possible values:</p> <ul> <li> <p> <code>amazon</code>: Allow AMIs created by Amazon or verified providers.</p> </li> <li> <p> <code>aws-marketplace</code>: Allow AMIs created by verified providers in the Amazon Web Services Marketplace.</p> </li> <li> <p> <code>aws-backup-vault</code>: Allow AMIs created by Amazon Web Services Backup. </p> </li> <li> <p>12-digit account ID: Allow AMIs created by this account. One or more account IDs can be specified.</p> </li> <li> <p> <code>none</code>: Allow AMIs created by your own account only.</p> </li> </ul> <p>Maximum: 200 values</p>",
           "locationName":"imageProviderSet"
+        },
+        "MarketplaceProductCodes":{
+          "shape":"MarketplaceProductCodeList",
+          "documentation":"<p>The Amazon Web Services Marketplace product codes for allowed images.</p> <p>Length: 1-25 characters</p> <p>Valid characters: Letters (<code>A–Z, a–z</code>) and numbers (<code>0–9</code>)</p> <p>Maximum: 50 values</p>",
+          "locationName":"marketplaceProductCodeSet"
+        },
+        "ImageNames":{
+          "shape":"ImageNameList",
+          "documentation":"<p>The names of allowed images. Names can include wildcards (<code>?</code> and <code>*</code>).</p> <p>Length: 1–128 characters. With <code>?</code>, the minimum is 3 characters.</p> <p>Valid characters:</p> <ul> <li> <p>Letters: <code>A–Z, a–z</code> </p> </li> <li> <p>Numbers: <code>0–9</code> </p> </li> <li> <p>Special characters: <code>( ) [ ] . / - ' @ _ * ?</code> </p> </li> <li> <p>Spaces</p> </li> </ul> <p>Maximum: 50 values</p>",
+          "locationName":"imageNameSet"
+        },
+        "DeprecationTimeCondition":{
+          "shape":"DeprecationTimeCondition",
+          "documentation":"<p>The maximum period since deprecation for allowed images.</p>",
+          "locationName":"deprecationTimeCondition"
+        },
+        "CreationDateCondition":{
+          "shape":"CreationDateCondition",
+          "documentation":"<p>The maximum age for allowed images.</p>",
+          "locationName":"creationDateCondition"
         }
       },
-      "documentation":"<p>The list of criteria that are evaluated to determine whch AMIs are discoverable and usable in the account in the specified Amazon Web Services Region. Currently, the only criteria that can be specified are AMI providers. </p> <p>Up to 10 <code>imageCriteria</code> objects can be specified, and up to a total of 200 values for all <code>imageProviders</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#allowed-amis-json-configuration\">JSON configuration for the Allowed AMIs criteria</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>The criteria that are evaluated to determine which AMIs are discoverable and usable in your account for the specified Amazon Web Services Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#how-allowed-amis-works\">How Allowed AMIs works</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "ImageCriterionList":{
       "type":"list",
@@ -35594,11 +39520,29 @@
       "members":{
         "ImageProviders":{
           "shape":"ImageProviderRequestList",
-          "documentation":"<p>A list of image providers whose AMIs are discoverable and useable in the account. Up to a total of 200 values can be specified.</p> <p>Possible values:</p> <p> <code>amazon</code>: Allow AMIs created by Amazon Web Services.</p> <p> <code>aws-marketplace</code>: Allow AMIs created by verified providers in the Amazon Web Services Marketplace.</p> <p> <code>aws-backup-vault</code>: Allow AMIs created by Amazon Web Services Backup. </p> <p>12-digit account ID: Allow AMIs created by this account. One or more account IDs can be specified.</p> <p> <code>none</code>: Allow AMIs created by your own account only. When <code>none</code> is specified, no other values can be specified.</p>",
+          "documentation":"<p>The image providers whose images are allowed.</p> <p>Possible values:</p> <ul> <li> <p> <code>amazon</code>: Allow AMIs created by Amazon or verified providers.</p> </li> <li> <p> <code>aws-marketplace</code>: Allow AMIs created by verified providers in the Amazon Web Services Marketplace.</p> </li> <li> <p> <code>aws-backup-vault</code>: Allow AMIs created by Amazon Web Services Backup. </p> </li> <li> <p>12-digit account ID: Allow AMIs created by the specified accounts. One or more account IDs can be specified.</p> </li> <li> <p> <code>none</code>: Allow AMIs created by your own account only. When <code>none</code> is specified, no other values can be specified.</p> </li> </ul> <p>Maximum: 200 values</p>",
           "locationName":"ImageProvider"
+        },
+        "MarketplaceProductCodes":{
+          "shape":"MarketplaceProductCodeRequestList",
+          "documentation":"<p>The Amazon Web Services Marketplace product codes for allowed images.</p> <p>Length: 1-25 characters</p> <p>Valid characters: Letters (<code>A–Z, a–z</code>) and numbers (<code>0–9</code>)</p> <p>Maximum: 50 values</p>",
+          "locationName":"MarketplaceProductCode"
+        },
+        "ImageNames":{
+          "shape":"ImageNameRequestList",
+          "documentation":"<p>The names of allowed images. Names can include wildcards (<code>?</code> and <code>*</code>).</p> <p>Length: 1–128 characters. With <code>?</code>, the minimum is 3 characters.</p> <p>Valid characters:</p> <ul> <li> <p>Letters: <code>A–Z, a–z</code> </p> </li> <li> <p>Numbers: <code>0–9</code> </p> </li> <li> <p>Special characters: <code>( ) [ ] . / - ' @ _ * ?</code> </p> </li> <li> <p>Spaces</p> </li> </ul> <p>Maximum: 50 values</p>",
+          "locationName":"ImageName"
+        },
+        "DeprecationTimeCondition":{
+          "shape":"DeprecationTimeConditionRequest",
+          "documentation":"<p>The maximum period since deprecation for allowed images.</p>"
+        },
+        "CreationDateCondition":{
+          "shape":"CreationDateConditionRequest",
+          "documentation":"<p>The maximum age for allowed images.</p>"
         }
       },
-      "documentation":"<p>The list of criteria that are evaluated to determine whch AMIs are discoverable and usable in the account in the specified Amazon Web Services Region. Currently, the only criteria that can be specified are AMI providers. </p> <p>Up to 10 <code>imageCriteria</code> objects can be specified, and up to a total of 200 values for all <code>imageProviders</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#allowed-amis-json-configuration\">JSON configuration for the Allowed AMIs criteria</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>The criteria that are evaluated to determine which AMIs are discoverable and usable in your account for the specified Amazon Web Services Region.</p> <p>The <code>ImageCriteria</code> can include up to:</p> <ul> <li> <p>10 <code>ImageCriterion</code> </p> </li> </ul> <p>Each <code>ImageCriterion</code> can include up to:</p> <ul> <li> <p>200 values for <code>ImageProviders</code> </p> </li> <li> <p>50 values for <code>ImageNames</code> </p> </li> <li> <p>50 values for <code>MarketplaceProductCodes</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#how-allowed-amis-works\">How Allowed AMIs works</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "ImageCriterionRequestList":{
       "type":"list",
@@ -35717,6 +39661,22 @@
       },
       "documentation":"<p>Information about the AMI.</p>"
     },
+    "ImageName":{"type":"string"},
+    "ImageNameList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageName",
+        "locationName":"item"
+      }
+    },
+    "ImageNameRequest":{"type":"string"},
+    "ImageNameRequestList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageNameRequest",
+        "locationName":"item"
+      }
+    },
     "ImageProvider":{"type":"string"},
     "ImageProviderList":{
       "type":"list",
@@ -35771,6 +39731,51 @@
         "locationName":"item"
       }
     },
+    "ImageReference":{
+      "type":"structure",
+      "members":{
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the referenced image.</p>",
+          "locationName":"imageId"
+        },
+        "ResourceType":{
+          "shape":"ImageReferenceResourceType",
+          "documentation":"<p>The type of resource referencing the image.</p>",
+          "locationName":"resourceType"
+        },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource referencing the image.</p>",
+          "locationName":"arn"
+        }
+      },
+      "documentation":"<p>A resource that is referencing an image.</p>"
+    },
+    "ImageReferenceList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageReference",
+        "locationName":"item"
+      }
+    },
+    "ImageReferenceOptionName":{
+      "type":"string",
+      "enum":[
+        "state-name",
+        "version-depth"
+      ]
+    },
+    "ImageReferenceResourceType":{
+      "type":"string",
+      "enum":[
+        "ec2:Instance",
+        "ec2:LaunchTemplate",
+        "ssm:Parameter",
+        "imagebuilder:ImageRecipe",
+        "imagebuilder:ContainerRecipe"
+      ]
+    },
     "ImageState":{
       "type":"string",
       "enum":[
@@ -35792,6 +39797,218 @@
         "ramdisk"
       ]
     },
+    "ImageUsageReport":{
+      "type":"structure",
+      "members":{
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the image that was specified when the report was created.</p>",
+          "locationName":"imageId"
+        },
+        "ReportId":{
+          "shape":"ImageUsageReportId",
+          "documentation":"<p>The ID of the report.</p>",
+          "locationName":"reportId"
+        },
+        "ResourceTypes":{
+          "shape":"ImageUsageResourceTypeList",
+          "documentation":"<p>The resource types that were specified when the report was created.</p>",
+          "locationName":"resourceTypeSet"
+        },
+        "AccountIds":{
+          "shape":"UserIdList",
+          "documentation":"<p>The IDs of the Amazon Web Services accounts that were specified when the report was created.</p>",
+          "locationName":"accountIdSet"
+        },
+        "State":{
+          "shape":"ImageUsageReportState",
+          "documentation":"<p>The current state of the report. Possible values:</p> <ul> <li> <p> <code>available</code> - The report is available to view.</p> </li> <li> <p> <code>pending</code> - The report is being created and not available to view.</p> </li> <li> <p> <code>error</code> - The report could not be created.</p> </li> </ul>",
+          "locationName":"state"
+        },
+        "StateReason":{
+          "shape":"ImageUsageReportStateReason",
+          "documentation":"<p>Provides additional details when the report is in an <code>error</code> state.</p>",
+          "locationName":"stateReason"
+        },
+        "CreationTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time when the report was created.</p>",
+          "locationName":"creationTime"
+        },
+        "ExpirationTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time when Amazon EC2 will delete the report (30 days after the report was created).</p>",
+          "locationName":"expirationTime"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Any tags assigned to the report.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>The configuration and status of an image usage report.</p>"
+    },
+    "ImageUsageReportEntry":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ImageUsageResourceTypeName",
+          "documentation":"<p>The type of resource (<code>ec2:Instance</code> or <code>ec2:LaunchTemplate</code>).</p>",
+          "locationName":"resourceType"
+        },
+        "ReportId":{
+          "shape":"ImageUsageReportId",
+          "documentation":"<p>The ID of the report.</p>",
+          "locationName":"reportId"
+        },
+        "UsageCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of times resources of this type reference this image in the account.</p>",
+          "locationName":"usageCount"
+        },
+        "AccountId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the account that uses the image.</p>",
+          "locationName":"accountId"
+        },
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the image.</p>",
+          "locationName":"imageId"
+        },
+        "ReportCreationTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time the report creation was initiated.</p>",
+          "locationName":"reportCreationTime"
+        }
+      },
+      "documentation":"<p>A single entry in an image usage report, detailing how an image is being used by a specific Amazon Web Services account and resource type.</p>"
+    },
+    "ImageUsageReportEntryList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageUsageReportEntry",
+        "locationName":"item"
+      }
+    },
+    "ImageUsageReportId":{"type":"string"},
+    "ImageUsageReportIdStringList":{
+      "type":"list",
+      "member":{"shape":"ImageUsageReportId"},
+      "max":200,
+      "min":0
+    },
+    "ImageUsageReportList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageUsageReport",
+        "locationName":"item"
+      }
+    },
+    "ImageUsageReportState":{"type":"string"},
+    "ImageUsageReportStateReason":{"type":"string"},
+    "ImageUsageReportUserIdStringList":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"UserId"
+      },
+      "max":200,
+      "min":0
+    },
+    "ImageUsageResourceType":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ImageUsageResourceTypeName",
+          "documentation":"<p>The resource type.</p> <p>Valid values: <code>ec2:Instance</code> | <code>ec2:LaunchTemplate</code> </p>",
+          "locationName":"resourceType"
+        },
+        "ResourceTypeOptions":{
+          "shape":"ImageUsageResourceTypeOptionList",
+          "documentation":"<p>The options that affect the scope of the report. Valid only when <code>ResourceType</code> is <code>ec2:LaunchTemplate</code>.</p>",
+          "locationName":"resourceTypeOptionSet"
+        }
+      },
+      "documentation":"<p>A resource type to include in the report. Associated options can also be specified if the resource type is a launch template.</p>"
+    },
+    "ImageUsageResourceTypeList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageUsageResourceType",
+        "locationName":"item"
+      }
+    },
+    "ImageUsageResourceTypeName":{"type":"string"},
+    "ImageUsageResourceTypeOption":{
+      "type":"structure",
+      "members":{
+        "OptionName":{
+          "shape":"String",
+          "documentation":"<p>The name of the option.</p>",
+          "locationName":"optionName"
+        },
+        "OptionValues":{
+          "shape":"ImageUsageResourceTypeOptionValuesList",
+          "documentation":"<p>The number of launch template versions to check.</p>",
+          "locationName":"optionValueSet"
+        }
+      },
+      "documentation":"<p>The options that affect the scope of the report.</p>"
+    },
+    "ImageUsageResourceTypeOptionList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageUsageResourceTypeOption",
+        "locationName":"item"
+      }
+    },
+    "ImageUsageResourceTypeOptionRequest":{
+      "type":"structure",
+      "members":{
+        "OptionName":{
+          "shape":"String",
+          "documentation":"<p>The name of the option.</p> <p>Valid value: <code>version-depth</code> - The number of launch template versions to check.</p>"
+        },
+        "OptionValues":{
+          "shape":"ImageUsageResourceTypeOptionValuesList",
+          "documentation":"<p>A value for the specified option.</p> <p>Valid values: Integers between <code>1</code> and <code>10000</code> </p> <p>Default: <code>20</code> </p>",
+          "locationName":"OptionValue"
+        }
+      },
+      "documentation":"<p>The options that affect the scope of the report.</p>"
+    },
+    "ImageUsageResourceTypeOptionRequestList":{
+      "type":"list",
+      "member":{"shape":"ImageUsageResourceTypeOptionRequest"}
+    },
+    "ImageUsageResourceTypeOptionValue":{"type":"string"},
+    "ImageUsageResourceTypeOptionValuesList":{
+      "type":"list",
+      "member":{
+        "shape":"ImageUsageResourceTypeOptionValue",
+        "locationName":"item"
+      }
+    },
+    "ImageUsageResourceTypeRequest":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ImageUsageResourceTypeName",
+          "documentation":"<p>The resource type.</p> <p>Valid values: <code>ec2:Instance</code> | <code>ec2:LaunchTemplate</code> </p>"
+        },
+        "ResourceTypeOptions":{
+          "shape":"ImageUsageResourceTypeOptionRequestList",
+          "documentation":"<p>The options that affect the scope of the report. Valid only when <code>ResourceType</code> is <code>ec2:LaunchTemplate</code>.</p>",
+          "locationName":"ResourceTypeOption"
+        }
+      },
+      "documentation":"<p>A resource type to include in the report. Associated options can also be specified if the resource type is a launch template.</p>"
+    },
+    "ImageUsageResourceTypeRequestList":{
+      "type":"list",
+      "member":{"shape":"ImageUsageResourceTypeRequest"}
+    },
     "ImdsSupportValues":{
       "type":"string",
       "enum":["v2.0"]
@@ -36253,6 +40470,11 @@
           "documentation":"<p>The Availability Zone where the resulting instance will reside.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone where the resulting instance will reside.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "BytesConverted":{
           "shape":"Long",
           "documentation":"<p>The number of bytes converted so far.</p>",
@@ -36470,11 +40692,14 @@
     "ImportVolumeRequest":{
       "type":"structure",
       "required":[
-        "AvailabilityZone",
         "Image",
         "Volume"
       ],
       "members":{
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone for the resulting EBS volume.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -36482,7 +40707,7 @@
         },
         "AvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone for the resulting EBS volume.</p>",
+          "documentation":"<p>The Availability Zone for the resulting EBS volume.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> must be specified, but not both.</p>",
           "locationName":"availabilityZone"
         },
         "Image":{
@@ -36520,6 +40745,11 @@
           "documentation":"<p>The Availability Zone where the resulting volume will reside.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone where the resulting volume will reside.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "BytesConverted":{
           "shape":"Long",
           "documentation":"<p>The number of bytes converted so far.</p>",
@@ -36605,6 +40835,43 @@
     },
     "InferenceDeviceMemorySize":{"type":"integer"},
     "InferenceDeviceName":{"type":"string"},
+    "IngestionStatus":{
+      "type":"string",
+      "enum":[
+        "initial-ingestion-in-progress",
+        "ingestion-complete",
+        "ingestion-failed"
+      ]
+    },
+    "InitializationStatusDetails":{
+      "type":"structure",
+      "members":{
+        "InitializationType":{
+          "shape":"InitializationType",
+          "documentation":"<p>The method used for volume initialization. Possible values include:</p> <ul> <li> <p> <code>default</code> - Volume initialized using the default volume initialization rate or fast snapshot restore.</p> </li> <li> <p> <code>provisioned-rate</code> - Volume initialized using an Amazon EBS Provisioned Rate for Volume Initialization.</p> </li> <li> <p> <code>volume-copy</code> - Volume copy initialized at the rate for volume copies.</p> </li> </ul>",
+          "locationName":"initializationType"
+        },
+        "Progress":{
+          "shape":"Long",
+          "documentation":"<p>The current volume initialization progress as a percentage (0-100). Returns <code>100</code> when volume initialization has completed.</p>",
+          "locationName":"progress"
+        },
+        "EstimatedTimeToCompleteInSeconds":{
+          "shape":"Long",
+          "documentation":"<p>The estimated remaining time, in seconds, for volume initialization to complete. Returns <code>0</code> when volume initialization has completed.</p> <p>Only available for volumes created with Amazon EBS Provisioned Rate for Volume Initialization.</p>",
+          "locationName":"estimatedTimeToCompleteInSeconds"
+        }
+      },
+      "documentation":"<p>Information about the volume initialization. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\">Initialize Amazon EBS volumes</a>.</p>"
+    },
+    "InitializationType":{
+      "type":"string",
+      "enum":[
+        "default",
+        "provisioned-rate",
+        "volume-copy"
+      ]
+    },
     "InsideCidrBlocksStringList":{
       "type":"list",
       "member":{
@@ -36725,6 +40992,11 @@
           "documentation":"<p>The CPU options for the instance.</p>",
           "locationName":"cpuOptions"
         },
+        "CapacityBlockId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Capacity Block.</p> <note> <p>For P5 instances, a Capacity Block ID refers to a group of instances. For Trn2u instances, a capacity block ID refers to an EC2 UltraServer.</p> </note>",
+          "locationName":"capacityBlockId"
+        },
         "CapacityReservationId":{
           "shape":"String",
           "documentation":"<p>The ID of the Capacity Reservation.</p>",
@@ -36832,7 +41104,7 @@
         },
         "PublicDnsName":{
           "shape":"String",
-          "documentation":"<p>[IPv4 only] The public DNS name assigned to the instance. This name is not available until the instance enters the <code>running</code> state. This name is only available if you've enabled DNS hostnames for your VPC.</p>",
+          "documentation":"<p>The public DNS name assigned to the instance. This name is not available until the instance enters the <code>running</code> state. This name is only available if you've enabled DNS hostnames for your VPC. The format of this name depends on the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hostname-types.html#public-hostnames\">public hostname type</a>.</p>",
           "locationName":"dnsName"
         },
         "StateTransitionReason":{
@@ -36950,7 +41222,7 @@
         },
         "DisableApiTermination":{
           "shape":"AttributeBooleanValue",
-          "documentation":"<p>If the value is <code>true</code>, you can't terminate the instance through the Amazon EC2 console, CLI, or API; otherwise, you can.</p>",
+          "documentation":"<p>Indicates whether termination protection is enabled. If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, command line tools, or API.</p>",
           "locationName":"disableApiTermination"
         },
         "EnaSupport":{
@@ -36960,7 +41232,7 @@
         },
         "EnclaveOptions":{
           "shape":"EnclaveOptions",
-          "documentation":"<p>To enable the instance for Amazon Web Services Nitro Enclaves, set this parameter to <code>true</code>; otherwise, set it to <code>false</code>.</p>",
+          "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves.</p>",
           "locationName":"enclaveOptions"
         },
         "EbsOptimized":{
@@ -36990,7 +41262,7 @@
         },
         "ProductCodes":{
           "shape":"ProductCodeList",
-          "documentation":"<p>A list of product codes.</p>",
+          "documentation":"<p>The product codes.</p>",
           "locationName":"productCodes"
         },
         "RamdiskId":{
@@ -37005,7 +41277,7 @@
         },
         "SourceDestCheck":{
           "shape":"AttributeBooleanValue",
-          "documentation":"<p>Enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. If the value is <code>true</code>, source/destination checks are enabled; otherwise, they are disabled. The default value is <code>true</code>. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.</p>",
+          "documentation":"<p>Indicates whether source/destination checks are enabled.</p>",
           "locationName":"sourceDestCheck"
         },
         "SriovNetSupport":{
@@ -37020,7 +41292,7 @@
         },
         "DisableApiStop":{
           "shape":"AttributeBooleanValue",
-          "documentation":"<p>To enable the instance for Amazon Web Services Stop Protection, set this parameter to <code>true</code>; otherwise, set it to <code>false</code>.</p>",
+          "documentation":"<p>Indicates whether stop protection is enabled for the instance.</p>",
           "locationName":"disableApiStop"
         },
         "Groups":{
@@ -37072,7 +41344,7 @@
       "members":{
         "DeviceName":{
           "shape":"String",
-          "documentation":"<p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>",
+          "documentation":"<p>The device name.</p>",
           "locationName":"deviceName"
         },
         "Ebs":{
@@ -37095,7 +41367,7 @@
       "members":{
         "DeviceName":{
           "shape":"String",
-          "documentation":"<p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>",
+          "documentation":"<p>The device name. For available device names, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html\">Device names for volumes</a>.</p>",
           "locationName":"deviceName"
         },
         "Ebs":{
@@ -37110,7 +41382,7 @@
         },
         "NoDevice":{
           "shape":"String",
-          "documentation":"<p>suppress the specified device included in the block device mapping.</p>",
+          "documentation":"<p>Suppresses the specified device included in the block device mapping.</p>",
           "locationName":"noDevice"
         }
       },
@@ -37151,12 +41423,44 @@
       },
       "documentation":"<p>Information about the number of instances that can be launched onto the Dedicated Host.</p>"
     },
+    "InstanceConnectEndpointDnsNames":{
+      "type":"structure",
+      "members":{
+        "DnsName":{
+          "shape":"String",
+          "documentation":"<p>The DNS name of the EC2 Instance Connect Endpoint.</p>",
+          "locationName":"dnsName"
+        },
+        "FipsDnsName":{
+          "shape":"String",
+          "documentation":"<p>The Federal Information Processing Standards (FIPS) compliant DNS name of the EC2 Instance Connect Endpoint.</p>",
+          "locationName":"fipsDnsName"
+        }
+      },
+      "documentation":"<p>The DNS names of the endpoint.</p>"
+    },
     "InstanceConnectEndpointId":{"type":"string"},
     "InstanceConnectEndpointMaxResults":{
       "type":"integer",
       "max":50,
       "min":1
     },
+    "InstanceConnectEndpointPublicDnsNames":{
+      "type":"structure",
+      "members":{
+        "Ipv4":{
+          "shape":"InstanceConnectEndpointDnsNames",
+          "documentation":"<p>The IPv4-only DNS name of the EC2 Instance Connect Endpoint.</p>",
+          "locationName":"ipv4"
+        },
+        "Dualstack":{
+          "shape":"InstanceConnectEndpointDnsNames",
+          "documentation":"<p>The dualstack DNS name of the EC2 Instance Connect Endpoint. A dualstack DNS name supports connections from both IPv4 and IPv6 clients.</p>",
+          "locationName":"dualstack"
+        }
+      },
+      "documentation":"<p>The public DNS names of the endpoint, including IPv4-only and dualstack DNS names.</p>"
+    },
     "InstanceConnectEndpointSet":{
       "type":"list",
       "member":{
@@ -37284,7 +41588,7 @@
         },
         "InstanceTags":{
           "shape":"TagList",
-          "documentation":"<p>The instance tags to associate with the event window. Any instances associated with the tags will be associated with the event window.</p>",
+          "documentation":"<p>The instance tags to associate with the event window. Any instances associated with the tags will be associated with the event window.</p> <p>Note that while you can't create tag keys beginning with <code>aws:</code>, you can specify existing Amazon Web Services managed tag keys (with the <code>aws:</code> prefix) when specifying them as targets to associate with the event window.</p>",
           "locationName":"InstanceTag"
         },
         "DedicatedHostIds":{
@@ -37305,7 +41609,7 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>The instance tags associated with the event window. Any instances associated with the tags will be associated with the event window.</p>",
+          "documentation":"<p>The instance tags associated with the event window. Any instances associated with the tags will be associated with the event window.</p> <p>Note that while you can't create tag keys beginning with <code>aws:</code>, you can specify existing Amazon Web Services managed tag keys (with the <code>aws:</code> prefix) when specifying them as targets to associate with the event window.</p>",
           "locationName":"tagSet"
         },
         "DedicatedHostIds":{
@@ -37697,6 +42001,11 @@
           "shape":"InstanceAutoRecoveryState",
           "documentation":"<p>Provides information on the current automatic recovery behavior of your instance.</p>",
           "locationName":"autoRecovery"
+        },
+        "RebootMigration":{
+          "shape":"InstanceRebootMigrationState",
+          "documentation":"<p>Specifies whether to attempt reboot migration during a user-initiated reboot of an instance that has a scheduled <code>system-reboot</code> event:</p> <ul> <li> <p> <code>default</code> - Amazon EC2 attempts to migrate the instance to new hardware (reboot migration). If successful, the <code>system-reboot</code> event is cleared. If unsuccessful, an in-place reboot occurs and the event remains scheduled.</p> </li> <li> <p> <code>disabled</code> - Amazon EC2 keeps the instance on the same hardware (in-place reboot). The <code>system-reboot</code> event remains scheduled.</p> </li> </ul> <p>This setting only applies to supported instances that have a scheduled reboot event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration\">Enable or disable reboot migration</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"rebootMigration"
         }
       },
       "documentation":"<p>The maintenance options for the instance.</p>"
@@ -37961,7 +42270,7 @@
         },
         "InterfaceType":{
           "shape":"String",
-          "documentation":"<p>The type of network interface.</p> <p>Valid values: <code>interface</code> | <code>efa</code> | <code>efa-only</code> | <code>trunk</code> </p>",
+          "documentation":"<p>The type of network interface.</p> <p>Valid values: <code>interface</code> | <code>efa</code> | <code>efa-only</code> | <code>evs</code> | <code>trunk</code> </p>",
           "locationName":"interfaceType"
         },
         "Ipv4Prefixes":{
@@ -38055,6 +42364,11 @@
           "shape":"InstanceAttachmentEnaSrdSpecification",
           "documentation":"<p>Contains the ENA Express settings for the network interface that's attached to the instance.</p>",
           "locationName":"enaSrdSpecification"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues created with the instance.</p>",
+          "locationName":"enaQueueCount"
         }
       },
       "documentation":"<p>Describes a network interface attachment.</p>"
@@ -38123,7 +42437,7 @@
         },
         "SecondaryPrivateIpAddressCount":{
           "shape":"Integer",
-          "documentation":"<p>The number of secondary private IPv4 addresses. You can't specify this option and specify more than one private IP address using the private IP addresses option. You cannot specify this option if you're launching more than one instance in a <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances</a> request.</p>",
+          "documentation":"<p>The number of secondary private IPv4 addresses. You can’t specify this parameter and also specify a secondary private IP address using the <code>PrivateIpAddress</code> parameter.</p>",
           "locationName":"secondaryPrivateIpAddressCount"
         },
         "SubnetId":{
@@ -38172,6 +42486,10 @@
         "ConnectionTrackingSpecification":{
           "shape":"ConnectionTrackingSpecificationRequest",
           "documentation":"<p>A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts\">Connection tracking timeouts</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues to be created with the instance.</p>"
         }
       },
       "documentation":"<p>Describes a network interface.</p>"
@@ -38237,6 +42555,13 @@
         "locationName":"item"
       }
     },
+    "InstanceRebootMigrationState":{
+      "type":"string",
+      "enum":[
+        "disabled",
+        "default"
+      ]
+    },
     "InstanceRequirements":{
       "type":"structure",
       "members":{
@@ -38322,7 +42647,7 @@
         },
         "AcceleratorTypes":{
           "shape":"AcceleratorTypeSet",
-          "documentation":"<p>The accelerator types that must be on the instance type.</p> <ul> <li> <p>For instance types with GPU accelerators, specify <code>gpu</code>.</p> </li> <li> <p>For instance types with FPGA accelerators, specify <code>fpga</code>.</p> </li> </ul> <p>Default: Any accelerator type</p>",
+          "documentation":"<p>The accelerator types that must be on the instance type.</p> <ul> <li> <p>For instance types with FPGA accelerators, specify <code>fpga</code>.</p> </li> <li> <p>For instance types with GPU accelerators, specify <code>gpu</code>.</p> </li> <li> <p>For instance types with Inference accelerators, specify <code>inference</code>.</p> </li> </ul> <p>Default: Any accelerator type</p>",
           "locationName":"acceleratorTypeSet"
         },
         "AcceleratorCount":{
@@ -38364,6 +42689,11 @@
           "shape":"BaselinePerformanceFactors",
           "documentation":"<p>The baseline performance to consider, using an instance family as a baseline reference. The instance family establishes the lowest acceptable level of performance. Amazon EC2 uses this baseline to guide instance type selection, but there is no guarantee that the selected instance types will always exceed the baseline for every application. Currently, this parameter only supports CPU performance as a baseline performance factor. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-abis-performance-protection\">Performance protection</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"baselinePerformanceFactors"
+        },
+        "RequireEncryptionInTransit":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether instance types must support encrypting in-transit traffic between instances. For more information, including the supported instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit\">Encryption in transit</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>",
+          "locationName":"requireEncryptionInTransit"
         }
       },
       "documentation":"<p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes.</p> <p>You must specify <code>VCpuCount</code> and <code>MemoryMiB</code>. All other attributes are optional. Any unspecified optional attribute is set to its default.</p> <p>When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.</p> <p>To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request:</p> <ul> <li> <p> <code>AllowedInstanceTypes</code> - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.</p> </li> <li> <p> <code>ExcludedInstanceTypes</code> - The instance types to exclude from the list, even if they match your specified attributes.</p> </li> </ul> <note> <p>If you specify <code>InstanceRequirements</code>, you can't specify <code>InstanceType</code>.</p> <p>Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html\">launch instance wizard</a> or with the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances API</a>, you can't specify <code>InstanceRequirements</code>.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html\">Create mixed instances group using attribute-based instance type selection</a> in the <i>Amazon EC2 Auto Scaling User Guide</i>, and also <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html\">Specify attributes for instance type selection for EC2 Fleet or Spot Fleet</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html\">Spot placement score</a> in the <i>Amazon EC2 User Guide</i>.</p>"
@@ -38445,7 +42775,7 @@
         },
         "AcceleratorTypes":{
           "shape":"AcceleratorTypeSet",
-          "documentation":"<p>The accelerator types that must be on the instance type.</p> <ul> <li> <p>To include instance types with GPU hardware, specify <code>gpu</code>.</p> </li> <li> <p>To include instance types with FPGA hardware, specify <code>fpga</code>.</p> </li> </ul> <p>Default: Any accelerator type</p>",
+          "documentation":"<p>The accelerator types that must be on the instance type.</p> <ul> <li> <p>For instance types with FPGA accelerators, specify <code>fpga</code>.</p> </li> <li> <p>For instance types with GPU accelerators, specify <code>gpu</code>.</p> </li> <li> <p>For instance types with Inference accelerators, specify <code>inference</code>.</p> </li> </ul> <p>Default: Any accelerator type</p>",
           "locationName":"AcceleratorType"
         },
         "AcceleratorCount":{
@@ -38482,6 +42812,10 @@
         "BaselinePerformanceFactors":{
           "shape":"BaselinePerformanceFactorsRequest",
           "documentation":"<p>The baseline performance to consider, using an instance family as a baseline reference. The instance family establishes the lowest acceptable level of performance. Amazon EC2 uses this baseline to guide instance type selection, but there is no guarantee that the selected instance types will always exceed the baseline for every application. Currently, this parameter only supports CPU performance as a baseline performance factor. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-abis-performance-protection\">Performance protection</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "RequireEncryptionInTransit":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether instance types must support encrypting in-transit traffic between instances. For more information, including the supported instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit\">Encryption in transit</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>"
         }
       },
       "documentation":"<p>The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes.</p> <p>You must specify <code>VCpuCount</code> and <code>MemoryMiB</code>. All other attributes are optional. Any unspecified optional attribute is set to its default.</p> <p>When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values.</p> <p>To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request:</p> <ul> <li> <p> <code>AllowedInstanceTypes</code> - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes.</p> </li> <li> <p> <code>ExcludedInstanceTypes</code> - The instance types to exclude from the list, even if they match your specified attributes.</p> </li> </ul> <note> <p>If you specify <code>InstanceRequirements</code>, you can't specify <code>InstanceType</code>.</p> <p>Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html\">launch instance wizard</a>, or with the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html\">RunInstances</a> API or <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html\">AWS::EC2::Instance</a> Amazon Web Services CloudFormation resource, you can't specify <code>InstanceRequirements</code>.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html\">Specify attributes for instance type selection for EC2 Fleet or Spot Fleet</a> and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html\">Spot placement score</a> in the <i>Amazon EC2 User Guide</i>.</p>"
@@ -38596,6 +42930,11 @@
           "documentation":"<p>The Availability Zone of the instance.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone of the instance.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "OutpostArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost.</p>",
@@ -38810,7 +43149,7 @@
         },
         "NetworkNodes":{
           "shape":"NetworkNodesList",
-          "documentation":"<p>The network nodes. The nodes are hashed based on your account. Instances from different accounts running under the same server will return a different hashed list of strings.</p>",
+          "documentation":"<p>The network nodes. The nodes are hashed based on your account. Instances from different accounts running under the same server will return a different hashed list of strings.</p> <p>The value is <code>null</code> or empty if:</p> <ul> <li> <p>The instance type is not supported.</p> </li> <li> <p>The instance is in a state other than <code>running</code>.</p> </li> </ul>",
           "locationName":"networkNodeSet"
         },
         "AvailabilityZone":{
@@ -38822,6 +43161,11 @@
           "shape":"String",
           "documentation":"<p>The ID of the Availability Zone or Local Zone that the instance is in.</p>",
           "locationName":"zoneId"
+        },
+        "CapacityBlockId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Capacity Block. This parameter is only supported for UltraServer instances and identifies instances within the UltraServer domain.</p>",
+          "locationName":"capacityBlockId"
         }
       },
       "documentation":"<p>Information about the instance topology.</p>"
@@ -39718,7 +44062,202 @@
         "p5en.48xlarge",
         "f2.12xlarge",
         "f2.48xlarge",
-        "trn2.48xlarge"
+        "trn2.48xlarge",
+        "c7i-flex.12xlarge",
+        "c7i-flex.16xlarge",
+        "m7i-flex.12xlarge",
+        "m7i-flex.16xlarge",
+        "i7ie.metal-24xl",
+        "i7ie.metal-48xl",
+        "i8g.48xlarge",
+        "c8gd.medium",
+        "c8gd.large",
+        "c8gd.xlarge",
+        "c8gd.2xlarge",
+        "c8gd.4xlarge",
+        "c8gd.8xlarge",
+        "c8gd.12xlarge",
+        "c8gd.16xlarge",
+        "c8gd.24xlarge",
+        "c8gd.48xlarge",
+        "c8gd.metal-24xl",
+        "c8gd.metal-48xl",
+        "i7i.large",
+        "i7i.xlarge",
+        "i7i.2xlarge",
+        "i7i.4xlarge",
+        "i7i.8xlarge",
+        "i7i.12xlarge",
+        "i7i.16xlarge",
+        "i7i.24xlarge",
+        "i7i.48xlarge",
+        "i7i.metal-24xl",
+        "i7i.metal-48xl",
+        "p6-b200.48xlarge",
+        "m8gd.medium",
+        "m8gd.large",
+        "m8gd.xlarge",
+        "m8gd.2xlarge",
+        "m8gd.4xlarge",
+        "m8gd.8xlarge",
+        "m8gd.12xlarge",
+        "m8gd.16xlarge",
+        "m8gd.24xlarge",
+        "m8gd.48xlarge",
+        "m8gd.metal-24xl",
+        "m8gd.metal-48xl",
+        "r8gd.medium",
+        "r8gd.large",
+        "r8gd.xlarge",
+        "r8gd.2xlarge",
+        "r8gd.4xlarge",
+        "r8gd.8xlarge",
+        "r8gd.12xlarge",
+        "r8gd.16xlarge",
+        "r8gd.24xlarge",
+        "r8gd.48xlarge",
+        "r8gd.metal-24xl",
+        "r8gd.metal-48xl",
+        "c8gn.medium",
+        "c8gn.large",
+        "c8gn.xlarge",
+        "c8gn.2xlarge",
+        "c8gn.4xlarge",
+        "c8gn.8xlarge",
+        "c8gn.12xlarge",
+        "c8gn.16xlarge",
+        "c8gn.24xlarge",
+        "c8gn.48xlarge",
+        "c8gn.metal-24xl",
+        "c8gn.metal-48xl",
+        "f2.6xlarge",
+        "p6e-gb200.36xlarge",
+        "g6f.large",
+        "g6f.xlarge",
+        "g6f.2xlarge",
+        "g6f.4xlarge",
+        "gr6f.4xlarge",
+        "p5.4xlarge",
+        "r8i.large",
+        "r8i.xlarge",
+        "r8i.2xlarge",
+        "r8i.4xlarge",
+        "r8i.8xlarge",
+        "r8i.12xlarge",
+        "r8i.16xlarge",
+        "r8i.24xlarge",
+        "r8i.32xlarge",
+        "r8i.48xlarge",
+        "r8i.96xlarge",
+        "r8i.metal-48xl",
+        "r8i.metal-96xl",
+        "r8i-flex.large",
+        "r8i-flex.xlarge",
+        "r8i-flex.2xlarge",
+        "r8i-flex.4xlarge",
+        "r8i-flex.8xlarge",
+        "r8i-flex.12xlarge",
+        "r8i-flex.16xlarge",
+        "m8i.large",
+        "m8i.xlarge",
+        "m8i.2xlarge",
+        "m8i.4xlarge",
+        "m8i.8xlarge",
+        "m8i.12xlarge",
+        "m8i.16xlarge",
+        "m8i.24xlarge",
+        "m8i.32xlarge",
+        "m8i.48xlarge",
+        "m8i.96xlarge",
+        "m8i.metal-48xl",
+        "m8i.metal-96xl",
+        "m8i-flex.large",
+        "m8i-flex.xlarge",
+        "m8i-flex.2xlarge",
+        "m8i-flex.4xlarge",
+        "m8i-flex.8xlarge",
+        "m8i-flex.12xlarge",
+        "m8i-flex.16xlarge",
+        "i8ge.large",
+        "i8ge.xlarge",
+        "i8ge.2xlarge",
+        "i8ge.3xlarge",
+        "i8ge.6xlarge",
+        "i8ge.12xlarge",
+        "i8ge.18xlarge",
+        "i8ge.24xlarge",
+        "i8ge.48xlarge",
+        "i8ge.metal-24xl",
+        "i8ge.metal-48xl",
+        "mac-m4.metal",
+        "mac-m4pro.metal",
+        "r8gn.medium",
+        "r8gn.large",
+        "r8gn.xlarge",
+        "r8gn.2xlarge",
+        "r8gn.4xlarge",
+        "r8gn.8xlarge",
+        "r8gn.12xlarge",
+        "r8gn.16xlarge",
+        "r8gn.24xlarge",
+        "r8gn.48xlarge",
+        "r8gn.metal-24xl",
+        "r8gn.metal-48xl",
+        "c8i.large",
+        "c8i.xlarge",
+        "c8i.2xlarge",
+        "c8i.4xlarge",
+        "c8i.8xlarge",
+        "c8i.12xlarge",
+        "c8i.16xlarge",
+        "c8i.24xlarge",
+        "c8i.32xlarge",
+        "c8i.48xlarge",
+        "c8i.96xlarge",
+        "c8i.metal-48xl",
+        "c8i.metal-96xl",
+        "c8i-flex.large",
+        "c8i-flex.xlarge",
+        "c8i-flex.2xlarge",
+        "c8i-flex.4xlarge",
+        "c8i-flex.8xlarge",
+        "c8i-flex.12xlarge",
+        "c8i-flex.16xlarge",
+        "r8gb.medium",
+        "r8gb.large",
+        "r8gb.xlarge",
+        "r8gb.2xlarge",
+        "r8gb.4xlarge",
+        "r8gb.8xlarge",
+        "r8gb.12xlarge",
+        "r8gb.16xlarge",
+        "r8gb.24xlarge",
+        "r8gb.metal-24xl",
+        "m8a.medium",
+        "m8a.large",
+        "m8a.xlarge",
+        "m8a.2xlarge",
+        "m8a.4xlarge",
+        "m8a.8xlarge",
+        "m8a.12xlarge",
+        "m8a.16xlarge",
+        "m8a.24xlarge",
+        "m8a.48xlarge",
+        "m8a.metal-24xl",
+        "m8a.metal-48xl",
+        "trn2.3xlarge",
+        "r8a.medium",
+        "r8a.large",
+        "r8a.xlarge",
+        "r8a.2xlarge",
+        "r8a.4xlarge",
+        "r8a.8xlarge",
+        "r8a.12xlarge",
+        "r8a.16xlarge",
+        "r8a.24xlarge",
+        "r8a.48xlarge",
+        "r8a.metal-24xl",
+        "r8a.metal-48xl"
       ]
     },
     "InstanceTypeHypervisor":{
@@ -39880,6 +44419,11 @@
           "shape":"PhcSupport",
           "documentation":"<p>Indicates whether a local Precision Time Protocol (PTP) hardware clock (PHC) is supported.</p>",
           "locationName":"phcSupport"
+        },
+        "RebootMigrationSupport":{
+          "shape":"RebootMigrationSupport",
+          "documentation":"<p>Indicates whether reboot migration during a user-initiated reboot is supported for instances that have a scheduled <code>system-reboot</code> event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration\">Enable or disable reboot migration</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"rebootMigrationSupport"
         }
       },
       "documentation":"<p>Describes the instance type.</p>"
@@ -40179,7 +44723,7 @@
         },
         "CidrIp":{
           "shape":"String",
-          "documentation":"<p>The IPv4 address range. You can either specify a CIDR block or a source security group, not both. To specify a single IPv4 address, use the /32 prefix length.</p>",
+          "documentation":"<p>The IPv4 address range. You can either specify a CIDR block or a source security group, not both. To specify a single IPv4 address, use the /32 prefix length.</p> <note> <p> Amazon Web Services <a href=\"https://en.wikipedia.org/wiki/Canonicalization\">canonicalizes</a> IPv4 and IPv6 CIDRs. For example, if you specify 100.68.0.18/18 for the CIDR block, Amazon Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any subsequent DescribeSecurityGroups and DescribeSecurityGroupRules calls will return the canonicalized form of the CIDR block. Additionally, if you attempt to add another rule with the non-canonical form of the CIDR (such as 100.68.0.18/18) and there is already a rule for the canonicalized form of the CIDR block (such as 100.68.0.0/18), the API throws an duplicate rule error.</p> </note>",
           "locationName":"cidrIp"
         }
       },
@@ -40294,6 +44838,11 @@
           "shape":"Boolean",
           "documentation":"<p>Enable this option to use your own GUA ranges as private IPv6 addresses. This option is disabled by default.</p>",
           "locationName":"enablePrivateGua"
+        },
+        "MeteredAccount":{
+          "shape":"IpamMeteredAccount",
+          "documentation":"<p>A metered account is an Amazon Web Services account that is charged for active IP addresses managed in IPAM. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html\">Enable cost distribution</a> in the <i>Amazon VPC IPAM User Guide</i>.</p> <p>Possible values:</p> <ul> <li> <p> <code>ipam-owner</code> (default): The Amazon Web Services account which owns the IPAM is charged for all active IP addresses managed in IPAM.</p> </li> <li> <p> <code>resource-owner</code>: The Amazon Web Services account that owns the IP address is charged for the active IP address.</p> </li> </ul>",
+          "locationName":"meteredAccount"
         }
       },
       "documentation":"<p>IPAM is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html\">What is IPAM?</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>"
@@ -40763,6 +45312,13 @@
       "max":1000,
       "min":5
     },
+    "IpamMeteredAccount":{
+      "type":"string",
+      "enum":[
+        "ipam-owner",
+        "resource-owner"
+      ]
+    },
     "IpamNetmaskLength":{
       "type":"integer",
       "max":128,
@@ -41182,6 +45738,416 @@
         "restore-in-progress"
       ]
     },
+    "IpamPrefixListResolver":{
+      "type":"structure",
+      "members":{
+        "OwnerId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the IPAM prefix list resolver.</p>",
+          "locationName":"ownerId"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver.</p>",
+          "locationName":"ipamPrefixListResolverId"
+        },
+        "IpamPrefixListResolverArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IPAM prefix list resolver.</p>",
+          "locationName":"ipamPrefixListResolverArn"
+        },
+        "IpamArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IPAM associated with this resolver.</p>",
+          "locationName":"ipamArn"
+        },
+        "IpamRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region where the associated IPAM is located.</p>",
+          "locationName":"ipamRegion"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>The description of the IPAM prefix list resolver.</p>",
+          "locationName":"description"
+        },
+        "AddressFamily":{
+          "shape":"AddressFamily",
+          "documentation":"<p>The address family (IPv4 or IPv6) for the IPAM prefix list resolver.</p>",
+          "locationName":"addressFamily"
+        },
+        "State":{
+          "shape":"IpamPrefixListResolverState",
+          "documentation":"<p>The current state of the IPAM prefix list resolver. Valid values include <code>create-in-progress</code>, <code>create-complete</code>, <code>create-failed</code>, <code>modify-in-progress</code>, <code>modify-complete</code>, <code>modify-failed</code>, <code>delete-in-progress</code>, <code>delete-complete</code>, and <code>delete-failed</code>.</p>",
+          "locationName":"state"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags assigned to the IPAM prefix list resolver.</p>",
+          "locationName":"tagSet"
+        },
+        "LastVersionCreationStatus":{
+          "shape":"IpamPrefixListResolverVersionCreationStatus",
+          "documentation":"<p>The status for the last time a version was created.</p> <p>Each version is a snapshot of what CIDRs matched your rules at that moment in time. The version number increments every time the CIDR list changes due to infrastructure changes.</p>",
+          "locationName":"lastVersionCreationStatus"
+        },
+        "LastVersionCreationStatusMessage":{
+          "shape":"String",
+          "documentation":"<p>The status message for the last time a version was created.</p> <p>Each version is a snapshot of what CIDRs matched your rules at that moment in time. The version number increments every time the CIDR list changes due to infrastructure changes.</p>",
+          "locationName":"lastVersionCreationStatusMessage"
+        }
+      },
+      "documentation":"<p>Describes an IPAM prefix list resolver.</p> <p>An IPAM prefix list resolver is a component that manages the synchronization between IPAM's CIDR selection rules and customer-managed prefix lists. It automates connectivity configurations by selecting CIDRs from IPAM's database based on your business logic and synchronizing them with prefix lists used in resources such as VPC route tables and security groups.</p>"
+    },
+    "IpamPrefixListResolverId":{"type":"string"},
+    "IpamPrefixListResolverRule":{
+      "type":"structure",
+      "members":{
+        "RuleType":{
+          "shape":"IpamPrefixListResolverRuleType",
+          "documentation":"<p>The type of CIDR selection rule. Valid values include <code>include</code> for selecting CIDRs that match the conditions, and <code>exclude</code> for excluding CIDRs that match the conditions.</p>",
+          "locationName":"ruleType"
+        },
+        "StaticCidr":{
+          "shape":"String",
+          "documentation":"<p>A fixed list of CIDRs that do not change (like a manual list replicated across Regions).</p>",
+          "locationName":"staticCidr"
+        },
+        "IpamScopeId":{
+          "shape":"IpamScopeId",
+          "documentation":"<p>The ID of the IPAM scope from which to select CIDRs. This determines whether to select from public or private IP address space.</p>",
+          "locationName":"ipamScopeId"
+        },
+        "ResourceType":{
+          "shape":"IpamResourceType",
+          "documentation":"<p>For rules of type <code>ipam-resource-cidr</code>, this is the resource type.</p>",
+          "locationName":"resourceType"
+        },
+        "Conditions":{
+          "shape":"IpamPrefixListResolverRuleConditionSet",
+          "documentation":"<p>The conditions that determine which CIDRs are selected by this rule. Conditions specify criteria such as resource type, tags, account IDs, and Regions.</p>",
+          "locationName":"conditionSet"
+        }
+      },
+      "documentation":"<p>Describes a CIDR selection rule.</p> <p>CIDR selection rules define the business logic for selecting CIDRs from IPAM. If a CIDR matches any of the rules, it will be included. If a rule has multiple conditions, the CIDR has to match every condition of that rule. You can create a prefix list resolver without any CIDR selection rules, but it will generate empty versions (containing no CIDRs) until you add rules.</p>"
+    },
+    "IpamPrefixListResolverRuleCondition":{
+      "type":"structure",
+      "members":{
+        "Operation":{
+          "shape":"IpamPrefixListResolverRuleConditionOperation",
+          "documentation":"<p>The operation to perform when evaluating this condition. Valid values include <code>equals</code>, <code>not-equals</code>, <code>contains</code>, and <code>not-contains</code>.</p>",
+          "locationName":"operation"
+        },
+        "IpamPoolId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the IPAM pool to match against. This condition selects CIDRs that belong to the specified IPAM pool.</p>",
+          "locationName":"ipamPoolId"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services resource to match against. This condition selects CIDRs associated with the specified resource.</p>",
+          "locationName":"resourceId"
+        },
+        "ResourceOwner":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID that owns the resources to match against. This condition selects CIDRs from resources owned by the specified account.</p>",
+          "locationName":"resourceOwner"
+        },
+        "ResourceRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region where the resources are located. This condition selects CIDRs from resources in the specified Region.</p>",
+          "locationName":"resourceRegion"
+        },
+        "ResourceTag":{
+          "shape":"IpamResourceTag",
+          "documentation":"<p>A tag key-value pair to match against. This condition selects CIDRs from resources that have the specified tag.</p>",
+          "locationName":"resourceTag"
+        },
+        "Cidr":{
+          "shape":"String",
+          "documentation":"<p>A CIDR block to match against. This condition selects CIDRs that fall within or match the specified CIDR range.</p>",
+          "locationName":"cidr"
+        }
+      },
+      "documentation":"<p>Describes a condition within a CIDR selection rule. Conditions define the criteria for selecting CIDRs from IPAM's database based on resource attributes.</p> <p>CIDR selection rules define the business logic for selecting CIDRs from IPAM. If a CIDR matches any of the rules, it will be included. If a rule has multiple conditions, the CIDR has to match every condition of that rule. You can create a prefix list resolver without any CIDR selection rules, but it will generate empty versions (containing no CIDRs) until you add rules.</p> <p>There are three rule types. Only 2 of the 3 rule types support conditions - <b>IPAM pool CIDR</b> and <b>Scope resource CIDR</b>. <b>Static CIDR</b> rules cannot have conditions.</p> <ul> <li> <p> <b>Static CIDR</b>: A fixed list of CIDRs that do not change (like a manual list replicated across Regions)</p> </li> <li> <p> <b>IPAM pool CIDR</b>: CIDRs from specific IPAM pools (like all CIDRs from your IPAM production pool)</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Conditions:</b> </p> <ul> <li> <p> <b>Property</b> </p> <ul> <li> <p> <b>IPAM pool ID</b>: Select an IPAM pool that contains the resources</p> </li> <li> <p> <b>CIDR</b> (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> <li> <p> <b>Scope resource CIDR</b>: CIDRs from Amazon Web Services resources like VPCs, subnets, EIPs within an IPAM scope</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Resource type</b>: Select a resource, like a VPC or subnet.</p> </li> <li> <p> <b>Conditions</b>:</p> <ul> <li> <p> <b>Property</b>:</p> <ul> <li> <p>Resource ID: The unique ID of a resource (like vpc-1234567890abcdef0)</p> </li> <li> <p>Resource owner (like 111122223333)</p> </li> <li> <p>Resource region (like us-east-1)</p> </li> <li> <p>Resource tag (like key: name, value: dev-vpc-1)</p> </li> <li> <p>CIDR (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> </ul>"
+    },
+    "IpamPrefixListResolverRuleConditionOperation":{
+      "type":"string",
+      "enum":[
+        "equals",
+        "not-equals",
+        "subnet-of"
+      ]
+    },
+    "IpamPrefixListResolverRuleConditionRequest":{
+      "type":"structure",
+      "required":["Operation"],
+      "members":{
+        "Operation":{
+          "shape":"IpamPrefixListResolverRuleConditionOperation",
+          "documentation":"<p>The operation to perform when evaluating this condition.</p>"
+        },
+        "IpamPoolId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the IPAM pool to match against. This condition selects CIDRs that belong to the specified IPAM pool.</p>"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services resource to match against. This condition selects CIDRs associated with the specified resource.</p>"
+        },
+        "ResourceOwner":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID that owns the resources to match against. This condition selects CIDRs from resources owned by the specified account.</p>"
+        },
+        "ResourceRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region where the resources are located. This condition selects CIDRs from resources in the specified Region.</p>"
+        },
+        "ResourceTag":{
+          "shape":"RequestIpamResourceTag",
+          "documentation":"<p>A tag key-value pair to match against. This condition selects CIDRs from resources that have the specified tag.</p>"
+        },
+        "Cidr":{
+          "shape":"String",
+          "documentation":"<p>A CIDR block to match against. This condition selects CIDRs that fall within or match the specified CIDR range.</p>"
+        }
+      },
+      "documentation":"<p>Describes a condition used when creating or modifying resolver rules.</p> <p>CIDR selection rules define the business logic for selecting CIDRs from IPAM. If a CIDR matches any of the rules, it will be included. If a rule has multiple conditions, the CIDR has to match every condition of that rule. You can create a prefix list resolver without any CIDR selection rules, but it will generate empty versions (containing no CIDRs) until you add rules.</p> <p>There are three rule types. Only 2 of the 3 rule types support conditions - <b>IPAM pool CIDR</b> and <b>Scope resource CIDR</b>. <b>Static CIDR</b> rules cannot have conditions.</p> <ul> <li> <p> <b>Static CIDR</b>: A fixed list of CIDRs that do not change (like a manual list replicated across Regions)</p> </li> <li> <p> <b>IPAM pool CIDR</b>: CIDRs from specific IPAM pools (like all CIDRs from your IPAM production pool)</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Conditions:</b> </p> <ul> <li> <p> <b>Property</b> </p> <ul> <li> <p> <b>IPAM pool ID</b>: Select an IPAM pool that contains the resources</p> </li> <li> <p> <b>CIDR</b> (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> <li> <p> <b>Scope resource CIDR</b>: CIDRs from Amazon Web Services resources like VPCs, subnets, EIPs within an IPAM scope</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Resource type</b>: Select a resource, like a VPC or subnet.</p> </li> <li> <p> <b>Conditions</b>:</p> <ul> <li> <p> <b>Property</b>:</p> <ul> <li> <p>Resource ID: The unique ID of a resource (like vpc-1234567890abcdef0)</p> </li> <li> <p>Resource owner (like 111122223333)</p> </li> <li> <p>Resource region (like us-east-1)</p> </li> <li> <p>Resource tag (like key: name, value: dev-vpc-1)</p> </li> <li> <p>CIDR (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> </ul>"
+    },
+    "IpamPrefixListResolverRuleConditionRequestSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverRuleConditionRequest",
+        "locationName":"Condition"
+      }
+    },
+    "IpamPrefixListResolverRuleConditionSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverRuleCondition",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverRuleRequest":{
+      "type":"structure",
+      "required":["RuleType"],
+      "members":{
+        "RuleType":{
+          "shape":"IpamPrefixListResolverRuleType",
+          "documentation":"<p>The type of CIDR selection rule. Valid values include <code>include</code> for selecting CIDRs that match the conditions, and <code>exclude</code> for excluding CIDRs that match the conditions.</p>"
+        },
+        "StaticCidr":{
+          "shape":"String",
+          "documentation":"<p>A fixed list of CIDRs that do not change (like a manual list replicated across Regions).</p>"
+        },
+        "IpamScopeId":{
+          "shape":"IpamScopeId",
+          "documentation":"<p>The ID of the IPAM scope from which to select CIDRs. This determines whether to select from public or private IP address space.</p>"
+        },
+        "ResourceType":{
+          "shape":"IpamResourceType",
+          "documentation":"<p>For rules of type <code>ipam-resource-cidr</code>, this is the resource type.</p>"
+        },
+        "Conditions":{
+          "shape":"IpamPrefixListResolverRuleConditionRequestSet",
+          "documentation":"<p>The conditions that determine which CIDRs are selected by this rule. Conditions specify criteria such as resource type, tags, account IDs, and Regions.</p>",
+          "locationName":"Condition"
+        }
+      },
+      "documentation":"<p>Describes a CIDR selection rule to include in a request. This is used when creating or modifying resolver rules.</p> <p>CIDR selection rules define the business logic for selecting CIDRs from IPAM. If a CIDR matches any of the rules, it will be included. If a rule has multiple conditions, the CIDR has to match every condition of that rule. You can create a prefix list resolver without any CIDR selection rules, but it will generate empty versions (containing no CIDRs) until you add rules.</p> <p>There are three rule types. Only 2 of the 3 rule types support conditions - <b>IPAM pool CIDR</b> and <b>Scope resource CIDR</b>. <b>Static CIDR</b> rules cannot have conditions.</p> <ul> <li> <p> <b>Static CIDR</b>: A fixed list of CIDRs that do not change (like a manual list replicated across Regions)</p> </li> <li> <p> <b>IPAM pool CIDR</b>: CIDRs from specific IPAM pools (like all CIDRs from your IPAM production pool)</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Conditions:</b> </p> <ul> <li> <p> <b>Property</b> </p> <ul> <li> <p> <b>IPAM pool ID</b>: Select an IPAM pool that contains the resources</p> </li> <li> <p> <b>CIDR</b> (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> <li> <p> <b>Scope resource CIDR</b>: CIDRs from Amazon Web Services resources like VPCs, subnets, EIPs within an IPAM scope</p> <p>If you choose this option, choose the following:</p> <ul> <li> <p> <b>IPAM scope</b>: Select the IPAM scope to search for resources</p> </li> <li> <p> <b>Resource type</b>: Select a resource, like a VPC or subnet.</p> </li> <li> <p> <b>Conditions</b>:</p> <ul> <li> <p> <b>Property</b>:</p> <ul> <li> <p>Resource ID: The unique ID of a resource (like vpc-1234567890abcdef0)</p> </li> <li> <p>Resource owner (like 111122223333)</p> </li> <li> <p>Resource region (like us-east-1)</p> </li> <li> <p>Resource tag (like key: name, value: dev-vpc-1)</p> </li> <li> <p>CIDR (like 10.24.34.0/23)</p> </li> </ul> </li> <li> <p> <b>Operation</b>: Equals/Not equals</p> </li> <li> <p> <b>Value</b>: The value on which to match the condition</p> </li> </ul> </li> </ul> </li> </ul>"
+    },
+    "IpamPrefixListResolverRuleRequestSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverRuleRequest",
+        "locationName":"Rule"
+      }
+    },
+    "IpamPrefixListResolverRuleSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverRule",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverRuleType":{
+      "type":"string",
+      "enum":[
+        "static-cidr",
+        "ipam-resource-cidr",
+        "ipam-pool-cidr"
+      ]
+    },
+    "IpamPrefixListResolverSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolver",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverState":{
+      "type":"string",
+      "enum":[
+        "create-in-progress",
+        "create-complete",
+        "create-failed",
+        "modify-in-progress",
+        "modify-complete",
+        "modify-failed",
+        "delete-in-progress",
+        "delete-complete",
+        "delete-failed",
+        "isolate-in-progress",
+        "isolate-complete",
+        "restore-in-progress"
+      ]
+    },
+    "IpamPrefixListResolverTarget":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolverTargetId":{
+          "shape":"IpamPrefixListResolverTargetId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver target.</p>",
+          "locationName":"ipamPrefixListResolverTargetId"
+        },
+        "IpamPrefixListResolverTargetArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IPAM prefix list resolver target.</p>",
+          "locationName":"ipamPrefixListResolverTargetArn"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver associated with this target.</p>",
+          "locationName":"ipamPrefixListResolverId"
+        },
+        "OwnerId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the IPAM prefix list resolver target.</p>",
+          "locationName":"ownerId"
+        },
+        "PrefixListId":{
+          "shape":"PrefixListResourceId",
+          "documentation":"<p>The ID of the managed prefix list associated with this target.</p>",
+          "locationName":"prefixListId"
+        },
+        "PrefixListRegion":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Region where the prefix list associated with this target is located.</p>",
+          "locationName":"prefixListRegion"
+        },
+        "DesiredVersion":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The desired version of the prefix list that this target should synchronize with.</p>",
+          "locationName":"desiredVersion"
+        },
+        "LastSyncedVersion":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The version of the prefix list that was last successfully synchronized by this target.</p>",
+          "locationName":"lastSyncedVersion"
+        },
+        "TrackLatestVersion":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether this target automatically tracks the latest version of the prefix list.</p>",
+          "locationName":"trackLatestVersion"
+        },
+        "StateMessage":{
+          "shape":"String",
+          "documentation":"<p>A message describing the current state of the IPAM prefix list resolver target, including any error information.</p>",
+          "locationName":"stateMessage"
+        },
+        "State":{
+          "shape":"IpamPrefixListResolverTargetState",
+          "documentation":"<p>The current state of the IPAM prefix list resolver target. Valid values include <code>create-in-progress</code>, <code>create-complete</code>, <code>create-failed</code>, <code>modify-in-progress</code>, <code>modify-complete</code>, <code>modify-failed</code>, <code>delete-in-progress</code>, <code>delete-complete</code>, and <code>delete-failed</code>.</p>",
+          "locationName":"state"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags assigned to the IPAM prefix list resolver target.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>Describes an IPAM prefix list resolver target.</p> <p>An IPAM prefix list resolver target is an association between a specific customer-managed prefix list and an IPAM prefix list resolver. The target enables the resolver to synchronize CIDRs selected by its rules into the specified prefix list, which can then be referenced in Amazon Web Services resources.</p>"
+    },
+    "IpamPrefixListResolverTargetId":{"type":"string"},
+    "IpamPrefixListResolverTargetSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverTarget",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverTargetState":{
+      "type":"string",
+      "enum":[
+        "create-in-progress",
+        "create-complete",
+        "create-failed",
+        "modify-in-progress",
+        "modify-complete",
+        "modify-failed",
+        "sync-in-progress",
+        "sync-complete",
+        "sync-failed",
+        "delete-in-progress",
+        "delete-complete",
+        "delete-failed",
+        "isolate-in-progress",
+        "isolate-complete",
+        "restore-in-progress"
+      ]
+    },
+    "IpamPrefixListResolverVersion":{
+      "type":"structure",
+      "members":{
+        "Version":{
+          "shape":"Long",
+          "documentation":"<p>The version number of the IPAM prefix list resolver.</p> <p>Each version is a snapshot of what CIDRs matched your rules at that moment in time. The version number increments every time the CIDR list changes due to infrastructure changes.</p>",
+          "locationName":"version"
+        }
+      },
+      "documentation":"<p>Describes a version of an IPAM prefix list resolver.</p> <p>Each version is a snapshot of what CIDRs matched your rules at that moment in time. The version number increments every time the CIDR list changes due to infrastructure changes.</p> <p> <b>Version example:</b> </p> <p> <b>Initial State (Version 1)</b> </p> <p>Production environment:</p> <ul> <li> <p>vpc-prod-web (10.1.0.0/16) - tagged env=prod</p> </li> <li> <p>vpc-prod-db (10.2.0.0/16) - tagged env=prod</p> </li> </ul> <p>Resolver rule: Include all VPCs tagged env=prod</p> <p> <b>Version 1 CIDRs:</b> 10.1.0.0/16, 10.2.0.0/16</p> <p> <b>Infrastructure Change (Version 2)</b> </p> <p>New VPC added:</p> <ul> <li> <p>vpc-prod-api (10.3.0.0/16) - tagged env=prod</p> </li> </ul> <p>IPAM automatically detects the change and creates a new version.</p> <p> <b>Version 2 CIDRs:</b> 10.1.0.0/16, 10.2.0.0/16, 10.3.0.0/16</p>"
+    },
+    "IpamPrefixListResolverVersionCreationStatus":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "success",
+        "failure"
+      ]
+    },
+    "IpamPrefixListResolverVersionEntry":{
+      "type":"structure",
+      "members":{
+        "Cidr":{
+          "shape":"String",
+          "documentation":"<p>The CIDR block that was selected and synchronized in this resolver version.</p>",
+          "locationName":"cidr"
+        }
+      },
+      "documentation":"<p>Describes a CIDR entry in a specific version of an IPAM prefix list resolver. This represents a CIDR that was selected and synchronized at a particular point in time.</p>"
+    },
+    "IpamPrefixListResolverVersionEntrySet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverVersionEntry",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverVersionNumberSet":{
+      "type":"list",
+      "member":{
+        "shape":"Long",
+        "locationName":"item"
+      }
+    },
+    "IpamPrefixListResolverVersionSet":{
+      "type":"list",
+      "member":{
+        "shape":"IpamPrefixListResolverVersion",
+        "locationName":"item"
+      }
+    },
     "IpamPublicAddressAssociationStatus":{
       "type":"string",
       "enum":[
@@ -41478,7 +46444,7 @@
         },
         "State":{
           "shape":"IpamResourceDiscoveryAssociationState",
-          "documentation":"<p>The lifecycle state of the association when you associate or disassociate a resource discovery.</p> <ul> <li> <p> <code>associate-in-progress</code> - Resource discovery is being associated.</p> </li> <li> <p> <code>associate-complete</code> - Resource discovery association is complete.</p> </li> <li> <p> <code>associate-failed</code> - Resource discovery association has failed.</p> </li> <li> <p> <code>disassociate-in-progress</code> - Resource discovery is being disassociated.</p> </li> <li> <p> <code>disassociate-complete</code> - Resource discovery disassociation is complete.</p> </li> <li> <p> <code>disassociate-failed </code> - Resource discovery disassociation has failed.</p> </li> <li> <p> <code>isolate-in-progress</code> - Amazon Web Services account that created the resource discovery association has been removed and the resource discovery associatation is being isolated.</p> </li> <li> <p> <code>isolate-complete</code> - Resource discovery isolation is complete..</p> </li> <li> <p> <code>restore-in-progress</code> - Resource discovery is being restored.</p> </li> </ul>",
+          "documentation":"<p>The lifecycle state of the association when you associate or disassociate a resource discovery.</p> <ul> <li> <p> <code>associate-in-progress</code> - Resource discovery is being associated.</p> </li> <li> <p> <code>associate-complete</code> - Resource discovery association is complete.</p> </li> <li> <p> <code>associate-failed</code> - Resource discovery association has failed.</p> </li> <li> <p> <code>disassociate-in-progress</code> - Resource discovery is being disassociated.</p> </li> <li> <p> <code>disassociate-complete</code> - Resource discovery disassociation is complete.</p> </li> <li> <p> <code>disassociate-failed </code> - Resource discovery disassociation has failed.</p> </li> <li> <p> <code>isolate-in-progress</code> - Amazon Web Services account that created the resource discovery association has been removed and the resource discovery association is being isolated.</p> </li> <li> <p> <code>isolate-complete</code> - Resource discovery isolation is complete.</p> </li> <li> <p> <code>restore-in-progress</code> - Resource discovery is being restored.</p> </li> </ul>",
           "locationName":"state"
         },
         "Tags":{
@@ -41627,10 +46593,35 @@
           "shape":"TagList",
           "documentation":"<p>The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key <code>Owner</code> and the value <code>TeamA</code>, specify <code>tag:Owner</code> for the filter name and <code>TeamA</code> for the filter value.</p>",
           "locationName":"tagSet"
+        },
+        "ExternalAuthorityConfiguration":{
+          "shape":"IpamScopeExternalAuthorityConfiguration",
+          "documentation":"<p>The external authority configuration for this IPAM scope, if configured.</p> <p>The configuration that links an Amazon VPC IPAM scope to an external authority system. It specifies the type of external system and the external resource identifier that identifies your account or instance in that system.</p> <p>In IPAM, an external authority is a third-party IP address management system that provides CIDR blocks when you provision address space for top-level IPAM pools. This allows you to use your existing IP management system to control which address ranges are allocated to Amazon Web Services while using Amazon VPC IPAM to manage subnets within those ranges.</p>",
+          "locationName":"externalAuthorityConfiguration"
         }
       },
       "documentation":"<p>In IPAM, a scope is the highest-level container within IPAM. An IPAM contains two default scopes. Each scope represents the IP space for a single network. The private scope is intended for all private IP address space. The public scope is intended for all public IP address space. Scopes enable you to reuse IP addresses across multiple unconnected networks without causing IP address overlap or conflict.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/how-it-works-ipam.html\">How IPAM works</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>"
     },
+    "IpamScopeExternalAuthorityConfiguration":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"IpamScopeExternalAuthorityType",
+          "documentation":"<p>The type of external authority managing this scope. Currently supports <code>Infoblox</code> for integration with Infoblox Universal DDI.</p>",
+          "locationName":"type"
+        },
+        "ExternalResourceIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the external resource managing this scope. For Infoblox integrations, this is the Infoblox resource identifier in the format <code>&lt;version&gt;.identity.account.&lt;entity_realm&gt;.&lt;entity_id&gt;</code>.</p>",
+          "locationName":"externalResourceIdentifier"
+        }
+      },
+      "documentation":"<p>The configuration that links an Amazon VPC IPAM scope to an external authority system. It specifies the type of external system and the external resource identifier that identifies your account or instance in that system.</p> <p>In IPAM, an external authority is a third-party IP address management system that provides CIDR blocks when you provision address space for top-level IPAM pools. This allows you to use your existing IP management system to control which address ranges are allocated to Amazon Web Services while using Amazon VPC IPAM to manage subnets within those ranges.</p>"
+    },
+    "IpamScopeExternalAuthorityType":{
+      "type":"string",
+      "enum":["infoblox"]
+    },
     "IpamScopeId":{"type":"string"},
     "IpamScopeSet":{
       "type":"list",
@@ -41885,7 +46876,7 @@
           "documentation":"<p>The IPv6 prefix.</p>"
         }
       },
-      "documentation":"<p>Describes the IPv4 prefix option for a network interface.</p>"
+      "documentation":"<p>Describes the IPv6 prefix option for a network interface.</p>"
     },
     "Ipv6PrefixSpecificationResponse":{
       "type":"structure",
@@ -41915,7 +46906,7 @@
         },
         "CidrIpv6":{
           "shape":"String",
-          "documentation":"<p>The IPv6 address range. You can either specify a CIDR block or a source security group, not both. To specify a single IPv6 address, use the /128 prefix length.</p>",
+          "documentation":"<p>The IPv6 address range. You can either specify a CIDR block or a source security group, not both. To specify a single IPv6 address, use the /128 prefix length.</p> <note> <p> Amazon Web Services <a href=\"https://en.wikipedia.org/wiki/Canonicalization\">canonicalizes</a> IPv4 and IPv6 CIDRs. For example, if you specify 100.68.0.18/18 for the CIDR block, Amazon Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any subsequent DescribeSecurityGroups and DescribeSecurityGroupRules calls will return the canonicalized form of the CIDR block. Additionally, if you attempt to add another rule with the non-canonical form of the CIDR (such as 100.68.0.18/18) and there is already a rule for the canonicalized form of the CIDR block (such as 100.68.0.0/18), the API throws an duplicate rule error.</p> </note>",
           "locationName":"cidrIpv6"
         }
       },
@@ -42397,7 +47388,7 @@
         },
         "AmdSevSnp":{
           "shape":"AmdSevSnpSpecification",
-          "documentation":"<p>Indicates whether the instance is enabled for AMD SEV-SNP. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html\">AMD SEV-SNP</a>.</p>",
+          "documentation":"<p>Indicates whether the instance is enabled for AMD SEV-SNP. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html\">AMD SEV-SNP for Amazon EC2 instances</a>.</p>",
           "locationName":"amdSevSnp"
         }
       },
@@ -42416,7 +47407,7 @@
         },
         "AmdSevSnp":{
           "shape":"AmdSevSnpSpecification",
-          "documentation":"<p>Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html\">AMD SEV-SNP</a>.</p>"
+          "documentation":"<p>Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html\">AMD SEV-SNP for Amazon EC2 instances</a>.</p>"
         }
       },
       "documentation":"<p>The CPU options for the instance. Both the core count and threads per core must be specified in the request.</p>"
@@ -42463,6 +47454,11 @@
           "shape":"Integer",
           "documentation":"<p>The throughput that the volume supports, in MiB/s.</p>",
           "locationName":"throughput"
+        },
+        "VolumeInitializationRate":{
+          "shape":"Integer",
+          "documentation":"<p>The Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate) specified for the volume, in MiB/s. If no volume initialization rate was specified, the value is <code>null</code>.</p>",
+          "locationName":"volumeInitializationRate"
         }
       },
       "documentation":"<p>Describes a block device for an EBS volume.</p>"
@@ -42480,7 +47476,7 @@
         },
         "Iops":{
           "shape":"Integer",
-          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 16,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is supported for <code>io1</code>, <code>io2</code>, and <code>gp3</code> volumes only.</p>"
+          "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 80,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>This parameter is supported for <code>io1</code>, <code>io2</code>, and <code>gp3</code> volumes only.</p>"
         },
         "KmsKeyId":{
           "shape":"KmsKeyId",
@@ -42492,7 +47488,7 @@
         },
         "VolumeSize":{
           "shape":"Integer",
-          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. The following are the supported volumes sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code> and <code>gp3</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>"
+          "documentation":"<p>The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size. The following are the supported volumes sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>gp3</code>: 1 - 65,536 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul>"
         },
         "VolumeType":{
           "shape":"VolumeType",
@@ -42500,7 +47496,11 @@
         },
         "Throughput":{
           "shape":"Integer",
-          "documentation":"<p>The throughput to provision for a <code>gp3</code> volume, with a maximum of 1,000 MiB/s.</p> <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>"
+          "documentation":"<p>The throughput to provision for a <code>gp3</code> volume, with a maximum of 2,000 MiB/s.</p> <p>Valid Range: Minimum value of 125. Maximum value of 2,000.</p>"
+        },
+        "VolumeInitializationRate":{
+          "shape":"Integer",
+          "documentation":"<p>Specifies the Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate), in MiB/s, at which to download the snapshot blocks from Amazon S3 to the volume. This is also known as <i>volume initialization</i>. Specifying a volume initialization rate ensures that the volume is initialized at a predictable and consistent rate after creation.</p> <p>This parameter is supported only for volumes created from snapshots. Omit this parameter if:</p> <ul> <li> <p>You want to create the volume using fast snapshot restore. You must specify a snapshot that is enabled for fast snapshot restore. In this case, the volume is fully initialized at creation.</p> <note> <p>If you specify a snapshot that is enabled for fast snapshot restore and a volume initialization rate, the volume will be initialized at the specified rate instead of fast snapshot restore.</p> </note> </li> <li> <p>You want to create a volume that is initialized at the default rate.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\"> Initialize Amazon EBS volumes</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Valid range: 100 - 300 MiB/s</p>"
         }
       },
       "documentation":"<p>The parameters for a block device for an EBS volume.</p>"
@@ -42515,7 +47515,7 @@
         },
         "Count":{
           "shape":"LaunchTemplateElasticInferenceAcceleratorCount",
-          "documentation":"<p> The number of elastic inference accelerators to attach to the instance. </p> <p>Default: 1</p>"
+          "documentation":"<p>The number of elastic inference accelerators to attach to the instance. </p>"
         }
       },
       "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Describes an elastic inference accelerator. </p>"
@@ -42536,12 +47536,12 @@
       "members":{
         "Type":{
           "shape":"String",
-          "documentation":"<p> The type of elastic inference accelerator. The possible values are eia1.medium, eia1.large, and eia1.xlarge. </p>",
+          "documentation":"<p>The type of elastic inference accelerator. The possible values are eia1.medium, eia1.large, and eia1.xlarge. </p>",
           "locationName":"type"
         },
         "Count":{
           "shape":"Integer",
-          "documentation":"<p> The number of elastic inference accelerators to attach to the instance. </p> <p>Default: 1</p>",
+          "documentation":"<p>The number of elastic inference accelerators to attach to the instance. </p>",
           "locationName":"count"
         }
       },
@@ -42600,7 +47600,7 @@
           "documentation":"<p>To enable the instance for Amazon Web Services Nitro Enclaves, set this parameter to <code>true</code>.</p>"
         }
       },
-      "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html\">What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>"
+      "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html\">What is Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p>"
     },
     "LaunchTemplateErrorCode":{
       "type":"string",
@@ -42752,7 +47752,7 @@
         },
         "HttpPutResponseHopLimit":{
           "shape":"Integer",
-          "documentation":"<p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel.</p> <p>Default: 1</p> <p>Possible values: Integers from 1 to 64</p>",
+          "documentation":"<p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel.</p> <p>Possible values: Integers from 1 to 64</p>",
           "locationName":"httpPutResponseHopLimit"
         },
         "HttpEndpoint":{
@@ -42767,11 +47767,11 @@
         },
         "InstanceMetadataTags":{
           "shape":"LaunchTemplateInstanceMetadataTagsState",
-          "documentation":"<p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS\">Work with instance tags using the instance metadata</a>.</p> <p>Default: <code>disabled</code> </p>",
+          "documentation":"<p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-tags-in-IMDS.html\">View tags for your EC2 instances using instance metadata</a>.</p> <p>Default: <code>disabled</code> </p>",
           "locationName":"instanceMetadataTags"
         }
       },
-      "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Use instance metadata to manage your EC2 instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "LaunchTemplateInstanceMetadataOptionsRequest":{
       "type":"structure",
@@ -42794,10 +47794,10 @@
         },
         "InstanceMetadataTags":{
           "shape":"LaunchTemplateInstanceMetadataTagsState",
-          "documentation":"<p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS\">Work with instance tags using the instance metadata</a>.</p> <p>Default: <code>disabled</code> </p>"
+          "documentation":"<p>Set to <code>enabled</code> to allow access to instance tags from the instance metadata. Set to <code>disabled</code> to turn off access to instance tags from the instance metadata. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-tags-in-IMDS.html\">View tags for your EC2 instances using instance metadata</a>.</p> <p>Default: <code>disabled</code> </p>"
         }
       },
-      "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+      "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Use instance metadata to manage your EC2 instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
     },
     "LaunchTemplateInstanceMetadataOptionsState":{
       "type":"string",
@@ -42825,7 +47825,7 @@
       "members":{
         "AssociateCarrierIpAddress":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether to associate a Carrier IP address with eth0 for a new network interface.</p> <p>Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. For more information about Carrier IP addresses, see <a href=\"https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip\">Carrier IP addresses</a> in the <i>Wavelength Developer Guide</i>.</p>",
+          "documentation":"<p>Indicates whether to associate a Carrier IP address with eth0 for a new network interface.</p> <p>Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. For more information about Carrier IP addresses, see <a href=\"https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip\">Carrier IP address</a> in the <i>Wavelength Developer Guide</i>.</p>",
           "locationName":"associateCarrierIpAddress"
         },
         "AssociatePublicIpAddress":{
@@ -42932,6 +47932,11 @@
           "shape":"ConnectionTrackingSpecification",
           "documentation":"<p>A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts\">Idle connection tracking timeout</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"connectionTrackingSpecification"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues created with the instance.</p>",
+          "locationName":"enaQueueCount"
         }
       },
       "documentation":"<p>Describes a network interface.</p>"
@@ -42964,7 +47969,7 @@
         },
         "DeviceIndex":{
           "shape":"Integer",
-          "documentation":"<p>The device index for the network interface attachment. Each network interface requires a device index. If you create a launch template that includes secondary network interfaces but not a primary network interface, then you must add a primary network interface as a launch parameter when you launch an instance from the template.</p>"
+          "documentation":"<p>The device index for the network interface attachment. The primary network interface has a device index of 0. Each network interface is of type <code>interface</code>, you must specify a device index. If you create a launch template that includes secondary network interfaces but not a primary network interface, then you must add a primary network interface as a launch parameter when you launch an instance from the template.</p>"
         },
         "Groups":{
           "shape":"SecurityGroupIdStringList",
@@ -42973,7 +47978,7 @@
         },
         "InterfaceType":{
           "shape":"String",
-          "documentation":"<p>The type of network interface. To create an Elastic Fabric Adapter (EFA), specify <code>efa</code> or <code>efa</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html\">Elastic Fabric Adapter</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you are not creating an EFA, specify <code>interface</code> or omit this parameter.</p> <p>If you specify <code>efa-only</code>, do not assign any IP addresses to the network interface. EFA-only network interfaces do not support IP addresses.</p> <p>Valid values: <code>interface</code> | <code>efa</code> | <code>efa-only</code> </p>"
+          "documentation":"<p>The type of network interface. To create an Elastic Fabric Adapter (EFA), specify <code>efa</code> or <code>efa</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html\">Elastic Fabric Adapter for AI/ML and HPC workloads on Amazon EC2</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you are not creating an EFA, specify <code>interface</code> or omit this parameter.</p> <p>If you specify <code>efa-only</code>, do not assign any IP addresses to the network interface. EFA-only network interfaces do not support IP addresses.</p> <p>Valid values: <code>interface</code> | <code>efa</code> | <code>efa-only</code> </p>"
         },
         "Ipv6AddressCount":{
           "shape":"Integer",
@@ -43036,6 +48041,10 @@
         "ConnectionTrackingSpecification":{
           "shape":"ConnectionTrackingSpecificationRequest",
           "documentation":"<p>A security group connection tracking specification that enables you to set the timeout for connection tracking on an Elastic network interface. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts\">Idle connection tracking timeout</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues to be created with the instance.</p>"
         }
       },
       "documentation":"<p>The parameters for a network interface.</p>"
@@ -43172,6 +48181,11 @@
           "documentation":"<p>The Availability Zone of the instance.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone of the instance.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "Affinity":{
           "shape":"String",
           "documentation":"<p>The affinity setting for the instance on the Dedicated Host.</p>",
@@ -43220,7 +48234,11 @@
       "members":{
         "AvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone for the instance.</p>"
+          "documentation":"<p>The Availability Zone for the instance.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>"
+        },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone for the instance.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>"
         },
         "Affinity":{
           "shape":"String",
@@ -43326,7 +48344,7 @@
       "members":{
         "MaxPrice":{
           "shape":"String",
-          "documentation":"<p>The maximum hourly price you're willing to pay for the Spot Instances. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important> <p>If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>",
+          "documentation":"<p>The maximum hourly price you're willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you do specify this parameter, it must be more than USD $0.001. Specifying a value below USD $0.001 will result in an <code>InvalidParameterValue</code> error message when the launch template is used to launch an instance.</p>",
           "locationName":"maxPrice"
         },
         "SpotInstanceType":{
@@ -43357,7 +48375,7 @@
       "members":{
         "MaxPrice":{
           "shape":"String",
-          "documentation":"<p>The maximum hourly price you're willing to pay for the Spot Instances. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important> <p>If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>"
+          "documentation":"<p>The maximum hourly price you're willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price. If you do specify this parameter, it must be more than USD $0.001. Specifying a value below USD $0.001 will result in an <code>InvalidParameterValue</code> error message when the launch template is used to launch an instance.</p> <important> <p>If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>"
         },
         "SpotInstanceType":{
           "shape":"SpotInstanceType",
@@ -44058,6 +49076,21 @@
           "documentation":"<p>The ID of the local gateway.</p>",
           "locationName":"localGatewayId"
         },
+        "LocalGatewayVirtualInterfaceGroupId":{
+          "shape":"LocalGatewayVirtualInterfaceGroupId",
+          "documentation":"<p>The ID of the local gateway virtual interface group.</p>",
+          "locationName":"localGatewayVirtualInterfaceGroupId"
+        },
+        "LocalGatewayVirtualInterfaceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Number (ARN) of the local gateway virtual interface.</p>",
+          "locationName":"localGatewayVirtualInterfaceArn"
+        },
+        "OutpostLagId":{
+          "shape":"String",
+          "documentation":"<p>The Outpost LAG ID.</p>",
+          "locationName":"outpostLagId"
+        },
         "Vlan":{
           "shape":"Integer",
           "documentation":"<p>The ID of the VLAN.</p>",
@@ -44083,6 +49116,11 @@
           "documentation":"<p>The peer BGP ASN.</p>",
           "locationName":"peerBgpAsn"
         },
+        "PeerBgpAsnExtended":{
+          "shape":"Long",
+          "documentation":"<p>The extended 32-bit ASN of the BGP peer for use with larger ASN values.</p>",
+          "locationName":"peerBgpAsnExtended"
+        },
         "OwnerId":{
           "shape":"String",
           "documentation":"<p>The ID of the Amazon Web Services account that owns the local gateway virtual interface.</p>",
@@ -44092,10 +49130,24 @@
           "shape":"TagList",
           "documentation":"<p>The tags assigned to the virtual interface.</p>",
           "locationName":"tagSet"
+        },
+        "ConfigurationState":{
+          "shape":"LocalGatewayVirtualInterfaceConfigurationState",
+          "documentation":"<p>The current state of the local gateway virtual interface.</p>",
+          "locationName":"configurationState"
         }
       },
       "documentation":"<p>Describes a local gateway virtual interface.</p>"
     },
+    "LocalGatewayVirtualInterfaceConfigurationState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "deleting",
+        "deleted"
+      ]
+    },
     "LocalGatewayVirtualInterfaceGroup":{
       "type":"structure",
       "members":{
@@ -44119,14 +49171,44 @@
           "documentation":"<p>The ID of the Amazon Web Services account that owns the local gateway virtual interface group.</p>",
           "locationName":"ownerId"
         },
+        "LocalBgpAsn":{
+          "shape":"Integer",
+          "documentation":"<p>The Autonomous System Number(ASN) for the local Border Gateway Protocol (BGP).</p>",
+          "locationName":"localBgpAsn"
+        },
+        "LocalBgpAsnExtended":{
+          "shape":"Long",
+          "documentation":"<p>The extended 32-bit ASN for the local BGP configuration.</p>",
+          "locationName":"localBgpAsnExtended"
+        },
+        "LocalGatewayVirtualInterfaceGroupArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Number (ARN) of the local gateway virtual interface group.</p>",
+          "locationName":"localGatewayVirtualInterfaceGroupArn"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags assigned to the virtual interface group.</p>",
           "locationName":"tagSet"
+        },
+        "ConfigurationState":{
+          "shape":"LocalGatewayVirtualInterfaceGroupConfigurationState",
+          "documentation":"<p>The current state of the local gateway virtual interface group.</p>",
+          "locationName":"configurationState"
         }
       },
       "documentation":"<p>Describes a local gateway virtual interface group.</p>"
     },
+    "LocalGatewayVirtualInterfaceGroupConfigurationState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "incomplete",
+        "available",
+        "deleting",
+        "deleted"
+      ]
+    },
     "LocalGatewayVirtualInterfaceGroupId":{"type":"string"},
     "LocalGatewayVirtualInterfaceGroupIdSet":{
       "type":"list",
@@ -44373,6 +49455,78 @@
         "locationName":"item"
       }
     },
+    "MacModificationTask":{
+      "type":"structure",
+      "members":{
+        "InstanceId":{
+          "shape":"InstanceId",
+          "documentation":"<p>The ID of the Amazon EC2 Mac instance.</p>",
+          "locationName":"instanceId"
+        },
+        "MacModificationTaskId":{
+          "shape":"MacModificationTaskId",
+          "documentation":"<p>The ID of task.</p>",
+          "locationName":"macModificationTaskId"
+        },
+        "MacSystemIntegrityProtectionConfig":{
+          "shape":"MacSystemIntegrityProtectionConfiguration",
+          "documentation":"<p>[SIP modification tasks only] Information about the SIP configuration.</p>",
+          "locationName":"macSystemIntegrityProtectionConfig"
+        },
+        "StartTime":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p>The date and time the task was created, in the UTC timezone (<code>YYYY-MM-DDThh:mm:ss.sssZ</code>).</p>",
+          "locationName":"startTime"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags assigned to the task.</p>",
+          "locationName":"tagSet"
+        },
+        "TaskState":{
+          "shape":"MacModificationTaskState",
+          "documentation":"<p>The state of the task.</p>",
+          "locationName":"taskState"
+        },
+        "TaskType":{
+          "shape":"MacModificationTaskType",
+          "documentation":"<p>The type of task.</p>",
+          "locationName":"taskType"
+        }
+      },
+      "documentation":"<p>Information about a System Integrity Protection (SIP) modification task or volume ownership delegation task for an Amazon EC2 Mac instance.</p>"
+    },
+    "MacModificationTaskId":{"type":"string"},
+    "MacModificationTaskIdList":{
+      "type":"list",
+      "member":{
+        "shape":"MacModificationTaskId",
+        "locationName":"item"
+      }
+    },
+    "MacModificationTaskList":{
+      "type":"list",
+      "member":{
+        "shape":"MacModificationTask",
+        "locationName":"item"
+      }
+    },
+    "MacModificationTaskState":{
+      "type":"string",
+      "enum":[
+        "successful",
+        "failed",
+        "in-progress",
+        "pending"
+      ]
+    },
+    "MacModificationTaskType":{
+      "type":"string",
+      "enum":[
+        "sip-modification",
+        "volume-ownership-delegation"
+      ]
+    },
     "MacOSVersionStringList":{
       "type":"list",
       "member":{
@@ -44380,6 +49534,93 @@
         "locationName":"item"
       }
     },
+    "MacSystemIntegrityProtectionConfiguration":{
+      "type":"structure",
+      "members":{
+        "AppleInternal":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Apple Internal was enabled or disabled by the task.</p>",
+          "locationName":"appleInternal"
+        },
+        "BaseSystem":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Base System was enabled or disabled by the task.</p>",
+          "locationName":"baseSystem"
+        },
+        "DebuggingRestrictions":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Debugging Restrictions was enabled or disabled by the task.</p>",
+          "locationName":"debuggingRestrictions"
+        },
+        "DTraceRestrictions":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Dtrace Restrictions was enabled or disabled by the task.</p>",
+          "locationName":"dTraceRestrictions"
+        },
+        "FilesystemProtections":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Filesystem Protections was enabled or disabled by the task.</p>",
+          "locationName":"filesystemProtections"
+        },
+        "KextSigning":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether Kext Signing was enabled or disabled by the task.</p>",
+          "locationName":"kextSigning"
+        },
+        "NvramProtections":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates whether NVRAM Protections was enabled or disabled by the task.</p>",
+          "locationName":"nvramProtections"
+        },
+        "Status":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Indicates SIP was enabled or disabled by the task.</p>",
+          "locationName":"status"
+        }
+      },
+      "documentation":"<p>Describes the configuration for a System Integrity Protection (SIP) modification task.</p>"
+    },
+    "MacSystemIntegrityProtectionConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "AppleInternal":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Apple Internal.</p>"
+        },
+        "BaseSystem":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Base System.</p>"
+        },
+        "DebuggingRestrictions":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Debugging Restrictions.</p>"
+        },
+        "DTraceRestrictions":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Dtrace Restrictions.</p>"
+        },
+        "FilesystemProtections":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Filesystem Protections.</p>"
+        },
+        "KextSigning":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Kext Signing.</p>"
+        },
+        "NvramProtections":{
+          "shape":"MacSystemIntegrityProtectionSettingStatus",
+          "documentation":"<p>Enables or disables Nvram Protections.</p>"
+        }
+      },
+      "documentation":"<p>Describes a custom configuration for a System Integrity Protection (SIP) modification task.</p>"
+    },
+    "MacSystemIntegrityProtectionSettingStatus":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
     "MaintenanceDetails":{
       "type":"structure",
       "members":{
@@ -44460,6 +49701,16 @@
           "shape":"String",
           "documentation":"<p>The ID of the owner of the prefix list.</p>",
           "locationName":"ownerId"
+        },
+        "IpamPrefixListResolverTargetId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the IPAM prefix list resolver target associated with this managed prefix list. When set, this prefix list becomes an IPAM managed prefix list.</p> <p>An IPAM-managed prefix list is a customer-managed prefix list that has been associated with an IPAM prefix list resolver target. When a prefix list becomes IPAM managed, its CIDRs are automatically synchronized based on the IPAM prefix list resolver's CIDR selection rules, and direct CIDR modifications are restricted.</p>",
+          "locationName":"ipamPrefixListResolverTargetId"
+        },
+        "IpamPrefixListResolverSyncEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether synchronization with an IPAM prefix list resolver is enabled for this managed prefix list. When enabled, the prefix list CIDRs are automatically updated based on the resolver's CIDR selection rules.</p>",
+          "locationName":"ipamPrefixListResolverSyncEnabled"
         }
       },
       "documentation":"<p>Describes a managed prefix list.</p>"
@@ -44478,6 +49729,22 @@
         "capacity-block"
       ]
     },
+    "MarketplaceProductCode":{"type":"string"},
+    "MarketplaceProductCodeList":{
+      "type":"list",
+      "member":{
+        "shape":"MarketplaceProductCode",
+        "locationName":"item"
+      }
+    },
+    "MarketplaceProductCodeRequest":{"type":"string"},
+    "MarketplaceProductCodeRequestList":{
+      "type":"list",
+      "member":{
+        "shape":"MarketplaceProductCodeRequest",
+        "locationName":"item"
+      }
+    },
     "MaxIpv4AddrPerInterface":{"type":"integer"},
     "MaxIpv6AddrPerInterface":{"type":"integer"},
     "MaxNetworkInterfaces":{"type":"integer"},
@@ -44488,7 +49755,20 @@
       "min":0
     },
     "MaximumBandwidthInMbps":{"type":"integer"},
+    "MaximumDaysSinceCreatedValue":{
+      "type":"integer",
+      "max":2147483647,
+      "min":0
+    },
+    "MaximumDaysSinceDeprecatedValue":{
+      "type":"integer",
+      "max":2147483647,
+      "min":0
+    },
+    "MaximumEbsAttachments":{"type":"integer"},
     "MaximumEfaInterfaces":{"type":"integer"},
+    "MaximumEnaQueueCount":{"type":"integer"},
+    "MaximumEnaQueueCountPerInterface":{"type":"integer"},
     "MaximumIops":{"type":"integer"},
     "MaximumNetworkCards":{"type":"integer"},
     "MaximumThroughputInMBps":{"type":"double"},
@@ -44644,6 +49924,89 @@
         "no-preference"
       ]
     },
+    "Metric":{
+      "type":"string",
+      "enum":[
+        "reservation-total-capacity-hrs-vcpu",
+        "reservation-total-capacity-hrs-inst",
+        "reservation-max-size-vcpu",
+        "reservation-max-size-inst",
+        "reservation-min-size-vcpu",
+        "reservation-min-size-inst",
+        "reservation-unused-total-capacity-hrs-vcpu",
+        "reservation-unused-total-capacity-hrs-inst",
+        "reservation-unused-total-estimated-cost",
+        "reservation-max-unused-size-vcpu",
+        "reservation-max-unused-size-inst",
+        "reservation-min-unused-size-vcpu",
+        "reservation-min-unused-size-inst",
+        "reservation-max-utilization",
+        "reservation-min-utilization",
+        "reservation-avg-utilization-vcpu",
+        "reservation-avg-utilization-inst",
+        "reservation-total-count",
+        "reservation-total-estimated-cost",
+        "reservation-avg-future-size-vcpu",
+        "reservation-avg-future-size-inst",
+        "reservation-min-future-size-vcpu",
+        "reservation-min-future-size-inst",
+        "reservation-max-future-size-vcpu",
+        "reservation-max-future-size-inst",
+        "reservation-avg-committed-size-vcpu",
+        "reservation-avg-committed-size-inst",
+        "reservation-max-committed-size-vcpu",
+        "reservation-max-committed-size-inst",
+        "reservation-min-committed-size-vcpu",
+        "reservation-min-committed-size-inst",
+        "reserved-total-usage-hrs-vcpu",
+        "reserved-total-usage-hrs-inst",
+        "reserved-total-estimated-cost",
+        "unreserved-total-usage-hrs-vcpu",
+        "unreserved-total-usage-hrs-inst",
+        "unreserved-total-estimated-cost",
+        "spot-total-usage-hrs-vcpu",
+        "spot-total-usage-hrs-inst",
+        "spot-total-estimated-cost",
+        "spot-avg-run-time-before-interruption-inst",
+        "spot-max-run-time-before-interruption-inst",
+        "spot-min-run-time-before-interruption-inst"
+      ]
+    },
+    "MetricDataResult":{
+      "type":"structure",
+      "members":{
+        "Dimension":{
+          "shape":"CapacityManagerDimension",
+          "documentation":"<p> The dimension values that identify this specific data point, such as account ID, region, and instance family. </p>",
+          "locationName":"dimension"
+        },
+        "Timestamp":{
+          "shape":"MillisecondDateTime",
+          "documentation":"<p> The timestamp for this data point, indicating when the capacity usage occurred. </p>",
+          "locationName":"timestamp"
+        },
+        "MetricValues":{
+          "shape":"MetricValueSet",
+          "documentation":"<p> The metric values and statistics for this data point, containing the actual capacity usage numbers. </p>",
+          "locationName":"metricValueSet"
+        }
+      },
+      "documentation":"<p> Contains a single data point from a capacity metrics query, including the dimension values, timestamp, and metric values for that specific combination. </p>"
+    },
+    "MetricDataResultSet":{
+      "type":"list",
+      "member":{
+        "shape":"MetricDataResult",
+        "locationName":"item"
+      }
+    },
+    "MetricDimensionResultSet":{
+      "type":"list",
+      "member":{
+        "shape":"CapacityManagerDimension",
+        "locationName":"item"
+      }
+    },
     "MetricPoint":{
       "type":"structure",
       "members":{
@@ -44676,10 +50039,42 @@
         "locationName":"item"
       }
     },
+    "MetricSet":{
+      "type":"list",
+      "member":{
+        "shape":"Metric",
+        "locationName":"item"
+      },
+      "max":40,
+      "min":0
+    },
     "MetricType":{
       "type":"string",
       "enum":["aggregate-latency"]
     },
+    "MetricValue":{
+      "type":"structure",
+      "members":{
+        "Metric":{
+          "shape":"Metric",
+          "documentation":"<p> The name of the metric. </p>",
+          "locationName":"metric"
+        },
+        "Value":{
+          "shape":"Double",
+          "documentation":"<p> The numerical value of the metric for the specified statistic and time period. </p>",
+          "locationName":"value"
+        }
+      },
+      "documentation":"<p> Represents a single metric value with its associated statistic, such as the sum or average of unused capacity hours. </p>"
+    },
+    "MetricValueSet":{
+      "type":"list",
+      "member":{
+        "shape":"MetricValue",
+        "locationName":"item"
+      }
+    },
     "MillisecondDateTime":{"type":"timestamp"},
     "ModifyAddressAttributeRequest":{
       "type":"structure",
@@ -44892,9 +50287,13 @@
           "shape":"ClientLoginBannerOptions",
           "documentation":"<p>Options for enabling a customizable text banner that will be displayed on Amazon Web Services provided clients when a VPN session is established.</p>"
         },
+        "ClientRouteEnforcementOptions":{
+          "shape":"ClientRouteEnforcementOptions",
+          "documentation":"<p>Client route enforcement is a feature of the Client VPN service that helps enforce administrator defined routes on devices connected through the VPN. T his feature helps improve your security posture by ensuring that network traffic originating from a connected client is not inadvertently sent outside the VPN tunnel.</p> <p>Client route enforcement works by monitoring the route table of a connected device for routing policy changes to the VPN connection. If the feature detects any VPN routing policy modifications, it will automatically force an update to the route table, reverting it back to the expected route configurations.</p>"
+        },
         "DisconnectOnSessionTimeout":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum timeout specified in <code>sessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>false</code>.</p>"
+          "documentation":"<p>Indicates whether the client VPN session is disconnected after the maximum timeout specified in <code>sessionTimeoutHours</code> is reached. If <code>true</code>, users are prompted to reconnect client VPN. If <code>false</code>, client VPN attempts to reconnect automatically. The default value is <code>true</code>.</p>"
         }
       }
     },
@@ -45241,7 +50640,7 @@
         },
         "Attribute":{
           "shape":"InstanceAttributeName",
-          "documentation":"<p>The name of the attribute to modify.</p> <important> <p>You can modify the following attributes only: <code>disableApiTermination</code> | <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>blockDeviceMapping</code> | <code>userData</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> | <code>enaSupport</code> | <code>nvmeSupport</code> | <code>disableApiStop</code> | <code>enclaveOptions</code> </p> </important>",
+          "documentation":"<p>The name of the attribute to modify.</p> <note> <p>When changing the instance type: If the original instance type is configured for configurable bandwidth, and the desired instance type doesn't support configurable bandwidth, first set the existing bandwidth configuration to <code>default</code> using the <a>ModifyInstanceNetworkPerformanceOptions</a> operation.</p> </note> <important> <p>You can modify the following attributes only: <code>disableApiTermination</code> | <code>instanceType</code> | <code>kernel</code> | <code>ramdisk</code> | <code>instanceInitiatedShutdownBehavior</code> | <code>blockDeviceMapping</code> | <code>userData</code> | <code>sourceDestCheck</code> | <code>groupSet</code> | <code>ebsOptimized</code> | <code>sriovNetSupport</code> | <code>enaSupport</code> | <code>nvmeSupport</code> | <code>disableApiStop</code> | <code>enclaveOptions</code> </p> </important>",
           "locationName":"attribute"
         },
         "Value":{
@@ -45251,12 +50650,12 @@
         },
         "BlockDeviceMappings":{
           "shape":"InstanceBlockDeviceMappingSpecificationList",
-          "documentation":"<p>Modifies the <code>DeleteOnTermination</code> attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for <code>DeleteOnTermination</code>, the default is <code>true</code> and the volume is deleted when the instance is terminated. You can't modify the <code>DeleteOnTermination</code> attribute for volumes that are attached to Fargate tasks.</p> <p>To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM\">Update the block device mapping when launching an instance</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>Modifies the <code>DeleteOnTermination</code> attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for <code>DeleteOnTermination</code>, the default is <code>true</code> and the volume is deleted when the instance is terminated. You can't modify the <code>DeleteOnTermination</code> attribute for volumes that are attached to Amazon Web Services-managed resources.</p> <p>To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM\">Update the block device mapping when launching an instance</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"blockDeviceMapping"
         },
         "DisableApiTermination":{
           "shape":"AttributeBooleanValue",
-          "documentation":"<p>If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this parameter for Spot Instances.</p>",
+          "documentation":"<p>Enable or disable termination protection for the instance. If the value is <code>true</code>, you can't terminate the instance using the Amazon EC2 console, command line interface, or API. You can't enable termination protection for Spot Instances.</p>",
           "locationName":"disableApiTermination"
         },
         "InstanceType":{
@@ -45337,6 +50736,43 @@
         }
       }
     },
+    "ModifyInstanceConnectEndpointRequest":{
+      "type":"structure",
+      "required":["InstanceConnectEndpointId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "InstanceConnectEndpointId":{
+          "shape":"InstanceConnectEndpointId",
+          "documentation":"<p>The ID of the EC2 Instance Connect Endpoint to modify.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The new IP address type for the EC2 Instance Connect Endpoint.</p> <note> <p> <code>PreserveClientIp</code> is only supported on IPv4 EC2 Instance Connect Endpoints. To use <code>PreserveClientIp</code>, the value for <code>IpAddressType</code> must be <code>ipv4</code>.</p> </note>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIdStringListRequest",
+          "documentation":"<p>Changes the security groups for the EC2 Instance Connect Endpoint. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.</p>",
+          "locationName":"SecurityGroupId"
+        },
+        "PreserveClientIp":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the client IP address is preserved as the source when you connect to a resource. The following are the possible values.</p> <ul> <li> <p> <code>true</code> - Use the IP address of the client. Your instance must have an IPv4 address.</p> </li> <li> <p> <code>false</code> - Use the IP address of the network interface.</p> </li> </ul>"
+        }
+      }
+    },
+    "ModifyInstanceConnectEndpointResult":{
+      "type":"structure",
+      "members":{
+        "Return":{
+          "shape":"Boolean",
+          "documentation":"<p>Is <code>true</code> if the request succeeds and an error otherwise.</p>",
+          "locationName":"return"
+        }
+      }
+    },
     "ModifyInstanceCpuOptionsRequest":{
       "type":"structure",
       "required":[
@@ -45502,6 +50938,10 @@
           "shape":"InstanceAutoRecoveryState",
           "documentation":"<p>Disables the automatic recovery behavior of your instance or sets it to default.</p>"
         },
+        "RebootMigration":{
+          "shape":"InstanceRebootMigrationState",
+          "documentation":"<p>Specifies whether to attempt reboot migration during a user-initiated reboot of an instance that has a scheduled <code>system-reboot</code> event:</p> <ul> <li> <p> <code>default</code> - Amazon EC2 attempts to migrate the instance to new hardware (reboot migration). If successful, the <code>system-reboot</code> event is cleared. If unsuccessful, an in-place reboot occurs and the event remains scheduled.</p> </li> <li> <p> <code>disabled</code> - Amazon EC2 keeps the instance on the same hardware (in-place reboot). The <code>system-reboot</code> event remains scheduled.</p> </li> </ul> <p>This setting only applies to supported instances that have a scheduled reboot event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration\">Enable or disable reboot migration</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
@@ -45520,6 +50960,11 @@
           "shape":"InstanceAutoRecoveryState",
           "documentation":"<p>Provides information on the current automatic recovery behavior of your instance.</p>",
           "locationName":"autoRecovery"
+        },
+        "RebootMigration":{
+          "shape":"InstanceRebootMigrationState",
+          "documentation":"<p>Specifies whether to attempt reboot migration during a user-initiated reboot of an instance that has a scheduled <code>system-reboot</code> event:</p> <ul> <li> <p> <code>default</code> - Amazon EC2 attempts to migrate the instance to new hardware (reboot migration). If successful, the <code>system-reboot</code> event is cleared. If unsuccessful, an in-place reboot occurs and the event remains scheduled.</p> </li> <li> <p> <code>disabled</code> - Amazon EC2 keeps the instance on the same hardware (in-place reboot). The <code>system-reboot</code> event remains scheduled.</p> </li> </ul> <p>This setting only applies to supported instances that have a scheduled reboot event. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration\">Enable or disable reboot migration</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"rebootMigration"
         }
       }
     },
@@ -45753,6 +51198,76 @@
         }
       }
     },
+    "ModifyIpamPrefixListResolverRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverId":{
+          "shape":"IpamPrefixListResolverId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver to modify.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A new description for the IPAM prefix list resolver.</p>"
+        },
+        "Rules":{
+          "shape":"IpamPrefixListResolverRuleRequestSet",
+          "documentation":"<p>The updated CIDR selection rules for the resolver. These rules replace the existing rules entirely.</p>",
+          "locationName":"Rule"
+        }
+      }
+    },
+    "ModifyIpamPrefixListResolverResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolver":{
+          "shape":"IpamPrefixListResolver",
+          "documentation":"<p>Information about the modified IPAM prefix list resolver.</p>",
+          "locationName":"ipamPrefixListResolver"
+        }
+      }
+    },
+    "ModifyIpamPrefixListResolverTargetRequest":{
+      "type":"structure",
+      "required":["IpamPrefixListResolverTargetId"],
+      "members":{
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        },
+        "IpamPrefixListResolverTargetId":{
+          "shape":"IpamPrefixListResolverTargetId",
+          "documentation":"<p>The ID of the IPAM prefix list resolver target to modify.</p>"
+        },
+        "DesiredVersion":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The desired version of the prefix list to target. This allows you to pin the target to a specific version.</p>"
+        },
+        "TrackLatestVersion":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Indicates whether the resolver target should automatically track the latest version of the prefix list. When enabled, the target will always synchronize with the most current version.</p> <p>Choose this for automatic updates when you want your prefix lists to stay current with infrastructure changes without manual intervention.</p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensuring idempotency</a>.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "ModifyIpamPrefixListResolverTargetResult":{
+      "type":"structure",
+      "members":{
+        "IpamPrefixListResolverTarget":{
+          "shape":"IpamPrefixListResolverTarget",
+          "documentation":"<p>Information about the modified IPAM prefix list resolver target.</p>",
+          "locationName":"ipamPrefixListResolverTarget"
+        }
+      }
+    },
     "ModifyIpamRequest":{
       "type":"structure",
       "required":["IpamId"],
@@ -45786,6 +51301,10 @@
         "EnablePrivateGua":{
           "shape":"Boolean",
           "documentation":"<p>Enable this option to use your own GUA ranges as private IPv6 addresses. This option is disabled by default.</p>"
+        },
+        "MeteredAccount":{
+          "shape":"IpamMeteredAccount",
+          "documentation":"<p>A metered account is an Amazon Web Services account that is charged for active IP addresses managed in IPAM. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html\">Enable cost distribution</a> in the <i>Amazon VPC IPAM User Guide</i>.</p> <p>Possible values:</p> <ul> <li> <p> <code>ipam-owner</code> (default): The Amazon Web Services account which owns the IPAM is charged for all active IP addresses managed in IPAM.</p> </li> <li> <p> <code>resource-owner</code>: The Amazon Web Services account that owns the IP address is charged for the active IP address.</p> </li> </ul>"
         }
       }
     },
@@ -45867,12 +51386,12 @@
         },
         "AddOrganizationalUnitExclusions":{
           "shape":"AddIpamOrganizationalUnitExclusionSet",
-          "documentation":"<p>Add an Organizational Unit (OU) exclusion to your IPAM. If your IPAM is integrated with Amazon Web Services Organizations and you add an organizational unit (OU) exclusion, IPAM will not manage the IP addresses in accounts in that OU exclusion. There is a limit on the number of exclusions you can create. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html\">Quotas for your IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>",
+          "documentation":"<p>Add an Organizational Unit (OU) exclusion to your IPAM. If your IPAM is integrated with Amazon Web Services Organizations and you add an organizational unit (OU) exclusion, IPAM will not manage the IP addresses in accounts in that OU exclusion. There is a limit on the number of exclusions you can create. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html\">Quotas for your IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p> <note> <p>The resulting set of exclusions must not result in \"overlap\", meaning two or more OU exclusions must not exclude the same OU. For more information and examples, see the Amazon Web Services CLI request process in <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/exclude-ous.html#exclude-ous-create-delete\">Add or remove OU exclusions </a> in the <i>Amazon VPC User Guide</i>.</p> </note>",
           "locationName":"AddOrganizationalUnitExclusion"
         },
         "RemoveOrganizationalUnitExclusions":{
           "shape":"RemoveIpamOrganizationalUnitExclusionSet",
-          "documentation":"<p>Remove an Organizational Unit (OU) exclusion to your IPAM. If your IPAM is integrated with Amazon Web Services Organizations and you add an organizational unit (OU) exclusion, IPAM will not manage the IP addresses in accounts in that OU exclusion. There is a limit on the number of exclusions you can create. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html\">Quotas for your IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p>",
+          "documentation":"<p>Remove an Organizational Unit (OU) exclusion to your IPAM. If your IPAM is integrated with Amazon Web Services Organizations and you add an organizational unit (OU) exclusion, IPAM will not manage the IP addresses in accounts in that OU exclusion. There is a limit on the number of exclusions you can create. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html\">Quotas for your IPAM</a> in the <i>Amazon VPC IPAM User Guide</i>.</p> <note> <p>The resulting set of exclusions must not result in \"overlap\", meaning two or more OU exclusions must not exclude the same OU. For more information and examples, see the Amazon Web Services CLI request process in <a href=\"https://docs.aws.amazon.com/vpc/latest/ipam/exclude-ous.html#exclude-ous-create-delete\">Add or remove OU exclusions </a> in the <i>Amazon VPC User Guide</i>.</p> </note>",
           "locationName":"RemoveOrganizationalUnitExclusion"
         }
       }
@@ -45912,6 +51431,14 @@
         "Description":{
           "shape":"String",
           "documentation":"<p>The description of the scope you want to modify.</p>"
+        },
+        "ExternalAuthorityConfiguration":{
+          "shape":"ExternalAuthorityConfiguration",
+          "documentation":"<p>The configuration that links an Amazon VPC IPAM scope to an external authority system. It specifies the type of external system and the external resource identifier that identifies your account or instance in that system.</p> <p>In IPAM, an external authority is a third-party IP address management system that provides CIDR blocks when you provision address space for top-level IPAM pools. This allows you to use your existing IP management system to control which address ranges are allocated to Amazon Web Services while using Amazon VPC IPAM to manage subnets within those ranges.</p>"
+        },
+        "RemoveExternalAuthorityConfiguration":{
+          "shape":"Boolean",
+          "documentation":"<p>Remove the external authority configuration. <code>true</code> to remove.</p>"
         }
       }
     },
@@ -45934,7 +51461,8 @@
         },
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>"
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If a client token isn't specified, a randomly generated token is used in the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a>.</p> <p>Constraint: Maximum 128 ASCII characters.</p>",
+          "idempotencyToken":true
         },
         "LaunchTemplateId":{
           "shape":"LaunchTemplateId",
@@ -46034,6 +51562,10 @@
         "MaxEntries":{
           "shape":"Integer",
           "documentation":"<p>The maximum number of entries for the prefix list. You cannot modify the entries of a prefix list and modify the size of a prefix list at the same time.</p> <p>If any of the resources that reference the prefix list cannot support the new maximum size, the modify operation fails. Check the state message for the IDs of the first ten resources that do not support the new maximum size.</p>"
+        },
+        "IpamPrefixListResolverSyncEnabled":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Indicates whether synchronization with an IPAM prefix list resolver should be enabled for this managed prefix list. When enabled, the prefix list CIDRs are automatically updated based on the associated resolver's CIDR selection rules.</p>"
         }
       }
     },
@@ -46067,6 +51599,11 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to assign a public IPv4 address to a network interface. This option can be enabled for any network interface but will only apply to the primary network interface (eth0).</p>"
         },
+        "AssociatedSubnetIds":{
+          "shape":"SubnetIdList",
+          "documentation":"<p>A list of subnet IDs to associate with the network interface.</p>",
+          "locationName":"AssociatedSubnetId"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -46136,6 +51673,37 @@
         }
       }
     },
+    "ModifyPublicIpDnsNameOptionsRequest":{
+      "type":"structure",
+      "required":[
+        "NetworkInterfaceId",
+        "HostnameType"
+      ],
+      "members":{
+        "NetworkInterfaceId":{
+          "shape":"NetworkInterfaceId",
+          "documentation":"<p>A network interface ID.</p>"
+        },
+        "HostnameType":{
+          "shape":"PublicIpDnsOption",
+          "documentation":"<p>The public hostname type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p> <ul> <li> <p> <code>public-dual-stack-dns-name</code>: A dual-stack public hostname for a network interface. Requests from within the VPC resolve to both the private IPv4 address and the IPv6 Global Unicast Address of the network interface. Requests from the internet resolve to both the public IPv4 and the IPv6 GUA address of the network interface.</p> </li> <li> <p> <code>public-ipv4-dns-name</code>: An IPv4-enabled public hostname for a network interface. Requests from within the VPC resolve to the private primary IPv4 address of the network interface. Requests from the internet resolve to the public IPv4 address of the network interface.</p> </li> <li> <p> <code>public-ipv6-dns-name</code>: An IPv6-enabled public hostname for a network interface. Requests from within the VPC or from the internet resolve to the IPv6 GUA of the network interface. </p> </li> </ul>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "ModifyPublicIpDnsNameOptionsResult":{
+      "type":"structure",
+      "members":{
+        "Successful":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether or not the request was successful.</p>",
+          "locationName":"successful"
+        }
+      }
+    },
     "ModifyReservedInstancesRequest":{
       "type":"structure",
       "required":[
@@ -46172,6 +51740,42 @@
       },
       "documentation":"<p>Contains the output of ModifyReservedInstances.</p>"
     },
+    "ModifyRouteServerRequest":{
+      "type":"structure",
+      "required":["RouteServerId"],
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server to modify.</p>"
+        },
+        "PersistRoutes":{
+          "shape":"RouteServerPersistRoutesAction",
+          "documentation":"<p>Specifies whether to persist routes after all BGP sessions are terminated.</p> <ul> <li> <p>enable: Routes will be persisted in FIB and RIB after all BGP sessions are terminated.</p> </li> <li> <p>disable: Routes will not be persisted in FIB and RIB after all BGP sessions are terminated.</p> </li> <li> <p>reset: If a route server has persisted routes due to all BGP sessions having ended, reset will withdraw all routes and reset route server to an empty FIB and RIB.</p> </li> </ul>"
+        },
+        "PersistRoutesDuration":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The number of minutes a route server will wait after BGP is re-established to unpersist the routes in the FIB and RIB. Value must be in the range of 1-5. Required if PersistRoutes is <code>enabled</code>.</p> <p>If you set the duration to 1 minute, then when your network appliance re-establishes BGP with route server, it has 1 minute to relearn it's adjacent network and advertise those routes to route server before route server resumes normal functionality. In most cases, 1 minute is probably sufficient. If, however, you have concerns that your BGP network may not be capable of fully re-establishing and re-learning everything in 1 minute, you can increase the duration up to 5 minutes.</p>"
+        },
+        "SnsNotificationsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable SNS notifications for route server events. Enabling SNS notifications persists BGP status changes to an SNS topic provisioned by Amazon Web Services.</p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p>A check for whether you have the required permissions for the action without actually making the request and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
+        }
+      }
+    },
+    "ModifyRouteServerResult":{
+      "type":"structure",
+      "members":{
+        "RouteServer":{
+          "shape":"RouteServer",
+          "documentation":"<p>Information about the modified route server.</p>",
+          "locationName":"routeServer"
+        }
+      }
+    },
     "ModifySecurityGroupRulesRequest":{
       "type":"structure",
       "required":[
@@ -46560,7 +52164,7 @@
         },
         "DefaultRouteTablePropagation":{
           "shape":"DefaultRouteTablePropagationValue",
-          "documentation":"<p>Enable or disable automatic propagation of routes to the default propagation route table.</p>"
+          "documentation":"<p>Indicates whether resource attachments automatically propagate routes to the default propagation route table. Enabled by default. If <code>defaultRouteTablePropagation</code> is set to <code>enable</code>, Amazon Web Services Transit Gateway will create the default transit gateway route table.</p>"
         },
         "PropagationDefaultRouteTableId":{
           "shape":"TransitGatewayRouteTableId",
@@ -47232,7 +52836,7 @@
         },
         "Size":{
           "shape":"Integer",
-          "documentation":"<p>The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume.</p> <p>The following are the supported volumes sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code> and <code>gp3</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul> <p>Default: The existing size is retained.</p>"
+          "documentation":"<p>The target size of the volume, in GiB. The target volume size must be greater than or equal to the existing size of the volume.</p> <p>The following are the supported volumes sizes for each volume type:</p> <ul> <li> <p> <code>gp2</code>: 1 - 16,384 GiB</p> </li> <li> <p> <code>gp3</code>: 1 - 65,536 GiB</p> </li> <li> <p> <code>io1</code>: 4 - 16,384 GiB</p> </li> <li> <p> <code>io2</code>: 4 - 65,536 GiB</p> </li> <li> <p> <code>st1</code> and <code>sc1</code>: 125 - 16,384 GiB</p> </li> <li> <p> <code>standard</code>: 1 - 1024 GiB</p> </li> </ul> <p>Default: The existing size is retained.</p>"
         },
         "VolumeType":{
           "shape":"VolumeType",
@@ -47240,11 +52844,11 @@
         },
         "Iops":{
           "shape":"Integer",
-          "documentation":"<p>The target IOPS rate of the volume. This parameter is valid only for <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 16,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>For <code>io2</code> volumes, you can achieve up to 256,000 IOPS on <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\">instances built on the Nitro System</a>. On other instances, you can achieve performance up to 32,000 IOPS.</p> <p>Default: The existing value is retained if you keep the same volume type. If you change the volume type to <code>io1</code>, <code>io2</code>, or <code>gp3</code>, the default is 3,000.</p>"
+          "documentation":"<p>The target IOPS rate of the volume. This parameter is valid only for <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes.</p> <p>The following are the supported values for each volume type:</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 80,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <note> <p> <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html\"> Instances built on the Nitro System</a> can support up to 256,000 IOPS. Other instances can support up to 32,000 IOPS.</p> </note> <p>Default: The existing value is retained if you keep the same volume type. If you change the volume type to <code>io1</code>, <code>io2</code>, or <code>gp3</code>, the default is 3,000.</p>"
         },
         "Throughput":{
           "shape":"Integer",
-          "documentation":"<p>The target throughput of the volume, in MiB/s. This parameter is valid only for <code>gp3</code> volumes. The maximum value is 1,000.</p> <p>Default: The existing value is retained if the source and target volume type is <code>gp3</code>. Otherwise, the default value is 125.</p> <p>Valid Range: Minimum value of 125. Maximum value of 1000.</p>"
+          "documentation":"<p>The target throughput of the volume, in MiB/s. This parameter is valid only for <code>gp3</code> volumes. The maximum value is 2,000.</p> <p>Default: The existing value is retained if the source and target volume type is <code>gp3</code>. Otherwise, the default value is 125.</p> <p>Valid Range: Minimum value of 125. Maximum value of 2,000.</p>"
         },
         "MultiAttachEnabled":{
           "shape":"Boolean",
@@ -47797,6 +53401,10 @@
         "SkipTunnelReplacement":{
           "shape":"Boolean",
           "documentation":"<p>Choose whether or not to trigger immediate tunnel replacement. This is only applicable when turning on or off <code>EnableTunnelLifecycleControl</code>.</p> <p>Valid values: <code>True</code> | <code>False</code> </p>"
+        },
+        "PreSharedKeyStorage":{
+          "shape":"String",
+          "documentation":"<p>Specifies the storage mode for the pre-shared key (PSK). Valid values are <code>Standard</code> (stored in Site-to-Site VPN service) or <code>SecretsManager</code> (stored in Amazon Web Services Secrets Manager).</p>"
         }
       }
     },
@@ -48498,6 +54106,21 @@
           "shape":"PeakBandwidthInGbps",
           "documentation":"<p>The peak (burst) network performance of the network card, in Gbps.</p>",
           "locationName":"peakBandwidthInGbps"
+        },
+        "DefaultEnaQueueCountPerInterface":{
+          "shape":"DefaultEnaQueueCountPerInterface",
+          "documentation":"<p>The default number of the ENA queues for each interface.</p>",
+          "locationName":"defaultEnaQueueCountPerInterface"
+        },
+        "MaximumEnaQueueCount":{
+          "shape":"MaximumEnaQueueCount",
+          "documentation":"<p>The maximum number of the ENA queues.</p>",
+          "locationName":"maximumEnaQueueCount"
+        },
+        "MaximumEnaQueueCountPerInterface":{
+          "shape":"MaximumEnaQueueCountPerInterface",
+          "documentation":"<p>The maximum number of the ENA queues for each interface.</p>",
+          "locationName":"maximumEnaQueueCountPerInterface"
         }
       },
       "documentation":"<p>Describes the network card support of the instance type.</p>"
@@ -48581,6 +54204,11 @@
           "shape":"BandwidthWeightingTypeList",
           "documentation":"<p>A list of valid settings for configurable bandwidth weighting for the instance type, if supported.</p>",
           "locationName":"bandwidthWeightings"
+        },
+        "FlexibleEnaQueuesSupport":{
+          "shape":"FlexibleEnaQueuesSupport",
+          "documentation":"<p>Indicates whether changing the number of ENA queues is supported.</p>",
+          "locationName":"flexibleEnaQueuesSupport"
         }
       },
       "documentation":"<p>Describes the networking features of the instance type.</p>"
@@ -48756,6 +54384,11 @@
           "documentation":"<p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>",
           "locationName":"filterInArnSet"
         },
+        "FilterOutArns":{
+          "shape":"ArnList",
+          "documentation":"<p>The Amazon Resource Names (ARN) of the resources that the path must ignore.</p>",
+          "locationName":"filterOutArnSet"
+        },
         "StartDate":{
           "shape":"MillisecondDateTime",
           "documentation":"<p>The time the analysis started.</p>",
@@ -48991,9 +54624,19 @@
         },
         "PrivateDnsName":{
           "shape":"String",
-          "documentation":"<p>The private DNS name.</p>",
+          "documentation":"<p>The private hostname. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"privateDnsName"
         },
+        "PublicDnsName":{
+          "shape":"String",
+          "documentation":"<p>A public hostname. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"publicDnsName"
+        },
+        "PublicIpDnsNameOptions":{
+          "shape":"PublicIpDnsNameOptions",
+          "documentation":"<p>Public hostname type options. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"publicIpDnsNameOptions"
+        },
         "PrivateIpAddress":{
           "shape":"String",
           "documentation":"<p>The IPv4 address of the network interface within the subnet.</p>",
@@ -49068,6 +54711,16 @@
           "shape":"OperatorResponse",
           "documentation":"<p>The service provider that manages the network interface.</p>",
           "locationName":"operator"
+        },
+        "AssociatedSubnets":{
+          "shape":"AssociatedSubnetList",
+          "documentation":"<p>The subnets associated with this network interface.</p>",
+          "locationName":"associatedSubnetSet"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
         }
       },
       "documentation":"<p>Describes a network interface.</p>"
@@ -49160,6 +54813,11 @@
           "shape":"AttachmentEnaSrdSpecification",
           "documentation":"<p>Configures ENA Express for the network interface that this action attaches to the instance.</p>",
           "locationName":"enaSrdSpecification"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues created with the instance.</p>",
+          "locationName":"enaQueueCount"
         }
       },
       "documentation":"<p>Describes a network interface attachment.</p>"
@@ -49167,6 +54825,14 @@
     "NetworkInterfaceAttachmentChanges":{
       "type":"structure",
       "members":{
+        "DefaultEnaQueueCount":{
+          "shape":"Boolean",
+          "documentation":"<p>The default number of the ENA queues.</p>"
+        },
+        "EnaQueueCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of ENA queues to be created with the instance.</p>"
+        },
         "AttachmentId":{
           "shape":"NetworkInterfaceAttachmentId",
           "documentation":"<p>The ID of the network interface attachment.</p>",
@@ -49253,6 +54919,11 @@
           "documentation":"<p>The IPv6 address.</p>",
           "locationName":"ipv6Address"
         },
+        "PublicIpv6DnsName":{
+          "shape":"String",
+          "documentation":"<p>An IPv6-enabled public hostname for a network interface. Requests from within the VPC or from the internet resolve to the IPv6 GUA of the network interface. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"publicIpv6DnsName"
+        },
         "IsPrimaryIpv6":{
           "shape":"Boolean",
           "documentation":"<p>Determines if an IPv6 address associated with a network interface is the primary IPv6 address. When you enable an IPv6 GUA address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6 address until the instance is terminated or the network interface is detached. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyNetworkInterfaceAttribute.html\">ModifyNetworkInterfaceAttribute</a>.</p>",
@@ -49414,6 +55085,13 @@
         "aws_codestar_connections_managed"
       ]
     },
+    "NetworkNodeSet":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"item"
+      }
+    },
     "NetworkNodesList":{
       "type":"list",
       "member":{
@@ -49573,6 +55251,7 @@
         "locationName":"item"
       }
     },
+    "OdbNetworkArn":{"type":"string"},
     "OfferingClassType":{
       "type":"string",
       "enum":[
@@ -49728,7 +55407,7 @@
       "members":{
         "Managed":{
           "shape":"Boolean",
-          "documentation":"<p>If <code>true</code>, the resource is managed by an service provider.</p>",
+          "documentation":"<p>If <code>true</code>, the resource is managed by a service provider.</p>",
           "locationName":"managed"
         },
         "Principal":{
@@ -49737,7 +55416,7 @@
           "locationName":"principal"
         }
       },
-      "documentation":"<p>Describes whether the resource is managed by an service provider and, if so, describes the service provider that manages it.</p>"
+      "documentation":"<p>Describes whether the resource is managed by a service provider and, if so, describes the service provider that manages it.</p>"
     },
     "OrganizationArnStringList":{
       "type":"list",
@@ -49757,6 +55436,74 @@
       "type":"string",
       "pattern":"^arn:aws([a-z-]+)?:outposts:[a-z\\d-]+:\\d{12}:outpost/op-[a-f0-9]{17}$"
     },
+    "OutpostLag":{
+      "type":"structure",
+      "members":{
+        "OutpostArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Number (ARN) of the Outpost LAG.</p>",
+          "locationName":"outpostArn"
+        },
+        "OwnerId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Outpost LAG owner.</p>",
+          "locationName":"ownerId"
+        },
+        "State":{
+          "shape":"String",
+          "documentation":"<p>The current state of the Outpost LAG.</p>",
+          "locationName":"state"
+        },
+        "OutpostLagId":{
+          "shape":"OutpostLagId",
+          "documentation":"<p>The ID of the Outpost LAG.</p>",
+          "locationName":"outpostLagId"
+        },
+        "LocalGatewayVirtualInterfaceIds":{
+          "shape":"LocalGatewayVirtualInterfaceIdSet",
+          "documentation":"<p>The IDs of the local gateway virtual interfaces associated with the Outpost LAG.</p>",
+          "locationName":"localGatewayVirtualInterfaceIdSet"
+        },
+        "ServiceLinkVirtualInterfaceIds":{
+          "shape":"ServiceLinkVirtualInterfaceIdSet",
+          "documentation":"<p>The service link virtual interface IDs associated with the Outpost LAG.</p>",
+          "locationName":"serviceLinkVirtualInterfaceIdSet"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags associated with the Outpost LAG.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>Describes an Outpost link aggregation group (LAG).</p>"
+    },
+    "OutpostLagId":{"type":"string"},
+    "OutpostLagIdSet":{
+      "type":"list",
+      "member":{
+        "shape":"OutpostLagId",
+        "locationName":"item"
+      }
+    },
+    "OutpostLagMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":5
+    },
+    "OutpostLagSet":{
+      "type":"list",
+      "member":{
+        "shape":"OutpostLag",
+        "locationName":"item"
+      }
+    },
+    "OutputFormat":{
+      "type":"string",
+      "enum":[
+        "csv",
+        "parquet"
+      ]
+    },
     "OwnerStringList":{
       "type":"list",
       "member":{
@@ -50171,7 +55918,7 @@
       "members":{
         "InstanceFamily":{
           "shape":"String",
-          "documentation":"<p>The instance family to use as a baseline reference.</p> <note> <p>Ensure that you specify the correct value for the instance family. The instance family is everything before the period (<code>.</code>) in the instance type name. For example, in the instance type <code>c6i.large</code>, the instance family is <code>c6i</code>, not <code>c6</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html\">Amazon EC2 instance type naming conventions</a> in <i>Amazon EC2 Instance Types</i>.</p> </note> <p>The following instance families are <i>not supported</i> for performance protection:</p> <ul> <li> <p> <code>c1</code> </p> </li> <li> <p> <code>g3</code> | <code>g3s</code> </p> </li> <li> <p> <code>hpc7g</code> </p> </li> <li> <p> <code>m1</code> | <code>m2</code> </p> </li> <li> <p> <code>mac1</code> | <code>mac2</code> | <code>mac2-m1ultra</code> | <code>mac2-m2</code> | <code>mac2-m2pro</code> </p> </li> <li> <p> <code>p3dn</code> | <code>p4d</code> | <code>p5</code> </p> </li> <li> <p> <code>t1</code> </p> </li> <li> <p> <code>u-12tb1</code> | <code>u-18tb1</code> | <code>u-24tb1</code> | <code>u-3tb1</code> | <code>u-6tb1</code> | <code>u-9tb1</code> | <code>u7i-12tb</code> | <code>u7in-16tb</code> | <code>u7in-24tb</code> | <code>u7in-32tb</code> </p> </li> </ul> <p>If you enable performance protection by specifying a supported instance family, the returned instance types will exclude the above unsupported instance families.</p> <p>If you specify an unsupported instance family as a value for baseline performance, the API returns an empty response for and an exception for , , , and .</p>",
+          "documentation":"<p>The instance family to use as a baseline reference.</p> <note> <p>Ensure that you specify the correct value for the instance family. The instance family is everything before the period (<code>.</code>) in the instance type name. For example, in the instance type <code>c6i.large</code>, the instance family is <code>c6i</code>, not <code>c6</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html\">Amazon EC2 instance type naming conventions</a> in <i>Amazon EC2 Instance Types</i>.</p> </note> <p>The following instance families are <i>not supported</i> for performance protection:</p> <ul> <li> <p> <code>c1</code> </p> </li> <li> <p> <code>g3</code> | <code>g3s</code> </p> </li> <li> <p> <code>hpc7g</code> </p> </li> <li> <p> <code>m1</code> | <code>m2</code> </p> </li> <li> <p> <code>mac1</code> | <code>mac2</code> | <code>mac2-m1ultra</code> | <code>mac2-m2</code> | <code>mac2-m2pro</code> </p> </li> <li> <p> <code>p3dn</code> | <code>p4d</code> | <code>p5</code> </p> </li> <li> <p> <code>t1</code> </p> </li> <li> <p> <code>u-12tb1</code> | <code>u-18tb1</code> | <code>u-24tb1</code> | <code>u-3tb1</code> | <code>u-6tb1</code> | <code>u-9tb1</code> | <code>u7i-12tb</code> | <code>u7in-16tb</code> | <code>u7in-24tb</code> | <code>u7in-32tb</code> </p> </li> </ul> <p>If you enable performance protection by specifying a supported instance family, the returned instance types will exclude the above unsupported instance families.</p> <p>If you specify an unsupported instance family as a value for baseline performance, the API returns an empty response for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements\">GetInstanceTypesFromInstanceRequirements</a> and an exception for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet\">RequestSpotFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet\">ModifyFleet</a>, and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest\">ModifySpotFleetRequest</a>.</p>",
           "locationName":"instanceFamily"
         }
       },
@@ -50182,7 +55929,7 @@
       "members":{
         "InstanceFamily":{
           "shape":"String",
-          "documentation":"<p>The instance family to use as a baseline reference.</p> <note> <p>Ensure that you specify the correct value for the instance family. The instance family is everything before the period (<code>.</code>) in the instance type name. For example, in the instance type <code>c6i.large</code>, the instance family is <code>c6i</code>, not <code>c6</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html\">Amazon EC2 instance type naming conventions</a> in <i>Amazon EC2 Instance Types</i>.</p> </note> <p>The following instance families are <i>not supported</i> for performance protection:</p> <ul> <li> <p> <code>c1</code> </p> </li> <li> <p> <code>g3</code> | <code>g3s</code> </p> </li> <li> <p> <code>hpc7g</code> </p> </li> <li> <p> <code>m1</code> | <code>m2</code> </p> </li> <li> <p> <code>mac1</code> | <code>mac2</code> | <code>mac2-m1ultra</code> | <code>mac2-m2</code> | <code>mac2-m2pro</code> </p> </li> <li> <p> <code>p3dn</code> | <code>p4d</code> | <code>p5</code> </p> </li> <li> <p> <code>t1</code> </p> </li> <li> <p> <code>u-12tb1</code> | <code>u-18tb1</code> | <code>u-24tb1</code> | <code>u-3tb1</code> | <code>u-6tb1</code> | <code>u-9tb1</code> | <code>u7i-12tb</code> | <code>u7in-16tb</code> | <code>u7in-24tb</code> | <code>u7in-32tb</code> </p> </li> </ul> <p>If you enable performance protection by specifying a supported instance family, the returned instance types will exclude the above unsupported instance families.</p> <p>If you specify an unsupported instance family as a value for baseline performance, the API returns an empty response for and an exception for , , , and .</p>"
+          "documentation":"<p>The instance family to use as a baseline reference.</p> <note> <p>Ensure that you specify the correct value for the instance family. The instance family is everything before the period (<code>.</code>) in the instance type name. For example, in the instance type <code>c6i.large</code>, the instance family is <code>c6i</code>, not <code>c6</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html\">Amazon EC2 instance type naming conventions</a> in <i>Amazon EC2 Instance Types</i>.</p> </note> <p>The following instance families are <i>not supported</i> for performance protection:</p> <ul> <li> <p> <code>c1</code> </p> </li> <li> <p> <code>g3</code> | <code>g3s</code> </p> </li> <li> <p> <code>hpc7g</code> </p> </li> <li> <p> <code>m1</code> | <code>m2</code> </p> </li> <li> <p> <code>mac1</code> | <code>mac2</code> | <code>mac2-m1ultra</code> | <code>mac2-m2</code> | <code>mac2-m2pro</code> </p> </li> <li> <p> <code>p3dn</code> | <code>p4d</code> | <code>p5</code> </p> </li> <li> <p> <code>t1</code> </p> </li> <li> <p> <code>u-12tb1</code> | <code>u-18tb1</code> | <code>u-24tb1</code> | <code>u-3tb1</code> | <code>u-6tb1</code> | <code>u-9tb1</code> | <code>u7i-12tb</code> | <code>u7in-16tb</code> | <code>u7in-24tb</code> | <code>u7in-32tb</code> </p> </li> </ul> <p>If you enable performance protection by specifying a supported instance family, the returned instance types will exclude the above unsupported instance families.</p> <p>If you specify an unsupported instance family as a value for baseline performance, the API returns an empty response for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements\">GetInstanceTypesFromInstanceRequirements</a> and an exception for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet\">RequestSpotFleet</a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet\">ModifyFleet</a>, and <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest\">ModifySpotFleetRequest</a>.</p>"
         }
       },
       "documentation":"<p>Specify an instance family to use as the baseline reference for CPU performance. All instance types that match your specified attributes will be compared against the CPU performance of the referenced instance family, regardless of CPU manufacturer or architecture.</p> <note> <p>Currently, only one instance family can be specified in the list.</p> </note>"
@@ -50201,6 +55948,11 @@
         "locationName":"item"
       }
     },
+    "Period":{
+      "type":"integer",
+      "max":86400,
+      "min":3600
+    },
     "PeriodType":{
       "type":"string",
       "enum":[
@@ -50436,6 +56188,11 @@
     "Placement":{
       "type":"structure",
       "members":{
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone of the instance.</p> <p>On input, you can specify <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code>, but not both. If you specify neither one, Amazon EC2 automatically selects an Availability Zone for you.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "Affinity":{
           "shape":"String",
           "documentation":"<p>The affinity setting for the instance on the Dedicated Host.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a> or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html\">ImportInstance</a>.</p>",
@@ -50443,7 +56200,7 @@
         },
         "GroupName":{
           "shape":"PlacementGroupName",
-          "documentation":"<p>The name of the placement group that the instance is in. If you specify <code>GroupName</code>, you can't specify <code>GroupId</code>.</p>",
+          "documentation":"<p>The name of the placement group that the instance is in.</p> <p>On input, you can specify <code>GroupId</code> or <code>GroupName</code>, but not both.</p>",
           "locationName":"groupName"
         },
         "PartitionNumber":{
@@ -50468,17 +56225,17 @@
         },
         "HostResourceGroupArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the host resource group in which to launch the instances.</p> <p>If you specify this parameter, either omit the <b>Tenancy</b> parameter or set it to <code>host</code>.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>.</p>",
+          "documentation":"<p>The ARN of the host resource group in which to launch the instances.</p> <p>On input, if you specify this parameter, either omit the <b>Tenancy</b> parameter or set it to <code>host</code>.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>.</p>",
           "locationName":"hostResourceGroupArn"
         },
         "GroupId":{
           "shape":"PlacementGroupId",
-          "documentation":"<p>The ID of the placement group that the instance is in. If you specify <code>GroupId</code>, you can't specify <code>GroupName</code>.</p>",
+          "documentation":"<p>The ID of the placement group that the instance is in.</p> <p>On input, you can specify <code>GroupId</code> or <code>GroupName</code>, but not both.</p>",
           "locationName":"groupId"
         },
         "AvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone of the instance.</p> <p>If not specified, an Availability Zone will be automatically chosen for you based on the load balancing criteria for the Region.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>.</p>",
+          "documentation":"<p>The Availability Zone of the instance.</p> <p>On input, you can specify <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code>, but not both. If you specify neither one, Amazon EC2 automatically selects an Availability Zone for you.</p> <p>This parameter is not supported for <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet\">CreateFleet</a>.</p>",
           "locationName":"availabilityZone"
         }
       },
@@ -50943,7 +56700,7 @@
       "members":{
         "State":{
           "shape":"DnsNameState",
-          "documentation":"<p>The verification state of the VPC endpoint service.</p> <p>&gt;Consumers of the endpoint service can use the private name only when the state is <code>verified</code>.</p>",
+          "documentation":"<p>The verification state of the VPC endpoint service.</p> <p>Consumers of the endpoint service can use the private name only when the state is <code>verified</code>.</p>",
           "locationName":"state"
         },
         "Type":{
@@ -51024,6 +56781,15 @@
       },
       "documentation":"<p>Describes the options for instance hostnames.</p>"
     },
+    "PrivateDnsSpecifiedDomainSet":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"item"
+      },
+      "max":10,
+      "min":0
+    },
     "PrivateIpAddressConfigSet":{
       "type":"list",
       "member":{
@@ -51414,6 +57180,40 @@
       "documentation":"<p>The status of an updated pointer (PTR) record for an Elastic IP address.</p>"
     },
     "PublicIpAddress":{"type":"string"},
+    "PublicIpDnsNameOptions":{
+      "type":"structure",
+      "members":{
+        "DnsHostnameType":{
+          "shape":"String",
+          "documentation":"<p>The public hostname type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "locationName":"dnsHostnameType"
+        },
+        "PublicIpv4DnsName":{
+          "shape":"String",
+          "documentation":"<p>An IPv4-enabled public hostname for a network interface. Requests from within the VPC resolve to the private primary IPv4 address of the network interface. Requests from the internet resolve to the public IPv4 address of the network interface.</p>",
+          "locationName":"publicIpv4DnsName"
+        },
+        "PublicIpv6DnsName":{
+          "shape":"String",
+          "documentation":"<p>An IPv6-enabled public hostname for a network interface. Requests from within the VPC or from the internet resolve to the IPv6 GUA of the network interface.</p>",
+          "locationName":"publicIpv6DnsName"
+        },
+        "PublicDualStackDnsName":{
+          "shape":"String",
+          "documentation":"<p>A dual-stack public hostname for a network interface. Requests from within the VPC resolve to both the private IPv4 address and the IPv6 Global Unicast Address of the network interface. Requests from the internet resolve to both the public IPv4 and the IPv6 GUA address of the network interface.</p>",
+          "locationName":"publicDualStackDnsName"
+        }
+      },
+      "documentation":"<p>Public hostname type options. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html\">EC2 instance hostnames, DNS names, and domains</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
+    "PublicIpDnsOption":{
+      "type":"string",
+      "enum":[
+        "public-dual-stack-dns-name",
+        "public-ipv4-dns-name",
+        "public-ipv6-dns-name"
+      ]
+    },
     "PublicIpStringList":{
       "type":"list",
       "member":{
@@ -51619,6 +57419,11 @@
           "shape":"CapacityReservation",
           "documentation":"<p>The Capacity Reservation.</p>",
           "locationName":"capacityReservation"
+        },
+        "CapacityBlocks":{
+          "shape":"CapacityBlockSet",
+          "documentation":"<p>The Capacity Block.</p>",
+          "locationName":"capacityBlockSet"
         }
       }
     },
@@ -51837,6 +57642,13 @@
         }
       }
     },
+    "RebootMigrationSupport":{
+      "type":"string",
+      "enum":[
+        "unsupported",
+        "supported"
+      ]
+    },
     "RecurringCharge":{
       "type":"structure",
       "members":{
@@ -51970,16 +57782,16 @@
       "members":{
         "ImageLocation":{
           "shape":"String",
-          "documentation":"<p>The full path to your AMI manifest in Amazon S3 storage. The specified bucket must have the <code>aws-exec-read</code> canned access control list (ACL) to ensure that it can be accessed by Amazon EC2. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl\">Canned ACLs</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>"
+          "documentation":"<p>The full path to your AMI manifest in Amazon S3 storage. The specified bucket must have the <code>aws-exec-read</code> canned access control list (ACL) to ensure that it can be accessed by Amazon EC2. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl\">Canned ACL</a> in the <i>Amazon S3 Service Developer Guide</i>.</p>"
         },
         "BillingProducts":{
           "shape":"BillingProductList",
-          "documentation":"<p>The billing product codes. Your account must be authorized to specify billing product codes.</p> <p>If your account is not authorized to specify billing product codes, you can publish AMIs that include billable software and list them on the Amazon Web Services Marketplace. You must first register as a seller on the Amazon Web Services Marketplace. For more information, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html\">Getting started as a seller</a> and <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html\">AMI-based products</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p>",
+          "documentation":"<p>The billing product codes. Your account must be authorized to specify billing product codes.</p> <p>If your account is not authorized to specify billing product codes, you can publish AMIs that include billable software and list them on the Amazon Web Services Marketplace. You must first register as a seller on the Amazon Web Services Marketplace. For more information, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html\">Getting started as an Amazon Web Services Marketplace seller</a> and <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html\">AMI-based products in Amazon Web Services Marketplace</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p>",
           "locationName":"BillingProduct"
         },
         "BootMode":{
           "shape":"BootModeValues",
-          "documentation":"<p>The boot mode of the AMI. A value of <code>uefi-preferred</code> indicates that the AMI supports both UEFI and Legacy BIOS.</p> <note> <p>The operating system contained in the AMI must be configured to support the specified boot mode.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html\">Boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>The boot mode of the AMI. A value of <code>uefi-preferred</code> indicates that the AMI supports both UEFI and Legacy BIOS.</p> <note> <p>The operating system contained in the AMI must be configured to support the specified boot mode.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html\">Instance launch behavior with Amazon EC2 boot modes</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "TpmSupport":{
           "shape":"TpmSupportValues",
@@ -51987,7 +57799,7 @@
         },
         "UefiData":{
           "shape":"StringType",
-          "documentation":"<p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData\">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href=\"https://github.com/awslabs/python-uefivars\">python-uefivars tool</a> on GitHub. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html\">UEFI Secure Boot</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>Base64 representation of the non-volatile UEFI variable store. To retrieve the UEFI data, use the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData\">GetInstanceUefiData</a> command. You can inspect and modify the UEFI data by using the <a href=\"https://github.com/awslabs/python-uefivars\">python-uefivars tool</a> on GitHub. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html\">UEFI Secure Boot for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "ImdsSupport":{
           "shape":"ImdsSupportValues",
@@ -52035,7 +57847,7 @@
         },
         "BlockDeviceMappings":{
           "shape":"BlockDeviceMappingRequestList",
-          "documentation":"<p>The block device mapping entries.</p> <p>If you specify an Amazon EBS volume using the ID of an Amazon EBS snapshot, you can't specify the encryption state of the volume.</p> <p>If you create an AMI on an Outpost, then all backing snapshots must be on the same Outpost or in the Region of that Outpost. AMIs on an Outpost that include local snapshots can be used to launch instances on the same Outpost only. For more information, <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami\">Amazon EBS local snapshots on Outposts</a> in the <i>Amazon EBS User Guide</i>.</p>",
+          "documentation":"<p>The block device mapping entries.</p> <p>If you specify an Amazon EBS volume using the ID of an Amazon EBS snapshot, you can't specify the encryption state of the volume.</p> <p>If you create an AMI on an Outpost, then all backing snapshots must be on the same Outpost or in the Region of that Outpost. AMIs on an Outpost that include local snapshots can be used to launch instances on the same Outpost only. For more information, <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami\">Create AMIs from local snapshots</a> in the <i>Amazon EBS User Guide</i>.</p>",
           "locationName":"BlockDeviceMapping"
         },
         "VirtualizationType":{
@@ -52726,6 +58538,10 @@
           "shape":"CoreNetworkArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the core network.</p>"
         },
+        "OdbNetworkArn":{
+          "shape":"OdbNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network.</p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -53040,7 +58856,7 @@
       "members":{
         "KernelId":{
           "shape":"KernelId",
-          "documentation":"<p>The ID of the kernel.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html\">User provided kernels</a> in the <i>Amazon EC2 User Guide</i>.</p> </important>"
+          "documentation":"<p>The ID of the kernel.</p> <important> <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <a href=\"https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html\">User provided kernels</a> in the <i>Amazon Linux 2 User Guide</i>.</p> </important>"
         },
         "EbsOptimized":{
           "shape":"Boolean",
@@ -53086,7 +58902,7 @@
         },
         "DisableApiTermination":{
           "shape":"Boolean",
-          "documentation":"<p>If you set this parameter to <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html\">ModifyInstanceAttribute</a>. Alternatively, if you set <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can terminate the instance by running the shutdown command from the instance.</p>"
+          "documentation":"<p>Indicates whether termination protection is enabled for the instance. The default is <code>false</code>, which means that you can terminate the instance using the Amazon EC2 console, command line tools, or API. You can enable termination protection when you launch an instance, while the instance is running, or while the instance is stopped.</p>"
         },
         "InstanceInitiatedShutdownBehavior":{
           "shape":"ShutdownBehavior",
@@ -53094,7 +58910,7 @@
         },
         "UserData":{
           "shape":"SensitiveUserData",
-          "documentation":"<p>The user data to make available to the instance. You must provide base64-encoded text. User data is limited to 16 KB. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html\">Run commands on your Amazon EC2 instance at launch</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you are creating the launch template for use with Batch, the user data must be provided in the <a href=\"https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive\">MIME multi-part archive format</a>. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html\">Amazon EC2 user data in launch templates</a> in the <i>Batch User Guide</i>.</p>"
+          "documentation":"<p>The user data to make available to the instance. You must provide base64-encoded text. User data is limited to 16 KB. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html\">Run commands when you launch an EC2 instance with user data input</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>If you are creating the launch template for use with Batch, the user data must be provided in the <a href=\"https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive\">MIME multi-part archive format</a>. For more information, see <a href=\"https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html#lt-user-data\">Amazon EC2 user data in launch templates</a> in the <i>Batch User Guide</i>.</p>"
         },
         "TagSpecifications":{
           "shape":"LaunchTemplateTagSpecificationRequestList",
@@ -53103,12 +58919,18 @@
         },
         "ElasticGpuSpecifications":{
           "shape":"ElasticGpuSpecificationList",
-          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances.</p> </note>",
+          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>",
+          "deprecated":true,
+          "deprecatedMessage":"Specifying Elastic Graphics accelerators is no longer supported on the RunInstances API.",
+          "deprecatedSince":"2024-01-08",
           "locationName":"ElasticGpuSpecification"
         },
         "ElasticInferenceAccelerators":{
           "shape":"LaunchTemplateElasticInferenceAcceleratorList",
-          "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p> <p>You cannot specify accelerators from different generations in the same request.</p> <note> <p>Starting April 15, 2023, Amazon Web Services will not onboard new customers to Amazon Elastic Inference (EI), and will help current customers migrate their workloads to options that offer better price and performance. After April 15, 2023, new customers will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used Amazon EI at least once during the past 30-day period are considered current customers and will be able to continue using the service.</p> </note>",
+          "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p> <p>You cannot specify accelerators from different generations in the same request.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Specifying Elastic Inference accelerators is no longer supported on the RunInstances API.",
+          "deprecatedSince":"2024-01-08",
           "locationName":"ElasticInferenceAccelerator"
         },
         "SecurityGroupIds":{
@@ -53131,7 +58953,7 @@
         },
         "CpuOptions":{
           "shape":"LaunchTemplateCpuOptionsRequest",
-          "documentation":"<p>The CPU options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html\">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>The CPU options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html\">CPU options for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "CapacityReservationSpecification":{
           "shape":"LaunchTemplateCapacityReservationSpecificationRequest",
@@ -53148,11 +58970,11 @@
         },
         "MetadataOptions":{
           "shape":"LaunchTemplateInstanceMetadataOptionsRequest",
-          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html\">Configure the Instance Metadata Service options</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "EnclaveOptions":{
           "shape":"LaunchTemplateEnclaveOptionsRequest",
-          "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html\">What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p> <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>"
+          "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html\">What is Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p> <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>"
         },
         "InstanceRequirements":{
           "shape":"InstanceRequirementsRequest",
@@ -53168,7 +58990,7 @@
         },
         "DisableApiStop":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether to enable the instance for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html\">Enable stop protection for your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>Indicates whether to enable the instance for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html\">Enable stop protection for your EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>"
         },
         "Operator":{
           "shape":"OperatorRequest",
@@ -53420,6 +59242,13 @@
       },
       "documentation":"<p>Describes a launch request for one or more instances, and includes owner, requester, and security group information that applies to all instances in the launch request.</p>"
     },
+    "ReservationEndDateType":{
+      "type":"string",
+      "enum":[
+        "limited",
+        "unlimited"
+      ]
+    },
     "ReservationFleetInstanceSpecification":{
       "type":"structure",
       "members":{
@@ -53469,12 +59298,26 @@
     "ReservationState":{
       "type":"string",
       "enum":[
+        "active",
+        "expired",
+        "cancelled",
+        "scheduled",
+        "pending",
+        "failed",
+        "delayed",
+        "unsupported",
         "payment-pending",
         "payment-failed",
-        "active",
         "retired"
       ]
     },
+    "ReservationType":{
+      "type":"string",
+      "enum":[
+        "capacity-block",
+        "odcr"
+      ]
+    },
     "ReservationValue":{
       "type":"structure",
       "members":{
@@ -53591,6 +59434,11 @@
           "documentation":"<p>Any tags assigned to the resource.</p>",
           "locationName":"tagSet"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "ReservedInstancesId":{
           "shape":"String",
           "documentation":"<p>The ID of the Reserved Instance.</p>",
@@ -53676,6 +59524,11 @@
           "shape":"scope",
           "documentation":"<p>Whether the Reserved Instance is applied to instances in a Region or instances in a specific Availability Zone.</p>",
           "locationName":"scope"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
         }
       },
       "documentation":"<p>Describes the configuration settings for the modified Reserved Instances.</p>"
@@ -53908,6 +59761,11 @@
           "documentation":"<p>Whether the Reserved Instance is applied to instances in a Region or an Availability Zone.</p>",
           "locationName":"scope"
         },
+        "AvailabilityZoneId":{
+          "shape":"AvailabilityZoneId",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "ReservedInstancesOfferingId":{
           "shape":"String",
           "documentation":"<p>The ID of the Reserved Instance offering. This is the offering ID used in <a>GetReservedInstancesExchangeQuote</a> to confirm that an exchange can be made.</p>",
@@ -54211,6 +60069,7 @@
         "fpga-image",
         "host-reservation",
         "image",
+        "image-usage-report",
         "import-image-task",
         "import-snapshot-task",
         "instance",
@@ -54236,6 +60095,7 @@
         "network-insights-path",
         "network-insights-access-scope",
         "network-insights-access-scope-analysis",
+        "outpost-lag",
         "placement-group",
         "prefix-list",
         "replace-root-volume-task",
@@ -54243,6 +60103,7 @@
         "route-table",
         "security-group",
         "security-group-rule",
+        "service-link-virtual-interface",
         "snapshot",
         "spot-fleet-request",
         "spot-instances-request",
@@ -54278,13 +60139,64 @@
         "verified-access-trust-provider",
         "vpn-connection-device-type",
         "vpc-block-public-access-exclusion",
+        "route-server",
+        "route-server-endpoint",
+        "route-server-peer",
         "ipam-resource-discovery",
         "ipam-resource-discovery-association",
         "instance-connect-endpoint",
         "verified-access-endpoint-target",
-        "ipam-external-resource-verification-token"
+        "ipam-external-resource-verification-token",
+        "capacity-block",
+        "mac-modification-task",
+        "ipam-prefix-list-resolver",
+        "ipam-prefix-list-resolver-target",
+        "capacity-manager-data-export"
       ]
     },
+    "ResourceTypeOption":{
+      "type":"structure",
+      "members":{
+        "OptionName":{
+          "shape":"ImageReferenceOptionName",
+          "documentation":"<p>The name of the option.</p> <ul> <li> <p>For <code>ec2:Instance</code>:</p> <p>Specify <code>state-name</code> - The current state of the EC2 instance.</p> </li> <li> <p>For <code>ec2:LaunchTemplate</code>:</p> <p>Specify <code>version-depth</code> - The number of launch template versions to check, starting from the most recent version.</p> </li> </ul>"
+        },
+        "OptionValues":{
+          "shape":"ResourceTypeOptionValuesList",
+          "documentation":"<p>A value for the specified option.</p> <ul> <li> <p>For <code>state-name</code>:</p> <ul> <li> <p>Valid values: <code>pending</code> | <code>running</code> | <code>shutting-down</code> | <code>terminated</code> | <code>stopping</code> | <code>stopped</code> </p> </li> <li> <p>Default: All states</p> </li> </ul> </li> <li> <p>For <code>version-depth</code>:</p> <ul> <li> <p>Valid values: Integers between <code>1</code> and <code>10000</code> </p> </li> <li> <p>Default: <code>10</code> </p> </li> </ul> </li> </ul>",
+          "locationName":"OptionValue"
+        }
+      },
+      "documentation":"<p>The options that affect the scope of the response.</p>"
+    },
+    "ResourceTypeOptionList":{
+      "type":"list",
+      "member":{"shape":"ResourceTypeOption"}
+    },
+    "ResourceTypeOptionValue":{"type":"string"},
+    "ResourceTypeOptionValuesList":{
+      "type":"list",
+      "member":{"shape":"ResourceTypeOptionValue"}
+    },
+    "ResourceTypeRequest":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ImageReferenceResourceType",
+          "documentation":"<p>The resource type.</p>"
+        },
+        "ResourceTypeOptions":{
+          "shape":"ResourceTypeOptionList",
+          "documentation":"<p>The options that affect the scope of the response. Valid only when <code>ResourceType</code> is <code>ec2:Instance</code> or <code>ec2:LaunchTemplate</code>.</p>",
+          "locationName":"ResourceTypeOption"
+        }
+      },
+      "documentation":"<p>A resource type to check for image references. Associated options can also be specified if the resource type is an EC2 instance or launch template.</p>"
+    },
+    "ResourceTypeRequestList":{
+      "type":"list",
+      "member":{"shape":"ResourceTypeRequest"}
+    },
     "ResponseError":{
       "type":"structure",
       "members":{
@@ -54345,7 +60257,7 @@
         },
         "ImageId":{
           "shape":"String",
-          "documentation":"<p>The ID of the AMI or a Systems Manager parameter. The Systems Manager parameter will resolve to the ID of the AMI at instance launch.</p> <p>The value depends on what you specified in the request. The possible values are:</p> <ul> <li> <p>If an AMI ID was specified in the request, then this is the AMI ID.</p> </li> <li> <p>If a Systems Manager parameter was specified in the request, and <code>ResolveAlias</code> was configured as <code>true</code>, then this is the AMI ID that the parameter is mapped to in the Parameter Store.</p> </li> <li> <p>If a Systems Manager parameter was specified in the request, and <code>ResolveAlias</code> was configured as <code>false</code>, then this is the parameter value.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The ID of the AMI or a Systems Manager parameter. The Systems Manager parameter will resolve to the ID of the AMI at instance launch.</p> <p>The value depends on what you specified in the request. The possible values are:</p> <ul> <li> <p>If an AMI ID was specified in the request, then this is the AMI ID.</p> </li> <li> <p>If a Systems Manager parameter was specified in the request, and <code>ResolveAlias</code> was configured as <code>true</code>, then this is the AMI ID that the parameter is mapped to in the Parameter Store.</p> </li> <li> <p>If a Systems Manager parameter was specified in the request, and <code>ResolveAlias</code> was configured as <code>false</code>, then this is the parameter value.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id\">Use a Systems Manager parameter instead of an AMI ID</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"imageId"
         },
         "InstanceType":{
@@ -54395,12 +60307,12 @@
         },
         "ElasticGpuSpecifications":{
           "shape":"ElasticGpuSpecificationResponseList",
-          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads that require graphics acceleration, we recommend that you use Amazon EC2 G4ad, G4dn, or G5 instances.</p> </note>",
+          "documentation":"<p>Deprecated.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>",
           "locationName":"elasticGpuSpecificationSet"
         },
         "ElasticInferenceAccelerators":{
           "shape":"LaunchTemplateElasticInferenceAcceleratorResponseList",
-          "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p> <p>You cannot specify accelerators from different generations in the same request.</p> <note> <p>Starting April 15, 2023, Amazon Web Services will not onboard new customers to Amazon Elastic Inference (EI), and will help current customers migrate their workloads to options that offer better price and performance. After April 15, 2023, new customers will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used Amazon EI at least once during the past 30-day period are considered current customers and will be able to continue using the service.</p> </note>",
+          "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p>An elastic inference accelerator to associate with the instance. Elastic inference accelerators are a resource you can attach to your Amazon EC2 instances to accelerate your Deep Learning (DL) inference workloads.</p> <p>You cannot specify accelerators from different generations in the same request.</p>",
           "locationName":"elasticInferenceAcceleratorSet"
         },
         "SecurityGroupIds":{
@@ -54425,7 +60337,7 @@
         },
         "CpuOptions":{
           "shape":"LaunchTemplateCpuOptions",
-          "documentation":"<p>The CPU options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html\">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The CPU options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html\">CPU options for Amazon EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"cpuOptions"
         },
         "CapacityReservationSpecification":{
@@ -54445,7 +60357,7 @@
         },
         "MetadataOptions":{
           "shape":"LaunchTemplateInstanceMetadataOptions",
-          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html\">Configure the Instance Metadata Service options</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"metadataOptions"
         },
         "EnclaveOptions":{
@@ -54470,7 +60382,7 @@
         },
         "DisableApiStop":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the instance is enabled for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html\">Enable stop protection for your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>",
+          "documentation":"<p>Indicates whether the instance is enabled for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html\">Enable stop protection for your EC2 instances</a> in the <i>Amazon EC2 User Guide</i>.</p>",
           "locationName":"disableApiStop"
         },
         "Operator":{
@@ -55048,7 +60960,7 @@
         },
         "Origin":{
           "shape":"RouteOrigin",
-          "documentation":"<p>Describes how the route was created.</p> <ul> <li> <p> <code>CreateRouteTable</code> - The route was automatically created when the route table was created.</p> </li> <li> <p> <code>CreateRoute</code> - The route was manually added to the route table.</p> </li> <li> <p> <code>EnableVgwRoutePropagation</code> - The route was propagated by route propagation.</p> </li> </ul>",
+          "documentation":"<p>Describes how the route was created.</p> <ul> <li> <p> <code>CreateRouteTable</code> - The route was automatically created when the route table was created.</p> </li> <li> <p> <code>CreateRoute</code> - The route was manually added to the route table.</p> </li> <li> <p> <code>EnableVgwRoutePropagation</code> - The route was propagated by route propagation.</p> </li> <li> <p> <code>Advertisement</code> - The route was created dynamically by Amazon VPC Route Server.</p> </li> </ul>",
           "locationName":"origin"
         },
         "State":{
@@ -55065,6 +60977,16 @@
           "shape":"CoreNetworkArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the core network.</p>",
           "locationName":"coreNetworkArn"
+        },
+        "OdbNetworkArn":{
+          "shape":"OdbNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network.</p>",
+          "locationName":"odbNetworkArn"
+        },
+        "IpAddress":{
+          "shape":"String",
+          "documentation":"<p>The next hop IP address for routes propagated by VPC Route Server into VPC route tables.</p>",
+          "locationName":"ipAddress"
         }
       },
       "documentation":"<p>Describes a route in a route table.</p>"
@@ -55082,14 +61004,523 @@
       "enum":[
         "CreateRouteTable",
         "CreateRoute",
-        "EnableVgwRoutePropagation"
+        "EnableVgwRoutePropagation",
+        "Advertisement"
+      ]
+    },
+    "RouteServer":{
+      "type":"structure",
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The unique identifier of the route server.</p>",
+          "locationName":"routeServerId"
+        },
+        "AmazonSideAsn":{
+          "shape":"Long",
+          "documentation":"<p>The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for the appliance. Valid values are from 1 to 4294967295. We recommend using a private ASN in the 64512–65534 (16-bit ASN) or 4200000000–4294967294 (32-bit ASN) range.</p>",
+          "locationName":"amazonSideAsn"
+        },
+        "State":{
+          "shape":"RouteServerState",
+          "documentation":"<p>The current state of the route server.</p>",
+          "locationName":"state"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Any tags assigned to the route server.</p>",
+          "locationName":"tagSet"
+        },
+        "PersistRoutesState":{
+          "shape":"RouteServerPersistRoutesState",
+          "documentation":"<p>The current state of route persistence for the route server.</p>",
+          "locationName":"persistRoutesState"
+        },
+        "PersistRoutesDuration":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The number of minutes a route server will wait after BGP is re-established to unpersist the routes in the FIB and RIB. Value must be in the range of 1-5. The default value is 1. Only valid if <code>persistRoutesState</code> is 'enabled'.</p> <p>If you set the duration to 1 minute, then when your network appliance re-establishes BGP with route server, it has 1 minute to relearn it's adjacent network and advertise those routes to route server before route server resumes normal functionality. In most cases, 1 minute is probably sufficient. If, however, you have concerns that your BGP network may not be capable of fully re-establishing and re-learning everything in 1 minute, you can increase the duration up to 5 minutes.</p>",
+          "locationName":"persistRoutesDuration"
+        },
+        "SnsNotificationsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether SNS notifications are enabled for the route server. Enabling SNS notifications persists BGP status changes to an SNS topic provisioned by Amazon Web Services.</p>",
+          "locationName":"snsNotificationsEnabled"
+        },
+        "SnsTopicArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the SNS topic where notifications are published.</p>",
+          "locationName":"snsTopicArn"
+        }
+      },
+      "documentation":"<p>Describes a route server and its configuration.</p> <p>Amazon VPC Route Server simplifies routing for traffic between workloads that are deployed within a VPC and its internet gateways. With this feature, VPC Route Server dynamically updates VPC and internet gateway route tables with your preferred IPv4 or IPv6 routes to achieve routing fault tolerance for those workloads. This enables you to automatically reroute traffic within a VPC, which increases the manageability of VPC routing and interoperability with third-party workloads.</p> <p>Route server supports the follow route table types:</p> <ul> <li> <p>VPC route tables not associated with subnets</p> </li> <li> <p>Subnet route tables</p> </li> <li> <p>Internet gateway route tables</p> </li> </ul> <p>Route server does not support route tables associated with virtual private gateways. To propagate routes into a transit gateway route table, use <a href=\"https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html\">Transit Gateway Connect</a>.</p>"
+    },
+    "RouteServerAssociation":{
+      "type":"structure",
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the associated route server.</p>",
+          "locationName":"routeServerId"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the associated VPC.</p>",
+          "locationName":"vpcId"
+        },
+        "State":{
+          "shape":"RouteServerAssociationState",
+          "documentation":"<p>The current state of the association.</p>",
+          "locationName":"state"
+        }
+      },
+      "documentation":"<p>Describes the association between a route server and a VPC.</p> <p>A route server association is the connection established between a route server and a VPC.</p>"
+    },
+    "RouteServerAssociationState":{
+      "type":"string",
+      "enum":[
+        "associating",
+        "associated",
+        "disassociating"
       ]
     },
+    "RouteServerAssociationsList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerAssociation",
+        "locationName":"item"
+      }
+    },
+    "RouteServerBfdState":{
+      "type":"string",
+      "enum":[
+        "up",
+        "down"
+      ]
+    },
+    "RouteServerBfdStatus":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"RouteServerBfdState",
+          "documentation":"<p>The operational status of the BFD session.</p>",
+          "locationName":"status"
+        }
+      },
+      "documentation":"<p>The current status of Bidirectional Forwarding Detection (BFD) for a BGP session.</p>"
+    },
+    "RouteServerBgpOptions":{
+      "type":"structure",
+      "members":{
+        "PeerAsn":{
+          "shape":"Long",
+          "documentation":"<p>The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for the appliance. Valid values are from 1 to 4294967295. We recommend using a private ASN in the 64512–65534 (16-bit ASN) or 4200000000–4294967294 (32-bit ASN) range.</p>",
+          "locationName":"peerAsn"
+        },
+        "PeerLivenessDetection":{
+          "shape":"RouteServerPeerLivenessMode",
+          "documentation":"<p>The liveness detection protocol used for the BGP peer.</p> <p>The requested liveness detection protocol for the BGP peer.</p> <ul> <li> <p> <code>bgp-keepalive</code>: The standard BGP keep alive mechanism (<a href=\"https://www.rfc-editor.org/rfc/rfc4271#page-21\">RFC4271</a>) that is stable but may take longer to fail-over in cases of network impact or router failure.</p> </li> <li> <p> <code>bfd</code>: An additional Bidirectional Forwarding Detection (BFD) protocol (<a href=\"https://www.rfc-editor.org/rfc/rfc5880\">RFC5880</a>) that enables fast failover by using more sensitive liveness detection.</p> </li> </ul> <p>Defaults to <code>bgp-keepalive</code>.</p>",
+          "locationName":"peerLivenessDetection"
+        }
+      },
+      "documentation":"<p>The BGP configuration options for a route server peer.</p>"
+    },
+    "RouteServerBgpOptionsRequest":{
+      "type":"structure",
+      "required":["PeerAsn"],
+      "members":{
+        "PeerAsn":{
+          "shape":"Long",
+          "documentation":"<p>The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for the appliance. Valid values are from 1 to 4294967295. We recommend using a private ASN in the 64512–65534 (16-bit ASN) or 4200000000–4294967294 (32-bit ASN) range.</p>"
+        },
+        "PeerLivenessDetection":{
+          "shape":"RouteServerPeerLivenessMode",
+          "documentation":"<p>The requested liveness detection protocol for the BGP peer.</p> <ul> <li> <p> <code>bgp-keepalive</code>: The standard BGP keep alive mechanism (<a href=\"https://www.rfc-editor.org/rfc/rfc4271#page-21\">RFC4271</a>) that is stable but may take longer to fail-over in cases of network impact or router failure.</p> </li> <li> <p> <code>bfd</code>: An additional Bidirectional Forwarding Detection (BFD) protocol (<a href=\"https://www.rfc-editor.org/rfc/rfc5880\">RFC5880</a>) that enables fast failover by using more sensitive liveness detection.</p> </li> </ul> <p>Defaults to <code>bgp-keepalive</code>.</p>"
+        }
+      },
+      "documentation":"<p>The BGP configuration options requested for a route server peer.</p>"
+    },
+    "RouteServerBgpState":{
+      "type":"string",
+      "enum":[
+        "up",
+        "down"
+      ]
+    },
+    "RouteServerBgpStatus":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"RouteServerBgpState",
+          "documentation":"<p>The operational status of the BGP session. The status enables you to monitor session liveness if you lack monitoring on your router/appliance.</p>",
+          "locationName":"status"
+        }
+      },
+      "documentation":"<p>The current status of a BGP session.</p>"
+    },
+    "RouteServerEndpoint":{
+      "type":"structure",
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server associated with this endpoint.</p>",
+          "locationName":"routeServerId"
+        },
+        "RouteServerEndpointId":{
+          "shape":"RouteServerEndpointId",
+          "documentation":"<p>The unique identifier of the route server endpoint.</p>",
+          "locationName":"routeServerEndpointId"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC containing the endpoint.</p>",
+          "locationName":"vpcId"
+        },
+        "SubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>The ID of the subnet to place the route server endpoint into.</p>",
+          "locationName":"subnetId"
+        },
+        "EniId":{
+          "shape":"NetworkInterfaceId",
+          "documentation":"<p>The ID of the Elastic network interface for the endpoint.</p>",
+          "locationName":"eniId"
+        },
+        "EniAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address of the Elastic network interface for the endpoint.</p>",
+          "locationName":"eniAddress"
+        },
+        "State":{
+          "shape":"RouteServerEndpointState",
+          "documentation":"<p>The current state of the route server endpoint.</p>",
+          "locationName":"state"
+        },
+        "FailureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for any failure in endpoint creation or operation.</p>",
+          "locationName":"failureReason"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Any tags assigned to the route server endpoint.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>Describes a route server endpoint and its properties.</p> <p>A route server endpoint is an Amazon Web Services-managed component inside a subnet that facilitates <a href=\"https://en.wikipedia.org/wiki/Border_Gateway_Protocol\">BGP (Border Gateway Protocol)</a> connections between your route server and your BGP peers.</p>"
+    },
+    "RouteServerEndpointId":{"type":"string"},
+    "RouteServerEndpointIdsList":{
+      "type":"list",
+      "member":{"shape":"RouteServerEndpointId"}
+    },
+    "RouteServerEndpointState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "deleting",
+        "deleted",
+        "failing",
+        "failed",
+        "delete-failed"
+      ]
+    },
+    "RouteServerEndpointsList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerEndpoint",
+        "locationName":"item"
+      }
+    },
+    "RouteServerId":{"type":"string"},
+    "RouteServerIdsList":{
+      "type":"list",
+      "member":{"shape":"RouteServerId"}
+    },
+    "RouteServerMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":5
+    },
+    "RouteServerPeer":{
+      "type":"structure",
+      "members":{
+        "RouteServerPeerId":{
+          "shape":"RouteServerPeerId",
+          "documentation":"<p>The unique identifier of the route server peer.</p>",
+          "locationName":"routeServerPeerId"
+        },
+        "RouteServerEndpointId":{
+          "shape":"RouteServerEndpointId",
+          "documentation":"<p>The ID of the route server endpoint associated with this peer.</p>",
+          "locationName":"routeServerEndpointId"
+        },
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server associated with this peer.</p>",
+          "locationName":"routeServerId"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC containing the route server peer.</p>",
+          "locationName":"vpcId"
+        },
+        "SubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>The ID of the subnet containing the route server peer.</p>",
+          "locationName":"subnetId"
+        },
+        "State":{
+          "shape":"RouteServerPeerState",
+          "documentation":"<p>The current state of the route server peer.</p>",
+          "locationName":"state"
+        },
+        "FailureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for any failure in peer creation or operation.</p>",
+          "locationName":"failureReason"
+        },
+        "EndpointEniId":{
+          "shape":"NetworkInterfaceId",
+          "documentation":"<p>The ID of the Elastic network interface for the route server endpoint.</p>",
+          "locationName":"endpointEniId"
+        },
+        "EndpointEniAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address of the Elastic network interface for the route server endpoint.</p>",
+          "locationName":"endpointEniAddress"
+        },
+        "PeerAddress":{
+          "shape":"String",
+          "documentation":"<p>The IPv4 address of the peer device.</p>",
+          "locationName":"peerAddress"
+        },
+        "BgpOptions":{
+          "shape":"RouteServerBgpOptions",
+          "documentation":"<p>The BGP configuration options for this peer, including ASN (Autonomous System Number) and BFD (Bidrectional Forwarding Detection) settings.</p>",
+          "locationName":"bgpOptions"
+        },
+        "BgpStatus":{
+          "shape":"RouteServerBgpStatus",
+          "documentation":"<p>The current status of the BGP session with this peer.</p>",
+          "locationName":"bgpStatus"
+        },
+        "BfdStatus":{
+          "shape":"RouteServerBfdStatus",
+          "documentation":"<p>The current status of the BFD session with this peer.</p>",
+          "locationName":"bfdStatus"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Any tags assigned to the route server peer.</p>",
+          "locationName":"tagSet"
+        }
+      },
+      "documentation":"<p>Describes a BGP peer configuration for a route server endpoint.</p> <p>A route server peer is a session between a route server endpoint and the device deployed in Amazon Web Services (such as a firewall appliance or other network security function running on an EC2 instance). The device must meet these requirements:</p> <ul> <li> <p>Have an elastic network interface in the VPC</p> </li> <li> <p>Support BGP (Border Gateway Protocol)</p> </li> <li> <p>Can initiate BGP sessions</p> </li> </ul>"
+    },
+    "RouteServerPeerId":{"type":"string"},
+    "RouteServerPeerIdsList":{
+      "type":"list",
+      "member":{"shape":"RouteServerPeerId"}
+    },
+    "RouteServerPeerLivenessMode":{
+      "type":"string",
+      "enum":[
+        "bfd",
+        "bgp-keepalive"
+      ]
+    },
+    "RouteServerPeerState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "deleting",
+        "deleted",
+        "failing",
+        "failed"
+      ]
+    },
+    "RouteServerPeersList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerPeer",
+        "locationName":"item"
+      }
+    },
+    "RouteServerPersistRoutesAction":{
+      "type":"string",
+      "enum":[
+        "enable",
+        "disable",
+        "reset"
+      ]
+    },
+    "RouteServerPersistRoutesState":{
+      "type":"string",
+      "enum":[
+        "enabling",
+        "enabled",
+        "resetting",
+        "disabling",
+        "disabled",
+        "modifying"
+      ]
+    },
+    "RouteServerPropagation":{
+      "type":"structure",
+      "members":{
+        "RouteServerId":{
+          "shape":"RouteServerId",
+          "documentation":"<p>The ID of the route server configured for route propagation.</p>",
+          "locationName":"routeServerId"
+        },
+        "RouteTableId":{
+          "shape":"RouteTableId",
+          "documentation":"<p>The ID of the route table configured for route server propagation.</p>",
+          "locationName":"routeTableId"
+        },
+        "State":{
+          "shape":"RouteServerPropagationState",
+          "documentation":"<p>The current state of route propagation.</p>",
+          "locationName":"state"
+        }
+      },
+      "documentation":"<p>Describes the route propagation configuration between a route server and a route table.</p> <p>When enabled, route server propagation installs the routes in the FIB on the route table you've specified. Route server supports IPv4 and IPv6 route propagation.</p>"
+    },
+    "RouteServerPropagationState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "deleting"
+      ]
+    },
+    "RouteServerPropagationsList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerPropagation",
+        "locationName":"item"
+      }
+    },
+    "RouteServerRoute":{
+      "type":"structure",
+      "members":{
+        "RouteServerEndpointId":{
+          "shape":"RouteServerEndpointId",
+          "documentation":"<p>The ID of the route server endpoint that received this route.</p>",
+          "locationName":"routeServerEndpointId"
+        },
+        "RouteServerPeerId":{
+          "shape":"RouteServerPeerId",
+          "documentation":"<p>The ID of the route server peer that advertised this route.</p>",
+          "locationName":"routeServerPeerId"
+        },
+        "RouteInstallationDetails":{
+          "shape":"RouteServerRouteInstallationDetails",
+          "documentation":"<p>Details about the installation status of this route in route tables.</p>",
+          "locationName":"routeInstallationDetailSet"
+        },
+        "RouteStatus":{
+          "shape":"RouteServerRouteStatus",
+          "documentation":"<p>The current status of the route in the routing database. Values are <code>in-rib</code> or <code>in-fib</code> depending on if the routes are in the RIB or the FIB database.</p> <p>The <a href=\"https://en.wikipedia.org/wiki/Routing_table\">Routing Information Base (RIB)</a> serves as a database that stores all the routing information and network topology data collected by a router or routing system, such as routes learned from BGP peers. The RIB is constantly updated as new routing information is received or existing routes change. This ensures that the route server always has the most current view of the network topology and can make optimal routing decisions.</p> <p>The <a href=\"https://en.wikipedia.org/wiki/Forwarding_information_base\">Forwarding Information Base (FIB)</a> serves as a forwarding table for what route server has determined are the best-path routes in the RIB after evaluating all available routing information and policies. The FIB routes are installed on the route tables. The FIB is recomputed whenever there are changes to the RIB.</p>",
+          "locationName":"routeStatus"
+        },
+        "Prefix":{
+          "shape":"String",
+          "documentation":"<p>The destination CIDR block of the route.</p>",
+          "locationName":"prefix"
+        },
+        "AsPaths":{
+          "shape":"AsPath",
+          "documentation":"<p>The AS path attributes of the BGP route.</p>",
+          "locationName":"asPathSet"
+        },
+        "Med":{
+          "shape":"Integer",
+          "documentation":"<p>The Multi-Exit Discriminator (MED) value of the BGP route.</p>",
+          "locationName":"med"
+        },
+        "NextHopIp":{
+          "shape":"String",
+          "documentation":"<p>The IP address for the next hop.</p>",
+          "locationName":"nextHopIp"
+        }
+      },
+      "documentation":"<p>Describes a route in the route server's routing database.</p>"
+    },
+    "RouteServerRouteInstallationDetail":{
+      "type":"structure",
+      "members":{
+        "RouteTableId":{
+          "shape":"RouteTableId",
+          "documentation":"<p>The ID of the route table where the route is being installed.</p>",
+          "locationName":"routeTableId"
+        },
+        "RouteInstallationStatus":{
+          "shape":"RouteServerRouteInstallationStatus",
+          "documentation":"<p>The current installation status of the route in the route table.</p>",
+          "locationName":"routeInstallationStatus"
+        },
+        "RouteInstallationStatusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current installation status of the route.</p>",
+          "locationName":"routeInstallationStatusReason"
+        }
+      },
+      "documentation":"<p>Describes the installation status of a route in a route table.</p>"
+    },
+    "RouteServerRouteInstallationDetails":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerRouteInstallationDetail",
+        "locationName":"item"
+      }
+    },
+    "RouteServerRouteInstallationStatus":{
+      "type":"string",
+      "enum":[
+        "installed",
+        "rejected"
+      ]
+    },
+    "RouteServerRouteList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServerRoute",
+        "locationName":"item"
+      }
+    },
+    "RouteServerRouteStatus":{
+      "type":"string",
+      "enum":[
+        "in-rib",
+        "in-fib"
+      ]
+    },
+    "RouteServerState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "modifying",
+        "deleting",
+        "deleted"
+      ]
+    },
+    "RouteServersList":{
+      "type":"list",
+      "member":{
+        "shape":"RouteServer",
+        "locationName":"item"
+      }
+    },
     "RouteState":{
       "type":"string",
       "enum":[
         "active",
-        "blackhole"
+        "blackhole",
+        "filtered"
       ]
     },
     "RouteTable":{
@@ -55161,6 +61592,11 @@
           "documentation":"<p>The ID of the internet gateway or virtual private gateway.</p>",
           "locationName":"gatewayId"
         },
+        "PublicIpv4Pool":{
+          "shape":"String",
+          "documentation":"<p>The ID of a public IPv4 pool. A public IPv4 pool is a pool of IPv4 addresses that you've brought to Amazon Web Services with BYOIP.</p>",
+          "locationName":"publicIpv4Pool"
+        },
         "AssociationState":{
           "shape":"RouteTableAssociationState",
           "documentation":"<p>The state of the association.</p>",
@@ -55324,7 +61760,7 @@
         },
         "InstanceType":{
           "shape":"InstanceType",
-          "documentation":"<p>The instance type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Amazon EC2 instance types</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+          "documentation":"<p>The instance type. For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html\">Amazon EC2 Instance Types Guide</a>.</p>"
         },
         "Ipv6AddressCount":{
           "shape":"Integer",
@@ -55341,7 +61777,7 @@
         },
         "KeyName":{
           "shape":"KeyPairName",
-          "documentation":"<p>The name of the key pair. You can create a key pair using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html\">CreateKeyPair</a> or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html\">ImportKeyPair</a>.</p> <important> <p>If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.</p> </important>"
+          "documentation":"<p>The name of the key pair. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html\">Create a key pair for your EC2 instance</a>.</p> <important> <p>If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.</p> </important>"
         },
         "MaxCount":{
           "shape":"Integer",
@@ -55365,7 +61801,7 @@
         },
         "SecurityGroupIds":{
           "shape":"SecurityGroupIdStringList",
-          "documentation":"<p>The IDs of the security groups. You can create a security group using <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html\">CreateSecurityGroup</a>.</p> <p>If you specify a network interface, you must specify any security groups as part of the network interface instead of using this parameter.</p>",
+          "documentation":"<p>The IDs of the security groups.</p> <p>If you specify a network interface, you must specify any security groups as part of the network interface instead of using this parameter.</p>",
           "locationName":"SecurityGroupId"
         },
         "SecurityGroups":{
@@ -55379,15 +61815,21 @@
         },
         "UserData":{
           "shape":"RunInstancesUserData",
-          "documentation":"<p>The user data to make available to the instance. User data must be base64-encoded. Depending on the tool or SDK that you're using, the base64-encoding might be performed for you. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html\">Work with instance user data</a>.</p>"
+          "documentation":"<p>The user data to make available to the instance. User data must be base64-encoded. Depending on the tool or SDK that you're using, the base64-encoding might be performed for you. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html\">Run commands at launch using instance user data</a>.</p>"
         },
         "ElasticGpuSpecification":{
           "shape":"ElasticGpuSpecifications",
-          "documentation":"<p>An elastic GPU to associate with the instance.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>"
+          "documentation":"<p>An elastic GPU to associate with the instance.</p> <note> <p>Amazon Elastic Graphics reached end of life on January 8, 2024.</p> </note>",
+          "deprecated":true,
+          "deprecatedMessage":"Specifying Elastic Graphics accelerators is no longer supported on the RunInstances API.",
+          "deprecatedSince":"2024-01-08"
         },
         "ElasticInferenceAccelerators":{
           "shape":"ElasticInferenceAccelerators",
           "documentation":"<p>An elastic inference accelerator to associate with the instance.</p> <note> <p>Amazon Elastic Inference is no longer available.</p> </note>",
+          "deprecated":true,
+          "deprecatedMessage":"Specifying Elastic Inference accelerators is no longer supported on the RunInstances API.",
+          "deprecatedSince":"2024-01-08",
           "locationName":"ElasticInferenceAccelerator"
         },
         "TagSpecifications":{
@@ -55426,11 +61868,11 @@
         },
         "MetadataOptions":{
           "shape":"InstanceMetadataOptionsRequest",
-          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html\">Instance metadata and user data</a>.</p>"
+          "documentation":"<p>The metadata options for the instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html\">Configure the Instance Metadata Service options</a>.</p>"
         },
         "EnclaveOptions":{
           "shape":"EnclaveOptionsRequest",
-          "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html\">What is Amazon Web Services Nitro Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User Guide</i>.</p> <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>"
+          "documentation":"<p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For more information, see <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/\">Amazon Web Services Nitro Enclaves User Guide</a>.</p> <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same instance.</p>"
         },
         "PrivateDnsNameOptions":{
           "shape":"PrivateDnsNameOptionsRequest",
@@ -55442,7 +61884,7 @@
         },
         "DisableApiStop":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether an instance is enabled for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection\">Stop protection</a>. </p>"
+          "documentation":"<p>Indicates whether an instance is enabled for stop protection. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html\">Enable stop protection for your EC2 instances</a>.</p>"
         },
         "EnablePrimaryIpv6":{
           "shape":"Boolean",
@@ -55463,7 +61905,7 @@
         },
         "DisableApiTermination":{
           "shape":"Boolean",
-          "documentation":"<p>If you set this parameter to <code>true</code>, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after launch, use <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html\">ModifyInstanceAttribute</a>. Alternatively, if you set <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can terminate the instance by running the shutdown command from the instance.</p> <p>Default: <code>false</code> </p>",
+          "documentation":"<p>Indicates whether termination protection is enabled for the instance. The default is <code>false</code>, which means that you can terminate the instance using the Amazon EC2 console, command line tools, or API. You can enable termination protection when you launch an instance, while the instance is running, or while the instance is stopped.</p>",
           "locationName":"disableApiTermination"
         },
         "InstanceInitiatedShutdownBehavior":{
@@ -55478,7 +61920,7 @@
         },
         "ClientToken":{
           "shape":"String",
-          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring Idempotency</a>.</p> <p>Constraints: Maximum 64 ASCII characters</p>",
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html\">Ensuring idempotency in Amazon EC2 API requests</a>.</p> <p>Constraints: Maximum 64 ASCII characters</p>",
           "idempotencyToken":true,
           "locationName":"clientToken"
         },
@@ -55617,6 +62059,10 @@
         "none"
       ]
     },
+    "Schedule":{
+      "type":"string",
+      "enum":["hourly"]
+    },
     "ScheduledInstance":{
       "type":"structure",
       "members":{
@@ -56409,7 +62855,7 @@
         },
         "TransitGatewayId":{
           "shape":"String",
-          "documentation":"<note> <p>This parameter is in preview and may not be available for your account.</p> </note> <p>The ID of the transit gateway (if applicable).</p>",
+          "documentation":"<p>The ID of the transit gateway (if applicable).</p>",
           "locationName":"transitGatewayId"
         }
       },
@@ -56577,7 +63023,7 @@
           "documentation":"<p>The description of the security group rule.</p>"
         }
       },
-      "documentation":"<p>Describes a security group rule.</p> <p>You must specify exactly one of the following parameters, based on the rule type:</p> <ul> <li> <p>CidrIpv4</p> </li> <li> <p>CidrIpv6</p> </li> <li> <p>PrefixListId</p> </li> <li> <p>ReferencedGroupId</p> </li> </ul> <p>When you modify a rule, you cannot change the rule type. For example, if the rule uses an IPv4 address range, you must use <code>CidrIpv4</code> to specify a new IPv4 address range.</p>"
+      "documentation":"<p>Describes a security group rule.</p> <p>You must specify exactly one of the following parameters, based on the rule type:</p> <ul> <li> <p>CidrIpv4</p> </li> <li> <p>CidrIpv6</p> </li> <li> <p>PrefixListId</p> </li> <li> <p>ReferencedGroupId</p> </li> </ul> <note> <p> Amazon Web Services <a href=\"https://en.wikipedia.org/wiki/Canonicalization\">canonicalizes</a> IPv4 and IPv6 CIDRs. For example, if you specify 100.68.0.18/18 for the CIDR block, Amazon Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any subsequent DescribeSecurityGroups and DescribeSecurityGroupRules calls will return the canonicalized form of the CIDR block. Additionally, if you attempt to add another rule with the non-canonical form of the CIDR (such as 100.68.0.18/18) and there is already a rule for the canonicalized form of the CIDR block (such as 100.68.0.0/18), the API throws an duplicate rule error.</p> </note> <p>When you modify a rule, you cannot change the rule type. For example, if the rule uses an IPv4 address range, you must use <code>CidrIpv4</code> to specify a new IPv4 address range.</p>"
     },
     "SecurityGroupRuleUpdate":{
       "type":"structure",
@@ -56635,6 +63081,11 @@
           "shape":"String",
           "documentation":"<p>The association's state reason.</p>",
           "locationName":"stateReason"
+        },
+        "GroupOwnerId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID of the owner of the security group.</p>",
+          "locationName":"groupOwnerId"
         }
       },
       "documentation":"<p>A security group association with a VPC that you made with <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateSecurityGroupVpc.html\">AssociateSecurityGroupVpc</a>.</p>"
@@ -56678,6 +63129,10 @@
         }
       }
     },
+    "SensitiveMacCredentials":{
+      "type":"string",
+      "sensitive":true
+    },
     "SensitiveUrl":{
       "type":"string",
       "sensitive":true
@@ -56709,9 +63164,14 @@
           "documentation":"<p>The service state.</p>",
           "locationName":"serviceState"
         },
+        "AvailabilityZoneIds":{
+          "shape":"ValueStringList",
+          "documentation":"<p>The IDs of the Availability Zones in which the service is available.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>",
+          "locationName":"availabilityZoneIdSet"
+        },
         "AvailabilityZones":{
           "shape":"ValueStringList",
-          "documentation":"<p>The Availability Zones in which the service is available.</p>",
+          "documentation":"<p>The Availability Zones in which the service is available.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>",
           "locationName":"availabilityZoneSet"
         },
         "AcceptanceRequired":{
@@ -56814,9 +63274,14 @@
           "documentation":"<p>The Region where the service is hosted.</p>",
           "locationName":"serviceRegion"
         },
+        "AvailabilityZoneIds":{
+          "shape":"ValueStringList",
+          "documentation":"<p>The IDs of the Availability Zones in which the service is available.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>",
+          "locationName":"availabilityZoneIdSet"
+        },
         "AvailabilityZones":{
           "shape":"ValueStringList",
-          "documentation":"<p>The Availability Zones in which the service is available.</p>",
+          "documentation":"<p>The Availability Zones in which the service is available.</p> <p>Either <code>AvailabilityZone</code> or <code>AvailabilityZoneId</code> can be specified, but not both</p>",
           "locationName":"availabilityZoneSet"
         },
         "Owner":{
@@ -56884,6 +63349,109 @@
         "locationName":"item"
       }
     },
+    "ServiceLinkMaxResults":{
+      "type":"integer",
+      "max":1000,
+      "min":5
+    },
+    "ServiceLinkVirtualInterface":{
+      "type":"structure",
+      "members":{
+        "ServiceLinkVirtualInterfaceId":{
+          "shape":"ServiceLinkVirtualInterfaceId",
+          "documentation":"<p>The ID of the service link virtual interface.</p>",
+          "locationName":"serviceLinkVirtualInterfaceId"
+        },
+        "ServiceLinkVirtualInterfaceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Number (ARN) for the service link virtual interface. </p>",
+          "locationName":"serviceLinkVirtualInterfaceArn"
+        },
+        "OutpostId":{
+          "shape":"String",
+          "documentation":"<p>The Outpost ID for the service link virtual interface.</p>",
+          "locationName":"outpostId"
+        },
+        "OutpostArn":{
+          "shape":"String",
+          "documentation":"<p>The Outpost Amazon Resource Number (ARN) for the service link virtual interface.</p>",
+          "locationName":"outpostArn"
+        },
+        "OwnerId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the service link virtual interface..</p>",
+          "locationName":"ownerId"
+        },
+        "LocalAddress":{
+          "shape":"String",
+          "documentation":"<p>The IPv4 address assigned to the local gateway virtual interface on the Outpost side.</p>",
+          "locationName":"localAddress"
+        },
+        "PeerAddress":{
+          "shape":"String",
+          "documentation":"<p>The IPv4 peer address for the service link virtual interface.</p>",
+          "locationName":"peerAddress"
+        },
+        "PeerBgpAsn":{
+          "shape":"Long",
+          "documentation":"<p>The ASN for the Border Gateway Protocol (BGP) associated with the service link virtual interface.</p>",
+          "locationName":"peerBgpAsn"
+        },
+        "Vlan":{
+          "shape":"Integer",
+          "documentation":"<p>The virtual local area network for the service link virtual interface.</p>",
+          "locationName":"vlan"
+        },
+        "OutpostLagId":{
+          "shape":"OutpostLagId",
+          "documentation":"<p>The link aggregation group (LAG) ID for the service link virtual interface.</p>",
+          "locationName":"outpostLagId"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags associated with the service link virtual interface.</p>",
+          "locationName":"tagSet"
+        },
+        "ConfigurationState":{
+          "shape":"ServiceLinkVirtualInterfaceConfigurationState",
+          "documentation":"<p>The current state of the service link virtual interface.</p>",
+          "locationName":"configurationState"
+        }
+      },
+      "documentation":"<p>Describes the service link virtual interfaces that establish connectivity between Amazon Web Services Outpost and on-premises networks.</p>"
+    },
+    "ServiceLinkVirtualInterfaceConfigurationState":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "available",
+        "deleting",
+        "deleted"
+      ]
+    },
+    "ServiceLinkVirtualInterfaceId":{"type":"string"},
+    "ServiceLinkVirtualInterfaceIdSet":{
+      "type":"list",
+      "member":{
+        "shape":"ServiceLinkVirtualInterfaceId",
+        "locationName":"item"
+      }
+    },
+    "ServiceLinkVirtualInterfaceSet":{
+      "type":"list",
+      "member":{
+        "shape":"ServiceLinkVirtualInterface",
+        "locationName":"item"
+      }
+    },
+    "ServiceManaged":{
+      "type":"string",
+      "enum":[
+        "alb",
+        "nlb",
+        "rnat"
+      ]
+    },
     "ServiceNetworkArn":{"type":"string"},
     "ServiceState":{
       "type":"string",
@@ -57013,6 +63581,11 @@
           "documentation":"<p>The time stamp when the snapshot was completed.</p>",
           "locationName":"completionTime"
         },
+        "FullSnapshotSizeInBytes":{
+          "shape":"Long",
+          "documentation":"<p>The full size of the snapshot, in bytes.</p> <important> <p>This is <b>not</b> the incremental size of the snapshot. This is the full snapshot size and represents the size of all the blocks that were written to the source volume at the time the snapshot was created.</p> </important>",
+          "locationName":"fullSnapshotSizeInBytes"
+        },
         "SnapshotId":{
           "shape":"String",
           "documentation":"<p>The ID of the snapshot. Each snapshot receives a unique identifier when it is created.</p>",
@@ -57020,7 +63593,7 @@
         },
         "VolumeId":{
           "shape":"String",
-          "documentation":"<p>The ID of the volume that was used to create the snapshot. Snapshots created by the <a>CopySnapshot</a> action have an arbitrary volume ID that should not be used for any purpose.</p>",
+          "documentation":"<p>The ID of the volume that was used to create the snapshot. Snapshots created by a copy snapshot operation have an arbitrary volume ID that you should not use for any purpose.</p>",
           "locationName":"volumeId"
         },
         "State":{
@@ -57285,7 +63858,7 @@
         },
         "RecycleBinEnterTime":{
           "shape":"MillisecondDateTime",
-          "documentation":"<p>The date and time when the snaphsot entered the Recycle Bin.</p>",
+          "documentation":"<p>The date and time when the snapshot entered the Recycle Bin.</p>",
           "locationName":"recycleBinEnterTime"
         },
         "RecycleBinExitTime":{
@@ -57313,6 +63886,16 @@
         "locationName":"item"
       }
     },
+    "SnapshotReturnCodes":{
+      "type":"string",
+      "enum":[
+        "success",
+        "skipped",
+        "missing-permissions",
+        "internal-error",
+        "client-error"
+      ]
+    },
     "SnapshotSet":{
       "type":"list",
       "member":{
@@ -57893,9 +64476,14 @@
         },
         "LaunchedAvailabilityZone":{
           "shape":"String",
-          "documentation":"<p>The Availability Zone in which the request is launched.</p>",
+          "documentation":"<p>The Availability Zone in which the request is launched.</p> <p>Either <code>launchedAvailabilityZone</code> or <code>launchedAvailabilityZoneId</code> can be specified, but not both</p>",
           "locationName":"launchedAvailabilityZone"
         },
+        "LaunchedAvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone in which the request is launched.</p> <p>Either <code>launchedAvailabilityZone</code> or <code>launchedAvailabilityZoneId</code> can be specified, but not both</p>",
+          "locationName":"launchedAvailabilityZoneId"
+        },
         "ProductDescription":{
           "shape":"RIProductDescription",
           "documentation":"<p>The product description associated with the Spot Instance.</p>",
@@ -58035,7 +64623,7 @@
       "members":{
         "MaxPrice":{
           "shape":"String",
-          "documentation":"<p>The maximum hourly price that you're willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important> <p>If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.</p> </important>"
+          "documentation":"<p>The maximum hourly price that you're willing to pay for a Spot Instance. We do not recommend using this parameter because it can lead to increased interruptions. If you do not specify this parameter, you will pay the current Spot price.</p> <important> <p>If you specify a maximum price, your Spot Instances will be interrupted more frequently than if you do not specify this parameter.</p> <p>If you specify a maximum price, it must be more than USD $0.001. Specifying a value below USD $0.001 will result in an <code>InvalidParameterValue</code> error message.</p> </important>"
         },
         "SpotInstanceType":{
           "shape":"SpotInstanceType",
@@ -58207,6 +64795,11 @@
           "documentation":"<p>The Availability Zone.</p>",
           "locationName":"availabilityZone"
         },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "InstanceType":{
           "shape":"InstanceType",
           "documentation":"<p>The instance type.</p>",
@@ -58459,6 +65052,11 @@
           "documentation":"<p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>",
           "locationName":"FilterInArn"
         },
+        "FilterOutArns":{
+          "shape":"ArnList",
+          "documentation":"<p>The Amazon Resource Names (ARN) of the resources that the path will ignore.</p>",
+          "locationName":"FilterOutArn"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>"
@@ -58582,7 +65180,11 @@
         },
         "Hibernate":{
           "shape":"Boolean",
-          "documentation":"<p>Hibernates the instance if the instance was enabled for hibernation at launch. If the instance cannot hibernate successfully, a normal shutdown occurs. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate your instance</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> Default: <code>false</code> </p>"
+          "documentation":"<p>Hibernates the instance if the instance was enabled for hibernation at launch. If the instance cannot hibernate successfully, a normal shutdown occurs. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html\">Hibernate your Amazon EC2 instance</a> in the <i>Amazon EC2 User Guide</i>.</p> <p> Default: <code>false</code> </p>"
+        },
+        "SkipOsShutdown":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to bypass the graceful OS shutdown process when the instance is stopped.</p> <important> <p>Bypassing the graceful OS shutdown might result in data loss or corruption (for example, memory contents not flushed to disk or loss of in-flight IOs) or skipped shutdown scripts.</p> </important> <p>Default: <code>false</code> </p>"
         },
         "DryRun":{
           "shape":"Boolean",
@@ -58591,7 +65193,7 @@
         },
         "Force":{
           "shape":"Boolean",
-          "documentation":"<p>Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances.</p> <p>Default: <code>false</code> </p>",
+          "documentation":"<p>Forces the instance to stop. The instance will first attempt a graceful shutdown, which includes flushing file system caches and metadata. If the graceful shutdown fails to complete within the timeout period, the instance shuts down forcibly without flushing the file system caches and metadata.</p> <p>After using this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html\">Troubleshoot Amazon EC2 instance stop issues</a> in the <i>Amazon EC2 User Guide</i>.</p> <p>Default: <code>false</code> </p>",
           "locationName":"force"
         }
       }
@@ -58771,6 +65373,11 @@
           "documentation":"<p>The state of VPC Block Public Access (BPA).</p>",
           "locationName":"blockPublicAccessStates"
         },
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>Indicates if this is a subnet used with Amazon Elastic VMware Service (EVS). Possible values are <code>Elastic VMware Service</code> or no value. For more information about Amazon EVS, see <a href=\"https://docs.aws.amazon.com/evs/latest/APIReference/Welcome.html\"> <i>Amazon Elastic VMware Service API Reference</i> </a>.</p>",
+          "locationName":"type"
+        },
         "SubnetId":{
           "shape":"String",
           "documentation":"<p>The ID of the subnet.</p>",
@@ -58778,7 +65385,7 @@
         },
         "State":{
           "shape":"SubnetState",
-          "documentation":"<p>The current state of the subnet.</p>",
+          "documentation":"<p>The current state of the subnet.</p> <ul> <li> <p> <code>failed</code>: The underlying infrastructure to support the subnet failed to provision as expected.</p> </li> <li> <p> <code>failed-insufficient-capacity</code>: The underlying infrastructure to support the subnet failed to provision due to a shortage of EC2 instance capacity.</p> </li> </ul>",
           "locationName":"state"
         },
         "VpcId":{
@@ -58947,6 +65554,13 @@
       }
     },
     "SubnetId":{"type":"string"},
+    "SubnetIdList":{
+      "type":"list",
+      "member":{
+        "shape":"SubnetId",
+        "locationName":"AssociatedSubnetId"
+      }
+    },
     "SubnetIdStringList":{
       "type":"list",
       "member":{
@@ -59027,7 +65641,9 @@
       "enum":[
         "pending",
         "available",
-        "unavailable"
+        "unavailable",
+        "failed",
+        "failed-insufficient-capacity"
       ]
     },
     "Subscription":{
@@ -59536,6 +66152,14 @@
           "documentation":"<p>The IDs of the instances.</p> <p>Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.</p>",
           "locationName":"InstanceId"
         },
+        "Force":{
+          "shape":"Boolean",
+          "documentation":"<p>Forces the instances to terminate. The instance will first attempt a graceful shutdown, which includes flushing file system caches and metadata. If the graceful shutdown fails to complete within the timeout period, the instance shuts down forcibly without flushing the file system caches and metadata.</p>"
+        },
+        "SkipOsShutdown":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to bypass the graceful OS shutdown process when the instance is terminated.</p> <p>Default: <code>false</code> </p>"
+        },
         "DryRun":{
           "shape":"Boolean",
           "documentation":"<p>Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>",
@@ -59660,6 +66284,14 @@
         "egress"
       ]
     },
+    "TrafficIpAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6",
+        "dual-stack"
+      ]
+    },
     "TrafficMirrorFilter":{
       "type":"structure",
       "members":{
@@ -60272,7 +66904,8 @@
         "direct-connect-gateway",
         "connect",
         "peering",
-        "tgw-peering"
+        "tgw-peering",
+        "network-function"
       ]
     },
     "TransitGatewayAttachmentState":{
@@ -60836,7 +67469,7 @@
         },
         "DefaultRouteTableAssociation":{
           "shape":"DefaultRouteTableAssociationValue",
-          "documentation":"<p>Indicates whether resource attachments are automatically associated with the default association route table.</p>",
+          "documentation":"<p>Indicates whether resource attachments are automatically associated with the default association route table. Enabled by default. Either <code>defaultRouteTableAssociation</code> or <code>defaultRouteTablePropagation</code> must be set to <code>enable</code> for Amazon Web Services Transit Gateway to create the default transit gateway route table.</p>",
           "locationName":"defaultRouteTableAssociation"
         },
         "AssociationDefaultRouteTableId":{
@@ -60846,7 +67479,7 @@
         },
         "DefaultRouteTablePropagation":{
           "shape":"DefaultRouteTablePropagationValue",
-          "documentation":"<p>Indicates whether resource attachments automatically propagate routes to the default propagation route table.</p>",
+          "documentation":"<p>Indicates whether resource attachments automatically propagate routes to the default propagation route table. Enabled by default. If <code>defaultRouteTablePropagation</code> is set to <code>enable</code>, Amazon Web Services Transit Gateway creates the default transit gateway route table.</p>",
           "locationName":"defaultRouteTablePropagation"
         },
         "PropagationDefaultRouteTableId":{
@@ -61970,7 +68603,7 @@
         },
         "UnassignedIpv6Prefixes":{
           "shape":"IpPrefixList",
-          "documentation":"<p>The IPv4 prefixes that have been unassigned from the network interface.</p>",
+          "documentation":"<p>The IPv6 prefixes that have been unassigned from the network interface.</p>",
           "locationName":"unassignedIpv6PrefixSet"
         }
       }
@@ -62191,6 +68824,40 @@
         "locationName":"item"
       }
     },
+    "UpdateCapacityManagerOrganizationsAccessRequest":{
+      "type":"structure",
+      "required":["OrganizationsAccess"],
+      "members":{
+        "OrganizationsAccess":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p> Specifies whether to enable or disable cross-account access for Amazon Web Services Organizations. When enabled, Capacity Manager aggregates data from all accounts in your organization. </p>"
+        },
+        "DryRun":{
+          "shape":"Boolean",
+          "documentation":"<p> Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>. </p>"
+        },
+        "ClientToken":{
+          "shape":"String",
+          "documentation":"<p> Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. </p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateCapacityManagerOrganizationsAccessResult":{
+      "type":"structure",
+      "members":{
+        "CapacityManagerStatus":{
+          "shape":"CapacityManagerStatus",
+          "documentation":"<p> The current status of Capacity Manager after the update operation. </p>",
+          "locationName":"capacityManagerStatus"
+        },
+        "OrganizationsAccess":{
+          "shape":"Boolean",
+          "documentation":"<p> The updated Organizations access setting indicating whether cross-account data aggregation is enabled. </p>",
+          "locationName":"organizationsAccess"
+        }
+      }
+    },
     "UpdateSecurityGroupRuleDescriptionsEgressRequest":{
       "type":"structure",
       "members":{
@@ -62382,6 +69049,13 @@
         "locationName":"item"
       }
     },
+    "UserIdList":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"item"
+      }
+    },
     "UserIdStringList":{
       "type":"list",
       "member":{
@@ -63569,11 +70243,21 @@
     "Volume":{
       "type":"structure",
       "members":{
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone for the volume.</p>",
+          "locationName":"availabilityZoneId"
+        },
         "OutpostArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Outpost.</p>",
           "locationName":"outpostArn"
         },
+        "SourceVolumeId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the source volume from which the volume copy was created. Only for volume copies.</p>",
+          "locationName":"sourceVolumeId"
+        },
         "Iops":{
           "shape":"Integer",
           "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p>",
@@ -63614,6 +70298,11 @@
           "documentation":"<p>The service provider that manages the volume.</p>",
           "locationName":"operator"
         },
+        "VolumeInitializationRate":{
+          "shape":"Integer",
+          "documentation":"<p>The Amazon EBS Provisioned Rate for Volume Initialization (volume initialization rate) specified for the volume during creation, in MiB/s. If no volume initialization rate was specified, the value is <code>null</code>.</p>",
+          "locationName":"volumeInitializationRate"
+        },
         "VolumeId":{
           "shape":"String",
           "documentation":"<p>The ID of the volume.</p>",
@@ -63672,12 +70361,12 @@
         },
         "AssociatedResource":{
           "shape":"String",
-          "documentation":"<p>The ARN of the Amazon ECS or Fargate task to which the volume is attached.</p>",
+          "documentation":"<p>The ARN of the Amazon Web Services-managed resource to which the volume is attached.</p>",
           "locationName":"associatedResource"
         },
         "InstanceOwningService":{
           "shape":"String",
-          "documentation":"<p>The service principal of Amazon Web Services service that owns the underlying instance to which the volume is attached.</p> <p>This parameter is returned only for volumes that are attached to Fargate tasks.</p>",
+          "documentation":"<p>The service principal of the Amazon Web Services service that owns the underlying resource to which the volume is attached.</p> <p>This parameter is returned only for volumes that are attached to Amazon Web Services-managed resources.</p>",
           "locationName":"instanceOwningService"
         },
         "VolumeId":{
@@ -63687,12 +70376,12 @@
         },
         "InstanceId":{
           "shape":"String",
-          "documentation":"<p>The ID of the instance.</p> <p>If the volume is attached to a Fargate task, this parameter returns <code>null</code>.</p>",
+          "documentation":"<p>The ID of the instance.</p> <p>If the volume is attached to an Amazon Web Services-managed resource, this parameter returns <code>null</code>.</p>",
           "locationName":"instanceId"
         },
         "Device":{
           "shape":"String",
-          "documentation":"<p>The device name.</p> <p>If the volume is attached to a Fargate task, this parameter returns <code>null</code>.</p>",
+          "documentation":"<p>The device name.</p> <p>If the volume is attached to an Amazon Web Services-managed resource, this parameter returns <code>null</code>.</p>",
           "locationName":"device"
         },
         "State":{
@@ -63934,7 +70623,7 @@
       "members":{
         "Name":{
           "shape":"VolumeStatusName",
-          "documentation":"<p>The name of the volume status.</p>",
+          "documentation":"<p>The name of the volume status.</p> <ul> <li> <p> <code>io-enabled</code> - Indicates the volume I/O status. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-checks.html\">Amazon EBS volume status checks</a>.</p> </li> <li> <p> <code>io-performance</code> - Indicates the volume performance status. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-checks.html\">Amazon EBS volume status checks</a>.</p> </li> <li> <p> <code>initialization-state</code> - Indicates the status of the volume initialization process. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\">Initialize Amazon EBS volumes</a>.</p> </li> </ul>",
           "locationName":"name"
         },
         "Status":{
@@ -64016,7 +70705,8 @@
       "enum":[
         "ok",
         "impaired",
-        "insufficient-data"
+        "insufficient-data",
+        "warning"
       ]
     },
     "VolumeStatusItem":{
@@ -64056,6 +70746,16 @@
           "shape":"VolumeStatusAttachmentStatusList",
           "documentation":"<p>Information about the instances to which the volume is attached.</p>",
           "locationName":"attachmentStatuses"
+        },
+        "InitializationStatusDetails":{
+          "shape":"InitializationStatusDetails",
+          "documentation":"<p>Information about the volume initialization. It can take up to 5 minutes for the volume initialization information to be updated.</p> <p>Only available for volumes created from snapshots. Not available for empty volumes created without a snapshot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\"> Initialize Amazon EBS volumes</a>.</p>",
+          "locationName":"initializationStatusDetails"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone.</p>",
+          "locationName":"availabilityZoneId"
         }
       },
       "documentation":"<p>Describes the volume status.</p>"
@@ -64071,7 +70771,8 @@
       "type":"string",
       "enum":[
         "io-enabled",
-        "io-performance"
+        "io-performance",
+        "initialization-state"
       ]
     },
     "VolumeType":{
@@ -64114,6 +70815,10 @@
           "documentation":"<p>Indicates whether the VPC is the default VPC.</p>",
           "locationName":"isDefault"
         },
+        "EncryptionControl":{
+          "shape":"VpcEncryptionControl",
+          "locationName":"encryptionControl"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>Any tags assigned to the VPC.</p>",
@@ -64411,6 +71116,120 @@
         "locationName":"item"
       }
     },
+    "VpcEncryptionControl":{
+      "type":"structure",
+      "members":{
+        "VpcId":{
+          "shape":"VpcId",
+          "locationName":"vpcId"
+        },
+        "VpcEncryptionControlId":{
+          "shape":"VpcEncryptionControlId",
+          "locationName":"vpcEncryptionControlId"
+        },
+        "Mode":{
+          "shape":"VpcEncryptionControlMode",
+          "locationName":"mode"
+        },
+        "State":{
+          "shape":"VpcEncryptionControlState",
+          "locationName":"state"
+        },
+        "StateMessage":{
+          "shape":"String",
+          "locationName":"stateMessage"
+        },
+        "ResourceExclusions":{
+          "shape":"VpcEncryptionControlExclusions",
+          "locationName":"resourceExclusions"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "locationName":"tagSet"
+        }
+      }
+    },
+    "VpcEncryptionControlExclusion":{
+      "type":"structure",
+      "members":{
+        "State":{
+          "shape":"VpcEncryptionControlExclusionState",
+          "locationName":"state"
+        },
+        "StateMessage":{
+          "shape":"String",
+          "locationName":"stateMessage"
+        }
+      }
+    },
+    "VpcEncryptionControlExclusionState":{
+      "type":"string",
+      "enum":[
+        "enabling",
+        "enabled",
+        "disabling",
+        "disabled"
+      ]
+    },
+    "VpcEncryptionControlExclusions":{
+      "type":"structure",
+      "members":{
+        "InternetGateway":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"internetGateway"
+        },
+        "EgressOnlyInternetGateway":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"egressOnlyInternetGateway"
+        },
+        "NatGateway":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"natGateway"
+        },
+        "VirtualPrivateGateway":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"virtualPrivateGateway"
+        },
+        "VpcPeering":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"vpcPeering"
+        },
+        "Lambda":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"lambda"
+        },
+        "VpcLattice":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"vpcLattice"
+        },
+        "ElasticFileSystem":{
+          "shape":"VpcEncryptionControlExclusion",
+          "locationName":"elasticFileSystem"
+        }
+      }
+    },
+    "VpcEncryptionControlId":{"type":"string"},
+    "VpcEncryptionControlMode":{
+      "type":"string",
+      "enum":[
+        "monitor",
+        "enforce"
+      ]
+    },
+    "VpcEncryptionControlState":{
+      "type":"string",
+      "enum":[
+        "enforce-in-progress",
+        "monitor-in-progress",
+        "enforce-failed",
+        "monitor-failed",
+        "deleting",
+        "deleted",
+        "available",
+        "creating",
+        "delete-failed"
+      ]
+    },
     "VpcEndpoint":{
       "type":"structure",
       "members":{
@@ -65009,6 +71828,11 @@
           "documentation":"<p>Information about the VPN tunnel.</p>",
           "locationName":"vgwTelemetry"
         },
+        "PreSharedKeyArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret storing the pre-shared key(s) for the VPN connection.</p>",
+          "locationName":"preSharedKeyArn"
+        },
         "VpnConnectionId":{
           "shape":"String",
           "documentation":"<p>The ID of the VPN connection.</p>",
@@ -65130,7 +71954,7 @@
         },
         "OutsideIpAddressType":{
           "shape":"String",
-          "documentation":"<p>The type of IPv4 address assigned to the outside interface of the customer gateway.</p> <p>Valid values: <code>PrivateIpv4</code> | <code>PublicIpv4</code> </p> <p>Default: <code>PublicIpv4</code> </p>",
+          "documentation":"<p>The type of IPv4 address assigned to the outside interface of the customer gateway.</p> <p>Valid values: <code>PrivateIpv4</code> | <code>PublicIpv4</code> | <code>Ipv6</code> </p> <p>Default: <code>PublicIpv4</code> </p>",
           "locationName":"outsideIpAddressType"
         },
         "TransportTransitGatewayAttachmentId":{
@@ -65147,6 +71971,11 @@
           "shape":"TunnelOptionsList",
           "documentation":"<p>Indicates the VPN tunnel options.</p>",
           "locationName":"tunnelOptionSet"
+        },
+        "TunnelBandwidth":{
+          "shape":"VpnTunnelBandwidth",
+          "documentation":"<p> The configured bandwidth for the VPN tunnel. Represents the current throughput capacity setting for the tunnel connection. <code>standard</code> tunnel bandwidth supports up to 1.25 Gbps per tunnel while <code>large</code> supports up to 5 Gbps per tunnel. If no tunnel bandwidth was specified for the connection, <code>standard</code> is used as the default value. </p>",
+          "locationName":"tunnelBandwidth"
         }
       },
       "documentation":"<p>Describes VPN connection options.</p>"
@@ -65184,12 +72013,16 @@
         },
         "OutsideIpAddressType":{
           "shape":"String",
-          "documentation":"<p>The type of IPv4 address assigned to the outside interface of the customer gateway device.</p> <p>Valid values: <code>PrivateIpv4</code> | <code>PublicIpv4</code> </p> <p>Default: <code>PublicIpv4</code> </p>"
+          "documentation":"<p>The type of IP address assigned to the outside interface of the customer gateway device.</p> <p>Valid values: <code>PrivateIpv4</code> | <code>PublicIpv4</code> | <code>Ipv6</code> </p> <p>Default: <code>PublicIpv4</code> </p>"
         },
         "TransportTransitGatewayAttachmentId":{
           "shape":"TransitGatewayAttachmentId",
           "documentation":"<p>The transit gateway attachment ID to use for the VPN tunnel.</p> <p>Required if <code>OutsideIpAddressType</code> is set to <code>PrivateIpv4</code>.</p>"
         },
+        "TunnelBandwidth":{
+          "shape":"VpnTunnelBandwidth",
+          "documentation":"<p> The desired bandwidth specification for the VPN tunnel, used when creating or modifying VPN connection options to set the tunnel's throughput capacity. <code>standard</code> supports up to 1.25 Gbps per tunnel, while <code>large</code> supports up to 5 Gbps per tunnel. The default value is <code>standard</code>. Existing VPN connections without a bandwidth setting will automatically default to <code>standard</code>. </p>"
+        },
         "StaticRoutesOnly":{
           "shape":"Boolean",
           "documentation":"<p>Indicate whether the VPN connection uses static routes only. If you are creating a VPN connection for a device that does not support BGP, you must specify <code>true</code>. Use <a>CreateVpnConnectionRoute</a> to create a static route.</p> <p>Default: <code>false</code> </p>",
@@ -65306,6 +72139,13 @@
       "type":"string",
       "enum":["Static"]
     },
+    "VpnTunnelBandwidth":{
+      "type":"string",
+      "enum":[
+        "standard",
+        "large"
+      ]
+    },
     "VpnTunnelLogOptions":{
       "type":"structure",
       "members":{
@@ -65424,6 +72264,14 @@
       "type":"list",
       "member":{"shape":"VpnTunnelOptionsSpecification"}
     },
+    "VpnTunnelProvisioningStatus":{
+      "type":"string",
+      "enum":[
+        "available",
+        "pending",
+        "failed"
+      ]
+    },
     "WeekDay":{
       "type":"string",
       "enum":[
diff -pruN 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/waiters-2.json 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/ec2/2016-11-15/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2/2016-11-15/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -177,6 +177,25 @@
         }
       ]
     },
+    "ImageUsageReportAvailable": {
+      "operation": "DescribeImageUsageReports",
+      "maxAttempts": 40,
+      "delay": 15,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "pathAll",
+          "argument": "ImageUsageReports[].State",
+          "expected": "available"
+        },
+        {
+          "state": "failure",
+          "matcher": "pathAny",
+          "argument": "ImageUsageReports[].State",
+          "expected": "failed"
+        }
+      ]
+    },
     "InstanceRunning": {
       "delay": 15,
       "operation": "DescribeInstances",
@@ -458,6 +477,62 @@
         }
       ]
     },
+    "SecurityGroupVpcAssociationAssociated": {
+      "delay": 10,
+      "maxAttempts": 7,
+      "operation": "DescribeSecurityGroupVpcAssociations",
+      "acceptors": [
+        {
+          "expected": "associated",
+          "matcher": "pathAll",
+          "state": "success",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        },
+        {
+          "expected": "associating",
+          "matcher": "pathAny",
+          "state": "retry",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        },
+        {
+          "expected": "association-failed",
+          "matcher": "pathAny",
+          "state": "failure",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        }
+      ]
+    },
+    "SecurityGroupVpcAssociationDisassociated": {
+      "delay": 10,
+      "maxAttempts": 7,
+      "operation": "DescribeSecurityGroupVpcAssociations",
+      "acceptors": [
+        {
+          "expected": "disassociated",
+          "matcher": "pathAll",
+          "state": "success",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        },
+        {
+          "expected": "disassociating",
+          "matcher": "pathAny",
+          "state": "retry",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        },
+        {
+          "expected": "disassociation-failed",
+          "matcher": "pathAny",
+          "state": "failure",
+          "argument": "SecurityGroupVpcAssociations[].State"
+        },
+        {
+          "expected": true,
+          "matcher": "path",
+          "state": "success",
+          "argument": "length(SecurityGroupVpcAssociations[]) == `0`"
+        }
+      ]
+    },
     "SpotInstanceRequestFulfilled": {
       "operation": "DescribeSpotInstanceRequests",
       "maxAttempts": 40,
diff -pruN 2.23.6-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/service-2.json 2.31.35-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ec2-instance-connect/2018-04-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"ec2-instance-connect",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"EC2 Instance Connect",
     "serviceFullName":"AWS EC2 Instance Connect",
     "serviceId":"EC2 Instance Connect",
     "signatureVersion":"v4",
     "targetPrefix":"AWSEC2InstanceConnectService",
-    "uid":"ec2-instance-connect-2018-04-02"
+    "uid":"ec2-instance-connect-2018-04-02",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "SendSSHPublicKey":{
diff -pruN 2.23.6-1/awscli/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecr/2015-09-21/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -167,6 +167,56 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr-fips.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr-fips.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://api.ecr-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
@@ -321,6 +371,81 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-cn",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr.{Region}.api.amazonwebservices.com.cn",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://api.ecr.{Region}.{PartitionResult#dualStackDnsSuffix}",
diff -pruN 2.23.6-1/awscli/botocore/data/ecr/2015-09-21/service-2.json 2.31.35-1/awscli/botocore/data/ecr/2015-09-21/service-2.json
--- 2.23.6-1/awscli/botocore/data/ecr/2015-09-21/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecr/2015-09-21/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -304,7 +304,7 @@
         {"shape":"RepositoryNotFoundException"},
         {"shape":"ImageNotFoundException"}
       ],
-      "documentation":"<p>Returns metadata about the images in a repository.</p> <note> <p>Beginning with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the <code>docker images</code> command shows the uncompressed image size, so it may return a larger image size than the image sizes returned by <a>DescribeImages</a>.</p> </note>"
+      "documentation":"<p>Returns metadata about the images in a repository.</p> <note> <p>Starting with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the <code>docker images</code> command shows the uncompressed image size. Therefore, Docker might return a larger image than the image shown in the Amazon Web Services Management Console.</p> </note> <important> <p>The new version of Amazon ECR <i>Basic Scanning</i> doesn't use the <a>ImageDetail$imageScanFindingsSummary</a> and <a>ImageDetail$imageScanStatus</a> attributes from the API response to return scan results. Use the <a>DescribeImageScanFindings</a> API instead. For more information about Amazon Web Services native basic scanning, see <a href=\"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html\"> Scan images for software vulnerabilities in Amazon ECR</a>.</p> </important>"
     },
     "DescribePullThroughCacheRules":{
       "name":"DescribePullThroughCacheRules",
@@ -703,7 +703,7 @@
         {"shape":"ImageNotFoundException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Starts an image vulnerability scan. An image scan can only be started once per 24 hours on an individual image. This limit includes if an image was scanned on initial push. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html\">Image scanning</a> in the <i>Amazon Elastic Container Registry User Guide</i>.</p>"
+      "documentation":"<p>Starts a basic image vulnerability scan.</p> <p> A basic image scan can only be started once per 24 hours on an individual image. This limit includes if an image was scanned on initial push. You can start up to 100,000 basic scans per 24 hours. This limit includes both scans on initial push and scans initiated by the StartImageScan API. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-basic.html\">Basic scanning</a> in the <i>Amazon Elastic Container Registry User Guide</i>.</p>"
     },
     "StartLifecyclePolicyPreview":{
       "name":"StartLifecyclePolicyPreview",
@@ -918,6 +918,14 @@
           "shape":"Date",
           "documentation":"<p>The date and time the Amazon ECR container image was pushed.</p>"
         },
+        "lastInUseAt":{
+          "shape":"Date",
+          "documentation":"<p>The most recent date and time a cluster was running the image.</p>"
+        },
+        "inUseCount":{
+          "shape":"InUseCount",
+          "documentation":"<p>The number of Amazon ECS or Amazon EKS clusters currently running the image.</p>"
+        },
         "registry":{
           "shape":"RegistryId",
           "documentation":"<p>The registry the Amazon ECR container image belongs to.</p>"
@@ -1131,11 +1139,11 @@
       "members":{
         "ecrRepositoryPrefix":{
           "shape":"PullThroughCacheRuleRepositoryPrefix",
-          "documentation":"<p>The repository name prefix to use when caching images from the source registry.</p>"
+          "documentation":"<p>The repository name prefix to use when caching images from the source registry.</p> <important> <p>There is always an assumed <code>/</code> applied to the end of the prefix. If you specify <code>ecr-public</code> as the prefix, Amazon ECR treats that as <code>ecr-public/</code>.</p> </important>"
         },
         "upstreamRegistryUrl":{
           "shape":"Url",
-          "documentation":"<p>The registry URL of the upstream public registry to use as the source for the pull through cache rule. The following is the syntax to use for each supported upstream registry.</p> <ul> <li> <p>Amazon ECR Public (<code>ecr-public</code>) - <code>public.ecr.aws</code> </p> </li> <li> <p>Docker Hub (<code>docker-hub</code>) - <code>registry-1.docker.io</code> </p> </li> <li> <p>Quay (<code>quay</code>) - <code>quay.io</code> </p> </li> <li> <p>Kubernetes (<code>k8s</code>) - <code>registry.k8s.io</code> </p> </li> <li> <p>GitHub Container Registry (<code>github-container-registry</code>) - <code>ghcr.io</code> </p> </li> <li> <p>Microsoft Azure Container Registry (<code>azure-container-registry</code>) - <code>&lt;custom&gt;.azurecr.io</code> </p> </li> </ul>"
+          "documentation":"<p>The registry URL of the upstream public registry to use as the source for the pull through cache rule. The following is the syntax to use for each supported upstream registry.</p> <ul> <li> <p>Amazon ECR (<code>ecr</code>) – <code>&lt;accountId&gt;.dkr.ecr.&lt;region&gt;.amazonaws.com</code> </p> </li> <li> <p>Amazon ECR Public (<code>ecr-public</code>) – <code>public.ecr.aws</code> </p> </li> <li> <p>Docker Hub (<code>docker-hub</code>) – <code>registry-1.docker.io</code> </p> </li> <li> <p>GitHub Container Registry (<code>github-container-registry</code>) – <code>ghcr.io</code> </p> </li> <li> <p>GitLab Container Registry (<code>gitlab-container-registry</code>) – <code>registry.gitlab.com</code> </p> </li> <li> <p>Kubernetes (<code>k8s</code>) – <code>registry.k8s.io</code> </p> </li> <li> <p>Microsoft Azure Container Registry (<code>azure-container-registry</code>) – <code>&lt;custom&gt;.azurecr.io</code> </p> </li> <li> <p>Quay (<code>quay</code>) – <code>quay.io</code> </p> </li> </ul>"
         },
         "registryId":{
           "shape":"RegistryId",
@@ -1148,6 +1156,14 @@
         "credentialArn":{
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret that identifies the credentials to authenticate to the upstream registry.</p>"
+        },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>Amazon Resource Name (ARN) of the IAM role to be assumed by Amazon ECR to authenticate to the ECR upstream registry. This role must be in the same account as the registry that you are configuring.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The repository name prefix of the upstream registry to match with the upstream repository name. When this field isn't specified, Amazon ECR will use the <code>ROOT</code>.</p>"
         }
       }
     },
@@ -1177,6 +1193,14 @@
         "credentialArn":{
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret associated with the pull through cache rule.</p>"
+        },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>The ARN of the IAM role associated with the pull through cache rule.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The upstream repository prefix associated with the pull through cache rule.</p>"
         }
       }
     },
@@ -1207,6 +1231,10 @@
           "shape":"ImageTagMutability",
           "documentation":"<p>The tag mutability setting for the repository. If this parameter is omitted, the default setting of <code>MUTABLE</code> will be used which will allow image tags to be overwritten. If <code>IMMUTABLE</code> is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
         },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Creates a repository creation template with a list of filters that define which image tags can override the default image tag mutability setting.</p>"
+        },
         "repositoryPolicy":{
           "shape":"RepositoryPolicyText",
           "documentation":"<p>The repository policy to apply to repositories created using the template. A repository policy is a permissions policy associated with a repository to control access permissions. </p>"
@@ -1258,6 +1286,10 @@
           "shape":"ImageTagMutability",
           "documentation":"<p>The tag mutability setting for the repository. If this parameter is omitted, the default setting of <code>MUTABLE</code> will be used which will allow image tags to be overwritten. If <code>IMMUTABLE</code> is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
         },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Creates a repository with a list of filters that define which image tags can override the default image tag mutability setting.</p>"
+        },
         "imageScanningConfiguration":{
           "shape":"ImageScanningConfiguration",
           "documentation":"<p>The image scanning configuration for the repository. This determines whether images are scanned for known vulnerabilities after being pushed to the repository.</p>"
@@ -1430,13 +1462,20 @@
         "credentialArn":{
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret associated with the pull through cache rule.</p>"
+        },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>The ARN of the IAM role associated with the pull through cache rule.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The upstream repository prefix associated with the pull through cache rule.</p>"
         }
       }
     },
     "DeleteRegistryPolicyRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRegistryPolicyResponse":{
       "type":"structure",
@@ -1705,8 +1744,7 @@
     },
     "DescribeRegistryRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeRegistryResponse":{
       "type":"structure",
@@ -1989,7 +2027,7 @@
       "members":{
         "authorizationData":{
           "shape":"AuthorizationDataList",
-          "documentation":"<p>A list of authorization token data objects that correspond to the <code>registryIds</code> values in the request.</p>"
+          "documentation":"<p>A list of authorization token data objects that correspond to the <code>registryIds</code> values in the request.</p> <note> <p>The size of the authorization token returned by Amazon ECR is not fixed. We recommend that you don't make assumptions about the maximum size.</p> </note>"
         }
       }
     },
@@ -2049,7 +2087,7 @@
         },
         "maxResults":{
           "shape":"LifecyclePreviewMaxResults",
-          "documentation":"<p>The maximum number of repository results returned by <code>GetLifecyclePolicyPreviewRequest</code> in&#x2028; paginated output. When this parameter is used, <code>GetLifecyclePolicyPreviewRequest</code> only returns&#x2028; <code>maxResults</code> results in a single page along with a <code>nextToken</code>&#x2028; response element. The remaining results of the initial request can be seen by sending&#x2028; another <code>GetLifecyclePolicyPreviewRequest</code> request with the returned <code>nextToken</code>&#x2028; value. This value can be between 1 and 1000. If this&#x2028; parameter is not used, then <code>GetLifecyclePolicyPreviewRequest</code> returns up to&#x2028; 100 results and a <code>nextToken</code> value, if&#x2028; applicable. This option cannot be used when you specify images with <code>imageIds</code>.</p>"
+          "documentation":"<p>The maximum number of repository results returned by <code>GetLifecyclePolicyPreviewRequest</code> in&#x2028; paginated output. When this parameter is used, <code>GetLifecyclePolicyPreviewRequest</code> only returns&#x2028; <code>maxResults</code> results in a single page along with a <code>nextToken</code>&#x2028; response element. The remaining results of the initial request can be seen by sending&#x2028; another <code>GetLifecyclePolicyPreviewRequest</code> request with the returned <code>nextToken</code>&#x2028; value. This value can be between 1 and 100. If this&#x2028; parameter is not used, then <code>GetLifecyclePolicyPreviewRequest</code> returns up to&#x2028;100 results and a <code>nextToken</code> value, if&#x2028; applicable. This option cannot be used when you specify images with <code>imageIds</code>.</p>"
         },
         "filter":{
           "shape":"LifecyclePolicyPreviewFilter",
@@ -2127,8 +2165,7 @@
     },
     "GetRegistryPolicyRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetRegistryPolicyResponse":{
       "type":"structure",
@@ -2145,8 +2182,7 @@
     },
     "GetRegistryScanningConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetRegistryScanningConfigurationResponse":{
       "type":"structure",
@@ -2258,7 +2294,7 @@
         },
         "imageSizeInBytes":{
           "shape":"ImageSizeInBytes",
-          "documentation":"<p>The size, in bytes, of the image in the repository.</p> <p>If the image is a manifest list, this will be the max size of all manifests in the list.</p> <note> <p>Beginning with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the <code>docker images</code> command shows the uncompressed image size, so it may return a larger image size than the image sizes returned by <a>DescribeImages</a>.</p> </note>"
+          "documentation":"<p>The size, in bytes, of the image in the repository.</p> <p>If the image is a manifest list, this will be the max size of all manifests in the list.</p> <note> <p>Starting with Docker version 1.9, the Docker client compresses image layers before pushing them to a V2 Docker registry. The output of the <code>docker images</code> command shows the uncompressed image size. Therefore, Docker might return a larger image than the image shown in the Amazon Web Services Management Console.</p> </note>"
         },
         "imagePushedAt":{
           "shape":"PushTimestamp",
@@ -2521,13 +2557,53 @@
       "type":"string",
       "enum":[
         "MUTABLE",
-        "IMMUTABLE"
+        "IMMUTABLE",
+        "IMMUTABLE_WITH_EXCLUSION",
+        "MUTABLE_WITH_EXCLUSION"
       ]
     },
+    "ImageTagMutabilityExclusionFilter":{
+      "type":"structure",
+      "required":[
+        "filterType",
+        "filter"
+      ],
+      "members":{
+        "filterType":{
+          "shape":"ImageTagMutabilityExclusionFilterType",
+          "documentation":"<p>Specifies the type of filter to use for excluding image tags from the repository's mutability setting.</p>"
+        },
+        "filter":{
+          "shape":"ImageTagMutabilityExclusionFilterValue",
+          "documentation":"<p>The value to use when filtering image tags. Must be either a regular expression pattern or a tag prefix value based on the specified filter type.</p>"
+        }
+      },
+      "documentation":"<p>Overrides the default image tag mutability setting of the repository for image tags that match the specified filters.</p>"
+    },
+    "ImageTagMutabilityExclusionFilterType":{
+      "type":"string",
+      "enum":["WILDCARD"]
+    },
+    "ImageTagMutabilityExclusionFilterValue":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"^[0-9a-zA-Z._*-]{1,128}$"
+    },
+    "ImageTagMutabilityExclusionFilters":{
+      "type":"list",
+      "member":{"shape":"ImageTagMutabilityExclusionFilter"},
+      "max":5,
+      "min":1
+    },
     "ImageTagsList":{
       "type":"list",
       "member":{"shape":"ImageTag"}
     },
+    "InUseCount":{
+      "type":"long",
+      "min":0
+    },
     "InitiateLayerUploadRequest":{
       "type":"structure",
       "required":["repositoryName"],
@@ -3052,6 +3128,14 @@
           "shape":"CredentialArn",
           "documentation":"<p>The ARN of the Secrets Manager secret associated with the pull through cache rule.</p>"
         },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>The ARN of the IAM role associated with the pull through cache rule.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The upstream repository prefix associated with the pull through cache rule.</p>"
+        },
         "upstreamRegistry":{
           "shape":"UpstreamRegistry",
           "documentation":"<p>The name of the upstream source registry associated with the pull through cache rule.</p>"
@@ -3087,7 +3171,7 @@
       "type":"string",
       "max":30,
       "min":2,
-      "pattern":"(?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*"
+      "pattern":"^((?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*/?|ROOT)$"
     },
     "PullThroughCacheRuleRepositoryPrefixList":{
       "type":"list",
@@ -3224,6 +3308,10 @@
         "imageTagMutability":{
           "shape":"ImageTagMutability",
           "documentation":"<p>The tag mutability setting for the repository. If <code>MUTABLE</code> is specified, image tags can be overwritten. If <code>IMMUTABLE</code> is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
+        },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Creates or updates a repository with filters that define which image tags can override the default image tag mutability setting.</p>"
         }
       }
     },
@@ -3241,6 +3329,10 @@
         "imageTagMutability":{
           "shape":"ImageTagMutability",
           "documentation":"<p>The image tag mutability setting for the repository.</p>"
+        },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Returns a list of filters that were defined for a repository. These filters determine which image tags can override the default image tag mutability setting of the repository.</p>"
         }
       }
     },
@@ -3555,6 +3647,10 @@
           "shape":"ImageTagMutability",
           "documentation":"<p>The tag mutability setting for the repository.</p>"
         },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>The image tag mutability exclusion filters associated with the repository. These filters specify which image tags can override the repository's default image tag mutability setting.</p>"
+        },
         "imageScanningConfiguration":{"shape":"ImageScanningConfiguration"},
         "encryptionConfiguration":{
           "shape":"EncryptionConfiguration",
@@ -3595,11 +3691,15 @@
         },
         "imageTagMutability":{
           "shape":"ImageTagMutability",
-          "documentation":"<p>The tag mutability setting for the repository. If this parameter is omitted, the default setting of MUTABLE will be used which will allow image tags to be overwritten. If IMMUTABLE is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
+          "documentation":"<p>The tag mutability setting for the repository. If this parameter is omitted, the default setting of <code>MUTABLE</code> will be used which will allow image tags to be overwritten. If <code>IMMUTABLE</code> is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
+        },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Defines the image tag mutability exclusion filters to apply when creating repositories from this template. These filters specify which image tags can override the repository's default image tag mutability setting.</p>"
         },
         "repositoryPolicy":{
           "shape":"RepositoryPolicyText",
-          "documentation":"<p>he repository policy to apply to repositories created using the template. A repository policy is a permissions policy associated with a repository to control access permissions. </p>"
+          "documentation":"<p>The repository policy to apply to repositories created using the template. A repository policy is a permissions policy associated with a repository to control access permissions. </p>"
         },
         "lifecyclePolicy":{
           "shape":"LifecyclePolicyTextForRepositoryCreationTemplate",
@@ -3836,7 +3936,8 @@
         "ACTIVE",
         "PENDING",
         "SCAN_ELIGIBILITY_EXPIRED",
-        "FINDINGS_UNAVAILABLE"
+        "FINDINGS_UNAVAILABLE",
+        "LIMIT_EXCEEDED"
       ]
     },
     "ScanStatusDescription":{"type":"string"},
@@ -4096,8 +4197,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagStatus":{
       "type":"string",
@@ -4206,15 +4306,11 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePullThroughCacheRuleRequest":{
       "type":"structure",
-      "required":[
-        "ecrRepositoryPrefix",
-        "credentialArn"
-      ],
+      "required":["ecrRepositoryPrefix"],
       "members":{
         "registryId":{
           "shape":"RegistryId",
@@ -4227,6 +4323,10 @@
         "credentialArn":{
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret that identifies the credentials to authenticate to the upstream registry.</p>"
+        },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>Amazon Resource Name (ARN) of the IAM role to be assumed by Amazon ECR to authenticate to the ECR upstream registry. This role must be in the same account as the registry that you are configuring.</p>"
         }
       }
     },
@@ -4248,6 +4348,14 @@
         "credentialArn":{
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret associated with the pull through cache rule.</p>"
+        },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>The ARN of the IAM role associated with the pull through cache rule.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The upstream repository prefix associated with the pull through cache rule.</p>"
         }
       }
     },
@@ -4272,6 +4380,10 @@
           "shape":"ImageTagMutability",
           "documentation":"<p>Updates the tag mutability setting for the repository. If this parameter is omitted, the default setting of <code>MUTABLE</code> will be used which will allow image tags to be overwritten. If <code>IMMUTABLE</code> is specified, all image tags within the repository will be immutable which will prevent them from being overwritten.</p>"
         },
+        "imageTagMutabilityExclusionFilters":{
+          "shape":"ImageTagMutabilityExclusionFilters",
+          "documentation":"<p>Updates a repository with filters that define which image tags can override the default image tag mutability setting.</p>"
+        },
         "repositoryPolicy":{
           "shape":"RepositoryPolicyText",
           "documentation":"<p>Updates the repository policy created using the template. A repository policy is a permissions policy associated with a repository to control access permissions. </p>"
@@ -4379,6 +4491,7 @@
     "UpstreamRegistry":{
       "type":"string",
       "enum":[
+        "ecr",
         "ecr-public",
         "quay",
         "k8s",
@@ -4422,6 +4535,14 @@
           "shape":"CredentialArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret associated with the pull through cache rule.</p>"
         },
+        "customRoleArn":{
+          "shape":"CustomRoleArn",
+          "documentation":"<p>The ARN of the IAM role associated with the pull through cache rule.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"PullThroughCacheRuleRepositoryPrefix",
+          "documentation":"<p>The upstream repository prefix associated with the pull through cache rule.</p>"
+        },
         "isValid":{
           "shape":"IsPTCRuleValid",
           "documentation":"<p>Whether or not the pull through cache rule was validated. If <code>true</code>, Amazon ECR was able to reach the upstream registry and authentication was successful. If <code>false</code>, there was an issue and validation failed. The <code>failure</code> reason indicates the cause.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecr-public/2020-10-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -271,6 +271,31 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://ecr-public.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://api.ecr-public.{Region}.{PartitionResult#dualStackDnsSuffix}",
diff -pruN 2.23.6-1/awscli/botocore/data/ecr-public/2020-10-30/service-2.json 2.31.35-1/awscli/botocore/data/ecr-public/2020-10-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/ecr-public/2020-10-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecr-public/2020-10-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -811,8 +811,7 @@
     "ForceFlag":{"type":"boolean"},
     "GetAuthorizationTokenRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAuthorizationTokenResponse":{
       "type":"structure",
@@ -825,8 +824,7 @@
     },
     "GetRegistryCatalogDataRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetRegistryCatalogDataResponse":{
       "type":"structure",
@@ -1820,8 +1818,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1863,8 +1860,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UploadId":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecs/2014-11-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ecs/2014-11-13/service-2.json 2.31.35-1/awscli/botocore/data/ecs/2014-11-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/ecs/2014-11-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ecs/2014-11-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,9 +28,11 @@
         {"shape":"ClientException"},
         {"shape":"InvalidParameterException"},
         {"shape":"LimitExceededException"},
-        {"shape":"UpdateInProgressException"}
+        {"shape":"UpdateInProgressException"},
+        {"shape":"UnsupportedFeatureException"},
+        {"shape":"ClusterNotFoundException"}
       ],
-      "documentation":"<p>Creates a new capacity provider. Capacity providers are associated with an Amazon ECS cluster and are used in capacity provider strategies to facilitate cluster auto scaling.</p> <p>Only capacity providers that use an Auto Scaling group can be created. Amazon ECS tasks on Fargate use the <code>FARGATE</code> and <code>FARGATE_SPOT</code> capacity providers. These providers are available to all accounts in the Amazon Web Services Regions that Fargate supports.</p>"
+      "documentation":"<p>Creates a capacity provider. Capacity providers are associated with a cluster and are used in capacity provider strategies to facilitate cluster auto scaling. You can create capacity providers for Amazon ECS Managed Instances and EC2 instances. Fargate has the predefined <code>FARGATE</code> and <code>FARGATE_SPOT</code> capacity providers.</p>"
     },
     "CreateCluster":{
       "name":"CreateCluster",
@@ -67,7 +69,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"NamespaceNotFoundException"}
       ],
-      "documentation":"<p>Runs and maintains your desired number of tasks from a specified task definition. If the number of tasks running in a service drops below the <code>desiredCount</code>, Amazon ECS runs another copy of the task in the specified cluster. To update an existing service, use <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a>.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>In addition to maintaining the desired count of tasks in your service, you can optionally run your service behind one or more load balancers. The load balancers distribute traffic across the tasks that are associated with the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html\">Service load balancing</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. <code>volumeConfigurations</code> is only supported for REPLICA service and not DAEMON service. For more infomation, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Tasks for services that don't use a load balancer are considered healthy if they're in the <code>RUNNING</code> state. Tasks for services that use a load balancer are considered healthy if they're in the <code>RUNNING</code> state and are reported as healthy by the load balancer.</p> <p>There are two service scheduler strategies available:</p> <ul> <li> <p> <code>REPLICA</code> - The replica scheduling strategy places and maintains your desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Service scheduler concepts</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>DAEMON</code> - The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. The service scheduler also evaluates the task placement constraints for running tasks. It also stops tasks that don't meet the placement constraints. When using this strategy, you don't need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Service scheduler concepts</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> </ul> <p>You can optionally specify a deployment configuration for your service. The deployment is initiated by changing properties. For example, the deployment might be initiated by the task definition or by your desired count of a service. You can use <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a>. The default value for a replica service for <code>minimumHealthyPercent</code> is 100%. The default value for a daemon service for <code>minimumHealthyPercent</code> is 0%.</p> <p>If a service uses the <code>ECS</code> deployment controller, the minimum healthy percent represents a lower limit on the number of tasks in a service that must remain in the <code>RUNNING</code> state during a deployment. Specifically, it represents it as a percentage of your desired number of tasks (rounded up to the nearest integer). This happens when any of your container instances are in the <code>DRAINING</code> state if the service contains tasks using the EC2 launch type. Using this parameter, you can deploy without using additional cluster capacity. For example, if you set your service to have desired number of four tasks and a minimum healthy percent of 50%, the scheduler might stop two existing tasks to free up cluster capacity before starting two new tasks. If they're in the <code>RUNNING</code> state, tasks for services that don't use a load balancer are considered healthy . If they're in the <code>RUNNING</code> state and reported as healthy by the load balancer, tasks for services that <i>do</i> use a load balancer are considered healthy . The default value for minimum healthy percent is 100%.</p> <p>If a service uses the <code>ECS</code> deployment controller, the <b>maximum percent</b> parameter represents an upper limit on the number of tasks in a service that are allowed in the <code>RUNNING</code> or <code>PENDING</code> state during a deployment. Specifically, it represents it as a percentage of the desired number of tasks (rounded down to the nearest integer). This happens when any of your container instances are in the <code>DRAINING</code> state if the service contains tasks using the EC2 launch type. Using this parameter, you can define the deployment batch size. For example, if your service has a desired number of four tasks and a maximum percent value of 200%, the scheduler may start four new tasks before stopping the four older tasks (provided that the cluster resources required to do this are available). The default value for maximum percent is 200%.</p> <p>If a service uses either the <code>CODE_DEPLOY</code> or <code>EXTERNAL</code> deployment controller types and tasks that use the EC2 launch type, the <b>minimum healthy percent</b> and <b>maximum percent</b> values are used only to define the lower and upper limit on the number of the tasks in the service that remain in the <code>RUNNING</code> state. This is while the container instances are in the <code>DRAINING</code> state. If the tasks in the service use the Fargate launch type, the minimum healthy percent and maximum percent values aren't used. This is the case even if they're currently visible when describing your service.</p> <p>When creating a service that uses the <code>EXTERNAL</code> deployment controller, you can specify only parameters that aren't controlled at the task set level. The only required parameter is the service name. You control your services using the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html\">Amazon ECS deployment types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>When the service scheduler launches new tasks, it determines task placement. For information about task placement and task placement strategies, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement.html\">Amazon ECS task placement</a> in the <i>Amazon Elastic Container Service Developer Guide</i> </p>"
+      "documentation":"<p>Runs and maintains your desired number of tasks from a specified task definition. If the number of tasks running in a service drops below the <code>desiredCount</code>, Amazon ECS runs another copy of the task in the specified cluster. To update an existing service, use <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a>.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>In addition to maintaining the desired count of tasks in your service, you can optionally run your service behind one or more load balancers. The load balancers distribute traffic across the tasks that are associated with the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html\">Service load balancing</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. <code>volumeConfigurations</code> is only supported for REPLICA service and not DAEMON service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Tasks for services that don't use a load balancer are considered healthy if they're in the <code>RUNNING</code> state. Tasks for services that use a load balancer are considered healthy if they're in the <code>RUNNING</code> state and are reported as healthy by the load balancer.</p> <p>There are two service scheduler strategies available:</p> <ul> <li> <p> <code>REPLICA</code> - The replica scheduling strategy places and maintains your desired number of tasks across your cluster. By default, the service scheduler spreads tasks across Availability Zones. You can use task placement strategies and constraints to customize task placement decisions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Service scheduler concepts</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>DAEMON</code> - The daemon scheduling strategy deploys exactly one task on each active container instance that meets all of the task placement constraints that you specify in your cluster. The service scheduler also evaluates the task placement constraints for running tasks. It also stops tasks that don't meet the placement constraints. When using this strategy, you don't need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Amazon ECS services</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> </ul> <p>The deployment controller is the mechanism that determines how tasks are deployed for your service. The valid options are:</p> <ul> <li> <p>ECS</p> <p> When you create a service which uses the <code>ECS</code> deployment controller, you can choose between the following deployment strategies (which you can set in the “<code>strategy</code>” field in “<code>deploymentConfiguration</code>”): :</p> <ul> <li> <p> <code>ROLLING</code>: When you create a service which uses the <i>rolling update</i> (<code>ROLLING</code>) deployment strategy, the Amazon ECS service scheduler replaces the currently running tasks with new tasks. The number of tasks that Amazon ECS adds or removes from the service during a rolling update is controlled by the service deployment configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html\">Deploy Amazon ECS services by replacing tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Rolling update deployments are best suited for the following scenarios:</p> <ul> <li> <p>Gradual service updates: You need to update your service incrementally without taking the entire service offline at once.</p> </li> <li> <p>Limited resource requirements: You want to avoid the additional resource costs of running two complete environments simultaneously (as required by blue/green deployments).</p> </li> <li> <p>Acceptable deployment time: Your application can tolerate a longer deployment process, as rolling updates replace tasks one by one.</p> </li> <li> <p>No need for instant roll back: Your service can tolerate a rollback process that takes minutes rather than seconds.</p> </li> <li> <p>Simple deployment process: You prefer a straightforward deployment approach without the complexity of managing multiple environments, target groups, and listeners.</p> </li> <li> <p>No load balancer requirement: Your service doesn't use or require a load balancer, Application Load Balancer, Network Load Balancer, or Service Connect (which are required for blue/green deployments).</p> </li> <li> <p>Stateful applications: Your application maintains state that makes it difficult to run two parallel environments.</p> </li> <li> <p>Cost sensitivity: You want to minimize deployment costs by not running duplicate environments during deployment.</p> </li> </ul> <p>Rolling updates are the default deployment strategy for services and provide a balance between deployment safety and resource efficiency for many common application scenarios.</p> </li> <li> <p> <code>BLUE_GREEN</code>: A <i>blue/green</i> deployment strategy (<code>BLUE_GREEN</code>) is a release methodology that reduces downtime and risk by running two identical production environments called blue and green. With Amazon ECS blue/green deployments, you can validate new service revisions before directing production traffic to them. This approach provides a safer way to deploy changes with the ability to quickly roll back if needed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-blue-green.html\">Amazon ECS blue/green deployments</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Amazon ECS blue/green deployments are best suited for the following scenarios:</p> <ul> <li> <p>Service validation: When you need to validate new service revisions before directing production traffic to them</p> </li> <li> <p>Zero downtime: When your service requires zero-downtime deployments</p> </li> <li> <p>Instant roll back: When you need the ability to quickly roll back if issues are detected</p> </li> <li> <p>Load balancer requirement: When your service uses Application Load Balancer, Network Load Balancer, or Service Connect</p> </li> </ul> </li> <li> <p> <code>LINEAR</code>: A <i>linear</i> deployment strategy (<code>LINEAR</code>) gradually shifts traffic from the current production environment to a new environment in equal percentage increments. With Amazon ECS linear deployments, you can control the pace of traffic shifting and validate new service revisions with increasing amounts of production traffic.</p> <p>Linear deployments are best suited for the following scenarios:</p> <ul> <li> <p>Gradual validation: When you want to gradually validate your new service version with increasing traffic</p> </li> <li> <p>Performance monitoring: When you need time to monitor metrics and performance during the deployment</p> </li> <li> <p>Risk minimization: When you want to minimize risk by exposing the new version to production traffic incrementally</p> </li> <li> <p>Load balancer requirement: When your service uses Application Load Balancer or Service Connect</p> </li> </ul> </li> <li> <p> <code>CANARY</code>: A <i>canary</i> deployment strategy (<code>CANARY</code>) shifts a small percentage of traffic to the new service revision first, then shifts the remaining traffic all at once after a specified time period. This allows you to test the new version with a subset of users before full deployment.</p> <p>Canary deployments are best suited for the following scenarios:</p> <ul> <li> <p>Feature testing: When you want to test new features with a small subset of users before full rollout</p> </li> <li> <p>Production validation: When you need to validate performance and functionality with real production traffic</p> </li> <li> <p>Blast radius control: When you want to minimize blast radius if issues are discovered in the new version</p> </li> <li> <p>Load balancer requirement: When your service uses Application Load Balancer or Service Connect</p> </li> </ul> </li> </ul> </li> <li> <p>External</p> <p>Use a third-party deployment controller.</p> </li> <li> <p>Blue/green deployment (powered by CodeDeploy)</p> <p>CodeDeploy installs an updated version of the application as a new replacement task set and reroutes production traffic from the original application task set to the replacement task set. The original task set is terminated after a successful deployment. Use this deployment controller to verify a new deployment of a service before sending production traffic to it.</p> </li> </ul> <p>When creating a service that uses the <code>EXTERNAL</code> deployment controller, you can specify only parameters that aren't controlled at the task set level. The only required parameter is the service name. You control your services using the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html\">Amazon ECS deployment types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>When the service scheduler launches new tasks, it determines task placement. For information about task placement and task placement strategies, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement.html\">Amazon ECS task placement</a> in the <i>Amazon Elastic Container Service Developer Guide</i> </p>"
     },
     "CreateTaskSet":{
       "name":"CreateTaskSet",
@@ -133,7 +135,9 @@
       "errors":[
         {"shape":"ServerException"},
         {"shape":"ClientException"},
-        {"shape":"InvalidParameterException"}
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedFeatureException"},
+        {"shape":"ClusterNotFoundException"}
       ],
       "documentation":"<p>Deletes the specified capacity provider.</p> <note> <p>The <code>FARGATE</code> and <code>FARGATE_SPOT</code> capacity providers are reserved and can't be deleted. You can disassociate them from a cluster using either <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> or by deleting the cluster.</p> </note> <p>Prior to a capacity provider being deleted, the capacity provider must be removed from the capacity provider strategy from all services. The <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a> API can be used to remove a capacity provider from a service's capacity provider strategy. When updating a service, the <code>forceNewDeployment</code> option can be used to ensure that any tasks using the Amazon EC2 instance capacity provided by the capacity provider are transitioned to use the capacity from the remaining capacity providers. Only capacity providers that aren't associated with a cluster can be deleted. To remove a capacity provider from a cluster, you can either use <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> or delete the cluster.</p>"
     },
@@ -150,6 +154,7 @@
         {"shape":"ClientException"},
         {"shape":"InvalidParameterException"},
         {"shape":"ClusterNotFoundException"},
+        {"shape":"ClusterContainsCapacityProviderException"},
         {"shape":"ClusterContainsContainerInstancesException"},
         {"shape":"ClusterContainsServicesException"},
         {"shape":"ClusterContainsTasksException"},
@@ -253,7 +258,9 @@
       "errors":[
         {"shape":"ServerException"},
         {"shape":"ClientException"},
-        {"shape":"InvalidParameterException"}
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedFeatureException"},
+        {"shape":"ClusterNotFoundException"}
       ],
       "documentation":"<p>Describes one or more of your capacity providers.</p>"
     },
@@ -305,7 +312,7 @@
         {"shape":"ServiceNotFoundException"},
         {"shape":"UnsupportedFeatureException"}
       ],
-      "documentation":"<p>Describes one or more of your service deployments.</p> <p>A service deployment happens when you release a software update for the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-deployments.html\">Amazon ECS service deployments</a>.</p>"
+      "documentation":"<p>Describes one or more of your service deployments.</p> <p>A service deployment happens when you release a software update for the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-deployment.html\">View service history using Amazon ECS service deployments</a>.</p>"
     },
     "DescribeServiceRevisions":{
       "name":"DescribeServiceRevisions",
@@ -679,7 +686,7 @@
         {"shape":"ResourceInUseException"},
         {"shape":"UpdateInProgressException"}
       ],
-      "documentation":"<p>Modifies the available capacity providers and the default capacity provider strategy for a cluster.</p> <p>You must specify both the available capacity providers and a default capacity provider strategy for the cluster. If the specified cluster has existing capacity providers associated with it, you must specify all existing capacity providers in addition to any new ones you want to add. Any existing capacity providers that are associated with a cluster that are omitted from a <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> API call will be disassociated with the cluster. You can only disassociate an existing capacity provider from a cluster if it's not being used by any existing tasks.</p> <p>When creating a service or running a task on a cluster, if no capacity provider or launch type is specified, then the cluster's default capacity provider strategy is used. We recommend that you define a default capacity provider strategy for your cluster. However, you must specify an empty array (<code>[]</code>) to bypass defining a default strategy.</p>"
+      "documentation":"<p>Modifies the available capacity providers and the default capacity provider strategy for a cluster.</p> <p>You must specify both the available capacity providers and a default capacity provider strategy for the cluster. If the specified cluster has existing capacity providers associated with it, you must specify all existing capacity providers in addition to any new ones you want to add. Any existing capacity providers that are associated with a cluster that are omitted from a <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> API call will be disassociated with the cluster. You can only disassociate an existing capacity provider from a cluster if it's not being used by any existing tasks.</p> <p>When creating a service or running a task on a cluster, if no capacity provider or launch type is specified, then the cluster's default capacity provider strategy is used. We recommend that you define a default capacity provider strategy for your cluster. However, you must specify an empty array (<code>[]</code>) to bypass defining a default strategy.</p> <p>Amazon ECS Managed Instances doesn't support this, because when you create a capacity provider with Amazon ECS Managed Instances, it becomes available only within the specified cluster.</p>"
     },
     "RegisterContainerInstance":{
       "name":"RegisterContainerInstance",
@@ -731,7 +738,7 @@
         {"shape":"BlockedException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Starts a new task using the specified task definition.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>You can allow Amazon ECS to place tasks for you, or you can customize how Amazon ECS places tasks using placement constraints and placement strategies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html\">Scheduling Tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Alternatively, you can use <code>StartTask</code> to use your own scheduler or place tasks manually on specific container instances.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. For more infomation, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The Amazon ECS API follows an eventual consistency model. This is because of the distributed nature of the system supporting the API. This means that the result of an API command you run that affects your Amazon ECS resources might not be immediately visible to all subsequent commands you run. Keep this in mind when you carry out an API command that immediately follows a previous API command.</p> <p>To manage eventual consistency, you can do the following:</p> <ul> <li> <p>Confirm the state of the resource before you run a command to modify it. Run the DescribeTasks command using an exponential backoff algorithm to ensure that you allow enough time for the previous command to propagate through the system. To do this, run the DescribeTasks command repeatedly, starting with a couple of seconds of wait time and increasing gradually up to five minutes of wait time.</p> </li> <li> <p>Add wait time between subsequent commands, even if the DescribeTasks command returns an accurate response. Apply an exponential backoff algorithm starting with a couple of seconds of wait time, and increase gradually up to about five minutes of wait time.</p> </li> </ul>"
+      "documentation":"<p>Starts a new task using the specified task definition.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>You can allow Amazon ECS to place tasks for you, or you can customize how Amazon ECS places tasks using placement constraints and placement strategies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html\">Scheduling Tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Alternatively, you can use <code>StartTask</code> to use your own scheduler or place tasks manually on specific container instances.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The Amazon ECS API follows an eventual consistency model. This is because of the distributed nature of the system supporting the API. This means that the result of an API command you run that affects your Amazon ECS resources might not be immediately visible to all subsequent commands you run. Keep this in mind when you carry out an API command that immediately follows a previous API command.</p> <p>To manage eventual consistency, you can do the following:</p> <ul> <li> <p>Confirm the state of the resource before you run a command to modify it. Run the DescribeTasks command using an exponential backoff algorithm to ensure that you allow enough time for the previous command to propagate through the system. To do this, run the DescribeTasks command repeatedly, starting with a couple of seconds of wait time and increasing gradually up to five minutes of wait time.</p> </li> <li> <p>Add wait time between subsequent commands, even if the DescribeTasks command returns an accurate response. Apply an exponential backoff algorithm starting with a couple of seconds of wait time, and increase gradually up to about five minutes of wait time.</p> </li> </ul> <p>If you get a <code>ConflictException</code> error, the <code>RunTask</code> request could not be processed due to conflicts. The provided <code>clientToken</code> is already in use with a different <code>RunTask</code> request. The <code>resourceIds</code> are the existing task ARNs which are already associated with the <code>clientToken</code>. </p> <p>To fix this issue:</p> <ul> <li> <p>Run <code>RunTask</code> with a unique <code>clientToken</code>.</p> </li> <li> <p>Run <code>RunTask</code> with the <code>clientToken</code> and the original set of parameters</p> </li> </ul> <p>If you get a <code>ClientException</code>error, the <code>RunTask</code> could not be processed because you use managed scaling and there is a capacity error because the quota of tasks in the <code>PROVISIONING</code> per cluster has been reached. For information about the service quotas, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-quotas.html\">Amazon ECS service quotas</a>.</p>"
     },
     "StartTask":{
       "name":"StartTask",
@@ -748,7 +755,26 @@
         {"shape":"ClusterNotFoundException"},
         {"shape":"UnsupportedFeatureException"}
       ],
-      "documentation":"<p>Starts a new task from the specified task definition on the specified container instance or instances.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>Alternatively, you can use<code>RunTask</code> to place tasks for you. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html\">Scheduling Tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. For more infomation, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+      "documentation":"<p>Starts a new task from the specified task definition on the specified container instance or instances.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <note> <p>Amazon Elastic Inference (EI) is no longer available to customers.</p> </note> <p>Alternatively, you can use<code>RunTask</code> to place tasks for you. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html\">Scheduling Tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when creating or updating a service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
+    "StopServiceDeployment":{
+      "name":"StopServiceDeployment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StopServiceDeploymentRequest"},
+      "output":{"shape":"StopServiceDeploymentResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ClientException"},
+        {"shape":"ConflictException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ServerException"},
+        {"shape":"ServiceDeploymentNotFoundException"},
+        {"shape":"UnsupportedFeatureException"}
+      ],
+      "documentation":"<p>Stops an ongoing service deployment.</p> <p>The following stop types are avaiable:</p> <ul> <li> <p>ROLLBACK - This option rolls back the service deployment to the previous service revision. </p> <p>You can use this option even if you didn't configure the service deployment for the rollback option. </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/stop-service-deployment.html\">Stopping Amazon ECS service deployments</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
     },
     "StopTask":{
       "name":"StopTask",
@@ -858,9 +884,11 @@
       "errors":[
         {"shape":"ServerException"},
         {"shape":"ClientException"},
-        {"shape":"InvalidParameterException"}
+        {"shape":"InvalidParameterException"},
+        {"shape":"UnsupportedFeatureException"},
+        {"shape":"ClusterNotFoundException"}
       ],
-      "documentation":"<p>Modifies the parameters for a capacity provider.</p>"
+      "documentation":"<p>Modifies the parameters for a capacity provider.</p> <p>These changes only apply to new Amazon ECS Managed Instances, or EC2 instances, not existing ones.</p>"
     },
     "UpdateCluster":{
       "name":"UpdateCluster",
@@ -951,7 +979,7 @@
         {"shape":"NamespaceNotFoundException"},
         {"shape":"UnsupportedFeatureException"}
       ],
-      "documentation":"<p>Modifies the parameters of a service.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <p>For services using the rolling update (<code>ECS</code>) you can update the desired count, deployment configuration, network configuration, load balancers, service registries, enable ECS managed tags option, propagate tags option, task placement constraints and strategies, and task definition. When you update any of these parameters, Amazon ECS starts new tasks with the new configuration. </p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when starting or running a task, or when creating or updating a service. For more infomation, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. You can update your volume configurations and trigger a new deployment. <code>volumeConfigurations</code> is only supported for REPLICA service and not DAEMON service. If you leave <code>volumeConfigurations</code> <code>null</code>, it doesn't trigger a new deployment. For more infomation on volumes, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>For services using the blue/green (<code>CODE_DEPLOY</code>) deployment controller, only the desired count, deployment configuration, health check grace period, task placement constraints and strategies, enable ECS managed tags option, and propagate tags can be updated using this API. If the network configuration, platform version, task definition, or load balancer need to be updated, create a new CodeDeploy deployment. For more information, see <a href=\"https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html\">CreateDeployment</a> in the <i>CodeDeploy API Reference</i>.</p> <p>For services using an external deployment controller, you can update only the desired count, task placement constraints and strategies, health check grace period, enable ECS managed tags option, and propagate tags option, using this API. If the launch type, load balancer, network configuration, platform version, or task definition need to be updated, create a new task set For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>.</p> <p>You can add to or subtract from the number of instantiations of a task definition in a service by specifying the cluster that the service is running in and a new <code>desiredCount</code> parameter.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when starting or running a task, or when creating or updating a service. For more infomation, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If you have updated the container image of your application, you can create a new task definition with that image and deploy it to your service. The service scheduler uses the minimum healthy percent and maximum percent parameters (in the service's deployment configuration) to determine the deployment strategy.</p> <note> <p>If your updated Docker image uses the same tag as what is in the existing task definition for your service (for example, <code>my_image:latest</code>), you don't need to create a new revision of your task definition. You can update the service using the <code>forceNewDeployment</code> option. The new tasks launched by the deployment pull the current image/tag combination from your repository when they start.</p> </note> <p>You can also update the deployment configuration of a service. When a deployment is triggered by updating the task definition of a service, the service scheduler uses the deployment configuration parameters, <code>minimumHealthyPercent</code> and <code>maximumPercent</code>, to determine the deployment strategy.</p> <ul> <li> <p>If <code>minimumHealthyPercent</code> is below 100%, the scheduler can ignore <code>desiredCount</code> temporarily during a deployment. For example, if <code>desiredCount</code> is four tasks, a minimum of 50% allows the scheduler to stop two existing tasks before starting two new tasks. Tasks for services that don't use a load balancer are considered healthy if they're in the <code>RUNNING</code> state. Tasks for services that use a load balancer are considered healthy if they're in the <code>RUNNING</code> state and are reported as healthy by the load balancer.</p> </li> <li> <p>The <code>maximumPercent</code> parameter represents an upper limit on the number of running tasks during a deployment. You can use it to define the deployment batch size. For example, if <code>desiredCount</code> is four tasks, a maximum of 200% starts four new tasks before stopping the four older tasks (provided that the cluster resources required to do this are available).</p> </li> </ul> <p>When <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a> stops a task during a deployment, the equivalent of <code>docker stop</code> is issued to the containers running in the task. This results in a <code>SIGTERM</code> and a 30-second timeout. After this, <code>SIGKILL</code> is sent and the containers are forcibly stopped. If the container handles the <code>SIGTERM</code> gracefully and exits within 30 seconds from receiving it, no <code>SIGKILL</code> is sent.</p> <p>When the service scheduler launches new tasks, it determines task placement in your cluster with the following logic.</p> <ul> <li> <p>Determine which of the container instances in your cluster can support your service's task definition. For example, they have the required CPU, memory, ports, and container instance attributes.</p> </li> <li> <p>By default, the service scheduler attempts to balance tasks across Availability Zones in this manner even though you can choose a different placement strategy.</p> <ul> <li> <p>Sort the valid container instances by the fewest number of running tasks for this service in the same Availability Zone as the instance. For example, if zone A has one running service task and zones B and C each have zero, valid container instances in either zone B or C are considered optimal for placement.</p> </li> <li> <p>Place the new service task on a valid container instance in an optimal Availability Zone (based on the previous steps), favoring container instances with the fewest number of running tasks for this service.</p> </li> </ul> </li> </ul> <p>When the service scheduler stops running tasks, it attempts to maintain balance across the Availability Zones in your cluster using the following logic: </p> <ul> <li> <p>Sort the container instances by the largest number of running tasks for this service in the same Availability Zone as the instance. For example, if zone A has one running service task and zones B and C each have two, container instances in either zone B or C are considered optimal for termination.</p> </li> <li> <p>Stop the task on a container instance in an optimal Availability Zone (based on the previous steps), favoring container instances with the largest number of running tasks for this service.</p> </li> </ul> <note> <p>You must have a service-linked role when you update any of the following service properties:</p> <ul> <li> <p> <code>loadBalancers</code>,</p> </li> <li> <p> <code>serviceRegistries</code> </p> </li> </ul> <p>For more information about the role see the <code>CreateService</code> request parameter <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html#ECS-CreateService-request-role\"> <code>role</code> </a>. </p> </note>"
+      "documentation":"<p>Modifies the parameters of a service.</p> <note> <p>On March 21, 2024, a change was made to resolve the task definition revision before authorization. When a task definition revision is not specified, authorization will occur using the latest revision of a task definition.</p> </note> <p>For services using the rolling update (<code>ECS</code>) you can update the desired count, deployment configuration, network configuration, load balancers, service registries, enable ECS managed tags option, propagate tags option, task placement constraints and strategies, and task definition. When you update any of these parameters, Amazon ECS starts new tasks with the new configuration. </p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when starting or running a task, or when creating or updating a service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. You can update your volume configurations and trigger a new deployment. <code>volumeConfigurations</code> is only supported for REPLICA service and not DAEMON service. If you leave <code>volumeConfigurations</code> <code>null</code>, it doesn't trigger a new deployment. For more information on volumes, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>For services using the blue/green (<code>CODE_DEPLOY</code>) deployment controller, only the desired count, deployment configuration, health check grace period, task placement constraints and strategies, enable ECS managed tags option, and propagate tags can be updated using this API. If the network configuration, platform version, task definition, or load balancer need to be updated, create a new CodeDeploy deployment. For more information, see <a href=\"https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html\">CreateDeployment</a> in the <i>CodeDeploy API Reference</i>.</p> <p>For services using an external deployment controller, you can update only the desired count, task placement constraints and strategies, health check grace period, enable ECS managed tags option, and propagate tags option, using this API. If the launch type, load balancer, network configuration, platform version, or task definition need to be updated, create a new task set For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>.</p> <p>You can add to or subtract from the number of instantiations of a task definition in a service by specifying the cluster that the service is running in and a new <code>desiredCount</code> parameter.</p> <p>You can attach Amazon EBS volumes to Amazon ECS tasks by configuring the volume when starting or running a task, or when creating or updating a service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volume-types\">Amazon EBS volumes</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If you have updated the container image of your application, you can create a new task definition with that image and deploy it to your service. The service scheduler uses the minimum healthy percent and maximum percent parameters (in the service's deployment configuration) to determine the deployment strategy.</p> <note> <p>If your updated Docker image uses the same tag as what is in the existing task definition for your service (for example, <code>my_image:latest</code>), you don't need to create a new revision of your task definition. You can update the service using the <code>forceNewDeployment</code> option. The new tasks launched by the deployment pull the current image/tag combination from your repository when they start.</p> </note> <p>You can also update the deployment configuration of a service. When a deployment is triggered by updating the task definition of a service, the service scheduler uses the deployment configuration parameters, <code>minimumHealthyPercent</code> and <code>maximumPercent</code>, to determine the deployment strategy.</p> <ul> <li> <p>If <code>minimumHealthyPercent</code> is below 100%, the scheduler can ignore <code>desiredCount</code> temporarily during a deployment. For example, if <code>desiredCount</code> is four tasks, a minimum of 50% allows the scheduler to stop two existing tasks before starting two new tasks. Tasks for services that don't use a load balancer are considered healthy if they're in the <code>RUNNING</code> state. Tasks for services that use a load balancer are considered healthy if they're in the <code>RUNNING</code> state and are reported as healthy by the load balancer.</p> </li> <li> <p>The <code>maximumPercent</code> parameter represents an upper limit on the number of running tasks during a deployment. You can use it to define the deployment batch size. For example, if <code>desiredCount</code> is four tasks, a maximum of 200% starts four new tasks before stopping the four older tasks (provided that the cluster resources required to do this are available).</p> </li> </ul> <p>When <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a> stops a task during a deployment, the equivalent of <code>docker stop</code> is issued to the containers running in the task. This results in a <code>SIGTERM</code> and a 30-second timeout. After this, <code>SIGKILL</code> is sent and the containers are forcibly stopped. If the container handles the <code>SIGTERM</code> gracefully and exits within 30 seconds from receiving it, no <code>SIGKILL</code> is sent.</p> <p>When the service scheduler launches new tasks, it determines task placement in your cluster with the following logic.</p> <ul> <li> <p>Determine which of the container instances in your cluster can support your service's task definition. For example, they have the required CPU, memory, ports, and container instance attributes.</p> </li> <li> <p>By default, the service scheduler attempts to balance tasks across Availability Zones in this manner even though you can choose a different placement strategy.</p> <ul> <li> <p>Sort the valid container instances by the fewest number of running tasks for this service in the same Availability Zone as the instance. For example, if zone A has one running service task and zones B and C each have zero, valid container instances in either zone B or C are considered optimal for placement.</p> </li> <li> <p>Place the new service task on a valid container instance in an optimal Availability Zone (based on the previous steps), favoring container instances with the fewest number of running tasks for this service.</p> </li> </ul> </li> </ul> <p>When the service scheduler stops running tasks, it attempts to maintain balance across the Availability Zones in your cluster using the following logic: </p> <ul> <li> <p>Sort the container instances by the largest number of running tasks for this service in the same Availability Zone as the instance. For example, if zone A has one running service task and zones B and C each have two, container instances in either zone B or C are considered optimal for termination.</p> </li> <li> <p>Stop the task on a container instance in an optimal Availability Zone (based on the previous steps), favoring container instances with the largest number of running tasks for this service.</p> </li> </ul>"
     },
     "UpdateServicePrimaryTaskSet":{
       "name":"UpdateServicePrimaryTaskSet",
@@ -1016,13 +1044,109 @@
     }
   },
   "shapes":{
-    "AccessDeniedException":{
+    "AcceleratorCountRequest":{
+      "type":"structure",
+      "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum number of accelerators. Instance types with fewer accelerators are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum number of accelerators. Instance types with more accelerators are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum number of accelerators (such as GPUs) for instance type selection. This is used for workloads that require specific numbers of accelerators.</p>"
+    },
+    "AcceleratorManufacturer":{
+      "type":"string",
+      "enum":[
+        "amazon-web-services",
+        "amd",
+        "nvidia",
+        "xilinx",
+        "habana"
+      ]
+    },
+    "AcceleratorManufacturerSet":{
+      "type":"list",
+      "member":{"shape":"AcceleratorManufacturer"}
+    },
+    "AcceleratorName":{
+      "type":"string",
+      "enum":[
+        "a100",
+        "inferentia",
+        "k520",
+        "k80",
+        "m60",
+        "radeon-pro-v520",
+        "t4",
+        "vu9p",
+        "v100",
+        "a10g",
+        "h100",
+        "t4g"
+      ]
+    },
+    "AcceleratorNameSet":{
+      "type":"list",
+      "member":{"shape":"AcceleratorName"}
+    },
+    "AcceleratorTotalMemoryMiBRequest":{
       "type":"structure",
       "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum total accelerator memory in MiB. Instance types with less accelerator memory are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum total accelerator memory in MiB. Instance types with more accelerator memory are excluded from selection.</p>"
+        }
       },
+      "documentation":"<p>The minimum and maximum total accelerator memory in mebibytes (MiB) for instance type selection. This is important for GPU workloads that require specific amounts of video memory.</p>"
+    },
+    "AcceleratorType":{
+      "type":"string",
+      "enum":[
+        "gpu",
+        "fpga",
+        "inference"
+      ]
+    },
+    "AcceleratorTypeSet":{
+      "type":"list",
+      "member":{"shape":"AcceleratorType"}
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>You don't have authorization to perform the requested action.</p>",
       "exception":true
     },
+    "AdvancedConfiguration":{
+      "type":"structure",
+      "members":{
+        "alternateTargetGroupArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the alternate target group for Amazon ECS blue/green deployments.</p>"
+        },
+        "productionListenerRule":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) that that identifies the production listener rule (in the case of an Application Load Balancer) or listener (in the case for an Network Load Balancer) for routing production traffic.</p>"
+        },
+        "testListenerRule":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies ) that identifies the test listener rule (in the case of an Application Load Balancer) or listener (in the case for an Network Load Balancer) for routing test traffic.</p>"
+        },
+        "roleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants Amazon ECS permission to call the Elastic Load Balancing APIs for you.</p>"
+        }
+      },
+      "documentation":"<p>The advanced settings for a load balancer used in blue/green deployments. Specify the alternate target group, listener rules, and IAM role required for traffic shifting during blue/green deployments. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/blue-green-deployment-implementation.html\">Required resources for Amazon ECS blue/green deployments</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
     "AgentUpdateStatus":{
       "type":"string",
       "enum":[
@@ -1034,6 +1158,17 @@
         "FAILED"
       ]
     },
+    "AllowedInstanceType":{
+      "type":"string",
+      "max":30,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\.\\*\\-]+"
+    },
+    "AllowedInstanceTypeSet":{
+      "type":"list",
+      "member":{"shape":"AllowedInstanceType"},
+      "max":400
+    },
     "ApplicationProtocol":{
       "type":"string",
       "enum":[
@@ -1126,8 +1261,7 @@
     },
     "AttributeLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can apply up to 10 custom attributes for each resource. You can view the attributes of a resource with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListAttributes.html\">ListAttributes</a>. You can remove existing attributes on a resource with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteAttributes.html\">DeleteAttributes</a>.</p>",
       "exception":true
     },
@@ -1197,15 +1331,36 @@
         },
         "assignPublicIp":{
           "shape":"AssignPublicIp",
-          "documentation":"<p>Whether the task's elastic network interface receives a public IP address. The default value is <code>ENABLED</code>.</p>"
+          "documentation":"<p>Whether the task's elastic network interface receives a public IP address. </p> <p>Consider the following when you set this value:</p> <ul> <li> <p>When you use <code>create-service</code> or <code>update-service</code>, the default is <code>DISABLED</code>. </p> </li> <li> <p>When the service <code>deploymentController</code> is <code>ECS</code>, the value must be <code>DISABLED</code>. </p> </li> </ul>"
         }
       },
       "documentation":"<p>An object representing the networking details for a task or service. For example <code>awsVpcConfiguration={subnets=[\"subnet-12344321\"],securityGroups=[\"sg-12344321\"]}</code>.</p>"
     },
-    "BlockedException":{
+    "BareMetal":{
+      "type":"string",
+      "enum":[
+        "included",
+        "required",
+        "excluded"
+      ]
+    },
+    "BaselineEbsBandwidthMbpsRequest":{
       "type":"structure",
       "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum baseline Amazon EBS bandwidth in Mbps. Instance types with lower Amazon EBS bandwidth are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum baseline Amazon EBS bandwidth in Mbps. Instance types with higher Amazon EBS bandwidth are excluded from selection.</p>"
+        }
       },
+      "documentation":"<p>The minimum and maximum baseline Amazon EBS bandwidth in megabits per second (Mbps) for instance type selection. This is important for workloads with high storage I/O requirements.</p>"
+    },
+    "BlockedException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>Your Amazon Web Services account was blocked. For more information, contact <a href=\"http://aws.amazon.com/contact-us/\"> Amazon Web Services Support</a>.</p>",
       "exception":true
     },
@@ -1214,10 +1369,22 @@
       "type":"boolean",
       "box":true
     },
+    "BoxedDouble":{
+      "type":"double",
+      "box":true
+    },
     "BoxedInteger":{
       "type":"integer",
       "box":true
     },
+    "BurstablePerformance":{
+      "type":"string",
+      "enum":[
+        "included",
+        "required",
+        "excluded"
+      ]
+    },
     "CPUArchitecture":{
       "type":"string",
       "enum":[
@@ -1225,6 +1392,22 @@
         "ARM64"
       ]
     },
+    "CanaryConfiguration":{
+      "type":"structure",
+      "members":{
+        "canaryPercent":{
+          "shape":"Double",
+          "documentation":"<p>The percentage of production traffic to shift to the new service revision during the canary phase. Valid values are multiples of 0.1 from 0.1 to 100.0. The default value is 5.0.</p>",
+          "box":true
+        },
+        "canaryBakeTimeInMinutes":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of time in minutes to wait during the canary phase before shifting the remaining production traffic to the new service revision. Valid values are 0 to 1440 minutes (24 hours). The default value is 10.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Configuration for a canary deployment strategy that shifts a fixed percentage of traffic to the new service revision, waits for a specified bake time, then shifts the remaining traffic. </p> <p>This is only valid when you run <code>CreateService</code> or <code>UpdateService</code> with <code>deploymentController</code> set to <code>ECS</code> and a <code>deploymentConfiguration</code> with a strategy set to <code>CANARY</code>. </p>"
+    },
     "CapacityProvider":{
       "type":"structure",
       "members":{
@@ -1236,6 +1419,10 @@
           "shape":"String",
           "documentation":"<p>The name of the capacity provider.</p>"
         },
+        "cluster":{
+          "shape":"String",
+          "documentation":"<p>The cluster that this capacity provider is associated with. Managed instances capacity providers are cluster-scoped, meaning they can only be used within their associated cluster.</p> <p>This is required for Managed instances.</p>"
+        },
         "status":{
           "shape":"CapacityProviderStatus",
           "documentation":"<p>The current status of the capacity provider. Only capacity providers in an <code>ACTIVE</code> state can be used in a cluster. When a capacity provider is successfully deleted, it has an <code>INACTIVE</code> status.</p>"
@@ -1244,6 +1431,10 @@
           "shape":"AutoScalingGroupProvider",
           "documentation":"<p>The Auto Scaling group settings for the capacity provider.</p>"
         },
+        "managedInstancesProvider":{
+          "shape":"ManagedInstancesProvider",
+          "documentation":"<p>The configuration for the Amazon ECS Managed Instances provider. This includes the infrastructure role, the launch template configuration, and tag propagation settings.</p>"
+        },
         "updateStatus":{
           "shape":"CapacityProviderUpdateStatus",
           "documentation":"<p>The update status of the capacity provider. The following are the possible states that is returned.</p> <dl> <dt>DELETE_IN_PROGRESS</dt> <dd> <p>The capacity provider is in the process of being deleted.</p> </dd> <dt>DELETE_COMPLETE</dt> <dd> <p>The capacity provider was successfully deleted and has an <code>INACTIVE</code> status.</p> </dd> <dt>DELETE_FAILED</dt> <dd> <p>The capacity provider can't be deleted. The update status reason provides further details about why the delete failed.</p> </dd> </dl>"
@@ -1255,6 +1446,10 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The metadata that you apply to the capacity provider to help you categorize and organize it. Each tag consists of a key and an optional value. You define both.</p> <p>The following basic restrictions apply to tags:</p> <ul> <li> <p>Maximum number of tags per resource - 50</p> </li> <li> <p>For each resource, each tag key must be unique, and each tag key can have only one value.</p> </li> <li> <p>Maximum key length - 128 Unicode characters in UTF-8</p> </li> <li> <p>Maximum value length - 256 Unicode characters in UTF-8</p> </li> <li> <p>If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.</p> </li> <li> <p>Tag keys and values are case-sensitive.</p> </li> <li> <p>Do not use <code>aws:</code>, <code>AWS:</code>, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for Amazon Web Services use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit.</p> </li> </ul>"
+        },
+        "type":{
+          "shape":"CapacityProviderType",
+          "documentation":"<p>The type of capacity provider. For Amazon ECS Managed Instances, this value is <code>MANAGED_INSTANCES</code>, indicating that Amazon ECS manages the underlying Amazon EC2 instances on your behalf.</p>"
         }
       },
       "documentation":"<p>The details for a capacity provider.</p>"
@@ -1270,7 +1465,9 @@
     "CapacityProviderStatus":{
       "type":"string",
       "enum":[
+        "PROVISIONING",
         "ACTIVE",
+        "DEPROVISIONING",
         "INACTIVE"
       ]
     },
@@ -1288,11 +1485,11 @@
         },
         "weight":{
           "shape":"CapacityProviderStrategyItemWeight",
-          "documentation":"<p>The <i>weight</i> value designates the relative percentage of the total number of tasks launched that should use the specified capacity provider. The <code>weight</code> value is taken into consideration after the <code>base</code> value, if defined, is satisfied.</p> <p>If no <code>weight</code> value is specified, the default value of <code>0</code> is used. When multiple capacity providers are specified within a capacity provider strategy, at least one of the capacity providers must have a weight value greater than zero and any capacity providers with a weight of <code>0</code> can't be used to place tasks. If you specify multiple capacity providers in a strategy that all have a weight of <code>0</code>, any <code>RunTask</code> or <code>CreateService</code> actions using the capacity provider strategy will fail.</p> <p>An example scenario for using weights is defining a strategy that contains two capacity providers and both have a weight of <code>1</code>, then when the <code>base</code> is satisfied, the tasks will be split evenly across the two capacity providers. Using that same logic, if you specify a weight of <code>1</code> for <i>capacityProviderA</i> and a weight of <code>4</code> for <i>capacityProviderB</i>, then for every one task that's run using <i>capacityProviderA</i>, four tasks would use <i>capacityProviderB</i>.</p>"
+          "documentation":"<p>The <i>weight</i> value designates the relative percentage of the total number of tasks launched that should use the specified capacity provider. The <code>weight</code> value is taken into consideration after the <code>base</code> value, if defined, is satisfied.</p> <p>If no <code>weight</code> value is specified, the default value of <code>0</code> is used. When multiple capacity providers are specified within a capacity provider strategy, at least one of the capacity providers must have a weight value greater than zero and any capacity providers with a weight of <code>0</code> can't be used to place tasks. If you specify multiple capacity providers in a strategy that all have a weight of <code>0</code>, any <code>RunTask</code> or <code>CreateService</code> actions using the capacity provider strategy will fail.</p> <p>Weight value characteristics:</p> <ul> <li> <p>Weight is considered after the base value is satisfied</p> </li> <li> <p>The default value is <code>0</code> if not specified</p> </li> <li> <p>The valid range is 0 to 1,000</p> </li> <li> <p>At least one capacity provider must have a weight greater than zero</p> </li> <li> <p>Capacity providers with weight of <code>0</code> cannot place tasks</p> </li> </ul> <p>Task distribution logic:</p> <ol> <li> <p>Base satisfaction: The minimum number of tasks specified by the base value are placed on that capacity provider</p> </li> <li> <p>Weight distribution: After base requirements are met, additional tasks are distributed according to weight ratios</p> </li> </ol> <p>Examples:</p> <p>Equal Distribution: Two capacity providers both with weight <code>1</code> will split tasks evenly after base requirements are met.</p> <p>Weighted Distribution: If capacityProviderA has weight <code>1</code> and capacityProviderB has weight <code>4</code>, then for every 1 task on A, 4 tasks will run on B.</p>"
         },
         "base":{
           "shape":"CapacityProviderStrategyItemBase",
-          "documentation":"<p>The <i>base</i> value designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a <i>base</i> defined. If no value is specified, the default value of <code>0</code> is used.</p>"
+          "documentation":"<p>The <i>base</i> value designates how many tasks, at a minimum, to run on the specified capacity provider for each service. Only one capacity provider in a capacity provider strategy can have a <i>base</i> defined. If no value is specified, the default value of <code>0</code> is used.</p> <p>Base value characteristics:</p> <ul> <li> <p>Only one capacity provider in a strategy can have a base defined</p> </li> <li> <p>The default value is <code>0</code> if not specified</p> </li> <li> <p>The valid range is 0 to 100,000</p> </li> <li> <p>Base requirements are satisfied first before weight distribution</p> </li> </ul>"
         }
       },
       "documentation":"<p>The details of a capacity provider strategy. A capacity provider strategy can be set when using the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html\">RunTask</a>or <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateCluster.html\">CreateCluster</a> APIs or as the default capacity provider strategy for a cluster with the <code>CreateCluster</code> API.</p> <p>Only capacity providers that are already associated with a cluster and have an <code>ACTIVE</code> or <code>UPDATING</code> status can be used in a capacity provider strategy. The <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> API is used to associate a capacity provider with a cluster.</p> <p>If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. New Auto Scaling group capacity providers can be created with the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateClusterCapacityProvider.html\">CreateClusterCapacityProvider</a> API operation.</p> <p>To use a Fargate capacity provider, specify either the <code>FARGATE</code> or <code>FARGATE_SPOT</code> capacity providers. The Fargate capacity providers are available to all accounts and only need to be associated with a cluster to be used in a capacity provider strategy.</p> <p>With <code>FARGATE_SPOT</code>, you can run interruption tolerant tasks at a rate that's discounted compared to the <code>FARGATE</code> price. <code>FARGATE_SPOT</code> runs tasks on spare compute capacity. When Amazon Web Services needs the capacity back, your tasks are interrupted with a two-minute warning. <code>FARGATE_SPOT</code> supports Linux tasks with the X86_64 architecture on platform version 1.3.0 or later. <code>FARGATE_SPOT</code> supports Linux tasks with the ARM64 architecture on platform version 1.4.0 or later.</p> <p>A capacity provider strategy can contain a maximum of 20 capacity providers.</p>"
@@ -1307,9 +1504,21 @@
       "max":1000,
       "min":0
     },
+    "CapacityProviderType":{
+      "type":"string",
+      "enum":[
+        "EC2_AUTOSCALING",
+        "MANAGED_INSTANCES",
+        "FARGATE",
+        "FARGATE_SPOT"
+      ]
+    },
     "CapacityProviderUpdateStatus":{
       "type":"string",
       "enum":[
+        "CREATE_IN_PROGRESS",
+        "CREATE_COMPLETE",
+        "CREATE_FAILED",
         "DELETE_IN_PROGRESS",
         "DELETE_COMPLETE",
         "DELETE_FAILED",
@@ -1330,7 +1539,7 @@
           "documentation":"<p> Message that describes the cause of the exception.</p>"
         }
       },
-      "documentation":"<p>These errors are usually caused by a client action. This client action might be using an action or resource on behalf of a user that doesn't have permissions to use the action or resource. Or, it might be specifying an identifier that isn't valid.</p> <p>The following list includes additional causes for the error:</p> <ul> <li> <p>The <code>RunTask</code> could not be processed because you use managed scaling and there is a capacity error because the quota of tasks in the <code>PROVISIONING</code> per cluster has been reached. For information about the service quotas, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-quotas.html\">Amazon ECS service quotas</a>.</p> </li> </ul>",
+      "documentation":"<p>These errors are usually caused by a client action. This client action might be using an action or resource on behalf of a user that doesn't have permissions to use the action or resource. Or, it might be specifying an identifier that isn't valid.</p>",
       "exception":true
     },
     "Cluster":{
@@ -1346,7 +1555,7 @@
         },
         "configuration":{
           "shape":"ClusterConfiguration",
-          "documentation":"<p>The execute command configuration for the cluster.</p>"
+          "documentation":"<p>The execute command and managed storage configuration for the cluster.</p>"
         },
         "status":{
           "shape":"String",
@@ -1366,7 +1575,7 @@
         },
         "activeServicesCount":{
           "shape":"Integer",
-          "documentation":"<p>The number of services that are running on the cluster in an <code>ACTIVE</code> state. You can view these services with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListServices.html\">PListServices</a>.</p>"
+          "documentation":"<p>The number of services that are running on the cluster in an <code>ACTIVE</code> state. You can view these services with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListServices.html\">ListServices</a>.</p>"
         },
         "statistics":{
           "shape":"Statistics",
@@ -1417,24 +1626,27 @@
       },
       "documentation":"<p>The execute command and managed storage configuration for the cluster.</p>"
     },
+    "ClusterContainsCapacityProviderException":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The cluster contains one or more capacity providers that prevent the requested operation. This exception occurs when you try to delete a cluster that still has active capacity providers, including Amazon ECS Managed Instances capacity providers. You must first delete all capacity providers from the cluster before you can delete the cluster itself.</p>",
+      "exception":true
+    },
     "ClusterContainsContainerInstancesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't delete a cluster that has registered container instances. First, deregister the container instances before you can delete the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeregisterContainerInstance.html\">DeregisterContainerInstance</a>.</p>",
       "exception":true
     },
     "ClusterContainsServicesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't delete a cluster that contains services. First, update the service to reduce its desired task count to 0, and then delete the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html\">UpdateService</a> and <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeleteService.html\">DeleteService</a>.</p>",
       "exception":true
     },
     "ClusterContainsTasksException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't delete a cluster that has active tasks.</p>",
       "exception":true
     },
@@ -1454,8 +1666,7 @@
     },
     "ClusterNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified cluster wasn't found. You can view your available clusters with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListClusters.html\">ListClusters</a>. Amazon ECS clusters are Region specific.</p>",
       "exception":true
     },
@@ -1475,7 +1686,7 @@
       "members":{
         "namespace":{
           "shape":"String",
-          "documentation":"<p>The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace that's used when you create a service and don't specify a Service Connect configuration. The namespace name can include up to 1024 characters. The name is case-sensitive. The name can't include hyphens (-), tilde (~), greater than (&gt;), less than (&lt;), or slash (/).</p> <p>If you enter an existing namespace name or ARN, then that namespace will be used. Any namespace type is supported. The namespace must be in this account and this Amazon Web Services Region.</p> <p>If you enter a new name, a Cloud Map namespace will be created. Amazon ECS creates a Cloud Map namespace with the \"API calls\" method of instance discovery only. This instance discovery method is the \"HTTP\" namespace type in the Command Line Interface. Other types of instance discovery aren't used by Service Connect.</p> <p>If you update the cluster with an empty string <code>\"\"</code> for the namespace name, the cluster configuration for Service Connect is removed. Note that the namespace will remain in Cloud Map and must be deleted separately.</p> <p>For more information about Cloud Map, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html\">Working with Services</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+          "documentation":"<p>The namespace name or full Amazon Resource Name (ARN) of the Cloud Map namespace that's used when you create a service and don't specify a Service Connect configuration. The namespace name can include up to 1024 characters. The name is case-sensitive. The name can't include greater than (&gt;), less than (&lt;), double quotation marks (\"), or slash (/).</p> <p>If you enter an existing namespace name or ARN, then that namespace will be used. Any namespace type is supported. The namespace must be in this account and this Amazon Web Services Region.</p> <p>If you enter a new name, a Cloud Map namespace will be created. Amazon ECS creates a Cloud Map namespace with the \"API calls\" method of instance discovery only. This instance discovery method is the \"HTTP\" namespace type in the Command Line Interface. Other types of instance discovery aren't used by Service Connect.</p> <p>If you update the cluster with an empty string <code>\"\"</code> for the namespace name, the cluster configuration for Service Connect is removed. Note that the namespace will remain in Cloud Map and must be deleted separately.</p> <p>For more information about Cloud Map, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html\">Working with Services</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>Use this parameter to set a default Service Connect namespace. After you set a default Service Connect namespace, any new services with Service Connect turned on that are created in the cluster are added as client services in the namespace. This setting only applies to new services that set the <code>enabled</code> parameter to <code>true</code> in the <code>ServiceConnectConfiguration</code>. You can set the namespace of each service individually in the <code>ServiceConnectConfiguration</code> to override this default parameter.</p> <p>Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
@@ -1485,7 +1696,7 @@
       "members":{
         "name":{
           "shape":"ClusterSettingName",
-          "documentation":"<p>The name of the cluster setting. The value is <code>containerInsights</code> .</p>"
+          "documentation":"<p>The name of the cluster setting. The value is <code>containerInsights</code>.</p>"
         },
         "value":{
           "shape":"String",
@@ -1511,7 +1722,8 @@
       "enum":[
         "EC2",
         "FARGATE",
-        "EXTERNAL"
+        "EXTERNAL",
+        "MANAGED_INSTANCES"
       ]
     },
     "CompatibilityList":{
@@ -1526,7 +1738,7 @@
           "documentation":"<p>The existing task ARNs which are already associated with the <code>clientToken</code>.</p>"
         }
       },
-      "documentation":"<p>The <code>RunTask</code> request could not be processed due to conflicts. The provided <code>clientToken</code> is already in use with a different <code>RunTask</code> request. The <code>resourceIds</code> are the existing task ARNs which are already associated with the <code>clientToken</code>. </p> <p>To fix this issue:</p> <ul> <li> <p>Run <code>RunTask</code> with a unique <code>clientToken</code>.</p> </li> <li> <p>Run <code>RunTask</code> with the <code>clientToken</code> and the original set of parameters</p> </li> </ul>",
+      "documentation":"<p>The request could not be processed because of conflict in the current state of the resource. </p>",
       "exception":true
     },
     "Connectivity":{
@@ -1573,7 +1785,7 @@
         },
         "reason":{
           "shape":"String",
-          "documentation":"<p>A short (255 max characters) human-readable string to provide additional details about a running or stopped container.</p>"
+          "documentation":"<p>A short (1024 max characters) human-readable string to provide additional details about a running or stopped container.</p>"
         },
         "networkBindings":{
           "shape":"NetworkBindings",
@@ -1628,7 +1840,7 @@
         },
         "image":{
           "shape":"String",
-          "documentation":"<p>The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either <code> <i>repository-url</i>/<i>image</i>:<i>tag</i> </code> or <code> <i>repository-url</i>/<i>image</i>@<i>digest</i> </code>. Up to 255 letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs are allowed. This parameter maps to <code>Image</code> in the docker container create command and the <code>IMAGE</code> parameter of docker run.</p> <ul> <li> <p>When a new task starts, the Amazon ECS container agent pulls the latest version of the specified image and tag for the container to use. However, subsequent updates to a repository image aren't propagated to already running tasks.</p> </li> <li> <p>Images in Amazon ECR repositories can be specified by either using the full <code>registry/repository:tag</code> or <code>registry/repository@digest</code>. For example, <code>012345678910.dkr.ecr.&lt;region-name&gt;.amazonaws.com/&lt;repository-name&gt;:latest</code> or <code>012345678910.dkr.ecr.&lt;region-name&gt;.amazonaws.com/&lt;repository-name&gt;@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE</code>. </p> </li> <li> <p>Images in official repositories on Docker Hub use a single name (for example, <code>ubuntu</code> or <code>mongo</code>).</p> </li> <li> <p>Images in other repositories on Docker Hub are qualified with an organization name (for example, <code>amazon/amazon-ecs-agent</code>).</p> </li> <li> <p>Images in other online repositories are qualified further by a domain name (for example, <code>quay.io/assemblyline/ubuntu</code>).</p> </li> </ul>"
+          "documentation":"<p>The image used to start a container. This string is passed directly to the Docker daemon. By default, images in the Docker Hub registry are available. Other repositories are specified with either <code> <i>repository-url</i>/<i>image</i>:<i>tag</i> </code> or <code> <i>repository-url</i>/<i>image</i>@<i>digest</i> </code>. For images using tags (repository-url/image:tag), up to 255 characters total are allowed, including letters (uppercase and lowercase), numbers, hyphens, underscores, colons, periods, forward slashes, and number signs (#). For images using digests (repository-url/image@digest), the 255 character limit applies only to the repository URL and image name (everything before the @ sign). The only supported hash function is sha256, and the hash value after sha256: must be exactly 64 characters (only letters A-F, a-f, and numbers 0-9 are allowed). This parameter maps to <code>Image</code> in the docker container create command and the <code>IMAGE</code> parameter of docker run.</p> <ul> <li> <p>When a new task starts, the Amazon ECS container agent pulls the latest version of the specified image and tag for the container to use. However, subsequent updates to a repository image aren't propagated to already running tasks.</p> </li> <li> <p>Images in Amazon ECR repositories can be specified by either using the full <code>registry/repository:tag</code> or <code>registry/repository@digest</code>. For example, <code>012345678910.dkr.ecr.&lt;region-name&gt;.amazonaws.com/&lt;repository-name&gt;:latest</code> or <code>012345678910.dkr.ecr.&lt;region-name&gt;.amazonaws.com/&lt;repository-name&gt;@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE</code>. </p> </li> <li> <p>Images in official repositories on Docker Hub use a single name (for example, <code>ubuntu</code> or <code>mongo</code>).</p> </li> <li> <p>Images in other repositories on Docker Hub are qualified with an organization name (for example, <code>amazon/amazon-ecs-agent</code>).</p> </li> <li> <p>Images in other online repositories are qualified further by a domain name (for example, <code>quay.io/assemblyline/ubuntu</code>).</p> </li> </ul>"
         },
         "repositoryCredentials":{
           "shape":"RepositoryCredentials",
@@ -1636,7 +1848,7 @@
         },
         "cpu":{
           "shape":"Integer",
-          "documentation":"<p>The number of <code>cpu</code> units reserved for the container. This parameter maps to <code>CpuShares</code> in the docker container create commandand the <code>--cpu-shares</code> option to docker run.</p> <p>This field is optional for tasks using the Fargate launch type, and the only requirement is that the total amount of CPU reserved for all containers within a task be lower than the task-level <code>cpu</code> value.</p> <note> <p>You can determine the number of CPU units that are available per EC2 instance type by multiplying the vCPUs listed for that instance type on the <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instances</a> detail page by 1,024.</p> </note> <p>Linux containers share unallocated CPU units with other containers on the container instance with the same ratio as their allocated amount. For example, if you run a single-container task on a single-core instance type with 512 CPU units specified for that container, and that's the only task running on the container instance, that container could use the full 1,024 CPU unit share at any given time. However, if you launched another copy of the same task on that container instance, each task is guaranteed a minimum of 512 CPU units when needed. Moreover, each container could float to higher CPU usage if the other container was not using it. If both tasks were 100% active all of the time, they would be limited to 512 CPU units.</p> <p>On Linux container instances, the Docker daemon on the container instance uses the CPU value to calculate the relative CPU share ratios for running containers. The minimum valid CPU share value that the Linux kernel allows is 2, and the maximum valid CPU share value that the Linux kernel allows is 262144. However, the CPU parameter isn't required, and you can use CPU values below 2 or above 262144 in your container definitions. For CPU values below 2 (including null) or above 262144, the behavior varies based on your Amazon ECS container agent version:</p> <ul> <li> <p> <b>Agent versions less than or equal to 1.1.0:</b> Null and zero CPU values are passed to Docker as 0, which Docker then converts to 1,024 CPU shares. CPU values of 1 are passed to Docker as 1, which the Linux kernel converts to two CPU shares.</p> </li> <li> <p> <b>Agent versions greater than or equal to 1.2.0:</b> Null, zero, and CPU values of 1 are passed to Docker as 2.</p> </li> <li> <p> <b>Agent versions greater than or equal to 1.84.0:</b> CPU values greater than 256 vCPU are passed to Docker as 256, which is equivalent to 262144 CPU shares.</p> </li> </ul> <p>On Windows container instances, the CPU limit is enforced as an absolute limit, or a quota. Windows containers only have access to the specified amount of CPU that's described in the task definition. A null or zero CPU value is passed to Docker as <code>0</code>, which Windows interprets as 1% of one CPU.</p>"
+          "documentation":"<p>The number of <code>cpu</code> units reserved for the container. This parameter maps to <code>CpuShares</code> in the docker container create command and the <code>--cpu-shares</code> option to docker run.</p> <p>This field is optional for tasks using the Fargate launch type, and the only requirement is that the total amount of CPU reserved for all containers within a task be lower than the task-level <code>cpu</code> value.</p> <note> <p>You can determine the number of CPU units that are available per EC2 instance type by multiplying the vCPUs listed for that instance type on the <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instances</a> detail page by 1,024.</p> </note> <p>Linux containers share unallocated CPU units with other containers on the container instance with the same ratio as their allocated amount. For example, if you run a single-container task on a single-core instance type with 512 CPU units specified for that container, and that's the only task running on the container instance, that container could use the full 1,024 CPU unit share at any given time. However, if you launched another copy of the same task on that container instance, each task is guaranteed a minimum of 512 CPU units when needed. Moreover, each container could float to higher CPU usage if the other container was not using it. If both tasks were 100% active all of the time, they would be limited to 512 CPU units.</p> <p>On Linux container instances, the Docker daemon on the container instance uses the CPU value to calculate the relative CPU share ratios for running containers. The minimum valid CPU share value that the Linux kernel allows is 2, and the maximum valid CPU share value that the Linux kernel allows is 262144. However, the CPU parameter isn't required, and you can use CPU values below 2 or above 262144 in your container definitions. For CPU values below 2 (including null) or above 262144, the behavior varies based on your Amazon ECS container agent version:</p> <ul> <li> <p> <b>Agent versions less than or equal to 1.1.0:</b> Null and zero CPU values are passed to Docker as 0, which Docker then converts to 1,024 CPU shares. CPU values of 1 are passed to Docker as 1, which the Linux kernel converts to two CPU shares.</p> </li> <li> <p> <b>Agent versions greater than or equal to 1.2.0:</b> Null, zero, and CPU values of 1 are passed to Docker as 2.</p> </li> <li> <p> <b>Agent versions greater than or equal to 1.84.0:</b> CPU values greater than 256 vCPU are passed to Docker as 256, which is equivalent to 262144 CPU shares.</p> </li> </ul> <p>On Windows container instances, the CPU limit is enforced as an absolute limit, or a quota. Windows containers only have access to the specified amount of CPU that's described in the task definition. A null or zero CPU value is passed to Docker as <code>0</code>, which Windows interprets as 1% of one CPU.</p>"
         },
         "memory":{
           "shape":"BoxedInteger",
@@ -1652,7 +1864,7 @@
         },
         "portMappings":{
           "shape":"PortMappingList",
-          "documentation":"<p>The list of port mappings for the container. Port mappings allow containers to access ports on the host container instance to send or receive traffic.</p> <p>For task definitions that use the <code>awsvpc</code> network mode, only specify the <code>containerPort</code>. The <code>hostPort</code> can be left blank or it must be the same value as the <code>containerPort</code>.</p> <p>Port mappings on Windows use the <code>NetNAT</code> gateway address rather than <code>localhost</code>. There's no loopback for port mappings on Windows, so you can't access a container's mapped port from the host itself. </p> <p>This parameter maps to <code>PortBindings</code> in the the docker container create command and the <code>--publish</code> option to docker run. If the network mode of a task definition is set to <code>none</code>, then you can't specify port mappings. If the network mode of a task definition is set to <code>host</code>, then host ports must either be undefined or they must match the container port in the port mapping.</p> <note> <p>After a task reaches the <code>RUNNING</code> status, manual and automatic host and container port assignments are visible in the <b>Network Bindings</b> section of a container description for a selected task in the Amazon ECS console. The assignments are also visible in the <code>networkBindings</code> section <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html\">DescribeTasks</a> responses.</p> </note>"
+          "documentation":"<p>The list of port mappings for the container. Port mappings allow containers to access ports on the host container instance to send or receive traffic.</p> <p>For task definitions that use the <code>awsvpc</code> network mode, only specify the <code>containerPort</code>. The <code>hostPort</code> can be left blank or it must be the same value as the <code>containerPort</code>.</p> <p>Port mappings on Windows use the <code>NetNAT</code> gateway address rather than <code>localhost</code>. There's no loopback for port mappings on Windows, so you can't access a container's mapped port from the host itself. </p> <p>This parameter maps to <code>PortBindings</code> in the docker container create command and the <code>--publish</code> option to docker run. If the network mode of a task definition is set to <code>none</code>, then you can't specify port mappings. If the network mode of a task definition is set to <code>host</code>, then host ports must either be undefined or they must match the container port in the port mapping.</p> <note> <p>After a task reaches the <code>RUNNING</code> status, manual and automatic host and container port assignments are visible in the <b>Network Bindings</b> section of a container description for a selected task in the Amazon ECS console. The assignments are also visible in the <code>networkBindings</code> section <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html\">DescribeTasks</a> responses.</p> </note>"
         },
         "essential":{
           "shape":"BoxedBoolean",
@@ -2061,21 +2273,38 @@
       "type":"list",
       "member":{"shape":"Container"}
     },
+    "CpuManufacturer":{
+      "type":"string",
+      "enum":[
+        "intel",
+        "amd",
+        "amazon-web-services"
+      ]
+    },
+    "CpuManufacturerSet":{
+      "type":"list",
+      "member":{"shape":"CpuManufacturer"}
+    },
     "CreateCapacityProviderRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "autoScalingGroupProvider"
-      ],
+      "required":["name"],
       "members":{
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the capacity provider. Up to 255 characters are allowed. They include letters (both upper and lowercase letters), numbers, underscores (_), and hyphens (-). The name can't be prefixed with \"<code>aws</code>\", \"<code>ecs</code>\", or \"<code>fargate</code>\".</p>"
         },
+        "cluster":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster to associate with the capacity provider. When you create a capacity provider with Amazon ECS Managed Instances, it becomes available only within the specified cluster.</p>"
+        },
         "autoScalingGroupProvider":{
           "shape":"AutoScalingGroupProvider",
           "documentation":"<p>The details of the Auto Scaling group for the capacity provider.</p>"
         },
+        "managedInstancesProvider":{
+          "shape":"CreateManagedInstancesProviderConfiguration",
+          "documentation":"<p>The configuration for the Amazon ECS Managed Instances provider. This configuration specifies how Amazon ECS manages Amazon EC2 instances on your behalf, including the infrastructure role, instance launch template, and tag propagation settings.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The metadata that you apply to the capacity provider to categorize and organize them more conveniently. Each tag consists of a key and an optional value. You define both of them.</p> <p>The following basic restrictions apply to tags:</p> <ul> <li> <p>Maximum number of tags per resource - 50</p> </li> <li> <p>For each resource, each tag key must be unique, and each tag key can have only one value.</p> </li> <li> <p>Maximum key length - 128 Unicode characters in UTF-8</p> </li> <li> <p>Maximum value length - 256 Unicode characters in UTF-8</p> </li> <li> <p>If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.</p> </li> <li> <p>Tag keys and values are case-sensitive.</p> </li> <li> <p>Do not use <code>aws:</code>, <code>AWS:</code>, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for Amazon Web Services use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit.</p> </li> </ul>"
@@ -2133,6 +2362,28 @@
         }
       }
     },
+    "CreateManagedInstancesProviderConfiguration":{
+      "type":"structure",
+      "required":[
+        "infrastructureRoleArn",
+        "instanceLaunchTemplate"
+      ],
+      "members":{
+        "infrastructureRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the infrastructure role that Amazon ECS uses to manage instances on your behalf. This role must have permissions to launch, terminate, and manage Amazon EC2 instances, as well as access to other Amazon Web Services services required for Amazon ECS Managed Instances functionality.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html\">Amazon ECS infrastructure IAM role</a> in the <i>Amazon ECS Developer Guide</i>. </p>"
+        },
+        "instanceLaunchTemplate":{
+          "shape":"InstanceLaunchTemplate",
+          "documentation":"<p>The launch template configuration that specifies how Amazon ECS should launch Amazon EC2 instances. This includes the instance profile, network configuration, storage settings, and instance requirements for attribute-based instance type selection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Store instance launch parameters in Amazon EC2 launch templates</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "propagateTags":{
+          "shape":"PropagateMITags",
+          "documentation":"<p>Specifies whether to propagate tags from the capacity provider to the Amazon ECS Managed Instances. When enabled, tags applied to the capacity provider are automatically applied to all instances launched by this provider.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for creating a Amazon ECS Managed Instances provider. This specifies how Amazon ECS should manage Amazon EC2 instances, including the infrastructure role, instance launch template, and whether to propagate tags from the capacity provider to the instances.</p>"
+    },
     "CreateServiceRequest":{
       "type":"structure",
       "required":["serviceName"],
@@ -2151,11 +2402,11 @@
         },
         "availabilityZoneRebalancing":{
           "shape":"AvailabilityZoneRebalancing",
-          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p> <p>The default behavior of <code>AvailabilityZoneRebalancing</code> differs between create and update requests:</p> <ul> <li> <p>For create service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults the value to <code>ENABLED</code>.</p> </li> <li> <p>For update service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults to the existing service’s <code>AvailabilityZoneRebalancing</code> value. If the service never had an <code>AvailabilityZoneRebalancing</code> value set, Amazon ECS treats this as <code>DISABLED</code>.</p> </li> </ul>"
         },
         "loadBalancers":{
           "shape":"LoadBalancers",
-          "documentation":"<p>A load balancer object representing the load balancers to use with your service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html\">Service load balancing</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If the service uses the rolling update (<code>ECS</code>) deployment controller and using either an Application Load Balancer or Network Load Balancer, you must specify one or more target group ARNs to attach to the service. The service-linked role is required for services that use multiple target groups. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html\">Using service-linked roles for Amazon ECS</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If the service uses the <code>CODE_DEPLOY</code> deployment controller, the service is required to use either an Application Load Balancer or Network Load Balancer. When creating an CodeDeploy deployment group, you specify two target groups (referred to as a <code>targetGroupPair</code>). During a deployment, CodeDeploy determines which task set in your service has the status <code>PRIMARY</code>, and it associates one target group with it. Then, it also associates the other target group with the replacement task set. The load balancer can also have up to two listeners: a required listener for production traffic and an optional listener that you can use to perform validation tests with Lambda functions before routing production traffic to it.</p> <p>If you use the <code>CODE_DEPLOY</code> deployment controller, these values can be changed when updating the service.</p> <p>For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target group ARN, the container name, and the container port to access from the load balancer. The container name must be as it appears in a container definition. The load balancer name parameter must be omitted. When a task from this service is placed on a container instance, the container instance and port combination is registered as a target in the target group that's specified here.</p> <p>For Classic Load Balancers, this object must contain the load balancer name, the container name , and the container port to access from the load balancer. The container name must be as it appears in a container definition. The target group ARN parameter must be omitted. When a task from this service is placed on a container instance, the container instance is registered with the load balancer that's specified here.</p> <p>Services with tasks that use the <code>awsvpc</code> network mode (for example, those with the Fargate launch type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers aren't supported. Also, when you create any target groups for these services, you must choose <code>ip</code> as the target type, not <code>instance</code>. This is because tasks that use the <code>awsvpc</code> network mode are associated with an elastic network interface, not an Amazon EC2 instance.</p>"
+          "documentation":"<p>A load balancer object representing the load balancers to use with your service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html\">Service load balancing</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If the service uses the <code>ECS</code> deployment controller and using either an Application Load Balancer or Network Load Balancer, you must specify one or more target group ARNs to attach to the service. The service-linked role is required for services that use multiple target groups. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html\">Using service-linked roles for Amazon ECS</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>If the service uses the <code>CODE_DEPLOY</code> deployment controller, the service is required to use either an Application Load Balancer or Network Load Balancer. When creating an CodeDeploy deployment group, you specify two target groups (referred to as a <code>targetGroupPair</code>). During a deployment, CodeDeploy determines which task set in your service has the status <code>PRIMARY</code>, and it associates one target group with it. Then, it also associates the other target group with the replacement task set. The load balancer can also have up to two listeners: a required listener for production traffic and an optional listener that you can use to perform validation tests with Lambda functions before routing production traffic to it.</p> <p>If you use the <code>CODE_DEPLOY</code> deployment controller, these values can be changed when updating the service.</p> <p>For Application Load Balancers and Network Load Balancers, this object must contain the load balancer target group ARN, the container name, and the container port to access from the load balancer. The container name must be as it appears in a container definition. The load balancer name parameter must be omitted. When a task from this service is placed on a container instance, the container instance and port combination is registered as a target in the target group that's specified here.</p> <p>For Classic Load Balancers, this object must contain the load balancer name, the container name , and the container port to access from the load balancer. The container name must be as it appears in a container definition. The target group ARN parameter must be omitted. When a task from this service is placed on a container instance, the container instance is registered with the load balancer that's specified here.</p> <p>Services with tasks that use the <code>awsvpc</code> network mode (for example, those with the Fargate launch type) only support Application Load Balancers and Network Load Balancers. Classic Load Balancers aren't supported. Also, when you create any target groups for these services, you must choose <code>ip</code> as the target type, not <code>instance</code>. This is because tasks that use the <code>awsvpc</code> network mode are associated with an elastic network interface, not an Amazon EC2 instance.</p>"
         },
         "serviceRegistries":{
           "shape":"ServiceRegistries",
@@ -2171,11 +2422,11 @@
         },
         "launchType":{
           "shape":"LaunchType",
-          "documentation":"<p>The infrastructure that you run your service on. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The <code>FARGATE</code> launch type runs your tasks on Fargate On-Demand infrastructure.</p> <note> <p>Fargate Spot infrastructure is available for use but a capacity provider strategy must be used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html\">Fargate capacity providers</a> in the <i>Amazon ECS Developer Guide</i>.</p> </note> <p>The <code>EC2</code> launch type runs your tasks on Amazon EC2 instances registered to your cluster.</p> <p>The <code>EXTERNAL</code> launch type runs your tasks on your on-premises server or virtual machine (VM) capacity registered to your cluster.</p> <p>A service can use either a launch type or a capacity provider strategy. If a <code>launchType</code> is specified, the <code>capacityProviderStrategy</code> parameter must be omitted.</p>"
+          "documentation":"<p>The infrastructure that you run your service on. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <note> <p>If you want to use Amazon ECS Managed Instances, you must use the <code>capacityProviderStrategy</code> request parameter and omit the <code>launchType</code> request parameter.</p> </note> <p>The <code>FARGATE</code> launch type runs your tasks on Fargate On-Demand infrastructure.</p> <note> <p>Fargate Spot infrastructure is available for use but a capacity provider strategy must be used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html\">Fargate capacity providers</a> in the <i>Amazon ECS Developer Guide</i>.</p> </note> <p>The <code>EC2</code> launch type runs your tasks on Amazon EC2 instances registered to your cluster.</p> <p>The <code>EXTERNAL</code> launch type runs your tasks on your on-premises server or virtual machine (VM) capacity registered to your cluster.</p> <p>A service can use either a launch type or a capacity provider strategy. If a <code>launchType</code> is specified, the <code>capacityProviderStrategy</code> parameter must be omitted.</p>"
         },
         "capacityProviderStrategy":{
           "shape":"CapacityProviderStrategy",
-          "documentation":"<p>The capacity provider strategy to use for the service.</p> <p>If a <code>capacityProviderStrategy</code> is specified, the <code>launchType</code> parameter must be omitted. If no <code>capacityProviderStrategy</code> or <code>launchType</code> is specified, the <code>defaultCapacityProviderStrategy</code> for the cluster is used.</p> <p>A capacity provider strategy can contain a maximum of 20 capacity providers.</p>"
+          "documentation":"<p>The capacity provider strategy to use for the service.</p> <note> <p>If you want to use Amazon ECS Managed Instances, you must use the <code>capacityProviderStrategy</code> request parameter and omit the <code>launchType</code> request parameter.</p> </note> <p>If a <code>capacityProviderStrategy</code> is specified, the <code>launchType</code> parameter must be omitted. If no <code>capacityProviderStrategy</code> or <code>launchType</code> is specified, the <code>defaultCapacityProviderStrategy</code> for the cluster is used.</p> <p>A capacity provider strategy can contain a maximum of 20 capacity providers.</p>"
         },
         "platformVersion":{
           "shape":"String",
@@ -2203,7 +2454,7 @@
         },
         "healthCheckGracePeriodSeconds":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing, VPC Lattice, and container health checks after a task has first started. If you don't specify a health check grace period value, the default value of <code>0</code> is used. If you don't use any of the health checks, then <code>healthCheckGracePeriodSeconds</code> is unused.</p> <p>If your service's tasks take a while to start and respond to health checks, you can specify a health check grace period of up to 2,147,483,647 seconds (about 69 years). During that time, the Amazon ECS service scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks as unhealthy and stopping them before they have time to come up.</p>"
+          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing, VPC Lattice, and container health checks after a task has first started. If you do not specify a health check grace period value, the default value of 0 is used. If you do not use any of the health checks, then <code>healthCheckGracePeriodSeconds</code> is unused.</p> <p>If your service has more running tasks than desired, unhealthy tasks in the grace period might be stopped to reach the desired count.</p>"
         },
         "schedulingStrategy":{
           "shape":"SchedulingStrategy",
@@ -2219,7 +2470,7 @@
         },
         "enableECSManagedTags":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether to turn on Amazon ECS managed tags for the tasks within the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html\">Tagging your Amazon ECS resources</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>When you use Amazon ECS managed tags, you need to set the <code>propagateTags</code> request parameter.</p>"
+          "documentation":"<p>Specifies whether to turn on Amazon ECS managed tags for the tasks within the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html\">Tagging your Amazon ECS resources</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>When you use Amazon ECS managed tags, you must set the <code>propagateTags</code> request parameter.</p>"
         },
         "propagateTags":{
           "shape":"PropagateTags",
@@ -2347,7 +2598,7 @@
         },
         "principalArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the principal. It can be an user, role, or the root user. If you specify the root user, it disables the account setting for all users, roles, and the root user of the account unless a user or role explicitly overrides these settings. If this field is omitted, the setting is changed only for the authenticated user.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the principal. It can be a user, role, or the root user. If you specify the root user, it disables the account setting for all users, roles, and the root user of the account unless a user or role explicitly overrides these settings. If this field is omitted, the setting is changed only for the authenticated user.</p> <p>In order to use this parameter, you must be the root user, or the principal.</p>"
         }
       }
     },
@@ -2390,6 +2641,10 @@
         "capacityProvider":{
           "shape":"String",
           "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the capacity provider to delete.</p>"
+        },
+        "cluster":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster that contains the capacity provider to delete. Managed instances capacity providers are cluster-scoped and can only be deleted from their associated cluster.</p>"
         }
       }
     },
@@ -2617,7 +2872,7 @@
           "documentation":"<p>Determines whether to use the CloudWatch alarm option in the service deployment process.</p>"
         }
       },
-      "documentation":"<p>One of the methods which provide a way for you to quickly identify when a deployment has failed, and then to optionally roll back the failure to the last working deployment.</p> <p>When the alarms are generated, Amazon ECS sets the service deployment to failed. Set the rollback parameter to have Amazon ECS to roll back your service to the last completed deployment after a failure.</p> <p>You can only use the <code>DeploymentAlarms</code> method to detect failures when the <code>DeploymentController</code> is set to <code>ECS</code> (rolling update).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html\">Rolling update</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p>"
+      "documentation":"<p>One of the methods which provide a way for you to quickly identify when a deployment has failed, and then to optionally roll back the failure to the last working deployment.</p> <p>When the alarms are generated, Amazon ECS sets the service deployment to failed. Set the rollback parameter to have Amazon ECS to roll back your service to the last completed deployment after a failure.</p> <p>You can only use the <code>DeploymentAlarms</code> method to detect failures when the <code>DeploymentController</code> is set to <code>ECS</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html\">Rolling update</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p>"
     },
     "DeploymentCircuitBreaker":{
       "type":"structure",
@@ -2650,11 +2905,31 @@
         },
         "minimumHealthyPercent":{
           "shape":"BoxedInteger",
-          "documentation":"<p>If a service is using the rolling update (<code>ECS</code>) deployment type, the <code>minimumHealthyPercent</code> represents a lower limit on the number of your service's tasks that must remain in the <code>RUNNING</code> state during a deployment, as a percentage of the <code>desiredCount</code> (rounded up to the nearest integer). This parameter enables you to deploy without using additional cluster capacity. For example, if your service has a <code>desiredCount</code> of four tasks and a <code>minimumHealthyPercent</code> of 50%, the service scheduler may stop two existing tasks to free up cluster capacity before starting two new tasks. </p> <p> If any tasks are unhealthy and if <code>maximumPercent</code> doesn't allow the Amazon ECS scheduler to start replacement tasks, the scheduler stops the unhealthy tasks one-by-one — using the <code>minimumHealthyPercent</code> as a constraint — to clear up capacity to launch replacement tasks. For more information about how the scheduler replaces unhealthy tasks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Amazon ECS services</a> . </p> <p>For services that <i>do not</i> use a load balancer, the following should be noted:</p> <ul> <li> <p>A service is considered healthy if all essential containers within the tasks in the service pass their health checks.</p> </li> <li> <p>If a task has no essential containers with a health check defined, the service scheduler will wait for 40 seconds after a task reaches a <code>RUNNING</code> state before the task is counted towards the minimum healthy percent total.</p> </li> <li> <p>If a task has one or more essential containers with a health check defined, the service scheduler will wait for the task to reach a healthy status before counting it towards the minimum healthy percent total. A task is considered healthy when all essential containers within the task have passed their health checks. The amount of time the service scheduler can wait for is determined by the container health check settings. </p> </li> </ul> <p>For services that <i>do</i> use a load balancer, the following should be noted:</p> <ul> <li> <p>If a task has no essential containers with a health check defined, the service scheduler will wait for the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.</p> </li> <li> <p>If a task has an essential container with a health check defined, the service scheduler will wait for both the task to reach a healthy status and the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.</p> </li> </ul> <p>The default value for a replica service for <code>minimumHealthyPercent</code> is 100%. The default <code>minimumHealthyPercent</code> value for a service using the <code>DAEMON</code> service schedule is 0% for the CLI, the Amazon Web Services SDKs, and the APIs and 50% for the Amazon Web Services Management Console.</p> <p>The minimum number of healthy tasks during a deployment is the <code>desiredCount</code> multiplied by the <code>minimumHealthyPercent</code>/100, rounded up to the nearest integer value.</p> <p>If a service is using either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and is running tasks that use the EC2 launch type, the <b>minimum healthy percent</b> value is set to the default value. The <b>minimum healthy percent</b> value is used to define the lower limit on the number of the tasks in the service that remain in the <code>RUNNING</code> state while the container instances are in the <code>DRAINING</code> state.</p> <note> <p>You can't specify a custom <code>minimumHealthyPercent</code> value for a service that uses either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and has tasks that use the EC2 launch type.</p> </note> <p>If a service is using either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and is running tasks that use the Fargate launch type, the minimum healthy percent value is not used, although it is returned when describing your service.</p>"
+          "documentation":"<p>If a service is using the rolling update (<code>ECS</code>) deployment type, the <code>minimumHealthyPercent</code> represents a lower limit on the number of your service's tasks that must remain in the <code>RUNNING</code> state during a deployment, as a percentage of the <code>desiredCount</code> (rounded up to the nearest integer). This parameter enables you to deploy without using additional cluster capacity. For example, if your service has a <code>desiredCount</code> of four tasks and a <code>minimumHealthyPercent</code> of 50%, the service scheduler may stop two existing tasks to free up cluster capacity before starting two new tasks. </p> <p> If any tasks are unhealthy and if <code>maximumPercent</code> doesn't allow the Amazon ECS scheduler to start replacement tasks, the scheduler stops the unhealthy tasks one-by-one — using the <code>minimumHealthyPercent</code> as a constraint — to clear up capacity to launch replacement tasks. For more information about how the scheduler replaces unhealthy tasks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html\">Amazon ECS services</a>. </p> <p>For services that <i>do not</i> use a load balancer, the following should be noted:</p> <ul> <li> <p>A service is considered healthy if all essential containers within the tasks in the service pass their health checks.</p> </li> <li> <p>If a task has no essential containers with a health check defined, the service scheduler will wait for 40 seconds after a task reaches a <code>RUNNING</code> state before the task is counted towards the minimum healthy percent total.</p> </li> <li> <p>If a task has one or more essential containers with a health check defined, the service scheduler will wait for the task to reach a healthy status before counting it towards the minimum healthy percent total. A task is considered healthy when all essential containers within the task have passed their health checks. The amount of time the service scheduler can wait for is determined by the container health check settings. </p> </li> </ul> <p>For services that <i>do</i> use a load balancer, the following should be noted:</p> <ul> <li> <p>If a task has no essential containers with a health check defined, the service scheduler will wait for the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.</p> </li> <li> <p>If a task has an essential container with a health check defined, the service scheduler will wait for both the task to reach a healthy status and the load balancer target group health check to return a healthy status before counting the task towards the minimum healthy percent total.</p> </li> </ul> <p>The default value for a replica service for <code>minimumHealthyPercent</code> is 100%. The default <code>minimumHealthyPercent</code> value for a service using the <code>DAEMON</code> service schedule is 0% for the CLI, the Amazon Web Services SDKs, and the APIs and 50% for the Amazon Web Services Management Console.</p> <p>The minimum number of healthy tasks during a deployment is the <code>desiredCount</code> multiplied by the <code>minimumHealthyPercent</code>/100, rounded up to the nearest integer value.</p> <p>If a service is using either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and is running tasks that use the EC2 launch type, the <b>minimum healthy percent</b> value is set to the default value. The <b>minimum healthy percent</b> value is used to define the lower limit on the number of the tasks in the service that remain in the <code>RUNNING</code> state while the container instances are in the <code>DRAINING</code> state.</p> <note> <p>You can't specify a custom <code>minimumHealthyPercent</code> value for a service that uses either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and has tasks that use the EC2 launch type.</p> </note> <p>If a service is using either the blue/green (<code>CODE_DEPLOY</code>) or <code>EXTERNAL</code> deployment types and is running tasks that use the Fargate launch type, the minimum healthy percent value is not used, although it is returned when describing your service.</p>"
         },
         "alarms":{
           "shape":"DeploymentAlarms",
           "documentation":"<p>Information about the CloudWatch alarms.</p>"
+        },
+        "strategy":{
+          "shape":"DeploymentStrategy",
+          "documentation":"<p>The deployment strategy for the service. Choose from these valid values:</p> <ul> <li> <p> <code>ROLLING</code> - When you create a service which uses the rolling update (<code>ROLLING</code>) deployment strategy, the Amazon ECS service scheduler replaces the currently running tasks with new tasks. The number of tasks that Amazon ECS adds or removes from the service during a rolling update is controlled by the service deployment configuration.</p> </li> <li> <p> <code>BLUE_GREEN</code> - A blue/green deployment strategy (<code>BLUE_GREEN</code>) is a release methodology that reduces downtime and risk by running two identical production environments called blue and green. With Amazon ECS blue/green deployments, you can validate new service revisions before directing production traffic to them. This approach provides a safer way to deploy changes with the ability to quickly roll back if needed.</p> </li> <li> <p> <code>LINEAR</code> - A <i>linear</i> deployment strategy (<code>LINEAR</code>) gradually shifts traffic from the current production environment to a new environment in equal percentages over time. With Amazon ECS linear deployments, you can control the pace of traffic shifting and validate new service revisions with increasing amounts of production traffic.</p> </li> <li> <p> <code>CANARY</code> - A <i>canary</i> deployment strategy (<code>CANARY</code>) shifts a small percentage of traffic to the new service revision first, then shifts the remaining traffic all at once after a specified time period. This allows you to test the new version with a subset of users before full deployment.</p> </li> </ul>"
+        },
+        "bakeTimeInMinutes":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The time period when both blue and green service revisions are running simultaneously after the production traffic has shifted.</p> <p>You must provide this parameter when you use the <code>BLUE_GREEN</code> deployment strategy.</p>"
+        },
+        "lifecycleHooks":{
+          "shape":"DeploymentLifecycleHookList",
+          "documentation":"<p>An array of deployment lifecycle hook objects to run custom logic at specific stages of the deployment lifecycle.</p>"
+        },
+        "linearConfiguration":{
+          "shape":"LinearConfiguration",
+          "documentation":"<p>Configuration for linear deployment strategy. Only valid when the deployment strategy is <code>LINEAR</code>. This configuration enables progressive traffic shifting in equal percentage increments with configurable bake times between each step.</p>"
+        },
+        "canaryConfiguration":{
+          "shape":"CanaryConfiguration",
+          "documentation":"<p>Configuration for canary deployment strategy. Only valid when the deployment strategy is <code>CANARY</code>. This configuration enables shifting a fixed percentage of traffic for testing, followed by shifting the remaining traffic after a bake period.</p>"
         }
       },
       "documentation":"<p>Optional deployment parameters that control how many tasks run during a deployment and the ordering of stopping and starting tasks.</p>"
@@ -2665,7 +2940,7 @@
       "members":{
         "type":{
           "shape":"DeploymentControllerType",
-          "documentation":"<p>The deployment controller type to use.</p> <p>There are three deployment controller types available:</p> <dl> <dt>ECS</dt> <dd> <p>The rolling update (<code>ECS</code>) deployment type involves replacing the current running version of the container with the latest version. The number of containers Amazon ECS adds or removes from the service during a rolling update is controlled by adjusting the minimum and maximum number of healthy tasks allowed during a service deployment, as specified in the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DeploymentConfiguration.html\">DeploymentConfiguration</a>.</p> <p>For more information about rolling deployments, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html\">Deploy Amazon ECS services by replacing tasks</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </dd> <dt>CODE_DEPLOY</dt> <dd> <p>The blue/green (<code>CODE_DEPLOY</code>) deployment type uses the blue/green deployment model powered by CodeDeploy, which allows you to verify a new deployment of a service before sending production traffic to it.</p> <p>For more information about blue/green deployments, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html\">Validate the state of an Amazon ECS service before deployment </a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </dd> <dt>EXTERNAL</dt> <dd> <p>The external (<code>EXTERNAL</code>) deployment type enables you to use any third-party deployment controller for full control over the deployment process for an Amazon ECS service.</p> <p>For more information about external deployments, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-external.html\">Deploy Amazon ECS services using a third-party controller </a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </dd> </dl>"
+          "documentation":"<p>The deployment controller type to use.</p> <p>The deployment controller is the mechanism that determines how tasks are deployed for your service. The valid options are:</p> <ul> <li> <p>ECS</p> <p>When you create a service which uses the <code>ECS</code> deployment controller, you can choose between the following deployment strategies:</p> <ul> <li> <p> <code>ROLLING</code>: When you create a service which uses the <i>rolling update</i> (<code>ROLLING</code>) deployment strategy, the Amazon ECS service scheduler replaces the currently running tasks with new tasks. The number of tasks that Amazon ECS adds or removes from the service during a rolling update is controlled by the service deployment configuration. </p> <p>Rolling update deployments are best suited for the following scenarios:</p> <ul> <li> <p>Gradual service updates: You need to update your service incrementally without taking the entire service offline at once.</p> </li> <li> <p>Limited resource requirements: You want to avoid the additional resource costs of running two complete environments simultaneously (as required by blue/green deployments).</p> </li> <li> <p>Acceptable deployment time: Your application can tolerate a longer deployment process, as rolling updates replace tasks one by one.</p> </li> <li> <p>No need for instant roll back: Your service can tolerate a rollback process that takes minutes rather than seconds.</p> </li> <li> <p>Simple deployment process: You prefer a straightforward deployment approach without the complexity of managing multiple environments, target groups, and listeners.</p> </li> <li> <p>No load balancer requirement: Your service doesn't use or require a load balancer, Application Load Balancer, Network Load Balancer, or Service Connect (which are required for blue/green deployments).</p> </li> <li> <p>Stateful applications: Your application maintains state that makes it difficult to run two parallel environments.</p> </li> <li> <p>Cost sensitivity: You want to minimize deployment costs by not running duplicate environments during deployment.</p> </li> </ul> <p>Rolling updates are the default deployment strategy for services and provide a balance between deployment safety and resource efficiency for many common application scenarios.</p> </li> <li> <p> <code>BLUE_GREEN</code>: A <i>blue/green</i> deployment strategy (<code>BLUE_GREEN</code>) is a release methodology that reduces downtime and risk by running two identical production environments called blue and green. With Amazon ECS blue/green deployments, you can validate new service revisions before directing production traffic to them. This approach provides a safer way to deploy changes with the ability to quickly roll back if needed.</p> <p>Amazon ECS blue/green deployments are best suited for the following scenarios:</p> <ul> <li> <p>Service validation: When you need to validate new service revisions before directing production traffic to them</p> </li> <li> <p>Zero downtime: When your service requires zero-downtime deployments</p> </li> <li> <p>Instant roll back: When you need the ability to quickly roll back if issues are detected</p> </li> <li> <p>Load balancer requirement: When your service uses Application Load Balancer, Network Load Balancer, or Service Connect</p> </li> </ul> </li> </ul> </li> <li> <p>External</p> <p>Use a third-party deployment controller.</p> </li> <li> <p>Blue/green deployment (powered by CodeDeploy)</p> <p>CodeDeploy installs an updated version of the application as a new replacement task set and reroutes production traffic from the original application task set to the replacement task set. The original task set is terminated after a successful deployment. Use this deployment controller to verify a new deployment of a service before sending production traffic to it.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The deployment controller to use for the service. </p>"
@@ -2688,6 +2963,48 @@
       },
       "documentation":"<p>The amount of ephemeral storage to allocate for the deployment.</p>"
     },
+    "DeploymentLifecycleHook":{
+      "type":"structure",
+      "members":{
+        "hookTargetArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the hook target. Currently, only Lambda function ARNs are supported.</p> <p>You must provide this parameter when configuring a deployment lifecycle hook.</p>"
+        },
+        "roleArn":{
+          "shape":"IAMRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants Amazon ECS permission to call Lambda functions on your behalf.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/blue-green-permissions.html\">Permissions required for Lambda functions in Amazon ECS blue/green deployments</a> in the <i> Amazon Elastic Container Service Developer Guide</i>.</p>"
+        },
+        "lifecycleStages":{
+          "shape":"DeploymentLifecycleHookStageList",
+          "documentation":"<p>The lifecycle stages at which to run the hook. Choose from these valid values:</p> <ul> <li> <p>RECONCILE_SERVICE</p> <p>The reconciliation stage that only happens when you start a new service deployment with more than 1 service revision in an ACTIVE state.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>PRE_SCALE_UP</p> <p>The green service revision has not started. The blue service revision is handling 100% of the production traffic. There is no test traffic.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>POST_SCALE_UP</p> <p>The green service revision has started. The blue service revision is handling 100% of the production traffic. There is no test traffic.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>TEST_TRAFFIC_SHIFT</p> <p>The blue and green service revisions are running. The blue service revision handles 100% of the production traffic. The green service revision is migrating from 0% to 100% of test traffic.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>POST_TEST_TRAFFIC_SHIFT</p> <p>The test traffic shift is complete. The green service revision handles 100% of the test traffic.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>PRODUCTION_TRAFFIC_SHIFT</p> <p>Production traffic is shifting to the green service revision. The green service revision is migrating from 0% to 100% of production traffic.</p> <p>You can use a lifecycle hook for this stage.</p> </li> <li> <p>POST_PRODUCTION_TRAFFIC_SHIFT</p> <p>The production traffic shift is complete.</p> <p>You can use a lifecycle hook for this stage.</p> </li> </ul> <p>You must provide this parameter when configuring a deployment lifecycle hook.</p>"
+        },
+        "hookDetails":{
+          "shape":"HookDetails",
+          "documentation":"<p>Use this field to specify custom parameters that Amazon ECS will pass to your hook target invocations (such as a Lambda function).</p>"
+        }
+      },
+      "documentation":"<p>A deployment lifecycle hook runs custom logic at specific stages of the deployment process. Currently, you can use Lambda functions as hook targets.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-lifecycle-hooks.html\">Lifecycle hooks for Amazon ECS service deployments</a> in the <i> Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
+    "DeploymentLifecycleHookList":{
+      "type":"list",
+      "member":{"shape":"DeploymentLifecycleHook"}
+    },
+    "DeploymentLifecycleHookStage":{
+      "type":"string",
+      "enum":[
+        "RECONCILE_SERVICE",
+        "PRE_SCALE_UP",
+        "POST_SCALE_UP",
+        "TEST_TRAFFIC_SHIFT",
+        "POST_TEST_TRAFFIC_SHIFT",
+        "PRODUCTION_TRAFFIC_SHIFT",
+        "POST_PRODUCTION_TRAFFIC_SHIFT"
+      ]
+    },
+    "DeploymentLifecycleHookStageList":{
+      "type":"list",
+      "member":{"shape":"DeploymentLifecycleHookStage"}
+    },
     "DeploymentRolloutState":{
       "type":"string",
       "enum":[
@@ -2696,6 +3013,15 @@
         "IN_PROGRESS"
       ]
     },
+    "DeploymentStrategy":{
+      "type":"string",
+      "enum":[
+        "ROLLING",
+        "BLUE_GREEN",
+        "LINEAR",
+        "CANARY"
+      ]
+    },
     "Deployments":{
       "type":"list",
       "member":{"shape":"Deployment"}
@@ -2753,6 +3079,10 @@
           "shape":"StringList",
           "documentation":"<p>The short name or full Amazon Resource Name (ARN) of one or more capacity providers. Up to <code>100</code> capacity providers can be described in an action.</p>"
         },
+        "cluster":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster to describe capacity providers for. When specified, only capacity providers associated with this cluster are returned, including Amazon ECS Managed Instances capacity providers.</p>"
+        },
         "include":{
           "shape":"CapacityProviderFieldList",
           "documentation":"<p>Specifies whether or not you want to see the resource tags for the capacity provider. If <code>TAGS</code> is specified, the tags are included in the response. If this field is omitted, tags aren't included in the response.</p>"
@@ -2989,7 +3319,7 @@
       "members":{
         "cluster":{
           "shape":"String",
-          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster that hosts the task or tasks to describe. If you do not specify a cluster, the default cluster is assumed. This parameter is required. If you do not specify a value, the <code>default</code> cluster is used.</p>"
+          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster that hosts the task or tasks to describe. If you do not specify a cluster, the default cluster is assumed.</p>"
         },
         "tasks":{
           "shape":"StringList",
@@ -3251,6 +3581,17 @@
       },
       "documentation":"<p>The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on Fargate. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html\">Using data volumes in tasks</a> in the <i>Amazon ECS Developer Guide;</i>.</p> <note> <p>For tasks using the Fargate launch type, the task requires the following platforms:</p> <ul> <li> <p>Linux platform version <code>1.4.0</code> or later.</p> </li> <li> <p>Windows platform version <code>1.0.0</code> or later.</p> </li> </ul> </note>"
     },
+    "ExcludedInstanceType":{
+      "type":"string",
+      "max":30,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\.\\*\\-]+"
+    },
+    "ExcludedInstanceTypeSet":{
+      "type":"list",
+      "member":{"shape":"ExcludedInstanceType"},
+      "max":400
+    },
     "ExecuteCommandConfiguration":{
       "type":"structure",
       "members":{
@@ -3493,22 +3834,22 @@
         },
         "interval":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The time period in seconds between each health check execution. You may specify between 5 and 300 seconds. The default value is 30 seconds.</p>"
+          "documentation":"<p>The time period in seconds between each health check execution. You may specify between 5 and 300 seconds. The default value is 30 seconds. This value applies only when you specify a <code>command</code>. </p>"
         },
         "timeout":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The time period in seconds to wait for a health check to succeed before it is considered a failure. You may specify between 2 and 60 seconds. The default value is 5.</p>"
+          "documentation":"<p>The time period in seconds to wait for a health check to succeed before it is considered a failure. You may specify between 2 and 60 seconds. The default value is 5. This value applies only when you specify a <code>command</code>. </p>"
         },
         "retries":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The number of times to retry a failed health check before the container is considered unhealthy. You may specify between 1 and 10 retries. The default value is 3.</p>"
+          "documentation":"<p>The number of times to retry a failed health check before the container is considered unhealthy. You may specify between 1 and 10 retries. The default value is 3. This value applies only when you specify a <code>command</code>. </p>"
         },
         "startPeriod":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The optional grace period to provide containers time to bootstrap before failed health checks count towards the maximum number of retries. You can specify between 0 and 300 seconds. By default, the <code>startPeriod</code> is off.</p> <note> <p>If a health check succeeds within the <code>startPeriod</code>, then the container is considered healthy and any subsequent failures count toward the maximum number of retries.</p> </note>"
+          "documentation":"<p>The optional grace period to provide containers time to bootstrap before failed health checks count towards the maximum number of retries. You can specify between 0 and 300 seconds. By default, the <code>startPeriod</code> is off. This value applies only when you specify a <code>command</code>. </p> <note> <p>If a health check succeeds within the <code>startPeriod</code>, then the container is considered healthy and any subsequent failures count toward the maximum number of retries.</p> </note>"
         }
       },
-      "documentation":"<p>An object representing a container health check. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image (such as those specified in a parent image or from the image's Dockerfile). This configuration maps to the <code>HEALTHCHECK</code> parameter of docker run.</p> <note> <p>The Amazon ECS container agent only monitors and reports on the health checks specified in the task definition. Amazon ECS does not monitor Docker health checks that are embedded in a container image and not specified in the container definition. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image.</p> </note> <p>You can view the health status of both individual containers and a task with the DescribeTasks API operation or when viewing the task details in the console.</p> <p>The health check is designed to make sure that your containers survive agent restarts, upgrades, or temporary unavailability.</p> <p>Amazon ECS performs health checks on containers with the default that launched the container instance or the task.</p> <p>The following describes the possible <code>healthStatus</code> values for a container:</p> <ul> <li> <p> <code>HEALTHY</code>-The container health check has passed successfully.</p> </li> <li> <p> <code>UNHEALTHY</code>-The container health check has failed.</p> </li> <li> <p> <code>UNKNOWN</code>-The container health check is being evaluated, there's no container health check defined, or Amazon ECS doesn't have the health status of the container.</p> </li> </ul> <p>The following describes the possible <code>healthStatus</code> values based on the container health checker status of essential containers in the task with the following priority order (high to low):</p> <ul> <li> <p> <code>UNHEALTHY</code>-One or more essential containers have failed their health check.</p> </li> <li> <p> <code>UNKNOWN</code>-Any essential container running within the task is in an <code>UNKNOWN</code> state and no other essential containers have an <code>UNHEALTHY</code> state.</p> </li> <li> <p> <code>HEALTHY</code>-All essential containers within the task have passed their health checks.</p> </li> </ul> <p>Consider the following task health example with 2 containers.</p> <ul> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>HEALTHY</code>, the task health is <code>HEALTHY</code>.</p> </li> </ul> <p>Consider the following task health example with 3 containers.</p> <ul> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>UNKNOWN</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>HEALTHY</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>UNKNOWN</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>HEALTHY</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>HEALTHY</code>.</p> </li> </ul> <p>If a task is run manually, and not as part of a service, the task will continue its lifecycle regardless of its health status. For tasks that are part of a service, if the task reports as unhealthy then the task will be stopped and the service scheduler will replace it.</p> <p>The following are notes about container health check support:</p> <ul> <li> <p>If the Amazon ECS container agent becomes disconnected from the Amazon ECS service, this won't cause a container to transition to an <code>UNHEALTHY</code> status. This is by design, to ensure that containers remain running during agent restarts or temporary unavailability. The health check status is the \"last heard from\" response from the Amazon ECS agent, so if the container was considered <code>HEALTHY</code> prior to the disconnect, that status will remain until the agent reconnects and another health check occurs. There are no assumptions made about the status of the container health checks.</p> </li> <li> <p>Container health checks require version <code>1.17.0</code> or greater of the Amazon ECS container agent. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html\">Updating the Amazon ECS container agent</a>.</p> </li> <li> <p>Container health checks are supported for Fargate tasks if you're using platform version <code>1.1.0</code> or greater. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html\">Fargate platform versions</a>.</p> </li> <li> <p>Container health checks aren't supported for tasks that are part of a service that's configured to use a Classic Load Balancer.</p> </li> </ul>"
+      "documentation":"<p>An object representing a container health check. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image (such as those specified in a parent image or from the image's Dockerfile). This configuration maps to the <code>HEALTHCHECK</code> parameter of docker run.</p> <note> <p>The Amazon ECS container agent only monitors and reports on the health checks specified in the task definition. Amazon ECS does not monitor Docker health checks that are embedded in a container image and not specified in the container definition. Health check parameters that are specified in a container definition override any Docker health checks that exist in the container image.</p> </note> <p>You can view the health status of both individual containers and a task with the DescribeTasks API operation or when viewing the task details in the console.</p> <p>The health check is designed to make sure that your containers survive agent restarts, upgrades, or temporary unavailability.</p> <p>Amazon ECS performs health checks on containers with the default that launched the container instance or the task.</p> <p>The following describes the possible <code>healthStatus</code> values for a container:</p> <ul> <li> <p> <code>HEALTHY</code>-The container health check has passed successfully.</p> </li> <li> <p> <code>UNHEALTHY</code>-The container health check has failed.</p> </li> <li> <p> <code>UNKNOWN</code>-The container health check is being evaluated, there's no container health check defined, or Amazon ECS doesn't have the health status of the container.</p> </li> </ul> <p>The following describes the possible <code>healthStatus</code> values based on the container health checker status of essential containers in the task with the following priority order (high to low):</p> <ul> <li> <p> <code>UNHEALTHY</code>-One or more essential containers have failed their health check.</p> </li> <li> <p> <code>UNKNOWN</code>-Any essential container running within the task is in an <code>UNKNOWN</code> state and no other essential containers have an <code>UNHEALTHY</code> state.</p> </li> <li> <p> <code>HEALTHY</code>-All essential containers within the task have passed their health checks.</p> </li> </ul> <p>Consider the following task health example with 2 containers.</p> <ul> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>HEALTHY</code>, the task health is <code>HEALTHY</code>.</p> </li> </ul> <p>Consider the following task health example with 3 containers.</p> <ul> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>UNKNOWN</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>UNHEALTHY</code> and Container2 is <code>HEALTHY</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNHEALTHY</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>UNKNOWN</code>, and Container3 is <code>UNKNOWN</code>, the task health is <code>UNKNOWN</code>.</p> </li> <li> <p>If Container1 is <code>HEALTHY</code> and Container2 is <code>HEALTHY</code>, and Container3 is <code>HEALTHY</code>, the task health is <code>HEALTHY</code>.</p> </li> </ul> <p>If a task is run manually, and not as part of a service, the task will continue its lifecycle regardless of its health status. For tasks that are part of a service, if the task reports as unhealthy then the task will be stopped and the service scheduler will replace it.</p> <p>When a container health check fails for a task that is part of a service, the following process occurs:</p> <ol> <li> <p>The task is marked as <code>UNHEALTHY</code>.</p> </li> <li> <p>The unhealthy task will be stopped, and during the stopping process, it will go through the following states:</p> <ul> <li> <p> <code>DEACTIVATING</code> - In this state, Amazon ECS performs additional steps before stopping the task. For example, for tasks that are part of services configured to use Elastic Load Balancing target groups, target groups will be deregistered in this state.</p> </li> <li> <p> <code>STOPPING</code> - The task is in the process of being stopped.</p> </li> <li> <p> <code>DEPROVISIONING</code> - Resources associated with the task are being cleaned up.</p> </li> <li> <p> <code>STOPPED</code> - The task has been completely stopped.</p> </li> </ul> </li> <li> <p>After the old task stops, a new task will be launched to ensure service operation, and the new task will go through the following lifecycle:</p> <ul> <li> <p> <code>PROVISIONING</code> - Resources required for the task are being provisioned.</p> </li> <li> <p> <code>PENDING</code> - The task is waiting to be placed on a container instance.</p> </li> <li> <p> <code>ACTIVATING</code> - In this state, Amazon ECS pulls container images, creates containers, configures task networking, registers load balancer target groups, and configures service discovery status.</p> </li> <li> <p> <code>RUNNING</code> - The task is running and performing its work.</p> </li> </ul> </li> </ol> <p>For more detailed information about task lifecycle states, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-lifecycle-explanation.html\">Task lifecycle</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The following are notes about container health check support:</p> <ul> <li> <p>If the Amazon ECS container agent becomes disconnected from the Amazon ECS service, this won't cause a container to transition to an <code>UNHEALTHY</code> status. This is by design, to ensure that containers remain running during agent restarts or temporary unavailability. The health check status is the \"last heard from\" response from the Amazon ECS agent, so if the container was considered <code>HEALTHY</code> prior to the disconnect, that status will remain until the agent reconnects and another health check occurs. There are no assumptions made about the status of the container health checks.</p> </li> <li> <p>Container health checks require version <code>1.17.0</code> or greater of the Amazon ECS container agent. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html\">Updating the Amazon ECS container agent</a>.</p> </li> <li> <p>Container health checks are supported for Fargate tasks if you're using platform version <code>1.1.0</code> or greater. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html\">Fargate platform versions</a>.</p> </li> <li> <p>Container health checks aren't supported for tasks that are part of a service that's configured to use a Classic Load Balancer.</p> </li> </ul> <p>For an example of how to specify a task definition with multiple containers where container dependency is specified, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/example_task_definitions.html#example_task_definition-containerdependency\">Container dependency</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
     },
     "HealthStatus":{
       "type":"string",
@@ -3518,6 +3859,11 @@
         "UNKNOWN"
       ]
     },
+    "HookDetails":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
     "HostEntry":{
       "type":"structure",
       "required":[
@@ -3591,6 +3937,17 @@
       "type":"list",
       "member":{"shape":"InferenceAccelerator"}
     },
+    "InstanceGeneration":{
+      "type":"string",
+      "enum":[
+        "current",
+        "previous"
+      ]
+    },
+    "InstanceGenerationSet":{
+      "type":"list",
+      "member":{"shape":"InstanceGeneration"}
+    },
     "InstanceHealthCheckResult":{
       "type":"structure",
       "members":{
@@ -3630,6 +3987,168 @@
       "type":"string",
       "enum":["CONTAINER_RUNTIME"]
     },
+    "InstanceLaunchTemplate":{
+      "type":"structure",
+      "required":[
+        "ec2InstanceProfileArn",
+        "networkConfiguration"
+      ],
+      "members":{
+        "ec2InstanceProfileArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the instance profile that Amazon ECS applies to Amazon ECS Managed Instances. This instance profile must include the necessary permissions for your tasks to access Amazon Web Services services and resources.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-instance-profile.html\">Amazon ECS instance profile for Managed Instances</a> in the <i>Amazon ECS Developer Guide</i>. </p>"
+        },
+        "networkConfiguration":{
+          "shape":"ManagedInstancesNetworkConfiguration",
+          "documentation":"<p>The network configuration for Amazon ECS Managed Instances. This specifies the subnets and security groups that instances use for network connectivity.</p>"
+        },
+        "storageConfiguration":{
+          "shape":"ManagedInstancesStorageConfiguration",
+          "documentation":"<p>The storage configuration for Amazon ECS Managed Instances. This defines the root volume size and type for the instances.</p>"
+        },
+        "monitoring":{
+          "shape":"ManagedInstancesMonitoringOptions",
+          "documentation":"<p>CloudWatch provides two categories of monitoring: basic monitoring and detailed monitoring. By default, your managed instance is configured for basic monitoring. You can optionally enable detailed monitoring to help you more quickly identify and act on operational issues. You can enable or turn off detailed monitoring at launch or when the managed instance is running or stopped. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/detailed-monitoring-managed-instances.html\">Detailed monitoring for Amazon ECS Managed Instances</a> in the Amazon ECS Developer Guide.</p>"
+        },
+        "instanceRequirements":{
+          "shape":"InstanceRequirementsRequest",
+          "documentation":"<p>The instance requirements. You can specify:</p> <ul> <li> <p>The instance types</p> </li> <li> <p>Instance requirements such as vCPU count, memory, network performance, and accelerator specifications</p> </li> </ul> <p>Amazon ECS automatically selects the instances that match the specified criteria.</p>"
+        }
+      },
+      "documentation":"<p>The launch template configuration for Amazon ECS Managed Instances. This defines how Amazon ECS launches Amazon EC2 instances, including the instance profile for your tasks, network and storage configuration, capacity options, and instance requirements for flexible instance type selection.</p>"
+    },
+    "InstanceLaunchTemplateUpdate":{
+      "type":"structure",
+      "members":{
+        "ec2InstanceProfileArn":{
+          "shape":"String",
+          "documentation":"<p>The updated Amazon Resource Name (ARN) of the instance profile. The new instance profile must have the necessary permissions for your tasks.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-instance-profile.html\">Amazon ECS instance profile for Managed Instances</a> in the <i>Amazon ECS Developer Guide</i>. </p>"
+        },
+        "networkConfiguration":{
+          "shape":"ManagedInstancesNetworkConfiguration",
+          "documentation":"<p>The updated network configuration for Amazon ECS Managed Instances. Changes to subnets and security groups affect new instances launched after the update.</p>"
+        },
+        "storageConfiguration":{
+          "shape":"ManagedInstancesStorageConfiguration",
+          "documentation":"<p>The updated storage configuration for Amazon ECS Managed Instances. Changes to storage settings apply to new instances launched after the update.</p>"
+        },
+        "monitoring":{
+          "shape":"ManagedInstancesMonitoringOptions",
+          "documentation":"<p>CloudWatch provides two categories of monitoring: basic monitoring and detailed monitoring. By default, your managed instance is configured for basic monitoring. You can optionally enable detailed monitoring to help you more quickly identify and act on operational issues. You can enable or turn off detailed monitoring at launch or when the managed instance is running or stopped. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/detailed-monitoring-managed-instances.html\">Detailed monitoring for Amazon ECS Managed Instances</a> in the Amazon ECS Developer Guide.</p>"
+        },
+        "instanceRequirements":{
+          "shape":"InstanceRequirementsRequest",
+          "documentation":"<p>The updated instance requirements for attribute-based instance type selection. Changes to instance requirements affect which instance types Amazon ECS selects for new instances.</p>"
+        }
+      },
+      "documentation":"<p>The updated launch template configuration for Amazon ECS Managed Instances. You can modify the instance profile, network configuration, storage settings, and instance requirements. Changes apply to new instances launched after the update.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Store instance launch parameters in Amazon EC2 launch templates</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+    },
+    "InstanceRequirementsRequest":{
+      "type":"structure",
+      "required":[
+        "vCpuCount",
+        "memoryMiB"
+      ],
+      "members":{
+        "vCpuCount":{
+          "shape":"VCpuCountRangeRequest",
+          "documentation":"<p>The minimum and maximum number of vCPUs for the instance types. Amazon ECS selects instance types that have vCPU counts within this range.</p>"
+        },
+        "memoryMiB":{
+          "shape":"MemoryMiBRequest",
+          "documentation":"<p>The minimum and maximum amount of memory in mebibytes (MiB) for the instance types. Amazon ECS selects instance types that have memory within this range.</p>"
+        },
+        "cpuManufacturers":{
+          "shape":"CpuManufacturerSet",
+          "documentation":"<p>The CPU manufacturers to include or exclude. You can specify <code>intel</code>, <code>amd</code>, or <code>amazon-web-services</code> to control which CPU types are used for your workloads.</p>"
+        },
+        "memoryGiBPerVCpu":{
+          "shape":"MemoryGiBPerVCpuRequest",
+          "documentation":"<p>The minimum and maximum amount of memory per vCPU in gibibytes (GiB). This helps ensure that instance types have the appropriate memory-to-CPU ratio for your workloads.</p>"
+        },
+        "excludedInstanceTypes":{
+          "shape":"ExcludedInstanceTypeSet",
+          "documentation":"<p>The instance types to exclude from selection. Use this to prevent Amazon ECS from selecting specific instance types that may not be suitable for your workloads.</p>"
+        },
+        "instanceGenerations":{
+          "shape":"InstanceGenerationSet",
+          "documentation":"<p>The instance generations to include. You can specify <code>current</code> to use the latest generation instances, or <code>previous</code> to include previous generation instances for cost optimization.</p>"
+        },
+        "spotMaxPricePercentageOverLowestPrice":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum price for Spot instances as a percentage over the lowest priced On-Demand instance. This helps control Spot instance costs while maintaining access to capacity.</p>"
+        },
+        "onDemandMaxPricePercentageOverLowestPrice":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The price protection threshold for On-Demand Instances, as a percentage higher than an identified On-Demand price. The identified On-Demand price is the price of the lowest priced current generation C, M, or R instance type with your specified attributes. If no current generation C, M, or R instance type matches your attributes, then the identified price is from either the lowest priced current generation instance types or, failing that, the lowest priced previous generation instance types that match your attributes. When Amazon ECS selects instance types with your attributes, we will exclude instance types whose price exceeds your specified threshold.</p>"
+        },
+        "bareMetal":{
+          "shape":"BareMetal",
+          "documentation":"<p>Indicates whether to include bare metal instance types. Set to <code>included</code> to allow bare metal instances, <code>excluded</code> to exclude them, or <code>required</code> to use only bare metal instances.</p>"
+        },
+        "burstablePerformance":{
+          "shape":"BurstablePerformance",
+          "documentation":"<p>Indicates whether to include burstable performance instance types (T2, T3, T3a, T4g). Set to <code>included</code> to allow burstable instances, <code>excluded</code> to exclude them, or <code>required</code> to use only burstable instances.</p>"
+        },
+        "requireHibernateSupport":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Indicates whether the instance types must support hibernation. When set to <code>true</code>, only instance types that support hibernation are selected.</p>"
+        },
+        "networkInterfaceCount":{
+          "shape":"NetworkInterfaceCountRequest",
+          "documentation":"<p>The minimum and maximum number of network interfaces for the instance types. This is useful for workloads that require multiple network interfaces.</p>"
+        },
+        "localStorage":{
+          "shape":"LocalStorage",
+          "documentation":"<p>Indicates whether to include instance types with local storage. Set to <code>included</code> to allow local storage, <code>excluded</code> to exclude it, or <code>required</code> to use only instances with local storage.</p>"
+        },
+        "localStorageTypes":{
+          "shape":"LocalStorageTypeSet",
+          "documentation":"<p>The local storage types to include. You can specify <code>hdd</code> for hard disk drives, <code>ssd</code> for solid state drives, or both.</p>"
+        },
+        "totalLocalStorageGB":{
+          "shape":"TotalLocalStorageGBRequest",
+          "documentation":"<p>The minimum and maximum total local storage in gigabytes (GB) for instance types with local storage.</p>"
+        },
+        "baselineEbsBandwidthMbps":{
+          "shape":"BaselineEbsBandwidthMbpsRequest",
+          "documentation":"<p>The minimum and maximum baseline Amazon EBS bandwidth in megabits per second (Mbps). This is important for workloads with high storage I/O requirements.</p>"
+        },
+        "acceleratorTypes":{
+          "shape":"AcceleratorTypeSet",
+          "documentation":"<p>The accelerator types to include. You can specify <code>gpu</code> for graphics processing units, <code>fpga</code> for field programmable gate arrays, or <code>inference</code> for machine learning inference accelerators.</p>"
+        },
+        "acceleratorCount":{
+          "shape":"AcceleratorCountRequest",
+          "documentation":"<p>The minimum and maximum number of accelerators for the instance types. This is used when you need instances with specific numbers of GPUs or other accelerators.</p>"
+        },
+        "acceleratorManufacturers":{
+          "shape":"AcceleratorManufacturerSet",
+          "documentation":"<p>The accelerator manufacturers to include. You can specify <code>nvidia</code>, <code>amd</code>, <code>amazon-web-services</code>, or <code>xilinx</code> depending on your accelerator requirements.</p>"
+        },
+        "acceleratorNames":{
+          "shape":"AcceleratorNameSet",
+          "documentation":"<p>The specific accelerator names to include. For example, you can specify <code>a100</code>, <code>v100</code>, <code>k80</code>, or other specific accelerator models.</p>"
+        },
+        "acceleratorTotalMemoryMiB":{
+          "shape":"AcceleratorTotalMemoryMiBRequest",
+          "documentation":"<p>The minimum and maximum total accelerator memory in mebibytes (MiB). This is important for GPU workloads that require specific amounts of video memory.</p>"
+        },
+        "networkBandwidthGbps":{
+          "shape":"NetworkBandwidthGbpsRequest",
+          "documentation":"<p>The minimum and maximum network bandwidth in gigabits per second (Gbps). This is crucial for network-intensive workloads that require high throughput.</p>"
+        },
+        "allowedInstanceTypes":{
+          "shape":"AllowedInstanceTypeSet",
+          "documentation":"<p>The instance types to include in the selection. When specified, Amazon ECS only considers these instance types, subject to the other requirements specified.</p>"
+        },
+        "maxSpotPriceAsPercentageOfOptimalOnDemandPrice":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum price for Spot instances as a percentage of the optimal On-Demand price. This provides more precise cost control for Spot instance selection.</p>"
+        }
+      },
+      "documentation":"<p>The instance requirements for attribute-based instance type selection. Instead of specifying exact instance types, you define requirements such as vCPU count, memory size, network performance, and accelerator specifications. Amazon ECS automatically selects Amazon EC2 instance types that match these requirements, providing flexibility and helping to mitigate capacity constraints.</p>"
+    },
     "Integer":{"type":"integer"},
     "IntegerList":{
       "type":"list",
@@ -3637,9 +4156,8 @@
     },
     "InvalidParameterException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>The specified parameter isn't valid. Review the available parameters for the API request.</p>",
+      "members":{},
+      "documentation":"<p>The specified parameter isn't valid. Review the available parameters for the API request.</p> <p>For more information about service event errors, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-event-messages-list.html\">Amazon ECS service event messages</a>. </p>",
       "exception":true
     },
     "IpcMode":{
@@ -3662,7 +4180,7 @@
           "documentation":"<p>The Linux capabilities for the container that have been removed from the default configuration provided by Docker. This parameter maps to <code>CapDrop</code> in the docker container create command and the <code>--cap-drop</code> option to docker run.</p> <p>Valid values: <code>\"ALL\" | \"AUDIT_CONTROL\" | \"AUDIT_WRITE\" | \"BLOCK_SUSPEND\" | \"CHOWN\" | \"DAC_OVERRIDE\" | \"DAC_READ_SEARCH\" | \"FOWNER\" | \"FSETID\" | \"IPC_LOCK\" | \"IPC_OWNER\" | \"KILL\" | \"LEASE\" | \"LINUX_IMMUTABLE\" | \"MAC_ADMIN\" | \"MAC_OVERRIDE\" | \"MKNOD\" | \"NET_ADMIN\" | \"NET_BIND_SERVICE\" | \"NET_BROADCAST\" | \"NET_RAW\" | \"SETFCAP\" | \"SETGID\" | \"SETPCAP\" | \"SETUID\" | \"SYS_ADMIN\" | \"SYS_BOOT\" | \"SYS_CHROOT\" | \"SYS_MODULE\" | \"SYS_NICE\" | \"SYS_PACCT\" | \"SYS_PTRACE\" | \"SYS_RAWIO\" | \"SYS_RESOURCE\" | \"SYS_TIME\" | \"SYS_TTY_CONFIG\" | \"SYSLOG\" | \"WAKE_ALARM\"</code> </p>"
         }
       },
-      "documentation":"<p>The Linux capabilities to add or remove from the default Docker configuration for a container defined in the task definition. For more detailed information about these Linux capabilities, see the <a href=\"http://man7.org/linux/man-pages/man7/capabilities.7.html\">capabilities(7)</a> Linux manual page.</p>"
+      "documentation":"<p>The Linux capabilities to add or remove from the default Docker configuration for a container defined in the task definition. For more detailed information about these Linux capabilities, see the <a href=\"http://man7.org/linux/man-pages/man7/capabilities.7.html\">capabilities(7)</a> Linux manual page.</p> <p>The following describes how Docker processes the Linux capabilities specified in the <code>add</code> and <code>drop</code> request parameters. For information about the latest behavior, see <a href=\"https://forums.docker.com/t/docker-compose-order-of-cap-drop-and-cap-add/97136/1\">Docker Compose: order of cap_drop and cap_add</a> in the Docker Community Forum.</p> <ul> <li> <p>When the container is a privleged container, the container capabilities are all of the default Docker capabilities. The capabilities specified in the <code>add</code> request parameter, and the <code>drop</code> request parameter are ignored.</p> </li> <li> <p>When the <code>add</code> request parameter is set to ALL, the container capabilities are all of the default Docker capabilities, excluding those specified in the <code>drop</code> request parameter.</p> </li> <li> <p>When the <code>drop</code> request parameter is set to ALL, the container capabilities are the capabilities specified in the <code>add</code> request parameter.</p> </li> <li> <p>When the <code>add</code> request parameter and the <code>drop</code> request parameter are both empty, the capabilities the container capabilities are all of the default Docker capabilities.</p> </li> <li> <p>The default is to first drop the capabilities specified in the <code>drop</code> request parameter, and then add the capabilities specified in the <code>add</code> request parameter.</p> </li> </ul>"
     },
     "KeyValuePair":{
       "type":"structure",
@@ -3683,16 +4201,32 @@
       "enum":[
         "EC2",
         "FARGATE",
-        "EXTERNAL"
+        "EXTERNAL",
+        "MANAGED_INSTANCES"
       ]
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The limit for the resource was exceeded.</p>",
       "exception":true
     },
+    "LinearConfiguration":{
+      "type":"structure",
+      "members":{
+        "stepPercent":{
+          "shape":"Double",
+          "documentation":"<p>The percentage of production traffic to shift in each step during a linear deployment. Valid values are multiples of 0.1 from 3.0 to 100.0. The default value is 10.0.</p>",
+          "box":true
+        },
+        "stepBakeTimeInMinutes":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of time in minutes to wait between each traffic shifting step during a linear deployment. Valid values are 0 to 1440 minutes (24 hours). The default value is 6. This bake time is not applied after reaching 100 percent traffic.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Configuration for linear deployment strategy that shifts production traffic in equal percentage increments with configurable wait times between each step until 100% of traffic is shifted to the new service revision. This is only valid when you run <code>CreateService</code> or <code>UpdateService</code> with <code>deploymentController</code> set to <code>ECS</code> and a <code>deploymentConfiguration</code> with a strategy set to <code>LINEAR</code>. </p>"
+    },
     "LinuxParameters":{
       "type":"structure",
       "members":{
@@ -3740,7 +4274,7 @@
         },
         "principalArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the principal, which can be a user, role, or the root user. If this field is omitted, the account settings are listed only for the authenticated user.</p> <note> <p>Federated users assume the account setting of the root user and can't have explicit account settings set for them.</p> </note>"
+          "documentation":"<p>The ARN of the principal, which can be a user, role, or the root user. If this field is omitted, the account settings are listed only for the authenticated user.</p> <p>In order to use this parameter, you must be the root user, or the principal.</p> <note> <p>Federated users assume the account setting of the root user and can't have explicit account settings set for them.</p> </note>"
         },
         "effectiveSettings":{
           "shape":"Boolean",
@@ -3859,7 +4393,7 @@
         },
         "status":{
           "shape":"ContainerInstanceStatus",
-          "documentation":"<p>Filters the container instances by status. For example, if you specify the <code>DRAINING</code> status, the results include only container instances that have been set to <code>DRAINING</code> using <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerInstancesState.html\">UpdateContainerInstancesState</a>. If you don't specify this parameter, the default is to include container instances set to all states other than <code>INACTIVE</code>.</p>"
+          "documentation":"<p>Filters the container instances by status. For example, if you specify the <code>DRAINING</code> status, the results include only container instances that have been set to <code>DRAINING</code> using <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerInstancesState.html\">UpdateContainerInstancesState</a>. If you don't specify this parameter, the The default is to include container instances set to all states other than <code>INACTIVE</code>.</p>"
         }
       }
     },
@@ -4151,6 +4685,10 @@
         "containerPort":{
           "shape":"BoxedInteger",
           "documentation":"<p>The port on the container to associate with the load balancer. This port must correspond to a <code>containerPort</code> in the task definition the tasks in the service are using. For tasks that use the EC2 launch type, the container instance they're launched on must allow ingress traffic on the <code>hostPort</code> of the port mapping.</p>"
+        },
+        "advancedConfiguration":{
+          "shape":"AdvancedConfiguration",
+          "documentation":"<p>The advanced settings for the load balancer used in blue/green deployments. Specify the alternate target group, listener rules, and IAM role required for traffic shifting during blue/green deployments.</p>"
         }
       },
       "documentation":"<p>The load balancer configuration to use with a service or task set.</p> <p>When you add, update, or remove a load balancer configuration, Amazon ECS starts a new deployment with the updated Elastic Load Balancing configuration. This causes tasks to register to and deregister from load balancers.</p> <p>We recommend that you verify this on a test environment before you update the Elastic Load Balancing configuration. </p> <p>A service-linked role is required for services that use multiple target groups. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html\">Using service-linked roles</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
@@ -4159,6 +4697,25 @@
       "type":"list",
       "member":{"shape":"LoadBalancer"}
     },
+    "LocalStorage":{
+      "type":"string",
+      "enum":[
+        "included",
+        "required",
+        "excluded"
+      ]
+    },
+    "LocalStorageType":{
+      "type":"string",
+      "enum":[
+        "hdd",
+        "ssd"
+      ]
+    },
+    "LocalStorageTypeSet":{
+      "type":"list",
+      "member":{"shape":"LocalStorageType"}
+    },
     "LogConfiguration":{
       "type":"structure",
       "required":["logDriver"],
@@ -4169,7 +4726,7 @@
         },
         "options":{
           "shape":"LogConfigurationOptionsMap",
-          "documentation":"<p>The configuration options to send to the log driver.</p> <p>The options you can specify depend on the log driver. Some of the options you can specify when you use the <code>awslogs</code> log driver to route logs to Amazon CloudWatch include the following:</p> <dl> <dt>awslogs-create-group</dt> <dd> <p>Required: No</p> <p>Specify whether you want the log group to be created automatically. If this option isn't specified, it defaults to <code>false</code>.</p> <note> <p>Your IAM policy must include the <code>logs:CreateLogGroup</code> permission before you attempt to use <code>awslogs-create-group</code>.</p> </note> </dd> <dt>awslogs-region</dt> <dd> <p>Required: Yes</p> <p>Specify the Amazon Web Services Region that the <code>awslogs</code> log driver is to send your Docker logs to. You can choose to send all of your logs from clusters in different Regions to a single region in CloudWatch Logs. This is so that they're all visible in one location. Otherwise, you can separate them by Region for more granularity. Make sure that the specified log group exists in the Region that you specify with this option.</p> </dd> <dt>awslogs-group</dt> <dd> <p>Required: Yes</p> <p>Make sure to specify a log group that the <code>awslogs</code> log driver sends its log streams to.</p> </dd> <dt>awslogs-stream-prefix</dt> <dd> <p>Required: Yes, when using the Fargate launch type.Optional for the EC2 launch type, required for the Fargate launch type.</p> <p>Use the <code>awslogs-stream-prefix</code> option to associate a log stream with the specified prefix, the container name, and the ID of the Amazon ECS task that the container belongs to. If you specify a prefix with this option, then the log stream takes the format <code>prefix-name/container-name/ecs-task-id</code>.</p> <p>If you don't specify a prefix with this option, then the log stream is named after the container ID that's assigned by the Docker daemon on the container instance. Because it's difficult to trace logs back to the container that sent them with just the Docker container ID (which is only available on the container instance), we recommend that you specify a prefix with this option.</p> <p>For Amazon ECS services, you can use the service name as the prefix. Doing so, you can trace log streams to the service that the container belongs to, the name of the container that sent them, and the ID of the task that the container belongs to.</p> <p>You must specify a stream-prefix for your logs to have your logs appear in the Log pane when using the Amazon ECS console.</p> </dd> <dt>awslogs-datetime-format</dt> <dd> <p>Required: No</p> <p>This option defines a multiline start pattern in Python <code>strftime</code> format. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages.</p> <p>One example of a use case for using this format is for parsing output such as a stack dump, which might otherwise be logged in multiple entries. The correct pattern allows it to be captured in a single entry.</p> <p>For more information, see <a href=\"https://docs.docker.com/config/containers/logging/awslogs/#awslogs-datetime-format\">awslogs-datetime-format</a>.</p> <p>You cannot configure both the <code>awslogs-datetime-format</code> and <code>awslogs-multiline-pattern</code> options.</p> <note> <p>Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance.</p> </note> </dd> <dt>awslogs-multiline-pattern</dt> <dd> <p>Required: No</p> <p>This option defines a multiline start pattern that uses a regular expression. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages.</p> <p>For more information, see <a href=\"https://docs.docker.com/config/containers/logging/awslogs/#awslogs-multiline-pattern\">awslogs-multiline-pattern</a>.</p> <p>This option is ignored if <code>awslogs-datetime-format</code> is also configured.</p> <p>You cannot configure both the <code>awslogs-datetime-format</code> and <code>awslogs-multiline-pattern</code> options.</p> <note> <p>Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance.</p> </note> </dd> <dt>mode</dt> <dd> <p>Required: No</p> <p>Valid values: <code>non-blocking</code> | <code>blocking</code> </p> <p>This option defines the delivery mode of log messages from the container to CloudWatch Logs. The delivery mode you choose affects application availability when the flow of logs from container to CloudWatch is interrupted.</p> <p>If you use the <code>blocking</code> mode and the flow of logs to CloudWatch is interrupted, calls from container code to write to the <code>stdout</code> and <code>stderr</code> streams will block. The logging thread of the application will block as a result. This may cause the application to become unresponsive and lead to container healthcheck failure. </p> <p>If you use the <code>non-blocking</code> mode, the container's logs are instead stored in an in-memory intermediate buffer configured with the <code>max-buffer-size</code> option. This prevents the application from becoming unresponsive when logs cannot be sent to CloudWatch. We recommend using this mode if you want to ensure service availability and are okay with some log loss. For more information, see <a href=\"http://aws.amazon.com/blogs/containers/preventing-log-loss-with-non-blocking-mode-in-the-awslogs-container-log-driver/\">Preventing log loss with non-blocking mode in the <code>awslogs</code> container log driver</a>.</p> </dd> <dt>max-buffer-size</dt> <dd> <p>Required: No</p> <p>Default value: <code>1m</code> </p> <p>When <code>non-blocking</code> mode is used, the <code>max-buffer-size</code> log option controls the size of the buffer that's used for intermediate message storage. Make sure to specify an adequate buffer size based on your application. When the buffer fills up, further logs cannot be stored. Logs that cannot be stored are lost. </p> </dd> </dl> <p>To route logs using the <code>splunk</code> log router, you need to specify a <code>splunk-token</code> and a <code>splunk-url</code>.</p> <p>When you use the <code>awsfirelens</code> log router to route logs to an Amazon Web Services Service or Amazon Web Services Partner Network destination for log storage and analytics, you can set the <code>log-driver-buffer-limit</code> option to limit the number of events that are buffered in memory, before being sent to the log router container. It can help to resolve potential log loss issue because high throughput might result in memory running out for the buffer inside of Docker.</p> <p>Other options you can specify when using <code>awsfirelens</code> to route logs depend on the destination. When you export logs to Amazon Data Firehose, you can specify the Amazon Web Services Region with <code>region</code> and a name for the log stream with <code>delivery_stream</code>.</p> <p>When you export logs to Amazon Kinesis Data Streams, you can specify an Amazon Web Services Region with <code>region</code> and a data stream name with <code>stream</code>.</p> <p> When you export logs to Amazon OpenSearch Service, you can specify options like <code>Name</code>, <code>Host</code> (OpenSearch Service endpoint without protocol), <code>Port</code>, <code>Index</code>, <code>Type</code>, <code>Aws_auth</code>, <code>Aws_region</code>, <code>Suppress_Type_Name</code>, and <code>tls</code>. For more information, see <a href=\"http://aws.amazon.com/blogs/containers/under-the-hood-firelens-for-amazon-ecs-tasks/\">Under the hood: FireLens for Amazon ECS Tasks</a>.</p> <p>When you export logs to Amazon S3, you can specify the bucket using the <code>bucket</code> option. You can also specify <code>region</code>, <code>total_file_size</code>, <code>upload_timeout</code>, and <code>use_put_object</code> as options.</p> <p>This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: <code>sudo docker version --format '{{.Server.APIVersion}}'</code> </p>"
+          "documentation":"<p>The configuration options to send to the log driver.</p> <p>The options you can specify depend on the log driver. Some of the options you can specify when you use the <code>awslogs</code> log driver to route logs to Amazon CloudWatch include the following:</p> <dl> <dt>awslogs-create-group</dt> <dd> <p>Required: No</p> <p>Specify whether you want the log group to be created automatically. If this option isn't specified, it defaults to <code>false</code>.</p> <note> <p>Your IAM policy must include the <code>logs:CreateLogGroup</code> permission before you attempt to use <code>awslogs-create-group</code>.</p> </note> </dd> <dt>awslogs-region</dt> <dd> <p>Required: Yes</p> <p>Specify the Amazon Web Services Region that the <code>awslogs</code> log driver is to send your Docker logs to. You can choose to send all of your logs from clusters in different Regions to a single region in CloudWatch Logs. This is so that they're all visible in one location. Otherwise, you can separate them by Region for more granularity. Make sure that the specified log group exists in the Region that you specify with this option.</p> </dd> <dt>awslogs-group</dt> <dd> <p>Required: Yes</p> <p>Make sure to specify a log group that the <code>awslogs</code> log driver sends its log streams to.</p> </dd> <dt>awslogs-stream-prefix</dt> <dd> <p>Required: Yes, when using Fargate.Optional when using EC2.</p> <p>Use the <code>awslogs-stream-prefix</code> option to associate a log stream with the specified prefix, the container name, and the ID of the Amazon ECS task that the container belongs to. If you specify a prefix with this option, then the log stream takes the format <code>prefix-name/container-name/ecs-task-id</code>.</p> <p>If you don't specify a prefix with this option, then the log stream is named after the container ID that's assigned by the Docker daemon on the container instance. Because it's difficult to trace logs back to the container that sent them with just the Docker container ID (which is only available on the container instance), we recommend that you specify a prefix with this option.</p> <p>For Amazon ECS services, you can use the service name as the prefix. Doing so, you can trace log streams to the service that the container belongs to, the name of the container that sent them, and the ID of the task that the container belongs to.</p> <p>You must specify a stream-prefix for your logs to have your logs appear in the Log pane when using the Amazon ECS console.</p> </dd> <dt>awslogs-datetime-format</dt> <dd> <p>Required: No</p> <p>This option defines a multiline start pattern in Python <code>strftime</code> format. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages.</p> <p>One example of a use case for using this format is for parsing output such as a stack dump, which might otherwise be logged in multiple entries. The correct pattern allows it to be captured in a single entry.</p> <p>For more information, see <a href=\"https://docs.docker.com/config/containers/logging/awslogs/#awslogs-datetime-format\">awslogs-datetime-format</a>.</p> <p>You cannot configure both the <code>awslogs-datetime-format</code> and <code>awslogs-multiline-pattern</code> options.</p> <note> <p>Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance.</p> </note> </dd> <dt>awslogs-multiline-pattern</dt> <dd> <p>Required: No</p> <p>This option defines a multiline start pattern that uses a regular expression. A log message consists of a line that matches the pattern and any following lines that don’t match the pattern. The matched line is the delimiter between log messages.</p> <p>For more information, see <a href=\"https://docs.docker.com/config/containers/logging/awslogs/#awslogs-multiline-pattern\">awslogs-multiline-pattern</a>.</p> <p>This option is ignored if <code>awslogs-datetime-format</code> is also configured.</p> <p>You cannot configure both the <code>awslogs-datetime-format</code> and <code>awslogs-multiline-pattern</code> options.</p> <note> <p>Multiline logging performs regular expression parsing and matching of all log messages. This might have a negative impact on logging performance.</p> </note> </dd> </dl> <p>The following options apply to all supported log drivers.</p> <dl> <dt>mode</dt> <dd> <p>Required: No</p> <p>Valid values: <code>non-blocking</code> | <code>blocking</code> </p> <p>This option defines the delivery mode of log messages from the container to the log driver specified using <code>logDriver</code>. The delivery mode you choose affects application availability when the flow of logs from container is interrupted.</p> <p>If you use the <code>blocking</code> mode and the flow of logs is interrupted, calls from container code to write to the <code>stdout</code> and <code>stderr</code> streams will block. The logging thread of the application will block as a result. This may cause the application to become unresponsive and lead to container healthcheck failure. </p> <p>If you use the <code>non-blocking</code> mode, the container's logs are instead stored in an in-memory intermediate buffer configured with the <code>max-buffer-size</code> option. This prevents the application from becoming unresponsive when logs cannot be sent. We recommend using this mode if you want to ensure service availability and are okay with some log loss. For more information, see <a href=\"http://aws.amazon.com/blogs/containers/preventing-log-loss-with-non-blocking-mode-in-the-awslogs-container-log-driver/\">Preventing log loss with non-blocking mode in the <code>awslogs</code> container log driver</a>.</p> <p>You can set a default <code>mode</code> for all containers in a specific Amazon Web Services Region by using the <code>defaultLogDriverMode</code> account setting. If you don't specify the <code>mode</code> option or configure the account setting, Amazon ECS will default to the <code>non-blocking</code> mode. For more information about the account setting, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#default-log-driver-mode\">Default log driver mode</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <note> <p>On June 25, 2025, Amazon ECS changed the default log driver mode from <code>blocking</code> to <code>non-blocking</code> to prioritize task availability over logging. To continue using the <code>blocking</code> mode after this change, do one of the following:</p> <ul> <li> <p>Set the <code>mode</code> option in your container definition's <code>logConfiguration</code> as <code>blocking</code>.</p> </li> <li> <p>Set the <code>defaultLogDriverMode</code> account setting to <code>blocking</code>.</p> </li> </ul> </note> </dd> <dt>max-buffer-size</dt> <dd> <p>Required: No</p> <p>Default value: <code>10m</code> </p> <p>When <code>non-blocking</code> mode is used, the <code>max-buffer-size</code> log option controls the size of the buffer that's used for intermediate message storage. Make sure to specify an adequate buffer size based on your application. When the buffer fills up, further logs cannot be stored. Logs that cannot be stored are lost. </p> </dd> </dl> <p>To route logs using the <code>splunk</code> log router, you need to specify a <code>splunk-token</code> and a <code>splunk-url</code>.</p> <p>When you use the <code>awsfirelens</code> log router to route logs to an Amazon Web Services Service or Amazon Web Services Partner Network destination for log storage and analytics, you can set the <code>log-driver-buffer-limit</code> option to limit the number of events that are buffered in memory, before being sent to the log router container. It can help to resolve potential log loss issue because high throughput might result in memory running out for the buffer inside of Docker.</p> <p>Other options you can specify when using <code>awsfirelens</code> to route logs depend on the destination. When you export logs to Amazon Data Firehose, you can specify the Amazon Web Services Region with <code>region</code> and a name for the log stream with <code>delivery_stream</code>.</p> <p>When you export logs to Amazon Kinesis Data Streams, you can specify an Amazon Web Services Region with <code>region</code> and a data stream name with <code>stream</code>.</p> <p> When you export logs to Amazon OpenSearch Service, you can specify options like <code>Name</code>, <code>Host</code> (OpenSearch Service endpoint without protocol), <code>Port</code>, <code>Index</code>, <code>Type</code>, <code>Aws_auth</code>, <code>Aws_region</code>, <code>Suppress_Type_Name</code>, and <code>tls</code>. For more information, see <a href=\"http://aws.amazon.com/blogs/containers/under-the-hood-firelens-for-amazon-ecs-tasks/\">Under the hood: FireLens for Amazon ECS Tasks</a>.</p> <p>When you export logs to Amazon S3, you can specify the bucket using the <code>bucket</code> option. You can also specify <code>region</code>, <code>total_file_size</code>, <code>upload_timeout</code>, and <code>use_put_object</code> as options.</p> <p>This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: <code>sudo docker version --format '{{.Server.APIVersion}}'</code> </p>"
         },
         "secretOptions":{
           "shape":"SecretList",
@@ -4265,6 +4822,55 @@
         "DISABLED"
       ]
     },
+    "ManagedInstancesMonitoringOptions":{
+      "type":"string",
+      "enum":[
+        "BASIC",
+        "DETAILED"
+      ]
+    },
+    "ManagedInstancesNetworkConfiguration":{
+      "type":"structure",
+      "members":{
+        "subnets":{
+          "shape":"StringList",
+          "documentation":"<p>The list of subnet IDs where Amazon ECS can launch Amazon ECS Managed Instances. Instances are distributed across the specified subnets for high availability. All subnets must be in the same VPC.</p>"
+        },
+        "securityGroups":{
+          "shape":"StringList",
+          "documentation":"<p>The list of security group IDs to apply to Amazon ECS Managed Instances. These security groups control the network traffic allowed to and from the instances.</p>"
+        }
+      },
+      "documentation":"<p>The network configuration for Amazon ECS Managed Instances. This specifies the VPC subnets and security groups that instances use for network connectivity. Amazon ECS Managed Instances support multiple network modes including <code>awsvpc</code> (instances receive ENIs for task isolation), <code>host</code> (instances share network namespace with tasks), and <code>none</code> (no external network connectivity), ensuring backward compatibility for migrating workloads from Fargate or Amazon EC2.</p>"
+    },
+    "ManagedInstancesProvider":{
+      "type":"structure",
+      "members":{
+        "infrastructureRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the infrastructure role that Amazon ECS assumes to manage instances. This role must include permissions for Amazon EC2 instance lifecycle management, networking, and any additional Amazon Web Services services required for your workloads.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html\">Amazon ECS infrastructure IAM role</a> in the <i>Amazon ECS Developer Guide</i>.</p>"
+        },
+        "instanceLaunchTemplate":{
+          "shape":"InstanceLaunchTemplate",
+          "documentation":"<p>The launch template that defines how Amazon ECS launches Amazon ECS Managed Instances. This includes the instance profile for your tasks, network and storage configuration, and instance requirements that determine which Amazon EC2 instance types can be used.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Store instance launch parameters in Amazon EC2 launch templates</a> in the <i>Amazon EC2 User Guide</i>.</p>"
+        },
+        "propagateTags":{
+          "shape":"PropagateMITags",
+          "documentation":"<p>Determines whether tags from the capacity provider are automatically applied to Amazon ECS Managed Instances. This helps with cost allocation and resource management by ensuring consistent tagging across your infrastructure.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a Amazon ECS Managed Instances provider. Amazon ECS uses this configuration to automatically launch, manage, and terminate Amazon EC2 instances on your behalf. Managed instances provide access to the full range of Amazon EC2 instance types and features while offloading infrastructure management to Amazon Web Services.</p>"
+    },
+    "ManagedInstancesStorageConfiguration":{
+      "type":"structure",
+      "members":{
+        "storageSizeGiB":{
+          "shape":"TaskVolumeStorageGiB",
+          "documentation":"<p>The size of the tasks volume.</p>"
+        }
+      },
+      "documentation":"<p>The storage configuration for Amazon ECS Managed Instances. This defines the root volume configuration for the instances.</p>"
+    },
     "ManagedScaling":{
       "type":"structure",
       "members":{
@@ -4278,7 +4884,7 @@
         },
         "minimumScalingStepSize":{
           "shape":"ManagedScalingStepSize",
-          "documentation":"<p>The minimum number of Amazon EC2 instances that Amazon ECS will scale out at one time. The scale in process is not affected by this parameter If this parameter is omitted, the default value of <code>1</code> is used.</p> <p>When additional capacity is required, Amazon ECS will scale up the minimum scaling step size even if the actual demand is less than the minimum scaling step size.</p> <p>If you use a capacity provider with an Auto Scaling group configured with more than one Amazon EC2 instance type or Availability Zone, Amazon ECS will scale up by the exact minimum scaling step size value and will ignore both the maximum scaling step size as well as the capacity demand.</p>"
+          "documentation":"<p>The minimum number of Amazon EC2 instances that Amazon ECS will scale out at one time. The scale in process is not affected by this parameter If this parameter is omitted, the default value of <code>1</code> is used.</p> <p>When additional capacity is required, Amazon ECS will scale up the minimum scaling step size even if the actual demand is less than the minimum scaling step size.</p>"
         },
         "maximumScalingStepSize":{
           "shape":"ManagedScalingStepSize",
@@ -4318,11 +4924,11 @@
       "members":{
         "kmsKeyId":{
           "shape":"String",
-          "documentation":"<p>Specify a Key Management Service key ID to encrypt the managed storage.</p>"
+          "documentation":"<p>Specify a Key Management Service key ID to encrypt Amazon ECS managed storage.</p> <p> When you specify a <code>kmsKeyId</code>, Amazon ECS uses the key to encrypt data volumes managed by Amazon ECS that are attached to tasks in the cluster. The following data volumes are managed by Amazon ECS: Amazon EBS. For more information about encryption of Amazon EBS volumes attached to Amazon ECS tasks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-kms-encryption.html\">Encrypt data stored in Amazon EBS volumes for Amazon ECS</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The key must be a single Region key.</p>"
         },
         "fargateEphemeralStorageKmsKeyId":{
           "shape":"String",
-          "documentation":"<p>Specify the Key Management Service key ID for the Fargate ephemeral storage.</p>"
+          "documentation":"<p>Specify the Key Management Service key ID for Fargate ephemeral storage.</p> <p>When you specify a <code>fargateEphemeralStorageKmsKeyId</code>, Amazon Web Services Fargate uses the key to encrypt data at rest in ephemeral storage. For more information about Fargate ephemeral storage encryption, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-storage-encryption.html\">Customer managed keys for Amazon Web Services Fargate ephemeral storage for Amazon ECS</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The key must be a single Region key.</p>"
         }
       },
       "documentation":"<p>The managed storage configuration for the cluster.</p>"
@@ -4334,10 +4940,38 @@
         "DISABLED"
       ]
     },
-    "MissingVersionException":{
+    "MemoryGiBPerVCpuRequest":{
       "type":"structure",
       "members":{
+        "min":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The minimum amount of memory per vCPU in GiB. Instance types with a lower memory-to-vCPU ratio are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The maximum amount of memory per vCPU in GiB. Instance types with a higher memory-to-vCPU ratio are excluded from selection.</p>"
+        }
       },
+      "documentation":"<p>The minimum and maximum amount of memory per vCPU in gibibytes (GiB). This helps ensure that instance types have the appropriate memory-to-CPU ratio for your workloads.</p>"
+    },
+    "MemoryMiBRequest":{
+      "type":"structure",
+      "required":["min"],
+      "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum amount of memory in MiB. Instance types with less memory than this value are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum amount of memory in MiB. Instance types with more memory than this value are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum amount of memory in mebibytes (MiB) for instance type selection. This ensures that selected instance types have adequate memory for your workloads.</p>"
+    },
+    "MissingVersionException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>Amazon ECS can't determine the current version of the Amazon ECS container agent on the container instance and doesn't have enough information to proceed with an update. This could be because the agent running on the container instance is a previous or custom version that doesn't use our version information.</p>",
       "exception":true
     },
@@ -4365,11 +4999,24 @@
     },
     "NamespaceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified namespace wasn't found.</p>",
       "exception":true
     },
+    "NetworkBandwidthGbpsRequest":{
+      "type":"structure",
+      "members":{
+        "min":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The minimum network bandwidth in Gbps. Instance types with lower network bandwidth are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The maximum network bandwidth in Gbps. Instance types with higher network bandwidth are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum network bandwidth in gigabits per second (Gbps) for instance type selection. This is important for network-intensive workloads.</p>"
+    },
     "NetworkBinding":{
       "type":"structure",
       "members":{
@@ -4432,6 +5079,20 @@
       },
       "documentation":"<p>An object representing the elastic network interface for tasks that use the <code>awsvpc</code> network mode.</p>"
     },
+    "NetworkInterfaceCountRequest":{
+      "type":"structure",
+      "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum number of network interfaces. Instance types that support fewer network interfaces are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum number of network interfaces. Instance types that support more network interfaces are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum number of network interfaces for instance type selection. This is useful for workloads that require multiple network interfaces.</p>"
+    },
     "NetworkInterfaces":{
       "type":"list",
       "member":{"shape":"NetworkInterface"}
@@ -4447,8 +5108,7 @@
     },
     "NoUpdateAvailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There's no update available for this Amazon ECS container agent. This might be because the agent is already running the latest version or because it's so old that there's no update path to the current version.</p>",
       "exception":true
     },
@@ -4461,6 +5121,8 @@
         "WINDOWS_SERVER_2004_CORE",
         "WINDOWS_SERVER_2022_CORE",
         "WINDOWS_SERVER_2022_FULL",
+        "WINDOWS_SERVER_2025_CORE",
+        "WINDOWS_SERVER_2025_FULL",
         "WINDOWS_SERVER_20H2_CORE",
         "LINUX"
       ]
@@ -4551,15 +5213,13 @@
     },
     "PlatformTaskDefinitionIncompatibilityException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified platform version doesn't satisfy the required capabilities of the task definition.</p>",
       "exception":true
     },
     "PlatformUnknownException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified platform version doesn't exist.</p>",
       "exception":true
     },
@@ -4603,6 +5263,13 @@
       "max":65535,
       "min":0
     },
+    "PropagateMITags":{
+      "type":"string",
+      "enum":[
+        "CAPACITY_PROVIDER",
+        "NONE"
+      ]
+    },
     "PropagateTags":{
       "type":"string",
       "enum":[
@@ -4669,7 +5336,7 @@
       "members":{
         "name":{
           "shape":"SettingName",
-          "documentation":"<p>The resource name for which to modify the account setting.</p> <p>The following are the valid values for the account setting name.</p> <ul> <li> <p> <code>serviceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>taskLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>containerInstanceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>awsvpcTrunking</code> - When modified, the elastic network interface (ENI) limit for any new container instances that support the feature is changed. If <code>awsvpcTrunking</code> is turned on, any new container instances that support the feature are launched have the increased ENI limits available to them. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-eni.html\">Elastic Network Interface Trunking</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>containerInsights</code> - Container Insights with enhanced observability provides all the Container Insights metrics, plus additional task and container metrics. This version supports enhanced observability for Amazon ECS clusters using the Amazon EC2 and Fargate launch types. After you configure Container Insights with enhanced observability on Amazon ECS, Container Insights auto-collects detailed infrastructure telemetry from the cluster level down to the container level in your environment and displays these critical performance data in curated dashboards removing the heavy lifting in observability set-up. </p> <p>To use Container Insights with enhanced observability, set the <code>containerInsights</code> account setting to <code>enhanced</code>.</p> <p>To use Container Insights, set the <code>containerInsights</code> account setting to <code>enabled</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-container-insights.html\">Monitor Amazon ECS containers using Container Insights with enhanced observability</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>dualStackIPv6</code> - When turned on, when using a VPC in dual stack mode, your tasks using the <code>awsvpc</code> network mode can have an IPv6 address assigned. For more information on using IPv6 with tasks launched on Amazon EC2 instances, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html#task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>. For more information on using IPv6 with tasks launched on Fargate, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html#fargate-task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>.</p> </li> <li> <p> <code>fargateFIPSMode</code> - If you specify <code>fargateFIPSMode</code>, Fargate FIPS 140 compliance is affected.</p> </li> <li> <p> <code>fargateTaskRetirementWaitPeriod</code> - When Amazon Web Services determines that a security or infrastructure update is needed for an Amazon ECS task hosted on Fargate, the tasks need to be stopped and new tasks launched to replace them. Use <code>fargateTaskRetirementWaitPeriod</code> to configure the wait time to retire a Fargate task. For information about the Fargate tasks maintenance, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html\">Amazon Web Services Fargate task maintenance</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>tagResourceAuthorization</code> - Amazon ECS is introducing tagging authorization for resource creation. Users must have permissions for actions that create the resource, such as <code>ecsCreateCluster</code>. If tags are specified when you create a resource, Amazon Web Services performs additional authorization to verify if users or roles have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>ecs:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/supported-iam-actions-tagging.html\">Grant permission to tag resources on creation</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>guardDutyActivate</code> - The <code>guardDutyActivate</code> parameter is read-only in Amazon ECS and indicates whether Amazon ECS Runtime Monitoring is enabled or disabled by your security administrator in your Amazon ECS account. Amazon GuardDuty controls this account setting on your behalf. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html\">Protecting Amazon ECS workloads with Amazon ECS Runtime Monitoring</a>.</p> </li> </ul>"
+          "documentation":"<p>The resource name for which to modify the account setting.</p> <p>The following are the valid values for the account setting name.</p> <ul> <li> <p> <code>serviceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>taskLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>containerInstanceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>awsvpcTrunking</code> - When modified, the elastic network interface (ENI) limit for any new container instances that support the feature is changed. If <code>awsvpcTrunking</code> is turned on, any new container instances that support the feature are launched have the increased ENI limits available to them. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-eni.html\">Elastic Network Interface Trunking</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>containerInsights</code> - Container Insights with enhanced observability provides all the Container Insights metrics, plus additional task and container metrics. This version supports enhanced observability for Amazon ECS clusters using the Amazon EC2 and Fargate launch types. After you configure Container Insights with enhanced observability on Amazon ECS, Container Insights auto-collects detailed infrastructure telemetry from the cluster level down to the container level in your environment and displays these critical performance data in curated dashboards removing the heavy lifting in observability set-up. </p> <p>To use Container Insights with enhanced observability, set the <code>containerInsights</code> account setting to <code>enhanced</code>.</p> <p>To use Container Insights, set the <code>containerInsights</code> account setting to <code>enabled</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-container-insights.html\">Monitor Amazon ECS containers using Container Insights with enhanced observability</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>dualStackIPv6</code> - When turned on, when using a VPC in dual stack mode, your tasks using the <code>awsvpc</code> network mode can have an IPv6 address assigned. For more information on using IPv6 with tasks launched on Amazon EC2 instances, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html#task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>. For more information on using IPv6 with tasks launched on Fargate, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html#fargate-task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>.</p> </li> <li> <p> <code>fargateFIPSMode</code> - If you specify <code>fargateFIPSMode</code>, Fargate FIPS 140 compliance is affected.</p> </li> <li> <p> <code>fargateTaskRetirementWaitPeriod</code> - When Amazon Web Services determines that a security or infrastructure update is needed for an Amazon ECS task hosted on Fargate, the tasks need to be stopped and new tasks launched to replace them. Use <code>fargateTaskRetirementWaitPeriod</code> to configure the wait time to retire a Fargate task. For information about the Fargate tasks maintenance, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html\">Amazon Web Services Fargate task maintenance</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>tagResourceAuthorization</code> - Amazon ECS is introducing tagging authorization for resource creation. Users must have permissions for actions that create the resource, such as <code>ecsCreateCluster</code>. If tags are specified when you create a resource, Amazon Web Services performs additional authorization to verify if users or roles have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>ecs:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/supported-iam-actions-tagging.html\">Grant permission to tag resources on creation</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>defaultLogDriverMode</code> -Amazon ECS supports setting a default delivery mode of log messages from a container to the <code>logDriver</code> that you specify in the container's <code>logConfiguration</code>. The delivery mode affects application stability when the flow of logs from the container to the log driver is interrupted. The <code>defaultLogDriverMode</code> setting supports two values: <code>blocking</code> and <code>non-blocking</code>. If you don't specify a delivery mode in your container definition's <code>logConfiguration</code>, the mode you specify using this account setting will be used as the default. For more information about log delivery modes, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_LogConfiguration.html\">LogConfiguration</a>.</p> <note> <p>On June 25, 2025, Amazon ECS changed the default log driver mode from <code>blocking</code> to <code>non-blocking</code> to prioritize task availability over logging. To continue using the <code>blocking</code> mode after this change, do one of the following:</p> <ul> <li> <p>Set the <code>mode</code> option in your container definition's <code>logConfiguration</code> as <code>blocking</code>.</p> </li> <li> <p>Set the <code>defaultLogDriverMode</code> account setting to <code>blocking</code>.</p> </li> </ul> </note> </li> <li> <p> <code>guardDutyActivate</code> - The <code>guardDutyActivate</code> parameter is read-only in Amazon ECS and indicates whether Amazon ECS Runtime Monitoring is enabled or disabled by your security administrator in your Amazon ECS account. Amazon GuardDuty controls this account setting on your behalf. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html\">Protecting Amazon ECS workloads with Amazon ECS Runtime Monitoring</a>.</p> </li> </ul>"
         },
         "value":{
           "shape":"String",
@@ -4695,7 +5362,7 @@
       "members":{
         "name":{
           "shape":"SettingName",
-          "documentation":"<p>The Amazon ECS account setting name to modify.</p> <p>The following are the valid values for the account setting name.</p> <ul> <li> <p> <code>serviceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>taskLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>fargateFIPSMode</code> - When turned on, you can run Fargate workloads in a manner that is compliant with Federal Information Processing Standard (FIPS-140). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-fips-compliance.html\">Fargate Federal Information Processing Standard (FIPS-140)</a>.</p> </li> <li> <p> <code>containerInstanceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>awsvpcTrunking</code> - When modified, the elastic network interface (ENI) limit for any new container instances that support the feature is changed. If <code>awsvpcTrunking</code> is turned on, any new container instances that support the feature are launched have the increased ENI limits available to them. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-eni.html\">Elastic Network Interface Trunking</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>containerInsights</code> - Container Insights with enhanced observability provides all the Container Insights metrics, plus additional task and container metrics. This version supports enhanced observability for Amazon ECS clusters using the Amazon EC2 and Fargate launch types. After you configure Container Insights with enhanced observability on Amazon ECS, Container Insights auto-collects detailed infrastructure telemetry from the cluster level down to the container level in your environment and displays these critical performance data in curated dashboards removing the heavy lifting in observability set-up. </p> <p>To use Container Insights with enhanced observability, set the <code>containerInsights</code> account setting to <code>enhanced</code>.</p> <p>To use Container Insights, set the <code>containerInsights</code> account setting to <code>enabled</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-container-insights.html\">Monitor Amazon ECS containers using Container Insights with enhanced observability</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>dualStackIPv6</code> - When turned on, when using a VPC in dual stack mode, your tasks using the <code>awsvpc</code> network mode can have an IPv6 address assigned. For more information on using IPv6 with tasks launched on Amazon EC2 instances, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html#task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>. For more information on using IPv6 with tasks launched on Fargate, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html#fargate-task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>.</p> </li> <li> <p> <code>fargateTaskRetirementWaitPeriod</code> - When Amazon Web Services determines that a security or infrastructure update is needed for an Amazon ECS task hosted on Fargate, the tasks need to be stopped and new tasks launched to replace them. Use <code>fargateTaskRetirementWaitPeriod</code> to configure the wait time to retire a Fargate task. For information about the Fargate tasks maintenance, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html\">Amazon Web Services Fargate task maintenance</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>tagResourceAuthorization</code> - Amazon ECS is introducing tagging authorization for resource creation. Users must have permissions for actions that create the resource, such as <code>ecsCreateCluster</code>. If tags are specified when you create a resource, Amazon Web Services performs additional authorization to verify if users or roles have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>ecs:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/supported-iam-actions-tagging.html\">Grant permission to tag resources on creation</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>guardDutyActivate</code> - The <code>guardDutyActivate</code> parameter is read-only in Amazon ECS and indicates whether Amazon ECS Runtime Monitoring is enabled or disabled by your security administrator in your Amazon ECS account. Amazon GuardDuty controls this account setting on your behalf. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html\">Protecting Amazon ECS workloads with Amazon ECS Runtime Monitoring</a>.</p> </li> </ul>"
+          "documentation":"<p>The Amazon ECS account setting name to modify.</p> <p>The following are the valid values for the account setting name.</p> <ul> <li> <p> <code>serviceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>taskLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>containerInstanceLongArnFormat</code> - When modified, the Amazon Resource Name (ARN) and resource ID format of the resource type for a specified user, role, or the root user for an account is affected. The opt-in and opt-out account setting must be set for each Amazon ECS resource separately. The ARN and resource ID format of a resource is defined by the opt-in status of the user or role that created the resource. You must turn on this setting to use Amazon ECS features such as resource tagging.</p> </li> <li> <p> <code>awsvpcTrunking</code> - When modified, the elastic network interface (ENI) limit for any new container instances that support the feature is changed. If <code>awsvpcTrunking</code> is turned on, any new container instances that support the feature are launched have the increased ENI limits available to them. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/container-instance-eni.html\">Elastic Network Interface Trunking</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>containerInsights</code> - Container Insights with enhanced observability provides all the Container Insights metrics, plus additional task and container metrics. This version supports enhanced observability for Amazon ECS clusters using the Amazon EC2 and Fargate launch types. After you configure Container Insights with enhanced observability on Amazon ECS, Container Insights auto-collects detailed infrastructure telemetry from the cluster level down to the container level in your environment and displays these critical performance data in curated dashboards removing the heavy lifting in observability set-up. </p> <p>To use Container Insights with enhanced observability, set the <code>containerInsights</code> account setting to <code>enhanced</code>.</p> <p>To use Container Insights, set the <code>containerInsights</code> account setting to <code>enabled</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-container-insights.html\">Monitor Amazon ECS containers using Container Insights with enhanced observability</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> </li> <li> <p> <code>dualStackIPv6</code> - When turned on, when using a VPC in dual stack mode, your tasks using the <code>awsvpc</code> network mode can have an IPv6 address assigned. For more information on using IPv6 with tasks launched on Amazon EC2 instances, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking-awsvpc.html#task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>. For more information on using IPv6 with tasks launched on Fargate, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-networking.html#fargate-task-networking-vpc-dual-stack\">Using a VPC in dual-stack mode</a>.</p> </li> <li> <p> <code>fargateTaskRetirementWaitPeriod</code> - When Amazon Web Services determines that a security or infrastructure update is needed for an Amazon ECS task hosted on Fargate, the tasks need to be stopped and new tasks launched to replace them. Use <code>fargateTaskRetirementWaitPeriod</code> to configure the wait time to retire a Fargate task. For information about the Fargate tasks maintenance, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-maintenance.html\">Amazon Web Services Fargate task maintenance</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>tagResourceAuthorization</code> - Amazon ECS is introducing tagging authorization for resource creation. Users must have permissions for actions that create the resource, such as <code>ecsCreateCluster</code>. If tags are specified when you create a resource, Amazon Web Services performs additional authorization to verify if users or roles have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>ecs:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/supported-iam-actions-tagging.html\">Grant permission to tag resources on creation</a> in the <i>Amazon ECS Developer Guide</i>.</p> </li> <li> <p> <code>defaultLogDriverMode</code> - Amazon ECS supports setting a default delivery mode of log messages from a container to the <code>logDriver</code> that you specify in the container's <code>logConfiguration</code>. The delivery mode affects application stability when the flow of logs from the container to the log driver is interrupted. The <code>defaultLogDriverMode</code> setting supports two values: <code>blocking</code> and <code>non-blocking</code>. If you don't specify a delivery mode in your container definition's <code>logConfiguration</code>, the mode you specify using this account setting will be used as the default. For more information about log delivery modes, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_LogConfiguration.html\">LogConfiguration</a>. </p> <note> <p>On June 25, 2025, Amazon ECS changed the default log driver mode from <code>blocking</code> to <code>non-blocking</code> to prioritize task availability over logging. To continue using the <code>blocking</code> mode after this change, do one of the following:</p> <ul> <li> <p>Set the <code>mode</code> option in your container definition's <code>logConfiguration</code> as <code>blocking</code>.</p> </li> <li> <p>Set the <code>defaultLogDriverMode</code> account setting to <code>blocking</code>.</p> </li> </ul> </note> </li> <li> <p> <code>guardDutyActivate</code> - The <code>guardDutyActivate</code> parameter is read-only in Amazon ECS and indicates whether Amazon ECS Runtime Monitoring is enabled or disabled by your security administrator in your Amazon ECS account. Amazon GuardDuty controls this account setting on your behalf. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-integration.html\">Protecting Amazon ECS workloads with Amazon ECS Runtime Monitoring</a>.</p> </li> </ul>"
         },
         "value":{
           "shape":"String",
@@ -4703,7 +5370,7 @@
         },
         "principalArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the principal, which can be a user, role, or the root user. If you specify the root user, it modifies the account setting for all users, roles, and the root user of the account unless a user or role explicitly overrides these settings. If this field is omitted, the setting is changed only for the authenticated user.</p> <note> <p>You must use the root user when you set the Fargate wait time (<code>fargateTaskRetirementWaitPeriod</code>). </p> <p>Federated users assume the account setting of the root user and can't have explicit account settings set for them.</p> </note>"
+          "documentation":"<p>The ARN of the principal, which can be a user, role, or the root user. If you specify the root user, it modifies the account setting for all users, roles, and the root user of the account unless a user or role explicitly overrides these settings. If this field is omitted, the setting is changed only for the authenticated user.</p> <p>In order to use this parameter, you must be the root user, or the principal.</p> <note> <p>You must use the root user when you set the Fargate wait time (<code>fargateTaskRetirementWaitPeriod</code>). </p> <p>Federated users assume the account setting of the root user and can't have explicit account settings set for them.</p> </note>"
         }
       }
     },
@@ -4861,7 +5528,7 @@
         },
         "cpu":{
           "shape":"String",
-          "documentation":"<p>The number of CPU units used by the task. It can be expressed as an integer using CPU units (for example, <code>1024</code>) or as a string using vCPUs (for example, <code>1 vCPU</code> or <code>1 vcpu</code>) in a task definition. String values are converted to an integer indicating the CPU units when the task definition is registered.</p> <note> <p>Task-level CPU and memory parameters are ignored for Windows containers. We recommend specifying container-level resources for Windows containers.</p> </note> <p>If you're using the EC2 launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>10240</code> CPU units (<code>10</code> vCPUs). If you do not specify a value, the parameter is ignored.</p> <p>If you're using the Fargate launch type, this field is required and you must use one of the following values, which determines your range of supported values for the <code>memory</code> parameter:</p> <p>The CPU units cannot be less than 1 vCPU when you use Windows containers on Fargate.</p> <ul> <li> <p>256 (.25 vCPU) - Available <code>memory</code> values: 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB)</p> </li> <li> <p>512 (.5 vCPU) - Available <code>memory</code> values: 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB)</p> </li> <li> <p>1024 (1 vCPU) - Available <code>memory</code> values: 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)</p> </li> <li> <p>2048 (2 vCPU) - Available <code>memory</code> values: 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>4096 (4 vCPU) - Available <code>memory</code> values: 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>8192 (8 vCPU) - Available <code>memory</code> values: 16 GB and 60 GB in 4 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> <li> <p>16384 (16vCPU) - Available <code>memory</code> values: 32GB and 120 GB in 8 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> </ul>"
+          "documentation":"<p>The number of CPU units used by the task. It can be expressed as an integer using CPU units (for example, <code>1024</code>) or as a string using vCPUs (for example, <code>1 vCPU</code> or <code>1 vcpu</code>) in a task definition. String values are converted to an integer indicating the CPU units when the task definition is registered.</p> <note> <p>Task-level CPU and memory parameters are ignored for Windows containers. We recommend specifying container-level resources for Windows containers.</p> </note> <p>If you're using the EC2 launch type or external launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>196608</code> CPU units (<code>192</code> vCPUs). If you do not specify a value, the parameter is ignored.</p> <p>This field is required for Fargate. For information about the valid values, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size\">Task size</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
         "memory":{
           "shape":"String",
@@ -4873,7 +5540,7 @@
         },
         "pidMode":{
           "shape":"PidMode",
-          "documentation":"<p>The process namespace to use for the containers in the task. The valid values are <code>host</code> or <code>task</code>. On Fargate for Linux containers, the only valid value is <code>task</code>. For example, monitoring sidecars might need <code>pidMode</code> to access information about other containers running in the same task.</p> <p>If <code>host</code> is specified, all containers within the tasks that specified the <code>host</code> PID mode on the same container instance share the same process namespace with the host Amazon EC2 instance.</p> <p>If <code>task</code> is specified, all containers within the specified task share the same process namespace.</p> <p>If no value is specified, the default is a private namespace for each container.</p> <p>If the <code>host</code> PID mode is used, there's a heightened risk of undesired process namespace exposure.</p> <note> <p>This parameter is not supported for Windows containers.</p> </note> <note> <p>This parameter is only supported for tasks that are hosted on Fargate if the tasks are using platform version <code>1.4.0</code> or later (Linux). This isn't supported for Windows containers on Fargate.</p> </note>"
+          "documentation":"<p>The process namespace to use for the containers in the task. The valid values are <code>host</code> or <code>task</code>. On Fargate for Linux containers, the only valid value is <code>task</code>. For example, monitoring sidecars might need <code>pidMode</code> to access information about other containers running in the same task.</p> <p>If <code>host</code> is specified, all containers within the tasks that specified the <code>host</code> PID mode on the same container instance share the same process namespace with the host Amazon EC2 instance.</p> <p>If <code>task</code> is specified, all containers within the specified task share the same process namespace.</p> <p>If no value is specified, the The default is a private namespace for each container.</p> <p>If the <code>host</code> PID mode is used, there's a heightened risk of undesired process namespace exposure.</p> <note> <p>This parameter is not supported for Windows containers.</p> </note> <note> <p>This parameter is only supported for tasks that are hosted on Fargate if the tasks are using platform version <code>1.4.0</code> or later (Linux). This isn't supported for Windows containers on Fargate.</p> </note>"
         },
         "ipcMode":{
           "shape":"IpcMode",
@@ -4893,7 +5560,7 @@
         },
         "runtimePlatform":{
           "shape":"RuntimePlatform",
-          "documentation":"<p>The operating system that your tasks definitions run on. A platform family is specified only for tasks using the Fargate launch type. </p>"
+          "documentation":"<p>The operating system that your tasks definitions run on.</p>"
         },
         "enableFaultInjection":{
           "shape":"BoxedBoolean",
@@ -4929,6 +5596,16 @@
       "type":"list",
       "member":{"shape":"Attribute"}
     },
+    "ResolvedConfiguration":{
+      "type":"structure",
+      "members":{
+        "loadBalancers":{
+          "shape":"ServiceRevisionLoadBalancers",
+          "documentation":"<p>The resolved load balancer configuration for the service revision. This includes information about which target groups serve traffic and which listener rules direct traffic to them.</p>"
+        }
+      },
+      "documentation":"<p>The resolved configuration for a service revision, which contains the actual resources your service revision uses, such as which target groups serve traffic.</p>"
+    },
     "Resource":{
       "type":"structure",
       "members":{
@@ -4965,15 +5642,13 @@
     },
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource is in-use and can't be removed.</p>",
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource wasn't found.</p>",
       "exception":true
     },
@@ -5023,7 +5698,7 @@
         },
         "serviceRevisionArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the service revision deployed as part of the rollback.</p> <p>When the type is <code>GPU</code>, the value is the number of physical <code>GPUs</code> the Amazon ECS container agent reserves for the container. The number of GPUs that's reserved for all containers in a task can't exceed the number of available GPUs on the container instance that the task is launched on.</p> <p>When the type is <code>InferenceAccelerator</code>, the <code>value</code> matches the <code>deviceName</code> for an <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_InferenceAccelerator.html\">InferenceAccelerator</a> specified in a task definition.</p>"
+          "documentation":"<p>The ARN of the service revision deployed as part of the rollback.</p>"
         }
       },
       "documentation":"<p>Information about the service deployment rollback.</p>"
@@ -5034,11 +5709,11 @@
       "members":{
         "capacityProviderStrategy":{
           "shape":"CapacityProviderStrategy",
-          "documentation":"<p>The capacity provider strategy to use for the task.</p> <p>If a <code>capacityProviderStrategy</code> is specified, the <code>launchType</code> parameter must be omitted. If no <code>capacityProviderStrategy</code> or <code>launchType</code> is specified, the <code>defaultCapacityProviderStrategy</code> for the cluster is used.</p> <p>When you use cluster auto scaling, you must specify <code>capacityProviderStrategy</code> and not <code>launchType</code>. </p> <p>A capacity provider strategy can contain a maximum of 20 capacity providers.</p>"
+          "documentation":"<p>The capacity provider strategy to use for the task.</p> <note> <p>If you want to use Amazon ECS Managed Instances, you must use the <code>capacityProviderStrategy</code> request parameter and omit the <code>launchType</code> request parameter.</p> </note> <p>If a <code>capacityProviderStrategy</code> is specified, the <code>launchType</code> parameter must be omitted. If no <code>capacityProviderStrategy</code> or <code>launchType</code> is specified, the <code>defaultCapacityProviderStrategy</code> for the cluster is used.</p> <p>When you use cluster auto scaling, you must specify <code>capacityProviderStrategy</code> and not <code>launchType</code>. </p> <p>A capacity provider strategy can contain a maximum of 20 capacity providers.</p>"
         },
         "cluster":{
           "shape":"String",
-          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster to run your task on. If you do not specify a cluster, the default cluster is assumed.</p>"
+          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster to run your task on. If you do not specify a cluster, the default cluster is assumed.</p> <p>Each account receives a default cluster the first time you use the service, but you may also create other clusters.</p>"
         },
         "count":{
           "shape":"BoxedInteger",
@@ -5058,7 +5733,7 @@
         },
         "launchType":{
           "shape":"LaunchType",
-          "documentation":"<p>The infrastructure to run your standalone task on. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>The <code>FARGATE</code> launch type runs your tasks on Fargate On-Demand infrastructure.</p> <note> <p>Fargate Spot infrastructure is available for use but a capacity provider strategy must be used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html\">Fargate capacity providers</a> in the <i>Amazon ECS Developer Guide</i>.</p> </note> <p>The <code>EC2</code> launch type runs your tasks on Amazon EC2 instances registered to your cluster.</p> <p>The <code>EXTERNAL</code> launch type runs your tasks on your on-premises server or virtual machine (VM) capacity registered to your cluster.</p> <p>A task can use either a launch type or a capacity provider strategy. If a <code>launchType</code> is specified, the <code>capacityProviderStrategy</code> parameter must be omitted.</p> <p>When you use cluster auto scaling, you must specify <code>capacityProviderStrategy</code> and not <code>launchType</code>. </p>"
+          "documentation":"<p>The infrastructure to run your standalone task on. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <note> <p>If you want to use Amazon ECS Managed Instances, you must use the <code>capacityProviderStrategy</code> request parameter and omit the <code>launchType</code> request parameter.</p> </note> <p>The <code>FARGATE</code> launch type runs your tasks on Fargate On-Demand infrastructure.</p> <note> <p>Fargate Spot infrastructure is available for use but a capacity provider strategy must be used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html\">Fargate capacity providers</a> in the <i>Amazon ECS Developer Guide</i>.</p> </note> <p>The <code>EC2</code> launch type runs your tasks on Amazon EC2 instances registered to your cluster.</p> <p>The <code>EXTERNAL</code> launch type runs your tasks on your on-premises server or virtual machine (VM) capacity registered to your cluster.</p> <p>A task can use either a launch type or a capacity provider strategy. If a <code>launchType</code> is specified, the <code>capacityProviderStrategy</code> parameter must be omitted.</p> <p>When you use cluster auto scaling, you must specify <code>capacityProviderStrategy</code> and not <code>launchType</code>. </p>"
         },
         "networkConfiguration":{
           "shape":"NetworkConfiguration",
@@ -5107,7 +5782,7 @@
         },
         "volumeConfigurations":{
           "shape":"TaskVolumeConfigurations",
-          "documentation":"<p>The details of the volume that was <code>configuredAtLaunch</code>. You can configure the size, volumeType, IOPS, throughput, snapshot and encryption in in <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TaskManagedEBSVolumeConfiguration.html\">TaskManagedEBSVolumeConfiguration</a>. The <code>name</code> of the volume must match the <code>name</code> from the task definition.</p>"
+          "documentation":"<p>The details of the volume that was <code>configuredAtLaunch</code>. You can configure the size, volumeType, IOPS, throughput, snapshot and encryption in <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TaskManagedEBSVolumeConfiguration.html\">TaskManagedEBSVolumeConfiguration</a>. The <code>name</code> of the volume must match the <code>name</code> from the task definition.</p>"
         }
       }
     },
@@ -5129,7 +5804,7 @@
       "members":{
         "cpuArchitecture":{
           "shape":"CPUArchitecture",
-          "documentation":"<p>The CPU architecture.</p> <p>You can run your Linux tasks on an ARM-based platform by setting the value to <code>ARM64</code>. This option is available for tasks that run on Linux Amazon EC2 instance or Linux containers on Fargate.</p>"
+          "documentation":"<p>The CPU architecture.</p> <p>You can run your Linux tasks on an ARM-based platform by setting the value to <code>ARM64</code>. This option is available for tasks that run on Linux Amazon EC2 instance, Amazon ECS Managed Instances, or Linux containers on Fargate.</p>"
         },
         "operatingSystemFamily":{
           "shape":"OSFamily",
@@ -5305,7 +5980,7 @@
         },
         "healthCheckGracePeriodSeconds":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing target health checks after a task has first started.</p>"
+          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing, VPC Lattice, and container health checks after a task has first started.</p> <p>If your service has more running tasks than desired, unhealthy tasks in the grace period might be stopped to reach the desired count.</p>"
         },
         "schedulingStrategy":{
           "shape":"SchedulingStrategy",
@@ -5337,11 +6012,34 @@
         },
         "availabilityZoneRebalancing":{
           "shape":"AvailabilityZoneRebalancing",
-          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p> <p>The default behavior of <code>AvailabilityZoneRebalancing</code> differs between create and update requests:</p> <ul> <li> <p>For create service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults the value to <code>ENABLED</code>.</p> </li> <li> <p>For update service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults to the existing service’s <code>AvailabilityZoneRebalancing</code> value. If the service never had an <code>AvailabilityZoneRebalancing</code> value set, Amazon ECS treats this as <code>DISABLED</code>.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Details on a service within a cluster.</p>"
     },
+    "ServiceConnectAccessLogConfiguration":{
+      "type":"structure",
+      "required":["format"],
+      "members":{
+        "format":{
+          "shape":"ServiceConnectAccessLoggingFormat",
+          "documentation":"<p>The format for Service Connect access log output. Choose TEXT for human-readable logs or JSON for structured data that integrates well with log analysis tools.</p>"
+        },
+        "includeQueryParameters":{
+          "shape":"ServiceConnectIncludeQueryParameters",
+          "documentation":"<p>Specifies whether to include query parameters in Service Connect access logs.</p> <p>When enabled, query parameters from HTTP requests are included in the access logs. Consider security and privacy implications when enabling this feature, as query parameters may contain sensitive information such as request IDs and tokens. By default, this parameter is <code>DISABLED</code>.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for Service Connect access logging. Access logs provide detailed information about requests made to your service, including request patterns, response codes, and timing data for debugging and monitoring purposes.</p> <note> <p>To enable access logs, you must also specify a <code>logConfiguration</code> in the <code>serviceConnectConfiguration</code>.</p> </note>"
+    },
+    "ServiceConnectAccessLoggingFormat":{
+      "type":"string",
+      "documentation":"<p>The format for Service Connect access log output. Choose TEXT for human-readable logs or JSON for structured data that integrates well with log analysis tools.</p>",
+      "enum":[
+        "TEXT",
+        "JSON"
+      ]
+    },
     "ServiceConnectClientAlias":{
       "type":"structure",
       "required":["port"],
@@ -5353,6 +6051,10 @@
         "dnsName":{
           "shape":"String",
           "documentation":"<p>The <code>dnsName</code> is the name that you use in the applications of client tasks to connect to this service. The name must be a valid DNS name but doesn't need to be fully-qualified. The name can include up to 127 characters. The name can include lowercase letters, numbers, underscores (_), hyphens (-), and periods (.). The name can't start with a hyphen.</p> <p>If this parameter isn't specified, the default value of <code>discoveryName.namespace</code> is used. If the <code>discoveryName</code> isn't specified, the port mapping name from the task definition is used in <code>portName.namespace</code>.</p> <p>To avoid changing your applications in client Amazon ECS services, set this to the same name that the client application uses by default. For example, a few common names are <code>database</code>, <code>db</code>, or the lowercase name of a database, such as <code>mysql</code> or <code>redis</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+        },
+        "testTrafficRules":{
+          "shape":"ServiceConnectTestTrafficRules",
+          "documentation":"<p>The configuration for test traffic routing rules used during blue/green deployments with Amazon ECS Service Connect. This allows you to route a portion of traffic to the new service revision of your service for testing before shifting all production traffic.</p>"
         }
       },
       "documentation":"<p>Each alias (\"endpoint\") is a fully-qualified name and port number that other tasks (\"clients\") can use to connect to this service.</p> <p>Each name and port mapping must be unique within the namespace.</p> <p>Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
@@ -5377,10 +6079,22 @@
           "shape":"ServiceConnectServiceList",
           "documentation":"<p>The list of Service Connect service objects. These are names and aliases (also known as endpoints) that are used by other Amazon ECS services to connect to this service. </p> <p>This field is not required for a \"client\" Amazon ECS service that's a member of a namespace only to connect to other services within the namespace. An example of this would be a frontend application that accepts incoming requests from either a load balancer that's attached to the service or by other means.</p> <p>An object selects a port from the task definition, assigns a name for the Cloud Map service, and a list of aliases (endpoints) and ports for client applications to refer to this service.</p>"
         },
-        "logConfiguration":{"shape":"LogConfiguration"}
+        "logConfiguration":{"shape":"LogConfiguration"},
+        "accessLogConfiguration":{
+          "shape":"ServiceConnectAccessLogConfiguration",
+          "documentation":"<p>The configuration for Service Connect access logging. Access logs capture detailed information about requests made to your service, including request patterns, response codes, and timing data. They can be useful for debugging connectivity issues, monitoring service performance, and auditing service-to-service communication for security and compliance purposes.</p> <note> <p>To enable access logs, you must also specify a <code>logConfiguration</code> in the <code>serviceConnectConfiguration</code>.</p> </note>"
+        }
       },
       "documentation":"<p>The Service Connect configuration of your Amazon ECS service. The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.</p> <p>Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
     },
+    "ServiceConnectIncludeQueryParameters":{
+      "type":"string",
+      "documentation":"<p>Controls whether query parameters are included in Service Connect access logs. Consider security and privacy implications when enabling this feature. By default, this parameter is <code>DISABLED</code>.</p>",
+      "enum":[
+        "DISABLED",
+        "ENABLED"
+      ]
+    },
     "ServiceConnectService":{
       "type":"structure",
       "required":["portName"],
@@ -5425,7 +6139,7 @@
         },
         "discoveryArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the namespace in Cloud Map that matches the discovery name for this Service Connect resource. You can use this ARN in other integrations with Cloud Map. However, Service Connect can't ensure connectivity outside of Amazon ECS.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the service in Cloud Map that matches the discovery name for this Service Connect resource. You can use this ARN in other integrations with Cloud Map. However, Service Connect can't ensure connectivity outside of Amazon ECS.</p>"
         }
       },
       "documentation":"<p>The Service Connect resource. Each configuration maps a discovery name to a Cloud Map service name. The data is stored in Cloud Map as part of the Service Connect configuration for each discovery name of this Amazon ECS service.</p> <p>A task can resolve the <code>dnsName</code> for each of the <code>clientAliases</code> of a service. However a task can't resolve the discovery names. If you want to connect to a service, refer to the <code>ServiceConnectConfiguration</code> of that service for the list of <code>clientAliases</code> that you can use.</p>"
@@ -5434,6 +6148,43 @@
       "type":"list",
       "member":{"shape":"ServiceConnectServiceResource"}
     },
+    "ServiceConnectTestTrafficHeaderMatchRules":{
+      "type":"structure",
+      "required":["exact"],
+      "members":{
+        "exact":{
+          "shape":"String",
+          "documentation":"<p>The exact value that the HTTP header must match for the test traffic routing rule to apply. This provides precise control over which requests are routed to the new service revision during blue/green deployments.</p>"
+        }
+      },
+      "documentation":"<p>The header matching rules for test traffic routing in Amazon ECS blue/green deployments. These rules determine how incoming requests are matched based on HTTP headers to route test traffic to the new service revision.</p>"
+    },
+    "ServiceConnectTestTrafficHeaderRules":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the HTTP header to examine for test traffic routing. Common examples include custom headers like <code>X-Test-Version</code> or <code>X-Canary-Request</code> that can be used to identify test traffic.</p>"
+        },
+        "value":{
+          "shape":"ServiceConnectTestTrafficHeaderMatchRules",
+          "documentation":"<p>The header value matching configuration that determines how the HTTP header value is evaluated for test traffic routing decisions.</p>"
+        }
+      },
+      "documentation":"<p>The HTTP header rules used to identify and route test traffic during Amazon ECS blue/green deployments. These rules specify which HTTP headers to examine and what values to match for routing decisions.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-blue-green.html\">Service Connect for Amazon ECS blue/green deployments</a> in the <i> Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
+    "ServiceConnectTestTrafficRules":{
+      "type":"structure",
+      "required":["header"],
+      "members":{
+        "header":{
+          "shape":"ServiceConnectTestTrafficHeaderRules",
+          "documentation":"<p>The HTTP header-based routing rules that determine which requests should be routed to the new service version during blue/green deployment testing. These rules provide fine-grained control over test traffic routing based on request headers.</p>"
+        }
+      },
+      "documentation":"<p>The test traffic routing configuration for Amazon ECS blue/green deployments. This configuration allows you to define rules for routing specific traffic to the new service revision during the deployment process, allowing for safe testing before full production traffic shift.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-blue-green.html\">Service Connect for Amazon ECS blue/green deployments</a> in the <i> Amazon Elastic Container Service Developer Guide</i>.</p>"
+    },
     "ServiceConnectTlsCertificateAuthority":{
       "type":"structure",
       "members":{
@@ -5514,6 +6265,10 @@
           "shape":"String",
           "documentation":"<p>Information about why the service deployment is in the current status. For example, the circuit breaker detected a failure.</p>"
         },
+        "lifecycleStage":{
+          "shape":"ServiceDeploymentLifecycleStage",
+          "documentation":"<p>The current lifecycle stage of the deployment. Possible values include:</p> <ul> <li> <p>RECONCILE_SERVICE</p> <p>The reconciliation stage that only happens when you start a new service deployment with more than 1 service revision in an ACTIVE state.</p> </li> <li> <p>PRE_SCALE_UP</p> <p>The green service revision has not started. The blue service revision is handling 100% of the production traffic. There is no test traffic.</p> </li> <li> <p>SCALE_UP</p> <p>The stage when the green service revision scales up to 100% and launches new tasks. The green service revision is not serving any traffic at this point.</p> </li> <li> <p>POST_SCALE_UP</p> <p>The green service revision has started. The blue service revision is handling 100% of the production traffic. There is no test traffic.</p> </li> <li> <p>TEST_TRAFFIC_SHIFT</p> <p>The blue and green service revisions are running. The blue service revision handles 100% of the production traffic. The green service revision is migrating from 0% to 100% of test traffic.</p> </li> <li> <p>POST_TEST_TRAFFIC_SHIFT</p> <p>The test traffic shift is complete. The green service revision handles 100% of the test traffic.</p> </li> <li> <p>PRODUCTION_TRAFFIC_SHIFT</p> <p>Production traffic is shifting to the green service revision. The green service revision is migrating from 0% to 100% of production traffic.</p> </li> <li> <p>POST_PRODUCTION_TRAFFIC_SHIFT</p> <p>The production traffic shift is complete.</p> </li> <li> <p>BAKE_TIME</p> <p>The stage when both blue and green service revisions are running simultaneously after the production traffic has shifted.</p> </li> <li> <p>CLEAN_UP</p> <p>The stage when the blue service revision has completely scaled down to 0 running tasks. The green service revision is now the production service revision after this stage.</p> </li> </ul>"
+        },
         "deploymentConfiguration":{"shape":"DeploymentConfiguration"},
         "rollback":{
           "shape":"Rollback",
@@ -5608,6 +6363,27 @@
       },
       "documentation":"<p>Information about the circuit breaker used to determine when a service deployment has failed.</p> <p>The deployment circuit breaker is the rolling update mechanism that determines if the tasks reach a steady state. The deployment circuit breaker has an option that will automatically roll back a failed deployment to the last cpompleted service revision. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-circuit-breaker.html\">How the Amazon ECS deployment circuit breaker detects failures</a> in the<i> Amazon ECS Developer Guide</i>.</p>"
     },
+    "ServiceDeploymentLifecycleStage":{
+      "type":"string",
+      "enum":[
+        "RECONCILE_SERVICE",
+        "PRE_SCALE_UP",
+        "SCALE_UP",
+        "POST_SCALE_UP",
+        "TEST_TRAFFIC_SHIFT",
+        "POST_TEST_TRAFFIC_SHIFT",
+        "PRODUCTION_TRAFFIC_SHIFT",
+        "POST_PRODUCTION_TRAFFIC_SHIFT",
+        "BAKE_TIME",
+        "CLEAN_UP"
+      ]
+    },
+    "ServiceDeploymentNotFoundException":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The service deploy ARN that you specified in the <code>StopServiceDeployment</code> doesn't exist. You can use <code>ListServiceDeployments</code> to retrieve the service deployment ARNs.</p>",
+      "exception":true
+    },
     "ServiceDeploymentRollbackMonitorsStatus":{
       "type":"string",
       "enum":[
@@ -5625,6 +6401,7 @@
         "STOPPED",
         "STOP_REQUESTED",
         "IN_PROGRESS",
+        "ROLLBACK_REQUESTED",
         "ROLLBACK_IN_PROGRESS",
         "ROLLBACK_SUCCESSFUL",
         "ROLLBACK_FAILED"
@@ -5678,11 +6455,11 @@
       "members":{
         "encrypted":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>Indicates whether the volume should be encrypted. If no value is specified, encryption is turned on by default. This parameter maps 1:1 with the <code>Encrypted</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
+          "documentation":"<p>Indicates whether the volume should be encrypted. If you turn on Region-level Amazon EBS encryption by default but set this value as <code>false</code>, the setting is overridden and the volume is encrypted with the KMS key specified for Amazon EBS encryption by default. This parameter maps 1:1 with the <code>Encrypted</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
         },
         "kmsKeyId":{
           "shape":"EBSKMSKeyId",
-          "documentation":"<p>The Amazon Resource Name (ARN) identifier of the Amazon Web Services Key Management Service key to use for Amazon EBS encryption. When encryption is turned on and no Amazon Web Services Key Management Service key is specified, the default Amazon Web Services managed key for Amazon EBS volumes is used. This parameter maps 1:1 with the <code>KmsKeyId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p> <important> <p>Amazon Web Services authenticates the Amazon Web Services Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails.</p> </important>"
+          "documentation":"<p>The Amazon Resource Name (ARN) identifier of the Amazon Web Services Key Management Service key to use for Amazon EBS encryption. When a key is specified using this parameter, it overrides Amazon EBS default encryption or any KMS key that you specified for cluster-level managed storage encryption. This parameter maps 1:1 with the <code>KmsKeyId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>. For more information about encrypting Amazon EBS volumes attached to tasks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-kms-encryption.html\">Encrypt data stored in Amazon EBS volumes attached to Amazon ECS tasks</a>.</p> <important> <p>Amazon Web Services authenticates the Amazon Web Services Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails.</p> </important>"
         },
         "volumeType":{
           "shape":"EBSVolumeType",
@@ -5694,7 +6471,11 @@
         },
         "snapshotId":{
           "shape":"EBSSnapshotId",
-          "documentation":"<p>The snapshot that Amazon ECS uses to create the volume. You must specify either a snapshot ID or a volume size. This parameter maps 1:1 with the <code>SnapshotId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
+          "documentation":"<p>The snapshot that Amazon ECS uses to create volumes for attachment to tasks maintained by the service. You must specify either <code>snapshotId</code> or <code>sizeInGiB</code> in your volume configuration. This parameter maps 1:1 with the <code>SnapshotId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
+        },
+        "volumeInitializationRate":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The rate, in MiB/s, at which data is fetched from a snapshot of an existing EBS volume to create new volumes for attachment to the tasks maintained by the service. This property can be specified only if you specify a <code>snapshotId</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\">Initialize Amazon EBS volumes</a> in the <i>Amazon EBS User Guide</i>.</p>"
         },
         "iops":{
           "shape":"BoxedInteger",
@@ -5714,22 +6495,20 @@
         },
         "filesystemType":{
           "shape":"TaskFilesystemType",
-          "documentation":"<p>The filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the task will fail to start.</p> <p>The available Linux filesystem types are&#x2028; <code>ext3</code>, <code>ext4</code>, and <code>xfs</code>. If no value is specified, the <code>xfs</code> filesystem type is used by default.</p> <p>The available Windows filesystem types are <code>NTFS</code>.</p>"
+          "documentation":"<p>The filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the tasks will fail to start.</p> <p>The available Linux filesystem types are&#x2028; <code>ext3</code>, <code>ext4</code>, and <code>xfs</code>. If no value is specified, the <code>xfs</code> filesystem type is used by default.</p> <p>The available Windows filesystem types are <code>NTFS</code>.</p>"
         }
       },
       "documentation":"<p>The configuration for the Amazon EBS volume that Amazon ECS creates and manages on your behalf. These settings are used to create each Amazon EBS volume, with one volume created for each task in the service. For information about the supported launch types and operating systems, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html#ebs-volumes-configuration\">Supported operating systems and launch types</a> in the<i> Amazon Elastic Container Service Developer Guide</i>.</p> <p>Many of these parameters map 1:1 with the Amazon EBS <code>CreateVolume</code> API request parameters.</p>"
     },
     "ServiceNotActiveException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified service isn't active. You can't update a service that's inactive. If you have previously deleted a service, you can re-create it with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html\">CreateService</a>.</p>",
       "exception":true
     },
     "ServiceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified service wasn't found. You can view your available services with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListServices.html\">ListServices</a>. Amazon ECS services are cluster specific and Region specific.</p>",
       "exception":true
     },
@@ -5824,10 +6603,32 @@
         "vpcLatticeConfigurations":{
           "shape":"VpcLatticeConfigurations",
           "documentation":"<p>The VPC Lattice configuration for the service revision.</p>"
+        },
+        "resolvedConfiguration":{
+          "shape":"ResolvedConfiguration",
+          "documentation":"<p>The resolved configuration for the service revision which contains the actual resources your service revision uses, such as which target groups serve traffic.</p>"
         }
       },
       "documentation":"<p>Information about the service revision.</p> <p>A service revision contains a record of the workload configuration Amazon ECS is attempting to deploy. Whenever you create or deploy a service, Amazon ECS automatically creates and captures the configuration that you're trying to deploy in the service revision. For information about service revisions, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-revision.html\">Amazon ECS service revisions</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p>"
     },
+    "ServiceRevisionLoadBalancer":{
+      "type":"structure",
+      "members":{
+        "targetGroupArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target group associated with the service revision.</p>"
+        },
+        "productionListenerRule":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the production listener rule or listener that directs traffic to the target group associated with the service revision.</p>"
+        }
+      },
+      "documentation":"<p>The resolved load balancer configuration for a service revision. This includes information about which target groups serve traffic and which listener rules direct traffic to them.</p>"
+    },
+    "ServiceRevisionLoadBalancers":{
+      "type":"list",
+      "member":{"shape":"ServiceRevisionLoadBalancer"}
+    },
     "ServiceRevisionSummary":{
       "type":"structure",
       "members":{
@@ -5846,6 +6647,16 @@
         "pendingTaskCount":{
           "shape":"Integer",
           "documentation":"<p>The number of pending tasks for the service revision.</p>"
+        },
+        "requestedTestTrafficWeight":{
+          "shape":"Double",
+          "documentation":"<p>The percentage of test traffic that is directed to this service revision. This value represents a snapshot of the traffic distribution and may not reflect real-time changes during active deployments. Valid values are 0.0 to 100.0.</p>",
+          "box":true
+        },
+        "requestedProductionTrafficWeight":{
+          "shape":"Double",
+          "documentation":"<p>The percentage of production traffic that is directed to this service revision. This value represents a snapshot of the traffic distribution and may not reflect real-time changes during active deployments. Valid values are 0.0 to 100.0.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The information about the number of requested, pending, and running tasks for a service revision.</p>"
@@ -5932,7 +6743,8 @@
         "fargateFIPSMode",
         "tagResourceAuthorization",
         "fargateTaskRetirementWaitPeriod",
-        "guardDutyActivate"
+        "guardDutyActivate",
+        "defaultLogDriverMode"
       ]
     },
     "SettingType":{
@@ -6038,6 +6850,36 @@
       "type":"list",
       "member":{"shape":"KeyValuePair"}
     },
+    "StopServiceDeploymentRequest":{
+      "type":"structure",
+      "required":["serviceDeploymentArn"],
+      "members":{
+        "serviceDeploymentArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the service deployment that you want to stop.</p>"
+        },
+        "stopType":{
+          "shape":"StopServiceDeploymentStopType",
+          "documentation":"<p>How you want Amazon ECS to stop the service. </p> <p>The valid values are <code>ROLLBACK</code>.</p>"
+        }
+      }
+    },
+    "StopServiceDeploymentResponse":{
+      "type":"structure",
+      "members":{
+        "serviceDeploymentArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the stopped service deployment.</p>"
+        }
+      }
+    },
+    "StopServiceDeploymentStopType":{
+      "type":"string",
+      "enum":[
+        "ABORT",
+        "ROLLBACK"
+      ]
+    },
     "StopTaskRequest":{
       "type":"structure",
       "required":["task"],
@@ -6048,7 +6890,7 @@
         },
         "task":{
           "shape":"String",
-          "documentation":"<p>The task ID of the task to stop.</p>"
+          "documentation":"<p>Thefull Amazon Resource Name (ARN) of the task.</p>"
         },
         "reason":{
           "shape":"String",
@@ -6207,7 +7049,7 @@
         },
         "value":{
           "shape":"String",
-          "documentation":"<p>The namespaced kernel parameter to set a <code>value</code> for.</p> <p>Valid IPC namespace values: <code>\"kernel.msgmax\" | \"kernel.msgmnb\" | \"kernel.msgmni\" | \"kernel.sem\" | \"kernel.shmall\" | \"kernel.shmmax\" | \"kernel.shmmni\" | \"kernel.shm_rmid_forced\"</code>, and <code>Sysctls</code> that start with <code>\"fs.mqueue.*\"</code> </p> <p>Valid network namespace values: <code>Sysctls</code> that start with <code>\"net.*\"</code> </p> <p>All of these values are supported by Fargate.</p>"
+          "documentation":"<p>The namespaced kernel parameter to set a <code>value</code> for.</p> <p>Valid IPC namespace values: <code>\"kernel.msgmax\" | \"kernel.msgmnb\" | \"kernel.msgmni\" | \"kernel.sem\" | \"kernel.shmall\" | \"kernel.shmmax\" | \"kernel.shmmni\" | \"kernel.shm_rmid_forced\"</code>, and <code>Sysctls</code> that start with <code>\"fs.mqueue.*\"</code> </p> <p>Valid network namespace values: <code>Sysctls</code> that start with <code>\"net.*\"</code>. Only namespaced <code>Sysctls</code> that exist within the container starting with \"net.* are accepted.</p> <p>All of these values are supported by Fargate.</p>"
         }
       },
       "documentation":"<p>A list of namespaced kernel parameters to set in the container. This parameter maps to <code>Sysctls</code> in the docker container create command and the <code>--sysctl</code> option to docker run. For example, you can configure <code>net.ipv4.tcp_keepalive_time</code> setting to maintain longer lived connections.</p> <p>We don't recommend that you specify network-related <code>systemControls</code> parameters for multiple containers in a single task that also uses either the <code>awsvpc</code> or <code>host</code> network mode. Doing this has the following disadvantages:</p> <ul> <li> <p>For tasks that use the <code>awsvpc</code> network mode including Fargate, if you set <code>systemControls</code> for any container, it applies to all containers in the task. If you set different <code>systemControls</code> for multiple containers in a single task, the container that's started last determines which <code>systemControls</code> take effect.</p> </li> <li> <p>For tasks that use the <code>host</code> network mode, the network namespace <code>systemControls</code> aren't supported.</p> </li> </ul> <p>If you're setting an IPC resource namespace to use for the containers in the task, the following conditions apply to your system controls. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_definition_ipcmode\">IPC mode</a>.</p> <ul> <li> <p>For tasks that use the <code>host</code> IPC mode, IPC namespace <code>systemControls</code> aren't supported.</p> </li> <li> <p>For tasks that use the <code>task</code> IPC mode, IPC namespace <code>systemControls</code> values apply to all containers within a task.</p> </li> </ul> <note> <p>This parameter is not supported for Windows containers.</p> </note> <note> <p>This parameter is only supported for tasks that are hosted on Fargate if the tasks are using platform version <code>1.4.0</code> or later (Linux). This isn't supported for Windows containers on Fargate.</p> </note>"
@@ -6249,7 +7091,7 @@
       "members":{
         "resourceArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to add tags to. Currently, the supported resources are Amazon ECS capacity providers, tasks, services, task definitions, clusters, and container instances.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to add tags to. Currently, the supported resources are Amazon ECS capacity providers, tasks, services, task definitions, clusters, and container instances.</p> <p>In order to tag a service that has the following ARN format, you need to migrate the service to the long ARN. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-arn-migration.html\">Migrate an Amazon ECS short service ARN to a long ARN</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p> <code>arn:aws:ecs:region:aws_account_id:service/service-name</code> </p> <p>After the migration is complete, the service has the long ARN format, as shown below. Use this ARN to tag the service.</p> <p> <code>arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name</code> </p> <p>If you try to tag a service with a short ARN, you receive an <code>InvalidParameterException</code> error.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -6259,8 +7101,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -6276,15 +7117,13 @@
     },
     "TargetNotConnectedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The execute command cannot run. This error can be caused by any of the following configuration issues:</p> <ul> <li> <p>Incorrect IAM permissions</p> </li> <li> <p>The SSM agent is not installed or is not running</p> </li> <li> <p> There is an interface Amazon VPC endpoint for Amazon ECS, but there is not one for Systems Manager Session Manager</p> </li> </ul> <p>For information about how to troubleshoot the issues, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html\">Troubleshooting issues with ECS Exec</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>",
       "exception":true
     },
     "TargetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target wasn't found. You can view your available container instances with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListContainerInstances.html\">ListContainerInstances</a>. Amazon ECS container instances are cluster-specific and Region-specific.</p>",
       "exception":true
     },
@@ -6333,7 +7172,7 @@
         },
         "cpu":{
           "shape":"String",
-          "documentation":"<p>The number of CPU units used by the task as expressed in a task definition. It can be expressed as an integer using CPU units (for example, <code>1024</code>). It can also be expressed as a string using vCPUs (for example, <code>1 vCPU</code> or <code>1 vcpu</code>). String values are converted to an integer that indicates the CPU units when the task definition is registered.</p> <p>If you use the EC2 launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>10240</code> CPU units (<code>10</code> vCPUs).</p> <p>If you use the Fargate launch type, this field is required. You must use one of the following values. These values determine the range of supported values for the <code>memory</code> parameter:</p> <p>The CPU units cannot be less than 1 vCPU when you use Windows containers on Fargate.</p> <ul> <li> <p>256 (.25 vCPU) - Available <code>memory</code> values: 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB)</p> </li> <li> <p>512 (.5 vCPU) - Available <code>memory</code> values: 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB)</p> </li> <li> <p>1024 (1 vCPU) - Available <code>memory</code> values: 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)</p> </li> <li> <p>2048 (2 vCPU) - Available <code>memory</code> values: 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>4096 (4 vCPU) - Available <code>memory</code> values: 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>8192 (8 vCPU) - Available <code>memory</code> values: 16 GB and 60 GB in 4 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> <li> <p>16384 (16vCPU) - Available <code>memory</code> values: 32GB and 120 GB in 8 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> </ul>"
+          "documentation":"<p>The number of CPU units used by the task as expressed in a task definition. It can be expressed as an integer using CPU units (for example, <code>1024</code>). It can also be expressed as a string using vCPUs (for example, <code>1 vCPU</code> or <code>1 vcpu</code>). String values are converted to an integer that indicates the CPU units when the task definition is registered.</p> <p>If you're using the EC2 launch type or the external launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>196608</code> CPU units (<code>192</code> vCPUs). If you do not specify a value, the parameter is ignored.</p> <p>This field is required for Fargate. For information about the valid values, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size\">Task size</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
@@ -6503,11 +7342,11 @@
         },
         "requiresCompatibilities":{
           "shape":"CompatibilityList",
-          "documentation":"<p>The task launch types the task definition was validated against. The valid values are <code>EC2</code>, <code>FARGATE</code>, and <code>EXTERNAL</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>The task launch types the task definition was validated against. The valid values are <code>MANAGED_INSTANCES</code>, <code>EC2</code>, <code>FARGATE</code>, and <code>EXTERNAL</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\">Amazon ECS launch types</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
         "cpu":{
           "shape":"String",
-          "documentation":"<p>The number of <code>cpu</code> units used by the task. If you use the EC2 launch type, this field is optional. Any value can be used. If you use the Fargate launch type, this field is required. You must use one of the following values. The value that you choose determines your range of valid values for the <code>memory</code> parameter.</p> <p>If you use the EC2 launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>10240</code> CPU units (<code>10</code> vCPUs).</p> <p>The CPU units cannot be less than 1 vCPU when you use Windows containers on Fargate.</p> <ul> <li> <p>256 (.25 vCPU) - Available <code>memory</code> values: 512 (0.5 GB), 1024 (1 GB), 2048 (2 GB)</p> </li> <li> <p>512 (.5 vCPU) - Available <code>memory</code> values: 1024 (1 GB), 2048 (2 GB), 3072 (3 GB), 4096 (4 GB)</p> </li> <li> <p>1024 (1 vCPU) - Available <code>memory</code> values: 2048 (2 GB), 3072 (3 GB), 4096 (4 GB), 5120 (5 GB), 6144 (6 GB), 7168 (7 GB), 8192 (8 GB)</p> </li> <li> <p>2048 (2 vCPU) - Available <code>memory</code> values: 4096 (4 GB) and 16384 (16 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>4096 (4 vCPU) - Available <code>memory</code> values: 8192 (8 GB) and 30720 (30 GB) in increments of 1024 (1 GB)</p> </li> <li> <p>8192 (8 vCPU) - Available <code>memory</code> values: 16 GB and 60 GB in 4 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> <li> <p>16384 (16vCPU) - Available <code>memory</code> values: 32GB and 120 GB in 8 GB increments</p> <p>This option requires Linux platform <code>1.4.0</code> or later.</p> </li> </ul>"
+          "documentation":"<p>The number of <code>cpu</code> units used by the task. If you use the EC2 launch type, this field is optional. Any value can be used. If you use the Fargate launch type, this field is required. You must use one of the following values. The value that you choose determines your range of valid values for the <code>memory</code> parameter.</p> <p>If you're using the EC2 launch type or the external launch type, this field is optional. Supported values are between <code>128</code> CPU units (<code>0.125</code> vCPUs) and <code>196608</code> CPU units (<code>192</code> vCPUs). </p> <p>This field is required for Fargate. For information about the valid values, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size\">Task size</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
         },
         "memory":{
           "shape":"String",
@@ -6519,7 +7358,7 @@
         },
         "pidMode":{
           "shape":"PidMode",
-          "documentation":"<p>The process namespace to use for the containers in the task. The valid values are <code>host</code> or <code>task</code>. On Fargate for Linux containers, the only valid value is <code>task</code>. For example, monitoring sidecars might need <code>pidMode</code> to access information about other containers running in the same task.</p> <p>If <code>host</code> is specified, all containers within the tasks that specified the <code>host</code> PID mode on the same container instance share the same process namespace with the host Amazon EC2 instance.</p> <p>If <code>task</code> is specified, all containers within the specified task share the same process namespace.</p> <p>If no value is specified, the default is a private namespace for each container.</p> <p>If the <code>host</code> PID mode is used, there's a heightened risk of undesired process namespace exposure.</p> <note> <p>This parameter is not supported for Windows containers.</p> </note> <note> <p>This parameter is only supported for tasks that are hosted on Fargate if the tasks are using platform version <code>1.4.0</code> or later (Linux). This isn't supported for Windows containers on Fargate.</p> </note>"
+          "documentation":"<p>The process namespace to use for the containers in the task. The valid values are <code>host</code> or <code>task</code>. On Fargate for Linux containers, the only valid value is <code>task</code>. For example, monitoring sidecars might need <code>pidMode</code> to access information about other containers running in the same task.</p> <p>If <code>host</code> is specified, all containers within the tasks that specified the <code>host</code> PID mode on the same container instance share the same process namespace with the host Amazon EC2 instance.</p> <p>If <code>task</code> is specified, all containers within the specified task share the same process namespace.</p> <p>If no value is specified, the The default is a private namespace for each container.</p> <p>If the <code>host</code> PID mode is used, there's a heightened risk of undesired process namespace exposure.</p> <note> <p>This parameter is not supported for Windows containers.</p> </note> <note> <p>This parameter is only supported for tasks that are hosted on Fargate if the tasks are using platform version <code>1.4.0</code> or later (Linux). This isn't supported for Windows containers on Fargate.</p> </note>"
         },
         "ipcMode":{
           "shape":"IpcMode",
@@ -6639,11 +7478,11 @@
       "members":{
         "encrypted":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>Indicates whether the volume should be encrypted. If no value is specified, encryption is turned on by default. This parameter maps 1:1 with the <code>Encrypted</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
+          "documentation":"<p>Indicates whether the volume should be encrypted. If you turn on Region-level Amazon EBS encryption by default but set this value as <code>false</code>, the setting is overridden and the volume is encrypted with the KMS key specified for Amazon EBS encryption by default. This parameter maps 1:1 with the <code>Encrypted</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
         },
         "kmsKeyId":{
           "shape":"EBSKMSKeyId",
-          "documentation":"<p>The Amazon Resource Name (ARN) identifier of the Amazon Web Services Key Management Service key to use for Amazon EBS encryption. When encryption is turned on and no Amazon Web Services Key Management Service key is specified, the default Amazon Web Services managed key for Amazon EBS volumes is used. This parameter maps 1:1 with the <code>KmsKeyId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p> <important> <p>Amazon Web Services authenticates the Amazon Web Services Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails.</p> </important>"
+          "documentation":"<p>The Amazon Resource Name (ARN) identifier of the Amazon Web Services Key Management Service key to use for Amazon EBS encryption. When a key is specified using this parameter, it overrides Amazon EBS default encryption or any KMS key that you specified for cluster-level managed storage encryption. This parameter maps 1:1 with the <code>KmsKeyId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>. For more information about encrypting Amazon EBS volumes attached to a task, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-kms-encryption.html\">Encrypt data stored in Amazon EBS volumes attached to Amazon ECS tasks</a>.</p> <important> <p>Amazon Web Services authenticates the Amazon Web Services Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails.</p> </important>"
         },
         "volumeType":{
           "shape":"EBSVolumeType",
@@ -6657,6 +7496,10 @@
           "shape":"EBSSnapshotId",
           "documentation":"<p>The snapshot that Amazon ECS uses to create the volume. You must specify either a snapshot ID or a volume size. This parameter maps 1:1 with the <code>SnapshotId</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
         },
+        "volumeInitializationRate":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The rate, in MiB/s, at which data is fetched from a snapshot of an existing Amazon EBS volume to create a new volume for attachment to the task. This property can be specified only if you specify a <code>snapshotId</code>. For more information, see <a href=\"https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html\">Initialize Amazon EBS volumes</a> in the <i>Amazon EBS User Guide</i>.</p>"
+        },
         "iops":{
           "shape":"BoxedInteger",
           "documentation":"<p>The number of I/O operations per second (IOPS). For <code>gp3</code>, <code>io1</code>, and <code>io2</code> volumes, this represents the number of IOPS that are provisioned for the volume. For <code>gp2</code> volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.</p> <p>The following are the supported values for each volume type.</p> <ul> <li> <p> <code>gp3</code>: 3,000 - 16,000 IOPS</p> </li> <li> <p> <code>io1</code>: 100 - 64,000 IOPS</p> </li> <li> <p> <code>io2</code>: 100 - 256,000 IOPS</p> </li> </ul> <p>This parameter is required for <code>io1</code> and <code>io2</code> volume types. The default for <code>gp3</code> volumes is <code>3,000 IOPS</code>. This parameter is not supported for <code>st1</code>, <code>sc1</code>, or <code>standard</code> volume types.</p> <p>This parameter maps 1:1 with the <code>Iops</code> parameter of the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html\">CreateVolume API</a> in the <i>Amazon EC2 API Reference</i>.</p>"
@@ -6845,8 +7688,7 @@
     },
     "TaskSetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified task set wasn't found. You can view your available task sets with <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTaskSets.html\">DescribeTaskSets</a>. Task sets are specific to each cluster, service and Region.</p>",
       "exception":true
     },
@@ -6884,6 +7726,10 @@
       "type":"list",
       "member":{"shape":"TaskVolumeConfiguration"}
     },
+    "TaskVolumeStorageGiB":{
+      "type":"integer",
+      "min":1
+    },
     "Tasks":{
       "type":"list",
       "member":{"shape":"Task"}
@@ -6929,6 +7775,20 @@
       "type":"list",
       "member":{"shape":"Tmpfs"}
     },
+    "TotalLocalStorageGBRequest":{
+      "type":"structure",
+      "members":{
+        "min":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The minimum total local storage in GB. Instance types with less local storage are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedDouble",
+          "documentation":"<p>The maximum total local storage in GB. Instance types with more local storage are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum total local storage in gigabytes (GB) for instance types with local storage. This is useful for workloads that require local storage for temporary data or caching.</p>"
+    },
     "TransportProtocol":{
       "type":"string",
       "enum":[
@@ -6985,8 +7845,7 @@
     },
     "UnsupportedFeatureException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified task isn't supported in this Region.</p>",
       "exception":true
     },
@@ -7009,23 +7868,27 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCapacityProviderRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "autoScalingGroupProvider"
-      ],
+      "required":["name"],
       "members":{
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the capacity provider to update.</p>"
         },
+        "cluster":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster that contains the capacity provider to update. Managed instances capacity providers are cluster-scoped and can only be updated within their associated cluster.</p>"
+        },
         "autoScalingGroupProvider":{
           "shape":"AutoScalingGroupProviderUpdate",
           "documentation":"<p>An object that represent the parameters to update for the Auto Scaling group capacity provider.</p>"
+        },
+        "managedInstancesProvider":{
+          "shape":"UpdateManagedInstancesProviderConfiguration",
+          "documentation":"<p>The updated configuration for the Amazon ECS Managed Instances provider. You can modify the infrastructure role, instance launch template, and tag propagation settings. Changes take effect for new instances launched after the update.</p>"
         }
       }
     },
@@ -7154,11 +8017,32 @@
     },
     "UpdateInProgressException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There's already a current Amazon ECS container agent update in progress on the container instance that's specified. If the container agent becomes disconnected while it's in a transitional stage, such as <code>PENDING</code> or <code>STAGING</code>, the update process can get stuck in that state. However, when the agent reconnects, it resumes where it stopped previously.</p>",
       "exception":true
     },
+    "UpdateManagedInstancesProviderConfiguration":{
+      "type":"structure",
+      "required":[
+        "infrastructureRoleArn",
+        "instanceLaunchTemplate"
+      ],
+      "members":{
+        "infrastructureRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The updated Amazon Resource Name (ARN) of the infrastructure role. The new role must have the necessary permissions to manage instances and access required Amazon Web Services services.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html\">Amazon ECS infrastructure IAM role</a> in the <i>Amazon ECS Developer Guide</i>.</p>"
+        },
+        "instanceLaunchTemplate":{
+          "shape":"InstanceLaunchTemplateUpdate",
+          "documentation":"<p>The updated launch template configuration. Changes to the launch template affect new instances launched after the update, while existing instances continue to use their original configuration.</p>"
+        },
+        "propagateTags":{
+          "shape":"PropagateMITags",
+          "documentation":"<p>The updated tag propagation setting. When changed, this affects only new instances launched after the update.</p>"
+        }
+      },
+      "documentation":"<p>The updated configuration for a Amazon ECS Managed Instances provider. You can modify the infrastructure role, instance launch template, and tag propagation settings. Changes apply to new instances launched after the update.</p>"
+    },
     "UpdateServicePrimaryTaskSetRequest":{
       "type":"structure",
       "required":[
@@ -7196,7 +8080,7 @@
       "members":{
         "cluster":{
           "shape":"String",
-          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster that your service runs on. If you do not specify a cluster, the default cluster is assumed.</p>"
+          "documentation":"<p>The short name or full Amazon Resource Name (ARN) of the cluster that your service runs on. If you do not specify a cluster, the default cluster is assumed.</p> <p>You can't change the cluster name.</p>"
         },
         "service":{
           "shape":"String",
@@ -7204,39 +8088,39 @@
         },
         "desiredCount":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The number of instantiations of the task to place and keep running in your service.</p>"
+          "documentation":"<p>The number of instantiations of the task to place and keep running in your service.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "taskDefinition":{
           "shape":"String",
-          "documentation":"<p>The <code>family</code> and <code>revision</code> (<code>family:revision</code>) or full ARN of the task definition to run in your service. If a <code>revision</code> is not specified, the latest <code>ACTIVE</code> revision is used. If you modify the task definition with <code>UpdateService</code>, Amazon ECS spawns a task with the new version of the task definition and then stops an old task after the new version is running.</p>"
+          "documentation":"<p>The <code>family</code> and <code>revision</code> (<code>family:revision</code>) or full ARN of the task definition to run in your service. If a <code>revision</code> is not specified, the latest <code>ACTIVE</code> revision is used. If you modify the task definition with <code>UpdateService</code>, Amazon ECS spawns a task with the new version of the task definition and then stops an old task after the new version is running.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "capacityProviderStrategy":{
           "shape":"CapacityProviderStrategy",
-          "documentation":"<p>The capacity provider strategy to update the service to use.</p> <p>if the service uses the default capacity provider strategy for the cluster, the service can be updated to use one or more capacity providers as opposed to the default capacity provider strategy. However, when a service is using a capacity provider strategy that's not the default capacity provider strategy, the service can't be updated to use the cluster's default capacity provider strategy.</p> <p>A capacity provider strategy consists of one or more capacity providers along with the <code>base</code> and <code>weight</code> to assign to them. A capacity provider must be associated with the cluster to be used in a capacity provider strategy. The <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a> API is used to associate a capacity provider with a cluster. Only capacity providers with an <code>ACTIVE</code> or <code>UPDATING</code> status can be used.</p> <p>If specifying a capacity provider that uses an Auto Scaling group, the capacity provider must already be created. New capacity providers can be created with the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateClusterCapacityProvider.html\">CreateClusterCapacityProvider</a> API operation.</p> <p>To use a Fargate capacity provider, specify either the <code>FARGATE</code> or <code>FARGATE_SPOT</code> capacity providers. The Fargate capacity providers are available to all accounts and only need to be associated with a cluster to be used.</p> <p>The <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PutClusterCapacityProviders.html\">PutClusterCapacityProviders</a>API operation is used to update the list of available capacity providers for a cluster after the cluster is created.</p> <p/>"
+          "documentation":"<p>The details of a capacity provider strategy. You can set a capacity provider when you create a cluster, run a task, or update a service.</p> <note> <p>If you want to use Amazon ECS Managed Instances, you must use the <code>capacityProviderStrategy</code> request parameter.</p> </note> <p>When you use Fargate, the capacity providers are <code>FARGATE</code> or <code>FARGATE_SPOT</code>.</p> <p>When you use Amazon EC2, the capacity providers are Auto Scaling groups.</p> <p>You can change capacity providers for rolling deployments and blue/green deployments.</p> <p>The following list provides the valid transitions:</p> <ul> <li> <p>Update the Fargate launch type to an Auto Scaling group capacity provider.</p> </li> <li> <p>Update the Amazon EC2 launch type to a Fargate capacity provider.</p> </li> <li> <p>Update the Fargate capacity provider to an Auto Scaling group capacity provider.</p> </li> <li> <p>Update the Amazon EC2 capacity provider to a Fargate capacity provider. </p> </li> <li> <p>Update the Auto Scaling group or Fargate capacity provider back to the launch type.</p> <p>Pass an empty list in the <code>capacityProviderStrategy</code> parameter.</p> </li> </ul> <p>For information about Amazon Web Services CDK considerations, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service-parameters.html\">Amazon Web Services CDK considerations</a>.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "deploymentConfiguration":{
           "shape":"DeploymentConfiguration",
-          "documentation":"<p>Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks.</p>"
+          "documentation":"<p>Optional deployment parameters that control how many tasks run during the deployment and the ordering of stopping and starting tasks.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "availabilityZoneRebalancing":{
           "shape":"AvailabilityZoneRebalancing",
-          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>Indicates whether to use Availability Zone rebalancing for the service.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-rebalancing.html\">Balancing an Amazon ECS service across Availability Zones</a> in the <i> <i>Amazon Elastic Container Service Developer Guide</i> </i>.</p> <p>The default behavior of <code>AvailabilityZoneRebalancing</code> differs between create and update requests:</p> <ul> <li> <p>For create service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults the value to <code>ENABLED</code>.</p> </li> <li> <p>For update service requests, when no value is specified for <code>AvailabilityZoneRebalancing</code>, Amazon ECS defaults to the existing service’s <code>AvailabilityZoneRebalancing</code> value. If the service never had an <code>AvailabilityZoneRebalancing</code> value set, Amazon ECS treats this as <code>DISABLED</code>.</p> </li> </ul> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "networkConfiguration":{
           "shape":"NetworkConfiguration",
-          "documentation":"<p>An object representing the network configuration for the service.</p>"
+          "documentation":"<p>An object representing the network configuration for the service.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "placementConstraints":{
           "shape":"PlacementConstraints",
-          "documentation":"<p>An array of task placement constraint objects to update the service to use. If no value is specified, the existing placement constraints for the service will remain unchanged. If this value is specified, it will override any existing placement constraints defined for the service. To remove all existing placement constraints, specify an empty array.</p> <p>You can specify a maximum of 10 constraints for each task. This limit includes constraints in the task definition and those specified at runtime.</p>"
+          "documentation":"<p>An array of task placement constraint objects to update the service to use. If no value is specified, the existing placement constraints for the service will remain unchanged. If this value is specified, it will override any existing placement constraints defined for the service. To remove all existing placement constraints, specify an empty array.</p> <p>You can specify a maximum of 10 constraints for each task. This limit includes constraints in the task definition and those specified at runtime.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "placementStrategy":{
           "shape":"PlacementStrategies",
-          "documentation":"<p>The task placement strategy objects to update the service to use. If no value is specified, the existing placement strategy for the service will remain unchanged. If this value is specified, it will override the existing placement strategy defined for the service. To remove an existing placement strategy, specify an empty object.</p> <p>You can specify a maximum of five strategy rules for each service.</p>"
+          "documentation":"<p>The task placement strategy objects to update the service to use. If no value is specified, the existing placement strategy for the service will remain unchanged. If this value is specified, it will override the existing placement strategy defined for the service. To remove an existing placement strategy, specify an empty object.</p> <p>You can specify a maximum of five strategy rules for each service.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "platformVersion":{
           "shape":"String",
-          "documentation":"<p>The platform version that your tasks in the service run on. A platform version is only specified for tasks using the Fargate launch type. If a platform version is not specified, the <code>LATEST</code> platform version is used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html\">Fargate Platform Versions</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>The platform version that your tasks in the service run on. A platform version is only specified for tasks using the Fargate launch type. If a platform version is not specified, the <code>LATEST</code> platform version is used. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html\">Fargate Platform Versions</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "forceNewDeployment":{
           "shape":"Boolean",
@@ -7244,39 +8128,40 @@
         },
         "healthCheckGracePeriodSeconds":{
           "shape":"BoxedInteger",
-          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing, VPC Lattice, and container health checks after a task has first started. If you don't specify a health check grace period value, the default value of <code>0</code> is used. If you don't use any of the health checks, then <code>healthCheckGracePeriodSeconds</code> is unused.</p> <p>If your service's tasks take a while to start and respond to health checks, you can specify a health check grace period of up to 2,147,483,647 seconds (about 69 years). During that time, the Amazon ECS service scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks as unhealthy and stopping them before they have time to come up.</p>"
+          "documentation":"<p>The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing, VPC Lattice, and container health checks after a task has first started. If you don't specify a health check grace period value, the default value of <code>0</code> is used. If you don't use any of the health checks, then <code>healthCheckGracePeriodSeconds</code> is unused.</p> <p>If your service's tasks take a while to start and respond to health checks, you can specify a health check grace period of up to 2,147,483,647 seconds (about 69 years). During that time, the Amazon ECS service scheduler ignores health check status. This grace period can prevent the service scheduler from marking tasks as unhealthy and stopping them before they have time to come up.</p> <p>If your service has more running tasks than desired, unhealthy tasks in the grace period might be stopped to reach the desired count.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
+        "deploymentController":{"shape":"DeploymentController"},
         "enableExecuteCommand":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>If <code>true</code>, this enables execute command functionality on all task containers.</p> <p>If you do not want to override the value that was set when the service was created, you can set this to <code>null</code> when performing this action.</p>"
+          "documentation":"<p>If <code>true</code>, this enables execute command functionality on all task containers.</p> <p>If you do not want to override the value that was set when the service was created, you can set this to <code>null</code> when performing this action.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "enableECSManagedTags":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>Determines whether to turn on Amazon ECS managed tags for the tasks in the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html\">Tagging Your Amazon ECS Resources</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Only tasks launched after the update will reflect the update. To update the tags on all tasks, set <code>forceNewDeployment</code> to <code>true</code>, so that Amazon ECS starts new tasks with the updated tags.</p>"
+          "documentation":"<p>Determines whether to turn on Amazon ECS managed tags for the tasks in the service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html\">Tagging Your Amazon ECS Resources</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>Only tasks launched after the update will reflect the update. To update the tags on all tasks, set <code>forceNewDeployment</code> to <code>true</code>, so that Amazon ECS starts new tasks with the updated tags.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "loadBalancers":{
           "shape":"LoadBalancers",
-          "documentation":"<p>A list of Elastic Load Balancing load balancer objects. It contains the load balancer name, the container name, and the container port to access from the load balancer. The container name is as it appears in a container definition.</p> <p>When you add, update, or remove a load balancer configuration, Amazon ECS starts new tasks with the updated Elastic Load Balancing configuration, and then stops the old tasks when the new tasks are running.</p> <p>For services that use rolling updates, you can add, update, or remove Elastic Load Balancing target groups. You can update from a single target group to multiple target groups and from multiple target groups to a single target group.</p> <p>For services that use blue/green deployments, you can update Elastic Load Balancing target groups by using <code> <a href=\"https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html\">CreateDeployment</a> </code> through CodeDeploy. Note that multiple target groups are not supported for blue/green deployments. For more information see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html\">Register multiple target groups with a service</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. </p> <p>For services that use the external deployment controller, you can add, update, or remove load balancers by using <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>. Note that multiple target groups are not supported for external deployments. For more information see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html\">Register multiple target groups with a service</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. </p> <p>You can remove existing <code>loadBalancers</code> by passing an empty list.</p>"
+          "documentation":"<note> <p>You must have a service-linked role when you update this property</p> </note> <p>A list of Elastic Load Balancing load balancer objects. It contains the load balancer name, the container name, and the container port to access from the load balancer. The container name is as it appears in a container definition.</p> <p>When you add, update, or remove a load balancer configuration, Amazon ECS starts new tasks with the updated Elastic Load Balancing configuration, and then stops the old tasks when the new tasks are running.</p> <p>For services that use rolling updates, you can add, update, or remove Elastic Load Balancing target groups. You can update from a single target group to multiple target groups and from multiple target groups to a single target group.</p> <p>For services that use blue/green deployments, you can update Elastic Load Balancing target groups by using <code> <a href=\"https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html\">CreateDeployment</a> </code> through CodeDeploy. Note that multiple target groups are not supported for blue/green deployments. For more information see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html\">Register multiple target groups with a service</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. </p> <p>For services that use the external deployment controller, you can add, update, or remove load balancers by using <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateTaskSet.html\">CreateTaskSet</a>. Note that multiple target groups are not supported for external deployments. For more information see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html\">Register multiple target groups with a service</a> in the <i>Amazon Elastic Container Service Developer Guide</i>. </p> <p>You can remove existing <code>loadBalancers</code> by passing an empty list.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "propagateTags":{
           "shape":"PropagateTags",
-          "documentation":"<p>Determines whether to propagate the tags from the task definition or the service to the task. If no value is specified, the tags aren't propagated.</p> <p>Only tasks launched after the update will reflect the update. To update the tags on all tasks, set <code>forceNewDeployment</code> to <code>true</code>, so that Amazon ECS starts new tasks with the updated tags.</p>"
+          "documentation":"<p>Determines whether to propagate the tags from the task definition or the service to the task. If no value is specified, the tags aren't propagated.</p> <p>Only tasks launched after the update will reflect the update. To update the tags on all tasks, set <code>forceNewDeployment</code> to <code>true</code>, so that Amazon ECS starts new tasks with the updated tags.</p> <p>This parameter doesn't trigger a new service deployment.</p>"
         },
         "serviceRegistries":{
           "shape":"ServiceRegistries",
-          "documentation":"<p>The details for the service discovery registries to assign to this service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html\">Service Discovery</a>.</p> <p>When you add, update, or remove the service registries configuration, Amazon ECS starts new tasks with the updated service registries configuration, and then stops the old tasks when the new tasks are running.</p> <p>You can remove existing <code>serviceRegistries</code> by passing an empty list.</p>"
+          "documentation":"<note> <p>You must have a service-linked role when you update this property.</p> <p>For more information about the role see the <code>CreateService</code> request parameter <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_CreateService.html#ECS-CreateService-request-role\"> <code>role</code> </a>. </p> </note> <p>The details for the service discovery registries to assign to this service. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html\">Service Discovery</a>.</p> <p>When you add, update, or remove the service registries configuration, Amazon ECS starts new tasks with the updated service registries configuration, and then stops the old tasks when the new tasks are running.</p> <p>You can remove existing <code>serviceRegistries</code> by passing an empty list.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "serviceConnectConfiguration":{
           "shape":"ServiceConnectConfiguration",
-          "documentation":"<p>The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.</p> <p>Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p>"
+          "documentation":"<p>The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.</p> <p>Tasks that run in a namespace can use short names to connect to services in the namespace. Tasks can connect to services across all of the clusters in the namespace. Tasks connect through a managed proxy container that collects logs and metrics for increased visibility. Only the tasks that Amazon ECS services create are supported with Service Connect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect.html\">Service Connect</a> in the <i>Amazon Elastic Container Service Developer Guide</i>.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "volumeConfigurations":{
           "shape":"ServiceVolumeConfigurations",
-          "documentation":"<p>The details of the volume that was <code>configuredAtLaunch</code>. You can configure the size, volumeType, IOPS, throughput, snapshot and encryption in <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceManagedEBSVolumeConfiguration.html\">ServiceManagedEBSVolumeConfiguration</a>. The <code>name</code> of the volume must match the <code>name</code> from the task definition. If set to null, no new deployment is triggered. Otherwise, if this configuration differs from the existing one, it triggers a new deployment.</p>"
+          "documentation":"<p>The details of the volume that was <code>configuredAtLaunch</code>. You can configure the size, volumeType, IOPS, throughput, snapshot and encryption in <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceManagedEBSVolumeConfiguration.html\">ServiceManagedEBSVolumeConfiguration</a>. The <code>name</code> of the volume must match the <code>name</code> from the task definition. If set to null, no new deployment is triggered. Otherwise, if this configuration differs from the existing one, it triggers a new deployment.</p> <p>This parameter triggers a new service deployment.</p>"
         },
         "vpcLatticeConfigurations":{
           "shape":"VpcLatticeConfigurations",
-          "documentation":"<p>An object representing the VPC Lattice configuration for the service being updated.</p>"
+          "documentation":"<p>An object representing the VPC Lattice configuration for the service being updated.</p> <p>This parameter triggers a new service deployment.</p>"
         }
       }
     },
@@ -7364,6 +8249,21 @@
         }
       }
     },
+    "VCpuCountRangeRequest":{
+      "type":"structure",
+      "required":["min"],
+      "members":{
+        "min":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The minimum number of vCPUs. Instance types with fewer vCPUs than this value are excluded from selection.</p>"
+        },
+        "max":{
+          "shape":"BoxedInteger",
+          "documentation":"<p>The maximum number of vCPUs. Instance types with more vCPUs than this value are excluded from selection.</p>"
+        }
+      },
+      "documentation":"<p>The minimum and maximum number of vCPUs for instance type selection. This allows you to specify a range of vCPU counts that meet your workload requirements.</p>"
+    },
     "VersionConsistency":{
       "type":"string",
       "enum":[
@@ -7380,7 +8280,7 @@
         },
         "agentHash":{
           "shape":"String",
-          "documentation":"<p>The Git commit hash for the Amazon ECS container agent build on the <a href=\"https://github.com/aws/amazon-ecs-agent/commits/master\">amazon-ecs-agent </a> GitHub repository.</p>"
+          "documentation":"<p>The Git commit hash for the Amazon ECS container agent build on the <a href=\"https://github.com/aws/amazon-ecs-agent\">amazon-ecs-agent </a> GitHub repository.</p>"
         },
         "dockerVersion":{
           "shape":"String",
diff -pruN 2.23.6-1/awscli/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/efs/2015-02-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,258 +57,546 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://efs.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "rules": [
+                                    "endpoint": {
+                                        "url": "https://efs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://elasticfilesystem-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-cn"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://efs.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-cn"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://efs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://efs.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://efs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://elasticfilesystem-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://elasticfilesystem-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://elasticfilesystem-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://elasticfilesystem.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://elasticfilesystem.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://elasticfilesystem.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://elasticfilesystem.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/efs/2015-02-01/service-2.json 2.31.35-1/awscli/botocore/data/efs/2015-02-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/efs/2015-02-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/efs/2015-02-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -31,7 +31,7 @@
         {"shape":"AccessPointLimitExceeded"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates an EFS access point. An access point is an application-specific view into an EFS file system that applies an operating system user and group, and a file system path, to any file system request made through the access point. The operating system user and group override any identity information provided by the NFS client. The file system path is exposed as the access point's root directory. Applications using the access point can only access data in the application's own directory and any subdirectories. To learn more, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html\">Mounting a file system using EFS access points</a>.</p> <note> <p>If multiple requests to create access points on the same file system are sent in quick succession, and the file system is near the limit of 1,000 access points, you may experience a throttling response for these requests. This is to ensure that the file system does not exceed the stated access point limit.</p> </note> <p>This operation requires permissions for the <code>elasticfilesystem:CreateAccessPoint</code> action.</p> <p>Access points can be tagged on creation. If tags are specified in the creation action, IAM performs additional authorization on the <code>elasticfilesystem:TagResource</code> action to verify if users have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>elasticfilesystem:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/using-tags-efs.html#supported-iam-actions-tagging.html\">Granting permissions to tag resources during creation</a>.</p>"
+      "documentation":"<p>Creates an EFS access point. An access point is an application-specific view into an EFS file system that applies an operating system user and group, and a file system path, to any file system request made through the access point. The operating system user and group override any identity information provided by the NFS client. The file system path is exposed as the access point's root directory. Applications using the access point can only access data in the application's own directory and any subdirectories. A file system can have a maximum of 10,000 access points unless you request an increase. To learn more, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html\">Mounting a file system using EFS access points</a>.</p> <note> <p>If multiple requests to create access points on the same file system are sent in quick succession, and the file system is near the limit of access points, you may experience a throttling response for these requests. This is to ensure that the file system does not exceed the stated access point limit.</p> </note> <p>This operation requires permissions for the <code>elasticfilesystem:CreateAccessPoint</code> action.</p> <p>Access points can be tagged on creation. If tags are specified in the creation action, IAM performs additional authorization on the <code>elasticfilesystem:TagResource</code> action to verify if users have permissions to create tags. Therefore, you must grant explicit permissions to use the <code>elasticfilesystem:TagResource</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/using-tags-efs.html#supported-iam-actions-tagging.html\">Granting permissions to tag resources during creation</a>.</p>"
     },
     "CreateFileSystem":{
       "name":"CreateFileSystem",
@@ -77,7 +77,7 @@
         {"shape":"UnsupportedAvailabilityZone"},
         {"shape":"AvailabilityZonesMismatch"}
       ],
-      "documentation":"<p>Creates a mount target for a file system. You can then mount the file system on EC2 instances by using the mount target.</p> <p>You can create one mount target in each Availability Zone in your VPC. All EC2 instances in a VPC within a given Availability Zone share a single mount target for a given file system. If you have multiple subnets in an Availability Zone, you create a mount target in one of the subnets. EC2 instances do not need to be in the same subnet as the mount target in order to access their file system.</p> <p>You can create only one mount target for a One Zone file system. You must create that mount target in the same Availability Zone in which the file system is located. Use the <code>AvailabilityZoneName</code> and <code>AvailabiltyZoneId</code> properties in the <a>DescribeFileSystems</a> response object to get this information. Use the <code>subnetId</code> associated with the file system's Availability Zone when creating the mount target.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/how-it-works.html\">Amazon EFS: How it Works</a>. </p> <p>To create a mount target for a file system, the file system's lifecycle state must be <code>available</code>. For more information, see <a>DescribeFileSystems</a>.</p> <p>In the request, provide the following:</p> <ul> <li> <p>The file system ID for which you are creating the mount target.</p> </li> <li> <p>A subnet ID, which determines the following:</p> <ul> <li> <p>The VPC in which Amazon EFS creates the mount target</p> </li> <li> <p>The Availability Zone in which Amazon EFS creates the mount target</p> </li> <li> <p>The IP address range from which Amazon EFS selects the IP address of the mount target (if you don't specify an IP address in the request)</p> </li> </ul> </li> </ul> <p>After creating the mount target, Amazon EFS returns a response that includes, a <code>MountTargetId</code> and an <code>IpAddress</code>. You use this IP address when mounting the file system in an EC2 instance. You can also use the mount target's DNS name when mounting the file system. The EC2 instance on which you mount the file system by using the mount target can resolve the mount target's DNS name to its IP address. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/how-it-works.html#how-it-works-implementation\">How it Works: Implementation Overview</a>. </p> <p>Note that you can create mount targets for a file system in only one VPC, and there can be only one mount target per Availability Zone. That is, if the file system already has one or more mount targets created for it, the subnet specified in the request to add another mount target must meet the following requirements:</p> <ul> <li> <p>Must belong to the same VPC as the subnets of the existing mount targets</p> </li> <li> <p>Must not be in the same Availability Zone as any of the subnets of the existing mount targets</p> </li> </ul> <p>If the request satisfies the requirements, Amazon EFS does the following:</p> <ul> <li> <p>Creates a new mount target in the specified subnet.</p> </li> <li> <p>Also creates a new network interface in the subnet as follows:</p> <ul> <li> <p>If the request provides an <code>IpAddress</code>, Amazon EFS assigns that IP address to the network interface. Otherwise, Amazon EFS assigns a free address in the subnet (in the same way that the Amazon EC2 <code>CreateNetworkInterface</code> call does when a request does not specify a primary private IP address).</p> </li> <li> <p>If the request provides <code>SecurityGroups</code>, this network interface is associated with those security groups. Otherwise, it belongs to the default security group for the subnet's VPC.</p> </li> <li> <p>Assigns the description <code>Mount target <i>fsmt-id</i> for file system <i>fs-id</i> </code> where <code> <i>fsmt-id</i> </code> is the mount target ID, and <code> <i>fs-id</i> </code> is the <code>FileSystemId</code>.</p> </li> <li> <p>Sets the <code>requesterManaged</code> property of the network interface to <code>true</code>, and the <code>requesterId</code> value to <code>EFS</code>.</p> </li> </ul> <p>Each Amazon EFS mount target has one corresponding requester-managed EC2 network interface. After the network interface is created, Amazon EFS sets the <code>NetworkInterfaceId</code> field in the mount target's description to the network interface ID, and the <code>IpAddress</code> field to its address. If network interface creation fails, the entire <code>CreateMountTarget</code> operation fails.</p> </li> </ul> <note> <p>The <code>CreateMountTarget</code> call returns only after creating the network interface, but while the mount target state is still <code>creating</code>, you can check the mount target creation status by calling the <a>DescribeMountTargets</a> operation, which among other things returns the mount target state.</p> </note> <p>We recommend that you create a mount target in each of the Availability Zones. There are cost considerations for using a file system in an Availability Zone through a mount target created in another Availability Zone. For more information, see <a href=\"http://aws.amazon.com/efs/\">Amazon EFS</a>. In addition, by always using a mount target local to the instance's Availability Zone, you eliminate a partial failure scenario. If the Availability Zone in which your mount target is created goes down, then you can't access your file system through that mount target. </p> <p>This operation requires permissions for the following action on the file system:</p> <ul> <li> <p> <code>elasticfilesystem:CreateMountTarget</code> </p> </li> </ul> <p>This operation also requires permissions for the following Amazon EC2 actions:</p> <ul> <li> <p> <code>ec2:DescribeSubnets</code> </p> </li> <li> <p> <code>ec2:DescribeNetworkInterfaces</code> </p> </li> <li> <p> <code>ec2:CreateNetworkInterface</code> </p> </li> </ul>"
+      "documentation":"<p>Creates a mount target for a file system. You can then mount the file system on EC2 instances by using the mount target.</p> <p>You can create one mount target in each Availability Zone in your VPC. All EC2 instances in a VPC within a given Availability Zone share a single mount target for a given file system. If you have multiple subnets in an Availability Zone, you create a mount target in one of the subnets. EC2 instances do not need to be in the same subnet as the mount target in order to access their file system.</p> <p>You can create only one mount target for a One Zone file system. You must create that mount target in the same Availability Zone in which the file system is located. Use the <code>AvailabilityZoneName</code> and <code>AvailabiltyZoneId</code> properties in the <a>DescribeFileSystems</a> response object to get this information. Use the <code>subnetId</code> associated with the file system's Availability Zone when creating the mount target.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/how-it-works.html\">Amazon EFS: How it Works</a>. </p> <p>To create a mount target for a file system, the file system's lifecycle state must be <code>available</code>. For more information, see <a>DescribeFileSystems</a>.</p> <p>In the request, provide the following:</p> <ul> <li> <p>The file system ID for which you are creating the mount target.</p> </li> <li> <p>A subnet ID, which determines the following:</p> <ul> <li> <p>The VPC in which Amazon EFS creates the mount target</p> </li> <li> <p>The Availability Zone in which Amazon EFS creates the mount target</p> </li> <li> <p>The IP address range from which Amazon EFS selects the IP address of the mount target (if you don't specify an IP address in the request)</p> </li> </ul> </li> </ul> <p>After creating the mount target, Amazon EFS returns a response that includes, a <code>MountTargetId</code> and an <code>IpAddress</code>. You use this IP address when mounting the file system in an EC2 instance. You can also use the mount target's DNS name when mounting the file system. The EC2 instance on which you mount the file system by using the mount target can resolve the mount target's DNS name to its IP address. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/how-it-works.html#how-it-works-implementation\">How it Works: Implementation Overview</a>. </p> <p>Note that you can create mount targets for a file system in only one VPC, and there can be only one mount target per Availability Zone. That is, if the file system already has one or more mount targets created for it, the subnet specified in the request to add another mount target must meet the following requirements:</p> <ul> <li> <p>Must belong to the same VPC as the subnets of the existing mount targets</p> </li> <li> <p>Must not be in the same Availability Zone as any of the subnets of the existing mount targets</p> </li> </ul> <p>If the request satisfies the requirements, Amazon EFS does the following:</p> <ul> <li> <p>Creates a new mount target in the specified subnet.</p> </li> <li> <p>Also creates a new network interface in the subnet as follows:</p> <ul> <li> <p>If the request provides an <code>IpAddress</code>, Amazon EFS assigns that IP address to the network interface. Otherwise, Amazon EFS assigns a free address in the subnet (in the same way that the Amazon EC2 <code>CreateNetworkInterface</code> call does when a request does not specify a primary private IP address).</p> </li> <li> <p>If the request provides <code>SecurityGroups</code>, this network interface is associated with those security groups. Otherwise, it belongs to the default security group for the subnet's VPC.</p> </li> <li> <p>Assigns the description <code>Mount target <i>fsmt-id</i> for file system <i>fs-id</i> </code> where <code> <i>fsmt-id</i> </code> is the mount target ID, and <code> <i>fs-id</i> </code> is the <code>FileSystemId</code>.</p> </li> <li> <p>Sets the <code>requesterManaged</code> property of the network interface to <code>true</code>, and the <code>requesterId</code> value to <code>EFS</code>.</p> </li> </ul> <p>Each Amazon EFS mount target has one corresponding requester-managed EC2 network interface. After the network interface is created, Amazon EFS sets the <code>NetworkInterfaceId</code> field in the mount target's description to the network interface ID, and the <code>IpAddress</code> field to its address. If network interface creation fails, the entire <code>CreateMountTarget</code> operation fails.</p> </li> </ul> <note> <p>The <code>CreateMountTarget</code> call returns only after creating the network interface, but while the mount target state is still <code>creating</code>, you can check the mount target creation status by calling the <a>DescribeMountTargets</a> operation, which among other things returns the mount target state.</p> </note> <p>We recommend that you create a mount target in each of the Availability Zones. There are cost considerations for using a file system in an Availability Zone through a mount target created in another Availability Zone. For more information, see <a href=\"http://aws.amazon.com/efs/pricing/\">Amazon EFS pricing</a>. In addition, by always using a mount target local to the instance's Availability Zone, you eliminate a partial failure scenario. If the Availability Zone in which your mount target is created goes down, then you can't access your file system through that mount target. </p> <p>This operation requires permissions for the following action on the file system:</p> <ul> <li> <p> <code>elasticfilesystem:CreateMountTarget</code> </p> </li> </ul> <p>This operation also requires permissions for the following Amazon EC2 actions:</p> <ul> <li> <p> <code>ec2:DescribeSubnets</code> </p> </li> <li> <p> <code>ec2:DescribeNetworkInterfaces</code> </p> </li> <li> <p> <code>ec2:CreateNetworkInterface</code> </p> </li> </ul>"
     },
     "CreateReplicationConfiguration":{
       "name":"CreateReplicationConfiguration",
@@ -312,7 +312,7 @@
         {"shape":"BadRequest"},
         {"shape":"FileSystemNotFound"}
       ],
-      "documentation":"<p>Returns the current <code>LifecycleConfiguration</code> object for the specified Amazon EFS file system. Lifecycle management uses the <code>LifecycleConfiguration</code> object to identify when to move files between storage classes. For a file system without a <code>LifecycleConfiguration</code> object, the call returns an empty array in the response.</p> <p>This operation requires permissions for the <code>elasticfilesystem:DescribeLifecycleConfiguration</code> operation.</p>"
+      "documentation":"<p>Returns the current <code>LifecycleConfiguration</code> object for the specified EFS file system. Lifecycle management uses the <code>LifecycleConfiguration</code> object to identify when to move files between storage classes. For a file system without a <code>LifecycleConfiguration</code> object, the call returns an empty array in the response.</p> <p>This operation requires permissions for the <code>elasticfilesystem:DescribeLifecycleConfiguration</code> operation.</p>"
     },
     "DescribeMountTargetSecurityGroups":{
       "name":"DescribeMountTargetSecurityGroups",
@@ -789,7 +789,7 @@
         },
         "ProvisionedThroughputInMibps":{
           "shape":"ProvisionedThroughputInMibps",
-          "documentation":"<p>The throughput, measured in mebibytes per second (MiBps), that you want to provision for a file system that you're creating. Required if <code>ThroughputMode</code> is set to <code>provisioned</code>. Valid values are 1-3414 MiBps, with the upper limit depending on Region. To increase this limit, contact Amazon Web Services Support. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/limits.html#soft-limits\">Amazon EFS quotas that you can increase</a> in the <i>Amazon EFS User Guide</i>.</p>"
+          "documentation":"<p>The throughput, measured in mebibytes per second (MiBps), that you want to provision for a file system that you're creating. Required if <code>ThroughputMode</code> is set to <code>provisioned</code>. Valid values are 1-3414 MiBps, with the upper limit depending on Region. To increase this limit, contact Amazon Web ServicesSupport. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/limits.html#soft-limits\">Amazon EFS quotas that you can increase</a> in the <i>Amazon EFS User Guide</i>.</p>"
         },
         "AvailabilityZoneName":{
           "shape":"AvailabilityZoneName",
@@ -822,11 +822,19 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>Valid IPv4 address within the address range of the specified subnet.</p>"
+          "documentation":"<p>If the IP address type for the mount target is IPv4, then specify the IPv4 address within the address range of the specified subnet.</p>"
+        },
+        "Ipv6Address":{
+          "shape":"Ipv6Address",
+          "documentation":"<p>If the IP address type for the mount target is IPv6, then specify the IPv6 address within the address range of the specified subnet.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>Specify the type of IP address of the mount target you are creating. Options are IPv4, dual stack, or IPv6. If you don’t specify an IpAddressType, then IPv4 is used.</p> <ul> <li> <p>IPV4_ONLY – Create mount target with IPv4 only subnet or dual-stack subnet.</p> </li> <li> <p>DUAL_STACK – Create mount target with dual-stack subnet.</p> </li> <li> <p>IPV6_ONLY – Create mount target with IPv6 only subnet.</p> </li> </ul> <note> <p>Creating IPv6 mount target only ENI in dual-stack subnet is not supported.</p> </note>"
         },
         "SecurityGroups":{
           "shape":"SecurityGroups",
-          "documentation":"<p>Up to five VPC security group IDs, of the form <code>sg-xxxxxxxx</code>. These must be for the same VPC as subnet specified.</p>"
+          "documentation":"<p>VPC security group IDs, of the form <code>sg-xxxxxxxx</code>. These must be for the same VPC as the subnet specified. The maximum number of security groups depends on account quota. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html\">Amazon VPC Quotas</a> in the <i>Amazon VPC User Guide</i> (see the <b>Security Groups</b> table). </p>"
         }
       },
       "documentation":"<p/>"
@@ -1369,7 +1377,7 @@
         },
         "FileSystemId":{
           "shape":"FileSystemId",
-          "documentation":"<p>The ID or ARN of the file system to use for the destination. For cross-account replication, this must be an ARN. The file system's replication overwrite replication must be disabled. If no ID or ARN is specified, then a new file system is created. </p>"
+          "documentation":"<p>The ID or ARN of the file system to use for the destination. For cross-account replication, this must be an ARN. The file system's replication overwrite replication must be disabled. If no ID or ARN is specified, then a new file system is created. </p> <note> <p>When you initially configure replication to an existing file system, Amazon EFS writes data to or removes existing data from the destination file system to match data in the source file system. If you don't want to change data in the destination file system, then you should replicate to a new file system instead. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/create-replication.html\">https://docs.aws.amazon.com/efs/latest/ug/create-replication.html</a>.</p> </note>"
         },
         "RoleArn":{
           "shape":"RoleArn",
@@ -1565,7 +1573,7 @@
       "members":{
         "ReplicationOverwriteProtection":{
           "shape":"ReplicationOverwriteProtection",
-          "documentation":"<p>The status of the file system's replication overwrite protection.</p> <ul> <li> <p> <code>ENABLED</code> – The file system cannot be used as the destination file system in a replication configuration. The file system is writeable. Replication overwrite protection is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>DISABLED</code> – The file system can be used as the destination file system in a replication configuration. The file system is read-only and can only be modified by EFS replication.</p> </li> <li> <p> <code>REPLICATING</code> – The file system is being used as the destination file system in a replication configuration. The file system is read-only and is only modified only by EFS replication.</p> </li> </ul> <p>If the replication configuration is deleted, the file system's replication overwrite protection is re-enabled, the file system becomes writeable.</p>"
+          "documentation":"<p>The status of the file system's replication overwrite protection.</p> <ul> <li> <p> <code>ENABLED</code> – The file system cannot be used as the destination file system in a replication configuration. The file system is writeable. Replication overwrite protection is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>DISABLED</code> – The file system can be used as the destination file system in a replication configuration. The file system is read-only and can only be modified by EFS replication.</p> </li> <li> <p> <code>REPLICATING</code> – The file system is being used as the destination file system in a replication configuration. The file system is read-only and is modified only by EFS replication.</p> </li> </ul> <p>If the replication configuration is deleted, the file system's replication overwrite protection is re-enabled, the file system becomes writeable.</p>"
         }
       },
       "documentation":"<p>Describes the protection on a file system. </p>"
@@ -1677,6 +1685,19 @@
       "error":{"httpStatusCode":409},
       "exception":true
     },
+    "IpAddressType":{
+      "type":"string",
+      "enum":[
+        "IPV4_ONLY",
+        "IPV6_ONLY",
+        "DUAL_STACK"
+      ]
+    },
+    "Ipv6Address":{
+      "type":"string",
+      "max":39,
+      "min":3
+    },
     "KmsKeyId":{
       "type":"string",
       "max":2048,
@@ -1789,7 +1810,7 @@
         },
         "SecurityGroups":{
           "shape":"SecurityGroups",
-          "documentation":"<p>An array of up to five VPC security group IDs.</p>"
+          "documentation":"<p>An array of VPC security group IDs. </p>"
         }
       },
       "documentation":"<p/>"
@@ -1842,6 +1863,10 @@
           "shape":"IpAddress",
           "documentation":"<p>Address at which the file system can be mounted by using the mount target.</p>"
         },
+        "Ipv6Address":{
+          "shape":"Ipv6Address",
+          "documentation":"<p>The IPv6 address for the mount target.</p>"
+        },
         "NetworkInterfaceId":{
           "shape":"NetworkInterfaceId",
           "documentation":"<p>The ID of the network interface that Amazon EFS created when it created the mount target.</p>"
@@ -1891,7 +1916,7 @@
         "ErrorCode":{"shape":"ErrorCode"},
         "Message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>The calling account has reached the limit for elastic network interfaces for the specific Amazon Web Services Region. Either delete some network interfaces or request that the account quota be raised. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html\">Amazon VPC Quotas</a> in the <i>Amazon VPC User Guide</i> (see the <b>Network interfaces per Region</b> entry in the <b>Network interfaces</b> table). </p>",
+      "documentation":"<p>The calling account has reached the limit for elastic network interfaces for the specific Amazon Web Services Region. Either delete some network interfaces or request that the account quota be raised. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html\">Amazon VPC Quotas</a> in the <i>Amazon VPC User Guide</i> (see the <b>Network interfaces per Region</b> entry in the <b>Network interfaces</b> table). </p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
@@ -1947,7 +1972,7 @@
         "ErrorCode":{"shape":"ErrorCode"},
         "Message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>Returned if the default file system policy is in effect for the EFS file system specified.</p>",
+      "documentation":"<p>Returned if <code>no backup</code> is specified for a One Zone EFS file system.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
     },
@@ -2226,7 +2251,7 @@
         "ErrorCode":{"shape":"ErrorCode"},
         "Message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>Returned if the size of <code>SecurityGroups</code> specified in the request is greater than five.</p>",
+      "documentation":"<p>Returned if the number of <code>SecurityGroups</code> specified in the request is greater than the limit, which is based on account quota. Either delete some security groups or request that the account quota be raised. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html\">Amazon VPC Quotas</a> in the <i>Amazon VPC User Guide</i> (see the <b>Security Groups</b> table). </p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -2480,7 +2505,7 @@
         },
         "ProvisionedThroughputInMibps":{
           "shape":"ProvisionedThroughputInMibps",
-          "documentation":"<p>(Optional) The throughput, measured in mebibytes per second (MiBps), that you want to provision for a file system that you're creating. Required if <code>ThroughputMode</code> is set to <code>provisioned</code>. Valid values are 1-3414 MiBps, with the upper limit depending on Region. To increase this limit, contact Amazon Web Services Support. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/limits.html#soft-limits\">Amazon EFS quotas that you can increase</a> in the <i>Amazon EFS User Guide</i>.</p>"
+          "documentation":"<p>(Optional) The throughput, measured in mebibytes per second (MiBps), that you want to provision for a file system that you're creating. Required if <code>ThroughputMode</code> is set to <code>provisioned</code>. Valid values are 1-3414 MiBps, with the upper limit depending on Region. To increase this limit, contact Amazon Web ServicesSupport. For more information, see <a href=\"https://docs.aws.amazon.com/efs/latest/ug/limits.html#soft-limits\">Amazon EFS quotas that you can increase</a> in the <i>Amazon EFS User Guide</i>.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/eks/2017-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/eks/2017-11-01/service-2.json 2.31.35-1/awscli/botocore/data/eks/2017-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/eks/2017-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/eks/2017-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -45,7 +45,8 @@
         {"shape":"ServerException"},
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Associates an encryption configuration to an existing cluster.</p> <p>Use this API to enable encryption on existing clusters that don't already have encryption enabled. This allows you to implement a defense-in-depth security strategy without migrating applications to new Amazon EKS clusters.</p>"
     },
@@ -63,7 +64,8 @@
         {"shape":"ServerException"},
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Associates an identity provider configuration to a cluster.</p> <p>If you want to authenticate identities using an identity provider, you can create an identity provider configuration and associate it to your cluster. After configuring authentication to your cluster you can create Kubernetes <code>Role</code> and <code>ClusterRole</code> objects, assign permissions to them, and then bind them to the identities using Kubernetes <code>RoleBinding</code> and <code>ClusterRoleBinding</code> objects. For more information see <a href=\"https://kubernetes.io/docs/reference/access-authn-authz/rbac/\">Using RBAC Authorization</a> in the Kubernetes documentation.</p>"
     },
@@ -120,7 +122,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"UnsupportedAvailabilityZoneException"}
       ],
-      "documentation":"<p>Creates an Amazon EKS control plane.</p> <p>The Amazon EKS control plane consists of control plane instances that run the Kubernetes software, such as <code>etcd</code> and the API server. The control plane runs in an account managed by Amazon Web Services, and the Kubernetes API is exposed by the Amazon EKS API server endpoint. Each Amazon EKS cluster control plane is single tenant and unique. It runs on its own set of Amazon EC2 instances.</p> <p>The cluster control plane is provisioned across multiple Availability Zones and fronted by an Elastic Load Balancing Network Load Balancer. Amazon EKS also provisions elastic network interfaces in your VPC subnets to provide connectivity from the control plane instances to the nodes (for example, to support <code>kubectl exec</code>, <code>logs</code>, and <code>proxy</code> data flows).</p> <p>Amazon EKS nodes run in your Amazon Web Services account and connect to your cluster's control plane over the Kubernetes API server endpoint and a certificate file that is created for your cluster.</p> <p>You can use the <code>endpointPublicAccess</code> and <code>endpointPrivateAccess</code> parameters to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>. </p> <p>You can use the <code>logging</code> parameter to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html\">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href=\"http://aws.amazon.com/cloudwatch/pricing/\">CloudWatch Pricing</a>.</p> </note> <p>In most cases, it takes several minutes to create a cluster. After you create an Amazon EKS cluster, you must configure your Kubernetes tooling to communicate with the API server and launch nodes into your cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html\">Allowing users to access your cluster</a> and <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html\">Launching Amazon EKS nodes</a> in the <i>Amazon EKS User Guide</i>.</p>"
+      "documentation":"<p>Creates an Amazon EKS control plane.</p> <p>The Amazon EKS control plane consists of control plane instances that run the Kubernetes software, such as <code>etcd</code> and the API server. The control plane runs in an account managed by Amazon Web Services, and the Kubernetes API is exposed by the Amazon EKS API server endpoint. Each Amazon EKS cluster control plane is single tenant and unique. It runs on its own set of Amazon EC2 instances.</p> <p>The cluster control plane is provisioned across multiple Availability Zones and fronted by an Elastic Load Balancing Network Load Balancer. Amazon EKS also provisions elastic network interfaces in your VPC subnets to provide connectivity from the control plane instances to the nodes (for example, to support <code>kubectl exec</code>, <code>logs</code>, and <code>proxy</code> data flows).</p> <p>Amazon EKS nodes run in your Amazon Web Services account and connect to your cluster's control plane over the Kubernetes API server endpoint and a certificate file that is created for your cluster.</p> <p>You can use the <code>endpointPublicAccess</code> and <code>endpointPrivateAccess</code> parameters to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. The endpoint domain name and IP address family depends on the value of the <code>ipFamily</code> for the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>. </p> <p>You can use the <code>logging</code> parameter to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html\">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href=\"http://aws.amazon.com/cloudwatch/pricing/\">CloudWatch Pricing</a>.</p> </note> <p>In most cases, it takes several minutes to create a cluster. After you create an Amazon EKS cluster, you must configure your Kubernetes tooling to communicate with the API server and launch nodes into your cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html\">Allowing users to access your cluster</a> and <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html\">Launching Amazon EKS nodes</a> in the <i>Amazon EKS User Guide</i>.</p>"
     },
     "CreateEksAnywhereSubscription":{
       "name":"CreateEksAnywhereSubscription",
@@ -174,7 +176,7 @@
         {"shape":"ServerException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Creates a managed node group for an Amazon EKS cluster.</p> <p>You can only create a node group for your cluster that is equal to the current Kubernetes version for the cluster. All node groups are created with the latest AMI release version for the respective minor Kubernetes version of the cluster, unless you deploy a custom AMI using a launch template. For more information about using launch templates, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html\">Customizing managed nodes with launch templates</a>.</p> <p>An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and associated Amazon EC2 instances that are managed by Amazon Web Services for an Amazon EKS cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html\">Managed node groups</a> in the <i>Amazon EKS User Guide</i>.</p> <note> <p>Windows AMI types are only supported for commercial Amazon Web Services Regions that support Windows on Amazon EKS.</p> </note>"
+      "documentation":"<p>Creates a managed node group for an Amazon EKS cluster.</p> <p>You can only create a node group for your cluster that is equal to the current Kubernetes version for the cluster. All node groups are created with the latest AMI release version for the respective minor Kubernetes version of the cluster, unless you deploy a custom AMI using a launch template.</p> <p>For later updates, you will only be able to update a node group using a launch template only if it was originally deployed with a launch template. Additionally, the launch template ID or name must match what was used when the node group was created. You can update the launch template version with necessary changes. For more information about using launch templates, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html\">Customizing managed nodes with launch templates</a>.</p> <p>An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and associated Amazon EC2 instances that are managed by Amazon Web Services for an Amazon EKS cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html\">Managed node groups</a> in the <i>Amazon EKS User Guide</i>.</p> <note> <p>Windows AMI types are only supported for commercial Amazon Web Services Regions that support Windows on Amazon EKS.</p> </note>"
     },
     "CreatePodIdentityAssociation":{
       "name":"CreatePodIdentityAssociation",
@@ -192,7 +194,7 @@
         {"shape":"ResourceLimitExceededException"},
         {"shape":"ResourceInUseException"}
       ],
-      "documentation":"<p>Creates an EKS Pod Identity association between a service account in an Amazon EKS cluster and an IAM role with <i>EKS Pod Identity</i>. Use EKS Pod Identity to give temporary IAM credentials to pods and the credentials are rotated automatically.</p> <p>Amazon EKS Pod Identity associations provide the ability to manage credentials for your applications, similar to the way that Amazon EC2 instance profiles provide credentials to Amazon EC2 instances.</p> <p>If a pod uses a service account that has an association, Amazon EKS sets environment variables in the containers of the pod. The environment variables configure the Amazon Web Services SDKs, including the Command Line Interface, to use the EKS Pod Identity credentials.</p> <p>Pod Identity is a simpler method than <i>IAM roles for service accounts</i>, as this method doesn't use OIDC identity providers. Additionally, you can configure a role for Pod Identity once, and reuse it across clusters.</p>"
+      "documentation":"<p>Creates an EKS Pod Identity association between a service account in an Amazon EKS cluster and an IAM role with <i>EKS Pod Identity</i>. Use EKS Pod Identity to give temporary IAM credentials to Pods and the credentials are rotated automatically.</p> <p>Amazon EKS Pod Identity associations provide the ability to manage credentials for your applications, similar to the way that Amazon EC2 instance profiles provide credentials to Amazon EC2 instances.</p> <p>If a Pod uses a service account that has an association, Amazon EKS sets environment variables in the containers of the Pod. The environment variables configure the Amazon Web Services SDKs, including the Command Line Interface, to use the EKS Pod Identity credentials.</p> <p>EKS Pod Identity is a simpler method than <i>IAM roles for service accounts</i>, as this method doesn't use OIDC identity providers. Additionally, you can configure a role for EKS Pod Identity once, and reuse it across clusters.</p> <p>Similar to Amazon Web Services IAM behavior, EKS Pod Identity associations are eventually consistent, and may take several seconds to be effective after the initial API call returns successfully. You must design your applications to account for these potential delays. We recommend that you don’t include association create/updates in the critical, high-availability code paths of your application. Instead, make changes in a separate initialization or setup routine that you run less frequently.</p> <p>You can set a <i>target IAM role</i> in the same or a different account for advanced scenarios. With a target role, EKS Pod Identity automatically performs two role assumptions in sequence: first assuming the role in the association that is in this account, then using those credentials to assume the target IAM role. This process provides your Pod with temporary credentials that have the permissions defined in the target role, allowing secure access to resources in another Amazon Web Services account.</p>"
     },
     "DeleteAccessEntry":{
       "name":"DeleteAccessEntry",
@@ -239,7 +241,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ClientException"},
         {"shape":"ServerException"},
-        {"shape":"ServiceUnavailableException"}
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"InvalidRequestException"}
       ],
       "documentation":"<p>Deletes an Amazon EKS cluster control plane.</p> <p>If you have active services in your cluster that are associated with a load balancer, you must delete those services before deleting the cluster so that the load balancers are deleted properly. Otherwise, you can have orphaned resources in your VPC that prevent you from being able to delete the VPC. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html\">Deleting a cluster</a> in the <i>Amazon EKS User Guide</i>.</p> <p>If you have managed node groups or Fargate profiles attached to the cluster, you must delete them first. For more information, see <code>DeleteNodgroup</code> and <code>DeleteFargateProfile</code>.</p>"
     },
@@ -485,6 +488,22 @@
       ],
       "documentation":"<p>Returns details about an insight that you specify using its ID.</p>"
     },
+    "DescribeInsightsRefresh":{
+      "name":"DescribeInsightsRefresh",
+      "http":{
+        "method":"GET",
+        "requestUri":"/clusters/{name}/insights-refresh"
+      },
+      "input":{"shape":"DescribeInsightsRefreshRequest"},
+      "output":{"shape":"DescribeInsightsRefreshResponse"},
+      "errors":[
+        {"shape":"ServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"}
+      ],
+      "documentation":"<p>Returns the status of the latest on-demand cluster insights refresh operation.</p>"
+    },
     "DescribeNodegroup":{
       "name":"DescribeNodegroup",
       "http":{
@@ -532,7 +551,7 @@
         {"shape":"ServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Describes an update to an Amazon EKS resource.</p> <p>When the status of the update is <code>Succeeded</code>, the update is complete. If an update fails, the status is <code>Failed</code>, and an error detail explains the reason for the failure.</p>"
+      "documentation":"<p>Describes an update to an Amazon EKS resource.</p> <p>When the status of the update is <code>Successful</code>, the update is complete. If an update fails, the status is <code>Failed</code>, and an error detail explains the reason for the failure.</p>"
     },
     "DisassociateAccessPolicy":{
       "name":"DisassociateAccessPolicy",
@@ -563,7 +582,8 @@
         {"shape":"ServerException"},
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Disassociates an identity provider configuration from a cluster.</p> <p>If you disassociate an identity provider from your cluster, users included in the provider can no longer access the cluster. However, you can still access the cluster with IAM principals.</p>"
     },
@@ -707,7 +727,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InvalidParameterException"}
       ],
-      "documentation":"<p>Returns a list of all insights checked for against the specified cluster. You can filter which insights are returned by category, associated Kubernetes version, and status.</p>"
+      "documentation":"<p>Returns a list of all insights checked for against the specified cluster. You can filter which insights are returned by category, associated Kubernetes version, and status. The default filter lists all categories and every status.</p> <p>The following lists the available categories:</p> <ul> <li> <p> <code>UPGRADE_READINESS</code>: Amazon EKS identifies issues that could impact your ability to upgrade to new versions of Kubernetes. These are called upgrade insights.</p> </li> <li> <p> <code>MISCONFIGURATION</code>: Amazon EKS identifies misconfiguration in your EKS Hybrid Nodes setup that could impair functionality of your cluster or workloads. These are called configuration insights.</p> </li> </ul>"
     },
     "ListNodegroups":{
       "name":"ListNodegroups",
@@ -790,7 +810,23 @@
         {"shape":"ResourceInUseException"},
         {"shape":"ResourcePropagationDelayException"}
       ],
-      "documentation":"<p>Connects a Kubernetes cluster to the Amazon EKS control plane. </p> <p>Any Kubernetes cluster can be connected to the Amazon EKS control plane to view current information about the cluster and its nodes. </p> <p>Cluster connection requires two steps. First, send a <code> <a>RegisterClusterRequest</a> </code> to add it to the Amazon EKS control plane.</p> <p>Second, a <a href=\"https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector/latest/eks-connector.yaml\">Manifest</a> containing the <code>activationID</code> and <code>activationCode</code> must be applied to the Kubernetes cluster through it's native provider to provide visibility.</p> <p>After the manifest is updated and applied, the connected cluster is visible to the Amazon EKS control plane. If the manifest isn't applied within three days, the connected cluster will no longer be visible and must be deregistered using <code>DeregisterCluster</code>.</p>"
+      "documentation":"<p>Connects a Kubernetes cluster to the Amazon EKS control plane. </p> <p>Any Kubernetes cluster can be connected to the Amazon EKS control plane to view current information about the cluster and its nodes. </p> <p>Cluster connection requires two steps. First, send a <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_RegisterClusterRequest.html\"> <code>RegisterClusterRequest</code> </a> to add it to the Amazon EKS control plane.</p> <p>Second, a <a href=\"https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector/latest/eks-connector.yaml\">Manifest</a> containing the <code>activationID</code> and <code>activationCode</code> must be applied to the Kubernetes cluster through it's native provider to provide visibility.</p> <p>After the manifest is updated and applied, the connected cluster is visible to the Amazon EKS control plane. If the manifest isn't applied within three days, the connected cluster will no longer be visible and must be deregistered using <code>DeregisterCluster</code>.</p>"
+    },
+    "StartInsightsRefresh":{
+      "name":"StartInsightsRefresh",
+      "http":{
+        "method":"POST",
+        "requestUri":"/clusters/{name}/insights-refresh"
+      },
+      "input":{"shape":"StartInsightsRefreshRequest"},
+      "output":{"shape":"StartInsightsRefreshResponse"},
+      "errors":[
+        {"shape":"ServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"InvalidParameterException"}
+      ],
+      "documentation":"<p>Initiates an on-demand refresh operation for cluster insights, getting the latest analysis outside of the standard refresh schedule.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -868,9 +904,10 @@
         {"shape":"ServerException"},
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates an Amazon EKS cluster configuration. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with <code>DescribeUpdate</code>\"/&gt;.</p> <p>You can use this API operation to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html\">Amazon EKS Cluster control plane logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href=\"http://aws.amazon.com/cloudwatch/pricing/\">CloudWatch Pricing</a>.</p> </note> <p>You can also use this API operation to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS cluster endpoint access control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <p>You can also use this API operation to choose different subnets and security groups for the cluster. You must specify at least two subnets that are in different Availability Zones. You can't change which VPC the subnets are from, the subnets must be in the same VPC as the subnets that the cluster was created with. For more information about the VPC requirements, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html\">https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <p>You can also use this API operation to enable or disable ARC zonal shift. If zonal shift is enabled, Amazon Web Services configures zonal autoshift for the cluster.</p> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p>"
+      "documentation":"<p>Updates an Amazon EKS cluster configuration. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with <code>DescribeUpdate</code>.</p> <p>You can use this operation to do the following actions:</p> <ul> <li> <p>You can use this API operation to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html\">Amazon EKS Cluster control plane logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href=\"http://aws.amazon.com/cloudwatch/pricing/\">CloudWatch Pricing</a>.</p> </note> </li> <li> <p>You can also use this API operation to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\"> Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> </li> <li> <p>You can also use this API operation to choose different subnets and security groups for the cluster. You must specify at least two subnets that are in different Availability Zones. You can't change which VPC the subnets are from, the subnets must be in the same VPC as the subnets that the cluster was created with. For more information about the VPC requirements, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html\">https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> </li> <li> <p>You can also use this API operation to enable or disable ARC zonal shift. If zonal shift is enabled, Amazon Web Services configures zonal autoshift for the cluster.</p> </li> <li> <p>You can also use this API operation to add, change, or remove the configuration in the cluster for EKS Hybrid Nodes. To remove the configuration, use the <code>remoteNetworkConfig</code> key with an object containing both subkeys with empty arrays for each. Here is an inline example: <code>\"remoteNetworkConfig\": { \"remoteNodeNetworks\": [], \"remotePodNetworks\": [] }</code>.</p> </li> </ul> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p>"
     },
     "UpdateClusterVersion":{
       "name":"UpdateClusterVersion",
@@ -886,9 +923,11 @@
         {"shape":"ServerException"},
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidStateException"}
       ],
-      "documentation":"<p>Updates an Amazon EKS cluster to the specified Kubernetes version. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a>DescribeUpdate</a> API operation.</p> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p> <p>If your cluster has managed node groups attached to it, all of your node groups' Kubernetes versions must match the cluster's Kubernetes version in order to update the cluster to a new Kubernetes version.</p>"
+      "documentation":"<p>Updates an Amazon EKS cluster to the specified Kubernetes version. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeUpdate.html\"> <code>DescribeUpdate</code> </a> API operation.</p> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p> <p>If your cluster has managed node groups attached to it, all of your node groups' Kubernetes versions must match the cluster's Kubernetes version in order to update the cluster to a new Kubernetes version.</p>"
     },
     "UpdateEksAnywhereSubscription":{
       "name":"UpdateEksAnywhereSubscription",
@@ -923,7 +962,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Updates an Amazon EKS managed node group configuration. Your node group continues to function during the update. The response output includes an update ID that you can use to track the status of your node group update with the <a>DescribeUpdate</a> API operation. You can update the Kubernetes labels and taints for a node group and the scaling and version update configuration.</p>"
+      "documentation":"<p>Updates an Amazon EKS managed node group configuration. Your node group continues to function during the update. The response output includes an update ID that you can use to track the status of your node group update with the <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeUpdate.html\"> <code>DescribeUpdate</code> </a> API operation. You can update the Kubernetes labels and taints for a node group and the scaling and version update configuration.</p>"
     },
     "UpdateNodegroupVersion":{
       "name":"UpdateNodegroupVersion",
@@ -941,7 +980,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Updates the Kubernetes version or AMI version of an Amazon EKS managed node group.</p> <p>You can update a node group using a launch template only if the node group was originally deployed with a launch template. If you need to update a custom AMI in a node group that was deployed with a launch template, then update your custom AMI, specify the new ID in a new version of the launch template, and then update the node group to the new version of the launch template.</p> <p>If you update without a launch template, then you can update to the latest available AMI version of a node group's current Kubernetes version by not specifying a Kubernetes version in the request. You can update to the latest AMI version of your cluster's current Kubernetes version by specifying your cluster's Kubernetes version in the request. For information about Linux versions, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html\">Amazon EKS optimized Amazon Linux AMI versions</a> in the <i>Amazon EKS User Guide</i>. For information about Windows versions, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html\">Amazon EKS optimized Windows AMI versions</a> in the <i>Amazon EKS User Guide</i>. </p> <p>You cannot roll back a node group to an earlier Kubernetes version or AMI version.</p> <p>When a node in a managed node group is terminated due to a scaling action or update, every <code>Pod</code> on that node is drained first. Amazon EKS attempts to drain the nodes gracefully and will fail if it is unable to do so. You can <code>force</code> the update if Amazon EKS is unable to drain the nodes as a result of a <code>Pod</code> disruption budget issue.</p>"
+      "documentation":"<p>Updates the Kubernetes version or AMI version of an Amazon EKS managed node group.</p> <p>You can update a node group using a launch template only if the node group was originally deployed with a launch template. Additionally, the launch template ID or name must match what was used when the node group was created. You can update the launch template version with necessary changes.</p> <p>If you need to update a custom AMI in a node group that was deployed with a launch template, then update your custom AMI, specify the new ID in a new version of the launch template, and then update the node group to the new version of the launch template.</p> <p>If you update without a launch template, then you can update to the latest available AMI version of a node group's current Kubernetes version by not specifying a Kubernetes version in the request. You can update to the latest AMI version of your cluster's current Kubernetes version by specifying your cluster's Kubernetes version in the request. For information about Linux versions, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html\">Amazon EKS optimized Amazon Linux AMI versions</a> in the <i>Amazon EKS User Guide</i>. For information about Windows versions, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html\">Amazon EKS optimized Windows AMI versions</a> in the <i>Amazon EKS User Guide</i>. </p> <p>You cannot roll back a node group to an earlier Kubernetes version or AMI version.</p> <p>When a node in a managed node group is terminated due to a scaling action or update, every <code>Pod</code> on that node is drained first. Amazon EKS attempts to drain the nodes gracefully and will fail if it is unable to do so. You can <code>force</code> the update if Amazon EKS is unable to drain the nodes as a result of a <code>Pod</code> disruption budget issue.</p>"
     },
     "UpdatePodIdentityAssociation":{
       "name":"UpdatePodIdentityAssociation",
@@ -957,7 +996,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InvalidParameterException"}
       ],
-      "documentation":"<p>Updates a EKS Pod Identity association. Only the IAM role can be changed; an association can't be moved between clusters, namespaces, or service accounts. If you need to edit the namespace or service account, you need to delete the association and then create a new association with your desired settings.</p>"
+      "documentation":"<p>Updates a EKS Pod Identity association. In an update, you can change the IAM role, the target IAM role, or <code>disableSessionTags</code>. You must change at least one of these in an update. An association can't be moved between clusters, namespaces, or service accounts. If you need to edit the namespace or service account, you need to delete the association and then create a new association with your desired settings.</p> <p>Similar to Amazon Web Services IAM behavior, EKS Pod Identity associations are eventually consistent, and may take several seconds to be effective after the initial API call returns successfully. You must design your applications to account for these potential delays. We recommend that you don’t include association create/updates in the critical, high-availability code paths of your application. Instead, make changes in a separate initialization or setup routine that you run less frequently.</p> <p>You can set a <i>target IAM role</i> in the same or a different account for advanced scenarios. With a target role, EKS Pod Identity automatically performs two role assumptions in sequence: first assuming the role in the association that is in this account, then using those credentials to assume the target IAM role. This process provides your Pod with temporary credentials that have the permissions defined in the target role, allowing secure access to resources in another Amazon Web Services account.</p>"
     }
   },
   "shapes":{
@@ -970,6 +1009,8 @@
         "CUSTOM",
         "BOTTLEROCKET_ARM_64",
         "BOTTLEROCKET_x86_64",
+        "BOTTLEROCKET_ARM_64_FIPS",
+        "BOTTLEROCKET_x86_64_FIPS",
         "BOTTLEROCKET_ARM_64_NVIDIA",
         "BOTTLEROCKET_x86_64_NVIDIA",
         "WINDOWS_CORE_2019_x86_64",
@@ -979,7 +1020,8 @@
         "AL2023_x86_64_STANDARD",
         "AL2023_ARM_64_STANDARD",
         "AL2023_x86_64_NEURON",
-        "AL2023_x86_64_NVIDIA"
+        "AL2023_x86_64_NVIDIA",
+        "AL2023_ARM_64_NVIDIA"
       ]
     },
     "AccessConfigResponse":{
@@ -1155,7 +1197,11 @@
         },
         "podIdentityAssociations":{
           "shape":"StringList",
-          "documentation":"<p>An array of Pod Identity Assocations owned by the Addon. Each EKS Pod Identity association maps a role to a service account in a namespace in the cluster.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+          "documentation":"<p>An array of EKS Pod Identity associations owned by the add-on. Each association maps a role to a service account in a namespace in the cluster.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+        },
+        "namespaceConfig":{
+          "shape":"AddonNamespaceConfigResponse",
+          "documentation":"<p>The namespace configuration for the addon. This specifies the Kubernetes namespace where the addon is installed.</p>"
         }
       },
       "documentation":"<p>An Amazon EKS add-on. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html\">Amazon EKS add-ons</a> in the <i>Amazon EKS User Guide</i>.</p>"
@@ -1214,6 +1260,10 @@
         "marketplaceInformation":{
           "shape":"MarketplaceInformation",
           "documentation":"<p>Information about the add-on from the Amazon Web Services Marketplace.</p>"
+        },
+        "defaultNamespace":{
+          "shape":"String",
+          "documentation":"<p>The default Kubernetes namespace where this addon is typically installed if no custom namespace is specified.</p>"
         }
       },
       "documentation":"<p>Information about an add-on.</p>"
@@ -1255,6 +1305,26 @@
       "type":"list",
       "member":{"shape":"AddonIssue"}
     },
+    "AddonNamespaceConfigRequest":{
+      "type":"structure",
+      "members":{
+        "namespace":{
+          "shape":"namespace",
+          "documentation":"<p>The name of the Kubernetes namespace to install the addon in. Must be a valid RFC 1123 DNS label.</p>"
+        }
+      },
+      "documentation":"<p>The namespace configuration request object for specifying a custom namespace when creating an addon.</p>"
+    },
+    "AddonNamespaceConfigResponse":{
+      "type":"structure",
+      "members":{
+        "namespace":{
+          "shape":"namespace",
+          "documentation":"<p>The name of the Kubernetes namespace where the addon is installed.</p>"
+        }
+      },
+      "documentation":"<p>The namespace configuration response object containing information about the namespace where an addon is installed.</p>"
+    },
     "AddonPodIdentityAssociations":{
       "type":"structure",
       "required":[
@@ -1271,7 +1341,7 @@
           "documentation":"<p>The ARN of an IAM Role.</p>"
         }
       },
-      "documentation":"<p>A type of Pod Identity Association owned by an Amazon EKS Add-on.</p> <p>Each EKS Pod Identity Association maps a role to a service account in a namespace in the cluster.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+      "documentation":"<p>A type of EKS Pod Identity association owned by an Amazon EKS add-on.</p> <p>Each association maps a role to a service account in a namespace in the cluster.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
     },
     "AddonPodIdentityAssociationsList":{
       "type":"list",
@@ -1282,14 +1352,14 @@
       "members":{
         "serviceAccount":{
           "shape":"String",
-          "documentation":"<p>The Kubernetes Service Account name used by the addon.</p>"
+          "documentation":"<p>The Kubernetes Service Account name used by the add-on.</p>"
         },
         "recommendedManagedPolicies":{
           "shape":"StringList",
-          "documentation":"<p>A suggested IAM Policy for the addon.</p>"
+          "documentation":"<p>A suggested IAM Policy for the add-on.</p>"
         }
       },
-      "documentation":"<p>Information about how to configure IAM for an Addon.</p>"
+      "documentation":"<p>Information about how to configure IAM for an add-on.</p>"
     },
     "AddonPodIdentityConfigurationList":{
       "type":"list",
@@ -1321,7 +1391,7 @@
         },
         "computeTypes":{
           "shape":"StringList",
-          "documentation":"<p>Indicates the compute type of the addon version.</p>"
+          "documentation":"<p>Indicates the compute type of the add-on version.</p>"
         },
         "compatibilities":{
           "shape":"Compatibilities",
@@ -1333,7 +1403,7 @@
         },
         "requiresIamPermissions":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates if the Addon requires IAM Permissions to operate, such as networking permissions.</p>"
+          "documentation":"<p>Indicates if the add-on requires IAM Permissions to operate, such as networking permissions.</p>"
         }
       },
       "documentation":"<p>Information about an add-on version.</p>"
@@ -1556,7 +1626,10 @@
     },
     "Category":{
       "type":"string",
-      "enum":["UPGRADE_READINESS"]
+      "enum":[
+        "UPGRADE_READINESS",
+        "MISCONFIGURATION"
+      ]
     },
     "CategoryList":{
       "type":"list",
@@ -1719,7 +1792,7 @@
         },
         "remoteNetworkConfig":{
           "shape":"RemoteNetworkConfigResponse",
-          "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can't change or update this configuration after the cluster is created.</p>"
+          "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can add, change, or remove this configuration after the cluster is created.</p>"
         },
         "computeConfig":{
           "shape":"ComputeConfigResponse",
@@ -1728,6 +1801,10 @@
         "storageConfig":{
           "shape":"StorageConfigResponse",
           "documentation":"<p>Indicates the current configuration of the block storage capability on your EKS Auto Mode cluster. For example, if the capability is enabled or disabled. If the block storage capability is enabled, EKS Auto Mode will create and delete EBS volumes in your Amazon Web Services account. For more information, see EKS Auto Mode block storage capability in the <i>Amazon EKS User Guide</i>.</p>"
+        },
+        "deletionProtection":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>The current deletion protection setting for the cluster. When <code>true</code>, deletion protection is enabled and the cluster cannot be deleted until protection is disabled. When <code>false</code>, the cluster can be deleted normally. This setting only applies to clusters in an active state.</p>"
         }
       },
       "documentation":"<p>An object representing an Amazon EKS cluster.</p>"
@@ -1838,6 +1915,10 @@
         },
         "status":{
           "shape":"ClusterVersionStatus",
+          "documentation":"<important> <p>This field is deprecated. Use <code>versionStatus</code> instead, as that field matches for input and output of this action.</p> </important> <p>Current status of this cluster version.</p>"
+        },
+        "versionStatus":{
+          "shape":"VersionStatus",
           "documentation":"<p>Current status of this cluster version.</p>"
         },
         "kubernetesPatchVersion":{
@@ -2082,7 +2163,7 @@
         },
         "resolveConflicts":{
           "shape":"ResolveConflicts",
-          "documentation":"<p>How to resolve field value conflicts for an Amazon EKS add-on. Conflicts are handled based on the value you choose:</p> <ul> <li> <p> <b>None</b> – If the self-managed version of the add-on is installed on your cluster, Amazon EKS doesn't change the value. Creation of the add-on might fail.</p> </li> <li> <p> <b>Overwrite</b> – If the self-managed version of the add-on is installed on your cluster and the Amazon EKS default value is different than the existing value, Amazon EKS changes the value to the Amazon EKS default value.</p> </li> <li> <p> <b>Preserve</b> – This is similar to the NONE option. If the self-managed version of the add-on is installed on your cluster Amazon EKS doesn't change the add-on resource properties. Creation of the add-on might fail if conflicts are detected. This option works differently during the update operation. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html\">UpdateAddon</a>.</p> </li> </ul> <p>If you don't currently have the self-managed version of the add-on installed on your cluster, the Amazon EKS add-on is installed. Amazon EKS sets all values to default values, regardless of the option that you specify.</p>"
+          "documentation":"<p>How to resolve field value conflicts for an Amazon EKS add-on. Conflicts are handled based on the value you choose:</p> <ul> <li> <p> <b>None</b> – If the self-managed version of the add-on is installed on your cluster, Amazon EKS doesn't change the value. Creation of the add-on might fail.</p> </li> <li> <p> <b>Overwrite</b> – If the self-managed version of the add-on is installed on your cluster and the Amazon EKS default value is different than the existing value, Amazon EKS changes the value to the Amazon EKS default value.</p> </li> <li> <p> <b>Preserve</b> – This is similar to the NONE option. If the self-managed version of the add-on is installed on your cluster Amazon EKS doesn't change the add-on resource properties. Creation of the add-on might fail if conflicts are detected. This option works differently during the update operation. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateAddon.html\"> <code>UpdateAddon</code> </a>.</p> </li> </ul> <p>If you don't currently have the self-managed version of the add-on installed on your cluster, the Amazon EKS add-on is installed. Amazon EKS sets all values to default values, regardless of the option that you specify.</p>"
         },
         "clientRequestToken":{
           "shape":"String",
@@ -2099,7 +2180,11 @@
         },
         "podIdentityAssociations":{
           "shape":"AddonPodIdentityAssociationsList",
-          "documentation":"<p>An array of Pod Identity Assocations to be created. Each EKS Pod Identity association maps a Kubernetes service account to an IAM Role.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+          "documentation":"<p>An array of EKS Pod Identity associations to be created. Each association maps a Kubernetes service account to an IAM role.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+        },
+        "namespaceConfig":{
+          "shape":"AddonNamespaceConfigRequest",
+          "documentation":"<p>The namespace configuration for the addon. If specified, this will override the default namespace for the addon.</p>"
         }
       }
     },
@@ -2164,7 +2249,7 @@
         },
         "bootstrapSelfManagedAddons":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>If you set this value to <code>False</code> when creating a cluster, the default networking add-ons will not be installed.</p> <p>The default networking addons include vpc-cni, coredns, and kube-proxy.</p> <p>Use this option when you plan to install third-party alternative add-ons or self-manage the default networking add-ons.</p>"
+          "documentation":"<p>If you set this value to <code>False</code> when creating a cluster, the default networking add-ons will not be installed.</p> <p>The default networking add-ons include <code>vpc-cni</code>, <code>coredns</code>, and <code>kube-proxy</code>.</p> <p>Use this option when you plan to install third-party alternative add-ons or self-manage the default networking add-ons.</p>"
         },
         "upgradePolicy":{
           "shape":"UpgradePolicyRequest",
@@ -2176,7 +2261,7 @@
         },
         "remoteNetworkConfig":{
           "shape":"RemoteNetworkConfigRequest",
-          "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can't change or update this configuration after the cluster is created.</p>"
+          "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can add, change, or remove this configuration after the cluster is created.</p>"
         },
         "computeConfig":{
           "shape":"ComputeConfigRequest",
@@ -2185,6 +2270,10 @@
         "storageConfig":{
           "shape":"StorageConfigRequest",
           "documentation":"<p>Enable or disable the block storage capability of EKS Auto Mode when creating your EKS Auto Mode cluster. If the block storage capability is enabled, EKS Auto Mode will create and delete EBS volumes in your Amazon Web Services account.</p>"
+        },
+        "deletionProtection":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Indicates whether to enable deletion protection for the cluster. When enabled, the cluster cannot be deleted unless deletion protection is first disabled. This helps prevent accidental cluster deletion. Default value is <code>false</code>.</p>"
         }
       }
     },
@@ -2360,7 +2449,7 @@
         },
         "launchTemplate":{
           "shape":"LaunchTemplateSpecification",
-          "documentation":"<p>An object representing a node group's launch template specification. When using this object, don't directly specify <code>instanceTypes</code>, <code>diskSize</code>, or <code>remoteAccess</code>. Make sure that the launch template meets the requirements in <code>launchTemplateSpecification</code>. Also refer to <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html\">Customizing managed nodes with launch templates</a> in the <i>Amazon EKS User Guide</i>.</p>"
+          "documentation":"<p>An object representing a node group's launch template specification. When using this object, don't directly specify <code>instanceTypes</code>, <code>diskSize</code>, or <code>remoteAccess</code>. You cannot later specify a different launch template ID or name than what was used to create the node group.</p> <p>Make sure that the launch template meets the requirements in <code>launchTemplateSpecification</code>. Also refer to <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html\">Customizing managed nodes with launch templates</a> in the <i>Amazon EKS User Guide</i>.</p>"
         },
         "updateConfig":{
           "shape":"NodegroupUpdateConfig",
@@ -2404,13 +2493,13 @@
       "members":{
         "clusterName":{
           "shape":"String",
-          "documentation":"<p>The name of the cluster to create the association in.</p>",
+          "documentation":"<p>The name of the cluster to create the EKS Pod Identity association in.</p>",
           "location":"uri",
           "locationName":"name"
         },
         "namespace":{
           "shape":"String",
-          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the association in. The service account and the pods that use the service account must be in this namespace.</p>"
+          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the EKS Pod Identity association in. The service account and the Pods that use the service account must be in this namespace.</p>"
         },
         "serviceAccount":{
           "shape":"String",
@@ -2418,7 +2507,7 @@
         },
         "roleArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to associate with the service account. The EKS Pod Identity agent manages credentials to assume this role for applications in the containers in the pods that use this service account.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to associate with the service account. The EKS Pod Identity agent manages credentials to assume this role for applications in the containers in the Pods that use this service account.</p>"
         },
         "clientRequestToken":{
           "shape":"String",
@@ -2428,6 +2517,14 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Metadata that assists with categorization and organization. Each tag consists of a key and an optional value. You define both. Tags don't propagate to any other cluster or Amazon Web Services resources.</p> <p>The following basic restrictions apply to tags:</p> <ul> <li> <p>Maximum number of tags per resource – 50</p> </li> <li> <p>For each resource, each tag key must be unique, and each tag key can have only one value.</p> </li> <li> <p>Maximum key length – 128 Unicode characters in UTF-8</p> </li> <li> <p>Maximum value length – 256 Unicode characters in UTF-8</p> </li> <li> <p>If your tagging schema is used across multiple services and resources, remember that other services may have restrictions on allowed characters. Generally allowed characters are: letters, numbers, and spaces representable in UTF-8, and the following characters: + - = . _ : / @.</p> </li> <li> <p>Tag keys and values are case-sensitive.</p> </li> <li> <p>Do not use <code>aws:</code>, <code>AWS:</code>, or any upper or lowercase combination of such as a prefix for either keys or values as it is reserved for Amazon Web Services use. You cannot edit or delete tag keys or values with this prefix. Tags with this prefix do not count against your tags per resource limit.</p> </li> </ul>"
+        },
+        "disableSessionTags":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Disable the automatic sessions tags that are appended by EKS Pod Identity.</p> <p>EKS Pod Identity adds a pre-defined set of session tags when it assumes the role. You can use these tags to author a single role that can work across resources by allowing access to Amazon Web Services resources based on matching tags. By default, EKS Pod Identity attaches six tags, including tags for cluster name, namespace, and service account name. For the list of tags added by EKS Pod Identity, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags\">List of session tags added by EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p> <p>Amazon Web Services compresses inline session policies, managed policy ARNs, and session tags into a packed binary format that has a separate limit. If you receive a <code>PackedPolicyTooLarge</code> error indicating the packed binary format has exceeded the size limit, you can attempt to reduce the size by disabling the session tags added by EKS Pod Identity.</p>"
+        },
+        "targetRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target IAM role to associate with the service account. This role is assumed by using the EKS Pod Identity association role, then the credentials for this role are injected into the Pod.</p> <p>When you run applications on Amazon EKS, your application might need to access Amazon Web Services resources from a different role that exists in the same or different Amazon Web Services account. For example, your application running in “Account A” might need to access resources, such as Amazon S3 buckets in “Account B” or within “Account A” itself. You can create a association to access Amazon Web Services resources in “Account B” by creating two IAM roles: a role in “Account A” and a role in “Account B” (which can be the same or different account), each with the necessary trust and permission policies. After you provide these roles in the <i>IAM role</i> and <i>Target IAM role</i> fields, EKS will perform role chaining to ensure your application gets the required permissions. This means Role A will assume Role B, allowing your Pods to securely access resources like S3 buckets in the target account.</p>"
         }
       }
     },
@@ -2463,8 +2560,7 @@
     },
     "DeleteAccessEntryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAddonRequest":{
       "type":"structure",
@@ -2747,7 +2843,7 @@
         },
         "podIdentityConfiguration":{
           "shape":"AddonPodIdentityConfigurationList",
-          "documentation":"<p>The Kubernetes service account name used by the addon, and any suggested IAM policies. Use this information to create an IAM Role for the Addon.</p>"
+          "documentation":"<p>The Kubernetes service account name used by the add-on, and any suggested IAM policies. Use this information to create an IAM Role for the add-on.</p>"
         }
       }
     },
@@ -2912,9 +3008,18 @@
         },
         "status":{
           "shape":"ClusterVersionStatus",
-          "documentation":"<p>Filter versions by their current status.</p>",
+          "documentation":"<important> <p>This field is deprecated. Use <code>versionStatus</code> instead, as that field matches for input and output of this action.</p> </important> <p>Filter versions by their current status.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"status has been replaced by versionStatus",
+          "deprecatedSince":"2025-02-15",
           "location":"querystring",
           "locationName":"status"
+        },
+        "versionStatus":{
+          "shape":"VersionStatus",
+          "documentation":"<p>Filter versions by their current status.</p>",
+          "location":"querystring",
+          "locationName":"versionStatus"
         }
       }
     },
@@ -3040,6 +3145,39 @@
         }
       }
     },
+    "DescribeInsightsRefreshRequest":{
+      "type":"structure",
+      "required":["clusterName"],
+      "members":{
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster associated with the insights refresh operation.</p>",
+          "location":"uri",
+          "locationName":"name"
+        }
+      }
+    },
+    "DescribeInsightsRefreshResponse":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The message associated with the insights refresh operation.</p>"
+        },
+        "status":{
+          "shape":"InsightsRefreshStatus",
+          "documentation":"<p>The current status of the insights refresh operation.</p>"
+        },
+        "startedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the insights refresh operation started.</p>"
+        },
+        "endedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the insights refresh operation ended.</p>"
+        }
+      }
+    },
     "DescribeNodegroupRequest":{
       "type":"structure",
       "required":[
@@ -3173,8 +3311,7 @@
     },
     "DisassociateAccessPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateIdentityProviderConfigRequest":{
       "type":"structure",
@@ -3253,6 +3390,10 @@
           "shape":"StringList",
           "documentation":"<p>Amazon Web Services License Manager ARN associated with the subscription.</p>"
         },
+        "licenses":{
+          "shape":"LicenseList",
+          "documentation":"<p>Includes all of the claims in the license token necessary to validate the license for extended support.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The metadata for a subscription to assist with categorization and organization. Each tag consists of a key and an optional value. Subscription tags do not propagate to any other resources associated with the subscription.</p>"
@@ -3716,7 +3857,7 @@
       "members":{
         "categories":{
           "shape":"CategoryList",
-          "documentation":"<p>The categories to use to filter insights.</p>"
+          "documentation":"<p>The categories to use to filter insights. The following lists the available categories:</p> <ul> <li> <p> <code>UPGRADE_READINESS</code>: Amazon EKS identifies issues that could impact your ability to upgrade to new versions of Kubernetes. These are called upgrade insights.</p> </li> <li> <p> <code>MISCONFIGURATION</code>: Amazon EKS identifies misconfiguration in your EKS Hybrid Nodes setup that could impair functionality of your cluster or workloads. These are called configuration insights.</p> </li> </ul>"
         },
         "kubernetesVersions":{
           "shape":"StringList",
@@ -3729,6 +3870,14 @@
       },
       "documentation":"<p>The criteria to use for the insights.</p>"
     },
+    "InsightsRefreshStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "FAILED",
+        "COMPLETED"
+      ]
+    },
     "Integer":{"type":"integer"},
     "InvalidParameterException":{
       "type":"structure",
@@ -3790,6 +3939,19 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "InvalidStateException":{
+      "type":"structure",
+      "members":{
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The Amazon EKS cluster associated with the exception.</p>"
+        },
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>Amazon EKS detected upgrade readiness issues. Call the <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_ListInsights.html\"> <code>ListInsights</code> </a> API to view detected upgrade blocking issues. Pass the <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateClusterVersion.html#API_UpdateClusterVersion_RequestBody\"> <code>force</code> </a> flag when updating to override upgrade readiness errors.</p>",
+      "error":{"httpStatusCode":400},
+      "exception":true
+    },
     "IpFamily":{
       "type":"string",
       "enum":[
@@ -3864,19 +4026,37 @@
       "members":{
         "name":{
           "shape":"String",
-          "documentation":"<p>The name of the launch template.</p> <p>You must specify either the launch template name or the launch template ID in the request, but not both.</p>"
+          "documentation":"<p>The name of the launch template.</p> <p>You must specify either the launch template name or the launch template ID in the request, but not both. After node group creation, you cannot use a different name.</p>"
         },
         "version":{
           "shape":"String",
-          "documentation":"<p>The version number of the launch template to use. If no version is specified, then the template's default version is used.</p>"
+          "documentation":"<p>The version number of the launch template to use. If no version is specified, then the template's default version is used. You can use a different version for node group updates.</p>"
         },
         "id":{
           "shape":"String",
-          "documentation":"<p>The ID of the launch template.</p> <p>You must specify either the launch template ID or the launch template name in the request, but not both.</p>"
+          "documentation":"<p>The ID of the launch template.</p> <p>You must specify either the launch template ID or the launch template name in the request, but not both. After node group creation, you cannot use a different ID.</p>"
         }
       },
       "documentation":"<p>An object representing a node group launch template specification. The launch template can't include <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html\"> <code>SubnetId</code> </a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html\"> <code>IamInstanceProfile</code> </a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html\"> <code>RequestSpotInstances</code> </a>, <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html\"> <code>HibernationOptions</code> </a>, or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html\"> <code>TerminateInstances</code> </a>, or the node group deployment or update will fail. For more information about launch templates, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html\"> <code>CreateLaunchTemplate</code> </a> in the Amazon EC2 API Reference. For more information about using launch templates with Amazon EKS, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html\">Customizing managed nodes with launch templates</a> in the <i>Amazon EKS User Guide</i>.</p> <p>You must specify either the launch template ID or the launch template name in the request, but not both.</p>"
     },
+    "License":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"String",
+          "documentation":"<p>An id associated with an EKS Anywhere subscription license.</p>"
+        },
+        "token":{
+          "shape":"String",
+          "documentation":"<p>An optional license token that can be used for extended support verification.</p>"
+        }
+      },
+      "documentation":"<p>An EKS Anywhere license associated with a subscription.</p>"
+    },
+    "LicenseList":{
+      "type":"list",
+      "member":{"shape":"License"}
+    },
     "ListAccessEntriesRequest":{
       "type":"structure",
       "required":["clusterName"],
@@ -4362,7 +4542,7 @@
       "members":{
         "associations":{
           "shape":"PodIdentityAssociationSummaries",
-          "documentation":"<p>The list of summarized descriptions of the associations that are in the cluster and match any filters that you provided.</p> <p>Each summary is simplified by removing these fields compared to the full <code> <a>PodIdentityAssociation</a> </code>:</p> <ul> <li> <p>The IAM role: <code>roleArn</code> </p> </li> <li> <p>The timestamp that the association was created at: <code>createdAt</code> </p> </li> <li> <p>The most recent timestamp that the association was modified at:. <code>modifiedAt</code> </p> </li> <li> <p>The tags on the association: <code>tags</code> </p> </li> </ul>"
+          "documentation":"<p>The list of summarized descriptions of the associations that are in the cluster and match any filters that you provided.</p> <p>Each summary is simplified by removing these fields compared to the full <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_PodIdentityAssociation.html\"> <code>PodIdentityAssociation</code> </a>:</p> <ul> <li> <p>The IAM role: <code>roleArn</code> </p> </li> <li> <p>The timestamp that the association was created at: <code>createdAt</code> </p> </li> <li> <p>The most recent timestamp that the association was modified at:. <code>modifiedAt</code> </p> </li> <li> <p>The tags on the association: <code>tags</code> </p> </li> </ul>"
         },
         "nextToken":{
           "shape":"String",
@@ -4508,10 +4688,56 @@
         "enabled":{
           "shape":"BoxedBoolean",
           "documentation":"<p>Specifies whether to enable node auto repair for the node group. Node auto repair is disabled by default.</p>"
+        },
+        "maxUnhealthyNodeThresholdCount":{
+          "shape":"NonZeroInteger",
+          "documentation":"<p>Specify a count threshold of unhealthy nodes, above which node auto repair actions will stop. When using this, you cannot also set <code>maxUnhealthyNodeThresholdPercentage</code> at the same time.</p>"
+        },
+        "maxUnhealthyNodeThresholdPercentage":{
+          "shape":"PercentCapacity",
+          "documentation":"<p>Specify a percentage threshold of unhealthy nodes, above which node auto repair actions will stop. When using this, you cannot also set <code>maxUnhealthyNodeThresholdCount</code> at the same time.</p>"
+        },
+        "maxParallelNodesRepairedCount":{
+          "shape":"NonZeroInteger",
+          "documentation":"<p>Specify the maximum number of nodes that can be repaired concurrently or in parallel, expressed as a count of unhealthy nodes. This gives you finer-grained control over the pace of node replacements. When using this, you cannot also set <code>maxParallelNodesRepairedPercentage</code> at the same time.</p>"
+        },
+        "maxParallelNodesRepairedPercentage":{
+          "shape":"PercentCapacity",
+          "documentation":"<p>Specify the maximum number of nodes that can be repaired concurrently or in parallel, expressed as a percentage of unhealthy nodes. This gives you finer-grained control over the pace of node replacements. When using this, you cannot also set <code>maxParallelNodesRepairedCount</code> at the same time.</p>"
+        },
+        "nodeRepairConfigOverrides":{
+          "shape":"NodeRepairConfigOverridesList",
+          "documentation":"<p>Specify granular overrides for specific repair actions. These overrides control the repair action and the repair delay time before a node is considered eligible for repair. If you use this, you must specify all the values.</p>"
         }
       },
       "documentation":"<p>The node auto repair configuration for the node group.</p>"
     },
+    "NodeRepairConfigOverrides":{
+      "type":"structure",
+      "members":{
+        "nodeMonitoringCondition":{
+          "shape":"String",
+          "documentation":"<p>Specify an unhealthy condition reported by the node monitoring agent that this override would apply to.</p>"
+        },
+        "nodeUnhealthyReason":{
+          "shape":"String",
+          "documentation":"<p>Specify a reason reported by the node monitoring agent that this override would apply to.</p>"
+        },
+        "minRepairWaitTimeMins":{
+          "shape":"NonZeroInteger",
+          "documentation":"<p>Specify the minimum time in minutes to wait before attempting to repair a node with this specific <code>nodeMonitoringCondition</code> and <code>nodeUnhealthyReason</code>.</p>"
+        },
+        "repairAction":{
+          "shape":"RepairAction",
+          "documentation":"<p>Specify the repair action to take for nodes when all of the specified conditions are met.</p>"
+        }
+      },
+      "documentation":"<p>Specify granular overrides for specific repair actions. These overrides control the repair action and the repair delay time before a node is considered eligible for repair. If you use this, you must specify all the values.</p>"
+    },
+    "NodeRepairConfigOverridesList":{
+      "type":"list",
+      "member":{"shape":"NodeRepairConfigOverrides"}
+    },
     "Nodegroup":{
       "type":"structure",
       "members":{
@@ -4722,7 +4948,7 @@
         },
         "updateStrategy":{
           "shape":"NodegroupUpdateStrategies",
-          "documentation":"<p>The configuration for the behavior to follow during a node group version update of this managed node group. You choose between two possible strategies for replacing nodes during an <a href=\"https://docs.aws.amazon.com/latest/APIReference/API_UpdateNodegroupVersion.html\">UpdateNodegroupVersion</a> action.</p> <p>An Amazon EKS managed node group updates by replacing nodes with new nodes of newer AMI versions in parallel. The <i>update strategy</i> changes the managed node update behavior of the managed node group for each quantity. The <i>default</i> strategy has guardrails to protect you from misconfiguration and launches the new instances first, before terminating the old instances. The <i>minimal</i> strategy removes the guardrails and terminates the old instances before launching the new instances. This minimal strategy is useful in scenarios where you are constrained to resources or costs (for example, with hardware accelerators such as GPUs).</p>"
+          "documentation":"<p>The configuration for the behavior to follow during a node group version update of this managed node group. You choose between two possible strategies for replacing nodes during an <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_UpdateNodegroupVersion.html\"> <code>UpdateNodegroupVersion</code> </a> action.</p> <p>An Amazon EKS managed node group updates by replacing nodes with new nodes of newer AMI versions in parallel. The <i>update strategy</i> changes the managed node update behavior of the managed node group for each quantity. The <i>default</i> strategy has guardrails to protect you from misconfiguration and launches the new instances first, before terminating the old instances. The <i>minimal</i> strategy removes the guardrails and terminates the old instances before launching the new instances. This minimal strategy is useful in scenarios where you are constrained to resources or costs (for example, with hardware accelerators such as GPUs).</p>"
         }
       },
       "documentation":"<p>The node group update configuration. An Amazon EKS managed node group updates by replacing nodes with new nodes of newer AMI versions in parallel. You choose the <i>maximum unavailable</i> and the <i>update strategy</i>.</p>"
@@ -4917,7 +5143,7 @@
         },
         "namespace":{
           "shape":"String",
-          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the association in. The service account and the pods that use the service account must be in this namespace.</p>"
+          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the association in. The service account and the Pods that use the service account must be in this namespace.</p>"
         },
         "serviceAccount":{
           "shape":"String",
@@ -4925,7 +5151,7 @@
         },
         "roleArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to associate with the service account. The EKS Pod Identity agent manages credentials to assume this role for applications in the containers in the pods that use this service account.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to associate with the service account. The EKS Pod Identity agent manages credentials to assume this role for applications in the containers in the Pods that use this service account.</p>"
         },
         "associationArn":{
           "shape":"String",
@@ -4945,11 +5171,23 @@
         },
         "modifiedAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The most recent timestamp that the association was modified at</p>"
+          "documentation":"<p>The most recent timestamp that the association was modified at.</p>"
         },
         "ownerArn":{
           "shape":"String",
-          "documentation":"<p>If defined, the Pod Identity Association is owned by an Amazon EKS Addon.</p>"
+          "documentation":"<p>If defined, the EKS Pod Identity association is owned by an Amazon EKS add-on.</p>"
+        },
+        "disableSessionTags":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>The state of the automatic sessions tags. The value of <i>true</i> disables these tags.</p> <p>EKS Pod Identity adds a pre-defined set of session tags when it assumes the role. You can use these tags to author a single role that can work across resources by allowing access to Amazon Web Services resources based on matching tags. By default, EKS Pod Identity attaches six tags, including tags for cluster name, namespace, and service account name. For the list of tags added by EKS Pod Identity, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags\">List of session tags added by EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+        },
+        "targetRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target IAM role to associate with the service account. This role is assumed by using the EKS Pod Identity association role, then the credentials for this role are injected into the Pod.</p>"
+        },
+        "externalId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier for this EKS Pod Identity association for a target IAM role. You put this value in the trust policy of the target role, in a <code>Condition</code> to match the <code>sts.ExternalId</code>. This ensures that the target role can only be assumed by this association. This prevents the <i>confused deputy problem</i>. For more information about the confused deputy problem, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html\">The confused deputy problem</a> in the <i>IAM User Guide</i>.</p> <p>If you want to use the same target role with multiple associations or other roles, use independent statements in the trust policy to allow <code>sts:AssumeRole</code> access from each role.</p>"
         }
       },
       "documentation":"<p>Amazon EKS Pod Identity associations provide the ability to manage credentials for your applications, similar to the way that Amazon EC2 instance profiles provide credentials to Amazon EC2 instances.</p>"
@@ -4967,7 +5205,7 @@
         },
         "namespace":{
           "shape":"String",
-          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the association in. The service account and the pods that use the service account must be in this namespace.</p>"
+          "documentation":"<p>The name of the Kubernetes namespace inside the cluster to create the association in. The service account and the Pods that use the service account must be in this namespace.</p>"
         },
         "serviceAccount":{
           "shape":"String",
@@ -4983,10 +5221,10 @@
         },
         "ownerArn":{
           "shape":"String",
-          "documentation":"<p>If defined, the Pod Identity Association is owned by an Amazon EKS Addon.</p>"
+          "documentation":"<p>If defined, the association is owned by an Amazon EKS add-on.</p>"
         }
       },
-      "documentation":"<p>The summarized description of the association.</p> <p>Each summary is simplified by removing these fields compared to the full <code> <a>PodIdentityAssociation</a> </code>:</p> <ul> <li> <p>The IAM role: <code>roleArn</code> </p> </li> <li> <p>The timestamp that the association was created at: <code>createdAt</code> </p> </li> <li> <p>The most recent timestamp that the association was modified at:. <code>modifiedAt</code> </p> </li> <li> <p>The tags on the association: <code>tags</code> </p> </li> </ul>"
+      "documentation":"<p>The summarized description of the association.</p> <p>Each summary is simplified by removing these fields compared to the full <a href=\"https://docs.aws.amazon.com/eks/latest/APIReference/API_PodIdentityAssociation.html\"> <code>PodIdentityAssociation</code> </a>:</p> <ul> <li> <p>The IAM role: <code>roleArn</code> </p> </li> <li> <p>The timestamp that the association was created at: <code>createdAt</code> </p> </li> <li> <p>The most recent timestamp that the association was modified at:. <code>modifiedAt</code> </p> </li> <li> <p>The tags on the association: <code>tags</code> </p> </li> </ul>"
     },
     "Provider":{
       "type":"structure",
@@ -5049,14 +5287,14 @@
       "members":{
         "remoteNodeNetworks":{
           "shape":"RemoteNodeNetworkList",
-          "documentation":"<p>The list of network CIDRs that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
+          "documentation":"<p>The list of network CIDRs that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
         },
         "remotePodNetworks":{
           "shape":"RemotePodNetworkList",
-          "documentation":"<p>The list of network CIDRs that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
+          "documentation":"<p>The list of network CIDRs that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can't change or update this configuration after the cluster is created.</p>"
+      "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can add, change, or remove this configuration after the cluster is created.</p>"
     },
     "RemoteNetworkConfigResponse":{
       "type":"structure",
@@ -5070,17 +5308,17 @@
           "documentation":"<p>The list of network CIDRs that can contain pods that run Kubernetes webhooks on hybrid nodes.</p>"
         }
       },
-      "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can't change or update this configuration after the cluster is created.</p>"
+      "documentation":"<p>The configuration in the cluster for EKS Hybrid Nodes. You can add, change, or remove this configuration after the cluster is created.</p>"
     },
     "RemoteNodeNetwork":{
       "type":"structure",
       "members":{
         "cidrs":{
           "shape":"StringList",
-          "documentation":"<p>A network CIDR that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
+          "documentation":"<p>A network CIDR that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>A network CIDR that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
+      "documentation":"<p>A network CIDR that can contain hybrid nodes.</p> <p>These CIDR blocks define the expected IP address range of the hybrid nodes that join the cluster. These blocks are typically determined by your network administrator. </p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> <li> <p>Each block must have a route to the VPC that uses the VPC CIDR blocks, not public IPs or Elastic IPs. There are many options including Transit Gateway, Site-to-Site VPN, or Direct Connect.</p> </li> <li> <p>Each host must allow outbound connection to the EKS cluster control plane on TCP ports <code>443</code> and <code>10250</code>.</p> </li> <li> <p>Each host must allow inbound connection from the EKS cluster control plane on TCP port 10250 for logs, exec and port-forward operations.</p> </li> <li> <p> Each host must allow TCP and UDP network connectivity to and from other hosts that are running <code>CoreDNS</code> on UDP port <code>53</code> for service and pod DNS names.</p> </li> </ul>"
     },
     "RemoteNodeNetworkList":{
       "type":"list",
@@ -5092,16 +5330,24 @@
       "members":{
         "cidrs":{
           "shape":"StringList",
-          "documentation":"<p>A network CIDR that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
+          "documentation":"<p>A network CIDR that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>A network CIDR that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /24, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
+      "documentation":"<p>A network CIDR that can contain pods that run Kubernetes webhooks on hybrid nodes.</p> <p>These CIDR blocks are determined by configuring your Container Network Interface (CNI) plugin. We recommend the Calico CNI or Cilium CNI. Note that the Amazon VPC CNI plugin for Kubernetes isn't available for on-premises and edge locations.</p> <p>Enter one or more IPv4 CIDR blocks in decimal dotted-quad notation (for example, <code> 10.2.0.0/16</code>).</p> <p>It must satisfy the following requirements:</p> <ul> <li> <p>Each block must be within an <code>IPv4</code> RFC-1918 network range. Minimum allowed size is /32, maximum allowed size is /8. Publicly-routable addresses aren't supported.</p> </li> <li> <p>Each block cannot overlap with the range of the VPC CIDR blocks for your EKS resources, or the block of the Kubernetes service IP range.</p> </li> </ul>"
     },
     "RemotePodNetworkList":{
       "type":"list",
       "member":{"shape":"RemotePodNetwork"},
       "max":1
     },
+    "RepairAction":{
+      "type":"string",
+      "enum":[
+        "Replace",
+        "Reboot",
+        "NoAction"
+      ]
+    },
     "ResolveConflicts":{
       "type":"string",
       "enum":[
@@ -5249,6 +5495,31 @@
       "exception":true,
       "fault":true
     },
+    "StartInsightsRefreshRequest":{
+      "type":"structure",
+      "required":["clusterName"],
+      "members":{
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The name of the cluster for the refresh insights operation.</p>",
+          "location":"uri",
+          "locationName":"name"
+        }
+      }
+    },
+    "StartInsightsRefreshResponse":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The message associated with the insights refresh operation.</p>"
+        },
+        "status":{
+          "shape":"InsightsRefreshStatus",
+          "documentation":"<p>The current status of the insights refresh operation.</p>"
+        }
+      }
+    },
     "StorageConfigRequest":{
       "type":"structure",
       "members":{
@@ -5322,8 +5593,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5356,6 +5626,19 @@
         "PREFER_NO_SCHEDULE"
       ]
     },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The Amazon EKS cluster associated with the exception.</p>"
+        },
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request or operation couldn't be performed because a service is throttling requests.</p>",
+      "error":{"httpStatusCode":429},
+      "exception":true
+    },
     "Timestamp":{"type":"timestamp"},
     "UnsupportedAvailabilityZoneException":{
       "type":"structure",
@@ -5404,8 +5687,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Update":{
       "type":"structure",
@@ -5532,7 +5814,7 @@
         },
         "podIdentityAssociations":{
           "shape":"AddonPodIdentityAssociationsList",
-          "documentation":"<p>An array of Pod Identity Assocations to be updated. Each EKS Pod Identity association maps a Kubernetes service account to an IAM Role. If this value is left blank, no change. If an empty array is provided, existing Pod Identity Assocations owned by the Addon are deleted.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
+          "documentation":"<p>An array of EKS Pod Identity associations to be updated. Each association maps a Kubernetes service account to an IAM role. If this value is left blank, no change. If an empty array is provided, existing associations owned by the add-on are deleted.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/add-ons-iam.html\">Attach an IAM Role to an Amazon EKS add-on using EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p>"
         }
       }
     },
@@ -5582,6 +5864,11 @@
         "storageConfig":{
           "shape":"StorageConfigRequest",
           "documentation":"<p>Update the configuration of the block storage capability of your EKS Auto Mode cluster. For example, enable the capability.</p>"
+        },
+        "remoteNetworkConfig":{"shape":"RemoteNetworkConfigRequest"},
+        "deletionProtection":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Specifies whether to enable or disable deletion protection for the cluster. When enabled (<code>true</code>), the cluster cannot be deleted until deletion protection is explicitly disabled. When disabled (<code>false</code>), the cluster can be deleted normally.</p>"
         }
       }
     },
@@ -5612,6 +5899,10 @@
           "shape":"String",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
           "idempotencyToken":true
+        },
+        "force":{
+          "shape":"Boolean",
+          "documentation":"<p>Set this value to <code>true</code> to override upgrade-blocking readiness checks when updating a cluster.</p>"
         }
       }
     },
@@ -5752,7 +6043,7 @@
         },
         "launchTemplate":{
           "shape":"LaunchTemplateSpecification",
-          "documentation":"<p>An object representing a node group's launch template specification. You can only update a node group using a launch template if the node group was originally deployed with a launch template.</p>"
+          "documentation":"<p>An object representing a node group's launch template specification. You can only update a node group using a launch template if the node group was originally deployed with a launch template. When updating, you must specify the same launch template ID or name that was used to create the node group.</p>"
         },
         "force":{
           "shape":"Boolean",
@@ -5822,7 +6113,10 @@
         "ZonalShiftConfig",
         "ComputeConfig",
         "StorageConfig",
-        "KubernetesNetworkConfig"
+        "KubernetesNetworkConfig",
+        "RemoteNetworkConfig",
+        "DeletionProtection",
+        "NodeRepairConfig"
       ]
     },
     "UpdateParams":{
@@ -5850,12 +6144,20 @@
         },
         "roleArn":{
           "shape":"String",
-          "documentation":"<p>The new IAM role to change the </p>"
+          "documentation":"<p>The new IAM role to change in the association.</p>"
         },
         "clientRequestToken":{
           "shape":"String",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
           "idempotencyToken":true
+        },
+        "disableSessionTags":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Disable the automatic sessions tags that are appended by EKS Pod Identity.</p> <p>EKS Pod Identity adds a pre-defined set of session tags when it assumes the role. You can use these tags to author a single role that can work across resources by allowing access to Amazon Web Services resources based on matching tags. By default, EKS Pod Identity attaches six tags, including tags for cluster name, namespace, and service account name. For the list of tags added by EKS Pod Identity, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags\">List of session tags added by EKS Pod Identity</a> in the <i>Amazon EKS User Guide</i>.</p> <p>Amazon Web Services compresses inline session policies, managed policy ARNs, and session tags into a packed binary format that has a separate limit. If you receive a <code>PackedPolicyTooLarge</code> error indicating the packed binary format has exceeded the size limit, you can attempt to reduce the size by disabling the session tags added by EKS Pod Identity.</p>"
+        },
+        "targetRoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target IAM role to associate with the service account. This role is assumed by using the EKS Pod Identity association role, then the credentials for this role are injected into the Pod.</p> <p>When you run applications on Amazon EKS, your application might need to access Amazon Web Services resources from a different role that exists in the same or different Amazon Web Services account. For example, your application running in “Account A” might need to access resources, such as buckets in “Account B” or within “Account A” itself. You can create a association to access Amazon Web Services resources in “Account B” by creating two IAM roles: a role in “Account A” and a role in “Account B” (which can be the same or different account), each with the necessary trust and permission policies. After you provide these roles in the <i>IAM role</i> and <i>Target IAM role</i> fields, EKS will perform role chaining to ensure your application gets the required permissions. This means Role A will assume Role B, allowing your Pods to securely access resources like S3 buckets in the target account.</p>"
         }
       }
     },
@@ -5864,7 +6166,7 @@
       "members":{
         "association":{
           "shape":"PodIdentityAssociation",
-          "documentation":"<p>The full description of the EKS Pod Identity association that was updated.</p>"
+          "documentation":"<p>The full description of the association that was updated.</p>"
         }
       }
     },
@@ -5906,7 +6208,9 @@
         "AccessConfigUpdate",
         "UpgradePolicyUpdate",
         "ZonalShiftConfigUpdate",
-        "AutoModeUpdate"
+        "AutoModeUpdate",
+        "RemoteNetworkConfigUpdate",
+        "DeletionProtectionUpdate"
       ]
     },
     "UpgradePolicyRequest":{
@@ -5929,6 +6233,14 @@
       },
       "documentation":"<p>This value indicates if extended support is enabled or disabled for the cluster.</p> <p> <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/extended-support-control.html\">Learn more about EKS Extended Support in the <i>Amazon EKS User Guide</i>.</a> </p>"
     },
+    "VersionStatus":{
+      "type":"string",
+      "enum":[
+        "UNSUPPORTED",
+        "STANDARD_SUPPORT",
+        "EXTENDED_SUPPORT"
+      ]
+    },
     "VpcConfigRequest":{
       "type":"structure",
       "members":{
@@ -5942,15 +6254,15 @@
         },
         "endpointPublicAccess":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>Set this value to <code>false</code> to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is <code>true</code>, which enables public access for your Kubernetes API server. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS cluster endpoint access control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
+          "documentation":"<p>Set this value to <code>false</code> to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is <code>true</code>, which enables public access for your Kubernetes API server. The endpoint domain name and IP address family depends on the value of the <code>ipFamily</code> for the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
         },
         "endpointPrivateAccess":{
           "shape":"BoxedBoolean",
-          "documentation":"<p>Set this value to <code>true</code> to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is <code>false</code>, which disables private access for your Kubernetes API server. If you disable private access and you have nodes or Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS cluster endpoint access control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
+          "documentation":"<p>Set this value to <code>true</code> to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is <code>false</code>, which disables private access for your Kubernetes API server. If you disable private access and you have nodes or Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
         },
         "publicAccessCidrs":{
           "shape":"StringList",
-          "documentation":"<p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is <code>0.0.0.0/0</code>. If you've disabled private endpoint access, make sure that you specify the necessary CIDR blocks for every node and Fargate <code>Pod</code> in the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS cluster endpoint access control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
+          "documentation":"<p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is <code>0.0.0.0/0</code> and additionally <code>::/0</code> for dual-stack `IPv6` clusters. If you've disabled private endpoint access, make sure that you specify the necessary CIDR blocks for every node and Fargate <code>Pod</code> in the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <p>Note that the public endpoints are dual-stack for only <code>IPv6</code> clusters that are made after October 2024. You can't add <code>IPv6</code> CIDR blocks to <code>IPv4</code> clusters or <code>IPv6</code> clusters that were made before October 2024.</p>"
         }
       },
       "documentation":"<p>An object representing the VPC configuration to use for an Amazon EKS cluster.</p>"
@@ -5980,11 +6292,11 @@
         },
         "endpointPrivateAccess":{
           "shape":"Boolean",
-          "documentation":"<p>This parameter indicates whether the Amazon EKS private API server endpoint is enabled. If the Amazon EKS private API server endpoint is enabled, Kubernetes API requests that originate from within your cluster's VPC use the private VPC endpoint instead of traversing the internet. If this value is disabled and you have nodes or Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Amazon EKS cluster endpoint access control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
+          "documentation":"<p>This parameter indicates whether the Amazon EKS private API server endpoint is enabled. If the Amazon EKS private API server endpoint is enabled, Kubernetes API requests that originate from within your cluster's VPC use the private VPC endpoint instead of traversing the internet. If this value is disabled and you have nodes or Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>"
         },
         "publicAccessCidrs":{
           "shape":"StringList",
-          "documentation":"<p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint.</p>"
+          "documentation":"<p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is <code>0.0.0.0/0</code> and additionally <code>::/0</code> for dual-stack `IPv6` clusters. If you've disabled private endpoint access, make sure that you specify the necessary CIDR blocks for every node and Fargate <code>Pod</code> in the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html\">Cluster API server endpoint</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <p>Note that the public endpoints are dual-stack for only <code>IPv6</code> clusters that are made after October 2024. You can't add <code>IPv6</code> CIDR blocks to <code>IPv4</code> clusters or <code>IPv6</code> clusters that were made before October 2024.</p>"
         }
       },
       "documentation":"<p>An object representing an Amazon EKS cluster VPC configuration response.</p>"
@@ -6041,6 +6353,11 @@
       "key":{"shape":"labelKey"},
       "value":{"shape":"labelValue"}
     },
+    "namespace":{
+      "type":"string",
+      "max":63,
+      "min":1
+    },
     "requiredClaimsKey":{
       "type":"string",
       "max":63,
diff -pruN 2.23.6-1/awscli/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/eks-auth/2023-11-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.elastic-inference-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.elastic-inference-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.elastic-inference.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://api.elastic-inference.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/paginators-1.json 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-{
-  "pagination": {
-    "DescribeAccelerators": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "acceleratorSet"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/elastic-inference/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elastic-inference/2017-07-25/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,537 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2017-07-25",
-    "endpointPrefix":"api.elastic-inference",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "protocols":["rest-json"],
-    "serviceAbbreviation":"Amazon Elastic Inference",
-    "serviceFullName":"Amazon Elastic  Inference",
-    "serviceId":"Elastic Inference",
-    "signatureVersion":"v4",
-    "signingName":"elastic-inference",
-    "uid":"elastic-inference-2017-07-25",
-    "auth":["aws.auth#sigv4"]
-  },
-  "operations":{
-    "DescribeAcceleratorOfferings":{
-      "name":"DescribeAcceleratorOfferings",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describe-accelerator-offerings"
-      },
-      "input":{"shape":"DescribeAcceleratorOfferingsRequest"},
-      "output":{"shape":"DescribeAcceleratorOfferingsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Describes the locations in which a given accelerator type or set of types is present in a given region. </p>"
-    },
-    "DescribeAcceleratorTypes":{
-      "name":"DescribeAcceleratorTypes",
-      "http":{
-        "method":"GET",
-        "requestUri":"/describe-accelerator-types"
-      },
-      "input":{"shape":"DescribeAcceleratorTypesRequest"},
-      "output":{"shape":"DescribeAcceleratorTypesResponse"},
-      "errors":[
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Describes the accelerator types available in a given region, as well as their characteristics, such as memory and throughput. </p>"
-    },
-    "DescribeAccelerators":{
-      "name":"DescribeAccelerators",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describe-accelerators"
-      },
-      "input":{"shape":"DescribeAcceleratorsRequest"},
-      "output":{"shape":"DescribeAcceleratorsResponse"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Describes information over a provided set of accelerators belonging to an account. </p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResult"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Returns all tags of an Elastic Inference Accelerator. </p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResult"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Adds the specified tags to an Elastic Inference Accelerator. </p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResult"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Removes the specified tags from an Elastic Inference Accelerator. </p>"
-    }
-  },
-  "shapes":{
-    "AcceleratorHealthStatus":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "AcceleratorId":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"^eia-[0-9a-f]+$"
-    },
-    "AcceleratorIdList":{
-      "type":"list",
-      "member":{"shape":"AcceleratorId"},
-      "max":1000,
-      "min":0
-    },
-    "AcceleratorType":{
-      "type":"structure",
-      "members":{
-        "acceleratorTypeName":{
-          "shape":"AcceleratorTypeName",
-          "documentation":"<p> The name of the Elastic Inference Accelerator type. </p>"
-        },
-        "memoryInfo":{
-          "shape":"MemoryInfo",
-          "documentation":"<p> The memory information of the Elastic Inference Accelerator type. </p>"
-        },
-        "throughputInfo":{
-          "shape":"ThroughputInfoList",
-          "documentation":"<p> The throughput information of the Elastic Inference Accelerator type. </p>"
-        }
-      },
-      "documentation":"<p> The details of an Elastic Inference Accelerator type. </p>"
-    },
-    "AcceleratorTypeList":{
-      "type":"list",
-      "member":{"shape":"AcceleratorType"},
-      "max":100,
-      "min":0
-    },
-    "AcceleratorTypeName":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"^\\S+$"
-    },
-    "AcceleratorTypeNameList":{
-      "type":"list",
-      "member":{"shape":"AcceleratorTypeName"},
-      "max":100,
-      "min":0
-    },
-    "AcceleratorTypeOffering":{
-      "type":"structure",
-      "members":{
-        "acceleratorType":{
-          "shape":"AcceleratorTypeName",
-          "documentation":"<p> The name of the Elastic Inference Accelerator type. </p>"
-        },
-        "locationType":{
-          "shape":"LocationType",
-          "documentation":"<p> The location type for the offering. It can assume the following values: region: defines that the offering is at the regional level. availability-zone: defines that the offering is at the availability zone level. availability-zone-id: defines that the offering is at the availability zone level, defined by the availability zone id. </p>"
-        },
-        "location":{
-          "shape":"Location",
-          "documentation":"<p> The location for the offering. It will return either the region, availability zone or availability zone id for the offering depending on the locationType value. </p>"
-        }
-      },
-      "documentation":"<p> The offering for an Elastic Inference Accelerator type. </p>"
-    },
-    "AcceleratorTypeOfferingList":{
-      "type":"list",
-      "member":{"shape":"AcceleratorTypeOffering"},
-      "max":100,
-      "min":0
-    },
-    "AvailabilityZone":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "BadRequestException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p> Raised when a malformed input has been provided to the API. </p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "DescribeAcceleratorOfferingsRequest":{
-      "type":"structure",
-      "required":["locationType"],
-      "members":{
-        "locationType":{
-          "shape":"LocationType",
-          "documentation":"<p> The location type that you want to describe accelerator type offerings for. It can assume the following values: region: will return the accelerator type offering at the regional level. availability-zone: will return the accelerator type offering at the availability zone level. availability-zone-id: will return the accelerator type offering at the availability zone level returning the availability zone id. </p>"
-        },
-        "acceleratorTypes":{
-          "shape":"AcceleratorTypeNameList",
-          "documentation":"<p> The list of accelerator types to describe. </p>"
-        }
-      }
-    },
-    "DescribeAcceleratorOfferingsResponse":{
-      "type":"structure",
-      "members":{
-        "acceleratorTypeOfferings":{
-          "shape":"AcceleratorTypeOfferingList",
-          "documentation":"<p> The list of accelerator type offerings for a specific location. </p>"
-        }
-      }
-    },
-    "DescribeAcceleratorTypesRequest":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DescribeAcceleratorTypesResponse":{
-      "type":"structure",
-      "members":{
-        "acceleratorTypes":{
-          "shape":"AcceleratorTypeList",
-          "documentation":"<p> The available accelerator types. </p>"
-        }
-      }
-    },
-    "DescribeAcceleratorsRequest":{
-      "type":"structure",
-      "members":{
-        "acceleratorIds":{
-          "shape":"AcceleratorIdList",
-          "documentation":"<p> The IDs of the accelerators to describe. </p>"
-        },
-        "filters":{
-          "shape":"FilterList",
-          "documentation":"<p> One or more filters. Filter names and values are case-sensitive. Valid filter names are: accelerator-types: can provide a list of accelerator type names to filter for. instance-id: can provide a list of EC2 instance ids to filter for. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p> The total number of items to return in the command's output. If the total number of items available is more than the value specified, a NextToken is provided in the command's output. To resume pagination, provide the NextToken value in the starting-token argument of a subsequent command. Do not use the NextToken response element directly outside of the AWS CLI. </p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p> A token to specify where to start paginating. This is the NextToken from a previously truncated response. </p>"
-        }
-      }
-    },
-    "DescribeAcceleratorsResponse":{
-      "type":"structure",
-      "members":{
-        "acceleratorSet":{
-          "shape":"ElasticInferenceAcceleratorSet",
-          "documentation":"<p> The details of the Elastic Inference Accelerators. </p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p> A token to specify where to start paginating. This is the NextToken from a previously truncated response. </p>"
-        }
-      }
-    },
-    "ElasticInferenceAccelerator":{
-      "type":"structure",
-      "members":{
-        "acceleratorHealth":{
-          "shape":"ElasticInferenceAcceleratorHealth",
-          "documentation":"<p> The health of the Elastic Inference Accelerator. </p>"
-        },
-        "acceleratorType":{
-          "shape":"AcceleratorTypeName",
-          "documentation":"<p> The type of the Elastic Inference Accelerator. </p>"
-        },
-        "acceleratorId":{
-          "shape":"AcceleratorId",
-          "documentation":"<p> The ID of the Elastic Inference Accelerator. </p>"
-        },
-        "availabilityZone":{
-          "shape":"AvailabilityZone",
-          "documentation":"<p> The availability zone where the Elastic Inference Accelerator is present. </p>"
-        },
-        "attachedResource":{
-          "shape":"ResourceArn",
-          "documentation":"<p> The ARN of the resource that the Elastic Inference Accelerator is attached to. </p>"
-        }
-      },
-      "documentation":"<p> The details of an Elastic Inference Accelerator. </p>"
-    },
-    "ElasticInferenceAcceleratorHealth":{
-      "type":"structure",
-      "members":{
-        "status":{
-          "shape":"AcceleratorHealthStatus",
-          "documentation":"<p> The health status of the Elastic Inference Accelerator. </p>"
-        }
-      },
-      "documentation":"<p> The health details of an Elastic Inference Accelerator. </p>"
-    },
-    "ElasticInferenceAcceleratorSet":{
-      "type":"list",
-      "member":{"shape":"ElasticInferenceAccelerator"}
-    },
-    "Filter":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"FilterName",
-          "documentation":"<p> The filter name for the Elastic Inference Accelerator list. It can assume the following values: accelerator-type: the type of Elastic Inference Accelerator to filter for. instance-id: an EC2 instance id to filter for. </p>"
-        },
-        "values":{
-          "shape":"ValueStringList",
-          "documentation":"<p> The values for the filter of the Elastic Inference Accelerator list. </p>"
-        }
-      },
-      "documentation":"<p> A filter expression for the Elastic Inference Accelerator list. </p>"
-    },
-    "FilterList":{
-      "type":"list",
-      "member":{"shape":"Filter"},
-      "max":100,
-      "min":0
-    },
-    "FilterName":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^\\S+$"
-    },
-    "Integer":{"type":"integer"},
-    "InternalServerException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p> Raised when an unexpected error occurred during request processing. </p>",
-      "error":{"httpStatusCode":500},
-      "exception":true
-    },
-    "Key":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"^\\S+$"
-    },
-    "KeyValuePair":{
-      "type":"structure",
-      "members":{
-        "key":{
-          "shape":"Key",
-          "documentation":"<p> The throughput value of the Elastic Inference Accelerator type. It can assume the following values: TFLOPS16bit: the throughput expressed in 16bit TeraFLOPS. TFLOPS32bit: the throughput expressed in 32bit TeraFLOPS. </p>"
-        },
-        "value":{
-          "shape":"Value",
-          "documentation":"<p> The throughput value of the Elastic Inference Accelerator type. </p>"
-        }
-      },
-      "documentation":"<p> A throughput entry for an Elastic Inference Accelerator type. </p>"
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["resourceArn"],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceARN",
-          "documentation":"<p> The ARN of the Elastic Inference Accelerator to list the tags for. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResult":{
-      "type":"structure",
-      "members":{
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The tags of the Elastic Inference Accelerator. </p>"
-        }
-      }
-    },
-    "Location":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "LocationType":{
-      "type":"string",
-      "enum":[
-        "region",
-        "availability-zone",
-        "availability-zone-id"
-      ],
-      "max":256,
-      "min":1
-    },
-    "MaxResults":{
-      "type":"integer",
-      "max":100,
-      "min":0
-    },
-    "MemoryInfo":{
-      "type":"structure",
-      "members":{
-        "sizeInMiB":{
-          "shape":"Integer",
-          "documentation":"<p> The size in mebibytes of the Elastic Inference Accelerator type. </p>"
-        }
-      },
-      "documentation":"<p> The memory information of an Elastic Inference Accelerator type. </p>"
-    },
-    "NextToken":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"^[A-Za-z0-9+/]+={0,2}$"
-    },
-    "ResourceARN":{
-      "type":"string",
-      "max":1011,
-      "min":1,
-      "pattern":"^arn:aws[^\\s:]*:elastic-inference:[^\\s:]+:\\d{12}:elastic-inference-accelerator/eia-[0-9a-f]+$"
-    },
-    "ResourceArn":{
-      "type":"string",
-      "max":1283,
-      "min":1
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p> Raised when the requested resource cannot be found. </p>",
-      "error":{"httpStatusCode":404},
-      "exception":true
-    },
-    "String":{
-      "type":"string",
-      "max":500000,
-      "pattern":"^.*$"
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^\\S$"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":50,
-      "min":1
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":50,
-      "min":1
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tags"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceARN",
-          "documentation":"<p> The ARN of the Elastic Inference Accelerator to tag. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The tags to add to the Elastic Inference Accelerator. </p>"
-        }
-      }
-    },
-    "TagResourceResult":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "pattern":".*"
-    },
-    "ThroughputInfoList":{
-      "type":"list",
-      "member":{"shape":"KeyValuePair"},
-      "max":100,
-      "min":0
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tagKeys"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceARN",
-          "documentation":"<p> The ARN of the Elastic Inference Accelerator to untag. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p> The list of tags to remove from the Elastic Inference Accelerator. </p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResult":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Value":{"type":"integer"},
-    "ValueStringList":{
-      "type":"list",
-      "member":{"shape":"String"},
-      "max":100,
-      "min":0
-    }
-  },
-  "documentation":"<note> <p>Amazon Elastic Inference is no longer available.</p> </note> <p> Elastic Inference public APIs. </p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elasticache/2015-02-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elasticache/2015-02-02/service-2.json 2.31.35-1/awscli/botocore/data/elasticache/2015-02-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/elasticache/2015-02-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elasticache/2015-02-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -400,7 +400,7 @@
         {"shape":"InvalidParameterCombinationException"},
         {"shape":"TagQuotaPerResourceExceeded"}
       ],
-      "documentation":"<p>For Valkey engine version 7.2 onwards and Redis OSS 6.0 and onwards: Creates a user. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html\">Using Role Based Access Control (RBAC)</a>.</p>"
+      "documentation":"<p>For Valkey engine version 7.2 onwards and Redis OSS 6.0 to 7.1: Creates a user. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html\">Using Role Based Access Control (RBAC)</a>.</p>"
     },
     "CreateUserGroup":{
       "name":"CreateUserGroup",
@@ -423,7 +423,7 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"TagQuotaPerResourceExceeded"}
       ],
-      "documentation":"<p>For Valkey engine version 7.2 onwards and Redis OSS 6.0 onwards: Creates a user group. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html\">Using Role Based Access Control (RBAC)</a> </p>"
+      "documentation":"<p>For Valkey engine version 7.2 onwards and Redis OSS 6.0 to 7.1: Creates a user group. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html\">Using Role Based Access Control (RBAC)</a> </p>"
     },
     "DecreaseNodeGroupsInGlobalReplicationGroup":{
       "name":"DecreaseNodeGroupsInGlobalReplicationGroup",
@@ -1559,8 +1559,7 @@
   "shapes":{
     "APICallRateForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The customer has exceeded the allowed rate of API calls.</p>",
       "error":{
         "code":"APICallRateForCustomerExceeded",
@@ -1671,8 +1670,7 @@
     },
     "AuthorizationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon EC2 security group is already authorized for the specified cache security group.</p>",
       "error":{
         "code":"AuthorizationAlreadyExists",
@@ -1683,8 +1681,7 @@
     },
     "AuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon EC2 security group is not authorized for the specified cache security group.</p>",
       "error":{
         "code":"AuthorizationNotFound",
@@ -1910,11 +1907,11 @@
         },
         "NetworkType":{
           "shape":"NetworkType",
-          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type associated with the cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type associated with the cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "TransitEncryptionMode":{
           "shape":"TransitEncryptionMode",
@@ -1926,8 +1923,7 @@
     },
     "CacheClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a cluster with the given identifier.</p>",
       "error":{
         "code":"CacheClusterAlreadyExists",
@@ -1964,8 +1960,7 @@
     },
     "CacheClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cluster ID does not refer to an existing cluster.</p>",
       "error":{
         "code":"CacheClusterNotFound",
@@ -2217,8 +2212,7 @@
     },
     "CacheParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A cache parameter group with the requested name already exists.</p>",
       "error":{
         "code":"CacheParameterGroupAlreadyExists",
@@ -2264,8 +2258,7 @@
     },
     "CacheParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache parameter group name does not refer to an existing cache parameter group.</p>",
       "error":{
         "code":"CacheParameterGroupNotFound",
@@ -2276,8 +2269,7 @@
     },
     "CacheParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the maximum number of cache security groups.</p>",
       "error":{
         "code":"CacheParameterGroupQuotaExceeded",
@@ -2347,8 +2339,7 @@
     },
     "CacheSecurityGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A cache security group with the specified name already exists.</p>",
       "error":{
         "code":"CacheSecurityGroupAlreadyExists",
@@ -2401,8 +2392,7 @@
     },
     "CacheSecurityGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache security group name does not refer to an existing cache security group.</p>",
       "error":{
         "code":"CacheSecurityGroupNotFound",
@@ -2413,8 +2403,7 @@
     },
     "CacheSecurityGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of cache security groups.</p>",
       "error":{
         "code":"QuotaExceeded.CacheSecurityGroup",
@@ -2455,7 +2444,7 @@
         },
         "SupportedNetworkTypes":{
           "shape":"NetworkTypeList",
-          "documentation":"<p>Either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>Either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         }
       },
       "documentation":"<p>Represents the output of one of the following operations:</p> <ul> <li> <p> <code>CreateCacheSubnetGroup</code> </p> </li> <li> <p> <code>ModifyCacheSubnetGroup</code> </p> </li> </ul>",
@@ -2463,8 +2452,7 @@
     },
     "CacheSubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache subnet group name is already in use by an existing cache subnet group.</p>",
       "error":{
         "code":"CacheSubnetGroupAlreadyExists",
@@ -2475,8 +2463,7 @@
     },
     "CacheSubnetGroupInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache subnet group is currently in use.</p>",
       "error":{
         "code":"CacheSubnetGroupInUse",
@@ -2501,8 +2488,7 @@
     },
     "CacheSubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache subnet group name does not refer to an existing cache subnet group.</p>",
       "error":{
         "code":"CacheSubnetGroupNotFoundFault",
@@ -2513,8 +2499,7 @@
     },
     "CacheSubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of cache subnet groups.</p>",
       "error":{
         "code":"CacheSubnetGroupQuotaExceeded",
@@ -2532,8 +2517,7 @@
     },
     "CacheSubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of subnets in a cache subnet group.</p>",
       "error":{
         "code":"CacheSubnetQuotaExceededFault",
@@ -2587,8 +2571,7 @@
     },
     "ClusterQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of clusters per customer.</p>",
       "error":{
         "code":"ClusterQuotaForCustomerExceeded",
@@ -2831,11 +2814,11 @@
         },
         "NetworkType":{
           "shape":"NetworkType",
-          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>. </p>"
+          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 and Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>. </p>"
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 and Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         }
       },
       "documentation":"<p>Represents the input of a CreateCacheCluster operation.</p>"
@@ -2860,7 +2843,7 @@
         },
         "CacheParameterGroupFamily":{
           "shape":"String",
-          "documentation":"<p>The name of the cache parameter group family that the cache parameter group can be used with.</p> <p>Valid values are: <code>memcached1.4</code> | <code>memcached1.5</code> | <code>memcached1.6</code> | <code>redis2.6</code> | <code>redis2.8</code> | <code>redis3.2</code> | <code>redis4.0</code> | <code>redis5.0</code> | <code>redis6.x</code> | <code>redis7</code> </p>"
+          "documentation":"<p>The name of the cache parameter group family that the cache parameter group can be used with.</p> <p>Valid values are: <code>valkey8</code> | <code>valkey7</code> | <code>memcached1.4</code> | <code>memcached1.5</code> | <code>memcached1.6</code> | <code>redis2.6</code> | <code>redis2.8</code> | <code>redis3.2</code> | <code>redis4.0</code> | <code>redis5.0</code> | <code>redis6.x</code> | <code>redis7</code> </p>"
         },
         "Description":{
           "shape":"String",
@@ -3024,7 +3007,7 @@
         },
         "Engine":{
           "shape":"String",
-          "documentation":"<p>The name of the cache engine to be used for the clusters in this replication group. The value must be set to <code>Redis</code>.</p>"
+          "documentation":"<p>The name of the cache engine to be used for the clusters in this replication group. The value must be set to <code>valkey</code> or <code>redis</code>.</p>"
         },
         "EngineVersion":{
           "shape":"String",
@@ -3092,7 +3075,7 @@
         },
         "AtRestEncryptionEnabled":{
           "shape":"BooleanOptional",
-          "documentation":"<p>A flag that enables encryption at rest when set to <code>true</code>.</p> <p>You cannot modify the value of <code>AtRestEncryptionEnabled</code> after the replication group is created. To enable encryption at rest on a replication group you must set <code>AtRestEncryptionEnabled</code> to <code>true</code> when you create the replication group. </p> <p> <b>Required:</b> Only available when creating a replication group in an Amazon VPC using Redis OSS version <code>3.2.6</code>, <code>4.x</code> or later.</p> <p>Default: <code>false</code> </p>"
+          "documentation":"<p>A flag that enables encryption at rest when set to <code>true</code>.</p> <p>You cannot modify the value of <code>AtRestEncryptionEnabled</code> after the replication group is created. To enable encryption at rest on a replication group you must set <code>AtRestEncryptionEnabled</code> to <code>true</code> when you create the replication group. </p> <p> <b>Required:</b> Only available when creating a replication group in an Amazon VPC using Valkey 7.2 and later, Redis OSS version <code>3.2.6</code>, or Redis OSS <code>4.x</code> and later.</p> <p>Default: <code>true</code> when using Valkey, <code>false</code> when using Redis OSS</p>"
         },
         "KmsKeyId":{
           "shape":"String",
@@ -3112,11 +3095,11 @@
         },
         "NetworkType":{
           "shape":"NetworkType",
-          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 and Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type you choose when creating a replication group, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type you choose when creating a replication group, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "TransitEncryptionMode":{
           "shape":"TransitEncryptionMode",
@@ -3289,7 +3272,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The current supported value is Redis user. </p>"
+          "documentation":"<p>Sets the engine listed in a user group. The options are valkey or redis.</p>"
         },
         "UserIds":{
           "shape":"UserIdListInput",
@@ -3320,7 +3303,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The current supported value is Redis. </p>"
+          "documentation":"<p>The options are valkey or redis. </p>"
         },
         "Passwords":{
           "shape":"PasswordListInput",
@@ -3445,7 +3428,7 @@
         },
         "ReplicaConfiguration":{
           "shape":"ReplicaConfigurationList",
-          "documentation":"<p>A list of <code>ConfigureShard</code> objects that can be used to configure each shard in a Valkey or Redis OSS (cluster mode enabled) replication group. The <code>ConfigureShard</code> has three members: <code>NewReplicaCount</code>, <code>NodeGroupId</code>, and <code>PreferredAvailabilityZones</code>.</p>"
+          "documentation":"<p>A list of <code>ConfigureShard</code> objects that can be used to configure each shard in a Valkey or Redis OSS replication group. The <code>ConfigureShard</code> has three members: <code>NewReplicaCount</code>, <code>NodeGroupId</code>, and <code>PreferredAvailabilityZones</code>.</p>"
         },
         "ReplicasToRemove":{
           "shape":"RemoveReplicasList",
@@ -3465,8 +3448,7 @@
     },
     "DefaultUserAssociatedToUserGroupFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The default user assigned to the user group.</p>",
       "error":{
         "code":"DefaultUserAssociatedToUserGroup",
@@ -3477,8 +3459,7 @@
     },
     "DefaultUserRequired":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You must add default user to a user group.</p>",
       "error":{
         "code":"DefaultUserRequired",
@@ -4286,8 +4267,7 @@
     "Double":{"type":"double"},
     "DuplicateUserNameFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A user with this username already exists.</p>",
       "error":{
         "code":"DuplicateUserName",
@@ -4597,8 +4577,7 @@
     },
     "GlobalReplicationGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Global datastore name already exists.</p>",
       "error":{
         "code":"GlobalReplicationGroupAlreadyExistsFault",
@@ -4664,8 +4643,7 @@
     },
     "GlobalReplicationGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Global datastore does not exist</p>",
       "error":{
         "code":"GlobalReplicationGroupNotFoundFault",
@@ -4747,8 +4725,7 @@
     },
     "InsufficientCacheClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache node type is not available in the specified Availability Zone. For more information, see <a href=\"http://docs.aws.amazon.com/AmazonElastiCache/latest/dg/ErrorMessages.html#ErrorMessages.INSUFFICIENT_CACHE_CLUSTER_CAPACITY\">InsufficientCacheClusterCapacity</a> in the ElastiCache User Guide.</p>",
       "error":{
         "code":"InsufficientCacheClusterCapacity",
@@ -4761,8 +4738,7 @@
     "IntegerOptional":{"type":"integer"},
     "InvalidARNFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested Amazon Resource Name (ARN) does not refer to an existing resource.</p>",
       "error":{
         "code":"InvalidARN",
@@ -4773,8 +4749,7 @@
     },
     "InvalidCacheClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cluster is not in the <code>available</code> state.</p>",
       "error":{
         "code":"InvalidCacheClusterState",
@@ -4785,8 +4760,7 @@
     },
     "InvalidCacheParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The current state of the cache parameter group does not allow the requested operation to occur.</p>",
       "error":{
         "code":"InvalidCacheParameterGroupState",
@@ -4797,8 +4771,7 @@
     },
     "InvalidCacheSecurityGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The current state of the cache security group does not allow deletion.</p>",
       "error":{
         "code":"InvalidCacheSecurityGroupState",
@@ -4809,8 +4782,7 @@
     },
     "InvalidCredentialsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You must enter valid credentials.</p>",
       "error":{
         "code":"InvalidCredentialsException",
@@ -4821,8 +4793,7 @@
     },
     "InvalidGlobalReplicationGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Global datastore is not available or in primary-only state.</p>",
       "error":{
         "code":"InvalidGlobalReplicationGroupState",
@@ -4833,8 +4804,7 @@
     },
     "InvalidKMSKeyFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The KMS key supplied is not valid.</p>",
       "error":{
         "code":"InvalidKMSKeyFault",
@@ -4879,8 +4849,7 @@
     },
     "InvalidReplicationGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested replication group is not in the <code>available</code> state.</p>",
       "error":{
         "code":"InvalidReplicationGroupState",
@@ -4891,8 +4860,7 @@
     },
     "InvalidServerlessCacheSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the serverless cache snapshot was not received. Available for Valkey, Redis OSS and Serverless Memcached only.</p>",
       "error":{
         "code":"InvalidServerlessCacheSnapshotStateFault",
@@ -4903,8 +4871,7 @@
     },
     "InvalidServerlessCacheStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The account for these credentials is not currently active.</p>",
       "error":{
         "code":"InvalidServerlessCacheStateFault",
@@ -4915,8 +4882,7 @@
     },
     "InvalidSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The current state of the snapshot does not allow the requested operation to occur.</p>",
       "error":{
         "code":"InvalidSnapshotState",
@@ -4927,8 +4893,7 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid subnet identifier was specified.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -4939,8 +4904,7 @@
     },
     "InvalidUserGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user group is not in an active state.</p>",
       "error":{
         "code":"InvalidUserGroupState",
@@ -4951,8 +4915,7 @@
     },
     "InvalidUserStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user is not in active state.</p>",
       "error":{
         "code":"InvalidUserState",
@@ -4963,8 +4926,7 @@
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The VPC network is in an invalid state.</p>",
       "error":{
         "code":"InvalidVPCNetworkStateFault",
@@ -5167,7 +5129,7 @@
         },
         "Engine":{
           "shape":"String",
-          "documentation":"<p>Modifies the engine listed in a cluster message. The options are redis, memcached or valkey.</p>"
+          "documentation":"<p>The engine type used by the cache cluster. The options are valkey, memcached or redis.</p>"
         },
         "EngineVersion":{
           "shape":"String",
@@ -5203,7 +5165,11 @@
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+        },
+        "ScaleConfig":{
+          "shape":"ScaleConfig",
+          "documentation":"<p>Configures horizontal or vertical scaling for Memcached clusters, specifying the scaling percentage and interval.</p>"
         }
       },
       "documentation":"<p>Represents the input of a <code>ModifyCacheCluster</code> operation.</p>"
@@ -5415,7 +5381,7 @@
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 and Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "TransitEncryptionEnabled":{
           "shape":"BooleanOptional",
@@ -5552,7 +5518,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The engine for a user group. </p>"
+          "documentation":"<p>Modifies the engine listed in a user group. The options are valkey or redis.</p>"
         }
       }
     },
@@ -5586,7 +5552,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The engine for a specific user. </p>"
+          "documentation":"<p>Modifies the engine listed for a user. The options are valkey or redis.</p>"
         }
       }
     },
@@ -5611,8 +5577,7 @@
     },
     "NoOperationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation was not performed because no changes were required.</p>",
       "error":{
         "code":"NoOperationFault",
@@ -5787,8 +5752,7 @@
     },
     "NodeGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The node group specified by the <code>NodeGroupId</code> parameter could not be found. Please verify that the node group exists and that you spelled the <code>NodeGroupId</code> value correctly.</p>",
       "error":{
         "code":"NodeGroupNotFoundFault",
@@ -5820,8 +5784,7 @@
     },
     "NodeGroupsPerReplicationGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the maximum allowed number of node groups (shards) in a single replication group. The default maximum is 90</p>",
       "error":{
         "code":"NodeGroupsPerReplicationGroupQuotaExceeded",
@@ -5846,8 +5809,7 @@
     },
     "NodeQuotaForClusterExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of cache nodes in a single cluster.</p>",
       "error":{
         "code":"NodeQuotaForClusterExceeded",
@@ -5858,8 +5820,7 @@
     },
     "NodeQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the allowed number of cache nodes per customer.</p>",
       "error":{
         "code":"NodeQuotaForCustomerExceeded",
@@ -6103,6 +6064,10 @@
         "TransitEncryptionMode":{
           "shape":"TransitEncryptionMode",
           "documentation":"<p>A setting that allows you to migrate your clients to use in-transit encryption, with no downtime.</p>"
+        },
+        "ScaleConfig":{
+          "shape":"ScaleConfig",
+          "documentation":"<p>The scaling configuration changes that are pending for the Memcached cluster.</p>"
         }
       },
       "documentation":"<p>A group of settings that are applied to the cluster in the future, or that are currently being applied.</p>"
@@ -6420,11 +6385,11 @@
         },
         "NetworkType":{
           "shape":"NetworkType",
-          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>Must be either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "IpDiscovery":{
           "shape":"IpDiscovery",
-          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>The network type you choose when modifying a cluster, either <code>ipv4</code> | <code>ipv6</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         },
         "TransitEncryptionMode":{
           "shape":"TransitEncryptionMode",
@@ -6444,8 +6409,7 @@
     },
     "ReplicationGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified replication group already exists.</p>",
       "error":{
         "code":"ReplicationGroupAlreadyExists",
@@ -6456,8 +6420,7 @@
     },
     "ReplicationGroupAlreadyUnderMigrationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The targeted replication group is not available. </p>",
       "error":{
         "code":"ReplicationGroupAlreadyUnderMigrationFault",
@@ -6494,8 +6457,7 @@
     },
     "ReplicationGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified replication group does not exist.</p>",
       "error":{
         "code":"ReplicationGroupNotFoundFault",
@@ -6506,8 +6468,7 @@
     },
     "ReplicationGroupNotUnderMigrationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The designated replication group is not available for data migration.</p>",
       "error":{
         "code":"ReplicationGroupNotUnderMigrationFault",
@@ -6626,8 +6587,7 @@
     },
     "ReservedCacheNodeAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a reservation with the given identifier.</p>",
       "error":{
         "code":"ReservedCacheNodeAlreadyExists",
@@ -6659,8 +6619,7 @@
     },
     "ReservedCacheNodeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested reserved cache node was not found.</p>",
       "error":{
         "code":"ReservedCacheNodeNotFound",
@@ -6671,8 +6630,7 @@
     },
     "ReservedCacheNodeQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the user's cache node quota.</p>",
       "error":{
         "code":"ReservedCacheNodeQuotaExceeded",
@@ -6743,8 +6701,7 @@
     },
     "ReservedCacheNodesOfferingNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested cache node offering does not exist.</p>",
       "error":{
         "code":"ReservedCacheNodesOfferingNotFound",
@@ -6832,6 +6789,20 @@
         "CacheSecurityGroup":{"shape":"CacheSecurityGroup"}
       }
     },
+    "ScaleConfig":{
+      "type":"structure",
+      "members":{
+        "ScalePercentage":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The percentage by which to scale the Memcached cluster, either horizontally by adding nodes or vertically by increasing resources.</p>"
+        },
+        "ScaleIntervalMinutes":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The time interval in seconds between scaling operations when performing gradual scaling for a Memcached cluster.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for horizontal or vertical scaling operations on Memcached clusters.</p>"
+    },
     "SecurityGroupIdsList":{
       "type":"list",
       "member":{
@@ -6927,8 +6898,7 @@
     },
     "ServerlessCacheAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A serverless cache with this name already exists.</p>",
       "error":{
         "code":"ServerlessCacheAlreadyExistsFault",
@@ -6961,8 +6931,7 @@
     },
     "ServerlessCacheNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The serverless cache was not found or does not exist.</p>",
       "error":{
         "code":"ServerlessCacheNotFoundFault",
@@ -6973,8 +6942,7 @@
     },
     "ServerlessCacheQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of serverless caches exceeds the customer quota.</p>",
       "error":{
         "code":"ServerlessCacheQuotaForCustomerExceededFault",
@@ -7027,8 +6995,7 @@
     },
     "ServerlessCacheSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A serverless cache snapshot with this name already exists. Available for Valkey, Redis OSS and Serverless Memcached only.</p>",
       "error":{
         "code":"ServerlessCacheSnapshotAlreadyExistsFault",
@@ -7046,8 +7013,7 @@
     },
     "ServerlessCacheSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This serverless cache snapshot could not be found or does not exist. Available for Valkey, Redis OSS and Serverless Memcached only.</p>",
       "error":{
         "code":"ServerlessCacheSnapshotNotFoundFault",
@@ -7058,8 +7024,7 @@
     },
     "ServerlessCacheSnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of serverless cache snapshots exceeds the customer snapshot quota. Available for Valkey, Redis OSS and Serverless Memcached only.</p>",
       "error":{
         "code":"ServerlessCacheSnapshotQuotaExceededFault",
@@ -7070,8 +7035,7 @@
     },
     "ServiceLinkedRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified service linked role (SLR) was not found.</p>",
       "error":{
         "code":"ServiceLinkedRoleNotFoundFault",
@@ -7143,8 +7107,7 @@
     },
     "ServiceUpdateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The service update doesn't exist</p>",
       "error":{
         "code":"ServiceUpdateNotFoundFault",
@@ -7331,8 +7294,7 @@
     },
     "SnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a snapshot with the given name.</p>",
       "error":{
         "code":"SnapshotAlreadyExistsFault",
@@ -7350,8 +7312,7 @@
     },
     "SnapshotFeatureNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You attempted one of the following operations:</p> <ul> <li> <p>Creating a snapshot of a Valkey or Redis OSS cluster running on a <code>cache.t1.micro</code> cache node.</p> </li> <li> <p>Creating a snapshot of a cluster that is running Memcached rather than Valkey or Redis OSS.</p> </li> </ul> <p>Neither of these are supported by ElastiCache.</p>",
       "error":{
         "code":"SnapshotFeatureNotSupportedFault",
@@ -7369,8 +7330,7 @@
     },
     "SnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested snapshot name does not refer to an existing snapshot.</p>",
       "error":{
         "code":"SnapshotNotFoundFault",
@@ -7381,8 +7341,7 @@
     },
     "SnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the maximum number of snapshots.</p>",
       "error":{
         "code":"SnapshotQuotaExceededFault",
@@ -7446,7 +7405,7 @@
         },
         "SupportedNetworkTypes":{
           "shape":"NetworkTypeList",
-          "documentation":"<p>Either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 and above or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
+          "documentation":"<p>Either <code>ipv4</code> | <code>ipv6</code> | <code>dual_stack</code>. IPv6 is supported for workloads using Valkey 7.2 and above, Redis OSS engine version 6.2 to 7.1 or Memcached engine version 1.6.6 and above on all instances built on the <a href=\"http://aws.amazon.com/ec2/nitro/\">Nitro system</a>.</p>"
         }
       },
       "documentation":"<p>Represents the subnet associated with a cluster. This parameter refers to subnets defined in Amazon Virtual Private Cloud (Amazon VPC) and used with ElastiCache.</p>"
@@ -7467,8 +7426,7 @@
     },
     "SubnetInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is being used by another cache subnet group.</p>",
       "error":{
         "code":"SubnetInUse",
@@ -7486,8 +7444,7 @@
     },
     "SubnetNotAllowedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>At least one subnet ID does not match the other subnet IDs. This mismatch typically occurs when a user sets one subnet ID to a regional Availability Zone and a different one to an outpost. Or when a user sets the subnet ID to an Outpost when not subscribed on this service.</p>",
       "error":{
         "code":"SubnetNotAllowedFault",
@@ -7540,8 +7497,7 @@
     },
     "TagNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested tag was not found on this resource.</p>",
       "error":{
         "code":"TagNotFound",
@@ -7552,8 +7508,7 @@
     },
     "TagQuotaPerResourceExceeded":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would cause the resource to have more than the allowed number of tags. The maximum number of tags permitted on a resource is 50.</p>",
       "error":{
         "code":"TagQuotaPerResourceExceeded",
@@ -7581,8 +7536,7 @@
     },
     "TestFailoverNotAvailableFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>TestFailover</code> action is not available.</p>",
       "error":{
         "code":"TestFailoverNotAvailableFault",
@@ -7825,7 +7779,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The current supported value is Redis.</p>"
+          "documentation":"<p>The options are valkey or redis.</p>"
         },
         "MinimumEngineVersion":{
           "shape":"String",
@@ -7851,8 +7805,7 @@
     },
     "UserAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A user with this ID already exists.</p>",
       "error":{
         "code":"UserAlreadyExists",
@@ -7874,7 +7827,7 @@
         },
         "Engine":{
           "shape":"EngineType",
-          "documentation":"<p>The current supported value is Redis user. </p>"
+          "documentation":"<p>The options are valkey or redis.</p>"
         },
         "UserIds":{
           "shape":"UserIdList",
@@ -7904,8 +7857,7 @@
     },
     "UserGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user group with this ID already exists.</p>",
       "error":{
         "code":"UserGroupAlreadyExists",
@@ -7934,8 +7886,7 @@
     },
     "UserGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user group was not found or does not exist</p>",
       "error":{
         "code":"UserGroupNotFound",
@@ -7960,8 +7911,7 @@
     },
     "UserGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of users exceeds the user group limit.</p>",
       "error":{
         "code":"UserGroupQuotaExceeded",
@@ -8008,8 +7958,7 @@
     },
     "UserNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user does not exist or could not be found.</p>",
       "error":{
         "code":"UserNotFound",
@@ -8020,8 +7969,7 @@
     },
     "UserQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota of users has been exceeded.</p>",
       "error":{
         "code":"UserQuotaExceeded",
diff -pruN 2.23.6-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/service-2.json 2.31.35-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elasticbeanstalk/2010-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1170,8 +1170,7 @@
     "CnameAvailability":{"type":"boolean"},
     "CodeBuildNotInServiceRegionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>AWS CodeBuild is not available in the specified region.</p>",
       "error":{
         "code":"CodeBuildNotInServiceRegionException",
@@ -2675,8 +2674,7 @@
     },
     "InsufficientPrivilegesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account does not have sufficient privileges for one or more AWS services.</p>",
       "error":{
         "code":"InsufficientPrivilegesException",
@@ -2688,8 +2686,7 @@
     "Integer":{"type":"integer"},
     "InvalidRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more input parameters is not valid. Please correct the input parameters and try the operation again.</p>",
       "error":{
         "code":"InvalidRequestException",
@@ -2982,8 +2979,7 @@
     },
     "ManagedActionInvalidStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cannot modify the managed action in its current state.</p>",
       "error":{
         "code":"ManagedActionInvalidStateException",
@@ -3058,8 +3054,7 @@
     "OperatingSystemVersion":{"type":"string"},
     "OperationInProgressException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Unable to perform the specified operation because another operation that effects an element in this activity is already in progress.</p>",
       "error":{
         "code":"OperationInProgressFailure",
@@ -3383,8 +3378,7 @@
     "PlatformVersion":{"type":"string"},
     "PlatformVersionStillReferencedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You cannot delete the platform version because there are still environments running on it.</p>",
       "error":{
         "code":"PlatformVersionStillReferencedException",
@@ -3458,8 +3452,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A resource doesn't exist for the specified Amazon Resource Name (ARN).</p>",
       "error":{
         "code":"ResourceNotFoundException",
@@ -3519,8 +3512,7 @@
     },
     "ResourceTypeNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The type of the specified Amazon Resource Name (ARN) isn't supported for this operation.</p>",
       "error":{
         "code":"ResourceTypeNotSupportedException",
@@ -3596,8 +3588,7 @@
     },
     "S3LocationNotInServiceRegionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified S3 bucket does not belong to the S3 region in which the service is running. The following regions are supported:</p> <ul> <li> <p>IAD/us-east-1</p> </li> <li> <p>PDX/us-west-2</p> </li> <li> <p>DUB/eu-west-1</p> </li> </ul>",
       "error":{
         "code":"S3LocationNotInServiceRegionException",
@@ -3608,8 +3599,7 @@
     },
     "S3SubscriptionRequiredException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account does not have a subscription to Amazon S3.</p>",
       "error":{
         "code":"S3SubscriptionRequiredException",
@@ -3738,8 +3728,7 @@
     },
     "SourceBundleDeletionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Unable to delete the Amazon S3 source bundle associated with the application version. The application version was deleted successfully.</p>",
       "error":{
         "code":"SourceBundleDeletionFailure",
@@ -3917,15 +3906,13 @@
     "Token":{"type":"string"},
     "TooManyApplicationVersionsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account has reached its limit of application versions.</p>",
       "exception":true
     },
     "TooManyApplicationsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account has reached its limit of applications.</p>",
       "error":{
         "code":"TooManyApplicationsException",
@@ -3936,8 +3923,7 @@
     },
     "TooManyBucketsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account has reached its limit of Amazon S3 buckets.</p>",
       "error":{
         "code":"TooManyBucketsException",
@@ -3948,8 +3934,7 @@
     },
     "TooManyConfigurationTemplatesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account has reached its limit of configuration templates.</p>",
       "error":{
         "code":"TooManyConfigurationTemplatesException",
@@ -3960,8 +3945,7 @@
     },
     "TooManyEnvironmentsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified account has reached its limit of environments.</p>",
       "error":{
         "code":"TooManyEnvironmentsException",
@@ -3972,8 +3956,7 @@
     },
     "TooManyPlatformsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of allowed platforms associated with the account.</p>",
       "error":{
         "code":"TooManyPlatformsException",
@@ -3984,8 +3967,7 @@
     },
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of tags in the resource would exceed the number of tags that each resource can have.</p> <p>To calculate this, the operation considers both the number of tags the resource already has and the tags this operation would add if it succeeded.</p>",
       "error":{
         "code":"TooManyTagsException",
diff -pruN 2.23.6-1/awscli/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elastictranscoder/2012-09-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elastictranscoder/2012-09-25/service-2.json 2.31.35-1/awscli/botocore/data/elastictranscoder/2012-09-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/elastictranscoder/2012-09-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elastictranscoder/2012-09-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -328,8 +328,7 @@
     },
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>General authentication failure. The request was not signed correctly.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -491,8 +490,7 @@
     },
     "CancelJobResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response body contains a JSON object. If the job is successfully canceled, the value of <code>Success</code> is <code>true</code>.</p>"
     },
     "CaptionFormat":{
@@ -864,8 +862,7 @@
     },
     "DeletePipelineResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>DeletePipelineResponse</code> structure.</p>"
     },
     "DeletePresetRequest":{
@@ -883,8 +880,7 @@
     },
     "DeletePresetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>DeletePresetResponse</code> structure.</p>"
     },
     "Description":{
@@ -1026,8 +1022,7 @@
     },
     "IncompatibleVersionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -1051,8 +1046,7 @@
     },
     "InternalServiceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Elastic Transcoder encountered an unexpected exception while trying to fulfill the request.</p>",
       "exception":true,
       "fault":true
@@ -1333,8 +1327,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Too many operations for a given AWS account. For example, the number of pipelines exceeds the maximum allowed.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
@@ -1912,16 +1905,14 @@
     },
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource you are attempting to change is in use. For example, you are attempting to delete a pipeline that is currently in use.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested resource does not exist or is not available. For example, the pipeline to which you're trying to add a job doesn't exist or is still being created.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
@@ -2212,8 +2203,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more required parameter values were not provided in the request.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elb/2012-06-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elb/2012-06-01/service-2.json 2.31.35-1/awscli/botocore/data/elb/2012-06-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/elb/2012-06-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elb/2012-06-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -554,8 +554,7 @@
     "AccessPointName":{"type":"string"},
     "AccessPointNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified load balancer does not exist.</p>",
       "error":{
         "code":"LoadBalancerNotFound",
@@ -613,8 +612,7 @@
     },
     "AddTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of AddTags.</p>"
     },
     "AdditionalAttribute":{
@@ -749,8 +747,7 @@
     "Cardinality":{"type":"string"},
     "CertificateNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified ARN does not refer to a valid SSL certificate in AWS Identity and Access Management (IAM) or AWS Certificate Manager (ACM). Note that if you recently uploaded the certificate to IAM, this error might indicate that the certificate is not fully available yet.</p>",
       "error":{
         "code":"CertificateNotFound",
@@ -890,8 +887,7 @@
     },
     "CreateAppCookieStickinessPolicyOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output for CreateAppCookieStickinessPolicy.</p>"
     },
     "CreateLBCookieStickinessPolicyInput":{
@@ -918,8 +914,7 @@
     },
     "CreateLBCookieStickinessPolicyOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output for CreateLBCookieStickinessPolicy.</p>"
     },
     "CreateLoadBalancerListenerInput":{
@@ -942,8 +937,7 @@
     },
     "CreateLoadBalancerListenerOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the parameters for CreateLoadBalancerListener.</p>"
     },
     "CreateLoadBalancerPolicyInput":{
@@ -975,8 +969,7 @@
     },
     "CreateLoadBalancerPolicyOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of CreateLoadBalancerPolicy.</p>"
     },
     "CreatedTime":{"type":"timestamp"},
@@ -1007,8 +1000,7 @@
     },
     "DeleteAccessPointOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of DeleteLoadBalancer.</p>"
     },
     "DeleteLoadBalancerListenerInput":{
@@ -1031,8 +1023,7 @@
     },
     "DeleteLoadBalancerListenerOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of DeleteLoadBalancerListeners.</p>"
     },
     "DeleteLoadBalancerPolicyInput":{
@@ -1055,14 +1046,12 @@
     },
     "DeleteLoadBalancerPolicyOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of DeleteLoadBalancerPolicy.</p>"
     },
     "DependencyThrottleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request made by Elastic Load Balancing to another service exceeds the maximum request rate permitted for your account.</p>",
       "error":{
         "code":"DependencyThrottle",
@@ -1299,8 +1288,7 @@
     },
     "DuplicateAccessPointNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified load balancer name already exists for this account.</p>",
       "error":{
         "code":"DuplicateLoadBalancerName",
@@ -1311,8 +1299,7 @@
     },
     "DuplicateListenerException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A listener already exists for the specified load balancer name and port, but with a different instance port, protocol, or SSL certificate.</p>",
       "error":{
         "code":"DuplicateListener",
@@ -1323,8 +1310,7 @@
     },
     "DuplicatePolicyNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A policy with the specified name already exists for this load balancer.</p>",
       "error":{
         "code":"DuplicatePolicyName",
@@ -1335,8 +1321,7 @@
     },
     "DuplicateTagKeysException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A tag key was specified more than once.</p>",
       "error":{
         "code":"DuplicateTagKeys",
@@ -1448,8 +1433,7 @@
     },
     "InvalidConfigurationRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested configuration change is not valid.</p>",
       "error":{
         "code":"InvalidConfigurationRequest",
@@ -1460,8 +1444,7 @@
     },
     "InvalidEndPointException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified endpoint is not valid.</p>",
       "error":{
         "code":"InvalidInstance",
@@ -1472,8 +1455,7 @@
     },
     "InvalidSchemeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified value for the schema is not valid. You can only specify a scheme for load balancers in a VPC.</p>",
       "error":{
         "code":"InvalidScheme",
@@ -1484,8 +1466,7 @@
     },
     "InvalidSecurityGroupException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more of the specified security groups do not exist.</p>",
       "error":{
         "code":"InvalidSecurityGroup",
@@ -1496,8 +1477,7 @@
     },
     "InvalidSubnetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified VPC has no associated Internet gateway.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -1593,8 +1573,7 @@
     },
     "ListenerNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The load balancer does not have a listener configured at the specified port.</p>",
       "error":{
         "code":"ListenerNotFound",
@@ -1609,8 +1588,7 @@
     },
     "LoadBalancerAttributeNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified load balancer attribute does not exist.</p>",
       "error":{
         "code":"LoadBalancerAttributeNotFound",
@@ -1767,8 +1745,7 @@
     "Name":{"type":"string"},
     "OperationNotPermittedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This operation is not allowed.</p>",
       "error":{
         "code":"OperationNotPermitted",
@@ -1895,8 +1872,7 @@
     },
     "PolicyNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more of the specified policies do not exist.</p>",
       "error":{
         "code":"PolicyNotFound",
@@ -1934,8 +1910,7 @@
     },
     "PolicyTypeNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more of the specified policy types do not exist.</p>",
       "error":{
         "code":"PolicyTypeNotFound",
@@ -2026,8 +2001,7 @@
     },
     "RemoveTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of RemoveTags.</p>"
     },
     "S3BucketName":{"type":"string"},
@@ -2064,8 +2038,7 @@
     },
     "SetLoadBalancerListenerSSLCertificateOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of SetLoadBalancerListenerSSLCertificate.</p>"
     },
     "SetLoadBalancerPoliciesForBackendServerInput":{
@@ -2093,8 +2066,7 @@
     },
     "SetLoadBalancerPoliciesForBackendServerOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of SetLoadBalancerPoliciesForBackendServer.</p>"
     },
     "SetLoadBalancerPoliciesOfListenerInput":{
@@ -2122,8 +2094,7 @@
     },
     "SetLoadBalancerPoliciesOfListenerOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the output of SetLoadBalancePoliciesOfListener.</p>"
     },
     "SourceSecurityGroup":{
@@ -2144,8 +2115,7 @@
     "SubnetId":{"type":"string"},
     "SubnetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more of the specified subnets do not exist.</p>",
       "error":{
         "code":"SubnetNotFound",
@@ -2225,8 +2195,7 @@
     },
     "TooManyAccessPointsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for the number of load balancers has been reached.</p>",
       "error":{
         "code":"TooManyLoadBalancers",
@@ -2237,8 +2206,7 @@
     },
     "TooManyPoliciesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for the number of policies for this load balancer has been reached.</p>",
       "error":{
         "code":"TooManyPolicies",
@@ -2249,8 +2217,7 @@
     },
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for the number of tags that can be assigned to a load balancer has been reached.</p>",
       "error":{
         "code":"TooManyTags",
@@ -2266,8 +2233,7 @@
     },
     "UnsupportedProtocolException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified protocol or signature version is not supported.</p>",
       "error":{
         "code":"UnsupportedProtocol",
diff -pruN 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/paginators-1.json 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -41,6 +41,24 @@
       "limit_key": "PageSize",
       "output_token": "NextMarker",
       "result_key": "SslPolicies"
+    },
+    "DescribeTrustStoreAssociations": {
+      "input_token": "Marker",
+      "limit_key": "PageSize",
+      "output_token": "NextMarker",
+      "result_key": "TrustStoreAssociations"
+    },
+    "DescribeTrustStoreRevocations": {
+      "input_token": "Marker",
+      "limit_key": "PageSize",
+      "output_token": "NextMarker",
+      "result_key": "TrustStoreRevocations"
+    },
+    "DescribeTrustStores": {
+      "input_token": "Marker",
+      "limit_key": "PageSize",
+      "output_token": "NextMarker",
+      "result_key": "TrustStores"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/service-2.json 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/elbv2/2015-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/elbv2/2015-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"TooManyCertificatesException"},
         {"shape":"CertificateNotFoundException"}
       ],
-      "documentation":"<p>Adds the specified SSL server certificate to the certificate list for the specified HTTPS or TLS listener.</p> <p>If the certificate in already in the certificate list, the call is successful but the certificate is not added again.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html\">HTTPS listeners</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html\">TLS listeners</a> in the <i>Network Load Balancers Guide</i>.</p>"
+      "documentation":"<p>Adds the specified SSL server certificate to the certificate list for the specified HTTPS or TLS listener.</p> <p>If the certificate in already in the certificate list, the call is successful but the certificate is not added again.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/https-listener-certificates.html\">SSL certificates</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/tls-listener-certificates.html\">Server certificates</a> in the <i>Network Load Balancers Guide</i>.</p>"
     },
     "AddTags":{
       "name":"AddTags",
@@ -164,7 +164,7 @@
         {"shape":"TooManyUniqueTargetGroupsPerLoadBalancerException"},
         {"shape":"TooManyTagsException"}
       ],
-      "documentation":"<p>Creates a rule for the specified listener. The listener must be associated with an Application Load Balancer.</p> <p>Each rule consists of a priority, one or more actions, and one or more conditions. Rules are evaluated in priority order, from the lowest value to the highest value. When the conditions for a rule are met, its actions are performed. If the conditions for no rules are met, the actions for the default rule are performed. For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules\">Listener rules</a> in the <i>Application Load Balancers Guide</i>.</p>"
+      "documentation":"<p>Creates a rule for the specified listener. The listener must be associated with an Application Load Balancer.</p> <p>Each rule consists of a priority, one or more actions, one or more conditions, and up to two optional transforms. Rules are evaluated in priority order, from the lowest value to the highest value. When the conditions for a rule are met, its actions are performed. If the conditions for no rules are met, the actions for the default rule are performed. For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules\">Listener rules</a> in the <i>Application Load Balancers Guide</i>.</p>"
     },
     "CreateTargetGroup":{
       "name":"CreateTargetGroup",
@@ -204,7 +204,7 @@
         {"shape":"TooManyTagsException"},
         {"shape":"DuplicateTagKeysException"}
       ],
-      "documentation":"<p>Creates a trust store.</p>"
+      "documentation":"<p>Creates a trust store.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html\">Mutual TLS for Application Load Balancers</a>.</p>"
     },
     "DeleteListener":{
       "name":"DeleteListener",
@@ -324,7 +324,7 @@
         {"shape":"TargetGroupNotFoundException"},
         {"shape":"InvalidTargetException"}
       ],
-      "documentation":"<p>Deregisters the specified targets from the specified target group. After the targets are deregistered, they no longer receive traffic from the load balancer.</p> <p>The load balancer stops sending requests to targets that are deregistering, but uses connection draining to ensure that in-flight traffic completes on the existing connections. This deregistration delay is configured by default but can be updated for each target group.</p> <p>For more information, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#deregistration-delay\"> Deregistration delay</a> in the <i>Application Load Balancers User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#deregistration-delay\"> Deregistration delay</a> in the <i>Network Load Balancers User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/target-groups.html#deregistration-delay\"> Deregistration delay</a> in the <i>Gateway Load Balancers User Guide</i> </p> </li> </ul> <p>Note: If the specified target does not exist, the action returns successfully.</p>"
+      "documentation":"<p>Deregisters the specified targets from the specified target group. After the targets are deregistered, they no longer receive traffic from the load balancer.</p> <p>The load balancer stops sending requests to targets that are deregistering, but uses connection draining to ensure that in-flight traffic completes on the existing connections. This deregistration delay is configured by default but can be updated for each target group.</p> <p>For more information, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/edit-target-group-attributes.html#deregistration-delay\"> Deregistration delay</a> in the <i>Application Load Balancers User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/edit-target-group-attributes.html#deregistration-delay\"> Deregistration delay</a> in the <i>Network Load Balancers User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/edit-target-group-attributes.html#deregistration-delay\"> Deregistration delay</a> in the <i>Gateway Load Balancers User Guide</i> </p> </li> </ul> <p>Note: If the specified target does not exist, the action returns successfully.</p>"
     },
     "DescribeAccountLimits":{
       "name":"DescribeAccountLimits",
@@ -385,7 +385,7 @@
       "errors":[
         {"shape":"ListenerNotFoundException"}
       ],
-      "documentation":"<p>Describes the default certificate and the certificate list for the specified HTTPS or TLS listener.</p> <p>If the default certificate is also in the certificate list, it appears twice in the results (once with <code>IsDefault</code> set to true and once with <code>IsDefault</code> set to false).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#https-listener-certificates\">SSL certificates</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#tls-listener-certificate\">Server certificates</a> in the <i>Network Load Balancers Guide</i>.</p>"
+      "documentation":"<p>Describes the default certificate and the certificate list for the specified HTTPS or TLS listener.</p> <p>If the default certificate is also in the certificate list, it appears twice in the results (once with <code>IsDefault</code> set to true and once with <code>IsDefault</code> set to false).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/https-listener-certificates.html\">SSL certificates</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/tls-listener-certificates.html\">Server certificates</a> in the <i>Network Load Balancers Guide</i>.</p>"
     },
     "DescribeListeners":{
       "name":"DescribeListeners",
@@ -453,7 +453,7 @@
         {"shape":"RuleNotFoundException"},
         {"shape":"UnsupportedProtocolException"}
       ],
-      "documentation":"<p>Describes the specified rules or the rules for the specified listener. You must specify either a listener or one or more rules.</p>"
+      "documentation":"<p>Describes the specified rules or the rules for the specified listener. You must specify either a listener or rules.</p>"
     },
     "DescribeSSLPolicies":{
       "name":"DescribeSSLPolicies",
@@ -469,7 +469,7 @@
       "errors":[
         {"shape":"SSLPolicyNotFoundException"}
       ],
-      "documentation":"<p>Describes the specified policies or all policies used for SSL negotiation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
+      "documentation":"<p>Describes the specified policies or all policies used for SSL negotiation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/describe-ssl-policies.html\">Security policies</a> in the <i>Application Load Balancers Guide</i> and <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/describe-ssl-policies.html\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
     },
     "DescribeTags":{
       "name":"DescribeTags",
@@ -663,6 +663,22 @@
       ],
       "documentation":"<p>Modifies the capacity reservation of the specified load balancer.</p> <p>When modifying capacity reservation, you must include at least one <code>MinimumLoadBalancerCapacity</code> or <code>ResetCapacityReservation</code>.</p>"
     },
+    "ModifyIpPools":{
+      "name":"ModifyIpPools",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyIpPoolsInput"},
+      "output":{
+        "shape":"ModifyIpPoolsOutput",
+        "resultWrapper":"ModifyIpPoolsResult"
+      },
+      "errors":[
+        {"shape":"LoadBalancerNotFoundException"}
+      ],
+      "documentation":"<p>[Application Load Balancers] Modify the IP pool associated to a load balancer.</p>"
+    },
     "ModifyListener":{
       "name":"ModifyListener",
       "http":{
@@ -826,7 +842,7 @@
         {"shape":"InvalidTargetException"},
         {"shape":"TooManyRegistrationsForTargetIdException"}
       ],
-      "documentation":"<p>Registers the specified targets with the specified target group.</p> <p>If the target is an EC2 instance, it must be in the <code>running</code> state when you register it.</p> <p>By default, the load balancer routes requests to registered targets using the protocol and port for the target group. Alternatively, you can override the port for a target when you register it. You can register each EC2 instance or IP address with the same target group multiple times using different ports.</p> <p>With a Network Load Balancer, you can't register instances by instance ID if they have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, HS1, M1, M2, M3, and T1. You can register instances of these types by IP address.</p>"
+      "documentation":"<p>Registers the specified targets with the specified target group.</p> <p>If the target is an EC2 instance, it must be in the <code>running</code> state when you register it.</p> <p>By default, the load balancer routes requests to registered targets using the protocol and port for the target group. Alternatively, you can override the port for a target when you register it. You can register each EC2 instance or IP address with the same target group multiple times using different ports.</p> <p>For more information, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-register-targets.html\">Register targets for your Application Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html\">Register targets for your Network Load Balancer</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/target-group-register-targets.html\">Register targets for your Gateway Load Balancer</a> </p> </li> </ul>"
     },
     "RemoveListenerCertificates":{
       "name":"RemoveListenerCertificates",
@@ -957,14 +973,13 @@
         {"shape":"AvailabilityZoneNotSupportedException"},
         {"shape":"CapacityReservationPendingException"}
       ],
-      "documentation":"<p>Enables the Availability Zones for the specified public subnets for the specified Application Load Balancer, Network Load Balancer or Gateway Load Balancer. The specified subnets replace the previously enabled subnets.</p> <p>When you specify subnets for a Network Load Balancer, or Gateway Load Balancer you must include all subnets that were enabled previously, with their existing configurations, plus any additional subnets.</p>"
+      "documentation":"<p>Enables the Availability Zones for the specified public subnets for the specified Application Load Balancer, Network Load Balancer or Gateway Load Balancer. The specified subnets replace the previously enabled subnets.</p>"
     }
   },
   "shapes":{
     "ALPNPolicyNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified ALPN policy is not supported.</p>",
       "error":{
         "code":"ALPNPolicyNotFound",
@@ -983,7 +998,7 @@
         },
         "TargetGroupArn":{
           "shape":"TargetGroupArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the target group. Specify only when <code>Type</code> is <code>forward</code> and you want to route to a single target group. To route to one or more target groups, use <code>ForwardConfig</code> instead.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target group. Specify only when <code>Type</code> is <code>forward</code> and you want to route to a single target group. To route to multiple target groups, you must use <code>ForwardConfig</code> instead.</p>"
         },
         "AuthenticateOidcConfig":{
           "shape":"AuthenticateOidcActionConfig",
@@ -1007,10 +1022,14 @@
         },
         "ForwardConfig":{
           "shape":"ForwardActionConfig",
-          "documentation":"<p>Information for creating an action that distributes requests among one or more target groups. For Network Load Balancers, you can specify a single target group. Specify only when <code>Type</code> is <code>forward</code>. If you specify both <code>ForwardConfig</code> and <code>TargetGroupArn</code>, you can specify only one target group using <code>ForwardConfig</code> and it must be the same target group specified in <code>TargetGroupArn</code>.</p>"
+          "documentation":"<p>Information for creating an action that distributes requests among multiple target groups. Specify only when <code>Type</code> is <code>forward</code>.</p> <p>If you specify both <code>ForwardConfig</code> and <code>TargetGroupArn</code>, you can specify only one target group using <code>ForwardConfig</code> and it must be the same target group specified in <code>TargetGroupArn</code>.</p>"
+        },
+        "JwtValidationConfig":{
+          "shape":"JwtValidationActionConfig",
+          "documentation":"<p>[HTTPS listeners] Information for validating JWT access tokens in client requests. Specify only when <code>Type</code> is <code>jwt-validation</code>.</p>"
         }
       },
-      "documentation":"<p>Information about an action.</p> <p>Each rule must include exactly one of the following types of actions: <code>forward</code>, <code>fixed-response</code>, or <code>redirect</code>, and it must be the last action to be performed.</p>"
+      "documentation":"<p>Information about an action.</p> <p>Each rule must include exactly one of the following routing actions: <code>forward</code>, <code>fixed-response</code>, or <code>redirect</code>, and it must be the last action to be performed.</p> <p>Optionally, a rule for an HTTPS listener can also include one of the following user authentication actions: <code>authenticate-oidc</code>, <code>authenticate-cognito</code>, or <code>jwt-validation</code>.</p>"
     },
     "ActionOrder":{
       "type":"integer",
@@ -1024,7 +1043,8 @@
         "authenticate-oidc",
         "authenticate-cognito",
         "redirect",
-        "fixed-response"
+        "fixed-response",
+        "jwt-validation"
       ]
     },
     "Actions":{
@@ -1076,8 +1096,7 @@
     },
     "AddTagsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddTrustStoreRevocationsInput":{
       "type":"structure",
@@ -1130,8 +1149,7 @@
     "AllocationId":{"type":"string"},
     "AllocationIdNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified allocation ID does not exist.</p>",
       "error":{
         "code":"AllocationIdNotFound",
@@ -1344,8 +1362,7 @@
     },
     "AvailabilityZoneNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Availability Zone is not supported.</p>",
       "error":{
         "code":"AvailabilityZoneNotSupported",
@@ -1360,8 +1377,7 @@
     },
     "CaCertificatesBundleNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified ca certificate bundle does not exist.</p>",
       "error":{
         "code":"CaCertificatesBundleNotFound",
@@ -1373,8 +1389,7 @@
     "CanonicalHostedZoneId":{"type":"string"},
     "CapacityDecreaseRequestsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've exceeded the daily capacity decrease limit for this reservation.</p>",
       "error":{
         "code":"CapacityDecreaseRequestLimitExceeded",
@@ -1385,8 +1400,7 @@
     },
     "CapacityReservationPendingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is a pending capacity reservation.</p>",
       "error":{
         "code":"CapacityReservationPending",
@@ -1422,8 +1436,7 @@
     "CapacityUnitsDouble":{"type":"double"},
     "CapacityUnitsLimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've exceeded the capacity units limit.</p>",
       "error":{
         "code":"CapacityUnitsLimitExceeded",
@@ -1453,8 +1466,7 @@
     },
     "CertificateNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified certificate does not exist.</p>",
       "error":{
         "code":"CertificateNotFound",
@@ -1508,7 +1520,7 @@
         },
         "SslPolicy":{
           "shape":"SslPolicyName",
-          "documentation":"<p>[HTTPS and TLS listeners] The security policy that defines which protocols and ciphers are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Application Load Balancers Guide</i> and <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
+          "documentation":"<p>[HTTPS and TLS listeners] The security policy that defines which protocols and ciphers are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/describe-ssl-policies.html\">Security policies</a> in the <i>Application Load Balancers Guide</i> and <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/describe-ssl-policies.html\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
         },
         "Certificates":{
           "shape":"CertificateList",
@@ -1520,7 +1532,7 @@
         },
         "AlpnPolicy":{
           "shape":"AlpnPolicyName",
-          "documentation":"<p>[TLS listeners] The name of the Application-Layer Protocol Negotiation (ALPN) policy. You can specify one policy name. The following are the possible values:</p> <ul> <li> <p> <code>HTTP1Only</code> </p> </li> <li> <p> <code>HTTP2Only</code> </p> </li> <li> <p> <code>HTTP2Optional</code> </p> </li> <li> <p> <code>HTTP2Preferred</code> </p> </li> <li> <p> <code>None</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#alpn-policies\">ALPN policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
+          "documentation":"<p>[TLS listeners] The name of the Application-Layer Protocol Negotiation (ALPN) policy. You can specify one policy name. The following are the possible values:</p> <ul> <li> <p> <code>HTTP1Only</code> </p> </li> <li> <p> <code>HTTP2Only</code> </p> </li> <li> <p> <code>HTTP2Optional</code> </p> </li> <li> <p> <code>HTTP2Preferred</code> </p> </li> <li> <p> <code>None</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html#alpn-policies\">ALPN policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -1528,7 +1540,7 @@
         },
         "MutualAuthentication":{
           "shape":"MutualAuthenticationAttributes",
-          "documentation":"<p>The mutual authentication configuration information.</p>"
+          "documentation":"<p>[HTTPS listeners] The mutual authentication configuration information.</p>"
         }
       }
     },
@@ -1584,6 +1596,10 @@
         "EnablePrefixForIpv6SourceNat":{
           "shape":"EnablePrefixForIpv6SourceNatEnum",
           "documentation":"<p>[Network Load Balancers with UDP listeners] Indicates whether to use an IPv6 prefix from each subnet for source NAT. The IP address type must be <code>dualstack</code>. The default value is <code>off</code>.</p>"
+        },
+        "IpamPools":{
+          "shape":"IpamPools",
+          "documentation":"<p>[Application Load Balancers] The IPAM pools to use with the load balancer.</p>"
         }
       }
     },
@@ -1624,6 +1640,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags to assign to the rule.</p>"
+        },
+        "Transforms":{
+          "shape":"RuleTransformList",
+          "documentation":"<p>The transforms to apply to requests that match this rule. You can add one host header rewrite transform and one URL rewrite transform.</p>"
         }
       }
     },
@@ -1769,8 +1789,7 @@
     "Default":{"type":"boolean"},
     "DeleteAssociationSameAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified association can't be within the same account.</p>",
       "error":{
         "code":"DeleteAssociationSameAccount",
@@ -1791,8 +1810,7 @@
     },
     "DeleteListenerOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLoadBalancerInput":{
       "type":"structure",
@@ -1806,8 +1824,7 @@
     },
     "DeleteLoadBalancerOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleInput":{
       "type":"structure",
@@ -1821,8 +1838,7 @@
     },
     "DeleteRuleOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSharedTrustStoreAssociationInput":{
       "type":"structure",
@@ -1843,8 +1859,7 @@
     },
     "DeleteSharedTrustStoreAssociationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTargetGroupInput":{
       "type":"structure",
@@ -1858,8 +1873,7 @@
     },
     "DeleteTargetGroupOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrustStoreInput":{
       "type":"structure",
@@ -1873,8 +1887,7 @@
     },
     "DeleteTrustStoreOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterTargetsInput":{
       "type":"structure",
@@ -1895,8 +1908,7 @@
     },
     "DeregisterTargetsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountLimitsInput":{
       "type":"structure",
@@ -2399,8 +2411,7 @@
     "Description":{"type":"string"},
     "DuplicateListenerException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A listener with the specified port already exists.</p>",
       "error":{
         "code":"DuplicateListener",
@@ -2411,8 +2422,7 @@
     },
     "DuplicateLoadBalancerNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A load balancer with the specified name already exists.</p>",
       "error":{
         "code":"DuplicateLoadBalancerName",
@@ -2423,8 +2433,7 @@
     },
     "DuplicateTagKeysException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A tag key was specified more than once.</p>",
       "error":{
         "code":"DuplicateTagKeys",
@@ -2435,8 +2444,7 @@
     },
     "DuplicateTargetGroupNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A target group with the specified name already exists.</p>",
       "error":{
         "code":"DuplicateTargetGroupName",
@@ -2447,8 +2455,7 @@
     },
     "DuplicateTrustStoreNameException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A trust store with the specified name already exists.</p>",
       "error":{
         "code":"DuplicateTrustStoreName",
@@ -2510,7 +2517,7 @@
       "members":{
         "TargetGroups":{
           "shape":"TargetGroupList",
-          "documentation":"<p>The target groups. For Network Load Balancers, you can specify a single target group.</p>"
+          "documentation":"<p>The target groups.</p>"
         },
         "TargetGroupStickinessConfig":{
           "shape":"TargetGroupStickinessConfig",
@@ -2603,8 +2610,7 @@
     },
     "HealthUnavailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The health of the specified targets could not be retrieved due to an internal error.</p>",
       "error":{
         "code":"HealthUnavailable",
@@ -2617,22 +2623,40 @@
       "members":{
         "Values":{
           "shape":"ListOfString",
-          "documentation":"<p>The host names. The maximum size of each name is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the host name.</p>"
+          "documentation":"<p>The host names. The maximum length of each string is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character). You must include at least one \".\" character. You can include only alphabetical characters after the final \".\" character.</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the host name.</p>"
+        },
+        "RegexValues":{
+          "shape":"ListOfString",
+          "documentation":"<p>The regular expressions to compare against the host header. The maximum length of each string is 128 characters.</p>"
         }
       },
       "documentation":"<p>Information about a host header condition.</p>"
     },
+    "HostHeaderRewriteConfig":{
+      "type":"structure",
+      "members":{
+        "Rewrites":{
+          "shape":"RewriteConfigList",
+          "documentation":"<p>The host header rewrite transform. Each transform consists of a regular expression to match and a replacement string.</p>"
+        }
+      },
+      "documentation":"<p>Information about a host header rewrite transform. This transform matches a pattern in the host header in an HTTP request and replaces it with the specified string.</p>"
+    },
     "HttpCode":{"type":"string"},
     "HttpHeaderConditionConfig":{
       "type":"structure",
       "members":{
         "HttpHeaderName":{
           "shape":"HttpHeaderConditionName",
-          "documentation":"<p>The name of the HTTP header field. The maximum size is 40 characters. The header name is case insensitive. The allowed characters are specified by RFC 7230. Wildcards are not supported.</p> <p>You can't use an HTTP header condition to specify the host header. Use <a>HostHeaderConditionConfig</a> to specify a host header condition.</p>"
+          "documentation":"<p>The name of the HTTP header field. The maximum length is 40 characters. The header name is case insensitive. The allowed characters are specified by RFC 7230. Wildcards are not supported.</p> <p>You can't use an HTTP header condition to specify the host header. Instead, use a <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions\">host condition</a>.</p>"
         },
         "Values":{
           "shape":"ListOfString",
-          "documentation":"<p>The strings to compare against the value of the HTTP header. The maximum size of each string is 128 characters. The comparison strings are case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).</p> <p>If the same header appears multiple times in the request, we search them in order until a match is found.</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the value of the HTTP header. To require that all of the strings are a match, create one condition per string.</p>"
+          "documentation":"<p>The strings to compare against the value of the HTTP header. The maximum length of each string is 128 characters. The comparison strings are case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).</p> <p>If the same header appears multiple times in the request, we search them in order until a match is found.</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the value of the HTTP header. To require that all of the strings are a match, create one condition per string.</p>"
+        },
+        "RegexValues":{
+          "shape":"ListOfString",
+          "documentation":"<p>The regular expression to compare against the HTTP header. The maximum length of each string is 128 characters.</p>"
         }
       },
       "documentation":"<p>Information about an HTTP header condition.</p> <p>There is a set of standard HTTP header fields. You can also define custom HTTP header fields.</p>"
@@ -2643,7 +2667,7 @@
       "members":{
         "Values":{
           "shape":"ListOfString",
-          "documentation":"<p>The name of the request method. The maximum size is 40 characters. The allowed characters are A-Z, hyphen (-), and underscore (_). The comparison is case sensitive. Wildcards are not supported; therefore, the method name must be an exact match.</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the HTTP request method. We recommend that you route GET and HEAD requests in the same way, because the response to a HEAD request may be cached.</p>"
+          "documentation":"<p>The name of the request method. The maximum length is 40 characters. The allowed characters are A-Z, hyphen (-), and underscore (_). The comparison is case sensitive. Wildcards are not supported; therefore, the method name must be an exact match.</p> <p>If you specify multiple strings, the condition is satisfied if one of the strings matches the HTTP request method. We recommend that you route GET and HEAD requests in the same way, because the response to a HEAD request may be cached.</p>"
         }
       },
       "documentation":"<p>Information about an HTTP method condition.</p> <p>HTTP defines a set of request methods, also referred to as HTTP verbs. For more information, see the <a href=\"https://www.iana.org/assignments/http-methods/http-methods.xhtml\">HTTP Method Registry</a>. You can also define custom HTTP methods.</p>"
@@ -2652,8 +2676,7 @@
     "IgnoreClientCertificateExpiry":{"type":"boolean"},
     "IncompatibleProtocolsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified configuration is not valid with this protocol.</p>",
       "error":{
         "code":"IncompatibleProtocols",
@@ -2664,8 +2687,7 @@
     },
     "InsufficientCapacityException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is insufficient capacity to reserve.</p>",
       "error":{
         "code":"InsufficientCapacity",
@@ -2675,8 +2697,7 @@
     },
     "InvalidCaCertificatesBundleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified ca certificate bundle is in an invalid format, or corrupt.</p>",
       "error":{
         "code":"InvalidCaCertificatesBundle",
@@ -2687,8 +2708,7 @@
     },
     "InvalidConfigurationRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested configuration is not valid.</p>",
       "error":{
         "code":"InvalidConfigurationRequest",
@@ -2699,8 +2719,7 @@
     },
     "InvalidLoadBalancerActionException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested action is not valid.</p>",
       "error":{
         "code":"InvalidLoadBalancerAction",
@@ -2711,8 +2730,7 @@
     },
     "InvalidRevocationContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided revocation file is an invalid format, or uses an incorrect algorithm.</p>",
       "error":{
         "code":"InvalidRevocationContent",
@@ -2723,8 +2741,7 @@
     },
     "InvalidSchemeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested scheme is not valid.</p>",
       "error":{
         "code":"InvalidScheme",
@@ -2735,8 +2752,7 @@
     },
     "InvalidSecurityGroupException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified security group does not exist.</p>",
       "error":{
         "code":"InvalidSecurityGroup",
@@ -2747,8 +2763,7 @@
     },
     "InvalidSubnetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified subnet is out of available addresses.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -2759,8 +2774,7 @@
     },
     "InvalidTargetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target does not exist, is not in the same VPC as the target group, or has an unsupported instance type.</p>",
       "error":{
         "code":"InvalidTarget",
@@ -2778,14 +2792,94 @@
         "dualstack-without-public-ipv4"
       ]
     },
+    "IpamPoolId":{
+      "type":"string",
+      "max":1000,
+      "pattern":"^(ipam-pool-)[a-zA-Z0-9]+$"
+    },
+    "IpamPools":{
+      "type":"structure",
+      "members":{
+        "Ipv4IpamPoolId":{
+          "shape":"IpamPoolId",
+          "documentation":"<p>The ID of the IPv4 IPAM pool.</p>"
+        }
+      },
+      "documentation":"<p>An IPAM pool is a collection of IP address CIDRs. IPAM pools enable you to organize your IP addresses according to your routing and security needs.</p>"
+    },
     "IsDefault":{"type":"boolean"},
+    "JwtValidationActionAdditionalClaim":{
+      "type":"structure",
+      "required":[
+        "Format",
+        "Name",
+        "Values"
+      ],
+      "members":{
+        "Format":{
+          "shape":"JwtValidationActionAdditionalClaimFormatEnum",
+          "documentation":"<p>The format of the claim value.</p>"
+        },
+        "Name":{
+          "shape":"JwtValidationActionAdditionalClaimName",
+          "documentation":"<p>The name of the claim. You can't specify <code>exp</code>, <code>iss</code>, <code>nbf</code>, or <code>iat</code> because we validate them by default.</p>"
+        },
+        "Values":{
+          "shape":"JwtValidationActionAdditionalClaimValues",
+          "documentation":"<p>The claim value. The maximum size of the list is 10. Each value can be up to 256 characters in length. If the format is <code>space-separated-values</code>, the values can't include spaces.</p>"
+        }
+      },
+      "documentation":"<p>Information about an additional claim to validate.</p>"
+    },
+    "JwtValidationActionAdditionalClaimFormatEnum":{
+      "type":"string",
+      "enum":[
+        "single-string",
+        "string-array",
+        "space-separated-values"
+      ]
+    },
+    "JwtValidationActionAdditionalClaimName":{"type":"string"},
+    "JwtValidationActionAdditionalClaimValue":{"type":"string"},
+    "JwtValidationActionAdditionalClaimValues":{
+      "type":"list",
+      "member":{"shape":"JwtValidationActionAdditionalClaimValue"}
+    },
+    "JwtValidationActionAdditionalClaims":{
+      "type":"list",
+      "member":{"shape":"JwtValidationActionAdditionalClaim"}
+    },
+    "JwtValidationActionConfig":{
+      "type":"structure",
+      "required":[
+        "JwksEndpoint",
+        "Issuer"
+      ],
+      "members":{
+        "JwksEndpoint":{
+          "shape":"JwtValidationActionJwksEndpoint",
+          "documentation":"<p>The JSON Web Key Set (JWKS) endpoint. This endpoint contains JSON Web Keys (JWK) that are used to validate signatures from the provider.</p> <p>This must be a full URL, including the HTTPS protocol, the domain, and the path. The maximum length is 256 characters.</p>"
+        },
+        "Issuer":{
+          "shape":"JwtValidationActionIssuer",
+          "documentation":"<p>The issuer of the JWT. The maximum length is 256 characters.</p>"
+        },
+        "AdditionalClaims":{
+          "shape":"JwtValidationActionAdditionalClaims",
+          "documentation":"<p>Additional claims to validate. The maximum size of the list is 10. We validate the <code>exp</code>, <code>iss</code>, <code>nbf</code>, and <code>iat</code> claims by default.</p>"
+        }
+      },
+      "documentation":"<p>Information about a JSON Web Token (JWT) validation action.</p>"
+    },
+    "JwtValidationActionIssuer":{"type":"string"},
+    "JwtValidationActionJwksEndpoint":{"type":"string"},
     "LastModifiedTime":{"type":"timestamp"},
     "Limit":{
       "type":"structure",
       "members":{
         "Name":{
           "shape":"Name",
-          "documentation":"<p>The name of the limit. The possible values are:</p> <ul> <li> <p>application-load-balancers</p> </li> <li> <p>condition-values-per-alb-rule</p> </li> <li> <p>condition-wildcards-per-alb-rule</p> </li> <li> <p>gateway-load-balancers</p> </li> <li> <p>gateway-load-balancers-per-vpc</p> </li> <li> <p>geneve-target-groups</p> </li> <li> <p>listeners-per-application-load-balancer</p> </li> <li> <p>listeners-per-network-load-balancer</p> </li> <li> <p>network-load-balancers</p> </li> <li> <p>rules-per-application-load-balancer</p> </li> <li> <p>target-groups</p> </li> <li> <p>target-groups-per-action-on-application-load-balancer</p> </li> <li> <p>target-groups-per-action-on-network-load-balancer</p> </li> <li> <p>target-groups-per-application-load-balancer</p> </li> <li> <p>targets-per-application-load-balancer</p> </li> <li> <p>targets-per-availability-zone-per-gateway-load-balancer</p> </li> <li> <p>targets-per-availability-zone-per-network-load-balancer</p> </li> <li> <p>targets-per-network-load-balancer</p> </li> </ul>"
+          "documentation":"<p>The name of the limit.</p>"
         },
         "Max":{
           "shape":"Max",
@@ -2879,8 +2973,7 @@
     },
     "ListenerNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified listener does not exist.</p>",
       "error":{
         "code":"ListenerNotFound",
@@ -2955,6 +3048,10 @@
         "EnablePrefixForIpv6SourceNat":{
           "shape":"EnablePrefixForIpv6SourceNatEnum",
           "documentation":"<p>[Network Load Balancers with UDP listeners] Indicates whether to use an IPv6 prefix from each subnet for source NAT. The IP address type must be <code>dualstack</code>. The default value is <code>off</code>.</p>"
+        },
+        "IpamPools":{
+          "shape":"IpamPools",
+          "documentation":"<p>[Application Load Balancers] The IPAM pool in use by the load balancer, if configured.</p>"
         }
       },
       "documentation":"<p>Information about a load balancer.</p>"
@@ -2995,7 +3092,7 @@
       "members":{
         "Key":{
           "shape":"LoadBalancerAttributeKey",
-          "documentation":"<p>The name of the attribute.</p> <p>The following attributes are supported by all load balancers:</p> <ul> <li> <p> <code>deletion_protection.enabled</code> - Indicates whether deletion protection is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>load_balancing.cross_zone.enabled</code> - Indicates whether cross-zone load balancing is enabled. The possible values are <code>true</code> and <code>false</code>. The default for Network Load Balancers and Gateway Load Balancers is <code>false</code>. The default for Application Load Balancers is <code>true</code>, and can't be changed.</p> </li> </ul> <p>The following attributes are supported by both Application Load Balancers and Network Load Balancers:</p> <ul> <li> <p> <code>access_logs.s3.enabled</code> - Indicates whether access logs are enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>access_logs.s3.bucket</code> - The name of the S3 bucket for the access logs. This attribute is required if access logs are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permissions to write to the bucket.</p> </li> <li> <p> <code>access_logs.s3.prefix</code> - The prefix for the location in the S3 bucket for the access logs.</p> </li> <li> <p> <code>ipv6.deny_all_igw_traffic</code> - Blocks internet gateway (IGW) access to the load balancer. It is set to <code>false</code> for internet-facing load balancers and <code>true</code> for internal load balancers, preventing unintended access to your internal load balancer through an internet gateway.</p> </li> <li> <p> <code>zonal_shift.config.enabled</code> - Indicates whether zonal shift is enabled. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported by only Application Load Balancers:</p> <ul> <li> <p> <code>idle_timeout.timeout_seconds</code> - The idle timeout value, in seconds. The valid range is 1-4000 seconds. The default is 60 seconds.</p> </li> <li> <p> <code>client_keep_alive.seconds</code> - The client keep alive value, in seconds. The valid range is 60-604800 seconds. The default is 3600 seconds.</p> </li> <li> <p> <code>connection_logs.s3.enabled</code> - Indicates whether connection logs are enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>connection_logs.s3.bucket</code> - The name of the S3 bucket for the connection logs. This attribute is required if connection logs are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permissions to write to the bucket.</p> </li> <li> <p> <code>connection_logs.s3.prefix</code> - The prefix for the location in the S3 bucket for the connection logs.</p> </li> <li> <p> <code>routing.http.desync_mitigation_mode</code> - Determines how the load balancer handles requests that might pose a security risk to your application. The possible values are <code>monitor</code>, <code>defensive</code>, and <code>strictest</code>. The default is <code>defensive</code>.</p> </li> <li> <p> <code>routing.http.drop_invalid_header_fields.enabled</code> - Indicates whether HTTP headers with invalid header fields are removed by the load balancer (<code>true</code>) or routed to targets (<code>false</code>). The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.preserve_host_header.enabled</code> - Indicates whether the Application Load Balancer should preserve the <code>Host</code> header in the HTTP request and send it to the target without any change. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.x_amzn_tls_version_and_cipher_suite.enabled</code> - Indicates whether the two headers (<code>x-amzn-tls-version</code> and <code>x-amzn-tls-cipher-suite</code>), which contain information about the negotiated TLS version and cipher suite, are added to the client request before sending it to the target. The <code>x-amzn-tls-version</code> header has information about the TLS protocol version negotiated with the client, and the <code>x-amzn-tls-cipher-suite</code> header has information about the cipher suite negotiated with the client. Both headers are in OpenSSL format. The possible values for the attribute are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.xff_client_port.enabled</code> - Indicates whether the <code>X-Forwarded-For</code> header should preserve the source port that the client used to connect to the load balancer. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.xff_header_processing.mode</code> - Enables you to modify, preserve, or remove the <code>X-Forwarded-For</code> header in the HTTP request before the Application Load Balancer sends the request to the target. The possible values are <code>append</code>, <code>preserve</code>, and <code>remove</code>. The default is <code>append</code>.</p> <ul> <li> <p>If the value is <code>append</code>, the Application Load Balancer adds the client IP address (of the last hop) to the <code>X-Forwarded-For</code> header in the HTTP request before it sends it to targets.</p> </li> <li> <p>If the value is <code>preserve</code> the Application Load Balancer preserves the <code>X-Forwarded-For</code> header in the HTTP request, and sends it to targets without any change.</p> </li> <li> <p>If the value is <code>remove</code>, the Application Load Balancer removes the <code>X-Forwarded-For</code> header in the HTTP request before it sends it to targets.</p> </li> </ul> </li> <li> <p> <code>routing.http2.enabled</code> - Indicates whether HTTP/2 is enabled. The possible values are <code>true</code> and <code>false</code>. The default is <code>true</code>. Elastic Load Balancing requires that message header names contain only alphanumeric characters and hyphens.</p> </li> <li> <p> <code>waf.fail_open.enabled</code> - Indicates whether to allow a WAF-enabled load balancer to route requests to targets if it is unable to forward the request to Amazon Web Services WAF. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported by only Network Load Balancers:</p> <ul> <li> <p> <code>dns_record.client_routing_policy</code> - Indicates how traffic is distributed among the load balancer Availability Zones. The possible values are <code>availability_zone_affinity</code> with 100 percent zonal affinity, <code>partial_availability_zone_affinity</code> with 85 percent zonal affinity, and <code>any_availability_zone</code> with 0 percent zonal affinity.</p> </li> </ul>"
+          "documentation":"<p>The name of the attribute.</p> <p>The following attributes are supported by all load balancers:</p> <ul> <li> <p> <code>deletion_protection.enabled</code> - Indicates whether deletion protection is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>load_balancing.cross_zone.enabled</code> - Indicates whether cross-zone load balancing is enabled. The possible values are <code>true</code> and <code>false</code>. The default for Network Load Balancers and Gateway Load Balancers is <code>false</code>. The default for Application Load Balancers is <code>true</code>, and can't be changed.</p> </li> </ul> <p>The following attributes are supported by both Application Load Balancers and Network Load Balancers:</p> <ul> <li> <p> <code>access_logs.s3.enabled</code> - Indicates whether access logs are enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>access_logs.s3.bucket</code> - The name of the S3 bucket for the access logs. This attribute is required if access logs are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permissions to write to the bucket.</p> </li> <li> <p> <code>access_logs.s3.prefix</code> - The prefix for the location in the S3 bucket for the access logs.</p> </li> <li> <p> <code>ipv6.deny_all_igw_traffic</code> - Blocks internet gateway (IGW) access to the load balancer. It is set to <code>false</code> for internet-facing load balancers and <code>true</code> for internal load balancers, preventing unintended access to your internal load balancer through an internet gateway.</p> </li> <li> <p> <code>zonal_shift.config.enabled</code> - Indicates whether zonal shift is enabled. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported by only Application Load Balancers:</p> <ul> <li> <p> <code>idle_timeout.timeout_seconds</code> - The idle timeout value, in seconds. The valid range is 1-4000 seconds. The default is 60 seconds.</p> </li> <li> <p> <code>client_keep_alive.seconds</code> - The client keep alive value, in seconds. The valid range is 60-604800 seconds. The default is 3600 seconds.</p> </li> <li> <p> <code>connection_logs.s3.enabled</code> - Indicates whether connection logs are enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>connection_logs.s3.bucket</code> - The name of the S3 bucket for the connection logs. This attribute is required if connection logs are enabled. The bucket must exist in the same region as the load balancer and have a bucket policy that grants Elastic Load Balancing permissions to write to the bucket.</p> </li> <li> <p> <code>connection_logs.s3.prefix</code> - The prefix for the location in the S3 bucket for the connection logs.</p> </li> <li> <p> <code>routing.http.desync_mitigation_mode</code> - Determines how the load balancer handles requests that might pose a security risk to your application. The possible values are <code>monitor</code>, <code>defensive</code>, and <code>strictest</code>. The default is <code>defensive</code>.</p> </li> <li> <p> <code>routing.http.drop_invalid_header_fields.enabled</code> - Indicates whether HTTP headers with invalid header fields are removed by the load balancer (<code>true</code>) or routed to targets (<code>false</code>). The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.preserve_host_header.enabled</code> - Indicates whether the Application Load Balancer should preserve the <code>Host</code> header in the HTTP request and send it to the target without any change. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.x_amzn_tls_version_and_cipher_suite.enabled</code> - Indicates whether the two headers (<code>x-amzn-tls-version</code> and <code>x-amzn-tls-cipher-suite</code>), which contain information about the negotiated TLS version and cipher suite, are added to the client request before sending it to the target. The <code>x-amzn-tls-version</code> header has information about the TLS protocol version negotiated with the client, and the <code>x-amzn-tls-cipher-suite</code> header has information about the cipher suite negotiated with the client. Both headers are in OpenSSL format. The possible values for the attribute are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.xff_client_port.enabled</code> - Indicates whether the <code>X-Forwarded-For</code> header should preserve the source port that the client used to connect to the load balancer. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>routing.http.xff_header_processing.mode</code> - Enables you to modify, preserve, or remove the <code>X-Forwarded-For</code> header in the HTTP request before the Application Load Balancer sends the request to the target. The possible values are <code>append</code>, <code>preserve</code>, and <code>remove</code>. The default is <code>append</code>.</p> <ul> <li> <p>If the value is <code>append</code>, the Application Load Balancer adds the client IP address (of the last hop) to the <code>X-Forwarded-For</code> header in the HTTP request before it sends it to targets.</p> </li> <li> <p>If the value is <code>preserve</code> the Application Load Balancer preserves the <code>X-Forwarded-For</code> header in the HTTP request, and sends it to targets without any change.</p> </li> <li> <p>If the value is <code>remove</code>, the Application Load Balancer removes the <code>X-Forwarded-For</code> header in the HTTP request before it sends it to targets.</p> </li> </ul> </li> <li> <p> <code>routing.http2.enabled</code> - Indicates whether clients can connect to the load balancer using HTTP/2. If <code>true</code>, clients can connect using HTTP/2 or HTTP/1.1. However, all client requests are subject to the stricter HTTP/2 header validation rules. For example, message header names must contain only alphanumeric characters and hyphens. If <code>false</code>, clients must connect using HTTP/1.1. The default is <code>true</code>.</p> </li> <li> <p> <code>waf.fail_open.enabled</code> - Indicates whether to allow a WAF-enabled load balancer to route requests to targets if it is unable to forward the request to Amazon Web Services WAF. The possible values are <code>true</code> and <code>false</code>. The default is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported by only Network Load Balancers:</p> <ul> <li> <p> <code>dns_record.client_routing_policy</code> - Indicates how traffic is distributed among the load balancer Availability Zones. The possible values are <code>availability_zone_affinity</code> with 100 percent zonal affinity, <code>partial_availability_zone_affinity</code> with 85 percent zonal affinity, and <code>any_availability_zone</code> with 0 percent zonal affinity.</p> </li> <li> <p> <code>secondary_ips.auto_assigned.per_subnet</code> - The number of secondary IP addresses to configure for your load balancer nodes. Use to address port allocation errors if you can't add targets. The valid range is 0 to 7. The default is 0. After you set this value, you can't decrease it.</p> </li> </ul>"
         },
         "Value":{
           "shape":"LoadBalancerAttributeValue",
@@ -3025,8 +3122,7 @@
     },
     "LoadBalancerNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified load balancer does not exist.</p>",
       "error":{
         "code":"LoadBalancerNotFound",
@@ -3151,6 +3247,33 @@
         }
       }
     },
+    "ModifyIpPoolsInput":{
+      "type":"structure",
+      "required":["LoadBalancerArn"],
+      "members":{
+        "LoadBalancerArn":{
+          "shape":"LoadBalancerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the load balancer.</p>"
+        },
+        "IpamPools":{
+          "shape":"IpamPools",
+          "documentation":"<p>The IPAM pools to be modified.</p>"
+        },
+        "RemoveIpamPools":{
+          "shape":"RemoveIpamPools",
+          "documentation":"<p>Remove the IP pools in use by the load balancer.</p>"
+        }
+      }
+    },
+    "ModifyIpPoolsOutput":{
+      "type":"structure",
+      "members":{
+        "IpamPools":{
+          "shape":"IpamPools",
+          "documentation":"<p>The IPAM pool ID.</p>"
+        }
+      }
+    },
     "ModifyListenerAttributesInput":{
       "type":"structure",
       "required":[
@@ -3195,7 +3318,7 @@
         },
         "SslPolicy":{
           "shape":"SslPolicyName",
-          "documentation":"<p>[HTTPS and TLS listeners] The security policy that defines which protocols and ciphers are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#describe-ssl-policies\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
+          "documentation":"<p>[HTTPS and TLS listeners] The security policy that defines which protocols and ciphers are supported.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/describe-ssl-policies.html\">Security policies</a> in the <i>Application Load Balancers Guide</i> or <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/describe-ssl-policies.html\">Security policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
         },
         "Certificates":{
           "shape":"CertificateList",
@@ -3207,11 +3330,11 @@
         },
         "AlpnPolicy":{
           "shape":"AlpnPolicyName",
-          "documentation":"<p>[TLS listeners] The name of the Application-Layer Protocol Negotiation (ALPN) policy. You can specify one policy name. The following are the possible values:</p> <ul> <li> <p> <code>HTTP1Only</code> </p> </li> <li> <p> <code>HTTP2Only</code> </p> </li> <li> <p> <code>HTTP2Optional</code> </p> </li> <li> <p> <code>HTTP2Preferred</code> </p> </li> <li> <p> <code>None</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html#alpn-policies\">ALPN policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
+          "documentation":"<p>[TLS listeners] The name of the Application-Layer Protocol Negotiation (ALPN) policy. You can specify one policy name. The following are the possible values:</p> <ul> <li> <p> <code>HTTP1Only</code> </p> </li> <li> <p> <code>HTTP2Only</code> </p> </li> <li> <p> <code>HTTP2Optional</code> </p> </li> <li> <p> <code>HTTP2Preferred</code> </p> </li> <li> <p> <code>None</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html#alpn-policies\">ALPN policies</a> in the <i>Network Load Balancers Guide</i>.</p>"
         },
         "MutualAuthentication":{
           "shape":"MutualAuthenticationAttributes",
-          "documentation":"<p>The mutual authentication configuration information.</p>"
+          "documentation":"<p>[HTTPS listeners] The mutual authentication configuration information.</p>"
         }
       }
     },
@@ -3265,6 +3388,14 @@
         "Actions":{
           "shape":"Actions",
           "documentation":"<p>The actions.</p>"
+        },
+        "Transforms":{
+          "shape":"RuleTransformList",
+          "documentation":"<p>The transforms to apply to requests that match this rule. You can add one host header rewrite transform and one URL rewrite transform. If you specify <code>Transforms</code>, you can't specify <code>ResetTransforms</code>.</p>"
+        },
+        "ResetTransforms":{
+          "shape":"ResetTransforms",
+          "documentation":"<p>Indicates whether to remove all transforms from the rule. If you specify <code>ResetTransforms</code>, you can't specify <code>Transforms</code>.</p>"
         }
       }
     },
@@ -3325,7 +3456,7 @@
         },
         "HealthCheckEnabled":{
           "shape":"HealthCheckEnabled",
-          "documentation":"<p>Indicates whether health checks are enabled.</p>"
+          "documentation":"<p>Indicates whether health checks are enabled. If the target type is <code>lambda</code>, health checks are disabled by default but can be enabled. If the target type is <code>instance</code>, <code>ip</code>, or <code>alb</code>, health checks are always enabled and can't be disabled.</p>"
         },
         "HealthCheckIntervalSeconds":{
           "shape":"HealthCheckIntervalSeconds",
@@ -3424,8 +3555,7 @@
     "NumberOfRevokedEntries":{"type":"long"},
     "OperationNotPermittedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This operation is not allowed.</p>",
       "error":{
         "code":"OperationNotPermitted",
@@ -3450,7 +3580,11 @@
       "members":{
         "Values":{
           "shape":"ListOfString",
-          "documentation":"<p>The path patterns to compare against the request URL. The maximum size of each string is 128 characters. The comparison is case sensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).</p> <p>If you specify multiple strings, the condition is satisfied if one of them matches the request URL. The path pattern is compared only to the path of the URL, not to its query string. To compare against the query string, use <a>QueryStringConditionConfig</a>.</p>"
+          "documentation":"<p>The path patterns to compare against the request URL. The maximum length of each string is 128 characters. The comparison is case sensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character).</p> <p>If you specify multiple strings, the condition is satisfied if one of them matches the request URL. The path pattern is compared only to the path of the URL, not to its query string. To compare against the query string, use a <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#query-string-conditions\">query string condition</a>.</p>"
+        },
+        "RegexValues":{
+          "shape":"ListOfString",
+          "documentation":"<p>The regular expressions to compare against the request URL. The maximum length of each string is 128 characters.</p>"
         }
       },
       "documentation":"<p>Information about a path pattern condition.</p>"
@@ -3466,8 +3600,7 @@
     },
     "PriorRequestNotCompleteException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This operation is not allowed while a prior request has not been completed.</p>",
       "error":{
         "code":"PriorRequestNotComplete",
@@ -3478,8 +3611,7 @@
     },
     "PriorityInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified priority is in use.</p>",
       "error":{
         "code":"PriorityInUse",
@@ -3507,7 +3639,7 @@
       "members":{
         "Values":{
           "shape":"QueryStringKeyValuePairList",
-          "documentation":"<p>The key/value pairs or values to find in the query string. The maximum size of each string is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character). To search for a literal '*' or '?' character in a query string, you must escape these characters in <code>Values</code> using a '\\' character.</p> <p>If you specify multiple key/value pairs or values, the condition is satisfied if one of them is found in the query string.</p>"
+          "documentation":"<p>The key/value pairs or values to find in the query string. The maximum length of each string is 128 characters. The comparison is case insensitive. The following wildcard characters are supported: * (matches 0 or more characters) and ? (matches exactly 1 character). To search for a literal '*' or '?' character in a query string, you must escape these characters in <code>Values</code> using a '\\' character.</p> <p>If you specify multiple key/value pairs or values, the condition is satisfied if one of them is found in the query string.</p>"
         }
       },
       "documentation":"<p>Information about a query string condition.</p> <p>The query string component of a URI starts after the first '?' character and is terminated by either a '#' character or the end of the URI. A typical query string contains key/value pairs separated by '&amp;' characters. The allowed characters are specified by RFC 3986. Any character can be percentage encoded.</p>"
@@ -3607,8 +3739,15 @@
     },
     "RegisterTargetsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "RemoveIpamPoolEnum":{
+      "type":"string",
+      "enum":["ipv4"]
+    },
+    "RemoveIpamPools":{
+      "type":"list",
+      "member":{"shape":"RemoveIpamPoolEnum"}
     },
     "RemoveListenerCertificatesInput":{
       "type":"structure",
@@ -3629,8 +3768,7 @@
     },
     "RemoveListenerCertificatesOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveTagsInput":{
       "type":"structure",
@@ -3651,8 +3789,7 @@
     },
     "RemoveTagsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveTrustStoreRevocationsInput":{
       "type":"structure",
@@ -3673,10 +3810,10 @@
     },
     "RemoveTrustStoreRevocationsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResetCapacityReservation":{"type":"boolean"},
+    "ResetTransforms":{"type":"boolean"},
     "ResourceArn":{"type":"string"},
     "ResourceArns":{
       "type":"list",
@@ -3684,8 +3821,7 @@
     },
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A specified resource is in use.</p>",
       "error":{
         "code":"ResourceInUse",
@@ -3696,8 +3832,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource does not exist.</p>",
       "error":{
         "code":"ResourceNotFound",
@@ -3730,8 +3865,7 @@
     },
     "RevocationContentNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified revocation file does not exist.</p>",
       "error":{
         "code":"RevocationContentNotFound",
@@ -3747,8 +3881,7 @@
     "RevocationId":{"type":"long"},
     "RevocationIdNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified revocation ID does not exist.</p>",
       "error":{
         "code":"RevocationIdNotFound",
@@ -3765,6 +3898,28 @@
       "type":"string",
       "enum":["CRL"]
     },
+    "RewriteConfig":{
+      "type":"structure",
+      "required":[
+        "Regex",
+        "Replace"
+      ],
+      "members":{
+        "Regex":{
+          "shape":"StringValue",
+          "documentation":"<p>The regular expression to match in the input string. The maximum length of the string is 1,024 characters.</p>"
+        },
+        "Replace":{
+          "shape":"StringValue",
+          "documentation":"<p>The replacement string to use when rewriting the matched input. The maximum length of the string is 1,024 characters. You can specify capture groups in the regular expression (for example, $1 and $2).</p>"
+        }
+      },
+      "documentation":"<p>Information about a rewrite transform. This transform matches a pattern and replaces it with the specified string.</p>"
+    },
+    "RewriteConfigList":{
+      "type":"list",
+      "member":{"shape":"RewriteConfig"}
+    },
     "Rule":{
       "type":"structure",
       "members":{
@@ -3787,6 +3942,10 @@
         "IsDefault":{
           "shape":"IsDefault",
           "documentation":"<p>Indicates whether this is the default rule.</p>"
+        },
+        "Transforms":{
+          "shape":"RuleTransformList",
+          "documentation":"<p>The transforms for the rule.</p>"
         }
       },
       "documentation":"<p>Information about a rule.</p>"
@@ -3830,6 +3989,10 @@
         "SourceIpConfig":{
           "shape":"SourceIpConditionConfig",
           "documentation":"<p>Information for a source IP condition. Specify only when <code>Field</code> is <code>source-ip</code>.</p>"
+        },
+        "RegexValues":{
+          "shape":"ListOfString",
+          "documentation":"<p>The regular expressions to match against the condition field. The maximum length of each string is 128 characters. Specify only when <code>Field</code> is <code>http-header</code>, <code>host-header</code>, or <code>path-pattern</code>.</p>"
         }
       },
       "documentation":"<p>Information about a condition for a rule.</p> <p>Each rule can optionally include up to one of each of the following conditions: <code>http-request-method</code>, <code>host-header</code>, <code>path-pattern</code>, and <code>source-ip</code>. Each rule can also optionally include one or more of each of the following conditions: <code>http-header</code> and <code>query-string</code>. Note that the value for a condition can't be empty.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html\">Quotas for your Application Load Balancers</a>.</p>"
@@ -3840,8 +4003,7 @@
     },
     "RuleNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified rule does not exist.</p>",
       "error":{
         "code":"RuleNotFound",
@@ -3873,6 +4035,29 @@
       },
       "documentation":"<p>Information about the priorities for the rules for a listener.</p>"
     },
+    "RuleTransform":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"TransformTypeEnum",
+          "documentation":"<p>The type of transform. </p> <ul> <li> <p> <code>host-header-rewrite</code> - Rewrite the host header.</p> </li> <li> <p> <code>url-rewrite</code> - Rewrite the request URL.</p> </li> </ul>"
+        },
+        "HostHeaderRewriteConfig":{
+          "shape":"HostHeaderRewriteConfig",
+          "documentation":"<p>Information about a host header rewrite transform. This transform modifies the host header in an HTTP request. Specify only when <code>Type</code> is <code>host-header-rewrite</code>.</p>"
+        },
+        "UrlRewriteConfig":{
+          "shape":"UrlRewriteConfig",
+          "documentation":"<p>Information about a URL rewrite transform. This transform modifies the request URL. Specify only when <code>Type</code> is <code>url-rewrite</code>.</p>"
+        }
+      },
+      "documentation":"<p>Information about a transform to apply to requests that match a rule. Transforms are applied to requests before they are sent to targets.</p>"
+    },
+    "RuleTransformList":{
+      "type":"list",
+      "member":{"shape":"RuleTransform"}
+    },
     "Rules":{
       "type":"list",
       "member":{"shape":"Rule"}
@@ -3882,8 +4067,7 @@
     "S3ObjectVersion":{"type":"string"},
     "SSLPolicyNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified SSL policy does not exist.</p>",
       "error":{
         "code":"SSLPolicyNotFound",
@@ -3959,7 +4143,7 @@
         },
         "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic":{
           "shape":"EnforceSecurityGroupInboundRulesOnPrivateLinkTrafficEnum",
-          "documentation":"<p>Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through Amazon Web Services PrivateLink. The default is <code>on</code>.</p>"
+          "documentation":"<p>Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through Amazon Web Services PrivateLink. Applies only if the load balancer has an associated security group. The default is <code>on</code>.</p>"
         }
       }
     },
@@ -3986,7 +4170,7 @@
         },
         "Subnets":{
           "shape":"Subnets",
-          "documentation":"<p>The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.</p> <p>[Application Load Balancers] You must specify subnets from at least two Availability Zones.</p> <p>[Application Load Balancers on Outposts] You must specify one Outpost subnet.</p> <p>[Application Load Balancers on Local Zones] You can specify subnets from one or more Local Zones.</p> <p>[Network Load Balancers and Gateway Load Balancers] You can specify subnets from one or more Availability Zones.</p>"
+          "documentation":"<p>The IDs of the public subnets. You can specify only one subnet per Availability Zone. You must specify either subnets or subnet mappings.</p> <p>[Application Load Balancers] You must specify subnets from at least two Availability Zones.</p> <p>[Application Load Balancers on Outposts] You must specify one Outpost subnet.</p> <p>[Application Load Balancers on Local Zones] You can specify subnets from one or more Local Zones.</p> <p>[Network Load Balancers] You can specify subnets from one or more Availability Zones.</p> <p>[Gateway Load Balancers] You can specify subnets from one or more Availability Zones. You must include all subnets that were enabled previously, with their existing configurations, plus any additional subnets.</p>"
         },
         "SubnetMappings":{
           "shape":"SubnetMappings",
@@ -4024,7 +4208,7 @@
       "members":{
         "Values":{
           "shape":"ListOfString",
-          "documentation":"<p>The source IP addresses, in CIDR format. You can use both IPv4 and IPv6 addresses. Wildcards are not supported.</p> <p>If you specify multiple addresses, the condition is satisfied if the source IP address of the request matches one of the CIDR blocks. This condition is not satisfied by the addresses in the X-Forwarded-For header. To search for addresses in the X-Forwarded-For header, use <a>HttpHeaderConditionConfig</a>.</p> <p>The total number of values must be less than, or equal to five.</p>"
+          "documentation":"<p>The source IP addresses, in CIDR format. You can use both IPv4 and IPv6 addresses. Wildcards are not supported.</p> <p>If you specify multiple addresses, the condition is satisfied if the source IP address of the request matches one of the CIDR blocks. This condition is not satisfied by the addresses in the X-Forwarded-For header. To search for addresses in the X-Forwarded-For header, use an <a href=\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#http-header-conditions\">HTTP header condition</a>.</p> <p>The total number of values must be less than, or equal to five.</p>"
         }
       },
       "documentation":"<p>Information about a source IP condition.</p> <p>You can use this condition to route based on the IP address of the source that connects to the load balancer. If a client is behind a proxy, this is the IP address of the proxy not the IP address of the client.</p>"
@@ -4106,8 +4290,7 @@
     },
     "SubnetNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified subnet does not exist.</p>",
       "error":{
         "code":"SubnetNotFound",
@@ -4300,8 +4483,7 @@
     },
     "TargetGroupAssociationLimitException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of load balancers per target group.</p>",
       "error":{
         "code":"TargetGroupAssociationLimit",
@@ -4315,7 +4497,7 @@
       "members":{
         "Key":{
           "shape":"TargetGroupAttributeKey",
-          "documentation":"<p>The name of the attribute.</p> <p>The following attributes are supported by all load balancers:</p> <ul> <li> <p> <code>deregistration_delay.timeout_seconds</code> - The amount of time, in seconds, for Elastic Load Balancing to wait before changing the state of a deregistering target from <code>draining</code> to <code>unused</code>. The range is 0-3600 seconds. The default value is 300 seconds. If the target is a Lambda function, this attribute is not supported.</p> </li> <li> <p> <code>stickiness.enabled</code> - Indicates whether target stickiness is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>stickiness.type</code> - Indicates the type of stickiness. The possible values are:</p> <ul> <li> <p> <code>lb_cookie</code> and <code>app_cookie</code> for Application Load Balancers.</p> </li> <li> <p> <code>source_ip</code> for Network Load Balancers.</p> </li> <li> <p> <code>source_ip_dest_ip</code> and <code>source_ip_dest_ip_proto</code> for Gateway Load Balancers.</p> </li> </ul> </li> </ul> <p>The following attributes are supported by Application Load Balancers and Network Load Balancers:</p> <ul> <li> <p> <code>load_balancing.cross_zone.enabled</code> - Indicates whether cross zone load balancing is enabled. The value is <code>true</code>, <code>false</code> or <code>use_load_balancer_configuration</code>. The default is <code>use_load_balancer_configuration</code>.</p> </li> <li> <p> <code>target_group_health.dns_failover.minimum_healthy_targets.count</code> - The minimum number of targets that must be healthy. If the number of healthy targets is below this value, mark the zone as unhealthy in DNS, so that traffic is routed only to healthy zones. The possible values are <code>off</code> or an integer from 1 to the maximum number of targets. The default is <code>off</code>.</p> </li> <li> <p> <code>target_group_health.dns_failover.minimum_healthy_targets.percentage</code> - The minimum percentage of targets that must be healthy. If the percentage of healthy targets is below this value, mark the zone as unhealthy in DNS, so that traffic is routed only to healthy zones. The possible values are <code>off</code> or an integer from 1 to 100. The default is <code>off</code>.</p> </li> <li> <p> <code>target_group_health.unhealthy_state_routing.minimum_healthy_targets.count</code> - The minimum number of targets that must be healthy. If the number of healthy targets is below this value, send traffic to all targets, including unhealthy targets. The possible values are 1 to the maximum number of targets. The default is 1.</p> </li> <li> <p> <code>target_group_health.unhealthy_state_routing.minimum_healthy_targets.percentage</code> - The minimum percentage of targets that must be healthy. If the percentage of healthy targets is below this value, send traffic to all targets, including unhealthy targets. The possible values are <code>off</code> or an integer from 1 to 100. The default is <code>off</code>.</p> </li> </ul> <p>The following attributes are supported only if the load balancer is an Application Load Balancer and the target is an instance or an IP address:</p> <ul> <li> <p> <code>load_balancing.algorithm.type</code> - The load balancing algorithm determines how the load balancer selects targets when routing requests. The value is <code>round_robin</code>, <code>least_outstanding_requests</code>, or <code>weighted_random</code>. The default is <code>round_robin</code>.</p> </li> <li> <p> <code>load_balancing.algorithm.anomaly_mitigation</code> - Only available when <code>load_balancing.algorithm.type</code> is <code>weighted_random</code>. Indicates whether anomaly mitigation is enabled. The value is <code>on</code> or <code>off</code>. The default is <code>off</code>.</p> </li> <li> <p> <code>slow_start.duration_seconds</code> - The time period, in seconds, during which a newly registered target receives an increasing share of the traffic to the target group. After this time period ends, the target receives its full share of traffic. The range is 30-900 seconds (15 minutes). The default is 0 seconds (disabled).</p> </li> <li> <p> <code>stickiness.app_cookie.cookie_name</code> - Indicates the name of the application-based cookie. Names that start with the following prefixes are not allowed: <code>AWSALB</code>, <code>AWSALBAPP</code>, and <code>AWSALBTG</code>; they're reserved for use by the load balancer.</p> </li> <li> <p> <code>stickiness.app_cookie.duration_seconds</code> - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the application-based cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).</p> </li> <li> <p> <code>stickiness.lb_cookie.duration_seconds</code> - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds). </p> </li> </ul> <p>The following attribute is supported only if the load balancer is an Application Load Balancer and the target is a Lambda function:</p> <ul> <li> <p> <code>lambda.multi_value_headers.enabled</code> - Indicates whether the request and response headers that are exchanged between the load balancer and the Lambda function include arrays of values or strings. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>. If the value is <code>false</code> and the request contains a duplicate header field name or query parameter key, the load balancer uses the last value sent by the client.</p> </li> </ul> <p>The following attributes are supported only by Network Load Balancers:</p> <ul> <li> <p> <code>deregistration_delay.connection_termination.enabled</code> - Indicates whether the load balancer terminates connections at the end of the deregistration timeout. The value is <code>true</code> or <code>false</code>. For new UDP/TCP_UDP target groups the default is <code>true</code>. Otherwise, the default is <code>false</code>.</p> </li> <li> <p> <code>preserve_client_ip.enabled</code> - Indicates whether client IP preservation is enabled. The value is <code>true</code> or <code>false</code>. The default is disabled if the target group type is IP address and the target group protocol is TCP or TLS. Otherwise, the default is enabled. Client IP preservation can't be disabled for UDP and TCP_UDP target groups.</p> </li> <li> <p> <code>proxy_protocol_v2.enabled</code> - Indicates whether Proxy Protocol version 2 is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>. </p> </li> <li> <p> <code>target_health_state.unhealthy.connection_termination.enabled</code> - Indicates whether the load balancer terminates connections to unhealthy targets. The value is <code>true</code> or <code>false</code>. The default is <code>true</code>.</p> </li> <li> <p> <code>target_health_state.unhealthy.draining_interval_seconds</code> - The amount of time for Elastic Load Balancing to wait before changing the state of an unhealthy target from <code>unhealthy.draining</code> to <code>unhealthy</code>. The range is 0-360000 seconds. The default value is 0 seconds.</p> <p>Note: This attribute can only be configured when <code>target_health_state.unhealthy.connection_termination.enabled</code> is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported only by Gateway Load Balancers:</p> <ul> <li> <p> <code>target_failover.on_deregistration</code> - Indicates how the Gateway Load Balancer handles existing flows when a target is deregistered. The possible values are <code>rebalance</code> and <code>no_rebalance</code>. The default is <code>no_rebalance</code>. The two attributes (<code>target_failover.on_deregistration</code> and <code>target_failover.on_unhealthy</code>) can't be set independently. The value you set for both attributes must be the same. </p> </li> <li> <p> <code>target_failover.on_unhealthy</code> - Indicates how the Gateway Load Balancer handles existing flows when a target is unhealthy. The possible values are <code>rebalance</code> and <code>no_rebalance</code>. The default is <code>no_rebalance</code>. The two attributes (<code>target_failover.on_deregistration</code> and <code>target_failover.on_unhealthy</code>) can't be set independently. The value you set for both attributes must be the same. </p> </li> </ul>"
+          "documentation":"<p>The name of the attribute.</p> <p>The following attributes are supported by all load balancers:</p> <ul> <li> <p> <code>deregistration_delay.timeout_seconds</code> - The amount of time, in seconds, for Elastic Load Balancing to wait before changing the state of a deregistering target from <code>draining</code> to <code>unused</code>. The range is 0-3600 seconds. The default value is 300 seconds. If the target is a Lambda function, this attribute is not supported.</p> </li> <li> <p> <code>stickiness.enabled</code> - Indicates whether target stickiness is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>.</p> </li> <li> <p> <code>stickiness.type</code> - Indicates the type of stickiness. The possible values are:</p> <ul> <li> <p> <code>lb_cookie</code> and <code>app_cookie</code> for Application Load Balancers.</p> </li> <li> <p> <code>source_ip</code> for Network Load Balancers.</p> </li> <li> <p> <code>source_ip_dest_ip</code> and <code>source_ip_dest_ip_proto</code> for Gateway Load Balancers.</p> </li> </ul> </li> </ul> <p>The following attributes are supported by Application Load Balancers and Network Load Balancers:</p> <ul> <li> <p> <code>load_balancing.cross_zone.enabled</code> - Indicates whether cross zone load balancing is enabled. The value is <code>true</code>, <code>false</code> or <code>use_load_balancer_configuration</code>. The default is <code>use_load_balancer_configuration</code>.</p> </li> <li> <p> <code>target_group_health.dns_failover.minimum_healthy_targets.count</code> - The minimum number of targets that must be healthy. If the number of healthy targets is below this value, mark the zone as unhealthy in DNS, so that traffic is routed only to healthy zones. The possible values are <code>off</code> or an integer from 1 to the maximum number of targets. The default is 1.</p> </li> <li> <p> <code>target_group_health.dns_failover.minimum_healthy_targets.percentage</code> - The minimum percentage of targets that must be healthy. If the percentage of healthy targets is below this value, mark the zone as unhealthy in DNS, so that traffic is routed only to healthy zones. The possible values are <code>off</code> or an integer from 1 to 100. The default is <code>off</code>.</p> </li> <li> <p> <code>target_group_health.unhealthy_state_routing.minimum_healthy_targets.count</code> - The minimum number of targets that must be healthy. If the number of healthy targets is below this value, send traffic to all targets, including unhealthy targets. The possible values are 1 to the maximum number of targets. The default is 1.</p> </li> <li> <p> <code>target_group_health.unhealthy_state_routing.minimum_healthy_targets.percentage</code> - The minimum percentage of targets that must be healthy. If the percentage of healthy targets is below this value, send traffic to all targets, including unhealthy targets. The possible values are <code>off</code> or an integer from 1 to 100. The default is <code>off</code>.</p> </li> </ul> <p>The following attributes are supported only if the load balancer is an Application Load Balancer and the target is an instance or an IP address:</p> <ul> <li> <p> <code>load_balancing.algorithm.type</code> - The load balancing algorithm determines how the load balancer selects targets when routing requests. The value is <code>round_robin</code>, <code>least_outstanding_requests</code>, or <code>weighted_random</code>. The default is <code>round_robin</code>.</p> </li> <li> <p> <code>load_balancing.algorithm.anomaly_mitigation</code> - Only available when <code>load_balancing.algorithm.type</code> is <code>weighted_random</code>. Indicates whether anomaly mitigation is enabled. The value is <code>on</code> or <code>off</code>. The default is <code>off</code>.</p> </li> <li> <p> <code>slow_start.duration_seconds</code> - The time period, in seconds, during which a newly registered target receives an increasing share of the traffic to the target group. After this time period ends, the target receives its full share of traffic. The range is 30-900 seconds (15 minutes). The default is 0 seconds (disabled).</p> </li> <li> <p> <code>stickiness.app_cookie.cookie_name</code> - Indicates the name of the application-based cookie. Names that start with the following prefixes are not allowed: <code>AWSALB</code>, <code>AWSALBAPP</code>, and <code>AWSALBTG</code>; they're reserved for use by the load balancer.</p> </li> <li> <p> <code>stickiness.app_cookie.duration_seconds</code> - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the application-based cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds).</p> </li> <li> <p> <code>stickiness.lb_cookie.duration_seconds</code> - The time period, in seconds, during which requests from a client should be routed to the same target. After this time period expires, the load balancer-generated cookie is considered stale. The range is 1 second to 1 week (604800 seconds). The default value is 1 day (86400 seconds). </p> </li> </ul> <p>The following attribute is supported only if the load balancer is an Application Load Balancer and the target is a Lambda function:</p> <ul> <li> <p> <code>lambda.multi_value_headers.enabled</code> - Indicates whether the request and response headers that are exchanged between the load balancer and the Lambda function include arrays of values or strings. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>. If the value is <code>false</code> and the request contains a duplicate header field name or query parameter key, the load balancer uses the last value sent by the client.</p> </li> </ul> <p>The following attributes are supported only by Network Load Balancers:</p> <ul> <li> <p> <code>deregistration_delay.connection_termination.enabled</code> - Indicates whether the load balancer terminates connections at the end of the deregistration timeout. The value is <code>true</code> or <code>false</code>. For new UDP/TCP_UDP target groups the default is <code>true</code>. Otherwise, the default is <code>false</code>.</p> </li> <li> <p> <code>preserve_client_ip.enabled</code> - Indicates whether client IP preservation is enabled. The value is <code>true</code> or <code>false</code>. The default is disabled if the target group type is IP address and the target group protocol is TCP or TLS. Otherwise, the default is enabled. Client IP preservation can't be disabled for UDP and TCP_UDP target groups.</p> </li> <li> <p> <code>proxy_protocol_v2.enabled</code> - Indicates whether Proxy Protocol version 2 is enabled. The value is <code>true</code> or <code>false</code>. The default is <code>false</code>. </p> </li> <li> <p> <code>target_health_state.unhealthy.connection_termination.enabled</code> - Indicates whether the load balancer terminates connections to unhealthy targets. The value is <code>true</code> or <code>false</code>. The default is <code>true</code>. This attribute can't be enabled for UDP and TCP_UDP target groups.</p> </li> <li> <p> <code>target_health_state.unhealthy.draining_interval_seconds</code> - The amount of time for Elastic Load Balancing to wait before changing the state of an unhealthy target from <code>unhealthy.draining</code> to <code>unhealthy</code>. The range is 0-360000 seconds. The default value is 0 seconds.</p> <p>Note: This attribute can only be configured when <code>target_health_state.unhealthy.connection_termination.enabled</code> is <code>false</code>.</p> </li> </ul> <p>The following attributes are supported only by Gateway Load Balancers:</p> <ul> <li> <p> <code>target_failover.on_deregistration</code> - Indicates how the Gateway Load Balancer handles existing flows when a target is deregistered. The possible values are <code>rebalance</code> and <code>no_rebalance</code>. The default is <code>no_rebalance</code>. The two attributes (<code>target_failover.on_deregistration</code> and <code>target_failover.on_unhealthy</code>) can't be set independently. The value you set for both attributes must be the same. </p> </li> <li> <p> <code>target_failover.on_unhealthy</code> - Indicates how the Gateway Load Balancer handles existing flows when a target is unhealthy. The possible values are <code>rebalance</code> and <code>no_rebalance</code>. The default is <code>no_rebalance</code>. The two attributes (<code>target_failover.on_deregistration</code> and <code>target_failover.on_unhealthy</code>) can't be set independently. The value you set for both attributes must be the same. </p> </li> </ul>"
         },
         "Value":{
           "shape":"TargetGroupAttributeValue",
@@ -4352,8 +4534,7 @@
     },
     "TargetGroupNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target group does not exist.</p>",
       "error":{
         "code":"TargetGroupNotFound",
@@ -4371,7 +4552,7 @@
         },
         "DurationSeconds":{
           "shape":"TargetGroupStickinessDurationSeconds",
-          "documentation":"<p>The time period, in seconds, during which requests from a client should be routed to the same target group. The range is 1-604800 seconds (7 days).</p>"
+          "documentation":"<p>[Application Load Balancers] The time period, in seconds, during which requests from a client should be routed to the same target group. The range is 1-604800 seconds (7 days). You must specify this value when enabling target group stickiness.</p>"
         }
       },
       "documentation":"<p>Information about the target group stickiness for a rule.</p>"
@@ -4406,7 +4587,7 @@
         },
         "Reason":{
           "shape":"TargetHealthReasonEnum",
-          "documentation":"<p>The reason code.</p> <p>If the target state is <code>healthy</code>, a reason code is not provided.</p> <p>If the target state is <code>initial</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Elb.RegistrationInProgress</code> - The target is in the process of being registered with the load balancer.</p> </li> <li> <p> <code>Elb.InitialHealthChecking</code> - The load balancer is still sending the target the minimum number of health checks required to determine its health status.</p> </li> </ul> <p>If the target state is <code>unhealthy</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Target.ResponseCodeMismatch</code> - The health checks did not return an expected HTTP code. Applies only to Application Load Balancers and Gateway Load Balancers.</p> </li> <li> <p> <code>Target.Timeout</code> - The health check requests timed out. Applies only to Application Load Balancers and Gateway Load Balancers.</p> </li> <li> <p> <code>Target.FailedHealthChecks</code> - The load balancer received an error while establishing a connection to the target or the target response was malformed.</p> </li> <li> <p> <code>Elb.InternalError</code> - The health checks failed due to an internal error. Applies only to Application Load Balancers.</p> </li> </ul> <p>If the target state is <code>unused</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Target.NotRegistered</code> - The target is not registered with the target group.</p> </li> <li> <p> <code>Target.NotInUse</code> - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.</p> </li> <li> <p> <code>Target.InvalidState</code> - The target is in the stopped or terminated state.</p> </li> <li> <p> <code>Target.IpUnusable</code> - The target IP address is reserved for use by a load balancer.</p> </li> </ul> <p>If the target state is <code>draining</code>, the reason code can be the following value:</p> <ul> <li> <p> <code>Target.DeregistrationInProgress</code> - The target is in the process of being deregistered and the deregistration delay period has not expired.</p> </li> </ul> <p>If the target state is <code>unavailable</code>, the reason code can be the following value:</p> <ul> <li> <p> <code>Target.HealthCheckDisabled</code> - Health checks are disabled for the target group. Applies only to Application Load Balancers.</p> </li> <li> <p> <code>Elb.InternalError</code> - Target health is unavailable due to an internal error. Applies only to Network Load Balancers.</p> </li> </ul>"
+          "documentation":"<p>The reason code.</p> <p>If the target state is <code>healthy</code>, a reason code is not provided.</p> <p>If the target state is <code>initial</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Elb.RegistrationInProgress</code> - The target is in the process of being registered with the load balancer.</p> </li> <li> <p> <code>Elb.InitialHealthChecking</code> - The load balancer is still sending the target the minimum number of health checks required to determine its health status.</p> </li> </ul> <p>If the target state is <code>unhealthy</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Target.ResponseCodeMismatch</code> - The health checks did not return an expected HTTP code.</p> </li> <li> <p> <code>Target.Timeout</code> - The health check requests timed out.</p> </li> <li> <p> <code>Target.FailedHealthChecks</code> - The load balancer received an error while establishing a connection to the target or the target response was malformed.</p> </li> <li> <p> <code>Elb.InternalError</code> - The health checks failed due to an internal error.</p> </li> </ul> <p>If the target state is <code>unused</code>, the reason code can be one of the following values:</p> <ul> <li> <p> <code>Target.NotRegistered</code> - The target is not registered with the target group.</p> </li> <li> <p> <code>Target.NotInUse</code> - The target group is not used by any load balancer or the target is in an Availability Zone that is not enabled for its load balancer.</p> </li> <li> <p> <code>Target.InvalidState</code> - The target is in the stopped or terminated state.</p> </li> <li> <p> <code>Target.IpUnusable</code> - The target IP address is reserved for use by a load balancer.</p> </li> </ul> <p>If the target state is <code>draining</code>, the reason code can be the following value:</p> <ul> <li> <p> <code>Target.DeregistrationInProgress</code> - The target is in the process of being deregistered and the deregistration delay period has not expired.</p> </li> </ul> <p>If the target state is <code>unavailable</code>, the reason code can be the following value:</p> <ul> <li> <p> <code>Target.HealthCheckDisabled</code> - Health checks are disabled for the target group.</p> </li> <li> <p> <code>Elb.InternalError</code> - Target health is unavailable due to an internal error.</p> </li> </ul>"
         },
         "Description":{
           "shape":"Description",
@@ -4486,8 +4667,7 @@
     },
     "TooManyActionsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of actions per rule.</p>",
       "error":{
         "code":"TooManyActions",
@@ -4498,8 +4678,7 @@
     },
     "TooManyCertificatesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of certificates per load balancer.</p>",
       "error":{
         "code":"TooManyCertificates",
@@ -4510,8 +4689,7 @@
     },
     "TooManyListenersException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of listeners per load balancer.</p>",
       "error":{
         "code":"TooManyListeners",
@@ -4522,8 +4700,7 @@
     },
     "TooManyLoadBalancersException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of load balancers for your Amazon Web Services account.</p>",
       "error":{
         "code":"TooManyLoadBalancers",
@@ -4534,8 +4711,7 @@
     },
     "TooManyRegistrationsForTargetIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of times a target can be registered with a load balancer.</p>",
       "error":{
         "code":"TooManyRegistrationsForTargetId",
@@ -4546,8 +4722,7 @@
     },
     "TooManyRulesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of rules per load balancer.</p>",
       "error":{
         "code":"TooManyRules",
@@ -4558,8 +4733,7 @@
     },
     "TooManyTagsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of tags for this resource.</p>",
       "error":{
         "code":"TooManyTags",
@@ -4570,8 +4744,7 @@
     },
     "TooManyTargetGroupsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of target groups for your Amazon Web Services account.</p>",
       "error":{
         "code":"TooManyTargetGroups",
@@ -4582,8 +4755,7 @@
     },
     "TooManyTargetsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of targets.</p>",
       "error":{
         "code":"TooManyTargets",
@@ -4594,8 +4766,7 @@
     },
     "TooManyTrustStoreRevocationEntriesException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified trust store has too many revocation entries.</p>",
       "error":{
         "code":"TooManyTrustStoreRevocationEntries",
@@ -4606,8 +4777,7 @@
     },
     "TooManyTrustStoresException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of trust stores for your Amazon Web Services account.</p>",
       "error":{
         "code":"TooManyTrustStores",
@@ -4618,8 +4788,7 @@
     },
     "TooManyUniqueTargetGroupsPerLoadBalancerException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You've reached the limit on the number of unique target groups per load balancer across all listeners. If a target group is used by multiple actions for a load balancer, it is counted as only one use.</p>",
       "error":{
         "code":"TooManyUniqueTargetGroupsPerLoadBalancer",
@@ -4629,6 +4798,13 @@
       "exception":true
     },
     "TotalRevokedEntries":{"type":"long"},
+    "TransformTypeEnum":{
+      "type":"string",
+      "enum":[
+        "host-header-rewrite",
+        "url-rewrite"
+      ]
+    },
     "TrustStore":{
       "type":"structure",
       "members":{
@@ -4672,8 +4848,7 @@
     },
     "TrustStoreAssociationNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified association does not exist.</p>",
       "error":{
         "code":"AssociationNotFound",
@@ -4696,8 +4871,7 @@
     },
     "TrustStoreInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified trust store is currently in use.</p>",
       "error":{
         "code":"TrustStoreInUse",
@@ -4718,8 +4892,7 @@
     },
     "TrustStoreNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified trust store does not exist.</p>",
       "error":{
         "code":"TrustStoreNotFound",
@@ -4730,8 +4903,7 @@
     },
     "TrustStoreNotReadyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified trust store is not active.</p>",
       "error":{
         "code":"TrustStoreNotReady",
@@ -4779,8 +4951,7 @@
     },
     "UnsupportedProtocolException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified protocol is not supported.</p>",
       "error":{
         "code":"UnsupportedProtocol",
@@ -4789,6 +4960,16 @@
       },
       "exception":true
     },
+    "UrlRewriteConfig":{
+      "type":"structure",
+      "members":{
+        "Rewrites":{
+          "shape":"RewriteConfigList",
+          "documentation":"<p>The URL rewrite transform to apply to the request. The transform consists of a regular expression to match and a replacement string.</p>"
+        }
+      },
+      "documentation":"<p>Information about a URL rewrite transform. This transform matches a pattern in the request URL and replaces it with the specified string.</p>"
+    },
     "VpcId":{"type":"string"},
     "ZonalCapacityReservationState":{
       "type":"structure",
@@ -4799,14 +4980,14 @@
         },
         "AvailabilityZone":{
           "shape":"ZoneName",
-          "documentation":"<p>Information about the availability zone.</p>"
+          "documentation":"<p>Information about the Availability Zone.</p>"
         },
         "EffectiveCapacityUnits":{
           "shape":"CapacityUnitsDouble",
           "documentation":"<p>The number of effective capacity units.</p>"
         }
       },
-      "documentation":"<p>The capacity reservation status for each availability zone.</p>"
+      "documentation":"<p>The capacity reservation status for each Availability Zone.</p>"
     },
     "ZonalCapacityReservationStates":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr/2009-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/emr/2009-03-31/service-2.json 2.31.35-1/awscli/botocore/data/emr/2009-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/emr/2009-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr/2009-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -83,6 +83,20 @@
       ],
       "documentation":"<p>Cancels a pending step or steps in a running cluster. Available only in Amazon EMR versions 4.8.0 and later, excluding version 5.0.0. A maximum of 256 steps are allowed in each CancelSteps request. CancelSteps is idempotent but asynchronous; it does not guarantee that a step will be canceled, even if the request is successfully submitted. When you use Amazon EMR releases 5.28.0 and later, you can cancel steps that are in a <code>PENDING</code> or <code>RUNNING</code> state. In earlier versions of Amazon EMR, you can only cancel steps that are in a <code>PENDING</code> state. </p>"
     },
+    "CreatePersistentAppUI":{
+      "name":"CreatePersistentAppUI",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreatePersistentAppUIInput"},
+      "output":{"shape":"CreatePersistentAppUIOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"InvalidRequestException"}
+      ],
+      "documentation":"<p>Creates a persistent application user interface.</p>"
+    },
     "CreateSecurityConfiguration":{
       "name":"CreateSecurityConfiguration",
       "http":{
@@ -206,6 +220,20 @@
       ],
       "documentation":"<p>Provides details of a notebook execution.</p>"
     },
+    "DescribePersistentAppUI":{
+      "name":"DescribePersistentAppUI",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribePersistentAppUIInput"},
+      "output":{"shape":"DescribePersistentAppUIOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"InvalidRequestException"}
+      ],
+      "documentation":"<p>Describes a persistent application user interface.</p>"
+    },
     "DescribeReleaseLabel":{
       "name":"DescribeReleaseLabel",
       "http":{
@@ -310,6 +338,34 @@
       "output":{"shape":"GetManagedScalingPolicyOutput"},
       "documentation":"<p>Fetches the attached managed scaling policy for an Amazon EMR cluster. </p>"
     },
+    "GetOnClusterAppUIPresignedURL":{
+      "name":"GetOnClusterAppUIPresignedURL",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetOnClusterAppUIPresignedURLInput"},
+      "output":{"shape":"GetOnClusterAppUIPresignedURLOutput"},
+      "errors":[
+        {"shape":"InternalServerError"},
+        {"shape":"InvalidRequestException"}
+      ],
+      "documentation":"<p>The presigned URL properties for the cluster's application user interface.</p>"
+    },
+    "GetPersistentAppUIPresignedURL":{
+      "name":"GetPersistentAppUIPresignedURL",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetPersistentAppUIPresignedURLInput"},
+      "output":{"shape":"GetPersistentAppUIPresignedURLOutput"},
+      "errors":[
+        {"shape":"InternalServerError"},
+        {"shape":"InvalidRequestException"}
+      ],
+      "documentation":"<p>The presigned URL properties for the cluster's application user interface.</p>"
+    },
     "GetStudioSessionMapping":{
       "name":"GetStudioSessionMapping",
       "http":{
@@ -878,8 +934,7 @@
     },
     "AddTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This output indicates the result of adding tags to a resource.</p>"
     },
     "AdjustmentType":{
@@ -1339,6 +1394,10 @@
         "EbsRootVolumeThroughput":{
           "shape":"Integer",
           "documentation":"<p>The throughput, in MiB/s, of the Amazon EBS root device volume of the Linux AMI that is used for each Amazon EC2 instance. Available in Amazon EMR releases 6.15.0 and later.</p>"
+        },
+        "ExtendedSupport":{
+          "shape":"BooleanObject",
+          "documentation":"<p>Reserved.</p>"
         }
       },
       "documentation":"<p>The detailed description of the cluster.</p>"
@@ -1553,6 +1612,45 @@
       "type":"list",
       "member":{"shape":"Configuration"}
     },
+    "CreatePersistentAppUIInput":{
+      "type":"structure",
+      "required":["TargetResourceArn"],
+      "members":{
+        "TargetResourceArn":{
+          "shape":"ArnType",
+          "documentation":"<p>The unique Amazon Resource Name (ARN) of the target resource.</p>"
+        },
+        "EMRContainersConfig":{
+          "shape":"EMRContainersConfig",
+          "documentation":"<p>The EMR containers configuration.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags for the persistent application user interface.</p>"
+        },
+        "XReferer":{
+          "shape":"String",
+          "documentation":"<p>The cross reference for the persistent application user interface.</p>"
+        },
+        "ProfilerType":{
+          "shape":"ProfilerType",
+          "documentation":"<p>The profiler type for the persistent application user interface.</p>"
+        }
+      }
+    },
+    "CreatePersistentAppUIOutput":{
+      "type":"structure",
+      "members":{
+        "PersistentAppUIId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The persistent application user interface identifier.</p>"
+        },
+        "RuntimeRoleEnabledCluster":{
+          "shape":"Boolean",
+          "documentation":"<p>Represents if the EMR on EC2 cluster that the persisent application user interface is created for is a runtime role enabled cluster or not.</p>"
+        }
+      }
+    },
     "CreateSecurityConfigurationInput":{
       "type":"structure",
       "required":[
@@ -1737,8 +1835,7 @@
     },
     "DeleteSecurityConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStudioInput":{
       "type":"structure",
@@ -1847,6 +1944,25 @@
         }
       }
     },
+    "DescribePersistentAppUIInput":{
+      "type":"structure",
+      "required":["PersistentAppUIId"],
+      "members":{
+        "PersistentAppUIId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The identifier for the persistent application user interface.</p>"
+        }
+      }
+    },
+    "DescribePersistentAppUIOutput":{
+      "type":"structure",
+      "members":{
+        "PersistentAppUI":{
+          "shape":"PersistentAppUI",
+          "documentation":"<p>The persistent application user interface.</p>"
+        }
+      }
+    },
     "DescribeReleaseLabelInput":{
       "type":"structure",
       "members":{
@@ -1967,6 +2083,16 @@
       "type":"list",
       "member":{"shape":"InstanceId"}
     },
+    "EMRContainersConfig":{
+      "type":"structure",
+      "members":{
+        "JobRunId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The Job run ID for the container configuration.</p>"
+        }
+      },
+      "documentation":"<p>The EMR container configuration.</p>"
+    },
     "EbsBlockDevice":{
       "type":"structure",
       "members":{
@@ -2013,7 +2139,7 @@
         },
         "EbsOptimized":{
           "shape":"BooleanObject",
-          "documentation":"<p>Indicates whether an Amazon EBS volume is EBS-optimized.</p>"
+          "documentation":"<p>Indicates whether an Amazon EBS volume is EBS-optimized. The default is false. You should explicitly set this value to true to enable the Amazon EBS-optimized setting for an EC2 instance.</p>"
         }
       },
       "documentation":"<p>The Amazon EBS configuration of a cluster instance.</p>"
@@ -2190,8 +2316,7 @@
     },
     "GetBlockPublicAccessConfigurationInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetBlockPublicAccessConfigurationOutput":{
       "type":"structure",
@@ -2256,6 +2381,84 @@
         }
       }
     },
+    "GetOnClusterAppUIPresignedURLInput":{
+      "type":"structure",
+      "required":["ClusterId"],
+      "members":{
+        "ClusterId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The cluster ID associated with the cluster's application user interface presigned URL.</p>"
+        },
+        "OnClusterAppUIType":{
+          "shape":"OnClusterAppUIType",
+          "documentation":"<p>The application UI type associated with the cluster's application user interface presigned URL.</p>"
+        },
+        "ApplicationId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The application ID associated with the cluster's application user interface presigned URL.</p>"
+        },
+        "DryRun":{
+          "shape":"BooleanObject",
+          "documentation":"<p>Determines if the user interface presigned URL is for a dry run.</p>"
+        },
+        "ExecutionRoleArn":{
+          "shape":"ArnType",
+          "documentation":"<p>The execution role ARN associated with the cluster's application user interface presigned URL.</p>"
+        }
+      }
+    },
+    "GetOnClusterAppUIPresignedURLOutput":{
+      "type":"structure",
+      "members":{
+        "PresignedURLReady":{
+          "shape":"Boolean",
+          "documentation":"<p>Used to determine if the presigned URL is ready.</p>"
+        },
+        "PresignedURL":{
+          "shape":"XmlString",
+          "documentation":"<p>The cluster's generated presigned URL.</p>"
+        }
+      }
+    },
+    "GetPersistentAppUIPresignedURLInput":{
+      "type":"structure",
+      "required":["PersistentAppUIId"],
+      "members":{
+        "PersistentAppUIId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The persistent application user interface ID associated with the presigned URL.</p>"
+        },
+        "PersistentAppUIType":{
+          "shape":"PersistentAppUIType",
+          "documentation":"<p>The persistent application user interface type associated with the presigned URL.</p>"
+        },
+        "ApplicationId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The application ID associated with the presigned URL.</p>"
+        },
+        "AuthProxyCall":{
+          "shape":"BooleanObject",
+          "documentation":"<p>A boolean that represents if the caller is an authentication proxy call.</p>"
+        },
+        "ExecutionRoleArn":{
+          "shape":"ArnType",
+          "documentation":"<p>The execution role ARN associated with the presigned URL.</p>"
+        }
+      }
+    },
+    "GetPersistentAppUIPresignedURLOutput":{
+      "type":"structure",
+      "members":{
+        "PresignedURLReady":{
+          "shape":"Boolean",
+          "documentation":"<p>Used to determine if the presigned URL is ready.</p>"
+        },
+        "PresignedURL":{
+          "shape":"XmlString",
+          "documentation":"<p>The returned presigned URL.</p>"
+        }
+      }
+    },
     "GetStudioSessionMappingInput":{
       "type":"structure",
       "required":[
@@ -2584,6 +2787,7 @@
         "BOOTSTRAPPING",
         "RUNNING",
         "RESIZING",
+        "RECONFIGURING",
         "SUSPENDED",
         "TERMINATING",
         "TERMINATED"
@@ -3202,8 +3406,7 @@
     "Integer":{"type":"integer"},
     "InternalServerError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that an error occurred while processing the request and that the request was not completed.</p>",
       "exception":true
     },
@@ -3996,6 +4199,10 @@
         "StepConcurrencyLevel":{
           "shape":"Integer",
           "documentation":"<p>The number of steps that can be executed concurrently. You can specify a minimum of 1 step and a maximum of 256 steps. We recommend that you do not change this parameter while steps are running or the <code>ActionOnFailure</code> setting may not behave as expected. For more information see <a>Step$ActionOnFailure</a>.</p>"
+        },
+        "ExtendedSupport":{
+          "shape":"BooleanObject",
+          "documentation":"<p>Reserved.</p>"
         }
       }
     },
@@ -4005,6 +4212,10 @@
         "StepConcurrencyLevel":{
           "shape":"Integer",
           "documentation":"<p>The number of steps that can be executed concurrently.</p>"
+        },
+        "ExtendedSupport":{
+          "shape":"BooleanObject",
+          "documentation":"<p>Reserved.</p>"
         }
       }
     },
@@ -4220,6 +4431,17 @@
       "type":"list",
       "member":{"shape":"OSRelease"}
     },
+    "OnClusterAppUIType":{
+      "type":"string",
+      "enum":[
+        "SparkHistoryServer",
+        "YarnTimelineService",
+        "TezUI",
+        "ApplicationMaster",
+        "JobHistoryServer",
+        "ResourceManager"
+      ]
+    },
     "OnDemandCapacityReservationOptions":{
       "type":"structure",
       "members":{
@@ -4323,6 +4545,56 @@
       },
       "documentation":"<p>The Amazon S3 location that stores the notebook execution output.</p>"
     },
+    "PersistentAppUI":{
+      "type":"structure",
+      "members":{
+        "PersistentAppUIId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The identifier for the persistent application user interface object.</p>"
+        },
+        "PersistentAppUITypeList":{
+          "shape":"PersistentAppUITypeList",
+          "documentation":"<p>The type list for the persistent application user interface object. Valid values include SHS, YTS, or TEZ.</p>"
+        },
+        "PersistentAppUIStatus":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The status for the persistent application user interface object.</p>"
+        },
+        "AuthorId":{
+          "shape":"XmlStringMaxLen256",
+          "documentation":"<p>The author ID for the persistent application user interface object.</p>"
+        },
+        "CreationTime":{
+          "shape":"Date",
+          "documentation":"<p>The creation date and time for the persistent application user interface object.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Date",
+          "documentation":"<p>The date and time the persistent application user interface object was last changed.</p>"
+        },
+        "LastStateChangeReason":{
+          "shape":"XmlString",
+          "documentation":"<p>The reason the persistent application user interface object was last changed.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>A collection of tags for the persistent application user interface object.</p>"
+        }
+      },
+      "documentation":"<p>Holds persistent application user interface information. Applications installed on the Amazon EMR cluster publish user interfaces as web sites to monitor cluster activity.</p>"
+    },
+    "PersistentAppUIType":{
+      "type":"string",
+      "enum":[
+        "SHS",
+        "TEZ",
+        "YTS"
+      ]
+    },
+    "PersistentAppUITypeList":{
+      "type":"list",
+      "member":{"shape":"PersistentAppUIType"}
+    },
     "PlacementGroupConfig":{
       "type":"structure",
       "required":["InstanceRole"],
@@ -4389,6 +4661,14 @@
       "type":"list",
       "member":{"shape":"PortRange"}
     },
+    "ProfilerType":{
+      "type":"string",
+      "enum":[
+        "SHS",
+        "TEZUI",
+        "YTS"
+      ]
+    },
     "PutAutoScalingPolicyInput":{
       "type":"structure",
       "required":[
@@ -4448,8 +4728,7 @@
     },
     "PutAutoTerminationPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutBlockPublicAccessConfigurationInput":{
       "type":"structure",
@@ -4463,8 +4742,7 @@
     },
     "PutBlockPublicAccessConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutManagedScalingPolicyInput":{
       "type":"structure",
@@ -4485,8 +4763,7 @@
     },
     "PutManagedScalingPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReconfigurationType":{
       "type":"string",
@@ -4528,8 +4805,7 @@
     },
     "RemoveAutoScalingPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveAutoTerminationPolicyInput":{
       "type":"structure",
@@ -4543,8 +4819,7 @@
     },
     "RemoveAutoTerminationPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveManagedScalingPolicyInput":{
       "type":"structure",
@@ -4558,8 +4833,7 @@
     },
     "RemoveManagedScalingPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveTagsInput":{
       "type":"structure",
@@ -4581,8 +4855,7 @@
     },
     "RemoveTagsOutput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This output indicates the result of removing tags from the resource.</p>"
     },
     "RepoUpgradeOnBoot":{
@@ -4720,6 +4993,10 @@
         "EbsRootVolumeThroughput":{
           "shape":"Integer",
           "documentation":"<p>The throughput, in MiB/s, of the Amazon EBS root device volume of the Linux AMI that is used for each Amazon EC2 instance. Available in Amazon EMR releases 6.15.0 and later.</p>"
+        },
+        "ExtendedSupport":{
+          "shape":"BooleanObject",
+          "documentation":"<p>Reserved.</p>"
         }
       },
       "documentation":"<p> Input to the <a>RunJobFlow</a> operation. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr-containers/2020-10-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/emr-containers/2020-10-01/service-2.json 2.31.35-1/awscli/botocore/data/emr-containers/2020-10-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/emr-containers/2020-10-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr-containers/2020-10-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -359,6 +359,13 @@
       "min":44,
       "pattern":"^arn:(aws[a-zA-Z0-9-]*):acm:.+:(\\d{12}):certificate/.+$"
     },
+    "AllowAWSToRetainLogs":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "AuthorizationConfiguration":{
       "type":"structure",
       "members":{
@@ -695,6 +702,10 @@
           "shape":"ResourceNameString",
           "documentation":"<p>The name of the security configuration.</p>"
         },
+        "containerProvider":{
+          "shape":"ContainerProvider",
+          "documentation":"<p>The container provider associated with the security configuration.</p>"
+        },
         "securityConfigurationData":{
           "shape":"SecurityConfigurationData",
           "documentation":"<p>Security configuration input for the request.</p>"
@@ -1005,6 +1016,10 @@
         "namespace":{
           "shape":"KubernetesNamespace",
           "documentation":"<p>The namespaces of the Amazon EKS cluster.</p>"
+        },
+        "nodeLabel":{
+          "shape":"ResourceNameString",
+          "documentation":"<p>The nodeLabel of the nodes where the resources of this virtual cluster can get scheduled. It requires relevant scaling and policy engine addons.</p>"
         }
       },
       "documentation":"<p>The information about the Amazon EKS cluster.</p>"
@@ -1788,6 +1803,20 @@
       "min":1,
       "pattern":"[\\.\\-_/#A-Za-z0-9]+"
     },
+    "ManagedLogs":{
+      "type":"structure",
+      "members":{
+        "allowAWSToRetainLogs":{
+          "shape":"AllowAWSToRetainLogs",
+          "documentation":"<p>Determines whether Amazon Web Services can retain logs.</p>"
+        },
+        "encryptionKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon resource name (ARN) of the encryption key for logs.</p>"
+        }
+      },
+      "documentation":"<p>The entity that provides configuration control over managed logs.</p>"
+    },
     "MaxFilesToKeep":{
       "type":"integer",
       "max":50,
@@ -1796,6 +1825,10 @@
     "MonitoringConfiguration":{
       "type":"structure",
       "members":{
+        "managedLogs":{
+          "shape":"ManagedLogs",
+          "documentation":"<p>The entity that controls configuration for managed logs.</p>"
+        },
         "persistentAppUI":{
           "shape":"PersistentAppUI",
           "documentation":"<p>Monitoring configurations for the persistent application UI. </p>"
@@ -2280,8 +2313,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TemplateParameter":{
       "type":"string",
@@ -2357,8 +2389,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UriString":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr-serverless/2021-07-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json 2.31.35-1/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/emr-serverless/2021-07-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,8 +24,8 @@
       "output":{"shape":"CancelJobRunResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Cancels a job run.</p>",
       "idempotent":true
@@ -41,8 +41,8 @@
       "output":{"shape":"CreateApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"}
       ],
       "documentation":"<p>Creates an application.</p>",
@@ -59,8 +59,8 @@
       "output":{"shape":"DeleteApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Deletes an application. An application has to be in a stopped or created state in order to be deleted.</p>",
       "idempotent":true
@@ -76,10 +76,11 @@
       "output":{"shape":"GetApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Displays detailed information about a specified application.</p>"
+      "documentation":"<p>Displays detailed information about a specified application.</p>",
+      "readonly":true
     },
     "GetDashboardForJobRun":{
       "name":"GetDashboardForJobRun",
@@ -108,10 +109,11 @@
       "output":{"shape":"GetJobRunResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Displays detailed information about a job run.</p>"
+      "documentation":"<p>Displays detailed information about a job run.</p>",
+      "readonly":true
     },
     "ListApplications":{
       "name":"ListApplications",
@@ -126,7 +128,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists applications based on a set of parameters.</p>"
+      "documentation":"<p>Lists applications based on a set of parameters.</p>",
+      "readonly":true
     },
     "ListJobRunAttempts":{
       "name":"ListJobRunAttempts",
@@ -139,10 +142,11 @@
       "output":{"shape":"ListJobRunAttemptsResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists all attempt of a job run.</p>"
+      "documentation":"<p>Lists all attempt of a job run.</p>",
+      "readonly":true
     },
     "ListJobRuns":{
       "name":"ListJobRuns",
@@ -157,7 +161,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists job runs based on a set of parameters.</p>"
+      "documentation":"<p>Lists job runs based on a set of parameters.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -170,10 +175,11 @@
       "output":{"shape":"ListTagsForResourceResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists the tags assigned to the resources.</p>"
+      "documentation":"<p>Lists the tags assigned to the resources.</p>",
+      "readonly":true
     },
     "StartApplication":{
       "name":"StartApplication",
@@ -186,8 +192,8 @@
       "output":{"shape":"StartApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Starts a specified application and initializes initial capacity if configured.</p>",
@@ -222,8 +228,8 @@
       "output":{"shape":"StopApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Stops a specified application and releases initial capacity if configured. All scheduled and running jobs must be completed or cancelled before stopping an application.</p>",
       "idempotent":true
@@ -239,8 +245,8 @@
       "output":{"shape":"TagResourceResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Assigns tags to resources. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key and an optional value, both of which you define. Tags enable you to categorize your Amazon Web Services resources by attributes such as purpose, owner, or environment. When you have many resources of the same type, you can quickly identify a specific resource based on the tags you've assigned to it. </p>"
     },
@@ -255,8 +261,8 @@
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Removes tags from resources.</p>",
       "idempotent":true
@@ -272,8 +278,8 @@
       "output":{"shape":"UpdateApplicationResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Updates a specified application. An application has to be in a stopped or created state in order to be updated.</p>"
     }
@@ -375,6 +381,10 @@
         "schedulerConfiguration":{
           "shape":"SchedulerConfiguration",
           "documentation":"<p>The scheduler configuration for batch and streaming jobs running on this application. Supported with release labels emr-7.0.0 and above.</p>"
+        },
+        "identityCenterConfiguration":{
+          "shape":"IdentityCenterConfiguration",
+          "documentation":"<p>The IAM Identity Center configuration applied to enable trusted identity propagation.</p>"
         }
       },
       "documentation":"<p>Information about an application. Amazon EMR Serverless uses applications to run jobs.</p>"
@@ -481,6 +491,12 @@
         "X86_64"
       ]
     },
+    "Arn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"([    -~ -퟿-�က0-ჿFF]+)"
+    },
     "AttemptNumber":{
       "type":"integer",
       "box":true,
@@ -538,6 +554,12 @@
           "documentation":"<p>The ID of the job run to cancel.</p>",
           "location":"uri",
           "locationName":"jobRunId"
+        },
+        "shutdownGracePeriodInSeconds":{
+          "shape":"ShutdownGracePeriodInSeconds",
+          "documentation":"<p>The duration in seconds to wait before forcefully terminating the job after cancellation is requested.</p>",
+          "location":"querystring",
+          "locationName":"shutdownGracePeriodInSeconds"
         }
       }
     },
@@ -737,6 +759,10 @@
         "schedulerConfiguration":{
           "shape":"SchedulerConfiguration",
           "documentation":"<p>The scheduler configuration for batch and streaming jobs running on this application. Supported with release labels emr-7.0.0 and above.</p>"
+        },
+        "identityCenterConfiguration":{
+          "shape":"IdentityCenterConfigurationInput",
+          "documentation":"<p>The IAM Identity Center Configuration accepts the Identity Center instance parameter required to enable trusted identity propagation. This configuration allows identity propagation between integrated services and the Identity Center instance.</p>"
         }
       }
     },
@@ -776,8 +802,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DiskSize":{
       "type":"string",
@@ -811,14 +836,15 @@
     },
     "EntryPointArgument":{
       "type":"string",
-      "max":10280,
       "min":1,
       "pattern":".*\\S.*",
       "sensitive":true
     },
     "EntryPointArguments":{
       "type":"list",
-      "member":{"shape":"EntryPointArgument"}
+      "member":{"shape":"EntryPointArgument"},
+      "max":1024,
+      "min":0
     },
     "EntryPointPath":{
       "type":"string",
@@ -960,6 +986,48 @@
       "min":20,
       "pattern":"arn:(aws[a-zA-Z0-9-]*):iam::([0-9]{12}):(role((\\u002F)|(\\u002F[\\u0021-\\u007F]+\\u002F))[\\w+=,.@-]+)"
     },
+    "IdentityCenterApplicationArn":{
+      "type":"string",
+      "pattern":"arn:(aws[a-zA-Z0-9-]*):sso::\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}"
+    },
+    "IdentityCenterConfiguration":{
+      "type":"structure",
+      "members":{
+        "identityCenterInstanceArn":{
+          "shape":"IdentityCenterInstanceArn",
+          "documentation":"<p>The ARN of the IAM Identity Center instance.</p>"
+        },
+        "identityCenterApplicationArn":{
+          "shape":"IdentityCenterApplicationArn",
+          "documentation":"<p>The ARN of the EMR Serverless created IAM Identity Center Application that provides trusted-identity propagation.</p>"
+        },
+        "userBackgroundSessionsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables user background sessions for this application so Livy sessions can continue running after users log out of their interactive notebook or their Identity Center sessions expire.</p>"
+        }
+      },
+      "documentation":"<p>The IAM Identity Center Configuration accepts the Identity Center instance parameter required to enable trusted identity propagation. This configuration allows identity propagation between integrated services and the Identity Center instance.</p>"
+    },
+    "IdentityCenterConfigurationInput":{
+      "type":"structure",
+      "members":{
+        "identityCenterInstanceArn":{
+          "shape":"IdentityCenterInstanceArn",
+          "documentation":"<p>The ARN of the IAM Identity Center instance.</p>"
+        },
+        "userBackgroundSessionsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables user background sessions for this application so Livy sessions can continue running after users log out of their interactive notebook or their Identity Center sessions expire.</p>"
+        }
+      },
+      "documentation":"<p>The IAM Identity Center Configuration accepts the Identity Center instance parameter required to enable trusted identity propagation. This configuration allows identity propagation between integrated services and the Identity Center instance.</p>"
+    },
+    "IdentityCenterInstanceArn":{
+      "type":"string",
+      "max":1024,
+      "min":10,
+      "pattern":"arn:(aws[a-zA-Z0-9-]*):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}"
+    },
     "ImageConfiguration":{
       "type":"structure",
       "required":["imageUri"],
@@ -1122,6 +1190,7 @@
           "shape":"IAMRoleArn",
           "documentation":"<p>The execution role ARN of the job run.</p>"
         },
+        "executionIamPolicy":{"shape":"JobRunExecutionIamPolicy"},
         "state":{
           "shape":"JobRunState",
           "documentation":"<p>The state of the job run.</p>"
@@ -1282,6 +1351,20 @@
       "type":"list",
       "member":{"shape":"JobRunAttemptSummary"}
     },
+    "JobRunExecutionIamPolicy":{
+      "type":"structure",
+      "members":{
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>An IAM inline policy to use as an execution IAM policy.</p>"
+        },
+        "policyArns":{
+          "shape":"PolicyArnList",
+          "documentation":"<p>A list of Amazon Resource Names (ARNs) to use as an execution IAM policy.</p>"
+        }
+      },
+      "documentation":"<p>Optional IAM policy. The resulting job IAM role permissions will be an intersection of the policies passed and the policy associated with your job execution role.</p>"
+    },
     "JobRunId":{
       "type":"string",
       "max":64,
@@ -1707,6 +1790,18 @@
       "min":1,
       "pattern":"[A-Za-z0-9_=-]+"
     },
+    "PolicyArnList":{
+      "type":"list",
+      "member":{"shape":"Arn"},
+      "max":10,
+      "min":0
+    },
+    "PolicyDocument":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"([    -ÿ]+)"
+    },
     "PrometheusMonitoringConfiguration":{
       "type":"structure",
       "members":{
@@ -1859,6 +1954,10 @@
       },
       "exception":true
     },
+    "ShutdownGracePeriodInSeconds":{
+      "type":"integer",
+      "box":true
+    },
     "SparkSubmit":{
       "type":"structure",
       "required":["entryPoint"],
@@ -1899,8 +1998,7 @@
     },
     "StartApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartJobRunRequest":{
       "type":"structure",
@@ -1925,6 +2023,10 @@
           "shape":"IAMRoleArn",
           "documentation":"<p>The execution role ARN for the job run.</p>"
         },
+        "executionIamPolicy":{
+          "shape":"JobRunExecutionIamPolicy",
+          "documentation":"<p>You can pass an optional IAM policy. The resulting job IAM role permissions will be an intersection of this policy and the policy associated with your job execution role.</p>"
+        },
         "jobDriver":{
           "shape":"JobDriver",
           "documentation":"<p>The job driver for the job run.</p>"
@@ -1992,8 +2094,7 @@
     },
     "StopApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String1024":{
       "type":"string",
@@ -2059,8 +2160,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2109,8 +2209,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationRequest":{
       "type":"structure",
@@ -2178,6 +2277,10 @@
         "schedulerConfiguration":{
           "shape":"SchedulerConfiguration",
           "documentation":"<p>The scheduler configuration for batch and streaming jobs running on this application. Supported with release labels emr-7.0.0 and above.</p>"
+        },
+        "identityCenterConfiguration":{
+          "shape":"IdentityCenterConfigurationInput",
+          "documentation":"<p>Specifies the IAM Identity Center configuration used to enable or disable trusted identity propagation. When provided, this configuration determines how the application interacts with IAM Identity Center for user authentication and access control.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/endpoints.json 2.31.35-1/awscli/botocore/data/endpoints.json
--- 2.23.6-1/awscli/botocore/data/endpoints.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/endpoints.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,9 @@
       "ap-east-1" : {
         "description" : "Asia Pacific (Hong Kong)"
       },
+      "ap-east-2" : {
+        "description" : "Asia Pacific (Taipei)"
+      },
       "ap-northeast-1" : {
         "description" : "Asia Pacific (Tokyo)"
       },
@@ -59,6 +62,9 @@
       "ap-southeast-5" : {
         "description" : "Asia Pacific (Malaysia)"
       },
+      "ap-southeast-6" : {
+        "description" : "Asia Pacific (New Zealand)"
+      },
       "ap-southeast-7" : {
         "description" : "Asia Pacific (Thailand)"
       },
@@ -123,39 +129,158 @@
     "services" : {
       "access-analyzer" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "ca-west-1" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.ca-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -198,33 +323,82 @@
             "deprecated" : true,
             "hostname" : "access-analyzer-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "access-analyzer-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -245,6 +419,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -255,6 +430,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -356,6 +532,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -366,6 +543,8 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "acm-pca-fips.ca-central-1.amazonaws.com",
@@ -431,6 +610,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -460,7 +640,12 @@
       },
       "agreement-marketplace" : {
         "endpoints" : {
-          "us-east-1" : { }
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "agreement-marketplace.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "airflow" : {
@@ -476,6 +661,7 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -571,19 +757,24 @@
           "ap-east-1" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
+          "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
+          "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
+          "us-west-1" : { },
           "us-west-2" : { }
         }
       },
@@ -592,17 +783,58 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "detective.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "detective.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "api.detective-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "ca-central-1-fips" : {
@@ -612,19 +844,70 @@
             "deprecated" : true,
             "hostname" : "api.detective-fips.ca-central-1.amazonaws.com"
           },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "il-central-1" : { },
-          "me-south-1" : { },
-          "sa-east-1" : { },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "detective.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "detective.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "detective.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "detective.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "api.detective-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-1-fips" : {
@@ -638,6 +921,12 @@
             "variants" : [ {
               "hostname" : "api.detective-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2-fips" : {
@@ -651,6 +940,12 @@
             "variants" : [ {
               "hostname" : "api.detective-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1-fips" : {
@@ -664,6 +959,12 @@
             "variants" : [ {
               "hostname" : "api.detective-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2-fips" : {
@@ -703,6 +1004,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "credentialScope" : {
               "region" : "ap-northeast-1"
@@ -803,6 +1105,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "credentialScope" : {
               "region" : "ap-southeast-7"
@@ -1145,93 +1448,6 @@
           }
         }
       },
-      "api.elastic-inference" : {
-        "endpoints" : {
-          "ap-northeast-1" : {
-            "hostname" : "api.elastic-inference.ap-northeast-1.amazonaws.com"
-          },
-          "ap-northeast-2" : {
-            "hostname" : "api.elastic-inference.ap-northeast-2.amazonaws.com"
-          },
-          "eu-west-1" : {
-            "hostname" : "api.elastic-inference.eu-west-1.amazonaws.com"
-          },
-          "us-east-1" : {
-            "hostname" : "api.elastic-inference.us-east-1.amazonaws.com"
-          },
-          "us-east-2" : {
-            "hostname" : "api.elastic-inference.us-east-2.amazonaws.com"
-          },
-          "us-west-2" : {
-            "hostname" : "api.elastic-inference.us-west-2.amazonaws.com"
-          }
-        }
-      },
-      "api.fleethub.iot" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : {
-            "variants" : [ {
-              "hostname" : "api.fleethub.iot-fips.ca-central-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "fips-ca-central-1" : {
-            "credentialScope" : {
-              "region" : "ca-central-1"
-            },
-            "deprecated" : true,
-            "hostname" : "api.fleethub.iot-fips.ca-central-1.amazonaws.com"
-          },
-          "fips-us-east-1" : {
-            "credentialScope" : {
-              "region" : "us-east-1"
-            },
-            "deprecated" : true,
-            "hostname" : "api.fleethub.iot-fips.us-east-1.amazonaws.com"
-          },
-          "fips-us-east-2" : {
-            "credentialScope" : {
-              "region" : "us-east-2"
-            },
-            "deprecated" : true,
-            "hostname" : "api.fleethub.iot-fips.us-east-2.amazonaws.com"
-          },
-          "fips-us-west-2" : {
-            "credentialScope" : {
-              "region" : "us-west-2"
-            },
-            "deprecated" : true,
-            "hostname" : "api.fleethub.iot-fips.us-west-2.amazonaws.com"
-          },
-          "us-east-1" : {
-            "variants" : [ {
-              "hostname" : "api.fleethub.iot-fips.us-east-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-east-2" : {
-            "variants" : [ {
-              "hostname" : "api.fleethub.iot-fips.us-east-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-west-2" : {
-            "variants" : [ {
-              "hostname" : "api.fleethub.iot-fips.us-west-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          }
-        }
-      },
       "api.iotdeviceadvisor" : {
         "endpoints" : {
           "ap-northeast-1" : {
@@ -1351,6 +1567,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -1360,8 +1577,34 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
-          "ca-central-1" : { },
-          "ca-west-1" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "api-fips.sagemaker.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "ca-central-1-fips" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "api-fips.sagemaker.ca-central-1.amazonaws.com"
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "api-fips.sagemaker.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "ca-west-1-fips" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "api-fips.sagemaker.ca-west-1.amazonaws.com"
+          },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
@@ -1373,6 +1616,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -1481,6 +1725,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "api.iot-tunneling-fips.ca-central-1.api.aws",
@@ -1505,6 +1750,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-south-2" : { },
           "eu-west-1" : {
             "variants" : [ {
               "hostname" : "api.iot-tunneling.eu-west-1.api.aws",
@@ -1630,6 +1876,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -1640,6 +1887,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -1752,6 +2000,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -1762,6 +2011,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -1788,6 +2038,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -1798,6 +2049,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -1895,6 +2147,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -1905,6 +2158,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -1929,35 +2183,258 @@
       },
       "applicationinsights" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ca-central-1" : { },
-          "ca-west-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.ca-central-1.amazonaws.com"
+          },
+          "fips-ca-west-1" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.ca-west-1.amazonaws.com"
+          },
+          "fips-us-east-1" : {
+            "credentialScope" : {
+              "region" : "us-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-east-1.amazonaws.com"
+          },
+          "fips-us-east-2" : {
+            "credentialScope" : {
+              "region" : "us-east-2"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-east-2.amazonaws.com"
+          },
+          "fips-us-west-1" : {
+            "credentialScope" : {
+              "region" : "us-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-west-1.amazonaws.com"
+          },
+          "fips-us-west-2" : {
+            "credentialScope" : {
+              "region" : "us-west-2"
+            },
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-west-2.amazonaws.com"
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-east-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-east-2.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-2" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-west-2.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "appmesh" : {
@@ -2247,6 +2724,7 @@
           "eu-central-1" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
+          "eu-west-3" : { },
           "fips" : {
             "credentialScope" : {
               "region" : "us-west-2"
@@ -2286,47 +2764,175 @@
       },
       "appsync" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
-        }
-      },
-      "apptest" : {
-        "endpoints" : {
-          "ap-southeast-2" : { },
-          "eu-central-1" : { },
-          "fips-us-east-1" : {
-            "deprecated" : true
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "appsync.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : { },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "appsync.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
           },
-          "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
-              "tags" : [ "fips" ]
+              "hostname" : "appsync.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-2" : {
+            "variants" : [ {
+              "hostname" : "appsync.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -2336,6 +2942,9 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
+          "af-south-1" : { },
+          "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -2346,11 +2955,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-northeast-3" : { },
           "ap-south-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-south-2" : { },
           "ap-southeast-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -2361,16 +2972,25 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
+          "ca-central-1" : { },
+          "ca-west-1" : { },
           "eu-central-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-central-2" : { },
           "eu-north-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -2386,6 +3006,10 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "il-central-1" : { },
+          "me-central-1" : { },
+          "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -2394,17 +3018,39 @@
           "us-east-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
+            }, {
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "tags" : [ "fips" ]
             } ]
           },
+          "us-east-1-fips" : {
+            "deprecated" : true
+          },
           "us-east-2" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
+            }, {
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "tags" : [ "fips" ]
             } ]
           },
+          "us-east-2-fips" : {
+            "deprecated" : true
+          },
+          "us-west-1" : { },
           "us-west-2" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
+            }, {
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "tags" : [ "fips" ]
             } ]
+          },
+          "us-west-2-fips" : {
+            "deprecated" : true
           }
         }
       },
@@ -2412,6 +3058,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -2422,6 +3069,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -2458,6 +3106,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "athena.ap-northeast-1.api.aws",
@@ -2518,6 +3167,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "athena-fips.ca-central-1.amazonaws.com",
@@ -2650,6 +3300,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "athena.sa-east-1.api.aws",
@@ -2777,6 +3428,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -2787,6 +3439,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -2914,6 +3567,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -2924,6 +3578,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -2981,6 +3636,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -2991,6 +3647,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -3063,11 +3720,18 @@
       },
       "bedrock" : {
         "endpoints" : {
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
+          "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "bedrock-ap-northeast-1" : {
             "credentialScope" : {
               "region" : "ap-northeast-1"
@@ -3080,12 +3744,24 @@
             },
             "hostname" : "bedrock.ap-northeast-2.amazonaws.com"
           },
+          "bedrock-ap-northeast-3" : {
+            "credentialScope" : {
+              "region" : "ap-northeast-3"
+            },
+            "hostname" : "bedrock.ap-northeast-3.amazonaws.com"
+          },
           "bedrock-ap-south-1" : {
             "credentialScope" : {
               "region" : "ap-south-1"
             },
             "hostname" : "bedrock.ap-south-1.amazonaws.com"
           },
+          "bedrock-ap-south-2" : {
+            "credentialScope" : {
+              "region" : "ap-south-2"
+            },
+            "hostname" : "bedrock.ap-south-2.amazonaws.com"
+          },
           "bedrock-ap-southeast-1" : {
             "credentialScope" : {
               "region" : "ap-southeast-1"
@@ -3116,6 +3792,24 @@
             },
             "hostname" : "bedrock.eu-central-2.amazonaws.com"
           },
+          "bedrock-eu-north-1" : {
+            "credentialScope" : {
+              "region" : "eu-north-1"
+            },
+            "hostname" : "bedrock.eu-north-1.amazonaws.com"
+          },
+          "bedrock-eu-south-1" : {
+            "credentialScope" : {
+              "region" : "eu-south-1"
+            },
+            "hostname" : "bedrock.eu-south-1.amazonaws.com"
+          },
+          "bedrock-eu-south-2" : {
+            "credentialScope" : {
+              "region" : "eu-south-2"
+            },
+            "hostname" : "bedrock.eu-south-2.amazonaws.com"
+          },
           "bedrock-eu-west-1" : {
             "credentialScope" : {
               "region" : "eu-west-1"
@@ -3170,12 +3864,24 @@
             },
             "hostname" : "bedrock-runtime.ap-northeast-2.amazonaws.com"
           },
+          "bedrock-runtime-ap-northeast-3" : {
+            "credentialScope" : {
+              "region" : "ap-northeast-3"
+            },
+            "hostname" : "bedrock-runtime.ap-northeast-3.amazonaws.com"
+          },
           "bedrock-runtime-ap-south-1" : {
             "credentialScope" : {
               "region" : "ap-south-1"
             },
             "hostname" : "bedrock-runtime.ap-south-1.amazonaws.com"
           },
+          "bedrock-runtime-ap-south-2" : {
+            "credentialScope" : {
+              "region" : "ap-south-2"
+            },
+            "hostname" : "bedrock-runtime.ap-south-2.amazonaws.com"
+          },
           "bedrock-runtime-ap-southeast-1" : {
             "credentialScope" : {
               "region" : "ap-southeast-1"
@@ -3206,6 +3912,24 @@
             },
             "hostname" : "bedrock-runtime.eu-central-2.amazonaws.com"
           },
+          "bedrock-runtime-eu-north-1" : {
+            "credentialScope" : {
+              "region" : "eu-north-1"
+            },
+            "hostname" : "bedrock-runtime.eu-north-1.amazonaws.com"
+          },
+          "bedrock-runtime-eu-south-1" : {
+            "credentialScope" : {
+              "region" : "eu-south-1"
+            },
+            "hostname" : "bedrock-runtime.eu-south-1.amazonaws.com"
+          },
+          "bedrock-runtime-eu-south-2" : {
+            "credentialScope" : {
+              "region" : "eu-south-2"
+            },
+            "hostname" : "bedrock-runtime.eu-south-2.amazonaws.com"
+          },
           "bedrock-runtime-eu-west-1" : {
             "credentialScope" : {
               "region" : "eu-west-1"
@@ -3299,12 +4023,18 @@
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
+          "eu-north-1" : { },
+          "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "il-central-1" : { },
+          "me-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
+          "us-west-1" : { },
           "us-west-2" : { }
         }
       },
@@ -3395,6 +4125,7 @@
       },
       "cassandra" : {
         "endpoints" : {
+          "af-south-1" : { },
           "ap-east-1" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
@@ -3421,6 +4152,7 @@
             "deprecated" : true,
             "hostname" : "cassandra-fips.us-west-2.amazonaws.com"
           },
+          "me-central-1" : { },
           "me-south-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
@@ -3474,14 +4206,54 @@
       },
       "cleanrooms" : {
         "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "cleanrooms.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -3507,18 +4279,36 @@
             "variants" : [ {
               "hostname" : "cleanrooms-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "cleanrooms-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "cleanrooms.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "cleanrooms-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "cleanrooms-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "cleanrooms.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "cleanrooms-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "cleanrooms-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "cleanrooms.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -3716,6 +4506,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "cloudcontrolapi.ap-northeast-1.api.aws",
@@ -3776,6 +4567,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "cloudcontrolapi.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "cloudcontrolapi-fips.ca-central-1.amazonaws.com",
@@ -3908,6 +4706,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "cloudcontrolapi.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "cloudcontrolapi.sa-east-1.api.aws",
@@ -3981,6 +4785,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -3991,6 +4796,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -4176,6 +4982,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-south-2" : { },
           "eu-west-1" : {
             "variants" : [ {
               "hostname" : "cloudhsmv2.eu-west-1.api.aws",
@@ -4262,6 +5069,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -4272,6 +5080,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -4575,6 +5384,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -4585,6 +5395,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -4655,6 +5466,20 @@
           }
         }
       },
+      "codeguru-profiler" : {
+        "endpoints" : {
+          "ap-northeast-1" : { },
+          "ap-southeast-1" : { },
+          "ap-southeast-2" : { },
+          "eu-central-1" : { },
+          "eu-north-1" : { },
+          "eu-west-1" : { },
+          "eu-west-2" : { },
+          "us-east-1" : { },
+          "us-east-2" : { },
+          "us-west-2" : { }
+        }
+      },
       "codeguru-reviewer" : {
         "endpoints" : {
           "ap-northeast-1" : { },
@@ -4682,6 +5507,7 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "codepipeline-fips.ca-central-1.amazonaws.com",
@@ -4872,6 +5698,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "cognito-identity.ap-southeast-5.amazonaws.com",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "cognito-identity.ca-central-1.amazonaws.com",
@@ -4978,6 +5811,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "cognito-identity.sa-east-1.amazonaws.com",
@@ -5102,6 +5936,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "cognito-idp.ap-southeast-5.amazonaws.com",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "cognito-idp.ca-central-1.amazonaws.com",
@@ -5208,6 +6049,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "cognito-idp.sa-east-1.amazonaws.com",
@@ -5284,15 +6126,73 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "comprehend.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "comprehend.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "comprehend-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "comprehend.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "comprehend.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "comprehend.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "comprehend-fips.ca-central-1.amazonaws.com"
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -5318,18 +6218,36 @@
             "variants" : [ {
               "hostname" : "comprehend-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "comprehend-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "comprehend.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "comprehend-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "comprehend-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "comprehend.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "comprehend-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "comprehend-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "comprehend.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -5569,6 +6487,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -5579,6 +6498,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -5702,6 +6622,9 @@
       "connect-campaigns" : {
         "endpoints" : {
           "af-south-1" : { },
+          "ap-northeast-1" : { },
+          "ap-northeast-2" : { },
+          "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
@@ -5752,6 +6675,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -5762,6 +6686,8 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "controltower-fips.ca-central-1.amazonaws.com",
@@ -5799,6 +6725,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -5883,6 +6810,7 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "data.iot-fips.ca-central-1.amazonaws.com",
@@ -5891,6 +6819,7 @@
           },
           "eu-central-1" : { },
           "eu-north-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
@@ -6054,6 +6983,7 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "data.jobs.iot-fips.ca-central-1.amazonaws.com",
@@ -6062,6 +6992,7 @@
           },
           "eu-central-1" : { },
           "eu-north-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
@@ -6100,6 +7031,7 @@
             "deprecated" : true,
             "hostname" : "data.jobs.iot-fips.us-west-2.amazonaws.com"
           },
+          "me-central-1" : { },
           "me-south-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
@@ -6250,6 +7182,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "datasync.ap-northeast-1.api.aws",
@@ -6310,6 +7243,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "datasync.ap-southeast-7.api.aws",
@@ -6520,6 +7454,8 @@
           } ]
         },
         "endpoints" : {
+          "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "datazone.ap-northeast-1.api.aws"
           },
@@ -6529,6 +7465,9 @@
           "ap-northeast-3" : {
             "hostname" : "datazone.ap-northeast-3.api.aws"
           },
+          "ap-south-1" : {
+            "hostname" : "datazone.ap-south-1.api.aws"
+          },
           "ap-south-2" : {
             "hostname" : "datazone.ap-south-2.api.aws"
           },
@@ -6547,6 +7486,7 @@
           "ap-southeast-5" : {
             "hostname" : "datazone.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "datazone.ap-southeast-7.api.aws"
           },
@@ -6563,6 +7503,7 @@
           "eu-central-1" : {
             "hostname" : "datazone.eu-central-1.api.aws"
           },
+          "eu-central-2" : { },
           "eu-north-1" : {
             "hostname" : "datazone.eu-north-1.api.aws"
           },
@@ -6587,6 +7528,9 @@
           "me-south-1" : {
             "hostname" : "datazone.me-south-1.api.aws"
           },
+          "mx-central-1" : {
+            "hostname" : "datazone.mx-central-1.api.aws"
+          },
           "sa-east-1" : {
             "hostname" : "datazone.sa-east-1.api.aws"
           },
@@ -6727,6 +7671,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -6737,6 +7682,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -6856,6 +7802,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "dlm.ap-northeast-1.api.aws",
@@ -6916,6 +7863,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "dlm.ap-southeast-7.api.aws",
@@ -7060,6 +8008,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -7070,6 +8019,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -7339,6 +8289,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "ds-fips.ca-central-1.amazonaws.com",
@@ -7404,6 +8355,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -7438,6 +8390,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -7448,6 +8401,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -7553,6 +8507,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -7563,6 +8518,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -7674,6 +8630,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "ec2.ap-northeast-1.api.aws",
@@ -7709,6 +8666,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -7862,6 +8820,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -7872,6 +8831,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -7963,6 +8923,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -7973,6 +8934,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -8059,6 +9021,7 @@
           "ap-east-1" : {
             "hostname" : "eks-auth.ap-east-1.api.aws"
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "eks-auth.ap-northeast-1.api.aws"
           },
@@ -8089,6 +9052,7 @@
           "ap-southeast-5" : {
             "hostname" : "eks-auth.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "eks-auth.ap-southeast-7.api.aws"
           },
@@ -8155,6 +9119,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -8165,6 +9130,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -8298,6 +9264,8 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "elasticbeanstalk.ca-central-1.api.aws",
@@ -8322,6 +9290,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-south-2" : { },
           "eu-west-1" : {
             "variants" : [ {
               "hostname" : "elasticbeanstalk.eu-west-1.api.aws",
@@ -8374,6 +9343,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "me-central-1" : { },
           "me-south-1" : {
             "variants" : [ {
               "hostname" : "elasticbeanstalk.me-south-1.api.aws",
@@ -8450,6 +9420,7 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "elasticfilesystem-fips.ap-northeast-1.amazonaws.com",
@@ -8510,6 +9481,7 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "elasticfilesystem-fips.ap-southeast-7.amazonaws.com",
@@ -8863,6 +9835,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -8873,6 +9846,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -8951,6 +9925,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -8961,6 +9936,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -9080,6 +10056,7 @@
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
@@ -9090,6 +10067,7 @@
             } ]
           },
           "eu-central-1" : { },
+          "eu-central-2" : { },
           "eu-north-1" : { },
           "eu-south-1" : { },
           "eu-west-1" : { },
@@ -9131,6 +10109,7 @@
             "hostname" : "email-fips.us-west-2.amazonaws.com"
           },
           "il-central-1" : { },
+          "me-central-1" : { },
           "me-south-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
@@ -9261,13 +10240,16 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "emr-serverless-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
             } ]
           },
+          "ca-west-1" : { },
           "eu-central-1" : { },
+          "eu-central-2" : { },
           "eu-north-1" : { },
           "eu-south-1" : { },
           "eu-south-2" : { },
@@ -9309,6 +10291,7 @@
             "deprecated" : true,
             "hostname" : "emr-serverless-fips.us-west-2.amazonaws.com"
           },
+          "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
           "sa-east-1" : { },
@@ -9345,7 +10328,12 @@
           }
         },
         "endpoints" : {
-          "us-east-1" : { }
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "entitlement-marketplace.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "es" : {
@@ -9362,6 +10350,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "aos.ap-northeast-1.api.aws",
@@ -9422,6 +10411,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "aos.ap-southeast-7.api.aws",
@@ -9593,29 +10583,146 @@
       },
       "events" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
-          "ca-central-1" : { },
-          "ca-west-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "events.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "events.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "events.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "events.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "events.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "events.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "events.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "events.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "events.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "events.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "events.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "events.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "events.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "events.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "events.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "events.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "events.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "events.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -9644,33 +10751,82 @@
             "deprecated" : true,
             "hostname" : "events-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "events.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "events.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "events.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "events.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "events.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "events-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "events-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "events.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "events-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "events-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "events.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "events-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "events-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "events.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "events-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "events-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "events.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -9743,6 +10899,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "firehose.ap-northeast-1.api.aws",
@@ -9798,6 +10955,13 @@
             } ]
           },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "firehose.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "firehose.ca-central-1.api.aws",
@@ -9904,6 +11068,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "firehose.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "firehose.sa-east-1.api.aws",
@@ -9977,6 +11147,7 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "fms-fips.ap-northeast-1.amazonaws.com",
@@ -10012,6 +11183,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "fms-fips.ca-central-1.amazonaws.com",
@@ -10205,6 +11377,7 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "fms-fips.sa-east-1.amazonaws.com",
@@ -10351,6 +11524,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -10361,6 +11535,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "fsx-fips.ca-central-1.amazonaws.com",
@@ -10468,6 +11643,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "prod-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -10565,6 +11741,8 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-north-1" : { },
@@ -10580,6 +11758,116 @@
           "us-west-2" : { }
         }
       },
+      "gameliftstreams" : {
+        "defaults" : {
+          "dnsSuffix" : "api.aws",
+          "variants" : [ {
+            "dnsSuffix" : "api.aws",
+            "hostname" : "{service}-fips.{region}.{dnsSuffix}",
+            "tags" : [ "fips" ]
+          } ]
+        },
+        "endpoints" : {
+          "af-south-1" : {
+            "hostname" : "gameliftstreams.af-south-1.api.aws"
+          },
+          "ap-east-1" : {
+            "hostname" : "gameliftstreams.ap-east-1.api.aws"
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "hostname" : "gameliftstreams.ap-northeast-1.api.aws"
+          },
+          "ap-northeast-2" : {
+            "hostname" : "gameliftstreams.ap-northeast-2.api.aws"
+          },
+          "ap-northeast-3" : {
+            "hostname" : "gameliftstreams.ap-northeast-3.api.aws"
+          },
+          "ap-south-1" : {
+            "hostname" : "gameliftstreams.ap-south-1.api.aws"
+          },
+          "ap-south-2" : {
+            "hostname" : "gameliftstreams.ap-south-2.api.aws"
+          },
+          "ap-southeast-1" : {
+            "hostname" : "gameliftstreams.ap-southeast-1.api.aws"
+          },
+          "ap-southeast-2" : {
+            "hostname" : "gameliftstreams.ap-southeast-2.api.aws"
+          },
+          "ap-southeast-3" : {
+            "hostname" : "gameliftstreams.ap-southeast-3.api.aws"
+          },
+          "ap-southeast-4" : {
+            "hostname" : "gameliftstreams.ap-southeast-4.api.aws"
+          },
+          "ap-southeast-5" : {
+            "hostname" : "gameliftstreams.ap-southeast-5.api.aws"
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "hostname" : "gameliftstreams.ap-southeast-7.api.aws"
+          },
+          "ca-central-1" : {
+            "hostname" : "gameliftstreams.ca-central-1.api.aws"
+          },
+          "ca-west-1" : {
+            "hostname" : "gameliftstreams.ca-west-1.api.aws"
+          },
+          "eu-central-1" : {
+            "hostname" : "gameliftstreams.eu-central-1.api.aws"
+          },
+          "eu-central-2" : {
+            "hostname" : "gameliftstreams.eu-central-2.api.aws"
+          },
+          "eu-north-1" : {
+            "hostname" : "gameliftstreams.eu-north-1.api.aws"
+          },
+          "eu-south-1" : {
+            "hostname" : "gameliftstreams.eu-south-1.api.aws"
+          },
+          "eu-south-2" : {
+            "hostname" : "gameliftstreams.eu-south-2.api.aws"
+          },
+          "eu-west-1" : {
+            "hostname" : "gameliftstreams.eu-west-1.api.aws"
+          },
+          "eu-west-2" : {
+            "hostname" : "gameliftstreams.eu-west-2.api.aws"
+          },
+          "eu-west-3" : {
+            "hostname" : "gameliftstreams.eu-west-3.api.aws"
+          },
+          "il-central-1" : {
+            "hostname" : "gameliftstreams.il-central-1.api.aws"
+          },
+          "me-central-1" : {
+            "hostname" : "gameliftstreams.me-central-1.api.aws"
+          },
+          "me-south-1" : {
+            "hostname" : "gameliftstreams.me-south-1.api.aws"
+          },
+          "mx-central-1" : {
+            "hostname" : "gameliftstreams.mx-central-1.api.aws"
+          },
+          "sa-east-1" : {
+            "hostname" : "gameliftstreams.sa-east-1.api.aws"
+          },
+          "us-east-1" : {
+            "hostname" : "gameliftstreams.us-east-1.api.aws"
+          },
+          "us-east-2" : {
+            "hostname" : "gameliftstreams.us-east-2.api.aws"
+          },
+          "us-west-1" : {
+            "hostname" : "gameliftstreams.us-west-1.api.aws"
+          },
+          "us-west-2" : {
+            "hostname" : "gameliftstreams.us-west-2.api.aws"
+          }
+        }
+      },
       "geo" : {
         "endpoints" : {
           "ap-northeast-1" : { },
@@ -10712,6 +12000,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "glue.ap-northeast-1.api.aws",
@@ -10772,6 +12061,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "glue.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "glue.ca-central-1.api.aws",
@@ -10878,6 +12173,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "glue.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "glue.sa-east-1.api.aws",
@@ -11008,6 +12309,7 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "greengrass-fips.ca-central-1.amazonaws.com",
@@ -11015,6 +12317,7 @@
             } ]
           },
           "eu-central-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "fips-ca-central-1" : {
@@ -11068,13 +12371,41 @@
       },
       "groundstation" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-northeast-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -11096,24 +12427,47 @@
             "deprecated" : true,
             "hostname" : "groundstation-fips.us-west-2.amazonaws.com"
           },
-          "me-south-1" : { },
-          "sa-east-1" : { },
+          "me-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "groundstation-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "groundstation-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "groundstation-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "groundstation-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "groundstation-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "groundstation-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           }
         }
@@ -11125,6 +12479,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -11135,8 +12490,21 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
-          "ca-west-1" : { },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "guardduty-fips.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "ca-west-1-fips" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "guardduty-fips.ca-west-1.amazonaws.com"
+          },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
@@ -11148,6 +12516,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -11244,6 +12613,8 @@
         "endpoints" : {
           "ap-south-1" : { },
           "ap-southeast-2" : { },
+          "ca-central-1" : { },
+          "eu-west-1" : { },
           "eu-west-2" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -11260,6 +12631,9 @@
             "variants" : [ {
               "hostname" : "iam-fips.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "iam.global.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "aws-global-fips" : {
@@ -11312,6 +12686,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -11322,6 +12697,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -11335,6 +12711,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -11491,14 +12868,20 @@
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
+          "ca-west-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
           "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
@@ -11530,7 +12913,10 @@
             "deprecated" : true,
             "hostname" : "inspector2-fips.us-west-2.amazonaws.com"
           },
+          "il-central-1" : { },
+          "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -11582,6 +12968,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "internetmonitor.ap-northeast-1.api.aws",
             "variants" : [ {
@@ -11648,6 +13035,7 @@
           "ap-southeast-5" : {
             "hostname" : "internetmonitor.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "internetmonitor.ap-southeast-7.api.aws"
           },
@@ -11812,6 +13200,7 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "iot-fips.ca-central-1.amazonaws.com",
@@ -11820,6 +13209,7 @@
           },
           "eu-central-1" : { },
           "eu-north-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
@@ -12493,6 +13883,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -12503,6 +13894,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "kafka-fips.ca-central-1.amazonaws.com",
@@ -12568,6 +13960,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -12597,17 +13990,34 @@
       },
       "kafkaconnect" : {
         "endpoints" : {
+          "af-south-1" : { },
+          "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
+          "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-3" : { },
+          "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
+          "ca-west-1" : { },
           "eu-central-1" : { },
+          "eu-central-2" : { },
           "eu-north-1" : { },
+          "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "il-central-1" : { },
+          "me-central-1" : { },
+          "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -12693,6 +14103,7 @@
           "ap-east-1" : {
             "hostname" : "kendra-ranking.ap-east-1.api.aws"
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "kendra-ranking.ap-northeast-1.api.aws"
           },
@@ -12723,6 +14134,7 @@
           "ap-southeast-5" : {
             "hostname" : "kendra-ranking.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "kendra-ranking.ap-southeast-7.api.aws"
           },
@@ -12799,6 +14211,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -12809,6 +14222,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -12883,6 +14297,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -12893,6 +14308,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "kinesisanalytics-fips.ca-central-1.amazonaws.com",
@@ -12958,6 +14374,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -12994,11 +14411,14 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-5" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "me-south-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -13040,6 +14460,7 @@
             "deprecated" : true,
             "hostname" : "kms-fips.ap-east-1.amazonaws.com"
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "kms-fips.ap-northeast-1.amazonaws.com",
@@ -13170,6 +14591,7 @@
             "deprecated" : true,
             "hostname" : "kms-fips.ap-southeast-5.amazonaws.com"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "kms-fips.ap-southeast-7.amazonaws.com",
@@ -13446,6 +14868,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "lakeformation.ap-northeast-1.api.aws",
@@ -13506,6 +14929,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "lakeformation.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "lakeformation.ca-central-1.api.aws",
@@ -13612,6 +15041,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "lakeformation.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "lakeformation.sa-east-1.api.aws",
@@ -13682,6 +15117,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "lambda.ap-northeast-1.api.aws",
@@ -13742,6 +15178,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "lambda.ap-southeast-7.api.aws",
@@ -13908,6 +15345,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -13918,6 +15356,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -13959,6 +15398,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -13990,6 +15430,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -14000,6 +15441,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -14041,6 +15483,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -14072,6 +15515,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -14081,6 +15525,8 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -14122,6 +15568,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -14156,6 +15603,7 @@
           "ap-south-1" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
+          "ap-southeast-3" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-north-1" : { },
@@ -14181,6 +15629,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "logs.ap-northeast-1.api.aws",
@@ -14235,18 +15684,9 @@
               "tags" : [ "dualstack" ]
             } ]
           },
-          "ap-southeast-5" : {
-            "variants" : [ {
-              "hostname" : "logs.ap-southeast-5.api.aws",
-              "tags" : [ "dualstack" ]
-            } ]
-          },
-          "ap-southeast-7" : {
-            "variants" : [ {
-              "hostname" : "logs.ap-southeast-7.api.aws",
-              "tags" : [ "dualstack" ]
-            } ]
-          },
+          "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "logs-fips.ca-central-1.amazonaws.com",
@@ -14373,12 +15813,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
-          "mx-central-1" : {
-            "variants" : [ {
-              "hostname" : "logs.mx-central-1.api.aws",
-              "tags" : [ "dualstack" ]
-            } ]
-          },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "logs.sa-east-1.api.aws",
@@ -14430,30 +15865,6 @@
           "us-east-1" : { }
         }
       },
-      "lookoutmetrics" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-2" : { }
-        }
-      },
-      "lookoutvision" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-2" : { }
-        }
-      },
       "m2" : {
         "endpoints" : {
           "af-south-1" : { },
@@ -15096,18 +16507,78 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-4" : { },
-          "ca-central-1" : { },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "mediapackagev2-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
           "eu-central-1" : { },
           "eu-north-1" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "mediapackagev2-fips.ca-central-1.amazonaws.com"
+          },
+          "fips-us-east-1" : {
+            "credentialScope" : {
+              "region" : "us-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "mediapackagev2-fips.us-east-1.amazonaws.com"
+          },
+          "fips-us-east-2" : {
+            "credentialScope" : {
+              "region" : "us-east-2"
+            },
+            "deprecated" : true,
+            "hostname" : "mediapackagev2-fips.us-east-2.amazonaws.com"
+          },
+          "fips-us-west-1" : {
+            "credentialScope" : {
+              "region" : "us-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "mediapackagev2-fips.us-west-1.amazonaws.com"
+          },
+          "fips-us-west-2" : {
+            "credentialScope" : {
+              "region" : "us-west-2"
+            },
+            "deprecated" : true,
+            "hostname" : "mediapackagev2-fips.us-west-2.amazonaws.com"
+          },
           "me-central-1" : { },
           "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "mediapackagev2-fips.us-east-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-east-2" : {
+            "variants" : [ {
+              "hostname" : "mediapackagev2-fips.us-east-2.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-west-1" : {
+            "variants" : [ {
+              "hostname" : "mediapackagev2-fips.us-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-west-2" : {
+            "variants" : [ {
+              "hostname" : "mediapackagev2-fips.us-west-2.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "mediastore" : {
@@ -15229,40 +16700,181 @@
           }
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-2" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "metrics.sagemaker" : {
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -15273,6 +16885,8 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "metrics-fips.sagemaker.ca-central-1.amazonaws.com",
@@ -15310,6 +16924,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -15389,6 +17004,8 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
@@ -15550,6 +17167,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -15560,6 +17178,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -15634,6 +17253,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -15644,6 +17264,8 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -15685,6 +17307,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -15837,6 +17460,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -15847,6 +17471,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "network-firewall-fips.ca-central-1.amazonaws.com",
@@ -15900,6 +17525,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -15937,6 +17563,12 @@
             "variants" : [ {
               "hostname" : "networkmanager-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "networkmanager-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "networkmanager.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "fips-aws-global" : {
@@ -15966,6 +17598,7 @@
           "ap-east-1" : {
             "hostname" : "notifications.ap-east-1.api.aws"
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "notifications.ap-northeast-1.api.aws"
           },
@@ -15996,6 +17629,7 @@
           "ap-southeast-5" : {
             "hostname" : "notifications.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "notifications.ap-southeast-7.api.aws"
           },
@@ -16074,6 +17708,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -16084,6 +17719,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -16174,6 +17810,13 @@
             },
             "hostname" : "oidc.ap-southeast-4.amazonaws.com"
           },
+          "ap-southeast-5" : {
+            "credentialScope" : {
+              "region" : "ap-southeast-5"
+            },
+            "hostname" : "oidc.ap-southeast-5.amazonaws.com"
+          },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -16252,6 +17895,7 @@
             },
             "hostname" : "oidc.me-south-1.amazonaws.com"
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "credentialScope" : {
               "region" : "sa-east-1"
@@ -16286,6 +17930,7 @@
       },
       "omics" : {
         "endpoints" : {
+          "ap-northeast-2" : { },
           "ap-southeast-1" : {
             "credentialScope" : {
               "region" : "ap-southeast-1"
@@ -16352,32 +17997,6 @@
           }
         }
       },
-      "opsworks" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
-        }
-      },
-      "opsworks-cm" : {
-        "endpoints" : {
-          "ap-southeast-2" : { },
-          "eu-west-1" : { },
-          "us-east-1" : { }
-        }
-      },
       "organizations" : {
         "endpoints" : {
           "aws-global" : {
@@ -16411,6 +18030,7 @@
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-north-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "sa-east-1" : { },
@@ -16482,6 +18102,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -16578,6 +18199,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "protocols" : [ "https" ],
             "variants" : [ {
@@ -16648,6 +18270,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "protocols" : [ "https" ],
             "variants" : [ {
@@ -17033,8 +18656,20 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "polly.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
+              "hostname" : "polly-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "polly-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "polly.ca-central-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -17045,12 +18680,19 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-central-2" : { },
           "eu-north-1" : {
             "variants" : [ {
               "hostname" : "polly.eu-north-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
           },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "polly.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "eu-west-1" : {
             "variants" : [ {
               "hostname" : "polly.eu-west-1.api.aws",
@@ -17069,6 +18711,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "polly-fips.ca-central-1.amazonaws.com"
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -17227,6 +18876,13 @@
             },
             "hostname" : "portal.sso.ap-southeast-4.amazonaws.com"
           },
+          "ap-southeast-5" : {
+            "credentialScope" : {
+              "region" : "ap-southeast-5"
+            },
+            "hostname" : "portal.sso.ap-southeast-5.amazonaws.com"
+          },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -17305,6 +18961,7 @@
             },
             "hostname" : "portal.sso.me-south-1.amazonaws.com"
           },
+          "mx-central-1" : { },
           "sa-east-1" : {
             "credentialScope" : {
               "region" : "sa-east-1"
@@ -17337,13 +18994,6 @@
           }
         }
       },
-      "private-networks" : {
-        "endpoints" : {
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-2" : { }
-        }
-      },
       "profile" : {
         "endpoints" : {
           "af-south-1" : { },
@@ -17425,6 +19075,7 @@
           "ap-east-1" : {
             "hostname" : "qbusiness.ap-east-1.api.aws"
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "qbusiness.ap-northeast-1.api.aws"
           },
@@ -17455,6 +19106,7 @@
           "ap-southeast-5" : {
             "hostname" : "qbusiness.ap-southeast-5.api.aws"
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "hostname" : "qbusiness.ap-southeast-7.api.aws"
           },
@@ -17517,67 +19169,16 @@
           }
         }
       },
-      "qldb" : {
+      "query.timestream" : {
         "endpoints" : {
           "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-southeast-1" : { },
+          "ap-south-1" : { },
           "ap-southeast-2" : { },
-          "ca-central-1" : {
-            "variants" : [ {
-              "hostname" : "qldb-fips.ca-central-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
           "eu-central-1" : { },
           "eu-west-1" : { },
-          "eu-west-2" : { },
-          "fips-ca-central-1" : {
-            "credentialScope" : {
-              "region" : "ca-central-1"
-            },
-            "deprecated" : true,
-            "hostname" : "qldb-fips.ca-central-1.amazonaws.com"
-          },
-          "fips-us-east-1" : {
-            "credentialScope" : {
-              "region" : "us-east-1"
-            },
-            "deprecated" : true,
-            "hostname" : "qldb-fips.us-east-1.amazonaws.com"
-          },
-          "fips-us-east-2" : {
-            "credentialScope" : {
-              "region" : "us-east-2"
-            },
-            "deprecated" : true,
-            "hostname" : "qldb-fips.us-east-2.amazonaws.com"
-          },
-          "fips-us-west-2" : {
-            "credentialScope" : {
-              "region" : "us-west-2"
-            },
-            "deprecated" : true,
-            "hostname" : "qldb-fips.us-west-2.amazonaws.com"
-          },
-          "us-east-1" : {
-            "variants" : [ {
-              "hostname" : "qldb-fips.us-east-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-east-2" : {
-            "variants" : [ {
-              "hostname" : "qldb-fips.us-east-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-west-2" : {
-            "variants" : [ {
-              "hostname" : "qldb-fips.us-west-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          }
+          "us-east-1" : { },
+          "us-east-2" : { },
+          "us-west-2" : { }
         }
       },
       "quicksight" : {
@@ -17589,15 +19190,17 @@
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
-          "api" : { },
           "ca-central-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
           "eu-south-1" : { },
+          "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "il-central-1" : { },
+          "me-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -17606,39 +19209,135 @@
       },
       "ram" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "ca-west-1" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.ca-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -17681,33 +19380,73 @@
             "deprecated" : true,
             "hostname" : "ram-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ram-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           }
         }
@@ -17726,6 +19465,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "rbin.ap-northeast-1.api.aws",
@@ -17786,6 +19526,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -17980,6 +19721,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -17990,6 +19732,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -18257,6 +20000,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -18267,6 +20011,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -18363,13 +20108,19 @@
       },
       "redshift-serverless" : {
         "endpoints" : {
+          "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
+          "ap-northeast-3" : { },
           "ap-south-1" : { },
+          "ap-south-2" : { },
           "ap-southeast-1" : { },
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "redshift-serverless-fips.ca-central-1.amazonaws.com",
@@ -18379,6 +20130,7 @@
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
+          "eu-south-1" : { },
           "eu-south-2" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
@@ -18420,6 +20172,7 @@
           },
           "il-central-1" : { },
           "me-central-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -18449,15 +20202,46 @@
       },
       "rekognition" : {
         "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "rekognition.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "rekognition.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "rekognition-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "ca-central-1-fips" : {
@@ -18467,11 +20251,36 @@
             "deprecated" : true,
             "hostname" : "rekognition-fips.ca-central-1.amazonaws.com"
           },
-          "eu-central-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "il-central-1" : { },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "rekognition.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "rekognition.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "rekognition.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "rekognition-fips.ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -18561,6 +20370,12 @@
             "variants" : [ {
               "hostname" : "rekognition-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-1-fips" : {
@@ -18574,6 +20389,12 @@
             "variants" : [ {
               "hostname" : "rekognition-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2-fips" : {
@@ -18587,6 +20408,12 @@
             "variants" : [ {
               "hostname" : "rekognition-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1-fips" : {
@@ -18600,6 +20427,12 @@
             "variants" : [ {
               "hostname" : "rekognition-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2-fips" : {
@@ -18739,6 +20572,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -18748,6 +20582,8 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "resource-explorer-2-fips.ca-central-1.amazonaws.com",
@@ -18819,6 +20655,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -18862,6 +20699,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -18872,6 +20710,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -18942,21 +20781,11 @@
           }
         }
       },
-      "robomaker" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-southeast-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-2" : { }
-        }
-      },
       "rolesanywhere" : {
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -18967,6 +20796,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -19075,28 +20905,300 @@
           "us-east-1" : { }
         }
       },
+      "route53profiles" : {
+        "endpoints" : {
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : { },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-east-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-west-2" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
       "route53resolver" : {
         "defaults" : {
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "route53resolver-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "ca-central-1-fips" : {
@@ -19110,6 +21212,12 @@
             "variants" : [ {
               "hostname" : "route53resolver-fips.ca-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "ca-west-1-fips" : {
@@ -19119,23 +21227,94 @@
             "deprecated" : true,
             "hostname" : "route53resolver-fips.ca-west-1.amazonaws.com"
           },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "route53resolver-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-1-fips" : {
@@ -19149,6 +21328,12 @@
             "variants" : [ {
               "hostname" : "route53resolver-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2-fips" : {
@@ -19162,6 +21347,12 @@
             "variants" : [ {
               "hostname" : "route53resolver-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1-fips" : {
@@ -19175,6 +21366,12 @@
             "variants" : [ {
               "hostname" : "route53resolver-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2-fips" : {
@@ -19189,6 +21386,7 @@
       "rum" : {
         "endpoints" : {
           "af-south-1" : { },
+          "ap-east-1" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -19198,7 +21396,10 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
+          "ca-west-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
@@ -19207,8 +21408,10 @@
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -19286,6 +21489,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -19295,6 +21499,8 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -19308,6 +21514,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -19390,6 +21597,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "hostname" : "s3.ap-northeast-1.amazonaws.com",
             "signatureVersions" : [ "s3", "s3v4" ],
@@ -19456,6 +21664,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "s3.dualstack.ap-southeast-7.amazonaws.com",
@@ -20277,6 +22486,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -20286,7 +22496,11 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
+          "ca-west-1" : { },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
@@ -20295,8 +22509,10 @@
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -20363,6 +22579,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -20413,6 +22630,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "tags" : [ "dualstack" ]
@@ -20571,6 +22789,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "securityhub.ap-northeast-1.api.aws",
@@ -20631,6 +22850,13 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "securityhub.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "securityhub.ca-central-1.api.aws",
@@ -20737,6 +22963,12 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "securityhub.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "sa-east-1" : {
             "variants" : [ {
               "hostname" : "securityhub.sa-east-1.api.aws",
@@ -20828,24 +23060,36 @@
             "variants" : [ {
               "hostname" : "securitylake-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "securitylake-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "securitylake-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "securitylake-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           }
         }
@@ -21153,6 +23397,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "servicediscovery.ap-northeast-1.api.aws",
@@ -21213,6 +23458,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "servicediscovery.ap-southeast-7.api.aws",
@@ -21420,6 +23666,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -21430,6 +23677,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -21452,57 +23700,6 @@
           "us-west-2" : { }
         }
       },
-      "session.qldb" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "fips-us-east-1" : {
-            "credentialScope" : {
-              "region" : "us-east-1"
-            },
-            "deprecated" : true,
-            "hostname" : "session.qldb-fips.us-east-1.amazonaws.com"
-          },
-          "fips-us-east-2" : {
-            "credentialScope" : {
-              "region" : "us-east-2"
-            },
-            "deprecated" : true,
-            "hostname" : "session.qldb-fips.us-east-2.amazonaws.com"
-          },
-          "fips-us-west-2" : {
-            "credentialScope" : {
-              "region" : "us-west-2"
-            },
-            "deprecated" : true,
-            "hostname" : "session.qldb-fips.us-west-2.amazonaws.com"
-          },
-          "us-east-1" : {
-            "variants" : [ {
-              "hostname" : "session.qldb-fips.us-east-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-east-2" : {
-            "variants" : [ {
-              "hostname" : "session.qldb-fips.us-east-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          },
-          "us-west-2" : {
-            "variants" : [ {
-              "hostname" : "session.qldb-fips.us-west-2.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          }
-        }
-      },
       "shield" : {
         "defaults" : {
           "protocols" : [ "https" ],
@@ -21758,50 +23955,140 @@
           "us-west-2" : { }
         }
       },
-      "sms" : {
+      "sms-voice" : {
         "endpoints" : {
-          "fips-us-west-2" : {
-            "credentialScope" : {
-              "region" : "us-west-2"
-            },
-            "deprecated" : true,
-            "hostname" : "sms-fips.us-west-2.amazonaws.com"
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
           },
-          "us-west-2" : {
+          "ap-northeast-1" : {
             "variants" : [ {
-              "hostname" : "sms-fips.us-west-2.amazonaws.com",
-              "tags" : [ "fips" ]
+              "hostname" : "sms-voice.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
-          }
-        }
-      },
-      "sms-voice" : {
-        "endpoints" : {
-          "af-south-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice-fips.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "ca-west-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -21809,6 +24096,13 @@
             "deprecated" : true,
             "hostname" : "sms-voice-fips.ca-central-1.amazonaws.com"
           },
+          "fips-ca-west-1" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sms-voice-fips.ca-west-1.amazonaws.com"
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -21837,32 +24131,77 @@
             "deprecated" : true,
             "hostname" : "sms-voice-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : { },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "sms-voice.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -22313,34 +24652,149 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
-          "ca-central-1" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "sns.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "sns.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "sns.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-west-1" : {
             "variants" : [ {
               "hostname" : "sns-fips.ca-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sns.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "sns.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-west-1" : {
             "credentialScope" : {
               "region" : "ca-west-1"
@@ -22376,33 +24830,70 @@
             "deprecated" : true,
             "hostname" : "sns-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "sns.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "sns.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "sns.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "sns.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "sns.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "sns-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sns.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "sns-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sns.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "sns-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sns.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "sns-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sns.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -22413,29 +24904,166 @@
           "sslCommonName" : "{region}.queue.{dnsSuffix}"
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-northeast-3" : { },
-          "ap-south-1" : { },
-          "ap-south-2" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ap-southeast-3" : { },
-          "ap-southeast-4" : { },
-          "ap-southeast-5" : { },
-          "ap-southeast-7" : { },
-          "ca-central-1" : { },
-          "ca-west-1" : { },
-          "eu-central-1" : { },
-          "eu-central-2" : { },
-          "eu-north-1" : { },
-          "eu-south-1" : { },
-          "eu-south-2" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-3" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-northeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-3" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-4" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-4.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-5" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-5.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : {
+            "variants" : [ {
+              "hostname" : "sqs.ap-southeast-7.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "sqs-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "sqs-fips.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.ca-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-central-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-south-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-south-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "sqs.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs-fips.ca-central-1.amazonaws.com"
+          },
+          "fips-ca-west-1" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs-fips.ca-west-1.amazonaws.com"
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -22464,34 +25092,71 @@
             "deprecated" : true,
             "hostname" : "sqs-fips.us-west-2.amazonaws.com"
           },
-          "il-central-1" : { },
-          "me-central-1" : { },
-          "me-south-1" : { },
-          "mx-central-1" : { },
-          "sa-east-1" : { },
+          "il-central-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.il-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-central-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.me-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "mx-central-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.mx-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "sslCommonName" : "queue.{dnsSuffix}",
             "variants" : [ {
               "hostname" : "sqs-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "sqs-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "sqs-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "sqs-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sqs.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -22500,6 +25165,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -22510,6 +25176,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -22674,22 +25341,78 @@
       },
       "ssm-incidents" : {
         "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "ssm-incidents-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ssm-incidents-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "ssm-incidents.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -22725,29 +25448,58 @@
             "deprecated" : true,
             "hostname" : "ssm-incidents-fips.us-west-2.amazonaws.com"
           },
-          "sa-east-1" : { },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "ssm-incidents.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "ssm-incidents-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ssm-incidents-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "ssm-incidents.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "ssm-incidents-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ssm-incidents-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "ssm-incidents.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "ssm-incidents-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ssm-incidents-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "ssm-incidents.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "ssm-incidents-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ssm-incidents-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "ssm-incidents.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -23082,6 +25834,8 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
           "eu-central-1" : { },
@@ -23095,6 +25849,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : { },
           "us-east-2" : { },
@@ -23106,6 +25861,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23116,9 +25872,20 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
-          "ca-central-1" : { },
-          "ca-west-1" : { },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "states-fips.ca-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "ca-west-1" : {
+            "variants" : [ {
+              "hostname" : "states-fips.ca-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
           "eu-central-1" : { },
           "eu-central-2" : { },
           "eu-north-1" : { },
@@ -23127,6 +25894,20 @@
           "eu-west-1" : { },
           "eu-west-2" : { },
           "eu-west-3" : { },
+          "fips-ca-central-1" : {
+            "credentialScope" : {
+              "region" : "ca-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "states-fips.ca-central-1.amazonaws.com"
+          },
+          "fips-ca-west-1" : {
+            "credentialScope" : {
+              "region" : "ca-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "states-fips.ca-west-1.amazonaws.com"
+          },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -23190,6 +25971,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23200,6 +25982,8 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "storagegateway-fips.ca-central-1.amazonaws.com",
@@ -23237,6 +26021,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -23302,6 +26087,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23312,6 +26098,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -23345,6 +26132,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23355,6 +26143,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "aws-global" : {
             "credentialScope" : {
@@ -23454,6 +26243,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23464,6 +26254,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
@@ -23572,6 +26363,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "variants" : [ {
               "hostname" : "synthetics.ap-northeast-1.api.aws",
@@ -23632,6 +26424,7 @@
               "tags" : [ "dualstack" ]
             } ]
           },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : {
             "variants" : [ {
               "hostname" : "synthetics.ap-southeast-7.api.aws",
@@ -23643,6 +26436,9 @@
               "hostname" : "synthetics-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.ca-central-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23652,6 +26448,9 @@
               "hostname" : "synthetics-fips.ca-west-1.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.ca-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.ca-west-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23781,6 +26580,9 @@
               "hostname" : "synthetics-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.us-east-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23790,6 +26592,9 @@
               "hostname" : "synthetics-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.us-east-2.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23799,6 +26604,9 @@
               "hostname" : "synthetics-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.us-west-1.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23808,6 +26616,9 @@
               "hostname" : "synthetics-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
             }, {
+              "hostname" : "synthetics-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "synthetics.us-west-2.api.aws",
               "tags" : [ "dualstack" ]
             } ]
@@ -23818,6 +26629,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -23828,6 +26640,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -24049,24 +26862,90 @@
           } ]
         },
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "transcribe.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "transcribe.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "transcribe.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -24102,51 +26981,136 @@
             "deprecated" : true,
             "hostname" : "fips.transcribe.us-west-2.amazonaws.com"
           },
-          "me-south-1" : { },
-          "sa-east-1" : { },
+          "me-south-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.me-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "transcribe.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
       },
       "transcribestreaming" : {
         "endpoints" : {
-          "af-south-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
+          "af-south-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.af-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.ca-central-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.ca-central-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -24175,23 +27139,46 @@
             "deprecated" : true,
             "hostname" : "transcribestreaming-fips.us-west-2.amazonaws.com"
           },
-          "sa-east-1" : { },
+          "sa-east-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.sa-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2" : {
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2" : {
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -24200,6 +27187,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -24210,6 +27198,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "transfer-fips.ca-central-1.amazonaws.com",
@@ -24275,6 +27264,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -24307,22 +27297,88 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "ap-east-1" : { },
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-north-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
+          "ap-east-1" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-1" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-northeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-northeast-2" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-northeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-south-1" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-south-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-1" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-southeast-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ap-southeast-2" : {
+            "variants" : [ {
+              "hostname" : "translate.ap-southeast-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "ca-central-1" : {
+            "variants" : [ {
+              "hostname" : "translate.ca-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-central-1" : {
+            "variants" : [ {
+              "hostname" : "translate.eu-central-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-north-1" : {
+            "variants" : [ {
+              "hostname" : "translate.eu-north-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-1" : {
+            "variants" : [ {
+              "hostname" : "translate.eu-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-2" : {
+            "variants" : [ {
+              "hostname" : "translate.eu-west-2.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "eu-west-3" : {
+            "variants" : [ {
+              "hostname" : "translate.eu-west-3.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-east-1" : {
             "variants" : [ {
               "hostname" : "translate-fips.us-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "translate-fips.us-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "translate.us-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-1-fips" : {
@@ -24336,6 +27392,12 @@
             "variants" : [ {
               "hostname" : "translate-fips.us-east-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "translate-fips.us-east-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "translate.us-east-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-east-2-fips" : {
@@ -24349,6 +27411,12 @@
             "variants" : [ {
               "hostname" : "translate-fips.us-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "translate-fips.us-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "translate.us-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-1-fips" : {
@@ -24362,6 +27430,12 @@
             "variants" : [ {
               "hostname" : "translate-fips.us-west-2.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "translate-fips.us-west-2.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "translate.us-west-2.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-west-2-fips" : {
@@ -24375,6 +27449,9 @@
       },
       "trustedadvisor" : {
         "endpoints" : {
+          "ap-northeast-2" : { },
+          "ap-southeast-2" : { },
+          "eu-west-1" : { },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -24392,13 +27469,17 @@
               "region" : "us-west-2"
             },
             "hostname" : "trustedadvisor-fips.us-west-2.api.aws"
-          }
+          },
+          "us-east-1" : { },
+          "us-east-2" : { },
+          "us-west-2" : { }
         }
       },
       "verifiedpermissions" : {
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -24408,6 +27489,9 @@
           "ap-southeast-2" : { },
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
+          "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
+          "ap-southeast-7" : { },
           "ca-central-1" : {
             "variants" : [ {
               "hostname" : "verifiedpermissions-fips.ca-central-1.amazonaws.com",
@@ -24473,6 +27557,7 @@
           "il-central-1" : { },
           "me-central-1" : { },
           "me-south-1" : { },
+          "mx-central-1" : { },
           "sa-east-1" : { },
           "us-east-1" : {
             "variants" : [ {
@@ -25172,6 +28257,7 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "ap-east-2" : { },
           "ap-northeast-1" : {
             "credentialScope" : {
               "region" : "ap-northeast-1"
@@ -25272,6 +28358,16 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "ap-southeast-7" : {
+            "credentialScope" : {
+              "region" : "ap-southeast-7"
+            },
+            "hostname" : "wafv2.ap-southeast-7.amazonaws.com",
+            "variants" : [ {
+              "hostname" : "wafv2-fips.ap-southeast-7.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
           "ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -25456,6 +28552,13 @@
             "deprecated" : true,
             "hostname" : "wafv2-fips.ap-southeast-5.amazonaws.com"
           },
+          "fips-ap-southeast-7" : {
+            "credentialScope" : {
+              "region" : "ap-southeast-7"
+            },
+            "deprecated" : true,
+            "hostname" : "wafv2-fips.ap-southeast-7.amazonaws.com"
+          },
           "fips-ca-central-1" : {
             "credentialScope" : {
               "region" : "ca-central-1"
@@ -25547,6 +28650,13 @@
             "deprecated" : true,
             "hostname" : "wafv2-fips.me-south-1.amazonaws.com"
           },
+          "fips-mx-central-1" : {
+            "credentialScope" : {
+              "region" : "mx-central-1"
+            },
+            "deprecated" : true,
+            "hostname" : "wafv2-fips.mx-central-1.amazonaws.com"
+          },
           "fips-sa-east-1" : {
             "credentialScope" : {
               "region" : "sa-east-1"
@@ -25612,6 +28722,16 @@
               "tags" : [ "fips" ]
             } ]
           },
+          "mx-central-1" : {
+            "credentialScope" : {
+              "region" : "mx-central-1"
+            },
+            "hostname" : "wafv2.mx-central-1.amazonaws.com",
+            "variants" : [ {
+              "hostname" : "wafv2-fips.mx-central-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
           "sa-east-1" : {
             "credentialScope" : {
               "region" : "sa-east-1"
@@ -25785,6 +28905,7 @@
           "eu-central-1" : { },
           "eu-west-1" : { },
           "eu-west-2" : { },
+          "eu-west-3" : { },
           "fips-us-east-1" : {
             "credentialScope" : {
               "region" : "us-east-1"
@@ -25857,6 +28978,7 @@
         "endpoints" : {
           "af-south-1" : { },
           "ap-east-1" : { },
+          "ap-east-2" : { },
           "ap-northeast-1" : { },
           "ap-northeast-2" : { },
           "ap-northeast-3" : { },
@@ -25867,6 +28989,7 @@
           "ap-southeast-3" : { },
           "ap-southeast-4" : { },
           "ap-southeast-5" : { },
+          "ap-southeast-6" : { },
           "ap-southeast-7" : { },
           "ca-central-1" : { },
           "ca-west-1" : { },
@@ -25972,8 +29095,18 @@
     "services" : {
       "access-analyzer" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "account" : {
@@ -26109,8 +29242,18 @@
       },
       "applicationinsights" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "appmesh" : {
@@ -26131,8 +29274,18 @@
       },
       "appsync" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "appsync.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "arc-zonal-shift" : {
@@ -26598,7 +29751,11 @@
               "region" : "cn-northwest-1"
             },
             "hostname" : "entitlement-marketplace.cn-northwest-1.amazonaws.com.cn",
-            "protocols" : [ "https" ]
+            "protocols" : [ "https" ],
+            "variants" : [ {
+              "hostname" : "entitlement-marketplace.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
           }
         }
       },
@@ -26620,8 +29777,18 @@
       },
       "events" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "events.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "events.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "firehose" : {
@@ -26661,6 +29828,24 @@
           "cn-northwest-1" : { }
         }
       },
+      "gameliftstreams" : {
+        "defaults" : {
+          "dnsSuffix" : "api.amazonwebservices.com.cn",
+          "variants" : [ {
+            "dnsSuffix" : "api.amazonwebservices.com.cn",
+            "hostname" : "{service}-fips.{region}.{dnsSuffix}",
+            "tags" : [ "fips" ]
+          } ]
+        },
+        "endpoints" : {
+          "cn-north-1" : {
+            "hostname" : "gameliftstreams.cn-north-1.api.amazonwebservices.com.cn"
+          },
+          "cn-northwest-1" : {
+            "hostname" : "gameliftstreams.cn-northwest-1.api.amazonwebservices.com.cn"
+          }
+        }
+      },
       "glacier" : {
         "defaults" : {
           "protocols" : [ "http", "https" ]
@@ -26823,6 +30008,12 @@
           "cn-northwest-1" : { }
         }
       },
+      "kafkaconnect" : {
+        "endpoints" : {
+          "cn-north-1" : { },
+          "cn-northwest-1" : { }
+        }
+      },
       "kendra-ranking" : {
         "defaults" : {
           "dnsSuffix" : "api.amazonwebservices.com.cn",
@@ -26910,8 +30101,18 @@
       },
       "logs" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "logs.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "logs.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "mediaconvert" : {
@@ -26930,6 +30131,16 @@
           "cn-northwest-1" : { }
         }
       },
+      "metering.marketplace" : {
+        "defaults" : {
+          "credentialScope" : {
+            "service" : "aws-marketplace"
+          }
+        },
+        "endpoints" : {
+          "cn-northwest-1" : { }
+        }
+      },
       "metrics.sagemaker" : {
         "endpoints" : {
           "cn-north-1" : { },
@@ -27105,8 +30316,16 @@
       },
       "ram" : {
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "rbin" : {
@@ -27167,13 +30386,29 @@
         "isRegionalized" : false,
         "partitionEndpoint" : "aws-cn-global"
       },
+      "route53profiles" : {
+        "endpoints" : {
+          "cn-north-1" : { },
+          "cn-northwest-1" : { }
+        }
+      },
       "route53resolver" : {
         "defaults" : {
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "route53resolver.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "runtime.sagemaker" : {
@@ -27259,6 +30494,12 @@
         },
         "isRegionalized" : true
       },
+      "scheduler" : {
+        "endpoints" : {
+          "cn-north-1" : { },
+          "cn-northwest-1" : { }
+        }
+      },
       "schemas" : {
         "endpoints" : {
           "cn-north-1" : { },
@@ -27347,11 +30588,6 @@
           }
         }
       },
-      "sms" : {
-        "endpoints" : {
-          "cn-north-1" : { }
-        }
-      },
       "snowball" : {
         "endpoints" : {
           "cn-north-1" : {
@@ -27387,8 +30623,18 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "sns.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "sns.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "sqs" : {
@@ -27397,8 +30643,18 @@
           "sslCommonName" : "{region}.queue.{dnsSuffix}"
         },
         "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "ssm" : {
@@ -27501,23 +30757,47 @@
             "credentialScope" : {
               "region" : "cn-north-1"
             },
-            "hostname" : "cn.transcribe.cn-north-1.amazonaws.com.cn"
+            "hostname" : "cn.transcribe.cn-north-1.amazonaws.com.cn",
+            "variants" : [ {
+              "hostname" : "transcribe.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
           },
           "cn-northwest-1" : {
             "credentialScope" : {
               "region" : "cn-northwest-1"
             },
-            "hostname" : "cn.transcribe.cn-northwest-1.amazonaws.com.cn"
+            "hostname" : "cn.transcribe.cn-northwest-1.amazonaws.com.cn",
+            "variants" : [ {
+              "hostname" : "transcribe.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
           }
         }
       },
       "transcribestreaming" : {
         "endpoints" : {
+          "cn-north-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.cn-north-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "cn-northwest-1" : {
+            "variants" : [ {
+              "hostname" : "transcribestreaming.cn-northwest-1.api.amazonwebservices.com.cn",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
+      "transfer" : {
+        "endpoints" : {
           "cn-north-1" : { },
           "cn-northwest-1" : { }
         }
       },
-      "transfer" : {
+      "verifiedpermissions" : {
         "endpoints" : {
           "cn-north-1" : { },
           "cn-northwest-1" : { }
@@ -27653,6 +30933,12 @@
             "variants" : [ {
               "hostname" : "access-analyzer.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            }, {
+              "hostname" : "access-analyzer.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -27670,6 +30956,12 @@
             "variants" : [ {
               "hostname" : "access-analyzer.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "access-analyzer.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            }, {
+              "hostname" : "access-analyzer.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -27755,6 +31047,12 @@
             "variants" : [ {
               "hostname" : "api.detective-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -27768,6 +31066,12 @@
             "variants" : [ {
               "hostname" : "api.detective-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "detective-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "detective.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -27877,7 +31181,19 @@
           } ]
         },
         "endpoints" : {
-          "us-gov-east-1" : { },
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "api-fips.sagemaker.us-gov-east-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-gov-east-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-gov-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "api-fips.sagemaker.us-gov-east-1.amazonaws.com"
+          },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "api-fips.sagemaker.us-gov-west-1.amazonaws.com",
@@ -28068,17 +31384,43 @@
       },
       "applicationinsights" : {
         "endpoints" : {
-          "us-gov-east-1" : {
+          "fips-us-gov-east-1" : {
             "credentialScope" : {
               "region" : "us-gov-east-1"
             },
-            "hostname" : "applicationinsights.us-gov-east-1.amazonaws.com"
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-gov-east-1.amazonaws.com"
           },
-          "us-gov-west-1" : {
+          "fips-us-gov-west-1" : {
             "credentialScope" : {
               "region" : "us-gov-west-1"
             },
-            "hostname" : "applicationinsights.us-gov-west-1.amazonaws.com"
+            "deprecated" : true,
+            "hostname" : "applicationinsights-fips.us-gov-west-1.amazonaws.com"
+          },
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-gov-east-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-gov-west-1" : {
+            "variants" : [ {
+              "hostname" : "applicationinsights-fips.us-gov-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            }, {
+              "hostname" : "applicationinsights-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "applicationinsights.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
           }
         }
       },
@@ -28125,6 +31467,12 @@
           }
         }
       },
+      "aps" : {
+        "endpoints" : {
+          "us-gov-east-1" : { },
+          "us-gov-west-1" : { }
+        }
+      },
       "arc-zonal-shift" : {
         "endpoints" : {
           "us-gov-east-1" : { },
@@ -28658,6 +32006,12 @@
             "deprecated" : true,
             "hostname" : "cognito-identity-fips.us-gov-west-1.amazonaws.com"
           },
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "cognito-identity.us-gov-east-1.amazonaws.com",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "cognito-identity-fips.us-gov-west-1.amazonaws.com",
@@ -28681,6 +32035,12 @@
             "deprecated" : true,
             "hostname" : "cognito-idp-fips.us-gov-west-1.amazonaws.com"
           },
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "cognito-idp.us-gov-east-1.amazonaws.com",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "cognito-idp-fips.us-gov-west-1.amazonaws.com",
@@ -28711,6 +32071,12 @@
             "variants" : [ {
               "hostname" : "comprehend-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "comprehend-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "comprehend.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -29044,8 +32410,14 @@
         "endpoints" : {
           "us-gov-east-1" : {
             "variants" : [ {
+              "hostname" : "dlm-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "dlm.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "dlm.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -29057,8 +32429,14 @@
           },
           "us-gov-west-1" : {
             "variants" : [ {
+              "hostname" : "dlm-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
               "hostname" : "dlm.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "dlm.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -29203,7 +32581,7 @@
         "endpoints" : {
           "us-gov-east-1" : {
             "variants" : [ {
-              "hostname" : "dynamodb.us-gov-east-1.amazonaws.com",
+              "hostname" : "dynamodb-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
             } ]
           },
@@ -29212,11 +32590,11 @@
               "region" : "us-gov-east-1"
             },
             "deprecated" : true,
-            "hostname" : "dynamodb.us-gov-east-1.amazonaws.com"
+            "hostname" : "dynamodb-fips.us-gov-east-1.amazonaws.com"
           },
           "us-gov-west-1" : {
             "variants" : [ {
-              "hostname" : "dynamodb.us-gov-west-1.amazonaws.com",
+              "hostname" : "dynamodb-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
             } ]
           },
@@ -29225,7 +32603,7 @@
               "region" : "us-gov-west-1"
             },
             "deprecated" : true,
-            "hostname" : "dynamodb.us-gov-west-1.amazonaws.com"
+            "hostname" : "dynamodb-fips.us-gov-west-1.amazonaws.com"
           }
         }
       },
@@ -29825,6 +33203,24 @@
           }
         }
       },
+      "gameliftstreams" : {
+        "defaults" : {
+          "dnsSuffix" : "api.aws",
+          "variants" : [ {
+            "dnsSuffix" : "api.aws",
+            "hostname" : "{service}-fips.{region}.{dnsSuffix}",
+            "tags" : [ "fips" ]
+          } ]
+        },
+        "endpoints" : {
+          "us-gov-east-1" : {
+            "hostname" : "gameliftstreams.us-gov-east-1.api.aws"
+          },
+          "us-gov-west-1" : {
+            "hostname" : "gameliftstreams.us-gov-west-1.api.aws"
+          }
+        }
+      },
       "geo" : {
         "endpoints" : {
           "fips-us-gov-west-1" : {
@@ -30713,12 +34109,18 @@
             "variants" : [ {
               "hostname" : "logs.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "logs.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "logs.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "logs.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -30814,8 +34216,18 @@
           }
         },
         "endpoints" : {
-          "us-gov-east-1" : { },
-          "us-gov-west-1" : { }
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-gov-west-1" : {
+            "variants" : [ {
+              "hostname" : "metering-marketplace.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
         }
       },
       "metrics.sagemaker" : {
@@ -31007,6 +34419,12 @@
             "variants" : [ {
               "hostname" : "networkmanager.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "networkmanager.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            }, {
+              "hostname" : "networkmanager.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "fips-aws-us-gov-global" : {
@@ -31257,9 +34675,14 @@
           }
         }
       },
+      "query.timestream" : {
+        "endpoints" : {
+          "us-gov-west-1" : { }
+        }
+      },
       "quicksight" : {
         "endpoints" : {
-          "api" : { },
+          "us-gov-east-1" : { },
           "us-gov-west-1" : { }
         }
       },
@@ -31271,8 +34694,13 @@
             },
             "hostname" : "ram.us-gov-east-1.amazonaws.com",
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ramus-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -31288,8 +34716,13 @@
             },
             "hostname" : "ram.us-gov-west-1.amazonaws.com",
             "variants" : [ {
+              "tags" : [ "dualstack" ]
+            }, {
               "hostname" : "ram.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "ramus-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -31462,6 +34895,12 @@
             "variants" : [ {
               "hostname" : "rekognition-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "rekognition-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "rekognition.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -31551,11 +34990,6 @@
           }
         }
       },
-      "robomaker" : {
-        "endpoints" : {
-          "us-gov-west-1" : { }
-        }
-      },
       "rolesanywhere" : {
         "endpoints" : {
           "fips-us-gov-east-1" : {
@@ -31609,12 +35043,40 @@
         "isRegionalized" : false,
         "partitionEndpoint" : "aws-us-gov-global"
       },
+      "route53profiles" : {
+        "endpoints" : {
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-gov-west-1" : {
+            "variants" : [ {
+              "hostname" : "route53profiles-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "route53profiles.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
       "route53resolver" : {
         "endpoints" : {
           "us-gov-east-1" : {
             "variants" : [ {
               "hostname" : "route53resolver.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
+            }, {
+              "hostname" : "route53resolver.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -31625,6 +35087,12 @@
             "variants" : [ {
               "hostname" : "route53resolver.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "route53resolver.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
+            }, {
+              "hostname" : "route53resolver.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -31633,6 +35101,12 @@
           }
         }
       },
+      "rum" : {
+        "endpoints" : {
+          "us-gov-east-1" : { },
+          "us-gov-west-1" : { }
+        }
+      },
       "runtime-v2-lex" : {
         "endpoints" : {
           "us-gov-west-1" : { }
@@ -31835,6 +35309,12 @@
           }
         }
       },
+      "scheduler" : {
+        "endpoints" : {
+          "us-gov-east-1" : { },
+          "us-gov-west-1" : { }
+        }
+      },
       "schemas" : {
         "endpoints" : {
           "us-gov-east-1" : { },
@@ -31911,6 +35391,9 @@
             "variants" : [ {
               "hostname" : "securitylake.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-east-1-fips" : {
@@ -31924,6 +35407,9 @@
             "variants" : [ {
               "hostname" : "securitylake.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "securitylake.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -32192,23 +35678,6 @@
           }
         }
       },
-      "sms" : {
-        "endpoints" : {
-          "fips-us-gov-west-1" : {
-            "credentialScope" : {
-              "region" : "us-gov-west-1"
-            },
-            "deprecated" : true,
-            "hostname" : "sms-fips.us-gov-west-1.amazonaws.com"
-          },
-          "us-gov-west-1" : {
-            "variants" : [ {
-              "hostname" : "sms-fips.us-gov-west-1.amazonaws.com",
-              "tags" : [ "fips" ]
-            } ]
-          }
-        }
-      },
       "sms-voice" : {
         "endpoints" : {
           "fips-us-gov-east-1" : {
@@ -32229,12 +35698,24 @@
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "sms-voice-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "sms-voice-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "sms-voice.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -32259,12 +35740,24 @@
             "variants" : [ {
               "hostname" : "snowball-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "snowball-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "snowball.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "snowball-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "snowball-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "snowball.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -32308,19 +35801,33 @@
           } ]
         },
         "endpoints" : {
-          "us-gov-east-1" : {
+          "fips-us-gov-east-1" : {
             "credentialScope" : {
               "region" : "us-gov-east-1"
             },
+            "deprecated" : true,
             "hostname" : "sqs.us-gov-east-1.amazonaws.com"
           },
-          "us-gov-west-1" : {
+          "fips-us-gov-west-1" : {
             "credentialScope" : {
               "region" : "us-gov-west-1"
             },
-            "hostname" : "sqs.us-gov-west-1.amazonaws.com",
+            "deprecated" : true,
+            "hostname" : "sqs.us-gov-west-1.amazonaws.com"
+          },
+          "us-gov-east-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.us-gov-east-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-gov-west-1" : {
             "protocols" : [ "http", "https" ],
-            "sslCommonName" : "{region}.queue.{dnsSuffix}"
+            "sslCommonName" : "{region}.queue.{dnsSuffix}",
+            "variants" : [ {
+              "hostname" : "sqs.us-gov-west-1.amazonaws.com",
+              "tags" : [ "fips" ]
+            } ]
           }
         }
       },
@@ -32602,12 +36109,24 @@
             "variants" : [ {
               "hostname" : "synthetics-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "synthetics-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "synthetics.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "synthetics-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "synthetics-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "synthetics.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -32687,12 +36206,24 @@
             "variants" : [ {
               "hostname" : "fips.transcribe.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "fips.transcribe.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribe-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribe.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -32717,12 +36248,24 @@
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.us-gov-east-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.us-gov-east-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1" : {
             "variants" : [ {
               "hostname" : "transcribestreaming-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "transcribestreaming-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "transcribestreaming.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           }
         }
@@ -32766,6 +36309,12 @@
             "variants" : [ {
               "hostname" : "translate-fips.us-gov-west-1.amazonaws.com",
               "tags" : [ "fips" ]
+            }, {
+              "hostname" : "translate-fips.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack", "fips" ]
+            }, {
+              "hostname" : "translate.us-gov-west-1.api.aws",
+              "tags" : [ "dualstack" ]
             } ]
           },
           "us-gov-west-1-fips" : {
@@ -32974,6 +36523,12 @@
       }
     },
     "services" : {
+      "acm" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
       "agreement-marketplace" : {
         "endpoints" : {
           "fips-us-iso-east-1" : {
@@ -33068,6 +36623,18 @@
           "us-iso-west-1" : { }
         }
       },
+      "backup" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
+      "batch" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
       "bedrock" : {
         "endpoints" : {
           "bedrock-runtime-us-iso-east-1" : {
@@ -33103,6 +36670,18 @@
         "isRegionalized" : false,
         "partitionEndpoint" : "aws-iso-global"
       },
+      "ce" : {
+        "endpoints" : {
+          "aws-iso-global" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "hostname" : "ce.us-iso-east-1.c2s.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-global"
+      },
       "cloudcontrolapi" : {
         "endpoints" : {
           "us-iso-east-1" : { },
@@ -33179,8 +36758,32 @@
       },
       "config" : {
         "endpoints" : {
-          "us-iso-east-1" : { },
-          "us-iso-west-1" : { }
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "config-fips.us-iso-east-1.c2s.ic.gov"
+          },
+          "fips-us-iso-west-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "config-fips.us-iso-west-1.c2s.ic.gov"
+          },
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "config-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "hostname" : "config-fips.us-iso-west-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "datapipeline" : {
@@ -33472,15 +37075,39 @@
               "hostname" : "fsx-fips.us-iso-east-1.c2s.ic.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-iso-west-1" : { }
         }
       },
       "glacier" : {
         "endpoints" : {
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "glacier-fips.us-iso-east-1.c2s.ic.gov"
+          },
+          "fips-us-iso-west-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "glacier-fips.us-iso-west-1.c2s.ic.gov"
+          },
           "us-iso-east-1" : {
-            "protocols" : [ "http", "https" ]
+            "protocols" : [ "http", "https" ],
+            "variants" : [ {
+              "hostname" : "glacier-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
           },
-          "us-iso-west-1" : { }
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "hostname" : "glacier-fips.us-iso-west-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "glue" : {
@@ -33520,6 +37147,16 @@
           "us-iso-west-1" : { }
         }
       },
+      "kinesisanalytics" : {
+        "endpoints" : {
+          "us-iso-east-1" : { }
+        }
+      },
+      "kinesisvideo" : {
+        "endpoints" : {
+          "us-iso-east-1" : { }
+        }
+      },
       "kms" : {
         "endpoints" : {
           "ProdFips" : {
@@ -33557,6 +37194,11 @@
           }
         }
       },
+      "lakeformation" : {
+        "endpoints" : {
+          "us-iso-east-1" : { }
+        }
+      },
       "lambda" : {
         "endpoints" : {
           "us-iso-east-1" : { },
@@ -33577,7 +37219,19 @@
       },
       "medialive" : {
         "endpoints" : {
-          "us-iso-east-1" : { }
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "medialive-fips.us-iso-east-1.c2s.ic.gov"
+          },
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "medialive-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "mediapackage" : {
@@ -33596,11 +37250,17 @@
           "us-iso-west-1" : { }
         }
       },
-      "oam" : {
+      "network-firewall" : {
         "endpoints" : {
           "us-iso-east-1" : { }
         }
       },
+      "oam" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
       "organizations" : {
         "endpoints" : {
           "aws-iso-global" : {
@@ -33618,6 +37278,16 @@
           "us-iso-east-1" : { }
         }
       },
+      "pi" : {
+        "endpoints" : {
+          "us-iso-east-1" : {
+            "protocols" : [ "https" ]
+          },
+          "us-iso-west-1" : {
+            "protocols" : [ "https" ]
+          }
+        }
+      },
       "ram" : {
         "endpoints" : {
           "us-iso-east-1" : { },
@@ -33862,6 +37532,38 @@
       },
       "secretsmanager" : {
         "endpoints" : {
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-east-1-fips" : {
+            "deprecated" : true
+          },
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-west-1-fips" : {
+            "deprecated" : true
+          }
+        }
+      },
+      "securityhub" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
+      "servicediscovery" : {
+        "endpoints" : {
+          "us-iso-east-1" : { },
+          "us-iso-west-1" : { }
+        }
+      },
+      "servicequotas" : {
+        "endpoints" : {
           "us-iso-east-1" : { },
           "us-iso-west-1" : { }
         }
@@ -33882,10 +37584,33 @@
       },
       "sqs" : {
         "endpoints" : {
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs.us-iso-east-1.c2s.ic.gov"
+          },
+          "fips-us-iso-west-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs.us-iso-west-1.c2s.ic.gov"
+          },
           "us-iso-east-1" : {
-            "protocols" : [ "http", "https" ]
+            "protocols" : [ "http", "https" ],
+            "variants" : [ {
+              "hostname" : "sqs.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
           },
-          "us-iso-west-1" : { }
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.us-iso-west-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "ssm" : {
@@ -33896,6 +37621,36 @@
       },
       "states" : {
         "endpoints" : {
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "states-fips.us-iso-east-1.c2s.ic.gov"
+          },
+          "fips-us-iso-west-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "states-fips.us-iso-west-1.c2s.ic.gov"
+          },
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "states-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "hostname" : "states-fips.us-iso-west-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
+        }
+      },
+      "storagegateway" : {
+        "endpoints" : {
           "us-iso-east-1" : { },
           "us-iso-west-1" : { }
         }
@@ -33980,7 +37735,19 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
-          "us-iso-east-1" : { }
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "fips.transcribe.us-iso-east-1.c2s.ic.gov"
+          },
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "fips.transcribe.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "transcribestreaming" : {
@@ -33993,11 +37760,58 @@
           "protocols" : [ "https" ]
         },
         "endpoints" : {
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "translate-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-east-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "translate-fips.us-iso-east-1.c2s.ic.gov"
+          }
+        }
+      },
+      "wafv2" : {
+        "endpoints" : {
           "us-iso-east-1" : { }
         }
       },
       "workspaces" : {
         "endpoints" : {
+          "fips-us-iso-east-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "workspaces-fips.us-iso-east-1.c2s.ic.gov"
+          },
+          "fips-us-iso-west-1" : {
+            "credentialScope" : {
+              "region" : "us-iso-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "workspaces-fips.us-iso-west-1.c2s.ic.gov"
+          },
+          "us-iso-east-1" : {
+            "variants" : [ {
+              "hostname" : "workspaces-fips.us-iso-east-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-iso-west-1" : {
+            "variants" : [ {
+              "hostname" : "workspaces-fips.us-iso-west-1.c2s.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
+        }
+      },
+      "xray" : {
+        "endpoints" : {
           "us-iso-east-1" : { },
           "us-iso-west-1" : { }
         }
@@ -34021,6 +37835,9 @@
     "regions" : {
       "us-isob-east-1" : {
         "description" : "US ISOB East (Ohio)"
+      },
+      "us-isob-west-1" : {
+        "description" : "US ISOB West"
       }
     },
     "services" : {
@@ -34031,7 +37848,8 @@
               "region" : "us-isob-east-1"
             },
             "hostname" : "api.ecr.us-isob-east-1.sc2s.sgov.gov"
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "api.pricing" : {
@@ -34056,12 +37874,14 @@
       },
       "appconfig" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "appconfigdata" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "application-autoscaling" : {
@@ -34069,11 +37889,18 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "arc-zonal-shift" : {
         "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "athena" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
@@ -34082,9 +37909,21 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "backup" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
+      "batch" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
       "budgets" : {
         "endpoints" : {
           "aws-iso-b-global" : {
@@ -34103,14 +37942,28 @@
         "isRegionalized" : false,
         "partitionEndpoint" : "aws-iso-b-global"
       },
+      "ce" : {
+        "endpoints" : {
+          "aws-iso-b-global" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "hostname" : "ce.us-isob-east-1.sc2s.sgov.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-b-global"
+      },
       "cloudcontrolapi" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "cloudformation" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "cloudtrail" : {
@@ -34127,27 +37980,54 @@
               "hostname" : "cloudtrail-fips.us-isob-east-1.sc2s.sgov.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
-      "codedeploy" : {
+      "codebuild" : {
         "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
+      "codedeploy" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
       "config" : {
         "endpoints" : {
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "config-fips.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "config-fips.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isob-west-1" : { }
+        }
+      },
+      "datasync" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
       "directconnect" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "dlm" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "dms" : {
@@ -34187,7 +38067,8 @@
             },
             "deprecated" : true,
             "hostname" : "dms.us-isob-east-1.sc2s.sgov.gov"
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "ds" : {
@@ -34212,12 +38093,14 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "ebs" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "ec2" : {
@@ -34225,12 +38108,14 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "ecs" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "eks" : {
@@ -34238,12 +38123,14 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "elasticache" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "elasticfilesystem" : {
@@ -34267,7 +38154,8 @@
         "endpoints" : {
           "us-isob-east-1" : {
             "protocols" : [ "https" ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "elasticmapreduce" : {
@@ -34284,17 +38172,20 @@
               "hostname" : "elasticmapreduce.us-isob-east-1.sc2s.sgov.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "es" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "events" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "firehose" : {
@@ -34302,8 +38193,35 @@
           "us-isob-east-1" : { }
         }
       },
+      "fsx" : {
+        "endpoints" : {
+          "us-isob-east-1" : { }
+        }
+      },
       "glacier" : {
         "endpoints" : {
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "glacier-fips.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "glacier-fips.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
+        }
+      },
+      "glue" : {
+        "endpoints" : {
+          "us-isob-east-1" : { }
+        }
+      },
+      "guardduty" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
@@ -34326,6 +38244,12 @@
       },
       "kinesis" : {
         "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "kinesisanalytics" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
@@ -34350,14 +38274,21 @@
             },
             "deprecated" : true,
             "hostname" : "kms-fips.us-isob-east-1.sc2s.sgov.gov"
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
-      "lambda" : {
+      "lakeformation" : {
         "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
+      "lambda" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
       "license-manager" : {
         "endpoints" : {
           "us-isob-east-1" : { }
@@ -34365,12 +38296,25 @@
       },
       "logs" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "medialive" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "medialive-fips.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "medialive-fips.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "mediapackage" : {
@@ -34395,12 +38339,19 @@
       },
       "monitoring" : {
         "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "network-firewall" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
       "oam" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "organizations" : {
@@ -34420,9 +38371,16 @@
           "us-isob-east-1" : { }
         }
       },
+      "pi" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
       "ram" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "rbin" : {
@@ -34439,7 +38397,8 @@
               "hostname" : "rbin-fips.us-isob-east-1.sc2s.sgov.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "rds" : {
@@ -34463,7 +38422,8 @@
             },
             "deprecated" : true,
             "hostname" : "rds.us-isob-east-1.sc2s.sgov.gov"
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "redshift" : {
@@ -34473,12 +38433,14 @@
               "region" : "us-isob-east-1"
             },
             "hostname" : "redshift.us-isob-east-1.sc2s.sgov.gov"
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "resource-groups" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "route53" : {
@@ -34524,7 +38486,8 @@
               "hostname" : "s3-fips.us-isob-east-1.sc2s.sgov.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "s3-control" : {
@@ -34574,14 +38537,40 @@
       },
       "scheduler" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "secretsmanager" : {
         "endpoints" : {
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isob-east-1-fips" : {
+            "deprecated" : true
+          },
+          "us-isob-west-1" : { }
+        }
+      },
+      "securityhub" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
+      "servicediscovery" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "servicequotas" : {
+        "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
       "snowball" : {
         "endpoints" : {
           "us-isob-east-1" : { }
@@ -34592,7 +38581,8 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "sqs" : {
@@ -34601,17 +38591,44 @@
           "sslCommonName" : "{region}.queue.{dnsSuffix}"
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isob-west-1" : { }
         }
       },
       "ssm" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "states" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "states-fips.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "states-fips.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isob-west-1" : { }
         }
       },
       "storagegateway" : {
@@ -34646,12 +38663,14 @@
           "protocols" : [ "http", "https" ]
         },
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "sts" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "support" : {
@@ -34679,27 +38698,48 @@
               "hostname" : "swf-fips.us-isob-east-1.sc2s.sgov.gov",
               "tags" : [ "fips" ]
             } ]
-          }
+          },
+          "us-isob-west-1" : { }
         }
       },
       "synthetics" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       },
       "tagging" : {
         "endpoints" : {
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
+        }
+      },
+      "wafv2" : {
+        "endpoints" : {
           "us-isob-east-1" : { }
         }
       },
       "workspaces" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "fips-us-isob-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isob-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "workspaces-fips.us-isob-east-1.sc2s.sgov.gov"
+          },
+          "us-isob-east-1" : {
+            "variants" : [ {
+              "hostname" : "workspaces-fips.us-isob-east-1.sc2s.sgov.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
         }
       },
       "xray" : {
         "endpoints" : {
-          "us-isob-east-1" : { }
+          "us-isob-east-1" : { },
+          "us-isob-west-1" : { }
         }
       }
     }
@@ -34723,7 +38763,541 @@
         "description" : "EU ISOE West"
       }
     },
-    "services" : { }
+    "services" : {
+      "access-analyzer" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.eu-isoe-west-1.api.cloud-aws.adc-e.uk",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
+      "acm" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "acm-pca" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "api.ecr" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "api.ecr.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        }
+      },
+      "api.pricing" : {
+        "defaults" : {
+          "credentialScope" : {
+            "service" : "pricing"
+          }
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "apigateway" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "appconfig" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "appconfigdata" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "application-autoscaling" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "arc-zonal-shift" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "athena" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "autoscaling" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "batch" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "budgets" : {
+        "endpoints" : {
+          "aws-iso-e-global" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "budgets.global.cloud.adc-e.uk"
+          },
+          "eu-isoe-west-1" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "budgets.global.cloud.adc-e.uk"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-e-global"
+      },
+      "cloudcontrolapi" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "cloudformation" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "cloudtrail" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "cloudtrail-data" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "codedeploy" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "compute-optimizer" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "compute-optimizer.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        }
+      },
+      "config" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "cost-optimization-hub" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "cost-optimization-hub.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        }
+      },
+      "directconnect" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "dlm" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "dms" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ds" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "dynamodb" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ebs" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ec2" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ecs" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "eks" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "elasticache" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "elasticfilesystem" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "variants" : [ {
+              "hostname" : "elasticfilesystem-fips.eu-isoe-west-1.cloud.adc-e.uk",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "fips-eu-isoe-west-1" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "elasticfilesystem-fips.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        }
+      },
+      "elasticloadbalancing" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "elasticmapreduce" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "emr-serverless" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "es" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "events" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "firehose" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "glue" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "kinesis" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "kms" : {
+        "endpoints" : {
+          "ProdFips" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "kms-fips.eu-isoe-west-1.cloud.adc-e.uk"
+          },
+          "eu-isoe-west-1" : {
+            "variants" : [ {
+              "hostname" : "kms-fips.eu-isoe-west-1.cloud.adc-e.uk",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "eu-isoe-west-1-fips" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "deprecated" : true,
+            "hostname" : "kms-fips.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        }
+      },
+      "lakeformation" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "lambda" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "variants" : [ {
+              "hostname" : "lambda.eu-isoe-west-1.api.cloud-aws.adc-e.uk",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
+      "license-manager" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "logs" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "monitoring" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "oam" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "organizations" : {
+        "endpoints" : {
+          "aws-iso-e-global" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "organizations.eu-isoe-west-1.cloud.adc-e.uk"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-e-global"
+      },
+      "pi" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : {
+            "protocols" : [ "https" ]
+          }
+        }
+      },
+      "pipes" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ram" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "rbin" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "rds" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "redshift" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "redshift-serverless" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "resource-groups" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "route53" : {
+        "endpoints" : {
+          "aws-iso-e-global" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "route53.cloud.adc-e.uk"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-e-global"
+      },
+      "route53profiles" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "route53resolver" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "s3" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ],
+          "signatureVersions" : [ "s3v4" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "savingsplans" : {
+        "endpoints" : {
+          "aws-iso-e-global" : {
+            "credentialScope" : {
+              "region" : "eu-isoe-west-1"
+            },
+            "hostname" : "savingsplans.cloud.adc-e.uk"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-e-global"
+      },
+      "scheduler" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "schemas" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "secretsmanager" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "servicecatalog" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "servicediscovery" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "servicequotas" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "sns" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "sqs" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ],
+          "sslCommonName" : "{region}.queue.{dnsSuffix}"
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "ssm" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "states" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "streams.dynamodb" : {
+        "defaults" : {
+          "credentialScope" : {
+            "service" : "dynamodb"
+          },
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "sts" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "swf" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "synthetics" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "tagging" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "trustedadvisor" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      },
+      "xray" : {
+        "endpoints" : {
+          "eu-isoe-west-1" : { }
+        }
+      }
+    }
   }, {
     "defaults" : {
       "hostname" : "{service}.{region}.{dnsSuffix}",
@@ -34739,7 +39313,856 @@
     "partition" : "aws-iso-f",
     "partitionName" : "AWS ISOF",
     "regionRegex" : "^us\\-isof\\-\\w+\\-\\d+$",
-    "regions" : { },
+    "regions" : {
+      "us-isof-east-1" : {
+        "description" : "US ISOF EAST"
+      },
+      "us-isof-south-1" : {
+        "description" : "US ISOF SOUTH"
+      }
+    },
+    "services" : {
+      "access-analyzer" : {
+        "endpoints" : {
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.us-isof-east-1.api.aws.hci.ic.gov",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "access-analyzer.us-isof-south-1.api.aws.hci.ic.gov",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
+      "acm" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "acm-pca" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "api.ecr" : {
+        "endpoints" : {
+          "us-isof-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "hostname" : "api.ecr.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "api.ecr.us-isof-south-1.csp.hci.ic.gov"
+          }
+        }
+      },
+      "api.pricing" : {
+        "defaults" : {
+          "credentialScope" : {
+            "service" : "pricing"
+          }
+        },
+        "endpoints" : {
+          "us-isof-south-1" : { }
+        }
+      },
+      "api.sagemaker" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "appconfig" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "appconfigdata" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "application-autoscaling" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "arc-zonal-shift" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "athena" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "autoscaling" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "backup" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "batch" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "budgets" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "budgets.global.csp.hci.ic.gov"
+          },
+          "us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "budgets.global.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "ce" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "ce.us-isof-south-1.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "cloudcontrolapi" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "cloudformation" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "cloudtrail" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "cloudtrail-data" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "codebuild" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "codedeploy" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "codepipeline" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "comprehend" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "compute-optimizer" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "compute-optimizer.us-isof-south-1.csp.hci.ic.gov"
+          }
+        }
+      },
+      "config" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "cost-optimization-hub" : {
+        "endpoints" : {
+          "us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "cost-optimization-hub.us-isof-south-1.csp.hci.ic.gov"
+          }
+        }
+      },
+      "directconnect" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "dlm" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "dms" : {
+        "endpoints" : {
+          "dms" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "variants" : [ {
+              "hostname" : "dms.us-isof-east-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "dms-fips" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "dms.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "dms.us-isof-east-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-east-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "dms.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "dms.us-isof-south-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-south-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "deprecated" : true,
+            "hostname" : "dms.us-isof-south-1.csp.hci.ic.gov"
+          }
+        }
+      },
+      "ds" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "dynamodb" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "ebs" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "ec2" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "ecs" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "eks" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "elasticache" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "elasticfilesystem" : {
+        "endpoints" : {
+          "fips-us-isof-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "elasticfilesystem-fips.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "fips-us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "deprecated" : true,
+            "hostname" : "elasticfilesystem-fips.us-isof-south-1.csp.hci.ic.gov"
+          },
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "elasticfilesystem-fips.us-isof-east-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "elasticfilesystem-fips.us-isof-south-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
+        }
+      },
+      "elasticloadbalancing" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "elasticmapreduce" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "es" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "events" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "firehose" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "fsx" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "glue" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "guardduty" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        },
+        "isRegionalized" : true
+      },
+      "iam" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "iam.us-isof-south-1.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "kinesis" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "kms" : {
+        "endpoints" : {
+          "ProdFips" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "kms-fips.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "kms-fips.us-isof-east-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-east-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "kms-fips.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "kms-fips.us-isof-south-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-south-1-fips" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "deprecated" : true,
+            "hostname" : "kms-fips.us-isof-south-1.csp.hci.ic.gov"
+          }
+        }
+      },
+      "lakeformation" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "lambda" : {
+        "endpoints" : {
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "lambda.us-isof-east-1.api.aws.hci.ic.gov",
+              "tags" : [ "dualstack" ]
+            } ]
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "lambda.us-isof-south-1.api.aws.hci.ic.gov",
+              "tags" : [ "dualstack" ]
+            } ]
+          }
+        }
+      },
+      "license-manager" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "logs" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "metrics.sagemaker" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "monitoring" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "oam" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "organizations" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "organizations.us-isof-south-1.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "pi" : {
+        "endpoints" : {
+          "us-isof-east-1" : {
+            "protocols" : [ "https" ]
+          },
+          "us-isof-south-1" : {
+            "protocols" : [ "https" ]
+          }
+        }
+      },
+      "pipes" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "quicksight" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "ram" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "rbin" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "rds" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "redshift" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "redshift-serverless" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "rekognition" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "resource-groups" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "route53" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "route53.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "route53profiles" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "route53resolver" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "runtime.sagemaker" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "s3" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ],
+          "signatureVersions" : [ "s3v4" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "savingsplans" : {
+        "endpoints" : {
+          "aws-iso-f-global" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "hostname" : "savingsplans.csp.hci.ic.gov"
+          }
+        },
+        "isRegionalized" : false,
+        "partitionEndpoint" : "aws-iso-f-global"
+      },
+      "scheduler" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "schemas" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "secretsmanager" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "servicediscovery" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "servicequotas" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "sns" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "sqs" : {
+        "defaults" : {
+          "protocols" : [ "http", "https" ],
+          "sslCommonName" : "{region}.queue.{dnsSuffix}"
+        },
+        "endpoints" : {
+          "fips-us-isof-east-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-east-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs.us-isof-east-1.csp.hci.ic.gov"
+          },
+          "fips-us-isof-south-1" : {
+            "credentialScope" : {
+              "region" : "us-isof-south-1"
+            },
+            "deprecated" : true,
+            "hostname" : "sqs.us-isof-south-1.csp.hci.ic.gov"
+          },
+          "us-isof-east-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.us-isof-east-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          },
+          "us-isof-south-1" : {
+            "variants" : [ {
+              "hostname" : "sqs.us-isof-south-1.csp.hci.ic.gov",
+              "tags" : [ "fips" ]
+            } ]
+          }
+        }
+      },
+      "ssm" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "states" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "streams.dynamodb" : {
+        "defaults" : {
+          "credentialScope" : {
+            "service" : "dynamodb"
+          },
+          "protocols" : [ "http", "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "sts" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "swf" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "synthetics" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "tagging" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "textract" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "transcribe" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "transcribestreaming" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "translate" : {
+        "defaults" : {
+          "protocols" : [ "https" ]
+        },
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      },
+      "trustedadvisor" : {
+        "endpoints" : {
+          "us-isof-south-1" : { }
+        }
+      },
+      "xray" : {
+        "endpoints" : {
+          "us-isof-east-1" : { },
+          "us-isof-south-1" : { }
+        }
+      }
+    }
+  }, {
+    "defaults" : {
+      "hostname" : "{service}.{region}.{dnsSuffix}",
+      "protocols" : [ "https" ],
+      "signatureVersions" : [ "v4" ],
+      "variants" : [ {
+        "dnsSuffix" : "amazonaws.eu",
+        "hostname" : "{service}-fips.{region}.{dnsSuffix}",
+        "tags" : [ "fips" ]
+      } ]
+    },
+    "dnsSuffix" : "amazonaws.eu",
+    "partition" : "aws-eusc",
+    "partitionName" : "AWS EUSC",
+    "regionRegex" : "^eusc\\-(de)\\-\\w+\\-\\d+$",
+    "regions" : {
+      "eusc-de-east-1" : {
+        "description" : "EU (Germany)"
+      }
+    },
     "services" : { }
   } ],
   "version" : 3
diff -pruN 2.23.6-1/awscli/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/entityresolution/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/entityresolution/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/entityresolution/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/entityresolution/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/entityresolution/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"entityresolution",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
@@ -11,8 +12,7 @@
     "serviceId":"EntityResolution",
     "signatureVersion":"v4",
     "signingName":"entityresolution",
-    "uid":"entityresolution-2018-05-10",
-    "auth":["aws.auth#sigv4"]
+    "uid":"entityresolution-2018-05-10"
   },
   "operations":{
     "AddPolicyStatement":{
@@ -68,7 +68,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates an <code>IdMappingWorkflow</code> object which stores the configuration of the data processing job to be run. Each <code>IdMappingWorkflow</code> must have a unique workflow name. To modify an existing workflow, use the <code>UpdateIdMappingWorkflow</code> API.</p>"
+      "documentation":"<p>Creates an <code>IdMappingWorkflow</code> object which stores the configuration of the data processing job to be run. Each <code>IdMappingWorkflow</code> must have a unique workflow name. To modify an existing workflow, use the UpdateIdMappingWorkflow API.</p> <important> <p>Incremental processing is not supported for ID mapping workflows. </p> </important>"
     },
     "CreateIdNamespace":{
       "name":"CreateIdNamespace",
@@ -87,7 +87,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates an ID namespace object which will help customers provide metadata explaining their dataset and how to use it. Each ID namespace must have a unique name. To modify an existing ID namespace, use the <code>UpdateIdNamespace</code> API.</p>"
+      "documentation":"<p>Creates an ID namespace object which will help customers provide metadata explaining their dataset and how to use it. Each ID namespace must have a unique name. To modify an existing ID namespace, use the UpdateIdNamespace API.</p>"
     },
     "CreateMatchingWorkflow":{
       "name":"CreateMatchingWorkflow",
@@ -106,7 +106,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates a <code>MatchingWorkflow</code> object which stores the configuration of the data processing job to be run. It is important to note that there should not be a pre-existing <code>MatchingWorkflow</code> with the same name. To modify an existing workflow, utilize the <code>UpdateMatchingWorkflow</code> API.</p>"
+      "documentation":"<p>Creates a matching workflow that defines the configuration for a data processing job. The workflow name must be unique. To modify an existing workflow, use <code>UpdateMatchingWorkflow</code>. </p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>"
     },
     "CreateSchemaMapping":{
       "name":"CreateSchemaMapping",
@@ -222,6 +222,24 @@
       "documentation":"<p>Deletes the <code>SchemaMapping</code> with a given name. This operation will succeed even if a schema with the given name does not exist. This operation will fail if there is a <code>MatchingWorkflow</code> object that references the <code>SchemaMapping</code> in the workflow's <code>InputSourceConfig</code>.</p>",
       "idempotent":true
     },
+    "GenerateMatchId":{
+      "name":"GenerateMatchId",
+      "http":{
+        "method":"POST",
+        "requestUri":"/matchingworkflows/{workflowName}/generateMatches",
+        "responseCode":200
+      },
+      "input":{"shape":"GenerateMatchIdInput"},
+      "output":{"shape":"GenerateMatchIdOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Generates or retrieves Match IDs for records using a rule-based matching workflow. When you call this operation, it processes your records against the workflow's matching rules to identify potential matches. For existing records, it retrieves their Match IDs and associated rules. For records without matches, it generates new Match IDs. The operation saves results to Amazon S3. </p> <p>The processing type (<code>processingType</code>) you choose affects both the accuracy and response time of the operation. Additional charges apply for each API call, whether made through the Entity Resolution console or directly via the API. The rule-based matching workflow must exist and be active before calling this operation.</p>"
+    },
     "GetIdMappingJob":{
       "name":"GetIdMappingJob",
       "http":{
@@ -238,7 +256,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Gets the status, metrics, and errors (if there are any) that are associated with a job.</p>"
+      "documentation":"<p>Returns the status, metrics, and errors (if there are any) that are associated with a job.</p>"
     },
     "GetIdMappingWorkflow":{
       "name":"GetIdMappingWorkflow",
@@ -292,7 +310,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Returns the corresponding Match ID of a customer record if the record has been processed.</p>"
+      "documentation":"<p>Returns the corresponding Match ID of a customer record if the record has been processed in a rule-based matching workflow.</p> <p>You can call this API as a dry run of an incremental load on the rule-based matching workflow.</p>"
     },
     "GetMatchingJob":{
       "name":"GetMatchingJob",
@@ -310,7 +328,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Gets the status, metrics, and errors (if there are any) that are associated with a job.</p>"
+      "documentation":"<p>Returns the status, metrics, and errors (if there are any) that are associated with a job.</p>"
     },
     "GetMatchingWorkflow":{
       "name":"GetMatchingWorkflow",
@@ -629,7 +647,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Updates an existing <code>IdMappingWorkflow</code>. This method is identical to <code>CreateIdMappingWorkflow</code>, except it uses an HTTP <code>PUT</code> request instead of a <code>POST</code> request, and the <code>IdMappingWorkflow</code> must already exist for the method to succeed.</p>",
+      "documentation":"<p>Updates an existing <code>IdMappingWorkflow</code>. This method is identical to CreateIdMappingWorkflow, except it uses an HTTP <code>PUT</code> request instead of a <code>POST</code> request, and the <code>IdMappingWorkflow</code> must already exist for the method to succeed.</p> <important> <p>Incremental processing is not supported for ID mapping workflows. </p> </important>",
       "idempotent":true
     },
     "UpdateIdNamespace":{
@@ -667,7 +685,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Updates an existing <code>MatchingWorkflow</code>. This method is identical to <code>CreateMatchingWorkflow</code>, except it uses an HTTP <code>PUT</code> request instead of a <code>POST</code> request, and the <code>MatchingWorkflow</code> must already exist for the method to succeed.</p>",
+      "documentation":"<p>Updates an existing matching workflow. The workflow must already exist for this operation to succeed.</p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>",
       "idempotent":true
     },
     "UpdateSchemaMapping":{
@@ -707,40 +725,40 @@
     "AddPolicyStatementInput":{
       "type":"structure",
       "required":[
-        "action",
         "arn",
+        "statementId",
         "effect",
-        "principal",
-        "statementId"
+        "action",
+        "principal"
       ],
       "members":{
-        "action":{
-          "shape":"StatementActionList",
-          "documentation":"<p>The action that the principal can use on the resource. </p> <p>For example, <code>entityresolution:GetIdMappingJob</code>, <code>entityresolution:GetMatchingJob</code>.</p>"
-        },
         "arn":{
           "shape":"VeniceGlobalArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the resource that will be accessed by the principal.</p>",
           "location":"uri",
           "locationName":"arn"
         },
-        "condition":{
-          "shape":"StatementCondition",
-          "documentation":"<p>A set of condition keys that you can use in key policies.</p>"
+        "statementId":{
+          "shape":"StatementId",
+          "documentation":"<p>A statement identifier that differentiates the statement from others in the same policy.</p>",
+          "location":"uri",
+          "locationName":"statementId"
         },
         "effect":{
           "shape":"StatementEffect",
           "documentation":"<p>Determines whether the permissions specified in the policy are to be allowed (<code>Allow</code>) or denied (<code>Deny</code>).</p> <important> <p> If you set the value of the <code>effect</code> parameter to <code>Deny</code> for the <code>AddPolicyStatement</code> operation, you must also set the value of the <code>effect</code> parameter in the <code>policy</code> to <code>Deny</code> for the <code>PutPolicy</code> operation.</p> </important>"
         },
+        "action":{
+          "shape":"StatementActionList",
+          "documentation":"<p>The action that the principal can use on the resource. </p> <p>For example, <code>entityresolution:GetIdMappingJob</code>, <code>entityresolution:GetMatchingJob</code>.</p>"
+        },
         "principal":{
           "shape":"StatementPrincipalList",
           "documentation":"<p>The Amazon Web Services service or Amazon Web Services account that can access the resource defined as ARN.</p>"
         },
-        "statementId":{
-          "shape":"StatementId",
-          "documentation":"<p>A statement identifier that differentiates the statement from others in the same policy.</p>",
-          "location":"uri",
-          "locationName":"statementId"
+        "condition":{
+          "shape":"StatementCondition",
+          "documentation":"<p>A set of condition keys that you can use in key policies.</p>"
         }
       }
     },
@@ -755,13 +773,13 @@
           "shape":"VeniceGlobalArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the resource that will be accessed by the principal.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The resource-based policy.</p>"
-        },
         "token":{
           "shape":"PolicyToken",
           "documentation":"<p>A unique identifier for the current revision of the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy.</p>"
         }
       }
     },
@@ -776,11 +794,11 @@
       "type":"string",
       "max":255,
       "min":0,
-      "pattern":"^[a-zA-Z_0-9- \\t]*$"
+      "pattern":"[a-zA-Z_0-9- ]*"
     },
     "AwsAccountId":{
       "type":"string",
-      "pattern":"^\\d{12}$"
+      "pattern":"\\d{12}"
     },
     "AwsAccountIdList":{
       "type":"list",
@@ -789,10 +807,16 @@
     "BatchDeleteUniqueIdInput":{
       "type":"structure",
       "required":[
-        "uniqueIds",
-        "workflowName"
+        "workflowName",
+        "uniqueIds"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>",
+          "location":"uri",
+          "locationName":"workflowName"
+        },
         "inputSource":{
           "shape":"BatchDeleteUniqueIdInputInputSourceString",
           "documentation":"<p>The input source for the batch delete unique ID operation.</p>",
@@ -804,28 +828,30 @@
           "documentation":"<p>The unique IDs to delete.</p>",
           "location":"header",
           "locationName":"uniqueIds"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>",
-          "location":"uri",
-          "locationName":"workflowName"
         }
       }
     },
     "BatchDeleteUniqueIdInputInputSourceString":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})"
     },
     "BatchDeleteUniqueIdOutput":{
       "type":"structure",
       "required":[
-        "deleted",
-        "disconnectedUniqueIds",
+        "status",
         "errors",
-        "status"
+        "deleted",
+        "disconnectedUniqueIds"
       ],
       "members":{
+        "status":{
+          "shape":"DeleteUniqueIdStatus",
+          "documentation":"<p>The status of the batch delete unique ID operation.</p>"
+        },
+        "errors":{
+          "shape":"DeleteUniqueIdErrorsList",
+          "documentation":"<p> The errors from deleting multiple unique IDs.</p>"
+        },
         "deleted":{
           "shape":"DeletedUniqueIdList",
           "documentation":"<p>The unique IDs that were deleted.</p>"
@@ -833,14 +859,6 @@
         "disconnectedUniqueIds":{
           "shape":"DisconnectedUniqueIdsList",
           "documentation":"<p>The unique IDs that were disconnected.</p>"
-        },
-        "errors":{
-          "shape":"DeleteUniqueIdErrorsList",
-          "documentation":"<p> The errors from deleting multiple unique IDs.</p>"
-        },
-        "status":{
-          "shape":"DeleteUniqueIdStatus",
-          "documentation":"<p>The status of the batch delete unique ID operation.</p>"
         }
       }
     },
@@ -853,7 +871,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>The request could not be processed because of conflict in the current state of the resource. Example: Workflow already exists, Schema already exists, Workflow is currently running, etc. </p>",
+      "documentation":"<p>The request couldn't be processed because of conflict in the current state of the resource. Example: Workflow already exists, Schema already exists, Workflow is currently running, etc. </p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -863,26 +881,34 @@
     "CreateIdMappingWorkflowInput":{
       "type":"structure",
       "required":[
-        "idMappingTechniques",
+        "workflowName",
         "inputSourceConfig",
-        "workflowName"
+        "idMappingTechniques"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow. There can't be multiple <code>IdMappingWorkflows</code> with the same name.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "idMappingTechniques":{
-          "shape":"IdMappingTechniques",
-          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
-        },
         "inputSourceConfig":{
           "shape":"IdMappingWorkflowInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"IdMappingWorkflowOutputSourceConfig",
-          "documentation":"<p>A list of <code>IdMappingWorkflowOutputSource</code> objects, each of which contains fields <code>OutputS3Path</code> and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>IdMappingWorkflowOutputSource</code> objects, each of which contains fields <code>outputS3Path</code> and <code>KMSArn</code>.</p>"
+        },
+        "idMappingTechniques":{
+          "shape":"IdMappingTechniques",
+          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IdMappingIncrementalRunConfig",
+          "documentation":"<p> The incremental run configuration for the ID mapping workflow.</p>"
         },
         "roleArn":{
           "shape":"IdMappingRoleArn",
@@ -891,49 +917,49 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow. There can't be multiple <code>IdMappingWorkflows</code> with the same name.</p>"
         }
       }
     },
     "CreateIdMappingWorkflowOutput":{
       "type":"structure",
       "required":[
-        "idMappingTechniques",
-        "inputSourceConfig",
+        "workflowName",
         "workflowArn",
-        "workflowName"
+        "inputSourceConfig",
+        "idMappingTechniques"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"IdMappingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IDMappingWorkflow</code>.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "idMappingTechniques":{
-          "shape":"IdMappingTechniques",
-          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
-        },
         "inputSourceConfig":{
           "shape":"IdMappingWorkflowInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"IdMappingWorkflowOutputSourceConfig",
-          "documentation":"<p>A list of <code>IdMappingWorkflowOutputSource</code> objects, each of which contains fields <code>OutputS3Path</code> and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>IdMappingWorkflowOutputSource</code> objects, each of which contains fields <code>outputS3Path</code> and <code>KMSArn</code>.</p>"
+        },
+        "idMappingTechniques":{
+          "shape":"IdMappingTechniques",
+          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IdMappingIncrementalRunConfig",
+          "documentation":"<p> The incremental run configuration for the ID mapping workflow.</p>"
         },
         "roleArn":{
           "shape":"IdMappingRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to create resources on your behalf as part of workflow execution.</p>"
-        },
-        "workflowArn":{
-          "shape":"IdMappingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IDMappingWorkflow</code>.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       }
     },
@@ -944,21 +970,25 @@
         "type"
       ],
       "members":{
+        "idNamespaceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the ID namespace.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the ID namespace.</p>"
         },
+        "inputSourceConfig":{
+          "shape":"IdNamespaceInputSourceConfig",
+          "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
+        },
         "idMappingWorkflowProperties":{
           "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
           "documentation":"<p>Determines the properties of <code>IdMappingWorflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
         },
-        "idNamespaceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the ID namespace.</p>"
-        },
-        "inputSourceConfig":{
-          "shape":"IdNamespaceInputSourceConfig",
-          "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
+        "type":{
+          "shape":"IdNamespaceType",
+          "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>. </p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> to which all <code>sourceIds</code> will resolve to.</p>"
         },
         "roleArn":{
           "shape":"RoleArn",
@@ -967,95 +997,95 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "type":{
-          "shape":"IdNamespaceType",
-          "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>. </p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> to which all <code>sourceIds</code> will resolve to.</p>"
         }
       }
     },
     "CreateIdNamespaceOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "idNamespaceArn",
         "idNamespaceName",
+        "idNamespaceArn",
         "type",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the ID namespace.</p>"
-        },
-        "idMappingWorkflowProperties":{
-          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
-          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
+        "idNamespaceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the ID namespace.</p>"
         },
         "idNamespaceArn":{
           "shape":"IdNamespaceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the ID namespace.</p>"
         },
-        "idNamespaceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the ID namespace.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the ID namespace.</p>"
         },
         "inputSourceConfig":{
           "shape":"IdNamespaceInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in <code>inputSourceConfig</code> on your behalf as part of the workflow run.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "idMappingWorkflowProperties":{
+          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
+          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
         },
         "type":{
           "shape":"IdNamespaceType",
           "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>.</p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> to which all <code>sourceIds</code> will resolve to.</p>"
         },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in <code>inputSourceConfig</code> on your behalf as part of the workflow run.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
+        },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the ID namespace was last updated.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
     "CreateMatchingWorkflowInput":{
       "type":"structure",
       "required":[
+        "workflowName",
         "inputSourceConfig",
         "outputSourceConfig",
         "resolutionTechniques",
-        "roleArn",
-        "workflowName"
+        "roleArn"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow. There can't be multiple <code>MatchingWorkflows</code> with the same name.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "incrementalRunConfig":{
-          "shape":"IncrementalRunConfig",
-          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
-        },
         "inputSourceConfig":{
           "shape":"InputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"OutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code>, <code>ApplyNormalization</code>, and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code>, <code>applyNormalization</code>, <code>KMSArn</code>, and <code>output</code>.</p>"
         },
         "resolutionTechniques":{
           "shape":"ResolutionTechniques",
           "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
         },
+        "incrementalRunConfig":{
+          "shape":"IncrementalRunConfig",
+          "documentation":"<p>Optional. An object that defines the incremental run type. This object contains only the <code>incrementalRunType</code> field, which appears as \"Automatic\" in the console. </p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>"
+        },
         "roleArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to create resources on your behalf as part of workflow execution.</p>"
@@ -1063,65 +1093,65 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow. There can't be multiple <code>MatchingWorkflows</code> with the same name.</p>"
         }
       }
     },
     "CreateMatchingWorkflowOutput":{
       "type":"structure",
       "required":[
+        "workflowName",
+        "workflowArn",
         "inputSourceConfig",
         "outputSourceConfig",
         "resolutionTechniques",
-        "roleArn",
-        "workflowArn",
-        "workflowName"
+        "roleArn"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"MatchingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "incrementalRunConfig":{
-          "shape":"IncrementalRunConfig",
-          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
-        },
         "inputSourceConfig":{
           "shape":"InputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"OutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code>, <code>ApplyNormalization</code>, and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code>, <code>applyNormalization</code>, <code>KMSArn</code>, and <code>output</code>.</p>"
         },
         "resolutionTechniques":{
           "shape":"ResolutionTechniques",
           "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
         },
+        "incrementalRunConfig":{
+          "shape":"IncrementalRunConfig",
+          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
+        },
         "roleArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to create resources on your behalf as part of workflow execution.</p>"
-        },
-        "workflowArn":{
-          "shape":"MatchingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       }
     },
     "CreateSchemaMappingInput":{
       "type":"structure",
       "required":[
-        "mappedInputFields",
-        "schemaName"
+        "schemaName",
+        "mappedInputFields"
       ],
       "members":{
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema. There can't be multiple <code>SchemaMappings</code> with the same name.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the schema.</p>"
@@ -1130,10 +1160,6 @@
           "shape":"SchemaInputAttributes",
           "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching.</p>"
         },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema. There can't be multiple <code>SchemaMappings</code> with the same name.</p>"
-        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -1143,12 +1169,20 @@
     "CreateSchemaMappingOutput":{
       "type":"structure",
       "required":[
-        "description",
-        "mappedInputFields",
+        "schemaName",
         "schemaArn",
-        "schemaName"
+        "description",
+        "mappedInputFields"
       ],
       "members":{
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema.</p>"
+        },
+        "schemaArn":{
+          "shape":"SchemaMappingArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>SchemaMapping</code>.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the schema.</p>"
@@ -1156,14 +1190,6 @@
         "mappedInputFields":{
           "shape":"SchemaInputAttributes",
           "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching.</p>"
-        },
-        "schemaArn":{
-          "shape":"SchemaMappingArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>SchemaMapping</code>.</p>"
-        },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema.</p>"
         }
       }
     },
@@ -1265,13 +1291,13 @@
           "shape":"VeniceGlobalArn",
           "documentation":"<p>The ARN of the resource for which the policy need to be deleted.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The resource-based policy.</p>"
-        },
         "token":{
           "shape":"PolicyToken",
           "documentation":"<p>A unique identifier for the deleted policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy.</p>"
         }
       }
     },
@@ -1300,20 +1326,20 @@
     "DeleteUniqueIdError":{
       "type":"structure",
       "required":[
-        "errorType",
-        "uniqueId"
+        "uniqueId",
+        "errorType"
       ],
       "members":{
+        "uniqueId":{
+          "shape":"HeaderSafeUniqueId",
+          "documentation":"<p>The unique ID that couldn't be deleted.</p>"
+        },
         "errorType":{
           "shape":"DeleteUniqueIdErrorType",
-          "documentation":"<p> The error type for the batch delete unique ID operation.</p>"
-        },
-        "uniqueId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The unique ID that could not be deleted.</p>"
+          "documentation":"<p> The error type for the delete unique ID operation.</p> <p>The <code>SERVICE_ERROR</code> value indicates that an internal service-side problem occurred during the deletion operation.</p> <p>The <code>VALIDATION_ERROR</code> value indicates that the deletion operation couldn't complete because of invalid input parameters or data.</p>"
         }
       },
-      "documentation":"<p>The Delete Unique Id error.</p>"
+      "documentation":"<p>The error information provided when the delete unique ID operation doesn't complete.</p>"
     },
     "DeleteUniqueIdErrorType":{
       "type":"string",
@@ -1338,7 +1364,7 @@
       "required":["uniqueId"],
       "members":{
         "uniqueId":{
-          "shape":"UniqueId",
+          "shape":"HeaderSafeUniqueId",
           "documentation":"<p> The unique ID of the deleted item.</p>"
         }
       },
@@ -1355,27 +1381,26 @@
     },
     "DisconnectedUniqueIdsList":{
       "type":"list",
-      "member":{"shape":"UniqueId"}
+      "member":{"shape":"HeaderSafeUniqueId"}
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "EntityName":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^[a-zA-Z_0-9-]*$"
+      "pattern":"[a-zA-Z_0-9-]*"
     },
     "EntityNameOrIdMappingWorkflowArn":{
       "type":"string",
-      "pattern":"^[a-zA-Z_0-9-=+/]*$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idmappingworkflow/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"[a-zA-Z_0-9-=+/]*$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idmappingworkflow/[a-zA-Z_0-9-]{1,255})"
     },
     "EntityNameOrIdNamespaceArn":{
       "type":"string",
-      "pattern":"^[a-zA-Z_0-9-=+/]*$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"[a-zA-Z_0-9-=+/]*$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})"
     },
     "ErrorDetails":{
       "type":"structure",
@@ -1412,24 +1437,97 @@
       },
       "exception":true
     },
-    "GetIdMappingJobInput":{
+    "FailedRecord":{
       "type":"structure",
       "required":[
-        "jobId",
-        "workflowName"
+        "inputSourceARN",
+        "uniqueId",
+        "errorMessage"
       ],
       "members":{
-        "jobId":{
-          "shape":"JobId",
-          "documentation":"<p>The ID of the job.</p>",
+        "inputSourceARN":{
+          "shape":"InputSourceARN",
+          "documentation":"<p> The input source ARN of the record that didn't generate a Match ID.</p>"
+        },
+        "uniqueId":{
+          "shape":"String",
+          "documentation":"<p> The unique ID of the record that didn't generate a Match ID.</p>"
+        },
+        "errorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p> The error message for the record that didn't generate a Match ID.</p>"
+        }
+      },
+      "documentation":"<p>The record that didn't generate a Match ID.</p>"
+    },
+    "FailedRecordsList":{
+      "type":"list",
+      "member":{"shape":"FailedRecord"}
+    },
+    "GenerateMatchIdInput":{
+      "type":"structure",
+      "required":[
+        "workflowName",
+        "records"
+      ],
+      "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p> The name of the rule-based matching workflow.</p>",
           "location":"uri",
-          "locationName":"jobId"
+          "locationName":"workflowName"
+        },
+        "records":{
+          "shape":"GenerateMatchIdInputRecordsList",
+          "documentation":"<p> The records to match.</p>"
         },
+        "processingType":{
+          "shape":"ProcessingType",
+          "documentation":"<p>The processing mode that determines how Match IDs are generated and results are saved. Each mode provides different levels of accuracy, response time, and completeness of results.</p> <p>If not specified, defaults to <code>CONSISTENT</code>.</p> <p> <code>CONSISTENT</code>: Performs immediate lookup and matching against all existing records, with results saved synchronously. Provides highest accuracy but slower response time.</p> <p> <code>EVENTUAL</code> (shown as <i>Background</i> in the console): Performs initial match ID lookup or generation immediately, with record updates processed asynchronously in the background. Offers faster initial response time, with complete matching results available later in S3. </p> <p> <code>EVENTUAL_NO_LOOKUP</code> (shown as <i>Quick ID generation</i> in the console): Generates new match IDs without checking existing matches, with updates processed asynchronously. Provides fastest response time but should only be used for records known to be unique. </p>"
+        }
+      }
+    },
+    "GenerateMatchIdInputRecordsList":{
+      "type":"list",
+      "member":{"shape":"Record"},
+      "max":1,
+      "min":1
+    },
+    "GenerateMatchIdOutput":{
+      "type":"structure",
+      "required":[
+        "matchGroups",
+        "failedRecords"
+      ],
+      "members":{
+        "matchGroups":{
+          "shape":"MatchGroupsList",
+          "documentation":"<p> The match groups from the generated match ID.</p>"
+        },
+        "failedRecords":{
+          "shape":"FailedRecordsList",
+          "documentation":"<p> The records that didn't receive a generated Match ID.</p>"
+        }
+      }
+    },
+    "GetIdMappingJobInput":{
+      "type":"structure",
+      "required":[
+        "workflowName",
+        "jobId"
+      ],
+      "members":{
         "workflowName":{
           "shape":"EntityNameOrIdMappingWorkflowArn",
           "documentation":"<p>The name of the workflow.</p>",
           "location":"uri",
           "locationName":"workflowName"
+        },
+        "jobId":{
+          "shape":"JobId",
+          "documentation":"<p>The ID of the job.</p>",
+          "location":"uri",
+          "locationName":"jobId"
         }
       }
     },
@@ -1437,34 +1535,38 @@
       "type":"structure",
       "required":[
         "jobId",
-        "startTime",
-        "status"
+        "status",
+        "startTime"
       ],
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the job has finished.</p>"
-        },
-        "errorDetails":{"shape":"ErrorDetails"},
         "jobId":{
           "shape":"JobId",
           "documentation":"<p>The ID of the job.</p>"
         },
+        "status":{
+          "shape":"JobStatus",
+          "documentation":"<p>The current status of the job.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the job was started.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the job has finished.</p>"
+        },
         "metrics":{
           "shape":"IdMappingJobMetrics",
           "documentation":"<p>Metrics associated with the execution, specifically total records processed, unique IDs generated, and records the execution skipped.</p>"
         },
+        "errorDetails":{"shape":"ErrorDetails"},
         "outputSourceConfig":{
           "shape":"IdMappingJobOutputSourceConfig",
           "documentation":"<p>A list of <code>OutputSource</code> objects.</p>"
         },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the job was started.</p>"
-        },
-        "status":{
-          "shape":"JobStatus",
-          "documentation":"<p>The current status of the job.</p>"
+        "jobType":{
+          "shape":"JobType",
+          "documentation":"<p> The job type of the ID mapping job.</p> <p>A value of <code>INCREMENTAL</code> indicates that only new or changed data was processed since the last job run. This is the default job type if the workflow was created with an <code>incrementalRunConfig</code>.</p> <p>A value of <code>BATCH</code> indicates that all data was processed from the input source, regardless of previous job runs. This is the default job type if the workflow wasn't created with an <code>incrementalRunConfig</code>.</p> <p>A value of <code>DELETE_ONLY</code> indicates that only deletion requests from <code>BatchDeleteUniqueIds</code> were processed.</p>"
         }
       }
     },
@@ -1483,53 +1585,57 @@
     "GetIdMappingWorkflowOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "idMappingTechniques",
-        "inputSourceConfig",
-        "updatedAt",
+        "workflowName",
         "workflowArn",
-        "workflowName"
+        "inputSourceConfig",
+        "idMappingTechniques",
+        "createdAt",
+        "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the workflow was created.</p>"
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"IdMappingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IdMappingWorkflow</code> .</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "idMappingTechniques":{
-          "shape":"IdMappingTechniques",
-          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
-        },
         "inputSourceConfig":{
           "shape":"IdMappingWorkflowInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"IdMappingWorkflowOutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code> and <code>KMSArn</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code> and <code>KMSArn</code>.</p>"
         },
-        "roleArn":{
-          "shape":"IdMappingRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
+        "idMappingTechniques":{
+          "shape":"IdMappingTechniques",
+          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
         },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the workflow was created.</p>"
         },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the workflow was last updated.</p>"
         },
-        "workflowArn":{
-          "shape":"IdMappingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IdMappingWorkflow</code> .</p>"
+        "incrementalRunConfig":{
+          "shape":"IdMappingIncrementalRunConfig",
+          "documentation":"<p> The incremental run configuration for the ID mapping workflow.</p>"
         },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
+        "roleArn":{
+          "shape":"IdMappingRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
@@ -1548,75 +1654,75 @@
     "GetIdNamespaceOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "idNamespaceArn",
         "idNamespaceName",
+        "idNamespaceArn",
         "type",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the ID namespace.</p>"
-        },
-        "idMappingWorkflowProperties":{
-          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
-          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
+        "idNamespaceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the ID namespace.</p>"
         },
         "idNamespaceArn":{
           "shape":"IdNamespaceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the ID namespace.</p>"
         },
-        "idNamespaceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the ID namespace.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the ID namespace.</p>"
         },
         "inputSourceConfig":{
           "shape":"IdNamespaceInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in this <code>IdNamespace</code> on your behalf as part of a workflow run.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "idMappingWorkflowProperties":{
+          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
+          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
         },
         "type":{
           "shape":"IdNamespaceType",
           "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>.</p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> to which all <code>sourceIds</code> will resolve to.</p>"
         },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in this <code>IdNamespace</code> on your behalf as part of a workflow run.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
+        },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the ID namespace was last updated.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
     "GetMatchIdInput":{
       "type":"structure",
       "required":[
-        "record",
-        "workflowName"
+        "workflowName",
+        "record"
       ],
       "members":{
-        "applyNormalization":{
-          "shape":"Boolean",
-          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
-        },
-        "record":{
-          "shape":"RecordAttributeMap",
-          "documentation":"<p>The record to fetch the Match ID for.</p>"
-        },
         "workflowName":{
           "shape":"EntityName",
           "documentation":"<p>The name of the workflow.</p>",
           "location":"uri",
           "locationName":"workflowName"
+        },
+        "record":{
+          "shape":"RecordAttributeMap",
+          "documentation":"<p>The record to fetch the Match ID for.</p>"
+        },
+        "applyNormalization":{
+          "shape":"Boolean",
+          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
         }
       }
     },
@@ -1636,21 +1742,21 @@
     "GetMatchingJobInput":{
       "type":"structure",
       "required":[
-        "jobId",
-        "workflowName"
+        "workflowName",
+        "jobId"
       ],
       "members":{
-        "jobId":{
-          "shape":"JobId",
-          "documentation":"<p>The ID of the job.</p>",
-          "location":"uri",
-          "locationName":"jobId"
-        },
         "workflowName":{
           "shape":"EntityName",
           "documentation":"<p>The name of the workflow.</p>",
           "location":"uri",
           "locationName":"workflowName"
+        },
+        "jobId":{
+          "shape":"JobId",
+          "documentation":"<p>The ID of the job.</p>",
+          "location":"uri",
+          "locationName":"jobId"
         }
       }
     },
@@ -1658,37 +1764,37 @@
       "type":"structure",
       "required":[
         "jobId",
-        "startTime",
-        "status"
+        "status",
+        "startTime"
       ],
       "members":{
+        "jobId":{
+          "shape":"JobId",
+          "documentation":"<p>The unique identifier of the matching job.</p>"
+        },
+        "status":{
+          "shape":"JobStatus",
+          "documentation":"<p>The current status of the job.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the job was started.</p>"
+        },
         "endTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time at which the job has finished.</p>"
         },
-        "errorDetails":{
-          "shape":"ErrorDetails",
-          "documentation":"<p>An object containing an error message, if there was an error.</p>"
-        },
-        "jobId":{
-          "shape":"JobId",
-          "documentation":"<p>The ID of the job.</p>"
-        },
         "metrics":{
           "shape":"JobMetrics",
           "documentation":"<p>Metrics associated with the execution, specifically total records processed, unique IDs generated, and records the execution skipped.</p>"
         },
+        "errorDetails":{
+          "shape":"ErrorDetails",
+          "documentation":"<p>An object containing an error message, if there was an error.</p>"
+        },
         "outputSourceConfig":{
           "shape":"JobOutputSourceConfig",
           "documentation":"<p>A list of <code>OutputSource</code> objects.</p>"
-        },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the job was started.</p>"
-        },
-        "status":{
-          "shape":"JobStatus",
-          "documentation":"<p>The current status of the job.</p>"
         }
       }
     },
@@ -1707,40 +1813,52 @@
     "GetMatchingWorkflowOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
+        "workflowName",
+        "workflowArn",
         "inputSourceConfig",
         "outputSourceConfig",
         "resolutionTechniques",
-        "roleArn",
+        "createdAt",
         "updatedAt",
-        "workflowArn",
-        "workflowName"
+        "roleArn"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the workflow was created.</p>"
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"MatchingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "incrementalRunConfig":{
-          "shape":"IncrementalRunConfig",
-          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
-        },
         "inputSourceConfig":{
           "shape":"InputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"OutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code>, <code>ApplyNormalization</code>, and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code>, <code>applyNormalization</code>, <code>KMSArn</code>, and <code>output</code>.</p>"
         },
         "resolutionTechniques":{
           "shape":"ResolutionTechniques",
           "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the workflow was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the workflow was last updated.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IncrementalRunConfig",
+          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
+        },
         "roleArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
@@ -1748,18 +1866,6 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "updatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the workflow was last updated.</p>"
-        },
-        "workflowArn":{
-          "shape":"MatchingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       }
     },
@@ -1786,13 +1892,13 @@
           "shape":"VeniceGlobalArn",
           "documentation":"<p>The Entity Resolution resource ARN.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The resource-based policy.</p>"
-        },
         "token":{
           "shape":"PolicyToken",
           "documentation":"<p>A unique identifier for the current revision of the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy.</p>"
         }
       }
     },
@@ -1820,67 +1926,67 @@
     "GetProviderServiceOutput":{
       "type":"structure",
       "required":[
-        "anonymizedOutput",
-        "providerEndpointConfiguration",
-        "providerEntityOutputDefinition",
         "providerName",
-        "providerServiceArn",
-        "providerServiceDisplayName",
         "providerServiceName",
-        "providerServiceType"
+        "providerServiceDisplayName",
+        "providerServiceType",
+        "providerServiceArn",
+        "providerEndpointConfiguration",
+        "anonymizedOutput",
+        "providerEntityOutputDefinition"
       ],
       "members":{
-        "anonymizedOutput":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether output data from the provider is anonymized. A value of <code>TRUE</code> means the output will be anonymized and you can't relate the data that comes back from the provider to the identifying input. A value of <code>FALSE</code> means the output won't be anonymized and you can relate the data that comes back from the provider to your source data. </p>"
+        "providerName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the provider. This name is typically the company name.</p>"
         },
-        "providerComponentSchema":{
-          "shape":"ProviderComponentSchema",
-          "documentation":"<p>Input schema for the provider service.</p>"
+        "providerServiceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the product that the provider service provides. </p>"
         },
-        "providerConfigurationDefinition":{
-          "shape":"Document",
-          "documentation":"<p>The definition of the provider configuration.</p>"
+        "providerServiceDisplayName":{
+          "shape":"ProviderServiceDisplayName",
+          "documentation":"<p>The display name of the provider service.</p>"
         },
-        "providerEndpointConfiguration":{
-          "shape":"ProviderEndpointConfiguration",
-          "documentation":"<p>The required configuration fields to use with the provider service.</p>"
+        "providerServiceType":{
+          "shape":"ServiceType",
+          "documentation":"<p>The type of provider service.</p>"
         },
-        "providerEntityOutputDefinition":{
+        "providerServiceArn":{
+          "shape":"ProviderServiceArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the provider service.</p>"
+        },
+        "providerConfigurationDefinition":{
           "shape":"Document",
-          "documentation":"<p>The definition of the provider entity output.</p>"
+          "documentation":"<p>The definition of the provider configuration.</p>"
         },
         "providerIdNameSpaceConfiguration":{
           "shape":"ProviderIdNameSpaceConfiguration",
           "documentation":"<p>The provider configuration required for different ID namespace types.</p>"
         },
-        "providerIntermediateDataAccessConfiguration":{
-          "shape":"ProviderIntermediateDataAccessConfiguration",
-          "documentation":"<p>The Amazon Web Services accounts and the S3 permissions that are required by some providers to create an S3 bucket for intermediate data storage.</p>"
-        },
         "providerJobConfiguration":{
           "shape":"Document",
           "documentation":"<p>Provider service job configurations.</p>"
         },
-        "providerName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the provider. This name is typically the company name.</p>"
+        "providerEndpointConfiguration":{
+          "shape":"ProviderEndpointConfiguration",
+          "documentation":"<p>The required configuration fields to use with the provider service.</p>"
         },
-        "providerServiceArn":{
-          "shape":"ProviderServiceArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the provider service.</p>"
+        "anonymizedOutput":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether output data from the provider is anonymized. A value of <code>TRUE</code> means the output will be anonymized and you can't relate the data that comes back from the provider to the identifying input. A value of <code>FALSE</code> means the output won't be anonymized and you can relate the data that comes back from the provider to your source data. </p>"
         },
-        "providerServiceDisplayName":{
-          "shape":"ProviderServiceDisplayName",
-          "documentation":"<p>The display name of the provider service.</p>"
+        "providerEntityOutputDefinition":{
+          "shape":"Document",
+          "documentation":"<p>The definition of the provider entity output.</p>"
         },
-        "providerServiceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the product that the provider service provides. </p>"
+        "providerIntermediateDataAccessConfiguration":{
+          "shape":"ProviderIntermediateDataAccessConfiguration",
+          "documentation":"<p>The Amazon Web Services accounts and the S3 permissions that are required by some providers to create an S3 bucket for intermediate data storage.</p>"
         },
-        "providerServiceType":{
-          "shape":"ServiceType",
-          "documentation":"<p>The type of provider service.</p>"
+        "providerComponentSchema":{
+          "shape":"ProviderComponentSchema",
+          "documentation":"<p>Input schema for the provider service.</p>"
         }
       }
     },
@@ -1899,48 +2005,68 @@
     "GetSchemaMappingOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "hasWorkflows",
-        "mappedInputFields",
-        "schemaArn",
         "schemaName",
-        "updatedAt"
+        "schemaArn",
+        "mappedInputFields",
+        "createdAt",
+        "updatedAt",
+        "hasWorkflows"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was created.</p>"
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema.</p>"
+        },
+        "schemaArn":{
+          "shape":"SchemaMappingArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the SchemaMapping.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the schema.</p>"
         },
-        "hasWorkflows":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether the schema mapping has been applied to a workflow.</p>"
-        },
         "mappedInputFields":{
           "shape":"SchemaInputAttributes",
-          "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information Venice uses for matching.</p>"
+          "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information Entity Resolution uses for matching.</p>"
         },
-        "schemaArn":{
-          "shape":"SchemaMappingArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the SchemaMapping.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was created.</p>"
         },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema.</p>"
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was last updated.</p>"
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "updatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was last updated.</p>"
+        "hasWorkflows":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the schema mapping has been applied to a workflow.</p>"
         }
       }
     },
+    "HeaderSafeUniqueId":{
+      "type":"string",
+      "max":780,
+      "min":1,
+      "pattern":"[a-zA-Z_0-9-+=/,]*"
+    },
+    "IdMappingIncrementalRunConfig":{
+      "type":"structure",
+      "members":{
+        "incrementalRunType":{
+          "shape":"IdMappingIncrementalRunType",
+          "documentation":"<p> The incremental run type for an ID mapping workflow.</p> <p>It takes only one value: <code>ON_DEMAND</code>. This setting runs the ID mapping workflow when it's manually triggered through the <code>StartIdMappingJob</code> API.</p>"
+        }
+      },
+      "documentation":"<p> Incremental run configuration for an ID mapping workflow.</p>"
+    },
+    "IdMappingIncrementalRunType":{
+      "type":"string",
+      "enum":["ON_DEMAND"]
+    },
     "IdMappingJobMetrics":{
       "type":"structure",
       "members":{
@@ -1948,10 +2074,18 @@
           "shape":"Integer",
           "documentation":"<p>The total number of records that were input for processing.</p>"
         },
+        "totalRecordsProcessed":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of records that were processed.</p>"
+        },
         "recordsNotProcessed":{
           "shape":"Integer",
           "documentation":"<p>The total number of records that did not get processed.</p>"
         },
+        "deleteRecordsProcessed":{
+          "shape":"Integer",
+          "documentation":"<p>The number of records processed that were marked for deletion in the input file using the DELETE schema mapping field. These are the records to be removed from the ID mapping table.</p>"
+        },
         "totalMappedRecords":{
           "shape":"Integer",
           "documentation":"<p> The total number of records that were mapped.</p>"
@@ -1964,34 +2098,62 @@
           "shape":"Integer",
           "documentation":"<p> The total number of distinct mapped target records.</p>"
         },
-        "totalRecordsProcessed":{
+        "uniqueRecordsLoaded":{
           "shape":"Integer",
-          "documentation":"<p>The total number of records that were processed.</p>"
+          "documentation":"<p>The number of de-duplicated processed records across all runs, excluding deletion-related records. Duplicates are determined by the field marked as UNIQUE_ID in your schema mapping. Records sharing the same value in this field are considered duplicates. For example, if you specified \"customer_id\" as a UNIQUE_ID field and had three records with the same customer_id value, they would count as one unique record in this metric. </p>"
+        },
+        "newMappedRecords":{
+          "shape":"Integer",
+          "documentation":"<p> The number of new mapped records.</p>"
+        },
+        "newMappedSourceRecords":{
+          "shape":"Integer",
+          "documentation":"<p> The number of new source records mapped.</p>"
+        },
+        "newMappedTargetRecords":{
+          "shape":"Integer",
+          "documentation":"<p> The number of new mapped target records.</p>"
+        },
+        "newUniqueRecordsLoaded":{
+          "shape":"Integer",
+          "documentation":"<p>The number of new unique records processed in the current job run, after removing duplicates. This metric excludes deletion-related records. Duplicates are determined by the field marked as UNIQUE_ID in your schema mapping. Records sharing the same value in this field are considered duplicates. For example, if your current run processes five new records with the same UNIQUE_ID value, they would count as one new unique record in this metric.</p>"
+        },
+        "mappedRecordsRemoved":{
+          "shape":"Integer",
+          "documentation":"<p> The number of mapped records removed.</p>"
+        },
+        "mappedSourceRecordsRemoved":{
+          "shape":"Integer",
+          "documentation":"<p> The number of source records removed due to ID mapping.</p>"
+        },
+        "mappedTargetRecordsRemoved":{
+          "shape":"Integer",
+          "documentation":"<p> The number of mapped target records removed.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>InputRecords</code>, <code>RecordsNotProcessed</code>, <code>TotalRecordsProcessed</code>, <code>TotalMappedRecords</code>, <code>TotalMappedSourceRecords</code>, and <code>TotalMappedTargetRecords</code>.</p>"
+      "documentation":"<p>An object that contains metrics about an ID mapping job, including counts of input records, processed records, and mapped records between source and target identifiers. </p>"
     },
     "IdMappingJobOutputSource":{
       "type":"structure",
       "required":[
-        "outputS3Path",
-        "roleArn"
+        "roleArn",
+        "outputS3Path"
       ],
       "members":{
-        "KMSArn":{
-          "shape":"KMSArn",
-          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf as part of workflow execution.</p>"
         },
         "outputS3Path":{
           "shape":"S3Path",
           "documentation":"<p>The S3 path to which Entity Resolution will write the output table.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf as part of workflow execution.</p>"
+        "KMSArn":{
+          "shape":"KMSArn",
+          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>KMSArn</code>, <code>OutputS3Path</code>, and <code>RoleARN</code>.</p>"
+      "documentation":"<p>An object containing <code>KMSArn</code>, <code>outputS3Path</code>, and <code>roleARN</code>.</p>"
     },
     "IdMappingJobOutputSourceConfig":{
       "type":"list",
@@ -2003,31 +2165,31 @@
       "type":"string",
       "max":512,
       "min":0,
-      "pattern":"^$|^arn:aws:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"$|^arn:aws:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "IdMappingRuleBasedProperties":{
       "type":"structure",
       "required":[
+        "ruleDefinitionType",
         "attributeMatchingModel",
-        "recordMatchingModel",
-        "ruleDefinitionType"
+        "recordMatchingModel"
       ],
       "members":{
+        "rules":{
+          "shape":"IdMappingRuleBasedPropertiesRulesList",
+          "documentation":"<p> The rules that can be used for ID mapping.</p>"
+        },
+        "ruleDefinitionType":{
+          "shape":"IdMappingWorkflowRuleDefinitionType",
+          "documentation":"<p> The set of rules you can use in an ID mapping workflow. The limitations specified for the source or target to define the match rules must be compatible.</p>"
+        },
         "attributeMatchingModel":{
           "shape":"AttributeMatchingModel",
-          "documentation":"<p>The comparison type. You can either choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A matches the value of the <code>BusinessEmail</code> field of Profile B, the two profiles are matched on the <code>Email</code> attribute type. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p>"
+          "documentation":"<p>The comparison type. You can either choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A matches the value of the <code>BusinessEmail</code> field of Profile B, the two profiles are matched on the <code>Email</code> attribute type. </p>"
         },
         "recordMatchingModel":{
           "shape":"RecordMatchingModel",
           "documentation":"<p> The type of matching record that is allowed to be used in an ID mapping workflow. </p> <p>If the value is set to <code>ONE_SOURCE_TO_ONE_TARGET</code>, only one record in the source can be matched to the same record in the target.</p> <p>If the value is set to <code>MANY_SOURCE_TO_ONE_TARGET</code>, multiple records in the source can be matched to one record in the target.</p>"
-        },
-        "ruleDefinitionType":{
-          "shape":"IdMappingWorkflowRuleDefinitionType",
-          "documentation":"<p> The set of rules you can use in an ID mapping workflow. The limitations specified for the source or target to define the match rules must be compatible.</p>"
-        },
-        "rules":{
-          "shape":"IdMappingRuleBasedPropertiesRulesList",
-          "documentation":"<p> The rules that can be used for ID mapping.</p>"
         }
       },
       "documentation":"<p> An object that defines the list of matching rules to run in an ID mapping workflow.</p>"
@@ -2046,13 +2208,13 @@
           "shape":"IdMappingType",
           "documentation":"<p>The type of ID mapping.</p>"
         },
-        "providerProperties":{
-          "shape":"ProviderProperties",
-          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
-        },
         "ruleBasedProperties":{
           "shape":"IdMappingRuleBasedProperties",
           "documentation":"<p> An object which defines any additional configurations required by rule-based matching.</p>"
+        },
+        "providerProperties":{
+          "shape":"ProviderProperties",
+          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
         }
       },
       "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
@@ -2066,14 +2228,14 @@
     },
     "IdMappingWorkflowArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idmappingworkflow/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idmappingworkflow/[a-zA-Z_0-9-]{1,255})"
     },
     "IdMappingWorkflowInputSource":{
       "type":"structure",
       "required":["inputSourceARN"],
       "members":{
         "inputSourceARN":{
-          "shape":"IdMappingWorkflowInputSourceInputSourceARNString",
+          "shape":"InputSourceARN",
           "documentation":"<p>An Glue table Amazon Resource Name (ARN) or a matching workflow ARN for the input source table.</p>"
         },
         "schemaName":{
@@ -2085,7 +2247,7 @@
           "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>. </p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> which all <code>sourceIds</code> will resolve to.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>InputSourceARN</code>, <code>SchemaName</code>, and <code>Type</code>.</p>"
+      "documentation":"<p>An object containing <code>inputSourceARN</code>, <code>schemaName</code>, and <code>type</code>.</p>"
     },
     "IdMappingWorkflowInputSourceConfig":{
       "type":"list",
@@ -2093,10 +2255,6 @@
       "max":20,
       "min":1
     },
-    "IdMappingWorkflowInputSourceInputSourceARNString":{
-      "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})$"
-    },
     "IdMappingWorkflowList":{
       "type":"list",
       "member":{"shape":"IdMappingWorkflowSummary"}
@@ -2105,13 +2263,13 @@
       "type":"structure",
       "required":["outputS3Path"],
       "members":{
-        "KMSArn":{
-          "shape":"KMSArn",
-          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
-        },
         "outputS3Path":{
           "shape":"S3Path",
           "documentation":"<p>The S3 path to which Entity Resolution will write the output table.</p>"
+        },
+        "KMSArn":{
+          "shape":"KMSArn",
+          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
         }
       },
       "documentation":"<p>The output source for the ID mapping workflow.</p>"
@@ -2136,12 +2294,20 @@
     "IdMappingWorkflowSummary":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "updatedAt",
+        "workflowName",
         "workflowArn",
-        "workflowName"
+        "createdAt",
+        "updatedAt"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"IdMappingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IdMappingWorkflow</code>.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the workflow was created.</p>"
@@ -2149,21 +2315,13 @@
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the workflow was last updated.</p>"
-        },
-        "workflowArn":{
-          "shape":"IdMappingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>IdMappingWorkflow</code>.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       },
       "documentation":"<p>A list of <code>IdMappingWorkflowSummary</code> objects, each of which contain the fields <code>WorkflowName</code>, <code>WorkflowArn</code>, <code>CreatedAt</code>, and <code>UpdatedAt</code>.</p>"
     },
     "IdNamespaceArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})"
     },
     "IdNamespaceIdMappingWorkflowMetadata":{
       "type":"structure",
@@ -2190,16 +2348,16 @@
           "shape":"IdMappingType",
           "documentation":"<p>The type of ID mapping.</p>"
         },
-        "providerProperties":{
-          "shape":"NamespaceProviderProperties",
-          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
-        },
         "ruleBasedProperties":{
           "shape":"NamespaceRuleBasedProperties",
           "documentation":"<p> An object which defines any additional configurations required by rule-based matching.</p>"
+        },
+        "providerProperties":{
+          "shape":"NamespaceProviderProperties",
+          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>IdMappingType</code>, <code>ProviderProperties</code>, and <code>RuleBasedProperties</code>.</p>"
+      "documentation":"<p>An object containing <code>idMappingType</code>, <code>providerProperties</code>, and <code>ruleBasedProperties</code>.</p>"
     },
     "IdNamespaceIdMappingWorkflowPropertiesList":{
       "type":"list",
@@ -2212,7 +2370,7 @@
       "required":["inputSourceARN"],
       "members":{
         "inputSourceARN":{
-          "shape":"IdNamespaceInputSourceInputSourceARNString",
+          "shape":"InputSourceARN",
           "documentation":"<p>An Glue table Amazon Resource Name (ARN) or a matching workflow ARN for the input source table.</p>"
         },
         "schemaName":{
@@ -2220,7 +2378,7 @@
           "documentation":"<p>The name of the schema.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
+      "documentation":"<p>An object containing <code>inputSourceARN</code> and <code>schemaName</code>.</p>"
     },
     "IdNamespaceInputSourceConfig":{
       "type":"list",
@@ -2228,10 +2386,6 @@
       "max":20,
       "min":0
     },
-    "IdNamespaceInputSourceInputSourceARNString":{
-      "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})$"
-    },
     "IdNamespaceList":{
       "type":"list",
       "member":{"shape":"IdNamespaceSummary"}
@@ -2239,16 +2393,20 @@
     "IdNamespaceSummary":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "idNamespaceArn",
         "idNamespaceName",
+        "idNamespaceArn",
         "type",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
+        "idNamespaceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the ID namespace.</p>"
+        },
+        "idNamespaceArn":{
+          "shape":"IdNamespaceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ID namespace.</p>"
         },
         "description":{
           "shape":"Description",
@@ -2258,18 +2416,14 @@
           "shape":"IdNamespaceIdMappingWorkflowMetadataList",
           "documentation":"<p>An object which defines any additional configurations required by the ID mapping workflow.</p>"
         },
-        "idNamespaceArn":{
-          "shape":"IdNamespaceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the ID namespace.</p>"
-        },
-        "idNamespaceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the ID namespace.</p>"
-        },
         "type":{
           "shape":"IdNamespaceType",
           "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>.</p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> which all <code>sourceIds</code> will resolve to.</p>"
         },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
+        },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the ID namespace was last updated.</p>"
@@ -2289,10 +2443,10 @@
       "members":{
         "incrementalRunType":{
           "shape":"IncrementalRunType",
-          "documentation":"<p>The type of incremental run. It takes only one value: <code>IMMEDIATE</code>.</p>"
+          "documentation":"<p>The type of incremental run. The only valid value is <code>IMMEDIATE</code>. This appears as \"Automatic\" in the console.</p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>"
         }
       },
-      "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
+      "documentation":"<p>Optional. An object that defines the incremental run type. This object contains only the <code>incrementalRunType</code> field, which appears as \"Automatic\" in the console. </p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>"
     },
     "IncrementalRunType":{
       "type":"string",
@@ -2305,20 +2459,24 @@
         "schemaName"
       ],
       "members":{
-        "applyNormalization":{
-          "shape":"Boolean",
-          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
-        },
         "inputSourceARN":{
-          "shape":"InputSourceInputSourceARNString",
+          "shape":"InputSourceARN",
           "documentation":"<p>An Glue table Amazon Resource Name (ARN) for the input source table.</p>"
         },
         "schemaName":{
           "shape":"EntityName",
           "documentation":"<p>The name of the schema to be retrieved.</p>"
+        },
+        "applyNormalization":{
+          "shape":"Boolean",
+          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>InputSourceARN</code>, <code>SchemaName</code>, and <code>ApplyNormalization</code>.</p>"
+      "documentation":"<p>An object containing <code>inputSourceARN</code>, <code>schemaName</code>, and <code>applyNormalization</code>.</p>"
+    },
+    "InputSourceARN":{
+      "type":"string",
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})"
     },
     "InputSourceConfig":{
       "type":"list",
@@ -2326,10 +2484,6 @@
       "max":20,
       "min":1
     },
-    "InputSourceInputSourceARNString":{
-      "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(idnamespace/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})$|^arn:(aws|aws-us-gov|aws-cn):glue:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(table/[a-zA-Z_0-9-]{1,255}/[a-zA-Z_0-9-]{1,255})$"
-    },
     "Integer":{
       "type":"integer",
       "box":true
@@ -2358,7 +2512,7 @@
     },
     "JobId":{
       "type":"string",
-      "pattern":"^[a-f0-9]{32}$"
+      "pattern":"[a-f0-9]{32}"
     },
     "JobList":{
       "type":"list",
@@ -2371,42 +2525,46 @@
           "shape":"Integer",
           "documentation":"<p>The total number of input records.</p>"
         },
-        "matchIDs":{
+        "totalRecordsProcessed":{
           "shape":"Integer",
-          "documentation":"<p>The total number of <code>matchID</code>s generated.</p>"
+          "documentation":"<p>The total number of records processed.</p>"
         },
         "recordsNotProcessed":{
           "shape":"Integer",
           "documentation":"<p>The total number of records that did not get processed.</p>"
         },
-        "totalRecordsProcessed":{
+        "deleteRecordsProcessed":{
           "shape":"Integer",
-          "documentation":"<p>The total number of records processed.</p>"
+          "documentation":"<p>The number of records processed that were marked for deletion (<code>DELETE</code> = True) in the input file. This metric tracks records flagged for removal during the job execution.</p>"
+        },
+        "matchIDs":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of <code>matchID</code>s generated.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>InputRecords</code>, <code>TotalRecordsProcessed</code>, <code>MatchIDs</code>, and <code>RecordsNotProcessed</code>.</p>"
+      "documentation":"<p>An object containing <code>inputRecords</code>, <code>totalRecordsProcessed</code>, <code>matchIDs</code>, and <code>recordsNotProcessed</code>.</p>"
     },
     "JobOutputSource":{
       "type":"structure",
       "required":[
-        "outputS3Path",
-        "roleArn"
+        "roleArn",
+        "outputS3Path"
       ],
       "members":{
-        "KMSArn":{
-          "shape":"KMSArn",
-          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf as part of workflow execution.</p>"
         },
         "outputS3Path":{
           "shape":"S3Path",
           "documentation":"<p>The S3 path to which Entity Resolution will write the output table.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf as part of workflow execution.</p>"
+        "KMSArn":{
+          "shape":"KMSArn",
+          "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>KMSArn</code>, <code>OutputS3Path</code>, and <code>RoleArn</code>.</p>"
+      "documentation":"<p>An object containing <code>KMSArn</code>, <code>outputS3Path</code>, and <code>roleArn</code>.</p>"
     },
     "JobOutputSourceConfig":{
       "type":"list",
@@ -2427,42 +2585,50 @@
       "type":"structure",
       "required":[
         "jobId",
-        "startTime",
-        "status"
+        "status",
+        "startTime"
       ],
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the job has finished.</p>"
-        },
         "jobId":{
           "shape":"JobId",
           "documentation":"<p>The ID of the job.</p>"
         },
+        "status":{
+          "shape":"JobStatus",
+          "documentation":"<p>The current status of the job.</p>"
+        },
         "startTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time at which the job was started.</p>"
         },
-        "status":{
-          "shape":"JobStatus",
-          "documentation":"<p>The current status of the job.</p>"
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the job has finished.</p>"
         }
       },
-      "documentation":"<p>An object containing the <code>JobId</code>, <code>Status</code>, <code>StartTime</code>, and <code>EndTime</code> of a job.</p>"
+      "documentation":"<p>An object containing the <code>jobId</code>, <code>status</code>, <code>startTime</code>, and <code>endTime</code> of a job.</p>"
+    },
+    "JobType":{
+      "type":"string",
+      "enum":[
+        "BATCH",
+        "INCREMENTAL",
+        "DELETE_ONLY"
+      ]
     },
     "KMSArn":{
       "type":"string",
-      "pattern":"^arn:aws:kms:.*:[0-9]+:.*$"
+      "pattern":"arn:aws:kms:.*:[0-9]+:.*"
     },
     "ListIdMappingJobsInput":{
       "type":"structure",
       "required":["workflowName"],
       "members":{
-        "maxResults":{
-          "shape":"ListIdMappingJobsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "workflowName":{
+          "shape":"EntityNameOrIdMappingWorkflowArn",
+          "documentation":"<p>The name of the workflow to be retrieved.</p>",
+          "location":"uri",
+          "locationName":"workflowName"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -2470,11 +2636,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "workflowName":{
-          "shape":"EntityNameOrIdMappingWorkflowArn",
-          "documentation":"<p>The name of the workflow to be retrieved.</p>",
-          "location":"uri",
-          "locationName":"workflowName"
+        "maxResults":{
+          "shape":"ListIdMappingJobsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2500,17 +2666,17 @@
     "ListIdMappingWorkflowsInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListIdMappingWorkflowsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListIdMappingWorkflowsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2522,30 +2688,30 @@
     "ListIdMappingWorkflowsOutput":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from the previous API call.</p>"
-        },
         "workflowSummaries":{
           "shape":"IdMappingWorkflowList",
           "documentation":"<p>A list of <code>IdMappingWorkflowSummary</code> objects.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from the previous API call.</p>"
         }
       }
     },
     "ListIdNamespacesInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListIdNamespacesInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of <code>IdNamespace</code> objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListIdNamespacesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of <code>IdNamespace</code> objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2571,11 +2737,11 @@
       "type":"structure",
       "required":["workflowName"],
       "members":{
-        "maxResults":{
-          "shape":"ListMatchingJobsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow to be retrieved.</p>",
+          "location":"uri",
+          "locationName":"workflowName"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -2583,11 +2749,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow to be retrieved.</p>",
-          "location":"uri",
-          "locationName":"workflowName"
+        "maxResults":{
+          "shape":"ListMatchingJobsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2613,17 +2779,17 @@
     "ListMatchingWorkflowsInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListMatchingWorkflowsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListMatchingWorkflowsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2635,31 +2801,31 @@
     "ListMatchingWorkflowsOutput":{
       "type":"structure",
       "members":{
+        "workflowSummaries":{
+          "shape":"MatchingWorkflowList",
+          "documentation":"<p>A list of <code>MatchingWorkflowSummary</code> objects, each of which contain the fields <code>workflowName</code>, <code>workflowArn</code>, <code>resolutionType</code>, <code>createdAt</code>, and <code>updatedAt</code>.</p>"
+        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>"
-        },
-        "workflowSummaries":{
-          "shape":"MatchingWorkflowList",
-          "documentation":"<p>A list of <code>MatchingWorkflowSummary</code> objects, each of which contain the fields <code>WorkflowName</code>, <code>WorkflowArn</code>, <code>CreatedAt</code>, and <code>UpdatedAt</code>.</p>"
         }
       }
     },
     "ListProviderServicesInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListProviderServicesInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"ListProviderServicesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "providerName":{
           "shape":"EntityName",
           "documentation":"<p>The name of the provider. This name is typically the company name.</p>",
@@ -2677,30 +2843,30 @@
     "ListProviderServicesOutput":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from the previous API call.</p>"
-        },
         "providerServiceSummaries":{
           "shape":"ProviderServiceList",
           "documentation":"<p>A list of <code>ProviderServices</code> objects.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from the previous API call.</p>"
         }
       }
     },
     "ListSchemaMappingsInput":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListSchemaMappingsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of objects returned per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from the previous API call.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListSchemaMappingsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of objects returned per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -2712,13 +2878,13 @@
     "ListSchemaMappingsOutput":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from the previous API call.</p>"
-        },
         "schemaList":{
           "shape":"SchemaMappingList",
           "documentation":"<p>A list of <code>SchemaMappingSummary</code> objects, each of which contain the fields <code>SchemaName</code>, <code>SchemaArn</code>, <code>CreatedAt</code>, <code>UpdatedAt</code>.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from the previous API call.</p>"
         }
       }
     },
@@ -2744,6 +2910,33 @@
         }
       }
     },
+    "MatchGroup":{
+      "type":"structure",
+      "required":[
+        "records",
+        "matchId",
+        "matchRule"
+      ],
+      "members":{
+        "records":{
+          "shape":"MatchedRecordsList",
+          "documentation":"<p> The matched records.</p>"
+        },
+        "matchId":{
+          "shape":"String",
+          "documentation":"<p> The match ID.</p>"
+        },
+        "matchRule":{
+          "shape":"String",
+          "documentation":"<p> The match rule of the match group.</p>"
+        }
+      },
+      "documentation":"<p>The match group.</p>"
+    },
+    "MatchGroupsList":{
+      "type":"list",
+      "member":{"shape":"MatchGroup"}
+    },
     "MatchPurpose":{
       "type":"string",
       "enum":[
@@ -2751,9 +2944,31 @@
         "INDEXING"
       ]
     },
+    "MatchedRecord":{
+      "type":"structure",
+      "required":[
+        "inputSourceARN",
+        "recordId"
+      ],
+      "members":{
+        "inputSourceARN":{
+          "shape":"InputSourceARN",
+          "documentation":"<p> The input source ARN of the matched record.</p>"
+        },
+        "recordId":{
+          "shape":"String",
+          "documentation":"<p> The record ID of the matched record.</p>"
+        }
+      },
+      "documentation":"<p> The matched record.</p>"
+    },
+    "MatchedRecordsList":{
+      "type":"list",
+      "member":{"shape":"MatchedRecord"}
+    },
     "MatchingWorkflowArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(matchingworkflow/[a-zA-Z_0-9-]{1,255})"
     },
     "MatchingWorkflowList":{
       "type":"list",
@@ -2762,69 +2977,69 @@
     "MatchingWorkflowSummary":{
       "type":"structure",
       "required":[
+        "workflowName",
+        "workflowArn",
         "createdAt",
-        "resolutionType",
         "updatedAt",
-        "workflowArn",
-        "workflowName"
+        "resolutionType"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"MatchingWorkflowArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the workflow was created.</p>"
         },
-        "resolutionType":{
-          "shape":"ResolutionType",
-          "documentation":"<p>The method that has been specified for data matching, either using matching provided by Entity Resolution or through a provider service.</p>"
-        },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the workflow was last updated.</p>"
         },
-        "workflowArn":{
-          "shape":"MatchingWorkflowArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>MatchingWorkflow</code>.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
+        "resolutionType":{
+          "shape":"ResolutionType",
+          "documentation":"<p>The method that has been specified for data matching, either using matching provided by Entity Resolution or through a provider service.</p>"
         }
       },
-      "documentation":"<p>A list of <code>MatchingWorkflowSummary</code> objects, each of which contain the fields <code>WorkflowName</code>, <code>WorkflowArn</code>, <code>CreatedAt</code>, <code>UpdatedAt</code>.</p>"
+      "documentation":"<p>A list of <code>MatchingWorkflowSummary</code> objects, each of which contain the fields <code>workflowName</code>, <code>workflowArn</code>, <code>resolutionType</code>, <code>createdAt</code>, <code>updatedAt</code>.</p>"
     },
     "NamespaceProviderProperties":{
       "type":"structure",
       "required":["providerServiceArn"],
       "members":{
-        "providerConfiguration":{
-          "shape":"Document",
-          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
-        },
         "providerServiceArn":{
           "shape":"ProviderServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the provider service.</p>"
+        },
+        "providerConfiguration":{
+          "shape":"Document",
+          "documentation":"<p>An object which defines any additional configurations required by the provider service.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>ProviderConfiguration</code> and <code>ProviderServiceArn</code>.</p>"
+      "documentation":"<p>An object containing <code>providerConfiguration</code> and <code>providerServiceArn</code>.</p>"
     },
     "NamespaceRuleBasedProperties":{
       "type":"structure",
       "members":{
+        "rules":{
+          "shape":"NamespaceRuleBasedPropertiesRulesList",
+          "documentation":"<p> The rules for the ID namespace.</p>"
+        },
+        "ruleDefinitionTypes":{
+          "shape":"IdMappingWorkflowRuleDefinitionTypeList",
+          "documentation":"<p> The sets of rules you can use in an ID mapping workflow. The limitations specified for the source and target must be compatible.</p>"
+        },
         "attributeMatchingModel":{
           "shape":"AttributeMatchingModel",
-          "documentation":"<p>The comparison type. You can either choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A matches the value of <code>BusinessEmail</code> field of Profile B, the two profiles are matched on the <code>Email</code> attribute type. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p>"
+          "documentation":"<p>The comparison type. You can either choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A matches the value of <code>BusinessEmail</code> field of Profile B, the two profiles are matched on the <code>Email</code> attribute type. </p>"
         },
         "recordMatchingModels":{
           "shape":"RecordMatchingModelList",
           "documentation":"<p> The type of matching record that is allowed to be used in an ID mapping workflow. </p> <p>If the value is set to <code>ONE_SOURCE_TO_ONE_TARGET</code>, only one record in the source is matched to one record in the target. </p> <p>If the value is set to <code>MANY_SOURCE_TO_ONE_TARGET</code>, all matching records in the source are matched to one record in the target.</p>"
-        },
-        "ruleDefinitionTypes":{
-          "shape":"IdMappingWorkflowRuleDefinitionTypeList",
-          "documentation":"<p> The sets of rules you can use in an ID mapping workflow. The limitations specified for the source and target must be compatible.</p>"
-        },
-        "rules":{
-          "shape":"NamespaceRuleBasedPropertiesRulesList",
-          "documentation":"<p> The rules for the ID namespace.</p>"
         }
       },
       "documentation":"<p> The rule-based properties of an ID namespace. These properties define how the ID namespace can be used in an ID mapping workflow.</p>"
@@ -2839,19 +3054,19 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[a-zA-Z_0-9-=+/]*$"
+      "pattern":"[a-zA-Z_0-9-=+/]*"
     },
     "OutputAttribute":{
       "type":"structure",
       "required":["name"],
       "members":{
-        "hashed":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables the ability to hash the column values in the output.</p>"
-        },
         "name":{
           "shape":"AttributeName",
           "documentation":"<p>A name of a column to be written to the output. This must be an <code>InputField</code> name in the schema mapping.</p>"
+        },
+        "hashed":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables the ability to hash the column values in the output.</p>"
         }
       },
       "documentation":"<p>A list of <code>OutputAttribute</code> objects, each of which have the fields <code>Name</code> and <code>Hashed</code>. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed.</p>"
@@ -2859,25 +3074,25 @@
     "OutputSource":{
       "type":"structure",
       "required":[
-        "output",
-        "outputS3Path"
+        "outputS3Path",
+        "output"
       ],
       "members":{
+        "outputS3Path":{
+          "shape":"S3Path",
+          "documentation":"<p>The S3 path to which Entity Resolution will write the output table.</p>"
+        },
         "KMSArn":{
           "shape":"KMSArn",
           "documentation":"<p>Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key.</p>"
         },
-        "applyNormalization":{
-          "shape":"Boolean",
-          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
-        },
         "output":{
           "shape":"OutputSourceOutputList",
           "documentation":"<p>A list of <code>OutputAttribute</code> objects, each of which have the fields <code>Name</code> and <code>Hashed</code>. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed.</p>"
         },
-        "outputS3Path":{
-          "shape":"S3Path",
-          "documentation":"<p>The S3 path to which Entity Resolution will write the output table.</p>"
+        "applyNormalization":{
+          "shape":"Boolean",
+          "documentation":"<p>Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an <code>AttributeType</code> of <code>PHONE_NUMBER</code>, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890.</p>"
         }
       },
       "documentation":"<p>A list of <code>OutputAttribute</code> objects, each of which have the fields <code>Name</code> and <code>Hashed</code>. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed.</p>"
@@ -2903,18 +3118,26 @@
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
+      "pattern":"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"
+    },
+    "ProcessingType":{
+      "type":"string",
+      "enum":[
+        "CONSISTENT",
+        "EVENTUAL",
+        "EVENTUAL_NO_LOOKUP"
+      ]
     },
     "ProviderComponentSchema":{
       "type":"structure",
       "members":{
-        "providerSchemaAttributes":{
-          "shape":"ProviderSchemaAttributes",
-          "documentation":"<p>The provider schema attributes.</p>"
-        },
         "schemas":{
           "shape":"Schemas",
           "documentation":"<p>Input schema for the provider service.</p>"
+        },
+        "providerSchemaAttributes":{
+          "shape":"ProviderSchemaAttributes",
+          "documentation":"<p>The provider schema attributes.</p>"
         }
       },
       "documentation":"<p>The input schema supported by provider service.</p>"
@@ -2937,13 +3160,13 @@
           "shape":"String",
           "documentation":"<p>The description of the ID namespace.</p>"
         },
-        "providerSourceConfigurationDefinition":{
-          "shape":"Document",
-          "documentation":"<p>Configurations required for the source ID namespace.</p>"
-        },
         "providerTargetConfigurationDefinition":{
           "shape":"Document",
           "documentation":"<p>Configurations required for the target ID namespace.</p>"
+        },
+        "providerSourceConfigurationDefinition":{
+          "shape":"Document",
+          "documentation":"<p>Configurations required for the source ID namespace.</p>"
         }
       },
       "documentation":"<p>The provider configuration required for different ID namespace types.</p>"
@@ -2965,27 +3188,27 @@
     "ProviderMarketplaceConfiguration":{
       "type":"structure",
       "required":[
-        "assetId",
         "dataSetId",
-        "listingId",
-        "revisionId"
+        "revisionId",
+        "assetId",
+        "listingId"
       ],
       "members":{
-        "assetId":{
-          "shape":"String",
-          "documentation":"<p>The asset ID on Data Exchange.</p>"
-        },
         "dataSetId":{
           "shape":"String",
           "documentation":"<p>The dataset ID on Data Exchange.</p>"
         },
-        "listingId":{
-          "shape":"String",
-          "documentation":"<p>The listing ID on Data Exchange.</p>"
-        },
         "revisionId":{
           "shape":"String",
           "documentation":"<p>The revision ID on Data Exchange.</p>"
+        },
+        "assetId":{
+          "shape":"String",
+          "documentation":"<p>The asset ID on Data Exchange.</p>"
+        },
+        "listingId":{
+          "shape":"String",
+          "documentation":"<p>The listing ID on Data Exchange.</p>"
         }
       },
       "documentation":"<p>The identifiers of the provider service, from Data Exchange.</p>"
@@ -2994,17 +3217,17 @@
       "type":"structure",
       "required":["providerServiceArn"],
       "members":{
-        "intermediateSourceConfiguration":{
-          "shape":"IntermediateSourceConfiguration",
-          "documentation":"<p>The Amazon S3 location that temporarily stores your data while it processes. Your information won't be saved permanently.</p>"
+        "providerServiceArn":{
+          "shape":"ProviderServiceArn",
+          "documentation":"<p>The ARN of the provider service.</p>"
         },
         "providerConfiguration":{
           "shape":"Document",
           "documentation":"<p>The required configuration fields to use with the provider service.</p>"
         },
-        "providerServiceArn":{
-          "shape":"ProviderServiceArn",
-          "documentation":"<p>The ARN of the provider service.</p>"
+        "intermediateSourceConfiguration":{
+          "shape":"IntermediateSourceConfiguration",
+          "documentation":"<p>The Amazon S3 location that temporarily stores your data while it processes. Your information won't be saved permanently.</p>"
         }
       },
       "documentation":"<p>An object containing the <code>providerServiceARN</code>, <code>intermediateSourceConfiguration</code>, and <code>providerConfiguration</code>.</p>"
@@ -3020,17 +3243,17 @@
           "shape":"AttributeName",
           "documentation":"<p>The field name.</p>"
         },
-        "hashing":{
-          "shape":"Boolean",
-          "documentation":"<p>The hashing attribute of the provider schema.</p>"
+        "type":{
+          "shape":"SchemaAttributeType",
+          "documentation":"<p>The type of the provider schema attribute.</p> <p>LiveRamp supports: <code>NAME</code> | <code>NAME_FIRST</code> | <code>NAME_MIDDLE</code> | <code>NAME_LAST</code> | <code>ADDRESS</code> | <code>ADDRESS_STREET1</code> | <code>ADDRESS_STREET2</code> | <code>ADDRESS_STREET3</code> | <code>ADDRESS_CITY</code> | <code>ADDRESS_STATE</code> | <code>ADDRESS_COUNTRY</code> | <code>ADDRESS_POSTALCODE</code> | <code>PHONE</code> | <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> | <code>PROVIDER_ID</code> </p> <p>TransUnion supports: <code>NAME</code> | <code>NAME_FIRST</code> | <code>NAME_LAST</code> | <code>ADDRESS</code> | <code>ADDRESS_CITY</code> | <code>ADDRESS_STATE</code> | <code>ADDRESS_COUNTRY</code> | <code>ADDRESS_POSTALCODE</code> | <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> | <code>DATE</code> | <code>IPV4</code> | <code>IPV6</code> | <code>MAID</code> </p> <p>Unified ID 2.0 supports: <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> </p>"
         },
         "subType":{
           "shape":"AttributeName",
           "documentation":"<p>The sub type of the provider schema attribute.</p>"
         },
-        "type":{
-          "shape":"SchemaAttributeType",
-          "documentation":"<p>The type of the provider schema attribute.</p>"
+        "hashing":{
+          "shape":"Boolean",
+          "documentation":"<p>The hashing attribute of the provider schema.</p>"
         }
       },
       "documentation":"<p>The provider schema attribute.</p>"
@@ -3043,7 +3266,7 @@
       "type":"string",
       "max":255,
       "min":20,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):(entityresolution):([a-z]{2}-[a-z]{1,10}-[0-9])::providerservice/([a-zA-Z0-9_-]{1,255})/([a-zA-Z0-9_-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):(entityresolution):([a-z]{2}-[a-z]{1,10}-[0-9])::providerservice/([a-zA-Z0-9_-]{1,255})/([a-zA-Z0-9_-]{1,255})"
     },
     "ProviderServiceDisplayName":{
       "type":"string",
@@ -3057,21 +3280,21 @@
     "ProviderServiceSummary":{
       "type":"structure",
       "required":[
-        "providerName",
         "providerServiceArn",
+        "providerName",
         "providerServiceDisplayName",
         "providerServiceName",
         "providerServiceType"
       ],
       "members":{
-        "providerName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the provider. This name is typically the company name.</p>"
-        },
         "providerServiceArn":{
           "shape":"ProviderServiceArn",
           "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>providerService</code>.</p>"
         },
+        "providerName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the provider. This name is typically the company name.</p>"
+        },
         "providerServiceDisplayName":{
           "shape":"ProviderServiceDisplayName",
           "documentation":"<p>The display name of the provider service.</p>"
@@ -3100,13 +3323,13 @@
           "location":"uri",
           "locationName":"arn"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The resource-based policy.</p> <important> <p>If you set the value of the <code>effect</code> parameter in the <code>policy</code> to <code>Deny</code> for the <code>PutPolicy</code> operation, you must also set the value of the <code>effect</code> parameter to <code>Deny</code> for the <code>AddPolicyStatement</code> operation.</p> </important>"
-        },
         "token":{
           "shape":"PolicyToken",
           "documentation":"<p>A unique identifier for the current revision of the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy.</p> <important> <p>If you set the value of the <code>effect</code> parameter in the <code>policy</code> to <code>Deny</code> for the <code>PutPolicy</code> operation, you must also set the value of the <code>effect</code> parameter to <code>Deny</code> for the <code>AddPolicyStatement</code> operation.</p> </important>"
         }
       }
     },
@@ -3121,16 +3344,39 @@
           "shape":"VeniceGlobalArn",
           "documentation":"<p>The Entity Resolution resource ARN.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The resource-based policy.</p>"
-        },
         "token":{
           "shape":"PolicyToken",
           "documentation":"<p>A unique identifier for the current revision of the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The resource-based policy.</p>"
         }
       }
     },
+    "Record":{
+      "type":"structure",
+      "required":[
+        "inputSourceARN",
+        "uniqueId",
+        "recordAttributeMap"
+      ],
+      "members":{
+        "inputSourceARN":{
+          "shape":"InputSourceARN",
+          "documentation":"<p> The input source ARN of the record.</p>"
+        },
+        "uniqueId":{
+          "shape":"UniqueId",
+          "documentation":"<p> The unique ID of the record.</p>"
+        },
+        "recordAttributeMap":{
+          "shape":"RecordAttributeMapString255",
+          "documentation":"<p> The record's attribute map.</p>"
+        }
+      },
+      "documentation":"<p> The record.</p>"
+    },
     "RecordAttributeMap":{
       "type":"map",
       "key":{"shape":"RecordAttributeMapKeyString"},
@@ -3141,13 +3387,29 @@
       "type":"string",
       "max":255,
       "min":0,
-      "pattern":"^[a-zA-Z_0-9- \\t]*$"
+      "pattern":"[a-zA-Z_0-9- \\t]*"
+    },
+    "RecordAttributeMapString255":{
+      "type":"map",
+      "key":{"shape":"RecordAttributeMapString255KeyString"},
+      "value":{"shape":"RecordAttributeMapString255ValueString"},
+      "sensitive":true
+    },
+    "RecordAttributeMapString255KeyString":{
+      "type":"string",
+      "max":255,
+      "min":0
+    },
+    "RecordAttributeMapString255ValueString":{
+      "type":"string",
+      "max":255,
+      "min":0
     },
     "RecordAttributeMapValueString":{
       "type":"string",
       "max":255,
       "min":0,
-      "pattern":"^[a-zA-Z_0-9-./@ ()+\\t]*$"
+      "pattern":"[a-zA-Z_0-9-./@ ()+\\t]*"
     },
     "RecordMatchingModel":{
       "type":"string",
@@ -3168,17 +3430,21 @@
       "type":"structure",
       "required":["resolutionType"],
       "members":{
-        "providerProperties":{
-          "shape":"ProviderProperties",
-          "documentation":"<p>The properties of the provider service.</p>"
-        },
         "resolutionType":{
           "shape":"ResolutionType",
-          "documentation":"<p>The type of matching. There are three types of matching: <code>RULE_MATCHING</code>, <code>ML_MATCHING</code>, and <code>PROVIDER</code>.</p>"
+          "documentation":"<p>The type of matching workflow to create. Specify one of the following types: </p> <ul> <li> <p> <code>RULE_MATCHING</code>: Match records using configurable rule-based criteria </p> </li> <li> <p> <code>ML_MATCHING</code>: Match records using machine learning models </p> </li> <li> <p> <code>PROVIDER</code>: Match records using a third-party matching provider</p> </li> </ul>"
         },
         "ruleBasedProperties":{
           "shape":"RuleBasedProperties",
-          "documentation":"<p>An object which defines the list of matching rules to run and has a field <code>Rules</code>, which is a list of rule objects.</p>"
+          "documentation":"<p>An object which defines the list of matching rules to run and has a field <code>rules</code>, which is a list of rule objects.</p>"
+        },
+        "ruleConditionProperties":{
+          "shape":"RuleConditionProperties",
+          "documentation":"<p>An object containing the <code>rules</code> for a matching workflow.</p>"
+        },
+        "providerProperties":{
+          "shape":"ProviderProperties",
+          "documentation":"<p>The properties of the provider service.</p>"
         }
       },
       "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
@@ -3196,7 +3462,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>The resource could not be found. </p>",
+      "documentation":"<p>The resource couldn't be found. </p>",
       "error":{
         "httpStatusCode":404,
         "senderFault":true
@@ -3207,47 +3473,47 @@
       "type":"string",
       "max":512,
       "min":32,
-      "pattern":"^arn:aws:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "Rule":{
       "type":"structure",
       "required":[
-        "matchingKeys",
-        "ruleName"
+        "ruleName",
+        "matchingKeys"
       ],
       "members":{
-        "matchingKeys":{
-          "shape":"RuleMatchingKeysList",
-          "documentation":"<p>A list of <code>MatchingKeys</code>. The <code>MatchingKeys</code> must have been defined in the <code>SchemaMapping</code>. Two records are considered to match according to this rule if all of the <code>MatchingKeys</code> match.</p>"
-        },
         "ruleName":{
           "shape":"RuleRuleNameString",
           "documentation":"<p>A name for the matching rule.</p>"
+        },
+        "matchingKeys":{
+          "shape":"RuleMatchingKeysList",
+          "documentation":"<p>A list of <code>MatchingKeys</code>. The <code>MatchingKeys</code> must have been defined in the <code>SchemaMapping</code>. Two records are considered to match according to this rule if all of the <code>MatchingKeys</code> match.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>RuleName</code>, and <code>MatchingKeys</code>.</p>"
+      "documentation":"<p>An object containing the <code>ruleName</code> and <code>matchingKeys</code>.</p>"
     },
     "RuleBasedProperties":{
       "type":"structure",
       "required":[
-        "attributeMatchingModel",
-        "rules"
+        "rules",
+        "attributeMatchingModel"
       ],
       "members":{
+        "rules":{
+          "shape":"RuleBasedPropertiesRulesList",
+          "documentation":"<p>A list of <code>Rule</code> objects, each of which have fields <code>RuleName</code> and <code>MatchingKeys</code>.</p>"
+        },
         "attributeMatchingModel":{
           "shape":"AttributeMatchingModel",
-          "documentation":"<p>The comparison type. You can either choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A and the value of <code>BusinessEmail</code> field of Profile B matches, the two profiles are matched on the <code>Email</code> attribute type. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p>"
+          "documentation":"<p>The comparison type. You can choose <code>ONE_TO_ONE</code> or <code>MANY_TO_MANY</code> as the <code>attributeMatchingModel</code>. </p> <p>If you choose <code>ONE_TO_ONE</code>, the system can only match attributes if the sub-types are an exact match. For example, for the <code>Email</code> attribute type, the system will only consider it a match if the value of the <code>Email</code> field of Profile A matches the value of the <code>Email</code> field of Profile B.</p> <p>If you choose <code>MANY_TO_MANY</code>, the system can match attributes across the sub-types of an attribute type. For example, if the value of the <code>Email</code> field of Profile A and the value of <code>BusinessEmail</code> field of Profile B matches, the two profiles are matched on the <code>Email</code> attribute type. </p>"
         },
         "matchPurpose":{
           "shape":"MatchPurpose",
           "documentation":"<p> An indicator of whether to generate IDs and index the data or not.</p> <p>If you choose <code>IDENTIFIER_GENERATION</code>, the process generates IDs and indexes the data.</p> <p>If you choose <code>INDEXING</code>, the process indexes the data without generating IDs.</p>"
-        },
-        "rules":{
-          "shape":"RuleBasedPropertiesRulesList",
-          "documentation":"<p>A list of <code>Rule</code> objects, each of which have fields <code>RuleName</code> and <code>MatchingKeys</code>.</p>"
         }
       },
-      "documentation":"<p>An object which defines the list of matching rules to run in a matching workflow. RuleBasedProperties contain a <code>Rules</code> field, which is a list of rule objects.</p>"
+      "documentation":"<p>An object which defines the list of matching rules to run in a matching workflow. </p>"
     },
     "RuleBasedPropertiesRulesList":{
       "type":"list",
@@ -3255,23 +3521,69 @@
       "max":25,
       "min":1
     },
+    "RuleCondition":{
+      "type":"structure",
+      "required":[
+        "ruleName",
+        "condition"
+      ],
+      "members":{
+        "ruleName":{
+          "shape":"RuleConditionRuleNameString",
+          "documentation":"<p>A name for the matching rule.</p> <p>For example: <code>Rule1</code> </p>"
+        },
+        "condition":{
+          "shape":"RuleConditionConditionString",
+          "documentation":"<p>A statement that specifies the conditions for a matching rule.</p> <p>If your data is accurate, use an Exact matching function: <code>Exact</code> or <code>ExactManyToMany</code>. </p> <p>If your data has variations in spelling or pronunciation, use a Fuzzy matching function: <code>Cosine</code>, <code>Levenshtein</code>, or <code>Soundex</code>. </p> <p>Use operators if you want to combine (<code>AND</code>), separate (<code>OR</code>), or group matching functions <code>(...)</code>.</p> <p>For example: <code>(Cosine(a, 10) AND Exact(b, true)) OR ExactManyToMany(c, d)</code> </p>"
+        }
+      },
+      "documentation":"<p>An object that defines the <code>ruleCondition</code> and the <code>ruleName</code> to use in a matching workflow.</p>"
+    },
+    "RuleConditionConditionString":{
+      "type":"string",
+      "max":2048,
+      "min":0
+    },
+    "RuleConditionProperties":{
+      "type":"structure",
+      "required":["rules"],
+      "members":{
+        "rules":{
+          "shape":"RuleConditionPropertiesRulesList",
+          "documentation":"<p> A list of rule objects, each of which have fields <code>ruleName</code> and <code>condition</code>. </p>"
+        }
+      },
+      "documentation":"<p>The properties of a rule condition that provides the ability to use more complex syntax.</p>"
+    },
+    "RuleConditionPropertiesRulesList":{
+      "type":"list",
+      "member":{"shape":"RuleCondition"},
+      "max":25,
+      "min":1
+    },
+    "RuleConditionRuleNameString":{
+      "type":"string",
+      "max":255,
+      "min":0,
+      "pattern":"[a-zA-Z_0-9- ]*"
+    },
     "RuleMatchingKeysList":{
       "type":"list",
       "member":{"shape":"AttributeName"},
       "max":15,
-      "min":1
+      "min":0
     },
     "RuleRuleNameString":{
       "type":"string",
       "max":255,
       "min":0,
-      "pattern":"^[a-zA-Z_0-9- \\t]*$"
+      "pattern":"[a-zA-Z_0-9- ]*"
     },
     "S3Path":{
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/.*)?$"
+      "pattern":"s3://[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9](/.*)?"
     },
     "SchemaAttributeType":{
       "type":"string",
@@ -3295,7 +3607,10 @@
         "UNIQUE_ID",
         "DATE",
         "STRING",
-        "PROVIDER_ID"
+        "PROVIDER_ID",
+        "IPV4",
+        "IPV6",
+        "MAID"
       ]
     },
     "SchemaInputAttribute":{
@@ -3309,13 +3624,13 @@
           "shape":"AttributeName",
           "documentation":"<p>A string containing the field name.</p>"
         },
+        "type":{
+          "shape":"SchemaAttributeType",
+          "documentation":"<p>The type of the attribute, selected from a list of values.</p> <p>LiveRamp supports: <code>NAME</code> | <code>NAME_FIRST</code> | <code>NAME_MIDDLE</code> | <code>NAME_LAST</code> | <code>ADDRESS</code> | <code>ADDRESS_STREET1</code> | <code>ADDRESS_STREET2</code> | <code>ADDRESS_STREET3</code> | <code>ADDRESS_CITY</code> | <code>ADDRESS_STATE</code> | <code>ADDRESS_COUNTRY</code> | <code>ADDRESS_POSTALCODE</code> | <code>PHONE</code> | <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> | <code>PROVIDER_ID</code> </p> <p>TransUnion supports: <code>NAME</code> | <code>NAME_FIRST</code> | <code>NAME_LAST</code> | <code>ADDRESS</code> | <code>ADDRESS_CITY</code> | <code>ADDRESS_STATE</code> | <code>ADDRESS_COUNTRY</code> | <code>ADDRESS_POSTALCODE</code> | <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> | <code>IPV4</code> | <code>IPV6</code> | <code>MAID</code> </p> <p>Unified ID 2.0 supports: <code>PHONE_NUMBER</code> | <code>EMAIL_ADDRESS</code> | <code>UNIQUE_ID</code> </p> <note> <p>Normalization is only supported for <code>NAME</code>, <code>ADDRESS</code>, <code>PHONE</code>, and <code>EMAIL_ADDRESS</code>. </p> <p>If you want to normalize <code>NAME_FIRST</code>, <code>NAME_MIDDLE</code>, and <code>NAME_LAST</code>, you must group them by assigning them to the <code>NAME</code> <code>groupName</code>. </p> <p>If you want to normalize <code>ADDRESS_STREET1</code>, <code>ADDRESS_STREET2</code>, <code>ADDRESS_STREET3</code>, <code>ADDRESS_CITY</code>, <code>ADDRESS_STATE</code>, <code>ADDRESS_COUNTRY</code>, and <code>ADDRESS_POSTALCODE</code>, you must group them by assigning them to the <code>ADDRESS</code> <code>groupName</code>. </p> <p>If you want to normalize <code>PHONE_NUMBER</code> and <code>PHONE_COUNTRYCODE</code>, you must group them by assigning them to the <code>PHONE</code> <code>groupName</code>. </p> </note>"
+        },
         "groupName":{
           "shape":"AttributeName",
-          "documentation":"<p>A string that instructs Entity Resolution to combine several columns into a unified column with the identical attribute type. </p> <p>For example, when working with columns such as <code>first_name</code>, <code>middle_name</code>, and <code>last_name</code>, assigning them a common <code>groupName</code> will prompt Entity Resolution to concatenate them into a single value.</p>"
-        },
-        "hashed":{
-          "shape":"Boolean",
-          "documentation":"<p> Indicates if the column values are hashed in the schema input. If the value is set to <code>TRUE</code>, the column values are hashed. If the value is set to <code>FALSE</code>, the column values are cleartext.</p>"
+          "documentation":"<p>A string that instructs Entity Resolution to combine several columns into a unified column with the identical attribute type. </p> <p>For example, when working with columns such as <code>NAME_FIRST</code>, <code>NAME_MIDDLE</code>, and <code>NAME_LAST</code>, assigning them a common <code>groupName</code> will prompt Entity Resolution to concatenate them into a single value.</p>"
         },
         "matchKey":{
           "shape":"AttributeName",
@@ -3325,12 +3640,12 @@
           "shape":"AttributeName",
           "documentation":"<p>The subtype of the attribute, selected from a list of values.</p>"
         },
-        "type":{
-          "shape":"SchemaAttributeType",
-          "documentation":"<p>The type of the attribute, selected from a list of values.</p>"
+        "hashed":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if the column values are hashed in the schema input. </p> <p>If the value is set to <code>TRUE</code>, the column values are hashed. </p> <p>If the value is set to <code>FALSE</code>, the column values are cleartext.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>FieldName</code>, <code>Type</code>, <code>GroupName</code>, <code>MatchKey</code>, <code>Hashing</code>, and <code>SubType</code>.</p>"
+      "documentation":"<p>A configuration object for defining input data fields in Entity Resolution. The <code>SchemaInputAttribute</code> specifies how individual fields in your input data should be processed and matched.</p>"
     },
     "SchemaInputAttributes":{
       "type":"list",
@@ -3344,7 +3659,7 @@
     },
     "SchemaMappingArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(schemamapping/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:(schemamapping/[a-zA-Z_0-9-]{1,255})"
     },
     "SchemaMappingList":{
       "type":"list",
@@ -3353,35 +3668,35 @@
     "SchemaMappingSummary":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "hasWorkflows",
-        "schemaArn",
         "schemaName",
-        "updatedAt"
+        "schemaArn",
+        "createdAt",
+        "updatedAt",
+        "hasWorkflows"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was created.</p>"
-        },
-        "hasWorkflows":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether the schema mapping has been applied to a workflow.</p>"
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema.</p>"
         },
         "schemaArn":{
           "shape":"SchemaMappingArn",
           "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>SchemaMapping</code>.</p>"
         },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was created.</p>"
         },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the <code>SchemaMapping</code> was last updated.</p>"
+        },
+        "hasWorkflows":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the schema mapping has been applied to a workflow.</p>"
         }
       },
-      "documentation":"<p>An object containing <code>SchemaName</code>, <code>SchemaArn</code>, <code>CreatedAt</code>, and<code>UpdatedAt</code>.</p>"
+      "documentation":"<p>An object containing <code>schemaName</code>, <code>schemaArn</code>, <code>createdAt</code>, <code>updatedAt</code>, and <code>hasWorkflows</code>.</p>"
     },
     "Schemas":{
       "type":"list",
@@ -3398,15 +3713,19 @@
       "type":"structure",
       "required":["workflowName"],
       "members":{
-        "outputSourceConfig":{
-          "shape":"IdMappingJobOutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects.</p>"
-        },
         "workflowName":{
           "shape":"EntityNameOrIdMappingWorkflowArn",
           "documentation":"<p>The name of the ID mapping job to be retrieved.</p>",
           "location":"uri",
           "locationName":"workflowName"
+        },
+        "outputSourceConfig":{
+          "shape":"IdMappingJobOutputSourceConfig",
+          "documentation":"<p>A list of <code>OutputSource</code> objects.</p>"
+        },
+        "jobType":{
+          "shape":"JobType",
+          "documentation":"<p> The job type for the ID mapping job.</p> <p>If the <code>jobType</code> value is set to <code>INCREMENTAL</code>, only new or changed data is processed since the last job run. This is the default value if the <code>CreateIdMappingWorkflow</code> API is configured with an <code>incrementalRunConfig</code>.</p> <p>If the <code>jobType</code> value is set to <code>BATCH</code>, all data is processed from the input source, regardless of previous job runs. This is the default value if the <code>CreateIdMappingWorkflow</code> API isn't configured with an <code>incrementalRunConfig</code>.</p> <p>If the <code>jobType</code> value is set to <code>DELETE_ONLY</code>, only deletion requests from <code>BatchDeleteUniqueIds</code> are processed.</p>"
         }
       }
     },
@@ -3421,6 +3740,10 @@
         "outputSourceConfig":{
           "shape":"IdMappingJobOutputSourceConfig",
           "documentation":"<p>A list of <code>OutputSource</code> objects.</p>"
+        },
+        "jobType":{
+          "shape":"JobType",
+          "documentation":"<p> The job type for the started ID mapping job.</p> <p>A value of <code>INCREMENTAL</code> indicates that only new or changed data was processed since the last job run. This is the default job type if the workflow was created with an <code>incrementalRunConfig</code>.</p> <p>A value of <code>BATCH</code> indicates that all data was processed from the input source, regardless of previous job runs. This is the default job type if the workflow wasn't created with an <code>incrementalRunConfig</code>.</p> <p>A value of <code>DELETE_ONLY</code> indicates that only deletion requests from <code>BatchDeleteUniqueIds</code> were processed.</p>"
         }
       }
     },
@@ -3450,7 +3773,7 @@
       "type":"string",
       "max":64,
       "min":3,
-      "pattern":"^(entityresolution:[a-zA-Z0-9]+)$"
+      "pattern":"(entityresolution:[a-zA-Z0-9]+)"
     },
     "StatementActionList":{
       "type":"list",
@@ -3473,13 +3796,13 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[0-9A-Za-z]+$"
+      "pattern":"[0-9A-Za-z]+"
     },
     "StatementPrincipal":{
       "type":"string",
       "max":64,
       "min":12,
-      "pattern":"^(\\d{12})|([a-z0-9\\.]+)$"
+      "pattern":"(\\d{12})|([a-z0-9\\.]+)"
     },
     "StatementPrincipalList":{
       "type":"list",
@@ -3526,8 +3849,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3550,13 +3872,13 @@
     "Timestamp":{"type":"timestamp"},
     "UniqueId":{
       "type":"string",
-      "max":760,
+      "max":38,
       "min":1,
-      "pattern":"^[a-zA-Z_0-9-+=/,]*$"
+      "pattern":"[a-zA-Z0-9_-]*"
     },
     "UniqueIdList":{
       "type":"list",
-      "member":{"shape":"UniqueId"}
+      "member":{"shape":"HeaderSafeUniqueId"}
     },
     "UntagResourceInput":{
       "type":"structure",
@@ -3581,81 +3903,88 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateIdMappingWorkflowInput":{
       "type":"structure",
       "required":[
-        "idMappingTechniques",
+        "workflowName",
         "inputSourceConfig",
-        "workflowName"
+        "idMappingTechniques"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>",
+          "location":"uri",
+          "locationName":"workflowName"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "idMappingTechniques":{
-          "shape":"IdMappingTechniques",
-          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
-        },
         "inputSourceConfig":{
           "shape":"IdMappingWorkflowInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"IdMappingWorkflowOutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code> and <code>KMSArn</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code> and <code>KMSArn</code>.</p>"
+        },
+        "idMappingTechniques":{
+          "shape":"IdMappingTechniques",
+          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IdMappingIncrementalRunConfig",
+          "documentation":"<p> The incremental run configuration for the update ID mapping workflow.</p>"
         },
         "roleArn":{
           "shape":"IdMappingRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>",
-          "location":"uri",
-          "locationName":"workflowName"
         }
       }
     },
     "UpdateIdMappingWorkflowOutput":{
       "type":"structure",
       "required":[
-        "idMappingTechniques",
-        "inputSourceConfig",
+        "workflowName",
         "workflowArn",
-        "workflowName"
+        "inputSourceConfig",
+        "idMappingTechniques"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
+        "workflowArn":{
+          "shape":"IdMappingWorkflowArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the workflow role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "idMappingTechniques":{
-          "shape":"IdMappingTechniques",
-          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
-        },
         "inputSourceConfig":{
           "shape":"IdMappingWorkflowInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"IdMappingWorkflowOutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code> and <code>KMSArn</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code> and <code>KMSArn</code>.</p>"
+        },
+        "idMappingTechniques":{
+          "shape":"IdMappingTechniques",
+          "documentation":"<p>An object which defines the ID mapping technique and any additional configurations.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IdMappingIncrementalRunConfig",
+          "documentation":"<p> The incremental run configuration for the update ID mapping workflow output.</p>"
         },
         "roleArn":{
           "shape":"IdMappingRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
-        },
-        "workflowArn":{
-          "shape":"IdMappingWorkflowArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the workflow role. Entity Resolution assumes this role to access Amazon Web Services resources on your behalf.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       }
     },
@@ -3663,24 +3992,24 @@
       "type":"structure",
       "required":["idNamespaceName"],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the ID namespace.</p>"
-        },
-        "idMappingWorkflowProperties":{
-          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
-          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
-        },
         "idNamespaceName":{
           "shape":"EntityName",
           "documentation":"<p>The name of the ID namespace.</p>",
           "location":"uri",
           "locationName":"idNamespaceName"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the ID namespace.</p>"
+        },
         "inputSourceConfig":{
           "shape":"IdNamespaceInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
+        "idMappingWorkflowProperties":{
+          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
+          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
+        },
         "roleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in this <code>IdNamespace</code> on your behalf as part of a workflow run.</p>"
@@ -3690,45 +4019,45 @@
     "UpdateIdNamespaceOutput":{
       "type":"structure",
       "required":[
-        "createdAt",
-        "idNamespaceArn",
         "idNamespaceName",
+        "idNamespaceArn",
         "type",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the ID namespace.</p>"
-        },
-        "idMappingWorkflowProperties":{
-          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
-          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
+        "idNamespaceName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the ID namespace.</p>"
         },
         "idNamespaceArn":{
           "shape":"IdNamespaceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the ID namespace.</p>"
         },
-        "idNamespaceName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the ID namespace.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the ID namespace.</p>"
         },
         "inputSourceConfig":{
           "shape":"IdNamespaceInputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in this <code>IdNamespace</code> on your behalf as part of a workflow run.</p>"
+        "idMappingWorkflowProperties":{
+          "shape":"IdNamespaceIdMappingWorkflowPropertiesList",
+          "documentation":"<p>Determines the properties of <code>IdMappingWorkflow</code> where this <code>IdNamespace</code> can be used as a <code>Source</code> or a <code>Target</code>.</p>"
         },
         "type":{
           "shape":"IdNamespaceType",
           "documentation":"<p>The type of ID namespace. There are two types: <code>SOURCE</code> and <code>TARGET</code>.</p> <p>The <code>SOURCE</code> contains configurations for <code>sourceId</code> data that will be processed in an ID mapping workflow. </p> <p>The <code>TARGET</code> contains a configuration of <code>targetId</code> to which all <code>sourceIds</code> will resolve to.</p>"
         },
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to access the resources defined in this <code>IdNamespace</code> on your behalf as part of a workflow run.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ID namespace was created.</p>"
+        },
         "updatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the ID namespace was last updated.</p>"
@@ -3738,92 +4067,98 @@
     "UpdateMatchingWorkflowInput":{
       "type":"structure",
       "required":[
+        "workflowName",
         "inputSourceConfig",
         "outputSourceConfig",
         "resolutionTechniques",
-        "roleArn",
-        "workflowName"
+        "roleArn"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow to be retrieved.</p>",
+          "location":"uri",
+          "locationName":"workflowName"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "incrementalRunConfig":{
-          "shape":"IncrementalRunConfig",
-          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
-        },
         "inputSourceConfig":{
           "shape":"InputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"OutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code>, <code>ApplyNormalization</code>, and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code>, <code>applyNormalization</code>, <code>KMSArn</code>, and <code>output</code>.</p>"
         },
         "resolutionTechniques":{
           "shape":"ResolutionTechniques",
           "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
         },
+        "incrementalRunConfig":{
+          "shape":"IncrementalRunConfig",
+          "documentation":"<p>Optional. An object that defines the incremental run type. This object contains only the <code>incrementalRunType</code> field, which appears as \"Automatic\" in the console. </p> <important> <p>For workflows where <code>resolutionType</code> is <code>ML_MATCHING</code> or <code>PROVIDER</code>, incremental processing is not supported. </p> </important>"
+        },
         "roleArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to create resources on your behalf as part of workflow execution.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow to be retrieved.</p>",
-          "location":"uri",
-          "locationName":"workflowName"
         }
       }
     },
     "UpdateMatchingWorkflowOutput":{
       "type":"structure",
       "required":[
+        "workflowName",
         "inputSourceConfig",
         "outputSourceConfig",
         "resolutionTechniques",
-        "roleArn",
-        "workflowName"
+        "roleArn"
       ],
       "members":{
+        "workflowName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the workflow.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the workflow.</p>"
         },
-        "incrementalRunConfig":{
-          "shape":"IncrementalRunConfig",
-          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
-        },
         "inputSourceConfig":{
           "shape":"InputSourceConfig",
           "documentation":"<p>A list of <code>InputSource</code> objects, which have the fields <code>InputSourceARN</code> and <code>SchemaName</code>.</p>"
         },
         "outputSourceConfig":{
           "shape":"OutputSourceConfig",
-          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>OutputS3Path</code>, <code>ApplyNormalization</code>, and <code>Output</code>.</p>"
+          "documentation":"<p>A list of <code>OutputSource</code> objects, each of which contains fields <code>outputS3Path</code>, <code>applyNormalization</code>, <code>KMSArn</code>, and <code>output</code>.</p>"
         },
         "resolutionTechniques":{
           "shape":"ResolutionTechniques",
-          "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code> </p>"
+          "documentation":"<p>An object which defines the <code>resolutionType</code> and the <code>ruleBasedProperties</code>.</p>"
+        },
+        "incrementalRunConfig":{
+          "shape":"IncrementalRunConfig",
+          "documentation":"<p>An object which defines an incremental run type and has only <code>incrementalRunType</code> as a field.</p>"
         },
         "roleArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role. Entity Resolution assumes this role to create resources on your behalf as part of workflow execution.</p>"
-        },
-        "workflowName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the workflow.</p>"
         }
       }
     },
     "UpdateSchemaMappingInput":{
       "type":"structure",
       "required":[
-        "mappedInputFields",
-        "schemaName"
+        "schemaName",
+        "mappedInputFields"
       ],
       "members":{
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema. There can't be multiple <code>SchemaMappings</code> with the same name.</p>",
+          "location":"uri",
+          "locationName":"schemaName"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the schema.</p>"
@@ -3831,23 +4166,25 @@
         "mappedInputFields":{
           "shape":"SchemaInputAttributes",
           "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching.</p>"
-        },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema. There can't be multiple <code>SchemaMappings</code> with the same name.</p>",
-          "location":"uri",
-          "locationName":"schemaName"
         }
       }
     },
     "UpdateSchemaMappingOutput":{
       "type":"structure",
       "required":[
-        "mappedInputFields",
+        "schemaName",
         "schemaArn",
-        "schemaName"
+        "mappedInputFields"
       ],
       "members":{
+        "schemaName":{
+          "shape":"EntityName",
+          "documentation":"<p>The name of the schema.</p>"
+        },
+        "schemaArn":{
+          "shape":"SchemaMappingArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>SchemaMapping</code>.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>A description of the schema.</p>"
@@ -3855,14 +4192,6 @@
         "mappedInputFields":{
           "shape":"SchemaInputAttributes",
           "documentation":"<p>A list of <code>MappedInputFields</code>. Each <code>MappedInputField</code> corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching.</p>"
-        },
-        "schemaArn":{
-          "shape":"SchemaMappingArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) that Entity Resolution generated for the <code>SchemaMapping</code>.</p>"
-        },
-        "schemaName":{
-          "shape":"EntityName",
-          "documentation":"<p>The name of the schema.</p>"
         }
       }
     },
@@ -3880,7 +4209,7 @@
     },
     "VeniceGlobalArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:((schemamapping|matchingworkflow|idmappingworkflow|idnamespace)/[a-zA-Z_0-9-]{1,255})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn):entityresolution:[a-z]{2}-[a-z]{1,10}-[0-9]:[0-9]{12}:((schemamapping|matchingworkflow|idmappingworkflow|idnamespace)/[a-zA-Z_0-9-]{1,255})"
     }
   },
   "documentation":"<p>Welcome to the <i>Entity Resolution API Reference</i>.</p> <p>Entity Resolution is an Amazon Web Services service that provides pre-configured entity resolution capabilities that enable developers and analysts at advertising and marketing companies to build an accurate and complete view of their consumers.</p> <p> With Entity Resolution, you can match source records containing consumer identifiers, such as name, email address, and phone number. This is true even when these records have incomplete or conflicting identifiers. For example, Entity Resolution can effectively match a source record from a customer relationship management (CRM) system with a source record from a marketing system containing campaign information.</p> <p>To learn more about Entity Resolution concepts, procedures, and best practices, see the <a href=\"https://docs.aws.amazon.com/entityresolution/latest/userguide/what-is-service.html\">Entity Resolution User Guide</a>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/es/2015-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/es/2015-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/es/2015-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/es/2015-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/es/2015-01-01/service-2.json 2.31.35-1/awscli/botocore/data/es/2015-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/es/2015-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/es/2015-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -879,8 +879,7 @@
     },
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred because user does not have permissions to access the resource. Returns HTTP status code 403.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -1591,8 +1590,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred because the client attempts to remove a resource that is currently in use. Returns HTTP status code 409.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -2342,8 +2340,7 @@
     "DisableTimestamp":{"type":"timestamp"},
     "DisabledOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occured because the client wanted to access a not supported operation. Gives http status code of 409.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -3283,24 +3280,21 @@
     "IntegerClass":{"type":"integer"},
     "InternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request processing has failed because of an unknown error, exception or failure (the failure is internal to the service) . Gives http status code of 500.</p>",
       "error":{"httpStatusCode":500},
       "exception":true
     },
     "InvalidPaginationTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request processing has failed because of invalid pagination token provided by customer. Returns an HTTP status code of 400. </p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
     "InvalidTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for trying to create or access sub-resource that is either invalid or not supported. Gives http status code of 409.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -3318,8 +3312,7 @@
     "LastUpdated":{"type":"timestamp"},
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for trying to create more than allowed resources or sub-resources. Gives http status code of 409.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -4240,16 +4233,14 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for creating a resource that already exists. Gives http status code of 400.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for accessing or deleting a resource that does not exist. Gives http status code of 400.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -4276,8 +4267,7 @@
     },
     "RevokeVpcEndpointAccessResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Container for response parameters to the <code><a>RevokeVpcEndpointAccess</a></code> operation. The response body for this operation is empty.</p>"
     },
     "RoleArn":{
@@ -4942,8 +4932,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for missing / invalid input fields. Gives http status code of 400.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/events/2015-10-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/events/2015-10-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/events/2015-10-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/events/2015-10-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,38 +5,111 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "EndpointId": {
             "required": false,
             "documentation": "Operation parameter for EndpointId",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
         {
             "conditions": [
                 {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                },
+                {
+                    "fn": "aws.partition",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ],
+                    "assign": "PartitionResult"
+                },
+                {
+                    "fn": "stringEquals",
+                    "argv": [
+                        {
+                            "fn": "getAttr",
+                            "argv": [
+                                {
+                                    "ref": "PartitionResult"
+                                },
+                                "name"
+                            ]
+                        },
+                        "aws-us-gov"
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseFIPS"
+                        },
+                        true
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseDualStack"
+                        },
+                        true
+                    ]
+                }
+            ],
+            "endpoint": {
+                "url": "https://events.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                "properties": {},
+                "headers": {}
+            },
+            "type": "endpoint"
+        },
+        {
+            "conditions": [
+                {
                     "fn": "isSet",
                     "argv": [
                         {
diff -pruN 2.23.6-1/awscli/botocore/data/events/2015-10-07/service-2.json 2.31.35-1/awscli/botocore/data/events/2015-10-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/events/2015-10-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/events/2015-10-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -78,7 +78,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InvalidEventPatternException"}
       ],
-      "documentation":"<p>Creates an archive of events with the specified settings. When you create an archive, incoming events might not immediately start being sent to the archive. Allow a short period of time for changes to take effect. If you do not specify a pattern to filter events sent to the archive, all events are sent to the archive except replayed events. Replayed events are not sent to an archive.</p> <note> <p>Archives and schema discovery are not supported for event buses encrypted using a customer managed key. EventBridge returns an error if:</p> <ul> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_CreateArchive.html\">CreateArchive</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discoverers.html#CreateDiscoverer\">CreateDiscoverer</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_UpdatedEventBus.html\">UpdatedEventBus</a> </code> to set a customer managed key on an event bus with an archives or schema discovery enabled.</p> </li> </ul> <p>To enable archives or schema discovery on an event bus, choose to use an Amazon Web Services owned key. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption.html\">Data encryption in EventBridge</a> in the <i>Amazon EventBridge User Guide</i>.</p> </note>"
+      "documentation":"<p>Creates an archive of events with the specified settings. When you create an archive, incoming events might not immediately start being sent to the archive. Allow a short period of time for changes to take effect. If you do not specify a pattern to filter events sent to the archive, all events are sent to the archive except replayed events. Replayed events are not sent to an archive.</p> <important> <p>If you have specified that EventBridge use a customer managed key for encrypting the source event bus, we strongly recommend you also specify a customer managed key for any archives for the event bus as well. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p> </important>"
     },
     "CreateConnection":{
       "name":"CreateConnection",
@@ -630,7 +630,7 @@
       "errors":[
         {"shape":"InternalException"}
       ],
-      "documentation":"<p>Sends custom events to Amazon EventBridge so that they can be matched to rules.</p> <p>The maximum size for a PutEvents event entry is 256 KB. Entry size is calculated including the event and any necessary characters and keys of the JSON representation of the event. To learn more, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-putevent-size.html\">Calculating PutEvents event entry size</a> in the <i> <i>Amazon EventBridge User Guide</i> </i> </p> <p>PutEvents accepts the data in JSON format. For the JSON number (integer) data type, the constraints are: a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807.</p> <note> <p>PutEvents will only process nested JSON up to 1000 levels deep.</p> </note>"
+      "documentation":"<p>Sends custom events to Amazon EventBridge so that they can be matched to rules.</p> <p>You can batch multiple event entries into one request for efficiency. However, the total entry size must be less than 256KB. You can calculate the entry size before you send the events. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-putevents.html#eb-putevent-size\">Calculating PutEvents event entry size</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p> <p>PutEvents accepts the data in JSON format. For the JSON number (integer) data type, the constraints are: a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807.</p> <note> <p>PutEvents will only process nested JSON up to 1000 levels deep.</p> </note>"
     },
     "PutPartnerEvents":{
       "name":"PutPartnerEvents",
@@ -877,9 +877,8 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>You do not have the necessary permissons for this action.</p>",
+      "members":{},
+      "documentation":"<p>You do not have the necessary permissions for this action.</p>",
       "exception":true
     },
     "AccountId":{
@@ -1008,7 +1007,7 @@
           "documentation":"<p>The name of the archive.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"EventBusArn",
           "documentation":"<p>The ARN of the event bus associated with the archive. Only events from this event bus are sent to the archive.</p>"
         },
         "State":{
@@ -1234,8 +1233,7 @@
     },
     "ConcurrentModificationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is concurrent modification on a rule, target, archive, or replay.</p>",
       "exception":true
     },
@@ -1530,10 +1528,10 @@
       "members":{
         "ResourceConfigurationArn":{
           "shape":"ResourceConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration for the resource endpoint.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon VPC Lattice resource configuration for the resource endpoint.</p>"
         }
       },
-      "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration for the resource endpoint.</p>"
+      "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon VPC Lattice resource configuration for the resource endpoint.</p>"
     },
     "ConnectivityResourceParameters":{
       "type":"structure",
@@ -1614,7 +1612,7 @@
           "documentation":"<p>The name for the archive to create.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"EventBusArn",
           "documentation":"<p>The ARN of the event bus that sends events to the archive.</p>"
         },
         "Description":{
@@ -1628,6 +1626,10 @@
         "RetentionDays":{
           "shape":"RetentionDays",
           "documentation":"<p>The number of days to retain events for. Default value is 0. If set to 0, events are retained indefinitely</p>"
+        },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt this archive. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt the archive.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <important> <p>If you have specified that EventBridge use a customer managed key for encrypting the source event bus, we strongly recommend you also specify a customer managed key for any archives for the event bus as well. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p> </important>"
         }
       }
     },
@@ -1785,7 +1787,11 @@
         },
         "InvocationConnectivityParameters":{
           "shape":"ConnectivityResourceParameters",
-          "documentation":"<p>For connections to private resource endpoints, the parameters to use for invoking the resource endpoint.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-target-connection-private.html\">Connecting to private resources</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
+          "documentation":"<p>For connections to private APIs, the parameters to use for invoking the API.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/connection-private.html\">Connecting to private APIs</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
+        },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt this connection. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt the connection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p>"
         }
       }
     },
@@ -1895,9 +1901,13 @@
         },
         "KmsKeyIdentifier":{
           "shape":"KmsKeyIdentifier",
-          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt events on the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html\">Managing keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <note> <p>Archives and schema discovery are not supported for event buses encrypted using a customer managed key. EventBridge returns an error if:</p> <ul> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_CreateArchive.html\">CreateArchive</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discoverers.html#CreateDiscoverer\">CreateDiscoverer</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_UpdatedEventBus.html\">UpdatedEventBus</a> </code> to set a customer managed key on an event bus with an archives or schema discovery enabled.</p> </li> </ul> <p>To enable archives or schema discovery on an event bus, choose to use an Amazon Web Services owned key. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption.html\">Data encryption in EventBridge</a> in the <i>Amazon EventBridge User Guide</i>.</p> </note>"
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt events on the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <note> <p>Schema discovery is not supported for event buses encrypted using a customer managed key. EventBridge returns an error if: </p> <ul> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discoverers.html#CreateDiscoverer\">CreateDiscoverer</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_UpdatedEventBus.html\">UpdatedEventBus</a> </code> to set a customer managed key on an event bus with schema discovery enabled.</p> </li> </ul> <p>To enable schema discovery on an event bus, choose to use an Amazon Web Services owned key. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption-event-bus-cmkey.html\">Encrypting events</a> in the <i>Amazon EventBridge User Guide</i>.</p> </note> <important> <p>If you have specified that EventBridge use a customer managed key for encrypting the source event bus, we strongly recommend you also specify a customer managed key for any archives for the event bus as well. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p> </important>"
         },
         "DeadLetterConfig":{"shape":"DeadLetterConfig"},
+        "LogConfig":{
+          "shape":"LogConfig",
+          "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>Tags to associate with the event bus.</p>"
@@ -1919,7 +1929,11 @@
           "shape":"KmsKeyIdentifier",
           "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use to encrypt events on this event bus, if one has been specified.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption.html\">Data encryption in EventBridge</a> in the <i>Amazon EventBridge User Guide</i>.</p>"
         },
-        "DeadLetterConfig":{"shape":"DeadLetterConfig"}
+        "DeadLetterConfig":{"shape":"DeadLetterConfig"},
+        "LogConfig":{
+          "shape":"LogConfig",
+          "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+        }
       }
     },
     "CreatePartnerEventSourceRequest":{
@@ -2032,8 +2046,7 @@
     },
     "DeleteApiDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteArchiveRequest":{
       "type":"structure",
@@ -2047,8 +2060,7 @@
     },
     "DeleteArchiveResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConnectionRequest":{
       "type":"structure",
@@ -2097,8 +2109,7 @@
     },
     "DeleteEndpointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventBusRequest":{
       "type":"structure",
@@ -2222,7 +2233,7 @@
           "documentation":"<p>The name of the archive.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"EventBusArn",
           "documentation":"<p>The ARN of the event source associated with the archive.</p>"
         },
         "Description":{
@@ -2241,6 +2252,10 @@
           "shape":"ArchiveStateReason",
           "documentation":"<p>The reason that the archive is in the state.</p>"
         },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use to encrypt this archive, if one has been specified.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p>"
+        },
         "RetentionDays":{
           "shape":"RetentionDays",
           "documentation":"<p>The number of days to retain events for in the archive.</p>"
@@ -2293,7 +2308,7 @@
         },
         "ResourceAssociationArn":{
           "shape":"ResourceAssociationArn",
-          "documentation":"<p>For connections to private APIs, the Amazon Resource Name (ARN) of the resource association EventBridge created between the connection and the private API's resource configuration.</p>"
+          "documentation":"<p>For connections to private APIs, the Amazon Resource Name (ARN) of the resource association EventBridge created between the connection and the private API's resource configuration.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/connection-private.html#connection-private-snra\"> Managing service network resource associations for connections</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
         }
       },
       "documentation":"<p>The parameters for EventBridge to use when invoking the resource endpoint.</p>"
@@ -2315,7 +2330,7 @@
         },
         "InvocationConnectivityParameters":{
           "shape":"DescribeConnectionConnectivityParameters",
-          "documentation":"<p>For connections to private resource endpoints. The parameters EventBridge uses to invoke the resource endpoint.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-target-connection-private.html\">Connecting to private resources</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
+          "documentation":"<p>For connections to private APIs The parameters EventBridge uses to invoke the resource endpoint.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/connection-private.html\">Connecting to private APIs</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
         },
         "ConnectionState":{
           "shape":"ConnectionState",
@@ -2333,6 +2348,10 @@
           "shape":"SecretsManagerSecretArn",
           "documentation":"<p>The ARN of the secret created from the authorization parameters specified for the connection.</p>"
         },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use to encrypt the connection, if one has been specified.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-connections.html\">Encrypting connections</a> in the <i>Amazon EventBridge User Guide</i>.</p>"
+        },
         "AuthParameters":{
           "shape":"ConnectionAuthResponseParameters",
           "documentation":"<p>The parameters to use for authorization for the connection.</p>"
@@ -2455,6 +2474,10 @@
           "shape":"String",
           "documentation":"<p>The policy that enables the external account to send events to your account.</p>"
         },
+        "LogConfig":{
+          "shape":"LogConfig",
+          "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+        },
         "CreationTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time the event bus was created.</p>"
@@ -2561,7 +2584,7 @@
           "documentation":"<p>The reason that the replay is in the current state.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"ArchiveArn",
           "documentation":"<p>The ARN of the archive events were replayed from.</p>"
         },
         "Destination":{
@@ -2898,6 +2921,12 @@
       },
       "documentation":"<p>An event bus receives events from a source, uses rules to evaluate them, applies any configured input transformation, and routes them to the appropriate target(s). Your account's default event bus receives events from Amazon Web Services services. A custom event bus can receive events from your custom applications and services. A partner event bus receives events from an event source created by an SaaS partner. These events come from the partners services or applications.</p>"
     },
+    "EventBusArn":{
+      "type":"string",
+      "max":1600,
+      "min":1,
+      "pattern":"^arn:aws([a-z]|\\-)*:events:([a-z]|\\d|\\-)*:([0-9]{12})?:.+\\/.+$"
+    },
     "EventBusDescription":{
       "type":"string",
       "max":512
@@ -2916,7 +2945,7 @@
       "type":"string",
       "max":1600,
       "min":1,
-      "pattern":"(arn:aws[\\w-]*:events:[a-z]{2}-[a-z]+-[\\w-]+:[0-9]{12}:event-bus\\/)?[/\\.\\-_A-Za-z0-9]+"
+      "pattern":"(arn:aws[\\w-]*:events:[a-z]+-[a-z]+-[\\w-]+:[0-9]{12}:event-bus\\/)?[/\\.\\-_A-Za-z0-9]+"
     },
     "EventId":{
       "type":"string",
@@ -3078,11 +3107,17 @@
     },
     "IllegalStatusException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred because a replay can be canceled only when the state is Running or Starting.</p>",
       "exception":true
     },
+    "IncludeDetail":{
+      "type":"string",
+      "enum":[
+        "NONE",
+        "FULL"
+      ]
+    },
     "InputTransformer":{
       "type":"structure",
       "required":["InputTemplate"],
@@ -3107,23 +3142,20 @@
     "Integer":{"type":"integer"},
     "InternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This exception occurs due to unexpected causes.</p>",
       "exception":true,
       "fault":true
     },
     "InvalidEventPatternException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event pattern is not valid.</p>",
       "exception":true
     },
     "InvalidStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified state is not a valid state for an event source.</p>",
       "exception":true
     },
@@ -3140,7 +3172,8 @@
     },
     "KmsKeyIdentifier":{
       "type":"string",
-      "max":2048
+      "max":2048,
+      "pattern":"^[a-zA-Z0-9_\\-/:]*$"
     },
     "LaunchType":{
       "type":"string",
@@ -3150,10 +3183,18 @@
         "EXTERNAL"
       ]
     },
+    "Level":{
+      "type":"string",
+      "enum":[
+        "OFF",
+        "ERROR",
+        "INFO",
+        "TRACE"
+      ]
+    },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request failed because it attempted to create resource beyond the allowed service quota.</p>",
       "exception":true
     },
@@ -3208,7 +3249,7 @@
           "documentation":"<p>A name prefix to filter the archives returned. Only archives with name that match the prefix are returned.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"EventBusArn",
           "documentation":"<p>The ARN of the event source associated with the archive.</p>"
         },
         "State":{
@@ -3440,7 +3481,7 @@
           "documentation":"<p>The state of the replay.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"ArchiveArn",
           "documentation":"<p>The ARN of the archive from which the events are replayed.</p>"
         },
         "NextToken":{
@@ -3589,6 +3630,20 @@
         }
       }
     },
+    "LogConfig":{
+      "type":"structure",
+      "members":{
+        "IncludeDetail":{
+          "shape":"IncludeDetail",
+          "documentation":"<p>Whether EventBridge include detailed event information in the records it generates. Detailed data can be useful for troubleshooting and debugging. This information includes details of the event itself, as well as target details.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus-logs.html#eb-event-logs-data\">Including detail data in event bus logs</a> in the <i>EventBridge User Guide</i>.</p>"
+        },
+        "Level":{
+          "shape":"Level",
+          "documentation":"<p>The level of logging detail to include. This applies to all log destinations for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus-logs.html#eb-event-bus-logs-level\">Specifying event bus log level</a> in the <i>EventBridge User Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+    },
     "Long":{"type":"long"},
     "ManagedBy":{
       "type":"string",
@@ -3597,8 +3652,7 @@
     },
     "ManagedRuleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This rule was created by an Amazon Web Services service on behalf of your account. It is managed by that service. If you see this error in response to <code>DeleteRule</code> or <code>RemoveTargets</code>, you can use the <code>Force</code> parameter in those calls to delete the rule or remove targets from the rule. You cannot modify these managed rules by using <code>DisableRule</code>, <code>EnableRule</code>, <code>PutTargets</code>, <code>PutRule</code>, <code>TagResource</code>, or <code>UntagResource</code>. </p>",
       "exception":true
     },
@@ -3635,7 +3689,7 @@
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^arn:aws[a-z-]*:events:[a-z]{2}-[a-z-]+-\\d+:\\d{12}:event-bus/[\\w.-]+$"
+      "pattern":"^arn:aws[a-z-]*:events:[a-z]+-[a-z-]+-\\d+:\\d{12}:event-bus/[\\w.-]+$"
     },
     "NonPartnerEventBusName":{
       "type":"string",
@@ -3647,12 +3701,11 @@
       "type":"string",
       "max":1600,
       "min":1,
-      "pattern":"(arn:aws[\\w-]*:events:[a-z]{2}-[a-z]+-[\\w-]+:[0-9]{12}:event-bus\\/)?[\\.\\-_A-Za-z0-9]+"
+      "pattern":"(arn:aws[\\w-]*:events:[a-z]+-[a-z]+-[\\w-]+:[0-9]{12}:event-bus\\/)?[\\.\\-_A-Za-z0-9]+"
     },
     "OperationDisabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation you are attempting is not available in this region.</p>",
       "exception":true
     },
@@ -3777,8 +3830,7 @@
     },
     "PolicyLengthExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event bus policy is too long. For more information, see the limits.</p>",
       "exception":true
     },
@@ -4254,7 +4306,7 @@
           "documentation":"<p>The name of the replay.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"ArchiveArn",
           "documentation":"<p>The ARN of the archive to replay event from.</p>"
         },
         "State":{
@@ -4363,8 +4415,7 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource you are trying to create already exists.</p>",
       "exception":true
     },
@@ -4387,8 +4438,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An entity that you specified does not exist.</p>",
       "exception":true
     },
@@ -4566,14 +4616,14 @@
       "members":{
         "Name":{
           "shape":"SageMakerPipelineParameterName",
-          "documentation":"<p>Name of parameter to start execution of a SageMaker Model Building Pipeline.</p>"
+          "documentation":"<p>Name of parameter to start execution of a SageMaker AI Model Building Pipeline.</p>"
         },
         "Value":{
           "shape":"SageMakerPipelineParameterValue",
-          "documentation":"<p>Value of parameter to start execution of a SageMaker Model Building Pipeline.</p>"
+          "documentation":"<p>Value of parameter to start execution of a SageMaker AI Model Building Pipeline.</p>"
         }
       },
-      "documentation":"<p>Name/Value pair of a parameter to start execution of a SageMaker Model Building Pipeline.</p>"
+      "documentation":"<p>Name/Value pair of a parameter to start execution of a SageMaker AI Model Building Pipeline.</p>"
     },
     "SageMakerPipelineParameterList":{
       "type":"list",
@@ -4596,10 +4646,10 @@
       "members":{
         "PipelineParameterList":{
           "shape":"SageMakerPipelineParameterList",
-          "documentation":"<p>List of Parameter names and values for SageMaker Model Building Pipeline execution.</p>"
+          "documentation":"<p>List of Parameter names and values for SageMaker AI Model Building Pipeline execution.</p>"
         }
       },
-      "documentation":"<p>These are custom parameters to use when the target is a SageMaker Model Building Pipeline that starts based on EventBridge events.</p>"
+      "documentation":"<p>These are custom parameters to use when the target is a SageMaker AI Model Building Pipeline that starts based on EventBridge events.</p>"
     },
     "ScheduleExpression":{
       "type":"string",
@@ -4670,7 +4720,7 @@
           "documentation":"<p>A description for the replay to start.</p>"
         },
         "EventSourceArn":{
-          "shape":"Arn",
+          "shape":"ArchiveArn",
           "documentation":"<p>The ARN of the archive to replay events from.</p>"
         },
         "EventStartTime":{
@@ -4775,8 +4825,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4844,7 +4893,7 @@
         },
         "SageMakerPipelineParameters":{
           "shape":"SageMakerPipelineParameters",
-          "documentation":"<p>Contains the SageMaker Model Building Pipeline parameters to start execution of a SageMaker Model Building Pipeline.</p> <p>If you specify a SageMaker Model Building Pipeline as a target, you can use this to specify parameters to start a pipeline execution based on EventBridge events.</p>"
+          "documentation":"<p>Contains the SageMaker AI Model Building Pipeline parameters to start execution of a SageMaker AI Model Building Pipeline.</p> <p>If you specify a SageMaker AI Model Building Pipeline as a target, you can use this to specify parameters to start a pipeline execution based on EventBridge events.</p>"
         },
         "DeadLetterConfig":{
           "shape":"DeadLetterConfig",
@@ -4924,8 +4973,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This request cannot be completed due to throttling issues.</p>",
       "exception":true
     },
@@ -4965,8 +5013,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApiDestinationRequest":{
       "type":"structure",
@@ -5038,6 +5085,10 @@
         "RetentionDays":{
           "shape":"RetentionDays",
           "documentation":"<p>The number of days to retain events in the archive.</p>"
+        },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt this archive. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt the archive.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <important> <p>If you have specified that EventBridge use a customer managed key for encrypting the source event bus, we strongly recommend you also specify a customer managed key for any archives for the event bus as well. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p> </important>"
         }
       }
     },
@@ -5174,7 +5225,11 @@
         },
         "InvocationConnectivityParameters":{
           "shape":"ConnectivityResourceParameters",
-          "documentation":"<p>For connections to private resource endpoints, the parameters to use for invoking the resource endpoint.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-target-connection-private.html\">Connecting to private resources</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
+          "documentation":"<p>For connections to private APIs, the parameters to use for invoking the API.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/connection-private.html\">Connecting to private APIs</a> in the <i> <i>Amazon EventBridge User Guide</i> </i>.</p>"
+        },
+        "KmsKeyIdentifier":{
+          "shape":"KmsKeyIdentifier",
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt this connection. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt the connection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p>"
         }
       }
     },
@@ -5283,13 +5338,17 @@
         },
         "KmsKeyIdentifier":{
           "shape":"KmsKeyIdentifier",
-          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt events on the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html\">Managing keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <note> <p>Archives and schema discovery are not supported for event buses encrypted using a customer managed key. EventBridge returns an error if:</p> <ul> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_CreateArchive.html\">CreateArchive</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discoverers.html#CreateDiscoverer\">CreateDiscoverer</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_UpdatedEventBus.html\">UpdatedEventBus</a> </code> to set a customer managed key on an event bus with an archives or schema discovery enabled.</p> </li> </ul> <p>To enable archives or schema discovery on an event bus, choose to use an Amazon Web Services owned key. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption.html\">Data encryption in EventBridge</a> in the <i>Amazon EventBridge User Guide</i>.</p> </note>"
+          "documentation":"<p>The identifier of the KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.</p> <p>If you do not specify a customer managed key identifier, EventBridge uses an Amazon Web Services owned key to encrypt events on the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html\">Identify and view keys</a> in the <i>Key Management Service Developer Guide</i>. </p> <note> <p>Schema discovery is not supported for event buses encrypted using a customer managed key. EventBridge returns an error if: </p> <ul> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discoverers.html#CreateDiscoverer\">CreateDiscoverer</a> </code> on an event bus set to use a customer managed key for encryption.</p> </li> <li> <p>You call <code> <a href=\"https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_UpdatedEventBus.html\">UpdatedEventBus</a> </code> to set a customer managed key on an event bus with schema discovery enabled.</p> </li> </ul> <p>To enable schema discovery on an event bus, choose to use an Amazon Web Services owned key. For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-encryption-event-bus-cmkey.html\">Encrypting events</a> in the <i>Amazon EventBridge User Guide</i>.</p> </note> <important> <p>If you have specified that EventBridge use a customer managed key for encrypting the source event bus, we strongly recommend you also specify a customer managed key for any archives for the event bus as well. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eventbridge/latest/userguide/encryption-archives.html\">Encrypting archives</a> in the <i>Amazon EventBridge User Guide</i>.</p> </important>"
         },
         "Description":{
           "shape":"EventBusDescription",
           "documentation":"<p>The event bus description.</p>"
         },
-        "DeadLetterConfig":{"shape":"DeadLetterConfig"}
+        "DeadLetterConfig":{"shape":"DeadLetterConfig"},
+        "LogConfig":{
+          "shape":"LogConfig",
+          "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+        }
       }
     },
     "UpdateEventBusResponse":{
@@ -5311,7 +5370,11 @@
           "shape":"EventBusDescription",
           "documentation":"<p>The event bus description.</p>"
         },
-        "DeadLetterConfig":{"shape":"DeadLetterConfig"}
+        "DeadLetterConfig":{"shape":"DeadLetterConfig"},
+        "LogConfig":{
+          "shape":"LogConfig",
+          "documentation":"<p>The logging configuration settings for the event bus.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/eb-event-bus-logs.html\">Configuring logs for event buses</a> in the <i>EventBridge User Guide</i>.</p>"
+        }
       }
     }
   },
diff -pruN 2.23.6-1/awscli/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/evidently/2021-02-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/evs/2023-07-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/evs/2023-07-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/evs/2023-07-27/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/evs/2023-07-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://evs-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://evs-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://evs.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://evs.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/evs/2023-07-27/paginators-1.json 2.31.35-1/awscli/botocore/data/evs/2023-07-27/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/evs/2023-07-27/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/evs/2023-07-27/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+{
+  "pagination": {
+    "ListEnvironmentHosts": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "environmentHosts"
+    },
+    "ListEnvironmentVlans": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "environmentVlans"
+    },
+    "ListEnvironments": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "environmentSummaries"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/evs/2023-07-27/service-2.json 2.31.35-1/awscli/botocore/data/evs/2023-07-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/evs/2023-07-27/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/evs/2023-07-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1535 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2023-07-27",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"evs",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceAbbreviation":"EVS",
+    "serviceFullName":"Amazon Elastic VMware Service",
+    "serviceId":"evs",
+    "signatureVersion":"v4",
+    "signingName":"evs",
+    "targetPrefix":"AmazonElasticVMwareService",
+    "uid":"evs-2023-07-27"
+  },
+  "operations":{
+    "AssociateEipToVlan":{
+      "name":"AssociateEipToVlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateEipToVlanRequest"},
+      "output":{"shape":"AssociateEipToVlanResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Associates an Elastic IP address with a public HCX VLAN. This operation is only allowed for public HCX VLANs at this time.</p>",
+      "idempotent":true
+    },
+    "CreateEnvironment":{
+      "name":"CreateEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateEnvironmentRequest"},
+      "output":{"shape":"CreateEnvironmentResponse"},
+      "errors":[
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates an Amazon EVS environment that runs VCF software, such as SDDC Manager, NSX Manager, and vCenter Server.</p> <p>During environment creation, Amazon EVS performs validations on DNS settings, provisions VLAN subnets and hosts, and deploys the supplied version of VCF.</p> <p>It can take several hours to create an environment. After the deployment completes, you can configure VCF in the vSphere user interface according to your needs.</p> <note> <p>You cannot use the <code>dedicatedHostId</code> and <code>placementGroupId</code> parameters together in the same <code>CreateEnvironment</code> action. This results in a <code>ValidationException</code> response.</p> </note>",
+      "idempotent":true
+    },
+    "CreateEnvironmentHost":{
+      "name":"CreateEnvironmentHost",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateEnvironmentHostRequest"},
+      "output":{"shape":"CreateEnvironmentHostResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates an ESXi host and adds it to an Amazon EVS environment. Amazon EVS supports 4-16 hosts per environment.</p> <p>This action can only be used after the Amazon EVS environment is deployed.</p> <p>You can use the <code>dedicatedHostId</code> parameter to specify an Amazon EC2 Dedicated Host for ESXi host creation.</p> <p> You can use the <code>placementGroupId</code> parameter to specify a cluster or partition placement group to launch EC2 instances into.</p> <note> <p>You cannot use the <code>dedicatedHostId</code> and <code>placementGroupId</code> parameters together in the same <code>CreateEnvironmentHost</code> action. This results in a <code>ValidationException</code> response.</p> </note>",
+      "idempotent":true
+    },
+    "DeleteEnvironment":{
+      "name":"DeleteEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteEnvironmentRequest"},
+      "output":{"shape":"DeleteEnvironmentResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes an Amazon EVS environment.</p> <p>Amazon EVS environments will only be enabled for deletion once the hosts are deleted. You can delete hosts using the <code>DeleteEnvironmentHost</code> action.</p> <p>Environment deletion also deletes the associated Amazon EVS VLAN subnets and Amazon Web Services Secrets Manager secrets that Amazon EVS created. Amazon Web Services resources that you create are not deleted. These resources may continue to incur costs.</p>",
+      "idempotent":true
+    },
+    "DeleteEnvironmentHost":{
+      "name":"DeleteEnvironmentHost",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteEnvironmentHostRequest"},
+      "output":{"shape":"DeleteEnvironmentHostResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes a host from an Amazon EVS environment.</p> <note> <p>Before deleting a host, you must unassign and decommission the host from within the SDDC Manager user interface. Not doing so could impact the availability of your virtual machines or result in data loss.</p> </note>",
+      "idempotent":true
+    },
+    "DisassociateEipFromVlan":{
+      "name":"DisassociateEipFromVlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateEipFromVlanRequest"},
+      "output":{"shape":"DisassociateEipFromVlanResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Disassociates an Elastic IP address from a public HCX VLAN. This operation is only allowed for public HCX VLANs at this time.</p>",
+      "idempotent":true
+    },
+    "GetEnvironment":{
+      "name":"GetEnvironment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetEnvironmentRequest"},
+      "output":{"shape":"GetEnvironmentResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a description of the specified environment.</p>"
+    },
+    "ListEnvironmentHosts":{
+      "name":"ListEnvironmentHosts",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListEnvironmentHostsRequest"},
+      "output":{"shape":"ListEnvironmentHostsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>List the hosts within an environment.</p>"
+    },
+    "ListEnvironmentVlans":{
+      "name":"ListEnvironmentVlans",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListEnvironmentVlansRequest"},
+      "output":{"shape":"ListEnvironmentVlansResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Lists environment VLANs that are associated with the specified environment.</p>"
+    },
+    "ListEnvironments":{
+      "name":"ListEnvironments",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListEnvironmentsRequest"},
+      "output":{"shape":"ListEnvironmentsResponse"},
+      "errors":[
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists the Amazon EVS environments in your Amazon Web Services account in the specified Amazon Web Services Region.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Lists the tags for an Amazon EVS resource.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"TagPolicyException"}
+      ],
+      "documentation":"<p>Associates the specified tags to an Amazon EVS resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they aren't changed. When a resource is deleted, the tags associated with that resource are also deleted. Tags that you create for Amazon EVS resources don't propagate to any other resources associated with the environment. For example, if you tag an environment with this operation, that tag doesn't automatically propagate to the VLAN subnets and hosts associated with the environment.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"TagPolicyException"}
+      ],
+      "documentation":"<p>Deletes specified tags from an Amazon EVS resource.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AllocationId":{
+      "type":"string",
+      "max":26,
+      "min":9,
+      "pattern":"eipalloc-[a-zA-Z0-9_-]+"
+    },
+    "Arn":{
+      "type":"string",
+      "max":1011,
+      "min":1,
+      "pattern":"arn:aws:evs:[a-z]{2}-[a-z]+-[0-9]:[0-9]{12}:environment/[a-zA-Z0-9_-]+"
+    },
+    "AssociateEipToVlanRequest":{
+      "type":"structure",
+      "required":[
+        "environmentId",
+        "vlanName",
+        "allocationId"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the environment creation request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment containing the VLAN that the Elastic IP address associates with.</p>"
+        },
+        "vlanName":{
+          "shape":"AssociateEipToVlanRequestVlanNameString",
+          "documentation":"<p>The name of the VLAN. <code>hcx</code> is the only accepted VLAN name at this time.</p>"
+        },
+        "allocationId":{
+          "shape":"AllocationId",
+          "documentation":"<p>The Elastic IP address allocation ID.</p>"
+        }
+      }
+    },
+    "AssociateEipToVlanRequestVlanNameString":{
+      "type":"string",
+      "max":200,
+      "min":1
+    },
+    "AssociateEipToVlanResponse":{
+      "type":"structure",
+      "members":{
+        "vlan":{"shape":"Vlan"}
+      }
+    },
+    "AssociationId":{
+      "type":"string",
+      "max":26,
+      "min":9,
+      "pattern":"eipassoc-[a-zA-Z0-9_-]+"
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "Check":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"CheckType",
+          "documentation":"<p>The check type. Amazon EVS performs the following checks.</p> <ul> <li> <p> <code>KEY_REUSE</code>: checks that the VCF license key is not used by another Amazon EVS environment. This check fails if a used license is added to the environment.</p> </li> <li> <p> <code>KEY_COVERAGE</code>: checks that your VCF license key allocates sufficient vCPU cores for all deployed hosts. The check fails when any assigned hosts in the EVS environment are not covered by license keys, or when any unassigned hosts cannot be covered by available vCPU cores in keys.</p> </li> <li> <p> <code>REACHABILITY</code>: checks that the Amazon EVS control plane has a persistent connection to SDDC Manager. If Amazon EVS cannot reach the environment, this check fails.</p> </li> <li> <p> <code>HOST_COUNT</code>: Checks that your environment has a minimum of 4 hosts, which is a requirement for VCF 5.2.1.</p> <p>If this check fails, you will need to add hosts so that your environment meets this minimum requirement. Amazon EVS only supports environments with 4-16 hosts.</p> </li> </ul>"
+        },
+        "result":{
+          "shape":"CheckResult",
+          "documentation":"<p> The check result.</p>"
+        },
+        "impairedSince":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when environment health began to be impaired.</p>"
+        }
+      },
+      "documentation":"<p>A check on the environment to identify environment health and validate VMware VCF licensing compliance.</p>"
+    },
+    "CheckResult":{
+      "type":"string",
+      "enum":[
+        "PASSED",
+        "FAILED",
+        "UNKNOWN"
+      ]
+    },
+    "CheckType":{
+      "type":"string",
+      "enum":[
+        "KEY_REUSE",
+        "KEY_COVERAGE",
+        "REACHABILITY",
+        "HOST_COUNT"
+      ]
+    },
+    "ChecksList":{
+      "type":"list",
+      "member":{"shape":"Check"}
+    },
+    "Cidr":{
+      "type":"string",
+      "pattern":"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/(3[0-2]|[1-2][0-9]|[0-9])"
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[!-~]+"
+    },
+    "ConnectivityInfo":{
+      "type":"structure",
+      "required":["privateRouteServerPeerings"],
+      "members":{
+        "privateRouteServerPeerings":{
+          "shape":"RouteServerPeeringList",
+          "documentation":"<p>The unique IDs for private route server peers.</p>"
+        }
+      },
+      "documentation":"<p>The connectivity configuration for the environment. Amazon EVS requires that you specify two route server peer IDs. During environment creation, the route server endpoints peer with the NSX uplink VLAN for connectivity to the NSX overlay network.</p>"
+    },
+    "CreateEnvironmentHostRequest":{
+      "type":"structure",
+      "required":[
+        "environmentId",
+        "host"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the host creation request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment that the host is added to.</p>"
+        },
+        "host":{
+          "shape":"HostInfoForCreate",
+          "documentation":"<p>The host that is created and added to the environment.</p>"
+        }
+      }
+    },
+    "CreateEnvironmentHostResponse":{
+      "type":"structure",
+      "members":{
+        "environmentSummary":{
+          "shape":"EnvironmentSummary",
+          "documentation":"<p>A summary of the environment that the host is created in.</p>"
+        },
+        "host":{
+          "shape":"Host",
+          "documentation":"<p>A description of the created host.</p>"
+        }
+      }
+    },
+    "CreateEnvironmentRequest":{
+      "type":"structure",
+      "required":[
+        "vpcId",
+        "serviceAccessSubnetId",
+        "vcfVersion",
+        "termsAccepted",
+        "licenseInfo",
+        "initialVlans",
+        "hosts",
+        "connectivityInfo",
+        "vcfHostnames",
+        "siteId"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the environment creation request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentName":{
+          "shape":"EnvironmentName",
+          "documentation":"<p>The name to give to your environment. The name can contain only alphanumeric characters (case-sensitive), hyphens, and underscores. It must start with an alphanumeric character, and can't be longer than 100 characters. The name must be unique within the Amazon Web Services Region and Amazon Web Services account that you're creating the environment in.</p>"
+        },
+        "kmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>A unique ID for the customer-managed KMS key that is used to encrypt the VCF credential pairs for SDDC Manager, NSX Manager, and vCenter appliances. These credentials are stored in Amazon Web Services Secrets Manager.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>Metadata that assists with categorization and organization. Each tag consists of a key and an optional value. You define both. Tags don't propagate to any other cluster or Amazon Web Services resources.</p>"
+        },
+        "serviceAccessSecurityGroups":{
+          "shape":"ServiceAccessSecurityGroups",
+          "documentation":"<p>The security group that controls communication between the Amazon EVS control plane and VPC. The default security group is used if a custom security group isn't specified.</p> <p>The security group should allow access to the following.</p> <ul> <li> <p>TCP/UDP access to the DNS servers</p> </li> <li> <p>HTTPS/SSH access to the host management VLAN subnet</p> </li> <li> <p>HTTPS/SSH access to the Management VM VLAN subnet</p> </li> </ul> <p>You should avoid modifying the security group rules after deployment, as this can break the persistent connection between the Amazon EVS control plane and VPC. This can cause future environment actions like adding or removing hosts to fail.</p>"
+        },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>A unique ID for the VPC that the environment is deployed inside.</p> <p>Amazon EVS requires that all VPC subnets exist in a single Availability Zone in a Region where the service is available.</p> <p>The VPC that you specify must have a valid DHCP option set with domain name, at least two DNS servers, and an NTP server. These settings are used to configure your VCF appliances and hosts. The VPC cannot be used with any other deployed Amazon EVS environment. Amazon EVS does not provide multi-VPC support for environments at this time.</p> <p>Amazon EVS does not support the following Amazon Web Services networking options for NSX overlay connectivity: cross-Region VPC peering, Amazon S3 gateway endpoints, or Amazon Web Services Direct Connect virtual private gateway associations.</p> <note> <p>Ensure that you specify a VPC that is adequately sized to accommodate the {evws} subnets.</p> </note>"
+        },
+        "serviceAccessSubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>The subnet that is used to establish connectivity between the Amazon EVS control plane and VPC. Amazon EVS uses this subnet to validate mandatory DNS records for your VCF appliances and hosts and create the environment.</p>"
+        },
+        "vcfVersion":{
+          "shape":"VcfVersion",
+          "documentation":"<p> The VCF version to use for the environment. Amazon EVS only supports VCF version 5.2.1 at this time.</p>"
+        },
+        "termsAccepted":{
+          "shape":"Boolean",
+          "documentation":"<p>Customer confirmation that the customer has purchased and will continue to maintain the required number of VCF software licenses to cover all physical processor cores in the Amazon EVS environment. Information about your VCF software in Amazon EVS will be shared with Broadcom to verify license compliance. Amazon EVS does not validate license keys. To validate license keys, visit the Broadcom support portal.</p>"
+        },
+        "licenseInfo":{
+          "shape":"LicenseInfoList",
+          "documentation":"<p>The license information that Amazon EVS requires to create an environment. Amazon EVS requires two license keys: a VCF solution key and a vSAN license key. The VCF solution key must cover a minimum of 256 cores. The vSAN license key must provide at least 110 TiB of vSAN capacity.</p> <p>VCF licenses can be used for only one Amazon EVS environment. Amazon EVS does not support reuse of VCF licenses for multiple environments.</p> <p>VCF license information can be retrieved from the Broadcom portal.</p>"
+        },
+        "initialVlans":{
+          "shape":"InitialVlans",
+          "documentation":"<p>The initial VLAN subnets for the Amazon EVS environment.</p> <note> <p>For each Amazon EVS VLAN subnet, you must specify a non-overlapping CIDR block. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24.</p> </note>"
+        },
+        "hosts":{
+          "shape":"HostInfoForCreateList",
+          "documentation":"<p>The ESXi hosts to add to the environment. Amazon EVS requires that you provide details for a minimum of 4 hosts during environment creation.</p> <p>For each host, you must provide the desired hostname, EC2 SSH keypair name, and EC2 instance type. Optionally, you can also provide a partition or cluster placement group to use, or use Amazon EC2 Dedicated Hosts.</p>"
+        },
+        "connectivityInfo":{
+          "shape":"ConnectivityInfo",
+          "documentation":"<p> The connectivity configuration for the environment. Amazon EVS requires that you specify two route server peer IDs. During environment creation, the route server endpoints peer with the NSX edges over the NSX uplink subnet, providing BGP-based dynamic routing for overlay networks.</p>"
+        },
+        "vcfHostnames":{
+          "shape":"VcfHostnames",
+          "documentation":"<p>The DNS hostnames for the virtual machines that host the VCF management appliances. Amazon EVS requires that you provide DNS hostnames for the following appliances: vCenter, NSX Manager, SDDC Manager, and Cloud Builder.</p>"
+        },
+        "siteId":{
+          "shape":"String",
+          "documentation":"<p>The Broadcom Site ID that is allocated to you as part of your electronic software delivery. This ID allows customer access to the Broadcom portal, and is provided to you by Broadcom at the close of your software contract or contract renewal. Amazon EVS uses the Broadcom Site ID that you provide to meet Broadcom VCF license usage reporting requirements for Amazon EVS.</p>"
+        }
+      }
+    },
+    "CreateEnvironmentResponse":{
+      "type":"structure",
+      "members":{
+        "environment":{
+          "shape":"Environment",
+          "documentation":"<p>A description of the created environment.</p>"
+        }
+      }
+    },
+    "DedicatedHostId":{
+      "type":"string",
+      "max":25,
+      "min":1,
+      "pattern":"h-[a-f0-9]{8}([a-f0-9]{9})?"
+    },
+    "DeleteEnvironmentHostRequest":{
+      "type":"structure",
+      "required":[
+        "environmentId",
+        "hostName"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the host deletion request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the host's environment.</p>"
+        },
+        "hostName":{
+          "shape":"HostName",
+          "documentation":"<p>The DNS hostname associated with the host to be deleted.</p>"
+        }
+      }
+    },
+    "DeleteEnvironmentHostResponse":{
+      "type":"structure",
+      "members":{
+        "environmentSummary":{
+          "shape":"EnvironmentSummary",
+          "documentation":"<p>A summary of the environment that the host was deleted from.</p>"
+        },
+        "host":{
+          "shape":"Host",
+          "documentation":"<p>A description of the deleted host.</p>"
+        }
+      }
+    },
+    "DeleteEnvironmentRequest":{
+      "type":"structure",
+      "required":["environmentId"],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the environment deletion request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID associated with the environment to be deleted.</p>"
+        }
+      }
+    },
+    "DeleteEnvironmentResponse":{
+      "type":"structure",
+      "members":{
+        "environment":{
+          "shape":"Environment",
+          "documentation":"<p>A description of the deleted environment.</p>"
+        }
+      }
+    },
+    "DisassociateEipFromVlanRequest":{
+      "type":"structure",
+      "required":[
+        "environmentId",
+        "vlanName",
+        "associationId"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p><note> <p>This parameter is not used in Amazon EVS currently. If you supply input for this parameter, it will have no effect.</p> </note> <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the environment creation request. If you do not specify a client token, a randomly generated token is used for the request to ensure idempotency.</p></p>",
+          "idempotencyToken":true
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment containing the VLAN that the Elastic IP address disassociates from.</p>"
+        },
+        "vlanName":{
+          "shape":"DisassociateEipFromVlanRequestVlanNameString",
+          "documentation":"<p>The name of the VLAN. <code>hcx</code> is the only accepted VLAN name at this time.</p>"
+        },
+        "associationId":{
+          "shape":"AssociationId",
+          "documentation":"<p> A unique ID for the Elastic IP address association.</p>"
+        }
+      }
+    },
+    "DisassociateEipFromVlanRequestVlanNameString":{
+      "type":"string",
+      "max":200,
+      "min":1
+    },
+    "DisassociateEipFromVlanResponse":{
+      "type":"structure",
+      "members":{
+        "vlan":{"shape":"Vlan"}
+      }
+    },
+    "EipAssociation":{
+      "type":"structure",
+      "members":{
+        "associationId":{
+          "shape":"AssociationId",
+          "documentation":"<p>A unique ID for the elastic IP address association with the VLAN subnet.</p>"
+        },
+        "allocationId":{
+          "shape":"AllocationId",
+          "documentation":"<p>The Elastic IP address allocation ID.</p>"
+        },
+        "ipAddress":{
+          "shape":"IpAddress",
+          "documentation":"<p>The Elastic IP address.</p>"
+        }
+      },
+      "documentation":"<p>An Elastic IP address association with the elastic network interface in the VLAN subnet.</p>"
+    },
+    "EipAssociationList":{
+      "type":"list",
+      "member":{"shape":"EipAssociation"}
+    },
+    "Environment":{
+      "type":"structure",
+      "members":{
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>The unique ID for the environment.</p>"
+        },
+        "environmentState":{
+          "shape":"EnvironmentState",
+          "documentation":"<p>The state of an environment.</p>"
+        },
+        "stateDetails":{
+          "shape":"StateDetails",
+          "documentation":"<p>A detailed description of the <code>environmentState</code> of an environment.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the environment was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the environment was modified.</p>"
+        },
+        "environmentArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that is associated with the environment.</p>"
+        },
+        "environmentName":{
+          "shape":"EnvironmentName",
+          "documentation":"<p>The name of the environment.</p>"
+        },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The VPC associated with the environment.</p>"
+        },
+        "serviceAccessSubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p> The subnet that is used to establish connectivity between the Amazon EVS control plane and VPC. Amazon EVS uses this subnet to perform validations and create the environment.</p>"
+        },
+        "vcfVersion":{
+          "shape":"VcfVersion",
+          "documentation":"<p>The VCF version of the environment.</p>"
+        },
+        "termsAccepted":{
+          "shape":"Boolean",
+          "documentation":"<p>Customer confirmation that the customer has purchased and will continue to maintain the required number of VCF software licenses to cover all physical processor cores in the Amazon EVS environment. Information about your VCF software in Amazon EVS will be shared with Broadcom to verify license compliance. Amazon EVS does not validate license keys. To validate license keys, visit the Broadcom support portal. </p>"
+        },
+        "licenseInfo":{
+          "shape":"LicenseInfoList",
+          "documentation":"<p> The license information that Amazon EVS requires to create an environment. Amazon EVS requires two license keys: a VCF solution key and a vSAN license key. The VCF solution key must cover a minimum of 256 cores. The vSAN license key must provide at least 110 TiB of vSAN capacity.</p>"
+        },
+        "siteId":{
+          "shape":"String",
+          "documentation":"<p>The Broadcom Site ID that is associated with your Amazon EVS environment. Amazon EVS uses the Broadcom Site ID that you provide to meet Broadcom VCF license usage reporting requirements for Amazon EVS.</p>"
+        },
+        "environmentStatus":{
+          "shape":"CheckResult",
+          "documentation":"<p>Reports impaired functionality that stems from issues internal to the environment, such as impaired reachability.</p>"
+        },
+        "checks":{
+          "shape":"ChecksList",
+          "documentation":"<p>A check on the environment to identify instance health and VMware VCF licensing issues.</p>"
+        },
+        "connectivityInfo":{
+          "shape":"ConnectivityInfo",
+          "documentation":"<p>The connectivity configuration for the environment. Amazon EVS requires that you specify two route server peer IDs. During environment creation, the route server endpoints peer with the NSX uplink VLAN for connectivity to the NSX overlay network.</p>"
+        },
+        "vcfHostnames":{
+          "shape":"VcfHostnames",
+          "documentation":"<p>The DNS hostnames to be used by the VCF management appliances in your environment.</p> <p>For environment creation to be successful, each hostname entry must resolve to a domain name that you've registered in your DNS service of choice and configured in the DHCP option set of your VPC. DNS hostnames cannot be changed after environment creation has started.</p>"
+        },
+        "kmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key ID that Amazon Web Services Secrets Manager uses to encrypt secrets that are associated with the environment. These secrets contain the VCF credentials that are needed to install vCenter Server, NSX, and SDDC Manager.</p> <p>By default, Amazon EVS use the Amazon Web Services Secrets Manager managed key <code>aws/secretsmanager</code>. You can also specify a customer managed key.</p>"
+        },
+        "serviceAccessSecurityGroups":{
+          "shape":"ServiceAccessSecurityGroups",
+          "documentation":"<p>The security groups that allow traffic between the Amazon EVS control plane and your VPC for service access. If a security group is not specified, Amazon EVS uses the default security group in your account for service access.</p>"
+        },
+        "credentials":{
+          "shape":"SecretList",
+          "documentation":"<p>The VCF credentials that are stored as Amazon EVS managed secrets in Amazon Web Services Secrets Manager.</p> <p>Amazon EVS stores credentials that are needed to install vCenter Server, NSX, and SDDC Manager.</p>"
+        }
+      },
+      "documentation":"<p>An object that represents an Amazon EVS environment.</p>"
+    },
+    "EnvironmentId":{
+      "type":"string",
+      "pattern":"(env-[a-zA-Z0-9]{10})"
+    },
+    "EnvironmentName":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_-]+"
+    },
+    "EnvironmentState":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATED",
+        "DELETING",
+        "DELETED",
+        "CREATE_FAILED"
+      ]
+    },
+    "EnvironmentStateList":{
+      "type":"list",
+      "member":{"shape":"EnvironmentState"}
+    },
+    "EnvironmentSummary":{
+      "type":"structure",
+      "members":{
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment.</p>"
+        },
+        "environmentName":{
+          "shape":"EnvironmentName",
+          "documentation":"<p> The name of the environment.</p>"
+        },
+        "vcfVersion":{
+          "shape":"VcfVersion",
+          "documentation":"<p>The VCF version of the environment.</p>"
+        },
+        "environmentStatus":{
+          "shape":"CheckResult",
+          "documentation":"<p>Reports impaired functionality that stems from issues internal to the environment, such as impaired reachability.</p>"
+        },
+        "environmentState":{
+          "shape":"EnvironmentState",
+          "documentation":"<p>The state of an environment.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the environment was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the environment was modified.</p>"
+        },
+        "environmentArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that is associated with the environment.</p>"
+        }
+      },
+      "documentation":"<p>A list of environments with summarized environment details.</p>"
+    },
+    "EnvironmentSummaryList":{
+      "type":"list",
+      "member":{"shape":"EnvironmentSummary"}
+    },
+    "GetEnvironmentRequest":{
+      "type":"structure",
+      "required":["environmentId"],
+      "members":{
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment.</p>"
+        }
+      }
+    },
+    "GetEnvironmentResponse":{
+      "type":"structure",
+      "members":{
+        "environment":{
+          "shape":"Environment",
+          "documentation":"<p>A description of the requested environment.</p>"
+        }
+      }
+    },
+    "Host":{
+      "type":"structure",
+      "members":{
+        "hostName":{
+          "shape":"HostName",
+          "documentation":"<p>The DNS hostname of the host. DNS hostnames for hosts must be unique across Amazon EVS environments and within VCF.</p>"
+        },
+        "ipAddress":{
+          "shape":"IpAddress",
+          "documentation":"<p>The IP address of the host.</p>"
+        },
+        "keyName":{
+          "shape":"KeyName",
+          "documentation":"<p>The name of the SSH key that is used to access the host.</p>"
+        },
+        "instanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>The EC2 instance type of the host.</p> <note> <p>EC2 instances created through Amazon EVS do not support associating an IAM instance profile.</p> </note>"
+        },
+        "placementGroupId":{
+          "shape":"PlacementGroupId",
+          "documentation":"<p>The unique ID of the placement group where the host is placed.</p>"
+        },
+        "dedicatedHostId":{
+          "shape":"DedicatedHostId",
+          "documentation":"<p>The unique ID of the Amazon EC2 Dedicated Host.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the host was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the host was modified.</p>"
+        },
+        "hostState":{
+          "shape":"HostState",
+          "documentation":"<p> The state of the host.</p>"
+        },
+        "stateDetails":{
+          "shape":"StateDetails",
+          "documentation":"<p> A detailed description of the <code>hostState</code> of a host.</p>"
+        },
+        "ec2InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID of the EC2 instance that represents the host.</p>"
+        },
+        "networkInterfaces":{
+          "shape":"NetworkInterfaceList",
+          "documentation":"<p>The elastic network interfaces that are attached to the host.</p>"
+        }
+      },
+      "documentation":"<p>An ESXi host that runs on an Amazon EC2 bare metal instance. Four hosts are created in an Amazon EVS environment during environment creation. You can add hosts to an environment using the <code>CreateEnvironmentHost</code> operation. Amazon EVS supports 4-16 hosts per environment.</p>"
+    },
+    "HostInfoForCreate":{
+      "type":"structure",
+      "required":[
+        "hostName",
+        "keyName",
+        "instanceType"
+      ],
+      "members":{
+        "hostName":{
+          "shape":"HostName",
+          "documentation":"<p>The DNS hostname of the host. DNS hostnames for hosts must be unique across Amazon EVS environments and within VCF.</p>"
+        },
+        "keyName":{
+          "shape":"KeyName",
+          "documentation":"<p>The name of the SSH key that is used to access the host.</p>"
+        },
+        "instanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>The EC2 instance type that represents the host.</p>"
+        },
+        "placementGroupId":{
+          "shape":"PlacementGroupId",
+          "documentation":"<p>The unique ID of the placement group where the host is placed.</p>"
+        },
+        "dedicatedHostId":{
+          "shape":"DedicatedHostId",
+          "documentation":"<p>The unique ID of the Amazon EC2 Dedicated Host.</p>"
+        }
+      },
+      "documentation":"<p>An object that represents a host.</p> <note> <p>You cannot use <code>dedicatedHostId</code> and <code>placementGroupId</code> together in the same <code>HostInfoForCreate</code>object. This results in a <code>ValidationException</code> response.</p> </note>"
+    },
+    "HostInfoForCreateList":{
+      "type":"list",
+      "member":{"shape":"HostInfoForCreate"},
+      "max":4,
+      "min":4
+    },
+    "HostList":{
+      "type":"list",
+      "member":{"shape":"Host"}
+    },
+    "HostName":{
+      "type":"string",
+      "pattern":"([a-zA-Z0-9\\-]*)"
+    },
+    "HostState":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATED",
+        "UPDATING",
+        "DELETING",
+        "DELETED",
+        "CREATE_FAILED",
+        "UPDATE_FAILED"
+      ]
+    },
+    "InitialVlanInfo":{
+      "type":"structure",
+      "required":["cidr"],
+      "members":{
+        "cidr":{
+          "shape":"Cidr",
+          "documentation":"<p> The CIDR block that you provide to create an Amazon EVS VLAN subnet. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24. Amazon EVS VLAN subnet CIDR blocks must not overlap with other subnets in the VPC.</p>"
+        }
+      },
+      "documentation":"<p>An object that represents an initial VLAN subnet for the Amazon EVS environment. Amazon EVS creates initial VLAN subnets when you first create the environment. Amazon EVS creates the following 10 VLAN subnets: host management VLAN, vMotion VLAN, vSAN VLAN, VTEP VLAN, Edge VTEP VLAN, Management VM VLAN, HCX uplink VLAN, NSX uplink VLAN, expansion VLAN 1, expansion VLAN 2.</p> <note> <p>For each Amazon EVS VLAN subnet, you must specify a non-overlapping CIDR block. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24.</p> </note>"
+    },
+    "InitialVlans":{
+      "type":"structure",
+      "required":[
+        "vmkManagement",
+        "vmManagement",
+        "vMotion",
+        "vSan",
+        "vTep",
+        "edgeVTep",
+        "nsxUplink",
+        "hcx",
+        "expansionVlan1",
+        "expansionVlan2"
+      ],
+      "members":{
+        "vmkManagement":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p> The host VMkernel management VLAN subnet. This VLAN subnet carries traffic for managing ESXi hosts and communicating with VMware vCenter Server.</p>"
+        },
+        "vmManagement":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p>The VM management VLAN subnet. This VLAN subnet carries traffic for vSphere virtual machines.</p>"
+        },
+        "vMotion":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p> The vMotion VLAN subnet. This VLAN subnet carries traffic for vSphere vMotion.</p>"
+        },
+        "vSan":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p> The vSAN VLAN subnet. This VLAN subnet carries the communication between ESXi hosts to implement a vSAN shared storage pool.</p>"
+        },
+        "vTep":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p> The VTEP VLAN subnet. This VLAN subnet handles internal network traffic between virtual machines within a VCF instance.</p>"
+        },
+        "edgeVTep":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p>The edge VTEP VLAN subnet. This VLAN subnet manages traffic flowing between the internal network and external networks, including internet access and other site connections.</p>"
+        },
+        "nsxUplink":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p> The NSX uplink VLAN subnet. This VLAN subnet allows connectivity to the NSX overlay network.</p>"
+        },
+        "hcx":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p>The HCX VLAN subnet. This VLAN subnet allows the HCX Interconnnect (IX) and HCX Network Extension (NE) to reach their peers and enable HCX Service Mesh creation.</p> <p>If you plan to use a public HCX VLAN subnet, the following requirements must be met:</p> <ul> <li> <p>Must have a /28 netmask and be allocated from the IPAM public pool. Required for HCX internet access configuration.</p> </li> <li> <p>The HCX public VLAN CIDR block must be added to the VPC as a secondary CIDR block.</p> </li> <li> <p>Must have at least three Elastic IP addresses to be allocated from the public IPAM pool for HCX components.</p> </li> </ul>"
+        },
+        "expansionVlan1":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p>An additional VLAN subnet that can be used to extend VCF capabilities once configured. For example, you can configure an expansion VLAN subnet to use NSX Federation for centralized management and synchronization of multiple NSX deployments across different locations.</p>"
+        },
+        "expansionVlan2":{
+          "shape":"InitialVlanInfo",
+          "documentation":"<p>An additional VLAN subnet that can be used to extend VCF capabilities once configured. For example, you can configure an expansion VLAN subnet to use NSX Federation for centralized management and synchronization of multiple NSX deployments across different locations.</p>"
+        },
+        "isHcxPublic":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if the HCX VLAN that Amazon EVS provisions is public or private.</p>"
+        },
+        "hcxNetworkAclId":{
+          "shape":"NetworkAclId",
+          "documentation":"<p>A unique ID for a network access control list that the HCX VLAN uses. Required when <code>isHcxPublic</code> is set to <code>true</code>.</p>"
+        }
+      },
+      "documentation":"<p>The initial VLAN subnets for the environment. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24. Amazon EVS VLAN subnet CIDR blocks must not overlap with other subnets in the VPC.</p>"
+    },
+    "InstanceType":{
+      "type":"string",
+      "enum":["i4i.metal"]
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "IpAddress":{
+      "type":"string",
+      "pattern":"(\\d{1,3}\\.){3}\\d{1,3}"
+    },
+    "KeyName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_-]+"
+    },
+    "LicenseInfo":{
+      "type":"structure",
+      "required":[
+        "solutionKey",
+        "vsanKey"
+      ],
+      "members":{
+        "solutionKey":{
+          "shape":"SolutionKey",
+          "documentation":"<p> The VCF solution key. This license unlocks VMware VCF product features, including vSphere, NSX, SDDC Manager, and vCenter Server. The VCF solution key must cover a minimum of 256 cores.</p>"
+        },
+        "vsanKey":{
+          "shape":"VSanLicenseKey",
+          "documentation":"<p> The VSAN license key. This license unlocks vSAN features. The vSAN license key must provide at least 110 TiB of vSAN capacity.</p>"
+        }
+      },
+      "documentation":"<p> The license information that Amazon EVS requires to create an environment. Amazon EVS requires two license keys: a VCF solution key and a vSAN license key.</p>"
+    },
+    "LicenseInfoList":{
+      "type":"list",
+      "member":{"shape":"LicenseInfo"},
+      "max":1,
+      "min":1
+    },
+    "ListEnvironmentHostsRequest":{
+      "type":"structure",
+      "required":["environmentId"],
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for each page. If <code>nextToken</code> is returned, there are more results available. Make the call again using the returned token with all other arguments unchanged to retrieve the next page. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken</i> error.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified.</p>"
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment.</p>"
+        }
+      }
+    },
+    "ListEnvironmentHostsResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for next page results. Make the call again using this token to retrieve the next page.</p>"
+        },
+        "environmentHosts":{
+          "shape":"HostList",
+          "documentation":"<p>A list of hosts in the environment.</p>"
+        }
+      }
+    },
+    "ListEnvironmentVlansRequest":{
+      "type":"structure",
+      "required":["environmentId"],
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for each page. If <code>nextToken</code> is returned, there are more results available. Make the call again using the returned token with all other arguments unchanged to retrieve the next page. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken</i> error.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified.</p>"
+        },
+        "environmentId":{
+          "shape":"EnvironmentId",
+          "documentation":"<p>A unique ID for the environment.</p>"
+        }
+      }
+    },
+    "ListEnvironmentVlansResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for next page results. Make the call again using this token to retrieve the next page.</p>"
+        },
+        "environmentVlans":{
+          "shape":"VlanList",
+          "documentation":"<p>A list of VLANs that are associated with the specified environment.</p>"
+        }
+      }
+    },
+    "ListEnvironmentsRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for each page. If <code>nextToken</code> is returned, there are more results available. Make the call again using the returned token with all other arguments unchanged to retrieve the next page. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken</i> error.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified.</p>"
+        },
+        "state":{
+          "shape":"EnvironmentStateList",
+          "documentation":"<p>The state of an environment. Used to filter response results to return only environments with the specified <code>environmentState</code>.</p>"
+        }
+      }
+    },
+    "ListEnvironmentsResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>A unique pagination token for next page results. Make the call again using this token to retrieve the next page.</p>"
+        },
+        "environmentSummaries":{
+          "shape":"EnvironmentSummaryList",
+          "documentation":"<p>A list of environments with summarized environment details.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the resource to list tags for.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"ResponseTagMap",
+          "documentation":"<p>The tags for the resource.</p>"
+        }
+      }
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "NetworkAclId":{
+      "type":"string",
+      "max":21,
+      "min":4,
+      "pattern":"acl-[a-zA-Z0-9_-]+"
+    },
+    "NetworkInterface":{
+      "type":"structure",
+      "members":{
+        "networkInterfaceId":{
+          "shape":"NetworkInterfaceId",
+          "documentation":"<p>The unique ID of the elastic network interface.</p>"
+        }
+      },
+      "documentation":"<p>An elastic network interface (ENI) that connects hosts to the VLAN subnets. Amazon EVS provisions two identically configured ENIs in the VMkernel management subnet during host creation. One ENI is active, and the other is in standby mode for automatic switchover during a failure scenario.</p>"
+    },
+    "NetworkInterfaceId":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "NetworkInterfaceList":{
+      "type":"list",
+      "member":{"shape":"NetworkInterface"},
+      "max":2,
+      "min":0
+    },
+    "PaginationToken":{"type":"string"},
+    "PlacementGroupId":{
+      "type":"string",
+      "max":25,
+      "min":1,
+      "pattern":"pg-[a-f0-9]{8}([a-f0-9]{9})?"
+    },
+    "RequestTagMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":200,
+      "min":1
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "resourceId",
+        "resourceType"
+      ],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered.</p>"
+        },
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the resource that could not be found.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>The type of the resource that is associated with the error.</p>"
+        }
+      },
+      "documentation":"<p>A service resource associated with the request could not be found. The resource might not be specified correctly, or it may have a <code>state</code> of <code>DELETED</code>.</p>",
+      "exception":true
+    },
+    "ResponseTagMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"}
+    },
+    "RouteServerPeering":{
+      "type":"string",
+      "max":21,
+      "min":3
+    },
+    "RouteServerPeeringList":{
+      "type":"list",
+      "member":{"shape":"RouteServerPeering"},
+      "max":2,
+      "min":2
+    },
+    "Secret":{
+      "type":"structure",
+      "members":{
+        "secretArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the secret.</p>"
+        }
+      },
+      "documentation":"<p>A managed secret that contains the credentials for installing vCenter Server, NSX, and SDDC Manager. During environment creation, the Amazon EVS control plane uses Amazon Web Services Secrets Manager to create, encrypt, validate, and store secrets. If you choose to delete your environment, Amazon EVS also deletes the secrets that are associated with your environment. Amazon EVS does not provide managed rotation of secrets. We recommend that you rotate secrets regularly to ensure that secrets are not long-lived.</p>"
+    },
+    "SecretList":{
+      "type":"list",
+      "member":{"shape":"Secret"}
+    },
+    "SecurityGroupId":{
+      "type":"string",
+      "max":25,
+      "min":3,
+      "pattern":"sg-[0-9a-zA-Z]*"
+    },
+    "SecurityGroups":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "max":2,
+      "min":0
+    },
+    "ServiceAccessSecurityGroups":{
+      "type":"structure",
+      "members":{
+        "securityGroups":{
+          "shape":"SecurityGroups",
+          "documentation":"<p>The security groups that allow service access.</p>"
+        }
+      },
+      "documentation":"<p>The security groups that allow traffic between the Amazon EVS control plane and your VPC for Amazon EVS service access. If a security group is not specified, Amazon EVS uses the default security group in your account for service access.</p>"
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation":"<p>The number of one or more Amazon EVS resources exceeds the maximum allowed. For a list of Amazon EVS quotas, see <a href=\"https://docs.aws.amazon.com/evs/latest/userguide/service-quotas-evs.html\">Amazon EVS endpoints and quotas</a> in the <i>Amazon EVS User Guide</i>. Delete some resources or request an increase in your service quota. To request an increase, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html\">Amazon Web Services Service Quotas</a> in the <i>Amazon Web Services General Reference Guide</i>. </p>",
+      "exception":true
+    },
+    "SolutionKey":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}"
+    },
+    "StateDetails":{"type":"string"},
+    "String":{"type":"string"},
+    "SubnetId":{
+      "type":"string",
+      "max":24,
+      "min":15,
+      "pattern":"subnet-[a-f0-9]{8}([a-f0-9]{9})?"
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\w.:/=+-@]+"
+    },
+    "TagKeys":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":1
+    },
+    "TagPolicyException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered</p>"
+        }
+      },
+      "documentation":"<p><note> <p> <code>TagPolicyException</code> is deprecated. See <a href=\"https://docs.aws.amazon.com/evs/latest/APIReference/API_ValidationException.html\"> <code>ValidationException</code> </a> instead.</p> </note> <p>The request doesn't comply with IAM tag policy. Correct your request and then retry it.</p></p>",
+      "exception":true
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to add tags to.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>Metadata that assists with categorization and organization. Each tag consists of a key and an optional value. You define both. Tags don't propagate to any other environment or Amazon Web Services resources.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"[\\w.:/=+-@]+|"
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered.</p>"
+        },
+        "retryAfterSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>The seconds to wait to retry.</p>"
+        }
+      },
+      "documentation":"<p>The operation couldn't be performed because the service is throttling requests. This exception is thrown when there are too many requests accepted concurrently from the service endpoint.</p>",
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "Timestamp":{"type":"timestamp"},
+    "TooManyTagsException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered.</p>"
+        }
+      },
+      "documentation":"<p><note> <p> <code>TooManyTagsException</code> is deprecated. See <a href=\"https://docs.aws.amazon.com/evs/latest/APIReference/API_ServiceQuotaExceededException.html\"> <code>ServiceQuotaExceededException</code> </a> instead.</p> </note> <p>A service resource associated with the request has more than 200 tags.</p></p>",
+      "exception":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to delete tags from.</p>"
+        },
+        "tagKeys":{
+          "shape":"TagKeys",
+          "documentation":"<p>The keys of the tags to delete.</p>"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "VSanLicenseKey":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}-[a-zA-Z0-9]{5}"
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "reason"
+      ],
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Describes the error encountered.</p>"
+        },
+        "reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>The reason for the exception.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>A list of fields that didn't validate.</p>"
+        }
+      },
+      "documentation":"<p>The input fails to satisfy the specified constraints. You will see this exception if invalid inputs are provided for any of the Amazon EVS environment operations, or if a list operation is performed on an environment resource that is still initializing.</p>",
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "message"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p> The field name.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p> A message describing why the field failed validation.</p>"
+        }
+      },
+      "documentation":"<p>Stores information about a field passed inside a request that resulted in an exception.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "unknownOperation",
+        "cannotParse",
+        "fieldValidationFailed",
+        "other"
+      ]
+    },
+    "VcfHostnames":{
+      "type":"structure",
+      "required":[
+        "vCenter",
+        "nsx",
+        "nsxManager1",
+        "nsxManager2",
+        "nsxManager3",
+        "nsxEdge1",
+        "nsxEdge2",
+        "sddcManager",
+        "cloudBuilder"
+      ],
+      "members":{
+        "vCenter":{
+          "shape":"HostName",
+          "documentation":"<p>The VMware vCenter hostname.</p>"
+        },
+        "nsx":{
+          "shape":"HostName",
+          "documentation":"<p>The VMware NSX hostname.</p>"
+        },
+        "nsxManager1":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for the first VMware NSX Manager virtual machine (VM).</p>"
+        },
+        "nsxManager2":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for the second VMware NSX Manager virtual machine (VM).</p>"
+        },
+        "nsxManager3":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for the third VMware NSX Manager virtual machine (VM).</p>"
+        },
+        "nsxEdge1":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for the first NSX Edge node.</p>"
+        },
+        "nsxEdge2":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for the second NSX Edge node.</p>"
+        },
+        "sddcManager":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for SDDC Manager.</p>"
+        },
+        "cloudBuilder":{
+          "shape":"HostName",
+          "documentation":"<p>The hostname for VMware Cloud Builder.</p>"
+        }
+      },
+      "documentation":"<p>The DNS hostnames that Amazon EVS uses to install VMware vCenter Server, NSX, SDDC Manager, and Cloud Builder. Each hostname must be unique, and resolve to a domain name that you've registered in your DNS service of choice. Hostnames cannot be changed.</p> <p>VMware VCF requires the deployment of two NSX Edge nodes, and three NSX Manager virtual machines.</p>"
+    },
+    "VcfVersion":{
+      "type":"string",
+      "enum":["VCF-5.2.1"]
+    },
+    "Vlan":{
+      "type":"structure",
+      "members":{
+        "vlanId":{
+          "shape":"VlanId",
+          "documentation":"<p>The unique ID of the VLAN.</p>"
+        },
+        "cidr":{
+          "shape":"Cidr",
+          "documentation":"<p>The CIDR block of the VLAN. Amazon EVS VLAN subnets have a minimum CIDR block size of /28 and a maximum size of /24.</p>"
+        },
+        "availabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The availability zone of the VLAN.</p>"
+        },
+        "functionName":{
+          "shape":"String",
+          "documentation":"<p>The VMware VCF traffic type that is carried over the VLAN. For example, a VLAN with a <code>functionName</code> of <code>hcx</code> is being used to carry VMware HCX traffic.</p>"
+        },
+        "subnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p> The unique ID of the VLAN subnet.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the VLAN was created.</p>"
+        },
+        "modifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the VLAN was modified.</p>"
+        },
+        "vlanState":{
+          "shape":"VlanState",
+          "documentation":"<p> The state of the VLAN.</p>"
+        },
+        "stateDetails":{
+          "shape":"StateDetails",
+          "documentation":"<p>The state details of the VLAN.</p>"
+        },
+        "eipAssociations":{
+          "shape":"EipAssociationList",
+          "documentation":"<p>An array of Elastic IP address associations.</p>"
+        },
+        "isPublic":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if the VLAN that Amazon EVS provisions is public or private.</p>"
+        },
+        "networkAclId":{
+          "shape":"NetworkAclId",
+          "documentation":"<p>A unique ID for a network access control list.</p>"
+        }
+      },
+      "documentation":"<p>The VLANs that Amazon EVS creates during environment creation.</p>"
+    },
+    "VlanId":{
+      "type":"integer",
+      "box":true
+    },
+    "VlanList":{
+      "type":"list",
+      "member":{"shape":"Vlan"}
+    },
+    "VlanState":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "CREATED",
+        "DELETING",
+        "DELETED",
+        "CREATE_FAILED"
+      ]
+    },
+    "VpcId":{
+      "type":"string",
+      "max":21,
+      "min":12,
+      "pattern":"vpc-[a-f0-9]{8}([a-f0-9]{9})?"
+    }
+  },
+  "documentation":"<p>Amazon Elastic VMware Service (Amazon EVS) is a service that you can use to deploy a VMware Cloud Foundation (VCF) software environment directly on EC2 bare metal instances within an Amazon Virtual Private Cloud (VPC).</p> <p>Workloads running on Amazon EVS are fully compatible with workloads running on any standard VMware vSphere environment. This means that you can migrate any VMware-based workload to Amazon EVS without workload modification.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/evs/2023-07-27/waiters-2.json 2.31.35-1/awscli/botocore/data/evs/2023-07-27/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/evs/2023-07-27/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/evs/2023-07-27/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/finspace/2021-03-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/finspace/2021-03-12/service-2.json 2.31.35-1/awscli/botocore/data/finspace/2021-03-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/finspace/2021-03-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/finspace/2021-03-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1976,8 +1976,7 @@
     },
     "DeleteEnvironmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxClusterNodeRequest":{
       "type":"structure",
@@ -2009,8 +2008,7 @@
     },
     "DeleteKxClusterNodeResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxClusterRequest":{
       "type":"structure",
@@ -2042,8 +2040,7 @@
     },
     "DeleteKxClusterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxDatabaseRequest":{
       "type":"structure",
@@ -2076,8 +2073,7 @@
     },
     "DeleteKxDatabaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxDataviewRequest":{
       "type":"structure",
@@ -2117,8 +2113,7 @@
     },
     "DeleteKxDataviewResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxEnvironmentRequest":{
       "type":"structure",
@@ -2141,8 +2136,7 @@
     },
     "DeleteKxEnvironmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxScalingGroupRequest":{
       "type":"structure",
@@ -2174,8 +2168,7 @@
     },
     "DeleteKxScalingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxUserRequest":{
       "type":"structure",
@@ -2207,8 +2200,7 @@
     },
     "DeleteKxUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKxVolumeRequest":{
       "type":"structure",
@@ -2240,8 +2232,7 @@
     },
     "DeleteKxVolumeResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Description":{
       "type":"string",
@@ -4808,8 +4799,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4891,8 +4881,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEnvironmentRequest":{
       "type":"structure",
@@ -4970,8 +4959,7 @@
     },
     "UpdateKxClusterCodeConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateKxClusterDatabasesRequest":{
       "type":"structure",
@@ -5010,8 +4998,7 @@
     },
     "UpdateKxClusterDatabasesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateKxDatabaseRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/finspace-data/2020-07-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/finspace-data/2020-07-13/service-2.json 2.31.35-1/awscli/botocore/data/finspace-data/2020-07-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/finspace-data/2020-07-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/finspace-data/2020-07-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"finspace-api",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"FinSpace Data",
     "serviceFullName":"FinSpace Public API",
     "serviceId":"finspace data",
     "signatureVersion":"v4",
     "signingName":"finspace-api",
-    "uid":"finspace-2020-07-13"
+    "uid":"finspace-2020-07-13",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateUserToPermissionGroup":{
@@ -2594,8 +2596,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was denied due to request throttling.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/firehose/2015-08-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/firehose/2015-08-04/service-2.json 2.31.35-1/awscli/botocore/data/firehose/2015-08-04/service-2.json
--- 2.23.6-1/awscli/botocore/data/firehose/2015-08-04/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/firehose/2015-08-04/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,7 +29,7 @@
         {"shape":"ResourceInUseException"},
         {"shape":"InvalidKMSResourceException"}
       ],
-      "documentation":"<p>Creates a Firehose stream.</p> <p>By default, you can create up to 50 Firehose streams per Amazon Web Services Region.</p> <p>This is an asynchronous operation that immediately returns. The initial status of the Firehose stream is <code>CREATING</code>. After the Firehose stream is created, its status is <code>ACTIVE</code> and it now accepts data. If the Firehose stream creation fails, the status transitions to <code>CREATING_FAILED</code>. Attempts to send data to a delivery stream that is not in the <code>ACTIVE</code> state cause an exception. To check the state of a Firehose stream, use <a>DescribeDeliveryStream</a>.</p> <p>If the status of a Firehose stream is <code>CREATING_FAILED</code>, this status doesn't change, and you can't invoke <code>CreateDeliveryStream</code> again on it. However, you can invoke the <a>DeleteDeliveryStream</a> operation to delete it.</p> <p>A Firehose stream can be configured to receive records directly from providers using <a>PutRecord</a> or <a>PutRecordBatch</a>, or it can be configured to use an existing Kinesis stream as its source. To specify a Kinesis data stream as input, set the <code>DeliveryStreamType</code> parameter to <code>KinesisStreamAsSource</code>, and provide the Kinesis stream Amazon Resource Name (ARN) and role ARN in the <code>KinesisStreamSourceConfiguration</code> parameter.</p> <p>To create a Firehose stream with server-side encryption (SSE) enabled, include <a>DeliveryStreamEncryptionConfigurationInput</a> in your request. This is optional. You can also invoke <a>StartDeliveryStreamEncryption</a> to turn on SSE for an existing Firehose stream that doesn't have SSE enabled.</p> <p>A Firehose stream is configured with a single destination, such as Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Amazon OpenSearch Serverless, Splunk, and any custom HTTP endpoint or HTTP endpoints owned by or supported by third-party service providers, including Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, and Sumo Logic. You must specify only one of the following destination configuration parameters: <code>ExtendedS3DestinationConfiguration</code>, <code>S3DestinationConfiguration</code>, <code>ElasticsearchDestinationConfiguration</code>, <code>RedshiftDestinationConfiguration</code>, or <code>SplunkDestinationConfiguration</code>.</p> <p>When you specify <code>S3DestinationConfiguration</code>, you can also provide the following optional values: BufferingHints, <code>EncryptionConfiguration</code>, and <code>CompressionFormat</code>. By default, if no <code>BufferingHints</code> value is provided, Firehose buffers data up to 5 MB or for 5 minutes, whichever condition is satisfied first. <code>BufferingHints</code> is a hint, so there are some cases where the service cannot adhere to these conditions strictly. For example, record boundaries might be such that the size is a little over or under the configured buffering size. By default, no encryption is performed. We strongly recommend that you enable encryption to ensure secure data storage in Amazon S3.</p> <p>A few notes about Amazon Redshift as a destination:</p> <ul> <li> <p>An Amazon Redshift destination requires an S3 bucket as intermediate location. Firehose first delivers data to Amazon S3 and then uses <code>COPY</code> syntax to load data into an Amazon Redshift table. This is specified in the <code>RedshiftDestinationConfiguration.S3Configuration</code> parameter.</p> </li> <li> <p>The compression formats <code>SNAPPY</code> or <code>ZIP</code> cannot be specified in <code>RedshiftDestinationConfiguration.S3Configuration</code> because the Amazon Redshift <code>COPY</code> operation that reads from the S3 bucket doesn't support these compression formats.</p> </li> <li> <p>We strongly recommend that you use the user name and password you provide exclusively with Firehose, and that the permissions for the account are restricted for Amazon Redshift <code>INSERT</code> permissions.</p> </li> </ul> <p>Firehose assumes the IAM role that is configured as part of the destination. The role should allow the Firehose principal to assume the role, and the role should have permissions that allow the service to deliver the data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> in the <i>Amazon Firehose Developer Guide</i>.</p>"
+      "documentation":"<p>Creates a Firehose stream.</p> <p>By default, you can create up to 5,000 Firehose streams per Amazon Web Services Region.</p> <p>This is an asynchronous operation that immediately returns. The initial status of the Firehose stream is <code>CREATING</code>. After the Firehose stream is created, its status is <code>ACTIVE</code> and it now accepts data. If the Firehose stream creation fails, the status transitions to <code>CREATING_FAILED</code>. Attempts to send data to a delivery stream that is not in the <code>ACTIVE</code> state cause an exception. To check the state of a Firehose stream, use <a>DescribeDeliveryStream</a>.</p> <p>If the status of a Firehose stream is <code>CREATING_FAILED</code>, this status doesn't change, and you can't invoke <code>CreateDeliveryStream</code> again on it. However, you can invoke the <a>DeleteDeliveryStream</a> operation to delete it.</p> <p>A Firehose stream can be configured to receive records directly from providers using <a>PutRecord</a> or <a>PutRecordBatch</a>, or it can be configured to use an existing Kinesis stream as its source. To specify a Kinesis data stream as input, set the <code>DeliveryStreamType</code> parameter to <code>KinesisStreamAsSource</code>, and provide the Kinesis stream Amazon Resource Name (ARN) and role ARN in the <code>KinesisStreamSourceConfiguration</code> parameter.</p> <p>To create a Firehose stream with server-side encryption (SSE) enabled, include <a>DeliveryStreamEncryptionConfigurationInput</a> in your request. This is optional. You can also invoke <a>StartDeliveryStreamEncryption</a> to turn on SSE for an existing Firehose stream that doesn't have SSE enabled.</p> <p>A Firehose stream is configured with a single destination, such as Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Amazon OpenSearch Serverless, Splunk, and any custom HTTP endpoint or HTTP endpoints owned by or supported by third-party service providers, including Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, and Sumo Logic. You must specify only one of the following destination configuration parameters: <code>ExtendedS3DestinationConfiguration</code>, <code>S3DestinationConfiguration</code>, <code>ElasticsearchDestinationConfiguration</code>, <code>RedshiftDestinationConfiguration</code>, or <code>SplunkDestinationConfiguration</code>.</p> <p>When you specify <code>S3DestinationConfiguration</code>, you can also provide the following optional values: BufferingHints, <code>EncryptionConfiguration</code>, and <code>CompressionFormat</code>. By default, if no <code>BufferingHints</code> value is provided, Firehose buffers data up to 5 MB or for 5 minutes, whichever condition is satisfied first. <code>BufferingHints</code> is a hint, so there are some cases where the service cannot adhere to these conditions strictly. For example, record boundaries might be such that the size is a little over or under the configured buffering size. By default, no encryption is performed. We strongly recommend that you enable encryption to ensure secure data storage in Amazon S3.</p> <p>A few notes about Amazon Redshift as a destination:</p> <ul> <li> <p>An Amazon Redshift destination requires an S3 bucket as intermediate location. Firehose first delivers data to Amazon S3 and then uses <code>COPY</code> syntax to load data into an Amazon Redshift table. This is specified in the <code>RedshiftDestinationConfiguration.S3Configuration</code> parameter.</p> </li> <li> <p>The compression formats <code>SNAPPY</code> or <code>ZIP</code> cannot be specified in <code>RedshiftDestinationConfiguration.S3Configuration</code> because the Amazon Redshift <code>COPY</code> operation that reads from the S3 bucket doesn't support these compression formats.</p> </li> <li> <p>We strongly recommend that you use the user name and password you provide exclusively with Firehose, and that the permissions for the account are restricted for Amazon Redshift <code>INSERT</code> permissions.</p> </li> </ul> <p>Firehose assumes the IAM role that is configured as part of the destination. The role should allow the Firehose principal to assume the role, and the role should have permissions that allow the service to deliver the data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> in the <i>Amazon Firehose Developer Guide</i>.</p>"
     },
     "DeleteDeliveryStream":{
       "name":"DeleteDeliveryStream",
@@ -648,7 +648,7 @@
         },
         "WarehouseLocation":{
           "shape":"WarehouseLocation",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The warehouse location for Apache Iceberg tables. You must configure this when schema evolution and table creation is enabled.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
       "documentation":"<p> Describes the containers where the destination Apache Iceberg Tables are persisted. </p>"
@@ -754,6 +754,10 @@
           "shape":"DeliveryStreamType",
           "documentation":"<p>The Firehose stream type. This parameter can be one of the following values:</p> <ul> <li> <p> <code>DirectPut</code>: Provider applications access the Firehose stream directly.</p> </li> <li> <p> <code>KinesisStreamAsSource</code>: The Firehose stream uses a Kinesis data stream as a source.</p> </li> </ul>"
         },
+        "DirectPutSourceConfiguration":{
+          "shape":"DirectPutSourceConfiguration",
+          "documentation":"<p>The structure that configures parameters such as <code>ThroughputHintInMBs</code> for a stream configured with Direct PUT as a source. </p>"
+        },
         "KinesisStreamSourceConfiguration":{
           "shape":"KinesisStreamSourceConfiguration",
           "documentation":"<p>When a Kinesis data stream is used as the source for the Firehose stream, a <a>KinesisStreamSourceConfiguration</a> containing the Kinesis data stream Amazon Resource Name (ARN) and the role ARN for the source stream.</p>"
@@ -777,7 +781,7 @@
         },
         "ElasticsearchDestinationConfiguration":{
           "shape":"ElasticsearchDestinationConfiguration",
-          "documentation":"<p>The destination in Amazon ES. You can specify only one destination.</p>"
+          "documentation":"<p>The destination in Amazon OpenSearch Service. You can specify only one destination.</p>"
         },
         "AmazonopensearchserviceDestinationConfiguration":{
           "shape":"AmazonopensearchserviceDestinationConfiguration",
@@ -793,7 +797,7 @@
         },
         "Tags":{
           "shape":"TagDeliveryStreamInputTagList",
-          "documentation":"<p>A set of tags to assign to the Firehose stream. A tag is a key-value pair that you can define and assign to Amazon Web Services resources. Tags are metadata. For example, you can add friendly names and descriptions or other types of information that can help you distinguish the Firehose stream. For more information about tags, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html\">Using Cost Allocation Tags</a> in the Amazon Web Services Billing and Cost Management User Guide.</p> <p>You can specify up to 50 tags when creating a Firehose stream.</p> <p>If you specify tags in the <code>CreateDeliveryStream</code> action, Amazon Data Firehose performs an additional authorization on the <code>firehose:TagDeliveryStream</code> action to verify if users have permissions to create tags. If you do not provide this permission, requests to create new Firehose Firehose streams with IAM resource tags will fail with an <code>AccessDeniedException</code> such as following.</p> <p> <b>AccessDeniedException</b> </p> <p>User: arn:aws:sts::x:assumed-role/x/x is not authorized to perform: firehose:TagDeliveryStream on resource: arn:aws:firehose:us-east-1:x:deliverystream/x with an explicit deny in an identity-based policy.</p> <p>For an example IAM policy, see <a href=\"https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html#API_CreateDeliveryStream_Examples\">Tag example.</a> </p>"
+          "documentation":"<p>A set of tags to assign to the Firehose stream. A tag is a key-value pair that you can define and assign to Amazon Web Services resources. Tags are metadata. For example, you can add friendly names and descriptions or other types of information that can help you distinguish the Firehose stream. For more information about tags, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html\">Using Cost Allocation Tags</a> in the Amazon Web Services Billing and Cost Management User Guide.</p> <p>You can specify up to 50 tags when creating a Firehose stream.</p> <p>If you specify tags in the <code>CreateDeliveryStream</code> action, Amazon Data Firehose performs an additional authorization on the <code>firehose:TagDeliveryStream</code> action to verify if users have permissions to create tags. If you do not provide this permission, requests to create new Firehose streams with IAM resource tags will fail with an <code>AccessDeniedException</code> such as following.</p> <p> <b>AccessDeniedException</b> </p> <p>User: arn:aws:sts::x:assumed-role/x/x is not authorized to perform: firehose:TagDeliveryStream on resource: arn:aws:firehose:us-east-1:x:deliverystream/x with an explicit deny in an identity-based policy.</p> <p>For an example IAM policy, see <a href=\"https://docs.aws.amazon.com/firehose/latest/APIReference/API_CreateDeliveryStream.html#API_CreateDeliveryStream_Examples\">Tag example.</a> </p>"
         },
         "AmazonOpenSearchServerlessDestinationConfiguration":{
           "shape":"AmazonOpenSearchServerlessDestinationConfiguration",
@@ -810,7 +814,7 @@
         },
         "DatabaseSourceConfiguration":{
           "shape":"DatabaseSourceConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The top level object for configuring streams with database as a source. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       }
     },
@@ -877,14 +881,14 @@
       "members":{
         "Include":{
           "shape":"DatabaseColumnIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of column patterns in source database to be included for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Exclude":{
           "shape":"DatabaseColumnIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of column patterns in source database to be excluded for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>The structure used to configure the list of column patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseColumnName":{
       "type":"string",
@@ -907,14 +911,14 @@
       "members":{
         "Include":{
           "shape":"DatabaseIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The list of database patterns in source database endpoint to be included for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Exclude":{
           "shape":"DatabaseIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The list of database patterns in source database endpoint to be excluded for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>The structure used to configure the list of database patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseName":{
       "type":"string",
@@ -939,27 +943,27 @@
       "members":{
         "Id":{
           "shape":"NonEmptyStringWithoutWhitespace",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The identifier of the current snapshot of the table in source database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Table":{
           "shape":"DatabaseTableName",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The fully qualified name of the table in source database endpoint that Firehose reads. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "RequestTimestamp":{
           "shape":"Timestamp",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The timestamp when the current snapshot is taken on the table. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "RequestedBy":{
           "shape":"SnapshotRequestedBy",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The principal that sent the request to take the current snapshot on the table. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Status":{
           "shape":"SnapshotStatus",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The status of the current snapshot of the table. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "FailureDescription":{"shape":"FailureDescription"}
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p> The structure that describes the snapshot information of a table in source database endpoint that Firehose reads. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseSnapshotInfoList":{
       "type":"list",
@@ -971,7 +975,7 @@
       "members":{
         "SecretsManagerConfiguration":{"shape":"SecretsManagerConfiguration"}
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p> The structure to configure the authentication methods for Firehose to connect to source database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseSourceConfiguration":{
       "type":"structure",
@@ -988,104 +992,104 @@
       "members":{
         "Type":{
           "shape":"DatabaseType",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The type of database engine. This can be one of the following values. </p> <ul> <li> <p>MySQL</p> </li> <li> <p>PostgreSQL</p> </li> </ul> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Endpoint":{
           "shape":"DatabaseEndpoint",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The endpoint of the database server. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Port":{
           "shape":"DatabasePort",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The port of the database. This can be one of the following values.</p> <ul> <li> <p>3306 for MySQL database type</p> </li> <li> <p>5432 for PostgreSQL database type</p> </li> </ul> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SSLMode":{
           "shape":"SSLMode",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The mode to enable or disable SSL when Firehose connects to the database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Databases":{
           "shape":"DatabaseList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of database patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Tables":{
           "shape":"DatabaseTableList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of table patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Columns":{
           "shape":"DatabaseColumnList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of column patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SurrogateKeys":{
           "shape":"DatabaseSurrogateKeyList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The optional list of table and column names used as unique key columns when taking snapshot if the tables don’t have primary keys configured. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SnapshotWatermarkTable":{
           "shape":"DatabaseTableName",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The fully qualified name of the table in source database endpoint that Firehose uses to track snapshot progress. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "DatabaseSourceAuthenticationConfiguration":{
           "shape":"DatabaseSourceAuthenticationConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The structure to configure the authentication methods for Firehose to connect to source database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "DatabaseSourceVPCConfiguration":{
           "shape":"DatabaseSourceVPCConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The details of the VPC Endpoint Service which Firehose uses to create a PrivateLink to the database. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p> The top level object for configuring streams with database as a source. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseSourceDescription":{
       "type":"structure",
       "members":{
         "Type":{
           "shape":"DatabaseType",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The type of database engine. This can be one of the following values. </p> <ul> <li> <p>MySQL</p> </li> <li> <p>PostgreSQL</p> </li> </ul> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Endpoint":{
           "shape":"DatabaseEndpoint",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The endpoint of the database server. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Port":{
           "shape":"DatabasePort",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The port of the database. This can be one of the following values.</p> <ul> <li> <p>3306 for MySQL database type</p> </li> <li> <p>5432 for PostgreSQL database type</p> </li> </ul> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SSLMode":{
           "shape":"SSLMode",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The mode to enable or disable SSL when Firehose connects to the database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Databases":{
           "shape":"DatabaseList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of database patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Tables":{
           "shape":"DatabaseTableList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of table patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Columns":{
           "shape":"DatabaseColumnList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The list of column patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SurrogateKeys":{
           "shape":"DatabaseColumnIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The optional list of table and column names used as unique key columns when taking snapshot if the tables don’t have primary keys configured. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SnapshotWatermarkTable":{
           "shape":"DatabaseTableName",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The fully qualified name of the table in source database endpoint that Firehose uses to track snapshot progress. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "SnapshotInfo":{
           "shape":"DatabaseSnapshotInfoList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The structure that describes the snapshot information of a table in source database endpoint that Firehose reads. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "DatabaseSourceAuthenticationConfiguration":{
           "shape":"DatabaseSourceAuthenticationConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The structure to configure the authentication methods for Firehose to connect to source database endpoint. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "DatabaseSourceVPCConfiguration":{
           "shape":"DatabaseSourceVPCConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The details of the VPC Endpoint Service which Firehose uses to create a PrivateLink to the database. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p> The top level object for database source description. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseSourceVPCConfiguration":{
       "type":"structure",
@@ -1093,10 +1097,10 @@
       "members":{
         "VpcEndpointServiceName":{
           "shape":"VpcEndpointServiceName",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The VPC endpoint service name which Firehose uses to create a PrivateLink to the database. The endpoint service must have the Firehose service principle <code>firehose.amazonaws.com</code> as an allowed principal on the VPC endpoint service. The VPC endpoint service name is a string that looks like <code>com.amazonaws.vpce.&lt;region&gt;.&lt;vpc-endpoint-service-id&gt;</code>. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p> The structure for details of the VPC Endpoint Service which Firehose uses to create a PrivateLink to the database. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseSurrogateKeyList":{
       "type":"list",
@@ -1111,14 +1115,14 @@
       "members":{
         "Include":{
           "shape":"DatabaseTableIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The list of table patterns in source database endpoint to be included for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "Exclude":{
           "shape":"DatabaseTableIncludeOrExcludeList",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The list of table patterns in source database endpoint to be excluded for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>The structure used to configure the list of table patterns in source database endpoint for Firehose to read from. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "DatabaseTableName":{
       "type":"string",
@@ -1156,8 +1160,7 @@
     },
     "DeleteDeliveryStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeliveryStartTimestamp":{"type":"timestamp"},
     "DeliveryStreamARN":{
@@ -1403,7 +1406,7 @@
         },
         "ElasticsearchDestinationDescription":{
           "shape":"ElasticsearchDestinationDescription",
-          "documentation":"<p>The destination in Amazon ES.</p>"
+          "documentation":"<p>The destination in Amazon OpenSearch Service.</p>"
         },
         "AmazonopensearchserviceDestinationDescription":{
           "shape":"AmazonopensearchserviceDestinationDescription",
@@ -1463,7 +1466,7 @@
         },
         "PartitionSpec":{
           "shape":"PartitionSpec",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The partition spec configuration for a table that is used by automatic table creation.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "S3ErrorOutputPrefix":{
           "shape":"ErrorOutputPrefix",
@@ -1476,6 +1479,27 @@
       "type":"list",
       "member":{"shape":"DestinationTableConfiguration"}
     },
+    "DirectPutSourceConfiguration":{
+      "type":"structure",
+      "required":["ThroughputHintInMBs"],
+      "members":{
+        "ThroughputHintInMBs":{
+          "shape":"ThroughputHintInMBs",
+          "documentation":"<p> The value that you configure for this parameter is for information purpose only and does not affect Firehose delivery throughput limit. You can use the <a href=\"https://support.console.aws.amazon.com/support/home#/case/create%3FissueType=service-limit-increase%26limitType=kinesis-firehose-limits\">Firehose Limits form</a> to request a throughput limit increase. </p>"
+        }
+      },
+      "documentation":"<p>The structure that configures parameters such as <code>ThroughputHintInMBs</code> for a stream configured with Direct PUT as a source. </p>"
+    },
+    "DirectPutSourceDescription":{
+      "type":"structure",
+      "members":{
+        "ThroughputHintInMBs":{
+          "shape":"ThroughputHintInMBs",
+          "documentation":"<p> The value that you configure for this parameter is for information purpose only and does not affect Firehose delivery throughput limit. You can use the <a href=\"https://support.console.aws.amazon.com/support/home#/case/create%3FissueType=service-limit-increase%26limitType=kinesis-firehose-limits\">Firehose Limits form</a> to request a throughput limit increase. </p>"
+        }
+      },
+      "documentation":"<p>The structure that configures parameters such as <code>ThroughputHintInMBs</code> for a stream configured with Direct PUT as a source. </p>"
+    },
     "DocumentIdOptions":{
       "type":"structure",
       "required":["DefaultDocumentIdFormat"],
@@ -1496,7 +1520,7 @@
         },
         "Enabled":{
           "shape":"BooleanObject",
-          "documentation":"<p>Specifies that the dynamic partitioning is enabled for this Firehose Firehose stream.</p>"
+          "documentation":"<p>Specifies that the dynamic partitioning is enabled for this Firehose stream.</p>"
         }
       },
       "documentation":"<p>The configuration of the dynamic partitioning mechanism that creates smaller data sets from the streaming data by partitioning it based on partition keys. Currently, dynamic partitioning is only supported for Amazon S3 destinations. </p>"
@@ -1513,7 +1537,7 @@
           "documentation":"<p>Buffer incoming data to the specified size, in MBs, before delivering it to the destination. The default value is 5.</p> <p>We recommend setting this parameter to a value greater than the amount of data you typically ingest into the Firehose stream in 10 seconds. For example, if you typically ingest data at 1 MB/sec, the value should be 10 MB or higher.</p>"
         }
       },
-      "documentation":"<p>Describes the buffering to perform before delivering data to the Amazon ES destination.</p>"
+      "documentation":"<p>Describes the buffering to perform before delivering data to the Amazon OpenSearch Service destination.</p>"
     },
     "ElasticsearchBufferingIntervalInSeconds":{
       "type":"integer",
@@ -1541,11 +1565,11 @@
       "members":{
         "RoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling the Amazon OpenSearch Service Configuration API and for indexing documents. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p>"
         },
         "DomainARN":{
           "shape":"ElasticsearchDomainARN",
-          "documentation":"<p>The ARN of the Amazon ES domain. The IAM role must have permissions for <code>DescribeDomain</code>, <code>DescribeDomains</code>, and <code>DescribeDomainConfig</code> after assuming the role specified in <b>RoleARN</b>. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Specify either <code>ClusterEndpoint</code> or <code>DomainARN</code>.</p>"
+          "documentation":"<p>The ARN of the Amazon OpenSearch Service domain. The IAM role must have permissions for <code>DescribeDomain</code>, <code>DescribeDomains</code>, and <code>DescribeDomainConfig</code> after assuming the role specified in <b>RoleARN</b>. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Specify either <code>ClusterEndpoint</code> or <code>DomainARN</code>.</p>"
         },
         "ClusterEndpoint":{
           "shape":"ElasticsearchClusterEndpoint",
@@ -1561,7 +1585,7 @@
         },
         "IndexRotationPeriod":{
           "shape":"ElasticsearchIndexRotationPeriod",
-          "documentation":"<p>The Elasticsearch index rotation period. Index rotation appends a timestamp to the <code>IndexName</code> to facilitate the expiration of old data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation\">Index Rotation for the Amazon ES Destination</a>. The default value is <code>OneDay</code>.</p>"
+          "documentation":"<p>The Elasticsearch index rotation period. Index rotation appends a timestamp to the <code>IndexName</code> to facilitate the expiration of old data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation\">Index Rotation for the Amazon OpenSearch Service Destination</a>. The default value is <code>OneDay</code>.</p>"
         },
         "BufferingHints":{
           "shape":"ElasticsearchBufferingHints",
@@ -1569,11 +1593,11 @@
         },
         "RetryOptions":{
           "shape":"ElasticsearchRetryOptions",
-          "documentation":"<p>The retry behavior in case Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).</p>"
+          "documentation":"<p>The retry behavior in case Firehose is unable to deliver documents to Amazon OpenSearch Service. The default value is 300 (5 minutes).</p>"
         },
         "S3BackupMode":{
           "shape":"ElasticsearchS3BackupMode",
-          "documentation":"<p>Defines how documents should be delivered to Amazon S3. When it is set to <code>FailedDocumentsOnly</code>, Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with <code>AmazonOpenSearchService-failed/</code> appended to the key prefix. When set to <code>AllDocuments</code>, Firehose delivers all incoming records to Amazon S3, and also writes failed documents with <code>AmazonOpenSearchService-failed/</code> appended to the prefix. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup\">Amazon S3 Backup for the Amazon ES Destination</a>. Default value is <code>FailedDocumentsOnly</code>.</p> <p>You can't change this backup mode after you create the Firehose stream. </p>"
+          "documentation":"<p>Defines how documents should be delivered to Amazon S3. When it is set to <code>FailedDocumentsOnly</code>, Firehose writes any documents that could not be indexed to the configured Amazon S3 destination, with <code>AmazonOpenSearchService-failed/</code> appended to the key prefix. When set to <code>AllDocuments</code>, Firehose delivers all incoming records to Amazon S3, and also writes failed documents with <code>AmazonOpenSearchService-failed/</code> appended to the prefix. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-s3-backup\">Amazon S3 Backup for the Amazon OpenSearch Service Destination</a>. Default value is <code>FailedDocumentsOnly</code>.</p> <p>You can't change this backup mode after you create the Firehose stream. </p>"
         },
         "S3Configuration":{
           "shape":"S3DestinationConfiguration",
@@ -1596,7 +1620,7 @@
           "documentation":"<p>Indicates the method for setting up document ID. The supported methods are Firehose generated document ID and OpenSearch Service generated document ID.</p>"
         }
       },
-      "documentation":"<p>Describes the configuration of a destination in Amazon ES.</p>"
+      "documentation":"<p>Describes the configuration of a destination in Amazon OpenSearch Service.</p>"
     },
     "ElasticsearchDestinationDescription":{
       "type":"structure",
@@ -1607,11 +1631,11 @@
         },
         "DomainARN":{
           "shape":"ElasticsearchDomainARN",
-          "documentation":"<p>The ARN of the Amazon ES domain. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Firehose uses either <code>ClusterEndpoint</code> or <code>DomainARN</code> to send data to Amazon ES.</p>"
+          "documentation":"<p>The ARN of the Amazon OpenSearch Service domain. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Firehose uses either <code>ClusterEndpoint</code> or <code>DomainARN</code> to send data to Amazon OpenSearch Service.</p>"
         },
         "ClusterEndpoint":{
           "shape":"ElasticsearchClusterEndpoint",
-          "documentation":"<p>The endpoint to use when communicating with the cluster. Firehose uses either this <code>ClusterEndpoint</code> or the <code>DomainARN</code> field to send data to Amazon ES.</p>"
+          "documentation":"<p>The endpoint to use when communicating with the cluster. Firehose uses either this <code>ClusterEndpoint</code> or the <code>DomainARN</code> field to send data to Amazon OpenSearch Service.</p>"
         },
         "IndexName":{
           "shape":"ElasticsearchIndexName",
@@ -1631,7 +1655,7 @@
         },
         "RetryOptions":{
           "shape":"ElasticsearchRetryOptions",
-          "documentation":"<p>The Amazon ES retry options.</p>"
+          "documentation":"<p>The Amazon OpenSearch Service retry options.</p>"
         },
         "S3BackupMode":{
           "shape":"ElasticsearchS3BackupMode",
@@ -1658,18 +1682,18 @@
           "documentation":"<p>Indicates the method for setting up document ID. The supported methods are Firehose generated document ID and OpenSearch Service generated document ID.</p>"
         }
       },
-      "documentation":"<p>The destination description in Amazon ES.</p>"
+      "documentation":"<p>The destination description in Amazon OpenSearch Service.</p>"
     },
     "ElasticsearchDestinationUpdate":{
       "type":"structure",
       "members":{
         "RoleARN":{
           "shape":"RoleARN",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling the Amazon ES Configuration API and for indexing documents. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling the Amazon OpenSearch Service Configuration API and for indexing documents. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-s3\">Grant Firehose Access to an Amazon S3 Destination</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p>"
         },
         "DomainARN":{
           "shape":"ElasticsearchDomainARN",
-          "documentation":"<p>The ARN of the Amazon ES domain. The IAM role must have permissions for <code>DescribeDomain</code>, <code>DescribeDomains</code>, and <code>DescribeDomainConfig</code> after assuming the IAM role specified in <code>RoleARN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Specify either <code>ClusterEndpoint</code> or <code>DomainARN</code>.</p>"
+          "documentation":"<p>The ARN of the Amazon OpenSearch Service domain. The IAM role must have permissions for <code>DescribeDomain</code>, <code>DescribeDomains</code>, and <code>DescribeDomainConfig</code> after assuming the IAM role specified in <code>RoleARN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a>.</p> <p>Specify either <code>ClusterEndpoint</code> or <code>DomainARN</code>.</p>"
         },
         "ClusterEndpoint":{
           "shape":"ElasticsearchClusterEndpoint",
@@ -1685,7 +1709,7 @@
         },
         "IndexRotationPeriod":{
           "shape":"ElasticsearchIndexRotationPeriod",
-          "documentation":"<p>The Elasticsearch index rotation period. Index rotation appends a timestamp to <code>IndexName</code> to facilitate the expiration of old data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation\">Index Rotation for the Amazon ES Destination</a>. Default value is <code>OneDay</code>.</p>"
+          "documentation":"<p>The Elasticsearch index rotation period. Index rotation appends a timestamp to <code>IndexName</code> to facilitate the expiration of old data. For more information, see <a href=\"https://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html#es-index-rotation\">Index Rotation for the Amazon OpenSearch Service Destination</a>. Default value is <code>OneDay</code>.</p>"
         },
         "BufferingHints":{
           "shape":"ElasticsearchBufferingHints",
@@ -1693,7 +1717,7 @@
         },
         "RetryOptions":{
           "shape":"ElasticsearchRetryOptions",
-          "documentation":"<p>The retry behavior in case Firehose is unable to deliver documents to Amazon ES. The default value is 300 (5 minutes).</p>"
+          "documentation":"<p>The retry behavior in case Firehose is unable to deliver documents to Amazon OpenSearch Service. The default value is 300 (5 minutes).</p>"
         },
         "S3Update":{
           "shape":"S3DestinationUpdate",
@@ -1712,7 +1736,7 @@
           "documentation":"<p>Indicates the method for setting up document ID. The supported methods are Firehose generated document ID and OpenSearch Service generated document ID.</p>"
         }
       },
-      "documentation":"<p>Describes an update for a destination in Amazon ES.</p>"
+      "documentation":"<p>Describes an update for a destination in Amazon OpenSearch Service.</p>"
     },
     "ElasticsearchDomainARN":{
       "type":"string",
@@ -1746,10 +1770,10 @@
       "members":{
         "DurationInSeconds":{
           "shape":"ElasticsearchRetryDurationInSeconds",
-          "documentation":"<p>After an initial failure to deliver to Amazon ES, the total amount of time during which Firehose retries delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.</p>"
+          "documentation":"<p>After an initial failure to deliver to Amazon OpenSearch Service, the total amount of time during which Firehose retries delivery (including the first attempt). After this time has elapsed, the failed documents are written to Amazon S3. Default value is 300 seconds (5 minutes). A value of 0 (zero) results in no retries.</p>"
         }
       },
-      "documentation":"<p>Configures retry behavior in case Firehose is unable to deliver documents to Amazon ES.</p>"
+      "documentation":"<p>Configures retry behavior in case Firehose is unable to deliver documents to Amazon OpenSearch Service.</p>"
     },
     "ElasticsearchS3BackupMode":{
       "type":"string",
@@ -2023,7 +2047,7 @@
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"arn:.*:glue:.*:\\d{12}:catalog"
+      "pattern":"arn:.*:glue:.*:\\d{12}:catalog(?:(/[a-z0-9_-]+){1,2})?"
     },
     "HECAcknowledgmentTimeoutInSeconds":{
       "type":"integer",
@@ -2339,11 +2363,11 @@
         },
         "SchemaEvolutionConfiguration":{
           "shape":"SchemaEvolutionConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The configuration to enable automatic schema evolution.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "TableCreationConfiguration":{
           "shape":"TableCreationConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The configuration to enable automatic table creation.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "BufferingHints":{"shape":"BufferingHints"},
         "CloudWatchLoggingOptions":{"shape":"CloudWatchLoggingOptions"},
@@ -2357,6 +2381,10 @@
           "shape":"RoleARN",
           "documentation":"<p> The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling Apache Iceberg Tables. </p>"
         },
+        "AppendOnly":{
+          "shape":"BooleanObject",
+          "documentation":"<p> Describes whether all incoming data for this delivery stream will be append only (inserts only and not for updates and deletes) for Iceberg delivery. This feature is only applicable for Apache Iceberg Tables.</p> <p>The default value is false. If you set this value to true, Firehose automatically increases the throughput limit of a stream based on the throttling levels of the stream. If you set this parameter to true for a stream with updates and deletes, you will see out of order delivery. </p>"
+        },
         "CatalogConfiguration":{
           "shape":"CatalogConfiguration",
           "documentation":"<p> Configuration describing where the destination Apache Iceberg Tables are persisted. </p>"
@@ -2374,11 +2402,11 @@
         },
         "SchemaEvolutionConfiguration":{
           "shape":"SchemaEvolutionConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>The description of automatic schema evolution configuration.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "TableCreationConfiguration":{
           "shape":"TableCreationConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The description of table creation configuration. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "BufferingHints":{"shape":"BufferingHints"},
         "CloudWatchLoggingOptions":{"shape":"CloudWatchLoggingOptions"},
@@ -2392,6 +2420,10 @@
           "shape":"RoleARN",
           "documentation":"<p> The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling Apache Iceberg Tables. </p>"
         },
+        "AppendOnly":{
+          "shape":"BooleanObject",
+          "documentation":"<p> Describes whether all incoming data for this delivery stream will be append only (inserts only and not for updates and deletes) for Iceberg delivery. This feature is only applicable for Apache Iceberg Tables.</p> <p>The default value is false. If you set this value to true, Firehose automatically increases the throughput limit of a stream based on the throttling levels of the stream. If you set this parameter to true for a stream with updates and deletes, you will see out of order delivery.</p> <p> </p>"
+        },
         "CatalogConfiguration":{
           "shape":"CatalogConfiguration",
           "documentation":"<p> Configuration describing where the destination Iceberg tables are persisted. </p>"
@@ -2409,11 +2441,11 @@
         },
         "SchemaEvolutionConfiguration":{
           "shape":"SchemaEvolutionConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The configuration to enable automatic schema evolution. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "TableCreationConfiguration":{
           "shape":"TableCreationConfiguration",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The configuration to enable automatic table creation. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         },
         "BufferingHints":{"shape":"BufferingHints"},
         "CloudWatchLoggingOptions":{"shape":"CloudWatchLoggingOptions"},
@@ -2427,6 +2459,10 @@
           "shape":"RoleARN",
           "documentation":"<p> The Amazon Resource Name (ARN) of the IAM role to be assumed by Firehose for calling Apache Iceberg Tables. </p>"
         },
+        "AppendOnly":{
+          "shape":"BooleanObject",
+          "documentation":"<p> Describes whether all incoming data for this delivery stream will be append only (inserts only and not for updates and deletes) for Iceberg delivery. This feature is only applicable for Apache Iceberg Tables. </p> <p>The default value is false. If you set this value to true, Firehose automatically increases the throughput limit of a stream based on the throttling levels of the stream. If you set this parameter to true for a stream with updates and deletes, you will see out of order delivery. </p>"
+        },
         "CatalogConfiguration":{
           "shape":"CatalogConfiguration",
           "documentation":"<p> Configuration describing where the destination Iceberg tables are persisted. </p>"
@@ -2544,7 +2580,7 @@
           "documentation":"<p>Firehose starts retrieving records from the Kinesis data stream starting with this timestamp.</p>"
         }
       },
-      "documentation":"<p>Details about a Kinesis data stream used as the source for a Firehose Firehose stream.</p>"
+      "documentation":"<p>Details about a Kinesis data stream used as the source for a Firehose stream.</p>"
     },
     "LimitExceededException":{
       "type":"structure",
@@ -2719,7 +2755,7 @@
           "documentation":"<p>The start date and time in UTC for the offset position within your MSK topic from where Firehose begins to read. By default, this is set to timestamp when Firehose becomes Active. </p> <p>If you want to create a Firehose stream with Earliest start position from SDK or CLI, you need to set the <code>ReadFromTimestampUTC</code> parameter to Epoch (1970-01-01T00:00:00Z). </p>"
         }
       },
-      "documentation":"<p>Details about the Amazon MSK cluster used as the source for a Firehose Firehose stream.</p>"
+      "documentation":"<p>Details about the Amazon MSK cluster used as the source for a Firehose stream.</p>"
     },
     "NoEncryptionConfig":{
       "type":"string",
@@ -2893,10 +2929,10 @@
       "members":{
         "SourceName":{
           "shape":"NonEmptyStringWithoutWhitespace",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> The column name to be configured in partition spec. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>Represents a single field in a <code>PartitionSpec</code>. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "PartitionFields":{
       "type":"list",
@@ -2907,10 +2943,10 @@
       "members":{
         "Identity":{
           "shape":"PartitionFields",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> List of identity <a href=\"https://iceberg.apache.org/spec/#partition-transforms\">transforms</a> that performs an identity transformation. The transform takes the source value, and does not modify it. Result type is the source type.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>Represents how to produce partition data for a table. Partition data is produced by transforming columns in a table. Each column transform is represented by a named <code>PartitionField</code>. </p> <p>Here is an example of the schema in JSON. </p> <p> <code>\"partitionSpec\": { \"identity\": [ {\"sourceName\": \"column1\"}, {\"sourceName\": \"column2\"}, {\"sourceName\": \"column3\"} ] }</code> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "Password":{
       "type":"string",
@@ -3543,16 +3579,16 @@
       "members":{
         "Enabled":{
           "shape":"BooleanObject",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> Specify whether you want to enable schema evolution. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>The configuration to enable schema evolution.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "SecretARN":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"arn:.*:secretsmanager:[a-zA-Z0-9\\-]+:\\d{12}:secret:[a-zA-Z0-9\\-/_+=.@]+"
+      "pattern":"arn:.*:secretsmanager:[a-zA-Z0-9\\-]+:\\d{12}:secret:[a-zA-Z0-9\\-/_+=.@!]+"
     },
     "SecretsManagerConfiguration":{
       "type":"structure",
@@ -3584,14 +3620,14 @@
       "members":{
         "ParquetSerDe":{
           "shape":"ParquetSerDe",
-          "documentation":"<p>A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see <a href=\"https://parquet.apache.org/documentation/latest/\">Apache Parquet</a>.</p>"
+          "documentation":"<p>A serializer to use for converting data to the Parquet format before storing it in Amazon S3. For more information, see <a href=\"https://parquet.apache.org/docs/contribution-guidelines/\">Apache Parquet</a>.</p>"
         },
         "OrcSerDe":{
           "shape":"OrcSerDe",
           "documentation":"<p>A serializer to use for converting data to the ORC format before storing it in Amazon S3. For more information, see <a href=\"https://orc.apache.org/docs/\">Apache ORC</a>.</p>"
         }
       },
-      "documentation":"<p>The serializer that you want Firehose to use to convert data to the target format before writing it to Amazon S3. Firehose supports two types of serializers: the <a href=\"https://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/ql/io/orc/OrcSerde.html\">ORC SerDe</a> and the <a href=\"https://hive.apache.org/javadocs/r1.2.2/api/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.html\">Parquet SerDe</a>.</p>"
+      "documentation":"<p>The serializer that you want Firehose to use to convert data to the target format before writing it to Amazon S3. Firehose supports two types of serializers: the ORC SerDe and the Parquet SerDe.</p>"
     },
     "ServiceUnavailableException":{
       "type":"structure",
@@ -3725,11 +3761,11 @@
         },
         "MetaDataColumnName":{
           "shape":"SnowflakeMetaDataColumnName",
-          "documentation":"<p>The name of the record metadata column</p>"
+          "documentation":"<p>Specify a column name in the table, where the metadata information has to be loaded. When you enable this field, you will see the following column in the snowflake table, which differs based on the source type.</p> <p>For Direct PUT as source </p> <p> <code>{ \"firehoseDeliveryStreamName\" : \"streamname\", \"IngestionTime\" : \"timestamp\" }</code> </p> <p>For Kinesis Data Stream as source </p> <p> <code> \"kinesisStreamName\" : \"streamname\", \"kinesisShardId\" : \"Id\", \"kinesisPartitionKey\" : \"key\", \"kinesisSequenceNumber\" : \"1234\", \"subsequenceNumber\" : \"2334\", \"IngestionTime\" : \"timestamp\" }</code> </p>"
         },
         "ContentColumnName":{
           "shape":"SnowflakeContentColumnName",
-          "documentation":"<p>The name of the record content column</p>"
+          "documentation":"<p>The name of the record content column.</p>"
         },
         "SnowflakeVpcConfiguration":{
           "shape":"SnowflakeVpcConfiguration",
@@ -4003,6 +4039,10 @@
     "SourceDescription":{
       "type":"structure",
       "members":{
+        "DirectPutSourceDescription":{
+          "shape":"DirectPutSourceDescription",
+          "documentation":"<p>Details about Direct PUT used as the source for a Firehose stream. </p>"
+        },
         "KinesisStreamSourceDescription":{
           "shape":"KinesisStreamSourceDescription",
           "documentation":"<p>The <a>KinesisStreamSourceDescription</a> value for the source Kinesis data stream.</p>"
@@ -4013,10 +4053,10 @@
         },
         "DatabaseSourceDescription":{
           "shape":"DatabaseSourceDescription",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p>Details about a database used as the source for a Firehose stream.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p>Details about a Kinesis data stream used as the source for a Firehose Firehose stream.</p>"
+      "documentation":"<p>Details about a Kinesis data stream used as the source for a Firehose stream.</p>"
     },
     "SplunkBufferingHints":{
       "type":"structure",
@@ -4235,8 +4275,7 @@
     },
     "StartDeliveryStreamEncryptionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopDeliveryStreamEncryptionInput":{
       "type":"structure",
@@ -4250,8 +4289,7 @@
     },
     "StopDeliveryStreamEncryptionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StringWithLettersDigitsUnderscoresDots":{
       "type":"string",
@@ -4271,10 +4309,10 @@
       "members":{
         "Enabled":{
           "shape":"BooleanObject",
-          "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+          "documentation":"<p> Specify whether you want to enable automatic table creation. </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
         }
       },
-      "documentation":"<p> </p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
+      "documentation":"<p>The configuration to enable automatic table creation.</p> <p>Amazon Data Firehose is in preview release and is subject to change.</p>"
     },
     "Tag":{
       "type":"structure",
@@ -4316,8 +4354,7 @@
     },
     "TagDeliveryStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagKey":{
       "type":"string",
@@ -4337,6 +4374,11 @@
       "min":0,
       "pattern":"^[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@%]*$"
     },
+    "ThroughputHintInMBs":{
+      "type":"integer",
+      "max":100,
+      "min":1
+    },
     "Timestamp":{"type":"timestamp"},
     "TopicName":{
       "type":"string",
@@ -4363,8 +4405,7 @@
     },
     "UntagDeliveryStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDestinationInput":{
       "type":"structure",
@@ -4401,7 +4442,7 @@
         },
         "ElasticsearchDestinationUpdate":{
           "shape":"ElasticsearchDestinationUpdate",
-          "documentation":"<p>Describes an update for a destination in Amazon ES.</p>"
+          "documentation":"<p>Describes an update for a destination in Amazon OpenSearch Service.</p>"
         },
         "AmazonopensearchserviceDestinationUpdate":{
           "shape":"AmazonopensearchserviceDestinationUpdate",
@@ -4431,8 +4472,7 @@
     },
     "UpdateDestinationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Username":{
       "type":"string",
@@ -4451,7 +4491,7 @@
       "members":{
         "SubnetIds":{
           "shape":"SubnetIdList",
-          "documentation":"<p>The IDs of the subnets that you want Firehose to use to create ENIs in the VPC of the Amazon ES destination. Make sure that the routing tables and inbound and outbound rules allow traffic to flow from the subnets whose IDs are specified here to the subnets that have the destination Amazon ES endpoints. Firehose creates at least one ENI in each of the subnets that are specified here. Do not delete or modify these ENIs.</p> <p>The number of ENIs that Firehose creates in the subnets specified here scales up and down automatically based on throughput. To enable Firehose to scale up the number of ENIs to match throughput, ensure that you have sufficient quota. To help you calculate the quota you need, assume that Firehose can create up to three ENIs for this Firehose stream for each of the subnets specified here. For more information about ENI quota, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-enis\">Network Interfaces </a> in the Amazon VPC Quotas topic.</p>"
+          "documentation":"<p>The IDs of the subnets that you want Firehose to use to create ENIs in the VPC of the Amazon OpenSearch Service destination. Make sure that the routing tables and inbound and outbound rules allow traffic to flow from the subnets whose IDs are specified here to the subnets that have the destination Amazon OpenSearch Service endpoints. Firehose creates at least one ENI in each of the subnets that are specified here. Do not delete or modify these ENIs.</p> <p>The number of ENIs that Firehose creates in the subnets specified here scales up and down automatically based on throughput. To enable Firehose to scale up the number of ENIs to match throughput, ensure that you have sufficient quota. To help you calculate the quota you need, assume that Firehose can create up to three ENIs for this Firehose stream for each of the subnets specified here. For more information about ENI quota, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-enis\">Network Interfaces </a> in the Amazon VPC Quotas topic.</p>"
         },
         "RoleARN":{
           "shape":"RoleARN",
@@ -4459,7 +4499,7 @@
         },
         "SecurityGroupIds":{
           "shape":"SecurityGroupIdList",
-          "documentation":"<p>The IDs of the security groups that you want Firehose to use when it creates ENIs in the VPC of the Amazon ES destination. You can use the same security group that the Amazon ES domain uses or different ones. If you specify different security groups here, ensure that they allow outbound HTTPS traffic to the Amazon ES domain's security group. Also ensure that the Amazon ES domain's security group allows HTTPS traffic from the security groups specified here. If you use the same security group for both your delivery stream and the Amazon ES domain, make sure the security group inbound rule allows HTTPS traffic. For more information about security group rules, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules\">Security group rules</a> in the Amazon VPC documentation.</p>"
+          "documentation":"<p>The IDs of the security groups that you want Firehose to use when it creates ENIs in the VPC of the Amazon OpenSearch Service destination. You can use the same security group that the Amazon OpenSearch Service domain uses or different ones. If you specify different security groups here, ensure that they allow outbound HTTPS traffic to the Amazon OpenSearch Service domain's security group. Also ensure that the Amazon OpenSearch Service domain's security group allows HTTPS traffic from the security groups specified here. If you use the same security group for both your delivery stream and the Amazon OpenSearch Service domain, make sure the security group inbound rule allows HTTPS traffic. For more information about security group rules, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules\">Security group rules</a> in the Amazon VPC documentation.</p>"
         }
       },
       "documentation":"<p>The details of the VPC of the Amazon OpenSearch or Amazon OpenSearch Serverless destination.</p>"
@@ -4475,7 +4515,7 @@
       "members":{
         "SubnetIds":{
           "shape":"SubnetIdList",
-          "documentation":"<p>The IDs of the subnets that Firehose uses to create ENIs in the VPC of the Amazon ES destination. Make sure that the routing tables and inbound and outbound rules allow traffic to flow from the subnets whose IDs are specified here to the subnets that have the destination Amazon ES endpoints. Firehose creates at least one ENI in each of the subnets that are specified here. Do not delete or modify these ENIs.</p> <p>The number of ENIs that Firehose creates in the subnets specified here scales up and down automatically based on throughput. To enable Firehose to scale up the number of ENIs to match throughput, ensure that you have sufficient quota. To help you calculate the quota you need, assume that Firehose can create up to three ENIs for this Firehose stream for each of the subnets specified here. For more information about ENI quota, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-enis\">Network Interfaces </a> in the Amazon VPC Quotas topic.</p>"
+          "documentation":"<p>The IDs of the subnets that Firehose uses to create ENIs in the VPC of the Amazon OpenSearch Service destination. Make sure that the routing tables and inbound and outbound rules allow traffic to flow from the subnets whose IDs are specified here to the subnets that have the destination Amazon OpenSearch Service endpoints. Firehose creates at least one ENI in each of the subnets that are specified here. Do not delete or modify these ENIs.</p> <p>The number of ENIs that Firehose creates in the subnets specified here scales up and down automatically based on throughput. To enable Firehose to scale up the number of ENIs to match throughput, ensure that you have sufficient quota. To help you calculate the quota you need, assume that Firehose can create up to three ENIs for this Firehose stream for each of the subnets specified here. For more information about ENI quota, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-enis\">Network Interfaces </a> in the Amazon VPC Quotas topic.</p>"
         },
         "RoleARN":{
           "shape":"RoleARN",
@@ -4483,14 +4523,14 @@
         },
         "SecurityGroupIds":{
           "shape":"SecurityGroupIdList",
-          "documentation":"<p>The IDs of the security groups that Firehose uses when it creates ENIs in the VPC of the Amazon ES destination. You can use the same security group that the Amazon ES domain uses or different ones. If you specify different security groups, ensure that they allow outbound HTTPS traffic to the Amazon ES domain's security group. Also ensure that the Amazon ES domain's security group allows HTTPS traffic from the security groups specified here. If you use the same security group for both your Firehose stream and the Amazon ES domain, make sure the security group inbound rule allows HTTPS traffic. For more information about security group rules, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules\">Security group rules</a> in the Amazon VPC documentation.</p>"
+          "documentation":"<p>The IDs of the security groups that Firehose uses when it creates ENIs in the VPC of the Amazon OpenSearch Service destination. You can use the same security group that the Amazon ES domain uses or different ones. If you specify different security groups, ensure that they allow outbound HTTPS traffic to the Amazon OpenSearch Service domain's security group. Also ensure that the Amazon OpenSearch Service domain's security group allows HTTPS traffic from the security groups specified here. If you use the same security group for both your Firehose stream and the Amazon OpenSearch Service domain, make sure the security group inbound rule allows HTTPS traffic. For more information about security group rules, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules\">Security group rules</a> in the Amazon VPC documentation.</p>"
         },
         "VpcId":{
           "shape":"NonEmptyStringWithoutWhitespace",
-          "documentation":"<p>The ID of the Amazon ES destination's VPC.</p>"
+          "documentation":"<p>The ID of the Amazon OpenSearch Service destination's VPC.</p>"
         }
       },
-      "documentation":"<p>The details of the VPC of the Amazon ES destination.</p>"
+      "documentation":"<p>The details of the VPC of the Amazon OpenSearch Service destination.</p>"
     },
     "VpcEndpointServiceName":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fis/2020-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/fis/2020-12-01/paginators-1.json 2.31.35-1/awscli/botocore/data/fis/2020-12-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/fis/2020-12-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fis/2020-12-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,40 @@
 {
-  "pagination": {}
+  "pagination": {
+    "ListActions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "actions"
+    },
+    "ListExperimentResolvedTargets": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "resolvedTargets"
+    },
+    "ListExperimentTemplates": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "experimentTemplates"
+    },
+    "ListExperiments": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "experiments"
+    },
+    "ListTargetAccountConfigurations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "targetAccountConfigurations"
+    },
+    "ListTargetResourceTypes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "targetResourceTypes"
+    }
+  }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/fis/2020-12-01/service-2.json 2.31.35-1/awscli/botocore/data/fis/2020-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/fis/2020-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fis/2020-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1220,7 +1220,7 @@
           "documentation":"<p>The name of the S3 bucket where the experiment report will be stored.</p>"
         },
         "prefix":{
-          "shape":"S3ObjectKey",
+          "shape":"ReportConfigurationS3OutputPrefix",
           "documentation":"<p>The prefix of the S3 bucket where the experiment report will be stored.</p>"
         }
       },
@@ -2510,7 +2510,7 @@
           "documentation":"<p>The name of the S3 bucket where the experiment report will be stored.</p>"
         },
         "prefix":{
-          "shape":"S3ObjectKey",
+          "shape":"ReportConfigurationS3OutputPrefix",
           "documentation":"<p>The prefix of the S3 bucket where the experiment report will be stored.</p>"
         }
       },
@@ -2524,12 +2524,17 @@
           "documentation":"<p>The name of the S3 bucket where the experiment report will be stored.</p>"
         },
         "prefix":{
-          "shape":"S3ObjectKey",
+          "shape":"ReportConfigurationS3OutputPrefix",
           "documentation":"<p>The prefix of the S3 bucket where the experiment report will be stored.</p>"
         }
       },
       "documentation":"<p>Specifies the S3 destination for the experiment report.</p>"
     },
+    "ReportConfigurationS3OutputPrefix":{
+      "type":"string",
+      "max":256,
+      "pattern":"[\\S]+"
+    },
     "ResolvedTarget":{
       "type":"structure",
       "members":{
@@ -2586,7 +2591,7 @@
     },
     "S3ObjectKey":{
       "type":"string",
-      "max":1024,
+      "max":700,
       "min":1,
       "pattern":"[\\s\\S]+"
     },
@@ -2765,8 +2770,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2945,8 +2949,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateExperimentTemplateActionInputItem":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fms/2018-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/fms/2018-01-01/service-2.json 2.31.35-1/awscli/botocore/data/fms/2018-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/fms/2018-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fms/2018-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1177,8 +1177,7 @@
     },
     "DeleteNotificationChannelRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePolicyRequest":{
       "type":"structure",
@@ -1244,8 +1243,7 @@
     },
     "DisassociateAdminAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateThirdPartyFirewallRequest":{
       "type":"structure",
@@ -1783,8 +1781,7 @@
     },
     "GetAdminAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAdminAccountResponse":{
       "type":"structure",
@@ -1877,8 +1874,7 @@
     },
     "GetNotificationChannelRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetNotificationChannelResponse":{
       "type":"structure",
@@ -4391,8 +4387,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4560,8 +4555,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateToken":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/forecast/2018-06-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/forecast/2018-06-26/service-2.json 2.31.35-1/awscli/botocore/data/forecast/2018-06-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/forecast/2018-06-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/forecast/2018-06-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"forecast",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Forecast Service",
     "serviceId":"forecast",
     "signatureVersion":"v4",
     "signingName":"forecast",
     "targetPrefix":"AmazonForecast",
-    "uid":"forecast-2018-06-26"
+    "uid":"forecast-2018-06-26",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateAutoPredictor":{
@@ -4678,8 +4680,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4895,8 +4896,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatasetGroupRequest":{
       "type":"structure",
@@ -4917,8 +4917,7 @@
     },
     "UpdateDatasetGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UseGeolocationForTimeZone":{"type":"boolean"},
     "Value":{
diff -pruN 2.23.6-1/awscli/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/forecastquery/2018-06-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/forecastquery/2018-06-26/service-2.json 2.31.35-1/awscli/botocore/data/forecastquery/2018-06-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/forecastquery/2018-06-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/forecastquery/2018-06-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"forecastquery",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Forecast Query Service",
     "serviceId":"forecastquery",
     "signatureVersion":"v4",
     "signingName":"forecast",
     "targetPrefix":"AmazonForecastRuntime",
-    "uid":"forecastquery-2018-06-26"
+    "uid":"forecastquery-2018-06-26",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "QueryForecast":{
diff -pruN 2.23.6-1/awscli/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/frauddetector/2019-11-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/frauddetector/2019-11-15/service-2.json 2.31.35-1/awscli/botocore/data/frauddetector/2019-11-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/frauddetector/2019-11-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/frauddetector/2019-11-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"frauddetector",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Fraud Detector",
     "serviceId":"FraudDetector",
     "signatureVersion":"v4",
     "targetPrefix":"AWSHawksNestServiceFacade",
-    "uid":"frauddetector-2019-11-15"
+    "uid":"frauddetector-2019-11-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchCreateVariable":{
@@ -1641,8 +1643,7 @@
     },
     "CancelBatchImportJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelBatchPredictionJobRequest":{
       "type":"structure",
@@ -1656,8 +1657,7 @@
     },
     "CancelBatchPredictionJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConflictException":{
       "type":"structure",
@@ -1706,8 +1706,7 @@
     },
     "CreateBatchImportJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateBatchPredictionJobRequest":{
       "type":"structure",
@@ -1756,8 +1755,7 @@
     },
     "CreateBatchPredictionJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateDetectorVersionRequest":{
       "type":"structure",
@@ -1841,8 +1839,7 @@
     },
     "CreateListResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateModelRequest":{
       "type":"structure",
@@ -1876,8 +1873,7 @@
     },
     "CreateModelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateModelVersionRequest":{
       "type":"structure",
@@ -2029,8 +2025,7 @@
     },
     "CreateVariableResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CsvIndexToVariableMap":{
       "type":"map",
@@ -2082,8 +2077,7 @@
     },
     "DeleteBatchImportJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteBatchPredictionJobRequest":{
       "type":"structure",
@@ -2097,8 +2091,7 @@
     },
     "DeleteBatchPredictionJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDetectorRequest":{
       "type":"structure",
@@ -2112,8 +2105,7 @@
     },
     "DeleteDetectorResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDetectorVersionRequest":{
       "type":"structure",
@@ -2134,8 +2126,7 @@
     },
     "DeleteDetectorVersionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEntityTypeRequest":{
       "type":"structure",
@@ -2149,8 +2140,7 @@
     },
     "DeleteEntityTypeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventRequest":{
       "type":"structure",
@@ -2175,8 +2165,7 @@
     },
     "DeleteEventResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventTypeRequest":{
       "type":"structure",
@@ -2190,8 +2179,7 @@
     },
     "DeleteEventTypeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventsByEventTypeRequest":{
       "type":"structure",
@@ -2228,8 +2216,7 @@
     },
     "DeleteExternalModelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLabelRequest":{
       "type":"structure",
@@ -2243,8 +2230,7 @@
     },
     "DeleteLabelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteListRequest":{
       "type":"structure",
@@ -2258,8 +2244,7 @@
     },
     "DeleteListResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteModelRequest":{
       "type":"structure",
@@ -2280,8 +2265,7 @@
     },
     "DeleteModelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteModelVersionRequest":{
       "type":"structure",
@@ -2307,8 +2291,7 @@
     },
     "DeleteModelVersionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOutcomeRequest":{
       "type":"structure",
@@ -2322,8 +2305,7 @@
     },
     "DeleteOutcomeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleRequest":{
       "type":"structure",
@@ -2334,8 +2316,7 @@
     },
     "DeleteRuleResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVariableRequest":{
       "type":"structure",
@@ -2349,8 +2330,7 @@
     },
     "DeleteVariableResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDetectorRequest":{
       "type":"structure",
@@ -4479,8 +4459,7 @@
     },
     "PutDetectorResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutEntityTypeRequest":{
       "type":"structure",
@@ -4502,8 +4481,7 @@
     },
     "PutEntityTypeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutEventTypeRequest":{
       "type":"structure",
@@ -4549,8 +4527,7 @@
     },
     "PutEventTypeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutExternalModelRequest":{
       "type":"structure",
@@ -4595,8 +4572,7 @@
     },
     "PutExternalModelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutKMSEncryptionKeyRequest":{
       "type":"structure",
@@ -4610,8 +4586,7 @@
     },
     "PutKMSEncryptionKeyResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutLabelRequest":{
       "type":"structure",
@@ -4633,8 +4608,7 @@
     },
     "PutLabelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutOutcomeRequest":{
       "type":"structure",
@@ -4656,8 +4630,7 @@
     },
     "PutOutcomeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -4822,8 +4795,7 @@
     },
     "SendEventResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TFIMetricDataPoint":{
       "type":"structure",
@@ -4916,8 +4888,7 @@
     },
     "TagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagsMaxResults":{
       "type":"integer",
@@ -5065,8 +5036,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDetectorVersionMetadataRequest":{
       "type":"structure",
@@ -5092,8 +5062,7 @@
     },
     "UpdateDetectorVersionMetadataResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDetectorVersionRequest":{
       "type":"structure",
@@ -5136,8 +5105,7 @@
     },
     "UpdateDetectorVersionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDetectorVersionStatusRequest":{
       "type":"structure",
@@ -5163,8 +5131,7 @@
     },
     "UpdateDetectorVersionStatusResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEventLabelRequest":{
       "type":"structure",
@@ -5195,8 +5162,7 @@
     },
     "UpdateEventLabelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateListRequest":{
       "type":"structure",
@@ -5226,8 +5192,7 @@
     },
     "UpdateListResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateModelRequest":{
       "type":"structure",
@@ -5252,8 +5217,7 @@
     },
     "UpdateModelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateModelVersionRequest":{
       "type":"structure",
@@ -5339,8 +5303,7 @@
     },
     "UpdateModelVersionStatusResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRuleMetadataRequest":{
       "type":"structure",
@@ -5361,8 +5324,7 @@
     },
     "UpdateRuleMetadataResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRuleVersionRequest":{
       "type":"structure",
@@ -5432,8 +5394,7 @@
     },
     "UpdateVariableResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UseEventVariables":{"type":"boolean"},
     "ValidationException":{
diff -pruN 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/paginators-1.json 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "freeTierUsages"
+    },
+    "ListAccountActivities": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "activities"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/service-2.json 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,11 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-09-07",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"freetier",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Free Tier",
     "serviceId":"FreeTier",
     "signatureVersion":"v4",
@@ -13,6 +15,39 @@
     "uid":"freetier-2023-09-07"
   },
   "operations":{
+    "GetAccountActivity":{
+      "name":"GetAccountActivity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAccountActivityRequest"},
+      "output":{"shape":"GetAccountActivityResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Returns a specific activity record that is available to the customer. </p>"
+    },
+    "GetAccountPlanState":{
+      "name":"GetAccountPlanState",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAccountPlanStateRequest"},
+      "output":{"shape":"GetAccountPlanStateResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> This returns all of the information related to the state of the account plan related to Free Tier. </p>"
+    },
     "GetFreeTierUsage":{
       "name":"GetFreeTierUsage",
       "http":{
@@ -27,9 +62,131 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of all Free Tier usage objects that match your filters.</p>"
+    },
+    "ListAccountActivities":{
+      "name":"ListAccountActivities",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAccountActivitiesRequest"},
+      "output":{"shape":"ListAccountActivitiesResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Returns a list of activities that are available. This operation supports pagination and filtering by status. </p>"
+    },
+    "UpgradeAccountPlan":{
+      "name":"UpgradeAccountPlan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpgradeAccountPlanRequest"},
+      "output":{"shape":"UpgradeAccountPlanResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> The account plan type for the Amazon Web Services account. </p>"
     }
   },
   "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p> You don't have sufficient access to perform this action. </p>",
+      "exception":true
+    },
+    "AccountId":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
+    "AccountPlanStatus":{
+      "type":"string",
+      "enum":[
+        "NOT_STARTED",
+        "ACTIVE",
+        "EXPIRED"
+      ]
+    },
+    "AccountPlanType":{
+      "type":"string",
+      "enum":[
+        "FREE",
+        "PAID"
+      ]
+    },
+    "Activities":{
+      "type":"list",
+      "member":{"shape":"ActivitySummary"}
+    },
+    "ActivityId":{
+      "type":"string",
+      "max":32,
+      "min":32,
+      "pattern":"[a-zA-Z0-9]+"
+    },
+    "ActivityReward":{
+      "type":"structure",
+      "members":{
+        "credit":{
+          "shape":"MonetaryAmount",
+          "documentation":"<p> The credits gained by activity rewards. </p>"
+        }
+      },
+      "documentation":"<p> The summary of the rewards granted as a result of activities completed. </p>",
+      "union":true
+    },
+    "ActivityStatus":{
+      "type":"string",
+      "enum":[
+        "NOT_STARTED",
+        "IN_PROGRESS",
+        "COMPLETED",
+        "EXPIRING"
+      ]
+    },
+    "ActivitySummary":{
+      "type":"structure",
+      "required":[
+        "activityId",
+        "title",
+        "reward",
+        "status"
+      ],
+      "members":{
+        "activityId":{
+          "shape":"ActivityId",
+          "documentation":"<p> A unique identifier that identifies the activity. </p>"
+        },
+        "title":{
+          "shape":"GenericString",
+          "documentation":"<p> The title of the activity. </p>"
+        },
+        "reward":{
+          "shape":"ActivityReward",
+          "documentation":"<p> The reward for the activity. </p>"
+        },
+        "status":{
+          "shape":"ActivityStatus",
+          "documentation":"<p> The current status of the activity. </p>"
+        }
+      },
+      "documentation":"<p> The summary of activities. </p>"
+    },
+    "CurrencyCode":{
+      "type":"string",
+      "enum":["USD"]
+    },
     "Dimension":{
       "type":"string",
       "enum":[
@@ -46,21 +203,21 @@
       "type":"structure",
       "required":[
         "Key",
-        "MatchOptions",
-        "Values"
+        "Values",
+        "MatchOptions"
       ],
       "members":{
         "Key":{
           "shape":"Dimension",
           "documentation":"<p>The name of the dimension that you want to filter on.</p>"
         },
-        "MatchOptions":{
-          "shape":"MatchOptions",
-          "documentation":"<p>The match options that you can use to filter your results. You can specify only one of these values in the array.</p>"
-        },
         "Values":{
           "shape":"Values",
           "documentation":"<p>The metadata values you can specify to filter upon, so that the results all match at least one of the specified values.</p>"
+        },
+        "MatchOptions":{
+          "shape":"MatchOptions",
+          "documentation":"<p>The match options that you can use to filter your results. You can specify only one of these values in the array.</p>"
         }
       },
       "documentation":"<p>Contains the specifications for the filters to use for your request.</p>"
@@ -68,21 +225,21 @@
     "Expression":{
       "type":"structure",
       "members":{
+        "Or":{
+          "shape":"Expressions",
+          "documentation":"<p>Return results that match any of the <code>Expressions</code> that you specified. in the array.</p>"
+        },
         "And":{
           "shape":"Expressions",
           "documentation":"<p>Return results that match all <code>Expressions</code> that you specified in the array.</p>"
         },
-        "Dimensions":{
-          "shape":"DimensionValues",
-          "documentation":"<p>The specific dimension, values, and match type to filter objects with.</p>"
-        },
         "Not":{
           "shape":"Expression",
           "documentation":"<p>Return results that don’t match the <code>Expression</code> that you specified.</p>"
         },
-        "Or":{
-          "shape":"Expressions",
-          "documentation":"<p>Return results that match any of the <code>Expressions</code> that you specified. in the array.</p>"
+        "Dimensions":{
+          "shape":"DimensionValues",
+          "documentation":"<p>The specific dimension, values, and match type to filter objects with.</p>"
         }
       },
       "documentation":"<p>Use <code>Expression</code> to filter in the <code>GetFreeTierUsage</code> API operation.</p> <p>You can use the following patterns:</p> <ul> <li> <p>Simple dimension values (<code>Dimensions</code> root operator)</p> </li> <li> <p>Complex expressions with logical operators (<code>AND</code>, <code>NOT</code>, and <code>OR</code> root operators).</p> </li> </ul> <p>For <i>simple dimension values</i>, you can set the dimension name, values, and match type for the filters that you plan to use.</p> <p> <b>Example for simple dimension values</b> </p> <p>You can filter to match exactly for <code>REGION==us-east-1 OR REGION==us-west-1</code>.</p> <p>The corresponding <code>Expression</code> appears like the following: <code>{ \"Dimensions\": { \"Key\": \"REGION\", \"Values\": [ \"us-east-1\", \"us-west-1\" ], \"MatchOptions\": [\"EQUALS\"] } }</code> </p> <p>As shown in the previous example, lists of dimension values are combined with <code>OR</code> when you apply the filter.</p> <p>For <i>complex expressions with logical operators</i>, you can have nested expressions to use the logical operators and specify advanced filtering.</p> <p> <b>Example for complex expressions with logical operators</b> </p> <p>You can filter by <code>((REGION == us-east-1 OR REGION == us-west-1) OR (SERVICE CONTAINS AWSLambda)) AND (USAGE_TYPE !CONTAINS DataTransfer)</code>.</p> <p>The corresponding <code>Expression</code> appears like the following: <code>{ \"And\": [ {\"Or\": [ {\"Dimensions\": { \"Key\": \"REGION\", \"Values\": [ \"us-east-1\", \"us-west-1\" ], \"MatchOptions\": [\"EQUALS\"] }}, {\"Dimensions\": { \"Key\": \"SERVICE\", \"Values\": [\"AWSLambda\"], \"MatchOptions\": [\"CONTAINS\"] } } ]}, {\"Not\": {\"Dimensions\": { \"Key\": \"USAGE_TYPE\", \"Values\": [\"DataTransfer\"], \"MatchOptions\": [\"CONTAINS\"] }}} ] }</code> </p> <p>In the following <b>Contents</b>, you must specify exactly one of the following root operators.</p>"
@@ -91,48 +248,52 @@
       "type":"list",
       "member":{"shape":"Expression"}
     },
+    "FilterActivityStatuses":{
+      "type":"list",
+      "member":{"shape":"ActivityStatus"}
+    },
     "FreeTierUsage":{
       "type":"structure",
       "members":{
+        "service":{
+          "shape":"GenericString",
+          "documentation":"<p>The name of the Amazon Web Services service providing the Free Tier offer. For example, this can be Amazon Elastic Compute Cloud.</p>"
+        },
+        "operation":{
+          "shape":"GenericString",
+          "documentation":"<p>Describes <code>usageType</code> more granularly with the specific Amazon Web Services service API operation. For example, this can be the <code>RunInstances</code> API operation for Amazon Elastic Compute Cloud.</p>"
+        },
+        "usageType":{
+          "shape":"GenericString",
+          "documentation":"<p>Describes the usage details of the offer. For example, this might be <code>Global-BoxUsage:freetrial</code>.</p>"
+        },
+        "region":{
+          "shape":"GenericString",
+          "documentation":"<p>Describes the Amazon Web Services Region for which this offer is applicable</p>"
+        },
         "actualUsageAmount":{
           "shape":"GenericDouble",
           "documentation":"<p>Describes the actual usage accrued month-to-day (MTD) that you've used so far.</p>"
         },
-        "description":{
-          "shape":"GenericString",
-          "documentation":"<p>The description of the Free Tier offer.</p>"
-        },
         "forecastedUsageAmount":{
           "shape":"GenericDouble",
           "documentation":"<p>Describes the forecasted usage by the month that you're expected to use.</p>"
         },
-        "freeTierType":{
-          "shape":"GenericString",
-          "documentation":"<p>Describes the type of the Free Tier offer. For example, the offer can be <code>\"12 Months Free\"</code>, <code>\"Always Free\"</code>, and <code>\"Free Trial\"</code>.</p>"
-        },
         "limit":{
           "shape":"GenericDouble",
           "documentation":"<p>Describes the maximum usage allowed in Free Tier.</p>"
         },
-        "operation":{
-          "shape":"GenericString",
-          "documentation":"<p>Describes <code>usageType</code> more granularly with the specific Amazon Web Service API operation. For example, this can be the <code>RunInstances</code> API operation for Amazon Elastic Compute Cloud.</p>"
-        },
-        "region":{
-          "shape":"GenericString",
-          "documentation":"<p>Describes the Amazon Web Services Region for which this offer is applicable</p>"
-        },
-        "service":{
-          "shape":"GenericString",
-          "documentation":"<p>The name of the Amazon Web Service providing the Free Tier offer. For example, this can be Amazon Elastic Compute Cloud.</p>"
-        },
         "unit":{
           "shape":"GenericString",
           "documentation":"<p>Describes the unit of the <code>usageType</code>, such as <code>Hrs</code>.</p>"
         },
-        "usageType":{
+        "description":{
           "shape":"GenericString",
-          "documentation":"<p>Describes the usage details of the offer. For example, this might be <code>Global-BoxUsage:freetrial</code>.</p>"
+          "documentation":"<p>The description of the Free Tier offer.</p>"
+        },
+        "freeTierType":{
+          "shape":"GenericString",
+          "documentation":"<p>Describes the type of the Free Tier offer. For example, the offer can be <code>\"12 Months Free\"</code>, <code>\"Always Free\"</code>, and <code>\"Free Trial\"</code>.</p>"
         }
       },
       "documentation":"<p>Consists of a Amazon Web Services Free Tier offer’s metadata and your data usage for the offer.</p>"
@@ -146,7 +307,109 @@
       "type":"string",
       "max":1024,
       "min":0,
-      "pattern":"^[\\S\\s]*$"
+      "pattern":"[\\S\\s]*"
+    },
+    "GetAccountActivityRequest":{
+      "type":"structure",
+      "required":["activityId"],
+      "members":{
+        "activityId":{
+          "shape":"ActivityId",
+          "documentation":"<p> A unique identifier that identifies the activity. </p>"
+        },
+        "languageCode":{
+          "shape":"LanguageCode",
+          "documentation":"<p> The language code used to return translated title and description fields. </p>"
+        }
+      }
+    },
+    "GetAccountActivityResponse":{
+      "type":"structure",
+      "required":[
+        "activityId",
+        "title",
+        "description",
+        "status",
+        "instructionsUrl",
+        "reward"
+      ],
+      "members":{
+        "activityId":{
+          "shape":"ActivityId",
+          "documentation":"<p> A unique identifier that identifies the activity. </p>"
+        },
+        "title":{
+          "shape":"GenericString",
+          "documentation":"<p> A short activity title. </p>"
+        },
+        "description":{
+          "shape":"GenericString",
+          "documentation":"<p> Provides detailed information about the activity and its expected outcomes. </p>"
+        },
+        "status":{
+          "shape":"ActivityStatus",
+          "documentation":"<p> The current activity status. </p>"
+        },
+        "instructionsUrl":{
+          "shape":"GenericString",
+          "documentation":"<p> The URL resource that provides guidance on activity requirements and completion. </p>"
+        },
+        "reward":{
+          "shape":"ActivityReward",
+          "documentation":"<p> A reward granted upon activity completion. </p>"
+        },
+        "estimatedTimeToCompleteInMinutes":{
+          "shape":"Integer",
+          "documentation":"<p> The estimated time to complete the activity. This is the duration in minutes. </p>"
+        },
+        "expiresAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The time by which the activity must be completed to receive a reward. </p>"
+        },
+        "startedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The timestamp when the activity started. This field appears only for activities in the <code>IN_PROGRESS</code> or <code>COMPLETED</code> states. </p>"
+        },
+        "completedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The timestamp when the activity is completed. This field appears only for activities in the <code>COMPLETED</code> state. </p>"
+        }
+      }
+    },
+    "GetAccountPlanStateRequest":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "GetAccountPlanStateResponse":{
+      "type":"structure",
+      "required":[
+        "accountId",
+        "accountPlanType",
+        "accountPlanStatus"
+      ],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p> A unique identifier that identifies the account. </p>"
+        },
+        "accountPlanType":{
+          "shape":"AccountPlanType",
+          "documentation":"<p> The plan type for the account. </p>"
+        },
+        "accountPlanStatus":{
+          "shape":"AccountPlanStatus",
+          "documentation":"<p> The current status for the account plan. </p>"
+        },
+        "accountPlanRemainingCredits":{
+          "shape":"MonetaryAmount",
+          "documentation":"<p> The amount of credits remaining for the account. </p>"
+        },
+        "accountPlanExpirationDate":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The timestamp for when the current account plan expires. </p>"
+        }
+      }
     },
     "GetFreeTierUsageRequest":{
       "type":"structure",
@@ -179,6 +442,10 @@
         }
       }
     },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
     "InternalServerException":{
       "type":"structure",
       "required":["message"],
@@ -189,6 +456,59 @@
       "exception":true,
       "fault":true
     },
+    "LanguageCode":{
+      "type":"string",
+      "enum":[
+        "en-US",
+        "en-GB",
+        "id-ID",
+        "de-DE",
+        "es-ES",
+        "fr-FR",
+        "ja-JP",
+        "it-IT",
+        "pt-PT",
+        "ko-KR",
+        "zh-CN",
+        "zh-TW",
+        "tr-TR"
+      ]
+    },
+    "ListAccountActivitiesRequest":{
+      "type":"structure",
+      "members":{
+        "filterActivityStatuses":{
+          "shape":"FilterActivityStatuses",
+          "documentation":"<p> The activity status filter. This field can be used to filter the response by activities status. </p>"
+        },
+        "nextToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p> A token from a previous paginated response. If this is specified, the response includes records beginning from this token (inclusive), up to the number specified by <code>maxResults</code>. </p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. </p>"
+        },
+        "languageCode":{
+          "shape":"LanguageCode",
+          "documentation":"<p> The language code used to return translated titles. </p>"
+        }
+      }
+    },
+    "ListAccountActivitiesResponse":{
+      "type":"structure",
+      "required":["activities"],
+      "members":{
+        "activities":{
+          "shape":"Activities",
+          "documentation":"<p> A brief information about the activities. </p>"
+        },
+        "nextToken":{
+          "shape":"NextPageToken",
+          "documentation":"<p> The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return. </p>"
+        }
+      }
+    },
     "MatchOption":{
       "type":"string",
       "enum":[
@@ -209,11 +529,42 @@
       "max":1000,
       "min":1
     },
+    "MonetaryAmount":{
+      "type":"structure",
+      "required":[
+        "amount",
+        "unit"
+      ],
+      "members":{
+        "amount":{
+          "shape":"GenericDouble",
+          "documentation":"<p> The aggregated monetary amount of credits earned. </p>"
+        },
+        "unit":{
+          "shape":"CurrencyCode",
+          "documentation":"<p> The unit that the monetary amount is given in. </p>"
+        }
+      },
+      "documentation":"<p> The monetary amount of the credit. </p>"
+    },
     "NextPageToken":{
       "type":"string",
       "max":8192,
       "min":1,
-      "pattern":"^[\\S\\s]*$"
+      "pattern":"[\\S\\s]*"
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"GenericString"}
+      },
+      "documentation":"<p> This exception is thrown when the requested resource cannot be found. </p>",
+      "exception":true
+    },
+    "SyntheticTimestamp_date_time":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
     },
     "ThrottlingException":{
       "type":"structure",
@@ -224,20 +575,52 @@
       "documentation":"<p>The request was denied due to request throttling.</p>",
       "exception":true
     },
+    "UpgradeAccountPlanRequest":{
+      "type":"structure",
+      "required":["accountPlanType"],
+      "members":{
+        "accountPlanType":{
+          "shape":"AccountPlanType",
+          "documentation":"<p> The target account plan type. This makes it explicit about the change and latest value of the <code>accountPlanType</code>. </p>"
+        }
+      }
+    },
+    "UpgradeAccountPlanResponse":{
+      "type":"structure",
+      "required":[
+        "accountId",
+        "accountPlanType",
+        "accountPlanStatus"
+      ],
+      "members":{
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p> A unique identifier that identifies the account. </p>"
+        },
+        "accountPlanType":{
+          "shape":"AccountPlanType",
+          "documentation":"<p> The type of plan for the account. </p>"
+        },
+        "accountPlanStatus":{
+          "shape":"AccountPlanStatus",
+          "documentation":"<p> This indicates the latest state of the account plan within its lifecycle. </p>"
+        }
+      }
+    },
     "ValidationException":{
       "type":"structure",
       "required":["message"],
       "members":{
         "message":{"shape":"GenericString"}
       },
-      "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Service.</p>",
+      "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>",
       "exception":true
     },
     "Value":{
       "type":"string",
       "max":20,
       "min":1,
-      "pattern":"^[ a-zA-Z0-9\\-\\:\\.\\_\\/\\,\\$\\(\\)]*$"
+      "pattern":"[ a-zA-Z0-9\\-\\:\\.\\_\\/\\,\\$\\(\\)]*"
     },
     "Values":{
       "type":"list",
@@ -245,5 +628,5 @@
       "min":1
     }
   },
-  "documentation":"<p>You can use the Amazon Web Services Free Tier API to query programmatically your Free Tier usage data.</p> <p>Free Tier tracks your monthly usage data for all free tier offers that are associated with your Amazon Web Services account. You can use the Free Tier API to filter and show only the data that you want.</p> <p>Service endpoint</p> <p>The Free Tier API provides the following endpoint:</p> <ul> <li> <p>https://freetier.us-east-1.api.aws</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html\">Using the Amazon Web Services Free Tier</a> in the <i>Billing User Guide</i>.</p>"
+  "documentation":"<p>You can use the Amazon Web Services Free Tier API to query programmatically your Free Tier usage data.</p> <p>Free Tier tracks your monthly usage data for all free tier offers that are associated with your Amazon Web Services account. You can use the Free Tier API to filter and show only the data that you want.</p> <p>Service endpoint</p> <p>The Free Tier API provides the following endpoint:</p> <ul/> <p>For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html\">Using the Amazon Web Services Free Tier</a> in the <i>Billing User Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/waiters-2.json 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/freetier/2023-09-07/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/freetier/2023-09-07/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/paginators-1.json 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,18 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "Volumes"
+    },
+    "DescribeS3AccessPointAttachments": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "S3AccessPointAttachments"
+    },
+    "DescribeSnapshots": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Snapshots"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/service-2.json 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/fsx/2018-03-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/fsx/2018-03-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -45,7 +45,7 @@
         {"shape":"DataRepositoryTaskEnded"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Cancels an existing Amazon FSx for Lustre data repository task if that task is in either the <code>PENDING</code> or <code>EXECUTING</code> state. When you cancel am export task, Amazon FSx does the following.</p> <ul> <li> <p>Any files that FSx has already exported are not reverted.</p> </li> <li> <p>FSx continues to export any files that are in-flight when the cancel operation is received.</p> </li> <li> <p>FSx does not export any files that have not yet been exported.</p> </li> </ul> <p>For a release task, Amazon FSx will stop releasing files upon cancellation. Any files that have already been released will remain in the released state.</p>",
+      "documentation":"<p>Cancels an existing Amazon FSx for Lustre data repository task if that task is in either the <code>PENDING</code> or <code>EXECUTING</code> state. When you cancel an export task, Amazon FSx does the following.</p> <ul> <li> <p>Any files that FSx has already exported are not reverted.</p> </li> <li> <p>FSx continues to export any files that are in-flight when the cancel operation is received.</p> </li> <li> <p>FSx does not export any files that have not yet been exported.</p> </li> </ul> <p>For a release task, Amazon FSx will stop releasing files upon cancellation. Any files that have already been released will remain in the released state.</p>",
       "idempotent":true
     },
     "CopyBackup":{
@@ -89,6 +89,27 @@
       "documentation":"<p>Updates an existing volume by using a snapshot from another Amazon FSx for OpenZFS file system. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/on-demand-replication.html\">on-demand data replication</a> in the Amazon FSx for OpenZFS User Guide.</p>",
       "idempotent":true
     },
+    "CreateAndAttachS3AccessPoint":{
+      "name":"CreateAndAttachS3AccessPoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateAndAttachS3AccessPointRequest"},
+      "output":{"shape":"CreateAndAttachS3AccessPointResponse"},
+      "errors":[
+        {"shape":"BadRequest"},
+        {"shape":"IncompatibleParameterError"},
+        {"shape":"InternalServerError"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"VolumeNotFound"},
+        {"shape":"InvalidAccessPoint"},
+        {"shape":"InvalidRequest"},
+        {"shape":"AccessPointAlreadyOwnedByYou"},
+        {"shape":"TooManyAccessPoints"}
+      ],
+      "documentation":"<p>Creates an S3 access point and attaches it to an Amazon FSx volume. For FSx for OpenZFS file systems, the volume must be hosted on a high-availability file system, either Single-AZ or Multi-AZ. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/s3accesspoints-for-FSx.html\">Accessing your data using Amazon S3 access points</a>. in the Amazon FSx for OpenZFS User Guide. </p> <p>The requester requires the following permissions to perform these actions:</p> <ul> <li> <p> <code>fsx:CreateAndAttachS3AccessPoint</code> </p> </li> <li> <p> <code>s3:CreateAccessPoint</code> </p> </li> <li> <p> <code>s3:GetAccessPoint</code> </p> </li> <li> <p> <code>s3:PutAccessPointPolicy</code> </p> </li> <li> <p> <code>s3:DeleteAccessPoint</code> </p> </li> </ul> <p>The following actions are related to <code>CreateAndAttachS3AccessPoint</code>:</p> <ul> <li> <p> <a>DescribeS3AccessPointAttachments</a> </p> </li> <li> <p> <a>DetachAndDeleteS3AccessPoint</a> </p> </li> </ul>"
+    },
     "CreateBackup":{
       "name":"CreateBackup",
       "http":{
@@ -166,7 +187,7 @@
         {"shape":"InternalServerError"},
         {"shape":"MissingFileCacheConfiguration"}
       ],
-      "documentation":"<p>Creates a new Amazon File Cache resource.</p> <p>You can use this operation with a client request token in the request that Amazon File Cache uses to ensure idempotent creation. If a cache with the specified client request token exists and the parameters match, <code>CreateFileCache</code> returns the description of the existing cache. If a cache with the specified client request token exists and the parameters don't match, this call returns <code>IncompatibleParameterError</code>. If a file cache with the specified client request token doesn't exist, <code>CreateFileCache</code> does the following: </p> <ul> <li> <p>Creates a new, empty Amazon File Cache resourcewith an assigned ID, and an initial lifecycle state of <code>CREATING</code>.</p> </li> <li> <p>Returns the description of the cache in JSON format.</p> </li> </ul> <note> <p>The <code>CreateFileCache</code> call returns while the cache's lifecycle state is still <code>CREATING</code>. You can check the cache creation status by calling the <a href=\"https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileCaches.html\">DescribeFileCaches</a> operation, which returns the cache state along with other information.</p> </note>",
+      "documentation":"<p>Creates a new Amazon File Cache resource.</p> <p>You can use this operation with a client request token in the request that Amazon File Cache uses to ensure idempotent creation. If a cache with the specified client request token exists and the parameters match, <code>CreateFileCache</code> returns the description of the existing cache. If a cache with the specified client request token exists and the parameters don't match, this call returns <code>IncompatibleParameterError</code>. If a file cache with the specified client request token doesn't exist, <code>CreateFileCache</code> does the following: </p> <ul> <li> <p>Creates a new, empty Amazon File Cache resource with an assigned ID, and an initial lifecycle state of <code>CREATING</code>.</p> </li> <li> <p>Returns the description of the cache in JSON format.</p> </li> </ul> <note> <p>The <code>CreateFileCache</code> call returns while the cache's lifecycle state is still <code>CREATING</code>. You can check the cache creation status by calling the <a href=\"https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileCaches.html\">DescribeFileCaches</a> operation, which returns the cache state along with other information.</p> </note>",
       "idempotent":true
     },
     "CreateFileSystem":{
@@ -359,7 +380,7 @@
         {"shape":"ServiceLimitExceeded"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted.</p> <p>To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a <code>FileSystemId</code> value to the <code>DeleteFileSystem</code> operation.</p> <p>By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted.</p> <p>To delete an Amazon FSx for Lustre file system, first <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/unmounting-fs.html\">unmount</a> it from every connected Amazon EC2 instance, then provide a <code>FileSystemId</code> value to the <code>DeleteFileSystem</code> operation. By default, Amazon FSx will not take a final backup when the <code>DeleteFileSystem</code> operation is invoked. On file systems not linked to an Amazon S3 bucket, set <code>SkipFinalBackup</code> to <code>false</code> to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring-cloudwatch.html#auto-import-export-metrics\">AgeOfOldestQueuedMessage</a> metric to be zero (if using automatic export) or you can run an <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/export-data-repo-task-dra.html\">export data repository task</a>. If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task.</p> <p>The <code>DeleteFileSystem</code> operation returns while the file system has the <code>DELETING</code> status. You can check the file system deletion status by calling the <a href=\"https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileSystems.html\">DescribeFileSystems</a> operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the <code>DescribeFileSystems</code> operation returns a <code>FileSystemNotFound</code> error.</p> <note> <p>If a data repository task is in a <code>PENDING</code> or <code>EXECUTING</code> state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request).</p> </note> <important> <p>The data in a deleted file system is also deleted and can't be recovered by any means.</p> </important>",
+      "documentation":"<p>Deletes a file system. After deletion, the file system no longer exists, and its data is gone. Any existing automatic backups and snapshots are also deleted.</p> <p>To delete an Amazon FSx for NetApp ONTAP file system, first delete all the volumes and storage virtual machines (SVMs) on the file system. Then provide a <code>FileSystemId</code> value to the <code>DeleteFileSystem</code> operation.</p> <p>Before deleting an Amazon FSx for OpenZFS file system, make sure that there aren't any Amazon S3 access points attached to any volume. For more information on how to list S3 access points that are attached to volumes, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/access-points-list.html\">Listing S3 access point attachments</a>. For more information on how to delete S3 access points, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/delete-access-point.html\">Deleting an S3 access point attachment</a>.</p> <p>By default, when you delete an Amazon FSx for Windows File Server file system, a final backup is created upon deletion. This final backup isn't subject to the file system's retention policy, and must be manually deleted.</p> <p>To delete an Amazon FSx for Lustre file system, first <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/unmounting-fs.html\">unmount</a> it from every connected Amazon EC2 instance, then provide a <code>FileSystemId</code> value to the <code>DeleteFileSystem</code> operation. By default, Amazon FSx will not take a final backup when the <code>DeleteFileSystem</code> operation is invoked. On file systems not linked to an Amazon S3 bucket, set <code>SkipFinalBackup</code> to <code>false</code> to take a final backup of the file system you are deleting. Backups cannot be enabled on S3-linked file systems. To ensure all of your data is written back to S3 before deleting your file system, you can either monitor for the <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring-cloudwatch.html#auto-import-export-metrics\">AgeOfOldestQueuedMessage</a> metric to be zero (if using automatic export) or you can run an <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/export-data-repo-task-dra.html\">export data repository task</a>. If you have automatic export enabled and want to use an export data repository task, you have to disable automatic export before executing the export data repository task.</p> <p>The <code>DeleteFileSystem</code> operation returns while the file system has the <code>DELETING</code> status. You can check the file system deletion status by calling the <a href=\"https://docs.aws.amazon.com/fsx/latest/APIReference/API_DescribeFileSystems.html\">DescribeFileSystems</a> operation, which returns a list of file systems in your account. If you pass the file system ID for a deleted file system, the <code>DescribeFileSystems</code> operation returns a <code>FileSystemNotFound</code> error.</p> <note> <p>If a data repository task is in a <code>PENDING</code> or <code>EXECUTING</code> state, deleting an Amazon FSx for Lustre file system will fail with an HTTP status code 400 (Bad Request).</p> </note> <important> <p>The data in a deleted file system is also deleted and can't be recovered by any means.</p> </important>",
       "idempotent":true
     },
     "DeleteSnapshot":{
@@ -508,6 +529,22 @@
       ],
       "documentation":"<p>Returns the description of specific Amazon FSx file systems, if a <code>FileSystemIds</code> value is provided for that file system. Otherwise, it returns descriptions of all file systems owned by your Amazon Web Services account in the Amazon Web Services Region of the endpoint that you're calling.</p> <p>When retrieving all file system descriptions, you can optionally specify the <code>MaxResults</code> parameter to limit the number of descriptions in a response. If more file system descriptions remain, Amazon FSx returns a <code>NextToken</code> value in the response. In this case, send a later request with the <code>NextToken</code> request parameter set to the value of <code>NextToken</code> from the last response.</p> <p>This operation is used in an iterative process to retrieve a list of your file system descriptions. <code>DescribeFileSystems</code> is called first without a <code>NextToken</code>value. Then the operation continues to be called with the <code>NextToken</code> parameter set to the value of the last <code>NextToken</code> value until a response has no <code>NextToken</code>.</p> <p>When using this operation, keep the following in mind:</p> <ul> <li> <p>The implementation might return fewer than <code>MaxResults</code> file system descriptions while still including a <code>NextToken</code> value.</p> </li> <li> <p>The order of file systems returned in the response of one <code>DescribeFileSystems</code> call and the order of file systems returned across the responses of a multicall iteration is unspecified.</p> </li> </ul>"
     },
+    "DescribeS3AccessPointAttachments":{
+      "name":"DescribeS3AccessPointAttachments",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeS3AccessPointAttachmentsRequest"},
+      "output":{"shape":"DescribeS3AccessPointAttachmentsResponse"},
+      "errors":[
+        {"shape":"S3AccessPointAttachmentNotFound"},
+        {"shape":"BadRequest"},
+        {"shape":"InternalServerError"},
+        {"shape":"UnsupportedOperation"}
+      ],
+      "documentation":"<p>Describes one or more S3 access points attached to Amazon FSx volumes.</p> <p>The requester requires the following permission to perform this action:</p> <ul> <li> <p> <code>fsx:DescribeS3AccessPointAttachments</code> </p> </li> </ul>"
+    },
     "DescribeSharedVpcConfiguration":{
       "name":"DescribeSharedVpcConfiguration",
       "http":{
@@ -567,6 +604,23 @@
       ],
       "documentation":"<p>Describes one or more Amazon FSx for NetApp ONTAP or Amazon FSx for OpenZFS volumes.</p>"
     },
+    "DetachAndDeleteS3AccessPoint":{
+      "name":"DetachAndDeleteS3AccessPoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DetachAndDeleteS3AccessPointRequest"},
+      "output":{"shape":"DetachAndDeleteS3AccessPointResponse"},
+      "errors":[
+        {"shape":"BadRequest"},
+        {"shape":"IncompatibleParameterError"},
+        {"shape":"InternalServerError"},
+        {"shape":"UnsupportedOperation"},
+        {"shape":"S3AccessPointAttachmentNotFound"}
+      ],
+      "documentation":"<p>Detaches an S3 access point from an Amazon FSx volume and deletes the S3 access point.</p> <p>The requester requires the following permission to perform this action:</p> <ul> <li> <p> <code>fsx:DetachAndDeleteS3AccessPoint</code> </p> </li> <li> <p> <code>s3:DeleteAccessPoint</code> </p> </li> </ul>"
+    },
     "DisassociateFileSystemAliases":{
       "name":"DisassociateFileSystemAliases",
       "http":{
@@ -740,7 +794,7 @@
         {"shape":"MissingFileSystemConfiguration"},
         {"shape":"ServiceLimitExceeded"}
       ],
-      "documentation":"<p>Use this operation to update the configuration of an existing Amazon FSx file system. You can update multiple properties in a single request.</p> <p>For FSx for Windows File Server file systems, you can update the following properties:</p> <ul> <li> <p> <code>AuditLogConfiguration</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>SelfManagedActiveDirectoryConfiguration</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>StorageType</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for Lustre file systems, you can update the following properties:</p> <ul> <li> <p> <code>AutoImportPolicy</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DataCompressionType</code> </p> </li> <li> <p> <code>LogConfiguration</code> </p> </li> <li> <p> <code>LustreRootSquashConfiguration</code> </p> </li> <li> <p> <code>MetadataConfiguration</code> </p> </li> <li> <p> <code>PerUnitStorageThroughput</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for ONTAP file systems, you can update the following properties:</p> <ul> <li> <p> <code>AddRouteTableIds</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>FsxAdminPassword</code> </p> </li> <li> <p> <code>HAPairs</code> </p> </li> <li> <p> <code>RemoveRouteTableIds</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacityPerHAPair</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for OpenZFS file systems, you can update the following properties:</p> <ul> <li> <p> <code>AddRouteTableIds</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>CopyTagsToBackups</code> </p> </li> <li> <p> <code>CopyTagsToVolumes</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>ReadCacheConfiguration</code> </p> </li> <li> <p> <code>RemoveRouteTableIds</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul>"
+      "documentation":"<p>Use this operation to update the configuration of an existing Amazon FSx file system. You can update multiple properties in a single request.</p> <p>For FSx for Windows File Server file systems, you can update the following properties:</p> <ul> <li> <p> <code>AuditLogConfiguration</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>SelfManagedActiveDirectoryConfiguration</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>StorageType</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for Lustre file systems, you can update the following properties:</p> <ul> <li> <p> <code>AutoImportPolicy</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DataCompressionType</code> </p> </li> <li> <p> <code>FileSystemTypeVersion</code> </p> </li> <li> <p> <code>LogConfiguration</code> </p> </li> <li> <p> <code>LustreReadCacheConfiguration</code> </p> </li> <li> <p> <code>LustreRootSquashConfiguration</code> </p> </li> <li> <p> <code>MetadataConfiguration</code> </p> </li> <li> <p> <code>PerUnitStorageThroughput</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for ONTAP file systems, you can update the following properties:</p> <ul> <li> <p> <code>AddRouteTableIds</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>EndpointIpv6AddressRange</code> </p> </li> <li> <p> <code>FsxAdminPassword</code> </p> </li> <li> <p> <code>HAPairs</code> </p> </li> <li> <p> <code>RemoveRouteTableIds</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacityPerHAPair</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul> <p>For FSx for OpenZFS file systems, you can update the following properties:</p> <ul> <li> <p> <code>AddRouteTableIds</code> </p> </li> <li> <p> <code>AutomaticBackupRetentionDays</code> </p> </li> <li> <p> <code>CopyTagsToBackups</code> </p> </li> <li> <p> <code>CopyTagsToVolumes</code> </p> </li> <li> <p> <code>DailyAutomaticBackupStartTime</code> </p> </li> <li> <p> <code>DiskIopsConfiguration</code> </p> </li> <li> <p> <code>EndpointIpv6AddressRange</code> </p> </li> <li> <p> <code>ReadCacheConfiguration</code> </p> </li> <li> <p> <code>RemoveRouteTableIds</code> </p> </li> <li> <p> <code>StorageCapacity</code> </p> </li> <li> <p> <code>ThroughputCapacity</code> </p> </li> <li> <p> <code>WeeklyMaintenanceStartTime</code> </p> </li> </ul>"
     },
     "UpdateSharedVpcConfiguration":{
       "name":"UpdateSharedVpcConfiguration",
@@ -816,6 +870,23 @@
       "min":12,
       "pattern":"^\\d{12}$"
     },
+    "AccessPointAlreadyOwnedByYou":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>An error code indicating that an access point with that name already exists in the Amazon Web Services Region in your Amazon Web Services account.</p>"
+        },
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>An access point with that name already exists in the Amazon Web Services Region in your Amazon Web Services account.</p>",
+      "exception":true
+    },
+    "AccessPointPolicy":{
+      "type":"string",
+      "max":200000,
+      "min":1
+    },
     "ActiveDirectoryBackupAttributes":{
       "type":"structure",
       "members":{
@@ -855,6 +926,7 @@
         "DOMAIN_NOT_FOUND",
         "INCOMPATIBLE_DOMAIN_MODE",
         "WRONG_VPC",
+        "INVALID_NETWORK_TYPE",
         "INVALID_DOMAIN_STAGE"
       ]
     },
@@ -901,7 +973,8 @@
         "RemainingTransferBytes":{
           "shape":"RemainingTransferBytes",
           "documentation":"<p>The remaining bytes to transfer for the FSx for OpenZFS snapshot that you're copying.</p>"
-        }
+        },
+        "Message":{"shape":"ErrorMessage"}
       },
       "documentation":"<p>Describes a specific Amazon FSx administrative action for the current Windows, Lustre, OpenZFS, or ONTAP file system or volume.</p>"
     },
@@ -998,7 +1071,7 @@
     "Aliases":{
       "type":"list",
       "member":{"shape":"Alias"},
-      "documentation":"<p>An array of one or more DNS aliases that are currently associated with the Amazon FSx file system. Aliases allow you to use existing DNS names to access the data in your Amazon FSx file system. You can associate up to 50 aliases with a file system at any time. You can associate additional DNS aliases after you create the file system using the AssociateFileSystemAliases operation. You can remove DNS aliases from the file system after it is created using the DisassociateFileSystemAliases operation. You only need to specify the alias name in the request payload. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-dns-aliases.html\">DNS aliases</a>.</p>",
+      "documentation":"<p>An array of one or more DNS aliases that are currently associated with the Amazon FSx file system. Aliases allow you to use existing DNS names to access the data in your Amazon FSx file system. You can associate up to 50 aliases with a file system at any time. You can associate additional DNS aliases after you create the file system using the AssociateFileSystemAliases operation. You can remove DNS aliases from the file system after it is created using the DisassociateFileSystemAliases operation. You only need to specify the alias name in the request payload. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-dns-aliases.html\">Managing DNS aliases</a>.</p>",
       "max":50
     },
     "AlternateDNSName":{
@@ -1434,6 +1507,76 @@
       },
       "documentation":"<p>Used to specify the configuration options for an FSx for ONTAP volume's storage aggregate or aggregates.</p>"
     },
+    "CreateAndAttachS3AccessPointOpenZFSConfiguration":{
+      "type":"structure",
+      "required":[
+        "VolumeId",
+        "FileSystemIdentity"
+      ],
+      "members":{
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>The ID of the FSx for OpenZFS volume to which you want the S3 access point attached.</p>"
+        },
+        "FileSystemIdentity":{
+          "shape":"OpenZFSFileSystemIdentity",
+          "documentation":"<p>Specifies the file system user identity to use for authorizing file read and write requests that are made using this S3 access point.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the FSx for OpenZFS volume that the S3 access point will be attached to, and the file system user identity.</p>"
+    },
+    "CreateAndAttachS3AccessPointRequest":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Type"
+      ],
+      "members":{
+        "ClientRequestToken":{
+          "shape":"ClientRequestToken",
+          "idempotencyToken":true
+        },
+        "Name":{
+          "shape":"S3AccessPointAttachmentName",
+          "documentation":"<p>The name you want to assign to this S3 access point.</p>"
+        },
+        "Type":{
+          "shape":"S3AccessPointAttachmentType",
+          "documentation":"<p>The type of S3 access point you want to create. Only <code>OpenZFS</code> is supported.</p>"
+        },
+        "OpenZFSConfiguration":{
+          "shape":"CreateAndAttachS3AccessPointOpenZFSConfiguration",
+          "documentation":"<p>Specifies the configuration to use when creating and attaching an S3 access point to an FSx for OpenZFS volume.</p>"
+        },
+        "S3AccessPoint":{
+          "shape":"CreateAndAttachS3AccessPointS3Configuration",
+          "documentation":"<p>Specifies the virtual private cloud (VPC) configuration if you're creating an access point that is restricted to a VPC. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/access-points-vpc.html\">Creating access points restricted to a virtual private cloud</a>.</p>"
+        }
+      }
+    },
+    "CreateAndAttachS3AccessPointResponse":{
+      "type":"structure",
+      "members":{
+        "S3AccessPointAttachment":{
+          "shape":"S3AccessPointAttachment",
+          "documentation":"<p>Describes the configuration of the S3 access point created.</p>"
+        }
+      }
+    },
+    "CreateAndAttachS3AccessPointS3Configuration":{
+      "type":"structure",
+      "members":{
+        "VpcConfiguration":{
+          "shape":"S3AccessPointVpcConfiguration",
+          "documentation":"<p>If included, Amazon S3 restricts access to this S3 access point to requests made from the specified virtual private cloud (VPC).</p>"
+        },
+        "Policy":{
+          "shape":"AccessPointPolicy",
+          "documentation":"<p>Specifies an access policy to associate with the S3 access point configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-policies.html\">Configuring IAM policies for using access points</a> in the Amazon Simple Storage Service User Guide.</p>"
+        }
+      },
+      "documentation":"<p>Used to create an S3 access point that accepts requests only from a virtual private cloud (VPC) to restrict data access to a private network.</p>"
+    },
     "CreateBackupRequest":{
       "type":"structure",
       "members":{
@@ -1676,12 +1819,12 @@
         "LustreConfiguration":{"shape":"CreateFileSystemLustreConfiguration"},
         "StorageType":{
           "shape":"StorageType",
-          "documentation":"<p>Sets the storage type for the Windows or OpenZFS file system that you're creating from a backup. Valid values are <code>SSD</code> and <code>HDD</code>.</p> <ul> <li> <p>Set to <code>SSD</code> to use solid state drive storage. SSD is supported on all Windows and OpenZFS deployment types.</p> </li> <li> <p>Set to <code>HDD</code> to use hard disk drive storage. HDD is supported on <code>SINGLE_AZ_2</code> and <code>MULTI_AZ_1</code> FSx for Windows File Server file system deployment types.</p> </li> </ul> <p> The default value is <code>SSD</code>. </p> <note> <p>HDD and SSD storage types have different minimum storage capacity requirements. A restored file system's storage capacity is tied to the file system that was backed up. You can create a file system that uses HDD storage from a backup of a file system that used SSD storage if the original SSD file system had a storage capacity of at least 2000 GiB.</p> </note>"
+          "documentation":"<p>Sets the storage type for the Windows, OpenZFS, or Lustre file system that you're creating from a backup. Valid values are <code>SSD</code>, <code>HDD</code>, and <code>INTELLIGENT_TIERING</code>.</p> <ul> <li> <p>Set to <code>SSD</code> to use solid state drive storage. SSD is supported on all Windows and OpenZFS deployment types.</p> </li> <li> <p>Set to <code>HDD</code> to use hard disk drive storage. HDD is supported on <code>SINGLE_AZ_2</code> and <code>MULTI_AZ_1</code> FSx for Windows File Server file system deployment types.</p> </li> <li> <p>Set to <code>INTELLIGENT_TIERING</code> to use fully elastic, intelligently-tiered storage. Intelligent-Tiering is only available for OpenZFS file systems with the Multi-AZ deployment type and for Lustre file systems with the Persistent_2 deployment type.</p> </li> </ul> <p> The default value is <code>SSD</code>. </p> <note> <p>HDD and SSD storage types have different minimum storage capacity requirements. A restored file system's storage capacity is tied to the file system that was backed up. You can create a file system that uses HDD storage from a backup of a file system that used SSD storage if the original SSD file system had a storage capacity of at least 2000 GiB.</p> </note>"
         },
         "KmsKeyId":{"shape":"KmsKeyId"},
         "FileSystemTypeVersion":{
           "shape":"FileSystemTypeVersion",
-          "documentation":"<p>Sets the version for the Amazon FSx for Lustre file system that you're creating from a backup. Valid values are <code>2.10</code>, <code>2.12</code>, and <code>2.15</code>.</p> <p>You don't need to specify <code>FileSystemTypeVersion</code> because it will be applied using the backup's <code>FileSystemTypeVersion</code> setting. If you choose to specify <code>FileSystemTypeVersion</code> when creating from backup, the value must match the backup's <code>FileSystemTypeVersion</code> setting.</p>"
+          "documentation":"<p>Sets the version for the Amazon FSx for Lustre file system that you're creating from a backup. Valid values are <code>2.10</code>, <code>2.12</code>, and <code>2.15</code>.</p> <p>You can enter a Lustre version that is newer than the backup's <code>FileSystemTypeVersion</code> setting. If you don't enter a newer Lustre version, it defaults to the backup's setting.</p>"
         },
         "OpenZFSConfiguration":{
           "shape":"CreateFileSystemOpenZFSConfiguration",
@@ -1689,7 +1832,11 @@
         },
         "StorageCapacity":{
           "shape":"StorageCapacity",
-          "documentation":"<p>Sets the storage capacity of the OpenZFS file system that you're creating from a backup, in gibibytes (GiB). Valid values are from 64 GiB up to 524,288 GiB (512 TiB). However, the value that you specify must be equal to or greater than the backup's storage capacity value. If you don't use the <code>StorageCapacity</code> parameter, the default is the backup's <code>StorageCapacity</code> value.</p> <p>If used to create a file system other than OpenZFS, you must provide a value that matches the backup's <code>StorageCapacity</code> value. If you provide any other value, Amazon FSx responds with with an HTTP status code 400 Bad Request. </p>"
+          "documentation":"<p>Sets the storage capacity of the OpenZFS file system that you're creating from a backup, in gibibytes (GiB). Valid values are from 64 GiB up to 524,288 GiB (512 TiB). However, the value that you specify must be equal to or greater than the backup's storage capacity value. If you don't use the <code>StorageCapacity</code> parameter, the default is the backup's <code>StorageCapacity</code> value.</p> <p>If used to create a file system other than OpenZFS, you must provide a value that matches the backup's <code>StorageCapacity</code> value. If you provide any other value, Amazon FSx responds with an HTTP status code 400 Bad Request. </p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Sets the network type for the Amazon FSx for OpenZFS file system that you're creating from a backup.</p>"
         }
       },
       "documentation":"<p>The request object for the <code>CreateFileSystemFromBackup</code> operation.</p>"
@@ -1725,7 +1872,7 @@
         },
         "DeploymentType":{
           "shape":"LustreDeploymentType",
-          "documentation":"<p>(Optional) Choose <code>SCRATCH_1</code> and <code>SCRATCH_2</code> deployment types when you need temporary storage and shorter-term processing of data. The <code>SCRATCH_2</code> deployment type provides in-transit encryption of data and higher burst throughput capacity than <code>SCRATCH_1</code>.</p> <p>Choose <code>PERSISTENT_1</code> for longer-term storage and for throughput-focused workloads that aren’t latency-sensitive. <code>PERSISTENT_1</code> supports encryption of data in transit, and is available in all Amazon Web Services Regions in which FSx for Lustre is available.</p> <p>Choose <code>PERSISTENT_2</code> for longer-term storage and for latency-sensitive workloads that require the highest levels of IOPS/throughput. <code>PERSISTENT_2</code> supports SSD storage, and offers higher <code>PerUnitStorageThroughput</code> (up to 1000 MB/s/TiB). You can optionally specify a metadata configuration mode for <code>PERSISTENT_2</code> which supports increasing metadata performance. <code>PERSISTENT_2</code> is available in a limited number of Amazon Web Services Regions. For more information, and an up-to-date list of Amazon Web Services Regions in which <code>PERSISTENT_2</code> is available, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html#lustre-deployment-types\">File system deployment options for FSx for Lustre</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p> <note> <p>If you choose <code>PERSISTENT_2</code>, and you set <code>FileSystemTypeVersion</code> to <code>2.10</code>, the <code>CreateFileSystem</code> operation fails.</p> </note> <p>Encryption of data in transit is automatically turned on when you access <code>SCRATCH_2</code>, <code>PERSISTENT_1</code>, and <code>PERSISTENT_2</code> file systems from Amazon EC2 instances that support automatic encryption in the Amazon Web Services Regions where they are available. For more information about encryption in transit for FSx for Lustre file systems, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/encryption-in-transit-fsxl.html\">Encrypting data in transit</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p> <p>(Default = <code>SCRATCH_1</code>)</p>"
+          "documentation":"<p>(Optional) Choose <code>SCRATCH_1</code> and <code>SCRATCH_2</code> deployment types when you need temporary storage and shorter-term processing of data. The <code>SCRATCH_2</code> deployment type provides in-transit encryption of data and higher burst throughput capacity than <code>SCRATCH_1</code>.</p> <p>Choose <code>PERSISTENT_1</code> for longer-term storage and for throughput-focused workloads that aren’t latency-sensitive. <code>PERSISTENT_1</code> supports encryption of data in transit, and is available in all Amazon Web Services Regions in which FSx for Lustre is available.</p> <p>Choose <code>PERSISTENT_2</code> for longer-term storage and for latency-sensitive workloads that require the highest levels of IOPS/throughput. <code>PERSISTENT_2</code> supports the SSD and Intelligent-Tiering storage classes. You can optionally specify a metadata configuration mode for <code>PERSISTENT_2</code> which supports increasing metadata performance. <code>PERSISTENT_2</code> is available in a limited number of Amazon Web Services Regions. For more information, and an up-to-date list of Amazon Web Services Regions in which <code>PERSISTENT_2</code> is available, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html\">Deployment and storage class options for FSx for Lustre file systems</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p> <note> <p>If you choose <code>PERSISTENT_2</code>, and you set <code>FileSystemTypeVersion</code> to <code>2.10</code>, the <code>CreateFileSystem</code> operation fails.</p> </note> <p>Encryption of data in transit is automatically turned on when you access <code>SCRATCH_2</code>, <code>PERSISTENT_1</code>, and <code>PERSISTENT_2</code> file systems from Amazon EC2 instances that support automatic encryption in the Amazon Web Services Regions where they are available. For more information about encryption in transit for FSx for Lustre file systems, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/encryption-in-transit-fsxl.html\">Encrypting data in transit</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p> <p>(Default = <code>SCRATCH_1</code>)</p>"
         },
         "AutoImportPolicy":{
           "shape":"AutoImportPolicyType",
@@ -1733,7 +1880,7 @@
         },
         "PerUnitStorageThroughput":{
           "shape":"PerUnitStorageThroughput",
-          "documentation":"<p>Required with <code>PERSISTENT_1</code> and <code>PERSISTENT_2</code> deployment types, provisions the amount of read and write throughput for each 1 tebibyte (TiB) of file system storage capacity, in MB/s/TiB. File system throughput capacity is calculated by multiplying ﬁle system storage capacity (TiB) by the <code>PerUnitStorageThroughput</code> (MB/s/TiB). For a 2.4-TiB ﬁle system, provisioning 50 MB/s/TiB of <code>PerUnitStorageThroughput</code> yields 120 MB/s of ﬁle system throughput. You pay for the amount of throughput that you provision. </p> <p>Valid values:</p> <ul> <li> <p>For <code>PERSISTENT_1</code> SSD storage: 50, 100, 200 MB/s/TiB.</p> </li> <li> <p>For <code>PERSISTENT_1</code> HDD storage: 12, 40 MB/s/TiB.</p> </li> <li> <p>For <code>PERSISTENT_2</code> SSD storage: 125, 250, 500, 1000 MB/s/TiB.</p> </li> </ul>"
+          "documentation":"<p>Required with <code>PERSISTENT_1</code> and <code>PERSISTENT_2</code> deployment types using an SSD or HDD storage class, provisions the amount of read and write throughput for each 1 tebibyte (TiB) of file system storage capacity, in MB/s/TiB. File system throughput capacity is calculated by multiplying ﬁle system storage capacity (TiB) by the <code>PerUnitStorageThroughput</code> (MB/s/TiB). For a 2.4-TiB ﬁle system, provisioning 50 MB/s/TiB of <code>PerUnitStorageThroughput</code> yields 120 MB/s of ﬁle system throughput. You pay for the amount of throughput that you provision. </p> <p>Valid values:</p> <ul> <li> <p>For <code>PERSISTENT_1</code> SSD storage: 50, 100, 200 MB/s/TiB.</p> </li> <li> <p>For <code>PERSISTENT_1</code> HDD storage: 12, 40 MB/s/TiB.</p> </li> <li> <p>For <code>PERSISTENT_2</code> SSD storage: 125, 250, 500, 1000 MB/s/TiB.</p> </li> </ul>"
         },
         "DailyAutomaticBackupStartTime":{"shape":"DailyTime"},
         "AutomaticBackupRetentionDays":{
@@ -1767,6 +1914,14 @@
         "MetadataConfiguration":{
           "shape":"CreateFileSystemLustreMetadataConfiguration",
           "documentation":"<p>The Lustre metadata performance configuration for the creation of an FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type.</p>"
+        },
+        "ThroughputCapacity":{
+          "shape":"ThroughputCapacityMbps",
+          "documentation":"<p>Specifies the throughput of an FSx for Lustre file system using the Intelligent-Tiering storage class, measured in megabytes per second (MBps). Valid values are 4000 MBps or multiples of 4000 MBps. You pay for the amount of throughput that you provision.</p>"
+        },
+        "DataReadCacheConfiguration":{
+          "shape":"LustreReadCacheConfiguration",
+          "documentation":"<p>Specifies the optional provisioned SSD read cache on FSx for Lustre file systems that use the Intelligent-Tiering storage class. Required when <code>StorageType</code> is set to <code>INTELLIGENT_TIERING</code>.</p>"
         }
       },
       "documentation":"<p>The Lustre configuration for the file system being created.</p> <note> <p>The following parameters are not supported for file systems with a data repository association created with .</p> <ul> <li> <p> <code>AutoImportPolicy</code> </p> </li> <li> <p> <code>ExportPath</code> </p> </li> <li> <p> <code>ImportedFileChunkSize</code> </p> </li> <li> <p> <code>ImportPath</code> </p> </li> </ul> </note>"
@@ -1777,11 +1932,11 @@
       "members":{
         "Iops":{
           "shape":"MetadataIops",
-          "documentation":"<p>(USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for the file system. This parameter sets the maximum rate of metadata disk IOPS supported by the file system. Valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p> <note> <p>Iops doesn’t have a default value. If you're using USER_PROVISIONED mode, you can choose to specify a valid value. If you're using AUTOMATIC mode, you cannot specify a value because FSx for Lustre automatically sets the value based on your file system storage capacity. </p> </note>"
+          "documentation":"<p>(USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for the file system. This parameter sets the maximum rate of metadata disk IOPS supported by the file system.</p> <ul> <li> <p>For SSD file systems, valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p> </li> <li> <p>For Intelligent-Tiering file systems, valid values are <code>6000</code> and <code>12000</code>.</p> </li> </ul> <note> <p> <code>Iops</code> doesn’t have a default value. If you're using USER_PROVISIONED mode, you can choose to specify a valid value. If you're using AUTOMATIC mode, you cannot specify a value because FSx for Lustre automatically sets the value based on your file system storage capacity. </p> </note>"
         },
         "Mode":{
           "shape":"MetadataConfigurationMode",
-          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type.</p> <ul> <li> <p>In AUTOMATIC mode, FSx for Lustre automatically provisions and scales the number of Metadata IOPS for your file system based on your file system storage capacity.</p> </li> <li> <p>In USER_PROVISIONED mode, you specify the number of Metadata IOPS to provision for your file system.</p> </li> </ul>"
+          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type.</p> <ul> <li> <p>In AUTOMATIC mode (supported only on SSD file systems), FSx for Lustre automatically provisions and scales the number of Metadata IOPS for your file system based on your file system storage capacity.</p> </li> <li> <p>In USER_PROVISIONED mode, you specify the number of Metadata IOPS to provision for your file system.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The Lustre metadata performance configuration for the creation of an Amazon FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type. The configuration uses a Metadata IOPS value to set the maximum rate of metadata disk IOPS supported by the file system.</p> <p>After creation, the file system supports increasing metadata performance. For more information on Metadata IOPS, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-metadata-performance.html#metadata-configuration\">Lustre metadata performance configuration</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p>"
@@ -1798,7 +1953,7 @@
         },
         "EndpointIpAddressRange":{
           "shape":"IpAddressRange",
-          "documentation":"<p>(Multi-AZ only) Specifies the IP address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API, Amazon FSx selects an unused IP address range for you from the 198.19.* range. By default in the Amazon FSx console, Amazon FSx chooses the last 64 IP addresses from the VPC’s primary CIDR range to use as the endpoint IP address range for the file system. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv4 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API, Amazon FSx selects an unused IP address range for you from the 198.19.* range. By default in the Amazon FSx console, Amazon FSx chooses the last 64 IP addresses from the VPC’s primary CIDR range to use as the endpoint IP address range for the file system. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         },
         "FsxAdminPassword":{
           "shape":"AdminPassword",
@@ -1828,6 +1983,10 @@
         "ThroughputCapacityPerHAPair":{
           "shape":"ThroughputCapacityPerHAPair",
           "documentation":"<p>Use to choose the throughput capacity per HA pair, rather than the total throughput for the file system. </p> <p>You can define either the <code>ThroughputCapacityPerHAPair</code> or the <code>ThroughputCapacity</code> when creating a file system, but not both.</p> <p>This field and <code>ThroughputCapacity</code> are the same for file systems powered by one HA pair.</p> <ul> <li> <p>For <code>SINGLE_AZ_1</code> and <code>MULTI_AZ_1</code> file systems, valid values are 128, 256, 512, 1024, 2048, or 4096 MBps.</p> </li> <li> <p>For <code>SINGLE_AZ_2</code>, valid values are 1536, 3072, or 6144 MBps.</p> </li> <li> <p>For <code>MULTI_AZ_2</code>, valid values are 384, 768, 1536, 3072, or 6144 MBps.</p> </li> </ul> <p>Amazon FSx responds with an HTTP status code 400 (Bad Request) for the following conditions:</p> <ul> <li> <p>The value of <code>ThroughputCapacity</code> and <code>ThroughputCapacityPerHAPair</code> are not the same value for file systems with one HA pair.</p> </li> <li> <p>The value of deployment type is <code>SINGLE_AZ_2</code> and <code>ThroughputCapacity</code> / <code>ThroughputCapacityPerHAPair</code> is not a valid HA pair (a value between 1 and 12).</p> </li> <li> <p>The value of <code>ThroughputCapacityPerHAPair</code> is not a valid value.</p> </li> </ul>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         }
       },
       "documentation":"<p>The ONTAP configuration properties of the FSx for ONTAP file system that you are creating.</p>"
@@ -1855,7 +2014,7 @@
         },
         "ThroughputCapacity":{
           "shape":"MegabytesPerSecond",
-          "documentation":"<p>Specifies the throughput of an Amazon FSx for OpenZFS file system, measured in megabytes per second (MBps). Valid values depend on the DeploymentType you choose, as follows:</p> <ul> <li> <p>For <code>MULTI_AZ_1</code> and <code>SINGLE_AZ_2</code>, valid values are 160, 320, 640, 1280, 2560, 3840, 5120, 7680, or 10240 MBps.</p> </li> <li> <p>For <code>SINGLE_AZ_1</code>, valid values are 64, 128, 256, 512, 1024, 2048, 3072, or 4096 MBps.</p> </li> </ul> <p>You pay for additional throughput capacity that you provision.</p>"
+          "documentation":"<p>Specifies the throughput of an Amazon FSx for OpenZFS file system, measured in megabytes per second (MBps). Valid values depend on the <code>DeploymentType</code> that you choose, as follows:</p> <ul> <li> <p>For <code>MULTI_AZ_1</code> and <code>SINGLE_AZ_2</code>, valid values are 160, 320, 640, 1280, 2560, 3840, 5120, 7680, or 10240 MBps.</p> </li> <li> <p>For <code>SINGLE_AZ_1</code>, valid values are 64, 128, 256, 512, 1024, 2048, 3072, or 4096 MBps.</p> </li> </ul> <p>You pay for additional throughput capacity that you provision.</p>"
         },
         "WeeklyMaintenanceStartTime":{"shape":"WeeklyTime"},
         "DiskIopsConfiguration":{"shape":"DiskIopsConfiguration"},
@@ -1869,7 +2028,11 @@
         },
         "EndpointIpAddressRange":{
           "shape":"IpAddressRange",
-          "documentation":"<p>(Multi-AZ only) Specifies the IP address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /28 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables.</p>"
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv4 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /28 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         },
         "RouteTableIds":{
           "shape":"RouteTableIds",
@@ -1904,7 +2067,7 @@
         },
         "StorageType":{
           "shape":"StorageType",
-          "documentation":"<p>Sets the storage class for the file system that you're creating. Valid values are <code>SSD</code>, <code>HDD</code>, and <code>INTELLIGENT_TIERING</code>.</p> <ul> <li> <p>Set to <code>SSD</code> to use solid state drive storage. SSD is supported on all Windows, Lustre, ONTAP, and OpenZFS deployment types.</p> </li> <li> <p>Set to <code>HDD</code> to use hard disk drive storage. HDD is supported on <code>SINGLE_AZ_2</code> and <code>MULTI_AZ_1</code> Windows file system deployment types, and on <code>PERSISTENT_1</code> Lustre file system deployment types.</p> </li> <li> <p>Set to <code>INTELLIGENT_TIERING</code> to use fully elastic, intelligently-tiered storage. Intelligent-Tiering is only available for OpenZFS file systems with the Multi-AZ deployment type.</p> </li> </ul> <p>Default value is <code>SSD</code>. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/optimize-fsx-costs.html#storage-type-options\"> Storage type options</a> in the <i>FSx for Windows File Server User Guide</i>, <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html#storage-options\">Multiple storage options</a> in the <i>FSx for Lustre User Guide</i>, and <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/performance-intelligent-tiering\">Working with Intelligent-Tiering</a> in the <i>Amazon FSx for OpenZFS User Guide</i>. </p>"
+          "documentation":"<p>Sets the storage class for the file system that you're creating. Valid values are <code>SSD</code>, <code>HDD</code>, and <code>INTELLIGENT_TIERING</code>.</p> <ul> <li> <p>Set to <code>SSD</code> to use solid state drive storage. SSD is supported on all Windows, Lustre, ONTAP, and OpenZFS deployment types.</p> </li> <li> <p>Set to <code>HDD</code> to use hard disk drive storage, which is supported on <code>SINGLE_AZ_2</code> and <code>MULTI_AZ_1</code> Windows file system deployment types, and on <code>PERSISTENT_1</code> Lustre file system deployment types.</p> </li> <li> <p>Set to <code>INTELLIGENT_TIERING</code> to use fully elastic, intelligently-tiered storage. Intelligent-Tiering is only available for OpenZFS file systems with the Multi-AZ deployment type and for Lustre file systems with the Persistent_2 deployment type.</p> </li> </ul> <p>Default value is <code>SSD</code>. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/optimize-fsx-costs.html#storage-type-options\"> Storage type options</a> in the <i>FSx for Windows File Server User Guide</i>, <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html#lustre-storage-classes\">FSx for Lustre storage classes</a> in the <i>FSx for Lustre User Guide</i>, and <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/performance-intelligent-tiering\">Working with Intelligent-Tiering</a> in the <i>Amazon FSx for OpenZFS User Guide</i>.</p>"
         },
         "SubnetIds":{
           "shape":"SubnetIds",
@@ -1932,6 +2095,10 @@
         "OpenZFSConfiguration":{
           "shape":"CreateFileSystemOpenZFSConfiguration",
           "documentation":"<p>The OpenZFS configuration for the file system that's being created.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The network type of the Amazon FSx file system that you are creating. Valid values are <code>IPV4</code> (which supports IPv4 only) and <code>DUAL</code> (for dual-stack mode, which supports both IPv4 and IPv6). The default is <code>IPV4</code>. Supported for FSx for OpenZFS, FSx for ONTAP, and FSx for Windows File Server file systems.</p>"
         }
       },
       "documentation":"<p>The request object used to create a new Amazon FSx file system.</p>"
@@ -1985,7 +2152,7 @@
         },
         "Aliases":{
           "shape":"AlternateDNSNames",
-          "documentation":"<p>An array of one or more DNS alias names that you want to associate with the Amazon FSx file system. Aliases allow you to use existing DNS names to access the data in your Amazon FSx file system. You can associate up to 50 aliases with a file system at any time. You can associate additional DNS aliases after you create the file system using the AssociateFileSystemAliases operation. You can remove DNS aliases from the file system after it is created using the DisassociateFileSystemAliases operation. You only need to specify the alias name in the request payload.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-dns-aliases.html\">Working with DNS Aliases</a> and <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/walkthrough05-file-system-custom-CNAME.html\">Walkthrough 5: Using DNS aliases to access your file system</a>, including additional steps you must take to be able to access your file system using a DNS alias.</p> <p>An alias name has to meet the following requirements:</p> <ul> <li> <p>Formatted as a fully-qualified domain name (FQDN), <code>hostname.domain</code>, for example, <code>accounting.example.com</code>.</p> </li> <li> <p>Can contain alphanumeric characters, the underscore (_), and the hyphen (-).</p> </li> <li> <p>Cannot start or end with a hyphen.</p> </li> <li> <p>Can start with a numeric.</p> </li> </ul> <p>For DNS alias names, Amazon FSx stores alphabetic characters as lowercase letters (a-z), regardless of how you specify them: as uppercase letters, lowercase letters, or the corresponding letters in escape codes.</p>"
+          "documentation":"<p>An array of one or more DNS alias names that you want to associate with the Amazon FSx file system. Aliases allow you to use existing DNS names to access the data in your Amazon FSx file system. You can associate up to 50 aliases with a file system at any time. You can associate additional DNS aliases after you create the file system using the AssociateFileSystemAliases operation. You can remove DNS aliases from the file system after it is created using the DisassociateFileSystemAliases operation. You only need to specify the alias name in the request payload. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-dns-aliases.html\">Managing DNS aliases</a> and <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/dns-aliases.html\">Accessing data using DNS aliases</a>.</p> <p>An alias name has to meet the following requirements:</p> <ul> <li> <p>Formatted as a fully-qualified domain name (FQDN), <code>hostname.domain</code>, for example, <code>accounting.example.com</code>.</p> </li> <li> <p>Can contain alphanumeric characters, the underscore (_), and the hyphen (-).</p> </li> <li> <p>Cannot start or end with a hyphen.</p> </li> <li> <p>Can start with a numeric.</p> </li> </ul> <p>For DNS alias names, Amazon FSx stores alphabetic characters as lowercase letters (a-z), regardless of how you specify them: as uppercase letters, lowercase letters, or the corresponding letters in escape codes.</p>"
         },
         "AuditLogConfiguration":{
           "shape":"WindowsAuditLogCreateConfiguration",
@@ -2089,7 +2256,7 @@
         },
         "RecordSizeKiB":{
           "shape":"IntegerRecordSizeKiB",
-          "documentation":"<p>Specifies the suggested block size for a volume in a ZFS dataset, in kibibytes (KiB). For file systems using the Intelligent-Tiering storage class, valid values are 128, 256, 512, 1024, 2048, or 4096 KiB, with a default of 2048 KiB. For all other file systems, valid values are 4, 8, 16, 32, 64, 128, 256, 512, or 1024 KiB, with a default of 128 KiB. We recommend using the default setting for the majority of use cases. Generally, workloads that write in fixed small or large record sizes may benefit from setting a custom record size, like database workloads (small record size) or media streaming workloads (large record size). For additional guidance on when to set a custom record size, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/performance.html#record-size-performance\"> ZFS Record size</a> in the <i>Amazon FSx for OpenZFS User Guide</i>.</p>"
+          "documentation":"<p>Specifies the suggested block size for a volume in a ZFS dataset, in kibibytes (KiB). For file systems using the Intelligent-Tiering storage class, valid values are 128, 256, 512, 1024, 2048, or 4096 KiB, with a default of 1024 KiB. For all other file systems, valid values are 4, 8, 16, 32, 64, 128, 256, 512, or 1024 KiB, with a default of 128 KiB. We recommend using the default setting for the majority of use cases. Generally, workloads that write in fixed small or large record sizes may benefit from setting a custom record size, like database workloads (small record size) or media streaming workloads (large record size). For additional guidance on when to set a custom record size, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/performance.html#record-size-performance\"> ZFS Record size</a> in the <i>Amazon FSx for OpenZFS User Guide</i>.</p>"
         },
         "DataCompressionType":{
           "shape":"OpenZFSDataCompressionType",
@@ -2097,7 +2264,7 @@
         },
         "CopyTagsToSnapshots":{
           "shape":"Flag",
-          "documentation":"<p>A Boolean value indicating whether tags for the volume should be copied to snapshots. This value defaults to <code>false</code>. If it's set to <code>true</code>, all tags for the volume are copied to snapshots where the user doesn't specify tags. If this value is <code>true</code>, and you specify one or more tags, only the specified tags are copied to snapshots. If you specify one or more tags when creating the snapshot, no tags are copied from the volume, regardless of this value.</p>"
+          "documentation":"<p>A Boolean value indicating whether tags for the volume should be copied to snapshots. This value defaults to <code>false</code>. If this value is set to <code>true</code>, and you do not specify any tags, all tags for the original volume are copied over to snapshots. If this value is set to <code>true</code>, and you do specify one or more tags, only the specified tags for the original volume are copied over to snapshots. If you specify one or more tags when creating a new snapshot, no tags are copied over from the original volume, regardless of this value. </p>"
         },
         "OriginSnapshot":{
           "shape":"CreateOpenZFSOriginSnapshotConfiguration",
@@ -2307,6 +2474,12 @@
       "type":"timestamp",
       "documentation":"<p>The time that the resource was created, in seconds (since 1970-01-01T00:00:00Z), also known as Unix time.</p>"
     },
+    "CustomerSecretsManagerARN":{
+      "type":"string",
+      "max":1024,
+      "min":64,
+      "pattern":"^arn:[^:]{1,63}:secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:[a-zA-Z0-9/_+=.@-]+-[a-zA-Z0-9]{6}$"
+    },
     "DNSName":{
       "type":"string",
       "documentation":"<p>The file system's DNS name. You can mount your file system using its DNS name.</p>",
@@ -2381,7 +2554,7 @@
           "documentation":"<p>The configuration for an NFS data repository linked to an Amazon File Cache resource with a data repository association.</p>"
         }
       },
-      "documentation":"<p>The configuration of a data repository association that links an Amazon FSx for Lustre file system to an Amazon S3 bucket or an Amazon File Cache resource to an Amazon S3 bucket or an NFS file system. The data repository association configuration object is returned in the response of the following operations:</p> <ul> <li> <p> <code>CreateDataRepositoryAssociation</code> </p> </li> <li> <p> <code>UpdateDataRepositoryAssociation</code> </p> </li> <li> <p> <code>DescribeDataRepositoryAssociations</code> </p> </li> </ul> <p>Data repository associations are supported on Amazon File Cache resources and all FSx for Lustre 2.12 and 2.15 file systems, excluding <code>scratch_1</code> deployment type.</p>"
+      "documentation":"<p>The configuration of a data repository association that links an Amazon FSx for Lustre file system to an Amazon S3 bucket or an Amazon File Cache resource to an Amazon S3 bucket or an NFS file system. The data repository association configuration object is returned in the response of the following operations:</p> <ul> <li> <p> <code>CreateDataRepositoryAssociation</code> </p> </li> <li> <p> <code>UpdateDataRepositoryAssociation</code> </p> </li> <li> <p> <code>DescribeDataRepositoryAssociations</code> </p> </li> </ul> <p>Data repository associations are supported on Amazon File Cache resources and all FSx for Lustre 2.12 and 2.15 file systems, excluding Intelligent-Tiering and <code>scratch_1</code> file systems.</p>"
     },
     "DataRepositoryAssociationId":{
       "type":"string",
@@ -2551,7 +2724,7 @@
           "documentation":"<p>Use Values to include the specific file system IDs and task lifecycle states for the filters you are using.</p>"
         }
       },
-      "documentation":"<p>(Optional) An array of filter objects you can use to filter the response of data repository tasks you will see in the the response. You can filter the tasks returned in the response by one or more file system IDs, task lifecycles, and by task type. A filter object consists of a filter <code>Name</code>, and one or more <code>Values</code> for the filter.</p>"
+      "documentation":"<p>(Optional) An array of filter objects you can use to filter the response of data repository tasks you will see in the response. You can filter the tasks returned in the response by one or more file system IDs, task lifecycles, and by task type. A filter object consists of a filter <code>Name</code>, and one or more <code>Values</code> for the filter.</p>"
     },
     "DataRepositoryTaskFilterName":{
       "type":"string",
@@ -3185,11 +3358,35 @@
       },
       "documentation":"<p>The response object for <code>DescribeFileSystems</code> operation.</p>"
     },
-    "DescribeSharedVpcConfigurationRequest":{
+    "DescribeS3AccessPointAttachmentsRequest":{
+      "type":"structure",
+      "members":{
+        "Names":{
+          "shape":"S3AccessPointAttachmentNames",
+          "documentation":"<p>The names of the S3 access point attachments whose descriptions you want to retrieve.</p>"
+        },
+        "Filters":{
+          "shape":"S3AccessPointAttachmentsFilters",
+          "documentation":"<p>Enter a filter Name and Values pair to view a select set of S3 access point attachments.</p>"
+        },
+        "MaxResults":{"shape":"MaxResults"},
+        "NextToken":{"shape":"NextToken"}
+      }
+    },
+    "DescribeS3AccessPointAttachmentsResponse":{
       "type":"structure",
       "members":{
+        "S3AccessPointAttachments":{
+          "shape":"S3AccessPointAttachments",
+          "documentation":"<p>Array of S3 access point attachments returned after a successful <code>DescribeS3AccessPointAttachments</code> operation.</p>"
+        },
+        "NextToken":{"shape":"NextToken"}
       }
     },
+    "DescribeSharedVpcConfigurationRequest":{
+      "type":"structure",
+      "members":{}
+    },
     "DescribeSharedVpcConfigurationResponse":{
       "type":"structure",
       "members":{
@@ -3278,6 +3475,33 @@
         "NextToken":{"shape":"NextToken"}
       }
     },
+    "DetachAndDeleteS3AccessPointRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "ClientRequestToken":{
+          "shape":"ClientRequestToken",
+          "idempotencyToken":true
+        },
+        "Name":{
+          "shape":"S3AccessPointAttachmentName",
+          "documentation":"<p>The name of the S3 access point attachment that you want to delete.</p>"
+        }
+      }
+    },
+    "DetachAndDeleteS3AccessPointResponse":{
+      "type":"structure",
+      "members":{
+        "Lifecycle":{
+          "shape":"S3AccessPointAttachmentLifecycle",
+          "documentation":"<p>The lifecycle status of the S3 access point attachment.</p>"
+        },
+        "Name":{
+          "shape":"S3AccessPointAttachmentName",
+          "documentation":"<p>The name of the S3 access point attachment being deleted.</p>"
+        }
+      }
+    },
     "DirectoryId":{
       "type":"string",
       "max":12,
@@ -3378,6 +3602,11 @@
       "documentation":"<p>Defines the minimum amount of time since last access for a file to be eligible for release. Only files that have been exported to S3 and that were last accessed or modified before this point-in-time are eligible to be released from the Amazon FSx for Lustre file system.</p>"
     },
     "EndTime":{"type":"timestamp"},
+    "ErrorCode":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "ErrorMessage":{
       "type":"string",
       "documentation":"<p>A detailed error message.</p>",
@@ -3668,7 +3897,7 @@
         },
         "StorageType":{
           "shape":"StorageType",
-          "documentation":"<p>The type of storage the file system is using. If set to <code>SSD</code>, the file system uses solid state drive storage. If set to <code>HDD</code>, the file system uses hard disk drive storage. </p>"
+          "documentation":"<p>The type of storage the file system is using.</p> <ul> <li> <p>If set to <code>SSD</code>, the file system uses solid state drive storage.</p> </li> <li> <p>If set to <code>HDD</code>, the file system uses hard disk drive storage.</p> </li> <li> <p>If set to <code>INTELLIGENT_TIERING</code>, the file system uses fully elastic, intelligently-tiered storage.</p> </li> </ul>"
         },
         "VpcId":{
           "shape":"VpcId",
@@ -3718,6 +3947,10 @@
         "OpenZFSConfiguration":{
           "shape":"OpenZFSFileSystemConfiguration",
           "documentation":"<p>The configuration for this Amazon FSx for OpenZFS file system.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The network type of the file system.</p>"
         }
       },
       "documentation":"<p>A description of a specific Amazon FSx file system.</p>"
@@ -3734,7 +3967,11 @@
         "DNSName":{"shape":"DNSName"},
         "IpAddresses":{
           "shape":"OntapEndpointIpAddresses",
-          "documentation":"<p>IP addresses of the file system endpoint.</p>"
+          "documentation":"<p>The IPv4 addresses of the file system endpoint.</p>"
+        },
+        "Ipv6Addresses":{
+          "shape":"OntapEndpointIpAddresses",
+          "documentation":"<p>The IPv6 addresses of the file system endpoint.</p>"
         }
       },
       "documentation":"<p>An Amazon FSx for NetApp ONTAP file system has two endpoints that are used to access data or to manage the file system using the NetApp ONTAP CLI, REST API, or NetApp SnapMirror. They are the <code>Management</code> and <code>Intercluster</code> endpoints.</p>"
@@ -3763,6 +4000,11 @@
       },
       "documentation":"<p>A structure providing details of any failures that occurred.</p>"
     },
+    "FileSystemGID":{
+      "type":"long",
+      "max":4294967295,
+      "min":0
+    },
     "FileSystemId":{
       "type":"string",
       "documentation":"<p>The globally unique ID of the file system, assigned by Amazon FSx.</p>",
@@ -3795,11 +4037,11 @@
       "members":{
         "Iops":{
           "shape":"MetadataIops",
-          "documentation":"<p>The number of Metadata IOPS provisioned for the file system. Valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p>"
+          "documentation":"<p>The number of Metadata IOPS provisioned for the file system.</p> <ul> <li> <p>For SSD file systems, valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p> </li> <li> <p>For Intelligent-Tiering file systems, valid values are <code>6000</code> and <code>12000</code>.</p> </li> </ul>"
         },
         "Mode":{
           "shape":"MetadataConfigurationMode",
-          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for the file system.</p> <ul> <li> <p>In AUTOMATIC mode, FSx for Lustre automatically provisions and scales the number of Metadata IOPS on your file system based on your file system storage capacity.</p> </li> <li> <p>In USER_PROVISIONED mode, you can choose to specify the number of Metadata IOPS to provision for your file system.</p> </li> </ul>"
+          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for the file system.</p> <ul> <li> <p>In AUTOMATIC mode (supported only on SSD file systems), FSx for Lustre automatically provisions and scales the number of Metadata IOPS on your file system based on your file system storage capacity.</p> </li> <li> <p>In USER_PROVISIONED mode, you can choose to specify the number of Metadata IOPS to provision for your file system.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The Lustre metadata performance configuration of an Amazon FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type. The configuration enables the file system to support increasing metadata performance.</p>"
@@ -3826,9 +4068,14 @@
       "documentation":"<p>No Amazon FSx file systems were found based upon supplied parameters.</p>",
       "exception":true
     },
+    "FileSystemSecondaryGIDs":{
+      "type":"list",
+      "member":{"shape":"FileSystemGID"},
+      "max":15
+    },
     "FileSystemType":{
       "type":"string",
-      "documentation":"<p>The type of file system.</p>",
+      "documentation":"<p>The type of Amazon FSx file system.</p>",
       "enum":[
         "WINDOWS",
         "LUSTRE",
@@ -3842,6 +4089,11 @@
       "min":1,
       "pattern":"^[0-9](.[0-9]*)*$"
     },
+    "FileSystemUID":{
+      "type":"long",
+      "max":4294967295,
+      "min":0
+    },
     "FileSystems":{
       "type":"list",
       "member":{"shape":"FileSystem"},
@@ -3967,6 +4219,18 @@
       "exception":true,
       "fault":true
     },
+    "InvalidAccessPoint":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>An error code indicating that the access point specified doesn't exist.</p>"
+        },
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The access point specified doesn't exist.</p>",
+      "exception":true
+    },
     "InvalidDataRepositoryType":{
       "type":"structure",
       "members":{
@@ -4038,6 +4302,18 @@
       "documentation":"<p>The Region provided for <code>SourceRegion</code> is not valid or is in a different Amazon Web Services partition.</p>",
       "exception":true
     },
+    "InvalidRequest":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>An error code indicating that the action or operation requested is invalid.</p>"
+        },
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The action or operation requested is invalid. Verify that the action is typed correctly.</p>",
+      "exception":true
+    },
     "InvalidSourceKmsKey":{
       "type":"structure",
       "members":{
@@ -4053,9 +4329,9 @@
     },
     "IpAddress":{
       "type":"string",
-      "max":15,
-      "min":7,
-      "pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
+      "max":45,
+      "min":1,
+      "pattern":"(^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)"
     },
     "IpAddressRange":{
       "type":"string",
@@ -4063,6 +4339,12 @@
       "min":9,
       "pattern":"^[^\\u0000\\u0085\\u2028\\u2029\\r\\n]{9,17}$"
     },
+    "Ipv6AddressRange":{
+      "type":"string",
+      "max":43,
+      "min":4,
+      "pattern":"^[^\\u0000\\u0085\\u2028\\u2029\\r\\n]{4,43}$"
+    },
     "JunctionPath":{
       "type":"string",
       "max":255,
@@ -4150,7 +4432,7 @@
         "DataRepositoryConfiguration":{"shape":"DataRepositoryConfiguration"},
         "DeploymentType":{
           "shape":"LustreDeploymentType",
-          "documentation":"<p>The deployment type of the FSx for Lustre file system. <i>Scratch deployment type</i> is designed for temporary storage and shorter-term processing of data.</p> <p> <code>SCRATCH_1</code> and <code>SCRATCH_2</code> deployment types are best suited for when you need temporary storage and shorter-term processing of data. The <code>SCRATCH_2</code> deployment type provides in-transit encryption of data and higher burst throughput capacity than <code>SCRATCH_1</code>.</p> <p>The <code>PERSISTENT_1</code> and <code>PERSISTENT_2</code> deployment type is used for longer-term storage and workloads and encryption of data in transit. <code>PERSISTENT_2</code> offers higher <code>PerUnitStorageThroughput</code> (up to 1000 MB/s/TiB) along with a lower minimum storage capacity requirement (600 GiB). To learn more about FSx for Lustre deployment types, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/lustre-deployment-types.html\"> FSx for Lustre deployment options</a>.</p> <p>The default is <code>SCRATCH_1</code>.</p>"
+          "documentation":"<p>The deployment type of the FSx for Lustre file system. <i>Scratch deployment type</i> is designed for temporary storage and shorter-term processing of data.</p> <p> <code>SCRATCH_1</code> and <code>SCRATCH_2</code> deployment types are best suited for when you need temporary storage and shorter-term processing of data. The <code>SCRATCH_2</code> deployment type provides in-transit encryption of data and higher burst throughput capacity than <code>SCRATCH_1</code>.</p> <p>The <code>PERSISTENT_1</code> and <code>PERSISTENT_2</code> deployment type is used for longer-term storage and workloads and encryption of data in transit. <code>PERSISTENT_2</code> offers higher <code>PerUnitStorageThroughput</code> (up to 1000 MB/s/TiB) along with a lower minimum storage capacity requirement (600 GiB). To learn more about FSx for Lustre deployment types, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/using-fsx-lustre.html\">Deployment and storage class options for FSx for Lustre file systems</a>.</p> <p>The default is <code>SCRATCH_1</code>.</p>"
         },
         "PerUnitStorageThroughput":{
           "shape":"PerUnitStorageThroughput",
@@ -4189,6 +4471,14 @@
         "EfaEnabled":{
           "shape":"Flag",
           "documentation":"<p>Specifies whether Elastic Fabric Adapter (EFA) and GPUDirect Storage (GDS) support is enabled for the Amazon FSx for Lustre file system.</p>"
+        },
+        "ThroughputCapacity":{
+          "shape":"ThroughputCapacityMbps",
+          "documentation":"<p>The throughput of an Amazon FSx for Lustre file system using the Intelligent-Tiering storage class, measured in megabytes per second (MBps).</p>"
+        },
+        "DataReadCacheConfiguration":{
+          "shape":"LustreReadCacheConfiguration",
+          "documentation":"<p>Required when <code>StorageType</code> is set to <code>INTELLIGENT_TIERING</code>. Specifies the optional provisioned SSD read cache.</p>"
         }
       },
       "documentation":"<p>The configuration for the Amazon FSx for Lustre file system.</p>"
@@ -4240,6 +4530,28 @@
       "member":{"shape":"LustreNoSquashNid"},
       "max":64
     },
+    "LustreReadCacheConfiguration":{
+      "type":"structure",
+      "members":{
+        "SizingMode":{
+          "shape":"LustreReadCacheSizingMode",
+          "documentation":"<p> Specifies how the provisioned SSD read cache is sized, as follows: </p> <ul> <li> <p>Set to <code>NO_CACHE</code> if you do not want to use an SSD read cache with your Intelligent-Tiering file system.</p> </li> <li> <p>Set to <code>USER_PROVISIONED</code> to specify the exact size of your SSD read cache.</p> </li> <li> <p>Set to <code>PROPORTIONAL_TO_THROUGHPUT_CAPACITY</code> to have your SSD read cache automatically sized based on your throughput capacity.</p> </li> </ul>"
+        },
+        "SizeGiB":{
+          "shape":"StorageCapacity",
+          "documentation":"<p> Required if <code>SizingMode</code> is set to <code>USER_PROVISIONED</code>. Specifies the size of the file system's SSD read cache, in gibibytes (GiB). </p> <p>The SSD read cache size is distributed across provisioned file servers in your file system. Intelligent-Tiering file systems support a minimum of 32 GiB and maximum of 131072 GiB for SSD read cache size for every 4,000 MB/s of throughput capacity provisioned.</p>"
+        }
+      },
+      "documentation":"<p> The configuration for the optional provisioned SSD read cache on Amazon FSx for Lustre file systems that use the Intelligent-Tiering storage class. </p>"
+    },
+    "LustreReadCacheSizingMode":{
+      "type":"string",
+      "enum":[
+        "NO_CACHE",
+        "USER_PROVISIONED",
+        "PROPORTIONAL_TO_THROUGHPUT_CAPACITY"
+      ]
+    },
     "LustreRootSquash":{
       "type":"string",
       "max":21,
@@ -4362,6 +4674,13 @@
       "documentation":"<p>A list of network interface IDs.</p>",
       "max":50
     },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "DUAL"
+      ]
+    },
     "NextToken":{
       "type":"string",
       "documentation":"<p>(Optional) Opaque pagination token returned from a previous operation (String). If present, this token indicates from what point you can continue processing the request, where the previous <code>NextToken</code> value left off.</p>",
@@ -4412,7 +4731,7 @@
         },
         "EndpointIpAddressRange":{
           "shape":"IpAddressRange",
-          "documentation":"<p>(Multi-AZ only) Specifies the IP address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API, Amazon FSx selects an unused IP address range for you from the 198.19.* range. By default in the Amazon FSx console, Amazon FSx chooses the last 64 IP addresses from the VPC’s primary CIDR range to use as the endpoint IP address range for the file system. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables.</p>"
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv4 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API, Amazon FSx selects an unused IP address range for you from the 198.19.* range. By default in the Amazon FSx console, Amazon FSx chooses the last 64 IP addresses from the VPC’s primary CIDR range to use as the endpoint IP address range for the file system. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables.</p>"
         },
         "Endpoints":{
           "shape":"FileSystemEndpoints",
@@ -4440,6 +4759,10 @@
         "ThroughputCapacityPerHAPair":{
           "shape":"ThroughputCapacityPerHAPair",
           "documentation":"<p>Use to choose the throughput capacity per HA pair. When the value of <code>HAPairs</code> is equal to 1, the value of <code>ThroughputCapacityPerHAPair</code> is the total throughput for the file system.</p> <p>This field and <code>ThroughputCapacity</code> cannot be defined in the same API call, but one is required.</p> <p>This field and <code>ThroughputCapacity</code> are the same for file systems with one HA pair.</p> <ul> <li> <p>For <code>SINGLE_AZ_1</code> and <code>MULTI_AZ_1</code> file systems, valid values are 128, 256, 512, 1024, 2048, or 4096 MBps.</p> </li> <li> <p>For <code>SINGLE_AZ_2</code>, valid values are 1536, 3072, or 6144 MBps.</p> </li> <li> <p>For <code>MULTI_AZ_2</code>, valid values are 384, 768, 1536, 3072, or 6144 MBps.</p> </li> </ul> <p>Amazon FSx responds with an HTTP status code 400 (Bad Request) for the following conditions:</p> <ul> <li> <p>The value of <code>ThroughputCapacity</code> and <code>ThroughputCapacityPerHAPair</code> are not the same value.</p> </li> <li> <p>The value of deployment type is <code>SINGLE_AZ_2</code> and <code>ThroughputCapacity</code> / <code>ThroughputCapacityPerHAPair</code> is not a valid HA pair (a value between 1 and 12).</p> </li> <li> <p>The value of <code>ThroughputCapacityPerHAPair</code> is not a valid value.</p> </li> </ul>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         }
       },
       "documentation":"<p>Configuration for the FSx for NetApp ONTAP file system.</p>"
@@ -4640,7 +4963,11 @@
         },
         "EndpointIpAddressRange":{
           "shape":"IpAddressRange",
-          "documentation":"<p>(Multi-AZ only) Specifies the IP address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /28 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables.</p>"
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv4 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /28 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables.</p>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         },
         "RouteTableIds":{
           "shape":"RouteTableIds",
@@ -4648,7 +4975,11 @@
         },
         "EndpointIpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the endpoint that is used to access data or to manage the file system.</p>"
+          "documentation":"<p>The IPv4 address of the endpoint that is used to access data or to manage the file system.</p>"
+        },
+        "EndpointIpv6Address":{
+          "shape":"IpAddress",
+          "documentation":"<p>The IPv6 address of the endpoint that is used to access data or to manage the file system.</p>"
         },
         "ReadCacheConfiguration":{
           "shape":"OpenZFSReadCacheConfiguration",
@@ -4657,6 +4988,25 @@
       },
       "documentation":"<p>The configuration for the Amazon FSx for OpenZFS file system. </p>"
     },
+    "OpenZFSFileSystemIdentity":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"OpenZFSFileSystemUserType",
+          "documentation":"<p>Specifies the FSx for OpenZFS user identity type, accepts only <code>POSIX</code>.</p>"
+        },
+        "PosixUser":{
+          "shape":"OpenZFSPosixFileSystemUser",
+          "documentation":"<p>Specifies the UID and GIDs of the file system POSIX user.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the file system user identity that will be used for authorizing all file access requests that are made using the S3 access point.</p>"
+    },
+    "OpenZFSFileSystemUserType":{
+      "type":"string",
+      "enum":["POSIX"]
+    },
     "OpenZFSNfsExport":{
       "type":"structure",
       "required":["ClientConfigurations"],
@@ -4696,6 +5046,28 @@
       },
       "documentation":"<p>The snapshot configuration used when creating an Amazon FSx for OpenZFS volume from a snapshot.</p>"
     },
+    "OpenZFSPosixFileSystemUser":{
+      "type":"structure",
+      "required":[
+        "Uid",
+        "Gid"
+      ],
+      "members":{
+        "Uid":{
+          "shape":"FileSystemUID",
+          "documentation":"<p>The UID of the file system user.</p>"
+        },
+        "Gid":{
+          "shape":"FileSystemGID",
+          "documentation":"<p>The GID of the file system user.</p>"
+        },
+        "SecondaryGids":{
+          "shape":"FileSystemSecondaryGIDs",
+          "documentation":"<p>The list of secondary GIDs for the file system user. </p>"
+        }
+      },
+      "documentation":"<p>The FSx for OpenZFS file system user that is used for authorizing all file access requests that are made using the S3 access point.</p>"
+    },
     "OpenZFSQuotaType":{
       "type":"string",
       "enum":[
@@ -4715,7 +5087,7 @@
           "documentation":"<p> Required if <code>SizingMode</code> is set to <code>USER_PROVISIONED</code>. Specifies the size of the file system's SSD read cache, in gibibytes (GiB). </p>"
         }
       },
-      "documentation":"<p> The configuration for the optional provisioned SSD read cache on file systems that use the Intelligent-Tiering storage class. </p>"
+      "documentation":"<p> The configuration for the optional provisioned SSD read cache on Amazon FSx for OpenZFS file systems that use the Intelligent-Tiering storage class. </p>"
     },
     "OpenZFSReadCacheSizingMode":{
       "type":"string",
@@ -4770,7 +5142,7 @@
         },
         "StorageCapacityQuotaGiB":{
           "shape":"IntegerNoMax",
-          "documentation":"<p>The maximum amount of storage in gibibtyes (GiB) that the volume can use from its parent. You can specify a quota larger than the storage on the parent volume.</p>"
+          "documentation":"<p>The maximum amount of storage in gibibytes (GiB) that the volume can use from its parent. You can specify a quota larger than the storage on the parent volume.</p>"
         },
         "RecordSizeKiB":{
           "shape":"IntegerRecordSizeKiB",
@@ -5049,6 +5421,158 @@
       "member":{"shape":"RouteTableId"},
       "max":50
     },
+    "S3AccessPoint":{
+      "type":"structure",
+      "members":{
+        "ResourceARN":{
+          "shape":"GeneralARN",
+          "documentation":"<p>he S3 access point's ARN.</p>"
+        },
+        "Alias":{
+          "shape":"S3AccessPointAlias",
+          "documentation":"<p>The S3 access point's alias.</p>"
+        },
+        "VpcConfiguration":{
+          "shape":"S3AccessPointVpcConfiguration",
+          "documentation":"<p>The S3 access point's virtual private cloud (VPC) configuration.</p>"
+        }
+      },
+      "documentation":"<p>Describes the S3 access point configuration of the S3 access point attachment.</p>"
+    },
+    "S3AccessPointAlias":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"^[0-9a-z\\\\-]{1,63}"
+    },
+    "S3AccessPointAttachment":{
+      "type":"structure",
+      "members":{
+        "Lifecycle":{
+          "shape":"S3AccessPointAttachmentLifecycle",
+          "documentation":"<p>The lifecycle status of the S3 access point attachment. The lifecycle can have the following values:</p> <ul> <li> <p>AVAILABLE - the S3 access point attachment is available for use</p> </li> <li> <p>CREATING - Amazon FSx is creating the S3 access point and attachment</p> </li> <li> <p>DELETING - Amazon FSx is deleting the S3 access point and attachment</p> </li> <li> <p>FAILED - The S3 access point attachment is in a failed state. Delete and detach the S3 access point attachment, and create a new one.</p> </li> <li> <p>UPDATING - Amazon FSx is updating the S3 access point attachment</p> </li> </ul>"
+        },
+        "LifecycleTransitionReason":{"shape":"LifecycleTransitionReason"},
+        "CreationTime":{"shape":"CreationTime"},
+        "Name":{
+          "shape":"S3AccessPointAttachmentName",
+          "documentation":"<p>The name of the S3 access point attachment; also used for the name of the S3 access point.</p>"
+        },
+        "Type":{
+          "shape":"S3AccessPointAttachmentType",
+          "documentation":"<p>The type of Amazon FSx volume that the S3 access point is attached to. </p>"
+        },
+        "OpenZFSConfiguration":{
+          "shape":"S3AccessPointOpenZFSConfiguration",
+          "documentation":"<p>The OpenZFSConfiguration of the S3 access point attachment.</p>"
+        },
+        "S3AccessPoint":{
+          "shape":"S3AccessPoint",
+          "documentation":"<p>The S3 access point configuration of the S3 access point attachment.</p>"
+        }
+      },
+      "documentation":"<p>An S3 access point attached to an Amazon FSx volume.</p>"
+    },
+    "S3AccessPointAttachmentLifecycle":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "CREATING",
+        "DELETING",
+        "UPDATING",
+        "FAILED"
+      ]
+    },
+    "S3AccessPointAttachmentName":{
+      "type":"string",
+      "max":50,
+      "min":3,
+      "pattern":"^(?=[a-z0-9])[a-z0-9-]{1,48}[a-z0-9]$"
+    },
+    "S3AccessPointAttachmentNames":{
+      "type":"list",
+      "member":{"shape":"S3AccessPointAttachmentName"},
+      "max":50
+    },
+    "S3AccessPointAttachmentNotFound":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The access point specified was not found.</p>",
+      "exception":true
+    },
+    "S3AccessPointAttachmentType":{
+      "type":"string",
+      "enum":["OPENZFS"]
+    },
+    "S3AccessPointAttachments":{
+      "type":"list",
+      "member":{"shape":"S3AccessPointAttachment"},
+      "max":1000
+    },
+    "S3AccessPointAttachmentsFilter":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"S3AccessPointAttachmentsFilterName",
+          "documentation":"<p>The name of the filter.</p>"
+        },
+        "Values":{
+          "shape":"S3AccessPointAttachmentsFilterValues",
+          "documentation":"<p>The values of the filter.</p>"
+        }
+      },
+      "documentation":"<p>A set of Name and Values pairs used to view a select set of S3 access point attachments.</p>"
+    },
+    "S3AccessPointAttachmentsFilterName":{
+      "type":"string",
+      "enum":[
+        "file-system-id",
+        "volume-id",
+        "type"
+      ]
+    },
+    "S3AccessPointAttachmentsFilterValue":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"^[0-9a-zA-Z\\*\\.\\\\/\\?\\-\\_]*$"
+    },
+    "S3AccessPointAttachmentsFilterValues":{
+      "type":"list",
+      "member":{"shape":"S3AccessPointAttachmentsFilterValue"},
+      "max":20
+    },
+    "S3AccessPointAttachmentsFilters":{
+      "type":"list",
+      "member":{"shape":"S3AccessPointAttachmentsFilter"},
+      "max":2
+    },
+    "S3AccessPointOpenZFSConfiguration":{
+      "type":"structure",
+      "members":{
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>The ID of the FSx for OpenZFS volume that the S3 access point is attached to.</p>"
+        },
+        "FileSystemIdentity":{
+          "shape":"OpenZFSFileSystemIdentity",
+          "documentation":"<p>The file system identity used to authorize file access requests made using the S3 access point.</p>"
+        }
+      },
+      "documentation":"<p>Describes the FSx for OpenZFS attachment configuration of an S3 access point attachment.</p>"
+    },
+    "S3AccessPointVpcConfiguration":{
+      "type":"structure",
+      "members":{
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>Specifies the virtual private cloud (VPC) for the S3 access point VPC configuration, if one exists.</p>"
+        }
+      },
+      "documentation":"<p>If included, Amazon S3 restricts access to this access point to requests from the specified virtual private cloud (VPC).</p>"
+    },
     "S3DataRepositoryConfiguration":{
       "type":"structure",
       "members":{
@@ -5106,6 +5630,10 @@
         "DnsIps":{
           "shape":"DnsIps",
           "documentation":"<p>A list of up to three IP addresses of DNS servers or domain controllers in the self-managed AD directory.</p>"
+        },
+        "DomainJoinServiceAccountSecret":{
+          "shape":"CustomerSecretsManagerARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the service account credentials used to join the file system to your self-managed Active Directory domain.</p>"
         }
       },
       "documentation":"<p>The configuration of the self-managed Microsoft Active Directory (AD) directory to which the Windows File Server or ONTAP storage virtual machine (SVM) instance is joined.</p>"
@@ -5114,8 +5642,6 @@
       "type":"structure",
       "required":[
         "DomainName",
-        "UserName",
-        "Password",
         "DnsIps"
       ],
       "members":{
@@ -5142,6 +5668,10 @@
         "DnsIps":{
           "shape":"DnsIps",
           "documentation":"<p>A list of up to three IP addresses of DNS servers or domain controllers in the self-managed AD directory. </p>"
+        },
+        "DomainJoinServiceAccountSecret":{
+          "shape":"CustomerSecretsManagerARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the self-managed Active Directory domain join service account credentials. When provided, Amazon FSx uses the credentials stored in this secret to join the file system to your self-managed Active Directory domain.</p> <p>The secret must contain two key-value pairs:</p> <ul> <li> <p> <code>CUSTOMER_MANAGED_ACTIVE_DIRECTORY_USERNAME</code> - The username for the service account</p> </li> <li> <p> <code>CUSTOMER_MANAGED_ACTIVE_DIRECTORY_PASSWORD</code> - The password for the service account</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/self-manage-prereqs.html\"> Using Amazon FSx for Windows with your self-managed Microsoft Active Directory</a> or <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/self-manage-prereqs.html\"> Using Amazon FSx for ONTAP with your self-managed Microsoft Active Directory</a>.</p>"
         }
       },
       "documentation":"<p>The configuration that Amazon FSx uses to join a FSx for Windows File Server file system or an FSx for ONTAP storage virtual machine (SVM) to a self-managed (including on-premises) Microsoft Active Directory (AD) directory. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/self-managed-AD.html\"> Using Amazon FSx for Windows with your self-managed Microsoft Active Directory</a> or <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-svms.html\">Managing FSx for ONTAP SVMs</a>.</p>"
@@ -5172,6 +5702,10 @@
         "FileSystemAdministratorsGroup":{
           "shape":"FileSystemAdministratorsGroupName",
           "documentation":"<p>For FSx for ONTAP file systems only - Specifies the updated name of the self-managed Active Directory domain group whose members are granted administrative privileges for the Amazon FSx resource.</p>"
+        },
+        "DomainJoinServiceAccountSecret":{
+          "shape":"CustomerSecretsManagerARN",
+          "documentation":"<p>Specifies the updated Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the self-managed Active Directory domain join service account credentials. Amazon FSx uses this account to join to your self-managed Active Directory domain.</p>"
         }
       },
       "documentation":"<p>Specifies changes you are making to the self-managed Microsoft Active Directory configuration to which an FSx for Windows File Server file system or an FSx for ONTAP SVM is joined.</p>"
@@ -5421,7 +5955,9 @@
         "PENDING",
         "COMPLETED",
         "UPDATED_OPTIMIZING",
-        "OPTIMIZING"
+        "OPTIMIZING",
+        "PAUSED",
+        "CANCELLED"
       ]
     },
     "StorageCapacity":{
@@ -5613,7 +6149,11 @@
         "DNSName":{"shape":"DNSName"},
         "IpAddresses":{
           "shape":"OntapEndpointIpAddresses",
-          "documentation":"<p>The SVM endpoint's IP addresses.</p>"
+          "documentation":"<p>The SVM endpoint's IPv4 addresses.</p>"
+        },
+        "Ipv6Addresses":{
+          "shape":"OntapEndpointIpAddresses",
+          "documentation":"<p>The SVM endpoint's IPv6 addresses.</p>"
         }
       },
       "documentation":"<p>An Amazon FSx for NetApp ONTAP storage virtual machine (SVM) has four endpoints that are used to access data or to manage the SVM using the NetApp ONTAP CLI, REST API, or NetApp CloudManager. They are the <code>Iscsi</code>, <code>Management</code>, <code>Nfs</code>, and <code>Smb</code> endpoints.</p>"
@@ -5692,8 +6232,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response object for the <code>TagResource</code> operation.</p>"
     },
     "TagValue":{
@@ -5721,6 +6260,11 @@
       "member":{"shape":"TaskId"},
       "max":50
     },
+    "ThroughputCapacityMbps":{
+      "type":"integer",
+      "max":2000000,
+      "min":4000
+    },
     "ThroughputCapacityPerHAPair":{
       "type":"integer",
       "max":6144,
@@ -5749,6 +6293,18 @@
         "NONE"
       ]
     },
+    "TooManyAccessPoints":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>An error code indicating that you have reached the maximum number of S3 access points attachments allowed for your account in this Amazon Web Services Region, or for the file system.</p>"
+        },
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>You have reached the maximum number of S3 access points attachments allowed for your account in this Amazon Web Services Region, or for the file system. For more information, or to request an increase, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/limits.html\">Service quotas on FSx resources</a> in the FSx for OpenZFS User Guide.</p>",
+      "exception":true
+    },
     "TotalConstituents":{
       "type":"integer",
       "max":200,
@@ -5796,8 +6352,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response object for <code>UntagResource</code> action.</p>"
     },
     "UpdateDataRepositoryAssociationRequest":{
@@ -5900,6 +6455,14 @@
         "MetadataConfiguration":{
           "shape":"UpdateFileSystemLustreMetadataConfiguration",
           "documentation":"<p>The Lustre metadata performance configuration for an Amazon FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type. When this configuration is enabled, the file system supports increasing metadata performance.</p>"
+        },
+        "ThroughputCapacity":{
+          "shape":"ThroughputCapacityMbps",
+          "documentation":"<p>The throughput of an Amazon FSx for Lustre file system using an Intelligent-Tiering storage class, measured in megabytes per second (MBps). You can only increase your file system's throughput. Valid values are 4000 MBps or multiples of 4000 MBps.</p>"
+        },
+        "DataReadCacheConfiguration":{
+          "shape":"LustreReadCacheConfiguration",
+          "documentation":"<p>Specifies the optional provisioned SSD read cache on Amazon FSx for Lustre file systems that use the Intelligent-Tiering storage class.</p>"
         }
       },
       "documentation":"<p>The configuration object for Amazon FSx for Lustre file systems used in the <code>UpdateFileSystem</code> operation.</p>"
@@ -5909,11 +6472,11 @@
       "members":{
         "Iops":{
           "shape":"MetadataIops",
-          "documentation":"<p>(USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for your file system. Valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p> <p>The value you provide must be greater than or equal to the current number of Metadata IOPS provisioned for the file system.</p>"
+          "documentation":"<p>(USER_PROVISIONED mode only) Specifies the number of Metadata IOPS to provision for your file system.</p> <ul> <li> <p>For SSD file systems, valid values are <code>1500</code>, <code>3000</code>, <code>6000</code>, <code>12000</code>, and multiples of <code>12000</code> up to a maximum of <code>192000</code>.</p> </li> <li> <p>For Intelligent-Tiering file systems, valid values are <code>6000</code> and <code>12000</code>.</p> </li> </ul> <p>The value you provide must be greater than or equal to the current number of Metadata IOPS provisioned for the file system.</p>"
         },
         "Mode":{
           "shape":"MetadataConfigurationMode",
-          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type.</p> <ul> <li> <p>To increase the Metadata IOPS or to switch from AUTOMATIC mode, specify <code>USER_PROVISIONED</code> as the value for this parameter. Then use the Iops parameter to provide a Metadata IOPS value that is greater than or equal to the current number of Metadata IOPS provisioned for the file system.</p> </li> <li> <p>To switch from USER_PROVISIONED mode, specify <code>AUTOMATIC</code> as the value for this parameter, but do not input a value for Iops.</p> <note> <p>If you request to switch from USER_PROVISIONED to AUTOMATIC mode and the current Metadata IOPS value is greater than the automated default, FSx for Lustre rejects the request because downscaling Metadata IOPS is not supported.</p> </note> </li> </ul>"
+          "documentation":"<p>The metadata configuration mode for provisioning Metadata IOPS for an FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type.</p> <ul> <li> <p>To increase the Metadata IOPS or to switch an SSD file system from AUTOMATIC, specify <code>USER_PROVISIONED</code> as the value for this parameter. Then use the Iops parameter to provide a Metadata IOPS value that is greater than or equal to the current number of Metadata IOPS provisioned for the file system.</p> </li> <li> <p>To switch from USER_PROVISIONED mode on an SSD file system, specify <code>AUTOMATIC</code> as the value for this parameter, but do not input a value for Iops.</p> <note> <ul> <li> <p>If you request to switch from USER_PROVISIONED to AUTOMATIC mode and the current Metadata IOPS value is greater than the automated default, FSx for Lustre rejects the request because downscaling Metadata IOPS is not supported.</p> </li> <li> <p>AUTOMATIC mode is not supported on Intelligent-Tiering file systems. For Intelligent-Tiering file systems, use USER_PROVISIONED mode.</p> </li> </ul> </note> </li> </ul>"
         }
       },
       "documentation":"<p>The Lustre metadata performance configuration update for an Amazon FSx for Lustre file system using a <code>PERSISTENT_2</code> deployment type. You can request an increase in your file system's Metadata IOPS and/or switch your file system's metadata configuration mode. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-metadata-performance.html\">Managing metadata performance</a> in the <i>Amazon FSx for Lustre User Guide</i>.</p>"
@@ -5925,12 +6488,12 @@
         "DailyAutomaticBackupStartTime":{"shape":"DailyTime"},
         "FsxAdminPassword":{
           "shape":"AdminPassword",
-          "documentation":"<p>Update the password for the <code>fsxadmin</code> user by entering a new password. You use the <code>fsxadmin</code> user to access the NetApp ONTAP CLI and REST API to manage your file system resources. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-resources-ontap-apps.html\">Managing resources using NetApp Applicaton</a>.</p>"
+          "documentation":"<p>Update the password for the <code>fsxadmin</code> user by entering a new password. You use the <code>fsxadmin</code> user to access the NetApp ONTAP CLI and REST API to manage your file system resources. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-resources-ontap-apps.html\">Managing resources using NetApp Application</a>.</p>"
         },
         "WeeklyMaintenanceStartTime":{"shape":"WeeklyTime"},
         "DiskIopsConfiguration":{
           "shape":"DiskIopsConfiguration",
-          "documentation":"<p>The SSD IOPS (input output operations per second) configuration for an Amazon FSx for NetApp ONTAP file system. The default is 3 IOPS per GB of storage capacity, but you can provision additional IOPS per GB of storage. The configuration consists of an IOPS mode (<code>AUTOMATIC</code> or <code>USER_PROVISIONED</code>), and in the case of <code>USER_PROVISIONED</code> IOPS, the total number of SSD IOPS provisioned. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/increase-primary-storage.html\">Updating SSD storage capacity and IOPS</a>.</p>"
+          "documentation":"<p>The SSD IOPS (input output operations per second) configuration for an Amazon FSx for NetApp ONTAP file system. The default is 3 IOPS per GB of storage capacity, but you can provision additional IOPS per GB of storage. The configuration consists of an IOPS mode (<code>AUTOMATIC</code> or <code>USER_PROVISIONED</code>), and in the case of <code>USER_PROVISIONED</code> IOPS, the total number of SSD IOPS provisioned. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/storage-capacity-and-IOPS.html\">File system storage capacity and IOPS</a>.</p>"
         },
         "ThroughputCapacity":{
           "shape":"MegabytesPerSecond",
@@ -5951,6 +6514,10 @@
         "HAPairs":{
           "shape":"HAPairs",
           "documentation":"<p>Use to update the number of high-availability (HA) pairs for a second-generation single-AZ file system. If you increase the number of HA pairs for your file system, you must specify proportional increases for <code>StorageCapacity</code>, <code>Iops</code>, and <code>ThroughputCapacity</code>. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/administering-file-systems.html#HA-pairs\">High-availability (HA) pairs</a> in the FSx for ONTAP user guide. Block storage protocol support (iSCSI and NVMe over TCP) is disabled on file systems with more than 6 HA pairs. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/supported-fsx-clients.html#using-block-storage\">Using block storage protocols</a>.</p>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         }
       },
       "documentation":"<p>The configuration updates for an Amazon FSx for NetApp ONTAP file system.</p>"
@@ -5985,6 +6552,10 @@
         "ReadCacheConfiguration":{
           "shape":"OpenZFSReadCacheConfiguration",
           "documentation":"<p> The configuration for the optional provisioned SSD read cache on file systems that use the Intelligent-Tiering storage class.</p>"
+        },
+        "EndpointIpv6AddressRange":{
+          "shape":"Ipv6AddressRange",
+          "documentation":"<p>(Multi-AZ only) Specifies the IPv6 address range in which the endpoints to access your file system will be created. By default in the Amazon FSx API and Amazon FSx console, Amazon FSx selects an available /118 IP address range for you from one of the VPC's CIDR ranges. You can have overlapping endpoint IP addresses for file systems deployed in the same VPC/route tables, as long as they don't overlap with any subnet.</p>"
         }
       },
       "documentation":"<p>The configuration updates for an Amazon FSx for OpenZFS file system.</p>"
@@ -6004,7 +6575,7 @@
         },
         "StorageCapacity":{
           "shape":"StorageCapacity",
-          "documentation":"<p>Use this parameter to increase the storage capacity of an FSx for Windows File Server, FSx for Lustre, FSx for OpenZFS, or FSx for ONTAP file system. Specifies the storage capacity target value, in GiB, to increase the storage capacity for the file system that you're updating. </p> <note> <p>You can't make a storage capacity increase request if there is an existing storage capacity increase request in progress.</p> </note> <p>For Lustre file systems, the storage capacity target value can be the following:</p> <ul> <li> <p>For <code>SCRATCH_2</code>, <code>PERSISTENT_1</code>, and <code>PERSISTENT_2 SSD</code> deployment types, valid values are in multiples of 2400 GiB. The value must be greater than the current storage capacity.</p> </li> <li> <p>For <code>PERSISTENT HDD</code> file systems, valid values are multiples of 6000 GiB for 12-MBps throughput per TiB file systems and multiples of 1800 GiB for 40-MBps throughput per TiB file systems. The values must be greater than the current storage capacity.</p> </li> <li> <p>For <code>SCRATCH_1</code> file systems, you can't increase the storage capacity.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html\">Managing storage and throughput capacity</a> in the <i>FSx for Lustre User Guide</i>.</p> <p>For FSx for OpenZFS file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/managing-storage-capacity.html\">Managing storage capacity</a> in the <i>FSx for OpenZFS User Guide</i>.</p> <p>For Windows file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. To increase storage capacity, the file system must have at least 16 MBps of throughput capacity. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-storage-capacity.html\">Managing storage capacity</a> in the <i>Amazon FSxfor Windows File Server User Guide</i>.</p> <p>For ONTAP file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/managing-storage-capacity.html\">Managing storage capacity and provisioned IOPS</a> in the <i>Amazon FSx for NetApp ONTAP User Guide</i>.</p>"
+          "documentation":"<p>Use this parameter to increase the storage capacity of an FSx for Windows File Server, FSx for Lustre, FSx for OpenZFS, or FSx for ONTAP file system. For second-generation FSx for ONTAP file systems, you can also decrease the storage capacity. Specifies the storage capacity target value, in GiB, for the file system that you're updating. </p> <note> <p>You can't make a storage capacity increase request if there is an existing storage capacity increase request in progress.</p> </note> <p>For Lustre file systems, the storage capacity target value can be the following:</p> <ul> <li> <p>For <code>SCRATCH_2</code>, <code>PERSISTENT_1</code>, and <code>PERSISTENT_2 SSD</code> deployment types, valid values are in multiples of 2400 GiB. The value must be greater than the current storage capacity.</p> </li> <li> <p>For <code>PERSISTENT HDD</code> file systems, valid values are multiples of 6000 GiB for 12-MBps throughput per TiB file systems and multiples of 1800 GiB for 40-MBps throughput per TiB file systems. The values must be greater than the current storage capacity.</p> </li> <li> <p>For <code>SCRATCH_1</code> file systems, you can't increase the storage capacity.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html\">Managing storage and throughput capacity</a> in the <i>FSx for Lustre User Guide</i>.</p> <p>For FSx for OpenZFS file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/managing-storage-capacity.html\">Managing storage capacity</a> in the <i>FSx for OpenZFS User Guide</i>.</p> <p>For Windows file systems, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. To increase storage capacity, the file system must have at least 16 MBps of throughput capacity. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/managing-storage-capacity.html\">Managing storage capacity</a> in the <i>Amazon FSxfor Windows File Server User Guide</i>.</p> <p>For ONTAP file systems, when increasing storage capacity, the storage capacity target value must be at least 10 percent greater than the current storage capacity value. When decreasing storage capacity on second-generation file systems, the target value must be at least 9 percent smaller than the current SSD storage capacity. For more information, see <a href=\"https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/storage-capacity-and-IOPS.html\">File system storage capacity and IOPS</a> in the Amazon FSx for NetApp ONTAP User Guide.</p>"
         },
         "WindowsConfiguration":{
           "shape":"UpdateFileSystemWindowsConfiguration",
@@ -6016,7 +6587,15 @@
           "shape":"UpdateFileSystemOpenZFSConfiguration",
           "documentation":"<p>The configuration updates for an FSx for OpenZFS file system.</p>"
         },
-        "StorageType":{"shape":"StorageType"}
+        "StorageType":{"shape":"StorageType"},
+        "FileSystemTypeVersion":{
+          "shape":"FileSystemTypeVersion",
+          "documentation":"<p>The Lustre version you are updating an FSx for Lustre file system to. Valid values are <code>2.12</code> and <code>2.15</code>. The value you choose must be newer than the file system's current Lustre version.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Changes the network type of an FSx for OpenZFS file system.</p>"
+        }
       },
       "documentation":"<p>The request object for the <code>UpdateFileSystem</code> operation.</p>"
     },
@@ -6471,7 +7050,7 @@
     },
     "WeeklyTime":{
       "type":"string",
-      "documentation":"<p>A recurring weekly time, in the format <code>D:HH:MM</code>. </p> <p> <code>D</code> is the day of the week, for which 1 represents Monday and 7 represents Sunday. For further details, see <a href=\"https://en.wikipedia.org/wiki/ISO_week_date\">the ISO-8601 spec as described on Wikipedia</a>.</p> <p> <code>HH</code> is the zero-padded hour of the day (0-23), and <code>MM</code> is the zero-padded minute of the hour. </p> <p>For example, <code>1:05:00</code> specifies maintenance at 5 AM Monday.</p>",
+      "documentation":"<p>The preferred start time to perform weekly maintenance, formatted d:HH:MM in the UTC time zone, where d is the weekday number, from 1 through 7, beginning with Monday and ending with Sunday.</p> <p>For example, <code>1:05:00</code> specifies maintenance at 5 AM Monday.</p>",
       "max":7,
       "min":7,
       "pattern":"^[1-7]:([01]\\d|2[0-3]):?([0-5]\\d)$"
@@ -6559,7 +7138,7 @@
         },
         "PreferredFileServerIp":{
           "shape":"IpAddress",
-          "documentation":"<p>For <code>MULTI_AZ_1</code> deployment types, the IP address of the primary, or preferred, file server.</p> <p>Use this IP address when mounting the file system on Linux SMB clients or Windows SMB clients that are not joined to a Microsoft Active Directory. Applicable for all Windows file system deployment types. This IP address is temporarily unavailable when the file system is undergoing maintenance. For Linux and Windows SMB clients that are joined to an Active Directory, use the file system's DNSName instead. For more information on mapping and mounting file shares, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/accessing-file-shares.html\">Accessing File Shares</a>.</p>"
+          "documentation":"<p>For <code>MULTI_AZ_1</code> deployment types, the IPv4 address of the primary, or preferred, file server.</p> <p>Use this IP address when mounting the file system on Linux SMB clients or Windows SMB clients that are not joined to a Microsoft Active Directory. Applicable for all Windows file system deployment types. This IPv4 address is temporarily unavailable when the file system is undergoing maintenance. For Linux and Windows SMB clients that are joined to an Active Directory, use the file system's DNSName instead. For more information on mapping and mounting file shares, see <a href=\"https://docs.aws.amazon.com/fsx/latest/WindowsGuide/using-file-shares.html\">Accessing data using file shares</a>.</p>"
         },
         "ThroughputCapacity":{
           "shape":"MegabytesPerSecond",
@@ -6593,6 +7172,10 @@
         "DiskIopsConfiguration":{
           "shape":"DiskIopsConfiguration",
           "documentation":"<p>The SSD IOPS (input/output operations per second) configuration for an Amazon FSx for Windows file system. By default, Amazon FSx automatically provisions 3 IOPS per GiB of storage capacity. You can provision additional IOPS per GiB of storage, up to the maximum limit associated with your chosen throughput capacity.</p>"
+        },
+        "PreferredFileServerIpv6":{
+          "shape":"IpAddress",
+          "documentation":"<p>For MULTI_AZ_1 deployment types, the IPv6 address of the primary, or preferred, file server. Use this IP address when mounting the file system on Linux SMB clients or Windows SMB clients that are not joined to a Microsoft Active Directory. Applicable for all Windows file system deployment types. This IPv6 address is temporarily unavailable when the file system is undergoing maintenance. For Linux and Windows SMB clients that are joined to an Active Directory, use the file system's DNSName instead.</p>"
         }
       },
       "documentation":"<p>The configuration for this Microsoft Windows file system.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gamelift/2015-10-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/gamelift/2015-10-01/service-2.json 2.31.35-1/awscli/botocore/data/gamelift/2015-10-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/gamelift/2015-10-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gamelift/2015-10-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,7 +28,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Registers a player's acceptance or rejection of a proposed FlexMatch match. A matchmaking configuration may require player acceptance; if so, then matches built with that configuration cannot be completed unless all players accept the proposed match within a specified time limit. </p> <p>When FlexMatch builds a match, all the matchmaking tickets involved in the proposed match are placed into status <code>REQUIRES_ACCEPTANCE</code>. This is a trigger for your game to get acceptance from all players in each ticket. Calls to this action are only valid for tickets that are in this status; calls for tickets not in this status result in an error.</p> <p>To register acceptance, specify the ticket ID, one or more players, and an acceptance response. When all players have accepted, Amazon GameLift advances the matchmaking tickets to status <code>PLACING</code>, and attempts to create a new game session for the match. </p> <p>If any player rejects the match, or if acceptances are not received before a specified timeout, the proposed match is dropped. Each matchmaking ticket in the failed match is handled as follows: </p> <ul> <li> <p>If the ticket has one or more players who rejected the match or failed to respond, the ticket status is set <code>CANCELLED</code> and processing is terminated.</p> </li> <li> <p>If all players in the ticket accepted the match, the ticket status is returned to <code>SEARCHING</code> to find a new match. </p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html\"> FlexMatch events</a> (reference)</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Registers a player's acceptance or rejection of a proposed FlexMatch match. A matchmaking configuration may require player acceptance; if so, then matches built with that configuration cannot be completed unless all players accept the proposed match within a specified time limit. </p> <p>When FlexMatch builds a match, all the matchmaking tickets involved in the proposed match are placed into status <code>REQUIRES_ACCEPTANCE</code>. This is a trigger for your game to get acceptance from all players in each ticket. Calls to this action are only valid for tickets that are in this status; calls for tickets not in this status result in an error.</p> <p>To register acceptance, specify the ticket ID, one or more players, and an acceptance response. When all players have accepted, Amazon GameLift Servers advances the matchmaking tickets to status <code>PLACING</code>, and attempts to create a new game session for the match. </p> <p>If any player rejects the match, or if acceptances are not received before a specified timeout, the proposed match is dropped. Each matchmaking ticket in the failed match is handled as follows: </p> <ul> <li> <p>If the ticket has one or more players who rejected the match or failed to respond, the ticket status is set <code>CANCELLED</code> and processing is terminated.</p> </li> <li> <p>If all players in the ticket accepted the match, the ticket status is returned to <code>SEARCHING</code> to find a new match. </p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html\"> FlexMatch events</a> (reference)</p>"
     },
     "ClaimGameServer":{
       "name":"ClaimGameServer",
@@ -46,7 +46,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Locates an available game server and temporarily reserves it to host gameplay and players. This operation is called from a game client or client service (such as a matchmaker) to request hosting resources for a new game session. In response, Amazon GameLift FleetIQ locates an available game server, places it in <code>CLAIMED</code> status for 60 seconds, and returns connection information that players can use to connect to the game server. </p> <p>To claim a game server, identify a game server group. You can also specify a game server ID, although this approach bypasses Amazon GameLift FleetIQ placement optimization. Optionally, include game data to pass to the game server at the start of a game session, such as a game map or player information. Add filter options to further restrict how a game server is chosen, such as only allowing game servers on <code>ACTIVE</code> instances to be claimed.</p> <p>When a game server is successfully claimed, connection information is returned. A claimed game server's utilization status remains <code>AVAILABLE</code> while the claim status is set to <code>CLAIMED</code> for up to 60 seconds. This time period gives the game server time to update its status to <code>UTILIZED</code> after players join. If the game server's status is not updated within 60 seconds, the game server reverts to unclaimed status and is available to be claimed by another request. The claim time period is a fixed value and is not configurable.</p> <p>If you try to claim a specific game server, this request will fail in the following cases:</p> <ul> <li> <p>If the game server utilization status is <code>UTILIZED</code>.</p> </li> <li> <p>If the game server claim status is <code>CLAIMED</code>.</p> </li> <li> <p>If the game server is running on an instance in <code>DRAINING</code> status and the provided filter option does not allow placing on <code>DRAINING</code> instances.</p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Locates an available game server and temporarily reserves it to host gameplay and players. This operation is called from a game client or client service (such as a matchmaker) to request hosting resources for a new game session. In response, Amazon GameLift Servers FleetIQ locates an available game server, places it in <code>CLAIMED</code> status for 60 seconds, and returns connection information that players can use to connect to the game server. </p> <p>To claim a game server, identify a game server group. You can also specify a game server ID, although this approach bypasses Amazon GameLift Servers FleetIQ placement optimization. Optionally, include game data to pass to the game server at the start of a game session, such as a game map or player information. Add filter options to further restrict how a game server is chosen, such as only allowing game servers on <code>ACTIVE</code> instances to be claimed.</p> <p>When a game server is successfully claimed, connection information is returned. A claimed game server's utilization status remains <code>AVAILABLE</code> while the claim status is set to <code>CLAIMED</code> for up to 60 seconds. This time period gives the game server time to update its status to <code>UTILIZED</code> after players join. If the game server's status is not updated within 60 seconds, the game server reverts to unclaimed status and is available to be claimed by another request. The claim time period is a fixed value and is not configurable.</p> <p>If you try to claim a specific game server, this request will fail in the following cases:</p> <ul> <li> <p>If the game server utilization status is <code>UTILIZED</code>.</p> </li> <li> <p>If the game server claim status is <code>CLAIMED</code>.</p> </li> <li> <p>If the game server is running on an instance in <code>DRAINING</code> status and the provided filter option does not allow placing on <code>DRAINING</code> instances.</p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "CreateAlias":{
       "name":"CreateAlias",
@@ -64,7 +64,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Creates an alias for a fleet. In most situations, you can use an alias ID in place of a fleet ID. An alias provides a level of abstraction for a fleet that is useful when redirecting player traffic from one fleet to another, such as when updating your game build. </p> <p>Amazon GameLift supports two types of routing strategies for aliases: simple and terminal. A simple alias points to an active fleet. A terminal alias is used to display messaging or link to a URL instead of routing players to an active fleet. For example, you might use a terminal alias when a game version is no longer supported and you want to direct players to an upgrade site. </p> <p>To create a fleet alias, specify an alias name, routing strategy, and optional description. Each simple alias can point to only one fleet, but a fleet can have multiple aliases. If successful, a new alias record is returned, including an alias ID and an ARN. You can reassign an alias to another fleet by calling <code>UpdateAlias</code>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Creates an alias for a fleet. In most situations, you can use an alias ID in place of a fleet ID. An alias provides a level of abstraction for a fleet that is useful when redirecting player traffic from one fleet to another, such as when updating your game build. </p> <p>Amazon GameLift Servers supports two types of routing strategies for aliases: simple and terminal. A simple alias points to an active fleet. A terminal alias is used to display messaging or link to a URL instead of routing players to an active fleet. For example, you might use a terminal alias when a game version is no longer supported and you want to direct players to an upgrade site. </p> <p>To create a fleet alias, specify an alias name, routing strategy, and optional description. Each simple alias can point to only one fleet, but a fleet can have multiple aliases. If successful, a new alias record is returned, including an alias ID and an ARN. You can reassign an alias to another fleet by calling <code>UpdateAlias</code>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateBuild":{
       "name":"CreateBuild",
@@ -81,7 +81,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a new Amazon GameLift build resource for your game server binary files. Combine game server binaries into a zip file for use with Amazon GameLift. </p> <important> <p>When setting up a new game build for Amazon GameLift, we recommend using the CLI command <b> <a href=\"https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html\">upload-build</a> </b>. This helper command combines two tasks: (1) it uploads your build files from a file directory to an Amazon GameLift Amazon S3 location, and (2) it creates a new build resource.</p> </important> <p>You can use the <code>CreateBuild</code> operation in the following scenarios:</p> <ul> <li> <p>Create a new game build with build files that are in an Amazon S3 location under an Amazon Web Services account that you control. To use this option, you give Amazon GameLift access to the Amazon S3 bucket. With permissions in place, specify a build name, operating system, and the Amazon S3 storage location of your game build.</p> </li> <li> <p>Upload your build files to a Amazon GameLift Amazon S3 location. To use this option, specify a build name and operating system. This operation creates a new build resource and also returns an Amazon S3 location with temporary access credentials. Use the credentials to manually upload your build files to the specified Amazon S3 location. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html\">Uploading Objects</a> in the <i>Amazon S3 Developer Guide</i>. After you upload build files to the Amazon GameLift Amazon S3 location, you can't update them. </p> </li> </ul> <p>If successful, this operation creates a new build resource with a unique build ID and places it in <code>INITIALIZED</code> status. A build must be in <code>READY</code> status before you can create fleets with it.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\">Uploading Your Game</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in Amazon S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere</p> <p>Creates a new Amazon GameLift Servers build resource for your game server binary files. Combine game server binaries into a zip file for use with Amazon GameLift Servers. </p> <important> <p>When setting up a new game build for Amazon GameLift Servers, we recommend using the CLI command <b> <a href=\"https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html\">upload-build</a> </b>. This helper command combines two tasks: (1) it uploads your build files from a file directory to an Amazon GameLift Servers Amazon S3 location, and (2) it creates a new build resource.</p> </important> <p>You can use the <code>CreateBuild</code> operation in the following scenarios:</p> <ul> <li> <p>Create a new game build with build files that are in an Amazon S3 location under an Amazon Web Services account that you control. To use this option, you give Amazon GameLift Servers access to the Amazon S3 bucket. With permissions in place, specify a build name, operating system, and the Amazon S3 storage location of your game build.</p> </li> <li> <p>Upload your build files to a Amazon GameLift Servers Amazon S3 location. To use this option, specify a build name and operating system. This operation creates a new build resource and also returns an Amazon S3 location with temporary access credentials. Use the credentials to manually upload your build files to the specified Amazon S3 location. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html\">Uploading Objects</a> in the <i>Amazon S3 Developer Guide</i>. After you upload build files to the Amazon GameLift Servers Amazon S3 location, you can't update them. </p> </li> </ul> <p>If successful, this operation creates a new build resource with a unique build ID and places it in <code>INITIALIZED</code> status. A build must be in <code>READY</code> status before you can create fleets with it.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\">Uploading Your Game</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in Amazon S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateContainerFleet":{
       "name":"CreateContainerFleet",
@@ -100,7 +100,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Creates a managed fleet of Amazon Elastic Compute Cloud (Amazon EC2) instances to host your containerized game servers. Use this operation to define how to deploy a container architecture onto each fleet instance and configure fleet settings. You can create a container fleet in any Amazon Web Services Regions that Amazon GameLift supports for multi-location fleets. A container fleet can be deployed to a single location or multiple locations. Container fleets are deployed with Amazon Linux 2023 as the instance operating system.</p> <p>Define the fleet's container architecture using container group definitions. Each fleet can have one of the following container group types:</p> <ul> <li> <p>The game server container group runs your game server build and dependent software. Amazon GameLift deploys one or more replicas of this container group to each fleet instance. The number of replicas depends on the computing capabilities of the fleet instance in use. </p> </li> <li> <p>An optional per-instance container group might be used to run other software that only needs to run once per instance, such as background services, logging, or test processes. One per-instance container group is deployed to each fleet instance. </p> </li> </ul> <p>Each container group can include the definition for one or more containers. A container definition specifies a container image that is stored in an Amazon Elastic Container Registry (Amazon ECR) public or private repository.</p> <p> <b>Request options</b> </p> <p>Use this operation to make the following types of requests. Most fleet settings have default values, so you can create a working fleet with a minimal configuration and default values, which you can customize later.</p> <ul> <li> <p>Create a fleet with no container groups. You can configure a container fleet and then add container group definitions later. In this scenario, no fleet instances are deployed, and the fleet can't host game sessions until you add a game server container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> </ul> </li> <li> <p>Create a fleet with a game server container group. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> <li> <p> <code>GameServerContainerGroupDefinitionName</code> </p> </li> </ul> </li> <li> <p>Create a fleet with a game server container group and a per-instance container group. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> <li> <p> <code>GameServerContainerGroupDefinitionName</code> </p> </li> <li> <p> <code>PerInstanceContainerGroupDefinitionName</code> </p> </li> </ul> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation creates a new container fleet resource, places it in <code>PENDING</code> status, and initiates the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-all.html#fleets-creation-workflow\">fleet creation workflow</a>. For fleets with container groups, this workflow starts a fleet deployment and transitions the status to <code>ACTIVE</code>. Fleets without a container group are placed in <code>CREATED</code> status.</p> <p>You can update most of the properties of a fleet, including container group definitions, and deploy the update across all fleet instances. Use a fleet update to deploy a new game server version update across the container fleet. </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Creates a managed fleet of Amazon Elastic Compute Cloud (Amazon EC2) instances to host your containerized game servers. Use this operation to define how to deploy a container architecture onto each fleet instance and configure fleet settings. You can create a container fleet in any Amazon Web Services Regions that Amazon GameLift Servers supports for multi-location fleets. A container fleet can be deployed to a single location or multiple locations. Container fleets are deployed with Amazon Linux 2023 as the instance operating system.</p> <p>Define the fleet's container architecture using container group definitions. Each fleet can have one of the following container group types:</p> <ul> <li> <p>The game server container group runs your game server build and dependent software. Amazon GameLift Servers deploys one or more replicas of this container group to each fleet instance. The number of replicas depends on the computing capabilities of the fleet instance in use. </p> </li> <li> <p>An optional per-instance container group might be used to run other software that only needs to run once per instance, such as background services, logging, or test processes. One per-instance container group is deployed to each fleet instance. </p> </li> </ul> <p>Each container group can include the definition for one or more containers. A container definition specifies a container image that is stored in an Amazon Elastic Container Registry (Amazon ECR) public or private repository.</p> <p> <b>Request options</b> </p> <p>Use this operation to make the following types of requests. Most fleet settings have default values, so you can create a working fleet with a minimal configuration and default values, which you can customize later.</p> <ul> <li> <p>Create a fleet with no container groups. You can configure a container fleet and then add container group definitions later. In this scenario, no fleet instances are deployed, and the fleet can't host game sessions until you add a game server container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> </ul> </li> <li> <p>Create a fleet with a game server container group. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> <li> <p> <code>GameServerContainerGroupDefinitionName</code> </p> </li> </ul> </li> <li> <p>Create a fleet with a game server container group and a per-instance container group. Provide the following required parameter values:</p> <ul> <li> <p> <code>FleetRoleArn</code> </p> </li> <li> <p> <code>GameServerContainerGroupDefinitionName</code> </p> </li> <li> <p> <code>PerInstanceContainerGroupDefinitionName</code> </p> </li> </ul> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation creates a new container fleet resource, places it in <code>PENDING</code> status, and initiates the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-all.html#fleets-creation-workflow\">fleet creation workflow</a>. For fleets with container groups, this workflow starts a fleet deployment and transitions the status to <code>ACTIVE</code>. Fleets without a container group are placed in <code>CREATED</code> status.</p> <p>You can update most of the properties of a fleet, including container group definitions, and deploy the update across all fleet instances. Use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerFleet.html\">UpdateContainerFleet</a> to deploy a new game server version update across the container fleet. </p> <note> <p>A managed fleet's runtime environment depends on the Amazon Machine Image (AMI) version it uses. When a new fleet is created, Amazon GameLift Servers assigns the latest available AMI version to the fleet, and all compute instances in that fleet are deployed with that version. To update the AMI version, you must create a new fleet. As a best practice, we recommend replacing your managed fleets every 30 days to maintain a secure and up-to-date runtime environment for your hosted game servers. For guidance, see <a href=\"https://docs.aws.amazon.com/gameliftservers/latest/developerguide/security-best-practices.html\"> Security best practices for Amazon GameLift Servers</a>.</p> </note>"
     },
     "CreateContainerGroupDefinition":{
       "name":"CreateContainerGroupDefinition",
@@ -119,7 +119,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Creates a <code>ContainerGroupDefinition</code> that describes a set of containers for hosting your game server with Amazon GameLift managed containers hosting. An Amazon GameLift container group is similar to a container task or pod. Use container group definitions when you create a container fleet with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerFleet.html\">CreateContainerFleet</a>. </p> <p>A container group definition determines how Amazon GameLift deploys your containers to each instance in a container fleet. You can maintain multiple versions of a container group definition.</p> <p>There are two types of container groups:</p> <ul> <li> <p>A <b>game server container group</b> has the containers that run your game server application and supporting software. A game server container group can have these container types:</p> <ul> <li> <p>Game server container. This container runs your game server. You can define one game server container in a game server container group.</p> </li> <li> <p>Support container. This container runs software in parallel with your game server. You can define up to 8 support containers in a game server group.</p> </li> </ul> <p>When building a game server container group definition, you can choose to bundle your game server executable and all dependent software into a single game server container. Alternatively, you can separate the software into one game server container and one or more support containers.</p> <p>On a container fleet instance, a game server container group can be deployed multiple times (depending on the compute resources of the instance). This means that all containers in the container group are replicated together.</p> </li> <li> <p>A <b>per-instance container group</b> has containers for processes that aren't replicated on a container fleet instance. This might include background services, logging, test processes, or processes that need to persist independently of the game server container group. When building a per-instance container group, you can define up to 10 support containers.</p> </li> </ul> <note> <p>This operation requires Identity and Access Management (IAM) permissions to access container images in Amazon ECR repositories. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-iam-policy-examples.html\"> IAM permissions for Amazon GameLift</a> for help setting the appropriate permissions.</p> </note> <p> <b>Request options</b> </p> <p>Use this operation to make the following types of requests. You can specify values for the minimum required parameters and customize optional values later.</p> <ul> <li> <p>Create a game server container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>ContainerGroupType</code> (<code>GAME_SERVER</code>)</p> </li> <li> <p> <code>OperatingSystem</code> (omit to use default value)</p> </li> <li> <p> <code>TotalMemoryLimitMebibytes</code> (omit to use default value)</p> </li> <li> <p> <code>TotalVcpuLimit </code>(omit to use default value)</p> </li> <li> <p>At least one <code>GameServerContainerDefinition</code> </p> <ul> <li> <p> <code>ContainerName</code> </p> </li> <li> <p> <code>ImageUrl</code> </p> </li> <li> <p> <code>PortConfiguration</code> </p> </li> <li> <p> <code>ServerSdkVersion</code> (omit to use default value)</p> </li> </ul> </li> </ul> </li> <li> <p>Create a per-instance container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>ContainerGroupType</code> (<code>PER_INSTANCE</code>)</p> </li> <li> <p> <code>OperatingSystem</code> (omit to use default value)</p> </li> <li> <p> <code>TotalMemoryLimitMebibytes</code> (omit to use default value)</p> </li> <li> <p> <code>TotalVcpuLimit </code>(omit to use default value)</p> </li> <li> <p>At least one <code>SupportContainerDefinition</code> </p> <ul> <li> <p> <code>ContainerName</code> </p> </li> <li> <p> <code>ImageUrl</code> </p> </li> </ul> </li> </ul> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this request creates a <code>ContainerGroupDefinition</code> resource and assigns a unique ARN value. You can update most properties of a container group definition by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerGroupDefinition.html\">UpdateContainerGroupDefinition</a>, and optionally save the update as a new version.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Creates a <code>ContainerGroupDefinition</code> that describes a set of containers for hosting your game server with Amazon GameLift Servers managed containers hosting. An Amazon GameLift Servers container group is similar to a container task or pod. Use container group definitions when you create a container fleet with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerFleet.html\">CreateContainerFleet</a>. </p> <p>A container group definition determines how Amazon GameLift Servers deploys your containers to each instance in a container fleet. You can maintain multiple versions of a container group definition.</p> <p>There are two types of container groups:</p> <ul> <li> <p>A <b>game server container group</b> has the containers that run your game server application and supporting software. A game server container group can have these container types:</p> <ul> <li> <p>Game server container. This container runs your game server. You can define one game server container in a game server container group.</p> </li> <li> <p>Support container. This container runs software in parallel with your game server. You can define up to 8 support containers in a game server group.</p> </li> </ul> <p>When building a game server container group definition, you can choose to bundle your game server executable and all dependent software into a single game server container. Alternatively, you can separate the software into one game server container and one or more support containers.</p> <p>On a container fleet instance, a game server container group can be deployed multiple times (depending on the compute resources of the instance). This means that all containers in the container group are replicated together.</p> </li> <li> <p>A <b>per-instance container group</b> has containers for processes that aren't replicated on a container fleet instance. This might include background services, logging, test processes, or processes that need to persist independently of the game server container group. When building a per-instance container group, you can define up to 10 support containers.</p> </li> </ul> <note> <p>This operation requires Identity and Access Management (IAM) permissions to access container images in Amazon ECR repositories. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-iam-policy-examples.html\"> IAM permissions for Amazon GameLift Servers</a> for help setting the appropriate permissions.</p> </note> <p> <b>Request options</b> </p> <p>Use this operation to make the following types of requests. You can specify values for the minimum required parameters and customize optional values later.</p> <ul> <li> <p>Create a game server container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>ContainerGroupType</code> (<code>GAME_SERVER</code>)</p> </li> <li> <p> <code>OperatingSystem</code> (omit to use default value)</p> </li> <li> <p> <code>TotalMemoryLimitMebibytes</code> (omit to use default value)</p> </li> <li> <p> <code>TotalVcpuLimit </code>(omit to use default value)</p> </li> <li> <p>At least one <code>GameServerContainerDefinition</code> </p> <ul> <li> <p> <code>ContainerName</code> </p> </li> <li> <p> <code>ImageUrl</code> </p> </li> <li> <p> <code>PortConfiguration</code> </p> </li> <li> <p> <code>ServerSdkVersion</code> (omit to use default value)</p> </li> </ul> </li> </ul> </li> <li> <p>Create a per-instance container group definition. Provide the following required parameter values:</p> <ul> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>ContainerGroupType</code> (<code>PER_INSTANCE</code>)</p> </li> <li> <p> <code>OperatingSystem</code> (omit to use default value)</p> </li> <li> <p> <code>TotalMemoryLimitMebibytes</code> (omit to use default value)</p> </li> <li> <p> <code>TotalVcpuLimit </code>(omit to use default value)</p> </li> <li> <p>At least one <code>SupportContainerDefinition</code> </p> <ul> <li> <p> <code>ContainerName</code> </p> </li> <li> <p> <code>ImageUrl</code> </p> </li> </ul> </li> </ul> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this request creates a <code>ContainerGroupDefinition</code> resource and assigns a unique ARN value. You can update most properties of a container group definition by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerGroupDefinition.html\">UpdateContainerGroupDefinition</a>, and optionally save the update as a new version.</p>"
     },
     "CreateFleet":{
       "name":"CreateFleet",
@@ -140,7 +140,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Creates a fleet of compute resources to host your game servers. Use this operation to set up the following types of fleets based on compute type: </p> <p> <b>Managed EC2 fleet</b> </p> <p>An EC2 fleet is a set of Amazon Elastic Compute Cloud (Amazon EC2) instances. Your game server build is deployed to each fleet instance. Amazon GameLift manages the fleet's instances and controls the lifecycle of game server processes, which host game sessions for players. EC2 fleets can have instances in multiple locations. Each instance in the fleet is designated a <code>Compute</code>.</p> <p>To create an EC2 fleet, provide these required parameters:</p> <ul> <li> <p>Either <code>BuildId</code> or <code>ScriptId</code> </p> </li> <li> <p> <code>ComputeType</code> set to <code>EC2</code> (the default value)</p> </li> <li> <p> <code>EC2InboundPermissions</code> </p> </li> <li> <p> <code>EC2InstanceType</code> </p> </li> <li> <p> <code>FleetType</code> </p> </li> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>RuntimeConfiguration</code> with at least one <code>ServerProcesses</code> configuration</p> </li> </ul> <p>If successful, this operation creates a new fleet resource and places it in <code>NEW</code> status while Amazon GameLift initiates the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-all.html#fleets-creation-workflow\">fleet creation workflow</a>. To debug your fleet, fetch logs, view performance metrics or other actions on the fleet, create a development fleet with port 22/3389 open. As a best practice, we recommend opening ports for remote access only when you need them and closing them when you're finished. </p> <p>When the fleet status is ACTIVE, you can adjust capacity settings and turn autoscaling on/off for each location.</p> <p> <b>Anywhere fleet</b> </p> <p>An Anywhere fleet represents compute resources that are not owned or managed by Amazon GameLift. You might create an Anywhere fleet with your local machine for testing, or use one to host game servers with on-premises hardware or other game hosting solutions. </p> <p>To create an Anywhere fleet, provide these required parameters:</p> <ul> <li> <p> <code>ComputeType</code> set to <code>ANYWHERE</code> </p> </li> <li> <p> <code>Locations</code> specifying a custom location</p> </li> <li> <p> <code>Name</code> </p> </li> </ul> <p>If successful, this operation creates a new fleet resource and places it in <code>ACTIVE</code> status. You can register computes with a fleet in <code>ACTIVE</code> status. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html#fleets-creating-debug-creation\">Debug fleet creation issues</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Multi-location fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Creates a fleet of compute resources to host your game servers. Use this operation to set up a fleet for the following compute types: </p> <p> <b>Managed EC2 fleet</b> </p> <p>An EC2 fleet is a set of Amazon Elastic Compute Cloud (Amazon EC2) instances. Your game server build is deployed to each fleet instance. Amazon GameLift Servers manages the fleet's instances and controls the lifecycle of game server processes, which host game sessions for players. EC2 fleets can have instances in multiple locations. Each instance in the fleet is designated a <code>Compute</code>.</p> <p>To create an EC2 fleet, provide these required parameters:</p> <ul> <li> <p>Either <code>BuildId</code> or <code>ScriptId</code> </p> </li> <li> <p> <code>ComputeType</code> set to <code>EC2</code> (the default value)</p> </li> <li> <p> <code>EC2InboundPermissions</code> </p> </li> <li> <p> <code>EC2InstanceType</code> </p> </li> <li> <p> <code>FleetType</code> </p> </li> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>RuntimeConfiguration</code> with at least one <code>ServerProcesses</code> configuration</p> </li> </ul> <p>If successful, this operation creates a new fleet resource and places it in <code>NEW</code> status while Amazon GameLift Servers initiates the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-all.html#fleets-creation-workflow\">fleet creation workflow</a>. To debug your fleet, fetch logs, view performance metrics or other actions on the fleet, create a development fleet with port 22/3389 open. As a best practice, we recommend opening ports for remote access only when you need them and closing them when you're finished. </p> <p>When the fleet status is ACTIVE, you can adjust capacity settings and turn autoscaling on/off for each location.</p> <note> <p>A managed fleet's runtime environment depends on the Amazon Machine Image (AMI) version it uses. When a new fleet is created, Amazon GameLift Servers assigns the latest available AMI version to the fleet, and all compute instances in that fleet are deployed with that version. To update the AMI version, you must create a new fleet. As a best practice, we recommend replacing your managed fleets every 30 days to maintain a secure and up-to-date runtime environment for your hosted game servers. For guidance, see <a href=\"https://docs.aws.amazon.com/gameliftservers/latest/developerguide/security-best-practices.html\"> Security best practices for Amazon GameLift Servers</a>.</p> </note> <p> <b>Anywhere fleet</b> </p> <p>An Anywhere fleet represents compute resources that are not owned or managed by Amazon GameLift Servers. You might create an Anywhere fleet with your local machine for testing, or use one to host game servers with on-premises hardware or other game hosting solutions. </p> <p>To create an Anywhere fleet, provide these required parameters:</p> <ul> <li> <p> <code>ComputeType</code> set to <code>ANYWHERE</code> </p> </li> <li> <p> <code>Locations</code> specifying a custom location</p> </li> <li> <p> <code>Name</code> </p> </li> </ul> <p>If successful, this operation creates a new fleet resource and places it in <code>ACTIVE</code> status. You can register computes with a fleet in <code>ACTIVE</code> status. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html#fleets-creating-debug-creation\">Debug fleet creation issues</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Multi-location fleets</a> </p>"
     },
     "CreateFleetLocations":{
       "name":"CreateFleetLocations",
@@ -161,7 +161,7 @@
         {"shape":"ConflictException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Adds remote locations to an EC2 and begins populating the new locations with instances. The new instances conform to the fleet's instance type, auto-scaling, and other configuration settings.</p> <note> <p>You can't add remote locations to a fleet that resides in an Amazon Web Services Region that doesn't support multiple locations. Fleets created prior to March 2021 can't support multiple locations.</p> </note> <p>To add fleet locations, specify the fleet to be updated and provide a list of one or more locations. </p> <p>If successful, this operation returns the list of added locations with their status set to <code>NEW</code>. Amazon GameLift initiates the process of starting an instance in each added location. You can track the status of each new location by monitoring location creation events using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetEvents.html\">DescribeFleetEvents</a>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-editing.html#fleets-update-locations\">Update fleet locations</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Adds remote locations to an EC2 and begins populating the new locations with instances. The new instances conform to the fleet's instance type, auto-scaling, and other configuration settings.</p> <note> <p>You can't add remote locations to a fleet that resides in an Amazon Web Services Region that doesn't support multiple locations. Fleets created prior to March 2021 can't support multiple locations.</p> </note> <p>To add fleet locations, specify the fleet to be updated and provide a list of one or more locations. </p> <p>If successful, this operation returns the list of added locations with their status set to <code>NEW</code>. Amazon GameLift Servers initiates the process of starting an instance in each added location. You can track the status of each new location by monitoring location creation events using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetEvents.html\">DescribeFleetEvents</a>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-editing.html#fleets-update-locations\">Update fleet locations</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting.</p>"
     },
     "CreateGameServerGroup":{
       "name":"CreateGameServerGroup",
@@ -178,7 +178,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Creates a Amazon GameLift FleetIQ game server group for managing game hosting on a collection of Amazon Elastic Compute Cloud instances for game hosting. This operation creates the game server group, creates an Auto Scaling group in your Amazon Web Services account, and establishes a link between the two groups. You can view the status of your game server groups in the Amazon GameLift console. Game server group metrics and events are emitted to Amazon CloudWatch.</p> <p>Before creating a new game server group, you must have the following: </p> <ul> <li> <p>An Amazon Elastic Compute Cloud launch template that specifies how to launch Amazon Elastic Compute Cloud instances with your game server build. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\"> Launching an Instance from a Launch Template</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. </p> </li> <li> <p>An IAM role that extends limited access to your Amazon Web Services account to allow Amazon GameLift FleetIQ to create and interact with the Auto Scaling group. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-iam-permissions-roles.html\">Create IAM roles for cross-service interaction</a> in the <i>Amazon GameLift FleetIQ Developer Guide</i>.</p> </li> </ul> <p>To create a new game server group, specify a unique group name, IAM role and Amazon Elastic Compute Cloud launch template, and provide a list of instance types that can be used in the group. You must also set initial maximum and minimum limits on the group's instance count. You can optionally set an Auto Scaling policy with target tracking based on a Amazon GameLift FleetIQ metric.</p> <p>Once the game server group and corresponding Auto Scaling group are created, you have full access to change the Auto Scaling group's configuration as needed. Several properties that are set when creating a game server group, including maximum/minimum size and auto-scaling policy settings, must be updated directly in the Auto Scaling group. Keep in mind that some Auto Scaling group properties are periodically updated by Amazon GameLift FleetIQ as part of its balancing activities to optimize for availability and cost.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Creates a Amazon GameLift Servers FleetIQ game server group for managing game hosting on a collection of Amazon Elastic Compute Cloud instances for game hosting. This operation creates the game server group, creates an Auto Scaling group in your Amazon Web Services account, and establishes a link between the two groups. You can view the status of your game server groups in the Amazon GameLift Servers console. Game server group metrics and events are emitted to Amazon CloudWatch.</p> <p>Before creating a new game server group, you must have the following: </p> <ul> <li> <p>An Amazon Elastic Compute Cloud launch template that specifies how to launch Amazon Elastic Compute Cloud instances with your game server build. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\"> Launching an Instance from a Launch Template</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. </p> </li> <li> <p>An IAM role that extends limited access to your Amazon Web Services account to allow Amazon GameLift Servers FleetIQ to create and interact with the Auto Scaling group. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-iam-permissions-roles.html\">Create IAM roles for cross-service interaction</a> in the <i>Amazon GameLift Servers FleetIQ Developer Guide</i>.</p> </li> </ul> <p>To create a new game server group, specify a unique group name, IAM role and Amazon Elastic Compute Cloud launch template, and provide a list of instance types that can be used in the group. You must also set initial maximum and minimum limits on the group's instance count. You can optionally set an Auto Scaling policy with target tracking based on a Amazon GameLift Servers FleetIQ metric.</p> <p>Once the game server group and corresponding Auto Scaling group are created, you have full access to change the Auto Scaling group's configuration as needed. Several properties that are set when creating a game server group, including maximum/minimum size and auto-scaling policy settings, must be updated directly in the Auto Scaling group. Keep in mind that some Auto Scaling group properties are periodically updated by Amazon GameLift Servers FleetIQ as part of its balancing activities to optimize for availability and cost.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "CreateGameSession":{
       "name":"CreateGameSession",
@@ -201,7 +201,7 @@
         {"shape":"IdempotentParameterMismatchException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Creates a multiplayer game session for players in a specific fleet location. This operation prompts an available server process to start a game session and retrieves connection information for the new game session. As an alternative, consider using the Amazon GameLift game session placement feature with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a>, which uses the FleetIQ algorithm and queues to optimize the placement process.</p> <p>When creating a game session, you specify exactly where you want to place it and provide a set of game session configuration settings. The target fleet must be in <code>ACTIVE</code> status. </p> <p>You can use this operation in the following ways: </p> <ul> <li> <p>To create a game session on an instance in a fleet's home Region, provide a fleet or alias ID along with your game session configuration. </p> </li> <li> <p>To create a game session on an instance in a fleet's remote location, provide a fleet or alias ID and a location name, along with your game session configuration. </p> </li> <li> <p>To create a game session on an instance in an Anywhere fleet, specify the fleet's custom location.</p> </li> </ul> <p>If successful, Amazon GameLift initiates a workflow to start a new game session and returns a <code>GameSession</code> object containing the game session configuration and status. When the game session status is <code>ACTIVE</code>, it is updated with connection information and you can create player sessions for the game session. By default, newly created game sessions are open to new players. You can restrict new player access by using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a> to change the game session's player session creation policy.</p> <p>Amazon GameLift retains logs for active for 14 days. To access the logs, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetGameSessionLogUrl.html\">GetGameSessionLogUrl</a> to download the log files.</p> <p> <i>Available in Amazon GameLift Local.</i> </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-startsession\">Start a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Creates a multiplayer game session for players in a specific fleet location. This operation prompts an available server process to start a game session and retrieves connection information for the new game session. As an alternative, consider using the Amazon GameLift Servers game session placement feature with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a>, which uses the FleetIQ algorithm and queues to optimize the placement process.</p> <p>When creating a game session, you specify exactly where you want to place it and provide a set of game session configuration settings. The target fleet must be in <code>ACTIVE</code> status. </p> <p>You can use this operation in the following ways: </p> <ul> <li> <p>To create a game session on an instance in a fleet's home Region, provide a fleet or alias ID along with your game session configuration. </p> </li> <li> <p>To create a game session on an instance in a fleet's remote location, provide a fleet or alias ID and a location name, along with your game session configuration. </p> </li> <li> <p>To create a game session on an instance in an Anywhere fleet, specify the fleet's custom location.</p> </li> </ul> <p>If successful, Amazon GameLift Servers initiates a workflow to start a new game session and returns a <code>GameSession</code> object containing the game session configuration and status. When the game session status is <code>ACTIVE</code>, it is updated with connection information and you can create player sessions for the game session. By default, newly created game sessions are open to new players. You can restrict new player access by using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a> to change the game session's player session creation policy.</p> <p>Amazon GameLift Servers retains logs for active for 14 days. To access the logs, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetGameSessionLogUrl.html\">GetGameSessionLogUrl</a> to download the log files.</p> <p> <i>Available in Amazon GameLift Servers Local.</i> </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-startsession\">Start a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateGameSessionQueue":{
       "name":"CreateGameSessionQueue",
@@ -219,7 +219,7 @@
         {"shape":"NotFoundException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Creates a placement queue that processes requests for new game sessions. A queue uses FleetIQ algorithms to determine the best placement locations and find an available game server there, then prompts the game server process to start a new game session. </p> <p>A game session queue is configured with a set of destinations (Amazon GameLift fleets or aliases), which determine the locations where the queue can place new game sessions. These destinations can span multiple fleet types (Spot and On-Demand), instance types, and Amazon Web Services Regions. If the queue includes multi-location fleets, the queue is able to place game sessions in all of a fleet's remote locations. You can opt to filter out individual locations if needed.</p> <p>The queue configuration also determines how FleetIQ selects the best available placement for a new game session. Before searching for an available game server, FleetIQ first prioritizes the queue's destinations and locations, with the best placement locations on top. You can set up the queue to use the FleetIQ default prioritization or provide an alternate set of priorities.</p> <p>To create a new queue, provide a name, timeout value, and a list of destinations. Optionally, specify a sort configuration and/or a filter, and define a set of latency cap policies. You can also include the ARN for an Amazon Simple Notification Service (SNS) topic to receive notifications of game session placement activity. Notifications using SNS or CloudWatch events is the preferred way to track placement activity.</p> <p>If successful, a new <code>GameSessionQueue</code> object is returned with an assigned queue ARN. New game session requests, which are submitted to queue with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> or <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchmaking.html\">StartMatchmaking</a>, reference a queue's name or ARN. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-design.html\"> Design a game session queue</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-creating.html\"> Create a game session queue</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateGameSessionQueue.html\">CreateGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessionQueues.html\">DescribeGameSessionQueues</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateGameSessionQueue.html\">UpdateGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeleteGameSessionQueue.html\">DeleteGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Creates a placement queue that processes requests for new game sessions. A queue uses FleetIQ algorithms to locate the best available placement locations for a new game session, and then prompts the game server process to start a new game session.</p> <p>A game session queue is configured with a set of destinations (Amazon GameLift Servers fleets or aliases) that determine where the queue can place new game sessions. These destinations can span multiple Amazon Web Services Regions, can use different instance types, and can include both Spot and On-Demand fleets. If the queue includes multi-location fleets, the queue can place game sessions in any of a fleet's remote locations.</p> <p>You can configure a queue to determine how it selects the best available placement for a new game session. Queues can prioritize placement decisions based on a combination of location, hosting cost, and player latency. You can set up the queue to use the default prioritization or provide alternate instructions using <code>PriorityConfiguration</code>.</p> <p> <b>Request options</b> </p> <p>Use this operation to make these common types of requests. </p> <ul> <li> <p>Create a queue with the minimum required parameters.</p> <ul> <li> <p> <code>Name</code> </p> </li> <li> <p> <code>Destinations</code> (This parameter isn't required, but a queue can't make placements without at least one destination.)</p> </li> </ul> </li> <li> <p>Create a queue with placement notification. Queues that have high placement activity must use a notification system, such as with Amazon Simple Notification Service (Amazon SNS) or Amazon CloudWatch.</p> <ul> <li> <p>Required parameters <code>Name</code> and <code>Destinations</code> </p> </li> <li> <p> <code>NotificationTarget</code> </p> </li> </ul> </li> <li> <p>Create a queue with custom prioritization settings. These custom settings replace the default prioritization configuration for a queue.</p> <ul> <li> <p>Required parameters <code>Name</code> and <code>Destinations</code> </p> </li> <li> <p> <code>PriorityConfiguration</code> </p> </li> </ul> </li> <li> <p>Create a queue with special rules for processing player latency data.</p> <ul> <li> <p>Required parameters <code>Name</code> and <code>Destinations</code> </p> </li> <li> <p> <code>PlayerLatencyPolicies</code> </p> </li> </ul> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns a new <code>GameSessionQueue</code> object with an assigned queue ARN. Use the queue's name or ARN when submitting new game session requests with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> or <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchmaking.html\">StartMatchmaking</a>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-design.html\"> Design a game session queue</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-creating.html\"> Create a game session queue</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateGameSessionQueue.html\">CreateGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessionQueues.html\">DescribeGameSessionQueues</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateGameSessionQueue.html\">UpdateGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeleteGameSessionQueue.html\">DeleteGameSessionQueue</a> | <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateLocation":{
       "name":"CreateLocation",
@@ -237,7 +237,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a custom location for use in an Anywhere fleet.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Anywhere</p> <p>Creates a custom location for use in an Anywhere fleet.</p>"
     },
     "CreateMatchmakingConfiguration":{
       "name":"CreateMatchmakingConfiguration",
@@ -255,7 +255,7 @@
         {"shape":"UnsupportedRegionException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Defines a new matchmaking configuration for use with FlexMatch. Whether your are using FlexMatch with Amazon GameLift hosting or as a standalone matchmaking service, the matchmaking configuration sets out rules for matching players and forming teams. If you're also using Amazon GameLift hosting, it defines how to start game sessions for each match. Your matchmaking system can use multiple configurations to handle different game scenarios. All matchmaking requests identify the matchmaking configuration to use and provide player attributes consistent with that configuration. </p> <p>To create a matchmaking configuration, you must provide the following: configuration name and FlexMatch mode (with or without Amazon GameLift hosting); a rule set that specifies how to evaluate players and find acceptable matches; whether player acceptance is required; and the maximum time allowed for a matchmaking attempt. When using FlexMatch with Amazon GameLift hosting, you also need to identify the game session queue to use when starting a game session for the match.</p> <p>In addition, you must set up an Amazon Simple Notification Service topic to receive matchmaking notifications. Provide the topic ARN in the matchmaking configuration.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\"> Design a FlexMatch matchmaker</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set up FlexMatch event notification</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Defines a new matchmaking configuration for use with FlexMatch. Whether your are using FlexMatch with Amazon GameLift Servers hosting or as a standalone matchmaking service, the matchmaking configuration sets out rules for matching players and forming teams. If you're also using Amazon GameLift Servers hosting, it defines how to start game sessions for each match. Your matchmaking system can use multiple configurations to handle different game scenarios. All matchmaking requests identify the matchmaking configuration to use and provide player attributes consistent with that configuration. </p> <p>To create a matchmaking configuration, you must provide the following: configuration name and FlexMatch mode (with or without Amazon GameLift Servers hosting); a rule set that specifies how to evaluate players and find acceptable matches; whether player acceptance is required; and the maximum time allowed for a matchmaking attempt. When using FlexMatch with Amazon GameLift Servers hosting, you also need to identify the game session queue to use when starting a game session for the match.</p> <p>In addition, you must set up an Amazon Simple Notification Service topic to receive matchmaking notifications. Provide the topic ARN in the matchmaking configuration.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\"> Design a FlexMatch matchmaker</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set up FlexMatch event notification</a> </p>"
     },
     "CreateMatchmakingRuleSet":{
       "name":"CreateMatchmakingRuleSet",
@@ -272,7 +272,7 @@
         {"shape":"UnsupportedRegionException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Creates a new rule set for FlexMatch matchmaking. A rule set describes the type of match to create, such as the number and size of teams. It also sets the parameters for acceptable player matches, such as minimum skill level or character type.</p> <p>To create a matchmaking rule set, provide unique rule set name and the rule set body in JSON format. Rule sets must be defined in the same Region as the matchmaking configuration they are used with.</p> <p>Since matchmaking rule sets cannot be edited, it is a good idea to check the rule set syntax using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ValidateMatchmakingRuleSet.html\">ValidateMatchmakingRuleSet</a> before creating a new rule set.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\">Design a matchmaker</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-intro.html\">Matchmaking with FlexMatch</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Creates a new rule set for FlexMatch matchmaking. A rule set describes the type of match to create, such as the number and size of teams. It also sets the parameters for acceptable player matches, such as minimum skill level or character type.</p> <p>To create a matchmaking rule set, provide unique rule set name and the rule set body in JSON format. Rule sets must be defined in the same Region as the matchmaking configuration they are used with.</p> <p>Since matchmaking rule sets cannot be edited, it is a good idea to check the rule set syntax using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ValidateMatchmakingRuleSet.html\">ValidateMatchmakingRuleSet</a> before creating a new rule set.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\">Design a matchmaker</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-intro.html\">Matchmaking with FlexMatch</a> </p> </li> </ul>"
     },
     "CreatePlayerSession":{
       "name":"CreatePlayerSession",
@@ -291,7 +291,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Reserves an open player slot in a game session for a player. New player sessions can be created in any game session with an open slot that is in <code>ACTIVE</code> status and has a player creation policy of <code>ACCEPT_ALL</code>. You can add a group of players to a game session with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreatePlayerSessions.html\">CreatePlayerSessions</a> . </p> <p>To create a player session, specify a game session ID, player ID, and optionally a set of player data. </p> <p>If successful, a slot is reserved in the game session for the player and a new <code>PlayerSessions</code> object is returned with a player session ID. The player references the player session ID when sending a connection request to the game session, and the game server can use it to validate the player reservation with the Amazon GameLift service. Player sessions cannot be updated. </p> <p>The maximum number of players per game session is 200. It is not adjustable. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Reserves an open player slot in a game session for a player. New player sessions can be created in any game session with an open slot that is in <code>ACTIVE</code> status and has a player creation policy of <code>ACCEPT_ALL</code>. You can add a group of players to a game session with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreatePlayerSessions.html\">CreatePlayerSessions</a> . </p> <p>To create a player session, specify a game session ID, player ID, and optionally a set of player data. </p> <p>If successful, a slot is reserved in the game session for the player and a new <code>PlayerSessions</code> object is returned with a player session ID. The player references the player session ID when sending a connection request to the game session, and the game server can use it to validate the player reservation with the Amazon GameLift Servers service. Player sessions cannot be updated. </p> <p>The maximum number of players per game session is 200. It is not adjustable. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreatePlayerSessions":{
       "name":"CreatePlayerSessions",
@@ -310,7 +310,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Reserves open slots in a game session for a group of players. New player sessions can be created in any game session with an open slot that is in <code>ACTIVE</code> status and has a player creation policy of <code>ACCEPT_ALL</code>. To add a single player to a game session, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreatePlayerSession.html\">CreatePlayerSession</a> </p> <p>To create player sessions, specify a game session ID and a list of player IDs. Optionally, provide a set of player data for each player ID. </p> <p>If successful, a slot is reserved in the game session for each player, and new <code>PlayerSession</code> objects are returned with player session IDs. Each player references their player session ID when sending a connection request to the game session, and the game server can use it to validate the player reservation with the Amazon GameLift service. Player sessions cannot be updated.</p> <p>The maximum number of players per game session is 200. It is not adjustable. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Reserves open slots in a game session for a group of players. New player sessions can be created in any game session with an open slot that is in <code>ACTIVE</code> status and has a player creation policy of <code>ACCEPT_ALL</code>. To add a single player to a game session, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreatePlayerSession.html\">CreatePlayerSession</a> </p> <p>To create player sessions, specify a game session ID and a list of player IDs. Optionally, provide a set of player data for each player ID. </p> <p>If successful, a slot is reserved in the game session for each player, and new <code>PlayerSession</code> objects are returned with player session IDs. Each player references their player session ID when sending a connection request to the game session, and the game server can use it to validate the player reservation with the Amazon GameLift Servers service. Player sessions cannot be updated.</p> <p>The maximum number of players per game session is 200. It is not adjustable. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateScript":{
       "name":"CreateScript",
@@ -327,7 +327,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Creates a new script record for your Realtime Servers script. Realtime scripts are JavaScript that provide configuration settings and optional custom game logic for your game. The script is deployed when you create a Realtime Servers fleet to host your game sessions. Script logic is executed during an active game session. </p> <p>To create a new script record, specify a script name and provide the script file(s). The script files and all dependencies must be zipped into a single file. You can pull the zip file from either of these locations: </p> <ul> <li> <p>A locally available directory. Use the <i>ZipFile</i> parameter for this option.</p> </li> <li> <p>An Amazon Simple Storage Service (Amazon S3) bucket under your Amazon Web Services account. Use the <i>StorageLocation</i> parameter for this option. You'll need to have an Identity Access Management (IAM) role that allows the Amazon GameLift service to access your S3 bucket. </p> </li> </ul> <p>If the call is successful, a new script record is created with a unique script ID. If the script file is provided as a local file, the file is uploaded to an Amazon GameLift-owned S3 bucket and the script record's storage location reflects this location. If the script file is provided as an S3 bucket, Amazon GameLift accesses the file at this storage location as needed for deployment.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Realtime Servers</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set Up a Role for Amazon GameLift Access</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere</p> <p>Creates a new script record for your Amazon GameLift Servers Realtime script. Realtime scripts are JavaScript that provide configuration settings and optional custom game logic for your game. The script is deployed when you create a Amazon GameLift Servers Realtime fleet to host your game sessions. Script logic is executed during an active game session. </p> <p>To create a new script record, specify a script name and provide the script file(s). The script files and all dependencies must be zipped into a single file. You can pull the zip file from either of these locations: </p> <ul> <li> <p>A locally available directory. Use the <i>ZipFile</i> parameter for this option.</p> </li> <li> <p>An Amazon Simple Storage Service (Amazon S3) bucket under your Amazon Web Services account. Use the <i>StorageLocation</i> parameter for this option. You'll need to have an Identity Access Management (IAM) role that allows the Amazon GameLift Servers service to access your S3 bucket. </p> </li> </ul> <p>If the call is successful, a new script record is created with a unique script ID. If the script file is provided as a local file, the file is uploaded to an Amazon GameLift Servers-owned S3 bucket and the script record's storage location reflects this location. If the script file is provided as an S3 bucket, Amazon GameLift Servers accesses the file at this storage location as needed for deployment.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Servers Amazon GameLift Servers Realtime</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set Up a Role for Amazon GameLift Servers Access</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateVpcPeeringAuthorization":{
       "name":"CreateVpcPeeringAuthorization",
@@ -343,7 +343,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Requests authorization to create or delete a peer connection between the VPC for your Amazon GameLift fleet and a virtual private cloud (VPC) in your Amazon Web Services account. VPC peering enables the game servers on your fleet to communicate directly with other Amazon Web Services resources. After you've received authorization, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringConnection.html\">CreateVpcPeeringConnection</a> to establish the peering connection. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p> <p>You can peer with VPCs that are owned by any Amazon Web Services account you have access to, including the account that you use to manage your Amazon GameLift fleets. You cannot peer with VPCs that are in different Regions.</p> <p>To request authorization to create a connection, call this operation from the Amazon Web Services account with the VPC that you want to peer to your Amazon GameLift fleet. For example, to enable your game servers to retrieve data from a DynamoDB table, use the account that manages that DynamoDB resource. Identify the following values: (1) The ID of the VPC that you want to peer with, and (2) the ID of the Amazon Web Services account that you use to manage Amazon GameLift. If successful, VPC peering is authorized for the specified VPC. </p> <p>To request authorization to delete a connection, call this operation from the Amazon Web Services account with the VPC that is peered with your Amazon GameLift fleet. Identify the following values: (1) VPC ID that you want to delete the peering connection for, and (2) ID of the Amazon Web Services account that you use to manage Amazon GameLift. </p> <p>The authorization remains valid for 24 hours unless it is canceled. You must create or delete the peering connection while the authorization is valid. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Requests authorization to create or delete a peer connection between the VPC for your Amazon GameLift Servers fleet and a virtual private cloud (VPC) in your Amazon Web Services account. VPC peering enables the game servers on your fleet to communicate directly with other Amazon Web Services resources. After you've received authorization, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringConnection.html\">CreateVpcPeeringConnection</a> to establish the peering connection. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p> <p>You can peer with VPCs that are owned by any Amazon Web Services account you have access to, including the account that you use to manage your Amazon GameLift Servers fleets. You cannot peer with VPCs that are in different Regions.</p> <p>To request authorization to create a connection, call this operation from the Amazon Web Services account with the VPC that you want to peer to your Amazon GameLift Servers fleet. For example, to enable your game servers to retrieve data from a DynamoDB table, use the account that manages that DynamoDB resource. Identify the following values: (1) The ID of the VPC that you want to peer with, and (2) the ID of the Amazon Web Services account that you use to manage Amazon GameLift Servers. If successful, VPC peering is authorized for the specified VPC. </p> <p>To request authorization to delete a connection, call this operation from the Amazon Web Services account with the VPC that is peered with your Amazon GameLift Servers fleet. Identify the following values: (1) VPC ID that you want to delete the peering connection for, and (2) ID of the Amazon Web Services account that you use to manage Amazon GameLift Servers. </p> <p>The authorization remains valid for 24 hours unless it is canceled. You must create or delete the peering connection while the authorization is valid. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "CreateVpcPeeringConnection":{
       "name":"CreateVpcPeeringConnection",
@@ -359,7 +359,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Establishes a VPC peering connection between a virtual private cloud (VPC) in an Amazon Web Services account with the VPC for your Amazon GameLift fleet. VPC peering enables the game servers on your fleet to communicate directly with other Amazon Web Services resources. You can peer with VPCs in any Amazon Web Services account that you have access to, including the account that you use to manage your Amazon GameLift fleets. You cannot peer with VPCs that are in different Regions. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p> <p>Before calling this operation to establish the peering connection, you first need to use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringAuthorization.html\">CreateVpcPeeringAuthorization</a> and identify the VPC you want to peer with. Once the authorization for the specified VPC is issued, you have 24 hours to establish the connection. These two operations handle all tasks necessary to peer the two VPCs, including acceptance, updating routing tables, etc. </p> <p>To establish the connection, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift fleets. Identify the following values: (1) The ID of the fleet you want to be enable a VPC peering connection for; (2) The Amazon Web Services account with the VPC that you want to peer with; and (3) The ID of the VPC you want to peer with. This operation is asynchronous. If successful, a connection request is created. You can use continuous polling to track the request's status using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeVpcPeeringConnections.html\">DescribeVpcPeeringConnections</a> , or by monitoring fleet events for success or failure using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetEvents.html\">DescribeFleetEvents</a> . </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Establishes a VPC peering connection between a virtual private cloud (VPC) in an Amazon Web Services account with the VPC for your Amazon GameLift Servers fleet. VPC peering enables the game servers on your fleet to communicate directly with other Amazon Web Services resources. You can peer with VPCs in any Amazon Web Services account that you have access to, including the account that you use to manage your Amazon GameLift Servers fleets. You cannot peer with VPCs that are in different Regions. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p> <p>Before calling this operation to establish the peering connection, you first need to use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringAuthorization.html\">CreateVpcPeeringAuthorization</a> and identify the VPC you want to peer with. Once the authorization for the specified VPC is issued, you have 24 hours to establish the connection. These two operations handle all tasks necessary to peer the two VPCs, including acceptance, updating routing tables, etc. </p> <p>To establish the connection, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift Servers fleets. Identify the following values: (1) The ID of the fleet you want to be enable a VPC peering connection for; (2) The Amazon Web Services account with the VPC that you want to peer with; and (3) The ID of the VPC you want to peer with. This operation is asynchronous. If successful, a connection request is created. You can use continuous polling to track the request's status using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeVpcPeeringConnections.html\">DescribeVpcPeeringConnections</a> , or by monitoring fleet events for success or failure using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetEvents.html\">DescribeFleetEvents</a> . </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeleteAlias":{
       "name":"DeleteAlias",
@@ -375,7 +375,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Deletes an alias. This operation removes all record of the alias. Game clients attempting to access a server process using the deleted alias receive an error. To delete an alias, specify the alias ID to be deleted.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Deletes an alias. This operation removes all record of the alias. Game clients attempting to access a server process using the deleted alias receive an error. To delete an alias, specify the alias ID to be deleted.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeleteBuild":{
       "name":"DeleteBuild",
@@ -391,7 +391,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Deletes a build. This operation permanently deletes the build resource and any uploaded build files. Deleting a build does not affect the status of any active fleets using the build, but you can no longer create new fleets with the deleted build.</p> <p>To delete a build, specify the build ID. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Deletes a build. This operation permanently deletes the build resource and any uploaded build files. Deleting a build does not affect the status of any active fleets using the build, but you can no longer create new fleets with the deleted build.</p> <p>To delete a build, specify the build ID. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeleteContainerFleet":{
       "name":"DeleteContainerFleet",
@@ -409,7 +409,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Deletes all resources and information related to a container fleet and shuts down currently running fleet instances, including those in remote locations. The container fleet must be in <code>ACTIVE</code> status to be deleted.</p> <p>To delete a fleet, specify the fleet ID to be terminated. During the deletion process, the fleet status is changed to <code>DELETING</code>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Deletes all resources and information related to a container fleet and shuts down currently running fleet instances, including those in remote locations. The container fleet must be in <code>ACTIVE</code> status to be deleted.</p> <p>To delete a fleet, specify the fleet ID to be terminated. During the deletion process, the fleet status is changed to <code>DELETING</code>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers Fleets</a> </p>"
     },
     "DeleteContainerGroupDefinition":{
       "name":"DeleteContainerGroupDefinition",
@@ -427,7 +427,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Deletes a container group definition. </p> <p> <b>Request options:</b> </p> <ul> <li> <p>Delete an entire container group definition, including all versions. Specify the container group definition name, or use an ARN value without the version number.</p> </li> <li> <p>Delete a particular version. Specify the container group definition name and a version number, or use an ARN value that includes the version number.</p> </li> <li> <p>Keep the newest versions and delete all older versions. Specify the container group definition name and the number of versions to retain. For example, set <code>VersionCountToRetain</code> to 5 to delete all but the five most recent versions.</p> </li> </ul> <p> <b>Result</b> </p> <p>If successful, Amazon GameLift removes the container group definition versions that you request deletion for. This request will fail for any requested versions if the following is true: </p> <ul> <li> <p>If the version is being used in an active fleet</p> </li> <li> <p>If the version is being deployed to a fleet in a deployment that's currently in progress.</p> </li> <li> <p>If the version is designated as a rollback definition in a fleet deployment that's currently in progress.</p> </li> </ul> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p> <b>Request options:</b> </p> <p>Deletes a container group definition. </p> <ul> <li> <p>Delete an entire container group definition, including all versions. Specify the container group definition name, or use an ARN value without the version number.</p> </li> <li> <p>Delete a particular version. Specify the container group definition name and a version number, or use an ARN value that includes the version number.</p> </li> <li> <p>Keep the newest versions and delete all older versions. Specify the container group definition name and the number of versions to retain. For example, set <code>VersionCountToRetain</code> to 5 to delete all but the five most recent versions.</p> </li> </ul> <p> <b>Result</b> </p> <p>If successful, Amazon GameLift Servers removes the container group definition versions that you request deletion for. This request will fail for any requested versions if the following is true: </p> <ul> <li> <p>If the version is being used in an active fleet</p> </li> <li> <p>If the version is being deployed to a fleet in a deployment that's currently in progress.</p> </li> <li> <p>If the version is designated as a rollback definition in a fleet deployment that's currently in progress.</p> </li> </ul> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
     },
     "DeleteFleet":{
       "name":"DeleteFleet",
@@ -444,7 +444,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Deletes all resources and information related to a fleet and shuts down any currently running fleet instances, including those in remote locations.</p> <note> <p>If the fleet being deleted has a VPC peering connection, you first need to get a valid authorization (good for 24 hours) by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringAuthorization.html\">CreateVpcPeeringAuthorization</a>. You don't need to explicitly delete the VPC peering connection.</p> </note> <p>To delete a fleet, specify the fleet ID to be terminated. During the deletion process, the fleet status is changed to <code>DELETING</code>. When completed, the status switches to <code>TERMINATED</code> and the fleet event <code>FLEET_DELETED</code> is emitted.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Deletes all resources and information related to a fleet and shuts down any currently running fleet instances, including those in remote locations.</p> <note> <p>If the fleet being deleted has a VPC peering connection, you first need to get a valid authorization (good for 24 hours) by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateVpcPeeringAuthorization.html\">CreateVpcPeeringAuthorization</a>. You don't need to explicitly delete the VPC peering connection.</p> </note> <p>To delete a fleet, specify the fleet ID to be terminated. During the deletion process, the fleet status is changed to <code>DELETING</code>. When completed, the status switches to <code>TERMINATED</code> and the fleet event <code>FLEET_DELETED</code> is emitted.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers Fleets</a> </p>"
     },
     "DeleteFleetLocations":{
       "name":"DeleteFleetLocations",
@@ -461,7 +461,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Removes locations from a multi-location fleet. When deleting a location, all game server process and all instances that are still active in the location are shut down. </p> <p>To delete fleet locations, identify the fleet ID and provide a list of the locations to be deleted. </p> <p>If successful, GameLift sets the location status to <code>DELETING</code>, and begins to shut down existing server processes and terminate instances in each location being deleted. When completed, the location status changes to <code>TERMINATED</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Removes locations from a multi-location fleet. When deleting a location, all game server process and all instances that are still active in the location are shut down. </p> <p>To delete fleet locations, identify the fleet ID and provide a list of the locations to be deleted. </p> <p>If successful, GameLift sets the location status to <code>DELETING</code>, and begins to shut down existing server processes and terminate instances in each location being deleted. When completed, the location status changes to <code>TERMINATED</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "DeleteGameServerGroup":{
       "name":"DeleteGameServerGroup",
@@ -477,7 +477,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Terminates a game server group and permanently deletes the game server group record. You have several options for how these resources are impacted when deleting the game server group. Depending on the type of delete operation selected, this operation might affect these resources:</p> <ul> <li> <p>The game server group</p> </li> <li> <p>The corresponding Auto Scaling group</p> </li> <li> <p>All game servers that are currently running in the group</p> </li> </ul> <p>To delete a game server group, identify the game server group to delete and specify the type of delete operation to initiate. Game server groups can only be deleted if they are in <code>ACTIVE</code> or <code>ERROR</code> status.</p> <p>If the delete request is successful, a series of operations are kicked off. The game server group status is changed to <code>DELETE_SCHEDULED</code>, which prevents new game servers from being registered and stops automatic scaling activity. Once all game servers in the game server group are deregistered, Amazon GameLift FleetIQ can begin deleting resources. If any of the delete operations fail, the game server group is placed in <code>ERROR</code> status.</p> <p>Amazon GameLift FleetIQ emits delete events to Amazon CloudWatch.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Terminates a game server group and permanently deletes the game server group record. You have several options for how these resources are impacted when deleting the game server group. Depending on the type of delete operation selected, this operation might affect these resources:</p> <ul> <li> <p>The game server group</p> </li> <li> <p>The corresponding Auto Scaling group</p> </li> <li> <p>All game servers that are currently running in the group</p> </li> </ul> <p>To delete a game server group, identify the game server group to delete and specify the type of delete operation to initiate. Game server groups can only be deleted if they are in <code>ACTIVE</code> or <code>ERROR</code> status.</p> <p>If the delete request is successful, a series of operations are kicked off. The game server group status is changed to <code>DELETE_SCHEDULED</code>, which prevents new game servers from being registered and stops automatic scaling activity. Once all game servers in the game server group are deregistered, Amazon GameLift Servers FleetIQ can begin deleting resources. If any of the delete operations fail, the game server group is placed in <code>ERROR</code> status.</p> <p>Amazon GameLift Servers FleetIQ emits delete events to Amazon CloudWatch.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "DeleteGameSessionQueue":{
       "name":"DeleteGameSessionQueue",
@@ -494,7 +494,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Deletes a game session queue. Once a queue is successfully deleted, unfulfilled <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> requests that reference the queue will fail. To delete a queue, specify the queue name.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Deletes a game session queue. Once a queue is successfully deleted, unfulfilled <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> requests that reference the queue will fail. To delete a queue, specify the queue name.</p>"
     },
     "DeleteLocation":{
       "name":"DeleteLocation",
@@ -510,7 +510,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Deletes a custom location.</p> <p>Before deleting a custom location, review any fleets currently using the custom location and deregister the location if it is in use. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeregisterCompute.html\">DeregisterCompute</a>.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Anywhere</p> <p>Deletes a custom location.</p> <p>Before deleting a custom location, review any fleets currently using the custom location and deregister the location if it is in use. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeregisterCompute.html\">DeregisterCompute</a>.</p>"
     },
     "DeleteMatchmakingConfiguration":{
       "name":"DeleteMatchmakingConfiguration",
@@ -527,7 +527,7 @@
         {"shape":"UnsupportedRegionException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Permanently removes a FlexMatch matchmaking configuration. To delete, specify the configuration name. A matchmaking configuration cannot be deleted if it is being used in any active matchmaking tickets.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Permanently removes a FlexMatch matchmaking configuration. To delete, specify the configuration name. A matchmaking configuration cannot be deleted if it is being used in any active matchmaking tickets.</p>"
     },
     "DeleteMatchmakingRuleSet":{
       "name":"DeleteMatchmakingRuleSet",
@@ -544,7 +544,7 @@
         {"shape":"NotFoundException"},
         {"shape":"TaggingFailedException"}
       ],
-      "documentation":"<p>Deletes an existing matchmaking rule set. To delete the rule set, provide the rule set name. Rule sets cannot be deleted if they are currently being used by a matchmaking configuration. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Deletes an existing matchmaking rule set. To delete the rule set, provide the rule set name. Rule sets cannot be deleted if they are currently being used by a matchmaking configuration. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
     },
     "DeleteScalingPolicy":{
       "name":"DeleteScalingPolicy",
@@ -560,7 +560,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Deletes a fleet scaling policy. Once deleted, the policy is no longer in force and Amazon GameLift removes all record of it. To delete a scaling policy, specify both the scaling policy name and the fleet ID it is associated with.</p> <p>To temporarily suspend scaling policies, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopFleetActions.html\">StopFleetActions</a>. This operation suspends all policies for the fleet.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Deletes a fleet scaling policy. Once deleted, the policy is no longer in force and Amazon GameLift Servers removes all record of it. To delete a scaling policy, specify both the scaling policy name and the fleet ID it is associated with.</p> <p>To temporarily suspend scaling policies, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopFleetActions.html\">StopFleetActions</a>. This operation suspends all policies for the fleet.</p>"
     },
     "DeleteScript":{
       "name":"DeleteScript",
@@ -576,7 +576,7 @@
         {"shape":"TaggingFailedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Deletes a Realtime script. This operation permanently deletes the script record. If script files were uploaded, they are also deleted (files stored in an S3 bucket are not deleted). </p> <p>To delete a script, specify the script ID. Before deleting a script, be sure to terminate all fleets that are deployed with the script being deleted. Fleet instances periodically check for script updates, and if the script record no longer exists, the instance will go into an error state and be unable to host game sessions.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Realtime Servers</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Deletes a Realtime script. This operation permanently deletes the script record. If script files were uploaded, they are also deleted (files stored in an S3 bucket are not deleted). </p> <p>To delete a script, specify the script ID. Before deleting a script, be sure to terminate all fleets that are deployed with the script being deleted. Fleet instances periodically check for script updates, and if the script record no longer exists, the instance will go into an error state and be unable to host game sessions.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Servers Amazon GameLift Servers Realtime</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeleteVpcPeeringAuthorization":{
       "name":"DeleteVpcPeeringAuthorization",
@@ -592,7 +592,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Cancels a pending VPC peering authorization for the specified VPC. If you need to delete an existing VPC peering connection, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeleteVpcPeeringConnection.html\">DeleteVpcPeeringConnection</a>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Cancels a pending VPC peering authorization for the specified VPC. If you need to delete an existing VPC peering connection, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DeleteVpcPeeringConnection.html\">DeleteVpcPeeringConnection</a>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeleteVpcPeeringConnection":{
       "name":"DeleteVpcPeeringConnection",
@@ -608,7 +608,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Removes a VPC peering connection. To delete the connection, you must have a valid authorization for the VPC peering connection that you want to delete.. </p> <p>Once a valid authorization exists, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift fleets. Identify the connection to delete by the connection ID and fleet ID. If successful, the connection is removed. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Removes a VPC peering connection. To delete the connection, you must have a valid authorization for the VPC peering connection that you want to delete.. </p> <p>Once a valid authorization exists, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift Servers fleets. Identify the connection to delete by the connection ID and fleet ID. If successful, the connection is removed. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DeregisterCompute":{
       "name":"DeregisterCompute",
@@ -624,7 +624,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Removes a compute resource from an Amazon GameLift Anywhere fleet. Deregistered computes can no longer host game sessions through Amazon GameLift.</p> <p>For an Anywhere fleet that's running the Amazon GameLift Agent, the Agent handles all compute registry tasks for you. For an Anywhere fleet that doesn't use the Agent, call this operation to deregister fleet computes. </p> <p>To deregister a compute, call this operation from the compute that's being deregistered and specify the compute name and the fleet ID. </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Anywhere</p> <p>Removes a compute resource from an Anywhere fleet. Deregistered computes can no longer host game sessions through Amazon GameLift Servers. Use this operation with an Anywhere fleet that doesn't use the Amazon GameLift Servers Agent For Anywhere fleets with the Agent, the Agent handles all compute registry tasks for you. </p> <p>To deregister a compute, call this operation from the compute that's being deregistered and specify the compute name and the fleet ID. </p>"
     },
     "DeregisterGameServer":{
       "name":"DeregisterGameServer",
@@ -639,7 +639,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Removes the game server from a game server group. As a result of this operation, the deregistered game server can no longer be claimed and will not be returned in a list of active game servers. </p> <p>To deregister a game server, specify the game server group and game server ID. If successful, this operation emits a CloudWatch event with termination timestamp and reason.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Removes the game server from a game server group. As a result of this operation, the deregistered game server can no longer be claimed and will not be returned in a list of active game servers. </p> <p>To deregister a game server, specify the game server group and game server ID. If successful, this operation emits a CloudWatch event with termination timestamp and reason.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "DescribeAlias":{
       "name":"DescribeAlias",
@@ -655,7 +655,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves properties for an alias. This operation returns all alias metadata and settings. To get an alias's target fleet ID only, use <code>ResolveAlias</code>. </p> <p>To get alias properties, specify the alias ID. If successful, the requested alias record is returned.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves properties for an alias. This operation returns all alias metadata and settings. To get an alias's target fleet ID only, use <code>ResolveAlias</code>. </p> <p>To get alias properties, specify the alias ID. If successful, the requested alias record is returned.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeBuild":{
       "name":"DescribeBuild",
@@ -671,7 +671,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves properties for a custom game build. To request a build resource, specify a build ID. If successful, an object containing the build properties is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves properties for a custom game build. To request a build resource, specify a build ID. If successful, an object containing the build properties is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeCompute":{
       "name":"DescribeCompute",
@@ -688,7 +688,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves properties for a compute resource in an Amazon GameLift fleet. To get a list of all computes in a fleet, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html</a>. </p> <p>To request information on a specific compute, provide the fleet ID and compute name.</p> <p>If successful, this operation returns details for the requested compute resource. Depending on the fleet's compute type, the result includes the following information: </p> <ul> <li> <p>For managed EC2 fleets, this operation returns information about the EC2 instance.</p> </li> <li> <p>For Anywhere fleets, this operation returns information about the registered compute.</p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves properties for a specific compute resource in an Amazon GameLift Servers fleet. You can list all computes in a fleet by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html\">ListCompute</a>. </p> <p> <b>Request options</b> </p> <p>Provide the fleet ID and compute name. The compute name varies depending on the type of fleet.</p> <ul> <li> <p>For a compute in a managed EC2 fleet, provide an instance ID. Each instance in the fleet is a compute.</p> </li> <li> <p>For a compute in a managed container fleet, provide a compute name. In a container fleet, each game server container group on a fleet instance is assigned a compute name.</p> </li> <li> <p>For a compute in an Anywhere fleet, provide a registered compute name. Anywhere fleet computes are created when you register a hosting resource with the fleet.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns details for the requested compute resource. Depending on the fleet's compute type, the result includes the following information: </p> <ul> <li> <p>For a managed EC2 fleet, this operation returns information about the EC2 instance.</p> </li> <li> <p>For an Anywhere fleet, this operation returns information about the registered compute.</p> </li> </ul>"
     },
     "DescribeContainerFleet":{
       "name":"DescribeContainerFleet",
@@ -705,7 +705,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the properties for a container fleet. When requesting attributes for multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get container fleet properties for a single fleet. Provide either the fleet ID or ARN value. </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, a <code>ContainerFleet</code> object is returned. This object includes the fleet properties, including information about the most recent deployment.</p> <note> <p>Some API operations limit the number of fleet IDs that allowed in one request. If a request exceeds this limit, the request fails and the error message contains the maximum allowed number.</p> </note>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves the properties for a container fleet. When requesting attributes for multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get container fleet properties for a single fleet. Provide either the fleet ID or ARN value. </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, a <code>ContainerFleet</code> object is returned. This object includes the fleet properties, including information about the most recent deployment.</p> <note> <p>Some API operations limit the number of fleet IDs that allowed in one request. If a request exceeds this limit, the request fails and the error message contains the maximum allowed number.</p> </note>"
     },
     "DescribeContainerGroupDefinition":{
       "name":"DescribeContainerGroupDefinition",
@@ -722,7 +722,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the properties of a container group definition, including all container definitions in the group. </p> <p> <b>Request options:</b> </p> <ul> <li> <p>Retrieve the latest version of a container group definition. Specify the container group definition name only, or use an ARN value without a version number.</p> </li> <li> <p>Retrieve a particular version. Specify the container group definition name and a version number, or use an ARN value that includes the version number.</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a container group definition version.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves the properties of a container group definition, including all container definitions in the group. </p> <p> <b>Request options:</b> </p> <ul> <li> <p>Retrieve the latest version of a container group definition. Specify the container group definition name only, or use an ARN value without a version number.</p> </li> <li> <p>Retrieve a particular version. Specify the container group definition name and a version number, or use an ARN value that includes the version number.</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a container group definition version.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
     },
     "DescribeEC2InstanceLimits":{
       "name":"DescribeEC2InstanceLimits",
@@ -738,7 +738,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the instance limits and current utilization for an Amazon Web Services Region or location. Instance limits control the number of instances, per instance type, per location, that your Amazon Web Services account can use. Learn more at <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>. The information returned includes the maximum number of instances allowed and your account's current usage across all fleets. This information can affect your ability to scale your Amazon GameLift fleets. You can request a limit increase for your account by using the <b>Service limits</b> page in the Amazon GameLift console.</p> <p>Instance limits differ based on whether the instances are deployed in a fleet's home Region or in a remote location. For remote locations, limits also differ based on the combination of home Region and remote location. All requests must specify an Amazon Web Services Region (either explicitly or as your default settings). To get the limit for a remote location, you must also specify the location. For example, the following requests all return different results: </p> <ul> <li> <p>Request specifies the Region <code>ap-northeast-1</code> with no location. The result is limits and usage data on all instance types that are deployed in <code>us-east-2</code>, by all of the fleets that reside in <code>ap-northeast-1</code>. </p> </li> <li> <p>Request specifies the Region <code>us-east-1</code> with location <code>ca-central-1</code>. The result is limits and usage data on all instance types that are deployed in <code>ca-central-1</code>, by all of the fleets that reside in <code>us-east-2</code>. These limits do not affect fleets in any other Regions that deploy instances to <code>ca-central-1</code>.</p> </li> <li> <p>Request specifies the Region <code>eu-west-1</code> with location <code>ca-central-1</code>. The result is limits and usage data on all instance types that are deployed in <code>ca-central-1</code>, by all of the fleets that reside in <code>eu-west-1</code>.</p> </li> </ul> <p>This operation can be used in the following ways:</p> <ul> <li> <p>To get limit and usage data for all instance types that are deployed in an Amazon Web Services Region by fleets that reside in the same Region: Specify the Region only. Optionally, specify a single instance type to retrieve information for.</p> </li> <li> <p>To get limit and usage data for all instance types that are deployed to a remote location by fleets that reside in different Amazon Web Services Region: Provide both the Amazon Web Services Region and the remote location. Optionally, specify a single instance type to retrieve information for.</p> </li> </ul> <p>If successful, an <code>EC2InstanceLimits</code> object is returned with limits and usage data for each requested instance type.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves the instance limits and current utilization for an Amazon Web Services Region or location. Instance limits control the number of instances, per instance type, per location, that your Amazon Web Services account can use. Learn more at <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>. The information returned includes the maximum number of instances allowed and your account's current usage across all fleets. This information can affect your ability to scale your Amazon GameLift Servers fleets. You can request a limit increase for your account by using the <b>Service limits</b> page in the Amazon GameLift Servers console.</p> <p>Instance limits differ based on whether the instances are deployed in a fleet's home Region or in a remote location. For remote locations, limits also differ based on the combination of home Region and remote location. All requests must specify an Amazon Web Services Region (either explicitly or as your default settings). To get the limit for a remote location, you must also specify the location. For example, the following requests all return different results: </p> <ul> <li> <p>Request specifies the Region <code>ap-northeast-1</code> with no location. The result is limits and usage data on all instance types that are deployed in <code>us-east-2</code>, by all of the fleets that reside in <code>ap-northeast-1</code>. </p> </li> <li> <p>Request specifies the Region <code>us-east-1</code> with location <code>ca-central-1</code>. The result is limits and usage data on all instance types that are deployed in <code>ca-central-1</code>, by all of the fleets that reside in <code>us-east-2</code>. These limits do not affect fleets in any other Regions that deploy instances to <code>ca-central-1</code>.</p> </li> <li> <p>Request specifies the Region <code>eu-west-1</code> with location <code>ca-central-1</code>. The result is limits and usage data on all instance types that are deployed in <code>ca-central-1</code>, by all of the fleets that reside in <code>eu-west-1</code>.</p> </li> </ul> <p>This operation can be used in the following ways:</p> <ul> <li> <p>To get limit and usage data for all instance types that are deployed in an Amazon Web Services Region by fleets that reside in the same Region: Specify the Region only. Optionally, specify a single instance type to retrieve information for.</p> </li> <li> <p>To get limit and usage data for all instance types that are deployed to a remote location by fleets that reside in different Amazon Web Services Region: Provide both the Amazon Web Services Region and the remote location. Optionally, specify a single instance type to retrieve information for.</p> </li> </ul> <p>If successful, an <code>EC2InstanceLimits</code> object is returned with limits and usage data for each requested instance type.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "DescribeFleetAttributes":{
       "name":"DescribeFleetAttributes",
@@ -754,7 +754,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves core fleet-wide properties for fleets in an Amazon Web Services Region. Properties include the computing hardware and deployment configuration for instances in the fleet.</p> <p>You can use this operation in the following ways: </p> <ul> <li> <p>To get attributes for specific fleets, provide a list of fleet IDs or fleet ARNs.</p> </li> <li> <p>To get attributes for all fleets, do not provide a fleet identifier.</p> </li> </ul> <p>When requesting attributes for multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>FleetAttributes</code> object is returned for each fleet requested, unless the fleet identifier is not found. </p> <note> <p>Some API operations limit the number of fleet IDs that allowed in one request. If a request exceeds this limit, the request fails and the error message contains the maximum allowed number.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves core fleet-wide properties for fleets in an Amazon Web Services Region. Properties include the computing hardware and deployment configuration for instances in the fleet.</p> <p>You can use this operation in the following ways: </p> <ul> <li> <p>To get attributes for specific fleets, provide a list of fleet IDs or fleet ARNs.</p> </li> <li> <p>To get attributes for all fleets, do not provide a fleet identifier.</p> </li> </ul> <p>When requesting attributes for multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>FleetAttributes</code> object is returned for each fleet requested, unless the fleet identifier is not found. </p> <note> <p>Some API operations limit the number of fleet IDs that allowed in one request. If a request exceeds this limit, the request fails and the error message contains the maximum allowed number.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "DescribeFleetCapacity":{
       "name":"DescribeFleetCapacity",
@@ -771,7 +771,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the resource capacity settings for one or more fleets. For a container fleet, this operation also returns counts for game server container groups.</p> <p>With multi-location fleets, this operation retrieves data for the fleet's home Region only. To retrieve capacity for remote locations, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html</a>.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get capacity data for one or more specific fleets, provide a list of fleet IDs or fleet ARNs. </p> </li> <li> <p>To get capacity data for all fleets, do not provide a fleet identifier. </p> </li> </ul> <p>When requesting multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>FleetCapacity</code> object is returned for each requested fleet ID. Each <code>FleetCapacity</code> object includes a <code>Location</code> property, which is set to the fleet's home Region. Capacity values are returned only for fleets that currently exist.</p> <note> <p>Some API operations may limit the number of fleet IDs that are allowed in one request. If a request exceeds this limit, the request fails and the error message includes the maximum allowed.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Retrieves the resource capacity settings for one or more fleets. For a container fleet, this operation also returns counts for game server container groups.</p> <p>With multi-location fleets, this operation retrieves data for the fleet's home Region only. To retrieve capacity for remote locations, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html</a>.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get capacity data for one or more specific fleets, provide a list of fleet IDs or fleet ARNs. </p> </li> <li> <p>To get capacity data for all fleets, do not provide a fleet identifier. </p> </li> </ul> <p>When requesting multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>FleetCapacity</code> object is returned for each requested fleet ID. Each <code>FleetCapacity</code> object includes a <code>Location</code> property, which is set to the fleet's home Region. Capacity values are returned only for fleets that currently exist.</p> <note> <p>Some API operations may limit the number of fleet IDs that are allowed in one request. If a request exceeds this limit, the request fails and the error message includes the maximum allowed.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
     },
     "DescribeFleetDeployment":{
       "name":"DescribeFleetDeployment",
@@ -788,7 +788,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves information about a managed container fleet deployment. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get information about the latest deployment for a specific fleet. Provide the fleet ID or ARN.</p> </li> <li> <p> Get information about a specific deployment. Provide the fleet ID or ARN and the deployment ID.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, a <code>FleetDeployment</code> object is returned.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves information about a managed container fleet deployment. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get information about the latest deployment for a specific fleet. Provide the fleet ID or ARN.</p> </li> <li> <p> Get information about a specific deployment. Provide the fleet ID or ARN and the deployment ID.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, a <code>FleetDeployment</code> object is returned.</p>"
     },
     "DescribeFleetEvents":{
       "name":"DescribeFleetEvents",
@@ -805,7 +805,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves entries from a fleet's event log. Fleet events are initiated by changes in status, such as during fleet creation and termination, changes in capacity, etc. If a fleet has multiple locations, events are also initiated by changes to status and capacity in remote locations. </p> <p>You can specify a time range to limit the result set. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a collection of event log entries matching the request are returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves entries from a fleet's event log. Fleet events are initiated by changes in status, such as during fleet creation and termination, changes in capacity, etc. If a fleet has multiple locations, events are also initiated by changes to status and capacity in remote locations.</p> <p>You can specify a time range to limit the result set. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a collection of event log entries matching the request are returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "DescribeFleetLocationAttributes":{
       "name":"DescribeFleetLocationAttributes",
@@ -822,7 +822,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves information on a fleet's remote locations, including life-cycle status and any suspended fleet activity. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get data for specific locations, provide a fleet identifier and a list of locations. Location data is returned in the order that it is requested. </p> </li> <li> <p>To get data for all locations, provide a fleet identifier only. Location data is returned in no particular order. </p> </li> </ul> <p>When requesting attributes for multiple locations, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>LocationAttributes</code> object is returned for each requested location. If the fleet does not have a requested location, no information is returned. This operation does not return the home Region. To get information on a fleet's home Region, call <code>DescribeFleetAttributes</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Retrieves information on a fleet's remote locations, including life-cycle status and any suspended fleet activity. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get data for specific locations, provide a fleet identifier and a list of locations. Location data is returned in the order that it is requested. </p> </li> <li> <p>To get data for all locations, provide a fleet identifier only. Location data is returned in no particular order. </p> </li> </ul> <p>When requesting attributes for multiple locations, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>LocationAttributes</code> object is returned for each requested location. If the fleet does not have a requested location, no information is returned. This operation does not return the home Region. To get information on a fleet's home Region, call <code>DescribeFleetAttributes</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting</p>"
     },
     "DescribeFleetLocationCapacity":{
       "name":"DescribeFleetLocationCapacity",
@@ -839,7 +839,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the resource capacity settings for a fleet location. The data returned includes the current capacity (number of EC2 instances) and some scaling settings for the requested fleet location. For a managed container fleet, this operation also returns counts for game server container groups.</p> <p>Use this operation to retrieve capacity information for a fleet's remote location or home Region (you can also retrieve home Region capacity by calling <code>DescribeFleetCapacity</code>).</p> <p>To retrieve capacity data, identify a fleet and location. </p> <p>If successful, a <code>FleetCapacity</code> object is returned for the requested fleet location. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Retrieves the resource capacity settings for a fleet location. The data returned includes the current capacity (number of EC2 instances) and some scaling settings for the requested fleet location. For a managed container fleet, this operation also returns counts for game server container groups.</p> <p>Use this operation to retrieve capacity information for a fleet's remote location or home Region (you can also retrieve home Region capacity by calling <code>DescribeFleetCapacity</code>).</p> <p>To retrieve capacity data, identify a fleet and location. </p> <p>If successful, a <code>FleetCapacity</code> object is returned for the requested fleet location. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
     },
     "DescribeFleetLocationUtilization":{
       "name":"DescribeFleetLocationUtilization",
@@ -856,7 +856,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves current usage data for a fleet location. Utilization data provides a snapshot of current game hosting activity at the requested location. Use this operation to retrieve utilization information for a fleet's remote location or home Region (you can also retrieve home Region utilization by calling <code>DescribeFleetUtilization</code>).</p> <p>To retrieve utilization data, identify a fleet and location. </p> <p>If successful, a <code>FleetUtilization</code> object is returned for the requested fleet location. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves current usage data for a fleet location. Utilization data provides a snapshot of current game hosting activity at the requested location. Use this operation to retrieve utilization information for a fleet's remote location or home Region (you can also retrieve home Region utilization by calling <code>DescribeFleetUtilization</code>).</p> <p>To retrieve utilization data, identify a fleet and location. </p> <p>If successful, a <code>FleetUtilization</code> object is returned for the requested fleet location. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift metrics for fleets</a> </p>"
     },
     "DescribeFleetPortSettings":{
       "name":"DescribeFleetPortSettings",
@@ -873,7 +873,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves a fleet's inbound connection permissions. Connection permissions specify IP addresses and port settings that incoming traffic can use to access server processes in the fleet. Game server processes that are running in the fleet must use a port that falls within this range. </p> <p>Use this operation in the following ways: </p> <ul> <li> <p>To retrieve the port settings for a fleet, identify the fleet's unique identifier. </p> </li> <li> <p>To check the status of recent updates to a fleet remote location, specify the fleet ID and a location. Port setting updates can take time to propagate across all locations. </p> </li> </ul> <p>If successful, a set of <code>IpPermission</code> objects is returned for the requested fleet ID. When specifying a location, this operation returns a pending status. If the requested fleet has been deleted, the result set is empty.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Retrieves a fleet's inbound connection permissions. Connection permissions specify IP addresses and port settings that incoming traffic can use to access server processes in the fleet. Game server processes that are running in the fleet must use a port that falls within this range. </p> <p>Use this operation in the following ways: </p> <ul> <li> <p>To retrieve the port settings for a fleet, identify the fleet's unique identifier. </p> </li> <li> <p>To check the status of recent updates to a fleet remote location, specify the fleet ID and a location. Port setting updates can take time to propagate across all locations. </p> </li> </ul> <p>If successful, a set of <code>IpPermission</code> objects is returned for the requested fleet ID. When specifying a location, this operation returns a pending status. If the requested fleet has been deleted, the result set is empty.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "DescribeFleetUtilization":{
       "name":"DescribeFleetUtilization",
@@ -889,7 +889,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves utilization statistics for one or more fleets. Utilization data provides a snapshot of how the fleet's hosting resources are currently being used. For fleets with remote locations, this operation retrieves data for the fleet's home Region only. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationUtilization.html\">DescribeFleetLocationUtilization</a> to get utilization statistics for a fleet's remote locations.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get utilization data for one or more specific fleets, provide a list of fleet IDs or fleet ARNs. </p> </li> <li> <p>To get utilization data for all fleets, do not provide a fleet identifier. </p> </li> </ul> <p>When requesting multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_FleetUtilization.html\">FleetUtilization</a> object is returned for each requested fleet ID, unless the fleet identifier is not found. Each fleet utilization object includes a <code>Location</code> property, which is set to the fleet's home Region. </p> <note> <p>Some API operations may limit the number of fleet IDs allowed in one request. If a request exceeds this limit, the request fails and the error message includes the maximum allowed.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift Metrics for Fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Retrieves utilization statistics for one or more fleets. Utilization data provides a snapshot of how the fleet's hosting resources are currently being used. For fleets with remote locations, this operation retrieves data for the fleet's home Region only. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationUtilization.html\">DescribeFleetLocationUtilization</a> to get utilization statistics for a fleet's remote locations.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To get utilization data for one or more specific fleets, provide a list of fleet IDs or fleet ARNs. </p> </li> <li> <p>To get utilization data for all fleets, do not provide a fleet identifier. </p> </li> </ul> <p>When requesting multiple fleets, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_FleetUtilization.html\">FleetUtilization</a> object is returned for each requested fleet ID, unless the fleet identifier is not found. Each fleet utilization object includes a <code>Location</code> property, which is set to the fleet's home Region. </p> <note> <p>Some API operations may limit the number of fleet IDs allowed in one request. If a request exceeds this limit, the request fails and the error message includes the maximum allowed.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers Fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-fleet\">GameLift Metrics for Fleets</a> </p>"
     },
     "DescribeGameServer":{
       "name":"DescribeGameServer",
@@ -905,7 +905,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Retrieves information for a registered game server. Information includes game server status, health check info, and the instance that the game server is running on. </p> <p>To retrieve game server information, specify the game server ID. If successful, the requested game server object is returned. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Retrieves information for a registered game server. Information includes game server status, health check info, and the instance that the game server is running on. </p> <p>To retrieve game server information, specify the game server ID. If successful, the requested game server object is returned. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "DescribeGameServerGroup":{
       "name":"DescribeGameServerGroup",
@@ -921,7 +921,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Retrieves information on a game server group. This operation returns only properties related to Amazon GameLift FleetIQ. To view or update properties for the corresponding Auto Scaling group, such as launch template, auto scaling policies, and maximum/minimum group size, access the Auto Scaling group directly.</p> <p>To get attributes for a game server group, provide a group name or ARN value. If successful, a <code>GameServerGroup</code> object is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Retrieves information on a game server group. This operation returns only properties related to Amazon GameLift Servers FleetIQ. To view or update properties for the corresponding Auto Scaling group, such as launch template, auto scaling policies, and maximum/minimum group size, access the Auto Scaling group directly.</p> <p>To get attributes for a game server group, provide a group name or ARN value. If successful, a <code>GameServerGroup</code> object is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "DescribeGameServerInstances":{
       "name":"DescribeGameServerInstances",
@@ -937,7 +937,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Retrieves status information about the Amazon EC2 instances associated with a Amazon GameLift FleetIQ game server group. Use this operation to detect when instances are active or not available to host new game servers.</p> <p>To request status for all instances in the game server group, provide a game server group ID only. To request status for specific instances, provide the game server group ID and one or more instance IDs. Use the pagination parameters to retrieve results in sequential segments. If successful, a collection of <code>GameServerInstance</code> objects is returned. </p> <p>This operation is not designed to be called with every game server claim request; this practice can cause you to exceed your API limit, which results in errors. Instead, as a best practice, cache the results and refresh your cache no more than once every 10 seconds.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Retrieves status information about the Amazon EC2 instances associated with a Amazon GameLift Servers FleetIQ game server group. Use this operation to detect when instances are active or not available to host new game servers.</p> <p>To request status for all instances in the game server group, provide a game server group ID only. To request status for specific instances, provide the game server group ID and one or more instance IDs. Use the pagination parameters to retrieve results in sequential segments. If successful, a collection of <code>GameServerInstance</code> objects is returned. </p> <p>This operation is not designed to be called with every game server claim request; this practice can cause you to exceed your API limit, which results in errors. Instead, as a best practice, cache the results and refresh your cache no more than once every 10 seconds.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "DescribeGameSessionDetails":{
       "name":"DescribeGameSessionDetails",
@@ -955,7 +955,7 @@
         {"shape":"TerminalRoutingStrategyException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves additional game session properties, including the game session protection policy in force, a set of one or more game sessions in a specific fleet location. You can optionally filter the results by current game session status.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To retrieve details for all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID, with an optional status filter. This approach returns details from the fleet's home Region and all remote locations.</p> </li> <li> <p>To retrieve details for all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name, with optional status filter. The location can be the fleet's home Region or any remote location.</p> </li> <li> <p>To retrieve details for a specific game session, provide the game session ID. This approach looks for the game session ID in all fleets that reside in the Amazon Web Services Region defined in the request.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSessionDetail</code> object is returned for each game session that matches the request.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#gamelift-sdk-client-api-find\">Find a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves additional game session properties, including the game session protection policy in force, a set of one or more game sessions in a specific fleet location. You can optionally filter the results by current game session status.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To retrieve details for all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID, with an optional status filter. This approach returns details from the fleet's home Region and all remote locations.</p> </li> <li> <p>To retrieve details for all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name, with optional status filter. The location can be the fleet's home Region or any remote location.</p> </li> <li> <p>To retrieve details for a specific game session, provide the game session ID. This approach looks for the game session ID in all fleets that reside in the Amazon Web Services Region defined in the request.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSessionDetail</code> object is returned for each game session that matches the request.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#gamelift-sdk-client-api-find\">Find a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeGameSessionPlacement":{
       "name":"DescribeGameSessionPlacement",
@@ -971,7 +971,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves information, including current status, about a game session placement request. </p> <p>To get game session placement details, specify the placement ID.</p> <p>This operation is not designed to be continually called to track game session status. This practice can cause you to exceed your API limit, which results in errors. Instead, you must configure an Amazon Simple Notification Service (SNS) topic to receive notifications from FlexMatch or queues. Continuously polling with <code>DescribeGameSessionPlacement</code> should only be used for games in development with low game session usage. </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves information, including current status, about a game session placement request. </p> <p>To get game session placement details, specify the placement ID.</p> <p>This operation is not designed to be continually called to track game session status. This practice can cause you to exceed your API limit, which results in errors. Instead, you must configure an Amazon Simple Notification Service (SNS) topic to receive notifications from FlexMatch or queues. Continuously polling with <code>DescribeGameSessionPlacement</code> should only be used for games in development with low game session usage. </p>"
     },
     "DescribeGameSessionQueues":{
       "name":"DescribeGameSessionQueues",
@@ -987,7 +987,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves the properties for one or more game session queues. When requesting multiple queues, use the pagination parameters to retrieve results as a set of sequential pages. When specifying a list of queues, objects are returned only for queues that currently exist in the Region.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-console.html\"> View Your Queues</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves the properties for one or more game session queues. When requesting multiple queues, use the pagination parameters to retrieve results as a set of sequential pages. When specifying a list of queues, objects are returned only for queues that currently exist in the Region.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-console.html\"> View Your Queues</a> </p>"
     },
     "DescribeGameSessions":{
       "name":"DescribeGameSessions",
@@ -1005,7 +1005,7 @@
         {"shape":"TerminalRoutingStrategyException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves a set of one or more game sessions in a specific fleet location. You can optionally filter the results by current game session status.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To retrieve all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID, with an optional status filter. This approach returns all game sessions in the fleet's home Region and all remote locations.</p> </li> <li> <p>To retrieve all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name, with optional status filter. The location can be the fleet's home Region or any remote location.</p> </li> <li> <p>To retrieve a specific game session, provide the game session ID. This approach looks for the game session ID in all fleets that reside in the Amazon Web Services Region defined in the request.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSession</code> object is returned for each game session that matches the request.</p> <p>This operation is not designed to be continually called to track game session status. This practice can cause you to exceed your API limit, which results in errors. Instead, you must configure an Amazon Simple Notification Service (SNS) topic to receive notifications from FlexMatch or queues. Continuously polling with <code>DescribeGameSessions</code> should only be used for games in development with low game session usage. </p> <p> <i>Available in Amazon GameLift Local.</i> </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#gamelift-sdk-client-api-find\">Find a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves a set of one or more game sessions in a specific fleet location. You can optionally filter the results by current game session status.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To retrieve all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID, with an optional status filter. This approach returns all game sessions in the fleet's home Region and all remote locations.</p> </li> <li> <p>To retrieve all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name, with optional status filter. The location can be the fleet's home Region or any remote location.</p> </li> <li> <p>To retrieve a specific game session, provide the game session ID. This approach looks for the game session ID in all fleets that reside in the Amazon Web Services Region defined in the request.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSession</code> object is returned for each game session that matches the request.</p> <p>This operation is not designed to be continually called to track game session status. This practice can cause you to exceed your API limit, which results in errors. Instead, you must configure an Amazon Simple Notification Service (SNS) topic to receive notifications from FlexMatch or queues. Continuously polling with <code>DescribeGameSessions</code> should only be used for games in development with low game session usage. </p> <p> <i>Available in Amazon GameLift Servers Local.</i> </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#gamelift-sdk-client-api-find\">Find a game session</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeInstances":{
       "name":"DescribeInstances",
@@ -1022,7 +1022,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves information about the EC2 instances in an Amazon GameLift managed fleet, including instance ID, connection data, and status. You can use this operation with a multi-location fleet to get location-specific instance information. As an alternative, use the operations <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute</a> and <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute</a> to retrieve information for compute resources, including EC2 and Anywhere fleets.</p> <p>You can call this operation in the following ways:</p> <ul> <li> <p>To get information on all instances in a fleet's home Region, specify the fleet ID.</p> </li> <li> <p>To get information on all instances in a fleet's remote location, specify the fleet ID and location name.</p> </li> <li> <p>To get information on a specific instance in a fleet, specify the fleet ID and instance ID.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns <code>Instance</code> objects for each requested instance, listed in no particular order. If you call this operation for an Anywhere fleet, you receive an InvalidRequestException.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-remote-access.html\">Remotely connect to fleet instances</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html\">Debug fleet issues</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves information about the EC2 instances in an Amazon GameLift Servers managed fleet, including instance ID, connection data, and status. You can use this operation with a multi-location fleet to get location-specific instance information. As an alternative, use the operations <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute</a> and <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute</a> to retrieve information for compute resources, including EC2 and Anywhere fleets.</p> <p>You can call this operation in the following ways:</p> <ul> <li> <p>To get information on all instances in a fleet's home Region, specify the fleet ID.</p> </li> <li> <p>To get information on all instances in a fleet's remote location, specify the fleet ID and location name.</p> </li> <li> <p>To get information on a specific instance in a fleet, specify the fleet ID and instance ID.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns <code>Instance</code> objects for each requested instance, listed in no particular order. If you call this operation for an Anywhere fleet, you receive an InvalidRequestException.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-remote-access.html\">Remotely connect to fleet instances</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html\">Debug fleet issues</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeMatchmaking":{
       "name":"DescribeMatchmaking",
@@ -1037,7 +1037,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves one or more matchmaking tickets. Use this operation to retrieve ticket information, including--after a successful match is made--connection information for the resulting new game session. </p> <p>To request matchmaking tickets, provide a list of up to 10 ticket IDs. If the request is successful, a ticket object is returned for each requested ID that currently exists.</p> <p>This operation is not designed to be continually called to track matchmaking ticket status. This practice can cause you to exceed your API limit, which results in errors. Instead, as a best practice, set up an Amazon Simple Notification Service to receive notifications, and provide the topic ARN in the matchmaking configuration.</p> <p/> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set Up FlexMatch event notification</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves one or more matchmaking tickets. Use this operation to retrieve ticket information, including--after a successful match is made--connection information for the resulting new game session. </p> <p>To request matchmaking tickets, provide a list of up to 10 ticket IDs. If the request is successful, a ticket object is returned for each requested ID that currently exists.</p> <p>This operation is not designed to be continually called to track matchmaking ticket status. This practice can cause you to exceed your API limit, which results in errors. Instead, as a best practice, set up an Amazon Simple Notification Service to receive notifications, and provide the topic ARN in the matchmaking configuration.</p> <p/> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set Up FlexMatch event notification</a> </p>"
     },
     "DescribeMatchmakingConfigurations":{
       "name":"DescribeMatchmakingConfigurations",
@@ -1052,7 +1052,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the details of FlexMatch matchmaking configurations. </p> <p>This operation offers the following options: (1) retrieve all matchmaking configurations, (2) retrieve configurations for a specified list, or (3) retrieve all configurations that use a specified rule set name. When requesting multiple items, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a configuration is returned for each requested name. When specifying a list of names, only configurations that currently exist are returned. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/matchmaker-build.html\"> Setting up FlexMatch matchmakers</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves the details of FlexMatch matchmaking configurations. </p> <p>This operation offers the following options: (1) retrieve all matchmaking configurations, (2) retrieve configurations for a specified list, or (3) retrieve all configurations that use a specified rule set name. When requesting multiple items, use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a configuration is returned for each requested name. When specifying a list of names, only configurations that currently exist are returned. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/matchmaker-build.html\"> Setting up FlexMatch matchmakers</a> </p>"
     },
     "DescribeMatchmakingRuleSets":{
       "name":"DescribeMatchmakingRuleSets",
@@ -1068,7 +1068,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves the details for FlexMatch matchmaking rule sets. You can request all existing rule sets for the Region, or provide a list of one or more rule set names. When requesting multiple items, use the pagination parameters to retrieve results as a set of sequential pages. If successful, a rule set is returned for each requested name. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves the details for FlexMatch matchmaking rule sets. You can request all existing rule sets for the Region, or provide a list of one or more rule set names. When requesting multiple items, use the pagination parameters to retrieve results as a set of sequential pages. If successful, a rule set is returned for each requested name. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
     },
     "DescribePlayerSessions":{
       "name":"DescribePlayerSessions",
@@ -1084,7 +1084,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves properties for one or more player sessions. </p> <p>This action can be used in the following ways: </p> <ul> <li> <p>To retrieve a specific player session, provide the player session ID only.</p> </li> <li> <p>To retrieve all player sessions in a game session, provide the game session ID only.</p> </li> <li> <p>To retrieve all player sessions for a specific player, provide a player ID only.</p> </li> </ul> <p>To request player sessions, specify either a player session ID, game session ID, or player ID. You can filter this request by player session status. If you provide a specific <code>PlayerSessionId</code> or <code>PlayerId</code>, Amazon GameLift ignores the filter criteria. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>PlayerSession</code> object is returned for each session that matches the request.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves properties for one or more player sessions. </p> <p>This action can be used in the following ways: </p> <ul> <li> <p>To retrieve a specific player session, provide the player session ID only.</p> </li> <li> <p>To retrieve all player sessions in a game session, provide the game session ID only.</p> </li> <li> <p>To retrieve all player sessions for a specific player, provide a player ID only.</p> </li> </ul> <p>To request player sessions, specify either a player session ID, game session ID, or player ID. You can filter this request by player session status. If you provide a specific <code>PlayerSessionId</code> or <code>PlayerId</code>, Amazon GameLift Servers ignores the filter criteria. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>PlayerSession</code> object is returned for each session that matches the request.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeRuntimeConfiguration":{
       "name":"DescribeRuntimeConfiguration",
@@ -1100,7 +1100,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Retrieves a fleet's runtime configuration settings. The runtime configuration determines which server processes run, and how, on computes in the fleet. For managed EC2 fleets, the runtime configuration describes server processes that run on each fleet instance. can update a fleet's runtime configuration at any time using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateRuntimeConfiguration.html\">UpdateRuntimeConfiguration</a>.</p> <p>To get the current runtime configuration for a fleet, provide the fleet ID. </p> <p>If successful, a <code>RuntimeConfiguration</code> object is returned for the requested fleet. If the requested fleet has been deleted, the result set is empty.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-multiprocess.html\">Running multiple processes on a fleet</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves a fleet's runtime configuration settings. The runtime configuration determines which server processes run, and how, on computes in the fleet. For managed EC2 fleets, the runtime configuration describes server processes that run on each fleet instance. You can update a fleet's runtime configuration at any time using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateRuntimeConfiguration.html\">UpdateRuntimeConfiguration</a>.</p> <p>To get the current runtime configuration for a fleet, provide the fleet ID. </p> <p>If successful, a <code>RuntimeConfiguration</code> object is returned for the requested fleet. If the requested fleet has been deleted, the result set is empty.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-multiprocess.html\">Running multiple processes on a fleet</a> </p>"
     },
     "DescribeScalingPolicies":{
       "name":"DescribeScalingPolicies",
@@ -1117,7 +1117,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves all scaling policies applied to a fleet.</p> <p>To get a fleet's scaling policies, specify the fleet ID. You can filter this request by policy status, such as to retrieve only active scaling policies. Use the pagination parameters to retrieve results as a set of sequential pages. If successful, set of <code>ScalingPolicy</code> objects is returned for the fleet.</p> <p>A fleet may have all of its scaling policies suspended. This operation does not affect the status of the scaling policies, which remains ACTIVE.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves all scaling policies applied to a fleet.</p> <p>To get a fleet's scaling policies, specify the fleet ID. You can filter this request by policy status, such as to retrieve only active scaling policies. Use the pagination parameters to retrieve results as a set of sequential pages. If successful, set of <code>ScalingPolicy</code> objects is returned for the fleet.</p> <p>A fleet may have all of its scaling policies suspended. This operation does not affect the status of the scaling policies, which remains ACTIVE.</p>"
     },
     "DescribeScript":{
       "name":"DescribeScript",
@@ -1133,7 +1133,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Retrieves properties for a Realtime script. </p> <p>To request a script record, specify the script ID. If successful, an object containing the script properties is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Realtime Servers</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves properties for a Realtime script. </p> <p>To request a script record, specify the script ID. If successful, an object containing the script properties is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Servers Amazon GameLift Servers Realtime</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeVpcPeeringAuthorizations":{
       "name":"DescribeVpcPeeringAuthorizations",
@@ -1148,7 +1148,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves valid VPC peering authorizations that are pending for the Amazon Web Services account. This operation returns all VPC peering authorizations and requests for peering. This includes those initiated and received by this account. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves valid VPC peering authorizations that are pending for the Amazon Web Services account. This operation returns all VPC peering authorizations and requests for peering. This includes those initiated and received by this account. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "DescribeVpcPeeringConnections":{
       "name":"DescribeVpcPeeringConnections",
@@ -1164,7 +1164,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves information on VPC peering connections. Use this operation to get peering information for all fleets or for one specific fleet ID. </p> <p>To retrieve connection information, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift fleets. Specify a fleet ID or leave the parameter empty to retrieve all connection records. If successful, the retrieved information includes both active and pending connections. Active connections identify the IpV4 CIDR block that the VPC uses to connect. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves information on VPC peering connections. Use this operation to get peering information for all fleets or for one specific fleet ID. </p> <p>To retrieve connection information, call this operation from the Amazon Web Services account that is used to manage the Amazon GameLift Servers fleets. Specify a fleet ID or leave the parameter empty to retrieve all connection records. If successful, the retrieved information includes both active and pending connections. Active connections identify the IpV4 CIDR block that the VPC uses to connect. </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "GetComputeAccess":{
       "name":"GetComputeAccess",
@@ -1181,7 +1181,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Requests authorization to remotely connect to a hosting resource in a Amazon GameLift managed fleet. This operation is not used with Amazon GameLift Anywhere fleets.</p> <p> <b>Request options</b> </p> <p>To request access to a compute, specify the compute name and the fleet ID.</p> <p> <b>Results</b> </p> <p>If successful, this operation returns a set of temporary Amazon Web Services credentials, including a two-part access key and a session token.</p> <ul> <li> <p>With a managed EC2 fleet (where compute type is <code>EC2</code>), use these credentials with Amazon EC2 Systems Manager (SSM) to start a session with the compute. For more details, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli\"> Starting a session (CLI)</a> in the <i>Amazon EC2 Systems Manager User Guide</i>.</p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Requests authorization to remotely connect to a hosting resource in a Amazon GameLift Servers managed fleet. This operation is not used with Amazon GameLift Servers Anywhere fleets.</p> <p> <b>Request options</b> </p> <p>Provide the fleet ID and compute name. The compute name varies depending on the type of fleet.</p> <ul> <li> <p>For a compute in a managed EC2 fleet, provide an instance ID. Each instance in the fleet is a compute.</p> </li> <li> <p>For a compute in a managed container fleet, provide a compute name. In a container fleet, each game server container group on a fleet instance is assigned a compute name. </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns a set of temporary Amazon Web Services credentials, including a two-part access key and a session token.</p> <ul> <li> <p>With a managed EC2 fleet (where compute type is <code>EC2</code>), use these credentials with Amazon EC2 Systems Manager (SSM) to start a session with the compute. For more details, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli\"> Starting a session (CLI)</a> in the <i>Amazon EC2 Systems Manager User Guide</i>.</p> </li> </ul>"
     },
     "GetComputeAuthToken":{
       "name":"GetComputeAuthToken",
@@ -1198,7 +1198,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Requests an authentication token from Amazon GameLift for a compute resource in an Amazon GameLift fleet. Game servers that are running on the compute use this token to communicate with the Amazon GameLift service, such as when calling the Amazon GameLift server SDK action <code>InitSDK()</code>. Authentication tokens are valid for a limited time span, so you need to request a fresh token before the current token expires.</p> <p> <b>Request options</b> </p> <ul> <li> <p>For managed EC2 fleets (compute type <code>EC2</code>), auth token retrieval and refresh is handled automatically. All game servers that are running on all fleet instances have access to a valid auth token.</p> </li> <li> <p>For Anywhere fleets (compute type <code>ANYWHERE</code>), if you're using the Amazon GameLift Agent, auth token retrieval and refresh is handled automatically for any compute where the Agent is running. If you're not using the Agent, create a mechanism to retrieve and refresh auth tokens for computes that are running game server processes.</p> </li> </ul> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-anywhere.html\">Create an Anywhere fleet</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-testing.html\">Test your integration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Server SDK reference guides</a> (for version 5.x)</p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Requests an authentication token from Amazon GameLift Servers for a compute resource in an Amazon GameLift Servers fleet. Game servers that are running on the compute use this token to communicate with the Amazon GameLift Servers service, such as when calling the Amazon GameLift Servers server SDK action <code>InitSDK()</code>. Authentication tokens are valid for a limited time span, so you need to request a fresh token before the current token expires.</p> <p> <b>Request options</b> </p> <ul> <li> <p>For managed EC2 fleets (compute type <code>EC2</code>), auth token retrieval and refresh is handled automatically. All game servers that are running on all fleet instances have access to a valid auth token.</p> </li> <li> <p>For Anywhere fleets (compute type <code>ANYWHERE</code>), if you're using the Amazon GameLift Servers Agent, auth token retrieval and refresh is handled automatically for any compute where the Agent is running. If you're not using the Agent, create a mechanism to retrieve and refresh auth tokens for computes that are running game server processes.</p> </li> </ul> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-anywhere.html\">Create an Anywhere fleet</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-testing.html\">Test your integration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Server SDK reference guides</a> (for version 5.x)</p> </li> </ul>"
     },
     "GetGameSessionLogUrl":{
       "name":"GetGameSessionLogUrl",
@@ -1214,7 +1214,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Retrieves the location of stored game session logs for a specified game session on Amazon GameLift managed fleets. When a game session is terminated, Amazon GameLift automatically stores the logs in Amazon S3 and retains them for 14 days. Use this URL to download the logs.</p> <note> <p>See the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift\">Amazon Web Services Service Limits</a> page for maximum log file sizes. Log files that exceed this limit are not saved.</p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves the location of stored game session logs for a specified game session on Amazon GameLift Servers managed fleets. When a game session is terminated, Amazon GameLift Servers automatically stores the logs in Amazon S3 and retains them for 14 days. Use this URL to download the logs.</p> <note> <p>See the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift\">Amazon Web Services Service Limits</a> page for maximum log file sizes. Log files that exceed this limit are not saved.</p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "GetInstanceAccess":{
       "name":"GetInstanceAccess",
@@ -1230,7 +1230,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Requests authorization to remotely connect to an instance in an Amazon GameLift managed fleet. Use this operation to connect to instances with game servers that use Amazon GameLift server SDK 4.x or earlier. To connect to instances with game servers that use server SDK 5.x or later, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess</a>.</p> <p>To request access to an instance, specify IDs for the instance and the fleet it belongs to. You can retrieve instance IDs for a fleet by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeInstances.html\">DescribeInstances</a> with the fleet ID. </p> <p>If successful, this operation returns an IP address and credentials. The returned credentials match the operating system of the instance, as follows: </p> <ul> <li> <p>For a Windows instance: returns a user name and secret (password) for use with a Windows Remote Desktop client. </p> </li> <li> <p>For a Linux instance: returns a user name and secret (RSA private key) for use with an SSH client. You must save the secret to a <code>.pem</code> file. If you're using the CLI, see the example <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess.html#API_GetInstanceAccess_Examples\"> Get credentials for a Linux instance</a> for tips on automatically saving the secret to a <code>.pem</code> file. </p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-remote-access.html\">Remotely connect to fleet instances</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html\">Debug fleet issues</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Requests authorization to remotely connect to an instance in an Amazon GameLift Servers managed fleet. Use this operation to connect to instances with game servers that use Amazon GameLift Servers server SDK 4.x or earlier. To connect to instances with game servers that use server SDK 5.x or later, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess</a>.</p> <p>To request access to an instance, specify IDs for the instance and the fleet it belongs to. You can retrieve instance IDs for a fleet by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeInstances.html\">DescribeInstances</a> with the fleet ID. </p> <p>If successful, this operation returns an IP address and credentials. The returned credentials match the operating system of the instance, as follows: </p> <ul> <li> <p>For a Windows instance: returns a user name and secret (password) for use with a Windows Remote Desktop client. </p> </li> <li> <p>For a Linux instance: returns a user name and secret (RSA private key) for use with an SSH client. You must save the secret to a <code>.pem</code> file. If you're using the CLI, see the example <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess.html#API_GetInstanceAccess_Examples\"> Get credentials for a Linux instance</a> for tips on automatically saving the secret to a <code>.pem</code> file. </p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-remote-access.html\">Remotely connect to fleet instances</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html\">Debug fleet issues</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ListAliases":{
       "name":"ListAliases",
@@ -1245,7 +1245,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves all aliases for this Amazon Web Services account. You can filter the result set by alias name and/or routing strategy type. Use the pagination parameters to retrieve results in sequential pages.</p> <note> <p>Returned aliases are not listed in any particular order.</p> </note> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves all aliases for this Amazon Web Services account. You can filter the result set by alias name and/or routing strategy type. Use the pagination parameters to retrieve results in sequential pages.</p> <note> <p>Returned aliases are not listed in any particular order.</p> </note> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ListBuilds":{
       "name":"ListBuilds",
@@ -1260,7 +1260,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves build resources for all builds associated with the Amazon Web Services account in use. You can limit results to builds that are in a specific status by using the <code>Status</code> parameter. Use the pagination parameters to retrieve results in a set of sequential pages. </p> <note> <p>Build resources are not listed in any particular order.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves build resources for all builds associated with the Amazon Web Services account in use. You can limit results to builds that are in a specific status by using the <code>Status</code> parameter. Use the pagination parameters to retrieve results in </p> <note> <p>Build resources are not listed in any particular order.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ListCompute":{
       "name":"ListCompute",
@@ -1276,7 +1276,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves information on the compute resources in an Amazon GameLift fleet. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Retrieve a list of all computes in a fleet. Specify a fleet ID. </p> </li> <li> <p>Retrieve a list of all computes in a specific fleet location. Specify a fleet ID and location.</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns information on a set of computes. Depending on the type of fleet, the result includes the following information: </p> <ul> <li> <p>For managed EC2 fleets (compute type <code>EC2</code>), this operation returns information about the EC2 instance. Compute names are EC2 instance IDs.</p> </li> <li> <p>For Anywhere fleets (compute type <code>ANYWHERE</code>), this operation returns compute names and details as provided when the compute was registered with <code>RegisterCompute</code>. This includes <code>GameLiftServiceSdkEndpoint</code> or <code>GameLiftAgentEndpoint</code>.</p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves information on the compute resources in an Amazon GameLift Servers fleet. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p> <b>Request options</b> </p> <ul> <li> <p>Retrieve a list of all computes in a fleet. Specify a fleet ID. </p> </li> <li> <p>Retrieve a list of all computes in a specific fleet location. Specify a fleet ID and location.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns information on a set of computes. Depending on the type of fleet, the result includes the following information: </p> <ul> <li> <p>For a managed EC2 fleet (compute type <code>EC2</code>), this operation returns information about the EC2 instance. Compute names are EC2 instance IDs.</p> </li> <li> <p>For an Anywhere fleet (compute type <code>ANYWHERE</code>), this operation returns compute names and details from when the compute was registered with <code>RegisterCompute</code>. This includes <code>GameLiftServiceSdkEndpoint</code> or <code>GameLiftAgentEndpoint</code>.</p> </li> </ul>"
     },
     "ListContainerFleets":{
       "name":"ListContainerFleets",
@@ -1292,7 +1292,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves a collection of container fleet resources in an Amazon Web Services Region. For fleets that have multiple locations, this operation retrieves fleets based on their home Region only.</p> <p> <b>Request options</b> </p> <ul> <li> <p>Get a list of all fleets. Call this operation without specifying a container group definition. </p> </li> <li> <p>Get a list of fleets filtered by container group definition. Provide the container group definition name or ARN value.</p> </li> <li> <p>To get a list of all Realtime Servers fleets with a specific configuration script, provide the script ID. </p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns a collection of container fleets that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Fleet IDs are returned in no particular order.</p> </note>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves a collection of container fleet resources in an Amazon Web Services Region. For fleets that have multiple locations, this operation retrieves fleets based on their home Region only.</p> <p> <b>Request options</b> </p> <ul> <li> <p>Get a list of all fleets. Call this operation without specifying a container group definition. </p> </li> <li> <p>Get a list of fleets filtered by container group definition. Provide the container group definition name or ARN value.</p> </li> <li> <p>To get a list of all Amazon GameLift Servers Realtime fleets with a specific configuration script, provide the script ID. </p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns a collection of container fleets that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Fleet IDs are returned in no particular order.</p> </note>"
     },
     "ListContainerGroupDefinitionVersions":{
       "name":"ListContainerGroupDefinitionVersions",
@@ -1309,7 +1309,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves all versions of a container group definition. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Get all versions of a specified container group definition. Specify the container group definition name or ARN value. (If the ARN value has a version number, it's ignored.)</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a set of container group definition versions that match the request.</p> <note> <p>This operation returns the list of container group definitions in descending version order (latest first). </p> </note> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves all versions of a container group definition. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Get all versions of a specified container group definition. Specify the container group definition name or ARN value. (If the ARN value has a version number, it's ignored.)</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a set of container group definition versions that match the request.</p> <note> <p>This operation returns the list of container group definitions in descending version order (latest first). </p> </note> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html\">Manage a container group definition</a> </p> </li> </ul>"
     },
     "ListContainerGroupDefinitions":{
       "name":"ListContainerGroupDefinitions",
@@ -1325,7 +1325,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves container group definitions for the Amazon Web Services account and Amazon Web Services Region. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p>This operation returns only the latest version of each definition. To retrieve all versions of a container group definition, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListContainerGroupDefinitionVersions.html\">ListContainerGroupDefinitionVersions</a>.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Retrieve the most recent versions of all container group definitions. </p> </li> <li> <p>Retrieve the most recent versions of all container group definitions, filtered by type. Specify the container group type to filter on. </p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a set of container group definition versions that match the request.</p> <note> <p>This operation returns the list of container group definitions in no particular order. </p> </note>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves container group definitions for the Amazon Web Services account and Amazon Web Services Region. Use the pagination parameters to retrieve results in a set of sequential pages.</p> <p>This operation returns only the latest version of each definition. To retrieve all versions of a container group definition, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListContainerGroupDefinitionVersions.html\">ListContainerGroupDefinitionVersions</a>.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Retrieve the most recent versions of all container group definitions. </p> </li> <li> <p>Retrieve the most recent versions of all container group definitions, filtered by type. Specify the container group type to filter on. </p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of a set of container group definition versions that match the request.</p> <note> <p>This operation returns the list of container group definitions in no particular order. </p> </note>"
     },
     "ListFleetDeployments":{
       "name":"ListFleetDeployments",
@@ -1342,7 +1342,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves a collection of container fleet deployments in an Amazon Web Services Region. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get a list of all deployments. Call this operation without specifying a fleet ID. </p> </li> <li> <p>Get a list of all deployments for a fleet. Specify the container fleet ID or ARN value.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns a list of deployments that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Deployments are returned starting with the latest.</p> </note>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Retrieves a collection of container fleet deployments in an Amazon Web Services Region. Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p> <b>Request options</b> </p> <ul> <li> <p>Get a list of all deployments. Call this operation without specifying a fleet ID. </p> </li> <li> <p>Get a list of all deployments for a fleet. Specify the container fleet ID or ARN value.</p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation returns a list of deployments that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Deployments are returned starting with the latest.</p> </note>"
     },
     "ListFleets":{
       "name":"ListFleets",
@@ -1358,7 +1358,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Retrieves a collection of fleet resources in an Amazon Web Services Region. You can filter the result set to find only those fleets that are deployed with a specific build or script. For fleets that have multiple locations, this operation retrieves fleets based on their home Region only.</p> <p>You can use operation in the following ways: </p> <ul> <li> <p>To get a list of all fleets in a Region, don't provide a build or script identifier.</p> </li> <li> <p>To get a list of all fleets where a specific game build is deployed, provide the build ID.</p> </li> <li> <p>To get a list of all Realtime Servers fleets with a specific configuration script, provide the script ID. </p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns a list of fleet IDs that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Fleet IDs are returned in no particular order.</p> </note>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves a collection of fleet resources in an Amazon Web Services Region. You can filter the result set to find only those fleets that are deployed with a specific build or script. For fleets that have multiple locations, this operation retrieves fleets based on their home Region only.</p> <p>You can use operation in the following ways: </p> <ul> <li> <p>To get a list of all fleets in a Region, don't provide a build or script identifier.</p> </li> <li> <p>To get a list of all fleets where a specific game build is deployed, provide the build ID.</p> </li> <li> <p>To get a list of all Amazon GameLift Servers Realtime fleets with a specific configuration script, provide the script ID. </p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, this operation returns a list of fleet IDs that match the request parameters. A NextToken value is also returned if there are more result pages to retrieve.</p> <note> <p>Fleet IDs are returned in no particular order.</p> </note>"
     },
     "ListGameServerGroups":{
       "name":"ListGameServerGroups",
@@ -1373,7 +1373,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Lists a game server groups.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Lists a game server groups.</p>"
     },
     "ListGameServers":{
       "name":"ListGameServers",
@@ -1388,7 +1388,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Retrieves information on all game servers that are currently active in a specified game server group. You can opt to sort the list by game server age. Use the pagination parameters to retrieve results in a set of sequential segments. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Retrieves information on all game servers that are currently active in a specified game server group. You can opt to sort the list by game server age. Use the pagination parameters to retrieve results in a set of sequential segments. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "ListLocations":{
       "name":"ListLocations",
@@ -1403,7 +1403,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Lists all custom and Amazon Web Services locations.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Anywhere</p> <p>Lists all custom and Amazon Web Services locations where Amazon GameLift Servers can host game servers. </p> <p>Note that if you call this API using a location that doesn't have a service endpoint, such as one that can only be a remote location in a multi-location fleet, the API returns an error.</p> <p>Consult the table of supported locations in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Amazon GameLift Servers service locations</a> to identify home Regions that support single and multi-location fleets.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Service locations</a> </p>"
     },
     "ListScripts":{
       "name":"ListScripts",
@@ -1418,7 +1418,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves script records for all Realtime scripts that are associated with the Amazon Web Services account in use. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Realtime Servers</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves script records for all Realtime scripts that are associated with the Amazon Web Services account in use. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Servers Amazon GameLift Servers Realtime</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1435,7 +1435,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves all tags assigned to a Amazon GameLift resource. Use resource tags to organize Amazon Web Services resources for a range of purposes. This operation handles the permissions necessary to manage tags for Amazon GameLift resources that support tagging.</p> <p>To list tags for a resource, specify the unique ARN value for the resource.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves all tags assigned to a Amazon GameLift Servers resource. Use resource tags to organize Amazon Web Services resources for a range of purposes. This operation handles the permissions necessary to manage tags for Amazon GameLift Servers resources that support tagging.</p> <p>To list tags for a resource, specify the unique ARN value for the resource.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "PutScalingPolicy":{
       "name":"PutScalingPolicy",
@@ -1452,7 +1452,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Creates or updates a scaling policy for a fleet. Scaling policies are used to automatically scale a fleet's hosting capacity to meet player demand. An active scaling policy instructs Amazon GameLift to track a fleet metric and automatically change the fleet's capacity when a certain threshold is reached. There are two types of scaling policies: target-based and rule-based. Use a target-based policy to quickly and efficiently manage fleet scaling; this option is the most commonly used. Use rule-based policies when you need to exert fine-grained control over auto-scaling. </p> <p>Fleets can have multiple scaling policies of each type in force at the same time; you can have one target-based policy, one or multiple rule-based scaling policies, or both. We recommend caution, however, because multiple auto-scaling policies can have unintended consequences.</p> <p>Learn more about how to work with auto-scaling in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-autoscaling.html\">Set Up Fleet Automatic Scaling</a>.</p> <p> <b>Target-based policy</b> </p> <p>A target-based policy tracks a single metric: PercentAvailableGameSessions. This metric tells us how much of a fleet's hosting capacity is ready to host game sessions but is not currently in use. This is the fleet's buffer; it measures the additional player demand that the fleet could handle at current capacity. With a target-based policy, you set your ideal buffer size and leave it to Amazon GameLift to take whatever action is needed to maintain that target. </p> <p>For example, you might choose to maintain a 10% buffer for a fleet that has the capacity to host 100 simultaneous game sessions. This policy tells Amazon GameLift to take action whenever the fleet's available capacity falls below or rises above 10 game sessions. Amazon GameLift will start new instances or stop unused instances in order to return to the 10% buffer. </p> <p>To create or update a target-based policy, specify a fleet ID and name, and set the policy type to \"TargetBased\". Specify the metric to track (PercentAvailableGameSessions) and reference a <code>TargetConfiguration</code> object with your desired buffer value. Exclude all other parameters. On a successful request, the policy name is returned. The scaling policy is automatically in force as soon as it's successfully created. If the fleet's auto-scaling actions are temporarily suspended, the new policy will be in force once the fleet actions are restarted.</p> <p> <b>Rule-based policy</b> </p> <p>A rule-based policy tracks specified fleet metric, sets a threshold value, and specifies the type of action to initiate when triggered. With a rule-based policy, you can select from several available fleet metrics. Each policy specifies whether to scale up or scale down (and by how much), so you need one policy for each type of action. </p> <p>For example, a policy may make the following statement: \"If the percentage of idle instances is greater than 20% for more than 15 minutes, then reduce the fleet capacity by 10%.\"</p> <p>A policy's rule statement has the following structure:</p> <p>If <code>[MetricName]</code> is <code>[ComparisonOperator]</code> <code>[Threshold]</code> for <code>[EvaluationPeriods]</code> minutes, then <code>[ScalingAdjustmentType]</code> to/by <code>[ScalingAdjustment]</code>.</p> <p>To implement the example, the rule statement would look like this:</p> <p>If <code>[PercentIdleInstances]</code> is <code>[GreaterThanThreshold]</code> <code>[20]</code> for <code>[15]</code> minutes, then <code>[PercentChangeInCapacity]</code> to/by <code>[10]</code>.</p> <p>To create or update a scaling policy, specify a unique combination of name and fleet ID, and set the policy type to \"RuleBased\". Specify the parameter values for a policy rule statement. On a successful request, the policy name is returned. Scaling policies are automatically in force as soon as they're successfully created. If the fleet's auto-scaling actions are temporarily suspended, the new policy will be in force once the fleet actions are restarted.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Creates or updates a scaling policy for a fleet. Scaling policies are used to automatically scale a fleet's hosting capacity to meet player demand. An active scaling policy instructs Amazon GameLift Servers to track a fleet metric and automatically change the fleet's capacity when a certain threshold is reached. There are two types of scaling policies: target-based and rule-based. Use a target-based policy to quickly and efficiently manage fleet scaling; this option is the most commonly used. Use rule-based policies when you need to exert fine-grained control over auto-scaling. </p> <p>Fleets can have multiple scaling policies of each type in force at the same time; you can have one target-based policy, one or multiple rule-based scaling policies, or both. We recommend caution, however, because multiple auto-scaling policies can have unintended consequences.</p> <p>Learn more about how to work with auto-scaling in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-autoscaling.html\">Set Up Fleet Automatic Scaling</a>.</p> <p> <b>Target-based policy</b> </p> <p>A target-based policy tracks a single metric: PercentAvailableGameSessions. This metric tells us how much of a fleet's hosting capacity is ready to host game sessions but is not currently in use. This is the fleet's buffer; it measures the additional player demand that the fleet could handle at current capacity. With a target-based policy, you set your ideal buffer size and leave it to Amazon GameLift Servers to take whatever action is needed to maintain that target. </p> <p>For example, you might choose to maintain a 10% buffer for a fleet that has the capacity to host 100 simultaneous game sessions. This policy tells Amazon GameLift Servers to take action whenever the fleet's available capacity falls below or rises above 10 game sessions. Amazon GameLift Servers will start new instances or stop unused instances in order to return to the 10% buffer. </p> <p>To create or update a target-based policy, specify a fleet ID and name, and set the policy type to \"TargetBased\". Specify the metric to track (PercentAvailableGameSessions) and reference a <code>TargetConfiguration</code> object with your desired buffer value. Exclude all other parameters. On a successful request, the policy name is returned. The scaling policy is automatically in force as soon as it's successfully created. If the fleet's auto-scaling actions are temporarily suspended, the new policy will be in force once the fleet actions are restarted.</p> <p> <b>Rule-based policy</b> </p> <p>A rule-based policy tracks specified fleet metric, sets a threshold value, and specifies the type of action to initiate when triggered. With a rule-based policy, you can select from several available fleet metrics. Each policy specifies whether to scale up or scale down (and by how much), so you need one policy for each type of action. </p> <p>For example, a policy may make the following statement: \"If the percentage of idle instances is greater than 20% for more than 15 minutes, then reduce the fleet capacity by 10%.\"</p> <p>A policy's rule statement has the following structure:</p> <p>If <code>[MetricName]</code> is <code>[ComparisonOperator]</code> <code>[Threshold]</code> for <code>[EvaluationPeriods]</code> minutes, then <code>[ScalingAdjustmentType]</code> to/by <code>[ScalingAdjustment]</code>.</p> <p>To implement the example, the rule statement would look like this:</p> <p>If <code>[PercentIdleInstances]</code> is <code>[GreaterThanThreshold]</code> <code>[20]</code> for <code>[15]</code> minutes, then <code>[PercentChangeInCapacity]</code> to/by <code>[10]</code>.</p> <p>To create or update a scaling policy, specify a unique combination of name and fleet ID, and set the policy type to \"RuleBased\". Specify the parameter values for a policy rule statement. On a successful request, the policy name is returned. Scaling policies are automatically in force as soon as they're successfully created. If the fleet's auto-scaling actions are temporarily suspended, the new policy will be in force once the fleet actions are restarted.</p>"
     },
     "RegisterCompute":{
       "name":"RegisterCompute",
@@ -1470,7 +1470,7 @@
         {"shape":"NotReadyException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Registers a compute resource in an Amazon GameLift Anywhere fleet. </p> <p>For an Anywhere fleet that's running the Amazon GameLift Agent, the Agent handles all compute registry tasks for you. For an Anywhere fleet that doesn't use the Agent, call this operation to register fleet computes.</p> <p>To register a compute, give the compute a name (must be unique within the fleet) and specify the compute resource's DNS name or IP address. Provide a fleet ID and a fleet location to associate with the compute being registered. You can optionally include the path to a TLS certificate on the compute resource.</p> <p>If successful, this operation returns compute details, including an Amazon GameLift SDK endpoint or Agent endpoint. Game server processes running on the compute can use this endpoint to communicate with the Amazon GameLift service. Each server process includes the SDK endpoint in its call to the Amazon GameLift server SDK action <code>InitSDK()</code>. </p> <p>To view compute details, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute.html\">DescribeCompute</a> with the compute name. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-anywhere.html\">Create an Anywhere fleet</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-testing.html\">Test your integration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Server SDK reference guides</a> (for version 5.x)</p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Anywhere, Container</p> <p>Registers a compute resource in an Amazon GameLift Servers Anywhere fleet. </p> <p>For an Anywhere fleet that's running the Amazon GameLift Servers Agent, the Agent handles all compute registry tasks for you. For an Anywhere fleet that doesn't use the Agent, call this operation to register fleet computes.</p> <p>To register a compute, give the compute a name (must be unique within the fleet) and specify the compute resource's DNS name or IP address. Provide a fleet ID and a fleet location to associate with the compute being registered. You can optionally include the path to a TLS certificate on the compute resource.</p> <p>If successful, this operation returns compute details, including an Amazon GameLift Servers SDK endpoint or Agent endpoint. Game server processes running on the compute can use this endpoint to communicate with the Amazon GameLift Servers service. Each server process includes the SDK endpoint in its call to the Amazon GameLift Servers server SDK action <code>InitSDK()</code>. </p> <p>To view compute details, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeCompute.html\">DescribeCompute</a> with the compute name. </p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-anywhere.html\">Create an Anywhere fleet</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-testing.html\">Test your integration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Server SDK reference guides</a> (for version 5.x)</p> </li> </ul>"
     },
     "RegisterGameServer":{
       "name":"RegisterGameServer",
@@ -1487,7 +1487,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Creates a new game server resource and notifies Amazon GameLift FleetIQ that the game server is ready to host gameplay and players. This operation is called by a game server process that is running on an instance in a game server group. Registering game servers enables Amazon GameLift FleetIQ to track available game servers and enables game clients and services to claim a game server for a new game session. </p> <p>To register a game server, identify the game server group and instance where the game server is running, and provide a unique identifier for the game server. You can also include connection and game server data.</p> <p>Once a game server is successfully registered, it is put in status <code>AVAILABLE</code>. A request to register a game server may fail if the instance it is running on is in the process of shutting down as part of instance balancing or scale-down activity. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Creates a new game server resource and notifies Amazon GameLift Servers FleetIQ that the game server is ready to host gameplay and players. This operation is called by a game server process that is running on an instance in a game server group. Registering game servers enables Amazon GameLift Servers FleetIQ to track available game servers and enables game clients and services to claim a game server for a new game session. </p> <p>To register a game server, identify the game server group and instance where the game server is running, and provide a unique identifier for the game server. You can also include connection and game server data.</p> <p>Once a game server is successfully registered, it is put in status <code>AVAILABLE</code>. A request to register a game server may fail if the instance it is running on is in the process of shutting down as part of instance balancing or scale-down activity. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "RequestUploadCredentials":{
       "name":"RequestUploadCredentials",
@@ -1503,7 +1503,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves a fresh set of credentials for use when uploading a new set of game build files to Amazon GameLift's Amazon S3. This is done as part of the build creation process; see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateBuild.html\">CreateBuild</a>.</p> <p>To request new credentials, specify the build ID as returned with an initial <code>CreateBuild</code> request. If successful, a new set of credentials are returned, along with the S3 storage location associated with the build ID.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Retrieves a fresh set of credentials for use when uploading a new set of game build files to Amazon GameLift Servers's Amazon S3. This is done as part of the build creation process; see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateBuild.html\">CreateBuild</a>.</p> <p>To request new credentials, specify the build ID as returned with an initial <code>CreateBuild</code> request. If successful, a new set of credentials are returned, along with the S3 storage location associated with the build ID.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-cli-uploading.html#gamelift-build-cli-uploading-create-build\"> Create a Build with Files in S3</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ResolveAlias":{
       "name":"ResolveAlias",
@@ -1520,7 +1520,7 @@
         {"shape":"TerminalRoutingStrategyException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Attempts to retrieve a fleet ID that is associated with an alias. Specify a unique alias identifier.</p> <p>If the alias has a <code>SIMPLE</code> routing strategy, Amazon GameLift returns a fleet ID. If the alias has a <code>TERMINAL</code> routing strategy, the result is a <code>TerminalRoutingStrategyException</code>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Attempts to retrieve a fleet ID that is associated with an alias. Specify a unique alias identifier.</p> <p>If the alias has a <code>SIMPLE</code> routing strategy, Amazon GameLift Servers returns a fleet ID. If the alias has a <code>TERMINAL</code> routing strategy, the result is a <code>TerminalRoutingStrategyException</code>.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ResumeGameServerGroup":{
       "name":"ResumeGameServerGroup",
@@ -1536,7 +1536,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Reinstates activity on a game server group after it has been suspended. A game server group might be suspended by the <a href=\"gamelift/latest/apireference/API_SuspendGameServerGroup.html\">SuspendGameServerGroup</a> operation, or it might be suspended involuntarily due to a configuration problem. In the second case, you can manually resume activity on the group once the configuration problem has been resolved. Refer to the game server group status and status reason for more information on why group activity is suspended.</p> <p>To resume activity, specify a game server group ARN and the type of activity to be resumed. If successful, a <code>GameServerGroup</code> object is returned showing that the resumed activity is no longer listed in <code>SuspendedActions</code>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Reinstates activity on a game server group after it has been suspended. A game server group might be suspended by the <a href=\"gamelift/latest/apireference/API_SuspendGameServerGroup.html\">SuspendGameServerGroup</a> operation, or it might be suspended involuntarily due to a configuration problem. In the second case, you can manually resume activity on the group once the configuration problem has been resolved. Refer to the game server group status and status reason for more information on why group activity is suspended.</p> <p>To resume activity, specify a game server group ARN and the type of activity to be resumed. If successful, a <code>GameServerGroup</code> object is returned showing that the resumed activity is no longer listed in <code>SuspendedActions</code>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "SearchGameSessions":{
       "name":"SearchGameSessions",
@@ -1554,7 +1554,7 @@
         {"shape":"TerminalRoutingStrategyException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Retrieves all active game sessions that match a set of search criteria and sorts them into a specified order. </p> <p>This operation is not designed to continually track game session status because that practice can cause you to exceed your API limit and generate errors. Instead, configure an Amazon Simple Notification Service (Amazon SNS) topic to receive notifications from a matchmaker or a game session placement queue.</p> <p>When searching for game sessions, you specify exactly where you want to search and provide a search filter expression, a sort expression, or both. A search request can search only one fleet, but it can search all of a fleet's locations. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To search all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID. This approach returns game sessions in the fleet's home Region and all remote locations that fit the search criteria.</p> </li> <li> <p>To search all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name. For location, you can specify a fleet's home Region or any remote location.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSession</code> object is returned for each game session that matches the request. Search finds game sessions that are in <code>ACTIVE</code> status only. To retrieve information on game sessions in other statuses, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessions.html\">DescribeGameSessions</a>.</p> <p>To set search and sort criteria, create a filter expression using the following game session attributes. For game session search examples, see the Examples section of this topic.</p> <ul> <li> <p> <b>gameSessionId</b> -- A unique identifier for the game session. You can use either a <code>GameSessionId</code> or <code>GameSessionArn</code> value. </p> </li> <li> <p> <b>gameSessionName</b> -- Name assigned to a game session. Game session names do not need to be unique to a game session.</p> </li> <li> <p> <b>gameSessionProperties</b> -- A set of key-value pairs that can store custom data in a game session. For example: <code>{\"Key\": \"difficulty\", \"Value\": \"novice\"}</code>. The filter expression must specify the <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameProperty\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameProperty</a> -- a <code>Key</code> and a string <code>Value</code> to search for the game sessions.</p> <p>For example, to search for the above key-value pair, specify the following search filter: <code>gameSessionProperties.difficulty = \"novice\"</code>. All game property values are searched as strings.</p> <p> For examples of searching game sessions, see the ones below, and also see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#game-properties-search\">Search game sessions by game property</a>. </p> </li> <li> <p> <b>maximumSessions</b> -- Maximum number of player sessions allowed for a game session.</p> </li> <li> <p> <b>creationTimeMillis</b> -- Value indicating when a game session was created. It is expressed in Unix time as milliseconds.</p> </li> <li> <p> <b>playerSessionCount</b> -- Number of players currently connected to a game session. This value changes rapidly as players join the session or drop out.</p> </li> <li> <p> <b>hasAvailablePlayerSessions</b> -- Boolean value indicating whether a game session has reached its maximum number of players. It is highly recommended that all search requests include this filter attribute to optimize search performance and return only sessions that players can join. </p> </li> </ul> <note> <p>Returned values for <code>playerSessionCount</code> and <code>hasAvailablePlayerSessions</code> change quickly as players join sessions and others drop out. Results should be considered a snapshot in time. Be sure to refresh search results often, and handle sessions that fill up before a player can join. </p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Retrieves all active game sessions that match a set of search criteria and sorts them into a specified order. </p> <p>This operation is not designed to continually track game session status because that practice can cause you to exceed your API limit and generate errors. Instead, configure an Amazon Simple Notification Service (Amazon SNS) topic to receive notifications from a matchmaker or a game session placement queue.</p> <p>When searching for game sessions, you specify exactly where you want to search and provide a search filter expression, a sort expression, or both. A search request can search only one fleet, but it can search all of a fleet's locations. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To search all game sessions that are currently running on all locations in a fleet, provide a fleet or alias ID. This approach returns game sessions in the fleet's home Region and all remote locations that fit the search criteria.</p> </li> <li> <p>To search all game sessions that are currently running on a specific fleet location, provide a fleet or alias ID and a location name. For location, you can specify a fleet's home Region or any remote location.</p> </li> </ul> <p>Use the pagination parameters to retrieve results as a set of sequential pages. </p> <p>If successful, a <code>GameSession</code> object is returned for each game session that matches the request. Search finds game sessions that are in <code>ACTIVE</code> status only. To retrieve information on game sessions in other statuses, use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessions.html\">DescribeGameSessions</a>.</p> <p>To set search and sort criteria, create a filter expression using the following game session attributes. For game session search examples, see the Examples section of this topic.</p> <ul> <li> <p> <b>gameSessionId</b> -- A unique identifier for the game session. You can use either a <code>GameSessionId</code> or <code>GameSessionArn</code> value. </p> </li> <li> <p> <b>gameSessionName</b> -- Name assigned to a game session. Game session names do not need to be unique to a game session.</p> </li> <li> <p> <b>gameSessionProperties</b> -- A set of key-value pairs that can store custom data in a game session. For example: <code>{\"Key\": \"difficulty\", \"Value\": \"novice\"}</code>. The filter expression must specify the <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameProperty\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameProperty</a> -- a <code>Key</code> and a string <code>Value</code> to search for the game sessions.</p> <p>For example, to search for the above key-value pair, specify the following search filter: <code>gameSessionProperties.difficulty = \"novice\"</code>. All game property values are searched as strings.</p> <p> For examples of searching game sessions, see the ones below, and also see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-client-api.html#game-properties-search\">Search game sessions by game property</a>. </p> </li> <li> <p> <b>maximumSessions</b> -- Maximum number of player sessions allowed for a game session.</p> </li> <li> <p> <b>creationTimeMillis</b> -- Value indicating when a game session was created. It is expressed in Unix time as milliseconds.</p> </li> <li> <p> <b>playerSessionCount</b> -- Number of players currently connected to a game session. This value changes rapidly as players join the session or drop out.</p> </li> <li> <p> <b>hasAvailablePlayerSessions</b> -- Boolean value indicating whether a game session has reached its maximum number of players. It is highly recommended that all search requests include this filter attribute to optimize search performance and return only sessions that players can join. </p> </li> </ul> <note> <p>Returned values for <code>playerSessionCount</code> and <code>hasAvailablePlayerSessions</code> change quickly as players join sessions and others drop out. Results should be considered a snapshot in time. Be sure to refresh search results often, and handle sessions that fill up before a player can join. </p> </note> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "StartFleetActions":{
       "name":"StartFleetActions",
@@ -1571,7 +1571,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Resumes certain types of activity on fleet instances that were suspended with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopFleetActions.html\">StopFleetActions</a>. For multi-location fleets, fleet actions are managed separately for each location. Currently, this operation is used to restart a fleet's auto-scaling activity.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To restart actions on instances in the fleet's home Region, provide a fleet ID and the type of actions to resume. </p> </li> <li> <p>To restart actions on instances in one of the fleet's remote locations, provide a fleet ID, a location name, and the type of actions to resume. </p> </li> </ul> <p>If successful, Amazon GameLift once again initiates scaling events as triggered by the fleet's scaling policies. If actions on the fleet location were never stopped, this operation will have no effect.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Resumes certain types of activity on fleet instances that were suspended with <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopFleetActions.html\">StopFleetActions</a>. For multi-location fleets, fleet actions are managed separately for each location. Currently, this operation is used to restart a fleet's auto-scaling activity.</p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To restart actions on instances in the fleet's home Region, provide a fleet ID and the type of actions to resume. </p> </li> <li> <p>To restart actions on instances in one of the fleet's remote locations, provide a fleet ID, a location name, and the type of actions to resume. </p> </li> </ul> <p>If successful, Amazon GameLift Servers once again initiates scaling events as triggered by the fleet's scaling policies. If actions on the fleet location were never stopped, this operation will have no effect.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "StartGameSessionPlacement":{
       "name":"StartGameSessionPlacement",
@@ -1588,7 +1588,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Makes a request to start a new game session using a game session queue. When processing a placement request in a queue, Amazon GameLift finds the best possible available resource to host the game session and prompts the resource to start the game session. </p> <p> <b>Request options</b> </p> <p>Call this API with the following minimum parameters: <i>GameSessionQueueName</i>, <i>MaximumPlayerSessionCount</i>, and <i>PlacementID</i>. You can also include game session data (data formatted as strings) or game properties (data formatted as key-value pairs) to pass to the new game session.</p> <ul> <li> <p>You can change how Amazon GameLift chooses a hosting resource for the new game session. Prioritizing resources for game session placements is defined when you configure a game session queue. You can use the default prioritization process or specify a custom process by providing a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_PriorityConfiguration.html\"> PriorityConfiguration</a> when you create or update a queue.</p> <ul> <li> <p>Prioritize based on resource cost and location, using the queue's configured priority settings. Call this API with the minimum parameters.</p> </li> <li> <p>Prioritize based on latency. Include a set of values for <i>PlayerLatencies</i>. You can provide latency data with or without player session data. This option instructs Amazon GameLift to reorder the queue's prioritized locations list based on the latency data. If latency data is provided for multiple players, Amazon GameLift calculates each location's average latency for all players and reorders to find the lowest latency across all players. Don't include latency data if you're providing a custom list of locations.</p> </li> <li> <p>Prioritize based on a custom list of locations. If you're using a queue that's configured to prioritize location first (see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_PriorityConfiguration.html\">PriorityConfiguration</a> for game session queues), use the <i>PriorityConfigurationOverride</i> parameter to substitute a different location list for this placement request. When prioritizing placements by location, Amazon GameLift searches each location in prioritized order to find an available hosting resource for the new game session. You can choose whether to use the override list for the first placement attempt only or for all attempts.</p> </li> </ul> </li> <li> <p>You can request new player sessions for a group of players. Include the <i>DesiredPlayerSessions</i> parameter and include at minimum a unique player ID for each. You can also include player-specific data to pass to the new game session. </p> </li> </ul> <p> <b>Result</b> </p> <p>If successful, this request generates a new game session placement request and adds it to the game session queue for Amazon GameLift to process in turn. You can track the status of individual placement requests by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessionPlacement.html\">DescribeGameSessionPlacement</a>. A new game session is running if the status is <code>FULFILLED</code> and the request returns the game session connection information (IP address and port). If you include player session data, Amazon GameLift creates a player session for each player ID in the request.</p> <p>The request results in a <code>BadRequestException</code> in the following situations:</p> <ul> <li> <p>If the request includes both <i>PlayerLatencies</i> and <i>PriorityConfigurationOverride</i> parameters.</p> </li> <li> <p>If the request includes the <i>PriorityConfigurationOverride</i> parameter and designates a queue doesn't prioritize locations.</p> </li> </ul> <p>Amazon GameLift continues to retry each placement request until it reaches the queue's timeout setting. If a request times out, you can resubmit the request to the same queue or try a different queue. </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Makes a request to start a new game session using a game session queue. When processing a placement request, Amazon GameLift Servers looks for the best possible available resource to host the game session, based on how the queue is configured to prioritize factors such as resource cost, latency, and location. After selecting an available resource, Amazon GameLift Servers prompts the resource to start a game session. A placement request can include a list of players to create a set of player sessions. The request can also include information to pass to the new game session, such as to specify a game map or other options.</p> <p> <b>Request options</b> </p> <p>Use this operation to make the following types of requests. </p> <ul> <li> <p>Request a placement using the queue's default prioritization process (see the default prioritization described in <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_PriorityConfiguration.html\">PriorityConfiguration</a>). Include these required parameters:</p> <ul> <li> <p> <code>GameSessionQueueName</code> </p> </li> <li> <p> <code>MaximumPlayerSessionCount</code> </p> </li> <li> <p> <code>PlacementID</code> </p> </li> </ul> </li> <li> <p>Request a placement and prioritize based on latency. Include these parameters:</p> <ul> <li> <p>Required parameters <code>GameSessionQueueName</code>, <code>MaximumPlayerSessionCount</code>, <code>PlacementID</code>.</p> </li> <li> <p> <code>PlayerLatencies</code>. Include a set of latency values for destinations in the queue. When a request includes latency data, Amazon GameLift Servers automatically reorder the queue's locations priority list based on lowest available latency values. If a request includes latency data for multiple players, Amazon GameLift Servers calculates each location's average latency for all players and reorders to find the lowest latency across all players. </p> </li> <li> <p>Don't include <code>PriorityConfigurationOverride</code>.</p> </li> </ul> <ul> <li> <p>Prioritize based on a custom list of locations. If you're using a queue that's configured to prioritize location first (see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_PriorityConfiguration.html\">PriorityConfiguration</a> for game session queues), you can optionally use the <i>PriorityConfigurationOverride</i> parameter to substitute a different location priority list for this placement request. Amazon GameLift Servers searches each location on the priority override list to find an available hosting resource for the new game session. Specify a fallback strategy to use in the event that Amazon GameLift Servers fails to place the game session in any of the locations on the override list. </p> </li> </ul> </li> <li> <p>Request a placement and prioritized based on a custom list of locations. </p> </li> <li> <p>You can request new player sessions for a group of players. Include the <i>DesiredPlayerSessions</i> parameter and include at minimum a unique player ID for each. You can also include player-specific data to pass to the new game session. </p> </li> </ul> <p> <b>Result</b> </p> <p>If successful, this operation generates a new game session placement request and adds it to the game session queue for processing. You can track the status of individual placement requests by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeGameSessionPlacement.html\">DescribeGameSessionPlacement</a> or by monitoring queue notifications. When the request status is <code>FULFILLED</code>, a new game session has started and the placement request is updated with connection information for the game session (IP address and port). If the request included player session data, Amazon GameLift Servers creates a player session for each player ID in the request.</p> <p>The request results in a <code>InvalidRequestException</code> in the following situations:</p> <ul> <li> <p>If the request includes both <i>PlayerLatencies</i> and <i>PriorityConfigurationOverride</i> parameters.</p> </li> <li> <p>If the request includes the <i>PriorityConfigurationOverride</i> parameter and specifies a queue that doesn't prioritize locations.</p> </li> </ul> <p>Amazon GameLift Servers continues to retry each placement request until it reaches the queue's timeout setting. If a request times out, you can resubmit the request to the same queue or try a different queue. </p>"
     },
     "StartMatchBackfill":{
       "name":"StartMatchBackfill",
@@ -1604,7 +1604,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Finds new players to fill open slots in currently running game sessions. The backfill match process is essentially identical to the process of forming new matches. Backfill requests use the same matchmaker that was used to make the original match, and they provide matchmaking data for all players currently in the game session. FlexMatch uses this information to select new players so that backfilled match continues to meet the original match requirements. </p> <p>When using FlexMatch with Amazon GameLift managed hosting, you can request a backfill match from a client service by calling this operation with a <code>GameSessions</code> ID. You also have the option of making backfill requests directly from your game server. In response to a request, FlexMatch creates player sessions for the new players, updates the <code>GameSession</code> resource, and sends updated matchmaking data to the game server. You can request a backfill match at any point after a game session is started. Each game session can have only one active backfill request at a time; a subsequent request automatically replaces the earlier request.</p> <p>When using FlexMatch as a standalone component, request a backfill match by calling this operation without a game session identifier. As with newly formed matches, matchmaking results are returned in a matchmaking event so that your game can update the game session that is being backfilled.</p> <p>To request a backfill match, specify a unique ticket ID, the original matchmaking configuration, and matchmaking data for all current players in the game session being backfilled. Optionally, specify the <code>GameSession</code> ARN. If successful, a match backfill ticket is created and returned with status set to QUEUED. Track the status of backfill tickets using the same method for tracking tickets for new matches.</p> <p>Only game sessions created by FlexMatch are supported for match backfill.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-backfill.html\"> Backfill existing games with FlexMatch</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html\"> Matchmaking events</a> (reference)</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/gamelift-match.html\"> How Amazon GameLift FlexMatch works</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Finds new players to fill open slots in currently running game sessions. The backfill match process is essentially identical to the process of forming new matches. Backfill requests use the same matchmaker that was used to make the original match, and they provide matchmaking data for all players currently in the game session. FlexMatch uses this information to select new players so that backfilled match continues to meet the original match requirements. </p> <p>When using FlexMatch with Amazon GameLift Servers managed hosting, you can request a backfill match from a client service by calling this operation with a <code>GameSessions</code> ID. You also have the option of making backfill requests directly from your game server. In response to a request, FlexMatch creates player sessions for the new players, updates the <code>GameSession</code> resource, and sends updated matchmaking data to the game server. You can request a backfill match at any point after a game session is started. Each game session can have only one active backfill request at a time; a subsequent request automatically replaces the earlier request.</p> <p>When using FlexMatch as a standalone component, request a backfill match by calling this operation without a game session identifier. As with newly formed matches, matchmaking results are returned in a matchmaking event so that your game can update the game session that is being backfilled.</p> <p>To request a backfill match, specify a unique ticket ID, the original matchmaking configuration, and matchmaking data for all current players in the game session being backfilled. Optionally, specify the <code>GameSession</code> ARN. If successful, a match backfill ticket is created and returned with status set to QUEUED. Track the status of backfill tickets using the same method for tracking tickets for new matches.</p> <p>Only game sessions created by FlexMatch are supported for match backfill.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-backfill.html\"> Backfill existing games with FlexMatch</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html\"> Matchmaking events</a> (reference)</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/gamelift-match.html\"> How Amazon GameLift Servers FlexMatch works</a> </p>"
     },
     "StartMatchmaking":{
       "name":"StartMatchmaking",
@@ -1620,7 +1620,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Uses FlexMatch to create a game match for a group of players based on custom matchmaking rules. With games that use Amazon GameLift managed hosting, this operation also triggers Amazon GameLift to find hosting resources and start a new game session for the new match. Each matchmaking request includes information on one or more players and specifies the FlexMatch matchmaker to use. When a request is for multiple players, FlexMatch attempts to build a match that includes all players in the request, placing them in the same team and finding additional players as needed to fill the match. </p> <p>To start matchmaking, provide a unique ticket ID, specify a matchmaking configuration, and include the players to be matched. You must also include any player attributes that are required by the matchmaking configuration's rule set. If successful, a matchmaking ticket is returned with status set to <code>QUEUED</code>. </p> <p>Track matchmaking events to respond as needed and acquire game session connection information for successfully completed matches. Ticket status updates are tracked using event notification through Amazon Simple Notification Service, which is defined in the matchmaking configuration.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set Up FlexMatch event notification</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/gamelift-match.html\"> How Amazon GameLift FlexMatch works</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Uses FlexMatch to create a game match for a group of players based on custom matchmaking rules. With games that use Amazon GameLift Servers managed hosting, this operation also triggers Amazon GameLift Servers to find hosting resources and start a new game session for the new match. Each matchmaking request includes information on one or more players and specifies the FlexMatch matchmaker to use. When a request is for multiple players, FlexMatch attempts to build a match that includes all players in the request, placing them in the same team and finding additional players as needed to fill the match. </p> <p>To start matchmaking, provide a unique ticket ID, specify a matchmaking configuration, and include the players to be matched. You must also include any player attributes that are required by the matchmaking configuration's rule set. If successful, a matchmaking ticket is returned with status set to <code>QUEUED</code>. </p> <p>Track matchmaking events to respond as needed and acquire game session connection information for successfully completed matches. Ticket status updates are tracked using event notification through Amazon Simple Notification Service, which is defined in the matchmaking configuration.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-notification.html\"> Set Up FlexMatch event notification</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/gamelift-match.html\"> How Amazon GameLift Servers FlexMatch works</a> </p>"
     },
     "StopFleetActions":{
       "name":"StopFleetActions",
@@ -1637,7 +1637,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Suspends certain types of activity in a fleet location. Currently, this operation is used to stop auto-scaling activity. For multi-location fleets, fleet actions are managed separately for each location. </p> <p>Stopping fleet actions has several potential purposes. It allows you to temporarily stop auto-scaling activity but retain your scaling policies for use in the future. For multi-location fleets, you can set up fleet-wide auto-scaling, and then opt out of it for certain locations. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To stop actions on instances in the fleet's home Region, provide a fleet ID and the type of actions to suspend. </p> </li> <li> <p>To stop actions on instances in one of the fleet's remote locations, provide a fleet ID, a location name, and the type of actions to suspend. </p> </li> </ul> <p>If successful, Amazon GameLift no longer initiates scaling events except in response to manual changes using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetCapacity.html\">UpdateFleetCapacity</a>. To restart fleet actions again, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartFleetActions.html\">StartFleetActions</a>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Suspends certain types of activity in a fleet location. Currently, this operation is used to stop auto-scaling activity. For multi-location fleets, fleet actions are managed separately for each location. </p> <p>Stopping fleet actions has several potential purposes. It allows you to temporarily stop auto-scaling activity but retain your scaling policies for use in the future. For multi-location fleets, you can set up fleet-wide auto-scaling, and then opt out of it for certain locations. </p> <p>This operation can be used in the following ways: </p> <ul> <li> <p>To stop actions on instances in the fleet's home Region, provide a fleet ID and the type of actions to suspend. </p> </li> <li> <p>To stop actions on instances in one of the fleet's remote locations, provide a fleet ID, a location name, and the type of actions to suspend. </p> </li> </ul> <p>If successful, Amazon GameLift Servers no longer initiates scaling events except in response to manual changes using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetCapacity.html\">UpdateFleetCapacity</a>. To restart fleet actions again, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartFleetActions.html\">StartFleetActions</a>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers Fleets</a> </p>"
     },
     "StopGameSessionPlacement":{
       "name":"StopGameSessionPlacement",
@@ -1653,7 +1653,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Cancels a game session placement that is in <code>PENDING</code> status. To stop a placement, provide the placement ID values. If successful, the placement is moved to <code>CANCELLED</code> status.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Cancels a game session placement that's in <code>PENDING</code> status. To stop a placement, provide the placement ID value. </p> <p>Results</p> <p>If successful, this operation removes the placement request from the queue and moves the <code>GameSessionPlacement</code> to <code>CANCELLED</code> status.</p> <p>This operation results in an <code>InvalidRequestExecption</code> (400) error if a game session has already been created for this placement. You can clean up an unneeded game session by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_TerminateGameSession\">TerminateGameSession</a>.</p>"
     },
     "StopMatchmaking":{
       "name":"StopMatchmaking",
@@ -1669,7 +1669,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Cancels a matchmaking ticket or match backfill ticket that is currently being processed. To stop the matchmaking operation, specify the ticket ID. If successful, work on the ticket is stopped, and the ticket status is changed to <code>CANCELLED</code>.</p> <p>This call is also used to turn off automatic backfill for an individual game session. This is for game sessions that are created with a matchmaking configuration that has automatic backfill enabled. The ticket ID is included in the <code>MatchmakerData</code> of an updated game session object, which is provided to the game server.</p> <note> <p>If the operation is successful, the service sends back an empty JSON struct with the HTTP 200 response (not an empty HTTP body).</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Cancels a matchmaking ticket or match backfill ticket that is currently being processed. To stop the matchmaking operation, specify the ticket ID. If successful, work on the ticket is stopped, and the ticket status is changed to <code>CANCELLED</code>.</p> <p>This call is also used to turn off automatic backfill for an individual game session. This is for game sessions that are created with a matchmaking configuration that has automatic backfill enabled. The ticket ID is included in the <code>MatchmakerData</code> of an updated game session object, which is provided to the game server.</p> <note> <p>If the operation is successful, the service sends back an empty JSON struct with the HTTP 200 response (not an empty HTTP body).</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-client.html\"> Add FlexMatch to a game client</a> </p>"
     },
     "SuspendGameServerGroup":{
       "name":"SuspendGameServerGroup",
@@ -1685,7 +1685,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Temporarily stops activity on a game server group without terminating instances or the game server group. You can restart activity by calling <a href=\"gamelift/latest/apireference/API_ResumeGameServerGroup.html\">ResumeGameServerGroup</a>. You can suspend the following activity:</p> <ul> <li> <p> <b>Instance type replacement</b> - This activity evaluates the current game hosting viability of all Spot instance types that are defined for the game server group. It updates the Auto Scaling group to remove nonviable Spot Instance types, which have a higher chance of game server interruptions. It then balances capacity across the remaining viable Spot Instance types. When this activity is suspended, the Auto Scaling group continues with its current balance, regardless of viability. Instance protection, utilization metrics, and capacity scaling activities continue to be active. </p> </li> </ul> <p>To suspend activity, specify a game server group ARN and the type of activity to be suspended. If successful, a <code>GameServerGroup</code> object is returned showing that the activity is listed in <code>SuspendedActions</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Temporarily stops activity on a game server group without terminating instances or the game server group. You can restart activity by calling <a href=\"gamelift/latest/apireference/API_ResumeGameServerGroup.html\">ResumeGameServerGroup</a>. You can suspend the following activity:</p> <ul> <li> <p> <b>Instance type replacement</b> - This activity evaluates the current game hosting viability of all Spot instance types that are defined for the game server group. It updates the Auto Scaling group to remove nonviable Spot Instance types, which have a higher chance of game server interruptions. It then balances capacity across the remaining viable Spot Instance types. When this activity is suspended, the Auto Scaling group continues with its current balance, regardless of viability. Instance protection, utilization metrics, and capacity scaling activities continue to be active. </p> </li> </ul> <p>To suspend activity, specify a game server group ARN and the type of activity to be suspended. If successful, a <code>GameServerGroup</code> object is returned showing that the activity is listed in <code>SuspendedActions</code>.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -1702,7 +1702,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Assigns a tag to an Amazon GameLift resource. You can use tags to organize resources, create IAM permissions policies to manage access to groups of resources, customize Amazon Web Services cost breakdowns, and more. This operation handles the permissions necessary to manage tags for Amazon GameLift resources that support tagging.</p> <p>To add a tag to a resource, specify the unique ARN value for the resource and provide a tag list containing one or more tags. The operation succeeds even if the list includes tags that are already assigned to the resource. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Assigns a tag to an Amazon GameLift Servers resource. You can use tags to organize resources, create IAM permissions policies to manage access to groups of resources, customize Amazon Web Services cost breakdowns, and more. This operation handles the permissions necessary to manage tags for Amazon GameLift Servers resources that support tagging.</p> <p>To add a tag to a resource, specify the unique ARN value for the resource and provide a tag list containing one or more tags. The operation succeeds even if the list includes tags that are already assigned to the resource. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "TerminateGameSession":{
       "name":"TerminateGameSession",
@@ -1720,7 +1720,7 @@
         {"shape":"InvalidGameSessionStatusException"},
         {"shape":"NotReadyException"}
       ],
-      "documentation":"<p>Ends a game session that's currently in progress. Use this action to terminate any game session that isn't in <code>ERROR</code> status. Terminating a game session is the most efficient way to free up a server process when it's hosting a game session that's in a bad state or not ending properly. You can use this action to terminate a game session that's being hosted on any type of Amazon GameLift fleet compute, including computes for managed EC2, managed container, and Anywhere fleets. The game server must be integrated with Amazon GameLift server SDK 5.x or greater.</p> <p> <b>Request options</b> </p> <p>Request termination for a single game session. Provide the game session ID and the termination mode. There are two potential methods for terminating a game session:</p> <ul> <li> <p>Initiate a graceful termination using the normal game session shutdown sequence. With this mode, the Amazon GameLift service prompts the server process that's hosting the game session by calling the server SDK callback method <code>OnProcessTerminate()</code>. The callback implementation is part of the custom game server code. It might involve a variety of actions to gracefully end a game session, such as notifying players, before stopping the server process.</p> </li> <li> <p>Force an immediate game session termination. With this mode, the Amazon GameLift service takes action to stop the server process, which ends the game session without the normal game session shutdown sequence. </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, game session termination is initiated. During this activity, the game session status is changed to <code>TERMINATING</code>. When completed, the server process that was hosting the game session has been stopped and replaced with a new server process that's ready to host a new game session. The old game session's status is changed to <code>TERMINATED</code> with a status reason that indicates the termination method used.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html\">Add Amazon GameLift to your game server</a> </p> <p>Amazon GameLift server SDK 5 reference guide for <code>OnProcessTerminate()</code> (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-cpp-initsdk.html\">C++</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-csharp-initsdk.html\">C#</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-unreal-initsdk.html\">Unreal</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-go-initsdk.html\">Go</a>) </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Ends a game session that's currently in progress. Use this action to terminate any game session that isn't in <code>ERROR</code> status. Terminating a game session is the most efficient way to free up a server process when it's hosting a game session that's in a bad state or not ending properly. You can use this action to terminate a game session that's being hosted on any type of Amazon GameLift Servers fleet compute, including computes for managed EC2, managed container, and Anywhere fleets. The game server must be integrated with Amazon GameLift Servers server SDK 5.x or greater.</p> <p> <b>Request options</b> </p> <p>Request termination for a single game session. Provide the game session ID and the termination mode. There are two potential methods for terminating a game session:</p> <ul> <li> <p>Initiate a graceful termination using the normal game session shutdown sequence. With this mode, the Amazon GameLift Servers service prompts the server process that's hosting the game session by calling the server SDK callback method <code>OnProcessTerminate()</code>. The callback implementation is part of the custom game server code. It might involve a variety of actions to gracefully end a game session, such as notifying players, before stopping the server process.</p> </li> <li> <p>Force an immediate game session termination. With this mode, the Amazon GameLift Servers service takes action to stop the server process, which ends the game session without the normal game session shutdown sequence. </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, game session termination is initiated. During this activity, the game session status is changed to <code>TERMINATING</code>. When completed, the server process that was hosting the game session has been stopped and replaced with a new server process that's ready to host a new game session. The old game session's status is changed to <code>TERMINATED</code> with a status reason that indicates the termination method used.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html\">Add Amazon GameLift Servers to your game server</a> </p> <p>Amazon GameLift Servers server SDK 5 reference guide for <code>OnProcessTerminate()</code> (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-cpp-initsdk.html\">C++</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-csharp-initsdk.html\">C#</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-unreal-initsdk.html\">Unreal</a>) (<a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-go-initsdk.html\">Go</a>) </p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -1737,7 +1737,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Removes a tag assigned to a Amazon GameLift resource. You can use resource tags to organize Amazon Web Services resources for a range of purposes. This operation handles the permissions necessary to manage tags for Amazon GameLift resources that support tagging.</p> <p>To remove a tag from a resource, specify the unique ARN value for the resource and provide a string list containing one or more tags to remove. This operation succeeds even if the list includes tags that aren't assigned to the resource.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Removes a tag assigned to a Amazon GameLift Servers resource. You can use resource tags to organize Amazon Web Services resources for a range of purposes. This operation handles the permissions necessary to manage tags for Amazon GameLift Servers resources that support tagging.</p> <p>To remove a tag from a resource, specify the unique ARN value for the resource and provide a string list containing one or more tags to remove. This operation succeeds even if the list includes tags that aren't assigned to the resource.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "UpdateAlias":{
       "name":"UpdateAlias",
@@ -1753,7 +1753,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates properties for an alias. Specify the unique identifier of the alias to be updated and the new property values. When reassigning an alias to a new fleet, provide an updated routing strategy. If successful, the updated alias record is returned.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Updates properties for an alias. Specify the unique identifier of the alias to be updated and the new property values.</p> <p>When reassigning an alias to a new fleet, provide an updated routing strategy. If successful, the updated alias record is returned.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "UpdateBuild":{
       "name":"UpdateBuild",
@@ -1769,7 +1769,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates metadata in a build resource, including the build name and version. To update the metadata, specify the build ID to update and provide the new values. If successful, a build object containing the updated metadata is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Updates metadata in a build resource, including the build name and version. To update the metadata, specify the build ID to update and provide the new values. If successful, a build object containing the updated metadata is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-build-intro.html\"> Upload a Custom Server Build</a> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "UpdateContainerFleet":{
       "name":"UpdateContainerFleet",
@@ -1788,7 +1788,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Updates the properties of a managed container fleet. Depending on the properties being updated, this operation might initiate a fleet deployment. You can track deployments for a fleet using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetDeployment.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetDeployment.html</a>.</p> <p> <b>Request options</b> </p> <p>As with CreateContainerFleet, many fleet properties use common defaults or are calculated based on the fleet's container group definitions. </p> <ul> <li> <p>Update fleet properties that result in a fleet deployment. Include only those properties that you want to change. Specify deployment configuration settings.</p> </li> <li> <p>Update fleet properties that don't result in a fleet deployment. Include only those properties that you want to change.</p> </li> </ul> <p>Changes to the following properties initiate a fleet deployment: </p> <ul> <li> <p> <code>GameServerContainerGroupDefinition</code> </p> </li> <li> <p> <code>PerInstanceContainerGroupDefinition</code> </p> </li> <li> <p> <code>GameServerContainerGroupsPerInstance</code> </p> </li> <li> <p> <code>InstanceInboundPermissions</code> </p> </li> <li> <p> <code>InstanceConnectionPortRange</code> </p> </li> <li> <p> <code>LogConfiguration</code> </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation updates the container fleet resource, and might initiate a new deployment of fleet resources using the deployment configuration provided. A deployment replaces existing fleet instances with new instances that are deployed with the updated fleet properties. The fleet is placed in <code>UPDATING</code> status until the deployment is complete, then return to <code>ACTIVE</code>. </p> <p>You can have only one update deployment active at a time for a fleet. If a second update request initiates a deployment while another deployment is in progress, the first deployment is cancelled.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Updates the properties of a managed container fleet. Depending on the properties being updated, this operation might initiate a fleet deployment. You can track deployments for a fleet using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetDeployment.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetDeployment.html</a>.</p> <note> <p>A managed fleet's runtime environment, which depends on the fleet's Amazon Machine Image {AMI} version, can't be updated. You must create a new fleet. As a best practice, we recommend replacing your managed fleets every 30 days to maintain a secure and up-to-date runtime environment for your hosted game servers. For guidance, see <a href=\"https://docs.aws.amazon.com/gameliftservers/latest/developerguide/security-best-practices.html\"> Security best practices for Amazon GameLift Servers</a>.</p> </note> <p> <b>Request options</b> </p> <p>As with CreateContainerFleet, many fleet properties use common defaults or are calculated based on the fleet's container group definitions. </p> <ul> <li> <p>Update fleet properties that result in a fleet deployment. Include only those properties that you want to change. Specify deployment configuration settings.</p> </li> <li> <p>Update fleet properties that don't result in a fleet deployment. Include only those properties that you want to change.</p> </li> </ul> <p>Changes to the following properties initiate a fleet deployment: </p> <ul> <li> <p> <code>GameServerContainerGroupDefinition</code> </p> </li> <li> <p> <code>PerInstanceContainerGroupDefinition</code> </p> </li> <li> <p> <code>GameServerContainerGroupsPerInstance</code> </p> </li> <li> <p> <code>InstanceInboundPermissions</code> </p> </li> <li> <p> <code>InstanceConnectionPortRange</code> </p> </li> <li> <p> <code>LogConfiguration</code> </p> </li> </ul> <p> <b>Results</b> </p> <p>If successful, this operation updates the container fleet resource, and might initiate a new deployment of fleet resources using the deployment configuration provided. A deployment replaces existing fleet instances with new instances that are deployed with the updated fleet properties. The fleet is placed in <code>UPDATING</code> status until the deployment is complete, then return to <code>ACTIVE</code>. </p> <p>You can have only one update deployment active at a time for a fleet. If a second update request initiates a deployment while another deployment is in progress, the first deployment is cancelled.</p>"
     },
     "UpdateContainerGroupDefinition":{
       "name":"UpdateContainerGroupDefinition",
@@ -1806,7 +1806,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Updates properties in an existing container group definition. This operation doesn't replace the definition. Instead, it creates a new version of the definition and saves it separately. You can access all versions that you choose to retain.</p> <p>The only property you can't update is the container group type.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Update based on the latest version of the container group definition. Specify the container group definition name only, or use an ARN value without a version number. Provide updated values for the properties that you want to change only. All other values remain the same as the latest version.</p> </li> <li> <p>Update based on a specific version of the container group definition. Specify the container group definition name and a source version number, or use an ARN value with a version number. Provide updated values for the properties that you want to change only. All other values remain the same as the source version.</p> </li> <li> <p>Change a game server container definition. Provide the updated container definition.</p> </li> <li> <p>Add or change a support container definition. Provide a complete set of container definitions, including the updated definition.</p> </li> <li> <p>Remove a support container definition. Provide a complete set of container definitions, excluding the definition to remove. If the container group has only one support container definition, provide an empty set.</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of the new container group definition version.</p> <p>If the container group definition version is used in an active fleets, the update automatically initiates a new fleet deployment of the new version. You can track a fleet's deployments using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListFleetDeployments.html\">ListFleetDeployments</a>.</p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> Container</p> <p>Updates properties in an existing container group definition. This operation doesn't replace the definition. Instead, it creates a new version of the definition and saves it separately. You can access all versions that you choose to retain.</p> <p>The only property you can't update is the container group type.</p> <p> <b>Request options:</b> </p> <ul> <li> <p>Update based on the latest version of the container group definition. Specify the container group definition name only, or use an ARN value without a version number. Provide updated values for the properties that you want to change only. All other values remain the same as the latest version.</p> </li> <li> <p>Update based on a specific version of the container group definition. Specify the container group definition name and a source version number, or use an ARN value with a version number. Provide updated values for the properties that you want to change only. All other values remain the same as the source version.</p> </li> <li> <p>Change a game server container definition. Provide the updated container definition.</p> </li> <li> <p>Add or change a support container definition. Provide a complete set of container definitions, including the updated definition.</p> </li> <li> <p>Remove a support container definition. Provide a complete set of container definitions, excluding the definition to remove. If the container group has only one support container definition, provide an empty set.</p> </li> </ul> <p> <b>Results:</b> </p> <p>If successful, this operation returns the complete properties of the new container group definition version.</p> <p>If the container group definition version is used in an active fleets, the update automatically initiates a new fleet deployment of the new version. You can track a fleet's deployments using <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListFleetDeployments.html\">ListFleetDeployments</a>.</p>"
     },
     "UpdateFleetAttributes":{
       "name":"UpdateFleetAttributes",
@@ -1825,7 +1825,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates a fleet's mutable attributes, such as game session protection and resource creation limits.</p> <p>To update fleet attributes, specify the fleet ID and the property values that you want to change. If successful, Amazon GameLift returns the identifiers for the updated fleet.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Updates a fleet's mutable attributes, such as game session protection and resource creation limits.</p> <p>To update fleet attributes, specify the fleet ID and the property values that you want to change. If successful, Amazon GameLift Servers returns the identifiers for the updated fleet.</p> <note> <p>A managed fleet's runtime environment, which depends on the fleet's Amazon Machine Image {AMI} version, can't be updated. You must create a new fleet. As a best practice, we recommend replacing your managed fleets every 30 days to maintain a secure and up-to-date runtime environment for your hosted game servers. For guidance, see <a href=\"https://docs.aws.amazon.com/gameliftservers/latest/developerguide/security-best-practices.html\"> Security best practices for Amazon GameLift Servers</a>.</p> </note> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "UpdateFleetCapacity":{
       "name":"UpdateFleetCapacity",
@@ -1845,7 +1845,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Updates capacity settings for a managed EC2 fleet or managed container fleet. For these fleets, you adjust capacity by changing the number of instances in the fleet. Fleet capacity determines the number of game sessions and players that the fleet can host based on its configuration. For fleets with multiple locations, use this operation to manage capacity settings in each location individually.</p> <p>Use this operation to set these fleet capacity properties: </p> <ul> <li> <p>Minimum/maximum size: Set hard limits on the number of Amazon EC2 instances allowed. If Amazon GameLift receives a request--either through manual update or automatic scaling--it won't change the capacity to a value outside of this range.</p> </li> <li> <p>Desired capacity: As an alternative to automatic scaling, manually set the number of Amazon EC2 instances to be maintained. Before changing a fleet's desired capacity, check the maximum capacity of the fleet's Amazon EC2 instance type by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeEC2InstanceLimits.html\">DescribeEC2InstanceLimits</a>.</p> </li> </ul> <p>To update capacity for a fleet's home Region, or if the fleet has no remote locations, omit the <code>Location</code> parameter. The fleet must be in <code>ACTIVE</code> status. </p> <p>To update capacity for a fleet's remote location, set the <code>Location</code> parameter to the location to update. The location must be in <code>ACTIVE</code> status.</p> <p>If successful, Amazon GameLift updates the capacity settings and returns the identifiers for the updated fleet and/or location. If a requested change to desired capacity exceeds the instance type's limit, the <code>LimitExceeded</code> exception occurs. </p> <p>Updates often prompt an immediate change in fleet capacity, such as when current capacity is different than the new desired capacity or outside the new limits. In this scenario, Amazon GameLift automatically initiates steps to add or remove instances in the fleet location. You can track a fleet's current capacity by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetCapacity.html\">DescribeFleetCapacity</a> or <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html\">DescribeFleetLocationCapacity</a>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-manage-capacity.html\">Scaling fleet capacity</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Updates capacity settings for a managed EC2 fleet or managed container fleet. For these fleets, you adjust capacity by changing the number of instances in the fleet. Fleet capacity determines the number of game sessions and players that the fleet can host based on its configuration. For fleets with multiple locations, use this operation to manage capacity settings in each location individually.</p> <p>Use this operation to set these fleet capacity properties: </p> <ul> <li> <p>Minimum/maximum size: Set hard limits on the number of Amazon EC2 instances allowed. If Amazon GameLift Servers receives a request--either through manual update or automatic scaling--it won't change the capacity to a value outside of this range.</p> </li> <li> <p>Desired capacity: As an alternative to automatic scaling, manually set the number of Amazon EC2 instances to be maintained. Before changing a fleet's desired capacity, check the maximum capacity of the fleet's Amazon EC2 instance type by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeEC2InstanceLimits.html\">DescribeEC2InstanceLimits</a>.</p> </li> </ul> <p>To update capacity for a fleet's home Region, or if the fleet has no remote locations, omit the <code>Location</code> parameter. The fleet must be in <code>ACTIVE</code> status. </p> <p>To update capacity for a fleet's remote location, set the <code>Location</code> parameter to the location to update. The location must be in <code>ACTIVE</code> status.</p> <p>If successful, Amazon GameLift Servers updates the capacity settings and returns the identifiers for the updated fleet and/or location. If a requested change to desired capacity exceeds the instance type's limit, the <code>LimitExceeded</code> exception occurs. </p> <p>Updates often prompt an immediate change in fleet capacity, such as when current capacity is different than the new desired capacity or outside the new limits. In this scenario, Amazon GameLift Servers automatically initiates steps to add or remove instances in the fleet location. You can track a fleet's current capacity by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetCapacity.html\">DescribeFleetCapacity</a> or <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetLocationCapacity.html\">DescribeFleetLocationCapacity</a>. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-manage-capacity.html\">Scaling fleet capacity</a> </p>"
     },
     "UpdateFleetPortSettings":{
       "name":"UpdateFleetPortSettings",
@@ -1864,7 +1864,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates permissions that allow inbound traffic to connect to game sessions in the fleet. </p> <p>To update settings, specify the fleet ID to be updated and specify the changes to be made. List the permissions you want to add in <code>InboundPermissionAuthorizations</code>, and permissions you want to remove in <code>InboundPermissionRevocations</code>. Permissions to be removed must match existing fleet permissions. </p> <p>If successful, the fleet ID for the updated fleet is returned. For fleets with remote locations, port setting updates can take time to propagate across all locations. You can check the status of updates in each location by calling <code>DescribeFleetPortSettings</code> with a location name.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Container</p> <p>Updates permissions that allow inbound traffic to connect to game sessions in the fleet. </p> <p>To update settings, specify the fleet ID to be updated and specify the changes to be made. List the permissions you want to add in <code>InboundPermissionAuthorizations</code>, and permissions you want to remove in <code>InboundPermissionRevocations</code>. Permissions to be removed must match existing fleet permissions. </p> <p>If successful, the fleet ID for the updated fleet is returned. For fleets with remote locations, port setting updates can take time to propagate across all locations. You can check the status of updates in each location by calling <code>DescribeFleetPortSettings</code> with a location name.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "UpdateGameServer":{
       "name":"UpdateGameServer",
@@ -1880,7 +1880,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Updates information about a registered game server to help Amazon GameLift FleetIQ track game server availability. This operation is called by a game server process that is running on an instance in a game server group. </p> <p>Use this operation to update the following types of game server information. You can make all three types of updates in the same request:</p> <ul> <li> <p>To update the game server's utilization status from <code>AVAILABLE</code> (when the game server is available to be claimed) to <code>UTILIZED</code> (when the game server is currently hosting games). Identify the game server and game server group and specify the new utilization status. You can't change the status from to <code>UTILIZED</code> to <code>AVAILABLE</code> .</p> </li> <li> <p>To report health status, identify the game server and game server group and set health check to <code>HEALTHY</code>. If a game server does not report health status for a certain length of time, the game server is no longer considered healthy. As a result, it will be eventually deregistered from the game server group to avoid affecting utilization metrics. The best practice is to report health every 60 seconds.</p> </li> <li> <p>To change game server metadata, provide updated game server data.</p> </li> </ul> <p>Once a game server is successfully updated, the relevant statuses and timestamps are updated.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Updates information about a registered game server to help Amazon GameLift Servers FleetIQ track game server availability. This operation is called by a game server process that is running on an instance in a game server group. </p> <p>Use this operation to update the following types of game server information. You can make all three types of updates in the same request:</p> <ul> <li> <p>To update the game server's utilization status from <code>AVAILABLE</code> (when the game server is available to be claimed) to <code>UTILIZED</code> (when the game server is currently hosting games). Identify the game server and game server group and specify the new utilization status. You can't change the status from to <code>UTILIZED</code> to <code>AVAILABLE</code> .</p> </li> <li> <p>To report health status, identify the game server and game server group and set health check to <code>HEALTHY</code>. If a game server does not report health status for a certain length of time, the game server is no longer considered healthy. As a result, it will be eventually deregistered from the game server group to avoid affecting utilization metrics. The best practice is to report health every 60 seconds.</p> </li> <li> <p>To change game server metadata, provide updated game server data.</p> </li> </ul> <p>Once a game server is successfully updated, the relevant statuses and timestamps are updated.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "UpdateGameServerGroup":{
       "name":"UpdateGameServerGroup",
@@ -1896,7 +1896,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p> <b>This operation is used with the Amazon GameLift FleetIQ solution and game server groups.</b> </p> <p>Updates Amazon GameLift FleetIQ-specific properties for a game server group. Many Auto Scaling group properties are updated on the Auto Scaling group directly, including the launch template, Auto Scaling policies, and maximum/minimum/desired instance counts.</p> <p>To update the game server group, specify the game server group ID and provide the updated values. Before applying the updates, the new values are validated to ensure that Amazon GameLift FleetIQ can continue to perform instance balancing activity. If successful, a <code>GameServerGroup</code> object is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift FleetIQ Guide</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2 (FleetIQ)</p> <p>Updates Amazon GameLift Servers FleetIQ-specific properties for a game server group. Many Auto Scaling group properties are updated on the Auto Scaling group directly, including the launch template, Auto Scaling policies, and maximum/minimum/desired instance counts.</p> <p>To update the game server group, specify the game server group ID and provide the updated values. Before applying the updates, the new values are validated to ensure that Amazon GameLift Servers FleetIQ can continue to perform instance balancing activity. If successful, a <code>GameServerGroup</code> object is returned.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/fleetiqguide/gsg-intro.html\">Amazon GameLift Servers FleetIQ Guide</a> </p>"
     },
     "UpdateGameSession":{
       "name":"UpdateGameSession",
@@ -1912,9 +1912,10 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnauthorizedException"},
         {"shape":"InvalidGameSessionStatusException"},
-        {"shape":"InvalidRequestException"}
+        {"shape":"InvalidRequestException"},
+        {"shape":"NotReadyException"}
       ],
-      "documentation":"<p>Updates the mutable properties of a game session. </p> <p>To update a game session, specify the game session ID and the values you want to change. </p> <p>If successful, the updated <code>GameSession</code> object is returned. </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Updates the mutable properties of a game session. </p> <p>To update a game session, specify the game session ID and the values you want to change. </p> <p>If successful, the updated <code>GameSession</code> object is returned. </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "UpdateGameSessionQueue":{
       "name":"UpdateGameSessionQueue",
@@ -1930,7 +1931,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnauthorizedException"}
       ],
-      "documentation":"<p>Updates the configuration of a game session queue, which determines how the queue processes new game session requests. To update settings, specify the queue name to be updated and provide the new settings. When updating destinations, provide a complete list of destinations. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html\"> Using Multi-Region Queues</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Updates the configuration of a game session queue, which determines how the queue processes new game session requests. To update settings, specify the queue name to be updated and provide the new settings. When updating destinations, provide a complete list of destinations. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html\"> Using Multi-Region Queues</a> </p>"
     },
     "UpdateMatchmakingConfiguration":{
       "name":"UpdateMatchmakingConfiguration",
@@ -1946,7 +1947,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"UnsupportedRegionException"}
       ],
-      "documentation":"<p>Updates settings for a FlexMatch matchmaking configuration. These changes affect all matches and game sessions that are created after the update. To update settings, specify the configuration name to be updated and provide the new settings. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\"> Design a FlexMatch matchmaker</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Updates settings for a FlexMatch matchmaking configuration. These changes affect all matches and game sessions that are created after the update. To update settings, specify the configuration name to be updated and provide the new settings. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-configuration.html\"> Design a FlexMatch matchmaker</a> </p>"
     },
     "UpdateRuntimeConfiguration":{
       "name":"UpdateRuntimeConfiguration",
@@ -1964,7 +1965,7 @@
         {"shape":"InvalidFleetStatusException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Updates the runtime configuration for the specified fleet. The runtime configuration tells Amazon GameLift how to launch server processes on computes in managed EC2 and Anywhere fleets. You can update a fleet's runtime configuration at any time after the fleet is created; it does not need to be in <code>ACTIVE</code> status.</p> <p>To update runtime configuration, specify the fleet ID and provide a <code>RuntimeConfiguration</code> with an updated set of server process configurations.</p> <p>If successful, the fleet's runtime configuration settings are updated. Fleet computes that run game server processes regularly check for and receive updated runtime configurations. The computes immediately take action to comply with the new configuration by launching new server processes or by not replacing existing processes when they shut down. Updating a fleet's runtime configuration never affects existing server processes.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift fleets</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Updates the runtime configuration for the specified fleet. The runtime configuration tells Amazon GameLift Servers how to launch server processes on computes in managed EC2 and Anywhere fleets. You can update a fleet's runtime configuration at any time after the fleet is created; it does not need to be in <code>ACTIVE</code> status.</p> <p>To update runtime configuration, specify the fleet ID and provide a <code>RuntimeConfiguration</code> with an updated set of server process configurations.</p> <p>If successful, the fleet's runtime configuration settings are updated. Fleet computes that run game server processes regularly check for and receive updated runtime configurations. The computes immediately take action to comply with the new configuration by launching new server processes or by not replacing existing processes when they shut down. Updating a fleet's runtime configuration never affects existing server processes.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-intro.html\">Setting up Amazon GameLift Servers fleets</a> </p>"
     },
     "UpdateScript":{
       "name":"UpdateScript",
@@ -1980,7 +1981,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates Realtime script metadata and content.</p> <p>To update script metadata, specify the script ID and provide updated name and/or version values. </p> <p>To update script content, provide an updated zip file by pointing to either a local file or an Amazon S3 bucket location. You can use either method regardless of how the original script was uploaded. Use the <i>Version</i> parameter to track updates to the script.</p> <p>If the call is successful, the updated metadata is stored in the script record and a revised script is uploaded to the Amazon GameLift service. Once the script is updated and acquired by a fleet instance, the new version is used for all new game sessions. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Realtime Servers</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2</p> <p>Updates Realtime script metadata and content.</p> <p>To update script metadata, specify the script ID and provide updated name and/or version values. </p> <p>To update script content, provide an updated zip file by pointing to either a local file or an Amazon S3 bucket location. You can use either method regardless of how the original script was uploaded. Use the <i>Version</i> parameter to track updates to the script.</p> <p>If the call is successful, the updated metadata is stored in the script record and a revised script is uploaded to the Amazon GameLift Servers service. Once the script is updated and acquired by a fleet instance, the new version is used for all new game sessions. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/realtime-intro.html\">Amazon GameLift Servers Amazon GameLift Servers Realtime</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "ValidateMatchmakingRuleSet":{
       "name":"ValidateMatchmakingRuleSet",
@@ -1995,7 +1996,7 @@
         {"shape":"UnsupportedRegionException"},
         {"shape":"InvalidRequestException"}
       ],
-      "documentation":"<p>Validates the syntax of a matchmaking rule or rule set. This operation checks that the rule set is using syntactically correct JSON and that it conforms to allowed property expressions. To validate syntax, provide a rule set JSON string.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
+      "documentation":"<p> <b>This API works with the following fleet types:</b> EC2, Anywhere, Container</p> <p>Validates the syntax of a matchmaking rule or rule set. This operation checks that the rule set is using syntactically correct JSON and that it conforms to allowed property expressions. To validate syntax, provide a rule set JSON string.</p> <p> <b>Learn more</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-rulesets.html\">Build a rule set</a> </p> </li> </ul>"
     }
   },
   "shapes":{
@@ -2023,8 +2024,7 @@
     },
     "AcceptMatchOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AcceptanceType":{
       "type":"string",
@@ -2046,7 +2046,7 @@
         },
         "AliasArn":{
           "shape":"AliasArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift alias resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift alias ARN, the resource ID matches the alias ID value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers alias resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift alias ARN, the resource ID matches the alias ID value.</p>"
         },
         "Description":{
           "shape":"FreeText",
@@ -2094,10 +2094,10 @@
       "members":{
         "Cost":{
           "shape":"NonNegativeLimitedLengthDouble",
-          "documentation":"<p>The cost to run your fleet per hour. Amazon GameLift uses the provided cost of your fleet to balance usage in queues. For more information about queues, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html\">Setting up queues</a> in the <i>Amazon GameLift Developer Guide</i>.</p>"
+          "documentation":"<p>The cost to run your fleet per hour. Amazon GameLift Servers uses the provided cost of your fleet to balance usage in queues. For more information about queues, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/queues-intro.html\">Setting up queues</a> in the <i>Amazon GameLift Servers Developer Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Amazon GameLift configuration options for your Anywhere fleets.</p>"
+      "documentation":"<p>Amazon GameLift Servers configuration options for your Anywhere fleets.</p>"
     },
     "ArnStringModel":{
       "type":"string",
@@ -2149,7 +2149,7 @@
           "documentation":"<p>The token that users must pass to the service API to use the temporary credentials. </p>"
         }
       },
-      "documentation":"<p>Amazon Web Services account security credentials that allow interactions with Amazon GameLift resources. The credentials are temporary and valid for a limited time span. You can request fresh credentials at any time. </p> <p> Amazon Web Services security credentials consist of three parts: an access key ID, a secret access key, and a session token. You must use all three parts together to authenticate your access requests.</p> <p>You need Amazon Web Services credentials for the following tasks: </p> <ul> <li> <p>To upload a game server build directly to Amazon GameLift S3 storage using <code>CreateBuild</code>. To get access for this task, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html</a>.</p> </li> <li> <p>To remotely connect to an active Amazon GameLift fleet instances. To get remote access, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess.html</a>.</p> </li> </ul>",
+      "documentation":"<p>Amazon Web Services account security credentials that allow interactions with Amazon GameLift Servers resources. The credentials are temporary and valid for a limited time span. You can request fresh credentials at any time. </p> <p> Amazon Web Services security credentials consist of three parts: an access key ID, a secret access key, and a session token. You must use all three parts together to authenticate your access requests.</p> <p>You need Amazon Web Services credentials for the following tasks: </p> <ul> <li> <p>To upload a game server build directly to Amazon GameLift Servers S3 storage using <code>CreateBuild</code>. To get access for this task, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html</a>.</p> </li> <li> <p>To remotely connect to an active Amazon GameLift Servers fleet instances. To get remote access, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetComputeAccess.html</a>.</p> </li> </ul>",
       "sensitive":true
     },
     "BackfillMode":{
@@ -2177,7 +2177,7 @@
         },
         "BuildArn":{
           "shape":"BuildArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift build resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::build/build-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift build ARN, the resource ID matches the <i>BuildId</i> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers build resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::build/build-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift build ARN, the resource ID matches the <i>BuildId</i> value.</p>"
         },
         "Name":{
           "shape":"FreeText",
@@ -2197,7 +2197,7 @@
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>Operating system that the game server binaries are built to run on. This value determines the type of fleet resources that you can use for this build.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x., first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>Operating system that the game server binaries are built to run on. This value determines the type of fleet resources that you can use for this build.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -2205,7 +2205,7 @@
         },
         "ServerSdkVersion":{
           "shape":"ServerSdkVersion",
-          "documentation":"<p>The Amazon GameLift Server SDK version used to develop your game server.</p>"
+          "documentation":"<p>The Amazon GameLift Servers Server SDK version used to develop your game server.</p>"
         }
       },
       "documentation":"<p>Properties describing a custom game build.</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
@@ -2243,7 +2243,7 @@
           "documentation":"<p>Indicates whether a TLS/SSL certificate is generated for a fleet. </p> <p>Valid values include: </p> <ul> <li> <p> <b>GENERATED</b> - Generate a TLS/SSL certificate for this fleet.</p> </li> <li> <p> <b>DISABLED</b> - (default) Do not generate a TLS/SSL certificate for this fleet. </p> </li> </ul>"
         }
       },
-      "documentation":"<p>Determines whether a TLS/SSL certificate is generated for a fleet. This feature must be enabled when creating the fleet. All instances in a fleet share the same certificate. The certificate can be retrieved by calling the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Amazon GameLift Server SDK</a> operation <code>GetInstanceCertificate</code>. </p>"
+      "documentation":"<p>Determines whether a TLS/SSL certificate is generated for a fleet. This feature must be enabled when creating the fleet. All instances in a fleet share the same certificate. The certificate can be retrieved by calling the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk.html\">Amazon GameLift Servers Server SDK</a> operation <code>GetInstanceCertificate</code>. </p>"
     },
     "CertificateType":{
       "type":"string",
@@ -2260,7 +2260,7 @@
           "documentation":"<p>List of instance statuses that game servers may be claimed on. If provided, the list must contain the <code>ACTIVE</code> status.</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p> Filters which game servers may be claimed when calling <code>ClaimGameServer</code>. </p>"
+      "documentation":"<p> Filters which game servers may be claimed when calling <code>ClaimGameServer</code>. </p>"
     },
     "ClaimGameServerInput":{
       "type":"structure",
@@ -2268,11 +2268,11 @@
       "members":{
         "GameServerGroupName":{
           "shape":"GameServerGroupNameOrArn",
-          "documentation":"<p>A unique identifier for the game server group where the game server is running. If you are not specifying a game server to claim, this value identifies where you want Amazon GameLift FleetIQ to look for an available game server to claim. </p>"
+          "documentation":"<p>A unique identifier for the game server group where the game server is running. If you are not specifying a game server to claim, this value identifies where you want Amazon GameLift Servers FleetIQ to look for an available game server to claim. </p>"
         },
         "GameServerId":{
           "shape":"GameServerId",
-          "documentation":"<p>A custom string that uniquely identifies the game server to claim. If this parameter is left empty, Amazon GameLift FleetIQ searches for an available game server in the specified game server group.</p>"
+          "documentation":"<p>A custom string that uniquely identifies the game server to claim. If this parameter is left empty, Amazon GameLift Servers FleetIQ searches for an available game server in the specified game server group.</p>"
         },
         "GameServerData":{
           "shape":"GameServerData",
@@ -2323,15 +2323,15 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of a compute resource. Amazon GameLift requires a DNS name or IP address for a compute.</p>"
+          "documentation":"<p>The IP address of a compute resource. Amazon GameLift Servers requires a DNS name or IP address for a compute.</p>"
         },
         "DnsName":{
           "shape":"DnsName",
-          "documentation":"<p>The DNS name of a compute resource. Amazon GameLift requires a DNS name or IP address for a compute.</p>"
+          "documentation":"<p>The DNS name of a compute resource. Amazon GameLift Servers requires a DNS name or IP address for a compute.</p>"
         },
         "ComputeStatus":{
           "shape":"ComputeStatus",
-          "documentation":"<p>Current status of the compute. A compute must have an <code>ACTIVE</code> status to host game sessions.</p>"
+          "documentation":"<p>Current status of the compute. A compute must have an <code>ACTIVE</code> status to host game sessions. Valid values include <code>PENDING</code>, <code>ACTIVE</code>, <code>TERMINATING</code>, and <code>IMPAIRED</code>.</p> <note> <p>While the ComputeStatus enum type is valid for Container based servers, the result may also include other non-enumerated string values such as \"Active\" for fleets which are not Container-based.</p> </note>"
         },
         "Location":{
           "shape":"LocationStringModel",
@@ -2343,19 +2343,19 @@
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>The type of operating system on the compute resource.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x., first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The type of operating system on the compute resource.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "Type":{
           "shape":"EC2InstanceType",
-          "documentation":"<p>The Amazon EC2 instance type that the fleet uses. For registered computes in an Amazon GameLift Anywhere fleet, this property is empty. </p>"
+          "documentation":"<p>The Amazon EC2 instance type that the fleet uses. For registered computes in an Amazon GameLift Servers Anywhere fleet, this property is empty. </p>"
         },
         "GameLiftServiceSdkEndpoint":{
           "shape":"GameLiftServiceSdkEndpointOutput",
-          "documentation":"<p>The Amazon GameLift SDK endpoint connection for a registered compute resource in an Anywhere fleet. The game servers on the compute use this endpoint to connect to the Amazon GameLift service.</p>"
+          "documentation":"<p>The Amazon GameLift Servers SDK endpoint connection for a registered compute resource in an Anywhere fleet. The game servers on the compute use this endpoint to connect to the Amazon GameLift Servers service.</p>"
         },
         "GameLiftAgentEndpoint":{
           "shape":"GameLiftAgentEndpointOutput",
-          "documentation":"<p> The endpoint of the Amazon GameLift Agent. </p>"
+          "documentation":"<p> The endpoint of the Amazon GameLift Servers Agent. </p>"
         },
         "InstanceId":{
           "shape":"InstanceId",
@@ -2370,7 +2370,7 @@
           "documentation":"<p>The game server container group definition for the compute.</p>"
         }
       },
-      "documentation":"<p>An Amazon GameLift compute resource for hosting your game servers. Computes in an Amazon GameLift fleet differs depending on the fleet's compute type property as follows: </p> <ul> <li> <p>For managed EC2 fleets, a compute is an EC2 instance.</p> </li> <li> <p>For Anywhere fleets, a compute is a computing resource that you provide and is registered to the fleet.</p> </li> </ul>"
+      "documentation":"<p>An Amazon GameLift Servers compute resource for hosting your game servers. Computes in an Amazon GameLift Servers fleet differs depending on the fleet's compute type property as follows: </p> <ul> <li> <p>For managed EC2 fleets, a compute is an EC2 instance.</p> </li> <li> <p>For Anywhere fleets, a compute is a computing resource that you provide and is registered to the fleet.</p> </li> </ul>"
     },
     "ComputeArn":{
       "type":"string",
@@ -2532,11 +2532,11 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift fleet ARN, the resource ID matches the <code>FleetId</code> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift fleet ARN, the resource ID matches the <code>FleetId</code> value.</p>"
         },
         "FleetRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The unique identifier for an Identity and Access Management (IAM) role with permissions to run your containers on resources that are managed by Amazon GameLift. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set up an IAM service role</a>. This fleet property can't be changed.</p>"
+          "documentation":"<p>The unique identifier for an Identity and Access Management (IAM) role with permissions to run your containers on resources that are managed by Amazon GameLift Servers. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set up an IAM service role</a>. This fleet property can't be changed.</p>"
         },
         "GameServerContainerGroupDefinitionName":{
           "shape":"ContainerGroupDefinitionName",
@@ -2589,7 +2589,7 @@
         },
         "NewGameSessionProtectionPolicy":{
           "shape":"ProtectionPolicy",
-          "documentation":"<p>Determines whether Amazon GameLift can shut down game sessions on the fleet that are actively running and hosting players. Amazon GameLift might prompt an instance shutdown when scaling down fleet capacity or when retiring unhealthy instances. You can also set game session protection for individual game sessions using <a href=\"gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a>.</p> <ul> <li> <p> <b>NoProtection</b> -- Game sessions can be shut down during active gameplay. </p> </li> <li> <p> <b>FullProtection</b> -- Game sessions in <code>ACTIVE</code> status can't be shut down.</p> </li> </ul>"
+          "documentation":"<p>Determines whether Amazon GameLift Servers can shut down game sessions on the fleet that are actively running and hosting players. Amazon GameLift Servers might prompt an instance shutdown when scaling down fleet capacity or when retiring unhealthy instances. You can also set game session protection for individual game sessions using <a href=\"gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a>.</p> <ul> <li> <p> <b>NoProtection</b> -- Game sessions can be shut down during active gameplay. </p> </li> <li> <p> <b>FullProtection</b> -- Game sessions in <code>ACTIVE</code> status can't be shut down.</p> </li> </ul>"
         },
         "GameSessionCreationLimitPolicy":{
           "shape":"GameSessionCreationLimitPolicy",
@@ -2605,14 +2605,14 @@
         },
         "LogConfiguration":{
           "shape":"LogConfiguration",
-          "documentation":"<p>The method that is used to collect container logs for the fleet. Amazon GameLift saves all standard output for each container in logs, including game session logs. </p> <ul> <li> <p> <code>CLOUDWATCH</code> -- Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul>"
+          "documentation":"<p>The method that is used to collect container logs for the fleet. Amazon GameLift Servers saves all standard output for each container in logs, including game session logs. </p> <ul> <li> <p> <code>CLOUDWATCH</code> -- Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul>"
         },
         "LocationAttributes":{
           "shape":"ContainerFleetLocationAttributesList",
           "documentation":"<p>Information about the container fleet's remote locations where fleet instances are deployed.</p>"
         }
       },
-      "documentation":"<p>Describes an Amazon GameLift managed container fleet. </p>"
+      "documentation":"<p>Describes an Amazon GameLift Servers managed container fleet. </p>"
     },
     "ContainerFleetBillingType":{
       "type":"string",
@@ -2684,7 +2684,7 @@
       "members":{
         "ContainerGroupDefinitionArn":{
           "shape":"ContainerGroupDefinitionArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift <code>ContainerGroupDefinition</code> resource. It uniquely identifies the resource across all Amazon Web Services Regions. Format is <code>arn:aws:gamelift:[region]::containergroupdefinition/[container group definition name]:[version]</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift Servers <code>ContainerGroupDefinition</code> resource. It uniquely identifies the resource across all Amazon Web Services Regions. Format is <code>arn:aws:gamelift:[region]::containergroupdefinition/[container group definition name]:[version]</code>.</p>"
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -2692,7 +2692,7 @@
         },
         "OperatingSystem":{
           "shape":"ContainerOperatingSystem",
-          "documentation":"<p>The platform that all containers in the container group definition run on.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The platform that all containers in the container group definition run on.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "Name":{
           "shape":"ContainerGroupDefinitionName",
@@ -2700,7 +2700,7 @@
         },
         "ContainerGroupType":{
           "shape":"ContainerGroupType",
-          "documentation":"<p>The type of container group. Container group type determines how Amazon GameLift deploys the container group on each fleet instance.</p>"
+          "documentation":"<p>The type of container group. Container group type determines how Amazon GameLift Servers deploys the container group on each fleet instance.</p>"
         },
         "TotalMemoryLimitMebibytes":{
           "shape":"ContainerTotalMemoryLimit",
@@ -2728,11 +2728,11 @@
         },
         "Status":{
           "shape":"ContainerGroupDefinitionStatus",
-          "documentation":"<p>Current status of the container group definition resource. Values include:</p> <ul> <li> <p> <code>COPYING</code> -- Amazon GameLift is in the process of making copies of all container images that are defined in the group. While in this state, the resource can't be used to create a container fleet.</p> </li> <li> <p> <code>READY</code> -- Amazon GameLift has copied the registry images for all containers that are defined in the group. You can use a container group definition in this status to create a container fleet. </p> </li> <li> <p> <code>FAILED</code> -- Amazon GameLift failed to create a valid container group definition resource. For more details on the cause of the failure, see <code>StatusReason</code>. A container group definition resource in failed status will be deleted within a few minutes.</p> </li> </ul>"
+          "documentation":"<p>Current status of the container group definition resource. Values include:</p> <ul> <li> <p> <code>COPYING</code> -- Amazon GameLift Servers is in the process of making copies of all container images that are defined in the group. While in this state, the resource can't be used to create a container fleet.</p> </li> <li> <p> <code>READY</code> -- Amazon GameLift Servers has copied the registry images for all containers that are defined in the group. You can use a container group definition in this status to create a container fleet. </p> </li> <li> <p> <code>FAILED</code> -- Amazon GameLift Servers failed to create a valid container group definition resource. For more details on the cause of the failure, see <code>StatusReason</code>. A container group definition resource in failed status will be deleted within a few minutes.</p> </li> </ul>"
         },
         "StatusReason":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>Additional information about a container group definition that's in <code>FAILED</code> status. Possible reasons include:</p> <ul> <li> <p>An internal issue prevented Amazon GameLift from creating the container group definition resource. Delete the failed resource and call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerGroupDefinition.html\">CreateContainerGroupDefinition</a>again. </p> </li> <li> <p>An access-denied message means that you don't have permissions to access the container image on ECR. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-iam-policy-examples.html.html\"> IAM permission examples</a> for help setting up required IAM permissions for Amazon GameLift.</p> </li> <li> <p>The <code>ImageUri</code> value for at least one of the containers in the container group definition was invalid or not found in the current Amazon Web Services account.</p> </li> <li> <p>At least one of the container images referenced in the container group definition exceeds the allowed size. For size limits, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\"> Amazon GameLift endpoints and quotas</a>.</p> </li> <li> <p>At least one of the container images referenced in the container group definition uses a different operating system than the one defined for the container group.</p> </li> </ul>"
+          "documentation":"<p>Additional information about a container group definition that's in <code>FAILED</code> status. Possible reasons include:</p> <ul> <li> <p>An internal issue prevented Amazon GameLift Servers from creating the container group definition resource. Delete the failed resource and call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerGroupDefinition.html\">CreateContainerGroupDefinition</a>again. </p> </li> <li> <p>An access-denied message means that you don't have permissions to access the container image on ECR. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-iam-policy-examples.html.html\"> IAM permission examples</a> for help setting up required IAM permissions for Amazon GameLift Servers.</p> </li> <li> <p>The <code>ImageUri</code> value for at least one of the containers in the container group definition was invalid or not found in the current Amazon Web Services account.</p> </li> <li> <p>At least one of the container images referenced in the container group definition exceeds the allowed size. For size limits, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\"> Amazon GameLift Servers endpoints and quotas</a>.</p> </li> <li> <p>At least one of the container images referenced in the container group definition uses a different operating system than the one defined for the container group.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The properties that describe a container group resource. You can update all properties of a container group definition properties. Updates to a container group definition are saved as new versions. </p> <p> <b>Used with:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerGroupDefinition.html\">CreateContainerGroupDefinition</a> </p> <p> <b>Returned by:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeContainerGroupDefinition.html\">DescribeContainerGroupDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListContainerGroupDefinitions.html\">ListContainerGroupDefinitions</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerGroupDefinition.html\">UpdateContainerGroupDefinition</a> </p>"
@@ -2799,7 +2799,7 @@
           "documentation":"<p>The time period (in seconds) to wait for a health check to succeed before counting a failed health check. </p>"
         }
       },
-      "documentation":"<p>Instructions on when and how to check the health of a support container in a container fleet. These properties override any Docker health checks that are set in the container image. For more information on container health checks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html#ECS-Type-HealthCheck-command\">HealthCheck command</a> in the <i>Amazon Elastic Container Service API</i>. Game server containers don't have a health check parameter; Amazon GameLift automatically handles health checks for these containers.</p> <p>The following example instructs the container to initiate a health check command every 60 seconds and wait 10 seconds for it to succeed. If it fails, retry the command 3 times before flagging the container as unhealthy. It also tells the container to wait 100 seconds after launch before counting failed health checks.</p> <p> <code>{\"Command\": [ \"CMD-SHELL\", \"ps cax | grep \"processmanager\" || exit 1\" ], \"Interval\": 60, \"Timeout\": 10, \"Retries\": 3, \"StartPeriod\": 100 }</code> </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinition.html\">SupportContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinitionInput.html\">SupportContainerDefinitionInput</a> </p>"
+      "documentation":"<p>Instructions on when and how to check the health of a support container in a container fleet. These properties override any Docker health checks that are set in the container image. For more information on container health checks, see <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_HealthCheck.html#ECS-Type-HealthCheck-command\">HealthCheck command</a> in the <i>Amazon Elastic Container Service API</i>. Game server containers don't have a health check parameter; Amazon GameLift Servers automatically handles health checks for these containers.</p> <p>The following example instructs the container to initiate a health check command every 60 seconds and wait 10 seconds for it to succeed. If it fails, retry the command 3 times before flagging the container as unhealthy. It also tells the container to wait 100 seconds after launch before counting failed health checks.</p> <p> <code>{\"Command\": [ \"CMD-SHELL\", \"ps cax | grep \"processmanager\" || exit 1\" ], \"Interval\": 60, \"Timeout\": 10, \"Retries\": 3, \"StartPeriod\": 100 }</code> </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinition.html\">SupportContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinitionInput.html\">SupportContainerDefinitionInput</a> </p>"
     },
     "ContainerHealthCheckInterval":{
       "type":"integer",
@@ -2894,10 +2894,10 @@
       "members":{
         "ContainerPortRanges":{
           "shape":"ContainerPortRangeList",
-          "documentation":"<p>A set of one or more container port number ranges. The ranges can't overlap. </p>"
+          "documentation":"<p>A set of one or more container port number ranges. The ranges can't overlap if the ranges' network protocols are the same. Overlapping ranges with different protocols is allowed but not recommended. </p>"
         }
       },
-      "documentation":"<p>A set of port ranges that can be opened on the container. A process that's running in the container can bind to a port number, making it accessible to inbound traffic. Container ports map to a container fleet's connection ports. </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinition.html\">GameServerContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinitionInput.html\">GameServerContainerDefinitionInput</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinition.html\">SupportContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinitionInput.html\">SupportContainerDefinitionInput</a> </p>"
+      "documentation":"<p>A set of port ranges that can be opened on the container. A process that's running in the container can bind to a port number, making it accessible to inbound traffic when it's mapped to a container fleet's connection port.</p> <p>Each container port range specifies a network protocol. When the configuration supports more than one protocol, we recommend that you use a different range for each protocol. If your ranges have overlapping port numbers, Amazon GameLift Servers maps a duplicated container port number to different connection ports. For example, if you include 1935 in port ranges for both TCP and UDP, it might result in the following mappings: </p> <ul> <li> <p>container port 1935 (tcp) =&gt; connection port 2001</p> </li> <li> <p>container port 1935 (udp) =&gt; connection port 2002</p> </li> </ul> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinition.html\">GameServerContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinitionInput.html\">GameServerContainerDefinitionInput</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinition.html\">SupportContainerDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_SupportContainerDefinitionInput.html\">SupportContainerDefinitionInput</a> </p>"
     },
     "ContainerPortRange":{
       "type":"structure",
@@ -2920,7 +2920,7 @@
           "documentation":"<p>The network protocol that these ports support. </p>"
         }
       },
-      "documentation":"<p>A set of one or more port numbers that can be opened on the container. </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ContainerPortConfiguration.html\">ContainerPortConfiguration</a> </p>"
+      "documentation":"<p>A set of one or more port numbers that can be opened on the container, and the supported network protocol. </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ContainerPortConfiguration.html\">ContainerPortConfiguration</a> </p>"
     },
     "ContainerPortRangeList":{
       "type":"list",
@@ -2990,11 +2990,11 @@
         },
         "StorageLocation":{
           "shape":"S3Location",
-          "documentation":"<p>Information indicating where your game build files are stored. Use this parameter only when creating a build with files stored in an Amazon S3 bucket that you own. The storage location must specify an Amazon S3 bucket name and key. The location must also specify a role ARN that you set up to allow Amazon GameLift to access your Amazon S3 bucket. The S3 bucket and your new build must be in the same Region.</p> <p>If a <code>StorageLocation</code> is specified, the size of your file can be found in your Amazon S3 bucket. Amazon GameLift will report a <code>SizeOnDisk</code> of 0. </p>"
+          "documentation":"<p>Information indicating where your game build files are stored. Use this parameter only when creating a build with files stored in an Amazon S3 bucket that you own. The storage location must specify an Amazon S3 bucket name and key. The location must also specify a role ARN that you set up to allow Amazon GameLift Servers to access your Amazon S3 bucket. The S3 bucket and your new build must be in the same Region.</p> <p>If a <code>StorageLocation</code> is specified, the size of your file can be found in your Amazon S3 bucket. Amazon GameLift Servers will report a <code>SizeOnDisk</code> of 0. </p>"
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>The operating system that your game server binaries run on. This value determines the type of fleet resources that you use for this build. If your game build contains multiple executables, they all must run on the same operating system. You must specify a valid operating system in this request. There is no default value. You can't change a build's operating system later.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x., first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The operating system that your game server binaries run on. This value determines the type of fleet resources that you use for this build. If your game build contains multiple executables, they all must run on the same operating system. You must specify a valid operating system in this request. There is no default value. You can't change a build's operating system later.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "Tags":{
           "shape":"TagList",
@@ -3002,7 +3002,7 @@
         },
         "ServerSdkVersion":{
           "shape":"ServerSdkVersion",
-          "documentation":"<p>A server SDK version you used when integrating your game server build with Amazon GameLift. For more information see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-custom-intro.html\">Integrate games with custom game servers</a>. By default Amazon GameLift sets this value to <code>4.0.2</code>.</p>"
+          "documentation":"<p>A server SDK version you used when integrating your game server build with Amazon GameLift Servers. For more information see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-custom-intro.html\">Integrate games with custom game servers</a>. By default Amazon GameLift Servers sets this value to <code>4.0.2</code>.</p>"
         }
       }
     },
@@ -3015,7 +3015,7 @@
         },
         "UploadCredentials":{
           "shape":"AwsCredentials",
-          "documentation":"<p>This element is returned only when the operation is called without a storage location. It contains credentials to use when you are uploading a build file to an Amazon S3 bucket that is owned by Amazon GameLift. Credentials have a limited life span. To refresh these credentials, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html\">RequestUploadCredentials</a>. </p>"
+          "documentation":"<p>This element is returned only when the operation is called without a storage location. It contains credentials to use when you are uploading a build file to an Amazon S3 bucket that is owned by Amazon GameLift Servers. Credentials have a limited life span. To refresh these credentials, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_RequestUploadCredentials.html\">RequestUploadCredentials</a>. </p>"
         },
         "StorageLocation":{
           "shape":"S3Location",
@@ -3029,7 +3029,7 @@
       "members":{
         "FleetRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The unique identifier for an Identity and Access Management (IAM) role with permissions to run your containers on resources that are managed by Amazon GameLift. Use an IAM service role with the <code>GameLiftContainerFleetPolicy</code> managed policy attached. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set up an IAM service role</a>. You can't change this fleet property after the fleet is created.</p> <p>IAM role ARN values use the following pattern: <code>arn:aws:iam::[Amazon Web Services account]:role/[role name]</code>.</p>"
+          "documentation":"<p>The unique identifier for an Identity and Access Management (IAM) role with permissions to run your containers on resources that are managed by Amazon GameLift Servers. Use an IAM service role with the <code>GameLiftContainerFleetPolicy</code> managed policy attached. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/setting-up-role.html\">Set up an IAM service role</a>. You can't change this fleet property after the fleet is created.</p> <p>IAM role ARN values use the following pattern: <code>arn:aws:iam::[Amazon Web Services account]:role/[role name]</code>.</p>"
         },
         "Description":{
           "shape":"NonZeroAndMaxString",
@@ -3045,19 +3045,19 @@
         },
         "InstanceConnectionPortRange":{
           "shape":"ConnectionPortRange",
-          "documentation":"<p>The set of port numbers to open on each fleet instance. A fleet's connection ports map to container ports that are configured in the fleet's container group definitions. </p> <p>By default, Amazon GameLift calculates an optimal port range based on your fleet configuration. To use the calculated range, don't set this parameter. The values are:</p> <ul> <li> <p>Port range: 4192 to a number calculated based on your fleet configuration. Amazon GameLift uses the following formula: <code>4192 + [# of game server container groups per fleet instance] * [# of container ports in the game server container group definition] + [# of container ports in the game server container group definition]</code> </p> </li> </ul> <p>You can also choose to manually set this parameter. When manually setting this parameter, you must use port numbers that match the fleet's inbound permissions port range.</p> <note> <p>If you set values manually, Amazon GameLift no longer calculates a port range for you, even if you later remove the manual settings. </p> </note>"
+          "documentation":"<p>The set of port numbers to open on each fleet instance. A fleet's connection ports map to container ports that are configured in the fleet's container group definitions. </p> <p>By default, Amazon GameLift Servers calculates an optimal port range based on your fleet configuration. To use the calculated range, don't set this parameter. The values are:</p> <ul> <li> <p>Port range: 4192 to a number calculated based on your fleet configuration. Amazon GameLift Servers uses the following formula: <code>4192 + [# of game server container groups per fleet instance] * [# of container ports in the game server container group definition] + [# of container ports in the game server container group definition]</code> </p> </li> </ul> <p>You can also choose to manually set this parameter. When manually setting this parameter, you must use port numbers that match the fleet's inbound permissions port range.</p> <note> <p>If you set values manually, Amazon GameLift Servers no longer calculates a port range for you, even if you later remove the manual settings. </p> </note>"
         },
         "InstanceInboundPermissions":{
           "shape":"IpPermissionsList",
-          "documentation":"<p>The IP address ranges and port settings that allow inbound traffic to access game server processes and other processes on this fleet. As a best practice, when remotely accessing a fleet instance, we recommend opening ports only when you need them and closing them when you're finished.</p> <p>By default, Amazon GameLift calculates an optimal port range based on your fleet configuration. To use the calculated range, don't set this parameter. The values are:</p> <ul> <li> <p>Protocol: UDP</p> </li> <li> <p>Port range: 4192 to a number calculated based on your fleet configuration. Amazon GameLift uses the following formula: <code>4192 + [# of game server container groups per fleet instance] * [# of container ports in the game server container group definition] + [# of container ports in the game server container group definition]</code> </p> </li> </ul> <p>You can also choose to manually set this parameter. When manually setting this parameter, you must use port numbers that match the fleet's connection port range.</p> <note> <p>If you set values manually, Amazon GameLift no longer calculates a port range for you, even if you later remove the manual settings. </p> </note>"
+          "documentation":"<p>The IP address ranges and port settings that allow inbound traffic to access game server processes and other processes on this fleet. As a best practice, when remotely accessing a fleet instance, we recommend opening ports only when you need them and closing them when you're finished.</p> <p>By default, Amazon GameLift Servers calculates an optimal port range based on your fleet configuration. To use the calculated range, don't set this parameter. The values are:</p> <ul> <li> <p>Protocol: UDP</p> </li> <li> <p>Port range: 4192 to a number calculated based on your fleet configuration. Amazon GameLift Servers uses the following formula: <code>4192 + [# of game server container groups per fleet instance] * [# of container ports in the game server container group definition] + [# of container ports in the game server container group definition]</code> </p> </li> </ul> <p>You can also choose to manually set this parameter. When manually setting this parameter, you must use port numbers that match the fleet's connection port range.</p> <note> <p>If you set values manually, Amazon GameLift Servers no longer calculates a port range for you, even if you later remove the manual settings. </p> </note>"
         },
         "GameServerContainerGroupsPerInstance":{
           "shape":"GameServerContainerGroupsPerInstance",
-          "documentation":"<p>The number of times to replicate the game server container group on each fleet instance. </p> <p>By default, Amazon GameLift calculates the maximum number of game server container groups that can fit on each instance. This calculation is based on the CPU and memory resources of the fleet's instance type). To use the calculated maximum, don't set this parameter. If you set this number manually, Amazon GameLift uses your value as long as it's less than the calculated maximum.</p>"
+          "documentation":"<p>The number of times to replicate the game server container group on each fleet instance. </p> <p>By default, Amazon GameLift Servers calculates the maximum number of game server container groups that can fit on each instance. This calculation is based on the CPU and memory resources of the fleet's instance type). To use the calculated maximum, don't set this parameter. If you set this number manually, Amazon GameLift Servers uses your value as long as it's less than the calculated maximum.</p>"
         },
         "InstanceType":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>The Amazon EC2 instance type to use for all instances in the fleet. For multi-location fleets, the instance type must be available in the home region and all remote locations. Instance type determines the computing resources and processing power that's available to host your game servers. This includes including CPU, memory, storage, and networking capacity. </p> <p>By default, Amazon GameLift selects an instance type that fits the needs of your container groups and is available in all selected fleet locations. You can also choose to manually set this parameter. See <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon Elastic Compute Cloud Instance Types</a> for detailed descriptions of Amazon EC2 instance types.</p> <p>You can't update this fleet property later.</p>"
+          "documentation":"<p>The Amazon EC2 instance type to use for all instances in the fleet. For multi-location fleets, the instance type must be available in the home region and all remote locations. Instance type determines the computing resources and processing power that's available to host your game servers. This includes including CPU, memory, storage, and networking capacity. </p> <p>By default, Amazon GameLift Servers selects an instance type that fits the needs of your container groups and is available in all selected fleet locations. You can also choose to manually set this parameter. See <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon Elastic Compute Cloud Instance Types</a> for detailed descriptions of Amazon EC2 instance types.</p> <p>You can't update this fleet property later.</p>"
         },
         "BillingType":{
           "shape":"ContainerFleetBillingType",
@@ -3065,7 +3065,7 @@
         },
         "Locations":{
           "shape":"LocationConfigurationList",
-          "documentation":"<p>A set of locations to deploy container fleet instances to. You can add any Amazon Web Services Region or Local Zone that's supported by Amazon GameLift. Provide a list of one or more Amazon Web Services Region codes, such as <code>us-west-2</code>, or Local Zone names. Also include the fleet's home Region, which is the Amazon Web Services Region where the fleet is created. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting.</p>"
+          "documentation":"<p>A set of locations to deploy container fleet instances to. You can add any Amazon Web Services Region or Local Zone that's supported by Amazon GameLift Servers. Provide a list of one or more Amazon Web Services Region codes, such as <code>us-west-2</code>, or Local Zone names. Also include the fleet's home Region, which is the Amazon Web Services Region where the fleet is created. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting.</p>"
         },
         "MetricGroups":{
           "shape":"MetricGroupList",
@@ -3073,7 +3073,7 @@
         },
         "NewGameSessionProtectionPolicy":{
           "shape":"ProtectionPolicy",
-          "documentation":"<p>Determines whether Amazon GameLift can shut down game sessions on the fleet that are actively running and hosting players. Amazon GameLift might prompt an instance shutdown when scaling down fleet capacity or when retiring unhealthy instances. You can also set game session protection for individual game sessions using <a href=\"gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a>.</p> <ul> <li> <p> <b>NoProtection</b> -- Game sessions can be shut down during active gameplay. </p> </li> <li> <p> <b>FullProtection</b> -- Game sessions in <code>ACTIVE</code> status can't be shut down.</p> </li> </ul> <p>By default, this property is set to <code>NoProtection</code>. </p>"
+          "documentation":"<p>Determines whether Amazon GameLift Servers can shut down game sessions on the fleet that are actively running and hosting players. Amazon GameLift Servers might prompt an instance shutdown when scaling down fleet capacity or when retiring unhealthy instances. You can also set game session protection for individual game sessions using <a href=\"gamelift/latest/apireference/API_UpdateGameSession.html\">UpdateGameSession</a>.</p> <ul> <li> <p> <b>NoProtection</b> -- Game sessions can be shut down during active gameplay. </p> </li> <li> <p> <b>FullProtection</b> -- Game sessions in <code>ACTIVE</code> status can't be shut down.</p> </li> </ul> <p>By default, this property is set to <code>NoProtection</code>. </p>"
         },
         "GameSessionCreationLimitPolicy":{
           "shape":"GameSessionCreationLimitPolicy",
@@ -3081,7 +3081,7 @@
         },
         "LogConfiguration":{
           "shape":"LogConfiguration",
-          "documentation":"<p>A method for collecting container logs for the fleet. Amazon GameLift saves all standard output for each container in logs, including game session logs. You can select from the following methods: </p> <ul> <li> <p> <code>CLOUDWATCH</code> -- Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul> <p>By default, this property is set to <code>CLOUDWATCH</code>. </p> <p>Amazon GameLift requires permissions to send logs other Amazon Web Services services in your account. These permissions are included in the IAM fleet role for this container fleet (see <code>FleetRoleArn)</code>.</p>"
+          "documentation":"<p>A method for collecting container logs for the fleet. Amazon GameLift Servers saves all standard output for each container in logs, including game session logs. You can select from the following methods: </p> <ul> <li> <p> <code>CLOUDWATCH</code> -- Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul> <p>By default, this property is set to <code>CLOUDWATCH</code>. </p> <p>Amazon GameLift Servers requires permissions to send logs other Amazon Web Services services in your account. These permissions are included in the IAM fleet role for this container fleet (see <code>FleetRoleArn)</code>.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -3113,7 +3113,7 @@
         },
         "ContainerGroupType":{
           "shape":"ContainerGroupType",
-          "documentation":"<p>The type of container group being defined. Container group type determines how Amazon GameLift deploys the container group on each fleet instance.</p> <p>Default value: <code>GAME_SERVER</code> </p>"
+          "documentation":"<p>The type of container group being defined. Container group type determines how Amazon GameLift Servers deploys the container group on each fleet instance.</p> <p>Default value: <code>GAME_SERVER</code> </p>"
         },
         "TotalMemoryLimitMebibytes":{
           "shape":"ContainerTotalMemoryLimit",
@@ -3133,7 +3133,7 @@
         },
         "OperatingSystem":{
           "shape":"ContainerOperatingSystem",
-          "documentation":"<p>The platform that all containers in the group use. Containers in a group must run on the same operating system.</p> <p>Default value: <code>AMAZON_LINUX_2023</code> </p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The platform that all containers in the group use. Containers in a group must run on the same operating system.</p> <p>Default value: <code>AMAZON_LINUX_2023</code> </p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "VersionDescription":{
           "shape":"NonZeroAndMaxString",
@@ -3168,11 +3168,11 @@
         },
         "BuildId":{
           "shape":"BuildIdOrArn",
-          "documentation":"<p>The unique identifier for a custom game server build to be deployed to a fleet with compute type <code>EC2</code>. You can use either the build ID or ARN. The build must be uploaded to Amazon GameLift and in <code>READY</code> status. This fleet property can't be changed after the fleet is created.</p>"
+          "documentation":"<p>The unique identifier for a custom game server build to be deployed to a fleet with compute type <code>EC2</code>. You can use either the build ID or ARN. The build must be uploaded to Amazon GameLift Servers and in <code>READY</code> status. This fleet property can't be changed after the fleet is created.</p>"
         },
         "ScriptId":{
           "shape":"ScriptIdOrArn",
-          "documentation":"<p>The unique identifier for a Realtime configuration script to be deployed to a fleet with compute type <code>EC2</code>. You can use either the script ID or ARN. Scripts must be uploaded to Amazon GameLift prior to creating the fleet. This fleet property can't be changed after the fleet is created.</p>"
+          "documentation":"<p>The unique identifier for a Realtime configuration script to be deployed to a fleet with compute type <code>EC2</code>. You can use either the script ID or ARN. Scripts must be uploaded to Amazon GameLift Servers prior to creating the fleet. This fleet property can't be changed after the fleet is created.</p>"
         },
         "ServerLaunchPath":{
           "shape":"LaunchPathStringModel",
@@ -3184,15 +3184,15 @@
         },
         "LogPaths":{
           "shape":"StringList",
-          "documentation":"<p> <b>This parameter is no longer used.</b> To specify where Amazon GameLift should store log files once a server process shuts down, use the Amazon GameLift server API <code>ProcessReady()</code> and specify one or more directory paths in <code>logParameters</code>. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-initialize\">Initialize the server process</a> in the <i>Amazon GameLift Developer Guide</i>. </p>"
+          "documentation":"<p> <b>This parameter is no longer used.</b> To specify where Amazon GameLift Servers should store log files once a server process shuts down, use the Amazon GameLift Servers server API <code>ProcessReady()</code> and specify one or more directory paths in <code>logParameters</code>. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-initialize\">Initialize the server process</a> in the <i>Amazon GameLift Servers Developer Guide</i>. </p>"
         },
         "EC2InstanceType":{
           "shape":"EC2InstanceType",
-          "documentation":"<p>The Amazon GameLift-supported Amazon EC2 instance type to use with managed EC2 fleets. Instance type determines the computing resources that will be used to host your game servers, including CPU, memory, storage, and networking capacity. See <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon Elastic Compute Cloud Instance Types</a> for detailed descriptions of Amazon EC2 instance types.</p>"
+          "documentation":"<p>The Amazon GameLift Servers-supported Amazon EC2 instance type to use with managed EC2 fleets. Instance type determines the computing resources that will be used to host your game servers, including CPU, memory, storage, and networking capacity. See <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon Elastic Compute Cloud Instance Types</a> for detailed descriptions of Amazon EC2 instance types.</p>"
         },
         "EC2InboundPermissions":{
           "shape":"IpPermissionsList",
-          "documentation":"<p>The IP address ranges and port settings that allow inbound traffic to access game server processes and other processes on this fleet. Set this parameter for managed EC2 fleets. You can leave this parameter empty when creating the fleet, but you must call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetPortSettings\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetPortSettings</a> to set it before players can connect to game sessions. As a best practice, we recommend opening ports for remote access only when you need them and closing them when you're finished. For Realtime Servers fleets, Amazon GameLift automatically sets TCP and UDP ranges.</p>"
+          "documentation":"<p>The IP address ranges and port settings that allow inbound traffic to access game server processes and other processes on this fleet. Set this parameter for managed EC2 fleets. You can leave this parameter empty when creating the fleet, but you must call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetPortSettings\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateFleetPortSettings</a> to set it before players can connect to game sessions. As a best practice, we recommend opening ports for remote access only when you need them and closing them when you're finished. For Amazon GameLift Servers Realtime fleets, Amazon GameLift Servers automatically sets TCP and UDP ranges.</p>"
         },
         "NewGameSessionProtectionPolicy":{
           "shape":"ProtectionPolicy",
@@ -3200,7 +3200,7 @@
         },
         "RuntimeConfiguration":{
           "shape":"RuntimeConfiguration",
-          "documentation":"<p>Instructions for how to launch and run server processes on the fleet. Set runtime configuration for managed EC2 fleets. For an Anywhere fleets, set this parameter only if the fleet is running the Amazon GameLift Agent. The runtime configuration defines one or more server process configurations. Each server process identifies a game executable or Realtime script file and the number of processes to run concurrently. </p> <note> <p>This parameter replaces the parameters <code>ServerLaunchPath</code> and <code>ServerLaunchParameters</code>, which are still supported for backward compatibility.</p> </note>"
+          "documentation":"<p>Instructions for how to launch and run server processes on the fleet. Set runtime configuration for managed EC2 fleets. For an Anywhere fleets, set this parameter only if the fleet is running the Amazon GameLift Servers Agent. The runtime configuration defines one or more server process configurations. Each server process identifies a game executable or Realtime script file and the number of processes to run concurrently. </p> <note> <p>This parameter replaces the parameters <code>ServerLaunchPath</code> and <code>ServerLaunchParameters</code>, which are still supported for backward compatibility.</p> </note>"
         },
         "ResourceCreationLimitPolicy":{
           "shape":"ResourceCreationLimitPolicy",
@@ -3212,11 +3212,11 @@
         },
         "PeerVpcAwsAccountId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>Used when peering your Amazon GameLift fleet with a VPC, the unique identifier for the Amazon Web Services account that owns the VPC. You can find your account ID in the Amazon Web Services Management Console under account settings. </p>"
+          "documentation":"<p>Used when peering your Amazon GameLift Servers fleet with a VPC, the unique identifier for the Amazon Web Services account that owns the VPC. You can find your account ID in the Amazon Web Services Management Console under account settings. </p>"
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         },
         "FleetType":{
           "shape":"FleetType",
@@ -3228,11 +3228,11 @@
         },
         "CertificateConfiguration":{
           "shape":"CertificateConfiguration",
-          "documentation":"<p>Prompts Amazon GameLift to generate a TLS/SSL certificate for the fleet. Amazon GameLift uses the certificates to encrypt traffic between game clients and the game servers running on Amazon GameLift. By default, the <code>CertificateConfiguration</code> is <code>DISABLED</code>. You can't change this property after you create the fleet. </p> <p>Certificate Manager (ACM) certificates expire after 13 months. Certificate expiration can cause fleets to fail, preventing players from connecting to instances in the fleet. We recommend you replace fleets before 13 months, consider using fleet aliases for a smooth transition.</p> <note> <p>ACM isn't available in all Amazon Web Services regions. A fleet creation request with certificate generation enabled in an unsupported Region, fails with a 4xx error. For more information about the supported Regions, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-regions.html\">Supported Regions</a> in the <i>Certificate Manager User Guide</i>.</p> </note>"
+          "documentation":"<p>Prompts Amazon GameLift Servers to generate a TLS/SSL certificate for the fleet. Amazon GameLift Servers uses the certificates to encrypt traffic between game clients and the game servers running on Amazon GameLift Servers. By default, the <code>CertificateConfiguration</code> is <code>DISABLED</code>. You can't change this property after you create the fleet. </p> <p>Certificate Manager (ACM) certificates expire after 13 months. Certificate expiration can cause fleets to fail, preventing players from connecting to instances in the fleet. We recommend you replace fleets before 13 months, consider using fleet aliases for a smooth transition.</p> <note> <p>ACM isn't available in all Amazon Web Services regions. A fleet creation request with certificate generation enabled in an unsupported Region, fails with a 4xx error. For more information about the supported Regions, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/acm-regions.html\">Supported Regions</a> in the <i>Certificate Manager User Guide</i>.</p> </note>"
         },
         "Locations":{
           "shape":"LocationConfigurationList",
-          "documentation":"<p>A set of remote locations to deploy additional instances to and manage as a multi-location fleet. Use this parameter when creating a fleet in Amazon Web Services Regions that support multiple locations. You can add any Amazon Web Services Region or Local Zone that's supported by Amazon GameLift. Provide a list of one or more Amazon Web Services Region codes, such as <code>us-west-2</code>, or Local Zone names. When using this parameter, Amazon GameLift requires you to include your home location in the request. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting.</p>"
+          "documentation":"<p>A set of remote locations to deploy additional instances to and manage as a multi-location fleet. Use this parameter when creating a fleet in Amazon Web Services Regions that support multiple locations. You can add any Amazon Web Services Region or Local Zone that's supported by Amazon GameLift Servers. Provide a list of one or more Amazon Web Services Region codes, such as <code>us-west-2</code>, or Local Zone names. When using this parameter, Amazon GameLift Servers requires you to include your home location in the request. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -3244,11 +3244,11 @@
         },
         "AnywhereConfiguration":{
           "shape":"AnywhereConfiguration",
-          "documentation":"<p>Amazon GameLift Anywhere configuration options.</p>"
+          "documentation":"<p>Amazon GameLift Servers Anywhere configuration options.</p>"
         },
         "InstanceRoleCredentialsProvider":{
           "shape":"InstanceRoleCredentialsProvider",
-          "documentation":"<p>Prompts Amazon GameLift to generate a shared credentials file for the IAM role that's defined in <code>InstanceRoleArn</code>. The shared credentials file is stored on each fleet instance and refreshed as needed. Use shared credentials for applications that are deployed along with the game server executable, if the game server is integrated with server SDK version 5.x. For more information about using shared credentials, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-resources.html\"> Communicate with other Amazon Web Services resources from your fleets</a>.</p>"
+          "documentation":"<p>Prompts Amazon GameLift Servers to generate a shared credentials file for the IAM role that's defined in <code>InstanceRoleArn</code>. The shared credentials file is stored on each fleet instance and refreshed as needed. Use shared credentials for applications that are deployed along with the game server executable, if the game server is integrated with server SDK version 5.x. For more information about using shared credentials, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-resources.html\"> Communicate with other Amazon Web Services resources from your fleets</a>.</p>"
         }
       }
     },
@@ -3265,7 +3265,7 @@
         },
         "Locations":{
           "shape":"LocationConfigurationList",
-          "documentation":"<p>A list of locations to deploy additional instances to and manage as part of the fleet. You can add any Amazon GameLift-supported Amazon Web Services Region as a remote location, in the form of an Amazon Web Services Region code such as <code>us-west-2</code>. </p>"
+          "documentation":"<p>A list of locations to deploy additional instances to and manage as part of the fleet. You can add any Amazon GameLift Servers-supported Amazon Web Services Region as a remote location, in the form of an Amazon Web Services Region code such as <code>us-west-2</code>. </p>"
         }
       }
     },
@@ -3278,11 +3278,11 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. </p>"
         },
         "LocationStates":{
           "shape":"LocationStateList",
-          "documentation":"<p>The remote locations that are being added to the fleet, and the life-cycle status of each location. For new locations, the status is set to <code>NEW</code>. During location creation, Amazon GameLift updates each location's status as instances are deployed there and prepared for game hosting. This list does not include the fleet home Region or any remote locations that were already added to the fleet.</p>"
+          "documentation":"<p>The remote locations that are being added to the fleet, and the life-cycle status of each location. For new locations, the status is set to <code>NEW</code>. During location creation, Amazon GameLift Servers updates each location's status as instances are deployed there and prepared for game hosting. This list does not include the fleet home Region or any remote locations that were already added to the fleet.</p>"
         }
       }
     },
@@ -3295,7 +3295,7 @@
         },
         "LocationStates":{
           "shape":"LocationStateList",
-          "documentation":"<p>The fleet's locations and life-cycle status of each location. For new fleets, the status of all locations is set to <code>NEW</code>. During fleet creation, Amazon GameLift updates each location status as instances are deployed there and prepared for game hosting. This list includes an entry for the fleet's home Region. For fleets with no remote locations, only one entry, representing the home Region, is returned.</p>"
+          "documentation":"<p>The fleet's locations and life-cycle status of each location. For new fleets, the status of all locations is set to <code>NEW</code>. During fleet creation, Amazon GameLift Servers updates each location status as instances are deployed there and prepared for game hosting. This list includes an entry for the fleet's home Region. For fleets with no remote locations, only one entry, representing the home Region, is returned.</p>"
         }
       }
     },
@@ -3312,27 +3312,27 @@
       "members":{
         "GameServerGroupName":{
           "shape":"GameServerGroupName",
-          "documentation":"<p>An identifier for the new game server group. This value is used to generate unique ARN identifiers for the Amazon EC2 Auto Scaling group and the Amazon GameLift FleetIQ game server group. The name must be unique per Region per Amazon Web Services account.</p>"
+          "documentation":"<p>An identifier for the new game server group. This value is used to generate unique ARN identifiers for the Amazon EC2 Auto Scaling group and the Amazon GameLift Servers FleetIQ game server group. The name must be unique per Region per Amazon Web Services account.</p>"
         },
         "RoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift to access your Amazon EC2 Auto Scaling groups.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift Servers to access your Amazon EC2 Auto Scaling groups.</p>"
         },
         "MinSize":{
           "shape":"WholeNumber",
-          "documentation":"<p>The minimum number of instances allowed in the Amazon EC2 Auto Scaling group. During automatic scaling events, Amazon GameLift FleetIQ and Amazon EC2 do not scale down the group below this minimum. In production, this value should be set to at least 1. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p>"
+          "documentation":"<p>The minimum number of instances allowed in the Amazon EC2 Auto Scaling group. During automatic scaling events, Amazon GameLift Servers FleetIQ and Amazon EC2 do not scale down the group below this minimum. In production, this value should be set to at least 1. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p>"
         },
         "MaxSize":{
           "shape":"PositiveInteger",
-          "documentation":"<p>The maximum number of instances allowed in the Amazon EC2 Auto Scaling group. During automatic scaling events, Amazon GameLift FleetIQ and EC2 do not scale up the group above this maximum. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p>"
+          "documentation":"<p>The maximum number of instances allowed in the Amazon EC2 Auto Scaling group. During automatic scaling events, Amazon GameLift Servers FleetIQ and EC2 do not scale up the group above this maximum. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p>"
         },
         "LaunchTemplate":{
           "shape":"LaunchTemplateSpecification",
-          "documentation":"<p>The Amazon EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group. You can specify the template using either the template name or ID. For help with creating a launch template, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html\">Creating a Launch Template for an Auto Scaling Group</a> in the <i>Amazon Elastic Compute Cloud Auto Scaling User Guide</i>. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p> <note> <p>If you specify network interfaces in your launch template, you must explicitly set the property <code>AssociatePublicIpAddress</code> to \"true\". If no network interface is specified in the launch template, Amazon GameLift FleetIQ uses your account's default VPC.</p> </note>"
+          "documentation":"<p>The Amazon EC2 launch template that contains configuration settings and game server code to be deployed to all instances in the game server group. You can specify the template using either the template name or ID. For help with creating a launch template, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html\">Creating a Launch Template for an Auto Scaling Group</a> in the <i>Amazon Elastic Compute Cloud Auto Scaling User Guide</i>. After the Auto Scaling group is created, update this value directly in the Auto Scaling group using the Amazon Web Services console or APIs.</p> <note> <p>If you specify network interfaces in your launch template, you must explicitly set the property <code>AssociatePublicIpAddress</code> to \"true\". If no network interface is specified in the launch template, Amazon GameLift Servers FleetIQ uses your account's default VPC.</p> </note>"
         },
         "InstanceDefinitions":{
           "shape":"InstanceDefinitions",
-          "documentation":"<p>The Amazon EC2 instance types and sizes to use in the Auto Scaling group. The instance definitions must specify at least two different instance types that are supported by Amazon GameLift FleetIQ. For more information on instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">EC2 Instance Types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. You can optionally specify capacity weighting for each instance type. If no weight value is specified for an instance type, it is set to the default value \"1\". For more information about capacity weighting, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\"> Instance Weighting for Amazon EC2 Auto Scaling</a> in the Amazon EC2 Auto Scaling User Guide.</p>"
+          "documentation":"<p>The Amazon EC2 instance types and sizes to use in the Auto Scaling group. The instance definitions must specify at least two different instance types that are supported by Amazon GameLift Servers FleetIQ. For more information on instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">EC2 Instance Types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. You can optionally specify capacity weighting for each instance type. If no weight value is specified for an instance type, it is set to the default value \"1\". For more information about capacity weighting, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\"> Instance Weighting for Amazon EC2 Auto Scaling</a> in the Amazon EC2 Auto Scaling User Guide.</p>"
         },
         "AutoScalingPolicy":{
           "shape":"GameServerGroupAutoScalingPolicy",
@@ -3340,7 +3340,7 @@
         },
         "BalancingStrategy":{
           "shape":"BalancingStrategy",
-          "documentation":"<p>Indicates how Amazon GameLift FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
+          "documentation":"<p>Indicates how Amazon GameLift Servers FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
         },
         "GameServerProtectionPolicy":{
           "shape":"GameServerProtectionPolicy",
@@ -3348,7 +3348,7 @@
         },
         "VpcSubnets":{
           "shape":"VpcSubnets",
-          "documentation":"<p>A list of virtual private cloud (VPC) subnets to use with instances in the game server group. By default, all Amazon GameLift FleetIQ-supported Availability Zones are used. You can use this parameter to specify VPCs that you've set up. This property cannot be updated after the game server group is created, and the corresponding Auto Scaling group will always use the property value that is set with this request, even if the Auto Scaling group is updated directly.</p>"
+          "documentation":"<p>A list of virtual private cloud (VPC) subnets to use with instances in the game server group. By default, all Amazon GameLift Servers FleetIQ-supported Availability Zones are used. You can use this parameter to specify VPCs that you've set up. This property cannot be updated after the game server group is created, and the corresponding Auto Scaling group will always use the property value that is set with this request, even if the Auto Scaling group is updated directly.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -3361,7 +3361,7 @@
       "members":{
         "GameServerGroup":{
           "shape":"GameServerGroup",
-          "documentation":"<p>The newly created game server group object, including the new ARN value for the Amazon GameLift FleetIQ game server group and the object's status. The Amazon EC2 Auto Scaling group ARN is initially null, since the group has not yet been created. This value is added once the game server group status reaches <code>ACTIVE</code>. </p>"
+          "documentation":"<p>The newly created game server group object, including the new ARN value for the Amazon GameLift Servers FleetIQ game server group and the object's status. The Amazon EC2 Auto Scaling group ARN is initially null, since the group has not yet been created. This value is added once the game server group status reaches <code>ACTIVE</code>. </p>"
         }
       }
     },
@@ -3391,7 +3391,7 @@
         },
         "CreatorId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a player or entity creating the game session. </p> <p>If you add a resource creation limit policy to a fleet, the <code>CreateGameSession</code> operation requires a <code>CreatorId</code>. Amazon GameLift limits the number of game session creation requests with the same <code>CreatorId</code> in a specified time period.</p> <p>If you your fleet doesn't have a resource creation limit policy and you provide a <code>CreatorId</code> in your <code>CreateGameSession</code> requests, Amazon GameLift limits requests to one request per <code>CreatorId</code> per second.</p> <p>To not limit <code>CreateGameSession</code> requests with the same <code>CreatorId</code>, don't provide a <code>CreatorId</code> in your <code>CreateGameSession</code> request.</p>"
+          "documentation":"<p>A unique identifier for a player or entity creating the game session. </p> <p>If you add a resource creation limit policy to a fleet, the <code>CreateGameSession</code> operation requires a <code>CreatorId</code>. Amazon GameLift Servers limits the number of game session creation requests with the same <code>CreatorId</code> in a specified time period.</p> <p>If you your fleet doesn't have a resource creation limit policy and you provide a <code>CreatorId</code> in your <code>CreateGameSession</code> requests, Amazon GameLift Servers limits requests to one request per <code>CreatorId</code> per second.</p> <p>To not limit <code>CreateGameSession</code> requests with the same <code>CreatorId</code>, don't provide a <code>CreatorId</code> in your <code>CreateGameSession</code> request.</p>"
         },
         "GameSessionId":{
           "shape":"IdStringModel",
@@ -3399,7 +3399,7 @@
         },
         "IdempotencyToken":{
           "shape":"IdStringModel",
-          "documentation":"<p>Custom string that uniquely identifies the new game session request. This is useful for ensuring that game session requests with the same idempotency token are processed only once. Subsequent requests with the same string return the original <code>GameSession</code> object, with an updated status. Maximum token length is 48 characters. If provided, this string is included in the new game session's ID. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;region&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>. Idempotency tokens remain in use for 30 days after a game session has ended; game session objects are retained for this time period and then deleted.</p>"
+          "documentation":"<p>Custom string that uniquely identifies the new game session request. This is useful for ensuring that game session requests with the same idempotency token are processed only once. Subsequent requests with the same string return the original <code>GameSession</code> object, with an updated status. Maximum token length is 48 characters. If provided, this string is included in the new game session's ID. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;location&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>. Idempotency tokens remain in use for 30 days after a game session has ended; game session objects are retained for this time period and then deleted.</p>"
         },
         "GameSessionData":{
           "shape":"LargeGameSessionData",
@@ -3430,11 +3430,11 @@
         },
         "TimeoutInSeconds":{
           "shape":"WholeNumber",
-          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status.</p>"
+          "documentation":"<p>The maximum time, in seconds, that a new game session placement request remains in the queue. When a request exceeds this time, the game session placement changes to a <code>TIMED_OUT</code> status. If you don't specify a request timeout, the queue uses a default value.</p>"
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
-          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value.</p>"
+          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift Servers can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value.</p>"
         },
         "Destinations":{
           "shape":"GameSessionQueueDestinationList",
@@ -3513,7 +3513,7 @@
         },
         "GameSessionQueueArns":{
           "shape":"QueueArnsList",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift-hosted game sessions for matches that are created with this matchmaking configuration. If <code>FlexMatchMode</code> is set to <code>STANDALONE</code>, do not set this parameter. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift Servers-hosted game sessions for matches that are created with this matchmaking configuration. If <code>FlexMatchMode</code> is set to <code>STANDALONE</code>, do not set this parameter. </p>"
         },
         "RequestTimeoutSeconds":{
           "shape":"MatchmakingRequestTimeoutInteger",
@@ -3553,11 +3553,11 @@
         },
         "BackfillMode":{
           "shape":"BackfillMode",
-          "documentation":"<p>The method used to backfill game sessions that are created with this matchmaking configuration. Specify <code>MANUAL</code> when your game manages backfill requests manually or does not use the match backfill feature. Specify <code>AUTOMATIC</code> to have Amazon GameLift create a backfill request whenever a game session has one or more open slots. Learn more about manual and automatic backfill in <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-backfill.html\"> Backfill Existing Games with FlexMatch</a>. Automatic backfill is not available when <code>FlexMatchMode</code> is set to <code>STANDALONE</code>.</p>"
+          "documentation":"<p>The method used to backfill game sessions that are created with this matchmaking configuration. Specify <code>MANUAL</code> when your game manages backfill requests manually or does not use the match backfill feature. Specify <code>AUTOMATIC</code> to have Amazon GameLift Servers create a backfill request whenever a game session has one or more open slots. Learn more about manual and automatic backfill in <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-backfill.html\"> Backfill Existing Games with FlexMatch</a>. Automatic backfill is not available when <code>FlexMatchMode</code> is set to <code>STANDALONE</code>.</p>"
         },
         "FlexMatchMode":{
           "shape":"FlexMatchMode",
-          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift queue to start a game session for the match. </p> </li> </ul>"
+          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift Servers hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift Servers queue to start a game session for the match. </p> </li> </ul>"
         },
         "Tags":{
           "shape":"TagList",
@@ -3622,7 +3622,7 @@
         },
         "PlayerData":{
           "shape":"PlayerData",
-          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift does not use this data, so it can be formatted as needed for use in the game.</p>"
+          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift Servers does not use this data, so it can be formatted as needed for use in the game.</p>"
         }
       }
     },
@@ -3652,7 +3652,7 @@
         },
         "PlayerDataMap":{
           "shape":"PlayerDataMap",
-          "documentation":"<p>Map of string pairs, each specifying a player ID and a set of developer-defined information related to the player. Amazon GameLift does not use this data, so it can be formatted as needed for use in the game. Any player data strings for player IDs that are not included in the <code>PlayerIds</code> parameter are ignored. </p>"
+          "documentation":"<p>Map of string pairs, each specifying a player ID and a set of developer-defined information related to the player. Amazon GameLift Servers does not use this data, so it can be formatted as needed for use in the game. Any player data strings for player IDs that are not included in the <code>PlayerIds</code> parameter are ignored. </p>"
         }
       }
     },
@@ -3678,7 +3678,7 @@
         },
         "StorageLocation":{
           "shape":"S3Location",
-          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
+          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift Servers to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift Servers uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
         },
         "ZipFile":{
           "shape":"ZipBlob",
@@ -3695,7 +3695,7 @@
       "members":{
         "Script":{
           "shape":"Script",
-          "documentation":"<p>The newly created script record with a unique script ID and ARN. The new script's storage location reflects an Amazon S3 location: (1) If the script was uploaded from an S3 bucket under your account, the storage location reflects the information that was provided in the <i>CreateScript</i> request; (2) If the script file was uploaded from a local zip file, the storage location reflects an S3 location controls by the Amazon GameLift service.</p>"
+          "documentation":"<p>The newly created script record with a unique script ID and ARN. The new script's storage location reflects an Amazon S3 location: (1) If the script was uploaded from an S3 bucket under your account, the storage location reflects the information that was provided in the <i>CreateScript</i> request; (2) If the script file was uploaded from a local zip file, the storage location reflects an S3 location controls by the Amazon GameLift Servers service.</p>"
         }
       }
     },
@@ -3708,11 +3708,11 @@
       "members":{
         "GameLiftAwsAccountId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
+          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift Servers fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         }
       }
     },
@@ -3735,22 +3735,21 @@
       "members":{
         "FleetId":{
           "shape":"FleetId",
-          "documentation":"<p>A unique identifier for the fleet. You can use either the fleet ID or ARN value. This tells Amazon GameLift which GameLift VPC to peer with. </p>"
+          "documentation":"<p>A unique identifier for the fleet. You can use either the fleet ID or ARN value. This tells Amazon GameLift Servers which GameLift VPC to peer with. </p>"
         },
         "PeerVpcAwsAccountId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the Amazon Web Services account with the VPC that you want to peer your Amazon GameLift fleet with. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
+          "documentation":"<p>A unique identifier for the Amazon Web Services account with the VPC that you want to peer your Amazon GameLift Servers fleet with. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         }
       }
     },
     "CreateVpcPeeringConnectionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomEventData":{
       "type":"string",
@@ -3801,8 +3800,7 @@
     },
     "DeleteContainerFleetOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContainerGroupDefinitionInput":{
       "type":"structure",
@@ -3824,8 +3822,7 @@
     },
     "DeleteContainerGroupDefinitionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFleetInput":{
       "type":"structure",
@@ -3863,7 +3860,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "LocationStates":{
           "shape":"LocationStateList",
@@ -3906,8 +3903,7 @@
     },
     "DeleteGameSessionQueueOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLocationInput":{
       "type":"structure",
@@ -3921,8 +3917,7 @@
     },
     "DeleteLocationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMatchmakingConfigurationInput":{
       "type":"structure",
@@ -3936,8 +3931,7 @@
     },
     "DeleteMatchmakingConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMatchmakingRuleSetInput":{
       "type":"structure",
@@ -3951,8 +3945,7 @@
     },
     "DeleteMatchmakingRuleSetOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteScalingPolicyInput":{
       "type":"structure",
@@ -3990,18 +3983,17 @@
       "members":{
         "GameLiftAwsAccountId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
+          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift Servers fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         }
       }
     },
     "DeleteVpcPeeringAuthorizationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVpcPeeringConnectionInput":{
       "type":"structure",
@@ -4022,8 +4014,7 @@
     },
     "DeleteVpcPeeringConnectionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeploymentConfiguration":{
       "type":"structure",
@@ -4104,8 +4095,7 @@
     },
     "DeregisterComputeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterGameServerInput":{
       "type":"structure",
@@ -4175,7 +4165,7 @@
         },
         "ComputeName":{
           "shape":"ComputeNameOrArn",
-          "documentation":"<p>The unique identifier of the compute resource to retrieve properties for. For an Anywhere fleet compute, use the registered compute name. For an EC2 fleet instance, use the instance ID. </p>"
+          "documentation":"<p>The unique identifier of the compute resource to retrieve properties for. For a managed container fleet or Anywhere fleet, use a compute name. For an EC2 fleet, use an instance ID. To retrieve a fleet's compute identifiers, call <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html\">ListCompute</a>.</p>"
         }
       }
     },
@@ -4235,7 +4225,7 @@
       "members":{
         "EC2InstanceType":{
           "shape":"EC2InstanceType",
-          "documentation":"<p>Name of an Amazon EC2 instance type that is supported in Amazon GameLift. A fleet instance type determines the computing resources of each instance in the fleet, including CPU, memory, storage, and networking capacity. Do not specify a value for this parameter to retrieve limits for all instance types.</p>"
+          "documentation":"<p>Name of an Amazon EC2 instance type that is supported in Amazon GameLift Servers. A fleet instance type determines the computing resources of each instance in the fleet, including CPU, memory, storage, and networking capacity. Do not specify a value for this parameter to retrieve limits for all instance types.</p>"
         },
         "Location":{
           "shape":"LocationStringModel",
@@ -4409,7 +4399,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "LocationAttributes":{
           "shape":"LocationAttributesList",
@@ -4496,7 +4486,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "InboundPermissions":{
           "shape":"IpPermissionsList",
@@ -5007,8 +4997,7 @@
     },
     "DescribeVpcPeeringAuthorizationsInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeVpcPeeringAuthorizationsOutput":{
       "type":"structure",
@@ -5046,7 +5035,7 @@
         },
         "PlayerData":{
           "shape":"PlayerData",
-          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift does not use this data, so it can be formatted as needed for use in the game.</p>"
+          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift Servers does not use this data, so it can be formatted as needed for use in the game.</p>"
         }
       },
       "documentation":"<p>Player information for use when creating player sessions using a game session placement request.</p>"
@@ -5069,7 +5058,7 @@
       "members":{
         "DESIRED":{
           "shape":"WholeNumber",
-          "documentation":"<p>Requested number of active instances. Amazon GameLift takes action as needed to maintain the desired number of instances. Capacity is scaled up or down by changing the desired instances. A change in the desired instances value can take up to 1 minute to be reflected when viewing a fleet's capacity settings. </p>"
+          "documentation":"<p>Requested number of active instances. Amazon GameLift Servers takes action as needed to maintain the desired number of instances. Capacity is scaled up or down by changing the desired instances. A change in the desired instances value can take up to 1 minute to be reflected when viewing a fleet's capacity settings. </p>"
         },
         "MINIMUM":{
           "shape":"WholeNumber",
@@ -5118,7 +5107,7 @@
           "documentation":"<p>An Amazon Web Services Region code, such as <code>us-west-2</code>. </p>"
         }
       },
-      "documentation":"<p>The Amazon GameLift service limits for an Amazon EC2 instance type and current utilization. Amazon GameLift allows Amazon Web Services accounts a maximum number of instances, per instance type, per Amazon Web Services Region or location, for use with Amazon GameLift. You can request an limit increase for your account by using the <b>Service limits</b> page in the Amazon GameLift console.</p>"
+      "documentation":"<p>The Amazon GameLift Servers service limits for an Amazon EC2 instance type and current utilization. Amazon GameLift Servers allows Amazon Web Services accounts a maximum number of instances, per instance type, per Amazon Web Services Region or location, for use with Amazon GameLift Servers. You can request an limit increase for your account by using the <b>Service limits</b> page in the Amazon GameLift Servers console.</p>"
     },
     "EC2InstanceLimitList":{
       "type":"list",
@@ -5301,7 +5290,337 @@
         "g5g.2xlarge",
         "g5g.4xlarge",
         "g5g.8xlarge",
-        "g5g.16xlarge"
+        "g5g.16xlarge",
+        "r6i.large",
+        "r6i.xlarge",
+        "r6i.2xlarge",
+        "r6i.4xlarge",
+        "r6i.8xlarge",
+        "r6i.12xlarge",
+        "r6i.16xlarge",
+        "c6gd.medium",
+        "c6gd.large",
+        "c6gd.xlarge",
+        "c6gd.2xlarge",
+        "c6gd.4xlarge",
+        "c6gd.8xlarge",
+        "c6gd.12xlarge",
+        "c6gd.16xlarge",
+        "c6in.large",
+        "c6in.xlarge",
+        "c6in.2xlarge",
+        "c6in.4xlarge",
+        "c6in.8xlarge",
+        "c6in.12xlarge",
+        "c6in.16xlarge",
+        "c7a.medium",
+        "c7a.large",
+        "c7a.xlarge",
+        "c7a.2xlarge",
+        "c7a.4xlarge",
+        "c7a.8xlarge",
+        "c7a.12xlarge",
+        "c7a.16xlarge",
+        "c7gd.medium",
+        "c7gd.large",
+        "c7gd.xlarge",
+        "c7gd.2xlarge",
+        "c7gd.4xlarge",
+        "c7gd.8xlarge",
+        "c7gd.12xlarge",
+        "c7gd.16xlarge",
+        "c7gn.medium",
+        "c7gn.large",
+        "c7gn.xlarge",
+        "c7gn.2xlarge",
+        "c7gn.4xlarge",
+        "c7gn.8xlarge",
+        "c7gn.12xlarge",
+        "c7gn.16xlarge",
+        "c7i.large",
+        "c7i.xlarge",
+        "c7i.2xlarge",
+        "c7i.4xlarge",
+        "c7i.8xlarge",
+        "c7i.12xlarge",
+        "c7i.16xlarge",
+        "m6a.large",
+        "m6a.xlarge",
+        "m6a.2xlarge",
+        "m6a.4xlarge",
+        "m6a.8xlarge",
+        "m6a.12xlarge",
+        "m6a.16xlarge",
+        "m6gd.medium",
+        "m6gd.large",
+        "m6gd.xlarge",
+        "m6gd.2xlarge",
+        "m6gd.4xlarge",
+        "m6gd.8xlarge",
+        "m6gd.12xlarge",
+        "m6gd.16xlarge",
+        "m6i.large",
+        "m6i.xlarge",
+        "m6i.2xlarge",
+        "m6i.4xlarge",
+        "m6i.8xlarge",
+        "m6i.12xlarge",
+        "m6i.16xlarge",
+        "m7a.medium",
+        "m7a.large",
+        "m7a.xlarge",
+        "m7a.2xlarge",
+        "m7a.4xlarge",
+        "m7a.8xlarge",
+        "m7a.12xlarge",
+        "m7a.16xlarge",
+        "m7gd.medium",
+        "m7gd.large",
+        "m7gd.xlarge",
+        "m7gd.2xlarge",
+        "m7gd.4xlarge",
+        "m7gd.8xlarge",
+        "m7gd.12xlarge",
+        "m7gd.16xlarge",
+        "m7i.large",
+        "m7i.xlarge",
+        "m7i.2xlarge",
+        "m7i.4xlarge",
+        "m7i.8xlarge",
+        "m7i.12xlarge",
+        "m7i.16xlarge",
+        "r6gd.medium",
+        "r6gd.large",
+        "r6gd.xlarge",
+        "r6gd.2xlarge",
+        "r6gd.4xlarge",
+        "r6gd.8xlarge",
+        "r6gd.12xlarge",
+        "r6gd.16xlarge",
+        "r7a.medium",
+        "r7a.large",
+        "r7a.xlarge",
+        "r7a.2xlarge",
+        "r7a.4xlarge",
+        "r7a.8xlarge",
+        "r7a.12xlarge",
+        "r7a.16xlarge",
+        "r7gd.medium",
+        "r7gd.large",
+        "r7gd.xlarge",
+        "r7gd.2xlarge",
+        "r7gd.4xlarge",
+        "r7gd.8xlarge",
+        "r7gd.12xlarge",
+        "r7gd.16xlarge",
+        "r7i.large",
+        "r7i.xlarge",
+        "r7i.2xlarge",
+        "r7i.4xlarge",
+        "r7i.8xlarge",
+        "r7i.12xlarge",
+        "r7i.16xlarge",
+        "r7i.24xlarge",
+        "r7i.48xlarge",
+        "c5ad.large",
+        "c5ad.xlarge",
+        "c5ad.2xlarge",
+        "c5ad.4xlarge",
+        "c5ad.8xlarge",
+        "c5ad.12xlarge",
+        "c5ad.16xlarge",
+        "c5ad.24xlarge",
+        "c5n.large",
+        "c5n.xlarge",
+        "c5n.2xlarge",
+        "c5n.4xlarge",
+        "c5n.9xlarge",
+        "c5n.18xlarge",
+        "r5ad.large",
+        "r5ad.xlarge",
+        "r5ad.2xlarge",
+        "r5ad.4xlarge",
+        "r5ad.8xlarge",
+        "r5ad.12xlarge",
+        "r5ad.16xlarge",
+        "r5ad.24xlarge",
+        "c6id.large",
+        "c6id.xlarge",
+        "c6id.2xlarge",
+        "c6id.4xlarge",
+        "c6id.8xlarge",
+        "c6id.12xlarge",
+        "c6id.16xlarge",
+        "c6id.24xlarge",
+        "c6id.32xlarge",
+        "c8g.medium",
+        "c8g.large",
+        "c8g.xlarge",
+        "c8g.2xlarge",
+        "c8g.4xlarge",
+        "c8g.8xlarge",
+        "c8g.12xlarge",
+        "c8g.16xlarge",
+        "c8g.24xlarge",
+        "c8g.48xlarge",
+        "m5ad.large",
+        "m5ad.xlarge",
+        "m5ad.2xlarge",
+        "m5ad.4xlarge",
+        "m5ad.8xlarge",
+        "m5ad.12xlarge",
+        "m5ad.16xlarge",
+        "m5ad.24xlarge",
+        "m5d.large",
+        "m5d.xlarge",
+        "m5d.2xlarge",
+        "m5d.4xlarge",
+        "m5d.8xlarge",
+        "m5d.12xlarge",
+        "m5d.16xlarge",
+        "m5d.24xlarge",
+        "m5dn.large",
+        "m5dn.xlarge",
+        "m5dn.2xlarge",
+        "m5dn.4xlarge",
+        "m5dn.8xlarge",
+        "m5dn.12xlarge",
+        "m5dn.16xlarge",
+        "m5dn.24xlarge",
+        "m5n.large",
+        "m5n.xlarge",
+        "m5n.2xlarge",
+        "m5n.4xlarge",
+        "m5n.8xlarge",
+        "m5n.12xlarge",
+        "m5n.16xlarge",
+        "m5n.24xlarge",
+        "m6id.large",
+        "m6id.xlarge",
+        "m6id.2xlarge",
+        "m6id.4xlarge",
+        "m6id.8xlarge",
+        "m6id.12xlarge",
+        "m6id.16xlarge",
+        "m6id.24xlarge",
+        "m6id.32xlarge",
+        "m6idn.large",
+        "m6idn.xlarge",
+        "m6idn.2xlarge",
+        "m6idn.4xlarge",
+        "m6idn.8xlarge",
+        "m6idn.12xlarge",
+        "m6idn.16xlarge",
+        "m6idn.24xlarge",
+        "m6idn.32xlarge",
+        "m6in.large",
+        "m6in.xlarge",
+        "m6in.2xlarge",
+        "m6in.4xlarge",
+        "m6in.8xlarge",
+        "m6in.12xlarge",
+        "m6in.16xlarge",
+        "m6in.24xlarge",
+        "m6in.32xlarge",
+        "m8g.medium",
+        "m8g.large",
+        "m8g.xlarge",
+        "m8g.2xlarge",
+        "m8g.4xlarge",
+        "m8g.8xlarge",
+        "m8g.12xlarge",
+        "m8g.16xlarge",
+        "m8g.24xlarge",
+        "m8g.48xlarge",
+        "r5dn.large",
+        "r5dn.xlarge",
+        "r5dn.2xlarge",
+        "r5dn.4xlarge",
+        "r5dn.8xlarge",
+        "r5dn.12xlarge",
+        "r5dn.16xlarge",
+        "r5dn.24xlarge",
+        "r5n.large",
+        "r5n.xlarge",
+        "r5n.2xlarge",
+        "r5n.4xlarge",
+        "r5n.8xlarge",
+        "r5n.12xlarge",
+        "r5n.16xlarge",
+        "r5n.24xlarge",
+        "r6a.large",
+        "r6a.xlarge",
+        "r6a.2xlarge",
+        "r6a.4xlarge",
+        "r6a.8xlarge",
+        "r6a.12xlarge",
+        "r6a.16xlarge",
+        "r6a.24xlarge",
+        "r6a.32xlarge",
+        "r6a.48xlarge",
+        "r6id.large",
+        "r6id.xlarge",
+        "r6id.2xlarge",
+        "r6id.4xlarge",
+        "r6id.8xlarge",
+        "r6id.12xlarge",
+        "r6id.16xlarge",
+        "r6id.24xlarge",
+        "r6id.32xlarge",
+        "r6idn.large",
+        "r6idn.xlarge",
+        "r6idn.2xlarge",
+        "r6idn.4xlarge",
+        "r6idn.8xlarge",
+        "r6idn.12xlarge",
+        "r6idn.16xlarge",
+        "r6idn.24xlarge",
+        "r6idn.32xlarge",
+        "r6in.large",
+        "r6in.xlarge",
+        "r6in.2xlarge",
+        "r6in.4xlarge",
+        "r6in.8xlarge",
+        "r6in.12xlarge",
+        "r6in.16xlarge",
+        "r6in.24xlarge",
+        "r6in.32xlarge",
+        "r8g.medium",
+        "r8g.large",
+        "r8g.xlarge",
+        "r8g.2xlarge",
+        "r8g.4xlarge",
+        "r8g.8xlarge",
+        "r8g.12xlarge",
+        "r8g.16xlarge",
+        "r8g.24xlarge",
+        "r8g.48xlarge",
+        "m4.16xlarge",
+        "c6a.32xlarge",
+        "c6a.48xlarge",
+        "c6i.32xlarge",
+        "r6i.24xlarge",
+        "r6i.32xlarge",
+        "c6in.24xlarge",
+        "c6in.32xlarge",
+        "c7a.24xlarge",
+        "c7a.32xlarge",
+        "c7a.48xlarge",
+        "c7i.24xlarge",
+        "c7i.48xlarge",
+        "m6a.24xlarge",
+        "m6a.32xlarge",
+        "m6a.48xlarge",
+        "m6i.24xlarge",
+        "m6i.32xlarge",
+        "m7a.24xlarge",
+        "m7a.32xlarge",
+        "m7a.48xlarge",
+        "m7i.24xlarge",
+        "m7i.48xlarge",
+        "r7a.24xlarge",
+        "r7a.32xlarge",
+        "r7a.48xlarge"
       ]
     },
     "Event":{
@@ -5317,7 +5636,7 @@
         },
         "EventCode":{
           "shape":"EventCode",
-          "documentation":"<p>The type of event being logged. </p> <p> <b>Fleet state transition events:</b> </p> <ul> <li> <p>FLEET_CREATED -- A fleet resource was successfully created with a status of <code>NEW</code>. Event messaging includes the fleet ID.</p> </li> <li> <p>FLEET_STATE_DOWNLOADING -- Fleet status changed from <code>NEW</code> to <code>DOWNLOADING</code>. Amazon GameLift is downloading the compressed build and running install scripts.</p> </li> <li> <p>FLEET_STATE_VALIDATING -- Fleet status changed from <code>DOWNLOADING</code> to <code>VALIDATING</code>. Amazon GameLift has successfully installed build and is now validating the build files.</p> </li> <li> <p>FLEET_STATE_BUILDING -- Fleet status changed from <code>VALIDATING</code> to <code>BUILDING</code>. Amazon GameLift has successfully verified the build files and is now launching a fleet instance.</p> </li> <li> <p>FLEET_STATE_ACTIVATING -- Fleet status changed from <code>BUILDING</code> to <code>ACTIVATING</code>. Amazon GameLift is launching a game server process on the fleet instance and is testing its connectivity with the Amazon GameLift service.</p> </li> <li> <p>FLEET_STATE_ACTIVE -- The fleet's status changed from <code>ACTIVATING</code> to <code>ACTIVE</code>. The fleet is now ready to host game sessions.</p> </li> <li> <p>FLEET_STATE_ERROR -- The Fleet's status changed to <code>ERROR</code>. Describe the fleet event message for more details.</p> </li> </ul> <p> <b>Fleet creation events (ordered by fleet creation activity):</b> </p> <ul> <li> <p>FLEET_BINARY_DOWNLOAD_FAILED -- The build failed to download to the fleet instance.</p> </li> <li> <p>FLEET_CREATION_EXTRACTING_BUILD -- The game server build was successfully downloaded to an instance, and Amazon GameLiftis now extracting the build files from the uploaded build. Failure at this stage prevents a fleet from moving to ACTIVE status. Logs for this stage display a list of the files that are extracted and saved on the instance. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_CREATION_RUNNING_INSTALLER -- The game server build files were successfully extracted, and Amazon GameLift is now running the build's install script (if one is included). Failure in this stage prevents a fleet from moving to ACTIVE status. Logs for this stage list the installation steps and whether or not the install completed successfully. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_CREATION_COMPLETED_INSTALLER -- The game server build files were successfully installed and validation of the installation will begin soon.</p> </li> <li> <p>FLEET_CREATION_FAILED_INSTALLER -- The installed failed while attempting to install the build files. This event indicates that the failure occurred before Amazon GameLift could start validation. </p> </li> <li> <p>FLEET_CREATION_VALIDATING_RUNTIME_CONFIG -- The build process was successful, and the GameLift is now verifying that the game server launch paths, which are specified in the fleet's runtime configuration, exist. If any listed launch path exists, Amazon GameLift tries to launch a game server process and waits for the process to report ready. Failures in this stage prevent a fleet from moving to <code>ACTIVE</code> status. Logs for this stage list the launch paths in the runtime configuration and indicate whether each is found. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUND -- Validation of the runtime configuration failed because the executable specified in a launch path does not exist on the instance.</p> </li> <li> <p>FLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE -- Validation of the runtime configuration failed because the executable specified in a launch path failed to run on the fleet instance.</p> </li> <li> <p>FLEET_VALIDATION_TIMED_OUT -- Validation of the fleet at the end of creation timed out. Try fleet creation again.</p> </li> <li> <p>FLEET_ACTIVATION_FAILED -- The fleet failed to successfully complete one of the steps in the fleet activation process. This event code indicates that the game build was successfully downloaded to a fleet instance, built, and validated, but was not able to start a server process. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html#fleets-creating-debug-creation\">Debug Fleet Creation Issues</a>.</p> </li> <li> <p>FLEET_ACTIVATION_FAILED_NO_INSTANCES -- Fleet creation was not able to obtain any instances based on the input fleet attributes. Try again at a different time or choose a different combination of fleet attributes such as fleet type, instance type, etc.</p> </li> <li> <p>FLEET_INITIALIZATION_FAILED -- A generic exception occurred during fleet creation. Describe the fleet event message for more details.</p> </li> </ul> <p> <b>VPC peering events:</b> </p> <ul> <li> <p>FLEET_VPC_PEERING_SUCCEEDED -- A VPC peering connection has been established between the VPC for an Amazon GameLift fleet and a VPC in your Amazon Web Services account.</p> </li> <li> <p>FLEET_VPC_PEERING_FAILED -- A requested VPC peering connection has failed. Event details and status information provide additional detail. A common reason for peering failure is that the two VPCs have overlapping CIDR blocks of IPv4 addresses. To resolve this, change the CIDR block for the VPC in your Amazon Web Services account. For more information on VPC peering failures, see <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/invalid-peering-configurations.html\">https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/invalid-peering-configurations.html</a> </p> </li> <li> <p>FLEET_VPC_PEERING_DELETED -- A VPC peering connection has been successfully deleted.</p> </li> </ul> <p> <b>Spot instance events:</b> </p> <ul> <li> <p> INSTANCE_INTERRUPTED -- A spot instance was interrupted by EC2 with a two-minute notification.</p> </li> <li> <p>INSTANCE_RECYCLED -- A spot instance was determined to have a high risk of interruption and is scheduled to be recycled once it has no active game sessions.</p> </li> </ul> <p> <b>Server process events:</b> </p> <ul> <li> <p>SERVER_PROCESS_INVALID_PATH -- The game server executable or script could not be found based on the Fleet runtime configuration. Check that the launch path is correct based on the operating system of the Fleet.</p> </li> <li> <p>SERVER_PROCESS_SDK_INITIALIZATION_TIMEOUT -- The server process did not call <code>InitSDK()</code> within the time expected (5 minutes). Check your game session log to see why <code>InitSDK()</code> was not called in time.</p> </li> <li> <p>SERVER_PROCESS_PROCESS_READY_TIMEOUT -- The server process did not call <code>ProcessReady()</code> within the time expected (5 minutes) after calling <code>InitSDK()</code>. Check your game session log to see why <code>ProcessReady()</code> was not called in time.</p> </li> <li> <p>SERVER_PROCESS_CRASHED -- The server process exited without calling <code>ProcessEnding()</code>. Check your game session log to see why <code>ProcessEnding()</code> was not called.</p> </li> <li> <p>SERVER_PROCESS_TERMINATED_UNHEALTHY -- The server process did not report a valid health check for too long and was therefore terminated by GameLift. Check your game session log to see if the thread became stuck processing a synchronous task for too long.</p> </li> <li> <p>SERVER_PROCESS_FORCE_TERMINATED -- The server process did not exit cleanly within the time expected after <code>OnProcessTerminate()</code> was sent. Check your game session log to see why termination took longer than expected.</p> </li> <li> <p>SERVER_PROCESS_PROCESS_EXIT_TIMEOUT -- The server process did not exit cleanly within the time expected (30 seconds) after calling <code>ProcessEnding()</code>. Check your game session log to see why termination took longer than expected.</p> </li> </ul> <p> <b>Game session events:</b> </p> <ul> <li> <p>GAME_SESSION_ACTIVATION_TIMEOUT -- GameSession failed to activate within the expected time. Check your game session log to see why <code>ActivateGameSession()</code> took longer to complete than expected.</p> </li> </ul> <p> <b>Other fleet events:</b> </p> <ul> <li> <p>FLEET_SCALING_EVENT -- A change was made to the fleet's capacity settings (desired instances, minimum/maximum scaling limits). Event messaging includes the new capacity settings.</p> </li> <li> <p>FLEET_NEW_GAME_SESSION_PROTECTION_POLICY_UPDATED -- A change was made to the fleet's game session protection policy setting. Event messaging includes both the old and new policy setting. </p> </li> <li> <p>FLEET_DELETED -- A request to delete a fleet was initiated.</p> </li> <li> <p> GENERIC_EVENT -- An unspecified event has occurred.</p> </li> </ul>"
+          "documentation":"<p>The type of event being logged. </p> <p> <b>Fleet state transition events:</b> </p> <ul> <li> <p>FLEET_CREATED -- A fleet resource was successfully created with a status of <code>NEW</code>. Event messaging includes the fleet ID.</p> </li> <li> <p>FLEET_STATE_DOWNLOADING -- Fleet status changed from <code>NEW</code> to <code>DOWNLOADING</code>. Amazon GameLift Servers is downloading the compressed build and running install scripts.</p> </li> <li> <p>FLEET_STATE_VALIDATING -- Fleet status changed from <code>DOWNLOADING</code> to <code>VALIDATING</code>. Amazon GameLift Servers has successfully installed build and is now validating the build files.</p> </li> <li> <p>FLEET_STATE_BUILDING -- Fleet status changed from <code>VALIDATING</code> to <code>BUILDING</code>. Amazon GameLift Servers has successfully verified the build files and is now launching a fleet instance.</p> </li> <li> <p>FLEET_STATE_ACTIVATING -- Fleet status changed from <code>BUILDING</code> to <code>ACTIVATING</code>. Amazon GameLift Servers is launching a game server process on the fleet instance and is testing its connectivity with the Amazon GameLift Servers service.</p> </li> <li> <p>FLEET_STATE_ACTIVE -- The fleet's status changed from <code>ACTIVATING</code> to <code>ACTIVE</code>. The fleet is now ready to host game sessions.</p> </li> <li> <p>FLEET_STATE_ERROR -- The Fleet's status changed to <code>ERROR</code>. Describe the fleet event message for more details.</p> </li> </ul> <p> <b>Fleet creation events (ordered by fleet creation activity):</b> </p> <ul> <li> <p>FLEET_BINARY_DOWNLOAD_FAILED -- The build failed to download to the fleet instance.</p> </li> <li> <p>FLEET_CREATION_EXTRACTING_BUILD -- The game server build was successfully downloaded to an instance, and Amazon GameLift Serversis now extracting the build files from the uploaded build. Failure at this stage prevents a fleet from moving to ACTIVE status. Logs for this stage display a list of the files that are extracted and saved on the instance. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_CREATION_RUNNING_INSTALLER -- The game server build files were successfully extracted, and Amazon GameLift Servers is now running the build's install script (if one is included). Failure in this stage prevents a fleet from moving to ACTIVE status. Logs for this stage list the installation steps and whether or not the install completed successfully. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_CREATION_COMPLETED_INSTALLER -- The game server build files were successfully installed and validation of the installation will begin soon.</p> </li> <li> <p>FLEET_CREATION_FAILED_INSTALLER -- The installed failed while attempting to install the build files. This event indicates that the failure occurred before Amazon GameLift Servers could start validation. </p> </li> <li> <p>FLEET_CREATION_VALIDATING_RUNTIME_CONFIG -- The build process was successful, and the GameLift is now verifying that the game server launch paths, which are specified in the fleet's runtime configuration, exist. If any listed launch path exists, Amazon GameLift Servers tries to launch a game server process and waits for the process to report ready. Failures in this stage prevent a fleet from moving to <code>ACTIVE</code> status. Logs for this stage list the launch paths in the runtime configuration and indicate whether each is found. Access the logs by using the URL in <i>PreSignedLogUrl</i>.</p> </li> <li> <p>FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUND -- Validation of the runtime configuration failed because the executable specified in a launch path does not exist on the instance.</p> </li> <li> <p>FLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE -- Validation of the runtime configuration failed because the executable specified in a launch path failed to run on the fleet instance.</p> </li> <li> <p>FLEET_VALIDATION_TIMED_OUT -- Validation of the fleet at the end of creation timed out. Try fleet creation again.</p> </li> <li> <p>FLEET_ACTIVATION_FAILED -- The fleet failed to successfully complete one of the steps in the fleet activation process. This event code indicates that the game build was successfully downloaded to a fleet instance, built, and validated, but was not able to start a server process. For more information, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-creating-debug.html#fleets-creating-debug-creation\">Debug Fleet Creation Issues</a>.</p> </li> <li> <p>FLEET_ACTIVATION_FAILED_NO_INSTANCES -- Fleet creation was not able to obtain any instances based on the input fleet attributes. Try again at a different time or choose a different combination of fleet attributes such as fleet type, instance type, etc.</p> </li> <li> <p>FLEET_INITIALIZATION_FAILED -- A generic exception occurred during fleet creation. Describe the fleet event message for more details.</p> </li> </ul> <p> <b>VPC peering events:</b> </p> <ul> <li> <p>FLEET_VPC_PEERING_SUCCEEDED -- A VPC peering connection has been established between the VPC for an Amazon GameLift Servers fleet and a VPC in your Amazon Web Services account.</p> </li> <li> <p>FLEET_VPC_PEERING_FAILED -- A requested VPC peering connection has failed. Event details and status information provide additional detail. A common reason for peering failure is that the two VPCs have overlapping CIDR blocks of IPv4 addresses. To resolve this, change the CIDR block for the VPC in your Amazon Web Services account. For more information on VPC peering failures, see <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/invalid-peering-configurations.html\">https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/invalid-peering-configurations.html</a> </p> </li> <li> <p>FLEET_VPC_PEERING_DELETED -- A VPC peering connection has been successfully deleted.</p> </li> </ul> <p> <b>Spot instance events:</b> </p> <ul> <li> <p> INSTANCE_INTERRUPTED -- A spot instance was interrupted by EC2 with a two-minute notification.</p> </li> <li> <p>INSTANCE_RECYCLED -- A spot instance was determined to have a high risk of interruption and is scheduled to be recycled once it has no active game sessions.</p> </li> </ul> <p> <b>Server process events:</b> </p> <ul> <li> <p>SERVER_PROCESS_INVALID_PATH -- The game server executable or script could not be found based on the Fleet runtime configuration. Check that the launch path is correct based on the operating system of the Fleet.</p> </li> <li> <p>SERVER_PROCESS_SDK_INITIALIZATION_TIMEOUT -- The server process did not call <code>InitSDK()</code> within the time expected (5 minutes). Check your game session log to see why <code>InitSDK()</code> was not called in time. This event is not emitted for managed container fleets and Anywhere fleets unless they're deployed with the Amazon GameLift Servers Agent.</p> </li> <li> <p>SERVER_PROCESS_PROCESS_READY_TIMEOUT -- The server process did not call <code>ProcessReady()</code> within the time expected (5 minutes) after calling <code>InitSDK()</code>. Check your game session log to see why <code>ProcessReady()</code> was not called in time.</p> </li> <li> <p>SERVER_PROCESS_CRASHED -- The server process exited without calling <code>ProcessEnding()</code>. Check your game session log to see why <code>ProcessEnding()</code> was not called.</p> </li> <li> <p>SERVER_PROCESS_TERMINATED_UNHEALTHY -- The server process did not report a valid health check for too long and was therefore terminated by GameLift. Check your game session log to see if the thread became stuck processing a synchronous task for too long.</p> </li> <li> <p>SERVER_PROCESS_FORCE_TERMINATED -- The server process did not exit cleanly within the time expected after <code>OnProcessTerminate()</code> was sent. Check your game session log to see why termination took longer than expected.</p> </li> <li> <p>SERVER_PROCESS_PROCESS_EXIT_TIMEOUT -- The server process did not exit cleanly within the time expected (30 seconds) after calling <code>ProcessEnding()</code>. Check your game session log to see why termination took longer than expected.</p> </li> </ul> <p> <b>Game session events:</b> </p> <ul> <li> <p>GAME_SESSION_ACTIVATION_TIMEOUT -- GameSession failed to activate within the expected time. Check your game session log to see why <code>ActivateGameSession()</code> took longer to complete than expected.</p> </li> </ul> <p> <b>Other fleet events:</b> </p> <ul> <li> <p>FLEET_SCALING_EVENT -- A change was made to the fleet's capacity settings (desired instances, minimum/maximum scaling limits). Event messaging includes the new capacity settings.</p> </li> <li> <p>FLEET_NEW_GAME_SESSION_PROTECTION_POLICY_UPDATED -- A change was made to the fleet's game session protection policy setting. Event messaging includes both the old and new policy setting. </p> </li> <li> <p>FLEET_DELETED -- A request to delete a fleet was initiated.</p> </li> <li> <p> GENERIC_EVENT -- An unspecified event has occurred.</p> </li> </ul>"
         },
         "Message":{
           "shape":"NonEmptyString",
@@ -5329,14 +5648,14 @@
         },
         "PreSignedLogUrl":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>Location of stored logs with additional detail that is related to the event. This is useful for debugging issues. The URL is valid for 15 minutes. You can also access fleet creation logs through the Amazon GameLift console.</p>"
+          "documentation":"<p>Location of stored logs with additional detail that is related to the event. This is useful for debugging issues. The URL is valid for 15 minutes. You can also access fleet creation logs through the Amazon GameLift Servers console.</p>"
         },
         "Count":{
           "shape":"EventCount",
           "documentation":"<p>The number of times that this event occurred.</p>"
         }
       },
-      "documentation":"<p>Log entry describing an event that involves Amazon GameLift resources (such as a fleet). In addition to tracking activity, event codes and messages can provide additional information for troubleshooting and debugging problems.</p>"
+      "documentation":"<p>Log entry describing an event that involves Amazon GameLift Servers resources (such as a fleet). In addition to tracking activity, event codes and messages can provide additional information for troubleshooting and debugging problems.</p>"
     },
     "EventCode":{
       "type":"string",
@@ -5454,7 +5773,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift fleet ARN, the resource ID matches the <code>FleetId</code> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. In a GameLift fleet ARN, the resource ID matches the <code>FleetId</code> value.</p>"
         },
         "FleetType":{
           "shape":"FleetType",
@@ -5482,7 +5801,7 @@
         },
         "Status":{
           "shape":"FleetStatus",
-          "documentation":"<p>Current status of the fleet. Possible fleet statuses include the following:</p> <ul> <li> <p>NEW -- A new fleet resource has been defined and Amazon GameLift has started creating the fleet. Desired instances is set to 1. </p> </li> <li> <p>DOWNLOADING/VALIDATING/BUILDING -- Amazon GameLift is download the game server build, running install scripts, and then validating the build files. When complete, Amazon GameLift launches a fleet instance. </p> </li> <li> <p>ACTIVATING -- Amazon GameLift is launching a game server process and testing its connectivity with the Amazon GameLift service.</p> </li> <li> <p>ACTIVE -- The fleet is now ready to host game sessions.</p> </li> <li> <p>ERROR -- An error occurred when downloading, validating, building, or activating the fleet.</p> </li> <li> <p>DELETING -- Hosts are responding to a delete fleet request.</p> </li> <li> <p>TERMINATED -- The fleet no longer exists.</p> </li> </ul>"
+          "documentation":"<p>Current status of the fleet. Possible fleet statuses include the following:</p> <ul> <li> <p>NEW -- A new fleet resource has been defined and Amazon GameLift Servers has started creating the fleet. Desired instances is set to 1. </p> </li> <li> <p>DOWNLOADING/VALIDATING/BUILDING -- Amazon GameLift Servers is download the game server build, running install scripts, and then validating the build files. When complete, Amazon GameLift Servers launches a fleet instance. </p> </li> <li> <p>ACTIVATING -- Amazon GameLift Servers is launching a game server process and testing its connectivity with the Amazon GameLift Servers service.</p> </li> <li> <p>ACTIVE -- The fleet is now ready to host game sessions.</p> </li> <li> <p>ERROR -- An error occurred when downloading, validating, building, or activating the fleet.</p> </li> <li> <p>DELETING -- Hosts are responding to a delete fleet request.</p> </li> <li> <p>TERMINATED -- The fleet no longer exists.</p> </li> </ul>"
         },
         "BuildId":{
           "shape":"BuildId",
@@ -5490,7 +5809,7 @@
         },
         "BuildArn":{
           "shape":"BuildArn",
-          "documentation":"<p> The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) associated with the Amazon GameLift build resource that is deployed on instances in this fleet. In a GameLift build ARN, the resource ID matches the <code>BuildId</code> value. This attribute is used with fleets where <code>ComputeType</code> is \"EC2\".</p>"
+          "documentation":"<p> The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) associated with the Amazon GameLift Servers build resource that is deployed on instances in this fleet. In a GameLift build ARN, the resource ID matches the <code>BuildId</code> value. This attribute is used with fleets where <code>ComputeType</code> is \"EC2\".</p>"
         },
         "ScriptId":{
           "shape":"ScriptId",
@@ -5510,7 +5829,7 @@
         },
         "LogPaths":{
           "shape":"StringList",
-          "documentation":"<p> <b>This parameter is no longer used.</b> Game session log paths are now defined using the Amazon GameLift server API <code>ProcessReady()</code> <code>logParameters</code>. See more information in the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api-ref.html#gamelift-sdk-server-api-ref-dataypes-process\">Server API Reference</a>. </p>"
+          "documentation":"<p> <b>This parameter is no longer used.</b> Game session log paths are now defined using the Amazon GameLift Servers server API <code>ProcessReady()</code> <code>logParameters</code>. See more information in the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api-ref.html#gamelift-sdk-server-api-ref-dataypes-process\">Server API Reference</a>. </p>"
         },
         "NewGameSessionProtectionPolicy":{
           "shape":"ProtectionPolicy",
@@ -5518,7 +5837,7 @@
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>The operating system of the fleet's computing resources. A fleet's operating system is determined by the OS of the build or script that is deployed on this fleet. This attribute is used with fleets where <code>ComputeType</code> is <code>EC2</code>.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x., first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The operating system of the fleet's computing resources. A fleet's operating system is determined by the OS of the build or script that is deployed on this fleet. This attribute is used with fleets where <code>ComputeType</code> is <code>EC2</code>.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "ResourceCreationLimitPolicy":{"shape":"ResourceCreationLimitPolicy"},
         "MetricGroups":{
@@ -5539,7 +5858,7 @@
         },
         "ComputeType":{
           "shape":"ComputeType",
-          "documentation":"<p>The type of compute resource used to host your game servers. You can use your own compute resources with Amazon GameLift Anywhere or use Amazon EC2 instances with managed Amazon GameLift.</p>"
+          "documentation":"<p>The type of compute resource used to host your game servers. You can use your own compute resources with Amazon GameLift Servers Anywhere or use Amazon EC2 instances with managed Amazon GameLift Servers.</p>"
         },
         "AnywhereConfiguration":{
           "shape":"AnywhereConfiguration",
@@ -5550,7 +5869,7 @@
           "documentation":"<p>Indicates that fleet instances maintain a shared credentials file for the IAM role defined in <code>InstanceRoleArn</code>. Shared credentials allow applications that are deployed with the game server executable to communicate with other Amazon Web Services resources. This property is used only when the game server is integrated with the server SDK version 5.x. For more information about using shared credentials, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-resources.html\"> Communicate with other Amazon Web Services resources from your fleets</a>. This attribute is used with fleets where <code>ComputeType</code> is <code>EC2</code>.</p>"
         }
       },
-      "documentation":"<p>Describes an Amazon GameLift fleet of game hosting resources. Attributes differ based on the fleet's compute type, as follows:</p> <ul> <li> <p>EC2 fleet attributes identify a <code>Build</code> resource (for fleets with customer game server builds) or a <code>Script</code> resource (for Realtime Servers fleets).</p> </li> <li> <p>Amazon GameLift Anywhere fleets have an abbreviated set of attributes, because most fleet configurations are set directly on the fleet's computes. Attributes include fleet identifiers and descriptive properties, creation/termination time, and fleet status.</p> </li> </ul> <p> <b>Returned by:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetAttributes\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetAttributes</a> </p>"
+      "documentation":"<p>Describes an Amazon GameLift Servers fleet of game hosting resources. Attributes differ based on the fleet's compute type, as follows:</p> <ul> <li> <p>EC2 fleet attributes identify a <code>Build</code> resource (for fleets with customer game server builds) or a <code>Script</code> resource (for Amazon GameLift Servers Realtime fleets).</p> </li> <li> <p>Amazon GameLift Servers Anywhere fleets have an abbreviated set of attributes, because most fleet configurations are set directly on the fleet's computes. Attributes include fleet identifiers and descriptive properties, creation/termination time, and fleet status.</p> </li> </ul> <p> <b>Returned by:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetAttributes\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeFleetAttributes</a> </p>"
     },
     "FleetAttributesList":{
       "type":"list",
@@ -5571,7 +5890,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "InstanceType":{
           "shape":"EC2InstanceType",
@@ -5621,7 +5940,7 @@
         },
         "RollbackGameServerBinaryArn":{
           "shape":"FleetBinaryArn",
-          "documentation":"<p>The unique identifier for the version of the game server container group definition to roll back to if deployment fails. Amazon GameLift sets this property to the container group definition version that the fleet used when it was last active.</p>"
+          "documentation":"<p>The unique identifier for the version of the game server container group definition to roll back to if deployment fails. Amazon GameLift Servers sets this property to the container group definition version that the fleet used when it was last active.</p>"
         },
         "PerInstanceBinaryArn":{
           "shape":"FleetBinaryArn",
@@ -5629,7 +5948,7 @@
         },
         "RollbackPerInstanceBinaryArn":{
           "shape":"FleetBinaryArn",
-          "documentation":"<p>The unique identifier for the version of the per-instance container group definition to roll back to if deployment fails. Amazon GameLift sets this property to the container group definition version that the fleet used when it was last active.</p>"
+          "documentation":"<p>The unique identifier for the version of the per-instance container group definition to roll back to if deployment fails. Amazon GameLift Servers sets this property to the container group definition version that the fleet used when it was last active.</p>"
         },
         "DeploymentStatus":{
           "shape":"DeploymentStatus",
@@ -5703,7 +6022,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "ActiveServerProcessCount":{
           "shape":"WholeNumber",
@@ -5830,7 +6149,7 @@
           "documentation":"<p>Timestamp that indicates the last time the game server was updated with health status. The format is a number expressed in Unix time as milliseconds (for example <code>\"1469498468.057\"</code>). After game server registration, this property is only changed when a game server update specifies a health check value.</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>Properties describing a game server that is running on an instance in a game server group. </p> <p>A game server is created by a successful call to <code>RegisterGameServer</code> and deleted by calling <code>DeregisterGameServer</code>. A game server is claimed to host a game session by calling <code>ClaimGameServer</code>. </p>"
+      "documentation":"<p>Properties describing a game server that is running on an instance in a game server group. </p> <p>A game server is created by a successful call to <code>RegisterGameServer</code> and deleted by calling <code>DeregisterGameServer</code>. A game server is claimed to host a game session by calling <code>ClaimGameServer</code>. </p>"
     },
     "GameServerClaimStatus":{
       "type":"string",
@@ -5863,11 +6182,11 @@
         },
         "ImageUri":{
           "shape":"ImageUriString",
-          "documentation":"<p>The URI to the image that Amazon GameLift uses when deploying this container to a container fleet. For a more specific identifier, see <code>ResolvedImageDigest</code>. </p>"
+          "documentation":"<p>The URI to the image that Amazon GameLift Servers uses when deploying this container to a container fleet. For a more specific identifier, see <code>ResolvedImageDigest</code>. </p>"
         },
         "PortConfiguration":{
           "shape":"ContainerPortConfiguration",
-          "documentation":"<p>The set of ports that are available to bind to processes in the container. For example, a game server process requires a container port to allow game clients to connect to it. Container ports aren't directly accessed by inbound traffic. Amazon GameLift maps these container ports to externally accessible connection ports, which are assigned as needed from the container fleet's <code>ConnectionPortRange</code>. </p>"
+          "documentation":"<p>The set of ports that are available to bind to processes in the container. For example, a game server process requires a container port to allow game clients to connect to it. Container ports aren't directly accessed by inbound traffic. Amazon GameLift Servers maps these container ports to externally accessible connection ports, which are assigned as needed from the container fleet's <code>ConnectionPortRange</code>. </p>"
         },
         "ResolvedImageDigest":{
           "shape":"Sha256",
@@ -5875,7 +6194,7 @@
         },
         "ServerSdkVersion":{
           "shape":"ServerSdkVersion",
-          "documentation":"<p>The Amazon GameLift server SDK version that the game server is integrated with. Only game servers using 5.2.0 or higher are compatible with container fleets.</p>"
+          "documentation":"<p>The Amazon GameLift Servers server SDK version that the game server is integrated with. Only game servers using 5.2.0 or higher are compatible with container fleets.</p>"
         }
       },
       "documentation":"<p>Describes the game server container in an existing game server container group. A game server container identifies a container image with your game server build. A game server container is automatically considered essential; if an essential container fails, the entire container group restarts.</p> <p>You can update a container definition and deploy the updates to an existing fleet. When creating or updating a game server container group definition, use the property <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinitionInput\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinitionInput</a>. </p> <p> <b>Part of:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ContainerGroupDefinition.html\">ContainerGroupDefinition</a> </p> <p> <b>Returned by:</b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeContainerGroupDefinition.html\">DescribeContainerGroupDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListContainerGroupDefinitions.html\">ListContainerGroupDefinitions</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerGroupDefinition.html\">UpdateContainerGroupDefinition</a> </p>"
@@ -5907,15 +6226,15 @@
         },
         "ImageUri":{
           "shape":"ImageUriString",
-          "documentation":"<p>The location of the container image to deploy to a container fleet. Provide an image in an Amazon Elastic Container Registry public or private repository. The repository must be in the same Amazon Web Services account and Amazon Web Services Region where you're creating the container group definition. For limits on image size, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\">Amazon GameLift endpoints and quotas</a>. You can use any of the following image URI formats: </p> <ul> <li> <p>Image ID only: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]</code> </p> </li> <li> <p>Image ID and digest: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]@[digest]</code> </p> </li> <li> <p>Image ID and tag: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]:[tag]</code> </p> </li> </ul>"
+          "documentation":"<p>The location of the container image to deploy to a container fleet. Provide an image in an Amazon Elastic Container Registry public or private repository. The repository must be in the same Amazon Web Services account and Amazon Web Services Region where you're creating the container group definition. For limits on image size, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\">Amazon GameLift Servers endpoints and quotas</a>. You can use any of the following image URI formats: </p> <ul> <li> <p>Image ID only: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]</code> </p> </li> <li> <p>Image ID and digest: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]@[digest]</code> </p> </li> <li> <p>Image ID and tag: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]:[tag]</code> </p> </li> </ul>"
         },
         "PortConfiguration":{
           "shape":"ContainerPortConfiguration",
-          "documentation":"<p>A set of ports that Amazon GameLift can assign to processes in the container. Processes, must be assigned a container port to accept inbound traffic connections. For example, a game server process requires a container port to allow game clients to connect to it. Container ports aren't directly accessed by inbound traffic. Instead, Amazon GameLift maps container ports to externally accessible connection ports (see the container fleet property <code>ConnectionPortRange</code>). </p>"
+          "documentation":"<p>A set of ports that Amazon GameLift Servers can assign to processes in a container. The container port configuration must have enough ports for each container process that accepts inbound traffic connections. For example, a game server process requires a container port to allow game clients to connect to it. A container port configuration can have can have one or more container port ranges. Each range specifies starting and ending values as well as the supported network protocol.</p> <p>Container ports aren't directly accessed by inbound traffic. Amazon GameLift Servers maps each container port to an externally accessible connection port (see the container fleet property <code>ConnectionPortRange</code>). </p>"
         },
         "ServerSdkVersion":{
           "shape":"ServerSdkVersion",
-          "documentation":"<p>The Amazon GameLift server SDK version that the game server is integrated with. Only game servers using 5.2.0 or higher are compatible with container fleets.</p>"
+          "documentation":"<p>The Amazon GameLift Servers server SDK version that the game server is integrated with. Only game servers using 5.2.0 or higher are compatible with container fleets.</p>"
         }
       },
       "documentation":"<p>Describes the configuration for a container that runs your game server executable. This definition includes container configuration, resources, and start instructions. Use this data type when creating or updating a game server container group definition. For properties of a deployed container, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerContainerDefinition.html\">GameServerContainerDefinition</a>. A game server container is automatically considered essential; if an essential container fails, the entire container group restarts.</p> <p> <b>Use with: </b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateContainerGroupDefinition.html\">CreateContainerGroupDefinition</a>, <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateContainerGroupDefinition.html\">UpdateContainerGroupDefinition</a> </p>"
@@ -5966,15 +6285,15 @@
         },
         "RoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift to access your Amazon EC2 Auto Scaling groups.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift Servers to access your Amazon EC2 Auto Scaling groups.</p>"
         },
         "InstanceDefinitions":{
           "shape":"InstanceDefinitions",
-          "documentation":"<p>The set of Amazon EC2 instance types that Amazon GameLift FleetIQ can use when balancing and automatically scaling instances in the corresponding Auto Scaling group. </p>"
+          "documentation":"<p>The set of Amazon EC2 instance types that Amazon GameLift Servers FleetIQ can use when balancing and automatically scaling instances in the corresponding Auto Scaling group. </p>"
         },
         "BalancingStrategy":{
           "shape":"BalancingStrategy",
-          "documentation":"<p>Indicates how Amazon GameLift FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
+          "documentation":"<p>Indicates how Amazon GameLift Servers FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
         },
         "GameServerProtectionPolicy":{
           "shape":"GameServerProtectionPolicy",
@@ -5986,7 +6305,7 @@
         },
         "Status":{
           "shape":"GameServerGroupStatus",
-          "documentation":"<p>The current status of the game server group. Possible statuses include:</p> <ul> <li> <p> <code>NEW</code> - Amazon GameLift FleetIQ has validated the <code>CreateGameServerGroup()</code> request. </p> </li> <li> <p> <code>ACTIVATING</code> - Amazon GameLift FleetIQ is setting up a game server group, which includes creating an Auto Scaling group in your Amazon Web Services account. </p> </li> <li> <p> <code>ACTIVE</code> - The game server group has been successfully created. </p> </li> <li> <p> <code>DELETE_SCHEDULED</code> - A request to delete the game server group has been received. </p> </li> <li> <p> <code>DELETING</code> - Amazon GameLift FleetIQ has received a valid <code>DeleteGameServerGroup()</code> request and is processing it. Amazon GameLift FleetIQ must first complete and release hosts before it deletes the Auto Scaling group and the game server group. </p> </li> <li> <p> <code>DELETED</code> - The game server group has been successfully deleted. </p> </li> <li> <p> <code>ERROR</code> - The asynchronous processes of activating or deleting a game server group has failed, resulting in an error state.</p> </li> </ul>"
+          "documentation":"<p>The current status of the game server group. Possible statuses include:</p> <ul> <li> <p> <code>NEW</code> - Amazon GameLift Servers FleetIQ has validated the <code>CreateGameServerGroup()</code> request. </p> </li> <li> <p> <code>ACTIVATING</code> - Amazon GameLift Servers FleetIQ is setting up a game server group, which includes creating an Auto Scaling group in your Amazon Web Services account. </p> </li> <li> <p> <code>ACTIVE</code> - The game server group has been successfully created. </p> </li> <li> <p> <code>DELETE_SCHEDULED</code> - A request to delete the game server group has been received. </p> </li> <li> <p> <code>DELETING</code> - Amazon GameLift Servers FleetIQ has received a valid <code>DeleteGameServerGroup()</code> request and is processing it. Amazon GameLift Servers FleetIQ must first complete and release hosts before it deletes the Auto Scaling group and the game server group. </p> </li> <li> <p> <code>DELETED</code> - The game server group has been successfully deleted. </p> </li> <li> <p> <code>ERROR</code> - The asynchronous processes of activating or deleting a game server group has failed, resulting in an error state.</p> </li> </ul>"
         },
         "StatusReason":{
           "shape":"NonZeroAndMaxString",
@@ -6005,7 +6324,7 @@
           "documentation":"<p>A timestamp that indicates when this game server group was last updated.</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>Properties that describe a game server group resource. A game server group manages certain properties related to a corresponding Amazon EC2 Auto Scaling group. </p> <p>A game server group is created by a successful call to <code>CreateGameServerGroup</code> and deleted by calling <code>DeleteGameServerGroup</code>. Game server group activity can be temporarily suspended and resumed by calling <code>SuspendGameServerGroup</code> and <code>ResumeGameServerGroup</code>, respectively. </p>"
+      "documentation":"<p>Properties that describe a game server group resource. A game server group manages certain properties related to a corresponding Amazon EC2 Auto Scaling group. </p> <p>A game server group is created by a successful call to <code>CreateGameServerGroup</code> and deleted by calling <code>DeleteGameServerGroup</code>. Game server group activity can be temporarily suspended and resumed by calling <code>SuspendGameServerGroup</code> and <code>ResumeGameServerGroup</code>, respectively. </p>"
     },
     "GameServerGroupAction":{
       "type":"string",
@@ -6029,14 +6348,14 @@
       "members":{
         "EstimatedInstanceWarmup":{
           "shape":"PositiveInteger",
-          "documentation":"<p>Length of time, in seconds, it takes for a new instance to start new game server processes and register with Amazon GameLift FleetIQ. Specifying a warm-up time can be useful, particularly with game servers that take a long time to start up, because it avoids prematurely starting new instances. </p>"
+          "documentation":"<p>Length of time, in seconds, it takes for a new instance to start new game server processes and register with Amazon GameLift Servers FleetIQ. Specifying a warm-up time can be useful, particularly with game servers that take a long time to start up, because it avoids prematurely starting new instances. </p>"
         },
         "TargetTrackingConfiguration":{
           "shape":"TargetTrackingConfiguration",
-          "documentation":"<p>Settings for a target-based scaling policy applied to Auto Scaling group. These settings are used to create a target-based policy that tracks the Amazon GameLift FleetIQ metric <code>\"PercentUtilizedGameServers\"</code> and specifies a target value for the metric. As player usage changes, the policy triggers to adjust the game server group capacity so that the metric returns to the target value. </p>"
+          "documentation":"<p>Settings for a target-based scaling policy applied to Auto Scaling group. These settings are used to create a target-based policy that tracks the Amazon GameLift Servers FleetIQ metric <code>\"PercentUtilizedGameServers\"</code> and specifies a target value for the metric. As player usage changes, the policy triggers to adjust the game server group capacity so that the metric returns to the target value. </p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>Configuration settings for intelligent automatic scaling that uses target tracking. These settings are used to add an Auto Scaling policy when creating the corresponding Auto Scaling group. After the Auto Scaling group is created, all updates to Auto Scaling policies, including changing this policy and adding or removing other policies, is done directly on the Auto Scaling group. </p>"
+      "documentation":"<p>Configuration settings for intelligent automatic scaling that uses target tracking. These settings are used to add an Auto Scaling policy when creating the corresponding Auto Scaling group. After the Auto Scaling group is created, all updates to Auto Scaling policies, including changing this policy and adding or removing other policies, is done directly on the Auto Scaling group. </p>"
     },
     "GameServerGroupDeleteOption":{
       "type":"string",
@@ -6197,7 +6516,7 @@
           "documentation":"<p>Current status of the game server instance</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p> Additional properties, including status, that describe an EC2 instance in a game server group. Instance configurations are set with game server group properties (see <code>DescribeGameServerGroup</code> and with the EC2 launch template that was used when creating the game server group. </p> <p>Retrieve game server instances for a game server group by calling <code>DescribeGameServerInstances</code>. </p>"
+      "documentation":"<p> Additional properties, including status, that describe an EC2 instance in a game server group. Instance configurations are set with game server group properties (see <code>DescribeGameServerGroup</code> and with the EC2 launch template that was used when creating the game server group. </p> <p>Retrieve game server instances for a game server group by calling <code>DescribeGameServerInstances</code>. </p>"
     },
     "GameServerInstanceId":{
       "type":"string",
@@ -6246,7 +6565,7 @@
       "members":{
         "GameSessionId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the game session. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;region&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>.</p>"
+          "documentation":"<p>A unique identifier for the game session. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;location&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>.</p>"
         },
         "Name":{
           "shape":"NonZeroAndMaxString",
@@ -6290,7 +6609,7 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number.</p>"
         },
         "DnsName":{
           "shape":"DnsName",
@@ -6298,7 +6617,7 @@
         },
         "Port":{
           "shape":"PortNumber",
-          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number.</p>"
         },
         "PlayerSessionCreationPolicy":{
           "shape":"PlayerSessionCreationPolicy",
@@ -6321,7 +6640,7 @@
           "documentation":"<p>The fleet location where the game session is running. This value might specify the fleet's home Region or a remote location. Location is expressed as an Amazon Web Services Region code such as <code>us-west-2</code>. </p>"
         }
       },
-      "documentation":"<p>Properties describing a game session.</p> <p>A game session in ACTIVE status can host players. When a game session ends, its status is set to <code>TERMINATED</code>. </p> <p>Amazon GameLift retains a game session resource for 30 days after the game session ends. You can reuse idempotency token values after this time. Game session logs are retained for 14 days.</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>Properties describing a game session.</p> <p>A game session in ACTIVE status can host players. When a game session ends, its status is set to <code>TERMINATED</code>. </p> <p>Amazon GameLift Servers retains a game session resource for 30 days after the game session ends. You can reuse idempotency token values after this time. Game session logs are retained for 14 days.</p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "GameSessionActivationTimeoutSeconds":{
       "type":"integer",
@@ -6337,7 +6656,7 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number.</p>"
         },
         "DnsName":{
           "shape":"DnsName",
@@ -6345,7 +6664,7 @@
         },
         "Port":{
           "shape":"PositiveInteger",
-          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number.</p>"
         },
         "MatchedPlayerSessions":{
           "shape":"MatchedPlayerSessionList",
@@ -6359,14 +6678,14 @@
       "members":{
         "NewGameSessionsPerCreator":{
           "shape":"WholeNumber",
-          "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy evaluates when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
+          "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy evaluates when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift Servers checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
         },
         "PolicyPeriodInMinutes":{
           "shape":"WholeNumber",
           "documentation":"<p>The time span used in evaluating the resource creation limit policy. </p>"
         }
       },
-      "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
+      "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift Servers checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
     },
     "GameSessionData":{
       "type":"string",
@@ -6416,7 +6735,7 @@
         },
         "Status":{
           "shape":"GameSessionPlacementState",
-          "documentation":"<p>Current status of the game session placement request.</p> <ul> <li> <p> <b>PENDING</b> -- The placement request is in the queue waiting to be processed. Game session properties are not yet final. </p> </li> <li> <p> <b>FULFILLED</b> -- A new game session has been successfully placed. Game session properties are now final.</p> </li> <li> <p> <b>CANCELLED</b> -- The placement request was canceled.</p> </li> <li> <p> <b>TIMED_OUT</b> -- A new game session was not successfully created before the time limit expired. You can resubmit the placement request as needed.</p> </li> <li> <p> <b>FAILED</b> -- Amazon GameLift is not able to complete the process of placing the game session. Common reasons are the game session terminated before the placement process was completed, or an unexpected internal error.</p> </li> </ul>"
+          "documentation":"<p>Current status of the game session placement request.</p> <ul> <li> <p> <b>PENDING</b> -- The placement request is in the queue waiting to be processed. Game session properties are not yet final. </p> </li> <li> <p> <b>FULFILLED</b> -- A new game session has been successfully placed. Game session properties are now final.</p> </li> <li> <p> <b>CANCELLED</b> -- The placement request was canceled.</p> </li> <li> <p> <b>TIMED_OUT</b> -- A new game session was not successfully created before the time limit expired. You can resubmit the placement request as needed.</p> </li> <li> <p> <b>FAILED</b> -- Amazon GameLift Servers is not able to complete the process of placing the game session. Common reasons are the game session terminated before the placement process was completed, or an unexpected internal error.</p> </li> </ul>"
         },
         "GameProperties":{
           "shape":"GamePropertyList",
@@ -6456,7 +6775,7 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number. This value isn't final until placement status is <code>FULFILLED</code>. </p>"
+          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number. This value isn't final until placement status is <code>FULFILLED</code>. </p>"
         },
         "DnsName":{
           "shape":"DnsName",
@@ -6464,7 +6783,7 @@
         },
         "Port":{
           "shape":"PortNumber",
-          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number. This value isn't final until placement status is <code>FULFILLED</code>.</p>"
+          "documentation":"<p>The port number for the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number. This value isn't final until placement status is <code>FULFILLED</code>.</p>"
         },
         "PlacedPlayerSessions":{
           "shape":"PlacedPlayerSessionList",
@@ -6480,10 +6799,10 @@
         },
         "PriorityConfigurationOverride":{
           "shape":"PriorityConfigurationOverride",
-          "documentation":"<p>A prioritized list of locations to use with a game session placement request and instructions on how to use it. This list overrides a queue's prioritized location list for a single game session placement request only. The list can include Amazon Web Services Regions, local zones, and custom locations (for Anywhere fleets). The fallback strategy instructs Amazon GameLift to use the override list for the first placement attempt only or for all placement attempts.</p>"
+          "documentation":"<p>An alternative priority list of locations that's included with a game session placement request. When provided, the list overrides a queue's location order list for this game session placement request only. The list might include Amazon Web Services Regions, local zones, and custom locations (for Anywhere fleets). The fallback strategy tells Amazon GameLift Servers what action to take (if any) in the event that it failed to place a new game session. </p>"
         }
       },
-      "documentation":"<p>Represents a potential game session placement, including the full details of the original placement request and the current status. </p> <note> <p>If the game session placement status is <code>PENDING</code>, the properties for game session ID/ARN, region, IP address/DNS, and port aren't final. A game session is not active and ready to accept players until placement status reaches <code>FULFILLED</code>. When the placement is in <code>PENDING</code> status, Amazon GameLift may attempt to place a game session multiple times before succeeding. With each attempt it creates a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession</a> object and updates this placement object with the new game session properties.</p> </note>"
+      "documentation":"<p>Represents a potential game session placement, including the full details of the original placement request and the current status. </p> <note> <p>If the game session placement status is <code>PENDING</code>, the properties for game session ID/ARN, region, IP address/DNS, and port aren't final. A game session is not active and ready to accept players until placement status reaches <code>FULFILLED</code>. When the placement is in <code>PENDING</code> status, Amazon GameLift Servers may attempt to place a game session multiple times before succeeding. With each attempt it creates a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession</a> object and updates this placement object with the new game session properties.</p> </note>"
     },
     "GameSessionPlacementState":{
       "type":"string",
@@ -6504,7 +6823,7 @@
         },
         "GameSessionQueueArn":{
           "shape":"GameSessionQueueArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. In a Amazon GameLift game session queue ARN, the resource ID matches the <i>Name</i> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. In a Amazon GameLift Servers game session queue ARN, the resource ID matches the <i>Name</i> value.</p>"
         },
         "TimeoutInSeconds":{
           "shape":"WholeNumber",
@@ -6512,7 +6831,7 @@
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
-          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value. </p>"
+          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift Servers can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value. </p>"
         },
         "Destinations":{
           "shape":"GameSessionQueueDestinationList",
@@ -6608,7 +6927,7 @@
         },
         "ComputeName":{
           "shape":"ComputeNameOrArn",
-          "documentation":"<p>A unique identifier for the compute resource that you want to connect to. For an EC2 fleet compute, use the instance ID. Use <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html</a> to retrieve compute identifiers.</p>"
+          "documentation":"<p>A unique identifier for the compute resource that you want to connect to. For an EC2 fleet, use an instance ID. For a managed container fleet, use a compute name. You can retrieve a fleet's compute names by calling <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ListCompute.html\">ListCompute</a>.</p>"
         }
       }
     },
@@ -6621,7 +6940,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "ComputeName":{
           "shape":"ComputeNameOrArn",
@@ -6629,7 +6948,7 @@
         },
         "ComputeArn":{
           "shape":"ComputeArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift compute resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::compute/compute-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift Servers compute resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::compute/compute-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "Credentials":{
           "shape":"AwsCredentials",
@@ -6671,7 +6990,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "ComputeName":{
           "shape":"ComputeNameOrArn",
@@ -6679,7 +6998,7 @@
         },
         "ComputeArn":{
           "shape":"ComputeArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift compute resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::compute/compute-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to an Amazon GameLift Servers compute resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::compute/compute-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "AuthToken":{
           "shape":"ComputeAuthToken",
@@ -6719,7 +7038,7 @@
       "members":{
         "FleetId":{
           "shape":"FleetIdOrArn",
-          "documentation":"<p>A unique identifier for the fleet that contains the instance you want to access. You can request access to instances in EC2 fleets with the following statuses: <code>ACTIVATING</code>, <code>ACTIVE</code>, or <code>ERROR</code>. Use either a fleet ID or an ARN value. </p> <note> <p>You can access fleets in <code>ERROR</code> status for a short period of time before Amazon GameLift deletes them.</p> </note>"
+          "documentation":"<p>A unique identifier for the fleet that contains the instance you want to access. You can request access to instances in EC2 fleets with the following statuses: <code>ACTIVATING</code>, <code>ACTIVE</code>, or <code>ERROR</code>. Use either a fleet ID or an ARN value. </p> <note> <p>You can access fleets in <code>ERROR</code> status for a short period of time before Amazon GameLift Servers deletes them.</p> </note>"
         },
         "InstanceId":{
           "shape":"InstanceId",
@@ -6771,7 +7090,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "InstanceId":{
           "shape":"InstanceId",
@@ -6787,7 +7106,7 @@
         },
         "OperatingSystem":{
           "shape":"OperatingSystem",
-          "documentation":"<p>Operating system that is running on this EC2 instance. </p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x., first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>Operating system that is running on this EC2 instance. </p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         },
         "Type":{
           "shape":"EC2InstanceType",
@@ -6795,7 +7114,7 @@
         },
         "Status":{
           "shape":"InstanceStatus",
-          "documentation":"<p>Current status of the instance. Possible statuses include the following:</p> <ul> <li> <p> <b>PENDING</b> -- The instance is in the process of being created and launching server processes as defined in the fleet's run-time configuration. </p> </li> <li> <p> <b>ACTIVE</b> -- The instance has been successfully created and at least one server process has successfully launched and reported back to Amazon GameLift that it is ready to host a game session. The instance is now considered ready to host game sessions. </p> </li> <li> <p> <b>TERMINATING</b> -- The instance is in the process of shutting down. This may happen to reduce capacity during a scaling down event or to recycle resources in the event of a problem.</p> </li> </ul>"
+          "documentation":"<p>Current status of the instance. Possible statuses include the following:</p> <ul> <li> <p> <b>PENDING</b> -- The instance is in the process of being created and launching server processes as defined in the fleet's run-time configuration. </p> </li> <li> <p> <b>ACTIVE</b> -- The instance has been successfully created and at least one server process has successfully launched and reported back to Amazon GameLift Servers that it is ready to host a game session. The instance is now considered ready to host game sessions. </p> </li> <li> <p> <b>TERMINATING</b> -- The instance is in the process of shutting down. This may happen to reduce capacity during a scaling down event or to recycle resources in the event of a problem.</p> </li> </ul>"
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -6806,7 +7125,7 @@
           "documentation":"<p>The fleet location of the instance, expressed as an Amazon Web Services Region code, such as <code>us-west-2</code>. </p>"
         }
       },
-      "documentation":"<p>Represents a virtual computing instance that runs game server processes and hosts game sessions. In Amazon GameLift, one or more instances make up a managed EC2 fleet.</p>"
+      "documentation":"<p>Represents a virtual computing instance that runs game server processes and hosts game sessions. In Amazon GameLift Servers, one or more instances make up a managed EC2 fleet.</p>"
     },
     "InstanceAccess":{
       "type":"structure",
@@ -6846,7 +7165,7 @@
           "documentation":"<p>Secret string. For Windows instances, the secret is a password for use with Windows Remote Desktop. For Linux instances, it's a private key for use with SSH.</p>"
         }
       },
-      "documentation":"<p>A set of credentials that allow remote access to an instance in an EC2 managed fleet. These credentials are returned in response to a call to <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess</a>, which requests access for instances that are running game servers with the Amazon GameLift server SDK version 4.x or earlier.</p>",
+      "documentation":"<p>A set of credentials that allow remote access to an instance in an EC2 managed fleet. These credentials are returned in response to a call to <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetInstanceAccess</a>, which requests access for instances that are running game servers with the Amazon GameLift Servers server SDK version 4.x or earlier.</p>",
       "sensitive":true
     },
     "InstanceDefinition":{
@@ -6859,10 +7178,10 @@
         },
         "WeightedCapacity":{
           "shape":"WeightedCapacity",
-          "documentation":"<p>Instance weighting that indicates how much this instance type contributes to the total capacity of a game server group. Instance weights are used by Amazon GameLift FleetIQ to calculate the instance type's cost per unit hour and better identify the most cost-effective options. For detailed information on weighting instance capacity, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\">Instance Weighting</a> in the <i>Amazon Elastic Compute Cloud Auto Scaling User Guide</i>. Default value is \"1\".</p>"
+          "documentation":"<p>Instance weighting that indicates how much this instance type contributes to the total capacity of a game server group. Instance weights are used by Amazon GameLift Servers FleetIQ to calculate the instance type's cost per unit hour and better identify the most cost-effective options. For detailed information on weighting instance capacity, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\">Instance Weighting</a> in the <i>Amazon Elastic Compute Cloud Auto Scaling User Guide</i>. Default value is \"1\".</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>An allowed instance type for a game server group. All game server groups must have at least two instance types defined for it. Amazon GameLift FleetIQ periodically evaluates each defined instance type for viability. It then updates the Auto Scaling group with the list of viable instance types.</p>"
+      "documentation":"<p>An allowed instance type for a game server group. All game server groups must have at least two instance types defined for it. Amazon GameLift Servers FleetIQ periodically evaluates each defined instance type for viability. It then updates the Auto Scaling group with the list of viable instance types.</p>"
     },
     "InstanceDefinitions":{
       "type":"list",
@@ -6963,7 +7282,7 @@
           "documentation":"<p>The network communication protocol used by the fleet.</p>"
         }
       },
-      "documentation":"<p>A range of IP addresses and port settings that allow inbound traffic to connect to processes on an instance in a fleet. Processes are assigned an IP address/port number combination, which must fall into the fleet's allowed ranges. </p> <p>For Realtime Servers fleets, Amazon GameLift automatically opens two port ranges, one for TCP messaging and one for UDP.</p>"
+      "documentation":"<p>A range of IP addresses and port settings that allow inbound traffic to connect to processes on an instance in a fleet. Processes are assigned an IP address/port number combination, which must fall into the fleet's allowed ranges. </p> <p>For Amazon GameLift Servers Realtime fleets, Amazon GameLift Servers automatically opens two port ranges, one for TCP messaging and one for UDP.</p>"
     },
     "IpPermissionsList":{
       "type":"list",
@@ -7032,7 +7351,7 @@
           "documentation":"<p>The version of the Amazon EC2 launch template to use. If no version is specified, the default version will be used. With Amazon EC2, you can specify a default version for a launch template. If none is set, the default is the first version created.</p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>An Amazon Elastic Compute Cloud launch template that contains configuration settings and game server code to be deployed to all instances in a game server group. The launch template is specified when creating a new game server group. </p>"
+      "documentation":"<p>An Amazon Elastic Compute Cloud launch template that contains configuration settings and game server code to be deployed to all instances in a game server group. The launch template is specified when creating a new game server group. </p>"
     },
     "LaunchTemplateVersion":{
       "type":"string",
@@ -7122,7 +7441,7 @@
         },
         "Location":{
           "shape":"LocationStringModel",
-          "documentation":"<p>The name of a location to retrieve compute resources for. For an Amazon GameLift Anywhere fleet, use a custom location. For a managed fleet, provide a Amazon Web Services Region or Local Zone code (for example: <code>us-west-2</code> or <code>us-west-2-lax-1</code>).</p>"
+          "documentation":"<p>The name of a location to retrieve compute resources for. For an Amazon GameLift Servers Anywhere fleet, use a custom location. For a managed fleet, provide a Amazon Web Services Region or Local Zone code (for example: <code>us-west-2</code> or <code>us-west-2-lax-1</code>).</p>"
         },
         "ContainerGroupDefinitionName":{
           "shape":"ContainerGroupDefinitionNameOrArn",
@@ -7233,7 +7552,7 @@
       "members":{
         "ContainerGroupType":{
           "shape":"ContainerGroupType",
-          "documentation":"<p>The type of container group to retrieve. Container group type determines how Amazon GameLift deploys the container group on each fleet instance.</p>"
+          "documentation":"<p>The type of container group to retrieve. Container group type determines how Amazon GameLift Servers deploys the container group on each fleet instance.</p>"
         },
         "Limit":{
           "shape":"ListContainerGroupDefinitionsLimit",
@@ -7393,7 +7712,7 @@
       "members":{
         "Filters":{
           "shape":"LocationFilterList",
-          "documentation":"<p>Filters the list for <code>AWS</code> or <code>CUSTOM</code> locations.</p>"
+          "documentation":"<p>Filters the list for <code>AWS</code> or <code>CUSTOM</code> locations. Use this parameter to narrow down results to only Amazon Web Services-managed locations (Amazon EC2 or container) or only your custom locations (such as an Amazon GameLift Servers Anywhere fleet).</p>"
         },
         "Limit":{
           "shape":"ListLocationsLimit",
@@ -7415,7 +7734,7 @@
       "members":{
         "Locations":{
           "shape":"LocationModelList",
-          "documentation":"<p>A collection of locations.</p>"
+          "documentation":"<p>A collection of locations, including both Amazon Web Services and custom locations. Each location includes a name and ping beacon information that can be used to measure network latency between player devices and the location.</p>"
         },
         "NextToken":{
           "shape":"NonZeroAndMaxString",
@@ -7455,7 +7774,7 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift resource that you want to retrieve tags for. Amazon GameLift includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift Servers resource that you want to retrieve tags for. Amazon GameLift Servers includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
         }
       }
     },
@@ -7502,7 +7821,7 @@
       "members":{
         "Location":{
           "shape":"LocationStringModel",
-          "documentation":"<p>An Amazon Web Services Region code, such as <code>us-west-2</code>. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift service locations</a> for managed hosting.</p>"
+          "documentation":"<p>An Amazon Web Services Region code, such as <code>us-west-2</code>. For a list of supported Regions and Local Zones, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\"> Amazon GameLift Servers service locations</a> for managed hosting.</p>"
         }
       },
       "documentation":"<p>A remote location where a multi-location fleet can deploy game servers for game hosting. </p>"
@@ -7541,10 +7860,14 @@
         },
         "LocationArn":{
           "shape":"LocationArnModel",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift location resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::location/location-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a custom location resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::location/location-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+        },
+        "PingBeacon":{
+          "shape":"PingBeacon",
+          "documentation":"<p>Information about the UDP ping beacon for this location. </p>"
         }
       },
-      "documentation":"<p>Properties of a custom location for use in an Amazon GameLift Anywhere fleet. This data type is returned in response to a call to <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateLocation\">https://docs.aws.amazon.com/gamelift/latest/apireference/API_CreateLocation</a>.</p>"
+      "documentation":"<p>Properties of a location, which can include its name, ARN (for custom locations), and ping beacon information.</p>"
     },
     "LocationModelList":{
       "type":"list",
@@ -7568,7 +7891,7 @@
           "documentation":"<p>The life-cycle status of a fleet location. </p>"
         }
       },
-      "documentation":"<p>A fleet location and its life-cycle state. A location state object might be used to describe a fleet's remote location or home Region. Life-cycle state tracks the progress of launching the first instance in a new location and preparing it for game hosting, and then removing all instances and deleting the location from the fleet.</p> <ul> <li> <p> <b>NEW</b> -- A new fleet location has been defined and desired instances is set to 1. </p> </li> <li> <p> <b>DOWNLOADING/VALIDATING/BUILDING/ACTIVATING</b> -- Amazon GameLift is setting up the new fleet location, creating new instances with the game build or Realtime script and starting server processes.</p> </li> <li> <p> <b>ACTIVE</b> -- Hosts can now accept game sessions.</p> </li> <li> <p> <b>ERROR</b> -- An error occurred when downloading, validating, building, or activating the fleet location.</p> </li> <li> <p> <b>DELETING</b> -- Hosts are responding to a delete fleet location request.</p> </li> <li> <p> <b>TERMINATED</b> -- The fleet location no longer exists.</p> </li> <li> <p> <b>NOT_FOUND</b> -- The fleet location was not found. This could be because the custom location was removed or not created. </p> </li> </ul>"
+      "documentation":"<p>A fleet location and its life-cycle state. A location state object might be used to describe a fleet's remote location or home Region. Life-cycle state tracks the progress of launching the first instance in a new location and preparing it for game hosting, and then removing all instances and deleting the location from the fleet.</p> <ul> <li> <p> <b>NEW</b> -- A new fleet location has been defined and desired instances is set to 1. </p> </li> <li> <p> <b>DOWNLOADING/VALIDATING/BUILDING/ACTIVATING</b> -- Amazon GameLift Servers is setting up the new fleet location, creating new instances with the game build or Realtime script and starting server processes.</p> </li> <li> <p> <b>ACTIVE</b> -- Hosts can now accept game sessions.</p> </li> <li> <p> <b>ERROR</b> -- An error occurred when downloading, validating, building, or activating the fleet location.</p> </li> <li> <p> <b>DELETING</b> -- Hosts are responding to a delete fleet location request.</p> </li> <li> <p> <b>TERMINATED</b> -- The fleet location no longer exists.</p> </li> <li> <p> <b>NOT_FOUND</b> -- The fleet location was not found. This could be because the custom location was removed or not created. </p> </li> </ul>"
     },
     "LocationStateList":{
       "type":"list",
@@ -7604,7 +7927,7 @@
       "members":{
         "LogDestination":{
           "shape":"LogDestination",
-          "documentation":"<p>The type of log collection to use for a fleet.</p> <ul> <li> <p> <code>CLOUDWATCH</code> -- (default value) Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul>"
+          "documentation":"<p>The type of log collection to use for a fleet.</p> <ul> <li> <p> <code>CLOUDWATCH</code> -- (default value) Send logs to an Amazon CloudWatch log group that you define. Each container emits a log stream, which is organized in the log group. </p> </li> <li> <p> <code>S3</code> -- Store logs in an Amazon S3 bucket that you define. This bucket must reside in the fleet's home Amazon Web Services Region.</p> </li> <li> <p> <code>NONE</code> -- Don't collect container logs.</p> </li> </ul>"
         },
         "S3BucketName":{
           "shape":"NonEmptyString",
@@ -7615,7 +7938,7 @@
           "documentation":"<p>If log destination is <code>CLOUDWATCH</code>, logs are sent to the specified log group in Amazon CloudWatch.</p>"
         }
       },
-      "documentation":"<p>A method for collecting container logs for the fleet. Amazon GameLift saves all standard output for each container in logs, including game session logs. You can select from the following methods: </p>"
+      "documentation":"<p>A method for collecting container logs for the fleet. Amazon GameLift Servers saves all standard output for each container in logs, including game session logs. You can select from the following methods: </p>"
     },
     "LogDestination":{
       "type":"string",
@@ -7668,7 +7991,7 @@
         },
         "ConfigurationArn":{
           "shape":"MatchmakingConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift matchmaking configuration resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::matchmakingconfiguration/&lt;matchmaking configuration name&gt;</code>. In a Amazon GameLift configuration ARN, the resource ID matches the <i>Name</i> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers matchmaking configuration resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::matchmakingconfiguration/&lt;matchmaking configuration name&gt;</code>. In a Amazon GameLift Servers configuration ARN, the resource ID matches the <i>Name</i> value.</p>"
         },
         "Description":{
           "shape":"NonZeroAndMaxString",
@@ -7676,7 +7999,7 @@
         },
         "GameSessionQueueArns":{
           "shape":"QueueArnsList",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift-hosted game sessions for matches that are created with this matchmaking configuration. This property is not set when <code>FlexMatchMode</code> is set to <code>STANDALONE</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift Servers-hosted game sessions for matches that are created with this matchmaking configuration. This property is not set when <code>FlexMatchMode</code> is set to <code>STANDALONE</code>.</p>"
         },
         "RequestTimeoutSeconds":{
           "shape":"MatchmakingRequestTimeoutInteger",
@@ -7728,7 +8051,7 @@
         },
         "FlexMatchMode":{
           "shape":"FlexMatchMode",
-          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift queue to start a game session for the match. </p> </li> </ul>"
+          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift Servers hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift Servers queue to start a game session for the match. </p> </li> </ul>"
         }
       },
       "documentation":"<p>Guidelines for use with FlexMatch to match players into games. All matchmaking requests must specify a matchmaking configuration.</p>"
@@ -7789,7 +8112,7 @@
         },
         "RuleSetArn":{
           "shape":"MatchmakingRuleSetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift matchmaking rule set resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::matchmakingruleset/&lt;ruleset name&gt;</code>. In a GameLift rule set ARN, the resource ID matches the <i>RuleSetName</i> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers matchmaking rule set resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::matchmakingruleset/&lt;ruleset name&gt;</code>. In a GameLift rule set ARN, the resource ID matches the <i>RuleSetName</i> value.</p>"
         },
         "RuleSetBody":{
           "shape":"RuleSetBody",
@@ -7968,7 +8291,7 @@
       "members":{
         "Message":{"shape":"NonEmptyString"}
       },
-      "documentation":"<p> The operation failed because Amazon GameLift has not yet finished validating this compute. We recommend attempting 8 to 10 retries over 3 to 5 minutes with <a href=\"http://aws.amazon.com/blogs/https:/aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\">exponential backoffs and jitter</a>. </p>",
+      "documentation":"<p> The operation failed because Amazon GameLift Servers has not yet finished validating this compute. We recommend attempting 8 to 10 retries over 3 to 5 minutes with <a href=\"http://aws.amazon.com/blogs/https:/aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\">exponential backoffs and jitter</a>. </p>",
       "exception":true
     },
     "OperatingSystem":{
@@ -7978,7 +8301,8 @@
         "AMAZON_LINUX",
         "AMAZON_LINUX_2",
         "WINDOWS_2016",
-        "AMAZON_LINUX_2023"
+        "AMAZON_LINUX_2023",
+        "WINDOWS_2022"
       ]
     },
     "OutOfCapacityException":{
@@ -7989,6 +8313,16 @@
       "documentation":"<p>The specified game server group has no available game servers to fulfill a <code>ClaimGameServer</code> request. Clients can retry such requests immediately or after a waiting period.</p>",
       "exception":true
     },
+    "PingBeacon":{
+      "type":"structure",
+      "members":{
+        "UDPEndpoint":{
+          "shape":"UDPEndpoint",
+          "documentation":"<p>The domain name and port of the UDP ping beacon. </p>"
+        }
+      },
+      "documentation":"<p>Information about a UDP ping beacon that can be used to measure network latency between a player device and an Amazon GameLift Servers hosting location.</p>"
+    },
     "PlacedPlayerSession":{
       "type":"structure",
       "members":{
@@ -8164,7 +8498,7 @@
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift game server, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>The IP address of the game session. To connect to a Amazon GameLift Servers game server, an app needs both the IP address and port number.</p>"
         },
         "DnsName":{
           "shape":"DnsName",
@@ -8172,11 +8506,11 @@
         },
         "Port":{
           "shape":"PortNumber",
-          "documentation":"<p>Port number for the game session. To connect to a Amazon GameLift server process, an app needs both the IP address and port number.</p>"
+          "documentation":"<p>Port number for the game session. To connect to a Amazon GameLift Servers server process, an app needs both the IP address and port number.</p>"
         },
         "PlayerData":{
           "shape":"PlayerData",
-          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift does not use this data, so it can be formatted as needed for use in the game. </p>"
+          "documentation":"<p>Developer-defined information related to a player. Amazon GameLift Servers does not use this data, so it can be formatted as needed for use in the game. </p>"
         }
       },
       "documentation":"<p>Represents a player session. Player sessions are created either for a specific game session, or as part of a game session placement or matchmaking request. A player session can represents a reserved player slot in a game session (when status is <code>RESERVED</code>) or actual player activity in a game session (when status is <code>ACTIVE</code>). A player session object, including player data, is automatically passed to a game session when the player connects to the game session and is validated. After the game session ends, player sessions information is retained for 30 days and then removed.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
@@ -8231,14 +8565,14 @@
       "members":{
         "PriorityOrder":{
           "shape":"PriorityTypeList",
-          "documentation":"<p>A custom sequence to use when prioritizing where to place new game sessions. Each priority type is listed once.</p> <ul> <li> <p> <code>LATENCY</code> -- Amazon GameLift prioritizes locations where the average player latency is lowest. Player latency data is provided in each game session placement request.</p> </li> <li> <p> <code>COST</code> -- Amazon GameLift prioritizes destinations with the lowest current hosting costs. Cost is evaluated based on the location, instance type, and fleet type (Spot or On-Demand) of each destination in the queue.</p> </li> <li> <p> <code>DESTINATION</code> -- Amazon GameLift prioritizes based on the list order of destinations in the queue configuration.</p> </li> <li> <p> <code>LOCATION</code> -- Amazon GameLift prioritizes based on the provided order of locations, as defined in <code>LocationOrder</code>. </p> </li> </ul>"
+          "documentation":"<p>A custom sequence to use when prioritizing where to place new game sessions. Each priority type is listed once.</p> <ul> <li> <p> <code>LATENCY</code> -- Amazon GameLift Servers prioritizes locations where the average player latency is lowest. Player latency data is provided in each game session placement request.</p> </li> <li> <p> <code>COST</code> -- Amazon GameLift Servers prioritizes queue destinations with the lowest current hosting costs. Cost is evaluated based on the destination's location, instance type, and fleet type (Spot or On-Demand).</p> </li> <li> <p> <code>DESTINATION</code> -- Amazon GameLift Servers prioritizes based on the list order of destinations in the queue configuration.</p> </li> <li> <p> <code>LOCATION</code> -- Amazon GameLift Servers prioritizes based on the provided order of locations, as defined in <code>LocationOrder</code>. </p> </li> </ul>"
         },
         "LocationOrder":{
           "shape":"LocationList",
-          "documentation":"<p>The prioritization order to use for fleet locations, when the <code>PriorityOrder</code> property includes <code>LOCATION</code>. Locations can include Amazon Web Services Region codes (such as <code>us-west-2</code>), local zones, and custom locations (for Anywhere fleets). Each location must be listed only once. For details, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Amazon GameLift service locations.</a> </p>"
+          "documentation":"<p>The prioritization order to use for fleet locations, when the <code>PriorityOrder</code> property includes <code>LOCATION</code>. Locations can include Amazon Web Services Region codes (such as <code>us-west-2</code>), local zones, and custom locations (for Anywhere fleets). Each location must be listed only once. For details, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Amazon GameLift Servers service locations.</a> </p>"
         }
       },
-      "documentation":"<p>Custom prioritization settings for a game session queue to use when searching for available game servers to place new game sessions. This configuration replaces the default FleetIQ prioritization process. </p> <p>By default, a queue makes placements based on the following default prioritizations:</p> <ul> <li> <p>If player latency data is included in a game session request, Amazon GameLift prioritizes placing game sessions where the average player latency is lowest. Amazon GameLift re-orders the queue's destinations and locations (for multi-location fleets) based on the following priorities: (1) the lowest average latency across all players, (2) the lowest hosting cost, (3) the queue's default destination order, and then (4), an alphabetic list of locations.</p> </li> <li> <p>If player latency data is not included, Amazon GameLift prioritizes placing game sessions in the queue's first destination. If that fleet has multiple locations, the game session is placed on the first location (when listed alphabetically). Amazon GameLift re-orders the queue's destinations and locations (for multi-location fleets) based on the following priorities: (1) the queue's default destination order, and then (2) an alphabetic list of locations.</p> </li> </ul>"
+      "documentation":"<p>Custom prioritization settings to use with a game session queue. Prioritization settings determine how the queue selects a game hosting resource to start a new game session. This configuration replaces the default prioritization process for queues.</p> <p>By default, a queue makes game session placements based on the following criteria:</p> <ul> <li> <p>When a game session request does not include player latency data, Amazon GameLift Servers places game sessions based on the following priorities: (1) the queue's default destination order, and (2) for multi-location fleets, an alphabetic list of locations.</p> </li> <li> <p>When a game session request includes player latency data, Amazon GameLift Servers re-orders the queue's destinations to make placements where the average player latency is lowest. It reorders based the following priorities: (1) the lowest average latency across all players, (2) the lowest hosting cost, (3) the queue's default destination order, and (4) for multi-location fleets, an alphabetic list of locations.</p> </li> </ul>"
     },
     "PriorityConfigurationOverride":{
       "type":"structure",
@@ -8246,14 +8580,14 @@
       "members":{
         "PlacementFallbackStrategy":{
           "shape":"PlacementFallbackStrategy",
-          "documentation":"<p>Instructions for how to use the override list if the first round of placement attempts fails. The first round is a failure if Amazon GameLift searches all listed locations, in all of the queue's destinations, without finding an available hosting resource for a new game session. Valid strategies include: </p> <ul> <li> <p> <code>DEFAULT_AFTER_SINGLE_PASS</code> -- After the first round of placement attempts, discard the override list and use the queue's default location priority list. Continue to use the queue's default list until the placement request times out.</p> </li> <li> <p> <code>NONE</code> -- Continue to use the override list for all rounds of placement attempts until the placement request times out.</p> </li> </ul>"
+          "documentation":"<p>Instructions for how to proceed if placement fails in every location on the priority override list. Valid strategies include: </p> <ul> <li> <p> <code>DEFAULT_AFTER_SINGLE_PASS</code> -- After attempting to place a new game session in every location on the priority override list, try to place a game session in queue's other locations. This is the default behavior.</p> </li> <li> <p> <code>NONE</code> -- Limit placements to locations on the priority override list only. </p> </li> </ul>"
         },
         "LocationOrder":{
           "shape":"LocationOrderOverrideList",
-          "documentation":"<p>A prioritized list of hosting locations. The list can include Amazon Web Services Regions (such as <code>us-west-2</code>), local zones, and custom locations (for Anywhere fleets). Each location must be listed only once. For details, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Amazon GameLift service locations.</a> </p>"
+          "documentation":"<p>A prioritized list of hosting locations. The list can include Amazon Web Services Regions (such as <code>us-west-2</code>), local zones, and custom locations (for Anywhere fleets). Each location must be listed only once. For details, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-regions.html\">Amazon GameLift Servers service locations.</a> </p>"
         }
       },
-      "documentation":"<p>An alternate list of prioritized locations for use with a game session queue. When this property is included in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> request, this list overrides the queue's default location prioritization, as defined in the queue's <a href=\"gamelift/latest/apireference/API_PriorityConfiguration.html\">PriorityConfiguration</a> setting (<i>LocationOrder</i>). This property overrides the queue's default priority list for individual placement requests only. Use this property only with queues that have a <code>PriorityConfiguration</code> setting that prioritizes first. </p> <note> <p>A priority configuration override list does not override a queue's FilterConfiguration setting, if the queue has one. Filter configurations are used to limit placements to a subset of the locations in a queue's destinations. If the override list includes a location that's not included in the FilterConfiguration allowed list, Amazon GameLift won't attempt to place a game session there.</p> </note>"
+      "documentation":"<p>An alternate list of prioritized locations for use with a game session queue. When this property is included in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartGameSessionPlacement.html\">StartGameSessionPlacement</a> request, the alternate list overrides the queue's default location priorities, as defined in the queue's <a href=\"gamelift/latest/apireference/API_PriorityConfiguration.html\">PriorityConfiguration</a> setting (<i>LocationOrder</i>). The override is valid for an individual placement request only. Use this property only with queues that have a <code>PriorityConfiguration</code> setting that prioritizes <code>LOCATION</code> first. </p> <note> <p>A priority configuration override list does not override a queue's FilterConfiguration setting, if the queue has one. Filter configurations are used to limit placements to a subset of the locations in a queue's destinations. If the override list includes a location that's not on in the <code>FilterConfiguration</code> allowed list, Amazon GameLift Servers won't attempt to place a game session there.</p> </note>"
     },
     "PriorityType":{
       "type":"string",
@@ -8315,7 +8649,7 @@
         },
         "MetricName":{
           "shape":"MetricName",
-          "documentation":"<p>Name of the Amazon GameLift-defined metric that is used to trigger a scaling adjustment. For detailed descriptions of fleet metrics, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html\">Monitor Amazon GameLift with Amazon CloudWatch</a>. </p> <ul> <li> <p> <b>ActivatingGameSessions</b> -- Game sessions in the process of being created.</p> </li> <li> <p> <b>ActiveGameSessions</b> -- Game sessions that are currently running.</p> </li> <li> <p> <b>ActiveInstances</b> -- Fleet instances that are currently running at least one game session.</p> </li> <li> <p> <b>AvailableGameSessions</b> -- Additional game sessions that fleet could host simultaneously, given current capacity.</p> </li> <li> <p> <b>AvailablePlayerSessions</b> -- Empty player slots in currently active game sessions. This includes game sessions that are not currently accepting players. Reserved player slots are not included.</p> </li> <li> <p> <b>CurrentPlayerSessions</b> -- Player slots in active game sessions that are being used by a player or are reserved for a player. </p> </li> <li> <p> <b>IdleInstances</b> -- Active instances that are currently hosting zero game sessions. </p> </li> <li> <p> <b>PercentAvailableGameSessions</b> -- Unused percentage of the total number of game sessions that a fleet could host simultaneously, given current capacity. Use this metric for a target-based scaling policy.</p> </li> <li> <p> <b>PercentIdleInstances</b> -- Percentage of the total number of active instances that are hosting zero game sessions.</p> </li> <li> <p> <b>QueueDepth</b> -- Pending game session placement requests, in any queue, where the current fleet is the top-priority destination.</p> </li> <li> <p> <b>WaitTime</b> -- Current wait time for pending game session placement requests, in any queue, where the current fleet is the top-priority destination. </p> </li> </ul>"
+          "documentation":"<p>Name of the Amazon GameLift Servers-defined metric that is used to trigger a scaling adjustment. For detailed descriptions of fleet metrics, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html\">Monitor Amazon GameLift Servers with Amazon CloudWatch</a>. </p> <ul> <li> <p> <b>ActivatingGameSessions</b> -- Game sessions in the process of being created.</p> </li> <li> <p> <b>ActiveGameSessions</b> -- Game sessions that are currently running.</p> </li> <li> <p> <b>ActiveInstances</b> -- Fleet instances that are currently running at least one game session.</p> </li> <li> <p> <b>AvailableGameSessions</b> -- Additional game sessions that fleet could host simultaneously, given current capacity.</p> </li> <li> <p> <b>AvailablePlayerSessions</b> -- Empty player slots in currently active game sessions. This includes game sessions that are not currently accepting players. Reserved player slots are not included.</p> </li> <li> <p> <b>CurrentPlayerSessions</b> -- Player slots in active game sessions that are being used by a player or are reserved for a player. </p> </li> <li> <p> <b>IdleInstances</b> -- Active instances that are currently hosting zero game sessions. </p> </li> <li> <p> <b>PercentAvailableGameSessions</b> -- Unused percentage of the total number of game sessions that a fleet could host simultaneously, given current capacity. Use this metric for a target-based scaling policy.</p> </li> <li> <p> <b>PercentIdleInstances</b> -- Percentage of the total number of active instances that are hosting zero game sessions.</p> </li> <li> <p> <b>QueueDepth</b> -- Pending game session placement requests, in any queue, where the current fleet is the top-priority destination.</p> </li> <li> <p> <b>WaitTime</b> -- Current wait time for pending game session placement requests, in any queue, where the current fleet is the top-priority destination. </p> </li> </ul>"
         },
         "PolicyType":{
           "shape":"PolicyType",
@@ -8369,15 +8703,15 @@
         },
         "CertificatePath":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>The path to a TLS certificate on your compute resource. Amazon GameLift doesn't validate the path and certificate.</p>"
+          "documentation":"<p>The path to a TLS certificate on your compute resource. Amazon GameLift Servers doesn't validate the path and certificate.</p>"
         },
         "DnsName":{
           "shape":"DnsNameInput",
-          "documentation":"<p>The DNS name of the compute resource. Amazon GameLift requires either a DNS name or IP address.</p>"
+          "documentation":"<p>The DNS name of the compute resource. Amazon GameLift Servers requires either a DNS name or IP address.</p>"
         },
         "IpAddress":{
           "shape":"IpAddress",
-          "documentation":"<p>The IP address of the compute resource. Amazon GameLift requires either a DNS name or IP address. When registering an Anywhere fleet, an IP address is required.</p>"
+          "documentation":"<p>The IP address of the compute resource. Amazon GameLift Servers requires either a DNS name or IP address. When registering an Anywhere fleet, an IP address is required.</p>"
         },
         "Location":{
           "shape":"LocationStringModel",
@@ -8484,14 +8818,14 @@
       "members":{
         "NewGameSessionsPerCreator":{
           "shape":"WholeNumber",
-          "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
+          "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift Servers checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
         },
         "PolicyPeriodInMinutes":{
           "shape":"WholeNumber",
           "documentation":"<p>The time span used in evaluating the resource creation limit policy. </p>"
         }
       },
-      "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
+      "documentation":"<p>A policy that puts limits on the number of game sessions that a player can create within a specified span of time. With this policy, you can control players' ability to consume available resources.</p> <p>The policy is evaluated when a player tries to create a new game session. On receiving a <code>CreateGameSession</code> request, Amazon GameLift Servers checks that the player (identified by <code>CreatorId</code>) has created fewer than game session limit in the specified time period.</p>"
     },
     "ResumeGameServerGroupInput":{
       "type":"structure",
@@ -8570,14 +8904,14 @@
           "documentation":"<p>The maximum amount of time (in seconds) allowed to launch a new game session and have it report ready to host players. During this time, the game session is in status <code>ACTIVATING</code>. If the game session does not become active before the timeout, it is ended and the game session status is changed to <code>TERMINATED</code>.</p>"
         }
       },
-      "documentation":"<p>A set of instructions that define the set of server processes to run on computes in a fleet. Server processes run either an executable in a custom game build or a Realtime Servers script. Amazon GameLift launches the processes, manages their life cycle, and replaces them as needed. Computes check regularly for an updated runtime configuration. </p> <p>An Amazon GameLift instance is limited to 50 processes running concurrently. To calculate the total number of processes defined in a runtime configuration, add the values of the <code>ConcurrentExecutions</code> parameter for each server process. Learn more about <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-multiprocess.html\"> Running Multiple Processes on a Fleet</a>.</p>"
+      "documentation":"<p>A set of instructions that define the set of server processes to run on computes in a fleet. Server processes run either an executable in a custom game build or a Amazon GameLift Servers Realtime script. Amazon GameLift Servers launches the processes, manages their life cycle, and replaces them as needed. Computes check regularly for an updated runtime configuration. </p> <p>An Amazon GameLift Servers instance is limited to 50 processes running concurrently. To calculate the total number of processes defined in a runtime configuration, add the values of the <code>ConcurrentExecutions</code> parameter for each server process. Learn more about <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-multiprocess.html\"> Running Multiple Processes on a Fleet</a>.</p>"
     },
     "S3Location":{
       "type":"structure",
       "members":{
         "Bucket":{
           "shape":"NonEmptyString",
-          "documentation":"<p>An Amazon S3 bucket identifier. Thename of the S3 bucket.</p> <note> <p>Amazon GameLift doesn't support uploading from Amazon S3 buckets with names that contain a dot (.).</p> </note>"
+          "documentation":"<p>An Amazon S3 bucket identifier. Thename of the S3 bucket.</p> <note> <p>Amazon GameLift Servers doesn't support uploading from Amazon S3 buckets with names that contain a dot (.).</p> </note>"
         },
         "Key":{
           "shape":"NonEmptyString",
@@ -8585,14 +8919,14 @@
         },
         "RoleArn":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift to access the S3 bucket.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift Servers to access the S3 bucket.</p>"
         },
         "ObjectVersion":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The version of the file, if object versioning is turned on for the bucket. Amazon GameLift uses this information when retrieving files from an S3 bucket that you own. Use this parameter to specify a specific version of the file. If not set, the latest version of the file is retrieved. </p>"
+          "documentation":"<p>The version of the file, if object versioning is turned on for the bucket. Amazon GameLift Servers uses this information when retrieving files from an S3 bucket that you own. Use this parameter to specify a specific version of the file. If not set, the latest version of the file is retrieved. </p>"
         }
       },
-      "documentation":"<p>The location in Amazon S3 where build or script files are stored for access by Amazon GameLift.</p>"
+      "documentation":"<p>The location in Amazon S3 where build or script files are stored for access by Amazon GameLift Servers.</p>"
     },
     "ScalingAdjustmentType":{
       "type":"string",
@@ -8611,7 +8945,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         },
         "Name":{
           "shape":"NonZeroAndMaxString",
@@ -8643,7 +8977,7 @@
         },
         "MetricName":{
           "shape":"MetricName",
-          "documentation":"<p>Name of the Amazon GameLift-defined metric that is used to trigger a scaling adjustment. For detailed descriptions of fleet metrics, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html\">Monitor Amazon GameLift with Amazon CloudWatch</a>. </p> <ul> <li> <p> <b>ActivatingGameSessions</b> -- Game sessions in the process of being created.</p> </li> <li> <p> <b>ActiveGameSessions</b> -- Game sessions that are currently running.</p> </li> <li> <p> <b>ActiveInstances</b> -- Fleet instances that are currently running at least one game session.</p> </li> <li> <p> <b>AvailableGameSessions</b> -- Additional game sessions that fleet could host simultaneously, given current capacity.</p> </li> <li> <p> <b>AvailablePlayerSessions</b> -- Empty player slots in currently active game sessions. This includes game sessions that are not currently accepting players. Reserved player slots are not included.</p> </li> <li> <p> <b>CurrentPlayerSessions</b> -- Player slots in active game sessions that are being used by a player or are reserved for a player. </p> </li> <li> <p> <b>IdleInstances</b> -- Active instances that are currently hosting zero game sessions. </p> </li> <li> <p> <b>PercentAvailableGameSessions</b> -- Unused percentage of the total number of game sessions that a fleet could host simultaneously, given current capacity. Use this metric for a target-based scaling policy.</p> </li> <li> <p> <b>PercentIdleInstances</b> -- Percentage of the total number of active instances that are hosting zero game sessions.</p> </li> <li> <p> <b>QueueDepth</b> -- Pending game session placement requests, in any queue, where the current fleet is the top-priority destination.</p> </li> <li> <p> <b>WaitTime</b> -- Current wait time for pending game session placement requests, in any queue, where the current fleet is the top-priority destination. </p> </li> </ul>"
+          "documentation":"<p>Name of the Amazon GameLift Servers-defined metric that is used to trigger a scaling adjustment. For detailed descriptions of fleet metrics, see <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html\">Monitor Amazon GameLift Servers with Amazon CloudWatch</a>. </p> <ul> <li> <p> <b>ActivatingGameSessions</b> -- Game sessions in the process of being created.</p> </li> <li> <p> <b>ActiveGameSessions</b> -- Game sessions that are currently running.</p> </li> <li> <p> <b>ActiveInstances</b> -- Fleet instances that are currently running at least one game session.</p> </li> <li> <p> <b>AvailableGameSessions</b> -- Additional game sessions that fleet could host simultaneously, given current capacity.</p> </li> <li> <p> <b>AvailablePlayerSessions</b> -- Empty player slots in currently active game sessions. This includes game sessions that are not currently accepting players. Reserved player slots are not included.</p> </li> <li> <p> <b>CurrentPlayerSessions</b> -- Player slots in active game sessions that are being used by a player or are reserved for a player. </p> </li> <li> <p> <b>IdleInstances</b> -- Active instances that are currently hosting zero game sessions. </p> </li> <li> <p> <b>PercentAvailableGameSessions</b> -- Unused percentage of the total number of game sessions that a fleet could host simultaneously, given current capacity. Use this metric for a target-based scaling policy.</p> </li> <li> <p> <b>PercentIdleInstances</b> -- Percentage of the total number of active instances that are hosting zero game sessions.</p> </li> <li> <p> <b>QueueDepth</b> -- Pending game session placement requests, in any queue, where the current fleet is the top-priority destination.</p> </li> <li> <p> <b>WaitTime</b> -- Current wait time for pending game session placement requests, in any queue, where the current fleet is the top-priority destination. </p> </li> </ul>"
         },
         "PolicyType":{
           "shape":"PolicyType",
@@ -8689,7 +9023,7 @@
         },
         "ScriptArn":{
           "shape":"ScriptArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift script resource and uniquely identifies it. ARNs are unique across all Regions. In a GameLift script ARN, the resource ID matches the <i>ScriptId</i> value.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers script resource and uniquely identifies it. ARNs are unique across all Regions. In a GameLift script ARN, the resource ID matches the <i>ScriptId</i> value.</p>"
         },
         "Name":{
           "shape":"NonZeroAndMaxString",
@@ -8709,7 +9043,7 @@
         },
         "StorageLocation":{
           "shape":"S3Location",
-          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
+          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift Servers to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift Servers uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
         }
       },
       "documentation":"<p>Properties describing a Realtime script.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
@@ -8785,7 +9119,7 @@
       "members":{
         "LaunchPath":{
           "shape":"LaunchPathStringModel",
-          "documentation":"<p>The location of a game build executable or Realtime script. Game builds and Realtime scripts are installed on instances at the root: </p> <ul> <li> <p>Windows (custom game builds only): <code>C:\\game</code>. Example: \"<code>C:\\game\\MyGame\\server.exe</code>\" </p> </li> <li> <p>Linux: <code>/local/game</code>. Examples: \"<code>/local/game/MyGame/server.exe</code>\" or \"<code>/local/game/MyRealtimeScript.js</code>\"</p> </li> </ul> <note> <p>Amazon GameLift doesn't support the use of setup scripts that launch the game executable. For custom game builds, this parameter must indicate the executable that calls the server SDK operations <code>initSDK()</code> and <code>ProcessReady()</code>. </p> </note>"
+          "documentation":"<p>The location of a game build executable or Realtime script. Game builds and Realtime scripts are installed on instances at the root: </p> <ul> <li> <p>Windows (custom game builds only): <code>C:\\game</code>. Example: \"<code>C:\\game\\MyGame\\server.exe</code>\" </p> </li> <li> <p>Linux: <code>/local/game</code>. Examples: \"<code>/local/game/MyGame/server.exe</code>\" or \"<code>/local/game/MyRealtimeScript.js</code>\"</p> </li> </ul> <note> <p>Amazon GameLift Servers doesn't support the use of setup scripts that launch the game executable. For custom game builds, this parameter must indicate the executable that calls the server SDK operations <code>initSDK()</code> and <code>ProcessReady()</code>. </p> </note>"
         },
         "Parameters":{
           "shape":"LaunchParametersStringModel",
@@ -8796,7 +9130,7 @@
           "documentation":"<p>The number of server processes using this configuration that run concurrently on each instance or compute.</p>"
         }
       },
-      "documentation":"<p>A set of instructions for launching server processes on fleet computes. Server processes run either an executable in a custom game build or a Realtime Servers script. Server process configurations are part of a fleet's runtime configuration.</p>"
+      "documentation":"<p>A set of instructions for launching server processes on fleet computes. Server processes run either an executable in a custom game build or a Amazon GameLift Servers Realtime script. Server process configurations are part of a fleet's runtime configuration.</p>"
     },
     "ServerProcessList":{
       "type":"list",
@@ -8862,7 +9196,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         }
       }
     },
@@ -8908,7 +9242,7 @@
         },
         "PriorityConfigurationOverride":{
           "shape":"PriorityConfigurationOverride",
-          "documentation":"<p>A prioritized list of locations to use for the game session placement and instructions on how to use it. This list overrides a queue's prioritized location list for this game session placement request only. You can include Amazon Web Services Regions, local zones, and custom locations (for Anywhere fleets). Choose a fallback strategy to instruct Amazon GameLift to use the override list for the first placement attempt only or for all placement attempts.</p>"
+          "documentation":"<p>A prioritized list of locations to use for the game session placement and instructions on how to use it. This list overrides a queue's prioritized location list for this game session placement request only. You can include Amazon Web Services Regions, local zones, and custom locations (for Anywhere fleets). You can choose to limit placements to locations on the override list only, or you can prioritize locations on the override list first and then fall back to the queue's other locations if needed. Choose a fallback strategy to use in the event that Amazon GameLift Servers fails to place a game session in any of the locations on the priority override list. </p>"
         }
       }
     },
@@ -8930,7 +9264,7 @@
       "members":{
         "TicketId":{
           "shape":"MatchmakingIdStringModel",
-          "documentation":"<p>A unique identifier for a matchmaking ticket. If no ticket ID is specified here, Amazon GameLift will generate one in the form of a UUID. Use this identifier to track the match backfill ticket status and retrieve match results.</p>"
+          "documentation":"<p>A unique identifier for a matchmaking ticket. If no ticket ID is specified here, Amazon GameLift Servers will generate one in the form of a UUID. Use this identifier to track the match backfill ticket status and retrieve match results.</p>"
         },
         "ConfigurationName":{
           "shape":"MatchmakingConfigurationName",
@@ -8964,7 +9298,7 @@
       "members":{
         "TicketId":{
           "shape":"MatchmakingIdStringModel",
-          "documentation":"<p>A unique identifier for a matchmaking ticket. If no ticket ID is specified here, Amazon GameLift will generate one in the form of a UUID. Use this identifier to track the matchmaking ticket status and retrieve match results.</p>"
+          "documentation":"<p>A unique identifier for a matchmaking ticket. If no ticket ID is specified here, Amazon GameLift Servers will generate one in the form of a UUID. Use this identifier to track the matchmaking ticket status and retrieve match results.</p>"
         },
         "ConfigurationName":{
           "shape":"MatchmakingConfigurationName",
@@ -9015,7 +9349,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         }
       }
     },
@@ -9050,8 +9384,7 @@
     },
     "StopMatchmakingOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StringList":{
       "type":"list",
@@ -9087,15 +9420,15 @@
         },
         "ImageUri":{
           "shape":"ImageUriString",
-          "documentation":"<p>The URI to the image that Amazon GameLift deploys to a container fleet. For a more specific identifier, see <code>ResolvedImageDigest</code>. </p>"
+          "documentation":"<p>The URI to the image that Amazon GameLift Servers deploys to a container fleet. For a more specific identifier, see <code>ResolvedImageDigest</code>. </p>"
         },
         "MemoryHardLimitMebibytes":{
           "shape":"ContainerMemoryLimit",
-          "documentation":"<p>The amount of memory that Amazon GameLift makes available to the container. If memory limits aren't set for an individual container, the container shares the container group's total memory allocation.</p> <p> <b>Related data type: </b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ContainerGroupDefinition.html\">ContainerGroupDefinition TotalMemoryLimitMebibytes</a> </p>"
+          "documentation":"<p>The amount of memory that Amazon GameLift Servers makes available to the container. If memory limits aren't set for an individual container, the container shares the container group's total memory allocation.</p> <p> <b>Related data type: </b> <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_ContainerGroupDefinition.html\">ContainerGroupDefinition TotalMemoryLimitMebibytes</a> </p>"
         },
         "PortConfiguration":{
           "shape":"ContainerPortConfiguration",
-          "documentation":"<p>A set of ports that allow access to the container from external users. Processes running in the container can bind to a one of these ports. Container ports aren't directly accessed by inbound traffic. Amazon GameLift maps these container ports to externally accessible connection ports, which are assigned as needed from the container fleet's <code>ConnectionPortRange</code>.</p>"
+          "documentation":"<p>A set of ports that allow access to the container from external users. Processes running in the container can bind to a one of these ports. Container ports aren't directly accessed by inbound traffic. Amazon GameLift Servers maps these container ports to externally accessible connection ports, which are assigned as needed from the container fleet's <code>ConnectionPortRange</code>.</p>"
         },
         "ResolvedImageDigest":{
           "shape":"Sha256",
@@ -9141,7 +9474,7 @@
         },
         "ImageUri":{
           "shape":"ImageUriString",
-          "documentation":"<p>The location of the container image to deploy to a container fleet. Provide an image in an Amazon Elastic Container Registry public or private repository. The repository must be in the same Amazon Web Services account and Amazon Web Services Region where you're creating the container group definition. For limits on image size, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\">Amazon GameLift endpoints and quotas</a>. You can use any of the following image URI formats: </p> <ul> <li> <p>Image ID only: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]</code> </p> </li> <li> <p>Image ID and digest: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]@[digest]</code> </p> </li> <li> <p>Image ID and tag: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]:[tag]</code> </p> </li> </ul>"
+          "documentation":"<p>The location of the container image to deploy to a container fleet. Provide an image in an Amazon Elastic Container Registry public or private repository. The repository must be in the same Amazon Web Services account and Amazon Web Services Region where you're creating the container group definition. For limits on image size, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/gamelift.html\">Amazon GameLift Servers endpoints and quotas</a>. You can use any of the following image URI formats: </p> <ul> <li> <p>Image ID only: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]</code> </p> </li> <li> <p>Image ID and digest: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]@[digest]</code> </p> </li> <li> <p>Image ID and tag: <code>[AWS account].dkr.ecr.[AWS region].amazonaws.com/[repository ID]:[tag]</code> </p> </li> </ul>"
         },
         "MemoryHardLimitMebibytes":{
           "shape":"ContainerMemoryLimit",
@@ -9149,7 +9482,7 @@
         },
         "PortConfiguration":{
           "shape":"ContainerPortConfiguration",
-          "documentation":"<p>A set of ports that Amazon GameLift can assign to processes in the container. Any processes that accept inbound traffic connections must be assigned a port from this set. The container port range must be large enough to assign one to each process in the container that needs one. </p> <p>Container ports aren't directly accessed by inbound traffic. Amazon GameLift maps these container ports to externally accessible connection ports, which are assigned as needed from the container fleet's <code>ConnectionPortRange</code>.</p>"
+          "documentation":"<p>A set of ports that Amazon GameLift Servers can assign to processes in a container. The container port configuration must have enough ports for each container process that accepts inbound traffic connections. A container port configuration can have can have one or more container port ranges. Each range specifies starting and ending values as well as the supported network protocol.</p> <p>Container ports aren't directly accessed by inbound traffic. Amazon GameLift Servers maps each container port to an externally accessible connection port (see the container fleet property <code>ConnectionPortRange</code>). </p>"
         },
         "Vcpu":{
           "shape":"ContainerVcpu",
@@ -9212,7 +9545,7 @@
           "documentation":"<p>The value for a developer-defined key value pair for tagging an Amazon Web Services resource. </p>"
         }
       },
-      "documentation":"<p>A label that you can assign to a Amazon GameLift resource. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>A label that you can assign to a Amazon GameLift Servers resource. </p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "TagKey":{
       "type":"string",
@@ -9240,18 +9573,17 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift resource that you want to assign tags to. Amazon GameLift includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift Servers resource that you want to assign tags to. Amazon GameLift Servers includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>A list of one or more tags to assign to the specified Amazon GameLift resource. Tags are developer-defined and structured as key-value pairs. The maximum tag limit may be lower than stated. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\"> Tagging Amazon Web Services Resources</a> for tagging limits.</p>"
+          "documentation":"<p>A list of one or more tags to assign to the specified Amazon GameLift Servers resource. Tags are developer-defined and structured as key-value pairs. The maximum tag limit may be lower than stated. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\"> Tagging Amazon Web Services Resources</a> for tagging limits.</p>"
         }
       }
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -9275,7 +9607,7 @@
           "documentation":"<p>Desired value to use with a target-based scaling policy. The value must be relevant for whatever metric the scaling policy is using. For example, in a policy using the metric PercentAvailableGameSessions, the target value should be the preferred size of the fleet's buffer (the percent of capacity that should be idle and ready for new game sessions).</p>"
         }
       },
-      "documentation":"<p>Settings for a target-based scaling policy. A target-based policy tracks a particular fleet metric specifies a target value for the metric. As player usage changes, the policy triggers Amazon GameLift to adjust capacity so that the metric returns to the target value. The target configuration specifies settings as needed for the target based policy, including the target value. </p>"
+      "documentation":"<p>Settings for a target-based scaling policy. A target-based policy tracks a particular fleet metric specifies a target value for the metric. As player usage changes, the policy triggers Amazon GameLift Servers to adjust capacity so that the metric returns to the target value. The target configuration specifies settings as needed for the target based policy, including the target value. </p>"
     },
     "TargetTrackingConfiguration":{
       "type":"structure",
@@ -9286,7 +9618,7 @@
           "documentation":"<p>Desired value to use with a game server group target-based scaling policy. </p>"
         }
       },
-      "documentation":"<p> <b>This data type is used with the Amazon GameLift FleetIQ and game server groups.</b> </p> <p>Settings for a target-based scaling policy as part of a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerGroupAutoScalingPolicy.html\">GameServerGroupAutoScalingPolicy</a> . These settings are used to create a target-based policy that tracks the Amazon GameLift FleetIQ metric <code>\"PercentUtilizedGameServers\"</code> and specifies a target value for the metric. As player usage changes, the policy triggers to adjust the game server group capacity so that the metric returns to the target value. </p>"
+      "documentation":"<p>Settings for a target-based scaling policy as part of a <a href=\"https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameServerGroupAutoScalingPolicy.html\">GameServerGroupAutoScalingPolicy</a> . These settings are used to create a target-based policy that tracks the Amazon GameLift Servers FleetIQ metric <code>\"PercentUtilizedGameServers\"</code> and specifies a target value for the metric. As player usage changes, the policy triggers to adjust the game server group capacity so that the metric returns to the target value. </p>"
     },
     "TerminalRoutingStrategyException":{
       "type":"structure",
@@ -9305,11 +9637,11 @@
       "members":{
         "GameSessionId":{
           "shape":"ArnStringModel",
-          "documentation":"<p>A unique identifier for the game session to be terminated. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;region&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>.</p>"
+          "documentation":"<p>A unique identifier for the game session to be terminated. A game session ARN has the following format: <code>arn:aws:gamelift:&lt;location&gt;::gamesession/&lt;fleet ID&gt;/&lt;custom ID string or idempotency token&gt;</code>.</p>"
         },
         "TerminationMode":{
           "shape":"TerminationMode",
-          "documentation":"<p>The method to use to terminate the game session. Available methods include: </p> <ul> <li> <p> <code>TRIGGER_ON_PROCESS_TERMINATE</code> – Prompts the Amazon GameLift service to send an <code>OnProcessTerminate()</code> callback to the server process and initiate the normal game session shutdown sequence. The <code>OnProcessTerminate</code> method, which is implemented in the game server code, must include a call to the server SDK action <code>ProcessEnding()</code>, which is how the server process signals to Amazon GameLift that a game session is ending. If the server process doesn't call <code>ProcessEnding()</code>, the game session termination won't conclude successfully.</p> </li> <li> <p> <code>FORCE_TERMINATE</code> – Prompts the Amazon GameLift service to stop the server process immediately. Amazon GameLift takes action (depending on the type of fleet) to shut down the server process without the normal game session shutdown sequence. </p> <note> <p>This method is not available for game sessions that are running on Anywhere fleets unless the fleet is deployed with the Amazon GameLift Agent. In this scenario, a force terminate request results in an invalid or bad request exception.</p> </note> </li> </ul>"
+          "documentation":"<p>The method to use to terminate the game session. Available methods include: </p> <ul> <li> <p> <code>TRIGGER_ON_PROCESS_TERMINATE</code> – Prompts the Amazon GameLift Servers service to send an <code>OnProcessTerminate()</code> callback to the server process and initiate the normal game session shutdown sequence. The <code>OnProcessTerminate</code> method, which is implemented in the game server code, must include a call to the server SDK action <code>ProcessEnding()</code>, which is how the server process signals to Amazon GameLift Servers that a game session is ending. If the server process doesn't call <code>ProcessEnding()</code>, the game session termination won't conclude successfully.</p> </li> <li> <p> <code>FORCE_TERMINATE</code> – Prompts the Amazon GameLift Servers service to stop the server process immediately. Amazon GameLift Servers takes action (depending on the type of fleet) to shut down the server process without the normal game session shutdown sequence. </p> <note> <p>This method is not available for game sessions that are running on Anywhere fleets unless the fleet is deployed with the Amazon GameLift Servers Agent. In this scenario, a force terminate request results in an invalid or bad request exception.</p> </note> </li> </ul>"
         }
       }
     },
@@ -9327,6 +9659,20 @@
       ]
     },
     "Timestamp":{"type":"timestamp"},
+    "UDPEndpoint":{
+      "type":"structure",
+      "members":{
+        "Domain":{
+          "shape":"NonZeroAndMaxString",
+          "documentation":"<p>The domain name of the UDP endpoint. </p>"
+        },
+        "Port":{
+          "shape":"PositiveInteger",
+          "documentation":"<p>The port number of the UDP endpoint. </p>"
+        }
+      },
+      "documentation":"<p>The domain name and port information for a UDP endpoint.</p>"
+    },
     "UnauthorizedException":{
       "type":"structure",
       "members":{
@@ -9352,18 +9698,17 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift resource that you want to remove tags from. Amazon GameLift includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that uniquely identifies the Amazon GameLift Servers resource that you want to remove tags from. Amazon GameLift Servers includes resource ARNs in the data object for the resource. You can retrieve the ARN by calling a <code>List</code> or <code>Describe</code> operation for the resource type. </p>"
         },
         "TagKeys":{
           "shape":"TagKeyList",
-          "documentation":"<p>A list of one or more tag keys to remove from the specified Amazon GameLift resource. </p>"
+          "documentation":"<p>A list of one or more tag keys to remove from the specified Amazon GameLift Servers resource. </p>"
         }
       }
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAliasInput":{
       "type":"structure",
@@ -9441,11 +9786,11 @@
         },
         "GameServerContainerGroupsPerInstance":{
           "shape":"GameServerContainerGroupsPerInstance",
-          "documentation":"<p>The number of times to replicate the game server container group on each fleet instance. By default, Amazon GameLift calculates the maximum number of game server container groups that can fit on each instance. You can remove this property value to use the calculated value, or set it manually. If you set this number manually, Amazon GameLift uses your value as long as it's less than the calculated maximum.</p>"
+          "documentation":"<p>The number of times to replicate the game server container group on each fleet instance. By default, Amazon GameLift Servers calculates the maximum number of game server container groups that can fit on each instance. You can remove this property value to use the calculated value, or set it manually. If you set this number manually, Amazon GameLift Servers uses your value as long as it's less than the calculated maximum.</p>"
         },
         "InstanceConnectionPortRange":{
           "shape":"ConnectionPortRange",
-          "documentation":"<p>A revised set of port numbers to open on each fleet instance. By default, Amazon GameLift calculates an optimal port range based on your fleet configuration. If you previously set this parameter manually, you can't reset this to use the calculated settings.</p>"
+          "documentation":"<p>A revised set of port numbers to open on each fleet instance. By default, Amazon GameLift Servers calculates an optimal port range based on your fleet configuration. If you previously set this parameter manually, you can't reset this to use the calculated settings.</p>"
         },
         "InstanceInboundPermissionAuthorizations":{
           "shape":"IpPermissionsList",
@@ -9528,7 +9873,7 @@
         },
         "OperatingSystem":{
           "shape":"ContainerOperatingSystem",
-          "documentation":"<p>The platform that all containers in the group use. Containers in a group must run on the same operating system.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"https://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use Amazon GameLift server SDK 4.x, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to Amazon GameLift server SDK version 5.</a> </p> </note>"
+          "documentation":"<p>The platform that all containers in the group use. Containers in a group must run on the same operating system.</p> <note> <p>Amazon Linux 2 (AL2) will reach end of support on 6/30/2025. See more details in the <a href=\"http://aws.amazon.com/amazon-linux-2/faqs/\">Amazon Linux 2 FAQs</a>. For game servers that are hosted on AL2 and use server SDK version 4.x for Amazon GameLift Servers, first update the game server build to server SDK 5.x, and then deploy to AL2023 instances. See <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-serversdk5-migration.html\"> Migrate to server SDK version 5.</a> </p> </note>"
         }
       }
     },
@@ -9571,7 +9916,7 @@
         },
         "AnywhereConfiguration":{
           "shape":"AnywhereConfiguration",
-          "documentation":"<p>Amazon GameLift Anywhere configuration options.</p>"
+          "documentation":"<p>Amazon GameLift Servers Anywhere configuration options.</p>"
         }
       }
     },
@@ -9584,7 +9929,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         }
       }
     },
@@ -9623,7 +9968,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. </p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>. </p>"
         },
         "Location":{
           "shape":"LocationStringModel",
@@ -9658,7 +10003,7 @@
         },
         "FleetArn":{
           "shape":"FleetArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers fleet resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::fleet/fleet-a1234567-b8c9-0d1e-2fa3-b45c6d7e8912</code>.</p>"
         }
       }
     },
@@ -9672,11 +10017,11 @@
         },
         "RoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift to access your Amazon EC2 Auto Scaling groups.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) for an IAM role that allows Amazon GameLift Servers to access your Amazon EC2 Auto Scaling groups.</p>"
         },
         "InstanceDefinitions":{
           "shape":"InstanceDefinitions",
-          "documentation":"<p>An updated list of Amazon EC2 instance types to use in the Auto Scaling group. The instance definitions must specify at least two different instance types that are supported by Amazon GameLift FleetIQ. This updated list replaces the entire current list of instance definitions for the game server group. For more information on instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">EC2 Instance Types</a> in the <i>Amazon EC2 User Guide</i>. You can optionally specify capacity weighting for each instance type. If no weight value is specified for an instance type, it is set to the default value \"1\". For more information about capacity weighting, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\"> Instance Weighting for Amazon EC2 Auto Scaling</a> in the Amazon EC2 Auto Scaling User Guide.</p>"
+          "documentation":"<p>An updated list of Amazon EC2 instance types to use in the Auto Scaling group. The instance definitions must specify at least two different instance types that are supported by Amazon GameLift Servers FleetIQ. This updated list replaces the entire current list of instance definitions for the game server group. For more information on instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">EC2 Instance Types</a> in the <i>Amazon EC2 User Guide</i>. You can optionally specify capacity weighting for each instance type. If no weight value is specified for an instance type, it is set to the default value \"1\". For more information about capacity weighting, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html\"> Instance Weighting for Amazon EC2 Auto Scaling</a> in the Amazon EC2 Auto Scaling User Guide.</p>"
         },
         "GameServerProtectionPolicy":{
           "shape":"GameServerProtectionPolicy",
@@ -9684,7 +10029,7 @@
         },
         "BalancingStrategy":{
           "shape":"BalancingStrategy",
-          "documentation":"<p>Indicates how Amazon GameLift FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
+          "documentation":"<p>Indicates how Amazon GameLift Servers FleetIQ balances the use of Spot Instances and On-Demand Instances in the game server group. Method options include the following:</p> <ul> <li> <p> <code>SPOT_ONLY</code> - Only Spot Instances are used in the game server group. If Spot Instances are unavailable or not viable for game hosting, the game server group provides no hosting capacity until Spot Instances can again be used. Until then, no new instances are started, and the existing nonviable Spot Instances are terminated (after current gameplay ends) and are not replaced.</p> </li> <li> <p> <code>SPOT_PREFERRED</code> - (default value) Spot Instances are used whenever available in the game server group. If Spot Instances are unavailable, the game server group continues to provide hosting capacity by falling back to On-Demand Instances. Existing nonviable Spot Instances are terminated (after current gameplay ends) and are replaced with new On-Demand Instances.</p> </li> <li> <p> <code>ON_DEMAND_ONLY</code> - Only On-Demand Instances are used in the game server group. No Spot Instances are used, even when available, while this balancing strategy is in force.</p> </li> </ul>"
         }
       }
     },
@@ -9788,7 +10133,7 @@
         },
         "PlayerLatencyPolicies":{
           "shape":"PlayerLatencyPolicyList",
-          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value. When updating policies, provide a complete collection of policies.</p>"
+          "documentation":"<p>A set of policies that enforce a sliding cap on player latency when processing game sessions placement requests. Use multiple policies to gradually relax the cap over time if Amazon GameLift Servers can't make a placement. Policies are evaluated in order starting with the lowest maximum latency value. When updating policies, provide a complete collection of policies.</p>"
         },
         "Destinations":{
           "shape":"GameSessionQueueDestinationList",
@@ -9835,7 +10180,7 @@
         },
         "GameSessionQueueArns":{
           "shape":"QueueArnsList",
-          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift-hosted game sessions for matches that are created with this matchmaking configuration. If <code>FlexMatchMode</code> is set to <code>STANDALONE</code>, do not set this parameter.</p>"
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-arn-format.html\">ARN</a>) that is assigned to a Amazon GameLift Servers game session queue resource and uniquely identifies it. ARNs are unique across all Regions. Format is <code>arn:aws:gamelift:&lt;region&gt;::gamesessionqueue/&lt;queue name&gt;</code>. Queues can be located in any Region. Queues are used to start new Amazon GameLift Servers-hosted game sessions for matches that are created with this matchmaking configuration. If <code>FlexMatchMode</code> is set to <code>STANDALONE</code>, do not set this parameter.</p>"
         },
         "RequestTimeoutSeconds":{
           "shape":"MatchmakingRequestTimeoutInteger",
@@ -9879,7 +10224,7 @@
         },
         "FlexMatchMode":{
           "shape":"FlexMatchMode",
-          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift queue to start a game session for the match. </p> </li> </ul>"
+          "documentation":"<p>Indicates whether this matchmaking configuration is being used with Amazon GameLift Servers hosting or as a standalone matchmaking solution. </p> <ul> <li> <p> <b>STANDALONE</b> - FlexMatch forms matches and returns match information, including players and team assignments, in a <a href=\"https://docs.aws.amazon.com/gamelift/latest/flexmatchguide/match-events.html#match-events-matchmakingsucceeded\"> MatchmakingSucceeded</a> event.</p> </li> <li> <p> <b>WITH_QUEUE</b> - FlexMatch forms matches and uses the specified Amazon GameLift Servers queue to start a game session for the match. </p> </li> </ul>"
         }
       }
     },
@@ -9905,7 +10250,7 @@
         },
         "RuntimeConfiguration":{
           "shape":"RuntimeConfiguration",
-          "documentation":"<p>Instructions for launching server processes on fleet computes. Server processes run either a custom game build executable or a Realtime Servers script. The runtime configuration lists the types of server processes to run, how to launch them, and the number of processes to run concurrently.</p>"
+          "documentation":"<p>Instructions for launching server processes on fleet computes. Server processes run either a custom game build executable or a Amazon GameLift Servers Realtime script. The runtime configuration lists the types of server processes to run, how to launch them, and the number of processes to run concurrently.</p>"
         }
       }
     },
@@ -9936,7 +10281,7 @@
         },
         "StorageLocation":{
           "shape":"S3Location",
-          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
+          "documentation":"<p>The location of the Amazon S3 bucket where a zipped file containing your Realtime scripts is stored. The storage location must specify the Amazon S3 bucket name, the zip file name (the \"key\"), and a role ARN that allows Amazon GameLift Servers to access the Amazon S3 storage location. The S3 bucket must be in the same Region where you want to create a new script. By default, Amazon GameLift Servers uploads the latest version of the zip file; if you have S3 object versioning turned on, you can use the <code>ObjectVersion</code> parameter to specify an earlier version. </p>"
         },
         "ZipFile":{
           "shape":"ZipBlob",
@@ -9949,7 +10294,7 @@
       "members":{
         "Script":{
           "shape":"Script",
-          "documentation":"<p>The newly created script record with a unique script ID. The new script's storage location reflects an Amazon S3 location: (1) If the script was uploaded from an S3 bucket under your account, the storage location reflects the information that was provided in the <i>CreateScript</i> request; (2) If the script file was uploaded from a local zip file, the storage location reflects an S3 location controls by the Amazon GameLift service.</p>"
+          "documentation":"<p>The newly created script record with a unique script ID. The new script's storage location reflects an Amazon S3 location: (1) If the script was uploaded from an S3 bucket under your account, the storage location reflects the information that was provided in the <i>CreateScript</i> request; (2) If the script file was uploaded from a local zip file, the storage location reflects an S3 location controls by the Amazon GameLift Servers service.</p>"
         }
       }
     },
@@ -9977,7 +10322,7 @@
       "members":{
         "GameLiftAwsAccountId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
+          "documentation":"<p>A unique identifier for the Amazon Web Services account that you use to manage your Amazon GameLift Servers fleet. You can find your Account ID in the Amazon Web Services Management Console under account settings.</p>"
         },
         "PeerVpcAwsAccountId":{
           "shape":"NonZeroAndMaxString",
@@ -9985,7 +10330,7 @@
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -9996,7 +10341,7 @@
           "documentation":"<p>Time stamp indicating when this authorization expires (24 hours after issuance). Format is a number expressed in Unix time as milliseconds (for example <code>\"1469498468.057\"</code>).</p>"
         }
       },
-      "documentation":"<p>Represents an authorization for a VPC peering connection between the VPC for an Amazon GameLift fleet and another VPC on an account you have access to. This authorization must exist and be valid for the peering connection to be established. Authorizations are valid for 24 hours after they are issued.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>Represents an authorization for a VPC peering connection between the VPC for an Amazon GameLift Servers fleet and another VPC on an account you have access to. This authorization must exist and be valid for the peering connection to be established. Authorizations are valid for 24 hours after they are issued.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "VpcPeeringAuthorizationList":{
       "type":"list",
@@ -10007,7 +10352,7 @@
       "members":{
         "FleetId":{
           "shape":"FleetId",
-          "documentation":"<p>A unique identifier for the fleet. This ID determines the ID of the Amazon GameLift VPC for your fleet.</p>"
+          "documentation":"<p>A unique identifier for the fleet. This ID determines the ID of the Amazon GameLift Servers VPC for your fleet.</p>"
         },
         "FleetArn":{
           "shape":"FleetArn",
@@ -10027,14 +10372,14 @@
         },
         "PeerVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Fleets</a>.</p>"
+          "documentation":"<p>A unique identifier for a VPC with resources to be accessed by your Amazon GameLift Servers fleet. The VPC must be in the same Region as your fleet. To look up a VPC ID, use the <a href=\"https://console.aws.amazon.com/vpc/\">VPC Dashboard</a> in the Amazon Web Services Management Console. Learn more about VPC peering in <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/vpc-peering.html\">VPC Peering with Amazon GameLift Servers Fleets</a>.</p>"
         },
         "GameLiftVpcId":{
           "shape":"NonZeroAndMaxString",
-          "documentation":"<p>A unique identifier for the VPC that contains the Amazon GameLift fleet for this connection. This VPC is managed by Amazon GameLift and does not appear in your Amazon Web Services account. </p>"
+          "documentation":"<p>A unique identifier for the VPC that contains the Amazon GameLift Servers fleet for this connection. This VPC is managed by Amazon GameLift Servers and does not appear in your Amazon Web Services account. </p>"
         }
       },
-      "documentation":"<p>Represents a peering connection between a VPC on one of your Amazon Web Services accounts and the VPC for your Amazon GameLift fleets. This record may be for an active peering connection or a pending connection that has not yet been established.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
+      "documentation":"<p>Represents a peering connection between a VPC on one of your Amazon Web Services accounts and the VPC for your Amazon GameLift Servers fleets. This record may be for an active peering connection or a pending connection that has not yet been established.</p> <p> <b>Related actions</b> </p> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html#reference-awssdk-resources-fleets\">All APIs by task</a> </p>"
     },
     "VpcPeeringConnectionList":{
       "type":"list",
@@ -10081,5 +10426,5 @@
       "max":5000000
     }
   },
-  "documentation":"<p>Amazon GameLift provides solutions for hosting session-based multiplayer game servers in the cloud, including tools for deploying, operating, and scaling game servers. Built on Amazon Web Services global computing infrastructure, GameLift helps you deliver high-performance, high-reliability, low-cost game servers while dynamically scaling your resource usage to meet player demand. </p> <p> <b>About Amazon GameLift solutions</b> </p> <p>Get more information on these Amazon GameLift solutions in the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/\">Amazon GameLift Developer Guide</a>.</p> <ul> <li> <p>Amazon GameLift managed hosting -- Amazon GameLift offers a fully managed service to set up and maintain computing machines for hosting, manage game session and player session life cycle, and handle security, storage, and performance tracking. You can use automatic scaling tools to balance player demand and hosting costs, configure your game session management to minimize player latency, and add FlexMatch for matchmaking.</p> </li> <li> <p>Managed hosting with Realtime Servers -- With Amazon GameLift Realtime Servers, you can quickly configure and set up ready-to-go game servers for your game. Realtime Servers provides a game server framework with core Amazon GameLift infrastructure already built in. Then use the full range of Amazon GameLift managed hosting features, including FlexMatch, for your game.</p> </li> <li> <p>Amazon GameLift FleetIQ -- Use Amazon GameLift FleetIQ as a standalone service while hosting your games using EC2 instances and Auto Scaling groups. Amazon GameLift FleetIQ provides optimizations for game hosting, including boosting the viability of low-cost Spot Instances gaming. For a complete solution, pair the Amazon GameLift FleetIQ and FlexMatch standalone services.</p> </li> <li> <p>Amazon GameLift FlexMatch -- Add matchmaking to your game hosting solution. FlexMatch is a customizable matchmaking service for multiplayer games. Use FlexMatch as integrated with Amazon GameLift managed hosting or incorporate FlexMatch as a standalone service into your own hosting solution.</p> </li> </ul> <p> <b>About this API Reference</b> </p> <p>This reference guide describes the low-level service API for Amazon GameLift. With each topic in this guide, you can find links to language-specific SDK guides and the Amazon Web Services CLI reference. Useful links:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html\">Amazon GameLift API operations listed by tasks</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-components.html\"> Amazon GameLift tools and resources</a> </p> </li> </ul>"
+  "documentation":"<p>Amazon GameLift Servers provides solutions for hosting session-based multiplayer game servers in the cloud, including tools for deploying, operating, and scaling game servers. Built on Amazon Web Services global computing infrastructure, GameLift helps you deliver high-performance, high-reliability, low-cost game servers while dynamically scaling your resource usage to meet player demand. </p> <p> <b>About Amazon GameLift Servers solutions</b> </p> <p>Get more information on these Amazon GameLift Servers solutions in the <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/\">Amazon GameLift Servers Developer Guide</a>.</p> <ul> <li> <p>Amazon GameLift Servers managed hosting -- Amazon GameLift Servers offers a fully managed service to set up and maintain computing machines for hosting, manage game session and player session life cycle, and handle security, storage, and performance tracking. You can use automatic scaling tools to balance player demand and hosting costs, configure your game session management to minimize player latency, and add FlexMatch for matchmaking.</p> </li> <li> <p>Managed hosting with Amazon GameLift Servers Realtime -- With Amazon GameLift Servers Amazon GameLift Servers Realtime, you can quickly configure and set up ready-to-go game servers for your game. Amazon GameLift Servers Realtime provides a game server framework with core Amazon GameLift Servers infrastructure already built in. Then use the full range of Amazon GameLift Servers managed hosting features, including FlexMatch, for your game.</p> </li> <li> <p>Amazon GameLift Servers FleetIQ -- Use Amazon GameLift Servers FleetIQ as a standalone service while hosting your games using EC2 instances and Auto Scaling groups. Amazon GameLift Servers FleetIQ provides optimizations for game hosting, including boosting the viability of low-cost Spot Instances gaming. For a complete solution, pair the Amazon GameLift Servers FleetIQ and FlexMatch standalone services.</p> </li> <li> <p>Amazon GameLift Servers FlexMatch -- Add matchmaking to your game hosting solution. FlexMatch is a customizable matchmaking service for multiplayer games. Use FlexMatch as integrated with Amazon GameLift Servers managed hosting or incorporate FlexMatch as a standalone service into your own hosting solution.</p> </li> </ul> <p> <b>About this API Reference</b> </p> <p>This reference guide describes the low-level service API for Amazon GameLift Servers. With each topic in this guide, you can find links to language-specific SDK guides and the Amazon Web Services CLI reference. Useful links:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/reference-awssdk.html\">Amazon GameLift Servers API operations listed by tasks</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-components.html\"> Amazon GameLift Servers tools and resources</a> </p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://gameliftstreams-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://gameliftstreams.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+{
+  "pagination": {
+    "ListApplications": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListStreamGroups": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListStreamSessions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListStreamSessionsByAccount": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,2364 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"gameliftstreams",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"Amazon GameLift Streams",
+    "serviceId":"GameLiftStreams",
+    "signatureVersion":"v4",
+    "signingName":"gameliftstreams",
+    "uid":"gameliftstreams-2018-05-10"
+  },
+  "operations":{
+    "AddStreamGroupLocations":{
+      "name":"AddStreamGroupLocations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups/{Identifier}/locations",
+        "responseCode":200
+      },
+      "input":{"shape":"AddStreamGroupLocationsInput"},
+      "output":{"shape":"AddStreamGroupLocationsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p> Add locations that can host stream sessions. To add a location, the stream group must be in <code>ACTIVE</code> status. You configure locations and their corresponding capacity for each stream group. Creating a stream group in a location that's nearest to your end users can help minimize latency and improve quality. </p> <p> This operation provisions stream capacity at the specified locations. By default, all locations have 1 or 2 capacity, depending on the stream class option: 2 for 'High' and 1 for 'Ultra' and 'Win2022'. This operation also copies the content files of all associated applications to an internal S3 bucket at each location. This allows Amazon GameLift Streams to host performant stream sessions. </p>"
+    },
+    "AssociateApplications":{
+      "name":"AssociateApplications",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups/{Identifier}/associations",
+        "responseCode":200
+      },
+      "input":{"shape":"AssociateApplicationsInput"},
+      "output":{"shape":"AssociateApplicationsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>When you associate, or link, an application with a stream group, then Amazon GameLift Streams can launch the application using the stream group's allocated compute resources. The stream group must be in <code>ACTIVE</code> status. You can reverse this action by using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_DisassociateApplications.html\">DisassociateApplications</a>.</p> <p>If a stream group does not already have a linked application, Amazon GameLift Streams will automatically assign the first application provided in <code>ApplicationIdentifiers</code> as the default.</p>",
+      "idempotent":true
+    },
+    "CreateApplication":{
+      "name":"CreateApplication",
+      "http":{
+        "method":"POST",
+        "requestUri":"/applications",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateApplicationInput"},
+      "output":{"shape":"CreateApplicationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates an application resource in Amazon GameLift Streams, which specifies the application content you want to stream, such as a game build or other software, and configures the settings to run it.</p> <p> Before you create an application, upload your application content files to an Amazon Simple Storage Service (Amazon S3) bucket. For more information, see <b>Getting Started</b> in the Amazon GameLift Streams Developer Guide. </p> <important> <p> Make sure that your files in the Amazon S3 bucket are the correct version you want to use. If you change the files at a later time, you will need to create a new Amazon GameLift Streams application. </p> </important> <p> If the request is successful, Amazon GameLift Streams begins to create an application and sets the status to <code>INITIALIZED</code>. When an application reaches <code>READY</code> status, you can use the application to set up stream groups and start streams. To track application status, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetApplication.html\">GetApplication</a>. </p>"
+    },
+    "CreateStreamGroup":{
+      "name":"CreateStreamGroup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateStreamGroupInput"},
+      "output":{"shape":"CreateStreamGroupOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p> Stream groups manage how Amazon GameLift Streams allocates resources and handles concurrent streams, allowing you to effectively manage capacity and costs. Within a stream group, you specify an application to stream, streaming locations and their capacity, and the stream class you want to use when streaming applications to your end-users. A stream class defines the hardware configuration of the compute resources that Amazon GameLift Streams will use when streaming, such as the CPU, GPU, and memory. </p> <p> Stream capacity represents the number of concurrent streams that can be active at a time. You set stream capacity per location, per stream group. There are two types of capacity, always-on and on-demand: </p> <ul> <li> <p> <b>Always-on</b>: The streaming capacity that is allocated and ready to handle stream requests without delay. You pay for this capacity whether it's in use or not. Best for quickest time from streaming request to streaming session. Default is 1 (2 for high stream classes) when creating a stream group or adding a location. </p> </li> <li> <p> <b>On-demand</b>: The streaming capacity that Amazon GameLift Streams can allocate in response to stream requests, and then de-allocate when the session has terminated. This offers a cost control measure at the expense of a greater startup time (typically under 5 minutes). Default is 0 when creating a stream group or adding a location. </p> </li> </ul> <p>Values for capacity must be whole number multiples of the tenancy value of the stream group's stream class.</p> <p> To adjust the capacity of any <code>ACTIVE</code> stream group, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_UpdateStreamGroup.html\">UpdateStreamGroup</a>. </p> <p> If the <code>CreateStreamGroup</code> request is successful, Amazon GameLift Streams assigns a unique ID to the stream group resource and sets the status to <code>ACTIVATING</code>. It can take a few minutes for Amazon GameLift Streams to finish creating the stream group while it searches for unallocated compute resources and provisions them. When complete, the stream group status will be <code>ACTIVE</code> and you can start stream sessions by using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html\">StartStreamSession</a>. To check the stream group's status, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamGroup.html\">GetStreamGroup</a>. </p> <p>Stream groups should be recreated every 3-4 weeks to pick up important service updates and fixes. Stream groups that are older than 180 days can no longer be updated with new application associations. Stream groups expire when they are 365 days old, at which point they can no longer stream sessions. The exact expiration date is indicated by the date value in the <code>ExpiresAt</code> field.</p>",
+      "idempotent":true
+    },
+    "CreateStreamSessionConnection":{
+      "name":"CreateStreamSessionConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions/{StreamSessionIdentifier}/connections",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateStreamSessionConnectionInput"},
+      "output":{"shape":"CreateStreamSessionConnectionOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Enables clients to reconnect to a stream session while preserving all session state and data in the disconnected session. This reconnection process can be initiated when a stream session is in either <code>PENDING_CLIENT_RECONNECTION</code> or <code>ACTIVE</code> status. The process works as follows: </p> <ol> <li> <p>Initial disconnect:</p> <ul> <li> <p>When a client disconnects or loses connection, the stream session transitions from <code>CONNECTED</code> to <code>PENDING_CLIENT_RECONNECTION</code> </p> </li> </ul> </li> <li> <p>Reconnection time window:</p> <ul> <li> <p>Clients have <code>ConnectionTimeoutSeconds</code> (defined in <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_StartStreamSession.html\">StartStreamSession</a>) to reconnect before session termination</p> </li> <li> <p>Your backend server must call <b>CreateStreamSessionConnection</b> to initiate reconnection</p> </li> <li> <p>Session transitions to <code>RECONNECTING</code> status</p> </li> </ul> </li> <li> <p>Reconnection completion:</p> <ul> <li> <p>On successful <b>CreateStreamSessionConnection</b>, session status changes to <code>ACTIVE</code> </p> </li> <li> <p>Provide the new connection information to the requesting client</p> </li> <li> <p>Client must establish connection within <code>ConnectionTimeoutSeconds</code> </p> </li> <li> <p>Session terminates automatically if client fails to connect in time</p> </li> </ul> </li> </ol> <p>For more information about the stream session lifecycle, see <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/stream-sessions.html\">Stream sessions</a> in the <i>Amazon GameLift Streams Developer Guide</i>.</p> <p>To begin re-connecting to an existing stream session, specify the stream group ID and stream session ID that you want to reconnect to, and the signal request to use with the stream.</p>"
+    },
+    "DeleteApplication":{
+      "name":"DeleteApplication",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/applications/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteApplicationInput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Permanently deletes an Amazon GameLift Streams application resource. This also deletes the application content files stored with Amazon GameLift Streams. However, this does not delete the original files that you uploaded to your Amazon S3 bucket; you can delete these any time after Amazon GameLift Streams creates an application, which is the only time Amazon GameLift Streams accesses your Amazon S3 bucket.</p> <p> You can only delete an application that meets the following conditions: </p> <ul> <li> <p>The application is in <code>READY</code> or <code>ERROR</code> status. You cannot delete an application that's in <code>PROCESSING</code> or <code>INITIALIZED</code> status.</p> </li> <li> <p>The application is not the default application of any stream groups. You must first delete the stream group by using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_DeleteStreamGroup.html\">DeleteStreamGroup</a>.</p> </li> <li> <p>The application is not linked to any stream groups. You must first unlink the stream group by using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_DisassociateApplications.html\">DisassociateApplications</a>.</p> </li> <li> <p> An application is not streaming in any ongoing stream session. You must wait until the client ends the stream session or call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html\">TerminateStreamSession</a> to end the stream. </p> </li> </ul> <p>If any active stream groups exist for this application, this request returns a <code>ValidationException</code>. </p>",
+      "idempotent":true
+    },
+    "DeleteStreamGroup":{
+      "name":"DeleteStreamGroup",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/streamgroups/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteStreamGroupInput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Permanently deletes all compute resources and information related to a stream group. To delete a stream group, specify the unique stream group identifier. During the deletion process, the stream group's status is <code>DELETING</code>. This operation stops streams in progress and prevents new streams from starting. As a best practice, before deleting the stream group, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ListStreamSessions.html\">ListStreamSessions</a> to check for streams in progress and take action to stop them. When you delete a stream group, any application associations referring to that stream group are automatically removed.</p>",
+      "idempotent":true
+    },
+    "DisassociateApplications":{
+      "name":"DisassociateApplications",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups/{Identifier}/disassociations",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateApplicationsInput"},
+      "output":{"shape":"DisassociateApplicationsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p> When you disassociate, or unlink, an application from a stream group, you can no longer stream this application by using that stream group's allocated compute resources. Any streams in process will continue until they terminate, which helps avoid interrupting an end-user's stream. Amazon GameLift Streams will not initiate new streams in the stream group using the disassociated application. The disassociate action does not affect the stream capacity of a stream group. To disassociate an application, the stream group must be in <code>ACTIVE</code> status. </p> <p> If you disassociate the default application, Amazon GameLift Streams will automatically choose a new default application from the remaining associated applications. To change which application is the default application, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_UpdateStreamGroup.html\">UpdateStreamGroup</a> and specify a new <code>DefaultApplicationIdentifier</code>. </p>",
+      "idempotent":true
+    },
+    "ExportStreamSessionFiles":{
+      "name":"ExportStreamSessionFiles",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions/{StreamSessionIdentifier}/exportfiles",
+        "responseCode":200
+      },
+      "input":{"shape":"ExportStreamSessionFilesInput"},
+      "output":{"shape":"ExportStreamSessionFilesOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p> Export the files that your application modifies or generates in a stream session, which can help you debug or verify your application. When your application runs, it generates output files such as logs, diagnostic information, crash dumps, save files, user data, screenshots, and so on. The files can be defined by the engine or frameworks that your application uses, or information that you've programmed your application to output. </p> <p> You can only call this action on a stream session that is in progress, specifically in one of the following statuses <code>ACTIVE</code>, <code>CONNECTED</code>, <code>PENDING_CLIENT_RECONNECTION</code>, and <code>RECONNECTING</code>. You must provide an Amazon Simple Storage Service (Amazon S3) bucket to store the files in. When the session ends, Amazon GameLift Streams produces a compressed folder that contains all of the files and directories that were modified or created by the application during the stream session. AWS uses your security credentials to authenticate and authorize access to your Amazon S3 bucket. </p> <p>Amazon GameLift Streams collects the following generated and modified files. Find them in the corresponding folders in the <code>.zip</code> archive.</p> <ul> <li> <p> <code>application/</code>: The folder where your application or game is stored. </p> </li> </ul> <ul> <li> <p> <code>profile/</code>: The user profile folder.</p> </li> <li> <p> <code>temp/</code>: The system temp folder.</p> </li> </ul> <p/> <p>To verify the status of the exported files, use GetStreamSession. </p> <p>To delete the files, delete the object in the S3 bucket. </p>",
+      "idempotent":true
+    },
+    "GetApplication":{
+      "name":"GetApplication",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetApplicationInput"},
+      "output":{"shape":"GetApplicationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves properties for an Amazon GameLift Streams application resource. Specify the ID of the application that you want to retrieve. If the operation is successful, it returns properties for the requested application.</p>",
+      "readonly":true
+    },
+    "GetStreamGroup":{
+      "name":"GetStreamGroup",
+      "http":{
+        "method":"GET",
+        "requestUri":"/streamgroups/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetStreamGroupInput"},
+      "output":{"shape":"GetStreamGroupOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves properties for a Amazon GameLift Streams stream group resource. Specify the ID of the stream group that you want to retrieve. If the operation is successful, it returns properties for the requested stream group.</p>",
+      "readonly":true
+    },
+    "GetStreamSession":{
+      "name":"GetStreamSession",
+      "http":{
+        "method":"GET",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions/{StreamSessionIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetStreamSessionInput"},
+      "output":{"shape":"GetStreamSessionOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves properties for a Amazon GameLift Streams stream session resource. Specify the Amazon Resource Name (ARN) of the stream session that you want to retrieve and its stream group ARN. If the operation is successful, it returns properties for the requested resource.</p>",
+      "readonly":true
+    },
+    "ListApplications":{
+      "name":"ListApplications",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications",
+        "responseCode":200
+      },
+      "input":{"shape":"ListApplicationsInput"},
+      "output":{"shape":"ListApplicationsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves a list of all Amazon GameLift Streams applications that are associated with the Amazon Web Services account in use. This operation returns applications in all statuses, in no particular order. You can paginate the results as needed.</p>",
+      "readonly":true
+    },
+    "ListStreamGroups":{
+      "name":"ListStreamGroups",
+      "http":{
+        "method":"GET",
+        "requestUri":"/streamgroups",
+        "responseCode":200
+      },
+      "input":{"shape":"ListStreamGroupsInput"},
+      "output":{"shape":"ListStreamGroupsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves a list of all Amazon GameLift Streams stream groups that are associated with the Amazon Web Services account in use. This operation returns stream groups in all statuses, in no particular order. You can paginate the results as needed.</p>",
+      "readonly":true
+    },
+    "ListStreamSessions":{
+      "name":"ListStreamSessions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListStreamSessionsInput"},
+      "output":{"shape":"ListStreamSessionsOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves a list of Amazon GameLift Streams stream sessions that a stream group is hosting.</p> <p>To retrieve stream sessions, specify the stream group, and optionally filter by stream session status. You can paginate the results as needed.</p> <p>This operation returns the requested stream sessions in no particular order.</p>",
+      "readonly":true
+    },
+    "ListStreamSessionsByAccount":{
+      "name":"ListStreamSessionsByAccount",
+      "http":{
+        "method":"GET",
+        "requestUri":"/streamsessions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListStreamSessionsByAccountInput"},
+      "output":{"shape":"ListStreamSessionsByAccountOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves a list of Amazon GameLift Streams stream sessions that this user account has access to.</p> <p>In the returned list of stream sessions, the <code>ExportFilesMetadata</code> property only shows the <code>Status</code> value. To get the <code>OutpurUri</code> and <code>StatusReason</code> values, use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a>.</p> <p>We don't recommend using this operation to regularly check stream session statuses because it's costly. Instead, to check status updates for a specific stream session, use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a>.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves all tags assigned to a Amazon GameLift Streams resource. To list tags for a resource, specify the ARN value for the resource.</p> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p>",
+      "readonly":true
+    },
+    "RemoveStreamGroupLocations":{
+      "name":"RemoveStreamGroupLocations",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/streamgroups/{Identifier}/locations",
+        "responseCode":204
+      },
+      "input":{"shape":"RemoveStreamGroupLocationsInput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p> Removes a set of remote locations from this stream group. To remove a location, the stream group must be in <code>ACTIVE</code> status. When you remove a location, Amazon GameLift Streams releases allocated compute resources in that location. Stream sessions can no longer start from removed locations in a stream group. Amazon GameLift Streams also deletes the content files of all associated applications that were in Amazon GameLift Streams's internal Amazon S3 bucket at this location. </p> <p> You cannot remove the Amazon Web Services Region location where you initially created this stream group, known as the primary location. However, you can set the stream capacity to zero to avoid incurring costs for allocated compute resources in that location. </p>",
+      "idempotent":true
+    },
+    "StartStreamSession":{
+      "name":"StartStreamSession",
+      "http":{
+        "method":"POST",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions",
+        "responseCode":201
+      },
+      "input":{"shape":"StartStreamSessionInput"},
+      "output":{"shape":"StartStreamSessionOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p> This action initiates a new stream session and outputs connection information that clients can use to access the stream. A stream session refers to an instance of a stream that Amazon GameLift Streams transmits from the server to the end-user. A stream session runs on a compute resource that a stream group has allocated. The start stream session process works as follows: </p> <ol> <li> <p>Prerequisites:</p> <ul> <li> <p>You must have a stream group in <code>ACTIVE</code> status</p> </li> <li> <p>You must have idle or on-demand capacity in a stream group in the location you want to stream from</p> </li> <li> <p>You must have at least one application associated to the stream group (use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_AssociateApplications.html\">AssociateApplications</a> if needed)</p> </li> </ul> </li> <li> <p>Start stream request:</p> <ul> <li> <p>Your backend server calls <b>StartStreamSession</b> to initiate connection</p> </li> <li> <p>Amazon GameLift Streams creates the stream session resource, assigns an Amazon Resource Name (ARN) value, and begins searching for available stream capacity to run the stream</p> </li> <li> <p>Session transitions to <code>ACTIVATING</code> status</p> </li> </ul> </li> <li> <p>Placement completion:</p> <ul> <li> <p>If Amazon GameLift Streams is successful in finding capacity for the stream, the stream session status changes to <code>ACTIVE</code> status and <b>StartStreamSession</b> returns stream connection information</p> </li> <li> <p>If Amazon GameLift Streams was not successful in finding capacity within the placement timeout period (defined according to the capacity type and platform type), the stream session status changes to <code>ERROR</code> status and <b>StartStreamSession</b> returns a <code>StatusReason</code> of <code>placementTimeout</code> </p> </li> </ul> </li> <li> <p>Connection completion:</p> <ul> <li> <p>Provide the new connection information to the requesting client</p> </li> <li> <p>Client must establish connection within <code>ConnectionTimeoutSeconds</code> (specified in <b>StartStreamSession</b> parameters)</p> </li> <li> <p>Session terminates automatically if client fails to connect in time</p> </li> </ul> </li> </ol> <p>For more information about the stream session lifecycle, see <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/stream-sessions.html\">Stream sessions</a> in the <i>Amazon GameLift Streams Developer Guide</i>.</p> <p>Timeouts to be aware of that affect a stream session:</p> <ul> <li> <p> <b>Placement timeout</b>: The amount of time that Amazon GameLift Streams has to find capacity for a stream request. Placement timeout varies based on the capacity type used to fulfill your stream request:</p> <ul> <li> <p> <b>Always-on capacity</b>: 75 seconds</p> </li> <li> <p> <b>On-demand capacity</b>:</p> <ul> <li> <p>Linux/Proton runtimes: 90 seconds</p> </li> <li> <p>Windows runtime: 10 minutes</p> </li> </ul> </li> </ul> </li> <li> <p> <b>Connection timeout</b>: The amount of time that Amazon GameLift Streams waits for a client to connect to a stream session in <code>ACTIVE</code> status, or reconnect to a stream session in <code>PENDING_CLIENT_RECONNECTION</code> status, the latter of which occurs when a client disconnects or loses connection from a stream session. If no client connects before the timeout, Amazon GameLift Streams terminates the stream session. This value is specified by <code>ConnectionTimeoutSeconds</code> in the <code>StartStreamSession</code> parameters.</p> </li> <li> <p> <b>Idle timeout</b>: A stream session will be terminated if no user input has been received for 60 minutes.</p> </li> <li> <p> <b>Maximum session length</b>: A stream session will be terminated after this amount of time has elapsed since it started, regardless of any existing client connections. This value is specified by <code>SessionLengthSeconds</code> in the <code>StartStreamSession</code> parameters.</p> </li> </ul> <p>To start a new stream session, specify a stream group ID and application ID, along with the transport protocol and signal request to use with the stream session.</p> <p>For stream groups that have multiple locations, provide a set of locations ordered by priority using a <code>Locations</code> parameter. Amazon GameLift Streams will start a single stream session in the next available location. An application must be finished replicating to a remote location before the remote location can host a stream.</p> <p>To reconnect to a stream session after a client disconnects or loses connection, use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_CreateStreamSessionConnection.html\">CreateStreamSessionConnection</a>.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Assigns one or more tags to a Amazon GameLift Streams resource. Use tags to organize Amazon Web Services resources for a range of purposes. You can assign tags to the following Amazon GameLift Streams resource types:</p> <ul> <li> <p>Application</p> </li> <li> <p>StreamGroup</p> </li> </ul> <p> <b>Learn more</b> </p> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i> </p> <p> <a href=\"http://aws.amazon.com/answers/account-management/aws-tagging-strategies/\"> Amazon Web Services Tagging Strategies</a> </p>",
+      "idempotent":true
+    },
+    "TerminateStreamSession":{
+      "name":"TerminateStreamSession",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/streamgroups/{Identifier}/streamsessions/{StreamSessionIdentifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"TerminateStreamSessionInput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Permanently terminates an active stream session. When called, the stream session status changes to <code>TERMINATING</code>. You can terminate a stream session in any status except <code>ACTIVATING</code>. If the stream session is in <code>ACTIVATING</code> status, an exception is thrown.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Removes one or more tags from a Amazon GameLift Streams resource. To remove tags, specify the Amazon GameLift Streams resource and a list of one or more tags to remove.</p>",
+      "idempotent":true
+    },
+    "UpdateApplication":{
+      "name":"UpdateApplication",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/applications/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateApplicationInput"},
+      "output":{"shape":"UpdateApplicationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p> Updates the mutable configuration settings for a Amazon GameLift Streams application resource. You can change the <code>Description</code>, <code>ApplicationLogOutputUri</code>, and <code>ApplicationLogPaths</code>. </p> <p>To update application settings, specify the application ID and provide the new values. If the operation is successful, it returns the complete updated set of settings for the application.</p>"
+    },
+    "UpdateStreamGroup":{
+      "name":"UpdateStreamGroup",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/streamgroups/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateStreamGroupInput"},
+      "output":{"shape":"UpdateStreamGroupOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p> Updates the configuration settings for an Amazon GameLift Streams stream group resource. To update a stream group, it must be in <code>ACTIVE</code> status. You can change the description, the set of locations, and the requested capacity of a stream group per location. If you want to change the stream class, create a new stream group. </p> <p> Stream capacity represents the number of concurrent streams that can be active at a time. You set stream capacity per location, per stream group. There are two types of capacity, always-on and on-demand: </p> <ul> <li> <p> <b>Always-on</b>: The streaming capacity that is allocated and ready to handle stream requests without delay. You pay for this capacity whether it's in use or not. Best for quickest time from streaming request to streaming session. Default is 1 (2 for high stream classes) when creating a stream group or adding a location. </p> </li> <li> <p> <b>On-demand</b>: The streaming capacity that Amazon GameLift Streams can allocate in response to stream requests, and then de-allocate when the session has terminated. This offers a cost control measure at the expense of a greater startup time (typically under 5 minutes). Default is 0 when creating a stream group or adding a location. </p> </li> </ul> <p>Values for capacity must be whole number multiples of the tenancy value of the stream group's stream class.</p> <p>To update a stream group, specify the stream group's Amazon Resource Name (ARN) and provide the new values. If the request is successful, Amazon GameLift Streams returns the complete updated metadata for the stream group. Expired stream groups cannot be updated.</p>"
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>You don't have the required permissions to access this Amazon GameLift Streams resource. Correct the permissions before you try again.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AddStreamGroupLocationsInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "LocationConfigurations"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p> A stream group to add the specified locations to. </p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "LocationConfigurations":{
+          "shape":"LocationConfigurations",
+          "documentation":"<p> A set of one or more locations and the streaming capacity for each location. </p>"
+        }
+      }
+    },
+    "AddStreamGroupLocationsOutput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "Locations"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>"
+        },
+        "Locations":{
+          "shape":"LocationStates",
+          "documentation":"<p>This value is set of locations, including their name, current status, and capacities. </p> <p>A location can be in one of the following states:</p> <ul> <li> <p> <code>ACTIVATING</code>: Amazon GameLift Streams is preparing the location. You cannot stream from, scale the capacity of, or remove this location yet.</p> </li> <li> <p> <code>ACTIVE</code>: The location is provisioned with initial capacity. You can now stream from, scale the capacity of, or remove this location.</p> </li> <li> <p> <code>ERROR</code>: Amazon GameLift Streams failed to set up this location. The <code>StatusReason</code> field describes the error. You can remove this location and try to add it again.</p> </li> <li> <p> <code>REMOVING</code>: Amazon GameLift Streams is working to remove this location. This will release all provisioned capacity for this location in this stream group.</p> </li> </ul>"
+        }
+      }
+    },
+    "AlwaysOnCapacity":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ApplicationLogOutputUri":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"$|^s3://([a-zA-Z0-9][a-zA-Z0-9._-]{1,61}[a-zA-Z0-9])(/[a-zA-Z0-9._-]+)*/?"
+    },
+    "ApplicationSourceUri":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "ApplicationStatus":{
+      "type":"string",
+      "enum":[
+        "INITIALIZED",
+        "PROCESSING",
+        "READY",
+        "DELETING",
+        "ERROR"
+      ]
+    },
+    "ApplicationStatusReason":{
+      "type":"string",
+      "enum":[
+        "internalError",
+        "accessDenied"
+      ]
+    },
+    "ApplicationSummary":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>An Amazon Resource Name (ARN) that's assigned to an application resource and uniquely identifies the application across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:application/[resource ID]</code>.</p>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>An ID that uniquely identifies the application resource. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application. You can edit this value. </p>"
+        },
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>The current status of the application resource. Possible statuses include the following:</p> <ul> <li> <p> <code>INITIALIZED</code>: Amazon GameLift Streams has received the request and is initiating the work flow to create an application. </p> </li> <li> <p> <code>PROCESSING</code>: The create application work flow is in process. Amazon GameLift Streams is copying the content and caching for future deployment in a stream group.</p> </li> <li> <p> <code>READY</code>: The application is ready to deploy in a stream group.</p> </li> <li> <p> <code>ERROR</code>: An error occurred when setting up the application. For more information about the error, call <code>GetApplication</code> and refer to <code>StatusReason</code>.</p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the application.</p> </li> </ul>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "RuntimeEnvironment":{
+          "shape":"RuntimeEnvironment",
+          "documentation":"<p> Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers. </p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Describes an application resource that represents a collection of content for streaming with Amazon GameLift Streams. To retrieve additional application details, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetApplication.html\">GetApplication</a>.</p>"
+    },
+    "ApplicationSummaryList":{
+      "type":"list",
+      "member":{"shape":"ApplicationSummary"}
+    },
+    "Arn":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"arn:aws:gameliftstreams:([^: ]*):([0-9]{12}):([^: ]*)"
+    },
+    "ArnList":{
+      "type":"list",
+      "member":{"shape":"Arn"}
+    },
+    "AssociateApplicationsInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "ApplicationIdentifiers"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>A stream group to associate to the applications.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "ApplicationIdentifiers":{
+          "shape":"Identifiers",
+          "documentation":"<p>A set of applications to associate with the stream group.</p> <p>This value is a set of either <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARN)</a> or IDs that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "AssociateApplicationsOutput":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>A stream group that is associated to the applications.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. </p>"
+        },
+        "ApplicationArns":{
+          "shape":"ArnList",
+          "documentation":"<p>A set of applications that are associated to the stream group.</p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "CapacityValue":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":128,
+      "min":32,
+      "pattern":"[\\x21-\\x7E]+"
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The requested operation would cause a conflict with the current state of a service resource associated with the request. Resolve the conflict before retrying this request.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ConnectionTimeoutSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":3600,
+      "min":1
+    },
+    "CreateApplicationInput":{
+      "type":"structure",
+      "required":[
+        "Description",
+        "RuntimeEnvironment",
+        "ExecutablePath",
+        "ApplicationSourceUri"
+      ],
+      "members":{
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application. You can update this value later.</p>"
+        },
+        "RuntimeEnvironment":{
+          "shape":"RuntimeEnvironment",
+          "documentation":"<p>Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers.</p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+        },
+        "ExecutablePath":{
+          "shape":"ExecutablePath",
+          "documentation":"<p>The relative path and file name of the executable file that Amazon GameLift Streams will stream. Specify a path relative to the location set in <code>ApplicationSourceUri</code>. The file must be contained within the application's root folder. For Windows applications, the file must be a valid Windows executable or batch file with a filename ending in .exe, .cmd, or .bat. For Linux applications, the file must be a valid Linux binary executable or a script that contains an initial interpreter line starting with a shebang ('<code>#!</code>').</p>"
+        },
+        "ApplicationSourceUri":{
+          "shape":"ApplicationSourceUri",
+          "documentation":"<p>The location of the content that you want to stream. Enter an Amazon S3 URI to a bucket that contains your game or other application. The location can have a multi-level prefix structure, but it must include all the files needed to run the content. Amazon GameLift Streams copies everything under the specified location.</p> <p>This value is immutable. To designate a different content location, create a new application.</p> <note> <p>The Amazon S3 bucket and the Amazon GameLift Streams application must be in the same Amazon Web Services Region.</p> </note>"
+        },
+        "ApplicationLogPaths":{
+          "shape":"FilePaths",
+          "documentation":"<p>Locations of log files that your content generates during a stream session. Enter path values that are relative to the <code>ApplicationSourceUri</code> location. You can specify up to 10 log paths. Amazon GameLift Streams uploads designated log files to the Amazon S3 bucket that you specify in <code>ApplicationLogOutputUri</code> at the end of a stream session. To retrieve stored log files, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a> and get the <code>LogFileLocationUri</code>.</p>"
+        },
+        "ApplicationLogOutputUri":{
+          "shape":"ApplicationLogOutputUri",
+          "documentation":"<p>An Amazon S3 URI to a bucket where you would like Amazon GameLift Streams to save application logs. Required if you specify one or more <code>ApplicationLogPaths</code>.</p> <note> <p>The log bucket must have permissions that give Amazon GameLift Streams access to write the log files. For more information, see <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/applications.html#application-bucket-permission-template\">Application log bucket permission policy</a> in the <i>Amazon GameLift Streams Developer Guide</i>.</p> </note>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of labels to assign to the new application resource. Tags are developer-defined key-value pairs. Tagging Amazon Web Services resources is useful for resource management, access management and cost allocation. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\"> Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i>. You can use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TagResource.html\">TagResource</a> to add tags, <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_UntagResource.html\">UntagResource</a> to remove tags, and <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ListTagsForResource.html\">ListTagsForResource</a> to view tags on existing resources.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique identifier that represents a client request. The request is idempotent, which ensures that an API request completes only once. When users send a request, Amazon GameLift Streams automatically populates this field. </p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateApplicationOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that's assigned to an application resource and uniquely identifies it across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:application/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application. You can edit this value. </p>"
+        },
+        "RuntimeEnvironment":{
+          "shape":"RuntimeEnvironment",
+          "documentation":"<p> Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers. </p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+        },
+        "ExecutablePath":{
+          "shape":"ExecutablePath",
+          "documentation":"<p>The relative path and file name of the executable file that launches the content for streaming.</p>"
+        },
+        "ApplicationLogPaths":{
+          "shape":"FilePaths",
+          "documentation":"<p>Locations of log files that your content generates during a stream session. Amazon GameLift Streams uploads log files to the Amazon S3 bucket that you specify in <code>ApplicationLogOutputUri</code> at the end of a stream session. To retrieve stored log files, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a> and get the <code>LogFileLocationUri</code>.</p>"
+        },
+        "ApplicationLogOutputUri":{
+          "shape":"ApplicationLogOutputUri",
+          "documentation":"<p>An Amazon S3 URI to a bucket where you would like Amazon GameLift Streams to save application logs. Required if you specify one or more <code>ApplicationLogPaths</code>.</p>"
+        },
+        "ApplicationSourceUri":{
+          "shape":"ApplicationSourceUri",
+          "documentation":"<p>The original Amazon S3 location of uploaded stream content for the application.</p>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>a-9ZY8X7Wv6</code>.</p>"
+        },
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>The current status of the application resource. Possible statuses include the following:</p> <ul> <li> <p> <code>INITIALIZED</code>: Amazon GameLift Streams has received the request and is initiating the work flow to create an application. </p> </li> <li> <p> <code>PROCESSING</code>: The create application work flow is in process. Amazon GameLift Streams is copying the content and caching for future deployment in a stream group.</p> </li> <li> <p> <code>READY</code>: The application is ready to deploy in a stream group.</p> </li> <li> <p> <code>ERROR</code>: An error occurred when setting up the application. See <code>StatusReason</code> for more information.</p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the application.</p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"ApplicationStatusReason",
+          "documentation":"<p>A short description of the status reason when the application is in <code>ERROR</code> status.</p>"
+        },
+        "ReplicationStatuses":{
+          "shape":"ReplicationStatuses",
+          "documentation":"<p>A set of replication statuses for each location.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "AssociatedStreamGroups":{
+          "shape":"ArnList",
+          "documentation":"<p>A newly created application is not associated to any stream groups. This value is empty.</p>"
+        }
+      }
+    },
+    "CreateStreamGroupInput":{
+      "type":"structure",
+      "required":[
+        "Description",
+        "StreamClass"
+      ],
+      "members":{
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "StreamClass":{
+          "shape":"StreamClass",
+          "documentation":"<p>The target stream quality for sessions that are hosted in this stream group. Set a stream class that is appropriate to the type of content that you're streaming. Stream class determines the type of computing resources Amazon GameLift Streams uses and impacts the cost of streaming. The following options are available: </p> <p>A stream class can be one of the following:</p> <ul> <li> <p> <b> <code>gen5n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 12 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_ultra</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Uses dedicated NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 8 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_ultra</code> (NVIDIA, ultra)</b> Supports applications with high 3D scene complexity. Uses dedicated NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> </ul>"
+        },
+        "DefaultApplicationIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The unique identifier of the Amazon GameLift Streams application that you want to set as the default application in a stream group. The application that you specify must be in <code>READY</code> status. The default application is pre-cached on always-on compute resources, reducing stream startup times. Other applications are automatically cached as needed.</p> <p>If you do not link an application when you create a stream group, you will need to link one later, before you can start streaming, using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_AssociateApplications.html\">AssociateApplications</a>.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        },
+        "LocationConfigurations":{
+          "shape":"LocationConfigurations",
+          "documentation":"<p> A set of one or more locations and the streaming capacity for each location. </p>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of labels to assign to the new stream group resource. Tags are developer-defined key-value pairs. Tagging Amazon Web Services resources is useful for resource management, access management and cost allocation. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\"> Tagging Amazon Web Services Resources</a> in the <i>Amazon Web Services General Reference</i>. You can use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TagResource.html\">TagResource</a> to add tags, <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_UntagResource.html\">UntagResource</a> to remove tags, and <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ListTagsForResource.html\">ListTagsForResource</a> to view tags on existing resources.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique identifier that represents a client request. The request is idempotent, which ensures that an API request completes only once. When users send a request, Amazon GameLift Streams automatically populates this field. </p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateStreamGroupOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that is assigned to the stream group resource and that uniquely identifies the group across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:streamgroup/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "DefaultApplication":{
+          "shape":"DefaultApplication",
+          "documentation":"<p>The default Amazon GameLift Streams application that is associated with this stream group.</p>"
+        },
+        "LocationStates":{
+          "shape":"LocationStates",
+          "documentation":"<p>This value is the set of locations, including their name, current status, and capacities. </p> <p>A location can be in one of the following states:</p> <ul> <li> <p> <code>ACTIVATING</code>: Amazon GameLift Streams is preparing the location. You cannot stream from, scale the capacity of, or remove this location yet.</p> </li> <li> <p> <code>ACTIVE</code>: The location is provisioned with initial capacity. You can now stream from, scale the capacity of, or remove this location.</p> </li> <li> <p> <code>ERROR</code>: Amazon GameLift Streams failed to set up this location. The <code>StatusReason</code> field describes the error. You can remove this location and try to add it again.</p> </li> <li> <p> <code>REMOVING</code>: Amazon GameLift Streams is working to remove this location. This will release all provisioned capacity for this location in this stream group.</p> </li> </ul>"
+        },
+        "StreamClass":{
+          "shape":"StreamClass",
+          "documentation":"<p>The target stream quality for the stream group.</p> <p>A stream class can be one of the following:</p> <ul> <li> <p> <b> <code>gen5n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 12 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_ultra</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Uses dedicated NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 8 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_ultra</code> (NVIDIA, ultra)</b> Supports applications with high 3D scene complexity. Uses dedicated NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> </ul>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>sg-1AB2C3De4</code>.</p>"
+        },
+        "Status":{
+          "shape":"StreamGroupStatus",
+          "documentation":"<p>The current status of the stream group resource. Possible statuses include the following:</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream group is deploying and isn't ready to host streams. </p> </li> <li> <p> <code>ACTIVE</code>: The stream group is ready to host streams. </p> </li> <li> <p> <code>ACTIVE_WITH_ERRORS</code>: One or more locations in the stream group are in an error state. Verify the details of individual locations and remove any locations which are in error. </p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the stream group. </p> </li> <li> <p> <code>ERROR</code>: An error occurred when the stream group deployed. See <code>StatusReason</code> (returned by <code>CreateStreamGroup</code>, <code>GetStreamGroup</code>, and <code>UpdateStreamGroup</code>) for more information. </p> </li> <li> <p> <code>EXPIRED</code>: The stream group is expired and can no longer host streams. This typically occurs when a stream group is 365 days old, as indicated by the value of <code>ExpiresAt</code>. Create a new stream group to resume streaming capabilities. </p> </li> <li> <p> <code>UPDATING_LOCATIONS</code>: One or more locations in the stream group are in the process of updating (either activating or deleting). </p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"StreamGroupStatusReason",
+          "documentation":"<p> A short description of the reason that the stream group is in <code>ERROR</code> status. The possible reasons can be one of the following: </p> <ul> <li> <p> <code>internalError</code>: The request can't process right now because of an issue with the server. Try again later.</p> </li> <li> <p> <code>noAvailableInstances</code>: Amazon GameLift Streams does not currently have enough available on-demand capacity to fulfill your request. Wait a few minutes and retry the request as capacity can shift frequently. You can also try to make the request using a different stream class or in another region.</p> </li> </ul>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ExpiresAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which this stream group expires. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC). After this time, you will no longer be able to update this stream group or use it to start stream sessions. Only Get and Delete operations will work on an expired stream group.</p>"
+        },
+        "AssociatedApplications":{
+          "shape":"ArnList",
+          "documentation":"<p> A set of applications that this stream group is associated to. You can stream any of these applications by using this stream group. </p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "CreateStreamSessionConnectionInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "StreamSessionIdentifier",
+        "SignalRequest"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique identifier that represents a client request. The request is idempotent, which ensures that an API request completes only once. When users send a request, Amazon GameLift Streams automatically populates this field. </p>",
+          "idempotencyToken":true
+        },
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p> <p> The stream group that you want to run this stream session with. The stream group must be in <code>ACTIVE</code> status. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "StreamSessionIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream session resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamsession/sg-1AB2C3De4/ABC123def4567</code>. Example ID: <code>ABC123def4567</code>. </p> <p> The stream session must be in <code>PENDING_CLIENT_RECONNECTION</code> or <code>ACTIVE</code> status. </p>",
+          "location":"uri",
+          "locationName":"StreamSessionIdentifier"
+        },
+        "SignalRequest":{
+          "shape":"SignalRequest",
+          "documentation":"<p>A WebRTC ICE offer string to use when initializing a WebRTC connection. The offer is a very long JSON string. Provide the string as a text value in quotes. The offer must be newly generated, not the same offer provided to <code>StartStreamSession</code>. </p>"
+        }
+      }
+    },
+    "CreateStreamSessionConnectionOutput":{
+      "type":"structure",
+      "members":{
+        "SignalResponse":{
+          "shape":"SignalResponse",
+          "documentation":"<p>The WebRTC answer string that the stream server generates in response to the <code>SignalRequest</code>. </p>"
+        }
+      }
+    },
+    "DefaultApplication":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>An ID that uniquely identifies the application resource. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        },
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      },
+      "documentation":"<p>Represents the default Amazon GameLift Streams application that a stream group hosts.</p>"
+    },
+    "DeleteApplicationInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteStreamGroupInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "Description":{
+      "type":"string",
+      "max":80,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-_.!+@/][a-zA-Z0-9-_.!+@/ ]*"
+    },
+    "DisassociateApplicationsInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "ApplicationIdentifiers"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>A stream group to disassociate these applications from.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "ApplicationIdentifiers":{
+          "shape":"Identifiers",
+          "documentation":"<p>A set of applications that you want to disassociate from the stream group.</p> <p>This value is a set of either <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARN)</a> or IDs that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "DisassociateApplicationsOutput":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. </p>"
+        },
+        "ApplicationArns":{
+          "shape":"ArnList",
+          "documentation":"<p>A set of applications that are disassociated from this stream group.</p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "EnvironmentVariables":{
+      "type":"map",
+      "key":{"shape":"EnvironmentVariablesKeyString"},
+      "value":{"shape":"EnvironmentVariablesValueString"},
+      "max":50,
+      "min":0
+    },
+    "EnvironmentVariablesKeyString":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[_a-zA-Z][_a-zA-Z0-9]*"
+    },
+    "EnvironmentVariablesValueString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ExecutablePath":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "ExportFilesMetadata":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"ExportFilesStatus",
+          "documentation":"<p>The result of the <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_ExportStreamSessionFiles.html\">ExportStreamSessionFiles</a> operation.</p>"
+        },
+        "StatusReason":{
+          "shape":"ExportFilesReason",
+          "documentation":"<p>A short description of the reason the export is in <code>FAILED</code> status.</p>"
+        },
+        "OutputUri":{
+          "shape":"OutputUri",
+          "documentation":"<p> The S3 bucket URI where Amazon GameLift Streams uploaded the set of compressed exported files for a stream session. Amazon GameLift Streams generates a ZIP file name based on the stream session metadata. Alternatively, you can provide a custom file name with a <code>.zip</code> file extension.</p> <p> Example 1: If you provide an S3 URI called <code>s3://amzn-s3-demo-destination-bucket/MyGame_Session1.zip</code>, then Amazon GameLift Streams will save the files at that location. </p> <p> Example 2: If you provide an S3 URI called <code>s3://amzn-s3-demo-destination-bucket/MyGameSessions_ExportedFiles/</code>, then Amazon GameLift Streams will save the files at <code>s3://amzn-s3-demo-destination-bucket/MyGameSessions_ExportedFiles/YYYYMMDD-HHMMSS-appId-sg-Id-sessionId.zip</code> or another similar name. </p>"
+        }
+      },
+      "documentation":"<p>Provides details about the stream session's exported files. </p>"
+    },
+    "ExportFilesReason":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ExportFilesStatus":{
+      "type":"string",
+      "enum":[
+        "SUCCEEDED",
+        "FAILED",
+        "PENDING"
+      ]
+    },
+    "ExportStreamSessionFilesInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "StreamSessionIdentifier",
+        "OutputUri"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "StreamSessionIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream session resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamsession/sg-1AB2C3De4/ABC123def4567</code>. Example ID: <code>ABC123def4567</code>. </p>",
+          "location":"uri",
+          "locationName":"StreamSessionIdentifier"
+        },
+        "OutputUri":{
+          "shape":"OutputUri",
+          "documentation":"<p> The S3 bucket URI where Amazon GameLift Streams uploads the set of compressed exported files for this stream session. Amazon GameLift Streams generates a ZIP file name based on the stream session metadata. Alternatively, you can provide a custom file name with a <code>.zip</code> file extension.</p> <p> Example 1: If you provide an S3 URI called <code>s3://amzn-s3-demo-destination-bucket/MyGame_Session1.zip</code>, then Amazon GameLift Streams will save the files at that location. </p> <p> Example 2: If you provide an S3 URI called <code>s3://amzn-s3-demo-destination-bucket/MyGameSessions_ExportedFiles/</code>, then Amazon GameLift Streams will save the files at <code>s3://amzn-s3-demo-destination-bucket/MyGameSessions_ExportedFiles/YYYYMMDD-HHMMSS-appId-sg-Id-sessionId.zip</code> or another similar name. </p>"
+        }
+      }
+    },
+    "ExportStreamSessionFilesOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "FileLocationUri":{"type":"string"},
+    "FilePath":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "FilePaths":{
+      "type":"list",
+      "member":{"shape":"FilePath"},
+      "max":10,
+      "min":0
+    },
+    "GameLaunchArgList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":100,
+      "min":0
+    },
+    "GetApplicationInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetApplicationOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that's assigned to an application resource and uniquely identifies it across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:application/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application. You can edit this value. </p>"
+        },
+        "RuntimeEnvironment":{
+          "shape":"RuntimeEnvironment",
+          "documentation":"<p> Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers. </p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+        },
+        "ExecutablePath":{
+          "shape":"ExecutablePath",
+          "documentation":"<p>The relative path and file name of the executable file that launches the content for streaming.</p>"
+        },
+        "ApplicationLogPaths":{
+          "shape":"FilePaths",
+          "documentation":"<p>Locations of log files that your content generates during a stream session. Amazon GameLift Streams uploads log files to the Amazon S3 bucket that you specify in <code>ApplicationLogOutputUri</code> at the end of a stream session. To retrieve stored log files, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a> and get the <code>LogFileLocationUri</code>.</p>"
+        },
+        "ApplicationLogOutputUri":{
+          "shape":"ApplicationLogOutputUri",
+          "documentation":"<p>An Amazon S3 URI to a bucket where you would like Amazon GameLift Streams to save application logs. Required if you specify one or more <code>ApplicationLogPaths</code>.</p>"
+        },
+        "ApplicationSourceUri":{
+          "shape":"ApplicationSourceUri",
+          "documentation":"<p>The original Amazon S3 location of uploaded stream content for the application.</p>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>a-9ZY8X7Wv6</code>.</p>"
+        },
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>The current status of the application resource. Possible statuses include the following:</p> <ul> <li> <p> <code>INITIALIZED</code>: Amazon GameLift Streams has received the request and is initiating the work flow to create an application. </p> </li> <li> <p> <code>PROCESSING</code>: The create application work flow is in process. Amazon GameLift Streams is copying the content and caching for future deployment in a stream group.</p> </li> <li> <p> <code>READY</code>: The application is ready to deploy in a stream group.</p> </li> <li> <p> <code>ERROR</code>: An error occurred when setting up the application. See <code>StatusReason</code> for more information.</p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the application.</p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"ApplicationStatusReason",
+          "documentation":"<p>A short description of the status reason when the application is in <code>ERROR</code> status.</p>"
+        },
+        "ReplicationStatuses":{
+          "shape":"ReplicationStatuses",
+          "documentation":"<p>A set of replication statuses for each location.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "AssociatedStreamGroups":{
+          "shape":"ArnList",
+          "documentation":"<p> A set of stream groups that this application is associated with. You can use any of these stream groups to stream your application. </p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify stream group resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. </p>"
+        }
+      }
+    },
+    "GetStreamGroupInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetStreamGroupOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that is assigned to the stream group resource and that uniquely identifies the group across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:streamgroup/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "DefaultApplication":{
+          "shape":"DefaultApplication",
+          "documentation":"<p>The default Amazon GameLift Streams application that is associated with this stream group.</p>"
+        },
+        "LocationStates":{
+          "shape":"LocationStates",
+          "documentation":"<p>This value is the set of locations, including their name, current status, and capacities. </p> <p>A location can be in one of the following states:</p> <ul> <li> <p> <code>ACTIVATING</code>: Amazon GameLift Streams is preparing the location. You cannot stream from, scale the capacity of, or remove this location yet.</p> </li> <li> <p> <code>ACTIVE</code>: The location is provisioned with initial capacity. You can now stream from, scale the capacity of, or remove this location.</p> </li> <li> <p> <code>ERROR</code>: Amazon GameLift Streams failed to set up this location. The <code>StatusReason</code> field describes the error. You can remove this location and try to add it again.</p> </li> <li> <p> <code>REMOVING</code>: Amazon GameLift Streams is working to remove this location. This will release all provisioned capacity for this location in this stream group.</p> </li> </ul>"
+        },
+        "StreamClass":{
+          "shape":"StreamClass",
+          "documentation":"<p>The target stream quality for the stream group.</p> <p>A stream class can be one of the following:</p> <ul> <li> <p> <b> <code>gen5n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 12 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_ultra</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Uses dedicated NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 8 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_ultra</code> (NVIDIA, ultra)</b> Supports applications with high 3D scene complexity. Uses dedicated NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> </ul>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>sg-1AB2C3De4</code>.</p>"
+        },
+        "Status":{
+          "shape":"StreamGroupStatus",
+          "documentation":"<p>The current status of the stream group resource. Possible statuses include the following:</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream group is deploying and isn't ready to host streams. </p> </li> <li> <p> <code>ACTIVE</code>: The stream group is ready to host streams. </p> </li> <li> <p> <code>ACTIVE_WITH_ERRORS</code>: One or more locations in the stream group are in an error state. Verify the details of individual locations and remove any locations which are in error. </p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the stream group. </p> </li> <li> <p> <code>ERROR</code>: An error occurred when the stream group deployed. See <code>StatusReason</code> (returned by <code>CreateStreamGroup</code>, <code>GetStreamGroup</code>, and <code>UpdateStreamGroup</code>) for more information. </p> </li> <li> <p> <code>EXPIRED</code>: The stream group is expired and can no longer host streams. This typically occurs when a stream group is 365 days old, as indicated by the value of <code>ExpiresAt</code>. Create a new stream group to resume streaming capabilities. </p> </li> <li> <p> <code>UPDATING_LOCATIONS</code>: One or more locations in the stream group are in the process of updating (either activating or deleting). </p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"StreamGroupStatusReason",
+          "documentation":"<p> A short description of the reason that the stream group is in <code>ERROR</code> status. The possible reasons can be one of the following: </p> <ul> <li> <p> <code>internalError</code>: The request can't process right now because of an issue with the server. Try again later.</p> </li> <li> <p> <code>noAvailableInstances</code>: Amazon GameLift Streams does not currently have enough available on-demand capacity to fulfill your request. Wait a few minutes and retry the request as capacity can shift frequently. You can also try to make the request using a different stream class or in another region.</p> </li> </ul>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ExpiresAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which this stream group expires. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC). After this time, you will no longer be able to update this stream group or use it to start stream sessions. Only Get and Delete operations will work on an expired stream group.</p>"
+        },
+        "AssociatedApplications":{
+          "shape":"ArnList",
+          "documentation":"<p> A set of applications that this stream group is associated to. You can stream any of these applications by using this stream group. </p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "GetStreamSessionInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "StreamSessionIdentifier"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The stream group that runs this stream session.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "StreamSessionIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream session resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamsession/sg-1AB2C3De4/ABC123def4567</code>. Example ID: <code>ABC123def4567</code>. </p>",
+          "location":"uri",
+          "locationName":"StreamSessionIdentifier"
+        }
+      }
+    },
+    "GetStreamSessionOutput":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that's assigned to a stream session resource. When combined with the stream group resource ID, this value uniquely identifies the stream session across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:streamsession/[stream group resource ID]/[stream session resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the stream session. You can update this value at any time.</p>"
+        },
+        "StreamGroupId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier for the Amazon GameLift Streams stream group that is hosting the stream session. Format example: <code>sg-1AB2C3De4</code>.</p>"
+        },
+        "UserId":{
+          "shape":"UserId",
+          "documentation":"<p> An opaque, unique identifier for an end-user, defined by the developer. </p>"
+        },
+        "Status":{
+          "shape":"StreamSessionStatus",
+          "documentation":"<p>The current status of the stream session. A stream session is ready for a client to connect when in <code>ACTIVE</code> status.</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream session is starting and preparing to stream.</p> </li> <li> <p> <code>ACTIVE</code>: The stream session is ready and waiting for a client connection. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>ACTIVE</code> state to establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>CONNECTED</code>: The stream session has a connected client. A session will automatically terminate if there is no user input for 60 minutes, or if the maximum length of a session specified by <code>SessionLengthSeconds</code> in <code>StartStreamSession</code> is exceeded.</p> </li> <li> <p> <code>ERROR</code>: The stream session failed to activate. See <code>StatusReason</code> (returned by <code>GetStreamSession</code> and <code>StartStreamSession</code>) for more information.</p> </li> <li> <p> <code>PENDING_CLIENT_RECONNECTION</code>: A client has recently disconnected and the stream session is waiting for the client to reconnect. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>PENDING_CLIENT_RECONNECTION</code> state to re-establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>RECONNECTING</code>: A client has initiated a reconnect to a session that was in <code>PENDING_CLIENT_RECONNECTION</code> state.</p> </li> <li> <p> <code>TERMINATING</code>: The stream session is ending.</p> </li> <li> <p> <code>TERMINATED</code>: The stream session has ended.</p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"StreamSessionStatusReason",
+          "documentation":"<p>A short description of the reason the stream session is in <code>ERROR</code> status or <code>TERMINATED</code> status.</p> <p> <code>ERROR</code> status reasons:</p> <ul> <li> <p> <code>applicationLogS3DestinationError</code>: Could not write the application log to the Amazon S3 bucket that is configured for the streaming application. Make sure the bucket still exists.</p> </li> <li> <p> <code>internalError</code>: An internal service error occurred. Start a new stream session to continue streaming.</p> </li> <li> <p> <code>invalidSignalRequest</code>: The WebRTC signal request that was sent is not valid. When starting or reconnecting to a stream session, use <code>generateSignalRequest</code> in the Amazon GameLift Streams Web SDK to generate a new signal request.</p> </li> <li> <p> <code>placementTimeout</code>: Amazon GameLift Streams could not find available stream capacity to start a stream session. Increase the stream capacity in the stream group or wait until capacity becomes available.</p> </li> </ul> <p> <code>TERMINATED</code> status reasons:</p> <ul> <li> <p> <code>apiTerminated</code>: The stream session was terminated by an API call to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html\">TerminateStreamSession</a>.</p> </li> <li> <p> <code>applicationExit</code>: The streaming application exited or crashed. The stream session was terminated because the application is no longer running.</p> </li> <li> <p> <code>connectionTimeout</code>: The stream session was terminated because the client failed to connect within the connection timeout period specified by <code>ConnectionTimeoutSeconds</code>.</p> </li> <li> <p> <code>idleTimeout</code>: The stream session was terminated because it exceeded the idle timeout period of 60 minutes with no user input activity.</p> </li> <li> <p> <code>maxSessionLengthTimeout</code>: The stream session was terminated because it exceeded the maximum session length timeout period specified by <code>SessionLengthSeconds</code>.</p> </li> <li> <p> <code>reconnectionTimeout</code>: The stream session was terminated because the client failed to reconnect within the reconnection timeout period specified by <code>ConnectionTimeoutSeconds</code> after losing connection.</p> </li> </ul>"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The data transfer protocol in use with the stream session.</p>"
+        },
+        "Location":{
+          "shape":"LocationName",
+          "documentation":"<p>The location where Amazon GameLift Streams hosts and streams your application. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "SignalRequest":{
+          "shape":"SignalRequest",
+          "documentation":"<p>The WebRTC ICE offer string that a client generates to initiate a connection to the stream session.</p>"
+        },
+        "SignalResponse":{
+          "shape":"SignalResponse",
+          "documentation":"<p>The WebRTC answer string that the stream server generates in response to the <code>SignalRequest</code>.</p>"
+        },
+        "ConnectionTimeoutSeconds":{
+          "shape":"ConnectionTimeoutSeconds",
+          "documentation":"<p>The length of time that Amazon GameLift Streams should wait for a client to connect or reconnect to the stream session. This time span starts when the stream session reaches <code>ACTIVE</code> or <code>PENDING_CLIENT_RECONNECTION</code> state. If no client connects (or reconnects) before the timeout, Amazon GameLift Streams terminates the stream session.</p>"
+        },
+        "SessionLengthSeconds":{
+          "shape":"SessionLengthSeconds",
+          "documentation":"<p>The maximum duration of a session. Amazon GameLift Streams will automatically terminate a session after this amount of time has elapsed, regardless of any existing client connections.</p>"
+        },
+        "AdditionalLaunchArgs":{
+          "shape":"GameLaunchArgList",
+          "documentation":"<p>A list of CLI arguments that are sent to the streaming server when a stream session launches. You can use this to configure the application or stream session details. You can also provide custom arguments that Amazon GameLift Streams passes to your game client.</p> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        },
+        "AdditionalEnvironmentVariables":{
+          "shape":"EnvironmentVariables",
+          "documentation":"<p>A set of options that you can use to control the stream session runtime environment, expressed as a set of key-value pairs. You can use this to configure the application or stream session details. You can also provide custom environment variables that Amazon GameLift Streams passes to your game client.</p> <note> <p>If you want to debug your application with environment variables, we recommend that you do so in a local environment outside of Amazon GameLift Streams. For more information, refer to the Compatibility Guidance in the troubleshooting section of the Developer Guide.</p> </note> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        },
+        "LogFileLocationUri":{
+          "shape":"FileLocationUri",
+          "documentation":"<p>Access location for log files that your content generates during a stream session. These log files are uploaded to cloud storage location at the end of a stream session. The Amazon GameLift Streams application resource defines which log files to upload.</p>"
+        },
+        "WebSdkProtocolUrl":{
+          "shape":"WebSdkProtocolUrl",
+          "documentation":"<p>The URL of an S3 bucket that stores Amazon GameLift Streams WebSDK files. The URL is used to establish connection with the client.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ApplicationArn":{
+          "shape":"Arn",
+          "documentation":"<p>The application streaming in this session.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        },
+        "ExportFilesMetadata":{
+          "shape":"ExportFilesMetadata",
+          "documentation":"<p>Provides details about the stream session's exported files. </p>"
+        }
+      }
+    },
+    "Id":{
+      "type":"string",
+      "max":32,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-]+"
+    },
+    "Identifier":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"(^[a-zA-Z0-9-]+$)|(^arn:aws:gameliftstreams:([^: ]*):([0-9]{12}):([^: ]*)$)"
+    },
+    "Identifiers":{
+      "type":"list",
+      "member":{"shape":"Identifier"},
+      "max":50,
+      "min":1
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The service encountered an internal error and is unable to complete the request.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "ListApplicationsInput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token that marks the start of the next set of results. Use this token when you retrieve results as sequential pages. To get the first page of results, omit a token value. To get the remaining pages, provide the token returned with the previous result set. </p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of results to return. Use this parameter with <code>NextToken</code> to return results in sequential pages. Default value is <code>25</code>.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListApplicationsOutput":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ApplicationSummaryList",
+          "documentation":"<p>A collection of Amazon GameLift Streams applications that are associated with the Amazon Web Services account in use. Each item includes application metadata and status.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that marks the start of the next sequential page of results. If an operation doesn't return a token, you've reached the end of the list. </p>"
+        }
+      }
+    },
+    "ListStreamGroupsInput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that marks the start of the next set of results. Use this token when you retrieve results as sequential pages. To get the first page of results, omit a token value. To get the remaining pages, provide the token returned with the previous result set. </p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of results to return. Use this parameter with <code>NextToken</code> to return results in sequential pages. Default value is <code>25</code>.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListStreamGroupsOutput":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"StreamGroupSummaryList",
+          "documentation":"<p>A collection of Amazon GameLift Streams stream groups that are associated with the Amazon Web Services account in use. Each item includes stream group metadata and status, but doesn't include capacity information.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that marks the start of the next sequential page of results. If an operation doesn't return a token, you've reached the end of the list. </p>"
+        }
+      }
+    },
+    "ListStreamSessionsByAccountInput":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"StreamSessionStatus",
+          "documentation":"<p>Filter by the stream session status. You can specify one status in each request to retrieve only sessions that are currently in that status.</p>",
+          "location":"querystring",
+          "locationName":"Status"
+        },
+        "ExportFilesStatus":{
+          "shape":"ExportFilesStatus",
+          "documentation":"<p>Filter by the exported files status. You can specify one status in each request to retrieve only sessions that currently have that exported files status.</p>",
+          "location":"querystring",
+          "locationName":"ExportFilesStatus"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token that marks the start of the next set of results. Use this token when you retrieve results as sequential pages. To get the first page of results, omit a token value. To get the remaining pages, provide the token returned with the previous result set. </p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of results to return. Use this parameter with <code>NextToken</code> to return results in sequential pages. Default value is <code>25</code>. </p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListStreamSessionsByAccountOutput":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"StreamSessionSummaryList",
+          "documentation":"<p>A collection of Amazon GameLift Streams stream sessions that are associated with a stream group and returned in response to a list request. Each item includes stream session metadata and status.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that marks the start of the next sequential page of results. If an operation doesn't return a token, you've reached the end of the list. </p>"
+        }
+      }
+    },
+    "ListStreamSessionsInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Status":{
+          "shape":"StreamSessionStatus",
+          "documentation":"<p>Filter by the stream session status. You can specify one status in each request to retrieve only sessions that are currently in that status.</p>",
+          "location":"querystring",
+          "locationName":"Status"
+        },
+        "ExportFilesStatus":{
+          "shape":"ExportFilesStatus",
+          "documentation":"<p>Filter by the exported files status. You can specify one status in each request to retrieve only sessions that currently have that exported files status.</p> <p> Exported files can be in one of the following states: </p> <ul> <li> <p> <code>SUCCEEDED</code>: The exported files are successfully stored in an S3 bucket.</p> </li> <li> <p> <code>FAILED</code>: The session ended but Amazon GameLift Streams couldn't collect and upload the files to S3.</p> </li> <li> <p> <code>PENDING</code>: Either the stream session is still in progress, or uploading the exported files to the S3 bucket is in progress.</p> </li> </ul>",
+          "location":"querystring",
+          "locationName":"ExportFilesStatus"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token that marks the start of the next set of results. Use this token when you retrieve results as sequential pages. To get the first page of results, omit a token value. To get the remaining pages, provide the token returned with the previous result set. </p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The number of results to return. Use this parameter with <code>NextToken</code> to return results in sequential pages. Default value is <code>25</code>. </p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The unique identifier of a Amazon GameLift Streams stream group to retrieve the stream session for. You can use either the stream group ID or the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a>.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "ListStreamSessionsOutput":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"StreamSessionSummaryList",
+          "documentation":"<p>A collection of Amazon GameLift Streams stream sessions that are associated with a stream group and returned in response to a list request. Each item includes stream session metadata and status.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that marks the start of the next sequential page of results. If an operation doesn't return a token, you've reached the end of the list. </p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that you want to retrieve tags for. To get an Amazon GameLift Streams resource ARN, call a List or Get operation for the resource.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>A collection of tags that have been assigned to the specified resource.</p>"
+        }
+      }
+    },
+    "LocationConfiguration":{
+      "type":"structure",
+      "required":["LocationName"],
+      "members":{
+        "LocationName":{
+          "shape":"LocationName",
+          "documentation":"<p> A location's name. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "AlwaysOnCapacity":{
+          "shape":"AlwaysOnCapacity",
+          "documentation":"<p>The streaming capacity that is allocated and ready to handle stream requests without delay. You pay for this capacity whether it's in use or not. Best for quickest time from streaming request to streaming session. Default is 1 (2 for high stream classes) when creating a stream group or adding a location.</p>"
+        },
+        "OnDemandCapacity":{
+          "shape":"OnDemandCapacity",
+          "documentation":"<p>The streaming capacity that Amazon GameLift Streams can allocate in response to stream requests, and then de-allocate when the session has terminated. This offers a cost control measure at the expense of a greater startup time (typically under 5 minutes). Default is 0 when creating a stream group or adding a location.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings that define a stream group's stream capacity for a location. When configuring a location for the first time, you must specify a numeric value for at least one of the two capacity types. To update the capacity for an existing stream group, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_UpdateStreamGroup.html\">UpdateStreamGroup</a>. To add a new location and specify its capacity, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_AddStreamGroupLocations.html\">AddStreamGroupLocations</a>.</p>"
+    },
+    "LocationConfigurations":{
+      "type":"list",
+      "member":{"shape":"LocationConfiguration"},
+      "max":100,
+      "min":1
+    },
+    "LocationList":{
+      "type":"list",
+      "member":{"shape":"LocationName"},
+      "min":1
+    },
+    "LocationName":{
+      "type":"string",
+      "max":20,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-]+"
+    },
+    "LocationState":{
+      "type":"structure",
+      "members":{
+        "LocationName":{
+          "shape":"LocationName",
+          "documentation":"<p> A location's name. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "Status":{
+          "shape":"StreamGroupLocationStatus",
+          "documentation":"<p>This value is set of locations, including their name, current status, and capacities. </p> <p>A location can be in one of the following states:</p> <ul> <li> <p> <code>ACTIVATING</code>: Amazon GameLift Streams is preparing the location. You cannot stream from, scale the capacity of, or remove this location yet.</p> </li> <li> <p> <code>ACTIVE</code>: The location is provisioned with initial capacity. You can now stream from, scale the capacity of, or remove this location.</p> </li> <li> <p> <code>ERROR</code>: Amazon GameLift Streams failed to set up this location. The <code>StatusReason</code> field describes the error. You can remove this location and try to add it again.</p> </li> <li> <p> <code>REMOVING</code>: Amazon GameLift Streams is working to remove this location. This will release all provisioned capacity for this location in this stream group.</p> </li> </ul>"
+        },
+        "AlwaysOnCapacity":{
+          "shape":"AlwaysOnCapacity",
+          "documentation":"<p>The streaming capacity that is allocated and ready to handle stream requests without delay. You pay for this capacity whether it's in use or not. Best for quickest time from streaming request to streaming session. Default is 1 (2 for high stream classes) when creating a stream group or adding a location.</p>"
+        },
+        "OnDemandCapacity":{
+          "shape":"OnDemandCapacity",
+          "documentation":"<p>The streaming capacity that Amazon GameLift Streams can allocate in response to stream requests, and then de-allocate when the session has terminated. This offers a cost control measure at the expense of a greater startup time (typically under 5 minutes). Default is 0 when creating a stream group or adding a location.</p>"
+        },
+        "RequestedCapacity":{
+          "shape":"CapacityValue",
+          "documentation":"<p>This value is the always-on capacity that you most recently requested for a stream group. You request capacity separately for each location in a stream group. In response to an increase in requested capacity, Amazon GameLift Streams attempts to provision compute resources to make the stream group's allocated capacity meet requested capacity. When always-on capacity is decreased, it can take a few minutes to deprovision allocated capacity to match the requested capacity.</p>"
+        },
+        "AllocatedCapacity":{
+          "shape":"CapacityValue",
+          "documentation":"<p>This value is the stream capacity that Amazon GameLift Streams has provisioned in a stream group that can respond immediately to stream requests. It includes resources that are currently streaming and resources that are idle and ready to respond to stream requests. You pay for this capacity whether it's in use or not. After making changes to capacity, it can take a few minutes for the allocated capacity count to reflect the change while compute resources are allocated or deallocated. Similarly, when allocated on-demand capacity is no longer needed, it can take a few minutes for Amazon GameLift Streams to spin down the allocated capacity.</p>"
+        },
+        "IdleCapacity":{
+          "shape":"CapacityValue",
+          "documentation":"<p>This value is the amount of allocated capacity that is not currently streaming. It represents the stream group's ability to respond immediately to new stream requests with near-instant startup time.</p>"
+        }
+      },
+      "documentation":"<p>Represents a location and its corresponding stream capacity and status.</p>"
+    },
+    "LocationStates":{
+      "type":"list",
+      "member":{"shape":"LocationState"}
+    },
+    "LocationsList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":100,
+      "min":1
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "NextToken":{"type":"string"},
+    "OnDemandCapacity":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "OutputUri":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"s3://.*(/|\\.zip|\\.ZIP)"
+    },
+    "Protocol":{
+      "type":"string",
+      "enum":["WebRTC"]
+    },
+    "RemoveStreamGroupLocationsInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "Locations"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p> A stream group to remove the specified locations from. </p> <p> This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Locations":{
+          "shape":"LocationsList",
+          "documentation":"<p> A set of locations to remove this stream group. For example, <code>us-east-1</code>.</p> <p> For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>",
+          "location":"querystring",
+          "locationName":"locations"
+        }
+      }
+    },
+    "ReplicationStatus":{
+      "type":"structure",
+      "members":{
+        "Location":{
+          "shape":"LocationName",
+          "documentation":"<p> A location's name. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "Status":{
+          "shape":"ReplicationStatusType",
+          "documentation":"<p>The current status of the replication process.</p>"
+        }
+      },
+      "documentation":"<p>Represents the status of the replication of an application to a location. An application cannot be streamed from a location until it has finished replicating there.</p>"
+    },
+    "ReplicationStatusType":{
+      "type":"string",
+      "enum":[
+        "REPLICATING",
+        "COMPLETED"
+      ]
+    },
+    "ReplicationStatuses":{
+      "type":"list",
+      "member":{"shape":"ReplicationStatus"}
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The resource specified in the request was not found. Correct the request before you try again.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "RuntimeEnvironment":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Version"
+      ],
+      "members":{
+        "Type":{
+          "shape":"RuntimeEnvironmentType",
+          "documentation":"<p>The operating system and other drivers. For Proton, this also includes the Proton compatibility layer.</p>"
+        },
+        "Version":{
+          "shape":"RuntimeEnvironmentVersion",
+          "documentation":"<p>Versioned container environment for the application operating system.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers.</p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+    },
+    "RuntimeEnvironmentType":{
+      "type":"string",
+      "enum":[
+        "PROTON",
+        "WINDOWS",
+        "UBUNTU"
+      ]
+    },
+    "RuntimeEnvironmentVersion":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The request would cause the resource to exceed an allowed service quota. Resolve the issue before you try again.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "SessionLengthSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":86400,
+      "min":1
+    },
+    "SignalRequest":{
+      "type":"string",
+      "min":1,
+      "sensitive":true
+    },
+    "SignalResponse":{
+      "type":"string",
+      "sensitive":true
+    },
+    "StartStreamSessionInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "Protocol",
+        "SignalRequest",
+        "ApplicationIdentifier"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique identifier that represents a client request. The request is idempotent, which ensures that an API request completes only once. When users send a request, Amazon GameLift Streams automatically populates this field. </p>",
+          "idempotencyToken":true
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the stream session. You can update this value later.</p>"
+        },
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The stream group to run this stream session with.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The data transport protocol to use for the stream session.</p>"
+        },
+        "SignalRequest":{
+          "shape":"SignalRequest",
+          "documentation":"<p>A WebRTC ICE offer string to use when initializing a WebRTC connection. Typically, the offer is a very long JSON string. Provide the string as a text value in quotes.</p> <p>Amazon GameLift Streams also supports setting the field to \"NO_CLIENT_CONNECTION\". This will create a session without needing any browser request or Web SDK integration. The session starts up as usual and waits for a reconnection from a browser, which is accomplished using <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_CreateStreamSessionConnection.html\">CreateStreamSessionConnection</a>.</p>"
+        },
+        "ApplicationIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        },
+        "UserId":{
+          "shape":"UserId",
+          "documentation":"<p> An opaque, unique identifier for an end-user, defined by the developer. </p>"
+        },
+        "Locations":{
+          "shape":"LocationList",
+          "documentation":"<p> A list of locations, in order of priority, where you want Amazon GameLift Streams to start a stream from. For example, <code>us-east-1</code>. Amazon GameLift Streams selects the location with the next available capacity to start a single stream session in. If this value is empty, Amazon GameLift Streams attempts to start a stream session in the primary location. </p> <p> For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "ConnectionTimeoutSeconds":{
+          "shape":"ConnectionTimeoutSeconds",
+          "documentation":"<p>Length of time (in seconds) that Amazon GameLift Streams should wait for a client to connect or reconnect to the stream session. Applies to both connection and reconnection scenarios. This time span starts when the stream session reaches <code>ACTIVE</code> state. If no client connects before the timeout, Amazon GameLift Streams terminates the stream session. Default value is 120.</p>"
+        },
+        "SessionLengthSeconds":{
+          "shape":"SessionLengthSeconds",
+          "documentation":"<p>The maximum duration of a session. Amazon GameLift Streams will automatically terminate a session after this amount of time has elapsed, regardless of any existing client connections. Default value is 43200 (12 hours).</p>"
+        },
+        "AdditionalLaunchArgs":{
+          "shape":"GameLaunchArgList",
+          "documentation":"<p>A list of CLI arguments that are sent to the streaming server when a stream session launches. You can use this to configure the application or stream session details. You can also provide custom arguments that Amazon GameLift Streams passes to your game client.</p> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        },
+        "AdditionalEnvironmentVariables":{
+          "shape":"EnvironmentVariables",
+          "documentation":"<p>A set of options that you can use to control the stream session runtime environment, expressed as a set of key-value pairs. You can use this to configure the application or stream session details. You can also provide custom environment variables that Amazon GameLift Streams passes to your game client.</p> <note> <p>If you want to debug your application with environment variables, we recommend that you do so in a local environment outside of Amazon GameLift Streams. For more information, refer to the Compatibility Guidance in the troubleshooting section of the Developer Guide.</p> </note> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        }
+      }
+    },
+    "StartStreamSessionOutput":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that's assigned to a stream session resource. When combined with the stream group resource ID, this value uniquely identifies the stream session across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:streamsession/[stream group resource ID]/[stream session resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the stream session. You can update this value at any time.</p>"
+        },
+        "StreamGroupId":{
+          "shape":"Id",
+          "documentation":"<p>The unique identifier for the Amazon GameLift Streams stream group that is hosting the stream session. Format example: <code>sg-1AB2C3De4</code>.</p>"
+        },
+        "UserId":{
+          "shape":"UserId",
+          "documentation":"<p> An opaque, unique identifier for an end-user, defined by the developer. </p>"
+        },
+        "Status":{
+          "shape":"StreamSessionStatus",
+          "documentation":"<p>The current status of the stream session. A stream session is ready for a client to connect when in <code>ACTIVE</code> status.</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream session is starting and preparing to stream.</p> </li> <li> <p> <code>ACTIVE</code>: The stream session is ready and waiting for a client connection. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>ACTIVE</code> state to establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>CONNECTED</code>: The stream session has a connected client. A session will automatically terminate if there is no user input for 60 minutes, or if the maximum length of a session specified by <code>SessionLengthSeconds</code> in <code>StartStreamSession</code> is exceeded.</p> </li> <li> <p> <code>ERROR</code>: The stream session failed to activate. See <code>StatusReason</code> (returned by <code>GetStreamSession</code> and <code>StartStreamSession</code>) for more information.</p> </li> <li> <p> <code>PENDING_CLIENT_RECONNECTION</code>: A client has recently disconnected and the stream session is waiting for the client to reconnect. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>PENDING_CLIENT_RECONNECTION</code> state to re-establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>RECONNECTING</code>: A client has initiated a reconnect to a session that was in <code>PENDING_CLIENT_RECONNECTION</code> state.</p> </li> <li> <p> <code>TERMINATING</code>: The stream session is ending.</p> </li> <li> <p> <code>TERMINATED</code>: The stream session has ended.</p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"StreamSessionStatusReason",
+          "documentation":"<p>A short description of the reason the stream session is in <code>ERROR</code> status or <code>TERMINATED</code> status.</p> <p> <code>ERROR</code> status reasons:</p> <ul> <li> <p> <code>applicationLogS3DestinationError</code>: Could not write the application log to the Amazon S3 bucket that is configured for the streaming application. Make sure the bucket still exists.</p> </li> <li> <p> <code>internalError</code>: An internal service error occurred. Start a new stream session to continue streaming.</p> </li> <li> <p> <code>invalidSignalRequest</code>: The WebRTC signal request that was sent is not valid. When starting or reconnecting to a stream session, use <code>generateSignalRequest</code> in the Amazon GameLift Streams Web SDK to generate a new signal request.</p> </li> <li> <p> <code>placementTimeout</code>: Amazon GameLift Streams could not find available stream capacity to start a stream session. Increase the stream capacity in the stream group or wait until capacity becomes available.</p> </li> </ul> <p> <code>TERMINATED</code> status reasons:</p> <ul> <li> <p> <code>apiTerminated</code>: The stream session was terminated by an API call to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_TerminateStreamSession.html\">TerminateStreamSession</a>.</p> </li> <li> <p> <code>applicationExit</code>: The streaming application exited or crashed. The stream session was terminated because the application is no longer running.</p> </li> <li> <p> <code>connectionTimeout</code>: The stream session was terminated because the client failed to connect within the connection timeout period specified by <code>ConnectionTimeoutSeconds</code>.</p> </li> <li> <p> <code>idleTimeout</code>: The stream session was terminated because it exceeded the idle timeout period of 60 minutes with no user input activity.</p> </li> <li> <p> <code>maxSessionLengthTimeout</code>: The stream session was terminated because it exceeded the maximum session length timeout period specified by <code>SessionLengthSeconds</code>.</p> </li> <li> <p> <code>reconnectionTimeout</code>: The stream session was terminated because the client failed to reconnect within the reconnection timeout period specified by <code>ConnectionTimeoutSeconds</code> after losing connection.</p> </li> </ul>"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The data transfer protocol in use with the stream session.</p>"
+        },
+        "Location":{
+          "shape":"LocationName",
+          "documentation":"<p>The location where Amazon GameLift Streams hosts and streams your application. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        },
+        "SignalRequest":{
+          "shape":"SignalRequest",
+          "documentation":"<p>The WebRTC ICE offer string that a client generates to initiate a connection to the stream session.</p>"
+        },
+        "SignalResponse":{
+          "shape":"SignalResponse",
+          "documentation":"<p>The WebRTC answer string that the stream server generates in response to the <code>SignalRequest</code>.</p>"
+        },
+        "ConnectionTimeoutSeconds":{
+          "shape":"ConnectionTimeoutSeconds",
+          "documentation":"<p>The length of time that Amazon GameLift Streams should wait for a client to connect or reconnect to the stream session. This time span starts when the stream session reaches <code>ACTIVE</code> or <code>PENDING_CLIENT_RECONNECTION</code> state. If no client connects (or reconnects) before the timeout, Amazon GameLift Streams terminates the stream session.</p>"
+        },
+        "SessionLengthSeconds":{
+          "shape":"SessionLengthSeconds",
+          "documentation":"<p>The maximum duration of a session. Amazon GameLift Streams will automatically terminate a session after this amount of time has elapsed, regardless of any existing client connections.</p>"
+        },
+        "AdditionalLaunchArgs":{
+          "shape":"GameLaunchArgList",
+          "documentation":"<p>A list of CLI arguments that are sent to the streaming server when a stream session launches. You can use this to configure the application or stream session details. You can also provide custom arguments that Amazon GameLift Streams passes to your game client.</p> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        },
+        "AdditionalEnvironmentVariables":{
+          "shape":"EnvironmentVariables",
+          "documentation":"<p>A set of options that you can use to control the stream session runtime environment, expressed as a set of key-value pairs. You can use this to configure the application or stream session details. You can also provide custom environment variables that Amazon GameLift Streams passes to your game client.</p> <note> <p>If you want to debug your application with environment variables, we recommend that you do so in a local environment outside of Amazon GameLift Streams. For more information, refer to the Compatibility Guidance in the troubleshooting section of the Developer Guide.</p> </note> <p> <code>AdditionalEnvironmentVariables</code> and <code>AdditionalLaunchArgs</code> have similar purposes. <code>AdditionalEnvironmentVariables</code> passes data using environment variables; while <code>AdditionalLaunchArgs</code> passes data using command-line arguments.</p>"
+        },
+        "LogFileLocationUri":{
+          "shape":"FileLocationUri",
+          "documentation":"<p>Access location for log files that your content generates during a stream session. These log files are uploaded to cloud storage location at the end of a stream session. The Amazon GameLift Streams application resource defines which log files to upload.</p>"
+        },
+        "WebSdkProtocolUrl":{
+          "shape":"WebSdkProtocolUrl",
+          "documentation":"<p>The URL of an S3 bucket that stores Amazon GameLift Streams WebSDK files. The URL is used to establish connection with the client.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ApplicationArn":{
+          "shape":"Arn",
+          "documentation":"<p>The application streaming in this session.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        },
+        "ExportFilesMetadata":{
+          "shape":"ExportFilesMetadata",
+          "documentation":"<p>Provides details about the stream session's exported files. </p>"
+        }
+      }
+    },
+    "StreamClass":{
+      "type":"string",
+      "enum":[
+        "gen4n_high",
+        "gen4n_ultra",
+        "gen4n_win2022",
+        "gen5n_high",
+        "gen5n_ultra",
+        "gen5n_win2022"
+      ]
+    },
+    "StreamGroupLocationStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVATING",
+        "ACTIVE",
+        "ERROR",
+        "REMOVING"
+      ]
+    },
+    "StreamGroupStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVATING",
+        "UPDATING_LOCATIONS",
+        "ACTIVE",
+        "ACTIVE_WITH_ERRORS",
+        "ERROR",
+        "DELETING",
+        "EXPIRED"
+      ]
+    },
+    "StreamGroupStatusReason":{
+      "type":"string",
+      "enum":[
+        "internalError",
+        "noAvailableInstances"
+      ]
+    },
+    "StreamGroupSummary":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. </p>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>An ID that uniquely identifies the stream group resource. Example ID: <code>sg-1AB2C3De4</code>. </p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "DefaultApplication":{
+          "shape":"DefaultApplication",
+          "documentation":"<p>Object that identifies the Amazon GameLift Streams application to stream with this stream group.</p>"
+        },
+        "StreamClass":{
+          "shape":"StreamClass",
+          "documentation":"<p>The target stream quality for the stream group. </p> <p>A stream class can be one of the following:</p> <ul> <li> <p> <b> <code>gen5n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 12 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_ultra</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Uses dedicated NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 8 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_ultra</code> (NVIDIA, ultra)</b> Supports applications with high 3D scene complexity. Uses dedicated NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> </ul>"
+        },
+        "Status":{
+          "shape":"StreamGroupStatus",
+          "documentation":"<p>The current status of the stream group resource. Possible statuses include the following:</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream group is deploying and isn't ready to host streams. </p> </li> <li> <p> <code>ACTIVE</code>: The stream group is ready to host streams. </p> </li> <li> <p> <code>ACTIVE_WITH_ERRORS</code>: One or more locations in the stream group are in an error state. Verify the details of individual locations and remove any locations which are in error. </p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the stream group. </p> </li> <li> <p> <code>ERROR</code>: An error occurred when the stream group deployed. See <code>StatusReason</code> (returned by <code>CreateStreamGroup</code>, <code>GetStreamGroup</code>, and <code>UpdateStreamGroup</code>) for more information. </p> </li> <li> <p> <code>EXPIRED</code>: The stream group is expired and can no longer host streams. This typically occurs when a stream group is 365 days old, as indicated by the value of <code>ExpiresAt</code>. Create a new stream group to resume streaming capabilities. </p> </li> <li> <p> <code>UPDATING_LOCATIONS</code>: One or more locations in the stream group are in the process of updating (either activating or deleting). </p> </li> </ul>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ExpiresAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which this stream group expires. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC). After this time, you will no longer be able to update this stream group or use it to start stream sessions. Only Get and Delete operations will work on an expired stream group.</p>"
+        }
+      },
+      "documentation":"<p>Describes a Amazon GameLift Streams stream group resource for hosting content streams. To retrieve additional stream group details, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamGroup.html\">GetStreamGroup</a>.</p>"
+    },
+    "StreamGroupSummaryList":{
+      "type":"list",
+      "member":{"shape":"StreamGroupSummary"}
+    },
+    "StreamSessionStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVATING",
+        "ACTIVE",
+        "CONNECTED",
+        "PENDING_CLIENT_RECONNECTION",
+        "RECONNECTING",
+        "TERMINATING",
+        "TERMINATED",
+        "ERROR"
+      ]
+    },
+    "StreamSessionStatusReason":{
+      "type":"string",
+      "enum":[
+        "internalError",
+        "invalidSignalRequest",
+        "placementTimeout",
+        "applicationLogS3DestinationError",
+        "applicationExit",
+        "connectionTimeout",
+        "reconnectionTimeout",
+        "maxSessionLengthTimeout",
+        "idleTimeout",
+        "apiTerminated"
+      ]
+    },
+    "StreamSessionSummary":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the stream session resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamsession/sg-1AB2C3De4/ABC123def4567</code>. </p>"
+        },
+        "UserId":{
+          "shape":"UserId",
+          "documentation":"<p> An opaque, unique identifier for an end-user, defined by the developer. </p>"
+        },
+        "Status":{
+          "shape":"StreamSessionStatus",
+          "documentation":"<p>The current status of the stream session resource.</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream session is starting and preparing to stream.</p> </li> <li> <p> <code>ACTIVE</code>: The stream session is ready and waiting for a client connection. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>ACTIVE</code> state to establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>CONNECTED</code>: The stream session has a connected client. A session will automatically terminate if there is no user input for 60 minutes, or if the maximum length of a session specified by <code>SessionLengthSeconds</code> in <code>StartStreamSession</code> is exceeded.</p> </li> <li> <p> <code>ERROR</code>: The stream session failed to activate. See <code>StatusReason</code> (returned by <code>GetStreamSession</code> and <code>StartStreamSession</code>) for more information.</p> </li> <li> <p> <code>PENDING_CLIENT_RECONNECTION</code>: A client has recently disconnected and the stream session is waiting for the client to reconnect. A client has <code>ConnectionTimeoutSeconds</code> (specified in <code>StartStreamSession</code>) from when the session reaches <code>PENDING_CLIENT_RECONNECTION</code> state to re-establish a connection. If no client connects within this timeframe, the session automatically terminates.</p> </li> <li> <p> <code>RECONNECTING</code>: A client has initiated a reconnect to a session that was in <code>PENDING_CLIENT_RECONNECTION</code> state.</p> </li> <li> <p> <code>TERMINATING</code>: The stream session is ending.</p> </li> <li> <p> <code>TERMINATED</code>: The stream session has ended.</p> </li> </ul>"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The data transfer protocol in use with the stream session.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ApplicationArn":{
+          "shape":"Arn",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        },
+        "ExportFilesMetadata":{
+          "shape":"ExportFilesMetadata",
+          "documentation":"<p>Provides details about the stream session's exported files. </p>"
+        },
+        "Location":{
+          "shape":"LocationName",
+          "documentation":"<p>The location where Amazon GameLift Streams hosts and streams your application. For example, <code>us-east-1</code>. For a complete list of locations that Amazon GameLift Streams supports, refer to <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/regions-quotas.html\">Regions, quotas, and limitations</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p>"
+        }
+      },
+      "documentation":"<p>Describes an Amazon GameLift Streams stream session. To retrieve additional details for the stream session, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a>.</p>"
+    },
+    "StreamSessionSummaryList":{
+      "type":"list",
+      "member":{"shape":"StreamSessionSummary"}
+    },
+    "String":{"type":"string"},
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":50,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "Tags"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> of the Amazon GameLift Streams resource that you want to apply tags to.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of tags, in the form of key-value pairs, to assign to the specified Amazon GameLift Streams resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "Tags":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":50,
+      "min":1
+    },
+    "TerminateStreamSessionInput":{
+      "type":"structure",
+      "required":[
+        "Identifier",
+        "StreamSessionIdentifier"
+      ],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p> <p>The stream group that runs this stream session.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "StreamSessionIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream session resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamsession/sg-1AB2C3De4/ABC123def4567</code>. Example ID: <code>ABC123def4567</code>. </p>",
+          "location":"uri",
+          "locationName":"StreamSessionIdentifier"
+        }
+      }
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The request was denied due to request throttling. Retry the request after the suggested wait time.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":true}
+    },
+    "Timestamp":{"type":"timestamp"},
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "TagKeys"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> of the Amazon GameLift Streams resource that you want to remove tags from.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of tag keys to remove from the specified Amazon GameLift Streams resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateApplicationInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application.</p>"
+        },
+        "ApplicationLogPaths":{
+          "shape":"FilePaths",
+          "documentation":"<p>Locations of log files that your content generates during a stream session. Enter path values that are relative to the <code>ApplicationSourceUri</code> location. You can specify up to 10 log paths. Amazon GameLift Streams uploads designated log files to the Amazon S3 bucket that you specify in <code>ApplicationLogOutputUri</code> at the end of a stream session. To retrieve stored log files, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a> and get the <code>LogFileLocationUri</code>.</p>"
+        },
+        "ApplicationLogOutputUri":{
+          "shape":"ApplicationLogOutputUri",
+          "documentation":"<p>An Amazon S3 URI to a bucket where you would like Amazon GameLift Streams to save application logs. Required if you specify one or more <code>ApplicationLogPaths</code>.</p> <note> <p>The log bucket must have permissions that give Amazon GameLift Streams access to write the log files. For more information, see <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/developerguide/applications.html#application-bucket-permission-template\">Application log bucket permission policy</a> in the <i>Amazon GameLift Streams Developer Guide</i>. </p> </note>"
+        }
+      }
+    },
+    "UpdateApplicationOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that's assigned to an application resource and uniquely identifies it across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:application/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A human-readable label for the application. You can edit this value. </p>"
+        },
+        "RuntimeEnvironment":{
+          "shape":"RuntimeEnvironment",
+          "documentation":"<p> Configuration settings that identify the operating system for an application resource. This can also include a compatibility layer and other drivers. </p> <p>A runtime environment can be one of the following:</p> <ul> <li> <p> For Linux applications </p> <ul> <li> <p> Ubuntu 22.04 LTS (<code>Type=UBUNTU, Version=22_04_LTS</code>) </p> </li> </ul> </li> <li> <p> For Windows applications </p> <ul> <li> <p>Microsoft Windows Server 2022 Base (<code>Type=WINDOWS, Version=2022</code>)</p> </li> <li> <p>Proton 9.0-2 (<code>Type=PROTON, Version=20250516</code>)</p> </li> <li> <p>Proton 8.0-5 (<code>Type=PROTON, Version=20241007</code>)</p> </li> <li> <p>Proton 8.0-2c (<code>Type=PROTON, Version=20230704</code>)</p> </li> </ul> </li> </ul>"
+        },
+        "ExecutablePath":{
+          "shape":"ExecutablePath",
+          "documentation":"<p>The relative path and file name of the executable file that launches the content for streaming.</p>"
+        },
+        "ApplicationLogPaths":{
+          "shape":"FilePaths",
+          "documentation":"<p>Locations of log files that your content generates during a stream session. Amazon GameLift Streams uploads log files to the Amazon S3 bucket that you specify in <code>ApplicationLogOutputUri</code> at the end of a stream session. To retrieve stored log files, call <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_GetStreamSession.html\">GetStreamSession</a> and get the <code>LogFileLocationUri</code>.</p>"
+        },
+        "ApplicationLogOutputUri":{
+          "shape":"ApplicationLogOutputUri",
+          "documentation":"<p>An Amazon S3 URI to a bucket where you would like Amazon GameLift Streams to save application logs. Required if you specify one or more <code>ApplicationLogPaths</code>.</p>"
+        },
+        "ApplicationSourceUri":{
+          "shape":"ApplicationSourceUri",
+          "documentation":"<p>The original Amazon S3 location of uploaded stream content for the application.</p>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>a-9ZY8X7Wv6</code>.</p>"
+        },
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>The current status of the application resource. Possible statuses include the following:</p> <ul> <li> <p> <code>INITIALIZED</code>: Amazon GameLift Streams has received the request and is initiating the work flow to create an application. </p> </li> <li> <p> <code>PROCESSING</code>: The create application work flow is in process. Amazon GameLift Streams is copying the content and caching for future deployment in a stream group.</p> </li> <li> <p> <code>READY</code>: The application is ready to deploy in a stream group.</p> </li> <li> <p> <code>ERROR</code>: An error occurred when setting up the application. See <code>StatusReason</code> for more information.</p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the application.</p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"ApplicationStatusReason",
+          "documentation":"<p>A short description of the status reason when the application is in <code>ERROR</code> status.</p>"
+        },
+        "ReplicationStatuses":{
+          "shape":"ReplicationStatuses",
+          "documentation":"<p>A set of replication statuses for each location.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "AssociatedStreamGroups":{
+          "shape":"ArnList",
+          "documentation":"<p> A set of stream groups that this application is associated with. You can use any of these stream groups to stream your application. </p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify stream group resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. </p>"
+        }
+      }
+    },
+    "UpdateStreamGroupInput":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"Identifier",
+          "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the stream group resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:streamgroup/sg-1AB2C3De4</code>. Example ID: <code>sg-1AB2C3De4</code>. </p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "LocationConfigurations":{
+          "shape":"LocationConfigurations",
+          "documentation":"<p> A set of one or more locations and the streaming capacity for each location. </p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "DefaultApplicationIdentifier":{
+          "shape":"Identifier",
+          "documentation":"<p>The unique identifier of the Amazon GameLift Streams application that you want to set as the default application in a stream group. The application that you specify must be in <code>READY</code> status. The default application is pre-cached on always-on compute resources, reducing stream startup times. Other applications are automatically cached as needed.</p> <p>Note that this parameter only sets the default application in a stream group. To associate a new application to an existing stream group, you must use <a href=\"https://docs.aws.amazon.com/gameliftstreams/latest/apireference/API_AssociateApplications.html\">AssociateApplications</a>.</p> <p>When you switch default applications in a stream group, it can take up to a few hours for the new default application to be pre-cached.</p> <p>This value is an <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> or ID that uniquely identifies the application resource. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. Example ID: <code>a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "UpdateStreamGroupOutput":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"Identifier",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Name (ARN)</a> that is assigned to the stream group resource and that uniquely identifies the group across all Amazon Web Services Regions. Format is <code>arn:aws:gameliftstreams:[AWS Region]:[AWS account]:streamgroup/[resource ID]</code>.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A descriptive label for the stream group.</p>"
+        },
+        "DefaultApplication":{
+          "shape":"DefaultApplication",
+          "documentation":"<p>The default Amazon GameLift Streams application that is associated with this stream group.</p>"
+        },
+        "LocationStates":{
+          "shape":"LocationStates",
+          "documentation":"<p>This value is set of locations, including their name, current status, and capacities. </p> <p>A location can be in one of the following states:</p> <ul> <li> <p> <code>ACTIVATING</code>: Amazon GameLift Streams is preparing the location. You cannot stream from, scale the capacity of, or remove this location yet.</p> </li> <li> <p> <code>ACTIVE</code>: The location is provisioned with initial capacity. You can now stream from, scale the capacity of, or remove this location.</p> </li> <li> <p> <code>ERROR</code>: Amazon GameLift Streams failed to set up this location. The <code>StatusReason</code> field describes the error. You can remove this location and try to add it again.</p> </li> <li> <p> <code>REMOVING</code>: Amazon GameLift Streams is working to remove this location. This will release all provisioned capacity for this location in this stream group.</p> </li> </ul>"
+        },
+        "StreamClass":{
+          "shape":"StreamClass",
+          "documentation":"<p>The target stream quality for the stream group.</p> <p>A stream class can be one of the following:</p> <ul> <li> <p> <b> <code>gen5n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 12 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen5n_ultra</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Uses dedicated NVIDIA A10G Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 24 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_win2022</code> (NVIDIA, ultra)</b> Supports applications with extremely high 3D scene complexity. Runs applications on Microsoft Windows Server 2022 Base and supports DirectX 12. Compatible with Unreal Engine versions up through 5.4, 32 and 64-bit applications, and anti-cheat technology. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_high</code> (NVIDIA, high)</b> Supports applications with moderate to high 3D scene complexity. Uses NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 4 vCPUs, 16 GB RAM, 8 GB VRAM</p> </li> <li> <p>Tenancy: Supports up to 2 concurrent stream sessions</p> </li> </ul> </li> <li> <p> <b> <code>gen4n_ultra</code> (NVIDIA, ultra)</b> Supports applications with high 3D scene complexity. Uses dedicated NVIDIA T4 Tensor GPU.</p> <ul> <li> <p>Reference resolution: 1080p</p> </li> <li> <p>Reference frame rate: 60 fps</p> </li> <li> <p>Workload specifications: 8 vCPUs, 32 GB RAM, 16 GB VRAM</p> </li> <li> <p>Tenancy: Supports 1 concurrent stream session</p> </li> </ul> </li> </ul>"
+        },
+        "Id":{
+          "shape":"Id",
+          "documentation":"<p>A unique ID value that is assigned to the resource when it's created. Format example: <code>sg-1AB2C3De4</code>.</p>"
+        },
+        "Status":{
+          "shape":"StreamGroupStatus",
+          "documentation":"<p>The current status of the stream group resource. Possible statuses include the following:</p> <ul> <li> <p> <code>ACTIVATING</code>: The stream group is deploying and isn't ready to host streams. </p> </li> <li> <p> <code>ACTIVE</code>: The stream group is ready to host streams. </p> </li> <li> <p> <code>ACTIVE_WITH_ERRORS</code>: One or more locations in the stream group are in an error state. Verify the details of individual locations and remove any locations which are in error. </p> </li> <li> <p> <code>DELETING</code>: Amazon GameLift Streams is in the process of deleting the stream group. </p> </li> <li> <p> <code>ERROR</code>: An error occurred when the stream group deployed. See <code>StatusReason</code> (returned by <code>CreateStreamGroup</code>, <code>GetStreamGroup</code>, and <code>UpdateStreamGroup</code>) for more information. </p> </li> <li> <p> <code>EXPIRED</code>: The stream group is expired and can no longer host streams. This typically occurs when a stream group is 365 days old, as indicated by the value of <code>ExpiresAt</code>. Create a new stream group to resume streaming capabilities. </p> </li> <li> <p> <code>UPDATING_LOCATIONS</code>: One or more locations in the stream group are in the process of updating (either activating or deleting). </p> </li> </ul>"
+        },
+        "StatusReason":{
+          "shape":"StreamGroupStatusReason",
+          "documentation":"<p> A short description of the reason that the stream group is in <code>ERROR</code> status. The possible reasons can be one of the following: </p> <ul> <li> <p> <code>internalError</code>: The request can't process right now because of an issue with the server. Try again later.</p> </li> <li> <p> <code>noAvailableInstances</code>: Amazon GameLift Streams does not currently have enough available on-demand capacity to fulfill your request. Wait a few minutes and retry the request as capacity can shift frequently. You can also try to make the request using a different stream class or in another region.</p> </li> </ul>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was last updated. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp that indicates when this resource was created. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC).</p>"
+        },
+        "ExpiresAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which this stream group expires. Timestamps are expressed using in ISO8601 format, such as: <code>2022-12-27T22:29:40+00:00</code> (UTC). After this time, you will no longer be able to update this stream group or use it to start stream sessions. Only Get and Delete operations will work on an expired stream group.</p>"
+        },
+        "AssociatedApplications":{
+          "shape":"ArnList",
+          "documentation":"<p> A set of applications that this stream group is associated with. You can stream any of these applications with the stream group. </p> <p>This value is a set of <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html\">Amazon Resource Names (ARNs)</a> that uniquely identify application resources. Example ARN: <code>arn:aws:gameliftstreams:us-west-2:111122223333:application/a-9ZY8X7Wv6</code>. </p>"
+        }
+      }
+    },
+    "UserId":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"[-_a-zA-Z0-9/=+]*"
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the error.</p>"
+        }
+      },
+      "documentation":"<p>One or more parameter values in the request fail to satisfy the specified constraints. Correct the invalid parameter values before retrying the request.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "WebSdkProtocolUrl":{"type":"string"}
+  },
+  "documentation":"<p><fullname>Amazon GameLift Streams</fullname> <p>Amazon GameLift Streams provides a global cloud solution for content streaming experiences. Use Amazon GameLift Streams tools to upload and configure content for streaming, deploy and scale computing resources to host streams, and manage stream session placement to meet customer demand.</p> <p>This Reference Guide describes the Amazon GameLift Streams service API. You can use the API through the Amazon Web Services SDK, the Command Line Interface (CLI), or by making direct REST calls through HTTPS.</p> <p>See the <i>Amazon GameLift Streams Developer Guide</i> for more information on how Amazon GameLift Streams works and how to work with it.</p></p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/waiters-2.json 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/gameliftstreams/2018-05-10/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/gameliftstreams/2018-05-10/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,88 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "ApplicationDeleted" : {
+      "description" : "Waits until an application is deleted",
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetApplication",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      } ]
+    },
+    "ApplicationReady" : {
+      "description" : "Waits until an application is ready",
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetApplication",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "success",
+        "expected" : "READY"
+      }, {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    },
+    "StreamGroupActive" : {
+      "description" : "Waits until a stream group is active",
+      "delay" : 30,
+      "maxAttempts" : 120,
+      "operation" : "GetStreamGroup",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      }, {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "failure",
+        "expected" : "ACTIVE_WITH_ERRORS"
+      }, {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "failure",
+        "expected" : "DELETING"
+      } ]
+    },
+    "StreamGroupDeleted" : {
+      "description" : "Waits until a stream group is deleted",
+      "delay" : 30,
+      "maxAttempts" : 60,
+      "operation" : "GetStreamGroup",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      } ]
+    },
+    "StreamSessionActive" : {
+      "description" : "Waits until a stream session is active",
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetStreamSession",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/geo-maps/2020-11-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/geo-maps/2020-11-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/geo-maps/2020-11-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-maps/2020-11-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -328,7 +328,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://maps.geo.{Region}.us-gov.{PartitionResult#dnsSuffix}/v2",
+                                        "url": "https://maps.geo.{Region}.{PartitionResult#dnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -371,7 +371,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://maps.geo-fips.{Region}.us-gov.{PartitionResult#dualStackDnsSuffix}/v2",
+                                        "url": "https://maps.geo-fips.{Region}.{PartitionResult#dualStackDnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -414,7 +414,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://maps.geo-fips.{Region}.us-gov.{PartitionResult#dnsSuffix}/v2",
+                                        "url": "https://maps.geo-fips.{Region}.{PartitionResult#dnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -457,7 +457,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://maps.geo.{Region}.us-gov.{PartitionResult#dualStackDnsSuffix}/v2",
+                                        "url": "https://maps.geo.{Region}.{PartitionResult#dualStackDnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
diff -pruN 2.23.6-1/awscli/botocore/data/geo-maps/2020-11-19/service-2.json 2.31.35-1/awscli/botocore/data/geo-maps/2020-11-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/geo-maps/2020-11-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-maps/2020-11-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -22,7 +22,8 @@
       },
       "input":{"shape":"GetGlyphsRequest"},
       "output":{"shape":"GetGlyphsResponse"},
-      "documentation":"<p>Returns the map's glyphs.</p>"
+      "documentation":"<p> <code>GetGlyphs</code> returns the map's glyphs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/styling-labels-with-glyphs.html\">Style labels with glyphs</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "readonly":true
     },
     "GetSprites":{
       "name":"GetSprites",
@@ -33,7 +34,8 @@
       },
       "input":{"shape":"GetSpritesRequest"},
       "output":{"shape":"GetSpritesResponse"},
-      "documentation":"<p>Returns the map's sprites.</p>"
+      "documentation":"<p> <code>GetSprites</code> returns the map's sprites.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/styling-iconography-with-sprites.html\">Style iconography with sprites</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "readonly":true
     },
     "GetStaticMap":{
       "name":"GetStaticMap",
@@ -50,7 +52,8 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Provides high-quality static map images with customizable options. You can modify the map's appearance and overlay additional information. It's an ideal solution for applications requiring tailored static map snapshots.</p>"
+      "documentation":"<p> <code>GetStaticMap</code> provides high-quality static map images with customizable options. You can modify the map's appearance and overlay additional information. It's an ideal solution for applications requiring tailored static map snapshots.</p> <p>For more information, see the following topics in the <i>Amazon Location Service Developer Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/static-maps.html\">Static maps</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/customizing-static-maps.html\">Customize static maps</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/overlaying-static-map.html\">Overlay on the static map</a> </p> </li> </ul>",
+      "readonly":true
     },
     "GetStyleDescriptor":{
       "name":"GetStyleDescriptor",
@@ -61,7 +64,8 @@
       },
       "input":{"shape":"GetStyleDescriptorRequest"},
       "output":{"shape":"GetStyleDescriptorResponse"},
-      "documentation":"<p>Returns information about the style.</p>"
+      "documentation":"<p> <code>GetStyleDescriptor</code> returns information about the style.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/styling-dynamic-maps.html\">Style dynamic maps</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "readonly":true
     },
     "GetTile":{
       "name":"GetTile",
@@ -74,11 +78,13 @@
       "output":{"shape":"GetTileResponse"},
       "errors":[
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Returns a tile. Map tiles are used by clients to render a map. they're addressed using a grid arrangement with an X coordinate, Y coordinate, and Z (zoom) level.</p>"
+      "documentation":"<p> <code>GetTile</code> returns a tile. Map tiles are used by clients to render a map. they're addressed using a grid arrangement with an X coordinate, Y coordinate, and Z (zoom) level.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/tiles.html\">Tiles</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "readonly":true
     }
   },
   "shapes":{
@@ -105,6 +111,10 @@
       "sensitive":true
     },
     "Blob":{"type":"blob"},
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
     "ColorScheme":{
       "type":"string",
       "enum":[
@@ -115,23 +125,31 @@
     "CompactOverlay":{
       "type":"string",
       "max":7000,
-      "min":1
+      "min":1,
+      "sensitive":true
+    },
+    "ContourDensity":{
+      "type":"string",
+      "enum":["Medium"]
     },
     "CountryCode":{
       "type":"string",
       "max":3,
       "min":2,
-      "pattern":"([A-Z]{2}|[A-Z]{3})"
+      "pattern":"([A-Z]{2}|[A-Z]{3})",
+      "sensitive":true
     },
     "DistanceMeters":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "GeoJsonOverlay":{
       "type":"string",
       "max":7000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "GetGlyphsRequest":{
       "type":"structure",
@@ -148,7 +166,7 @@
         },
         "FontUnicodeRange":{
           "shape":"GetGlyphsRequestFontUnicodeRangeString",
-          "documentation":"<p>A Unicode range of characters to download glyphs for. This must be aligned to multiples of 256. </p> <p>Example: <code>0-255.pdf</code> </p>",
+          "documentation":"<p>A Unicode range of characters to download glyphs for. This must be aligned to multiples of 256. </p> <p>Example: <code>0-255.pbf</code> </p>",
           "location":"uri",
           "locationName":"FontUnicodeRange"
         }
@@ -161,6 +179,8 @@
     },
     "GetGlyphsRequestFontUnicodeRangeString":{
       "type":"string",
+      "max":50,
+      "min":0,
       "pattern":"[0-9]+-[0-9]+\\.pbf"
     },
     "GetGlyphsResponse":{
@@ -267,29 +287,41 @@
       ],
       "members":{
         "BoundingBox":{
-          "shape":"PositionListString",
-          "documentation":"<p>Takes in two pairs of coordinates, [Lon, Lat], denoting south-westerly and north-easterly edges of the image. The underlying area becomes the view of the image. </p> <p>Example: -123.17075,49.26959,-123.08125,49.31429</p>",
+          "shape":"GetStaticMapRequestBoundingBoxString",
+          "documentation":"<p>Takes in two pairs of coordinates in World Geodetic System (WGS 84) format: [longitude, latitude], denoting south-westerly and north-easterly edges of the image. The underlying area becomes the view of the image. </p> <p>Example: -123.17075,49.26959,-123.08125,49.31429</p>",
           "location":"querystring",
           "locationName":"bounding-box"
         },
         "BoundedPositions":{
-          "shape":"PositionListString",
-          "documentation":"<p>Takes in two or more pair of coordinates, [Lon, Lat], with each coordinate separated by a comma. The API will generate an image to encompass all of the provided coordinates. </p> <note> <p>Cannot be used with <code>Zoom</code> and or <code>Radius</code> </p> </note> <p>Example: 97.170451,78.039098,99.045536,27.176178</p>",
+          "shape":"GetStaticMapRequestBoundedPositionsString",
+          "documentation":"<p>Takes in two or more pair of coordinates in World Geodetic System (WGS 84) format: [longitude, latitude], with each coordinate separated by a comma. The API will generate an image to encompass all of the provided coordinates. </p> <note> <p>Cannot be used with <code>Zoom</code> and or <code>Radius</code> </p> </note> <p>Example: 97.170451,78.039098,99.045536,27.176178</p>",
           "location":"querystring",
           "locationName":"bounded-positions"
         },
         "Center":{
           "shape":"PositionString",
-          "documentation":"<p>Takes in a pair of coordinates, [Lon, Lat], which becomes the center point of the image. This parameter requires that either zoom or radius is set.</p> <note> <p>Cannot be used with <code>Zoom</code> and or <code>Radius</code> </p> </note> <p>Example: 49.295,-123.108</p>",
+          "documentation":"<p>Takes in a pair of coordinates in World Geodetic System (WGS 84) format: [longitude, latitude], which becomes the center point of the image. This parameter requires that either zoom or radius is set.</p> <note> <p>Cannot be used with <code>Zoom</code> and or <code>Radius</code> </p> </note> <p>Example: 49.295,-123.108</p>",
           "location":"querystring",
           "locationName":"center"
         },
+        "ColorScheme":{
+          "shape":"ColorScheme",
+          "documentation":"<p>Sets color tone for map, such as dark and light for specific map styles. It only applies to vector map styles, such as Standard.</p> <p>Example: <code>Light</code> </p> <p>Default value: <code>Light</code> </p> <note> <p>Valid values for <code>ColorScheme</code> are case sensitive.</p> </note>",
+          "location":"querystring",
+          "locationName":"color-scheme"
+        },
         "CompactOverlay":{
           "shape":"CompactOverlay",
           "documentation":"<p>Takes in a string to draw geometries on the image. The input is a comma separated format as follows format: <code>[Lon, Lat]</code> </p> <p>Example: <code>line:-122.407653,37.798557,-122.413291,37.802443;color=%23DD0000;width=7;outline-color=#00DD00;outline-width=5yd|point:-122.40572,37.80004;label=Fog Hill Market;size=large;text-color=%23DD0000;color=#EE4B2B</code> </p> <note> <p>Currently it supports the following geometry types: point, line and polygon. It does not support multiPoint , multiLine and multiPolgyon.</p> </note>",
           "location":"querystring",
           "locationName":"compact-overlay"
         },
+        "CropLabels":{
+          "shape":"Boolean",
+          "documentation":"<p>It is a flag that takes in true or false. It prevents the labels that are on the edge of the image from being cut or obscured.</p>",
+          "location":"querystring",
+          "locationName":"crop-labels"
+        },
         "GeoJsonOverlay":{
           "shape":"GeoJsonOverlay",
           "documentation":"<p>Takes in a string to draw geometries on the image. The input is a valid GeoJSON collection object. </p> <p>Example: <code>{\"type\":\"FeatureCollection\",\"features\": [{\"type\":\"Feature\",\"geometry\":{\"type\":\"MultiPoint\",\"coordinates\": [[-90.076345,51.504107],[-0.074451,51.506892]]},\"properties\": {\"color\":\"#00DD00\"}}]}</code> </p>",
@@ -308,12 +340,36 @@
           "location":"querystring",
           "locationName":"key"
         },
+        "LabelSize":{
+          "shape":"LabelSize",
+          "documentation":"<p>Overrides the label size auto-calculated by <code>FileName</code>. Takes in one of the values - <code>Small</code> or <code>Large</code>.</p>",
+          "location":"querystring",
+          "locationName":"label-size"
+        },
+        "Language":{
+          "shape":"LanguageTag",
+          "documentation":"<p>Specifies the language on the map labels using the BCP 47 language tag, limited to ISO 639-1 two-letter language codes. If the specified language data isn't available for the map image, the labels will default to the regional primary language.</p> <p>Supported codes:</p> <ul> <li> <p> <code>ar</code> </p> </li> <li> <p> <code>as</code> </p> </li> <li> <p> <code>az</code> </p> </li> <li> <p> <code>be</code> </p> </li> <li> <p> <code>bg</code> </p> </li> <li> <p> <code>bn</code> </p> </li> <li> <p> <code>bs</code> </p> </li> <li> <p> <code>ca</code> </p> </li> <li> <p> <code>cs</code> </p> </li> <li> <p> <code>cy</code> </p> </li> <li> <p> <code>da</code> </p> </li> <li> <p> <code>de</code> </p> </li> <li> <p> <code>el</code> </p> </li> <li> <p> <code>en</code> </p> </li> <li> <p> <code>es</code> </p> </li> <li> <p> <code>et</code> </p> </li> <li> <p> <code>eu</code> </p> </li> <li> <p> <code>fi</code> </p> </li> <li> <p> <code>fo</code> </p> </li> <li> <p> <code>fr</code> </p> </li> <li> <p> <code>ga</code> </p> </li> <li> <p> <code>gl</code> </p> </li> <li> <p> <code>gn</code> </p> </li> <li> <p> <code>gu</code> </p> </li> <li> <p> <code>he</code> </p> </li> <li> <p> <code>hi</code> </p> </li> <li> <p> <code>hr</code> </p> </li> <li> <p> <code>hu</code> </p> </li> <li> <p> <code>hy</code> </p> </li> <li> <p> <code>id</code> </p> </li> <li> <p> <code>is</code> </p> </li> <li> <p> <code>it</code> </p> </li> <li> <p> <code>ja</code> </p> </li> <li> <p> <code>ka</code> </p> </li> <li> <p> <code>kk</code> </p> </li> <li> <p> <code>km</code> </p> </li> <li> <p> <code>kn</code> </p> </li> <li> <p> <code>ko</code> </p> </li> <li> <p> <code>ky</code> </p> </li> <li> <p> <code>lt</code> </p> </li> <li> <p> <code>lv</code> </p> </li> <li> <p> <code>mk</code> </p> </li> <li> <p> <code>ml</code> </p> </li> <li> <p> <code>mr</code> </p> </li> <li> <p> <code>ms</code> </p> </li> <li> <p> <code>mt</code> </p> </li> <li> <p> <code>my</code> </p> </li> <li> <p> <code>nl</code> </p> </li> <li> <p> <code>no</code> </p> </li> <li> <p> <code>or</code> </p> </li> <li> <p> <code>pa</code> </p> </li> <li> <p> <code>pl</code> </p> </li> <li> <p> <code>pt</code> </p> </li> <li> <p> <code>ro</code> </p> </li> <li> <p> <code>ru</code> </p> </li> <li> <p> <code>sk</code> </p> </li> <li> <p> <code>sl</code> </p> </li> <li> <p> <code>sq</code> </p> </li> <li> <p> <code>sr</code> </p> </li> <li> <p> <code>sv</code> </p> </li> <li> <p> <code>ta</code> </p> </li> <li> <p> <code>te</code> </p> </li> <li> <p> <code>th</code> </p> </li> <li> <p> <code>tr</code> </p> </li> <li> <p> <code>uk</code> </p> </li> <li> <p> <code>uz</code> </p> </li> <li> <p> <code>vi</code> </p> </li> <li> <p> <code>zh</code> </p> </li> </ul>",
+          "location":"querystring",
+          "locationName":"lang"
+        },
         "Padding":{
-          "shape":"Integer",
+          "shape":"GetStaticMapRequestPaddingInteger",
           "documentation":"<p>Applies additional space (in pixels) around overlay feature to prevent them from being cut or obscured.</p> <note> <p>Value for max and min is determined by:</p> <p>Min: <code>1</code> </p> <p>Max: <code>min(height, width)/4</code> </p> </note> <p>Example: <code>100</code> </p>",
           "location":"querystring",
           "locationName":"padding"
         },
+        "PoliticalView":{
+          "shape":"CountryCode",
+          "documentation":"<p>Specifies the political view, using ISO 3166-2 or ISO 3166-3 country code format.</p> <p>The following political views are currently supported:</p> <ul> <li> <p> <code>ARG</code>: Argentina's view on the Southern Patagonian Ice Field and Tierra Del Fuego, including the Falkland Islands, South Georgia, and South Sandwich Islands</p> </li> <li> <p> <code>EGY</code>: Egypt's view on Bir Tawil</p> </li> <li> <p> <code>IND</code>: India's view on Gilgit-Baltistan</p> </li> <li> <p> <code>KEN</code>: Kenya's view on the Ilemi Triangle</p> </li> <li> <p> <code>MAR</code>: Morocco's view on Western Sahara</p> </li> <li> <p> <code>RUS</code>: Russia's view on Crimea</p> </li> <li> <p> <code>SDN</code>: Sudan's view on the Halaib Triangle</p> </li> <li> <p> <code>SRB</code>: Serbia's view on Kosovo, Vukovar, and Sarengrad Islands</p> </li> <li> <p> <code>SUR</code>: Suriname's view on the Courantyne Headwaters and Lawa Headwaters</p> </li> <li> <p> <code>SYR</code>: Syria's view on the Golan Heights</p> </li> <li> <p> <code>TUR</code>: Turkey's view on Cyprus and Northern Cyprus</p> </li> <li> <p> <code>TZA</code>: Tanzania's view on Lake Malawi</p> </li> <li> <p> <code>URY</code>: Uruguay's view on Rincon de Artigas</p> </li> <li> <p> <code>VNM</code>: Vietnam's view on the Paracel Islands and Spratly Islands</p> </li> </ul>",
+          "location":"querystring",
+          "locationName":"political-view"
+        },
+        "PointsOfInterests":{
+          "shape":"MapFeatureMode",
+          "documentation":"<p>Determines if the result image will display icons representing points of interest on the map.</p>",
+          "location":"querystring",
+          "locationName":"pois"
+        },
         "Radius":{
           "shape":"DistanceMeters",
           "documentation":"<p>Used with center parameter, it specifies the zoom of the image where you can control it on a granular level. Takes in any value <code>&gt;= 1</code>. </p> <p>Example: <code>1500</code> </p> <note> <p>Cannot be used with <code>Zoom</code>.</p> </note> <p> <b>Unit</b>: <code>Meters</code> </p> <p/>",
@@ -335,7 +391,7 @@
         },
         "Style":{
           "shape":"StaticMapStyle",
-          "documentation":"<p>Style specifies the desired map style for the <code>Style</code> APIs.</p>",
+          "documentation":"<p> <code>Style</code> specifies the desired map style.</p>",
           "location":"querystring",
           "locationName":"style"
         },
@@ -353,6 +409,20 @@
         }
       }
     },
+    "GetStaticMapRequestBoundedPositionsString":{
+      "type":"string",
+      "max":2000,
+      "min":0,
+      "pattern":"(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?)(,(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?))*",
+      "sensitive":true
+    },
+    "GetStaticMapRequestBoundingBoxString":{
+      "type":"string",
+      "max":100,
+      "min":0,
+      "pattern":"(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?)(,(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?))*",
+      "sensitive":true
+    },
     "GetStaticMapRequestFileNameString":{
       "type":"string",
       "pattern":"map(@2x)?"
@@ -361,19 +431,29 @@
       "type":"integer",
       "box":true,
       "max":1400,
-      "min":64
+      "min":64,
+      "sensitive":true
+    },
+    "GetStaticMapRequestPaddingInteger":{
+      "type":"integer",
+      "box":true,
+      "max":350,
+      "min":0,
+      "sensitive":true
     },
     "GetStaticMapRequestWidthInteger":{
       "type":"integer",
       "box":true,
       "max":1400,
-      "min":64
+      "min":64,
+      "sensitive":true
     },
     "GetStaticMapRequestZoomFloat":{
       "type":"float",
       "box":true,
       "max":20,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "GetStaticMapResponse":{
       "type":"structure",
@@ -428,10 +508,34 @@
         },
         "PoliticalView":{
           "shape":"CountryCode",
-          "documentation":"<p>Specifies the political view using ISO 3166-2 or ISO 3166-3 country code format.</p> <p>The following political views are currently supported:</p> <ul> <li> <p> <code>ARG</code>: Argentina's view on the Southern Patagonian Ice Field and Tierra Del Fuego, including the Falkland Islands, South Georgia, and South Sandwich Islands</p> </li> <li> <p> <code>EGY</code>: Egypt's view on Bir Tawil</p> </li> <li> <p> <code>IND</code>: India's view on Gilgit-Baltistan</p> </li> <li> <p> <code>KEN</code>: Kenya's view on the Ilemi Triangle</p> </li> <li> <p> <code>MAR</code>: Morocco's view on Western Sahara</p> </li> <li> <p> <code>PAK</code>: Pakistan's view on Jammu and Kashmir and the Junagadh Area</p> </li> <li> <p> <code>RUS</code>: Russia's view on Crimea</p> </li> <li> <p> <code>SDN</code>: Sudan's view on the Halaib Triangle</p> </li> <li> <p> <code>SRB</code>: Serbia's view on Kosovo, Vukovar, and Sarengrad Islands</p> </li> <li> <p> <code>SUR</code>: Suriname's view on the Courantyne Headwaters and Lawa Headwaters</p> </li> <li> <p> <code>SYR</code>: Syria's view on the Golan Heights</p> </li> <li> <p> <code>TUR</code>: Turkey's view on Cyprus and Northern Cyprus</p> </li> <li> <p> <code>TZA</code>: Tanzania's view on Lake Malawi</p> </li> <li> <p> <code>URY</code>: Uruguay's view on Rincon de Artigas</p> </li> <li> <p> <code>VNM</code>: Vietnam's view on the Paracel Islands and Spratly Islands</p> </li> </ul>",
+          "documentation":"<p>Specifies the political view using ISO 3166-2 or ISO 3166-3 country code format.</p> <p>The following political views are currently supported:</p> <ul> <li> <p> <code>ARG</code>: Argentina's view on the Southern Patagonian Ice Field and Tierra Del Fuego, including the Falkland Islands, South Georgia, and South Sandwich Islands</p> </li> <li> <p> <code>EGY</code>: Egypt's view on Bir Tawil</p> </li> <li> <p> <code>IND</code>: India's view on Gilgit-Baltistan</p> </li> <li> <p> <code>KEN</code>: Kenya's view on the Ilemi Triangle</p> </li> <li> <p> <code>MAR</code>: Morocco's view on Western Sahara</p> </li> <li> <p> <code>RUS</code>: Russia's view on Crimea</p> </li> <li> <p> <code>SDN</code>: Sudan's view on the Halaib Triangle</p> </li> <li> <p> <code>SRB</code>: Serbia's view on Kosovo, Vukovar, and Sarengrad Islands</p> </li> <li> <p> <code>SUR</code>: Suriname's view on the Courantyne Headwaters and Lawa Headwaters</p> </li> <li> <p> <code>SYR</code>: Syria's view on the Golan Heights</p> </li> <li> <p> <code>TUR</code>: Turkey's view on Cyprus and Northern Cyprus</p> </li> <li> <p> <code>TZA</code>: Tanzania's view on Lake Malawi</p> </li> <li> <p> <code>URY</code>: Uruguay's view on Rincon de Artigas</p> </li> <li> <p> <code>VNM</code>: Vietnam's view on the Paracel Islands and Spratly Islands</p> </li> </ul>",
           "location":"querystring",
           "locationName":"political-view"
         },
+        "Terrain":{
+          "shape":"Terrain",
+          "documentation":"<p>Adjusts how physical terrain details are rendered on the map.</p> <p>The following terrain styles are currently supported:</p> <ul> <li> <p> <code>Hillshade</code>: Displays the physical terrain details through shading and highlighting of elevation change and geographic features.</p> </li> </ul> <p>This parameter is valid only for the <code>Standard</code> map style.</p>",
+          "location":"querystring",
+          "locationName":"terrain"
+        },
+        "ContourDensity":{
+          "shape":"ContourDensity",
+          "documentation":"<p>Displays the shape and steepness of terrain features using elevation lines. The density value controls how densely the available contour line information is rendered on the map.</p> <p>This parameter is valid only for the <code>Standard</code> map style.</p>",
+          "location":"querystring",
+          "locationName":"contour-density"
+        },
+        "Traffic":{
+          "shape":"Traffic",
+          "documentation":"<p>Displays real-time traffic information overlay on map, such as incident events and flow events.</p> <p>This parameter is valid only for the <code>Standard</code> map style.</p>",
+          "location":"querystring",
+          "locationName":"traffic"
+        },
+        "TravelModes":{
+          "shape":"TravelModeList",
+          "documentation":"<p>Renders additional map information relevant to selected travel modes. Information for multiple travel modes can be displayed simultaneously, although this increases the overall information density rendered on the map.</p> <p>This parameter is valid only for the <code>Standard</code> map style.</p>",
+          "location":"querystring",
+          "locationName":"travel-modes"
+        },
         "Key":{
           "shape":"ApiKey",
           "documentation":"<p>Optional: The API key to be used for authorization. Either an API key or valid SigV4 signature must be provided when making a request. </p>",
@@ -477,6 +581,12 @@
         "Y"
       ],
       "members":{
+        "AdditionalFeatures":{
+          "shape":"TileAdditionalFeatureList",
+          "documentation":"<p>A list of optional additional parameters such as map styles that can be requested for each result.</p>",
+          "location":"querystring",
+          "locationName":"additional-features"
+        },
         "Tileset":{
           "shape":"Tileset",
           "documentation":"<p>Specifies the desired tile set.</p> <p>Valid Values: <code>raster.satellite | vector.basemap</code> </p>",
@@ -511,15 +621,24 @@
     },
     "GetTileRequestXString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "max":7,
+      "min":0,
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetTileRequestYString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "max":7,
+      "min":0,
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetTileRequestZString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "max":2,
+      "min":0,
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetTileResponse":{
       "type":"structure",
@@ -527,7 +646,7 @@
       "members":{
         "Blob":{
           "shape":"Blob",
-          "documentation":"<p>The blob represents a vector tile in <code>mvt</code> format for the <code>GetTile</code> API.</p>"
+          "documentation":"<p>The blob represents a vector tile in <code>mvt</code> or a raster tile in an image format.</p>"
         },
         "ContentType":{
           "shape":"String",
@@ -556,10 +675,6 @@
       },
       "payload":"Blob"
     },
-    "Integer":{
-      "type":"integer",
-      "box":true
-    },
     "InternalServerException":{
       "type":"structure",
       "required":["Message"],
@@ -575,6 +690,25 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "LabelSize":{
+      "type":"string",
+      "enum":[
+        "Small",
+        "Large"
+      ]
+    },
+    "LanguageTag":{
+      "type":"string",
+      "max":35,
+      "min":2
+    },
+    "MapFeatureMode":{
+      "type":"string",
+      "enum":[
+        "Enabled",
+        "Disabled"
+      ]
+    },
     "MapStyle":{
       "type":"string",
       "enum":[
@@ -584,16 +718,28 @@
         "Satellite"
       ]
     },
-    "PositionListString":{
-      "type":"string",
-      "min":7,
-      "pattern":"(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?)(,(-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?))*"
-    },
     "PositionString":{
       "type":"string",
       "max":36,
       "min":3,
-      "pattern":"-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?"
+      "pattern":"-?\\d{1,3}(\\.\\d{1,14})?,-?\\d{1,2}(\\.\\d{1,14})?",
+      "sensitive":true
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception thrown when the associated resource could not be found.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
     },
     "ScaleBarUnit":{
       "type":"string",
@@ -606,9 +752,16 @@
     },
     "StaticMapStyle":{
       "type":"string",
-      "enum":["Satellite"]
+      "enum":[
+        "Satellite",
+        "Standard"
+      ]
     },
     "String":{"type":"string"},
+    "Terrain":{
+      "type":"string",
+      "enum":["Hillshade"]
+    },
     "ThrottlingException":{
       "type":"structure",
       "required":["Message"],
@@ -626,12 +779,44 @@
       "exception":true,
       "retryable":{"throttling":false}
     },
+    "TileAdditionalFeature":{
+      "type":"string",
+      "enum":[
+        "ContourLines",
+        "Hillshade",
+        "Logistics",
+        "Transit"
+      ]
+    },
+    "TileAdditionalFeatureList":{
+      "type":"list",
+      "member":{"shape":"TileAdditionalFeature"},
+      "max":4,
+      "min":0
+    },
     "Tileset":{
       "type":"string",
       "max":100,
       "min":1,
       "pattern":"[-.\\w]+"
     },
+    "Traffic":{
+      "type":"string",
+      "enum":["All"]
+    },
+    "TravelMode":{
+      "type":"string",
+      "enum":[
+        "Transit",
+        "Truck"
+      ]
+    },
+    "TravelModeList":{
+      "type":"list",
+      "member":{"shape":"TravelMode"},
+      "max":2,
+      "min":0
+    },
     "ValidationException":{
       "type":"structure",
       "required":[
@@ -646,7 +831,7 @@
         },
         "Reason":{
           "shape":"ValidationExceptionReason",
-          "documentation":"<p>The field where thebb invalid entry was detected.</p>",
+          "documentation":"<p>The field where the invalid entry was detected.</p>",
           "locationName":"reason"
         },
         "FieldList":{
diff -pruN 2.23.6-1/awscli/botocore/data/geo-places/2020-11-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/geo-places/2020-11-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/geo-places/2020-11-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-places/2020-11-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -328,7 +328,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://places.geo.{Region}.us-gov.{PartitionResult#dnsSuffix}/v2",
+                                        "url": "https://places.geo.{Region}.{PartitionResult#dnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -371,7 +371,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://places.geo-fips.{Region}.us-gov.{PartitionResult#dualStackDnsSuffix}/v2",
+                                        "url": "https://places.geo-fips.{Region}.{PartitionResult#dualStackDnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -414,7 +414,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://places.geo-fips.{Region}.us-gov.{PartitionResult#dnsSuffix}/v2",
+                                        "url": "https://places.geo-fips.{Region}.{PartitionResult#dnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
@@ -457,7 +457,7 @@
                                         }
                                     ],
                                     "endpoint": {
-                                        "url": "https://places.geo.{Region}.us-gov.{PartitionResult#dualStackDnsSuffix}/v2",
+                                        "url": "https://places.geo.{Region}.{PartitionResult#dualStackDnsSuffix}/v2",
                                         "properties": {},
                                         "headers": {}
                                     },
diff -pruN 2.23.6-1/awscli/botocore/data/geo-places/2020-11-19/service-2.json 2.31.35-1/awscli/botocore/data/geo-places/2020-11-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/geo-places/2020-11-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-places/2020-11-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,7 +28,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The autocomplete operation speeds up and increases the accuracy of entering addresses by providing a list of address candidates matching a partially entered address. Results are sorted from most to least matching. Filtering and biasing can be used to increase the relevance of the results if additional search context is known</p>"
+      "documentation":"<p> <code>Autocomplete</code> completes potential places and addresses as the user types, based on the partial input. The API enhances the efficiency and accuracy of address by completing query based on a few entered keystrokes. It helps you by completing partial queries with valid address completion. Also, the API supports the filtering of results based on geographic location, country, or specific place types, and can be tailored using optional parameters like language and political views.</p>"
     },
     "Geocode":{
       "name":"Geocode",
@@ -45,7 +45,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The <code>Geocode</code> action allows you to obtain coordinates, addresses, and other information about places.</p>"
+      "documentation":"<p> <code>Geocode</code> converts a textual address or place into geographic coordinates. You can obtain geographic coordinates, address component, and other related information. It supports flexible queries, including free-form text or structured queries with components like street names, postal codes, and regions. The Geocode API can also provide additional features such as time zone information and the inclusion of political views.</p>"
     },
     "GetPlace":{
       "name":"GetPlace",
@@ -62,7 +62,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Finds a place by its unique ID. A <code>PlaceId</code> is returned by other place operations.</p>"
+      "documentation":"<p> <code>GetPlace</code> finds a place by its unique ID. A <code>PlaceId</code> is returned by other place operations.</p>"
     },
     "ReverseGeocode":{
       "name":"ReverseGeocode",
@@ -79,7 +79,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> The <code>ReverseGeocode</code> operation allows you to retrieve addresses and place information from coordinates.</p>"
+      "documentation":"<p> <code>ReverseGeocode</code> converts geographic coordinates into a human-readable address or place. You can obtain address component, and other related information such as place type, category, street information. The Reverse Geocode API supports filtering to on place type so that you can refine result based on your need. Also, The Reverse Geocode API can also provide additional features such as time zone information and the inclusion of political views.</p>"
     },
     "SearchNearby":{
       "name":"SearchNearby",
@@ -96,7 +96,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Search nearby a specified location.</p>"
+      "documentation":"<p> <code>SearchNearby</code> queries for points of interest within a radius from a central coordinates, returning place results with optional filters such as categories, business chains, food types and more. The API returns details such as a place name, address, phone, category, food type, contact, opening hours. Also, the API can return phonemes, time zones and more based on requested parameters.</p>"
     },
     "SearchText":{
       "name":"SearchText",
@@ -113,7 +113,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Use the <code>SearchText</code> operation to search for geocode and place information. You can then complete a follow-up query suggested from the <code>Suggest</code> API via a query id.</p>"
+      "documentation":"<p> <code>SearchText</code> searches for geocode and place information. You can then complete a follow-up query suggested from the <code>Suggest</code> API via a query id.</p>"
     },
     "Suggest":{
       "name":"Suggest",
@@ -130,7 +130,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The <code>Suggest</code> operation finds addresses or place candidates based on incomplete or misspelled queries. You then select the best query to submit based on the returned results.</p>"
+      "documentation":"<p> <code>Suggest</code> provides intelligent predictions or recommendations based on the user's input or context, such as relevant places, points of interest, query terms or search category. It is designed to help users find places or point of interests candidates or identify a follow on query based on incomplete or misspelled queries. It returns a list of possible matches or refinements that can be used to formulate a more accurate query. Users can select the most appropriate suggestion and use it for further searching. The API provides options for filtering results by location and other attributes, and allows for additional features like phonemes and timezones. The response includes refined query terms and detailed place information.</p>"
     }
   },
   "shapes":{
@@ -170,7 +170,7 @@
       "type":"structure",
       "members":{
         "Restricted":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>The restriction.</p>"
         },
         "Categories":{
@@ -207,7 +207,7 @@
         },
         "Locality":{
           "shape":"AddressLocalityString",
-          "documentation":"<p>The locality or city of the address.</p> <p>Example: <code>Vancouver</code>.</p>"
+          "documentation":"<p>The city or locality of the address.</p> <p>Example: <code>Vancouver</code>.</p>"
         },
         "District":{
           "shape":"AddressDistrictString",
@@ -219,7 +219,7 @@
         },
         "PostalCode":{
           "shape":"AddressPostalCodeString",
-          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code, for which the result should posses. </p>"
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code, for which the result should possess. </p>"
         },
         "Block":{
           "shape":"AddressBlockString",
@@ -230,7 +230,7 @@
           "documentation":"<p>Name of sub-block. </p> <p>Example: <code>Sunny Mansion 203 sub-block: 4</code> </p>"
         },
         "Intersection":{
-          "shape":"IntersectionList",
+          "shape":"IntersectionStreetList",
           "documentation":"<p>Name of the streets in the intersection. </p> <p>Example: <code>[\"Friedrichstraße\",\"Unter den Linden\"]</code> </p>"
         },
         "Street":{
@@ -248,6 +248,10 @@
         "Building":{
           "shape":"AddressBuildingString",
           "documentation":"<p>The name of the building at the address.</p>"
+        },
+        "SecondaryAddressComponents":{
+          "shape":"SecondaryAddressComponentList",
+          "documentation":"<p>Components that correspond to secondary identifiers on an Address. Secondary address components include information such as Suite or Unit Number, Building, or Floor.</p>"
         }
       },
       "documentation":"<p>The place address.</p>"
@@ -255,17 +259,20 @@
     "AddressAddressNumberString":{
       "type":"string",
       "max":10,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressBlockString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressBuildingString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressComponentMatchScores":{
       "type":"structure",
@@ -296,7 +303,7 @@
         },
         "PostalCode":{
           "shape":"MatchScore",
-          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code, for which the result should posses. </p>"
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code, for which the result should possess. </p>"
         },
         "Block":{
           "shape":"MatchScore",
@@ -317,6 +324,10 @@
         "Building":{
           "shape":"MatchScore",
           "documentation":"<p>The name of the building at the address.</p>"
+        },
+        "SecondaryAddressComponents":{
+          "shape":"SecondaryAddressComponentMatchScoreList",
+          "documentation":"<p>Match scores for the secondary address components in the result.</p>"
         }
       },
       "documentation":"<p>Indicates how well the entire input matches the returned. It is equal to 1 if all input tokens are recognized and matched.</p>"
@@ -372,37 +383,44 @@
     "AddressDistrictString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressLabelString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressLocalityString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressPostalCodeString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressStreetString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressSubBlockString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "AddressSubDistrictString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "ApiKey":{
       "type":"string",
@@ -457,11 +475,11 @@
         },
         "Block":{
           "shape":"HighlightList",
-          "documentation":"<p>Name of the block. Example: Sunny Mansion 203 block: 2 Chome</p>"
+          "documentation":"<p>Name of the block. </p> <p>Example: <code>Sunny Mansion 203 block: 2 Chome</code> </p>"
         },
         "SubBlock":{
           "shape":"HighlightList",
-          "documentation":"<p>Name of sub-block. Example Sunny Mansion 203 sub-block: 4</p>"
+          "documentation":"<p>Name of sub-block. </p> <p>Example: <code>Sunny Mansion 203 sub-block: 4</code> </p>"
         },
         "Intersection":{
           "shape":"IntersectionHighlightsList",
@@ -469,7 +487,7 @@
         },
         "PostalCode":{
           "shape":"HighlightList",
-          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should posses. </p>"
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should possess. </p>"
         },
         "AddressNumber":{
           "shape":"HighlightList",
@@ -499,7 +517,7 @@
           "documentation":"<p>The included place types.</p>"
         }
       },
-      "documentation":"<p>Autocomplete structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+      "documentation":"<p>Autocomplete structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
     },
     "AutocompleteFilterPlaceType":{
       "type":"string",
@@ -538,7 +556,7 @@
       "members":{
         "QueryText":{
           "shape":"AutocompleteRequestQueryTextString",
-          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p>"
+          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "MaxResults":{
           "shape":"AutocompleteRequestMaxResultsInteger",
@@ -550,11 +568,11 @@
         },
         "Filter":{
           "shape":"AutocompleteFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "PostalCodeMode":{
           "shape":"PostalCodeMode",
-          "documentation":"<p>The <code>PostalCodeMode</code> affects how postal code results are returned. If a postal code spans multiple localities and this value is empty, partial district or locality information may be returned under a single postal code result entry. If it's populated with the value <code>cityLookup</code>, all cities in that postal code are returned.</p>"
+          "documentation":"<p>The <code>PostalCodeMode</code> affects how postal code results are returned. If a postal code spans multiple localities and this value is empty, partial district or locality information may be returned under a single postal code result entry. If it's populated with the value <code>EnumerateSpannedLocalities</code>, all cities in that postal code are returned.</p>"
         },
         "AdditionalFeatures":{
           "shape":"AutocompleteAdditionalFeatureList",
@@ -566,7 +584,7 @@
         },
         "PoliticalView":{
           "shape":"CountryCode",
-          "documentation":"<p>The alpha-2 or alpha-3 character code for the political view of a country. The political view applies to the results of the request to represent unresolved territorial claims through the point of view of the specified country.</p>"
+          "documentation":"<p>The alpha-2 or alpha-3 character code for the political view of a country. The political view applies to the results of the request to represent unresolved territorial claims through the point of view of the specified country.</p> <p>The following political views are currently supported:</p> <ul> <li> <p> <code>ARG</code>: Argentina's view on the Southern Patagonian Ice Field and Tierra Del Fuego, including the Falkland Islands, South Georgia, and South Sandwich Islands</p> </li> <li> <p> <code>EGY</code>: Egypt's view on Bir Tawil</p> </li> <li> <p> <code>IND</code>: India's view on Gilgit-Baltistan</p> </li> <li> <p> <code>KEN</code>: Kenya's view on the Ilemi Triangle</p> </li> <li> <p> <code>MAR</code>: Morocco's view on Western Sahara</p> </li> <li> <p> <code>RUS</code>: Russia's view on Crimea</p> </li> <li> <p> <code>SDN</code>: Sudan's view on the Halaib Triangle</p> </li> <li> <p> <code>SRB</code>: Serbia's view on Kosovo, Vukovar, and Sarengrad Islands</p> </li> <li> <p> <code>SUR</code>: Suriname's view on the Courantyne Headwaters and Lawa Headwaters</p> </li> <li> <p> <code>SYR</code>: Syria's view on the Golan Heights</p> </li> <li> <p> <code>TUR</code>: Turkey's view on Cyprus and Northern Cyprus</p> </li> <li> <p> <code>TZA</code>: Tanzania's view on Lake Malawi</p> </li> <li> <p> <code>URY</code>: Uruguay's view on Rincon de Artigas</p> </li> <li> <p> <code>VNM</code>: Vietnam's view on the Paracel Islands and Spratly Islands</p> </li> </ul>"
         },
         "IntendedUse":{
           "shape":"AutocompleteIntendedUse",
@@ -598,7 +616,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -659,17 +677,15 @@
     },
     "AutocompleteResultItemPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "AutocompleteResultItemTitleString":{
       "type":"string",
       "max":200,
-      "min":0
-    },
-    "Boolean":{
-      "type":"boolean",
-      "box":true
+      "min":0,
+      "sensitive":true
     },
     "BoundingBox":{
       "type":"list",
@@ -695,7 +711,8 @@
     "BusinessChainIdString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "BusinessChainList":{
       "type":"list",
@@ -706,7 +723,8 @@
     "BusinessChainNameString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "Category":{
       "type":"structure",
@@ -728,7 +746,7 @@
           "documentation":"<p>Localized name of the category type.</p>"
         },
         "Primary":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean which indicates if this category is the primary offered by the place.</p>"
         }
       },
@@ -737,7 +755,8 @@
     "CategoryIdString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "CategoryList":{
       "type":"list",
@@ -748,26 +767,28 @@
     "CategoryLocalizedNameString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "CategoryNameString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "ComponentMatchScores":{
       "type":"structure",
       "members":{
         "Title":{
           "shape":"MatchScore",
-          "documentation":"<p>Indicates the starting and ending index of the title in the text query that match the found title. </p>"
+          "documentation":"<p>Indicates the match score of the title in the text query that match the found title. </p>"
         },
         "Address":{
           "shape":"AddressComponentMatchScores",
           "documentation":"<p>The place's address.</p>"
         }
       },
-      "documentation":"<p>Indicates how well the input matches the returned element. It is equal to 1 if all input tokens are recognized and matched to the title in the result.</p>"
+      "documentation":"<p>Indicates how well the returned title and address components matches the input TextQuery. For each component a score is provied with 1 indicating all tokens were matched and 0 indicating no tokens were matched.</p>"
     },
     "ContactDetails":{
       "type":"structure",
@@ -790,7 +811,8 @@
     "ContactDetailsLabelString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "ContactDetailsList":{
       "type":"list",
@@ -801,7 +823,8 @@
     "ContactDetailsValueString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "Contacts":{
       "type":"structure",
@@ -847,19 +870,22 @@
       "type":"string",
       "max":3,
       "min":2,
-      "pattern":"([A-Z]{2}|[A-Z]{3})"
+      "pattern":"([A-Z]{2}|[A-Z]{3})",
+      "sensitive":true
     },
     "CountryCode2":{
       "type":"string",
       "max":2,
       "min":2,
-      "pattern":"[A-Z]{2}"
+      "pattern":"[A-Z]{2}",
+      "sensitive":true
     },
     "CountryCode3":{
       "type":"string",
       "max":3,
       "min":3,
-      "pattern":"[A-Z]{3}"
+      "pattern":"[A-Z]{3}",
+      "sensitive":true
     },
     "CountryCodeList":{
       "type":"list",
@@ -884,12 +910,14 @@
     "CountryNameString":{
       "type":"string",
       "max":100,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "DistanceMeters":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "Double":{
       "type":"double",
@@ -904,7 +932,8 @@
     "FilterBusinessChainListMemberString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "FilterCategoryList":{
       "type":"list",
@@ -915,7 +944,8 @@
     "FilterCategoryListMemberString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "FilterCircle":{
       "type":"structure",
@@ -940,7 +970,8 @@
     "FilterCircleRadiusLong":{
       "type":"long",
       "max":21000000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "FilterFoodTypeList":{
       "type":"list",
@@ -951,7 +982,8 @@
     "FilterFoodTypeListMemberString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "FoodType":{
       "type":"structure",
@@ -966,7 +998,7 @@
           "documentation":"<p>The Food Type Id.</p>"
         },
         "Primary":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean which indicates if this food type is the primary offered by the place. For example, if a location serves fast food, but also dessert, he primary would likely be fast food.</p>"
         }
       },
@@ -975,7 +1007,8 @@
     "FoodTypeIdString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "FoodTypeList":{
       "type":"list",
@@ -986,13 +1019,16 @@
     "FoodTypeLocalizedNameString":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "GeocodeAdditionalFeature":{
       "type":"string",
       "enum":[
         "TimeZone",
-        "Access"
+        "Access",
+        "SecondaryAddresses",
+        "Intersections"
       ]
     },
     "GeocodeAdditionalFeatureList":{
@@ -1013,7 +1049,7 @@
           "documentation":"<p>The included place types.</p>"
         }
       },
-      "documentation":"<p>Geocode structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+      "documentation":"<p>Geocode structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
     },
     "GeocodeFilterPlaceType":{
       "type":"string",
@@ -1024,7 +1060,8 @@
         "Street",
         "PointAddress",
         "InterpolatedAddress"
-      ]
+      ],
+      "sensitive":true
     },
     "GeocodeFilterPlaceTypeList":{
       "type":"list",
@@ -1039,6 +1076,78 @@
         "Storage"
       ]
     },
+    "GeocodeParsedQuery":{
+      "type":"structure",
+      "members":{
+        "Title":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The localized display name of this result item based on request parameter <code>language</code>.</p>"
+        },
+        "Address":{
+          "shape":"GeocodeParsedQueryAddressComponents",
+          "documentation":"<p>The place address.</p>"
+        }
+      },
+      "documentation":"<p>Parsed components in the provided QueryText.</p>"
+    },
+    "GeocodeParsedQueryAddressComponents":{
+      "type":"structure",
+      "members":{
+        "Country":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The alpha-2 or alpha-3 character code for the country that the results will be present in.</p>"
+        },
+        "Region":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The region or state results should be present in. </p> <p>Example: <code>North Rhine-Westphalia</code>.</p>"
+        },
+        "SubRegion":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The sub-region or county for which results should be present in. </p>"
+        },
+        "Locality":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The city or locality of the address.</p> <p>Example: <code>Vancouver</code>.</p>"
+        },
+        "District":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The district or division of a city the results should be present in.</p>"
+        },
+        "SubDistrict":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>A subdivision of a district. </p> <p>Example: <code>Minden-Lübbecke</code>.</p>"
+        },
+        "PostalCode":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code, for which the result should possess. </p>"
+        },
+        "Block":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>Name of the block. </p> <p>Example: <code>Sunny Mansion 203 block: 2 Chome</code> </p>"
+        },
+        "SubBlock":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>Name of sub-block. </p> <p>Example: <code>Sunny Mansion 203 sub-block: 4</code> </p>"
+        },
+        "Street":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The name of the street results should be present in.</p>"
+        },
+        "AddressNumber":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The number that identifies an address within a street.</p>"
+        },
+        "Building":{
+          "shape":"ParsedQueryComponentList",
+          "documentation":"<p>The name of the building at the address.</p>"
+        },
+        "SecondaryAddressComponents":{
+          "shape":"ParsedQuerySecondaryAddressComponentList",
+          "documentation":"<p>Parsed secondary address components from the provided query text.</p>"
+        }
+      },
+      "documentation":"<p>Parsed address components in the provided QueryText.</p>"
+    },
     "GeocodeQueryComponents":{
       "type":"structure",
       "members":{
@@ -1056,7 +1165,7 @@
         },
         "Locality":{
           "shape":"GeocodeQueryComponentsLocalityString",
-          "documentation":"<p>City or locality results should be present in. </p> <p>Example: <code>Vancouver</code>.</p>"
+          "documentation":"<p>The city or locality results should be present in. </p> <p>Example: <code>Vancouver</code>.</p>"
         },
         "District":{
           "shape":"GeocodeQueryComponentsDistrictString",
@@ -1072,7 +1181,7 @@
         },
         "PostalCode":{
           "shape":"GeocodeQueryComponentsPostalCodeString",
-          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should posses. </p>"
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should possess. </p>"
         }
       },
       "documentation":"<p>A structured free text query allows you to search for places by the name or text representation of specific properties of the place. </p>"
@@ -1138,7 +1247,7 @@
       "members":{
         "QueryText":{
           "shape":"GeocodeRequestQueryTextString",
-          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p>"
+          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "QueryComponents":{"shape":"GeocodeQueryComponents"},
         "MaxResults":{
@@ -1151,7 +1260,7 @@
         },
         "Filter":{
           "shape":"GeocodeFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "AdditionalFeatures":{
           "shape":"GeocodeAdditionalFeatureList",
@@ -1167,7 +1276,7 @@
         },
         "IntendedUse":{
           "shape":"GeocodeIntendedUse",
-          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p>"
+          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p> <note> <p>Storing the response of an Geocode query is required to comply with service terms, but charged at a higher cost per request. Please review the <a href=\"https://aws.amazon.com/location/sla/\">user agreement</a> and <a href=\"https://aws.amazon.com/location/pricing/\">service pricing structure</a> to determine the correct setting for your use case.</p> </note>"
         },
         "Key":{
           "shape":"ApiKey",
@@ -1195,7 +1304,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -1215,7 +1324,7 @@
       "members":{
         "PlaceId":{
           "shape":"GeocodeResultItemPlaceIdString",
-          "documentation":"<p>The <code>PlaceId</code> of the place you wish to receive the information for.</p>"
+          "documentation":"<p>The <code>PlaceId</code> of the place result.</p>"
         },
         "PlaceType":{
           "shape":"PlaceType",
@@ -1230,7 +1339,7 @@
           "documentation":"<p>The place's address.</p>"
         },
         "AddressNumberCorrected":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean indicating if the address provided has been corrected.</p>"
         },
         "PostalCodeDetails":{
@@ -1259,7 +1368,7 @@
         },
         "AccessPoints":{
           "shape":"AccessPointList",
-          "documentation":"<p>Position of the access point represent by longitude and latitude.</p>"
+          "documentation":"<p>Position of the access point represented by longitude and latitude.</p>"
         },
         "TimeZone":{
           "shape":"TimeZone",
@@ -1272,6 +1381,22 @@
         "MatchScores":{
           "shape":"MatchScoreDetails",
           "documentation":"<p>Indicates how well the entire input matches the returned. It is equal to 1 if all input tokens are recognized and matched.</p>"
+        },
+        "ParsedQuery":{
+          "shape":"GeocodeParsedQuery",
+          "documentation":"<p>Free-form text query.</p>"
+        },
+        "Intersections":{
+          "shape":"IntersectionList",
+          "documentation":"<p>All Intersections that are near the provided address.</p>"
+        },
+        "MainAddress":{
+          "shape":"RelatedPlace",
+          "documentation":"<p>The main address corresponding to a place of type Secondary Address.</p>"
+        },
+        "SecondaryAddresses":{
+          "shape":"RelatedPlaceList",
+          "documentation":"<p>All secondary addresses that are associated with a main address. A secondary address is one that includes secondary designators, such as a Suite or Unit Number, Building, or Floor information.</p>"
         }
       },
       "documentation":"<p>The Geocoded result.</p>"
@@ -1284,13 +1409,15 @@
     },
     "GeocodeResultItemPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "GeocodeResultItemTitleString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "GetPlaceAdditionalFeature":{
       "type":"string",
@@ -1298,7 +1425,8 @@
         "TimeZone",
         "Phonemes",
         "Access",
-        "Contact"
+        "Contact",
+        "SecondaryAddresses"
       ]
     },
     "GetPlaceAdditionalFeatureList":{
@@ -1344,7 +1472,7 @@
         },
         "IntendedUse":{
           "shape":"GetPlaceIntendedUse",
-          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p>",
+          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p> <note> <p>Storing the response of an GetPlace query is required to comply with service terms, but charged at a higher cost per request. Please review the <a href=\"https://aws.amazon.com/location/sla/\">user agreement</a> and <a href=\"https://aws.amazon.com/location/pricing/\">service pricing structure</a> to determine the correct setting for your use case.</p> </note>",
           "location":"querystring",
           "locationName":"intended-use"
         },
@@ -1358,7 +1486,7 @@
     },
     "GetPlaceRequestPlaceIdString":{
       "type":"string",
-      "max":200,
+      "max":500,
       "min":0,
       "sensitive":true
     },
@@ -1381,11 +1509,11 @@
         },
         "Title":{
           "shape":"GetPlaceResponseTitleString",
-          "documentation":"<p>The localized display name of this result item based on request parameter <code>language</code>. </p>"
+          "documentation":"<p>The localized display name of this result item based on request parameter <code>language</code>.</p>"
         },
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -1394,7 +1522,7 @@
           "documentation":"<p>The place's address.</p>"
         },
         "AddressNumberCorrected":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean indicating if the address provided has been corrected.</p>"
         },
         "PostalCodeDetails":{
@@ -1448,18 +1576,28 @@
         "Phonemes":{
           "shape":"PhonemeDetails",
           "documentation":"<p>How the various components of the result's address are pronounced in various languages.</p>"
+        },
+        "MainAddress":{
+          "shape":"RelatedPlace",
+          "documentation":"<p>The main address corresponding to a place of type Secondary Address.</p>"
+        },
+        "SecondaryAddresses":{
+          "shape":"RelatedPlaceList",
+          "documentation":"<p>All secondary addresses that are associated with a main address. A secondary address is one that includes secondary designators, such as a Suite or Unit Number, Building, or Floor information.</p>"
         }
       }
     },
     "GetPlaceResponsePlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "GetPlaceResponseTitleString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "Highlight":{
       "type":"structure",
@@ -1477,7 +1615,7 @@
           "documentation":"<p>The highlight's value.</p>"
         }
       },
-      "documentation":"<p>Describes how parts of the result response match the input query.</p>"
+      "documentation":"<p>Indicates the starting and ending index of the text query that match the found title.</p>"
     },
     "HighlightEndIndexInteger":{
       "type":"integer",
@@ -1498,7 +1636,8 @@
     "HighlightValueString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "InternalServerException":{
       "type":"structure",
@@ -1515,6 +1654,47 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "Intersection":{
+      "type":"structure",
+      "required":[
+        "PlaceId",
+        "Title"
+      ],
+      "members":{
+        "PlaceId":{
+          "shape":"IntersectionPlaceIdString",
+          "documentation":"<p>The <code>PlaceId</code> of the place result.</p>"
+        },
+        "Title":{
+          "shape":"IntersectionTitleString",
+          "documentation":"<p>The localized display name of this result item based on request parameter <code>language</code>.</p>"
+        },
+        "Address":{"shape":"Address"},
+        "Position":{
+          "shape":"Position",
+          "documentation":"<p>The position, in longitude and latitude.</p>"
+        },
+        "Distance":{
+          "shape":"DistanceMeters",
+          "documentation":"<p>The distance in meters from the QueryPosition.</p>",
+          "box":true
+        },
+        "RouteDistance":{
+          "shape":"DistanceMeters",
+          "documentation":"<p>The distance from the routing position of the nearby address to the street result.</p>",
+          "box":true
+        },
+        "MapView":{
+          "shape":"BoundingBox",
+          "documentation":"<p>The bounding box enclosing the geometric shape (area or line) that an individual result covers.</p> <p>The bounding box formed is defined as a set of four coordinates: <code>[{westward lng}, {southern lat}, {eastward lng}, {northern lat}]</code> </p>"
+        },
+        "AccessPoints":{
+          "shape":"AccessPointList",
+          "documentation":"<p>Position of the access point represented by longitude and latitude.</p>"
+        }
+      },
+      "documentation":"<p>All Intersections that are near the provided address.</p>"
+    },
     "IntersectionHighlightsList":{
       "type":"list",
       "member":{"shape":"HighlightList"},
@@ -1523,15 +1703,32 @@
     },
     "IntersectionList":{
       "type":"list",
-      "member":{"shape":"IntersectionStreet"},
-      "max":100,
+      "member":{"shape":"Intersection"},
       "min":1
     },
+    "IntersectionPlaceIdString":{
+      "type":"string",
+      "max":500,
+      "min":0,
+      "sensitive":true
+    },
     "IntersectionStreet":{
       "type":"string",
       "max":200,
       "min":0
     },
+    "IntersectionStreetList":{
+      "type":"list",
+      "member":{"shape":"IntersectionStreet"},
+      "max":100,
+      "min":1
+    },
+    "IntersectionTitleString":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "sensitive":true
+    },
     "LanguageTag":{
       "type":"string",
       "max":35,
@@ -1564,7 +1761,7 @@
           "documentation":"<p>List of opening hours in the format they are displayed in. This can vary by result and in most cases represents how the result uniquely formats their opening hours. </p>"
         },
         "OpenNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean which indicates if the result/place is currently open. </p>"
         },
         "Components":{
@@ -1605,22 +1802,26 @@
     "OpeningHoursComponentsOpenDurationString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "OpeningHoursComponentsOpenTimeString":{
       "type":"string",
       "max":21,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "OpeningHoursComponentsRecurrenceString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "OpeningHoursDisplay":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "OpeningHoursDisplayList":{
       "type":"list",
@@ -1634,6 +1835,123 @@
       "max":100,
       "min":1
     },
+    "ParsedQueryComponent":{
+      "type":"structure",
+      "members":{
+        "StartIndex":{
+          "shape":"ParsedQueryComponentStartIndexInteger",
+          "documentation":"<p>Start index of the parsed query component.</p>"
+        },
+        "EndIndex":{
+          "shape":"ParsedQueryComponentEndIndexInteger",
+          "documentation":"<p>End index of the parsed query component.</p>"
+        },
+        "Value":{
+          "shape":"ParsedQueryComponentValueString",
+          "documentation":"<p>Value of the parsed query component.</p>"
+        },
+        "QueryComponent":{
+          "shape":"ParsedQueryComponentQueryComponentString",
+          "documentation":"<p>The address component that the parsed query component corresponds to.</p>"
+        }
+      },
+      "documentation":"<p>Parsed components in the provided QueryText.</p>"
+    },
+    "ParsedQueryComponentEndIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ParsedQueryComponentList":{
+      "type":"list",
+      "member":{"shape":"ParsedQueryComponent"},
+      "max":200,
+      "min":0
+    },
+    "ParsedQueryComponentQueryComponentString":{
+      "type":"string",
+      "max":11,
+      "min":0,
+      "sensitive":true
+    },
+    "ParsedQueryComponentStartIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ParsedQueryComponentValueString":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "sensitive":true
+    },
+    "ParsedQuerySecondaryAddressComponent":{
+      "type":"structure",
+      "required":[
+        "StartIndex",
+        "EndIndex",
+        "Value",
+        "Number",
+        "Designator"
+      ],
+      "members":{
+        "StartIndex":{
+          "shape":"ParsedQuerySecondaryAddressComponentStartIndexInteger",
+          "documentation":"<p>Start index of the parsed secondary address component in the query text.</p>"
+        },
+        "EndIndex":{
+          "shape":"ParsedQuerySecondaryAddressComponentEndIndexInteger",
+          "documentation":"<p>End index of the parsed secondary address component in the query text.</p>"
+        },
+        "Value":{
+          "shape":"ParsedQuerySecondaryAddressComponentValueString",
+          "documentation":"<p>Value of the parsed secondary address component.</p>"
+        },
+        "Number":{
+          "shape":"ParsedQuerySecondaryAddressComponentNumberString",
+          "documentation":"<p>Secondary address number provided in the query.</p>"
+        },
+        "Designator":{
+          "shape":"ParsedQuerySecondaryAddressComponentDesignatorString",
+          "documentation":"<p>Secondary address designator provided in the query.</p>"
+        }
+      },
+      "documentation":"<p>Information about a secondary address component parsed from the query text.</p>"
+    },
+    "ParsedQuerySecondaryAddressComponentDesignatorString":{
+      "type":"string",
+      "max":4,
+      "min":0,
+      "sensitive":true
+    },
+    "ParsedQuerySecondaryAddressComponentEndIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ParsedQuerySecondaryAddressComponentList":{
+      "type":"list",
+      "member":{"shape":"ParsedQuerySecondaryAddressComponent"},
+      "max":200,
+      "min":0
+    },
+    "ParsedQuerySecondaryAddressComponentNumberString":{
+      "type":"string",
+      "max":10,
+      "min":0,
+      "sensitive":true
+    },
+    "ParsedQuerySecondaryAddressComponentStartIndexInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "ParsedQuerySecondaryAddressComponentValueString":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "sensitive":true
+    },
     "PhonemeDetails":{
       "type":"structure",
       "members":{
@@ -1660,7 +1978,7 @@
           "documentation":"<p>A list of <a href=\"https://en.wikipedia.org/wiki/IETF_language_tag\">BCP 47</a> compliant language codes for the results to be rendered in. If there is no data for the result in the requested language, data will be returned in the default language for the entry.</p>"
         },
         "Preferred":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean which indicates if it the preferred pronunciation.</p>"
         }
       },
@@ -1675,7 +1993,8 @@
     "PhonemeTranscriptionValueString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "PlaceType":{
       "type":"string",
@@ -1693,8 +2012,10 @@
         "Street",
         "PointOfInterest",
         "PointAddress",
-        "InterpolatedAddress"
-      ]
+        "InterpolatedAddress",
+        "SecondaryAddress"
+      ],
+      "sensitive":true
     },
     "Position":{
       "type":"list",
@@ -1705,14 +2026,15 @@
     },
     "PostalAuthority":{
       "type":"string",
-      "enum":["Usps"]
+      "enum":["Usps"],
+      "sensitive":true
     },
     "PostalCodeDetails":{
       "type":"structure",
       "members":{
         "PostalCode":{
           "shape":"PostalCodeDetailsPostalCodeString",
-          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should posses. </p>"
+          "documentation":"<p>An alphanumeric string included in a postal address to facilitate mail sorting, such as post code, postcode, or ZIP code for which the result should possess. </p>"
         },
         "PostalAuthority":{
           "shape":"PostalAuthority",
@@ -1742,7 +2064,8 @@
     "PostalCodeDetailsPostalCodeString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "PostalCodeMode":{
       "type":"string",
@@ -1756,7 +2079,8 @@
       "enum":[
         "UspsZip",
         "UspsZipPlus4"
-      ]
+      ],
+      "sensitive":true
     },
     "QueryRefinement":{
       "type":"structure",
@@ -1800,12 +2124,14 @@
     "QueryRefinementOriginalTermString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "QueryRefinementRefinedTermString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "QueryRefinementStartIndexInteger":{
       "type":"integer",
@@ -1828,7 +2154,8 @@
         "PostOfficeBox",
         "Rural",
         "Street"
-      ]
+      ],
+      "sensitive":true
     },
     "Region":{
       "type":"structure",
@@ -1847,7 +2174,8 @@
     "RegionCodeString":{
       "type":"string",
       "max":3,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RegionHighlights":{
       "type":"structure",
@@ -1866,13 +2194,64 @@
     "RegionNameString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
+    },
+    "RelatedPlace":{
+      "type":"structure",
+      "required":[
+        "PlaceId",
+        "PlaceType",
+        "Title"
+      ],
+      "members":{
+        "PlaceId":{
+          "shape":"RelatedPlacePlaceIdString",
+          "documentation":"<p>The <code>PlaceId</code> of the place result.</p>"
+        },
+        "PlaceType":{
+          "shape":"PlaceType",
+          "documentation":"<p>A <code>PlaceType</code> is a category that the result place must belong to.</p>"
+        },
+        "Title":{
+          "shape":"RelatedPlaceTitleString",
+          "documentation":"<p>The localized display name of this result item based on request parameter <code>language</code>.</p>"
+        },
+        "Address":{"shape":"Address"},
+        "Position":{
+          "shape":"Position",
+          "documentation":"<p>The position, in longitude and latitude.</p>"
+        },
+        "AccessPoints":{
+          "shape":"AccessPointList",
+          "documentation":"<p>Position of the access point represented by longitude and latitude.</p>"
+        }
+      },
+      "documentation":"<p>Place that is related to the result item.</p>"
+    },
+    "RelatedPlaceList":{
+      "type":"list",
+      "member":{"shape":"RelatedPlace"},
+      "min":1
+    },
+    "RelatedPlacePlaceIdString":{
+      "type":"string",
+      "max":500,
+      "min":0,
+      "sensitive":true
+    },
+    "RelatedPlaceTitleString":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "sensitive":true
     },
     "ReverseGeocodeAdditionalFeature":{
       "type":"string",
       "enum":[
         "TimeZone",
-        "Access"
+        "Access",
+        "Intersections"
       ]
     },
     "ReverseGeocodeAdditionalFeatureList":{
@@ -1920,7 +2299,7 @@
       "members":{
         "QueryPosition":{
           "shape":"Position",
-          "documentation":"<p>The position, in <code>[lng, lat]</code> for which you are querying nearby resultsfor. Results closer to the position will be ranked higher then results further away from the position</p>"
+          "documentation":"<p>The position, in <code>[lng, lat]</code> for which you are querying nearby results for. Results closer to the position will be ranked higher then results further away from the position</p>"
         },
         "QueryRadius":{
           "shape":"ReverseGeocodeRequestQueryRadiusLong",
@@ -1933,7 +2312,7 @@
         },
         "Filter":{
           "shape":"ReverseGeocodeFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "AdditionalFeatures":{
           "shape":"ReverseGeocodeAdditionalFeatureList",
@@ -1949,7 +2328,7 @@
         },
         "IntendedUse":{
           "shape":"ReverseGeocodeIntendedUse",
-          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p>"
+          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p> <note> <p>Storing the response of an ReverseGeocode query is required to comply with service terms, but charged at a higher cost per request. Please review the <a href=\"https://aws.amazon.com/location/sla/\">user agreement</a> and <a href=\"https://aws.amazon.com/location/pricing/\">service pricing structure</a> to determine the correct setting for your use case.</p> </note>"
         },
         "Key":{
           "shape":"ApiKey",
@@ -1968,7 +2347,8 @@
     "ReverseGeocodeRequestQueryRadiusLong":{
       "type":"long",
       "max":21000000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "ReverseGeocodeResponse":{
       "type":"structure",
@@ -1976,7 +2356,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -2011,7 +2391,7 @@
           "documentation":"<p>The place's address.</p>"
         },
         "AddressNumberCorrected":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean indicating if the address provided has been corrected.</p>"
         },
         "PostalCodeDetails":{
@@ -2040,7 +2420,7 @@
         },
         "AccessPoints":{
           "shape":"AccessPointList",
-          "documentation":"<p>Position of the access point represent by longitude and latitude.</p>"
+          "documentation":"<p>Position of the access point represented by longitude and latitude.</p>"
         },
         "TimeZone":{
           "shape":"TimeZone",
@@ -2049,6 +2429,10 @@
         "PoliticalView":{
           "shape":"CountryCode3",
           "documentation":"<p>The alpha-2 or alpha-3 character code for the political view of a country. The political view applies to the results of the request to represent unresolved territorial claims through the point of view of the specified country.</p>"
+        },
+        "Intersections":{
+          "shape":"IntersectionList",
+          "documentation":"<p>All Intersections that are near the provided address.</p>"
         }
       },
       "documentation":"<p>The returned location from the <code>Reverse Geocode</code> action.</p>"
@@ -2061,13 +2445,15 @@
     },
     "ReverseGeocodeResultItemPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "ReverseGeocodeResultItemTitleString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SearchNearbyAdditionalFeature":{
       "type":"string",
@@ -2120,7 +2506,7 @@
           "documentation":"<p>Food types that results are excluded from.</p>"
         }
       },
-      "documentation":"<p>SearchNearby structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+      "documentation":"<p>SearchNearby structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
     },
     "SearchNearbyIntendedUse":{
       "type":"string",
@@ -2135,11 +2521,11 @@
       "members":{
         "QueryPosition":{
           "shape":"Position",
-          "documentation":"<p>The position, in <code>[lng, lat]</code> for which you are querying nearby resultsfor. Results closer to the position will be ranked higher then results further away from the position</p>"
+          "documentation":"<p>The position, in <code>[lng, lat]</code> for which you are querying nearby results for. Results closer to the position will be ranked higher then results further away from the position</p>"
         },
         "QueryRadius":{
           "shape":"SearchNearbyRequestQueryRadiusLong",
-          "documentation":"<p>The maximum distance in meters from the QueryPosition from which a result will be returned.</p>",
+          "documentation":"<p>The maximum distance in meters from the QueryPosition from which a result will be returned.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>",
           "box":true
         },
         "MaxResults":{
@@ -2148,7 +2534,7 @@
         },
         "Filter":{
           "shape":"SearchNearbyFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "AdditionalFeatures":{
           "shape":"SearchNearbyAdditionalFeatureList",
@@ -2164,7 +2550,7 @@
         },
         "IntendedUse":{
           "shape":"SearchNearbyIntendedUse",
-          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p>"
+          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p> <note> <p>Storing the response of an SearchNearby query is required to comply with service terms, but charged at a higher cost per request. Please review the <a href=\"https://aws.amazon.com/location/sla/\">user agreement</a> and <a href=\"https://aws.amazon.com/location/pricing/\">service pricing structure</a> to determine the correct setting for your use case.</p> </note>"
         },
         "NextToken":{
           "shape":"Token",
@@ -2187,7 +2573,8 @@
     "SearchNearbyRequestQueryRadiusLong":{
       "type":"long",
       "max":21000000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "SearchNearbyResponse":{
       "type":"structure",
@@ -2195,7 +2582,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -2234,7 +2621,7 @@
           "documentation":"<p>The place's address.</p>"
         },
         "AddressNumberCorrected":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean indicating if the address provided has been corrected.</p>"
         },
         "Position":{
@@ -2300,13 +2687,15 @@
     },
     "SearchNearbyResultItemPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "SearchNearbyResultItemTitleString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SearchTextAdditionalFeature":{
       "type":"string",
@@ -2336,7 +2725,7 @@
           "documentation":"<p> A list of countries that all results must be in. Countries are represented by either their alpha-2 or alpha-3 character codes.</p>"
         }
       },
-      "documentation":"<p>SearchText structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+      "documentation":"<p>SearchText structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
     },
     "SearchTextIntendedUse":{
       "type":"string",
@@ -2350,11 +2739,11 @@
       "members":{
         "QueryText":{
           "shape":"SearchTextRequestQueryTextString",
-          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p>"
+          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "QueryId":{
           "shape":"SearchTextRequestQueryIdString",
-          "documentation":"<p>The query Id.</p>"
+          "documentation":"<p>The query Id returned by the suggest API. If passed in the request, the SearchText API will preform a SearchText query with the improved query terms for the original query made to the suggest API.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "MaxResults":{
           "shape":"SearchTextRequestMaxResultsInteger",
@@ -2366,7 +2755,7 @@
         },
         "Filter":{
           "shape":"SearchTextFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "AdditionalFeatures":{
           "shape":"SearchTextAdditionalFeatureList",
@@ -2382,7 +2771,7 @@
         },
         "IntendedUse":{
           "shape":"SearchTextIntendedUse",
-          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p>"
+          "documentation":"<p>Indicates if the results will be stored. Defaults to <code>SingleUse</code>, if left empty.</p> <note> <p>Storing the response of an SearchText query is required to comply with service terms, but charged at a higher cost per request. Please review the <a href=\"https://aws.amazon.com/location/sla/\">user agreement</a> and <a href=\"https://aws.amazon.com/location/pricing/\">service pricing structure</a> to determine the correct setting for your use case.</p> </note>"
         },
         "NextToken":{
           "shape":"Token",
@@ -2404,7 +2793,7 @@
     },
     "SearchTextRequestQueryIdString":{
       "type":"string",
-      "max":400,
+      "max":500,
       "min":1,
       "sensitive":true
     },
@@ -2420,7 +2809,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -2459,7 +2848,7 @@
           "documentation":"<p>The place's address.</p>"
         },
         "AddressNumberCorrected":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Boolean indicating if the address provided has been corrected.</p>"
         },
         "Position":{
@@ -2525,24 +2914,68 @@
     },
     "SearchTextResultItemPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "SearchTextResultItemTitleString":{
       "type":"string",
       "max":200,
+      "min":0,
+      "sensitive":true
+    },
+    "SecondaryAddressComponent":{
+      "type":"structure",
+      "required":["Number"],
+      "members":{
+        "Number":{
+          "shape":"SecondaryAddressComponentNumberString",
+          "documentation":"<p>Number that uniquely identifies a secondary address.</p>"
+        }
+      },
+      "documentation":"<p>Components that correspond to secondary identifiers on an address. The only component type supported currently is Unit.</p>"
+    },
+    "SecondaryAddressComponentList":{
+      "type":"list",
+      "member":{"shape":"SecondaryAddressComponent"},
+      "max":1,
       "min":0
     },
+    "SecondaryAddressComponentMatchScore":{
+      "type":"structure",
+      "members":{
+        "Number":{
+          "shape":"MatchScore",
+          "documentation":"<p>Match score for the secondary address number.</p>"
+        }
+      },
+      "documentation":"<p>Match score for a secondary address component in the result.</p>"
+    },
+    "SecondaryAddressComponentMatchScoreList":{
+      "type":"list",
+      "member":{"shape":"SecondaryAddressComponentMatchScore"}
+    },
+    "SecondaryAddressComponentNumberString":{
+      "type":"string",
+      "max":10,
+      "min":0,
+      "sensitive":true
+    },
+    "SensitiveBoolean":{
+      "type":"boolean",
+      "box":true,
+      "sensitive":true
+    },
     "StreetComponents":{
       "type":"structure",
       "members":{
         "BaseName":{
           "shape":"StreetComponentsBaseNameString",
-          "documentation":"<p>Base name part of the street name. </p> <p>Example: Younge from the “Younge street\".</p>"
+          "documentation":"<p>Base name part of the street name. </p> <p>Example: Younge from the \"Younge street\".</p>"
         },
         "Type":{
           "shape":"StreetComponentsTypeString",
-          "documentation":"<p>Street type part of the street name. </p> <p>Example: <code>“avenue\"</code>.</p>"
+          "documentation":"<p>Street type part of the street name. </p> <p>Example: <code>\"avenue\"</code>.</p>"
         },
         "TypePlacement":{
           "shape":"TypePlacement",
@@ -2550,7 +2983,7 @@
         },
         "TypeSeparator":{
           "shape":"TypeSeparator",
-          "documentation":"<p>What character(s) separates the string from its type. </p>"
+          "documentation":"<p>Defines a separator character such as <code>\"\"</code> or <code>\" \"</code> between the base name and type.</p>"
         },
         "Prefix":{
           "shape":"StreetComponentsPrefixString",
@@ -2574,12 +3007,14 @@
     "StreetComponentsBaseNameString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StreetComponentsDirectionString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StreetComponentsList":{
       "type":"list",
@@ -2590,17 +3025,20 @@
     "StreetComponentsPrefixString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StreetComponentsSuffixString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StreetComponentsTypeString":{
       "type":"string",
       "max":50,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "String":{"type":"string"},
     "SubRegion":{
@@ -2620,7 +3058,8 @@
     "SubRegionCodeString":{
       "type":"string",
       "max":3,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SubRegionHighlights":{
       "type":"structure",
@@ -2639,7 +3078,8 @@
     "SubRegionNameString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SuggestAdditionalFeature":{
       "type":"string",
@@ -2679,7 +3119,7 @@
           "documentation":"<p> A list of countries that all results must be in. Countries are represented by either their alpha-2 or alpha-3 character codes.</p>"
         }
       },
-      "documentation":"<p>SuggestFilter structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+      "documentation":"<p>SuggestFilter structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
     },
     "SuggestHighlights":{
       "type":"structure",
@@ -2763,27 +3203,29 @@
     },
     "SuggestPlaceResultPlaceIdString":{
       "type":"string",
-      "max":200,
-      "min":1
+      "max":500,
+      "min":1,
+      "sensitive":true
     },
     "SuggestQueryResult":{
       "type":"structure",
       "members":{
         "QueryId":{
           "shape":"SuggestQueryResultQueryIdString",
-          "documentation":"<p>QueryId can be used to complete a follow up query through the SearchText API. The QueryId retains context from the original Suggest request such as filters, political view and language. See the SearchText API documentation for more details <a href=\"https://docs.aws.amazon.com/latest/APIReference/API_geoplaces_SearchText.html\">SearchText API docs</a>.</p>"
+          "documentation":"<p>QueryId can be used to complete a follow up query through the SearchText API. The QueryId retains context from the original Suggest request such as filters, political view and language. See the SearchText API documentation for more details <a href=\"https://docs.aws.amazon.com/latest/APIReference/API_geoplaces_SearchText.html\">SearchText API docs</a>.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "QueryType":{
           "shape":"QueryType",
-          "documentation":"<p>The query type. Category qeuries will search for places which have an entry matching the given category, for example \"doctor office\". BusinessChain queries will search for instances of a given business.</p>"
+          "documentation":"<p>The query type. Category queries will search for places which have an entry matching the given category, for example \"doctor office\". BusinessChain queries will search for instances of a given business.</p>"
         }
       },
       "documentation":"<p>The suggested query results.</p>"
     },
     "SuggestQueryResultQueryIdString":{
       "type":"string",
-      "max":400,
-      "min":0
+      "max":500,
+      "min":0,
+      "sensitive":true
     },
     "SuggestRequest":{
       "type":"structure",
@@ -2791,7 +3233,7 @@
       "members":{
         "QueryText":{
           "shape":"SuggestRequestQueryTextString",
-          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p>"
+          "documentation":"<p>The free-form text query to match addresses against. This is usually a partially typed address from an end user in an address box or form.</p> <note> <p>The fields <code>QueryText</code>, and <code>QueryID</code> are mutually exclusive.</p> </note>"
         },
         "MaxResults":{
           "shape":"SuggestRequestMaxResultsInteger",
@@ -2807,7 +3249,7 @@
         },
         "Filter":{
           "shape":"SuggestFilter",
-          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must posses in order to be returned as a result.</p>"
+          "documentation":"<p>A structure which contains a set of inclusion/exclusion properties that results must possess in order to be returned as a result.</p>"
         },
         "AdditionalFeatures":{
           "shape":"SuggestAdditionalFeatureList",
@@ -2857,7 +3299,7 @@
       "members":{
         "PricingBucket":{
           "shape":"String",
-          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more inforamtion on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
+          "documentation":"<p>The pricing bucket for which the query is charged at.</p> <p>For more information on pricing, please visit <a href=\"https://aws.amazon.com/location/pricing/\">Amazon Location Service Pricing</a>.</p>",
           "location":"header",
           "locationName":"x-amz-geo-pricing-bucket"
         },
@@ -2907,7 +3349,8 @@
     "SuggestResultItemTitleString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SuggestResultItemType":{
       "type":"string",
@@ -2955,16 +3398,19 @@
     "TimeZoneNameString":{
       "type":"string",
       "max":200,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TimeZoneOffsetSecondsLong":{
       "type":"long",
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TimeZoneOffsetString":{
       "type":"string",
       "max":6,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "Token":{
       "type":"string",
@@ -3075,7 +3521,8 @@
         "Military",
         "PostOfficeBoxes",
         "Unique"
-      ]
+      ],
+      "sensitive":true
     }
   },
   "documentation":"<p> The Places API enables powerful location search and geocoding capabilities for your applications, offering global coverage with rich, detailed information. Key features include: </p> <ul> <li> <p>Forward and reverse geocoding for addresses and coordinates</p> </li> <li> <p>Comprehensive place searches with detailed information, including:</p> <ul> <li> <p>Business names and addresses</p> </li> <li> <p>Contact information</p> </li> <li> <p>Hours of operation</p> </li> <li> <p>POI (Points of Interest) categories</p> </li> <li> <p>Food types for restaurants</p> </li> <li> <p>Chain affiliation for relevant businesses</p> </li> </ul> </li> <li> <p>Global data coverage with a wide range of POI categories</p> </li> <li> <p>Regular data updates to ensure accuracy and relevance</p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/geo-routes/2020-11-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/geo-routes/2020-11-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/geo-routes/2020-11-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-routes/2020-11-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/geo-routes/2020-11-19/service-2.json 2.31.35-1/awscli/botocore/data/geo-routes/2020-11-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/geo-routes/2020-11-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/geo-routes/2020-11-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -45,7 +45,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Calculates route matrix containing the results for all pairs of Origins to Destinations. Each row corresponds to one entry in Origins. Each entry in the row corresponds to the route from that entry in Origins to an entry in Destinations positions.</p>"
+      "documentation":"<p> Use <code>CalculateRouteMatrix</code> to compute results for all pairs of Origins to Destinations. Each row corresponds to one entry in Origins. Each entry in the row corresponds to the route from that entry in Origins to an entry in Destinations positions.</p>"
     },
     "CalculateRoutes":{
       "name":"CalculateRoutes",
@@ -62,7 +62,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Calculates a route given the following required parameters: <code>Origin</code> and <code>Destination</code>.</p>"
+      "documentation":"<p> <code>CalculateRoutes</code> computes routes given the following required parameters: <code>Origin</code> and <code>Destination</code>.</p>"
     },
     "OptimizeWaypoints":{
       "name":"OptimizeWaypoints",
@@ -79,7 +79,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Calculates the optimal order to travel between a set of waypoints to minimize either the travel time or the distance travelled during the journey, based on road network restrictions and the traffic pattern data.</p>"
+      "documentation":"<p> <code>OptimizeWaypoints</code> calculates the optimal order to travel between a set of waypoints to minimize either the travel time or the distance travelled during the journey, based on road network restrictions and the traffic pattern data.</p>"
     },
     "SnapToRoads":{
       "name":"SnapToRoads",
@@ -96,7 +96,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>The SnapToRoads action matches GPS trace to roads most likely traveled on.</p>"
+      "documentation":"<p> <code>SnapToRoads</code> matches GPS trace to roads most likely traveled on.</p>"
     }
   },
   "shapes":{
@@ -126,10 +126,6 @@
       "type":"list",
       "member":{"shape":"WaypointIndex"}
     },
-    "Boolean":{
-      "type":"boolean",
-      "box":true
-    },
     "BoundingBox":{
       "type":"list",
       "member":{"shape":"Double"},
@@ -143,7 +139,7 @@
       "members":{
         "Allow":{
           "shape":"IsolineAllowOptions",
-          "documentation":"<p>Features that are allowed while calculating. a route</p>"
+          "documentation":"<p>Features that are allowed while calculating an isoline.</p>"
         },
         "ArrivalTime":{
           "shape":"TimestampWithTimezoneOffset",
@@ -154,7 +150,7 @@
           "documentation":"<p>Features that are avoided while calculating a route. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, it violates the avoidance and the returned response produces a notice for the violation.</p>"
         },
         "DepartNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Uses the current time as the time of departure.</p>"
         },
         "DepartureTime":{
@@ -175,7 +171,7 @@
         },
         "IsolineGranularity":{
           "shape":"IsolineGranularityOptions",
-          "documentation":"<p>Defines the granularity of the returned Isoline</p>"
+          "documentation":"<p>Defines the granularity of the returned Isoline.</p>"
         },
         "Key":{
           "shape":"ApiKey",
@@ -201,7 +197,7 @@
         },
         "Thresholds":{
           "shape":"IsolineThresholds",
-          "documentation":"<p>Threshold to be used for the isoline calculation. Up to 3 thresholds per provided type can be requested.</p>"
+          "documentation":"<p>Threshold to be used for the isoline calculation. Up to 3 thresholds per provided type can be requested.</p> <p> You incur a calculation charge for each threshold. Using a large amount of thresholds in a request can lead you to incur unexpected charges. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/routes-pricing.html`\"> Amazon Location's pricing page</a> for more information.</p>"
         },
         "Traffic":{
           "shape":"IsolineTrafficOptions",
@@ -267,14 +263,14 @@
       "members":{
         "Allow":{
           "shape":"RouteMatrixAllowOptions",
-          "documentation":"<p>Features that are allowed while calculating. a route</p>"
+          "documentation":"<p>Features that are allowed while calculating a route.</p>"
         },
         "Avoid":{
           "shape":"RouteMatrixAvoidanceOptions",
           "documentation":"<p>Features that are avoided while calculating a route. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, it violates the avoidance and the returned response produces a notice for the violation.</p>"
         },
         "DepartNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Uses the current time as the time of departure.</p>"
         },
         "DepartureTime":{
@@ -283,7 +279,7 @@
         },
         "Destinations":{
           "shape":"CalculateRouteMatrixRequestDestinationsList",
-          "documentation":"<p>List of destinations for the route.</p>"
+          "documentation":"<p>List of destinations for the route.</p> <note> <p>Route calculations are billed for each origin and destination pair. If you use a large matrix of origins and destinations, your costs will increase accordingly. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/routes-pricing.html`\"> Amazon Location's pricing page</a> for more information.</p> </note>"
         },
         "Exclude":{
           "shape":"RouteMatrixExclusionOptions",
@@ -301,7 +297,7 @@
         },
         "Origins":{
           "shape":"CalculateRouteMatrixRequestOriginsList",
-          "documentation":"<p>The position in longitude and latitude for the origin.</p>"
+          "documentation":"<p>The position in longitude and latitude for the origin.</p> <note> <p>Route calculations are billed for each origin and destination pair. Using a large amount of Origins in a request can lead you to incur unexpected charges. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/routes-pricing.html`\"> Amazon Location's pricing page</a> for more information.</p> </note>"
         },
         "RoutingBoundary":{
           "shape":"RouteMatrixBoundary",
@@ -374,7 +370,7 @@
       "members":{
         "Allow":{
           "shape":"RouteAllowOptions",
-          "documentation":"<p>Features that are allowed while calculating. a route</p>"
+          "documentation":"<p>Features that are allowed while calculating a route.</p>"
         },
         "ArrivalTime":{
           "shape":"TimestampWithTimezoneOffset",
@@ -385,7 +381,7 @@
           "documentation":"<p>Features that are avoided while calculating a route. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, it violates the avoidance and the returned response produces a notice for the violation.</p>"
         },
         "DepartNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Uses the current time as the time of departure.</p>"
         },
         "DepartureTime":{
@@ -468,7 +464,7 @@
         },
         "TravelStepType":{
           "shape":"RouteTravelStepType",
-          "documentation":"<p>Type of step returned by the response. Default provides basic steps intended for web based applications. TurnByTurn provides detailed instructions with more granularity intended for a turn based naviagtion system.</p>"
+          "documentation":"<p>Type of step returned by the response. Default provides basic steps intended for web based applications. TurnByTurn provides detailed instructions with more granularity intended for a turn based navigation system.</p>"
         },
         "Waypoints":{
           "shape":"RouteWaypointList",
@@ -529,13 +525,18 @@
           "documentation":"<p>Center of the Circle defined in longitude and latitude coordinates.</p> <p>Example: <code>[-123.1174, 49.2847]</code> represents the position with longitude <code>-123.1174</code> and latitude <code>49.2847</code>. </p>"
         },
         "Radius":{
-          "shape":"Double",
+          "shape":"SensitiveDouble",
           "documentation":"<p>Radius of the Circle.</p> <p> <b>Unit</b>: <code>meters</code> </p>"
         }
       },
       "documentation":"<p>Geometry defined as a circle. When request routing boundary was set as <code>AutoCircle</code>, the response routing boundary will return <code>Circle</code> derived from the <code>AutoCircle</code> settings.</p>",
       "sensitive":true
     },
+    "ClusterIndex":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "Corridor":{
       "type":"structure",
       "required":[
@@ -559,13 +560,15 @@
       "type":"string",
       "max":3,
       "min":2,
-      "pattern":"([A-Z]{2}|[A-Z]{3})"
+      "pattern":"([A-Z]{2}|[A-Z]{3})",
+      "sensitive":true
     },
     "CountryCode3":{
       "type":"string",
       "max":3,
       "min":3,
-      "pattern":"[A-Z]{3}"
+      "pattern":"[A-Z]{3}",
+      "sensitive":true
     },
     "CountryCodeList":{
       "type":"list",
@@ -589,17 +592,20 @@
         "Friday",
         "Saturday",
         "Sunday"
-      ]
+      ],
+      "sensitive":true
     },
     "DimensionCentimeters":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "DistanceMeters":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "DistanceThresholdList":{
       "type":"list",
@@ -610,7 +616,8 @@
     "DistanceThresholdListMemberLong":{
       "type":"long",
       "max":300000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "Double":{
       "type":"double",
@@ -619,7 +626,8 @@
     "DurationSeconds":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "GeometryFormat":{
       "type":"string",
@@ -631,7 +639,8 @@
     "Heading":{
       "type":"double",
       "max":360.0,
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "IndexList":{
       "type":"list",
@@ -686,15 +695,15 @@
       "type":"structure",
       "members":{
         "Hot":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating an isoline.</p> <p>Default value: <code>false</code> </p>"
         },
         "Hov":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating an isoline.</p> <p>Default value: <code>false</code> </p>"
         }
       },
-      "documentation":"<p>Features that are allowed while calculating. a route</p>"
+      "documentation":"<p>Features that are allowed while calculating an isoline.</p>"
     },
     "IsolineAvoidanceArea":{
       "type":"structure",
@@ -702,7 +711,7 @@
       "members":{
         "Except":{
           "shape":"IsolineAvoidanceAreaGeometryList",
-          "documentation":"<p>Exceptions to the provided avoidance geometry, to be included while calculating the route.</p>"
+          "documentation":"<p>Exceptions to the provided avoidance geometry, to be included while calculating an isoline.</p>"
         },
         "Geometry":{
           "shape":"IsolineAvoidanceAreaGeometry",
@@ -735,7 +744,7 @@
           "documentation":"<p>A list of PolylinePolygon's that are excluded for calculating isolines, the list can only contain 1 polygon. For more information on polyline encoding, see <a href=\"https://github.com/heremaps/flexiblepolyline/blob/master/README.md\">https://github.com/heremaps/flexiblepolyline/blob/master/README.md</a>. </p>"
         }
       },
-      "documentation":"<p>The avoidance geometry, to be included while calculating the route.</p>"
+      "documentation":"<p>The avoidance geometry, to be included while calculating an isoline.</p>"
     },
     "IsolineAvoidanceAreaGeometryList":{
       "type":"list",
@@ -765,31 +774,31 @@
           "documentation":"<p>Areas to be avoided.</p>"
         },
         "CarShuttleTrains":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid car-shuttle-trains while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid car-shuttle-trains while calculating an isoline.</p>"
         },
         "ControlledAccessHighways":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid controlled access highways while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid controlled access highways while calculating an isoline.</p>"
         },
         "DirtRoads":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid dirt roads while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid dirt roads while calculating an isoline.</p>"
         },
         "Ferries":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid ferries while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid ferries while calculating an isoline.</p>"
         },
         "SeasonalClosure":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid roads that have seasonal closure while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid roads that have seasonal closure while calculating an isoline.</p>"
         },
         "TollRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TollTransponders":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TruckRoadTypes":{
@@ -797,11 +806,11 @@
           "documentation":"<p>Truck road type identifiers. <code>BK1</code> through <code>BK4</code> apply only to Sweden. <code>A2,A4,B2,B4,C,D,ET2,ET4</code> apply only to Mexico.</p> <note> <p>There are currently no other supported values as of 26th April 2024.</p> </note>"
         },
         "Tunnels":{
-          "shape":"Boolean",
-          "documentation":"<p>Avoid tunnels while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Avoid tunnels while calculating an isoline.</p>"
         },
         "UTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "ZoneCategories":{
@@ -809,7 +818,7 @@
           "documentation":"<p>Zone categories to be avoided.</p>"
         }
       },
-      "documentation":"<p>Features that are avoided while calculating a route. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, it violates the avoidance and the returned response produces a notice for the violation.</p>"
+      "documentation":"<p>Features that are avoided while calculating isolines. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, it violates the avoidance and the returned response produces a notice for the violation.</p>"
     },
     "IsolineAvoidanceZoneCategory":{
       "type":"structure",
@@ -848,17 +857,19 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Options for vehicles.</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Car</code>.</p>"
     },
     "IsolineCarOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "IsolineCarOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineConnection":{
       "type":"structure",
@@ -900,7 +911,7 @@
           "documentation":"<p>An ordered list of positions used to plot a route on a map in a lossy compression format.</p> <note> <p>LineString and Polyline are mutually exclusive properties.</p> </note>"
         }
       },
-      "documentation":"<p>Geometry of the connection between different Isoline components.</p>"
+      "documentation":"<p>Geometry of the connection between different isoline components.</p>"
     },
     "IsolineConnectionList":{
       "type":"list",
@@ -939,7 +950,8 @@
         "Electric",
         "InternalCombustion",
         "PluginHybrid"
-      ]
+      ],
+      "sensitive":true
     },
     "IsolineGranularityOptions":{
       "type":"structure",
@@ -950,7 +962,7 @@
         },
         "MaxResolution":{
           "shape":"DistanceMeters",
-          "documentation":"<p>Maximum resolution of the returned isoline.</p> <p> <b>Unit</b>: <code>centimeters</code> </p>"
+          "documentation":"<p>Maximum resolution of the returned isoline.</p> <p> <b>Unit</b>: <code>meters</code> </p>"
         }
       },
       "documentation":"<p>Isoline granularity related options.</p>"
@@ -974,7 +986,8 @@
         "Poison",
         "PoisonousInhalation",
         "Radioactive"
-      ]
+      ],
+      "sensitive":true
     },
     "IsolineHazardousCargoTypeList":{
       "type":"list",
@@ -1038,7 +1051,7 @@
           "documentation":"<p>Options to configure matching the provided position to a side of the street.</p>"
         }
       },
-      "documentation":"<p>Options for the property.</p>"
+      "documentation":"<p>Origin related options.</p>"
     },
     "IsolineScooterOptions":{
       "type":"structure",
@@ -1061,17 +1074,19 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Options for the property.</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p>"
     },
     "IsolineScooterOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "IsolineScooterOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineShapeGeometry":{
       "type":"structure",
@@ -1118,7 +1133,7 @@
           "documentation":"<p>Time to be used for the isoline calculation.</p>"
         }
       },
-      "documentation":"<p>Threshold to be used for the isoline calculation. Up to 3 thresholds per provided type can be requested.</p>"
+      "documentation":"<p>Threshold to be used for the isoline calculation. Up to 5 thresholds per provided type can be requested.</p>"
     },
     "IsolineTrafficOptions":{
       "type":"structure",
@@ -1151,13 +1166,15 @@
     "IsolineTrailerOptionsAxleCountInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineTrailerOptionsTrailerCountInteger":{
       "type":"integer",
       "box":true,
       "max":255,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineTravelMode":{
       "type":"string",
@@ -1177,7 +1194,7 @@
         },
         "Scooter":{
           "shape":"IsolineScooterOptions",
-          "documentation":"<p>Travel mode options when the provided travel mode is \"Scooter\"</p>"
+          "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p> <note> <p>When travel mode is set to <code>Scooter</code>, then the avoidance option <code>ControlledAccessHighways</code> defaults to <code>true</code>.</p> </note>"
         },
         "Truck":{
           "shape":"IsolineTruckOptions",
@@ -1273,43 +1290,51 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":2
+      "min":2,
+      "sensitive":true
     },
     "IsolineTruckOptionsHeightAboveFirstAxleLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "IsolineTruckOptionsHeightLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "IsolineTruckOptionsLengthLong":{
       "type":"long",
       "max":30000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "IsolineTruckOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "IsolineTruckOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineTruckOptionsTireCountInteger":{
       "type":"integer",
       "box":true,
       "max":255,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "IsolineTruckOptionsWidthLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "IsolineTruckType":{
       "type":"string",
@@ -1327,7 +1352,8 @@
           "documentation":"<p>The last character of the License Plate.</p>"
         }
       },
-      "documentation":"<p>The vehicle license plate.</p>"
+      "documentation":"<p>The vehicle license plate.</p>",
+      "sensitive":true
     },
     "IsolineVehicleLicensePlateLastCharacterString":{
       "type":"string",
@@ -1371,7 +1397,7 @@
           "documentation":"<p>A list of BCP 47 compliant language codes for the results to be rendered in. The request uses the regional default as the fallback if the requested language can't be provided.</p>"
         },
         "Value":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The value of the localized string.</p>"
         }
       },
@@ -1401,7 +1427,11 @@
       "members":{
         "Avoid":{
           "shape":"WaypointOptimizationAvoidanceOptions",
-          "documentation":"<p>Features that are avoided while calculating a route. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, this setting is ignored.</p>"
+          "documentation":"<p>Features that are avoided. Avoidance is on a best-case basis. If an avoidance can't be satisfied for a particular case, this setting is ignored.</p>"
+        },
+        "Clustering":{
+          "shape":"WaypointOptimizationClusteringOptions",
+          "documentation":"<p>Clustering allows you to specify how nearby waypoints can be clustered to improve the optimized sequence.</p>"
         },
         "DepartureTime":{
           "shape":"TimestampWithTimezoneOffset",
@@ -1565,7 +1595,8 @@
         "Poison",
         "PoisonousInhalation",
         "Radioactive"
-      ]
+      ],
+      "sensitive":true
     },
     "RoadSnapHazardousCargoTypeList":{
       "type":"list",
@@ -1586,7 +1617,7 @@
           "documentation":"<p>Code corresponding to the issue.</p>"
         },
         "Title":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The notice title.</p>"
         },
         "TracePointIndexes":{
@@ -1606,7 +1637,8 @@
         "TracePointsOutOfSequence",
         "TracePointsSpeedEstimated",
         "TracePointsSpeedIgnored"
-      ]
+      ],
+      "sensitive":true
     },
     "RoadSnapNoticeList":{
       "type":"list",
@@ -1653,7 +1685,8 @@
       "type":"double",
       "box":true,
       "max":1,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoadSnapSnappedTracePointList":{
       "type":"list",
@@ -1686,7 +1719,8 @@
       "type":"list",
       "member":{"shape":"Integer"},
       "max":1000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RoadSnapTrailerOptions":{
       "type":"structure",
@@ -1702,7 +1736,8 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoadSnapTravelMode":{
       "type":"string",
@@ -1760,17 +1795,20 @@
     "RoadSnapTruckOptionsHeightLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoadSnapTruckOptionsLengthLong":{
       "type":"long",
       "max":30000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoadSnapTruckOptionsWidthLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoundaboutAngle":{
       "type":"double",
@@ -1803,15 +1841,15 @@
       "type":"structure",
       "members":{
         "Hot":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating the route.</p> <p>Default value: <code>false</code> </p>"
         },
         "Hov":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating the route.</p> <p>Default value: <code>false</code> </p>"
         }
       },
-      "documentation":"<p>Features that are allowed while calculating. a route</p>"
+      "documentation":"<p>Features that are allowed while calculating a route.</p>"
     },
     "RouteAvoidanceArea":{
       "type":"structure",
@@ -1879,31 +1917,31 @@
           "documentation":"<p>Areas to be avoided.</p>"
         },
         "CarShuttleTrains":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid car-shuttle-trains while calculating the route.</p>"
         },
         "ControlledAccessHighways":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid controlled access highways while calculating the route.</p>"
         },
         "DirtRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid dirt roads while calculating the route.</p>"
         },
         "Ferries":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid ferries while calculating the route.</p>"
         },
         "SeasonalClosure":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid roads that have seasonal closure while calculating the route.</p>"
         },
         "TollRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TollTransponders":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TruckRoadTypes":{
@@ -1911,11 +1949,11 @@
           "documentation":"<p>Truck road type identifiers. <code>BK1</code> through <code>BK4</code> apply only to Sweden. <code>A2,A4,B2,B4,C,D,ET2,ET4</code> apply only to Mexico.</p> <note> <p>There are currently no other supported values as of 26th April 2024.</p> </note>"
         },
         "Tunnels":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid tunnels while calculating the route.</p>"
         },
         "UTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "ZoneCategories":{
@@ -1923,7 +1961,7 @@
           "documentation":"<p>Zone categories to be avoided.</p>"
         }
       },
-      "documentation":"<p>Options related to areas to be avoided.</p>"
+      "documentation":"<p>Specifies options for areas to avoid when calculating the route. This is a best-effort avoidance setting, meaning the router will try to honor the avoidance preferences but may still include restricted areas if no feasible alternative route exists. If avoidance options are not followed, the response will indicate that the avoidance criteria were violated.</p>"
     },
     "RouteAvoidanceZoneCategory":{
       "type":"structure",
@@ -1963,17 +2001,19 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Travel mode options when the provided travel mode is \"Car\"</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Car</code>.</p>"
     },
     "RouteCarOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteCarOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteContinueHighwayStepDetails":{
       "type":"structure",
@@ -2017,7 +2057,7 @@
           "documentation":"<p>Avoids actions for the provided distance. This is typically to consider for users in moving vehicles who may not have sufficient time to make an action at an origin or a destination.</p>"
         },
         "AvoidUTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "Heading":{
@@ -2041,7 +2081,8 @@
     },
     "RouteDestinationOptionsAvoidActionsForDistanceLong":{
       "type":"long",
-      "max":2000
+      "max":2000,
+      "sensitive":true
     },
     "RouteDirection":{
       "type":"string",
@@ -2050,7 +2091,8 @@
         "North",
         "South",
         "West"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteDriverOptions":{
       "type":"structure",
@@ -2089,11 +2131,11 @@
       "required":["Type"],
       "members":{
         "Co2EmissionClass":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The CO 2 emission classes.</p>"
         },
         "Type":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Type of the emission.</p> <p> <b>Valid values</b>: <code>Euro1, Euro2, Euro3, Euro4, Euro5, Euro6, EuroEev</code> </p>"
         }
       },
@@ -2105,7 +2147,8 @@
         "Electric",
         "InternalCombustion",
         "PluginHybrid"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteEnterHighwayStepDetails":{
       "type":"structure",
@@ -2139,7 +2182,7 @@
           "documentation":"<p>List of countries to be avoided defined by two-letter or three-letter country codes.</p>"
         }
       },
-      "documentation":"<p>Exclusion options for the route.</p>"
+      "documentation":"<p>Specifies strict exclusion options for the route calculation. This setting mandates that the router will avoid any routes that include the specified options, rather than merely attempting to minimize them.</p>"
     },
     "RouteExitStepDetails":{
       "type":"structure",
@@ -2172,7 +2215,8 @@
       "type":"integer",
       "box":true,
       "max":12,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteFerryAfterTravelStep":{
       "type":"structure",
@@ -2186,7 +2230,7 @@
           "documentation":"<p>Duration of the step.</p> <p> <b>Unit</b>: <code>seconds</code> </p>"
         },
         "Instruction":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief description of the step in the requested language.</p> <note> <p>Only available when the TravelStepType is Default.</p> </note>"
         },
         "Type":{
@@ -2202,7 +2246,8 @@
     },
     "RouteFerryAfterTravelStepType":{
       "type":"string",
-      "enum":["Deboard"]
+      "enum":["Deboard"],
+      "sensitive":true
     },
     "RouteFerryArrival":{
       "type":"structure",
@@ -2231,7 +2276,7 @@
           "documentation":"<p>Duration of the step.</p> <p> <b>Unit</b>: <code>seconds</code> </p>"
         },
         "Instruction":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief description of the step in the requested language.</p> <note> <p>Only available when the TravelStepType is Default.</p> </note>"
         },
         "Type":{
@@ -2247,7 +2292,8 @@
     },
     "RouteFerryBeforeTravelStepType":{
       "type":"string",
-      "enum":["Board"]
+      "enum":["Board"],
+      "sensitive":true
     },
     "RouteFerryDeparture":{
       "type":"structure",
@@ -2302,7 +2348,7 @@
           "documentation":"<p>Waypoints that were passed through during the leg. This includes the waypoints that were configured with the PassThrough option.</p>"
         },
         "RouteName":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Route name of the ferry line.</p>"
         },
         "Spans":{
@@ -2342,7 +2388,9 @@
         "NoSchedule",
         "Other",
         "ViolatedAvoidFerry",
-        "ViolatedAvoidRailFerry"
+        "ViolatedAvoidRailFerry",
+        "SeasonalClosure",
+        "PotentialViolatedVehicleRestrictionUsage"
       ]
     },
     "RouteFerryNoticeList":{
@@ -2372,7 +2420,7 @@
       "required":["Position"],
       "members":{
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the place.</p>"
         },
         "OriginalPosition":{
@@ -2393,7 +2441,8 @@
     "RouteFerryPlaceWaypointIndexInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteFerrySpan":{
       "type":"structure",
@@ -2404,7 +2453,7 @@
         },
         "Distance":{
           "shape":"DistanceMeters",
-          "documentation":"<p>Distance of the computed span. This feature doesn't split a span, but is always computed on a span split by other properties.</p>"
+          "documentation":"<p>Distance of the computed span. This feature doesn't split a span, but is always computed on a span split by other properties.</p> <p> <b>Unit</b>: <code>meters</code> </p>"
         },
         "Duration":{
           "shape":"DurationSeconds",
@@ -2437,7 +2486,8 @@
     "RouteFerrySpanRegionString":{
       "type":"string",
       "max":3,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteFerrySummary":{
       "type":"structure",
@@ -2484,7 +2534,7 @@
           "documentation":"<p>Offset in the leg geometry corresponding to the start of this step.</p>"
         },
         "Instruction":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief description of the step in the requested language.</p> <note> <p>Only available when the TravelStepType is Default.</p> </note>"
         },
         "Type":{
@@ -2509,7 +2559,8 @@
         "Depart",
         "Continue",
         "Arrive"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteHazardousCargoType":{
       "type":"string",
@@ -2525,7 +2576,8 @@
         "Poison",
         "PoisonousInhalation",
         "Radioactive"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteHazardousCargoTypeList":{
       "type":"list",
@@ -2607,7 +2659,8 @@
         "TruckRoadTypes",
         "TypicalDuration",
         "Zones"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteLegAdditionalFeatureList":{
       "type":"list",
@@ -2640,8 +2693,10 @@
         "Ferry",
         "Pedestrian",
         "Scooter",
-        "Truck"
-      ]
+        "Truck",
+        "CarShuttleTrain"
+      ],
+      "sensitive":true
     },
     "RouteLegType":{
       "type":"string",
@@ -2649,7 +2704,8 @@
         "Ferry",
         "Pedestrian",
         "Vehicle"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteList":{
       "type":"list",
@@ -2711,15 +2767,16 @@
       "type":"structure",
       "members":{
         "Hot":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hot (High Occupancy Toll) lanes while calculating the route.</p> <p>Default value: <code>false</code> </p>"
         },
         "Hov":{
-          "shape":"Boolean",
-          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating the route.</p>"
+          "shape":"SensitiveBoolean",
+          "documentation":"<p>Allow Hov (High Occupancy vehicle) lanes while calculating the route.</p> <p>Default value: <code>false</code> </p>"
         }
       },
-      "documentation":"<p>Allow Options related to the route matrix.</p>"
+      "documentation":"<p>Allow Options related to the route matrix.</p>",
+      "sensitive":true
     },
     "RouteMatrixAutoCircle":{
       "type":"structure",
@@ -2738,12 +2795,14 @@
     "RouteMatrixAutoCircleMarginLong":{
       "type":"long",
       "max":200000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixAutoCircleMaxRadiusLong":{
       "type":"long",
       "max":200000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixAvoidanceArea":{
       "type":"structure",
@@ -2794,27 +2853,27 @@
           "documentation":"<p>Areas to be avoided.</p>"
         },
         "CarShuttleTrains":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid car-shuttle-trains while calculating the route.</p>"
         },
         "ControlledAccessHighways":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid controlled access highways while calculating the route.</p>"
         },
         "DirtRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid dirt roads while calculating the route.</p>"
         },
         "Ferries":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid ferries while calculating the route.</p>"
         },
         "TollRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TollTransponders":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "TruckRoadTypes":{
@@ -2822,11 +2881,11 @@
           "documentation":"<p>Truck road type identifiers. <code>BK1</code> through <code>BK4</code> apply only to Sweden. <code>A2,A4,B2,B4,C,D,ET2,ET4</code> apply only to Mexico.</p> <note> <p>There are currently no other supported values as of 26th April 2024.</p> </note>"
         },
         "Tunnels":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid tunnels while calculating the route.</p>"
         },
         "UTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "ZoneCategories":{
@@ -2834,7 +2893,7 @@
           "documentation":"<p>Zone categories to be avoided.</p>"
         }
       },
-      "documentation":"<p>Options related to the route matrix.</p>"
+      "documentation":"<p>Specifies options for areas to avoid when calculating the route. This is a best-effort avoidance setting, meaning the router will try to honor the avoidance preferences but may still include restricted areas if no feasible alternative route exists. If avoidance options are not followed, the response will indicate that the avoidance criteria were violated.</p>"
     },
     "RouteMatrixAvoidanceOptionsAreasList":{
       "type":"list",
@@ -2866,7 +2925,7 @@
           "documentation":"<p>Geometry of the area to be avoided.</p>"
         },
         "Unbounded":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>No restrictions in terms of a routing boundary, and is typically used for longer routes.</p>"
         }
       },
@@ -2917,17 +2976,19 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Options related to the car.</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Car</code>.</p>"
     },
     "RouteMatrixCarOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteMatrixCarOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteMatrixDestination":{
       "type":"structure",
@@ -2968,7 +3029,8 @@
     },
     "RouteMatrixDestinationOptionsAvoidActionsForDistanceLong":{
       "type":"long",
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixEntry":{
       "type":"structure",
@@ -3015,7 +3077,7 @@
           "documentation":"<p>List of countries to be avoided defined by two-letter or three-letter country codes.</p>"
         }
       },
-      "documentation":"<p>Exclusion options.</p>"
+      "documentation":"<p>Specifies strict exclusion options for the route calculation. This setting mandates that the router will avoid any routes that include the specified options, rather than merely attempting to minimize them.</p>"
     },
     "RouteMatrixHazardousCargoType":{
       "type":"string",
@@ -3031,7 +3093,8 @@
         "Poison",
         "PoisonousInhalation",
         "Radioactive"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteMatrixHazardousCargoTypeList":{
       "type":"list",
@@ -3063,7 +3126,8 @@
     },
     "RouteMatrixMatchingOptionsOnRoadThresholdLong":{
       "type":"long",
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixOrigin":{
       "type":"structure",
@@ -3104,7 +3168,8 @@
     },
     "RouteMatrixOriginOptionsAvoidActionsForDistanceLong":{
       "type":"long",
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixRow":{
       "type":"list",
@@ -3127,17 +3192,19 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Travel mode options when the provided travel mode is \"Scooter\"</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p>"
     },
     "RouteMatrixScooterOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteMatrixScooterOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteMatrixSideOfStreetOptions":{
       "type":"structure",
@@ -3182,7 +3249,8 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixTravelMode":{
       "type":"string",
@@ -3202,7 +3270,7 @@
         },
         "Scooter":{
           "shape":"RouteMatrixScooterOptions",
-          "documentation":"<p>Travel mode options when the provided travel mode is \"Scooter\"</p>"
+          "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p> <note> <p>When travel mode is set to <code>Scooter</code>, then the avoidance option <code>ControlledAccessHighways</code> defaults to <code>true</code>.</p> </note>"
         },
         "Truck":{
           "shape":"RouteMatrixTruckOptions",
@@ -3286,32 +3354,38 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":2
+      "min":2,
+      "sensitive":true
     },
     "RouteMatrixTruckOptionsHeightLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixTruckOptionsLengthLong":{
       "type":"long",
       "max":30000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixTruckOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteMatrixTruckOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteMatrixTruckOptionsWidthLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixTruckType":{
       "type":"string",
@@ -3319,7 +3393,8 @@
         "LightTruck",
         "StraightTruck",
         "Tractor"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteMatrixVehicleLicensePlate":{
       "type":"structure",
@@ -3329,7 +3404,8 @@
           "documentation":"<p>The last character of the License Plate.</p>"
         }
       },
-      "documentation":"<p>The vehicle License Plate.</p>"
+      "documentation":"<p>The vehicle License Plate.</p>",
+      "sensitive":true
     },
     "RouteMatrixVehicleLicensePlateLastCharacterString":{
       "type":"string",
@@ -3342,7 +3418,8 @@
         "CongestionPricing",
         "Environmental",
         "Vignette"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteNoticeDetailRange":{
       "type":"structure",
@@ -3388,7 +3465,7 @@
           "documentation":"<p>List of languages for instructions corresponding to the route number.</p>"
         },
         "Value":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The route number.</p>"
         }
       },
@@ -3406,7 +3483,7 @@
           "documentation":"<p>Avoids actions for the provided distance. This is typically to consider for users in moving vehicles who may not have sufficient time to make an action at an origin or a destination.</p>"
         },
         "AvoidUTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "Heading":{
@@ -3426,7 +3503,8 @@
     },
     "RouteOriginOptionsAvoidActionsForDistanceLong":{
       "type":"long",
-      "max":2000
+      "max":2000,
+      "sensitive":true
     },
     "RoutePassThroughPlace":{
       "type":"structure",
@@ -3450,7 +3528,8 @@
     "RoutePassThroughPlaceWaypointIndexInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoutePassThroughWaypoint":{
       "type":"structure",
@@ -3591,7 +3670,8 @@
     "RoutePedestrianOptionsSpeedDouble":{
       "type":"double",
       "max":7.2,
-      "min":1.8
+      "min":1.8,
+      "sensitive":true
     },
     "RoutePedestrianOverviewSummary":{
       "type":"structure",
@@ -3616,7 +3696,7 @@
       "required":["Position"],
       "members":{
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the place.</p>"
         },
         "OriginalPosition":{
@@ -3641,7 +3721,8 @@
     "RoutePedestrianPlaceWaypointIndexInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoutePedestrianSpan":{
       "type":"structure",
@@ -3713,7 +3794,8 @@
       "type":"integer",
       "box":true,
       "max":5,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RoutePedestrianSpanGeometryOffsetInteger":{
       "type":"integer",
@@ -3727,7 +3809,8 @@
     "RoutePedestrianSpanRegionString":{
       "type":"string",
       "max":3,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RoutePedestrianSummary":{
       "type":"structure",
@@ -3786,7 +3869,7 @@
           "documentation":"<p>Offset in the leg geometry corresponding to the start of this step.</p>"
         },
         "Instruction":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief description of the step in the requested language.</p> <note> <p>Only available when the TravelStepType is Default.</p> </note>"
         },
         "KeepStepDetails":{
@@ -3847,7 +3930,8 @@
         "Exit",
         "Ramp",
         "UTurn"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteRampStepDetails":{
       "type":"structure",
@@ -3932,7 +4016,8 @@
         "Highway",
         "Rural",
         "Urban"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteRoundaboutEnterStepDetails":{
       "type":"structure",
@@ -3984,7 +4069,8 @@
       "type":"integer",
       "box":true,
       "max":12,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteRoundaboutPassStepDetails":{
       "type":"structure",
@@ -4030,24 +4116,27 @@
           "documentation":"<p>The number of occupants in the vehicle.</p> <p>Default Value: <code>1</code> </p>"
         }
       },
-      "documentation":"<p>Travel mode options when the provided travel mode is \"Scooter\"</p>"
+      "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p>"
     },
     "RouteScooterOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteScooterOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteSideOfStreet":{
       "type":"string",
       "enum":[
         "Left",
         "Right"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSideOfStreetOptions":{
       "type":"structure",
@@ -4134,7 +4223,8 @@
         "Allowed",
         "NoThroughTraffic",
         "TollRoad"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanCarAccessAttributeList":{
       "type":"list",
@@ -4166,7 +4256,8 @@
         "Emergency",
         "KeyAccess",
         "PermissionRequired"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanPedestrianAccessAttribute":{
       "type":"string",
@@ -4177,7 +4268,8 @@
         "Park",
         "Stairs",
         "TollRoad"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanPedestrianAccessAttributeList":{
       "type":"list",
@@ -4190,7 +4282,8 @@
       "enum":[
         "Protected",
         "Unprotected"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanRoadAttribute":{
       "type":"string",
@@ -4207,7 +4300,8 @@
         "Roundabout",
         "Tunnel",
         "UnderConstruction"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanRoadAttributeList":{
       "type":"list",
@@ -4221,7 +4315,8 @@
         "Allowed",
         "NoThroughTraffic",
         "TollRoad"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanScooterAccessAttributeList":{
       "type":"list",
@@ -4237,7 +4332,7 @@
           "documentation":"<p>Maximum speed.</p> <p> <b>Unit</b>: <code>KilometersPerHour</code> </p>"
         },
         "Unlimited":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the span doesn't have a speed limit like the Autobahn.</p>"
         }
       },
@@ -4249,7 +4344,8 @@
         "Allowed",
         "NoThroughTraffic",
         "TollRoad"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSpanTruckAccessAttributeList":{
       "type":"list",
@@ -4263,7 +4359,8 @@
         "Left",
         "Right",
         "Straight"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteSummary":{
       "type":"structure",
@@ -4318,11 +4415,11 @@
       "type":"structure",
       "members":{
         "AllTransponders":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Specifies if the user has valid transponder with access to all toll systems. This impacts toll calculation, and if true the price with transponders is used.</p>"
         },
         "AllVignettes":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Specifies if the user has valid vignettes with access for all toll roads. If a user has a vignette for a toll road, then toll cost for that road is omitted since no further payment is necessary.</p>"
         },
         "Currency":{
@@ -4344,11 +4441,11 @@
       "type":"structure",
       "members":{
         "IncludesReturnTrip":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the pass includes the rate for the return leg of the trip.</p>"
         },
         "SeniorPass":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the pass is only valid for senior persons.</p>"
         },
         "TransferCount":{
@@ -4369,12 +4466,14 @@
     "RouteTollPassTransferCountInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTollPassTripCountInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTollPassValidityPeriod":{
       "type":"structure",
@@ -4394,7 +4493,8 @@
     "RouteTollPassValidityPeriodPeriodCountInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTollPassValidityPeriodType":{
       "type":"string",
@@ -4404,7 +4504,8 @@
         "ExtendedAnnual",
         "Minutes",
         "Months"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteTollPaymentMethod":{
       "type":"string",
@@ -4417,7 +4518,8 @@
         "TravelCard",
         "Transponder",
         "VideoToll"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteTollPaymentMethodList":{
       "type":"list",
@@ -4458,7 +4560,7 @@
           "documentation":"<p>Currency code corresponding to the price. This is the same as Currency specified in the request.</p>"
         },
         "Estimate":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the price is an estimate or an exact value. </p>"
         },
         "PerDuration":{
@@ -4466,7 +4568,7 @@
           "documentation":"<p>Duration for which the price corresponds to.</p> <p> <b>Unit</b>: <code>seconds</code> </p>"
         },
         "Range":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the price is a range or an exact value. If any of the toll fares making up the route is a range, the overall price is also a range.</p>"
         },
         "RangeValue":{
@@ -4494,11 +4596,11 @@
           "documentation":"<p>Currency code corresponding to the price. This is the same as Currency specified in the request.</p>"
         },
         "Estimate":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the price is an estimate or an exact value. </p>"
         },
         "Range":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the price is a range or an exact value. If any of the toll fares making up the route is a range, the overall price is also a range.</p>"
         },
         "RangeValue":{
@@ -4515,12 +4617,14 @@
     "RouteTollPriceSummaryValueDouble":{
       "type":"double",
       "box":true,
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "RouteTollPriceValueDouble":{
       "type":"double",
       "box":true,
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "RouteTollPriceValueRange":{
       "type":"structure",
@@ -4543,12 +4647,14 @@
     "RouteTollPriceValueRangeMaxDouble":{
       "type":"double",
       "box":true,
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "RouteTollPriceValueRangeMinDouble":{
       "type":"double",
       "box":true,
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "RouteTollRate":{
       "type":"structure",
@@ -4561,7 +4667,7 @@
       ],
       "members":{
         "ApplicableTimes":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Time when the rate is valid.</p>"
         },
         "ConvertedPrice":{
@@ -4569,7 +4675,7 @@
           "documentation":"<p>Price in the converted currency as specified in the request.</p>"
         },
         "Id":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The Toll rate Id.</p>"
         },
         "LocalPrice":{
@@ -4577,7 +4683,7 @@
           "documentation":"<p>Price in the local regional currency.</p>"
         },
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the toll.</p>"
         },
         "Pass":{
@@ -4613,7 +4719,7 @@
       "type":"structure",
       "members":{
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The toll system name.</p>"
         }
       },
@@ -4625,7 +4731,8 @@
     },
     "RouteTollVehicleCategory":{
       "type":"string",
-      "enum":["Minibus"]
+      "enum":["Minibus"],
+      "sensitive":true
     },
     "RouteTrafficOptions":{
       "type":"structure",
@@ -4658,19 +4765,21 @@
     "RouteTrailerOptionsAxleCountInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteTrailerOptionsTrailerCountInteger":{
       "type":"integer",
       "box":true,
       "max":255,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteTransponder":{
       "type":"structure",
       "members":{
         "SystemName":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Names of the toll system collecting the toll.</p>"
         }
       },
@@ -4702,7 +4811,7 @@
         },
         "Scooter":{
           "shape":"RouteScooterOptions",
-          "documentation":"<p>Travel mode options when the provided travel mode is \"Scooter\"</p>"
+          "documentation":"<p>Travel mode options when the provided travel mode is <code>Scooter</code> </p> <note> <p>When travel mode is set to <code>Scooter</code>, then the avoidance option <code>ControlledAccessHighways</code> defaults to <code>true</code>.</p> </note>"
         },
         "Truck":{
           "shape":"RouteTruckOptions",
@@ -4805,48 +4914,57 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":2
+      "min":2,
+      "sensitive":true
     },
     "RouteTruckOptionsHeightAboveFirstAxleLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTruckOptionsHeightLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTruckOptionsLengthLong":{
       "type":"long",
       "max":30000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTruckOptionsMaxSpeedDouble":{
       "type":"double",
       "max":252.0,
-      "min":3.6
+      "min":3.6,
+      "sensitive":true
     },
     "RouteTruckOptionsOccupancyInteger":{
       "type":"integer",
       "box":true,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteTruckOptionsTireCountInteger":{
       "type":"integer",
       "box":true,
       "max":255,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteTruckOptionsTunnelRestrictionCodeString":{
       "type":"string",
       "max":20,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTruckOptionsWidthLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteTruckType":{
       "type":"string",
@@ -4854,7 +4972,8 @@
         "LightTruck",
         "StraightTruck",
         "Tractor"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteTurnIntensity":{
       "type":"string",
@@ -4862,7 +4981,8 @@
         "Sharp",
         "Slight",
         "Typical"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteTurnStepDetails":{
       "type":"structure",
@@ -4944,7 +5064,7 @@
       "type":"structure",
       "members":{
         "Description":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief readable description of the incident.</p>"
         },
         "EndTime":{
@@ -4977,7 +5097,8 @@
         "High",
         "Medium",
         "Low"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteVehicleIncidentType":{
       "type":"string",
@@ -4993,7 +5114,8 @@
         "RoadClosure",
         "RoadHazard",
         "Weather"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteVehicleLegDetails":{
       "type":"structure",
@@ -5075,7 +5197,8 @@
     "RouteVehicleLicensePlateLastCharacterString":{
       "type":"string",
       "max":1,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteVehicleNotice":{
       "type":"structure",
@@ -5135,7 +5258,7 @@
       "type":"structure",
       "members":{
         "Title":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The notice title.</p>"
         },
         "ViolatedConstraints":{
@@ -5184,7 +5307,7 @@
       "required":["Position"],
       "members":{
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the place.</p>"
         },
         "OriginalPosition":{
@@ -5209,7 +5332,8 @@
     "RouteVehiclePlaceWaypointIndexInteger":{
       "type":"integer",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteVehicleSpan":{
       "type":"structure",
@@ -5313,7 +5437,8 @@
       "type":"integer",
       "box":true,
       "max":5,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "RouteVehicleSpanGeometryOffsetInteger":{
       "type":"integer",
@@ -5327,7 +5452,8 @@
     "RouteVehicleSpanRegionString":{
       "type":"string",
       "max":3,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteVehicleSummary":{
       "type":"structure",
@@ -5406,7 +5532,7 @@
           "documentation":"<p>Offset in the leg geometry corresponding to the start of this step.</p>"
         },
         "Instruction":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Brief description of the step in the requested language.</p> <note> <p>Only available when the TravelStepType is Default.</p> </note>"
         },
         "KeepStepDetails":{
@@ -5477,14 +5603,15 @@
         "RoundaboutPass",
         "Turn",
         "UTurn"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteViolatedConstraints":{
       "type":"structure",
       "required":["HazardousCargos"],
       "members":{
         "AllHazardsRestricted":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>This restriction applies to truck cargo, where the resulting route excludes roads on which hazardous materials are prohibited from being transported.</p>"
         },
         "AxleCount":{
@@ -5536,7 +5663,7 @@
           "documentation":"<p>Access radius restrictions based on time.</p>"
         },
         "TimeDependent":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>The time dependent constraint.</p>"
         },
         "TrailerCount":{
@@ -5544,7 +5671,7 @@
           "documentation":"<p>Number of trailers attached to the vehicle.</p> <p>Default Value: <code>0</code> </p>"
         },
         "TravelMode":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Travel mode corresponding to the leg.</p>"
         },
         "TruckRoadType":{
@@ -5571,7 +5698,7 @@
           "documentation":"<p>Avoids actions for the provided distance. This is typically to consider for users in moving vehicles who may not have sufficient time to make an action at an origin or a destination.</p>"
         },
         "AvoidUTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         },
         "Heading":{
@@ -5583,7 +5710,7 @@
           "documentation":"<p>Options to configure matching the provided position to the road network.</p>"
         },
         "PassThrough":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>If the waypoint should not be treated as a stop. If yes, the waypoint is passed through and doesn't split the route into different legs.</p>"
         },
         "Position":{
@@ -5603,7 +5730,8 @@
     },
     "RouteWaypointAvoidActionsForDistanceLong":{
       "type":"long",
-      "max":2000
+      "max":2000,
+      "sensitive":true
     },
     "RouteWaypointList":{
       "type":"list",
@@ -5643,7 +5771,7 @@
           "documentation":"<p>The zone category.</p>"
         },
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the zone.</p>"
         }
       },
@@ -5655,7 +5783,8 @@
         "CongestionPricing",
         "Environmental",
         "Vignette"
-      ]
+      ],
+      "sensitive":true
     },
     "RouteZoneList":{
       "type":"list",
@@ -5668,6 +5797,16 @@
         "ShortestRoute"
       ]
     },
+    "SensitiveBoolean":{
+      "type":"boolean",
+      "box":true,
+      "sensitive":true
+    },
+    "SensitiveDouble":{
+      "type":"double",
+      "box":true,
+      "sensitive":true
+    },
     "SensitiveString":{
       "type":"string",
       "sensitive":true
@@ -5714,7 +5853,8 @@
     "SnapToRoadsRequestSnapRadiusLong":{
       "type":"long",
       "max":10000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SnapToRoadsRequestTracePointsList":{
       "type":"list",
@@ -5757,7 +5897,8 @@
     },
     "SpeedKilometersPerHour":{
       "type":"double",
-      "min":0.0
+      "min":0.0,
+      "sensitive":true
     },
     "String":{"type":"string"},
     "ThrottlingException":{
@@ -5779,7 +5920,8 @@
     },
     "TimeOfDay":{
       "type":"string",
-      "pattern":"([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-]([0-1]?[0-9]|2[0-3]):[0-5][0-9])"
+      "pattern":"([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](Z|[+-]([0-1]?[0-9]|2[0-3]):[0-5][0-9])",
+      "sensitive":true
     },
     "TimeThresholdList":{
       "type":"list",
@@ -5790,11 +5932,13 @@
     "TimeThresholdListMemberLong":{
       "type":"long",
       "max":10800,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TimestampWithTimezoneOffset":{
       "type":"string",
-      "pattern":"([1-2][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]{0,9})?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])"
+      "pattern":"([1-2][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]{0,9})?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])",
+      "sensitive":true
     },
     "TrafficUsage":{
       "type":"string",
@@ -5806,7 +5950,8 @@
     "TruckRoadType":{
       "type":"string",
       "max":3,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "TruckRoadTypeList":{
       "type":"list",
@@ -5817,7 +5962,8 @@
     "TunnelRestrictionCode":{
       "type":"string",
       "max":1,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "TurnAngle":{
       "type":"double",
@@ -5960,35 +6106,35 @@
           "documentation":"<p>Areas to be avoided.</p>"
         },
         "CarShuttleTrains":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoidance options for cars-shuttles-trains.</p>"
         },
         "ControlledAccessHighways":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid controlled access highways while calculating the route.</p>"
         },
         "DirtRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid dirt roads while calculating the route.</p>"
         },
         "Ferries":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoidance options for ferries.</p>"
         },
         "TollRoads":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids roads where the specified toll transponders are the only mode of payment.</p>"
         },
         "Tunnels":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid tunnels while calculating the route.</p>"
         },
         "UTurns":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoid U-turns for calculation on highways and motorways.</p>"
         }
       },
-      "documentation":"<p>Options for WaypointOptimizationAvoidance.</p>"
+      "documentation":"<p>Specifies options for areas to avoid. This is a best-effort avoidance setting, meaning the router will try to honor the avoidance preferences but may still include restricted areas if no feasible alternative route exists. If avoidance options are not followed, the response will indicate that the avoidance criteria were violated.</p>"
     },
     "WaypointOptimizationAvoidanceOptionsAreasList":{
       "type":"list",
@@ -5996,6 +6142,29 @@
       "max":20,
       "min":0
     },
+    "WaypointOptimizationClusteringAlgorithm":{
+      "type":"string",
+      "enum":[
+        "DrivingDistance",
+        "TopologySegment"
+      ],
+      "sensitive":true
+    },
+    "WaypointOptimizationClusteringOptions":{
+      "type":"structure",
+      "required":["Algorithm"],
+      "members":{
+        "Algorithm":{
+          "shape":"WaypointOptimizationClusteringAlgorithm",
+          "documentation":"<p>The algorithm to be used. <code>DrivingDistance</code> assigns all the waypoints that are within driving distance of each other into a single cluster. <code>TopologySegment</code> assigns all the waypoints that are within the same topology segment into a single cluster. A Topology segment is a linear stretch of road between two junctions.</p>"
+        },
+        "DrivingDistanceOptions":{
+          "shape":"WaypointOptimizationDrivingDistanceOptions",
+          "documentation":"<p>Driving distance options to be used when the clustering algorithm is DrivingDistance.</p>"
+        }
+      },
+      "documentation":"<p>Options for WaypointOptimizationClustering.</p>"
+    },
     "WaypointOptimizationConnection":{
       "type":"structure",
       "required":[
@@ -6047,7 +6216,8 @@
         "Heading",
         "ServiceDuration",
         "SideOfStreet"
-      ]
+      ],
+      "sensitive":true
     },
     "WaypointOptimizationDestinationOptions":{
       "type":"structure",
@@ -6097,6 +6267,17 @@
       },
       "documentation":"<p>Driver related options.</p>"
     },
+    "WaypointOptimizationDrivingDistanceOptions":{
+      "type":"structure",
+      "required":["DrivingDistance"],
+      "members":{
+        "DrivingDistance":{
+          "shape":"DistanceMeters",
+          "documentation":"<p>DrivingDistance assigns all the waypoints that are within driving distance of each other into a single cluster.</p>"
+        }
+      },
+      "documentation":"<p>Driving distance related options.</p>"
+    },
     "WaypointOptimizationExclusionOptions":{
       "type":"structure",
       "required":["Countries"],
@@ -6106,7 +6287,7 @@
           "documentation":"<p>List of countries to be avoided defined by two-letter or three-letter country codes.</p>"
         }
       },
-      "documentation":"<p>Exclusion options.</p>"
+      "documentation":"<p>Specifies strict exclusion options for the route calculation. This setting mandates that the router will avoid any routes that include the specified options, rather than merely attempting to minimize them.</p>"
     },
     "WaypointOptimizationFailedConstraint":{
       "type":"structure",
@@ -6116,7 +6297,7 @@
           "documentation":"<p>The failed constraint.</p>"
         },
         "Reason":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Reason for the failed constraint.</p>"
         }
       },
@@ -6140,7 +6321,8 @@
         "Poison",
         "PoisonousInhalation",
         "Radioactive"
-      ]
+      ],
+      "sensitive":true
     },
     "WaypointOptimizationHazardousCargoTypeList":{
       "type":"list",
@@ -6185,6 +6367,10 @@
           "shape":"TimestampWithTimezoneOffset",
           "documentation":"<p>Estimated time of arrival at the destination.</p> <p>Time format:<code>YYYY-MM-DDThh:mm:ss.sssZ | YYYY-MM-DDThh:mm:ss.sss+hh:mm</code> </p> <p>Examples:</p> <p> <code>2020-04-22T17:57:24Z</code> </p> <p> <code>2020-04-22T17:57:24+02:00</code> </p>"
         },
+        "ClusterIndex":{
+          "shape":"ClusterIndex",
+          "documentation":"<p>Index of the cluster the waypoint is associated with. The index is included in the response only if clustering was performed while processing the request.</p>"
+        },
         "DepartureTime":{
           "shape":"TimestampWithTimezoneOffset",
           "documentation":"<p>Estimated time of departure from thr origin.</p> <p>Time format:<code>YYYY-MM-DDThh:mm:ss.sssZ | YYYY-MM-DDThh:mm:ss.sss+hh:mm</code> </p> <p>Examples:</p> <p> <code>2020-04-22T17:57:24Z</code> </p> <p> <code>2020-04-22T17:57:24+02:00</code> </p>"
@@ -6212,7 +6398,7 @@
           "documentation":"<p>The Origin Id.</p>"
         }
       },
-      "documentation":"<p>Options related to the origin.</p>"
+      "documentation":"<p>Origin related options.</p>"
     },
     "WaypointOptimizationPedestrianOptions":{
       "type":"structure",
@@ -6228,7 +6414,8 @@
     "WaypointOptimizationPedestrianOptionsSpeedDouble":{
       "type":"double",
       "max":7.2,
-      "min":1.8
+      "min":1.8,
+      "sensitive":true
     },
     "WaypointOptimizationRestCycleDurations":{
       "type":"structure",
@@ -6280,7 +6467,8 @@
     "WaypointOptimizationRestProfileProfileString":{
       "type":"string",
       "max":2,
-      "min":2
+      "min":2,
+      "sensitive":true
     },
     "WaypointOptimizationSequencingObjective":{
       "type":"string",
@@ -6294,7 +6482,8 @@
       "enum":[
         "Rest",
         "Work"
-      ]
+      ],
+      "sensitive":true
     },
     "WaypointOptimizationSideOfStreetOptions":{
       "type":"structure",
@@ -6363,7 +6552,8 @@
       "type":"integer",
       "box":true,
       "max":255,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "WaypointOptimizationTravelMode":{
       "type":"string",
@@ -6433,24 +6623,28 @@
     "WaypointOptimizationTruckOptionsHeightLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "WaypointOptimizationTruckOptionsLengthLong":{
       "type":"long",
       "max":30000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "WaypointOptimizationTruckOptionsWidthLong":{
       "type":"long",
       "max":5000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "WaypointOptimizationTruckType":{
       "type":"string",
       "enum":[
         "StraightTruck",
         "Tractor"
-      ]
+      ],
+      "sensitive":true
     },
     "WaypointOptimizationWaypoint":{
       "type":"structure",
@@ -6498,7 +6692,8 @@
     "WeightKilograms":{
       "type":"long",
       "max":4294967295,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "WeightPerAxleGroup":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/glacier/2012-06-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -58,318 +57,283 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [],
-                    "type": "tree",
-                    "rules": [
+                    "conditions": [
                         {
-                            "conditions": [
+                            "fn": "booleanEquals",
+                            "argv": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": {
-                                    "ref": "Endpoint"
+                                    "ref": "UseDualStack"
                                 },
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                                true
+                            ]
                         }
-                    ]
+                    ],
+                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
-            "conditions": [],
-            "type": "tree",
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                }
+            ],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "aws.partition",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ]
+                            ],
+                            "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "aws.partition",
+                                    "fn": "booleanEquals",
                                     "argv": [
                                         {
-                                            "ref": "Region"
-                                        }
-                                    ],
-                                    "assign": "PartitionResult"
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
+                                    ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
+                                                }
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
                                                         {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://glacier-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
                                                     ]
                                                 }
                                             ]
-                                        },
+                                        }
+                                    ],
+                                    "rules": [
                                         {
                                             "conditions": [],
-                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                            "type": "error"
+                                            "endpoint": {
+                                                "url": "https://glacier-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
+                                    "conditions": [],
+                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "UseFIPS"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
                                                 },
                                                 true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "stringEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "supportsFIPS"
+                                                                "name"
                                                             ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [
-                                                                {
-                                                                    "fn": "stringEquals",
-                                                                    "argv": [
-                                                                        "aws-us-gov",
-                                                                        {
-                                                                            "fn": "getAttr",
-                                                                            "argv": [
-                                                                                {
-                                                                                    "ref": "PartitionResult"
-                                                                                },
-                                                                                "name"
-                                                                            ]
-                                                                        }
-                                                                    ]
-                                                                }
-                                                            ],
-                                                            "endpoint": {
-                                                                "url": "https://glacier.{Region}.amazonaws.com",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
                                                         },
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://glacier-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
+                                                        "aws-us-gov"
                                                     ]
                                                 }
-                                            ]
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://glacier.{Region}.amazonaws.com",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         },
                                         {
                                             "conditions": [],
-                                            "error": "FIPS is enabled but this partition does not support FIPS",
-                                            "type": "error"
+                                            "endpoint": {
+                                                "url": "https://glacier-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
+                                    "conditions": [],
+                                    "error": "FIPS is enabled but this partition does not support FIPS",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
                                                         {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://glacier.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
                                                     ]
                                                 }
                                             ]
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "DualStack is enabled but this partition does not support DualStack",
-                                            "type": "error"
                                         }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "type": "tree",
+                                    ],
                                     "rules": [
                                         {
                                             "conditions": [],
                                             "endpoint": {
-                                                "url": "https://glacier.{Region}.{PartitionResult#dnsSuffix}",
+                                                "url": "https://glacier.{Region}.{PartitionResult#dualStackDnsSuffix}",
                                                 "properties": {},
                                                 "headers": {}
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "DualStack is enabled but this partition does not support DualStack",
+                                    "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": "https://glacier.{Region}.{PartitionResult#dnsSuffix}",
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
-                    ]
-                },
-                {
-                    "conditions": [],
-                    "error": "Invalid Configuration: Missing Region",
-                    "type": "error"
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "error": "Invalid Configuration: Missing Region",
+            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/glacier/2012-06-01/service-2.json 2.31.35-1/awscli/botocore/data/glacier/2012-06-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/glacier/2012-06-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/glacier/2012-06-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,10 +5,12 @@
     "checksumFormat":"sha256",
     "endpointPrefix":"glacier",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Glacier",
     "serviceId":"Glacier",
     "signatureVersion":"v4",
-    "uid":"glacier-2012-06-01"
+    "uid":"glacier-2012-06-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AbortMultipartUpload":{
diff -pruN 2.23.6-1/awscli/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/globalaccelerator/2018-08-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/globalaccelerator/2018-08-08/service-2.json 2.31.35-1/awscli/botocore/data/globalaccelerator/2018-08-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/globalaccelerator/2018-08-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/globalaccelerator/2018-08-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2595,8 +2595,7 @@
     },
     "ListCrossAccountResourceAccountsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListCrossAccountResourceAccountsResponse":{
       "type":"structure",
@@ -3180,8 +3179,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3230,8 +3228,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAcceleratorAttributesRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/glue/2017-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/glue/2017-03-31/service-2.json 2.31.35-1/awscli/botocore/data/glue/2017-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/glue/2017-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/glue/2017-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -268,7 +268,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"ResourceNumberLimitExceededException"}
       ],
-      "documentation":"<p>Annotate datapoints over time for a specific data quality statistic.</p>"
+      "documentation":"<p>Annotate datapoints over time for a specific data quality statistic. The API requires both profileID and statisticID as part of the InclusionAnnotation input. The API only works for a single statisticId across multiple profiles.</p>"
     },
     "BatchStopJobRun":{
       "name":"BatchStopJobRun",
@@ -569,6 +569,24 @@
       ],
       "documentation":"<p>Creates a new development endpoint.</p>"
     },
+    "CreateGlueIdentityCenterConfiguration":{
+      "name":"CreateGlueIdentityCenterConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateGlueIdentityCenterConfigurationRequest"},
+      "output":{"shape":"CreateGlueIdentityCenterConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"AlreadyExistsException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"OperationTimeoutException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Creates a new Glue Identity Center configuration to enable integration between Glue and Amazon Web Services IAM Identity Center for authentication and authorization.</p>"
+    },
     "CreateIntegration":{
       "name":"CreateIntegration",
       "http":{
@@ -1110,6 +1128,24 @@
       ],
       "documentation":"<p>Deletes a specified development endpoint.</p>"
     },
+    "DeleteGlueIdentityCenterConfiguration":{
+      "name":"DeleteGlueIdentityCenterConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteGlueIdentityCenterConfigurationRequest"},
+      "output":{"shape":"DeleteGlueIdentityCenterConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"EntityNotFoundException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"OperationTimeoutException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Deletes the existing Glue Identity Center configuration, removing the integration between Glue and Amazon Web Services IAM Identity Center.</p>"
+    },
     "DeleteIntegration":{
       "name":"DeleteIntegration",
       "http":{
@@ -2018,6 +2054,24 @@
       ],
       "documentation":"<p>This API is used to query preview data from a given connection type or from a native Amazon S3 based Glue Data Catalog.</p> <p>Returns records as an array of JSON blobs. Each record is formatted using Jackson JsonNode based on the field type defined by the <code>DescribeEntity</code> API.</p> <p>Spark connectors generate schemas according to the same data type mapping as in the <code>DescribeEntity</code> API. Spark connectors convert data to the appropriate data types matching the schema when returning rows.</p>"
     },
+    "GetGlueIdentityCenterConfiguration":{
+      "name":"GetGlueIdentityCenterConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetGlueIdentityCenterConfigurationRequest"},
+      "output":{"shape":"GetGlueIdentityCenterConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"EntityNotFoundException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"OperationTimeoutException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Retrieves the current Glue Identity Center configuration details, including the associated Identity Center instance and application information.</p>"
+    },
     "GetIntegrationResourceProperty":{
       "name":"GetIntegrationResourceProperty",
       "http":{
@@ -3609,7 +3663,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"ConcurrentRunsExceededException"}
       ],
-      "documentation":"<p>Starts the active learning workflow for your machine learning transform to improve the transform's quality by generating label sets and adding labels.</p> <p>When the <code>StartMLLabelingSetGenerationTaskRun</code> finishes, Glue will have generated a \"labeling set\" or a set of questions for humans to answer.</p> <p>In the case of the <code>FindMatches</code> transform, these questions are of the form, “What is the correct way to group these rows together into groups composed entirely of matching records?” </p> <p>After the labeling process is finished, you can upload your labels with a call to <code>StartImportLabelsTaskRun</code>. After <code>StartImportLabelsTaskRun</code> finishes, all future runs of the machine learning transform will use the new and improved labels and perform a higher-quality transformation.</p>"
+      "documentation":"<p>Starts the active learning workflow for your machine learning transform to improve the transform's quality by generating label sets and adding labels.</p> <p>When the <code>StartMLLabelingSetGenerationTaskRun</code> finishes, Glue will have generated a \"labeling set\" or a set of questions for humans to answer.</p> <p>In the case of the <code>FindMatches</code> transform, these questions are of the form, “What is the correct way to group these rows together into groups composed entirely of matching records?” </p> <p>After the labeling process is finished, you can upload your labels with a call to <code>StartImportLabelsTaskRun</code>. After <code>StartImportLabelsTaskRun</code> finishes, all future runs of the machine learning transform will use the new and improved labels and perform a higher-quality transformation.</p> <p>Note: The role used to write the generated labeling set to the <code>OutputS3Path</code> is the role associated with the Machine Learning Transform, specified in the <code>CreateMLTransform</code> API.</p>"
     },
     "StartTrigger":{
       "name":"StartTrigger",
@@ -4028,6 +4082,24 @@
       ],
       "documentation":"<p>Updates a specified development endpoint.</p>"
     },
+    "UpdateGlueIdentityCenterConfiguration":{
+      "name":"UpdateGlueIdentityCenterConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateGlueIdentityCenterConfigurationRequest"},
+      "output":{"shape":"UpdateGlueIdentityCenterConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidInputException"},
+        {"shape":"EntityNotFoundException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"OperationTimeoutException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>Updates the existing Glue Identity Center configuration, allowing modification of scopes and permissions for the integration.</p>"
+    },
     "UpdateIntegrationResourceProperty":{
       "name":"UpdateIntegrationResourceProperty",
       "http":{
@@ -4372,7 +4444,8 @@
       "type":"string",
       "enum":[
         "performanceTuning.caching",
-        "observations.scope"
+        "observations.scope",
+        "compositeRuleEvaluation.method"
       ]
     },
     "AdditionalOptions":{
@@ -4457,6 +4530,13 @@
       "max":30,
       "min":1
     },
+    "AllowFullTableExternalDataAccessEnum":{
+      "type":"string",
+      "enum":[
+        "True",
+        "False"
+      ]
+    },
     "AllowedValue":{
       "type":"structure",
       "required":["Value"],
@@ -4693,6 +4773,11 @@
       "min":1,
       "pattern":"[a-zA-Z0-9.-]*"
     },
+    "ApplicationArn":{
+      "type":"string",
+      "max":1224,
+      "min":10
+    },
     "ApplyMapping":{
       "type":"structure",
       "required":[
@@ -4834,6 +4919,10 @@
           "shape":"SecretArn",
           "documentation":"<p>The secret manager ARN to store credentials.</p>"
         },
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt sensitive authentication information. This key is used to protect credentials and other sensitive data stored within the authentication configuration.</p>"
+        },
         "OAuth2Properties":{
           "shape":"OAuth2Properties",
           "documentation":"<p>The properties for OAuth2 authentication.</p>"
@@ -4905,6 +4994,20 @@
       },
       "documentation":"<p>The set of properties required for the the OAuth2 <code>AUTHORIZATION_CODE</code> grant type workflow.</p>"
     },
+    "AutoDataQuality":{
+      "type":"structure",
+      "members":{
+        "IsEnabled":{
+          "shape":"BooleanValue",
+          "documentation":"<p>Specifies whether automatic data quality evaluation is enabled. When set to <code>true</code>, data quality checks are performed automatically.</p>"
+        },
+        "EvaluationContext":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The evaluation context for the automatic data quality checks. This defines the scope and parameters for the data quality evaluation.</p>"
+        }
+      },
+      "documentation":"<p>Specifies configuration options for automatic data quality evaluation in Glue jobs. This structure enables automated data quality checks and monitoring during ETL operations, helping to ensure data integrity and reliability without manual intervention.</p>"
+    },
     "BackfillError":{
       "type":"structure",
       "members":{
@@ -5500,7 +5603,7 @@
       "members":{
         "InclusionAnnotations":{
           "shape":"InclusionAnnotationList",
-          "documentation":"<p>A list of <code>DatapointInclusionAnnotation</code>'s.</p>"
+          "documentation":"<p>A list of <code>DatapointInclusionAnnotation</code>'s. The InclusionAnnotations must contain a profileId and statisticId. If there are multiple InclusionAnnotations, the list must refer to a single statisticId across multiple profileIds.</p>"
         },
         "ClientToken":{
           "shape":"HashString",
@@ -5954,8 +6057,7 @@
     },
     "CancelDataQualityRuleRecommendationRunResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelDataQualityRulesetEvaluationRunRequest":{
       "type":"structure",
@@ -5969,8 +6071,7 @@
     },
     "CancelDataQualityRulesetEvaluationRunResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelMLTaskRunRequest":{
       "type":"structure",
@@ -6029,8 +6130,7 @@
     },
     "CancelStatementResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Capabilities":{
       "type":"structure",
@@ -6106,6 +6206,10 @@
         "CreateDatabaseDefaultPermissions":{
           "shape":"PrincipalPermissionsList",
           "documentation":"<p>An array of <code>PrincipalPermissions</code> objects. Creates a set of default permissions on the database(s) for principals. Used by Amazon Web Services Lake Formation. Not used in the normal course of Glue operations.</p>"
+        },
+        "AllowFullTableExternalDataAccess":{
+          "shape":"AllowFullTableExternalDataAccessEnum",
+          "documentation":"<p> Allows third-party engines to access data in Amazon S3 locations that are registered with Lake Formation. </p>"
         }
       },
       "documentation":"<p>The catalog object represents a logical grouping of databases in the Glue Data Catalog or a federated source. You can now create a Redshift-federated catalog or a catalog containing resource links to Redshift databases in another account or region.</p>"
@@ -6208,6 +6312,37 @@
       },
       "documentation":"<p>Specifies a Hudi data source that is registered in the Glue Data Catalog.</p>"
     },
+    "CatalogIcebergSource":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Database",
+        "Table"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the Iceberg data source.</p>"
+        },
+        "Database":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the database to read from.</p>"
+        },
+        "Table":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the table in the database to read from.</p>"
+        },
+        "AdditionalIcebergOptions":{
+          "shape":"AdditionalOptions",
+          "documentation":"<p>Specifies additional connection options for the Iceberg data source.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the Iceberg source.</p>"
+        }
+      },
+      "documentation":"<p>Specifies an Apache Iceberg data source that is registered in the Glue Data Catalog.</p>"
+    },
     "CatalogIdString":{
       "type":"string",
       "max":255,
@@ -6262,6 +6397,10 @@
         "CreateDatabaseDefaultPermissions":{
           "shape":"PrincipalPermissionsList",
           "documentation":"<p>An array of <code>PrincipalPermissions</code> objects. Creates a set of default permissions on the database(s) for principals. Used by Amazon Web Services Lake Formation. Typically should be explicitly set as an empty list.</p>"
+        },
+        "AllowFullTableExternalDataAccess":{
+          "shape":"AllowFullTableExternalDataAccessEnum",
+          "documentation":"<p> Allows third-party engines to access data in Amazon S3 locations that are registered with Lake Formation. </p>"
         }
       },
       "documentation":"<p>A structure that describes catalog properties.</p>"
@@ -6364,6 +6503,10 @@
           "shape":"DataLakeAccessProperties",
           "documentation":"<p>A <code>DataLakeAccessProperties</code> object that specifies properties to configure data lake access for your catalog resource in the Glue Data Catalog.</p>"
         },
+        "IcebergOptimizationProperties":{
+          "shape":"IcebergOptimizationProperties",
+          "documentation":"<p>A structure that specifies Iceberg table optimization properties for the catalog. This includes configuration for compaction, retention, and orphan file deletion operations that can be applied to Iceberg tables in this catalog.</p>"
+        },
         "CustomProperties":{
           "shape":"ParametersMap",
           "documentation":"<p>Additional key-value properties for the catalog, such as column statistics optimizations.</p>"
@@ -6378,6 +6521,10 @@
           "shape":"DataLakeAccessPropertiesOutput",
           "documentation":"<p>A <code>DataLakeAccessProperties</code> object with input properties to configure data lake access for your catalog resource in the Glue Data Catalog.</p>"
         },
+        "IcebergOptimizationProperties":{
+          "shape":"IcebergOptimizationPropertiesOutput",
+          "documentation":"<p>An <code>IcebergOptimizationPropertiesOutput</code> object that specifies Iceberg table optimization settings for the catalog, including configurations for compaction, retention, and orphan file deletion operations.</p>"
+        },
         "CustomProperties":{
           "shape":"ParametersMap",
           "documentation":"<p>Additional key-value properties for the catalog, such as column statistics optimizations.</p>"
@@ -6418,6 +6565,14 @@
         "Table":{
           "shape":"EnclosedInStringProperty",
           "documentation":"<p>The name of the table in the database to read from.</p>"
+        },
+        "PartitionPredicate":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p> Partitions satisfying this predicate are deleted. Files within the retention period in these partitions are not deleted. </p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the catalog source.</p>"
         }
       },
       "documentation":"<p>Specifies a data store in the Glue Data Catalog.</p>"
@@ -6749,6 +6904,10 @@
           "shape":"PostgreSQLCatalogTarget",
           "documentation":"<p>Specifies a target that uses Postgres SQL.</p>"
         },
+        "Route":{
+          "shape":"Route",
+          "documentation":"<p>Specifies a route node that directs data to different output paths based on defined filtering conditions.</p>"
+        },
         "DynamicTransform":{
           "shape":"DynamicTransform",
           "documentation":"<p>Specifies a custom visual transform created by a user.</p>"
@@ -6829,6 +6988,34 @@
         "ConnectorDataTarget":{
           "shape":"ConnectorDataTarget",
           "documentation":"<p>Specifies a target generated with standard connection options.</p>"
+        },
+        "S3CatalogIcebergSource":{
+          "shape":"S3CatalogIcebergSource",
+          "documentation":"<p>Specifies an Apache Iceberg data source that is registered in the Glue Data Catalog. The Iceberg data source must be stored in Amazon S3.</p>"
+        },
+        "CatalogIcebergSource":{
+          "shape":"CatalogIcebergSource",
+          "documentation":"<p>Specifies an Apache Iceberg data source that is registered in the Glue Data Catalog.</p>"
+        },
+        "S3IcebergCatalogTarget":{
+          "shape":"S3IcebergCatalogTarget",
+          "documentation":"<p>Specifies an Apache Iceberg catalog target that writes data to Amazon S3 and registers the table in the Glue Data Catalog.</p>"
+        },
+        "S3IcebergDirectTarget":{
+          "shape":"S3IcebergDirectTarget",
+          "documentation":"<p>Defines configuration parameters for writing data to Amazon S3 as an Apache Iceberg table.</p>"
+        },
+        "S3ExcelSource":{
+          "shape":"S3ExcelSource",
+          "documentation":"<p>Defines configuration parameters for reading Excel files from Amazon S3.</p>"
+        },
+        "S3HyperDirectTarget":{
+          "shape":"S3HyperDirectTarget",
+          "documentation":"<p>Defines configuration parameters for writing data to Amazon S3 using HyperDirect optimization.</p>"
+        },
+        "DynamoDBELTConnectorSource":{
+          "shape":"DynamoDBELTConnectorSource",
+          "documentation":"<p>Specifies a DynamoDB ELT connector source for extracting data from DynamoDB tables.</p>"
         }
       },
       "documentation":"<p> <code>CodeGenConfigurationNode</code> enumerates all valid Node types. One and only one of its member variables can be populated.</p>"
@@ -7325,6 +7512,16 @@
       "min":1,
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\t]*"
     },
+    "CompactionConfiguration":{
+      "type":"structure",
+      "members":{
+        "icebergConfiguration":{
+          "shape":"IcebergCompactionConfiguration",
+          "documentation":"<p>The configuration for an Iceberg compaction optimizer.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a compaction optimizer. This configuration defines how data files in your table will be compacted to improve query performance and reduce storage costs.</p>"
+    },
     "CompactionMetrics":{
       "type":"structure",
       "members":{
@@ -7335,6 +7532,14 @@
       },
       "documentation":"<p>A structure that contains compaction metrics for the optimizer run.</p>"
     },
+    "CompactionStrategy":{
+      "type":"string",
+      "enum":[
+        "binpack",
+        "sort",
+        "z-order"
+      ]
+    },
     "Comparator":{
       "type":"string",
       "enum":[
@@ -7542,7 +7747,8 @@
     },
     "ConditionList":{
       "type":"list",
-      "member":{"shape":"Condition"}
+      "member":{"shape":"Condition"},
+      "max":500
     },
     "ConfigValueString":{
       "type":"string",
@@ -7577,6 +7783,13 @@
       },
       "documentation":"<p>Specifies the values that an admin sets for each job or session parameter configured in a Glue usage profile.</p>"
     },
+    "ConfigurationSource":{
+      "type":"string",
+      "enum":[
+        "catalog",
+        "table"
+      ]
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -7631,7 +7844,7 @@
         },
         "ConnectionProperties":{
           "shape":"ConnectionProperties",
-          "documentation":"<p>These key-value pairs define parameters for the connection when using the version 1 Connection schema:</p> <ul> <li> <p> <code>HOST</code> - The host URI: either the fully qualified domain name (FQDN) or the IPv4 address of the database host.</p> </li> <li> <p> <code>PORT</code> - The port number, between 1024 and 65535, of the port on which the database host is listening for database connections.</p> </li> <li> <p> <code>USER_NAME</code> - The name under which to log in to the database. The value string for <code>USER_NAME</code> is \"<code>USERNAME</code>\".</p> </li> <li> <p> <code>PASSWORD</code> - A password, if one is used, for the user name.</p> </li> <li> <p> <code>ENCRYPTED_PASSWORD</code> - When you enable connection password protection by setting <code>ConnectionPasswordEncryption</code> in the Data Catalog encryption settings, this field stores the encrypted password.</p> </li> <li> <p> <code>JDBC_DRIVER_JAR_URI</code> - The Amazon Simple Storage Service (Amazon S3) path of the JAR file that contains the JDBC driver to use.</p> </li> <li> <p> <code>JDBC_DRIVER_CLASS_NAME</code> - The class name of the JDBC driver to use.</p> </li> <li> <p> <code>JDBC_ENGINE</code> - The name of the JDBC engine to use.</p> </li> <li> <p> <code>JDBC_ENGINE_VERSION</code> - The version of the JDBC engine to use.</p> </li> <li> <p> <code>CONFIG_FILES</code> - (Reserved for future use.)</p> </li> <li> <p> <code>INSTANCE_ID</code> - The instance ID to use.</p> </li> <li> <p> <code>JDBC_CONNECTION_URL</code> - The URL for connecting to a JDBC data source.</p> </li> <li> <p> <code>JDBC_ENFORCE_SSL</code> - A Boolean string (true, false) specifying whether Secure Sockets Layer (SSL) with hostname matching is enforced for the JDBC connection on the client. The default is false.</p> </li> <li> <p> <code>CUSTOM_JDBC_CERT</code> - An Amazon S3 location specifying the customer's root certificate. Glue uses this root certificate to validate the customer’s certificate when connecting to the customer database. Glue only handles X.509 certificates. The certificate provided must be DER-encoded and supplied in Base64 encoding PEM format.</p> </li> <li> <p> <code>SKIP_CUSTOM_JDBC_CERT_VALIDATION</code> - By default, this is <code>false</code>. Glue validates the Signature algorithm and Subject Public Key Algorithm for the customer certificate. The only permitted algorithms for the Signature algorithm are SHA256withRSA, SHA384withRSA or SHA512withRSA. For the Subject Public Key Algorithm, the key length must be at least 2048. You can set the value of this property to <code>true</code> to skip Glue’s validation of the customer certificate.</p> </li> <li> <p> <code>CUSTOM_JDBC_CERT_STRING</code> - A custom JDBC certificate string which is used for domain match or distinguished name match to prevent a man-in-the-middle attack. In Oracle database, this is used as the <code>SSL_SERVER_CERT_DN</code>; in Microsoft SQL Server, this is used as the <code>hostNameInCertificate</code>.</p> </li> <li> <p> <code>CONNECTION_URL</code> - The URL for connecting to a general (non-JDBC) data source.</p> </li> <li> <p> <code>SECRET_ID</code> - The secret ID used for the secret manager of credentials.</p> </li> <li> <p> <code>CONNECTOR_URL</code> - The connector URL for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>CONNECTOR_TYPE</code> - The connector type for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>CONNECTOR_CLASS_NAME</code> - The connector class name for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>KAFKA_BOOTSTRAP_SERVERS</code> - A comma-separated list of host and port pairs that are the addresses of the Apache Kafka brokers in a Kafka cluster to which a Kafka client will connect to and bootstrap itself.</p> </li> <li> <p> <code>KAFKA_SSL_ENABLED</code> - Whether to enable or disable SSL on an Apache Kafka connection. Default value is \"true\".</p> </li> <li> <p> <code>KAFKA_CUSTOM_CERT</code> - The Amazon S3 URL for the private CA cert file (.pem format). The default is an empty string.</p> </li> <li> <p> <code>KAFKA_SKIP_CUSTOM_CERT_VALIDATION</code> - Whether to skip the validation of the CA cert file or not. Glue validates for three algorithms: SHA256withRSA, SHA384withRSA and SHA512withRSA. Default value is \"false\".</p> </li> <li> <p> <code>KAFKA_CLIENT_KEYSTORE</code> - The Amazon S3 location of the client keystore file for Kafka client side authentication (Optional).</p> </li> <li> <p> <code>KAFKA_CLIENT_KEYSTORE_PASSWORD</code> - The password to access the provided keystore (Optional).</p> </li> <li> <p> <code>KAFKA_CLIENT_KEY_PASSWORD</code> - A keystore can consist of multiple keys, so this is the password to access the client key to be used with the Kafka server side key (Optional).</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_CLIENT_KEYSTORE_PASSWORD</code> - The encrypted version of the Kafka client keystore password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_CLIENT_KEY_PASSWORD</code> - The encrypted version of the Kafka client key password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_MECHANISM</code> - <code>\"SCRAM-SHA-512\"</code>, <code>\"GSSAPI\"</code>, <code>\"AWS_MSK_IAM\"</code>, or <code>\"PLAIN\"</code>. These are the supported <a href=\"https://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml\">SASL Mechanisms</a>.</p> </li> <li> <p> <code>KAFKA_SASL_PLAIN_USERNAME</code> - A plaintext username used to authenticate with the \"PLAIN\" mechanism.</p> </li> <li> <p> <code>KAFKA_SASL_PLAIN_PASSWORD</code> - A plaintext password used to authenticate with the \"PLAIN\" mechanism.</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_SASL_PLAIN_PASSWORD</code> - The encrypted version of the Kafka SASL PLAIN password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_USERNAME</code> - A plaintext username used to authenticate with the \"SCRAM-SHA-512\" mechanism.</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_PASSWORD</code> - A plaintext password used to authenticate with the \"SCRAM-SHA-512\" mechanism.</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_SASL_SCRAM_PASSWORD</code> - The encrypted version of the Kafka SASL SCRAM password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_SECRETS_ARN</code> - The Amazon Resource Name of a secret in Amazon Web Services Secrets Manager.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_KEYTAB</code> - The S3 location of a Kerberos <code>keytab</code> file. A keytab stores long-term keys for one or more principals. For more information, see <a href=\"https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html\">MIT Kerberos Documentation: Keytab</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_KRB5_CONF</code> - The S3 location of a Kerberos <code>krb5.conf</code> file. A krb5.conf stores Kerberos configuration information, such as the location of the KDC server. For more information, see <a href=\"https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html\">MIT Kerberos Documentation: krb5.conf</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_SERVICE</code> - The Kerberos service name, as set with <code>sasl.kerberos.service.name</code> in your <a href=\"https://kafka.apache.org/documentation/#brokerconfigs_sasl.kerberos.service.name\">Kafka Configuration</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_PRINCIPAL</code> - The name of the Kerberos princial used by Glue. For more information, see <a href=\"https://kafka.apache.org/documentation/#security_sasl_kerberos_clientconfig\">Kafka Documentation: Configuring Kafka Brokers</a>.</p> </li> <li> <p> <code>ROLE_ARN</code> - The role to be used for running queries.</p> </li> <li> <p> <code>REGION</code> - The Amazon Web Services Region where queries will be run.</p> </li> <li> <p> <code>WORKGROUP_NAME</code> - The name of an Amazon Redshift serverless workgroup or Amazon Athena workgroup in which queries will run.</p> </li> <li> <p> <code>CLUSTER_IDENTIFIER</code> - The cluster identifier of an Amazon Redshift cluster in which queries will run.</p> </li> <li> <p> <code>DATABASE</code> - The Amazon Redshift database that you are connecting to.</p> </li> </ul>"
+          "documentation":"<p>These key-value pairs define parameters for the connection when using the version 1 Connection schema:</p> <ul> <li> <p> <code>HOST</code> - The host URI: either the fully qualified domain name (FQDN) or the IPv4 address of the database host.</p> </li> <li> <p> <code>PORT</code> - The port number, between 1024 and 65535, of the port on which the database host is listening for database connections.</p> </li> <li> <p> <code>USER_NAME</code> - The name under which to log in to the database. The value string for <code>USER_NAME</code> is \"<code>USERNAME</code>\".</p> </li> <li> <p> <code>PASSWORD</code> - A password, if one is used, for the user name.</p> </li> <li> <p> <code>ENCRYPTED_PASSWORD</code> - When you enable connection password protection by setting <code>ConnectionPasswordEncryption</code> in the Data Catalog encryption settings, this field stores the encrypted password.</p> </li> <li> <p> <code>JDBC_DRIVER_JAR_URI</code> - The Amazon Simple Storage Service (Amazon S3) path of the JAR file that contains the JDBC driver to use.</p> </li> <li> <p> <code>JDBC_DRIVER_CLASS_NAME</code> - The class name of the JDBC driver to use.</p> </li> <li> <p> <code>JDBC_ENGINE</code> - The name of the JDBC engine to use.</p> </li> <li> <p> <code>JDBC_ENGINE_VERSION</code> - The version of the JDBC engine to use.</p> </li> <li> <p> <code>CONFIG_FILES</code> - (Reserved for future use.)</p> </li> <li> <p> <code>INSTANCE_ID</code> - The instance ID to use.</p> </li> <li> <p> <code>JDBC_CONNECTION_URL</code> - The URL for connecting to a JDBC data source.</p> </li> <li> <p> <code>JDBC_ENFORCE_SSL</code> - A case-insensitive Boolean string (true, false) specifying whether Secure Sockets Layer (SSL) with hostname matching is enforced for the JDBC connection on the client. The default is false.</p> </li> <li> <p> <code>CUSTOM_JDBC_CERT</code> - An Amazon S3 location specifying the customer's root certificate. Glue uses this root certificate to validate the customer’s certificate when connecting to the customer database. Glue only handles X.509 certificates. The certificate provided must be DER-encoded and supplied in Base64 encoding PEM format.</p> </li> <li> <p> <code>SKIP_CUSTOM_JDBC_CERT_VALIDATION</code> - By default, this is <code>false</code>. Glue validates the Signature algorithm and Subject Public Key Algorithm for the customer certificate. The only permitted algorithms for the Signature algorithm are SHA256withRSA, SHA384withRSA or SHA512withRSA. For the Subject Public Key Algorithm, the key length must be at least 2048. You can set the value of this property to <code>true</code> to skip Glue’s validation of the customer certificate.</p> </li> <li> <p> <code>CUSTOM_JDBC_CERT_STRING</code> - A custom JDBC certificate string which is used for domain match or distinguished name match to prevent a man-in-the-middle attack. In Oracle database, this is used as the <code>SSL_SERVER_CERT_DN</code>; in Microsoft SQL Server, this is used as the <code>hostNameInCertificate</code>.</p> </li> <li> <p> <code>CONNECTION_URL</code> - The URL for connecting to a general (non-JDBC) data source.</p> </li> <li> <p> <code>SECRET_ID</code> - The secret ID used for the secret manager of credentials.</p> </li> <li> <p> <code>CONNECTOR_URL</code> - The connector URL for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>CONNECTOR_TYPE</code> - The connector type for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>CONNECTOR_CLASS_NAME</code> - The connector class name for a MARKETPLACE or CUSTOM connection.</p> </li> <li> <p> <code>KAFKA_BOOTSTRAP_SERVERS</code> - A comma-separated list of host and port pairs that are the addresses of the Apache Kafka brokers in a Kafka cluster to which a Kafka client will connect to and bootstrap itself.</p> </li> <li> <p> <code>KAFKA_SSL_ENABLED</code> - Whether to enable or disable SSL on an Apache Kafka connection. Default value is \"true\".</p> </li> <li> <p> <code>KAFKA_CUSTOM_CERT</code> - The Amazon S3 URL for the private CA cert file (.pem format). The default is an empty string.</p> </li> <li> <p> <code>KAFKA_SKIP_CUSTOM_CERT_VALIDATION</code> - Whether to skip the validation of the CA cert file or not. Glue validates for three algorithms: SHA256withRSA, SHA384withRSA and SHA512withRSA. Default value is \"false\".</p> </li> <li> <p> <code>KAFKA_CLIENT_KEYSTORE</code> - The Amazon S3 location of the client keystore file for Kafka client side authentication (Optional).</p> </li> <li> <p> <code>KAFKA_CLIENT_KEYSTORE_PASSWORD</code> - The password to access the provided keystore (Optional).</p> </li> <li> <p> <code>KAFKA_CLIENT_KEY_PASSWORD</code> - A keystore can consist of multiple keys, so this is the password to access the client key to be used with the Kafka server side key (Optional).</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_CLIENT_KEYSTORE_PASSWORD</code> - The encrypted version of the Kafka client keystore password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_CLIENT_KEY_PASSWORD</code> - The encrypted version of the Kafka client key password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_MECHANISM</code> - <code>\"SCRAM-SHA-512\"</code>, <code>\"GSSAPI\"</code>, <code>\"AWS_MSK_IAM\"</code>, or <code>\"PLAIN\"</code>. These are the supported <a href=\"https://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml\">SASL Mechanisms</a>.</p> </li> <li> <p> <code>KAFKA_SASL_PLAIN_USERNAME</code> - A plaintext username used to authenticate with the \"PLAIN\" mechanism.</p> </li> <li> <p> <code>KAFKA_SASL_PLAIN_PASSWORD</code> - A plaintext password used to authenticate with the \"PLAIN\" mechanism.</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_SASL_PLAIN_PASSWORD</code> - The encrypted version of the Kafka SASL PLAIN password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_USERNAME</code> - A plaintext username used to authenticate with the \"SCRAM-SHA-512\" mechanism.</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_PASSWORD</code> - A plaintext password used to authenticate with the \"SCRAM-SHA-512\" mechanism.</p> </li> <li> <p> <code>ENCRYPTED_KAFKA_SASL_SCRAM_PASSWORD</code> - The encrypted version of the Kafka SASL SCRAM password (if the user has the Glue encrypt passwords setting selected).</p> </li> <li> <p> <code>KAFKA_SASL_SCRAM_SECRETS_ARN</code> - The Amazon Resource Name of a secret in Amazon Web Services Secrets Manager.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_KEYTAB</code> - The S3 location of a Kerberos <code>keytab</code> file. A keytab stores long-term keys for one or more principals. For more information, see <a href=\"https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html\">MIT Kerberos Documentation: Keytab</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_KRB5_CONF</code> - The S3 location of a Kerberos <code>krb5.conf</code> file. A krb5.conf stores Kerberos configuration information, such as the location of the KDC server. For more information, see <a href=\"https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html\">MIT Kerberos Documentation: krb5.conf</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_SERVICE</code> - The Kerberos service name, as set with <code>sasl.kerberos.service.name</code> in your <a href=\"https://kafka.apache.org/documentation/#brokerconfigs_sasl.kerberos.service.name\">Kafka Configuration</a>.</p> </li> <li> <p> <code>KAFKA_SASL_GSSAPI_PRINCIPAL</code> - The name of the Kerberos princial used by Glue. For more information, see <a href=\"https://kafka.apache.org/documentation/#security_sasl_kerberos_clientconfig\">Kafka Documentation: Configuring Kafka Brokers</a>.</p> </li> <li> <p> <code>ROLE_ARN</code> - The role to be used for running queries.</p> </li> <li> <p> <code>REGION</code> - The Amazon Web Services Region where queries will be run.</p> </li> <li> <p> <code>WORKGROUP_NAME</code> - The name of an Amazon Redshift serverless workgroup or Amazon Athena workgroup in which queries will run.</p> </li> <li> <p> <code>CLUSTER_IDENTIFIER</code> - The cluster identifier of an Amazon Redshift cluster in which queries will run.</p> </li> <li> <p> <code>DATABASE</code> - The Amazon Redshift database that you are connecting to.</p> </li> </ul>"
         },
         "SparkProperties":{
           "shape":"PropertyMap",
@@ -7849,6 +8062,15 @@
         "FAILED"
       ]
     },
+    "ConnectionString":{
+      "type":"string",
+      "max":255
+    },
+    "ConnectionStringList":{
+      "type":"list",
+      "member":{"shape":"ConnectionString"},
+      "max":1000
+    },
     "ConnectionType":{
       "type":"string",
       "enum":[
@@ -7877,10 +8099,73 @@
         "ZOHOCRM",
         "SALESFORCEPARDOT",
         "SALESFORCEMARKETINGCLOUD",
+        "ADOBEANALYTICS",
         "SLACK",
+        "LINKEDIN",
+        "MIXPANEL",
+        "ASANA",
         "STRIPE",
+        "SMARTSHEET",
+        "DATADOG",
+        "WOOCOMMERCE",
         "INTERCOM",
-        "SNAPCHATADS"
+        "SNAPCHATADS",
+        "PAYPAL",
+        "QUICKBOOKS",
+        "FACEBOOKPAGEINSIGHTS",
+        "FRESHDESK",
+        "TWILIO",
+        "DOCUSIGNMONITOR",
+        "FRESHSALES",
+        "ZOOM",
+        "GOOGLESEARCHCONSOLE",
+        "SALESFORCECOMMERCECLOUD",
+        "SAPCONCUR",
+        "DYNATRACE",
+        "MICROSOFTDYNAMIC365FINANCEANDOPS",
+        "MICROSOFTTEAMS",
+        "BLACKBAUDRAISEREDGENXT",
+        "MAILCHIMP",
+        "GITLAB",
+        "PENDO",
+        "PRODUCTBOARD",
+        "CIRCLECI",
+        "PIPEDIVE",
+        "SENDGRID",
+        "AZURECOSMOS",
+        "AZURESQL",
+        "BIGQUERY",
+        "BLACKBAUD",
+        "CLOUDERAHIVE",
+        "CLOUDERAIMPALA",
+        "CLOUDWATCH",
+        "CLOUDWATCHMETRICS",
+        "CMDB",
+        "DATALAKEGEN2",
+        "DB2",
+        "DB2AS400",
+        "DOCUMENTDB",
+        "DOMO",
+        "DYNAMODB",
+        "GOOGLECLOUDSTORAGE",
+        "HBASE",
+        "KUSTOMER",
+        "MICROSOFTDYNAMICS365CRM",
+        "MONDAY",
+        "MYSQL",
+        "OKTA",
+        "OPENSEARCH",
+        "ORACLE",
+        "PIPEDRIVE",
+        "POSTGRESQL",
+        "SAPHANA",
+        "SQLSERVER",
+        "SYNAPSE",
+        "TERADATA",
+        "TERADATANOS",
+        "TIMESTREAM",
+        "TPCDS",
+        "VERTICA"
       ]
     },
     "ConnectionTypeBrief":{
@@ -7890,13 +8175,33 @@
           "shape":"ConnectionType",
           "documentation":"<p>The name of the connection type.</p>"
         },
+        "DisplayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The human-readable name for the connection type that is displayed in the Glue console.</p>"
+        },
+        "Vendor":{
+          "shape":"Vendor",
+          "documentation":"<p>The name of the vendor or provider that created or maintains this connection type.</p>"
+        },
         "Description":{
           "shape":"Description",
           "documentation":"<p>A description of the connection type.</p>"
         },
+        "Categories":{
+          "shape":"ListOfString",
+          "documentation":"<p>A list of categories that this connection type belongs to. Categories help users filter and find appropriate connection types based on their use cases.</p>"
+        },
         "Capabilities":{
           "shape":"Capabilities",
           "documentation":"<p>The supported authentication types, data interface types (compute environments), and data operations of the connector.</p>"
+        },
+        "LogoUrl":{
+          "shape":"UrlString",
+          "documentation":"<p>The URL of the logo associated with a connection type.</p>"
+        },
+        "ConnectionTypeVariants":{
+          "shape":"ConnectionTypeVariantList",
+          "documentation":"<p>A list of variants available for this connection type. Different variants may provide specialized configurations for specific use cases or implementations of the same general connection type.</p>"
         }
       },
       "documentation":"<p>Brief information about a supported connection type returned by the <code>ListConnectionTypes</code> API.</p>"
@@ -7905,11 +8210,37 @@
       "type":"list",
       "member":{"shape":"ConnectionTypeBrief"}
     },
+    "ConnectionTypeVariant":{
+      "type":"structure",
+      "members":{
+        "ConnectionTypeVariantName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The unique identifier for the connection type variant. This name is used internally to identify the specific variant of a connection type. </p>"
+        },
+        "DisplayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The human-readable name for the connection type variant that is displayed in the Glue console.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A detailed description of the connection type variant, including its purpose, use cases, and any specific configuration requirements.</p>"
+        },
+        "LogoUrl":{
+          "shape":"UrlString",
+          "documentation":"<p>The URL of the logo associated with a connection type variant.</p>"
+        }
+      },
+      "documentation":"<p>Represents a variant of a connection type in Glue Data Catalog. Connection type variants provide specific configurations and behaviors for different implementations of the same general connection type.</p>"
+    },
+    "ConnectionTypeVariantList":{
+      "type":"list",
+      "member":{"shape":"ConnectionTypeVariant"}
+    },
     "ConnectionsList":{
       "type":"structure",
       "members":{
         "Connections":{
-          "shape":"OrchestrationStringList",
+          "shape":"ConnectionStringList",
           "documentation":"<p>A list of connections used by the job.</p>"
         }
       },
@@ -7990,6 +8321,7 @@
       "max":20,
       "min":1
     },
+    "ContinuousSync":{"type":"boolean"},
     "Crawl":{
       "type":"structure",
       "members":{
@@ -8414,8 +8746,7 @@
     },
     "CreateCatalogResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateClassifierRequest":{
       "type":"structure",
@@ -8440,8 +8771,7 @@
     },
     "CreateClassifierResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateColumnStatisticsTaskSettingsRequest":{
       "type":"structure",
@@ -8491,8 +8821,7 @@
     },
     "CreateColumnStatisticsTaskSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateConnectionRequest":{
       "type":"structure",
@@ -8593,8 +8922,7 @@
     },
     "CreateCrawlerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateCsvClassifierRequest":{
       "type":"structure",
@@ -8712,7 +9040,8 @@
           "shape":"HashString",
           "documentation":"<p>Used for idempotency and is recommended to be set to a random ID (such as a UUID) to avoid creating or starting multiple instances of the same resource.</p>"
         }
-      }
+      },
+      "documentation":"<p>A request to create a data quality ruleset.</p>"
     },
     "CreateDataQualityRulesetResponse":{
       "type":"structure",
@@ -8743,8 +9072,7 @@
     },
     "CreateDatabaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateDevEndpointRequest":{
       "type":"structure",
@@ -8896,6 +9224,35 @@
         }
       }
     },
+    "CreateGlueIdentityCenterConfigurationRequest":{
+      "type":"structure",
+      "required":["InstanceArn"],
+      "members":{
+        "InstanceArn":{
+          "shape":"IdentityCenterInstanceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity Center instance to be associated with the Glue configuration.</p>"
+        },
+        "Scopes":{
+          "shape":"IdentityCenterScopesList",
+          "documentation":"<p>A list of Identity Center scopes that define the permissions and access levels for the Glue configuration.</p>"
+        },
+        "UserBackgroundSessionsEnabled":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Specifies whether users can run background sessions when using Identity Center authentication with Glue services.</p>"
+        }
+      },
+      "documentation":"<p>Request to create a new Glue Identity Center configuration.</p>"
+    },
+    "CreateGlueIdentityCenterConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity Center application that was created for the Glue configuration.</p>"
+        }
+      },
+      "documentation":"<p>Response from creating a new Glue Identity Center configuration.</p>"
+    },
     "CreateGrokClassifierRequest":{
       "type":"structure",
       "required":[
@@ -8923,6 +9280,36 @@
       },
       "documentation":"<p>Specifies a <code>grok</code> classifier for <code>CreateClassifier</code> to create.</p>"
     },
+    "CreateIcebergTableInput":{
+      "type":"structure",
+      "required":[
+        "Location",
+        "Schema"
+      ],
+      "members":{
+        "Location":{
+          "shape":"LocationString",
+          "documentation":"<p>The S3 location where the Iceberg table data will be stored.</p>"
+        },
+        "Schema":{
+          "shape":"IcebergSchema",
+          "documentation":"<p>The schema definition that specifies the structure, field types, and metadata for the Iceberg table.</p>"
+        },
+        "PartitionSpec":{
+          "shape":"IcebergPartitionSpec",
+          "documentation":"<p>The partitioning specification that defines how the Iceberg table data will be organized and partitioned for optimal query performance.</p>"
+        },
+        "WriteOrder":{
+          "shape":"IcebergSortOrder",
+          "documentation":"<p>The sort order specification that defines how data should be ordered within each partition to optimize query performance.</p>"
+        },
+        "Properties":{
+          "shape":"StringToStringMap",
+          "documentation":"<p>Key-value pairs of additional table properties and configuration settings for the Iceberg table.</p>"
+        }
+      },
+      "documentation":"<p>The configuration parameters required to create a new Iceberg table in the Glue Data Catalog, including table properties and metadata specifications.</p>"
+    },
     "CreateIntegrationRequest":{
       "type":"structure",
       "required":[
@@ -8962,6 +9349,10 @@
         "Tags":{
           "shape":"IntegrationTagsList",
           "documentation":"<p>Metadata assigned to the resource consisting of a list of key-value pairs.</p>"
+        },
+        "IntegrationConfig":{
+          "shape":"IntegrationConfig",
+          "documentation":"<p>The configuration settings.</p>"
         }
       }
     },
@@ -9059,6 +9450,10 @@
         "DataFilter":{
           "shape":"String2048",
           "documentation":"<p>Selects source tables for the integration using Maxwell filter syntax.</p>"
+        },
+        "IntegrationConfig":{
+          "shape":"IntegrationConfig",
+          "documentation":"<p>The configuration settings.</p>"
         }
       }
     },
@@ -9071,7 +9466,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String128",
-          "documentation":"<p>The connection ARN of the source, or the database ARN of the target.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target table for which to create integration table properties. Currently, this API only supports creating integration table properties for target tables, and the provided ARN should be the ARN of the target table in the Glue Data Catalog. Support for creating integration table properties for source connections (using the connection ARN) is not yet implemented and will be added in a future release. </p>"
         },
         "TableName":{
           "shape":"String128",
@@ -9079,7 +9474,7 @@
         },
         "SourceTableConfig":{
           "shape":"SourceTableConfig",
-          "documentation":"<p>A structure for the source table configuration.</p>"
+          "documentation":"<p>A structure for the source table configuration. See the <code>SourceTableConfig</code> structure to see list of supported source properties.</p>"
         },
         "TargetTableConfig":{
           "shape":"TargetTableConfig",
@@ -9089,8 +9484,7 @@
     },
     "CreateIntegrationTablePropertiesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateJobRequest":{
       "type":"structure",
@@ -9184,7 +9578,7 @@
         },
         "WorkerType":{
           "shape":"WorkerType",
-          "documentation":"<p>The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs.</p> <ul> <li> <p>For the <code>G.1X</code> worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 94GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.2X</code> worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 138GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.4X</code> worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm).</p> </li> <li> <p>For the <code>G.8X</code> worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the <code>G.4X</code> worker type.</p> </li> <li> <p>For the <code>G.025X</code> worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk, and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 or later streaming jobs.</p> </li> <li> <p>For the <code>Z.2X</code> worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk, and provides up to 8 Ray workers based on the autoscaler.</p> </li> </ul>"
+          "documentation":"<p>The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs.</p> <ul> <li> <p>For the <code>G.1X</code> worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 94GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.2X</code> worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 138GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.4X</code> worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Mumbai), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), Europe (London), Europe (Spain), Europe (Stockholm), and South America (São Paulo).</p> </li> <li> <p>For the <code>G.8X</code> worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the <code>G.4X</code> worker type.</p> </li> <li> <p>For the <code>G.025X</code> worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk, and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 or later streaming jobs.</p> </li> <li> <p>For the <code>Z.2X</code> worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk, and provides up to 8 Ray workers based on the autoscaler.</p> </li> </ul>"
         },
         "CodeGenConfigurationNodes":{
           "shape":"CodeGenConfigurationNodes",
@@ -9331,8 +9725,7 @@
     },
     "CreatePartitionIndexResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreatePartitionRequest":{
       "type":"structure",
@@ -9362,8 +9755,7 @@
     },
     "CreatePartitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateRegistryInput":{
       "type":"structure",
@@ -9676,15 +10068,11 @@
     },
     "CreateTableOptimizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateTableRequest":{
       "type":"structure",
-      "required":[
-        "DatabaseName",
-        "TableInput"
-      ],
+      "required":["DatabaseName"],
       "members":{
         "CatalogId":{
           "shape":"CatalogIdString",
@@ -9694,6 +10082,10 @@
           "shape":"NameString",
           "documentation":"<p>The catalog database in which to create the new table. For Hive compatibility, this name is entirely lowercase.</p>"
         },
+        "Name":{
+          "shape":"NameString",
+          "documentation":"<p>The unique identifier for the table within the specified database that will be created in the Glue Data Catalog.</p>"
+        },
         "TableInput":{
           "shape":"TableInput",
           "documentation":"<p>The <code>TableInput</code> object that defines the metadata table to create in the catalog.</p>"
@@ -9714,8 +10106,7 @@
     },
     "CreateTableResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateTriggerRequest":{
       "type":"structure",
@@ -9833,8 +10224,7 @@
     },
     "CreateUserDefinedFunctionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateWorkflowRequest":{
       "type":"structure",
@@ -9845,7 +10235,7 @@
           "documentation":"<p>The name to be assigned to the workflow. It should be unique within your account.</p>"
         },
         "Description":{
-          "shape":"GenericString",
+          "shape":"WorkflowDescriptionString",
           "documentation":"<p>A description of the workflow.</p>"
         },
         "DefaultRunProperties":{
@@ -10081,6 +10471,55 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "DDBELTCatalogAdditionalOptions":{
+      "type":"structure",
+      "members":{
+        "DynamodbExport":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Specifies the DynamoDB export configuration for the ELT operation.</p>"
+        },
+        "DynamodbUnnestDDBJson":{
+          "shape":"BooleanValue",
+          "documentation":"<p>Specifies whether to unnest DynamoDB JSON format. When set to <code>true</code>, nested JSON structures in DynamoDB items are flattened.</p>"
+        }
+      },
+      "documentation":"<p>Specifies additional options for DynamoDB ELT catalog operations.</p>"
+    },
+    "DDBELTConnectionOptions":{
+      "type":"structure",
+      "required":["DynamodbTableArn"],
+      "members":{
+        "DynamodbExport":{
+          "shape":"DdbExportType",
+          "documentation":"<p>Specifies the export type for DynamoDB data extraction. This parameter determines how data is exported from the DynamoDB table during the ELT process.</p>"
+        },
+        "DynamodbUnnestDDBJson":{
+          "shape":"BooleanValue",
+          "documentation":"<p>A boolean value that specifies whether to unnest DynamoDB JSON format during data extraction. When set to <code>true</code>, the connector will flatten nested JSON structures from DynamoDB items. When set to <code>false</code>, the original DynamoDB JSON structure is preserved.</p>"
+        },
+        "DynamodbTableArn":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DynamoDB table to extract data from. This parameter specifies the source table for the ELT operation. </p>"
+        },
+        "DynamodbS3Bucket":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the Amazon S3 bucket used for intermediate storage during the DynamoDB ELT process. This bucket is used to temporarily store exported DynamoDB data before it is processed by the ELT job.</p>"
+        },
+        "DynamodbS3Prefix":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The S3 object key prefix for files stored in the intermediate S3 bucket during the DynamoDB ELT process. This prefix helps organize and identify the temporary files created during data extraction.</p>"
+        },
+        "DynamodbS3BucketOwner":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The Amazon Web Services account ID of the owner of the S3 bucket specified in <code>DynamodbS3Bucket</code>. This parameter is required when the S3 bucket is owned by a different Amazon Web Services account than the one running the ELT job, enabling cross-account access to the intermediate storage bucket.</p>"
+        },
+        "DynamodbStsRoleArn":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Security Token Service (STS) role to assume for accessing DynamoDB and S3 resources during the ELT operation. This role must have the necessary permissions to read from the DynamoDB table and write to the intermediate S3 bucket. </p>"
+        }
+      },
+      "documentation":"<p>Specifies connection options for DynamoDB ELT (Extract, Load, Transform) operations. This structure contains configuration parameters for connecting to and extracting data from DynamoDB tables using the ELT connector.</p>"
+    },
     "DQAdditionalOptions":{
       "type":"map",
       "key":{"shape":"AdditionalOptionKeys"},
@@ -10266,6 +10705,36 @@
       "type":"list",
       "member":{"shape":"DataOperation"}
     },
+    "DataQualityAggregatedMetrics":{
+      "type":"structure",
+      "members":{
+        "TotalRowsProcessed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of rows that were processed during the data quality evaluation.</p>"
+        },
+        "TotalRowsPassed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of rows that passed all applicable data quality rules.</p>"
+        },
+        "TotalRowsFailed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of rows that failed one or more data quality rules.</p>"
+        },
+        "TotalRulesProcessed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of data quality rules that were evaluated.</p>"
+        },
+        "TotalRulesPassed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of data quality rules that passed their evaluation criteria.</p>"
+        },
+        "TotalRulesFailed":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The total number of data quality rules that failed their evaluation criteria.</p>"
+        }
+      },
+      "documentation":"<p>A summary of metrics showing the total counts of processed rows and rules, including their pass/fail statistics based on row-level results.</p>"
+    },
     "DataQualityAnalyzerResult":{
       "type":"structure",
       "members":{
@@ -10333,6 +10802,40 @@
       },
       "documentation":"<p>Additional run options you can specify for an evaluation run.</p>"
     },
+    "DataQualityGlueTable":{
+      "type":"structure",
+      "required":[
+        "DatabaseName",
+        "TableName"
+      ],
+      "members":{
+        "DatabaseName":{
+          "shape":"NameString",
+          "documentation":"<p>A database name in the Glue Data Catalog.</p>"
+        },
+        "TableName":{
+          "shape":"NameString",
+          "documentation":"<p>A table name in the Glue Data Catalog.</p>"
+        },
+        "CatalogId":{
+          "shape":"NameString",
+          "documentation":"<p>A unique identifier for the Glue Data Catalog.</p>"
+        },
+        "ConnectionName":{
+          "shape":"NameString",
+          "documentation":"<p>The name of the connection to the Glue Data Catalog.</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"GlueTableAdditionalOptions",
+          "documentation":"<p>Additional options for the table. Currently there are two keys supported:</p> <ul> <li> <p> <code>pushDownPredicate</code>: to filter on partitions without having to list and read all the files in your dataset.</p> </li> <li> <p> <code>catalogPartitionPredicate</code>: to use server-side partition pruning using partition indexes in the Glue Data Catalog.</p> </li> </ul>"
+        },
+        "PreProcessingQuery":{
+          "shape":"PreProcessingQueryString",
+          "documentation":"<p>SQL Query of SparkSQL format that can be used to pre-process the data for the table in Glue Data Catalog, before running the Data Quality Operation.</p>"
+        }
+      },
+      "documentation":"<p>The database and table in the Glue Data Catalog that is used for input or output data for Data Quality Operations.</p>"
+    },
     "DataQualityMetricValues":{
       "type":"structure",
       "members":{
@@ -10448,6 +10951,10 @@
         "Observations":{
           "shape":"DataQualityObservations",
           "documentation":"<p>A list of <code>DataQualityObservation</code> objects representing the observations generated after evaluating the rules and analyzers. </p>"
+        },
+        "AggregatedMetrics":{
+          "shape":"DataQualityAggregatedMetrics",
+          "documentation":"<p> A summary of <code>DataQualityAggregatedMetrics</code> objects showing the total counts of processed rows and rules, including their pass/fail statistics based on row-level results. </p>"
         }
       },
       "documentation":"<p>Describes a data quality result.</p>"
@@ -10595,6 +11102,14 @@
         "EvaluatedRule":{
           "shape":"DataQualityRuleResultDescription",
           "documentation":"<p>The evaluated rule.</p>"
+        },
+        "RuleMetrics":{
+          "shape":"RuleMetricsMap",
+          "documentation":"<p>A map containing metrics associated with the evaluation of the rule based on row-level results. </p>"
+        },
+        "Labels":{
+          "shape":"Labels",
+          "documentation":"<p>A map containing labels assigned to the data quality rule. </p>"
         }
       },
       "documentation":"<p>Describes the result of the evaluation of a data quality rule.</p>"
@@ -10766,11 +11281,14 @@
     },
     "DataSource":{
       "type":"structure",
-      "required":["GlueTable"],
       "members":{
         "GlueTable":{
           "shape":"GlueTable",
           "documentation":"<p>An Glue table.</p>"
+        },
+        "DataQualityGlueTable":{
+          "shape":"DataQualityGlueTable",
+          "documentation":"<p>An Glue table for Data Quality Operations.</p>"
         }
       },
       "documentation":"<p>A data source (an Glue table) for which you want data quality results.</p>"
@@ -10825,7 +11343,10 @@
     },
     "DatabaseAttributes":{
       "type":"string",
-      "enum":["NAME"]
+      "enum":[
+        "NAME",
+        "TARGET_DATABASE"
+      ]
     },
     "DatabaseAttributesList":{
       "type":"list",
@@ -10961,6 +11482,13 @@
       },
       "documentation":"<p>Defines column statistics supported for timestamp data columns.</p>"
     },
+    "DdbExportType":{
+      "type":"string",
+      "enum":[
+        "ddb",
+        "s3"
+      ]
+    },
     "DecimalColumnStatisticsData":{
       "type":"structure",
       "required":[
@@ -11044,8 +11572,7 @@
     },
     "DeleteCatalogResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteClassifierRequest":{
       "type":"structure",
@@ -11059,8 +11586,7 @@
     },
     "DeleteClassifierResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteColumnStatisticsForPartitionRequest":{
       "type":"structure",
@@ -11095,8 +11621,7 @@
     },
     "DeleteColumnStatisticsForPartitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteColumnStatisticsForTableRequest":{
       "type":"structure",
@@ -11126,8 +11651,7 @@
     },
     "DeleteColumnStatisticsForTableResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteColumnStatisticsTaskSettingsRequest":{
       "type":"structure",
@@ -11148,8 +11672,7 @@
     },
     "DeleteColumnStatisticsTaskSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConnectionNameList":{
       "type":"list",
@@ -11173,8 +11696,7 @@
     },
     "DeleteConnectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCrawlerRequest":{
       "type":"structure",
@@ -11188,8 +11710,7 @@
     },
     "DeleteCrawlerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCustomEntityTypeRequest":{
       "type":"structure",
@@ -11222,8 +11743,7 @@
     },
     "DeleteDataQualityRulesetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDatabaseRequest":{
       "type":"structure",
@@ -11241,8 +11761,7 @@
     },
     "DeleteDatabaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDevEndpointRequest":{
       "type":"structure",
@@ -11256,8 +11775,17 @@
     },
     "DeleteDevEndpointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "DeleteGlueIdentityCenterConfigurationRequest":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Request to delete the existing Glue Identity Center configuration.</p>"
+    },
+    "DeleteGlueIdentityCenterConfigurationResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Response from deleting the Glue Identity Center configuration.</p>"
     },
     "DeleteIntegrationRequest":{
       "type":"structure",
@@ -11349,8 +11877,7 @@
     },
     "DeleteIntegrationTablePropertiesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteJobRequest":{
       "type":"structure",
@@ -11418,8 +11945,7 @@
     },
     "DeletePartitionIndexResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePartitionRequest":{
       "type":"structure",
@@ -11449,8 +11975,7 @@
     },
     "DeletePartitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRegistryInput":{
       "type":"structure",
@@ -11494,8 +12019,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSchemaInput":{
       "type":"structure",
@@ -11562,8 +12086,7 @@
     },
     "DeleteSecurityConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSessionRequest":{
       "type":"structure",
@@ -11617,8 +12140,7 @@
     },
     "DeleteTableOptimizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTableRequest":{
       "type":"structure",
@@ -11647,8 +12169,7 @@
     },
     "DeleteTableResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTableVersionRequest":{
       "type":"structure",
@@ -11678,8 +12199,7 @@
     },
     "DeleteTableVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTriggerRequest":{
       "type":"structure",
@@ -11712,8 +12232,7 @@
     },
     "DeleteUsageProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserDefinedFunctionRequest":{
       "type":"structure",
@@ -11738,8 +12257,7 @@
     },
     "DeleteUserDefinedFunctionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkflowRequest":{
       "type":"structure",
@@ -12146,6 +12664,10 @@
         "RedshiftTmpDir":{
           "shape":"EnclosedInStringProperty",
           "documentation":"<p>The temp directory of the JDBC Redshift source.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the direct JDBC source.</p>"
         }
       },
       "documentation":"<p>Specifies the direct JDBC source connection.</p>"
@@ -12230,6 +12752,11 @@
       },
       "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
     },
+    "DisplayName":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "Double":{"type":"double"},
     "DoubleColumnStatisticsData":{
       "type":"structure",
@@ -12393,10 +12920,37 @@
         "Table":{
           "shape":"EnclosedInStringProperty",
           "documentation":"<p>The name of the table in the database to read from.</p>"
+        },
+        "PitrEnabled":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Specifies whether Point-in-Time Recovery (PITR) is enabled for the DynamoDB table. When set to <code>true</code>, allows reading from a specific point in time. The default value is <code>false</code>.</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"DDBELTCatalogAdditionalOptions",
+          "documentation":"<p>Specifies additional connection options for the DynamoDB data source.</p>"
         }
       },
       "documentation":"<p>Specifies a DynamoDB data source in the Glue Data Catalog.</p>"
     },
+    "DynamoDBELTConnectorSource":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the DynamoDB ELT connector source.</p>"
+        },
+        "ConnectionOptions":{
+          "shape":"DDBELTConnectionOptions",
+          "documentation":"<p>The connection options for the DynamoDB ELT connector source.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the DynamoDB ELT connector source.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a DynamoDB ELT connector source for extracting data from DynamoDB tables.</p>"
+    },
     "DynamoDBTarget":{
       "type":"structure",
       "members":{
@@ -12785,6 +13339,10 @@
         "ConnectionName":{
           "shape":"NameString",
           "documentation":"<p>The name of the connection to an external data source, for example a Redshift-federated catalog.</p>"
+        },
+        "ConnectionType":{
+          "shape":"NameString",
+          "documentation":"<p>The type of connection used to access the federated catalog, specifying the protocol or method for connection to the external data source.</p>"
         }
       },
       "documentation":"<p>A catalog that points to an entity outside the Glue Data Catalog.</p>"
@@ -12799,6 +13357,10 @@
         "ConnectionName":{
           "shape":"NameString",
           "documentation":"<p>The name of the connection to the external metastore.</p>"
+        },
+        "ConnectionType":{
+          "shape":"NameString",
+          "documentation":"<p>The type of connection used to access the federated database, such as JDBC, ODBC, or other supported connection protocols.</p>"
         }
       },
       "documentation":"<p>A database that points to an entity outside the Glue Data Catalog.</p>"
@@ -12832,6 +13394,10 @@
         "ConnectionName":{
           "shape":"NameString",
           "documentation":"<p>The name of the connection to the external metastore.</p>"
+        },
+        "ConnectionType":{
+          "shape":"NameString",
+          "documentation":"<p>The type of connection used to access the federated table, specifying the protocol or method for connecting to the external data source.</p>"
         }
       },
       "documentation":"<p>A table that points to an entity outside the Glue Data Catalog.</p>"
@@ -13981,8 +14547,13 @@
         "Observations":{
           "shape":"DataQualityObservations",
           "documentation":"<p>A list of <code>DataQualityObservation</code> objects representing the observations generated after evaluating the rules and analyzers. </p>"
+        },
+        "AggregatedMetrics":{
+          "shape":"DataQualityAggregatedMetrics",
+          "documentation":"<p> A summary of <code>DataQualityAggregatedMetrics</code> objects showing the total counts of processed rows and rules, including their pass/fail statistics based on row-level results. </p>"
         }
-      }
+      },
+      "documentation":"<p>The response for the data quality result.</p>"
     },
     "GetDataQualityRuleRecommendationRunRequest":{
       "type":"structure",
@@ -14053,7 +14624,8 @@
           "shape":"NameString",
           "documentation":"<p>The name of the security configuration created with the data quality encryption option.</p>"
         }
-      }
+      },
+      "documentation":"<p>The response for the Data Quality rule recommendation run.</p>"
     },
     "GetDataQualityRulesetEvaluationRunRequest":{
       "type":"structure",
@@ -14175,7 +14747,8 @@
           "shape":"NameString",
           "documentation":"<p>The name of the security configuration created with the data quality encryption option.</p>"
         }
-      }
+      },
+      "documentation":"<p>Returns the data quality ruleset response.</p>"
     },
     "GetDatabaseRequest":{
       "type":"structure",
@@ -14368,6 +14941,33 @@
         }
       }
     },
+    "GetGlueIdentityCenterConfigurationRequest":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Request to retrieve the Glue Identity Center configuration.</p>"
+    },
+    "GetGlueIdentityCenterConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity Center application associated with the Glue configuration.</p>"
+        },
+        "InstanceArn":{
+          "shape":"IdentityCenterInstanceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity Center instance associated with the Glue configuration.</p>"
+        },
+        "Scopes":{
+          "shape":"OrchestrationStringList",
+          "documentation":"<p>A list of Identity Center scopes that define the permissions and access levels for the Glue configuration.</p>"
+        },
+        "UserBackgroundSessionsEnabled":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Indicates whether users can run background sessions when using Identity Center authentication with Glue services.</p>"
+        }
+      },
+      "documentation":"<p>Response containing the Glue Identity Center configuration details.</p>"
+    },
     "GetIntegrationResourcePropertyRequest":{
       "type":"structure",
       "required":["ResourceArn"],
@@ -14404,7 +15004,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String128",
-          "documentation":"<p>The connection ARN of the source, or the database ARN of the target.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target table for which to retrieve integration table properties. Currently, this API only supports retrieving properties for target tables, and the provided ARN should be the ARN of the target table in the Glue Data Catalog. Support for retrieving integration table properties for source connections (using the connection ARN) is not yet implemented and will be added in a future release. </p>"
         },
         "TableName":{
           "shape":"String128",
@@ -14417,7 +15017,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String128",
-          "documentation":"<p>The connection ARN of the source, or the database ARN of the target.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target table for which to retrieve integration table properties. Currently, this API only supports retrieving properties for target tables, and the provided ARN should be the ARN of the target table in the Glue Data Catalog. Support for retrieving integration table properties for source connections (using the connection ARN) is not yet implemented and will be added in a future release. </p>"
         },
         "TableName":{
           "shape":"String128",
@@ -15465,6 +16065,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The time as of when to read the table contents. If not set, the most recent transaction commit time will be used. Cannot be specified along with <code>TransactionId</code>.</p>"
         },
+        "AuditContext":{
+          "shape":"AuditContext",
+          "documentation":"<p>A structure containing the Lake Formation <a href=\"https://docs.aws.amazon.com/glue/latest/webapi/API_AuditContext.html\">audit context</a>.</p>"
+        },
         "IncludeStatusDetails":{
           "shape":"BooleanNullable",
           "documentation":"<p>Specifies whether to include status details related to a request to create or update an Glue Data Catalog view.</p>"
@@ -15592,6 +16196,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The time as of when to read the table contents. If not set, the most recent transaction commit time will be used. Cannot be specified along with <code>TransactionId</code>.</p>"
         },
+        "AuditContext":{
+          "shape":"AuditContext",
+          "documentation":"<p>A structure containing the Lake Formation <a href=\"https://docs.aws.amazon.com/glue/latest/webapi/API_AuditContext.html\">audit context</a>.</p>"
+        },
         "IncludeStatusDetails":{
           "shape":"BooleanNullable",
           "documentation":"<p>Specifies whether to include status details related to a request to create or update an Glue Data Catalog view.</p>"
@@ -16219,6 +16827,10 @@
         "Type":{
           "shape":"ColumnTypeString",
           "documentation":"<p>The hive type for this column in the Glue Studio schema.</p>"
+        },
+        "GlueStudioType":{
+          "shape":"ColumnTypeString",
+          "documentation":"<p>The data type of the column as defined in Glue Studio.</p>"
         }
       },
       "documentation":"<p>Specifies a single column in a Glue schema definition.</p>"
@@ -16388,6 +17000,33 @@
       "min":1,
       "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\t]*"
     },
+    "GroupFilters":{
+      "type":"structure",
+      "required":[
+        "GroupName",
+        "Filters",
+        "LogicalOperator"
+      ],
+      "members":{
+        "GroupName":{
+          "shape":"GenericLimitedString",
+          "documentation":"<p>The name of the filter group.</p>"
+        },
+        "Filters":{
+          "shape":"FilterExpressions",
+          "documentation":"<p>A list of filter expressions that define the conditions for this group.</p>"
+        },
+        "LogicalOperator":{
+          "shape":"FilterLogicalOperator",
+          "documentation":"<p>The logical operator used to combine the filters in this group. Determines whether all filters must match (AND) or any filter can match (OR).</p>"
+        }
+      },
+      "documentation":"<p>Specifies a group of filters with a logical operator that determines how the filters are combined to evaluate routing conditions.</p>"
+    },
+    "GroupFiltersList":{
+      "type":"list",
+      "member":{"shape":"GroupFilters"}
+    },
     "HashString":{
       "type":"string",
       "max":255,
@@ -16429,10 +17068,32 @@
       "type":"list",
       "member":{"shape":"HudiTarget"}
     },
+    "HyperTargetCompressionType":{
+      "type":"string",
+      "enum":["uncompressed"]
+    },
     "IAMRoleArn":{
       "type":"string",
       "pattern":"^arn:aws(-(cn|us-gov|iso(-[bef])?))?:iam::[0-9]{12}:role/.+"
     },
+    "IcebergCompactionConfiguration":{
+      "type":"structure",
+      "members":{
+        "strategy":{
+          "shape":"CompactionStrategy",
+          "documentation":"<p>The strategy to use for compaction. Valid values are:</p> <ul> <li> <p> <code>binpack</code>: Combines small files into larger files, typically targeting sizes over 100MB, while applying any pending deletes. This is the recommended compaction strategy for most use cases. </p> </li> <li> <p> <code>sort</code>: Organizes data based on specified columns which are sorted hierarchically during compaction, improving query performance for filtered operations. This strategy is recommended when your queries frequently filter on specific columns. To use this strategy, you must first define a sort order in your Iceberg table properties using the <code>sort_order</code> table property.</p> </li> <li> <p> <code>z-order</code>: Optimizes data organization by blending multiple attributes into a single scalar value that can be used for sorting, allowing efficient querying across multiple dimensions. This strategy is recommended when you need to query data across multiple dimensions simultaneously. To use this strategy, you must first define a sort order in your Iceberg table properties using the <code>sort_order</code> table property. </p> </li> </ul> <p>If an input is not provided, the default value 'binpack' will be used.</p>"
+        },
+        "minInputFiles":{
+          "shape":"NullableInteger",
+          "documentation":"<p>The minimum number of data files that must be present in a partition before compaction will actually compact files. This parameter helps control when compaction is triggered, preventing unnecessary compaction operations on partitions with few files. If an input is not provided, the default value 100 will be used.</p>"
+        },
+        "deleteFileThreshold":{
+          "shape":"NullableInteger",
+          "documentation":"<p>The minimum number of deletes that must be present in a data file to make it eligible for compaction. This parameter helps optimize compaction by focusing on files that contain a significant number of delete operations, which can improve query performance by removing deleted records. If an input is not provided, the default value 1 will be used.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for an Iceberg compaction optimizer. This configuration defines parameters for optimizing the layout of data files in Iceberg tables.</p>"
+    },
     "IcebergCompactionMetrics":{
       "type":"structure",
       "members":{
@@ -16444,9 +17105,13 @@
           "shape":"metricCounts",
           "documentation":"<p>The number of files removed by the compaction job run.</p>"
         },
+        "DpuHours":{
+          "shape":"dpuHours",
+          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+        },
         "NumberOfDpus":{
           "shape":"dpuCounts",
-          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+          "documentation":"<p>The number of DPUs consumed by the job, rounded up to the nearest whole number.</p>"
         },
         "JobDurationInHour":{
           "shape":"dpuDurationInHour",
@@ -16455,6 +17120,11 @@
       },
       "documentation":"<p>Compaction metrics for Iceberg for the optimizer run.</p>"
     },
+    "IcebergDocument":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
     "IcebergInput":{
       "type":"structure",
       "required":["MetadataOperation"],
@@ -16466,10 +17136,69 @@
         "Version":{
           "shape":"VersionString",
           "documentation":"<p>The table version for the Iceberg table. Defaults to 2.</p>"
+        },
+        "CreateIcebergTableInput":{
+          "shape":"CreateIcebergTableInput",
+          "documentation":"<p>The configuration parameters required to create a new Iceberg table in the Glue Data Catalog, including table properties and metadata specifications.</p>"
         }
       },
       "documentation":"<p>A structure that defines an Apache Iceberg metadata table to create in the catalog.</p>"
     },
+    "IcebergNullOrder":{
+      "type":"string",
+      "enum":[
+        "nulls-first",
+        "nulls-last"
+      ]
+    },
+    "IcebergOptimizationProperties":{
+      "type":"structure",
+      "members":{
+        "RoleArn":{
+          "shape":"IAMRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that will be assumed to perform Iceberg table optimization operations.</p>"
+        },
+        "Compaction":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg table compaction operations, which optimize the layout of data files to improve query performance.</p>"
+        },
+        "Retention":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg table retention operations, which manage the lifecycle of table snapshots to control storage costs.</p>"
+        },
+        "OrphanFileDeletion":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg orphan file deletion operations, which identify and remove files that are no longer referenced by the table metadata.</p>"
+        }
+      },
+      "documentation":"<p>A structure that specifies Iceberg table optimization properties for the catalog, including configurations for compaction, retention, and orphan file deletion operations.</p>"
+    },
+    "IcebergOptimizationPropertiesOutput":{
+      "type":"structure",
+      "members":{
+        "RoleArn":{
+          "shape":"IAMRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that is used to perform Iceberg table optimization operations.</p>"
+        },
+        "Compaction":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg table compaction operations, which optimize the layout of data files to improve query performance.</p>"
+        },
+        "Retention":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg table retention operations, which manage the lifecycle of table snapshots to control storage costs.</p>"
+        },
+        "OrphanFileDeletion":{
+          "shape":"ParametersMap",
+          "documentation":"<p>A map of key-value pairs that specify configuration parameters for Iceberg orphan file deletion operations, which identify and remove files that are no longer referenced by the table metadata.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the Iceberg optimization properties were last updated.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains the output properties of Iceberg table optimization configuration for your catalog resource in the Glue Data Catalog.</p>"
+    },
     "IcebergOrphanFileDeletionConfiguration":{
       "type":"structure",
       "members":{
@@ -16480,6 +17209,10 @@
         "location":{
           "shape":"MessageString",
           "documentation":"<p>Specifies a directory in which to look for files (defaults to the table's location). You may choose a sub-directory rather than the top-level table location.</p>"
+        },
+        "runRateInHours":{
+          "shape":"NullableInteger",
+          "documentation":"<p>The interval in hours between orphan file deletion job runs. This parameter controls how frequently the orphan file deletion optimizer will run to clean up orphan files. The value must be between 3 and 168 hours (7 days). If an input is not provided, the default value 24 will be used.</p>"
         }
       },
       "documentation":"<p>The configuration for an Iceberg orphan file deletion optimizer.</p>"
@@ -16491,9 +17224,13 @@
           "shape":"metricCounts",
           "documentation":"<p>The number of orphan files deleted by the orphan file deletion job run.</p>"
         },
+        "DpuHours":{
+          "shape":"dpuHours",
+          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+        },
         "NumberOfDpus":{
           "shape":"dpuCounts",
-          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+          "documentation":"<p>The number of DPUs consumed by the job, rounded up to the nearest whole number.</p>"
         },
         "JobDurationInHour":{
           "shape":"dpuDurationInHour",
@@ -16502,6 +17239,52 @@
       },
       "documentation":"<p>Orphan file deletion metrics for Iceberg for the optimizer run.</p>"
     },
+    "IcebergPartitionField":{
+      "type":"structure",
+      "required":[
+        "SourceId",
+        "Transform",
+        "Name"
+      ],
+      "members":{
+        "SourceId":{
+          "shape":"Integer",
+          "documentation":"<p>The identifier of the source field from the table schema that this partition field is based on.</p>"
+        },
+        "Transform":{
+          "shape":"IcebergTransformString",
+          "documentation":"<p>The transformation function applied to the source field to create the partition, such as identity, bucket, truncate, year, month, day, or hour.</p>"
+        },
+        "Name":{
+          "shape":"ColumnNameString",
+          "documentation":"<p>The name of the partition field as it will appear in the partitioned table structure.</p>"
+        },
+        "FieldId":{
+          "shape":"Integer",
+          "documentation":"<p>The unique identifier assigned to this partition field within the Iceberg table's partition specification.</p>"
+        }
+      },
+      "documentation":"<p>Defines a single partition field within an Iceberg partition specification, including the source field, transformation function, partition name, and unique identifier.</p>"
+    },
+    "IcebergPartitionSpec":{
+      "type":"structure",
+      "required":["Fields"],
+      "members":{
+        "Fields":{
+          "shape":"IcebergPartitionSpecFieldList",
+          "documentation":"<p>The list of partition fields that define how the table data should be partitioned, including source fields and their transformations.</p>"
+        },
+        "SpecId":{
+          "shape":"Integer",
+          "documentation":"<p>The unique identifier for this partition specification within the Iceberg table's metadata history.</p>"
+        }
+      },
+      "documentation":"<p>Defines the partitioning specification for an Iceberg table, determining how table data will be organized and partitioned for optimal query performance.</p>"
+    },
+    "IcebergPartitionSpecFieldList":{
+      "type":"list",
+      "member":{"shape":"IcebergPartitionField"}
+    },
     "IcebergRetentionConfiguration":{
       "type":"structure",
       "members":{
@@ -16516,6 +17299,10 @@
         "cleanExpiredFiles":{
           "shape":"NullableBoolean",
           "documentation":"<p>If set to false, snapshots are only deleted from table metadata, and the underlying data and metadata files are not deleted.</p>"
+        },
+        "runRateInHours":{
+          "shape":"NullableInteger",
+          "documentation":"<p>The interval in hours between retention job runs. This parameter controls how frequently the retention optimizer will run to clean up expired snapshots. The value must be between 3 and 168 hours (7 days). If an input is not provided, the default value 24 will be used.</p>"
         }
       },
       "documentation":"<p>The configuration for an Iceberg snapshot retention optimizer.</p>"
@@ -16535,9 +17322,13 @@
           "shape":"metricCounts",
           "documentation":"<p>The number of manifest lists deleted by the retention job run.</p>"
         },
+        "DpuHours":{
+          "shape":"dpuHours",
+          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+        },
         "NumberOfDpus":{
           "shape":"dpuCounts",
-          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+          "documentation":"<p>The number of DPUs consumed by the job, rounded up to the nearest whole number.</p>"
         },
         "JobDurationInHour":{
           "shape":"dpuDurationInHour",
@@ -16546,6 +17337,160 @@
       },
       "documentation":"<p>Snapshot retention metrics for Iceberg for the optimizer run.</p>"
     },
+    "IcebergSchema":{
+      "type":"structure",
+      "required":["Fields"],
+      "members":{
+        "SchemaId":{
+          "shape":"Integer",
+          "documentation":"<p>The unique identifier for this schema version within the Iceberg table's schema evolution history.</p>"
+        },
+        "IdentifierFieldIds":{
+          "shape":"IntegerList",
+          "documentation":"<p>The list of field identifiers that uniquely identify records in the table, used for row-level operations and deduplication.</p>"
+        },
+        "Type":{
+          "shape":"IcebergStructTypeEnum",
+          "documentation":"<p>The root type of the schema structure, typically \"struct\" for Iceberg table schemas.</p>"
+        },
+        "Fields":{
+          "shape":"IcebergStructFieldList",
+          "documentation":"<p>The list of field definitions that make up the table schema, including field names, types, and metadata.</p>"
+        }
+      },
+      "documentation":"<p>Defines the schema structure for an Iceberg table, including field definitions, data types, and schema metadata.</p>"
+    },
+    "IcebergSortDirection":{
+      "type":"string",
+      "enum":[
+        "asc",
+        "desc"
+      ]
+    },
+    "IcebergSortField":{
+      "type":"structure",
+      "required":[
+        "SourceId",
+        "Transform",
+        "Direction",
+        "NullOrder"
+      ],
+      "members":{
+        "SourceId":{
+          "shape":"Integer",
+          "documentation":"<p>The identifier of the source field from the table schema that this sort field is based on.</p>"
+        },
+        "Transform":{
+          "shape":"IcebergTransformString",
+          "documentation":"<p>The transformation function applied to the source field before sorting, such as identity, bucket, or truncate.</p>"
+        },
+        "Direction":{
+          "shape":"IcebergSortDirection",
+          "documentation":"<p>The sort direction for this field, either ascending or descending.</p>"
+        },
+        "NullOrder":{
+          "shape":"IcebergNullOrder",
+          "documentation":"<p>The ordering behavior for null values in this field, specifying whether nulls should appear first or last in the sort order.</p>"
+        }
+      },
+      "documentation":"<p>Defines a single field within an Iceberg sort order specification, including the source field, transformation, sort direction, and null value ordering.</p>"
+    },
+    "IcebergSortOrder":{
+      "type":"structure",
+      "required":[
+        "OrderId",
+        "Fields"
+      ],
+      "members":{
+        "OrderId":{
+          "shape":"Integer",
+          "documentation":"<p>The unique identifier for this sort order specification within the Iceberg table's metadata.</p>"
+        },
+        "Fields":{
+          "shape":"IcebergSortOrderFieldList",
+          "documentation":"<p>The list of fields and their sort directions that define the ordering criteria for the Iceberg table data.</p>"
+        }
+      },
+      "documentation":"<p>Defines the sort order specification for an Iceberg table, determining how data should be ordered within partitions to optimize query performance.</p>"
+    },
+    "IcebergSortOrderFieldList":{
+      "type":"list",
+      "member":{"shape":"IcebergSortField"}
+    },
+    "IcebergStructField":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "Name",
+        "Type",
+        "Required"
+      ],
+      "members":{
+        "Id":{
+          "shape":"Integer",
+          "documentation":"<p>The unique identifier assigned to this field within the Iceberg table schema, used for schema evolution and field tracking.</p>"
+        },
+        "Name":{
+          "shape":"ColumnNameString",
+          "documentation":"<p>The name of the field as it appears in the table schema and query operations.</p>"
+        },
+        "Type":{
+          "shape":"IcebergDocument",
+          "documentation":"<p>The data type definition for this field, specifying the structure and format of the data it contains.</p>"
+        },
+        "Required":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether this field is required (non-nullable) or optional (nullable) in the table schema.</p>"
+        },
+        "Doc":{
+          "shape":"CommentString",
+          "documentation":"<p>Optional documentation or description text that provides additional context about the purpose and usage of this field.</p>"
+        }
+      },
+      "documentation":"<p>Defines a single field within an Iceberg table schema, including its identifier, name, data type, nullability, and documentation.</p>"
+    },
+    "IcebergStructFieldList":{
+      "type":"list",
+      "member":{"shape":"IcebergStructField"}
+    },
+    "IcebergStructTypeEnum":{
+      "type":"string",
+      "enum":["struct"]
+    },
+    "IcebergTableUpdate":{
+      "type":"structure",
+      "required":[
+        "Schema",
+        "Location"
+      ],
+      "members":{
+        "Schema":{
+          "shape":"IcebergSchema",
+          "documentation":"<p>The updated schema definition for the Iceberg table, specifying any changes to field structure, data types, or schema metadata.</p>"
+        },
+        "PartitionSpec":{
+          "shape":"IcebergPartitionSpec",
+          "documentation":"<p>The updated partitioning specification that defines how the table data should be reorganized and partitioned.</p>"
+        },
+        "SortOrder":{
+          "shape":"IcebergSortOrder",
+          "documentation":"<p>The updated sort order specification that defines how data should be ordered within partitions for optimal query performance.</p>"
+        },
+        "Location":{
+          "shape":"LocationString",
+          "documentation":"<p>The updated S3 location where the Iceberg table data will be stored.</p>"
+        },
+        "Properties":{
+          "shape":"StringToStringMap",
+          "documentation":"<p>Updated key-value pairs of table properties and configuration settings for the Iceberg table.</p>"
+        }
+      },
+      "documentation":"<p>Defines a complete set of updates to be applied to an Iceberg table, including schema changes, partitioning modifications, sort order adjustments, location updates, and property changes.</p>"
+    },
+    "IcebergTableUpdateList":{
+      "type":"list",
+      "member":{"shape":"IcebergTableUpdate"}
+    },
     "IcebergTarget":{
       "type":"structure",
       "members":{
@@ -16568,10 +17513,20 @@
       },
       "documentation":"<p>Specifies an Apache Iceberg data source where Iceberg tables are stored in Amazon S3.</p>"
     },
+    "IcebergTargetCompressionType":{
+      "type":"string",
+      "enum":[
+        "gzip",
+        "lzo",
+        "uncompressed",
+        "snappy"
+      ]
+    },
     "IcebergTargetList":{
       "type":"list",
       "member":{"shape":"IcebergTarget"}
     },
+    "IcebergTransformString":{"type":"string"},
     "IdString":{
       "type":"string",
       "max":255,
@@ -16589,6 +17544,21 @@
       "documentation":"<p>The same unique identifier was associated with two different records.</p>",
       "exception":true
     },
+    "IdentityCenterInstanceArn":{
+      "type":"string",
+      "max":1224,
+      "min":10
+    },
+    "IdentityCenterScope":{
+      "type":"string",
+      "max":50
+    },
+    "IdentityCenterScopesList":{
+      "type":"list",
+      "member":{"shape":"IdentityCenterScope"},
+      "max":50,
+      "min":1
+    },
     "IdleTimeout":{
       "type":"integer",
       "box":true
@@ -16637,8 +17607,7 @@
     },
     "ImportCatalogToGlueResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ImportLabelsTaskRunProperties":{
       "type":"structure",
@@ -16684,6 +17653,10 @@
           "shape":"IntegrationTimestamp",
           "documentation":"<p>The time that the integration was created, in UTC.</p>"
         },
+        "IntegrationConfig":{
+          "shape":"IntegrationConfig",
+          "documentation":"<p>Properties associated with the integration.</p>"
+        },
         "Errors":{
           "shape":"IntegrationErrorList",
           "documentation":"<p>A list of errors associated with the integration.</p>"
@@ -16712,6 +17685,10 @@
       "max":1,
       "min":0
     },
+    "IntegerList":{
+      "type":"list",
+      "member":{"shape":"Integer"}
+    },
     "IntegerValue":{"type":"integer"},
     "Integration":{
       "type":"structure",
@@ -16764,6 +17741,10 @@
           "shape":"IntegrationTimestamp",
           "documentation":"<p>The time that the integration was created, in UTC.</p>"
         },
+        "IntegrationConfig":{
+          "shape":"IntegrationConfig",
+          "documentation":"<p>Properties associated with the integration.</p>"
+        },
         "Errors":{
           "shape":"IntegrationErrorList",
           "documentation":"<p>A list of errors associated with the integration.</p>"
@@ -16780,6 +17761,24 @@
       "key":{"shape":"IntegrationString"},
       "value":{"shape":"IntegrationString"}
     },
+    "IntegrationConfig":{
+      "type":"structure",
+      "members":{
+        "RefreshInterval":{
+          "shape":"String128",
+          "documentation":"<p>Specifies the frequency at which CDC (Change Data Capture) pulls or incremental loads should occur. This parameter provides flexibility to align the refresh rate with your specific data update patterns, system load considerations, and performance optimization goals. Time increment can be set from 15 minutes to 8640 minutes (six days). Currently supports creation of <code>RefreshInterval</code> only.</p>"
+        },
+        "SourceProperties":{
+          "shape":"IntegrationSourcePropertiesMap",
+          "documentation":"<p> A collection of key-value pairs that specify additional properties for the integration source. These properties provide configuration options that can be used to customize the behavior of the ODB source during data integration operations. </p>"
+        },
+        "ContinuousSync":{
+          "shape":"ContinuousSync",
+          "documentation":"<p>Enables continuous synchronization for on-demand data extractions from SaaS applications to Amazon Web Services data services like Amazon Redshift and Amazon S3.</p>"
+        }
+      },
+      "documentation":"<p>Properties associated with the integration.</p>"
+    },
     "IntegrationConflictOperationFault":{
       "type":"structure",
       "members":{
@@ -16854,11 +17853,15 @@
       "members":{
         "FieldName":{
           "shape":"String128",
-          "documentation":"<p>The field name used to partition data on the target.</p>"
+          "documentation":"<p>The field name used to partition data on the target. Avoid using columns that have unique values for each row (for example, `LastModifiedTimestamp`, `SystemModTimeStamp`) as the partition column. These columns are not suitable for partitioning because they create a large number of small partitions, which can lead to performance issues.</p>"
         },
         "FunctionSpec":{
           "shape":"String128",
-          "documentation":"<p>Specifies a function used to partition data on the target.</p>"
+          "documentation":"<p>Specifies the function used to partition data on the target. The accepted values for this parameter are:</p> <ul> <li> <p> <code>identity</code> - Uses source values directly without transformation</p> </li> <li> <p> <code>year</code> - Extracts the year from timestamp values (e.g., 2023)</p> </li> <li> <p> <code>month</code> - Extracts the month from timestamp values (e.g., 2023-01)</p> </li> <li> <p> <code>day</code> - Extracts the day from timestamp values (e.g., 2023-01-15)</p> </li> <li> <p> <code>hour</code> - Extracts the hour from timestamp values (e.g., 2023-01-15-14)</p> </li> </ul>"
+        },
+        "ConversionSpec":{
+          "shape":"String128",
+          "documentation":"<p>Specifies the timestamp format of the source data. Valid values are:</p> <ul> <li> <p> <code>epoch_sec</code> - Unix epoch timestamp in seconds</p> </li> <li> <p> <code>epoch_milli</code> - Unix epoch timestamp in milliseconds</p> </li> <li> <p> <code>iso</code> - ISO 8601 formatted timestamp</p> </li> </ul> <note> <p> Only specify <code>ConversionSpec</code> when using timestamp-based partition functions (year, month, day, or hour). Glue Zero-ETL uses this parameter to correctly transform source data into timestamp format before partitioning. </p> <p> Do not use high-cardinality columns with the <code>identity</code> partition function. High-cardinality columns include: </p> <ul> <li> <p>Primary keys</p> </li> <li> <p>Timestamp fields (such as <code>LastModifiedTimestamp</code>, <code>CreatedDate</code>)</p> </li> <li> <p>System-generated timestamps</p> </li> </ul> <p> Using high-cardinality columns with identity partitioning creates many small partitions, which can significantly degrade ingestion performance. </p> </note>"
         }
       },
       "documentation":"<p>A structure that describes how data is partitioned on the target.</p>"
@@ -16878,6 +17881,11 @@
       "documentation":"<p>The data processed through your integration exceeded your quota.</p>",
       "exception":true
     },
+    "IntegrationSourcePropertiesMap":{
+      "type":"map",
+      "key":{"shape":"IntegrationString"},
+      "value":{"shape":"IntegrationString"}
+    },
     "IntegrationStatus":{
       "type":"string",
       "enum":[
@@ -17264,7 +18272,7 @@
         },
         "WorkerType":{
           "shape":"WorkerType",
-          "documentation":"<p>The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs.</p> <ul> <li> <p>For the <code>G.1X</code> worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 94GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.2X</code> worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 138GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.4X</code> worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm).</p> </li> <li> <p>For the <code>G.8X</code> worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the <code>G.4X</code> worker type.</p> </li> <li> <p>For the <code>G.025X</code> worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk, and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 or later streaming jobs.</p> </li> <li> <p>For the <code>Z.2X</code> worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk, and provides up to 8 Ray workers based on the autoscaler.</p> </li> </ul>"
+          "documentation":"<p>The type of predefined worker that is allocated when a job runs.</p> <p>Glue provides multiple worker types to accommodate different workload requirements:</p> <p>G Worker Types (General-purpose compute workers):</p> <ul> <li> <p>G.1X: 1 DPU (4 vCPUs, 16 GB memory, 94GB disk)</p> </li> <li> <p>G.2X: 2 DPU (8 vCPUs, 32 GB memory, 138GB disk)</p> </li> <li> <p>G.4X: 4 DPU (16 vCPUs, 64 GB memory, 256GB disk)</p> </li> <li> <p>G.8X: 8 DPU (32 vCPUs, 128 GB memory, 512GB disk)</p> </li> <li> <p>G.12X: 12 DPU (48 vCPUs, 192 GB memory, 768GB disk)</p> </li> <li> <p>G.16X: 16 DPU (64 vCPUs, 256 GB memory, 1024GB disk)</p> </li> </ul> <p>R Worker Types (Memory-optimized workers):</p> <ul> <li> <p>R.1X: 1 M-DPU (4 vCPUs, 32 GB memory)</p> </li> <li> <p>R.2X: 2 M-DPU (8 vCPUs, 64 GB memory)</p> </li> <li> <p>R.4X: 4 M-DPU (16 vCPUs, 128 GB memory)</p> </li> <li> <p>R.8X: 8 M-DPU (32 vCPUs, 256 GB memory)</p> </li> </ul>"
         },
         "NumberOfWorkers":{
           "shape":"NullableInteger",
@@ -17529,6 +18537,10 @@
         "StateDetail":{
           "shape":"OrchestrationMessageString",
           "documentation":"<p>This field holds details that pertain to the state of a job run. The field is nullable.</p> <p>For example, when a job run is in a WAITING state as a result of job run queuing, the field has the reason why the job run is in that state.</p>"
+        },
+        "ExecutionRoleSessionPolicy":{
+          "shape":"OrchestrationPolicyJsonString",
+          "documentation":"<p>This inline session policy to the StartJobRun API allows you to dynamically restrict the permissions of the specified execution role for the scope of the job, without requiring the creation of additional IAM roles.</p>"
         }
       },
       "documentation":"<p>Contains information about a job run.</p>"
@@ -17615,7 +18627,7 @@
         },
         "WorkerType":{
           "shape":"WorkerType",
-          "documentation":"<p>The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs.</p> <ul> <li> <p>For the <code>G.1X</code> worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 94GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.2X</code> worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 138GB disk, and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs.</p> </li> <li> <p>For the <code>G.4X</code> worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm).</p> </li> <li> <p>For the <code>G.8X</code> worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk, and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the <code>G.4X</code> worker type.</p> </li> <li> <p>For the <code>G.025X</code> worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk, and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 or later streaming jobs.</p> </li> <li> <p>For the <code>Z.2X</code> worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk, and provides up to 8 Ray workers based on the autoscaler.</p> </li> </ul>"
+          "documentation":"<p>The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. For more information, see <a href=\"https://docs.aws.amazon.com/glue/latest/dg/add-job.html#create-job\">Defining job properties for Spark jobs </a> </p>"
         },
         "NumberOfWorkers":{
           "shape":"NullableInteger",
@@ -17966,6 +18978,10 @@
         "StartingTimestamp":{
           "shape":"Iso8601DateTime",
           "documentation":"<p>The timestamp of the record in the Kinesis data stream to start reading data from. The possible values are a timestamp string in UTC format of the pattern <code>yyyy-mm-ddTHH:MM:SSZ</code> (where Z represents a UTC timezone offset with a +/-. For example: \"2023-04-04T08:00:00+08:00\"). </p>"
+        },
+        "FanoutConsumerARN":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Kinesis Data Streams enhanced fan-out consumer. When specified, enables enhanced fan-out for dedicated throughput and lower latency data consumption.</p>"
         }
       },
       "documentation":"<p>Additional options for the Amazon Kinesis streaming data source.</p>"
@@ -17985,6 +19001,11 @@
       },
       "documentation":"<p>Specifies configuration properties for a labeling set generation task run.</p>"
     },
+    "Labels":{
+      "type":"map",
+      "key":{"shape":"NameString"},
+      "value":{"shape":"NameString"}
+    },
     "LakeFormationConfiguration":{
       "type":"structure",
       "members":{
@@ -19413,6 +20434,7 @@
           "shape":"String2048",
           "documentation":"<p>Selects source tables for the integration using Maxwell filter syntax.</p>"
         },
+        "IntegrationConfig":{"shape":"IntegrationConfig"},
         "IntegrationName":{
           "shape":"String128",
           "documentation":"<p>A unique name for an integration in Glue.</p>"
@@ -19477,7 +20499,8 @@
         "DataFilter":{
           "shape":"String2048",
           "documentation":"<p>Selects source tables for the integration using Maxwell filter syntax.</p>"
-        }
+        },
+        "IntegrationConfig":{"shape":"IntegrationConfig"}
       }
     },
     "MongoDBTarget":{
@@ -19727,6 +20750,7 @@
       "type":"string",
       "box":true
     },
+    "NumberTargetPartitionsString":{"type":"string"},
     "OAuth2ClientApplication":{
       "type":"structure",
       "members":{
@@ -19993,6 +21017,11 @@
       "max":25,
       "min":1
     },
+    "OrchestrationPolicyJsonString":{
+      "type":"string",
+      "max":2048,
+      "min":2
+    },
     "OrchestrationRoleArn":{
       "type":"string",
       "max":2048,
@@ -20117,6 +21146,34 @@
         "MaskValue":{
           "shape":"MaskValue",
           "documentation":"<p>Indicates the value that will replace the detected entity. </p>"
+        },
+        "RedactText":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Specifies whether to redact the detected PII text. When set to <code>true</code>, PII content is replaced with redaction characters.</p>"
+        },
+        "RedactChar":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The character used to replace detected PII content when redaction is enabled. The default redaction character is <code>*</code>.</p>"
+        },
+        "MatchPattern":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>A regular expression pattern used to identify additional PII content beyond the standard detection algorithms.</p>"
+        },
+        "NumLeftCharsToExclude":{
+          "shape":"BoxedPositiveInt",
+          "documentation":"<p>The number of characters to exclude from redaction on the left side of detected PII content. This allows preserving context around the sensitive data.</p>"
+        },
+        "NumRightCharsToExclude":{
+          "shape":"BoxedPositiveInt",
+          "documentation":"<p>The number of characters to exclude from redaction on the right side of detected PII content. This allows preserving context around the sensitive data.</p>"
+        },
+        "DetectionParameters":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Additional parameters for configuring PII detection behavior and sensitivity settings.</p>"
+        },
+        "DetectionSensitivity":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The sensitivity level for PII detection. Higher sensitivity levels detect more potential PII but may result in more false positives.</p>"
         }
       },
       "documentation":"<p>Specifies a transform that identifies, removes or masks PII data.</p>"
@@ -20171,6 +21228,8 @@
         "snappy",
         "lzo",
         "gzip",
+        "brotli",
+        "lz4",
         "uncompressed",
         "none"
       ]
@@ -20422,8 +21481,11 @@
       "type":"string",
       "enum":[
         "RowAudit",
+        "RowHashing",
         "RowMasking",
+        "RowPartialMasking",
         "ColumnAudit",
+        "ColumnHashing",
         "ColumnMasking"
       ]
     },
@@ -20496,6 +21558,13 @@
       },
       "documentation":"<p>Specifies a target that uses Postgres SQL.</p>"
     },
+    "PreProcessingQueryString":{
+      "type":"string",
+      "documentation":"<p>SQL Query of SparkSQL format that can be used to pre-process data before running Data Quality Operations.</p>",
+      "max":51200,
+      "min":0,
+      "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\n\\t]*"
+    },
     "Predecessor":{
       "type":"structure",
       "members":{
@@ -20712,8 +21781,7 @@
     },
     "PutDataCatalogEncryptionSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutDataQualityProfileAnnotationRequest":{
       "type":"structure",
@@ -20734,8 +21802,7 @@
     },
     "PutDataQualityProfileAnnotationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Left blank.</p>"
     },
     "PutResourcePolicyRequest":{
@@ -20856,8 +21923,7 @@
     },
     "PutWorkflowRunPropertiesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PythonScript":{"type":"string"},
     "PythonVersionString":{
@@ -21035,8 +22101,7 @@
     },
     "Record":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true,
       "sensitive":true
     },
@@ -21524,7 +22589,36 @@
       "pattern":"arn:aws:iam::\\d{12}:role/.*"
     },
     "RoleString":{"type":"string"},
+    "Route":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Inputs",
+        "GroupFiltersList"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the route node.</p>"
+        },
+        "Inputs":{
+          "shape":"OneInput",
+          "documentation":"<p>The input connection for the route node.</p>"
+        },
+        "GroupFiltersList":{
+          "shape":"GroupFiltersList",
+          "documentation":"<p>A list of group filters that define the routing conditions and criteria for directing data to different output paths.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a route node that directs data to different output paths based on defined filtering conditions.</p>"
+    },
     "RowTag":{"type":"string"},
+    "RuleMetricsMap":{
+      "type":"map",
+      "key":{"shape":"NameString"},
+      "value":{"shape":"NullableDouble"},
+      "sensitive":true
+    },
     "RulesetNames":{
       "type":"list",
       "member":{"shape":"NameString"},
@@ -21559,7 +22653,7 @@
         },
         "NumberOfDpus":{
           "shape":"MessageString",
-          "documentation":"<p>The number of DPU hours consumed by the job.</p>"
+          "documentation":"<p>The number of DPUs consumed by the job, rounded up to the nearest whole number.</p>"
         },
         "JobDurationInHour":{
           "shape":"MessageString",
@@ -21665,6 +22759,37 @@
       },
       "documentation":"<p>Specifies a Hudi data source that is registered in the Glue Data Catalog. The Hudi data source must be stored in Amazon S3.</p>"
     },
+    "S3CatalogIcebergSource":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Database",
+        "Table"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the Iceberg data source.</p>"
+        },
+        "Database":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the database to read from.</p>"
+        },
+        "Table":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the table in the database to read from.</p>"
+        },
+        "AdditionalIcebergOptions":{
+          "shape":"AdditionalOptions",
+          "documentation":"<p>Specifies additional connection options for the Iceberg data source.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the Iceberg source.</p>"
+        }
+      },
+      "documentation":"<p>Specifies an Apache Iceberg data source that is registered in the Glue Data Catalog. The Iceberg data source must be stored in Amazon S3.</p>"
+    },
     "S3CatalogSource":{
       "type":"structure",
       "required":[
@@ -21728,6 +22853,10 @@
         "SchemaChangePolicy":{
           "shape":"CatalogSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 catalog target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
         }
       },
       "documentation":"<p>Specifies a data target that writes to Amazon S3 using the Glue Data Catalog.</p>"
@@ -21856,6 +22985,14 @@
         "SchemaChangePolicy":{
           "shape":"CatalogSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Delta catalog target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the S3 Delta catalog target.</p>"
         }
       },
       "documentation":"<p>Specifies a target that writes to a Delta Lake data source in the Glue Data Catalog.</p>"
@@ -21890,6 +23027,10 @@
           "shape":"DeltaTargetCompressionType",
           "documentation":"<p>Specifies how the data is compressed. This is generally not necessary if the data has a standard file extension. Possible values are <code>\"gzip\"</code> and <code>\"bzip\"</code>).</p>"
         },
+        "NumberTargetPartitions":{
+          "shape":"NumberTargetPartitionsString",
+          "documentation":"<p>Specifies the number of target partitions for distributing Delta Lake dataset files across Amazon S3.</p>"
+        },
         "Format":{
           "shape":"TargetFormat",
           "documentation":"<p>Specifies the data output format for the target.</p>"
@@ -21901,6 +23042,10 @@
         "SchemaChangePolicy":{
           "shape":"DirectSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Delta direct target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
         }
       },
       "documentation":"<p>Specifies a target that writes to a Delta Lake data source in Amazon S3.</p>"
@@ -21986,6 +23131,10 @@
           "shape":"EnclosedInStringProperty",
           "documentation":"<p>Specifies how the data is compressed. This is generally not necessary if the data has a standard file extension. Possible values are <code>\"gzip\"</code> and <code>\"bzip\"</code>).</p>"
         },
+        "NumberTargetPartitions":{
+          "shape":"NumberTargetPartitionsString",
+          "documentation":"<p>Specifies the number of target partitions when writing data directly to Amazon S3.</p>"
+        },
         "Format":{
           "shape":"TargetFormat",
           "documentation":"<p>Specifies the data output format for the target.</p>"
@@ -21993,6 +23142,14 @@
         "SchemaChangePolicy":{
           "shape":"DirectSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 direct target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the S3 direct target.</p>"
         }
       },
       "documentation":"<p>Specifies a data target that writes to Amazon S3.</p>"
@@ -22023,6 +23180,68 @@
         "SSE-S3"
       ]
     },
+    "S3ExcelSource":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Paths"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the S3 Excel data source.</p>"
+        },
+        "Paths":{
+          "shape":"EnclosedInStringProperties",
+          "documentation":"<p>The S3 paths where the Excel files are located.</p>"
+        },
+        "CompressionType":{
+          "shape":"ParquetCompressionType",
+          "documentation":"<p>The compression format used for the Excel files.</p>"
+        },
+        "Exclusions":{
+          "shape":"EnclosedInStringProperties",
+          "documentation":"<p>Patterns to exclude specific files or paths from processing.</p>"
+        },
+        "GroupSize":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Defines the size of file groups for batch processing.</p>"
+        },
+        "GroupFiles":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Specifies how files should be grouped for processing.</p>"
+        },
+        "Recurse":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Indicates whether to recursively process subdirectories.</p>"
+        },
+        "MaxBand":{
+          "shape":"BoxedNonNegativeInt",
+          "documentation":"<p>The maximum number of processing bands to use.</p>"
+        },
+        "MaxFilesInBand":{
+          "shape":"BoxedNonNegativeInt",
+          "documentation":"<p>The maximum number of files to process in each band.</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"S3DirectSourceAdditionalOptions",
+          "documentation":"<p>Additional configuration options for S3 direct source processing.</p>"
+        },
+        "NumberRows":{
+          "shape":"BoxedLong",
+          "documentation":"<p>The number of rows to process from each Excel file.</p>"
+        },
+        "SkipFooter":{
+          "shape":"BoxedNonNegativeInt",
+          "documentation":"<p>The number of rows to skip at the end of each Excel file.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>The Glue schemas to apply to the processed data.</p>"
+        }
+      },
+      "documentation":"<p>Specifies an S3 Excel data source.</p>"
+    },
     "S3GlueParquetTarget":{
       "type":"structure",
       "required":[
@@ -22051,9 +23270,17 @@
           "shape":"ParquetCompressionType",
           "documentation":"<p>Specifies how the data is compressed. This is generally not necessary if the data has a standard file extension. Possible values are <code>\"gzip\"</code> and <code>\"bzip\"</code>).</p>"
         },
+        "NumberTargetPartitions":{
+          "shape":"NumberTargetPartitionsString",
+          "documentation":"<p>Specifies the number of target partitions for Parquet files when writing to Amazon S3 using Glue.</p>"
+        },
         "SchemaChangePolicy":{
           "shape":"DirectSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Glue Parquet target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
         }
       },
       "documentation":"<p>Specifies a data target that writes to Amazon S3 in Apache Parquet columnar storage.</p>"
@@ -22095,6 +23322,14 @@
         "SchemaChangePolicy":{
           "shape":"CatalogSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Hudi catalog target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the S3 Hudi catalog target.</p>"
         }
       },
       "documentation":"<p>Specifies a target that writes to a Hudi data source in the Glue Data Catalog.</p>"
@@ -22126,6 +23361,10 @@
           "shape":"HudiTargetCompressionType",
           "documentation":"<p>Specifies how the data is compressed. This is generally not necessary if the data has a standard file extension. Possible values are <code>\"gzip\"</code> and <code>\"bzip\"</code>).</p>"
         },
+        "NumberTargetPartitions":{
+          "shape":"NumberTargetPartitionsString",
+          "documentation":"<p>Specifies the number of target partitions for distributing Hudi dataset files across Amazon S3.</p>"
+        },
         "PartitionKeys":{
           "shape":"GlueStudioPathList",
           "documentation":"<p>Specifies native partitioning using a sequence of keys.</p>"
@@ -22141,6 +23380,10 @@
         "SchemaChangePolicy":{
           "shape":"DirectSchemaChangePolicy",
           "documentation":"<p>A policy that specifies update behavior for the crawler.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Hudi direct target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
         }
       },
       "documentation":"<p>Specifies a target that writes to a Hudi data source in Amazon S3.</p>"
@@ -22175,6 +23418,151 @@
       },
       "documentation":"<p>Specifies a Hudi data source stored in Amazon S3.</p>"
     },
+    "S3HyperDirectTarget":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Inputs",
+        "Path"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The unique identifier for the HyperDirect target node.</p>"
+        },
+        "Inputs":{
+          "shape":"OneInput",
+          "documentation":"<p>Specifies the input source for the HyperDirect target.</p>"
+        },
+        "Format":{
+          "shape":"TargetFormat",
+          "documentation":"<p>Specifies the data output format for the HyperDirect target.</p>"
+        },
+        "PartitionKeys":{
+          "shape":"GlueStudioPathList",
+          "documentation":"<p>Defines the partitioning strategy for the output data.</p>"
+        },
+        "Path":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The S3 location where the output data will be written.</p>"
+        },
+        "Compression":{
+          "shape":"HyperTargetCompressionType",
+          "documentation":"<p>The compression type to apply to the output data.</p>"
+        },
+        "SchemaChangePolicy":{
+          "shape":"DirectSchemaChangePolicy",
+          "documentation":"<p>Defines how schema changes are handled during write operations.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Hyper direct target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the S3 Hyper direct target.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a HyperDirect data target that writes to Amazon S3.</p>"
+    },
+    "S3IcebergCatalogTarget":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Inputs",
+        "Table",
+        "Database"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>The name of the Iceberg catalog target.</p>"
+        },
+        "Inputs":{
+          "shape":"OneInput",
+          "documentation":"<p>The input connection for the Iceberg catalog target.</p>"
+        },
+        "PartitionKeys":{
+          "shape":"GlueStudioPathList",
+          "documentation":"<p>A list of partition keys for the Iceberg table.</p>"
+        },
+        "Table":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the table to write to in the catalog.</p>"
+        },
+        "Database":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>The name of the database to write to.</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"AdditionalOptions",
+          "documentation":"<p>Specifies additional connection options for the Iceberg catalog target.</p>"
+        },
+        "SchemaChangePolicy":{
+          "shape":"CatalogSchemaChangePolicy",
+          "documentation":"<p>The policy for handling schema changes in the catalog target.</p>"
+        },
+        "AutoDataQuality":{
+          "shape":"AutoDataQuality",
+          "documentation":"<p>Specifies whether to automatically enable data quality evaluation for the S3 Iceberg catalog target. When set to <code>true</code>, data quality checks are performed automatically during the write operation.</p>"
+        }
+      },
+      "documentation":"<p>Specifies an Apache Iceberg catalog target that writes data to Amazon S3 and registers the table in the Glue Data Catalog.</p>"
+    },
+    "S3IcebergDirectTarget":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Inputs",
+        "Path",
+        "Format",
+        "Compression"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NodeName",
+          "documentation":"<p>Specifies the unique identifier for the Iceberg target node in your data pipeline.</p>"
+        },
+        "Inputs":{
+          "shape":"OneInput",
+          "documentation":"<p>Defines the single input source that provides data to this Iceberg target.</p>"
+        },
+        "PartitionKeys":{
+          "shape":"GlueStudioPathList",
+          "documentation":"<p>Specifies the columns used to partition the Iceberg table data in S3.</p>"
+        },
+        "Path":{
+          "shape":"EnclosedInStringProperty",
+          "documentation":"<p>Defines the S3 location where the Iceberg table data will be stored.</p>"
+        },
+        "Format":{
+          "shape":"TargetFormat",
+          "documentation":"<p>Specifies the file format used for storing Iceberg table data (e.g., Parquet, ORC).</p>"
+        },
+        "AdditionalOptions":{
+          "shape":"AdditionalOptions",
+          "documentation":"<p>Provides additional configuration options for customizing the Iceberg table behavior.</p>"
+        },
+        "SchemaChangePolicy":{
+          "shape":"DirectSchemaChangePolicy",
+          "documentation":"<p>Defines how schema changes are handled when writing data to the Iceberg table.</p>"
+        },
+        "AutoDataQuality":{"shape":"AutoDataQuality"},
+        "Compression":{
+          "shape":"IcebergTargetCompressionType",
+          "documentation":"<p>Specifies the compression codec used for Iceberg table files in S3.</p>"
+        },
+        "NumberTargetPartitions":{
+          "shape":"NumberTargetPartitionsString",
+          "documentation":"<p>Sets the number of target partitions for distributing Iceberg table files across S3.</p>"
+        },
+        "OutputSchemas":{
+          "shape":"GlueSchemas",
+          "documentation":"<p>Specifies the data schema for the S3 Iceberg direct target.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a target that writes to an Iceberg data source in Amazon S3.</p>"
+    },
     "S3JsonSource":{
       "type":"structure",
       "required":[
@@ -23198,19 +24586,19 @@
       "members":{
         "Fields":{
           "shape":"SourceTableFieldsList",
-          "documentation":"<p>A list of fields used for column-level filtering.</p>"
+          "documentation":"<p>A list of fields used for column-level filtering. Currently unsupported.</p>"
         },
         "FilterPredicate":{
           "shape":"String128",
-          "documentation":"<p>A condition clause used for row-level filtering.</p>"
+          "documentation":"<p>A condition clause used for row-level filtering. Currently unsupported.</p>"
         },
         "PrimaryKey":{
           "shape":"PrimaryKeyList",
-          "documentation":"<p>Unique identifier of a record.</p>"
+          "documentation":"<p>Provide the primary key set for this table. Currently supported specifically for SAP <code>EntityOf</code> entities upon request. Contact Amazon Web Services Support to make this feature available.</p>"
         },
         "RecordUpdateField":{
           "shape":"String128",
-          "documentation":"<p>Incremental pull timestamp-based field.</p>"
+          "documentation":"<p>Incremental pull timestamp-based field. Currently unsupported.</p>"
         }
       },
       "documentation":"<p>Properties used by the source leg to process data from the source.</p>"
@@ -23504,8 +24892,7 @@
     },
     "StartColumnStatisticsTaskRunScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartCrawlerRequest":{
       "type":"structure",
@@ -23519,8 +24906,7 @@
     },
     "StartCrawlerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartCrawlerScheduleRequest":{
       "type":"structure",
@@ -23534,8 +24920,7 @@
     },
     "StartCrawlerScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartDataQualityRuleRecommendationRunRequest":{
       "type":"structure",
@@ -23572,7 +24957,8 @@
           "shape":"HashString",
           "documentation":"<p>Used for idempotency and is recommended to be set to a random ID (such as a UUID) to avoid creating or starting multiple instances of the same resource.</p>"
         }
-      }
+      },
+      "documentation":"<p>The request of the Data Quality rule recommendation request.</p>"
     },
     "StartDataQualityRuleRecommendationRunResponse":{
       "type":"structure",
@@ -23743,6 +25129,10 @@
         "ExecutionClass":{
           "shape":"ExecutionClass",
           "documentation":"<p>Indicates whether the job is run with a standard or flexible execution class. The standard execution-class is ideal for time-sensitive workloads that require fast job startup and dedicated resources.</p> <p>The flexible execution class is appropriate for time-insensitive jobs whose start and completion times may vary. </p> <p>Only jobs with Glue version 3.0 and above and command type <code>glueetl</code> will be allowed to set <code>ExecutionClass</code> to <code>FLEX</code>. The flexible execution class is available for Spark jobs.</p>"
+        },
+        "ExecutionRoleSessionPolicy":{
+          "shape":"OrchestrationPolicyJsonString",
+          "documentation":"<p>This inline session policy to the StartJobRun API allows you to dynamically restrict the permissions of the specified execution role for the scope of the job, without requiring the creation of additional IAM roles.</p>"
         }
       }
     },
@@ -24118,8 +25508,7 @@
     },
     "StopColumnStatisticsTaskRunResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopColumnStatisticsTaskRunScheduleRequest":{
       "type":"structure",
@@ -24140,8 +25529,7 @@
     },
     "StopColumnStatisticsTaskRunScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopCrawlerRequest":{
       "type":"structure",
@@ -24155,8 +25543,7 @@
     },
     "StopCrawlerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopCrawlerScheduleRequest":{
       "type":"structure",
@@ -24170,8 +25557,7 @@
     },
     "StopCrawlerScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopSessionRequest":{
       "type":"structure",
@@ -24234,8 +25620,7 @@
     },
     "StopWorkflowRunResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StorageDescriptor":{
       "type":"structure",
@@ -24356,6 +25741,11 @@
       "type":"list",
       "member":{"shape":"GenericString"}
     },
+    "StringToStringMap":{
+      "type":"map",
+      "key":{"shape":"NullableString"},
+      "value":{"shape":"NullableString"}
+    },
     "SupportedDialect":{
       "type":"structure",
       "members":{
@@ -24603,6 +25993,10 @@
         "lastRun":{
           "shape":"TableOptimizerRun",
           "documentation":"<p>A <code>TableOptimizerRun</code> object representing the last run of the table optimizer.</p>"
+        },
+        "configurationSource":{
+          "shape":"ConfigurationSource",
+          "documentation":"<p> Specifies the source of the optimizer configuration. This indicates how the table optimizer was configured and which entity or service initiated the configuration. </p>"
         }
       },
       "documentation":"<p>Contains details about an optimizer associated with a table.</p>"
@@ -24622,6 +26016,10 @@
           "shape":"TableOptimizerVpcConfiguration",
           "documentation":"<p>A <code>TableOptimizerVpcConfiguration</code> object representing the VPC configuration for a table optimizer.</p> <p>This configuration is necessary to perform optimization on tables that are in a customer VPC.</p>"
         },
+        "compactionConfiguration":{
+          "shape":"CompactionConfiguration",
+          "documentation":"<p>The configuration for a compaction optimizer. This configuration defines how data files in your table will be compacted to improve query performance and reduce storage costs.</p>"
+        },
         "retentionConfiguration":{
           "shape":"RetentionConfiguration",
           "documentation":"<p>The configuration for a snapshot retention optimizer.</p>"
@@ -24671,6 +26069,10 @@
           "shape":"CompactionMetrics",
           "documentation":"<p>A <code>CompactionMetrics</code> object containing metrics for the optimizer run.</p>"
         },
+        "compactionStrategy":{
+          "shape":"CompactionStrategy",
+          "documentation":"<p>The strategy used for the compaction run. Indicates which algorithm was applied to determine how files were selected and combined during the compaction process. Valid values are:</p> <ul> <li> <p> <code>binpack</code>: Combines small files into larger files, typically targeting sizes over 100MB, while applying any pending deletes. This is the recommended compaction strategy for most use cases. </p> </li> <li> <p> <code>sort</code>: Organizes data based on specified columns which are sorted hierarchically during compaction, improving query performance for filtered operations. This strategy is recommended when your queries frequently filter on specific columns. To use this strategy, you must first define a sort order in your Iceberg table properties using the <code>sort_order</code> table property.</p> </li> <li> <p> <code>z-order</code>: Optimizes data organization by blending multiple attributes into a single scalar value that can be used for sorting, allowing efficient querying across multiple dimensions. This strategy is recommended when you need to query data across multiple dimensions simultaneously. To use this strategy, you must first define a sort order in your Iceberg table properties using the <code>sort_order</code> table property. </p> </li> </ul>"
+        },
         "retentionMetrics":{
           "shape":"RetentionMetrics",
           "documentation":"<p>A <code>RetentionMetrics</code> object containing metrics for the optimizer run.</p>"
@@ -24833,8 +26235,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -24862,7 +26263,10 @@
         "orc",
         "parquet",
         "hudi",
-        "delta"
+        "delta",
+        "iceberg",
+        "hyper",
+        "xml"
       ]
     },
     "TargetProcessingProperties":{
@@ -25114,8 +26518,7 @@
     },
     "TestConnectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ThrottlingException":{
       "type":"structure",
@@ -25580,8 +26983,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateBehavior":{
       "type":"string",
@@ -25646,8 +27048,7 @@
     },
     "UpdateCatalogResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateClassifierRequest":{
       "type":"structure",
@@ -25672,8 +27073,7 @@
     },
     "UpdateClassifierResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateColumnStatisticsForPartitionRequest":{
       "type":"structure",
@@ -25799,8 +27199,7 @@
     },
     "UpdateColumnStatisticsTaskSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectionRequest":{
       "type":"structure",
@@ -25825,8 +27224,7 @@
     },
     "UpdateConnectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCrawlerRequest":{
       "type":"structure",
@@ -25892,8 +27290,7 @@
     },
     "UpdateCrawlerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCrawlerScheduleRequest":{
       "type":"structure",
@@ -25911,8 +27308,7 @@
     },
     "UpdateCrawlerScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCsvClassifierRequest":{
       "type":"structure",
@@ -26019,8 +27415,7 @@
     },
     "UpdateDatabaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDevEndpointRequest":{
       "type":"structure",
@@ -26062,8 +27457,26 @@
     },
     "UpdateDevEndpointResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateGlueIdentityCenterConfigurationRequest":{
+      "type":"structure",
       "members":{
-      }
+        "Scopes":{
+          "shape":"IdentityCenterScopesList",
+          "documentation":"<p>A list of Identity Center scopes that define the updated permissions and access levels for the Glue configuration.</p>"
+        },
+        "UserBackgroundSessionsEnabled":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Specifies whether users can run background sessions when using Identity Center authentication with Glue services.</p>"
+        }
+      },
+      "documentation":"<p>Request to update an existing Glue Identity Center configuration.</p>"
+    },
+    "UpdateGlueIdentityCenterConfigurationResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Response from updating an existing Glue Identity Center configuration.</p>"
     },
     "UpdateGrokClassifierRequest":{
       "type":"structure",
@@ -26088,6 +27501,28 @@
       },
       "documentation":"<p>Specifies a grok classifier to update when passed to <code>UpdateClassifier</code>.</p>"
     },
+    "UpdateIcebergInput":{
+      "type":"structure",
+      "required":["UpdateIcebergTableInput"],
+      "members":{
+        "UpdateIcebergTableInput":{
+          "shape":"UpdateIcebergTableInput",
+          "documentation":"<p>The specific update operations to be applied to the Iceberg table, containing a list of updates that define the new state of the table including schema, partitions, and properties.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters specific to updating Apache Iceberg tables in Glue Data Catalog, containing the update operations to be applied to an existing Iceberg table.</p>"
+    },
+    "UpdateIcebergTableInput":{
+      "type":"structure",
+      "required":["Updates"],
+      "members":{
+        "Updates":{
+          "shape":"IcebergTableUpdateList",
+          "documentation":"<p>The list of table update operations that specify the changes to be made to the Iceberg table, including schema modifications, partition specifications, and table properties.</p>"
+        }
+      },
+      "documentation":"<p>Contains the update operations to be applied to an existing Iceberg table inGlue Data Catalog, defining the new state of the table metadata. </p>"
+    },
     "UpdateIntegrationResourcePropertyRequest":{
       "type":"structure",
       "required":["ResourceArn"],
@@ -26150,8 +27585,7 @@
     },
     "UpdateIntegrationTablePropertiesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateJobFromSourceControlRequest":{
       "type":"structure",
@@ -26303,6 +27737,16 @@
         }
       }
     },
+    "UpdateOpenTableFormatInput":{
+      "type":"structure",
+      "members":{
+        "UpdateIcebergInput":{
+          "shape":"UpdateIcebergInput",
+          "documentation":"<p>Apache Iceberg-specific update parameters that define the table modifications to be applied, including schema changes, partition specifications, and table properties.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for updating open table format tables in GlueData Catalog, serving as a wrapper for format-specific update operations such as Apache Iceberg.</p>"
+    },
     "UpdatePartitionRequest":{
       "type":"structure",
       "required":[
@@ -26336,8 +27780,7 @@
     },
     "UpdatePartitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRegistryInput":{
       "type":"structure",
@@ -26492,15 +27935,11 @@
     },
     "UpdateTableOptimizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTableRequest":{
       "type":"structure",
-      "required":[
-        "DatabaseName",
-        "TableInput"
-      ],
+      "required":["DatabaseName"],
       "members":{
         "CatalogId":{
           "shape":"CatalogIdString",
@@ -26510,6 +27949,10 @@
           "shape":"NameString",
           "documentation":"<p>The name of the catalog database in which the table resides. For Hive compatibility, this name is entirely lowercase.</p>"
         },
+        "Name":{
+          "shape":"NameString",
+          "documentation":"<p>The unique identifier for the table within the specified database that will be created in the Glue Data Catalog.</p>"
+        },
         "TableInput":{
           "shape":"TableInput",
           "documentation":"<p>An updated <code>TableInput</code> object to define the metadata table in the catalog.</p>"
@@ -26533,13 +27976,16 @@
         "Force":{
           "shape":"Boolean",
           "documentation":"<p>A flag that can be set to true to ignore matching storage descriptor and subobject matching requirements.</p>"
+        },
+        "UpdateOpenTableFormatInput":{
+          "shape":"UpdateOpenTableFormatInput",
+          "documentation":"<p>Input parameters for updating open table format tables in GlueData Catalog, serving as a wrapper for format-specific update operations such as Apache Iceberg.</p>"
         }
       }
     },
     "UpdateTableResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTriggerRequest":{
       "type":"structure",
@@ -26625,8 +28071,7 @@
     },
     "UpdateUserDefinedFunctionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWorkflowRequest":{
       "type":"structure",
@@ -26637,7 +28082,7 @@
           "documentation":"<p>Name of the workflow to be updated.</p>"
         },
         "Description":{
-          "shape":"GenericString",
+          "shape":"WorkflowDescriptionString",
           "documentation":"<p>The description of the workflow.</p>"
         },
         "DefaultRunProperties":{
@@ -26698,6 +28143,7 @@
       "documentation":"<p>The options to configure an upsert operation when writing to a Redshift target .</p>"
     },
     "UriString":{"type":"string"},
+    "UrlString":{"type":"string"},
     "UsageProfileDefinition":{
       "type":"structure",
       "members":{
@@ -26828,6 +28274,11 @@
       "type":"list",
       "member":{"shape":"ValueString"}
     },
+    "Vendor":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "VersionId":{"type":"long"},
     "VersionLongNumber":{
       "type":"long",
@@ -27089,6 +28540,10 @@
       },
       "documentation":"<p>A workflow is a collection of multiple dependent Glue jobs and crawlers that are run to complete a complex ETL task. A workflow manages the execution and monitoring of all its jobs and crawlers.</p>"
     },
+    "WorkflowDescriptionString":{
+      "type":"string",
+      "max":120000
+    },
     "WorkflowGraph":{
       "type":"structure",
       "members":{
@@ -27265,6 +28720,7 @@
     "double":{"type":"double"},
     "dpuCounts":{"type":"integer"},
     "dpuDurationInHour":{"type":"double"},
+    "dpuHours":{"type":"double"},
     "glueConnectionNameString":{
       "type":"string",
       "min":1
diff -pruN 2.23.6-1/awscli/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/grafana/2020-08-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/greengrass/2017-06-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -269,14 +265,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -290,7 +288,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -310,7 +307,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -321,14 +317,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -393,9 +391,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/greengrass/2017-06-07/service-2.json 2.31.35-1/awscli/botocore/data/greengrass/2017-06-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/greengrass/2017-06-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/greengrass/2017-06-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,6188 +1,6636 @@
 {
-  "metadata" : {
-    "apiVersion" : "2017-06-07",
-    "endpointPrefix" : "greengrass",
-    "signingName" : "greengrass",
-    "serviceFullName" : "AWS Greengrass",
-    "serviceId" : "Greengrass",
-    "protocol" : "rest-json",
-    "jsonVersion" : "1.1",
-    "uid" : "greengrass-2017-06-07",
-    "signatureVersion" : "v4"
+  "metadata": {
+    "apiVersion": "2017-06-07",
+    "endpointPrefix": "greengrass",
+    "signingName": "greengrass",
+    "serviceFullName": "AWS Greengrass",
+    "serviceId": "Greengrass",
+    "protocol": "rest-json",
+    "jsonVersion": "1.1",
+    "uid": "greengrass-2017-06-07",
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
-  "operations" : {
-    "AssociateRoleToGroup" : {
-      "name" : "AssociateRoleToGroup",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/groups/{GroupId}/role",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "AssociateRoleToGroupRequest"
-      },
-      "output" : {
-        "shape" : "AssociateRoleToGroupResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Associates a role with a group. Your Greengrass core will use the role to access AWS cloud services. The role's permissions should allow Greengrass core Lambda functions to perform actions against the cloud."
-    },
-    "AssociateServiceRoleToAccount" : {
-      "name" : "AssociateServiceRoleToAccount",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/servicerole",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "AssociateServiceRoleToAccountRequest"
-      },
-      "output" : {
-        "shape" : "AssociateServiceRoleToAccountResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Associates a role with your account. AWS IoT Greengrass will use the role to access your Lambda functions and AWS IoT resources. This is necessary for deployments to succeed. The role must have at least minimum permissions in the policy ''AWSGreengrassResourceAccessRolePolicy''."
-    },
-    "CreateConnectorDefinition" : {
-      "name" : "CreateConnectorDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/connectors",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateConnectorDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateConnectorDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a connector definition. You may provide the initial version of the connector definition now or use ''CreateConnectorDefinitionVersion'' at a later time."
-    },
-    "CreateConnectorDefinitionVersion" : {
-      "name" : "CreateConnectorDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateConnectorDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateConnectorDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a connector definition which has already been defined."
-    },
-    "CreateCoreDefinition" : {
-      "name" : "CreateCoreDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/cores",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateCoreDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateCoreDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a core definition. You may provide the initial version of the core definition now or use ''CreateCoreDefinitionVersion'' at a later time. Greengrass groups must each contain exactly one Greengrass core."
-    },
-    "CreateCoreDefinitionVersion" : {
-      "name" : "CreateCoreDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateCoreDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateCoreDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a core definition that has already been defined. Greengrass groups must each contain exactly one Greengrass core."
-    },
-    "CreateDeployment" : {
-      "name" : "CreateDeployment",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/groups/{GroupId}/deployments",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "CreateDeploymentResponse",
-        "documentation" : "Success. The group was deployed."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a deployment. ''CreateDeployment'' requests are idempotent with respect to the ''X-Amzn-Client-Token'' token and the request parameters."
-    },
-    "CreateDeviceDefinition" : {
-      "name" : "CreateDeviceDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/devices",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateDeviceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateDeviceDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a device definition. You may provide the initial version of the device definition now or use ''CreateDeviceDefinitionVersion'' at a later time."
-    },
-    "CreateDeviceDefinitionVersion" : {
-      "name" : "CreateDeviceDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateDeviceDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateDeviceDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a device definition that has already been defined."
-    },
-    "CreateFunctionDefinition" : {
-      "name" : "CreateFunctionDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/functions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateFunctionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateFunctionDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a Lambda function definition which contains a list of Lambda functions and their configurations to be used in a group. You can create an initial version of the definition by providing a list of Lambda functions and their configurations now, or use ''CreateFunctionDefinitionVersion'' later."
-    },
-    "CreateFunctionDefinitionVersion" : {
-      "name" : "CreateFunctionDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateFunctionDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateFunctionDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a Lambda function definition that has already been defined."
-    },
-    "CreateGroup" : {
-      "name" : "CreateGroup",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/groups",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateGroupRequest"
-      },
-      "output" : {
-        "shape" : "CreateGroupResponse",
-        "documentation" : "Success. The group was created."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a group. You may provide the initial version of the group or use ''CreateGroupVersion'' at a later time. Tip: You can use the ''gg_group_setup'' package (https://github.com/awslabs/aws-greengrass-group-setup) as a library or command-line application to create and deploy Greengrass groups."
-    },
-    "CreateGroupCertificateAuthority" : {
-      "name" : "CreateGroupCertificateAuthority",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/groups/{GroupId}/certificateauthorities",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateGroupCertificateAuthorityRequest"
-      },
-      "output" : {
-        "shape" : "CreateGroupCertificateAuthorityResponse",
-        "documentation" : "Success. The response body contains the new active CA ARN."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Creates a CA for the group. If a CA already exists, it will rotate the existing CA."
-    },
-    "CreateGroupVersion" : {
-      "name" : "CreateGroupVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/groups/{GroupId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateGroupVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateGroupVersionResponse",
-        "documentation" : "Success. The response contains information about the group version."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a group which has already been defined."
-    },
-    "CreateLoggerDefinition" : {
-      "name" : "CreateLoggerDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/loggers",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateLoggerDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateLoggerDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a logger definition. You may provide the initial version of the logger definition now or use ''CreateLoggerDefinitionVersion'' at a later time."
-    },
-    "CreateLoggerDefinitionVersion" : {
-      "name" : "CreateLoggerDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateLoggerDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateLoggerDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a logger definition that has already been defined."
-    },
-    "CreateResourceDefinition" : {
-      "name" : "CreateResourceDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/resources",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateResourceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateResourceDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a resource definition which contains a list of resources to be used in a group. You can create an initial version of the definition by providing a list of resources now, or use ''CreateResourceDefinitionVersion'' later."
-    },
-    "CreateResourceDefinitionVersion" : {
-      "name" : "CreateResourceDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateResourceDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateResourceDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a resource definition that has already been defined."
-    },
-    "CreateSoftwareUpdateJob" : {
-      "name" : "CreateSoftwareUpdateJob",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/updates",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateSoftwareUpdateJobRequest"
-      },
-      "output" : {
-        "shape" : "CreateSoftwareUpdateJobResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Creates a software update for a core or group of cores (specified as an IoT thing group.) Use this to update the OTA Agent as well as the Greengrass core software. It makes use of the IoT Jobs feature which provides additional commands to manage a Greengrass core software update job."
-    },
-    "CreateSubscriptionDefinition" : {
-      "name" : "CreateSubscriptionDefinition",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/subscriptions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateSubscriptionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "CreateSubscriptionDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a subscription definition. You may provide the initial version of the subscription definition now or use ''CreateSubscriptionDefinitionVersion'' at a later time."
-    },
-    "CreateSubscriptionDefinitionVersion" : {
-      "name" : "CreateSubscriptionDefinitionVersion",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateSubscriptionDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateSubscriptionDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Creates a version of a subscription definition which has already been defined."
-    },
-    "DeleteConnectorDefinition" : {
-      "name" : "DeleteConnectorDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteConnectorDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteConnectorDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a connector definition."
-    },
-    "DeleteCoreDefinition" : {
-      "name" : "DeleteCoreDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteCoreDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteCoreDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a core definition."
-    },
-    "DeleteDeviceDefinition" : {
-      "name" : "DeleteDeviceDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteDeviceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteDeviceDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a device definition."
-    },
-    "DeleteFunctionDefinition" : {
-      "name" : "DeleteFunctionDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteFunctionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteFunctionDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a Lambda function definition."
-    },
-    "DeleteGroup" : {
-      "name" : "DeleteGroup",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/groups/{GroupId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteGroupRequest"
-      },
-      "output" : {
-        "shape" : "DeleteGroupResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a group."
-    },
-    "DeleteLoggerDefinition" : {
-      "name" : "DeleteLoggerDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteLoggerDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteLoggerDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a logger definition."
-    },
-    "DeleteResourceDefinition" : {
-      "name" : "DeleteResourceDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteResourceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteResourceDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a resource definition."
-    },
-    "DeleteSubscriptionDefinition" : {
-      "name" : "DeleteSubscriptionDefinition",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteSubscriptionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "DeleteSubscriptionDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deletes a subscription definition."
-    },
-    "DisassociateRoleFromGroup" : {
-      "name" : "DisassociateRoleFromGroup",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/groups/{GroupId}/role",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DisassociateRoleFromGroupRequest"
-      },
-      "output" : {
-        "shape" : "DisassociateRoleFromGroupResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Disassociates the role from a group."
-    },
-    "DisassociateServiceRoleFromAccount" : {
-      "name" : "DisassociateServiceRoleFromAccount",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/greengrass/servicerole",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DisassociateServiceRoleFromAccountRequest"
-      },
-      "output" : {
-        "shape" : "DisassociateServiceRoleFromAccountResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Disassociates the service role from your account. Without a service role, deployments will not work."
-    },
-    "GetAssociatedRole" : {
-      "name" : "GetAssociatedRole",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/role",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetAssociatedRoleRequest"
-      },
-      "output" : {
-        "shape" : "GetAssociatedRoleResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retrieves the role associated with a particular group."
-    },
-    "GetBulkDeploymentStatus" : {
-      "name" : "GetBulkDeploymentStatus",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/bulk/deployments/{BulkDeploymentId}/status",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetBulkDeploymentStatusRequest"
-      },
-      "output" : {
-        "shape" : "GetBulkDeploymentStatusResponse",
-        "documentation" : "Success. The response body contains the status of the bulk deployment."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Returns the status of a bulk deployment."
-    },
-    "GetConnectivityInfo" : {
-      "name" : "GetConnectivityInfo",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/things/{ThingName}/connectivityInfo",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetConnectivityInfoRequest"
-      },
-      "output" : {
-        "shape" : "GetConnectivityInfoResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retrieves the connectivity information for a core."
-    },
-    "GetConnectorDefinition" : {
-      "name" : "GetConnectorDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetConnectorDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetConnectorDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a connector definition."
-    },
-    "GetConnectorDefinitionVersion" : {
-      "name" : "GetConnectorDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions/{ConnectorDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetConnectorDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetConnectorDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a connector definition version, including the connectors that the version contains. Connectors are prebuilt modules that interact with local infrastructure, device protocols, AWS, and other cloud services."
-    },
-    "GetCoreDefinition" : {
-      "name" : "GetCoreDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetCoreDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetCoreDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a core definition version."
-    },
-    "GetCoreDefinitionVersion" : {
-      "name" : "GetCoreDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}/versions/{CoreDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetCoreDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetCoreDefinitionVersionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a core definition version."
-    },
-    "GetDeploymentStatus" : {
-      "name" : "GetDeploymentStatus",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/deployments/{DeploymentId}/status",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDeploymentStatusRequest"
-      },
-      "output" : {
-        "shape" : "GetDeploymentStatusResponse",
-        "documentation" : "Success. The response body contains the status of the deployment for the group."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Returns the status of a deployment."
-    },
-    "GetDeviceDefinition" : {
-      "name" : "GetDeviceDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDeviceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetDeviceDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a device definition."
-    },
-    "GetDeviceDefinitionVersion" : {
-      "name" : "GetDeviceDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}/versions/{DeviceDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetDeviceDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetDeviceDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a device definition version."
-    },
-    "GetFunctionDefinition" : {
-      "name" : "GetFunctionDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetFunctionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetFunctionDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a Lambda function definition, including its creation time and latest version."
-    },
-    "GetFunctionDefinitionVersion" : {
-      "name" : "GetFunctionDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}/versions/{FunctionDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetFunctionDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetFunctionDefinitionVersionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a Lambda function definition version, including which Lambda functions are included in the version and their configurations."
-    },
-    "GetGroup" : {
-      "name" : "GetGroup",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetGroupRequest"
-      },
-      "output" : {
-        "shape" : "GetGroupResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a group."
-    },
-    "GetGroupCertificateAuthority" : {
-      "name" : "GetGroupCertificateAuthority",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/certificateauthorities/{CertificateAuthorityId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetGroupCertificateAuthorityRequest"
-      },
-      "output" : {
-        "shape" : "GetGroupCertificateAuthorityResponse",
-        "documentation" : "Success. The response body contains the PKI Configuration."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retreives the CA associated with a group. Returns the public key of the CA."
-    },
-    "GetGroupCertificateConfiguration" : {
-      "name" : "GetGroupCertificateConfiguration",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/certificateauthorities/configuration/expiry",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetGroupCertificateConfigurationRequest"
-      },
-      "output" : {
-        "shape" : "GetGroupCertificateConfigurationResponse",
-        "documentation" : "Success. The response body contains the PKI Configuration."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retrieves the current configuration for the CA used by the group."
-    },
-    "GetGroupVersion" : {
-      "name" : "GetGroupVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/versions/{GroupVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetGroupVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetGroupVersionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a group version."
-    },
-    "GetLoggerDefinition" : {
-      "name" : "GetLoggerDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetLoggerDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetLoggerDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a logger definition."
-    },
-    "GetLoggerDefinitionVersion" : {
-      "name" : "GetLoggerDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}/versions/{LoggerDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetLoggerDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetLoggerDefinitionVersionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a logger definition version."
-    },
-    "GetResourceDefinition" : {
-      "name" : "GetResourceDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetResourceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetResourceDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a resource definition, including its creation time and latest version."
-    },
-    "GetResourceDefinitionVersion" : {
-      "name" : "GetResourceDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}/versions/{ResourceDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetResourceDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetResourceDefinitionVersionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a resource definition version, including which resources are included in the version."
-    },
-    "GetServiceRoleForAccount" : {
-      "name" : "GetServiceRoleForAccount",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/servicerole",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetServiceRoleForAccountRequest"
-      },
-      "output" : {
-        "shape" : "GetServiceRoleForAccountResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retrieves the service role that is attached to your account."
-    },
-    "GetSubscriptionDefinition" : {
-      "name" : "GetSubscriptionDefinition",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetSubscriptionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "GetSubscriptionDefinitionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a subscription definition."
-    },
-    "GetSubscriptionDefinitionVersion" : {
-      "name" : "GetSubscriptionDefinitionVersion",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions/{SubscriptionDefinitionVersionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetSubscriptionDefinitionVersionRequest"
-      },
-      "output" : {
-        "shape" : "GetSubscriptionDefinitionVersionResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves information about a subscription definition version."
-    },
-    "GetThingRuntimeConfiguration" : {
-      "name" : "GetThingRuntimeConfiguration",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/things/{ThingName}/runtimeconfig",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetThingRuntimeConfigurationRequest"
-      },
-      "output" : {
-        "shape" : "GetThingRuntimeConfigurationResponse",
-        "documentation" : "Success. The response contains the runtime configuration for the given thing."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Get the runtime configuration of a thing."
-    },
-    "ListBulkDeploymentDetailedReports" : {
-      "name" : "ListBulkDeploymentDetailedReports",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/bulk/deployments/{BulkDeploymentId}/detailed-reports",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListBulkDeploymentDetailedReportsRequest"
-      },
-      "output" : {
-        "shape" : "ListBulkDeploymentDetailedReportsResponse",
-        "documentation" : "Success. The response body contains the list of deployments for the given group."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Gets a paginated list of the deployments that have been started in a bulk deployment operation, and their current deployment status."
-    },
-    "ListBulkDeployments" : {
-      "name" : "ListBulkDeployments",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/bulk/deployments",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListBulkDeploymentsRequest"
-      },
-      "output" : {
-        "shape" : "ListBulkDeploymentsResponse",
-        "documentation" : "Success. The response body contains the list of bulk deployments."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Returns a list of bulk deployments."
-    },
-    "ListConnectorDefinitionVersions" : {
-      "name" : "ListConnectorDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListConnectorDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListConnectorDefinitionVersionsResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a connector definition, which are containers for connectors. Connectors run on the Greengrass core and contain built-in integration with local infrastructure, device protocols, AWS, and other cloud services."
-    },
-    "ListConnectorDefinitions" : {
-      "name" : "ListConnectorDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/connectors",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListConnectorDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListConnectorDefinitionsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of connector definitions."
-    },
-    "ListCoreDefinitionVersions" : {
-      "name" : "ListCoreDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListCoreDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListCoreDefinitionVersionsResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a core definition."
-    },
-    "ListCoreDefinitions" : {
-      "name" : "ListCoreDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/cores",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListCoreDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListCoreDefinitionsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of core definitions."
-    },
-    "ListDeployments" : {
-      "name" : "ListDeployments",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/deployments",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListDeploymentsRequest"
-      },
-      "output" : {
-        "shape" : "ListDeploymentsResponse",
-        "documentation" : "Success. The response body contains the list of deployments for the given group."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Returns a history of deployments for the group."
-    },
-    "ListDeviceDefinitionVersions" : {
-      "name" : "ListDeviceDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListDeviceDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListDeviceDefinitionVersionsResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a device definition."
-    },
-    "ListDeviceDefinitions" : {
-      "name" : "ListDeviceDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/devices",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListDeviceDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListDeviceDefinitionsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of device definitions."
-    },
-    "ListFunctionDefinitionVersions" : {
-      "name" : "ListFunctionDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListFunctionDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListFunctionDefinitionVersionsResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a Lambda function definition."
-    },
-    "ListFunctionDefinitions" : {
-      "name" : "ListFunctionDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/functions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListFunctionDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListFunctionDefinitionsResponse",
-        "documentation" : "Success. The response contains the IDs of all the Greengrass Lambda function definitions in this account."
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of Lambda function definitions."
-    },
-    "ListGroupCertificateAuthorities" : {
-      "name" : "ListGroupCertificateAuthorities",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/certificateauthorities",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListGroupCertificateAuthoritiesRequest"
-      },
-      "output" : {
-        "shape" : "ListGroupCertificateAuthoritiesResponse",
-        "documentation" : "Success. The response body contains the PKI Configuration."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Retrieves the current CAs for a group."
-    },
-    "ListGroupVersions" : {
-      "name" : "ListGroupVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups/{GroupId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListGroupVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListGroupVersionsResponse",
-        "documentation" : "Success. The response contains the list of versions and metadata for the given group."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a group."
-    },
-    "ListGroups" : {
-      "name" : "ListGroups",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/groups",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListGroupsRequest"
-      },
-      "output" : {
-        "shape" : "ListGroupsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of groups."
-    },
-    "ListLoggerDefinitionVersions" : {
-      "name" : "ListLoggerDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListLoggerDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListLoggerDefinitionVersionsResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a logger definition."
-    },
-    "ListLoggerDefinitions" : {
-      "name" : "ListLoggerDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/loggers",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListLoggerDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListLoggerDefinitionsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of logger definitions."
-    },
-    "ListResourceDefinitionVersions" : {
-      "name" : "ListResourceDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListResourceDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListResourceDefinitionVersionsResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a resource definition."
-    },
-    "ListResourceDefinitions" : {
-      "name" : "ListResourceDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/resources",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListResourceDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListResourceDefinitionsResponse",
-        "documentation" : "The IDs of all the Greengrass resource definitions in this account."
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of resource definitions."
-    },
-    "ListSubscriptionDefinitionVersions" : {
-      "name" : "ListSubscriptionDefinitionVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListSubscriptionDefinitionVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListSubscriptionDefinitionVersionsResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Lists the versions of a subscription definition."
-    },
-    "ListSubscriptionDefinitions" : {
-      "name" : "ListSubscriptionDefinitions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/greengrass/definition/subscriptions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListSubscriptionDefinitionsRequest"
-      },
-      "output" : {
-        "shape" : "ListSubscriptionDefinitionsResponse"
-      },
-      "errors" : [ ],
-      "documentation" : "Retrieves a list of subscription definitions."
-    },
-    "ListTagsForResource" : {
-      "name" : "ListTagsForResource",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/tags/{resource-arn}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListTagsForResourceRequest"
-      },
-      "output" : {
-        "shape" : "ListTagsForResourceResponse",
-        "documentation" : "HTTP Status Code 200: OK."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Retrieves a list of resource tags for a resource arn."
-    },
-    "ResetDeployments" : {
-      "name" : "ResetDeployments",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/groups/{GroupId}/deployments/$reset",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ResetDeploymentsRequest"
-      },
-      "output" : {
-        "shape" : "ResetDeploymentsResponse",
-        "documentation" : "Success. The group's deployments were reset."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Resets a group's deployments."
-    },
-    "StartBulkDeployment" : {
-      "name" : "StartBulkDeployment",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/greengrass/bulk/deployments",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "StartBulkDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "StartBulkDeploymentResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Deploys multiple groups in one operation. This action starts the bulk deployment of a specified set of group versions. Each group version deployment will be triggered with an adaptive rate that has a fixed upper limit. We recommend that you include an ''X-Amzn-Client-Token'' token in every ''StartBulkDeployment'' request. These requests are idempotent with respect to the token and the request parameters."
-    },
-    "StopBulkDeployment" : {
-      "name" : "StopBulkDeployment",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/bulk/deployments/{BulkDeploymentId}/$stop",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "StopBulkDeploymentRequest"
-      },
-      "output" : {
-        "shape" : "StopBulkDeploymentResponse",
-        "documentation" : "Success. The bulk deployment is being stopped."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Stops the execution of a bulk deployment. This action returns a status of ''Stopping'' until the deployment is stopped. You cannot start a new bulk deployment while a previous deployment is in the ''Stopping'' state. This action doesn't rollback completed deployments or cancel pending deployments."
-    },
-    "TagResource" : {
-      "name" : "TagResource",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/tags/{resource-arn}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "TagResourceRequest"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Adds tags to a Greengrass resource. Valid resources are 'Group', 'ConnectorDefinition', 'CoreDefinition', 'DeviceDefinition', 'FunctionDefinition', 'LoggerDefinition', 'SubscriptionDefinition', 'ResourceDefinition', and 'BulkDeployment'."
-    },
-    "UntagResource" : {
-      "name" : "UntagResource",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/tags/{resource-arn}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "UntagResourceRequest"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Remove resource tags from a Greengrass Resource."
-    },
-    "UpdateConnectivityInfo" : {
-      "name" : "UpdateConnectivityInfo",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/things/{ThingName}/connectivityInfo",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateConnectivityInfoRequest"
-      },
-      "output" : {
-        "shape" : "UpdateConnectivityInfoResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Updates the connectivity information for the core. Any devices that belong to the group which has this core will receive this information in order to find the location of the core and connect to it."
-    },
-    "UpdateConnectorDefinition" : {
-      "name" : "UpdateConnectorDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/connectors/{ConnectorDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateConnectorDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateConnectorDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a connector definition."
-    },
-    "UpdateCoreDefinition" : {
-      "name" : "UpdateCoreDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/cores/{CoreDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateCoreDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateCoreDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a core definition."
-    },
-    "UpdateDeviceDefinition" : {
-      "name" : "UpdateDeviceDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/devices/{DeviceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateDeviceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateDeviceDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a device definition."
-    },
-    "UpdateFunctionDefinition" : {
-      "name" : "UpdateFunctionDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/functions/{FunctionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateFunctionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateFunctionDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a Lambda function definition."
-    },
-    "UpdateGroup" : {
-      "name" : "UpdateGroup",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/groups/{GroupId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateGroupRequest"
-      },
-      "output" : {
-        "shape" : "UpdateGroupResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a group."
-    },
-    "UpdateGroupCertificateConfiguration" : {
-      "name" : "UpdateGroupCertificateConfiguration",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/groups/{GroupId}/certificateauthorities/configuration/expiry",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateGroupCertificateConfigurationRequest"
-      },
-      "output" : {
-        "shape" : "UpdateGroupCertificateConfigurationResponse",
-        "documentation" : "Success. The response body contains the PKI Configuration."
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Updates the Certificate expiry time for a group."
-    },
-    "UpdateLoggerDefinition" : {
-      "name" : "UpdateLoggerDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/loggers/{LoggerDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateLoggerDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateLoggerDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a logger definition."
-    },
-    "UpdateResourceDefinition" : {
-      "name" : "UpdateResourceDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/resources/{ResourceDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateResourceDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateResourceDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a resource definition."
-    },
-    "UpdateSubscriptionDefinition" : {
-      "name" : "UpdateSubscriptionDefinition",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateSubscriptionDefinitionRequest"
-      },
-      "output" : {
-        "shape" : "UpdateSubscriptionDefinitionResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      } ],
-      "documentation" : "Updates a subscription definition."
-    },
-    "UpdateThingRuntimeConfiguration" : {
-      "name" : "UpdateThingRuntimeConfiguration",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/greengrass/things/{ThingName}/runtimeconfig",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateThingRuntimeConfigurationRequest"
-      },
-      "output" : {
-        "shape" : "UpdateThingRuntimeConfigurationResponse",
-        "documentation" : "success"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "invalid request"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "server error"
-      } ],
-      "documentation" : "Updates the runtime configuration of a thing."
+  "operations": {
+    "AssociateRoleToGroup": {
+      "name": "AssociateRoleToGroup",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/groups/{GroupId}/role",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "AssociateRoleToGroupRequest"
+      },
+      "output": {
+        "shape": "AssociateRoleToGroupResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Associates a role with a group. Your Greengrass core will use the role to access AWS cloud services. The role's permissions should allow Greengrass core Lambda functions to perform actions against the cloud."
+    },
+    "AssociateServiceRoleToAccount": {
+      "name": "AssociateServiceRoleToAccount",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/servicerole",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "AssociateServiceRoleToAccountRequest"
+      },
+      "output": {
+        "shape": "AssociateServiceRoleToAccountResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Associates a role with your account. AWS IoT Greengrass will use the role to access your Lambda functions and AWS IoT resources. This is necessary for deployments to succeed. The role must have at least minimum permissions in the policy ''AWSGreengrassResourceAccessRolePolicy''."
+    },
+    "CreateConnectorDefinition": {
+      "name": "CreateConnectorDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/connectors",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateConnectorDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateConnectorDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a connector definition. You may provide the initial version of the connector definition now or use ''CreateConnectorDefinitionVersion'' at a later time."
+    },
+    "CreateConnectorDefinitionVersion": {
+      "name": "CreateConnectorDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateConnectorDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateConnectorDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a connector definition which has already been defined."
+    },
+    "CreateCoreDefinition": {
+      "name": "CreateCoreDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/cores",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateCoreDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateCoreDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a core definition. You may provide the initial version of the core definition now or use ''CreateCoreDefinitionVersion'' at a later time. Greengrass groups must each contain exactly one Greengrass core."
+    },
+    "CreateCoreDefinitionVersion": {
+      "name": "CreateCoreDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateCoreDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateCoreDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a core definition that has already been defined. Greengrass groups must each contain exactly one Greengrass core."
+    },
+    "CreateDeployment": {
+      "name": "CreateDeployment",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/groups/{GroupId}/deployments",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateDeploymentRequest"
+      },
+      "output": {
+        "shape": "CreateDeploymentResponse",
+        "documentation": "Success. The group was deployed."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a deployment. ''CreateDeployment'' requests are idempotent with respect to the ''X-Amzn-Client-Token'' token and the request parameters."
+    },
+    "CreateDeviceDefinition": {
+      "name": "CreateDeviceDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/devices",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateDeviceDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateDeviceDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a device definition. You may provide the initial version of the device definition now or use ''CreateDeviceDefinitionVersion'' at a later time."
+    },
+    "CreateDeviceDefinitionVersion": {
+      "name": "CreateDeviceDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateDeviceDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateDeviceDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a device definition that has already been defined."
+    },
+    "CreateFunctionDefinition": {
+      "name": "CreateFunctionDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/functions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateFunctionDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateFunctionDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a Lambda function definition which contains a list of Lambda functions and their configurations to be used in a group. You can create an initial version of the definition by providing a list of Lambda functions and their configurations now, or use ''CreateFunctionDefinitionVersion'' later."
+    },
+    "CreateFunctionDefinitionVersion": {
+      "name": "CreateFunctionDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateFunctionDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateFunctionDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a Lambda function definition that has already been defined."
+    },
+    "CreateGroup": {
+      "name": "CreateGroup",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/groups",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateGroupRequest"
+      },
+      "output": {
+        "shape": "CreateGroupResponse",
+        "documentation": "Success. The group was created."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a group. You may provide the initial version of the group or use ''CreateGroupVersion'' at a later time. Tip: You can use the ''gg_group_setup'' package (https://github.com/awslabs/aws-greengrass-group-setup) as a library or command-line application to create and deploy Greengrass groups."
+    },
+    "CreateGroupCertificateAuthority": {
+      "name": "CreateGroupCertificateAuthority",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/groups/{GroupId}/certificateauthorities",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateGroupCertificateAuthorityRequest"
+      },
+      "output": {
+        "shape": "CreateGroupCertificateAuthorityResponse",
+        "documentation": "Success. The response body contains the new active CA ARN."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Creates a CA for the group. If a CA already exists, it will rotate the existing CA."
+    },
+    "CreateGroupVersion": {
+      "name": "CreateGroupVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/groups/{GroupId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateGroupVersionRequest"
+      },
+      "output": {
+        "shape": "CreateGroupVersionResponse",
+        "documentation": "Success. The response contains information about the group version."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a group which has already been defined."
+    },
+    "CreateLoggerDefinition": {
+      "name": "CreateLoggerDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/loggers",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateLoggerDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateLoggerDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a logger definition. You may provide the initial version of the logger definition now or use ''CreateLoggerDefinitionVersion'' at a later time."
+    },
+    "CreateLoggerDefinitionVersion": {
+      "name": "CreateLoggerDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateLoggerDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateLoggerDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a logger definition that has already been defined."
+    },
+    "CreateResourceDefinition": {
+      "name": "CreateResourceDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/resources",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateResourceDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateResourceDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a resource definition which contains a list of resources to be used in a group. You can create an initial version of the definition by providing a list of resources now, or use ''CreateResourceDefinitionVersion'' later."
+    },
+    "CreateResourceDefinitionVersion": {
+      "name": "CreateResourceDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateResourceDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateResourceDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a resource definition that has already been defined."
+    },
+    "CreateSoftwareUpdateJob": {
+      "name": "CreateSoftwareUpdateJob",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/updates",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateSoftwareUpdateJobRequest"
+      },
+      "output": {
+        "shape": "CreateSoftwareUpdateJobResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Creates a software update for a core or group of cores (specified as an IoT thing group.) Use this to update the OTA Agent as well as the Greengrass core software. It makes use of the IoT Jobs feature which provides additional commands to manage a Greengrass core software update job."
+    },
+    "CreateSubscriptionDefinition": {
+      "name": "CreateSubscriptionDefinition",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/subscriptions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateSubscriptionDefinitionRequest"
+      },
+      "output": {
+        "shape": "CreateSubscriptionDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a subscription definition. You may provide the initial version of the subscription definition now or use ''CreateSubscriptionDefinitionVersion'' at a later time."
+    },
+    "CreateSubscriptionDefinitionVersion": {
+      "name": "CreateSubscriptionDefinitionVersion",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateSubscriptionDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "CreateSubscriptionDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Creates a version of a subscription definition which has already been defined."
+    },
+    "DeleteConnectorDefinition": {
+      "name": "DeleteConnectorDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteConnectorDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteConnectorDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a connector definition."
+    },
+    "DeleteCoreDefinition": {
+      "name": "DeleteCoreDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteCoreDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteCoreDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a core definition."
+    },
+    "DeleteDeviceDefinition": {
+      "name": "DeleteDeviceDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteDeviceDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteDeviceDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a device definition."
+    },
+    "DeleteFunctionDefinition": {
+      "name": "DeleteFunctionDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteFunctionDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteFunctionDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a Lambda function definition."
+    },
+    "DeleteGroup": {
+      "name": "DeleteGroup",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/groups/{GroupId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteGroupRequest"
+      },
+      "output": {
+        "shape": "DeleteGroupResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a group."
+    },
+    "DeleteLoggerDefinition": {
+      "name": "DeleteLoggerDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteLoggerDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteLoggerDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a logger definition."
+    },
+    "DeleteResourceDefinition": {
+      "name": "DeleteResourceDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteResourceDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteResourceDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a resource definition."
+    },
+    "DeleteSubscriptionDefinition": {
+      "name": "DeleteSubscriptionDefinition",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteSubscriptionDefinitionRequest"
+      },
+      "output": {
+        "shape": "DeleteSubscriptionDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deletes a subscription definition."
+    },
+    "DisassociateRoleFromGroup": {
+      "name": "DisassociateRoleFromGroup",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/groups/{GroupId}/role",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DisassociateRoleFromGroupRequest"
+      },
+      "output": {
+        "shape": "DisassociateRoleFromGroupResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Disassociates the role from a group."
+    },
+    "DisassociateServiceRoleFromAccount": {
+      "name": "DisassociateServiceRoleFromAccount",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/greengrass/servicerole",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DisassociateServiceRoleFromAccountRequest"
+      },
+      "output": {
+        "shape": "DisassociateServiceRoleFromAccountResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Disassociates the service role from your account. Without a service role, deployments will not work."
+    },
+    "GetAssociatedRole": {
+      "name": "GetAssociatedRole",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/role",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetAssociatedRoleRequest"
+      },
+      "output": {
+        "shape": "GetAssociatedRoleResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retrieves the role associated with a particular group."
+    },
+    "GetBulkDeploymentStatus": {
+      "name": "GetBulkDeploymentStatus",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/bulk/deployments/{BulkDeploymentId}/status",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetBulkDeploymentStatusRequest"
+      },
+      "output": {
+        "shape": "GetBulkDeploymentStatusResponse",
+        "documentation": "Success. The response body contains the status of the bulk deployment."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Returns the status of a bulk deployment."
+    },
+    "GetConnectivityInfo": {
+      "name": "GetConnectivityInfo",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/things/{ThingName}/connectivityInfo",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetConnectivityInfoRequest"
+      },
+      "output": {
+        "shape": "GetConnectivityInfoResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retrieves the connectivity information for a core."
+    },
+    "GetConnectorDefinition": {
+      "name": "GetConnectorDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetConnectorDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetConnectorDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a connector definition."
+    },
+    "GetConnectorDefinitionVersion": {
+      "name": "GetConnectorDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions/{ConnectorDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetConnectorDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetConnectorDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a connector definition version, including the connectors that the version contains. Connectors are prebuilt modules that interact with local infrastructure, device protocols, AWS, and other cloud services."
+    },
+    "GetCoreDefinition": {
+      "name": "GetCoreDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetCoreDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetCoreDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a core definition version."
+    },
+    "GetCoreDefinitionVersion": {
+      "name": "GetCoreDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}/versions/{CoreDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetCoreDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetCoreDefinitionVersionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a core definition version."
+    },
+    "GetDeploymentStatus": {
+      "name": "GetDeploymentStatus",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/deployments/{DeploymentId}/status",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDeploymentStatusRequest"
+      },
+      "output": {
+        "shape": "GetDeploymentStatusResponse",
+        "documentation": "Success. The response body contains the status of the deployment for the group."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Returns the status of a deployment."
+    },
+    "GetDeviceDefinition": {
+      "name": "GetDeviceDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDeviceDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetDeviceDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a device definition."
+    },
+    "GetDeviceDefinitionVersion": {
+      "name": "GetDeviceDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}/versions/{DeviceDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetDeviceDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetDeviceDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a device definition version."
+    },
+    "GetFunctionDefinition": {
+      "name": "GetFunctionDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetFunctionDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetFunctionDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a Lambda function definition, including its creation time and latest version."
+    },
+    "GetFunctionDefinitionVersion": {
+      "name": "GetFunctionDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}/versions/{FunctionDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetFunctionDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetFunctionDefinitionVersionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a Lambda function definition version, including which Lambda functions are included in the version and their configurations."
+    },
+    "GetGroup": {
+      "name": "GetGroup",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetGroupRequest"
+      },
+      "output": {
+        "shape": "GetGroupResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a group."
+    },
+    "GetGroupCertificateAuthority": {
+      "name": "GetGroupCertificateAuthority",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/certificateauthorities/{CertificateAuthorityId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetGroupCertificateAuthorityRequest"
+      },
+      "output": {
+        "shape": "GetGroupCertificateAuthorityResponse",
+        "documentation": "Success. The response body contains the PKI Configuration."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retreives the CA associated with a group. Returns the public key of the CA."
+    },
+    "GetGroupCertificateConfiguration": {
+      "name": "GetGroupCertificateConfiguration",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/certificateauthorities/configuration/expiry",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetGroupCertificateConfigurationRequest"
+      },
+      "output": {
+        "shape": "GetGroupCertificateConfigurationResponse",
+        "documentation": "Success. The response body contains the PKI Configuration."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retrieves the current configuration for the CA used by the group."
+    },
+    "GetGroupVersion": {
+      "name": "GetGroupVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/versions/{GroupVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetGroupVersionRequest"
+      },
+      "output": {
+        "shape": "GetGroupVersionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a group version."
+    },
+    "GetLoggerDefinition": {
+      "name": "GetLoggerDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetLoggerDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetLoggerDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a logger definition."
+    },
+    "GetLoggerDefinitionVersion": {
+      "name": "GetLoggerDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}/versions/{LoggerDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetLoggerDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetLoggerDefinitionVersionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a logger definition version."
+    },
+    "GetResourceDefinition": {
+      "name": "GetResourceDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetResourceDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetResourceDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a resource definition, including its creation time and latest version."
+    },
+    "GetResourceDefinitionVersion": {
+      "name": "GetResourceDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}/versions/{ResourceDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetResourceDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetResourceDefinitionVersionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a resource definition version, including which resources are included in the version."
+    },
+    "GetServiceRoleForAccount": {
+      "name": "GetServiceRoleForAccount",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/servicerole",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetServiceRoleForAccountRequest"
+      },
+      "output": {
+        "shape": "GetServiceRoleForAccountResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retrieves the service role that is attached to your account."
+    },
+    "GetSubscriptionDefinition": {
+      "name": "GetSubscriptionDefinition",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetSubscriptionDefinitionRequest"
+      },
+      "output": {
+        "shape": "GetSubscriptionDefinitionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a subscription definition."
+    },
+    "GetSubscriptionDefinitionVersion": {
+      "name": "GetSubscriptionDefinitionVersion",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions/{SubscriptionDefinitionVersionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetSubscriptionDefinitionVersionRequest"
+      },
+      "output": {
+        "shape": "GetSubscriptionDefinitionVersionResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves information about a subscription definition version."
+    },
+    "GetThingRuntimeConfiguration": {
+      "name": "GetThingRuntimeConfiguration",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/things/{ThingName}/runtimeconfig",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetThingRuntimeConfigurationRequest"
+      },
+      "output": {
+        "shape": "GetThingRuntimeConfigurationResponse",
+        "documentation": "Success. The response contains the runtime configuration for the given thing."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Get the runtime configuration of a thing."
+    },
+    "ListBulkDeploymentDetailedReports": {
+      "name": "ListBulkDeploymentDetailedReports",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/bulk/deployments/{BulkDeploymentId}/detailed-reports",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListBulkDeploymentDetailedReportsRequest"
+      },
+      "output": {
+        "shape": "ListBulkDeploymentDetailedReportsResponse",
+        "documentation": "Success. The response body contains the list of deployments for the given group."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Gets a paginated list of the deployments that have been started in a bulk deployment operation, and their current deployment status."
+    },
+    "ListBulkDeployments": {
+      "name": "ListBulkDeployments",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/bulk/deployments",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListBulkDeploymentsRequest"
+      },
+      "output": {
+        "shape": "ListBulkDeploymentsResponse",
+        "documentation": "Success. The response body contains the list of bulk deployments."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Returns a list of bulk deployments."
+    },
+    "ListConnectorDefinitionVersions": {
+      "name": "ListConnectorDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListConnectorDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListConnectorDefinitionVersionsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a connector definition, which are containers for connectors. Connectors run on the Greengrass core and contain built-in integration with local infrastructure, device protocols, AWS, and other cloud services."
+    },
+    "ListConnectorDefinitions": {
+      "name": "ListConnectorDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/connectors",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListConnectorDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListConnectorDefinitionsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of connector definitions."
+    },
+    "ListCoreDefinitionVersions": {
+      "name": "ListCoreDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListCoreDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListCoreDefinitionVersionsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a core definition."
+    },
+    "ListCoreDefinitions": {
+      "name": "ListCoreDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/cores",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListCoreDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListCoreDefinitionsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of core definitions."
+    },
+    "ListDeployments": {
+      "name": "ListDeployments",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/deployments",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListDeploymentsRequest"
+      },
+      "output": {
+        "shape": "ListDeploymentsResponse",
+        "documentation": "Success. The response body contains the list of deployments for the given group."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Returns a history of deployments for the group."
+    },
+    "ListDeviceDefinitionVersions": {
+      "name": "ListDeviceDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListDeviceDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListDeviceDefinitionVersionsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a device definition."
+    },
+    "ListDeviceDefinitions": {
+      "name": "ListDeviceDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/devices",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListDeviceDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListDeviceDefinitionsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of device definitions."
+    },
+    "ListFunctionDefinitionVersions": {
+      "name": "ListFunctionDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListFunctionDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListFunctionDefinitionVersionsResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a Lambda function definition."
+    },
+    "ListFunctionDefinitions": {
+      "name": "ListFunctionDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/functions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListFunctionDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListFunctionDefinitionsResponse",
+        "documentation": "Success. The response contains the IDs of all the Greengrass Lambda function definitions in this account."
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of Lambda function definitions."
+    },
+    "ListGroupCertificateAuthorities": {
+      "name": "ListGroupCertificateAuthorities",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/certificateauthorities",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListGroupCertificateAuthoritiesRequest"
+      },
+      "output": {
+        "shape": "ListGroupCertificateAuthoritiesResponse",
+        "documentation": "Success. The response body contains the PKI Configuration."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Retrieves the current CAs for a group."
+    },
+    "ListGroupVersions": {
+      "name": "ListGroupVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups/{GroupId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListGroupVersionsRequest"
+      },
+      "output": {
+        "shape": "ListGroupVersionsResponse",
+        "documentation": "Success. The response contains the list of versions and metadata for the given group."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a group."
+    },
+    "ListGroups": {
+      "name": "ListGroups",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/groups",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListGroupsRequest"
+      },
+      "output": {
+        "shape": "ListGroupsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of groups."
+    },
+    "ListLoggerDefinitionVersions": {
+      "name": "ListLoggerDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListLoggerDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListLoggerDefinitionVersionsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a logger definition."
+    },
+    "ListLoggerDefinitions": {
+      "name": "ListLoggerDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/loggers",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListLoggerDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListLoggerDefinitionsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of logger definitions."
+    },
+    "ListResourceDefinitionVersions": {
+      "name": "ListResourceDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListResourceDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListResourceDefinitionVersionsResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a resource definition."
+    },
+    "ListResourceDefinitions": {
+      "name": "ListResourceDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/resources",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListResourceDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListResourceDefinitionsResponse",
+        "documentation": "The IDs of all the Greengrass resource definitions in this account."
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of resource definitions."
+    },
+    "ListSubscriptionDefinitionVersions": {
+      "name": "ListSubscriptionDefinitionVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListSubscriptionDefinitionVersionsRequest"
+      },
+      "output": {
+        "shape": "ListSubscriptionDefinitionVersionsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Lists the versions of a subscription definition."
+    },
+    "ListSubscriptionDefinitions": {
+      "name": "ListSubscriptionDefinitions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/greengrass/definition/subscriptions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListSubscriptionDefinitionsRequest"
+      },
+      "output": {
+        "shape": "ListSubscriptionDefinitionsResponse"
+      },
+      "errors": [],
+      "documentation": "Retrieves a list of subscription definitions."
+    },
+    "ListTagsForResource": {
+      "name": "ListTagsForResource",
+      "http": {
+        "method": "GET",
+        "requestUri": "/tags/{resource-arn}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListTagsForResourceRequest"
+      },
+      "output": {
+        "shape": "ListTagsForResourceResponse",
+        "documentation": "HTTP Status Code 200: OK."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Retrieves a list of resource tags for a resource arn."
+    },
+    "ResetDeployments": {
+      "name": "ResetDeployments",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/groups/{GroupId}/deployments/$reset",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ResetDeploymentsRequest"
+      },
+      "output": {
+        "shape": "ResetDeploymentsResponse",
+        "documentation": "Success. The group's deployments were reset."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Resets a group's deployments."
+    },
+    "StartBulkDeployment": {
+      "name": "StartBulkDeployment",
+      "http": {
+        "method": "POST",
+        "requestUri": "/greengrass/bulk/deployments",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "StartBulkDeploymentRequest"
+      },
+      "output": {
+        "shape": "StartBulkDeploymentResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Deploys multiple groups in one operation. This action starts the bulk deployment of a specified set of group versions. Each group version deployment will be triggered with an adaptive rate that has a fixed upper limit. We recommend that you include an ''X-Amzn-Client-Token'' token in every ''StartBulkDeployment'' request. These requests are idempotent with respect to the token and the request parameters."
+    },
+    "StopBulkDeployment": {
+      "name": "StopBulkDeployment",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/bulk/deployments/{BulkDeploymentId}/$stop",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "StopBulkDeploymentRequest"
+      },
+      "output": {
+        "shape": "StopBulkDeploymentResponse",
+        "documentation": "Success. The bulk deployment is being stopped."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Stops the execution of a bulk deployment. This action returns a status of ''Stopping'' until the deployment is stopped. You cannot start a new bulk deployment while a previous deployment is in the ''Stopping'' state. This action doesn't rollback completed deployments or cancel pending deployments."
+    },
+    "TagResource": {
+      "name": "TagResource",
+      "http": {
+        "method": "POST",
+        "requestUri": "/tags/{resource-arn}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "TagResourceRequest"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Adds tags to a Greengrass resource. Valid resources are 'Group', 'ConnectorDefinition', 'CoreDefinition', 'DeviceDefinition', 'FunctionDefinition', 'LoggerDefinition', 'SubscriptionDefinition', 'ResourceDefinition', and 'BulkDeployment'."
+    },
+    "UntagResource": {
+      "name": "UntagResource",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/tags/{resource-arn}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "UntagResourceRequest"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Remove resource tags from a Greengrass Resource."
+    },
+    "UpdateConnectivityInfo": {
+      "name": "UpdateConnectivityInfo",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/things/{ThingName}/connectivityInfo",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateConnectivityInfoRequest"
+      },
+      "output": {
+        "shape": "UpdateConnectivityInfoResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Updates the connectivity information for the core. Any devices that belong to the group which has this core will receive this information in order to find the location of the core and connect to it."
+    },
+    "UpdateConnectorDefinition": {
+      "name": "UpdateConnectorDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/connectors/{ConnectorDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateConnectorDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateConnectorDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a connector definition."
+    },
+    "UpdateCoreDefinition": {
+      "name": "UpdateCoreDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/cores/{CoreDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateCoreDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateCoreDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a core definition."
+    },
+    "UpdateDeviceDefinition": {
+      "name": "UpdateDeviceDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/devices/{DeviceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateDeviceDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateDeviceDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a device definition."
+    },
+    "UpdateFunctionDefinition": {
+      "name": "UpdateFunctionDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/functions/{FunctionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateFunctionDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateFunctionDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a Lambda function definition."
+    },
+    "UpdateGroup": {
+      "name": "UpdateGroup",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/groups/{GroupId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateGroupRequest"
+      },
+      "output": {
+        "shape": "UpdateGroupResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a group."
+    },
+    "UpdateGroupCertificateConfiguration": {
+      "name": "UpdateGroupCertificateConfiguration",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/groups/{GroupId}/certificateauthorities/configuration/expiry",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateGroupCertificateConfigurationRequest"
+      },
+      "output": {
+        "shape": "UpdateGroupCertificateConfigurationResponse",
+        "documentation": "Success. The response body contains the PKI Configuration."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Updates the Certificate expiry time for a group."
+    },
+    "UpdateLoggerDefinition": {
+      "name": "UpdateLoggerDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/loggers/{LoggerDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateLoggerDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateLoggerDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a logger definition."
+    },
+    "UpdateResourceDefinition": {
+      "name": "UpdateResourceDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/resources/{ResourceDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateResourceDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateResourceDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a resource definition."
+    },
+    "UpdateSubscriptionDefinition": {
+      "name": "UpdateSubscriptionDefinition",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/definition/subscriptions/{SubscriptionDefinitionId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateSubscriptionDefinitionRequest"
+      },
+      "output": {
+        "shape": "UpdateSubscriptionDefinitionResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        }
+      ],
+      "documentation": "Updates a subscription definition."
+    },
+    "UpdateThingRuntimeConfiguration": {
+      "name": "UpdateThingRuntimeConfiguration",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/greengrass/things/{ThingName}/runtimeconfig",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateThingRuntimeConfigurationRequest"
+      },
+      "output": {
+        "shape": "UpdateThingRuntimeConfigurationResponse",
+        "documentation": "success"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "invalid request"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "server error"
+        }
+      ],
+      "documentation": "Updates the runtime configuration of a thing."
     }
   },
-  "shapes" : {
-    "AssociateRoleToGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "RoleArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the role you wish to associate with this group. The existence of the role is not validated."
-        }
-      },
-      "required" : [ "GroupId", "RoleArn" ]
-    },
-    "AssociateRoleToGroupResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AssociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the role ARN was associated with the group."
-        }
-      }
-    },
-    "AssociateServiceRoleToAccountRequest" : {
-      "type" : "structure",
-      "members" : {
-        "RoleArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the service role you wish to associate with your account."
-        }
-      },
-      "required" : [ "RoleArn" ]
-    },
-    "AssociateServiceRoleToAccountResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AssociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time when the service role was associated with the account."
-        }
-      }
-    },
-    "BadRequestException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Details about the error."
-        },
-        "Message" : {
-          "shape" : "__string",
-          "documentation" : "A message containing information about the error."
-        }
-      },
-      "documentation" : "General error information.",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 400
-      }
-    },
-    "BulkDeployment" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the bulk deployment."
-        },
-        "BulkDeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the bulk deployment."
-        },
-        "CreatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in ISO format, when the deployment was created."
-        }
-      },
-      "documentation" : "Information about a bulk deployment. You cannot start a new bulk deployment while another one is still running or in a non-terminal state."
-    },
-    "BulkDeploymentMetrics" : {
-      "type" : "structure",
-      "members" : {
-        "InvalidInputRecords" : {
-          "shape" : "__integer",
-          "documentation" : "The total number of records that returned a non-retryable error. For example, this can occur if a group record from the input file uses an invalid format or specifies a nonexistent group version, or if the execution role doesn't grant permission to deploy a group or group version."
-        },
-        "RecordsProcessed" : {
-          "shape" : "__integer",
-          "documentation" : "The total number of group records from the input file that have been processed so far, or attempted."
-        },
-        "RetryAttempts" : {
-          "shape" : "__integer",
-          "documentation" : "The total number of deployment attempts that returned a retryable error. For example, a retry is triggered if the attempt to deploy a group returns a throttling error. ''StartBulkDeployment'' retries a group deployment up to five times."
-        }
-      },
-      "documentation" : "Relevant metrics on input records processed during bulk deployment."
-    },
-    "BulkDeploymentResult" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in ISO format, when the deployment was created."
-        },
-        "DeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the group deployment."
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group deployment."
-        },
-        "DeploymentStatus" : {
-          "shape" : "__string",
-          "documentation" : "The current status of the group deployment: ''InProgress'', ''Building'', ''Success'', or ''Failure''."
-        },
-        "DeploymentType" : {
-          "shape" : "DeploymentType",
-          "documentation" : "The type of the deployment."
-        },
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Details about the error."
-        },
-        "ErrorMessage" : {
-          "shape" : "__string",
-          "documentation" : "The error message for a failed deployment"
-        },
-        "GroupArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the Greengrass group."
-        }
-      },
-      "documentation" : "Information about an individual group deployment in a bulk deployment operation."
-    },
-    "BulkDeploymentResults" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "BulkDeploymentResult"
-      }
-    },
-    "BulkDeploymentStatus" : {
-      "type" : "string",
-      "documentation" : "The current status of the bulk deployment.",
-      "enum" : [ "Initializing", "Running", "Completed", "Stopping", "Stopped", "Failed" ]
-    },
-    "BulkDeployments" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "BulkDeployment"
-      }
-    },
-    "ConfigurationSyncStatus" : {
-      "type" : "string",
-      "enum" : [ "InSync", "OutOfSync" ]
-    },
-    "ConnectivityInfo" : {
-      "type" : "structure",
-      "members" : {
-        "HostAddress" : {
-          "shape" : "__string",
-          "documentation" : "The endpoint for the Greengrass core. Can be an IP address or DNS."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the connectivity information."
-        },
-        "Metadata" : {
-          "shape" : "__string",
-          "documentation" : "Metadata for this endpoint."
-        },
-        "PortNumber" : {
-          "shape" : "__integer",
-          "documentation" : "The port of the Greengrass core. Usually 8883."
-        }
-      },
-      "documentation" : "Information about a Greengrass core's connectivity."
-    },
-    "Connector" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the connector."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the connector. This value must be unique within the connector definition version. Max length is 128 characters with pattern [a-zA-Z0-9:_-]+."
-        },
-        "Parameters" : {
-          "shape" : "__mapOf__string",
-          "documentation" : "The parameters or configuration that the connector uses."
-        }
-      },
-      "documentation" : "Information about a connector. Connectors run on the Greengrass core and contain built-in integration with local infrastructure, device protocols, AWS, and other cloud services.",
-      "required" : [ "ConnectorArn", "Id" ]
-    },
-    "ConnectorDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Connectors" : {
-          "shape" : "__listOfConnector",
-          "documentation" : "A list of references to connectors in this version, with their corresponding configuration settings."
-        }
-      },
-      "documentation" : "Information about the connector definition version, which is a container for connectors."
-    },
-    "Core" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the certificate associated with the core."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the core. This value must be unique within the core definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
-        },
-        "SyncShadow" : {
-          "shape" : "__boolean",
-          "documentation" : "If true, the core's local shadow is automatically synced with the cloud."
-        },
-        "ThingArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the thing which is the core."
-        }
-      },
-      "documentation" : "Information about a core.",
-      "required" : [ "ThingArn", "Id", "CertificateArn" ]
-    },
-    "CoreDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Cores" : {
-          "shape" : "__listOfCore",
-          "documentation" : "A list of cores in the core definition version."
-        }
-      },
-      "documentation" : "Information about a core definition version."
-    },
-    "CreateConnectorDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "ConnectorDefinitionVersion",
-          "documentation" : "Information about the initial version of the connector definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the connector definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateConnectorDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateConnectorDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        },
-        "Connectors" : {
-          "shape" : "__listOfConnector",
-          "documentation" : "A list of references to connectors in this version, with their corresponding configuration settings."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId" ]
-    },
-    "CreateConnectorDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateCoreDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "CoreDefinitionVersion",
-          "documentation" : "Information about the initial version of the core definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the core definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      },
-      "documentation" : "Information needed to create a core definition."
-    },
-    "CreateCoreDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateCoreDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        },
-        "Cores" : {
-          "shape" : "__listOfCore",
-          "documentation" : "A list of cores in the core definition version."
-        }
-      },
-      "required" : [ "CoreDefinitionId" ]
-    },
-    "CreateCoreDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the deployment if you wish to redeploy a previous deployment."
-        },
-        "DeploymentType" : {
-          "shape" : "DeploymentType",
-          "documentation" : "The type of deployment. When used for ''CreateDeployment'', only ''NewDeployment'' and ''Redeployment'' are valid."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "GroupVersionId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group version to be deployed."
-        }
-      },
-      "required" : [ "GroupId", "DeploymentType" ]
-    },
-    "CreateDeploymentResponse" : {
-      "type" : "structure",
-      "members" : {
-        "DeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the deployment."
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the deployment."
-        }
-      }
-    },
-    "CreateDeviceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "DeviceDefinitionVersion",
-          "documentation" : "Information about the initial version of the device definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the device definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateDeviceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateDeviceDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        },
-        "Devices" : {
-          "shape" : "__listOfDevice",
-          "documentation" : "A list of devices in the definition version."
-        }
-      },
-      "required" : [ "DeviceDefinitionId" ]
-    },
-    "CreateDeviceDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateFunctionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "FunctionDefinitionVersion",
-          "documentation" : "Information about the initial version of the function definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the function definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateFunctionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateFunctionDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "DefaultConfig" : {
-          "shape" : "FunctionDefaultConfig",
-          "documentation" : "The default configuration that applies to all Lambda functions in this function definition version. Individual Lambda functions can override these settings."
-        },
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        },
-        "Functions" : {
-          "shape" : "__listOfFunction",
-          "documentation" : "A list of Lambda functions in this function definition version."
-        }
-      },
-      "documentation" : "Information needed to create a function definition version.",
-      "required" : [ "FunctionDefinitionId" ]
-    },
-    "CreateFunctionDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateGroupCertificateAuthorityRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "CreateGroupCertificateAuthorityResponse" : {
-      "type" : "structure",
-      "members" : {
-        "GroupCertificateAuthorityArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the group certificate authority."
-        }
-      }
-    },
-    "CreateGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "GroupVersion",
-          "documentation" : "Information about the initial version of the group."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the group."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      },
-      "required" : [ "Name" ]
-    },
-    "CreateGroupResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateGroupVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "ConnectorDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the connector definition version for this group."
-        },
-        "CoreDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the core definition version for this group."
-        },
-        "DeviceDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the device definition version for this group."
-        },
-        "FunctionDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the function definition version for this group."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "LoggerDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the logger definition version for this group."
-        },
-        "ResourceDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the resource definition version for this group."
-        },
-        "SubscriptionDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the subscription definition version for this group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "CreateGroupVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateLoggerDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "LoggerDefinitionVersion",
-          "documentation" : "Information about the initial version of the logger definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the logger definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateLoggerDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateLoggerDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        },
-        "Loggers" : {
-          "shape" : "__listOfLogger",
-          "documentation" : "A list of loggers."
-        }
-      },
-      "required" : [ "LoggerDefinitionId" ]
-    },
-    "CreateLoggerDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateResourceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "ResourceDefinitionVersion",
-          "documentation" : "Information about the initial version of the resource definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the resource definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateResourceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateResourceDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        },
-        "Resources" : {
-          "shape" : "__listOfResource",
-          "documentation" : "A list of resources."
-        }
-      },
-      "required" : [ "ResourceDefinitionId" ]
-    },
-    "CreateResourceDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "CreateSoftwareUpdateJobRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "S3UrlSignerRole" : {
-          "shape" : "S3UrlSignerRole"
-        },
-        "SoftwareToUpdate" : {
-          "shape" : "SoftwareToUpdate"
-        },
-        "UpdateAgentLogLevel" : {
-          "shape" : "UpdateAgentLogLevel"
-        },
-        "UpdateTargets" : {
-          "shape" : "UpdateTargets"
-        },
-        "UpdateTargetsArchitecture" : {
-          "shape" : "UpdateTargetsArchitecture"
-        },
-        "UpdateTargetsOperatingSystem" : {
-          "shape" : "UpdateTargetsOperatingSystem"
-        }
-      },
-      "required" : [ "S3UrlSignerRole", "UpdateTargetsArchitecture", "SoftwareToUpdate", "UpdateTargets", "UpdateTargetsOperatingSystem" ]
-    },
-    "CreateSoftwareUpdateJobResponse" : {
-      "type" : "structure",
-      "members" : {
-        "IotJobArn" : {
-          "shape" : "__string",
-          "documentation" : "The IoT Job ARN corresponding to this update."
-        },
-        "IotJobId" : {
-          "shape" : "__string",
-          "documentation" : "The IoT Job Id corresponding to this update."
-        },
-        "PlatformSoftwareVersion" : {
-          "shape" : "__string",
-          "documentation" : "The software version installed on the device or devices after the update."
-        }
-      }
-    },
-    "CreateSubscriptionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "InitialVersion" : {
-          "shape" : "SubscriptionDefinitionVersion",
-          "documentation" : "Information about the initial version of the subscription definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the subscription definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      }
-    },
-    "CreateSubscriptionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      }
-    },
-    "CreateSubscriptionDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        },
-        "Subscriptions" : {
-          "shape" : "__listOfSubscription",
-          "documentation" : "A list of subscriptions."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId" ]
-    },
-    "CreateSubscriptionDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      }
-    },
-    "DefinitionInformation" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "Tags" : {
-          "shape" : "Tags",
-          "locationName" : "tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      },
-      "documentation" : "Information about a definition."
-    },
-    "DeleteConnectorDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId" ]
-    },
-    "DeleteConnectorDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteCoreDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        }
-      },
-      "required" : [ "CoreDefinitionId" ]
-    },
-    "DeleteCoreDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteDeviceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        }
-      },
-      "required" : [ "DeviceDefinitionId" ]
-    },
-    "DeleteDeviceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteFunctionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        }
-      },
-      "required" : [ "FunctionDefinitionId" ]
-    },
-    "DeleteFunctionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "DeleteGroupResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteLoggerDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        }
-      },
-      "required" : [ "LoggerDefinitionId" ]
-    },
-    "DeleteLoggerDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteResourceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        }
-      },
-      "required" : [ "ResourceDefinitionId" ]
-    },
-    "DeleteResourceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DeleteSubscriptionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId" ]
-    },
-    "DeleteSubscriptionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "Deployment" : {
-      "type" : "structure",
-      "members" : {
-        "CreatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the deployment was created."
-        },
-        "DeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the deployment."
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the deployment."
-        },
-        "DeploymentType" : {
-          "shape" : "DeploymentType",
-          "documentation" : "The type of the deployment."
-        },
-        "GroupArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the group for this deployment."
-        }
-      },
-      "documentation" : "Information about a deployment."
-    },
-    "DeploymentType" : {
-      "type" : "string",
-      "documentation" : "The type of deployment. When used for ''CreateDeployment'', only ''NewDeployment'' and ''Redeployment'' are valid.",
-      "enum" : [ "NewDeployment", "Redeployment", "ResetDeployment", "ForceResetDeployment" ]
-    },
-    "Deployments" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Deployment"
-      }
-    },
-    "Device" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the certificate associated with the device."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the device. This value must be unique within the device definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
-        },
-        "SyncShadow" : {
-          "shape" : "__boolean",
-          "documentation" : "If true, the device's local shadow will be automatically synced with the cloud."
-        },
-        "ThingArn" : {
-          "shape" : "__string",
-          "documentation" : "The thing ARN of the device."
-        }
-      },
-      "documentation" : "Information about a device.",
-      "required" : [ "ThingArn", "Id", "CertificateArn" ]
-    },
-    "DeviceDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Devices" : {
-          "shape" : "__listOfDevice",
-          "documentation" : "A list of devices in the definition version."
-        }
-      },
-      "documentation" : "Information about a device definition version."
-    },
-    "DisassociateRoleFromGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "DisassociateRoleFromGroupResponse" : {
-      "type" : "structure",
-      "members" : {
-        "DisassociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the role was disassociated from the group."
-        }
-      }
-    },
-    "DisassociateServiceRoleFromAccountRequest" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "DisassociateServiceRoleFromAccountResponse" : {
-      "type" : "structure",
-      "members" : {
-        "DisassociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time when the service role was disassociated from the account."
-        }
-      }
-    },
-    "Empty" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "Empty"
-    },
-    "EncodingType" : {
-      "type" : "string",
-      "enum" : [ "binary", "json" ]
-    },
-    "ErrorDetail" : {
-      "type" : "structure",
-      "members" : {
-        "DetailedErrorCode" : {
-          "shape" : "__string",
-          "documentation" : "A detailed error code."
-        },
-        "DetailedErrorMessage" : {
-          "shape" : "__string",
-          "documentation" : "A detailed error message."
-        }
-      },
-      "documentation" : "Details about the error."
-    },
-    "ErrorDetails" : {
-      "type" : "list",
-      "documentation" : "A list of error details.",
-      "member" : {
-        "shape" : "ErrorDetail"
-      }
-    },
-    "Function" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the Lambda function."
-        },
-        "FunctionConfiguration" : {
-          "shape" : "FunctionConfiguration",
-          "documentation" : "The configuration of the Lambda function."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the function. This value must be unique within the function definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
-        }
-      },
-      "documentation" : "Information about a Lambda function.",
-      "required" : [ "Id" ]
-    },
-    "FunctionConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "EncodingType" : {
-          "shape" : "EncodingType",
-          "documentation" : "The expected encoding type of the input payload for the function. The default is ''json''."
-        },
-        "Environment" : {
-          "shape" : "FunctionConfigurationEnvironment",
-          "documentation" : "The environment configuration of the function."
-        },
-        "ExecArgs" : {
-          "shape" : "__string",
-          "documentation" : "The execution arguments."
-        },
-        "Executable" : {
-          "shape" : "__string",
-          "documentation" : "The name of the function executable."
-        },
-        "MemorySize" : {
-          "shape" : "__integer",
-          "documentation" : "The memory size, in KB, which the function requires. This setting is not applicable and should be cleared when you run the Lambda function without containerization."
-        },
-        "Pinned" : {
-          "shape" : "__boolean",
-          "documentation" : "True if the function is pinned. Pinned means the function is long-lived and starts when the core starts."
-        },
-        "Timeout" : {
-          "shape" : "__integer",
-          "documentation" : "The allowed function execution time, after which Lambda should terminate the function. This timeout still applies to pinned Lambda functions for each request."
-        },
-        "FunctionRuntimeOverride" : {
-          "shape" : "__string",
-          "documentation" : "The Lambda runtime supported by Greengrass which is to be used instead of the one specified in the Lambda function."
-        }
-      },
-      "documentation" : "The configuration of the Lambda function."
-    },
-    "FunctionConfigurationEnvironment" : {
-      "type" : "structure",
-      "members" : {
-        "AccessSysfs" : {
-          "shape" : "__boolean",
-          "documentation" : "If true, the Lambda function is allowed to access the host's /sys folder. Use this when the Lambda function needs to read device information from /sys. This setting applies only when you run the Lambda function in a Greengrass container."
-        },
-        "Execution" : {
-          "shape" : "FunctionExecutionConfig",
-          "documentation" : "Configuration related to executing the Lambda function"
-        },
-        "ResourceAccessPolicies" : {
-          "shape" : "__listOfResourceAccessPolicy",
-          "documentation" : "A list of the resources, with their permissions, to which the Lambda function will be granted access. A Lambda function can have at most 10 resources. ResourceAccessPolicies apply only when you run the Lambda function in a Greengrass container."
-        },
-        "Variables" : {
-          "shape" : "__mapOf__string",
-          "documentation" : "Environment variables for the Lambda function's configuration."
-        }
-      },
-      "documentation" : "The environment configuration of the function."
-    },
-    "FunctionDefaultConfig" : {
-      "type" : "structure",
-      "members" : {
-        "Execution" : {
-          "shape" : "FunctionDefaultExecutionConfig"
-        }
-      },
-      "documentation" : "The default configuration that applies to all Lambda functions in the group. Individual Lambda functions can override these settings."
-    },
-    "FunctionDefaultExecutionConfig" : {
-      "type" : "structure",
-      "members" : {
-        "IsolationMode" : {
-          "shape" : "FunctionIsolationMode"
-        },
-        "RunAs" : {
-          "shape" : "FunctionRunAsConfig"
-        }
-      },
-      "documentation" : "Configuration information that specifies how a Lambda function runs. "
-    },
-    "FunctionDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "DefaultConfig" : {
-          "shape" : "FunctionDefaultConfig",
-          "documentation" : "The default configuration that applies to all Lambda functions in this function definition version. Individual Lambda functions can override these settings."
-        },
-        "Functions" : {
-          "shape" : "__listOfFunction",
-          "documentation" : "A list of Lambda functions in this function definition version."
-        }
-      },
-      "documentation" : "Information about a function definition version."
-    },
-    "FunctionExecutionConfig" : {
-      "type" : "structure",
-      "members" : {
-        "IsolationMode" : {
-          "shape" : "FunctionIsolationMode"
-        },
-        "RunAs" : {
-          "shape" : "FunctionRunAsConfig"
-        }
-      },
-      "documentation" : "Configuration information that specifies how a Lambda function runs. "
-    },
-    "FunctionIsolationMode" : {
-      "type" : "string",
-      "documentation" : "Specifies whether the Lambda function runs in a Greengrass container (default) or without containerization. Unless your scenario requires that you run without containerization, we recommend that you run in a Greengrass container. Omit this value to run the Lambda function with the default containerization for the group.",
-      "enum" : [ "GreengrassContainer", "NoContainer" ]
-    },
-    "FunctionRunAsConfig" : {
-      "type" : "structure",
-      "members" : {
-        "Gid" : {
-          "shape" : "__integer",
-          "documentation" : "The group ID whose permissions are used to run a Lambda function."
-        },
-        "Uid" : {
-          "shape" : "__integer",
-          "documentation" : "The user ID whose permissions are used to run a Lambda function."
-        }
-      },
-      "documentation" : "Specifies the user and group whose permissions are used when running the Lambda function. You can specify one or both values to override the default values. We recommend that you avoid running as root unless absolutely necessary to minimize the risk of unintended changes or malicious attacks. To run as root, you must set ''IsolationMode'' to ''NoContainer'' and update config.json in ''greengrass-root/config'' to set ''allowFunctionsToRunAsRoot'' to ''yes''."
-    },
-    "GeneralError" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Details about the error."
-        },
-        "Message" : {
-          "shape" : "__string",
-          "documentation" : "A message containing information about the error."
-        }
-      },
-      "documentation" : "General error information."
-    },
-    "GetAssociatedRoleRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "GetAssociatedRoleResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AssociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time when the role was associated with the group."
-        },
-        "RoleArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the role that is associated with the group."
-        }
-      }
-    },
-    "GetBulkDeploymentStatusRequest" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "BulkDeploymentId",
-          "documentation" : "The ID of the bulk deployment."
-        }
-      },
-      "required" : [ "BulkDeploymentId" ]
-    },
-    "GetBulkDeploymentStatusResponse" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentMetrics" : {
-          "shape" : "BulkDeploymentMetrics",
-          "documentation" : "Relevant metrics on input records processed during bulk deployment."
-        },
-        "BulkDeploymentStatus" : {
-          "shape" : "BulkDeploymentStatus",
-          "documentation" : "The status of the bulk deployment."
-        },
-        "CreatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in ISO format, when the deployment was created."
-        },
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Error details"
-        },
-        "ErrorMessage" : {
-          "shape" : "__string",
-          "documentation" : "Error message"
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetConnectivityInfoRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ThingName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ThingName",
-          "documentation" : "The thing name."
-        }
-      },
-      "required" : [ "ThingName" ]
-    },
-    "GetConnectivityInfoResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectivityInfo" : {
-          "shape" : "__listOfConnectivityInfo",
-          "documentation" : "Connectivity info list."
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "A message about the connectivity info request."
-        }
-      }
-    },
-    "GetConnectorDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId" ]
-    },
-    "GetConnectorDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetConnectorDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        },
-        "ConnectorDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionVersionId",
-          "documentation" : "The ID of the connector definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListConnectorDefinitionVersions'' requests. If the version is the last one that was associated with a connector definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId", "ConnectorDefinitionVersionId" ]
-    },
-    "GetConnectorDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the connector definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the connector definition version was created."
-        },
-        "Definition" : {
-          "shape" : "ConnectorDefinitionVersion",
-          "documentation" : "Information about the connector definition version."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the connector definition version."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the connector definition version."
-        }
-      }
-    },
-    "GetCoreDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        }
-      },
-      "required" : [ "CoreDefinitionId" ]
-    },
-    "GetCoreDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetCoreDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        },
-        "CoreDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionVersionId",
-          "documentation" : "The ID of the core definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListCoreDefinitionVersions'' requests. If the version is the last one that was associated with a core definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        }
-      },
-      "required" : [ "CoreDefinitionId", "CoreDefinitionVersionId" ]
-    },
-    "GetCoreDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the core definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the core definition version was created."
-        },
-        "Definition" : {
-          "shape" : "CoreDefinitionVersion",
-          "documentation" : "Information about the core definition version."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the core definition version."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the core definition version."
-        }
-      }
-    },
-    "GetDeploymentStatusRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeploymentId",
-          "documentation" : "The ID of the deployment."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId", "DeploymentId" ]
-    },
-    "GetDeploymentStatusResponse" : {
-      "type" : "structure",
-      "members" : {
-        "DeploymentStatus" : {
-          "shape" : "__string",
-          "documentation" : "The status of the deployment: ''InProgress'', ''Building'', ''Success'', or ''Failure''."
-        },
-        "DeploymentType" : {
-          "shape" : "DeploymentType",
-          "documentation" : "The type of the deployment."
-        },
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Error details"
-        },
-        "ErrorMessage" : {
-          "shape" : "__string",
-          "documentation" : "Error message"
-        },
-        "UpdatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the deployment status was updated."
-        }
-      }
-    },
-    "GetDeviceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        }
-      },
-      "required" : [ "DeviceDefinitionId" ]
-    },
-    "GetDeviceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetDeviceDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        },
-        "DeviceDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionVersionId",
-          "documentation" : "The ID of the device definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListDeviceDefinitionVersions'' requests. If the version is the last one that was associated with a device definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "DeviceDefinitionVersionId", "DeviceDefinitionId" ]
-    },
-    "GetDeviceDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the device definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the device definition version was created."
-        },
-        "Definition" : {
-          "shape" : "DeviceDefinitionVersion",
-          "documentation" : "Information about the device definition version."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the device definition version."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the device definition version."
-        }
-      }
-    },
-    "GetFunctionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        }
-      },
-      "required" : [ "FunctionDefinitionId" ]
-    },
-    "GetFunctionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetFunctionDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        },
-        "FunctionDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionVersionId",
-          "documentation" : "The ID of the function definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListFunctionDefinitionVersions'' requests. If the version is the last one that was associated with a function definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "FunctionDefinitionId", "FunctionDefinitionVersionId" ]
-    },
-    "GetFunctionDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the function definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the function definition version was created."
-        },
-        "Definition" : {
-          "shape" : "FunctionDefinitionVersion",
-          "documentation" : "Information on the definition."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the function definition version."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the function definition version."
-        }
-      }
-    },
-    "GetGroupCertificateAuthorityRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateAuthorityId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CertificateAuthorityId",
-          "documentation" : "The ID of the certificate authority."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "CertificateAuthorityId", "GroupId" ]
-    },
-    "GetGroupCertificateAuthorityResponse" : {
-      "type" : "structure",
-      "members" : {
-        "GroupCertificateAuthorityArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the certificate authority for the group."
-        },
-        "GroupCertificateAuthorityId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the certificate authority for the group."
-        },
-        "PemEncodedCertificate" : {
-          "shape" : "__string",
-          "documentation" : "The PEM encoded certificate for the group."
-        }
-      }
-    },
-    "GetGroupCertificateConfigurationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "GetGroupCertificateConfigurationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateAuthorityExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate authority expires, in milliseconds."
-        },
-        "CertificateExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate expires, in milliseconds."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group certificate configuration."
-        }
-      }
-    },
-    "GetGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "GetGroupResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetGroupVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "GroupVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupVersionId",
-          "documentation" : "The ID of the group version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListGroupVersions'' requests. If the version is the last one that was associated with a group, the value also maps to the ''LatestVersion'' property of the corresponding ''GroupInformation'' object."
-        }
-      },
-      "required" : [ "GroupVersionId", "GroupId" ]
-    },
-    "GetGroupVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the group version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the group version was created."
-        },
-        "Definition" : {
-          "shape" : "GroupVersion",
-          "documentation" : "Information about the group version definition."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group version."
-        }
-      }
-    },
-    "GetLoggerDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        }
-      },
-      "required" : [ "LoggerDefinitionId" ]
-    },
-    "GetLoggerDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetLoggerDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        },
-        "LoggerDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionVersionId",
-          "documentation" : "The ID of the logger definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListLoggerDefinitionVersions'' requests. If the version is the last one that was associated with a logger definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "LoggerDefinitionVersionId", "LoggerDefinitionId" ]
-    },
-    "GetLoggerDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the logger definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the logger definition version was created."
-        },
-        "Definition" : {
-          "shape" : "LoggerDefinitionVersion",
-          "documentation" : "Information about the logger definition version."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the logger definition version."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the logger definition version."
-        }
-      }
-    },
-    "GetResourceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        }
-      },
-      "required" : [ "ResourceDefinitionId" ]
-    },
-    "GetResourceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetResourceDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        },
-        "ResourceDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionVersionId",
-          "documentation" : "The ID of the resource definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListResourceDefinitionVersions'' requests. If the version is the last one that was associated with a resource definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        }
-      },
-      "required" : [ "ResourceDefinitionVersionId", "ResourceDefinitionId" ]
-    },
-    "GetResourceDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "Arn of the resource definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the resource definition version was created."
-        },
-        "Definition" : {
-          "shape" : "ResourceDefinitionVersion",
-          "documentation" : "Information about the definition."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the resource definition version."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the resource definition version."
-        }
-      }
-    },
-    "GetServiceRoleForAccountRequest" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "GetServiceRoleForAccountResponse" : {
-      "type" : "structure",
-      "members" : {
-        "AssociatedAt" : {
-          "shape" : "__string",
-          "documentation" : "The time when the service role was associated with the account."
-        },
-        "RoleArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the role which is associated with the account."
-        }
-      }
-    },
-    "GetSubscriptionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId" ]
-    },
-    "GetSubscriptionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the definition."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the definition."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the definition was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the definition."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) attached to the resource arn."
-        }
-      }
-    },
-    "GetSubscriptionDefinitionVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        },
-        "SubscriptionDefinitionVersionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionVersionId",
-          "documentation" : "The ID of the subscription definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListSubscriptionDefinitionVersions'' requests. If the version is the last one that was associated with a subscription definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId", "SubscriptionDefinitionVersionId" ]
-    },
-    "GetSubscriptionDefinitionVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the subscription definition version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the subscription definition version was created."
-        },
-        "Definition" : {
-          "shape" : "SubscriptionDefinitionVersion",
-          "documentation" : "Information about the subscription definition version."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the subscription definition version."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The version of the subscription definition version."
-        }
-      }
-    },
-    "GetThingRuntimeConfigurationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ThingName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ThingName",
-          "documentation" : "The thing name."
-        }
-      },
-      "required" : [ "ThingName" ]
-    },
-    "GetThingRuntimeConfigurationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "RuntimeConfiguration" : {
-          "shape" : "RuntimeConfiguration",
-          "documentation" : "Runtime configuration for a thing."
-        }
-      }
-    },
-    "GroupCertificateAuthorityProperties" : {
-      "type" : "structure",
-      "members" : {
-        "GroupCertificateAuthorityArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the certificate authority for the group."
-        },
-        "GroupCertificateAuthorityId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the certificate authority for the group."
-        }
-      },
-      "documentation" : "Information about a certificate authority for a group."
-    },
-    "GroupCertificateConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateAuthorityExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate authority expires, in milliseconds."
-        },
-        "CertificateExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate expires, in milliseconds."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group certificate configuration."
-        }
-      },
-      "documentation" : "Information about a group certificate configuration."
-    },
-    "GroupInformation" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the group."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the group was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group."
-        },
-        "LastUpdatedTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the group was last updated."
-        },
-        "LatestVersion" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the latest version associated with the group."
-        },
-        "LatestVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the latest version associated with the group."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the group."
-        }
-      },
-      "documentation" : "Information about a group."
-    },
-    "GroupOwnerSetting" : {
-      "type" : "structure",
-      "members" : {
-        "AutoAddGroupOwner" : {
-          "shape" : "__boolean",
-          "documentation" : "If true, AWS IoT Greengrass automatically adds the specified Linux OS group owner of the resource to the Lambda process privileges. Thus the Lambda process will have the file access permissions of the added Linux group."
-        },
-        "GroupOwner" : {
-          "shape" : "__string",
-          "documentation" : "The name of the Linux OS group whose privileges will be added to the Lambda process. This field is optional."
-        }
-      },
-      "documentation" : "Group owner related settings for local resources."
-    },
-    "GroupVersion" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the connector definition version for this group."
-        },
-        "CoreDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the core definition version for this group."
-        },
-        "DeviceDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the device definition version for this group."
-        },
-        "FunctionDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the function definition version for this group."
-        },
-        "LoggerDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the logger definition version for this group."
-        },
-        "ResourceDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the resource definition version for this group."
-        },
-        "SubscriptionDefinitionVersionArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the subscription definition version for this group."
-        }
-      },
-      "documentation" : "Information about a group version."
-    },
-    "InternalServerErrorException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorDetails" : {
-          "shape" : "ErrorDetails",
-          "documentation" : "Details about the error."
-        },
-        "Message" : {
-          "shape" : "__string",
-          "documentation" : "A message containing information about the error."
-        }
-      },
-      "documentation" : "General error information.",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 500
-      }
-    },
-    "ListBulkDeploymentDetailedReportsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "BulkDeploymentId",
-          "documentation" : "The ID of the bulk deployment."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "BulkDeploymentId" ]
-    },
-    "ListBulkDeploymentDetailedReportsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Deployments" : {
-          "shape" : "BulkDeploymentResults",
-          "documentation" : "A list of the individual group deployments in the bulk deployment operation."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListBulkDeploymentsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListBulkDeploymentsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeployments" : {
-          "shape" : "BulkDeployments",
-          "documentation" : "A list of bulk deployments."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListConnectorDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId" ]
-    },
-    "ListConnectorDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListConnectorDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListConnectorDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListCoreDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "CoreDefinitionId" ]
-    },
-    "ListCoreDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListCoreDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListCoreDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "documentation" : "A list of definitions."
-    },
-    "ListDeploymentsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "ListDeploymentsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Deployments" : {
-          "shape" : "Deployments",
-          "documentation" : "A list of deployments for the requested groups."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListDeviceDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "DeviceDefinitionId" ]
-    },
-    "ListDeviceDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListDeviceDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListDeviceDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListFunctionDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "FunctionDefinitionId" ]
-    },
-    "ListFunctionDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListFunctionDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListFunctionDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListGroupCertificateAuthoritiesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "ListGroupCertificateAuthoritiesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "GroupCertificateAuthorities" : {
-          "shape" : "__listOfGroupCertificateAuthorityProperties",
-          "documentation" : "A list of certificate authorities associated with the group."
-        }
-      }
-    },
-    "ListGroupVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "ListGroupVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListGroupsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListGroupsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Groups" : {
-          "shape" : "__listOfGroupInformation",
-          "documentation" : "Information about a group."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListLoggerDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        },
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      },
-      "required" : [ "LoggerDefinitionId" ]
-    },
-    "ListLoggerDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListLoggerDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListLoggerDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListResourceDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        }
-      },
-      "required" : [ "ResourceDefinitionId" ]
-    },
-    "ListResourceDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListResourceDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListResourceDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListSubscriptionDefinitionVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId" ]
-    },
-    "ListSubscriptionDefinitionVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      }
-    },
-    "ListSubscriptionDefinitionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxResults" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "MaxResults",
-          "documentation" : "The maximum number of results to be returned per request."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "NextToken",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListSubscriptionDefinitionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Definitions" : {
-          "shape" : "__listOfDefinitionInformation",
-          "documentation" : "Information about a definition."
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        }
-      }
-    },
-    "ListTagsForResourceRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "The Amazon Resource Name (ARN) of the resource."
-        }
-      },
-      "required" : [ "ResourceArn" ]
-    },
-    "ListTagsForResourceResponse" : {
-      "type" : "structure",
-      "members" : {
-        "tags" : {
-          "shape" : "Tags"
-        }
-      }
-    },
-    "ListVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "documentation" : "The token for the next set of results, or ''null'' if there are no additional results."
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionInformation",
-          "documentation" : "Information about a version."
-        }
-      },
-      "documentation" : "A list of versions."
-    },
-    "LocalDeviceResourceData" : {
-      "type" : "structure",
-      "members" : {
-        "GroupOwnerSetting" : {
-          "shape" : "GroupOwnerSetting",
-          "documentation" : "Group/owner related settings for local resources."
-        },
-        "SourcePath" : {
-          "shape" : "__string",
-          "documentation" : "The local absolute path of the device resource. The source path for a device resource can refer only to a character device or block device under ''/dev''."
-        }
-      },
-      "documentation" : "Attributes that define a local device resource."
-    },
-    "LocalVolumeResourceData" : {
-      "type" : "structure",
-      "members" : {
-        "DestinationPath" : {
-          "shape" : "__string",
-          "documentation" : "The absolute local path of the resource inside the Lambda environment."
-        },
-        "GroupOwnerSetting" : {
-          "shape" : "GroupOwnerSetting",
-          "documentation" : "Allows you to configure additional group privileges for the Lambda process. This field is optional."
-        },
-        "SourcePath" : {
-          "shape" : "__string",
-          "documentation" : "The local absolute path of the volume resource on the host. The source path for a volume resource type cannot start with ''/sys''."
-        }
-      },
-      "documentation" : "Attributes that define a local volume resource."
-    },
-    "Logger" : {
-      "type" : "structure",
-      "members" : {
-        "Component" : {
-          "shape" : "LoggerComponent",
-          "documentation" : "The component that will be subject to logging."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the logger. This value must be unique within the logger definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
-        },
-        "Level" : {
-          "shape" : "LoggerLevel",
-          "documentation" : "The level of the logs."
-        },
-        "Space" : {
-          "shape" : "__integer",
-          "documentation" : "The amount of file space, in KB, to use if the local file system is used for logging purposes."
-        },
-        "Type" : {
-          "shape" : "LoggerType",
-          "documentation" : "The type of log output which will be used."
-        }
-      },
-      "documentation" : "Information about a logger",
-      "required" : [ "Type", "Level", "Id", "Component" ]
-    },
-    "LoggerComponent" : {
-      "type" : "string",
-      "enum" : [ "GreengrassSystem", "Lambda" ]
-    },
-    "LoggerDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Loggers" : {
-          "shape" : "__listOfLogger",
-          "documentation" : "A list of loggers."
-        }
-      },
-      "documentation" : "Information about a logger definition version."
-    },
-    "LoggerLevel" : {
-      "type" : "string",
-      "enum" : [ "DEBUG", "INFO", "WARN", "ERROR", "FATAL" ]
-    },
-    "LoggerType" : {
-      "type" : "string",
-      "enum" : [ "FileSystem", "AWSCloudWatch" ]
-    },
-    "Permission" : {
-      "type" : "string",
-      "documentation" : "The type of permission a function has to access a resource.",
-      "enum" : [ "ro", "rw" ]
-    },
-    "ResetDeploymentsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "Force" : {
-          "shape" : "__boolean",
-          "documentation" : "If true, performs a best-effort only core reset."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "documentation" : "Information needed to reset deployments.",
-      "required" : [ "GroupId" ]
-    },
-    "ResetDeploymentsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "DeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the deployment."
-        },
-        "DeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the deployment."
-        }
-      }
-    },
-    "Resource" : {
-      "type" : "structure",
-      "members" : {
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The resource ID, used to refer to a resource in the Lambda function configuration. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''. This must be unique within a Greengrass group."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The descriptive resource name, which is displayed on the AWS IoT Greengrass console. Max length 128 characters with pattern ''[a-zA-Z0-9:_-]+''. This must be unique within a Greengrass group."
-        },
-        "ResourceDataContainer" : {
-          "shape" : "ResourceDataContainer",
-          "documentation" : "A container of data for all resource types."
-        }
-      },
-      "documentation" : "Information about a resource.",
-      "required" : [ "ResourceDataContainer", "Id", "Name" ]
-    },
-    "ResourceAccessPolicy" : {
-      "type" : "structure",
-      "members" : {
-        "Permission" : {
-          "shape" : "Permission",
-          "documentation" : "The permissions that the Lambda function has to the resource. Can be one of ''rw'' (read/write) or ''ro'' (read-only)."
-        },
-        "ResourceId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the resource. (This ID is assigned to the resource when you create the resource definiton.)"
-        }
-      },
-      "documentation" : "A policy used by the function to access a resource.",
-      "required" : [ "ResourceId" ]
-    },
-    "ResourceDataContainer" : {
-      "type" : "structure",
-      "members" : {
-        "LocalDeviceResourceData" : {
-          "shape" : "LocalDeviceResourceData",
-          "documentation" : "Attributes that define the local device resource."
-        },
-        "LocalVolumeResourceData" : {
-          "shape" : "LocalVolumeResourceData",
-          "documentation" : "Attributes that define the local volume resource."
-        },
-        "S3MachineLearningModelResourceData" : {
-          "shape" : "S3MachineLearningModelResourceData",
-          "documentation" : "Attributes that define an Amazon S3 machine learning resource."
-        },
-        "SageMakerMachineLearningModelResourceData" : {
-          "shape" : "SageMakerMachineLearningModelResourceData",
-          "documentation" : "Attributes that define an Amazon SageMaker machine learning resource."
-        },
-        "SecretsManagerSecretResourceData" : {
-          "shape" : "SecretsManagerSecretResourceData",
-          "documentation" : "Attributes that define a secret resource, which references a secret from AWS Secrets Manager."
-        }
-      },
-      "documentation" : "A container for resource data. The container takes only one of the following supported resource data types: ''LocalDeviceResourceData'', ''LocalVolumeResourceData'', ''SageMakerMachineLearningModelResourceData'', ''S3MachineLearningModelResourceData'', ''SecretsManagerSecretResourceData''."
-    },
-    "ResourceDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Resources" : {
-          "shape" : "__listOfResource",
-          "documentation" : "A list of resources."
-        }
-      },
-      "documentation" : "Information about a resource definition version."
-    },
-    "ResourceDownloadOwnerSetting" : {
-      "type" : "structure",
-      "members" : {
-        "GroupOwner" : {
-          "shape" : "__string",
-          "documentation" : "The group owner of the resource. This is the name of an existing Linux OS group on the system or a GID. The group's permissions are added to the Lambda process."
-        },
-        "GroupPermission" : {
-          "shape" : "Permission",
-          "documentation" : "The permissions that the group owner has to the resource. Valid values are ''rw'' (read/write) or ''ro'' (read-only)."
-        }
-      },
-      "documentation" : "The owner setting for downloaded machine learning resources.",
-      "required" : [ "GroupOwner", "GroupPermission" ]
-    },
-    "RuntimeConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "TelemetryConfiguration" : {
-          "shape" : "TelemetryConfiguration",
-          "documentation" : "Configuration for telemetry service."
-        }
-      },
-      "documentation" : "Runtime configuration for a thing."
-    },
-    "RuntimeConfigurationUpdate" : {
-      "type" : "structure",
-      "members" : {
-        "TelemetryConfiguration" : {
-          "shape" : "TelemetryConfigurationUpdate",
-          "documentation" : "Configuration for telemetry service."
-        }
-      },
-      "documentation" : "Runtime configuration for a thing."
-    },
-    "S3MachineLearningModelResourceData" : {
-      "type" : "structure",
-      "members" : {
-        "DestinationPath" : {
-          "shape" : "__string",
-          "documentation" : "The absolute local path of the resource inside the Lambda environment."
-        },
-        "OwnerSetting" : {
-          "shape" : "ResourceDownloadOwnerSetting"
-        },
-        "S3Uri" : {
-          "shape" : "__string",
-          "documentation" : "The URI of the source model in an S3 bucket. The model package must be in tar.gz or .zip format."
-        }
-      },
-      "documentation" : "Attributes that define an Amazon S3 machine learning resource."
-    },
-    "S3UrlSignerRole" : {
-      "type" : "string",
-      "documentation" : "The IAM Role that Greengrass will use to create pre-signed URLs pointing towards the update artifact."
-    },
-    "SageMakerMachineLearningModelResourceData" : {
-      "type" : "structure",
-      "members" : {
-        "DestinationPath" : {
-          "shape" : "__string",
-          "documentation" : "The absolute local path of the resource inside the Lambda environment."
-        },
-        "OwnerSetting" : {
-          "shape" : "ResourceDownloadOwnerSetting"
-        },
-        "SageMakerJobArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the Amazon SageMaker training job that represents the source model."
-        }
-      },
-      "documentation" : "Attributes that define an Amazon SageMaker machine learning resource."
-    },
-    "SecretsManagerSecretResourceData" : {
-      "type" : "structure",
-      "members" : {
-        "ARN" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the Secrets Manager secret to make available on the core. The value of the secret's latest version (represented by the ''AWSCURRENT'' staging label) is included by default."
-        },
-        "AdditionalStagingLabelsToDownload" : {
-          "shape" : "__listOf__string",
-          "documentation" : "Optional. The staging labels whose values you want to make available on the core, in addition to ''AWSCURRENT''."
-        }
-      },
-      "documentation" : "Attributes that define a secret resource, which references a secret from AWS Secrets Manager. AWS IoT Greengrass stores a local, encrypted copy of the secret on the Greengrass core, where it can be securely accessed by connectors and Lambda functions."
-    },
-    "SoftwareToUpdate" : {
-      "type" : "string",
-      "documentation" : "The piece of software on the Greengrass core that will be updated.",
-      "enum" : [ "core", "ota_agent" ]
-    },
-    "StartBulkDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "AmznClientToken" : {
-          "shape" : "__string",
-          "location" : "header",
-          "locationName" : "X-Amzn-Client-Token",
-          "documentation" : "A client token used to correlate requests and responses."
-        },
-        "ExecutionRoleArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the execution role to associate with the bulk deployment operation. This IAM role must allow the ''greengrass:CreateDeployment'' action for all group versions that are listed in the input file. This IAM role must have access to the S3 bucket containing the input file."
-        },
-        "InputFileUri" : {
-          "shape" : "__string",
-          "documentation" : "The URI of the input file contained in the S3 bucket. The execution role must have ''getObject'' permissions on this bucket to access the input file. The input file is a JSON-serialized, line delimited file with UTF-8 encoding that provides a list of group and version IDs and the deployment type. This file must be less than 100 MB. Currently, AWS IoT Greengrass supports only ''NewDeployment'' deployment types."
-        },
-        "tags" : {
-          "shape" : "Tags",
-          "documentation" : "Tag(s) to add to the new resource."
-        }
-      },
-      "required" : [ "ExecutionRoleArn", "InputFileUri" ]
-    },
-    "StartBulkDeploymentResponse" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentArn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the bulk deployment."
-        },
-        "BulkDeploymentId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the bulk deployment."
-        }
-      }
-    },
-    "StopBulkDeploymentRequest" : {
-      "type" : "structure",
-      "members" : {
-        "BulkDeploymentId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "BulkDeploymentId",
-          "documentation" : "The ID of the bulk deployment."
-        }
-      },
-      "required" : [ "BulkDeploymentId" ]
-    },
-    "StopBulkDeploymentResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "Subscription" : {
-      "type" : "structure",
-      "members" : {
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "A descriptive or arbitrary ID for the subscription. This value must be unique within the subscription definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
-        },
-        "Source" : {
-          "shape" : "__string",
-          "documentation" : "The source of the subscription. Can be a thing ARN, a Lambda function ARN, a connector ARN, 'cloud' (which represents the AWS IoT cloud), or 'GGShadowService'."
-        },
-        "Subject" : {
-          "shape" : "__string",
-          "documentation" : "The MQTT topic used to route the message."
-        },
-        "Target" : {
-          "shape" : "__string",
-          "documentation" : "Where the message is sent to. Can be a thing ARN, a Lambda function ARN, a connector ARN, 'cloud' (which represents the AWS IoT cloud), or 'GGShadowService'."
-        }
-      },
-      "documentation" : "Information about a subscription.",
-      "required" : [ "Target", "Id", "Subject", "Source" ]
-    },
-    "SubscriptionDefinitionVersion" : {
-      "type" : "structure",
-      "members" : {
-        "Subscriptions" : {
-          "shape" : "__listOfSubscription",
-          "documentation" : "A list of subscriptions."
-        }
-      },
-      "documentation" : "Information about a subscription definition version."
-    },
-    "TagResourceRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "The Amazon Resource Name (ARN) of the resource."
-        },
-        "tags" : {
-          "shape" : "Tags"
-        }
-      },
-      "documentation" : "A map of the key-value pairs for the resource tag.",
-      "required" : [ "ResourceArn" ]
-    },
-    "Tags" : {
-      "type" : "map",
-      "documentation" : "The key-value pair for the resource tag.",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "__string"
-      }
-    },
-    "Telemetry" : {
-      "type" : "string",
-      "enum" : [ "On", "Off" ]
-    },
-    "TelemetryConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSyncStatus" : {
-          "shape" : "ConfigurationSyncStatus",
-          "documentation" : "Synchronization status of the device reported configuration with the desired configuration."
-        },
-        "Telemetry" : {
-          "shape" : "Telemetry",
-          "documentation" : "Configure telemetry to be on or off."
-        }
-      },
-      "documentation" : "Configuration settings for running telemetry.",
-      "required" : [ "Telemetry" ]
-    },
-    "TelemetryConfigurationUpdate" : {
-      "type" : "structure",
-      "members" : {
-        "Telemetry" : {
-          "shape" : "Telemetry",
-          "documentation" : "Configure telemetry to be on or off."
-        }
-      },
-      "documentation" : "Configuration settings for running telemetry.",
-      "required" : [ "Telemetry" ]
-    },
-    "UntagResourceRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ResourceArn" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "resource-arn",
-          "documentation" : "The Amazon Resource Name (ARN) of the resource."
-        },
-        "TagKeys" : {
-          "shape" : "__listOf__string",
-          "location" : "querystring",
-          "locationName" : "tagKeys",
-          "documentation" : "An array of tag keys to delete"
-        }
-      },
-      "required" : [ "TagKeys", "ResourceArn" ]
-    },
-    "UpdateAgentLogLevel" : {
-      "type" : "string",
-      "documentation" : "The minimum level of log statements that should be logged by the OTA Agent during an update.",
-      "enum" : [ "NONE", "TRACE", "DEBUG", "VERBOSE", "INFO", "WARN", "ERROR", "FATAL" ]
-    },
-    "UpdateConnectivityInfoRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectivityInfo" : {
-          "shape" : "__listOfConnectivityInfo",
-          "documentation" : "A list of connectivity info."
-        },
-        "ThingName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ThingName",
-          "documentation" : "The thing name."
-        }
-      },
-      "documentation" : "Connectivity information.",
-      "required" : [ "ThingName" ]
-    },
-    "UpdateConnectivityInfoResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "A message about the connectivity info update request."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The new version of the connectivity info."
-        }
-      }
-    },
-    "UpdateConnectorDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConnectorDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConnectorDefinitionId",
-          "documentation" : "The ID of the connector definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "ConnectorDefinitionId" ]
-    },
-    "UpdateConnectorDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateCoreDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CoreDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "CoreDefinitionId",
-          "documentation" : "The ID of the core definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "CoreDefinitionId" ]
-    },
-    "UpdateCoreDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateDeviceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "DeviceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "DeviceDefinitionId",
-          "documentation" : "The ID of the device definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "DeviceDefinitionId" ]
-    },
-    "UpdateDeviceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateFunctionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "FunctionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "FunctionDefinitionId",
-          "documentation" : "The ID of the Lambda function definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "FunctionDefinitionId" ]
-    },
-    "UpdateFunctionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateGroupCertificateConfigurationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate expires, in milliseconds."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "UpdateGroupCertificateConfigurationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "CertificateAuthorityExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate authority expires, in milliseconds."
-        },
-        "CertificateExpiryInMilliseconds" : {
-          "shape" : "__string",
-          "documentation" : "The amount of time remaining before the certificate expires, in milliseconds."
-        },
-        "GroupId" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the group certificate configuration."
-        }
-      }
-    },
-    "UpdateGroupRequest" : {
-      "type" : "structure",
-      "members" : {
-        "GroupId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "GroupId",
-          "documentation" : "The ID of the Greengrass group."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "GroupId" ]
-    },
-    "UpdateGroupResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateLoggerDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "LoggerDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "LoggerDefinitionId",
-          "documentation" : "The ID of the logger definition."
-        },
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        }
-      },
-      "required" : [ "LoggerDefinitionId" ]
-    },
-    "UpdateLoggerDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateResourceDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "ResourceDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ResourceDefinitionId",
-          "documentation" : "The ID of the resource definition."
-        }
-      },
-      "required" : [ "ResourceDefinitionId" ]
-    },
-    "UpdateResourceDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateSubscriptionDefinitionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "__string",
-          "documentation" : "The name of the definition."
-        },
-        "SubscriptionDefinitionId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "SubscriptionDefinitionId",
-          "documentation" : "The ID of the subscription definition."
-        }
-      },
-      "required" : [ "SubscriptionDefinitionId" ]
-    },
-    "UpdateSubscriptionDefinitionResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "UpdateTargets" : {
-      "type" : "list",
-      "documentation" : "The ARNs of the targets (IoT things or IoT thing groups) that this update will be applied to.",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "UpdateTargetsArchitecture" : {
-      "type" : "string",
-      "documentation" : "The architecture of the cores which are the targets of an update.",
-      "enum" : [ "armv6l", "armv7l", "x86_64", "aarch64" ]
-    },
-    "UpdateTargetsOperatingSystem" : {
-      "type" : "string",
-      "documentation" : "The operating system of the cores which are the targets of an update.",
-      "enum" : [ "ubuntu", "raspbian", "amazon_linux", "openwrt" ]
-    },
-    "UpdateThingRuntimeConfigurationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "TelemetryConfiguration" : {
-          "shape" : "TelemetryConfigurationUpdate",
-          "documentation" : "Configuration for telemetry service."
-        },
-        "ThingName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ThingName",
-          "documentation" : "The thing name."
-        }
-      },
-      "required" : [ "ThingName" ]
-    },
-    "UpdateThingRuntimeConfigurationResponse" : {
-      "type" : "structure",
-      "members" : { }
-    },
-    "VersionInformation" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "documentation" : "The ARN of the version."
-        },
-        "CreationTimestamp" : {
-          "shape" : "__string",
-          "documentation" : "The time, in milliseconds since the epoch, when the version was created."
-        },
-        "Id" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the parent definition that the version is associated with."
-        },
-        "Version" : {
-          "shape" : "__string",
-          "documentation" : "The ID of the version."
-        }
-      },
-      "documentation" : "Information about a version."
-    },
-    "__boolean" : {
-      "type" : "boolean"
-    },
-    "__double" : {
-      "type" : "double"
-    },
-    "__integer" : {
-      "type" : "integer"
-    },
-    "__listOfConnectivityInfo" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ConnectivityInfo"
-      }
-    },
-    "__listOfConnector" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Connector"
-      }
-    },
-    "__listOfCore" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Core"
-      }
-    },
-    "__listOfDefinitionInformation" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "DefinitionInformation"
-      }
-    },
-    "__listOfDevice" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Device"
-      }
-    },
-    "__listOfFunction" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Function"
-      }
-    },
-    "__listOfGroupCertificateAuthorityProperties" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "GroupCertificateAuthorityProperties"
-      }
-    },
-    "__listOfGroupInformation" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "GroupInformation"
-      }
-    },
-    "__listOfLogger" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Logger"
-      }
-    },
-    "__listOfResource" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Resource"
-      }
-    },
-    "__listOfResourceAccessPolicy" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ResourceAccessPolicy"
-      }
-    },
-    "__listOfSubscription" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Subscription"
-      }
-    },
-    "__listOfVersionInformation" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "VersionInformation"
-      }
-    },
-    "__listOf__string" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "__string"
-      }
-    },
-    "__long" : {
-      "type" : "long"
-    },
-    "__mapOf__string" : {
-      "type" : "map",
-      "key" : {
-        "shape" : "__string"
-      },
-      "value" : {
-        "shape" : "__string"
-      }
-    },
-    "__string" : {
-      "type" : "string"
-    },
-    "__timestampIso8601" : {
-      "type" : "timestamp",
-      "timestampFormat" : "iso8601"
-    },
-    "__timestampUnix" : {
-      "type" : "timestamp",
-      "timestampFormat" : "unixTimestamp"
+  "shapes": {
+    "AssociateRoleToGroupRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "RoleArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the role you wish to associate with this group. The existence of the role is not validated."
+        }
+      },
+      "required": [
+        "GroupId",
+        "RoleArn"
+      ]
+    },
+    "AssociateRoleToGroupResponse": {
+      "type": "structure",
+      "members": {
+        "AssociatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the role ARN was associated with the group."
+        }
+      }
+    },
+    "AssociateServiceRoleToAccountRequest": {
+      "type": "structure",
+      "members": {
+        "RoleArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the service role you wish to associate with your account."
+        }
+      },
+      "required": [
+        "RoleArn"
+      ]
+    },
+    "AssociateServiceRoleToAccountResponse": {
+      "type": "structure",
+      "members": {
+        "AssociatedAt": {
+          "shape": "__string",
+          "documentation": "The time when the service role was associated with the account."
+        }
+      }
+    },
+    "BadRequestException": {
+      "type": "structure",
+      "members": {
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Details about the error."
+        },
+        "Message": {
+          "shape": "__string",
+          "documentation": "A message containing information about the error."
+        }
+      },
+      "documentation": "General error information.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 400
+      }
+    },
+    "BulkDeployment": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the bulk deployment."
+        },
+        "BulkDeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the bulk deployment."
+        },
+        "CreatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in ISO format, when the deployment was created."
+        }
+      },
+      "documentation": "Information about a bulk deployment. You cannot start a new bulk deployment while another one is still running or in a non-terminal state."
+    },
+    "BulkDeploymentMetrics": {
+      "type": "structure",
+      "members": {
+        "InvalidInputRecords": {
+          "shape": "__integer",
+          "documentation": "The total number of records that returned a non-retryable error. For example, this can occur if a group record from the input file uses an invalid format or specifies a nonexistent group version, or if the execution role doesn't grant permission to deploy a group or group version."
+        },
+        "RecordsProcessed": {
+          "shape": "__integer",
+          "documentation": "The total number of group records from the input file that have been processed so far, or attempted."
+        },
+        "RetryAttempts": {
+          "shape": "__integer",
+          "documentation": "The total number of deployment attempts that returned a retryable error. For example, a retry is triggered if the attempt to deploy a group returns a throttling error. ''StartBulkDeployment'' retries a group deployment up to five times."
+        }
+      },
+      "documentation": "Relevant metrics on input records processed during bulk deployment."
+    },
+    "BulkDeploymentResult": {
+      "type": "structure",
+      "members": {
+        "CreatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in ISO format, when the deployment was created."
+        },
+        "DeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the group deployment."
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the group deployment."
+        },
+        "DeploymentStatus": {
+          "shape": "__string",
+          "documentation": "The current status of the group deployment: ''InProgress'', ''Building'', ''Success'', or ''Failure''."
+        },
+        "DeploymentType": {
+          "shape": "DeploymentType",
+          "documentation": "The type of the deployment."
+        },
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Details about the error."
+        },
+        "ErrorMessage": {
+          "shape": "__string",
+          "documentation": "The error message for a failed deployment"
+        },
+        "GroupArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the Greengrass group."
+        }
+      },
+      "documentation": "Information about an individual group deployment in a bulk deployment operation."
+    },
+    "BulkDeploymentResults": {
+      "type": "list",
+      "member": {
+        "shape": "BulkDeploymentResult"
+      }
+    },
+    "BulkDeploymentStatus": {
+      "type": "string",
+      "documentation": "The current status of the bulk deployment.",
+      "enum": [
+        "Initializing",
+        "Running",
+        "Completed",
+        "Stopping",
+        "Stopped",
+        "Failed"
+      ]
+    },
+    "BulkDeployments": {
+      "type": "list",
+      "member": {
+        "shape": "BulkDeployment"
+      }
+    },
+    "ConfigurationSyncStatus": {
+      "type": "string",
+      "enum": [
+        "InSync",
+        "OutOfSync"
+      ]
+    },
+    "ConnectivityInfo": {
+      "type": "structure",
+      "members": {
+        "HostAddress": {
+          "shape": "__string",
+          "documentation": "The endpoint for the Greengrass core. Can be an IP address or DNS."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the connectivity information."
+        },
+        "Metadata": {
+          "shape": "__string",
+          "documentation": "Metadata for this endpoint."
+        },
+        "PortNumber": {
+          "shape": "__integer",
+          "documentation": "The port of the Greengrass core. Usually 8883."
+        }
+      },
+      "documentation": "Information about a Greengrass core's connectivity."
+    },
+    "Connector": {
+      "type": "structure",
+      "members": {
+        "ConnectorArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the connector."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the connector. This value must be unique within the connector definition version. Max length is 128 characters with pattern [a-zA-Z0-9:_-]+."
+        },
+        "Parameters": {
+          "shape": "__mapOf__string",
+          "documentation": "The parameters or configuration that the connector uses."
+        }
+      },
+      "documentation": "Information about a connector. Connectors run on the Greengrass core and contain built-in integration with local infrastructure, device protocols, AWS, and other cloud services.",
+      "required": [
+        "ConnectorArn",
+        "Id"
+      ]
+    },
+    "ConnectorDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Connectors": {
+          "shape": "__listOfConnector",
+          "documentation": "A list of references to connectors in this version, with their corresponding configuration settings."
+        }
+      },
+      "documentation": "Information about the connector definition version, which is a container for connectors."
+    },
+    "Core": {
+      "type": "structure",
+      "members": {
+        "CertificateArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the certificate associated with the core."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the core. This value must be unique within the core definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
+        },
+        "SyncShadow": {
+          "shape": "__boolean",
+          "documentation": "If true, the core's local shadow is automatically synced with the cloud."
+        },
+        "ThingArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the thing which is the core."
+        }
+      },
+      "documentation": "Information about a core.",
+      "required": [
+        "ThingArn",
+        "Id",
+        "CertificateArn"
+      ]
+    },
+    "CoreDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Cores": {
+          "shape": "__listOfCore",
+          "documentation": "A list of cores in the core definition version."
+        }
+      },
+      "documentation": "Information about a core definition version."
+    },
+    "CreateConnectorDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "ConnectorDefinitionVersion",
+          "documentation": "Information about the initial version of the connector definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the connector definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateConnectorDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateConnectorDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        },
+        "Connectors": {
+          "shape": "__listOfConnector",
+          "documentation": "A list of references to connectors in this version, with their corresponding configuration settings."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId"
+      ]
+    },
+    "CreateConnectorDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateCoreDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "CoreDefinitionVersion",
+          "documentation": "Information about the initial version of the core definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the core definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      },
+      "documentation": "Information needed to create a core definition."
+    },
+    "CreateCoreDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateCoreDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        },
+        "Cores": {
+          "shape": "__listOfCore",
+          "documentation": "A list of cores in the core definition version."
+        }
+      },
+      "required": [
+        "CoreDefinitionId"
+      ]
+    },
+    "CreateCoreDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the deployment if you wish to redeploy a previous deployment."
+        },
+        "DeploymentType": {
+          "shape": "DeploymentType",
+          "documentation": "The type of deployment. When used for ''CreateDeployment'', only ''NewDeployment'' and ''Redeployment'' are valid."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "GroupVersionId": {
+          "shape": "__string",
+          "documentation": "The ID of the group version to be deployed."
+        }
+      },
+      "required": [
+        "GroupId",
+        "DeploymentType"
+      ]
+    },
+    "CreateDeploymentResponse": {
+      "type": "structure",
+      "members": {
+        "DeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the deployment."
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the deployment."
+        }
+      }
+    },
+    "CreateDeviceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "DeviceDefinitionVersion",
+          "documentation": "Information about the initial version of the device definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the device definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateDeviceDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateDeviceDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        },
+        "Devices": {
+          "shape": "__listOfDevice",
+          "documentation": "A list of devices in the definition version."
+        }
+      },
+      "required": [
+        "DeviceDefinitionId"
+      ]
+    },
+    "CreateDeviceDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateFunctionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "FunctionDefinitionVersion",
+          "documentation": "Information about the initial version of the function definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the function definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateFunctionDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateFunctionDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "DefaultConfig": {
+          "shape": "FunctionDefaultConfig",
+          "documentation": "The default configuration that applies to all Lambda functions in this function definition version. Individual Lambda functions can override these settings."
+        },
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        },
+        "Functions": {
+          "shape": "__listOfFunction",
+          "documentation": "A list of Lambda functions in this function definition version."
+        }
+      },
+      "documentation": "Information needed to create a function definition version.",
+      "required": [
+        "FunctionDefinitionId"
+      ]
+    },
+    "CreateFunctionDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateGroupCertificateAuthorityRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "CreateGroupCertificateAuthorityResponse": {
+      "type": "structure",
+      "members": {
+        "GroupCertificateAuthorityArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the group certificate authority."
+        }
+      }
+    },
+    "CreateGroupRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "GroupVersion",
+          "documentation": "Information about the initial version of the group."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the group."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      },
+      "required": [
+        "Name"
+      ]
+    },
+    "CreateGroupResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateGroupVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "ConnectorDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the connector definition version for this group."
+        },
+        "CoreDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the core definition version for this group."
+        },
+        "DeviceDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the device definition version for this group."
+        },
+        "FunctionDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the function definition version for this group."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "LoggerDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the logger definition version for this group."
+        },
+        "ResourceDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the resource definition version for this group."
+        },
+        "SubscriptionDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the subscription definition version for this group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "CreateGroupVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateLoggerDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "LoggerDefinitionVersion",
+          "documentation": "Information about the initial version of the logger definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the logger definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateLoggerDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateLoggerDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        },
+        "Loggers": {
+          "shape": "__listOfLogger",
+          "documentation": "A list of loggers."
+        }
+      },
+      "required": [
+        "LoggerDefinitionId"
+      ]
+    },
+    "CreateLoggerDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateResourceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "ResourceDefinitionVersion",
+          "documentation": "Information about the initial version of the resource definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the resource definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateResourceDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateResourceDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        },
+        "Resources": {
+          "shape": "__listOfResource",
+          "documentation": "A list of resources."
+        }
+      },
+      "required": [
+        "ResourceDefinitionId"
+      ]
+    },
+    "CreateResourceDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "CreateSoftwareUpdateJobRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "S3UrlSignerRole": {
+          "shape": "S3UrlSignerRole"
+        },
+        "SoftwareToUpdate": {
+          "shape": "SoftwareToUpdate"
+        },
+        "UpdateAgentLogLevel": {
+          "shape": "UpdateAgentLogLevel"
+        },
+        "UpdateTargets": {
+          "shape": "UpdateTargets"
+        },
+        "UpdateTargetsArchitecture": {
+          "shape": "UpdateTargetsArchitecture"
+        },
+        "UpdateTargetsOperatingSystem": {
+          "shape": "UpdateTargetsOperatingSystem"
+        }
+      },
+      "required": [
+        "S3UrlSignerRole",
+        "UpdateTargetsArchitecture",
+        "SoftwareToUpdate",
+        "UpdateTargets",
+        "UpdateTargetsOperatingSystem"
+      ]
+    },
+    "CreateSoftwareUpdateJobResponse": {
+      "type": "structure",
+      "members": {
+        "IotJobArn": {
+          "shape": "__string",
+          "documentation": "The IoT Job ARN corresponding to this update."
+        },
+        "IotJobId": {
+          "shape": "__string",
+          "documentation": "The IoT Job Id corresponding to this update."
+        },
+        "PlatformSoftwareVersion": {
+          "shape": "__string",
+          "documentation": "The software version installed on the device or devices after the update."
+        }
+      }
+    },
+    "CreateSubscriptionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "InitialVersion": {
+          "shape": "SubscriptionDefinitionVersion",
+          "documentation": "Information about the initial version of the subscription definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the subscription definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      }
+    },
+    "CreateSubscriptionDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      }
+    },
+    "CreateSubscriptionDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        },
+        "Subscriptions": {
+          "shape": "__listOfSubscription",
+          "documentation": "A list of subscriptions."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId"
+      ]
+    },
+    "CreateSubscriptionDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      }
+    },
+    "DefinitionInformation": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      },
+      "documentation": "Information about a definition."
+    },
+    "DeleteConnectorDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId"
+      ]
+    },
+    "DeleteConnectorDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteCoreDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        }
+      },
+      "required": [
+        "CoreDefinitionId"
+      ]
+    },
+    "DeleteCoreDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteDeviceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        }
+      },
+      "required": [
+        "DeviceDefinitionId"
+      ]
+    },
+    "DeleteDeviceDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteFunctionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        }
+      },
+      "required": [
+        "FunctionDefinitionId"
+      ]
+    },
+    "DeleteFunctionDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteGroupRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "DeleteGroupResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteLoggerDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        }
+      },
+      "required": [
+        "LoggerDefinitionId"
+      ]
+    },
+    "DeleteLoggerDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteResourceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        }
+      },
+      "required": [
+        "ResourceDefinitionId"
+      ]
+    },
+    "DeleteResourceDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "DeleteSubscriptionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId"
+      ]
+    },
+    "DeleteSubscriptionDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "Deployment": {
+      "type": "structure",
+      "members": {
+        "CreatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the deployment was created."
+        },
+        "DeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the deployment."
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the deployment."
+        },
+        "DeploymentType": {
+          "shape": "DeploymentType",
+          "documentation": "The type of the deployment."
+        },
+        "GroupArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the group for this deployment."
+        }
+      },
+      "documentation": "Information about a deployment."
+    },
+    "DeploymentType": {
+      "type": "string",
+      "documentation": "The type of deployment. When used for ''CreateDeployment'', only ''NewDeployment'' and ''Redeployment'' are valid.",
+      "enum": [
+        "NewDeployment",
+        "Redeployment",
+        "ResetDeployment",
+        "ForceResetDeployment"
+      ]
+    },
+    "Deployments": {
+      "type": "list",
+      "member": {
+        "shape": "Deployment"
+      }
+    },
+    "Device": {
+      "type": "structure",
+      "members": {
+        "CertificateArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the certificate associated with the device."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the device. This value must be unique within the device definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
+        },
+        "SyncShadow": {
+          "shape": "__boolean",
+          "documentation": "If true, the device's local shadow will be automatically synced with the cloud."
+        },
+        "ThingArn": {
+          "shape": "__string",
+          "documentation": "The thing ARN of the device."
+        }
+      },
+      "documentation": "Information about a device.",
+      "required": [
+        "ThingArn",
+        "Id",
+        "CertificateArn"
+      ]
+    },
+    "DeviceDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Devices": {
+          "shape": "__listOfDevice",
+          "documentation": "A list of devices in the definition version."
+        }
+      },
+      "documentation": "Information about a device definition version."
+    },
+    "DisassociateRoleFromGroupRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "DisassociateRoleFromGroupResponse": {
+      "type": "structure",
+      "members": {
+        "DisassociatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the role was disassociated from the group."
+        }
+      }
+    },
+    "DisassociateServiceRoleFromAccountRequest": {
+      "type": "structure",
+      "members": {}
+    },
+    "DisassociateServiceRoleFromAccountResponse": {
+      "type": "structure",
+      "members": {
+        "DisassociatedAt": {
+          "shape": "__string",
+          "documentation": "The time when the service role was disassociated from the account."
+        }
+      }
+    },
+    "Empty": {
+      "type": "structure",
+      "members": {},
+      "documentation": "Empty"
+    },
+    "EncodingType": {
+      "type": "string",
+      "enum": [
+        "binary",
+        "json"
+      ]
+    },
+    "ErrorDetail": {
+      "type": "structure",
+      "members": {
+        "DetailedErrorCode": {
+          "shape": "__string",
+          "documentation": "A detailed error code."
+        },
+        "DetailedErrorMessage": {
+          "shape": "__string",
+          "documentation": "A detailed error message."
+        }
+      },
+      "documentation": "Details about the error."
+    },
+    "ErrorDetails": {
+      "type": "list",
+      "documentation": "A list of error details.",
+      "member": {
+        "shape": "ErrorDetail"
+      }
+    },
+    "Function": {
+      "type": "structure",
+      "members": {
+        "FunctionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the Lambda function."
+        },
+        "FunctionConfiguration": {
+          "shape": "FunctionConfiguration",
+          "documentation": "The configuration of the Lambda function."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the function. This value must be unique within the function definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
+        }
+      },
+      "documentation": "Information about a Lambda function.",
+      "required": [
+        "Id"
+      ]
+    },
+    "FunctionConfiguration": {
+      "type": "structure",
+      "members": {
+        "EncodingType": {
+          "shape": "EncodingType",
+          "documentation": "The expected encoding type of the input payload for the function. The default is ''json''."
+        },
+        "Environment": {
+          "shape": "FunctionConfigurationEnvironment",
+          "documentation": "The environment configuration of the function."
+        },
+        "ExecArgs": {
+          "shape": "__string",
+          "documentation": "The execution arguments."
+        },
+        "Executable": {
+          "shape": "__string",
+          "documentation": "The name of the function executable."
+        },
+        "MemorySize": {
+          "shape": "__integer",
+          "documentation": "The memory size, in KB, which the function requires. This setting is not applicable and should be cleared when you run the Lambda function without containerization."
+        },
+        "Pinned": {
+          "shape": "__boolean",
+          "documentation": "True if the function is pinned. Pinned means the function is long-lived and starts when the core starts."
+        },
+        "Timeout": {
+          "shape": "__integer",
+          "documentation": "The allowed function execution time, after which Lambda should terminate the function. This timeout still applies to pinned Lambda functions for each request."
+        },
+        "FunctionRuntimeOverride": {
+          "shape": "__string",
+          "documentation": "The Lambda runtime supported by Greengrass which is to be used instead of the one specified in the Lambda function."
+        }
+      },
+      "documentation": "The configuration of the Lambda function."
+    },
+    "FunctionConfigurationEnvironment": {
+      "type": "structure",
+      "members": {
+        "AccessSysfs": {
+          "shape": "__boolean",
+          "documentation": "If true, the Lambda function is allowed to access the host's /sys folder. Use this when the Lambda function needs to read device information from /sys. This setting applies only when you run the Lambda function in a Greengrass container."
+        },
+        "Execution": {
+          "shape": "FunctionExecutionConfig",
+          "documentation": "Configuration related to executing the Lambda function"
+        },
+        "ResourceAccessPolicies": {
+          "shape": "__listOfResourceAccessPolicy",
+          "documentation": "A list of the resources, with their permissions, to which the Lambda function will be granted access. A Lambda function can have at most 10 resources. ResourceAccessPolicies apply only when you run the Lambda function in a Greengrass container."
+        },
+        "Variables": {
+          "shape": "__mapOf__string",
+          "documentation": "Environment variables for the Lambda function's configuration."
+        }
+      },
+      "documentation": "The environment configuration of the function."
+    },
+    "FunctionDefaultConfig": {
+      "type": "structure",
+      "members": {
+        "Execution": {
+          "shape": "FunctionDefaultExecutionConfig"
+        }
+      },
+      "documentation": "The default configuration that applies to all Lambda functions in the group. Individual Lambda functions can override these settings."
+    },
+    "FunctionDefaultExecutionConfig": {
+      "type": "structure",
+      "members": {
+        "IsolationMode": {
+          "shape": "FunctionIsolationMode"
+        },
+        "RunAs": {
+          "shape": "FunctionRunAsConfig"
+        }
+      },
+      "documentation": "Configuration information that specifies how a Lambda function runs. "
+    },
+    "FunctionDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "DefaultConfig": {
+          "shape": "FunctionDefaultConfig",
+          "documentation": "The default configuration that applies to all Lambda functions in this function definition version. Individual Lambda functions can override these settings."
+        },
+        "Functions": {
+          "shape": "__listOfFunction",
+          "documentation": "A list of Lambda functions in this function definition version."
+        }
+      },
+      "documentation": "Information about a function definition version."
+    },
+    "FunctionExecutionConfig": {
+      "type": "structure",
+      "members": {
+        "IsolationMode": {
+          "shape": "FunctionIsolationMode"
+        },
+        "RunAs": {
+          "shape": "FunctionRunAsConfig"
+        }
+      },
+      "documentation": "Configuration information that specifies how a Lambda function runs. "
+    },
+    "FunctionIsolationMode": {
+      "type": "string",
+      "documentation": "Specifies whether the Lambda function runs in a Greengrass container (default) or without containerization. Unless your scenario requires that you run without containerization, we recommend that you run in a Greengrass container. Omit this value to run the Lambda function with the default containerization for the group.",
+      "enum": [
+        "GreengrassContainer",
+        "NoContainer"
+      ]
+    },
+    "FunctionRunAsConfig": {
+      "type": "structure",
+      "members": {
+        "Gid": {
+          "shape": "__integer",
+          "documentation": "The group ID whose permissions are used to run a Lambda function."
+        },
+        "Uid": {
+          "shape": "__integer",
+          "documentation": "The user ID whose permissions are used to run a Lambda function."
+        }
+      },
+      "documentation": "Specifies the user and group whose permissions are used when running the Lambda function. You can specify one or both values to override the default values. We recommend that you avoid running as root unless absolutely necessary to minimize the risk of unintended changes or malicious attacks. To run as root, you must set ''IsolationMode'' to ''NoContainer'' and update config.json in ''greengrass-root/config'' to set ''allowFunctionsToRunAsRoot'' to ''yes''."
+    },
+    "GeneralError": {
+      "type": "structure",
+      "members": {
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Details about the error."
+        },
+        "Message": {
+          "shape": "__string",
+          "documentation": "A message containing information about the error."
+        }
+      },
+      "documentation": "General error information."
+    },
+    "GetAssociatedRoleRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "GetAssociatedRoleResponse": {
+      "type": "structure",
+      "members": {
+        "AssociatedAt": {
+          "shape": "__string",
+          "documentation": "The time when the role was associated with the group."
+        },
+        "RoleArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the role that is associated with the group."
+        }
+      }
+    },
+    "GetBulkDeploymentStatusRequest": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "BulkDeploymentId",
+          "documentation": "The ID of the bulk deployment."
+        }
+      },
+      "required": [
+        "BulkDeploymentId"
+      ]
+    },
+    "GetBulkDeploymentStatusResponse": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentMetrics": {
+          "shape": "BulkDeploymentMetrics",
+          "documentation": "Relevant metrics on input records processed during bulk deployment."
+        },
+        "BulkDeploymentStatus": {
+          "shape": "BulkDeploymentStatus",
+          "documentation": "The status of the bulk deployment."
+        },
+        "CreatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in ISO format, when the deployment was created."
+        },
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Error details"
+        },
+        "ErrorMessage": {
+          "shape": "__string",
+          "documentation": "Error message"
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetConnectivityInfoRequest": {
+      "type": "structure",
+      "members": {
+        "ThingName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ThingName",
+          "documentation": "The thing name."
+        }
+      },
+      "required": [
+        "ThingName"
+      ]
+    },
+    "GetConnectivityInfoResponse": {
+      "type": "structure",
+      "members": {
+        "ConnectivityInfo": {
+          "shape": "__listOfConnectivityInfo",
+          "documentation": "Connectivity info list."
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "A message about the connectivity info request."
+        }
+      }
+    },
+    "GetConnectorDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId"
+      ]
+    },
+    "GetConnectorDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetConnectorDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        },
+        "ConnectorDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionVersionId",
+          "documentation": "The ID of the connector definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListConnectorDefinitionVersions'' requests. If the version is the last one that was associated with a connector definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId",
+        "ConnectorDefinitionVersionId"
+      ]
+    },
+    "GetConnectorDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the connector definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the connector definition version was created."
+        },
+        "Definition": {
+          "shape": "ConnectorDefinitionVersion",
+          "documentation": "Information about the connector definition version."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the connector definition version."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the connector definition version."
+        }
+      }
+    },
+    "GetCoreDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        }
+      },
+      "required": [
+        "CoreDefinitionId"
+      ]
+    },
+    "GetCoreDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetCoreDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        },
+        "CoreDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionVersionId",
+          "documentation": "The ID of the core definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListCoreDefinitionVersions'' requests. If the version is the last one that was associated with a core definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        }
+      },
+      "required": [
+        "CoreDefinitionId",
+        "CoreDefinitionVersionId"
+      ]
+    },
+    "GetCoreDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the core definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the core definition version was created."
+        },
+        "Definition": {
+          "shape": "CoreDefinitionVersion",
+          "documentation": "Information about the core definition version."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the core definition version."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the core definition version."
+        }
+      }
+    },
+    "GetDeploymentStatusRequest": {
+      "type": "structure",
+      "members": {
+        "DeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeploymentId",
+          "documentation": "The ID of the deployment."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId",
+        "DeploymentId"
+      ]
+    },
+    "GetDeploymentStatusResponse": {
+      "type": "structure",
+      "members": {
+        "DeploymentStatus": {
+          "shape": "__string",
+          "documentation": "The status of the deployment: ''InProgress'', ''Building'', ''Success'', or ''Failure''."
+        },
+        "DeploymentType": {
+          "shape": "DeploymentType",
+          "documentation": "The type of the deployment."
+        },
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Error details"
+        },
+        "ErrorMessage": {
+          "shape": "__string",
+          "documentation": "Error message"
+        },
+        "UpdatedAt": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the deployment status was updated."
+        }
+      }
+    },
+    "GetDeviceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        }
+      },
+      "required": [
+        "DeviceDefinitionId"
+      ]
+    },
+    "GetDeviceDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetDeviceDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        },
+        "DeviceDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionVersionId",
+          "documentation": "The ID of the device definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListDeviceDefinitionVersions'' requests. If the version is the last one that was associated with a device definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "DeviceDefinitionVersionId",
+        "DeviceDefinitionId"
+      ]
+    },
+    "GetDeviceDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the device definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the device definition version was created."
+        },
+        "Definition": {
+          "shape": "DeviceDefinitionVersion",
+          "documentation": "Information about the device definition version."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the device definition version."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the device definition version."
+        }
+      }
+    },
+    "GetFunctionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        }
+      },
+      "required": [
+        "FunctionDefinitionId"
+      ]
+    },
+    "GetFunctionDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetFunctionDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        },
+        "FunctionDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionVersionId",
+          "documentation": "The ID of the function definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListFunctionDefinitionVersions'' requests. If the version is the last one that was associated with a function definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "FunctionDefinitionId",
+        "FunctionDefinitionVersionId"
+      ]
+    },
+    "GetFunctionDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the function definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the function definition version was created."
+        },
+        "Definition": {
+          "shape": "FunctionDefinitionVersion",
+          "documentation": "Information on the definition."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the function definition version."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the function definition version."
+        }
+      }
+    },
+    "GetGroupCertificateAuthorityRequest": {
+      "type": "structure",
+      "members": {
+        "CertificateAuthorityId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CertificateAuthorityId",
+          "documentation": "The ID of the certificate authority."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "CertificateAuthorityId",
+        "GroupId"
+      ]
+    },
+    "GetGroupCertificateAuthorityResponse": {
+      "type": "structure",
+      "members": {
+        "GroupCertificateAuthorityArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the certificate authority for the group."
+        },
+        "GroupCertificateAuthorityId": {
+          "shape": "__string",
+          "documentation": "The ID of the certificate authority for the group."
+        },
+        "PemEncodedCertificate": {
+          "shape": "__string",
+          "documentation": "The PEM encoded certificate for the group."
+        }
+      }
+    },
+    "GetGroupCertificateConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "GetGroupCertificateConfigurationResponse": {
+      "type": "structure",
+      "members": {
+        "CertificateAuthorityExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate authority expires, in milliseconds."
+        },
+        "CertificateExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate expires, in milliseconds."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "documentation": "The ID of the group certificate configuration."
+        }
+      }
+    },
+    "GetGroupRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "GetGroupResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetGroupVersionRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "GroupVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupVersionId",
+          "documentation": "The ID of the group version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListGroupVersions'' requests. If the version is the last one that was associated with a group, the value also maps to the ''LatestVersion'' property of the corresponding ''GroupInformation'' object."
+        }
+      },
+      "required": [
+        "GroupVersionId",
+        "GroupId"
+      ]
+    },
+    "GetGroupVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the group version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the group version was created."
+        },
+        "Definition": {
+          "shape": "GroupVersion",
+          "documentation": "Information about the group version definition."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the group that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the group version."
+        }
+      }
+    },
+    "GetLoggerDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        }
+      },
+      "required": [
+        "LoggerDefinitionId"
+      ]
+    },
+    "GetLoggerDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetLoggerDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        },
+        "LoggerDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionVersionId",
+          "documentation": "The ID of the logger definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListLoggerDefinitionVersions'' requests. If the version is the last one that was associated with a logger definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "LoggerDefinitionVersionId",
+        "LoggerDefinitionId"
+      ]
+    },
+    "GetLoggerDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the logger definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the logger definition version was created."
+        },
+        "Definition": {
+          "shape": "LoggerDefinitionVersion",
+          "documentation": "Information about the logger definition version."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the logger definition version."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the logger definition version."
+        }
+      }
+    },
+    "GetResourceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        }
+      },
+      "required": [
+        "ResourceDefinitionId"
+      ]
+    },
+    "GetResourceDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetResourceDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        },
+        "ResourceDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionVersionId",
+          "documentation": "The ID of the resource definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListResourceDefinitionVersions'' requests. If the version is the last one that was associated with a resource definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        }
+      },
+      "required": [
+        "ResourceDefinitionVersionId",
+        "ResourceDefinitionId"
+      ]
+    },
+    "GetResourceDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "Arn of the resource definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the resource definition version was created."
+        },
+        "Definition": {
+          "shape": "ResourceDefinitionVersion",
+          "documentation": "Information about the definition."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the resource definition version."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the resource definition version."
+        }
+      }
+    },
+    "GetServiceRoleForAccountRequest": {
+      "type": "structure",
+      "members": {}
+    },
+    "GetServiceRoleForAccountResponse": {
+      "type": "structure",
+      "members": {
+        "AssociatedAt": {
+          "shape": "__string",
+          "documentation": "The time when the service role was associated with the account."
+        },
+        "RoleArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the role which is associated with the account."
+        }
+      }
+    },
+    "GetSubscriptionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId"
+      ]
+    },
+    "GetSubscriptionDefinitionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the definition."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the definition."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the definition was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the definition."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) attached to the resource arn."
+        }
+      }
+    },
+    "GetSubscriptionDefinitionVersionRequest": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        },
+        "SubscriptionDefinitionVersionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionVersionId",
+          "documentation": "The ID of the subscription definition version. This value maps to the ''Version'' property of the corresponding ''VersionInformation'' object, which is returned by ''ListSubscriptionDefinitionVersions'' requests. If the version is the last one that was associated with a subscription definition, the value also maps to the ''LatestVersion'' property of the corresponding ''DefinitionInformation'' object."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId",
+        "SubscriptionDefinitionVersionId"
+      ]
+    },
+    "GetSubscriptionDefinitionVersionResponse": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the subscription definition version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the subscription definition version was created."
+        },
+        "Definition": {
+          "shape": "SubscriptionDefinitionVersion",
+          "documentation": "Information about the subscription definition version."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the subscription definition version."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The version of the subscription definition version."
+        }
+      }
+    },
+    "GetThingRuntimeConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "ThingName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ThingName",
+          "documentation": "The thing name."
+        }
+      },
+      "required": [
+        "ThingName"
+      ]
+    },
+    "GetThingRuntimeConfigurationResponse": {
+      "type": "structure",
+      "members": {
+        "RuntimeConfiguration": {
+          "shape": "RuntimeConfiguration",
+          "documentation": "Runtime configuration for a thing."
+        }
+      }
+    },
+    "GroupCertificateAuthorityProperties": {
+      "type": "structure",
+      "members": {
+        "GroupCertificateAuthorityArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the certificate authority for the group."
+        },
+        "GroupCertificateAuthorityId": {
+          "shape": "__string",
+          "documentation": "The ID of the certificate authority for the group."
+        }
+      },
+      "documentation": "Information about a certificate authority for a group."
+    },
+    "GroupCertificateConfiguration": {
+      "type": "structure",
+      "members": {
+        "CertificateAuthorityExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate authority expires, in milliseconds."
+        },
+        "CertificateExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate expires, in milliseconds."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "documentation": "The ID of the group certificate configuration."
+        }
+      },
+      "documentation": "Information about a group certificate configuration."
+    },
+    "GroupInformation": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the group."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the group was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the group."
+        },
+        "LastUpdatedTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the group was last updated."
+        },
+        "LatestVersion": {
+          "shape": "__string",
+          "documentation": "The ID of the latest version associated with the group."
+        },
+        "LatestVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the latest version associated with the group."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the group."
+        }
+      },
+      "documentation": "Information about a group."
+    },
+    "GroupOwnerSetting": {
+      "type": "structure",
+      "members": {
+        "AutoAddGroupOwner": {
+          "shape": "__boolean",
+          "documentation": "If true, AWS IoT Greengrass automatically adds the specified Linux OS group owner of the resource to the Lambda process privileges. Thus the Lambda process will have the file access permissions of the added Linux group."
+        },
+        "GroupOwner": {
+          "shape": "__string",
+          "documentation": "The name of the Linux OS group whose privileges will be added to the Lambda process. This field is optional."
+        }
+      },
+      "documentation": "Group owner related settings for local resources."
+    },
+    "GroupVersion": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the connector definition version for this group."
+        },
+        "CoreDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the core definition version for this group."
+        },
+        "DeviceDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the device definition version for this group."
+        },
+        "FunctionDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the function definition version for this group."
+        },
+        "LoggerDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the logger definition version for this group."
+        },
+        "ResourceDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the resource definition version for this group."
+        },
+        "SubscriptionDefinitionVersionArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the subscription definition version for this group."
+        }
+      },
+      "documentation": "Information about a group version."
+    },
+    "InternalServerErrorException": {
+      "type": "structure",
+      "members": {
+        "ErrorDetails": {
+          "shape": "ErrorDetails",
+          "documentation": "Details about the error."
+        },
+        "Message": {
+          "shape": "__string",
+          "documentation": "A message containing information about the error."
+        }
+      },
+      "documentation": "General error information.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 500
+      }
+    },
+    "ListBulkDeploymentDetailedReportsRequest": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "BulkDeploymentId",
+          "documentation": "The ID of the bulk deployment."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "BulkDeploymentId"
+      ]
+    },
+    "ListBulkDeploymentDetailedReportsResponse": {
+      "type": "structure",
+      "members": {
+        "Deployments": {
+          "shape": "BulkDeploymentResults",
+          "documentation": "A list of the individual group deployments in the bulk deployment operation."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListBulkDeploymentsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListBulkDeploymentsResponse": {
+      "type": "structure",
+      "members": {
+        "BulkDeployments": {
+          "shape": "BulkDeployments",
+          "documentation": "A list of bulk deployments."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListConnectorDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId"
+      ]
+    },
+    "ListConnectorDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListConnectorDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListConnectorDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListCoreDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "CoreDefinitionId"
+      ]
+    },
+    "ListCoreDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListCoreDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListCoreDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "documentation": "A list of definitions."
+    },
+    "ListDeploymentsRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "ListDeploymentsResponse": {
+      "type": "structure",
+      "members": {
+        "Deployments": {
+          "shape": "Deployments",
+          "documentation": "A list of deployments for the requested groups."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListDeviceDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "DeviceDefinitionId"
+      ]
+    },
+    "ListDeviceDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListDeviceDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListDeviceDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListFunctionDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "FunctionDefinitionId"
+      ]
+    },
+    "ListFunctionDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListFunctionDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListFunctionDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListGroupCertificateAuthoritiesRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "ListGroupCertificateAuthoritiesResponse": {
+      "type": "structure",
+      "members": {
+        "GroupCertificateAuthorities": {
+          "shape": "__listOfGroupCertificateAuthorityProperties",
+          "documentation": "A list of certificate authorities associated with the group."
+        }
+      }
+    },
+    "ListGroupVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "ListGroupVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListGroupsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListGroupsResponse": {
+      "type": "structure",
+      "members": {
+        "Groups": {
+          "shape": "__listOfGroupInformation",
+          "documentation": "Information about a group."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListLoggerDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        },
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      },
+      "required": [
+        "LoggerDefinitionId"
+      ]
+    },
+    "ListLoggerDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListLoggerDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListLoggerDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListResourceDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        }
+      },
+      "required": [
+        "ResourceDefinitionId"
+      ]
+    },
+    "ListResourceDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListResourceDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListResourceDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListSubscriptionDefinitionVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId"
+      ]
+    },
+    "ListSubscriptionDefinitionVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      }
+    },
+    "ListSubscriptionDefinitionsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "MaxResults",
+          "documentation": "The maximum number of results to be returned per request."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListSubscriptionDefinitionsResponse": {
+      "type": "structure",
+      "members": {
+        "Definitions": {
+          "shape": "__listOfDefinitionInformation",
+          "documentation": "Information about a definition."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        }
+      }
+    },
+    "ListTagsForResourceRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "The Amazon Resource Name (ARN) of the resource."
+        }
+      },
+      "required": [
+        "ResourceArn"
+      ]
+    },
+    "ListTagsForResourceResponse": {
+      "type": "structure",
+      "members": {
+        "tags": {
+          "shape": "Tags"
+        }
+      }
+    },
+    "ListVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "documentation": "The token for the next set of results, or ''null'' if there are no additional results."
+        },
+        "Versions": {
+          "shape": "__listOfVersionInformation",
+          "documentation": "Information about a version."
+        }
+      },
+      "documentation": "A list of versions."
+    },
+    "LocalDeviceResourceData": {
+      "type": "structure",
+      "members": {
+        "GroupOwnerSetting": {
+          "shape": "GroupOwnerSetting",
+          "documentation": "Group/owner related settings for local resources."
+        },
+        "SourcePath": {
+          "shape": "__string",
+          "documentation": "The local absolute path of the device resource. The source path for a device resource can refer only to a character device or block device under ''/dev''."
+        }
+      },
+      "documentation": "Attributes that define a local device resource."
+    },
+    "LocalVolumeResourceData": {
+      "type": "structure",
+      "members": {
+        "DestinationPath": {
+          "shape": "__string",
+          "documentation": "The absolute local path of the resource inside the Lambda environment."
+        },
+        "GroupOwnerSetting": {
+          "shape": "GroupOwnerSetting",
+          "documentation": "Allows you to configure additional group privileges for the Lambda process. This field is optional."
+        },
+        "SourcePath": {
+          "shape": "__string",
+          "documentation": "The local absolute path of the volume resource on the host. The source path for a volume resource type cannot start with ''/sys''."
+        }
+      },
+      "documentation": "Attributes that define a local volume resource."
+    },
+    "Logger": {
+      "type": "structure",
+      "members": {
+        "Component": {
+          "shape": "LoggerComponent",
+          "documentation": "The component that will be subject to logging."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the logger. This value must be unique within the logger definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
+        },
+        "Level": {
+          "shape": "LoggerLevel",
+          "documentation": "The level of the logs."
+        },
+        "Space": {
+          "shape": "__integer",
+          "documentation": "The amount of file space, in KB, to use if the local file system is used for logging purposes."
+        },
+        "Type": {
+          "shape": "LoggerType",
+          "documentation": "The type of log output which will be used."
+        }
+      },
+      "documentation": "Information about a logger",
+      "required": [
+        "Type",
+        "Level",
+        "Id",
+        "Component"
+      ]
+    },
+    "LoggerComponent": {
+      "type": "string",
+      "enum": [
+        "GreengrassSystem",
+        "Lambda"
+      ]
+    },
+    "LoggerDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Loggers": {
+          "shape": "__listOfLogger",
+          "documentation": "A list of loggers."
+        }
+      },
+      "documentation": "Information about a logger definition version."
+    },
+    "LoggerLevel": {
+      "type": "string",
+      "enum": [
+        "DEBUG",
+        "INFO",
+        "WARN",
+        "ERROR",
+        "FATAL"
+      ]
+    },
+    "LoggerType": {
+      "type": "string",
+      "enum": [
+        "FileSystem",
+        "AWSCloudWatch"
+      ]
+    },
+    "Permission": {
+      "type": "string",
+      "documentation": "The type of permission a function has to access a resource.",
+      "enum": [
+        "ro",
+        "rw"
+      ]
+    },
+    "ResetDeploymentsRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "Force": {
+          "shape": "__boolean",
+          "documentation": "If true, performs a best-effort only core reset."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "documentation": "Information needed to reset deployments.",
+      "required": [
+        "GroupId"
+      ]
+    },
+    "ResetDeploymentsResponse": {
+      "type": "structure",
+      "members": {
+        "DeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the deployment."
+        },
+        "DeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the deployment."
+        }
+      }
+    },
+    "Resource": {
+      "type": "structure",
+      "members": {
+        "Id": {
+          "shape": "__string",
+          "documentation": "The resource ID, used to refer to a resource in the Lambda function configuration. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''. This must be unique within a Greengrass group."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The descriptive resource name, which is displayed on the AWS IoT Greengrass console. Max length 128 characters with pattern ''[a-zA-Z0-9:_-]+''. This must be unique within a Greengrass group."
+        },
+        "ResourceDataContainer": {
+          "shape": "ResourceDataContainer",
+          "documentation": "A container of data for all resource types."
+        }
+      },
+      "documentation": "Information about a resource.",
+      "required": [
+        "ResourceDataContainer",
+        "Id",
+        "Name"
+      ]
+    },
+    "ResourceAccessPolicy": {
+      "type": "structure",
+      "members": {
+        "Permission": {
+          "shape": "Permission",
+          "documentation": "The permissions that the Lambda function has to the resource. Can be one of ''rw'' (read/write) or ''ro'' (read-only)."
+        },
+        "ResourceId": {
+          "shape": "__string",
+          "documentation": "The ID of the resource. (This ID is assigned to the resource when you create the resource definiton.)"
+        }
+      },
+      "documentation": "A policy used by the function to access a resource.",
+      "required": [
+        "ResourceId"
+      ]
+    },
+    "ResourceDataContainer": {
+      "type": "structure",
+      "members": {
+        "LocalDeviceResourceData": {
+          "shape": "LocalDeviceResourceData",
+          "documentation": "Attributes that define the local device resource."
+        },
+        "LocalVolumeResourceData": {
+          "shape": "LocalVolumeResourceData",
+          "documentation": "Attributes that define the local volume resource."
+        },
+        "S3MachineLearningModelResourceData": {
+          "shape": "S3MachineLearningModelResourceData",
+          "documentation": "Attributes that define an Amazon S3 machine learning resource."
+        },
+        "SageMakerMachineLearningModelResourceData": {
+          "shape": "SageMakerMachineLearningModelResourceData",
+          "documentation": "Attributes that define an Amazon SageMaker machine learning resource."
+        },
+        "SecretsManagerSecretResourceData": {
+          "shape": "SecretsManagerSecretResourceData",
+          "documentation": "Attributes that define a secret resource, which references a secret from AWS Secrets Manager."
+        }
+      },
+      "documentation": "A container for resource data. The container takes only one of the following supported resource data types: ''LocalDeviceResourceData'', ''LocalVolumeResourceData'', ''SageMakerMachineLearningModelResourceData'', ''S3MachineLearningModelResourceData'', ''SecretsManagerSecretResourceData''."
+    },
+    "ResourceDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Resources": {
+          "shape": "__listOfResource",
+          "documentation": "A list of resources."
+        }
+      },
+      "documentation": "Information about a resource definition version."
+    },
+    "ResourceDownloadOwnerSetting": {
+      "type": "structure",
+      "members": {
+        "GroupOwner": {
+          "shape": "__string",
+          "documentation": "The group owner of the resource. This is the name of an existing Linux OS group on the system or a GID. The group's permissions are added to the Lambda process."
+        },
+        "GroupPermission": {
+          "shape": "Permission",
+          "documentation": "The permissions that the group owner has to the resource. Valid values are ''rw'' (read/write) or ''ro'' (read-only)."
+        }
+      },
+      "documentation": "The owner setting for downloaded machine learning resources.",
+      "required": [
+        "GroupOwner",
+        "GroupPermission"
+      ]
+    },
+    "RuntimeConfiguration": {
+      "type": "structure",
+      "members": {
+        "TelemetryConfiguration": {
+          "shape": "TelemetryConfiguration",
+          "documentation": "Configuration for telemetry service."
+        }
+      },
+      "documentation": "Runtime configuration for a thing."
+    },
+    "RuntimeConfigurationUpdate": {
+      "type": "structure",
+      "members": {
+        "TelemetryConfiguration": {
+          "shape": "TelemetryConfigurationUpdate",
+          "documentation": "Configuration for telemetry service."
+        }
+      },
+      "documentation": "Runtime configuration for a thing."
+    },
+    "S3MachineLearningModelResourceData": {
+      "type": "structure",
+      "members": {
+        "DestinationPath": {
+          "shape": "__string",
+          "documentation": "The absolute local path of the resource inside the Lambda environment."
+        },
+        "OwnerSetting": {
+          "shape": "ResourceDownloadOwnerSetting"
+        },
+        "S3Uri": {
+          "shape": "__string",
+          "documentation": "The URI of the source model in an S3 bucket. The model package must be in tar.gz or .zip format."
+        }
+      },
+      "documentation": "Attributes that define an Amazon S3 machine learning resource."
+    },
+    "S3UrlSignerRole": {
+      "type": "string",
+      "documentation": "The IAM Role that Greengrass will use to create pre-signed URLs pointing towards the update artifact."
+    },
+    "SageMakerMachineLearningModelResourceData": {
+      "type": "structure",
+      "members": {
+        "DestinationPath": {
+          "shape": "__string",
+          "documentation": "The absolute local path of the resource inside the Lambda environment."
+        },
+        "OwnerSetting": {
+          "shape": "ResourceDownloadOwnerSetting"
+        },
+        "SageMakerJobArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the Amazon SageMaker training job that represents the source model."
+        }
+      },
+      "documentation": "Attributes that define an Amazon SageMaker machine learning resource."
+    },
+    "SecretsManagerSecretResourceData": {
+      "type": "structure",
+      "members": {
+        "ARN": {
+          "shape": "__string",
+          "documentation": "The ARN of the Secrets Manager secret to make available on the core. The value of the secret's latest version (represented by the ''AWSCURRENT'' staging label) is included by default."
+        },
+        "AdditionalStagingLabelsToDownload": {
+          "shape": "__listOf__string",
+          "documentation": "Optional. The staging labels whose values you want to make available on the core, in addition to ''AWSCURRENT''."
+        }
+      },
+      "documentation": "Attributes that define a secret resource, which references a secret from AWS Secrets Manager. AWS IoT Greengrass stores a local, encrypted copy of the secret on the Greengrass core, where it can be securely accessed by connectors and Lambda functions."
+    },
+    "SoftwareToUpdate": {
+      "type": "string",
+      "documentation": "The piece of software on the Greengrass core that will be updated.",
+      "enum": [
+        "core",
+        "ota_agent"
+      ]
+    },
+    "StartBulkDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "AmznClientToken": {
+          "shape": "__string",
+          "location": "header",
+          "locationName": "X-Amzn-Client-Token",
+          "documentation": "A client token used to correlate requests and responses."
+        },
+        "ExecutionRoleArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the execution role to associate with the bulk deployment operation. This IAM role must allow the ''greengrass:CreateDeployment'' action for all group versions that are listed in the input file. This IAM role must have access to the S3 bucket containing the input file."
+        },
+        "InputFileUri": {
+          "shape": "__string",
+          "documentation": "The URI of the input file contained in the S3 bucket. The execution role must have ''getObject'' permissions on this bucket to access the input file. The input file is a JSON-serialized, line delimited file with UTF-8 encoding that provides a list of group and version IDs and the deployment type. This file must be less than 100 MB. Currently, AWS IoT Greengrass supports only ''NewDeployment'' deployment types."
+        },
+        "tags": {
+          "shape": "Tags",
+          "documentation": "Tag(s) to add to the new resource."
+        }
+      },
+      "required": [
+        "ExecutionRoleArn",
+        "InputFileUri"
+      ]
+    },
+    "StartBulkDeploymentResponse": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentArn": {
+          "shape": "__string",
+          "documentation": "The ARN of the bulk deployment."
+        },
+        "BulkDeploymentId": {
+          "shape": "__string",
+          "documentation": "The ID of the bulk deployment."
+        }
+      }
+    },
+    "StopBulkDeploymentRequest": {
+      "type": "structure",
+      "members": {
+        "BulkDeploymentId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "BulkDeploymentId",
+          "documentation": "The ID of the bulk deployment."
+        }
+      },
+      "required": [
+        "BulkDeploymentId"
+      ]
+    },
+    "StopBulkDeploymentResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "Subscription": {
+      "type": "structure",
+      "members": {
+        "Id": {
+          "shape": "__string",
+          "documentation": "A descriptive or arbitrary ID for the subscription. This value must be unique within the subscription definition version. Max length is 128 characters with pattern ''[a-zA-Z0-9:_-]+''."
+        },
+        "Source": {
+          "shape": "__string",
+          "documentation": "The source of the subscription. Can be a thing ARN, a Lambda function ARN, a connector ARN, 'cloud' (which represents the AWS IoT cloud), or 'GGShadowService'."
+        },
+        "Subject": {
+          "shape": "__string",
+          "documentation": "The MQTT topic used to route the message."
+        },
+        "Target": {
+          "shape": "__string",
+          "documentation": "Where the message is sent to. Can be a thing ARN, a Lambda function ARN, a connector ARN, 'cloud' (which represents the AWS IoT cloud), or 'GGShadowService'."
+        }
+      },
+      "documentation": "Information about a subscription.",
+      "required": [
+        "Target",
+        "Id",
+        "Subject",
+        "Source"
+      ]
+    },
+    "SubscriptionDefinitionVersion": {
+      "type": "structure",
+      "members": {
+        "Subscriptions": {
+          "shape": "__listOfSubscription",
+          "documentation": "A list of subscriptions."
+        }
+      },
+      "documentation": "Information about a subscription definition version."
+    },
+    "TagResourceRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "The Amazon Resource Name (ARN) of the resource."
+        },
+        "tags": {
+          "shape": "Tags"
+        }
+      },
+      "documentation": "A map of the key-value pairs for the resource tag.",
+      "required": [
+        "ResourceArn"
+      ]
+    },
+    "Tags": {
+      "type": "map",
+      "documentation": "The key-value pair for the resource tag.",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "__string"
+      }
+    },
+    "Telemetry": {
+      "type": "string",
+      "enum": [
+        "On",
+        "Off"
+      ]
+    },
+    "TelemetryConfiguration": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSyncStatus": {
+          "shape": "ConfigurationSyncStatus",
+          "documentation": "Synchronization status of the device reported configuration with the desired configuration."
+        },
+        "Telemetry": {
+          "shape": "Telemetry",
+          "documentation": "Configure telemetry to be on or off."
+        }
+      },
+      "documentation": "Configuration settings for running telemetry.",
+      "required": [
+        "Telemetry"
+      ]
+    },
+    "TelemetryConfigurationUpdate": {
+      "type": "structure",
+      "members": {
+        "Telemetry": {
+          "shape": "Telemetry",
+          "documentation": "Configure telemetry to be on or off."
+        }
+      },
+      "documentation": "Configuration settings for running telemetry.",
+      "required": [
+        "Telemetry"
+      ]
+    },
+    "UntagResourceRequest": {
+      "type": "structure",
+      "members": {
+        "ResourceArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "resource-arn",
+          "documentation": "The Amazon Resource Name (ARN) of the resource."
+        },
+        "TagKeys": {
+          "shape": "__listOf__string",
+          "location": "querystring",
+          "locationName": "tagKeys",
+          "documentation": "An array of tag keys to delete"
+        }
+      },
+      "required": [
+        "TagKeys",
+        "ResourceArn"
+      ]
+    },
+    "UpdateAgentLogLevel": {
+      "type": "string",
+      "documentation": "The minimum level of log statements that should be logged by the OTA Agent during an update.",
+      "enum": [
+        "NONE",
+        "TRACE",
+        "DEBUG",
+        "VERBOSE",
+        "INFO",
+        "WARN",
+        "ERROR",
+        "FATAL"
+      ]
+    },
+    "UpdateConnectivityInfoRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectivityInfo": {
+          "shape": "__listOfConnectivityInfo",
+          "documentation": "A list of connectivity info."
+        },
+        "ThingName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ThingName",
+          "documentation": "The thing name."
+        }
+      },
+      "documentation": "Connectivity information.",
+      "required": [
+        "ThingName"
+      ]
+    },
+    "UpdateConnectivityInfoResponse": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "A message about the connectivity info update request."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The new version of the connectivity info."
+        }
+      }
+    },
+    "UpdateConnectorDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "ConnectorDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConnectorDefinitionId",
+          "documentation": "The ID of the connector definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "ConnectorDefinitionId"
+      ]
+    },
+    "UpdateConnectorDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateCoreDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "CoreDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "CoreDefinitionId",
+          "documentation": "The ID of the core definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "CoreDefinitionId"
+      ]
+    },
+    "UpdateCoreDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateDeviceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "DeviceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "DeviceDefinitionId",
+          "documentation": "The ID of the device definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "DeviceDefinitionId"
+      ]
+    },
+    "UpdateDeviceDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateFunctionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "FunctionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "FunctionDefinitionId",
+          "documentation": "The ID of the Lambda function definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "FunctionDefinitionId"
+      ]
+    },
+    "UpdateFunctionDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateGroupCertificateConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "CertificateExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate expires, in milliseconds."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "UpdateGroupCertificateConfigurationResponse": {
+      "type": "structure",
+      "members": {
+        "CertificateAuthorityExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate authority expires, in milliseconds."
+        },
+        "CertificateExpiryInMilliseconds": {
+          "shape": "__string",
+          "documentation": "The amount of time remaining before the certificate expires, in milliseconds."
+        },
+        "GroupId": {
+          "shape": "__string",
+          "documentation": "The ID of the group certificate configuration."
+        }
+      }
+    },
+    "UpdateGroupRequest": {
+      "type": "structure",
+      "members": {
+        "GroupId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "GroupId",
+          "documentation": "The ID of the Greengrass group."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "GroupId"
+      ]
+    },
+    "UpdateGroupResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateLoggerDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "LoggerDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "LoggerDefinitionId",
+          "documentation": "The ID of the logger definition."
+        },
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        }
+      },
+      "required": [
+        "LoggerDefinitionId"
+      ]
+    },
+    "UpdateLoggerDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateResourceDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "ResourceDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ResourceDefinitionId",
+          "documentation": "The ID of the resource definition."
+        }
+      },
+      "required": [
+        "ResourceDefinitionId"
+      ]
+    },
+    "UpdateResourceDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateSubscriptionDefinitionRequest": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "__string",
+          "documentation": "The name of the definition."
+        },
+        "SubscriptionDefinitionId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "SubscriptionDefinitionId",
+          "documentation": "The ID of the subscription definition."
+        }
+      },
+      "required": [
+        "SubscriptionDefinitionId"
+      ]
+    },
+    "UpdateSubscriptionDefinitionResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "UpdateTargets": {
+      "type": "list",
+      "documentation": "The ARNs of the targets (IoT things or IoT thing groups) that this update will be applied to.",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "UpdateTargetsArchitecture": {
+      "type": "string",
+      "documentation": "The architecture of the cores which are the targets of an update.",
+      "enum": [
+        "armv6l",
+        "armv7l",
+        "x86_64",
+        "aarch64"
+      ]
+    },
+    "UpdateTargetsOperatingSystem": {
+      "type": "string",
+      "documentation": "The operating system of the cores which are the targets of an update.",
+      "enum": [
+        "ubuntu",
+        "raspbian",
+        "amazon_linux",
+        "openwrt"
+      ]
+    },
+    "UpdateThingRuntimeConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "TelemetryConfiguration": {
+          "shape": "TelemetryConfigurationUpdate",
+          "documentation": "Configuration for telemetry service."
+        },
+        "ThingName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ThingName",
+          "documentation": "The thing name."
+        }
+      },
+      "required": [
+        "ThingName"
+      ]
+    },
+    "UpdateThingRuntimeConfigurationResponse": {
+      "type": "structure",
+      "members": {}
+    },
+    "VersionInformation": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "documentation": "The ARN of the version."
+        },
+        "CreationTimestamp": {
+          "shape": "__string",
+          "documentation": "The time, in milliseconds since the epoch, when the version was created."
+        },
+        "Id": {
+          "shape": "__string",
+          "documentation": "The ID of the parent definition that the version is associated with."
+        },
+        "Version": {
+          "shape": "__string",
+          "documentation": "The ID of the version."
+        }
+      },
+      "documentation": "Information about a version."
+    },
+    "__boolean": {
+      "type": "boolean"
+    },
+    "__double": {
+      "type": "double"
+    },
+    "__integer": {
+      "type": "integer"
+    },
+    "__listOfConnectivityInfo": {
+      "type": "list",
+      "member": {
+        "shape": "ConnectivityInfo"
+      }
+    },
+    "__listOfConnector": {
+      "type": "list",
+      "member": {
+        "shape": "Connector"
+      }
+    },
+    "__listOfCore": {
+      "type": "list",
+      "member": {
+        "shape": "Core"
+      }
+    },
+    "__listOfDefinitionInformation": {
+      "type": "list",
+      "member": {
+        "shape": "DefinitionInformation"
+      }
+    },
+    "__listOfDevice": {
+      "type": "list",
+      "member": {
+        "shape": "Device"
+      }
+    },
+    "__listOfFunction": {
+      "type": "list",
+      "member": {
+        "shape": "Function"
+      }
+    },
+    "__listOfGroupCertificateAuthorityProperties": {
+      "type": "list",
+      "member": {
+        "shape": "GroupCertificateAuthorityProperties"
+      }
+    },
+    "__listOfGroupInformation": {
+      "type": "list",
+      "member": {
+        "shape": "GroupInformation"
+      }
+    },
+    "__listOfLogger": {
+      "type": "list",
+      "member": {
+        "shape": "Logger"
+      }
+    },
+    "__listOfResource": {
+      "type": "list",
+      "member": {
+        "shape": "Resource"
+      }
+    },
+    "__listOfResourceAccessPolicy": {
+      "type": "list",
+      "member": {
+        "shape": "ResourceAccessPolicy"
+      }
+    },
+    "__listOfSubscription": {
+      "type": "list",
+      "member": {
+        "shape": "Subscription"
+      }
+    },
+    "__listOfVersionInformation": {
+      "type": "list",
+      "member": {
+        "shape": "VersionInformation"
+      }
+    },
+    "__listOf__string": {
+      "type": "list",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "__long": {
+      "type": "long"
+    },
+    "__mapOf__string": {
+      "type": "map",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "__string"
+      }
+    },
+    "__string": {
+      "type": "string"
+    },
+    "__timestampIso8601": {
+      "type": "timestamp",
+      "timestampFormat": "iso8601"
+    },
+    "__timestampUnix": {
+      "type": "timestamp",
+      "timestampFormat": "unixTimestamp"
     }
   },
-  "documentation" : "AWS IoT Greengrass seamlessly extends AWS onto physical devices so they can act locally on the data they generate, while still using the cloud for management, analytics, and durable storage. AWS IoT Greengrass ensures your devices can respond quickly to local events and operate with intermittent connectivity. AWS IoT Greengrass minimizes the cost of transmitting data to the cloud by allowing you to author AWS Lambda functions that execute locally."
-}
+  "documentation": "AWS IoT Greengrass seamlessly extends AWS onto physical devices so they can act locally on the data they generate, while still using the cloud for management, analytics, and durable storage. AWS IoT Greengrass ensures your devices can respond quickly to local events and operate with intermittent connectivity. AWS IoT Greengrass minimizes the cost of transmitting data to the cloud by allowing you to author AWS Lambda functions that execute locally."
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/greengrassv2/2020-11-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/greengrassv2/2020-11-30/service-2.json 2.31.35-1/awscli/botocore/data/greengrassv2/2020-11-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/greengrassv2/2020-11-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/greengrassv2/2020-11-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1452,8 +1452,7 @@
     },
     "DisassociateServiceRoleFromAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateServiceRoleFromAccountResponse":{
       "type":"structure",
@@ -1815,8 +1814,7 @@
     },
     "GetServiceRoleForAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetServiceRoleForAccountResponse":{
       "type":"structure",
@@ -2884,8 +2882,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2948,8 +2945,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectivityInfoRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/groundstation/2019-05-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/groundstation/2019-05-23/service-2.json 2.31.35-1/awscli/botocore/data/groundstation/2019-05-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/groundstation/2019-05-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/groundstation/2019-05-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2019-05-23",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"groundstation",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS Ground Station",
     "serviceId":"GroundStation",
     "signatureVersion":"v4",
     "signingName":"groundstation",
-    "uid":"groundstation-2019-05-23",
-    "auth":["aws.auth#sigv4"]
+    "uid":"groundstation-2019-05-23"
   },
   "operations":{
     "CancelContact":{
@@ -64,6 +63,23 @@
       ],
       "documentation":"<p>Creates a <code>DataflowEndpoint</code> group containing the specified list of <code>DataflowEndpoint</code> objects.</p> <p>The <code>name</code> field in each endpoint is used in your mission profile <code>DataflowEndpointConfig</code> to specify which endpoints to use during a contact.</p> <p>When a contact uses multiple <code>DataflowEndpointConfig</code> objects, each <code>Config</code> must match a <code>DataflowEndpoint</code> in the same group.</p>"
     },
+    "CreateDataflowEndpointGroupV2":{
+      "name":"CreateDataflowEndpointGroupV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/dataflowEndpointGroupV2",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateDataflowEndpointGroupV2Request"},
+      "output":{"shape":"CreateDataflowEndpointGroupV2Response"},
+      "errors":[
+        {"shape":"InvalidParameterException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"DependencyException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a <code>DataflowEndpointGroupV2</code> containing the specified list of <code>DataflowEndpoint</code> objects.</p> <p>The <code>name</code> field in each endpoint is used in your mission profile <code>DataflowEndpointConfig</code> to specify which endpoints to use during a contact.</p> <p>When a contact uses multiple <code>DataflowEndpointConfig</code> objects, each <code>Config</code> must match a <code>DataflowEndpoint</code> in the same group.</p>"
+    },
     "CreateEphemeris":{
       "name":"CreateEphemeris",
       "http":{
@@ -78,7 +94,7 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Creates an Ephemeris with the specified <code>EphemerisData</code>.</p>"
+      "documentation":"<p>Create an ephemeris with your specified <a>EphemerisData</a>.</p>"
     },
     "CreateMissionProfile":{
       "name":"CreateMissionProfile",
@@ -142,9 +158,10 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"DependencyException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceInUseException"}
       ],
-      "documentation":"<p>Deletes an ephemeris</p>",
+      "documentation":"<p>Delete an ephemeris.</p>",
       "idempotent":true
     },
     "DeleteMissionProfile":{
@@ -178,7 +195,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Describes an existing contact.</p>"
+      "documentation":"<p>Describes an existing contact.</p>",
+      "readonly":true
     },
     "DescribeEphemeris":{
       "name":"DescribeEphemeris",
@@ -194,7 +212,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Describes an existing ephemeris.</p>"
+      "documentation":"<p>Retrieve information about an existing ephemeris.</p>",
+      "readonly":true
     },
     "GetAgentConfiguration":{
       "name":"GetAgentConfiguration",
@@ -210,7 +229,25 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p>Gets the latest configuration information for a registered agent.</p>"
+      "documentation":"<p><note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p>Gets the latest configuration information for a registered agent.</p></p>",
+      "readonly":true
+    },
+    "GetAgentTaskResponseUrl":{
+      "name":"GetAgentTaskResponseUrl",
+      "http":{
+        "method":"GET",
+        "requestUri":"/agentResponseUrl/{agentId}/{taskId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAgentTaskResponseUrlRequest"},
+      "output":{"shape":"GetAgentTaskResponseUrlResponse"},
+      "errors":[
+        {"shape":"InvalidParameterException"},
+        {"shape":"DependencyException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p><note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p>Gets a presigned URL for uploading agent task response logs.</p></p>",
+      "readonly":true
     },
     "GetConfig":{
       "name":"GetConfig",
@@ -226,7 +263,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns <code>Config</code> information.</p> <p>Only one <code>Config</code> response can be returned.</p>"
+      "documentation":"<p>Returns <code>Config</code> information.</p> <p>Only one <code>Config</code> response can be returned.</p>",
+      "readonly":true
     },
     "GetDataflowEndpointGroup":{
       "name":"GetDataflowEndpointGroup",
@@ -242,7 +280,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the dataflow endpoint group.</p>"
+      "documentation":"<p>Returns the dataflow endpoint group.</p>",
+      "readonly":true
     },
     "GetMinuteUsage":{
       "name":"GetMinuteUsage",
@@ -258,7 +297,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the number of reserved minutes used by account.</p>"
+      "documentation":"<p>Returns the number of reserved minutes used by account.</p>",
+      "readonly":true
     },
     "GetMissionProfile":{
       "name":"GetMissionProfile",
@@ -274,7 +314,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a mission profile.</p>"
+      "documentation":"<p>Returns a mission profile.</p>",
+      "readonly":true
     },
     "GetSatellite":{
       "name":"GetSatellite",
@@ -290,7 +331,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a satellite.</p>"
+      "documentation":"<p>Returns a satellite.</p>",
+      "readonly":true
     },
     "ListConfigs":{
       "name":"ListConfigs",
@@ -306,7 +348,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of <code>Config</code> objects.</p>"
+      "documentation":"<p>Returns a list of <code>Config</code> objects.</p>",
+      "readonly":true
     },
     "ListContacts":{
       "name":"ListContacts",
@@ -322,7 +365,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of contacts.</p> <p>If <code>statusList</code> contains AVAILABLE, the request must include <code>groundStation</code>, <code>missionprofileArn</code>, and <code>satelliteArn</code>. </p>"
+      "documentation":"<p>Returns a list of contacts.</p> <p>If <code>statusList</code> contains AVAILABLE, the request must include <code>groundStation</code>, <code>missionprofileArn</code>, and <code>satelliteArn</code>. </p>",
+      "readonly":true
     },
     "ListDataflowEndpointGroups":{
       "name":"ListDataflowEndpointGroups",
@@ -338,7 +382,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of <code>DataflowEndpoint</code> groups.</p>"
+      "documentation":"<p>Returns a list of <code>DataflowEndpoint</code> groups.</p>",
+      "readonly":true
     },
     "ListEphemerides":{
       "name":"ListEphemerides",
@@ -354,7 +399,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>List existing ephemerides.</p>"
+      "documentation":"<p>List your existing ephemerides.</p>",
+      "readonly":true
     },
     "ListGroundStations":{
       "name":"ListGroundStations",
@@ -370,7 +416,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of ground stations. </p>"
+      "documentation":"<p>Returns a list of ground stations. </p>",
+      "readonly":true
     },
     "ListMissionProfiles":{
       "name":"ListMissionProfiles",
@@ -386,7 +433,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of mission profiles.</p>"
+      "documentation":"<p>Returns a list of mission profiles.</p>",
+      "readonly":true
     },
     "ListSatellites":{
       "name":"ListSatellites",
@@ -402,7 +450,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of satellites.</p>"
+      "documentation":"<p>Returns a list of satellites.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -418,7 +467,8 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of tags for a specified resource.</p>"
+      "documentation":"<p>Returns a list of tags for a specified resource.</p>",
+      "readonly":true
     },
     "RegisterAgent":{
       "name":"RegisterAgent",
@@ -434,7 +484,7 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p> Registers a new agent with AWS Ground Station. </p>"
+      "documentation":"<p><note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p> Registers a new agent with AWS Ground Station. </p></p>"
     },
     "ReserveContact":{
       "name":"ReserveContact",
@@ -448,6 +498,7 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"DependencyException"},
+        {"shape":"ResourceLimitExceededException"},
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Reserves a contact using specified parameters.</p>"
@@ -499,7 +550,7 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p>Update the status of the agent.</p>",
+      "documentation":"<p><note> <p> For use by AWS Ground Station Agent and shouldn't be called directly.</p> </note> <p>Update the status of the agent.</p></p>",
       "idempotent":true
     },
     "UpdateConfig":{
@@ -533,7 +584,7 @@
         {"shape":"DependencyException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Updates an existing ephemeris</p>",
+      "documentation":"<p>Update an existing ephemeris.</p>",
       "idempotent":true
     },
     "UpdateMissionProfile":{
@@ -559,7 +610,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\w-]+$"
+      "pattern":"[\\w-]+"
     },
     "AgentCpuCoresList":{
       "type":"list",
@@ -571,23 +622,15 @@
       "type":"structure",
       "required":[
         "agentVersion",
-        "componentVersions",
         "instanceId",
-        "instanceType"
+        "instanceType",
+        "componentVersions"
       ],
       "members":{
-        "agentCpuCores":{
-          "shape":"AgentCpuCoresList",
-          "documentation":"<p>List of CPU cores reserved for the agent.</p>"
-        },
         "agentVersion":{
           "shape":"VersionString",
           "documentation":"<p>Current agent version.</p>"
         },
-        "componentVersions":{
-          "shape":"ComponentVersionList",
-          "documentation":"<p>List of versions being used by agent components.</p>"
-        },
         "instanceId":{
           "shape":"InstanceId",
           "documentation":"<p>ID of EC2 instance agent is running on.</p>"
@@ -598,7 +641,15 @@
         },
         "reservedCpuCores":{
           "shape":"AgentCpuCoresList",
-          "documentation":"<note> <p>This field should not be used. Use agentCpuCores instead.</p> </note> <p>List of CPU cores reserved for processes other than the agent running on the EC2 instance.</p>"
+          "documentation":"<p><note> <p>This field should not be used. Use agentCpuCores instead.</p> </note> <p>List of CPU cores reserved for processes other than the agent running on the EC2 instance.</p></p>"
+        },
+        "agentCpuCores":{
+          "shape":"AgentCpuCoresList",
+          "documentation":"<p>List of CPU cores reserved for the agent.</p>"
+        },
+        "componentVersions":{
+          "shape":"ComponentVersionList",
+          "documentation":"<p>List of versions being used by agent components.</p>"
         }
       },
       "documentation":"<p>Detailed information about the agent.</p>"
@@ -616,13 +667,13 @@
       "type":"structure",
       "required":["status"],
       "members":{
-        "signatureMap":{
-          "shape":"SignatureMap",
-          "documentation":"<p>Sparse map of failure signatures.</p>"
-        },
         "status":{
           "shape":"AgentStatus",
           "documentation":"<p>Aggregate status.</p>"
+        },
+        "signatureMap":{
+          "shape":"SignatureMap",
+          "documentation":"<p>Sparse map of failure signatures.</p>"
         }
       },
       "documentation":"<p>Aggregate status of Agent components.</p>"
@@ -658,22 +709,22 @@
     "AntennaDownlinkDemodDecodeConfig":{
       "type":"structure",
       "required":[
-        "decodeConfig",
+        "spectrumConfig",
         "demodulationConfig",
-        "spectrumConfig"
+        "decodeConfig"
       ],
       "members":{
-        "decodeConfig":{
-          "shape":"DecodeConfig",
-          "documentation":"<p>Information about the decode <code>Config</code>.</p>"
+        "spectrumConfig":{
+          "shape":"SpectrumConfig",
+          "documentation":"<p>Information about the spectral <code>Config</code>.</p>"
         },
         "demodulationConfig":{
           "shape":"DemodulationConfig",
           "documentation":"<p>Information about the demodulation <code>Config</code>.</p>"
         },
-        "spectrumConfig":{
-          "shape":"SpectrumConfig",
-          "documentation":"<p>Information about the spectral <code>Config</code>.</p>"
+        "decodeConfig":{
+          "shape":"DecodeConfig",
+          "documentation":"<p>Information about the decode <code>Config</code>.</p>"
         }
       },
       "documentation":"<p>Information about how AWS Ground Station should conﬁgure an antenna for downlink demod decode during a contact.</p>"
@@ -685,6 +736,10 @@
         "targetEirp"
       ],
       "members":{
+        "transmitDisabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether or not uplink transmit is disabled.</p>"
+        },
         "spectrumConfig":{
           "shape":"UplinkSpectrumConfig",
           "documentation":"<p>Information about the uplink spectral <code>Config</code>.</p>"
@@ -692,10 +747,6 @@
         "targetEirp":{
           "shape":"Eirp",
           "documentation":"<p>EIRP of the target.</p>"
-        },
-        "transmitDisabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether or not uplink transmit is disabled.</p>"
         }
       },
       "documentation":"<p>Information about the uplink <code>Config</code> of an antenna.</p>"
@@ -704,7 +755,7 @@
       "type":"string",
       "max":1024,
       "min":5,
-      "pattern":"^(arn:aws:)[\\s\\S]{0,1024}$"
+      "pattern":"(arn:aws:)[\\s\\S]{0,1024}"
     },
     "AuditResults":{
       "type":"string",
@@ -716,18 +767,14 @@
     "AwsGroundStationAgentEndpoint":{
       "type":"structure",
       "required":[
+        "name",
         "egressAddress",
-        "ingressAddress",
-        "name"
+        "ingressAddress"
       ],
       "members":{
-        "agentStatus":{
-          "shape":"AgentStatus",
-          "documentation":"<p>The status of AgentEndpoint.</p>"
-        },
-        "auditResults":{
-          "shape":"AuditResults",
-          "documentation":"<p>The results of the audit.</p>"
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Name string associated with AgentEndpoint. Used as a human-readable identifier for AgentEndpoint.</p>"
         },
         "egressAddress":{
           "shape":"ConnectionDetails",
@@ -737,13 +784,119 @@
           "shape":"RangedConnectionDetails",
           "documentation":"<p>The ingress address of AgentEndpoint.</p>"
         },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>Name string associated with AgentEndpoint. Used as a human-readable identifier for AgentEndpoint.</p>"
+        "agentStatus":{
+          "shape":"AgentStatus",
+          "documentation":"<p>The status of AgentEndpoint.</p>"
+        },
+        "auditResults":{
+          "shape":"AuditResults",
+          "documentation":"<p>The results of the audit.</p>"
         }
       },
       "documentation":"<p>Information about AwsGroundStationAgentEndpoint.</p>"
     },
+    "AzElEphemeris":{
+      "type":"structure",
+      "required":[
+        "groundStation",
+        "data"
+      ],
+      "members":{
+        "groundStation":{
+          "shape":"GroundStationName",
+          "documentation":"<p>The ground station name for which you're providing azimuth elevation data.</p> <p>This ephemeris is specific to this ground station and can't be used at other locations.</p>"
+        },
+        "data":{
+          "shape":"AzElSegmentsData",
+          "documentation":"<p>Azimuth elevation segment data.</p> <p>You can provide data inline in the request or through an Amazon S3 object reference.</p>"
+        }
+      },
+      "documentation":"<p>Azimuth elevation ephemeris data.</p> <p> Use this ephemeris type to provide pointing angles directly, rather than satellite orbital elements. Use this when you need precise antenna pointing but have imprecise or unknown satellite trajectory information. </p> <p> The azimuth elevation data specifies the antenna pointing direction at specific times relative to a ground station location. AWS Ground Station uses 4th order Lagrange interpolation to compute pointing angles between the provided data points. </p> <p> AWS Ground Station automatically filters interpolated pointing angles, including only those that are above the site mask elevation of the specified ground station. </p> <p> For more detail about providing azimuth elevation ephemerides to AWS Ground Station, see the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/providing-azimuth-elevation-ephemeris-data.html\">azimuth elevation ephemeris section</a> of the AWS Ground Station User Guide. </p>"
+    },
+    "AzElEphemerisFilter":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"Uuid",
+          "documentation":"<p>Unique identifier of the azimuth elevation ephemeris.</p>"
+        }
+      },
+      "documentation":"<p>Filter for selecting contacts that use a specific <a>AzElEphemeris</a>.</p>"
+    },
+    "AzElProgramTrackSettings":{
+      "type":"structure",
+      "required":["ephemerisId"],
+      "members":{
+        "ephemerisId":{
+          "shape":"Uuid",
+          "documentation":"<p>Unique identifier of the azimuth elevation ephemeris.</p>"
+        }
+      },
+      "documentation":"<p>Program track settings for <a>AzElEphemeris</a>.</p>"
+    },
+    "AzElSegment":{
+      "type":"structure",
+      "required":[
+        "referenceEpoch",
+        "validTimeRange",
+        "azElList"
+      ],
+      "members":{
+        "referenceEpoch":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The reference time for this segment in ISO 8601 format in Coordinated Universal Time (UTC).</p> <p>All time values within the segment's <a>AzElSegment$azElList</a> are specified as offsets in atomic seconds from this reference epoch.</p> <p>Example: <code>2024-01-15T12:00:00.000Z</code> </p>"
+        },
+        "validTimeRange":{
+          "shape":"ISO8601TimeRange",
+          "documentation":"<p>The valid time range for this segment.</p> <p> Specifies the start and end timestamps in ISO 8601 format in Coordinated Universal Time (UTC). The segment's pointing data must cover this entire time range. </p>"
+        },
+        "azElList":{
+          "shape":"TimeAzElList",
+          "documentation":"<p>List of time-tagged azimuth elevation data points.</p> <p> Must contain at least five points to support 4th order Lagrange interpolation. Points must be in chronological order with no duplicates. </p>"
+        }
+      },
+      "documentation":"<p>A time segment containing azimuth elevation pointing data.</p> <p> Each segment defines a continuous time period with pointing angle data points. AWS Ground Station uses 4th order Lagrange interpolation between the provided points, so each segment must contain at least five data points. </p>"
+    },
+    "AzElSegmentList":{
+      "type":"list",
+      "member":{"shape":"AzElSegment"},
+      "max":100,
+      "min":1
+    },
+    "AzElSegments":{
+      "type":"structure",
+      "required":[
+        "angleUnit",
+        "azElSegmentList"
+      ],
+      "members":{
+        "angleUnit":{
+          "shape":"AngleUnits",
+          "documentation":"<p>The unit of measure for azimuth and elevation angles. All angles in all segments must use the same unit.</p>"
+        },
+        "azElSegmentList":{
+          "shape":"AzElSegmentList",
+          "documentation":"<p>List of azimuth elevation segments.</p> <p>Must contain between 1 and 100 segments. Segments must be in chronological order with no overlaps.</p>"
+        }
+      },
+      "documentation":"<p>Azimuth elevation segment collection.</p> <p>Contains five or more time-ordered segments that define antenna pointing angles over the ephemeris validity period.</p>"
+    },
+    "AzElSegmentsData":{
+      "type":"structure",
+      "members":{
+        "s3Object":{
+          "shape":"S3Object",
+          "documentation":"<p>The Amazon S3 object containing azimuth elevation segment data.</p> <p>The Amazon S3 object must contain JSON-formatted azimuth elevation data matching the <a>AzElSegments</a> structure.</p>"
+        },
+        "azElData":{
+          "shape":"AzElSegments",
+          "documentation":"<p>Azimuth elevation segment data provided directly in the request.</p> <p>Use this option for smaller datasets or when Amazon S3 access is not available.</p>"
+        }
+      },
+      "documentation":"<p>Container for azimuth elevation segment data.</p> <p>Specify either <a>AzElSegmentsData$s3Object</a> to reference data in Amazon S3, or <a>AzElSegmentsData$azElData</a> to provide data inline.</p>",
+      "union":true
+    },
     "BandwidthUnits":{
       "type":"string",
       "enum":[
@@ -780,8 +933,8 @@
     "CapabilityHealth":{
       "type":"string",
       "enum":[
-        "UNHEALTHY",
-        "HEALTHY"
+        "HEALTHY",
+        "UNHEALTHY"
       ]
     },
     "CapabilityHealthReason":{
@@ -805,39 +958,39 @@
     "ComponentStatusData":{
       "type":"structure",
       "required":[
-        "capabilityArn",
         "componentType",
-        "dataflowId",
-        "status"
+        "capabilityArn",
+        "status",
+        "dataflowId"
       ],
       "members":{
-        "bytesReceived":{
-          "shape":"Long",
-          "documentation":"<p>Bytes received by the component.</p>"
-        },
-        "bytesSent":{
-          "shape":"Long",
-          "documentation":"<p>Bytes sent by the component.</p>"
+        "componentType":{
+          "shape":"ComponentTypeString",
+          "documentation":"<p>The Component type.</p>"
         },
         "capabilityArn":{
           "shape":"CapabilityArn",
           "documentation":"<p>Capability ARN of the component.</p>"
         },
-        "componentType":{
-          "shape":"ComponentTypeString",
-          "documentation":"<p>The Component type.</p>"
+        "status":{
+          "shape":"AgentStatus",
+          "documentation":"<p>Component status.</p>"
         },
-        "dataflowId":{
-          "shape":"Uuid",
-          "documentation":"<p>Dataflow UUID associated with the component.</p>"
+        "bytesSent":{
+          "shape":"Long",
+          "documentation":"<p>Bytes sent by the component.</p>"
+        },
+        "bytesReceived":{
+          "shape":"Long",
+          "documentation":"<p>Bytes received by the component.</p>"
         },
         "packetsDropped":{
           "shape":"Long",
           "documentation":"<p>Packets dropped by component.</p>"
         },
-        "status":{
-          "shape":"AgentStatus",
-          "documentation":"<p>Component status.</p>"
+        "dataflowId":{
+          "shape":"Uuid",
+          "documentation":"<p>Dataflow UUID associated with the component.</p>"
         }
       },
       "documentation":"<p>Data on the status of agent components.</p>"
@@ -850,7 +1003,7 @@
     },
     "ComponentTypeString":{
       "type":"string",
-      "pattern":"^[a-zA-Z0-9_]{1,64}$"
+      "pattern":"[a-zA-Z0-9_]{1,64}"
     },
     "ComponentVersion":{
       "type":"structure",
@@ -876,15 +1029,20 @@
       "max":20,
       "min":1
     },
-    "ConfigArn":{"type":"string"},
+    "ConfigArn":{
+      "type":"string",
+      "max":424,
+      "min":82,
+      "pattern":"arn:aws:groundstation:[-a-z0-9]{1,50}:[0-9]{12}:config/[a-z0-9]+(-[a-z0-9]+){0,4}/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(/.{1,256})?"
+    },
     "ConfigCapabilityType":{
       "type":"string",
       "enum":[
         "antenna-downlink",
         "antenna-downlink-demod-decode",
-        "antenna-uplink",
-        "dataflow-endpoint",
         "tracking",
+        "dataflow-endpoint",
+        "antenna-uplink",
         "uplink-echo",
         "s3-recording"
       ]
@@ -892,11 +1050,11 @@
     "ConfigDetails":{
       "type":"structure",
       "members":{
+        "endpointDetails":{"shape":"EndpointDetails"},
         "antennaDemodDecodeDetails":{
           "shape":"AntennaDemodDecodeDetails",
           "documentation":"<p>Details for antenna demod decode <code>Config</code> in a contact.</p>"
         },
-        "endpointDetails":{"shape":"EndpointDetails"},
         "s3RecordingDetails":{
           "shape":"S3RecordingDetails",
           "documentation":"<p>Details for an S3 recording <code>Config</code> in a contact.</p>"
@@ -908,10 +1066,6 @@
     "ConfigIdResponse":{
       "type":"structure",
       "members":{
-        "configArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of a <code>Config</code>.</p>"
-        },
         "configId":{
           "shape":"String",
           "documentation":"<p>UUID of a <code>Config</code>.</p>"
@@ -919,6 +1073,10 @@
         "configType":{
           "shape":"ConfigCapabilityType",
           "documentation":"<p>Type of a <code>Config</code>.</p>"
+        },
+        "configArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of a <code>Config</code>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -930,10 +1088,6 @@
     "ConfigListItem":{
       "type":"structure",
       "members":{
-        "configArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of a <code>Config</code>.</p>"
-        },
         "configId":{
           "shape":"String",
           "documentation":"<p>UUID of a <code>Config</code>.</p>"
@@ -942,6 +1096,10 @@
           "shape":"ConfigCapabilityType",
           "documentation":"<p>Type of a <code>Config</code>.</p>"
         },
+        "configArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of a <code>Config</code>.</p>"
+        },
         "name":{
           "shape":"String",
           "documentation":"<p>Name of a <code>Config</code>.</p>"
@@ -956,6 +1114,14 @@
           "shape":"AntennaDownlinkConfig",
           "documentation":"<p>Information about how AWS Ground Station should configure an antenna for downlink during a contact.</p>"
         },
+        "trackingConfig":{
+          "shape":"TrackingConfig",
+          "documentation":"<p>Object that determines whether tracking should be used during a contact executed with this <code>Config</code> in the mission profile. </p>"
+        },
+        "dataflowEndpointConfig":{
+          "shape":"DataflowEndpointConfig",
+          "documentation":"<p>Information about the dataflow endpoint <code>Config</code>.</p>"
+        },
         "antennaDownlinkDemodDecodeConfig":{
           "shape":"AntennaDownlinkDemodDecodeConfig",
           "documentation":"<p>Information about how AWS Ground Station should conﬁgure an antenna for downlink demod decode during a contact.</p>"
@@ -964,21 +1130,13 @@
           "shape":"AntennaUplinkConfig",
           "documentation":"<p>Information about how AWS Ground Station should conﬁgure an antenna for uplink during a contact.</p>"
         },
-        "dataflowEndpointConfig":{
-          "shape":"DataflowEndpointConfig",
-          "documentation":"<p>Information about the dataflow endpoint <code>Config</code>.</p>"
+        "uplinkEchoConfig":{
+          "shape":"UplinkEchoConfig",
+          "documentation":"<p>Information about an uplink echo <code>Config</code>.</p> <p>Parameters from the <code>AntennaUplinkConfig</code>, corresponding to the specified <code>AntennaUplinkConfigArn</code>, are used when this <code>UplinkEchoConfig</code> is used in a contact.</p>"
         },
         "s3RecordingConfig":{
           "shape":"S3RecordingConfig",
           "documentation":"<p>Information about an S3 recording <code>Config</code>.</p>"
-        },
-        "trackingConfig":{
-          "shape":"TrackingConfig",
-          "documentation":"<p>Object that determines whether tracking should be used during a contact executed with this <code>Config</code> in the mission profile. </p>"
-        },
-        "uplinkEchoConfig":{
-          "shape":"UplinkEchoConfig",
-          "documentation":"<p>Information about an uplink echo <code>Config</code>.</p> <p>Parameters from the <code>AntennaUplinkConfig</code>, corresponding to the specified <code>AntennaUplinkConfigArn</code>, are used when this <code>UplinkEchoConfig</code> is used in a contact.</p>"
         }
       },
       "documentation":"<p>Object containing the parameters of a <code>Config</code>.</p> <p>See the subtype definitions for what each type of <code>Config</code> contains.</p>",
@@ -988,13 +1146,13 @@
       "type":"structure",
       "required":["socketAddress"],
       "members":{
-        "mtu":{
-          "shape":"Integer",
-          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
-        },
         "socketAddress":{
           "shape":"SocketAddress",
           "documentation":"<p>A socket address.</p>"
+        },
+        "mtu":{
+          "shape":"Integer",
+          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
         }
       },
       "documentation":"<p>Egress address of AgentEndpoint with an optional mtu.</p>"
@@ -1006,61 +1164,65 @@
           "shape":"Uuid",
           "documentation":"<p>UUID of a contact.</p>"
         },
-        "contactStatus":{
-          "shape":"ContactStatus",
-          "documentation":"<p>Status of a contact.</p>"
+        "missionProfileArn":{
+          "shape":"MissionProfileArn",
+          "documentation":"<p>ARN of a mission profile.</p>"
+        },
+        "satelliteArn":{
+          "shape":"satelliteArn",
+          "documentation":"<p>ARN of a satellite.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Start time of a contact in UTC.</p>"
         },
         "endTime":{
           "shape":"Timestamp",
           "documentation":"<p>End time of a contact in UTC.</p>"
         },
-        "errorMessage":{
-          "shape":"String",
-          "documentation":"<p>Error message of a contact.</p>"
+        "prePassStartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
+        },
+        "postPassEndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
         },
         "groundStation":{
           "shape":"String",
           "documentation":"<p>Name of a ground station.</p>"
         },
+        "contactStatus":{
+          "shape":"ContactStatus",
+          "documentation":"<p>Status of a contact.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>Error message of a contact.</p>"
+        },
         "maximumElevation":{
           "shape":"Elevation",
           "documentation":"<p>Maximum elevation angle of a contact.</p>"
         },
-        "missionProfileArn":{
-          "shape":"MissionProfileArn",
-          "documentation":"<p>ARN of a mission profile.</p>"
-        },
-        "postPassEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
-        },
-        "prePassStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
-        },
         "region":{
           "shape":"String",
           "documentation":"<p>Region of a contact.</p>"
         },
-        "satelliteArn":{
-          "shape":"satelliteArn",
-          "documentation":"<p>ARN of a satellite.</p>"
-        },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>Start time of a contact in UTC.</p>"
-        },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags assigned to a contact.</p>"
         },
+        "visibilityStartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> Projected time in UTC your satellite will rise above the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. <i>This field is not present for contacts with a <code>SCHEDULING</code> or <code>SCHEDULED</code> status.</i> </p>"
+        },
         "visibilityEndTime":{
           "shape":"Timestamp",
           "documentation":"<p> Projected time in UTC your satellite will set below the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. <i>This field is not present for contacts with a <code>SCHEDULING</code> or <code>SCHEDULED</code> status.</i> </p>"
         },
-        "visibilityStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p> Projected time in UTC your satellite will rise above the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. <i>This field is not present for contacts with a <code>SCHEDULING</code> or <code>SCHEDULED</code> status.</i> </p>"
+        "ephemeris":{
+          "shape":"EphemerisResponseData",
+          "documentation":"<p>The ephemeris that determines antenna pointing for the contact.</p>"
         }
       },
       "documentation":"<p>Data describing a contact.</p>"
@@ -1082,36 +1244,36 @@
     "ContactStatus":{
       "type":"string",
       "enum":[
-        "AVAILABLE",
-        "AWS_CANCELLED",
-        "AWS_FAILED",
-        "CANCELLED",
-        "CANCELLING",
-        "COMPLETED",
-        "FAILED",
+        "SCHEDULING",
         "FAILED_TO_SCHEDULE",
+        "SCHEDULED",
+        "CANCELLED",
+        "AWS_CANCELLED",
+        "PREPASS",
         "PASS",
         "POSTPASS",
-        "PREPASS",
-        "SCHEDULED",
-        "SCHEDULING"
+        "COMPLETED",
+        "FAILED",
+        "AVAILABLE",
+        "CANCELLING",
+        "AWS_FAILED"
       ]
     },
     "CreateConfigRequest":{
       "type":"structure",
       "required":[
-        "configData",
-        "name"
+        "name",
+        "configData"
       ],
       "members":{
-        "configData":{
-          "shape":"ConfigTypeData",
-          "documentation":"<p>Parameters of a <code>Config</code>.</p>"
-        },
         "name":{
           "shape":"SafeName",
           "documentation":"<p>Name of a <code>Config</code>.</p>"
         },
+        "configData":{
+          "shape":"ConfigTypeData",
+          "documentation":"<p>Parameters of a <code>Config</code>.</p>"
+        },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags assigned to a <code>Config</code>.</p>"
@@ -1123,59 +1285,108 @@
       "type":"structure",
       "required":["endpointDetails"],
       "members":{
+        "endpointDetails":{
+          "shape":"EndpointDetailsList",
+          "documentation":"<p>Endpoint details of each endpoint in the dataflow endpoint group. All dataflow endpoints within a single dataflow endpoint group must be of the same type. You cannot mix <a href=\"https://docs.aws.amazon.com/ground-station/latest/APIReference/API_AwsGroundStationAgentEndpoint.html\"> AWS Ground Station Agent endpoints</a> with <a href=\"https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DataflowEndpoint.html\">Dataflow endpoints</a> in the same group. If your use case requires both types of endpoints, you must create separate dataflow endpoint groups for each type. </p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Tags of a dataflow endpoint group.</p>"
+        },
+        "contactPrePassDurationSeconds":{
+          "shape":"DataflowEndpointGroupDurationInSeconds",
+          "documentation":"<p>Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a <code>PREPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>PREPASS</code> state.</p>"
+        },
         "contactPostPassDurationSeconds":{
           "shape":"DataflowEndpointGroupDurationInSeconds",
           "documentation":"<p>Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a <code>POSTPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>POSTPASS</code> state.</p>"
+        }
+      },
+      "documentation":"<p/>"
+    },
+    "CreateDataflowEndpointGroupV2Request":{
+      "type":"structure",
+      "required":["endpoints"],
+      "members":{
+        "endpoints":{
+          "shape":"CreateEndpointDetailsList",
+          "documentation":"<p>Dataflow endpoint group's endpoint definitions</p>"
         },
         "contactPrePassDurationSeconds":{
           "shape":"DataflowEndpointGroupDurationInSeconds",
           "documentation":"<p>Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a <code>PREPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>PREPASS</code> state.</p>"
         },
-        "endpointDetails":{
-          "shape":"EndpointDetailsList",
-          "documentation":"<p>Endpoint details of each endpoint in the dataflow endpoint group.</p>"
+        "contactPostPassDurationSeconds":{
+          "shape":"DataflowEndpointGroupDurationInSeconds",
+          "documentation":"<p>Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a <code>POSTPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>POSTPASS</code> state.</p>"
         },
         "tags":{
           "shape":"TagsMap",
-          "documentation":"<p>Tags of a dataflow endpoint group.</p>"
+          "documentation":"<p>Tags of a V2 dataflow endpoint group.</p>"
+        }
+      }
+    },
+    "CreateDataflowEndpointGroupV2Response":{
+      "type":"structure",
+      "members":{
+        "dataflowEndpointGroupId":{
+          "shape":"Uuid",
+          "documentation":"<p>Dataflow endpoint group ID</p>"
+        }
+      }
+    },
+    "CreateEndpointDetails":{
+      "type":"structure",
+      "members":{
+        "uplinkAwsGroundStationAgentEndpoint":{
+          "shape":"UplinkAwsGroundStationAgentEndpoint",
+          "documentation":"<p>Definition for an uplink agent endpoint</p>"
+        },
+        "downlinkAwsGroundStationAgentEndpoint":{
+          "shape":"DownlinkAwsGroundStationAgentEndpoint",
+          "documentation":"<p>Definition for a downlink agent endpoint</p>"
         }
       },
-      "documentation":"<p/>"
+      "documentation":"<p>Endpoint definition used for creating a dataflow endpoint</p>",
+      "union":true
+    },
+    "CreateEndpointDetailsList":{
+      "type":"list",
+      "member":{"shape":"CreateEndpointDetails"},
+      "max":12,
+      "min":1
     },
     "CreateEphemerisRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "satelliteId"
-      ],
+      "required":["name"],
       "members":{
+        "satelliteId":{
+          "shape":"Uuid",
+          "documentation":"<p>The satellite ID that associates this ephemeris with a satellite in AWS Ground Station.</p>"
+        },
         "enabled":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to set the ephemeris status to <code>ENABLED</code> after validation.</p> <p>Setting this to false will set the ephemeris status to <code>DISABLED</code> after validation.</p>"
+          "documentation":"<p>Set to <code>true</code> to enable the ephemeris after validation. Set to <code>false</code> to keep it disabled.</p>"
         },
-        "ephemeris":{
-          "shape":"EphemerisData",
-          "documentation":"<p>Ephemeris data.</p>"
+        "priority":{
+          "shape":"CustomerEphemerisPriority",
+          "documentation":"<p>A priority score that determines which ephemeris to use when multiple ephemerides overlap.</p> <p>Higher numbers take precedence. The default is 1. Must be 1 or greater.</p>"
         },
         "expirationTime":{
           "shape":"Timestamp",
           "documentation":"<p>An overall expiration time for the ephemeris in UTC, after which it will become <code>EXPIRED</code>.</p>"
         },
-        "kmsKeyArn":{
-          "shape":"KeyArn",
-          "documentation":"<p>The ARN of a KMS key used to encrypt the ephemeris in Ground Station.</p>"
-        },
         "name":{
           "shape":"SafeName",
-          "documentation":"<p>A name string associated with the ephemeris. Used as a human-readable identifier for the ephemeris.</p>"
+          "documentation":"<p>A name that you can use to identify the ephemeris.</p>"
         },
-        "priority":{
-          "shape":"CustomerEphemerisPriority",
-          "documentation":"<p>Customer-provided priority score to establish the order in which overlapping ephemerides should be used.</p> <p>The default for customer-provided ephemeris priority is 1, and higher numbers take precedence.</p> <p>Priority must be 1 or greater</p>"
+        "kmsKeyArn":{
+          "shape":"KeyArn",
+          "documentation":"<p>The ARN of the KMS key to use for encrypting the ephemeris.</p>"
         },
-        "satelliteId":{
-          "shape":"Uuid",
-          "documentation":"<p>AWS Ground Station satellite ID for this ephemeris.</p>"
+        "ephemeris":{
+          "shape":"EphemerisData",
+          "documentation":"<p>Ephemeris data.</p>"
         },
         "tags":{
           "shape":"TagsMap",
@@ -1186,31 +1397,39 @@
     "CreateMissionProfileRequest":{
       "type":"structure",
       "required":[
-        "dataflowEdges",
-        "minimumViableContactDurationSeconds",
         "name",
+        "minimumViableContactDurationSeconds",
+        "dataflowEdges",
         "trackingConfigArn"
       ],
       "members":{
-        "contactPostPassDurationSeconds":{
-          "shape":"DurationInSeconds",
-          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a Ground Station Contact State Change event indicating the pass has finished.</p>"
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Name of a mission profile.</p>"
         },
         "contactPrePassDurationSeconds":{
           "shape":"DurationInSeconds",
           "documentation":"<p>Amount of time prior to contact start you’d like to receive a Ground Station Contact State Change event indicating an upcoming pass.</p>"
         },
-        "dataflowEdges":{
-          "shape":"DataflowEdgeList",
-          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
+        "contactPostPassDurationSeconds":{
+          "shape":"DurationInSeconds",
+          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a Ground Station Contact State Change event indicating the pass has finished.</p>"
         },
         "minimumViableContactDurationSeconds":{
           "shape":"PositiveDurationInSeconds",
           "documentation":"<p>Smallest amount of time in seconds that you’d like to see for an available contact. AWS Ground Station will not present you with contacts shorter than this duration.</p>"
         },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>Name of a mission profile.</p>"
+        "dataflowEdges":{
+          "shape":"DataflowEdgeList",
+          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
+        },
+        "trackingConfigArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Tags assigned to a mission profile.</p>"
         },
         "streamsKmsKey":{
           "shape":"KmsKey",
@@ -1219,14 +1438,6 @@
         "streamsKmsRole":{
           "shape":"RoleArn",
           "documentation":"<p>Role to use for encrypting streams with KMS key.</p>"
-        },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>Tags assigned to a mission profile.</p>"
-        },
-        "trackingConfigArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -1234,9 +1445,9 @@
     "Criticality":{
       "type":"string",
       "enum":[
+        "REQUIRED",
         "PREFERRED",
-        "REMOVED",
-        "REQUIRED"
+        "REMOVED"
       ]
     },
     "CustomerEphemerisPriority":{
@@ -1248,12 +1459,12 @@
     "DataflowDetail":{
       "type":"structure",
       "members":{
+        "source":{"shape":"Source"},
         "destination":{"shape":"Destination"},
         "errorMessage":{
           "shape":"String",
           "documentation":"<p>Error message for a dataflow.</p>"
-        },
-        "source":{"shape":"Source"}
+        }
       },
       "documentation":"<p>Information about a dataflow edge used in a contact.</p>"
     },
@@ -1272,21 +1483,21 @@
     "DataflowEndpoint":{
       "type":"structure",
       "members":{
-        "address":{
-          "shape":"SocketAddress",
-          "documentation":"<p>Socket address of a dataflow endpoint.</p>"
-        },
-        "mtu":{
-          "shape":"DataflowEndpointMtuInteger",
-          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
-        },
         "name":{
           "shape":"SafeName",
           "documentation":"<p>Name of a dataflow endpoint.</p>"
         },
+        "address":{
+          "shape":"SocketAddress",
+          "documentation":"<p>Socket address of a dataflow endpoint.</p>"
+        },
         "status":{
           "shape":"EndpointStatus",
           "documentation":"<p>Status of a dataflow endpoint.</p>"
+        },
+        "mtu":{
+          "shape":"DataflowEndpointMtuInteger",
+          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
         }
       },
       "documentation":"<p>Information about a dataflow endpoint.</p>"
@@ -1306,12 +1517,17 @@
       },
       "documentation":"<p>Information about the dataflow endpoint <code>Config</code>.</p>"
     },
-    "DataflowEndpointGroupArn":{"type":"string"},
+    "DataflowEndpointGroupArn":{
+      "type":"string",
+      "max":146,
+      "min":97,
+      "pattern":"arn:aws:groundstation:[-a-z0-9]{1,50}:[0-9]{12}:dataflow-endpoint-group/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "DataflowEndpointGroupDurationInSeconds":{
       "type":"integer",
       "box":true,
       "max":480,
-      "min":120
+      "min":30
     },
     "DataflowEndpointGroupIdResponse":{
       "type":"structure",
@@ -1330,13 +1546,13 @@
     "DataflowEndpointListItem":{
       "type":"structure",
       "members":{
-        "dataflowEndpointGroupArn":{
-          "shape":"DataflowEndpointGroupArn",
-          "documentation":"<p>ARN of a dataflow endpoint group.</p>"
-        },
         "dataflowEndpointGroupId":{
           "shape":"Uuid",
           "documentation":"<p>UUID of a dataflow endpoint group.</p>"
+        },
+        "dataflowEndpointGroupArn":{
+          "shape":"DataflowEndpointGroupArn",
+          "documentation":"<p>ARN of a dataflow endpoint group.</p>"
         }
       },
       "documentation":"<p>Item in a list of <code>DataflowEndpoint</code> groups.</p>"
@@ -1467,65 +1683,73 @@
           "shape":"Uuid",
           "documentation":"<p>UUID of a contact.</p>"
         },
-        "contactStatus":{
-          "shape":"ContactStatus",
-          "documentation":"<p>Status of a contact.</p>"
+        "missionProfileArn":{
+          "shape":"MissionProfileArn",
+          "documentation":"<p>ARN of a mission profile.</p>"
         },
-        "dataflowList":{
-          "shape":"DataflowList",
-          "documentation":"<p>List describing source and destination details for each dataflow edge.</p>"
+        "satelliteArn":{
+          "shape":"satelliteArn",
+          "documentation":"<p>ARN of a satellite.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Start time of a contact in UTC.</p>"
         },
         "endTime":{
           "shape":"Timestamp",
           "documentation":"<p>End time of a contact in UTC.</p>"
         },
-        "errorMessage":{
-          "shape":"String",
-          "documentation":"<p>Error message for a contact.</p>"
+        "prePassStartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
+        },
+        "postPassEndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
         },
         "groundStation":{
           "shape":"String",
           "documentation":"<p>Ground station for a contact.</p>"
         },
+        "contactStatus":{
+          "shape":"ContactStatus",
+          "documentation":"<p>Status of a contact.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>Error message for a contact.</p>"
+        },
         "maximumElevation":{
           "shape":"Elevation",
           "documentation":"<p>Maximum elevation angle of a contact.</p>"
         },
-        "missionProfileArn":{
-          "shape":"MissionProfileArn",
-          "documentation":"<p>ARN of a mission profile.</p>"
-        },
-        "postPassEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
-        },
-        "prePassStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Tags assigned to a contact.</p>"
         },
         "region":{
           "shape":"String",
           "documentation":"<p>Region of a contact.</p>"
         },
-        "satelliteArn":{
-          "shape":"satelliteArn",
-          "documentation":"<p>ARN of a satellite.</p>"
+        "dataflowList":{
+          "shape":"DataflowList",
+          "documentation":"<p>List describing source and destination details for each dataflow edge.</p>"
         },
-        "startTime":{
+        "visibilityStartTime":{
           "shape":"Timestamp",
-          "documentation":"<p>Start time of a contact in UTC.</p>"
-        },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>Tags assigned to a contact.</p>"
+          "documentation":"<p> Projected time in UTC your satellite will rise above the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. </p>"
         },
         "visibilityEndTime":{
           "shape":"Timestamp",
           "documentation":"<p> Projected time in UTC your satellite will set below the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. </p>"
         },
-        "visibilityStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p> Projected time in UTC your satellite will rise above the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/site-masks.html\">receive mask</a>. This time is based on the satellite's current active ephemeris for future contacts and the ephemeris that was active during contact execution for completed contacts. </p>"
+        "trackingOverrides":{
+          "shape":"TrackingOverrides",
+          "documentation":"<p>Tracking configuration overrides specified when the contact was reserved.</p>"
+        },
+        "ephemeris":{
+          "shape":"EphemerisResponseData",
+          "documentation":"<p>The ephemeris that determines antenna pointing directions for the contact.</p>"
         }
       },
       "documentation":"<p/>"
@@ -1545,30 +1769,10 @@
     "DescribeEphemerisResponse":{
       "type":"structure",
       "members":{
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the ephemeris was uploaded in UTC.</p>"
-        },
-        "enabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether or not the ephemeris is enabled.</p>"
-        },
         "ephemerisId":{
           "shape":"Uuid",
           "documentation":"<p>The AWS Ground Station ephemeris ID.</p>"
         },
-        "invalidReason":{
-          "shape":"EphemerisInvalidReason",
-          "documentation":"<p>Reason that an ephemeris failed validation. Only provided for ephemerides with <code>INVALID</code> status.</p>"
-        },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>A name string associated with the ephemeris. Used as a human-readable identifier for the ephemeris.</p>"
-        },
-        "priority":{
-          "shape":"EphemerisPriority",
-          "documentation":"<p>Customer-provided priority score to establish the order in which overlapping ephemerides should be used.</p> <p>The default for customer-provided ephemeris priority is 1, and higher numbers take precedence.</p> <p>Priority must be 1 or greater</p>"
-        },
         "satelliteId":{
           "shape":"Uuid",
           "documentation":"<p>The AWS Ground Station satellite ID associated with ephemeris.</p>"
@@ -1577,30 +1781,54 @@
           "shape":"EphemerisStatus",
           "documentation":"<p>The status of the ephemeris.</p>"
         },
-        "suppliedData":{
-          "shape":"EphemerisTypeDescription",
-          "documentation":"<p>Supplied ephemeris data.</p>"
+        "priority":{
+          "shape":"EphemerisPriority",
+          "documentation":"<p>A priority score that determines which ephemeris to use when multiple ephemerides overlap.</p> <p>Higher numbers take precedence. The default is 1. Must be 1 or greater.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the ephemeris was uploaded in UTC.</p>"
+        },
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether or not the ephemeris is enabled.</p>"
+        },
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>A name that you can use to identify the ephemeris.</p>"
         },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags assigned to an ephemeris.</p>"
+        },
+        "suppliedData":{
+          "shape":"EphemerisTypeDescription",
+          "documentation":"<p>Supplied ephemeris data.</p>"
+        },
+        "invalidReason":{
+          "shape":"EphemerisInvalidReason",
+          "documentation":"<p>Reason that an ephemeris failed validation. Appears only when the status is <code>INVALID</code>.</p>"
+        },
+        "errorReasons":{
+          "shape":"EphemerisErrorReasonList",
+          "documentation":"<p>Detailed error information for ephemerides with <code>INVALID</code> status.</p> <p>Provides specific error codes and messages to help diagnose validation failures.</p>"
         }
       }
     },
     "Destination":{
       "type":"structure",
       "members":{
-        "configDetails":{
-          "shape":"ConfigDetails",
-          "documentation":"<p>Additional details for a <code>Config</code>, if type is dataflow endpoint or antenna demod decode.</p>"
+        "configType":{
+          "shape":"ConfigCapabilityType",
+          "documentation":"<p>Type of a <code>Config</code>.</p>"
         },
         "configId":{
           "shape":"Uuid",
           "documentation":"<p>UUID of a <code>Config</code>.</p>"
         },
-        "configType":{
-          "shape":"ConfigCapabilityType",
-          "documentation":"<p>Type of a <code>Config</code>.</p>"
+        "configDetails":{
+          "shape":"ConfigDetails",
+          "documentation":"<p>Additional details for a <code>Config</code>, if type is dataflow endpoint or antenna demod decode.</p>"
         },
         "dataflowDestinationRegion":{
           "shape":"String",
@@ -1612,22 +1840,22 @@
     "DiscoveryData":{
       "type":"structure",
       "required":[
-        "capabilityArns",
+        "publicIpAddresses",
         "privateIpAddresses",
-        "publicIpAddresses"
+        "capabilityArns"
       ],
       "members":{
-        "capabilityArns":{
-          "shape":"CapabilityArnList",
-          "documentation":"<p>List of capabilities to associate with agent.</p>"
+        "publicIpAddresses":{
+          "shape":"IpAddressList",
+          "documentation":"<p>List of public IP addresses to associate with agent.</p>"
         },
         "privateIpAddresses":{
           "shape":"IpAddressList",
           "documentation":"<p>List of private IP addresses to associate with agent.</p>"
         },
-        "publicIpAddresses":{
-          "shape":"IpAddressList",
-          "documentation":"<p>List of public IP addresses to associate with agent.</p>"
+        "capabilityArns":{
+          "shape":"CapabilityArnList",
+          "documentation":"<p>List of capabilities to associate with agent.</p>"
         }
       },
       "documentation":"<p>Data for agent discovery.</p>"
@@ -1636,6 +1864,73 @@
       "type":"double",
       "box":true
     },
+    "DownlinkAwsGroundStationAgentEndpoint":{
+      "type":"structure",
+      "required":[
+        "name",
+        "dataflowDetails"
+      ],
+      "members":{
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Downlink dataflow endpoint name</p>"
+        },
+        "dataflowDetails":{
+          "shape":"DownlinkDataflowDetails",
+          "documentation":"<p>Dataflow details for the downlink endpoint</p>"
+        }
+      },
+      "documentation":"<p>Definition for a downlink agent endpoint</p>"
+    },
+    "DownlinkAwsGroundStationAgentEndpointDetails":{
+      "type":"structure",
+      "required":[
+        "name",
+        "dataflowDetails"
+      ],
+      "members":{
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Downlink dataflow endpoint name</p>"
+        },
+        "dataflowDetails":{
+          "shape":"DownlinkDataflowDetails",
+          "documentation":"<p>Dataflow details for the downlink endpoint</p>"
+        },
+        "agentStatus":{
+          "shape":"AgentStatus",
+          "documentation":"<p>Status of the agent associated with the downlink dataflow endpoint</p>"
+        },
+        "auditResults":{
+          "shape":"AuditResults",
+          "documentation":"<p>Health audit results for the downlink dataflow endpoint</p>"
+        }
+      },
+      "documentation":"<p>Details for a downlink agent endpoint</p>"
+    },
+    "DownlinkConnectionDetails":{
+      "type":"structure",
+      "required":[
+        "agentIpAndPortAddress",
+        "egressAddressAndPort"
+      ],
+      "members":{
+        "agentIpAndPortAddress":{"shape":"RangedConnectionDetails"},
+        "egressAddressAndPort":{"shape":"ConnectionDetails"}
+      },
+      "documentation":"<p>Connection details for Ground Station to Agent and Agent to customer</p>"
+    },
+    "DownlinkDataflowDetails":{
+      "type":"structure",
+      "members":{
+        "agentConnectionDetails":{
+          "shape":"DownlinkConnectionDetails",
+          "documentation":"<p>Downlink connection details for customer to Agent and Agent to Ground Station</p>"
+        }
+      },
+      "documentation":"<p>Dataflow details for a downlink endpoint</p>",
+      "union":true
+    },
     "DurationInSeconds":{
       "type":"integer",
       "box":true,
@@ -1645,17 +1940,17 @@
     "Eirp":{
       "type":"structure",
       "required":[
-        "units",
-        "value"
+        "value",
+        "units"
       ],
       "members":{
-        "units":{
-          "shape":"EirpUnits",
-          "documentation":"<p>Units of an EIRP.</p>"
-        },
         "value":{
           "shape":"Double",
           "documentation":"<p>Value of an EIRP. Valid values are between 20.0 to 50.0 dBW.</p>"
+        },
+        "units":{
+          "shape":"EirpUnits",
+          "documentation":"<p>Units of an EIRP.</p>"
         }
       },
       "documentation":"<p>Object that represents EIRP.</p>"
@@ -1667,17 +1962,17 @@
     "Elevation":{
       "type":"structure",
       "required":[
-        "unit",
-        "value"
+        "value",
+        "unit"
       ],
       "members":{
-        "unit":{
-          "shape":"AngleUnits",
-          "documentation":"<p>Elevation angle units.</p>"
-        },
         "value":{
           "shape":"Double",
           "documentation":"<p>Elevation angle value.</p>"
+        },
+        "unit":{
+          "shape":"AngleUnits",
+          "documentation":"<p>Elevation angle units.</p>"
         }
       },
       "documentation":"<p>Elevation angle of the satellite in the sky during a contact.</p>"
@@ -1685,25 +1980,33 @@
     "EndpointDetails":{
       "type":"structure",
       "members":{
-        "awsGroundStationAgentEndpoint":{
-          "shape":"AwsGroundStationAgentEndpoint",
-          "documentation":"<p>An agent endpoint.</p>"
+        "securityDetails":{
+          "shape":"SecurityDetails",
+          "documentation":"<p>Endpoint security details including a list of subnets, a list of security groups and a role to connect streams to instances.</p>"
         },
         "endpoint":{
           "shape":"DataflowEndpoint",
           "documentation":"<p>A dataflow endpoint.</p>"
         },
-        "healthReasons":{
-          "shape":"CapabilityHealthReasonList",
-          "documentation":"<p>Health reasons for a dataflow endpoint. This field is ignored when calling <code>CreateDataflowEndpointGroup</code>.</p>"
+        "awsGroundStationAgentEndpoint":{
+          "shape":"AwsGroundStationAgentEndpoint",
+          "documentation":"<p>An agent endpoint.</p>"
+        },
+        "uplinkAwsGroundStationAgentEndpoint":{
+          "shape":"UplinkAwsGroundStationAgentEndpointDetails",
+          "documentation":"<p>Definition for an uplink agent endpoint</p>"
+        },
+        "downlinkAwsGroundStationAgentEndpoint":{
+          "shape":"DownlinkAwsGroundStationAgentEndpointDetails",
+          "documentation":"<p>Definition for a downlink agent endpoint</p>"
         },
         "healthStatus":{
           "shape":"CapabilityHealth",
           "documentation":"<p>A dataflow endpoint health status. This field is ignored when calling <code>CreateDataflowEndpointGroup</code>.</p>"
         },
-        "securityDetails":{
-          "shape":"SecurityDetails",
-          "documentation":"<p>Endpoint security details including a list of subnets, a list of security groups and a role to connect streams to instances.</p>"
+        "healthReasons":{
+          "shape":"CapabilityHealthReasonList",
+          "documentation":"<p>Health reasons for a dataflow endpoint. This field is ignored when calling <code>CreateDataflowEndpointGroup</code>.</p>"
         }
       },
       "documentation":"<p>Information about the endpoint details.</p>"
@@ -1733,8 +2036,9 @@
     "EphemerisData":{
       "type":"structure",
       "members":{
+        "tle":{"shape":"TLEEphemeris"},
         "oem":{"shape":"OEMEphemeris"},
-        "tle":{"shape":"TLEEphemeris"}
+        "azEl":{"shape":"AzElEphemeris"}
       },
       "documentation":"<p>Ephemeris data.</p>",
       "union":true
@@ -1742,17 +2046,95 @@
     "EphemerisDescription":{
       "type":"structure",
       "members":{
+        "sourceS3Object":{
+          "shape":"S3Object",
+          "documentation":"<p>Source Amazon S3 object used for the ephemeris.</p>"
+        },
         "ephemerisData":{
           "shape":"UnboundedString",
           "documentation":"<p>Supplied ephemeris data.</p>"
-        },
-        "sourceS3Object":{
-          "shape":"S3Object",
-          "documentation":"<p>Source S3 object used for the ephemeris.</p>"
         }
       },
       "documentation":"<p>Description of ephemeris.</p>"
     },
+    "EphemerisErrorCode":{
+      "type":"string",
+      "enum":[
+        "INTERNAL_ERROR",
+        "MISMATCHED_SATCAT_ID",
+        "OEM_VERSION_UNSUPPORTED",
+        "ORIGINATOR_MISSING",
+        "CREATION_DATE_MISSING",
+        "OBJECT_NAME_MISSING",
+        "OBJECT_ID_MISSING",
+        "REF_FRAME_UNSUPPORTED",
+        "REF_FRAME_EPOCH_UNSUPPORTED",
+        "TIME_SYSTEM_UNSUPPORTED",
+        "CENTER_BODY_UNSUPPORTED",
+        "INTERPOLATION_MISSING",
+        "INTERPOLATION_DEGREE_INVALID",
+        "AZ_EL_SEGMENT_LIST_MISSING",
+        "INSUFFICIENT_TIME_AZ_EL",
+        "START_TIME_IN_FUTURE",
+        "END_TIME_IN_PAST",
+        "EXPIRATION_TIME_TOO_EARLY",
+        "START_TIME_METADATA_TOO_EARLY",
+        "STOP_TIME_METADATA_TOO_LATE",
+        "AZ_EL_SEGMENT_END_TIME_BEFORE_START_TIME",
+        "AZ_EL_SEGMENT_TIMES_OVERLAP",
+        "AZ_EL_SEGMENTS_OUT_OF_ORDER",
+        "TIME_AZ_EL_ITEMS_OUT_OF_ORDER",
+        "MEAN_MOTION_INVALID",
+        "TIME_AZ_EL_AZ_RADIAN_RANGE_INVALID",
+        "TIME_AZ_EL_EL_RADIAN_RANGE_INVALID",
+        "TIME_AZ_EL_AZ_DEGREE_RANGE_INVALID",
+        "TIME_AZ_EL_EL_DEGREE_RANGE_INVALID",
+        "TIME_AZ_EL_ANGLE_UNITS_INVALID",
+        "INSUFFICIENT_KMS_PERMISSIONS",
+        "FILE_FORMAT_INVALID",
+        "AZ_EL_SEGMENT_REFERENCE_EPOCH_INVALID",
+        "AZ_EL_SEGMENT_START_TIME_INVALID",
+        "AZ_EL_SEGMENT_END_TIME_INVALID",
+        "AZ_EL_SEGMENT_VALID_TIME_RANGE_INVALID",
+        "AZ_EL_SEGMENT_END_TIME_TOO_LATE",
+        "AZ_EL_TOTAL_DURATION_EXCEEDED"
+      ]
+    },
+    "EphemerisErrorReason":{
+      "type":"structure",
+      "required":[
+        "errorCode",
+        "errorMessage"
+      ],
+      "members":{
+        "errorCode":{
+          "shape":"EphemerisErrorCode",
+          "documentation":"<p>The error code identifying the type of validation failure.</p> <p>See the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/troubleshooting-invalid-ephemerides.html\">Troubleshooting Invalid Ephemerides guide</a> for error code details.</p>"
+        },
+        "errorMessage":{
+          "shape":"ErrorString",
+          "documentation":"<p>A human-readable message describing the validation failure.</p> <p>Provides specific details about what failed and may include suggestions for remediation.</p>"
+        }
+      },
+      "documentation":"<p>Detailed error information for ephemeris validation failures.</p> <p>Provides an error code and descriptive message to help diagnose and resolve validation issues.</p>"
+    },
+    "EphemerisErrorReasonList":{
+      "type":"list",
+      "member":{"shape":"EphemerisErrorReason"},
+      "max":50,
+      "min":1
+    },
+    "EphemerisFilter":{
+      "type":"structure",
+      "members":{
+        "azEl":{
+          "shape":"AzElEphemerisFilter",
+          "documentation":"<p>Filter for <a>AzElEphemeris</a>.</p>"
+        }
+      },
+      "documentation":"<p>Filter for selecting contacts that use a specific ephemeris\".</p>",
+      "union":true
+    },
     "EphemerisIdResponse":{
       "type":"structure",
       "members":{
@@ -1775,33 +2157,37 @@
     "EphemerisItem":{
       "type":"structure",
       "members":{
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the ephemeris was uploaded in UTC.</p>"
+        "ephemerisId":{
+          "shape":"Uuid",
+          "documentation":"<p>The AWS Ground Station ephemeris ID.</p>"
+        },
+        "ephemerisType":{
+          "shape":"EphemerisType",
+          "documentation":"<p>The type of ephemeris.</p>"
+        },
+        "status":{
+          "shape":"EphemerisStatus",
+          "documentation":"<p>The status of the ephemeris.</p>"
+        },
+        "priority":{
+          "shape":"EphemerisPriority",
+          "documentation":"<p>A priority score that determines which ephemeris to use when multiple ephemerides overlap.</p> <p>Higher numbers take precedence. The default is 1. Must be 1 or greater.</p>"
         },
         "enabled":{
           "shape":"Boolean",
           "documentation":"<p>Whether or not the ephemeris is enabled.</p>"
         },
-        "ephemerisId":{
-          "shape":"Uuid",
-          "documentation":"<p>The AWS Ground Station ephemeris ID.</p>"
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the ephemeris was uploaded in UTC.</p>"
         },
         "name":{
           "shape":"SafeName",
-          "documentation":"<p>A name string associated with the ephemeris. Used as a human-readable identifier for the ephemeris.</p>"
-        },
-        "priority":{
-          "shape":"EphemerisPriority",
-          "documentation":"<p>Customer-provided priority score to establish the order in which overlapping ephemerides should be used.</p> <p>The default for customer-provided ephemeris priority is 1, and higher numbers take precedence.</p> <p>Priority must be 1 or greater</p>"
+          "documentation":"<p>A name that you can use to identify the ephemeris.</p>"
         },
         "sourceS3Object":{
           "shape":"S3Object",
-          "documentation":"<p>Source S3 object used for the ephemeris.</p>"
-        },
-        "status":{
-          "shape":"EphemerisStatus",
-          "documentation":"<p>The status of the ephemeris.</p>"
+          "documentation":"<p>Source Amazon S3 object used for the ephemeris.</p>"
         }
       },
       "documentation":"<p>Ephemeris item.</p>"
@@ -1810,6 +2196,10 @@
       "type":"structure",
       "required":["source"],
       "members":{
+        "source":{
+          "shape":"EphemerisSource",
+          "documentation":"<p>The <code>EphemerisSource</code> that generated a given ephemeris.</p>"
+        },
         "ephemerisId":{
           "shape":"Uuid",
           "documentation":"<p>UUID of a customer-provided ephemeris.</p> <p>This field is not populated for default ephemerides from Space Track.</p>"
@@ -1821,10 +2211,6 @@
         "name":{
           "shape":"SafeName",
           "documentation":"<p>A name string associated with the ephemeris. Used as a human-readable identifier for the ephemeris.</p> <p>A name is only returned for customer-provider ephemerides that have a name associated.</p>"
-        },
-        "source":{
-          "shape":"EphemerisSource",
-          "documentation":"<p>The <code>EphemerisSource</code> that generated a given ephemeris.</p>"
         }
       },
       "documentation":"<p>Metadata describing a particular ephemeris.</p>"
@@ -1835,6 +2221,21 @@
       "max":99999,
       "min":0
     },
+    "EphemerisResponseData":{
+      "type":"structure",
+      "required":["ephemerisType"],
+      "members":{
+        "ephemerisId":{
+          "shape":"Uuid",
+          "documentation":"<p>Unique identifier of the ephemeris. Appears only for custom ephemerides.</p>"
+        },
+        "ephemerisType":{
+          "shape":"EphemerisType",
+          "documentation":"<p>Type of ephemeris.</p>"
+        }
+      },
+      "documentation":"<p>Ephemeris data for a contact.</p>"
+    },
     "EphemerisSource":{
       "type":"string",
       "enum":[
@@ -1859,29 +2260,44 @@
       "max":500,
       "min":0
     },
+    "EphemerisType":{
+      "type":"string",
+      "enum":[
+        "TLE",
+        "OEM",
+        "AZ_EL",
+        "SERVICE_MANAGED"
+      ]
+    },
     "EphemerisTypeDescription":{
       "type":"structure",
       "members":{
+        "tle":{"shape":"EphemerisDescription"},
         "oem":{"shape":"EphemerisDescription"},
-        "tle":{"shape":"EphemerisDescription"}
+        "azEl":{"shape":"EphemerisDescription"}
       },
       "documentation":"<p/>",
       "union":true
     },
+    "ErrorString":{
+      "type":"string",
+      "max":1000,
+      "min":0
+    },
     "Frequency":{
       "type":"structure",
       "required":[
-        "units",
-        "value"
+        "value",
+        "units"
       ],
       "members":{
-        "units":{
-          "shape":"FrequencyUnits",
-          "documentation":"<p>Frequency units.</p>"
-        },
         "value":{
           "shape":"Double",
           "documentation":"<p>Frequency value. Valid values are between 2200 to 2300 MHz and 7750 to 8400 MHz for downlink and 2025 to 2120 MHz for uplink.</p>"
+        },
+        "units":{
+          "shape":"FrequencyUnits",
+          "documentation":"<p>Frequency units.</p>"
         }
       },
       "documentation":"<p>Object that describes the frequency.</p>"
@@ -1889,17 +2305,17 @@
     "FrequencyBandwidth":{
       "type":"structure",
       "required":[
-        "units",
-        "value"
+        "value",
+        "units"
       ],
       "members":{
-        "units":{
-          "shape":"BandwidthUnits",
-          "documentation":"<p>Frequency bandwidth units.</p>"
-        },
         "value":{
           "shape":"Double",
           "documentation":"<p>Frequency bandwidth value. AWS Ground Station currently has the following bandwidth limitations:</p> <ul> <li> <p>For <code>AntennaDownlinkDemodDecodeconfig</code>, valid values are between 125 kHz to 650 MHz.</p> </li> <li> <p>For <code>AntennaDownlinkconfig</code>, valid values are between 10 kHz to 54 MHz.</p> </li> <li> <p>For <code>AntennaUplinkConfig</code>, valid values are between 10 kHz to 54 MHz.</p> </li> </ul>"
+        },
+        "units":{
+          "shape":"BandwidthUnits",
+          "documentation":"<p>Frequency bandwidth units.</p>"
         }
       },
       "documentation":"<p>Object that describes the frequency bandwidth. </p>"
@@ -1937,6 +2353,49 @@
         }
       }
     },
+    "GetAgentTaskResponseUrlRequest":{
+      "type":"structure",
+      "required":[
+        "agentId",
+        "taskId"
+      ],
+      "members":{
+        "agentId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of agent requesting the response URL.</p>",
+          "location":"uri",
+          "locationName":"agentId"
+        },
+        "taskId":{
+          "shape":"Uuid",
+          "documentation":"<p>GUID of the agent task for which the response URL is being requested.</p>",
+          "location":"uri",
+          "locationName":"taskId"
+        }
+      }
+    },
+    "GetAgentTaskResponseUrlResponse":{
+      "type":"structure",
+      "required":[
+        "agentId",
+        "taskId",
+        "presignedLogUrl"
+      ],
+      "members":{
+        "agentId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of the agent.</p>"
+        },
+        "taskId":{
+          "shape":"Uuid",
+          "documentation":"<p>GUID of the agent task.</p>"
+        },
+        "presignedLogUrl":{
+          "shape":"String",
+          "documentation":"<p>Presigned URL for uploading agent task response logs.</p>"
+        }
+      }
+    },
     "GetConfigRequest":{
       "type":"structure",
       "required":[
@@ -1962,31 +2421,31 @@
     "GetConfigResponse":{
       "type":"structure",
       "required":[
-        "configArn",
-        "configData",
         "configId",
-        "name"
+        "configArn",
+        "name",
+        "configData"
       ],
       "members":{
+        "configId":{
+          "shape":"String",
+          "documentation":"<p>UUID of a <code>Config</code>.</p>"
+        },
         "configArn":{
           "shape":"ConfigArn",
           "documentation":"<p>ARN of a <code>Config</code> </p>"
         },
-        "configData":{
-          "shape":"ConfigTypeData",
-          "documentation":"<p>Data elements in a <code>Config</code>.</p>"
-        },
-        "configId":{
+        "name":{
           "shape":"String",
-          "documentation":"<p>UUID of a <code>Config</code>.</p>"
+          "documentation":"<p>Name of a <code>Config</code>.</p>"
         },
         "configType":{
           "shape":"ConfigCapabilityType",
           "documentation":"<p>Type of a <code>Config</code>.</p>"
         },
-        "name":{
-          "shape":"String",
-          "documentation":"<p>Name of a <code>Config</code>.</p>"
+        "configData":{
+          "shape":"ConfigTypeData",
+          "documentation":"<p>Data elements in a <code>Config</code>.</p>"
         },
         "tags":{
           "shape":"TagsMap",
@@ -2011,22 +2470,14 @@
     "GetDataflowEndpointGroupResponse":{
       "type":"structure",
       "members":{
-        "contactPostPassDurationSeconds":{
-          "shape":"DataflowEndpointGroupDurationInSeconds",
-          "documentation":"<p>Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a <code>POSTPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>POSTPASS</code> state.</p>"
-        },
-        "contactPrePassDurationSeconds":{
-          "shape":"DataflowEndpointGroupDurationInSeconds",
-          "documentation":"<p>Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a <code>PREPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>PREPASS</code> state.</p>"
+        "dataflowEndpointGroupId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of a dataflow endpoint group.</p>"
         },
         "dataflowEndpointGroupArn":{
           "shape":"DataflowEndpointGroupArn",
           "documentation":"<p>ARN of a dataflow endpoint group.</p>"
         },
-        "dataflowEndpointGroupId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID of a dataflow endpoint group.</p>"
-        },
         "endpointsDetails":{
           "shape":"EndpointDetailsList",
           "documentation":"<p>Details of a dataflow endpoint.</p>"
@@ -2034,6 +2485,14 @@
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags assigned to a dataflow endpoint group.</p>"
+        },
+        "contactPrePassDurationSeconds":{
+          "shape":"DataflowEndpointGroupDurationInSeconds",
+          "documentation":"<p>Amount of time, in seconds, before a contact starts that the Ground Station Dataflow Endpoint Group will be in a <code>PREPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>PREPASS</code> state.</p>"
+        },
+        "contactPostPassDurationSeconds":{
+          "shape":"DataflowEndpointGroupDurationInSeconds",
+          "documentation":"<p>Amount of time, in seconds, after a contact ends that the Ground Station Dataflow Endpoint Group will be in a <code>POSTPASS</code> state. A Ground Station Dataflow Endpoint Group State Change event will be emitted when the Dataflow Endpoint Group enters and exits the <code>POSTPASS</code> state.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2059,10 +2518,6 @@
     "GetMinuteUsageResponse":{
       "type":"structure",
       "members":{
-        "estimatedMinutesRemaining":{
-          "shape":"Integer",
-          "documentation":"<p>Estimated number of minutes remaining for an account, specific to the month being requested.</p>"
-        },
         "isReservedMinutesCustomer":{
           "shape":"Boolean",
           "documentation":"<p>Returns whether or not an account has signed up for the reserved minutes pricing plan, specific to the month being requested.</p>"
@@ -2071,13 +2526,17 @@
           "shape":"Integer",
           "documentation":"<p>Total number of reserved minutes allocated, specific to the month being requested.</p>"
         },
+        "upcomingMinutesScheduled":{
+          "shape":"Integer",
+          "documentation":"<p>Upcoming minutes scheduled for an account, specific to the month being requested.</p>"
+        },
         "totalScheduledMinutes":{
           "shape":"Integer",
           "documentation":"<p>Total scheduled minutes for an account, specific to the month being requested.</p>"
         },
-        "upcomingMinutesScheduled":{
+        "estimatedMinutesRemaining":{
           "shape":"Integer",
-          "documentation":"<p>Upcoming minutes scheduled for an account, specific to the month being requested.</p>"
+          "documentation":"<p>Estimated number of minutes remaining for an account, specific to the month being requested.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2098,30 +2557,14 @@
     "GetMissionProfileResponse":{
       "type":"structure",
       "members":{
-        "contactPostPassDurationSeconds":{
-          "shape":"DurationInSeconds",
-          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
-        },
-        "contactPrePassDurationSeconds":{
-          "shape":"DurationInSeconds",
-          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
-        },
-        "dataflowEdges":{
-          "shape":"DataflowEdgeList",
-          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
-        },
-        "minimumViableContactDurationSeconds":{
-          "shape":"PositiveDurationInSeconds",
-          "documentation":"<p>Smallest amount of time in seconds that you’d like to see for an available contact. AWS Ground Station will not present you with contacts shorter than this duration.</p>"
+        "missionProfileId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of a mission profile.</p>"
         },
         "missionProfileArn":{
           "shape":"MissionProfileArn",
           "documentation":"<p>ARN of a mission profile.</p>"
         },
-        "missionProfileId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID of a mission profile.</p>"
-        },
         "name":{
           "shape":"SafeName",
           "documentation":"<p>Name of a mission profile.</p>"
@@ -2130,6 +2573,30 @@
           "shape":"AWSRegion",
           "documentation":"<p>Region of a mission profile.</p>"
         },
+        "contactPrePassDurationSeconds":{
+          "shape":"DurationInSeconds",
+          "documentation":"<p>Amount of time prior to contact start you’d like to receive a CloudWatch event indicating an upcoming pass.</p>"
+        },
+        "contactPostPassDurationSeconds":{
+          "shape":"DurationInSeconds",
+          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a CloudWatch event indicating the pass has finished.</p>"
+        },
+        "minimumViableContactDurationSeconds":{
+          "shape":"PositiveDurationInSeconds",
+          "documentation":"<p>Smallest amount of time in seconds that you’d like to see for an available contact. AWS Ground Station will not present you with contacts shorter than this duration.</p>"
+        },
+        "dataflowEdges":{
+          "shape":"DataflowEdgeList",
+          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
+        },
+        "trackingConfigArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Tags assigned to a mission profile.</p>"
+        },
         "streamsKmsKey":{
           "shape":"KmsKey",
           "documentation":"<p>KMS key to use for encrypting streams.</p>"
@@ -2137,14 +2604,6 @@
         "streamsKmsRole":{
           "shape":"RoleArn",
           "documentation":"<p>Role to use for encrypting streams with KMS key.</p>"
-        },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>Tags assigned to a mission profile.</p>"
-        },
-        "trackingConfigArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2165,25 +2624,25 @@
     "GetSatelliteResponse":{
       "type":"structure",
       "members":{
-        "currentEphemeris":{
-          "shape":"EphemerisMetaData",
-          "documentation":"<p>The current ephemeris being used to compute the trajectory of the satellite.</p>"
+        "satelliteId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of a satellite.</p>"
         },
-        "groundStations":{
-          "shape":"GroundStationIdList",
-          "documentation":"<p>A list of ground stations to which the satellite is on-boarded.</p>"
+        "satelliteArn":{
+          "shape":"satelliteArn",
+          "documentation":"<p>ARN of a satellite.</p>"
         },
         "noradSatelliteID":{
           "shape":"noradSatelliteID",
           "documentation":"<p>NORAD satellite ID number.</p>"
         },
-        "satelliteArn":{
-          "shape":"satelliteArn",
-          "documentation":"<p>ARN of a satellite.</p>"
+        "groundStations":{
+          "shape":"GroundStationIdList",
+          "documentation":"<p>A list of ground stations to which the satellite is on-boarded.</p>"
         },
-        "satelliteId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID of a satellite.</p>"
+        "currentEphemeris":{
+          "shape":"EphemerisMetaData",
+          "documentation":"<p>The current ephemeris being used to compute the trajectory of the satellite.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2220,19 +2679,37 @@
       "type":"string",
       "max":500,
       "min":4,
-      "pattern":"^[ a-zA-Z0-9-._:=]{4,256}$"
+      "pattern":"[ a-zA-Z0-9-._:=]{4,256}"
+    },
+    "ISO8601TimeRange":{
+      "type":"structure",
+      "required":[
+        "startTime",
+        "endTime"
+      ],
+      "members":{
+        "startTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>Start time in ISO 8601 format in Coordinated Universal Time (UTC).</p> <p>Example: <code>2026-11-15T10:28:48.000Z</code> </p>"
+        },
+        "endTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>End time in ISO 8601 format in Coordinated Universal Time (UTC).</p> <p>Example: <code>2024-01-15T12:00:00.000Z</code> </p>"
+        }
+      },
+      "documentation":"<p>Time range specified using ISO 8601 format timestamps.</p>"
     },
     "InstanceId":{
       "type":"string",
       "max":64,
       "min":10,
-      "pattern":"^[a-z0-9-]{10,64}$"
+      "pattern":"[a-z0-9-]{10,64}"
     },
     "InstanceType":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-z0-9.-]{1,64}$"
+      "pattern":"[a-z0-9.-]{1,64}"
     },
     "Integer":{
       "type":"integer",
@@ -2241,17 +2718,17 @@
     "IntegerRange":{
       "type":"structure",
       "required":[
-        "maximum",
-        "minimum"
+        "minimum",
+        "maximum"
       ],
       "members":{
-        "maximum":{
-          "shape":"Integer",
-          "documentation":"<p>A maximum value.</p>"
-        },
         "minimum":{
           "shape":"Integer",
           "documentation":"<p>A minimum value.</p>"
+        },
+        "maximum":{
+          "shape":"Integer",
+          "documentation":"<p>A maximum value.</p>"
         }
       },
       "documentation":"<p>An integer range that has a minimum and maximum value.</p>"
@@ -2282,30 +2759,34 @@
       "type":"string",
       "max":16,
       "min":7,
-      "pattern":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$"
+      "pattern":"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
     },
     "JsonString":{
       "type":"string",
       "max":8192,
       "min":2,
-      "pattern":"^[{}\\[\\]:.,\"0-9A-z\\-_\\s]{2,8192}$"
+      "pattern":"[{}\\[\\]:.,\"0-9A-Za-z\\-_\\s]{2,8192}"
     },
     "KeyAliasArn":{
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^arn:aws[a-zA-Z-]{0,16}:kms:[a-z]{2}(-[a-z]{1,16}){1,3}-\\d{1}:\\d{12}:((alias/[a-zA-Z0-9:/_-]{1,256}))$"
+      "pattern":"arn:aws[a-zA-Z-]{0,16}:kms:[-a-z0-9]{1,50}:[0-9]{12}:((alias/[a-zA-Z0-9:/_-]{1,256}))"
     },
     "KeyAliasName":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^alias/[a-zA-Z0-9:/_-]+$"
+      "pattern":"alias/[a-zA-Z0-9:/_-]+"
     },
     "KeyArn":{"type":"string"},
     "KmsKey":{
       "type":"structure",
       "members":{
+        "kmsKeyArn":{
+          "shape":"KeyArn",
+          "documentation":"<p>KMS Key Arn.</p>"
+        },
         "kmsAliasArn":{
           "shape":"KeyAliasArn",
           "documentation":"<p>KMS Alias Arn.</p>"
@@ -2313,13 +2794,9 @@
         "kmsAliasName":{
           "shape":"KeyAliasName",
           "documentation":"<p>KMS Alias Name.</p>"
-        },
-        "kmsKeyArn":{
-          "shape":"KeyArn",
-          "documentation":"<p>KMS Key Arn.</p>"
         }
       },
-      "documentation":"<p>AWS Key Management Service (KMS) Key.</p>",
+      "documentation":"<p>KMS key info.</p>",
       "union":true
     },
     "ListConfigsRequest":{
@@ -2343,13 +2820,13 @@
     "ListConfigsResponse":{
       "type":"structure",
       "members":{
-        "configList":{
-          "shape":"ConfigList",
-          "documentation":"<p>List of <code>Config</code> items.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token returned in the response of a previous <code>ListConfigs</code> call. Used to get the next page of results.</p>"
+        },
+        "configList":{
+          "shape":"ConfigList",
+          "documentation":"<p>List of <code>Config</code> items.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2357,42 +2834,46 @@
     "ListContactsRequest":{
       "type":"structure",
       "required":[
-        "endTime",
+        "statusList",
         "startTime",
-        "statusList"
+        "endTime"
       ],
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>End time of a contact in UTC.</p>"
-        },
-        "groundStation":{
-          "shape":"GroundStationName",
-          "documentation":"<p>Name of a ground station.</p>"
-        },
         "maxResults":{
           "shape":"PaginationMaxResults",
           "documentation":"<p>Maximum number of contacts returned.</p>"
         },
-        "missionProfileArn":{
-          "shape":"MissionProfileArn",
-          "documentation":"<p>ARN of a mission profile.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token returned in the request of a previous <code>ListContacts</code> call. Used to get the next page of results.</p>"
         },
-        "satelliteArn":{
-          "shape":"satelliteArn",
-          "documentation":"<p>ARN of a satellite.</p>"
+        "statusList":{
+          "shape":"StatusList",
+          "documentation":"<p>Status of a contact reservation.</p>"
         },
         "startTime":{
           "shape":"Timestamp",
           "documentation":"<p>Start time of a contact in UTC.</p>"
         },
-        "statusList":{
-          "shape":"StatusList",
-          "documentation":"<p>Status of a contact reservation.</p>"
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>End time of a contact in UTC.</p>"
+        },
+        "groundStation":{
+          "shape":"GroundStationName",
+          "documentation":"<p>Name of a ground station.</p>"
+        },
+        "satelliteArn":{
+          "shape":"satelliteArn",
+          "documentation":"<p>ARN of a satellite.</p>"
+        },
+        "missionProfileArn":{
+          "shape":"MissionProfileArn",
+          "documentation":"<p>ARN of a mission profile.</p>"
+        },
+        "ephemeris":{
+          "shape":"EphemerisFilter",
+          "documentation":"<p>Filter for selecting contacts that use a specific ephemeris\".</p>"
         }
       },
       "documentation":"<p/>"
@@ -2400,13 +2881,13 @@
     "ListContactsResponse":{
       "type":"structure",
       "members":{
-        "contactList":{
-          "shape":"ContactList",
-          "documentation":"<p>List of contacts.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token returned in the response of a previous <code>ListContacts</code> call. Used to get the next page of results.</p>"
+        },
+        "contactList":{
+          "shape":"ContactList",
+          "documentation":"<p>List of contacts.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2432,13 +2913,13 @@
     "ListDataflowEndpointGroupsResponse":{
       "type":"structure",
       "members":{
-        "dataflowEndpointGroupList":{
-          "shape":"DataflowEndpointGroupList",
-          "documentation":"<p>A list of dataflow endpoint groups.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token returned in the response of a previous <code>ListDataflowEndpointGroups</code> call. Used to get the next page of results.</p>"
+        },
+        "dataflowEndpointGroupList":{
+          "shape":"DataflowEndpointGroupList",
+          "documentation":"<p>A list of dataflow endpoint groups.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2446,14 +2927,29 @@
     "ListEphemeridesRequest":{
       "type":"structure",
       "required":[
-        "endTime",
-        "satelliteId",
-        "startTime"
+        "startTime",
+        "endTime"
       ],
       "members":{
+        "satelliteId":{
+          "shape":"Uuid",
+          "documentation":"<p>The AWS Ground Station satellite ID to list ephemeris for.</p>"
+        },
+        "ephemerisType":{
+          "shape":"EphemerisType",
+          "documentation":"<p>Filter ephemerides by type. If not specified, all ephemeris types will be returned.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time for the list operation in UTC. Returns ephemerides with expiration times within your specified time range.</p>"
+        },
         "endTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The end time to list in UTC. The operation will return an ephemeris if its expiration time is within the time range defined by the <code>startTime</code> and <code>endTime</code>.</p>"
+          "documentation":"<p>The end time for the list operation in UTC. Returns ephemerides with expiration times within your specified time range.</p>"
+        },
+        "statusList":{
+          "shape":"EphemerisStatusList",
+          "documentation":"<p>The list of ephemeris status to return.</p>"
         },
         "maxResults":{
           "shape":"PaginationMaxResults",
@@ -2466,37 +2962,31 @@
           "documentation":"<p>Pagination token.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "satelliteId":{
-          "shape":"Uuid",
-          "documentation":"<p>The AWS Ground Station satellite ID to list ephemeris for.</p>"
-        },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time to list in UTC. The operation will return an ephemeris if its expiration time is within the time range defined by the <code>startTime</code> and <code>endTime</code>.</p>"
-        },
-        "statusList":{
-          "shape":"EphemerisStatusList",
-          "documentation":"<p>The list of ephemeris status to return.</p>"
         }
       }
     },
     "ListEphemeridesResponse":{
       "type":"structure",
       "members":{
-        "ephemerides":{
-          "shape":"EphemeridesList",
-          "documentation":"<p>List of ephemerides.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Pagination token.</p>"
+        },
+        "ephemerides":{
+          "shape":"EphemeridesList",
+          "documentation":"<p>List of ephemerides.</p>"
         }
       }
     },
     "ListGroundStationsRequest":{
       "type":"structure",
       "members":{
+        "satelliteId":{
+          "shape":"Uuid",
+          "documentation":"<p>Satellite ID to retrieve on-boarded ground stations.</p>",
+          "location":"querystring",
+          "locationName":"satelliteId"
+        },
         "maxResults":{
           "shape":"PaginationMaxResults",
           "documentation":"<p>Maximum number of ground stations returned.</p>",
@@ -2508,12 +2998,6 @@
           "documentation":"<p>Next token that can be supplied in the next call to get the next page of ground stations.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "satelliteId":{
-          "shape":"Uuid",
-          "documentation":"<p>Satellite ID to retrieve on-boarded ground stations.</p>",
-          "location":"querystring",
-          "locationName":"satelliteId"
         }
       },
       "documentation":"<p/>"
@@ -2521,13 +3005,13 @@
     "ListGroundStationsResponse":{
       "type":"structure",
       "members":{
-        "groundStationList":{
-          "shape":"GroundStationList",
-          "documentation":"<p>List of ground stations.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token that can be supplied in the next call to get the next page of ground stations.</p>"
+        },
+        "groundStationList":{
+          "shape":"GroundStationList",
+          "documentation":"<p>List of ground stations.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2553,13 +3037,13 @@
     "ListMissionProfilesResponse":{
       "type":"structure",
       "members":{
-        "missionProfileList":{
-          "shape":"MissionProfileList",
-          "documentation":"<p>List of mission profiles.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Next token returned in the response of a previous <code>ListMissionProfiles</code> call. Used to get the next page of results.</p>"
+        },
+        "missionProfileList":{
+          "shape":"MissionProfileList",
+          "documentation":"<p>List of mission profiles.</p>"
         }
       },
       "documentation":"<p/>"
@@ -2623,7 +3107,12 @@
       "type":"long",
       "box":true
     },
-    "MissionProfileArn":{"type":"string"},
+    "MissionProfileArn":{
+      "type":"string",
+      "max":138,
+      "min":89,
+      "pattern":"arn:aws:groundstation:[-a-z0-9]{1,50}:[0-9]{12}:mission-profile/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "MissionProfileIdResponse":{
       "type":"structure",
       "members":{
@@ -2641,21 +3130,21 @@
     "MissionProfileListItem":{
       "type":"structure",
       "members":{
-        "missionProfileArn":{
-          "shape":"MissionProfileArn",
-          "documentation":"<p>ARN of a mission profile.</p>"
-        },
         "missionProfileId":{
           "shape":"Uuid",
           "documentation":"<p>UUID of a mission profile.</p>"
         },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>Name of a mission profile.</p>"
+        "missionProfileArn":{
+          "shape":"MissionProfileArn",
+          "documentation":"<p>ARN of a mission profile.</p>"
         },
         "region":{
           "shape":"AWSRegion",
           "documentation":"<p>Region of a mission profile.</p>"
+        },
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Name of a mission profile.</p>"
         }
       },
       "documentation":"<p>Item in a list of mission profiles.</p>"
@@ -2669,35 +3158,35 @@
     "OEMEphemeris":{
       "type":"structure",
       "members":{
-        "oemData":{
-          "shape":"UnboundedString",
-          "documentation":"<p>The data for an OEM ephemeris, supplied directly in the request rather than through an S3 object.</p>"
-        },
         "s3Object":{
           "shape":"S3Object",
-          "documentation":"<p>Identifies the S3 object to be used as the ephemeris.</p>"
+          "documentation":"<p>The Amazon S3 object that contains the ephemeris data.</p>"
+        },
+        "oemData":{
+          "shape":"UnboundedString",
+          "documentation":"<p>OEM data that you provide directly instead of using an Amazon S3 object.</p>"
         }
       },
-      "documentation":"<p> Ephemeris data in Orbit Ephemeris Message (OEM) format. </p> <p> AWS Ground Station processes OEM Customer Provided Ephemerides according to the <a href=\"https://public.ccsds.org/Pubs/502x0b3e1.pdf\">CCSDS standard</a> with some extra restrictions. OEM files should be in KVN format. For more detail about the OEM format that AWS Ground Station supports, see <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/providing-custom-ephemeris-data.html#oem-ephemeris-format\">OEM ephemeris format</a> in the AWS Ground Station user guide. </p>"
+      "documentation":"<p>Ephemeris data in Orbit Ephemeris Message (OEM) format.</p> <p> AWS Ground Station processes OEM ephemerides according to the <a href=\"https://ccsds.org/wp-content/uploads/gravity_forms/5-448e85c647331d9cbaf66c096458bdd5/2025/01//502x0b3e1.pdf\">CCSDS standard</a> with some extra restrictions. OEM files should be in KVN format. For more detail about the OEM format that AWS Ground Station supports, see <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/providing-oem-ephemeris-data.html#oem-ephemeris-format\">OEM ephemeris format</a> in the AWS Ground Station user guide. </p>"
     },
     "PaginationMaxResults":{
       "type":"integer",
       "box":true,
       "max":100,
-      "min":0
+      "min":1
     },
     "PaginationToken":{
       "type":"string",
       "max":1000,
       "min":3,
-      "pattern":"^[A-Za-z0-9-/+_.=]+$"
+      "pattern":"[A-Za-z0-9-/+_.=]+"
     },
     "Polarization":{
       "type":"string",
       "enum":[
+        "RIGHT_HAND",
         "LEFT_HAND",
-        "NONE",
-        "RIGHT_HAND"
+        "NONE"
       ]
     },
     "PositiveDurationInSeconds":{
@@ -2706,17 +3195,28 @@
       "max":21600,
       "min":1
     },
+    "ProgramTrackSettings":{
+      "type":"structure",
+      "members":{
+        "azEl":{
+          "shape":"AzElProgramTrackSettings",
+          "documentation":"<p>Program track settings for <a>AzElEphemeris</a>.</p>"
+        }
+      },
+      "documentation":"<p>Program track settings for an antenna during a contact.</p>",
+      "union":true
+    },
     "RangedConnectionDetails":{
       "type":"structure",
       "required":["socketAddress"],
       "members":{
-        "mtu":{
-          "shape":"RangedConnectionDetailsMtuInteger",
-          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
-        },
         "socketAddress":{
           "shape":"RangedSocketAddress",
           "documentation":"<p>A ranged socket address.</p>"
+        },
+        "mtu":{
+          "shape":"RangedConnectionDetailsMtuInteger",
+          "documentation":"<p>Maximum transmission unit (MTU) size in bytes of a dataflow endpoint.</p>"
         }
       },
       "documentation":"<p>Ingress address of AgentEndpoint with a port range and an optional mtu.</p>"
@@ -2748,17 +3248,21 @@
     "RegisterAgentRequest":{
       "type":"structure",
       "required":[
-        "agentDetails",
-        "discoveryData"
+        "discoveryData",
+        "agentDetails"
       ],
       "members":{
+        "discoveryData":{
+          "shape":"DiscoveryData",
+          "documentation":"<p>Data for associating an agent with the capabilities it is managing.</p>"
+        },
         "agentDetails":{
           "shape":"AgentDetails",
           "documentation":"<p>Detailed information about the agent being registered.</p>"
         },
-        "discoveryData":{
-          "shape":"DiscoveryData",
-          "documentation":"<p>Data for associating an agent with the capabilities it is managing.</p>"
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>Tags assigned to an <code>Agent</code>.</p>"
         }
       }
     },
@@ -2774,21 +3278,12 @@
     "ReserveContactRequest":{
       "type":"structure",
       "required":[
-        "endTime",
-        "groundStation",
         "missionProfileArn",
-        "satelliteArn",
-        "startTime"
+        "startTime",
+        "endTime",
+        "groundStation"
       ],
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>End time of a contact in UTC.</p>"
-        },
-        "groundStation":{
-          "shape":"GroundStationName",
-          "documentation":"<p>Name of a ground station.</p>"
-        },
         "missionProfileArn":{
           "shape":"MissionProfileArn",
           "documentation":"<p>ARN of a mission profile.</p>"
@@ -2801,13 +3296,37 @@
           "shape":"Timestamp",
           "documentation":"<p>Start time of a contact in UTC.</p>"
         },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>End time of a contact in UTC.</p>"
+        },
+        "groundStation":{
+          "shape":"GroundStationName",
+          "documentation":"<p>Name of a ground station.</p>"
+        },
         "tags":{
           "shape":"TagsMap",
           "documentation":"<p>Tags assigned to a contact.</p>"
+        },
+        "trackingOverrides":{
+          "shape":"TrackingOverrides",
+          "documentation":"<p>Tracking configuration overrides for the contact.</p>"
         }
       },
       "documentation":"<p/>"
     },
+    "ResourceInUseException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The specified resource is in use by non-terminal state contacts and cannot be modified or deleted.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ResourceLimitExceededException":{
       "type":"structure",
       "members":{
@@ -2841,13 +3360,13 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[a-z0-9.-]{3,63}$"
+      "pattern":"[a-z0-9.-]{3,63}"
     },
     "S3KeyPrefix":{
       "type":"string",
       "max":900,
       "min":1,
-      "pattern":"^([a-zA-Z0-9_\\-=/]|\\{satellite_id\\}|\\{config\\-name}|\\{s3\\-config-id}|\\{year\\}|\\{month\\}|\\{day\\}){1,900}$"
+      "pattern":"([a-zA-Z0-9_\\-=/]|\\{satellite_id\\}|\\{config\\-name}|\\{s3\\-config-id}|\\{year\\}|\\{month\\}|\\{day\\}){1,900}"
     },
     "S3Object":{
       "type":"structure",
@@ -2862,16 +3381,16 @@
         },
         "version":{
           "shape":"S3VersionId",
-          "documentation":"<p>For versioned S3 objects, the version to use for the ephemeris.</p>"
+          "documentation":"<p>For versioned Amazon S3 objects, the version to use for the ephemeris.</p>"
         }
       },
-      "documentation":"<p>Object stored in S3 containing ephemeris data.</p>"
+      "documentation":"<p>Object stored in Amazon S3 containing ephemeris data.</p>"
     },
     "S3ObjectKey":{
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[a-zA-Z0-9!*'\\)\\(./_-]{1,1024}$"
+      "pattern":"[a-zA-Z0-9!*'\\)\\(./_-]{1,1024}"
     },
     "S3RecordingConfig":{
       "type":"structure",
@@ -2884,13 +3403,13 @@
           "shape":"BucketArn",
           "documentation":"<p>ARN of the bucket to record to.</p>"
         },
-        "prefix":{
-          "shape":"S3KeyPrefix",
-          "documentation":"<p>S3 Key prefix to prefice data files.</p>"
-        },
         "roleArn":{
           "shape":"RoleArn",
           "documentation":"<p>ARN of the role Ground Station assumes to write data to the bucket.</p>"
+        },
+        "prefix":{
+          "shape":"S3KeyPrefix",
+          "documentation":"<p>S3 Key prefix to prefice data files.</p>"
         }
       },
       "documentation":"<p>Information about an S3 recording <code>Config</code>.</p>"
@@ -2913,13 +3432,13 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^[\\s\\S]{1,1024}$"
+      "pattern":"[\\s\\S]{1,1024}"
     },
     "SafeName":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[ a-zA-Z0-9_:-]{1,256}$"
+      "pattern":"[ a-zA-Z0-9_:-]{1,256}"
     },
     "SatelliteList":{
       "type":"list",
@@ -2928,25 +3447,25 @@
     "SatelliteListItem":{
       "type":"structure",
       "members":{
-        "currentEphemeris":{
-          "shape":"EphemerisMetaData",
-          "documentation":"<p>The current ephemeris being used to compute the trajectory of the satellite.</p>"
+        "satelliteId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of a satellite.</p>"
         },
-        "groundStations":{
-          "shape":"GroundStationIdList",
-          "documentation":"<p>A list of ground stations to which the satellite is on-boarded.</p>"
+        "satelliteArn":{
+          "shape":"satelliteArn",
+          "documentation":"<p>ARN of a satellite.</p>"
         },
         "noradSatelliteID":{
           "shape":"noradSatelliteID",
           "documentation":"<p>NORAD satellite ID number.</p>"
         },
-        "satelliteArn":{
-          "shape":"satelliteArn",
-          "documentation":"<p>ARN of a satellite.</p>"
+        "groundStations":{
+          "shape":"GroundStationIdList",
+          "documentation":"<p>A list of ground stations to which the satellite is on-boarded.</p>"
         },
-        "satelliteId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID of a satellite.</p>"
+        "currentEphemeris":{
+          "shape":"EphemerisMetaData",
+          "documentation":"<p>The current ephemeris being used to compute the trajectory of the satellite.</p>"
         }
       },
       "documentation":"<p>Item in a list of satellites.</p>"
@@ -2954,22 +3473,22 @@
     "SecurityDetails":{
       "type":"structure",
       "required":[
-        "roleArn",
+        "subnetIds",
         "securityGroupIds",
-        "subnetIds"
+        "roleArn"
       ],
       "members":{
-        "roleArn":{
-          "shape":"RoleArn",
-          "documentation":"<p>ARN to a role needed for connecting streams to your instances. </p>"
+        "subnetIds":{
+          "shape":"SubnetList",
+          "documentation":"<p>A list of subnets where AWS Ground Station places elastic network interfaces to send streams to your instances.</p>"
         },
         "securityGroupIds":{
           "shape":"SecurityGroupIdList",
           "documentation":"<p>The security groups to attach to the elastic network interfaces.</p>"
         },
-        "subnetIds":{
-          "shape":"SubnetList",
-          "documentation":"<p>A list of subnets where AWS Ground Station places elastic network interfaces to send streams to your instances.</p>"
+        "roleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>ARN to a role needed for connecting streams to your instances. </p>"
         }
       },
       "documentation":"<p>Information about endpoints.</p>"
@@ -2978,6 +3497,22 @@
       "type":"list",
       "member":{"shape":"String"}
     },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"},
+        "parameterName":{
+          "shape":"String",
+          "documentation":"<p>Parameter name that caused the exception</p>"
+        }
+      },
+      "documentation":"<p>Request would cause a service quota to be exceeded.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "SignatureMap":{
       "type":"map",
       "key":{"shape":"String"},
@@ -3004,17 +3539,17 @@
     "Source":{
       "type":"structure",
       "members":{
-        "configDetails":{
-          "shape":"ConfigDetails",
-          "documentation":"<p>Additional details for a <code>Config</code>, if type is <code>dataflow-endpoint</code> or <code>antenna-downlink-demod-decode</code> </p>"
+        "configType":{
+          "shape":"ConfigCapabilityType",
+          "documentation":"<p>Type of a <code>Config</code>.</p>"
         },
         "configId":{
           "shape":"String",
           "documentation":"<p>UUID of a <code>Config</code>.</p>"
         },
-        "configType":{
-          "shape":"ConfigCapabilityType",
-          "documentation":"<p>Type of a <code>Config</code>.</p>"
+        "configDetails":{
+          "shape":"ConfigDetails",
+          "documentation":"<p>Additional details for a <code>Config</code>, if type is <code>dataflow-endpoint</code> or <code>antenna-downlink-demod-decode</code> </p>"
         },
         "dataflowSourceRegion":{
           "shape":"String",
@@ -3026,18 +3561,18 @@
     "SpectrumConfig":{
       "type":"structure",
       "required":[
-        "bandwidth",
-        "centerFrequency"
+        "centerFrequency",
+        "bandwidth"
       ],
       "members":{
-        "bandwidth":{
-          "shape":"FrequencyBandwidth",
-          "documentation":"<p>Bandwidth of a spectral <code>Config</code>. AWS Ground Station currently has the following bandwidth limitations:</p> <ul> <li> <p>For <code>AntennaDownlinkDemodDecodeconfig</code>, valid values are between 125 kHz to 650 MHz.</p> </li> <li> <p>For <code>AntennaDownlinkconfig</code> valid values are between 10 kHz to 54 MHz.</p> </li> <li> <p>For <code>AntennaUplinkConfig</code>, valid values are between 10 kHz to 54 MHz.</p> </li> </ul>"
-        },
         "centerFrequency":{
           "shape":"Frequency",
           "documentation":"<p>Center frequency of a spectral <code>Config</code>. Valid values are between 2200 to 2300 MHz and 7750 to 8400 MHz for downlink and 2025 to 2120 MHz for uplink.</p>"
         },
+        "bandwidth":{
+          "shape":"FrequencyBandwidth",
+          "documentation":"<p>Bandwidth of a spectral <code>Config</code>. AWS Ground Station currently has the following bandwidth limitations:</p> <ul> <li> <p>For <code>AntennaDownlinkDemodDecodeconfig</code>, valid values are between 125 kHz to 650 MHz.</p> </li> <li> <p>For <code>AntennaDownlinkconfig</code> valid values are between 10 kHz to 54 MHz.</p> </li> <li> <p>For <code>AntennaUplinkConfig</code>, valid values are between 10 kHz to 54 MHz.</p> </li> </ul>"
+        },
         "polarization":{
           "shape":"Polarization",
           "documentation":"<p>Polarization of a spectral <code>Config</code>. Capturing both <code>\"RIGHT_HAND\"</code> and <code>\"LEFT_HAND\"</code> polarization requires two separate configs.</p>"
@@ -3056,6 +3591,10 @@
       "type":"list",
       "member":{"shape":"String"}
     },
+    "SyntheticTimestamp_date_time":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
     "TLEData":{
       "type":"structure",
       "required":[
@@ -3074,7 +3613,7 @@
         },
         "validTimeRange":{
           "shape":"TimeRange",
-          "documentation":"<p>The valid time range for the TLE. Gaps or overlap are not permitted.</p>"
+          "documentation":"<p>The valid time range for the TLE. Time ranges must be continuous without gaps or overlaps.</p>"
         }
       },
       "documentation":"<p>Two-line element set (TLE) data.</p>"
@@ -3090,14 +3629,14 @@
       "members":{
         "s3Object":{
           "shape":"S3Object",
-          "documentation":"<p>Identifies the S3 object to be used as the ephemeris.</p>"
+          "documentation":"<p>The Amazon S3 object that contains the ephemeris data.</p>"
         },
         "tleData":{
           "shape":"TLEDataList",
-          "documentation":"<p>The data for a TLE ephemeris, supplied directly in the request rather than through an S3 object.</p>"
+          "documentation":"<p>TLE data that you provide directly instead of using an Amazon S3 object.</p>"
         }
       },
-      "documentation":"<p>Two-line element set (TLE) ephemeris.</p>"
+      "documentation":"<p>Two-line element set (TLE) ephemeris.</p> <p> For more detail about providing Two-line element sets to AWS Ground Station, see the <a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/providing-tle-ephemeris-data.html\">TLE section</a> of the AWS Ground Station user guide. </p>"
     },
     "TagKeys":{
       "type":"list",
@@ -3127,8 +3666,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "TagsMap":{
@@ -3136,20 +3674,48 @@
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "TimeAzEl":{
+      "type":"structure",
+      "required":[
+        "dt",
+        "az",
+        "el"
+      ],
+      "members":{
+        "dt":{
+          "shape":"Double",
+          "documentation":"<p>Time offset in atomic seconds from the segment's reference epoch.</p> <p>All <code>dt</code> values within a segment must be in ascending order with no duplicates.</p> <p> <code>dt</code> values may be:</p> <ul> <li> <p>negative</p> </li> <li> <p>expressed as fractions of a second</p> </li> <li> <p>expressed in scientific notation</p> </li> </ul>"
+        },
+        "az":{
+          "shape":"Double",
+          "documentation":"<p>Azimuth angle at the specified time.</p> <p>Valid ranges by unit:</p> <ul> <li> <p> <code>DEGREE_ANGLE</code>: -180 to 360 degrees, measured clockwise from true north</p> </li> <li> <p> <code>RADIAN</code>: -π to 2π radians, measured clockwise from true north</p> </li> </ul>"
+        },
+        "el":{
+          "shape":"Double",
+          "documentation":"<p>Elevation angle at the specified time.</p> <p>Valid ranges by unit:</p> <ul> <li> <p> <code>DEGREE_ANGLE</code>: -90 to 90 degrees, where 0 is the horizon, 90 is zenith, and negative values are below the horizon </p> </li> <li> <p> <code>RADIAN</code>: -π/2 to π/2 radians, where 0 is the horizon, π/2 is zenith, and negative values are below the horizon </p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Time-tagged azimuth elevation pointing data.</p> <p>Specifies the antenna pointing direction at a specific time offset from the segment's reference epoch.</p>"
+    },
+    "TimeAzElList":{
+      "type":"list",
+      "member":{"shape":"TimeAzEl"},
+      "min":5
+    },
     "TimeRange":{
       "type":"structure",
       "required":[
-        "endTime",
-        "startTime"
+        "startTime",
+        "endTime"
       ],
       "members":{
-        "endTime":{
+        "startTime":{
           "shape":"Timestamp",
-          "documentation":"<p>Time in UTC at which the time range ends.</p>"
+          "documentation":"<p>Unix epoch timestamp in UTC at which the time range starts.</p>"
         },
-        "startTime":{
+        "endTime":{
           "shape":"Timestamp",
-          "documentation":"<p>Time in UTC at which the time range starts.</p>"
+          "documentation":"<p>Unix epoch timestamp in UTC at which the time range ends.</p>"
         }
       },
       "documentation":"<p>A time range with a start and end time.</p>"
@@ -3159,13 +3725,13 @@
       "type":"string",
       "max":69,
       "min":69,
-      "pattern":"^1 [ 0-9]{5}[A-Z] [ 0-9]{5}[ A-Z]{3} [ 0-9]{5}[.][ 0-9]{8} (?:(?:[ 0+-][.][ 0-9]{8})|(?: [ +-][.][ 0-9]{7})) [ +-][ 0-9]{5}[+-][ 0-9] [ +-][ 0-9]{5}[+-][ 0-9] [ 0-9] [ 0-9]{4}[ 0-9]$"
+      "pattern":"1 [ 0-9]{5}[A-Z] [ 0-9]{5}[ A-Z]{3} [ 0-9]{5}[.][ 0-9]{8} (?:(?:[ 0+-][.][ 0-9]{8})|(?: [ +-][.][ 0-9]{7})) [ +-][ 0-9]{5}[+-][ 0-9] [ +-][ 0-9]{5}[+-][ 0-9] [ 0-9] [ 0-9]{4}[ 0-9]"
     },
     "TleLineTwo":{
       "type":"string",
       "max":69,
       "min":69,
-      "pattern":"^2 [ 0-9]{5} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{7} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{2}[.][ 0-9]{13}[ 0-9]$"
+      "pattern":"2 [ 0-9]{5} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{7} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{3}[.][ 0-9]{4} [ 0-9]{2}[.][ 0-9]{13}[ 0-9]"
     },
     "TrackingConfig":{
       "type":"structure",
@@ -3178,10 +3744,21 @@
       },
       "documentation":"<p>Object that determines whether tracking should be used during a contact executed with this <code>Config</code> in the mission profile.</p>"
     },
+    "TrackingOverrides":{
+      "type":"structure",
+      "required":["programTrackSettings"],
+      "members":{
+        "programTrackSettings":{
+          "shape":"ProgramTrackSettings",
+          "documentation":"<p>Program track settings to override for antenna tracking during the contact.</p>"
+        }
+      },
+      "documentation":"<p>Overrides the default tracking configuration on an antenna during a contact.</p>"
+    },
     "UnboundedString":{
       "type":"string",
       "min":1,
-      "pattern":"^[\\s\\S]+$"
+      "pattern":"[\\s\\S]+"
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -3207,17 +3784,16 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "UpdateAgentStatusRequest":{
       "type":"structure",
       "required":[
         "agentId",
+        "taskId",
         "aggregateStatus",
-        "componentStatuses",
-        "taskId"
+        "componentStatuses"
       ],
       "members":{
         "agentId":{
@@ -3226,6 +3802,10 @@
           "location":"uri",
           "locationName":"agentId"
         },
+        "taskId":{
+          "shape":"Uuid",
+          "documentation":"<p>GUID of agent task.</p>"
+        },
         "aggregateStatus":{
           "shape":"AggregateStatus",
           "documentation":"<p>Aggregate status for agent.</p>"
@@ -3233,10 +3813,6 @@
         "componentStatuses":{
           "shape":"ComponentStatusList",
           "documentation":"<p>List of component statuses for agent.</p>"
-        },
-        "taskId":{
-          "shape":"Uuid",
-          "documentation":"<p>GUID of agent task.</p>"
         }
       }
     },
@@ -3253,31 +3829,31 @@
     "UpdateConfigRequest":{
       "type":"structure",
       "required":[
-        "configData",
         "configId",
+        "name",
         "configType",
-        "name"
+        "configData"
       ],
       "members":{
-        "configData":{
-          "shape":"ConfigTypeData",
-          "documentation":"<p>Parameters of a <code>Config</code>.</p>"
-        },
         "configId":{
           "shape":"Uuid",
           "documentation":"<p>UUID of a <code>Config</code>.</p>",
           "location":"uri",
           "locationName":"configId"
         },
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Name of a <code>Config</code>.</p>"
+        },
         "configType":{
           "shape":"ConfigCapabilityType",
           "documentation":"<p>Type of a <code>Config</code>.</p>",
           "location":"uri",
           "locationName":"configType"
         },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>Name of a <code>Config</code>.</p>"
+        "configData":{
+          "shape":"ConfigTypeData",
+          "documentation":"<p>Parameters of a <code>Config</code>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -3285,27 +3861,27 @@
     "UpdateEphemerisRequest":{
       "type":"structure",
       "required":[
-        "enabled",
-        "ephemerisId"
+        "ephemerisId",
+        "enabled"
       ],
       "members":{
-        "enabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the ephemeris is enabled or not. Changing this value will not require the ephemeris to be re-validated.</p>"
-        },
         "ephemerisId":{
           "shape":"Uuid",
           "documentation":"<p>The AWS Ground Station ephemeris ID.</p>",
           "location":"uri",
           "locationName":"ephemerisId"
         },
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enable or disable the ephemeris. Changing this value doesn't require re-validation.</p>"
+        },
         "name":{
           "shape":"SafeName",
-          "documentation":"<p>A name string associated with the ephemeris. Used as a human-readable identifier for the ephemeris.</p>"
+          "documentation":"<p>A name that you can use to identify the ephemeris.</p>"
         },
         "priority":{
           "shape":"EphemerisPriority",
-          "documentation":"<p>Customer-provided priority score to establish the order in which overlapping ephemerides should be used.</p> <p>The default for customer-provided ephemeris priority is 1, and higher numbers take precedence.</p> <p>Priority must be 1 or greater</p>"
+          "documentation":"<p>A priority score that determines which ephemeris to use when multiple ephemerides overlap.</p> <p>Higher numbers take precedence. The default is 1. Must be 1 or greater.</p>"
         }
       }
     },
@@ -3313,31 +3889,35 @@
       "type":"structure",
       "required":["missionProfileId"],
       "members":{
-        "contactPostPassDurationSeconds":{
-          "shape":"DurationInSeconds",
-          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a Ground Station Contact State Change event indicating the pass has finished.</p>"
+        "missionProfileId":{
+          "shape":"Uuid",
+          "documentation":"<p>UUID of a mission profile.</p>",
+          "location":"uri",
+          "locationName":"missionProfileId"
+        },
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Name of a mission profile.</p>"
         },
         "contactPrePassDurationSeconds":{
           "shape":"DurationInSeconds",
           "documentation":"<p>Amount of time after a contact ends that you’d like to receive a Ground Station Contact State Change event indicating the pass has finished.</p>"
         },
-        "dataflowEdges":{
-          "shape":"DataflowEdgeList",
-          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
+        "contactPostPassDurationSeconds":{
+          "shape":"DurationInSeconds",
+          "documentation":"<p>Amount of time after a contact ends that you’d like to receive a Ground Station Contact State Change event indicating the pass has finished.</p>"
         },
         "minimumViableContactDurationSeconds":{
           "shape":"PositiveDurationInSeconds",
           "documentation":"<p>Smallest amount of time in seconds that you’d like to see for an available contact. AWS Ground Station will not present you with contacts shorter than this duration.</p>"
         },
-        "missionProfileId":{
-          "shape":"Uuid",
-          "documentation":"<p>UUID of a mission profile.</p>",
-          "location":"uri",
-          "locationName":"missionProfileId"
+        "dataflowEdges":{
+          "shape":"DataflowEdgeList",
+          "documentation":"<p>A list of lists of ARNs. Each list of ARNs is an edge, with a <i>from</i> <code>Config</code> and a <i>to</i> <code>Config</code>.</p>"
         },
-        "name":{
-          "shape":"SafeName",
-          "documentation":"<p>Name of a mission profile.</p>"
+        "trackingConfigArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
         },
         "streamsKmsKey":{
           "shape":"KmsKey",
@@ -3346,28 +3926,91 @@
         "streamsKmsRole":{
           "shape":"RoleArn",
           "documentation":"<p>Role to use for encrypting streams with KMS key.</p>"
-        },
-        "trackingConfigArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of a tracking <code>Config</code>.</p>"
         }
       },
       "documentation":"<p/>"
     },
-    "UplinkEchoConfig":{
+    "UplinkAwsGroundStationAgentEndpoint":{
       "type":"structure",
       "required":[
-        "antennaUplinkConfigArn",
-        "enabled"
+        "name",
+        "dataflowDetails"
       ],
       "members":{
-        "antennaUplinkConfigArn":{
-          "shape":"ConfigArn",
-          "documentation":"<p>ARN of an uplink <code>Config</code>.</p>"
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Uplink dataflow endpoint name</p>"
+        },
+        "dataflowDetails":{
+          "shape":"UplinkDataflowDetails",
+          "documentation":"<p>Dataflow details for the uplink endpoint</p>"
+        }
+      },
+      "documentation":"<p>Definition for an uplink agent endpoint</p>"
+    },
+    "UplinkAwsGroundStationAgentEndpointDetails":{
+      "type":"structure",
+      "required":[
+        "name",
+        "dataflowDetails"
+      ],
+      "members":{
+        "name":{
+          "shape":"SafeName",
+          "documentation":"<p>Uplink dataflow endpoint name</p>"
+        },
+        "dataflowDetails":{
+          "shape":"UplinkDataflowDetails",
+          "documentation":"<p>Dataflow details for the uplink endpoint</p>"
+        },
+        "agentStatus":{
+          "shape":"AgentStatus",
+          "documentation":"<p>Status of the agent associated with the uplink dataflow endpoint</p>"
         },
+        "auditResults":{
+          "shape":"AuditResults",
+          "documentation":"<p>Health audit results for the uplink dataflow endpoint</p>"
+        }
+      },
+      "documentation":"<p>Details for an uplink agent endpoint</p>"
+    },
+    "UplinkConnectionDetails":{
+      "type":"structure",
+      "required":[
+        "ingressAddressAndPort",
+        "agentIpAndPortAddress"
+      ],
+      "members":{
+        "ingressAddressAndPort":{"shape":"ConnectionDetails"},
+        "agentIpAndPortAddress":{"shape":"RangedConnectionDetails"}
+      },
+      "documentation":"<p>Connection details for customer to Agent and Agent to Ground Station</p>"
+    },
+    "UplinkDataflowDetails":{
+      "type":"structure",
+      "members":{
+        "agentConnectionDetails":{
+          "shape":"UplinkConnectionDetails",
+          "documentation":"<p>Uplink connection details for customer to Agent and Agent to Ground Station</p>"
+        }
+      },
+      "documentation":"<p>Dataflow details for an uplink endpoint</p>",
+      "union":true
+    },
+    "UplinkEchoConfig":{
+      "type":"structure",
+      "required":[
+        "enabled",
+        "antennaUplinkConfigArn"
+      ],
+      "members":{
         "enabled":{
           "shape":"Boolean",
           "documentation":"<p>Whether or not an uplink <code>Config</code> is enabled.</p>"
+        },
+        "antennaUplinkConfigArn":{
+          "shape":"ConfigArn",
+          "documentation":"<p>ARN of an uplink <code>Config</code>.</p>"
         }
       },
       "documentation":"<p>Information about an uplink echo <code>Config</code>.</p> <p>Parameters from the <code>AntennaUplinkConfig</code>, corresponding to the specified <code>AntennaUplinkConfigArn</code>, are used when this <code>UplinkEchoConfig</code> is used in a contact.</p>"
@@ -3389,15 +4032,15 @@
     },
     "Uuid":{
       "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "max":36,
+      "min":36,
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
     },
     "VersionString":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))*$"
+      "pattern":"(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))*"
     },
     "VersionStringList":{
       "type":"list",
@@ -3416,7 +4059,12 @@
       "max":99999,
       "min":0
     },
-    "satelliteArn":{"type":"string"}
+    "satelliteArn":{
+      "type":"string",
+      "max":132,
+      "min":82,
+      "pattern":"arn:aws:groundstation:([-a-z0-9]{1,50})?:[0-9]{12}:satellite/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    }
   },
   "documentation":"<p>Welcome to the AWS Ground Station API Reference. AWS Ground Station is a fully managed service that enables you to control satellite communications, downlink and process satellite data, and scale your satellite operations efficiently and cost-effectively without having to build or manage your own ground station infrastructure.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/paginators-1.json 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -59,6 +59,18 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "Resources"
+    },
+    "ListThreatEntitySets": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ThreatEntitySetIds"
+    },
+    "ListTrustedEntitySets": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "TrustedEntitySetIds"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/service-2.json 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/guardduty/2017-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/guardduty/2017-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -102,7 +102,8 @@
       "output":{"shape":"CreateIPSetResponse"},
       "errors":[
         {"shape":"BadRequestException"},
-        {"shape":"InternalServerErrorException"}
+        {"shape":"InternalServerErrorException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Creates a new IPSet, which is called a trusted IP list in the console user interface. An IPSet is a list of IP addresses that are trusted for secure communication with Amazon Web Services infrastructure and applications. GuardDuty doesn't generate findings for IP addresses that are included in IPSets. Only users from the administrator account can use this operation.</p>"
     },
@@ -168,6 +169,21 @@
       ],
       "documentation":"<p>Generates sample findings of types specified by the list of finding types. If 'NULL' is specified for <code>findingTypes</code>, the API generates sample findings of all supported finding types.</p>"
     },
+    "CreateThreatEntitySet":{
+      "name":"CreateThreatEntitySet",
+      "http":{
+        "method":"POST",
+        "requestUri":"/detector/{detectorId}/threatentityset",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateThreatEntitySetRequest"},
+      "output":{"shape":"CreateThreatEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Creates a new threat entity set. In a threat entity set, you can provide known malicious IP addresses and domains for your Amazon Web Services environment. GuardDuty generates findings based on the entries in the threat entity sets. Only users of the administrator account can manage entity sets, which automatically apply to member accounts.</p>"
+    },
     "CreateThreatIntelSet":{
       "name":"CreateThreatIntelSet",
       "http":{
@@ -179,10 +195,26 @@
       "output":{"shape":"CreateThreatIntelSetResponse"},
       "errors":[
         {"shape":"BadRequestException"},
-        {"shape":"InternalServerErrorException"}
+        {"shape":"InternalServerErrorException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Creates a new ThreatIntelSet. ThreatIntelSets consist of known malicious IP addresses. GuardDuty generates findings based on ThreatIntelSets. Only users of the administrator account can use this operation.</p>"
     },
+    "CreateTrustedEntitySet":{
+      "name":"CreateTrustedEntitySet",
+      "http":{
+        "method":"POST",
+        "requestUri":"/detector/{detectorId}/trustedentityset",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateTrustedEntitySetRequest"},
+      "output":{"shape":"CreateTrustedEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Creates a new trusted entity set. In the trusted entity set, you can provide IP addresses and domains that you believe are secure for communication in your Amazon Web Services environment. GuardDuty will not generate findings for the entries that are specified in a trusted entity set. At any given time, you can have only one trusted entity set. </p> <p>Only users of the administrator account can manage the entity sets, which automatically apply to member accounts.</p>"
+    },
     "DeclineInvitations":{
       "name":"DeclineInvitations",
       "http":{
@@ -304,6 +336,21 @@
       ],
       "documentation":"<p>Deletes the publishing definition with the specified <code>destinationId</code>.</p>"
     },
+    "DeleteThreatEntitySet":{
+      "name":"DeleteThreatEntitySet",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/detector/{detectorId}/threatentityset/{threatEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteThreatEntitySetRequest"},
+      "output":{"shape":"DeleteThreatEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Deletes the threat entity set that is associated with the specified <code>threatEntitySetId</code>.</p>"
+    },
     "DeleteThreatIntelSet":{
       "name":"DeleteThreatIntelSet",
       "http":{
@@ -319,6 +366,21 @@
       ],
       "documentation":"<p>Deletes the ThreatIntelSet specified by the ThreatIntelSet ID.</p>"
     },
+    "DeleteTrustedEntitySet":{
+      "name":"DeleteTrustedEntitySet",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/detector/{detectorId}/trustedentityset/{trustedEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteTrustedEntitySetRequest"},
+      "output":{"shape":"DeleteTrustedEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Deletes the trusted entity set that is associated with the specified <code>trustedEntitySetId</code>.</p>"
+    },
     "DescribeMalwareScans":{
       "name":"DescribeMalwareScans",
       "http":{
@@ -454,7 +516,7 @@
         {"shape":"BadRequestException"},
         {"shape":"InternalServerErrorException"}
       ],
-      "documentation":"<p>Provides the details of the GuardDuty administrator account associated with the current GuardDuty member account.</p> <note> <p>If the organization's management account or a delegated administrator runs this API, it will return success (<code>HTTP 200</code>) but no content.</p> </note>"
+      "documentation":"<p>Provides the details of the GuardDuty administrator account associated with the current GuardDuty member account.</p> <p>Based on the type of account that runs this API, the following list shows how the API behavior varies:</p> <ul> <li> <p>When the GuardDuty administrator account runs this API, it will return success (<code>HTTP 200</code>) but no content.</p> </li> <li> <p>When a member account runs this API, it will return the details of the GuardDuty administrator account that is associated with this calling member account.</p> </li> <li> <p>When an individual account (not associated with an organization) runs this API, it will return success (<code>HTTP 200</code>) but no content.</p> </li> </ul>"
     },
     "GetCoverageStatistics":{
       "name":"GetCoverageStatistics",
@@ -669,6 +731,21 @@
       ],
       "documentation":"<p>Provides the number of days left for each data source used in the free trial period.</p>"
     },
+    "GetThreatEntitySet":{
+      "name":"GetThreatEntitySet",
+      "http":{
+        "method":"GET",
+        "requestUri":"/detector/{detectorId}/threatentityset/{threatEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetThreatEntitySetRequest"},
+      "output":{"shape":"GetThreatEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Retrieves the threat entity set associated with the specified <code>threatEntitySetId</code>.</p>"
+    },
     "GetThreatIntelSet":{
       "name":"GetThreatIntelSet",
       "http":{
@@ -684,6 +761,21 @@
       ],
       "documentation":"<p>Retrieves the ThreatIntelSet that is specified by the ThreatIntelSet ID.</p>"
     },
+    "GetTrustedEntitySet":{
+      "name":"GetTrustedEntitySet",
+      "http":{
+        "method":"GET",
+        "requestUri":"/detector/{detectorId}/trustedentityset/{trustedEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTrustedEntitySetRequest"},
+      "output":{"shape":"GetTrustedEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Retrieves the trusted entity set associated with the specified <code>trustedEntitySetId</code>.</p>"
+    },
     "GetUsageStatistics":{
       "name":"GetUsageStatistics",
       "http":{
@@ -881,6 +973,21 @@
       ],
       "documentation":"<p>Lists tags for a resource. Tagging is currently supported for detectors, finding filters, IP sets, threat intel sets, and publishing destination, with a limit of 50 tags per resource. When invoked, this operation returns all assigned tags for a given resource.</p>"
     },
+    "ListThreatEntitySets":{
+      "name":"ListThreatEntitySets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/detector/{detectorId}/threatentityset",
+        "responseCode":200
+      },
+      "input":{"shape":"ListThreatEntitySetsRequest"},
+      "output":{"shape":"ListThreatEntitySetsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Lists the threat entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the threat entity sets that are returned as a response, belong to the administrator account.</p>"
+    },
     "ListThreatIntelSets":{
       "name":"ListThreatIntelSets",
       "http":{
@@ -896,6 +1003,21 @@
       ],
       "documentation":"<p>Lists the ThreatIntelSets of the GuardDuty service specified by the detector ID. If you use this operation from a member account, the ThreatIntelSets associated with the administrator account are returned.</p>"
     },
+    "ListTrustedEntitySets":{
+      "name":"ListTrustedEntitySets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/detector/{detectorId}/trustedentityset",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTrustedEntitySetsRequest"},
+      "output":{"shape":"ListTrustedEntitySetsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Lists the trusted entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the trusted entity sets that are returned as a response, belong to the administrator account.</p>"
+    },
     "StartMalwareScan":{
       "name":"StartMalwareScan",
       "http":{
@@ -1045,7 +1167,8 @@
       "output":{"shape":"UpdateIPSetResponse"},
       "errors":[
         {"shape":"BadRequestException"},
-        {"shape":"InternalServerErrorException"}
+        {"shape":"InternalServerErrorException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Updates the IPSet specified by the IPSet ID.</p>"
     },
@@ -1125,6 +1248,21 @@
       ],
       "documentation":"<p>Updates information about the publishing destination specified by the <code>destinationId</code>.</p>"
     },
+    "UpdateThreatEntitySet":{
+      "name":"UpdateThreatEntitySet",
+      "http":{
+        "method":"POST",
+        "requestUri":"/detector/{detectorId}/threatentityset/{threatEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateThreatEntitySetRequest"},
+      "output":{"shape":"UpdateThreatEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Updates the threat entity set associated with the specified <code>threatEntitySetId</code>.</p>"
+    },
     "UpdateThreatIntelSet":{
       "name":"UpdateThreatIntelSet",
       "http":{
@@ -1136,9 +1274,25 @@
       "output":{"shape":"UpdateThreatIntelSetResponse"},
       "errors":[
         {"shape":"BadRequestException"},
-        {"shape":"InternalServerErrorException"}
+        {"shape":"InternalServerErrorException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Updates the ThreatIntelSet specified by the ThreatIntelSet ID.</p>"
+    },
+    "UpdateTrustedEntitySet":{
+      "name":"UpdateTrustedEntitySet",
+      "http":{
+        "method":"POST",
+        "requestUri":"/detector/{detectorId}/trustedentityset/{trustedEntitySetId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateTrustedEntitySetRequest"},
+      "output":{"shape":"UpdateTrustedEntitySetResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"}
+      ],
+      "documentation":"<p>Updates the trusted entity set associated with the specified <code>trustedEntitySetId</code>.</p>"
     }
   },
   "shapes":{
@@ -1170,8 +1324,7 @@
     },
     "AcceptAdministratorInvitationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AcceptInvitationRequest":{
       "type":"structure",
@@ -1203,8 +1356,7 @@
     },
     "AcceptInvitationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true,
       "deprecatedMessage":"This output is deprecated, use AcceptAdministratorInvitationResponse instead"
     },
@@ -1320,7 +1472,7 @@
         },
         "Email":{
           "shape":"Email",
-          "documentation":"<p>The email address of the member account.</p>",
+          "documentation":"<p>The email address of the member account. The following list includes the rules for a valid email address:</p> <ul> <li> <p>The email address must be a minimum of 6 and a maximum of 64 characters long.</p> </li> <li> <p>All characters must be 7-bit ASCII characters.</p> </li> <li> <p>There must be one and only one @ symbol, which separates the local name from the domain name.</p> </li> <li> <p>The local name can't contain any of the following characters:</p> <p>whitespace, \" ' ( ) &lt; &gt; [ ] : ' , \\ | % &amp;</p> </li> <li> <p>The local name can't begin with a dot (.).</p> </li> <li> <p>The domain name can consist of only the characters [a-z], [A-Z], [0-9], hyphen (-), or dot (.).</p> </li> <li> <p>The domain name can't begin or end with a dot (.) or hyphen (-).</p> </li> <li> <p>The domain name must contain at least one dot. </p> </li> </ul>",
           "locationName":"email"
         }
       },
@@ -1476,6 +1628,11 @@
           "shape":"Session",
           "documentation":"<p>Contains information about the user session where the activity initiated.</p>",
           "locationName":"session"
+        },
+        "Process":{
+          "shape":"ActorProcess",
+          "documentation":"<p>Contains information about the process associated with the threat actor. This includes details such as process name, path, execution time, and unique identifiers that help track the actor's activities within the system.</p>",
+          "locationName":"process"
         }
       },
       "documentation":"<p>Information about the actors involved in an attack sequence.</p>"
@@ -1485,11 +1642,40 @@
       "member":{"shape":"String"},
       "max":400
     },
+    "ActorProcess":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Path"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ProcessName",
+          "documentation":"<p>The name of the process as it appears in the system.</p>",
+          "locationName":"name"
+        },
+        "Path":{
+          "shape":"ProcessPath",
+          "documentation":"<p>The full file path to the process executable on the system.</p>",
+          "locationName":"path"
+        },
+        "Sha256":{
+          "shape":"ProcessSha256",
+          "documentation":"<p>The SHA256 hash of the process executable file, which can be used for identification and verification purposes.</p>",
+          "locationName":"sha256"
+        }
+      },
+      "documentation":"<p>Contains information about a process involved in a GuardDuty finding, including process identification, execution details, and file information.</p>"
+    },
     "Actors":{
       "type":"list",
       "member":{"shape":"Actor"},
       "max":400
     },
+    "AdditionalSequenceTypes":{
+      "type":"list",
+      "member":{"shape":"FindingType"}
+    },
     "AddonDetails":{
       "type":"structure",
       "members":{
@@ -1668,8 +1854,7 @@
     },
     "ArchiveFindingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AutoEnableMembers":{
       "type":"string",
@@ -1865,6 +2050,17 @@
       },
       "documentation":"<p>Contains information on the status of CloudTrail as a data source for the detector.</p>"
     },
+    "ClusterStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "DELETING",
+        "FAILED",
+        "UPDATING",
+        "PENDING"
+      ]
+    },
     "Condition":{
       "type":"structure",
       "members":{
@@ -1996,6 +2192,28 @@
       },
       "documentation":"<p>Details of a container.</p>"
     },
+    "ContainerFindingResource":{
+      "type":"structure",
+      "required":["Image"],
+      "members":{
+        "Image":{
+          "shape":"String",
+          "documentation":"<p>The container image information, including the image name and tag used to run the container that was involved in the finding.</p>",
+          "locationName":"image"
+        },
+        "ImageUid":{
+          "shape":"ContainerImageUid",
+          "documentation":"<p>The unique ID associated with the container image.</p>",
+          "locationName":"imageUid"
+        }
+      },
+      "documentation":"<p>Contains information about container resources involved in a GuardDuty finding. This structure provides details about containers that were identified as part of suspicious or malicious activity.</p>"
+    },
+    "ContainerImageUid":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "ContainerInstanceDetails":{
       "type":"structure",
       "members":{
@@ -2012,6 +2230,15 @@
       },
       "documentation":"<p>Contains information about the Amazon EC2 instance that is running the Amazon ECS container.</p>"
     },
+    "ContainerUid":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "ContainerUids":{
+      "type":"list",
+      "member":{"shape":"ContainerUid"}
+    },
     "Containers":{
       "type":"list",
       "member":{"shape":"Container"}
@@ -2420,7 +2647,7 @@
         },
         "FindingCriteria":{
           "shape":"FindingCriteria",
-          "documentation":"<p>Represents the criteria to be used in the filter for querying findings.</p> <p>You can only use the following attributes to query findings:</p> <ul> <li> <p>accountId</p> </li> <li> <p>id</p> </li> <li> <p>region</p> </li> <li> <p>severity</p> <p>To filter on the basis of severity, the API and CLI use the following input list for the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_FindingCriteria.html\">FindingCriteria</a> condition:</p> <ul> <li> <p> <b>Low</b>: <code>[\"1\", \"2\", \"3\"]</code> </p> </li> <li> <p> <b>Medium</b>: <code>[\"4\", \"5\", \"6\"]</code> </p> </li> <li> <p> <b>High</b>: <code>[\"7\", \"8\"]</code> </p> </li> <li> <p> <b>Critical</b>: <code>[\"9\", \"10\"]</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-severity.html\">Findings severity levels</a> in the <i>Amazon GuardDuty User Guide</i>.</p> </li> <li> <p>type</p> </li> <li> <p>updatedAt</p> <p>Type: ISO 8601 string format: YYYY-MM-DDTHH:MM:SS.SSSZ or YYYY-MM-DDTHH:MM:SSZ depending on whether the value contains milliseconds.</p> </li> <li> <p>resource.accessKeyDetails.accessKeyId</p> </li> <li> <p>resource.accessKeyDetails.principalId</p> </li> <li> <p>resource.accessKeyDetails.userName</p> </li> <li> <p>resource.accessKeyDetails.userType</p> </li> <li> <p>resource.instanceDetails.iamInstanceProfile.id</p> </li> <li> <p>resource.instanceDetails.imageId</p> </li> <li> <p>resource.instanceDetails.instanceId</p> </li> <li> <p>resource.instanceDetails.tags.key</p> </li> <li> <p>resource.instanceDetails.tags.value</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.ipv6Addresses</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.publicDnsName</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.publicIp</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.securityGroups.groupId</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.securityGroups.groupName</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.subnetId</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.vpcId</p> </li> <li> <p>resource.instanceDetails.outpostArn</p> </li> <li> <p>resource.resourceType</p> </li> <li> <p>resource.s3BucketDetails.publicAccess.effectivePermissions</p> </li> <li> <p>resource.s3BucketDetails.name</p> </li> <li> <p>resource.s3BucketDetails.tags.key</p> </li> <li> <p>resource.s3BucketDetails.tags.value</p> </li> <li> <p>resource.s3BucketDetails.type</p> </li> <li> <p>service.action.actionType</p> </li> <li> <p>service.action.awsApiCallAction.api</p> </li> <li> <p>service.action.awsApiCallAction.callerType</p> </li> <li> <p>service.action.awsApiCallAction.errorCode</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.city.cityName</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.country.countryName</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg</p> </li> <li> <p>service.action.awsApiCallAction.serviceName</p> </li> <li> <p>service.action.dnsRequestAction.domain</p> </li> <li> <p>service.action.dnsRequestAction.domainWithSuffix</p> </li> <li> <p>service.action.networkConnectionAction.blocked</p> </li> <li> <p>service.action.networkConnectionAction.connectionDirection</p> </li> <li> <p>service.action.networkConnectionAction.localPortDetails.port</p> </li> <li> <p>service.action.networkConnectionAction.protocol</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.city.cityName</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.country.countryName</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg</p> </li> <li> <p>service.action.networkConnectionAction.remotePortDetails.port</p> </li> <li> <p>service.action.awsApiCallAction.remoteAccountDetails.affiliated</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.kubernetesApiCallAction.namespace</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.kubernetesApiCallAction.requestUri</p> </li> <li> <p>service.action.kubernetesApiCallAction.statusCode</p> </li> <li> <p>service.action.networkConnectionAction.localIpDetails.ipAddressV4</p> </li> <li> <p>service.action.networkConnectionAction.localIpDetails.ipAddressV6</p> </li> <li> <p>service.action.networkConnectionAction.protocol</p> </li> <li> <p>service.action.awsApiCallAction.serviceName</p> </li> <li> <p>service.action.awsApiCallAction.remoteAccountDetails.accountId</p> </li> <li> <p>service.additionalInfo.threatListName</p> </li> <li> <p>service.resourceRole</p> </li> <li> <p>resource.eksClusterDetails.name</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.name</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.namespace</p> </li> <li> <p>resource.kubernetesDetails.kubernetesUserDetails.username</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.containers.image</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.containers.imagePrefix</p> </li> <li> <p>service.ebsVolumeScanDetails.scanId</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.name</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.severity</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.filePaths.hash</p> </li> <li> <p>resource.ecsClusterDetails.name</p> </li> <li> <p>resource.ecsClusterDetails.taskDetails.containers.image</p> </li> <li> <p>resource.ecsClusterDetails.taskDetails.definitionArn</p> </li> <li> <p>resource.containerDetails.image</p> </li> <li> <p>resource.rdsDbInstanceDetails.dbInstanceIdentifier</p> </li> <li> <p>resource.rdsDbInstanceDetails.dbClusterIdentifier</p> </li> <li> <p>resource.rdsDbInstanceDetails.engine</p> </li> <li> <p>resource.rdsDbUserDetails.user</p> </li> <li> <p>resource.rdsDbInstanceDetails.tags.key</p> </li> <li> <p>resource.rdsDbInstanceDetails.tags.value</p> </li> <li> <p>service.runtimeDetails.process.executableSha256</p> </li> <li> <p>service.runtimeDetails.process.name</p> </li> <li> <p>service.runtimeDetails.process.name</p> </li> <li> <p>resource.lambdaDetails.functionName</p> </li> <li> <p>resource.lambdaDetails.functionArn</p> </li> <li> <p>resource.lambdaDetails.tags.key</p> </li> <li> <p>resource.lambdaDetails.tags.value</p> </li> </ul>",
+          "documentation":"<p>Represents the criteria to be used in the filter for querying findings.</p> <p>You can only use the following attributes to query findings:</p> <ul> <li> <p>accountId</p> </li> <li> <p>id</p> </li> <li> <p>region</p> </li> <li> <p>severity</p> <p>To filter on the basis of severity, the API and CLI use the following input list for the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_FindingCriteria.html\">FindingCriteria</a> condition:</p> <ul> <li> <p> <b>Low</b>: <code>[\"1\", \"2\", \"3\"]</code> </p> </li> <li> <p> <b>Medium</b>: <code>[\"4\", \"5\", \"6\"]</code> </p> </li> <li> <p> <b>High</b>: <code>[\"7\", \"8\"]</code> </p> </li> <li> <p> <b>Critical</b>: <code>[\"9\", \"10\"]</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-severity.html\">Findings severity levels</a> in the <i>Amazon GuardDuty User Guide</i>.</p> </li> <li> <p>type</p> </li> <li> <p>updatedAt</p> <p>Type: ISO 8601 string format: YYYY-MM-DDTHH:MM:SS.SSSZ or YYYY-MM-DDTHH:MM:SSZ depending on whether the value contains milliseconds.</p> </li> <li> <p>resource.accessKeyDetails.accessKeyId</p> </li> <li> <p>resource.accessKeyDetails.principalId</p> </li> <li> <p>resource.accessKeyDetails.userName</p> </li> <li> <p>resource.accessKeyDetails.userType</p> </li> <li> <p>resource.instanceDetails.iamInstanceProfile.id</p> </li> <li> <p>resource.instanceDetails.imageId</p> </li> <li> <p>resource.instanceDetails.instanceId</p> </li> <li> <p>resource.instanceDetails.tags.key</p> </li> <li> <p>resource.instanceDetails.tags.value</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.ipv6Addresses</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.publicDnsName</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.publicIp</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.securityGroups.groupId</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.securityGroups.groupName</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.subnetId</p> </li> <li> <p>resource.instanceDetails.networkInterfaces.vpcId</p> </li> <li> <p>resource.instanceDetails.outpostArn</p> </li> <li> <p>resource.resourceType</p> </li> <li> <p>resource.s3BucketDetails.publicAccess.effectivePermissions</p> </li> <li> <p>resource.s3BucketDetails.name</p> </li> <li> <p>resource.s3BucketDetails.tags.key</p> </li> <li> <p>resource.s3BucketDetails.tags.value</p> </li> <li> <p>resource.s3BucketDetails.type</p> </li> <li> <p>service.action.actionType</p> </li> <li> <p>service.action.awsApiCallAction.api</p> </li> <li> <p>service.action.awsApiCallAction.callerType</p> </li> <li> <p>service.action.awsApiCallAction.errorCode</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.city.cityName</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.country.countryName</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg</p> </li> <li> <p>service.action.awsApiCallAction.serviceName</p> </li> <li> <p>service.action.dnsRequestAction.domain</p> </li> <li> <p>service.action.dnsRequestAction.domainWithSuffix</p> </li> <li> <p>service.action.dnsRequestAction.vpcOwnerAccountId</p> </li> <li> <p>service.action.networkConnectionAction.blocked</p> </li> <li> <p>service.action.networkConnectionAction.connectionDirection</p> </li> <li> <p>service.action.networkConnectionAction.localPortDetails.port</p> </li> <li> <p>service.action.networkConnectionAction.protocol</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.city.cityName</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.country.countryName</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg</p> </li> <li> <p>service.action.networkConnectionAction.remotePortDetails.port</p> </li> <li> <p>service.action.awsApiCallAction.remoteAccountDetails.affiliated</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV4</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV6</p> </li> <li> <p>service.action.kubernetesApiCallAction.namespace</p> </li> <li> <p>service.action.kubernetesApiCallAction.remoteIpDetails.organization.asn</p> </li> <li> <p>service.action.kubernetesApiCallAction.requestUri</p> </li> <li> <p>service.action.kubernetesApiCallAction.statusCode</p> </li> <li> <p>service.action.networkConnectionAction.localIpDetails.ipAddressV4</p> </li> <li> <p>service.action.networkConnectionAction.localIpDetails.ipAddressV6</p> </li> <li> <p>service.action.networkConnectionAction.protocol</p> </li> <li> <p>service.action.awsApiCallAction.serviceName</p> </li> <li> <p>service.action.awsApiCallAction.remoteAccountDetails.accountId</p> </li> <li> <p>service.additionalInfo.threatListName</p> </li> <li> <p>service.resourceRole</p> </li> <li> <p>resource.eksClusterDetails.name</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.name</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.namespace</p> </li> <li> <p>resource.kubernetesDetails.kubernetesUserDetails.username</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.containers.image</p> </li> <li> <p>resource.kubernetesDetails.kubernetesWorkloadDetails.containers.imagePrefix</p> </li> <li> <p>service.ebsVolumeScanDetails.scanId</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.name</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.severity</p> </li> <li> <p>service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.filePaths.hash</p> </li> <li> <p>resource.ecsClusterDetails.name</p> </li> <li> <p>resource.ecsClusterDetails.taskDetails.containers.image</p> </li> <li> <p>resource.ecsClusterDetails.taskDetails.definitionArn</p> </li> <li> <p>resource.containerDetails.image</p> </li> <li> <p>resource.rdsDbInstanceDetails.dbInstanceIdentifier</p> </li> <li> <p>resource.rdsDbInstanceDetails.dbClusterIdentifier</p> </li> <li> <p>resource.rdsDbInstanceDetails.engine</p> </li> <li> <p>resource.rdsDbUserDetails.user</p> </li> <li> <p>resource.rdsDbInstanceDetails.tags.key</p> </li> <li> <p>resource.rdsDbInstanceDetails.tags.value</p> </li> <li> <p>service.runtimeDetails.process.executableSha256</p> </li> <li> <p>service.runtimeDetails.process.name</p> </li> <li> <p>service.runtimeDetails.process.executablePath</p> </li> <li> <p>resource.lambdaDetails.functionName</p> </li> <li> <p>resource.lambdaDetails.functionArn</p> </li> <li> <p>resource.lambdaDetails.tags.key</p> </li> <li> <p>resource.lambdaDetails.tags.value</p> </li> </ul>",
           "locationName":"findingCriteria"
         },
         "ClientToken":{
@@ -2493,6 +2720,11 @@
           "shape":"TagMap",
           "documentation":"<p>The tags to be added to a new IP set resource.</p>",
           "locationName":"tags"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
         }
       }
     },
@@ -2623,6 +2855,11 @@
           "documentation":"<p>The idempotency token for the request.</p>",
           "idempotencyToken":true,
           "locationName":"clientToken"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to be added to a new publishing destination resource.</p>",
+          "locationName":"tags"
         }
       }
     },
@@ -2672,7 +2909,71 @@
     },
     "CreateSampleFindingsResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "CreateThreatEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "Name",
+        "Format",
+        "Location",
+        "Activate"
+      ],
       "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the detector of the GuardDuty account for which you want to create a threat entity set.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>A user-friendly name to identify the threat entity set.</p> <p>The name of your list can include lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).</p>",
+          "locationName":"name"
+        },
+        "Format":{
+          "shape":"ThreatEntitySetFormat",
+          "documentation":"<p>The format of the file that contains the threat entity set.</p>",
+          "locationName":"format"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the threat entity set. The format of the <code>Location</code> URL must be a valid Amazon S3 URL format. Invalid URL formats will result in an error, regardless of whether you activate the entity set or not. For more information about format of the location URLs, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-lists-create-activate.html\">Format of location URL under Step 2: Adding trusted or threat intelligence data</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Activate":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value that indicates whether GuardDuty should start using the uploaded threat entity set to generate findings.</p>",
+          "locationName":"activate"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>The idempotency token for the create request.</p>",
+          "idempotencyToken":true,
+          "locationName":"clientToken"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to be added to a new threat entity set resource.</p>",
+          "locationName":"tags"
+        }
+      }
+    },
+    "CreateThreatEntitySetResponse":{
+      "type":"structure",
+      "required":["ThreatEntitySetId"],
+      "members":{
+        "ThreatEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The ID returned by GuardDuty after creation of the threat entity set resource.</p>",
+          "locationName":"threatEntitySetId"
+        }
       }
     },
     "CreateThreatIntelSetRequest":{
@@ -2687,7 +2988,7 @@
       "members":{
         "DetectorId":{
           "shape":"DetectorId",
-          "documentation":"<p>The unique ID of the detector of the GuardDuty account for which you want to create a <code>ThreatIntelSet</code>.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "documentation":"<p>The unique ID of the detector of the GuardDuty account for which you want to create a <code>threatIntelSet</code>.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
           "location":"uri",
           "locationName":"detectorId"
         },
@@ -2721,6 +3022,11 @@
           "shape":"TagMap",
           "documentation":"<p>The tags to be added to a new threat list resource.</p>",
           "locationName":"tags"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
         }
       }
     },
@@ -2735,6 +3041,71 @@
         }
       }
     },
+    "CreateTrustedEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "Name",
+        "Format",
+        "Location",
+        "Activate"
+      ],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the detector of the GuardDuty account for which you want to create a trusted entity set.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>A user-friendly name to identify the trusted entity set.</p> <p>The name of your list can include lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).</p>",
+          "locationName":"name"
+        },
+        "Format":{
+          "shape":"TrustedEntitySetFormat",
+          "documentation":"<p>The format of the file that contains the trusted entity set.</p>",
+          "locationName":"format"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the threat entity set. The format of the <code>Location</code> URL must be a valid Amazon S3 URL format. Invalid URL formats will result in an error, regardless of whether you activate the entity set or not. For more information about format of the location URLs, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-lists-create-activate.html\">Format of location URL under Step 2: Adding trusted or threat intelligence data</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Activate":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value that indicates whether GuardDuty is to start using the uploaded trusted entity set.</p>",
+          "locationName":"activate"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>The idempotency token for the create request.</p>",
+          "idempotencyToken":true,
+          "locationName":"clientToken"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to be added to a new trusted entity set resource.</p>",
+          "locationName":"tags"
+        }
+      }
+    },
+    "CreateTrustedEntitySetResponse":{
+      "type":"structure",
+      "required":["TrustedEntitySetId"],
+      "members":{
+        "TrustedEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The ID returned by GuardDuty after creation of the trusted entity set resource.</p>",
+          "locationName":"trustedEntitySetId"
+        }
+      }
+    },
     "Criterion":{
       "type":"map",
       "key":{"shape":"String"},
@@ -2976,8 +3347,7 @@
     },
     "DeleteDetectorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFilterRequest":{
       "type":"structure",
@@ -3002,8 +3372,7 @@
     },
     "DeleteFilterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIPSetRequest":{
       "type":"structure",
@@ -3028,8 +3397,7 @@
     },
     "DeleteIPSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInvitationsRequest":{
       "type":"structure",
@@ -3119,9 +3487,33 @@
     },
     "DeletePublishingDestinationResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteThreatEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "ThreatEntitySetId"
+      ],
       "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the detector associated with the threat entity set resource.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "ThreatEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID that helps GuardDuty identify which threat entity set needs to be deleted.</p>",
+          "location":"uri",
+          "locationName":"threatEntitySetId"
+        }
       }
     },
+    "DeleteThreatEntitySetResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteThreatIntelSetRequest":{
       "type":"structure",
       "required":[
@@ -3145,9 +3537,33 @@
     },
     "DeleteThreatIntelSetResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteTrustedEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "TrustedEntitySetId"
+      ],
       "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the detector associated with the trusted entity set resource.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "TrustedEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID that helps GuardDuty identify which trusted entity set needs to be deleted.</p>",
+          "location":"uri",
+          "locationName":"trustedEntitySetId"
+        }
       }
     },
+    "DeleteTrustedEntitySetResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DescribeMalwareScansRequest":{
       "type":"structure",
       "required":["DetectorId"],
@@ -3315,6 +3731,11 @@
           "shape":"DestinationProperties",
           "documentation":"<p>A <code>DestinationProperties</code> object that includes the <code>DestinationArn</code> and <code>KmsKeyArn</code> of the publishing destination.</p>",
           "locationName":"destinationProperties"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags of the publishing destination resource.</p>",
+          "locationName":"tags"
         }
       }
     },
@@ -3546,8 +3967,7 @@
     },
     "DisableOrganizationAdminAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFromAdministratorAccountRequest":{
       "type":"structure",
@@ -3563,8 +3983,7 @@
     },
     "DisassociateFromAdministratorAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFromMasterAccountRequest":{
       "type":"structure",
@@ -3582,8 +4001,7 @@
     },
     "DisassociateFromMasterAccountResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true,
       "deprecatedMessage":"This output is deprecated, use DisassociateFromAdministratorAccountResponse instead"
     },
@@ -3640,6 +4058,11 @@
           "shape":"String",
           "documentation":"<p>The second and top level domain involved in the activity that potentially prompted GuardDuty to generate this finding. For a list of top-level and second-level domains, see <a href=\"https://publicsuffix.org/\">public suffix list</a>.</p>",
           "locationName":"domainWithSuffix"
+        },
+        "VpcOwnerAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the VPC through which the DNS request was made.</p>",
+          "locationName":"vpcOwnerAccountId"
         }
       },
       "documentation":"<p>Contains information about the DNS_REQUEST action described in this finding.</p>"
@@ -3783,6 +4206,17 @@
       },
       "documentation":"<p>Details about the potentially impacted Amazon EC2 instance resource.</p>"
     },
+    "Ec2InstanceUid":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "Ec2InstanceUids":{
+      "type":"list",
+      "member":{"shape":"Ec2InstanceUid"},
+      "max":25,
+      "min":0
+    },
     "Ec2NetworkInterface":{
       "type":"structure",
       "members":{
@@ -3930,6 +4364,37 @@
       },
       "documentation":"<p>Contains information about the task in an ECS cluster.</p>"
     },
+    "EksCluster":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the Amazon EKS cluster involved in the finding.</p>",
+          "locationName":"arn"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp indicating when the Amazon EKS cluster was created, in UTC format.</p>",
+          "locationName":"createdAt"
+        },
+        "Status":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The current status of the Amazon EKS cluster.</p>",
+          "locationName":"status"
+        },
+        "VpcId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Amazon Virtual Private Cloud (Amazon VPC) associated with the Amazon EKS cluster.</p>",
+          "locationName":"vpcId"
+        },
+        "Ec2InstanceUids":{
+          "shape":"Ec2InstanceUids",
+          "documentation":"<p>A list of unique identifiers for the Amazon EC2 instances that serve as worker nodes in the Amazon EKS cluster.</p>",
+          "locationName":"ec2InstanceUids"
+        }
+      },
+      "documentation":"<p>Contains information about the Amazon EKS cluster involved in a GuardDuty finding, including cluster identification, status, and network configuration.</p>"
+    },
     "EksClusterDetails":{
       "type":"structure",
       "members":{
@@ -3969,7 +4434,7 @@
     "Email":{
       "type":"string",
       "max":64,
-      "min":1,
+      "min":6,
       "sensitive":true
     },
     "EnableOrganizationAdminAccountRequest":{
@@ -3985,8 +4450,7 @@
     },
     "EnableOrganizationAdminAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EndpointIds":{
       "type":"list",
@@ -4012,6 +4476,12 @@
       },
       "documentation":"<p>Contains information about the reason that the finding was generated.</p>"
     },
+    "ExpectedBucketOwner":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"^[0-9]+$"
+    },
     "FargateDetails":{
       "type":"structure",
       "members":{
@@ -4100,7 +4570,7 @@
       "members":{
         "CriterionKey":{
           "shape":"CriterionKey",
-          "documentation":"<p>An enum value representing possible scan properties to match with given scan entries.</p> <note> <p>Replace the enum value <code>CLUSTER_NAME</code> with <code>EKS_CLUSTER_NAME</code>. <code>CLUSTER_NAME</code> has been deprecated.</p> </note>",
+          "documentation":"<p>An enum value representing possible scan properties to match with given scan entries.</p>",
           "locationName":"criterionKey"
         },
         "FilterCondition":{
@@ -4190,7 +4660,7 @@
         },
         "Region":{
           "shape":"String",
-          "documentation":"<p>The Region where the finding was generated.</p>",
+          "documentation":"<p>The Region where the finding was generated. For findings generated from <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-global-service-events\">Global Service Events</a>, the Region value in the finding might differ from the Region where GuardDuty identifies the potential threat. For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_data-sources.html#cloudtrail_global\">How GuardDuty handles Amazon Web Services CloudTrail global events</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
           "locationName":"region"
         },
         "Resource":{
@@ -4271,7 +4741,10 @@
         "EC2_NETWORK_INTERFACE",
         "S3_BUCKET",
         "S3_OBJECT",
-        "ACCESS_KEY"
+        "ACCESS_KEY",
+        "EKS_CLUSTER",
+        "KUBERNETES_WORKLOAD",
+        "CONTAINER"
       ]
     },
     "FindingStatisticType":{
@@ -4426,7 +4899,7 @@
           "locationName":"lon"
         }
       },
-      "documentation":"<p>Contains information about the location of the remote IP address.</p>"
+      "documentation":"<p>Contains information about the location of the remote IP address. By default, GuardDuty returns <code>Geolocation</code> with <code>Lat</code> and <code>Lon</code> as <code>0.0</code>.</p>"
     },
     "GetAdministratorAccountRequest":{
       "type":"structure",
@@ -4755,13 +5228,17 @@
           "shape":"TagMap",
           "documentation":"<p>The tags of the IPSet resource.</p>",
           "locationName":"tags"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter. This field appears in the response only if it was provided during IPSet creation or update.</p>",
+          "locationName":"expectedBucketOwner"
         }
       }
     },
     "GetInvitationsCountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetInvitationsCountResponse":{
       "type":"structure",
@@ -5004,6 +5481,83 @@
         }
       }
     },
+    "GetThreatEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "ThreatEntitySetId"
+      ],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the detector associated with the threat entity set resource.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "ThreatEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID that helps GuardDuty identify the threat entity set.</p>",
+          "location":"uri",
+          "locationName":"threatEntitySetId"
+        }
+      }
+    },
+    "GetThreatEntitySetResponse":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Format",
+        "Location",
+        "Status"
+      ],
+      "members":{
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the threat entity set associated with the specified <code>threatEntitySetId</code>.</p>",
+          "locationName":"name"
+        },
+        "Format":{
+          "shape":"ThreatEntitySetFormat",
+          "documentation":"<p>The format of the file that contains the threat entity set.</p>",
+          "locationName":"format"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the threat entity set.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Status":{
+          "shape":"ThreatEntitySetStatus",
+          "documentation":"<p>The status of the associated threat entity set.</p>",
+          "locationName":"status"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the threat entity set resource.</p>",
+          "locationName":"tags"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the associated threat entity set was created.</p>",
+          "locationName":"createdAt"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the associated threat entity set was updated.</p>",
+          "locationName":"updatedAt"
+        },
+        "ErrorDetails":{
+          "shape":"String",
+          "documentation":"<p>The error details when the status is shown as <code>ERROR</code>.</p>",
+          "locationName":"errorDetails"
+        }
+      }
+    },
     "GetThreatIntelSetRequest":{
       "type":"structure",
       "required":[
@@ -5058,6 +5612,88 @@
           "shape":"TagMap",
           "documentation":"<p>The tags of the threat list resource.</p>",
           "locationName":"tags"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter. This field appears in the response only if it was provided during ThreatIntelSet creation or update.</p>",
+          "locationName":"expectedBucketOwner"
+        }
+      }
+    },
+    "GetTrustedEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "TrustedEntitySetId"
+      ],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the GuardDuty detector associated with this trusted entity set.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "TrustedEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID that helps GuardDuty identify the trusted entity set.</p>",
+          "location":"uri",
+          "locationName":"trustedEntitySetId"
+        }
+      }
+    },
+    "GetTrustedEntitySetResponse":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Format",
+        "Location",
+        "Status"
+      ],
+      "members":{
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the threat entity set associated with the specified <code>trustedEntitySetId</code>.</p>",
+          "locationName":"name"
+        },
+        "Format":{
+          "shape":"TrustedEntitySetFormat",
+          "documentation":"<p>The format of the file that contains the trusted entity set.</p>",
+          "locationName":"format"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the trusted entity set.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Status":{
+          "shape":"TrustedEntitySetStatus",
+          "documentation":"<p>The status of the associated trusted entity set.</p>",
+          "locationName":"status"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with trusted entity set resource.</p>",
+          "locationName":"tags"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the associated trusted entity set was created.</p>",
+          "locationName":"createdAt"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the associated trusted entity set was updated.</p>",
+          "locationName":"updatedAt"
+        },
+        "ErrorDetails":{
+          "shape":"String",
+          "documentation":"<p>The error details when the status is shown as <code>ERROR</code>.</p>",
+          "locationName":"errorDetails"
         }
       }
     },
@@ -5225,12 +5861,12 @@
       "members":{
         "Key":{
           "shape":"IndicatorType",
-          "documentation":"<p>Specific indicator keys observed in the attack sequence.</p>",
+          "documentation":"<p>Specific indicator keys observed in the attack sequence. For description of the valid values for key, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-summary.html#guardduty-extended-threat-detection-attack-sequence-finding-details\">Attack sequence finding details</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
           "locationName":"key"
         },
         "Values":{
           "shape":"IndicatorValues",
-          "documentation":"<p>Values associated with each indicator key. For example, if the indicator key is <code>SUSPICIOUS_NETWORK</code>, then the value will be the name of the network. If the indicator key is <code>ATTACK_TACTIC</code>, then the value will be one of the MITRE tactics. </p> <p>For more information about the values associated with the key, see GuardDuty Extended Threat Detection in the <i>GuardDuty User Guide.</i> </p>",
+          "documentation":"<p>Values associated with each indicator key. For example, if the indicator key is <code>SUSPICIOUS_NETWORK</code>, then the value will be the name of the network. If the indicator key is <code>ATTACK_TACTIC</code>, then the value will be one of the MITRE tactics. </p>",
           "locationName":"values"
         },
         "Title":{
@@ -5258,7 +5894,13 @@
         "ATTACK_TECHNIQUE",
         "UNUSUAL_API_FOR_ACCOUNT",
         "UNUSUAL_ASN_FOR_ACCOUNT",
-        "UNUSUAL_ASN_FOR_USER"
+        "UNUSUAL_ASN_FOR_USER",
+        "SUSPICIOUS_PROCESS",
+        "MALICIOUS_DOMAIN",
+        "MALICIOUS_PROCESS",
+        "CRYPTOMINING_IP",
+        "CRYPTOMINING_DOMAIN",
+        "CRYPTOMINING_PROCESS"
       ]
     },
     "IndicatorValueString":{
@@ -5673,6 +6315,19 @@
       },
       "documentation":"<p>Information about the Kubernetes API for which you check if you have permission to call.</p>"
     },
+    "KubernetesResourcesTypes":{
+      "type":"string",
+      "enum":[
+        "PODS",
+        "JOBS",
+        "CRONJOBS",
+        "DEPLOYMENTS",
+        "DAEMONSETS",
+        "STATEFULSETS",
+        "REPLICASETS",
+        "REPLICATIONCONTROLLERS"
+      ]
+    },
     "KubernetesRoleBindingDetails":{
       "type":"structure",
       "members":{
@@ -5756,6 +6411,27 @@
       },
       "documentation":"<p>Details about the Kubernetes user involved in a Kubernetes finding.</p>"
     },
+    "KubernetesWorkload":{
+      "type":"structure",
+      "members":{
+        "ContainerUids":{
+          "shape":"ContainerUids",
+          "documentation":"<p>A list of unique identifiers for the containers that are part of the Kubernetes workload.</p>",
+          "locationName":"containerUids"
+        },
+        "Namespace":{
+          "shape":"String",
+          "documentation":"<p>The Kubernetes namespace in which the workload is running, providing logical isolation within the cluster.</p>",
+          "locationName":"namespace"
+        },
+        "KubernetesResourcesTypes":{
+          "shape":"KubernetesResourcesTypes",
+          "documentation":"<p>The types of Kubernetes resources involved in the workload.</p>",
+          "locationName":"type"
+        }
+      },
+      "documentation":"<p>Contains information about Kubernetes workloads involved in a GuardDuty finding, including pods, deployments, and other Kubernetes resources.</p>"
+    },
     "KubernetesWorkloadDetails":{
       "type":"structure",
       "members":{
@@ -6164,7 +6840,7 @@
       "members":{
         "NextToken":{
           "shape":"String",
-          "documentation":"<p>You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of <code>NextToken</code> from the previous response to continue listing data.</p>",
+          "documentation":"<p>You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of <code>NextToken</code> from the previous response to continue listing data. The default page size is 100 plans.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         }
@@ -6324,6 +7000,46 @@
         }
       }
     },
+    "ListThreatEntitySetsRequest":{
+      "type":"structure",
+      "required":["DetectorId"],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the GuardDuty detector that is associated with this threat entity set.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListThreatEntitySetsResponse":{
+      "type":"structure",
+      "required":["ThreatEntitySetIds"],
+      "members":{
+        "ThreatEntitySetIds":{
+          "shape":"ThreatEntitySetIds",
+          "documentation":"<p>The IDs of the threat entity set resources.</p>",
+          "locationName":"threatEntitySetIds"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination parameter to be used on the next list operation to retrieve more items.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "ListThreatIntelSetsRequest":{
       "type":"structure",
       "required":["DetectorId"],
@@ -6364,6 +7080,46 @@
         }
       }
     },
+    "ListTrustedEntitySetsRequest":{
+      "type":"structure",
+      "required":["DetectorId"],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the GuardDuty detector that is associated with this threat entity set.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListTrustedEntitySetsResponse":{
+      "type":"structure",
+      "required":["TrustedEntitySetIds"],
+      "members":{
+        "TrustedEntitySetIds":{
+          "shape":"TrustedEntitySetIds",
+          "documentation":"<p>The IDs of the trusted entity set resources.</p>",
+          "locationName":"trustedEntitySetIds"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination parameter to be used on the next list operation to retrieve more items.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
     "LocalIpDetails":{
       "type":"structure",
       "members":{
@@ -6506,7 +7262,7 @@
         },
         "Message":{
           "shape":"String",
-          "documentation":"<p>Issue message that specifies the reason. For information about potential troubleshooting steps, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/troubleshoot-s3-malware-protection-status-errors.html\">Troubleshooting Malware Protection for S3 status issues</a> in the <i>GuardDuty User Guide</i>.</p>",
+          "documentation":"<p>Issue message that specifies the reason. For information about potential troubleshooting steps, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/troubleshoot-s3-malware-protection-status-errors.html\">Troubleshooting Malware Protection for S3 status issues</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
           "locationName":"message"
         }
       },
@@ -7634,6 +8390,21 @@
       },
       "documentation":"<p>Information about the observed process.</p>"
     },
+    "ProcessName":{
+      "type":"string",
+      "max":4096,
+      "min":0
+    },
+    "ProcessPath":{
+      "type":"string",
+      "max":4096,
+      "min":0
+    },
+    "ProcessSha256":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
     "ProductCode":{
       "type":"structure",
       "members":{
@@ -8032,6 +8803,21 @@
           "shape":"S3Object",
           "documentation":"<p>Contains information about the Amazon S3 object.</p>",
           "locationName":"s3Object"
+        },
+        "EksCluster":{
+          "shape":"EksCluster",
+          "documentation":"<p>Contains detailed information about the Amazon EKS cluster associated with the activity that prompted GuardDuty to generate a finding.</p>",
+          "locationName":"eksCluster"
+        },
+        "KubernetesWorkload":{
+          "shape":"KubernetesWorkload",
+          "documentation":"<p>Contains detailed information about the Kubernetes workload associated with the activity that prompted GuardDuty to generate a finding.</p>",
+          "locationName":"kubernetesWorkload"
+        },
+        "Container":{
+          "shape":"ContainerFindingResource",
+          "documentation":"<p>Contains detailed information about the container associated with the activity that prompted GuardDuty to generate a finding.</p>",
+          "locationName":"container"
         }
       },
       "documentation":"<p>Contains information about the Amazon Web Services resource that is associated with the activity that prompted GuardDuty to generate a finding.</p>"
@@ -8897,6 +9683,11 @@
           "shape":"Indicators",
           "documentation":"<p>Contains information about the indicators observed in the attack sequence.</p>",
           "locationName":"sequenceIndicators"
+        },
+        "AdditionalSequenceTypes":{
+          "shape":"AdditionalSequenceTypes",
+          "documentation":"<p>Additional types of sequences that may be associated with the attack sequence finding, providing further context about the nature of the detected threat.</p>",
+          "locationName":"additionalSequenceTypes"
         }
       },
       "documentation":"<p>Contains information about the GuardDuty attack sequence finding.</p>"
@@ -9078,7 +9869,7 @@
         },
         "Type":{
           "shape":"SignalType",
-          "documentation":"<p>The type of the signal used to identify an attack sequence.</p> <p>Signals can be GuardDuty findings or activities observed in data sources that GuardDuty monitors. For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_data-sources.html\">Foundational data sources</a> in the <i>GuardDuty User Guide</i>.</p> <p>A signal type can be one of the valid values listed in this API. Here are the related descriptions:</p> <ul> <li> <p> <code>FINDING</code> - Individually generated GuardDuty finding.</p> </li> <li> <p> <code>CLOUD_TRAIL</code> - Activity observed from CloudTrail logs</p> </li> <li> <p> <code>S3_DATA_EVENTS</code> - Activity observed from CloudTrail data events for S3. Activities associated with this type will show up only when you have enabled GuardDuty S3 Protection feature in your account. For more information about S3 Protection and steps to enable it, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html\">S3 Protection</a> in the <i>GuardDuty User Guide</i>.</p> </li> </ul>",
+          "documentation":"<p>The type of the signal used to identify an attack sequence.</p> <p>Signals can be GuardDuty findings or activities observed in data sources that GuardDuty monitors. For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_data-sources.html\">Foundational data sources</a> in the <i>Amazon GuardDuty User Guide</i>.</p> <p>A signal type can be one of the valid values listed in this API. Here are the related descriptions:</p> <ul> <li> <p> <code>FINDING</code> - Individually generated GuardDuty finding.</p> </li> <li> <p> <code>CLOUD_TRAIL</code> - Activity observed from CloudTrail logs</p> </li> <li> <p> <code>S3_DATA_EVENTS</code> - Activity observed from CloudTrail data events for S3. Activities associated with this type will show up only when you have enabled GuardDuty S3 Protection feature in your account. For more information about S3 Protection and steps to enable it, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html\">S3 Protection</a> in the <i>Amazon GuardDuty User Guide</i>.</p> </li> </ul>",
           "locationName":"type"
         },
         "Description":{
@@ -9113,7 +9904,7 @@
         },
         "Severity":{
           "shape":"Double",
-          "documentation":"<p>The severity associated with the signal. For more information about severity, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-severity.html\">Findings severity levels</a> in the <i>GuardDuty User Guide</i>.</p>",
+          "documentation":"<p>The severity associated with the signal. For more information about severity, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-severity.html\">Findings severity levels</a> in the <i>Amazon GuardDuty User Guide</i>.</p>",
           "locationName":"severity"
         },
         "Count":{
@@ -9153,14 +9944,18 @@
       "enum":[
         "FINDING",
         "CLOUD_TRAIL",
-        "S3_DATA_EVENTS"
+        "S3_DATA_EVENTS",
+        "EKS_AUDIT_LOGS",
+        "FLOW_LOGS",
+        "DNS_LOGS",
+        "RUNTIME_MONITORING"
       ]
     },
     "Signals":{
       "type":"list",
       "member":{"shape":"Signal"},
       "max":100,
-      "min":2
+      "min":1
     },
     "SortCriteria":{
       "type":"structure",
@@ -9331,8 +10126,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -9389,6 +10183,39 @@
       },
       "documentation":"<p>Contains details about identified threats organized by threat name.</p>"
     },
+    "ThreatEntitySetFormat":{
+      "type":"string",
+      "enum":[
+        "TXT",
+        "STIX",
+        "OTX_CSV",
+        "ALIEN_VAULT",
+        "PROOF_POINT",
+        "FIRE_EYE"
+      ],
+      "max":300,
+      "min":1
+    },
+    "ThreatEntitySetIds":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":50,
+      "min":0
+    },
+    "ThreatEntitySetStatus":{
+      "type":"string",
+      "enum":[
+        "INACTIVE",
+        "ACTIVATING",
+        "ACTIVE",
+        "DEACTIVATING",
+        "ERROR",
+        "DELETE_PENDING",
+        "DELETED"
+      ],
+      "max":300,
+      "min":1
+    },
     "ThreatIntelSetFormat":{
       "type":"string",
       "enum":[
@@ -9499,6 +10326,39 @@
       },
       "documentation":"<p>Represents the reason the scan was triggered.</p>"
     },
+    "TrustedEntitySetFormat":{
+      "type":"string",
+      "enum":[
+        "TXT",
+        "STIX",
+        "OTX_CSV",
+        "ALIEN_VAULT",
+        "PROOF_POINT",
+        "FIRE_EYE"
+      ],
+      "max":300,
+      "min":1
+    },
+    "TrustedEntitySetIds":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":50,
+      "min":0
+    },
+    "TrustedEntitySetStatus":{
+      "type":"string",
+      "enum":[
+        "INACTIVE",
+        "ACTIVATING",
+        "ACTIVE",
+        "DEACTIVATING",
+        "ERROR",
+        "DELETE_PENDING",
+        "DELETED"
+      ],
+      "max":300,
+      "min":1
+    },
     "UnarchiveFindingsRequest":{
       "type":"structure",
       "required":[
@@ -9521,8 +10381,7 @@
     },
     "UnarchiveFindingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UnprocessedAccount":{
       "type":"structure",
@@ -9583,8 +10442,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDetectorRequest":{
       "type":"structure",
@@ -9622,8 +10480,7 @@
     },
     "UpdateDetectorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFilterRequest":{
       "type":"structure",
@@ -9702,7 +10559,7 @@
           "locationName":"feedback"
         },
         "Comments":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Additional feedback about the GuardDuty findings.</p>",
           "locationName":"comments"
         }
@@ -9710,8 +10567,7 @@
     },
     "UpdateFindingsFeedbackResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateIPSetRequest":{
       "type":"structure",
@@ -9746,13 +10602,17 @@
           "shape":"Boolean",
           "documentation":"<p>The updated Boolean value that specifies whether the IPSet is active or not.</p>",
           "locationName":"activate"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
         }
       }
     },
     "UpdateIPSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMalwareProtectionPlanRequest":{
       "type":"structure",
@@ -9805,8 +10665,7 @@
     },
     "UpdateMalwareScanSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMemberDetectorsRequest":{
       "type":"structure",
@@ -9889,8 +10748,7 @@
     },
     "UpdateOrganizationConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateProtectedResource":{
       "type":"structure",
@@ -9931,8 +10789,7 @@
     },
     "UpdatePublishingDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateS3BucketResource":{
       "type":"structure",
@@ -9945,6 +10802,51 @@
       },
       "documentation":"<p>Information about the protected S3 bucket resource.</p>"
     },
+    "UpdateThreatEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "ThreatEntitySetId"
+      ],
+      "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the GuardDuty detector associated with the threat entity set that you want to update.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "ThreatEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The ID returned by GuardDuty after updating the threat entity set resource.</p>",
+          "location":"uri",
+          "locationName":"threatEntitySetId"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>A user-friendly name to identify the trusted entity set.</p> <p>The name of your list can include lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).</p>",
+          "locationName":"name"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the trusted entity set.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Activate":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value that indicates whether GuardDuty is to start using this updated threat entity set. After you update an entity set, you will need to activate it again. It might take up to 15 minutes for the updated entity set to be effective.</p>",
+          "locationName":"activate"
+        }
+      }
+    },
+    "UpdateThreatEntitySetResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateThreatIntelSetRequest":{
       "type":"structure",
       "required":[
@@ -9978,14 +10880,63 @@
           "shape":"Boolean",
           "documentation":"<p>The updated Boolean value that specifies whether the ThreateIntelSet is active or not.</p>",
           "locationName":"activate"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
         }
       }
     },
     "UpdateThreatIntelSetResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateTrustedEntitySetRequest":{
+      "type":"structure",
+      "required":[
+        "DetectorId",
+        "TrustedEntitySetId"
+      ],
       "members":{
+        "DetectorId":{
+          "shape":"DetectorId",
+          "documentation":"<p>The unique ID of the GuardDuty detector associated with the threat entity set that you want to update.</p> <p>To find the <code>detectorId</code> in the current Region, see the Settings page in the GuardDuty console, or run the <a href=\"https://docs.aws.amazon.com/guardduty/latest/APIReference/API_ListDetectors.html\">ListDetectors</a> API.</p>",
+          "location":"uri",
+          "locationName":"detectorId"
+        },
+        "TrustedEntitySetId":{
+          "shape":"String",
+          "documentation":"<p>The ID returned by GuardDuty after updating the trusted entity set resource.</p>",
+          "location":"uri",
+          "locationName":"trustedEntitySetId"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>A user-friendly name to identify the trusted entity set.</p> <p>The name of your list can include lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).</p>",
+          "locationName":"name"
+        },
+        "Location":{
+          "shape":"Location",
+          "documentation":"<p>The URI of the file that contains the trusted entity set.</p>",
+          "locationName":"location"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"ExpectedBucketOwner",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the <b>location</b> parameter.</p>",
+          "locationName":"expectedBucketOwner"
+        },
+        "Activate":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value that indicates whether GuardDuty is to start using this updated trusted entity set. After you update an entity set, you will need to activate it again. It might take up to 15 minutes for the updated entity set to be effective.</p>",
+          "locationName":"activate"
+        }
       }
     },
+    "UpdateTrustedEntitySetResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UsageAccountResult":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/health/2016-08-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/health/2016-08-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/health/2016-08-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/health/2016-08-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/service-2.json 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates a data store that can ingest and export FHIR formatted data.</p>"
+      "documentation":"<p>Create a FHIR-enabled data store.</p>"
     },
     "DeleteFHIRDatastore":{
       "name":"DeleteFHIRDatastore",
@@ -48,7 +48,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes a data store. </p>"
+      "documentation":"<p>Delete a FHIR-enabled data store.</p>"
     },
     "DescribeFHIRDatastore":{
       "name":"DescribeFHIRDatastore",
@@ -64,7 +64,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the properties associated with the FHIR data store, including the data store ID, data store ARN, data store name, data store status, when the data store was created, data store type version, and the data store's endpoint.</p>"
+      "documentation":"<p>Get properties for a FHIR-enabled data store.</p>"
     },
     "DescribeFHIRExportJob":{
       "name":"DescribeFHIRExportJob",
@@ -80,7 +80,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Displays the properties of a FHIR export job, including the ID, ARN, name, and the status of the job.</p>"
+      "documentation":"<p>Get FHIR export job properties.</p>"
     },
     "DescribeFHIRImportJob":{
       "name":"DescribeFHIRImportJob",
@@ -96,7 +96,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Displays the properties of a FHIR import job, including the ID, ARN, name, and the status of the job. </p>"
+      "documentation":"<p>Get the import job properties to learn more about the job or job progress.</p>"
     },
     "ListFHIRDatastores":{
       "name":"ListFHIRDatastores",
@@ -111,7 +111,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists all FHIR data stores that are in the user’s account, regardless of data store status.</p>"
+      "documentation":"<p>List all FHIR-enabled data stores in a user’s account, regardless of data store status.</p>"
     },
     "ListFHIRExportJobs":{
       "name":"ListFHIRExportJobs",
@@ -128,7 +128,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p> Lists all FHIR export jobs associated with an account and their statuses. </p>"
+      "documentation":"<p>Lists all FHIR export jobs associated with an account and their statuses.</p>"
     },
     "ListFHIRImportJobs":{
       "name":"ListFHIRImportJobs",
@@ -145,7 +145,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p> Lists all FHIR import jobs associated with an account and their statuses. </p>"
+      "documentation":"<p>List all FHIR import jobs associated with an account and their statuses.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -159,7 +159,7 @@
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p> Returns a list of all existing tags associated with a data store. </p>"
+      "documentation":"<p>Returns a list of all existing tags associated with a data store.</p>"
     },
     "StartFHIRExportJob":{
       "name":"StartFHIRExportJob",
@@ -176,7 +176,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Begins a FHIR export job.</p>"
+      "documentation":"<p>Start a FHIR export job.</p>"
     },
     "StartFHIRImportJob":{
       "name":"StartFHIRImportJob",
@@ -193,7 +193,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Begins a FHIR Import job.</p>"
+      "documentation":"<p>Start importing bulk FHIR data into an ACTIVE data store. The import job imports FHIR data found in the <code>InputDataConfig</code> object and stores processing results in the <code>JobOutputDataConfig</code> object.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -207,7 +207,7 @@
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p> Adds a user specified key and value tag to a data store. </p>"
+      "documentation":"<p>Add a user-specifed key and value tag to a data store.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -221,7 +221,7 @@
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p> Removes tags from a data store. </p>"
+      "documentation":"<p>Remove a user-specifed key and value tag from a data store.</p>"
     }
   },
   "shapes":{
@@ -273,7 +273,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>The data store is in a transition state and the user requested action can not be performed.</p>",
+      "documentation":"<p>The data store is in a transition state and the user requested action cannot be performed.</p>",
       "exception":true
     },
     "CreateFHIRDatastoreRequest":{
@@ -282,32 +282,32 @@
       "members":{
         "DatastoreName":{
           "shape":"DatastoreName",
-          "documentation":"<p>The user generated name for the data store.</p>"
+          "documentation":"<p>The data store name (user-generated).</p>"
         },
         "DatastoreTypeVersion":{
           "shape":"FHIRVersion",
-          "documentation":"<p>The FHIR version of the data store. The only supported version is R4.</p>"
+          "documentation":"<p>The FHIR release version supported by the data store. Current support is for version <code>R4</code>.</p>"
         },
         "SseConfiguration":{
           "shape":"SseConfiguration",
-          "documentation":"<p> The server-side encryption key configuration for a customer provided encryption key specified for creating a data store. </p>"
+          "documentation":"<p>The server-side encryption key configuration for a customer-provided encryption key specified for creating a data store. </p>"
         },
         "PreloadDataConfig":{
           "shape":"PreloadDataConfig",
-          "documentation":"<p>Optional parameter to preload data upon creation of the data store. Currently, the only supported preloaded data is synthetic data generated from Synthea.</p>"
+          "documentation":"<p>An optional parameter to preload (import) open source Synthea FHIR data upon creation of the data store.</p>"
         },
         "ClientToken":{
           "shape":"ClientTokenString",
-          "documentation":"<p>Optional user provided token used for ensuring idempotency.</p>",
+          "documentation":"<p>An optional user-provided token to ensure API idempotency.</p>",
           "idempotencyToken":true
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p> Resource tags that are applied to a data store when it is created. </p>"
+          "documentation":"<p>The resource tags applied to a data store when it is created.</p>"
         },
         "IdentityProviderConfiguration":{
           "shape":"IdentityProviderConfiguration",
-          "documentation":"<p>The configuration of the identity provider that you want to use for your data store.</p>"
+          "documentation":"<p>The identity provider configuration to use for the data store.</p>"
         }
       }
     },
@@ -322,19 +322,19 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated data store id. This id is in the output from the initial data store creation call.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         },
         "DatastoreArn":{
           "shape":"DatastoreArn",
-          "documentation":"<p>The data store ARN is generated during the creation of the data store and can be found in the output from the initial data store creation call.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the data store.</p>"
         },
         "DatastoreStatus":{
           "shape":"DatastoreStatus",
-          "documentation":"<p>The status of the FHIR data store.</p>"
+          "documentation":"<p>The data store status.</p>"
         },
         "DatastoreEndpoint":{
           "shape":"BoundedLengthString",
-          "documentation":"<p>The AWS endpoint for the created data store.</p>"
+          "documentation":"<p>The AWS endpoint created for the data store.</p>"
         }
       }
     },
@@ -347,22 +347,22 @@
       "members":{
         "DatastoreName":{
           "shape":"DatastoreName",
-          "documentation":"<p>Allows the user to filter data store results by name.</p>"
+          "documentation":"<p>Filter data store results by name.</p>"
         },
         "DatastoreStatus":{
           "shape":"DatastoreStatus",
-          "documentation":"<p>Allows the user to filter data store results by status.</p>"
+          "documentation":"<p>Filter data store results by status.</p>"
         },
         "CreatedBefore":{
           "shape":"Timestamp",
-          "documentation":"<p>A filter that allows the user to set cutoff dates for records. All data stores created before the specified date will be included in the results. </p>"
+          "documentation":"<p>Filter to set cutoff dates for records. All data stores created before the specified date are included in the results. </p>"
         },
         "CreatedAfter":{
           "shape":"Timestamp",
-          "documentation":"<p>A filter that allows the user to set cutoff dates for records. All data stores created after the specified date will be included in the results.</p>"
+          "documentation":"<p>Filter to set cutoff dates for records. All data stores created after the specified date are included in the results.</p>"
         }
       },
-      "documentation":"<p>The filters applied to data store query.</p>"
+      "documentation":"<p>The filters applied to a data store query.</p>"
     },
     "DatastoreId":{
       "type":"string",
@@ -388,50 +388,50 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated ID number for the data store.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         },
         "DatastoreArn":{
           "shape":"DatastoreArn",
-          "documentation":"<p>The Amazon Resource Name used in the creation of the data store.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) used in the creation of the data store.</p>"
         },
         "DatastoreName":{
           "shape":"DatastoreName",
-          "documentation":"<p>The user-generated name for the data store.</p>"
+          "documentation":"<p>The data store name.</p>"
         },
         "DatastoreStatus":{
           "shape":"DatastoreStatus",
-          "documentation":"<p>The status of the data store.</p>"
+          "documentation":"<p>The data store status.</p>"
         },
         "CreatedAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The time that a data store was created. </p>"
+          "documentation":"<p>The time the data store was created. </p>"
         },
         "DatastoreTypeVersion":{
           "shape":"FHIRVersion",
-          "documentation":"<p>The FHIR version. Only R4 version data is supported.</p>"
+          "documentation":"<p>The FHIR release version supported by the data store. Current support is for version <code>R4</code>.</p>"
         },
         "DatastoreEndpoint":{
           "shape":"String",
-          "documentation":"<p>The AWS endpoint for the data store. Each data store will have it's own endpoint with data store ID in the endpoint URL.</p>"
+          "documentation":"<p>The AWS endpoint for the data store.</p>"
         },
         "SseConfiguration":{
           "shape":"SseConfiguration",
-          "documentation":"<p> The server-side encryption key configuration for a customer provided encryption key (CMK). </p>"
+          "documentation":"<p> The server-side encryption key configuration for a customer provided encryption key.</p>"
         },
         "PreloadDataConfig":{
           "shape":"PreloadDataConfig",
-          "documentation":"<p>The preloaded data configuration for the data store. Only data preloaded from Synthea is supported.</p>"
+          "documentation":"<p>The preloaded Synthea data configuration for the data store.</p>"
         },
         "IdentityProviderConfiguration":{
           "shape":"IdentityProviderConfiguration",
-          "documentation":"<p>The identity provider that you selected when you created the data store.</p>"
+          "documentation":"<p>The identity provider selected during data store creation.</p>"
         },
         "ErrorCause":{
           "shape":"ErrorCause",
           "documentation":"<p>The error cause for the current data store operation.</p>"
         }
       },
-      "documentation":"<p>Displays the properties of the data store, including the ID, ARN, name, and the status of the data store.</p>"
+      "documentation":"<p>The data store properties.</p>"
     },
     "DatastorePropertiesList":{
       "type":"list",
@@ -453,7 +453,7 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p> The AWS-generated ID for the data store to be deleted.</p>"
+          "documentation":"<p> The AWS-generated identifier for the data store to be deleted.</p>"
         }
       }
     },
@@ -468,19 +468,19 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated ID for the data store to be deleted.</p>"
+          "documentation":"<p>The AWS-generated ID for the deleted data store.</p>"
         },
         "DatastoreArn":{
           "shape":"DatastoreArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that gives AWS HealthLake access permission.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that grants access permission to AWS HealthLake.</p>"
         },
         "DatastoreStatus":{
           "shape":"DatastoreStatus",
-          "documentation":"<p>The status of the data store that the user has requested to be deleted. </p>"
+          "documentation":"<p>The data store status.</p>"
         },
         "DatastoreEndpoint":{
           "shape":"BoundedLengthString",
-          "documentation":"<p>The AWS endpoint for the data store the user has requested to be deleted.</p>"
+          "documentation":"<p>The AWS endpoint of the data store to be deleted.</p>"
         }
       }
     },
@@ -490,7 +490,7 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated data store ID.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         }
       }
     },
@@ -500,7 +500,7 @@
       "members":{
         "DatastoreProperties":{
           "shape":"DatastoreProperties",
-          "documentation":"<p>All properties associated with a data store, including the data store ID, data store ARN, data store name, data store status, when the data store was created, data store type version, and the data store's endpoint.</p>"
+          "documentation":"<p>The data store properties.</p>"
         }
       }
     },
@@ -513,11 +513,11 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS generated ID for the data store from which files are being exported from for an export job.</p>"
+          "documentation":"<p>The data store identifier from which FHIR data is being exported from.</p>"
         },
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS generated ID for an export job.</p>"
+          "documentation":"<p>The export job identifier.</p>"
         }
       }
     },
@@ -527,7 +527,7 @@
       "members":{
         "ExportJobProperties":{
           "shape":"ExportJobProperties",
-          "documentation":"<p>Displays the properties of the export job, including the ID, Arn, Name, and the status of the job. </p>"
+          "documentation":"<p>The export job properties.</p>"
         }
       }
     },
@@ -540,11 +540,11 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated ID of the data store.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         },
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS-generated job ID.</p>"
+          "documentation":"<p>The import job identifier.</p>"
         }
       }
     },
@@ -554,7 +554,7 @@
       "members":{
         "ImportJobProperties":{
           "shape":"ImportJobProperties",
-          "documentation":"<p>The properties of the Import job request, including the ID, ARN, name, status of the job, and the progress report of the job.</p>"
+          "documentation":"<p>The import job properties.</p>"
         }
       }
     },
@@ -576,14 +576,14 @@
       "members":{
         "ErrorMessage":{
           "shape":"ErrorMessage",
-          "documentation":"<p>The text of the error message.</p>"
+          "documentation":"<p>The error message text for <code>ErrorCause</code>.</p>"
         },
         "ErrorCategory":{
           "shape":"ErrorCategory",
-          "documentation":"<p>The error category of the create/delete data store operation. Possible statuses are RETRYABLE_ERROR or NON_RETRYABLE_ERROR.</p>"
+          "documentation":"<p>The error category for <code>ErrorCause</code>.</p>"
         }
       },
-      "documentation":"<p>The error info of the create/delete data store operation.</p>"
+      "documentation":"<p>The error information for <code>CreateFHIRDatastore</code> and <code>DeleteFHIRDatastore</code> actions.</p>"
     },
     "ErrorMessage":{
       "type":"string",
@@ -602,42 +602,42 @@
       "members":{
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS generated ID for an export job.</p>"
+          "documentation":"<p>The export job identifier.</p>"
         },
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p>The user generated name for an export job.</p>"
+          "documentation":"<p>The export job name.</p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p>The status of a FHIR export job. Possible statuses are SUBMITTED, IN_PROGRESS, COMPLETED, or FAILED.</p>"
+          "documentation":"<p>The export job status.</p>"
         },
         "SubmitTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time an export job was initiated.</p>"
+          "documentation":"<p>The time the export job was initiated.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time an export job completed.</p>"
+          "documentation":"<p>The time the export job completed.</p>"
         },
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS generated ID for the data store from which files are being exported for an export job.</p>"
+          "documentation":"<p>The data store identifier from which files are being exported.</p>"
         },
         "OutputDataConfig":{
           "shape":"OutputDataConfig",
-          "documentation":"<p>The output data configuration that was supplied when the export job was created.</p>"
+          "documentation":"<p>The output data configuration supplied when the export job was created.</p>"
         },
         "DataAccessRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name used during the initiation of the job.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) used during the initiation of the export job.</p>"
         },
         "Message":{
           "shape":"Message",
-          "documentation":"<p>An explanation of any errors that may have occurred during the export job.</p>"
+          "documentation":"<p>An explanation of any errors that might have occurred during the export job.</p>"
         }
       },
-      "documentation":"<p>The properties of a FHIR export job, including the ID, ARN, name, and the status of the job.</p>"
+      "documentation":"<p>The properties of a FHIR export job.</p>"
     },
     "ExportJobPropertiesList":{
       "type":"list",
@@ -661,22 +661,22 @@
       "members":{
         "AuthorizationStrategy":{
           "shape":"AuthorizationStrategy",
-          "documentation":"<p>The authorization strategy that you selected when you created the data store.</p>"
+          "documentation":"<p>The authorization strategy selected when the HealthLake data store is created.</p> <note> <p>HealthLake provides support for both SMART on FHIR V1 and V2 as described below.</p> <ul> <li> <p> <code>SMART_ON_FHIR_V1</code> – Support for only SMART on FHIR V1, which includes <code>read</code> (read/search) and <code>write</code> (create/update/delete) permissions.</p> </li> <li> <p> <code>SMART_ON_FHIR</code> – Support for both SMART on FHIR V1 and V2, which includes <code>create</code>, <code>read</code>, <code>update</code>, <code>delete</code>, and <code>search</code> permissions.</p> </li> <li> <p> <code>AWS_AUTH</code> – The default HealthLake authorization strategy; not affiliated with SMART on FHIR.</p> </li> </ul> </note>"
         },
         "FineGrainedAuthorizationEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>If you enabled fine-grained authorization when you created the data store.</p>"
+          "documentation":"<p>The parameter to enable SMART on FHIR fine-grained authorization for the data store.</p>"
         },
         "Metadata":{
           "shape":"ConfigurationMetadata",
-          "documentation":"<p>The JSON metadata elements that you want to use in your identity provider configuration. Required elements are listed based on the launch specification of the SMART application. For more information on all possible elements, see <a href=\"https://build.fhir.org/ig/HL7/smart-app-launch/conformance.html#metadata\">Metadata</a> in SMART's App Launch specification.</p> <p> <code>authorization_endpoint</code>: The URL to the OAuth2 authorization endpoint.</p> <p> <code>grant_types_supported</code>: An array of grant types that are supported at the token endpoint. You must provide at least one grant type option. Valid options are <code>authorization_code</code> and <code>client_credentials</code>.</p> <p> <code>token_endpoint</code>: The URL to the OAuth2 token endpoint.</p> <p> <code>capabilities</code>: An array of strings of the SMART capabilities that the authorization server supports.</p> <p> <code>code_challenge_methods_supported</code>: An array of strings of supported PKCE code challenge methods. You must include the <code>S256</code> method in the array of PKCE code challenge methods.</p>"
+          "documentation":"<p>The JSON metadata elements to use in your identity provider configuration. Required elements are listed based on the launch specification of the SMART application. For more information on all possible elements, see <a href=\"https://build.fhir.org/ig/HL7/smart-app-launch/conformance.html#metadata\">Metadata</a> in SMART's App Launch specification.</p> <p> <code>authorization_endpoint</code>: The URL to the OAuth2 authorization endpoint.</p> <p> <code>grant_types_supported</code>: An array of grant types that are supported at the token endpoint. You must provide at least one grant type option. Valid options are <code>authorization_code</code> and <code>client_credentials</code>.</p> <p> <code>token_endpoint</code>: The URL to the OAuth2 token endpoint.</p> <p> <code>capabilities</code>: An array of strings of the SMART capabilities that the authorization server supports.</p> <p> <code>code_challenge_methods_supported</code>: An array of strings of supported PKCE code challenge methods. You must include the <code>S256</code> method in the array of PKCE code challenge methods.</p>"
         },
         "IdpLambdaArn":{
           "shape":"LambdaArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function that you want to use to decode the access token created by the authorization server.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function to use to decode the access token created by the authorization server.</p>"
         }
       },
-      "documentation":"<p>The identity provider configuration that you gave when the data store was created.</p>"
+      "documentation":"<p>The identity provider configuration selected when the data store was created.</p>"
     },
     "ImportJobProperties":{
       "type":"structure",
@@ -690,47 +690,51 @@
       "members":{
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS-generated id number for the Import job.</p>"
+          "documentation":"<p>The import job identifier.</p>"
         },
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p>The user-generated name for an Import job.</p>"
+          "documentation":"<p>The import job name.</p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p>The job status for an Import job. Possible statuses are SUBMITTED, IN_PROGRESS, COMPLETED_WITH_ERRORS, COMPLETED, FAILED.</p>"
+          "documentation":"<p>The import job status.</p>"
         },
         "SubmitTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time that the Import job was submitted for processing.</p>"
+          "documentation":"<p>The time the import job was submitted for processing.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
-          "documentation":"<p>The time that the Import job was completed.</p>"
+          "documentation":"<p>The time the import job was completed.</p>"
         },
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The datastore id used when the Import job was created. </p>"
+          "documentation":"<p>The data store identifier. </p>"
         },
         "InputDataConfig":{
           "shape":"InputDataConfig",
-          "documentation":"<p>The input data configuration that was supplied when the Import job was created.</p>"
+          "documentation":"<p>The input data configuration supplied when the import job was created.</p>"
         },
         "JobOutputDataConfig":{"shape":"OutputDataConfig"},
         "JobProgressReport":{
           "shape":"JobProgressReport",
-          "documentation":"<p>Displays the progress of the import job, including total resources scanned, total resources ingested, and total size of data ingested.</p>"
+          "documentation":"<p>Displays the progress of the import job, including total resources scanned, total resources imported, and total size of data imported.</p>"
         },
         "DataAccessRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that gives AWS HealthLake access to your input data.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that grants AWS HealthLake access to the input data.</p>"
         },
         "Message":{
           "shape":"Message",
-          "documentation":"<p>An explanation of any errors that may have occurred during the FHIR import job. </p>"
+          "documentation":"<p>An explanation of any errors that might have occurred during the FHIR import job.</p>"
+        },
+        "ValidationLevel":{
+          "shape":"ValidationLevel",
+          "documentation":"<p>The validation level of the import job.</p>"
         }
       },
-      "documentation":"<p>Displays the properties of the import job, including the ID, Arn, Name, the status of the job, and the progress report of the job.</p>"
+      "documentation":"<p>The import job properties.</p>"
     },
     "ImportJobPropertiesList":{
       "type":"list",
@@ -741,10 +745,10 @@
       "members":{
         "S3Uri":{
           "shape":"S3Uri",
-          "documentation":"<p>The S3Uri is the user specified S3 location of the FHIR data to be imported into AWS HealthLake. </p>"
+          "documentation":"<p>The <code>S3Uri</code> is the user-specified S3 location of the FHIR data to be imported into AWS HealthLake.</p>"
         }
       },
-      "documentation":"<p> The input properties for an import job.</p>",
+      "documentation":"<p> The import job input properties.</p>",
       "union":true
     },
     "InternalServerException":{
@@ -752,7 +756,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>Unknown error occurs in the service.</p>",
+      "documentation":"<p>An unknown internal error occurred in the service.</p>",
       "exception":true,
       "fault":true
     },
@@ -773,23 +777,23 @@
       "members":{
         "TotalNumberOfScannedFiles":{
           "shape":"GenericLong",
-          "documentation":"<p>The number of files scanned from input S3 bucket.</p>"
+          "documentation":"<p>The number of files scanned from the S3 input bucket.</p>"
         },
         "TotalSizeOfScannedFilesInMB":{
           "shape":"GenericDouble",
-          "documentation":"<p>The size (in MB) of the files scanned from the input S3 bucket.</p>"
+          "documentation":"<p>The size (in MB) of files scanned from the S3 input bucket.</p>"
         },
         "TotalNumberOfImportedFiles":{
           "shape":"GenericLong",
-          "documentation":"<p>The number of files imported so far.</p>"
+          "documentation":"<p>The number of files imported.</p>"
         },
         "TotalNumberOfResourcesScanned":{
           "shape":"GenericLong",
-          "documentation":"<p>The number of resources scanned from the input S3 bucket.</p>"
+          "documentation":"<p>The number of resources scanned from the S3 input bucket.</p>"
         },
         "TotalNumberOfResourcesImported":{
           "shape":"GenericLong",
-          "documentation":"<p>The number of resources imported so far.</p>"
+          "documentation":"<p>The number of resources imported.</p>"
         },
         "TotalNumberOfResourcesWithCustomerError":{
           "shape":"GenericLong",
@@ -797,14 +801,14 @@
         },
         "TotalNumberOfFilesReadWithCustomerError":{
           "shape":"GenericLong",
-          "documentation":"<p>The number of files that failed to be read from the input S3 bucket due to customer error.</p>"
+          "documentation":"<p>The number of files that failed to be read from the S3 input bucket due to customer error.</p>"
         },
         "Throughput":{
           "shape":"GenericDouble",
-          "documentation":"<p>The throughput (in MB/sec) of the import job.</p>"
+          "documentation":"<p>The transaction rate the import job is processed at.</p>"
         }
       },
-      "documentation":"<p>The progress report of an import job.</p>"
+      "documentation":"<p>The progress report for the import job.</p>"
     },
     "JobStatus":{
       "type":"string",
@@ -827,14 +831,14 @@
       "members":{
         "CmkType":{
           "shape":"CmkType",
-          "documentation":"<p> The type of customer-managed-key(CMK) used for encryption. The two types of supported CMKs are customer owned CMKs and AWS owned CMKs. </p>"
+          "documentation":"<p>The type of customer-managed-key (CMK) used for encryption.</p>"
         },
         "KmsKeyId":{
           "shape":"EncryptionKeyID",
-          "documentation":"<p> The KMS encryption key id/alias used to encrypt the data store contents at rest. </p>"
+          "documentation":"<p>The Key Management Service (KMS) encryption key id/alias used to encrypt the data store contents at rest.</p>"
         }
       },
-      "documentation":"<p> The customer-managed-key(CMK) used when creating a data store. If a customer owned key is not specified, an AWS owned key will be used for encryption. </p>"
+      "documentation":"<p>The customer-managed-key (CMK) used when creating a data store. If a customer-owned key is not specified, an AWS-owned key is used for encryption. </p>"
     },
     "LambdaArn":{
       "type":"string",
@@ -847,15 +851,15 @@
       "members":{
         "Filter":{
           "shape":"DatastoreFilter",
-          "documentation":"<p>Lists all filters associated with a FHIR data store request.</p>"
+          "documentation":"<p>List all filters associated with a FHIR data store request.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>Fetches the next page of data stores when results are paginated.</p>"
+          "documentation":"<p>The token used to retrieve the next page of data stores when results are paginated.</p>"
         },
         "MaxResults":{
           "shape":"MaxResultsInteger",
-          "documentation":"<p>The maximum number of data stores returned in a single page of a ListFHIRDatastoresRequest call.</p>"
+          "documentation":"<p>The maximum number of data stores returned on a page.</p>"
         }
       }
     },
@@ -865,11 +869,11 @@
       "members":{
         "DatastorePropertiesList":{
           "shape":"DatastorePropertiesList",
-          "documentation":"<p>All properties associated with the listed data stores.</p>"
+          "documentation":"<p>The properties associated with all listed data stores.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>Pagination token that can be used to retrieve the next page of results.</p>"
+          "documentation":"<p>The pagination token used to retrieve the next page of results.</p>"
         }
       }
     },
@@ -879,31 +883,31 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p> This parameter limits the response to the export job with the specified data store ID. </p>"
+          "documentation":"<p>Limits the response to the export job with the specified data store ID. </p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p> A pagination token used to identify the next page of results to return for a ListFHIRExportJobs query. </p>"
+          "documentation":"<p>A pagination token used to identify the next page of results to return.</p>"
         },
         "MaxResults":{
           "shape":"MaxResultsInteger",
-          "documentation":"<p> This parameter limits the number of results returned for a ListFHIRExportJobs to a maximum quantity specified by the user. </p>"
+          "documentation":"<p>Limits the number of results returned for a ListFHIRExportJobs to a maximum quantity specified by the user.</p>"
         },
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p> This parameter limits the response to the export job with the specified job name. </p>"
+          "documentation":"<p>Limits the response to the export job with the specified job name. </p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p> This parameter limits the response to the export jobs with the specified job status. </p>"
+          "documentation":"<p>Limits the response to export jobs with the specified job status. </p>"
         },
         "SubmittedBefore":{
           "shape":"Timestamp",
-          "documentation":"<p> This parameter limits the response to FHIR export jobs submitted before a user specified date. </p>"
+          "documentation":"<p>Limits the response to FHIR export jobs submitted before a user- specified date.</p>"
         },
         "SubmittedAfter":{
           "shape":"Timestamp",
-          "documentation":"<p> This parameter limits the response to FHIR export jobs submitted after a user specified date. </p>"
+          "documentation":"<p>Limits the response to FHIR export jobs submitted after a user-specified date.</p>"
         }
       }
     },
@@ -913,11 +917,11 @@
       "members":{
         "ExportJobPropertiesList":{
           "shape":"ExportJobPropertiesList",
-          "documentation":"<p> The properties of listed FHIR export jobs, including the ID, ARN, name, and the status of the job. </p>"
+          "documentation":"<p>The properties of listed FHIR export jobs.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p> A pagination token used to identify the next page of results to return for a ListFHIRExportJobs query. </p>"
+          "documentation":"<p>The pagination token used to identify the next page of results to return.</p>"
         }
       }
     },
@@ -927,31 +931,31 @@
       "members":{
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p> This parameter limits the response to the import job with the specified data store ID. </p>"
+          "documentation":"<p>Limits the response to the import job with the specified data store ID. </p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p> A pagination token used to identify the next page of results to return for a ListFHIRImportJobs query. </p>"
+          "documentation":"<p>The pagination token used to identify the next page of results to return.</p>"
         },
         "MaxResults":{
           "shape":"MaxResultsInteger",
-          "documentation":"<p> This parameter limits the number of results returned for a ListFHIRImportJobs to a maximum quantity specified by the user. </p>"
+          "documentation":"<p>Limits the number of results returned for <code>ListFHIRImportJobs</code> to a maximum quantity specified by the user.</p>"
         },
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p> This parameter limits the response to the import job with the specified job name. </p>"
+          "documentation":"<p>Limits the response to the import job with the specified job name. </p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p> This parameter limits the response to the import job with the specified job status. </p>"
+          "documentation":"<p>Limits the response to the import job with the specified job status. </p>"
         },
         "SubmittedBefore":{
           "shape":"Timestamp",
-          "documentation":"<p> This parameter limits the response to FHIR import jobs submitted before a user specified date. </p>"
+          "documentation":"<p>Limits the response to FHIR import jobs submitted before a user- specified date. </p>"
         },
         "SubmittedAfter":{
           "shape":"Timestamp",
-          "documentation":"<p> This parameter limits the response to FHIR import jobs submitted after a user specified date. </p>"
+          "documentation":"<p>Limits the response to FHIR import jobs submitted after a user-specified date.</p>"
         }
       }
     },
@@ -961,11 +965,11 @@
       "members":{
         "ImportJobPropertiesList":{
           "shape":"ImportJobPropertiesList",
-          "documentation":"<p> The properties of a listed FHIR import jobs, including the ID, ARN, name, the status of the job, and the progress report of the job. </p>"
+          "documentation":"<p>The properties for listed import jobs.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p> A pagination token used to identify the next page of results to return for a ListFHIRImportJobs query. </p>"
+          "documentation":"<p>The pagination token used to identify the next page of results to return.</p>"
         }
       }
     },
@@ -975,7 +979,7 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p> The Amazon Resource Name(ARN) of the data store for which tags are being added. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the data store to which tags are being added.</p>"
         }
       }
     },
@@ -984,7 +988,7 @@
       "members":{
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p> Returns a list of tags associated with a data store. </p>"
+          "documentation":"<p>Returns a list of tags associated with a data store. </p>"
         }
       }
     },
@@ -1009,10 +1013,10 @@
       "members":{
         "S3Configuration":{
           "shape":"S3Configuration",
-          "documentation":"<p> The output data configuration that was supplied when the export job was created. </p>"
+          "documentation":"<p>The output data configuration supplied when the export job was created. </p>"
         }
       },
-      "documentation":"<p>The output data configuration that was supplied when the export job was created.</p>",
+      "documentation":"<p>The output data configuration supplied when the export job was created.</p>",
       "union":true
     },
     "PreloadDataConfig":{
@@ -1024,7 +1028,7 @@
           "documentation":"<p>The type of preloaded data. Only Synthea preloaded data is supported.</p>"
         }
       },
-      "documentation":"<p> The input properties for the preloaded data store. Only data preloaded from Synthea is supported.</p>"
+      "documentation":"<p>The input properties for the preloaded (Synthea) data store.</p>"
     },
     "PreloadDataType":{
       "type":"string",
@@ -1035,7 +1039,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p> The requested data store was not found.</p>",
+      "documentation":"<p>The requested data store was not found.</p>",
       "exception":true
     },
     "S3Configuration":{
@@ -1047,14 +1051,14 @@
       "members":{
         "S3Uri":{
           "shape":"S3Uri",
-          "documentation":"<p> The S3Uri is the user specified S3 location of the FHIR data to be imported into AWS HealthLake. </p>"
+          "documentation":"<p>The <code>S3Uri</code> is the user-specified S3 location of the FHIR data to be imported into AWS HealthLake.</p>"
         },
         "KmsKeyId":{
           "shape":"EncryptionKeyID",
-          "documentation":"<p> The KMS key ID used to access the S3 bucket. </p>"
+          "documentation":"<p>The Key Management Service (KMS) key ID used to access the S3 bucket. </p>"
         }
       },
-      "documentation":"<p> The configuration of the S3 bucket for either an import or export job. This includes assigning permissions for access. </p>"
+      "documentation":"<p>The configuration of the S3 bucket for either an import or export job. This includes assigning access permissions.</p>"
     },
     "S3Uri":{
       "type":"string",
@@ -1067,10 +1071,10 @@
       "members":{
         "KmsEncryptionConfig":{
           "shape":"KmsEncryptionConfig",
-          "documentation":"<p> The KMS encryption configuration used to provide details for data encryption. </p>"
+          "documentation":"<p>The Key Management Service (KMS) encryption configuration used to provide details for data encryption.</p>"
         }
       },
-      "documentation":"<p> The server-side encryption key configuration for a customer provided encryption key. </p>"
+      "documentation":"<p>The server-side encryption key configuration for a customer-provided encryption key.</p>"
     },
     "StartFHIRExportJobRequest":{
       "type":"structure",
@@ -1082,23 +1086,23 @@
       "members":{
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p>The user generated name for an export job.</p>"
+          "documentation":"<p>The export job name.</p>"
         },
         "OutputDataConfig":{
           "shape":"OutputDataConfig",
-          "documentation":"<p>The output data configuration that was supplied when the export job was created.</p>"
+          "documentation":"<p>The output data configuration supplied when the export job was started.</p>"
         },
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS generated ID for the data store from which files are being exported for an export job.</p>"
+          "documentation":"<p>The data store identifier from which files are being exported.</p>"
         },
         "DataAccessRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name used during the initiation of the job.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) used during initiation of the export job.</p>"
         },
         "ClientToken":{
           "shape":"ClientTokenString",
-          "documentation":"<p>An optional user provided token used for ensuring idempotency.</p>",
+          "documentation":"<p>An optional user provided token used for ensuring API idempotency.</p>",
           "idempotencyToken":true
         }
       }
@@ -1112,15 +1116,15 @@
       "members":{
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS generated ID for an export job.</p>"
+          "documentation":"<p>The export job identifier.</p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p>The status of a FHIR export job. Possible statuses are SUBMITTED, IN_PROGRESS, COMPLETED, or FAILED.</p>"
+          "documentation":"<p>The export job status.</p>"
         },
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS generated ID for the data store from which files are being exported for an export job.</p>"
+          "documentation":"<p>The data store identifier from which files are being exported.</p>"
         }
       }
     },
@@ -1135,25 +1139,29 @@
       "members":{
         "JobName":{
           "shape":"JobName",
-          "documentation":"<p>The name of the FHIR Import job in the StartFHIRImport job request.</p>"
+          "documentation":"<p>The import job name.</p>"
         },
         "InputDataConfig":{
           "shape":"InputDataConfig",
-          "documentation":"<p>The input properties of the FHIR Import job in the StartFHIRImport job request.</p>"
+          "documentation":"<p>The input properties for the import job request.</p>"
         },
         "JobOutputDataConfig":{"shape":"OutputDataConfig"},
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated data store ID.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         },
         "DataAccessRoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that gives AWS HealthLake access permission.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that grants access permission to AWS HealthLake.</p>"
         },
         "ClientToken":{
           "shape":"ClientTokenString",
-          "documentation":"<p>Optional user provided token used for ensuring idempotency.</p>",
+          "documentation":"<p>The optional user-provided token used for ensuring API idempotency.</p>",
           "idempotencyToken":true
+        },
+        "ValidationLevel":{
+          "shape":"ValidationLevel",
+          "documentation":"<p>The validation level of the import job.</p>"
         }
       }
     },
@@ -1166,15 +1174,15 @@
       "members":{
         "JobId":{
           "shape":"JobId",
-          "documentation":"<p>The AWS-generated job ID.</p>"
+          "documentation":"<p>The import job identifier.</p>"
         },
         "JobStatus":{
           "shape":"JobStatus",
-          "documentation":"<p>The status of an import job.</p>"
+          "documentation":"<p>The import job status.</p>"
         },
         "DatastoreId":{
           "shape":"DatastoreId",
-          "documentation":"<p>The AWS-generated data store ID.</p>"
+          "documentation":"<p>The data store identifier.</p>"
         }
       }
     },
@@ -1192,14 +1200,14 @@
       "members":{
         "Key":{
           "shape":"TagKey",
-          "documentation":"<p> The key portion of a tag. Tag keys are case sensitive. </p>"
+          "documentation":"<p>The key portion of a tag. Tag keys are case sensitive. </p>"
         },
         "Value":{
           "shape":"TagValue",
-          "documentation":"<p> The value portion of a tag. Tag values are case sensitive. </p>"
+          "documentation":"<p> The value portion of a tag. Tag values are case-sensitive.</p>"
         }
       },
-      "documentation":"<p> A tag is a label consisting of a user-defined key and value. The form for tags is {\"Key\", \"Value\"} </p>"
+      "documentation":"<p>A label consisting of a user-defined key and value. The form for tags is {\"Key\", \"Value\"}</p>"
     },
     "TagKey":{
       "type":"string",
@@ -1228,18 +1236,17 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p> The Amazon Resource Name(ARN)that gives AWS HealthLake access to the data store which tags are being added to. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that grants access to the data store tags are being added to.</p>"
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p> The user specified key and value pair tags being added to a data store. </p>"
+          "documentation":"<p>The user-specified key and value pair tags being added to a data store.</p>"
         }
       }
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1265,18 +1272,17 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name(ARN) of the data store for which tags are being removed.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the data store from which tags are being removed.</p>"
         },
         "TagKeys":{
           "shape":"TagKeyList",
-          "documentation":"<p> The keys for the tags to be removed from the HealthLake data store. </p>"
+          "documentation":"<p>The keys for the tags to be removed from the data store.</p>"
         }
       }
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -1285,7 +1291,15 @@
       },
       "documentation":"<p>The user input parameter was invalid.</p>",
       "exception":true
+    },
+    "ValidationLevel":{
+      "type":"string",
+      "enum":[
+        "strict",
+        "structure-only",
+        "minimal"
+      ]
     }
   },
-  "documentation":"<p>AWS HealthLake is a HIPAA eligibile service that allows customers to store, transform, query, and analyze their FHIR-formatted data in a consistent fashion in the cloud.</p>"
+  "documentation":"<p>This is the <i>AWS HealthLake API Reference</i>. For an introduction to the service, see <a href=\"https://docs.aws.amazon.com/healthlake/latest/devguide/what-is.html\">What is AWS HealthLake?</a> in the <i>AWS HealthLake Developer Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/waiters-2.json 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/healthlake/2017-07-01/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/healthlake/2017-07-01/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+  "version": 2,
+  "waiters": {
+    "FHIRDatastoreActive": {
+      "operation": "DescribeFHIRDatastore",
+      "delay": 60,
+      "maxAttempts": 360,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "DatastoreProperties.DatastoreStatus",
+          "expected": "ACTIVE"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "DatastoreProperties.DatastoreStatus",
+          "expected": "CREATE_FAILED"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "DatastoreProperties.DatastoreStatus",
+          "expected": "DELETED"
+        }
+      ]
+    },
+    "FHIRDatastoreDeleted": {
+      "operation": "DescribeFHIRDatastore",
+      "delay": 120,
+      "maxAttempts": 360,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "DatastoreProperties.DatastoreStatus",
+          "expected": "DELETED"
+        }
+      ]
+    },
+    "FHIRExportJobCompleted": {
+      "operation": "DescribeFHIRExportJob",
+      "delay": 120,
+      "maxAttempts": 360,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "ExportJobProperties.JobStatus",
+          "expected": "COMPLETED"
+        },
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "ExportJobProperties.JobStatus",
+          "expected": "COMPLETED_WITH_ERRORS"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "ExportJobProperties.JobStatus",
+          "expected": "CANCEL_COMPLETED"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "ExportJobProperties.JobStatus",
+          "expected": "FAILED"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "ExportJobProperties.JobStatus",
+          "expected": "CANCEL_FAILED"
+        }
+      ]
+    },
+    "FHIRImportJobCompleted": {
+      "operation": "DescribeFHIRImportJob",
+      "delay": 120,
+      "maxAttempts": 720,
+      "acceptors": [
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "ImportJobProperties.JobStatus",
+          "expected": "COMPLETED"
+        },
+        {
+          "state": "success",
+          "matcher": "path",
+          "argument": "ImportJobProperties.JobStatus",
+          "expected": "COMPLETED_WITH_ERRORS"
+        },
+        {
+          "state": "failure",
+          "matcher": "path",
+          "argument": "ImportJobProperties.JobStatus",
+          "expected": "FAILED"
+        }
+      ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iam/2010-05-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,611 +57,772 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "stringEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.global.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam-fips.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam-fips.global.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-cn"
                                             ]
                                         },
-                                        "aws-cn"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.cn-north-1.amazonaws.com.cn",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "cn-north-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.global.api.amazonwebservices.com.cn",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "cn-north-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-cn"
                                             ]
                                         },
-                                        "aws-us-gov"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.us-gov.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-gov-west-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.cn-north-1.amazonaws.com.cn",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "cn-north-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-us-gov"
                                             ]
                                         },
-                                        "aws-us-gov"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.us-gov.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-gov-west-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-gov.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-us-gov"
                                             ]
                                         },
-                                        "aws-iso"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.us-iso-east-1.c2s.ic.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-iso-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-gov.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws-us-gov"
                                             ]
                                         },
-                                        "aws-iso-b"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.us-isob-east-1.sc2s.sgov.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-isob-east-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-gov.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "name"
+                                                true
                                             ]
                                         },
-                                        "aws-iso-e"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-gov.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
                                         },
-                                        false
-                                    ]
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso"
+                                            ]
                                         },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.eu-isoe-west-1.cloud.adc-e.uk",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "eu-isoe-west-1"
-                                        }
-                                    ]
-                                },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "name"
+                                                false
                                             ]
                                         },
-                                        "aws-iso-f"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-iso-east-1.c2s.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-iso-east-1"
+                                                }
+                                            ]
                                         },
-                                        false
-                                    ]
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso"
+                                            ]
                                         },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://iam.us-isof-south-1.csp.hci.ic.gov",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "iam",
-                                            "signingRegion": "us-isof-south-1"
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam-fips.us-iso-east-1.c2s.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-iso-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso-b"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-isob-east-1.sc2s.sgov.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isob-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-iso-b"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam-fips.us-isob-east-1.sc2s.sgov.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isob-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-iso-e"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://iam-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://iam.eu-isoe-west-1.cloud.adc-e.uk",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eu-isoe-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws-iso-f"
+                                            ]
+                                        },
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.us-isof-south-1.csp.hci.ic.gov",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-isof-south-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
                                                     "fn": "getAttr",
@@ -669,105 +830,293 @@
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-eusc"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://iam.eusc-de-east-1.amazonaws.eu",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "eusc-de-east-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://iam-fips.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://iam-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://iam-fips.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://iam.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://iam.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://iam.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://iam.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/iam/2010-05-08/service-2.json 2.31.35-1/awscli/botocore/data/iam/2010-05-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/iam/2010-05-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iam/2010-05-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,7 @@
       },
       "input":{"shape":"AddClientIDToOpenIDConnectProviderRequest"},
       "errors":[
+        {"shape":"ConcurrentModificationException"},
         {"shape":"InvalidInputException"},
         {"shape":"NoSuchEntityException"},
         {"shape":"LimitExceededException"},
@@ -44,7 +45,7 @@
         {"shape":"UnmodifiableEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of <a href=\"https://en.wikipedia.org/wiki/Eventual_consistency\">eventual consistency</a>. To force the change, you must <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html\">disassociate the instance profile</a> and then <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html\">associate the instance profile</a>, or you can stop your instance and then restart it.</p> <note> <p>The caller of this operation must be granted the <code>PassRole</code> permission on the IAM role by a permissions policy.</p> </note> <p> For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>. For more information about instance profiles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\">Using instance profiles</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of <a href=\"https://en.wikipedia.org/wiki/Eventual_consistency\">eventual consistency</a>. To force the change, you must <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html\">disassociate the instance profile</a> and then <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html\">associate the instance profile</a>, or you can stop your instance and then restart it.</p> <note> <p>The caller of this operation must be granted the <code>PassRole</code> permission on the IAM role by a permissions policy.</p> </note> <important> <p>When using the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#available-keys-for-iam\">iam:AssociatedResourceArn</a> condition in a policy to restrict the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html\">PassRole</a> IAM action, special considerations apply if the policy is intended to define access for the <code>AddRoleToInstanceProfile</code> action. In this case, you cannot specify a Region or instance ID in the EC2 instance ARN. The ARN value must be <code>arn:aws:ec2:*:CallerAccountId:instance/*</code>. Using any other ARN value may lead to unexpected evaluation results.</p> </important> <p> For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>. For more information about instance profiles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\">Using instance profiles</a> in the <i>IAM User Guide</i>.</p>"
     },
     "AddUserToGroup":{
       "name":"AddUserToGroup",
@@ -124,7 +125,7 @@
         {"shape":"PasswordPolicyViolationException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Changes the password of the IAM user who is calling this operation. This operation can be performed using the CLI, the Amazon Web Services API, or the <b>My Security Credentials</b> page in the Amazon Web Services Management Console. The Amazon Web Services account root user password is not affected by this operation.</p> <p>Use <a>UpdateLoginProfile</a> to use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. For more information about modifying passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Changes the password of the IAM user who is calling this operation. This operation can be performed using the CLI, the Amazon Web Services API, or the <b>My Security Credentials</b> page in the Amazon Web Services Management Console. The Amazon Web Services account root user password is not affected by this operation.</p> <p>Use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateLoginProfile.html\">UpdateLoginProfile</a> to use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. For more information about modifying passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
     },
     "CreateAccessKey":{
       "name":"CreateAccessKey",
@@ -159,6 +160,26 @@
       ],
       "documentation":"<p>Creates an alias for your Amazon Web Services account. For information about using an Amazon Web Services account alias, see <a href=\"https://docs.aws.amazon.com/signin/latest/userguide/CreateAccountAlias.html\">Creating, deleting, and listing an Amazon Web Services account alias</a> in the <i>Amazon Web Services Sign-In User Guide</i>.</p>"
     },
+    "CreateDelegationRequest":{
+      "name":"CreateDelegationRequest",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateDelegationRequestRequest"},
+      "output":{
+        "shape":"CreateDelegationRequestResponse",
+        "resultWrapper":"CreateDelegationRequestResult"
+      },
+      "errors":[
+        {"shape":"EntityAlreadyExistsException"},
+        {"shape":"ServiceFailureException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ConcurrentModificationException"}
+      ],
+      "documentation":"<p>This API is currently unavailable for general use.</p>"
+    },
     "CreateGroup":{
       "name":"CreateGroup",
       "http":{
@@ -216,7 +237,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Creates a password for the specified IAM user. A password allows an IAM user to access Amazon Web Services services through the Amazon Web Services Management Console.</p> <p>You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to create a password for any IAM user. Use <a>ChangePassword</a> to update your own existing password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <p>For more information about managing passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Creates a password for the specified IAM user. A password allows an IAM user to access Amazon Web Services services through the Amazon Web Services Management Console.</p> <p>You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to create a password for any IAM user. Use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html\">ChangePassword</a> to update your own existing password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <p>For more information about managing passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
     },
     "CreateOpenIDConnectProvider":{
       "name":"CreateOpenIDConnectProvider",
@@ -237,7 +258,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"OpenIdIdpCommunicationErrorException"}
       ],
-      "documentation":"<p>Creates an IAM entity to describe an identity provider (IdP) that supports <a href=\"http://openid.net/connect/\">OpenID Connect (OIDC)</a>.</p> <p>The OIDC provider that you create with this operation can be used as a principal in a role's trust policy. Such a policy establishes a trust relationship between Amazon Web Services and the OIDC provider.</p> <p>If you are using an OIDC identity provider from Google, Facebook, or Amazon Cognito, you don't need to create a separate IAM identity provider. These OIDC identity providers are already built-in to Amazon Web Services and are available for your use. Instead, you can move directly to creating new roles using your identity provider. To learn more, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html\">Creating a role for web identity or OpenID connect federation</a> in the <i>IAM User Guide</i>.</p> <p>When you create the IAM OIDC provider, you specify the following:</p> <ul> <li> <p>The URL of the OIDC identity provider (IdP) to trust</p> </li> <li> <p>A list of client IDs (also known as audiences) that identify the application or applications allowed to authenticate using the OIDC provider</p> </li> <li> <p>A list of tags that are attached to the specified IAM OIDC provider</p> </li> <li> <p>A list of thumbprints of one or more server certificates that the IdP uses</p> </li> </ul> <p>You get all of this information from the OIDC IdP you want to use to access Amazon Web Services.</p> <note> <p>Amazon Web Services secures communication with OIDC identity providers (IdPs) using our library of trusted root certificate authorities (CAs) to verify the JSON Web Key Set (JWKS) endpoint's TLS certificate. If your OIDC IdP relies on a certificate that is not signed by one of these trusted CAs, only then we secure communication using the thumbprints set in the IdP's configuration.</p> </note> <note> <p>The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the <a>CreateOpenIDConnectProvider</a> operation to highly privileged users.</p> </note>"
+      "documentation":"<p>Creates an IAM entity to describe an identity provider (IdP) that supports <a href=\"http://openid.net/connect/\">OpenID Connect (OIDC)</a>.</p> <p>The OIDC provider that you create with this operation can be used as a principal in a role's trust policy. Such a policy establishes a trust relationship between Amazon Web Services and the OIDC provider.</p> <p>If you are using an OIDC identity provider from Google, Facebook, or Amazon Cognito, you don't need to create a separate IAM identity provider. These OIDC identity providers are already built-in to Amazon Web Services and are available for your use. Instead, you can move directly to creating new roles using your identity provider. To learn more, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html\">Creating a role for web identity or OpenID connect federation</a> in the <i>IAM User Guide</i>.</p> <p>When you create the IAM OIDC provider, you specify the following:</p> <ul> <li> <p>The URL of the OIDC identity provider (IdP) to trust</p> </li> <li> <p>A list of client IDs (also known as audiences) that identify the application or applications allowed to authenticate using the OIDC provider</p> </li> <li> <p>A list of tags that are attached to the specified IAM OIDC provider</p> </li> <li> <p>A list of thumbprints of one or more server certificates that the IdP uses</p> </li> </ul> <p>You get all of this information from the OIDC IdP you want to use to access Amazon Web Services.</p> <note> <p>Amazon Web Services secures communication with OIDC identity providers (IdPs) using our library of trusted root certificate authorities (CAs) to verify the JSON Web Key Set (JWKS) endpoint's TLS certificate. If your OIDC IdP relies on a certificate that is not signed by one of these trusted CAs, only then we secure communication using the thumbprints set in the IdP's configuration.</p> </note> <note> <p>The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a> operation to highly privileged users.</p> </note>"
     },
     "CreatePolicy":{
       "name":"CreatePolicy",
@@ -278,7 +299,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Creates a new version of the specified managed policy. To update a managed policy, you create a new policy version. A managed policy can have up to five versions. If the policy has five versions, you must delete an existing version using <a>DeletePolicyVersion</a> before you create a new version.</p> <p>Optionally, you can set the new version as the policy's default version. The default version is the version that is in effect for the IAM users, groups, and roles to which the policy is attached.</p> <p>For more information about managed policy versions, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Creates a new version of the specified managed policy. To update a managed policy, you create a new policy version. A managed policy can have up to five versions. If the policy has five versions, you must delete an existing version using <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicyVersion.html\">DeletePolicyVersion</a> before you create a new version.</p> <p>Optionally, you can set the new version as the policy's default version. The default version is the version that is in effect for the IAM users, groups, and roles to which the policy is attached.</p> <p>For more information about managed policy versions, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "CreateRole":{
       "name":"CreateRole",
@@ -356,7 +377,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceNotSupportedException"}
       ],
-      "documentation":"<p>Generates a set of credentials consisting of a user name and password that can be used to access the service specified in the request. These credentials are generated by IAM, and can be used only for the specified service. </p> <p>You can have a maximum of two sets of service-specific credentials for each supported service per user.</p> <p>You can create service-specific credentials for CodeCommit and Amazon Keyspaces (for Apache Cassandra).</p> <p>You can reset the password to a new service-generated value by calling <a>ResetServiceSpecificCredential</a>.</p> <p>For more information about service-specific credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_ssh-keys.html\">Using IAM with CodeCommit: Git credentials, SSH keys, and Amazon Web Services access keys</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Generates a set of credentials consisting of a user name and password that can be used to access the service specified in the request. These credentials are generated by IAM, and can be used only for the specified service. </p> <p>You can have a maximum of two sets of service-specific credentials for each supported service per user.</p> <p>You can create service-specific credentials for Amazon Bedrock, CodeCommit and Amazon Keyspaces (for Apache Cassandra).</p> <p>You can reset the password to a new service-generated value by calling <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html\">ResetServiceSpecificCredential</a>.</p> <p>For more information about service-specific credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bedrock.html\">Service-specific credentials for IAM users</a> in the <i>IAM User Guide</i>.</p>"
     },
     "CreateUser":{
       "name":"CreateUser",
@@ -397,7 +418,7 @@
         {"shape":"ConcurrentModificationException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Creates a new virtual MFA device for the Amazon Web Services account. After creating the virtual MFA, use <a>EnableMFADevice</a> to attach the MFA device to an IAM user. For more information about creating and working with virtual MFA devices, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html\">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of MFA devices you can create, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html\">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>The seed information contained in the QR code and the Base32 string should be treated like any other secret access information. In other words, protect the seed information as you would your Amazon Web Services access keys or your passwords. After you provision your virtual device, you should ensure that the information is destroyed following secure procedures.</p> </important>"
+      "documentation":"<p>Creates a new virtual MFA device for the Amazon Web Services account. After creating the virtual MFA, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html\">EnableMFADevice</a> to attach the MFA device to an IAM user. For more information about creating and working with virtual MFA devices, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_VirtualMFA.html\">Using a virtual MFA device</a> in the <i>IAM User Guide</i>.</p> <p>For information about the maximum number of MFA devices you can create, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html\">IAM and STS quotas</a> in the <i>IAM User Guide</i>.</p> <important> <p>The seed information contained in the QR code and the Base32 string should be treated like any other secret access information. In other words, protect the seed information as you would your Amazon Web Services access keys or your passwords. After you provision your virtual device, you should ensure that the information is destroyed following secure procedures.</p> </important>"
     },
     "DeactivateMFADevice":{
       "name":"DeactivateMFADevice",
@@ -484,7 +505,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM group.</p> <p>A group can also have managed policies attached to it. To detach a managed policy from a group, use <a>DetachGroupPolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM group.</p> <p>A group can also have managed policies attached to it. To detach a managed policy from a group, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachGroupPolicy.html\">DetachGroupPolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeleteInstanceProfile":{
       "name":"DeleteInstanceProfile",
@@ -514,7 +535,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the password for the specified IAM user, For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_admin-change-user.html\">Managing passwords for IAM users</a>.</p> <p>You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to delete a password for any IAM user. You can use <a>ChangePassword</a> to update, but not delete, your own password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <important> <p>Deleting a user's password does not prevent a user from accessing Amazon Web Services through the command line interface or the API. To prevent all user access, you must also either make any access keys inactive or delete them. For more information about making keys inactive or deleting them, see <a>UpdateAccessKey</a> and <a>DeleteAccessKey</a>.</p> </important>"
+      "documentation":"<p>Deletes the password for the specified IAM user or root user, For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_admin-change-user.html\">Managing passwords for IAM users</a>.</p> <p>You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to delete a password for any IAM user. You can use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html\">ChangePassword</a> to update, but not delete, your own password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <important> <p>Deleting a user's password does not prevent a user from accessing Amazon Web Services through the command line interface or the API. To prevent all user access, you must also either make any access keys inactive or delete them. For more information about making keys inactive or deleting them, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html\">UpdateAccessKey</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html\">DeleteAccessKey</a>.</p> </important>"
     },
     "DeleteOpenIDConnectProvider":{
       "name":"DeleteOpenIDConnectProvider",
@@ -544,7 +565,7 @@
         {"shape":"DeleteConflictException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified managed policy.</p> <p>Before you can delete a managed policy, you must first detach the policy from all users, groups, and roles that it is attached to. In addition, you must delete all the policy's versions. The following steps describe the process for deleting a managed policy:</p> <ul> <li> <p>Detach the policy from all users, groups, and roles that the policy is attached to, using <a>DetachUserPolicy</a>, <a>DetachGroupPolicy</a>, or <a>DetachRolePolicy</a>. To list all the users, groups, and roles that a policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> </li> <li> <p>Delete all versions of the policy using <a>DeletePolicyVersion</a>. To list the policy's versions, use <a>ListPolicyVersions</a>. You cannot use <a>DeletePolicyVersion</a> to delete the version that is marked as the default version. You delete the policy's default version in the next step of the process.</p> </li> <li> <p>Delete the policy (this automatically deletes the policy's default version) using this operation.</p> </li> </ul> <p>For information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified managed policy.</p> <p>Before you can delete a managed policy, you must first detach the policy from all users, groups, and roles that it is attached to. In addition, you must delete all the policy's versions. The following steps describe the process for deleting a managed policy:</p> <ul> <li> <p>Detach the policy from all users, groups, and roles that the policy is attached to, using <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachUserPolicy.html\">DetachUserPolicy</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachGroupPolicy.html\">DetachGroupPolicy</a>, or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachRolePolicy.html\">DetachRolePolicy</a>. To list all the users, groups, and roles that a policy is attached to, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a>.</p> </li> <li> <p>Delete all versions of the policy using <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicyVersion.html\">DeletePolicyVersion</a>. To list the policy's versions, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a>. You cannot use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicyVersion.html\">DeletePolicyVersion</a> to delete the version that is marked as the default version. You delete the policy's default version in the next step of the process.</p> </li> <li> <p>Delete the policy (this automatically deletes the policy's default version) using this operation.</p> </li> </ul> <p>For information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeletePolicyVersion":{
       "name":"DeletePolicyVersion",
@@ -560,7 +581,7 @@
         {"shape":"DeleteConflictException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified version from the specified managed policy.</p> <p>You cannot delete the default version from a policy using this operation. To delete the default version from a policy, use <a>DeletePolicy</a>. To find out which version of a policy is marked as the default version, use <a>ListPolicyVersions</a>.</p> <p>For information about versions for managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified version from the specified managed policy.</p> <p>You cannot delete the default version from a policy using this operation. To delete the default version from a policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicy.html\">DeletePolicy</a>. To find out which version of a policy is marked as the default version, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a>.</p> <p>For information about versions for managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeleteRole":{
       "name":"DeleteRole",
@@ -577,7 +598,7 @@
         {"shape":"ConcurrentModificationException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified role. Unlike the Amazon Web Services Management Console, when you delete a role programmatically, you must delete the items attached to the role manually, or the deletion fails. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#roles-managingrole-deleting-cli\">Deleting an IAM role</a>. Before attempting to delete a role, remove the following attached items: </p> <ul> <li> <p>Inline policies (<a>DeleteRolePolicy</a>)</p> </li> <li> <p>Attached managed policies (<a>DetachRolePolicy</a>)</p> </li> <li> <p>Instance profile (<a>RemoveRoleFromInstanceProfile</a>)</p> </li> <li> <p>Optional – Delete instance profile after detaching from role for resource clean up (<a>DeleteInstanceProfile</a>)</p> </li> </ul> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important>"
+      "documentation":"<p>Deletes the specified role. Unlike the Amazon Web Services Management Console, when you delete a role programmatically, you must delete the items attached to the role manually, or the deletion fails. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#roles-managingrole-deleting-cli\">Deleting an IAM role</a>. Before attempting to delete a role, remove the following attached items: </p> <ul> <li> <p>Inline policies (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteRolePolicy.html\">DeleteRolePolicy</a>)</p> </li> <li> <p>Attached managed policies (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachRolePolicy.html\">DetachRolePolicy</a>)</p> </li> <li> <p>Instance profile (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveRoleFromInstanceProfile.html\">RemoveRoleFromInstanceProfile</a>)</p> </li> <li> <p>Optional – Delete instance profile after detaching from role for resource clean up (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteInstanceProfile.html\">DeleteInstanceProfile</a>)</p> </li> </ul> <important> <p>Make sure that you do not have any Amazon EC2 instances running with the role you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance.</p> </important>"
     },
     "DeleteRolePermissionsBoundary":{
       "name":"DeleteRolePermissionsBoundary",
@@ -606,7 +627,7 @@
         {"shape":"UnmodifiableEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM role.</p> <p>A role can also have managed policies attached to it. To detach a managed policy from a role, use <a>DetachRolePolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM role.</p> <p>A role can also have managed policies attached to it. To detach a managed policy from a role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachRolePolicy.html\">DetachRolePolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeleteSAMLProvider":{
       "name":"DeleteSAMLProvider",
@@ -666,7 +687,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Submits a service-linked role deletion request and returns a <code>DeletionTaskId</code>, which you can use to check the status of the deletion. Before you call this operation, confirm that the role has no active sessions and that any resources used by the role in the linked service are deleted. If you call this operation more than once for the same service-linked role and an earlier deletion task is not complete, then the <code>DeletionTaskId</code> of the earlier request is returned.</p> <p>If you submit a deletion request for a service-linked role whose linked service is still accessing a resource, then the deletion task fails. If it fails, the <a>GetServiceLinkedRoleDeletionStatus</a> operation returns the reason for the failure, usually including the resources that must be deleted. To delete the service-linked role, you must first remove those resources from the linked service and then submit the deletion request again. Resources are specific to the service that is linked to the role. For more information about removing resources from a service, see the <a href=\"http://docs.aws.amazon.com/\">Amazon Web Services documentation</a> for your service.</p> <p>For more information about service-linked roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role\">Roles terms and concepts: Amazon Web Services service-linked role</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Submits a service-linked role deletion request and returns a <code>DeletionTaskId</code>, which you can use to check the status of the deletion. Before you call this operation, confirm that the role has no active sessions and that any resources used by the role in the linked service are deleted. If you call this operation more than once for the same service-linked role and an earlier deletion task is not complete, then the <code>DeletionTaskId</code> of the earlier request is returned.</p> <p>If you submit a deletion request for a service-linked role whose linked service is still accessing a resource, then the deletion task fails. If it fails, the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html\">GetServiceLinkedRoleDeletionStatus</a> operation returns the reason for the failure, usually including the resources that must be deleted. To delete the service-linked role, you must first remove those resources from the linked service and then submit the deletion request again. Resources are specific to the service that is linked to the role. For more information about removing resources from a service, see the <a href=\"http://docs.aws.amazon.com/\">Amazon Web Services documentation</a> for your service.</p> <p>For more information about service-linked roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role\">Roles terms and concepts: Amazon Web Services service-linked role</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeleteServiceSpecificCredential":{
       "name":"DeleteServiceSpecificCredential",
@@ -709,7 +730,7 @@
         {"shape":"ConcurrentModificationException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified IAM user. Unlike the Amazon Web Services Management Console, when you delete a user programmatically, you must delete the items attached to the user manually, or the deletion fails. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting_cli\">Deleting an IAM user</a>. Before attempting to delete a user, remove the following items:</p> <ul> <li> <p>Password (<a>DeleteLoginProfile</a>)</p> </li> <li> <p>Access keys (<a>DeleteAccessKey</a>)</p> </li> <li> <p>Signing certificate (<a>DeleteSigningCertificate</a>)</p> </li> <li> <p>SSH public key (<a>DeleteSSHPublicKey</a>)</p> </li> <li> <p>Git credentials (<a>DeleteServiceSpecificCredential</a>)</p> </li> <li> <p>Multi-factor authentication (MFA) device (<a>DeactivateMFADevice</a>, <a>DeleteVirtualMFADevice</a>)</p> </li> <li> <p>Inline policies (<a>DeleteUserPolicy</a>)</p> </li> <li> <p>Attached managed policies (<a>DetachUserPolicy</a>)</p> </li> <li> <p>Group memberships (<a>RemoveUserFromGroup</a>)</p> </li> </ul>"
+      "documentation":"<p>Deletes the specified IAM user. Unlike the Amazon Web Services Management Console, when you delete a user programmatically, you must delete the items attached to the user manually, or the deletion fails. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting_cli\">Deleting an IAM user</a>. Before attempting to delete a user, remove the following items:</p> <ul> <li> <p>Password (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteLoginProfile.html\">DeleteLoginProfile</a>)</p> </li> <li> <p>Access keys (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html\">DeleteAccessKey</a>)</p> </li> <li> <p>Signing certificate (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteSigningCertificate.html\">DeleteSigningCertificate</a>)</p> </li> <li> <p>SSH public key (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteSSHPublicKey.html\">DeleteSSHPublicKey</a>)</p> </li> <li> <p>Git credentials (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html\">DeleteServiceSpecificCredential</a>)</p> </li> <li> <p>Multi-factor authentication (MFA) device (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html\">DeactivateMFADevice</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html\">DeleteVirtualMFADevice</a>)</p> </li> <li> <p>Inline policies (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUserPolicy.html\">DeleteUserPolicy</a>)</p> </li> <li> <p>Attached managed policies (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachUserPolicy.html\">DetachUserPolicy</a>)</p> </li> <li> <p>Group memberships (<a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveUserFromGroup.html\">RemoveUserFromGroup</a>)</p> </li> </ul>"
     },
     "DeleteUserPermissionsBoundary":{
       "name":"DeleteUserPermissionsBoundary",
@@ -736,7 +757,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM user.</p> <p>A user can also have managed policies attached to it. To detach a managed policy from a user, use <a>DetachUserPolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Deletes the specified inline policy that is embedded in the specified IAM user.</p> <p>A user can also have managed policies attached to it. To detach a managed policy from a user, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachUserPolicy.html\">DetachUserPolicy</a>. For more information about policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DeleteVirtualMFADevice":{
       "name":"DeleteVirtualMFADevice",
@@ -752,7 +773,7 @@
         {"shape":"ServiceFailureException"},
         {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Deletes a virtual MFA device.</p> <note> <p> You must deactivate a user's virtual MFA device before you can delete it. For information about deactivating MFA devices, see <a>DeactivateMFADevice</a>. </p> </note>"
+      "documentation":"<p>Deletes a virtual MFA device.</p> <note> <p> You must deactivate a user's virtual MFA device before you can delete it. For information about deactivating MFA devices, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html\">DeactivateMFADevice</a>. </p> </note>"
     },
     "DetachGroupPolicy":{
       "name":"DetachGroupPolicy",
@@ -767,7 +788,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Removes the specified managed policy from the specified IAM group.</p> <p>A group can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteGroupPolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Removes the specified managed policy from the specified IAM group.</p> <p>A group can also have inline policies embedded with it. To delete an inline policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteGroupPolicy.html\">DeleteGroupPolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DetachRolePolicy":{
       "name":"DetachRolePolicy",
@@ -783,7 +804,7 @@
         {"shape":"UnmodifiableEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Removes the specified managed policy from the specified role.</p> <p>A role can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteRolePolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Removes the specified managed policy from the specified role.</p> <p>A role can also have inline policies embedded with it. To delete an inline policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteRolePolicy.html\">DeleteRolePolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DetachUserPolicy":{
       "name":"DetachUserPolicy",
@@ -798,7 +819,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Removes the specified managed policy from the specified user.</p> <p>A user can also have inline policies embedded with it. To delete an inline policy, use <a>DeleteUserPolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Removes the specified managed policy from the specified user.</p> <p>A user can also have inline policies embedded with it. To delete an inline policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUserPolicy.html\">DeleteUserPolicy</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "DisableOrganizationsRootCredentialsManagement":{
       "name":"DisableOrganizationsRootCredentialsManagement",
@@ -817,7 +838,7 @@
         {"shape":"OrganizationNotFoundException"},
         {"shape":"OrganizationNotInAllFeaturesModeException"}
       ],
-      "documentation":"<p>Disables the management of privileged root user credentials across member accounts in your organization. When you disable this feature, the management account and the delegated admininstrator for IAM can no longer manage root user credentials for member accounts in your organization.</p>"
+      "documentation":"<p>Disables the management of privileged root user credentials across member accounts in your organization. When you disable this feature, the management account and the delegated administrator for IAM can no longer manage root user credentials for member accounts in your organization.</p>"
     },
     "DisableOrganizationsRootSessions":{
       "name":"DisableOrganizationsRootSessions",
@@ -836,7 +857,7 @@
         {"shape":"OrganizationNotFoundException"},
         {"shape":"OrganizationNotInAllFeaturesModeException"}
       ],
-      "documentation":"<p>Disables root user sessions for privileged tasks across member accounts in your organization. When you disable this feature, the management account and the delegated admininstrator for IAM can no longer perform privileged tasks on member accounts in your organization.</p>"
+      "documentation":"<p>Disables root user sessions for privileged tasks across member accounts in your organization. When you disable this feature, the management account and the delegated administrator for IAM can no longer perform privileged tasks on member accounts in your organization.</p>"
     },
     "EnableMFADevice":{
       "name":"EnableMFADevice",
@@ -874,7 +895,7 @@
         {"shape":"OrganizationNotInAllFeaturesModeException"},
         {"shape":"CallerIsNotManagementAccountException"}
       ],
-      "documentation":"<p>Enables the management of privileged root user credentials across member accounts in your organization. When you enable root credentials management for <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user-access-management\">centralized root access</a>, the management account and the delegated admininstrator for IAM can manage root user credentials for member accounts in your organization.</p> <p>Before you enable centralized root access, you must have an account configured with the following settings:</p> <ul> <li> <p>You must manage your Amazon Web Services accounts in <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html\">Organizations</a>.</p> </li> <li> <p>Enable trusted access for Identity and Access Management in Organizations. For details, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-ra.html\">IAM and Organizations</a> in the <i>Organizations User Guide</i>.</p> </li> </ul>"
+      "documentation":"<p>Enables the management of privileged root user credentials across member accounts in your organization. When you enable root credentials management for <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user-access-management\">centralized root access</a>, the management account and the delegated administrator for IAM can manage root user credentials for member accounts in your organization.</p> <p>Before you enable centralized root access, you must have an account configured with the following settings:</p> <ul> <li> <p>You must manage your Amazon Web Services accounts in <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html\">Organizations</a>.</p> </li> <li> <p>Enable trusted access for Identity and Access Management in Organizations. For details, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-iam.html\">IAM and Organizations</a> in the <i>Organizations User Guide</i>.</p> </li> </ul>"
     },
     "EnableOrganizationsRootSessions":{
       "name":"EnableOrganizationsRootSessions",
@@ -926,7 +947,7 @@
       "errors":[
         {"shape":"ReportGenerationLimitExceededException"}
       ],
-      "documentation":"<p>Generates a report for service last accessed data for Organizations. You can generate a report for any entities (organization root, organizational unit, or account) or policies in your organization.</p> <p>To call this operation, you must be signed in using your Organizations management account credentials. You can use your long-term IAM user or root user credentials, or temporary credentials from assuming an IAM role. SCPs must be enabled for your organization root. You must have the required IAM and Organizations permissions. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>You can generate a service last accessed data report for entities by specifying only the entity's path. This data includes a list of services that are allowed by any service control policies (SCPs) that apply to the entity.</p> <p>You can generate a service last accessed data report for a policy by specifying an entity's path and an optional Organizations policy ID. This data includes a list of services that are allowed by the specified SCP.</p> <p>For each service in both report types, the data includes the most recent account activity that the policy allows to account principals in the entity or the entity's children. For important information about the data, reporting period, permissions required, troubleshooting, and supported Regions see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <important> <p>The data includes all attempts to access Amazon Web Services, not just the successful ones. This includes all attempts that were made using the Amazon Web Services Management Console, the Amazon Web Services API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that an account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html\">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>This operation returns a <code>JobId</code>. Use this parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation to check the status of the report generation. To check the status of this request, use the <code>JobId</code> parameter in the <code> <a>GetOrganizationsAccessReport</a> </code> operation and test the <code>JobStatus</code> response parameter. When the job is complete, you can retrieve the report.</p> <p>To generate a service last accessed data report for entities, specify an entity path without specifying the optional Organizations policy ID. The type of entity that you specify determines the data returned in the report.</p> <ul> <li> <p> <b>Root</b> – When you specify the organizations root as the entity, the resulting report lists all of the services allowed by SCPs that are attached to your root. For each service, the report includes data for all accounts in your organization except the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>OU</b> – When you specify an organizational unit (OU) as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the OU and its parents. For each service, the report includes data for all accounts in the OU or its children. This data excludes the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all Amazon Web Services services, because the management account is not limited by SCPs. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the account and its parents. For each service, the report includes data for only the specified account.</p> </li> </ul> <p>To generate a service last accessed data report for policies, specify an entity path and the optional Organizations policy ID. The type of entity that you specify determines the data returned for each service.</p> <ul> <li> <p> <b>Root</b> – When you specify the root entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in your organization to which the SCP applies. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to any entities in the organization, then the report will return a list of services with no data.</p> </li> <li> <p> <b>OU</b> – When you specify an OU entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in the OU or its children to which the SCP applies. This means that other accounts outside the OU that are affected by the SCP might not be included in the data. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to the OU or one of its children, the report will return a list of services with no data.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all Amazon Web Services services, because the management account is not limited by SCPs. If you specify a policy ID in the CLI or API, the policy is ignored. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for only the specified account. This means that other accounts in the organization that are affected by the SCP might not be included in the data. If the SCP is not attached to the account, the report will return a list of services with no data.</p> </li> </ul> <note> <p>Service last accessed data does not use other policy types when determining whether a principal could access a service. These other policy types include identity-based policies, resource-based policies, access control lists, IAM permissions boundaries, and STS assume role policies. It only applies SCP logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service last accessed data, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing policy scope by viewing user activity</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Generates a report for service last accessed data for Organizations. You can generate a report for any entities (organization root, organizational unit, or account) or policies in your organization.</p> <p>To call this operation, you must be signed in using your Organizations management account credentials. You can use your long-term IAM user or root user credentials, or temporary credentials from assuming an IAM role. SCPs must be enabled for your organization root. You must have the required IAM and Organizations permissions. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>You can generate a service last accessed data report for entities by specifying only the entity's path. This data includes a list of services that are allowed by any service control policies (SCPs) that apply to the entity.</p> <p>You can generate a service last accessed data report for a policy by specifying an entity's path and an optional Organizations policy ID. This data includes a list of services that are allowed by the specified SCP.</p> <p>For each service in both report types, the data includes the most recent account activity that the policy allows to account principals in the entity or the entity's children. For important information about the data, reporting period, permissions required, troubleshooting, and supported Regions see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <important> <p>The data includes all attempts to access Amazon Web Services, not just the successful ones. This includes all attempts that were made using the Amazon Web Services Management Console, the Amazon Web Services API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that an account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html\">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>This operation returns a <code>JobId</code>. Use this parameter in the <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOrganizationsAccessReport.html\">GetOrganizationsAccessReport</a> </code> operation to check the status of the report generation. To check the status of this request, use the <code>JobId</code> parameter in the <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOrganizationsAccessReport.html\">GetOrganizationsAccessReport</a> </code> operation and test the <code>JobStatus</code> response parameter. When the job is complete, you can retrieve the report.</p> <p>To generate a service last accessed data report for entities, specify an entity path without specifying the optional Organizations policy ID. The type of entity that you specify determines the data returned in the report.</p> <ul> <li> <p> <b>Root</b> – When you specify the organizations root as the entity, the resulting report lists all of the services allowed by SCPs that are attached to your root. For each service, the report includes data for all accounts in your organization except the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>OU</b> – When you specify an organizational unit (OU) as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the OU and its parents. For each service, the report includes data for all accounts in the OU or its children. This data excludes the management account, because the management account is not limited by SCPs.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all Amazon Web Services services, because the management account is not limited by SCPs. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account as the entity, the resulting report lists all of the services allowed by SCPs that are attached to the account and its parents. For each service, the report includes data for only the specified account.</p> </li> </ul> <p>To generate a service last accessed data report for policies, specify an entity path and the optional Organizations policy ID. The type of entity that you specify determines the data returned for each service.</p> <ul> <li> <p> <b>Root</b> – When you specify the root entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in your organization to which the SCP applies. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to any entities in the organization, then the report will return a list of services with no data.</p> </li> <li> <p> <b>OU</b> – When you specify an OU entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for all accounts in the OU or its children to which the SCP applies. This means that other accounts outside the OU that are affected by the SCP might not be included in the data. This data excludes the management account, because the management account is not limited by SCPs. If the SCP is not attached to the OU or one of its children, the report will return a list of services with no data.</p> </li> <li> <p> <b>management account</b> – When you specify the management account, the resulting report lists all Amazon Web Services services, because the management account is not limited by SCPs. If you specify a policy ID in the CLI or API, the policy is ignored. For each service, the report includes data for only the management account.</p> </li> <li> <p> <b>Account</b> – When you specify another account entity and a policy ID, the resulting report lists all of the services that are allowed by the specified SCP. For each service, the report includes data for only the specified account. This means that other accounts in the organization that are affected by the SCP might not be included in the data. If the SCP is not attached to the account, the report will return a list of services with no data.</p> </li> </ul> <note> <p>Service last accessed data does not use other policy types when determining whether a principal could access a service. These other policy types include identity-based policies, resource-based policies, access control lists, IAM permissions boundaries, and STS assume role policies. It only applies SCP logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service last accessed data, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing policy scope by viewing user activity</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GenerateServiceLastAccessedDetails":{
       "name":"GenerateServiceLastAccessedDetails",
@@ -943,7 +964,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p>Generates a report that includes details about when an IAM resource (user, group, role, or policy) was last used in an attempt to access Amazon Web Services services. Recent activity usually appears within four hours. IAM reports activity for at least the last 400 days, or less if your Region began supporting this feature within the last year. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period\">Regions where data is tracked</a>. For more information about services and actions for which action last accessed information is displayed, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-action-last-accessed.html\">IAM action last accessed information services and actions</a>.</p> <important> <p>The service last accessed data includes all attempts to access an Amazon Web Services API, not just the successful ones. This includes all attempts that were made using the Amazon Web Services Management Console, the Amazon Web Services API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that your account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html\">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>The <code>GenerateServiceLastAccessedDetails</code> operation returns a <code>JobId</code>. Use this parameter in the following operations to retrieve the following details from your report: </p> <ul> <li> <p> <a>GetServiceLastAccessedDetails</a> – Use this operation for users, groups, roles, or policies to list every Amazon Web Services service that the resource could access using permissions policies. For each service, the response includes information about the most recent access attempt.</p> <p>The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p> </li> <li> <p> <a>GetServiceLastAccessedDetailsWithEntities</a> – Use this operation for groups and policies to list information about the associated entities (users or roles) that attempted to access a specific Amazon Web Services service. </p> </li> </ul> <p>To check the status of the <code>GenerateServiceLastAccessedDetails</code> request, use the <code>JobId</code> parameter in the same operations and test the <code>JobStatus</code> response parameter.</p> <p>For additional information about the permissions policies that allow an identity (user, group, or role) to access specific services, use the <a>ListPoliciesGrantingServiceAccess</a> operation.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, Organizations policies, IAM permissions boundaries, and STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service and action last accessed data, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Generates a report that includes details about when an IAM resource (user, group, role, or policy) was last used in an attempt to access Amazon Web Services services. Recent activity usually appears within four hours. IAM reports activity for at least the last 400 days, or less if your Region began supporting this feature within the last year. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period\">Regions where data is tracked</a>. For more information about services and actions for which action last accessed information is displayed, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-action-last-accessed.html\">IAM action last accessed information services and actions</a>.</p> <important> <p>The service last accessed data includes all attempts to access an Amazon Web Services API, not just the successful ones. This includes all attempts that were made using the Amazon Web Services Management Console, the Amazon Web Services API through any of the SDKs, or any of the command line tools. An unexpected entry in the service last accessed data does not mean that your account has been compromised, because the request might have been denied. Refer to your CloudTrail logs as the authoritative source for information about all API calls and whether they were successful or denied access. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html\">Logging IAM events with CloudTrail</a> in the <i>IAM User Guide</i>.</p> </important> <p>The <code>GenerateServiceLastAccessedDetails</code> operation returns a <code>JobId</code>. Use this parameter in the following operations to retrieve the following details from your report: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html\">GetServiceLastAccessedDetails</a> – Use this operation for users, groups, roles, or policies to list every Amazon Web Services service that the resource could access using permissions policies. For each service, the response includes information about the most recent access attempt.</p> <p>The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html\">GetServiceLastAccessedDetailsWithEntities</a> – Use this operation for groups and policies to list information about the associated entities (users or roles) that attempted to access a specific Amazon Web Services service. </p> </li> </ul> <p>To check the status of the <code>GenerateServiceLastAccessedDetails</code> request, use the <code>JobId</code> parameter in the same operations and test the <code>JobStatus</code> response parameter.</p> <p>For additional information about the permissions policies that allow an identity (user, group, or role) to access specific services, use the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPoliciesGrantingServiceAccess.html\">ListPoliciesGrantingServiceAccess</a> operation.</p> <note> <p>Service last accessed data does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, Organizations policies, IAM permissions boundaries, and STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>For more information about service and action last accessed data, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Reducing permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GetAccessKeyLastUsed":{
       "name":"GetAccessKeyLastUsed",
@@ -972,7 +993,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves information about all IAM users, groups, roles, and policies in your Amazon Web Services account, including their relationships to one another. Use this operation to obtain a snapshot of the configuration of IAM permissions (users, groups, roles, and policies) in your account.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>You can optionally filter the results using the <code>Filter</code> parameter. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+      "documentation":"<p>Retrieves information about all IAM users, groups, roles, and policies in your Amazon Web Services account, including their relationships to one another. Use this operation to obtain a snapshot of the configuration of IAM permissions (users, groups, roles, and policies) in your account.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note> <p>You can optionally filter the results using the <code>Filter</code> parameter. You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
     },
     "GetAccountPasswordPolicy":{
       "name":"GetAccountPasswordPolicy",
@@ -1019,7 +1040,7 @@
       "errors":[
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p>Gets a list of all of the context keys referenced in the input policies. The policies are supplied as a list of one or more strings. To get the context keys from policies associated with an IAM user, group, or role, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value specified in an IAM policy. Use <code>GetContextKeysForCustomPolicy</code> to understand what key names and values you must supply when you call <a>SimulateCustomPolicy</a>. Note that all parameters are shown in unencoded form here for clarity but must be URL encoded to be included as a part of a real HTML request.</p>"
+      "documentation":"<p>Gets a list of all of the context keys referenced in the input policies. The policies are supplied as a list of one or more strings. To get the context keys from policies associated with an IAM user, group, or role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a>.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value specified in an IAM policy. Use <code>GetContextKeysForCustomPolicy</code> to understand what key names and values you must supply when you call <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a>. Note that all parameters are shown in unencoded form here for clarity but must be URL encoded to be included as a part of a real HTML request.</p>"
     },
     "GetContextKeysForPrincipalPolicy":{
       "name":"GetContextKeysForPrincipalPolicy",
@@ -1036,7 +1057,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p>Gets a list of all of the context keys referenced in all the IAM policies that are attached to the specified IAM entity. The entity can be an IAM user, group, or role. If you specify a user, then the request also includes all of the policies attached to groups that the user is a member of.</p> <p>You can optionally include a list of one or more additional policies, specified as strings. If you want to include <i>only</i> a list of policies by string, use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>GetContextKeysForCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value in an IAM policy. Use <a>GetContextKeysForPrincipalPolicy</a> to understand what key names and values you must supply when you call <a>SimulatePrincipalPolicy</a>.</p>"
+      "documentation":"<p>Gets a list of all of the context keys referenced in all the IAM policies that are attached to the specified IAM entity. The entity can be an IAM user, group, or role. If you specify a user, then the request also includes all of the policies attached to groups that the user is a member of.</p> <p>You can optionally include a list of one or more additional policies, specified as strings. If you want to include <i>only</i> a list of policies by string, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a> instead.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. Context keys can be evaluated by testing against a value in an IAM policy. Use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a> to understand what key names and values you must supply when you call <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html\">SimulatePrincipalPolicy</a>.</p>"
     },
     "GetCredentialReport":{
       "name":"GetCredentialReport",
@@ -1088,7 +1109,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves the specified inline policy document that is embedded in the specified IAM group.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM group can also have managed policies attached to it. To retrieve a managed policy document that is attached to a group, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Retrieves the specified inline policy document that is embedded in the specified IAM group.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note> <p>An IAM group can also have managed policies attached to it. To retrieve a managed policy document that is attached to a group, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> to determine the policy's default version, then use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GetInstanceProfile":{
       "name":"GetInstanceProfile",
@@ -1173,7 +1194,7 @@
       "errors":[
         {"shape":"NoSuchEntityException"}
       ],
-      "documentation":"<p>Retrieves the service last accessed data report for Organizations that was previously generated using the <code> <a>GenerateOrganizationsAccessReport</a> </code> operation. This operation retrieves the status of your report job and the report contents.</p> <p>Depending on the parameters that you passed when you generated the report, the data returned could include different information. For details, see <a>GenerateOrganizationsAccessReport</a>.</p> <p>To call this operation, you must be signed in to the management account in your organization. SCPs must be enabled for your organization root. You must have permissions to perform this operation. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>For each service that principals in an account (root user, IAM users, or IAM roles) could access using SCPs, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, it returns the reason that it failed.</p> <p>By default, the list is sorted by service namespace.</p>"
+      "documentation":"<p>Retrieves the service last accessed data report for Organizations that was previously generated using the <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateOrganizationsAccessReport.html\">GenerateOrganizationsAccessReport</a> </code> operation. This operation retrieves the status of your report job and the report contents.</p> <p>Depending on the parameters that you passed when you generated the report, the data returned could include different information. For details, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateOrganizationsAccessReport.html\">GenerateOrganizationsAccessReport</a>.</p> <p>To call this operation, you must be signed in to the management account in your organization. SCPs must be enabled for your organization root. You must have permissions to perform this operation. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html\">Refining permissions using service last accessed data</a> in the <i>IAM User Guide</i>.</p> <p>For each service that principals in an account (root user, IAM users, or IAM roles) could access using SCPs, the operation returns details about the most recent access attempt. If there was no attempt, the service is listed without details about the most recent attempt to access the service. If the operation fails, it returns the reason that it failed.</p> <p>By default, the list is sorted by service namespace.</p>"
     },
     "GetPolicy":{
       "name":"GetPolicy",
@@ -1191,7 +1212,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves information about the specified managed policy, including the policy's default version and the total number of IAM users, groups, and roles to which the policy is attached. To retrieve the list of the specific users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>. This operation returns metadata about the policy. To retrieve the actual policy document for a specific version of the policy, use <a>GetPolicyVersion</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded with an IAM user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Retrieves information about the specified managed policy, including the policy's default version and the total number of IAM users, groups, and roles to which the policy is attached. To retrieve the list of the specific users, groups, and roles that the policy is attached to, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a>. This operation returns metadata about the policy. To retrieve the actual policy document for a specific version of the policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded with an IAM user, group, or role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUserPolicy.html\">GetUserPolicy</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroupPolicy.html\">GetGroupPolicy</a>, or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html\">GetRolePolicy</a>.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GetPolicyVersion":{
       "name":"GetPolicyVersion",
@@ -1209,7 +1230,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves information about the specified version of the specified managed policy, including the policy document.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>To list the available versions for a policy, use <a>ListPolicyVersions</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded in a user, group, or role, use <a>GetUserPolicy</a>, <a>GetGroupPolicy</a>, or <a>GetRolePolicy</a>.</p> <p>For more information about the types of policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policy versions, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Retrieves information about the specified version of the specified managed policy, including the policy document.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note> <p>To list the available versions for a policy, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a>.</p> <p>This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded in a user, group, or role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUserPolicy.html\">GetUserPolicy</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroupPolicy.html\">GetGroupPolicy</a>, or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html\">GetRolePolicy</a>.</p> <p>For more information about the types of policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>For more information about managed policy versions, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html\">Versioning for managed policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GetRole":{
       "name":"GetRole",
@@ -1226,7 +1247,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note>"
+      "documentation":"<p>Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note>"
     },
     "GetRolePolicy":{
       "name":"GetRolePolicy",
@@ -1243,7 +1264,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves the specified inline policy document that is embedded with the specified IAM role.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use <a>GetPolicy</a> to determine the policy's default version, then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p> For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Retrieves the specified inline policy document that is embedded with the specified IAM role.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note> <p>An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> to determine the policy's default version, then use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p> For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p>"
     },
     "GetSAMLProvider":{
       "name":"GetSAMLProvider",
@@ -1347,7 +1368,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves the status of your service-linked role deletion. After you use <a>DeleteServiceLinkedRole</a> to submit a service-linked role for deletion, you can use the <code>DeletionTaskId</code> parameter in <code>GetServiceLinkedRoleDeletionStatus</code> to check the status of the deletion. If the deletion fails, this operation returns the reason that it failed, if that information is returned by the service.</p>"
+      "documentation":"<p>Retrieves the status of your service-linked role deletion. After you use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html\">DeleteServiceLinkedRole</a> to submit a service-linked role for deletion, you can use the <code>DeletionTaskId</code> parameter in <code>GetServiceLinkedRoleDeletionStatus</code> to check the status of the deletion. If the deletion fails, this operation returns the reason that it failed, if that information is returned by the service.</p>"
     },
     "GetUser":{
       "name":"GetUser",
@@ -1381,7 +1402,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Retrieves the specified inline policy document that is embedded in the specified IAM user.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p> </note> <p>An IAM user can also have managed policies attached to it. To retrieve a managed policy document that is attached to a user, use <a>GetPolicy</a> to determine the policy's default version. Then use <a>GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Retrieves the specified inline policy document that is embedded in the specified IAM user.</p> <note> <p>Policies returned by this operation are URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality, and some SDKs do this decoding automatically.</p> </note> <p>An IAM user can also have managed policies attached to it. To retrieve a managed policy document that is attached to a user, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> to determine the policy's default version. Then use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a> to retrieve the policy document.</p> <p>For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "ListAccessKeys":{
       "name":"ListAccessKeys",
@@ -1414,7 +1435,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the account alias associated with the Amazon Web Services account (Note: you can have only one). For information about using an Amazon Web Services account alias, see <a href=\"https://docs.aws.amazon.com/signin/latest/userguide/CreateAccountAlias.html\">Creating, deleting, and listing an Amazon Web Services account alias</a> in the <i>Amazon Web Services Sign-In User Guide</i>.</p>"
+      "documentation":"<p>Lists the account alias associated with the Amazon Web Services account (Note: you can have only one). For information about using an Amazon Web Services account alias, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#CreateAccountAlias\">Creating, deleting, and listing an Amazon Web Services account alias</a> in the <i>IAM User Guide</i>.</p>"
     },
     "ListAttachedGroupPolicies":{
       "name":"ListAttachedGroupPolicies",
@@ -1432,7 +1453,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists all managed policies that are attached to the specified IAM group.</p> <p>An IAM group can also have inline policies embedded with it. To list the inline policies for a group, use <a>ListGroupPolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>"
+      "documentation":"<p>Lists all managed policies that are attached to the specified IAM group.</p> <p>An IAM group can also have inline policies embedded with it. To list the inline policies for a group, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroupPolicies.html\">ListGroupPolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>"
     },
     "ListAttachedRolePolicies":{
       "name":"ListAttachedRolePolicies",
@@ -1450,7 +1471,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists all managed policies that are attached to the specified IAM role.</p> <p>An IAM role can also have inline policies embedded with it. To list the inline policies for a role, use <a>ListRolePolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified role (or none that match the specified path prefix), the operation returns an empty list.</p>"
+      "documentation":"<p>Lists all managed policies that are attached to the specified IAM role.</p> <p>An IAM role can also have inline policies embedded with it. To list the inline policies for a role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRolePolicies.html\">ListRolePolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified role (or none that match the specified path prefix), the operation returns an empty list.</p>"
     },
     "ListAttachedUserPolicies":{
       "name":"ListAttachedUserPolicies",
@@ -1468,7 +1489,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists all managed policies that are attached to the specified IAM user.</p> <p>An IAM user can also have inline policies embedded with it. To list the inline policies for a user, use <a>ListUserPolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>"
+      "documentation":"<p>Lists all managed policies that are attached to the specified IAM user.</p> <p>An IAM user can also have inline policies embedded with it. To list the inline policies for a user, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUserPolicies.html\">ListUserPolicies</a>. For information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. You can use the <code>PathPrefix</code> parameter to limit the list of policies to only those matching the specified path prefix. If there are no policies attached to the specified group (or none that match the specified path prefix), the operation returns an empty list.</p>"
     },
     "ListEntitiesForPolicy":{
       "name":"ListEntitiesForPolicy",
@@ -1503,7 +1524,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the names of the inline policies that are embedded in the specified IAM group.</p> <p>An IAM group can also have managed policies attached to it. To list the managed policies that are attached to a group, use <a>ListAttachedGroupPolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified group, the operation returns an empty list.</p>"
+      "documentation":"<p>Lists the names of the inline policies that are embedded in the specified IAM group.</p> <p>An IAM group can also have managed policies attached to it. To list the managed policies that are attached to a group, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedGroupPolicies.html\">ListAttachedGroupPolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified group, the operation returns an empty list.</p>"
     },
     "ListGroups":{
       "name":"ListGroups",
@@ -1569,7 +1590,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\">Using instance profiles</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see <a>GetInstanceProfile</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+      "documentation":"<p>Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html\">Using instance profiles</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html\">GetInstanceProfile</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
     },
     "ListInstanceProfilesForRole":{
       "name":"ListInstanceProfilesForRole",
@@ -1655,7 +1676,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists information about the IAM OpenID Connect (OIDC) provider resource objects defined in the Amazon Web Services account.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an OIDC provider, see <a>GetOpenIDConnectProvider</a>.</p> </note>"
+      "documentation":"<p>Lists information about the IAM OpenID Connect (OIDC) provider resource objects defined in the Amazon Web Services account.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an OIDC provider, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOpenIDConnectProvider.html\">GetOpenIDConnectProvider</a>.</p> </note>"
     },
     "ListOrganizationsFeatures":{
       "name":"ListOrganizationsFeatures",
@@ -1690,7 +1711,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists all the managed policies that are available in your Amazon Web Services account, including your own customer-defined managed policies and all Amazon Web Services managed policies.</p> <p>You can filter the list of policies that is returned using the optional <code>OnlyAttached</code>, <code>Scope</code>, and <code>PathPrefix</code> parameters. For example, to list only the customer managed policies in your Amazon Web Services account, set <code>Scope</code> to <code>Local</code>. To list only Amazon Web Services managed policies, set <code>Scope</code> to <code>AWS</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a customer manged policy, see <a>GetPolicy</a>.</p> </note>"
+      "documentation":"<p>Lists all the managed policies that are available in your Amazon Web Services account, including your own customer-defined managed policies and all Amazon Web Services managed policies.</p> <p>You can filter the list of policies that is returned using the optional <code>OnlyAttached</code>, <code>Scope</code>, and <code>PathPrefix</code> parameters. For example, to list only the customer managed policies in your Amazon Web Services account, set <code>Scope</code> to <code>Local</code>. To list only Amazon Web Services managed policies, set <code>Scope</code> to <code>AWS</code>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a customer manged policy, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a>.</p> </note>"
     },
     "ListPoliciesGrantingServiceAccess":{
       "name":"ListPoliciesGrantingServiceAccess",
@@ -1707,7 +1728,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p>Retrieves a list of policies that the IAM identity (user, group, or role) can use to access each specified service.</p> <note> <p>This operation does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, Organizations policies, IAM permissions boundaries, and STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>The list of policies returned by the operation depends on the ARN of the identity that you provide.</p> <ul> <li> <p> <b>User</b> – The list of policies includes the managed and inline policies that are attached to the user directly. The list also includes any additional managed and inline policies that are attached to the group to which the user belongs. </p> </li> <li> <p> <b>Group</b> – The list of policies includes only the managed and inline policies that are attached to the group directly. Policies that are attached to the group’s user are not included.</p> </li> <li> <p> <b>Role</b> – The list of policies includes only the managed and inline policies that are attached to the role.</p> </li> </ul> <p>For each managed policy, this operation returns the ARN and policy name. For each inline policy, it returns the policy name and the entity to which it is attached. Inline policies do not have an ARN. For more information about these policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>Policies that are attached to users and roles as permissions boundaries are not returned. To view which managed policy is currently used to set the permissions boundary for a user or role, use the <a>GetUser</a> or <a>GetRole</a> operations.</p>"
+      "documentation":"<p>Retrieves a list of policies that the IAM identity (user, group, or role) can use to access each specified service.</p> <note> <p>This operation does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, Organizations policies, IAM permissions boundaries, and STS assume role policies. It only applies permissions policy logic. For more about the evaluation of policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-basics\">Evaluating policies</a> in the <i>IAM User Guide</i>.</p> </note> <p>The list of policies returned by the operation depends on the ARN of the identity that you provide.</p> <ul> <li> <p> <b>User</b> – The list of policies includes the managed and inline policies that are attached to the user directly. The list also includes any additional managed and inline policies that are attached to the group to which the user belongs. </p> </li> <li> <p> <b>Group</b> – The list of policies includes only the managed and inline policies that are attached to the group directly. Policies that are attached to the group’s user are not included.</p> </li> <li> <p> <b>Role</b> – The list of policies includes only the managed and inline policies that are attached to the role.</p> </li> </ul> <p>For each managed policy, this operation returns the ARN and policy name. For each inline policy, it returns the policy name and the entity to which it is attached. Inline policies do not have an ARN. For more information about these policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>Policies that are attached to users and roles as permissions boundaries are not returned. To view which managed policy is currently used to set the permissions boundary for a user or role, use the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html\">GetUser</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html\">GetRole</a> operations.</p>"
     },
     "ListPolicyTags":{
       "name":"ListPolicyTags",
@@ -1760,7 +1781,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the names of the inline policies that are embedded in the specified IAM role.</p> <p>An IAM role can also have managed policies attached to it. To list the managed policies that are attached to a role, use <a>ListAttachedRolePolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified role, the operation returns an empty list.</p>"
+      "documentation":"<p>Lists the names of the inline policies that are embedded in the specified IAM role.</p> <p>An IAM role can also have managed policies attached to it. To list the managed policies that are attached to a role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html\">ListAttachedRolePolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified role, the operation returns an empty list.</p>"
     },
     "ListRoleTags":{
       "name":"ListRoleTags",
@@ -1793,7 +1814,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object:</p> <ul> <li> <p>PermissionsBoundary</p> </li> <li> <p>RoleLastUsed</p> </li> <li> <p>Tags</p> </li> </ul> <p>To view all of the information for a role, see <a>GetRole</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+      "documentation":"<p>Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html\">IAM roles</a> in the <i>IAM User Guide</i>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object:</p> <ul> <li> <p>PermissionsBoundary</p> </li> <li> <p>RoleLastUsed</p> </li> <li> <p>Tags</p> </li> </ul> <p>To view all of the information for a role, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html\">GetRole</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
     },
     "ListSAMLProviderTags":{
       "name":"ListSAMLProviderTags",
@@ -1827,7 +1848,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the SAML provider resource objects defined in IAM in the account. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a SAML provider, see <a>GetSAMLProvider</a>.</p> <important> <p> This operation requires <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4</a>.</p> </important>"
+      "documentation":"<p>Lists the SAML provider resource objects defined in IAM in the account. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a SAML provider, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSAMLProvider.html\">GetSAMLProvider</a>.</p> <important> <p> This operation requires <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4</a>.</p> </important>"
     },
     "ListSSHPublicKeys":{
       "name":"ListSSHPublicKeys",
@@ -1876,7 +1897,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the server certificates stored in IAM that have the specified path prefix. If none exist, the operation returns an empty list.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about working with server certificates, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html\">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of Amazon Web Services services that can use the server certificates that you manage with IAM.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a servercertificate, see <a>GetServerCertificate</a>.</p> </note>"
+      "documentation":"<p>Lists the server certificates stored in IAM that have the specified path prefix. If none exist, the operation returns an empty list.</p> <p> You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p> <p>For more information about working with server certificates, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html\">Working with server certificates</a> in the <i>IAM User Guide</i>. This topic also includes a list of Amazon Web Services services that can use the server certificates that you manage with IAM.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for a servercertificate, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html\">GetServerCertificate</a>.</p> </note>"
     },
     "ListServiceSpecificCredentials":{
       "name":"ListServiceSpecificCredentials",
@@ -1927,7 +1948,7 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the names of the inline policies embedded in the specified IAM user.</p> <p>An IAM user can also have managed policies attached to it. To list the managed policies that are attached to a user, use <a>ListAttachedUserPolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified user, the operation returns an empty list.</p>"
+      "documentation":"<p>Lists the names of the inline policies embedded in the specified IAM user.</p> <p>An IAM user can also have managed policies attached to it. To list the managed policies that are attached to a user, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedUserPolicies.html\">ListAttachedUserPolicies</a>. For more information about policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters. If there are no inline policies embedded with the specified user, the operation returns an empty list.</p>"
     },
     "ListUserTags":{
       "name":"ListUserTags",
@@ -1960,7 +1981,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Lists the IAM users that have the specified path prefix. If no path prefix is specified, the operation returns all users in the Amazon Web Services account. If there are none, the operation returns an empty list.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object:</p> <ul> <li> <p>PermissionsBoundary</p> </li> <li> <p>Tags</p> </li> </ul> <p>To view all of the information for a user, see <a>GetUser</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+      "documentation":"<p>Lists the IAM users that have the specified path prefix. If no path prefix is specified, the operation returns all users in the Amazon Web Services account. If there are none, the operation returns an empty list.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object:</p> <ul> <li> <p>PermissionsBoundary</p> </li> <li> <p>Tags</p> </li> </ul> <p>To view all of the information for a user, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html\">GetUser</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
     },
     "ListVirtualMFADevices":{
       "name":"ListVirtualMFADevices",
@@ -1973,7 +1994,7 @@
         "shape":"ListVirtualMFADevicesResponse",
         "resultWrapper":"ListVirtualMFADevicesResult"
       },
-      "documentation":"<p>Lists the virtual MFA devices defined in the Amazon Web Services account by assignment status. If you do not specify an assignment status, the operation returns a list of all virtual MFA devices. Assignment status can be <code>Assigned</code>, <code>Unassigned</code>, or <code>Any</code>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view tag information for a virtual MFA device, see <a>ListMFADeviceTags</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+      "documentation":"<p>Lists the virtual MFA devices defined in the Amazon Web Services account by assignment status. If you do not specify an assignment status, the operation returns a list of all virtual MFA devices. Assignment status can be <code>Assigned</code>, <code>Unassigned</code>, or <code>Any</code>.</p> <note> <p>IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view tag information for a virtual MFA device, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADeviceTags.html\">ListMFADeviceTags</a>.</p> </note> <p>You can paginate the results using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
     },
     "PutGroupPolicy":{
       "name":"PutGroupPolicy",
@@ -2060,6 +2081,7 @@
       },
       "input":{"shape":"RemoveClientIDFromOpenIDConnectProviderRequest"},
       "errors":[
+        {"shape":"ConcurrentModificationException"},
         {"shape":"InvalidInputException"},
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
@@ -2140,7 +2162,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Sets the specified version of the specified policy as the policy's default (operative) version.</p> <p>This operation affects all users, groups, and roles that the policy is attached to. To list the users, groups, and roles that the policy is attached to, use <a>ListEntitiesForPolicy</a>.</p> <p>For information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Sets the specified version of the specified policy as the policy's default (operative) version.</p> <p>This operation affects all users, groups, and roles that the policy is attached to. To list the users, groups, and roles that the policy is attached to, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a>.</p> <p>For information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
     },
     "SetSecurityTokenServicePreferences":{
       "name":"SetSecurityTokenServicePreferences",
@@ -2152,7 +2174,7 @@
       "errors":[
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Sets the specified version of the global endpoint token as the token version used for the Amazon Web Services account.</p> <p>By default, Security Token Service (STS) is available as a global service, and all STS requests go to a single endpoint at <code>https://sts.amazonaws.com</code>. Amazon Web Services recommends using Regional STS endpoints to reduce latency, build in redundancy, and increase session token availability. For information about Regional endpoints for STS, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sts.html\">Security Token Service endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>.</p> <p>If you make an STS call to the global endpoint, the resulting session tokens might be valid in some Regions but not others. It depends on the version that is set in this operation. Version 1 tokens are valid only in Amazon Web Services Regions that are available by default. These tokens do not work in manually enabled Regions, such as Asia Pacific (Hong Kong). Version 2 tokens are valid in all Regions. However, version 2 tokens are longer and might affect systems where you temporarily store tokens. For information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html\">Activating and deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p> <p>To view the current session token version, see the <code>GlobalEndpointTokenVersion</code> entry in the response of the <a>GetAccountSummary</a> operation.</p>"
+      "documentation":"<p>Sets the specified version of the global endpoint token as the token version used for the Amazon Web Services account.</p> <p>By default, Security Token Service (STS) is available as a global service, and all STS requests go to a single endpoint at <code>https://sts.amazonaws.com</code>. Amazon Web Services recommends using Regional STS endpoints to reduce latency, build in redundancy, and increase session token availability. For information about Regional endpoints for STS, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sts.html\">Security Token Service endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>.</p> <p>If you make an STS call to the global endpoint, the resulting session tokens might be valid in some Regions but not others. It depends on the version that is set in this operation. Version 1 tokens are valid only in Amazon Web Services Regions that are available by default. These tokens do not work in manually enabled Regions, such as Asia Pacific (Hong Kong). Version 2 tokens are valid in all Regions. However, version 2 tokens are longer and might affect systems where you temporarily store tokens. For information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html\">Activating and deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p> <p>To view the current session token version, see the <code>GlobalEndpointTokenVersion</code> entry in the response of the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountSummary.html\">GetAccountSummary</a> operation.</p>"
     },
     "SimulateCustomPolicy":{
       "name":"SimulateCustomPolicy",
@@ -2169,7 +2191,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"PolicyEvaluationException"}
       ],
-      "documentation":"<p>Simulate how a set of IAM policies and optionally a resource-based policy works with a list of API operations and Amazon Web Services resources to determine the policies' effective permissions. The policies are provided as strings.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations. You can simulate resources that don't exist in your account.</p> <p>If you want to simulate existing policies that are attached to an IAM user, group, or role, use <a>SimulatePrincipalPolicy</a> instead.</p> <p>Context keys are variables that are maintained by Amazon Web Services and its services and which provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForCustomPolicy</a>.</p> <p>If the output is long, you can use <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <note> <p>The IAM policy simulator evaluates statements in the identity-based policy and the inputs that you provide during simulation. The policy simulator results can differ from your live Amazon Web Services environment. We recommend that you check your policies against your live Amazon Web Services environment after testing using the policy simulator to confirm that you have the desired results. For more information about using the policy simulator, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html\">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p> </note>"
+      "documentation":"<p>Simulate how a set of IAM policies and optionally a resource-based policy works with a list of API operations and Amazon Web Services resources to determine the policies' effective permissions. The policies are provided as strings.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations. You can simulate resources that don't exist in your account.</p> <p>If you want to simulate existing policies that are attached to an IAM user, group, or role, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html\">SimulatePrincipalPolicy</a> instead.</p> <p>Context keys are variables that are maintained by Amazon Web Services and its services and which provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a>.</p> <p>If the output is long, you can use <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <note> <p>The IAM policy simulator evaluates statements in the identity-based policy and the inputs that you provide during simulation. The policy simulator results can differ from your live Amazon Web Services environment. We recommend that you check your policies against your live Amazon Web Services environment after testing using the policy simulator to confirm that you have the desired results. For more information about using the policy simulator, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html\">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p> </note>"
     },
     "SimulatePrincipalPolicy":{
       "name":"SimulatePrincipalPolicy",
@@ -2187,7 +2209,7 @@
         {"shape":"InvalidInputException"},
         {"shape":"PolicyEvaluationException"}
       ],
-      "documentation":"<p>Simulate how a set of IAM policies attached to an IAM entity works with a list of API operations and Amazon Web Services resources to determine the policies' effective permissions. The entity can be an IAM user, group, or role. If you specify a user, then the simulation also includes all of the policies that are attached to groups that the user belongs to. You can simulate resources that don't exist in your account.</p> <p>You can optionally include a list of one or more additional policies specified as strings to include in the simulation. If you want to simulate only policies specified as strings, use <a>SimulateCustomPolicy</a> instead.</p> <p>You can also optionally include one resource-based policy to be evaluated with each of the resources included in the simulation for IAM users only.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a>SimulateCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a>GetContextKeysForPrincipalPolicy</a>.</p> <p>If the output is long, you can use the <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <note> <p>The IAM policy simulator evaluates statements in the identity-based policy and the inputs that you provide during simulation. The policy simulator results can differ from your live Amazon Web Services environment. We recommend that you check your policies against your live Amazon Web Services environment after testing using the policy simulator to confirm that you have the desired results. For more information about using the policy simulator, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html\">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p> </note>"
+      "documentation":"<p>Simulate how a set of IAM policies attached to an IAM entity works with a list of API operations and Amazon Web Services resources to determine the policies' effective permissions. The entity can be an IAM user, group, or role. If you specify a user, then the simulation also includes all of the policies that are attached to groups that the user belongs to. You can simulate resources that don't exist in your account.</p> <p>You can optionally include a list of one or more additional policies specified as strings to include in the simulation. If you want to simulate only policies specified as strings, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a> instead.</p> <p>You can also optionally include one resource-based policy to be evaluated with each of the resources included in the simulation for IAM users only.</p> <p>The simulation does not perform the API operations; it only checks the authorization to determine if the simulated policies allow or deny the operations.</p> <p> <b>Note:</b> This operation discloses information about the permissions granted to other users. If you do not want users to see other user's permissions, then consider allowing them to use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a> instead.</p> <p>Context keys are variables maintained by Amazon Web Services and its services that provide details about the context of an API query request. You can use the <code>Condition</code> element of an IAM policy to evaluate context keys. To get the list of context keys that the policies require for correct simulation, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a>.</p> <p>If the output is long, you can use the <code>MaxItems</code> and <code>Marker</code> parameters to paginate the results.</p> <note> <p>The IAM policy simulator evaluates statements in the identity-based policy and the inputs that you provide during simulation. The policy simulator results can differ from your live Amazon Web Services environment. We recommend that you check your policies against your live Amazon Web Services environment after testing using the policy simulator to confirm that you have the desired results. For more information about using the policy simulator, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html\">Testing IAM policies with the IAM policy simulator </a>in the <i>IAM User Guide</i>.</p> </note>"
     },
     "TagInstanceProfile":{
       "name":"TagInstanceProfile",
@@ -2445,7 +2467,8 @@
       "errors":[
         {"shape":"NoSuchEntityException"},
         {"shape":"LimitExceededException"},
-        {"shape":"ServiceFailureException"}
+        {"shape":"ServiceFailureException"},
+        {"shape":"InvalidInputException"}
       ],
       "documentation":"<p>Changes the status of the specified access key from Active to Inactive, or vice versa. This operation can be used to disable a user's key as part of a key rotation workflow.</p> <p>If the <code>UserName</code> is not specified, the user name is determined implicitly based on the Amazon Web Services access key ID used to sign the request. If a temporary access key is used, then <code>UserName</code> is required. If a long-term key is assigned to the user, then <code>UserName</code> is not required. This operation works for access keys under the Amazon Web Services account. Consequently, you can use this operation to manage Amazon Web Services account root user credentials even if the Amazon Web Services account has no associated users.</p> <p>For information about rotating keys, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html\">Managing keys and certificates</a> in the <i>IAM User Guide</i>.</p>"
     },
@@ -2509,7 +2532,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Changes the password for the specified IAM user. You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. Use <a>ChangePassword</a> to change your own password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <p>For more information about modifying passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Changes the password for the specified IAM user. You can use the CLI, the Amazon Web Services API, or the <b>Users</b> page in the IAM console to change the password for any IAM user. Use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ChangePassword.html\">ChangePassword</a> to change your own password in the <b>My Security Credentials</b> page in the Amazon Web Services Management Console.</p> <p>For more information about modifying passwords, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html\">Managing passwords</a> in the <i>IAM User Guide</i>.</p>"
     },
     "UpdateOpenIDConnectProviderThumbprint":{
       "name":"UpdateOpenIDConnectProviderThumbprint",
@@ -2519,6 +2542,7 @@
       },
       "input":{"shape":"UpdateOpenIDConnectProviderThumbprintRequest"},
       "errors":[
+        {"shape":"ConcurrentModificationException"},
         {"shape":"InvalidInputException"},
         {"shape":"NoSuchEntityException"},
         {"shape":"ServiceFailureException"}
@@ -2559,7 +2583,7 @@
         {"shape":"UnmodifiableEntityException"},
         {"shape":"ServiceFailureException"}
       ],
-      "documentation":"<p>Use <a>UpdateRole</a> instead.</p> <p>Modifies only the description of a role. This operation performs the same function as the <code>Description</code> parameter in the <code>UpdateRole</code> operation.</p>"
+      "documentation":"<p>Use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateRole.html\">UpdateRole</a> instead.</p> <p>Modifies only the description of a role. This operation performs the same function as the <code>Description</code> parameter in the <code>UpdateRole</code> operation.</p>"
     },
     "UpdateSAMLProvider":{
       "name":"UpdateSAMLProvider",
@@ -2576,9 +2600,10 @@
         {"shape":"NoSuchEntityException"},
         {"shape":"InvalidInputException"},
         {"shape":"LimitExceededException"},
-        {"shape":"ServiceFailureException"}
+        {"shape":"ServiceFailureException"},
+        {"shape":"ConcurrentModificationException"}
       ],
-      "documentation":"<p>Updates the metadata document for an existing SAML provider resource object.</p> <note> <p>This operation requires <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4</a>.</p> </note>"
+      "documentation":"<p>Updates the metadata document, SAML encryption settings, and private keys for an existing SAML provider. To rotate private keys, add your new private key and then remove the old key in a separate request.</p>"
     },
     "UpdateSSHPublicKey":{
       "name":"UpdateSSHPublicKey",
@@ -2588,7 +2613,8 @@
       },
       "input":{"shape":"UpdateSSHPublicKeyRequest"},
       "errors":[
-        {"shape":"NoSuchEntityException"}
+        {"shape":"NoSuchEntityException"},
+        {"shape":"InvalidInputException"}
       ],
       "documentation":"<p>Sets the status of an IAM user's SSH public key to active or inactive. SSH public keys that are inactive cannot be used for authentication. This operation can be used to disable a user's SSH public key as part of a key rotation work flow.</p> <p>The SSH public key affected by this operation is used only for authenticating the associated IAM user to an CodeCommit repository. For more information about using SSH keys to authenticate to an CodeCommit repository, see <a href=\"https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html\">Set up CodeCommit for SSH connections</a> in the <i>CodeCommit User Guide</i>.</p>"
     },
@@ -2629,7 +2655,8 @@
       "errors":[
         {"shape":"NoSuchEntityException"},
         {"shape":"LimitExceededException"},
-        {"shape":"ServiceFailureException"}
+        {"shape":"ServiceFailureException"},
+        {"shape":"InvalidInputException"}
       ],
       "documentation":"<p>Changes the status of the specified user signing certificate from active to disabled, or vice versa. This operation can be used to disable an IAM user's signing certificate as part of a certificate rotation work flow.</p> <p>If the <code>UserName</code> field is not specified, the user name is determined implicitly based on the Amazon Web Services access key ID used to sign the request. This operation works for access keys under the Amazon Web Services account. Consequently, you can use this operation to manage Amazon Web Services account root user credentials even if the Amazon Web Services account has no associated users.</p>"
     },
@@ -2756,7 +2783,7 @@
           "documentation":"<p>The number of accounts with authenticated principals (root user, IAM users, and IAM roles) that attempted to access the service in the tracking period.</p>"
         }
       },
-      "documentation":"<p>An object that contains details about when a principal in the reported Organizations entity last attempted to access an Amazon Web Services service. A principal can be an IAM user, an IAM role, or the Amazon Web Services account root user within the reported Organizations entity.</p> <p>This data type is a response element in the <a>GetOrganizationsAccessReport</a> operation.</p>"
+      "documentation":"<p>An object that contains details about when a principal in the reported Organizations entity last attempted to access an Amazon Web Services service. A principal can be an IAM user, an IAM role, or the Amazon Web Services account root user within the reported Organizations entity.</p> <p>This data type is a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOrganizationsAccessReport.html\">GetOrganizationsAccessReport</a> operation.</p>"
     },
     "AccessDetails":{
       "type":"list",
@@ -2792,7 +2819,7 @@
           "documentation":"<p>The date when the access key was created.</p>"
         }
       },
-      "documentation":"<p>Contains information about an Amazon Web Services access key.</p> <p> This data type is used as a response element in the <a>CreateAccessKey</a> and <a>ListAccessKeys</a> operations. </p> <note> <p>The <code>SecretAccessKey</code> value is returned only in response to <a>CreateAccessKey</a>. You can get a secret access key only when you first create an access key; you cannot recover the secret access key later. If you lose a secret access key, you must create a new access key.</p> </note>"
+      "documentation":"<p>Contains information about an Amazon Web Services access key.</p> <p> This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html\">CreateAccessKey</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html\">ListAccessKeys</a> operations. </p> <note> <p>The <code>SecretAccessKey</code> value is returned only in response to <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html\">CreateAccessKey</a>. You can get a secret access key only when you first create an access key; you cannot recover the secret access key later. If you lose a secret access key, you must create a new access key.</p> </note>"
     },
     "AccessKeyLastUsed":{
       "type":"structure",
@@ -2814,7 +2841,7 @@
           "documentation":"<p>The Amazon Web Services Region where this access key was most recently used. The value for this field is \"N/A\" in the following situations:</p> <ul> <li> <p>The user does not have an access key.</p> </li> <li> <p>An access key exists but has not been used since IAM began tracking this information.</p> </li> <li> <p>There is no sign-in data associated with the user.</p> </li> </ul> <p>For more information about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and endpoints</a> in the Amazon Web Services General Reference.</p>"
         }
       },
-      "documentation":"<p>Contains information about the last time an Amazon Web Services access key was used since IAM began tracking this information on April 22, 2015.</p> <p>This data type is used as a response element in the <a>GetAccessKeyLastUsed</a> operation.</p>"
+      "documentation":"<p>Contains information about the last time an Amazon Web Services access key was used since IAM began tracking this information on April 22, 2015.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html\">GetAccessKeyLastUsed</a> operation.</p>"
     },
     "AccessKeyMetadata":{
       "type":"structure",
@@ -2836,12 +2863,11 @@
           "documentation":"<p>The date when the access key was created.</p>"
         }
       },
-      "documentation":"<p>Contains information about an Amazon Web Services access key, without its secret key.</p> <p>This data type is used as a response element in the <a>ListAccessKeys</a> operation.</p>"
+      "documentation":"<p>Contains information about an Amazon Web Services access key, without its secret key.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html\">ListAccessKeys</a> operation.</p>"
     },
     "AccountNotManagementOrDelegatedAdministratorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because the account making the request is not the management account or delegated administrator account for <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#id_root-user-access-management\">centralized root access</a>.</p>",
       "exception":true
     },
@@ -2863,7 +2889,7 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OpenID Connect (OIDC) provider resource to add the client ID to. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OpenID Connect (OIDC) provider resource to add the client ID to. You can get a list of OIDC provider ARNs by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> operation.</p>"
         },
         "ClientID":{
           "shape":"clientIDType",
@@ -2983,7 +3009,7 @@
         },
         "PolicyArn":{"shape":"arnType"}
       },
-      "documentation":"<p>Contains information about an attached policy.</p> <p>An attached policy is a managed policy that has been attached to a user, group, or role. This data type is used as a response element in the <a>ListAttachedGroupPolicies</a>, <a>ListAttachedRolePolicies</a>, <a>ListAttachedUserPolicies</a>, and <a>GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about an attached policy.</p> <p>An attached policy is a managed policy that has been attached to a user, group, or role. This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedGroupPolicies.html\">ListAttachedGroupPolicies</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html\">ListAttachedRolePolicies</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedUserPolicies.html\">ListAttachedUserPolicies</a>, and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "BootstrapDatum":{
       "type":"blob",
@@ -2991,8 +3017,7 @@
     },
     "CallerIsNotManagementAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because the account making the request is not the management account for the organization.</p>",
       "exception":true
     },
@@ -3061,7 +3086,7 @@
           "documentation":"<p>The data type of the value (or values) specified in the <code>ContextKeyValues</code> parameter.</p>"
         }
       },
-      "documentation":"<p>Contains information about a condition context key. It includes the name of the key and specifies the value (or values, if the context key supports multiple values) to use in the simulation. This information is used when evaluating the <code>Condition</code> elements of the input policies.</p> <p>This data type is used as an input parameter to <a>SimulateCustomPolicy</a> and <a>SimulatePrincipalPolicy</a>.</p>"
+      "documentation":"<p>Contains information about a condition context key. It includes the name of the key and specifies the value (or values, if the context key supports multiple values) to use in the simulation. This information is used when evaluating the <code>Condition</code> elements of the input policies.</p> <p>This data type is used as an input parameter to <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html\">SimulatePrincipalPolicy</a>.</p>"
     },
     "ContextEntryListType":{
       "type":"list",
@@ -3116,7 +3141,7 @@
           "documentation":"<p>A structure with details about the access key.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateAccessKey</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html\">CreateAccessKey</a> request. </p>"
     },
     "CreateAccountAliasRequest":{
       "type":"structure",
@@ -3128,6 +3153,67 @@
         }
       }
     },
+    "CreateDelegationRequestRequest":{
+      "type":"structure",
+      "required":[
+        "Description",
+        "Permissions",
+        "RequestorWorkflowId",
+        "NotificationChannel",
+        "SessionDuration"
+      ],
+      "members":{
+        "OwnerAccountId":{
+          "shape":"accountIdType",
+          "documentation":"<p/>"
+        },
+        "Description":{
+          "shape":"delegationRequestDescriptionType",
+          "documentation":"<p/>"
+        },
+        "Permissions":{
+          "shape":"DelegationPermission",
+          "documentation":"<p/>"
+        },
+        "RequestMessage":{
+          "shape":"requestMessageType",
+          "documentation":"<p/>"
+        },
+        "RequestorWorkflowId":{
+          "shape":"requestorWorkflowIdType",
+          "documentation":"<p/>"
+        },
+        "RedirectUrl":{
+          "shape":"redirectUrlType",
+          "documentation":"<p/>"
+        },
+        "NotificationChannel":{
+          "shape":"notificationChannelType",
+          "documentation":"<p/>"
+        },
+        "SessionDuration":{
+          "shape":"sessionDurationType",
+          "documentation":"<p/>"
+        },
+        "OnlySendByOwner":{
+          "shape":"booleanType",
+          "documentation":"<p/>"
+        }
+      }
+    },
+    "CreateDelegationRequestResponse":{
+      "type":"structure",
+      "members":{
+        "ConsoleDeepLink":{
+          "shape":"consoleDeepLinkType",
+          "documentation":"<p/>"
+        },
+        "DelegationRequestId":{
+          "shape":"delegationRequestIdType",
+          "documentation":"<p/>"
+        }
+      }
+    },
     "CreateGroupRequest":{
       "type":"structure",
       "required":["GroupName"],
@@ -3151,7 +3237,7 @@
           "documentation":"<p>A structure containing details about the new group.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateGroup</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateGroup.html\">CreateGroup</a> request. </p>"
     },
     "CreateInstanceProfileRequest":{
       "type":"structure",
@@ -3180,7 +3266,7 @@
           "documentation":"<p>A structure containing details about the new instance profile.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateInstanceProfile</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html\">CreateInstanceProfile</a> request. </p>"
     },
     "CreateLoginProfileRequest":{
       "type":"structure",
@@ -3208,7 +3294,7 @@
           "documentation":"<p>A structure containing the user name and password create date.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateLoginProfile</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateLoginProfile.html\">CreateLoginProfile</a> request. </p>"
     },
     "CreateOpenIDConnectProviderRequest":{
       "type":"structure",
@@ -3237,14 +3323,14 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the new IAM OpenID Connect provider that is created. For more information, see <a>OpenIDConnectProviderListEntry</a>. </p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the new IAM OpenID Connect provider that is created. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_OpenIDConnectProviderListEntry.html\">OpenIDConnectProviderListEntry</a>. </p>"
         },
         "Tags":{
           "shape":"tagListType",
           "documentation":"<p>A list of tags that are attached to the new IAM OIDC provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateOpenIDConnectProvider</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a> request. </p>"
     },
     "CreatePolicyRequest":{
       "type":"structure",
@@ -3283,7 +3369,7 @@
           "documentation":"<p>A structure containing details about the new policy.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreatePolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html\">CreatePolicy</a> request. </p>"
     },
     "CreatePolicyVersionRequest":{
       "type":"structure",
@@ -3314,7 +3400,7 @@
           "documentation":"<p>A structure containing details about the new policy version.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreatePolicyVersion</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html\">CreatePolicyVersion</a> request. </p>"
     },
     "CreateRoleRequest":{
       "type":"structure",
@@ -3362,7 +3448,7 @@
           "documentation":"<p>A structure containing details about the new role.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateRole</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html\">CreateRole</a> request. </p>"
     },
     "CreateSAMLProviderRequest":{
       "type":"structure",
@@ -3382,6 +3468,14 @@
         "Tags":{
           "shape":"tagListType",
           "documentation":"<p>A list of tags that you want to attach to the new IAM SAML provider. Each tag consists of a key name and an associated value. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p> <note> <p>If any one of the tags is invalid or if you exceed the allowed maximum number of tags, then the entire request fails and the resource is not created.</p> </note>"
+        },
+        "AssertionEncryptionMode":{
+          "shape":"assertionEncryptionModeType",
+          "documentation":"<p>Specifies the encryption setting for the SAML provider.</p>"
+        },
+        "AddPrivateKey":{
+          "shape":"privateKeyType",
+          "documentation":"<p>The private key generated from your external identity provider. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions.</p>"
         }
       }
     },
@@ -3397,7 +3491,7 @@
           "documentation":"<p>A list of tags that are attached to the new IAM SAML provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateSAMLProvider</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateSAMLProvider.html\">CreateSAMLProvider</a> request. </p>"
     },
     "CreateServiceLinkedRoleRequest":{
       "type":"structure",
@@ -3422,7 +3516,7 @@
       "members":{
         "Role":{
           "shape":"Role",
-          "documentation":"<p>A <a>Role</a> object that contains details about the newly created role.</p>"
+          "documentation":"<p>A <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_Role.html\">Role</a> object that contains details about the newly created role.</p>"
         }
       }
     },
@@ -3440,6 +3534,10 @@
         "ServiceName":{
           "shape":"serviceName",
           "documentation":"<p>The name of the Amazon Web Services service that is to be associated with the credentials. The service you specify here is the only service that can be accessed using these credentials.</p>"
+        },
+        "CredentialAgeDays":{
+          "shape":"credentialAgeDays",
+          "documentation":"<p>The number of days until the service specific credential expires. This field is only valid for Bedrock API keys and must be a positive integer. When not specified, the credential will not expire.</p>"
         }
       }
     },
@@ -3448,7 +3546,7 @@
       "members":{
         "ServiceSpecificCredential":{
           "shape":"ServiceSpecificCredential",
-          "documentation":"<p>A structure that contains information about the newly created service-specific credential.</p> <important> <p>This is the only time that the password for this credential set is available. It cannot be recovered later. Instead, you must reset the password with <a>ResetServiceSpecificCredential</a>.</p> </important>"
+          "documentation":"<p>A structure that contains information about the newly created service-specific credential.</p> <important> <p>This is the only time that the password for this credential set is available. It cannot be recovered later. Instead, you must reset the password with <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html\">ResetServiceSpecificCredential</a>.</p> </important>"
         }
       }
     },
@@ -3482,7 +3580,7 @@
           "documentation":"<p>A structure with details about the new IAM user.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateUser</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html\">CreateUser</a> request. </p>"
     },
     "CreateVirtualMFADeviceRequest":{
       "type":"structure",
@@ -3511,14 +3609,14 @@
           "documentation":"<p>A structure containing details about the new virtual MFA device.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>CreateVirtualMFADevice</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html\">CreateVirtualMFADevice</a> request. </p>"
     },
     "CredentialReportExpiredException":{
       "type":"structure",
       "members":{
         "message":{"shape":"credentialReportExpiredExceptionMessage"}
       },
-      "documentation":"<p>The request was rejected because the most recent credential report has expired. To generate a new credential report, use <a>GenerateCredentialReport</a>. For more information about credential report expiration, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html\">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>",
+      "documentation":"<p>The request was rejected because the most recent credential report has expired. To generate a new credential report, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateCredentialReport.html\">GenerateCredentialReport</a>. For more information about credential report expiration, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html\">Getting credential reports</a> in the <i>IAM User Guide</i>.</p>",
       "error":{
         "code":"ReportExpired",
         "httpStatusCode":410,
@@ -3531,7 +3629,7 @@
       "members":{
         "message":{"shape":"credentialReportNotPresentExceptionMessage"}
       },
-      "documentation":"<p>The request was rejected because the credential report does not exist. To generate a credential report, use <a>GenerateCredentialReport</a>.</p>",
+      "documentation":"<p>The request was rejected because the credential report does not exist. To generate a credential report, use <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateCredentialReport.html\">GenerateCredentialReport</a>.</p>",
       "error":{
         "code":"ReportNotPresent",
         "httpStatusCode":410,
@@ -3566,6 +3664,17 @@
         }
       }
     },
+    "DelegationPermission":{
+      "type":"structure",
+      "members":{
+        "PolicyTemplateArn":{"shape":"arnType"},
+        "Parameters":{
+          "shape":"policyParameterListType",
+          "documentation":"<p/>"
+        }
+      },
+      "documentation":"<p/>"
+    },
     "DeleteAccessKeyRequest":{
       "type":"structure",
       "required":["AccessKeyId"],
@@ -3655,7 +3764,7 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OpenID Connect provider resource object to delete. You can get a list of OpenID Connect provider resource ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OpenID Connect provider resource object to delete. You can get a list of OpenID Connect provider resource ARNs by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> operation.</p>"
         }
       }
     },
@@ -3790,7 +3899,7 @@
         },
         "ServiceSpecificCredentialId":{
           "shape":"serviceSpecificCredentialId",
-          "documentation":"<p>The unique identifier of the service-specific credential. You can get this value by calling <a>ListServiceSpecificCredentials</a>.</p> <p>This parameter allows (through its <a href=\"http://wikipedia.org/wiki/regex\">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>"
+          "documentation":"<p>The unique identifier of the service-specific credential. You can get this value by calling <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServiceSpecificCredentials.html\">ListServiceSpecificCredentials</a>.</p> <p>This parameter allows (through its <a href=\"http://wikipedia.org/wiki/regex\">regex pattern</a>) a string of characters that can consist of any upper or lowercased letter or digit.</p>"
         }
       }
     },
@@ -3867,7 +3976,7 @@
           "documentation":"<p>A list of objects that contains details about the service-linked role deletion failure, if that information is returned by the service. If the service-linked role has active sessions or if any resources that were used by the role have not been deleted from the linked service, the role can't be deleted. This parameter includes a list of the resources that are associated with the role and the Region in which the resources are being used.</p>"
         }
       },
-      "documentation":"<p>The reason that the service-linked role deletion failed.</p> <p>This data type is used as a response element in the <a>GetServiceLinkedRoleDeletionStatus</a> operation.</p>"
+      "documentation":"<p>The reason that the service-linked role deletion failed.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html\">GetServiceLinkedRoleDeletionStatus</a> operation.</p>"
     },
     "DeletionTaskIdType":{
       "type":"string",
@@ -3936,8 +4045,7 @@
     },
     "DisableOrganizationsRootCredentialsManagementRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableOrganizationsRootCredentialsManagementResponse":{
       "type":"structure",
@@ -3954,8 +4062,7 @@
     },
     "DisableOrganizationsRootSessionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableOrganizationsRootSessionsResponse":{
       "type":"structure",
@@ -4025,8 +4132,7 @@
     },
     "EnableOrganizationsRootCredentialsManagementRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableOrganizationsRootCredentialsManagementResponse":{
       "type":"structure",
@@ -4043,8 +4149,7 @@
     },
     "EnableOrganizationsRootSessionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableOrganizationsRootSessionsResponse":{
       "type":"structure",
@@ -4085,7 +4190,7 @@
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the authenticated entity last attempted to access Amazon Web Services. Amazon Web Services does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period\">tracking period</a>.</p>"
         }
       },
-      "documentation":"<p>An object that contains details about when the IAM entities (users or roles) were last used in an attempt to access the specified Amazon Web Services service.</p> <p>This data type is a response element in the <a>GetServiceLastAccessedDetailsWithEntities</a> operation.</p>"
+      "documentation":"<p>An object that contains details about when the IAM entities (users or roles) were last used in an attempt to access the specified Amazon Web Services service.</p> <p>This data type is a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html\">GetServiceLastAccessedDetailsWithEntities</a> operation.</p>"
     },
     "EntityInfo":{
       "type":"structure",
@@ -4114,7 +4219,7 @@
           "documentation":"<p>The path to the entity (user or role). For more information about paths, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">IAM identifiers</a> in the <i>IAM User Guide</i>. </p>"
         }
       },
-      "documentation":"<p>Contains details about the specified entity (user or role).</p> <p>This data type is an element of the <a>EntityDetails</a> object.</p>"
+      "documentation":"<p>Contains details about the specified entity (user or role).</p> <p>This data type is an element of the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_EntityDetails.html\">EntityDetails</a> object.</p>"
     },
     "EntityTemporarilyUnmodifiableException":{
       "type":"structure",
@@ -4155,7 +4260,7 @@
           "documentation":"<p>The error code associated with the operation failure.</p>"
         }
       },
-      "documentation":"<p>Contains information about the reason that the operation failed.</p> <p>This data type is used as a response element in the <a>GetOrganizationsAccessReport</a>, <a>GetServiceLastAccessedDetails</a>, and <a>GetServiceLastAccessedDetailsWithEntities</a> operations.</p>"
+      "documentation":"<p>Contains information about the reason that the operation failed.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOrganizationsAccessReport.html\">GetOrganizationsAccessReport</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html\">GetServiceLastAccessedDetails</a>, and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html\">GetServiceLastAccessedDetailsWithEntities</a> operations.</p>"
     },
     "EvalDecisionDetailsType":{
       "type":"map",
@@ -4192,7 +4297,7 @@
         },
         "MissingContextValues":{
           "shape":"ContextKeyNamesResultListType",
-          "documentation":"<p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when the resource in a simulation is \"*\", either explicitly, or when the <code>ResourceArns</code> parameter blank. If you include a list of resources, then any missing context values are instead included under the <code>ResourceSpecificResults</code> section. To discover the context keys used by a set of policies, you can call <a>GetContextKeysForCustomPolicy</a> or <a>GetContextKeysForPrincipalPolicy</a>.</p>"
+          "documentation":"<p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when the resource in a simulation is \"*\", either explicitly, or when the <code>ResourceArns</code> parameter blank. If you include a list of resources, then any missing context values are instead included under the <code>ResourceSpecificResults</code> section. To discover the context keys used by a set of policies, you can call <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a>.</p>"
         },
         "OrganizationsDecisionDetail":{
           "shape":"OrganizationsDecisionDetail",
@@ -4211,7 +4316,7 @@
           "documentation":"<p>The individual results of the simulation of the API operation specified in EvalActionName on each resource.</p>"
         }
       },
-      "documentation":"<p>Contains the results of a simulation.</p> <p>This data type is used by the return parameter of <code> <a>SimulateCustomPolicy</a> </code> and <code> <a>SimulatePrincipalPolicy</a> </code>.</p>"
+      "documentation":"<p>Contains the results of a simulation.</p> <p>This data type is used by the return parameter of <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a> </code> and <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html\">SimulatePrincipalPolicy</a> </code>.</p>"
     },
     "EvaluationResultsListType":{
       "type":"list",
@@ -4240,7 +4345,7 @@
           "documentation":"<p>Information about the credential report.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GenerateCredentialReport</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateCredentialReport.html\">GenerateCredentialReport</a> request. </p>"
     },
     "GenerateOrganizationsAccessReportRequest":{
       "type":"structure",
@@ -4261,7 +4366,7 @@
       "members":{
         "JobId":{
           "shape":"jobIDType",
-          "documentation":"<p>The job identifier that you can use in the <a>GetOrganizationsAccessReport</a> operation.</p>"
+          "documentation":"<p>The job identifier that you can use in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOrganizationsAccessReport.html\">GetOrganizationsAccessReport</a> operation.</p>"
         }
       }
     },
@@ -4284,7 +4389,7 @@
       "members":{
         "JobId":{
           "shape":"jobIDType",
-          "documentation":"<p>The <code>JobId</code> that you can use in the <a>GetServiceLastAccessedDetails</a> or <a>GetServiceLastAccessedDetailsWithEntities</a> operations. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>"
+          "documentation":"<p>The <code>JobId</code> that you can use in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html\">GetServiceLastAccessedDetails</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetailsWithEntities.html\">GetServiceLastAccessedDetailsWithEntities</a> operations. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>"
         }
       }
     },
@@ -4310,7 +4415,7 @@
           "documentation":"<p>Contains information about the last time the access key was used.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetAccessKeyLastUsed</a> request. It is also returned as a member of the <a>AccessKeyMetaData</a> structure returned by the <a>ListAccessKeys</a> action.</p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html\">GetAccessKeyLastUsed</a> request. It is also returned as a member of the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_AccessKeyMetaData.html\">AccessKeyMetaData</a> structure returned by the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html\">ListAccessKeys</a> action.</p>"
     },
     "GetAccountAuthorizationDetailsRequest":{
       "type":"structure",
@@ -4357,7 +4462,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetAccountAuthorizationDetails</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> request. </p>"
     },
     "GetAccountPasswordPolicyResponse":{
       "type":"structure",
@@ -4368,7 +4473,7 @@
           "documentation":"<p>A structure that contains details about the account's password policy.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetAccountPasswordPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountPasswordPolicy.html\">GetAccountPasswordPolicy</a> request. </p>"
     },
     "GetAccountSummaryResponse":{
       "type":"structure",
@@ -4378,7 +4483,7 @@
           "documentation":"<p>A set of key–value pairs containing information about IAM entity usage and IAM quotas.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetAccountSummary</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountSummary.html\">GetAccountSummary</a> request. </p>"
     },
     "GetContextKeysForCustomPolicyRequest":{
       "type":"structure",
@@ -4398,7 +4503,7 @@
           "documentation":"<p>The list of context keys that are referenced in the input policies.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetContextKeysForPrincipalPolicy</a> or <a>GetContextKeysForCustomPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a> request. </p>"
     },
     "GetContextKeysForPrincipalPolicyRequest":{
       "type":"structure",
@@ -4430,7 +4535,7 @@
           "documentation":"<p> The date and time when the credential report was created, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetCredentialReport</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetCredentialReport.html\">GetCredentialReport</a> request. </p>"
     },
     "GetGroupPolicyRequest":{
       "type":"structure",
@@ -4470,7 +4575,7 @@
           "documentation":"<p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using CloudFormation templates can be formatted in YAML. CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetGroupPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroupPolicy.html\">GetGroupPolicy</a> request. </p>"
     },
     "GetGroupRequest":{
       "type":"structure",
@@ -4514,7 +4619,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetGroup</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroup.html\">GetGroup</a> request. </p>"
     },
     "GetInstanceProfileRequest":{
       "type":"structure",
@@ -4535,7 +4640,7 @@
           "documentation":"<p>A structure containing details about the instance profile.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetInstanceProfile</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html\">GetInstanceProfile</a> request. </p>"
     },
     "GetLoginProfileRequest":{
       "type":"structure",
@@ -4555,7 +4660,7 @@
           "documentation":"<p>A structure containing the user name and the profile creation date for the user.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetLoginProfile</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetLoginProfile.html\">GetLoginProfile</a> request. </p>"
     },
     "GetMFADeviceRequest":{
       "type":"structure",
@@ -4599,7 +4704,7 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the OIDC provider resource object in IAM to get information for. You can get a list of OIDC provider resource ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the OIDC provider resource object in IAM to get information for. You can get a list of OIDC provider resource ARNs by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         }
       }
     },
@@ -4608,15 +4713,15 @@
       "members":{
         "Url":{
           "shape":"OpenIDConnectProviderUrlType",
-          "documentation":"<p>The URL that the IAM OIDC provider resource object is associated with. For more information, see <a>CreateOpenIDConnectProvider</a>.</p>"
+          "documentation":"<p>The URL that the IAM OIDC provider resource object is associated with. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a>.</p>"
         },
         "ClientIDList":{
           "shape":"clientIDListType",
-          "documentation":"<p>A list of client IDs (also known as audiences) that are associated with the specified IAM OIDC provider resource object. For more information, see <a>CreateOpenIDConnectProvider</a>.</p>"
+          "documentation":"<p>A list of client IDs (also known as audiences) that are associated with the specified IAM OIDC provider resource object. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a>.</p>"
         },
         "ThumbprintList":{
           "shape":"thumbprintListType",
-          "documentation":"<p>A list of certificate thumbprints that are associated with the specified IAM OIDC provider resource object. For more information, see <a>CreateOpenIDConnectProvider</a>. </p>"
+          "documentation":"<p>A list of certificate thumbprints that are associated with the specified IAM OIDC provider resource object. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a>. </p>"
         },
         "CreateDate":{
           "shape":"dateType",
@@ -4627,7 +4732,7 @@
           "documentation":"<p>A list of tags that are attached to the specified IAM OIDC provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetOpenIDConnectProvider</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetOpenIDConnectProvider.html\">GetOpenIDConnectProvider</a> request. </p>"
     },
     "GetOrganizationsAccessReportRequest":{
       "type":"structure",
@@ -4635,7 +4740,7 @@
       "members":{
         "JobId":{
           "shape":"jobIDType",
-          "documentation":"<p>The identifier of the request generated by the <a>GenerateOrganizationsAccessReport</a> operation.</p>"
+          "documentation":"<p>The identifier of the request generated by the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateOrganizationsAccessReport.html\">GenerateOrganizationsAccessReport</a> operation.</p>"
         },
         "MaxItems":{
           "shape":"maxItemsType",
@@ -4711,7 +4816,7 @@
           "documentation":"<p>A structure containing details about the policy.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> request. </p>"
     },
     "GetPolicyVersionRequest":{
       "type":"structure",
@@ -4738,7 +4843,7 @@
           "documentation":"<p>A structure containing details about the policy version.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetPolicyVersion</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a> request. </p>"
     },
     "GetRolePolicyRequest":{
       "type":"structure",
@@ -4778,7 +4883,7 @@
           "documentation":"<p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using CloudFormation templates can be formatted in YAML. CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetRolePolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html\">GetRolePolicy</a> request. </p>"
     },
     "GetRoleRequest":{
       "type":"structure",
@@ -4799,7 +4904,7 @@
           "documentation":"<p>A structure containing details about the IAM role.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetRole</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html\">GetRole</a> request. </p>"
     },
     "GetSAMLProviderRequest":{
       "type":"structure",
@@ -4814,6 +4919,10 @@
     "GetSAMLProviderResponse":{
       "type":"structure",
       "members":{
+        "SAMLProviderUUID":{
+          "shape":"privateKeyIdType",
+          "documentation":"<p>The unique identifier assigned to the SAML provider.</p>"
+        },
         "SAMLMetadataDocument":{
           "shape":"SAMLMetadataDocumentType",
           "documentation":"<p>The XML metadata document that includes information about an identity provider.</p>"
@@ -4829,9 +4938,17 @@
         "Tags":{
           "shape":"tagListType",
           "documentation":"<p>A list of tags that are attached to the specified IAM SAML provider. The returned list of tags is sorted by tag key. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
+        },
+        "AssertionEncryptionMode":{
+          "shape":"assertionEncryptionModeType",
+          "documentation":"<p>Specifies the encryption setting for the SAML provider.</p>"
+        },
+        "PrivateKeyList":{
+          "shape":"privateKeyList",
+          "documentation":"<p>The private key metadata for the SAML provider.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetSAMLProvider</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSAMLProvider.html\">GetSAMLProvider</a> request. </p>"
     },
     "GetSSHPublicKeyRequest":{
       "type":"structure",
@@ -4863,7 +4980,7 @@
           "documentation":"<p>A structure containing details about the SSH public key.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetSSHPublicKey</a> request.</p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSSHPublicKey.html\">GetSSHPublicKey</a> request.</p>"
     },
     "GetServerCertificateRequest":{
       "type":"structure",
@@ -4884,7 +5001,7 @@
           "documentation":"<p>A structure containing details about the server certificate.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetServerCertificate</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html\">GetServerCertificate</a> request. </p>"
     },
     "GetServiceLastAccessedDetailsRequest":{
       "type":"structure",
@@ -4892,7 +5009,7 @@
       "members":{
         "JobId":{
           "shape":"jobIDType",
-          "documentation":"<p>The ID of the request generated by the <a>GenerateServiceLastAccessedDetails</a> operation. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>"
+          "documentation":"<p>The ID of the request generated by the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateServiceLastAccessedDetails.html\">GenerateServiceLastAccessedDetails</a> operation. The <code>JobId</code> returned by <code>GenerateServiceLastAccessedDetail</code> must be used by the same role within a session, or by the same user when used to call <code>GetServiceLastAccessedDetail</code>.</p>"
         },
         "MaxItems":{
           "shape":"maxItemsType",
@@ -5017,7 +5134,7 @@
       "members":{
         "DeletionTaskId":{
           "shape":"DeletionTaskIdType",
-          "documentation":"<p>The deletion task identifier. This identifier is returned by the <a>DeleteServiceLinkedRole</a> operation in the format <code>task/aws-service-role/&lt;service-principal-name&gt;/&lt;role-name&gt;/&lt;task-uuid&gt;</code>.</p>"
+          "documentation":"<p>The deletion task identifier. This identifier is returned by the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceLinkedRole.html\">DeleteServiceLinkedRole</a> operation in the format <code>task/aws-service-role/&lt;service-principal-name&gt;/&lt;role-name&gt;/&lt;task-uuid&gt;</code>.</p>"
         }
       }
     },
@@ -5073,7 +5190,7 @@
           "documentation":"<p>The policy document.</p> <p>IAM stores policies in JSON format. However, resources that were created using CloudFormation templates can be formatted in YAML. CloudFormation always converts a YAML policy to JSON format before submitting it to IAM.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetUserPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUserPolicy.html\">GetUserPolicy</a> request. </p>"
     },
     "GetUserRequest":{
       "type":"structure",
@@ -5093,7 +5210,7 @@
           "documentation":"<p>A structure containing details about the IAM user.</p> <important> <p>Due to a service issue, password last used data does not include password use from May 3, 2018 22:50 PDT to May 23, 2018 14:08 PDT. This affects <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_finding-unused.html\">last sign-in</a> dates shown in the IAM console and password last used dates in the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html\">IAM credential report</a>, and returned by this operation. If users signed in during the affected time, the password last used date that is returned is the date the user last signed in before May 3, 2018. For users that signed in after May 23, 2018 14:08 PDT, the returned password last used date is accurate.</p> <p>You can use password last used information to identify unused credentials for deletion. For example, you might delete users who did not sign in to Amazon Web Services in the last 90 days. In cases like this, we recommend that you adjust your evaluation window to include dates after May 23, 2018. Alternatively, if your users use access keys to access Amazon Web Services programmatically you can refer to access key last used information because it is accurate for all dates. </p> </important>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>GetUser</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html\">GetUser</a> request. </p>"
     },
     "Group":{
       "type":"structure",
@@ -5126,7 +5243,7 @@
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the group was created.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM group entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateGroup</a> </p> </li> <li> <p> <a>GetGroup</a> </p> </li> <li> <p> <a>ListGroups</a> </p> </li> </ul>"
+      "documentation":"<p>Contains information about an IAM group entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateGroup.html\">CreateGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroup.html\">GetGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroups.html\">ListGroups</a> </p> </li> </ul>"
     },
     "GroupDetail":{
       "type":"structure",
@@ -5157,7 +5274,7 @@
           "documentation":"<p>A list of the managed policies attached to the group.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM group, including all of the group's policies.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>"
+      "documentation":"<p>Contains information about an IAM group, including all of the group's policies.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operation.</p>"
     },
     "InstanceProfile":{
       "type":"structure",
@@ -5199,7 +5316,7 @@
           "documentation":"<p>A list of tags that are attached to the instance profile. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about an instance profile.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateInstanceProfile</a> </p> </li> <li> <p> <a>GetInstanceProfile</a> </p> </li> <li> <p> <a>ListInstanceProfiles</a> </p> </li> <li> <p> <a>ListInstanceProfilesForRole</a> </p> </li> </ul>"
+      "documentation":"<p>Contains information about an instance profile.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateInstanceProfile.html\">CreateInstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetInstanceProfile.html\">GetInstanceProfile</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html\">ListInstanceProfiles</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfilesForRole.html\">ListInstanceProfilesForRole</a> </p> </li> </ul>"
     },
     "InvalidAuthenticationCodeException":{
       "type":"structure",
@@ -5327,7 +5444,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListAccessKeys</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html\">ListAccessKeys</a> request. </p>"
     },
     "ListAccountAliasesRequest":{
       "type":"structure",
@@ -5359,7 +5476,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListAccountAliases</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccountAliases.html\">ListAccountAliases</a> request. </p>"
     },
     "ListAttachedGroupPoliciesRequest":{
       "type":"structure",
@@ -5399,7 +5516,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListAttachedGroupPolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedGroupPolicies.html\">ListAttachedGroupPolicies</a> request. </p>"
     },
     "ListAttachedRolePoliciesRequest":{
       "type":"structure",
@@ -5439,7 +5556,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListAttachedRolePolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html\">ListAttachedRolePolicies</a> request. </p>"
     },
     "ListAttachedUserPoliciesRequest":{
       "type":"structure",
@@ -5479,7 +5596,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListAttachedUserPolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedUserPolicies.html\">ListAttachedUserPolicies</a> request. </p>"
     },
     "ListEntitiesForPolicyRequest":{
       "type":"structure",
@@ -5535,7 +5652,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListEntitiesForPolicy</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a> request. </p>"
     },
     "ListGroupPoliciesRequest":{
       "type":"structure",
@@ -5572,7 +5689,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListGroupPolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroupPolicies.html\">ListGroupPolicies</a> request. </p>"
     },
     "ListGroupsForUserRequest":{
       "type":"structure",
@@ -5609,7 +5726,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListGroupsForUser</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroupsForUser.html\">ListGroupsForUser</a> request. </p>"
     },
     "ListGroupsRequest":{
       "type":"structure",
@@ -5645,7 +5762,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListGroups</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroups.html\">ListGroups</a> request. </p>"
     },
     "ListInstanceProfileTagsRequest":{
       "type":"structure",
@@ -5718,7 +5835,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListInstanceProfilesForRole</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfilesForRole.html\">ListInstanceProfilesForRole</a> request. </p>"
     },
     "ListInstanceProfilesRequest":{
       "type":"structure",
@@ -5754,7 +5871,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListInstanceProfiles</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListInstanceProfiles.html\">ListInstanceProfiles</a> request. </p>"
     },
     "ListMFADeviceTagsRequest":{
       "type":"structure",
@@ -5826,7 +5943,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListMFADevices</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADevices.html\">ListMFADevices</a> request. </p>"
     },
     "ListOpenIDConnectProviderTagsRequest":{
       "type":"structure",
@@ -5866,8 +5983,7 @@
     },
     "ListOpenIDConnectProvidersRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListOpenIDConnectProvidersResponse":{
       "type":"structure",
@@ -5877,12 +5993,11 @@
           "documentation":"<p>The list of IAM OIDC provider resource objects defined in the Amazon Web Services account.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListOpenIDConnectProviders</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> request. </p>"
     },
     "ListOrganizationsFeaturesRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListOrganizationsFeaturesResponse":{
       "type":"structure",
@@ -5909,7 +6024,7 @@
           "documentation":"<p>The <code>PoliciesGrantingServiceAccess</code> object that contains details about the policy.</p>"
         }
       },
-      "documentation":"<p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is used as a response element in the <a>ListPoliciesGrantingServiceAccess</a> operation.</p>"
+      "documentation":"<p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPoliciesGrantingServiceAccess.html\">ListPoliciesGrantingServiceAccess</a> operation.</p>"
     },
     "ListPoliciesGrantingServiceAccessRequest":{
       "type":"structure",
@@ -5995,7 +6110,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListPolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html\">ListPolicies</a> request. </p>"
     },
     "ListPolicyTagsRequest":{
       "type":"structure",
@@ -6067,7 +6182,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListPolicyVersions</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a> request. </p>"
     },
     "ListRolePoliciesRequest":{
       "type":"structure",
@@ -6104,7 +6219,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListRolePolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRolePolicies.html\">ListRolePolicies</a> request. </p>"
     },
     "ListRoleTagsRequest":{
       "type":"structure",
@@ -6176,7 +6291,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListRoles</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html\">ListRoles</a> request. </p>"
     },
     "ListSAMLProviderTagsRequest":{
       "type":"structure",
@@ -6216,8 +6331,7 @@
     },
     "ListSAMLProvidersRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListSAMLProvidersResponse":{
       "type":"structure",
@@ -6227,7 +6341,7 @@
           "documentation":"<p>The list of SAML provider resource objects defined in IAM for this Amazon Web Services account.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListSAMLProviders</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSAMLProviders.html\">ListSAMLProviders</a> request. </p>"
     },
     "ListSSHPublicKeysRequest":{
       "type":"structure",
@@ -6262,7 +6376,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListSSHPublicKeys</a> request.</p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSSHPublicKeys.html\">ListSSHPublicKeys</a> request.</p>"
     },
     "ListServerCertificateTagsRequest":{
       "type":"structure",
@@ -6334,7 +6448,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListServerCertificates</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html\">ListServerCertificates</a> request. </p>"
     },
     "ListServiceSpecificCredentialsRequest":{
       "type":"structure",
@@ -6346,6 +6460,18 @@
         "ServiceName":{
           "shape":"serviceName",
           "documentation":"<p>Filters the returned results to only those for the specified Amazon Web Services service. If not specified, then Amazon Web Services returns service-specific credentials for all services.</p>"
+        },
+        "AllUsers":{
+          "shape":"allUsers",
+          "documentation":"<p>A flag indicating whether to list service specific credentials for all users. This parameter cannot be specified together with UserName. When true, returns all credentials associated with the specified service.</p>"
+        },
+        "Marker":{
+          "shape":"markerType",
+          "documentation":"<p>Use this parameter only when paginating results and only after you receive a response indicating that the results are truncated. Set it to the value of the Marker from the response that you received to indicate where the next call should start.</p>"
+        },
+        "MaxItems":{
+          "shape":"maxItemsType",
+          "documentation":"<p>Use this only when paginating results to indicate the maximum number of items you want in the response. If additional items exist beyond the maximum you specify, the IsTruncated response element is true.</p>"
         }
       }
     },
@@ -6355,6 +6481,14 @@
         "ServiceSpecificCredentials":{
           "shape":"ServiceSpecificCredentialsListType",
           "documentation":"<p>A list of structures that each contain details about a service-specific credential.</p>"
+        },
+        "Marker":{
+          "shape":"responseMarkerType",
+          "documentation":"<p>When IsTruncated is true, this element is present and contains the value to use for the Marker parameter in a subsequent pagination request.</p>"
+        },
+        "IsTruncated":{
+          "shape":"booleanType",
+          "documentation":"<p>A flag that indicates whether there are more items to return. If your results were truncated, you can make a subsequent pagination request using the Marker request parameter to retrieve more items.</p>"
         }
       }
     },
@@ -6392,7 +6526,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListSigningCertificates</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSigningCertificates.html\">ListSigningCertificates</a> request. </p>"
     },
     "ListUserPoliciesRequest":{
       "type":"structure",
@@ -6429,7 +6563,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListUserPolicies</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUserPolicies.html\">ListUserPolicies</a> request. </p>"
     },
     "ListUserTagsRequest":{
       "type":"structure",
@@ -6501,7 +6635,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListUsers</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html\">ListUsers</a> request. </p>"
     },
     "ListVirtualMFADevicesRequest":{
       "type":"structure",
@@ -6537,7 +6671,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>ListVirtualMFADevices</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html\">ListVirtualMFADevices</a> request. </p>"
     },
     "LoginProfile":{
       "type":"structure",
@@ -6559,7 +6693,7 @@
           "documentation":"<p>Specifies whether the user is required to set a new password on next sign-in.</p>"
         }
       },
-      "documentation":"<p>Contains the user name and password create date for a user.</p> <p> This data type is used as a response element in the <a>CreateLoginProfile</a> and <a>GetLoginProfile</a> operations. </p>"
+      "documentation":"<p>Contains the user name and password create date for a user.</p> <p> This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateLoginProfile.html\">CreateLoginProfile</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetLoginProfile.html\">GetLoginProfile</a> operations. </p>"
     },
     "MFADevice":{
       "type":"structure",
@@ -6582,7 +6716,7 @@
           "documentation":"<p>The date when the MFA device was enabled for the user.</p>"
         }
       },
-      "documentation":"<p>Contains information about an MFA device.</p> <p>This data type is used as a response element in the <a>ListMFADevices</a> operation.</p>"
+      "documentation":"<p>Contains information about an MFA device.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADevices.html\">ListMFADevices</a> operation.</p>"
     },
     "MalformedCertificateException":{
       "type":"structure",
@@ -6659,7 +6793,7 @@
           "documentation":"<p>A list containing information about the versions of the policy.</p>"
         }
       },
-      "documentation":"<p>Contains information about a managed policy, including the policy's ARN, versions, and the number of principal entities (users, groups, and roles) that the policy is attached to.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p> <p>For more information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a managed policy, including the policy's ARN, versions, and the number of principal entities (users, groups, and roles) that the policy is attached to.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operation.</p> <p>For more information about managed policies, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "ManagedPolicyDetailListType":{
       "type":"list",
@@ -6716,15 +6850,13 @@
     },
     "OrganizationNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because no organization is associated with your account.</p>",
       "exception":true
     },
     "OrganizationNotInAllFeaturesModeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because your organization does not have All features enabled. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#feature-set\">Available feature sets</a> in the <i>Organizations User Guide</i>.</p>",
       "exception":true
     },
@@ -6782,7 +6914,7 @@
           "documentation":"<p>Specifies whether IAM users are prevented from setting a new password via the Amazon Web Services Management Console after their password has expired. The IAM user cannot access the console until an administrator resets the password. IAM users with <code>iam:ChangePassword</code> permission and active access keys can reset their own expired console password using the CLI or API.</p>"
         }
       },
-      "documentation":"<p>Contains information about the account password policy.</p> <p> This data type is used as a response element in the <a>GetAccountPasswordPolicy</a> operation. </p>"
+      "documentation":"<p>Contains information about the account password policy.</p> <p> This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountPasswordPolicy.html\">GetAccountPasswordPolicy</a> operation. </p>"
     },
     "PasswordPolicyViolationException":{
       "type":"structure",
@@ -6845,7 +6977,7 @@
         },
         "Description":{
           "shape":"policyDescriptionType",
-          "documentation":"<p>A friendly description of the policy.</p> <p>This element is included in the response to the <a>GetPolicy</a> operation. It is not included in the response to the <a>ListPolicies</a> operation. </p>"
+          "documentation":"<p>A friendly description of the policy.</p> <p>This element is included in the response to the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a> operation. It is not included in the response to the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html\">ListPolicies</a> operation. </p>"
         },
         "CreateDate":{
           "shape":"dateType",
@@ -6860,7 +6992,7 @@
           "documentation":"<p>A list of tags that are attached to the instance profile. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about a managed policy.</p> <p>This data type is used as a response element in the <a>CreatePolicy</a>, <a>GetPolicy</a>, and <a>ListPolicies</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a managed policy.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html\">CreatePolicy</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html\">GetPolicy</a>, and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html\">ListPolicies</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "PolicyDetail":{
       "type":"structure",
@@ -6874,7 +7006,7 @@
           "documentation":"<p>The policy document.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM policy, including the policy document.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>"
+      "documentation":"<p>Contains information about an IAM policy, including the policy document.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operation.</p>"
     },
     "PolicyEvaluationDecisionType":{
       "type":"string",
@@ -6921,7 +7053,7 @@
           "documentation":"<p>The name of the entity (user or role) to which the inline policy is attached.</p> <p>This field is null for managed policies. For more information about these policy types, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is an element of the <a>ListPoliciesGrantingServiceAccessEntry</a> object.</p>"
+      "documentation":"<p>Contains details about the permissions policies that are attached to the specified identity (user, group, or role).</p> <p>This data type is an element of the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPoliciesGrantingServiceAccessEntry.html\">ListPoliciesGrantingServiceAccessEntry</a> object.</p>"
     },
     "PolicyGroup":{
       "type":"structure",
@@ -6935,7 +7067,7 @@
           "documentation":"<p>The stable and unique string identifying the group. For more information about IDs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html\">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about a group that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a group that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "PolicyGroupListType":{
       "type":"list",
@@ -6955,6 +7087,31 @@
       },
       "exception":true
     },
+    "PolicyParameter":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"policyParameterNameType",
+          "documentation":"<p/>"
+        },
+        "Values":{
+          "shape":"policyParameterValuesListType",
+          "documentation":"<p/>"
+        },
+        "Type":{
+          "shape":"PolicyParameterTypeEnum",
+          "documentation":"<p/>"
+        }
+      },
+      "documentation":"<p/>"
+    },
+    "PolicyParameterTypeEnum":{
+      "type":"string",
+      "enum":[
+        "string",
+        "stringList"
+      ]
+    },
     "PolicyRole":{
       "type":"structure",
       "members":{
@@ -6967,7 +7124,7 @@
           "documentation":"<p>The stable and unique string identifying the role. For more information about IDs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html\">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about a role that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a role that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "PolicyRoleListType":{
       "type":"list",
@@ -7005,7 +7162,7 @@
           "documentation":"<p>The stable and unique string identifying the user. For more information about IDs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html\">IAM identifiers</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about a user that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a>ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a user that a managed policy is attached to.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html\">ListEntitiesForPolicy</a> operation. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "PolicyUserListType":{
       "type":"list",
@@ -7016,7 +7173,7 @@
       "members":{
         "Document":{
           "shape":"policyDocumentType",
-          "documentation":"<p>The policy document.</p> <p>The policy document is returned in the response to the <a>GetPolicyVersion</a> and <a>GetAccountAuthorizationDetails</a> operations. It is not returned in the response to the <a>CreatePolicyVersion</a> or <a>ListPolicyVersions</a> operations. </p> <p>The policy document returned in this structure is URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p>"
+          "documentation":"<p>The policy document.</p> <p>The policy document is returned in the response to the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operations. It is not returned in the response to the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html\">CreatePolicyVersion</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a> operations. </p> <p>The policy document returned in this structure is URL-encoded compliant with <a href=\"https://tools.ietf.org/html/rfc3986\">RFC 3986</a>. You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the <code>decode</code> method of the <code>java.net.URLDecoder</code> utility class in the Java SDK. Other languages and SDKs provide similar functionality.</p>"
         },
         "VersionId":{
           "shape":"policyVersionIdType",
@@ -7031,7 +7188,7 @@
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the policy version was created.</p>"
         }
       },
-      "documentation":"<p>Contains information about a version of a managed policy.</p> <p>This data type is used as a response element in the <a>CreatePolicyVersion</a>, <a>GetPolicyVersion</a>, <a>ListPolicyVersions</a>, and <a>GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
+      "documentation":"<p>Contains information about a version of a managed policy.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html\">CreatePolicyVersion</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html\">GetPolicyVersion</a>, <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html\">ListPolicyVersions</a>, and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operations. </p> <p>For more information about managed policies, refer to <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html\">Managed policies and inline policies</a> in the <i>IAM User Guide</i>. </p>"
     },
     "Position":{
       "type":"structure",
@@ -7045,7 +7202,7 @@
           "documentation":"<p>The column in the line containing the specified position in the document.</p>"
         }
       },
-      "documentation":"<p>Contains the row and column of a location of a <code>Statement</code> element in a policy document.</p> <p>This data type is used as a member of the <code> <a>Statement</a> </code> type.</p>"
+      "documentation":"<p>Contains the row and column of a location of a <code>Statement</code> element in a policy document.</p> <p>This data type is used as a member of the <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_Statement.html\">Statement</a> </code> type.</p>"
     },
     "PutGroupPolicyRequest":{
       "type":"structure",
@@ -7165,11 +7322,11 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource to remove the client ID from. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource to remove the client ID from. You can get a list of OIDC provider ARNs by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
         "ClientID":{
           "shape":"clientIDType",
-          "documentation":"<p>The client ID (also known as audience) to remove from the IAM OIDC provider resource. For more information about client IDs, see <a>CreateOpenIDConnectProvider</a>.</p>"
+          "documentation":"<p>The client ID (also known as audience) to remove from the IAM OIDC provider resource. For more information about client IDs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a>.</p>"
         }
       }
     },
@@ -7292,7 +7449,7 @@
         },
         "MissingContextValues":{
           "shape":"ContextKeyNamesResultListType",
-          "documentation":"<p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when a list of ARNs is included in the <code>ResourceArns</code> parameter instead of \"*\". If you do not specify individual resources, by setting <code>ResourceArns</code> to \"*\" or by not including the <code>ResourceArns</code> parameter, then any missing context values are instead included under the <code>EvaluationResults</code> section. To discover the context keys used by a set of policies, you can call <a>GetContextKeysForCustomPolicy</a> or <a>GetContextKeysForPrincipalPolicy</a>.</p>"
+          "documentation":"<p>A list of context keys that are required by the included input policies but that were not provided by one of the input parameters. This list is used when a list of ARNs is included in the <code>ResourceArns</code> parameter instead of \"*\". If you do not specify individual resources, by setting <code>ResourceArns</code> to \"*\" or by not including the <code>ResourceArns</code> parameter, then any missing context values are instead included under the <code>EvaluationResults</code> section. To discover the context keys used by a set of policies, you can call <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForCustomPolicy.html\">GetContextKeysForCustomPolicy</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetContextKeysForPrincipalPolicy.html\">GetContextKeysForPrincipalPolicy</a>.</p>"
         },
         "EvalDecisionDetails":{
           "shape":"EvalDecisionDetailsType",
@@ -7303,7 +7460,7 @@
           "documentation":"<p>Contains information about the effect that a permissions boundary has on a policy simulation when that boundary is applied to an IAM entity.</p>"
         }
       },
-      "documentation":"<p>Contains the result of the simulation of a single API operation call on a single resource.</p> <p>This data type is used by a member of the <a>EvaluationResult</a> data type.</p>"
+      "documentation":"<p>Contains the result of the simulation of a single API operation call on a single resource.</p> <p>This data type is used by a member of the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_EvaluationResult.html\">EvaluationResult</a> data type.</p>"
     },
     "ResourceSpecificResultListType":{
       "type":"list",
@@ -7442,7 +7599,7 @@
           "documentation":"<p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period\">Regions where data is tracked</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM role, including all of the role's policies.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>"
+      "documentation":"<p>Contains information about an IAM role, including all of the role's policies.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operation.</p>"
     },
     "RoleLastUsed":{
       "type":"structure",
@@ -7456,7 +7613,7 @@
           "documentation":"<p>The name of the Amazon Web Services Region in which the role was last used.</p>"
         }
       },
-      "documentation":"<p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period\">Regions where data is tracked</a> in the <i>IAM user Guide</i>.</p> <p>This data type is returned as a response element in the <a>GetRole</a> and <a>GetAccountAuthorizationDetails</a> operations.</p>"
+      "documentation":"<p>Contains information about the last time that an IAM role was used. This includes the date and time and the Region in which the role was last used. Activity is only reported for the trailing 400 days. This period can be shorter if your Region began supporting these features within the last year. The role might have been used more than 400 days ago. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#access-advisor_tracking-period\">Regions where data is tracked</a> in the <i>IAM user Guide</i>.</p> <p>This data type is returned as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html\">GetRole</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operations.</p>"
     },
     "RoleUsageListType":{
       "type":"list",
@@ -7474,13 +7631,27 @@
           "documentation":"<p>The name of the resource that is using the service-linked role.</p>"
         }
       },
-      "documentation":"<p>An object that contains details about how a service-linked role is used, if that information is returned by the service.</p> <p>This data type is used as a response element in the <a>GetServiceLinkedRoleDeletionStatus</a> operation.</p>"
+      "documentation":"<p>An object that contains details about how a service-linked role is used, if that information is returned by the service.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLinkedRoleDeletionStatus.html\">GetServiceLinkedRoleDeletionStatus</a> operation.</p>"
     },
     "SAMLMetadataDocumentType":{
       "type":"string",
       "max":10000000,
       "min":1000
     },
+    "SAMLPrivateKey":{
+      "type":"structure",
+      "members":{
+        "KeyId":{
+          "shape":"privateKeyIdType",
+          "documentation":"<p>The unique identifier for the SAML private key.</p>"
+        },
+        "Timestamp":{
+          "shape":"dateType",
+          "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time </a> format, when the private key was uploaded.</p>"
+        }
+      },
+      "documentation":"<p>Contains the private keys for the SAML provider.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSAMLProvider.html\">GetSAMLProvider</a> operation.</p>"
+    },
     "SAMLProviderListEntry":{
       "type":"structure",
       "members":{
@@ -7544,7 +7715,7 @@
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the SSH public key was uploaded.</p>"
         }
       },
-      "documentation":"<p>Contains information about an SSH public key.</p> <p>This data type is used as a response element in the <a>GetSSHPublicKey</a> and <a>UploadSSHPublicKey</a> operations. </p>"
+      "documentation":"<p>Contains information about an SSH public key.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetSSHPublicKey.html\">GetSSHPublicKey</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadSSHPublicKey.html\">UploadSSHPublicKey</a> operations. </p>"
     },
     "SSHPublicKeyListType":{
       "type":"list",
@@ -7576,7 +7747,7 @@
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the SSH public key was uploaded.</p>"
         }
       },
-      "documentation":"<p>Contains information about an SSH public key, without the key's body or fingerprint.</p> <p>This data type is used as a response element in the <a>ListSSHPublicKeys</a> operation.</p>"
+      "documentation":"<p>Contains information about an SSH public key, without the key's body or fingerprint.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSSHPublicKeys.html\">ListSSHPublicKeys</a> operation.</p>"
     },
     "ServerCertificate":{
       "type":"structure",
@@ -7602,7 +7773,7 @@
           "documentation":"<p>A list of tags that are attached to the server certificate. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about a server certificate.</p> <p> This data type is used as a response element in the <a>GetServerCertificate</a> operation. </p>"
+      "documentation":"<p>Contains information about a server certificate.</p> <p> This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html\">GetServerCertificate</a> operation. </p>"
     },
     "ServerCertificateMetadata":{
       "type":"structure",
@@ -7638,12 +7809,11 @@
           "documentation":"<p>The date on which the certificate is set to expire.</p>"
         }
       },
-      "documentation":"<p>Contains information about a server certificate without its certificate body, certificate chain, and private key.</p> <p> This data type is used as a response element in the <a>UploadServerCertificate</a> and <a>ListServerCertificates</a> operations. </p>"
+      "documentation":"<p>Contains information about a server certificate without its certificate body, certificate chain, and private key.</p> <p> This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html\">UploadServerCertificate</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html\">ListServerCertificates</a> operations. </p>"
     },
     "ServiceAccessNotEnabledException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was rejected because trusted access is not enabled for IAM in Organizations. For details, see IAM and Organizations in the <i>Organizations User Guide</i>.</p>",
       "exception":true
     },
@@ -7692,10 +7862,10 @@
         },
         "TrackedActionsLastAccessed":{
           "shape":"TrackedActionsLastAccessed",
-          "documentation":"<p>An object that contains details about the most recent attempt to access a tracked action within the service.</p> <p>This field is null if there no tracked actions or if the principal did not use the tracked actions within the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period\">tracking period</a>. This field is also null if the report was generated at the service level and not the action level. For more information, see the <code>Granularity</code> field in <a>GenerateServiceLastAccessedDetails</a>.</p>"
+          "documentation":"<p>An object that contains details about the most recent attempt to access a tracked action within the service.</p> <p>This field is null if there no tracked actions or if the principal did not use the tracked actions within the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period\">tracking period</a>. This field is also null if the report was generated at the service level and not the action level. For more information, see the <code>Granularity</code> field in <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GenerateServiceLastAccessedDetails.html\">GenerateServiceLastAccessedDetails</a>.</p>"
         }
       },
-      "documentation":"<p>Contains details about the most recent attempt to access the service.</p> <p>This data type is used as a response element in the <a>GetServiceLastAccessedDetails</a> operation.</p>"
+      "documentation":"<p>Contains details about the most recent attempt to access the service.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html\">GetServiceLastAccessedDetails</a> operation.</p>"
     },
     "ServiceNotSupportedException":{
       "type":"structure",
@@ -7715,8 +7885,6 @@
       "required":[
         "CreateDate",
         "ServiceName",
-        "ServiceUserName",
-        "ServicePassword",
         "ServiceSpecificCredentialId",
         "UserName",
         "Status"
@@ -7726,6 +7894,10 @@
           "shape":"dateType",
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the service-specific credential were created.</p>"
         },
+        "ExpirationDate":{
+          "shape":"dateType",
+          "documentation":"<p>The date and time when the service specific credential expires. This field is only present for Bedrock API keys that were created with an expiration period.</p>"
+        },
         "ServiceName":{
           "shape":"serviceName",
           "documentation":"<p>The name of the service associated with the service-specific credential.</p>"
@@ -7738,6 +7910,14 @@
           "shape":"servicePassword",
           "documentation":"<p>The generated password for the service-specific credential.</p>"
         },
+        "ServiceCredentialAlias":{
+          "shape":"serviceCredentialAlias",
+          "documentation":"<p>For Bedrock API keys, this is the public portion of the credential that includes the IAM user name and a suffix containing version and creation information.</p>"
+        },
+        "ServiceCredentialSecret":{
+          "shape":"serviceCredentialSecret",
+          "documentation":"<p>For Bedrock API keys, this is the secret portion of the credential that should be used to authenticate API calls. This value is returned only when the credential is created.</p>"
+        },
         "ServiceSpecificCredentialId":{
           "shape":"serviceSpecificCredentialId",
           "documentation":"<p>The unique identifier for the service-specific credential.</p>"
@@ -7758,7 +7938,6 @@
       "required":[
         "UserName",
         "Status",
-        "ServiceUserName",
         "CreateDate",
         "ServiceSpecificCredentialId",
         "ServiceName"
@@ -7776,10 +7955,18 @@
           "shape":"serviceUserName",
           "documentation":"<p>The generated user name for the service-specific credential.</p>"
         },
+        "ServiceCredentialAlias":{
+          "shape":"serviceCredentialAlias",
+          "documentation":"<p>For Bedrock API keys, this is the public portion of the credential that includes the IAM user name and a suffix containing version and creation information.</p>"
+        },
         "CreateDate":{
           "shape":"dateType",
           "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the service-specific credential were created.</p>"
         },
+        "ExpirationDate":{
+          "shape":"dateType",
+          "documentation":"<p>The date and time when the service specific credential expires. This field is only present for Bedrock API keys that were created with an expiration period.</p>"
+        },
         "ServiceSpecificCredentialId":{
           "shape":"serviceSpecificCredentialId",
           "documentation":"<p>The unique identifier for the service-specific credential.</p>"
@@ -7856,7 +8043,7 @@
           "documentation":"<p>The date when the signing certificate was uploaded.</p>"
         }
       },
-      "documentation":"<p>Contains information about an X.509 signing certificate.</p> <p>This data type is used as a response element in the <a>UploadSigningCertificate</a> and <a>ListSigningCertificates</a> operations. </p>"
+      "documentation":"<p>Contains information about an X.509 signing certificate.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadSigningCertificate.html\">UploadSigningCertificate</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSigningCertificates.html\">ListSigningCertificates</a> operations. </p>"
     },
     "SimulateCustomPolicyRequest":{
       "type":"structure",
@@ -7927,7 +8114,7 @@
           "documentation":"<p>When <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value to use for the <code>Marker</code> parameter in a subsequent pagination request.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>SimulatePrincipalPolicy</a> or <a>SimulateCustomPolicy</a> request.</p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html\">SimulatePrincipalPolicy</a> or <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html\">SimulateCustomPolicy</a> request.</p>"
     },
     "SimulatePrincipalPolicyRequest":{
       "type":"structure",
@@ -8010,7 +8197,7 @@
           "documentation":"<p>The row and column of the end of a <code>Statement</code> in an IAM policy.</p>"
         }
       },
-      "documentation":"<p>Contains a reference to a <code>Statement</code> element in a policy document that determines the result of the simulation.</p> <p>This data type is used by the <code>MatchedStatements</code> member of the <code> <a>EvaluationResult</a> </code> type.</p>"
+      "documentation":"<p>Contains a reference to a <code>Statement</code> element in a policy document that determines the result of the simulation.</p> <p>This data type is used by the <code>MatchedStatements</code> member of the <code> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_EvaluationResult.html\">EvaluationResult</a> </code> type.</p>"
     },
     "StatementListType":{
       "type":"list",
@@ -8029,7 +8216,7 @@
         },
         "Value":{
           "shape":"tagValueType",
-          "documentation":"<p>The value associated with this tag. For example, tags with a key name of <code>Department</code> could have values such as <code>Human Resources</code>, <code>Accounting</code>, and <code>Support</code>. Tags with a key name of <code>Cost Center</code> might have values that consist of the number associated with the different cost centers in your company. Typically, many resources have tags with the same key name but with different values.</p> <note> <p>Amazon Web Services always interprets the tag <code>Value</code> as a single string. If you need to store an array, you can store comma-separated values in the string. However, you must interpret the value in your code.</p> </note>"
+          "documentation":"<p>The value associated with this tag. For example, tags with a key name of <code>Department</code> could have values such as <code>Human Resources</code>, <code>Accounting</code>, and <code>Support</code>. Tags with a key name of <code>Cost Center</code> might have values that consist of the number associated with the different cost centers in your company. Typically, many resources have tags with the same key name but with different values.</p>"
         }
       },
       "documentation":"<p>A structure that represents user-provided metadata that can be associated with an IAM resource. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
@@ -8187,7 +8374,7 @@
           "documentation":"<p>The Region from which the authenticated entity (user or role) last attempted to access the tracked action. Amazon Web Services does not report unauthenticated requests.</p> <p>This field is null if no IAM entities attempted to access the service within the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor.html#service-last-accessed-reporting-period\">tracking period</a>.</p>"
         }
       },
-      "documentation":"<p>Contains details about the most recent attempt to access an action within the service.</p> <p>This data type is used as a response element in the <a>GetServiceLastAccessedDetails</a> operation.</p>"
+      "documentation":"<p>Contains details about the most recent attempt to access an action within the service.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServiceLastAccessedDetails.html\">GetServiceLastAccessedDetails</a> operation.</p>"
     },
     "TrackedActionsLastAccessed":{
       "type":"list",
@@ -8462,7 +8649,7 @@
         },
         "Password":{
           "shape":"passwordType",
-          "documentation":"<p>The new password for the specified IAM user.</p> <p>The <a href=\"http://wikipedia.org/wiki/regex\">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>)</p> </li> </ul> <p>However, the format can be further restricted by the account administrator by setting a password policy on the Amazon Web Services account. For more information, see <a>UpdateAccountPasswordPolicy</a>.</p>"
+          "documentation":"<p>The new password for the specified IAM user.</p> <p>The <a href=\"http://wikipedia.org/wiki/regex\">regex pattern</a> used to validate this parameter is a string of characters consisting of the following:</p> <ul> <li> <p>Any printable ASCII character ranging from the space character (<code>\\u0020</code>) through the end of the ASCII character range</p> </li> <li> <p>The printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>)</p> </li> <li> <p>The special characters tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>)</p> </li> </ul> <p>However, the format can be further restricted by the account administrator by setting a password policy on the Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccountPasswordPolicy.html\">UpdateAccountPasswordPolicy</a>.</p>"
         },
         "PasswordResetRequired":{
           "shape":"booleanObjectType",
@@ -8479,11 +8666,11 @@
       "members":{
         "OpenIDConnectProviderArn":{
           "shape":"arnType",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource object for which you want to update the thumbprint. You can get a list of OIDC provider ARNs by using the <a>ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM OIDC provider resource object for which you want to update the thumbprint. You can get a list of OIDC provider ARNs by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListOpenIDConnectProviders.html\">ListOpenIDConnectProviders</a> operation.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
         "ThumbprintList":{
           "shape":"thumbprintListType",
-          "documentation":"<p>A list of certificate thumbprints that are associated with the specified IAM OpenID Connect provider. For more information, see <a>CreateOpenIDConnectProvider</a>. </p>"
+          "documentation":"<p>A list of certificate thumbprints that are associated with the specified IAM OpenID Connect provider. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateOpenIDConnectProvider.html\">CreateOpenIDConnectProvider</a>. </p>"
         }
       }
     },
@@ -8533,23 +8720,31 @@
     },
     "UpdateRoleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSAMLProviderRequest":{
       "type":"structure",
-      "required":[
-        "SAMLMetadataDocument",
-        "SAMLProviderArn"
-      ],
+      "required":["SAMLProviderArn"],
       "members":{
         "SAMLMetadataDocument":{
           "shape":"SAMLMetadataDocumentType",
-          "documentation":"<p>An XML document generated by an identity provider (IdP) that supports SAML 2.0. The document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that are received from the IdP. You must generate the metadata document using the identity management software that is used as your organization's IdP.</p>"
+          "documentation":"<p>An XML document generated by an identity provider (IdP) that supports SAML 2.0. The document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that are received from the IdP. You must generate the metadata document using the identity management software that is used as your IdP.</p>"
         },
         "SAMLProviderArn":{
           "shape":"arnType",
           "documentation":"<p>The Amazon Resource Name (ARN) of the SAML provider to update.</p> <p>For more information about ARNs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
+        "AssertionEncryptionMode":{
+          "shape":"assertionEncryptionModeType",
+          "documentation":"<p>Specifies the encryption setting for the SAML provider.</p>"
+        },
+        "AddPrivateKey":{
+          "shape":"privateKeyType",
+          "documentation":"<p>Specifies the new private key from your external identity provider. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions.</p>"
+        },
+        "RemovePrivateKey":{
+          "shape":"privateKeyIdType",
+          "documentation":"<p>The Key ID of the private key to remove.</p>"
         }
       }
     },
@@ -8561,7 +8756,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the SAML provider that was updated.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>UpdateSAMLProvider</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateSAMLProvider.html\">UpdateSAMLProvider</a> request. </p>"
     },
     "UpdateSSHPublicKeyRequest":{
       "type":"structure",
@@ -8688,7 +8883,7 @@
           "documentation":"<p>Contains information about the SSH public key.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>UploadSSHPublicKey</a> request.</p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadSSHPublicKey.html\">UploadSSHPublicKey</a> request.</p>"
     },
     "UploadServerCertificateRequest":{
       "type":"structure",
@@ -8736,7 +8931,7 @@
           "documentation":"<p>A list of tags that are attached to the new IAM server certificate. The returned list of tags is sorted by tag key. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>UploadServerCertificate</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html\">UploadServerCertificate</a> request. </p>"
     },
     "UploadSigningCertificateRequest":{
       "type":"structure",
@@ -8761,7 +8956,7 @@
           "documentation":"<p>Information about the certificate.</p>"
         }
       },
-      "documentation":"<p>Contains the response to a successful <a>UploadSigningCertificate</a> request. </p>"
+      "documentation":"<p>Contains the response to a successful <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadSigningCertificate.html\">UploadSigningCertificate</a> request. </p>"
     },
     "User":{
       "type":"structure",
@@ -8795,7 +8990,7 @@
         },
         "PasswordLastUsed":{
           "shape":"dateType",
-          "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the user's password was last used to sign in to an Amazon Web Services website. For a list of Amazon Web Services websites that capture a user's last sign-in time, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html\">Credential reports</a> topic in the <i>IAM User Guide</i>. If a password is used more than once in a five-minute span, only the first use is returned in this field. If the field is null (no value), then it indicates that they never signed in with a password. This can be because:</p> <ul> <li> <p>The user never had a password.</p> </li> <li> <p>A password exists but has not been used since IAM started tracking this information on October 20, 2014.</p> </li> </ul> <p>A null value does not mean that the user <i>never</i> had a password. Also, if the user does not currently have a password but had one in the past, then this field contains the date and time the most recent password was used.</p> <p>This value is returned only in the <a>GetUser</a> and <a>ListUsers</a> operations. </p>"
+          "documentation":"<p>The date and time, in <a href=\"http://www.iso.org/iso/iso8601\">ISO 8601 date-time format</a>, when the user's password was last used to sign in to an Amazon Web Services website. For a list of Amazon Web Services websites that capture a user's last sign-in time, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html\">Credential reports</a> topic in the <i>IAM User Guide</i>. If a password is used more than once in a five-minute span, only the first use is returned in this field. If the field is null (no value), then it indicates that they never signed in with a password. This can be because:</p> <ul> <li> <p>The user never had a password.</p> </li> <li> <p>A password exists but has not been used since IAM started tracking this information on October 20, 2014.</p> </li> </ul> <p>A null value does not mean that the user <i>never</i> had a password. Also, if the user does not currently have a password but had one in the past, then this field contains the date and time the most recent password was used.</p> <p>This value is returned only in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html\">GetUser</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html\">ListUsers</a> operations. </p>"
         },
         "PermissionsBoundary":{
           "shape":"AttachedPermissionsBoundary",
@@ -8806,7 +9001,7 @@
           "documentation":"<p>A list of tags that are associated with the user. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM user entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a>CreateUser</a> </p> </li> <li> <p> <a>GetUser</a> </p> </li> <li> <p> <a>ListUsers</a> </p> </li> </ul>"
+      "documentation":"<p>Contains information about an IAM user entity.</p> <p>This data type is used as a response element in the following operations:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html\">CreateUser</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetUser.html\">GetUser</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html\">ListUsers</a> </p> </li> </ul>"
     },
     "UserDetail":{
       "type":"structure",
@@ -8849,7 +9044,7 @@
           "documentation":"<p>A list of tags that are associated with the user. For more information about tagging, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html\">Tagging IAM resources</a> in the <i>IAM User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Contains information about an IAM user, including all the user's policies and all the IAM groups the user is in.</p> <p>This data type is used as a response element in the <a>GetAccountAuthorizationDetails</a> operation.</p>"
+      "documentation":"<p>Contains information about an IAM user, including all the user's policies and all the IAM groups the user is in.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html\">GetAccountAuthorizationDetails</a> operation.</p>"
     },
     "VirtualMFADevice":{
       "type":"structure",
@@ -8891,7 +9086,7 @@
     "accessKeyMetadataListType":{
       "type":"list",
       "member":{"shape":"AccessKeyMetadata"},
-      "documentation":"<p>Contains a list of access key metadata.</p> <p>This data type is used as a response element in the <a>ListAccessKeys</a> operation.</p>"
+      "documentation":"<p>Contains a list of access key metadata.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html\">ListAccessKeys</a> operation.</p>"
     },
     "accessKeySecretType":{
       "type":"string",
@@ -8907,12 +9102,27 @@
       "min":3,
       "pattern":"^[a-z0-9]([a-z0-9]|-(?!-)){1,61}[a-z0-9]$"
     },
+    "accountIdType":{
+      "type":"string",
+      "pattern":"\\d{12}"
+    },
+    "allUsers":{
+      "type":"boolean",
+      "box":true
+    },
     "arnType":{
       "type":"string",
       "documentation":"<p>The Amazon Resource Name (ARN). ARNs are unique identifiers for Amazon Web Services resources.</p> <p>For more information about ARNs, go to <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>. </p>",
       "max":2048,
       "min":20
     },
+    "assertionEncryptionModeType":{
+      "type":"string",
+      "enum":[
+        "Required",
+        "Allowed"
+      ]
+    },
     "assignmentStatusType":{
       "type":"string",
       "enum":[
@@ -8958,7 +9168,7 @@
     "certificateListType":{
       "type":"list",
       "member":{"shape":"SigningCertificate"},
-      "documentation":"<p>Contains a list of signing certificates.</p> <p>This data type is used as a response element in the <a>ListSigningCertificates</a> operation.</p>"
+      "documentation":"<p>Contains a list of signing certificates.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListSigningCertificates.html\">ListSigningCertificates</a> operation.</p>"
     },
     "clientIDListType":{
       "type":"list",
@@ -8969,6 +9179,16 @@
       "max":255,
       "min":1
     },
+    "consoleDeepLinkType":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "credentialAgeDays":{
+      "type":"integer",
+      "max":36600,
+      "min":1
+    },
     "credentialReportExpiredExceptionMessage":{"type":"string"},
     "credentialReportNotPresentExceptionMessage":{"type":"string"},
     "credentialReportNotReadyExceptionMessage":{"type":"string"},
@@ -8979,6 +9199,17 @@
       "pattern":"[\\w+=,.@-]+"
     },
     "dateType":{"type":"timestamp"},
+    "delegationRequestDescriptionType":{
+      "type":"string",
+      "max":1000,
+      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]*"
+    },
+    "delegationRequestIdType":{
+      "type":"string",
+      "max":128,
+      "min":16,
+      "pattern":"[\\w-]+"
+    },
     "deleteConflictMessage":{"type":"string"},
     "duplicateCertificateMessage":{"type":"string"},
     "duplicateSSHPublicKeyMessage":{"type":"string"},
@@ -9025,7 +9256,7 @@
     "groupListType":{
       "type":"list",
       "member":{"shape":"Group"},
-      "documentation":"<p>Contains a list of IAM groups.</p> <p>This data type is used as a response element in the <a>ListGroups</a> operation.</p>"
+      "documentation":"<p>Contains a list of IAM groups.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListGroups.html\">ListGroups</a> operation.</p>"
     },
     "groupNameListType":{
       "type":"list",
@@ -9101,7 +9332,7 @@
     "mfaDeviceListType":{
       "type":"list",
       "member":{"shape":"MFADevice"},
-      "documentation":"<p>Contains a list of MFA devices.</p> <p>This data type is used as a response element in the <a>ListMFADevices</a> and <a>ListVirtualMFADevices</a> operations. </p>"
+      "documentation":"<p>Contains a list of MFA devices.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListMFADevices.html\">ListMFADevices</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListVirtualMFADevices.html\">ListVirtualMFADevices</a> operations. </p>"
     },
     "minimumPasswordLengthType":{
       "type":"integer",
@@ -9109,6 +9340,11 @@
       "min":6
     },
     "noSuchEntityMessage":{"type":"string"},
+    "notificationChannelType":{
+      "type":"string",
+      "max":400,
+      "min":2
+    },
     "openIdIdpCommunicationErrorExceptionMessage":{"type":"string"},
     "organizationsEntityPathType":{
       "type":"string",
@@ -9176,7 +9412,7 @@
     "policyNameListType":{
       "type":"list",
       "member":{"shape":"policyNameType"},
-      "documentation":"<p>Contains a list of policy names.</p> <p>This data type is used as a response element in the <a>ListPolicies</a> operation.</p>"
+      "documentation":"<p>Contains a list of policy names.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html\">ListPolicies</a> operation.</p>"
     },
     "policyNameType":{
       "type":"string",
@@ -9193,6 +9429,21 @@
         "GROUP"
       ]
     },
+    "policyParameterListType":{
+      "type":"list",
+      "member":{"shape":"PolicyParameter"},
+      "max":50
+    },
+    "policyParameterNameType":{
+      "type":"string",
+      "max":256,
+      "min":5
+    },
+    "policyParameterValueType":{"type":"string"},
+    "policyParameterValuesListType":{
+      "type":"list",
+      "member":{"shape":"policyParameterValueType"}
+    },
     "policyPathType":{
       "type":"string",
       "max":512,
@@ -9218,6 +9469,17 @@
       "type":"string",
       "pattern":"v[1-9][0-9]*(\\.[A-Za-z0-9-]*)?"
     },
+    "privateKeyIdType":{
+      "type":"string",
+      "max":64,
+      "min":22,
+      "pattern":"[A-Z0-9]+"
+    },
+    "privateKeyList":{
+      "type":"list",
+      "member":{"shape":"SAMLPrivateKey"},
+      "max":2
+    },
     "privateKeyType":{
       "type":"string",
       "max":16384,
@@ -9243,7 +9505,23 @@
       "min":1,
       "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+"
     },
+    "redirectUrlType":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"^http(s?)://[a-zA-Z0-9._/-]*(\\?[a-zA-Z0-9._=&-]*)?(#[a-zA-Z0-9._/-]*)?$"
+    },
     "reportGenerationLimitExceededMessage":{"type":"string"},
+    "requestMessageType":{
+      "type":"string",
+      "max":200,
+      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]*"
+    },
+    "requestorWorkflowIdType":{
+      "type":"string",
+      "max":400,
+      "min":5
+    },
     "responseMarkerType":{"type":"string"},
     "roleDescriptionType":{
       "type":"string",
@@ -9257,7 +9535,7 @@
     "roleListType":{
       "type":"list",
       "member":{"shape":"Role"},
-      "documentation":"<p>Contains a list of IAM roles.</p> <p>This data type is used as a response element in the <a>ListRoles</a> operation.</p>"
+      "documentation":"<p>Contains a list of IAM roles.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html\">ListRoles</a> operation.</p>"
     },
     "roleMaxSessionDurationType":{
       "type":"integer",
@@ -9286,6 +9564,16 @@
       "min":1,
       "pattern":"[\\w+=,.@-]+"
     },
+    "serviceCredentialAlias":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "pattern":"[\\w+=,.@-]+"
+    },
+    "serviceCredentialSecret":{
+      "type":"string",
+      "sensitive":true
+    },
     "serviceFailureExceptionMessage":{"type":"string"},
     "serviceName":{"type":"string"},
     "serviceNameType":{"type":"string"},
@@ -9315,8 +9603,13 @@
     "serviceUserName":{
       "type":"string",
       "max":200,
-      "min":17,
-      "pattern":"[\\w+=,.@-]+"
+      "min":0,
+      "pattern":"[\\w+=,.@-]*"
+    },
+    "sessionDurationType":{
+      "type":"integer",
+      "max":43200,
+      "min":3600
     },
     "sortKeyType":{
       "type":"string",
@@ -9331,7 +9624,8 @@
       "type":"string",
       "enum":[
         "Active",
-        "Inactive"
+        "Inactive",
+        "Expired"
       ]
     },
     "stringType":{"type":"string"},
@@ -9364,7 +9658,14 @@
         "PolicyVersionsInUse",
         "PolicyVersionsInUseQuota",
         "VersionsPerPolicyQuota",
-        "GlobalEndpointTokenVersion"
+        "GlobalEndpointTokenVersion",
+        "AssumeRolePolicySizeQuota",
+        "InstanceProfiles",
+        "InstanceProfilesQuota",
+        "Providers",
+        "RolePolicySizeQuota",
+        "Roles",
+        "RolesQuota"
       ]
     },
     "summaryMapType":{
@@ -9415,7 +9716,7 @@
     "userListType":{
       "type":"list",
       "member":{"shape":"User"},
-      "documentation":"<p>Contains a list of users.</p> <p>This data type is used as a response element in the <a>GetGroup</a> and <a>ListUsers</a> operations. </p>"
+      "documentation":"<p>Contains a list of users.</p> <p>This data type is used as a response element in the <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetGroup.html\">GetGroup</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html\">ListUsers</a> operations. </p>"
     },
     "userNameType":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/identitystore/2020-06-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +252,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +275,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,7 +294,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -308,14 +304,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/identitystore/2020-06-15/service-2.json 2.31.35-1/awscli/botocore/data/identitystore/2020-06-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/identitystore/2020-06-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/identitystore/2020-06-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,11 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-06-15",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"identitystore",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"IdentityStore",
     "serviceFullName":"AWS SSO Identity Store",
     "serviceId":"identitystore",
@@ -143,7 +145,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the group metadata and attributes from <code>GroupId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves the group metadata and attributes from <code>GroupId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "DescribeGroupMembership":{
       "name":"DescribeGroupMembership",
@@ -160,7 +163,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves membership metadata and attributes from <code>MembershipId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves membership metadata and attributes from <code>MembershipId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "DescribeUser":{
       "name":"DescribeUser",
@@ -177,7 +181,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the user metadata and attributes from the <code>UserId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves the user metadata and attributes from the <code>UserId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "GetGroupId":{
       "name":"GetGroupId",
@@ -194,7 +199,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves <code>GroupId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves <code>GroupId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "GetGroupMembershipId":{
       "name":"GetGroupMembershipId",
@@ -211,7 +217,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the <code>MembershipId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves the <code>MembershipId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "GetUserId":{
       "name":"GetUserId",
@@ -228,7 +235,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves the <code>UserId</code> in an identity store.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Retrieves the <code>UserId</code> in an identity store.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "IsMemberInGroups":{
       "name":"IsMemberInGroups",
@@ -245,7 +253,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Checks the user's membership in all requested groups and returns if the member exists in all queried groups.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Checks the user's membership in all requested groups and returns if the member exists in all queried groups.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "ListGroupMemberships":{
       "name":"ListGroupMemberships",
@@ -262,7 +271,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>For the specified group in the specified identity store, returns the list of all <code>GroupMembership</code> objects and returns results in paginated form.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>For the specified group in the specified identity store, returns the list of all <code> GroupMembership</code> objects and returns results in paginated form.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "ListGroupMembershipsForMember":{
       "name":"ListGroupMembershipsForMember",
@@ -279,7 +289,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>For the specified member in the specified identity store, returns the list of all <code>GroupMembership</code> objects and returns results in paginated form.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>For the specified member in the specified identity store, returns the list of all <code> GroupMembership</code> objects and returns results in paginated form.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "ListGroups":{
       "name":"ListGroups",
@@ -296,7 +307,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all groups in the identity store. Returns a paginated list of complete <code>Group</code> objects. Filtering for a <code>Group</code> by the <code>DisplayName</code> attribute is deprecated. Instead, use the <code>GetGroupId</code> API action.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>. </p> </note>"
+      "documentation":"<p>Lists all groups in the identity store. Returns a paginated list of complete <code>Group</code> objects. Filtering for a <code>Group</code> by the <code>DisplayName</code> attribute is deprecated. Instead, use the <code>GetGroupId</code> API action.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "ListUsers":{
       "name":"ListUsers",
@@ -313,7 +325,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all users in the identity store. Returns a paginated list of complete <code>User</code> objects. Filtering for a <code>User</code> by the <code>UserName</code> attribute is deprecated. Instead, use the <code>GetUserId</code> API action.</p> <note> <p>If you have administrator access to a member account, you can use this API from the member account. Read about <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_access.html\">member accounts</a> in the <i>Organizations User Guide</i>.</p> </note>"
+      "documentation":"<p>Lists all users in the identity store. Returns a paginated list of complete <code>User</code> objects. Filtering for a <code>User</code> by the <code>UserName</code> attribute is deprecated. Instead, use the <code>GetUserId</code> API action.</p> <note> <p>If you have access to a member account, you can use this API operation from the member account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-accounts.html#limiting-access-from-member-accounts\">Limiting access to the identity store from member accounts</a> in the <i> IAM Identity Center User Guide</i>.</p> </note>",
+      "readonly":true
     },
     "UpdateGroup":{
       "name":"UpdateGroup",
@@ -332,7 +345,7 @@
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>For the specified group in the specified identity store, updates the group metadata and attributes.</p>"
+      "documentation":"<p>Updates the specified group metadata and attributes in the specified identity store.</p>"
     },
     "UpdateUser":{
       "name":"UpdateUser",
@@ -351,7 +364,7 @@
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>For the specified user in the specified identity store, updates the user metadata and attributes.</p>"
+      "documentation":"<p>Updates the specified user metadata and attributes in the specified identity store.</p>"
     }
   },
   "shapes":{
@@ -362,11 +375,19 @@
         "RequestId":{
           "shape":"RequestId",
           "documentation":"<p>The identifier for each request. This value is a globally unique ID that is generated by the identity store service for each sent request, and is then returned inside the exception if the request fails.</p>"
+        },
+        "Reason":{
+          "shape":"AccessDeniedExceptionReason",
+          "documentation":"<p>Indicates the reason for an access denial when returned by KMS while accessing a Customer Managed KMS key. For non-KMS access-denied errors, this field is not included.</p>"
         }
       },
       "documentation":"<p>You do not have sufficient access to perform this action.</p>",
       "exception":true
     },
+    "AccessDeniedExceptionReason":{
+      "type":"string",
+      "enum":["KMS_ACCESS_DENIED"]
+    },
     "Address":{
       "type":"structure",
       "members":{
@@ -451,12 +472,11 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"\\p{L}+(?:\\.\\p{L}+){0,2}"
+      "pattern":"(?:\\p{L}+:\\p{L}+:\\p{L}+(?:\\.\\p{L}+){0,3}|\\p{L}+(?:\\.\\p{L}+){0,2})"
     },
     "AttributeValue":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value of the attribute. This is a <code>Document</code> type. This type is not supported by Java V1, Go V1, and older versions of the CLI.</p>",
       "document":true
     },
@@ -571,11 +591,11 @@
         },
         "Name":{
           "shape":"Name",
-          "documentation":"<p>An object containing the name of the user.</p>"
+          "documentation":"<p>An object containing the name of the user. When used in IAM Identity Center, this parameter is required.</p>"
         },
         "DisplayName":{
           "shape":"SensitiveStringType",
-          "documentation":"<p>A string containing the name of the user. This value is typically formatted for display when the user is referenced. For example, \"John Doe.\" </p>"
+          "documentation":"<p>A string containing the name of the user. This value is typically formatted for display when the user is referenced. For example, \"John Doe.\" When used in IAM Identity Center, this parameter is required.</p>"
         },
         "NickName":{
           "shape":"SensitiveStringType",
@@ -616,26 +636,39 @@
         "Timezone":{
           "shape":"SensitiveStringType",
           "documentation":"<p>A string containing the time zone of the user.</p>"
+        },
+        "Photos":{
+          "shape":"Photos",
+          "documentation":"<p>A list of photos associated with the user. You can add up to 3 photos per user. Each photo can include a value, type, display name, and primary designation.</p>"
+        },
+        "Website":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's personal website or blog URL. This field allows users to provide a link to their personal or professional website.</p>"
+        },
+        "Birthdate":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's birthdate in YYYY-MM-DD format. This field supports standard date format for storing personal information.</p>"
         }
       }
     },
     "CreateUserResponse":{
       "type":"structure",
       "required":[
-        "UserId",
-        "IdentityStoreId"
+        "IdentityStoreId",
+        "UserId"
       ],
       "members":{
-        "UserId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The identifier of the newly created user in the identity store.</p>"
-        },
         "IdentityStoreId":{
           "shape":"IdentityStoreId",
           "documentation":"<p>The globally unique identifier for the identity store.</p>"
+        },
+        "UserId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The identifier of the newly created user in the identity store.</p>"
         }
       }
     },
+    "DateType":{"type":"timestamp"},
     "DeleteGroupMembershipRequest":{
       "type":"structure",
       "required":[
@@ -655,8 +688,7 @@
     },
     "DeleteGroupMembershipResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGroupRequest":{
       "type":"structure",
@@ -677,8 +709,7 @@
     },
     "DeleteGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserRequest":{
       "type":"structure",
@@ -699,8 +730,7 @@
     },
     "DeleteUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeGroupMembershipRequest":{
       "type":"structure",
@@ -740,7 +770,23 @@
           "shape":"ResourceId",
           "documentation":"<p>The identifier for a group in the identity store.</p>"
         },
-        "MemberId":{"shape":"MemberId"}
+        "MemberId":{"shape":"MemberId"},
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group membership was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group membership was last updated.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the group membership.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the group membership.</p>"
+        }
       }
     },
     "DescribeGroupRequest":{
@@ -783,6 +829,22 @@
           "shape":"SensitiveStringType",
           "documentation":"<p>A string containing a description of the group.</p>"
         },
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group was last updated.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the group.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the group.</p>"
+        },
         "IdentityStoreId":{
           "shape":"IdentityStoreId",
           "documentation":"<p>The globally unique identifier for the identity store.</p>"
@@ -809,18 +871,22 @@
     "DescribeUserResponse":{
       "type":"structure",
       "required":[
-        "UserId",
-        "IdentityStoreId"
+        "IdentityStoreId",
+        "UserId"
       ],
       "members":{
-        "UserName":{
-          "shape":"UserName",
-          "documentation":"<p>A unique string used to identify the user. The length limit is 128 characters. This value can consist of letters, accented characters, symbols, numbers, and punctuation. This value is specified at the time the user is created and stored as an attribute of the user object in the identity store.</p>"
+        "IdentityStoreId":{
+          "shape":"IdentityStoreId",
+          "documentation":"<p>The globally unique identifier for the identity store.</p>"
         },
         "UserId":{
           "shape":"ResourceId",
           "documentation":"<p>The identifier for a user in the identity store.</p>"
         },
+        "UserName":{
+          "shape":"UserName",
+          "documentation":"<p>A unique string used to identify the user. The length limit is 128 characters. This value can consist of letters, accented characters, symbols, numbers, and punctuation. This value is specified at the time the user is created and stored as an attribute of the user object in the identity store.</p>"
+        },
         "ExternalIds":{
           "shape":"ExternalIds",
           "documentation":"<p>A list of <code>ExternalId</code> objects that contains the identifiers issued to this resource by an external identity provider.</p>"
@@ -873,9 +939,37 @@
           "shape":"SensitiveStringType",
           "documentation":"<p>The time zone for a user.</p>"
         },
-        "IdentityStoreId":{
-          "shape":"IdentityStoreId",
-          "documentation":"<p>The globally unique identifier for the identity store.</p>"
+        "UserStatus":{
+          "shape":"UserStatus",
+          "documentation":"<p>The current status of the user account.</p>"
+        },
+        "Photos":{
+          "shape":"Photos",
+          "documentation":"<p>A list of photos associated with the user. Returns up to 3 photos with their associated metadata including type, display name, and primary designation.</p>"
+        },
+        "Website":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's personal website or blog URL. Returns the stored website information for the user.</p>"
+        },
+        "Birthdate":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's birthdate in YYYY-MM-DD format. This field returns the stored birthdate information for the user.</p>"
+        },
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the user was created.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the user.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the user was last updated.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the user.</p>"
         }
       }
     },
@@ -931,9 +1025,9 @@
     },
     "ExternalIdIssuer":{
       "type":"string",
-      "max":100,
+      "max":256,
       "min":1,
-      "pattern":"(?!(?i)(arn|aws):)[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+",
+      "pattern":"[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+",
       "sensitive":true
     },
     "ExternalIds":{
@@ -951,7 +1045,7 @@
       "members":{
         "AttributePath":{
           "shape":"AttributePath",
-          "documentation":"<p>The attribute path that is used to specify which attribute name to search. Length limit is 255 characters. For example, <code>UserName</code> is a valid attribute path for the <code>ListUsers</code> API, and <code>DisplayName</code> is a valid attribute path for the <code>ListGroups</code> API.</p>"
+          "documentation":"<p>The attribute path that is used to specify which attribute name to search. Length limit is 255 characters. For example, <code>UserName</code> is a valid attribute path for the <code> ListUsers</code> API, and <code>DisplayName</code> is a valid attribute path for the <code> ListGroups</code> API.</p>"
         },
         "AttributeValue":{
           "shape":"SensitiveStringType",
@@ -979,7 +1073,7 @@
         },
         "AlternateIdentifier":{
           "shape":"AlternateIdentifier",
-          "documentation":"<p>A unique identifier for a user or group that is not the primary identifier. This value can be an identifier from an external identity provider (IdP) that is associated with the user, the group, or a unique attribute. For the unique attribute, the only valid path is <code>displayName</code>.</p>"
+          "documentation":"<p>A unique identifier for a user or group that is not the primary identifier. This value can be an identifier from an external identity provider (IdP) that is associated with the user, the group, or a unique attribute. For the unique attribute, the only valid path is <code> displayName</code>.</p>"
         }
       }
     },
@@ -1052,24 +1146,24 @@
         },
         "AlternateIdentifier":{
           "shape":"AlternateIdentifier",
-          "documentation":"<p>A unique identifier for a user or group that is not the primary identifier. This value can be an identifier from an external identity provider (IdP) that is associated with the user, the group, or a unique attribute. For the unique attribute, the only valid paths are <code>userName</code> and <code>emails.value</code>.</p>"
+          "documentation":"<p>A unique identifier for a user or group that is not the primary identifier. This value can be an identifier from an external identity provider (IdP) that is associated with the user, the group, or a unique attribute. For the unique attribute, the only valid paths are <code> userName</code> and <code>emails.value</code>.</p>"
         }
       }
     },
     "GetUserIdResponse":{
       "type":"structure",
       "required":[
-        "UserId",
-        "IdentityStoreId"
+        "IdentityStoreId",
+        "UserId"
       ],
       "members":{
-        "UserId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The identifier for a user in the identity store.</p>"
-        },
         "IdentityStoreId":{
           "shape":"IdentityStoreId",
           "documentation":"<p>The globally unique identifier for the identity store.</p>"
+        },
+        "UserId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The identifier for a user in the identity store.</p>"
         }
       }
     },
@@ -1086,7 +1180,7 @@
         },
         "DisplayName":{
           "shape":"GroupDisplayName",
-          "documentation":"<p>The display name value for the group. The length limit is 1,024 characters. This value can consist of letters, accented characters, symbols, numbers, punctuation, tab, new line, carriage return, space, and nonbreaking space in this attribute. This value is specified at the time the group is created and stored as an attribute of the group object in the identity store.</p>"
+          "documentation":"<p>The display name value for the group. The length limit is 1,024 characters. This value can consist of letters, accented characters, symbols, numbers, punctuation, tab, new line, carriage return, space, and nonbreaking space in this attribute. This value is specified at the time the group is created and stored as an attribute of the group object in the identity store.</p> <p>Prefix search supports a maximum of 1,000 characters for the string.</p>"
         },
         "ExternalIds":{
           "shape":"ExternalIds",
@@ -1096,6 +1190,22 @@
           "shape":"SensitiveStringType",
           "documentation":"<p>A string containing a description of the specified group.</p>"
         },
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group was last updated.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the group.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the group.</p>"
+        },
         "IdentityStoreId":{
           "shape":"IdentityStoreId",
           "documentation":"<p>The globally unique identifier for the identity store.</p>"
@@ -1135,6 +1245,22 @@
         "MemberId":{
           "shape":"MemberId",
           "documentation":"<p>An object that contains the identifier of a group member. Setting the <code>UserID</code> field to the specific identifier for a user indicates that the user is a member of the group.</p>"
+        },
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group membership was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the group membership was last updated.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the group membership.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the group membership.</p>"
         }
       },
       "documentation":"<p>Contains the identifiers for a group, a group member, and a <code>GroupMembership</code> object in the identity store.</p>"
@@ -1242,11 +1368,12 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code>ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>"
+          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code> ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>",
+          "box":true
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code>ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
+          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code> ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
         }
       }
     },
@@ -1260,7 +1387,7 @@
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code>ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page. </p>"
+          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code> ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page. </p>"
         }
       }
     },
@@ -1281,11 +1408,12 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in all <code>List</code> requests to specify how many results to return in one page.</p>"
+          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in all <code> List</code> requests to specify how many results to return in one page.</p>",
+          "box":true
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code> and <code>ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
+          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code> and <code> ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
         }
       }
     },
@@ -1299,7 +1427,7 @@
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code>ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
+          "documentation":"<p>The pagination token used for the <code>ListUsers</code>, <code>ListGroups</code>, and <code> ListGroupMemberships</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
         }
       }
     },
@@ -1313,7 +1441,8 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code>ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>"
+          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code> ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>",
+          "box":true
         },
         "NextToken":{
           "shape":"NextToken",
@@ -1321,7 +1450,7 @@
         },
         "Filters":{
           "shape":"Filters",
-          "documentation":"<p>A list of <code>Filter</code> objects, which is used in the <code>ListUsers</code> and <code>ListGroups</code> requests.</p>",
+          "documentation":"<p>A list of <code>Filter</code> objects, which is used in the <code>ListUsers</code> and <code> ListGroups</code> requests.</p>",
           "deprecated":true,
           "deprecatedMessage":"Using filters with ListGroups API is deprecated, please use GetGroupId API instead."
         }
@@ -1337,7 +1466,7 @@
         },
         "NextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The pagination token used for the <code>ListUsers</code> and <code>ListGroups</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it1 is used in the API request to search for the next page.</p>"
+          "documentation":"<p>The pagination token used for the <code>ListUsers</code> and <code>ListGroups</code> API operations. This value is generated by the identity store service. It is returned in the API response if the total results are more than the size of one page. This token is also returned when it is used in the API request to search for the next page.</p>"
         }
       }
     },
@@ -1351,7 +1480,8 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code>ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>"
+          "documentation":"<p>The maximum number of results to be returned per request. This parameter is used in the <code> ListUsers</code> and <code>ListGroups</code> requests to specify how many results to return in one page. The length limit is 50 characters.</p>",
+          "box":true
         },
         "NextToken":{
           "shape":"NextToken",
@@ -1359,7 +1489,7 @@
         },
         "Filters":{
           "shape":"Filters",
-          "documentation":"<p>A list of <code>Filter</code> objects, which is used in the <code>ListUsers</code> and <code>ListGroups</code> requests. </p>",
+          "documentation":"<p>A list of <code>Filter</code> objects, which is used in the <code>ListUsers</code> and <code> ListGroups</code> requests. </p>",
           "deprecated":true,
           "deprecatedMessage":"Using filters with ListUsers API is deprecated, please use GetGroupId API instead."
         }
@@ -1437,7 +1567,7 @@
       "members":{
         "Value":{
           "shape":"SensitiveStringType",
-          "documentation":"<p>A string containing a phone number. For example, \"8675309\" or \"+1 (800) 123-4567\".</p>"
+          "documentation":"<p>A string containing a phone number. For example, \"8675309\" or \"+1 (800) 123-4567\". </p>"
         },
         "Type":{
           "shape":"SensitiveStringType",
@@ -1456,6 +1586,35 @@
       "max":1,
       "min":1
     },
+    "Photo":{
+      "type":"structure",
+      "required":["Value"],
+      "members":{
+        "Value":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The photo data or URL. Supported formats include jpg, jpeg, png, and gif. This field is required for all photo entries.</p>"
+        },
+        "Type":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The type of photo. This field is optional and can be used to categorize different types of photos.</p>"
+        },
+        "Display":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>A human-readable description of the photo for display purposes. This optional field provides context about the photo.</p>"
+        },
+        "Primary":{
+          "shape":"SensitiveBooleanType",
+          "documentation":"<p>Specifies whether this is the user's primary photo. Default value is <code>false</code>. Only one photo can be designated as primary per user.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a user's photo. Users can have up to 3 photos, with one designated as primary. Supports common image formats, including jpg, jpeg, png, and gif.</p>"
+    },
+    "Photos":{
+      "type":"list",
+      "member":{"shape":"Photo"},
+      "max":3,
+      "min":1
+    },
     "RequestId":{
       "type":"string",
       "max":36,
@@ -1477,7 +1636,11 @@
         },
         "ResourceId":{
           "shape":"ResourceId",
-          "documentation":"<p>The identifier for a resource in the identity store that can be used as <code>UserId</code> or <code>GroupId</code>. The format for <code>ResourceId</code> is either <code>UUID</code> or <code>1234567890-UUID</code>, where <code>UUID</code> is a randomly generated value for each resource when it is created and <code>1234567890</code> represents the <code>IdentityStoreId</code> string value. In the case that the identity store is migrated from a legacy SSO identity store, the <code>ResourceId</code> for that identity store will be in the format of <code>UUID</code>. Otherwise, it will be in the <code>1234567890-UUID</code> format.</p>"
+          "documentation":"<p>The identifier for a resource in the identity store that can be used as <code>UserId</code> or <code>GroupId</code>. The format for <code>ResourceId</code> is either <code>UUID</code> or <code>1234567890-UUID</code>, where <code>UUID</code> is a randomly generated value for each resource when it is created and <code>1234567890</code> represents the <code> IdentityStoreId</code> string value. In the case that the identity store is migrated from a legacy SSO identity store, the <code>ResourceId</code> for that identity store will be in the format of <code>UUID</code>. Otherwise, it will be in the <code>1234567890-UUID</code> format.</p>"
+        },
+        "Reason":{
+          "shape":"ResourceNotFoundExceptionReason",
+          "documentation":"<p>Indicates the reason for a resource not found error when the service is unable to access a Customer Managed KMS key. For non-KMS permission errors, this field is not included.</p>"
         },
         "Message":{"shape":"ExceptionMessage"},
         "RequestId":{
@@ -1488,6 +1651,10 @@
       "documentation":"<p>Indicates that a requested resource is not found.</p>",
       "exception":true
     },
+    "ResourceNotFoundExceptionReason":{
+      "type":"string",
+      "enum":["KMS_KEY_NOT_FOUND"]
+    },
     "ResourceType":{
       "type":"string",
       "enum":[
@@ -1521,6 +1688,7 @@
       "documentation":"<p>The request would cause the number of users or groups in the identity store to exceed the maximum allowed.</p>",
       "exception":true
     },
+    "StringType":{"type":"string"},
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -1532,12 +1700,20 @@
         "RetryAfterSeconds":{
           "shape":"RetryAfterSeconds",
           "documentation":"<p>The number of seconds to wait before retrying the next request.</p>"
+        },
+        "Reason":{
+          "shape":"ThrottlingExceptionReason",
+          "documentation":"<p>Indicates the reason for the throttling error when the service is unable to access a Customer Managed KMS key. For non-KMS permission errors, this field is not included.</p>"
         }
       },
       "documentation":"<p>Indicates that the principal has crossed the throttling limits of the API operations.</p>",
       "exception":true,
       "retryable":{"throttling":true}
     },
+    "ThrottlingExceptionReason":{
+      "type":"string",
+      "enum":["KMS_THROTTLING"]
+    },
     "UniqueAttribute":{
       "type":"structure",
       "required":[
@@ -1574,14 +1750,13 @@
         },
         "Operations":{
           "shape":"AttributeOperations",
-          "documentation":"<p>A list of <code>AttributeOperation</code> objects to apply to the requested group. These operations might add, replace, or remove an attribute.</p>"
+          "documentation":"<p>A list of <code>AttributeOperation</code> objects to apply to the requested group. These operations might add, replace, or remove an attribute. For more information on the attributes that can be added, replaced, or removed, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_Group.html\">Group</a>.</p>"
         }
       }
     },
     "UpdateGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateUserRequest":{
       "type":"structure",
@@ -1601,30 +1776,33 @@
         },
         "Operations":{
           "shape":"AttributeOperations",
-          "documentation":"<p>A list of <code>AttributeOperation</code> objects to apply to the requested user. These operations might add, replace, or remove an attribute.</p>"
+          "documentation":"<p>A list of <code>AttributeOperation</code> objects to apply to the requested user. These operations might add, replace, or remove an attribute. For more information on the attributes that can be added, replaced, or removed, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_User.html\">User</a>.</p>"
         }
       }
     },
     "UpdateUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "User":{
       "type":"structure",
       "required":[
-        "UserId",
-        "IdentityStoreId"
+        "IdentityStoreId",
+        "UserId"
       ],
       "members":{
-        "UserName":{
-          "shape":"UserName",
-          "documentation":"<p>A unique string used to identify the user. The length limit is 128 characters. This value can consist of letters, accented characters, symbols, numbers, and punctuation. This value is specified at the time the user is created and stored as an attribute of the user object in the identity store.</p>"
+        "IdentityStoreId":{
+          "shape":"IdentityStoreId",
+          "documentation":"<p>The globally unique identifier for the identity store.</p>"
         },
         "UserId":{
           "shape":"ResourceId",
           "documentation":"<p>The identifier for a user in the identity store.</p>"
         },
+        "UserName":{
+          "shape":"UserName",
+          "documentation":"<p>A unique string used to identify the user. The length limit is 128 characters. This value can consist of letters, accented characters, symbols, numbers, and punctuation. This value is specified at the time the user is created and stored as an attribute of the user object in the identity store.</p>"
+        },
         "ExternalIds":{
           "shape":"ExternalIds",
           "documentation":"<p>A list of <code>ExternalId</code> objects that contains the identifiers issued to this resource by an external identity provider.</p>"
@@ -1635,7 +1813,7 @@
         },
         "DisplayName":{
           "shape":"SensitiveStringType",
-          "documentation":"<p>A string containing the name of the user that is formatted for display when the user is referenced. For example, \"John Doe.\"</p>"
+          "documentation":"<p>A string containing the name of the user that is formatted for display when the user is referenced. For example, \"John Doe.\"</p> <p>Prefix search supports a maximum of 1,000 characters for the string.</p>"
         },
         "NickName":{
           "shape":"SensitiveStringType",
@@ -1677,9 +1855,37 @@
           "shape":"SensitiveStringType",
           "documentation":"<p>A string containing the time zone of the user.</p>"
         },
-        "IdentityStoreId":{
-          "shape":"IdentityStoreId",
-          "documentation":"<p>The globally unique identifier for the identity store.</p>"
+        "UserStatus":{
+          "shape":"UserStatus",
+          "documentation":"<p>The current status of the user account.</p>"
+        },
+        "Photos":{
+          "shape":"Photos",
+          "documentation":"<p>A list of photos associated with the user. Users can have up to 3 photos with metadata including type, display name, and primary designation.</p>"
+        },
+        "Website":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's personal website or blog URL. This field stores website information for personal or professional use.</p>"
+        },
+        "Birthdate":{
+          "shape":"SensitiveStringType",
+          "documentation":"<p>The user's birthdate in YYYY-MM-DD format. This field stores personal birthdate information for the user.</p>"
+        },
+        "CreatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the user was created.</p>"
+        },
+        "CreatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that created the user.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DateType",
+          "documentation":"<p>The date and time the user was last updated.</p>"
+        },
+        "UpdatedBy":{
+          "shape":"StringType",
+          "documentation":"<p>The identifier of the user or system that last updated the user.</p>"
         }
       },
       "documentation":"<p>A user object that contains the metadata and attributes for a specified user.</p>"
@@ -1691,6 +1897,13 @@
       "pattern":"[\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+",
       "sensitive":true
     },
+    "UserStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "Users":{
       "type":"list",
       "member":{"shape":"User"}
@@ -1702,11 +1915,24 @@
         "RequestId":{
           "shape":"RequestId",
           "documentation":"<p>The identifier for each request. This value is a globally unique ID that is generated by the identity store service for each sent request, and is then returned inside the exception if the request fails.</p>"
+        },
+        "Reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>Indicates the reason for the validation error when the service is unable to access a Customer Managed KMS key. For non-KMS permission errors, this field is not included.</p>"
         }
       },
       "documentation":"<p>The request failed because it contains a syntax error.</p>",
       "exception":true
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "KMS_INVALID_ARN",
+        "KMS_INVALID_KEY_USAGE",
+        "KMS_INVALID_STATE",
+        "KMS_DISABLED"
+      ]
     }
   },
-  "documentation":"<p>The Identity Store service used by IAM Identity Center provides a single place to retrieve all of your identities (users and groups). For more information, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\">IAM Identity Center User Guide</a>.</p> <p>This reference guide describes the identity store operations that you can call programmatically and includes detailed information about data types and errors.</p> <note> <p>IAM Identity Center uses the <code>sso</code> and <code>identitystore</code> API namespaces.</p> </note>"
+  "documentation":"<p>The Identity Store service used by IAM Identity Center provides a single place to retrieve all of your identities (users and groups). For more information, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\"> IAM Identity Center User Guide</a>.</p> <p>This reference guide describes the identity store operations that you can call programmatically and includes detailed information about data types and errors.</p> <note> <p> IAM Identity Center uses the <code>sso</code>, <code>sso-directory</code>, and <code>identitystore</code> API namespaces. The <code>sso-directory</code> and <code>identitystore</code> namespaces authorize access to data in the Identity Store. Make sure your policies with IAM actions from these two namespaces are consistent to avoid conflicting authorization to the same data.</p> </note>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.json 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,129 @@
 {
-  "pagination": {}
+  "pagination": {
+    "ListComponentBuildVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "componentSummaryList"
+    },
+    "ListComponents": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "componentVersionList"
+    },
+    "ListContainerRecipes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "containerRecipeSummaryList"
+    },
+    "ListDistributionConfigurations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "distributionConfigurationSummaryList"
+    },
+    "ListImageBuildVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imageSummaryList"
+    },
+    "ListImagePackages": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imagePackageList"
+    },
+    "ListImagePipelineImages": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imageSummaryList"
+    },
+    "ListImagePipelines": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imagePipelineList"
+    },
+    "ListImageRecipes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imageRecipeSummaryList"
+    },
+    "ListImageScanFindingAggregations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "result_key": "responses"
+    },
+    "ListImageScanFindings": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "findings"
+    },
+    "ListImages": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "imageVersionList"
+    },
+    "ListInfrastructureConfigurations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "infrastructureConfigurationSummaryList"
+    },
+    "ListLifecycleExecutionResources": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "resources"
+    },
+    "ListLifecycleExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "lifecycleExecutions"
+    },
+    "ListLifecyclePolicies": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "lifecyclePolicySummaryList"
+    },
+    "ListWaitingWorkflowSteps": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "steps"
+    },
+    "ListWorkflowBuildVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "workflowSummaryList"
+    },
+    "ListWorkflowExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "workflowExecutions"
+    },
+    "ListWorkflowStepExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "steps"
+    },
+    "ListWorkflows": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "workflowVersionList"
+    }
+  }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,95 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "ListComponentBuildVersions": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListComponents": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListContainerRecipes": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListDistributionConfigurations": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImageBuildVersions": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImagePackages": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImagePipelineImages": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImagePipelines": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImageRecipes": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImageScanFindingAggregations": {
+        "non_aggregate_keys": [
+          "requestId",
+          "aggregationType"
+        ]
+      },
+      "ListImageScanFindings": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListImages": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListInfrastructureConfigurations": {
+        "non_aggregate_keys": [
+          "requestId"
+        ]
+      },
+      "ListLifecycleExecutionResources": {
+        "non_aggregate_keys": [
+          "lifecycleExecutionId",
+          "lifecycleExecutionState"
+        ]
+      },
+      "ListWorkflowExecutions": {
+        "non_aggregate_keys": [
+          "requestId",
+          "imageBuildVersionArn",
+          "message"
+        ]
+      },
+      "ListWorkflowStepExecutions": {
+        "non_aggregate_keys": [
+          "requestId",
+          "workflowBuildVersionArn",
+          "workflowExecutionId",
+          "imageBuildVersionArn",
+          "message"
+        ]
+      }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/service-2.json 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/imagebuilder/2019-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/imagebuilder/2019-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1546,7 +1546,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The KMS key identifier used to encrypt the distributed image.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the KMS key used to encrypt the distributed image. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "launchPermission":{
           "shape":"LaunchPermissionConfiguration",
@@ -1566,6 +1566,22 @@
       "pattern":"^[-_A-Za-z0-9{][-_A-Za-z0-9\\s:{}\\.]+[-_A-Za-z0-9}]$"
     },
     "Arn":{"type":"string"},
+    "AutoDisableFailureCount":{
+      "type":"integer",
+      "max":10,
+      "min":1
+    },
+    "AutoDisablePolicy":{
+      "type":"structure",
+      "required":["failureCount"],
+      "members":{
+        "failureCount":{
+          "shape":"AutoDisableFailureCount",
+          "documentation":"<p>The number of consecutive scheduled image pipeline executions that must fail before Image Builder automatically disables the pipeline.</p>"
+        }
+      },
+      "documentation":"<p>Defines the rules by which an image pipeline is automatically disabled when it fails.</p>"
+    },
     "Boolean":{"type":"boolean"},
     "BuildType":{
       "type":"string",
@@ -1714,7 +1730,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The KMS key identifier used to encrypt the component.</p>"
+          "documentation":"<p>The KMS key identifier used to encrypt the component. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "encrypted":{
           "shape":"NullableBoolean",
@@ -2009,6 +2025,10 @@
       "type":"list",
       "member":{"shape":"ComponentVersion"}
     },
+    "ConsecutiveFailures":{
+      "type":"integer",
+      "min":0
+    },
     "Container":{
       "type":"structure",
       "members":{
@@ -2091,7 +2111,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>Identifies which KMS key is used to encrypt the container image for distribution to the target Region.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies which KMS key is used to encrypt the container image for distribution to the target Region. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "encrypted":{
           "shape":"NullableBoolean",
@@ -2099,7 +2119,7 @@
         },
         "parentImage":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The base image for the container recipe.</p>"
+          "documentation":"<p>The base image for customizations specified in the container recipe. This can contain an Image Builder image resource ARN or a container image URI, for example <code>amazonlinux:latest</code>.</p>"
         },
         "dateCreated":{
           "shape":"DateTime",
@@ -2155,6 +2175,10 @@
           "shape":"DateTime",
           "documentation":"<p>The date when this container recipe was created.</p>"
         },
+        "instanceImage":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The base image for a container build and test instance. This can contain an AMI ID or it can specify an Amazon Web Services Systems Manager (SSM) Parameter Store Parameter, prefixed by <code>ssm:</code>, followed by the parameter name or ARN.</p> <p>If not specified, Image Builder uses the appropriate ECS-optimized AMI as a base image.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Tags that are attached to the container recipe.</p>"
@@ -2217,7 +2241,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the KMS key that is used to encrypt this component.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the KMS key used to encrypt this component. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -2317,7 +2341,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>Identifies which KMS key is used to encrypt the Dockerfile template.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies which KMS key is used to encrypt the Dockerfile template. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -2459,6 +2483,10 @@
         "executionRole":{
           "shape":"RoleNameOrArn",
           "documentation":"<p>The name or Amazon Resource Name (ARN) for the IAM role you create that grants Image Builder access to perform workflow actions.</p>"
+        },
+        "loggingConfiguration":{
+          "shape":"PipelineLoggingConfiguration",
+          "documentation":"<p>Define logging configuration for the image build process.</p>"
         }
       }
     },
@@ -2507,7 +2535,7 @@
         },
         "parentImage":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The base image of the image recipe. The value of the string can be the ARN of the base image or an AMI ID. The format for the ARN follows this example: <code>arn:aws:imagebuilder:us-west-2:aws:image/windows-server-2016-english-full-base-x86/x.x.x</code>. You can provide the specific version that you want to use, or you can use a wildcard in all of the fields. If you enter an AMI ID for the string value, you must have access to the AMI, and the AMI must be in the same Region in which you are using Image Builder.</p>"
+          "documentation":"<p>The base image for customizations specified in the image recipe. You can specify the parent image using one of the following options:</p> <ul> <li> <p>AMI ID</p> </li> <li> <p>Image Builder image Amazon Resource Name (ARN)</p> </li> <li> <p>Amazon Web Services Systems Manager (SSM) Parameter Store Parameter, prefixed by <code>ssm:</code>, followed by the parameter name or ARN.</p> </li> <li> <p>Amazon Web Services Marketplace product ID</p> </li> </ul> <p>If you enter an AMI ID or an SSM parameter that contains the AMI ID, you must have access to the AMI, and the AMI must be in the source Region.</p>"
         },
         "blockDeviceMappings":{
           "shape":"InstanceBlockDeviceMappings",
@@ -2525,6 +2553,10 @@
           "shape":"AdditionalInstanceConfiguration",
           "documentation":"<p>Specify additional settings and launch scripts for your build instances.</p>"
         },
+        "amiTags":{
+          "shape":"TagMap",
+          "documentation":"<p>Tags that are applied to the AMI that Image Builder creates during the Build phase prior to image distribution.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>",
@@ -2600,6 +2632,10 @@
         "executionRole":{
           "shape":"RoleNameOrArn",
           "documentation":"<p>The name or Amazon Resource Name (ARN) for the IAM role you create that grants Image Builder access to perform workflow actions.</p>"
+        },
+        "loggingConfiguration":{
+          "shape":"ImageLoggingConfiguration",
+          "documentation":"<p>Define logging configuration for the image build process.</p>"
         }
       }
     },
@@ -2806,7 +2842,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the KMS key that is used to encrypt this workflow resource.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the KMS key used to encrypt this workflow resource. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -3168,6 +3204,10 @@
         "fastLaunchConfigurations":{
           "shape":"FastLaunchConfigurationList",
           "documentation":"<p>The Windows faster-launching configurations to use for AMI distribution.</p>"
+        },
+        "ssmParameterConfigurations":{
+          "shape":"SsmParameterConfigurationList",
+          "documentation":"<p>Contains settings to update Amazon Web Services Systems Manager (SSM) Parameter Store Parameters with output AMI IDs from the build by target Region.</p>"
         }
       },
       "documentation":"<p>Defines the settings for a specific Region.</p>"
@@ -3280,7 +3320,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>Use to configure the KMS key to use when encrypting the device.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the KMS key to use when encrypting the device. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "snapshotId":{
           "shape":"NonEmptyString",
@@ -4112,9 +4152,13 @@
         "workflows":{
           "shape":"WorkflowConfigurationList",
           "documentation":"<p>Contains the build and test workflows that are associated with the image.</p>"
+        },
+        "loggingConfiguration":{
+          "shape":"ImageLoggingConfiguration",
+          "documentation":"<p>The logging configuration that's defined for the image. Image Builder uses the defined settings to direct execution log output during image creation.</p>"
         }
       },
-      "documentation":"<p>An Image Builder image. You must specify exactly one recipe for the image – either a container recipe (<code>containerRecipe</code>), which creates a container image, or an image recipe (<code>imageRecipe</code>), which creates an AMI.</p>"
+      "documentation":"<p>An Image Builder image resource that keeps track of all of the settings used to create, configure, and distribute output for that image. You must specify exactly one recipe for the image – either a container recipe (<code>containerRecipe</code>), which creates a container image, or an image recipe (<code>imageRecipe</code>), which creates an AMI.</p>"
     },
     "ImageAggregation":{
       "type":"structure",
@@ -4143,6 +4187,16 @@
       "type":"string",
       "pattern":"^arn:aws[^:]*:imagebuilder:[^:]+:(?:[0-9]{12}|aws(?:-[a-z-]+)?):(?:image-recipe|container-recipe|infrastructure-configuration|distribution-configuration|component|image|image-pipeline|lifecycle-policy|workflow\\/(?:build|test|distribution))/[a-z0-9-_]+(?:/(?:(?:x|[0-9]+)\\.(?:x|[0-9]+)\\.(?:x|[0-9]+))(?:/[0-9]+)?)?$"
     },
+    "ImageLoggingConfiguration":{
+      "type":"structure",
+      "members":{
+        "logGroupName":{
+          "shape":"LogGroupName",
+          "documentation":"<p>The log group name that Image Builder uses for image creation. If not specified, the log group name defaults to <code>/aws/imagebuilder/image-name</code>.</p>"
+        }
+      },
+      "documentation":"<p>The logging configuration that's defined for the image. Image Builder uses the defined settings to direct execution log output during image creation.</p>"
+    },
     "ImagePackage":{
       "type":"structure",
       "members":{
@@ -4224,6 +4278,10 @@
           "shape":"DateTime",
           "documentation":"<p>This is no longer supported, and does not return a value.</p>"
         },
+        "lastRunStatus":{
+          "shape":"ImageStatus",
+          "documentation":"<p>The status of the last image that this pipeline built, such as <code>BUILDING</code>, <code>TESTING</code>, <code>FAILED</code>, or <code>AVAILABLE</code>.</p>"
+        },
         "dateNextRun":{
           "shape":"DateTime",
           "documentation":"<p>The next date when the pipeline is scheduled to run.</p>"
@@ -4243,6 +4301,14 @@
         "workflows":{
           "shape":"WorkflowConfigurationList",
           "documentation":"<p>Contains the workflows that run for the image pipeline.</p>"
+        },
+        "loggingConfiguration":{
+          "shape":"PipelineLoggingConfiguration",
+          "documentation":"<p>Defines logging configuration for the output image.</p>"
+        },
+        "consecutiveFailures":{
+          "shape":"ConsecutiveFailures",
+          "documentation":"<p>Image Builder tracks the number of consecutive failures for scheduled pipeline executions and takes one of the following actions each time it runs on a schedule:</p> <ul> <li> <p>If the pipeline execution is successful, the number of consecutive failures resets to zero.</p> </li> <li> <p>If the pipeline execution fails, Image Builder increments the number of consecutive failures. If the failure count exceeds the limit defined in the <code>AutoDisablePolicy</code>, Image Builder disables the pipeline.</p> </li> </ul> <p>The consecutive failure count is also reset to zero under the following conditions:</p> <ul> <li> <p>The pipeline runs manually and succeeds.</p> </li> <li> <p>The pipeline configuration is updated.</p> </li> </ul> <p>If the pipeline runs manually and fails, the count remains the same. The next scheduled run continues to increment where it left off before.</p>"
         }
       },
       "documentation":"<p>Details of an image pipeline.</p>"
@@ -4306,7 +4372,7 @@
         },
         "parentImage":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The base image of the image recipe.</p>"
+          "documentation":"<p>The base image for customizations specified in the image recipe. You can specify the parent image using one of the following options:</p> <ul> <li> <p>AMI ID</p> </li> <li> <p>Image Builder image Amazon Resource Name (ARN)</p> </li> <li> <p>Amazon Web Services Systems Manager (SSM) Parameter Store Parameter, prefixed by <code>ssm:</code>, followed by the parameter name or ARN.</p> </li> <li> <p>Amazon Web Services Marketplace product ID</p> </li> </ul>"
         },
         "blockDeviceMappings":{
           "shape":"InstanceBlockDeviceMappings",
@@ -4327,6 +4393,10 @@
         "additionalInstanceConfiguration":{
           "shape":"AdditionalInstanceConfiguration",
           "documentation":"<p>Before you create a new AMI, Image Builder launches temporary Amazon EC2 instances to build and test your image configuration. Instance configuration adds a layer of control over those instances. You can define settings and add scripts to run when an instance is launched from your AMI.</p>"
+        },
+        "amiTags":{
+          "shape":"TagMap",
+          "documentation":"<p>Tags that are applied to the AMI that Image Builder creates during the Build phase prior to image distribution.</p>"
         }
       },
       "documentation":"<p>An image recipe.</p>"
@@ -4634,6 +4704,10 @@
         "lifecycleExecutionId":{
           "shape":"LifecycleExecutionId",
           "documentation":"<p>Identifies the last runtime instance of the lifecycle policy to take action on the image.</p>"
+        },
+        "loggingConfiguration":{
+          "shape":"ImageLoggingConfiguration",
+          "documentation":"<p>The logging configuration that's defined for the image.</p>"
         }
       },
       "documentation":"<p>An image summary.</p>"
@@ -4775,7 +4849,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ID of the KMS key that should be used to encrypt this component.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the KMS key used to encrypt this component. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -4849,6 +4923,10 @@
           "shape":"Uri",
           "documentation":"<p>The <code>uri</code> of the ISO disk file that's stored in Amazon S3.</p>"
         },
+        "loggingConfiguration":{
+          "shape":"ImageLoggingConfiguration",
+          "documentation":"<p>Define logging configuration for the image build process.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Tags that are attached to image resources created from the import.</p>"
@@ -4907,6 +4985,10 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The <code>importTaskId</code> (API) or <code>ImportTaskId</code> (CLI) from the Amazon EC2 VM import process. Image Builder retrieves information from the import process to pull in the AMI that is created from the VM source as the base image for your recipe.</p>"
         },
+        "loggingConfiguration":{
+          "shape":"ImageLoggingConfiguration",
+          "documentation":"<p>Define logging configuration for the image build process.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Tags that are attached to the import resources.</p>"
@@ -5122,7 +5204,7 @@
       "members":{
         "image":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The AMI ID to use as the base image for a container build and test instance. If not specified, Image Builder will use the appropriate ECS-optimized AMI as a base image.</p>"
+          "documentation":"<p>The base image for a container build and test instance. This can contain an AMI ID or it can specify an Amazon Web Services Systems Manager (SSM) Parameter Store Parameter, prefixed by <code>ssm:</code>, followed by the parameter name or ARN.</p> <p>If not specified, Image Builder uses the appropriate ECS-optimized AMI as a base image.</p>"
         },
         "blockDeviceMappings":{
           "shape":"InstanceBlockDeviceMappings",
@@ -5801,7 +5883,6 @@
     },
     "ListComponentBuildVersionsRequest":{
       "type":"structure",
-      "required":["componentVersionArn"],
       "members":{
         "componentVersionArn":{
           "shape":"ComponentVersionArn",
@@ -5809,7 +5890,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -5852,7 +5933,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -5891,7 +5972,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -5926,7 +6007,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -5954,7 +6035,6 @@
     },
     "ListImageBuildVersionsRequest":{
       "type":"structure",
-      "required":["imageVersionArn"],
       "members":{
         "imageVersionArn":{
           "shape":"ImageVersionArn",
@@ -5966,7 +6046,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6002,7 +6082,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6042,7 +6122,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6077,7 +6157,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6108,7 +6188,7 @@
       "members":{
         "owner":{
           "shape":"Ownership",
-          "documentation":"<p>The owner defines which image recipes you want to list. By default, this request will only show image recipes owned by your account. You can use this field to specify if you want to view image recipes owned by yourself, by Amazon, or those image recipes that have been shared with you by other customers.</p>"
+          "documentation":"<p>You can specify the recipe owner to filter results by that owner. By default, this request will only show image recipes owned by your account. To filter by a different owner, specify one of the <code>Valid Values</code> that are listed for this parameter.</p>"
         },
         "filters":{
           "shape":"FilterList",
@@ -6116,7 +6196,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6134,7 +6214,7 @@
         },
         "imageRecipeSummaryList":{
           "shape":"ImageRecipeSummaryList",
-          "documentation":"<p>The list of image pipelines.</p>"
+          "documentation":"<p>A list of <code>ImageRecipeSummary</code> objects that contain identifying characteristics for the image recipe, such as the name, the Amazon Resource Name (ARN), and the date created, along with other key details.</p>"
         },
         "nextToken":{
           "shape":"PaginationToken",
@@ -6182,7 +6262,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6225,7 +6305,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6264,7 +6344,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6304,7 +6384,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6340,7 +6420,7 @@
       "members":{
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6375,7 +6455,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6423,7 +6503,7 @@
       "members":{
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6447,7 +6527,6 @@
     },
     "ListWorkflowBuildVersionsRequest":{
       "type":"structure",
-      "required":["workflowVersionArn"],
       "members":{
         "workflowVersionArn":{
           "shape":"WorkflowWildcardVersionArn",
@@ -6455,7 +6534,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6483,7 +6562,7 @@
       "members":{
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6527,7 +6606,7 @@
       "members":{
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6590,7 +6669,7 @@
         },
         "maxResults":{
           "shape":"RestrictedInteger",
-          "documentation":"<p>The maximum items to return in a request.</p>",
+          "documentation":"<p>Specify the maximum number of items to return in a request.</p>",
           "box":true
         },
         "nextToken":{
@@ -6612,6 +6691,12 @@
         }
       }
     },
+    "LogGroupName":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"^[a-zA-Z0-9\\-_/\\.]{1,512}$"
+    },
     "Logging":{
       "type":"structure",
       "members":{
@@ -6781,6 +6866,20 @@
         "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE"
       ]
     },
+    "PipelineLoggingConfiguration":{
+      "type":"structure",
+      "members":{
+        "imageLogGroupName":{
+          "shape":"LogGroupName",
+          "documentation":"<p>The log group name that Image Builder uses for image creation. If not specified, the log group name defaults to <code>/aws/imagebuilder/image-name</code>.</p>"
+        },
+        "pipelineLogGroupName":{
+          "shape":"LogGroupName",
+          "documentation":"<p>The log group name that Image Builder uses for the log output during creation of a new pipeline. If not specified, the pipeline log group name defaults to <code>/aws/imagebuilder/pipeline/pipeline-name</code>.</p>"
+        }
+      },
+      "documentation":"<p>The logging configuration that's defined for pipeline execution.</p>"
+    },
     "PipelineStatus":{
       "type":"string",
       "enum":[
@@ -7158,6 +7257,10 @@
         "pipelineExecutionStartCondition":{
           "shape":"PipelineExecutionStartCondition",
           "documentation":"<p>The start condition configures when the pipeline should trigger a new image build, as follows. If no value is set Image Builder defaults to <code>EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE</code>.</p> <ul> <li> <p> <code>EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE</code> (default) – When you use semantic version filters on the base image or components in your image recipe, EC2 Image Builder builds a new image only when there are new versions of the base image or components in your recipe that match the filter.</p> <note> <p>For semantic version syntax, see <a href=\"https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html\">CreateComponent</a>.</p> </note> </li> <li> <p> <code>EXPRESSION_MATCH_ONLY</code> – This condition builds a new image every time the CRON expression matches the current time.</p> </li> </ul>"
+        },
+        "autoDisablePolicy":{
+          "shape":"AutoDisablePolicy",
+          "documentation":"<p>The policy that configures when Image Builder should automatically disable a pipeline that is failing.</p>"
         }
       },
       "documentation":"<p>A schedule configures when and how often a pipeline will automatically create a new image.</p>"
@@ -7270,6 +7373,42 @@
       "pattern":"^arn:aws[^:]*:sns:[^:]+:[0-9]{12}:[a-zA-Z0-9-_]{1,256}$"
     },
     "SourceLayerHash":{"type":"string"},
+    "SsmParameterConfiguration":{
+      "type":"structure",
+      "required":["parameterName"],
+      "members":{
+        "amiAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>Specify the account that will own the Parameter in a given Region. During distribution, this account must be specified in distribution settings as a target account for the Region.</p>"
+        },
+        "parameterName":{
+          "shape":"SsmParameterName",
+          "documentation":"<p>This is the name of the Parameter in the target Region or account. The image distribution creates the Parameter if it doesn't already exist. Otherwise, it updates the parameter.</p>"
+        },
+        "dataType":{
+          "shape":"SsmParameterDataType",
+          "documentation":"<p>The data type specifies what type of value the Parameter contains. We recommend that you use data type <code>aws:ec2:image</code>.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for a single Parameter in the Amazon Web Services Systems Manager (SSM) Parameter Store in a given Region.</p>"
+    },
+    "SsmParameterConfigurationList":{
+      "type":"list",
+      "member":{"shape":"SsmParameterConfiguration"}
+    },
+    "SsmParameterDataType":{
+      "type":"string",
+      "enum":[
+        "text",
+        "aws:ec2:image"
+      ]
+    },
+    "SsmParameterName":{
+      "type":"string",
+      "max":1011,
+      "min":1,
+      "pattern":"^[a-zA-Z0-9_.\\-\\/]+$"
+    },
     "StartImagePipelineExecutionRequest":{
       "type":"structure",
       "required":[
@@ -7285,6 +7424,10 @@
           "shape":"ClientToken",
           "documentation":"<p>Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html\">Ensuring idempotency</a> in the <i>Amazon EC2 API Reference</i>.</p>",
           "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>Specify tags for Image Builder to apply to the image resource that's created When it starts pipeline execution.</p>"
         }
       }
     },
@@ -7366,7 +7509,7 @@
       "members":{
         "uninstallAfterBuild":{
           "shape":"NullableBoolean",
-          "documentation":"<p>Controls whether the Systems Manager agent is removed from your final build image, prior to creating the new AMI. If this is set to true, then the agent is removed from the final image. If it's set to false, then the agent is left in, so that it is included in the new AMI. The default value is false.</p>"
+          "documentation":"<p>Controls whether the Systems Manager agent is removed from your final build image, prior to creating the new AMI. If this is set to true, then the agent is removed from the final image. If it's set to false, then the agent is left in, so that it is included in the new AMI. default value is false.</p> <p>The default behavior of uninstallAfterBuild is to remove the SSM Agent if it was installed by EC2 Image Builder</p>"
         }
       },
       "documentation":"<p>Contains settings for the Systems Manager agent on your build instance.</p>"
@@ -7411,8 +7554,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7453,7 +7595,7 @@
       "type":"string",
       "max":100,
       "min":3,
-      "pattern":"[a-zA-Z0-9]{2,}(?:\\/[a-zA-z0-9-_+]+)*"
+      "pattern":"[a-zA-Z0-9]{2,}(?:\\/[a-zA-Z0-9-_+]+)*"
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -7478,8 +7620,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDistributionConfigurationRequest":{
       "type":"structure",
@@ -7586,6 +7727,10 @@
           "shape":"WorkflowConfigurationList",
           "documentation":"<p>Contains the workflows to run for the pipeline.</p>"
         },
+        "loggingConfiguration":{
+          "shape":"PipelineLoggingConfiguration",
+          "documentation":"<p>Update logging configuration for the output image that's created when the pipeline runs.</p>"
+        },
         "executionRole":{
           "shape":"RoleNameOrArn",
           "documentation":"<p>The name or Amazon Resource Name (ARN) for the IAM role you create that grants Image Builder access to perform workflow actions.</p>"
@@ -7869,7 +8014,7 @@
         },
         "kmsKeyId":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The KMS key identifier used to encrypt the workflow resource.</p>"
+          "documentation":"<p>The KMS key identifier used to encrypt the workflow resource. This can be either the Key ARN or the Alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "dateCreated":{
           "shape":"DateTime",
diff -pruN 2.23.6-1/awscli/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector/2016-02-16/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/inspector/2016-02-16/service-2.json 2.31.35-1/awscli/botocore/data/inspector/2016-02-16/service-2.json
--- 2.23.6-1/awscli/botocore/data/inspector/2016-02-16/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector/2016-02-16/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"inspector",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Inspector",
     "serviceId":"Inspector",
     "signatureVersion":"v4",
     "targetPrefix":"InspectorService",
-    "uid":"inspector-2016-02-16"
+    "uid":"inspector-2016-02-16",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddAttributesToFindings":{
diff -pruN 2.23.6-1/awscli/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector-scan/2023-08-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/paginators-1.json 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -87,6 +87,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "scans"
+    },
+    "GetClustersForImage": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "cluster"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/service-2.json 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/inspector2/2020-06-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/inspector2/2020-06-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,8 +2,8 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-06-08",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"inspector2",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceAbbreviation":"Inspector2",
@@ -11,8 +11,7 @@
     "serviceId":"Inspector2",
     "signatureVersion":"v4",
     "signingName":"inspector2",
-    "uid":"inspector2-2020-06-08",
-    "auth":["aws.auth#sigv4"]
+    "uid":"inspector2-2020-06-08"
   },
   "operations":{
     "AssociateMember":{
@@ -31,7 +30,45 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p> Associates an Amazon Web Services account with an Amazon Inspector delegated administrator. An HTTP 200 response indicates the association was started but doesn’t indicate whether it completed. You can check if the association completed using <a href=\"https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListMembers.html\">ListMembers</a> for multiple accounts or <a href=\"https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetMember.html\">GetMembers</a> for a single account. An HTTP 402 response indicates the association failed because the organization size exceeded its limit. For information on limits, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/quotas.html\">Amazon Inspector quotas</a>. </p>"
+      "documentation":"<p>Associates an Amazon Web Services account with an Amazon Inspector delegated administrator. An HTTP 200 response indicates the association was successfully started, but doesn’t indicate whether it was completed. You can check if the association completed by using <a href=\"https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListMembers.html\">ListMembers</a> for multiple accounts or <a href=\"https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetMember.html\">GetMembers</a> for a single account.</p>"
+    },
+    "BatchAssociateCodeSecurityScanConfiguration":{
+      "name":"BatchAssociateCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/batch/associate",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchAssociateCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"BatchAssociateCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Associates multiple code repositories with an Amazon Inspector code security scan configuration.</p>"
+    },
+    "BatchDisassociateCodeSecurityScanConfiguration":{
+      "name":"BatchDisassociateCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/batch/disassociate",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchDisassociateCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"BatchDisassociateCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Disassociates multiple code repositories from an Amazon Inspector code security scan configuration.</p>"
     },
     "BatchGetAccountStatus":{
       "name":"BatchGetAccountStatus",
@@ -190,6 +227,44 @@
       ],
       "documentation":"<p>Creates a CIS scan configuration.</p>"
     },
+    "CreateCodeSecurityIntegration":{
+      "name":"CreateCodeSecurityIntegration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/integration/create",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateCodeSecurityIntegrationRequest"},
+      "output":{"shape":"CreateCodeSecurityIntegrationResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a code security integration with a source code repository provider.</p> <p>After calling the <code>CreateCodeSecurityIntegration</code> operation, you complete authentication and authorization with your provider. Next you call the <code>UpdateCodeSecurityIntegration</code> operation to provide the <code>details</code> to complete the integration setup</p>"
+    },
+    "CreateCodeSecurityScanConfiguration":{
+      "name":"CreateCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/create",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"CreateCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a scan configuration for code security scanning.</p>"
+    },
     "CreateFilter":{
       "name":"CreateFilter",
       "http":{
@@ -264,6 +339,42 @@
       ],
       "documentation":"<p>Deletes a CIS scan configuration.</p>"
     },
+    "DeleteCodeSecurityIntegration":{
+      "name":"DeleteCodeSecurityIntegration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/integration/delete",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCodeSecurityIntegrationRequest"},
+      "output":{"shape":"DeleteCodeSecurityIntegrationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a code security integration.</p>"
+    },
+    "DeleteCodeSecurityScanConfiguration":{
+      "name":"DeleteCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/delete",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"DeleteCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Deletes a code security scan configuration.</p>"
+    },
     "DeleteFilter":{
       "name":"DeleteFilter",
       "http":{
@@ -425,6 +536,78 @@
       ],
       "documentation":"<p>Retrieves CIS scan result details.</p>"
     },
+    "GetClustersForImage":{
+      "name":"GetClustersForImage",
+      "http":{
+        "method":"POST",
+        "requestUri":"/cluster/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetClustersForImageRequest"},
+      "output":{"shape":"GetClustersForImageResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of clusters and metadata associated with an image.</p>"
+    },
+    "GetCodeSecurityIntegration":{
+      "name":"GetCodeSecurityIntegration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/integration/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCodeSecurityIntegrationRequest"},
+      "output":{"shape":"GetCodeSecurityIntegrationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a code security integration.</p>"
+    },
+    "GetCodeSecurityScan":{
+      "name":"GetCodeSecurityScan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCodeSecurityScanRequest"},
+      "output":{"shape":"GetCodeSecurityScanResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a specific code security scan.</p>"
+    },
+    "GetCodeSecurityScanConfiguration":{
+      "name":"GetCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/get",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"GetCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about a code security scan configuration.</p>"
+    },
     "GetConfiguration":{
       "name":"GetConfiguration",
       "http":{
@@ -634,6 +817,59 @@
       ],
       "documentation":"<p>Returns a CIS scan list.</p>"
     },
+    "ListCodeSecurityIntegrations":{
+      "name":"ListCodeSecurityIntegrations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/integration/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCodeSecurityIntegrationsRequest"},
+      "output":{"shape":"ListCodeSecurityIntegrationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all code security integrations in your account.</p>"
+    },
+    "ListCodeSecurityScanConfigurationAssociations":{
+      "name":"ListCodeSecurityScanConfigurationAssociations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/associations/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCodeSecurityScanConfigurationAssociationsRequest"},
+      "output":{"shape":"ListCodeSecurityScanConfigurationAssociationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the associations between code repositories and Amazon Inspector code security scan configurations.</p>"
+    },
+    "ListCodeSecurityScanConfigurations":{
+      "name":"ListCodeSecurityScanConfigurations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCodeSecurityScanConfigurationsRequest"},
+      "output":{"shape":"ListCodeSecurityScanConfigurationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all code security scan configurations in your account.</p>"
+    },
     "ListCoverage":{
       "name":"ListCoverage",
       "http":{
@@ -876,6 +1112,25 @@
       "documentation":"<p> Starts a CIS session. This API is used by the Amazon Inspector SSM plugin to communicate with the Amazon Inspector service. The Amazon Inspector SSM plugin calls this API to start a CIS scan session for the scan ID supplied by the service. </p>",
       "idempotent":true
     },
+    "StartCodeSecurityScan":{
+      "name":"StartCodeSecurityScan",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan/start",
+        "responseCode":200
+      },
+      "input":{"shape":"StartCodeSecurityScanRequest"},
+      "output":{"shape":"StartCodeSecurityScanResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Initiates a code security scan on a specified repository.</p>"
+    },
     "StopCisSession":{
       "name":"StopCisSession",
       "http":{
@@ -949,6 +1204,44 @@
       ],
       "documentation":"<p>Updates a CIS scan configuration.</p>"
     },
+    "UpdateCodeSecurityIntegration":{
+      "name":"UpdateCodeSecurityIntegration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/integration/update",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateCodeSecurityIntegrationRequest"},
+      "output":{"shape":"UpdateCodeSecurityIntegrationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing code security integration.</p> <p>After calling the <code>CreateCodeSecurityIntegration</code> operation, you complete authentication and authorization with your provider. Next you call the <code>UpdateCodeSecurityIntegration</code> operation to provide the <code>details</code> to complete the integration setup</p>"
+    },
+    "UpdateCodeSecurityScanConfiguration":{
+      "name":"UpdateCodeSecurityScanConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/codesecurity/scan-configuration/update",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateCodeSecurityScanConfigurationRequest"},
+      "output":{"shape":"UpdateCodeSecurityScanConfigurationResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Updates an existing code security scan configuration.</p>"
+    },
     "UpdateConfiguration":{
       "name":"UpdateConfiguration",
       "http":{
@@ -1062,7 +1355,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
+      "documentation":"<p>You do not have sufficient access to perform this action.</p> <p> For <code>Enable</code>, you receive this error if you attempt to use a feature in an unsupported Amazon Web Services Region. </p>",
       "error":{
         "httpStatusCode":403,
         "senderFault":true
@@ -1073,21 +1366,21 @@
       "type":"structure",
       "required":[
         "accountId",
-        "resourceStatus",
-        "status"
+        "status",
+        "resourceStatus"
       ],
       "members":{
         "accountId":{
           "shape":"AccountId",
           "documentation":"<p>The ID of the Amazon Web Services account.</p>"
         },
-        "resourceStatus":{
-          "shape":"ResourceStatus",
-          "documentation":"<p>Details of the status of Amazon Inspector scans by resource type.</p>"
-        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of Amazon Inspector for the account.</p>"
+        },
+        "resourceStatus":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>Details of the status of Amazon Inspector scans by resource type.</p>"
         }
       },
       "documentation":"<p>An Amazon Web Services account within your environment that Amazon Inspector has been enabled for.</p>"
@@ -1103,13 +1396,13 @@
           "shape":"AggregationResourceType",
           "documentation":"<p>The type of resource.</p>"
         },
-        "sortBy":{
-          "shape":"AccountSortBy",
-          "documentation":"<p>The value to sort by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The sort order (ascending or descending).</p>"
+        },
+        "sortBy":{
+          "shape":"AccountSortBy",
+          "documentation":"<p>The value to sort by.</p>"
         }
       },
       "documentation":"<p>An object that contains details about an aggregation response based on Amazon Web Services accounts.</p>"
@@ -1121,6 +1414,10 @@
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID.</p>"
         },
+        "severityCounts":{
+          "shape":"SeverityCounts",
+          "documentation":"<p>The number of findings by severity.</p>"
+        },
         "exploitAvailableCount":{
           "shape":"Long",
           "documentation":"<p> The number of findings that have an exploit available. </p>"
@@ -1128,10 +1425,6 @@
         "fixAvailableCount":{
           "shape":"Long",
           "documentation":"<p> Details about the number of fixes. </p>"
-        },
-        "severityCounts":{
-          "shape":"SeverityCounts",
-          "documentation":"<p>The number of findings by severity.</p>"
         }
       },
       "documentation":"<p>An aggregation of findings by Amazon Web Services account ID.</p>"
@@ -1140,7 +1433,7 @@
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^\\d{12}$"
+      "pattern":"\\d{12}"
     },
     "AccountIdFilterList":{
       "type":"list",
@@ -1170,21 +1463,21 @@
       "type":"structure",
       "required":[
         "accountId",
-        "resourceState",
-        "state"
+        "state",
+        "resourceState"
       ],
       "members":{
         "accountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID.</p>"
         },
-        "resourceState":{
-          "shape":"ResourceState",
-          "documentation":"<p>An object detailing which resources Amazon Inspector is enabled to scan for the account.</p>"
-        },
         "state":{
           "shape":"State",
           "documentation":"<p>An object detailing the status of Amazon Inspector for the account.</p>"
+        },
+        "resourceState":{
+          "shape":"ResourceState",
+          "documentation":"<p>An object detailing which resources Amazon Inspector is enabled to scan for the account.</p>"
         }
       },
       "documentation":"<p>An object with details the status of an Amazon Web Services account within your Amazon Inspector environment.</p>"
@@ -1231,14 +1524,6 @@
           "shape":"ImageLayerAggregation",
           "documentation":"<p>An object that contains details about an aggregation request based on container image layers.</p>"
         },
-        "lambdaFunctionAggregation":{
-          "shape":"LambdaFunctionAggregation",
-          "documentation":"<p>Returns an object with findings aggregated by Amazon Web Services Lambda function.</p>"
-        },
-        "lambdaLayerAggregation":{
-          "shape":"LambdaLayerAggregation",
-          "documentation":"<p>Returns an object with findings aggregated by Amazon Web Services Lambda layer.</p>"
-        },
         "packageAggregation":{
           "shape":"PackageAggregation",
           "documentation":"<p>An object that contains details about an aggregation request based on operating system package type.</p>"
@@ -1250,6 +1535,18 @@
         "titleAggregation":{
           "shape":"TitleAggregation",
           "documentation":"<p>An object that contains details about an aggregation request based on finding title.</p>"
+        },
+        "lambdaLayerAggregation":{
+          "shape":"LambdaLayerAggregation",
+          "documentation":"<p>Returns an object with findings aggregated by Amazon Web Services Lambda layer.</p>"
+        },
+        "lambdaFunctionAggregation":{
+          "shape":"LambdaFunctionAggregation",
+          "documentation":"<p>Returns an object with findings aggregated by Amazon Web Services Lambda function.</p>"
+        },
+        "codeRepositoryAggregation":{
+          "shape":"CodeRepositoryAggregation",
+          "documentation":"<p>An object that contains details about an aggregation request based on code repositories.</p>"
         }
       },
       "documentation":"<p>Contains details about an aggregation request.</p>",
@@ -1260,7 +1557,8 @@
       "enum":[
         "AWS_EC2_INSTANCE",
         "AWS_ECR_CONTAINER_IMAGE",
-        "AWS_LAMBDA_FUNCTION"
+        "AWS_LAMBDA_FUNCTION",
+        "CODE_REPOSITORY"
       ]
     },
     "AggregationResponse":{
@@ -1290,14 +1588,6 @@
           "shape":"ImageLayerAggregationResponse",
           "documentation":"<p>An object that contains details about an aggregation response based on container image layers.</p>"
         },
-        "lambdaFunctionAggregation":{
-          "shape":"LambdaFunctionAggregationResponse",
-          "documentation":"<p>An aggregation of findings by Amazon Web Services Lambda function.</p>"
-        },
-        "lambdaLayerAggregation":{
-          "shape":"LambdaLayerAggregationResponse",
-          "documentation":"<p>An aggregation of findings by Amazon Web Services Lambda layer.</p>"
-        },
         "packageAggregation":{
           "shape":"PackageAggregationResponse",
           "documentation":"<p>An object that contains details about an aggregation response based on operating system package type.</p>"
@@ -1309,6 +1599,18 @@
         "titleAggregation":{
           "shape":"TitleAggregationResponse",
           "documentation":"<p>An object that contains details about an aggregation response based on finding title.</p>"
+        },
+        "lambdaLayerAggregation":{
+          "shape":"LambdaLayerAggregationResponse",
+          "documentation":"<p>An aggregation of findings by Amazon Web Services Lambda layer.</p>"
+        },
+        "lambdaFunctionAggregation":{
+          "shape":"LambdaFunctionAggregationResponse",
+          "documentation":"<p>An aggregation of findings by Amazon Web Services Lambda function.</p>"
+        },
+        "codeRepositoryAggregation":{
+          "shape":"CodeRepositoryAggregationResponse",
+          "documentation":"<p>An object that contains details about an aggregation response based on code repositories.</p>"
         }
       },
       "documentation":"<p>A structure that contains details about the results of an aggregation type.</p>",
@@ -1331,7 +1633,8 @@
         "IMAGE_LAYER",
         "ACCOUNT",
         "AWS_LAMBDA_FUNCTION",
-        "LAMBDA_LAYER"
+        "LAMBDA_LAYER",
+        "CODE_REPOSITORY"
       ]
     },
     "AmiAggregation":{
@@ -1341,13 +1644,13 @@
           "shape":"StringFilterList",
           "documentation":"<p>The IDs of AMIs to aggregate findings for.</p>"
         },
-        "sortBy":{
-          "shape":"AmiSortBy",
-          "documentation":"<p>The value to sort results by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
+        },
+        "sortBy":{
+          "shape":"AmiSortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on Amazon machine images (AMIs).</p>"
@@ -1356,28 +1659,28 @@
       "type":"structure",
       "required":["ami"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID for the AMI.</p>"
-        },
-        "affectedInstances":{
-          "shape":"Long",
-          "documentation":"<p>The IDs of Amazon EC2 instances using this AMI.</p>"
-        },
         "ami":{
           "shape":"AmiId",
           "documentation":"<p>The ID of the AMI that findings were aggregated for.</p>"
         },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID for the AMI.</p>"
+        },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that contains the count of matched findings per severity.</p>"
+        },
+        "affectedInstances":{
+          "shape":"Long",
+          "documentation":"<p>The IDs of Amazon EC2 instances using this AMI.</p>"
         }
       },
       "documentation":"<p>A response that contains the results of a finding aggregation by AMI.</p>"
     },
     "AmiId":{
       "type":"string",
-      "pattern":"^ami-([a-z0-9]{8}|[a-z0-9]{17}|\\*)$"
+      "pattern":"ami-([a-z0-9]{8}|[a-z0-9]{17}|\\*)"
     },
     "AmiSortBy":{
       "type":"string",
@@ -1406,6 +1709,27 @@
       "max":1011,
       "min":1
     },
+    "AssociateConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "scanConfigurationArn",
+        "resource"
+      ],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration.</p>"
+        },
+        "resource":{"shape":"CodeSecurityResource"}
+      },
+      "documentation":"<p>Contains details about a request to associate a code repository with a scan configuration.</p>"
+    },
+    "AssociateConfigurationRequestList":{
+      "type":"list",
+      "member":{"shape":"AssociateConfigurationRequest"},
+      "max":25,
+      "min":1
+    },
     "AssociateMemberRequest":{
       "type":"structure",
       "required":["accountId"],
@@ -1426,6 +1750,21 @@
         }
       }
     },
+    "AssociationResultStatusCode":{
+      "type":"string",
+      "enum":[
+        "INTERNAL_ERROR",
+        "ACCESS_DENIED",
+        "SCAN_CONFIGURATION_NOT_FOUND",
+        "INVALID_INPUT",
+        "RESOURCE_NOT_FOUND",
+        "QUOTA_EXCEEDED"
+      ]
+    },
+    "AssociationResultStatusMessage":{
+      "type":"string",
+      "min":1
+    },
     "AtigData":{
       "type":"structure",
       "members":{
@@ -1448,6 +1787,10 @@
       },
       "documentation":"<p>The Amazon Web Services Threat Intel Group (ATIG) details for a specific vulnerability.</p>"
     },
+    "AuthorizationUrl":{
+      "type":"string",
+      "sensitive":true
+    },
     "AutoEnable":{
       "type":"structure",
       "required":[
@@ -1469,7 +1812,11 @@
         },
         "lambdaCode":{
           "shape":"Boolean",
-          "documentation":"<p>Represents whether Lambda code scans are automatically enabled for new members of your Amazon Inspector organization. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>Represents whether Lambda code scans are automatically enabled for new members of your Amazon Inspector organization. </p>"
+        },
+        "codeRepository":{
+          "shape":"Boolean",
+          "documentation":"<p>Represents whether code repository scans are automatically enabled for new members of your Amazon Inspector organization.</p>"
         }
       },
       "documentation":"<p>Represents which scan types are automatically enabled for new members of your Amazon Inspector organization.</p>"
@@ -1477,9 +1824,9 @@
     "AwsEc2InstanceDetails":{
       "type":"structure",
       "members":{
-        "iamInstanceProfileArn":{
+        "type":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The IAM instance profile ARN of the Amazon EC2 instance.</p>"
+          "documentation":"<p>The type of the Amazon EC2 instance.</p>"
         },
         "imageId":{
           "shape":"NonEmptyString",
@@ -1497,25 +1844,25 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the key pair used to launch the Amazon EC2 instance.</p>"
         },
-        "launchedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time the Amazon EC2 instance was launched at.</p>"
+        "iamInstanceProfileArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The IAM instance profile ARN of the Amazon EC2 instance.</p>"
         },
-        "platform":{
-          "shape":"Platform",
-          "documentation":"<p>The platform of the Amazon EC2 instance.</p>"
+        "vpcId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The VPC ID of the Amazon EC2 instance.</p>"
         },
         "subnetId":{
           "shape":"NonEmptyString",
           "documentation":"<p>The subnet ID of the Amazon EC2 instance.</p>"
         },
-        "type":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The type of the Amazon EC2 instance.</p>"
+        "launchedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time the Amazon EC2 instance was launched at.</p>"
         },
-        "vpcId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The VPC ID of the Amazon EC2 instance.</p>"
+        "platform":{
+          "shape":"Platform",
+          "documentation":"<p>The platform of the Amazon EC2 instance.</p>"
         }
       },
       "documentation":"<p>Details of the Amazon EC2 instance involved in a finding.</p>"
@@ -1523,33 +1870,41 @@
     "AwsEcrContainerAggregation":{
       "type":"structure",
       "members":{
-        "architectures":{
+        "resourceIds":{
           "shape":"StringFilterList",
-          "documentation":"<p>The architecture of the containers.</p>"
+          "documentation":"<p>The container resource IDs.</p>"
         },
         "imageShas":{
           "shape":"StringFilterList",
           "documentation":"<p>The image SHA values.</p>"
         },
-        "imageTags":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The image tags.</p>"
-        },
         "repositories":{
           "shape":"StringFilterList",
           "documentation":"<p>The container repositories.</p>"
         },
-        "resourceIds":{
+        "architectures":{
           "shape":"StringFilterList",
-          "documentation":"<p>The container resource IDs.</p>"
+          "documentation":"<p>The architecture of the containers.</p>"
         },
-        "sortBy":{
-          "shape":"AwsEcrContainerSortBy",
-          "documentation":"<p>The value to sort by.</p>"
+        "imageTags":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The image tags.</p>"
         },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The sort order (ascending or descending).</p>"
+        },
+        "sortBy":{
+          "shape":"AwsEcrContainerSortBy",
+          "documentation":"<p>The value to sort by.</p>"
+        },
+        "lastInUseAt":{
+          "shape":"DateFilterList",
+          "documentation":"<p>The last time an Amazon ECR image was used in an Amazon ECS task or Amazon EKS pod.</p>"
+        },
+        "inUseCount":{
+          "shape":"NumberFilterList",
+          "documentation":"<p>The number of Amazon ECS tasks or Amazon EKS pods where the Amazon ECR container image is in use.</p>"
         }
       },
       "documentation":"<p>An aggregation of information about Amazon ECR containers.</p>"
@@ -1558,33 +1913,41 @@
       "type":"structure",
       "required":["resourceId"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID of the account that owns the container.</p>"
-        },
-        "architecture":{
-          "shape":"String",
-          "documentation":"<p>The architecture of the container.</p>"
+        "resourceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The resource ID of the container.</p>"
         },
         "imageSha":{
           "shape":"String",
           "documentation":"<p>The SHA value of the container image.</p>"
         },
-        "imageTags":{
-          "shape":"StringList",
-          "documentation":"<p>The container image stags.</p>"
-        },
         "repository":{
           "shape":"String",
           "documentation":"<p>The container repository.</p>"
         },
-        "resourceId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The resource ID of the container.</p>"
+        "architecture":{
+          "shape":"String",
+          "documentation":"<p>The architecture of the container.</p>"
+        },
+        "imageTags":{
+          "shape":"StringList",
+          "documentation":"<p>The container image stags.</p>"
+        },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID of the account that owns the container.</p>"
         },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>The number of finding by severity.</p>"
+        },
+        "lastInUseAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The last time an Amazon ECR image was used in an Amazon ECS task or Amazon EKS pod.</p>"
+        },
+        "inUseCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of Amazon ECS tasks or Amazon EKS pods where the Amazon ECR container image is in use.</p>"
         }
       },
       "documentation":"<p>An aggregation of information about Amazon ECR containers.</p>"
@@ -1592,42 +1955,50 @@
     "AwsEcrContainerImageDetails":{
       "type":"structure",
       "required":[
+        "repositoryName",
         "imageHash",
-        "registry",
-        "repositoryName"
+        "registry"
       ],
       "members":{
-        "architecture":{
+        "repositoryName":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The architecture of the Amazon ECR container image.</p>"
+          "documentation":"<p>The name of the repository the Amazon ECR container image resides in.</p>"
+        },
+        "imageTags":{
+          "shape":"ImageTagList",
+          "documentation":"<p>The image tags attached to the Amazon ECR container image.</p>"
+        },
+        "pushedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time the Amazon ECR container image was pushed.</p>"
         },
         "author":{
           "shape":"String",
           "documentation":"<p>The image author of the Amazon ECR container image.</p>"
         },
+        "architecture":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The architecture of the Amazon ECR container image.</p>"
+        },
         "imageHash":{
           "shape":"ImageHash",
           "documentation":"<p>The image hash of the Amazon ECR container image.</p>"
         },
-        "imageTags":{
-          "shape":"ImageTagList",
-          "documentation":"<p>The image tags attached to the Amazon ECR container image.</p>"
+        "registry":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The registry for the Amazon ECR container image.</p>"
         },
         "platform":{
           "shape":"Platform",
           "documentation":"<p>The platform of the Amazon ECR container image.</p>"
         },
-        "pushedAt":{
+        "lastInUseAt":{
           "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time the Amazon ECR container image was pushed.</p>"
+          "documentation":"<p>The last time an Amazon ECR image was used in an Amazon ECS task or Amazon EKS pod.</p>"
         },
-        "registry":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The registry for the Amazon ECR container image.</p>"
-        },
-        "repositoryName":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The name of the repository the Amazon ECR container image resides in.</p>"
+        "inUseCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of Amazon ECS tasks or Amazon EKS pods where the Amazon ECR container image is in use.</p>"
         }
       },
       "documentation":"<p>The image details of the Amazon ECR container image.</p>"
@@ -1640,55 +2011,136 @@
         "ALL"
       ]
     },
+    "AwsEcsMetadataDetails":{
+      "type":"structure",
+      "required":[
+        "detailsGroup",
+        "taskDefinitionArn"
+      ],
+      "members":{
+        "detailsGroup":{
+          "shape":"AwsEcsMetadataDetailsDetailsGroupString",
+          "documentation":"<p>The details group information for a task in a cluster.</p>"
+        },
+        "taskDefinitionArn":{
+          "shape":"AwsEcsMetadataDetailsTaskDefinitionArnString",
+          "documentation":"<p>The task definition ARN.</p>"
+        }
+      },
+      "documentation":"<p>Metadata about tasks where an image was in use.</p>"
+    },
+    "AwsEcsMetadataDetailsDetailsGroupString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "AwsEcsMetadataDetailsTaskDefinitionArnString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "AwsEksMetadataDetails":{
+      "type":"structure",
+      "members":{
+        "namespace":{
+          "shape":"AwsEksMetadataDetailsNamespaceString",
+          "documentation":"<p>The namespace for an Amazon EKS cluster.</p>"
+        },
+        "workloadInfoList":{
+          "shape":"AwsEksWorkloadInfoList",
+          "documentation":"<p>The list of workloads.</p>"
+        }
+      },
+      "documentation":"<p>The metadata for an Amazon EKS pod where an Amazon ECR image is in use.</p>"
+    },
+    "AwsEksMetadataDetailsNamespaceString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "AwsEksWorkloadInfo":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type"
+      ],
+      "members":{
+        "name":{
+          "shape":"AwsEksWorkloadInfoNameString",
+          "documentation":"<p>The name of the workload.</p>"
+        },
+        "type":{
+          "shape":"AwsEksWorkloadInfoTypeString",
+          "documentation":"<p>The workload type.</p>"
+        }
+      },
+      "documentation":"<p>Information about the workload.</p>"
+    },
+    "AwsEksWorkloadInfoList":{
+      "type":"list",
+      "member":{"shape":"AwsEksWorkloadInfo"},
+      "max":100,
+      "min":0
+    },
+    "AwsEksWorkloadInfoNameString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "AwsEksWorkloadInfoTypeString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "AwsLambdaFunctionDetails":{
       "type":"structure",
       "required":[
-        "codeSha256",
-        "executionRoleArn",
         "functionName",
         "runtime",
-        "version"
+        "codeSha256",
+        "version",
+        "executionRoleArn"
       ],
       "members":{
-        "architectures":{
-          "shape":"ArchitectureList",
-          "documentation":"<p>The instruction set architecture that the Amazon Web Services Lambda function supports. Architecture is a string array with one of the valid values. The default architecture value is <code>x86_64</code>.</p>"
+        "functionName":{
+          "shape":"FunctionName",
+          "documentation":"<p>The name of the Amazon Web Services Lambda function.</p>"
+        },
+        "runtime":{
+          "shape":"Runtime",
+          "documentation":"<p>The runtime environment for the Amazon Web Services Lambda function.</p>"
         },
         "codeSha256":{
           "shape":"NonEmptyString",
           "documentation":"<p>The SHA256 hash of the Amazon Web Services Lambda function's deployment package.</p>"
         },
+        "version":{
+          "shape":"Version",
+          "documentation":"<p>The version of the Amazon Web Services Lambda function.</p>"
+        },
         "executionRoleArn":{
           "shape":"ExecutionRoleArn",
           "documentation":"<p>The Amazon Web Services Lambda function's execution role.</p>"
         },
-        "functionName":{
-          "shape":"FunctionName",
-          "documentation":"<p>The name of the Amazon Web Services Lambda function.</p>"
-        },
-        "lastModifiedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that a user last updated the configuration, in <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601 format</a> </p>"
-        },
         "layers":{
           "shape":"LayerList",
           "documentation":"<p>The Amazon Web Services Lambda function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\"> layers</a>. A Lambda function can have up to five layers.</p>"
         },
+        "vpcConfig":{
+          "shape":"LambdaVpcConfig",
+          "documentation":"<p>The Amazon Web Services Lambda function's networking configuration.</p>"
+        },
         "packageType":{
           "shape":"PackageType",
           "documentation":"<p>The type of deployment package. Set to <code>Image</code> for container image and set <code>Zip</code> for .zip file archive.</p>"
         },
-        "runtime":{
-          "shape":"Runtime",
-          "documentation":"<p>The runtime environment for the Amazon Web Services Lambda function.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the Amazon Web Services Lambda function.</p>"
+        "architectures":{
+          "shape":"ArchitectureList",
+          "documentation":"<p>The instruction set architecture that the Amazon Web Services Lambda function supports. Architecture is a string array with one of the valid values. The default architecture value is <code>x86_64</code>.</p>"
         },
-        "vpcConfig":{
-          "shape":"LambdaVpcConfig",
-          "documentation":"<p>The Amazon Web Services Lambda function's networking configuration.</p>"
+        "lastModifiedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that a user last updated the configuration, in <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601 format</a> </p>"
         }
       },
       "documentation":"<p> A summary of information about the Amazon Web Services Lambda function.</p>"
@@ -1706,6 +2158,52 @@
       },
       "exception":true
     },
+    "BatchAssociateCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":["associateConfigurationRequests"],
+      "members":{
+        "associateConfigurationRequests":{
+          "shape":"AssociateConfigurationRequestList",
+          "documentation":"<p>A list of code repositories to associate with the specified scan configuration.</p>"
+        }
+      }
+    },
+    "BatchAssociateCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "failedAssociations":{
+          "shape":"FailedAssociationResultList",
+          "documentation":"<p>Details of any code repositories that failed to be associated with the scan configuration.</p>"
+        },
+        "successfulAssociations":{
+          "shape":"SuccessfulAssociationResultList",
+          "documentation":"<p>Details of code repositories that were successfully associated with the scan configuration.</p>"
+        }
+      }
+    },
+    "BatchDisassociateCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":["disassociateConfigurationRequests"],
+      "members":{
+        "disassociateConfigurationRequests":{
+          "shape":"DisassociateConfigurationRequestList",
+          "documentation":"<p>A list of code repositories to disassociate from the specified scan configuration.</p>"
+        }
+      }
+    },
+    "BatchDisassociateCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "failedAssociations":{
+          "shape":"FailedAssociationResultList",
+          "documentation":"<p>Details of any code repositories that failed to be disassociated from the scan configuration.</p>"
+        },
+        "successfulAssociations":{
+          "shape":"SuccessfulAssociationResultList",
+          "documentation":"<p>Details of code repositories that were successfully disassociated from the scan configuration.</p>"
+        }
+      }
+    },
     "BatchGetAccountStatusRequest":{
       "type":"structure",
       "members":{
@@ -1771,13 +2269,13 @@
     "BatchGetFindingDetailsResponse":{
       "type":"structure",
       "members":{
-        "errors":{
-          "shape":"FindingDetailsErrorList",
-          "documentation":"<p>Error information for findings that details could not be returned for.</p>"
-        },
         "findingDetails":{
           "shape":"FindingDetails",
           "documentation":"<p>A finding's vulnerability details.</p>"
+        },
+        "errors":{
+          "shape":"FindingDetailsErrorList",
+          "documentation":"<p>Error information for findings that details could not be returned for.</p>"
         }
       }
     },
@@ -1819,7 +2317,7 @@
       "members":{
         "accountIds":{
           "shape":"AccountIdSet",
-          "documentation":"<p>The unique identifiers for the Amazon Web Services accounts to retrieve Amazon Inspector deep inspection activation status for. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>The unique identifiers for the Amazon Web Services accounts to retrieve Amazon Inspector deep inspection activation status for. </p>"
         }
       }
     },
@@ -1828,11 +2326,11 @@
       "members":{
         "accountIds":{
           "shape":"MemberAccountEc2DeepInspectionStatusStateList",
-          "documentation":"<p>An array of objects that provide details on the activation status of Amazon Inspector deep inspection for each of the requested accounts. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>An array of objects that provide details on the activation status of Amazon Inspector deep inspection for each of the requested accounts. </p>"
         },
         "failedAccountIds":{
           "shape":"FailedMemberAccountEc2DeepInspectionStatusStateList",
-          "documentation":"<p>An array of objects that provide details on any accounts that failed to activate Amazon Inspector deep inspection and why. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>An array of objects that provide details on any accounts that failed to activate Amazon Inspector deep inspection and why. </p>"
         }
       }
     },
@@ -1933,37 +2431,37 @@
       "type":"structure",
       "required":["scanArn"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The account ID for the CIS check.</p>"
-        },
-        "checkDescription":{
-          "shape":"String",
-          "documentation":"<p>The description for the CIS check.</p>"
+        "scanArn":{
+          "shape":"CisScanArn",
+          "documentation":"<p>The scan ARN for the CIS check scan ARN.</p>"
         },
         "checkId":{
           "shape":"String",
           "documentation":"<p>The check ID for the CIS check.</p>"
         },
+        "title":{
+          "shape":"String",
+          "documentation":"<p>The CIS check title.</p>"
+        },
+        "checkDescription":{
+          "shape":"String",
+          "documentation":"<p>The description for the CIS check.</p>"
+        },
         "level":{
           "shape":"CisSecurityLevel",
           "documentation":"<p>The CIS check level.</p>"
         },
-        "platform":{
-          "shape":"String",
-          "documentation":"<p>The CIS check platform.</p>"
-        },
-        "scanArn":{
-          "shape":"CisScanArn",
-          "documentation":"<p>The scan ARN for the CIS check scan ARN.</p>"
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID for the CIS check.</p>"
         },
         "statusCounts":{
           "shape":"StatusCounts",
           "documentation":"<p>The CIS check status counts.</p>"
         },
-        "title":{
+        "platform":{
           "shape":"String",
-          "documentation":"<p>The CIS check title.</p>"
+          "documentation":"<p>The CIS check platform.</p>"
         }
       },
       "documentation":"<p>A CIS check.</p>"
@@ -1990,7 +2488,7 @@
     },
     "CisFindingArn":{
       "type":"string",
-      "pattern":"^arn:aws(-gov|-cn)?:inspector2:[-.a-z0-9]{0,20}:\\d{12}:owner/\\d{12}/cis-finding/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
+      "pattern":"arn:aws(-gov|-cn)?:inspector2:[-.a-z0-9]{0,20}:\\d{12}:owner/\\d{12}/cis-finding/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
     },
     "CisFindingArnFilterList":{
       "type":"list",
@@ -2037,13 +2535,13 @@
     "CisNumberFilter":{
       "type":"structure",
       "members":{
-        "lowerInclusive":{
-          "shape":"Integer",
-          "documentation":"<p>The CIS number filter's lower inclusive.</p>"
-        },
         "upperInclusive":{
           "shape":"Integer",
           "documentation":"<p>The CIS number filter's upper inclusive.</p>"
+        },
+        "lowerInclusive":{
+          "shape":"Integer",
+          "documentation":"<p>The CIS number filter's lower inclusive.</p>"
         }
       },
       "documentation":"<p>The CIS number filter.</p>"
@@ -2056,7 +2554,7 @@
     },
     "CisOwnerId":{
       "type":"string",
-      "pattern":"^\\d{12}|o-[a-z0-9]{10,32}$"
+      "pattern":"\\d{12}|o-[a-z0-9]{10,32}"
     },
     "CisReportFormat":{
       "type":"string",
@@ -2133,10 +2631,6 @@
         "scanConfigurationArn"
       ],
       "members":{
-        "failedChecks":{
-          "shape":"Integer",
-          "documentation":"<p>The CIS scan's failed checks.</p>"
-        },
         "scanArn":{
           "shape":"CisScanArn",
           "documentation":"<p>The CIS scan's ARN.</p>"
@@ -2145,40 +2639,44 @@
           "shape":"CisScanConfigurationArn",
           "documentation":"<p>The CIS scan's configuration ARN.</p>"
         },
-        "scanDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The CIS scan's date.</p>"
+        "status":{
+          "shape":"CisScanStatus",
+          "documentation":"<p>The CIS scan's status.</p>"
         },
         "scanName":{
           "shape":"CisScanName",
           "documentation":"<p>The the name of the scan configuration that's associated with this scan.</p>"
         },
-        "scheduledBy":{
-          "shape":"String",
-          "documentation":"<p>The account or organization that schedules the CIS scan.</p>"
+        "scanDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The CIS scan's date.</p>"
         },
-        "securityLevel":{
-          "shape":"CisSecurityLevel",
-          "documentation":"<p> The security level for the CIS scan. Security level refers to the Benchmark levels that CIS assigns to a profile. </p>"
+        "failedChecks":{
+          "shape":"Integer",
+          "documentation":"<p>The CIS scan's failed checks.</p>"
         },
-        "status":{
-          "shape":"CisScanStatus",
-          "documentation":"<p>The CIS scan's status.</p>"
+        "totalChecks":{
+          "shape":"Integer",
+          "documentation":"<p>The CIS scan's total checks.</p>"
         },
         "targets":{
           "shape":"CisTargets",
           "documentation":"<p>The CIS scan's targets.</p>"
         },
-        "totalChecks":{
-          "shape":"Integer",
-          "documentation":"<p>The CIS scan's total checks.</p>"
+        "scheduledBy":{
+          "shape":"String",
+          "documentation":"<p>The account or organization that schedules the CIS scan.</p>"
+        },
+        "securityLevel":{
+          "shape":"CisSecurityLevel",
+          "documentation":"<p> The security level for the CIS scan. Security level refers to the Benchmark levels that CIS assigns to a profile. </p>"
         }
       },
       "documentation":"<p>The CIS scan.</p>"
     },
     "CisScanArn":{
       "type":"string",
-      "pattern":"^arn:aws(-us-gov|-cn)?:inspector2:[-.a-z0-9]{0,20}:\\d{12}:owner/(\\d{12}|o-[a-z0-9]{10,32})/cis-scan/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
+      "pattern":"arn:aws(-us-gov|-cn)?:inspector2:[-.a-z0-9]{0,20}:\\d{12}:owner/(\\d{12}|o-[a-z0-9]{10,32})/cis-scan/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
     },
     "CisScanArnFilterList":{
       "type":"list",
@@ -2190,40 +2688,40 @@
       "type":"structure",
       "required":["scanConfigurationArn"],
       "members":{
-        "ownerId":{
-          "shape":"CisOwnerId",
-          "documentation":"<p>The CIS scan configuration's owner ID.</p>"
-        },
         "scanConfigurationArn":{
           "shape":"CisScanConfigurationArn",
           "documentation":"<p>The CIS scan configuration's scan configuration ARN.</p>"
         },
+        "ownerId":{
+          "shape":"CisOwnerId",
+          "documentation":"<p>The CIS scan configuration's owner ID.</p>"
+        },
         "scanName":{
           "shape":"CisScanName",
           "documentation":"<p>The name of the CIS scan configuration.</p>"
         },
-        "schedule":{
-          "shape":"Schedule",
-          "documentation":"<p>The CIS scan configuration's schedule.</p>"
-        },
         "securityLevel":{
           "shape":"CisSecurityLevel",
           "documentation":"<p>The CIS scan configuration's security level.</p>"
         },
-        "tags":{
-          "shape":"CisTagMap",
-          "documentation":"<p>The CIS scan configuration's tags.</p>"
+        "schedule":{
+          "shape":"Schedule",
+          "documentation":"<p>The CIS scan configuration's schedule.</p>"
         },
         "targets":{
           "shape":"CisTargets",
           "documentation":"<p>The CIS scan configuration's targets.</p>"
+        },
+        "tags":{
+          "shape":"CisTagMap",
+          "documentation":"<p>The CIS scan configuration's tags.</p>"
         }
       },
       "documentation":"<p>The CIS scan configuration.</p>"
     },
     "CisScanConfigurationArn":{
       "type":"string",
-      "pattern":"^arn:aws(-us-gov|-cn)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-[0-9]{1}:[0-9]{12}:owner/(o-[a-z0-9]+|[0-9]{12})/cis-configuration/[0-9a-fA-F-]+$"
+      "pattern":"arn:aws(-us-gov|-cn)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-[0-9]{1}:[0-9]{12}:owner/(o-[a-z0-9]+|[0-9]{12})/cis-configuration/[0-9a-fA-F-]+"
     },
     "CisScanConfigurationArnFilterList":{
       "type":"list",
@@ -2271,38 +2769,22 @@
       "type":"structure",
       "required":["scanArn"],
       "members":{
+        "scanArn":{
+          "shape":"CisScanArn",
+          "documentation":"<p>The CIS scan result details' scan ARN.</p>"
+        },
         "accountId":{
           "shape":"AccountId",
           "documentation":"<p>The CIS scan result details' account ID.</p>"
         },
-        "checkDescription":{
-          "shape":"String",
-          "documentation":"<p>The account ID that's associated with the CIS scan result details.</p>"
-        },
-        "checkId":{
-          "shape":"String",
-          "documentation":"<p>The CIS scan result details' check ID.</p>"
-        },
-        "findingArn":{
-          "shape":"CisFindingArn",
-          "documentation":"<p>The CIS scan result details' finding ARN.</p>"
-        },
-        "level":{
-          "shape":"CisSecurityLevel",
-          "documentation":"<p>The CIS scan result details' level.</p>"
+        "targetResourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The CIS scan result details' target resource ID.</p>"
         },
         "platform":{
           "shape":"String",
           "documentation":"<p>The CIS scan result details' platform.</p>"
         },
-        "remediation":{
-          "shape":"String",
-          "documentation":"<p>The CIS scan result details' remediation.</p>"
-        },
-        "scanArn":{
-          "shape":"CisScanArn",
-          "documentation":"<p>The CIS scan result details' scan ARN.</p>"
-        },
         "status":{
           "shape":"CisFindingStatus",
           "documentation":"<p>The CIS scan result details' status.</p>"
@@ -2311,13 +2793,29 @@
           "shape":"String",
           "documentation":"<p>The CIS scan result details' status reason.</p>"
         },
-        "targetResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The CIS scan result details' target resource ID.</p>"
+        "checkId":{
+          "shape":"String",
+          "documentation":"<p>The CIS scan result details' check ID.</p>"
         },
         "title":{
           "shape":"String",
           "documentation":"<p>The CIS scan result details' title.</p>"
+        },
+        "checkDescription":{
+          "shape":"String",
+          "documentation":"<p>The account ID that's associated with the CIS scan result details.</p>"
+        },
+        "remediation":{
+          "shape":"String",
+          "documentation":"<p>The CIS scan result details' remediation.</p>"
+        },
+        "level":{
+          "shape":"CisSecurityLevel",
+          "documentation":"<p>The CIS scan result details' level.</p>"
+        },
+        "findingArn":{
+          "shape":"CisFindingArn",
+          "documentation":"<p>The CIS scan result details' finding ARN.</p>"
         }
       },
       "documentation":"<p>The CIS scan result details.</p>"
@@ -2325,25 +2823,25 @@
     "CisScanResultDetailsFilterCriteria":{
       "type":"structure",
       "members":{
+        "findingStatusFilters":{
+          "shape":"CisFindingStatusFilterList",
+          "documentation":"<p>The criteria's finding status filters.</p>"
+        },
         "checkIdFilters":{
           "shape":"CheckIdFilterList",
           "documentation":"<p>The criteria's check ID filters.</p>"
         },
-        "findingArnFilters":{
-          "shape":"CisFindingArnFilterList",
-          "documentation":"<p>The criteria's finding ARN filters.</p>"
-        },
-        "findingStatusFilters":{
-          "shape":"CisFindingStatusFilterList",
-          "documentation":"<p>The criteria's finding status filters.</p>"
+        "titleFilters":{
+          "shape":"TitleFilterList",
+          "documentation":"<p>The criteria's title filters.</p>"
         },
         "securityLevelFilters":{
           "shape":"CisSecurityLevelFilterList",
           "documentation":"<p> The criteria's security level filters. . Security level refers to the Benchmark levels that CIS assigns to a profile. </p>"
         },
-        "titleFilters":{
-          "shape":"TitleFilterList",
-          "documentation":"<p>The criteria's title filters.</p>"
+        "findingArnFilters":{
+          "shape":"CisFindingArnFilterList",
+          "documentation":"<p>The criteria's finding ARN filters.</p>"
         }
       },
       "documentation":"<p>The CIS scan result details filter criteria.</p>"
@@ -2372,21 +2870,21 @@
           "shape":"CheckIdFilterList",
           "documentation":"<p>The criteria's check ID filters.</p>"
         },
-        "failedResourcesFilters":{
-          "shape":"CisNumberFilterList",
-          "documentation":"<p>The criteria's failed resources filters.</p>"
+        "titleFilters":{
+          "shape":"TitleFilterList",
+          "documentation":"<p>The criteria's title filters.</p>"
         },
         "platformFilters":{
           "shape":"PlatformFilterList",
           "documentation":"<p>The criteria's platform filters.</p>"
         },
+        "failedResourcesFilters":{
+          "shape":"CisNumberFilterList",
+          "documentation":"<p>The criteria's failed resources filters.</p>"
+        },
         "securityLevelFilters":{
           "shape":"CisSecurityLevelFilterList",
           "documentation":"<p>The criteria's security level filters.</p>"
-        },
-        "titleFilters":{
-          "shape":"TitleFilterList",
-          "documentation":"<p>The criteria's title filters.</p>"
         }
       },
       "documentation":"<p>The scan results aggregated by checks filter criteria.</p>"
@@ -2408,22 +2906,14 @@
           "shape":"AccountIdFilterList",
           "documentation":"<p>The criteria's account ID filters.</p>"
         },
-        "checkIdFilters":{
-          "shape":"CheckIdFilterList",
-          "documentation":"<p>The criteria's check ID filters.</p>"
-        },
-        "failedChecksFilters":{
-          "shape":"CisNumberFilterList",
-          "documentation":"<p>The criteria's failed checks filters.</p>"
-        },
-        "platformFilters":{
-          "shape":"PlatformFilterList",
-          "documentation":"<p>The criteria's platform filters.</p>"
-        },
         "statusFilters":{
           "shape":"CisResultStatusFilterList",
           "documentation":"<p>The criteria's status filter.</p>"
         },
+        "checkIdFilters":{
+          "shape":"CheckIdFilterList",
+          "documentation":"<p>The criteria's check ID filters.</p>"
+        },
         "targetResourceIdFilters":{
           "shape":"ResourceIdFilterList",
           "documentation":"<p>The criteria's target resource ID filters.</p>"
@@ -2432,6 +2922,10 @@
           "shape":"ResourceTagFilterList",
           "documentation":"<p>The criteria's target resource tag filters.</p>"
         },
+        "platformFilters":{
+          "shape":"PlatformFilterList",
+          "documentation":"<p>The criteria's platform filters.</p>"
+        },
         "targetStatusFilters":{
           "shape":"TargetStatusFilterList",
           "documentation":"<p>The criteria's target status filters.</p>"
@@ -2439,6 +2933,10 @@
         "targetStatusReasonFilters":{
           "shape":"TargetStatusReasonFilterList",
           "documentation":"<p>The criteria's target status reason filters.</p>"
+        },
+        "failedChecksFilters":{
+          "shape":"CisNumberFilterList",
+          "documentation":"<p>The criteria's failed checks filters.</p>"
         }
       },
       "documentation":"<p>The scan results aggregated by target resource filter criteria.</p>"
@@ -2541,15 +3039,11 @@
     "CisSessionMessage":{
       "type":"structure",
       "required":[
-        "cisRuleDetails",
         "ruleId",
-        "status"
+        "status",
+        "cisRuleDetails"
       ],
       "members":{
-        "cisRuleDetails":{
-          "shape":"CisRuleDetails",
-          "documentation":"<p>The CIS rule details for the CIS session message.</p>"
-        },
         "ruleId":{
           "shape":"RuleId",
           "documentation":"<p>The rule ID for the CIS session message.</p>"
@@ -2557,6 +3051,10 @@
         "status":{
           "shape":"CisRuleStatus",
           "documentation":"<p>The status of the CIS session message.</p>"
+        },
+        "cisRuleDetails":{
+          "shape":"CisRuleDetails",
+          "documentation":"<p>The CIS rule details for the CIS session message.</p>"
         }
       },
       "documentation":"<p>The CIS session message.</p>"
@@ -2609,30 +3107,30 @@
       "type":"structure",
       "required":["scanArn"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The account ID for the CIS target resource.</p>"
-        },
-        "platform":{
-          "shape":"String",
-          "documentation":"<p>The platform for the CIS target resource.</p>"
-        },
         "scanArn":{
           "shape":"CisScanArn",
           "documentation":"<p>The scan ARN for the CIS target resource.</p>"
         },
-        "statusCounts":{
-          "shape":"StatusCounts",
-          "documentation":"<p>The target resource status counts.</p>"
-        },
         "targetResourceId":{
           "shape":"ResourceId",
           "documentation":"<p>The ID of the target resource.</p>"
         },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID for the CIS target resource.</p>"
+        },
         "targetResourceTags":{
           "shape":"TargetResourceTags",
           "documentation":"<p>The tag for the target resource.</p>"
         },
+        "statusCounts":{
+          "shape":"StatusCounts",
+          "documentation":"<p>The target resource status counts.</p>"
+        },
+        "platform":{
+          "shape":"String",
+          "documentation":"<p>The platform for the CIS target resource.</p>"
+        },
         "targetStatus":{
           "shape":"CisTargetStatus",
           "documentation":"<p>The status of the target resource.</p>"
@@ -2727,10 +3225,6 @@
     "CisaData":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"CisaAction",
-          "documentation":"<p>The remediation action recommended by CISA for this vulnerability.</p>"
-        },
         "dateAdded":{
           "shape":"CisaDateAdded",
           "documentation":"<p>The date and time CISA added this vulnerability to their catalogue.</p>"
@@ -2738,6 +3232,10 @@
         "dateDue":{
           "shape":"CisaDateDue",
           "documentation":"<p>The date and time CISA expects a fix to have been provided vulnerability.</p>"
+        },
+        "action":{
+          "shape":"CisaAction",
+          "documentation":"<p>The remediation action recommended by CISA for this vulnerability.</p>"
         }
       },
       "documentation":"<p>The Cybersecurity and Infrastructure Security Agency (CISA) details for a specific vulnerability.</p>"
@@ -2749,19 +3247,101 @@
       "max":64,
       "min":1
     },
+    "ClusterDetails":{
+      "type":"structure",
+      "required":[
+        "lastInUse",
+        "clusterMetadata"
+      ],
+      "members":{
+        "lastInUse":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last timestamp when Amazon Inspector recorded the image in use in the task or pod in the cluster.</p>"
+        },
+        "runningUnitCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of tasks or pods where an image was running on the cluster.</p>"
+        },
+        "stoppedUnitCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of tasks or pods where an image was stopped on the cluster in the last 24 hours.</p>"
+        },
+        "clusterMetadata":{"shape":"ClusterMetadata"}
+      },
+      "documentation":"<p>Details about the task or pod in the cluster.</p>"
+    },
+    "ClusterForImageFilterCriteria":{
+      "type":"structure",
+      "required":["resourceId"],
+      "members":{
+        "resourceId":{
+          "shape":"ClusterForImageFilterCriteriaResourceIdString",
+          "documentation":"<p>The resource Id to be used in the filter criteria.</p>"
+        }
+      },
+      "documentation":"<p>The filter criteria to be used.</p>"
+    },
+    "ClusterForImageFilterCriteriaResourceIdString":{
+      "type":"string",
+      "pattern":"arn:.*:ecr:.*:\\d{12}:repository\\/(?:[a-z0-9]+(?:[._-][a-z0-9]+)*\\/)*[a-z0-9]+(?:[._-][a-z0-9]+)*(\\/sha256:[a-z0-9]{64})?"
+    },
+    "ClusterInformation":{
+      "type":"structure",
+      "required":["clusterArn"],
+      "members":{
+        "clusterArn":{
+          "shape":"ClusterInformationClusterArnString",
+          "documentation":"<p>The cluster ARN.</p>"
+        },
+        "clusterDetails":{
+          "shape":"ClusterInformationClusterDetailsList",
+          "documentation":"<p>Details about the cluster.</p>"
+        }
+      },
+      "documentation":"<p>Information about the cluster.</p>"
+    },
+    "ClusterInformationClusterArnString":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:aws(?:-[a-z0-9-]+)?:(?:ecs|eks):[a-z0-9-]+:[0-9]{12}:cluster/[a-zA-Z0-9_-]+"
+    },
+    "ClusterInformationClusterDetailsList":{
+      "type":"list",
+      "member":{"shape":"ClusterDetails"},
+      "max":100,
+      "min":1
+    },
+    "ClusterInformationList":{
+      "type":"list",
+      "member":{"shape":"ClusterInformation"},
+      "max":100,
+      "min":1
+    },
+    "ClusterMetadata":{
+      "type":"structure",
+      "members":{
+        "awsEcsMetadataDetails":{
+          "shape":"AwsEcsMetadataDetails",
+          "documentation":"<p>The details for an Amazon ECS cluster in the cluster metadata.</p>"
+        },
+        "awsEksMetadataDetails":{
+          "shape":"AwsEksMetadataDetails",
+          "documentation":"<p>The details for an Amazon EKS cluster in the cluster metadata.</p>"
+        }
+      },
+      "documentation":"<p>The metadata for a cluster.</p>",
+      "union":true
+    },
     "CodeFilePath":{
       "type":"structure",
       "required":[
-        "endLine",
         "fileName",
         "filePath",
-        "startLine"
+        "startLine",
+        "endLine"
       ],
       "members":{
-        "endLine":{
-          "shape":"Integer",
-          "documentation":"<p>The line number of the last line of code that a vulnerability was found in.</p>"
-        },
         "fileName":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the file the code vulnerability was found in.</p>"
@@ -2773,6 +3353,10 @@
         "startLine":{
           "shape":"Integer",
           "documentation":"<p>The line number of the first line of code that a vulnerability was found in.</p>"
+        },
+        "endLine":{
+          "shape":"Integer",
+          "documentation":"<p>The line number of the last line of code that a vulnerability was found in.</p>"
         }
       },
       "documentation":"<p>Contains information on where a code vulnerability is located in your Lambda function.</p>"
@@ -2806,14 +3390,351 @@
       "max":20,
       "min":1
     },
+    "CodeRepositoryAggregation":{
+      "type":"structure",
+      "members":{
+        "projectNames":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The project names to include in the aggregation results.</p>"
+        },
+        "providerTypes":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The repository provider types to include in the aggregation results.</p>"
+        },
+        "sortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The order to sort results by (ascending or descending) in the code repository aggregation.</p>"
+        },
+        "sortBy":{
+          "shape":"CodeRepositorySortBy",
+          "documentation":"<p>The value to sort results by in the code repository aggregation.</p>"
+        },
+        "resourceIds":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The resource IDs to include in the aggregation results.</p>"
+        }
+      },
+      "documentation":"<p>The details that define an aggregation based on code repositories.</p>"
+    },
+    "CodeRepositoryAggregationResponse":{
+      "type":"structure",
+      "required":["projectNames"],
+      "members":{
+        "projectNames":{
+          "shape":"String",
+          "documentation":"<p>The names of the projects associated with the code repository.</p>"
+        },
+        "providerType":{
+          "shape":"String",
+          "documentation":"<p>The type of repository provider for the code repository.</p>"
+        },
+        "severityCounts":{"shape":"SeverityCounts"},
+        "exploitAvailableActiveFindingsCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of active findings that have an exploit available for the code repository.</p>"
+        },
+        "fixAvailableActiveFindingsCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of active findings that have a fix available for the code repository.</p>"
+        },
+        "accountId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID associated with the code repository.</p>"
+        },
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The resource ID of the code repository.</p>"
+        }
+      },
+      "documentation":"<p>A response that contains the results of a finding aggregation by code repository.</p>"
+    },
+    "CodeRepositoryDetails":{
+      "type":"structure",
+      "members":{
+        "projectName":{
+          "shape":"CodeRepositoryProjectName",
+          "documentation":"<p>The name of the project in the code repository.</p>"
+        },
+        "integrationArn":{
+          "shape":"CodeRepositoryIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration associated with the repository.</p>"
+        },
+        "providerType":{
+          "shape":"CodeRepositoryProviderType",
+          "documentation":"<p>The type of repository provider (such as GitHub, GitLab, etc.).</p>"
+        }
+      },
+      "documentation":"<p>Contains details about a code repository associated with a finding.</p>"
+    },
+    "CodeRepositoryIntegrationArn":{
+      "type":"string",
+      "pattern":"arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:codesecurity-integration\\/[a-f0-9-]{36}"
+    },
+    "CodeRepositoryMetadata":{
+      "type":"structure",
+      "required":[
+        "projectName",
+        "providerType",
+        "providerTypeVisibility"
+      ],
+      "members":{
+        "projectName":{
+          "shape":"CodeRepositoryMetadataProjectNameString",
+          "documentation":"<p>The name of the project in the code repository.</p>"
+        },
+        "integrationArn":{
+          "shape":"CodeRepositoryIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration associated with the repository.</p>"
+        },
+        "providerType":{
+          "shape":"CodeRepositoryMetadataProviderTypeString",
+          "documentation":"<p>The type of repository provider (such as GitHub, GitLab, etc.).</p>"
+        },
+        "providerTypeVisibility":{
+          "shape":"CodeRepositoryMetadataProviderTypeVisibilityString",
+          "documentation":"<p>The visibility setting of the repository (public or private).</p>"
+        },
+        "lastScannedCommitId":{
+          "shape":"CommitId",
+          "documentation":"<p>The ID of the last commit that was scanned in the repository.</p>"
+        },
+        "scanConfiguration":{
+          "shape":"ProjectCodeSecurityScanConfiguration",
+          "documentation":"<p>The scan configuration settings applied to the code repository.</p>"
+        },
+        "onDemandScan":{
+          "shape":"CodeRepositoryOnDemandScan",
+          "documentation":"<p>Information about on-demand scans performed on the repository.</p>"
+        }
+      },
+      "documentation":"<p>Contains metadata information about a code repository that is being scanned by Amazon Inspector.</p>"
+    },
+    "CodeRepositoryMetadataProjectNameString":{
+      "type":"string",
+      "max":300,
+      "min":1
+    },
+    "CodeRepositoryMetadataProviderTypeString":{
+      "type":"string",
+      "max":300,
+      "min":1
+    },
+    "CodeRepositoryMetadataProviderTypeVisibilityString":{
+      "type":"string",
+      "max":300,
+      "min":1
+    },
+    "CodeRepositoryOnDemandScan":{
+      "type":"structure",
+      "members":{
+        "lastScannedCommitId":{
+          "shape":"CommitId",
+          "documentation":"<p>The ID of the last commit that was scanned during an on-demand scan.</p>"
+        },
+        "lastScanAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The timestamp when the last on-demand scan was performed.</p>"
+        },
+        "scanStatus":{"shape":"ScanStatus"}
+      },
+      "documentation":"<p>Contains information about on-demand scans performed on a code repository.</p>"
+    },
+    "CodeRepositoryProjectName":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
+    "CodeRepositoryProviderType":{
+      "type":"string",
+      "enum":[
+        "GITHUB",
+        "GITLAB_SELF_MANAGED"
+      ]
+    },
+    "CodeRepositorySortBy":{
+      "type":"string",
+      "enum":[
+        "CRITICAL",
+        "HIGH",
+        "ALL"
+      ]
+    },
+    "CodeScanStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "SUCCESSFUL",
+        "FAILED",
+        "SKIPPED"
+      ]
+    },
+    "CodeSecurityClientToken":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[\\S]+"
+    },
+    "CodeSecurityIntegrationArn":{
+      "type":"string",
+      "documentation":"<p>arn:aws:inspector2:<region>:<account-id>:codesecurity-integration/<uuid></p>",
+      "pattern":"arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:codesecurity-integration/[a-f0-9-]{36}"
+    },
+    "CodeSecurityIntegrationSummary":{
+      "type":"structure",
+      "required":[
+        "integrationArn",
+        "name",
+        "type",
+        "status",
+        "statusReason",
+        "createdOn",
+        "lastUpdateOn"
+      ],
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration.</p>"
+        },
+        "name":{
+          "shape":"IntegrationName",
+          "documentation":"<p>The name of the code security integration.</p>"
+        },
+        "type":{
+          "shape":"IntegrationType",
+          "documentation":"<p>The type of repository provider for the integration.</p>"
+        },
+        "status":{
+          "shape":"IntegrationStatus",
+          "documentation":"<p>The current status of the code security integration.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the code security integration.</p>"
+        },
+        "createdOn":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the code security integration was created.</p>"
+        },
+        "lastUpdateOn":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the code security integration was last updated.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the code security integration.</p>"
+        }
+      },
+      "documentation":"<p>A summary of information about a code security integration.</p>"
+    },
+    "CodeSecurityResource":{
+      "type":"structure",
+      "members":{
+        "projectId":{
+          "shape":"ProjectId",
+          "documentation":"<p>The unique identifier of the project in the code repository.</p>"
+        }
+      },
+      "documentation":"<p>Identifies a specific resource in a code repository that will be scanned.</p>",
+      "union":true
+    },
+    "CodeSecurityScanConfiguration":{
+      "type":"structure",
+      "required":["ruleSetCategories"],
+      "members":{
+        "periodicScanConfiguration":{
+          "shape":"PeriodicScanConfiguration",
+          "documentation":"<p>Configuration settings for periodic scans that run on a scheduled basis.</p>"
+        },
+        "continuousIntegrationScanConfiguration":{
+          "shape":"ContinuousIntegrationScanConfiguration",
+          "documentation":"<p>Configuration settings for continuous integration scans that run automatically when code changes are made.</p>"
+        },
+        "ruleSetCategories":{
+          "shape":"RuleSetCategories",
+          "documentation":"<p>The categories of security rules to be applied during the scan.</p>"
+        }
+      },
+      "documentation":"<p>Contains the configuration settings for code security scans.</p>"
+    },
+    "CodeSecurityScanConfigurationAssociationSummaries":{
+      "type":"list",
+      "member":{"shape":"CodeSecurityScanConfigurationAssociationSummary"}
+    },
+    "CodeSecurityScanConfigurationAssociationSummary":{
+      "type":"structure",
+      "members":{
+        "resource":{"shape":"CodeSecurityResource"}
+      },
+      "documentation":"<p>A summary of an association between a code repository and a scan configuration.</p>"
+    },
+    "CodeSecurityScanConfigurationSummaries":{
+      "type":"list",
+      "member":{"shape":"CodeSecurityScanConfigurationSummary"}
+    },
+    "CodeSecurityScanConfigurationSummary":{
+      "type":"structure",
+      "required":[
+        "scanConfigurationArn",
+        "name",
+        "ownerAccountId",
+        "ruleSetCategories"
+      ],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration.</p>"
+        },
+        "name":{
+          "shape":"ScanConfigurationName",
+          "documentation":"<p>The name of the scan configuration.</p>"
+        },
+        "ownerAccountId":{
+          "shape":"OwnerId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the scan configuration.</p>"
+        },
+        "periodicScanFrequency":{
+          "shape":"PeriodicScanFrequency",
+          "documentation":"<p>The frequency at which periodic scans are performed.</p>"
+        },
+        "frequencyExpression":{
+          "shape":"FrequencyExpression",
+          "documentation":"<p>The schedule expression for periodic scans, in cron format.</p>"
+        },
+        "continuousIntegrationScanSupportedEvents":{
+          "shape":"ContinuousIntegrationScanSupportedEvents",
+          "documentation":"<p>The repository events that trigger continuous integration scans.</p>"
+        },
+        "ruleSetCategories":{
+          "shape":"RuleSetCategories",
+          "documentation":"<p>The categories of security rules applied during the scan.</p>"
+        },
+        "scopeSettings":{
+          "shape":"ScopeSettings",
+          "documentation":"<p>The scope settings that define which repositories will be scanned. If the <code>ScopeSetting</code> parameter is <code>ALL</code> the scan configuration applies to all existing and future projects imported into Amazon Inspector.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the scan configuration.</p>"
+        }
+      },
+      "documentation":"<p>A summary of information about a code security scan configuration.</p>"
+    },
+    "CodeSecurityUuid":{
+      "type":"string",
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "CodeSnippetError":{
       "type":"structure",
       "required":[
+        "findingArn",
         "errorCode",
-        "errorMessage",
-        "findingArn"
+        "errorMessage"
       ],
       "members":{
+        "findingArn":{
+          "shape":"FindingArn",
+          "documentation":"<p>The ARN of the finding that a code snippet couldn't be retrieved for.</p>"
+        },
         "errorCode":{
           "shape":"CodeSnippetErrorCode",
           "documentation":"<p>The error code for the error that prevented a code snippet from being retrieved.</p>"
@@ -2821,10 +3742,6 @@
         "errorMessage":{
           "shape":"NonEmptyString",
           "documentation":"<p>The error message received when Amazon Inspector failed to retrieve a code snippet.</p>"
-        },
-        "findingArn":{
-          "shape":"FindingArn",
-          "documentation":"<p>The ARN of the finding that a code snippet couldn't be retrieved for.</p>"
         }
       },
       "documentation":"<p>Contains information about any errors encountered while trying to retrieve a code snippet.</p>"
@@ -2845,14 +3762,6 @@
     "CodeSnippetResult":{
       "type":"structure",
       "members":{
-        "codeSnippet":{
-          "shape":"CodeLineList",
-          "documentation":"<p>Contains information on the retrieved code snippet.</p>"
-        },
-        "endLine":{
-          "shape":"Integer",
-          "documentation":"<p>The line number of the last line of a code snippet.</p>"
-        },
         "findingArn":{
           "shape":"FindingArn",
           "documentation":"<p>The ARN of a finding that the code snippet is associated with.</p>"
@@ -2861,6 +3770,14 @@
           "shape":"Integer",
           "documentation":"<p>The line number of the first line of a code snippet.</p>"
         },
+        "endLine":{
+          "shape":"Integer",
+          "documentation":"<p>The line number of the last line of a code snippet.</p>"
+        },
+        "codeSnippet":{
+          "shape":"CodeLineList",
+          "documentation":"<p>Contains information on the retrieved code snippet.</p>"
+        },
         "suggestedFixes":{
           "shape":"SuggestedFixes",
           "documentation":"<p>Details of a suggested code fix.</p>"
@@ -2875,32 +3792,20 @@
     "CodeVulnerabilityDetails":{
       "type":"structure",
       "required":[
-        "cwes",
+        "filePath",
         "detectorId",
         "detectorName",
-        "filePath"
+        "cwes"
       ],
       "members":{
-        "cwes":{
-          "shape":"CweList",
-          "documentation":"<p>The Common Weakness Enumeration (CWE) item associated with the detected vulnerability.</p>"
-        },
-        "detectorId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ID for the Amazon CodeGuru detector associated with the finding. For more information on detectors see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library\">Amazon CodeGuru Detector Library</a>.</p>"
-        },
-        "detectorName":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The name of the detector used to identify the code vulnerability. For more information on detectors see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library\">CodeGuru Detector Library</a>.</p>"
+        "filePath":{
+          "shape":"CodeFilePath",
+          "documentation":"<p>Contains information on where the code vulnerability is located in your code.</p>"
         },
         "detectorTags":{
           "shape":"DetectorTagList",
           "documentation":"<p>The detector tag associated with the vulnerability. Detector tags group related vulnerabilities by common themes or tactics. For a list of available tags by programming language, see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/java/tags/\">Java tags</a>, or <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/python/tags/\">Python tags</a>. </p>"
         },
-        "filePath":{
-          "shape":"CodeFilePath",
-          "documentation":"<p>Contains information on where the code vulnerability is located in your code.</p>"
-        },
         "referenceUrls":{
           "shape":"ReferenceUrls",
           "documentation":"<p>A URL containing supporting documentation about the code vulnerability detected.</p>"
@@ -2912,23 +3817,42 @@
         "sourceLambdaLayerArn":{
           "shape":"LambdaLayerArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda layer that the code vulnerability was detected in.</p>"
+        },
+        "detectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID for the Amazon CodeGuru detector associated with the finding. For more information on detectors see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library\">Amazon CodeGuru Detector Library</a>.</p>"
+        },
+        "detectorName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the detector used to identify the code vulnerability. For more information on detectors see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library\">CodeGuru Detector Library</a>.</p>"
+        },
+        "cwes":{
+          "shape":"CweList",
+          "documentation":"<p>The Common Weakness Enumeration (CWE) item associated with the detected vulnerability.</p>"
         }
       },
       "documentation":"<p>Contains information on the code vulnerability identified in your Lambda function.</p>"
     },
+    "CommitId":{
+      "type":"string",
+      "max":40,
+      "min":0,
+      "pattern":"([a-f0-9]{40})"
+    },
     "Component":{"type":"string"},
+    "ComponentArn":{"type":"string"},
     "ComponentType":{"type":"string"},
     "ComputePlatform":{
       "type":"structure",
       "members":{
-        "product":{
-          "shape":"Product",
-          "documentation":"<p>The compute platform product.</p>"
-        },
         "vendor":{
           "shape":"Vendor",
           "documentation":"<p>The compute platform vendor.</p>"
         },
+        "product":{
+          "shape":"Product",
+          "documentation":"<p>The compute platform product.</p>"
+        },
         "version":{
           "shape":"PlatformVersion",
           "documentation":"<p>The compute platform version.</p>"
@@ -2936,6 +3860,13 @@
       },
       "documentation":"<p>A compute platform.</p>"
     },
+    "ConfigurationLevel":{
+      "type":"string",
+      "enum":[
+        "ORGANIZATION",
+        "ACCOUNT"
+      ]
+    },
     "ConflictException":{
       "type":"structure",
       "required":[
@@ -2954,13 +3885,37 @@
           "documentation":"<p>The type of the conflicting resource.</p>"
         }
       },
-      "documentation":"<p>A conflict occurred.</p>",
+      "documentation":"<p>A conflict occurred. This exception occurs when the same resource is being modified by concurrent requests.</p>",
       "error":{
         "httpStatusCode":409,
         "senderFault":true
       },
       "exception":true
     },
+    "ContinuousIntegrationScanConfiguration":{
+      "type":"structure",
+      "required":["supportedEvents"],
+      "members":{
+        "supportedEvents":{
+          "shape":"ContinuousIntegrationScanSupportedEvents",
+          "documentation":"<p>The repository events that trigger continuous integration scans, such as pull requests or commits.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for continuous integration scans that run automatically when code changes are made.</p>"
+    },
+    "ContinuousIntegrationScanEvent":{
+      "type":"string",
+      "enum":[
+        "PULL_REQUEST",
+        "PUSH"
+      ]
+    },
+    "ContinuousIntegrationScanSupportedEvents":{
+      "type":"list",
+      "member":{"shape":"ContinuousIntegrationScanEvent"},
+      "max":2,
+      "min":1
+    },
     "Counts":{
       "type":"structure",
       "members":{
@@ -2984,13 +3939,13 @@
     "CoverageDateFilter":{
       "type":"structure",
       "members":{
-        "endInclusive":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>A timestamp representing the end of the time period to filter results by.</p>"
-        },
         "startInclusive":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>A timestamp representing the start of the time period to filter results by.</p>"
+        },
+        "endInclusive":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>A timestamp representing the end of the time period to filter results by.</p>"
         }
       },
       "documentation":"<p>Contains details of a coverage date filter.</p>"
@@ -3004,65 +3959,89 @@
     "CoverageFilterCriteria":{
       "type":"structure",
       "members":{
+        "scanStatusCode":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>The scan status code to filter on. Valid values are: <code>ValidationException</code>, <code>InternalServerException</code>, <code>ResourceNotFoundException</code>, <code>BadRequestException</code>, and <code>ThrottlingException</code>.</p>"
+        },
+        "scanStatusReason":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>The scan status reason to filter on.</p>"
+        },
         "accountId":{
           "shape":"CoverageStringFilterList",
           "documentation":"<p>An array of Amazon Web Services account IDs to return coverage statistics for.</p>"
         },
-        "ec2InstanceTags":{
-          "shape":"CoverageMapFilterList",
-          "documentation":"<p>The Amazon EC2 instance tags to filter on.</p>"
+        "resourceId":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>An array of Amazon Web Services resource IDs to return coverage statistics for.</p>"
         },
-        "ecrImageTags":{
+        "resourceType":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>The Amazon ECR image tags to filter on.</p>"
+          "documentation":"<p>An array of Amazon Web Services resource types to return coverage statistics for. The values can be <code>AWS_EC2_INSTANCE</code>, <code>AWS_LAMBDA_FUNCTION</code>, <code>AWS_ECR_CONTAINER_IMAGE</code>, <code>AWS_ECR_REPOSITORY</code> or <code>AWS_ACCOUNT</code>.</p>"
+        },
+        "scanType":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>An array of Amazon Inspector scan types to return coverage statistics for.</p>"
         },
         "ecrRepositoryName":{
           "shape":"CoverageStringFilterList",
           "documentation":"<p>The Amazon ECR repository name to filter on.</p>"
         },
-        "imagePulledAt":{
-          "shape":"CoverageDateFilterList",
-          "documentation":"<p>The date an image was last pulled at.</p>"
+        "ecrImageTags":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>The Amazon ECR image tags to filter on.</p>"
+        },
+        "ec2InstanceTags":{
+          "shape":"CoverageMapFilterList",
+          "documentation":"<p>The Amazon EC2 instance tags to filter on.</p>"
         },
         "lambdaFunctionName":{
           "shape":"CoverageStringFilterList",
           "documentation":"<p>Returns coverage statistics for Amazon Web Services Lambda functions filtered by function names.</p>"
         },
-        "lambdaFunctionRuntime":{
-          "shape":"CoverageStringFilterList",
-          "documentation":"<p>Returns coverage statistics for Amazon Web Services Lambda functions filtered by runtime.</p>"
-        },
         "lambdaFunctionTags":{
           "shape":"CoverageMapFilterList",
           "documentation":"<p>Returns coverage statistics for Amazon Web Services Lambda functions filtered by tag.</p>"
         },
+        "lambdaFunctionRuntime":{
+          "shape":"CoverageStringFilterList",
+          "documentation":"<p>Returns coverage statistics for Amazon Web Services Lambda functions filtered by runtime.</p>"
+        },
         "lastScannedAt":{
           "shape":"CoverageDateFilterList",
           "documentation":"<p>Filters Amazon Web Services resources based on whether Amazon Inspector has checked them for vulnerabilities within the specified time range.</p>"
         },
-        "resourceId":{
+        "scanMode":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>An array of Amazon Web Services resource IDs to return coverage statistics for.</p>"
+          "documentation":"<p>The filter to search for Amazon EC2 instance coverage by scan mode. Valid values are <code>EC2_SSM_AGENT_BASED</code> and <code>EC2_AGENTLESS</code>.</p>"
         },
-        "resourceType":{
-          "shape":"CoverageStringFilterList",
-          "documentation":"<p>An array of Amazon Web Services resource types to return coverage statistics for. The values can be <code>AWS_EC2_INSTANCE</code>, <code>AWS_LAMBDA_FUNCTION</code>, <code>AWS_ECR_CONTAINER_IMAGE</code>, <code>AWS_ECR_REPOSITORY</code> or <code>AWS_ACCOUNT</code>.</p>"
+        "imagePulledAt":{
+          "shape":"CoverageDateFilterList",
+          "documentation":"<p>The date an image was last pulled at.</p>"
         },
-        "scanMode":{
+        "ecrImageLastInUseAt":{
+          "shape":"CoverageDateFilterList",
+          "documentation":"<p>The Amazon ECR image that was last in use.</p>"
+        },
+        "ecrImageInUseCount":{
+          "shape":"CoverageNumberFilterList",
+          "documentation":"<p>The number of Amazon ECR images in use.</p>"
+        },
+        "codeRepositoryProjectName":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>The filter to search for Amazon EC2 instance coverage by scan mode. Valid values are <code>EC2_SSM_AGENT_BASED</code> and <code>EC2_AGENTLESS</code>.</p>"
+          "documentation":"<p>Filter criteria for code repositories based on project name.</p>"
         },
-        "scanStatusCode":{
+        "codeRepositoryProviderType":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>The scan status code to filter on. Valid values are: <code>ValidationException</code>, <code>InternalServerException</code>, <code>ResourceNotFoundException</code>, <code>BadRequestException</code>, and <code>ThrottlingException</code>.</p>"
+          "documentation":"<p>Filter criteria for code repositories based on provider type (such as GitHub, GitLab, etc.).</p>"
         },
-        "scanStatusReason":{
+        "codeRepositoryProviderTypeVisibility":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>The scan status reason to filter on.</p>"
+          "documentation":"<p>Filter criteria for code repositories based on visibility setting (public or private).</p>"
         },
-        "scanType":{
+        "lastScannedCommitId":{
           "shape":"CoverageStringFilterList",
-          "documentation":"<p>An array of Amazon Inspector scan types to return coverage statistics for.</p>"
+          "documentation":"<p>Filter criteria for code repositories based on the ID of the last scanned commit.</p>"
         }
       },
       "documentation":"<p>A structure that identifies filter criteria for <code>GetCoverageStatistics</code>.</p>"
@@ -3099,13 +4078,34 @@
       "max":10,
       "min":1
     },
+    "CoverageNumberFilter":{
+      "type":"structure",
+      "members":{
+        "upperInclusive":{
+          "shape":"Long",
+          "documentation":"<p>The upper inclusive for the coverage number.&gt;</p>"
+        },
+        "lowerInclusive":{
+          "shape":"Long",
+          "documentation":"<p>The lower inclusive for the coverage number.</p>"
+        }
+      },
+      "documentation":"<p>The coverage number to be used in the filter.</p>"
+    },
+    "CoverageNumberFilterList":{
+      "type":"list",
+      "member":{"shape":"CoverageNumberFilter"},
+      "max":10,
+      "min":1
+    },
     "CoverageResourceType":{
       "type":"string",
       "enum":[
         "AWS_EC2_INSTANCE",
         "AWS_ECR_CONTAINER_IMAGE",
         "AWS_ECR_REPOSITORY",
-        "AWS_LAMBDA_FUNCTION"
+        "AWS_LAMBDA_FUNCTION",
+        "CODE_REPOSITORY"
       ]
     },
     "CoverageStringComparison":{
@@ -3147,43 +4147,43 @@
     "CoveredResource":{
       "type":"structure",
       "required":[
-        "accountId",
-        "resourceId",
         "resourceType",
+        "resourceId",
+        "accountId",
         "scanType"
       ],
       "members":{
+        "resourceType":{
+          "shape":"CoverageResourceType",
+          "documentation":"<p>The type of the covered resource.</p>"
+        },
+        "resourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The ID of the covered resource.</p>"
+        },
         "accountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID of the covered resource.</p>"
         },
-        "lastScannedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time the resource was last checked for vulnerabilities.</p>"
+        "scanType":{
+          "shape":"ScanType",
+          "documentation":"<p>The Amazon Inspector scan type covering the resource.</p>"
         },
-        "resourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the covered resource.</p>"
+        "scanStatus":{
+          "shape":"ScanStatus",
+          "documentation":"<p>The status of the scan covering the resource.</p>"
         },
         "resourceMetadata":{
           "shape":"ResourceScanMetadata",
           "documentation":"<p>An object that contains details about the metadata.</p>"
         },
-        "resourceType":{
-          "shape":"CoverageResourceType",
-          "documentation":"<p>The type of the covered resource.</p>"
+        "lastScannedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time the resource was last checked for vulnerabilities.</p>"
         },
         "scanMode":{
           "shape":"ScanMode",
           "documentation":"<p>The scan method that is applied to the instance.</p>"
-        },
-        "scanStatus":{
-          "shape":"ScanStatus",
-          "documentation":"<p>The status of the scan covering the resource.</p>"
-        },
-        "scanType":{
-          "shape":"ScanType",
-          "documentation":"<p>The Amazon Inspector scan type covering the resource.</p>"
         }
       },
       "documentation":"<p>An object that contains details about a resource covered by Amazon Inspector.</p>"
@@ -3196,8 +4196,8 @@
       "type":"structure",
       "required":[
         "scanName",
-        "schedule",
         "securityLevel",
+        "schedule",
         "targets"
       ],
       "members":{
@@ -3205,21 +4205,21 @@
           "shape":"CisScanName",
           "documentation":"<p>The scan name for the CIS scan configuration.</p>"
         },
-        "schedule":{
-          "shape":"Schedule",
-          "documentation":"<p>The schedule for the CIS scan configuration.</p>"
-        },
         "securityLevel":{
           "shape":"CisSecurityLevel",
           "documentation":"<p> The security level for the CIS scan configuration. Security level refers to the Benchmark levels that CIS assigns to a profile. </p>"
         },
-        "tags":{
-          "shape":"CisTagMap",
-          "documentation":"<p>The tags for the CIS scan configuration.</p>"
+        "schedule":{
+          "shape":"Schedule",
+          "documentation":"<p>The schedule for the CIS scan configuration.</p>"
         },
         "targets":{
           "shape":"CreateCisTargets",
           "documentation":"<p>The targets for the CIS scan configuration.</p>"
+        },
+        "tags":{
+          "shape":"CisTagMap",
+          "documentation":"<p>The tags for the CIS scan configuration.</p>"
         }
       }
     },
@@ -3250,6 +4250,92 @@
       },
       "documentation":"<p>Creates CIS targets.</p>"
     },
+    "CreateCodeSecurityIntegrationRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type"
+      ],
+      "members":{
+        "name":{
+          "shape":"IntegrationName",
+          "documentation":"<p>The name of the code security integration.</p>"
+        },
+        "type":{
+          "shape":"IntegrationType",
+          "documentation":"<p>The type of repository provider for the integration.</p>"
+        },
+        "details":{
+          "shape":"CreateIntegrationDetail",
+          "documentation":"<p>The integration details specific to the repository provider type.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to apply to the code security integration.</p>"
+        }
+      }
+    },
+    "CreateCodeSecurityIntegrationResponse":{
+      "type":"structure",
+      "required":[
+        "integrationArn",
+        "status"
+      ],
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created code security integration.</p>"
+        },
+        "status":{
+          "shape":"IntegrationStatus",
+          "documentation":"<p>The current status of the code security integration.</p>"
+        },
+        "authorizationUrl":{
+          "shape":"AuthorizationUrl",
+          "documentation":"<p>The URL used to authorize the integration with the repository provider.</p>"
+        }
+      }
+    },
+    "CreateCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "name",
+        "level",
+        "configuration"
+      ],
+      "members":{
+        "name":{
+          "shape":"ScanConfigurationName",
+          "documentation":"<p>The name of the scan configuration.</p>"
+        },
+        "level":{
+          "shape":"ConfigurationLevel",
+          "documentation":"<p>The security level for the scan configuration.</p>"
+        },
+        "configuration":{
+          "shape":"CodeSecurityScanConfiguration",
+          "documentation":"<p>The configuration settings for the code security scan.</p>"
+        },
+        "scopeSettings":{
+          "shape":"ScopeSettings",
+          "documentation":"<p>The scope settings that define which repositories will be scanned. Include this parameter to create a default scan configuration. Otherwise Amazon Inspector creates a general scan configuration. </p> <p>A default scan configuration automatically applies to all existing and future projects imported into Amazon Inspector. Use the <code>BatchAssociateCodeSecurityScanConfiguration</code> operation to associate a general scan configuration with projects.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to apply to the scan configuration.</p>"
+        }
+      }
+    },
+    "CreateCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "required":["scanConfigurationArn"],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created scan configuration.</p>"
+        }
+      }
+    },
     "CreateFilterRequest":{
       "type":"structure",
       "required":[
@@ -3274,13 +4360,13 @@
           "shape":"FilterName",
           "documentation":"<p>The name of the filter. Minimum length of 3. Maximum length of 64. Valid characters include alphanumeric characters, dot (.), underscore (_), and dash (-). Spaces are not allowed.</p>"
         },
-        "reason":{
-          "shape":"FilterReason",
-          "documentation":"<p>The reason for creating the filter.</p>"
-        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>A list of tags for the filter.</p>"
+        },
+        "reason":{
+          "shape":"FilterReason",
+          "documentation":"<p>The reason for creating the filter.</p>"
         }
       }
     },
@@ -3324,6 +4410,35 @@
         }
       }
     },
+    "CreateGitLabSelfManagedIntegrationDetail":{
+      "type":"structure",
+      "required":[
+        "instanceUrl",
+        "accessToken"
+      ],
+      "members":{
+        "instanceUrl":{
+          "shape":"InstanceUrl",
+          "documentation":"<p>The URL of the self-managed GitLab instance.</p>"
+        },
+        "accessToken":{
+          "shape":"GitLabAccessToken",
+          "documentation":"<p>The personal access token used to authenticate with the self-managed GitLab instance.</p>"
+        }
+      },
+      "documentation":"<p>Contains details required to create an integration with a self-managed GitLab instance.</p>"
+    },
+    "CreateIntegrationDetail":{
+      "type":"structure",
+      "members":{
+        "gitlabSelfManaged":{
+          "shape":"CreateGitLabSelfManagedIntegrationDetail",
+          "documentation":"<p>Details specific to creating an integration with a self-managed GitLab instance.</p>"
+        }
+      },
+      "documentation":"<p>Contains details required to create a code security integration with a specific repository provider.</p>",
+      "union":true
+    },
     "CreateSbomExportRequest":{
       "type":"structure",
       "required":[
@@ -3331,14 +4446,14 @@
         "s3Destination"
       ],
       "members":{
-        "reportFormat":{
-          "shape":"SbomReportFormat",
-          "documentation":"<p>The output format for the software bill of materials (SBOM) report.</p>"
-        },
         "resourceFilterCriteria":{
           "shape":"ResourceFilterCriteria",
           "documentation":"<p>The resource filter criteria for the software bill of materials (SBOM) report.</p>"
         },
+        "reportFormat":{
+          "shape":"SbomReportFormat",
+          "documentation":"<p>The output format for the software bill of materials (SBOM) report.</p>"
+        },
         "s3Destination":{
           "shape":"Destination",
           "documentation":"<p>Contains details of the Amazon S3 bucket and KMS key used to export findings.</p>"
@@ -3362,47 +4477,52 @@
       "type":"structure",
       "members":{
         "baseScore":{
-          "shape":"Cvss2BaseScore",
+          "shape":"CvssBaseScore",
           "documentation":"<p>The CVSS v2 base score for the vulnerability.</p>"
         },
         "scoringVector":{
-          "shape":"Cvss2ScoringVector",
+          "shape":"CvssScoringVector",
           "documentation":"<p>The scoring vector associated with the CVSS v2 score.</p>"
         }
       },
       "documentation":"<p>The Common Vulnerability Scoring System (CVSS) version 2 details for the vulnerability.</p>"
     },
-    "Cvss2BaseScore":{"type":"double"},
-    "Cvss2ScoringVector":{
-      "type":"string",
-      "min":0
-    },
     "Cvss3":{
       "type":"structure",
       "members":{
         "baseScore":{
-          "shape":"Cvss3BaseScore",
+          "shape":"CvssBaseScore",
           "documentation":"<p>The CVSS v3 base score for the vulnerability.</p>"
         },
         "scoringVector":{
-          "shape":"Cvss3ScoringVector",
+          "shape":"CvssScoringVector",
           "documentation":"<p>The scoring vector associated with the CVSS v3 score.</p>"
         }
       },
       "documentation":"<p>The Common Vulnerability Scoring System (CVSS) version 3 details for the vulnerability.</p>"
     },
-    "Cvss3BaseScore":{"type":"double"},
-    "Cvss3ScoringVector":{
-      "type":"string",
-      "min":0
+    "Cvss4":{
+      "type":"structure",
+      "members":{
+        "baseScore":{
+          "shape":"CvssBaseScore",
+          "documentation":"<p>The base CVSS v4 score for the vulnerability finding, which rates the severity of the vulnerability on a scale from 0 to 10.</p>"
+        },
+        "scoringVector":{
+          "shape":"CvssScoringVector",
+          "documentation":"<p>The CVSS v4 scoring vector, which contains the metrics and measurements that were used to calculate the base score.</p>"
+        }
+      },
+      "documentation":"<p>The Common Vulnerability Scoring System (CVSS) version 4 details for the vulnerability.</p>"
     },
+    "CvssBaseScore":{"type":"double"},
     "CvssScore":{
       "type":"structure",
       "required":[
         "baseScore",
         "scoringVector",
-        "source",
-        "version"
+        "version",
+        "source"
       ],
       "members":{
         "baseScore":{
@@ -3413,13 +4533,13 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The vector string of the CVSS score.</p>"
         },
-        "source":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The source of the CVSS score.</p>"
-        },
         "version":{
           "shape":"NonEmptyString",
           "documentation":"<p>The version of CVSS used for the score.</p>"
+        },
+        "source":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The source of the CVSS score.</p>"
         }
       },
       "documentation":"<p>The CVSS score for a finding.</p>"
@@ -3449,35 +4569,35 @@
     "CvssScoreDetails":{
       "type":"structure",
       "required":[
-        "score",
         "scoreSource",
-        "scoringVector",
-        "version"
+        "version",
+        "score",
+        "scoringVector"
       ],
       "members":{
-        "adjustments":{
-          "shape":"CvssScoreAdjustmentList",
-          "documentation":"<p>An object that contains details about adjustment Amazon Inspector made to the CVSS score.</p>"
+        "scoreSource":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The source for the CVSS score.</p>"
         },
         "cvssSource":{
           "shape":"NonEmptyString",
           "documentation":"<p>The source of the CVSS data.</p>"
         },
+        "version":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The CVSS version used in scoring.</p>"
+        },
         "score":{
           "shape":"Double",
           "documentation":"<p>The CVSS score.</p>"
         },
-        "scoreSource":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The source for the CVSS score.</p>"
-        },
         "scoringVector":{
           "shape":"NonEmptyString",
           "documentation":"<p>The vector for the CVSS score.</p>"
         },
-        "version":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The CVSS version used in scoring.</p>"
+        "adjustments":{
+          "shape":"CvssScoreAdjustmentList",
+          "documentation":"<p>An object that contains details about adjustment Amazon Inspector made to the CVSS score.</p>"
         }
       },
       "documentation":"<p>Information about the CVSS score.</p>"
@@ -3486,6 +4606,10 @@
       "type":"list",
       "member":{"shape":"CvssScore"}
     },
+    "CvssScoringVector":{
+      "type":"string",
+      "min":0
+    },
     "Cwe":{
       "type":"string",
       "min":0
@@ -3515,13 +4639,13 @@
     "DateFilter":{
       "type":"structure",
       "members":{
-        "endInclusive":{
-          "shape":"Timestamp",
-          "documentation":"<p>A timestamp representing the end of the time period filtered on.</p>"
-        },
         "startInclusive":{
           "shape":"Timestamp",
           "documentation":"<p>A timestamp representing the start of the time period filtered on.</p>"
+        },
+        "endInclusive":{
+          "shape":"Timestamp",
+          "documentation":"<p>A timestamp representing the end of the time period filtered on.</p>"
         }
       },
       "documentation":"<p>Contains details on the time range used to filter findings.</p>"
@@ -3612,6 +4736,44 @@
         }
       }
     },
+    "DeleteCodeSecurityIntegrationRequest":{
+      "type":"structure",
+      "required":["integrationArn"],
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration to delete.</p>"
+        }
+      }
+    },
+    "DeleteCodeSecurityIntegrationResponse":{
+      "type":"structure",
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the deleted code security integration.</p>"
+        }
+      }
+    },
+    "DeleteCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":["scanConfigurationArn"],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration to delete.</p>"
+        }
+      }
+    },
+    "DeleteCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the deleted scan configuration.</p>"
+        }
+      }
+    },
     "DeleteFilterRequest":{
       "type":"structure",
       "required":["arn"],
@@ -3634,8 +4796,7 @@
     },
     "DescribeOrganizationConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeOrganizationConfigurationResponse":{
       "type":"structure",
@@ -3720,7 +4881,7 @@
     "DisableResourceTypeList":{
       "type":"list",
       "member":{"shape":"ResourceScanType"},
-      "max":3,
+      "max":5,
       "min":0
     },
     "DisableResponse":{
@@ -3737,6 +4898,27 @@
         }
       }
     },
+    "DisassociateConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "scanConfigurationArn",
+        "resource"
+      ],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration to disassociate from a code repository.</p>"
+        },
+        "resource":{"shape":"CodeSecurityResource"}
+      },
+      "documentation":"<p>Contains details about a request to disassociate a code repository from a scan configuration.</p>"
+    },
+    "DisassociateConfigurationRequestList":{
+      "type":"list",
+      "member":{"shape":"DisassociateConfigurationRequest"},
+      "max":25,
+      "min":1
+    },
     "DisassociateMemberRequest":{
       "type":"structure",
       "required":["accountId"],
@@ -3798,6 +4980,10 @@
           "shape":"StringFilterList",
           "documentation":"<p>The AMI IDs associated with the Amazon EC2 instances to aggregate findings for.</p>"
         },
+        "operatingSystems":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The operating system types to aggregate findings for. Valid values must be uppercase and underscore separated, examples are <code>ORACLE_LINUX_7</code> and <code>ALPINE_LINUX_3_8</code>.</p>"
+        },
         "instanceIds":{
           "shape":"StringFilterList",
           "documentation":"<p>The Amazon EC2 instance IDs to aggregate findings for.</p>"
@@ -3806,17 +4992,13 @@
           "shape":"MapFilterList",
           "documentation":"<p>The Amazon EC2 instance tags to aggregate findings for.</p>"
         },
-        "operatingSystems":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The operating system types to aggregate findings for. Valid values must be uppercase and underscore separated, examples are <code>ORACLE_LINUX_7</code> and <code>ALPINE_LINUX_3_8</code>.</p>"
+        "sortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The order to sort results by.</p>"
         },
         "sortBy":{
           "shape":"Ec2InstanceSortBy",
           "documentation":"<p>The value to sort results by.</p>"
-        },
-        "sortOrder":{
-          "shape":"SortOrder",
-          "documentation":"<p>The order to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on Amazon EC2 instances.</p>"
@@ -3825,33 +5007,33 @@
       "type":"structure",
       "required":["instanceId"],
       "members":{
-        "accountId":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services account for the Amazon EC2 instance.</p>"
+        "instanceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon EC2 instance ID.</p>"
         },
         "ami":{
           "shape":"AmiId",
           "documentation":"<p>The Amazon Machine Image (AMI) of the Amazon EC2 instance.</p>"
         },
-        "instanceId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Amazon EC2 instance ID.</p>"
+        "operatingSystem":{
+          "shape":"String",
+          "documentation":"<p>The operating system of the Amazon EC2 instance.</p>"
         },
         "instanceTags":{
           "shape":"TagMap",
           "documentation":"<p>The tags attached to the instance.</p>"
         },
-        "networkFindings":{
-          "shape":"Long",
-          "documentation":"<p>The number of network findings for the Amazon EC2 instance.</p>"
-        },
-        "operatingSystem":{
+        "accountId":{
           "shape":"String",
-          "documentation":"<p>The operating system of the Amazon EC2 instance.</p>"
+          "documentation":"<p>The Amazon Web Services account for the Amazon EC2 instance.</p>"
         },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that contains the count of matched findings per severity.</p>"
+        },
+        "networkFindings":{
+          "shape":"Long",
+          "documentation":"<p>The number of network findings for the Amazon EC2 instance.</p>"
         }
       },
       "documentation":"<p>A response that contains the results of a finding aggregation by Amazon EC2 instance.</p>"
@@ -3868,6 +5050,10 @@
     "Ec2Metadata":{
       "type":"structure",
       "members":{
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags attached to the instance.</p>"
+        },
         "amiId":{
           "shape":"AmiId",
           "documentation":"<p>The ID of the Amazon Machine Image (AMI) used to launch the instance.</p>"
@@ -3875,10 +5061,6 @@
         "platform":{
           "shape":"Ec2Platform",
           "documentation":"<p>The platform of the instance.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags attached to the instance.</p>"
         }
       },
       "documentation":"<p>Meta data details of an Amazon EC2 instance.</p>"
@@ -3924,13 +5106,17 @@
       "type":"structure",
       "required":["rescanDuration"],
       "members":{
+        "rescanDuration":{
+          "shape":"EcrRescanDuration",
+          "documentation":"<p>The rescan duration configured for image push date.</p>"
+        },
         "pullDateRescanDuration":{
           "shape":"EcrPullDateRescanDuration",
           "documentation":"<p>The rescan duration configured for image pull date.</p>"
         },
-        "rescanDuration":{
-          "shape":"EcrRescanDuration",
-          "documentation":"<p>The rescan duration configured for image push date.</p>"
+        "pullDateRescanMode":{
+          "shape":"EcrPullDateRescanMode",
+          "documentation":"<p>The pull date for the re-scan mode.</p>"
         }
       },
       "documentation":"<p>Details about the ECR automated re-scan duration setting for your environment.</p>"
@@ -3948,13 +5134,21 @@
     "EcrContainerImageMetadata":{
       "type":"structure",
       "members":{
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags associated with the Amazon ECR image metadata.</p>"
+        },
         "imagePulledAt":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>The date an image was last pulled at.</p>"
         },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>Tags associated with the Amazon ECR image metadata.</p>"
+        "lastInUseAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The last time an Amazon ECR image was used in an Amazon ECS task or Amazon EKS pod.</p>"
+        },
+        "inUseCount":{
+          "shape":"Long",
+          "documentation":"<p>The number of Amazon ECS tasks or Amazon EKS pods where the Amazon ECR container image is in use.</p>"
         }
       },
       "documentation":"<p>Information on the Amazon ECR image metadata associated with a finding.</p>"
@@ -3969,6 +5163,13 @@
         "DAYS_180"
       ]
     },
+    "EcrPullDateRescanMode":{
+      "type":"string",
+      "enum":[
+        "LAST_PULL_DATE",
+        "LAST_IN_USE_AT"
+      ]
+    },
     "EcrRepositoryMetadata":{
       "type":"structure",
       "members":{
@@ -3997,13 +5198,9 @@
     "EcrRescanDurationState":{
       "type":"structure",
       "members":{
-        "pullDateRescanDuration":{
-          "shape":"EcrPullDateRescanDuration",
-          "documentation":"<p>The rescan duration configured for image pull date.</p>"
-        },
         "rescanDuration":{
           "shape":"EcrRescanDuration",
-          "documentation":"<p>The rescan duration configured for image push date. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>The rescan duration configured for image push date. </p>"
         },
         "status":{
           "shape":"EcrRescanDurationStatus",
@@ -4012,6 +5209,14 @@
         "updatedAt":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>A timestamp representing when the last time the ECR scan duration setting was changed.</p>"
+        },
+        "pullDateRescanDuration":{
+          "shape":"EcrPullDateRescanDuration",
+          "documentation":"<p>The rescan duration configured for image pull date.</p>"
+        },
+        "pullDateRescanMode":{
+          "shape":"EcrPullDateRescanMode",
+          "documentation":"<p>The pull date for the re-scan mode.</p>"
         }
       },
       "documentation":"<p>Details about the state of your ECR re-scan duration settings. The ECR re-scan duration defines how long an ECR image will be actively scanned by Amazon Inspector. When the number of days since an image was last pushed exceeds the duration configured for image pull date, and the duration configured for image pull date, the monitoring state of that image becomes <code>inactive</code> and all associated findings are scheduled for closure.</p>"
@@ -4036,14 +5241,14 @@
       "type":"structure",
       "required":["delegatedAdminAccountId"],
       "members":{
+        "delegatedAdminAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID of the Amazon Inspector delegated administrator.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>The idempotency token for the request.</p>",
           "idempotencyToken":true
-        },
-        "delegatedAdminAccountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID of the Amazon Inspector delegated administrator.</p>"
         }
       }
     },
@@ -4065,21 +5270,21 @@
           "shape":"AccountIdSet",
           "documentation":"<p>A list of account IDs you want to enable Amazon Inspector scans for.</p>"
         },
+        "resourceTypes":{
+          "shape":"EnableResourceTypeList",
+          "documentation":"<p>The resource scan types you want to enable.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>The idempotency token for the request.</p>",
           "idempotencyToken":true
-        },
-        "resourceTypes":{
-          "shape":"EnableResourceTypeList",
-          "documentation":"<p>The resource scan types you want to enable.</p>"
         }
       }
     },
     "EnableResourceTypeList":{
       "type":"list",
       "member":{"shape":"ResourceScanType"},
-      "max":3,
+      "max":5,
       "min":1
     },
     "EnableResponse":{
@@ -4147,14 +5352,14 @@
     "Evidence":{
       "type":"structure",
       "members":{
-        "evidenceDetail":{
-          "shape":"EvidenceDetail",
-          "documentation":"<p>The evidence details.</p>"
-        },
         "evidenceRule":{
           "shape":"EvidenceRule",
           "documentation":"<p>The evidence rule.</p>"
         },
+        "evidenceDetail":{
+          "shape":"EvidenceDetail",
+          "documentation":"<p>The evidence details.</p>"
+        },
         "severity":{
           "shape":"EvidenceSeverity",
           "documentation":"<p>The evidence severity.</p>"
@@ -4180,7 +5385,7 @@
     },
     "ExecutionRoleArn":{
       "type":"string",
-      "pattern":"^arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "ExploitAvailable":{
       "type":"string",
@@ -4192,13 +5397,13 @@
     "ExploitObserved":{
       "type":"structure",
       "members":{
-        "firstSeen":{
-          "shape":"FirstSeen",
-          "documentation":"<p>The date an time when the exploit was first seen.</p>"
-        },
         "lastSeen":{
           "shape":"LastSeen",
           "documentation":"<p>The date an time when the exploit was last seen.</p>"
+        },
+        "firstSeen":{
+          "shape":"FirstSeen",
+          "documentation":"<p>The date an time when the exploit was first seen.</p>"
         }
       },
       "documentation":"<p>Contains information on when this exploit was observed.</p>"
@@ -4234,6 +5439,14 @@
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID.</p>"
         },
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of Amazon Inspector for the account.</p>"
+        },
+        "resourceStatus":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>An object detailing which resources Amazon Inspector is enabled to scan for the account.</p>"
+        },
         "errorCode":{
           "shape":"ErrorCode",
           "documentation":"<p>The error code explaining why the account failed to enable Amazon Inspector.</p>"
@@ -4241,14 +5454,6 @@
         "errorMessage":{
           "shape":"NonEmptyString",
           "documentation":"<p>The error message received when the account failed to enable Amazon Inspector.</p>"
-        },
-        "resourceStatus":{
-          "shape":"ResourceStatus",
-          "documentation":"<p>An object detailing which resources Amazon Inspector is enabled to scan for the account.</p>"
-        },
-        "status":{
-          "shape":"Status",
-          "documentation":"<p>The status of Amazon Inspector for the account.</p>"
         }
       },
       "documentation":"<p>An object with details on why an account failed to enable Amazon Inspector.</p>"
@@ -4259,6 +5464,29 @@
       "max":100,
       "min":0
     },
+    "FailedAssociationResult":{
+      "type":"structure",
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration that failed to be associated or disassociated.</p>"
+        },
+        "resource":{"shape":"CodeSecurityResource"},
+        "statusCode":{
+          "shape":"AssociationResultStatusCode",
+          "documentation":"<p>The status code indicating why the association or disassociation failed.</p>"
+        },
+        "statusMessage":{
+          "shape":"AssociationResultStatusMessage",
+          "documentation":"<p>A message explaining why the association or disassociation failed.</p>"
+        }
+      },
+      "documentation":"<p>Details about a failed attempt to associate or disassociate a code repository with a scan configuration.</p>"
+    },
+    "FailedAssociationResultList":{
+      "type":"list",
+      "member":{"shape":"FailedAssociationResult"}
+    },
     "FailedMemberAccountEc2DeepInspectionStatusState":{
       "type":"structure",
       "required":["accountId"],
@@ -4292,43 +5520,47 @@
     "Filter":{
       "type":"structure",
       "required":[
-        "action",
         "arn",
-        "createdAt",
-        "criteria",
-        "name",
         "ownerId",
+        "name",
+        "criteria",
+        "action",
+        "createdAt",
         "updatedAt"
       ],
       "members":{
-        "action":{
-          "shape":"FilterAction",
-          "documentation":"<p>The action that is to be applied to the findings that match the filter.</p>"
-        },
         "arn":{
           "shape":"FilterArn",
           "documentation":"<p>The Amazon Resource Number (ARN) associated with this filter.</p>"
         },
-        "createdAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time this filter was created at.</p>"
+        "ownerId":{
+          "shape":"OwnerId",
+          "documentation":"<p>The Amazon Web Services account ID of the account that created the filter.</p>"
+        },
+        "name":{
+          "shape":"FilterName",
+          "documentation":"<p>The name of the filter.</p>"
         },
         "criteria":{
           "shape":"FilterCriteria",
           "documentation":"<p>Details on the filter criteria associated with this filter.</p>"
         },
+        "action":{
+          "shape":"FilterAction",
+          "documentation":"<p>The action that is to be applied to the findings that match the filter.</p>"
+        },
+        "createdAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time this filter was created at.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time the filter was last updated at.</p>"
+        },
         "description":{
           "shape":"FilterDescription",
           "documentation":"<p>A description of the filter.</p>"
         },
-        "name":{
-          "shape":"FilterName",
-          "documentation":"<p>The name of the filter.</p>"
-        },
-        "ownerId":{
-          "shape":"OwnerId",
-          "documentation":"<p>The Amazon Web Services account ID of the account that created the filter.</p>"
-        },
         "reason":{
           "shape":"FilterReason",
           "documentation":"<p>The reason for the filter.</p>"
@@ -4336,10 +5568,6 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags attached to the filter.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time the filter was last updated at.</p>"
         }
       },
       "documentation":"<p>Details about a filter.</p>"
@@ -4363,54 +5591,78 @@
     "FilterCriteria":{
       "type":"structure",
       "members":{
+        "findingArn":{
+          "shape":"StringFilterList",
+          "documentation":"<p>Details on the finding ARNs used to filter findings.</p>"
+        },
         "awsAccountId":{
           "shape":"StringFilterList",
           "documentation":"<p>Details of the Amazon Web Services account IDs used to filter findings.</p>"
         },
-        "codeVulnerabilityDetectorName":{
+        "findingType":{
           "shape":"StringFilterList",
-          "documentation":"<p>The name of the detector used to identify a code vulnerability in a Lambda function used to filter findings.</p>"
+          "documentation":"<p>Details on the finding types used to filter findings.</p>"
         },
-        "codeVulnerabilityDetectorTags":{
+        "severity":{
           "shape":"StringFilterList",
-          "documentation":"<p>The detector type tag associated with the vulnerability used to filter findings. Detector tags group related vulnerabilities by common themes or tactics. For a list of available tags by programming language, see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/java/tags/\">Java tags</a>, or <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/python/tags/\">Python tags</a>. </p>"
+          "documentation":"<p>Details on the severity used to filter findings.</p>"
         },
-        "codeVulnerabilityFilePath":{
+        "firstObservedAt":{
+          "shape":"DateFilterList",
+          "documentation":"<p>Details on the date and time a finding was first seen used to filter findings.</p>"
+        },
+        "lastObservedAt":{
+          "shape":"DateFilterList",
+          "documentation":"<p>Details on the date and time a finding was last seen used to filter findings.</p>"
+        },
+        "updatedAt":{
+          "shape":"DateFilterList",
+          "documentation":"<p>Details on the date and time a finding was last updated at used to filter findings.</p>"
+        },
+        "findingStatus":{
           "shape":"StringFilterList",
-          "documentation":"<p>The file path to the file in a Lambda function that contains a code vulnerability used to filter findings.</p>"
+          "documentation":"<p>Details on the finding status types used to filter findings.</p>"
         },
-        "componentId":{
+        "title":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details of the component IDs used to filter findings.</p>"
+          "documentation":"<p>Details on the finding title used to filter findings.</p>"
         },
-        "componentType":{
+        "inspectorScore":{
+          "shape":"NumberFilterList",
+          "documentation":"<p>The Amazon Inspector score to filter on.</p>"
+        },
+        "resourceType":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details of the component types used to filter findings.</p>"
+          "documentation":"<p>Details on the resource types used to filter findings.</p>"
         },
-        "ec2InstanceImageId":{
+        "resourceId":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details of the Amazon EC2 instance image IDs used to filter findings.</p>"
+          "documentation":"<p>Details on the resource IDs used to filter findings.</p>"
         },
-        "ec2InstanceSubnetId":{
+        "resourceTags":{
+          "shape":"MapFilterList",
+          "documentation":"<p>Details on the resource tags used to filter findings.</p>"
+        },
+        "ec2InstanceImageId":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details of the Amazon EC2 instance subnet IDs used to filter findings.</p>"
+          "documentation":"<p>Details of the Amazon EC2 instance image IDs used to filter findings.</p>"
         },
         "ec2InstanceVpcId":{
           "shape":"StringFilterList",
           "documentation":"<p>Details of the Amazon EC2 instance VPC IDs used to filter findings.</p>"
         },
-        "ecrImageArchitecture":{
-          "shape":"StringFilterList",
-          "documentation":"<p>Details of the Amazon ECR image architecture types used to filter findings.</p>"
-        },
-        "ecrImageHash":{
+        "ec2InstanceSubnetId":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details of the Amazon ECR image hashes used to filter findings.</p>"
+          "documentation":"<p>Details of the Amazon EC2 instance subnet IDs used to filter findings.</p>"
         },
         "ecrImagePushedAt":{
           "shape":"DateFilterList",
           "documentation":"<p>Details on the Amazon ECR image push date and time used to filter findings.</p>"
         },
+        "ecrImageArchitecture":{
+          "shape":"StringFilterList",
+          "documentation":"<p>Details of the Amazon ECR image architecture types used to filter findings.</p>"
+        },
         "ecrImageRegistry":{
           "shape":"StringFilterList",
           "documentation":"<p>Details on the Amazon ECR registry used to filter findings.</p>"
@@ -4423,113 +5675,105 @@
           "shape":"StringFilterList",
           "documentation":"<p>The tags attached to the Amazon ECR container image.</p>"
         },
-        "epssScore":{
+        "ecrImageHash":{
+          "shape":"StringFilterList",
+          "documentation":"<p>Details of the Amazon ECR image hashes used to filter findings.</p>"
+        },
+        "ecrImageLastInUseAt":{
+          "shape":"DateFilterList",
+          "documentation":"<p>Filter criteria indicating when an Amazon ECR image was last used in an Amazon ECS cluster task or Amazon EKS cluster pod.</p>"
+        },
+        "ecrImageInUseCount":{
           "shape":"NumberFilterList",
-          "documentation":"<p>The EPSS score used to filter findings.</p>"
+          "documentation":"<p>Filter criteria indicating when details for an Amazon ECR image include when an Amazon ECR image is in use.</p>"
         },
-        "exploitAvailable":{
+        "portRange":{
+          "shape":"PortRangeFilterList",
+          "documentation":"<p>Details on the port ranges used to filter findings.</p>"
+        },
+        "networkProtocol":{
           "shape":"StringFilterList",
-          "documentation":"<p>Filters the list of Amazon Web Services Lambda findings by the availability of exploits.</p>"
+          "documentation":"<p>Details on network protocol used to filter findings.</p>"
         },
-        "findingArn":{
+        "componentId":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the finding ARNs used to filter findings.</p>"
+          "documentation":"<p>Details of the component IDs used to filter findings.</p>"
         },
-        "findingStatus":{
+        "componentType":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the finding status types used to filter findings.</p>"
+          "documentation":"<p>Details of the component types used to filter findings.</p>"
         },
-        "findingType":{
+        "vulnerabilityId":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the finding types used to filter findings.</p>"
+          "documentation":"<p>Details on the vulnerability ID used to filter findings.</p>"
         },
-        "firstObservedAt":{
-          "shape":"DateFilterList",
-          "documentation":"<p>Details on the date and time a finding was first seen used to filter findings.</p>"
+        "vulnerabilitySource":{
+          "shape":"StringFilterList",
+          "documentation":"<p>Details on the vulnerability type used to filter findings.</p>"
         },
-        "fixAvailable":{
+        "vendorSeverity":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on whether a fix is available through a version update. This value can be <code>YES</code>, <code>NO</code>, or <code>PARTIAL</code>. A <code>PARTIAL</code> fix means that some, but not all, of the packages identified in the finding have fixes available through updated versions.</p>"
+          "documentation":"<p>Details on the vendor severity used to filter findings.</p>"
         },
-        "inspectorScore":{
-          "shape":"NumberFilterList",
-          "documentation":"<p>The Amazon Inspector score to filter on.</p>"
+        "vulnerablePackages":{
+          "shape":"PackageFilterList",
+          "documentation":"<p>Details on the vulnerable packages used to filter findings.</p>"
         },
-        "lambdaFunctionExecutionRoleArn":{
+        "relatedVulnerabilities":{
           "shape":"StringFilterList",
-          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by execution role.</p>"
-        },
-        "lambdaFunctionLastModifiedAt":{
-          "shape":"DateFilterList",
-          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the date and time that a user last updated the configuration, in <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601 format</a> </p>"
+          "documentation":"<p>Details on the related vulnerabilities used to filter findings.</p>"
         },
-        "lambdaFunctionLayers":{
+        "fixAvailable":{
           "shape":"StringFilterList",
-          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\"> layers</a>. A Lambda function can have up to five layers.</p>"
+          "documentation":"<p>Details on whether a fix is available through a version update. This value can be <code>YES</code>, <code>NO</code>, or <code>PARTIAL</code>. A <code>PARTIAL</code> fix means that some, but not all, of the packages identified in the finding have fixes available through updated versions.</p>"
         },
         "lambdaFunctionName":{
           "shape":"StringFilterList",
           "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the name of the function.</p>"
         },
+        "lambdaFunctionLayers":{
+          "shape":"StringFilterList",
+          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\"> layers</a>. A Lambda function can have up to five layers.</p>"
+        },
         "lambdaFunctionRuntime":{
           "shape":"StringFilterList",
           "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the runtime environment for the Lambda function.</p>"
         },
-        "lastObservedAt":{
+        "lambdaFunctionLastModifiedAt":{
           "shape":"DateFilterList",
-          "documentation":"<p>Details on the date and time a finding was last seen used to filter findings.</p>"
-        },
-        "networkProtocol":{
-          "shape":"StringFilterList",
-          "documentation":"<p>Details on network protocol used to filter findings.</p>"
-        },
-        "portRange":{
-          "shape":"PortRangeFilterList",
-          "documentation":"<p>Details on the port ranges used to filter findings.</p>"
+          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by the date and time that a user last updated the configuration, in <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601 format</a> </p>"
         },
-        "relatedVulnerabilities":{
+        "lambdaFunctionExecutionRoleArn":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the related vulnerabilities used to filter findings.</p>"
+          "documentation":"<p>Filters the list of Amazon Web Services Lambda functions by execution role.</p>"
         },
-        "resourceId":{
+        "exploitAvailable":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the resource IDs used to filter findings.</p>"
-        },
-        "resourceTags":{
-          "shape":"MapFilterList",
-          "documentation":"<p>Details on the resource tags used to filter findings.</p>"
+          "documentation":"<p>Filters the list of Amazon Web Services Lambda findings by the availability of exploits.</p>"
         },
-        "resourceType":{
+        "codeVulnerabilityDetectorName":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the resource types used to filter findings.</p>"
+          "documentation":"<p>The name of the detector used to identify a code vulnerability in a Lambda function used to filter findings.</p>"
         },
-        "severity":{
+        "codeVulnerabilityDetectorTags":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the severity used to filter findings.</p>"
+          "documentation":"<p>The detector type tag associated with the vulnerability used to filter findings. Detector tags group related vulnerabilities by common themes or tactics. For a list of available tags by programming language, see <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/java/tags/\">Java tags</a>, or <a href=\"https://docs.aws.amazon.com/codeguru/detector-library/python/tags/\">Python tags</a>. </p>"
         },
-        "title":{
+        "codeVulnerabilityFilePath":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the finding title used to filter findings.</p>"
-        },
-        "updatedAt":{
-          "shape":"DateFilterList",
-          "documentation":"<p>Details on the date and time a finding was last updated at used to filter findings.</p>"
+          "documentation":"<p>The file path to the file in a Lambda function that contains a code vulnerability used to filter findings.</p>"
         },
-        "vendorSeverity":{
-          "shape":"StringFilterList",
-          "documentation":"<p>Details on the vendor severity used to filter findings.</p>"
+        "epssScore":{
+          "shape":"NumberFilterList",
+          "documentation":"<p>The EPSS score used to filter findings.</p>"
         },
-        "vulnerabilityId":{
+        "codeRepositoryProjectName":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the vulnerability ID used to filter findings.</p>"
+          "documentation":"<p>Filter criteria for findings based on the project name in a code repository.</p>"
         },
-        "vulnerabilitySource":{
+        "codeRepositoryProviderType":{
           "shape":"StringFilterList",
-          "documentation":"<p>Details on the vulnerability type used to filter findings.</p>"
-        },
-        "vulnerablePackages":{
-          "shape":"PackageFilterList",
-          "documentation":"<p>Details on the vulnerable packages used to filter findings.</p>"
+          "documentation":"<p>Filter criteria for findings based on the repository provider type (such as GitHub, GitLab, etc.).</p>"
         }
       },
       "documentation":"<p>Details on the criteria used to define the filter.</p>"
@@ -4556,53 +5800,65 @@
     "Finding":{
       "type":"structure",
       "required":[
+        "findingArn",
         "awsAccountId",
+        "type",
         "description",
-        "findingArn",
-        "firstObservedAt",
-        "lastObservedAt",
         "remediation",
-        "resources",
         "severity",
+        "firstObservedAt",
+        "lastObservedAt",
         "status",
-        "type"
+        "resources"
       ],
       "members":{
+        "findingArn":{
+          "shape":"FindingArn",
+          "documentation":"<p>The Amazon Resource Number (ARN) of the finding.</p>"
+        },
         "awsAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID associated with the finding.</p>"
         },
-        "codeVulnerabilityDetails":{
-          "shape":"CodeVulnerabilityDetails",
-          "documentation":"<p>Details about the code vulnerability identified in a Lambda function used to filter findings.</p>"
+        "type":{
+          "shape":"FindingType",
+          "documentation":"<p>The type of the finding. The <code>type</code> value determines the valid values for <code>resource</code> in your request. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-types.html\">Finding types</a> in the Amazon Inspector user guide.</p>"
         },
         "description":{
           "shape":"FindingDescription",
           "documentation":"<p>The description of the finding.</p>"
         },
-        "epss":{
-          "shape":"EpssDetails",
-          "documentation":"<p>The finding's EPSS score.</p>"
-        },
-        "exploitAvailable":{
-          "shape":"ExploitAvailable",
-          "documentation":"<p>If a finding discovered in your environment has an exploit available.</p>"
+        "title":{
+          "shape":"FindingTitle",
+          "documentation":"<p>The title of the finding.</p>"
         },
-        "exploitabilityDetails":{
-          "shape":"ExploitabilityDetails",
-          "documentation":"<p>The details of an exploit available for a finding discovered in your environment.</p>"
+        "remediation":{
+          "shape":"Remediation",
+          "documentation":"<p>An object that contains the details about how to remediate a finding.</p>"
         },
-        "findingArn":{
-          "shape":"FindingArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the finding.</p>"
+        "severity":{
+          "shape":"Severity",
+          "documentation":"<p>The severity of the finding. <code>UNTRIAGED</code> applies to <code>PACKAGE_VULNERABILITY</code> type findings that the vendor has not assigned a severity yet. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-understanding-severity.html\">Severity levels for findings</a> in the Amazon Inspector user guide.</p>"
         },
         "firstObservedAt":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>The date and time that the finding was first observed.</p>"
         },
-        "fixAvailable":{
-          "shape":"FixAvailable",
-          "documentation":"<p>Details on whether a fix is available through a version update. This value can be <code>YES</code>, <code>NO</code>, or <code>PARTIAL</code>. A <code>PARTIAL</code> fix means that some, but not all, of the packages identified in the finding have fixes available through updated versions.</p>"
+        "lastObservedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p> The date and time the finding was last observed. This timestamp for this field remains unchanged until a finding is updated. </p>"
+        },
+        "updatedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time the finding was last updated at.</p>"
+        },
+        "status":{
+          "shape":"FindingStatus",
+          "documentation":"<p>The status of the finding.</p>"
+        },
+        "resources":{
+          "shape":"ResourceList",
+          "documentation":"<p>Contains information on the resources involved in a finding. The <code>resource</code> value determines the valid values for <code>type</code> in your request. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-types.html\">Finding types</a> in the Amazon Inspector user guide.</p>"
         },
         "inspectorScore":{
           "shape":"Double",
@@ -4612,10 +5868,6 @@
           "shape":"InspectorScoreDetails",
           "documentation":"<p>An object that contains details of the Amazon Inspector score.</p>"
         },
-        "lastObservedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p> The date and time the finding was last observed. This timestamp for this field remains unchanged until a finding is updated. </p>"
-        },
         "networkReachabilityDetails":{
           "shape":"NetworkReachabilityDetails",
           "documentation":"<p>An object that contains the details of a network reachability finding.</p>"
@@ -4624,33 +5876,25 @@
           "shape":"PackageVulnerabilityDetails",
           "documentation":"<p>An object that contains the details of a package vulnerability finding.</p>"
         },
-        "remediation":{
-          "shape":"Remediation",
-          "documentation":"<p>An object that contains the details about how to remediate a finding.</p>"
-        },
-        "resources":{
-          "shape":"ResourceList",
-          "documentation":"<p>Contains information on the resources involved in a finding. The <code>resource</code> value determines the valid values for <code>type</code> in your request. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-types.html\">Finding types</a> in the Amazon Inspector user guide.</p>"
-        },
-        "severity":{
-          "shape":"Severity",
-          "documentation":"<p>The severity of the finding. <code>UNTRIAGED</code> applies to <code>PACKAGE_VULNERABILITY</code> type findings that the vendor has not assigned a severity yet. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-understanding-severity.html\">Severity levels for findings</a> in the Amazon Inspector user guide.</p>"
+        "fixAvailable":{
+          "shape":"FixAvailable",
+          "documentation":"<p>Details on whether a fix is available through a version update. This value can be <code>YES</code>, <code>NO</code>, or <code>PARTIAL</code>. A <code>PARTIAL</code> fix means that some, but not all, of the packages identified in the finding have fixes available through updated versions.</p>"
         },
-        "status":{
-          "shape":"FindingStatus",
-          "documentation":"<p>The status of the finding.</p>"
+        "exploitAvailable":{
+          "shape":"ExploitAvailable",
+          "documentation":"<p>If a finding discovered in your environment has an exploit available.</p>"
         },
-        "title":{
-          "shape":"FindingTitle",
-          "documentation":"<p>The title of the finding.</p>"
+        "exploitabilityDetails":{
+          "shape":"ExploitabilityDetails",
+          "documentation":"<p>The details of an exploit available for a finding discovered in your environment.</p>"
         },
-        "type":{
-          "shape":"FindingType",
-          "documentation":"<p>The type of the finding. The <code>type</code> value determines the valid values for <code>resource</code> in your request. For more information, see <a href=\"https://docs.aws.amazon.com/inspector/latest/user/findings-types.html\">Finding types</a> in the Amazon Inspector user guide.</p>"
+        "codeVulnerabilityDetails":{
+          "shape":"CodeVulnerabilityDetails",
+          "documentation":"<p>Details about the code vulnerability identified in a Lambda function used to filter findings.</p>"
         },
-        "updatedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time the finding was last updated at.</p>"
+        "epss":{
+          "shape":"EpssDetails",
+          "documentation":"<p>The finding's EPSS score.</p>"
         }
       },
       "documentation":"<p>Details about an Amazon Inspector finding.</p>"
@@ -4659,7 +5903,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:finding/[a-f0-9]{32}$"
+      "pattern":"arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:finding/[a-f0-9]{32}"
     },
     "FindingArnList":{
       "type":"list",
@@ -4675,45 +5919,45 @@
     "FindingDetail":{
       "type":"structure",
       "members":{
+        "findingArn":{
+          "shape":"FindingArn",
+          "documentation":"<p>The finding ARN that the vulnerability details are associated with.</p>"
+        },
         "cisaData":{
           "shape":"CisaData",
           "documentation":"<p>The Cybersecurity and Infrastructure Security Agency (CISA) details for a specific vulnerability.</p>"
         },
-        "cwes":{
-          "shape":"Cwes",
-          "documentation":"<p>The Common Weakness Enumerations (CWEs) associated with the vulnerability.</p>"
-        },
-        "epssScore":{
-          "shape":"Double",
-          "documentation":"<p>The Exploit Prediction Scoring System (EPSS) score of the vulnerability.</p>"
+        "riskScore":{
+          "shape":"RiskScore",
+          "documentation":"<p>The risk score of the vulnerability.</p>"
         },
         "evidences":{
           "shape":"EvidenceList",
           "documentation":"<p>Information on the evidence of the vulnerability.</p>"
         },
+        "ttps":{
+          "shape":"Ttps",
+          "documentation":"<p>The MITRE adversary tactics, techniques, or procedures (TTPs) associated with the vulnerability.</p>"
+        },
+        "tools":{
+          "shape":"Tools",
+          "documentation":"<p>The known malware tools or kits that can exploit the vulnerability.</p>"
+        },
         "exploitObserved":{
           "shape":"ExploitObserved",
           "documentation":"<p>Contains information on when this exploit was observed.</p>"
         },
-        "findingArn":{
-          "shape":"FindingArn",
-          "documentation":"<p>The finding ARN that the vulnerability details are associated with.</p>"
-        },
         "referenceUrls":{
           "shape":"VulnerabilityReferenceUrls",
           "documentation":"<p>The reference URLs for the vulnerability data.</p>"
         },
-        "riskScore":{
-          "shape":"RiskScore",
-          "documentation":"<p>The risk score of the vulnerability.</p>"
-        },
-        "tools":{
-          "shape":"Tools",
-          "documentation":"<p>The known malware tools or kits that can exploit the vulnerability.</p>"
+        "cwes":{
+          "shape":"Cwes",
+          "documentation":"<p>The Common Weakness Enumerations (CWEs) associated with the vulnerability.</p>"
         },
-        "ttps":{
-          "shape":"Ttps",
-          "documentation":"<p>The MITRE adversary tactics, techniques, or procedures (TTPs) associated with the vulnerability.</p>"
+        "epssScore":{
+          "shape":"Double",
+          "documentation":"<p>The Exploit Prediction Scoring System (EPSS) score of the vulnerability.</p>"
         }
       },
       "documentation":"<p>Details of the vulnerability identified in a finding.</p>"
@@ -4726,11 +5970,15 @@
     "FindingDetailsError":{
       "type":"structure",
       "required":[
+        "findingArn",
         "errorCode",
-        "errorMessage",
-        "findingArn"
+        "errorMessage"
       ],
       "members":{
+        "findingArn":{
+          "shape":"FindingArn",
+          "documentation":"<p>The finding ARN that returned an error.</p>"
+        },
         "errorCode":{
           "shape":"FindingDetailsErrorCode",
           "documentation":"<p>The error code.</p>"
@@ -4738,10 +5986,6 @@
         "errorMessage":{
           "shape":"NonEmptyString",
           "documentation":"<p>The error message.</p>"
-        },
-        "findingArn":{
-          "shape":"FindingArn",
-          "documentation":"<p>The finding ARN that returned an error.</p>"
         }
       },
       "documentation":"<p>Details about an error encountered when trying to return vulnerability data for a finding.</p>"
@@ -4797,13 +6041,13 @@
           "shape":"AggregationResourceType",
           "documentation":"<p>The resource type to aggregate.</p>"
         },
-        "sortBy":{
-          "shape":"FindingTypeSortBy",
-          "documentation":"<p>The value to sort results by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
+        },
+        "sortBy":{
+          "shape":"FindingTypeSortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on finding type.</p>"
@@ -4815,6 +6059,10 @@
           "shape":"AccountId",
           "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
         },
+        "severityCounts":{
+          "shape":"SeverityCounts",
+          "documentation":"<p>The value to sort results by.</p>"
+        },
         "exploitAvailableCount":{
           "shape":"Long",
           "documentation":"<p>The number of findings that have an exploit available.</p>"
@@ -4822,10 +6070,6 @@
         "fixAvailableCount":{
           "shape":"Long",
           "documentation":"<p> Details about the number of fixes. </p>"
-        },
-        "severityCounts":{
-          "shape":"SeverityCounts",
-          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>A response that contains the results of a finding type aggregation.</p>"
@@ -4872,27 +6116,27 @@
     "FreeTrialInfo":{
       "type":"structure",
       "required":[
-        "end",
+        "type",
         "start",
-        "status",
-        "type"
+        "end",
+        "status"
       ],
       "members":{
-        "end":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the Amazon Inspector free trail ends for a given account.</p>"
+        "type":{
+          "shape":"FreeTrialType",
+          "documentation":"<p>The type of scan covered by the Amazon Inspector free trail.</p>"
         },
         "start":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the Amazon Inspector free trail started for a given account.</p>"
         },
+        "end":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the Amazon Inspector free trail ends for a given account.</p>"
+        },
         "status":{
           "shape":"FreeTrialStatus",
           "documentation":"<p>The order to sort results by.</p>"
-        },
-        "type":{
-          "shape":"FreeTrialType",
-          "documentation":"<p>The type of scan covered by the Amazon Inspector free trail.</p>"
         }
       },
       "documentation":"<p>An object that contains information about the Amazon Inspector free trial for an account.</p>"
@@ -4948,21 +6192,23 @@
         "EC2",
         "ECR",
         "LAMBDA",
-        "LAMBDA_CODE"
+        "LAMBDA_CODE",
+        "CODE_REPOSITORY"
       ]
     },
+    "FrequencyExpression":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "FunctionName":{
       "type":"string",
-      "pattern":"^[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$"
+      "pattern":"[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
     },
     "GetCisScanReportRequest":{
       "type":"structure",
       "required":["scanArn"],
       "members":{
-        "reportFormat":{
-          "shape":"CisReportFormat",
-          "documentation":"<p> The format of the report. Valid values are <code>PDF</code> and <code>CSV</code>. If no value is specified, the report format defaults to <code>PDF</code>. </p>"
-        },
         "scanArn":{
           "shape":"CisScanArn",
           "documentation":"<p>The scan ARN.</p>"
@@ -4970,19 +6216,23 @@
         "targetAccounts":{
           "shape":"ReportTargetAccounts",
           "documentation":"<p>The target accounts.</p>"
+        },
+        "reportFormat":{
+          "shape":"CisReportFormat",
+          "documentation":"<p> The format of the report. Valid values are <code>PDF</code> and <code>CSV</code>. If no value is specified, the report format defaults to <code>PDF</code>. </p>"
         }
       }
     },
     "GetCisScanReportResponse":{
       "type":"structure",
       "members":{
-        "status":{
-          "shape":"CisReportStatus",
-          "documentation":"<p>The status.</p>"
-        },
         "url":{
           "shape":"String",
           "documentation":"<p> The URL where a PDF or CSV of the CIS scan report can be downloaded. </p>"
+        },
+        "status":{
+          "shape":"CisReportStatus",
+          "documentation":"<p>The status.</p>"
         }
       }
     },
@@ -4995,11 +6245,19 @@
     "GetCisScanResultDetailsRequest":{
       "type":"structure",
       "required":[
-        "accountId",
         "scanArn",
-        "targetResourceId"
+        "targetResourceId",
+        "accountId"
       ],
       "members":{
+        "scanArn":{
+          "shape":"CisScanArn",
+          "documentation":"<p>The scan ARN.</p>"
+        },
+        "targetResourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The target resource ID.</p>"
+        },
         "accountId":{
           "shape":"AccountId",
           "documentation":"<p>The account ID.</p>"
@@ -5008,18 +6266,6 @@
           "shape":"CisScanResultDetailsFilterCriteria",
           "documentation":"<p>The filter criteria.</p>"
         },
-        "maxResults":{
-          "shape":"GetCisScanResultDetailsMaxResults",
-          "documentation":"<p>The maximum number of CIS scan result details to be returned in a single page of results.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
-        "scanArn":{
-          "shape":"CisScanArn",
-          "documentation":"<p>The scan ARN.</p>"
-        },
         "sortBy":{
           "shape":"CisScanResultDetailsSortBy",
           "documentation":"<p>The sort by order.</p>"
@@ -5028,47 +6274,257 @@
           "shape":"CisSortOrder",
           "documentation":"<p>The sort order.</p>"
         },
-        "targetResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The target resource ID.</p>"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"GetCisScanResultDetailsMaxResults",
+          "documentation":"<p>The maximum number of CIS scan result details to be returned in a single page of results.</p>"
         }
       }
     },
     "GetCisScanResultDetailsResponse":{
       "type":"structure",
       "members":{
+        "scanResultDetails":{
+          "shape":"CisScanResultDetailsList",
+          "documentation":"<p>The scan result details.</p>"
+        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        }
+      }
+    },
+    "GetClustersForImageNextToken":{
+      "type":"string",
+      "max":3000,
+      "min":1
+    },
+    "GetClustersForImageRequest":{
+      "type":"structure",
+      "required":["filter"],
+      "members":{
+        "filter":{
+          "shape":"ClusterForImageFilterCriteria",
+          "documentation":"<p>The resource Id for the Amazon ECR image.</p>"
         },
-        "scanResultDetails":{
-          "shape":"CisScanResultDetailsList",
-          "documentation":"<p>The scan result details.</p>"
+        "maxResults":{
+          "shape":"GetClustersForImageRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to be returned in a single page of results.</p>"
+        },
+        "nextToken":{
+          "shape":"GetClustersForImageNextToken",
+          "documentation":"<p>The pagination token from a previous request used to retrieve the next page of results.</p>"
         }
       }
     },
-    "GetConfigurationRequest":{
+    "GetClustersForImageRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "GetClustersForImageResponse":{
       "type":"structure",
+      "required":["cluster"],
       "members":{
+        "cluster":{
+          "shape":"ClusterInformationList",
+          "documentation":"<p>A unit of work inside of a cluster, which can include metadata about the cluster.</p>"
+        },
+        "nextToken":{
+          "shape":"GetClustersForImageNextToken",
+          "documentation":"<p>The pagination token from a previous request used to retrieve the next page of results.</p>"
+        }
       }
     },
-    "GetConfigurationResponse":{
+    "GetCodeSecurityIntegrationRequest":{
       "type":"structure",
+      "required":["integrationArn"],
       "members":{
-        "ec2Configuration":{
-          "shape":"Ec2ConfigurationState",
-          "documentation":"<p>Specifies how the Amazon EC2 automated scan mode is currently configured for your environment.</p>"
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration to retrieve.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the code security integration.</p>"
+        }
+      }
+    },
+    "GetCodeSecurityIntegrationResponse":{
+      "type":"structure",
+      "required":[
+        "integrationArn",
+        "name",
+        "type",
+        "status",
+        "statusReason",
+        "createdOn",
+        "lastUpdateOn"
+      ],
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration.</p>"
+        },
+        "name":{
+          "shape":"IntegrationName",
+          "documentation":"<p>The name of the code security integration.</p>"
+        },
+        "type":{
+          "shape":"IntegrationType",
+          "documentation":"<p>The type of repository provider for the integration.</p>"
+        },
+        "status":{
+          "shape":"IntegrationStatus",
+          "documentation":"<p>The current status of the code security integration.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the code security integration.</p>"
+        },
+        "createdOn":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the code security integration was created.</p>"
+        },
+        "lastUpdateOn":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the code security integration was last updated.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the code security integration.</p>"
+        },
+        "authorizationUrl":{
+          "shape":"AuthorizationUrl",
+          "documentation":"<p>The URL used to authorize the integration with the repository provider. This is only returned if reauthorization is required to fix a connection issue. Otherwise, it is null.</p>"
+        }
+      }
+    },
+    "GetCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":["scanConfigurationArn"],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration to retrieve.</p>"
+        }
+      }
+    },
+    "GetCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration.</p>"
+        },
+        "name":{
+          "shape":"ScanConfigurationName",
+          "documentation":"<p>The name of the scan configuration.</p>"
+        },
+        "configuration":{
+          "shape":"CodeSecurityScanConfiguration",
+          "documentation":"<p>The configuration settings for the code security scan.</p>"
+        },
+        "level":{
+          "shape":"ConfigurationLevel",
+          "documentation":"<p>The security level for the scan configuration.</p>"
+        },
+        "scopeSettings":{
+          "shape":"ScopeSettings",
+          "documentation":"<p>The scope settings that define which repositories will be scanned. If the <code>ScopeSetting</code> parameter is <code>ALL</code> the scan configuration applies to all existing and future projects imported into Amazon Inspector.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the scan configuration was created.</p>"
         },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the scan configuration was last updated.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags associated with the scan configuration.</p>"
+        }
+      }
+    },
+    "GetCodeSecurityScanRequest":{
+      "type":"structure",
+      "required":[
+        "resource",
+        "scanId"
+      ],
+      "members":{
+        "resource":{
+          "shape":"CodeSecurityResource",
+          "documentation":"<p>The resource identifier for the code repository that was scanned.</p>"
+        },
+        "scanId":{
+          "shape":"CodeSecurityUuid",
+          "documentation":"<p>The unique identifier of the scan to retrieve.</p>"
+        }
+      }
+    },
+    "GetCodeSecurityScanResponse":{
+      "type":"structure",
+      "members":{
+        "scanId":{
+          "shape":"CodeSecurityUuid",
+          "documentation":"<p>The unique identifier of the scan.</p>"
+        },
+        "resource":{
+          "shape":"CodeSecurityResource",
+          "documentation":"<p>The resource identifier for the code repository that was scanned.</p>"
+        },
+        "accountId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account ID associated with the scan.</p>"
+        },
+        "status":{
+          "shape":"CodeScanStatus",
+          "documentation":"<p>The current status of the scan.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the scan.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the scan was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the scan was last updated.</p>"
+        },
+        "lastCommitId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the last commit that was scanned. This is only returned if the scan was successful or skipped.</p>"
+        }
+      }
+    },
+    "GetConfigurationRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "GetConfigurationResponse":{
+      "type":"structure",
+      "members":{
         "ecrConfiguration":{
           "shape":"EcrConfigurationState",
           "documentation":"<p>Specifies how the ECR automated re-scan duration is currently configured for your environment.</p>"
+        },
+        "ec2Configuration":{
+          "shape":"Ec2ConfigurationState",
+          "documentation":"<p>Specifies how the Amazon EC2 automated scan mode is currently configured for your environment.</p>"
         }
       }
     },
     "GetDelegatedAdminAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetDelegatedAdminAccountResponse":{
       "type":"structure",
@@ -5081,48 +6537,47 @@
     },
     "GetEc2DeepInspectionConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetEc2DeepInspectionConfigurationResponse":{
       "type":"structure",
       "members":{
-        "errorMessage":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>An error message explaining why Amazon Inspector deep inspection configurations could not be retrieved for your account.</p>"
+        "packagePaths":{
+          "shape":"PathList",
+          "documentation":"<p>The Amazon Inspector deep inspection custom paths for your account.</p>"
         },
         "orgPackagePaths":{
           "shape":"PathList",
           "documentation":"<p>The Amazon Inspector deep inspection custom paths for your organization.</p>"
         },
-        "packagePaths":{
-          "shape":"PathList",
-          "documentation":"<p>The Amazon Inspector deep inspection custom paths for your account.</p>"
-        },
         "status":{
           "shape":"Ec2DeepInspectionStatus",
           "documentation":"<p>The activation status of Amazon Inspector deep inspection in your account.</p>"
+        },
+        "errorMessage":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>An error message explaining why Amazon Inspector deep inspection configurations could not be retrieved for your account.</p>"
         }
       }
     },
     "GetEncryptionKeyRequest":{
       "type":"structure",
       "required":[
-        "resourceType",
-        "scanType"
+        "scanType",
+        "resourceType"
       ],
       "members":{
-        "resourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The resource type the key encrypts.</p>",
-          "location":"querystring",
-          "locationName":"resourceType"
-        },
         "scanType":{
           "shape":"ScanType",
           "documentation":"<p>The scan type the key encrypts.</p>",
           "location":"querystring",
           "locationName":"scanType"
+        },
+        "resourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The resource type the key encrypts.</p>",
+          "location":"querystring",
+          "locationName":"resourceType"
         }
       }
     },
@@ -5148,9 +6603,13 @@
     "GetFindingsReportStatusResponse":{
       "type":"structure",
       "members":{
-        "destination":{
-          "shape":"Destination",
-          "documentation":"<p>The destination of the report.</p>"
+        "reportId":{
+          "shape":"ReportId",
+          "documentation":"<p>The ID of the report.</p>"
+        },
+        "status":{
+          "shape":"ExternalReportStatus",
+          "documentation":"<p>The status of the report.</p>"
         },
         "errorCode":{
           "shape":"ReportingErrorCode",
@@ -5160,17 +6619,13 @@
           "shape":"ErrorMessage",
           "documentation":"<p>The error message of the report.</p>"
         },
+        "destination":{
+          "shape":"Destination",
+          "documentation":"<p>The destination of the report.</p>"
+        },
         "filterCriteria":{
           "shape":"FilterCriteria",
           "documentation":"<p>The filter criteria associated with the report.</p>"
-        },
-        "reportId":{
-          "shape":"ReportId",
-          "documentation":"<p>The ID of the report.</p>"
-        },
-        "status":{
-          "shape":"ExternalReportStatus",
-          "documentation":"<p>The status of the report.</p>"
         }
       }
     },
@@ -5206,6 +6661,18 @@
     "GetSbomExportResponse":{
       "type":"structure",
       "members":{
+        "reportId":{
+          "shape":"ReportId",
+          "documentation":"<p>The report ID of the software bill of materials (SBOM) report.</p>"
+        },
+        "format":{
+          "shape":"SbomReportFormat",
+          "documentation":"<p>The format of the software bill of materials (SBOM) report.</p>"
+        },
+        "status":{
+          "shape":"ExternalReportStatus",
+          "documentation":"<p>The status of the software bill of materials (SBOM) report.</p>"
+        },
         "errorCode":{
           "shape":"ReportingErrorCode",
           "documentation":"<p>An error code.</p>"
@@ -5214,28 +6681,37 @@
           "shape":"NonEmptyString",
           "documentation":"<p>An error message.</p>"
         },
-        "filterCriteria":{
-          "shape":"ResourceFilterCriteria",
-          "documentation":"<p>Contains details about the resource filter criteria used for the software bill of materials (SBOM) report.</p>"
-        },
-        "format":{
-          "shape":"SbomReportFormat",
-          "documentation":"<p>The format of the software bill of materials (SBOM) report.</p>"
-        },
-        "reportId":{
-          "shape":"ReportId",
-          "documentation":"<p>The report ID of the software bill of materials (SBOM) report.</p>"
-        },
         "s3Destination":{
           "shape":"Destination",
           "documentation":"<p>Contains details of the Amazon S3 bucket and KMS key used to export findings</p>"
         },
-        "status":{
-          "shape":"ExternalReportStatus",
-          "documentation":"<p>The status of the software bill of materials (SBOM) report.</p>"
+        "filterCriteria":{
+          "shape":"ResourceFilterCriteria",
+          "documentation":"<p>Contains details about the resource filter criteria used for the software bill of materials (SBOM) report.</p>"
         }
       }
     },
+    "GitHubAuthCode":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "sensitive":true
+    },
+    "GitHubInstallationId":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "GitLabAccessToken":{
+      "type":"string",
+      "sensitive":true
+    },
+    "GitLabAuthCode":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "sensitive":true
+    },
     "GroupKey":{
       "type":"string",
       "enum":[
@@ -5250,15 +6726,11 @@
       "type":"string",
       "max":71,
       "min":71,
-      "pattern":"^sha256:[a-z0-9]{64}$"
+      "pattern":"sha256:[a-z0-9]{64}"
     },
     "ImageLayerAggregation":{
       "type":"structure",
       "members":{
-        "layerHashes":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The hashes associated with the layers.</p>"
-        },
         "repositories":{
           "shape":"StringFilterList",
           "documentation":"<p>The repository associated with the container image hosting the layers.</p>"
@@ -5267,13 +6739,17 @@
           "shape":"StringFilterList",
           "documentation":"<p>The ID of the container image layer.</p>"
         },
-        "sortBy":{
-          "shape":"ImageLayerSortBy",
-          "documentation":"<p>The value to sort results by.</p>"
+        "layerHashes":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The hashes associated with the layers.</p>"
         },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
+        },
+        "sortBy":{
+          "shape":"ImageLayerSortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on container image layers.</p>"
@@ -5281,20 +6757,12 @@
     "ImageLayerAggregationResponse":{
       "type":"structure",
       "required":[
-        "accountId",
-        "layerHash",
         "repository",
-        "resourceId"
+        "resourceId",
+        "layerHash",
+        "accountId"
       ],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account that owns the container image hosting the layer image.</p>"
-        },
-        "layerHash":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The layer hash.</p>"
-        },
         "repository":{
           "shape":"NonEmptyString",
           "documentation":"<p>The repository the layer resides in.</p>"
@@ -5303,6 +6771,14 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The resource ID of the container image layer.</p>"
         },
+        "layerHash":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The layer hash.</p>"
+        },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the container image hosting the layer image.</p>"
+        },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that represents the count of matched findings per severity.</p>"
@@ -5332,10 +6808,44 @@
       },
       "documentation":"<p>Information about the Amazon Inspector score given to a finding.</p>"
     },
+    "InstanceUrl":{
+      "type":"string",
+      "pattern":"https://[-a-zA-Z0-9()@:%_+.~#?&//=]{1,1024}",
+      "sensitive":true
+    },
     "Integer":{
       "type":"integer",
       "box":true
     },
+    "IntegrationName":{
+      "type":"string",
+      "max":60,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-_$:.]*"
+    },
+    "IntegrationStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "IN_PROGRESS",
+        "ACTIVE",
+        "INACTIVE",
+        "DISABLING"
+      ]
+    },
+    "IntegrationSummaries":{
+      "type":"list",
+      "member":{"shape":"CodeSecurityIntegrationSummary"},
+      "max":100,
+      "min":0
+    },
+    "IntegrationType":{
+      "type":"string",
+      "enum":[
+        "GITLAB_SELF_MANAGED",
+        "GITHUB"
+      ]
+    },
     "InternalServerException":{
       "type":"structure",
       "required":["message"],
@@ -5358,7 +6868,7 @@
       "type":"string",
       "max":15,
       "min":7,
-      "pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
+      "pattern":"(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
     },
     "IpV4AddressList":{
       "type":"list",
@@ -5375,34 +6885,34 @@
     },
     "KmsKeyArn":{
       "type":"string",
-      "pattern":"^arn:aws(-(us-gov|cn))?:kms:([a-z0-9][-.a-z0-9]{0,62})?:[0-9]{12}?:key/(([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|(mrk-[0-9a-zA-Z]{32}))$"
+      "pattern":"arn:aws(-(us-gov|cn))?:kms:([a-z0-9][-.a-z0-9]{0,62})?:[0-9]{12}?:key/(([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})|(mrk-[0-9a-zA-Z]{32}))"
     },
     "LambdaFunctionAggregation":{
       "type":"structure",
       "members":{
-        "functionNames":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The Amazon Web Services Lambda function names to include in the aggregation results.</p>"
-        },
-        "functionTags":{
-          "shape":"MapFilterList",
-          "documentation":"<p>The tags to include in the aggregation results.</p>"
-        },
         "resourceIds":{
           "shape":"StringFilterList",
           "documentation":"<p>The resource IDs to include in the aggregation results.</p>"
         },
+        "functionNames":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The Amazon Web Services Lambda function names to include in the aggregation results.</p>"
+        },
         "runtimes":{
           "shape":"StringFilterList",
           "documentation":"<p>Returns findings aggregated by Amazon Web Services Lambda function runtime environments.</p>"
         },
-        "sortBy":{
-          "shape":"LambdaFunctionSortBy",
-          "documentation":"<p>The finding severity to use for sorting the results.</p>"
+        "functionTags":{
+          "shape":"MapFilterList",
+          "documentation":"<p>The tags to include in the aggregation results.</p>"
         },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to use for sorting the results.</p>"
+        },
+        "sortBy":{
+          "shape":"LambdaFunctionSortBy",
+          "documentation":"<p>The finding severity to use for sorting the results.</p>"
         }
       },
       "documentation":"<p>The details that define a findings aggregation based on Amazon Web Services Lambda functions.</p>"
@@ -5411,33 +6921,33 @@
       "type":"structure",
       "required":["resourceId"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account that owns the Amazon Web Services Lambda function. </p>"
+        "resourceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The resource IDs included in the aggregation results.</p>"
         },
         "functionName":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services Lambda function names included in the aggregation results.</p>"
         },
+        "runtime":{
+          "shape":"String",
+          "documentation":"<p>The runtimes included in the aggregation results.</p>"
+        },
         "lambdaTags":{
           "shape":"TagMap",
           "documentation":"<p>The tags included in the aggregation results.</p>"
         },
-        "lastModifiedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date that the Amazon Web Services Lambda function included in the aggregation results was last changed.</p>"
-        },
-        "resourceId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The resource IDs included in the aggregation results.</p>"
-        },
-        "runtime":{
-          "shape":"String",
-          "documentation":"<p>The runtimes included in the aggregation results.</p>"
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the Amazon Web Services Lambda function. </p>"
         },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that contains the counts of aggregated finding per severity.</p>"
+        },
+        "lastModifiedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date that the Amazon Web Services Lambda function included in the aggregation results was last changed.</p>"
         }
       },
       "documentation":"<p>A response that contains the results of an Amazon Web Services Lambda function finding aggregation.</p>"
@@ -5445,10 +6955,6 @@
     "LambdaFunctionMetadata":{
       "type":"structure",
       "members":{
-        "functionName":{
-          "shape":"String",
-          "documentation":"<p>The name of a function.</p>"
-        },
         "functionTags":{
           "shape":"TagMap",
           "documentation":"<p>The resource tags on an Amazon Web Services Lambda function.</p>"
@@ -5457,6 +6963,10 @@
           "shape":"LambdaLayerList",
           "documentation":"<p>The layers for an Amazon Web Services Lambda function. A Lambda function can have up to five layers.</p>"
         },
+        "functionName":{
+          "shape":"String",
+          "documentation":"<p>The name of a function.</p>"
+        },
         "runtime":{
           "shape":"Runtime",
           "documentation":"<p>An Amazon Web Services Lambda function's runtime.</p>"
@@ -5479,21 +6989,21 @@
           "shape":"StringFilterList",
           "documentation":"<p>The names of the Amazon Web Services Lambda functions associated with the layers.</p>"
         },
-        "layerArns":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Lambda function layer. </p>"
-        },
         "resourceIds":{
           "shape":"StringFilterList",
           "documentation":"<p>The resource IDs for the Amazon Web Services Lambda function layers.</p>"
         },
-        "sortBy":{
-          "shape":"LambdaLayerSortBy",
-          "documentation":"<p>The finding severity to use for sorting the results.</p>"
+        "layerArns":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Lambda function layer. </p>"
         },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to use for sorting the results.</p>"
+        },
+        "sortBy":{
+          "shape":"LambdaLayerSortBy",
+          "documentation":"<p>The finding severity to use for sorting the results.</p>"
         }
       },
       "documentation":"<p>The details that define a findings aggregation based on an Amazon Web Services Lambda function's layers.</p>"
@@ -5501,27 +7011,27 @@
     "LambdaLayerAggregationResponse":{
       "type":"structure",
       "required":[
-        "accountId",
         "functionName",
+        "resourceId",
         "layerArn",
-        "resourceId"
+        "accountId"
       ],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The account ID of the Amazon Web Services Lambda function layer.</p>"
-        },
         "functionName":{
           "shape":"NonEmptyString",
           "documentation":"<p>The names of the Amazon Web Services Lambda functions associated with the layers.</p>"
         },
+        "resourceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Resource ID of the Amazon Web Services Lambda function layer.</p>"
+        },
         "layerArn":{
           "shape":"NonEmptyString",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Lambda function layer.</p>"
         },
-        "resourceId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The Resource ID of the Amazon Web Services Lambda function layer.</p>"
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the Amazon Web Services Lambda function layer.</p>"
         },
         "severityCounts":{
           "shape":"SeverityCounts",
@@ -5532,7 +7042,7 @@
     },
     "LambdaLayerArn":{
       "type":"string",
-      "pattern":"^arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:layer:[a-zA-Z0-9-_]+:[0-9]+$"
+      "pattern":"arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\\d{12}:layer:[a-zA-Z0-9-_]+:[0-9]+"
     },
     "LambdaLayerList":{
       "type":"list",
@@ -5551,14 +7061,14 @@
     "LambdaVpcConfig":{
       "type":"structure",
       "members":{
-        "securityGroupIds":{
-          "shape":"SecurityGroupIdList",
-          "documentation":"<p>The VPC security groups and subnets that are attached to an Amazon Web Services Lambda function. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html\">VPC Settings</a>.</p>"
-        },
         "subnetIds":{
           "shape":"SubnetIdList",
           "documentation":"<p>A list of VPC subnet IDs.</p>"
         },
+        "securityGroupIds":{
+          "shape":"SecurityGroupIdList",
+          "documentation":"<p>The VPC security groups and subnets that are attached to an Amazon Web Services Lambda function. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html\">VPC Settings</a>.</p>"
+        },
         "vpcId":{
           "shape":"VpcId",
           "documentation":"<p>The ID of the VPC.</p>"
@@ -5582,6 +7092,10 @@
     "ListAccountPermissionsRequest":{
       "type":"structure",
       "members":{
+        "service":{
+          "shape":"Service",
+          "documentation":"<p>The service scan type to check permissions for.</p>"
+        },
         "maxResults":{
           "shape":"ListAccountPermissionsMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
@@ -5589,10 +7103,6 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.</p>"
-        },
-        "service":{
-          "shape":"Service",
-          "documentation":"<p>The service scan type to check permissions for.</p>"
         }
       }
     },
@@ -5600,23 +7110,19 @@
       "type":"structure",
       "required":["permissions"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
-        },
         "permissions":{
           "shape":"Permissions",
           "documentation":"<p>Contains details on the permissions an account has to configure Amazon Inspector.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
         }
       }
     },
     "ListCisScanConfigurationsFilterCriteria":{
       "type":"structure",
       "members":{
-        "scanConfigurationArnFilters":{
-          "shape":"CisScanConfigurationArnFilterList",
-          "documentation":"<p>The list of scan configuration ARN filters.</p>"
-        },
         "scanNameFilters":{
           "shape":"CisScanNameFilterList",
           "documentation":"<p>The list of scan name filters.</p>"
@@ -5624,6 +7130,10 @@
         "targetResourceTagFilters":{
           "shape":"ResourceTagFilterList",
           "documentation":"<p>The list of target resource tag filters.</p>"
+        },
+        "scanConfigurationArnFilters":{
+          "shape":"CisScanConfigurationArnFilterList",
+          "documentation":"<p>The list of scan configuration ARN filters.</p>"
         }
       },
       "documentation":"<p>A list of CIS scan configurations filter criteria.</p>"
@@ -5641,14 +7151,6 @@
           "shape":"ListCisScanConfigurationsFilterCriteria",
           "documentation":"<p>The CIS scan configuration filter criteria.</p>"
         },
-        "maxResults":{
-          "shape":"ListCisScanConfigurationsMaxResults",
-          "documentation":"<p>The maximum number of CIS scan configurations to be returned in a single page of results.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "sortBy":{
           "shape":"CisScanConfigurationsSortBy",
           "documentation":"<p>The CIS scan configuration sort by order.</p>"
@@ -5656,19 +7158,27 @@
         "sortOrder":{
           "shape":"CisSortOrder",
           "documentation":"<p>The CIS scan configuration sort order order.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"ListCisScanConfigurationsMaxResults",
+          "documentation":"<p>The maximum number of CIS scan configurations to be returned in a single page of results.</p>"
         }
       }
     },
     "ListCisScanConfigurationsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "scanConfigurations":{
           "shape":"CisScanConfigurationList",
           "documentation":"<p>The CIS scan configuration scan configurations.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
         }
       }
     },
@@ -5676,22 +7186,14 @@
       "type":"structure",
       "required":["scanArn"],
       "members":{
-        "filterCriteria":{
-          "shape":"CisScanResultsAggregatedByChecksFilterCriteria",
-          "documentation":"<p>The filter criteria.</p>"
-        },
-        "maxResults":{
-          "shape":"CisScanResultsMaxResults",
-          "documentation":"<p>The maximum number of scan results aggregated by checks to be returned in a single page of results.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "scanArn":{
           "shape":"CisScanArn",
           "documentation":"<p>The scan ARN.</p>"
         },
+        "filterCriteria":{
+          "shape":"CisScanResultsAggregatedByChecksFilterCriteria",
+          "documentation":"<p>The filter criteria.</p>"
+        },
         "sortBy":{
           "shape":"CisScanResultsAggregatedByChecksSortBy",
           "documentation":"<p>The sort by order.</p>"
@@ -5699,6 +7201,14 @@
         "sortOrder":{
           "shape":"CisSortOrder",
           "documentation":"<p>The sort order.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"CisScanResultsMaxResults",
+          "documentation":"<p>The maximum number of scan results aggregated by checks to be returned in a single page of results.</p>"
         }
       }
     },
@@ -5719,22 +7229,14 @@
       "type":"structure",
       "required":["scanArn"],
       "members":{
-        "filterCriteria":{
-          "shape":"CisScanResultsAggregatedByTargetResourceFilterCriteria",
-          "documentation":"<p>The filter criteria.</p>"
-        },
-        "maxResults":{
-          "shape":"CisScanResultsMaxResults",
-          "documentation":"<p>The maximum number of scan results aggregated by a target resource to be returned in a single page of results.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "scanArn":{
           "shape":"CisScanArn",
           "documentation":"<p>The scan ARN.</p>"
         },
+        "filterCriteria":{
+          "shape":"CisScanResultsAggregatedByTargetResourceFilterCriteria",
+          "documentation":"<p>The filter criteria.</p>"
+        },
         "sortBy":{
           "shape":"CisScanResultsAggregatedByTargetResourceSortBy",
           "documentation":"<p>The sort by order.</p>"
@@ -5742,19 +7244,27 @@
         "sortOrder":{
           "shape":"CisSortOrder",
           "documentation":"<p>The sort order.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"CisScanResultsMaxResults",
+          "documentation":"<p>The maximum number of scan results aggregated by a target resource to be returned in a single page of results.</p>"
         }
       }
     },
     "ListCisScanResultsAggregatedByTargetResourceResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "targetResourceAggregations":{
           "shape":"CisTargetResourceAggregationList",
           "documentation":"<p>The resource aggregations.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
         }
       }
     },
@@ -5768,13 +7278,21 @@
     "ListCisScansFilterCriteria":{
       "type":"structure",
       "members":{
-        "failedChecksFilters":{
-          "shape":"CisNumberFilterList",
-          "documentation":"<p>The list of failed checks filters.</p>"
+        "scanNameFilters":{
+          "shape":"CisScanNameFilterList",
+          "documentation":"<p>The list of scan name filters.</p>"
         },
-        "scanArnFilters":{
-          "shape":"CisScanArnFilterList",
-          "documentation":"<p>The list of scan ARN filters.</p>"
+        "targetResourceTagFilters":{
+          "shape":"ResourceTagFilterList",
+          "documentation":"<p>The list of target resource tag filters.</p>"
+        },
+        "targetResourceIdFilters":{
+          "shape":"ResourceIdFilterList",
+          "documentation":"<p>The list of target resource ID filters.</p>"
+        },
+        "scanStatusFilters":{
+          "shape":"CisScanStatusFilterList",
+          "documentation":"<p>The list of scan status filters.</p>"
         },
         "scanAtFilters":{
           "shape":"CisScanDateFilterList",
@@ -5784,29 +7302,21 @@
           "shape":"CisScanConfigurationArnFilterList",
           "documentation":"<p>The list of scan configuration ARN filters.</p>"
         },
-        "scanNameFilters":{
-          "shape":"CisScanNameFilterList",
-          "documentation":"<p>The list of scan name filters.</p>"
-        },
-        "scanStatusFilters":{
-          "shape":"CisScanStatusFilterList",
-          "documentation":"<p>The list of scan status filters.</p>"
+        "scanArnFilters":{
+          "shape":"CisScanArnFilterList",
+          "documentation":"<p>The list of scan ARN filters.</p>"
         },
         "scheduledByFilters":{
           "shape":"CisScheduledByFilterList",
           "documentation":"<p>The list of scheduled by filters.</p>"
         },
+        "failedChecksFilters":{
+          "shape":"CisNumberFilterList",
+          "documentation":"<p>The list of failed checks filters.</p>"
+        },
         "targetAccountIdFilters":{
           "shape":"AccountIdFilterList",
           "documentation":"<p>The list of target account ID filters.</p>"
-        },
-        "targetResourceIdFilters":{
-          "shape":"ResourceIdFilterList",
-          "documentation":"<p>The list of target resource ID filters.</p>"
-        },
-        "targetResourceTagFilters":{
-          "shape":"ResourceTagFilterList",
-          "documentation":"<p>The list of target resource tag filters.</p>"
         }
       },
       "documentation":"<p>A list of CIS scans filter criteria.</p>"
@@ -5820,21 +7330,13 @@
     "ListCisScansRequest":{
       "type":"structure",
       "members":{
-        "detailLevel":{
-          "shape":"ListCisScansDetailLevel",
-          "documentation":"<p>The detail applied to the CIS scan.</p>"
-        },
         "filterCriteria":{
           "shape":"ListCisScansFilterCriteria",
           "documentation":"<p>The CIS scan filter criteria.</p>"
         },
-        "maxResults":{
-          "shape":"ListCisScansMaxResults",
-          "documentation":"<p>The maximum number of results to be returned.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        "detailLevel":{
+          "shape":"ListCisScansDetailLevel",
+          "documentation":"<p>The detail applied to the CIS scan.</p>"
         },
         "sortBy":{
           "shape":"ListCisScansSortBy",
@@ -5843,19 +7345,27 @@
         "sortOrder":{
           "shape":"CisSortOrder",
           "documentation":"<p>The CIS scans sort order.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"ListCisScansMaxResults",
+          "documentation":"<p>The maximum number of results to be returned.</p>"
         }
       }
     },
     "ListCisScansResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
-        },
         "scans":{
           "shape":"CisScanList",
           "documentation":"<p>The CIS scans.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token from a previous request that's used to retrieve the next page of results.</p>"
         }
       }
     },
@@ -5868,6 +7378,119 @@
         "FAILED_CHECKS"
       ]
     },
+    "ListCodeSecurityIntegrationsRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListCodeSecurityIntegrationsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in a single call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListCodeSecurityIntegrationsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListCodeSecurityIntegrationsResponse":{
+      "type":"structure",
+      "members":{
+        "integrations":{
+          "shape":"IntegrationSummaries",
+          "documentation":"<p>A list of code security integration summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.</p>"
+        }
+      }
+    },
+    "ListCodeSecurityScanConfigurationAssociationsRequest":{
+      "type":"structure",
+      "required":["scanConfigurationArn"],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration to list associations for.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListCodeSecurityScanConfigurationAssociationsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in the response. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListCodeSecurityScanConfigurationAssociationsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListCodeSecurityScanConfigurationAssociationsResponse":{
+      "type":"structure",
+      "members":{
+        "associations":{
+          "shape":"CodeSecurityScanConfigurationAssociationSummaries",
+          "documentation":"<p>A list of associations between code repositories and scan configurations.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        }
+      }
+    },
+    "ListCodeSecurityScanConfigurationsRequest":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListCodeSecurityScanConfigurationsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in a single call.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListCodeSecurityScanConfigurationsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListCodeSecurityScanConfigurationsResponse":{
+      "type":"structure",
+      "members":{
+        "configurations":{
+          "shape":"CodeSecurityScanConfigurationSummaries",
+          "documentation":"<p>A list of code security scan configuration summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.</p>"
+        }
+      }
+    },
     "ListCoverageMaxResults":{
       "type":"integer",
       "box":true,
@@ -5877,10 +7500,6 @@
     "ListCoverageRequest":{
       "type":"structure",
       "members":{
-        "filterCriteria":{
-          "shape":"CoverageFilterCriteria",
-          "documentation":"<p>An object that contains details on the filters to apply to the coverage data for your environment.</p>"
-        },
         "maxResults":{
           "shape":"ListCoverageMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
@@ -5888,19 +7507,23 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
+        "filterCriteria":{
+          "shape":"CoverageFilterCriteria",
+          "documentation":"<p>An object that contains details on the filters to apply to the coverage data for your environment.</p>"
         }
       }
     },
     "ListCoverageResponse":{
       "type":"structure",
       "members":{
-        "coveredResources":{
-          "shape":"CoveredResources",
-          "documentation":"<p>An object that contains details on the covered resources in your environment.</p>"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
+        "coveredResources":{
+          "shape":"CoveredResources",
+          "documentation":"<p>An object that contains details on the covered resources in your environment.</p>"
         }
       }
     },
@@ -5929,13 +7552,13 @@
           "shape":"CountsList",
           "documentation":"<p>An array with the number for each group.</p>"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
-        },
         "totalCounts":{
           "shape":"Long",
           "documentation":"<p>The total number for all groups.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
         }
       }
     },
@@ -5980,21 +7603,21 @@
     "ListFiltersRequest":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"FilterAction",
-          "documentation":"<p>The action the filter applies to matched findings.</p>"
-        },
         "arns":{
           "shape":"FilterArnList",
           "documentation":"<p>The Amazon resource number (ARN) of the filter.</p>"
         },
-        "maxResults":{
-          "shape":"ListFilterMaxResults",
-          "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
+        "action":{
+          "shape":"FilterAction",
+          "documentation":"<p>The action the filter applies to matched findings.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
+        "maxResults":{
+          "shape":"ListFilterMaxResults",
+          "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
         }
       }
     },
@@ -6022,25 +7645,25 @@
       "type":"structure",
       "required":["aggregationType"],
       "members":{
-        "accountIds":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The Amazon Web Services account IDs to retrieve finding aggregation data for.</p>"
-        },
-        "aggregationRequest":{
-          "shape":"AggregationRequest",
-          "documentation":"<p>Details of the aggregation request that is used to filter your aggregation results.</p>"
-        },
         "aggregationType":{
           "shape":"AggregationType",
           "documentation":"<p>The type of the aggregation request.</p>"
         },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
         "maxResults":{
           "shape":"ListFindingAggregationsMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        "accountIds":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The Amazon Web Services account IDs to retrieve finding aggregation data for.</p>"
+        },
+        "aggregationRequest":{
+          "shape":"AggregationRequest",
+          "documentation":"<p>Details of the aggregation request that is used to filter your aggregation results.</p>"
         }
       }
     },
@@ -6052,13 +7675,13 @@
           "shape":"AggregationType",
           "documentation":"<p>The type of aggregation to perform.</p>"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
-        },
         "responses":{
           "shape":"AggregationResponseList",
           "documentation":"<p>Objects that contain the results of an aggregation operation.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
         }
       }
     },
@@ -6071,10 +7694,6 @@
     "ListFindingsRequest":{
       "type":"structure",
       "members":{
-        "filterCriteria":{
-          "shape":"FilterCriteria",
-          "documentation":"<p>Details on the filters to apply to your finding results.</p>"
-        },
         "maxResults":{
           "shape":"ListFindingsMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
@@ -6083,6 +7702,10 @@
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
         },
+        "filterCriteria":{
+          "shape":"FilterCriteria",
+          "documentation":"<p>Details on the filters to apply to your finding results.</p>"
+        },
         "sortCriteria":{
           "shape":"SortCriteria",
           "documentation":"<p>Details on the sort criteria to apply to your finding results.</p>"
@@ -6092,13 +7715,13 @@
     "ListFindingsResponse":{
       "type":"structure",
       "members":{
-        "findings":{
-          "shape":"FindingList",
-          "documentation":"<p>Contains details on the findings in your environment.</p>"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the <code>NextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
+        "findings":{
+          "shape":"FindingList",
+          "documentation":"<p>Contains details on the findings in your environment.</p>"
         }
       }
     },
@@ -6111,6 +7734,10 @@
     "ListMembersRequest":{
       "type":"structure",
       "members":{
+        "onlyAssociated":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to list only currently associated members if <code>True</code> or to list all members within the organization if <code>False</code>.</p>"
+        },
         "maxResults":{
           "shape":"ListMembersMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
@@ -6118,10 +7745,6 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
-        },
-        "onlyAssociated":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether to list only currently associated members if <code>True</code> or to list all members within the organization if <code>False</code>.</p>"
         }
       }
     },
@@ -6172,10 +7795,6 @@
     "ListUsageTotalsRequest":{
       "type":"structure",
       "members":{
-        "accountIds":{
-          "shape":"UsageAccountIdList",
-          "documentation":"<p>The Amazon Web Services account IDs to retrieve usage totals for.</p>"
-        },
         "maxResults":{
           "shape":"ListUsageTotalsMaxResults",
           "documentation":"<p>The maximum number of results the response can return. If your request would return more than the maximum the response will return a <code>nextToken</code> value, use this value when you call the action again to get the remaining results.</p>"
@@ -6183,6 +7802,10 @@
         "nextToken":{
           "shape":"ListUsageTotalsNextToken",
           "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. If your response returns more than the <code>maxResults</code> maximum value it will also return a <code>nextToken</code> value. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>"
+        },
+        "accountIds":{
+          "shape":"UsageAccountIdList",
+          "documentation":"<p>The Amazon Web Services account IDs to retrieve usage totals for.</p>"
         }
       }
     },
@@ -6252,14 +7875,14 @@
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID of the member account.</p>"
         },
-        "delegatedAdminAccountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID of the Amazon Inspector delegated administrator for this member account.</p>"
-        },
         "relationshipStatus":{
           "shape":"RelationshipStatus",
           "documentation":"<p>The status of the member account.</p>"
         },
+        "delegatedAdminAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID of the Amazon Inspector delegated administrator for this member account.</p>"
+        },
         "updatedAt":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>A timestamp showing when the status of this member was last updated.</p>"
@@ -6299,13 +7922,13 @@
           "shape":"AccountId",
           "documentation":"<p>The unique identifier for the Amazon Web Services account of the organization member</p>"
         },
-        "errorMessage":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The error message explaining why the account failed to activate Amazon Inspector deep inspection.</p>"
-        },
         "status":{
           "shape":"Ec2DeepInspectionStatus",
           "documentation":"<p>The state of Amazon Inspector deep inspection in the member account.</p>"
+        },
+        "errorMessage":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The error message explaining why the account failed to activate Amazon Inspector deep inspection.</p>"
         }
       },
       "documentation":"<p>An object that contains details about the state of Amazon Inspector deep inspection for a member account.</p>"
@@ -6324,7 +7947,7 @@
     },
     "MeteringAccountId":{
       "type":"string",
-      "pattern":"[0-9]{12}"
+      "pattern":".*[0-9]{12}.*"
     },
     "MonthlyCostEstimate":{
       "type":"double",
@@ -6333,17 +7956,17 @@
     "MonthlySchedule":{
       "type":"structure",
       "required":[
-        "day",
-        "startTime"
+        "startTime",
+        "day"
       ],
       "members":{
-        "day":{
-          "shape":"Day",
-          "documentation":"<p>The monthly schedule's day.</p>"
-        },
         "startTime":{
           "shape":"Time",
           "documentation":"<p>The monthly schedule's start time.</p>"
+        },
+        "day":{
+          "shape":"Day",
+          "documentation":"<p>The monthly schedule's day.</p>"
         }
       },
       "documentation":"<p>A monthly schedule.</p>"
@@ -6368,15 +7991,11 @@
     "NetworkReachabilityDetails":{
       "type":"structure",
       "required":[
-        "networkPath",
         "openPortRange",
-        "protocol"
+        "protocol",
+        "networkPath"
       ],
       "members":{
-        "networkPath":{
-          "shape":"NetworkPath",
-          "documentation":"<p>An object that contains details about a network path associated with a finding.</p>"
-        },
         "openPortRange":{
           "shape":"PortRange",
           "documentation":"<p>An object that contains details about the open port range associated with a finding.</p>"
@@ -6384,6 +8003,10 @@
         "protocol":{
           "shape":"NetworkProtocol",
           "documentation":"<p>The protocol associated with a finding.</p>"
+        },
+        "networkPath":{
+          "shape":"NetworkPath",
+          "documentation":"<p>An object that contains details about a network path associated with a finding.</p>"
         }
       },
       "documentation":"<p>Contains the details of a network reachability finding.</p>"
@@ -6404,13 +8027,13 @@
     "NumberFilter":{
       "type":"structure",
       "members":{
-        "lowerInclusive":{
-          "shape":"Double",
-          "documentation":"<p>The lowest number to be included in the filter.</p>"
-        },
         "upperInclusive":{
           "shape":"Double",
           "documentation":"<p>The highest number to be included in the filter.</p>"
+        },
+        "lowerInclusive":{
+          "shape":"Double",
+          "documentation":"<p>The lowest number to be included in the filter.</p>"
         }
       },
       "documentation":"<p>An object that describes the details of a number filter.</p>"
@@ -6429,8 +8052,7 @@
     },
     "OneTimeSchedule":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A one time schedule.</p>"
     },
     "Operation":{
@@ -6446,7 +8068,7 @@
       "type":"string",
       "max":34,
       "min":12,
-      "pattern":"(^\\d{12}$)|(^o-[a-z0-9]{10,32}$)"
+      "pattern":".*(^\\d{12}$)|(^o-[a-z0-9]{10,32}$).*"
     },
     "PackageAggregation":{
       "type":"structure",
@@ -6455,13 +8077,13 @@
           "shape":"StringFilterList",
           "documentation":"<p>The names of packages to aggregate findings on.</p>"
         },
-        "sortBy":{
-          "shape":"PackageSortBy",
-          "documentation":"<p>The value to sort results by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
+        },
+        "sortBy":{
+          "shape":"PackageSortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on operating system package type.</p>"
@@ -6470,14 +8092,14 @@
       "type":"structure",
       "required":["packageName"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
-        },
         "packageName":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the operating system package.</p>"
         },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
+        },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that contains the count of matched findings per severity.</p>"
@@ -6494,37 +8116,37 @@
     "PackageFilter":{
       "type":"structure",
       "members":{
-        "architecture":{
+        "name":{
           "shape":"StringFilter",
-          "documentation":"<p>An object that contains details on the package architecture type to filter on.</p>"
+          "documentation":"<p>An object that contains details on the name of the package to filter on.</p>"
+        },
+        "version":{
+          "shape":"StringFilter",
+          "documentation":"<p>The package version to filter on.</p>"
         },
         "epoch":{
           "shape":"NumberFilter",
           "documentation":"<p>An object that contains details on the package epoch to filter on.</p>"
         },
-        "filePath":{
-          "shape":"StringFilter",
-          "documentation":"<p>An object that contains details on the package file path to filter on.</p>"
-        },
-        "name":{
-          "shape":"StringFilter",
-          "documentation":"<p>An object that contains details on the name of the package to filter on.</p>"
-        },
         "release":{
           "shape":"StringFilter",
           "documentation":"<p>An object that contains details on the package release to filter on.</p>"
         },
-        "sourceLambdaLayerArn":{
+        "architecture":{
           "shape":"StringFilter",
-          "documentation":"<p>An object that describes the details of a string filter.</p>"
+          "documentation":"<p>An object that contains details on the package architecture type to filter on.</p>"
         },
         "sourceLayerHash":{
           "shape":"StringFilter",
           "documentation":"<p>An object that contains details on the source layer hash to filter on.</p>"
         },
-        "version":{
+        "sourceLambdaLayerArn":{
           "shape":"StringFilter",
-          "documentation":"<p>The package version to filter on.</p>"
+          "documentation":"<p>An object that describes the details of a string filter.</p>"
+        },
+        "filePath":{
+          "shape":"StringFilter",
+          "documentation":"<p>An object that contains details on the package file path to filter on.</p>"
         }
       },
       "documentation":"<p>Contains information on the details of a package filter.</p>"
@@ -6591,49 +8213,49 @@
     "PackageVulnerabilityDetails":{
       "type":"structure",
       "required":[
-        "source",
-        "vulnerabilityId"
+        "vulnerabilityId",
+        "source"
       ],
       "members":{
+        "vulnerabilityId":{
+          "shape":"VulnerabilityId",
+          "documentation":"<p>The ID given to this vulnerability.</p>"
+        },
+        "vulnerablePackages":{
+          "shape":"VulnerablePackageList",
+          "documentation":"<p>The packages impacted by this vulnerability.</p>"
+        },
+        "source":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The source of the vulnerability information.</p>"
+        },
         "cvss":{
           "shape":"CvssScoreList",
           "documentation":"<p>An object that contains details about the CVSS score of a finding.</p>"
         },
-        "referenceUrls":{
-          "shape":"NonEmptyStringList",
-          "documentation":"<p>One or more URLs that contain details about this vulnerability type.</p>"
-        },
         "relatedVulnerabilities":{
           "shape":"VulnerabilityIdList",
           "documentation":"<p>One or more vulnerabilities related to the one identified in this finding.</p>"
         },
-        "source":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The source of the vulnerability information.</p>"
-        },
         "sourceUrl":{
           "shape":"NonEmptyString",
           "documentation":"<p>A URL to the source of the vulnerability information.</p>"
         },
-        "vendorCreatedAt":{
-          "shape":"DateTimeTimestamp",
-          "documentation":"<p>The date and time that this vulnerability was first added to the vendor's database.</p>"
-        },
         "vendorSeverity":{
           "shape":"NonEmptyString",
           "documentation":"<p>The severity the vendor has given to this vulnerability type.</p>"
         },
+        "vendorCreatedAt":{
+          "shape":"DateTimeTimestamp",
+          "documentation":"<p>The date and time that this vulnerability was first added to the vendor's database.</p>"
+        },
         "vendorUpdatedAt":{
           "shape":"DateTimeTimestamp",
           "documentation":"<p>The date and time the vendor last updated this vulnerability in their database.</p>"
         },
-        "vulnerabilityId":{
-          "shape":"VulnerabilityId",
-          "documentation":"<p>The ID given to this vulnerability.</p>"
-        },
-        "vulnerablePackages":{
-          "shape":"VulnerablePackageList",
-          "documentation":"<p>The packages impacted by this vulnerability.</p>"
+        "referenceUrls":{
+          "shape":"NonEmptyStringList",
+          "documentation":"<p>One or more URLs that contain details about this vulnerability type.</p>"
         }
       },
       "documentation":"<p>Information about a package vulnerability finding.</p>"
@@ -6642,7 +8264,7 @@
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^(?:/(?:\\.[-\\w]+|[-\\w]+(?:\\.[-\\w]+)?))+/?$"
+      "pattern":"(?:/(?:\\.[-\\w]+|[-\\w]+(?:\\.[-\\w]+)?))+/?"
     },
     "PathList":{
       "type":"list",
@@ -6650,20 +8272,42 @@
       "max":5,
       "min":0
     },
+    "PeriodicScanConfiguration":{
+      "type":"structure",
+      "members":{
+        "frequency":{
+          "shape":"PeriodicScanFrequency",
+          "documentation":"<p>The frequency at which periodic scans are performed (such as weekly or monthly).</p> <p>If you don't provide the <code>frequencyExpression</code> Amazon Inspector chooses day for the scan to run. If you provide the <code>frequencyExpression</code>, the schedule must match the specified <code>frequency</code>.</p>"
+        },
+        "frequencyExpression":{
+          "shape":"FrequencyExpression",
+          "documentation":"<p>The schedule expression for periodic scans, in cron format.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for periodic scans that run on a scheduled basis.</p>"
+    },
+    "PeriodicScanFrequency":{
+      "type":"string",
+      "enum":[
+        "WEEKLY",
+        "MONTHLY",
+        "NEVER"
+      ]
+    },
     "Permission":{
       "type":"structure",
       "required":[
-        "operation",
-        "service"
+        "service",
+        "operation"
       ],
       "members":{
-        "operation":{
-          "shape":"Operation",
-          "documentation":"<p>The operations that can be performed with the given permissions.</p>"
-        },
         "service":{
           "shape":"Service",
           "documentation":"<p>The services that the permissions allow an account to perform the given operations for.</p>"
+        },
+        "operation":{
+          "shape":"Operation",
+          "documentation":"<p>The operations that can be performed with the given permissions.</p>"
         }
       },
       "documentation":"<p>Contains information on the permissions an account has within Amazon Inspector.</p>"
@@ -6739,6 +8383,64 @@
       "max":32,
       "min":0
     },
+    "ProjectCodeSecurityScanConfiguration":{
+      "type":"structure",
+      "members":{
+        "periodicScanConfigurations":{
+          "shape":"ProjectPeriodicScanConfigurationList",
+          "documentation":"<p>The periodic scan configurations applied to the project.</p>"
+        },
+        "continuousIntegrationScanConfigurations":{
+          "shape":"ProjectContinuousIntegrationScanConfigurationList",
+          "documentation":"<p>The continuous integration scan configurations applied to the project.</p>"
+        }
+      },
+      "documentation":"<p>Contains the scan configuration settings applied to a specific project in a code repository.</p>"
+    },
+    "ProjectContinuousIntegrationScanConfiguration":{
+      "type":"structure",
+      "members":{
+        "supportedEvent":{
+          "shape":"ContinuousIntegrationScanEvent",
+          "documentation":"<p>The repository event that triggers continuous integration scans for the project.</p>"
+        },
+        "ruleSetCategories":{
+          "shape":"RuleSetCategories",
+          "documentation":"<p>The categories of security rules applied during continuous integration scans for the project.</p>"
+        }
+      },
+      "documentation":"<p>Contains the continuous integration scan configuration settings applied to a specific project.</p>"
+    },
+    "ProjectContinuousIntegrationScanConfigurationList":{
+      "type":"list",
+      "member":{"shape":"ProjectContinuousIntegrationScanConfiguration"}
+    },
+    "ProjectId":{
+      "type":"string",
+      "pattern":"project-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
+    "ProjectPeriodicScanConfiguration":{
+      "type":"structure",
+      "members":{
+        "frequencyExpression":{
+          "shape":"FrequencyExpression",
+          "documentation":"<p>The schedule expression for periodic scans, in cron format, applied to the project.</p>"
+        },
+        "ruleSetCategories":{
+          "shape":"RuleSetCategories",
+          "documentation":"<p>The categories of security rules applied during periodic scans for the project.</p>"
+        }
+      },
+      "documentation":"<p>Contains the periodic scan configuration settings applied to a specific project.</p>"
+    },
+    "ProjectPeriodicScanConfigurationList":{
+      "type":"list",
+      "member":{"shape":"ProjectPeriodicScanConfiguration"}
+    },
+    "ProjectSelectionScope":{
+      "type":"string",
+      "enum":["ALL"]
+    },
     "Reason":{
       "type":"string",
       "max":1024,
@@ -6747,13 +8449,13 @@
     "Recommendation":{
       "type":"structure",
       "members":{
-        "Url":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The URL address to the CVE remediation recommendations.</p>"
-        },
         "text":{
           "shape":"NonEmptyString",
           "documentation":"<p>The recommended course of action to remediate the finding.</p>"
+        },
+        "Url":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The URL address to the CVE remediation recommendations.</p>"
         }
       },
       "documentation":"<p>Details about the recommended course of action to remediate the finding.</p>"
@@ -6810,7 +8512,7 @@
     },
     "ReportId":{
       "type":"string",
-      "pattern":"\\b[a-f0-9]{8}\\b-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-\\b[a-f0-9]{12}\\b"
+      "pattern":".*\\b[a-f0-9]{8}\\b-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-\\b[a-f0-9]{12}\\b.*"
     },
     "ReportTargetAccounts":{
       "type":"list",
@@ -6836,13 +8538,13 @@
           "shape":"StringFilterList",
           "documentation":"<p>The names of repositories to aggregate findings on.</p>"
         },
-        "sortBy":{
-          "shape":"RepositorySortBy",
-          "documentation":"<p>The value to sort results by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
+        },
+        "sortBy":{
+          "shape":"RepositorySortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on repository.</p>"
@@ -6851,21 +8553,21 @@
       "type":"structure",
       "required":["repository"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
-        },
-        "affectedImages":{
-          "shape":"Long",
-          "documentation":"<p>The number of container images impacted by the findings.</p>"
-        },
         "repository":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the repository associated with the findings.</p>"
         },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
+        },
         "severityCounts":{
           "shape":"SeverityCounts",
           "documentation":"<p>An object that represent the count of matched findings per severity.</p>"
+        },
+        "affectedImages":{
+          "shape":"Long",
+          "documentation":"<p>The number of container images impacted by the findings.</p>"
         }
       },
       "documentation":"<p>A response that contains details on the results of a finding aggregation by repository.</p>"
@@ -6882,35 +8584,34 @@
     "ResetEncryptionKeyRequest":{
       "type":"structure",
       "required":[
-        "resourceType",
-        "scanType"
+        "scanType",
+        "resourceType"
       ],
       "members":{
-        "resourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The resource type the key encrypts.</p>"
-        },
         "scanType":{
           "shape":"ScanType",
           "documentation":"<p>The scan type the key encrypts.</p>"
+        },
+        "resourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The resource type the key encrypts.</p>"
         }
       }
     },
     "ResetEncryptionKeyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Resource":{
       "type":"structure",
       "required":[
-        "id",
-        "type"
+        "type",
+        "id"
       ],
       "members":{
-        "details":{
-          "shape":"ResourceDetails",
-          "documentation":"<p>An object that contains details about the resource involved in a finding.</p>"
+        "type":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of resource.</p>"
         },
         "id":{
           "shape":"NonEmptyString",
@@ -6928,9 +8629,9 @@
           "shape":"TagMap",
           "documentation":"<p>The tags attached to the resource.</p>"
         },
-        "type":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
+        "details":{
+          "shape":"ResourceDetails",
+          "documentation":"<p>An object that contains details about the resource involved in a finding.</p>"
         }
       },
       "documentation":"<p>Details about the resource involved in a finding.</p>"
@@ -6949,6 +8650,10 @@
         "awsLambdaFunction":{
           "shape":"AwsLambdaFunctionDetails",
           "documentation":"<p>A summary of the information about an Amazon Web Services Lambda function affected by a finding.</p>"
+        },
+        "codeRepository":{
+          "shape":"CodeRepositoryDetails",
+          "documentation":"<p>Contains details about a code repository resource associated with a finding.</p>"
         }
       },
       "documentation":"<p>Contains details about the resource involved in the finding.</p>"
@@ -6960,13 +8665,13 @@
           "shape":"ResourceStringFilterList",
           "documentation":"<p>The account IDs used as resource filter criteria.</p>"
         },
-        "ec2InstanceTags":{
-          "shape":"ResourceMapFilterList",
-          "documentation":"<p>The EC2 instance tags used as resource filter criteria.</p>"
+        "resourceId":{
+          "shape":"ResourceStringFilterList",
+          "documentation":"<p>The resource IDs used as resource filter criteria.</p>"
         },
-        "ecrImageTags":{
+        "resourceType":{
           "shape":"ResourceStringFilterList",
-          "documentation":"<p>The ECR image tags used as resource filter criteria.</p>"
+          "documentation":"<p>The resource types used as resource filter criteria.</p>"
         },
         "ecrRepositoryName":{
           "shape":"ResourceStringFilterList",
@@ -6976,17 +8681,17 @@
           "shape":"ResourceStringFilterList",
           "documentation":"<p>The Amazon Web Services Lambda function name used as resource filter criteria.</p>"
         },
+        "ecrImageTags":{
+          "shape":"ResourceStringFilterList",
+          "documentation":"<p>The ECR image tags used as resource filter criteria.</p>"
+        },
+        "ec2InstanceTags":{
+          "shape":"ResourceMapFilterList",
+          "documentation":"<p>The EC2 instance tags used as resource filter criteria.</p>"
+        },
         "lambdaFunctionTags":{
           "shape":"ResourceMapFilterList",
           "documentation":"<p>The Amazon Web Services Lambda function tags used as resource filter criteria.</p>"
-        },
-        "resourceId":{
-          "shape":"ResourceStringFilterList",
-          "documentation":"<p>The resource IDs used as resource filter criteria.</p>"
-        },
-        "resourceType":{
-          "shape":"ResourceStringFilterList",
-          "documentation":"<p>The resource types used as resource filter criteria.</p>"
         }
       },
       "documentation":"<p>The resource filter criteria for a Software bill of materials (SBOM) report.</p>"
@@ -6995,7 +8700,7 @@
       "type":"string",
       "max":341,
       "min":10,
-      "pattern":"(^arn:.*:ecr:.*:\\d{12}:repository\\/(?:[a-z0-9]+(?:[._-][a-z0-9]+)*\\/)*[a-z0-9]+(?:[._-][a-z0-9]+)*(\\/sha256:[a-z0-9]{64})?$)|(^i-([a-z0-9]{8}|[a-z0-9]{17}|\\\\*)$|(^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$))"
+      "pattern":".*(^arn:.*:ecr:.*:\\d{12}:repository\\/(?:[a-z0-9]+(?:[._-][a-z0-9]+)*\\/)*[a-z0-9]+(?:[._-][a-z0-9]+)*(\\/sha256:[a-z0-9]{64})?$)|(^i-([a-z0-9]{8}|[a-z0-9]{17}|\\\\*)$|(^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_\\.]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$)|(^arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:codesecurity-integration\\/[a-f0-9-]{36}\\/project-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$)).*"
     },
     "ResourceIdFilterList":{
       "type":"list",
@@ -7057,21 +8762,25 @@
     "ResourceScanMetadata":{
       "type":"structure",
       "members":{
-        "ec2":{
-          "shape":"Ec2Metadata",
-          "documentation":"<p>An object that contains metadata details for an Amazon EC2 instance.</p>"
+        "ecrRepository":{
+          "shape":"EcrRepositoryMetadata",
+          "documentation":"<p>An object that contains details about the repository an Amazon ECR image resides in.</p>"
         },
         "ecrImage":{
           "shape":"EcrContainerImageMetadata",
           "documentation":"<p>An object that contains details about the container metadata for an Amazon ECR image.</p>"
         },
-        "ecrRepository":{
-          "shape":"EcrRepositoryMetadata",
-          "documentation":"<p>An object that contains details about the repository an Amazon ECR image resides in.</p>"
+        "ec2":{
+          "shape":"Ec2Metadata",
+          "documentation":"<p>An object that contains metadata details for an Amazon EC2 instance.</p>"
         },
         "lambdaFunction":{
           "shape":"LambdaFunctionMetadata",
           "documentation":"<p>An object that contains metadata details for an Amazon Web Services Lambda function.</p>"
+        },
+        "codeRepository":{
+          "shape":"CodeRepositoryMetadata",
+          "documentation":"<p>Contains metadata about scan coverage for a code repository resource.</p>"
         }
       },
       "documentation":"<p>An object that contains details about the metadata for an Amazon ECR resource.</p>"
@@ -7082,7 +8791,8 @@
         "EC2",
         "ECR",
         "LAMBDA",
-        "LAMBDA_CODE"
+        "LAMBDA_CODE",
+        "CODE_REPOSITORY"
       ]
     },
     "ResourceState":{
@@ -7107,7 +8817,8 @@
         "lambdaCode":{
           "shape":"State",
           "documentation":"<p>An object that described the state of Amazon Inspector scans for an account.</p>"
-        }
+        },
+        "codeRepository":{"shape":"State"}
       },
       "documentation":"<p>Details the state of Amazon Inspector for each resource type Amazon Inspector scans.</p>"
     },
@@ -7133,6 +8844,10 @@
         "lambdaCode":{
           "shape":"Status",
           "documentation":"<p>The status of Amazon Inspector scanning for custom application code for Amazon Web Services Lambda functions. </p>"
+        },
+        "codeRepository":{
+          "shape":"Status",
+          "documentation":"<p>The status of Amazon Inspector scanning for code repositories.</p>"
         }
       },
       "documentation":"<p>Details the status of Amazon Inspector for each resource type Amazon Inspector scans.</p>"
@@ -7185,7 +8900,8 @@
         "AWS_EC2_INSTANCE",
         "AWS_ECR_CONTAINER_IMAGE",
         "AWS_ECR_REPOSITORY",
-        "AWS_LAMBDA_FUNCTION"
+        "AWS_LAMBDA_FUNCTION",
+        "CODE_REPOSITORY"
       ]
     },
     "RiskScore":{
@@ -7197,6 +8913,20 @@
       "max":500,
       "min":1
     },
+    "RuleSetCategories":{
+      "type":"list",
+      "member":{"shape":"RuleSetCategory"},
+      "max":3,
+      "min":1
+    },
+    "RuleSetCategory":{
+      "type":"string",
+      "enum":[
+        "SAST",
+        "IAC",
+        "SCA"
+      ]
+    },
     "Runtime":{
       "type":"string",
       "enum":[
@@ -7230,6 +8960,17 @@
         "SPDX_2_3"
       ]
     },
+    "ScanConfigurationArn":{
+      "type":"string",
+      "documentation":"<p>arn:aws:inspector2:<region>:<account-id>:owner/<owner-id>/codesecurity-configuration/<uuid></p>",
+      "pattern":"arn:(aws[a-zA-Z-]*)?:inspector2:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:owner/(\\d{12}|o-[a-z0-9]{10,32})/codesecurity-configuration/[a-f0-9-]{36}"
+    },
+    "ScanConfigurationName":{
+      "type":"string",
+      "max":60,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-_$:.]*"
+    },
     "ScanMode":{
       "type":"string",
       "enum":[
@@ -7240,17 +8981,17 @@
     "ScanStatus":{
       "type":"structure",
       "required":[
-        "reason",
-        "statusCode"
+        "statusCode",
+        "reason"
       ],
       "members":{
-        "reason":{
-          "shape":"ScanStatusReason",
-          "documentation":"<p>The scan status. Possible return values and descriptions are: </p> <p> <code>PENDING_INITIAL_SCAN</code> - This resource has been identified for scanning, results will be available soon.</p> <p> <code>ACCESS_DENIED</code> - Resource access policy restricting Amazon Inspector access. Please update the IAM policy.</p> <p> <code>INTERNAL_ERROR</code> - Amazon Inspector has encountered an internal error for this resource. Amazon Inspector service will automatically resolve the issue and resume the scanning. No action required from the user.</p> <p> <code>UNMANAGED_EC2_INSTANCE</code> - The EC2 instance is not managed by SSM, please use the following SSM automation to remediate the issue: <a href=\"https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshoot-managed-instance.html\">https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshoot-managed-instance.html</a>. Once the instance becomes managed by SSM, Inspector will automatically begin scanning this instance. </p> <p> <code>UNSUPPORTED_OS</code> - Amazon Inspector does not support this OS, architecture, or image manifest type at this time. To see a complete list of supported operating systems see: <a href=\" https://docs.aws.amazon.com/inspector/latest/user/supported.html\">https://docs.aws.amazon.com/inspector/latest/user/supported.html</a>.</p> <p> <code>SCAN_ELIGIBILITY_EXPIRED</code> - The configured scan duration has lapsed for this image.</p> <p> <code>RESOURCE_TERMINATED</code> - This resource has been terminated. The findings and coverage associated with this resource are in the process of being cleaned up.</p> <p> <code>SUCCESSFUL</code> - The scan was successful.</p> <p> <code>NO_RESOURCES_FOUND</code> - Reserved for future use.</p> <p> <code>IMAGE_SIZE_EXCEEDED</code> - Reserved for future use.</p> <p> <code>SCAN_FREQUENCY_MANUAL</code> - This image will not be covered by Amazon Inspector due to the repository scan frequency configuration.</p> <p> <code>SCAN_FREQUENCY_SCAN_ON_PUSH </code>- This image will be scanned one time and will not new findings because of the scan frequency configuration.</p> <p> <code>EC2_INSTANCE_STOPPED</code> - This EC2 instance is in a stopped state, therefore, Amazon Inspector will pause scanning. The existing findings will continue to exist until the instance is terminated. Once the instance is re-started, Inspector will automatically start scanning the instance again. Please note that you will not be charged for this instance while it’s in a stopped state.</p> <p> <code>PENDING_DISABLE</code> - This resource is pending cleanup during disablement. The customer will not be billed while a resource is in the pending disable status.</p> <p> <code>NO INVENTORY</code> - Amazon Inspector couldn’t find software application inventory to scan for vulnerabilities. This might be caused due to required Amazon Inspector associations being deleted or failing to run on your resource. Please verify the status of <code>InspectorInventoryCollection-do-not-delete</code> association in the SSM console for the resource. Additionally, you can verify the instance’s inventory in the SSM Fleet Manager console.</p> <p> <code>STALE_INVENTORY</code> - Amazon Inspector wasn’t able to collect an updated software application inventory in the last 7 days. Please confirm the required Amazon Inspector associations still exist and you can still see an updated inventory in the SSM console.</p> <p> <code>EXCLUDED_BY_TAG</code> - This resource was not scanned because it has been excluded by a tag.</p> <p> <code>UNSUPPORTED_RUNTIME</code> - The function was not scanned because it has an unsupported runtime. To see a complete list of supported runtimes see: <a href=\" https://docs.aws.amazon.com/inspector/latest/user/supported.html\">https://docs.aws.amazon.com/inspector/latest/user/supported.html</a>.</p> <p> <code>UNSUPPORTED_MEDIA_TYPE </code>- The ECR image has an unsupported media type.</p> <p> <code>UNSUPPORTED_CONFIG_FILE</code> - Reserved for future use.</p> <p> <code>DEEP_INSPECTION_PACKAGE_COLLECTION_LIMIT_EXCEEDED</code> - The instance has exceeded the 5000 package limit for Amazon Inspector Deep inspection. To resume Deep inspection for this instance you can try to adjust the custom paths associated with the account.</p> <p> <code>DEEP_INSPECTION_DAILY_SSM_INVENTORY_LIMIT_EXCEEDED</code> - The SSM agent couldn't send inventory to Amazon Inspector because the SSM quota for Inventory data collected per instance per day has already been reached for this instance.</p> <p> <code>DEEP_INSPECTION_COLLECTION_TIME_LIMIT_EXCEEDED</code> - Amazon Inspector failed to extract the package inventory because the package collection time exceeding the maximum threshold of 15 minutes.</p> <p> <code>DEEP_INSPECTION_NO_INVENTORY</code> The Amazon Inspector plugin hasn't yet been able to collect an inventory of packages for this instance. This is usually the result of a pending scan, however, if this status persists after 6 hours, use SSM to ensure that the required Amazon Inspector associations exist and are running for the instance.</p> <p/>"
-        },
         "statusCode":{
           "shape":"ScanStatusCode",
           "documentation":"<p>The status code of the scan.</p>"
+        },
+        "reason":{
+          "shape":"ScanStatusReason",
+          "documentation":"<p>The scan status. Possible return values and descriptions are: </p> <p> <code>ACCESS_DENIED</code> - Resource access policy restricting Amazon Inspector access. Please update the IAM policy.</p> <p> <code>ACCESS_DENIED_TO_ENCRYPTION_KEY</code> - The KMS key policy doesn't allow Amazon Inspector access. Update the key policy.</p> <p> <code>DEEP_INSPECTION_COLLECTION_TIME_LIMIT_EXCEEDED</code> - Amazon Inspector failed to extract the package inventory because the package collection time exceeding the maximum threshold of 15 minutes.</p> <p> <code>DEEP_INSPECTION_DAILY_SSM_INVENTORY_LIMIT_EXCEEDED</code> - The SSM agent couldn't send inventory to Amazon Inspector because the SSM quota for Inventory data collected per instance per day has already been reached for this instance.</p> <p> <code>DEEP_INSPECTION_NO_INVENTORY</code> - The Amazon Inspector plugin hasn't yet been able to collect an inventory of packages for this instance. This is usually the result of a pending scan, however, if this status persists after 6 hours, use SSM to ensure that the required Amazon Inspector associations exist and are running for the instance.</p> <p> <code>DEEP_INSPECTION_PACKAGE_COLLECTION_LIMIT_EXCEEDED</code> - The instance has exceeded the 5000 package limit for Amazon Inspector Deep inspection. To resume Deep inspection for this instance you can try to adjust the custom paths associated with the account.</p> <p> <code>EC2_INSTANCE_STOPPED</code> - This EC2 instance is in a stopped state, therefore, Amazon Inspector will pause scanning. The existing findings will continue to exist until the instance is terminated. Once the instance is re-started, Inspector will automatically start scanning the instance again. Please note that you will not be charged for this instance while it's in a stopped state.</p> <p> <code>EXCLUDED_BY_TAG</code> - This resource was not scanned because it has been excluded by a tag.</p> <p> <code>IMAGE_SIZE_EXCEEDED</code> - Reserved for future use.</p> <p> <code>INTEGRATION_CONNNECTION_LOST</code> - Amazon Inspector couldn't communicate with the source code management platform.</p> <p> <code>INTERNAL_ERROR</code> - Amazon Inspector has encountered an internal error for this resource. Amazon Inspector service will automatically resolve the issue and resume the scanning. No action required from the user.</p> <p> <code>NO_INVENTORY</code> - Amazon Inspector couldn't find software application inventory to scan for vulnerabilities. This might be caused due to required Amazon Inspector associations being deleted or failing to run on your resource. Please verify the status of <code>InspectorInventoryCollection-do-not-delete</code> association in the SSM console for the resource. Additionally, you can verify the instance's inventory in the SSM Fleet Manager console.</p> <p> <code>NO_RESOURCES_FOUND</code> - Reserved for future use.</p> <p> <code>NO_SCAN_CONFIGURATION_ASSOCIATED</code> - The code repository resource doesn't have an associated scan configuration.</p> <p> <code>PENDING_DISABLE</code> - This resource is pending cleanup during disablement. The customer will not be billed while a resource is in the pending disable status.</p> <p> <code>PENDING_INITIAL_SCAN</code> - This resource has been identified for scanning, results will be available soon.</p> <p> <code>RESOURCE_TERMINATED</code> - This resource has been terminated. The findings and coverage associated with this resource are in the process of being cleaned up.</p> <p> <code>SCAN_ELIGIBILITY_EXPIRED</code> - The configured scan duration has lapsed for this image.</p> <p> <code>SCAN_FREQUENCY_MANUAL</code> - This image will not be covered by Amazon Inspector due to the repository scan frequency configuration.</p> <p> <code>SCAN_FREQUENCY_SCAN_ON_PUSH</code> - This image will be scanned one time and will not new findings because of the scan frequency configuration.</p> <p> <code>SCAN_IN_PROGRESS</code> - The resource is currently being scanned.</p> <p> <code>STALE_INVENTORY</code> - Amazon Inspector wasn't able to collect an updated software application inventory in the last 7 days. Please confirm the required Amazon Inspector associations still exist and you can still see an updated inventory in the SSM console.</p> <p> <code>SUCCESSFUL</code> - The scan was successful.</p> <p> <code>UNMANAGED_EC2_INSTANCE</code> - The EC2 instance is not managed by SSM, please use the following SSM automation to remediate the issue: <a href=\"https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshoot-managed-instance.html\">https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshoot-managed-instance.html</a>. Once the instance becomes managed by SSM, Inspector will automatically begin scanning this instance. </p> <p> <code>UNSUPPORTED_CONFIG_FILE</code> - Reserved for future use.</p> <p> <code>UNSUPPORTED_LANGUAGE</code> - The scan was unsuccessful because the repository contains files in an unsupported programming language.</p> <p> <code>UNSUPPORTED_MEDIA_TYPE </code>- The ECR image has an unsupported media type.</p> <p> <code>UNSUPPORTED_OS</code> - Amazon Inspector does not support this OS, architecture, or image manifest type at this time. To see a complete list of supported operating systems see: <a href=\" https://docs.aws.amazon.com/inspector/latest/user/supported.html\">https://docs.aws.amazon.com/inspector/latest/user/supported.html</a>.</p> <p> <code>UNSUPPORTED_RUNTIME</code> - The function was not scanned because it has an unsupported runtime. To see a complete list of supported runtimes see: <a href=\" https://docs.aws.amazon.com/inspector/latest/user/supported.html\">https://docs.aws.amazon.com/inspector/latest/user/supported.html</a>.</p>"
         }
       },
       "documentation":"<p>The status of the scan.</p>"
@@ -7290,7 +9031,13 @@
         "DEEP_INSPECTION_COLLECTION_TIME_LIMIT_EXCEEDED",
         "DEEP_INSPECTION_NO_INVENTORY",
         "AGENTLESS_INSTANCE_STORAGE_LIMIT_EXCEEDED",
-        "AGENTLESS_INSTANCE_COLLECTION_TIME_LIMIT_EXCEEDED"
+        "AGENTLESS_INSTANCE_COLLECTION_TIME_LIMIT_EXCEEDED",
+        "PENDING_REVIVAL_SCAN",
+        "INTEGRATION_CONNECTION_LOST",
+        "ACCESS_DENIED_TO_ENCRYPTION_KEY",
+        "UNSUPPORTED_LANGUAGE",
+        "NO_SCAN_CONFIGURATION_ASSOCIATED",
+        "SCAN_IN_PROGRESS"
       ]
     },
     "ScanType":{
@@ -7304,26 +9051,36 @@
     "Schedule":{
       "type":"structure",
       "members":{
-        "daily":{
-          "shape":"DailySchedule",
-          "documentation":"<p>The schedule's daily.</p>"
-        },
-        "monthly":{
-          "shape":"MonthlySchedule",
-          "documentation":"<p>The schedule's monthly.</p>"
-        },
         "oneTime":{
           "shape":"OneTimeSchedule",
           "documentation":"<p>The schedule's one time.</p>"
         },
+        "daily":{
+          "shape":"DailySchedule",
+          "documentation":"<p>The schedule's daily.</p>"
+        },
         "weekly":{
           "shape":"WeeklySchedule",
           "documentation":"<p>The schedule's weekly.</p>"
+        },
+        "monthly":{
+          "shape":"MonthlySchedule",
+          "documentation":"<p>The schedule's monthly.</p>"
         }
       },
       "documentation":"<p>A schedule.</p>",
       "union":true
     },
+    "ScopeSettings":{
+      "type":"structure",
+      "members":{
+        "projectSelectionScope":{
+          "shape":"ProjectSelectionScope",
+          "documentation":"<p>The scope of projects to be selected for scanning within the integrated repositories. Setting the value to <code>ALL</code> applies the scope settings to all existing and future projects imported into Amazon Inspector.</p>"
+        }
+      },
+      "documentation":"<p>Defines the scope of repositories to be included in code security scans.</p>"
+    },
     "SearchVulnerabilitiesFilterCriteria":{
       "type":"structure",
       "required":["vulnerabilityIds"],
@@ -7353,19 +9110,19 @@
       "type":"structure",
       "required":["vulnerabilities"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination parameter to be used on the next list operation to retrieve more items.</p>"
-        },
         "vulnerabilities":{
           "shape":"Vulnerabilities",
           "documentation":"<p>Details about the listed vulnerability.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination parameter to be used on the next list operation to retrieve more items.</p>"
         }
       }
     },
     "SecurityGroupId":{
       "type":"string",
-      "pattern":"^sg-([a-z0-9]{8}|[a-z0-9]{17}|\\*)$"
+      "pattern":"sg-([a-z0-9]{8}|[a-z0-9]{17}|\\*)"
     },
     "SecurityGroupIdList":{
       "type":"list",
@@ -7392,21 +9149,16 @@
     },
     "SendCisSessionHealthResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SendCisSessionTelemetryRequest":{
       "type":"structure",
       "required":[
-        "messages",
         "scanJobId",
-        "sessionToken"
+        "sessionToken",
+        "messages"
       ],
       "members":{
-        "messages":{
-          "shape":"CisSessionMessages",
-          "documentation":"<p>The CIS session telemetry messages.</p>"
-        },
         "scanJobId":{
           "shape":"UUID",
           "documentation":"<p>A unique identifier for the scan job.</p>"
@@ -7414,13 +9166,16 @@
         "sessionToken":{
           "shape":"UUID",
           "documentation":"<p>The unique token that identifies the CIS session.</p>"
+        },
+        "messages":{
+          "shape":"CisSessionMessages",
+          "documentation":"<p>The CIS session telemetry messages.</p>"
         }
       }
     },
     "SendCisSessionTelemetryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Service":{
       "type":"string",
@@ -7468,17 +9223,17 @@
           "shape":"Long",
           "documentation":"<p>The total count of findings from all severities.</p>"
         },
-        "critical":{
+        "medium":{
           "shape":"Long",
-          "documentation":"<p>The total count of critical severity findings.</p>"
+          "documentation":"<p>The total count of medium severity findings.</p>"
         },
         "high":{
           "shape":"Long",
           "documentation":"<p>The total count of high severity findings.</p>"
         },
-        "medium":{
+        "critical":{
           "shape":"Long",
-          "documentation":"<p>The total count of medium severity findings.</p>"
+          "documentation":"<p>The total count of critical severity findings.</p>"
         }
       },
       "documentation":"<p>An object that contains the counts of aggregated finding per severity.</p>"
@@ -7534,7 +9289,7 @@
       "type":"string",
       "max":71,
       "min":71,
-      "pattern":"^sha256:[a-z0-9]{64}$"
+      "pattern":"sha256:[a-z0-9]{64}"
     },
     "StartCisSessionMessage":{
       "type":"structure",
@@ -7550,33 +9305,64 @@
     "StartCisSessionRequest":{
       "type":"structure",
       "required":[
-        "message",
-        "scanJobId"
+        "scanJobId",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"StartCisSessionMessage",
-          "documentation":"<p>The start CIS session message.</p>"
-        },
         "scanJobId":{
           "shape":"UUID",
           "documentation":"<p>A unique identifier for the scan job.</p>"
+        },
+        "message":{
+          "shape":"StartCisSessionMessage",
+          "documentation":"<p>The start CIS session message.</p>"
         }
       }
     },
     "StartCisSessionResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "StartCodeSecurityScanRequest":{
+      "type":"structure",
+      "required":["resource"],
       "members":{
+        "clientToken":{
+          "shape":"CodeSecurityClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "resource":{
+          "shape":"CodeSecurityResource",
+          "documentation":"<p>The resource identifier for the code repository to scan.</p>"
+        }
+      }
+    },
+    "StartCodeSecurityScanResponse":{
+      "type":"structure",
+      "members":{
+        "scanId":{
+          "shape":"CodeSecurityUuid",
+          "documentation":"<p>The unique identifier of the initiated scan.</p>"
+        },
+        "status":{
+          "shape":"CodeScanStatus",
+          "documentation":"<p>The current status of the initiated scan.</p>"
+        }
       }
     },
     "State":{
       "type":"structure",
       "required":[
+        "status",
         "errorCode",
-        "errorMessage",
-        "status"
+        "errorMessage"
       ],
       "members":{
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of Amazon Inspector for the account.</p>"
+        },
         "errorCode":{
           "shape":"ErrorCode",
           "documentation":"<p>The error code explaining why the account failed to enable Amazon Inspector.</p>"
@@ -7584,10 +9370,6 @@
         "errorMessage":{
           "shape":"NonEmptyString",
           "documentation":"<p>The error message received when the account failed to enable Amazon Inspector.</p>"
-        },
-        "status":{
-          "shape":"Status",
-          "documentation":"<p>The status of Amazon Inspector for the account.</p>"
         }
       },
       "documentation":"<p>An object that described the state of Amazon Inspector scans for an account.</p>"
@@ -7610,13 +9392,13 @@
           "shape":"Integer",
           "documentation":"<p>The number of checks that failed.</p>"
         },
-        "passed":{
-          "shape":"Integer",
-          "documentation":"<p>The number of checks that passed.</p>"
-        },
         "skipped":{
           "shape":"Integer",
           "documentation":"<p>The number of checks that were skipped.</p>"
+        },
+        "passed":{
+          "shape":"Integer",
+          "documentation":"<p>The number of checks that passed.</p>"
         }
       },
       "documentation":"<p>The status counts.</p>"
@@ -7635,6 +9417,10 @@
         "componentType":{
           "shape":"ComponentType",
           "documentation":"<p>The component type.</p>"
+        },
+        "componentArn":{
+          "shape":"ComponentArn",
+          "documentation":"<p>The component ARN. The ARN can be null and is not displayed in the Amazon Web Services console.</p>"
         }
       },
       "documentation":"<p>Details about the step associated with a finding.</p>"
@@ -7648,37 +9434,37 @@
     "StopCisMessageProgress":{
       "type":"structure",
       "members":{
-        "errorChecks":{
-          "shape":"CheckCount",
-          "documentation":"<p>The progress' error checks.</p>"
-        },
-        "failedChecks":{
+        "totalChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' failed checks.</p>"
+          "documentation":"<p>The progress' total checks.</p>"
         },
-        "informationalChecks":{
+        "successfulChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' informational checks.</p>"
+          "documentation":"<p>The progress' successful checks.</p>"
         },
-        "notApplicableChecks":{
+        "failedChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' not applicable checks.</p>"
+          "documentation":"<p>The progress' failed checks.</p>"
         },
         "notEvaluatedChecks":{
           "shape":"CheckCount",
           "documentation":"<p>The progress' not evaluated checks.</p>"
         },
-        "successfulChecks":{
+        "unknownChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' successful checks.</p>"
+          "documentation":"<p>The progress' unknown checks.</p>"
         },
-        "totalChecks":{
+        "notApplicableChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' total checks.</p>"
+          "documentation":"<p>The progress' not applicable checks.</p>"
         },
-        "unknownChecks":{
+        "informationalChecks":{
           "shape":"CheckCount",
-          "documentation":"<p>The progress' unknown checks.</p>"
+          "documentation":"<p>The progress' informational checks.</p>"
+        },
+        "errorChecks":{
+          "shape":"CheckCount",
+          "documentation":"<p>The progress' error checks.</p>"
         }
       },
       "documentation":"<p>The stop CIS message progress.</p>"
@@ -7686,33 +9472,33 @@
     "StopCisSessionMessage":{
       "type":"structure",
       "required":[
-        "progress",
-        "status"
+        "status",
+        "progress"
       ],
       "members":{
-        "benchmarkProfile":{
-          "shape":"BenchmarkProfile",
-          "documentation":"<p>The message benchmark profile.</p>"
-        },
-        "benchmarkVersion":{
-          "shape":"BenchmarkVersion",
-          "documentation":"<p>The message benchmark version.</p>"
+        "status":{
+          "shape":"StopCisSessionStatus",
+          "documentation":"<p>The status of the message.</p>"
         },
-        "computePlatform":{
-          "shape":"ComputePlatform",
-          "documentation":"<p>The message compute platform.</p>"
+        "reason":{
+          "shape":"Reason",
+          "documentation":"<p>The reason for the message.</p>"
         },
         "progress":{
           "shape":"StopCisMessageProgress",
           "documentation":"<p>The progress of the message.</p>"
         },
-        "reason":{
-          "shape":"Reason",
-          "documentation":"<p>The reason for the message.</p>"
+        "computePlatform":{
+          "shape":"ComputePlatform",
+          "documentation":"<p>The message compute platform.</p>"
         },
-        "status":{
-          "shape":"StopCisSessionStatus",
-          "documentation":"<p>The status of the message.</p>"
+        "benchmarkVersion":{
+          "shape":"BenchmarkVersion",
+          "documentation":"<p>The message benchmark version.</p>"
+        },
+        "benchmarkProfile":{
+          "shape":"BenchmarkProfile",
+          "documentation":"<p>The message benchmark profile.</p>"
         }
       },
       "documentation":"<p>The stop CIS session message.</p>"
@@ -7720,15 +9506,11 @@
     "StopCisSessionRequest":{
       "type":"structure",
       "required":[
-        "message",
         "scanJobId",
-        "sessionToken"
+        "sessionToken",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"StopCisSessionMessage",
-          "documentation":"<p>The stop CIS session message.</p>"
-        },
         "scanJobId":{
           "shape":"UUID",
           "documentation":"<p>A unique identifier for the scan job.</p>"
@@ -7736,13 +9518,16 @@
         "sessionToken":{
           "shape":"UUID",
           "documentation":"<p>The unique token that identifies the CIS session.</p>"
+        },
+        "message":{
+          "shape":"StopCisSessionMessage",
+          "documentation":"<p>The stop CIS session message.</p>"
         }
       }
     },
     "StopCisSessionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopCisSessionStatus":{
       "type":"string",
@@ -7797,7 +9582,7 @@
     },
     "SubnetId":{
       "type":"string",
-      "pattern":"^subnet-([a-z0-9]{8}|[a-z0-9]{17}|\\*)$"
+      "pattern":"subnet-([a-z0-9]{8}|[a-z0-9]{17}|\\*)"
     },
     "SubnetIdList":{
       "type":"list",
@@ -7805,16 +9590,31 @@
       "max":16,
       "min":0
     },
-    "SuggestedFix":{
+    "SuccessfulAssociationResult":{
       "type":"structure",
       "members":{
-        "code":{
-          "shape":"SuggestedFixCodeString",
-          "documentation":"<p>The fix's code.</p>"
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration that was successfully associated or disassociated.</p>"
         },
+        "resource":{"shape":"CodeSecurityResource"}
+      },
+      "documentation":"<p>Details about a successful association or disassociation between a code repository and a scan configuration.</p>"
+    },
+    "SuccessfulAssociationResultList":{
+      "type":"list",
+      "member":{"shape":"SuccessfulAssociationResult"}
+    },
+    "SuggestedFix":{
+      "type":"structure",
+      "members":{
         "description":{
           "shape":"SuggestedFixDescriptionString",
           "documentation":"<p>The fix's description.</p>"
+        },
+        "code":{
+          "shape":"SuggestedFixCodeString",
+          "documentation":"<p>The fix's code.</p>"
         }
       },
       "documentation":"<p>A suggested fix for a vulnerability in your Lambda function code.</p>"
@@ -7866,7 +9666,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^(?!aws:)[a-zA-Z+-=._:/]+$"
+      "pattern":"(?!aws:)[a-zA-Z+-=._:/]+"
     },
     "TagKeyList":{
       "type":"list",
@@ -7904,8 +9704,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValueList":{
       "type":"list",
@@ -7920,7 +9719,7 @@
     },
     "TargetAccount":{
       "type":"string",
-      "pattern":"^\\d{12}|ALL_ACCOUNTS|SELF$"
+      "pattern":"\\d{12}|ALL_ACCOUNTS|SELF"
     },
     "TargetAccountList":{
       "type":"list",
@@ -7939,7 +9738,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\p{L}\\p{Z}\\p{N}_.:/=\\-@]*$"
+      "pattern":"[\\p{L}\\p{Z}\\p{N}_.:/=\\-@]*"
     },
     "TargetResourceTagsValue":{
       "type":"string",
@@ -8003,7 +9802,7 @@
     },
     "TimeOfDay":{
       "type":"string",
-      "pattern":"^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$"
+      "pattern":"([0-1]?[0-9]|2[0-3]):[0-5][0-9]"
     },
     "Timestamp":{"type":"timestamp"},
     "Timezone":{
@@ -8014,29 +9813,29 @@
     "TitleAggregation":{
       "type":"structure",
       "members":{
-        "findingType":{
-          "shape":"AggregationFindingType",
-          "documentation":"<p>The type of finding to aggregate on.</p>"
+        "titles":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The finding titles to aggregate on.</p>"
+        },
+        "vulnerabilityIds":{
+          "shape":"StringFilterList",
+          "documentation":"<p>The vulnerability IDs of the findings.</p>"
         },
         "resourceType":{
           "shape":"AggregationResourceType",
           "documentation":"<p>The resource type to aggregate on.</p>"
         },
-        "sortBy":{
-          "shape":"TitleSortBy",
-          "documentation":"<p>The value to sort results by.</p>"
-        },
         "sortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order to sort results by.</p>"
         },
-        "titles":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The finding titles to aggregate on.</p>"
+        "sortBy":{
+          "shape":"TitleSortBy",
+          "documentation":"<p>The value to sort results by.</p>"
         },
-        "vulnerabilityIds":{
-          "shape":"StringFilterList",
-          "documentation":"<p>The vulnerability IDs of the findings.</p>"
+        "findingType":{
+          "shape":"AggregationFindingType",
+          "documentation":"<p>The type of finding to aggregate on.</p>"
         }
       },
       "documentation":"<p>The details that define an aggregation based on finding title.</p>"
@@ -8045,14 +9844,6 @@
       "type":"structure",
       "required":["title"],
       "members":{
-        "accountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
-        },
-        "severityCounts":{
-          "shape":"SeverityCounts",
-          "documentation":"<p>An object that represent the count of matched findings per severity.</p>"
-        },
         "title":{
           "shape":"NonEmptyString",
           "documentation":"<p>The title that the findings were aggregated on.</p>"
@@ -8060,6 +9851,14 @@
         "vulnerabilityId":{
           "shape":"String",
           "documentation":"<p>The vulnerability ID of the finding.</p>"
+        },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account associated with the findings.</p>"
+        },
+        "severityCounts":{
+          "shape":"SeverityCounts",
+          "documentation":"<p>An object that represent the count of matched findings per severity.</p>"
         }
       },
       "documentation":"<p>A response that contains details on the results of a finding aggregation by title.</p>"
@@ -8098,7 +9897,7 @@
     },
     "UUID":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -8123,8 +9922,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCisScanConfigurationRequest":{
       "type":"structure",
@@ -8138,14 +9936,14 @@
           "shape":"CisScanName",
           "documentation":"<p>The scan name for the CIS scan configuration.</p>"
         },
-        "schedule":{
-          "shape":"Schedule",
-          "documentation":"<p>The schedule for the CIS scan configuration.</p>"
-        },
         "securityLevel":{
           "shape":"CisSecurityLevel",
           "documentation":"<p> The security level for the CIS scan configuration. Security level refers to the Benchmark levels that CIS assigns to a profile. </p>"
         },
+        "schedule":{
+          "shape":"Schedule",
+          "documentation":"<p>The schedule for the CIS scan configuration.</p>"
+        },
         "targets":{
           "shape":"UpdateCisTargets",
           "documentation":"<p>The targets for the CIS scan configuration.</p>"
@@ -8176,23 +9974,82 @@
       },
       "documentation":"<p>Updates CIS targets.</p>"
     },
-    "UpdateConfigurationRequest":{
+    "UpdateCodeSecurityIntegrationRequest":{
       "type":"structure",
+      "required":[
+        "integrationArn",
+        "details"
+      ],
       "members":{
-        "ec2Configuration":{
-          "shape":"Ec2Configuration",
-          "documentation":"<p>Specifies how the Amazon EC2 automated scan will be updated for your environment.</p>"
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the code security integration to update.</p>"
+        },
+        "details":{
+          "shape":"UpdateIntegrationDetails",
+          "documentation":"<p>The updated integration details specific to the repository provider type.</p>"
+        }
+      }
+    },
+    "UpdateCodeSecurityIntegrationResponse":{
+      "type":"structure",
+      "required":[
+        "integrationArn",
+        "status"
+      ],
+      "members":{
+        "integrationArn":{
+          "shape":"CodeSecurityIntegrationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated code security integration.</p>"
         },
+        "status":{
+          "shape":"IntegrationStatus",
+          "documentation":"<p>The current status of the updated code security integration.</p>"
+        }
+      }
+    },
+    "UpdateCodeSecurityScanConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "scanConfigurationArn",
+        "configuration"
+      ],
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the scan configuration to update.</p>"
+        },
+        "configuration":{
+          "shape":"CodeSecurityScanConfiguration",
+          "documentation":"<p>The updated configuration settings for the code security scan.</p>"
+        }
+      }
+    },
+    "UpdateCodeSecurityScanConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "scanConfigurationArn":{
+          "shape":"ScanConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated scan configuration.</p>"
+        }
+      }
+    },
+    "UpdateConfigurationRequest":{
+      "type":"structure",
+      "members":{
         "ecrConfiguration":{
           "shape":"EcrConfiguration",
           "documentation":"<p>Specifies how the ECR automated re-scan will be updated for your environment.</p>"
+        },
+        "ec2Configuration":{
+          "shape":"Ec2Configuration",
+          "documentation":"<p>Specifies how the Amazon EC2 automated scan will be updated for your environment.</p>"
         }
       }
     },
     "UpdateConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEc2DeepInspectionConfigurationRequest":{
       "type":"structure",
@@ -8210,21 +10067,21 @@
     "UpdateEc2DeepInspectionConfigurationResponse":{
       "type":"structure",
       "members":{
-        "errorMessage":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>An error message explaining why new Amazon Inspector deep inspection custom paths could not be added.</p>"
+        "packagePaths":{
+          "shape":"PathList",
+          "documentation":"<p>The current Amazon Inspector deep inspection custom paths for your account.</p>"
         },
         "orgPackagePaths":{
           "shape":"PathList",
           "documentation":"<p>The current Amazon Inspector deep inspection custom paths for the organization.</p>"
         },
-        "packagePaths":{
-          "shape":"PathList",
-          "documentation":"<p>The current Amazon Inspector deep inspection custom paths for your account.</p>"
-        },
         "status":{
           "shape":"Ec2DeepInspectionStatus",
           "documentation":"<p>The status of Amazon Inspector deep inspection in your account.</p>"
+        },
+        "errorMessage":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>An error message explaining why new Amazon Inspector deep inspection custom paths could not be added.</p>"
         }
       }
     },
@@ -8232,28 +10089,27 @@
       "type":"structure",
       "required":[
         "kmsKeyId",
-        "resourceType",
-        "scanType"
+        "scanType",
+        "resourceType"
       ],
       "members":{
         "kmsKeyId":{
           "shape":"KmsKeyArn",
           "documentation":"<p>A KMS key ID for the encryption key.</p>"
         },
-        "resourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The resource type for the encryption key.</p>"
-        },
         "scanType":{
           "shape":"ScanType",
           "documentation":"<p>The scan type for the encryption key.</p>"
+        },
+        "resourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The resource type for the encryption key.</p>"
         }
       }
     },
     "UpdateEncryptionKeyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFilterRequest":{
       "type":"structure",
@@ -8267,10 +10123,6 @@
           "shape":"FilterDescription",
           "documentation":"<p>A description of the filter.</p>"
         },
-        "filterArn":{
-          "shape":"FilterArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the filter to update.</p>"
-        },
         "filterCriteria":{
           "shape":"FilterCriteria",
           "documentation":"<p>Defines the criteria to be update in the filter.</p>"
@@ -8279,6 +10131,10 @@
           "shape":"FilterName",
           "documentation":"<p>The name of the filter.</p>"
         },
+        "filterArn":{
+          "shape":"FilterArn",
+          "documentation":"<p>The Amazon Resource Number (ARN) of the filter to update.</p>"
+        },
         "reason":{
           "shape":"FilterReason",
           "documentation":"<p>The reason the filter was updated.</p>"
@@ -8295,6 +10151,50 @@
         }
       }
     },
+    "UpdateGitHubIntegrationDetail":{
+      "type":"structure",
+      "required":[
+        "code",
+        "installationId"
+      ],
+      "members":{
+        "code":{
+          "shape":"GitHubAuthCode",
+          "documentation":"<p>The authorization code received from GitHub to update the integration.</p>"
+        },
+        "installationId":{
+          "shape":"GitHubInstallationId",
+          "documentation":"<p>The installation ID of the GitHub App associated with the integration.</p>"
+        }
+      },
+      "documentation":"<p>Contains details required to update an integration with GitHub.</p>"
+    },
+    "UpdateGitLabSelfManagedIntegrationDetail":{
+      "type":"structure",
+      "required":["authCode"],
+      "members":{
+        "authCode":{
+          "shape":"GitLabAuthCode",
+          "documentation":"<p>The authorization code received from the self-managed GitLab instance to update the integration.</p>"
+        }
+      },
+      "documentation":"<p>Contains details required to update an integration with a self-managed GitLab instance.</p>"
+    },
+    "UpdateIntegrationDetails":{
+      "type":"structure",
+      "members":{
+        "gitlabSelfManaged":{
+          "shape":"UpdateGitLabSelfManagedIntegrationDetail",
+          "documentation":"<p>Details specific to updating an integration with a self-managed GitLab instance.</p>"
+        },
+        "github":{
+          "shape":"UpdateGitHubIntegrationDetail",
+          "documentation":"<p>Details specific to updating an integration with GitHub.</p>"
+        }
+      },
+      "documentation":"<p>Contains details required to update a code security integration with a specific repository provider.</p>",
+      "union":true
+    },
     "UpdateOrgEc2DeepInspectionConfigurationRequest":{
       "type":"structure",
       "required":["orgPackagePaths"],
@@ -8307,8 +10207,7 @@
     },
     "UpdateOrgEc2DeepInspectionConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOrganizationConfigurationRequest":{
       "type":"structure",
@@ -8333,28 +10232,28 @@
     "Usage":{
       "type":"structure",
       "members":{
-        "currency":{
-          "shape":"Currency",
-          "documentation":"<p>The currency type used when calculating usage data.</p>"
-        },
-        "estimatedMonthlyCost":{
-          "shape":"MonthlyCostEstimate",
-          "documentation":"<p>The estimated monthly cost of Amazon Inspector.</p>"
+        "type":{
+          "shape":"UsageType",
+          "documentation":"<p>The type scan.</p>"
         },
         "total":{
           "shape":"UsageValue",
           "documentation":"<p>The total of usage.</p>"
         },
-        "type":{
-          "shape":"UsageType",
-          "documentation":"<p>The type scan.</p>"
+        "estimatedMonthlyCost":{
+          "shape":"MonthlyCostEstimate",
+          "documentation":"<p>The estimated monthly cost of Amazon Inspector.</p>"
+        },
+        "currency":{
+          "shape":"Currency",
+          "documentation":"<p>The currency type used when calculating usage data.</p>"
         }
       },
       "documentation":"<p>Contains usage information about the cost of Amazon Inspector operation.</p>"
     },
     "UsageAccountId":{
       "type":"string",
-      "pattern":"[0-9]{12}"
+      "pattern":".*[0-9]{12}.*"
     },
     "UsageAccountIdList":{
       "type":"list",
@@ -8391,7 +10290,11 @@
         "ECR_INITIAL_SCAN",
         "ECR_RESCAN",
         "LAMBDA_FUNCTION_HOURS",
-        "LAMBDA_FUNCTION_CODE_HOURS"
+        "LAMBDA_FUNCTION_CODE_HOURS",
+        "CODE_REPOSITORY_SAST",
+        "CODE_REPOSITORY_IAC",
+        "CODE_REPOSITORY_SCA",
+        "EC2_AGENTLESS_INSTANCE_HOURS"
       ]
     },
     "UsageValue":{
@@ -8405,14 +10308,14 @@
         "reason"
       ],
       "members":{
-        "fields":{
-          "shape":"ValidationExceptionFields",
-          "documentation":"<p>The fields that failed validation.</p>"
-        },
         "message":{"shape":"String"},
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>The reason for the validation failure.</p>"
+        },
+        "fields":{
+          "shape":"ValidationExceptionFields",
+          "documentation":"<p>The fields that failed validation.</p>"
         }
       },
       "documentation":"<p>The request has failed validation due to missing required fields or having invalid inputs.</p>",
@@ -8425,17 +10328,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The validation exception message.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the validation exception.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The validation exception message.</p>"
         }
       },
       "documentation":"<p>An object that describes a validation exception.</p>"
@@ -8466,15 +10369,15 @@
     "VendorUpdatedAt":{"type":"timestamp"},
     "Version":{
       "type":"string",
-      "pattern":"^\\$LATEST|[0-9]+$"
+      "pattern":"\\$LATEST|[0-9]+"
     },
     "VpcId":{
       "type":"string",
-      "pattern":"^vpc-([a-z0-9]{8}|[a-z0-9]{17}|\\*)$"
+      "pattern":"vpc-([a-z0-9]{8}|[a-z0-9]{17}|\\*)"
     },
     "VulnId":{
       "type":"string",
-      "pattern":"^CVE-[12][0-9]{3}-[0-9]{1,10}$"
+      "pattern":"CVE-[12][0-9]{3}-[0-9]{1,10}"
     },
     "VulnIdList":{
       "type":"list",
@@ -8492,73 +10395,77 @@
       "type":"structure",
       "required":["id"],
       "members":{
-        "atigData":{
-          "shape":"AtigData",
-          "documentation":"<p>An object that contains information about the Amazon Web Services Threat Intel Group (ATIG) details for the vulnerability.</p>"
+        "id":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID for the specific vulnerability.</p>"
+        },
+        "cwes":{
+          "shape":"Cwes",
+          "documentation":"<p>The Common Weakness Enumeration (CWE) associated with the vulnerability.</p>"
         },
         "cisaData":{
           "shape":"CisaData",
           "documentation":"<p>An object that contains the Cybersecurity and Infrastructure Security Agency (CISA) details for the vulnerability.</p>"
         },
-        "cvss2":{
-          "shape":"Cvss2",
-          "documentation":"<p>An object that contains the Common Vulnerability Scoring System (CVSS) Version 2 details for the vulnerability.</p>"
-        },
-        "cvss3":{
-          "shape":"Cvss3",
-          "documentation":"<p>An object that contains the Common Vulnerability Scoring System (CVSS) Version 3 details for the vulnerability.</p>"
-        },
-        "cwes":{
-          "shape":"Cwes",
-          "documentation":"<p>The Common Weakness Enumeration (CWE) associated with the vulnerability.</p>"
+        "source":{
+          "shape":"VulnerabilitySource",
+          "documentation":"<p>The source of the vulnerability information. Possible results are <code>RHEL</code>, <code>AMAZON_CVE</code>, <code>DEBIAN</code> or <code>NVD</code>.</p>"
         },
         "description":{
           "shape":"VulnerabilityDescription",
           "documentation":"<p>A description of the vulnerability.</p>"
         },
-        "detectionPlatforms":{
-          "shape":"DetectionPlatforms",
-          "documentation":"<p>Platforms that the vulnerability can be detected on.</p>"
-        },
-        "epss":{
-          "shape":"Epss",
-          "documentation":"<p>An object that contains the Exploit Prediction Scoring System (EPSS) score for a vulnerability.</p>"
+        "atigData":{
+          "shape":"AtigData",
+          "documentation":"<p>An object that contains information about the Amazon Web Services Threat Intel Group (ATIG) details for the vulnerability.</p>"
         },
-        "exploitObserved":{
-          "shape":"ExploitObserved",
-          "documentation":"<p>An object that contains details on when the exploit was observed.</p>"
+        "vendorSeverity":{
+          "shape":"VendorSeverity",
+          "documentation":"<p>The severity assigned by the vendor.</p>"
         },
-        "id":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The ID for the specific vulnerability.</p>"
+        "cvss4":{
+          "shape":"Cvss4",
+          "documentation":"<p>An object that contains the Common Vulnerability Scoring System (CVSS) Version 4 details for the vulnerability.</p>"
         },
-        "referenceUrls":{
-          "shape":"VulnerabilityReferenceUrls",
-          "documentation":"<p>Links to various resources with more information on this vulnerability. </p>"
+        "cvss3":{
+          "shape":"Cvss3",
+          "documentation":"<p>An object that contains the Common Vulnerability Scoring System (CVSS) Version 3 details for the vulnerability.</p>"
         },
         "relatedVulnerabilities":{
           "shape":"RelatedVulnerabilities",
           "documentation":"<p>A list of related vulnerabilities.</p>"
         },
-        "source":{
-          "shape":"VulnerabilitySource",
-          "documentation":"<p>The source of the vulnerability information. Possible results are <code>RHEL</code>, <code>AMAZON_CVE</code>, <code>DEBIAN</code> or <code>NVD</code>.</p>"
-        },
-        "sourceUrl":{
-          "shape":"VulnerabilitySourceUrl",
-          "documentation":"<p>A link to the official source material for this vulnerability.</p>"
+        "cvss2":{
+          "shape":"Cvss2",
+          "documentation":"<p>An object that contains the Common Vulnerability Scoring System (CVSS) Version 2 details for the vulnerability.</p>"
         },
         "vendorCreatedAt":{
           "shape":"VendorCreatedAt",
           "documentation":"<p>The date and time when the vendor created this vulnerability.</p>"
         },
-        "vendorSeverity":{
-          "shape":"VendorSeverity",
-          "documentation":"<p>The severity assigned by the vendor.</p>"
-        },
         "vendorUpdatedAt":{
           "shape":"VendorUpdatedAt",
           "documentation":"<p>The date and time when the vendor last updated this vulnerability.</p>"
+        },
+        "sourceUrl":{
+          "shape":"VulnerabilitySourceUrl",
+          "documentation":"<p>A link to the official source material for this vulnerability.</p>"
+        },
+        "referenceUrls":{
+          "shape":"VulnerabilityReferenceUrls",
+          "documentation":"<p>Links to various resources with more information on this vulnerability. </p>"
+        },
+        "exploitObserved":{
+          "shape":"ExploitObserved",
+          "documentation":"<p>An object that contains details on when the exploit was observed.</p>"
+        },
+        "detectionPlatforms":{
+          "shape":"DetectionPlatforms",
+          "documentation":"<p>Platforms that the vulnerability can be detected on.</p>"
+        },
+        "epss":{
+          "shape":"Epss",
+          "documentation":"<p>An object that contains the Exploit Prediction Scoring System (EPSS) score for a vulnerability.</p>"
         }
       },
       "documentation":"<p>Contains details about a specific vulnerability Amazon Inspector can detect.</p>"
@@ -8598,14 +10505,34 @@
         "version"
       ],
       "members":{
-        "arch":{
-          "shape":"PackageArchitecture",
-          "documentation":"<p>The architecture of the vulnerable package.</p>"
+        "name":{
+          "shape":"PackageName",
+          "documentation":"<p>The name of the vulnerable package.</p>"
+        },
+        "version":{
+          "shape":"PackageVersion",
+          "documentation":"<p>The version of the vulnerable package.</p>"
+        },
+        "sourceLayerHash":{
+          "shape":"SourceLayerHash",
+          "documentation":"<p>The source layer hash of the vulnerable package.</p>"
         },
         "epoch":{
           "shape":"PackageEpoch",
           "documentation":"<p>The epoch of the vulnerable package.</p>"
         },
+        "release":{
+          "shape":"PackageRelease",
+          "documentation":"<p>The release of the vulnerable package.</p>"
+        },
+        "arch":{
+          "shape":"PackageArchitecture",
+          "documentation":"<p>The architecture of the vulnerable package.</p>"
+        },
+        "packageManager":{
+          "shape":"PackageManager",
+          "documentation":"<p>The package manager of the vulnerable package.</p>"
+        },
         "filePath":{
           "shape":"FilePath",
           "documentation":"<p>The file path of the vulnerable package.</p>"
@@ -8614,18 +10541,6 @@
           "shape":"PackageVersion",
           "documentation":"<p>The version of the package that contains the vulnerability fix.</p>"
         },
-        "name":{
-          "shape":"PackageName",
-          "documentation":"<p>The name of the vulnerable package.</p>"
-        },
-        "packageManager":{
-          "shape":"PackageManager",
-          "documentation":"<p>The package manager of the vulnerable package.</p>"
-        },
-        "release":{
-          "shape":"PackageRelease",
-          "documentation":"<p>The release of the vulnerable package.</p>"
-        },
         "remediation":{
           "shape":"VulnerablePackageRemediation",
           "documentation":"<p>The code to run in your environment to update packages with a fix available.</p>"
@@ -8633,14 +10548,6 @@
         "sourceLambdaLayerArn":{
           "shape":"LambdaLayerArn",
           "documentation":"<p>The Amazon Resource Number (ARN) of the Amazon Web Services Lambda function affected by a finding.</p>"
-        },
-        "sourceLayerHash":{
-          "shape":"SourceLayerHash",
-          "documentation":"<p>The source layer hash of the vulnerable package.</p>"
-        },
-        "version":{
-          "shape":"PackageVersion",
-          "documentation":"<p>The version of the vulnerable package.</p>"
         }
       },
       "documentation":"<p>Information on the vulnerable package identified by a finding.</p>"
@@ -8657,17 +10564,17 @@
     "WeeklySchedule":{
       "type":"structure",
       "required":[
-        "days",
-        "startTime"
+        "startTime",
+        "days"
       ],
       "members":{
-        "days":{
-          "shape":"DaysList",
-          "documentation":"<p>The weekly schedule's days.</p>"
-        },
         "startTime":{
           "shape":"Time",
           "documentation":"<p>The weekly schedule's start time.</p>"
+        },
+        "days":{
+          "shape":"DaysList",
+          "documentation":"<p>The weekly schedule's days.</p>"
         }
       },
       "documentation":"<p>A weekly schedule.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/internetmonitor/2021-06-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/paginators-1.json 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,12 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "InvoiceUnits"
+    },
+    "ListInvoiceSummaries": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "InvoiceSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/service-2.json 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/invoicing/2024-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/invoicing/2024-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,13 +24,14 @@
       "input":{"shape":"BatchGetInvoiceProfileRequest"},
       "output":{"shape":"BatchGetInvoiceProfileResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>This gets the invoice profile associated with a set of accounts. The accounts must be linked accounts under the requester management account organization.</p>"
+      "documentation":"<p>This gets the invoice profile associated with a set of accounts. The accounts must be linked accounts under the requester management account organization.</p>",
+      "readonly":true
     },
     "CreateInvoiceUnit":{
       "name":"CreateInvoiceUnit",
@@ -41,10 +42,10 @@
       "input":{"shape":"CreateInvoiceUnitRequest"},
       "output":{"shape":"CreateInvoiceUnitResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>This creates a new invoice unit with the provided definition.</p>"
     },
@@ -57,14 +58,32 @@
       "input":{"shape":"DeleteInvoiceUnitRequest"},
       "output":{"shape":"DeleteInvoiceUnitResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>This deletes an invoice unit with the provided invoice unit ARN. </p>"
     },
+    "GetInvoicePDF":{
+      "name":"GetInvoicePDF",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetInvoicePDFRequest"},
+      "output":{"shape":"GetInvoicePDFResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Returns a URL to download the invoice document and supplemental documents associated with an invoice. The URLs are pre-signed and have expiration time. For special cases like Brazil, where Amazon Web Services generated invoice identifiers and government provided identifiers do not match, use the Amazon Web Services generated invoice identifier when making API requests. To grant IAM permission to use this operation, the caller needs the <code>invoicing:GetInvoicePDF</code> policy action.</p>",
+      "readonly":true
+    },
     "GetInvoiceUnit":{
       "name":"GetInvoiceUnit",
       "http":{
@@ -74,13 +93,31 @@
       "input":{"shape":"GetInvoiceUnitRequest"},
       "output":{"shape":"GetInvoiceUnitResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>This retrieves the invoice unit definition.</p>",
+      "readonly":true
+    },
+    "ListInvoiceSummaries":{
+      "name":"ListInvoiceSummaries",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListInvoiceSummariesRequest"},
+      "output":{"shape":"ListInvoiceSummariesResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>This retrieves the invoice unit definition.</p>"
+      "documentation":"<p>Retrieves your invoice details programmatically, without line item details.</p>"
     },
     "ListInvoiceUnits":{
       "name":"ListInvoiceUnits",
@@ -91,12 +128,13 @@
       "input":{"shape":"ListInvoiceUnitsRequest"},
       "output":{"shape":"ListInvoiceUnitsResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>This fetches a list of all invoice unit definitions for a given account, as of the provided <code>AsOf</code> date.</p>"
+      "documentation":"<p>This fetches a list of all invoice unit definitions for a given account, as of the provided <code>AsOf</code> date.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -107,13 +145,14 @@
       "input":{"shape":"ListTagsForResourceRequest"},
       "output":{"shape":"ListTagsForResourceResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists the tags for a resource. </p>"
+      "documentation":"<p>Lists the tags for a resource. </p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -124,12 +163,12 @@
       "input":{"shape":"TagResourceRequest"},
       "output":{"shape":"TagResourceResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Adds a tag to a resource. </p>"
     },
@@ -142,11 +181,11 @@
       "input":{"shape":"UntagResourceRequest"},
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p> Removes a tag from a resource. </p>"
     },
@@ -159,11 +198,11 @@
       "input":{"shape":"UpdateInvoiceUnitRequest"},
       "output":{"shape":"UpdateInvoiceUnitResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>You can update the invoice unit configuration at any time, and Amazon Web Services will use the latest configuration at the end of the month.</p>"
     }
@@ -191,11 +230,39 @@
       "type":"string",
       "pattern":"\\d{12}"
     },
+    "AmountBreakdown":{
+      "type":"structure",
+      "members":{
+        "SubTotalAmount":{
+          "shape":"BasicString",
+          "documentation":"<p> The total of a set of the breakdown. </p>"
+        },
+        "Discounts":{
+          "shape":"DiscountsBreakdown",
+          "documentation":"<p> The discounted amount. </p>"
+        },
+        "Taxes":{
+          "shape":"TaxesBreakdown",
+          "documentation":"<p> The tax amount. </p>"
+        },
+        "Fees":{
+          "shape":"FeesBreakdown",
+          "documentation":"<p> The fee amount. </p>"
+        }
+      },
+      "documentation":"<p>Details about how the total amount was calculated and categorized. </p>"
+    },
     "AsOfTimestamp":{"type":"timestamp"},
     "BasicString":{
       "type":"string",
       "max":1024,
       "min":0,
+      "pattern":"[\\s\\S]*"
+    },
+    "BasicStringWithoutSpace":{
+      "type":"string",
+      "max":1024,
+      "min":0,
       "pattern":"\\S+"
     },
     "BatchGetInvoiceProfileRequest":{
@@ -217,6 +284,24 @@
         }
       }
     },
+    "BillingPeriod":{
+      "type":"structure",
+      "required":[
+        "Month",
+        "Year"
+      ],
+      "members":{
+        "Month":{
+          "shape":"Month",
+          "documentation":"<p> The billing period month. </p>"
+        },
+        "Year":{
+          "shape":"Year",
+          "documentation":"<p> The billing period year. </p>"
+        }
+      },
+      "documentation":"<p> The billing period for which you want to retrieve invoice-related documents. </p>"
+    },
     "CreateInvoiceUnitRequest":{
       "type":"structure",
       "required":[
@@ -260,6 +345,47 @@
         }
       }
     },
+    "CurrencyCode":{
+      "type":"string",
+      "max":3,
+      "min":3
+    },
+    "CurrencyExchangeDetails":{
+      "type":"structure",
+      "members":{
+        "SourceCurrencyCode":{
+          "shape":"BasicString",
+          "documentation":"<p>The exchange source currency. </p>"
+        },
+        "TargetCurrencyCode":{
+          "shape":"BasicString",
+          "documentation":"<p>The exchange target currency. </p>"
+        },
+        "Rate":{
+          "shape":"BasicString",
+          "documentation":"<p>The currency exchange rate. </p>"
+        }
+      },
+      "documentation":"<p>The details of currency exchange. </p>"
+    },
+    "DateInterval":{
+      "type":"structure",
+      "required":[
+        "StartDate",
+        "EndDate"
+      ],
+      "members":{
+        "StartDate":{
+          "shape":"Timestamp",
+          "documentation":"<p> The beginning of the time period that you want invoice-related documents for. The start date is inclusive. For example, if <code>start</code> is <code>2019-01-01</code>, AWS retrieves invoices starting at <code>2019-01-01</code> up to the end date. </p>"
+        },
+        "EndDate":{
+          "shape":"Timestamp",
+          "documentation":"<p> The end of the time period that you want invoice-related documents for. The end date is exclusive. For example, if <code>end</code> is <code>2019-01-10</code>, Amazon Web Services retrieves invoice-related documents from the start date up to, but not including, <code>2018-01-10</code>. </p>"
+        }
+      },
+      "documentation":"<p> The time period that you want invoice-related documents for. </p>"
+    },
     "DeleteInvoiceUnitRequest":{
       "type":"structure",
       "required":["InvoiceUnitArn"],
@@ -285,6 +411,88 @@
       "min":0,
       "pattern":"[\\S\\s]*"
     },
+    "DiscountsBreakdown":{
+      "type":"structure",
+      "members":{
+        "Breakdown":{
+          "shape":"DiscountsBreakdownAmountList",
+          "documentation":"<p>The list of discounts information. </p>"
+        },
+        "TotalAmount":{
+          "shape":"BasicString",
+          "documentation":"<p> The discount's total amount. </p>"
+        }
+      },
+      "documentation":"<p>The discounts details. </p>"
+    },
+    "DiscountsBreakdownAmount":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"BasicString",
+          "documentation":"<p> The list of discounts information. </p>"
+        },
+        "Amount":{
+          "shape":"BasicString",
+          "documentation":"<p>The discounted amount. </p>"
+        },
+        "Rate":{
+          "shape":"BasicString",
+          "documentation":"<p> The details for the discount rate.. </p>"
+        }
+      },
+      "documentation":"<p> The discounted amount. </p>"
+    },
+    "DiscountsBreakdownAmountList":{
+      "type":"list",
+      "member":{"shape":"DiscountsBreakdownAmount"}
+    },
+    "Entity":{
+      "type":"structure",
+      "members":{
+        "InvoicingEntity":{
+          "shape":"BasicString",
+          "documentation":"<p>The name of the entity that issues the Amazon Web Services invoice.</p>"
+        }
+      },
+      "documentation":"<p>The organization name providing Amazon Web Services services.</p>"
+    },
+    "FeesBreakdown":{
+      "type":"structure",
+      "members":{
+        "Breakdown":{
+          "shape":"FeesBreakdownAmountList",
+          "documentation":"<p>The list of fees information. </p>"
+        },
+        "TotalAmount":{
+          "shape":"BasicString",
+          "documentation":"<p> The total amount of fees. </p>"
+        }
+      },
+      "documentation":"<p> The details of fees. </p>"
+    },
+    "FeesBreakdownAmount":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"BasicString",
+          "documentation":"<p> The list of fees information. </p>"
+        },
+        "Amount":{
+          "shape":"BasicString",
+          "documentation":"<p> The fee amount. </p>"
+        },
+        "Rate":{
+          "shape":"BasicString",
+          "documentation":"<p> Details about the rate amount. </p>"
+        }
+      },
+      "documentation":"<p> The fee amount. </p>"
+    },
+    "FeesBreakdownAmountList":{
+      "type":"list",
+      "member":{"shape":"FeesBreakdownAmount"}
+    },
     "Filters":{
       "type":"structure",
       "members":{
@@ -303,6 +511,25 @@
       },
       "documentation":"<p>An optional input to the list API. If multiple filters are specified, the returned list will be a configuration that match all of the provided filters. Supported filter types are <code>InvoiceReceivers</code>, <code>Names</code>, and <code>Accounts</code>. </p>"
     },
+    "GetInvoicePDFRequest":{
+      "type":"structure",
+      "required":["InvoiceId"],
+      "members":{
+        "InvoiceId":{
+          "shape":"StringWithoutNewLine",
+          "documentation":"<p> Your unique invoice ID. </p>"
+        }
+      }
+    },
+    "GetInvoicePDFResponse":{
+      "type":"structure",
+      "members":{
+        "InvoicePDF":{
+          "shape":"InvoicePDF",
+          "documentation":"<p> The invoice document and supplemental documents associated with the invoice. </p>"
+        }
+      }
+    },
     "GetInvoiceUnitRequest":{
       "type":"structure",
       "required":["InvoiceUnitArn"],
@@ -365,6 +592,54 @@
       "exception":true,
       "fault":true
     },
+    "InvoiceCurrencyAmount":{
+      "type":"structure",
+      "members":{
+        "TotalAmount":{
+          "shape":"BasicString",
+          "documentation":"<p> The invoice currency amount. </p>"
+        },
+        "TotalAmountBeforeTax":{
+          "shape":"BasicString",
+          "documentation":"<p> Details about the invoice total amount before tax. </p>"
+        },
+        "CurrencyCode":{
+          "shape":"CurrencyCode",
+          "documentation":"<p>The currency dominion of the invoice document.</p>"
+        },
+        "AmountBreakdown":{
+          "shape":"AmountBreakdown",
+          "documentation":"<p> Details about the invoice currency amount. </p>"
+        },
+        "CurrencyExchangeDetails":{
+          "shape":"CurrencyExchangeDetails",
+          "documentation":"<p> The details of currency exchange. </p>"
+        }
+      },
+      "documentation":"<p> The amount charged after taxes, in the preferred currency. </p>"
+    },
+    "InvoicePDF":{
+      "type":"structure",
+      "members":{
+        "InvoiceId":{
+          "shape":"StringWithoutNewLine",
+          "documentation":"<p> Your unique invoice ID. </p>"
+        },
+        "DocumentUrl":{
+          "shape":"StringWithoutNewLine",
+          "documentation":"<p>The pre-signed URL to download the invoice document. </p>"
+        },
+        "DocumentUrlExpirationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The pre-signed URL expiration date of the invoice document.</p>"
+        },
+        "SupplementalDocuments":{
+          "shape":"SupplementalDocuments",
+          "documentation":"<p>List of supplemental documents associated with the invoice.</p>"
+        }
+      },
+      "documentation":"<p> Invoice document data. </p>"
+    },
     "InvoiceProfile":{
       "type":"structure",
       "members":{
@@ -373,7 +648,7 @@
           "documentation":"<p> The account ID the invoice profile is generated for. </p>"
         },
         "ReceiverName":{
-          "shape":"BasicString",
+          "shape":"BasicStringWithoutSpace",
           "documentation":"<p> The name of the person receiving the invoice profile. </p>"
         },
         "ReceiverAddress":{
@@ -381,20 +656,127 @@
           "documentation":"<p>The address of the receiver that will be printed on the invoice. </p>"
         },
         "ReceiverEmail":{
-          "shape":"SensitiveBasicString",
+          "shape":"SensitiveBasicStringWithoutSpace",
           "documentation":"<p>The email address for the invoice profile receiver. </p>"
         },
         "Issuer":{
-          "shape":"BasicString",
+          "shape":"BasicStringWithoutSpace",
           "documentation":"<p> This specifies the issuing entity of the invoice. </p>"
         },
         "TaxRegistrationNumber":{
-          "shape":"SensitiveBasicString",
+          "shape":"SensitiveBasicStringWithoutSpace",
           "documentation":"<p> Your Tax Registration Number (TRN) information. </p>"
         }
       },
       "documentation":"<p> Contains high-level information about the invoice receiver. </p>"
     },
+    "InvoiceSummaries":{
+      "type":"list",
+      "member":{"shape":"InvoiceSummary"}
+    },
+    "InvoiceSummariesFilter":{
+      "type":"structure",
+      "members":{
+        "TimeInterval":{
+          "shape":"DateInterval",
+          "documentation":"<p>The date range for invoice summary retrieval. </p>"
+        },
+        "BillingPeriod":{
+          "shape":"BillingPeriod",
+          "documentation":"<p>The billing period associated with the invoice documents. </p>"
+        },
+        "InvoicingEntity":{
+          "shape":"BasicString",
+          "documentation":"<p>The name of the entity that issues the Amazon Web Services invoice.</p>"
+        }
+      },
+      "documentation":"<p> Filters for your invoice summaries. </p>"
+    },
+    "InvoiceSummariesMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "InvoiceSummariesSelector":{
+      "type":"structure",
+      "required":[
+        "ResourceType",
+        "Value"
+      ],
+      "members":{
+        "ResourceType":{
+          "shape":"ListInvoiceSummariesResourceType",
+          "documentation":"<p>The query identifier type (<code>INVOICE_ID</code> or <code>ACCOUNT_ID</code>).</p>"
+        },
+        "Value":{
+          "shape":"StringWithoutNewLine",
+          "documentation":"<p>The value of the query identifier.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the invoice summary.</p>"
+    },
+    "InvoiceSummary":{
+      "type":"structure",
+      "members":{
+        "AccountId":{
+          "shape":"AccountIdString",
+          "documentation":"<p> The Amazon Web Services account ID. </p>"
+        },
+        "InvoiceId":{
+          "shape":"BasicString",
+          "documentation":"<p> The invoice ID. </p>"
+        },
+        "IssuedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p> The issued date of the invoice. </p>"
+        },
+        "DueDate":{
+          "shape":"Timestamp",
+          "documentation":"<p> The invoice due date. </p>"
+        },
+        "Entity":{
+          "shape":"Entity",
+          "documentation":"<p>The organization name providing Amazon Web Services services.</p>"
+        },
+        "BillingPeriod":{
+          "shape":"BillingPeriod",
+          "documentation":"<p> The billing period of the invoice-related document. </p>"
+        },
+        "InvoiceType":{
+          "shape":"InvoiceType",
+          "documentation":"<p> The type of invoice. </p>"
+        },
+        "OriginalInvoiceId":{
+          "shape":"BasicString",
+          "documentation":"<p>The initial or original invoice ID. </p>"
+        },
+        "PurchaseOrderNumber":{
+          "shape":"BasicString",
+          "documentation":"<p> The purchase order number associated to the invoice.</p>"
+        },
+        "BaseCurrencyAmount":{
+          "shape":"InvoiceCurrencyAmount",
+          "documentation":"<p> The summary with the product and service currency. </p>"
+        },
+        "TaxCurrencyAmount":{
+          "shape":"InvoiceCurrencyAmount",
+          "documentation":"<p> The summary with the tax currency. </p>"
+        },
+        "PaymentCurrencyAmount":{
+          "shape":"InvoiceCurrencyAmount",
+          "documentation":"<p> The summary with the customer configured currency. </p>"
+        }
+      },
+      "documentation":"<p> The invoice that the API retrieved. </p>"
+    },
+    "InvoiceType":{
+      "type":"string",
+      "enum":[
+        "INVOICE",
+        "CREDIT_MEMO"
+      ]
+    },
     "InvoiceUnit":{
       "type":"structure",
       "members":{
@@ -461,6 +843,49 @@
       "member":{"shape":"InvoiceUnit"}
     },
     "LastModifiedTimestamp":{"type":"timestamp"},
+    "ListInvoiceSummariesRequest":{
+      "type":"structure",
+      "required":["Selector"],
+      "members":{
+        "Selector":{
+          "shape":"InvoiceSummariesSelector",
+          "documentation":"<p>The option to retrieve details for a specific invoice by providing its unique ID. Alternatively, access information for all invoices linked to the account by providing an account ID.</p>"
+        },
+        "Filter":{
+          "shape":"InvoiceSummariesFilter",
+          "documentation":"<p>Filters you can use to customize your invoice summary.</p>"
+        },
+        "NextToken":{
+          "shape":"NextTokenString",
+          "documentation":"<p>The token to retrieve the next set of results. Amazon Web Services provides the token when the response from a previous call has more results than the maximum page size.</p>"
+        },
+        "MaxResults":{
+          "shape":"InvoiceSummariesMaxResults",
+          "documentation":"<p>The maximum number of invoice summaries a paginated response can contain.</p>"
+        }
+      }
+    },
+    "ListInvoiceSummariesResourceType":{
+      "type":"string",
+      "enum":[
+        "ACCOUNT_ID",
+        "INVOICE_ID"
+      ]
+    },
+    "ListInvoiceSummariesResponse":{
+      "type":"structure",
+      "required":["InvoiceSummaries"],
+      "members":{
+        "InvoiceSummaries":{
+          "shape":"InvoiceSummaries",
+          "documentation":"<p>List of key (summary level) invoice details without line item details.</p>"
+        },
+        "NextToken":{
+          "shape":"NextTokenString",
+          "documentation":"<p>The token to retrieve the next set of results. Amazon Web Services provides the token when the response from a previous call has more results than the maximum page size.</p>"
+        }
+      }
+    },
     "ListInvoiceUnitsRequest":{
       "type":"structure",
       "members":{
@@ -520,9 +945,14 @@
       "max":500,
       "min":1
     },
+    "Month":{
+      "type":"integer",
+      "box":true,
+      "max":12,
+      "min":1
+    },
     "NextTokenString":{
       "type":"string",
-      "max":2048,
       "min":1,
       "pattern":"[\\S\\s]*"
     },
@@ -625,7 +1055,7 @@
       "max":256,
       "min":0
     },
-    "SensitiveBasicString":{
+    "SensitiveBasicStringWithoutSpace":{
       "type":"string",
       "max":1024,
       "min":0,
@@ -641,6 +1071,30 @@
       "documentation":"<p>The request was rejected because it attempted to create resources beyond the current Amazon Web Services account limits. The error message describes the limit exceeded. </p>",
       "exception":true
     },
+    "StringWithoutNewLine":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":".*"
+    },
+    "SupplementalDocument":{
+      "type":"structure",
+      "members":{
+        "DocumentUrl":{
+          "shape":"StringWithoutNewLine",
+          "documentation":"<p>The pre-signed URL to download invoice supplemental document.</p>"
+        },
+        "DocumentUrlExpirationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The pre-signed URL expiration date of invoice supplemental document.</p>"
+        }
+      },
+      "documentation":"<p>Supplemental document associated with the invoice.</p>"
+    },
+    "SupplementalDocuments":{
+      "type":"list",
+      "member":{"shape":"SupplementalDocument"}
+    },
     "TagResourceRequest":{
       "type":"structure",
       "required":[
@@ -660,16 +1114,51 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagrisArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:[-a-zA-Z0-9/:_]+"
+      "pattern":"arn:aws[-a-z0-9]*:(invoicing)::[0-9]{12}:[-a-zA-Z0-9/:_]+"
     },
     "TaxInheritanceDisabledFlag":{"type":"boolean"},
+    "TaxesBreakdown":{
+      "type":"structure",
+      "members":{
+        "Breakdown":{
+          "shape":"TaxesBreakdownAmountList",
+          "documentation":"<p> A list of tax information. </p>"
+        },
+        "TotalAmount":{
+          "shape":"BasicString",
+          "documentation":"<p> The total amount for your taxes. </p>"
+        }
+      },
+      "documentation":"<p> The details of the taxes. </p>"
+    },
+    "TaxesBreakdownAmount":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"BasicString",
+          "documentation":"<p> The details of the taxes. </p>"
+        },
+        "Amount":{
+          "shape":"BasicString",
+          "documentation":"<p> The tax amount. </p>"
+        },
+        "Rate":{
+          "shape":"BasicString",
+          "documentation":"<p> The details of the tax rate. </p>"
+        }
+      },
+      "documentation":"<p> The tax amount. </p>"
+    },
+    "TaxesBreakdownAmountList":{
+      "type":"list",
+      "member":{"shape":"TaxesBreakdownAmount"}
+    },
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -678,6 +1167,7 @@
       "documentation":"<p>The request was denied due to request throttling.</p>",
       "exception":true
     },
+    "Timestamp":{"type":"timestamp"},
     "UntagResourceRequest":{
       "type":"structure",
       "required":[
@@ -697,8 +1187,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateInvoiceUnitRequest":{
       "type":"structure",
@@ -792,6 +1281,12 @@
         "unknownOperation",
         "other"
       ]
+    },
+    "Year":{
+      "type":"integer",
+      "box":true,
+      "max":2050,
+      "min":2005
     }
   },
   "documentation":"<p> <b>Amazon Web Services Invoice Configuration</b> </p> <p>You can use Amazon Web Services Invoice Configuration APIs to programmatically create, update, delete, get, and list invoice units. You can also programmatically fetch the information of the invoice receiver. For example, business legal name, address, and invoicing contacts. </p> <p>You can use Amazon Web Services Invoice Configuration to receive separate Amazon Web Services invoices based your organizational needs. By using Amazon Web Services Invoice Configuration, you can configure invoice units that are groups of Amazon Web Services accounts that represent your business entities, and receive separate invoices for each business entity. You can also assign a unique member or payer account as the invoice receiver for each invoice unit. As you create new accounts within your Organizations using Amazon Web Services Invoice Configuration APIs, you can automate the creation of new invoice units and subsequently automate the addition of new accounts to your invoice units.</p> <p>Service endpoint</p> <p>You can use the following endpoints for Amazon Web Services Invoice Configuration:</p> <ul> <li> <p> <code>https://invoicing.us-east-1.api.aws</code> </p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot/2015-05-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iot/2015-05-28/service-2.json 2.31.35-1/awscli/botocore/data/iot/2015-05-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/iot/2015-05-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot/2015-05-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -869,7 +869,8 @@
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceAlreadyExistsException"},
         {"shape":"ServiceUnavailableException"},
-        {"shape":"ConflictingResourceUpdateException"}
+        {"shape":"ConflictingResourceUpdateException"},
+        {"shape":"UnauthorizedException"}
       ],
       "documentation":"<p>Creates a rule. Creating rules is an administrator-level action. Any user who has permission to create rules will be able to access data processed by the rule.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">CreateTopicRule</a> action.</p>"
     },
@@ -886,7 +887,8 @@
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceAlreadyExistsException"},
         {"shape":"ServiceUnavailableException"},
-        {"shape":"ConflictingResourceUpdateException"}
+        {"shape":"ConflictingResourceUpdateException"},
+        {"shape":"UnauthorizedException"}
       ],
       "documentation":"<p>Creates a topic rule destination. The destination must be confirmed prior to use.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">CreateTopicRuleDestination</a> action.</p>"
     },
@@ -1771,6 +1773,23 @@
       ],
       "documentation":"<p>Gets summary information about a domain configuration.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">DescribeDomainConfiguration</a> action.</p>"
     },
+    "DescribeEncryptionConfiguration":{
+      "name":"DescribeEncryptionConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/encryption-configuration"
+      },
+      "input":{"shape":"DescribeEncryptionConfigurationRequest"},
+      "output":{"shape":"DescribeEncryptionConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Retrieves the encryption configuration for resources and data of your Amazon Web Services account in Amazon Web Services IoT Core. For more information, see <a href=\"https://docs.aws.amazon.com/iot/latest/developerguide/key-management.html\">Key management in IoT</a> from the <i>Amazon Web Services IoT Core Developer Guide</i>.</p>"
+    },
     "DescribeEndpoint":{
       "name":"DescribeEndpoint",
       "http":{
@@ -3622,7 +3641,8 @@
       "errors":[
         {"shape":"InternalException"},
         {"shape":"InvalidRequestException"},
-        {"shape":"ServiceUnavailableException"}
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"UnauthorizedException"}
       ],
       "documentation":"<p>Lists the rules for the specific topic.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">ListTopicRules</a> action.</p>"
     },
@@ -4077,7 +4097,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Transfers the specified certificate to the specified Amazon Web Services account.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">TransferCertificate</a> action.</p> <p>You can cancel the transfer until it is acknowledged by the recipient.</p> <p>No notification is sent to the transfer destination's account. It is up to the caller to notify the transfer target.</p> <p>The certificate being transferred must not be in the ACTIVE state. You can use the <a>UpdateCertificate</a> action to deactivate it.</p> <p>The certificate must not have any policies attached to it. You can use the <a>DetachPolicy</a> action to detach them.</p>"
+      "documentation":"<p>Transfers the specified certificate to the specified Amazon Web Services account.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">TransferCertificate</a> action.</p> <p>You can cancel the transfer until it is acknowledged by the recipient.</p> <p>No notification is sent to the transfer destination's account. It's up to the caller to notify the transfer target.</p> <p>The certificate being transferred must not be in the <code>ACTIVE</code> state. You can use the <a>UpdateCertificate</a> action to deactivate it.</p> <p>The certificate must not have any policies attached to it. You can use the <a>DetachPolicy</a> action to detach them.</p> <p> <b>Customer managed key behavior:</b> When you use a customer managed key to secure your data and then transfer the key to a customer in a different account using the <a>TransferCertificate</a> operation, the certificates will no longer be protected by their customer managed key configuration. During the transfer process, certificates are encrypted using IoT owned keys.</p> <p>While a certificate is in the <b>PENDING_TRANSFER</b> state, it's always protected by IoT owned keys, regardless of the customer managed key configuration of either the source or destination account. </p> <p>Once the transfer is completed through <a>AcceptCertificateTransfer</a>, <a>RejectCertificateTransfer</a>, or <a>CancelCertificateTransfer</a>, the certificate will be protected by the customer managed key configuration of the account that owns the certificate after the transfer operation:</p> <ul> <li> <p>If the transfer is accepted: The certificate is protected by the destination account's customer managed key configuration.</p> </li> <li> <p>If the transfer is rejected or cancelled: The certificate is protected by the source account's customer managed key configuration.</p> </li> </ul>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -4301,6 +4321,23 @@
       ],
       "documentation":"<p>Updates a dynamic thing group.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions\">UpdateDynamicThingGroup</a> action.</p>"
     },
+    "UpdateEncryptionConfiguration":{
+      "name":"UpdateEncryptionConfiguration",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/encryption-configuration"
+      },
+      "input":{"shape":"UpdateEncryptionConfigurationRequest"},
+      "output":{"shape":"UpdateEncryptionConfigurationResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Updates the encryption configuration. By default, all Amazon Web Services IoT Core data at rest is encrypted using Amazon Web Services owned keys. Amazon Web Services IoT Core also supports symmetric customer managed keys from Amazon Web Services Key Management Service (KMS). With customer managed keys, you create, own, and manage the KMS keys in your Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot/latest/developerguide/data-encryption.html\">Data encryption</a> in the <i>Amazon Web Services IoT Core Developer Guide</i>.</p>"
+    },
     "UpdateEventConfigurations":{
       "name":"UpdateEventConfigurations",
       "http":{
@@ -4895,8 +4932,7 @@
     },
     "AddThingToBillingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddThingToThingGroupRequest":{
       "type":"structure",
@@ -4925,8 +4961,7 @@
     },
     "AddThingToThingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddThingsToThingGroupParams":{
       "type":"structure",
@@ -5286,8 +5321,7 @@
     },
     "AttachSecurityProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachThingPrincipalRequest":{
       "type":"structure",
@@ -5319,8 +5353,7 @@
     },
     "AttachThingPrincipalResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output from the AttachThingPrincipal operation.</p>"
     },
     "AttributeKey":{"type":"string"},
@@ -5364,6 +5397,10 @@
         "enabled":{
           "shape":"Enabled",
           "documentation":"<p>True if this audit check is enabled for this account.</p>"
+        },
+        "configuration":{
+          "shape":"CheckCustomConfiguration",
+          "documentation":"<p>A structure containing the configName and corresponding configValue for configuring audit checks.</p>"
         }
       },
       "documentation":"<p>Which audit checks are enabled and disabled for this account.</p>"
@@ -6370,8 +6407,7 @@
     },
     "CancelAuditMitigationActionsTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelAuditTaskRequest":{
       "type":"structure",
@@ -6387,8 +6423,7 @@
     },
     "CancelAuditTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelCertificateTransferRequest":{
       "type":"structure",
@@ -6417,8 +6452,7 @@
     },
     "CancelDetectMitigationActionsTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelJobExecutionRequest":{
       "type":"structure",
@@ -6741,6 +6775,11 @@
     },
     "ChannelName":{"type":"string"},
     "CheckCompliant":{"type":"boolean"},
+    "CheckCustomConfiguration":{
+      "type":"map",
+      "key":{"shape":"ConfigName"},
+      "value":{"shape":"ConfigValue"}
+    },
     "Cidr":{
       "type":"string",
       "max":43,
@@ -6753,13 +6792,11 @@
     },
     "ClearDefaultAuthorizerRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ClearDefaultAuthorizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ClientCertificateCallbackArn":{
       "type":"string",
@@ -7199,6 +7236,18 @@
         "HIGH"
       ]
     },
+    "ConfigName":{
+      "type":"string",
+      "enum":[
+        "CERT_AGE_THRESHOLD_IN_DAYS",
+        "CERT_EXPIRATION_THRESHOLD_IN_DAYS"
+      ]
+    },
+    "ConfigValue":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
     "Configuration":{
       "type":"structure",
       "members":{
@@ -7209,6 +7258,31 @@
       },
       "documentation":"<p>Configuration.</p>"
     },
+    "ConfigurationDetails":{
+      "type":"structure",
+      "members":{
+        "configurationStatus":{
+          "shape":"ConfigurationStatus",
+          "documentation":"<p>The health status of KMS key and KMS access role. If either KMS key or KMS access role is <code>UNHEALTHY</code>, the return value will be <code>UNHEALTHY</code>. To use a customer-managed KMS key, the value of <code>configurationStatus</code> must be <code>HEALTHY</code>. </p>"
+        },
+        "errorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>The error code that indicates either the KMS key or the KMS access role is <code>UNHEALTHY</code>. Valid values: <code>KMS_KEY_VALIDATION_ERROR</code> and <code>ROLE_VALIDATION_ERROR</code>. </p>"
+        },
+        "errorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The detailed error message that corresponds to the <code>errorCode</code>.</p>"
+        }
+      },
+      "documentation":"<p>The encryption configuration details that include the status information of the Amazon Web Services Key Management Service (KMS) key and the KMS access role.</p>"
+    },
+    "ConfigurationStatus":{
+      "type":"string",
+      "enum":[
+        "HEALTHY",
+        "UNHEALTHY"
+      ]
+    },
     "ConfirmTopicRuleDestinationRequest":{
       "type":"structure",
       "required":["confirmationToken"],
@@ -7223,8 +7297,7 @@
     },
     "ConfirmTopicRuleDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConfirmationToken":{
       "type":"string",
@@ -7321,8 +7394,7 @@
     },
     "CreateAuditSuppressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateAuthorizerRequest":{
       "type":"structure",
@@ -8976,8 +9048,7 @@
     },
     "DeleteAccountAuditConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAdditionalMetricsToRetain":{"type":"boolean"},
     "DeleteAlertTargets":{"type":"boolean"},
@@ -8994,8 +9065,7 @@
     },
     "DeleteAuditSuppressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAuthorizerRequest":{
       "type":"structure",
@@ -9011,8 +9081,7 @@
     },
     "DeleteAuthorizerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteBehaviors":{"type":"boolean"},
     "DeleteBillingGroupRequest":{
@@ -9035,8 +9104,7 @@
     },
     "DeleteBillingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCACertificateRequest":{
       "type":"structure",
@@ -9053,8 +9121,7 @@
     },
     "DeleteCACertificateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the DeleteCACertificate operation.</p>"
     },
     "DeleteCertificateProviderRequest":{
@@ -9071,8 +9138,7 @@
     },
     "DeleteCertificateProviderResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCertificateRequest":{
       "type":"structure",
@@ -9116,8 +9182,7 @@
     },
     "DeleteCommandExecutionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCommandRequest":{
       "type":"structure",
@@ -9167,8 +9232,7 @@
     },
     "DeleteCustomMetricResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDimensionRequest":{
       "type":"structure",
@@ -9184,8 +9248,7 @@
     },
     "DeleteDimensionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDomainConfigurationRequest":{
       "type":"structure",
@@ -9201,8 +9264,7 @@
     },
     "DeleteDomainConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDynamicThingGroupRequest":{
       "type":"structure",
@@ -9224,8 +9286,7 @@
     },
     "DeleteDynamicThingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFleetMetricRequest":{
       "type":"structure",
@@ -9336,8 +9397,7 @@
     },
     "DeleteMitigationActionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOTAUpdateRequest":{
       "type":"structure",
@@ -9365,8 +9425,7 @@
     },
     "DeleteOTAUpdateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePackageRequest":{
       "type":"structure",
@@ -9389,8 +9448,7 @@
     },
     "DeletePackageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePackageVersionRequest":{
       "type":"structure",
@@ -9422,8 +9480,7 @@
     },
     "DeletePackageVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePolicyRequest":{
       "type":"structure",
@@ -9474,8 +9531,7 @@
     },
     "DeleteProvisioningTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProvisioningTemplateVersionRequest":{
       "type":"structure",
@@ -9500,19 +9556,16 @@
     },
     "DeleteProvisioningTemplateVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRegistrationCodeRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input for the DeleteRegistrationCode operation.</p>"
     },
     "DeleteRegistrationCodeResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the DeleteRegistrationCode operation.</p>"
     },
     "DeleteRoleAliasRequest":{
@@ -9529,8 +9582,7 @@
     },
     "DeleteRoleAliasResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteScheduledAuditRequest":{
       "type":"structure",
@@ -9546,8 +9598,7 @@
     },
     "DeleteScheduledAuditResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteScheduledAudits":{"type":"boolean"},
     "DeleteSecurityProfileRequest":{
@@ -9570,8 +9621,7 @@
     },
     "DeleteSecurityProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStream":{"type":"boolean"},
     "DeleteStreamRequest":{
@@ -9588,8 +9638,7 @@
     },
     "DeleteStreamResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteThingGroupRequest":{
       "type":"structure",
@@ -9611,8 +9660,7 @@
     },
     "DeleteThingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteThingRequest":{
       "type":"structure",
@@ -9635,8 +9683,7 @@
     },
     "DeleteThingResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output of the DeleteThing operation.</p>"
     },
     "DeleteThingTypeRequest":{
@@ -9654,8 +9701,7 @@
     },
     "DeleteThingTypeResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the DeleteThingType operation.</p>"
     },
     "DeleteTopicRuleDestinationRequest":{
@@ -9672,8 +9718,7 @@
     },
     "DeleteTopicRuleDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTopicRuleRequest":{
       "type":"structure",
@@ -9743,16 +9788,14 @@
     },
     "DeprecateThingTypeResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output for the DeprecateThingType operation.</p>"
     },
     "DeprecationDate":{"type":"timestamp"},
     "DeprecationFlag":{"type":"boolean"},
     "DescribeAccountAuditConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountAuditConfigurationResponse":{
       "type":"structure",
@@ -10101,8 +10144,7 @@
     },
     "DescribeDefaultAuthorizerRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDefaultAuthorizerResponse":{
       "type":"structure",
@@ -10248,6 +10290,35 @@
         }
       }
     },
+    "DescribeEncryptionConfigurationRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "DescribeEncryptionConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of the Amazon Web Services Key Management Service (KMS) key.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role assumed by Amazon Web Services IoT Core to call KMS on behalf of the customer.</p>"
+        },
+        "kmsAccessRoleArn":{
+          "shape":"KmsAccessRoleArn",
+          "documentation":"<p>The ARN of the customer-managed KMS key.</p>"
+        },
+        "configurationDetails":{
+          "shape":"ConfigurationDetails",
+          "documentation":"<p>The encryption configuration details that include the status information of the KMS key and the KMS access role.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"DateType",
+          "documentation":"<p>The date when encryption configuration is last updated.</p>"
+        }
+      }
+    },
     "DescribeEndpointRequest":{
       "type":"structure",
       "members":{
@@ -10272,8 +10343,7 @@
     },
     "DescribeEventConfigurationsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEventConfigurationsResponse":{
       "type":"structure",
@@ -11154,8 +11224,7 @@
     },
     "DetachSecurityProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachThingPrincipalRequest":{
       "type":"structure",
@@ -11181,8 +11250,7 @@
     },
     "DetachThingPrincipalResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output from the DetachThingPrincipal operation.</p>"
     },
     "DetailsKey":{
@@ -11451,8 +11519,7 @@
     },
     "DisassociateSbomFromPackageVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisconnectReason":{"type":"string"},
     "DisconnectReasonValue":{
@@ -11752,6 +11819,13 @@
       "type":"boolean",
       "box":true
     },
+    "EncryptionType":{
+      "type":"string",
+      "enum":[
+        "CUSTOMER_MANAGED_KMS_KEY",
+        "AWS_OWNED_KMS_KEY"
+      ]
+    },
     "EndpointAddress":{"type":"string"},
     "EndpointType":{
       "type":"string",
@@ -12336,8 +12410,7 @@
     },
     "GetIndexingConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetIndexingConfigurationResponse":{
       "type":"structure",
@@ -12381,8 +12454,7 @@
     },
     "GetLoggingOptionsRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input for the GetLoggingOptions operation.</p>"
     },
     "GetLoggingOptionsResponse":{
@@ -12422,8 +12494,7 @@
     },
     "GetPackageConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetPackageConfigurationResponse":{
       "type":"structure",
@@ -12697,8 +12768,7 @@
     },
     "GetRegistrationCodeRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input to the GetRegistrationCode operation.</p>"
     },
     "GetRegistrationCodeResponse":{
@@ -12825,8 +12895,7 @@
     },
     "GetV2LoggingOptionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetV2LoggingOptionsResponse":{
       "type":"structure",
@@ -13826,6 +13895,14 @@
       },
       "documentation":"<p>Describes an action to write data to an Amazon Kinesis stream.</p>"
     },
+    "KmsAccessRoleArn":{
+      "type":"string",
+      "max":2048
+    },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":2048
+    },
     "LambdaAction":{
       "type":"structure",
       "required":["functionArn"],
@@ -17582,7 +17659,7 @@
     },
     "ParameterValue":{
       "type":"string",
-      "max":512,
+      "max":30720,
       "min":1,
       "pattern":"[^\\p{C}]+"
     },
@@ -17990,8 +18067,7 @@
     },
     "PutVerificationStateOnViolationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Qos":{
       "type":"integer",
@@ -18308,8 +18384,7 @@
     },
     "RemoveThingFromBillingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveThingFromThingGroupRequest":{
       "type":"structure",
@@ -18334,8 +18409,7 @@
     },
     "RemoveThingFromThingGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveThingType":{"type":"boolean"},
     "RemovedThings":{"type":"integer"},
@@ -19624,8 +19698,7 @@
     },
     "StopThingRegistrationTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Stream":{
       "type":"structure",
@@ -19834,8 +19907,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -20972,8 +21044,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccountAuditConfigurationRequest":{
       "type":"structure",
@@ -20994,8 +21065,7 @@
     },
     "UpdateAccountAuditConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAuditSuppressionRequest":{
       "type":"structure",
@@ -21022,8 +21092,7 @@
     },
     "UpdateAuditSuppressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAuthorizerRequest":{
       "type":"structure",
@@ -21458,6 +21527,28 @@
         }
       }
     },
+    "UpdateEncryptionConfigurationRequest":{
+      "type":"structure",
+      "required":["encryptionType"],
+      "members":{
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of the Amazon Web Services Key Management Service (KMS) key.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ARN of the customer-managed KMS key.</p>"
+        },
+        "kmsAccessRoleArn":{
+          "shape":"KmsAccessRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role assumed by Amazon Web Services IoT Core to call KMS on behalf of the customer.</p>"
+        }
+      }
+    },
+    "UpdateEncryptionConfigurationResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateEventConfigurationsRequest":{
       "type":"structure",
       "members":{
@@ -21469,8 +21560,7 @@
     },
     "UpdateEventConfigurationsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFleetMetricRequest":{
       "type":"structure",
@@ -21538,8 +21628,7 @@
     },
     "UpdateIndexingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateJobRequest":{
       "type":"structure",
@@ -21634,8 +21723,7 @@
     },
     "UpdatePackageConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePackageRequest":{
       "type":"structure",
@@ -21670,8 +21758,7 @@
     },
     "UpdatePackageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePackageVersionRequest":{
       "type":"structure",
@@ -21723,8 +21810,7 @@
     },
     "UpdatePackageVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateProvisioningTemplateRequest":{
       "type":"structure",
@@ -21764,8 +21850,7 @@
     },
     "UpdateProvisioningTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRoleAliasRequest":{
       "type":"structure",
@@ -22048,8 +22133,7 @@
     },
     "UpdateThingGroupsForThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateThingRequest":{
       "type":"structure",
@@ -22082,8 +22166,7 @@
     },
     "UpdateThingResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output from the UpdateThing operation.</p>"
     },
     "UpdateThingTypeRequest":{
@@ -22101,8 +22184,7 @@
     },
     "UpdateThingTypeResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTopicRuleDestinationRequest":{
       "type":"structure",
@@ -22123,8 +22205,7 @@
     },
     "UpdateTopicRuleDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Url":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-data/2015-05-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iot-data/2015-05-28/service-2.json 2.31.35-1/awscli/botocore/data/iot-data/2015-05-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/iot-data/2015-05-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-data/2015-05-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,22 @@
     "auth":["aws.auth#sigv4"]
   },
   "operations":{
+    "DeleteConnection":{
+      "name":"DeleteConnection",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/connections/{clientId}"
+      },
+      "input":{"shape":"DeleteConnectionRequest"},
+      "errors":[
+        {"shape":"ForbiddenException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Disconnects a connected MQTT client from Amazon Web Services IoT Core. When you disconnect a client, Amazon Web Services IoT Core closes the client's network connection and optionally cleans the session state.</p>"
+    },
     "DeleteThingShadow":{
       "name":"DeleteThingShadow",
       "http":{
@@ -50,7 +66,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"MethodNotAllowedException"}
       ],
-      "documentation":"<p>Gets the details of a single retained message for the specified topic.</p> <p>This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call <a href=\"https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_ListRetainedMessages.html\">ListRetainedMessages</a>.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions\">GetRetainedMessage</a> action.</p> <p>For more information about messaging costs, see <a href=\"http://aws.amazon.com/iot-core/pricing/#Messaging\">Amazon Web Services IoT Core pricing - Messaging</a>.</p>"
+      "documentation":"<p>Gets the details of a single retained message for the specified topic.</p> <p>This action returns the message payload of the retained message, which can incur messaging costs. To list only the topic names of the retained messages, call <a href=\"https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_ListRetainedMessages.html\">ListRetainedMessages</a>.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html\">GetRetainedMessage</a> action.</p> <p>For more information about messaging costs, see <a href=\"http://aws.amazon.com/iot-core/pricing/#Messaging\">Amazon Web Services IoT Core pricing - Messaging</a>.</p>"
     },
     "GetThingShadow":{
       "name":"GetThingShadow",
@@ -107,7 +123,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"MethodNotAllowedException"}
       ],
-      "documentation":"<p>Lists summary information about the retained messages stored for the account.</p> <p>This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs.</p> <p>To get the message payload of a retained message, call <a href=\"https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_GetRetainedMessage.html\">GetRetainedMessage</a> with the topic name of the retained message.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleethubfordevicemanagement.html#awsiotfleethubfordevicemanagement-actions-as-permissions\">ListRetainedMessages</a> action.</p> <p>For more information about messaging costs, see <a href=\"http://aws.amazon.com/iot-core/pricing/#Messaging\">Amazon Web Services IoT Core pricing - Messaging</a>.</p>"
+      "documentation":"<p>Lists summary information about the retained messages stored for the account.</p> <p>This action returns only the topic names of the retained messages. It doesn't return any message payloads. Although this action doesn't return a message payload, it can still incur messaging costs.</p> <p>To get the message payload of a retained message, call <a href=\"https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_GetRetainedMessage.html\">GetRetainedMessage</a> with the topic name of the retained message.</p> <p>Requires permission to access the <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html\">ListRetainedMessages</a> action.</p> <p>For more information about messaging costs, see <a href=\"http://aws.amazon.com/iot-core/pricing/#Messaging\">Amazon Web Services IoT Core pricing - Messaging</a>.</p>"
     },
     "Publish":{
       "name":"Publish",
@@ -148,6 +164,13 @@
     }
   },
   "shapes":{
+    "CleanSession":{"type":"boolean"},
+    "ClientId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"^[^$].*"
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -162,6 +185,30 @@
     },
     "ContentType":{"type":"string"},
     "CorrelationData":{"type":"string"},
+    "DeleteConnectionRequest":{
+      "type":"structure",
+      "required":["clientId"],
+      "members":{
+        "clientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The unique identifier of the MQTT client to disconnect. The client ID can't start with a dollar sign ($).</p>",
+          "location":"uri",
+          "locationName":"clientId"
+        },
+        "cleanSession":{
+          "shape":"CleanSession",
+          "documentation":"<p>Specifies whether to remove the client's session state when disconnecting. Set to <code>TRUE</code> to delete all session information, including subscriptions and queued messages. Set to <code>FALSE</code> to preserve the session state. By default, this is set to <code>FALSE</code> (preserves the session state).</p>",
+          "location":"querystring",
+          "locationName":"cleanSession"
+        },
+        "preventWillMessage":{
+          "shape":"PreventWillMessage",
+          "documentation":"<p>Controls if Amazon Web Services IoT Core publishes the client's Last Will and Testament (LWT) message upon disconnection. Set to <code>TRUE</code> to prevent publishing the LWT message. Set to <code>FALSE</code> to allow publishing. By default, this is set to <code>FALSE</code> (allows publishing the LWT message).</p>",
+          "location":"querystring",
+          "locationName":"preventWillMessage"
+        }
+      }
+    },
     "DeleteThingShadowRequest":{
       "type":"structure",
       "required":["thingName"],
@@ -193,6 +240,15 @@
       "documentation":"<p>The output from the DeleteThingShadow operation.</p>",
       "payload":"payload"
     },
+    "ForbiddenException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"errorMessage"}
+      },
+      "documentation":"<p>The caller isn't authorized to make the request.</p>",
+      "error":{"httpStatusCode":403},
+      "exception":true
+    },
     "GetRetainedMessageRequest":{
       "type":"structure",
       "required":["topic"],
@@ -396,6 +452,7 @@
       ]
     },
     "PayloadSize":{"type":"long"},
+    "PreventWillMessage":{"type":"boolean"},
     "PublishRequest":{
       "type":"structure",
       "required":["topic"],
diff -pruN 2.23.6-1/awscli/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-jobs-data/2017-09-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://api.iotmanagedintegrations-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://api.iotmanagedintegrations.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/paginators-1.json 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,106 @@
+{
+  "pagination": {
+    "ListCredentialLockers": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListDestinations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "DestinationList"
+    },
+    "ListEventLogConfigurations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "EventLogConfigurationList"
+    },
+    "ListManagedThingSchemas": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListManagedThings": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListNotificationConfigurations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "NotificationConfigurationList"
+    },
+    "ListOtaTaskConfigurations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListOtaTaskExecutions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ExecutionSummaries"
+    },
+    "ListOtaTasks": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Tasks"
+    },
+    "ListProvisioningProfiles": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListSchemaVersions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListAccountAssociations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListCloudConnectors": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListConnectorDestinations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ConnectorDestinationList"
+    },
+    "ListDeviceDiscoveries": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListDiscoveredDevices": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    },
+    "ListManagedThingAccountAssociations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Items"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/service-2.json 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iot-managed-integrations/2025-03-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,7386 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2025-03-03",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"api.iotmanagedintegrations",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"Managed integrations for AWS IoT Device Management",
+    "serviceId":"IoT Managed Integrations",
+    "signatureVersion":"v4",
+    "signingName":"iotmanagedintegrations",
+    "uid":"iot-managed-integrations-2025-03-03"
+  },
+  "operations":{
+    "CreateAccountAssociation":{
+      "name":"CreateAccountAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/account-associations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateAccountAssociationRequest"},
+      "output":{"shape":"CreateAccountAssociationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a new account association via the destination id.</p>"
+    },
+    "CreateCloudConnector":{
+      "name":"CreateCloudConnector",
+      "http":{
+        "method":"POST",
+        "requestUri":"/cloud-connectors",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateCloudConnectorRequest"},
+      "output":{"shape":"CreateCloudConnectorResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a C2C (cloud-to-cloud) connector.</p>"
+    },
+    "CreateConnectorDestination":{
+      "name":"CreateConnectorDestination",
+      "http":{
+        "method":"POST",
+        "requestUri":"/connector-destinations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateConnectorDestinationRequest"},
+      "output":{"shape":"CreateConnectorDestinationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Create a connector destination for connecting a cloud-to-cloud (C2C) connector to the customer's Amazon Web Services account.</p>"
+    },
+    "CreateCredentialLocker":{
+      "name":"CreateCredentialLocker",
+      "http":{
+        "method":"POST",
+        "requestUri":"/credential-lockers",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateCredentialLockerRequest"},
+      "output":{"shape":"CreateCredentialLockerResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Create a credential locker.</p> <note> <p>This operation will not trigger the creation of all the manufacturing resources.</p> </note>"
+    },
+    "CreateDestination":{
+      "name":"CreateDestination",
+      "http":{
+        "method":"POST",
+        "requestUri":"/destinations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateDestinationRequest"},
+      "output":{"shape":"CreateDestinationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Create a notification destination such as Kinesis Data Streams that receive events and notifications from Managed integrations. Managed integrations uses the destination to determine where to deliver notifications.</p>"
+    },
+    "CreateEventLogConfiguration":{
+      "name":"CreateEventLogConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/event-log-configurations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateEventLogConfigurationRequest"},
+      "output":{"shape":"CreateEventLogConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Set the event log configuration for the account, resource type, or specific resource.</p>"
+    },
+    "CreateManagedThing":{
+      "name":"CreateManagedThing",
+      "http":{
+        "method":"POST",
+        "requestUri":"/managed-things",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateManagedThingRequest"},
+      "output":{"shape":"CreateManagedThingResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a managed thing. A managed thing contains the device identifier, protocol supported, and capabilities of the device in a data model format defined by Managed integrations.</p>"
+    },
+    "CreateNotificationConfiguration":{
+      "name":"CreateNotificationConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/notification-configurations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateNotificationConfigurationRequest"},
+      "output":{"shape":"CreateNotificationConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a notification configuration. A configuration is a connection between an event type and a destination that you have already created. </p>"
+    },
+    "CreateOtaTask":{
+      "name":"CreateOtaTask",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ota-tasks",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateOtaTaskRequest"},
+      "output":{"shape":"CreateOtaTaskResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Create an over-the-air (OTA) task to target a device.</p>"
+    },
+    "CreateOtaTaskConfiguration":{
+      "name":"CreateOtaTaskConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ota-task-configurations",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateOtaTaskConfigurationRequest"},
+      "output":{"shape":"CreateOtaTaskConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Create a configuraiton for the over-the-air (OTA) task.</p>"
+    },
+    "CreateProvisioningProfile":{
+      "name":"CreateProvisioningProfile",
+      "http":{
+        "method":"POST",
+        "requestUri":"/provisioning-profiles",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateProvisioningProfileRequest"},
+      "output":{"shape":"CreateProvisioningProfileResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Create a provisioning profile for a device to execute the provisioning flows using a provisioning template. The provisioning template is a document that defines the set of resources and policies applied to a device during the provisioning process.</p>"
+    },
+    "DeleteAccountAssociation":{
+      "name":"DeleteAccountAssociation",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/account-associations/{AccountAssociationId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteAccountAssociationRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Remove a third-party account association for an end user.</p> <note> <p>You must first call the <code>DeregisterAccountAssociation</code> to remove the connection between the managed thing and the third-party account before calling the <code>DeleteAccountAssociation</code> API.</p> </note>",
+      "idempotent":true
+    },
+    "DeleteCloudConnector":{
+      "name":"DeleteCloudConnector",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/cloud-connectors/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCloudConnectorRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete a cloud connector.</p>",
+      "idempotent":true
+    },
+    "DeleteConnectorDestination":{
+      "name":"DeleteConnectorDestination",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/connector-destinations/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteConnectorDestinationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete a connector destination linked to a cloud-to-cloud (C2C) connector.</p> <note> <p>Deletion can't be done if the account association has used this connector destination.</p> </note>",
+      "idempotent":true
+    },
+    "DeleteCredentialLocker":{
+      "name":"DeleteCredentialLocker",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/credential-lockers/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCredentialLockerRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete a credential locker. </p> <note> <p>This operation can't be undone and any existing device won't be able to use IoT managed integrations.</p> </note>",
+      "idempotent":true
+    },
+    "DeleteDestination":{
+      "name":"DeleteDestination",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/destinations/{Name}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteDestinationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a notification destination specified by name. </p>",
+      "idempotent":true
+    },
+    "DeleteEventLogConfiguration":{
+      "name":"DeleteEventLogConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/event-log-configurations/{Id}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteEventLogConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete an event log configuration.</p>",
+      "idempotent":true
+    },
+    "DeleteManagedThing":{
+      "name":"DeleteManagedThing",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/managed-things/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteManagedThingRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete a managed thing. For direct-connected and hub-connected devices connecting with Managed integrations via a controller, all of the devices connected to it will have their status changed to <code>PENDING</code>. It is not possible to remove a cloud-to-cloud device.</p>",
+      "idempotent":true
+    },
+    "DeleteNotificationConfiguration":{
+      "name":"DeleteNotificationConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/notification-configurations/{EventType}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteNotificationConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a notification configuration. </p>",
+      "idempotent":true
+    },
+    "DeleteOtaTask":{
+      "name":"DeleteOtaTask",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/ota-tasks/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteOtaTaskRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"LimitExceededException"}
+      ],
+      "documentation":"<p>Delete the over-the-air (OTA) task.</p>",
+      "idempotent":true
+    },
+    "DeleteOtaTaskConfiguration":{
+      "name":"DeleteOtaTaskConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/ota-task-configurations/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteOtaTaskConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete the over-the-air (OTA) task configuration.</p>",
+      "idempotent":true
+    },
+    "DeleteProvisioningProfile":{
+      "name":"DeleteProvisioningProfile",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/provisioning-profiles/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteProvisioningProfileRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Delete a provisioning profile.</p>",
+      "idempotent":true
+    },
+    "DeregisterAccountAssociation":{
+      "name":"DeregisterAccountAssociation",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/managed-thing-associations/deregister",
+        "responseCode":200
+      },
+      "input":{"shape":"DeregisterAccountAssociationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deregister an account association from a managed thing.</p>",
+      "idempotent":true
+    },
+    "GetAccountAssociation":{
+      "name":"GetAccountAssociation",
+      "http":{
+        "method":"GET",
+        "requestUri":"/account-associations/{AccountAssociationId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetAccountAssociationRequest"},
+      "output":{"shape":"GetAccountAssociationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get an account association for an Amazon Web Services account linked to a customer-managed destination.</p>"
+    },
+    "GetCloudConnector":{
+      "name":"GetCloudConnector",
+      "http":{
+        "method":"GET",
+        "requestUri":"/cloud-connectors/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCloudConnectorRequest"},
+      "output":{"shape":"GetCloudConnectorResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get configuration details for a cloud connector.</p>"
+    },
+    "GetConnectorDestination":{
+      "name":"GetConnectorDestination",
+      "http":{
+        "method":"GET",
+        "requestUri":"/connector-destinations/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetConnectorDestinationRequest"},
+      "output":{"shape":"GetConnectorDestinationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get connector destination details linked to a cloud-to-cloud (C2C) connector.</p>"
+    },
+    "GetCredentialLocker":{
+      "name":"GetCredentialLocker",
+      "http":{
+        "method":"GET",
+        "requestUri":"/credential-lockers/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCredentialLockerRequest"},
+      "output":{"shape":"GetCredentialLockerResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get information on an existing credential locker</p>"
+    },
+    "GetCustomEndpoint":{
+      "name":"GetCustomEndpoint",
+      "http":{
+        "method":"GET",
+        "requestUri":"/custom-endpoint",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCustomEndpointRequest"},
+      "output":{"shape":"GetCustomEndpointResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the IoT managed integrations custom endpoint.</p>"
+    },
+    "GetDefaultEncryptionConfiguration":{
+      "name":"GetDefaultEncryptionConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/configuration/account/encryption",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDefaultEncryptionConfigurationRequest"},
+      "output":{"shape":"GetDefaultEncryptionConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Retrieves information about the default encryption configuration for the Amazon Web Services account in the default or specified region. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/key-management.html\">Key management</a> in the <i>AWS IoT SiteWise User Guide</i>.</p>"
+    },
+    "GetDestination":{
+      "name":"GetDestination",
+      "http":{
+        "method":"GET",
+        "requestUri":"/destinations/{Name}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDestinationRequest"},
+      "output":{"shape":"GetDestinationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Gets a destination by name. </p>"
+    },
+    "GetDeviceDiscovery":{
+      "name":"GetDeviceDiscovery",
+      "http":{
+        "method":"GET",
+        "requestUri":"/device-discoveries/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDeviceDiscoveryRequest"},
+      "output":{"shape":"GetDeviceDiscoveryResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Get the current state of a device discovery.</p>"
+    },
+    "GetEventLogConfiguration":{
+      "name":"GetEventLogConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/event-log-configurations/{Id}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetEventLogConfigurationRequest"},
+      "output":{"shape":"GetEventLogConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get an event log configuration.</p>"
+    },
+    "GetHubConfiguration":{
+      "name":"GetHubConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/hub-configuration",
+        "responseCode":200
+      },
+      "input":{"shape":"GetHubConfigurationRequest"},
+      "output":{"shape":"GetHubConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get a hub configuration.</p>"
+    },
+    "GetManagedThing":{
+      "name":"GetManagedThing",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-things/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingRequest"},
+      "output":{"shape":"GetManagedThingResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Get details of a managed thing including its attributes and capabilities.</p>"
+    },
+    "GetManagedThingCapabilities":{
+      "name":"GetManagedThingCapabilities",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-things-capabilities/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingCapabilitiesRequest"},
+      "output":{"shape":"GetManagedThingCapabilitiesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the capabilities for a managed thing using the device ID.</p>"
+    },
+    "GetManagedThingCertificate":{
+      "name":"GetManagedThingCertificate",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-things-certificate/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingCertificateRequest"},
+      "output":{"shape":"GetManagedThingCertificateResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves the certificate PEM for a managed IoT thing.</p>"
+    },
+    "GetManagedThingConnectivityData":{
+      "name":"GetManagedThingConnectivityData",
+      "http":{
+        "method":"POST",
+        "requestUri":"/managed-things-connectivity-data/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingConnectivityDataRequest"},
+      "output":{"shape":"GetManagedThingConnectivityDataResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the connectivity status of a managed thing.</p>"
+    },
+    "GetManagedThingMetaData":{
+      "name":"GetManagedThingMetaData",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-things-metadata/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingMetaDataRequest"},
+      "output":{"shape":"GetManagedThingMetaDataResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the metadata information for a managed thing.</p> <note> <p>The <code>managedThing</code> <code>metadata</code> parameter is used for associating attributes with a <code>managedThing</code> that can be used for grouping over-the-air (OTA) tasks. Name value pairs in <code>metadata</code> can be used in the <code>OtaTargetQueryString</code> parameter for the <code>CreateOtaTask</code> API operation.</p> </note>"
+    },
+    "GetManagedThingState":{
+      "name":"GetManagedThingState",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-thing-states/{ManagedThingId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetManagedThingStateRequest"},
+      "output":{"shape":"GetManagedThingStateResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Returns the managed thing state for the given device Id.</p>"
+    },
+    "GetNotificationConfiguration":{
+      "name":"GetNotificationConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/notification-configurations/{EventType}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetNotificationConfigurationRequest"},
+      "output":{"shape":"GetNotificationConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Get a notification configuration for a specified event type.</p>"
+    },
+    "GetOtaTask":{
+      "name":"GetOtaTask",
+      "http":{
+        "method":"GET",
+        "requestUri":"/ota-tasks/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetOtaTaskRequest"},
+      "output":{"shape":"GetOtaTaskResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get details of the over-the-air (OTA) task by its task id.</p>"
+    },
+    "GetOtaTaskConfiguration":{
+      "name":"GetOtaTaskConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/ota-task-configurations/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetOtaTaskConfigurationRequest"},
+      "output":{"shape":"GetOtaTaskConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get a configuraiton for the over-the-air (OTA) task.</p>"
+    },
+    "GetProvisioningProfile":{
+      "name":"GetProvisioningProfile",
+      "http":{
+        "method":"GET",
+        "requestUri":"/provisioning-profiles/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetProvisioningProfileRequest"},
+      "output":{"shape":"GetProvisioningProfileResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get a provisioning profile by template name.</p>"
+    },
+    "GetRuntimeLogConfiguration":{
+      "name":"GetRuntimeLogConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/runtime-log-configurations/{ManagedThingId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetRuntimeLogConfigurationRequest"},
+      "output":{"shape":"GetRuntimeLogConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the runtime log configuration for a specific managed thing.</p>"
+    },
+    "GetSchemaVersion":{
+      "name":"GetSchemaVersion",
+      "http":{
+        "method":"GET",
+        "requestUri":"/schema-versions/{Type}/{SchemaVersionedId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetSchemaVersionRequest"},
+      "output":{"shape":"GetSchemaVersionResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Gets a schema version with the provided information.</p>"
+    },
+    "ListAccountAssociations":{
+      "name":"ListAccountAssociations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/account-associations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListAccountAssociationsRequest"},
+      "output":{"shape":"ListAccountAssociationsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all account associations, with optional filtering by connector destination ID.</p>"
+    },
+    "ListCloudConnectors":{
+      "name":"ListCloudConnectors",
+      "http":{
+        "method":"GET",
+        "requestUri":"/cloud-connectors",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCloudConnectorsRequest"},
+      "output":{"shape":"ListCloudConnectorsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of connectors filtered by its Lambda Amazon Resource Name (ARN) and <code>type</code>.</p>"
+    },
+    "ListConnectorDestinations":{
+      "name":"ListConnectorDestinations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/connector-destinations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListConnectorDestinationsRequest"},
+      "output":{"shape":"ListConnectorDestinationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all connector destinations, with optional filtering by cloud connector ID.</p>"
+    },
+    "ListCredentialLockers":{
+      "name":"ListCredentialLockers",
+      "http":{
+        "method":"GET",
+        "requestUri":"/credential-lockers",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCredentialLockersRequest"},
+      "output":{"shape":"ListCredentialLockersResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List information on an existing credential locker.</p>"
+    },
+    "ListDestinations":{
+      "name":"ListDestinations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/destinations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDestinationsRequest"},
+      "output":{"shape":"ListDestinationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> List all notification destinations.</p>"
+    },
+    "ListDeviceDiscoveries":{
+      "name":"ListDeviceDiscoveries",
+      "http":{
+        "method":"GET",
+        "requestUri":"/device-discoveries",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDeviceDiscoveriesRequest"},
+      "output":{"shape":"ListDeviceDiscoveriesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all device discovery tasks, with optional filtering by type and status.</p>"
+    },
+    "ListDiscoveredDevices":{
+      "name":"ListDiscoveredDevices",
+      "http":{
+        "method":"GET",
+        "requestUri":"/device-discoveries/{Identifier}/devices",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDiscoveredDevicesRequest"},
+      "output":{"shape":"ListDiscoveredDevicesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all devices discovered during a specific device discovery task.</p>"
+    },
+    "ListEventLogConfigurations":{
+      "name":"ListEventLogConfigurations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/event-log-configurations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListEventLogConfigurationsRequest"},
+      "output":{"shape":"ListEventLogConfigurationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List all event log configurations for an account.</p>"
+    },
+    "ListManagedThingAccountAssociations":{
+      "name":"ListManagedThingAccountAssociations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-thing-associations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListManagedThingAccountAssociationsRequest"},
+      "output":{"shape":"ListManagedThingAccountAssociationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all account associations for a specific managed thing.</p>"
+    },
+    "ListManagedThingSchemas":{
+      "name":"ListManagedThingSchemas",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-thing-schemas/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListManagedThingSchemasRequest"},
+      "output":{"shape":"ListManagedThingSchemasResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List schemas associated with a managed thing.</p>"
+    },
+    "ListManagedThings":{
+      "name":"ListManagedThings",
+      "http":{
+        "method":"GET",
+        "requestUri":"/managed-things",
+        "responseCode":200
+      },
+      "input":{"shape":"ListManagedThingsRequest"},
+      "output":{"shape":"ListManagedThingsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Listing all managed things with provision for filters.</p>"
+    },
+    "ListNotificationConfigurations":{
+      "name":"ListNotificationConfigurations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/notification-configurations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListNotificationConfigurationsRequest"},
+      "output":{"shape":"ListNotificationConfigurationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> List all notification configurations.</p>"
+    },
+    "ListOtaTaskConfigurations":{
+      "name":"ListOtaTaskConfigurations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/ota-task-configurations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOtaTaskConfigurationsRequest"},
+      "output":{"shape":"ListOtaTaskConfigurationsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List all of the over-the-air (OTA) task configurations.</p>"
+    },
+    "ListOtaTaskExecutions":{
+      "name":"ListOtaTaskExecutions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/ota-tasks/{Identifier}/devices",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOtaTaskExecutionsRequest"},
+      "output":{"shape":"ListOtaTaskExecutionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>List all of the over-the-air (OTA) task executions.</p>"
+    },
+    "ListOtaTasks":{
+      "name":"ListOtaTasks",
+      "http":{
+        "method":"GET",
+        "requestUri":"/ota-tasks",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOtaTasksRequest"},
+      "output":{"shape":"ListOtaTasksResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>List all of the over-the-air (OTA) tasks.</p>"
+    },
+    "ListProvisioningProfiles":{
+      "name":"ListProvisioningProfiles",
+      "http":{
+        "method":"GET",
+        "requestUri":"/provisioning-profiles",
+        "responseCode":200
+      },
+      "input":{"shape":"ListProvisioningProfilesRequest"},
+      "output":{"shape":"ListProvisioningProfilesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List the provisioning profiles within the Amazon Web Services account.</p>"
+    },
+    "ListSchemaVersions":{
+      "name":"ListSchemaVersions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/schema-versions/{Type}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSchemaVersionsRequest"},
+      "output":{"shape":"ListSchemaVersionsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists schema versions with the provided information.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List tags for the specified resource.</p>"
+    },
+    "PutDefaultEncryptionConfiguration":{
+      "name":"PutDefaultEncryptionConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/configuration/account/encryption",
+        "responseCode":201
+      },
+      "input":{"shape":"PutDefaultEncryptionConfigurationRequest"},
+      "output":{"shape":"PutDefaultEncryptionConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Sets the default encryption configuration for the Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/key-management.html\">Key management</a> in the AWS IoT SiteWise User Guide.</p>"
+    },
+    "PutHubConfiguration":{
+      "name":"PutHubConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/hub-configuration",
+        "responseCode":201
+      },
+      "input":{"shape":"PutHubConfigurationRequest"},
+      "output":{"shape":"PutHubConfigurationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Update a hub configuration.</p>",
+      "idempotent":true
+    },
+    "PutRuntimeLogConfiguration":{
+      "name":"PutRuntimeLogConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/runtime-log-configurations/{ManagedThingId}",
+        "responseCode":200
+      },
+      "input":{"shape":"PutRuntimeLogConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Set the runtime log configuration for a specific managed thing or for all managed things as a group.</p>",
+      "idempotent":true
+    },
+    "RegisterAccountAssociation":{
+      "name":"RegisterAccountAssociation",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/managed-thing-associations/register",
+        "responseCode":201
+      },
+      "input":{"shape":"RegisterAccountAssociationRequest"},
+      "output":{"shape":"RegisterAccountAssociationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Registers an account association with a managed thing, establishing a connection between a device and a third-party account.</p>",
+      "idempotent":true
+    },
+    "RegisterCustomEndpoint":{
+      "name":"RegisterCustomEndpoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/custom-endpoint",
+        "responseCode":201
+      },
+      "input":{"shape":"RegisterCustomEndpointRequest"},
+      "output":{"shape":"RegisterCustomEndpointResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Customers can request IoT managed integrations to manage the server trust for them or bring their own external server trusts for the custom domain. Returns an IoT managed integrations endpoint.</p>"
+    },
+    "ResetRuntimeLogConfiguration":{
+      "name":"ResetRuntimeLogConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/runtime-log-configurations/{ManagedThingId}",
+        "responseCode":200
+      },
+      "input":{"shape":"ResetRuntimeLogConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Reset a runtime log configuration for a specific managed thing.</p>",
+      "idempotent":true
+    },
+    "SendConnectorEvent":{
+      "name":"SendConnectorEvent",
+      "http":{
+        "method":"POST",
+        "requestUri":"/connector-event/{ConnectorId}",
+        "responseCode":202
+      },
+      "input":{"shape":"SendConnectorEventRequest"},
+      "output":{"shape":"SendConnectorEventResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Relays third-party device events for a connector such as a new device or a device state change event.</p>",
+      "idempotent":true
+    },
+    "SendManagedThingCommand":{
+      "name":"SendManagedThingCommand",
+      "http":{
+        "method":"POST",
+        "requestUri":"/managed-things-command/{ManagedThingId}",
+        "responseCode":202
+      },
+      "input":{"shape":"SendManagedThingCommandRequest"},
+      "output":{"shape":"SendManagedThingCommandResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Send the command to the device represented by the managed thing. </p>"
+    },
+    "StartAccountAssociationRefresh":{
+      "name":"StartAccountAssociationRefresh",
+      "http":{
+        "method":"POST",
+        "requestUri":"/account-associations/{AccountAssociationId}/refresh",
+        "responseCode":200
+      },
+      "input":{"shape":"StartAccountAssociationRefreshRequest"},
+      "output":{"shape":"StartAccountAssociationRefreshResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Initiates a refresh of an existing account association to update its authorization and connection status.</p>"
+    },
+    "StartDeviceDiscovery":{
+      "name":"StartDeviceDiscovery",
+      "http":{
+        "method":"POST",
+        "requestUri":"/device-discoveries",
+        "responseCode":201
+      },
+      "input":{"shape":"StartDeviceDiscoveryRequest"},
+      "output":{"shape":"StartDeviceDiscoveryResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> This API is used to start device discovery for hub-connected and third-party-connected devices. The authentication material (install code) is delivered as a message to the controller instructing it to start the discovery.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Add tags for the specified resource.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Remove tags for the specified resource.</p>",
+      "idempotent":true
+    },
+    "UpdateAccountAssociation":{
+      "name":"UpdateAccountAssociation",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/account-associations/{AccountAssociationId}",
+        "responseCode":204
+      },
+      "input":{"shape":"UpdateAccountAssociationRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates the properties of an existing account association.</p>",
+      "idempotent":true
+    },
+    "UpdateCloudConnector":{
+      "name":"UpdateCloudConnector",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/cloud-connectors/{Identifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateCloudConnectorRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Update an existing cloud connector.</p>",
+      "idempotent":true
+    },
+    "UpdateConnectorDestination":{
+      "name":"UpdateConnectorDestination",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/connector-destinations/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"UpdateConnectorDestinationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates the properties of an existing connector destination.</p>",
+      "idempotent":true
+    },
+    "UpdateDestination":{
+      "name":"UpdateDestination",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/destinations/{Name}",
+        "responseCode":201
+      },
+      "input":{"shape":"UpdateDestinationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Update a destination specified by name. </p>",
+      "idempotent":true
+    },
+    "UpdateEventLogConfiguration":{
+      "name":"UpdateEventLogConfiguration",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/event-log-configurations/{Id}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateEventLogConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Update an event log configuration by log configuration ID.</p>",
+      "idempotent":true
+    },
+    "UpdateManagedThing":{
+      "name":"UpdateManagedThing",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/managed-things/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"UpdateManagedThingRequest"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Update the attributes and capabilities associated with a managed thing.</p>",
+      "idempotent":true
+    },
+    "UpdateNotificationConfiguration":{
+      "name":"UpdateNotificationConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/notification-configurations/{EventType}",
+        "responseCode":201
+      },
+      "input":{"shape":"UpdateNotificationConfigurationRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Update a notification configuration.</p>",
+      "idempotent":true
+    },
+    "UpdateOtaTask":{
+      "name":"UpdateOtaTask",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/ota-tasks/{Identifier}",
+        "responseCode":204
+      },
+      "input":{"shape":"UpdateOtaTaskRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Update an over-the-air (OTA) task.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AbortConfigCriteria":{
+      "type":"structure",
+      "members":{
+        "Action":{
+          "shape":"AbortCriteriaAction",
+          "documentation":"<p>The action taken by the abort configuration.</p>"
+        },
+        "FailureType":{
+          "shape":"AbortCriteriaFailureType",
+          "documentation":"<p>Over-the-air (OTA) task abort criteria failure type.</p>"
+        },
+        "MinNumberOfExecutedThings":{
+          "shape":"MinNumberOfExecutedThings",
+          "documentation":"<p>The minimum number of things that must receive task execution notifications before the task can be aborted.</p>"
+        },
+        "ThresholdPercentage":{
+          "shape":"ThresholdPercentage",
+          "documentation":"<p>The minimum percentage of over-the-air (OTA) task execution failures that must occur to initiate the last abort.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one abort config criteria.</p>"
+    },
+    "AbortConfigCriteriaList":{
+      "type":"list",
+      "member":{"shape":"AbortConfigCriteria"}
+    },
+    "AbortCriteriaAction":{
+      "type":"string",
+      "enum":["CANCEL"]
+    },
+    "AbortCriteriaFailureType":{
+      "type":"string",
+      "enum":[
+        "FAILED",
+        "REJECTED",
+        "TIMED_OUT",
+        "ALL"
+      ]
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>User is not authorized.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AccountAssociationArn":{
+      "type":"string",
+      "max":1011,
+      "min":67,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:account-association/[0-9a-zA-Z]+"
+    },
+    "AccountAssociationDescription":{
+      "type":"string",
+      "max":4096,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+"
+    },
+    "AccountAssociationErrorMessage":{
+      "type":"string",
+      "max":4096,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+"
+    },
+    "AccountAssociationId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9a-zA-Z]+"
+    },
+    "AccountAssociationItem":{
+      "type":"structure",
+      "required":[
+        "AccountAssociationId",
+        "AssociationState"
+      ],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association.</p>"
+        },
+        "AssociationState":{
+          "shape":"AssociationState",
+          "documentation":"<p>The current state of the account association, indicating its status in the association lifecycle.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"AccountAssociationErrorMessage",
+          "documentation":"<p>The error message explaining any issues with the account association, if applicable.</p>"
+        },
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination associated with this account association.</p>"
+        },
+        "Name":{
+          "shape":"AccountAssociationName",
+          "documentation":"<p>The name of the account association.</p>"
+        },
+        "Description":{
+          "shape":"AccountAssociationDescription",
+          "documentation":"<p>A description of the account association.</p>"
+        },
+        "Arn":{
+          "shape":"AccountAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the account association.</p>"
+        }
+      },
+      "documentation":"<p>Structure containing information about an account association, including its identifier, state, and related metadata.</p>"
+    },
+    "AccountAssociationListDefinition":{
+      "type":"list",
+      "member":{"shape":"AccountAssociationItem"}
+    },
+    "AccountAssociationName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+"
+    },
+    "ActionName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[/a-zA-Z0-9\\._ -]+"
+    },
+    "ActionReference":{
+      "type":"string",
+      "pattern":"[a-zA-Z.]+"
+    },
+    "ActionTraceId":{
+      "type":"string",
+      "max":20,
+      "min":16,
+      "pattern":"[a-zA-Z0-9]+=(?:_[0-9]+)?"
+    },
+    "AdvertisedProductId":{
+      "type":"string",
+      "max":5,
+      "min":5,
+      "pattern":"([A-Za-z0-9!#$%&()*\\+\\-;<=>?@^_`{|}~])+"
+    },
+    "AssociationState":{
+      "type":"string",
+      "enum":[
+        "ASSOCIATION_IN_PROGRESS",
+        "ASSOCIATION_FAILED",
+        "ASSOCIATION_SUCCEEDED",
+        "ASSOCIATION_DELETING",
+        "REFRESH_TOKEN_EXPIRED"
+      ]
+    },
+    "AttributeName":{
+      "type":"string",
+      "max":128,
+      "min":0,
+      "pattern":".*[a-zA-Z0-9_.,@/:#-]+.*"
+    },
+    "AttributeValue":{
+      "type":"string",
+      "max":800,
+      "min":0,
+      "pattern":".*[a-zA-Z0-9_.,@/:#-]*.*"
+    },
+    "AuthConfig":{
+      "type":"structure",
+      "members":{
+        "oAuth":{
+          "shape":"OAuthConfig",
+          "documentation":"<p>The OAuth configuration settings used for authentication with the third-party service.</p>"
+        }
+      },
+      "documentation":"<p>The authentication configuration details for a connector destination, including OAuth settings and other authentication parameters.</p>"
+    },
+    "AuthConfigUpdate":{
+      "type":"structure",
+      "members":{
+        "oAuthUpdate":{
+          "shape":"OAuthUpdate",
+          "documentation":"<p>The updated OAuth configuration settings for the authentication configuration.</p>"
+        }
+      },
+      "documentation":"<p>The updated authentication configuration details for a connector destination.</p>"
+    },
+    "AuthMaterialString":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[0-9A-Za-z!#$%&()*\\+\\-;<=>?@^_`{|}~\\/: {},\\\\\"]+",
+      "sensitive":true
+    },
+    "AuthMaterialType":{
+      "type":"string",
+      "enum":[
+        "CUSTOM_PROTOCOL_QR_BAR_CODE",
+        "WIFI_SETUP_QR_BAR_CODE",
+        "ZWAVE_QR_BAR_CODE",
+        "ZIGBEE_QR_BAR_CODE",
+        "DISCOVERED_DEVICE"
+      ]
+    },
+    "AuthType":{
+      "type":"string",
+      "enum":["OAUTH"]
+    },
+    "AuthUrl":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}([-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)"
+    },
+    "BaseRatePerMinute":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "Brand":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+",
+      "sensitive":true
+    },
+    "CaCertificate":{
+      "type":"string",
+      "pattern":"-----BEGIN CERTIFICATE-----.*(.|\\n)*-----END CERTIFICATE-----\\n?",
+      "sensitive":true
+    },
+    "Capabilities":{
+      "type":"string",
+      "max":65535,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\s'\\x{0022},.:\\\\\\/{$}\\[\\]=_\\-\\+]+"
+    },
+    "CapabilityAction":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"CapabilityActionName",
+          "documentation":"<p>Describe a capability action with a name.</p>"
+        },
+        "ref":{
+          "shape":"ActionReference",
+          "documentation":"<p>Describe a capability action with an reference.</p>"
+        },
+        "actionTraceId":{
+          "shape":"ActionTraceId",
+          "documentation":"<p>Describe a capability action with an <code>actionTraceId</code> for a response command.</p>"
+        },
+        "parameters":{
+          "shape":"CapabilityProperties",
+          "documentation":"<p>Describe a capability action with a capability property.</p>"
+        }
+      },
+      "documentation":"<p>Action for an Amazon Web Services capability, containing the action parameters for control.</p>"
+    },
+    "CapabilityActionName":{
+      "type":"string",
+      "pattern":"[/a-zA-Z]+"
+    },
+    "CapabilityActions":{
+      "type":"list",
+      "member":{"shape":"CapabilityAction"},
+      "max":5,
+      "min":1
+    },
+    "CapabilityId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9./]+(@\\d+\\.\\d+)?"
+    },
+    "CapabilityName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[/a-zA-Z0-9\\._ -]+"
+    },
+    "CapabilityProperties":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true,
+      "sensitive":true
+    },
+    "CapabilityReport":{
+      "type":"structure",
+      "required":[
+        "version",
+        "endpoints"
+      ],
+      "members":{
+        "version":{
+          "shape":"CapabilityReportVersion",
+          "documentation":"<p>The version of the capability report.</p>"
+        },
+        "nodeId":{
+          "shape":"NodeId",
+          "documentation":"<p>The numeric identifier of the node.</p>"
+        },
+        "endpoints":{
+          "shape":"CapabilityReportEndpoints",
+          "documentation":"<p>The endpoints used in the capability report.</p>"
+        }
+      },
+      "documentation":"<p>Report of all capabilities supported by the device.</p>"
+    },
+    "CapabilityReportActions":{
+      "type":"list",
+      "member":{"shape":"ActionName"},
+      "max":100,
+      "min":0
+    },
+    "CapabilityReportCapabilities":{
+      "type":"list",
+      "member":{"shape":"CapabilityReportCapability"},
+      "max":40,
+      "min":0
+    },
+    "CapabilityReportCapability":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "version",
+        "properties",
+        "actions",
+        "events"
+      ],
+      "members":{
+        "id":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>The id of the schema version.</p>"
+        },
+        "name":{
+          "shape":"CapabilityName",
+          "documentation":"<p>The name of the capability.</p>"
+        },
+        "version":{
+          "shape":"CapabilityVersion",
+          "documentation":"<p>The version of the capability.</p>"
+        },
+        "properties":{
+          "shape":"CapabilityReportProperties",
+          "documentation":"<p>The capability properties used in the capability report.</p>"
+        },
+        "actions":{
+          "shape":"CapabilityReportActions",
+          "documentation":"<p>The capability actions used in the capability report.</p>"
+        },
+        "events":{
+          "shape":"CapabilityReportEvents",
+          "documentation":"<p>The capability events used in the capability report.</p>"
+        }
+      },
+      "documentation":"<p>The capability used in capability report.</p>"
+    },
+    "CapabilityReportEndpoint":{
+      "type":"structure",
+      "required":[
+        "id",
+        "deviceTypes",
+        "capabilities"
+      ],
+      "members":{
+        "id":{
+          "shape":"EndpointId",
+          "documentation":"<p>The id of the endpoint used in the capability report.</p>"
+        },
+        "deviceTypes":{
+          "shape":"DeviceTypes",
+          "documentation":"<p>The type of device.</p>"
+        },
+        "capabilities":{
+          "shape":"CapabilityReportCapabilities",
+          "documentation":"<p>The capabilities used in the capability report.</p>"
+        }
+      },
+      "documentation":"<p>The endpoint used in the capability report.</p>"
+    },
+    "CapabilityReportEndpoints":{
+      "type":"list",
+      "member":{"shape":"CapabilityReportEndpoint"},
+      "max":40,
+      "min":0
+    },
+    "CapabilityReportEvents":{
+      "type":"list",
+      "member":{"shape":"EventName"},
+      "max":100,
+      "min":0
+    },
+    "CapabilityReportProperties":{
+      "type":"list",
+      "member":{"shape":"PropertyName"},
+      "max":100,
+      "min":0
+    },
+    "CapabilityReportVersion":{
+      "type":"string",
+      "max":10,
+      "min":1,
+      "pattern":"1\\.0\\.0"
+    },
+    "CapabilitySchemaItem":{
+      "type":"structure",
+      "required":[
+        "Format",
+        "CapabilityId",
+        "ExtrinsicId",
+        "ExtrinsicVersion",
+        "Schema"
+      ],
+      "members":{
+        "Format":{
+          "shape":"SchemaVersionFormat",
+          "documentation":"<p>The format of the capability schema, which defines how the schema is structured and interpreted.</p>"
+        },
+        "CapabilityId":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>The unique identifier of the capability defined in the schema.</p>"
+        },
+        "ExtrinsicId":{
+          "shape":"ExtrinsicSchemaId",
+          "documentation":"<p>The external identifier for the capability, used when referencing the capability outside of the AWS ecosystem.</p>"
+        },
+        "ExtrinsicVersion":{
+          "shape":"MatterCapabilityReportClusterRevisionId",
+          "documentation":"<p>The version of the external capability definition, used to track compatibility with external systems.</p>"
+        },
+        "Schema":{
+          "shape":"ValidationSchema",
+          "documentation":"<p>The actual schema definition that describes the capability's properties, actions, and events.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing a capability schema item that defines the functionality and features supported by a managed thing.</p>"
+    },
+    "CapabilitySchemas":{
+      "type":"list",
+      "member":{"shape":"CapabilitySchemaItem"},
+      "max":40,
+      "min":0
+    },
+    "CapabilityVersion":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"(0|[1-9][0-9]*)"
+    },
+    "CertificatePem":{
+      "type":"string",
+      "max":65536,
+      "min":1,
+      "pattern":"[\\s\\S]*"
+    },
+    "ClaimCertificate":{
+      "type":"string",
+      "sensitive":true
+    },
+    "ClaimCertificatePrivateKey":{
+      "type":"string",
+      "sensitive":true
+    },
+    "Classification":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "sensitive":true
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9=_-]+"
+    },
+    "CloudConnectorDescription":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[0-9A-Za-z_\\- ]+"
+    },
+    "CloudConnectorId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_]+"
+    },
+    "CloudConnectorType":{
+      "type":"string",
+      "enum":[
+        "LISTED",
+        "UNLISTED"
+      ]
+    },
+    "ClusterId":{
+      "type":"string",
+      "max":24,
+      "min":1,
+      "pattern":"0[xX][0-9a-fA-F]+$|^[0-9]+"
+    },
+    "CommandCapabilities":{
+      "type":"list",
+      "member":{"shape":"CommandCapability"},
+      "max":5,
+      "min":1
+    },
+    "CommandCapability":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "version",
+        "actions"
+      ],
+      "members":{
+        "id":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>Describe the capability with an id.</p>"
+        },
+        "name":{
+          "shape":"CapabilityName",
+          "documentation":"<p>Describe the capability with an name.</p>"
+        },
+        "version":{
+          "shape":"CapabilityVersion",
+          "documentation":"<p>Describe the capability with a version.</p>"
+        },
+        "actions":{
+          "shape":"CapabilityActions",
+          "documentation":"<p>Describe the command capability with the actions it supports.</p>"
+        }
+      },
+      "documentation":"<p>The command capabilities added for the managed thing</p>"
+    },
+    "CommandEndpoint":{
+      "type":"structure",
+      "required":[
+        "endpointId",
+        "capabilities"
+      ],
+      "members":{
+        "endpointId":{
+          "shape":"EndpointId",
+          "documentation":"<p>The id of the endpoint for a managed thing.</p>"
+        },
+        "capabilities":{
+          "shape":"CommandCapabilities",
+          "documentation":"<p>Describe the endpoint with an id, a name, and the relevant capabilities for sending commands.</p>"
+        }
+      },
+      "documentation":"<p>The endpoint for a managed thing when sending a command.</p>"
+    },
+    "CommandEndpoints":{
+      "type":"list",
+      "member":{"shape":"CommandEndpoint"},
+      "max":5,
+      "min":1
+    },
+    "ConfigurationError":{
+      "type":"structure",
+      "members":{
+        "code":{
+          "shape":"ConfigurationErrorCode",
+          "documentation":"<p>The error code returned when the default encryption configuration update fails.</p>"
+        },
+        "message":{
+          "shape":"ConfigurationErrorMessage",
+          "documentation":"<p>The error message returned when the default encryption configuration update fails.</p>"
+        }
+      },
+      "documentation":"<p>Provides the default encryption configuration error update details.</p>"
+    },
+    "ConfigurationErrorCode":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_-]+"
+    },
+    "ConfigurationErrorMessage":{
+      "type":"string",
+      "max":65535,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\-._,]+"
+    },
+    "ConfigurationState":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "UPDATE_IN_PROGRESS",
+        "UPDATE_FAILED"
+      ]
+    },
+    "ConfigurationStatus":{
+      "type":"structure",
+      "required":["state"],
+      "members":{
+        "error":{
+          "shape":"ConfigurationError",
+          "documentation":"<p>The error details describing a failed default encryption configuration update.</p>"
+        },
+        "state":{
+          "shape":"ConfigurationState",
+          "documentation":"<p>The status state describing the default encryption configuration update.</p>"
+        }
+      },
+      "documentation":"<p>Provides the status of the default encryption configuration for an Amazon Web Services account.</p>"
+    },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>There is a conflict with the request.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ConnectivityStatus":{
+      "type":"boolean",
+      "box":true
+    },
+    "ConnectivityTimestamp":{"type":"timestamp"},
+    "ConnectorAssociationId":{
+      "type":"string",
+      "deprecated":true,
+      "deprecatedMessage":"ConnectorAssociationId is deprecated",
+      "deprecatedSince":"2025-06-25",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9a-zA-Z]+"
+    },
+    "ConnectorDestinationDescription":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[0-9A-Za-z_\\- ]+"
+    },
+    "ConnectorDestinationId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_]+"
+    },
+    "ConnectorDestinationListDefinition":{
+      "type":"list",
+      "member":{"shape":"ConnectorDestinationSummary"}
+    },
+    "ConnectorDestinationName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+"
+    },
+    "ConnectorDestinationSummary":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"ConnectorDestinationName",
+          "documentation":"<p>The display name of the connector destination.</p>"
+        },
+        "Description":{
+          "shape":"ConnectorDestinationDescription",
+          "documentation":"<p>A description of the connector destination.</p>"
+        },
+        "CloudConnectorId":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the cloud connector associated with this connector destination.</p>"
+        },
+        "Id":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The unique identifier of the connector destination.</p>"
+        }
+      },
+      "documentation":"<p>Structure containing summary information about a connector destination, which defines how a cloud-to-cloud connector connects to a customer's AWS account.</p>"
+    },
+    "ConnectorDeviceId":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.,@-]+",
+      "sensitive":true
+    },
+    "ConnectorDeviceName":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\p{L}\\p{N} ._-]+",
+      "sensitive":true
+    },
+    "ConnectorEventMessage":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\sa-zA-Z0-9_.,@-]+",
+      "sensitive":true
+    },
+    "ConnectorEventOperation":{
+      "type":"string",
+      "enum":[
+        "DEVICE_COMMAND_RESPONSE",
+        "DEVICE_DISCOVERY",
+        "DEVICE_EVENT",
+        "DEVICE_COMMAND_REQUEST"
+      ]
+    },
+    "ConnectorEventOperationVersion":{
+      "type":"string",
+      "max":6,
+      "min":1,
+      "pattern":"[0-9.]+",
+      "sensitive":true
+    },
+    "ConnectorEventStatusCode":{
+      "type":"integer",
+      "box":true,
+      "max":550,
+      "min":100,
+      "sensitive":true
+    },
+    "ConnectorId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_]+"
+    },
+    "ConnectorItem":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "EndpointConfig"
+      ],
+      "members":{
+        "Name":{
+          "shape":"DisplayName",
+          "documentation":"<p>The display name of the C2C connector.</p>"
+        },
+        "EndpointConfig":{
+          "shape":"EndpointConfig",
+          "documentation":"<p>The configuration details for the cloud connector endpoint, including connection parameters and authentication requirements.</p>"
+        },
+        "Description":{
+          "shape":"CloudConnectorDescription",
+          "documentation":"<p>A description of the C2C connector.</p>"
+        },
+        "EndpointType":{
+          "shape":"EndpointType",
+          "documentation":"<p>The type of endpoint used for the C2C connector.</p>"
+        },
+        "Id":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the C2C connector.</p>"
+        },
+        "Type":{
+          "shape":"CloudConnectorType",
+          "documentation":"<p>The type of cloud connector created.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing a connector.</p>"
+    },
+    "ConnectorList":{
+      "type":"list",
+      "member":{"shape":"ConnectorItem"}
+    },
+    "ConnectorPolicyId":{
+      "type":"string",
+      "deprecated":true,
+      "deprecatedMessage":"ConnectorPolicyId is deprecated",
+      "deprecatedSince":"2025-06-25",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_]+"
+    },
+    "CreateAccountAssociationRequest":{
+      "type":"structure",
+      "required":["ConnectorDestinationId"],
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination.</p>"
+        },
+        "Name":{
+          "shape":"AccountAssociationName",
+          "documentation":"<p>The name of the destination for the new account association.</p>"
+        },
+        "Description":{
+          "shape":"AccountAssociationDescription",
+          "documentation":"<p>A description of the account association request.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the account association.</p>"
+        }
+      }
+    },
+    "CreateAccountAssociationResponse":{
+      "type":"structure",
+      "required":[
+        "OAuthAuthorizationUrl",
+        "AccountAssociationId",
+        "AssociationState"
+      ],
+      "members":{
+        "OAuthAuthorizationUrl":{
+          "shape":"OAuthAuthorizationUrl",
+          "documentation":"<p>Third-party IoT platform OAuth authorization server URL backed with all the required parameters to perform end-user authentication.</p>"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier for the account association request.</p>"
+        },
+        "AssociationState":{
+          "shape":"AssociationState",
+          "documentation":"<p>The current state of the account association request.</p>"
+        },
+        "Arn":{
+          "shape":"AccountAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the account association.</p>"
+        }
+      }
+    },
+    "CreateCloudConnectorRequest":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "EndpointConfig"
+      ],
+      "members":{
+        "Name":{
+          "shape":"DisplayName",
+          "documentation":"<p>The display name of the C2C connector.</p>"
+        },
+        "EndpointConfig":{
+          "shape":"EndpointConfig",
+          "documentation":"<p>The configuration details for the cloud connector endpoint, including connection parameters and authentication requirements.</p>"
+        },
+        "Description":{
+          "shape":"CloudConnectorDescription",
+          "documentation":"<p>A description of the C2C connector.</p>"
+        },
+        "EndpointType":{
+          "shape":"EndpointType",
+          "documentation":"<p>The type of endpoint used for the cloud connector, which defines how the connector communicates with external services.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateCloudConnectorResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The unique identifier assigned to the newly created cloud connector.</p>"
+        }
+      }
+    },
+    "CreateConnectorDestinationRequest":{
+      "type":"structure",
+      "required":[
+        "CloudConnectorId",
+        "AuthType",
+        "AuthConfig",
+        "SecretsManager"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ConnectorDestinationName",
+          "documentation":"<p>The display name of the connector destination.</p>"
+        },
+        "Description":{
+          "shape":"ConnectorDestinationDescription",
+          "documentation":"<p>A description of the connector destination.</p>"
+        },
+        "CloudConnectorId":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the C2C connector.</p>"
+        },
+        "AuthType":{
+          "shape":"AuthType",
+          "documentation":"<p>The authentication type used for the connector destination, which determines how credentials and access are managed.</p>"
+        },
+        "AuthConfig":{
+          "shape":"AuthConfig",
+          "documentation":"<p>The authentication configuration details for the connector destination, including OAuth settings and other authentication parameters.</p>"
+        },
+        "SecretsManager":{
+          "shape":"SecretsManager",
+          "documentation":"<p>The AWS Secrets Manager configuration used to securely store and manage sensitive information for the connector destination.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateConnectorDestinationResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the C2C connector destination creation request.</p>"
+        }
+      }
+    },
+    "CreateCredentialLockerRequest":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"CredentialLockerName",
+          "documentation":"<p>The name of the credential locker.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the credential locker.</p>"
+        }
+      }
+    },
+    "CreateCredentialLockerResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker creation request.</p>"
+        },
+        "Arn":{
+          "shape":"CredentialLockerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the credential locker.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CredentialLockerCreatedAt",
+          "documentation":"<p>The timestamp value of when the credential locker request occurred.</p>"
+        }
+      }
+    },
+    "CreateDestinationRequest":{
+      "type":"structure",
+      "required":[
+        "DeliveryDestinationArn",
+        "DeliveryDestinationType",
+        "Name",
+        "RoleArn"
+      ],
+      "members":{
+        "DeliveryDestinationArn":{
+          "shape":"DeliveryDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationType":{
+          "shape":"DeliveryDestinationType",
+          "documentation":"<p>The destination type for the customer-managed destination.</p>"
+        },
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>"
+        },
+        "RoleArn":{
+          "shape":"DeliveryDestinationRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the delivery destination role.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "Description":{
+          "shape":"DestinationDescription",
+          "documentation":"<p>The description of the customer-managed destination.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the destination.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags have been deprecated from this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "CreateDestinationResponse":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>"
+        }
+      }
+    },
+    "CreateEventLogConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceType",
+        "EventLogLevel"
+      ],
+      "members":{
+        "ResourceType":{
+          "shape":"SmartHomeResourceType",
+          "documentation":"<p>The type of resource for the event log configuration.</p>"
+        },
+        "ResourceId":{
+          "shape":"SmartHomeResourceId",
+          "documentation":"<p>The identifier of the resource for the event log configuration.</p>"
+        },
+        "EventLogLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The logging level for the event log configuration.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateEventLogConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The identifier of the event log configuration request.</p>"
+        }
+      }
+    },
+    "CreateManagedThingRequest":{
+      "type":"structure",
+      "required":[
+        "Role",
+        "AuthenticationMaterial",
+        "AuthenticationMaterialType"
+      ],
+      "members":{
+        "Role":{
+          "shape":"Role",
+          "documentation":"<p>The type of device used. This will be the hub controller, cloud device, or AWS IoT device.</p>"
+        },
+        "Owner":{
+          "shape":"Owner",
+          "documentation":"<p>Owner of the device, usually an indication of whom the device belongs to. This value should not contain personal identifiable information.</p>"
+        },
+        "CredentialLockerId":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential for the managed thing.</p>"
+        },
+        "AuthenticationMaterial":{
+          "shape":"AuthMaterialString",
+          "documentation":"<p>The authentication material defining the device connectivity setup requests. The authentication materials used are the device bar code.</p>"
+        },
+        "AuthenticationMaterialType":{
+          "shape":"AuthMaterialType",
+          "documentation":"<p>The type of authentication material used for device connectivity setup requests.</p>"
+        },
+        "SerialNumber":{
+          "shape":"SerialNumber",
+          "documentation":"<p>The serial number of the device.</p>"
+        },
+        "Brand":{
+          "shape":"Brand",
+          "documentation":"<p>The brand of the device.</p>"
+        },
+        "Model":{
+          "shape":"Model",
+          "documentation":"<p>The model of the device.</p>"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the managed thing representing the physical device.</p>"
+        },
+        "CapabilityReport":{
+          "shape":"CapabilityReport",
+          "documentation":"<p>A report of the capabilities for the managed thing.</p>"
+        },
+        "CapabilitySchemas":{
+          "shape":"CapabilitySchemas",
+          "documentation":"<p>The capability schemas that define the functionality and features supported by the managed thing, including device capabilities and their associated properties.</p>"
+        },
+        "Capabilities":{
+          "shape":"Capabilities",
+          "documentation":"<p>The capabilities of the device such as light bulb.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "Classification":{
+          "shape":"Classification",
+          "documentation":"<p>The classification of the managed thing such as light bulb or thermostat.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the managed thing.</p>"
+        },
+        "MetaData":{
+          "shape":"MetaData",
+          "documentation":"<p>The metadata for the managed thing.</p> <note> <p>The <code>managedThing</code> <code>metadata</code> parameter is used for associating attributes with a <code>managedThing</code> that can be used for grouping over-the-air (OTA) tasks. Name value pairs in <code>metadata</code> can be used in the <code>OtaTargetQueryString</code> parameter for the <code>CreateOtaTask</code> API operation.</p> </note>"
+        }
+      }
+    },
+    "CreateManagedThingResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the managed thing.</p>"
+        },
+        "Arn":{
+          "shape":"ManagedThingArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the managed thing.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the device creation request occurred.</p>"
+        }
+      }
+    },
+    "CreateNotificationConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "EventType",
+        "DestinationName"
+      ],
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>"
+        },
+        "DestinationName":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the destination for the notification configuration.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the notification configuration.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags has been deprecated from this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "CreateNotificationConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>"
+        }
+      }
+    },
+    "CreateOtaTaskConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>A description of the over-the-air (OTA) task configuration.</p>"
+        },
+        "Name":{
+          "shape":"OtaTaskConfigurationName",
+          "documentation":"<p>The name of the over-the-air (OTA) task.</p>"
+        },
+        "PushConfig":{
+          "shape":"PushConfig",
+          "documentation":"<p>Describes the type of configuration used for the over-the-air (OTA) task.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateOtaTaskConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier of the over-the-air (OTA) task configuration.</p>"
+        }
+      }
+    },
+    "CreateOtaTaskRequest":{
+      "type":"structure",
+      "required":[
+        "S3Url",
+        "OtaType"
+      ],
+      "members":{
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>The description of the over-the-air (OTA) task.</p>"
+        },
+        "S3Url":{
+          "shape":"S3Url",
+          "documentation":"<p>The URL to the Amazon S3 bucket where the over-the-air (OTA) task is stored.</p>"
+        },
+        "Protocol":{
+          "shape":"OtaProtocol",
+          "documentation":"<p>The connection protocol the over-the-air (OTA) task uses to update the device.</p>"
+        },
+        "Target":{
+          "shape":"Target",
+          "documentation":"<p>The device targeted for the over-the-air (OTA) task.</p>"
+        },
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier for the over-the-air (OTA) task configuration.</p>"
+        },
+        "OtaMechanism":{
+          "shape":"OtaMechanism",
+          "documentation":"<p>The deployment mechanism for the over-the-air (OTA) task.</p>"
+        },
+        "OtaType":{
+          "shape":"OtaType",
+          "documentation":"<p>The frequency type for the over-the-air (OTA) task.</p>"
+        },
+        "OtaTargetQueryString":{
+          "shape":"OtaTargetQueryString",
+          "documentation":"<p>The query string to add things to the thing group.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "OtaSchedulingConfig":{"shape":"OtaTaskSchedulingConfig"},
+        "OtaTaskExecutionRetryConfig":{"shape":"OtaTaskExecutionRetryConfig"},
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the over-the-air (OTA) task.</p>"
+        }
+      }
+    },
+    "CreateOtaTaskResponse":{
+      "type":"structure",
+      "members":{
+        "TaskId":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The identifier of the over-the-air (OTA) task.</p>"
+        },
+        "TaskArn":{
+          "shape":"OtaTaskArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the over-the-air (OTA) task.</p>"
+        },
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>A description of the over-the-air (OTA) task.</p>"
+        }
+      }
+    },
+    "CreateProvisioningProfileRequest":{
+      "type":"structure",
+      "required":["ProvisioningType"],
+      "members":{
+        "ProvisioningType":{
+          "shape":"ProvisioningType",
+          "documentation":"<p>The type of provisioning workflow the device uses for onboarding to IoT managed integrations.</p>"
+        },
+        "CaCertificate":{
+          "shape":"CaCertificate",
+          "documentation":"<p>The id of the certificate authority (CA) certificate.</p>"
+        },
+        "Name":{
+          "shape":"ProvisioningProfileName",
+          "documentation":"<p>The name of the provisioning template.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the provisioning profile.</p>"
+        }
+      }
+    },
+    "CreateProvisioningProfileResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"ProvisioningProfileArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the provisioning template used in the provisioning profile.</p>"
+        },
+        "Name":{
+          "shape":"ProvisioningProfileName",
+          "documentation":"<p>The name of the provisioning template.</p>"
+        },
+        "ProvisioningType":{
+          "shape":"ProvisioningType",
+          "documentation":"<p>The type of provisioning workflow the device uses for onboarding to IoT managed integrations.</p>"
+        },
+        "Id":{
+          "shape":"ProvisioningProfileId",
+          "documentation":"<p>The identifier of the provisioning profile.</p>"
+        },
+        "ClaimCertificate":{
+          "shape":"ClaimCertificate",
+          "documentation":"<p>The id of the claim certificate.</p>"
+        },
+        "ClaimCertificatePrivateKey":{
+          "shape":"ClaimCertificatePrivateKey",
+          "documentation":"<p>The private key of the claim certificate. This is stored securely on the device for validating the connection endpoint with IoT managed integrations using the public key.</p>"
+        }
+      }
+    },
+    "CreatedAt":{"type":"timestamp"},
+    "CredentialLockerArn":{
+      "type":"string",
+      "max":1011,
+      "min":32,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:credential-locker/[0-9a-zA-Z]+"
+    },
+    "CredentialLockerCreatedAt":{"type":"timestamp"},
+    "CredentialLockerId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]*"
+    },
+    "CredentialLockerListDefinition":{
+      "type":"list",
+      "member":{"shape":"CredentialLockerSummary"}
+    },
+    "CredentialLockerName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+",
+      "sensitive":true
+    },
+    "CredentialLockerSummary":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The id of the credential locker.</p>"
+        },
+        "Arn":{
+          "shape":"CredentialLockerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the credential locker.</p>"
+        },
+        "Name":{
+          "shape":"CredentialLockerName",
+          "documentation":"<p>The name of the credential locker.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CredentialLockerCreatedAt",
+          "documentation":"<p>The timestampe value of when the credential locker was created at.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing one Credential Locker.</p>"
+    },
+    "CustomProtocolDetail":{
+      "type":"map",
+      "key":{"shape":"CustomProtocolDetailKey"},
+      "value":{"shape":"CustomProtocolDetailValue"},
+      "max":50,
+      "min":0
+    },
+    "CustomProtocolDetailKey":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9 _.-]+"
+    },
+    "CustomProtocolDetailValue":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[a-zA-Z0-9 _.{}:\"-]+"
+    },
+    "DeleteAccountAssociationRequest":{
+      "type":"structure",
+      "required":["AccountAssociationId"],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association to be deleted.</p>",
+          "location":"uri",
+          "locationName":"AccountAssociationId"
+        }
+      }
+    },
+    "DeleteCloudConnectorRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the cloud connector.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteConnectorDestinationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteCredentialLockerRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteDestinationRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The id of the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        }
+      }
+    },
+    "DeleteEventLogConfigurationRequest":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The identifier of the event log configuration.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        }
+      }
+    },
+    "DeleteLocalStoreAfterUpload":{
+      "type":"boolean",
+      "box":true
+    },
+    "DeleteManagedThingRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the managed thing.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Force":{
+          "shape":"Boolean",
+          "documentation":"<p>When set to <code>TRUE</code>, a forceful deteletion of the managed thing will occur. When set to <code>FALSE</code>, a non-forceful deletion of the managed thing will occur.</p>",
+          "location":"querystring",
+          "locationName":"Force"
+        }
+      }
+    },
+    "DeleteNotificationConfigurationRequest":{
+      "type":"structure",
+      "required":["EventType"],
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"EventType"
+        }
+      }
+    },
+    "DeleteOtaTaskConfigurationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier of the over-the-air (OTA) task configuration.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteOtaTaskRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The identifier of the over-the-air (OTA) task.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteProvisioningProfileRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ProvisioningProfileId",
+          "documentation":"<p>The name of the provisioning template.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeliveryDestinationArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws:[0-9a-zA-Z]+:[0-9a-zA-Z-]+:[0-9]+:[0-9a-zA-Z]+/[0-9a-zA-Z._-]+"
+    },
+    "DeliveryDestinationRoleArn":{"type":"string"},
+    "DeliveryDestinationType":{
+      "type":"string",
+      "enum":["KINESIS"]
+    },
+    "DeregisterAccountAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "ManagedThingId",
+        "AccountAssociationId"
+      ],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing to be deregistered from the account association.</p>"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association to be deregistered.</p>"
+        }
+      },
+      "documentation":"<p>Request for deregister a managed thing from account association</p>"
+    },
+    "DestinationCreatedAt":{"type":"timestamp"},
+    "DestinationDescription":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[0-9A-Za-z_\\- ]+"
+    },
+    "DestinationListDefinition":{
+      "type":"list",
+      "member":{"shape":"DestinationSummary"}
+    },
+    "DestinationName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\p{L}\\p{N} ._-]+"
+    },
+    "DestinationSummary":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"DestinationDescription",
+          "documentation":"<p>The description of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationArn":{
+          "shape":"DeliveryDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationType":{
+          "shape":"DeliveryDestinationType",
+          "documentation":"<p>The destination type for the customer-managed destination.</p>"
+        },
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>"
+        },
+        "RoleArn":{
+          "shape":"DeliveryDestinationRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the delivery destination.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing a destination for IoT managed integrations to deliver notifications for a device.</p>"
+    },
+    "DestinationUpdatedAt":{"type":"timestamp"},
+    "Device":{
+      "type":"structure",
+      "required":[
+        "ConnectorDeviceId",
+        "CapabilityReport"
+      ],
+      "members":{
+        "ConnectorDeviceId":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>The device id as defined by the connector.</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>"
+        },
+        "ConnectorDeviceName":{
+          "shape":"ConnectorDeviceName",
+          "documentation":"<p>The name of the device as defined by the connector.</p>"
+        },
+        "CapabilityReport":{
+          "shape":"MatterCapabilityReport",
+          "documentation":"<p>The capability report for the device.</p>"
+        },
+        "CapabilitySchemas":{
+          "shape":"CapabilitySchemas",
+          "documentation":"<p>Report of all capabilities supported by the device.</p>"
+        },
+        "DeviceMetadata":{
+          "shape":"DeviceMetadata",
+          "documentation":"<p>The metadata attributes for a device.</p>"
+        }
+      },
+      "documentation":"<p>Describe the device using the relevant metadata and supported clusters for device discovery.</p>"
+    },
+    "DeviceDiscoveryArn":{
+      "type":"string",
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:device-discovery/[0-9a-zA-Z]+"
+    },
+    "DeviceDiscoveryId":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[A-Za-z0-9]+"
+    },
+    "DeviceDiscoveryListDefinition":{
+      "type":"list",
+      "member":{"shape":"DeviceDiscoverySummary"}
+    },
+    "DeviceDiscoveryStatus":{
+      "type":"string",
+      "enum":[
+        "RUNNING",
+        "SUCCEEDED",
+        "FAILED",
+        "TIMED_OUT"
+      ]
+    },
+    "DeviceDiscoverySummary":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The unique identifier of the device discovery job.</p>"
+        },
+        "DiscoveryType":{
+          "shape":"DiscoveryType",
+          "documentation":"<p>The type of discovery process used to find devices.</p>"
+        },
+        "Status":{
+          "shape":"DeviceDiscoveryStatus",
+          "documentation":"<p>The current status of the device discovery job.</p>"
+        }
+      },
+      "documentation":"<p>Structure containing summary information about a device discovery job, including its identifier, type, and status.</p>"
+    },
+    "DeviceMetadata":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true
+    },
+    "DeviceSpecificKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9=_.,@\\+\\-]+",
+      "sensitive":true
+    },
+    "DeviceType":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"[a-zA-Z0-9=_. ,@\\+\\-/]+"
+    },
+    "DeviceTypeList":{
+      "type":"list",
+      "member":{"shape":"DeviceType"}
+    },
+    "DeviceTypes":{
+      "type":"list",
+      "member":{"shape":"DeviceType"},
+      "max":50,
+      "min":0
+    },
+    "Devices":{
+      "type":"list",
+      "member":{"shape":"Device"}
+    },
+    "DisconnectReasonValue":{
+      "type":"string",
+      "enum":[
+        "AUTH_ERROR",
+        "CLIENT_INITIATED_DISCONNECT",
+        "CLIENT_ERROR",
+        "CONNECTION_LOST",
+        "DUPLICATE_CLIENTID",
+        "FORBIDDEN_ACCESS",
+        "MQTT_KEEP_ALIVE_TIMEOUT",
+        "SERVER_ERROR",
+        "SERVER_INITIATED_DISCONNECT",
+        "THROTTLED",
+        "WEBSOCKET_TTL_EXPIRATION",
+        "CUSTOMAUTH_TTL_EXPIRATION",
+        "UNKNOWN",
+        "NONE"
+      ]
+    },
+    "DiscoveredAt":{"type":"timestamp"},
+    "DiscoveredDeviceListDefinition":{
+      "type":"list",
+      "member":{"shape":"DiscoveredDeviceSummary"}
+    },
+    "DiscoveredDeviceSummary":{
+      "type":"structure",
+      "members":{
+        "ConnectorDeviceId":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>The third-party device identifier as defined by the connector. This identifier must not contain personal identifiable information (PII).</p>"
+        },
+        "ConnectorDeviceName":{
+          "shape":"ConnectorDeviceName",
+          "documentation":"<p>The name of the device as defined by the connector or third-party system.</p>"
+        },
+        "DeviceTypes":{
+          "shape":"DeviceTypeList",
+          "documentation":"<p>The list of device types or categories that the discovered device belongs to.</p>"
+        },
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing created for this discovered device, if one exists.</p>"
+        },
+        "Modification":{
+          "shape":"DiscoveryModification",
+          "documentation":"<p>The status of the discovered device, indicating whether it has been added, removed, or modified since the last discovery.</p>"
+        },
+        "DiscoveredAt":{
+          "shape":"DiscoveredAt",
+          "documentation":"<p>The timestamp indicating when the device was discovered.</p>"
+        },
+        "Brand":{
+          "shape":"Brand",
+          "documentation":"<p>The brand of the discovered device.</p>"
+        },
+        "Model":{
+          "shape":"Model",
+          "documentation":"<p>The model of the discovered device.</p>"
+        },
+        "AuthenticationMaterial":{
+          "shape":"AuthMaterialString",
+          "documentation":"<p>The authentication material required for connecting to the discovered device, such as credentials or tokens.</p>"
+        }
+      },
+      "documentation":"<p>Structure containing summary information about a device discovered during a device discovery job.</p>"
+    },
+    "DiscoveryAuthMaterialString":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9A-Za-z_\\-\\+=\\/:; ]+",
+      "sensitive":true
+    },
+    "DiscoveryAuthMaterialType":{
+      "type":"string",
+      "enum":["ZWAVE_INSTALL_CODE"]
+    },
+    "DiscoveryFinishedAt":{"type":"timestamp"},
+    "DiscoveryModification":{
+      "type":"string",
+      "enum":[
+        "DISCOVERED",
+        "UPDATED",
+        "NO_CHANGE"
+      ]
+    },
+    "DiscoveryStartedAt":{"type":"timestamp"},
+    "DiscoveryType":{
+      "type":"string",
+      "enum":[
+        "ZWAVE",
+        "ZIGBEE",
+        "CLOUD",
+        "CUSTOM"
+      ]
+    },
+    "DisplayName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+"
+    },
+    "DurationInMinutes":{
+      "type":"integer",
+      "box":true,
+      "max":1430,
+      "min":1
+    },
+    "EncryptionType":{
+      "type":"string",
+      "enum":[
+        "MANAGED_INTEGRATIONS_DEFAULT_ENCRYPTION",
+        "CUSTOMER_KEY_ENCRYPTION"
+      ]
+    },
+    "EndTime":{"type":"string"},
+    "EndpointAddress":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[A-Za-z0-9._@-]+"
+    },
+    "EndpointConfig":{
+      "type":"structure",
+      "members":{
+        "lambda":{
+          "shape":"LambdaConfig",
+          "documentation":"<p>The Lambda function configuration for the endpoint, used when the endpoint communicates through an AWS Lambda function.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details for an endpoint, which defines how to connect to and communicate with external services.</p>"
+    },
+    "EndpointId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9a-zA-Z]+"
+    },
+    "EndpointSemanticTag":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[0-9a-zA-Z._-]+"
+    },
+    "EndpointType":{
+      "type":"string",
+      "enum":["LAMBDA"]
+    },
+    "ErrorMessage":{"type":"string"},
+    "ErrorResourceId":{"type":"string"},
+    "ErrorResourceType":{"type":"string"},
+    "EventLogConfigurationListDefinition":{
+      "type":"list",
+      "member":{"shape":"EventLogConfigurationSummary"}
+    },
+    "EventLogConfigurationSummary":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The identifier of the event log configuration.</p>"
+        },
+        "ResourceType":{
+          "shape":"SmartHomeResourceType",
+          "documentation":"<p>The type of resource for the event log configuration.</p>"
+        },
+        "ResourceId":{
+          "shape":"SmartHomeResourceId",
+          "documentation":"<p>The identifier of the resource for the event log configuration.</p>"
+        },
+        "EventLogLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The logging level for the event log configuration.</p>"
+        }
+      },
+      "documentation":"<p>List of event log configurations.</p>"
+    },
+    "EventName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[/a-zA-Z0-9\\._ -]+"
+    },
+    "EventType":{
+      "type":"string",
+      "enum":[
+        "DEVICE_COMMAND",
+        "DEVICE_COMMAND_REQUEST",
+        "DEVICE_DISCOVERY_STATUS",
+        "DEVICE_EVENT",
+        "DEVICE_LIFE_CYCLE",
+        "DEVICE_STATE",
+        "DEVICE_OTA",
+        "CONNECTOR_ASSOCIATION",
+        "ACCOUNT_ASSOCIATION",
+        "CONNECTOR_ERROR_REPORT"
+      ]
+    },
+    "ExecutionNumber":{
+      "type":"long",
+      "box":true
+    },
+    "ExponentialRolloutRate":{
+      "type":"structure",
+      "members":{
+        "BaseRatePerMinute":{
+          "shape":"BaseRatePerMinute",
+          "documentation":"<p>The base rate per minute for the rollout of an over-the-air (OTA) task.</p>"
+        },
+        "IncrementFactor":{
+          "shape":"IncrementFactor",
+          "documentation":"<p>The incremental factor for increasing the rollout rate of an over-the-air (OTA) task.</p>"
+        },
+        "RateIncreaseCriteria":{
+          "shape":"RolloutRateIncreaseCriteria",
+          "documentation":"<p>The criteria for increasing the rollout rate of an over-the-air (OTA) task.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing exponential rate of rollout for an over-the-air (OTA) task.</p>"
+    },
+    "ExtrinsicSchemaId":{
+      "type":"string",
+      "max":10,
+      "min":1,
+      "pattern":"0[xX][0-9a-fA-F]+$|^[0-9]+"
+    },
+    "GetAccountAssociationRequest":{
+      "type":"structure",
+      "required":["AccountAssociationId"],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association to retrieve.</p>",
+          "location":"uri",
+          "locationName":"AccountAssociationId"
+        }
+      }
+    },
+    "GetAccountAssociationResponse":{
+      "type":"structure",
+      "required":[
+        "AccountAssociationId",
+        "AssociationState",
+        "OAuthAuthorizationUrl"
+      ],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the retrieved account association.</p>"
+        },
+        "AssociationState":{
+          "shape":"AssociationState",
+          "documentation":"<p>The current status state for the account association.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"AccountAssociationErrorMessage",
+          "documentation":"<p>The error message explaining the current account association error.</p>"
+        },
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination associated with this account association.</p>"
+        },
+        "Name":{
+          "shape":"AccountAssociationName",
+          "documentation":"<p>The name of the account association.</p>"
+        },
+        "Description":{
+          "shape":"AccountAssociationDescription",
+          "documentation":"<p>The description of the account association.</p>"
+        },
+        "Arn":{
+          "shape":"AccountAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the account association.</p>"
+        },
+        "OAuthAuthorizationUrl":{
+          "shape":"OAuthAuthorizationUrl",
+          "documentation":"<p>Third party IoT platform OAuth authorization server URL backed with all the required parameters to perform end-user authentication.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the account association.</p>"
+        }
+      }
+    },
+    "GetCloudConnectorRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the C2C connector.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetCloudConnectorResponse":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "EndpointConfig"
+      ],
+      "members":{
+        "Name":{
+          "shape":"DisplayName",
+          "documentation":"<p>The display name of the C2C connector.</p>"
+        },
+        "EndpointConfig":{
+          "shape":"EndpointConfig",
+          "documentation":"<p>The configuration details for the cloud connector endpoint, including connection parameters and authentication requirements.</p>"
+        },
+        "Description":{
+          "shape":"CloudConnectorDescription",
+          "documentation":"<p>A description of the C2C connector.</p>"
+        },
+        "EndpointType":{
+          "shape":"EndpointType",
+          "documentation":"<p>The type of endpoint used for the cloud connector, which defines how the connector communicates with external services.</p>"
+        },
+        "Id":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The unique identifier of the cloud connector.</p>"
+        },
+        "Type":{
+          "shape":"CloudConnectorType",
+          "documentation":"<p>The type of cloud connector created.</p>"
+        }
+      }
+    },
+    "GetConnectorDestinationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the C2C connector destination.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetConnectorDestinationResponse":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"ConnectorDestinationName",
+          "documentation":"<p>The display name of the connector destination.</p>"
+        },
+        "Description":{
+          "shape":"ConnectorDestinationDescription",
+          "documentation":"<p>A description of the connector destination.</p>"
+        },
+        "CloudConnectorId":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the C2C connector.</p>"
+        },
+        "Id":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The unique identifier of the connector destination.</p>"
+        },
+        "AuthType":{
+          "shape":"AuthType",
+          "documentation":"<p>The authentication type used for the connector destination, which determines how credentials and access are managed.</p>"
+        },
+        "AuthConfig":{
+          "shape":"AuthConfig",
+          "documentation":"<p>The authentication configuration details for the connector destination, including OAuth settings and other authentication parameters.</p>"
+        },
+        "SecretsManager":{
+          "shape":"SecretsManager",
+          "documentation":"<p>The AWS Secrets Manager configuration used to securely store and manage sensitive information for the connector destination.</p>"
+        },
+        "OAuthCompleteRedirectUrl":{
+          "shape":"OAuthCompleteRedirectUrl",
+          "documentation":"<p>The URL where users are redirected after completing the OAuth authorization process for the connector destination.</p>"
+        }
+      }
+    },
+    "GetCredentialLockerRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetCredentialLockerResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker.</p>"
+        },
+        "Arn":{
+          "shape":"CredentialLockerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the credential locker.</p>"
+        },
+        "Name":{
+          "shape":"CredentialLockerName",
+          "documentation":"<p>The name of the credential locker.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CredentialLockerCreatedAt",
+          "documentation":"<p>The timestamp value of when the credential locker requset occurred.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the credential locker.</p>"
+        }
+      }
+    },
+    "GetCustomEndpointRequest":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "GetCustomEndpointResponse":{
+      "type":"structure",
+      "required":["EndpointAddress"],
+      "members":{
+        "EndpointAddress":{
+          "shape":"EndpointAddress",
+          "documentation":"<p>The IoT managed integrations dedicated, custom endpoint for the device to route traffic through.</p>"
+        }
+      }
+    },
+    "GetDefaultEncryptionConfigurationRequest":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "GetDefaultEncryptionConfigurationResponse":{
+      "type":"structure",
+      "required":[
+        "configurationStatus",
+        "encryptionType"
+      ],
+      "members":{
+        "configurationStatus":{
+          "shape":"ConfigurationStatus",
+          "documentation":"<p>Provides the status of the default encryption configuration for an Amazon Web Services account.</p>"
+        },
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of encryption used for the encryption configuration.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Key Amazon Resource Name (ARN) of the AWS KMS key used for KMS encryption if you use <code>KMS_BASED_ENCRYPTION</code>.</p>"
+        }
+      }
+    },
+    "GetDestinationRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        }
+      }
+    },
+    "GetDestinationResponse":{
+      "type":"structure",
+      "members":{
+        "Description":{
+          "shape":"DestinationDescription",
+          "documentation":"<p>The description of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationArn":{
+          "shape":"DeliveryDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationType":{
+          "shape":"DeliveryDestinationType",
+          "documentation":"<p>The destination type for the customer-managed destination.</p>"
+        },
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>"
+        },
+        "RoleArn":{
+          "shape":"DeliveryDestinationRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the delivery destination role.</p>"
+        },
+        "CreatedAt":{
+          "shape":"DestinationCreatedAt",
+          "documentation":"<p>The timestamp value of when the destination creation requset occurred.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"DestinationUpdatedAt",
+          "documentation":"<p>The timestamp value of when the destination update requset occurred.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the customer-managed destination.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags has been deprecated from this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "GetDeviceDiscoveryRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The id of the device discovery job request.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetDeviceDiscoveryResponse":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "Arn",
+        "DiscoveryType",
+        "Status",
+        "StartedAt"
+      ],
+      "members":{
+        "Id":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The id of the device discovery job request.</p>"
+        },
+        "Arn":{
+          "shape":"DeviceDiscoveryArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the device discovery job request.</p>"
+        },
+        "DiscoveryType":{
+          "shape":"DiscoveryType",
+          "documentation":"<p>The discovery type supporting the type of device to be discovered in the device discovery job request.</p>"
+        },
+        "Status":{
+          "shape":"DeviceDiscoveryStatus",
+          "documentation":"<p>The status of the device discovery job request.</p>"
+        },
+        "StartedAt":{
+          "shape":"DiscoveryStartedAt",
+          "documentation":"<p>The timestamp value for the start time of the device discovery.</p>"
+        },
+        "ControllerId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the end-user's IoT hub.</p>"
+        },
+        "ConnectorAssociationId":{
+          "shape":"ConnectorAssociationId",
+          "documentation":"<p>The ID tracking the current discovery process for one connector association.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorAssociationId has been deprecated",
+          "deprecatedSince":"2025-06-25"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association used for the device discovery.</p>"
+        },
+        "FinishedAt":{
+          "shape":"DiscoveryFinishedAt",
+          "documentation":"<p>The timestamp value for the completion time of the device discovery.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the device discovery request.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags have been deprecated from this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "GetEventLogConfigurationRequest":{
+      "type":"structure",
+      "required":["Id"],
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The identifier of the event log configuration.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        }
+      }
+    },
+    "GetEventLogConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The identifier of the event log configuration.</p>"
+        },
+        "ResourceType":{
+          "shape":"SmartHomeResourceType",
+          "documentation":"<p>The type of resource for the event log configuration.</p>"
+        },
+        "ResourceId":{
+          "shape":"SmartHomeResourceId",
+          "documentation":"<p>The identifier of the resource for the event log configuration.</p>"
+        },
+        "EventLogLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The logging level for the event log configuration.</p>"
+        }
+      }
+    },
+    "GetHubConfigurationRequest":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "GetHubConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "HubTokenTimerExpirySettingInSeconds":{
+          "shape":"HubTokenTimerExpirySettingInSeconds",
+          "documentation":"<p>A user-defined integer value that represents the hub token timer expiry setting in seconds.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"HubConfigurationUpdatedAt",
+          "documentation":"<p>The timestamp value of when the hub configuration was updated.</p>"
+        }
+      }
+    },
+    "GetManagedThingCapabilitiesRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the device.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedThingCapabilitiesResponse":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the device.</p>"
+        },
+        "Capabilities":{
+          "shape":"Capabilities",
+          "documentation":"<p>The capabilities of the device such as light bulb.</p>"
+        },
+        "CapabilityReport":{
+          "shape":"CapabilityReport",
+          "documentation":"<p>A report of the capabilities for the managed thing.</p>"
+        }
+      }
+    },
+    "GetManagedThingCertificateRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedThingCertificateResponse":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing.</p>"
+        },
+        "CertificatePem":{
+          "shape":"CertificatePem",
+          "documentation":"<p>The PEM-encoded certificate for the managed thing.</p>"
+        }
+      }
+    },
+    "GetManagedThingConnectivityDataRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of a managed thing.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedThingConnectivityDataResponse":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of a managed thing.</p>"
+        },
+        "Connected":{
+          "shape":"ConnectivityStatus",
+          "documentation":"<p>The connectivity status for a managed thing.</p>"
+        },
+        "Timestamp":{
+          "shape":"ConnectivityTimestamp",
+          "documentation":"<p>The timestamp value of when the connectivity status for a managed thing was last taken.</p>"
+        },
+        "DisconnectReason":{
+          "shape":"DisconnectReasonValue",
+          "documentation":"<p>The reason for the connectivity disconnect with the managed thing.</p>"
+        }
+      }
+    },
+    "GetManagedThingMetaDataRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The managed thing id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedThingMetaDataResponse":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The managed thing id.</p>"
+        },
+        "MetaData":{
+          "shape":"MetaData",
+          "documentation":"<p>The metadata for the managed thing.</p>"
+        }
+      }
+    },
+    "GetManagedThingRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the managed thing.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetManagedThingResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the managed thing.</p>"
+        },
+        "Arn":{
+          "shape":"ManagedThingArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the managed thing.</p>"
+        },
+        "Owner":{
+          "shape":"Owner",
+          "documentation":"<p>Owner of the device, usually an indication of whom the device belongs to. This value should not contain personal identifiable information.</p>"
+        },
+        "CredentialLockerId":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker for the managed thing.</p>"
+        },
+        "AdvertisedProductId":{
+          "shape":"AdvertisedProductId",
+          "documentation":"<p>The id of the advertised product.</p>"
+        },
+        "Role":{
+          "shape":"Role",
+          "documentation":"<p>The type of device used. This will be the Amazon Web Services hub controller, cloud device, or IoT device.</p>"
+        },
+        "ProvisioningStatus":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>The provisioning status of the device in the provisioning workflow for onboarding to IoT managed integrations.</p>"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the managed thing representing the physical device.</p>"
+        },
+        "Model":{
+          "shape":"Model",
+          "documentation":"<p>The model of the device.</p>"
+        },
+        "Brand":{
+          "shape":"Brand",
+          "documentation":"<p>The brand of the device.</p>"
+        },
+        "SerialNumber":{
+          "shape":"SerialNumber",
+          "documentation":"<p>The serial number of the device.</p>"
+        },
+        "UniversalProductCode":{
+          "shape":"UniversalProductCode",
+          "documentation":"<p>The universal product code (UPC) of the device model. The UPC is typically used in the United States of America and Canada.</p>"
+        },
+        "InternationalArticleNumber":{
+          "shape":"InternationalArticleNumber",
+          "documentation":"<p>The unique 13 digit number that identifies the managed thing.</p>"
+        },
+        "ConnectorPolicyId":{
+          "shape":"ConnectorPolicyId",
+          "documentation":"<p>The id of the connector policy.</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorPolicyId is deprecated",
+          "deprecatedSince":"2025-06-25"
+        },
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination associated with this managed thing.</p>"
+        },
+        "ConnectorDeviceId":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>The third-party device id as defined by the connector. This device id must not contain personal identifiable information (PII).</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>"
+        },
+        "DeviceSpecificKey":{
+          "shape":"DeviceSpecificKey",
+          "documentation":"<p>A Zwave device-specific key used during device activation.</p> <note> <p>This parameter is used for Zwave devices only.</p> </note>"
+        },
+        "MacAddress":{
+          "shape":"MacAddress",
+          "documentation":"<p>The media access control (MAC) address for the device represented by the managed thing.</p> <note> <p>This parameter is used for Zigbee devices only.</p> </note>"
+        },
+        "ParentControllerId":{
+          "shape":"ParentControllerId",
+          "documentation":"<p>Id of the controller device used for the discovery job.</p>"
+        },
+        "Classification":{
+          "shape":"Classification",
+          "documentation":"<p>The classification of the managed thing such as light bulb or thermostat.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the device creation request occurred.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"UpdatedAt",
+          "documentation":"<p>The timestamp value of when the managed thing was last updated at.</p>"
+        },
+        "ActivatedAt":{
+          "shape":"SetupAt",
+          "documentation":"<p>The timestampe value of when the device was activated.</p>"
+        },
+        "HubNetworkMode":{
+          "shape":"HubNetworkMode",
+          "documentation":"<p>The network mode for the hub-connected device.</p>"
+        },
+        "MetaData":{
+          "shape":"MetaData",
+          "documentation":"<p>The metadata for the managed thing.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the managed thing.</p>"
+        }
+      }
+    },
+    "GetManagedThingStateRequest":{
+      "type":"structure",
+      "required":["ManagedThingId"],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the device.</p>",
+          "location":"uri",
+          "locationName":"ManagedThingId"
+        }
+      }
+    },
+    "GetManagedThingStateResponse":{
+      "type":"structure",
+      "required":["Endpoints"],
+      "members":{
+        "Endpoints":{
+          "shape":"StateEndpoints",
+          "documentation":"<p>The device endpoint.</p>"
+        }
+      }
+    },
+    "GetNotificationConfigurationRequest":{
+      "type":"structure",
+      "required":["EventType"],
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"EventType"
+        }
+      }
+    },
+    "GetNotificationConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>"
+        },
+        "DestinationName":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the destination for the notification configuration.</p>"
+        },
+        "CreatedAt":{
+          "shape":"NotificationConfigurationCreatedAt",
+          "documentation":"<p>The timestamp value of when the notification configuration was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"NotificationConfigurationUpdatedAt",
+          "documentation":"<p>The timestamp value of when the notification configuration was last updated.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the notification configuration.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags has been deprecated for this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "GetOtaTaskConfigurationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The over-the-air (OTA) task configuration id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetOtaTaskConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The over-the-air (OTA) task configuration id.</p>"
+        },
+        "Name":{
+          "shape":"OtaTaskConfigurationName",
+          "documentation":"<p>The name of the over-the-air (OTA) task configuration.</p>"
+        },
+        "PushConfig":{
+          "shape":"PushConfig",
+          "documentation":"<p>Describes the type of configuration used for the over-the-air (OTA) task.</p>"
+        },
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>A description of the over-the-air (OTA) task configuration.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task configuration was created at.</p>"
+        }
+      }
+    },
+    "GetOtaTaskRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The over-the-air (OTA) task id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetOtaTaskResponse":{
+      "type":"structure",
+      "members":{
+        "TaskId":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The id of the over-the-air (OTA) task.</p>"
+        },
+        "TaskArn":{
+          "shape":"OtaTaskArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the over-the-air (OTA) task</p>"
+        },
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>The description of the over-the-air (OTA) task.</p>"
+        },
+        "S3Url":{
+          "shape":"S3Url",
+          "documentation":"<p>The URL to the Amazon S3 bucket where the over-the-air (OTA) task is stored.</p>"
+        },
+        "Protocol":{
+          "shape":"OtaProtocol",
+          "documentation":"<p>The connection protocol the over-the-air (OTA) task uses to update the device.</p>"
+        },
+        "OtaType":{
+          "shape":"OtaType",
+          "documentation":"<p>The frequency type for the over-the-air (OTA) task.</p>"
+        },
+        "OtaTargetQueryString":{
+          "shape":"OtaTargetQueryString",
+          "documentation":"<p>The query string to add things to the thing group.</p>"
+        },
+        "OtaMechanism":{
+          "shape":"OtaMechanism",
+          "documentation":"<p>The deployment mechanism for the over-the-air (OTA) task.</p>"
+        },
+        "Target":{
+          "shape":"Target",
+          "documentation":"<p>The device targeted for the over-the-air (OTA) task.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task was created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"LastUpdatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task was last updated at.</p>"
+        },
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier for the over-the-air (OTA) task configuration.</p>"
+        },
+        "TaskProcessingDetails":{
+          "shape":"TaskProcessingDetails",
+          "documentation":"<p>The processing details of all over-the-air (OTA) tasks.</p>"
+        },
+        "OtaSchedulingConfig":{"shape":"OtaTaskSchedulingConfig"},
+        "OtaTaskExecutionRetryConfig":{"shape":"OtaTaskExecutionRetryConfig"},
+        "Status":{
+          "shape":"OtaStatus",
+          "documentation":"<p>The status of the over-the-air (OTA) task.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the over-the-air (OTA) task.</p>"
+        }
+      }
+    },
+    "GetProvisioningProfileRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ProvisioningProfileId",
+          "documentation":"<p>The provisioning template the device uses for the provisioning process.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetProvisioningProfileResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"ProvisioningProfileArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the provisioning template used in the provisioning profile.</p>"
+        },
+        "Name":{
+          "shape":"ProvisioningProfileName",
+          "documentation":"<p>The name of the provisioning template.</p>"
+        },
+        "ProvisioningType":{
+          "shape":"ProvisioningType",
+          "documentation":"<p>The type of provisioning workflow the device uses for onboarding to IoT managed integrations.</p>"
+        },
+        "Id":{
+          "shape":"ProvisioningProfileId",
+          "documentation":"<p>The provisioning profile id.</p>"
+        },
+        "ClaimCertificate":{
+          "shape":"ClaimCertificate",
+          "documentation":"<p>The id of the claim certificate.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the provisioning profile.</p>"
+        }
+      }
+    },
+    "GetRuntimeLogConfigurationRequest":{
+      "type":"structure",
+      "required":["ManagedThingId"],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id for a managed thing.</p>",
+          "location":"uri",
+          "locationName":"ManagedThingId"
+        }
+      }
+    },
+    "GetRuntimeLogConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id for a managed thing.</p>"
+        },
+        "RuntimeLogConfigurations":{
+          "shape":"RuntimeLogConfigurations",
+          "documentation":"<p>The runtime log configuration for a managed thing.</p>"
+        }
+      }
+    },
+    "GetSchemaVersionRequest":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "SchemaVersionedId"
+      ],
+      "members":{
+        "Type":{
+          "shape":"SchemaVersionType",
+          "documentation":"<p>The type of schema version.</p>",
+          "location":"uri",
+          "locationName":"Type"
+        },
+        "SchemaVersionedId":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>Schema id with a version specified. If the version is missing, it defaults to latest version.</p>",
+          "location":"uri",
+          "locationName":"SchemaVersionedId"
+        },
+        "Format":{
+          "shape":"SchemaVersionFormat",
+          "documentation":"<p>The format of the schema version.</p>",
+          "location":"querystring",
+          "locationName":"Format"
+        }
+      }
+    },
+    "GetSchemaVersionResponse":{
+      "type":"structure",
+      "members":{
+        "SchemaId":{
+          "shape":"SchemaId",
+          "documentation":"<p>The id of the schema version.</p>"
+        },
+        "Type":{
+          "shape":"SchemaVersionType",
+          "documentation":"<p>The type of schema version.</p>"
+        },
+        "Description":{
+          "shape":"SchemaVersionDescription",
+          "documentation":"<p>The description of the schema version.</p>"
+        },
+        "Namespace":{
+          "shape":"SchemaVersionNamespaceName",
+          "documentation":"<p>The name of the schema version.</p>"
+        },
+        "SemanticVersion":{
+          "shape":"SchemaVersionVersion",
+          "documentation":"<p>The schema version. If this is left blank, it defaults to the latest version.</p>"
+        },
+        "Visibility":{
+          "shape":"SchemaVersionVisibility",
+          "documentation":"<p>The visibility of the schema version.</p>"
+        },
+        "Schema":{
+          "shape":"SchemaVersionSchema",
+          "documentation":"<p>The schema of the schema version.</p>"
+        }
+      }
+    },
+    "HubConfigurationUpdatedAt":{"type":"timestamp"},
+    "HubNetworkMode":{
+      "type":"string",
+      "enum":[
+        "STANDARD",
+        "NETWORK_WIDE_EXCLUSION"
+      ]
+    },
+    "HubTokenTimerExpirySettingInSeconds":{
+      "type":"long",
+      "box":true,
+      "min":1
+    },
+    "InProgressTimeoutInMinutes":{
+      "type":"long",
+      "box":true,
+      "max":10080,
+      "min":1
+    },
+    "IncrementFactor":{
+      "type":"double",
+      "box":true,
+      "max":5,
+      "min":1.1
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalFailureException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>An unexpected error has occurred.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>Internal error from the service that indicates an unexpected error or that the service is unavailable.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "InternationalArticleNumber":{
+      "type":"string",
+      "max":13,
+      "min":8,
+      "pattern":"[0-9]+",
+      "sensitive":true
+    },
+    "InvalidRequestException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The request is not valid.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "IoTManagedIntegrationsResourceARN":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:(managed-thing|provisioning-profile|ota-task|credential-locker|account-association)/[0-9a-zA-Z]+"
+    },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"arn:aws:kms:[0-9a-zA-Z-]+:[0-9]+:key/[0-9a-zA-Z-]+"
+    },
+    "LambdaArn":{
+      "type":"string",
+      "pattern":"(arn:aws:lambda:[0-9a-zA-Z-]+:[0-9]+:function:)?([a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?)"
+    },
+    "LambdaConfig":{
+      "type":"structure",
+      "required":["arn"],
+      "members":{
+        "arn":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function used as an endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for an AWS Lambda function used as an endpoint for a cloud connector.</p>"
+    },
+    "LastUpdatedAt":{"type":"timestamp"},
+    "LimitExceededException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The request exceeds a service limit or quota. Adjust your request parameters and try again.</p>",
+      "error":{
+        "httpStatusCode":410,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ListAccountAssociationsRequest":{
+      "type":"structure",
+      "members":{
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination to filter account associations by.</p>",
+          "location":"querystring",
+          "locationName":"ConnectorDestinationId"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of account associations to return in a single response.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListAccountAssociationsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"AccountAssociationListDefinition",
+          "documentation":"<p>The list of account associations that match the specified criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results when there are more account associations than can be returned in a single response.</p>"
+        }
+      }
+    },
+    "ListCloudConnectorsRequest":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"CloudConnectorType",
+          "documentation":"<p>The type of cloud connectors to filter by when listing available connectors.</p>",
+          "location":"querystring",
+          "locationName":"Type"
+        },
+        "LambdaArn":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function to filter cloud connectors by.</p>",
+          "location":"querystring",
+          "locationName":"LambdaArn"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListCloudConnectorsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ConnectorList",
+          "documentation":"<p>The list of connectors.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListConnectorDestinationsRequest":{
+      "type":"structure",
+      "members":{
+        "CloudConnectorId":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The identifier of the cloud connector to filter connector destinations by.</p>",
+          "location":"querystring",
+          "locationName":"CloudConnectorId"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of connector destinations to return in a single response.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListConnectorDestinationsResponse":{
+      "type":"structure",
+      "members":{
+        "ConnectorDestinationList":{
+          "shape":"ConnectorDestinationListDefinition",
+          "documentation":"<p>The list of connector destinations that match the specified criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results when there are more connector destinations than can be returned in a single response.</p>"
+        }
+      }
+    },
+    "ListCredentialLockersRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListCredentialLockersResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"CredentialLockerListDefinition",
+          "documentation":"<p>The list of credential lockers.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListDestinationsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListDestinationsResponse":{
+      "type":"structure",
+      "members":{
+        "DestinationList":{
+          "shape":"DestinationListDefinition",
+          "documentation":"<p>The list of destinations.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListDeviceDiscoveriesRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of device discovery jobs to return in a single response.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "TypeFilter":{
+          "shape":"DiscoveryType",
+          "documentation":"<p>The discovery type to filter device discovery jobs by.</p>",
+          "location":"querystring",
+          "locationName":"TypeFilter"
+        },
+        "StatusFilter":{
+          "shape":"DeviceDiscoveryStatus",
+          "documentation":"<p>The status to filter device discovery jobs by.</p>",
+          "location":"querystring",
+          "locationName":"StatusFilter"
+        }
+      }
+    },
+    "ListDeviceDiscoveriesResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"DeviceDiscoveryListDefinition",
+          "documentation":"<p>The list of device discovery jobs that match the specified criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results when there are more device discovery jobs than can be returned in a single response.</p>"
+        }
+      }
+    },
+    "ListDiscoveredDevicesRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The identifier of the device discovery job to list discovered devices for.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of discovered devices to return in a single response.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListDiscoveredDevicesResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"DiscoveredDeviceListDefinition",
+          "documentation":"<p>The list of discovered devices that match the specified criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results when there are more discovered devices than can be returned in a single response.</p>"
+        }
+      }
+    },
+    "ListEventLogConfigurationsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListEventLogConfigurationsResponse":{
+      "type":"structure",
+      "members":{
+        "EventLogConfigurationList":{
+          "shape":"EventLogConfigurationListDefinition",
+          "documentation":"<p>A list of each event log configuration and pertinent information.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListManagedThingAccountAssociationsRequest":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing to list account associations for.</p>",
+          "location":"querystring",
+          "locationName":"ManagedThingId"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association to filter results by. When specified, only associations with this account association ID will be returned.</p>",
+          "location":"querystring",
+          "locationName":"AccountAssociationId"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of account associations to return in a single response.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token used for pagination of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListManagedThingAccountAssociationsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ManagedThingAssociationList",
+          "documentation":"<p>The list of managed thing associations that match the specified criteria, including the managed thing ID and account association ID for each association.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A token used for pagination of results when there are more account associations than can be returned in a single response.</p>"
+        }
+      }
+    },
+    "ListManagedThingSchemasRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The managed thing id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "EndpointIdFilter":{
+          "shape":"EndpointId",
+          "documentation":"<p>Filter on an endpoint id.</p>",
+          "location":"querystring",
+          "locationName":"EndpointIdFilter"
+        },
+        "CapabilityIdFilter":{
+          "shape":"CapabilityId",
+          "documentation":"<p>Filter on a capability id.</p>",
+          "location":"querystring",
+          "locationName":"CapabilityIdFilter"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListManagedThingSchemasResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ManagedThingSchemaListDefinition",
+          "documentation":"<p>The list of managed thing schemas.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListManagedThingsRequest":{
+      "type":"structure",
+      "members":{
+        "OwnerFilter":{
+          "shape":"Owner",
+          "documentation":"<p>Filter on device owners when listing managed things.</p>",
+          "location":"querystring",
+          "locationName":"OwnerFilter"
+        },
+        "CredentialLockerFilter":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>Filter on a credential locker for a managed thing.</p>",
+          "location":"querystring",
+          "locationName":"CredentialLockerFilter"
+        },
+        "RoleFilter":{
+          "shape":"Role",
+          "documentation":"<p>Filter on the type of device used. This will be the Amazon Web Services hub controller, cloud device, or IoT device.</p>",
+          "location":"querystring",
+          "locationName":"RoleFilter"
+        },
+        "ParentControllerIdentifierFilter":{
+          "shape":"ParentControllerId",
+          "documentation":"<p>Filter on a parent controller id for a managed thing.</p>",
+          "location":"querystring",
+          "locationName":"ParentControllerIdentifierFilter"
+        },
+        "ConnectorPolicyIdFilter":{
+          "shape":"ConnectorPolicyId",
+          "documentation":"<p>Filter on a connector policy id for a managed thing.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorPolicyIdFilter is deprecated",
+          "deprecatedSince":"06-25-2025",
+          "location":"querystring",
+          "locationName":"ConnectorPolicyIdFilter"
+        },
+        "ConnectorDestinationIdFilter":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>Filter managed things by the connector destination ID they are associated with.</p>",
+          "location":"querystring",
+          "locationName":"ConnectorDestinationIdFilter"
+        },
+        "ConnectorDeviceIdFilter":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>Filter managed things by the connector device ID they are associated with. When specified, only managed things with this connector device ID will be returned.</p>",
+          "location":"querystring",
+          "locationName":"ConnectorDeviceIdFilter"
+        },
+        "SerialNumberFilter":{
+          "shape":"SerialNumber",
+          "documentation":"<p>Filter on the serial number of the device.</p>",
+          "location":"querystring",
+          "locationName":"SerialNumberFilter"
+        },
+        "ProvisioningStatusFilter":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>Filter on the status of the device.</p>",
+          "location":"querystring",
+          "locationName":"ProvisioningStatusFilter"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListManagedThingsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ManagedThingListDefinition",
+          "documentation":"<p>The list of managed things.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListNotificationConfigurationsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListNotificationConfigurationsResponse":{
+      "type":"structure",
+      "members":{
+        "NotificationConfigurationList":{
+          "shape":"NotificationConfigurationListDefinition",
+          "documentation":"<p>The list of notification configurations.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListOtaTaskConfigurationsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListOtaTaskConfigurationsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"OtaTaskConfigurationListDefinition",
+          "documentation":"<p>The list of the over-the-air (OTA) task configurations.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListOtaTaskExecutionsRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The over-the-air (OTA) task id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "NextToken":{
+          "shape":"OtaNextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListOtaTaskExecutionsResponse":{
+      "type":"structure",
+      "members":{
+        "ExecutionSummaries":{
+          "shape":"OtaTaskExecutionSummariesListDefinition",
+          "documentation":"<p>A list of all of the over-the-air (OTA) task executions.</p>"
+        },
+        "NextToken":{
+          "shape":"OtaNextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListOtaTasksRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"OtaNextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListOtaTasksResponse":{
+      "type":"structure",
+      "members":{
+        "Tasks":{
+          "shape":"OtaTaskListDefinition",
+          "documentation":"<p>A list of all of the over-the-air (OTA) tasks.</p>"
+        },
+        "NextToken":{
+          "shape":"OtaNextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListProvisioningProfilesRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListProvisioningProfilesResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"ProvisioningProfileListDefinition",
+          "documentation":"<p>The list of provisioning profiles.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListSchemaVersionsRequest":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"SchemaVersionType",
+          "documentation":"<p>Filter on the type of schema version.</p>",
+          "location":"uri",
+          "locationName":"Type"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return at one time.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "SchemaId":{
+          "shape":"SchemaId",
+          "documentation":"<p>Filter on the id of the schema version.</p>",
+          "location":"querystring",
+          "locationName":"SchemaIdFilter"
+        },
+        "Namespace":{
+          "shape":"SchemaVersionNamespaceName",
+          "documentation":"<p>Filter on the name of the schema version.</p>",
+          "location":"querystring",
+          "locationName":"NamespaceFilter"
+        },
+        "Visibility":{
+          "shape":"SchemaVersionVisibility",
+          "documentation":"<p>The visibility of the schema version.</p>",
+          "location":"querystring",
+          "locationName":"VisibilityFilter"
+        },
+        "SemanticVersion":{
+          "shape":"SchemaVersionVersion",
+          "documentation":"<p>The schema version. If this is left blank, it defaults to the latest version.</p>",
+          "location":"querystring",
+          "locationName":"SemanticVersionFilter"
+        }
+      }
+    },
+    "ListSchemaVersionsResponse":{
+      "type":"structure",
+      "members":{
+        "Items":{
+          "shape":"SchemaVersionList",
+          "documentation":"<p>The list of schema versions.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that can be used to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"IoTManagedIntegrationsResourceARN",
+          "documentation":"<p>The ARN of the resource for which to list tags.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the resource.</p>"
+        }
+      }
+    },
+    "LocalStoreFileRotationMaxBytes":{
+      "type":"integer",
+      "box":true
+    },
+    "LocalStoreFileRotationMaxFiles":{
+      "type":"integer",
+      "box":true
+    },
+    "LocalStoreLocation":{"type":"string"},
+    "LogConfigurationId":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[A-Za-z0-9]+"
+    },
+    "LogLevel":{
+      "type":"string",
+      "enum":[
+        "DEBUG",
+        "ERROR",
+        "INFO",
+        "WARN"
+      ]
+    },
+    "MacAddress":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "sensitive":true
+    },
+    "ManagedThingArn":{
+      "type":"string",
+      "max":1011,
+      "min":32,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:managed-thing/([0-9a-zA-Z:_-])+"
+    },
+    "ManagedThingAssociation":{
+      "type":"structure",
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing in the association.</p>"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association in the association.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing an association between a managed thing and an account association, which connects a device to a third-party account.</p>"
+    },
+    "ManagedThingAssociationList":{
+      "type":"list",
+      "member":{"shape":"ManagedThingAssociation"}
+    },
+    "ManagedThingId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9:_-]*"
+    },
+    "ManagedThingListDefinition":{
+      "type":"list",
+      "member":{"shape":"ManagedThingSummary"}
+    },
+    "ManagedThingSchemaListDefinition":{
+      "type":"list",
+      "member":{"shape":"ManagedThingSchemaListItem"}
+    },
+    "ManagedThingSchemaListItem":{
+      "type":"structure",
+      "members":{
+        "EndpointId":{
+          "shape":"EndpointId",
+          "documentation":"<p>The id of the endpoint for a managed thing.</p>"
+        },
+        "CapabilityId":{
+          "shape":"CapabilityId",
+          "documentation":"<p>The id of the capability for a managed thing.</p>"
+        },
+        "Schema":{
+          "shape":"ValidationSchema",
+          "documentation":"<p>The validation schema for one schema item associated with a managed thing.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one schema item associated with a managed thing.</p>"
+    },
+    "ManagedThingSummary":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the device.</p>"
+        },
+        "Arn":{
+          "shape":"ManagedThingArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the managed thing.</p>"
+        },
+        "AdvertisedProductId":{
+          "shape":"AdvertisedProductId",
+          "documentation":"<p>The id of the advertised product.</p>"
+        },
+        "Brand":{
+          "shape":"Brand",
+          "documentation":"<p>The brand of the device.</p>"
+        },
+        "Classification":{
+          "shape":"Classification",
+          "documentation":"<p>The classification of the managed thing such as light bulb or thermostat.</p>"
+        },
+        "ConnectorDeviceId":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>The third-party device id as defined by the connector. This device id must not contain personal identifiable information (PII).</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>"
+        },
+        "ConnectorPolicyId":{
+          "shape":"ConnectorPolicyId",
+          "documentation":"<p>The id of the connector policy.</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorPolicyId has been deprecated",
+          "deprecatedSince":"06-25-2025"
+        },
+        "ConnectorDestinationId":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The identifier of the connector destination associated with this managed thing, if applicable.</p>"
+        },
+        "Model":{
+          "shape":"Model",
+          "documentation":"<p>The model of the device.</p>"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the managed thing representing the physical device.</p>"
+        },
+        "Owner":{
+          "shape":"Owner",
+          "documentation":"<p>Owner of the device, usually an indication of whom the device belongs to. This value should not contain personal identifiable information.</p>"
+        },
+        "CredentialLockerId":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential locker for the managed thing.</p>"
+        },
+        "ParentControllerId":{
+          "shape":"ParentControllerId",
+          "documentation":"<p>Id of the controller device used for the discovery job.</p>"
+        },
+        "ProvisioningStatus":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>The provisioning status of the device in the provisioning workflow for onboarding to IoT managed integrations.</p>"
+        },
+        "Role":{
+          "shape":"Role",
+          "documentation":"<p>The type of device used. This will be the Amazon Web Services hub controller, cloud device, or IoT device.</p>"
+        },
+        "SerialNumber":{
+          "shape":"SerialNumber",
+          "documentation":"<p>The serial number of the device.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the device creation request occurred.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the managed thing was last updated at.</p>"
+        },
+        "ActivatedAt":{
+          "shape":"SetupAt",
+          "documentation":"<p>The timestampe value of when the managed thing was activated at.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one managed thing.</p>"
+    },
+    "MatterAttributeId":{
+      "type":"string",
+      "max":24,
+      "min":1,
+      "pattern":"0[xX][0-9a-fA-F]+$|^[0-9]+"
+    },
+    "MatterAttributes":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true,
+      "sensitive":true
+    },
+    "MatterCapabilityReport":{
+      "type":"structure",
+      "required":[
+        "version",
+        "endpoints"
+      ],
+      "members":{
+        "version":{
+          "shape":"CapabilityReportVersion",
+          "documentation":"<p>The version of the capability report.</p>"
+        },
+        "nodeId":{
+          "shape":"NodeId",
+          "documentation":"<p>The numeric identifier of the node.</p>"
+        },
+        "endpoints":{
+          "shape":"MatterCapabilityReportEndpoints",
+          "documentation":"<p>The endpoints used in the capability report.</p>"
+        }
+      },
+      "documentation":"<p>Matter based capability report.</p>"
+    },
+    "MatterCapabilityReportAttribute":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"MatterAttributeId",
+          "documentation":"<p>The id of the Matter attribute.</p>"
+        },
+        "name":{
+          "shape":"ActionName",
+          "documentation":"<p>Name for the Amazon Web Services Matter capability report attribute.</p>"
+        },
+        "value":{
+          "shape":"MatterCapabilityReportAttributeValue",
+          "documentation":"<p>Value for the Amazon Web Services Matter capability report attribute.</p>"
+        }
+      },
+      "documentation":"<p>Matter attribute used in capability report.</p>"
+    },
+    "MatterCapabilityReportAttributeValue":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true
+    },
+    "MatterCapabilityReportAttributes":{
+      "type":"list",
+      "member":{"shape":"MatterCapabilityReportAttribute"},
+      "max":100,
+      "min":0
+    },
+    "MatterCapabilityReportCluster":{
+      "type":"structure",
+      "required":[
+        "id",
+        "revision"
+      ],
+      "members":{
+        "id":{
+          "shape":"ClusterId",
+          "documentation":"<p>The id of the Amazon Web Services Matter capability report cluster.</p>"
+        },
+        "revision":{
+          "shape":"MatterCapabilityReportClusterRevisionId",
+          "documentation":"<p>The id of the revision for the Amazon Web Services Matter capability report.</p>"
+        },
+        "publicId":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>The id of the schema version.</p>"
+        },
+        "name":{
+          "shape":"CapabilityName",
+          "documentation":"<p>The capability name used in the Amazon Web Services Matter capability report.</p>"
+        },
+        "specVersion":{
+          "shape":"SpecVersion",
+          "documentation":"<p>The spec version used in the Amazon Web Services Matter capability report.</p>"
+        },
+        "attributes":{
+          "shape":"MatterCapabilityReportAttributes",
+          "documentation":"<p>The attributes of the Amazon Web Services Matter capability report.</p>"
+        },
+        "commands":{
+          "shape":"MatterCapabilityReportCommands",
+          "documentation":"<p>The commands used with the Amazon Web Services Matter capability report.</p>"
+        },
+        "events":{
+          "shape":"MatterCapabilityReportEvents",
+          "documentation":"<p>The events used with the Amazon Web Services Matter capability report.</p>"
+        },
+        "featureMap":{
+          "shape":"MatterCapabilityReportFeatureMap",
+          "documentation":"<p>32 bit-map used to indicate which features a cluster supports.</p>"
+        },
+        "generatedCommands":{
+          "shape":"MatterCapabilityReportGeneratedCommands",
+          "documentation":"<p>Matter clusters used in capability report.</p>"
+        },
+        "fabricIndex":{
+          "shape":"MatterCapabilityReportFabricIndex",
+          "documentation":"<p>The fabric index for the Amazon Web Services Matter capability report.</p>"
+        }
+      },
+      "documentation":"<p>Capability used in Matter capability report.</p>"
+    },
+    "MatterCapabilityReportClusterRevisionId":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "MatterCapabilityReportClusters":{
+      "type":"list",
+      "member":{"shape":"MatterCapabilityReportCluster"},
+      "max":50,
+      "min":0
+    },
+    "MatterCapabilityReportCommands":{
+      "type":"list",
+      "member":{"shape":"MatterCommandId"},
+      "max":100,
+      "min":0
+    },
+    "MatterCapabilityReportEndpoint":{
+      "type":"structure",
+      "required":[
+        "id",
+        "deviceTypes",
+        "clusters"
+      ],
+      "members":{
+        "id":{
+          "shape":"EndpointId",
+          "documentation":"<p>The id of the Amazon Web Services Matter capability report endpoint.</p>"
+        },
+        "deviceTypes":{
+          "shape":"DeviceTypes",
+          "documentation":"<p>The type of device.</p>"
+        },
+        "clusters":{
+          "shape":"MatterCapabilityReportClusters",
+          "documentation":"<p>Matter clusters used in capability report.</p>"
+        },
+        "parts":{
+          "shape":"MatterCapabilityReportEndpointParts",
+          "documentation":"<p>Heirachy of child endpoints contained in the given endpoint.</p>"
+        },
+        "semanticTags":{
+          "shape":"MatterCapabilityReportEndpointSemanticTags",
+          "documentation":"<p>Semantic information related to endpoint.</p>"
+        },
+        "clientClusters":{
+          "shape":"MatterCapabilityReportEndpointClientClusters",
+          "documentation":"<p>Semantic information related to endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Matter endpoint used in capability report.</p>"
+    },
+    "MatterCapabilityReportEndpointClientClusters":{
+      "type":"list",
+      "member":{"shape":"ClusterId"},
+      "max":32,
+      "min":0
+    },
+    "MatterCapabilityReportEndpointParts":{
+      "type":"list",
+      "member":{"shape":"EndpointId"},
+      "max":32,
+      "min":0
+    },
+    "MatterCapabilityReportEndpointSemanticTags":{
+      "type":"list",
+      "member":{"shape":"EndpointSemanticTag"},
+      "max":32,
+      "min":0
+    },
+    "MatterCapabilityReportEndpoints":{
+      "type":"list",
+      "member":{"shape":"MatterCapabilityReportEndpoint"},
+      "max":50,
+      "min":0
+    },
+    "MatterCapabilityReportEvents":{
+      "type":"list",
+      "member":{"shape":"MatterEventId"},
+      "max":100,
+      "min":0
+    },
+    "MatterCapabilityReportFabricIndex":{
+      "type":"integer",
+      "box":true,
+      "max":4096,
+      "min":0
+    },
+    "MatterCapabilityReportFeatureMap":{
+      "type":"long",
+      "box":true,
+      "max":4294967295,
+      "min":0
+    },
+    "MatterCapabilityReportGeneratedCommands":{
+      "type":"list",
+      "member":{"shape":"MatterCommandId"},
+      "max":50,
+      "min":0
+    },
+    "MatterCluster":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"ClusterId",
+          "documentation":"<p>The cluster id.</p>"
+        },
+        "attributes":{
+          "shape":"MatterAttributes",
+          "documentation":"<p>The Matter attributes.</p>"
+        },
+        "commands":{
+          "shape":"MatterCommands",
+          "documentation":"<p>Describe the Matter commands with the Matter command identifier mapped to the command fields.</p>"
+        },
+        "events":{
+          "shape":"MatterEvents",
+          "documentation":"<p>Describe the Matter events with the Matter event identifier mapped to the event fields.</p>"
+        }
+      },
+      "documentation":"<p>Describe a Matter cluster with an id, and the relevant attributes, commands, and events.</p>"
+    },
+    "MatterClusters":{
+      "type":"list",
+      "member":{"shape":"MatterCluster"},
+      "max":5,
+      "min":1
+    },
+    "MatterCommandId":{
+      "type":"string",
+      "max":24,
+      "min":1,
+      "pattern":"0[xX][0-9a-fA-F]+$|^[0-9]+"
+    },
+    "MatterCommands":{
+      "type":"map",
+      "key":{"shape":"MatterCommandId"},
+      "value":{"shape":"MatterFields"},
+      "max":5,
+      "min":1
+    },
+    "MatterEndpoint":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"EndpointId",
+          "documentation":"<p>The Matter endpoint id.</p>"
+        },
+        "clusters":{
+          "shape":"MatterClusters",
+          "documentation":"<p>A list of Matter clusters for a managed thing.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing a managed thing.</p>"
+    },
+    "MatterEventId":{
+      "type":"string",
+      "max":24,
+      "min":1,
+      "pattern":"0[xX][0-9a-fA-F]+$|^[0-9]+"
+    },
+    "MatterEvents":{
+      "type":"map",
+      "key":{"shape":"MatterEventId"},
+      "value":{"shape":"MatterFields"},
+      "max":5,
+      "min":1
+    },
+    "MatterFields":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true,
+      "sensitive":true
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "MaximumPerMinute":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "MetaData":{
+      "type":"map",
+      "key":{"shape":"AttributeName"},
+      "value":{"shape":"AttributeValue"},
+      "max":50,
+      "min":1
+    },
+    "MinNumberOfExecutedThings":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "MinNumberOfRetries":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":0
+    },
+    "Model":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+",
+      "sensitive":true
+    },
+    "Name":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\p{L}\\p{N} ._-]+"
+    },
+    "NextToken":{
+      "type":"string",
+      "max":65535,
+      "min":1,
+      "pattern":"[a-zA-Z0-9=_-]+"
+    },
+    "NodeId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9=_.,@\\+\\-/]+"
+    },
+    "NotificationConfigurationCreatedAt":{"type":"timestamp"},
+    "NotificationConfigurationListDefinition":{
+      "type":"list",
+      "member":{"shape":"NotificationConfigurationSummary"}
+    },
+    "NotificationConfigurationSummary":{
+      "type":"structure",
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>"
+        },
+        "DestinationName":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the destination for the notification configuration.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing a notification configuration.</p>"
+    },
+    "NotificationConfigurationUpdatedAt":{"type":"timestamp"},
+    "NumberOfNotifiedThings":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "NumberOfSucceededThings":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "OAuthAuthorizationUrl":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"(https)://.*",
+      "sensitive":true
+    },
+    "OAuthCompleteRedirectUrl":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"(http|https)://.*"
+    },
+    "OAuthConfig":{
+      "type":"structure",
+      "required":[
+        "authUrl",
+        "tokenUrl",
+        "tokenEndpointAuthenticationScheme"
+      ],
+      "members":{
+        "authUrl":{
+          "shape":"AuthUrl",
+          "documentation":"<p>The authorization URL for the OAuth service, where users are directed to authenticate and authorize access.</p>"
+        },
+        "tokenUrl":{
+          "shape":"TokenUrl",
+          "documentation":"<p>The token URL for the OAuth service, where authorization codes are exchanged for access tokens.</p>"
+        },
+        "scope":{
+          "shape":"String",
+          "documentation":"<p>The OAuth scopes requested during authorization, which define the permissions granted to the application.</p>"
+        },
+        "tokenEndpointAuthenticationScheme":{
+          "shape":"TokenEndpointAuthenticationScheme",
+          "documentation":"<p>The authentication scheme used when requesting tokens from the token endpoint.</p>"
+        },
+        "oAuthCompleteRedirectUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL where users are redirected after completing the OAuth authorization process.</p>"
+        },
+        "proactiveRefreshTokenRenewal":{
+          "shape":"ProactiveRefreshTokenRenewal",
+          "documentation":"<p>Configuration for proactively refreshing OAuth tokens before they expire.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for OAuth authentication with a third-party service.</p>"
+    },
+    "OAuthUpdate":{
+      "type":"structure",
+      "members":{
+        "oAuthCompleteRedirectUrl":{
+          "shape":"String",
+          "documentation":"<p>The updated URL where users are redirected after completing the OAuth authorization process.</p>"
+        },
+        "proactiveRefreshTokenRenewal":{
+          "shape":"ProactiveRefreshTokenRenewal",
+          "documentation":"<p>Updated configuration for proactively refreshing OAuth tokens before they expire.</p>"
+        }
+      },
+      "documentation":"<p>Structure containing updated OAuth configuration settings.</p>"
+    },
+    "OtaDescription":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[0-9A-Za-z_\\- ]+"
+    },
+    "OtaMechanism":{
+      "type":"string",
+      "enum":["PUSH"]
+    },
+    "OtaNextToken":{
+      "type":"string",
+      "max":65535,
+      "min":1,
+      "pattern":"[a-zA-Z0-9=_+/-]+"
+    },
+    "OtaProtocol":{
+      "type":"string",
+      "enum":["HTTP"]
+    },
+    "OtaStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "CANCELED",
+        "COMPLETED",
+        "DELETION_IN_PROGRESS",
+        "SCHEDULED"
+      ]
+    },
+    "OtaTargetQueryString":{"type":"string"},
+    "OtaTaskAbortConfig":{
+      "type":"structure",
+      "members":{
+        "AbortConfigCriteriaList":{
+          "shape":"AbortConfigCriteriaList",
+          "documentation":"<p>The list of criteria for the abort config.</p>"
+        }
+      },
+      "documentation":"<p>Over-the-air (OTA) task abort config.</p>"
+    },
+    "OtaTaskArn":{
+      "type":"string",
+      "max":1011,
+      "min":32,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:ota-task/[0-9a-zA-Z]+"
+    },
+    "OtaTaskConfigurationId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]*"
+    },
+    "OtaTaskConfigurationListDefinition":{
+      "type":"list",
+      "member":{"shape":"OtaTaskConfigurationSummary"}
+    },
+    "OtaTaskConfigurationName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+",
+      "sensitive":true
+    },
+    "OtaTaskConfigurationSummary":{
+      "type":"structure",
+      "members":{
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The id of the over-the-air (OTA) task configuration</p>"
+        },
+        "Name":{
+          "shape":"OtaTaskConfigurationName",
+          "documentation":"<p>The name of the over-the-air (OTA) task configuration.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task configuration was created at.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one over-the-air (OTA) task configuration.</p>"
+    },
+    "OtaTaskExecutionRetryConfig":{
+      "type":"structure",
+      "members":{
+        "RetryConfigCriteria":{
+          "shape":"RetryConfigCriteriaList",
+          "documentation":"<p>The list of retry config criteria.</p>"
+        }
+      },
+      "documentation":"<p>Over-the-air (OTA) task retry config.</p>"
+    },
+    "OtaTaskExecutionRolloutConfig":{
+      "type":"structure",
+      "members":{
+        "ExponentialRolloutRate":{
+          "shape":"ExponentialRolloutRate",
+          "documentation":"<p>Structure representing exponential rate of rollout for an over-the-air (OTA) task.</p>"
+        },
+        "MaximumPerMinute":{
+          "shape":"MaximumPerMinute",
+          "documentation":"<p>The maximum number of things that will be notified of a pending task, per minute.</p>"
+        }
+      },
+      "documentation":"<p>Over-the-air (OTA) task rollout config.</p>"
+    },
+    "OtaTaskExecutionStatus":{
+      "type":"string",
+      "enum":[
+        "QUEUED",
+        "IN_PROGRESS",
+        "SUCCEEDED",
+        "FAILED",
+        "TIMED_OUT",
+        "REJECTED",
+        "REMOVED",
+        "CANCELED"
+      ]
+    },
+    "OtaTaskExecutionSummaries":{
+      "type":"structure",
+      "members":{
+        "TaskExecutionSummary":{
+          "shape":"OtaTaskExecutionSummary",
+          "documentation":"<p>Structure representing one over-the-air (OTA) task execution summary</p>"
+        },
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of a managed thing.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one execution summary.</p>"
+    },
+    "OtaTaskExecutionSummariesListDefinition":{
+      "type":"list",
+      "member":{"shape":"OtaTaskExecutionSummaries"}
+    },
+    "OtaTaskExecutionSummary":{
+      "type":"structure",
+      "members":{
+        "ExecutionNumber":{
+          "shape":"ExecutionNumber",
+          "documentation":"<p>The execution number of the over-the-air (OTA) task execution summary.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"LastUpdatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task execution summary was last updated.</p>"
+        },
+        "QueuedAt":{
+          "shape":"QueuedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task execution summary is targeted to start.</p>"
+        },
+        "RetryAttempt":{
+          "shape":"RetryAttempt",
+          "documentation":"<p>The number of retry attempts for starting the over-the-air (OTA) task execution summary after a failed attempt.</p>"
+        },
+        "StartedAt":{
+          "shape":"StartedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task execution summary started.</p>"
+        },
+        "Status":{
+          "shape":"OtaTaskExecutionStatus",
+          "documentation":"<p>The status of the over-the-air (OTA) task execution summary.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one over-the-air (OTA) task execution summary.</p>"
+    },
+    "OtaTaskId":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[A-Za-z0-9]+"
+    },
+    "OtaTaskListDefinition":{
+      "type":"list",
+      "member":{"shape":"OtaTaskSummary"}
+    },
+    "OtaTaskSchedulingConfig":{
+      "type":"structure",
+      "members":{
+        "EndBehavior":{
+          "shape":"SchedulingConfigEndBehavior",
+          "documentation":"<p>Specifies the end behavior for all task executions after a task reaches the selected <code>endTime</code>. If <code>endTime</code> is not selected when creating the task, then <code>endBehavior</code> does not apply.</p>"
+        },
+        "EndTime":{
+          "shape":"EndTime",
+          "documentation":"<p>The time an over-the-air (OTA) task will stop.</p>"
+        },
+        "MaintenanceWindows":{
+          "shape":"ScheduleMaintenanceWindowList",
+          "documentation":"<p>Maintenance window list for over-the-air (OTA) task scheduling config.</p>"
+        },
+        "StartTime":{
+          "shape":"ScheduleStartTime",
+          "documentation":"<p>The time an over-the-air (OTA) task will start.</p>"
+        }
+      },
+      "documentation":"<p>Over-the-air (OTA) task scheduling config.</p>"
+    },
+    "OtaTaskSummary":{
+      "type":"structure",
+      "members":{
+        "TaskId":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The id of the over-the-air (OTA) task.</p>"
+        },
+        "TaskArn":{
+          "shape":"OtaTaskArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the over-the-air (OTA) task.</p>"
+        },
+        "CreatedAt":{
+          "shape":"CreatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task was created at.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"LastUpdatedAt",
+          "documentation":"<p>The timestamp value of when the over-the-air (OTA) task was last updated at.</p>"
+        },
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier for the over-the-air (OTA) task configuration.</p>"
+        },
+        "Status":{
+          "shape":"OtaStatus",
+          "documentation":"<p>The status of the over-the-air (OTA) task summary.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one over-the-air (OTA) task.</p>"
+    },
+    "OtaTaskTimeoutConfig":{
+      "type":"structure",
+      "members":{
+        "InProgressTimeoutInMinutes":{
+          "shape":"InProgressTimeoutInMinutes",
+          "documentation":"<p>Specifies the amount of time the device has to finish execution of this task. The timeout interval can be anywhere between 1 minute and 7 days.</p>"
+        }
+      },
+      "documentation":"<p>Over-the-air (OTA) task timeout config.</p>"
+    },
+    "OtaType":{
+      "type":"string",
+      "enum":[
+        "ONE_TIME",
+        "CONTINUOUS"
+      ]
+    },
+    "Owner":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.,@-]+",
+      "sensitive":true
+    },
+    "ParentControllerId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9]+"
+    },
+    "ProactiveRefreshTokenRenewal":{
+      "type":"structure",
+      "members":{
+        "enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether proactive refresh token renewal is enabled.</p>"
+        },
+        "DaysBeforeRenewal":{
+          "shape":"ProactiveRefreshTokenRenewalDaysBeforeRenewalInteger",
+          "documentation":"<p>The days before token expiration when the system should attempt to renew the token, specified in days.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for proactively refreshing OAuth tokens before they expire.</p>"
+    },
+    "ProactiveRefreshTokenRenewalDaysBeforeRenewalInteger":{
+      "type":"integer",
+      "box":true,
+      "min":30
+    },
+    "PropertyName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[/a-zA-Z0-9\\._ -]+"
+    },
+    "ProvisioningProfileArn":{
+      "type":"string",
+      "max":64,
+      "min":32,
+      "pattern":"arn:aws:iotmanagedintegrations:[0-9a-zA-Z-]+:[0-9]+:provisioning-profile/[0-9a-zA-Z]+"
+    },
+    "ProvisioningProfileId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_]+"
+    },
+    "ProvisioningProfileListDefinition":{
+      "type":"list",
+      "member":{"shape":"ProvisioningProfileSummary"}
+    },
+    "ProvisioningProfileName":{
+      "type":"string",
+      "max":36,
+      "min":1,
+      "pattern":"[0-9A-Za-z_-]+"
+    },
+    "ProvisioningProfileSummary":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"ProvisioningProfileName",
+          "documentation":"<p>The name of the provisioning template.</p>"
+        },
+        "Id":{
+          "shape":"ProvisioningProfileId",
+          "documentation":"<p>The identifier of the provisioning profile.</p>"
+        },
+        "Arn":{
+          "shape":"ProvisioningProfileArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the provisioning template used in the provisioning profile.</p>"
+        },
+        "ProvisioningType":{
+          "shape":"ProvisioningType",
+          "documentation":"<p>The type of provisioning workflow the device uses for onboarding to IoT managed integrations.</p>"
+        }
+      },
+      "documentation":"<p>Structure describing a provisioning profile. </p>"
+    },
+    "ProvisioningStatus":{
+      "type":"string",
+      "enum":[
+        "UNASSOCIATED",
+        "PRE_ASSOCIATED",
+        "DISCOVERED",
+        "ACTIVATED",
+        "DELETION_FAILED",
+        "DELETE_IN_PROGRESS",
+        "ISOLATED",
+        "DELETED"
+      ]
+    },
+    "ProvisioningType":{
+      "type":"string",
+      "enum":[
+        "FLEET_PROVISIONING",
+        "JITR"
+      ]
+    },
+    "PushConfig":{
+      "type":"structure",
+      "members":{
+        "AbortConfig":{
+          "shape":"OtaTaskAbortConfig",
+          "documentation":"<p>Structure representing one abort config.</p>"
+        },
+        "RolloutConfig":{
+          "shape":"OtaTaskExecutionRolloutConfig",
+          "documentation":"<p>Structure representing one rollout config.</p>"
+        },
+        "TimeoutConfig":{
+          "shape":"OtaTaskTimeoutConfig",
+          "documentation":"<p>Structure representing one timeout config.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing a push config.</p>"
+    },
+    "PutDefaultEncryptionConfigurationRequest":{
+      "type":"structure",
+      "required":["encryptionType"],
+      "members":{
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of encryption used for the encryption configuration.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Key Amazon Resource Name (ARN) of the AWS KMS key used for KMS encryption if you use <code>KMS_BASED_ENCRYPTION</code>.</p>"
+        }
+      }
+    },
+    "PutDefaultEncryptionConfigurationResponse":{
+      "type":"structure",
+      "required":[
+        "configurationStatus",
+        "encryptionType"
+      ],
+      "members":{
+        "configurationStatus":{
+          "shape":"ConfigurationStatus",
+          "documentation":"<p>Provides the status of the default encryption configuration for an Amazon Web Services account.</p>"
+        },
+        "encryptionType":{
+          "shape":"EncryptionType",
+          "documentation":"<p>The type of encryption used for the encryption configuration.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Key Amazon Resource Name (ARN) of the AWS KMS key used for KMS encryption if you use <code>KMS_BASED_ENCRYPTION</code>.</p>"
+        }
+      }
+    },
+    "PutHubConfigurationRequest":{
+      "type":"structure",
+      "required":["HubTokenTimerExpirySettingInSeconds"],
+      "members":{
+        "HubTokenTimerExpirySettingInSeconds":{
+          "shape":"HubTokenTimerExpirySettingInSeconds",
+          "documentation":"<p>A user-defined integer value that represents the hub token timer expiry setting in seconds.</p>"
+        }
+      }
+    },
+    "PutHubConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "HubTokenTimerExpirySettingInSeconds":{
+          "shape":"HubTokenTimerExpirySettingInSeconds",
+          "documentation":"<p>A user-defined integer value that represents the hub token timer expiry setting in seconds.</p>"
+        }
+      }
+    },
+    "PutRuntimeLogConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "ManagedThingId",
+        "RuntimeLogConfigurations"
+      ],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id for a managed thing.</p>",
+          "location":"uri",
+          "locationName":"ManagedThingId"
+        },
+        "RuntimeLogConfigurations":{
+          "shape":"RuntimeLogConfigurations",
+          "documentation":"<p>The runtime log configuration for a managed thing.</p>"
+        }
+      }
+    },
+    "QueuedAt":{"type":"timestamp"},
+    "RegisterAccountAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "ManagedThingId",
+        "AccountAssociationId",
+        "DeviceDiscoveryId"
+      ],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing to register with the account association.</p>"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association to register with the managed thing.</p>"
+        },
+        "DeviceDiscoveryId":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The identifier of the device discovery job associated with this registration.</p>"
+        }
+      }
+    },
+    "RegisterAccountAssociationResponse":{
+      "type":"structure",
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association that was registered.</p>"
+        },
+        "DeviceDiscoveryId":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The identifier of the device discovery job associated with this registration.</p>"
+        },
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The identifier of the managed thing that was registered with the account association.</p>"
+        }
+      }
+    },
+    "RegisterCustomEndpointRequest":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "RegisterCustomEndpointResponse":{
+      "type":"structure",
+      "required":["EndpointAddress"],
+      "members":{
+        "EndpointAddress":{
+          "shape":"EndpointAddress",
+          "documentation":"<p>The IoT managed integrations dedicated, custom endpoint for the device to route traffic through.</p>"
+        }
+      }
+    },
+    "ResetRuntimeLogConfigurationRequest":{
+      "type":"structure",
+      "required":["ManagedThingId"],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of a managed thing.</p>",
+          "location":"uri",
+          "locationName":"ManagedThingId"
+        }
+      }
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"},
+        "ResourceId":{
+          "shape":"ErrorResourceId",
+          "documentation":"<p>Id of the affected resource</p>"
+        },
+        "ResourceType":{
+          "shape":"ErrorResourceType",
+          "documentation":"<p>Type of the affected resource</p>"
+        }
+      },
+      "documentation":"<p>The specified resource does not exist.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "RetryAttempt":{
+      "type":"integer",
+      "box":true
+    },
+    "RetryConfigCriteria":{
+      "type":"structure",
+      "members":{
+        "FailureType":{
+          "shape":"RetryCriteriaFailureType",
+          "documentation":"<p>Over-the-air (OTA) retry criteria failure type.</p>"
+        },
+        "MinNumberOfRetries":{
+          "shape":"MinNumberOfRetries",
+          "documentation":"<p>The number of retries allowed for a failure type for the over-the-air (OTA) task.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing one retry config criteria.</p>"
+    },
+    "RetryConfigCriteriaList":{
+      "type":"list",
+      "member":{"shape":"RetryConfigCriteria"}
+    },
+    "RetryCriteriaFailureType":{
+      "type":"string",
+      "enum":[
+        "FAILED",
+        "TIMED_OUT",
+        "ALL"
+      ]
+    },
+    "Role":{
+      "type":"string",
+      "enum":[
+        "CONTROLLER",
+        "DEVICE"
+      ]
+    },
+    "RolloutRateIncreaseCriteria":{
+      "type":"structure",
+      "members":{
+        "numberOfNotifiedThings":{
+          "shape":"NumberOfNotifiedThings",
+          "documentation":"<p>The threshold for number of notified things that will initiate the increase in rate of rollout.</p>"
+        },
+        "numberOfSucceededThings":{
+          "shape":"NumberOfSucceededThings",
+          "documentation":"<p>The threshold for number of succeeded things that will initiate the increase in rate of rollout.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing rollout config criteria.</p>"
+    },
+    "RuntimeLogConfigurations":{
+      "type":"structure",
+      "members":{
+        "LogLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The different log levels available for configuration.</p>"
+        },
+        "LogFlushLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The different log levels available for configuration.</p>"
+        },
+        "LocalStoreLocation":{
+          "shape":"LocalStoreLocation",
+          "documentation":"<p>Configuration of where to store runtime logs in the device.</p>"
+        },
+        "LocalStoreFileRotationMaxFiles":{
+          "shape":"LocalStoreFileRotationMaxFiles",
+          "documentation":"<p>Configuration to set the maximum number of runtime log files that can be stored on the device before the oldest files are deleted or overwritten.</p>"
+        },
+        "LocalStoreFileRotationMaxBytes":{
+          "shape":"LocalStoreFileRotationMaxBytes",
+          "documentation":"<p>Configuration to set the maximum bytes of runtime logs that can be stored on the device before the oldest logs are deleted or overwritten.</p>"
+        },
+        "UploadLog":{
+          "shape":"UploadLog",
+          "documentation":"<p>Configuration to enable or disable uploading of runtime logs to the cloud.</p>"
+        },
+        "UploadPeriodMinutes":{
+          "shape":"UploadPeriodMinutes",
+          "documentation":"<p>Configuration to set the time interval in minutes between each batch of runtime logs that the device uploads to the cloud.</p>"
+        },
+        "DeleteLocalStoreAfterUpload":{
+          "shape":"DeleteLocalStoreAfterUpload",
+          "documentation":"<p>Configuration to enable or disable deleting of runtime logs in the device once uploaded to the cloud.</p>"
+        }
+      },
+      "documentation":"<p>The different configurations for runtime logs.</p>"
+    },
+    "S3Url":{
+      "type":"string",
+      "max":1000,
+      "min":1
+    },
+    "ScheduleMaintenanceWindow":{
+      "type":"structure",
+      "members":{
+        "DurationInMinutes":{
+          "shape":"DurationInMinutes",
+          "documentation":"<p>Displays the duration of the next maintenance window.</p>"
+        },
+        "StartTime":{
+          "shape":"StartTime",
+          "documentation":"<p>Displays the start time of the next maintenance window.</p>"
+        }
+      },
+      "documentation":"<p>Structure representing scheduling maintenance window.</p>"
+    },
+    "ScheduleMaintenanceWindowList":{
+      "type":"list",
+      "member":{"shape":"ScheduleMaintenanceWindow"}
+    },
+    "ScheduleStartTime":{"type":"string"},
+    "SchedulingConfigEndBehavior":{
+      "type":"string",
+      "enum":[
+        "STOP_ROLLOUT",
+        "CANCEL",
+        "FORCE_CANCEL"
+      ]
+    },
+    "SchemaId":{
+      "type":"string",
+      "max":128,
+      "min":3,
+      "pattern":"[a-zA-Z0-9.]+"
+    },
+    "SchemaVersionDescription":{
+      "type":"string",
+      "max":2048,
+      "min":10,
+      "pattern":"[a-zA-Z0-9.,/ -]+"
+    },
+    "SchemaVersionFormat":{
+      "type":"string",
+      "enum":[
+        "AWS",
+        "ZCL",
+        "CONNECTOR"
+      ]
+    },
+    "SchemaVersionList":{
+      "type":"list",
+      "member":{"shape":"SchemaVersionListItem"}
+    },
+    "SchemaVersionListItem":{
+      "type":"structure",
+      "members":{
+        "SchemaId":{
+          "shape":"SchemaId",
+          "documentation":"<p>The identifier of the schema version.</p>"
+        },
+        "Type":{
+          "shape":"SchemaVersionType",
+          "documentation":"<p>The type of schema version.</p>"
+        },
+        "Description":{
+          "shape":"SchemaVersionDescription",
+          "documentation":"<p>A description of the schema version.</p>"
+        },
+        "Namespace":{
+          "shape":"SchemaVersionNamespaceName",
+          "documentation":"<p>The name of the schema version.</p>"
+        },
+        "SemanticVersion":{
+          "shape":"SchemaVersionVersion",
+          "documentation":"<p>The schema version. If this is left blank, it defaults to the latest version.</p>"
+        },
+        "Visibility":{
+          "shape":"SchemaVersionVisibility",
+          "documentation":"<p>The visibility of the schema version.</p>"
+        }
+      },
+      "documentation":"<p>List item describing a schema version.</p>"
+    },
+    "SchemaVersionNamespaceName":{
+      "type":"string",
+      "max":12,
+      "min":3,
+      "pattern":"[a-z0-9]+"
+    },
+    "SchemaVersionSchema":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true
+    },
+    "SchemaVersionType":{
+      "type":"string",
+      "enum":[
+        "capability",
+        "definition"
+      ]
+    },
+    "SchemaVersionVersion":{
+      "type":"string",
+      "max":12,
+      "min":3,
+      "pattern":"(\\d+\\.\\d+(\\.\\d+)?|\\$latest)"
+    },
+    "SchemaVersionVisibility":{
+      "type":"string",
+      "enum":[
+        "PUBLIC",
+        "PRIVATE"
+      ]
+    },
+    "SchemaVersionedId":{
+      "type":"string",
+      "max":128,
+      "min":7,
+      "pattern":"[a-zA-Z0-9.]+@(\\d+\\.\\d+(\\.\\d+)?|\\$latest)"
+    },
+    "SecretsManager":{
+      "type":"structure",
+      "required":[
+        "arn",
+        "versionId"
+      ],
+      "members":{
+        "arn":{
+          "shape":"SecretsManagerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS Secrets Manager secret.</p>"
+        },
+        "versionId":{
+          "shape":"SecretsManagerVersionId",
+          "documentation":"<p>The version ID of the AWS Secrets Manager secret.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for AWS Secrets Manager, used to securely store and manage sensitive information for connector destinations.</p>"
+    },
+    "SecretsManagerArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws:secretsmanager:[0-9a-zA-Z-]{1,32}:\\d{12}:secret:[A-Za-z0-9/_+=.@-]{8,520}"
+    },
+    "SecretsManagerVersionId":{
+      "type":"string",
+      "max":64,
+      "min":32,
+      "pattern":"[a-zA-Z0-9-_]+"
+    },
+    "SendConnectorEventRequest":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "Operation"
+      ],
+      "members":{
+        "ConnectorId":{
+          "shape":"ConnectorId",
+          "documentation":"<p>The id of the connector between the third-party cloud provider and IoT managed integrations.</p>",
+          "location":"uri",
+          "locationName":"ConnectorId"
+        },
+        "UserId":{
+          "shape":"ThirdPartyUserId",
+          "documentation":"<p>The id of the third-party cloud provider.</p>"
+        },
+        "Operation":{
+          "shape":"ConnectorEventOperation",
+          "documentation":"<p>The Open Connectivity Foundation (OCF) operation requested to be performed on the managed thing.</p> <note> <p>The field op can have a value of \"I\" or \"U\". The field \"cn\" will contain the capability types.</p> </note>"
+        },
+        "OperationVersion":{
+          "shape":"ConnectorEventOperationVersion",
+          "documentation":"<p>The Open Connectivity Foundation (OCF) security specification version for the operation being requested on the managed thing. For more information, see <a href=\"https://openconnectivity.org/specs/OCF_Security_Specification_v1.0.0.pdf\">OCF Security Specification</a>.</p>"
+        },
+        "StatusCode":{
+          "shape":"ConnectorEventStatusCode",
+          "documentation":"<p>The status code of the Open Connectivity Foundation (OCF) operation being performed on the managed thing.</p>"
+        },
+        "Message":{
+          "shape":"ConnectorEventMessage",
+          "documentation":"<p>The device state change event payload.</p> <p>This parameter will include the following three fields:</p> <ul> <li> <p> <code>uri</code>: <code>schema auc://&lt;PARTNER-DEVICE-ID&gt;/ResourcePath</code> (The <code>Resourcepath</code> corresponds to an OCF resource.)</p> </li> <li> <p> <code>op</code>: For device state changes, this field must populate as <code>n+d</code>.</p> </li> <li> <p> <code>cn</code>: The content depends on the OCF resource referenced in <code>ResourcePath</code>.</p> </li> </ul>"
+        },
+        "DeviceDiscoveryId":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The id for the device discovery job.</p>"
+        },
+        "ConnectorDeviceId":{
+          "shape":"ConnectorDeviceId",
+          "documentation":"<p>The third-party device id as defined by the connector. This device id must not contain personal identifiable information (PII).</p> <note> <p>This parameter is used for cloud-to-cloud devices only.</p> </note>"
+        },
+        "TraceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The trace request identifier. This is generated by IoT managed integrations and can be used to trace this command and its related operations in CloudWatch.</p>"
+        },
+        "Devices":{
+          "shape":"Devices",
+          "documentation":"<p>The list of devices.</p>"
+        },
+        "MatterEndpoint":{
+          "shape":"MatterEndpoint",
+          "documentation":"<p>The device endpoint.</p>"
+        }
+      }
+    },
+    "SendConnectorEventResponse":{
+      "type":"structure",
+      "required":["ConnectorId"],
+      "members":{
+        "ConnectorId":{
+          "shape":"ConnectorId",
+          "documentation":"<p>The id of the connector between the third-party cloud provider and IoT managed integrations.</p>"
+        }
+      }
+    },
+    "SendManagedThingCommandRequest":{
+      "type":"structure",
+      "required":[
+        "ManagedThingId",
+        "Endpoints"
+      ],
+      "members":{
+        "ManagedThingId":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the device.</p>",
+          "location":"uri",
+          "locationName":"ManagedThingId"
+        },
+        "Endpoints":{
+          "shape":"CommandEndpoints",
+          "documentation":"<p>The device endpoint.</p>"
+        },
+        "ConnectorAssociationId":{
+          "shape":"ConnectorAssociationId",
+          "documentation":"<p>The ID tracking the current discovery process for one connector association.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorAssociationId has been deprecated",
+          "deprecatedSince":"06-25-2025"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the account association to use when sending a command to a managed thing.</p>"
+        }
+      }
+    },
+    "SendManagedThingCommandResponse":{
+      "type":"structure",
+      "members":{
+        "TraceId":{
+          "shape":"TraceId",
+          "documentation":"<p>The trace request identifier. This is generated by IoT managed integrations and can be used to trace this command and its related operations in CloudWatch.</p>"
+        }
+      }
+    },
+    "SerialNumber":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ ]+",
+      "sensitive":true
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The service quota has been exceeded for this request.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ServiceUnavailableException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The service is temporarily unavailable.</p>",
+      "error":{"httpStatusCode":503},
+      "exception":true,
+      "fault":true
+    },
+    "SetupAt":{"type":"timestamp"},
+    "SmartHomeResourceId":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[a-zA-Z0-9+*]*"
+    },
+    "SmartHomeResourceType":{
+      "type":"string",
+      "pattern":"[*]$|^(managed-thing|credential-locker|provisioning-profile|ota-task|account-association)"
+    },
+    "SpecVersion":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"\\d+\\.\\d+"
+    },
+    "StartAccountAssociationRefreshRequest":{
+      "type":"structure",
+      "required":["AccountAssociationId"],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association to refresh.</p>",
+          "location":"uri",
+          "locationName":"AccountAssociationId"
+        }
+      }
+    },
+    "StartAccountAssociationRefreshResponse":{
+      "type":"structure",
+      "required":["OAuthAuthorizationUrl"],
+      "members":{
+        "OAuthAuthorizationUrl":{
+          "shape":"OAuthAuthorizationUrl",
+          "documentation":"<p>Third-party IoT platform OAuth authorization server URL with all required parameters to perform end-user authentication during the refresh process.</p>"
+        }
+      }
+    },
+    "StartDeviceDiscoveryRequest":{
+      "type":"structure",
+      "required":["DiscoveryType"],
+      "members":{
+        "DiscoveryType":{
+          "shape":"DiscoveryType",
+          "documentation":"<p>The discovery type supporting the type of device to be discovered in the device discovery task request.</p>"
+        },
+        "CustomProtocolDetail":{
+          "shape":"CustomProtocolDetail",
+          "documentation":"<p>Additional protocol-specific details required for device discovery, which vary based on the discovery type.</p> <note> <p>For a <code>DiscoveryType</code> of <code>CUSTOM</code>, the string-to-string map must have a key value of <code>Name</code> set to a non-empty-string.</p> </note>"
+        },
+        "ControllerIdentifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the end-user's IoT hub.</p>"
+        },
+        "ConnectorAssociationIdentifier":{
+          "shape":"ConnectorAssociationId",
+          "documentation":"<p>The id of the connector association.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"ConnectorAssociationIdentifier is deprecated",
+          "deprecatedSince":"06-25-2025"
+        },
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The identifier of the cloud-to-cloud account association to use for discovery of third-party devices.</p>"
+        },
+        "AuthenticationMaterial":{
+          "shape":"DiscoveryAuthMaterialString",
+          "documentation":"<p>The authentication material required to start the local device discovery job request.</p>"
+        },
+        "AuthenticationMaterialType":{
+          "shape":"DiscoveryAuthMaterialType",
+          "documentation":"<p>The type of authentication material used for device discovery jobs.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>An idempotency token. If you retry a request that completed successfully initially using the same client token and parameters, then the retry attempt will succeed without performing any further actions.</p>"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the device discovery request.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Tags have been deprecated from this api",
+          "deprecatedSince":"06-25-2025"
+        }
+      }
+    },
+    "StartDeviceDiscoveryResponse":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"DeviceDiscoveryId",
+          "documentation":"<p>The id of the device discovery job request.</p>"
+        },
+        "StartedAt":{
+          "shape":"DiscoveryStartedAt",
+          "documentation":"<p>The timestamp value for the start time of the device discovery.</p>"
+        }
+      }
+    },
+    "StartTime":{"type":"string"},
+    "StartedAt":{"type":"timestamp"},
+    "StateCapabilities":{
+      "type":"list",
+      "member":{"shape":"StateCapability"},
+      "max":5,
+      "min":1
+    },
+    "StateCapability":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "version"
+      ],
+      "members":{
+        "id":{
+          "shape":"SchemaVersionedId",
+          "documentation":"<p>The id of the managed thing in the capability report.</p>"
+        },
+        "name":{
+          "shape":"CapabilityName",
+          "documentation":"<p>Name for the Amazon Web Services capability.</p>"
+        },
+        "version":{
+          "shape":"CapabilityVersion",
+          "documentation":"<p>Version for the Amazon Web Services capability.</p>"
+        },
+        "properties":{
+          "shape":"CapabilityProperties",
+          "documentation":"<p>Describe the command capability with the properties it supports.</p>"
+        }
+      },
+      "documentation":"<p>State capabilities added for the managed thing.</p>"
+    },
+    "StateEndpoint":{
+      "type":"structure",
+      "required":[
+        "endpointId",
+        "capabilities"
+      ],
+      "members":{
+        "endpointId":{
+          "shape":"EndpointId",
+          "documentation":"<p>Numeric identifier of the endpoint</p>"
+        },
+        "capabilities":{
+          "shape":"StateCapabilities",
+          "documentation":"<p>Describe the endpoint with an id, a name, and the relevant capabilities for the reporting state.</p>"
+        }
+      },
+      "documentation":"<p>Describe the endpoint with an Id, a name, and the relevant capabilities for reporting state</p>"
+    },
+    "StateEndpoints":{
+      "type":"list",
+      "member":{"shape":"StateEndpoint"},
+      "max":5,
+      "min":0
+    },
+    "String":{"type":"string"},
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "Tags"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"IoTManagedIntegrationsResourceARN",
+          "documentation":"<p>The ARN of the resource to which to add tags.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A set of key/value pairs that are used to manage the resource</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "TagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":50,
+      "min":1,
+      "sensitive":true
+    },
+    "Target":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "TaskProcessingDetails":{
+      "type":"structure",
+      "members":{
+        "NumberOfCanceledThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of canceled things in an over-the-air (OTA) task.</p>"
+        },
+        "NumberOfFailedThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of failed things in an over-the-air (OTA) task.</p>"
+        },
+        "NumberOfInProgressThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of in progress things in an over-the-air (OTA) task.</p>"
+        },
+        "numberOfQueuedThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of queued things in an over-the-air (OTA) task.</p>"
+        },
+        "numberOfRejectedThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rejected things in an over-the-air (OTA) task.</p>"
+        },
+        "numberOfRemovedThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of removed things in an over-the-air (OTA) task.</p>"
+        },
+        "numberOfSucceededThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of succeeded things in an over-the-air (OTA) task.</p>"
+        },
+        "numberOfTimedOutThings":{
+          "shape":"Integer",
+          "documentation":"<p>The number of timed out things in an over-the-air (OTA) task.</p>"
+        },
+        "processingTargets":{
+          "shape":"Target",
+          "documentation":"<p>The targets of the over-the-air (OTA) task.</p>"
+        }
+      },
+      "documentation":"<p>Details about the over-the-air (OTA) task process.</p>"
+    },
+    "ThirdPartyUserId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.,@-]+",
+      "sensitive":true
+    },
+    "ThresholdPercentage":{
+      "type":"double",
+      "box":true,
+      "max":100
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The rate exceeds the limit.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "TokenEndpointAuthenticationScheme":{
+      "type":"string",
+      "enum":[
+        "HTTP_BASIC",
+        "REQUEST_BODY_CREDENTIALS"
+      ]
+    },
+    "TokenUrl":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}([-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)"
+    },
+    "TraceId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9:=_-]+"
+    },
+    "UnauthorizedException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>You are not authorized to perform this operation.</p>",
+      "error":{
+        "httpStatusCode":401,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UniversalProductCode":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"[0-9]+",
+      "sensitive":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "TagKeys"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"IoTManagedIntegrationsResourceARN",
+          "documentation":"<p>The ARN of the resource to which to add tags.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of tag keys to remove from the resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "UpdateAccountAssociationRequest":{
+      "type":"structure",
+      "required":["AccountAssociationId"],
+      "members":{
+        "AccountAssociationId":{
+          "shape":"AccountAssociationId",
+          "documentation":"<p>The unique identifier of the account association to update.</p>",
+          "location":"uri",
+          "locationName":"AccountAssociationId"
+        },
+        "Name":{
+          "shape":"AccountAssociationName",
+          "documentation":"<p>The new name to assign to the account association.</p>"
+        },
+        "Description":{
+          "shape":"AccountAssociationDescription",
+          "documentation":"<p>The new description to assign to the account association.</p>"
+        }
+      }
+    },
+    "UpdateCloudConnectorRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"CloudConnectorId",
+          "documentation":"<p>The unique identifier of the cloud connector to update.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Name":{
+          "shape":"DisplayName",
+          "documentation":"<p>The new display name to assign to the cloud connector.</p>"
+        },
+        "Description":{
+          "shape":"CloudConnectorDescription",
+          "documentation":"<p>The new description to assign to the cloud connector.</p>"
+        }
+      }
+    },
+    "UpdateConnectorDestinationRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ConnectorDestinationId",
+          "documentation":"<p>The unique identifier of the connector destination to update.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Description":{
+          "shape":"ConnectorDestinationDescription",
+          "documentation":"<p>The new description to assign to the connector destination.</p>"
+        },
+        "Name":{
+          "shape":"ConnectorDestinationName",
+          "documentation":"<p>The new display name to assign to the connector destination.</p>"
+        },
+        "AuthType":{
+          "shape":"AuthType",
+          "documentation":"<p>The new authentication type to use for the connector destination.</p>"
+        },
+        "AuthConfig":{
+          "shape":"AuthConfigUpdate",
+          "documentation":"<p>The updated authentication configuration details for the connector destination.</p>"
+        },
+        "SecretsManager":{
+          "shape":"SecretsManager",
+          "documentation":"<p>The updated AWS Secrets Manager configuration for the connector destination.</p>"
+        }
+      }
+    },
+    "UpdateDestinationRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        },
+        "DeliveryDestinationArn":{
+          "shape":"DeliveryDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer-managed destination.</p>"
+        },
+        "DeliveryDestinationType":{
+          "shape":"DeliveryDestinationType",
+          "documentation":"<p>The destination type for the customer-managed destination.</p>"
+        },
+        "RoleArn":{
+          "shape":"DeliveryDestinationRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the delivery destination role.</p>"
+        },
+        "Description":{
+          "shape":"DestinationDescription",
+          "documentation":"<p>The description of the customer-managed destination.</p>"
+        }
+      }
+    },
+    "UpdateEventLogConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "Id",
+        "EventLogLevel"
+      ],
+      "members":{
+        "Id":{
+          "shape":"LogConfigurationId",
+          "documentation":"<p>The log configuration id.</p>",
+          "location":"uri",
+          "locationName":"Id"
+        },
+        "EventLogLevel":{
+          "shape":"LogLevel",
+          "documentation":"<p>The log level for the event in terms of severity.</p>"
+        }
+      }
+    },
+    "UpdateManagedThingRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"ManagedThingId",
+          "documentation":"<p>The id of the managed thing.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Owner":{
+          "shape":"Owner",
+          "documentation":"<p>Owner of the device, usually an indication of whom the device belongs to. This value should not contain personal identifiable information.</p>"
+        },
+        "CredentialLockerId":{
+          "shape":"CredentialLockerId",
+          "documentation":"<p>The identifier of the credential for the managed thing.</p>"
+        },
+        "SerialNumber":{
+          "shape":"SerialNumber",
+          "documentation":"<p>The serial number of the device.</p>"
+        },
+        "Brand":{
+          "shape":"Brand",
+          "documentation":"<p>The brand of the device.</p>"
+        },
+        "Model":{
+          "shape":"Model",
+          "documentation":"<p>The model of the device.</p>"
+        },
+        "Name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the managed thing representing the physical device.</p>"
+        },
+        "CapabilityReport":{
+          "shape":"CapabilityReport",
+          "documentation":"<p>A report of the capabilities for the managed thing.</p>"
+        },
+        "CapabilitySchemas":{
+          "shape":"CapabilitySchemas",
+          "documentation":"<p>The updated capability schemas that define the functionality and features supported by the managed thing.</p>"
+        },
+        "Capabilities":{
+          "shape":"Capabilities",
+          "documentation":"<p>The capabilities of the device such as light bulb.</p>"
+        },
+        "Classification":{
+          "shape":"Classification",
+          "documentation":"<p>The classification of the managed thing such as light bulb or thermostat.</p>"
+        },
+        "HubNetworkMode":{
+          "shape":"HubNetworkMode",
+          "documentation":"<p>The network mode for the hub-connected device.</p>"
+        },
+        "MetaData":{
+          "shape":"MetaData",
+          "documentation":"<p>The metadata for the managed thing.</p>"
+        }
+      }
+    },
+    "UpdateNotificationConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "EventType",
+        "DestinationName"
+      ],
+      "members":{
+        "EventType":{
+          "shape":"EventType",
+          "documentation":"<p>The type of event triggering a device notification to the customer-managed destination.</p>",
+          "location":"uri",
+          "locationName":"EventType"
+        },
+        "DestinationName":{
+          "shape":"DestinationName",
+          "documentation":"<p>The name of the destination for the notification configuration.</p>"
+        }
+      }
+    },
+    "UpdateOtaTaskRequest":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"OtaTaskId",
+          "documentation":"<p>The over-the-air (OTA) task id.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "Description":{
+          "shape":"OtaDescription",
+          "documentation":"<p>The description of the over-the-air (OTA) task.</p>"
+        },
+        "TaskConfigurationId":{
+          "shape":"OtaTaskConfigurationId",
+          "documentation":"<p>The identifier for the over-the-air (OTA) task configuration.</p>"
+        }
+      }
+    },
+    "UpdatedAt":{"type":"timestamp"},
+    "UploadLog":{
+      "type":"boolean",
+      "box":true
+    },
+    "UploadPeriodMinutes":{
+      "type":"integer",
+      "box":true
+    },
+    "ValidationException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>A validation error occurred when performing the API request.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ValidationSchema":{
+      "type":"structure",
+      "members":{
+      },
+      "document":true
+    }
+  },
+  "documentation":"<p>Managed integrations is a feature of AWS IoT Device Management that enables developers to quickly build innovative IoT solutions. Customers can use managed integrations to automate device setup workflows and support interoperability across many devices, regardless of device vendor or connectivity protocol. This allows developers to use a single user-interface to control, manage, and operate a range of devices.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotanalytics/2017-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/iotanalytics/2017-11-27/service-2.json 2.31.35-1/awscli/botocore/data/iotanalytics/2017-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotanalytics/2017-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotanalytics/2017-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2017-11-27",
     "endpointPrefix":"iotanalytics",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS IoT Analytics",
     "serviceId":"IoTAnalytics",
     "signatureVersion":"v4",
     "signingName":"iotanalytics",
-    "uid":"iotanalytics-2017-11-27"
+    "uid":"iotanalytics-2017-11-27",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchPutMessage":{
@@ -729,8 +731,7 @@
     },
     "CancelPipelineReprocessingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Channel":{
       "type":"structure",
@@ -1929,8 +1930,7 @@
     },
     "DescribeLoggingOptionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeLoggingOptionsResponse":{
       "type":"structure",
@@ -2237,8 +2237,7 @@
     },
     "JsonConfiguration":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains the configuration information of the JSON format.</p>"
     },
     "LambdaActivity":{
@@ -3099,26 +3098,22 @@
     },
     "ServiceManagedChannelS3Storage":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Used to store channel data in an S3 bucket managed by IoT Analytics. You can't change the choice of S3 storage after the data store is created.</p>"
     },
     "ServiceManagedChannelS3StorageSummary":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Used to store channel data in an S3 bucket managed by IoT Analytics.</p>"
     },
     "ServiceManagedDatastoreS3Storage":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Used to store data in an Amazon S3 bucket managed by IoT Analytics. You can't change the choice of Amazon S3 storage after your data store is created. </p>"
     },
     "ServiceManagedDatastoreS3StorageSummary":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains information about the data store that is managed by IoT Analytics.</p>"
     },
     "ServiceUnavailableException":{
@@ -3248,8 +3243,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3324,8 +3318,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateChannelRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json 2.31.35-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotdeviceadvisor/2020-09-18/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -306,8 +306,7 @@
     },
     "DeleteSuiteDefinitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeviceUnderTest":{
       "type":"structure",
@@ -795,8 +794,7 @@
     },
     "StopSuiteRunResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String128":{
       "type":"string",
@@ -1018,8 +1016,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TestCaseDefinitionName":{"type":"string"},
     "TestCaseRun":{
@@ -1168,8 +1165,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSuiteDefinitionRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotevents/2018-07-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotevents/2018-07-27/service-2.json 2.31.35-1/awscli/botocore/data/iotevents/2018-07-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotevents/2018-07-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotevents/2018-07-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2018-07-27",
     "endpointPrefix":"iotevents",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS IoT Events",
     "serviceId":"IoT Events",
     "signatureVersion":"v4",
     "signingName":"iotevents",
-    "uid":"iotevents-2018-07-27"
+    "uid":"iotevents-2018-07-27",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateAlarmModel":{
@@ -1051,8 +1053,7 @@
     },
     "DeleteAlarmModelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDetectorModelRequest":{
       "type":"structure",
@@ -1068,8 +1069,7 @@
     },
     "DeleteDetectorModelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInputRequest":{
       "type":"structure",
@@ -1085,8 +1085,7 @@
     },
     "DeleteInputResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeliveryStreamName":{"type":"string"},
     "DescribeAlarmModelRequest":{
@@ -1243,8 +1242,7 @@
     },
     "DescribeLoggingOptionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeLoggingOptionsResponse":{
       "type":"structure",
@@ -2675,8 +2673,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2777,8 +2774,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAlarmModelRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotevents-data/2018-10-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/iotevents-data/2018-10-23/service-2.json 2.31.35-1/awscli/botocore/data/iotevents-data/2018-10-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotevents-data/2018-10-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotevents-data/2018-10-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2018-10-23",
     "endpointPrefix":"data.iotevents",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS IoT Events Data",
     "serviceId":"IoT Events Data",
     "signatureVersion":"v4",
     "signingName":"ioteventsdata",
-    "uid":"iotevents-data-2018-10-23"
+    "uid":"iotevents-data-2018-10-23",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchAcknowledgeAlarm":{
diff -pruN 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.fleethub.iot-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.fleethub.iot-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://api.fleethub.iot.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://api.fleethub.iot.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/paginators-1.json 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,9 +0,0 @@
-{
-  "pagination": {
-    "ListApplications": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "result_key": "applicationSummaries"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/service-2.json 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotfleethub/2020-11-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotfleethub/2020-11-03/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,597 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2020-11-03",
-    "endpointPrefix":"api.fleethub.iot",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "serviceFullName":"AWS IoT Fleet Hub",
-    "serviceId":"IoTFleetHub",
-    "signatureVersion":"v4",
-    "signingName":"iotfleethub",
-    "uid":"iotfleethub-2020-11-03"
-  },
-  "operations":{
-    "CreateApplication":{
-      "name":"CreateApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/applications",
-        "responseCode":201
-      },
-      "input":{"shape":"CreateApplicationRequest"},
-      "output":{"shape":"CreateApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalFailureException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"}
-      ],
-      "documentation":"<p>Creates a Fleet Hub for IoT Device Management web application.</p> <p>When creating a Fleet Hub application, you must create an organization instance of IAM Identity Center if you don't already have one. The Fleet Hub application you create must also be in the same Amazon Web Services Region of the organization instance of IAM Identity Center. For more information see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html\">Enabling IAM Identity Center</a> and <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/organization-instances-identity-center.html\">Organization instances of IAM Identity Center</a>.</p>"
-    },
-    "DeleteApplication":{
-      "name":"DeleteApplication",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/applications/{applicationId}",
-        "responseCode":204
-      },
-      "input":{"shape":"DeleteApplicationRequest"},
-      "output":{"shape":"DeleteApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalFailureException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Deletes a Fleet Hub for IoT Device Management web application.</p>"
-    },
-    "DescribeApplication":{
-      "name":"DescribeApplication",
-      "http":{
-        "method":"GET",
-        "requestUri":"/applications/{applicationId}",
-        "responseCode":200
-      },
-      "input":{"shape":"DescribeApplicationRequest"},
-      "output":{"shape":"DescribeApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalFailureException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Gets information about a Fleet Hub for IoT Device Management web application.</p>"
-    },
-    "ListApplications":{
-      "name":"ListApplications",
-      "http":{
-        "method":"GET",
-        "requestUri":"/applications",
-        "responseCode":200
-      },
-      "input":{"shape":"ListApplicationsRequest"},
-      "output":{"shape":"ListApplicationsResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"InternalFailureException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Gets a list of Fleet Hub for IoT Device Management web applications for the current account.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"InternalFailureException"},
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Lists the tags for the specified resource.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"InternalFailureException"},
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Adds to or modifies the tags of the specified resource. Tags are metadata which can be used to manage a resource.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"InternalFailureException"},
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Removes the specified tags (metadata) from the resource.</p>"
-    },
-    "UpdateApplication":{
-      "name":"UpdateApplication",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/applications/{applicationId}",
-        "responseCode":202
-      },
-      "input":{"shape":"UpdateApplicationRequest"},
-      "output":{"shape":"UpdateApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidRequestException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalFailureException"},
-        {"shape":"ConflictException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Updates information about a Fleet Hub for IoT Device Management web application.</p>"
-    }
-  },
-  "shapes":{
-    "ApplicationState":{
-      "type":"string",
-      "enum":[
-        "CREATING",
-        "DELETING",
-        "ACTIVE",
-        "CREATE_FAILED",
-        "DELETE_FAILED"
-      ]
-    },
-    "ApplicationSummaries":{
-      "type":"list",
-      "member":{"shape":"ApplicationSummary"}
-    },
-    "ApplicationSummary":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "applicationName",
-        "applicationUrl"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>"
-        },
-        "applicationName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the web application.</p>"
-        },
-        "applicationDescription":{
-          "shape":"Description",
-          "documentation":"<p>An optional description of the web application.</p>"
-        },
-        "applicationUrl":{
-          "shape":"Url",
-          "documentation":"<p>The URL of the web application.</p>"
-        },
-        "applicationCreationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date (in Unix epoch time) when the web application was created.</p>"
-        },
-        "applicationLastUpdateDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date (in Unix epoch time) when the web application was last updated.</p>"
-        },
-        "applicationState":{
-          "shape":"ApplicationState",
-          "documentation":"<p>The current state of the web application.</p>"
-        }
-      },
-      "documentation":"<p>A summary of information about a Fleet Hub for IoT Device Management web application.</p>"
-    },
-    "Arn":{
-      "type":"string",
-      "max":1600,
-      "min":1,
-      "pattern":"^arn:[!-~]+$"
-    },
-    "ClientRequestToken":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9-_]+$"
-    },
-    "ConflictException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The request conflicts with the current state of the resource.</p>",
-      "error":{"httpStatusCode":409},
-      "exception":true
-    },
-    "CreateApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "applicationName",
-        "roleArn"
-      ],
-      "members":{
-        "applicationName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the web application.</p>"
-        },
-        "applicationDescription":{
-          "shape":"Description",
-          "documentation":"<p>An optional description of the web application.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
-          "idempotencyToken":true
-        },
-        "roleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the role that the web application assumes when it interacts with Amazon Web Services IoT Core.</p> <note> <p>The name of the role must be in the form <code>AWSIotFleetHub_<i>random_string</i> </code>.</p> </note>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A set of key/value pairs that you can use to manage the web application resource.</p>"
-        }
-      }
-    },
-    "CreateApplicationResponse":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "applicationArn"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>"
-        },
-        "applicationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the web application.</p>"
-        }
-      }
-    },
-    "DeleteApplicationRequest":{
-      "type":"structure",
-      "required":["applicationId"],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>",
-          "location":"uri",
-          "locationName":"applicationId"
-        },
-        "clientToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
-          "idempotencyToken":true,
-          "location":"querystring",
-          "locationName":"clientToken"
-        }
-      }
-    },
-    "DeleteApplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DescribeApplicationRequest":{
-      "type":"structure",
-      "required":["applicationId"],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>",
-          "location":"uri",
-          "locationName":"applicationId"
-        }
-      }
-    },
-    "DescribeApplicationResponse":{
-      "type":"structure",
-      "required":[
-        "applicationId",
-        "applicationArn",
-        "applicationName",
-        "applicationUrl",
-        "applicationState",
-        "applicationCreationDate",
-        "applicationLastUpdateDate",
-        "roleArn"
-      ],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>"
-        },
-        "applicationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the web application.</p>"
-        },
-        "applicationName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the web application.</p>"
-        },
-        "applicationDescription":{
-          "shape":"Description",
-          "documentation":"<p>An optional description of the web application.</p>"
-        },
-        "applicationUrl":{
-          "shape":"Url",
-          "documentation":"<p>The URL of the web application.</p>"
-        },
-        "applicationState":{
-          "shape":"ApplicationState",
-          "documentation":"<p>The current state of the web application.</p>"
-        },
-        "applicationCreationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date (in Unix epoch time) when the application was created.</p>"
-        },
-        "applicationLastUpdateDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date (in Unix epoch time) when the application was last updated.</p>"
-        },
-        "roleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the role that the web application assumes when it interacts with Amazon Web Services IoT Core.</p>"
-        },
-        "ssoClientId":{
-          "shape":"SsoClientId",
-          "documentation":"<p>The Id of the single sign-on client that you use to authenticate and authorize users on the web application.</p>"
-        },
-        "errorMessage":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>A message that explains any failures included in the <code>applicationState</code> response field. This message explains failures in the <code>CreateApplication</code> and <code>DeleteApplication</code> actions.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A set of key/value pairs that you can use to manage the web application resource.</p>"
-        }
-      }
-    },
-    "Description":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"^[ -~]*$"
-    },
-    "ErrorMessage":{"type":"string"},
-    "Id":{
-      "type":"string",
-      "max":36,
-      "min":36,
-      "pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
-    },
-    "InternalFailureException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>An unexpected error has occurred.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true,
-      "fault":true
-    },
-    "InvalidRequestException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The request is not valid.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>A limit has been exceeded.</p>",
-      "error":{"httpStatusCode":410},
-      "exception":true
-    },
-    "ListApplicationsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token used to get the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        }
-      }
-    },
-    "ListApplicationsResponse":{
-      "type":"structure",
-      "members":{
-        "applicationSummaries":{
-          "shape":"ApplicationSummaries",
-          "documentation":"<p>An array of objects that provide summaries of information about the web applications in the list.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token used to get the next set of results.</p>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["resourceArn"],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The ARN of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of tags assigned to the resource.</p>"
-        }
-      }
-    },
-    "Name":{
-      "type":"string",
-      "max":100,
-      "min":1,
-      "pattern":"^[ -~]*$"
-    },
-    "NextToken":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"^[A-Za-z0-9+/=]+$"
-    },
-    "ResourceArn":{"type":"string"},
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The specified resource does not exist.</p>",
-      "error":{"httpStatusCode":404},
-      "exception":true
-    },
-    "SsoClientId":{"type":"string"},
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"}
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":50,
-      "min":1
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tags"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The ARN of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The new or modified tags for the resource.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":1
-    },
-    "ThrottlingException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The rate exceeds the limit.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "Timestamp":{"type":"long"},
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tagKeys"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The ARN of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>A list of the keys of the tags to be removed from the resource.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateApplicationRequest":{
-      "type":"structure",
-      "required":["applicationId"],
-      "members":{
-        "applicationId":{
-          "shape":"Id",
-          "documentation":"<p>The unique Id of the web application.</p>",
-          "location":"uri",
-          "locationName":"applicationId"
-        },
-        "applicationName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the web application.</p>"
-        },
-        "applicationDescription":{
-          "shape":"Description",
-          "documentation":"<p>An optional description of the web application.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
-          "idempotencyToken":true
-        }
-      }
-    },
-    "UpdateApplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Url":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"^https\\://\\S+$"
-    },
-    "errorMessage":{"type":"string"}
-  },
-  "documentation":"<p>With Fleet Hub for IoT Device Management you can build stand-alone web applications for monitoring the health of your device fleets.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotfleetwise/2021-06-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotfleetwise/2021-06-17/service-2.json 2.31.35-1/awscli/botocore/data/iotfleetwise/2021-06-17/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotfleetwise/2021-06-17/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotfleetwise/2021-06-17/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1038,7 +1038,7 @@
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p> Updates a vehicle. </p>"
+      "documentation":"<p> Updates a vehicle.</p> <important> <p>Access to certain Amazon Web Services IoT FleetWise features is currently gated. For more information, see <a href=\"https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/fleetwise-regions.html\">Amazon Web Services Region and feature availability</a> in the <i>Amazon Web Services IoT FleetWise Developer Guide</i>.</p> </important>"
     }
   },
   "shapes":{
@@ -1059,7 +1059,7 @@
       ],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"ActuatorFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the actuator. For example, the fully qualified name of an actuator might be <code>Vehicle.Front.Left.Door.Lock</code>.</p>"
         },
         "dataType":{
@@ -1107,6 +1107,12 @@
       },
       "documentation":"<p>A signal that represents a vehicle device such as the engine, heater, and door locks. Data from an actuator reports the state of a certain vehicle device.</p> <note> <p> Updating actuator data can change the state of a device. For example, you can turn on or off the heater by updating its actuator data.</p> </note>"
     },
+    "ActuatorFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "AmazonResourceName":{
       "type":"string",
       "max":1011,
@@ -1143,7 +1149,7 @@
       ],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"AttributeFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the attribute. For example, the fully qualified name of an attribute might be <code>Vehicle.Body.Engine.Type</code>.</p>"
         },
         "dataType":{
@@ -1191,6 +1197,12 @@
       },
       "documentation":"<p>A signal that represents static information about the vehicle, such as engine type or manufacturing date.</p>"
     },
+    "AttributeFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "BatchCreateVehicleRequest":{
       "type":"structure",
       "required":["vehicles"],
@@ -1242,7 +1254,7 @@
       "required":["fullyQualifiedName"],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"BranchFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the branch. For example, the fully qualified name of a branch might be <code>Vehicle.Body.Engine</code>.</p>"
         },
         "description":{
@@ -1260,6 +1272,12 @@
       },
       "documentation":"<p>A group of signals that are defined in a hierarchical structure.</p>"
     },
+    "BranchFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "CampaignStatus":{
       "type":"string",
       "enum":[
@@ -1355,7 +1373,8 @@
     "CanInterfaceName":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "CanSignal":{
       "type":"structure",
@@ -1379,7 +1398,7 @@
         },
         "isSigned":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>Whether the message data is specified as a signed value.</p>"
+          "documentation":"<p>Determines whether the message is signed (<code>true</code>) or not (<code>false</code>). If it's signed, the message can represent both positive and negative numbers. The <code>isSigned</code> parameter only applies to the <code>INTEGER</code> raw signal type, and it doesn't affect the <code>FLOATING_POINT</code> raw signal type.</p>"
         },
         "startBit":{
           "shape":"nonNegativeInteger",
@@ -1400,6 +1419,10 @@
         "name":{
           "shape":"CanSignalName",
           "documentation":"<p>The name of the signal.</p>"
+        },
+        "signalValueType":{
+          "shape":"SignalValueType",
+          "documentation":"<p>The value type of the signal. The default value is <code>INTEGER</code>.</p>"
         }
       },
       "documentation":"<p>Information about a single controller area network (CAN) signal and the messages it receives and transmits.</p>"
@@ -1407,7 +1430,8 @@
     "CanSignalName":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "CloudWatchLogDeliveryOptions":{
       "type":"structure",
@@ -1628,7 +1652,7 @@
           "documentation":"<p>A brief description of the decoder manifest. </p>"
         },
         "modelManifestArn":{
-          "shape":"arn",
+          "shape":"CreateDecoderManifestRequestModelManifestArnString",
           "documentation":"<p> The Amazon Resource Name (ARN) of the vehicle model (model manifest). </p>"
         },
         "signalDecoders":{
@@ -1649,6 +1673,10 @@
         }
       }
     },
+    "CreateDecoderManifestRequestModelManifestArnString":{
+      "type":"string",
+      "pattern":"arn:aws:iotfleetwise:[a-z0-9-]+:[0-9]{12}:model-manifest/[a-zA-Z\\d\\-_:]{1,100}"
+    },
     "CreateDecoderManifestResponse":{
       "type":"structure",
       "required":[
@@ -1725,7 +1753,7 @@
           "documentation":"<p> A brief description of the vehicle model. </p>"
         },
         "nodes":{
-          "shape":"listOfStrings",
+          "shape":"CreateModelManifestRequestNodesList",
           "documentation":"<p> A list of nodes, which are a general abstraction of signals. </p>"
         },
         "signalCatalogArn":{
@@ -1738,6 +1766,12 @@
         }
       }
     },
+    "CreateModelManifestRequestNodesList":{
+      "type":"list",
+      "member":{"shape":"string"},
+      "max":500,
+      "min":0
+    },
     "CreateModelManifestResponse":{
       "type":"structure",
       "required":[
@@ -2021,7 +2055,7 @@
       ],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"CustomPropertyFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the custom property. For example, the fully qualified name of a custom property might be <code>ComplexDataTypes.VehicleDataTypes.SVMCamera.FPS</code>.</p>"
         },
         "dataType":{
@@ -2051,12 +2085,18 @@
       },
       "documentation":"<p>Represents a member of the complex data structure. The data type of the property can be either primitive or another <code>struct</code>.</p>"
     },
+    "CustomPropertyFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "CustomStruct":{
       "type":"structure",
       "required":["fullyQualifiedName"],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"CustomStructFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the custom structure. For example, the fully qualified name of a custom structure might be <code>ComplexDataTypes.VehicleDataTypes.SVMCamera</code>.</p>"
         },
         "description":{
@@ -2074,6 +2114,12 @@
       },
       "documentation":"<p>The custom structure represents a complex or higher-order data structure.</p>"
     },
+    "CustomStructFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "DataDestinationConfig":{
       "type":"structure",
       "members":{
@@ -2096,7 +2142,7 @@
     "DataDestinationConfigs":{
       "type":"list",
       "member":{"shape":"DataDestinationConfig"},
-      "max":1,
+      "max":3,
       "min":1
     },
     "DataExtraDimensionNodePathList":{
@@ -2380,7 +2426,7 @@
       "members":{
         "identifier":{
           "shape":"ResourceIdentifier",
-          "documentation":"<p>A unique, service-generated identifier.</p>"
+          "documentation":"<p>The unique ID of the state template.</p>"
         }
       }
     },
@@ -2534,7 +2580,8 @@
     "FullyQualifiedName":{
       "type":"string",
       "max":150,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "GetCampaignRequest":{
       "type":"structure",
@@ -2928,7 +2975,7 @@
       "members":{
         "identifier":{
           "shape":"ResourceIdentifier",
-          "documentation":"<p>A unique, service-generated identifier.</p>"
+          "documentation":"<p>The unique ID of the state template.</p>"
         }
       }
     },
@@ -3170,7 +3217,8 @@
     "InterfaceId":{
       "type":"string",
       "max":50,
-      "min":1
+      "min":1,
+      "pattern":"[-a-zA-Z0-9_.]+"
     },
     "InterfaceIds":{
       "type":"list",
@@ -3313,6 +3361,10 @@
         "status":{
           "shape":"statusStr",
           "documentation":"<p>An optional parameter to filter the results by the status of each created campaign in your account. The status can be one of: <code>CREATING</code>, <code>WAITING_FOR_APPROVAL</code>, <code>RUNNING</code>, or <code>SUSPENDED</code>.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: campaign name, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -3405,6 +3457,10 @@
         "maxResults":{
           "shape":"maxResults",
           "documentation":"<p>The maximum number of items to return, between 1 and 100, inclusive.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: decoder manifest name, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -3462,6 +3518,10 @@
         "maxResults":{
           "shape":"maxResults",
           "documentation":"<p>The maximum number of items to return, between 1 and 100, inclusive.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: fleet ID, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -3523,6 +3583,10 @@
         "maxResults":{
           "shape":"maxResults",
           "documentation":"<p>The maximum number of items to return, between 1 and 100, inclusive.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: model manifest name, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -3539,6 +3603,10 @@
         }
       }
     },
+    "ListResponseScope":{
+      "type":"string",
+      "enum":["METADATA_ONLY"]
+    },
     "ListSignalCatalogNodesRequest":{
       "type":"structure",
       "required":["name"],
@@ -3610,6 +3678,10 @@
         "maxResults":{
           "shape":"maxResults",
           "documentation":"<p>The maximum number of items to return, between 1 and 100, inclusive.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: state template ID, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -3698,6 +3770,10 @@
         "maxResults":{
           "shape":"listVehiclesMaxResults",
           "documentation":"<p>The maximum number of items to return, between 1 and 100, inclusive.</p>"
+        },
+        "listResponseScope":{
+          "shape":"ListResponseScope",
+          "documentation":"<p>When you set the <code>listResponseScope</code> parameter to <code>METADATA_ONLY</code>, the list response includes: vehicle name, Amazon Resource Name (ARN), creation time, and last modification time.</p>"
         }
       }
     },
@@ -4077,7 +4153,8 @@
     "ObdInterfaceName":{
       "type":"string",
       "max":100,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "ObdSignal":{
       "type":"structure",
@@ -4126,6 +4203,15 @@
         "bitMaskLength":{
           "shape":"ObdBitmaskLength",
           "documentation":"<p>The number of bits to mask in a message.</p>"
+        },
+        "isSigned":{
+          "shape":"PrimitiveBoolean",
+          "documentation":"<p>Determines whether the message is signed (<code>true</code>) or not (<code>false</code>). If it's signed, the message can represent both positive and negative numbers. The <code>isSigned</code> parameter only applies to the <code>INTEGER</code> raw signal type, and it doesn't affect the <code>FLOATING_POINT</code> raw signal type. The default value is <code>false</code>.</p>",
+          "box":true
+        },
+        "signalValueType":{
+          "shape":"SignalValueType",
+          "documentation":"<p>The value type of the signal. The default value is <code>INTEGER</code>.</p>"
         }
       },
       "documentation":"<p>Information about signal messages using the on-board diagnostics (OBD) II protocol in a vehicle.</p>"
@@ -4170,12 +4256,14 @@
     "ProtocolName":{
       "type":"string",
       "max":50,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "ProtocolVersion":{
       "type":"string",
       "max":50,
-      "min":1
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
     },
     "PutEncryptionConfigurationRequest":{
       "type":"structure",
@@ -4404,7 +4492,7 @@
       ],
       "members":{
         "fullyQualifiedName":{
-          "shape":"string",
+          "shape":"SensorFullyQualifiedNameString",
           "documentation":"<p>The fully qualified name of the sensor. For example, the fully qualified name of a sensor might be <code>Vehicle.Body.Engine.Battery</code>.</p>"
         },
         "dataType":{
@@ -4446,6 +4534,12 @@
       },
       "documentation":"<p>An input component that reports the environmental condition of a vehicle.</p> <note> <p>You can collect data about fluid levels, temperatures, vibrations, or battery voltage from sensors.</p> </note>"
     },
+    "SensorFullyQualifiedNameString":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.]+"
+    },
     "SignalCatalogSummary":{
       "type":"structure",
       "members":{
@@ -4589,7 +4683,8 @@
       "type":"list",
       "member":{"shape":"SignalFetchInformation"},
       "max":2,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "SignalInformation":{
       "type":"structure",
@@ -4632,6 +4727,13 @@
         "CUSTOM_PROPERTY"
       ]
     },
+    "SignalValueType":{
+      "type":"string",
+      "enum":[
+        "INTEGER",
+        "FLOATING_POINT"
+      ]
+    },
     "SpoolingMode":{
       "type":"string",
       "enum":[
@@ -4648,7 +4750,7 @@
       "members":{
         "identifier":{
           "shape":"ResourceIdentifier",
-          "documentation":"<p>A unique, service-generated identifier.</p>"
+          "documentation":"<p>The unique ID of the state template.</p>"
         },
         "stateTemplateUpdateStrategy":{"shape":"StateTemplateUpdateStrategy"}
       },
@@ -5195,7 +5297,7 @@
         },
         "status":{
           "shape":"CampaignStatus",
-          "documentation":"<p>The state of a campaign. The status can be one of:</p> <ul> <li> <p> <code>CREATING</code> - Amazon Web Services IoT FleetWise is processing your request to create the campaign. </p> </li> <li> <p> <code>WAITING_FOR_APPROVAL</code> - After a campaign is created, it enters the <code>WAITING_FOR_APPROVAL</code> state. To allow Amazon Web Services IoT FleetWise to deploy the campaign to the target vehicle or fleet, use the API operation to approve the campaign. </p> </li> <li> <p> <code>RUNNING</code> - The campaign is active. </p> </li> <li> <p> <code>SUSPENDED</code> - The campaign is suspended. To resume the campaign, use the API operation. </p> </li> </ul>"
+          "documentation":"<p>The state of a campaign. The status can be one of:</p> <ul> <li> <p> <code>CREATING</code> - Amazon Web Services IoT FleetWise is processing your request to create the campaign. </p> </li> <li> <p> <code>WAITING_FOR_APPROVAL</code> - After you create a campaign, it enters this state. Use the API operation to approve the campaign for deployment to the target vehicle or fleet. </p> </li> <li> <p> <code>RUNNING</code> - The campaign is active. </p> </li> <li> <p> <code>SUSPENDED</code> - The campaign is suspended. To resume the campaign, use the API operation. </p> </li> </ul>"
         }
       }
     },
@@ -5388,7 +5490,7 @@
       "members":{
         "identifier":{
           "shape":"ResourceIdentifier",
-          "documentation":"<p>A unique, service-generated identifier.</p>"
+          "documentation":"<p>The unique ID of the state template.</p>"
         },
         "description":{
           "shape":"description",
@@ -5478,6 +5580,10 @@
         "stateTemplatesToRemove":{
           "shape":"StateTemplateAssociationIdentifiers",
           "documentation":"<p>Remove state templates from the vehicle.</p>"
+        },
+        "stateTemplatesToUpdate":{
+          "shape":"StateTemplateAssociations",
+          "documentation":"<p>Change the <code>stateTemplateUpdateStrategy</code> of state templates already associated with the vehicle.</p>"
         }
       }
     },
@@ -5512,9 +5618,13 @@
         "stateTemplatesToRemove":{
           "shape":"StateTemplateAssociationIdentifiers",
           "documentation":"<p>Remove existing state template associations from the vehicle.</p>"
+        },
+        "stateTemplatesToUpdate":{
+          "shape":"StateTemplateAssociations",
+          "documentation":"<p>Change the <code>stateTemplateUpdateStrategy</code> of state templates already associated with the vehicle.</p>"
         }
       },
-      "documentation":"<p>Information about the vehicle to update.</p>"
+      "documentation":"<p>Information about the vehicle to update.</p> <important> <p>Access to certain Amazon Web Services IoT FleetWise features is currently gated. For more information, see <a href=\"https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/fleetwise-regions.html\">Amazon Web Services Region and feature availability</a> in the <i>Amazon Web Services IoT FleetWise Developer Guide</i>.</p> </important>"
     },
     "UpdateVehicleResponse":{
       "type":"structure",
@@ -5632,7 +5742,8 @@
         "READY",
         "HEALTHY",
         "SUSPENDED",
-        "DELETING"
+        "DELETING",
+        "READY_FOR_CHECKIN"
       ]
     },
     "VehicleStatus":{
@@ -5648,7 +5759,7 @@
         },
         "status":{
           "shape":"VehicleState",
-          "documentation":"<p>The status of a campaign, which can be one of the following:</p> <ul> <li> <p> <code>CREATED</code> - The campaign has been created successfully but has not been approved. </p> </li> <li> <p> <code>READY</code> - The campaign has been approved but has not been deployed to the vehicle.</p> </li> <li> <p> <code>HEALTHY</code> - The campaign has been deployed to the vehicle. </p> </li> <li> <p> <code>SUSPENDED</code> - The campaign has been suspended and data collection is paused. </p> </li> <li> <p> <code>DELETING</code> - The campaign is being removed from the vehicle.</p> </li> </ul>"
+          "documentation":"<p>The status of a campaign, which can be one of the following:</p> <ul> <li> <p> <code>CREATED</code> - The campaign exists but is not yet approved.</p> </li> <li> <p> <code>READY</code> - The campaign is approved but has not been deployed to the vehicle. Data has not arrived at the vehicle yet.</p> </li> <li> <p> <code>HEALTHY</code> - The campaign is deployed to the vehicle.</p> </li> <li> <p> <code>SUSPENDED</code> - The campaign is suspended and data collection is paused.</p> </li> <li> <p> <code>DELETING</code> - The campaign is being removed from the vehicle.</p> </li> <li> <p> <code>READY_FOR_CHECKIN</code> - The campaign is approved and waiting for vehicle check-in before deployment.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Information about a campaign associated with a vehicle.</p>"
@@ -5851,17 +5962,20 @@
     },
     "nonNegativeInteger":{
       "type":"integer",
+      "max":2147483647,
       "min":0
     },
     "number":{"type":"integer"},
     "positiveInteger":{
       "type":"integer",
       "box":true,
+      "max":2147483647,
       "min":1
     },
     "positiveLong":{
       "type":"long",
       "box":true,
+      "max":9223372036854775807,
       "min":1
     },
     "priority":{
@@ -5882,7 +5996,7 @@
     "statusStr":{
       "type":"string",
       "max":20,
-      "min":7,
+      "min":1,
       "pattern":"[A-Z_]*"
     },
     "string":{"type":"string"},
diff -pruN 2.23.6-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/service-2.json 2.31.35-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotsecuretunneling/2018-10-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -152,8 +152,7 @@
     },
     "CloseTunnelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConnectionState":{
       "type":"structure",
@@ -435,8 +434,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -585,8 +583,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     }
   },
   "documentation":"<fullname>IoT Secure Tunneling</fullname> <p>IoT Secure Tunneling creates remote connections to devices deployed in the field.</p> <p>For more information about how IoT Secure Tunneling works, see <a href=\"https://docs.aws.amazon.com/iot/latest/developerguide/secure-tunneling.html\">IoT Secure Tunneling</a>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/paginators-1.json 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -131,6 +131,36 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "datasetSummaries"
+    },
+    "ListComputationModelDataBindingUsages": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dataBindingUsageSummaries"
+    },
+    "ListComputationModelResolveToResources": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "computationModelResolveToResourceSummaries"
+    },
+    "ListComputationModels": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "computationModelSummaries"
+    },
+    "ListExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "executionSummaries"
+    },
+    "ListInterfaceRelationships": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "interfaceRelationshipSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/service-2.json 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotsitewise/2019-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotsitewise/2019-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -174,7 +174,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates an access policy that grants the specified identity (IAM Identity Center user, IAM Identity Center group, or IAM user) access to the specified IoT SiteWise Monitor portal or project resource.</p>",
+      "documentation":"<p>Creates an access policy that grants the specified identity (IAM Identity Center user, IAM Identity Center group, or IAM user) access to the specified IoT SiteWise Monitor portal or project resource.</p> <note> <p>Support for access policies that use an SSO Group as the identity is not supported at this time.</p> </note>",
       "endpoint":{"hostPrefix":"monitor."}
     },
     "CreateAsset":{
@@ -216,7 +216,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ConflictingOperationException"}
       ],
-      "documentation":"<p>Creates an asset model from specified property and hierarchy definitions. You create assets from asset models. With asset models, you can easily create assets of the same type that have standardized definitions. Each asset created from a model inherits the asset model's property and hierarchy definitions. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/define-models.html\">Defining asset models</a> in the <i>IoT SiteWise User Guide</i>.</p> <p>You can create two types of asset models, <code>ASSET_MODEL</code> or <code>COMPONENT_MODEL</code>.</p> <ul> <li> <p> <b>ASSET_MODEL</b> – (default) An asset model that you can use to create assets. Can't be included as a component in another asset model.</p> </li> <li> <p> <b>COMPONENT_MODEL</b> – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model. </p> </li> </ul>",
+      "documentation":"<p>Creates an asset model from specified property and hierarchy definitions. You create assets from asset models. With asset models, you can easily create assets of the same type that have standardized definitions. Each asset created from a model inherits the asset model's property and hierarchy definitions. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/define-models.html\">Defining asset models</a> in the <i>IoT SiteWise User Guide</i>.</p> <p>You can create three types of asset models, <code>ASSET_MODEL</code>, <code>COMPONENT_MODEL</code>, or an <code>INTERFACE</code>.</p> <ul> <li> <p> <b>ASSET_MODEL</b> – (default) An asset model that you can use to create assets. Can't be included as a component in another asset model.</p> </li> <li> <p> <b>COMPONENT_MODEL</b> – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model. </p> </li> <li> <p> <b>INTERFACE</b> – An interface is a type of model that defines a standard structure that can be applied to different asset models.</p> </li> </ul>",
       "endpoint":{"hostPrefix":"api."}
     },
     "CreateAssetModelCompositeModel":{
@@ -259,9 +259,30 @@
         {"shape":"LimitExceededException"},
         {"shape":"ConflictingOperationException"}
       ],
-      "documentation":"<p>Defines a job to ingest data to IoT SiteWise from Amazon S3. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/CreateBulkImportJob.html\">Create a bulk import job (CLI)</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <important> <p>Before you create a bulk import job, you must enable IoT SiteWise warm tier or IoT SiteWise cold tier. For more information about how to configure storage settings, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_PutStorageConfiguration.html\">PutStorageConfiguration</a>.</p> <p>Bulk import is designed to store historical data to IoT SiteWise. It does not trigger computations or notifications on IoT SiteWise warm or cold tier storage.</p> </important>",
+      "documentation":"<p>Defines a job to ingest data to IoT SiteWise from Amazon S3. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/CreateBulkImportJob.html\">Create a bulk import job (CLI)</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <important> <p>Before you create a bulk import job, you must enable IoT SiteWise warm tier or IoT SiteWise cold tier. For more information about how to configure storage settings, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_PutStorageConfiguration.html\">PutStorageConfiguration</a>.</p> <p>Bulk import is designed to store historical data to IoT SiteWise.</p> <ul> <li> <p>Newly ingested data in the hot tier triggers notifications and computations.</p> </li> <li> <p>After data moves from the hot tier to the warm or cold tier based on retention settings, it does not trigger computations or notifications.</p> </li> <li> <p>Data older than 7 days does not trigger computations or notifications.</p> </li> </ul> </important>",
       "endpoint":{"hostPrefix":"data."}
     },
+    "CreateComputationModel":{
+      "name":"CreateComputationModel",
+      "http":{
+        "method":"POST",
+        "requestUri":"/computation-models",
+        "responseCode":202
+      },
+      "input":{"shape":"CreateComputationModelRequest"},
+      "output":{"shape":"CreateComputationModelResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceAlreadyExistsException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ConflictingOperationException"}
+      ],
+      "documentation":"<p>Create a computation model with a configuration and data binding.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "CreateDashboard":{
       "name":"CreateDashboard",
       "http":{
@@ -436,6 +457,44 @@
       "documentation":"<p>Deletes a composite model. This action can't be undone. You must delete all assets created from a composite model before you can delete the model. Also, you can't delete a composite model if a parent asset model exists that contains a property formula expression that depends on the asset model that you want to delete. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/delete-assets-and-models.html\">Deleting assets and models</a> in the <i>IoT SiteWise User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "DeleteAssetModelInterfaceRelationship":{
+      "name":"DeleteAssetModelInterfaceRelationship",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteAssetModelInterfaceRelationshipRequest"},
+      "output":{"shape":"DeleteAssetModelInterfaceRelationshipResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictingOperationException"}
+      ],
+      "documentation":"<p>Deletes an interface relationship between an asset model and an interface asset model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
+    "DeleteComputationModel":{
+      "name":"DeleteComputationModel",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/computation-models/{computationModelId}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteComputationModelRequest"},
+      "output":{"shape":"DeleteComputationModelResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictingOperationException"}
+      ],
+      "documentation":"<p>Deletes a computation model. This action can't be undone.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "DeleteDashboard":{
       "name":"DeleteDashboard",
       "http":{
@@ -627,7 +686,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves information about an asset model.</p>",
+      "documentation":"<p>Retrieves information about an asset model. This includes details about the asset model's properties, hierarchies, composite models, and any interface relationships if the asset model implements interfaces.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
     "DescribeAssetModelCompositeModel":{
@@ -647,6 +706,23 @@
       "documentation":"<p>Retrieves information about an asset model composite model (also known as an asset model component). For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/custom-composite-models.html\">Custom composite models (Components)</a> in the <i>IoT SiteWise User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "DescribeAssetModelInterfaceRelationship":{
+      "name":"DescribeAssetModelInterfaceRelationship",
+      "http":{
+        "method":"GET",
+        "requestUri":"/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship"
+      },
+      "input":{"shape":"DescribeAssetModelInterfaceRelationshipRequest"},
+      "output":{"shape":"DescribeAssetModelInterfaceRelationshipResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about an interface relationship between an asset model and an interface asset model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "DescribeAssetProperty":{
       "name":"DescribeAssetProperty",
       "http":{
@@ -681,6 +757,40 @@
       "documentation":"<p>Retrieves information about a bulk import job request. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/DescribeBulkImportJob.html\">Describe a bulk import job (CLI)</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"data."}
     },
+    "DescribeComputationModel":{
+      "name":"DescribeComputationModel",
+      "http":{
+        "method":"GET",
+        "requestUri":"/computation-models/{computationModelId}"
+      },
+      "input":{"shape":"DescribeComputationModelRequest"},
+      "output":{"shape":"DescribeComputationModelResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about a computation model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
+    "DescribeComputationModelExecutionSummary":{
+      "name":"DescribeComputationModelExecutionSummary",
+      "http":{
+        "method":"GET",
+        "requestUri":"/computation-models/{computationModelId}/execution-summary"
+      },
+      "input":{"shape":"DescribeComputationModelExecutionSummaryRequest"},
+      "output":{"shape":"DescribeComputationModelExecutionSummaryResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about the execution summary of a computation model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "DescribeDashboard":{
       "name":"DescribeDashboard",
       "http":{
@@ -732,6 +842,23 @@
       "documentation":"<p>Retrieves information about the default encryption configuration for the Amazon Web Services account in the default or specified Region. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/key-management.html\">Key management</a> in the <i>IoT SiteWise User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "DescribeExecution":{
+      "name":"DescribeExecution",
+      "http":{
+        "method":"GET",
+        "requestUri":"/executions/{executionId}"
+      },
+      "input":{"shape":"DescribeExecutionRequest"},
+      "output":{"shape":"DescribeExecutionResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about the execution.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "DescribeGateway":{
       "name":"DescribeGateway",
       "http":{
@@ -763,7 +890,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves information about a gateway capability configuration. Each gateway capability defines data sources for a gateway. A capability configuration can contain multiple data source configurations. If you define OPC-UA sources for a gateway in the IoT SiteWise console, all of your OPC-UA sources are stored in one capability configuration. To list all capability configurations for a gateway, use <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeGateway.html\">DescribeGateway</a>.</p>",
+      "documentation":"<p>Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability.</p> <p>. The namespace follows the format <code>service:capability:version</code>, where:</p> <ul> <li> <p> <code>service</code> - The service providing the capability, or <code>iotsitewise</code>.</p> </li> <li> <p> <code>capability</code> - The specific capability type. Options include: <code>opcuacollector</code> for the OPC UA data source collector, or <code>publisher</code> for data publisher capability.</p> </li> <li> <p> <code>version</code> - The version number of the capability. Option include <code>2</code> for Classic streams, V2 gateways, and <code>3</code> for MQTT-enabled, V3 gateways.</p> </li> </ul> <p>After updating a capability configuration, the sync status becomes <code>OUT_OF_SYNC</code> until the gateway processes the configuration.Use <code>DescribeGatewayCapabilityConfiguration</code> to check the sync status and verify the configuration was applied.</p> <p>A gateway can have multiple capability configurations with different namespaces.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
     "DescribeLoggingOptions":{
@@ -1013,10 +1140,10 @@
       "errors":[
         {"shape":"InternalFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidRequestException"},
         {"shape":"LimitExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictingOperationException"}
       ],
       "documentation":"<p>Invokes SiteWise Assistant to start or continue a conversation.</p>",
@@ -1208,6 +1335,55 @@
       "documentation":"<p>Retrieves a paginated list of composition relationships for an asset model of type <code>COMPONENT_MODEL</code>.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "ListComputationModelDataBindingUsages":{
+      "name":"ListComputationModelDataBindingUsages",
+      "http":{
+        "method":"POST",
+        "requestUri":"/computation-models/data-binding-usages"
+      },
+      "input":{"shape":"ListComputationModelDataBindingUsagesRequest"},
+      "output":{"shape":"ListComputationModelDataBindingUsagesResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p> Lists all data binding usages for computation models. This allows to identify where specific data bindings are being utilized across the computation models. This track dependencies between data sources and computation models. </p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
+    "ListComputationModelResolveToResources":{
+      "name":"ListComputationModelResolveToResources",
+      "http":{
+        "method":"GET",
+        "requestUri":"/computation-models/{computationModelId}/resolve-to-resources"
+      },
+      "input":{"shape":"ListComputationModelResolveToResourcesRequest"},
+      "output":{"shape":"ListComputationModelResolveToResourcesResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists all distinct resources that are resolved from the executed actions of the computation model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
+    "ListComputationModels":{
+      "name":"ListComputationModels",
+      "http":{
+        "method":"GET",
+        "requestUri":"/computation-models"
+      },
+      "input":{"shape":"ListComputationModelsRequest"},
+      "output":{"shape":"ListComputationModelsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves a paginated list of summaries of all computation models.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "ListDashboards":{
       "name":"ListDashboards",
       "http":{
@@ -1241,6 +1417,23 @@
       "documentation":"<p>Retrieves a paginated list of datasets for a specific target resource.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "ListExecutions":{
+      "name":"ListExecutions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/executions"
+      },
+      "input":{"shape":"ListExecutionsRequest"},
+      "output":{"shape":"ListExecutionsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves a paginated list of summaries of all executions.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "ListGateways":{
       "name":"ListGateways",
       "http":{
@@ -1257,6 +1450,23 @@
       "documentation":"<p>Retrieves a paginated list of gateways.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "ListInterfaceRelationships":{
+      "name":"ListInterfaceRelationships",
+      "http":{
+        "method":"GET",
+        "requestUri":"/interface/{interfaceAssetModelId}/asset-models"
+      },
+      "input":{"shape":"ListInterfaceRelationshipsRequest"},
+      "output":{"shape":"ListInterfaceRelationshipsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves a paginated list of asset models that have a specific interface asset model applied to them.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "ListPortals":{
       "name":"ListPortals",
       "http":{
@@ -1345,6 +1555,26 @@
       "documentation":"<p>Retrieves a paginated list of time series (data streams).</p>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "PutAssetModelInterfaceRelationship":{
+      "name":"PutAssetModelInterfaceRelationship",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/asset-models/{assetModelId}/interface/{interfaceAssetModelId}/asset-model-interface-relationship",
+        "responseCode":202
+      },
+      "input":{"shape":"PutAssetModelInterfaceRelationshipRequest"},
+      "output":{"shape":"PutAssetModelInterfaceRelationshipResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ConflictingOperationException"}
+      ],
+      "documentation":"<p>Creates or updates an interface relationship between an asset model and an interface asset model. This operation applies an interface to an asset model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "PutDefaultEncryptionConfiguration":{
       "name":"PutDefaultEncryptionConfiguration",
       "http":{
@@ -1541,6 +1771,27 @@
       "documentation":"<p>Updates an asset property's alias and notification state.</p> <important> <p>This operation overwrites the property's existing alias and notification state. To keep your existing property's alias or notification state, you must include the existing values in the UpdateAssetProperty request. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetProperty.html\">DescribeAssetProperty</a>.</p> </important>",
       "endpoint":{"hostPrefix":"api."}
     },
+    "UpdateComputationModel":{
+      "name":"UpdateComputationModel",
+      "http":{
+        "method":"POST",
+        "requestUri":"/computation-models/{computationModelId}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateComputationModelRequest"},
+      "output":{"shape":"UpdateComputationModelResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceAlreadyExistsException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ConflictingOperationException"}
+      ],
+      "documentation":"<p>Updates the computation model.</p>",
+      "endpoint":{"hostPrefix":"api."}
+    },
     "UpdateDashboard":{
       "name":"UpdateDashboard",
       "http":{
@@ -1613,7 +1864,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Updates a gateway capability configuration or defines a new capability configuration. Each gateway capability defines data sources for a gateway. A capability configuration can contain multiple data source configurations. If you define OPC-UA sources for a gateway in the IoT SiteWise console, all of your OPC-UA sources are stored in one capability configuration. To list all capability configurations for a gateway, use <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeGateway.html\">DescribeGateway</a>.</p>",
+      "documentation":"<p>Updates a gateway capability configuration or defines a new capability configuration. Each gateway capability defines data sources for a gateway.</p> <p>Important workflow notes:</p> <p>Each gateway capability defines data sources for a gateway. This is the namespace of the gateway capability.</p> <p>. The namespace follows the format <code>service:capability:version</code>, where:</p> <ul> <li> <p> <code>service</code> - The service providing the capability, or <code>iotsitewise</code>.</p> </li> <li> <p> <code>capability</code> - The specific capability type. Options include: <code>opcuacollector</code> for the OPC UA data source collector, or <code>publisher</code> for data publisher capability.</p> </li> <li> <p> <code>version</code> - The version number of the capability. Option include <code>2</code> for Classic streams, V2 gateways, and <code>3</code> for MQTT-enabled, V3 gateways.</p> </li> </ul> <p>After updating a capability configuration, the sync status becomes <code>OUT_OF_SYNC</code> until the gateway processes the configuration.Use <code>DescribeGatewayCapabilityConfiguration</code> to check the sync status and verify the configuration was applied.</p> <p>A gateway can have multiple capability configurations with different namespaces.</p>",
       "endpoint":{"hostPrefix":"api."}
     },
     "UpdatePortal":{
@@ -1770,9 +2021,13 @@
         "targetResource":{
           "shape":"TargetResource",
           "documentation":"<p>The resource the action will be taken on.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this action resolves to.</p>"
         }
       },
-      "documentation":"<p>Contains the summary of the actions.</p>"
+      "documentation":"<p>Contains the summary of the actions, including information about where the action resolves to.</p>"
     },
     "AdaptiveIngestion":{"type":"boolean"},
     "AggregateType":{
@@ -1868,6 +2123,17 @@
       "max":1011,
       "min":1
     },
+    "AssetBindingValueFilter":{
+      "type":"structure",
+      "required":["assetId"],
+      "members":{
+        "assetId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset to filter data bindings by. Only data bindings referencing this specific asset are matched.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to match data bindings based on a specific asset. This filter identifies all computation models referencing a particular asset in their data bindings.</p>"
+    },
     "AssetCompositeModel":{
       "type":"structure",
       "required":[
@@ -2006,13 +2272,13 @@
           "shape":"ID",
           "documentation":"<p>The ID of the hierarchy. This ID is a <code>hierarchyId</code>.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The hierarchy name provided in the <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModel.html\">CreateAssetModel</a> or <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html\">UpdateAssetModel</a> API operation.</p>"
-        },
         "externalId":{
           "shape":"ExternalId",
           "documentation":"<p>The external ID of the hierarchy, if it has one. When you update an asset hierarchy, you may assign an external ID if it doesn't already have one. You can't change the external ID of an asset hierarchy that already has one. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The hierarchy name provided in the <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModel.html\">CreateAssetModel</a> or <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetModel.html\">UpdateAssetModel</a> API operation.</p>"
         }
       },
       "documentation":"<p>Describes an asset hierarchy that contains a hierarchy's name and ID.</p>"
@@ -2035,6 +2301,17 @@
       "type":"list",
       "member":{"shape":"ID"}
     },
+    "AssetModelBindingValueFilter":{
+      "type":"structure",
+      "required":["assetModelId"],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model to filter data bindings by. Only data bindings referemncing this specific asset model are matched.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to match data bindings based on a specific asset model. This filter identifies all computation models referencing a particular asset model in their data bindings.</p>"
+    },
     "AssetModelCompositeModel":{
       "type":"structure",
       "required":[
@@ -2275,6 +2552,42 @@
       },
       "documentation":"<p>Contains information about an asset model property.</p>"
     },
+    "AssetModelPropertyBindingValue":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "propertyId"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model, in UUID format.</p>"
+        },
+        "propertyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model property used in data binding value.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an <code>assetModelProperty</code> binding value.</p>"
+    },
+    "AssetModelPropertyBindingValueFilter":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "propertyId"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model containing the filter property. This identifies the specific asset model that contains the property of interest.</p>"
+        },
+        "propertyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the property within the asset model to filter by. Only data bindings referencing this specific property of the specified asset model are matched.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to match data bindings based on a specific asset model property. This filter identifies all computation models that reference a particular property of an asset model in their data bindings.</p>"
+    },
     "AssetModelPropertyDefinition":{
       "type":"structure",
       "required":[
@@ -2380,9 +2693,13 @@
         "path":{
           "shape":"AssetModelPropertyPath",
           "documentation":"<p>The structured path to the property from the root of the asset model.</p>"
+        },
+        "interfaceSummaries":{
+          "shape":"InterfaceSummaries",
+          "documentation":"<p>A list of interface summaries that describe which interfaces this property belongs to, including the interface asset model ID and the corresponding property ID in the interface.</p>"
         }
       },
-      "documentation":"<p>Contains a summary of a property associated with a model.</p>"
+      "documentation":"<p>Contains a summary of a property associated with a model. This includes information about which interfaces the property belongs to, if any.</p>"
     },
     "AssetModelState":{
       "type":"string",
@@ -2473,7 +2790,8 @@
       "type":"string",
       "enum":[
         "ASSET_MODEL",
-        "COMPONENT_MODEL"
+        "COMPONENT_MODEL",
+        "INTERFACE"
       ]
     },
     "AssetModelVersionFilter":{
@@ -2503,6 +2821,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset property.</p>"
         },
+        "externalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the property.</p>"
@@ -2530,10 +2852,6 @@
         "path":{
           "shape":"AssetPropertyPath",
           "documentation":"<p>The structured path to the property from the root of the asset.</p>"
-        },
-        "externalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains asset property information.</p>"
@@ -2544,6 +2862,42 @@
       "min":1,
       "pattern":"[^\\u0000-\\u001F\\u007F]+"
     },
+    "AssetPropertyBindingValue":{
+      "type":"structure",
+      "required":[
+        "assetId",
+        "propertyId"
+      ],
+      "members":{
+        "assetId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset containing the property. This identifies the specific asset instance's property value used in the computation model.</p>"
+        },
+        "propertyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the property within the asset. This identifies the specific property's value used in the computation model.</p>"
+        }
+      },
+      "documentation":"<p>Represents a data binding value referencing a specific asset property. It's used to bind computation model variables to actual asset property values for processing.</p>"
+    },
+    "AssetPropertyBindingValueFilter":{
+      "type":"structure",
+      "required":[
+        "assetId",
+        "propertyId"
+      ],
+      "members":{
+        "assetId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset containing the property to filter by. This identifies the specific asset instance containing the property of interest.</p>"
+        },
+        "propertyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the property within the asset to filter by. Only data bindings referencing this specific property of the specified asset are matched.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to match data bindings based on a specific asset property. This filter helps identify all computation models referencing a particular property of an asset in their data bindings.</p>"
+    },
     "AssetPropertyPath":{
       "type":"list",
       "member":{"shape":"AssetPropertyPathSegment"}
@@ -2574,6 +2928,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the property.</p>"
         },
+        "externalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "alias":{
           "shape":"PropertyAlias",
           "documentation":"<p>The alias that identifies the property, such as an OPC-UA server data stream path (for example, <code>/company/windfarm/3/turbine/7/temperature</code>). For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/connect-data-streams.html\">Mapping industrial data streams to asset properties</a> in the <i>IoT SiteWise User Guide</i>.</p>"
@@ -2590,10 +2948,6 @@
         "path":{
           "shape":"AssetPropertyPath",
           "documentation":"<p>The structured path to the property from the root of the asset.</p>"
-        },
-        "externalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains a summary of a property associated with an asset.</p>"
@@ -2697,6 +3051,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset, in UUID format.</p>"
         },
+        "externalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "arn":{
           "shape":"ARN",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the asset, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:asset/${AssetId}</code> </p>"
@@ -2728,10 +3086,6 @@
         "description":{
           "shape":"Description",
           "documentation":"<p>A description for the asset.</p>"
-        },
-        "externalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains a summary of an asset.</p>"
@@ -2819,6 +3173,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset, in UUID format.</p>"
         },
+        "externalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "arn":{
           "shape":"ARN",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the asset, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:asset/${AssetId}</code> </p>"
@@ -2850,10 +3208,6 @@
         "description":{
           "shape":"Description",
           "documentation":"<p>A description for the asset.</p>"
-        },
-        "externalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains a summary of an associated asset.</p>"
@@ -3603,6 +3957,10 @@
         }
       }
     },
+    "BindingValueList":{
+      "type":"list",
+      "member":{"shape":"ComputationModelDataBindingValue"}
+    },
     "BooleanValue":{"type":"boolean"},
     "Bucket":{
       "type":"string",
@@ -3778,6 +4136,199 @@
       },
       "documentation":"<p>Contains a summary of the components of the composite model.</p>"
     },
+    "ComputationModelAnomalyDetectionConfiguration":{
+      "type":"structure",
+      "required":[
+        "inputProperties",
+        "resultProperty"
+      ],
+      "members":{
+        "inputProperties":{
+          "shape":"InputProperties",
+          "documentation":"<p>Define the variable name associated with input properties, with the following format <code>${VariableName}</code>.</p>"
+        },
+        "resultProperty":{
+          "shape":"ResultProperty",
+          "documentation":"<p>Define the variable name associated with the result property, and the following format <code>${VariableName}</code>.</p>"
+        }
+      },
+      "documentation":"<p>Contains the configuration of the type of anomaly detection computation model.</p>"
+    },
+    "ComputationModelConfiguration":{
+      "type":"structure",
+      "members":{
+        "anomalyDetection":{
+          "shape":"ComputationModelAnomalyDetectionConfiguration",
+          "documentation":"<p>The configuration for the anomaly detection type of computation model.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the computation model.</p>"
+    },
+    "ComputationModelDataBinding":{
+      "type":"map",
+      "key":{"shape":"ComputationModelDataBindingVariable"},
+      "value":{"shape":"ComputationModelDataBindingValue"}
+    },
+    "ComputationModelDataBindingUsageSummaries":{
+      "type":"list",
+      "member":{"shape":"ComputationModelDataBindingUsageSummary"}
+    },
+    "ComputationModelDataBindingUsageSummary":{
+      "type":"structure",
+      "required":[
+        "computationModelIds",
+        "matchedDataBinding"
+      ],
+      "members":{
+        "computationModelIds":{
+          "shape":"ComputationModelIdList",
+          "documentation":"<p>The list of computation model IDs that use this data binding. This allows identification of all computation models affected by changes to the referenced data source.</p>"
+        },
+        "matchedDataBinding":{
+          "shape":"MatchedDataBinding",
+          "documentation":"<p>The data binding matched by the filter criteria. Contains details about specific data binding values used by the computation models.</p>"
+        }
+      },
+      "documentation":"<p>A summary of how a specific data binding is used across computation models. This tracks dependencies between data sources and computation models, allowing you to understand the impact of changes to data sources.</p>"
+    },
+    "ComputationModelDataBindingValue":{
+      "type":"structure",
+      "members":{
+        "assetModelProperty":{
+          "shape":"AssetModelPropertyBindingValue",
+          "documentation":"<p>Specifies an asset model property data binding value.</p>"
+        },
+        "assetProperty":{
+          "shape":"AssetPropertyBindingValue",
+          "documentation":"<p>The asset property value used for computation model data binding.</p>"
+        },
+        "list":{
+          "shape":"BindingValueList",
+          "documentation":"<p>Specifies a list of data binding value.</p>"
+        }
+      },
+      "documentation":"<p>Contains computation model data binding value information, which can be one of <code>assetModelProperty</code>, <code>list</code>.</p>"
+    },
+    "ComputationModelDataBindingVariable":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"^[a-z][a-z0-9_]*$"
+    },
+    "ComputationModelExecutionSummary":{
+      "type":"map",
+      "key":{"shape":"ComputationModelExecutionSummaryKey"},
+      "value":{"shape":"ComputationModelExecutionSummaryValue"}
+    },
+    "ComputationModelExecutionSummaryKey":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ComputationModelExecutionSummaryValue":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ComputationModelIdList":{
+      "type":"list",
+      "member":{"shape":"ID"}
+    },
+    "ComputationModelResolveToResourceSummaries":{
+      "type":"list",
+      "member":{"shape":"ComputationModelResolveToResourceSummary"}
+    },
+    "ComputationModelResolveToResourceSummary":{
+      "type":"structure",
+      "members":{
+        "resolveTo":{"shape":"ResolveTo"}
+      },
+      "documentation":"<p>A summary of the resource that a computation model resolves to.</p>"
+    },
+    "ComputationModelState":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "UPDATING",
+        "DELETING",
+        "FAILED"
+      ]
+    },
+    "ComputationModelStatus":{
+      "type":"structure",
+      "required":["state"],
+      "members":{
+        "state":{
+          "shape":"ComputationModelState",
+          "documentation":"<p>The current state of the computation model.</p>"
+        },
+        "error":{"shape":"ErrorDetails"}
+      },
+      "documentation":"<p>Contains current status information for a computation model.</p>"
+    },
+    "ComputationModelSummaries":{
+      "type":"list",
+      "member":{"shape":"ComputationModelSummary"}
+    },
+    "ComputationModelSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "arn",
+        "name",
+        "type",
+        "creationDate",
+        "lastUpdateDate",
+        "status",
+        "version"
+      ],
+      "members":{
+        "id":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>"
+        },
+        "arn":{
+          "shape":"ARN",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the computation model, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:computation-model/${ComputationModelId}</code> </p>"
+        },
+        "name":{
+          "shape":"RestrictedName",
+          "documentation":"<p>The name of the computation model.</p>"
+        },
+        "description":{
+          "shape":"RestrictedDescription",
+          "documentation":"<p>The description of the computation model.</p>"
+        },
+        "type":{
+          "shape":"ComputationModelType",
+          "documentation":"<p>The type of the computation model.</p>"
+        },
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The model creation date, in Unix epoch time.</p>"
+        },
+        "lastUpdateDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the model was last updated, in Unix epoch time.</p>"
+        },
+        "status":{
+          "shape":"ComputationModelStatus",
+          "documentation":"<p>The current status of the computation model.</p>"
+        },
+        "version":{
+          "shape":"Version",
+          "documentation":"<p>The version of the computation model.</p>"
+        }
+      },
+      "documentation":"<p>Contains a summary of a computation model.</p>"
+    },
+    "ComputationModelType":{
+      "type":"string",
+      "enum":["ANOMALY_DETECTION"]
+    },
+    "ComputationModelVersionFilter":{
+      "type":"string",
+      "pattern":"^(LATEST|ACTIVE|[1-9]{1}\\d{0,9})$"
+    },
     "ComputeLocation":{
       "type":"string",
       "enum":[
@@ -3864,6 +4415,14 @@
       "min":36,
       "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
     },
+    "CoreDeviceOperatingSystem":{
+      "type":"string",
+      "enum":[
+        "LINUX_AARCH64",
+        "LINUX_AMD64",
+        "WINDOWS_AMD64"
+      ]
+    },
     "CoreDeviceThingName":{
       "type":"string",
       "max":128,
@@ -4092,6 +4651,14 @@
           "shape":"CustomID",
           "documentation":"<p>The ID of the asset model from which to create the asset. This can be either the actual ID in UUID format, or else <code>externalId:</code> followed by the external ID, if it has one. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-id-references\">Referencing objects with external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         },
+        "assetId":{
+          "shape":"ID",
+          "documentation":"<p>The ID to assign to the asset, if desired. IoT SiteWise automatically generates a unique ID for you, so this parameter is never required. However, if you prefer to supply your own ID instead, you can specify it here in UUID format. If you specify your own ID, it must be globally unique.</p>"
+        },
+        "assetExternalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>An external ID to assign to the asset. The external ID must be unique within your Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
@@ -4104,14 +4671,6 @@
         "assetDescription":{
           "shape":"Description",
           "documentation":"<p>A description for the asset.</p>"
-        },
-        "assetId":{
-          "shape":"ID",
-          "documentation":"<p>The ID to assign to the asset, if desired. IoT SiteWise automatically generates a unique ID for you, so this parameter is never required. However, if you prefer to supply your own ID instead, you can specify it here in UUID format. If you specify your own ID, it must be globally unique.</p>"
-        },
-        "assetExternalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>An external ID to assign to the asset. The external ID must be unique within your Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       }
     },
@@ -4199,6 +4758,63 @@
         }
       }
     },
+    "CreateComputationModelRequest":{
+      "type":"structure",
+      "required":[
+        "computationModelName",
+        "computationModelConfiguration",
+        "computationModelDataBinding"
+      ],
+      "members":{
+        "computationModelName":{
+          "shape":"RestrictedName",
+          "documentation":"<p>The name of the computation model.</p>"
+        },
+        "computationModelDescription":{
+          "shape":"RestrictedDescription",
+          "documentation":"<p>The description of the computation model.</p>"
+        },
+        "computationModelConfiguration":{
+          "shape":"ComputationModelConfiguration",
+          "documentation":"<p>The configuration for the computation model.</p>"
+        },
+        "computationModelDataBinding":{
+          "shape":"ComputationModelDataBinding",
+          "documentation":"<p>The data binding for the computation model. Key is a variable name defined in configuration. Value is a <code>ComputationModelDataBindingValue</code> referenced by the variable.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>A list of key-value pairs that contain metadata for the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/tag-resources.html\">Tagging your IoT SiteWise resources</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        }
+      }
+    },
+    "CreateComputationModelResponse":{
+      "type":"structure",
+      "required":[
+        "computationModelId",
+        "computationModelArn",
+        "computationModelStatus"
+      ],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>"
+        },
+        "computationModelArn":{
+          "shape":"ARN",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the computation model, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:computation-model/${ComputationModelId}</code> </p>"
+        },
+        "computationModelStatus":{
+          "shape":"ComputationModelStatus",
+          "documentation":"<p>The status of the computation model, containing a state (CREATING after successfully calling this operation) and any error messages.</p>"
+        }
+      }
+    },
     "CreateDashboardRequest":{
       "type":"structure",
       "required":[
@@ -4322,6 +4938,10 @@
           "shape":"GatewayPlatform",
           "documentation":"<p>The gateway's platform. You can only specify one platform in a gateway.</p>"
         },
+        "gatewayVersion":{
+          "shape":"GatewayVersion",
+          "documentation":"<p>The version of the gateway to create. Specify <code>3</code> to create an MQTT-enabled, V3 gateway and <code>2</code> to create a Classic streams, V2 gateway. If not specified, the default is <code>2</code> (Classic streams, V2 gateway).</p> <note> <p>When creating a V3 gateway (<code>gatewayVersion=3</code>) with the <code>GreengrassV2</code> platform, you must also specify the <code>coreDeviceOperatingSystem</code> parameter.</p> </note> <p> We recommend creating an MQTT-enabled gateway for self-hosted gateways and Siemens Industrial Edge gateways. For more information on gateway versions, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/gateways.html\">Use Amazon Web Services IoT SiteWise Edge Edge gateways</a>.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>A list of key-value pairs that contain metadata for the gateway. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/tag-resources.html\">Tagging your IoT SiteWise resources</a> in the <i>IoT SiteWise User Guide</i>.</p>"
@@ -4345,6 +4965,7 @@
         }
       }
     },
+    "CreateMissingProperty":{"type":"boolean"},
     "CreatePortalRequest":{
       "type":"structure",
       "required":[
@@ -4498,7 +5119,7 @@
       "type":"string",
       "max":139,
       "min":13,
-      "pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$|^externalId:[a-zA-Z0-9][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9]+"
+      "pattern":"^(?!00000000-0000-0000-0000-000000000000)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$|^externalId:[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+"
     },
     "CustomerManagedS3Storage":{
       "type":"structure",
@@ -4558,6 +5179,39 @@
       },
       "documentation":"<p>Contains a dashboard summary.</p>"
     },
+    "DataBindingValue":{
+      "type":"structure",
+      "members":{
+        "assetModelProperty":{"shape":"AssetModelPropertyBindingValue"},
+        "assetProperty":{
+          "shape":"AssetPropertyBindingValue",
+          "documentation":"<p>The asset property value used in the data binding.</p>"
+        }
+      },
+      "documentation":"<p>Represents a value used in a data binding. It can be an asset property or an asset model property.</p>"
+    },
+    "DataBindingValueFilter":{
+      "type":"structure",
+      "members":{
+        "asset":{
+          "shape":"AssetBindingValueFilter",
+          "documentation":"<p>Filter criteria for matching data bindings based on a specific asset. Used to list all data bindings referencing a particular asset or its properties.</p>"
+        },
+        "assetModel":{
+          "shape":"AssetModelBindingValueFilter",
+          "documentation":"<p>Filter criteria for matching data bindings based on a specific asset model. Used to list all data bindings referencing a particular asset model or its properties.</p>"
+        },
+        "assetProperty":{
+          "shape":"AssetPropertyBindingValueFilter",
+          "documentation":"<p>Filter criteria for matching data bindings based on a specific asset property. Used to list all data bindings referencing a particular property of an asset.</p>"
+        },
+        "assetModelProperty":{
+          "shape":"AssetModelPropertyBindingValueFilter",
+          "documentation":"<p>Filter criteria for matching data bindings based on a specific asset model property. Used to list all data bindings referencing a particular property of an asset model.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to match specific data binding values based on criteria. This filter allows searching for data bindings by asset, asset model, asset property, or asset model property.</p>"
+    },
     "DataSetReference":{
       "type":"structure",
       "members":{
@@ -4722,8 +5376,7 @@
     },
     "DeleteAccessPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssetModelCompositeModelRequest":{
       "type":"structure",
@@ -4778,6 +5431,58 @@
         "assetModelStatus":{"shape":"AssetModelStatus"}
       }
     },
+    "DeleteAssetModelInterfaceRelationshipRequest":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"assetModelId"
+        },
+        "interfaceAssetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"interfaceAssetModelId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteAssetModelInterfaceRelationshipResponse":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId",
+        "assetModelArn",
+        "assetModelStatus"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model.</p>"
+        },
+        "interfaceAssetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the interface asset model.</p>"
+        },
+        "assetModelArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the asset model, which has the following format. <code>arn:${Partition}:iotsitewise:${Region}:${Account}:asset-model/${AssetModelId}</code> </p>"
+        },
+        "assetModelStatus":{"shape":"AssetModelStatus"}
+      }
+    },
     "DeleteAssetModelRequest":{
       "type":"structure",
       "required":["assetModelId"],
@@ -4854,6 +5559,35 @@
         }
       }
     },
+    "DeleteComputationModelRequest":{
+      "type":"structure",
+      "required":["computationModelId"],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>",
+          "location":"uri",
+          "locationName":"computationModelId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
+          "idempotencyToken":true,
+          "location":"querystring",
+          "locationName":"clientToken"
+        }
+      }
+    },
+    "DeleteComputationModelResponse":{
+      "type":"structure",
+      "required":["computationModelStatus"],
+      "members":{
+        "computationModelStatus":{
+          "shape":"ComputationModelStatus",
+          "documentation":"<p>The status of the computation model. It contains a state (DELETING after successfully calling this operation) and any error messages.</p>"
+        }
+      }
+    },
     "DeleteDashboardRequest":{
       "type":"structure",
       "required":["dashboardId"],
@@ -4875,15 +5609,14 @@
     },
     "DeleteDashboardResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDatasetRequest":{
       "type":"structure",
       "required":["datasetId"],
       "members":{
         "datasetId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the dataset.</p>",
           "location":"uri",
           "locationName":"datasetId"
@@ -4970,8 +5703,7 @@
     },
     "DeleteProjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTimeSeriesRequest":{
       "type":"structure",
@@ -5096,6 +5828,10 @@
         "executionTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time the action was executed.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this action resolves to.</p>"
         }
       }
     },
@@ -5261,6 +5997,54 @@
         }
       }
     },
+    "DescribeAssetModelInterfaceRelationshipRequest":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"assetModelId"
+        },
+        "interfaceAssetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"interfaceAssetModelId"
+        }
+      }
+    },
+    "DescribeAssetModelInterfaceRelationshipResponse":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId",
+        "propertyMappings",
+        "hierarchyMappings"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model.</p>"
+        },
+        "interfaceAssetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the interface asset model.</p>"
+        },
+        "propertyMappings":{
+          "shape":"PropertyMappings",
+          "documentation":"<p>A list of property mappings between the interface asset model and the asset model where the interface is applied.</p>"
+        },
+        "hierarchyMappings":{
+          "shape":"HierarchyMappings",
+          "documentation":"<p>A list of hierarchy mappings between the interface asset model and the asset model where the interface is applied.</p>"
+        }
+      }
+    },
     "DescribeAssetModelRequest":{
       "type":"structure",
       "required":["assetModelId"],
@@ -5355,6 +6139,10 @@
           "shape":"Version",
           "documentation":"<p>The version of the asset model. See <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/model-active-version.html\"> Asset model versions</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         },
+        "interfaceDetails":{
+          "shape":"InterfaceDetails",
+          "documentation":"<p>A list of interface details that describe the interfaces implemented by this asset model, including interface asset model IDs and property mappings.</p>"
+        },
         "eTag":{
           "shape":"ETag",
           "documentation":"<p>The entity tag (ETag) is a hash of the retrieved version of the asset model. It's used to make concurrent updates safely to the resource. See <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/opt-locking-for-model.html\">Optimistic locking for asset model writes</a> in the <i>IoT SiteWise User Guide</i>. </p> <p>See <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/opt-locking-for-model.html\"> Optimistic locking for asset model writes</a> in the <i>IoT SiteWise User Guide</i>.</p>",
@@ -5396,6 +6184,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset, in UUID format.</p>"
         },
+        "assetExternalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "assetName":{
           "shape":"Name",
           "documentation":"<p>The name of the asset.</p>"
@@ -5411,10 +6203,6 @@
         "compositeModel":{
           "shape":"CompositeModelProperty",
           "documentation":"<p>The composite model that declares this asset property, if this asset property exists in a composite model.</p>"
-        },
-        "assetExternalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       }
     },
@@ -5454,6 +6242,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset, in UUID format.</p>"
         },
+        "assetExternalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset, if any.</p>"
+        },
         "assetArn":{
           "shape":"ARN",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the asset, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:asset/${AssetId}</code> </p>"
@@ -5497,10 +6289,6 @@
         "assetCompositeModelSummaries":{
           "shape":"AssetCompositeModelSummaries",
           "documentation":"<p>The list of the immediate child custom composite model summaries for the asset.</p>"
-        },
-        "assetExternalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset, if any.</p>"
         }
       }
     },
@@ -5576,6 +6364,130 @@
         }
       }
     },
+    "DescribeComputationModelExecutionSummaryRequest":{
+      "type":"structure",
+      "required":["computationModelId"],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>",
+          "location":"uri",
+          "locationName":"computationModelId"
+        },
+        "resolveToResourceType":{
+          "shape":"ResolveToResourceType",
+          "documentation":"<p>The type of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceType"
+        },
+        "resolveToResourceId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceId"
+        }
+      }
+    },
+    "DescribeComputationModelExecutionSummaryResponse":{
+      "type":"structure",
+      "required":[
+        "computationModelId",
+        "computationModelExecutionSummary"
+      ],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this execution summary resolves to.</p>"
+        },
+        "computationModelExecutionSummary":{
+          "shape":"ComputationModelExecutionSummary",
+          "documentation":"<p>Contains the execution summary of the computation model.</p>"
+        }
+      }
+    },
+    "DescribeComputationModelRequest":{
+      "type":"structure",
+      "required":["computationModelId"],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>",
+          "location":"uri",
+          "locationName":"computationModelId"
+        },
+        "computationModelVersion":{
+          "shape":"ComputationModelVersionFilter",
+          "documentation":"<p>The version of the computation model.</p>",
+          "location":"querystring",
+          "locationName":"computationModelVersion"
+        }
+      }
+    },
+    "DescribeComputationModelResponse":{
+      "type":"structure",
+      "required":[
+        "computationModelId",
+        "computationModelArn",
+        "computationModelName",
+        "computationModelConfiguration",
+        "computationModelDataBinding",
+        "computationModelCreationDate",
+        "computationModelLastUpdateDate",
+        "computationModelStatus",
+        "computationModelVersion",
+        "actionDefinitions"
+      ],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>"
+        },
+        "computationModelArn":{
+          "shape":"ARN",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">ARN</a> of the computation model, which has the following format.</p> <p> <code>arn:${Partition}:iotsitewise:${Region}:${Account}:computation-model/${ComputationModelId}</code> </p>"
+        },
+        "computationModelName":{
+          "shape":"RestrictedName",
+          "documentation":"<p>The name of the computation model.</p>"
+        },
+        "computationModelDescription":{
+          "shape":"RestrictedDescription",
+          "documentation":"<p>The description of the computation model.</p>"
+        },
+        "computationModelConfiguration":{
+          "shape":"ComputationModelConfiguration",
+          "documentation":"<p>The configuration for the computation model.</p>"
+        },
+        "computationModelDataBinding":{
+          "shape":"ComputationModelDataBinding",
+          "documentation":"<p>The data binding for the computation model. Key is a variable name defined in configuration. Value is a <code>ComputationModelDataBindingValue</code> referenced by the variable.</p>"
+        },
+        "computationModelCreationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The model creation date, in Unix epoch time.</p>"
+        },
+        "computationModelLastUpdateDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date the model was last updated, in Unix epoch time.</p>"
+        },
+        "computationModelStatus":{
+          "shape":"ComputationModelStatus",
+          "documentation":"<p>The current status of the asset model, which contains a state and an error message if any.</p>"
+        },
+        "computationModelVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the computation model.</p>"
+        },
+        "actionDefinitions":{
+          "shape":"ActionDefinitions",
+          "documentation":"<p>The available actions for this computation model.</p>"
+        }
+      }
+    },
     "DescribeDashboardRequest":{
       "type":"structure",
       "required":["dashboardId"],
@@ -5639,7 +6551,7 @@
       "required":["datasetId"],
       "members":{
         "datasetId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the dataset.</p>",
           "location":"uri",
           "locationName":"datasetId"
@@ -5699,8 +6611,7 @@
     },
     "DescribeDefaultEncryptionConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDefaultEncryptionConfigurationResponse":{
       "type":"structure",
@@ -5723,6 +6634,71 @@
         }
       }
     },
+    "DescribeExecutionRequest":{
+      "type":"structure",
+      "required":["executionId"],
+      "members":{
+        "executionId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the execution.</p>",
+          "location":"uri",
+          "locationName":"executionId"
+        }
+      }
+    },
+    "DescribeExecutionResponse":{
+      "type":"structure",
+      "required":[
+        "executionId",
+        "targetResource",
+        "targetResourceVersion",
+        "executionStartTime",
+        "executionStatus"
+      ],
+      "members":{
+        "executionId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the execution.</p>"
+        },
+        "actionType":{
+          "shape":"Name",
+          "documentation":"<p>The type of action exectued.</p>"
+        },
+        "targetResource":{"shape":"TargetResource"},
+        "targetResourceVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the target resource.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this execution resolves to.</p>"
+        },
+        "executionStartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the process started.</p>"
+        },
+        "executionEndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the process ended.</p>"
+        },
+        "executionStatus":{
+          "shape":"ExecutionStatus",
+          "documentation":"<p>The status of the execution process.</p>"
+        },
+        "executionResult":{
+          "shape":"ExecutionResult",
+          "documentation":"<p>The result of the execution.</p>"
+        },
+        "executionDetails":{
+          "shape":"ExecutionDetails",
+          "documentation":"<p>Provides detailed information about the execution of your anomaly detection models. This includes model metrics and training timestamps for both training and inference actions.</p> <ul> <li> <p> The training action (Amazon Web Services/ANOMALY_DETECTION_TRAINING), includes performance metrics that help you compare different versions of your anomaly detection models. These metrics provide insights into the model's performance during the training process. </p> </li> <li> <p> The inference action (Amazon Web Services/ANOMALY_DETECTION_INFERENCE), includes information about the results of executing your anomaly detection models. This helps you understand the output of your models and assess their performance. </p> </li> </ul>"
+        },
+        "executionEntityVersion":{
+          "shape":"Version",
+          "documentation":"<p>Entity version used for the execution.</p>"
+        }
+      }
+    },
     "DescribeGatewayCapabilityConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -5738,7 +6714,7 @@
         },
         "capabilityNamespace":{
           "shape":"CapabilityNamespace",
-          "documentation":"<p>The namespace of the capability configuration. For example, if you configure OPC-UA sources from the IoT SiteWise console, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:version</code>, where <code>version</code> is a number such as <code>1</code>.</p>",
+          "documentation":"<p>The namespace of the capability configuration. For example, if you configure OPC UA sources for an MQTT-enabled gateway, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:3</code>.</p>",
           "location":"uri",
           "locationName":"capabilityNamespace"
         }
@@ -5767,7 +6743,7 @@
         },
         "capabilitySyncStatus":{
           "shape":"CapabilitySyncStatus",
-          "documentation":"<p>The synchronization status of the capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> – The gateway is running the capability configuration.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> – Synchronization is not required for this capability configuration. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> – The gateway hasn't received the capability configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> – The gateway rejected the capability configuration.</p> </li> <li> <p> <code>UNKNOWN</code> – The synchronization status is currently unknown due to an undetermined or temporary error.</p> </li> </ul>"
+          "documentation":"<p>The synchronization status of the gateway capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> - The gateway is running with the latest configuration.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> - The gateway hasn't received the latest configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> - The gateway rejected the latest configuration.</p> </li> <li> <p> <code>UNKNOWN</code> - The gateway hasn't reported its sync status.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> - The gateway doesn't support this capability. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> </ul>"
         }
       }
     },
@@ -5810,6 +6786,10 @@
           "shape":"GatewayPlatform",
           "documentation":"<p>The gateway's platform.</p>"
         },
+        "gatewayVersion":{
+          "shape":"GatewayVersion",
+          "documentation":"<p>The version of the gateway. A value of <code>3</code> indicates an MQTT-enabled, V3 gateway, while <code>2</code> indicates a Classic streams, V2 gateway.</p>"
+        },
         "gatewayCapabilitySummaries":{
           "shape":"GatewayCapabilitySummaries",
           "documentation":"<p>A list of gateway capability summaries that each contain a namespace and status. Each gateway capability defines data sources for the gateway. To retrieve a capability configuration's definition, use <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeGatewayCapabilityConfiguration.html\">DescribeGatewayCapabilityConfiguration</a>.</p>"
@@ -5826,8 +6806,7 @@
     },
     "DescribeLoggingOptionsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeLoggingOptionsResponse":{
       "type":"structure",
@@ -5990,8 +6969,7 @@
     },
     "DescribeStorageConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeStorageConfigurationResponse":{
       "type":"structure",
@@ -6309,6 +7287,10 @@
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this action resolves to.</p>"
         }
       }
     },
@@ -6345,7 +7327,7 @@
         },
         "maxResults":{
           "shape":"ExecuteQueryMaxResults",
-          "documentation":"<p>The maximum number of results to return at one time. The default is 25.</p>"
+          "documentation":"<p>The maximum number of results to return at one time.</p> <ul> <li> <p>Minimum is 1</p> </li> <li> <p>Maximum is 20000</p> </li> <li> <p>Default is 20000</p> </li> </ul>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -6371,10 +7353,105 @@
         }
       }
     },
+    "ExecutionDetails":{
+      "type":"map",
+      "key":{"shape":"ExecutionDetailsKey"},
+      "value":{"shape":"ExecutionDetailsValue"}
+    },
+    "ExecutionDetailsKey":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ExecutionDetailsValue":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ExecutionResult":{
+      "type":"map",
+      "key":{"shape":"ExecutionResultKey"},
+      "value":{"shape":"ExecutionResultValue"}
+    },
+    "ExecutionResultKey":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ExecutionResultValue":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
+    },
+    "ExecutionState":{
+      "type":"string",
+      "enum":[
+        "RUNNING",
+        "COMPLETED",
+        "FAILED"
+      ]
+    },
+    "ExecutionStatus":{
+      "type":"structure",
+      "required":["state"],
+      "members":{
+        "state":{
+          "shape":"ExecutionState",
+          "documentation":"<p>The current state of the computation model.</p>"
+        }
+      },
+      "documentation":"<p>The status of the execution.</p>"
+    },
+    "ExecutionSummaries":{
+      "type":"list",
+      "member":{"shape":"ExecutionSummary"}
+    },
+    "ExecutionSummary":{
+      "type":"structure",
+      "required":[
+        "executionId",
+        "targetResource",
+        "targetResourceVersion",
+        "executionStartTime",
+        "executionStatus"
+      ],
+      "members":{
+        "executionId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the execution.</p>"
+        },
+        "actionType":{
+          "shape":"Name",
+          "documentation":"<p>The type of action exectued.</p>"
+        },
+        "targetResource":{"shape":"TargetResource"},
+        "targetResourceVersion":{
+          "shape":"Version",
+          "documentation":"<p>The version of the target resource.</p>"
+        },
+        "resolveTo":{
+          "shape":"ResolveTo",
+          "documentation":"<p>The detailed resource this execution resolves to.</p>"
+        },
+        "executionStartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the process started.</p>"
+        },
+        "executionEndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the process ended.</p>"
+        },
+        "executionStatus":{
+          "shape":"ExecutionStatus",
+          "documentation":"<p>The status of the execution process.</p>"
+        },
+        "executionEntityVersion":{
+          "shape":"Version",
+          "documentation":"<p>The execution entity version associated with the summary.</p>"
+        }
+      },
+      "documentation":"<p>Contains the execution summary of the computation model.</p>"
+    },
     "Expression":{
       "type":"string",
       "max":1024,
-      "min":1
+      "min":0
     },
     "ExpressionVariable":{
       "type":"structure",
@@ -6475,11 +7552,11 @@
       "members":{
         "capabilityNamespace":{
           "shape":"CapabilityNamespace",
-          "documentation":"<p>The namespace of the capability configuration. For example, if you configure OPC-UA sources from the IoT SiteWise console, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:version</code>, where <code>version</code> is a number such as <code>1</code>.</p>"
+          "documentation":"<p>The namespace of the capability configuration. For example, if you configure OPC UA sources for an MQTT-enabled gateway, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:3</code>.</p>"
         },
         "capabilitySyncStatus":{
           "shape":"CapabilitySyncStatus",
-          "documentation":"<p>The synchronization status of the capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> – The gateway is running the capability configuration.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> – Synchronization is not required for this capability configuration. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> – The gateway hasn't received the capability configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> – The gateway rejected the capability configuration.</p> </li> <li> <p> <code>UNKNOWN</code> – The synchronization status is currently unknown due to an undetermined or temporary error.</p> </li> </ul>"
+          "documentation":"<p>The synchronization status of the gateway capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> - The gateway is running with the latest configuration.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> - The gateway hasn't received the latest configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> - The gateway rejected the latest configuration.</p> </li> <li> <p> <code>UNKNOWN</code> - The gateway hasn't reported its sync status.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> - The gateway doesn't support this capability. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Contains a summary of a gateway capability configuration.</p>"
@@ -6506,7 +7583,7 @@
           "documentation":"<p>A SiteWise Edge gateway that runs on a Siemens Industrial Edge Device.</p>"
         }
       },
-      "documentation":"<p>Contains a gateway's platform information.</p>"
+      "documentation":"<p>The gateway's platform configuration. You can only specify one platform type in a gateway.</p> <p>(Legacy only) For Greengrass V1 gateways, specify the <code>greengrass</code> parameter with a valid Greengrass group ARN.</p> <p>For Greengrass V2 gateways, specify the <code>greengrassV2</code> parameter with a valid core device thing name. If creating a V3 gateway (<code>gatewayVersion=3</code>), you must also specify the <code>coreDeviceOperatingSystem</code>.</p> <p>For Siemens Industrial Edge gateways, specify the <code>siemensIE</code> parameter with a valid IoT Core thing name.</p>"
     },
     "GatewaySummaries":{
       "type":"list",
@@ -6530,6 +7607,10 @@
           "documentation":"<p>The name of the gateway.</p>"
         },
         "gatewayPlatform":{"shape":"GatewayPlatform"},
+        "gatewayVersion":{
+          "shape":"GatewayVersion",
+          "documentation":"<p>The version of the gateway. A value of <code>3</code> indicates an MQTT-enabled, V3 gateway, while <code>2</code> indicates a Classic streams, V2 gateway.</p>"
+        },
         "gatewayCapabilitySummaries":{
           "shape":"GatewayCapabilitySummaries",
           "documentation":"<p>A list of gateway capability summaries that each contain a namespace and status. Each gateway capability defines data sources for the gateway. To retrieve a capability configuration's definition, use <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeGatewayCapabilityConfiguration.html\">DescribeGatewayCapabilityConfiguration</a>.</p>"
@@ -6545,6 +7626,13 @@
       },
       "documentation":"<p>Contains a summary of a gateway.</p>"
     },
+    "GatewayVersion":{
+      "type":"string",
+      "documentation":"<p>The version of the gateway. Options include: </p> <ul> <li> <p> <code>2</code> - Classic streams, V2 gateway.</p> </li> <li> <p> <code>3</code> - MQTT-enabled, V3 gateway.</p> </li> </ul>",
+      "max":1024,
+      "min":1,
+      "pattern":"^[0-9]+$"
+    },
     "GetAssetPropertyAggregatesRequest":{
       "type":"structure",
       "required":[
@@ -6871,6 +7959,10 @@
         "coreDeviceThingName":{
           "shape":"CoreDeviceThingName",
           "documentation":"<p>The name of the IoT thing for your IoT Greengrass V2 core device.</p>"
+        },
+        "coreDeviceOperatingSystem":{
+          "shape":"CoreDeviceOperatingSystem",
+          "documentation":"<p>The operating system of the core device in IoT Greengrass V2. Specifying the operating system is required for MQTT-enabled, V3 gateways (<code>gatewayVersion</code> <code>3</code>) and not applicable for Classic stream, V2 gateways (<code>gatewayVersion</code> <code>2</code>).</p>"
         }
       },
       "documentation":"<p>Contains details for a gateway that runs on IoT Greengrass V2. To create a gateway that runs on IoT Greengrass V2, you must deploy the IoT SiteWise Edge component to your gateway device. Your <a href=\"https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html\">Greengrass device role</a> must use the <code>AWSIoTSiteWiseEdgeAccess</code> policy. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/sw-gateways.html\">Using IoT SiteWise at the edge</a> in the <i>IoT SiteWise User Guide</i>.</p>"
@@ -6886,6 +7978,28 @@
       },
       "documentation":"<p>Contains information for a group identity in an access policy.</p>"
     },
+    "HierarchyMapping":{
+      "type":"structure",
+      "required":[
+        "assetModelHierarchyId",
+        "interfaceAssetModelHierarchyId"
+      ],
+      "members":{
+        "assetModelHierarchyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the hierarchy in the asset model where the interface is applied.</p>"
+        },
+        "interfaceAssetModelHierarchyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the hierarchy in the interface asset model.</p>"
+        }
+      },
+      "documentation":"<p>Maps a hierarchy from an interface asset model to a hierarchy in the asset model where the interface is applied.</p>"
+    },
+    "HierarchyMappings":{
+      "type":"list",
+      "member":{"shape":"HierarchyMapping"}
+    },
     "IAMRoleIdentity":{
       "type":"structure",
       "required":["arn"],
@@ -6912,7 +8026,7 @@
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
+      "pattern":"^(?!00000000-0000-0000-0000-000000000000)[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
     },
     "IDs":{
       "type":"list",
@@ -7018,6 +8132,64 @@
       },
       "documentation":"<p>Contains an image that is uploaded to IoT SiteWise and available at a URL.</p>"
     },
+    "InputProperties":{
+      "type":"string",
+      "max":67,
+      "min":4,
+      "pattern":"^\\$\\{[a-z][a-z0-9_]*\\}"
+    },
+    "InterfaceDetails":{
+      "type":"list",
+      "member":{"shape":"InterfaceRelationship"}
+    },
+    "InterfaceRelationship":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model that has the interface applied to it.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the relationship between an asset model and an interface asset model that is applied to it.</p>"
+    },
+    "InterfaceRelationshipSummaries":{
+      "type":"list",
+      "member":{"shape":"InterfaceRelationshipSummary"}
+    },
+    "InterfaceRelationshipSummary":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model that has the interface applied to it.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about an interface relationship, which defines how an interface is applied to an asset model. This summary provides the essential identifiers needed to retrieve detailed information about the relationship.</p>"
+    },
+    "InterfaceSummaries":{
+      "type":"list",
+      "member":{"shape":"InterfaceSummary"}
+    },
+    "InterfaceSummary":{
+      "type":"structure",
+      "required":[
+        "interfaceAssetModelId",
+        "interfaceAssetModelPropertyId"
+      ],
+      "members":{
+        "interfaceAssetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the interface asset model that contains this property.</p>"
+        },
+        "interfaceAssetModelPropertyId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the property in the interface asset model that corresponds to this property.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about an interface that a property belongs to.</p>"
+    },
     "InternalFailureException":{
       "type":"structure",
       "required":["message"],
@@ -7209,7 +8381,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>You've reached the limit for a resource. For example, this can occur if you're trying to associate more than the allowed number of child assets or attempting to create more than the allowed number of properties for an asset model.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html\">Quotas</a> in the <i>IoT SiteWise User Guide</i>.</p>",
+      "documentation":"<p>You've reached the quota for a resource. For example, this can occur if you're trying to associate more than the allowed number of child assets or attempting to create more than the allowed number of properties for an asset model.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/quotas.html\">Quotas</a> in the <i>IoT SiteWise User Guide</i>.</p>",
       "error":{"httpStatusCode":410},
       "exception":true
     },
@@ -7288,7 +8460,7 @@
           "locationName":"targetResourceType"
         },
         "targetResourceId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the target resource.</p>",
           "location":"querystring",
           "locationName":"targetResourceId"
@@ -7304,6 +8476,18 @@
           "documentation":"<p>The maximum number of results to return for each paginated request.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        },
+        "resolveToResourceType":{
+          "shape":"ResolveToResourceType",
+          "documentation":"<p>The type of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceType"
+        },
+        "resolveToResourceId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceId"
         }
       }
     },
@@ -7430,7 +8614,7 @@
       "members":{
         "assetModelTypes":{
           "shape":"ListAssetModelsTypeFilter",
-          "documentation":"<p>The type of asset model. If you don't provide an <code>assetModelTypes</code>, all types of asset models are returned.</p> <ul> <li> <p> <b>ASSET_MODEL</b> – An asset model that you can use to create assets. Can't be included as a component in another asset model.</p> </li> <li> <p> <b>COMPONENT_MODEL</b> – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model. </p> </li> </ul>",
+          "documentation":"<p>The type of asset model. If you don't provide an <code>assetModelTypes</code>, all types of asset models are returned.</p> <ul> <li> <p> <b>ASSET_MODEL</b> – An asset model that you can use to create assets. Can't be included as a component in another asset model.</p> </li> <li> <p> <b>COMPONENT_MODEL</b> – A reusable component that you can include in the composite models of other asset models. You can't create assets directly from this type of asset model. </p> </li> <li> <p> <b>INTERFACE</b> – An interface is a type of model that defines a standard structure that can be applied to different asset models.</p> </li> </ul>",
           "location":"querystring",
           "locationName":"assetModelTypes"
         },
@@ -7757,6 +8941,113 @@
         }
       }
     },
+    "ListComputationModelDataBindingUsagesRequest":{
+      "type":"structure",
+      "required":["dataBindingValueFilter"],
+      "members":{
+        "dataBindingValueFilter":{
+          "shape":"DataBindingValueFilter",
+          "documentation":"<p>A filter used to limit the returned data binding usages based on specific data binding values. You can filter by asset, asset model, asset property, or asset model property to find all computation models using these specific data sources.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token used for the next set of paginated results.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results returned for each paginated request.</p>"
+        }
+      }
+    },
+    "ListComputationModelDataBindingUsagesResponse":{
+      "type":"structure",
+      "required":["dataBindingUsageSummaries"],
+      "members":{
+        "dataBindingUsageSummaries":{
+          "shape":"ComputationModelDataBindingUsageSummaries",
+          "documentation":"<p>A list of summaries describing the data binding usages across computation models. Each summary includes the computation model IDs and the matched data binding details.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of paginated results, or null if there are no additional results.</p>"
+        }
+      }
+    },
+    "ListComputationModelResolveToResourcesRequest":{
+      "type":"structure",
+      "required":["computationModelId"],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model for which to list resolved resources.</p>",
+          "location":"uri",
+          "locationName":"computationModelId"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token used for the next set of paginated results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results returned for each paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListComputationModelResolveToResourcesResponse":{
+      "type":"structure",
+      "required":["computationModelResolveToResourceSummaries"],
+      "members":{
+        "computationModelResolveToResourceSummaries":{
+          "shape":"ComputationModelResolveToResourceSummaries",
+          "documentation":"<p>A list of summaries describing the distinct resources that this computation model resolves to when actions were executed.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of paginated results, or null if there are no additional results.</p>"
+        }
+      }
+    },
+    "ListComputationModelsRequest":{
+      "type":"structure",
+      "members":{
+        "computationModelType":{
+          "shape":"ComputationModelType",
+          "documentation":"<p>The type of computation model. If a <code>computationModelType</code> is not provided, all types of computation models are returned.</p>",
+          "location":"querystring",
+          "locationName":"computationModelType"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to be used for the next set of paginated results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return for each paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListComputationModelsResponse":{
+      "type":"structure",
+      "required":["computationModelSummaries"],
+      "members":{
+        "computationModelSummaries":{
+          "shape":"ComputationModelSummaries",
+          "documentation":"<p>A list summarizing each computation model.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results, or null if there are no additional results.</p>"
+        }
+      }
+    },
     "ListDashboardsRequest":{
       "type":"structure",
       "required":["projectId"],
@@ -7833,6 +9124,71 @@
         }
       }
     },
+    "ListExecutionsRequest":{
+      "type":"structure",
+      "required":[
+        "targetResourceType",
+        "targetResourceId"
+      ],
+      "members":{
+        "targetResourceType":{
+          "shape":"TargetResourceType",
+          "documentation":"<p>The type of the target resource.</p>",
+          "location":"querystring",
+          "locationName":"targetResourceType"
+        },
+        "targetResourceId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the target resource.</p>",
+          "location":"querystring",
+          "locationName":"targetResourceId"
+        },
+        "resolveToResourceType":{
+          "shape":"ResolveToResourceType",
+          "documentation":"<p>The type of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceType"
+        },
+        "resolveToResourceId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the resolved resource.</p>",
+          "location":"querystring",
+          "locationName":"resolveToResourceId"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token used for the next set of paginated results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results returned for each paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "actionType":{
+          "shape":"Name",
+          "documentation":"<p>The type of action exectued.</p>",
+          "location":"querystring",
+          "locationName":"actionType"
+        }
+      }
+    },
+    "ListExecutionsResponse":{
+      "type":"structure",
+      "required":["executionSummaries"],
+      "members":{
+        "executionSummaries":{
+          "shape":"ExecutionSummaries",
+          "documentation":"<p>Contains the list of execution summaries of the computation models.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results, or null if there are no additional results.</p>"
+        }
+      }
+    },
     "ListGatewaysRequest":{
       "type":"structure",
       "members":{
@@ -7864,6 +9220,44 @@
         }
       }
     },
+    "ListInterfaceRelationshipsRequest":{
+      "type":"structure",
+      "required":["interfaceAssetModelId"],
+      "members":{
+        "interfaceAssetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"interfaceAssetModelId"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to be used for the next set of paginated results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return for each paginated request. Default: 50</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListInterfaceRelationshipsResponse":{
+      "type":"structure",
+      "required":["interfaceRelationshipSummaries"],
+      "members":{
+        "interfaceRelationshipSummaries":{
+          "shape":"InterfaceRelationshipSummaries",
+          "documentation":"<p>A list that summarizes each interface relationship.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results, or null if there are no additional results.</p>"
+        }
+      }
+    },
     "ListPortalsRequest":{
       "type":"structure",
       "members":{
@@ -8082,6 +9476,18 @@
       "min":1,
       "pattern":"[^\\u0000-\\u001F\\u007F]+"
     },
+    "MatchByPropertyName":{"type":"boolean"},
+    "MatchedDataBinding":{
+      "type":"structure",
+      "required":["value"],
+      "members":{
+        "value":{
+          "shape":"DataBindingValue",
+          "documentation":"<p>The value of the matched data binding.</p>"
+        }
+      },
+      "documentation":"<p>Represents a data binding that matches the specified filter criteria.</p>"
+    },
     "MaxInterpolatedResults":{
       "type":"integer",
       "min":1
@@ -8120,11 +9526,7 @@
     },
     "Metric":{
       "type":"structure",
-      "required":[
-        "expression",
-        "variables",
-        "window"
-      ],
+      "required":["window"],
       "members":{
         "expression":{
           "shape":"Expression",
@@ -8229,8 +9631,7 @@
     },
     "Parquet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A parquet file.</p>"
     },
     "Permission":{
@@ -8443,6 +9844,10 @@
           "shape":"ID",
           "documentation":"<p>The ID of the asset property.</p>"
         },
+        "externalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>The external ID of the asset property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the property.</p>"
@@ -8470,10 +9875,6 @@
         "path":{
           "shape":"AssetPropertyPath",
           "documentation":"<p>The structured path to the property from the root of the asset.</p>"
-        },
-        "externalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>The external ID of the asset property. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains asset property information.</p>"
@@ -8493,6 +9894,46 @@
         "STRUCT"
       ]
     },
+    "PropertyMapping":{
+      "type":"structure",
+      "required":[
+        "assetModelPropertyId",
+        "interfaceAssetModelPropertyId"
+      ],
+      "members":{
+        "assetModelPropertyId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the property in the asset model where the interface is applied.</p>"
+        },
+        "interfaceAssetModelPropertyId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the property in the interface asset model.</p>"
+        }
+      },
+      "documentation":"<p>Maps a property from an interface asset model to a property in the asset model where the interface is applied.</p>"
+    },
+    "PropertyMappingConfiguration":{
+      "type":"structure",
+      "members":{
+        "matchByPropertyName":{
+          "shape":"MatchByPropertyName",
+          "documentation":"<p>If true, properties are matched by name between the interface asset model and the asset model where the interface is applied.</p>"
+        },
+        "createMissingProperty":{
+          "shape":"CreateMissingProperty",
+          "documentation":"<p>If true, missing properties from the interface asset model are automatically created in the asset model where the interface is applied.</p>"
+        },
+        "overrides":{
+          "shape":"PropertyMappings",
+          "documentation":"<p>A list of specific property mappings that override the automatic mapping by name when an interface is applied to an asset model.</p>"
+        }
+      },
+      "documentation":"<p>Contains configuration options for mapping properties from an interface asset model to an asset model where the interface is applied.</p>"
+    },
+    "PropertyMappings":{
+      "type":"list",
+      "member":{"shape":"PropertyMapping"}
+    },
     "PropertyNotification":{
       "type":"structure",
       "required":[
@@ -8562,6 +10003,61 @@
       "documentation":"<p>The value type of null asset property data with BAD and UNCERTAIN qualities.</p>"
     },
     "PropertyValueStringValue":{"type":"string"},
+    "PutAssetModelInterfaceRelationshipRequest":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId",
+        "propertyMappingConfiguration"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"assetModelId"
+        },
+        "interfaceAssetModelId":{
+          "shape":"CustomID",
+          "documentation":"<p>The ID of the interface asset model. This can be either the actual ID in UUID format, or else externalId: followed by the external ID.</p>",
+          "location":"uri",
+          "locationName":"interfaceAssetModelId"
+        },
+        "propertyMappingConfiguration":{
+          "shape":"PropertyMappingConfiguration",
+          "documentation":"<p>The configuration for mapping properties from the interface asset model to the asset model where the interface is applied. This configuration controls how properties are matched and created during the interface application process.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "PutAssetModelInterfaceRelationshipResponse":{
+      "type":"structure",
+      "required":[
+        "assetModelId",
+        "interfaceAssetModelId",
+        "assetModelArn",
+        "assetModelStatus"
+      ],
+      "members":{
+        "assetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset model.</p>"
+        },
+        "interfaceAssetModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the interface asset model.</p>"
+        },
+        "assetModelArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the asset model, which has the following format. <code>arn:${Partition}:iotsitewise:${Region}:${Account}:asset-model/${AssetModelId}</code> </p>"
+        },
+        "assetModelStatus":{"shape":"AssetModelStatus"}
+      }
+    },
     "PutAssetPropertyValueEntries":{
       "type":"list",
       "member":{"shape":"PutAssetPropertyValueEntry"}
@@ -8643,8 +10139,7 @@
     },
     "PutLoggingOptionsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutStorageConfigurationRequest":{
       "type":"structure",
@@ -8766,6 +10261,21 @@
       "min":2,
       "pattern":"1m|15m|1h|1d"
     },
+    "ResolveTo":{
+      "type":"structure",
+      "required":["assetId"],
+      "members":{
+        "assetId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the asset that the resource resolves to.</p>"
+        }
+      },
+      "documentation":"<p>The detailed resource this execution summary resolves to.</p>"
+    },
+    "ResolveToResourceType":{
+      "type":"string",
+      "enum":["ASSET"]
+    },
     "Resource":{
       "type":"structure",
       "members":{
@@ -8855,6 +10365,12 @@
       "min":1,
       "pattern":"^[a-zA-Z0-9 _\\-#$*!@]+$"
     },
+    "ResultProperty":{
+      "type":"string",
+      "max":67,
+      "min":4,
+      "pattern":"^\\$\\{[a-z][a-z0-9_]*\\}"
+    },
     "RetentionPeriod":{
       "type":"structure",
       "members":{
@@ -8998,8 +10514,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -9008,18 +10523,24 @@
     },
     "TargetResource":{
       "type":"structure",
-      "required":["assetId"],
       "members":{
         "assetId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the asset, in UUID format.</p>"
+        },
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>"
         }
       },
-      "documentation":"<p>The resource the action will be taken on.</p>"
+      "documentation":"<p>The resource the action will be taken on. This can include asset-based resources and computation model resources.</p>"
     },
     "TargetResourceType":{
       "type":"string",
-      "enum":["ASSET"]
+      "enum":[
+        "ASSET",
+        "COMPUTATION_MODEL"
+      ]
     },
     "ThrottlingException":{
       "type":"structure",
@@ -9130,7 +10651,7 @@
           "documentation":"<p>The name of the resource with too many tags.</p>"
         }
       },
-      "documentation":"<p>You've reached the limit for the number of tags allowed for a resource. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions\">Tag naming limits and requirements</a> in the <i>Amazon Web Services General Reference</i>.</p>",
+      "documentation":"<p>You've reached the quota for the number of tags allowed for a resource. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions\">Tag naming limits and requirements</a> in the <i>Amazon Web Services General Reference</i>.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -9239,8 +10760,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccessPolicyRequest":{
       "type":"structure",
@@ -9278,8 +10798,7 @@
     },
     "UpdateAccessPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAssetModelCompositeModelRequest":{
       "type":"structure",
@@ -9479,6 +10998,10 @@
           "location":"uri",
           "locationName":"assetId"
         },
+        "assetExternalId":{
+          "shape":"ExternalId",
+          "documentation":"<p>An external ID to assign to the asset. The asset must not already have an external ID. The external ID must be unique within your Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
+        },
         "assetName":{
           "shape":"Name",
           "documentation":"<p>A friendly name for the asset.</p>"
@@ -9491,10 +11014,6 @@
         "assetDescription":{
           "shape":"Description",
           "documentation":"<p>A description for the asset.</p>"
-        },
-        "assetExternalId":{
-          "shape":"ExternalId",
-          "documentation":"<p>An external ID to assign to the asset. The asset must not already have an external ID. The external ID must be unique within your Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/iot-sitewise/latest/userguide/object-ids.html#external-ids\">Using external IDs</a> in the <i>IoT SiteWise User Guide</i>.</p>"
         }
       }
     },
@@ -9508,6 +11027,54 @@
         }
       }
     },
+    "UpdateComputationModelRequest":{
+      "type":"structure",
+      "required":[
+        "computationModelId",
+        "computationModelName",
+        "computationModelConfiguration",
+        "computationModelDataBinding"
+      ],
+      "members":{
+        "computationModelId":{
+          "shape":"ID",
+          "documentation":"<p>The ID of the computation model.</p>",
+          "location":"uri",
+          "locationName":"computationModelId"
+        },
+        "computationModelName":{
+          "shape":"RestrictedName",
+          "documentation":"<p>The name of the computation model.</p>"
+        },
+        "computationModelDescription":{
+          "shape":"RestrictedDescription",
+          "documentation":"<p>The description of the computation model.</p>"
+        },
+        "computationModelConfiguration":{
+          "shape":"ComputationModelConfiguration",
+          "documentation":"<p>The configuration for the computation model.</p>"
+        },
+        "computationModelDataBinding":{
+          "shape":"ComputationModelDataBinding",
+          "documentation":"<p>The data binding for the computation model. Key is a variable name defined in configuration. Value is a <code>ComputationModelDataBindingValue</code> referenced by the variable.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique case-sensitive identifier that you can provide to ensure the idempotency of the request. Don't reuse this client token if a new idempotent request is required.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateComputationModelResponse":{
+      "type":"structure",
+      "required":["computationModelStatus"],
+      "members":{
+        "computationModelStatus":{
+          "shape":"ComputationModelStatus",
+          "documentation":"<p>The status of the computation model. It contains a state (UPDATING after successfully calling this operation) and an error message if any.</p>"
+        }
+      }
+    },
     "UpdateDashboardRequest":{
       "type":"structure",
       "required":[
@@ -9543,8 +11110,7 @@
     },
     "UpdateDashboardResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatasetRequest":{
       "type":"structure",
@@ -9555,7 +11121,7 @@
       ],
       "members":{
         "datasetId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the dataset.</p>",
           "location":"uri",
           "locationName":"datasetId"
@@ -9583,7 +11149,7 @@
       "type":"structure",
       "members":{
         "datasetId":{
-          "shape":"CustomID",
+          "shape":"ID",
           "documentation":"<p>The ID of the dataset.</p>"
         },
         "datasetArn":{
@@ -9612,7 +11178,7 @@
         },
         "capabilityNamespace":{
           "shape":"CapabilityNamespace",
-          "documentation":"<p>The namespace of the gateway capability configuration to be updated. For example, if you configure OPC-UA sources from the IoT SiteWise console, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:version</code>, where <code>version</code> is a number such as <code>1</code>.</p>"
+          "documentation":"<p>The namespace of the gateway capability configuration to be updated. For example, if you configure OPC UA sources for an MQTT-enabled gateway, your OPC-UA capability configuration has the namespace <code>iotsitewise:opcuacollector:3</code>.</p>"
         },
         "capabilityConfiguration":{
           "shape":"CapabilityConfiguration",
@@ -9633,7 +11199,7 @@
         },
         "capabilitySyncStatus":{
           "shape":"CapabilitySyncStatus",
-          "documentation":"<p>The synchronization status of the capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> – The gateway is running the capability configuration.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> – Synchronization is not required for this capability configuration. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> – The gateway hasn't received the capability configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> – The gateway rejected the capability configuration.</p> </li> <li> <p> <code>UNKNOWN</code> – The synchronization status is currently unknown due to an undetermined or temporary error.</p> </li> </ul> <p>After you update a capability configuration, its sync status is <code>OUT_OF_SYNC</code> until the gateway receives and applies or rejects the updated configuration.</p>"
+          "documentation":"<p>The synchronization status of the gateway capability configuration. The sync status can be one of the following:</p> <ul> <li> <p> <code>IN_SYNC</code> - The gateway is running with the latest configuration.</p> </li> <li> <p> <code>OUT_OF_SYNC</code> - The gateway hasn't received the latest configuration.</p> </li> <li> <p> <code>SYNC_FAILED</code> - The gateway rejected the latest configuration.</p> </li> <li> <p> <code>UNKNOWN</code> - The gateway hasn't reported its sync status.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> - The gateway doesn't support this capability. This is most common when integrating partner data sources, because the data integration is handled externally by the partner.</p> </li> </ul> <p>After you update a capability configuration, its sync status is <code>OUT_OF_SYNC</code> until the gateway receives and applies or rejects the updated configuration.</p>"
         }
       }
     },
@@ -9751,8 +11317,7 @@
     },
     "UpdateProjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Url":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotthingsgraph/2018-09-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/iotthingsgraph/2018-09-06/service-2.json 2.31.35-1/awscli/botocore/data/iotthingsgraph/2018-09-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotthingsgraph/2018-09-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotthingsgraph/2018-09-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"iotthingsgraph",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS IoT Things Graph",
     "serviceId":"IoTThingsGraph",
     "signatureVersion":"v4",
     "signingName":"iotthingsgraph",
     "targetPrefix":"IotThingsGraphFrontEndService",
-    "uid":"iotthingsgraph-2018-09-06"
+    "uid":"iotthingsgraph-2018-09-06",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateEntityToThing":{
@@ -665,8 +667,7 @@
     },
     "AssociateEntityToThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateFlowTemplateRequest":{
       "type":"structure",
@@ -792,13 +793,11 @@
     },
     "DeleteFlowTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNamespaceRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNamespaceResponse":{
       "type":"structure",
@@ -824,8 +823,7 @@
     },
     "DeleteSystemInstanceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSystemTemplateRequest":{
       "type":"structure",
@@ -839,8 +837,7 @@
     },
     "DeleteSystemTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DependencyRevision":{
       "type":"structure",
@@ -903,8 +900,7 @@
     },
     "DeprecateFlowTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeprecateSystemTemplateRequest":{
       "type":"structure",
@@ -918,8 +914,7 @@
     },
     "DeprecateSystemTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeNamespaceRequest":{
       "type":"structure",
@@ -974,8 +969,7 @@
     },
     "DissociateEntityFromThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Enabled":{"type":"boolean"},
     "EntityDescription":{
@@ -1314,8 +1308,7 @@
     },
     "GetNamespaceDeletionStatusRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetNamespaceDeletionStatusResponse":{
       "type":"structure",
@@ -2089,8 +2082,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2168,8 +2160,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFlowTemplateRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iottwinmaker/2021-11-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotwireless/2020-11-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/iotwireless/2020-11-22/service-2.json 2.31.35-1/awscli/botocore/data/iotwireless/2020-11-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/iotwireless/2020-11-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/iotwireless/2020-11-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -423,7 +423,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes a multicast group if it is not in use by a fuota task.</p>"
+      "documentation":"<p>Deletes a multicast group if it is not in use by a FUOTA task.</p>"
     },
     "DeleteNetworkAnalyzerConfiguration":{
       "name":"DeleteNetworkAnalyzerConfiguration",
@@ -621,7 +621,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Disassociates a multicast group from a fuota task.</p>"
+      "documentation":"<p>Disassociates a multicast group from a FUOTA task.</p>"
     },
     "DisassociateWirelessDeviceFromFuotaTask":{
       "name":"DisassociateWirelessDeviceFromFuotaTask",
@@ -798,7 +798,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Returns current default log levels or log levels by resource types. Based on resource types, log levels can be for wireless device log options or wireless gateway log options.</p>"
+      "documentation":"<p>Returns current default log levels or log levels by resource types. Based on the resource type, log levels can be returned for wireless device, wireless gateway, or FUOTA task log options.</p>"
     },
     "GetMetricConfiguration":{
       "name":"GetMetricConfiguration",
@@ -994,7 +994,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Fetches the log-level override, if any, for a given resource-ID and resource-type. It can be used for a wireless device, wireless gateway or fuota task.</p>"
+      "documentation":"<p>Fetches the log-level override, if any, for a given resource ID and resource type..</p>"
     },
     "GetResourcePosition":{
       "name":"GetResourcePosition",
@@ -1315,7 +1315,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>List all multicast groups associated with a fuota task.</p>"
+      "documentation":"<p>List all multicast groups associated with a FUOTA task.</p>"
     },
     "ListNetworkAnalyzerConfigurations":{
       "name":"ListNetworkAnalyzerConfigurations",
@@ -1520,7 +1520,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Sets the log-level override for a resource-ID and resource-type. This option can be specified for a wireless gateway or a wireless device. A limit of 200 log level override can be set per account.</p>"
+      "documentation":"<p>Sets the log-level override for a resource ID and resource type. A limit of 200 log level override can be set per account.</p>"
     },
     "ResetAllResourceLogLevels":{
       "name":"ResetAllResourceLogLevels",
@@ -1538,7 +1538,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Removes the log-level overrides for all resources; wireless devices, wireless gateways, and fuota tasks.</p>"
+      "documentation":"<p>Removes the log-level overrides for all resources; wireless devices, wireless gateways, and FUOTA tasks.</p>"
     },
     "ResetResourceLogLevel":{
       "name":"ResetResourceLogLevel",
@@ -1556,7 +1556,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Removes the log-level override, if any, for a specific resource-ID and resource-type. It can be used for a wireless device, a wireless gateway, or a fuota task.</p>"
+      "documentation":"<p>Removes the log-level override, if any, for a specific resource ID and resource type. It can be used for a wireless device, a wireless gateway, or a FUOTA task.</p>"
     },
     "SendDataToMulticastGroup":{
       "name":"SendDataToMulticastGroup",
@@ -1831,7 +1831,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Set default log level, or log levels by resource types. This can be for wireless device log options or wireless gateways log options and is used to control the log messages that'll be displayed in CloudWatch.</p>"
+      "documentation":"<p>Set default log level, or log levels by resource types. This can be for wireless device, wireless gateway, or FUOTA task log options, and is used to control the log messages that'll be displayed in CloudWatch.</p>"
     },
     "UpdateMetricConfiguration":{
       "name":"UpdateMetricConfiguration",
@@ -2213,8 +2213,7 @@
     },
     "AssociateMulticastGroupWithFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateWirelessDeviceWithFuotaTaskRequest":{
       "type":"structure",
@@ -2233,8 +2232,7 @@
     },
     "AssociateWirelessDeviceWithFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateWirelessDeviceWithMulticastGroupRequest":{
       "type":"structure",
@@ -2253,8 +2251,7 @@
     },
     "AssociateWirelessDeviceWithMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateWirelessDeviceWithThingRequest":{
       "type":"structure",
@@ -2277,8 +2274,7 @@
     },
     "AssociateWirelessDeviceWithThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateWirelessGatewayWithCertificateRequest":{
       "type":"structure",
@@ -2329,8 +2325,7 @@
     },
     "AssociateWirelessGatewayWithThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AutoCreateTasks":{"type":"boolean"},
     "Avg":{"type":"double"},
@@ -2411,8 +2406,7 @@
     },
     "CancelMulticastGroupSessionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CaptureTimeAccuracy":{"type":"float"},
     "CdmaChannel":{
@@ -2717,7 +2711,7 @@
       "members":{
         "Name":{
           "shape":"DeviceProfileName",
-          "documentation":"<p>The name of the new resource.</p>"
+          "documentation":"<p>The name of the new resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "LoRaWAN":{
           "shape":"LoRaWANDeviceProfile",
@@ -2847,7 +2841,7 @@
       "members":{
         "Name":{
           "shape":"ServiceProfileName",
-          "documentation":"<p>The name of the new resource.</p>"
+          "documentation":"<p>The name of the new resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "LoRaWAN":{
           "shape":"LoRaWANServiceProfile",
@@ -2890,7 +2884,7 @@
         },
         "Name":{
           "shape":"WirelessDeviceName",
-          "documentation":"<p>The name of the new resource.</p>"
+          "documentation":"<p>The name of the new resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "Description":{
           "shape":"Description",
@@ -2942,7 +2936,7 @@
       "members":{
         "Name":{
           "shape":"WirelessGatewayName",
-          "documentation":"<p>The name of the new resource.</p>"
+          "documentation":"<p>The name of the new resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "Description":{
           "shape":"Description",
@@ -3106,8 +3100,7 @@
     },
     "DeleteDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDeviceProfileRequest":{
       "type":"structure",
@@ -3123,8 +3116,7 @@
     },
     "DeleteDeviceProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFuotaTaskRequest":{
       "type":"structure",
@@ -3139,8 +3131,7 @@
     },
     "DeleteFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMulticastGroupRequest":{
       "type":"structure",
@@ -3155,8 +3146,7 @@
     },
     "DeleteMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNetworkAnalyzerConfigurationRequest":{
       "type":"structure",
@@ -3171,8 +3161,7 @@
     },
     "DeleteNetworkAnalyzerConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteQueuedMessagesRequest":{
       "type":"structure",
@@ -3203,8 +3192,7 @@
     },
     "DeleteQueuedMessagesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteServiceProfileRequest":{
       "type":"structure",
@@ -3220,8 +3208,7 @@
     },
     "DeleteServiceProfileResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWirelessDeviceImportTaskRequest":{
       "type":"structure",
@@ -3237,8 +3224,7 @@
     },
     "DeleteWirelessDeviceImportTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWirelessDeviceRequest":{
       "type":"structure",
@@ -3254,8 +3240,7 @@
     },
     "DeleteWirelessDeviceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWirelessGatewayRequest":{
       "type":"structure",
@@ -3271,8 +3256,7 @@
     },
     "DeleteWirelessGatewayResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWirelessGatewayTaskDefinitionRequest":{
       "type":"structure",
@@ -3288,8 +3272,7 @@
     },
     "DeleteWirelessGatewayTaskDefinitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWirelessGatewayTaskRequest":{
       "type":"structure",
@@ -3305,8 +3288,7 @@
     },
     "DeleteWirelessGatewayTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterWirelessDeviceRequest":{
       "type":"structure",
@@ -3328,8 +3310,7 @@
     },
     "DeregisterWirelessDeviceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Description":{
       "type":"string",
@@ -3532,8 +3513,7 @@
     },
     "DisassociateAwsAccountFromPartnerAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateMulticastGroupFromFuotaTaskRequest":{
       "type":"structure",
@@ -3556,8 +3536,7 @@
     },
     "DisassociateMulticastGroupFromFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWirelessDeviceFromFuotaTaskRequest":{
       "type":"structure",
@@ -3580,8 +3559,7 @@
     },
     "DisassociateWirelessDeviceFromFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWirelessDeviceFromMulticastGroupRequest":{
       "type":"structure",
@@ -3604,8 +3582,7 @@
     },
     "DisassociateWirelessDeviceFromMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWirelessDeviceFromThingRequest":{
       "type":"structure",
@@ -3621,8 +3598,7 @@
     },
     "DisassociateWirelessDeviceFromThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWirelessGatewayFromCertificateRequest":{
       "type":"structure",
@@ -3638,8 +3614,7 @@
     },
     "DisassociateWirelessGatewayFromCertificateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWirelessGatewayFromThingRequest":{
       "type":"structure",
@@ -3655,8 +3630,7 @@
     },
     "DisassociateWirelessGatewayFromThingResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DlAllowed":{"type":"boolean"},
     "DlBucketSize":{
@@ -3833,7 +3807,6 @@
     "EventNotificationResourceType":{
       "type":"string",
       "enum":[
-        "FuotaTask",
         "SidewalkAccount",
         "WirelessDevice",
         "WirelessGateway"
@@ -3899,7 +3872,7 @@
     "FactorySupport":{"type":"boolean"},
     "FileDescriptor":{
       "type":"string",
-      "documentation":"<p>The Descriptor specifies some metadata about the File being transferred using FUOTA e.g. the software version. It is sent transparently to the device. It is a binary field encoded in base64</p>",
+      "documentation":"<p>The descriptor is the metadata about the file that is transferred to the device using FUOTA, such as the software version. It is a binary field encoded in base64.</p>",
       "max":332,
       "pattern":"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
     },
@@ -3966,7 +3939,7 @@
     },
     "FuotaTaskEvent":{
       "type":"string",
-      "documentation":"<p>The event for a log message, if the log message is tied to a fuota task.</p>",
+      "documentation":"<p>The event for a log message, if the log message is tied to a FUOTA task.</p>",
       "enum":["Fuota"]
     },
     "FuotaTaskEventLogOption":{
@@ -3979,7 +3952,7 @@
         "Event":{"shape":"FuotaTaskEvent"},
         "LogLevel":{"shape":"LogLevel"}
       },
-      "documentation":"<p>The log options for a FUOTA task event and can be used to set log levels for a specific fuota task event.</p> <p>For a LoRaWAN FuotaTask type, possible event for a log message is <code>Fuota</code>.</p>"
+      "documentation":"<p>The log options for a FUOTA task event and can be used to set log levels for a specific FUOTA task event.</p> <p>For a LoRaWAN FUOTA task, the only possible event for a log message is <code>Fuota</code>.</p>"
     },
     "FuotaTaskEventLogOptionList":{
       "type":"list",
@@ -4005,17 +3978,17 @@
       "members":{
         "Type":{
           "shape":"FuotaTaskType",
-          "documentation":"<p>The fuota task type.</p>"
+          "documentation":"<p>The FUOTA task type.</p>"
         },
         "LogLevel":{"shape":"LogLevel"},
         "Events":{"shape":"FuotaTaskEventLogOptionList"}
       },
-      "documentation":"<p>The log options for fuota tasks and can be used to set log levels for a specific type of fuota task.</p>"
+      "documentation":"<p>The log options for FUOTA tasks and can be used to set log levels for a specific type of FUOTA task.</p>"
     },
     "FuotaTaskLogOptionList":{
       "type":"list",
       "member":{"shape":"FuotaTaskLogOption"},
-      "documentation":"<p>The list of fuota task log options.</p>"
+      "documentation":"<p>The list of FUOTA task log options.</p>"
     },
     "FuotaTaskName":{
       "type":"string",
@@ -4035,7 +4008,7 @@
     },
     "FuotaTaskType":{
       "type":"string",
-      "documentation":"<p>The fuota task type.</p>",
+      "documentation":"<p>The FUOTA task type.</p>",
       "enum":["LoRaWAN"]
     },
     "GPST":{"type":"float"},
@@ -4165,8 +4138,7 @@
     },
     "GetEventConfigurationByResourceTypesRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetEventConfigurationByResourceTypesResponse":{
       "type":"structure",
@@ -4224,8 +4196,7 @@
     },
     "GetLogLevelsByResourceTypesRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetLogLevelsByResourceTypesResponse":{
       "type":"structure",
@@ -4238,8 +4209,7 @@
     },
     "GetMetricConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetMetricConfigurationResponse":{
       "type":"structure",
@@ -4570,7 +4540,7 @@
         },
         "ResourceType":{
           "shape":"ResourceType",
-          "documentation":"<p>The type of the resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code> or <code>FuotaTask</code>.</p>",
+          "documentation":"<p>The type of resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code>, or <code>FuotaTask</code>.</p>",
           "location":"querystring",
           "locationName":"resourceType"
         }
@@ -4618,7 +4588,7 @@
       "members":{
         "ServiceType":{
           "shape":"WirelessGatewayServiceType",
-          "documentation":"<p>The service type for which to get endpoint information about. Can be <code>CUPS</code> for the Configuration and Update Server endpoint, or <code>LNS</code> for the LoRaWAN Network Server endpoint or <code>CLAIM</code> for the global endpoint.</p>",
+          "documentation":"<p>The service type for which to get endpoint information about. Can be <code>CUPS</code> for the Configuration and Update Server endpoint, or <code>LNS</code> for the LoRaWAN Network Server endpoint.</p>",
           "location":"querystring",
           "locationName":"serviceType"
         }
@@ -5218,7 +5188,6 @@
       "enum":[
         "PartnerAccountId",
         "DevEui",
-        "FuotaTaskId",
         "GatewayEui",
         "WirelessDeviceId",
         "WirelessGatewayId"
@@ -6279,6 +6248,22 @@
         "MinGwDiversity":{
           "shape":"MinGwDiversity",
           "documentation":"<p>The MinGwDiversity value.</p>"
+        },
+        "TxPowerIndexMin":{
+          "shape":"TxPowerIndexMin",
+          "documentation":"<p>The Transmit Power Index minimum value.</p> <p>Default: <code>0</code> </p>"
+        },
+        "TxPowerIndexMax":{
+          "shape":"TxPowerIndexMax",
+          "documentation":"<p>The Transmit Power Index maximum value.</p> <p>Default: <code>15</code> </p>"
+        },
+        "NbTransMin":{
+          "shape":"NbTransMin",
+          "documentation":"<p>The minimum number of transmissions.</p> <p>Default: <code>0</code> </p>"
+        },
+        "NbTransMax":{
+          "shape":"NbTransMax",
+          "documentation":"<p>The maximum number of transmissions.</p> <p>Default: <code>3</code> </p>"
         }
       },
       "documentation":"<p>LoRaWANGetServiceProfileInfo object.</p>"
@@ -6418,6 +6403,22 @@
         "RaAllowed":{
           "shape":"RaAllowed",
           "documentation":"<p>The RAAllowed value that describes whether roaming activation is allowed.</p>"
+        },
+        "TxPowerIndexMin":{
+          "shape":"TxPowerIndexMin",
+          "documentation":"<p>The Transmit Power Index minimum.</p> <p>Default: <code>0</code> </p>"
+        },
+        "TxPowerIndexMax":{
+          "shape":"TxPowerIndexMax",
+          "documentation":"<p>The Transmit Power Index maximum.</p> <p>Default: <code>15</code> </p>"
+        },
+        "NbTransMin":{
+          "shape":"NbTransMin",
+          "documentation":"<p>The minimum number of transmissions.</p> <p>Default: <code>0</code> </p>"
+        },
+        "NbTransMax":{
+          "shape":"NbTransMax",
+          "documentation":"<p>The maximum number of transmissions.</p> <p>Default: <code>3</code> </p>"
         }
       },
       "documentation":"<p>LoRaWANServiceProfile object.</p>"
@@ -6534,8 +6535,7 @@
       "type":"structure",
       "required":[
         "Pci",
-        "Earfcn",
-        "EutranCid"
+        "Earfcn"
       ],
       "members":{
         "Pci":{
@@ -6874,6 +6874,16 @@
       "documentation":"<p>Wireless metadata that is to be sent to multicast group.</p>"
     },
     "NRCapable":{"type":"boolean"},
+    "NbTransMax":{
+      "type":"integer",
+      "max":15,
+      "min":0
+    },
+    "NbTransMin":{
+      "type":"integer",
+      "max":15,
+      "min":0
+    },
     "NetId":{
       "type":"string",
       "documentation":"<p>LoRaWAN network ID.</p>",
@@ -7042,14 +7052,14 @@
       "members":{
         "GatewayList":{
           "shape":"GatewayListMulticast",
-          "documentation":"<p>The list of gateways that you want to use for sending the multicast downlink. Each downlink will be sent to all the gateways in the list with transmission interval between them. If list is empty the gateway list will be dynamically selected similar to the case of no ParticipatingGateways </p>"
+          "documentation":"<p>The list of gateways that you want to use for sending the multicast downlink message. Each downlink message will be sent to all the gateways in the list in the order that you provided. If the gateway list is empty, then AWS IoT Core for LoRaWAN chooses the gateways that were most recently used by the devices to send an uplink message.</p>"
         },
         "TransmissionInterval":{
           "shape":"TransmissionIntervalMulticast",
-          "documentation":"<p>The duration of time for which AWS IoT Core for LoRaWAN will wait before transmitting the multicast payload to the next gateway in the list.</p>"
+          "documentation":"<p>The duration of time in milliseconds for which AWS IoT Core for LoRaWAN will wait before transmitting the multicast payload to the next gateway in the list.</p>"
         }
       },
-      "documentation":"<p>Specify the list of gateways to which you want to send the multicast downlink messages. The multicast message will be sent to each gateway in the sequence provided in the list.</p>"
+      "documentation":"<p>Specify the list of gateways to which you want to send the multicast downlink messages. The multicast message will be sent to each gateway in the list, with the transmission interval as the time interval between each message.</p>"
     },
     "PartnerAccountArn":{"type":"string"},
     "PartnerAccountId":{
@@ -7272,8 +7282,7 @@
     },
     "PutPositionConfigurationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true,
       "deprecatedMessage":"This operation is no longer supported."
     },
@@ -7292,7 +7301,7 @@
         },
         "ResourceType":{
           "shape":"ResourceType",
-          "documentation":"<p>The type of the resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code>, or <code>FuotaTask</code>.</p>",
+          "documentation":"<p>The type of resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code>, or <code>FuotaTask</code>.</p>",
           "location":"querystring",
           "locationName":"resourceType"
         },
@@ -7301,8 +7310,7 @@
     },
     "PutResourceLogLevelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "QualificationStatus":{"type":"boolean"},
     "QueryString":{
@@ -7350,13 +7358,11 @@
     "ReportDevStatusMargin":{"type":"boolean"},
     "ResetAllResourceLogLevelsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResetAllResourceLogLevelsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResetResourceLogLevelRequest":{
       "type":"structure",
@@ -7372,7 +7378,7 @@
         },
         "ResourceType":{
           "shape":"ResourceType",
-          "documentation":"<p>The type of the resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code>, or <code>FuotaTask</code>.</p>",
+          "documentation":"<p>The type of resource, which can be <code>WirelessDevice</code>, <code>WirelessGateway</code>, or <code>FuotaTask</code>.</p>",
           "location":"querystring",
           "locationName":"resourceType"
         }
@@ -7380,13 +7386,12 @@
     },
     "ResetResourceLogLevelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceId":{"type":"string"},
     "ResourceIdentifier":{
       "type":"string",
-      "documentation":"<p>The identifier of the resource. For a Wireless Device, it is the wireless device ID. For a wireless gateway, it is the wireless gateway ID.</p>",
+      "documentation":"<p>The unique identifier of the resource, which can be the wireless gateway ID, the wireless device ID, or the FUOTA task ID.</p>",
       "max":256
     },
     "ResourceNotFoundException":{
@@ -7630,7 +7635,7 @@
     },
     "SessionTimeout":{
       "type":"integer",
-      "documentation":"<p>How long before a multicast group session is to timeout.</p>",
+      "documentation":"<p>How long before a multicast group session is to timeout.</p> <note> <p>We recommend that you provide a timeout value that is a power-of-two (such as 64, 128, 256). If a non-power-of-two value is provided, it will automatically be rounded up to the next supported power-of-two within the allowed range.</p> </note>",
       "max":172800,
       "min":60
     },
@@ -7672,8 +7677,7 @@
     },
     "SidewalkCreateDeviceProfile":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Sidewalk object for creating a device profile.</p>"
     },
     "SidewalkCreateWirelessDevice":{
@@ -7916,8 +7920,7 @@
     },
     "StartBulkAssociateWirelessDeviceWithMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartBulkDisassociateWirelessDeviceFromMulticastGroupRequest":{
       "type":"structure",
@@ -7934,8 +7937,7 @@
     },
     "StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartFuotaTaskRequest":{
       "type":"structure",
@@ -7951,8 +7953,7 @@
     },
     "StartFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartMulticastGroupSessionRequest":{
       "type":"structure",
@@ -7971,8 +7972,7 @@
     },
     "StartMulticastGroupSessionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartSingleWirelessDeviceImportTaskRequest":{
       "type":"structure",
@@ -8269,8 +8269,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -8463,6 +8462,16 @@
       "max":1,
       "min":0
     },
+    "TxPowerIndexMax":{
+      "type":"integer",
+      "max":15,
+      "min":0
+    },
+    "TxPowerIndexMin":{
+      "type":"integer",
+      "max":15,
+      "min":0
+    },
     "UARFCN":{
       "type":"integer",
       "max":16383,
@@ -8510,8 +8519,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAbpV1_0_x":{
       "type":"structure",
@@ -8568,8 +8576,7 @@
     },
     "UpdateDestinationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEventConfigurationByResourceTypesRequest":{
       "type":"structure",
@@ -8598,8 +8605,7 @@
     },
     "UpdateEventConfigurationByResourceTypesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFPorts":{
       "type":"structure",
@@ -8637,8 +8643,7 @@
     },
     "UpdateFuotaTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLogLevelsByResourceTypesRequest":{
       "type":"structure",
@@ -8651,8 +8656,7 @@
     },
     "UpdateLogLevelsByResourceTypesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMetricConfigurationRequest":{
       "type":"structure",
@@ -8665,8 +8669,7 @@
     },
     "UpdateMetricConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMulticastGroupRequest":{
       "type":"structure",
@@ -8684,8 +8687,7 @@
     },
     "UpdateMulticastGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNetworkAnalyzerConfigurationRequest":{
       "type":"structure",
@@ -8726,8 +8728,7 @@
     },
     "UpdateNetworkAnalyzerConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePartnerAccountRequest":{
       "type":"structure",
@@ -8757,8 +8758,7 @@
     },
     "UpdatePartnerAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePositionRequest":{
       "type":"structure",
@@ -8790,8 +8790,7 @@
     },
     "UpdatePositionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true,
       "deprecatedMessage":"This operation is no longer supported."
     },
@@ -8844,8 +8843,7 @@
     },
     "UpdateResourceEventConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResourcePositionRequest":{
       "type":"structure",
@@ -8875,8 +8873,7 @@
     },
     "UpdateResourcePositionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSignature":{
       "type":"string",
@@ -8904,8 +8901,7 @@
     },
     "UpdateWirelessDeviceImportTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWirelessDeviceRequest":{
       "type":"structure",
@@ -8923,7 +8919,7 @@
         },
         "Name":{
           "shape":"WirelessDeviceName",
-          "documentation":"<p>The new name of the resource.</p>"
+          "documentation":"<p>The new name of the resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "Description":{
           "shape":"Description",
@@ -8941,8 +8937,7 @@
     },
     "UpdateWirelessDeviceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWirelessGatewayRequest":{
       "type":"structure",
@@ -8956,7 +8951,7 @@
         },
         "Name":{
           "shape":"WirelessGatewayName",
-          "documentation":"<p>The new name of the resource.</p>"
+          "documentation":"<p>The new name of the resource.</p> <note> <p>The following special characters aren't accepted: <code>&lt;&gt;^#~$</code> </p> </note>"
         },
         "Description":{
           "shape":"Description",
@@ -8972,8 +8967,7 @@
     },
     "UpdateWirelessGatewayResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWirelessGatewayTaskCreate":{
       "type":"structure",
@@ -9511,5 +9505,5 @@
       "documentation":"<p>WirelessMetadata object.</p>"
     }
   },
-  "documentation":"<p>AWS IoT Wireless provides bi-directional communication between internet-connected wireless devices and the AWS Cloud. To onboard both LoRaWAN and Sidewalk devices to AWS IoT, use the IoT Wireless API. These wireless devices use the Low Power Wide Area Networking (LPWAN) communication protocol to communicate with AWS IoT.</p> <p>Using the API, you can perform create, read, update, and delete operations for your wireless devices, gateways, destinations, and profiles. After onboarding your devices, you can use the API operations to set log levels and monitor your devices with CloudWatch.</p> <p>You can also use the API operations to create multicast groups and schedule a multicast session for sending a downlink message to devices in the group. By using Firmware Updates Over-The-Air (FUOTA) API operations, you can create a FUOTA task and schedule a session to update the firmware of individual devices or an entire group of devices in a multicast group.</p> <p>To connect to the AWS IoT Wireless Service, use the Service endpoints as described in <a href=\"https://docs.aws.amazon.com/general/latest/gr/iot-lorawan.html#iot-wireless_region\">IoT Wireless Service endpoints</a> in the <i>AWS General Reference</i>.</p>"
+  "documentation":"<p>AWS IoT Wireless provides bi-directional communication between internet-connected wireless devices and the AWS Cloud. To onboard both <a href=\"https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-lorawan.html\">LoRaWAN</a> and <a href=\"https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-sidewalk.html\">Sidewalk</a> devices to AWS IoT, use the IoT Wireless API. These wireless devices use the Low Power Wide Area Networking (LPWAN) communication protocol to communicate with AWS IoT. </p> <p>Using the API, you can perform create, read, update, and delete operations for your wireless devices, gateways, destinations, and profiles. After onboarding your devices, you can use the API operations to set log levels and monitor your devices with CloudWatch.</p> <p>You can also use the API operations to create multicast groups and schedule a multicast session for sending a downlink message to devices in the group. By using Firmware Updates Over-The-Air (FUOTA) API operations, you can create a FUOTA task and schedule a session to update the firmware of individual devices or an entire group of devices in a multicast group.</p> <p>To connect to the AWS IoT Wireless Service, use the Service endpoints as described in <a href=\"https://docs.aws.amazon.com/general/latest/gr/iot-lorawan.html#iot-wireless_region\">IoT Wireless Service endpoints</a>. You can use both IPv4 and IPv6 protocols to connect to the endpoints and send requests to the AWS IoT Wireless service. For more information, see <a href=\"https://docs.aws.amazon.com/iot-wireless/latest/developerguide/wireless-ipv6-access.html\">Using IPv6 with AWS IoT Wireless</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ivs/2020-07-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/paginators-1.json 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "ingestConfigurations"
+    },
+    "ListParticipantReplicas": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "replicas"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/service-2.json 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/ivs-realtime/2020-07-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ivs-realtime/2020-07-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -436,6 +436,21 @@
       ],
       "documentation":"<p>Lists events for a specified participant that occurred during a specified stage session.</p>"
     },
+    "ListParticipantReplicas":{
+      "name":"ListParticipantReplicas",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListParticipantReplicas",
+        "responseCode":200
+      },
+      "input":{"shape":"ListParticipantReplicasRequest"},
+      "output":{"shape":"ListParticipantReplicasResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all the replicas for a participant from a source stage.</p>"
+    },
     "ListParticipants":{
       "name":"ListParticipants",
       "http":{
@@ -551,6 +566,26 @@
       ],
       "documentation":"<p>Starts a Composition from a stage based on the configuration provided in the request.</p> <p>A Composition is an ephemeral resource that exists after this operation returns successfully. Composition stops and the resource is deleted:</p> <ul> <li> <p>When <a>StopComposition</a> is called.</p> </li> <li> <p>After a 1-minute timeout, when all participants are disconnected from the stage.</p> </li> <li> <p>After a 1-minute timeout, if there are no participants in the stage when StartComposition is called.</p> </li> <li> <p>When broadcasting to the IVS channel fails and all retries are exhausted.</p> </li> <li> <p>When broadcasting is disconnected and all attempts to reconnect are exhausted.</p> </li> </ul>"
     },
+    "StartParticipantReplication":{
+      "name":"StartParticipantReplication",
+      "http":{
+        "method":"POST",
+        "requestUri":"/StartParticipantReplication",
+        "responseCode":200
+      },
+      "input":{"shape":"StartParticipantReplicationRequest"},
+      "output":{"shape":"StartParticipantReplicationResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"PendingVerification"}
+      ],
+      "documentation":"<p>Starts replicating a publishing participant from a source stage to a destination stage.</p>"
+    },
     "StopComposition":{
       "name":"StopComposition",
       "http":{
@@ -570,6 +605,23 @@
       ],
       "documentation":"<p>Stops and deletes a Composition resource. Any broadcast from the Composition resource is stopped.</p>"
     },
+    "StopParticipantReplication":{
+      "name":"StopParticipantReplication",
+      "http":{
+        "method":"POST",
+        "requestUri":"/StopParticipantReplication",
+        "responseCode":200
+      },
+      "input":{"shape":"StopParticipantReplicationRequest"},
+      "output":{"shape":"StopParticipantReplicationResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Stops a replicated participant session.</p>"
+    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -645,6 +697,54 @@
     "AccessDeniedException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>User does not have sufficient access to perform this action.</p>"
@@ -669,7 +769,7 @@
       "members":{
         "storageConfigurationArn":{
           "shape":"AutoParticipantRecordingStorageConfigurationArn",
-          "documentation":"<p>ARN of the <a>StorageConfiguration</a> resource to use for individual participant recording. Default: <code>\"\"</code> (empty string, no storage configuration is specified). Individual participant recording cannot be started unless a storage configuration is specified, when a <a>Stage</a> is created or updated.</p>"
+          "documentation":"<p>ARN of the <a>StorageConfiguration</a> resource to use for individual participant recording. Default: <code>\"\"</code> (empty string, no storage configuration is specified). Individual participant recording cannot be started unless a storage configuration is specified, when a <a>Stage</a> is created or updated. To disable individual participant recording, set this to <code>\"\"</code>; other fields in this object will get reset to their defaults when sending <code>\"\"</code>. </p>"
         },
         "mediaTypes":{
           "shape":"ParticipantRecordingMediaTypeList",
@@ -678,6 +778,18 @@
         "thumbnailConfiguration":{
           "shape":"ParticipantThumbnailConfiguration",
           "documentation":"<p>A complex type that allows you to enable/disable the recording of thumbnails for individual participant recording and modify the interval at which thumbnails are generated for the live session.</p>"
+        },
+        "recordingReconnectWindowSeconds":{
+          "shape":"ParticipantRecordingReconnectWindowSeconds",
+          "documentation":"<p>If a stage publisher disconnects and then reconnects within the specified interval, the multiple recordings will be considered a single recording and merged together.</p> <p>The default value is 0, which disables merging.</p>"
+        },
+        "hlsConfiguration":{
+          "shape":"ParticipantRecordingHlsConfiguration",
+          "documentation":"<p>HLS configuration object for individual participant recording.</p>"
+        },
+        "recordParticipantReplicas":{
+          "shape":"RecordParticipantReplicas",
+          "documentation":"<p>Optional field to disable replica participant recording. If this is set to <code>false</code> when a participant is a replica, replica participants are not recorded. Default: <code>true</code>.</p>"
         }
       },
       "documentation":"<p>Object specifying a configuration for individual participant recording.</p>"
@@ -773,6 +885,22 @@
       "min":1,
       "pattern":"[a-zA-Z0-9-_]*"
     },
+    "CompositionRecordingHlsConfiguration":{
+      "type":"structure",
+      "members":{
+        "targetSegmentDurationSeconds":{
+          "shape":"CompositionRecordingTargetSegmentDurationSeconds",
+          "documentation":"<p>Defines the target duration for recorded segments generated when using composite recording. Default: 2.</p>"
+        }
+      },
+      "documentation":"<p>An object representing a configuration of HLS recordings for server-side composition.</p>"
+    },
+    "CompositionRecordingTargetSegmentDurationSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":2
+    },
     "CompositionState":{
       "type":"string",
       "enum":[
@@ -850,6 +978,54 @@
     "ConflictException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>Updating or deleting a resource can cause an inconsistent state.</p>"
@@ -1347,6 +1523,18 @@
         "errorCode":{
           "shape":"EventErrorCode",
           "documentation":"<p>If the event is an error event, the error code is provided to give insight into the specific error that occurred. If the event is not an error event, this field is null.</p> <ul> <li> <p> <code>B_FRAME_PRESENT</code> — The participant's stream includes B-frames. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-rtmp-publishing.html\"> IVS RTMP Publishing</a>.</p> </li> <li> <p> <code>BITRATE_EXCEEDED</code> — The participant exceeded the maximum supported bitrate. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html\"> Service Quotas</a>.</p> </li> <li> <p> <code>INSUFFICIENT_CAPABILITIES</code> — The participant tried to take an action that the participant’s token is not allowed to do. For details on participant capabilities, see the <code>capabilities</code> field in <a>CreateParticipantToken</a>.</p> </li> <li> <p> <code>INTERNAL_SERVER_EXCEPTION</code> — The participant failed to publish to the stage due to an internal server error.</p> </li> <li> <p> <code>INVALID_AUDIO_CODEC</code> — The participant is using an invalid audio codec. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-stream-ingest.html\"> Stream Ingest</a>.</p> </li> <li> <p> <code>INVALID_INPUT</code> — The participant is using an invalid input stream.</p> </li> <li> <p> <code>INVALID_PROTOCOL</code> — The participant's IngestConfiguration resource is configured for RTMPS but they tried streaming with RTMP. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-rtmp-publishing.html\"> IVS RTMP Publishing</a>.</p> </li> <li> <p> <code>INVALID_STREAM_KEY</code> — The participant is using an invalid stream key. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-rtmp-publishing.html\"> IVS RTMP Publishing</a>.</p> </li> <li> <p> <code>INVALID_VIDEO_CODEC</code> — The participant is using an invalid video codec. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-stream-ingest.html\"> Stream Ingest</a>.</p> </li> <li> <p> <code>PUBLISHER_NOT_FOUND</code> — The participant tried to subscribe to a publisher that doesn’t exist.</p> </li> <li> <p> <code>QUOTA_EXCEEDED</code> — The number of participants who want to publish/subscribe to a stage exceeds the quota. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html\"> Service Quotas</a>.</p> </li> <li> <p> <code>RESOLUTION_EXCEEDED</code> — The participant exceeded the maximum supported resolution. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html\"> Service Quotas</a>.</p> </li> <li> <p> <code>REUSE_OF_STREAM_KEY</code> — The participant tried to use a stream key that is associated with another active stage session.</p> </li> <li> <p> <code>STREAM_DURATION_EXCEEDED</code> — The participant exceeded the maximum allowed stream duration. For details, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html\"> Service Quotas</a>.</p> </li> </ul>"
+        },
+        "destinationStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant is replicated. Applicable only if the event name is <code>REPLICATION_STARTED</code> or <code>REPLICATION_STOPPED</code>.</p>"
+        },
+        "destinationSessionId":{
+          "shape":"StageSessionId",
+          "documentation":"<p>ID of the session within the destination stage. Applicable only if the event name is <code>REPLICATION_STARTED</code> or <code>REPLICATION_STOPPED</code>.</p>"
+        },
+        "replica":{
+          "shape":"Replica",
+          "documentation":"<p>If true, this indicates the <code>participantId</code> is a replicated participant. If this is a subscribe event, then this flag refers to <code>remoteParticipantId</code>. Default: <code>false</code>.</p>"
         }
       },
       "documentation":"<p>An occurrence during a stage session.</p>"
@@ -1385,7 +1573,9 @@
         "SUBSCRIBE_STOPPED",
         "PUBLISH_ERROR",
         "SUBSCRIBE_ERROR",
-        "JOIN_ERROR"
+        "JOIN_ERROR",
+        "REPLICATION_STARTED",
+        "REPLICATION_STOPPED"
       ]
     },
     "Framerate":{
@@ -1587,6 +1777,10 @@
         "gridGap":{
           "shape":"GridGap",
           "documentation":"<p>Specifies the spacing between participant tiles in pixels. Default: <code>2</code>.</p>"
+        },
+        "participantOrderAttribute":{
+          "shape":"AttributeKey",
+          "documentation":"<p>Attribute name in <a>ParticipantTokenConfiguration</a> identifying the participant ordering key. Participants with <code>participantOrderAttribute</code> set to <code>\"\"</code> or not specified are ordered based on their arrival time into the stage.</p>"
         }
       },
       "documentation":"<p>Configuration information specific to Grid layout, for server-side composition. See \"Layouts\" in <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/server-side-composition.html\">Server-Side Composition</a>.</p>"
@@ -1763,6 +1957,54 @@
     "InternalServerException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>Unexpected error during processing of request.</p>"
@@ -1928,6 +2170,45 @@
         }
       }
     },
+    "ListParticipantReplicasRequest":{
+      "type":"structure",
+      "required":[
+        "sourceStageArn",
+        "participantId"
+      ],
+      "members":{
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant is publishing.</p>"
+        },
+        "participantId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>Participant ID of the publisher that has been replicated. This is assigned by IVS and returned by <a>CreateParticipantToken</a> or the <code>jti</code> (JWT ID) used to <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started-distribute-tokens.html#getting-started-distribute-tokens-self-signed\">create a self signed token</a>.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The first participant to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxParticipantReplicaResults",
+          "documentation":"<p>Maximum number of results to return. Default: 50.</p>"
+        }
+      }
+    },
+    "ListParticipantReplicasResponse":{
+      "type":"structure",
+      "required":["replicas"],
+      "members":{
+        "replicas":{
+          "shape":"ParticipantReplicaList",
+          "documentation":"<p>List of all participant replicas.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If there are more participants than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
+        }
+      }
+    },
     "ListParticipantsRequest":{
       "type":"structure",
       "required":[
@@ -2142,6 +2423,12 @@
       "max":100,
       "min":1
     },
+    "MaxParticipantReplicaResults":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":1
+    },
     "MaxParticipantResults":{
       "type":"integer",
       "box":true,
@@ -2236,7 +2523,7 @@
         },
         "recordingS3Prefix":{
           "shape":"ParticipantRecordingS3Prefix",
-          "documentation":"<p>S3 prefix of the S3 bucket where the participant is being recorded, if individual participant recording is enabled, or <code>\"\"</code> (empty string), if recording is not enabled.</p>"
+          "documentation":"<p>S3 prefix of the S3 bucket where the participant is being recorded, if individual participant recording is enabled, or <code>\"\"</code> (empty string), if recording is not enabled. If individual participant recording merge is enabled, and if a stage publisher disconnects from a stage and then reconnects, IVS tries to record to the same S3 prefix as the previous session. See <a href=\"/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html#ind-part-rec-merge-frag\"> Merge Fragmented Individual Participant Recordings</a>.</p>"
         },
         "recordingState":{
           "shape":"ParticipantRecordingState",
@@ -2245,6 +2532,22 @@
         "protocol":{
           "shape":"ParticipantProtocol",
           "documentation":"<p>Type of ingest protocol that the participant employs for broadcasting.</p>"
+        },
+        "replicationType":{
+          "shape":"ReplicationType",
+          "documentation":"<p>Indicates if the participant has been replicated to another stage or is a replica from another stage. Default: <code>NONE</code>. </p>"
+        },
+        "replicationState":{
+          "shape":"ReplicationState",
+          "documentation":"<p>The participant's replication state.</p>"
+        },
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>Source stage ARN from which this participant is replicated, if <code>replicationType</code> is <code>REPLICA</code>. </p>"
+        },
+        "sourceSessionId":{
+          "shape":"StageSessionId",
+          "documentation":"<p>ID of the session within the source stage, if <code>replicationType</code> is <code>REPLICA</code>.</p>"
         }
       },
       "documentation":"<p>Object describing a participant that has joined a stage.</p>"
@@ -2289,6 +2592,16 @@
         "FAILED"
       ]
     },
+    "ParticipantRecordingHlsConfiguration":{
+      "type":"structure",
+      "members":{
+        "targetSegmentDurationSeconds":{
+          "shape":"ParticipantRecordingTargetSegmentDurationSeconds",
+          "documentation":"<p>Defines the target duration for recorded segments generated when recording a stage participant. Segments may have durations longer than the specified value when needed to ensure each segment begins with a keyframe. Default: 6.</p>"
+        }
+      },
+      "documentation":"<p>An object representing a configuration of participant HLS recordings for individual participant recording.</p>"
+    },
     "ParticipantRecordingMediaType":{
       "type":"string",
       "enum":[
@@ -2303,6 +2616,11 @@
       "max":1,
       "min":0
     },
+    "ParticipantRecordingReconnectWindowSeconds":{
+      "type":"integer",
+      "max":300,
+      "min":0
+    },
     "ParticipantRecordingS3BucketName":{
       "type":"string",
       "max":63,
@@ -2326,6 +2644,54 @@
         "DISABLED"
       ]
     },
+    "ParticipantRecordingTargetSegmentDurationSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":2
+    },
+    "ParticipantReplica":{
+      "type":"structure",
+      "required":[
+        "sourceStageArn",
+        "participantId",
+        "sourceSessionId",
+        "destinationStageArn",
+        "destinationSessionId",
+        "replicationState"
+      ],
+      "members":{
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage from which this participant is replicated.</p>"
+        },
+        "participantId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>Participant ID of the publisher that will be replicated. This is assigned by IVS and returned by <a>CreateParticipantToken</a> or the <code>jti</code> (JWT ID) used to <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started-distribute-tokens.html#getting-started-distribute-tokens-self-signed\"> create a self signed token</a>.</p>"
+        },
+        "sourceSessionId":{
+          "shape":"StageSessionId",
+          "documentation":"<p>ID of the session within the source stage.</p>"
+        },
+        "destinationStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant is replicated.</p>"
+        },
+        "destinationSessionId":{
+          "shape":"StageSessionId",
+          "documentation":"<p>ID of the session within the destination stage.</p>"
+        },
+        "replicationState":{
+          "shape":"ReplicationState",
+          "documentation":"<p>Replica’s current replication state.</p>"
+        }
+      },
+      "documentation":"<p>Information about the replicated destination stage for a participant.</p>"
+    },
+    "ParticipantReplicaList":{
+      "type":"list",
+      "member":{"shape":"ParticipantReplica"}
+    },
     "ParticipantState":{
       "type":"string",
       "enum":[
@@ -2359,6 +2725,22 @@
         "recordingState":{
           "shape":"ParticipantRecordingState",
           "documentation":"<p>The participant’s recording state.</p>"
+        },
+        "replicationType":{
+          "shape":"ReplicationType",
+          "documentation":"<p>Indicates if the participant has been replicated to another stage or is a replica from another stage. Default: <code>NONE</code>. </p>"
+        },
+        "replicationState":{
+          "shape":"ReplicationState",
+          "documentation":"<p>The participant's replication state.</p>"
+        },
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>Source stage ARN from which this participant is replicated, if <code>replicationType</code> is <code>REPLICA</code>.</p>"
+        },
+        "sourceSessionId":{
+          "shape":"StageSessionId",
+          "documentation":"<p>ID of the session within the source stage, if <code>replicationType</code> is <code>REPLICA</code>.</p>"
         }
       },
       "documentation":"<p>Summary object describing a participant that has joined a stage.</p>"
@@ -2471,7 +2853,12 @@
       "type":"timestamp",
       "timestampFormat":"iso8601"
     },
-    "ParticipantTokenId":{"type":"string"},
+    "ParticipantTokenId":{
+      "type":"string",
+      "max":64,
+      "min":0,
+      "pattern":"[a-zA-Z0-9-_]*"
+    },
     "ParticipantTokenList":{
       "type":"list",
       "member":{"shape":"ParticipantToken"}
@@ -2488,6 +2875,54 @@
     "PendingVerification":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p> Your account is pending verification. </p>"
@@ -2549,6 +2984,10 @@
         "pipHeight":{
           "shape":"PipHeight",
           "documentation":"<p>Specifies the height of the PiP window in pixels. When this is not set explicitly, <code>pipHeight</code>’s value will be based on the size of the composition and the aspect ratio of the participant’s video.</p>"
+        },
+        "participantOrderAttribute":{
+          "shape":"AttributeKey",
+          "documentation":"<p>Attribute name in <a>ParticipantTokenConfiguration</a> identifying the participant ordering key. Participants with <code>participantOrderAttribute</code> set to <code>\"\"</code> or not specified are ordered based on their arrival time into the stage.</p>"
         }
       },
       "documentation":"<p>Configuration information specific to Picture-in-Picture (PiP) layout, for <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/server-side-composition.html\">server-side composition</a>. </p>"
@@ -2642,9 +3081,20 @@
       "documentation":"<p>Summary information about a public key.</p>"
     },
     "Published":{"type":"boolean"},
+    "ReconnectWindowSeconds":{
+      "type":"integer",
+      "box":true,
+      "max":60,
+      "min":0
+    },
+    "RecordParticipantReplicas":{"type":"boolean"},
     "RecordingConfiguration":{
       "type":"structure",
       "members":{
+        "hlsConfiguration":{
+          "shape":"CompositionRecordingHlsConfiguration",
+          "documentation":"<p>An HLS configuration object to return information about how the recording will be configured.</p>"
+        },
         "format":{
           "shape":"RecordingConfigurationFormat",
           "documentation":"<p>The recording format for storing a recording in Amazon S3.</p>"
@@ -2656,6 +3106,22 @@
       "type":"string",
       "enum":["HLS"]
     },
+    "Replica":{"type":"boolean"},
+    "ReplicationState":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "STOPPED"
+      ]
+    },
+    "ReplicationType":{
+      "type":"string",
+      "enum":[
+        "SOURCE",
+        "REPLICA",
+        "NONE"
+      ]
+    },
     "ResourceArn":{
       "type":"string",
       "max":128,
@@ -2665,6 +3131,54 @@
     "ResourceNotFoundException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>Request references a resource which does not exist.</p>"
@@ -2734,6 +3248,54 @@
     "ServiceQuotaExceededException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>Request would cause a service quota to be exceeded.</p>"
@@ -2928,6 +3490,83 @@
         }
       }
     },
+    "StartParticipantReplicationRequest":{
+      "type":"structure",
+      "required":[
+        "sourceStageArn",
+        "destinationStageArn",
+        "participantId"
+      ],
+      "members":{
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant is publishing.</p>"
+        },
+        "destinationStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage to which the participant will be replicated.</p>"
+        },
+        "participantId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>Participant ID of the publisher that will be replicated. This is assigned by IVS and returned by <a>CreateParticipantToken</a> or the <code>jti</code> (JWT ID) used to <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started-distribute-tokens.html#getting-started-distribute-tokens-self-signed\">create a self signed token</a>. </p>"
+        },
+        "reconnectWindowSeconds":{
+          "shape":"ReconnectWindowSeconds",
+          "documentation":"<p>If the participant disconnects and then reconnects within the specified interval, replication will continue to be <code>ACTIVE</code>. Default: 0.</p>"
+        },
+        "attributes":{
+          "shape":"ParticipantAttributes",
+          "documentation":"<p>Application-provided attributes to set on the replicated participant in the destination stage. Map keys and values can contain UTF-8 encoded text. The maximum length of this field is 1 KB total. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p> <p>These attributes are merged with any attributes set for this participant when creating the token. If there is overlap in keys, the values in these attributes are replaced.</p>"
+        }
+      }
+    },
+    "StartParticipantReplicationResponse":{
+      "type":"structure",
+      "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        }
+      }
+    },
     "StopCompositionRequest":{
       "type":"structure",
       "required":["arn"],
@@ -2943,6 +3582,75 @@
       "members":{
       }
     },
+    "StopParticipantReplicationRequest":{
+      "type":"structure",
+      "required":[
+        "sourceStageArn",
+        "destinationStageArn",
+        "participantId"
+      ],
+      "members":{
+        "sourceStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant is publishing.</p>"
+        },
+        "destinationStageArn":{
+          "shape":"StageArn",
+          "documentation":"<p>ARN of the stage where the participant has been replicated.</p>"
+        },
+        "participantId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>Participant ID of the publisher that has been replicated. This is assigned by IVS and returned by <a>CreateParticipantToken</a> or the <code>jti</code> (JWT ID) used to <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started-distribute-tokens.html#getting-started-distribute-tokens-self-signed\"> create a self signed token</a>.</p>"
+        }
+      }
+    },
+    "StopParticipantReplicationResponse":{
+      "type":"structure",
+      "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        }
+      }
+    },
     "StorageConfiguration":{
       "type":"structure",
       "required":["arn"],
@@ -3103,7 +3811,7 @@
         },
         "tagKeys":{
           "shape":"TagKeyList",
-          "documentation":"<p>Array of tags to be removed. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html\">Best practices and strategies</a> in <i>Tagging AWS Resources and Tag Editor</i> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>",
+          "documentation":"<p>Array of tag keys (strings) for the tags to be removed. See <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html\">Best practices and strategies</a> in <i>Tagging AWS Resources and Tag Editor</i> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>",
           "location":"querystring",
           "locationName":"tagKeys"
         }
@@ -3172,6 +3880,54 @@
     "ValidationException":{
       "type":"structure",
       "members":{
+        "accessControlAllowOrigin":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Allow-Origin"
+        },
+        "accessControlExposeHeaders":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Access-Control-Expose-Headers"
+        },
+        "cacheControl":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Cache-Control"
+        },
+        "contentSecurityPolicy":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Content-Security-Policy"
+        },
+        "strictTransportSecurity":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"Strict-Transport-Security"
+        },
+        "xContentTypeOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Content-Type-Options"
+        },
+        "xFrameOptions":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"X-Frame-Options"
+        },
+        "xAmznErrorType":{
+          "shape":"String",
+          "documentation":"<p/>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        },
         "exceptionMessage":{
           "shape":"errorMessage",
           "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>"
@@ -3231,5 +3987,5 @@
     },
     "errorMessage":{"type":"string"}
   },
-  "documentation":"<p>The Amazon Interactive Video Service (IVS) real-time API is REST compatible, using a standard HTTP API and an AWS EventBridge event stream for responses. JSON is used for both requests and responses, including errors. </p> <p> <b>Key Concepts</b> </p> <ul> <li> <p> <b>Stage</b> — A virtual space where participants can exchange video in real time.</p> </li> <li> <p> <b>Participant token</b> — A token that authenticates a participant when they join a stage.</p> </li> <li> <p> <b>Participant object</b> — Represents participants (people) in the stage and contains information about them. When a token is created, it includes a participant ID; when a participant uses that token to join a stage, the participant is associated with that participant ID. There is a 1:1 mapping between participant tokens and participants.</p> </li> </ul> <p>For server-side composition:</p> <ul> <li> <p> <b>Composition process</b> — Composites participants of a stage into a single video and forwards it to a set of outputs (e.g., IVS channels). Composition operations support this process.</p> </li> <li> <p> <b>Composition</b> — Controls the look of the outputs, including how participants are positioned in the video.</p> </li> </ul> <p>For more information about your IVS live stream, also see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started.html\">Getting Started with Amazon IVS Real-Time Streaming</a>.</p> <p> <b>Tagging</b> </p> <p>A <i>tag</i> is a metadata label that you assign to an AWS resource. A tag comprises a <i>key</i> and a <i>value</i>, both set by you. For example, you might set a tag as <code>topic:nature</code> to label a particular video category. See <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html\">Best practices and strategies</a> in <i>Tagging AWS Resources and Tag Editor</i> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS stages has no service-specific constraints beyond what is documented there.</p> <p>Tags can help you identify and organize your AWS resources. For example, you can use the same tag for different resources to indicate that they are related. You can also use tags to manage access (see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html\">Access Tags</a>).</p> <p>The Amazon IVS real-time API has these tag-related operations: <a>TagResource</a>, <a>UntagResource</a>, and <a>ListTagsForResource</a>. The following resource supports tagging: Stage.</p> <p>At most 50 tags can be applied to a resource.</p>"
+  "documentation":"<p>The Amazon Interactive Video Service (IVS) real-time API is REST compatible, using a standard HTTP API and an AWS EventBridge event stream for responses. JSON is used for both requests and responses, including errors. </p> <p> <b>Key Concepts</b> </p> <ul> <li> <p> <b>Stage</b> — A virtual space where participants can exchange video in real time.</p> </li> <li> <p> <b>Participant token</b> — A token that authenticates a participant when they join a stage.</p> </li> <li> <p> <b>Participant object</b> — Represents participants (people) in the stage and contains information about them. When a token is created, it includes a participant ID; when a participant uses that token to join a stage, the participant is associated with that participant ID. There is a 1:1 mapping between participant tokens and participants.</p> </li> </ul> <p>For server-side composition:</p> <ul> <li> <p> <b>Composition process</b> — Composites participants of a stage into a single video and forwards it to a set of outputs (e.g., IVS channels). Composition operations support this process.</p> </li> <li> <p> <b>Composition</b> — Controls the look of the outputs, including how participants are positioned in the video.</p> </li> </ul> <p>For participant replication:</p> <ul> <li> <p> <b>Source stage</b> — The stage where the participant originally joined, which is used as the source for replication.</p> </li> <li> <p> <b>Destination stage</b> — The stage to which the participant is replicated. </p> </li> <li> <p> <b>Replicated participant</b> — A participant in a stage that is replicated to one or more destination stages. </p> </li> <li> <p> <b>Replica participant</b> — A participant in a destination stage that is replicated from another stage (the source stage).</p> </li> </ul> <p>For more information about your IVS live stream, also see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started.html\">Getting Started with Amazon IVS Real-Time Streaming</a>.</p> <p> <b>Tagging</b> </p> <p>A <i>tag</i> is a metadata label that you assign to an AWS resource. A tag comprises a <i>key</i> and a <i>value</i>, both set by you. For example, you might set a tag as <code>topic:nature</code> to label a particular video category. See <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html\">Best practices and strategies</a> in <i>Tagging AWS Resources and Tag Editor</i> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS stages has no service-specific constraints beyond what is documented there.</p> <p>Tags can help you identify and organize your AWS resources. For example, you can use the same tag for different resources to indicate that they are related. You can also use tags to manage access (see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html\">Access Tags</a>).</p> <p>The Amazon IVS real-time API has these tag-related operations: <a>TagResource</a>, <a>UntagResource</a>, and <a>ListTagsForResource</a>. The following resource supports tagging: Stage.</p> <p>At most 50 tags can be applied to a resource.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ivschat/2020-07-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kafka/2018-11-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kafka/2018-11-14/service-2.json 2.31.35-1/awscli/botocore/data/kafka/2018-11-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/kafka/2018-11-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kafka/2018-11-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1958,6 +1958,52 @@
       ],
       "documentation": "\n            <p>Updates the monitoring settings for the cluster. You can use this operation to specify which Apache Kafka metrics you want Amazon MSK to send to Amazon CloudWatch. You can also specify settings for open monitoring with Prometheus.</p>\n         "
     },
+    "UpdateRebalancing": {
+      "name": "UpdateRebalancing",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/v1/clusters/{clusterArn}/rebalancing",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateRebalancingRequest"
+      },
+      "output": {
+        "shape": "UpdateRebalancingResponse",
+        "documentation": "\n            <p>HTTP Status Code 200: OK.</p>\n         "
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "\n            <p>The request isn't valid because the input is incorrect. Correct your input and then submit it again.</p>\n         "
+        },
+        {
+          "shape": "UnauthorizedException",
+          "documentation": "\n            <p>The request is not authorized. The provided credentials couldn't be validated.</p>\n         "
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "\n            <p>There was an unexpected internal server error. Retrying your request might resolve the issue.</p>\n         "
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "\n            <p>Access forbidden. Check your credentials and then retry your request.</p>\n         "
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "\n            <p>The resource could not be found due to incorrect input. Correct the input, then retry the request.</p>\n         "
+        },
+        {
+          "shape": "ServiceUnavailableException",
+          "documentation": "\n            <p>The service cannot complete the request.</p>\n         "
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "\n            <p>The request throughput limit was exceeded.</p>\n         "
+        }
+      ],
+      "documentation": "\n            <p>Use this resource to update the intelligent rebalancing status of an Amazon MSK Provisioned cluster with Express brokers.</p>\n         "
+    },
     "UpdateReplicationInfo": {
       "name": "UpdateReplicationInfo",
       "http": {
@@ -2231,6 +2277,25 @@
         }
       }
     },
+    "Rebalancing": {
+      "type": "structure",
+      "documentation": "\n            <p>Specifies whether or not intelligent rebalancing is turned on for a newly created MSK Provisioned cluster with Express brokers. Intelligent rebalancing performs automatic partition balancing operations when you scale your clusters up or down. By default, intelligent rebalancing is ACTIVE for all new Express-based clusters.</p>\n         ",
+      "members": {
+        "Status": {
+          "shape": "RebalancingStatus",
+          "locationName": "status",
+          "documentation": "\n            <p>Intelligent rebalancing status. The default intelligent rebalancing status is ACTIVE for all new Express-based clusters.</p>\n         "
+        }
+      }
+    },
+    "RebalancingStatus": {
+      "type": "string",
+      "documentation": "\n            <p>Intelligent rebalancing status. The default intelligent rebalancing status is ACTIVE for all new Express-based clusters.</p>\n         ",
+      "enum": [
+        "PAUSED",
+        "ACTIVE"
+      ]
+    },
     "BrokerNodeGroupInfo": {
       "type": "structure",
       "members": {
@@ -2419,6 +2484,11 @@
           "locationName": "brokerNodeGroupInfo",
           "documentation": "\n            <p>Information about the broker nodes.</p>\n         "
         },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Contains information about intelligent rebalancing for new MSK Provisioned clusters with Express brokers. By default, intelligent rebalancing status is ACTIVE.</p>\n         "
+        },
         "ClientAuthentication": {
           "shape": "ClientAuthentication",
           "locationName": "clientAuthentication",
@@ -2695,6 +2765,11 @@
           "locationName": "brokerNodeGroupInfo",
           "documentation": "\n            <p>Information about the brokers.</p>\n         "
         },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Specifies if intelligent rebalancing is turned on for your MSK Provisioned cluster with Express brokers. For all new Express-based clusters that you create, intelligent rebalancing is turned on by default.</p>\n         "
+        },
         "ClientAuthentication": {
           "shape": "ClientAuthentication",
           "locationName": "clientAuthentication",
@@ -2756,6 +2831,11 @@
           "locationName": "brokerNodeGroupInfo",
           "documentation": "\n            <p>Information about the brokers.</p>\n         "
         },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Specifies whether or not intelligent rebalancing is turned on for a newly created MSK Provisioned cluster with Express brokers. Intelligent rebalancing performs automatic partition balancing operations when you scale your clusters up or down.  By default, intelligent rebalancing is ACTIVE for all new Express-based clusters.</p>\n         "
+        },
         "CurrentBrokerSoftwareInfo": {
           "shape": "BrokerSoftwareInfo",
           "locationName": "currentBrokerSoftwareInfo",
@@ -3201,6 +3281,11 @@
           "locationName": "brokerNodeGroupInfo",
           "documentation": "\n            <p>Information about the broker nodes in the cluster.</p>\n         "
         },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Specifies if intelligent rebalancing should be turned on for the new MSK Provisioned cluster with Express brokers. By default, intelligent rebalancing status is ACTIVE for all new clusters.</p>\n         "
+        },
         "ClientAuthentication": {
           "shape": "ClientAuthentication",
           "locationName": "clientAuthentication",
@@ -3721,8 +3806,7 @@
     },
     "DeleteClusterPolicyResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeleteConfigurationRequest": {
       "type": "structure",
@@ -5083,8 +5167,7 @@
     },
     "RejectClientVpcConnectionResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "MaxResults": {
       "type": "integer",
@@ -5170,6 +5253,11 @@
           "shape": "BrokerCountUpdateInfo",
           "locationName": "brokerCountUpdateInfo",
           "documentation": "\n            <p>Describes brokers being changed during a broker count update.</p>\n         "
+        },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Describes the intelligent rebalancing configuration of an MSK Provisioned cluster with Express brokers.</p>\n         "
         }
       },
       "documentation": "\n            <p>Information about cluster attributes that can be updated via update APIs.</p>\n         "
@@ -6303,6 +6391,47 @@
         },
         "ClusterOperationArn": {
           "shape": "__string",
+          "locationName": "clusterOperationArn",
+          "documentation": "\n            <p>The Amazon Resource Name (ARN) of the cluster operation.</p>\n         "
+        }
+      }
+    },
+    "UpdateRebalancingRequest": {
+      "type": "structure",
+      "members": {
+        "ClusterArn": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "clusterArn",
+          "documentation": "\n            <p>The Amazon Resource Name (ARN) of the cluster.</p>\n         "
+        },
+        "CurrentVersion": {
+          "shape": "__string",
+          "locationName": "currentVersion",
+          "documentation": "\n            <p>The current version of the cluster.</p>\n         "
+        },
+        "Rebalancing": {
+          "shape": "Rebalancing",
+          "locationName": "rebalancing",
+          "documentation": "\n            <p>Specifies if intelligent rebalancing should be turned on for your cluster. The default intelligent rebalancing status is ACTIVE for all new MSK Provisioned clusters that you create with Express brokers.</p>\n         "
+        }
+      },
+      "required": [
+        "ClusterArn",
+        "CurrentVersion",
+        "Rebalancing"
+      ]
+    },
+    "UpdateRebalancingResponse": {
+      "type": "structure",
+      "members": {
+        "ClusterArn": {
+          "shape": "__string",
+          "locationName": "clusterArn",
+          "documentation": "\n            <p>The Amazon Resource Name (ARN) of the cluster whose intelligent rebalancing status you've updated.</p>\n         "
+        },
+        "ClusterOperationArn": {
+          "shape": "__string",
           "locationName": "clusterOperationArn",
           "documentation": "\n            <p>The Amazon Resource Name (ARN) of the cluster operation.</p>\n         "
         }
diff -pruN 2.23.6-1/awscli/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kafkaconnect/2021-09-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kendra/2019-02-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kendra/2019-02-03/service-2.json 2.31.35-1/awscli/botocore/data/kendra/2019-02-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/kendra/2019-02-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kendra/2019-02-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -3326,8 +3326,7 @@
     },
     "DeleteAccessControlConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataSourceRequest":{
       "type":"structure",
@@ -3365,8 +3364,7 @@
     },
     "DeleteExperienceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFaqRequest":{
       "type":"structure",
@@ -6397,7 +6395,7 @@
     "MaxContentSizePerPageInMegaBytes":{
       "type":"float",
       "max":50,
-      "min":1.0e-06
+      "min":0.000001
     },
     "MaxLinksPerPage":{
       "type":"integer",
@@ -8563,8 +8561,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -8579,8 +8576,7 @@
     },
     "Template":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The template schema used for the data source, where templates schemas are supported.</p> <p>See <a href=\"https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html\">Data source template schemas</a>.</p>",
       "document":true
     },
@@ -8746,8 +8742,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccessControlConfigurationRequest":{
       "type":"structure",
@@ -8784,8 +8779,7 @@
     },
     "UpdateAccessControlConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataSourceRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kendra-ranking/2022-10-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -33,7 +33,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -61,7 +60,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -74,7 +74,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -88,7 +87,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -108,7 +106,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -122,14 +119,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -138,11 +133,11 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
@@ -153,14 +148,16 @@
                                                     },
                                                     "type": "endpoint"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
@@ -171,7 +168,8 @@
                                     },
                                     "type": "endpoint"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -185,14 +183,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -201,11 +197,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -216,14 +212,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -234,9 +232,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/kendra-ranking/2022-10-19/service-2.json 2.31.35-1/awscli/botocore/data/kendra-ranking/2022-10-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/kendra-ranking/2022-10-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kendra-ranking/2022-10-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,13 +5,15 @@
     "endpointPrefix":"kendra-ranking",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"Kendra Ranking",
     "serviceFullName":"Amazon Kendra Intelligent Ranking",
     "serviceId":"Kendra Ranking",
     "signatureVersion":"v4",
     "signingName":"kendra-ranking",
     "targetPrefix":"AWSKendraRerankingFrontendService",
-    "uid":"kendra-ranking-2022-10-19"
+    "uid":"kendra-ranking-2022-10-19",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateRescoreExecutionPlan":{
@@ -673,8 +675,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "TagValue":{
@@ -721,8 +722,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "UpdateRescoreExecutionPlanRequest":{
diff -pruN 2.23.6-1/awscli/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspaces/2022-02-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/keyspaces/2022-02-10/service-2.json 2.31.35-1/awscli/botocore/data/keyspaces/2022-02-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/keyspaces/2022-02-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspaces/2022-02-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -461,6 +461,60 @@
       "box":true,
       "min":1
     },
+    "CdcPropagateTags":{
+      "type":"string",
+      "enum":[
+        "TABLE",
+        "NONE"
+      ]
+    },
+    "CdcSpecification":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"CdcStatus",
+          "documentation":"<p>The status of the CDC stream. You can enable or disable a stream for a table.</p>"
+        },
+        "viewType":{
+          "shape":"ViewType",
+          "documentation":"<p>The view type specifies the changes Amazon Keyspaces records for each changed row in the stream. After you create the stream, you can't make changes to this selection. </p> <p>The options are:</p> <ul> <li> <p> <code>NEW_AND_OLD_IMAGES</code> - both versions of the row, before and after the change. This is the default.</p> </li> <li> <p> <code>NEW_IMAGE</code> - the version of the row after the change.</p> </li> <li> <p> <code>OLD_IMAGE</code> - the version of the row before the change.</p> </li> <li> <p> <code>KEYS_ONLY</code> - the partition and clustering keys of the row that was changed.</p> </li> </ul>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags (key-value pairs) that you want to apply to the stream.</p>"
+        },
+        "propagateTags":{
+          "shape":"CdcPropagateTags",
+          "documentation":"<p>Specifies that the stream inherits the tags from the table.</p>"
+        }
+      },
+      "documentation":"<p>The settings for the CDC stream of a table. For more information about CDC streams, see <a href=\"https://docs.aws.amazon.com/keyspaces/latest/devguide/cdc.html\">Working with change data capture (CDC) streams in Amazon Keyspaces</a> in the <i>Amazon Keyspaces Developer Guide</i>.</p>"
+    },
+    "CdcSpecificationSummary":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"CdcStatus",
+          "documentation":"<p>The status of the CDC stream. Specifies if the table has a CDC stream.</p>"
+        },
+        "viewType":{
+          "shape":"ViewType",
+          "documentation":"<p>The view type specifies the changes Amazon Keyspaces records for each changed row in the stream. This setting can't be changed, after the stream has been created. </p> <p>The options are:</p> <ul> <li> <p> <code>NEW_AND_OLD_IMAGES</code> - both versions of the row, before and after the change. This is the default.</p> </li> <li> <p> <code>NEW_IMAGE</code> - the version of the row after the change.</p> </li> <li> <p> <code>OLD_IMAGE</code> - the version of the row before the change.</p> </li> <li> <p> <code>KEYS_ONLY</code> - the partition and clustering keys of the row that was changed.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The settings of the CDC stream of the table. For more information about CDC streams, see <a href=\"https://docs.aws.amazon.com/keyspaces/latest/devguide/cdc.html\">Working with change data capture (CDC) streams in Amazon Keyspaces</a> in the <i>Amazon Keyspaces Developer Guide</i>.</p>"
+    },
+    "CdcStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "ENABLING",
+        "DISABLED",
+        "DISABLING"
+      ]
+    },
     "ClientSideTimestamps":{
       "type":"structure",
       "required":["status"],
@@ -557,7 +611,7 @@
         },
         "replicationSpecification":{
           "shape":"ReplicationSpecification",
-          "documentation":"<p> The replication specification of the keyspace includes:</p> <ul> <li> <p> <code>replicationStrategy</code> - the required value is <code>SINGLE_REGION</code> or <code>MULTI_REGION</code>.</p> </li> <li> <p> <code>regionList</code> - if the <code>replicationStrategy</code> is <code>MULTI_REGION</code>, the <code>regionList</code> requires the current Region and at least one additional Amazon Web Services Region where the keyspace is going to be replicated in. The maximum number of supported replication Regions including the current Region is six.</p> </li> </ul>"
+          "documentation":"<p> The replication specification of the keyspace includes:</p> <ul> <li> <p> <code>replicationStrategy</code> - the required value is <code>SINGLE_REGION</code> or <code>MULTI_REGION</code>.</p> </li> <li> <p> <code>regionList</code> - if the <code>replicationStrategy</code> is <code>MULTI_REGION</code>, the <code>regionList</code> requires the current Region and at least one additional Amazon Web Services Region where the keyspace is going to be replicated in.</p> </li> </ul>"
         }
       }
     },
@@ -630,6 +684,10 @@
         "replicaSpecifications":{
           "shape":"ReplicaSpecificationList",
           "documentation":"<p>The optional Amazon Web Services Region specific settings of a multi-Region table. These settings overwrite the general settings of the table for the specified Region. </p> <p>For a multi-Region table in provisioned capacity mode, you can configure the table's read capacity differently for each Region's replica. The write capacity, however, remains synchronized between all replicas to ensure that there's enough capacity to replicate writes across all Regions. To define the read capacity for a table replica in a specific Region, you can do so by configuring the following parameters.</p> <ul> <li> <p> <code>region</code>: The Region where these settings are applied. (Required)</p> </li> <li> <p> <code>readCapacityUnits</code>: The provisioned read capacity units. (Optional)</p> </li> <li> <p> <code>readCapacityAutoScaling</code>: The read capacity auto scaling settings for the table. (Optional) </p> </li> </ul>"
+        },
+        "cdcSpecification":{
+          "shape":"CdcSpecification",
+          "documentation":"<p>The CDC stream settings of the table.</p>"
         }
       }
     },
@@ -979,6 +1037,14 @@
         "replicaSpecifications":{
           "shape":"ReplicaSpecificationSummaryList",
           "documentation":"<p>Returns the Amazon Web Services Region specific settings of all Regions a multi-Region table is replicated in.</p>"
+        },
+        "latestStreamArn":{
+          "shape":"StreamArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the stream.</p>"
+        },
+        "cdcSpecification":{
+          "shape":"CdcSpecificationSummary",
+          "documentation":"<p>The CDC stream settings of the table.</p>"
         }
       }
     },
@@ -1288,7 +1354,6 @@
     "RegionList":{
       "type":"list",
       "member":{"shape":"region"},
-      "max":6,
       "min":2
     },
     "ReplicaAutoScalingSpecification":{
@@ -1379,7 +1444,6 @@
     "ReplicationGroupStatusList":{
       "type":"list",
       "member":{"shape":"ReplicationGroupStatus"},
-      "max":6,
       "min":2
     },
     "ReplicationSpecification":{
@@ -1392,10 +1456,10 @@
         },
         "regionList":{
           "shape":"RegionList",
-          "documentation":"<p> The <code>regionList</code> can contain up to six Amazon Web Services Regions where the keyspace is replicated in. </p>"
+          "documentation":"<p> The <code>regionList</code> contains the Amazon Web Services Regions where the keyspace is replicated in. </p>"
         }
       },
-      "documentation":"<p> The replication specification of the keyspace includes:</p> <ul> <li> <p> <code>regionList</code> - up to six Amazon Web Services Regions where the keyspace is replicated in.</p> </li> <li> <p> <code>replicationStrategy</code> - the required value is <code>SINGLE_REGION</code> or <code>MULTI_REGION</code>.</p> </li> </ul>"
+      "documentation":"<p> The replication specification of the keyspace includes:</p> <ul> <li> <p> <code>regionList</code> - the Amazon Web Services Regions where the keyspace is replicated in.</p> </li> <li> <p> <code>replicationStrategy</code> - the required value is <code>SINGLE_REGION</code> or <code>MULTI_REGION</code>.</p> </li> </ul>"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -1536,6 +1600,12 @@
       "type":"list",
       "member":{"shape":"StaticColumn"}
     },
+    "StreamArn":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"arn:(aws[a-zA-Z0-9-]*):cassandra:.+.*"
+    },
     "String":{"type":"string"},
     "TableName":{
       "type":"string",
@@ -1809,6 +1879,10 @@
         "replicaSpecifications":{
           "shape":"ReplicaSpecificationList",
           "documentation":"<p>The Region specific settings of a multi-Regional table.</p>"
+        },
+        "cdcSpecification":{
+          "shape":"CdcSpecification",
+          "documentation":"<p>The CDC stream settings of the table.</p>"
         }
       }
     },
@@ -1833,6 +1907,15 @@
       "documentation":"<p>The operation failed due to an invalid or malformed request.</p>",
       "exception":true
     },
+    "ViewType":{
+      "type":"string",
+      "enum":[
+        "NEW_IMAGE",
+        "OLD_IMAGE",
+        "KEYS_ONLY",
+        "NEW_AND_OLD_IMAGES"
+      ]
+    },
     "kmsKeyARN":{
       "type":"string",
       "max":5096,
diff -pruN 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://cassandra-streams-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://cassandra-streams.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.json 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,16 @@
+{
+  "pagination": {
+    "GetStream": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "shards"
+    },
+    "ListStreams": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "streams"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+        "GetStream": {
+            "non_aggregate_keys": [
+                "streamStatus",
+                "streamLabel",
+                "creationRequestDateTime",
+                "keyspaceName",
+                "tableName", 
+                "streamArn",
+                "streamViewType"
+            ]
+        }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/service-2.json 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/service-2.json
--- 2.23.6-1/awscli/botocore/data/keyspacesstreams/2024-09-09/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/keyspacesstreams/2024-09-09/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,755 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2024-09-09",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"cassandra-streams",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceFullName":"Amazon Keyspaces Streams",
+    "serviceId":"KeyspacesStreams",
+    "signatureVersion":"v4",
+    "signingName":"cassandra",
+    "targetPrefix":"KeyspacesStreams",
+    "uid":"keyspacesstreams-2024-09-09"
+  },
+  "operations":{
+    "GetRecords":{
+      "name":"GetRecords",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetRecordsInput"},
+      "output":{"shape":"GetRecordsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves data records from a specified shard in an Amazon Keyspaces data stream. This operation returns a collection of data records from the shard, including the primary key columns and information about modifications made to the captured table data. Each record represents a single data modification in the Amazon Keyspaces table and includes metadata about when the change occurred.</p>"
+    },
+    "GetShardIterator":{
+      "name":"GetShardIterator",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetShardIteratorInput"},
+      "output":{"shape":"GetShardIteratorOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a shard iterator that serves as a bookmark for reading data from a specific position in an Amazon Keyspaces data stream's shard. The shard iterator specifies the shard position from which to start reading data records sequentially. You can specify whether to begin reading at the latest record, the oldest record, or at a particular sequence number within the shard.</p>"
+    },
+    "GetStream":{
+      "name":"GetStream",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetStreamInput"},
+      "output":{"shape":"GetStreamOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns detailed information about a specific data capture stream for an Amazon Keyspaces table. The information includes the stream's Amazon Resource Name (ARN), creation time, current status, retention period, shard composition, and associated table details. This operation helps you monitor and manage the configuration of your Amazon Keyspaces data streams.</p>"
+    },
+    "ListStreams":{
+      "name":"ListStreams",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListStreamsInput"},
+      "output":{"shape":"ListStreamsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a list of all data capture streams associated with your Amazon Keyspaces account or for a specific keyspace or table. The response includes information such as stream ARNs, table associations, creation timestamps, and current status. This operation helps you discover and manage all active data streams in your Amazon Keyspaces environment.</p>"
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>You don't have sufficient permissions to perform this action.</p>"
+        }
+      },
+      "documentation":"<p>You don't have sufficient access permissions to perform this operation. </p> <p>This exception occurs when your IAM user or role lacks the required permissions to access the Amazon Keyspaces resource or perform the requested action. Check your IAM policies and ensure they grant the necessary permissions.</p>",
+      "exception":true
+    },
+    "Blob":{"type":"blob"},
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "Date":{"type":"timestamp"},
+    "GetRecordsInput":{
+      "type":"structure",
+      "required":["shardIterator"],
+      "members":{
+        "shardIterator":{
+          "shape":"ShardIterator",
+          "documentation":"<p> The unique identifier of the shard iterator. A shard iterator specifies the position in the shard from which you want to start reading data records sequentially. You obtain this value by calling the <code>GetShardIterator</code> operation. Each shard iterator is valid for 15 minutes after creation. </p>"
+        },
+        "maxResults":{
+          "shape":"GetRecordsInputMaxResultsInteger",
+          "documentation":"<p> The maximum number of records to return in a single <code>GetRecords</code> request. Default value is 1000. You can specify a limit between 1 and 1000, but the actual number returned might be less than the specified maximum if the size of the data for the returned records exceeds the internal size limit. </p>"
+        }
+      }
+    },
+    "GetRecordsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "GetRecordsOutput":{
+      "type":"structure",
+      "members":{
+        "changeRecords":{
+          "shape":"RecordList",
+          "documentation":"<p> An array of change data records retrieved from the specified shard. Each record represents a single data modification (insert, update, or delete) to a row in the Amazon Keyspaces table. Records include the primary key columns and information about what data was modified. </p>"
+        },
+        "nextShardIterator":{
+          "shape":"ShardIterator",
+          "documentation":"<p> The next position in the shard from which to start sequentially reading data records. If null, the shard has been closed and the requested iterator doesn't return any more data. </p>"
+        }
+      }
+    },
+    "GetShardIteratorInput":{
+      "type":"structure",
+      "required":[
+        "streamArn",
+        "shardId",
+        "shardIteratorType"
+      ],
+      "members":{
+        "streamArn":{
+          "shape":"StreamArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the stream for which to get the shard iterator. The ARN uniquely identifies the stream within Amazon Keyspaces. </p>"
+        },
+        "shardId":{
+          "shape":"ShardId",
+          "documentation":"<p> The identifier of the shard within the stream. The shard ID uniquely identifies a subset of the stream's data records that you want to access. </p>"
+        },
+        "shardIteratorType":{
+          "shape":"ShardIteratorType",
+          "documentation":"<p> Determines how the shard iterator is positioned. Must be one of the following:</p> <ul> <li> <p> <code>TRIM_HORIZON</code> - Start reading at the last untrimmed record in the shard, which is the oldest data record in the shard.</p> </li> <li> <p> <code>AT_SEQUENCE_NUMBER</code> - Start reading exactly from the specified sequence number.</p> </li> <li> <p> <code>AFTER_SEQUENCE_NUMBER</code> - Start reading right after the specified sequence number.</p> </li> <li> <p> <code>LATEST</code> - Start reading just after the most recent record in the shard, so that you always read the most recent data.</p> </li> </ul>"
+        },
+        "sequenceNumber":{
+          "shape":"SequenceNumber",
+          "documentation":"<p> The sequence number of the data record in the shard from which to start reading. Required if <code>ShardIteratorType</code> is <code>AT_SEQUENCE_NUMBER</code> or <code>AFTER_SEQUENCE_NUMBER</code>. This parameter is ignored for other iterator types. </p>"
+        }
+      }
+    },
+    "GetShardIteratorOutput":{
+      "type":"structure",
+      "members":{
+        "shardIterator":{
+          "shape":"ShardIterator",
+          "documentation":"<p> The unique identifier for the shard iterator. This value is used in the <code>GetRecords</code> operation to retrieve data records from the specified shard. Each shard iterator expires 15 minutes after it is returned to the requester. </p>"
+        }
+      }
+    },
+    "GetStreamInput":{
+      "type":"structure",
+      "required":["streamArn"],
+      "members":{
+        "streamArn":{
+          "shape":"StreamArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the stream for which detailed information is requested. This uniquely identifies the specific stream you want to get information about. </p>"
+        },
+        "maxResults":{
+          "shape":"GetStreamInputMaxResultsInteger",
+          "documentation":"<p> The maximum number of shard objects to return in a single <code>GetStream</code> request. Default value is 100. The minimum value is 1 and the maximum value is 100. </p>"
+        },
+        "shardFilter":{
+          "shape":"ShardFilter",
+          "documentation":"<p> Optional filter criteria to apply when retrieving shards. You can filter shards based on their state or other attributes to narrow down the results returned by the <code>GetStream</code> operation. </p>"
+        },
+        "nextToken":{
+          "shape":"ShardIdToken",
+          "documentation":"<p> An optional pagination token provided by a previous <code>GetStream</code> operation. If this parameter is specified, the response includes only records beyond the token, up to the value specified by <code>maxResults</code>. </p>"
+        }
+      }
+    },
+    "GetStreamInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "GetStreamOutput":{
+      "type":"structure",
+      "required":[
+        "streamArn",
+        "streamLabel",
+        "streamStatus",
+        "streamViewType",
+        "creationRequestDateTime",
+        "keyspaceName",
+        "tableName"
+      ],
+      "members":{
+        "streamArn":{
+          "shape":"StreamArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) that uniquely identifies the stream within Amazon Keyspaces. This ARN can be used in other API operations to reference this specific stream. </p>"
+        },
+        "streamLabel":{
+          "shape":"String",
+          "documentation":"<p> A timestamp that serves as a unique identifier for this stream, used for debugging and monitoring purposes. The stream label represents the point in time when the stream was created. </p>"
+        },
+        "streamStatus":{
+          "shape":"StreamStatus",
+          "documentation":"<p> The current status of the stream. Values can be <code>ENABLING</code>, <code>ENABLED</code>, <code>DISABLING</code>, or <code>DISABLED</code>. Operations on the stream depend on its current status. </p>"
+        },
+        "streamViewType":{
+          "shape":"StreamViewType",
+          "documentation":"<p> The format of the data records in this stream. Currently, this can be one of the following options:</p> <ul> <li> <p> <code>NEW_AND_OLD_IMAGES</code> - both versions of the row, before and after the change. This is the default.</p> </li> <li> <p> <code>NEW_IMAGE</code> - the version of the row after the change.</p> </li> <li> <p> <code>OLD_IMAGE</code> - the version of the row before the change.</p> </li> <li> <p> <code>KEYS_ONLY</code> - the partition and clustering keys of the row that was changed.</p> </li> </ul>"
+        },
+        "creationRequestDateTime":{
+          "shape":"Date",
+          "documentation":"<p> The date and time when the request to create this stream was issued. The value is represented in ISO 8601 format. </p>"
+        },
+        "keyspaceName":{
+          "shape":"KeyspaceName",
+          "documentation":"<p> The name of the keyspace containing the table associated with this stream. The keyspace name is part of the table's hierarchical identifier in Amazon Keyspaces. </p>"
+        },
+        "tableName":{
+          "shape":"TableName",
+          "documentation":"<p> The name of the table associated with this stream. The stream captures changes to rows in this Amazon Keyspaces table. </p>"
+        },
+        "shards":{
+          "shape":"ShardDescriptionList",
+          "documentation":"<p> An array of shard objects associated with this stream. Each shard contains a subset of the stream's data records and has its own unique identifier. The collection of shards represents the complete stream data. </p>"
+        },
+        "nextToken":{
+          "shape":"ShardIdToken",
+          "documentation":"<p> A pagination token that can be used in a subsequent <code>GetStream</code> request. This token is returned if the response contains more shards than can be returned in a single response. </p>"
+        }
+      }
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The service encountered an internal error. Try your request again.</p>"
+        }
+      },
+      "documentation":"<p>The Amazon Keyspaces service encountered an unexpected error while processing the request. </p> <p>This internal server error is not related to your request parameters. Retry your request after a brief delay. If the issue persists, contact Amazon Web Services Support with details of your request to help identify and resolve the problem.</p>",
+      "exception":true,
+      "fault":true
+    },
+    "KeyspaceName":{
+      "type":"string",
+      "max":48,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_]{0,47}"
+    },
+    "KeyspacesCell":{
+      "type":"structure",
+      "members":{
+        "value":{
+          "shape":"KeyspacesCellValue",
+          "documentation":"<p>The value stored in this cell, which can be of various data types supported by Amazon Keyspaces.</p>"
+        },
+        "metadata":{
+          "shape":"KeyspacesMetadata",
+          "documentation":"<p>Metadata associated with this cell, such as time-to-live (TTL) expiration time and write timestamp.</p>"
+        }
+      },
+      "documentation":"<p>Represents a cell in an Amazon Keyspaces table, containing both the value and metadata about the cell.</p>"
+    },
+    "KeyspacesCellList":{
+      "type":"list",
+      "member":{"shape":"KeyspacesCell"}
+    },
+    "KeyspacesCellMap":{
+      "type":"list",
+      "member":{"shape":"KeyspacesCellMapDefinition"}
+    },
+    "KeyspacesCellMapDefinition":{
+      "type":"structure",
+      "members":{
+        "key":{
+          "shape":"KeyspacesCellValue",
+          "documentation":"<p>The key of this map entry in the Amazon Keyspaces cell.</p>"
+        },
+        "value":{
+          "shape":"KeyspacesCellValue",
+          "documentation":"<p>The value associated with the key in this map entry.</p>"
+        },
+        "metadata":{
+          "shape":"KeyspacesMetadata",
+          "documentation":"<p>Metadata for this specific key-value pair within the map, such as timestamps and TTL information.</p>"
+        }
+      },
+      "documentation":"<p>Represents a key-value pair within a map data type in Amazon Keyspaces, including the associated metadata.</p>"
+    },
+    "KeyspacesCellValue":{
+      "type":"structure",
+      "members":{
+        "asciiT":{
+          "shape":"String",
+          "documentation":"<p>A value of ASCII text type, containing US-ASCII characters. </p>"
+        },
+        "bigintT":{
+          "shape":"String",
+          "documentation":"<p>A 64-bit signed integer value. </p>"
+        },
+        "blobT":{
+          "shape":"Blob",
+          "documentation":"<p>A binary large object (BLOB) value stored as a Base64-encoded string. </p>"
+        },
+        "boolT":{
+          "shape":"Boolean",
+          "documentation":"<p>A Boolean value, either <code>true</code> or <code>false</code>. </p>"
+        },
+        "counterT":{
+          "shape":"String",
+          "documentation":"<p>A distributed counter value that can be incremented and decremented. </p>"
+        },
+        "dateT":{
+          "shape":"String",
+          "documentation":"<p>A date value without a time component, represented as days since epoch (January 1, 1970). </p>"
+        },
+        "decimalT":{
+          "shape":"String",
+          "documentation":"<p>A variable-precision decimal number value. </p>"
+        },
+        "doubleT":{
+          "shape":"String",
+          "documentation":"<p>A 64-bit double-precision floating point value. </p>"
+        },
+        "floatT":{
+          "shape":"String",
+          "documentation":"<p>A 32-bit single-precision floating point value. </p>"
+        },
+        "inetT":{
+          "shape":"String",
+          "documentation":"<p>An IP address value, either IPv4 or IPv6 format. </p>"
+        },
+        "intT":{
+          "shape":"String",
+          "documentation":"<p>A 32-bit signed integer value. </p>"
+        },
+        "listT":{
+          "shape":"KeyspacesCellList",
+          "documentation":"<p>An ordered collection of elements that can contain duplicate values. </p>"
+        },
+        "mapT":{
+          "shape":"KeyspacesCellMap",
+          "documentation":"<p>A collection of key-value pairs where each key is unique. </p>"
+        },
+        "setT":{
+          "shape":"KeyspacesCellList",
+          "documentation":"<p>An unordered collection of unique elements. </p>"
+        },
+        "smallintT":{
+          "shape":"String",
+          "documentation":"<p>A 16-bit signed integer value. </p>"
+        },
+        "textT":{
+          "shape":"String",
+          "documentation":"<p>A UTF-8 encoded string value. </p>"
+        },
+        "timeT":{
+          "shape":"String",
+          "documentation":"<p>A time value without a date component, with nanosecond precision. </p>"
+        },
+        "timestampT":{
+          "shape":"String",
+          "documentation":"<p>A timestamp value representing date and time with millisecond precision. </p>"
+        },
+        "timeuuidT":{
+          "shape":"String",
+          "documentation":"<p>A universally unique identifier (UUID) that includes a timestamp component, ensuring both uniqueness and time ordering. </p>"
+        },
+        "tinyintT":{
+          "shape":"String",
+          "documentation":"<p>An 8-bit signed integer value. </p>"
+        },
+        "tupleT":{
+          "shape":"KeyspacesCellList",
+          "documentation":"<p>A fixed-length ordered list of elements, where each element can be of a different data type. </p>"
+        },
+        "uuidT":{
+          "shape":"String",
+          "documentation":"<p>A universally unique identifier (UUID) value. </p>"
+        },
+        "varcharT":{
+          "shape":"String",
+          "documentation":"<p>A UTF-8 encoded string value, functionally equivalent to text type. </p>"
+        },
+        "varintT":{
+          "shape":"String",
+          "documentation":"<p>A variable precision integer value with arbitrary length. </p>"
+        },
+        "udtT":{
+          "shape":"KeyspacesUdtMap",
+          "documentation":"<p>A user-defined type (UDT) value consisting of named fields, each with its own data type. </p>"
+        }
+      },
+      "documentation":"<p>Represents the value of a cell in an Amazon Keyspaces table, supporting various data types with type-specific fields.</p>",
+      "union":true
+    },
+    "KeyspacesCells":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"KeyspacesCell"}
+    },
+    "KeyspacesKeysMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"KeyspacesCellValue"}
+    },
+    "KeyspacesMetadata":{
+      "type":"structure",
+      "members":{
+        "expirationTime":{
+          "shape":"String",
+          "documentation":"<p>The time at which the associated data will expire, based on the time-to-live (TTL) setting.</p>"
+        },
+        "writeTime":{
+          "shape":"String",
+          "documentation":"<p>The timestamp at which the associated data was written to the database.</p>"
+        }
+      },
+      "documentation":"<p>Contains metadata information associated with Amazon Keyspaces cells and rows.</p>"
+    },
+    "KeyspacesRow":{
+      "type":"structure",
+      "members":{
+        "valueCells":{
+          "shape":"KeyspacesCells",
+          "documentation":"<p>A map of regular (non-static) column cells in the row, where keys are column names and values are the corresponding cells.</p>"
+        },
+        "staticCells":{
+          "shape":"KeyspacesCells",
+          "documentation":"<p>A map of static column cells shared by all rows with the same partition key, where keys are column names and values are the corresponding cells.</p>"
+        },
+        "rowMetadata":{
+          "shape":"KeyspacesMetadata",
+          "documentation":"<p>Metadata that applies to the entire row, such as timestamps and TTL information.</p>"
+        }
+      },
+      "documentation":"<p>Represents a row in an Amazon Keyspaces table, containing regular column values, static column values, and row-level metadata.</p>"
+    },
+    "KeyspacesUdtMap":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"KeyspacesCell"}
+    },
+    "ListStreamsInput":{
+      "type":"structure",
+      "members":{
+        "keyspaceName":{
+          "shape":"KeyspaceName",
+          "documentation":"<p> The name of the keyspace for which to list streams. If specified, only streams associated with tables in this keyspace are returned. If omitted, streams from all keyspaces are included in the results. </p>"
+        },
+        "tableName":{
+          "shape":"TableName",
+          "documentation":"<p> The name of the table for which to list streams. Must be used together with <code>keyspaceName</code>. If specified, only streams associated with this specific table are returned. </p>"
+        },
+        "maxResults":{
+          "shape":"ListStreamsInputMaxResultsInteger",
+          "documentation":"<p> The maximum number of streams to return in a single <code>ListStreams</code> request. Default value is 100. The minimum value is 1 and the maximum value is 100. </p>"
+        },
+        "nextToken":{
+          "shape":"StreamArnToken",
+          "documentation":"<p> An optional pagination token provided by a previous <code>ListStreams</code> operation. If this parameter is specified, the response includes only records beyond the token, up to the value specified by <code>maxResults</code>. </p>"
+        }
+      }
+    },
+    "ListStreamsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListStreamsOutput":{
+      "type":"structure",
+      "members":{
+        "streams":{
+          "shape":"StreamList",
+          "documentation":"<p> An array of stream objects, each containing summary information about a stream including its ARN, status, and associated table information. This list includes all streams that match the request criteria. </p>"
+        },
+        "nextToken":{
+          "shape":"StreamArnToken",
+          "documentation":"<p> A pagination token that can be used in a subsequent <code>ListStreams</code> request. This token is returned if the response contains more streams than can be returned in a single response based on the <code>MaxResults</code> parameter. </p>"
+        }
+      }
+    },
+    "OriginType":{
+      "type":"string",
+      "enum":[
+        "USER",
+        "REPLICATION",
+        "TTL"
+      ]
+    },
+    "Record":{
+      "type":"structure",
+      "members":{
+        "eventVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the record format, used to track the evolution of the record structure over time.</p>"
+        },
+        "createdAt":{
+          "shape":"Date",
+          "documentation":"<p>The timestamp indicating when this change data capture record was created.</p>"
+        },
+        "origin":{
+          "shape":"OriginType",
+          "documentation":"<p>The origin or source of this change data capture record.</p>"
+        },
+        "partitionKeys":{
+          "shape":"KeyspacesKeysMap",
+          "documentation":"<p>The partition key columns and their values for the affected row.</p>"
+        },
+        "clusteringKeys":{
+          "shape":"KeyspacesKeysMap",
+          "documentation":"<p>The clustering key columns and their values for the affected row, which determine the order of rows within a partition.</p>"
+        },
+        "newImage":{
+          "shape":"KeyspacesRow",
+          "documentation":"<p>The state of the row after the change operation that generated this record.</p>"
+        },
+        "oldImage":{
+          "shape":"KeyspacesRow",
+          "documentation":"<p>The state of the row before the change operation that generated this record.</p>"
+        },
+        "sequenceNumber":{
+          "shape":"SequenceNumber",
+          "documentation":"<p>A unique identifier assigned to this record within the shard, used for ordering and tracking purposes.</p>"
+        }
+      },
+      "documentation":"<p>Represents a change data capture record for a row in an Amazon Keyspaces table, containing both the new and old states of the row.</p>"
+    },
+    "RecordList":{
+      "type":"list",
+      "member":{"shape":"Record"}
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The requested resource wasn't found. Verify that the resource exists and try again.</p>"
+        }
+      },
+      "documentation":"<p>The requested resource doesn't exist or could not be found. </p> <p>This exception occurs when you attempt to access a keyspace, table, stream, or other Amazon Keyspaces resource that doesn't exist or that has been deleted. Verify that the resource identifier is correct and that the resource exists in your account.</p>",
+      "exception":true
+    },
+    "SequenceNumber":{
+      "type":"string",
+      "max":48,
+      "min":21
+    },
+    "SequenceNumberRange":{
+      "type":"structure",
+      "members":{
+        "startingSequenceNumber":{
+          "shape":"SequenceNumber",
+          "documentation":"<p>The starting sequence number of the range.</p>"
+        },
+        "endingSequenceNumber":{
+          "shape":"SequenceNumber",
+          "documentation":"<p>The ending sequence number of the range, which may be null for open-ended ranges.</p>"
+        }
+      },
+      "documentation":"<p>Defines a range of sequence numbers within a change data capture stream's shard for Amazon Keyspaces.</p>"
+    },
+    "Shard":{
+      "type":"structure",
+      "members":{
+        "shardId":{
+          "shape":"ShardId",
+          "documentation":"<p>A unique identifier for this shard within the stream.</p>"
+        },
+        "sequenceNumberRange":{
+          "shape":"SequenceNumberRange",
+          "documentation":"<p>The range of sequence numbers contained within this shard.</p>"
+        },
+        "parentShardIds":{
+          "shape":"ShardIdList",
+          "documentation":"<p>The identifiers of parent shards that this shard evolved from, if this shard was created through resharding.</p>"
+        }
+      },
+      "documentation":"<p>Represents a uniquely identified group of change records within a change data capture stream for Amazon Keyspaces.</p>"
+    },
+    "ShardDescriptionList":{
+      "type":"list",
+      "member":{"shape":"Shard"}
+    },
+    "ShardFilter":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"ShardFilterType",
+          "documentation":"<p>The type of shard filter to use, which determines how the shardId parameter is interpreted.</p>"
+        },
+        "shardId":{
+          "shape":"ShardId",
+          "documentation":"<p>The identifier of a specific shard used to filter results based on the specified filter type.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to limit the shards returned by a <code>GetStream</code> operation.</p>"
+    },
+    "ShardFilterType":{
+      "type":"string",
+      "enum":["CHILD_SHARDS"]
+    },
+    "ShardId":{
+      "type":"string",
+      "max":65,
+      "min":28
+    },
+    "ShardIdList":{
+      "type":"list",
+      "member":{"shape":"ShardId"}
+    },
+    "ShardIdToken":{
+      "type":"string",
+      "max":3000,
+      "min":80
+    },
+    "ShardIterator":{
+      "type":"string",
+      "max":4096,
+      "min":1
+    },
+    "ShardIteratorType":{
+      "type":"string",
+      "enum":[
+        "TRIM_HORIZON",
+        "LATEST",
+        "AT_SEQUENCE_NUMBER",
+        "AFTER_SEQUENCE_NUMBER"
+      ]
+    },
+    "Stream":{
+      "type":"structure",
+      "required":[
+        "streamArn",
+        "keyspaceName",
+        "tableName",
+        "streamLabel"
+      ],
+      "members":{
+        "streamArn":{
+          "shape":"StreamArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies this stream.</p>"
+        },
+        "keyspaceName":{
+          "shape":"KeyspaceName",
+          "documentation":"<p>The name of the keyspace containing the table associated with this stream.</p>"
+        },
+        "tableName":{
+          "shape":"TableName",
+          "documentation":"<p>The name of the table associated with this stream.</p>"
+        },
+        "streamLabel":{
+          "shape":"String",
+          "documentation":"<p>A unique identifier for this stream that can be used in stream operations.</p>"
+        }
+      },
+      "documentation":"<p>Represents a change data capture stream for an Amazon Keyspaces table, which enables tracking and processing of data changes.</p>"
+    },
+    "StreamArn":{
+      "type":"string",
+      "max":1024,
+      "min":37
+    },
+    "StreamArnToken":{
+      "type":"string",
+      "max":3000,
+      "min":80
+    },
+    "StreamList":{
+      "type":"list",
+      "member":{"shape":"Stream"}
+    },
+    "StreamStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLING",
+        "ENABLED",
+        "DISABLING",
+        "DISABLED"
+      ]
+    },
+    "StreamViewType":{
+      "type":"string",
+      "enum":[
+        "NEW_IMAGE",
+        "OLD_IMAGE",
+        "NEW_AND_OLD_IMAGES",
+        "KEYS_ONLY"
+      ]
+    },
+    "String":{"type":"string"},
+    "TableName":{
+      "type":"string",
+      "max":48,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_]{0,47}"
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The request was denied due to request throttling. Reduce the frequency of requests and try again.</p>"
+        }
+      },
+      "documentation":"<p>The request rate is too high and exceeds the service's throughput limits. </p> <p>This exception occurs when you send too many requests in a short period of time. Implement exponential backoff in your retry strategy to handle this exception. Reducing your request frequency or distributing requests more evenly can help avoid throughput exceptions.</p>",
+      "exception":true
+    },
+    "ValidationException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The input fails to satisfy the constraints specified by the service. Check the error details and modify your request.</p>"
+        },
+        "errorCode":{
+          "shape":"ValidationExceptionType",
+          "documentation":"<p>An error occurred validating your request. See the error message for details.</p>"
+        }
+      },
+      "documentation":"<p>The request validation failed because one or more input parameters failed validation. </p> <p>This exception occurs when there are syntax errors in the request, field constraints are violated, or required parameters are missing. To help you fix the issue, the exception message provides details about which parameter failed and why.</p>",
+      "exception":true
+    },
+    "ValidationExceptionType":{
+      "type":"string",
+      "enum":[
+        "InvalidFormat",
+        "TrimmedDataAccess",
+        "ExpiredIterator",
+        "ExpiredNextToken"
+      ]
+    }
+  },
+  "documentation":"<p>Amazon Keyspaces (for Apache Cassandra) change data capture (CDC) records change events for Amazon Keyspaces tables. The change events captured in a stream are time-ordered and de-duplicated write operations. Using stream data you can build event driven applications that incorporate near-real time change events from Amazon Keyspaces tables. </p> <p>Amazon Keyspaces CDC is serverless and scales the infrastructure for change events automatically based on the volume of changes on your table. </p> <p> This API reference describes the Amazon Keyspaces CDC stream API in detail. </p> <p>For more information about Amazon Keyspaces CDC, see <a href=\"https://docs.aws.amazon.com/keyspaces/latest/devguide/cdc.html\">Working with change data capture (CDC) streams in Amazon Keyspaces</a> in the <i>Amazon Keyspaces Developer Guide</i>.</p> <p>To learn how Amazon Keyspaces CDC API actions are recorded with CloudTrail, see <a href=\"https://docs.aws.amazon.com/keyspaces/latest/devguide/logging-using-cloudtrail.html#service-name-info-in-cloudtrail\">Amazon Keyspaces information in CloudTrail</a> in the <i>Amazon Keyspaces Developer Guide</i>.</p> <p>To see the metrics Amazon Keyspaces CDC sends to Amazon CloudWatch, see <a href=\"https://docs.aws.amazon.com/keyspaces/latest/devguide/metrics-dimensions.html#keyspaces-cdc-metrics\">Amazon Keyspaces change data capture (CDC) CloudWatch metrics</a> in the <i>Amazon Keyspaces Developer Guide</i>.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis/2013-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,47 +5,47 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "StreamARN": {
             "required": false,
             "documentation": "The ARN of the Kinesis stream",
-            "type": "String"
+            "type": "string"
         },
         "OperationType": {
             "required": false,
             "documentation": "Internal parameter to distinguish between Control/Data plane API and accordingly generate control/data plane endpoint",
-            "type": "String"
+            "type": "string"
         },
         "ConsumerARN": {
             "required": false,
             "documentation": "The ARN of the Kinesis consumer",
-            "type": "String"
+            "type": "string"
         },
         "ResourceARN": {
             "required": false,
             "documentation": "The ARN of the Kinesis resource",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis/2013-12-02/service-2.json 2.31.35-1/awscli/botocore/data/kinesis/2013-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesis/2013-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis/2013-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -45,9 +45,10 @@
       "errors":[
         {"shape":"ResourceInUseException"},
         {"shape":"LimitExceededException"},
-        {"shape":"InvalidArgumentException"}
+        {"shape":"InvalidArgumentException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Creates a Kinesis data stream. A stream captures and transports data records that are continuously emitted from different data sources or <i>producers</i>. Scale-out within a stream is explicitly supported by means of shards, which are uniquely identified groups of data records in a stream.</p> <p>You can create your data stream using either on-demand or provisioned capacity mode. Data streams with an on-demand mode require no capacity planning and automatically scale to handle gigabytes of write and read throughput per minute. With the on-demand mode, Kinesis Data Streams automatically manages the shards in order to provide the necessary throughput. For the data streams with a provisioned mode, you must specify the number of shards for the data stream. Each shard can support reads up to five transactions per second, up to a maximum data read total of 2 MiB per second. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 1 MiB per second. If the amount of data input increases or decreases, you can add or remove shards.</p> <p>The stream name identifies the stream. The name is scoped to the Amazon Web Services account used by the application. It is also scoped by Amazon Web Services Region. That is, two streams in two different accounts can have the same name, and two streams in the same account, but in two different Regions, can have the same name.</p> <p> <code>CreateStream</code> is an asynchronous operation. Upon receiving a <code>CreateStream</code> request, Kinesis Data Streams immediately returns and sets the stream status to <code>CREATING</code>. After the stream is created, Kinesis Data Streams sets the stream status to <code>ACTIVE</code>. You should perform read and write operations only on an <code>ACTIVE</code> stream. </p> <p>You receive a <code>LimitExceededException</code> when making a <code>CreateStream</code> request when you try to do one of the following:</p> <ul> <li> <p>Have more than five streams in the <code>CREATING</code> state at any point in time.</p> </li> <li> <p>Create more shards than are authorized for your account.</p> </li> </ul> <p>For the default shard limit for an Amazon Web Services account, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html\">Amazon Kinesis Data Streams Limits</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>. To increase this limit, <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html\">contact Amazon Web Services Support</a>.</p> <p>You can use <a>DescribeStreamSummary</a> to check the stream status, which is returned in <code>StreamStatus</code>.</p> <p> <a>CreateStream</a> has a limit of five transactions per second per account.</p> <p>You can add tags to the stream when making a <code>CreateStream</code> request by setting the <code>Tags</code> parameter. If you pass <code>Tags</code> parameter, in addition to having <code>kinesis:createStream</code> permission, you must also have <code>kinesis:addTagsToStream</code> permission for the stream that will be created. Tags will take effect from the <code>CREATING</code> status of the stream. </p>"
+      "documentation":"<p>Creates a Kinesis data stream. A stream captures and transports data records that are continuously emitted from different data sources or <i>producers</i>. Scale-out within a stream is explicitly supported by means of shards, which are uniquely identified groups of data records in a stream.</p> <p>You can create your data stream using either on-demand or provisioned capacity mode. Data streams with an on-demand mode require no capacity planning and automatically scale to handle gigabytes of write and read throughput per minute. With the on-demand mode, Kinesis Data Streams automatically manages the shards in order to provide the necessary throughput.</p> <p>If you'd still like to proactively scale your on-demand data stream’s capacity, you can unlock the warm throughput feature for on-demand data streams by enabling <code>MinimumThroughputBillingCommitment</code> for your account. Once your account has <code>MinimumThroughputBillingCommitment</code> enabled, you can specify the warm throughput in MiB per second that your stream can support in writes.</p> <p>For the data streams with a provisioned mode, you must specify the number of shards for the data stream. Each shard can support reads up to five transactions per second, up to a maximum data read total of 2 MiB per second. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 1 MiB per second. If the amount of data input increases or decreases, you can add or remove shards.</p> <p>The stream name identifies the stream. The name is scoped to the Amazon Web Services account used by the application. It is also scoped by Amazon Web Services Region. That is, two streams in two different accounts can have the same name, and two streams in the same account, but in two different Regions, can have the same name.</p> <p> <code>CreateStream</code> is an asynchronous operation. Upon receiving a <code>CreateStream</code> request, Kinesis Data Streams immediately returns and sets the stream status to <code>CREATING</code>. After the stream is created, Kinesis Data Streams sets the stream status to <code>ACTIVE</code>. You should perform read and write operations only on an <code>ACTIVE</code> stream. </p> <p>You receive a <code>LimitExceededException</code> when making a <code>CreateStream</code> request when you try to do one of the following:</p> <ul> <li> <p>Have more than five streams in the <code>CREATING</code> state at any point in time.</p> </li> <li> <p>Create more shards than are authorized for your account.</p> </li> </ul> <p>For the default shard or on-demand throughput limits for an Amazon Web Services account, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html\">Amazon Kinesis Data Streams Limits</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>. To increase this limit, <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html\">contact Amazon Web Services Support</a>.</p> <p>You can use <a>DescribeStreamSummary</a> to check the stream status, which is returned in <code>StreamStatus</code>.</p> <p> <a>CreateStream</a> has a limit of five transactions per second per account.</p> <p>You can add tags to the stream when making a <code>CreateStream</code> request by setting the <code>Tags</code> parameter. If you pass the <code>Tags</code> parameter, in addition to having the <code>kinesis:CreateStream</code> permission, you must also have the <code>kinesis:AddTagsToStream</code> permission for the stream that will be created. The <code>kinesis:TagResource</code> permission won’t work to tag streams on creation. Tags will take effect from the <code>CREATING</code> status of the stream, but you can't make any updates to the tags until the stream is in <code>ACTIVE</code> state.</p>"
     },
     "DecreaseStreamRetentionPeriod":{
       "name":"DecreaseStreamRetentionPeriod",
@@ -123,6 +124,19 @@
         "OperationType":{"value":"control"}
       }
     },
+    "DescribeAccountSettings":{
+      "name":"DescribeAccountSettings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeAccountSettingsInput"},
+      "output":{"shape":"DescribeAccountSettingsOutput"},
+      "errors":[
+        {"shape":"LimitExceededException"}
+      ],
+      "documentation":"<p>Describes the account-level settings for Amazon Kinesis Data Streams. This operation returns information about the minimum throughput billing commitments and other account-level configurations.</p> <p>This API has a call limit of 5 transactions per second (TPS) for each Amazon Web Services account. TPS over 5 will initiate the <code>LimitExceededException</code>.</p>"
+    },
     "DescribeLimits":{
       "name":"DescribeLimits",
       "http":{
@@ -251,7 +265,8 @@
         {"shape":"KMSNotFoundException"},
         {"shape":"KMSOptInRequired"},
         {"shape":"KMSThrottlingException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"}
       ],
       "documentation":"<p>Gets data records from a Kinesis data stream's shard.</p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>Specify a shard iterator using the <code>ShardIterator</code> parameter. The shard iterator specifies the position in the shard from which you want to start reading data records sequentially. If there are no records available in the portion of the shard that the iterator points to, <a>GetRecords</a> returns an empty list. It might take multiple calls to get to a portion of the shard that contains records.</p> <p>You can scale by provisioning multiple shards per stream while considering service limits (for more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html\">Amazon Kinesis Data Streams Limits</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>). Your application should have one thread per shard, each reading continuously from its stream. To read from a stream continually, call <a>GetRecords</a> in a loop. Use <a>GetShardIterator</a> to get the shard iterator to specify in the first <a>GetRecords</a> call. <a>GetRecords</a> returns a new shard iterator in <code>NextShardIterator</code>. Specify the shard iterator returned in <code>NextShardIterator</code> in subsequent calls to <a>GetRecords</a>. If the shard has been closed, the shard iterator can't return more data and <a>GetRecords</a> returns <code>null</code> in <code>NextShardIterator</code>. You can terminate the loop when the shard is closed, or when the shard iterator reaches the record with the sequence number or other attribute that marks it as the last record to process.</p> <p>Each data record can be up to 1 MiB in size, and each shard can read up to 2 MiB per second. You can ensure that your calls don't exceed the maximum supported size or throughput by using the <code>Limit</code> parameter to specify the maximum number of records that <a>GetRecords</a> can return. Consider your average record size when determining this limit. The maximum number of records that can be returned per call is 10,000.</p> <p>The size of the data returned by <a>GetRecords</a> varies depending on the utilization of the shard. It is recommended that consumer applications retrieve records via the <code>GetRecords</code> command using the 5 TPS limit to remain caught up. Retrieving records less frequently can lead to consumer applications falling behind. The maximum size of data that <a>GetRecords</a> can return is 10 MiB. If a call returns this amount of data, subsequent calls made within the next 5 seconds throw <code>ProvisionedThroughputExceededException</code>. If there is insufficient provisioned throughput on the stream, subsequent calls made within the next 1 second throw <code>ProvisionedThroughputExceededException</code>. <a>GetRecords</a> doesn't return any data when it throws an exception. For this reason, we recommend that you wait 1 second between calls to <a>GetRecords</a>. However, it's possible that the application will get exceptions for longer than 1 second.</p> <p>To detect whether the application is falling behind in processing, you can use the <code>MillisBehindLatest</code> response attribute. You can also monitor the stream using CloudWatch metrics and other mechanisms (see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/monitoring.html\">Monitoring</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>).</p> <p>Each Amazon Kinesis record includes a value, <code>ApproximateArrivalTimestamp</code>, that is set when a stream successfully receives and stores a record. This is commonly referred to as a server-side time stamp, whereas a client-side time stamp is set when a data producer creates or sends the record to a stream (a data producer is any data source putting data records into a stream, for example with <a>PutRecords</a>). The time stamp has millisecond precision. There are no guarantees about the time stamp accuracy, or that the time stamp is always increasing. For example, records in a shard or across a stream might have time stamps that are out of order.</p> <p>This operation has a limit of five transactions per second per shard.</p>",
       "staticContextParams":{
@@ -290,7 +305,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidArgumentException"},
         {"shape":"ProvisionedThroughputExceededException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"}
       ],
       "documentation":"<p>Gets an Amazon Kinesis shard iterator. A shard iterator expires 5 minutes after it is returned to the requester.</p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>A shard iterator specifies the shard position from which to start reading data records sequentially. The position is specified using the sequence number of a data record in a shard. A sequence number is the identifier associated with every record ingested in the stream, and is assigned when a record is put into the stream. Each stream has one or more shards.</p> <p>You must specify the shard iterator type. For example, you can set the <code>ShardIteratorType</code> parameter to read exactly from the position denoted by a specific sequence number by using the <code>AT_SEQUENCE_NUMBER</code> shard iterator type. Alternatively, the parameter can read right after the sequence number by using the <code>AFTER_SEQUENCE_NUMBER</code> shard iterator type, using sequence numbers returned by earlier calls to <a>PutRecord</a>, <a>PutRecords</a>, <a>GetRecords</a>, or <a>DescribeStream</a>. In the request, you can specify the shard iterator type <code>AT_TIMESTAMP</code> to read records from an arbitrary point in time, <code>TRIM_HORIZON</code> to cause <code>ShardIterator</code> to point to the last untrimmed record in the shard in the system (the oldest data record in the shard), or <code>LATEST</code> so that you always read the most recent data in the shard. </p> <p>When you read repeatedly from a stream, use a <a>GetShardIterator</a> request to get the first shard iterator for use in your first <a>GetRecords</a> request and for subsequent reads use the shard iterator returned by the <a>GetRecords</a> request in <code>NextShardIterator</code>. A new shard iterator is returned by every <a>GetRecords</a> request in <code>NextShardIterator</code>, which you use in the <code>ShardIterator</code> parameter of the next <a>GetRecords</a> request. </p> <p>If a <a>GetShardIterator</a> request is made too often, you receive a <code>ProvisionedThroughputExceededException</code>. For more information about throughput limits, see <a>GetRecords</a>, and <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html\">Streams Limits</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p>If the shard is closed, <a>GetShardIterator</a> returns a valid iterator for the last sequence number of the shard. A shard can be closed as a result of using <a>SplitShard</a> or <a>MergeShards</a>.</p> <p> <a>GetShardIterator</a> has a limit of five transactions per second per account per open shard.</p>",
       "staticContextParams":{
@@ -372,6 +388,26 @@
       ],
       "documentation":"<p>Lists your Kinesis data streams.</p> <p>The number of streams may be too large to return from a single call to <code>ListStreams</code>. You can limit the number of returned streams using the <code>Limit</code> parameter. If you do not specify a value for the <code>Limit</code> parameter, Kinesis Data Streams uses the default limit, which is currently 100.</p> <p>You can detect if there are more streams available to list by using the <code>HasMoreStreams</code> flag from the returned output. If there are more streams available, you can request more streams by using the name of the last stream returned by the <code>ListStreams</code> request in the <code>ExclusiveStartStreamName</code> parameter in a subsequent request to <code>ListStreams</code>. The group of stream names returned by the subsequent request is then added to the list. You can continue this process until all the stream names have been collected in the list. </p> <p> <a>ListStreams</a> has a limit of five transactions per second per account.</p>"
     },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceInput"},
+      "output":{"shape":"ListTagsForResourceOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"InvalidArgumentException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>List all tags added to the specified Kinesis resource. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources.</p> <p>For more information about tagging Kinesis resources, see <a href=\"https://docs.aws.amazon.com/streams/latest/dev/tagging.html\">Tag your Amazon Kinesis Data Streams resources</a>.</p>",
+      "staticContextParams":{
+        "OperationType":{"value":"control"}
+      }
+    },
     "ListTagsForStream":{
       "name":"ListTagsForStream",
       "http":{
@@ -429,9 +465,10 @@
         {"shape":"KMSNotFoundException"},
         {"shape":"KMSOptInRequired"},
         {"shape":"KMSThrottlingException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Writes a single data record into an Amazon Kinesis data stream. Call <code>PutRecord</code> to send data into the stream for real-time ingestion and subsequent processing, one record at a time. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 1 MiB per second.</p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>You must specify the name of the stream that captures, stores, and transports the data; a partition key; and the data blob itself.</p> <p>The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on.</p> <p>The partition key is used by Kinesis Data Streams to distribute data across shards. Kinesis Data Streams segregates the data records that belong to a stream into multiple shards, using the partition key associated with each data record to determine the shard to which a given data record belongs.</p> <p>Partition keys are Unicode strings, with a maximum length limit of 256 characters for each key. An MD5 hash function is used to map partition keys to 128-bit integer values and to map associated data records to shards using the hash key ranges of the shards. You can override hashing the partition key to determine the shard by explicitly specifying a hash value using the <code>ExplicitHashKey</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p> <code>PutRecord</code> returns the shard ID of where the data record was placed and the sequence number that was assigned to the data record.</p> <p>Sequence numbers increase over time and are specific to a shard within a stream, not across all shards within a stream. To guarantee strictly increasing ordering, write serially to a shard and use the <code>SequenceNumberForOrdering</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <important> <p>After you write a record to a stream, you cannot modify that record or its order within the stream.</p> </important> <p>If a <code>PutRecord</code> request cannot be processed because of insufficient provisioned throughput on the shard involved in the request, <code>PutRecord</code> throws <code>ProvisionedThroughputExceededException</code>. </p> <p>By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use <a>IncreaseStreamRetentionPeriod</a> or <a>DecreaseStreamRetentionPeriod</a> to modify this retention period.</p>",
+      "documentation":"<p>Writes a single data record into an Amazon Kinesis data stream. Call <code>PutRecord</code> to send data into the stream for real-time ingestion and subsequent processing, one record at a time. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 10 MiB per second.</p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>You must specify the name of the stream that captures, stores, and transports the data; a partition key; and the data blob itself.</p> <p>The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on.</p> <p>The partition key is used by Kinesis Data Streams to distribute data across shards. Kinesis Data Streams segregates the data records that belong to a stream into multiple shards, using the partition key associated with each data record to determine the shard to which a given data record belongs.</p> <p>Partition keys are Unicode strings, with a maximum length limit of 256 characters for each key. An MD5 hash function is used to map partition keys to 128-bit integer values and to map associated data records to shards using the hash key ranges of the shards. You can override hashing the partition key to determine the shard by explicitly specifying a hash value using the <code>ExplicitHashKey</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p> <code>PutRecord</code> returns the shard ID of where the data record was placed and the sequence number that was assigned to the data record.</p> <p>Sequence numbers increase over time and are specific to a shard within a stream, not across all shards within a stream. To guarantee strictly increasing ordering, write serially to a shard and use the <code>SequenceNumberForOrdering</code> parameter. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <important> <p>After you write a record to a stream, you cannot modify that record or its order within the stream.</p> </important> <p>If a <code>PutRecord</code> request cannot be processed because of insufficient provisioned throughput on the shard involved in the request, <code>PutRecord</code> throws <code>ProvisionedThroughputExceededException</code>. </p> <p>By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use <a>IncreaseStreamRetentionPeriod</a> or <a>DecreaseStreamRetentionPeriod</a> to modify this retention period.</p>",
       "staticContextParams":{
         "OperationType":{"value":"data"}
       }
@@ -454,9 +491,10 @@
         {"shape":"KMSNotFoundException"},
         {"shape":"KMSOptInRequired"},
         {"shape":"KMSThrottlingException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Writes multiple data records into a Kinesis data stream in a single call (also referred to as a <code>PutRecords</code> request). Use this operation to send data into the stream for data ingestion and processing. </p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>Each <code>PutRecords</code> request can support up to 500 records. Each record in the request can be as large as 1 MiB, up to a limit of 5 MiB for the entire request, including partition keys. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 1 MiB per second.</p> <p>You must specify the name of the stream that captures, stores, and transports the data; and an array of request <code>Records</code>, with each record in the array requiring a partition key and data blob. The record size limit applies to the total size of the partition key and data blob.</p> <p>The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on.</p> <p>The partition key is used by Kinesis Data Streams as input to a hash function that maps the partition key and associated data to a specific shard. An MD5 hash function is used to map partition keys to 128-bit integer values and to map associated data records to shards. As a result of this hashing mechanism, all data records with the same partition key map to the same shard within the stream. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p>Each record in the <code>Records</code> array may include an optional parameter, <code>ExplicitHashKey</code>, which overrides the partition key to shard mapping. This parameter allows a data producer to determine explicitly the shard where the record is stored. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-putrecords\">Adding Multiple Records with PutRecords</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p>The <code>PutRecords</code> response includes an array of response <code>Records</code>. Each record in the response array directly correlates with a record in the request array using natural ordering, from the top to the bottom of the request and response. The response <code>Records</code> array always includes the same number of records as the request array.</p> <p>The response <code>Records</code> array includes both successfully and unsuccessfully processed records. Kinesis Data Streams attempts to process all records in each <code>PutRecords</code> request. A single record failure does not stop the processing of subsequent records. As a result, PutRecords doesn't guarantee the ordering of records. If you need to read records in the same order they are written to the stream, use <a>PutRecord</a> instead of <code>PutRecords</code>, and write to the same shard.</p> <p>A successfully processed record includes <code>ShardId</code> and <code>SequenceNumber</code> values. The <code>ShardId</code> parameter identifies the shard in the stream where the record is stored. The <code>SequenceNumber</code> parameter is an identifier assigned to the put record, unique to all records in the stream.</p> <p>An unsuccessfully processed record includes <code>ErrorCode</code> and <code>ErrorMessage</code> values. <code>ErrorCode</code> reflects the type of error and can be one of the following values: <code>ProvisionedThroughputExceededException</code> or <code>InternalFailure</code>. <code>ErrorMessage</code> provides more detailed information about the <code>ProvisionedThroughputExceededException</code> exception including the account ID, stream name, and shard ID of the record that was throttled. For more information about partially successful responses, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords\">Adding Multiple Records with PutRecords</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <important> <p>After you write a record to a stream, you cannot modify that record or its order within the stream.</p> </important> <p>By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use <a>IncreaseStreamRetentionPeriod</a> or <a>DecreaseStreamRetentionPeriod</a> to modify this retention period.</p>",
+      "documentation":"<p>Writes multiple data records into a Kinesis data stream in a single call (also referred to as a <code>PutRecords</code> request). Use this operation to send data into the stream for data ingestion and processing. </p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>Each <code>PutRecords</code> request can support up to 500 records. Each record in the request can be as large as 10 MiB, up to a limit of 10 MiB for the entire request, including partition keys. Each shard can support writes up to 1,000 records per second, up to a maximum data write total of 1 MB per second.</p> <p>You must specify the name of the stream that captures, stores, and transports the data; and an array of request <code>Records</code>, with each record in the array requiring a partition key and data blob. The record size limit applies to the total size of the partition key and data blob.</p> <p>The data blob can be any type of data; for example, a segment from a log file, geographic/location data, website clickstream data, and so on.</p> <p>The partition key is used by Kinesis Data Streams as input to a hash function that maps the partition key and associated data to a specific shard. An MD5 hash function is used to map partition keys to 128-bit integer values and to map associated data records to shards. As a result of this hashing mechanism, all data records with the same partition key map to the same shard within the stream. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-add-data-to-stream\">Adding Data to a Stream</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p>Each record in the <code>Records</code> array may include an optional parameter, <code>ExplicitHashKey</code>, which overrides the partition key to shard mapping. This parameter allows a data producer to determine explicitly the shard where the record is stored. For more information, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/developing-producers-with-sdk.html#kinesis-using-sdk-java-putrecords\">Adding Multiple Records with PutRecords</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <p>The <code>PutRecords</code> response includes an array of response <code>Records</code>. Each record in the response array directly correlates with a record in the request array using natural ordering, from the top to the bottom of the request and response. The response <code>Records</code> array always includes the same number of records as the request array.</p> <p>The response <code>Records</code> array includes both successfully and unsuccessfully processed records. Kinesis Data Streams attempts to process all records in each <code>PutRecords</code> request. A single record failure does not stop the processing of subsequent records. As a result, PutRecords doesn't guarantee the ordering of records. If you need to read records in the same order they are written to the stream, use <a>PutRecord</a> instead of <code>PutRecords</code>, and write to the same shard.</p> <p>A successfully processed record includes <code>ShardId</code> and <code>SequenceNumber</code> values. The <code>ShardId</code> parameter identifies the shard in the stream where the record is stored. The <code>SequenceNumber</code> parameter is an identifier assigned to the put record, unique to all records in the stream.</p> <p>An unsuccessfully processed record includes <code>ErrorCode</code> and <code>ErrorMessage</code> values. <code>ErrorCode</code> reflects the type of error and can be one of the following values: <code>ProvisionedThroughputExceededException</code> or <code>InternalFailure</code>. <code>ErrorMessage</code> provides more detailed information about the <code>ProvisionedThroughputExceededException</code> exception including the account ID, stream name, and shard ID of the record that was throttled. For more information about partially successful responses, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/kinesis-using-sdk-java-add-data-to-stream.html#kinesis-using-sdk-java-putrecords\">Adding Multiple Records with PutRecords</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> <important> <p>After you write a record to a stream, you cannot modify that record or its order within the stream.</p> </important> <p>By default, data records are accessible for 24 hours from the time that they are added to a stream. You can use <a>IncreaseStreamRetentionPeriod</a> or <a>DecreaseStreamRetentionPeriod</a> to modify this retention period.</p>",
       "staticContextParams":{
         "OperationType":{"value":"data"}
       }
@@ -494,7 +532,7 @@
         {"shape":"ResourceInUseException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Registers a consumer with a Kinesis data stream. When you use this operation, the consumer you register can then call <a>SubscribeToShard</a> to receive data from the stream using enhanced fan-out, at a rate of up to 2 MiB per second for every shard you subscribe to. This rate is unaffected by the total number of consumers that read from the same stream.</p> <p>You can register up to 20 consumers per stream. A given consumer can only be registered with one stream at a time.</p> <p>For an example of how to use this operation, see <a href=\"https://docs.aws.amazon.com/streams/latest/dev/building-enhanced-consumers-api.html\">Enhanced Fan-Out Using the Kinesis Data Streams API</a>.</p> <p>The use of this operation has a limit of five transactions per second per account. Also, only 5 consumers can be created simultaneously. In other words, you cannot have more than 5 consumers in a <code>CREATING</code> status at the same time. Registering a 6th consumer while there are 5 in a <code>CREATING</code> status results in a <code>LimitExceededException</code>.</p>",
+      "documentation":"<p>Registers a consumer with a Kinesis data stream. When you use this operation, the consumer you register can then call <a>SubscribeToShard</a> to receive data from the stream using enhanced fan-out, at a rate of up to 2 MiB per second for every shard you subscribe to. This rate is unaffected by the total number of consumers that read from the same stream.</p> <p>You can add tags to the registered consumer when making a <code>RegisterStreamConsumer</code> request by setting the <code>Tags</code> parameter. If you pass the <code>Tags</code> parameter, in addition to having the <code>kinesis:RegisterStreamConsumer</code> permission, you must also have the <code>kinesis:TagResource</code> permission for the consumer that will be registered. Tags will take effect from the <code>CREATING</code> status of the consumer.</p> <p>You can register up to 20 consumers per stream. A given consumer can only be registered with one stream at a time.</p> <p>For an example of how to use this operation, see <a href=\"https://docs.aws.amazon.com/streams/latest/dev/building-enhanced-consumers-api.html\">Enhanced Fan-Out Using the Kinesis Data Streams API</a>.</p> <p>The use of this operation has a limit of five transactions per second per account. Also, only 5 consumers can be created simultaneously. In other words, you cannot have more than 5 consumers in a <code>CREATING</code> status at the same time. Registering a 6th consumer while there are 5 in a <code>CREATING</code> status results in a <code>LimitExceededException</code>.</p>",
       "staticContextParams":{
         "OperationType":{"value":"control"}
       }
@@ -602,6 +640,79 @@
         "OperationType":{"value":"data"}
       }
     },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"InvalidArgumentException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Adds or updates tags for the specified Kinesis resource. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources. You can assign up to 50 tags to a Kinesis resource.</p>",
+      "staticContextParams":{
+        "OperationType":{"value":"control"}
+      }
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"InvalidArgumentException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Removes tags from the specified Kinesis resource. Removed tags are deleted and can't be recovered after this operation completes successfully.</p>",
+      "staticContextParams":{
+        "OperationType":{"value":"control"}
+      }
+    },
+    "UpdateAccountSettings":{
+      "name":"UpdateAccountSettings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateAccountSettingsInput"},
+      "output":{"shape":"UpdateAccountSettingsOutput"},
+      "errors":[
+        {"shape":"InvalidArgumentException"},
+        {"shape":"ValidationException"},
+        {"shape":"LimitExceededException"}
+      ],
+      "documentation":"<p>Updates the account-level settings for Amazon Kinesis Data Streams.</p> <p>Updating account settings is a synchronous operation. Upon receiving the request, Kinesis Data Streams will return immediately with your account’s updated settings.</p> <p> <b>API limits</b> </p> <ul> <li> <p>Certain account configurations have minimum commitment windows. Attempting to update your settings prior to the end of the minimum commitment window might have certain restrictions.</p> </li> <li> <p>This API has a call limit of 5 transactions per second (TPS) for each Amazon Web Services account. TPS over 5 will initiate the <code>LimitExceededException</code>.</p> </li> </ul>"
+    },
+    "UpdateMaxRecordSize":{
+      "name":"UpdateMaxRecordSize",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateMaxRecordSizeInput"},
+      "errors":[
+        {"shape":"ResourceInUseException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"InvalidArgumentException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>This allows you to update the <code>MaxRecordSize</code> of a single record that you can write to, and read from a stream. You can ingest and digest single records up to 10240 KiB.</p>",
+      "staticContextParams":{
+        "OperationType":{"value":"control"}
+      }
+    },
     "UpdateShardCount":{
       "name":"UpdateShardCount",
       "http":{
@@ -634,9 +745,31 @@
         {"shape":"InvalidArgumentException"},
         {"shape":"LimitExceededException"},
         {"shape":"ResourceInUseException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
       ],
-      "documentation":"<p> Updates the capacity mode of the data stream. Currently, in Kinesis Data Streams, you can choose between an <b>on-demand</b> capacity mode and a <b>provisioned</b> capacity mode for your data stream. </p>",
+      "documentation":"<p> Updates the capacity mode of the data stream. Currently, in Kinesis Data Streams, you can choose between an <b>on-demand</b> capacity mode and a <b>provisioned</b> capacity mode for your data stream. </p> <p>If you'd still like to proactively scale your on-demand data stream’s capacity, you can unlock the warm throughput feature for on-demand data streams by enabling <code>MinimumThroughputBillingCommitment</code> for your account. Once your account has <code>MinimumThroughputBillingCommitment</code> enabled, you can specify the warm throughput in MiB per second that your stream can support in writes.</p>",
+      "staticContextParams":{
+        "OperationType":{"value":"control"}
+      }
+    },
+    "UpdateStreamWarmThroughput":{
+      "name":"UpdateStreamWarmThroughput",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateStreamWarmThroughputInput"},
+      "output":{"shape":"UpdateStreamWarmThroughputOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"InvalidArgumentException"},
+        {"shape":"ResourceInUseException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates the warm throughput configuration for the specified Amazon Kinesis Data Streams on-demand data stream. This operation allows you to proactively scale your on-demand data stream to a specified throughput level, enabling better performance for sudden traffic spikes. </p> <note> <p>When invoking this API, you must use either the <code>StreamARN</code> or the <code>StreamName</code> parameter, or both. It is recommended that you use the <code>StreamARN</code> input parameter when you invoke this API.</p> </note> <p>Updating the warm throughput is an asynchronous operation. Upon receiving the request, Kinesis Data Streams returns immediately and sets the status of the stream to <code>UPDATING</code>. After the update is complete, Kinesis Data Streams sets the status of the stream back to <code>ACTIVE</code>. Depending on the size of the stream, the scaling action could take a few minutes to complete. You can continue to read and write data to your stream while its status is <code>UPDATING</code>.</p> <p>This operation is only supported for data streams with the on-demand capacity mode in accounts that have <code>MinimumThroughputBillingCommitment</code> enabled. Provisioned capacity mode streams do not support warm throughput configuration.</p> <p>This operation has the following default limits. By default, you cannot do the following:</p> <ul> <li> <p>Scale to more than 10 GiBps for an on-demand stream.</p> </li> <li> <p>This API has a call limit of 5 transactions per second (TPS) for each Amazon Web Services account. TPS over 5 will initiate the <code>LimitExceededException</code>.</p> </li> </ul> <p>For the default limits for an Amazon Web Services account, see <a href=\"https://docs.aws.amazon.com/kinesis/latest/dev/service-sizes-and-limits.html\">Streams Limits</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>. To request an increase in the call rate limit, the shard limit for this API, or your overall shard limit, use the <a href=\"https://console.aws.amazon.com/support/v1#/case/create?issueType=service-limit-increase&amp;limitType=service-code-kinesis\">limits form</a>.</p>",
       "staticContextParams":{
         "OperationType":{"value":"control"}
       }
@@ -661,7 +794,7 @@
         },
         "Tags":{
           "shape":"TagMap",
-          "documentation":"<p>A set of up to 10 key-value pairs to use to create the tags.</p>"
+          "documentation":"<p>A set of up to 50 key-value pairs to use to create the tags. A tag consists of a required key and an optional value. You can add up to 50 tags per resource.</p>"
         },
         "StreamARN":{
           "shape":"StreamARN",
@@ -804,14 +937,22 @@
         },
         "Tags":{
           "shape":"TagMap",
-          "documentation":"<p>A set of up to 10 key-value pairs to use to create the tags.</p>"
+          "documentation":"<p>A set of up to 50 key-value pairs to use to create the tags. A tag consists of a required key and an optional value.</p>"
+        },
+        "WarmThroughputMiBps":{
+          "shape":"NaturalIntegerObject",
+          "documentation":"<p>The target warm throughput in MB/s that the stream should be scaled to handle. This represents the throughput capacity that will be immediately available for write operations.</p>"
+        },
+        "MaxRecordSizeInKiB":{
+          "shape":"MaxRecordSizeInKiB",
+          "documentation":"<p>The maximum record size of a single record in kibibyte (KiB) that you can write to, and read from a stream.</p>"
         }
       },
       "documentation":"<p>Represents the input for <code>CreateStream</code>.</p>"
     },
     "Data":{
       "type":"blob",
-      "max":1048576,
+      "max":10485760,
       "min":0
     },
     "DecreaseStreamRetentionPeriodInput":{
@@ -883,11 +1024,23 @@
         }
       }
     },
-    "DescribeLimitsInput":{
+    "DescribeAccountSettingsInput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DescribeAccountSettingsOutput":{
       "type":"structure",
       "members":{
+        "MinimumThroughputBillingCommitment":{
+          "shape":"MinimumThroughputBillingCommitmentOutput",
+          "documentation":"<p>The current configuration of the minimum throughput billing commitment for your Amazon Web Services account.</p>"
+        }
       }
     },
+    "DescribeLimitsInput":{
+      "type":"structure",
+      "members":{}
+    },
     "DescribeLimitsOutput":{
       "type":"structure",
       "required":[
@@ -1511,6 +1664,26 @@
       },
       "documentation":"<p>Represents the output for <code>ListStreams</code>.</p>"
     },
+    "ListTagsForResourceInput":{
+      "type":"structure",
+      "required":["ResourceARN"],
+      "members":{
+        "ResourceARN":{
+          "shape":"ResourceARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Kinesis resource for which to list tags.</p>",
+          "contextParam":{"name":"ResourceARN"}
+        }
+      }
+    },
+    "ListTagsForResourceOutput":{
+      "type":"structure",
+      "members":{
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of tags associated with the specified Kinesis resource.</p>"
+        }
+      }
+    },
     "ListTagsForStreamInput":{
       "type":"structure",
       "members":{
@@ -1557,6 +1730,11 @@
       },
       "documentation":"<p>Represents the output for <code>ListTagsForStream</code>.</p>"
     },
+    "MaxRecordSizeInKiB":{
+      "type":"integer",
+      "max":10240,
+      "min":1024
+    },
     "MergeShardsInput":{
       "type":"structure",
       "required":[
@@ -1607,6 +1785,59 @@
       "type":"long",
       "min":0
     },
+    "MinimumThroughputBillingCommitmentInput":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "Status":{
+          "shape":"MinimumThroughputBillingCommitmentInputStatus",
+          "documentation":"<p>The desired status of the minimum throughput billing commitment.</p>"
+        }
+      },
+      "documentation":"<p>Represents the request parameters for configuring minimum throughput billing commitment.</p> <note> <ul> <li> <p>Minimum throughput billing commitments provide cost savings on on-demand data streams in exchange for committing to a minimum level of throughput usage.</p> </li> <li> <p>Commitments have a minimum duration of 24 hours that must be honored before they can be disabled.</p> </li> <li> <p>If you attempt to disable a commitment before the minimum commitment period ends, the commitment will be scheduled for automatic disable at the earliest allowed end time.</p> </li> <li> <p>You can cancel a pending disable by enabling the commitment again before the earliest allowed end time.</p> </li> </ul> </note>"
+    },
+    "MinimumThroughputBillingCommitmentInputStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "MinimumThroughputBillingCommitmentOutput":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "Status":{
+          "shape":"MinimumThroughputBillingCommitmentOutputStatus",
+          "documentation":"<p>The current status of the minimum throughput billing commitment.</p>"
+        },
+        "StartedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the commitment was started.</p>"
+        },
+        "EndedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the commitment was ended.</p>"
+        },
+        "EarliestAllowedEndAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The earliest timestamp when the commitment can be ended.</p>"
+        }
+      },
+      "documentation":"<p>Represents the current status of minimum throughput billing commitment for an account.</p>"
+    },
+    "MinimumThroughputBillingCommitmentOutputStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED",
+        "ENABLED_UNTIL_EARLIEST_ALLOWED_END"
+      ]
+    },
+    "NaturalIntegerObject":{
+      "type":"integer",
+      "min":0
+    },
     "NextToken":{
       "type":"string",
       "max":1048576,
@@ -1863,6 +2094,10 @@
         "ConsumerName":{
           "shape":"ConsumerName",
           "documentation":"<p>For a given Kinesis data stream, each consumer must have a unique name. However, consumer names don't have to be unique across data streams.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>A set of up to 50 key-value pairs. A tag consists of a required key and an optional value.</p>"
         }
       }
     },
@@ -2262,6 +2497,14 @@
         "ConsumerCount":{
           "shape":"ConsumerCountObject",
           "documentation":"<p>The number of enhanced fan-out consumers registered with the stream.</p>"
+        },
+        "WarmThroughput":{
+          "shape":"WarmThroughputObject",
+          "documentation":"<p>The warm throughput in MB/s for the stream. This represents the throughput capacity that will be immediately available for write operations.</p>"
+        },
+        "MaxRecordSizeInKiB":{
+          "shape":"MaxRecordSizeInKiB",
+          "documentation":"<p>The maximum record size of a single record in kibibyte (KiB) that you can write to, and read from a stream.</p>"
         }
       },
       "documentation":"<p>Represents the output for <a>DescribeStreamSummary</a> </p>"
@@ -2433,7 +2676,7 @@
           "documentation":"<p>An optional string, typically used to describe or define the tag. Maximum length: 256 characters. Valid characters: Unicode letters, digits, white space, _ . / = + - % @</p>"
         }
       },
-      "documentation":"<p>Metadata assigned to the stream, consisting of a key-value pair.</p>"
+      "documentation":"<p>Metadata assigned to the stream or consumer, consisting of a key-value pair.</p>"
     },
     "TagKey":{
       "type":"string",
@@ -2459,12 +2702,82 @@
       "max":200,
       "min":1
     },
+    "TagResourceInput":{
+      "type":"structure",
+      "required":[
+        "Tags",
+        "ResourceARN"
+      ],
+      "members":{
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>An array of tags to be added to the Kinesis resource. A tag consists of a required key and an optional value. You can add up to 50 tags per resource.</p> <p>Tags may only contain Unicode letters, digits, white space, or these symbols: _ . : / = + - @.</p>"
+        },
+        "ResourceARN":{
+          "shape":"ResourceARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Kinesis resource to which to add tags.</p>",
+          "contextParam":{"name":"ResourceARN"}
+        }
+      }
+    },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0
     },
     "Timestamp":{"type":"timestamp"},
+    "UntagResourceInput":{
+      "type":"structure",
+      "required":[
+        "TagKeys",
+        "ResourceARN"
+      ],
+      "members":{
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of tag key-value pairs. Existing tags of the resource whose keys are members of this list will be removed from the Kinesis resource.</p>"
+        },
+        "ResourceARN":{
+          "shape":"ResourceARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Kinesis resource from which to remove tags.</p>",
+          "contextParam":{"name":"ResourceARN"}
+        }
+      }
+    },
+    "UpdateAccountSettingsInput":{
+      "type":"structure",
+      "required":["MinimumThroughputBillingCommitment"],
+      "members":{
+        "MinimumThroughputBillingCommitment":{
+          "shape":"MinimumThroughputBillingCommitmentInput",
+          "documentation":"<p>Specifies the minimum throughput billing commitment configuration for your account.</p>"
+        }
+      }
+    },
+    "UpdateAccountSettingsOutput":{
+      "type":"structure",
+      "members":{
+        "MinimumThroughputBillingCommitment":{
+          "shape":"MinimumThroughputBillingCommitmentOutput",
+          "documentation":"<p>The updated configuration of the minimum throughput billing commitment for your account.</p>"
+        }
+      }
+    },
+    "UpdateMaxRecordSizeInput":{
+      "type":"structure",
+      "required":["MaxRecordSizeInKiB"],
+      "members":{
+        "StreamARN":{
+          "shape":"StreamARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the stream for the <code>MaxRecordSize</code> update.</p>",
+          "contextParam":{"name":"StreamARN"}
+        },
+        "MaxRecordSizeInKiB":{
+          "shape":"MaxRecordSizeInKiB",
+          "documentation":"<p>The maximum record size of a single record in KiB that you can write to, and read from a stream. Specify a value between 1024 and 10240 KiB (1 to 10 MiB). If you specify a value that is out of this range, <code>UpdateMaxRecordSize</code> sends back an <code>ValidationException</code> message.</p>"
+        }
+      }
+    },
     "UpdateShardCountInput":{
       "type":"structure",
       "required":[
@@ -2527,6 +2840,46 @@
         "StreamModeDetails":{
           "shape":"StreamModeDetails",
           "documentation":"<p> Specifies the capacity mode to which you want to set your data stream. Currently, in Kinesis Data Streams, you can choose between an <b>on-demand</b> capacity mode and a <b>provisioned</b> capacity mode for your data streams. </p>"
+        },
+        "WarmThroughputMiBps":{
+          "shape":"NaturalIntegerObject",
+          "documentation":"<p>The target warm throughput in MB/s that the stream should be scaled to handle. This represents the throughput capacity that will be immediately available for write operations. This field is only valid when the stream mode is being updated to on-demand.</p>"
+        }
+      }
+    },
+    "UpdateStreamWarmThroughputInput":{
+      "type":"structure",
+      "required":["WarmThroughputMiBps"],
+      "members":{
+        "StreamARN":{
+          "shape":"StreamARN",
+          "documentation":"<p>The ARN of the stream to be updated.</p>",
+          "contextParam":{"name":"StreamARN"}
+        },
+        "StreamName":{
+          "shape":"StreamName",
+          "documentation":"<p>The name of the stream to be updated.</p>"
+        },
+        "WarmThroughputMiBps":{
+          "shape":"NaturalIntegerObject",
+          "documentation":"<p>The target warm throughput in MB/s that the stream should be scaled to handle. This represents the throughput capacity that will be immediately available for write operations.</p>"
+        }
+      }
+    },
+    "UpdateStreamWarmThroughputOutput":{
+      "type":"structure",
+      "members":{
+        "StreamARN":{
+          "shape":"StreamARN",
+          "documentation":"<p>The ARN of the stream that was updated.</p>"
+        },
+        "StreamName":{
+          "shape":"StreamName",
+          "documentation":"<p>The name of the stream that was updated.</p>"
+        },
+        "WarmThroughput":{
+          "shape":"WarmThroughputObject",
+          "documentation":"<p>Specifies the updated warm throughput configuration for your data stream.</p>"
         }
       }
     },
@@ -2537,6 +2890,20 @@
       },
       "documentation":"<p>Specifies that you tried to invoke this API for a data stream with the on-demand capacity mode. This API is only supported for data streams with the provisioned capacity mode. </p>",
       "exception":true
+    },
+    "WarmThroughputObject":{
+      "type":"structure",
+      "members":{
+        "TargetMiBps":{
+          "shape":"NaturalIntegerObject",
+          "documentation":"<p>The target warm throughput value on the stream. This indicates that the stream is currently scaling towards this target value.</p>"
+        },
+        "CurrentMiBps":{
+          "shape":"NaturalIntegerObject",
+          "documentation":"<p>The current warm throughput value on the stream. This is the write throughput in MiBps that the stream is currently scaled to handle.</p>"
+        }
+      },
+      "documentation":"<p>Represents the warm throughput configuration on the stream. This is only present for On-Demand Kinesis Data Streams in accounts that have <code>MinimumThroughputBillingCommitment</code> enabled.</p>"
     }
   },
   "documentation":"<fullname>Amazon Kinesis Data Streams Service API Reference</fullname> <p>Amazon Kinesis Data Streams is a managed service that scales elastically for real-time processing of streaming big data.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json 2.31.35-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-archived-media/2017-09-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2017-09-30",
     "endpointPrefix":"kinesisvideo",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Kinesis Video Archived Media",
     "serviceFullName":"Amazon Kinesis Video Streams Archived Media",
     "serviceId":"Kinesis Video Archived Media",
     "signatureVersion":"v4",
-    "uid":"kinesis-video-archived-media-2017-09-30"
+    "uid":"kinesis-video-archived-media-2017-09-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetClip":{
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-media/2017-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-media/2017-09-30/service-2.json 2.31.35-1/awscli/botocore/data/kinesis-video-media/2017-09-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-media/2017-09-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-media/2017-09-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2017-09-30",
     "endpointPrefix":"kinesisvideo",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Kinesis Video Media",
     "serviceFullName":"Amazon Kinesis Video Streams Media",
     "serviceId":"Kinesis Video Media",
     "signatureVersion":"v4",
-    "uid":"kinesis-video-media-2017-09-30"
+    "uid":"kinesis-video-media-2017-09-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetMedia":{
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json 2.31.35-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-signaling/2019-12-04/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2019-12-04",
     "endpointPrefix":"kinesisvideo",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Amazon Kinesis Video Signaling Channels",
     "serviceFullName":"Amazon Kinesis Video Signaling Channels",
     "serviceId":"Kinesis Video Signaling",
     "signatureVersion":"v4",
-    "uid":"kinesis-video-signaling-2019-12-04"
+    "uid":"kinesis-video-signaling-2019-12-04",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetIceServerConfig":{
diff -pruN 2.23.6-1/awscli/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesis-video-webrtc-storage/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisanalytics/2015-08-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisanalytics/2015-08-14/service-2.json 2.31.35-1/awscli/botocore/data/kinesisanalytics/2015-08-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesisanalytics/2015-08-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisanalytics/2015-08-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"kinesisanalytics",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"Kinesis Analytics",
     "serviceFullName":"Amazon Kinesis Analytics",
     "serviceId":"Kinesis Analytics",
     "signatureVersion":"v4",
     "targetPrefix":"KinesisAnalytics_20150814",
-    "uid":"kinesisanalytics-2015-08-14"
+    "uid":"kinesisanalytics-2015-08-14",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddApplicationCloudWatchLoggingOption":{
@@ -366,8 +368,7 @@
     },
     "AddApplicationCloudWatchLoggingOptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddApplicationInputProcessingConfigurationRequest":{
       "type":"structure",
@@ -398,8 +399,7 @@
     },
     "AddApplicationInputProcessingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AddApplicationInputRequest":{
       "type":"structure",
@@ -426,8 +426,7 @@
     },
     "AddApplicationInputResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "AddApplicationOutputRequest":{
@@ -455,8 +454,7 @@
     },
     "AddApplicationOutputResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "AddApplicationReferenceDataSourceRequest":{
@@ -484,8 +482,7 @@
     },
     "AddApplicationReferenceDataSourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "ApplicationCode":{
@@ -821,8 +818,7 @@
     },
     "DeleteApplicationCloudWatchLoggingOptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationInputProcessingConfigurationRequest":{
       "type":"structure",
@@ -848,8 +844,7 @@
     },
     "DeleteApplicationInputProcessingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationOutputRequest":{
       "type":"structure",
@@ -876,8 +871,7 @@
     },
     "DeleteApplicationOutputResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "DeleteApplicationReferenceDataSourceRequest":{
@@ -904,8 +898,7 @@
     },
     "DeleteApplicationReferenceDataSourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationRequest":{
       "type":"structure",
@@ -927,8 +920,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "DescribeApplicationRequest":{
@@ -2131,8 +2123,7 @@
     },
     "StartApplicationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "StopApplicationRequest":{
@@ -2148,8 +2139,7 @@
     },
     "StopApplicationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "Tag":{
@@ -2197,8 +2187,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2257,8 +2246,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationRequest":{
       "type":"structure",
@@ -2284,8 +2272,7 @@
     },
     "UpdateApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     }
   },
   "documentation":"<fullname>Amazon Kinesis Analytics</fullname> <p> <b>Overview</b> </p> <note> <p>This documentation is for version 1 of the Amazon Kinesis Data Analytics API, which only supports SQL applications. Version 2 of the API supports SQL and Java applications. For more information about version 2, see <a href=\"/kinesisanalytics/latest/apiv2/Welcome.html\">Amazon Kinesis Data Analytics API V2 Documentation</a>.</p> </note> <p>This is the <i>Amazon Kinesis Analytics v1 API Reference</i>. The Amazon Kinesis Analytics Developer Guide provides additional information. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json 2.31.35-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisanalyticsv2/2018-05-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -324,7 +324,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"Returns information about a specific operation performed on a Managed Service for Apache Flink application"
+      "documentation":"<p>Provides a detailed description of a specified application operation. To see a list of all the operations of an application, invoke the <a>ListApplicationOperations</a> operation.</p> <note> <p>This operation is supported only for Managed Service for Apache Flink.</p> </note>"
     },
     "DescribeApplicationSnapshot":{
       "name":"DescribeApplicationSnapshot",
@@ -387,7 +387,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"Lists information about operations performed on a Managed Service for Apache Flink application"
+      "documentation":"<p>Lists all the operations performed for the specified application such as UpdateApplication, StartApplication etc. The response also includes a summary of the operation.</p> <p>To get the complete description of a specific operation, invoke the <a>DescribeApplicationOperation</a> operation.</p> <note> <p>This operation is supported only for Managed Service for Apache Flink.</p> </note>"
     },
     "ListApplicationSnapshots":{
       "name":"ListApplicationSnapshots",
@@ -614,7 +614,7 @@
         },
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking AddApplicationCloudWatchLoggingOption request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -825,7 +825,7 @@
         },
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking AddApplicationVpcConfiguration request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -896,7 +896,10 @@
           "shape":"ApplicationSnapshotConfiguration",
           "documentation":"<p>Describes whether snapshots are enabled for a Managed Service for Apache Flink application.</p>"
         },
-        "ApplicationSystemRollbackConfiguration":{"shape":"ApplicationSystemRollbackConfiguration"},
+        "ApplicationSystemRollbackConfiguration":{
+          "shape":"ApplicationSystemRollbackConfiguration",
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
+        },
         "VpcConfigurations":{
           "shape":"VpcConfigurations",
           "documentation":"<p>The array of descriptions of VPC configurations available to the application.</p>"
@@ -904,6 +907,10 @@
         "ZeppelinApplicationConfiguration":{
           "shape":"ZeppelinApplicationConfiguration",
           "documentation":"<p>The configuration parameters for a Managed Service for Apache Flink Studio notebook.</p>"
+        },
+        "ApplicationEncryptionConfiguration":{
+          "shape":"ApplicationEncryptionConfiguration",
+          "documentation":"<p>The configuration to manage encryption at rest.</p>"
         }
       },
       "documentation":"<p>Specifies the creation parameters for a Managed Service for Apache Flink application.</p>"
@@ -935,7 +942,10 @@
           "shape":"ApplicationSnapshotConfigurationDescription",
           "documentation":"<p>Describes whether snapshots are enabled for a Managed Service for Apache Flink application.</p>"
         },
-        "ApplicationSystemRollbackConfigurationDescription":{"shape":"ApplicationSystemRollbackConfigurationDescription"},
+        "ApplicationSystemRollbackConfigurationDescription":{
+          "shape":"ApplicationSystemRollbackConfigurationDescription",
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
+        },
         "VpcConfigurationDescriptions":{
           "shape":"VpcConfigurationDescriptions",
           "documentation":"<p>The array of descriptions of VPC configurations available to the application.</p>"
@@ -943,6 +953,10 @@
         "ZeppelinApplicationConfigurationDescription":{
           "shape":"ZeppelinApplicationConfigurationDescription",
           "documentation":"<p>The configuration parameters for a Managed Service for Apache Flink Studio notebook.</p>"
+        },
+        "ApplicationEncryptionConfigurationDescription":{
+          "shape":"ApplicationEncryptionConfigurationDescription",
+          "documentation":"<p>Describes the encryption at rest configuration.</p>"
         }
       },
       "documentation":"<p>Describes details about the application code and starting parameters for a Managed Service for Apache Flink application.</p>"
@@ -970,7 +984,10 @@
           "shape":"ApplicationSnapshotConfigurationUpdate",
           "documentation":"<p>Describes whether snapshots are enabled for a Managed Service for Apache Flink application.</p>"
         },
-        "ApplicationSystemRollbackConfigurationUpdate":{"shape":"ApplicationSystemRollbackConfigurationUpdate"},
+        "ApplicationSystemRollbackConfigurationUpdate":{
+          "shape":"ApplicationSystemRollbackConfigurationUpdate",
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
+        },
         "VpcConfigurationUpdates":{
           "shape":"VpcConfigurationUpdates",
           "documentation":"<p>Updates to the array of descriptions of VPC configurations available to the application.</p>"
@@ -978,6 +995,10 @@
         "ZeppelinApplicationConfigurationUpdate":{
           "shape":"ZeppelinApplicationConfigurationUpdate",
           "documentation":"<p>Updates to the configuration of a Managed Service for Apache Flink Studio notebook.</p>"
+        },
+        "ApplicationEncryptionConfigurationUpdate":{
+          "shape":"ApplicationEncryptionConfigurationUpdate",
+          "documentation":"<p>Represents an update for encryption at rest configuration.</p>"
         }
       },
       "documentation":"<p>Describes updates to an application's configuration.</p>"
@@ -1055,7 +1076,7 @@
         },
         "ApplicationVersionCreateTimestamp":{
           "shape":"Timestamp",
-          "documentation":"The current timestamp when the application version was created."
+          "documentation":"<p>The timestamp that indicates when the application version was created.</p>"
         },
         "ConditionalToken":{
           "shape":"ConditionalToken",
@@ -1072,6 +1093,51 @@
       },
       "documentation":"<p>Describes the application, including the application Amazon Resource Name (ARN), status, latest version, and input and output configurations.</p>"
     },
+    "ApplicationEncryptionConfiguration":{
+      "type":"structure",
+      "required":["KeyType"],
+      "members":{
+        "KeyId":{
+          "shape":"KeyId",
+          "documentation":"<p>The key ARN, key ID, alias ARN, or alias name of the KMS key used for encryption at rest.</p>"
+        },
+        "KeyType":{
+          "shape":"KeyType",
+          "documentation":"<p>Specifies the type of key used for encryption at rest.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the configuration to manage encryption at rest.</p>"
+    },
+    "ApplicationEncryptionConfigurationDescription":{
+      "type":"structure",
+      "required":["KeyType"],
+      "members":{
+        "KeyId":{
+          "shape":"KeyId",
+          "documentation":"<p>The key ARN, key ID, alias ARN, or alias name of the KMS key used for encryption at rest.</p>"
+        },
+        "KeyType":{
+          "shape":"KeyType",
+          "documentation":"<p>Specifies the type of key used for encryption at rest.</p>"
+        }
+      },
+      "documentation":"<p>Describes the encryption at rest configuration.</p>"
+    },
+    "ApplicationEncryptionConfigurationUpdate":{
+      "type":"structure",
+      "required":["KeyTypeUpdate"],
+      "members":{
+        "KeyIdUpdate":{
+          "shape":"KeyId",
+          "documentation":"<p>The key ARN, key ID, alias ARN, or alias name of the KMS key to be used for encryption at rest.</p>"
+        },
+        "KeyTypeUpdate":{
+          "shape":"KeyType",
+          "documentation":"<p>Specifies the type of key to be used for encryption at rest.</p>"
+        }
+      },
+      "documentation":"<p>Describes configuration updates to encryption at rest.</p>"
+    },
     "ApplicationMaintenanceConfigurationDescription":{
       "type":"structure",
       "required":[
@@ -1122,7 +1188,7 @@
     },
     "ApplicationName":{
       "type":"string",
-      "documentation":"The name of the application",
+      "documentation":"<p>The name of the application.</p>",
       "max":128,
       "min":1,
       "pattern":"[a-zA-Z0-9_.-]+"
@@ -1134,15 +1200,15 @@
         "OperationId":{"shape":"OperationId"},
         "StartTime":{
           "shape":"Timestamp",
-          "documentation":"The timestamp at which the operation was created"
+          "documentation":"<p>The timestamp that indicates when the operation was created.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
-          "documentation":"The timestamp at which the operation finished for the application"
+          "documentation":"<p>The timestamp that indicates when the operation finished.</p>"
         },
         "OperationStatus":{"shape":"OperationStatus"}
       },
-      "documentation":"Provides a description of the operation, such as the type and status of operation"
+      "documentation":"<p>A description of the aplication operation that provides information about the updates that were made to the application.</p>"
     },
     "ApplicationOperationInfoDetails":{
       "type":"structure",
@@ -1156,22 +1222,22 @@
         "Operation":{"shape":"Operation"},
         "StartTime":{
           "shape":"Timestamp",
-          "documentation":"The timestamp at which the operation was created"
+          "documentation":"<p>The timestamp that indicates when the operation was created.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
-          "documentation":"The timestamp at which the operation finished for the application"
+          "documentation":"<p>The timestamp that indicates when the operation finished.</p>"
         },
         "OperationStatus":{"shape":"OperationStatus"},
         "ApplicationVersionChangeDetails":{"shape":"ApplicationVersionChangeDetails"},
         "OperationFailureDetails":{"shape":"OperationFailureDetails"}
       },
-      "documentation":"Provides a description of the operation, such as the operation-type and status"
+      "documentation":"<p>A description of the application operation that provides information about the updates that were made to the application.</p>"
     },
     "ApplicationOperationInfoList":{
       "type":"list",
       "member":{"shape":"ApplicationOperationInfo"},
-      "documentation":"List of ApplicationOperationInfo for an application"
+      "documentation":"<p>A list of <code>ApplicationOperationInfo</code> objects that are associated with an application.</p>"
     },
     "ApplicationRestoreConfiguration":{
       "type":"structure",
@@ -1292,10 +1358,10 @@
       "members":{
         "RollbackEnabled":{
           "shape":"BooleanObject",
-          "documentation":"Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application"
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
         }
       },
-      "documentation":"Describes system rollback configuration for a Managed Service for Apache Flink application"
+      "documentation":"<p>Describes the system rollback configuration for a Managed Service for Apache Flink application.</p>"
     },
     "ApplicationSystemRollbackConfigurationDescription":{
       "type":"structure",
@@ -1303,10 +1369,10 @@
       "members":{
         "RollbackEnabled":{
           "shape":"BooleanObject",
-          "documentation":"Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application"
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
         }
       },
-      "documentation":"Describes system rollback configuration for a Managed Service for Apache Flink application"
+      "documentation":"<p>Describes the system rollback configuration for a Managed Service for Apache Flink application.</p>"
     },
     "ApplicationSystemRollbackConfigurationUpdate":{
       "type":"structure",
@@ -1314,10 +1380,10 @@
       "members":{
         "RollbackEnabledUpdate":{
           "shape":"BooleanObject",
-          "documentation":"Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application"
+          "documentation":"<p>Describes whether system rollbacks are enabled for a Managed Service for Apache Flink application.</p>"
         }
       },
-      "documentation":"Describes system rollback configuration for a Managed Service for Apache Flink application"
+      "documentation":"<p>Describes the system rollback configuration for a Managed Service for Apache Flink application.</p>"
     },
     "ApplicationVersionChangeDetails":{
       "type":"structure",
@@ -1328,14 +1394,14 @@
       "members":{
         "ApplicationVersionUpdatedFrom":{
           "shape":"ApplicationVersionId",
-          "documentation":"The operation was performed on this version of the application"
+          "documentation":"<p>The new version that the application was updated to.</p>"
         },
         "ApplicationVersionUpdatedTo":{
           "shape":"ApplicationVersionId",
-          "documentation":"The operation execution resulted in the transition to the following version of the application"
+          "documentation":"<p>The version that the operation execution applied to the applicartion.</p>"
         }
       },
-      "documentation":"Contains information about the application version changes due to an operation"
+      "documentation":"<p>Contains information about the version changes that the operation applied to the application.</p>"
     },
     "ApplicationVersionId":{
       "type":"long",
@@ -1458,10 +1524,10 @@
         },
         "MinPauseBetweenCheckpoints":{
           "shape":"MinPauseBetweenCheckpoints",
-          "documentation":"<p>Describes the minimum time in milliseconds after a checkpoint operation completes that a new checkpoint operation can start. If a checkpoint operation takes longer than the <code>CheckpointInterval</code>, the application otherwise performs continual checkpoint operations. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/ops/state/large_state_tuning/#tuning-checkpointing\"> Tuning Checkpointing</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink Documentation</a>.</p> <note> <p>If <code>CheckpointConfiguration.ConfigurationType</code> is <code>DEFAULT</code>, the application will use a <code>MinPauseBetweenCheckpoints</code> value of 5000, even if this value is set using this API or in application code.</p> </note>"
+          "documentation":"<p>Describes the minimum time in milliseconds after a checkpoint operation completes that a new checkpoint operation can start. If a checkpoint operation takes longer than the <code>CheckpointInterval</code>, the application otherwise performs continual checkpoint operations. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/ops/state/large_state_tuning/#tuning-checkpointing\"> Tuning Checkpointing</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink Documentation</a>.</p> <note> <p>If <code>CheckpointConfiguration.ConfigurationType</code> is <code>DEFAULT</code>, the application will use a <code>MinPauseBetweenCheckpoints</code> value of 5000, even if this value is set using this API or in application code.</p> </note>"
         }
       },
-      "documentation":"<p>Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/fault-tolerance/checkpointing/#enabling-and-configuring-checkpointing\"> Checkpoints for Fault Tolerance</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink Documentation</a>.</p>"
+      "documentation":"<p>Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/fault-tolerance/checkpointing/#enabling-and-configuring-checkpointing\"> Checkpoints for Fault Tolerance</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink Documentation</a>.</p>"
     },
     "CheckpointConfigurationDescription":{
       "type":"structure",
@@ -1773,8 +1839,7 @@
     },
     "CreateApplicationSnapshotResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomArtifactConfiguration":{
       "type":"structure",
@@ -1865,7 +1930,7 @@
         },
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking DeleteApplicationCloudWatchLoggingOption request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -1993,8 +2058,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationSnapshotRequest":{
       "type":"structure",
@@ -2020,8 +2084,7 @@
     },
     "DeleteApplicationSnapshotResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationVpcConfigurationRequest":{
       "type":"structure",
@@ -2061,7 +2124,7 @@
         },
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking DeleteApplicationVpcConfiguration request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -2107,14 +2170,14 @@
         "ApplicationName":{"shape":"ApplicationName"},
         "OperationId":{"shape":"OperationId"}
       },
-      "documentation":"Request for information about a specific operation performed on a Managed Service for Apache Flink application"
+      "documentation":"<p>A request for information about a specific operation that was performed on a Managed Service for Apache Flink application.</p>"
     },
     "DescribeApplicationOperationResponse":{
       "type":"structure",
       "members":{
         "ApplicationOperationInfoDetails":{"shape":"ApplicationOperationInfoDetails"}
       },
-      "documentation":"Provides details of the operation corresponding to the operation-ID on a Managed Service for Apache Flink application"
+      "documentation":"<p>Provides details of the operation that corresponds to the operation ID on a Managed Service for Apache Flink application.</p>"
     },
     "DescribeApplicationRequest":{
       "type":"structure",
@@ -2285,12 +2348,12 @@
       "members":{
         "ErrorString":{"shape":"ErrorString"}
       },
-      "documentation":"Provides a description of the operation failure error"
+      "documentation":"<p>A description of the error that caused an operation to fail.</p>"
     },
     "ErrorMessage":{"type":"string"},
     "ErrorString":{
       "type":"string",
-      "documentation":"Error message resulting in failure of the operation",
+      "documentation":"<p>An error message that is returned when an operation fails.</p>",
       "max":512,
       "min":1
     },
@@ -2304,7 +2367,7 @@
       "members":{
         "CheckpointConfiguration":{
           "shape":"CheckpointConfiguration",
-          "documentation":"<p>Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/fault-tolerance/checkpointing/#enabling-and-configuring-checkpointing\"> Checkpoints for Fault Tolerance</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink Documentation</a>. </p>"
+          "documentation":"<p>Describes an application's checkpointing configuration. Checkpointing is the process of persisting application state for fault tolerance. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/datastream/fault-tolerance/checkpointing/#enabling-and-configuring-checkpointing\"> Checkpoints for Fault Tolerance</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink Documentation</a>. </p>"
         },
         "MonitoringConfiguration":{
           "shape":"MonitoringConfiguration",
@@ -2334,7 +2397,7 @@
         },
         "JobPlanDescription":{
           "shape":"JobPlanDescription",
-          "documentation":"<p>The job plan for an application. For more information about the job plan, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/internals/job_scheduling.html\">Jobs and Scheduling</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink Documentation</a>. To retrieve the job plan for the application, use the <a>DescribeApplicationRequest$IncludeAdditionalDetails</a> parameter of the <a>DescribeApplication</a> operation.</p>"
+          "documentation":"<p>The job plan for an application. For more information about the job plan, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/internals/job_scheduling.html\">Jobs and Scheduling</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink Documentation</a>. To retrieve the job plan for the application, use the <a>DescribeApplicationRequest$IncludeAdditionalDetails</a> parameter of the <a>DescribeApplication</a> operation.</p>"
         }
       },
       "documentation":"<p>Describes configuration parameters for a Managed Service for Apache Flink application.</p>"
@@ -2362,7 +2425,7 @@
       "members":{
         "AllowNonRestoredState":{
           "shape":"BooleanObject",
-          "documentation":"<p>When restoring from a snapshot, specifies whether the runtime is allowed to skip a state that cannot be mapped to the new program. This will happen if the program is updated between snapshots to remove stateful parameters, and state data in the snapshot no longer corresponds to valid application data. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/ops/state/savepoints/#allowing-non-restored-state\"> Allowing Non-Restored State</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink documentation</a>.</p> <note> <p>This value defaults to <code>false</code>. If you update your application without specifying this parameter, <code>AllowNonRestoredState</code> will be set to <code>false</code>, even if it was previously set to <code>true</code>.</p> </note>"
+          "documentation":"<p>When restoring from a snapshot, specifies whether the runtime is allowed to skip a state that cannot be mapped to the new program. This will happen if the program is updated between snapshots to remove stateful parameters, and state data in the snapshot no longer corresponds to valid application data. For more information, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/ops/state/savepoints/#allowing-non-restored-state\"> Allowing Non-Restored State</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink documentation</a>.</p> <note> <p>This value defaults to <code>false</code>. If you update your application without specifying this parameter, <code>AllowNonRestoredState</code> will be set to <code>false</code>, even if it was previously set to <code>true</code>.</p> </note>"
         }
       },
       "documentation":"<p>Describes the starting parameters for a Managed Service for Apache Flink application.</p>"
@@ -2711,6 +2774,18 @@
       "documentation":"<p>For a SQL-based Kinesis Data Analytics application, provides additional mapping information when JSON is the record format on the streaming source.</p>"
     },
     "JobPlanDescription":{"type":"string"},
+    "KeyId":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "KeyType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED_KEY",
+        "CUSTOMER_MANAGED_KEY"
+      ]
+    },
     "KinesisAnalyticsARN":{
       "type":"string",
       "max":2048,
@@ -2912,7 +2987,7 @@
     },
     "ListApplicationOperationsInputLimit":{
       "type":"integer",
-      "documentation":"Limit on the number of records returned in the response",
+      "documentation":"<p>The limit on the number of records to be returned in the response.</p>",
       "max":50,
       "min":1
     },
@@ -2926,7 +3001,7 @@
         "Operation":{"shape":"Operation"},
         "OperationStatus":{"shape":"OperationStatus"}
       },
-      "documentation":"Request to list operations performed on an application"
+      "documentation":"<p>A request for a list of operations performed on an application.</p>"
     },
     "ListApplicationOperationsResponse":{
       "type":"structure",
@@ -2934,7 +3009,7 @@
         "ApplicationOperationInfoList":{"shape":"ApplicationOperationInfoList"},
         "NextToken":{"shape":"NextToken"}
       },
-      "documentation":"Response with the list of operations for an application"
+      "documentation":"<p>A response that returns a list of operations for an application.</p>"
     },
     "ListApplicationSnapshotsRequest":{
       "type":"structure",
@@ -3199,7 +3274,7 @@
     },
     "NextToken":{
       "type":"string",
-      "documentation":"If a previous command returned a pagination token, pass it into this value to retrieve the next set of results",
+      "documentation":"<p>A pagination token that can be used in a subsequent request.</p>",
       "max":512,
       "min":1
     },
@@ -3210,7 +3285,7 @@
     },
     "Operation":{
       "type":"string",
-      "documentation":"Type of operation performed on an application",
+      "documentation":"<p>The type of operation that is performed on an application.</p>",
       "max":64,
       "min":1
     },
@@ -3219,21 +3294,21 @@
       "members":{
         "RollbackOperationId":{
           "shape":"OperationId",
-          "documentation":"Provides the operation ID of a system-rollback operation executed due to failure in the current operation"
+          "documentation":"<p>The rollback operation ID of the system-rollback operation that executed due to failure in the current operation.</p>"
         },
         "ErrorInfo":{"shape":"ErrorInfo"}
       },
-      "documentation":"Provides a description of the operation failure"
+      "documentation":"<p>Provides a description of the operation failure.</p>"
     },
     "OperationId":{
       "type":"string",
-      "documentation":"Identifier of the Operation",
+      "documentation":"<p>The operation ID of the request.</p>",
       "max":64,
       "min":1
     },
     "OperationStatus":{
       "type":"string",
-      "documentation":"Status of the operation performed on an application",
+      "documentation":"<p>The status of the operation.</p>",
       "enum":[
         "IN_PROGRESS",
         "CANCELLED",
@@ -3358,7 +3433,7 @@
         },
         "Parallelism":{
           "shape":"Parallelism",
-          "documentation":"<p>Describes the initial number of parallel tasks that a Managed Service for Apache Flink application can perform. If <code>AutoScalingEnabled</code> is set to True, Managed Service for Apache Flink increases the <code>CurrentParallelism</code> value in response to application load. The service can increase the <code>CurrentParallelism</code> value up to the maximum parallelism, which is <code>ParalellismPerKPU</code> times the maximum KPUs for the application. The maximum KPUs for an application is 32 by default, and can be increased by requesting a limit increase. If application load is reduced, the service can reduce the <code>CurrentParallelism</code> value down to the <code>Parallelism</code> setting.</p>"
+          "documentation":"<p>Describes the initial number of parallel tasks that a Managed Service for Apache Flink application can perform. If <code>AutoScalingEnabled</code> is set to True, Managed Service for Apache Flink increases the <code>CurrentParallelism</code> value in response to application load. The service can increase the <code>CurrentParallelism</code> value up to the maximum parallelism, which is <code>ParalellismPerKPU</code> times the maximum KPUs for the application. The maximum KPUs for an application is 64 by default, and can be increased by requesting a limit increase. If application load is reduced, the service can reduce the <code>CurrentParallelism</code> value down to the <code>Parallelism</code> setting.</p>"
         },
         "ParallelismPerKPU":{
           "shape":"ParallelismPerKPU",
@@ -3369,7 +3444,7 @@
           "documentation":"<p>Describes whether the Managed Service for Apache Flink service can increase the parallelism of the application in response to increased throughput.</p>"
         }
       },
-      "documentation":"<p>Describes parameters for how a Managed Service for Apache Flink application executes multiple tasks simultaneously. For more information about parallelism, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/dev/parallel.html\">Parallel Execution</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.19/\">Apache Flink Documentation</a>.</p>"
+      "documentation":"<p>Describes parameters for how a Managed Service for Apache Flink application executes multiple tasks simultaneously. For more information about parallelism, see <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/dev/parallel.html\">Parallel Execution</a> in the <a href=\"https://nightlies.apache.org/flink/flink-docs-release-1.20/\">Apache Flink Documentation</a>.</p>"
     },
     "ParallelismConfigurationDescription":{
       "type":"structure",
@@ -3380,7 +3455,7 @@
         },
         "Parallelism":{
           "shape":"Parallelism",
-          "documentation":"<p>Describes the initial number of parallel tasks that a Managed Service for Apache Flink application can perform. If <code>AutoScalingEnabled</code> is set to True, then Managed Service for Apache Flink can increase the <code>CurrentParallelism</code> value in response to application load. The service can increase <code>CurrentParallelism</code> up to the maximum parallelism, which is <code>ParalellismPerKPU</code> times the maximum KPUs for the application. The maximum KPUs for an application is 32 by default, and can be increased by requesting a limit increase. If application load is reduced, the service can reduce the <code>CurrentParallelism</code> value down to the <code>Parallelism</code> setting.</p>"
+          "documentation":"<p>Describes the initial number of parallel tasks that a Managed Service for Apache Flink application can perform. If <code>AutoScalingEnabled</code> is set to True, then Managed Service for Apache Flink can increase the <code>CurrentParallelism</code> value in response to application load. The service can increase <code>CurrentParallelism</code> up to the maximum parallelism, which is <code>ParalellismPerKPU</code> times the maximum KPUs for the application. The maximum KPUs for an application is 64 by default, and can be increased by requesting a limit increase. If application load is reduced, the service can reduce the <code>CurrentParallelism</code> value down to the <code>Parallelism</code> setting.</p>"
         },
         "ParallelismPerKPU":{
           "shape":"ParallelismPerKPU",
@@ -3714,7 +3789,7 @@
         "ApplicationDetail":{"shape":"ApplicationDetail"},
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking RollbackApplication request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -4000,6 +4075,10 @@
         "RuntimeEnvironment":{
           "shape":"RuntimeEnvironment",
           "documentation":"<p>The Flink Runtime for the application snapshot.</p>"
+        },
+        "ApplicationEncryptionConfigurationDescription":{
+          "shape":"ApplicationEncryptionConfigurationDescription",
+          "documentation":"<p>Specifies the encryption settings of data at rest for the application snapshot.</p>"
         }
       },
       "documentation":"<p>Provides details about a snapshot of application state.</p>"
@@ -4140,7 +4219,7 @@
       "members":{
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking StartApplication request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -4163,7 +4242,7 @@
       "members":{
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking StopApplication request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
@@ -4219,8 +4298,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4290,8 +4368,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationMaintenanceConfigurationRequest":{
       "type":"structure",
@@ -4371,7 +4448,7 @@
         },
         "OperationId":{
           "shape":"OperationId",
-          "documentation":"Operation ID for tracking UpdateApplication request"
+          "documentation":"<p>The operation ID that can be used to track the request.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisvideo/2017-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kinesisvideo/2017-09-30/service-2.json 2.31.35-1/awscli/botocore/data/kinesisvideo/2017-09-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/kinesisvideo/2017-09-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kinesisvideo/2017-09-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2017-09-30",
     "endpointPrefix":"kinesisvideo",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Kinesis Video",
     "serviceFullName":"Amazon Kinesis Video Streams",
     "serviceId":"Kinesis Video",
     "signatureVersion":"v4",
-    "uid":"kinesisvideo-2017-09-30"
+    "uid":"kinesisvideo-2017-09-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateSignalingChannel":{
@@ -755,8 +757,7 @@
     },
     "DeleteEdgeConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSignalingChannelInput":{
       "type":"structure",
@@ -774,8 +775,7 @@
     },
     "DeleteSignalingChannelOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStreamInput":{
       "type":"structure",
@@ -793,8 +793,7 @@
     },
     "DeleteStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletionConfig":{
       "type":"structure",
@@ -2018,8 +2017,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagStreamInput":{
       "type":"structure",
@@ -2041,8 +2039,7 @@
     },
     "TagStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2080,8 +2077,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UntagStreamInput":{
       "type":"structure",
@@ -2103,8 +2099,7 @@
     },
     "UntagStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDataRetentionInput":{
       "type":"structure",
@@ -2145,8 +2140,7 @@
     },
     "UpdateDataRetentionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateImageGenerationConfigurationInput":{
       "type":"structure",
@@ -2167,8 +2161,7 @@
     },
     "UpdateImageGenerationConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMediaStorageConfigurationInput":{
       "type":"structure",
@@ -2189,8 +2182,7 @@
     },
     "UpdateMediaStorageConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotificationConfigurationInput":{
       "type":"structure",
@@ -2211,8 +2203,7 @@
     },
     "UpdateNotificationConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSignalingChannelInput":{
       "type":"structure",
@@ -2237,8 +2228,7 @@
     },
     "UpdateSignalingChannelOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStreamInput":{
       "type":"structure",
@@ -2268,8 +2258,7 @@
     },
     "UpdateStreamOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UploaderConfig":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kms/2014-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/kms/2014-11-01/service-2.json 2.31.35-1/awscli/botocore/data/kms/2014-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/kms/2014-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/kms/2014-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Cancels the deletion of a KMS key. When this operation succeeds, the key state of the KMS key is <code>Disabled</code>. To enable the KMS key, use <a>EnableKey</a>. </p> <p>For more information about scheduling and canceling deletion of a KMS key, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html\">Deleting KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CancelKeyDeletion</a> (key policy)</p> <p> <b>Related operations</b>: <a>ScheduleKeyDeletion</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Cancels the deletion of a KMS key. When this operation succeeds, the key state of the KMS key is <code>Disabled</code>. To enable the KMS key, use <a>EnableKey</a>. </p> <p>For more information about scheduling and canceling deletion of a KMS key, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html\">Deleting KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CancelKeyDeletion</a> (key policy)</p> <p> <b>Related operations</b>: <a>ScheduleKeyDeletion</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ConnectCustomKeyStore":{
       "name":"ConnectCustomKeyStore",
@@ -47,7 +47,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"CloudHsmClusterInvalidConfigurationException"}
       ],
-      "documentation":"<p>Connects or reconnects a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a> to its backing key store. For an CloudHSM key store, <code>ConnectCustomKeyStore</code> connects the key store to its associated CloudHSM cluster. For an external key store, <code>ConnectCustomKeyStore</code> connects the key store to the external key store proxy that communicates with your external key manager.</p> <p>The custom key store must be connected before you can create KMS keys in the key store or use the KMS keys it contains. You can disconnect and reconnect a custom key store at any time.</p> <p>The connection process for a custom key store can take an extended amount of time to complete. This operation starts the connection process, but it does not wait for it to complete. When it succeeds, this operation quickly returns an HTTP 200 response and a JSON object with no properties. However, this response does not indicate that the custom key store is connected. To get the connection state of the custom key store, use the <a>DescribeCustomKeyStores</a> operation.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>The <code>ConnectCustomKeyStore</code> operation might fail for various reasons. To find the reason, use the <a>DescribeCustomKeyStores</a> operation and see the <code>ConnectionErrorCode</code> in the response. For help interpreting the <code>ConnectionErrorCode</code>, see <a>CustomKeyStoresListEntry</a>.</p> <p>To fix the failure, use the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store, correct the error, use the <a>UpdateCustomKeyStore</a> operation if necessary, and then use <code>ConnectCustomKeyStore</code> again.</p> <p> <b>CloudHSM key store</b> </p> <p>During the connection process for an CloudHSM key store, KMS finds the CloudHSM cluster that is associated with the custom key store, creates the connection infrastructure, connects to the cluster, logs into the CloudHSM client as the <code>kmsuser</code> CU, and rotates its password.</p> <p>To connect an CloudHSM key store, its associated CloudHSM cluster must have at least one active HSM. To get the number of active HSMs in a cluster, use the <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html\">DescribeClusters</a> operation. To add HSMs to the cluster, use the <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_CreateHsm.html\">CreateHsm</a> operation. Also, the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-concepts.html#concept-kmsuser\"> <code>kmsuser</code> crypto user</a> (CU) must not be logged into the cluster. This prevents KMS from using this account to log in.</p> <p>If you are having trouble connecting or disconnecting a CloudHSM key store, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting an CloudHSM key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>External key store</b> </p> <p>When you connect an external key store that uses public endpoint connectivity, KMS tests its ability to communicate with your external key manager by sending a request via the external key store proxy.</p> <p>When you connect to an external key store that uses VPC endpoint service connectivity, KMS establishes the networking elements that it needs to communicate with your external key manager via the external key store proxy. This includes creating an interface endpoint to the VPC endpoint service and a private hosted zone for traffic between KMS and the VPC endpoint service.</p> <p>To connect an external key store, KMS must be able to connect to the external key store proxy, the external key store proxy must be able to communicate with your external key manager, and the external key manager must be available for cryptographic operations.</p> <p>If you are having trouble connecting or disconnecting an external key store, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ConnectCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Connects or reconnects a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a> to its backing key store. For an CloudHSM key store, <code>ConnectCustomKeyStore</code> connects the key store to its associated CloudHSM cluster. For an external key store, <code>ConnectCustomKeyStore</code> connects the key store to the external key store proxy that communicates with your external key manager.</p> <p>The custom key store must be connected before you can create KMS keys in the key store or use the KMS keys it contains. You can disconnect and reconnect a custom key store at any time.</p> <p>The connection process for a custom key store can take an extended amount of time to complete. This operation starts the connection process, but it does not wait for it to complete. When it succeeds, this operation quickly returns an HTTP 200 response and a JSON object with no properties. However, this response does not indicate that the custom key store is connected. To get the connection state of the custom key store, use the <a>DescribeCustomKeyStores</a> operation.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>The <code>ConnectCustomKeyStore</code> operation might fail for various reasons. To find the reason, use the <a>DescribeCustomKeyStores</a> operation and see the <code>ConnectionErrorCode</code> in the response. For help interpreting the <code>ConnectionErrorCode</code>, see <a>CustomKeyStoresListEntry</a>.</p> <p>To fix the failure, use the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store, correct the error, use the <a>UpdateCustomKeyStore</a> operation if necessary, and then use <code>ConnectCustomKeyStore</code> again.</p> <p> <b>CloudHSM key store</b> </p> <p>During the connection process for an CloudHSM key store, KMS finds the CloudHSM cluster that is associated with the custom key store, creates the connection infrastructure, connects to the cluster, logs into the CloudHSM client as the <code>kmsuser</code> CU, and rotates its password.</p> <p>To connect an CloudHSM key store, its associated CloudHSM cluster must have at least one active HSM. To get the number of active HSMs in a cluster, use the <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html\">DescribeClusters</a> operation. To add HSMs to the cluster, use the <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_CreateHsm.html\">CreateHsm</a> operation. Also, the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html#concept-kmsuser\"> <code>kmsuser</code> crypto user</a> (CU) must not be logged into the cluster. This prevents KMS from using this account to log in.</p> <p>If you are having trouble connecting or disconnecting a CloudHSM key store, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting an CloudHSM key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>External key store</b> </p> <p>When you connect an external key store that uses public endpoint connectivity, KMS tests its ability to communicate with your external key manager by sending a request via the external key store proxy.</p> <p>When you connect to an external key store that uses VPC endpoint service connectivity, KMS establishes the networking elements that it needs to communicate with your external key manager via the external key store proxy. This includes creating an interface endpoint to the VPC endpoint service and a private hosted zone for traffic between KMS and the VPC endpoint service.</p> <p>To connect an external key store, KMS must be able to connect to the external key store proxy, the external key store proxy must be able to communicate with your external key manager, and the external key manager must be available for cryptographic operations.</p> <p>If you are having trouble connecting or disconnecting an external key store, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ConnectCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "CreateAlias":{
       "name":"CreateAlias",
@@ -65,7 +65,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Creates a friendly name for a KMS key. </p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>You can use an alias to identify a KMS key in the KMS console, in the <a>DescribeKey</a> operation and in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a>, such as <a>Encrypt</a> and <a>GenerateDataKey</a>. You can also change the KMS key that's associated with the alias (<a>UpdateAlias</a>) or delete the alias (<a>DeleteAlias</a>) at any time. These operations don't affect the underlying KMS key. </p> <p>You can associate the alias with any customer managed key in the same Amazon Web Services Region. Each alias is associated with only one KMS key at a time, but a KMS key can have multiple aliases. A valid KMS key is required. You can't create an alias without a KMS key.</p> <p>The alias must be unique in the account and Region, but you can have aliases with the same name in different Regions. For detailed information about aliases, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html\">Using aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation does not return a response. To get the alias that you created, use the <a>ListAliases</a> operation.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on an alias in a different Amazon Web Services account.</p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateAlias</a> on the KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Creates a friendly name for a KMS key. </p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>You can use an alias to identify a KMS key in the KMS console, in the <a>DescribeKey</a> operation and in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a>, such as <a>Encrypt</a> and <a>GenerateDataKey</a>. You can also change the KMS key that's associated with the alias (<a>UpdateAlias</a>) or delete the alias (<a>DeleteAlias</a>) at any time. These operations don't affect the underlying KMS key. </p> <p>You can associate the alias with any customer managed key in the same Amazon Web Services Region. Each alias is associated with only one KMS key at a time, but a KMS key can have multiple aliases. A valid KMS key is required. You can't create an alias without a KMS key.</p> <p>The alias must be unique in the account and Region, but you can have aliases with the same name in different Regions. For detailed information about aliases, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html\">Aliases in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation does not return a response. To get the alias that you created, use the <a>ListAliases</a> operation.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on an alias in a different Amazon Web Services account.</p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateAlias</a> on the KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/alias-access.html\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "CreateCustomKeyStore":{
       "name":"CreateCustomKeyStore",
@@ -94,7 +94,7 @@
         {"shape":"XksProxyInvalidResponseException"},
         {"shape":"XksProxyInvalidConfigurationException"}
       ],
-      "documentation":"<p>Creates a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a> backed by a key store that you own and manage. When you use a KMS key in a custom key store for a cryptographic operation, the cryptographic operation is actually performed in your key store using your keys. KMS supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a> backed by an <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/userguide/clusters.html\">CloudHSM cluster</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a> backed by an external key store proxy and external key manager outside of Amazon Web Services.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>Before you create the custom key store, the required elements must be in place and operational. We recommend that you use the test tools that KMS provides to verify the configuration your external key store proxy. For details about the required elements and verification tests, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-keystore.html#before-keystore\">Assemble the prerequisites (for CloudHSM key stores)</a> or <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-xks-keystore.html#xks-requirements\">Assemble the prerequisites (for external key stores)</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>To create a custom key store, use the following parameters.</p> <ul> <li> <p>To create an CloudHSM key store, specify the <code>CustomKeyStoreName</code>, <code>CloudHsmClusterId</code>, <code>KeyStorePassword</code>, and <code>TrustAnchorCertificate</code>. The <code>CustomKeyStoreType</code> parameter is optional for CloudHSM key stores. If you include it, set it to the default value, <code>AWS_CLOUDHSM</code>. For help with failures, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting an CloudHSM key store</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> <li> <p>To create an external key store, specify the <code>CustomKeyStoreName</code> and a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>. Also, specify values for <code>XksProxyConnectivity</code>, <code>XksProxyAuthenticationCredential</code>, <code>XksProxyUriEndpoint</code>, and <code>XksProxyUriPath</code>. If your <code>XksProxyConnectivity</code> value is <code>VPC_ENDPOINT_SERVICE</code>, specify the <code>XksProxyVpcEndpointServiceName</code> parameter. For help with failures, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> </ul> <note> <p>For external key stores:</p> <p>Some external key managers provide a simpler method for creating an external key store. For details, see your external key manager documentation.</p> <p>When creating an external key store in the KMS console, you can upload a JSON-based proxy configuration file with the desired values. You cannot use a proxy configuration with the <code>CreateCustomKeyStore</code> operation. However, you can use the values in the file to help you determine the correct values for the <code>CreateCustomKeyStore</code> parameters.</p> </note> <p>When the operation completes successfully, it returns the ID of the new custom key store. Before you can use your new custom key store, you need to use the <a>ConnectCustomKeyStore</a> operation to connect a new CloudHSM key store to its CloudHSM cluster, or to connect a new external key store to the external key store proxy for your external key manager. Even if you are not going to use your custom key store immediately, you might want to connect it to verify that all settings are correct and then disconnect it until you are ready to use it.</p> <p>For help with failures, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting a custom key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateCustomKeyStore</a> (IAM policy).</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Creates a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a> backed by a key store that you own and manage. When you use a KMS key in a custom key store for a cryptographic operation, the cryptographic operation is actually performed in your key store using your keys. KMS supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a> backed by an <a href=\"https://docs.aws.amazon.com/cloudhsm/latest/userguide/clusters.html\">CloudHSM cluster</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a> backed by an external key store proxy and external key manager outside of Amazon Web Services.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>Before you create the custom key store, the required elements must be in place and operational. We recommend that you use the test tools that KMS provides to verify the configuration your external key store proxy. For details about the required elements and verification tests, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-keystore.html#before-keystore\">Assemble the prerequisites (for CloudHSM key stores)</a> or <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-xks-keystore.html#xks-requirements\">Assemble the prerequisites (for external key stores)</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>To create a custom key store, use the following parameters.</p> <ul> <li> <p>To create an CloudHSM key store, specify the <code>CustomKeyStoreName</code>, <code>CloudHsmClusterId</code>, <code>KeyStorePassword</code>, and <code>TrustAnchorCertificate</code>. The <code>CustomKeyStoreType</code> parameter is optional for CloudHSM key stores. If you include it, set it to the default value, <code>AWS_CLOUDHSM</code>. For help with failures, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting an CloudHSM key store</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> <li> <p>To create an external key store, specify the <code>CustomKeyStoreName</code> and a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>. Also, specify values for <code>XksProxyConnectivity</code>, <code>XksProxyAuthenticationCredential</code>, <code>XksProxyUriEndpoint</code>, and <code>XksProxyUriPath</code>. If your <code>XksProxyConnectivity</code> value is <code>VPC_ENDPOINT_SERVICE</code>, specify the <code>XksProxyVpcEndpointServiceName</code> parameter. For help with failures, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> </ul> <note> <p>For external key stores:</p> <p>Some external key managers provide a simpler method for creating an external key store. For details, see your external key manager documentation.</p> <p>When creating an external key store in the KMS console, you can upload a JSON-based proxy configuration file with the desired values. You cannot use a proxy configuration with the <code>CreateCustomKeyStore</code> operation. However, you can use the values in the file to help you determine the correct values for the <code>CreateCustomKeyStore</code> parameters.</p> </note> <p>When the operation completes successfully, it returns the ID of the new custom key store. Before you can use your new custom key store, you need to use the <a>ConnectCustomKeyStore</a> operation to connect a new CloudHSM key store to its CloudHSM cluster, or to connect a new external key store to the external key store proxy for your external key manager. Even if you are not going to use your custom key store immediately, you might want to connect it to verify that all settings are correct and then disconnect it until you are ready to use it.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateCustomKeyStore</a> (IAM policy).</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "CreateGrant":{
       "name":"CreateGrant",
@@ -115,7 +115,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Adds a grant to a KMS key. </p> <p>A <i>grant</i> is a policy instrument that allows Amazon Web Services principals to use KMS keys in cryptographic operations. It also can allow them to view a KMS key (<a>DescribeKey</a>) and create and manage grants. When authorizing access to a KMS key, grants are considered along with key policies and IAM policies. Grants are often used for temporary permissions because you can create one, use its permissions, and delete it without changing your key policies or IAM policies. </p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of working with grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-grants.html\">Programming grants</a>. </p> <p>The <code>CreateGrant</code> operation returns a <code>GrantToken</code> and a <code>GrantId</code>.</p> <ul> <li> <p>When you create, retire, or revoke a grant, there might be a brief delay, usually less than five minutes, until the grant is available throughout KMS. This state is known as <i>eventual consistency</i>. Once the grant has achieved eventual consistency, the grantee principal can use the permissions in the grant without identifying the grant. </p> <p>However, to use the permissions in the grant immediately, use the <code>GrantToken</code> that <code>CreateGrant</code> returns. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> </li> <li> <p>The <code>CreateGrant</code> operation also returns a <code>GrantId</code>. You can use the <code>GrantId</code> and a key identifier to identify the grant in the <a>RetireGrant</a> and <a>RevokeGrant</a> operations. To find the grant ID, use the <a>ListGrants</a> or <a>ListRetirableGrants</a> operations.</p> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateGrant</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Adds a grant to a KMS key. </p> <p>A <i>grant</i> is a policy instrument that allows Amazon Web Services principals to use KMS keys in cryptographic operations. It also can allow them to view a KMS key (<a>DescribeKey</a>) and create and manage grants. When authorizing access to a KMS key, grants are considered along with key policies and IAM policies. Grants are often used for temporary permissions because you can create one, use its permissions, and delete it without changing your key policies or IAM policies. </p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of creating grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_CreateGrant_section.html\">Use CreateGrant with an Amazon Web Services SDK or CLI</a>. </p> <p>The <code>CreateGrant</code> operation returns a <code>GrantToken</code> and a <code>GrantId</code>.</p> <ul> <li> <p>When you create, retire, or revoke a grant, there might be a brief delay, usually less than five minutes, until the grant is available throughout KMS. This state is known as <i>eventual consistency</i>. Once the grant has achieved eventual consistency, the grantee principal can use the permissions in the grant without identifying the grant. </p> <p>However, to use the permissions in the grant immediately, use the <code>GrantToken</code> that <code>CreateGrant</code> returns. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> </li> <li> <p>The <code>CreateGrant</code> operation also returns a <code>GrantId</code>. You can use the <code>GrantId</code> and a key identifier to identify the grant in the <a>RetireGrant</a> and <a>RevokeGrant</a> operations. To find the grant ID, use the <a>ListGrants</a> or <a>ListRetirableGrants</a> operations.</p> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateGrant</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "CreateKey":{
       "name":"CreateKey",
@@ -140,7 +140,7 @@
         {"shape":"XksKeyAlreadyInUseException"},
         {"shape":"XksKeyNotFoundException"}
       ],
-      "documentation":"<p>Creates a unique customer managed <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys\">KMS key</a> in your Amazon Web Services account and Region. You can use a KMS key in cryptographic operations, such as encryption and signing. Some Amazon Web Services services let you use KMS keys that you create and manage to protect your service resources.</p> <p>A KMS key is a logical representation of a cryptographic key. In addition to the key material used in cryptographic operations, a KMS key includes metadata, such as the key ID, key policy, creation date, description, and key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html\">Managing keys</a> in the <i>Key Management Service Developer Guide</i> </p> <p>Use the parameters of <code>CreateKey</code> to specify the type of KMS key, the source of its key material, its key policy, description, tags, and other properties.</p> <note> <p>KMS has replaced the term <i>customer master key (CMK)</i> with <i>KMS key</i> and <i>KMS key</i>. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term.</p> </note> <p>To create different types of KMS keys, use the following guidance:</p> <dl> <dt>Symmetric encryption KMS key</dt> <dd> <p>By default, <code>CreateKey</code> creates a symmetric encryption KMS key with key material that KMS generates. This is the basic and most widely used type of KMS key, and provides the best performance.</p> <p>To create a symmetric encryption KMS key, you don't need to specify any parameters. The default value for <code>KeySpec</code>, <code>SYMMETRIC_DEFAULT</code>, the default value for <code>KeyUsage</code>, <code>ENCRYPT_DECRYPT</code>, and the default value for <code>Origin</code>, <code>AWS_KMS</code>, create a symmetric encryption KMS key with KMS key material.</p> <p>If you need a key for basic encryption and decryption or you are creating a KMS key to protect your resources in an Amazon Web Services service, create a symmetric encryption KMS key. The key material in a symmetric encryption key never leaves KMS unencrypted. You can use a symmetric encryption KMS key to encrypt and decrypt data up to 4,096 bytes, but they are typically used to generate data keys and data keys pairs. For details, see <a>GenerateDataKey</a> and <a>GenerateDataKeyPair</a>.</p> <p> </p> </dd> <dt>Asymmetric KMS keys</dt> <dd> <p>To create an asymmetric KMS key, use the <code>KeySpec</code> parameter to specify the type of key material in the KMS key. Then, use the <code>KeyUsage</code> parameter to determine whether the KMS key will be used to encrypt and decrypt or sign and verify. You can't change these properties after the KMS key is created.</p> <p>Asymmetric KMS keys contain an RSA key pair, Elliptic Curve (ECC) key pair, or an SM2 key pair (China Regions only). The private key in an asymmetric KMS key never leaves KMS unencrypted. However, you can use the <a>GetPublicKey</a> operation to download the public key so it can be used outside of KMS. Each KMS key can have only one key usage. KMS keys with RSA key pairs can be used to encrypt and decrypt data or sign and verify messages (but not both). KMS keys with NIST-recommended ECC key pairs can be used to sign and verify messages or derive shared secrets (but not both). KMS keys with <code>ECC_SECG_P256K1</code> can be used only to sign and verify messages. KMS keys with SM2 key pairs (China Regions only) can be used to either encrypt and decrypt data, sign and verify messages, or derive shared secrets (you must choose one key usage type). For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dt>HMAC KMS key</dt> <dd> <p>To create an HMAC KMS key, set the <code>KeySpec</code> parameter to a key spec value for HMAC KMS keys. Then set the <code>KeyUsage</code> parameter to <code>GENERATE_VERIFY_MAC</code>. You must set the key usage even though <code>GENERATE_VERIFY_MAC</code> is the only valid key usage value for HMAC KMS keys. You can't change these properties after the KMS key is created.</p> <p>HMAC KMS keys are symmetric keys that never leave KMS unencrypted. You can use HMAC keys to generate (<a>GenerateMac</a>) and verify (<a>VerifyMac</a>) HMAC codes for messages up to 4096 bytes.</p> <p> </p> </dd> <dt>Multi-Region primary keys</dt> <dt>Imported key material</dt> <dd> <p>To create a multi-Region <i>primary key</i> in the local Amazon Web Services Region, use the <code>MultiRegion</code> parameter with a value of <code>True</code>. To create a multi-Region <i>replica key</i>, that is, a KMS key with the same key ID and key material as a primary key, but in a different Amazon Web Services Region, use the <a>ReplicateKey</a> operation. To change a replica key to a primary key, and its primary key to a replica key, use the <a>UpdatePrimaryRegion</a> operation.</p> <p>You can create multi-Region KMS keys for all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't create multi-Region keys in a custom key store.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dd> <p>To import your own key material into a KMS key, begin by creating a KMS key with no key material. To do this, use the <code>Origin</code> parameter of <code>CreateKey</code> with a value of <code>EXTERNAL</code>. Next, use <a>GetParametersForImport</a> operation to get a public key and import token. Use the wrapping public key to encrypt your key material. Then, use <a>ImportKeyMaterial</a> with your import token to import the key material. For step-by-step instructions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing Key Material</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>You can import key material into KMS keys of all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't import key material into a KMS key in a custom key store.</p> <p>To create a multi-Region primary key with imported key material, use the <code>Origin</code> parameter of <code>CreateKey</code> with a value of <code>EXTERNAL</code> and the <code>MultiRegion</code> parameter with a value of <code>True</code>. To create replicas of the multi-Region primary key, use the <a>ReplicateKey</a> operation. For instructions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-import.html \">Importing key material into multi-Region keys</a>. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dt>Custom key store</dt> <dd> <p>A <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a> lets you protect your Amazon Web Services resources using keys in a backing key store that you own and manage. When you request a cryptographic operation with a KMS key in a custom key store, the operation is performed in the backing key store using its cryptographic keys.</p> <p>KMS supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a> backed by an CloudHSM cluster and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a> backed by an external key manager outside of Amazon Web Services. When you create a KMS key in an CloudHSM key store, KMS generates an encryption key in the CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you specify an existing encryption key in the external key manager.</p> <note> <p>Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation.</p> </note> <p>Before you create a KMS key in a custom key store, the <code>ConnectionState</code> of the key store must be <code>CONNECTED</code>. To connect the custom key store, use the <a>ConnectCustomKeyStore</a> operation. To find the <code>ConnectionState</code>, use the <a>DescribeCustomKeyStores</a> operation.</p> <p>To create a KMS key in a custom key store, use the <code>CustomKeyStoreId</code>. Use the default <code>KeySpec</code> value, <code>SYMMETRIC_DEFAULT</code>, and the default <code>KeyUsage</code> value, <code>ENCRYPT_DECRYPT</code> to create a symmetric encryption key. No other key type is supported in a custom key store.</p> <p>To create a KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key store</a>, use the <code>Origin</code> parameter with a value of <code>AWS_CLOUDHSM</code>. The CloudHSM cluster that is associated with the custom key store must have at least two active HSMs in different Availability Zones in the Amazon Web Services Region.</p> <p>To create a KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key store</a>, use the <code>Origin</code> parameter with a value of <code>EXTERNAL_KEY_STORE</code> and an <code>XksKeyId</code> parameter that identifies an existing external key.</p> <note> <p>Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation.</p> </note> </dd> </dl> <p> <b>Cross-account use</b>: No. You cannot use this operation to create a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateKey</a> (IAM policy). To use the <code>Tags</code> parameter, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> (IAM policy). For examples and information about related permissions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html#iam-policy-example-create-key\">Allow a user to create KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DescribeKey</a> </p> </li> <li> <p> <a>ListKeys</a> </p> </li> <li> <p> <a>ScheduleKeyDeletion</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Creates a unique customer managed <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys\">KMS key</a> in your Amazon Web Services account and Region. You can use a KMS key in cryptographic operations, such as encryption and signing. Some Amazon Web Services services let you use KMS keys that you create and manage to protect your service resources.</p> <p>A KMS key is a logical representation of a cryptographic key. In addition to the key material used in cryptographic operations, a KMS key includes metadata, such as the key ID, key policy, creation date, description, and key state. </p> <p>Use the parameters of <code>CreateKey</code> to specify the type of KMS key, the source of its key material, its key policy, description, tags, and other properties.</p> <note> <p>KMS has replaced the term <i>customer master key (CMK)</i> with <i>Key Management Service key</i> and <i>KMS key</i>. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term.</p> </note> <p>To create different types of KMS keys, use the following guidance:</p> <dl> <dt>Symmetric encryption KMS key</dt> <dd> <p>By default, <code>CreateKey</code> creates a symmetric encryption KMS key with key material that KMS generates. This is the basic and most widely used type of KMS key, and provides the best performance.</p> <p>To create a symmetric encryption KMS key, you don't need to specify any parameters. The default value for <code>KeySpec</code>, <code>SYMMETRIC_DEFAULT</code>, the default value for <code>KeyUsage</code>, <code>ENCRYPT_DECRYPT</code>, and the default value for <code>Origin</code>, <code>AWS_KMS</code>, create a symmetric encryption KMS key with KMS key material.</p> <p>If you need a key for basic encryption and decryption or you are creating a KMS key to protect your resources in an Amazon Web Services service, create a symmetric encryption KMS key. The key material in a symmetric encryption key never leaves KMS unencrypted. You can use a symmetric encryption KMS key to encrypt and decrypt data up to 4,096 bytes, but they are typically used to generate data keys and data keys pairs. For details, see <a>GenerateDataKey</a> and <a>GenerateDataKeyPair</a>.</p> <p> </p> </dd> <dt>Asymmetric KMS keys</dt> <dd> <p>To create an asymmetric KMS key, use the <code>KeySpec</code> parameter to specify the type of key material in the KMS key. Then, use the <code>KeyUsage</code> parameter to determine whether the KMS key will be used to encrypt and decrypt or sign and verify. You can't change these properties after the KMS key is created.</p> <p>Asymmetric KMS keys contain an RSA key pair, Elliptic Curve (ECC) key pair, ML-DSA key pair or an SM2 key pair (China Regions only). The private key in an asymmetric KMS key never leaves KMS unencrypted. However, you can use the <a>GetPublicKey</a> operation to download the public key so it can be used outside of KMS. Each KMS key can have only one key usage. KMS keys with RSA key pairs can be used to encrypt and decrypt data or sign and verify messages (but not both). KMS keys with NIST-standard ECC key pairs can be used to sign and verify messages or derive shared secrets (but not both). KMS keys with <code>ECC_SECG_P256K1</code> can be used only to sign and verify messages. KMS keys with ML-DSA key pairs can be used to sign and verify messages. KMS keys with SM2 key pairs (China Regions only) can be used to either encrypt and decrypt data, sign and verify messages, or derive shared secrets (you must choose one key usage type). For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dt>HMAC KMS key</dt> <dd> <p>To create an HMAC KMS key, set the <code>KeySpec</code> parameter to a key spec value for HMAC KMS keys. Then set the <code>KeyUsage</code> parameter to <code>GENERATE_VERIFY_MAC</code>. You must set the key usage even though <code>GENERATE_VERIFY_MAC</code> is the only valid key usage value for HMAC KMS keys. You can't change these properties after the KMS key is created.</p> <p>HMAC KMS keys are symmetric keys that never leave KMS unencrypted. You can use HMAC keys to generate (<a>GenerateMac</a>) and verify (<a>VerifyMac</a>) HMAC codes for messages up to 4096 bytes.</p> <p> </p> </dd> <dt>Multi-Region primary keys</dt> <dt>Imported key material</dt> <dd> <p>To create a multi-Region <i>primary key</i> in the local Amazon Web Services Region, use the <code>MultiRegion</code> parameter with a value of <code>True</code>. To create a multi-Region <i>replica key</i>, that is, a KMS key with the same key ID and key material as a primary key, but in a different Amazon Web Services Region, use the <a>ReplicateKey</a> operation. To change a replica key to a primary key, and its primary key to a replica key, use the <a>UpdatePrimaryRegion</a> operation.</p> <p>You can create multi-Region KMS keys for all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't create multi-Region keys in a custom key store.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dd> <p>To import your own key material into a KMS key, begin by creating a KMS key with no key material. To do this, use the <code>Origin</code> parameter of <code>CreateKey</code> with a value of <code>EXTERNAL</code>. Next, use <a>GetParametersForImport</a> operation to get a public key and import token. Use the wrapping public key to encrypt your key material. Then, use <a>ImportKeyMaterial</a> with your import token to import the key material. For step-by-step instructions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing Key Material</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>You can import key material into KMS keys of all supported KMS key types: symmetric encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS keys. You can also create multi-Region keys with imported key material. However, you can't import key material into a KMS key in a custom key store.</p> <p>To create a multi-Region primary key with imported key material, use the <code>Origin</code> parameter of <code>CreateKey</code> with a value of <code>EXTERNAL</code> and the <code>MultiRegion</code> parameter with a value of <code>True</code>. To create replicas of the multi-Region primary key, use the <a>ReplicateKey</a> operation. For instructions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-create-cmk.html \">Importing key material step 1</a>. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> </p> </dd> <dt>Custom key store</dt> <dd> <p>A <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a> lets you protect your Amazon Web Services resources using keys in a backing key store that you own and manage. When you request a cryptographic operation with a KMS key in a custom key store, the operation is performed in the backing key store using its cryptographic keys.</p> <p>KMS supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a> backed by an CloudHSM cluster and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a> backed by an external key manager outside of Amazon Web Services. When you create a KMS key in an CloudHSM key store, KMS generates an encryption key in the CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you specify an existing encryption key in the external key manager.</p> <note> <p>Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation.</p> </note> <p>Before you create a KMS key in a custom key store, the <code>ConnectionState</code> of the key store must be <code>CONNECTED</code>. To connect the custom key store, use the <a>ConnectCustomKeyStore</a> operation. To find the <code>ConnectionState</code>, use the <a>DescribeCustomKeyStores</a> operation.</p> <p>To create a KMS key in a custom key store, use the <code>CustomKeyStoreId</code>. Use the default <code>KeySpec</code> value, <code>SYMMETRIC_DEFAULT</code>, and the default <code>KeyUsage</code> value, <code>ENCRYPT_DECRYPT</code> to create a symmetric encryption key. No other key type is supported in a custom key store.</p> <p>To create a KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-cmk-keystore.html\">CloudHSM key store</a>, use the <code>Origin</code> parameter with a value of <code>AWS_CLOUDHSM</code>. The CloudHSM cluster that is associated with the custom key store must have at least two active HSMs in different Availability Zones in the Amazon Web Services Region.</p> <p>To create a KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-xks-keys.html\">external key store</a>, use the <code>Origin</code> parameter with a value of <code>EXTERNAL_KEY_STORE</code> and an <code>XksKeyId</code> parameter that identifies an existing external key.</p> <note> <p>Some external key managers provide a simpler method for creating a KMS key in an external key store. For details, see your external key manager documentation.</p> </note> </dd> </dl> <p> <b>Cross-account use</b>: No. You cannot use this operation to create a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:CreateKey</a> (IAM policy). To use the <code>Tags</code> parameter, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> (IAM policy). For examples and information about related permissions, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/customer-managed-policies.html#iam-policy-example-create-key\">Allow a user to create KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DescribeKey</a> </p> </li> <li> <p> <a>ListKeys</a> </p> </li> <li> <p> <a>ScheduleKeyDeletion</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "Decrypt":{
       "name":"Decrypt",
@@ -163,7 +163,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Decrypts ciphertext that was encrypted by a KMS key using any of the following operations:</p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> </ul> <p>You can use this operation to decrypt ciphertext that was encrypted under a symmetric encryption KMS key or an asymmetric encryption KMS key. When the KMS key is asymmetric, you must specify the KMS key and the encryption algorithm that was used to encrypt the ciphertext. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The <code>Decrypt</code> operation also decrypts ciphertext that was encrypted outside of KMS by the public key in an KMS asymmetric KMS key. However, it cannot decrypt symmetric ciphertext produced by other libraries, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a>. These libraries return a ciphertext format that is incompatible with KMS.</p> <p>If the ciphertext was encrypted under a symmetric encryption KMS key, the <code>KeyId</code> parameter is optional. KMS can get this information from metadata that it adds to the symmetric ciphertext blob. This feature adds durability to your implementation by ensuring that authorized users can decrypt ciphertext decades after it was encrypted, even if they've lost track of the key ID. However, specifying the KMS key is always recommended as a best practice. When you use the <code>KeyId</code> parameter to specify a KMS key, KMS only uses the KMS key you specify. If the ciphertext was encrypted under a different KMS key, the <code>Decrypt</code> operation fails. This practice ensures that you use the KMS key that you intend.</p> <p>Whenever possible, use key policies to give users permission to call the <code>Decrypt</code> operation on a particular KMS key, instead of using &amp;IAM; policies. Otherwise, you might create an &amp;IAM; policy that gives the user <code>Decrypt</code> permission on all KMS keys. This user could decrypt ciphertext that was encrypted by KMS keys in other accounts if the key policy for the cross-account KMS key permits it. If you must use an IAM policy for <code>Decrypt</code> permissions, limit the user to particular KMS keys or particular trusted accounts. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html#iam-policies-best-practices\">Best practices for IAM policies</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <code>Decrypt</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>Decrypt</code> for a Nitro enclave, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the enclave. Instead of the plaintext data, the response includes the plaintext data encrypted with the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. If you use the <code>KeyId</code> parameter to identify a KMS key in a different Amazon Web Services account, specify the key ARN or the alias ARN of the KMS key.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Decrypt</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>ReEncrypt</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Decrypts ciphertext that was encrypted by a KMS key using any of the following operations:</p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> </ul> <p>You can use this operation to decrypt ciphertext that was encrypted under a symmetric encryption KMS key or an asymmetric encryption KMS key. When the KMS key is asymmetric, you must specify the KMS key and the encryption algorithm that was used to encrypt the ciphertext. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The <code>Decrypt</code> operation also decrypts ciphertext that was encrypted outside of KMS by the public key in an KMS asymmetric KMS key. However, it cannot decrypt symmetric ciphertext produced by other libraries, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a>. These libraries return a ciphertext format that is incompatible with KMS.</p> <p>If the ciphertext was encrypted under a symmetric encryption KMS key, the <code>KeyId</code> parameter is optional. KMS can get this information from metadata that it adds to the symmetric ciphertext blob. This feature adds durability to your implementation by ensuring that authorized users can decrypt ciphertext decades after it was encrypted, even if they've lost track of the key ID. However, specifying the KMS key is always recommended as a best practice. When you use the <code>KeyId</code> parameter to specify a KMS key, KMS only uses the KMS key you specify. If the ciphertext was encrypted under a different KMS key, the <code>Decrypt</code> operation fails. This practice ensures that you use the KMS key that you intend.</p> <p>Whenever possible, use key policies to give users permission to call the <code>Decrypt</code> operation on a particular KMS key, instead of using IAM policies. Otherwise, you might create an IAM policy that gives the user <code>Decrypt</code> permission on all KMS keys. This user could decrypt ciphertext that was encrypted by KMS keys in other accounts if the key policy for the cross-account KMS key permits it. If you must use an IAM policy for <code>Decrypt</code> permissions, limit the user to particular KMS keys or particular trusted accounts. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html#iam-policies-best-practices\">Best practices for IAM policies</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <code>Decrypt</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a> and NitroTPM, which provide attested environments in Amazon EC2. To call <code>Decrypt</code> for a Nitro enclave or NitroTPM, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the attested environment. Instead of the plaintext data, the response includes the plaintext data encrypted with the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. If you use the <code>KeyId</code> parameter to identify a KMS key in a different Amazon Web Services account, specify the key ARN or the alias ARN of the KMS key.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Decrypt</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>ReEncrypt</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DeleteAlias":{
       "name":"DeleteAlias",
@@ -178,7 +178,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Deletes the specified alias. </p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>Because an alias is not a property of a KMS key, you can delete and change the aliases of a KMS key without affecting the KMS key. Also, aliases do not appear in the response from the <a>DescribeKey</a> operation. To get the aliases of all KMS keys, use the <a>ListAliases</a> operation. </p> <p>Each KMS key can have multiple aliases. To change the alias of a KMS key, use <a>DeleteAlias</a> to delete the current alias and <a>CreateAlias</a> to create a new alias. To associate an existing alias with a different KMS key, call <a>UpdateAlias</a>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on an alias in a different Amazon Web Services account.</p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteAlias</a> on the KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes the specified alias. </p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>Because an alias is not a property of a KMS key, you can delete and change the aliases of a KMS key without affecting the KMS key. Also, aliases do not appear in the response from the <a>DescribeKey</a> operation. To get the aliases of all KMS keys, use the <a>ListAliases</a> operation. </p> <p>Each KMS key can have multiple aliases. To change the alias of a KMS key, use <a>DeleteAlias</a> to delete the current alias and <a>CreateAlias</a> to create a new alias. To associate an existing alias with a different KMS key, call <a>UpdateAlias</a>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on an alias in a different Amazon Web Services account.</p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteAlias</a> on the KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DeleteCustomKeyStore":{
       "name":"DeleteCustomKeyStore",
@@ -194,7 +194,7 @@
         {"shape":"CustomKeyStoreNotFoundException"},
         {"shape":"KMSInternalException"}
       ],
-      "documentation":"<p>Deletes a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. This operation does not affect any backing elements of the custom key store. It does not delete the CloudHSM cluster that is associated with an CloudHSM key store, or affect any users or keys in the cluster. For an external key store, it does not affect the external key store proxy, external key manager, or any external keys.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>The custom key store that you delete cannot contain any <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys\">KMS keys</a>. Before deleting the key store, verify that you will never need to use any of the KMS keys in the key store for any <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a>. Then, use <a>ScheduleKeyDeletion</a> to delete the KMS keys from the key store. After the required waiting period expires and all KMS keys are deleted from the custom key store, use <a>DisconnectCustomKeyStore</a> to disconnect the key store from KMS. Then, you can delete the custom key store.</p> <p>For keys in an CloudHSM key store, the <code>ScheduleKeyDeletion</code> operation makes a best effort to delete the key material from the associated cluster. However, you might need to manually <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html#fix-keystore-orphaned-key\">delete the orphaned key material</a> from the cluster and its backups. KMS never creates, manages, or deletes cryptographic keys in the external key manager associated with an external key store. You must manage them using your external key manager tools.</p> <p>Instead of deleting the custom key store, consider using the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store from its backing key store. While the key store is disconnected, you cannot create or use the KMS keys in the key store. But, you do not need to delete KMS keys and you can reconnect a disconnected custom key store at any time.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. This operation does not affect any backing elements of the custom key store. It does not delete the CloudHSM cluster that is associated with an CloudHSM key store, or affect any users or keys in the cluster. For an external key store, it does not affect the external key store proxy, external key manager, or any external keys.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>The custom key store that you delete cannot contain any <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys\">KMS keys</a>. Before deleting the key store, verify that you will never need to use any of the KMS keys in the key store for any <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a>. Then, use <a>ScheduleKeyDeletion</a> to delete the KMS keys from the key store. After the required waiting period expires and all KMS keys are deleted from the custom key store, use <a>DisconnectCustomKeyStore</a> to disconnect the key store from KMS. Then, you can delete the custom key store.</p> <p>For keys in an CloudHSM key store, the <code>ScheduleKeyDeletion</code> operation makes a best effort to delete the key material from the associated cluster. However, you might need to manually <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html#fix-keystore-orphaned-key\">delete the orphaned key material</a> from the cluster and its backups. KMS never creates, manages, or deletes cryptographic keys in the external key manager associated with an external key store. You must manage them using your external key manager tools.</p> <p>Instead of deleting the custom key store, consider using the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store from its backing key store. While the key store is disconnected, you cannot create or use the KMS keys in the key store. But, you do not need to delete KMS keys and you can reconnect a disconnected custom key store at any time.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DeleteImportedKeyMaterial":{
       "name":"DeleteImportedKeyMaterial",
@@ -203,6 +203,7 @@
         "requestUri":"/"
       },
       "input":{"shape":"DeleteImportedKeyMaterialRequest"},
+      "output":{"shape":"DeleteImportedKeyMaterialResponse"},
       "errors":[
         {"shape":"InvalidArnException"},
         {"shape":"UnsupportedOperationException"},
@@ -211,7 +212,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Deletes key material that was previously imported. This operation makes the specified KMS key temporarily unusable. To restore the usability of the KMS key, reimport the same key material. For more information about importing key material into KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing Key Material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When the specified KMS key is in the <code>PendingDeletion</code> state, this operation does not change the KMS key's state. Otherwise, it changes the KMS key's state to <code>PendingImport</code>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteImportedKeyMaterial</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetParametersForImport</a> </p> </li> <li> <p> <a>ImportKeyMaterial</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes key material that was previously imported. This operation makes the specified KMS key temporarily unusable. To restore the usability of the KMS key, reimport the same key material. For more information about importing key material into KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing Key Material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When the specified KMS key is in the <code>PendingDeletion</code> state, this operation does not change the KMS key's state. Otherwise, it changes the KMS key's state to <code>PendingImport</code>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeleteImportedKeyMaterial</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetParametersForImport</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>ImportKeyMaterial</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DeriveSharedSecret":{
       "name":"DeriveSharedSecret",
@@ -232,7 +233,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Derives a shared secret using a key agreement algorithm.</p> <note> <p>You must use an asymmetric NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) KMS key pair with a <code>KeyUsage</code> value of <code>KEY_AGREEMENT</code> to call DeriveSharedSecret.</p> </note> <p>DeriveSharedSecret uses the <a href=\"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf#page=60\">Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive</a> (ECDH) to establish a key agreement between two peers by deriving a shared secret from their elliptic curve public-private key pairs. You can use the raw shared secret that DeriveSharedSecret returns to derive a symmetric key that can encrypt and decrypt data that is sent between the two peers, or that can generate and verify HMACs. KMS recommends that you follow <a href=\"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf\">NIST recommendations for key derivation</a> when using the raw shared secret to derive a symmetric key.</p> <p>The following workflow demonstrates how to establish key agreement over an insecure communication channel using DeriveSharedSecret.</p> <ol> <li> <p> <b>Alice</b> calls <a>CreateKey</a> to create an asymmetric KMS key pair with a <code>KeyUsage</code> value of <code>KEY_AGREEMENT</code>.</p> <p>The asymmetric KMS key must use a NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) key spec.</p> </li> <li> <p> <b>Bob</b> creates an elliptic curve key pair.</p> <p>Bob can call <a>CreateKey</a> to create an asymmetric KMS key pair or generate a key pair outside of KMS. Bob's key pair must use the same NIST-recommended elliptic curve (ECC) or SM2 (China Regions ony) curve as Alice.</p> </li> <li> <p>Alice and Bob <b>exchange their public keys</b> through an insecure communication channel (like the internet).</p> <p>Use <a>GetPublicKey</a> to download the public key of your asymmetric KMS key pair.</p> <note> <p>KMS strongly recommends verifying that the public key you receive came from the expected party before using it to derive a shared secret.</p> </note> </li> <li> <p> <b>Alice</b> calls DeriveSharedSecret.</p> <p>KMS uses the private key from the KMS key pair generated in <b>Step 1</b>, Bob's public key, and the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to derive the shared secret. The private key in your KMS key pair never leaves KMS unencrypted. DeriveSharedSecret returns the raw shared secret.</p> </li> <li> <p> <b>Bob</b> uses the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to calculate the same raw secret using his private key and Alice's public key.</p> </li> </ol> <p>To derive a shared secret you must provide a key agreement algorithm, the private key of the caller's asymmetric NIST-recommended elliptic curve or SM2 (China Regions only) KMS key pair, and the public key from your peer's NIST-recommended elliptic curve or SM2 (China Regions only) key pair. The public key can be from another asymmetric KMS key pair or from a key pair generated outside of KMS, but both key pairs must be on the same elliptic curve.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeriveSharedSecret</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>GetPublicKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Derives a shared secret using a key agreement algorithm.</p> <note> <p>You must use an asymmetric NIST-standard elliptic curve (ECC) or SM2 (China Regions only) KMS key pair with a <code>KeyUsage</code> value of <code>KEY_AGREEMENT</code> to call DeriveSharedSecret.</p> </note> <p>DeriveSharedSecret uses the <a href=\"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf#page=60\">Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive</a> (ECDH) to establish a key agreement between two peers by deriving a shared secret from their elliptic curve public-private key pairs. You can use the raw shared secret that DeriveSharedSecret returns to derive a symmetric key that can encrypt and decrypt data that is sent between the two peers, or that can generate and verify HMACs. KMS recommends that you follow <a href=\"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf\">NIST recommendations for key derivation</a> when using the raw shared secret to derive a symmetric key.</p> <p>The following workflow demonstrates how to establish key agreement over an insecure communication channel using DeriveSharedSecret.</p> <ol> <li> <p> <b>Alice</b> calls <a>CreateKey</a> to create an asymmetric KMS key pair with a <code>KeyUsage</code> value of <code>KEY_AGREEMENT</code>.</p> <p>The asymmetric KMS key must use a NIST-standard elliptic curve (ECC) or SM2 (China Regions only) key spec.</p> </li> <li> <p> <b>Bob</b> creates an elliptic curve key pair.</p> <p>Bob can call <a>CreateKey</a> to create an asymmetric KMS key pair or generate a key pair outside of KMS. Bob's key pair must use the same NIST-standard elliptic curve (ECC) or SM2 (China Regions ony) curve as Alice.</p> </li> <li> <p>Alice and Bob <b>exchange their public keys</b> through an insecure communication channel (like the internet).</p> <p>Use <a>GetPublicKey</a> to download the public key of your asymmetric KMS key pair.</p> <note> <p>KMS strongly recommends verifying that the public key you receive came from the expected party before using it to derive a shared secret.</p> </note> </li> <li> <p> <b>Alice</b> calls DeriveSharedSecret.</p> <p>KMS uses the private key from the KMS key pair generated in <b>Step 1</b>, Bob's public key, and the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to derive the shared secret. The private key in your KMS key pair never leaves KMS unencrypted. DeriveSharedSecret returns the raw shared secret.</p> </li> <li> <p> <b>Bob</b> uses the Elliptic Curve Cryptography Cofactor Diffie-Hellman Primitive to calculate the same raw secret using his private key and Alice's public key.</p> </li> </ol> <p>To derive a shared secret you must provide a key agreement algorithm, the private key of the caller's asymmetric NIST-standard elliptic curve or SM2 (China Regions only) KMS key pair, and the public key from your peer's NIST-standard elliptic curve or SM2 (China Regions only) key pair. The public key can be from another asymmetric KMS key pair or from a key pair generated outside of KMS, but both key pairs must be on the same elliptic curve.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DeriveSharedSecret</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>GetPublicKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DescribeCustomKeyStores":{
       "name":"DescribeCustomKeyStores",
@@ -247,7 +248,7 @@
         {"shape":"InvalidMarkerException"},
         {"shape":"KMSInternalException"}
       ],
-      "documentation":"<p>Gets information about <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> in the account and Region.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>By default, this operation returns information about all custom key stores in the account and Region. To get only information about a particular custom key store, use either the <code>CustomKeyStoreName</code> or <code>CustomKeyStoreId</code> parameter (but not both).</p> <p>To determine whether the custom key store is connected to its CloudHSM cluster or external key store proxy, use the <code>ConnectionState</code> element in the response. If an attempt to connect the custom key store failed, the <code>ConnectionState</code> value is <code>FAILED</code> and the <code>ConnectionErrorCode</code> element in the response indicates the cause of the failure. For help interpreting the <code>ConnectionErrorCode</code>, see <a>CustomKeyStoresListEntry</a>.</p> <p>Custom key stores have a <code>DISCONNECTED</code> connection state if the key store has never been connected or you used the <a>DisconnectCustomKeyStore</a> operation to disconnect it. Otherwise, the connection state is CONNECTED. If your custom key store connection state is <code>CONNECTED</code> but you are having trouble using it, verify that the backing store is active and available. For an CloudHSM key store, verify that the associated CloudHSM cluster is active and contains the minimum number of HSMs required for the operation, if any. For an external key store, verify that the external key store proxy and its associated external key manager are reachable and enabled.</p> <p> For help repairing your CloudHSM key store, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting CloudHSM key stores</a>. For help repairing your external key store, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting external key stores</a>. Both topics are in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DescribeCustomKeyStores</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets information about <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key stores</a> in the account and Region.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>By default, this operation returns information about all custom key stores in the account and Region. To get only information about a particular custom key store, use either the <code>CustomKeyStoreName</code> or <code>CustomKeyStoreId</code> parameter (but not both).</p> <p>To determine whether the custom key store is connected to its CloudHSM cluster or external key store proxy, use the <code>ConnectionState</code> element in the response. If an attempt to connect the custom key store failed, the <code>ConnectionState</code> value is <code>FAILED</code> and the <code>ConnectionErrorCode</code> element in the response indicates the cause of the failure. For help interpreting the <code>ConnectionErrorCode</code>, see <a>CustomKeyStoresListEntry</a>.</p> <p>Custom key stores have a <code>DISCONNECTED</code> connection state if the key store has never been connected or you used the <a>DisconnectCustomKeyStore</a> operation to disconnect it. Otherwise, the connection state is CONNECTED. If your custom key store connection state is <code>CONNECTED</code> but you are having trouble using it, verify that the backing store is active and available. For an CloudHSM key store, verify that the associated CloudHSM cluster is active and contains the minimum number of HSMs required for the operation, if any. For an external key store, verify that the external key store proxy and its associated external key manager are reachable and enabled.</p> <p> For help repairing your CloudHSM key store, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html\">Troubleshooting CloudHSM key stores</a>. For help repairing your external key store, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/xks-troubleshooting.html\">Troubleshooting external key stores</a>. Both topics are in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DescribeCustomKeyStores</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DescribeKey":{
       "name":"DescribeKey",
@@ -263,7 +264,7 @@
         {"shape":"DependencyTimeoutException"},
         {"shape":"KMSInternalException"}
       ],
-      "documentation":"<p>Provides detailed information about a KMS key. You can run <code>DescribeKey</code> on a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a>.</p> <p>This detailed information includes the key ARN, creation date (and deletion date, if applicable), the key state, and the origin and expiration date (if any) of the key material. It includes fields, like <code>KeySpec</code>, that help you distinguish different types of KMS keys. It also displays the key usage (encryption, signing, or generating and verifying MACs) and the algorithms that the KMS key supports. </p> <p>For <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region keys</a>, <code>DescribeKey</code> displays the primary key and all related replica keys. For KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a>, it includes information about the key store, such as the key store ID and the CloudHSM cluster ID. For KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a>, it includes the custom key store ID and the ID of the external key.</p> <p> <code>DescribeKey</code> does not return the following information:</p> <ul> <li> <p>Aliases associated with the KMS key. To get this information, use <a>ListAliases</a>.</p> </li> <li> <p>Whether automatic key rotation is enabled on the KMS key. To get this information, use <a>GetKeyRotationStatus</a>. Also, some key states prevent a KMS key from being automatically rotated. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotate-keys-how-it-works\">How Automatic Key Rotation Works</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> <li> <p>Tags on the KMS key. To get this information, use <a>ListResourceTags</a>.</p> </li> <li> <p>Key policies and grants on the KMS key. To get this information, use <a>GetKeyPolicy</a> and <a>ListGrants</a>.</p> </li> </ul> <p>In general, <code>DescribeKey</code> is a non-mutating operation. It returns data about KMS keys, but doesn't change them. However, Amazon Web Services services use <code>DescribeKey</code> to create <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed keys</a> from a <i>predefined Amazon Web Services alias</i> with no key ID.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DescribeKey</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetKeyPolicy</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListKeys</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Provides detailed information about a KMS key. You can run <code>DescribeKey</code> on a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a> or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed key</a>.</p> <p>This detailed information includes the key ARN, creation date (and deletion date, if applicable), the key state, and the origin and expiration date (if any) of the key material. It includes fields, like <code>KeySpec</code>, that help you distinguish different types of KMS keys. It also displays the key usage (encryption, signing, or generating and verifying MACs) and the algorithms that the KMS key supports. </p> <p>For <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region keys</a>, <code>DescribeKey</code> displays the primary key and all related replica keys. For KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html\">CloudHSM key stores</a>, it includes information about the key store, such as the key store ID and the CloudHSM cluster ID. For KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key stores</a>, it includes the custom key store ID and the ID of the external key.</p> <p> <code>DescribeKey</code> does not return the following information:</p> <ul> <li> <p>Aliases associated with the KMS key. To get this information, use <a>ListAliases</a>.</p> </li> <li> <p>Whether automatic key rotation is enabled on the KMS key. To get this information, use <a>GetKeyRotationStatus</a>. Also, some key states prevent a KMS key from being automatically rotated. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotate-keys-how-it-works\">How key rotation works</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> <li> <p>Tags on the KMS key. To get this information, use <a>ListResourceTags</a>.</p> </li> <li> <p>Key policies and grants on the KMS key. To get this information, use <a>GetKeyPolicy</a> and <a>ListGrants</a>.</p> </li> </ul> <p>In general, <code>DescribeKey</code> is a non-mutating operation. It returns data about KMS keys, but doesn't change them. However, Amazon Web Services services use <code>DescribeKey</code> to create <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed keys</a> from a <i>predefined Amazon Web Services alias</i> with no key ID.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DescribeKey</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetKeyPolicy</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListKeys</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DisableKey":{
       "name":"DisableKey",
@@ -279,7 +280,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Sets the state of a KMS key to disabled. This change temporarily prevents use of the KMS key for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a>. </p> <p>For more information about how key state affects the use of a KMS key, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisableKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>EnableKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Sets the state of a KMS key to disabled. This change temporarily prevents use of the KMS key for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For more information about how key state affects the use of a KMS key, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisableKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>EnableKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DisableKeyRotation":{
       "name":"DisableKeyRotation",
@@ -297,7 +298,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Disables <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">automatic rotation of the key material</a> of the specified symmetric encryption KMS key.</p> <p>Automatic key rotation is supported only on symmetric encryption KMS keys. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key.</p> <p>You can enable (<a>EnableKeyRotation</a>) and disable automatic rotation of the key material in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed KMS keys</a>. Key material rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed KMS keys</a> is not configurable. KMS always rotates the key material for every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk\">Amazon Web Services owned KMS keys</a> varies.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years to every year. For details, see <a>EnableKeyRotation</a>.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisableKeyRotation</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Disables <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-enable-disable.html\">automatic rotation of the key material</a> of the specified symmetric encryption KMS key.</p> <p>Automatic key rotation is supported only on symmetric encryption KMS keys. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key.</p> <p>You can enable (<a>EnableKeyRotation</a>) and disable automatic rotation of the key material in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed KMS keys</a>. Key material rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed KMS keys</a> is not configurable. KMS always rotates the key material for every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key\">Amazon Web Services owned KMS keys</a> varies.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years to every year. For details, see <a>EnableKeyRotation</a>.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisableKeyRotation</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "DisconnectCustomKeyStore":{
       "name":"DisconnectCustomKeyStore",
@@ -312,7 +313,7 @@
         {"shape":"CustomKeyStoreNotFoundException"},
         {"shape":"KMSInternalException"}
       ],
-      "documentation":"<p>Disconnects the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a> from its backing key store. This operation disconnects an CloudHSM key store from its associated CloudHSM cluster or disconnects an external key store from the external key store proxy that communicates with your external key manager.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>While a custom key store is disconnected, you can manage the custom key store and its KMS keys, but you cannot create or use its KMS keys. You can reconnect the custom key store at any time.</p> <note> <p>While a custom key store is disconnected, all attempts to create KMS keys in the custom key store or to use existing KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> will fail. This action can prevent users from storing and accessing sensitive data.</p> </note> <p>When you disconnect a custom key store, its <code>ConnectionState</code> changes to <code>Disconnected</code>. To find the connection state of a custom key store, use the <a>DescribeCustomKeyStores</a> operation. To reconnect a custom key store, use the <a>ConnectCustomKeyStore</a> operation.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisconnectCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Disconnects the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a> from its backing key store. This operation disconnects an CloudHSM key store from its associated CloudHSM cluster or disconnects an external key store from the external key store proxy that communicates with your external key manager.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <p>While a custom key store is disconnected, you can manage the custom key store and its KMS keys, but you cannot create or use its KMS keys. You can reconnect the custom key store at any time.</p> <note> <p>While a custom key store is disconnected, all attempts to create KMS keys in the custom key store or to use existing KMS keys in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> will fail. This action can prevent users from storing and accessing sensitive data.</p> </note> <p>When you disconnect a custom key store, its <code>ConnectionState</code> changes to <code>Disconnected</code>. To find the connection state of a custom key store, use the <a>DescribeCustomKeyStores</a> operation. To reconnect a custom key store, use the <a>ConnectCustomKeyStore</a> operation.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:DisconnectCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>UpdateCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "EnableKey":{
       "name":"EnableKey",
@@ -329,7 +330,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Sets the key state of a KMS key to enabled. This allows you to use the KMS key for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:EnableKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>DisableKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Sets the key state of a KMS key to enabled. This allows you to use the KMS key for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:EnableKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>DisableKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "EnableKeyRotation":{
       "name":"EnableKeyRotation",
@@ -347,7 +348,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Enables <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-enable-disable\">automatic rotation of the key material</a> of the specified symmetric encryption KMS key. </p> <p>By default, when you enable automatic rotation of a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed KMS key</a>, KMS rotates the key material of the KMS key one year (approximately 365 days) from the enable date and every year thereafter. You can use the optional <code>RotationPeriodInDays</code> parameter to specify a custom rotation period when you enable key rotation, or you can use <code>RotationPeriodInDays</code> to modify the rotation period of a key that you previously enabled automatic key rotation on.</p> <p>You can monitor rotation of the key material for your KMS keys in CloudTrail and Amazon CloudWatch. To disable rotation of the key material in a customer managed KMS key, use the <a>DisableKeyRotation</a> operation. You can use the <a>GetKeyRotationStatus</a> operation to identify any in progress rotations. You can use the <a>ListKeyRotations</a> operation to view the details of completed rotations.</p> <p>Automatic key rotation is supported only on <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks\">symmetric encryption KMS keys</a>. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key. </p> <p>You cannot enable or disable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed KMS keys</a>. KMS always rotates the key material of Amazon Web Services managed keys every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk\">Amazon Web Services owned KMS keys</a> is managed by the Amazon Web Services service that owns the key.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years (approximately 1,095 days) to every year (approximately 365 days).</p> <p>New Amazon Web Services managed keys are automatically rotated one year after they are created, and approximately every year thereafter. </p> <p>Existing Amazon Web Services managed keys are automatically rotated one year after their most recent rotation, and every year thereafter.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:EnableKeyRotation</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> <note> <p>You can perform on-demand (<a>RotateKeyOnDemand</a>) rotation of the key material in customer managed KMS keys, regardless of whether or not automatic key rotation is enabled.</p> </note> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Enables <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-enable-disable.html\">automatic rotation of the key material</a> of the specified symmetric encryption KMS key. </p> <p>By default, when you enable automatic rotation of a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed KMS key</a>, KMS rotates the key material of the KMS key one year (approximately 365 days) from the enable date and every year thereafter. You can use the optional <code>RotationPeriodInDays</code> parameter to specify a custom rotation period when you enable key rotation, or you can use <code>RotationPeriodInDays</code> to modify the rotation period of a key that you previously enabled automatic key rotation on.</p> <p>You can monitor rotation of the key material for your KMS keys in CloudTrail and Amazon CloudWatch. To disable rotation of the key material in a customer managed KMS key, use the <a>DisableKeyRotation</a> operation. You can use the <a>GetKeyRotationStatus</a> operation to identify any in progress rotations. You can use the <a>ListKeyRotations</a> operation to view the details of completed rotations.</p> <p>Automatic key rotation is supported only on symmetric encryption KMS keys. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key. </p> <p>You cannot enable or disable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed KMS keys</a>. KMS always rotates the key material of Amazon Web Services managed keys every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key\">Amazon Web Services owned KMS keys</a> is managed by the Amazon Web Services service that owns the key.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years (approximately 1,095 days) to every year (approximately 365 days).</p> <p>New Amazon Web Services managed keys are automatically rotated one year after they are created, and approximately every year thereafter. </p> <p>Existing Amazon Web Services managed keys are automatically rotated one year after their most recent rotation, and every year thereafter.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:EnableKeyRotation</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> <note> <p>You can perform on-demand (<a>RotateKeyOnDemand</a>) rotation of the key material in customer managed KMS keys, regardless of whether or not automatic key rotation is enabled.</p> </note> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "Encrypt":{
       "name":"Encrypt",
@@ -368,7 +369,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Encrypts plaintext of up to 4,096 bytes using a KMS key. You can use a symmetric or asymmetric KMS key with a <code>KeyUsage</code> of <code>ENCRYPT_DECRYPT</code>.</p> <p>You can use this operation to encrypt small amounts of arbitrary data, such as a personal identifier or database password, or other sensitive information. You don't need to use the <code>Encrypt</code> operation to encrypt a data key. The <a>GenerateDataKey</a> and <a>GenerateDataKeyPair</a> operations return a plaintext data key and an encrypted copy of that data key.</p> <p>If you use a symmetric encryption KMS key, you can use an encryption context to add additional security to your encryption operation. If you specify an <code>EncryptionContext</code> when encrypting data, you must specify the same encryption context (a case-sensitive exact match) when decrypting the data. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>If you specify an asymmetric KMS key, you must also specify the encryption algorithm. The algorithm must be compatible with the KMS key spec.</p> <important> <p>When you use an asymmetric KMS key to encrypt or reencrypt data, be sure to record the KMS key and encryption algorithm that you choose. You will be required to provide the same KMS key and encryption algorithm when you decrypt the data. If the KMS key and algorithm do not match the values used to encrypt the data, the decrypt operation fails.</p> <p>You are not required to supply the key ID and encryption algorithm when you decrypt with symmetric encryption KMS keys because KMS stores this information in the ciphertext blob. KMS cannot store metadata in ciphertext generated with asymmetric keys. The standard format for asymmetric key ciphertext does not include configurable fields.</p> </important> <p>The maximum size of the data that you can encrypt varies with the type of KMS key and the encryption algorithm that you choose.</p> <ul> <li> <p>Symmetric encryption KMS keys</p> <ul> <li> <p> <code>SYMMETRIC_DEFAULT</code>: 4096 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_2048</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 214 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 190 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_3072</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 342 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 318 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_4096</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 470 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 446 bytes</p> </li> </ul> </li> <li> <p> <code>SM2PKE</code>: 1024 bytes (China Regions only)</p> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Encrypt</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Encrypts plaintext of up to 4,096 bytes using a KMS key. You can use a symmetric or asymmetric KMS key with a <code>KeyUsage</code> of <code>ENCRYPT_DECRYPT</code>.</p> <p>You can use this operation to encrypt small amounts of arbitrary data, such as a personal identifier or database password, or other sensitive information. You don't need to use the <code>Encrypt</code> operation to encrypt a data key. The <a>GenerateDataKey</a> and <a>GenerateDataKeyPair</a> operations return a plaintext data key and an encrypted copy of that data key.</p> <p>If you use a symmetric encryption KMS key, you can use an encryption context to add additional security to your encryption operation. If you specify an <code>EncryptionContext</code> when encrypting data, you must specify the same encryption context (a case-sensitive exact match) when decrypting the data. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>If you specify an asymmetric KMS key, you must also specify the encryption algorithm. The algorithm must be compatible with the KMS key spec.</p> <important> <p>When you use an asymmetric KMS key to encrypt or reencrypt data, be sure to record the KMS key and encryption algorithm that you choose. You will be required to provide the same KMS key and encryption algorithm when you decrypt the data. If the KMS key and algorithm do not match the values used to encrypt the data, the decrypt operation fails.</p> <p>You are not required to supply the key ID and encryption algorithm when you decrypt with symmetric encryption KMS keys because KMS stores this information in the ciphertext blob. KMS cannot store metadata in ciphertext generated with asymmetric keys. The standard format for asymmetric key ciphertext does not include configurable fields.</p> </important> <p>The maximum size of the data that you can encrypt varies with the type of KMS key and the encryption algorithm that you choose.</p> <ul> <li> <p>Symmetric encryption KMS keys</p> <ul> <li> <p> <code>SYMMETRIC_DEFAULT</code>: 4096 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_2048</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 214 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 190 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_3072</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 342 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 318 bytes</p> </li> </ul> </li> <li> <p> <code>RSA_4096</code> </p> <ul> <li> <p> <code>RSAES_OAEP_SHA_1</code>: 470 bytes</p> </li> <li> <p> <code>RSAES_OAEP_SHA_256</code>: 446 bytes</p> </li> </ul> </li> <li> <p> <code>SM2PKE</code>: 1024 bytes (China Regions only)</p> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Encrypt</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateDataKey":{
       "name":"GenerateDataKey",
@@ -389,7 +390,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Returns a unique symmetric data key for use outside of KMS. This operation returns a plaintext copy of the data key and a copy that is encrypted under a symmetric encryption KMS key that you specify. The bytes in the plaintext key are random; they are not related to the caller or the KMS key. You can use the plaintext key to encrypt your data outside of KMS and store the encrypted data key with the encrypted data.</p> <p>To generate a data key, specify the symmetric encryption KMS key that will be used to encrypt the data key. You cannot use an asymmetric KMS key to encrypt data keys. To get the type of your KMS key, use the <a>DescribeKey</a> operation.</p> <p>You must also specify the length of the data key. Use either the <code>KeySpec</code> or <code>NumberOfBytes</code> parameters (but not both). For 128-bit and 256-bit data keys, use the <code>KeySpec</code> parameter.</p> <p>To generate a 128-bit SM4 data key (China Regions only), specify a <code>KeySpec</code> value of <code>AES_128</code> or a <code>NumberOfBytes</code> value of <code>16</code>. The symmetric encryption key used in China Regions to encrypt your data key is an SM4 encryption key.</p> <p>To get only an encrypted copy of the data key, use <a>GenerateDataKeyWithoutPlaintext</a>. To generate an asymmetric data key pair, use the <a>GenerateDataKeyPair</a> or <a>GenerateDataKeyPairWithoutPlaintext</a> operation. To get a cryptographically secure random byte string, use <a>GenerateRandom</a>.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <code>GenerateDataKey</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateDataKey</code> for an Amazon Web Services Nitro enclave, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the enclave. <code>GenerateDataKey</code> returns a copy of the data key encrypted under the specified KMS key, as usual. But instead of a plaintext copy of the data key, the response includes a copy of the data key encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>..</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>How to use your data key</b> </p> <p>We recommend that you use the following pattern to encrypt data locally in your application. You can write your own code or use a client-side encryption library, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a>, the <a href=\"https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/\">Amazon DynamoDB Encryption Client</a>, or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a> to do these tasks for you.</p> <p>To encrypt data outside of KMS:</p> <ol> <li> <p>Use the <code>GenerateDataKey</code> operation to get a data key.</p> </li> <li> <p>Use the plaintext data key (in the <code>Plaintext</code> field of the response) to encrypt your data outside of KMS. Then erase the plaintext data key from memory.</p> </li> <li> <p>Store the encrypted data key (in the <code>CiphertextBlob</code> field of the response) with the encrypted data.</p> </li> </ol> <p>To decrypt data outside of KMS:</p> <ol> <li> <p>Use the <a>Decrypt</a> operation to decrypt the encrypted data key. The operation returns a plaintext copy of the data key.</p> </li> <li> <p>Use the plaintext data key to decrypt data outside of KMS, then erase the plaintext data key from memory.</p> </li> </ol> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKey</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns a unique symmetric data key for use outside of KMS. This operation returns a plaintext copy of the data key and a copy that is encrypted under a symmetric encryption KMS key that you specify. The bytes in the plaintext key are random; they are not related to the caller or the KMS key. You can use the plaintext key to encrypt your data outside of KMS and store the encrypted data key with the encrypted data.</p> <p>To generate a data key, specify the symmetric encryption KMS key that will be used to encrypt the data key. You cannot use an asymmetric KMS key to encrypt data keys. To get the type of your KMS key, use the <a>DescribeKey</a> operation.</p> <p>You must also specify the length of the data key. Use either the <code>KeySpec</code> or <code>NumberOfBytes</code> parameters (but not both). For 128-bit and 256-bit data keys, use the <code>KeySpec</code> parameter.</p> <p>To generate a 128-bit SM4 data key (China Regions only), specify a <code>KeySpec</code> value of <code>AES_128</code> or a <code>NumberOfBytes</code> value of <code>16</code>. The symmetric encryption key used in China Regions to encrypt your data key is an SM4 encryption key.</p> <p>To get only an encrypted copy of the data key, use <a>GenerateDataKeyWithoutPlaintext</a>. To generate an asymmetric data key pair, use the <a>GenerateDataKeyPair</a> or <a>GenerateDataKeyPairWithoutPlaintext</a> operation. To get a cryptographically secure random byte string, use <a>GenerateRandom</a>.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <code>GenerateDataKey</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateDataKey</code> for an Amazon Web Services Nitro enclave or NitroTPM, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the attested environment. <code>GenerateDataKey</code> returns a copy of the data key encrypted under the specified KMS key, as usual. But instead of a plaintext copy of the data key, the response includes a copy of the data key encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>How to use your data key</b> </p> <p>We recommend that you use the following pattern to encrypt data locally in your application. You can write your own code or use a client-side encryption library, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a>, the <a href=\"https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/\">Amazon DynamoDB Encryption Client</a>, or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a> to do these tasks for you.</p> <p>To encrypt data outside of KMS:</p> <ol> <li> <p>Use the <code>GenerateDataKey</code> operation to get a data key.</p> </li> <li> <p>Use the plaintext data key (in the <code>Plaintext</code> field of the response) to encrypt your data outside of KMS. Then erase the plaintext data key from memory.</p> </li> <li> <p>Store the encrypted data key (in the <code>CiphertextBlob</code> field of the response) with the encrypted data.</p> </li> </ol> <p>To decrypt data outside of KMS:</p> <ol> <li> <p>Use the <a>Decrypt</a> operation to decrypt the encrypted data key. The operation returns a plaintext copy of the data key.</p> </li> <li> <p>Use the plaintext data key to decrypt data outside of KMS, then erase the plaintext data key from memory.</p> </li> </ol> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKey</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateDataKeyPair":{
       "name":"GenerateDataKeyPair",
@@ -411,7 +412,7 @@
         {"shape":"UnsupportedOperationException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Returns a unique asymmetric data key pair for use outside of KMS. This operation returns a plaintext public key, a plaintext private key, and a copy of the private key that is encrypted under the symmetric encryption KMS key you specify. You can use the data key pair to perform asymmetric cryptography and implement digital signatures outside of KMS. The bytes in the keys are random; they are not related to the caller or to the KMS key that is used to encrypt the private key. </p> <p>You can use the public key that <code>GenerateDataKeyPair</code> returns to encrypt data or verify a signature outside of KMS. Then, store the encrypted private key with the data. When you are ready to decrypt data or sign a message, you can use the <a>Decrypt</a> operation to decrypt the encrypted private key.</p> <p>To generate a data key pair, you must specify a symmetric encryption KMS key to encrypt the private key in a data key pair. You cannot use an asymmetric KMS key or a KMS key in a custom key store. To get the type and origin of your KMS key, use the <a>DescribeKey</a> operation. </p> <p>Use the <code>KeyPairSpec</code> parameter to choose an RSA or Elliptic Curve (ECC) data key pair. In China Regions, you can also choose an SM2 data key pair. KMS recommends that you use ECC key pairs for signing, and use RSA and SM2 key pairs for either encryption or signing, but not both. However, KMS cannot enforce any restrictions on the use of data key pairs outside of KMS.</p> <p>If you are using the data key pair to encrypt data, or for any operation where you don't immediately need a private key, consider using the <a>GenerateDataKeyPairWithoutPlaintext</a> operation. <code>GenerateDataKeyPairWithoutPlaintext</code> returns a plaintext public key and an encrypted private key, but omits the plaintext private key that you need only to decrypt ciphertext or sign a message. Later, when you need to decrypt the data or sign a message, use the <a>Decrypt</a> operation to decrypt the encrypted private key in the data key pair.</p> <p> <code>GenerateDataKeyPair</code> returns a unique data key pair for each request. The bytes in the keys are random; they are not related to the caller or the KMS key that is used to encrypt the private key. The public key is a DER-encoded X.509 SubjectPublicKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>. The private key is a DER-encoded PKCS8 PrivateKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5958\">RFC 5958</a>.</p> <p> <code>GenerateDataKeyPair</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateDataKeyPair</code> for an Amazon Web Services Nitro enclave, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the enclave. <code>GenerateDataKeyPair</code> returns the public data key and a copy of the private data key encrypted under the specified KMS key, as usual. But instead of a plaintext copy of the private data key (<code>PrivateKeyPlaintext</code>), the response includes a copy of the private data key encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>..</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyPair</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns a unique asymmetric data key pair for use outside of KMS. This operation returns a plaintext public key, a plaintext private key, and a copy of the private key that is encrypted under the symmetric encryption KMS key you specify. You can use the data key pair to perform asymmetric cryptography and implement digital signatures outside of KMS. The bytes in the keys are random; they are not related to the caller or to the KMS key that is used to encrypt the private key. </p> <p>You can use the public key that <code>GenerateDataKeyPair</code> returns to encrypt data or verify a signature outside of KMS. Then, store the encrypted private key with the data. When you are ready to decrypt data or sign a message, you can use the <a>Decrypt</a> operation to decrypt the encrypted private key.</p> <p>To generate a data key pair, you must specify a symmetric encryption KMS key to encrypt the private key in a data key pair. You cannot use an asymmetric KMS key or a KMS key in a custom key store. To get the type and origin of your KMS key, use the <a>DescribeKey</a> operation. </p> <p>Use the <code>KeyPairSpec</code> parameter to choose an RSA or Elliptic Curve (ECC) data key pair. In China Regions, you can also choose an SM2 data key pair. KMS recommends that you use ECC key pairs for signing, and use RSA and SM2 key pairs for either encryption or signing, but not both. However, KMS cannot enforce any restrictions on the use of data key pairs outside of KMS.</p> <p>If you are using the data key pair to encrypt data, or for any operation where you don't immediately need a private key, consider using the <a>GenerateDataKeyPairWithoutPlaintext</a> operation. <code>GenerateDataKeyPairWithoutPlaintext</code> returns a plaintext public key and an encrypted private key, but omits the plaintext private key that you need only to decrypt ciphertext or sign a message. Later, when you need to decrypt the data or sign a message, use the <a>Decrypt</a> operation to decrypt the encrypted private key in the data key pair.</p> <p> <code>GenerateDataKeyPair</code> returns a unique data key pair for each request. The bytes in the keys are random; they are not related to the caller or the KMS key that is used to encrypt the private key. The public key is a DER-encoded X.509 SubjectPublicKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>. The private key is a DER-encoded PKCS8 PrivateKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5958\">RFC 5958</a>.</p> <p> <code>GenerateDataKeyPair</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateDataKeyPair</code> for an Amazon Web Services Nitro enclave or NitroTPM, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the attested environment. <code>GenerateDataKeyPair</code> returns the public data key and a copy of the private data key encrypted under the specified KMS key, as usual. But instead of a plaintext copy of the private data key (<code>PrivateKeyPlaintext</code>), the response includes a copy of the private data key encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyPair</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateDataKeyPairWithoutPlaintext":{
       "name":"GenerateDataKeyPairWithoutPlaintext",
@@ -433,7 +434,7 @@
         {"shape":"UnsupportedOperationException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Returns a unique asymmetric data key pair for use outside of KMS. This operation returns a plaintext public key and a copy of the private key that is encrypted under the symmetric encryption KMS key you specify. Unlike <a>GenerateDataKeyPair</a>, this operation does not return a plaintext private key. The bytes in the keys are random; they are not related to the caller or to the KMS key that is used to encrypt the private key. </p> <p>You can use the public key that <code>GenerateDataKeyPairWithoutPlaintext</code> returns to encrypt data or verify a signature outside of KMS. Then, store the encrypted private key with the data. When you are ready to decrypt data or sign a message, you can use the <a>Decrypt</a> operation to decrypt the encrypted private key.</p> <p>To generate a data key pair, you must specify a symmetric encryption KMS key to encrypt the private key in a data key pair. You cannot use an asymmetric KMS key or a KMS key in a custom key store. To get the type and origin of your KMS key, use the <a>DescribeKey</a> operation. </p> <p>Use the <code>KeyPairSpec</code> parameter to choose an RSA or Elliptic Curve (ECC) data key pair. In China Regions, you can also choose an SM2 data key pair. KMS recommends that you use ECC key pairs for signing, and use RSA and SM2 key pairs for either encryption or signing, but not both. However, KMS cannot enforce any restrictions on the use of data key pairs outside of KMS.</p> <p> <code>GenerateDataKeyPairWithoutPlaintext</code> returns a unique data key pair for each request. The bytes in the key are not related to the caller or KMS key that is used to encrypt the private key. The public key is a DER-encoded X.509 SubjectPublicKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyPairWithoutPlaintext</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns a unique asymmetric data key pair for use outside of KMS. This operation returns a plaintext public key and a copy of the private key that is encrypted under the symmetric encryption KMS key you specify. Unlike <a>GenerateDataKeyPair</a>, this operation does not return a plaintext private key. The bytes in the keys are random; they are not related to the caller or to the KMS key that is used to encrypt the private key. </p> <p>You can use the public key that <code>GenerateDataKeyPairWithoutPlaintext</code> returns to encrypt data or verify a signature outside of KMS. Then, store the encrypted private key with the data. When you are ready to decrypt data or sign a message, you can use the <a>Decrypt</a> operation to decrypt the encrypted private key.</p> <p>To generate a data key pair, you must specify a symmetric encryption KMS key to encrypt the private key in a data key pair. You cannot use an asymmetric KMS key or a KMS key in a custom key store. To get the type and origin of your KMS key, use the <a>DescribeKey</a> operation. </p> <p>Use the <code>KeyPairSpec</code> parameter to choose an RSA or Elliptic Curve (ECC) data key pair. In China Regions, you can also choose an SM2 data key pair. KMS recommends that you use ECC key pairs for signing, and use RSA and SM2 key pairs for either encryption or signing, but not both. However, KMS cannot enforce any restrictions on the use of data key pairs outside of KMS.</p> <p> <code>GenerateDataKeyPairWithoutPlaintext</code> returns a unique data key pair for each request. The bytes in the key are not related to the caller or KMS key that is used to encrypt the private key. The public key is a DER-encoded X.509 SubjectPublicKeyInfo, as specified in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyPairWithoutPlaintext</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateDataKeyWithoutPlaintext":{
       "name":"GenerateDataKeyWithoutPlaintext",
@@ -454,7 +455,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Returns a unique symmetric data key for use outside of KMS. This operation returns a data key that is encrypted under a symmetric encryption KMS key that you specify. The bytes in the key are random; they are not related to the caller or to the KMS key.</p> <p> <code>GenerateDataKeyWithoutPlaintext</code> is identical to the <a>GenerateDataKey</a> operation except that it does not return a plaintext copy of the data key. </p> <p>This operation is useful for systems that need to encrypt data at some point, but not immediately. When you need to encrypt the data, you call the <a>Decrypt</a> operation on the encrypted copy of the key.</p> <p>It's also useful in distributed systems with different levels of trust. For example, you might store encrypted data in containers. One component of your system creates new containers and stores an encrypted data key with each container. Then, a different component puts the data into the containers. That component first decrypts the data key, uses the plaintext data key to encrypt data, puts the encrypted data into the container, and then destroys the plaintext data key. In this system, the component that creates the containers never sees the plaintext data key.</p> <p>To request an asymmetric data key pair, use the <a>GenerateDataKeyPair</a> or <a>GenerateDataKeyPairWithoutPlaintext</a> operations.</p> <p>To generate a data key, you must specify the symmetric encryption KMS key that is used to encrypt the data key. You cannot use an asymmetric KMS key or a key in a custom key store to generate a data key. To get the type of your KMS key, use the <a>DescribeKey</a> operation.</p> <p>You must also specify the length of the data key. Use either the <code>KeySpec</code> or <code>NumberOfBytes</code> parameters (but not both). For 128-bit and 256-bit data keys, use the <code>KeySpec</code> parameter.</p> <p>To generate an SM4 data key (China Regions only), specify a <code>KeySpec</code> value of <code>AES_128</code> or <code>NumberOfBytes</code> value of <code>16</code>. The symmetric encryption key used in China Regions to encrypt your data key is an SM4 encryption key.</p> <p>If the operation succeeds, you will find the encrypted copy of the data key in the <code>CiphertextBlob</code> field.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyWithoutPlaintext</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns a unique symmetric data key for use outside of KMS. This operation returns a data key that is encrypted under a symmetric encryption KMS key that you specify. The bytes in the key are random; they are not related to the caller or to the KMS key.</p> <p> <code>GenerateDataKeyWithoutPlaintext</code> is identical to the <a>GenerateDataKey</a> operation except that it does not return a plaintext copy of the data key. </p> <p>This operation is useful for systems that need to encrypt data at some point, but not immediately. When you need to encrypt the data, you call the <a>Decrypt</a> operation on the encrypted copy of the key.</p> <p>It's also useful in distributed systems with different levels of trust. For example, you might store encrypted data in containers. One component of your system creates new containers and stores an encrypted data key with each container. Then, a different component puts the data into the containers. That component first decrypts the data key, uses the plaintext data key to encrypt data, puts the encrypted data into the container, and then destroys the plaintext data key. In this system, the component that creates the containers never sees the plaintext data key.</p> <p>To request an asymmetric data key pair, use the <a>GenerateDataKeyPair</a> or <a>GenerateDataKeyPairWithoutPlaintext</a> operations.</p> <p>To generate a data key, you must specify the symmetric encryption KMS key that is used to encrypt the data key. You cannot use an asymmetric KMS key or a key in a custom key store to generate a data key. To get the type of your KMS key, use the <a>DescribeKey</a> operation.</p> <p>You must also specify the length of the data key. Use either the <code>KeySpec</code> or <code>NumberOfBytes</code> parameters (but not both). For 128-bit and 256-bit data keys, use the <code>KeySpec</code> parameter.</p> <p>To generate an SM4 data key (China Regions only), specify a <code>KeySpec</code> value of <code>AES_128</code> or <code>NumberOfBytes</code> value of <code>16</code>. The symmetric encryption key used in China Regions to encrypt your data key is an SM4 encryption key.</p> <p>If the operation succeeds, you will find the encrypted copy of the data key in the <code>CiphertextBlob</code> field.</p> <p>You can use an optional encryption context to add additional security to the encryption operation. If you specify an <code>EncryptionContext</code>, you must specify the same encryption context (a case-sensitive exact match) when decrypting the encrypted data key. Otherwise, the request to decrypt fails with an <code>InvalidCiphertextException</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption Context</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateDataKeyWithoutPlaintext</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> <li> <p> <a>GenerateDataKeyPairWithoutPlaintext</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateMac":{
       "name":"GenerateMac",
@@ -474,7 +475,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Generates a hash-based message authentication code (HMAC) for a message using an HMAC KMS key and a MAC algorithm that the key supports. HMAC KMS keys and the HMAC algorithms that KMS uses conform to industry standards defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc2104\">RFC 2104</a>.</p> <p>You can use value that GenerateMac returns in the <a>VerifyMac</a> operation to demonstrate that the original message has not changed. Also, because a secret key is used to create the hash, you can verify that the party that generated the hash has the required secret key. You can also use the raw result to implement HMAC-based algorithms such as key derivation functions. This operation is part of KMS support for HMAC KMS keys. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC keys in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <note> <p>Best practices recommend that you limit the time during which any signing mechanism, including an HMAC, is effective. This deters an attack where the actor uses a signed message to establish validity repeatedly or long after the message is superseded. HMAC tags do not include a timestamp, but you can include a timestamp in the token or message to help you detect when its time to refresh the HMAC. </p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateMac</a> (key policy)</p> <p> <b>Related operations</b>: <a>VerifyMac</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Generates a hash-based message authentication code (HMAC) for a message using an HMAC KMS key and a MAC algorithm that the key supports. HMAC KMS keys and the HMAC algorithms that KMS uses conform to industry standards defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc2104\">RFC 2104</a>.</p> <p>You can use value that GenerateMac returns in the <a>VerifyMac</a> operation to demonstrate that the original message has not changed. Also, because a secret key is used to create the hash, you can verify that the party that generated the hash has the required secret key. You can also use the raw result to implement HMAC-based algorithms such as key derivation functions. This operation is part of KMS support for HMAC KMS keys. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC keys in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <note> <p>Best practices recommend that you limit the time during which any signing mechanism, including an HMAC, is effective. This deters an attack where the actor uses a signed message to establish validity repeatedly or long after the message is superseded. HMAC tags do not include a timestamp, but you can include a timestamp in the token or message to help you detect when its time to refresh the HMAC. </p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateMac</a> (key policy)</p> <p> <b>Related operations</b>: <a>VerifyMac</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GenerateRandom":{
       "name":"GenerateRandom",
@@ -491,7 +492,7 @@
         {"shape":"CustomKeyStoreNotFoundException"},
         {"shape":"CustomKeyStoreInvalidStateException"}
       ],
-      "documentation":"<p>Returns a random byte string that is cryptographically secure.</p> <p>You must use the <code>NumberOfBytes</code> parameter to specify the length of the random byte string. There is no default value for string length.</p> <p>By default, the random byte string is generated in KMS. To generate the byte string in the CloudHSM cluster associated with an CloudHSM key store, use the <code>CustomKeyStoreId</code> parameter.</p> <p> <code>GenerateRandom</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateRandom</code> for a Nitro enclave, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the enclave. Instead of plaintext bytes, the response includes the plaintext bytes encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>).For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>For more information about entropy and random number generation, see <a href=\"https://docs.aws.amazon.com/kms/latest/cryptographic-details/\">Key Management Service Cryptographic Details</a>.</p> <p> <b>Cross-account use</b>: Not applicable. <code>GenerateRandom</code> does not use any account-specific resources, such as KMS keys.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateRandom</a> (IAM policy)</p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns a random byte string that is cryptographically secure.</p> <p>You must use the <code>NumberOfBytes</code> parameter to specify the length of the random byte string. There is no default value for string length.</p> <p>By default, the random byte string is generated in KMS. To generate the byte string in the CloudHSM cluster associated with an CloudHSM key store, use the <code>CustomKeyStoreId</code> parameter.</p> <p> <code>GenerateRandom</code> also supports <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave.html\">Amazon Web Services Nitro Enclaves</a>, which provide an isolated compute environment in Amazon EC2. To call <code>GenerateRandom</code> for a Nitro enclave or NitroTPM, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK. Use the <code>Recipient</code> parameter to provide the attestation document for the attested environment. Instead of plaintext bytes, the response includes the plaintext bytes encrypted under the public key from the attestation document (<code>CiphertextForRecipient</code>). For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>For more information about entropy and random number generation, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#entropy-and-random-numbers\">Entropy and random number generation</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Not applicable. <code>GenerateRandom</code> does not use any account-specific resources, such as KMS keys.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GenerateRandom</a> (IAM policy)</p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GetKeyPolicy":{
       "name":"GetKeyPolicy",
@@ -508,7 +509,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Gets a key policy attached to the specified KMS key.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetKeyPolicy</a> (key policy)</p> <p> <b>Related operations</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html\">PutKeyPolicy</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets a key policy attached to the specified KMS key.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetKeyPolicy</a> (key policy)</p> <p> <b>Related operations</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html\">PutKeyPolicy</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GetKeyRotationStatus":{
       "name":"GetKeyRotationStatus",
@@ -526,7 +527,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Provides detailed information about the rotation status for a KMS key, including whether <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">automatic rotation of the key material</a> is enabled for the specified KMS key, the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotation-period\">rotation period</a>, and the next scheduled rotation date.</p> <p>Automatic key rotation is supported only on <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks\">symmetric encryption KMS keys</a>. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key..</p> <p>You can enable (<a>EnableKeyRotation</a>) and disable automatic rotation (<a>DisableKeyRotation</a>) of the key material in customer managed KMS keys. Key material rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed KMS keys</a> is not configurable. KMS always rotates the key material in Amazon Web Services managed KMS keys every year. The key rotation status for Amazon Web Services managed KMS keys is always <code>true</code>.</p> <p>You can perform on-demand (<a>RotateKeyOnDemand</a>) rotation of the key material in customer managed KMS keys, regardless of whether or not automatic key rotation is enabled. You can use GetKeyRotationStatus to identify the date and time that an in progress on-demand rotation was initiated. You can use <a>ListKeyRotations</a> to view the details of completed rotations.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years to every year. For details, see <a>EnableKeyRotation</a>.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <ul> <li> <p>Disabled: The key rotation status does not change when you disable a KMS key. However, while the KMS key is disabled, KMS does not rotate the key material. When you re-enable the KMS key, rotation resumes. If the key material in the re-enabled KMS key hasn't been rotated in one year, KMS rotates it immediately, and every year thereafter. If it's been less than a year since the key material in the re-enabled KMS key was rotated, the KMS key resumes its prior rotation schedule.</p> </li> <li> <p>Pending deletion: While a KMS key is pending deletion, its key rotation status is <code>false</code> and KMS does not rotate the key material. If you cancel the deletion, the original key rotation status returns to <code>true</code>.</p> </li> </ul> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetKeyRotationStatus</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Provides detailed information about the rotation status for a KMS key, including whether <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-enable-disable.html\">automatic rotation of the key material</a> is enabled for the specified KMS key, the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotation-period\">rotation period</a>, and the next scheduled rotation date.</p> <p>Automatic key rotation is supported only on symmetric encryption KMS keys. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key.</p> <p>You can enable (<a>EnableKeyRotation</a>) and disable automatic rotation (<a>DisableKeyRotation</a>) of the key material in customer managed KMS keys. Key material rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed KMS keys</a> is not configurable. KMS always rotates the key material in Amazon Web Services managed KMS keys every year. The key rotation status for Amazon Web Services managed KMS keys is always <code>true</code>.</p> <p>You can perform on-demand (<a>RotateKeyOnDemand</a>) rotation of the key material in customer managed KMS keys, regardless of whether or not automatic key rotation is enabled. You can use GetKeyRotationStatus to identify the date and time that an in progress on-demand rotation was initiated. You can use <a>ListKeyRotations</a> to view the details of completed rotations.</p> <note> <p>In May 2022, KMS changed the rotation schedule for Amazon Web Services managed keys from every three years to every year. For details, see <a>EnableKeyRotation</a>.</p> </note> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <ul> <li> <p>Disabled: The key rotation status does not change when you disable a KMS key. However, while the KMS key is disabled, KMS does not rotate the key material. When you re-enable the KMS key, rotation resumes. If the key material in the re-enabled KMS key hasn't been rotated in one year, KMS rotates it immediately, and every year thereafter. If it's been less than a year since the key material in the re-enabled KMS key was rotated, the KMS key resumes its prior rotation schedule.</p> </li> <li> <p>Pending deletion: While a KMS key is pending deletion, its key rotation status is <code>false</code> and KMS does not rotate the key material. If you cancel the deletion, the original key rotation status returns to <code>true</code>.</p> </li> </ul> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetKeyRotationStatus</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GetParametersForImport":{
       "name":"GetParametersForImport",
@@ -544,7 +545,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Returns the public key and an import token you need to import or reimport key material for a KMS key. </p> <p>By default, KMS keys are created with key material that KMS generates. This operation supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a>, an advanced feature that lets you generate and import the cryptographic key material for a KMS key. For more information about importing key material into KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>Before calling <code>GetParametersForImport</code>, use the <a>CreateKey</a> operation with an <code>Origin</code> value of <code>EXTERNAL</code> to create a KMS key with no key material. You can import key material for a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key. You can also import key material into a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. However, you can't import key material into a KMS key in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. You can also use <code>GetParametersForImport</code> to get a public key and import token to <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html#reimport-key-material\">reimport the original key material</a> into a KMS key whose key material expired or was deleted.</p> <p> <code>GetParametersForImport</code> returns the items that you need to import your key material.</p> <ul> <li> <p>The public key (or \"wrapping key\") of an RSA key pair that KMS generates.</p> <p>You will use this public key to encrypt (\"wrap\") your key material while it's in transit to KMS. </p> </li> <li> <p>A import token that ensures that KMS can decrypt your key material and associate it with the correct KMS key.</p> </li> </ul> <p>The public key and its import token are permanently linked and must be used together. Each public key and import token set is valid for 24 hours. The expiration date and time appear in the <code>ParametersValidTo</code> field in the <code>GetParametersForImport</code> response. You cannot use an expired public key or import token in an <a>ImportKeyMaterial</a> request. If your key and token expire, send another <code>GetParametersForImport</code> request.</p> <p> <code>GetParametersForImport</code> requires the following information:</p> <ul> <li> <p>The key ID of the KMS key for which you are importing the key material.</p> </li> <li> <p>The key spec of the public key (\"wrapping key\") that you will use to encrypt your key material during import.</p> </li> <li> <p>The wrapping algorithm that you will use with the public key to encrypt your key material.</p> </li> </ul> <p>You can use the same or a different public key spec and wrapping algorithm each time you import or reimport the same key material. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetParametersForImport</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ImportKeyMaterial</a> </p> </li> <li> <p> <a>DeleteImportedKeyMaterial</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns the public key and an import token you need to import or reimport key material for a KMS key. </p> <p>By default, KMS keys are created with key material that KMS generates. This operation supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a>, an advanced feature that lets you generate and import the cryptographic key material for a KMS key.</p> <p>Before calling <code>GetParametersForImport</code>, use the <a>CreateKey</a> operation with an <code>Origin</code> value of <code>EXTERNAL</code> to create a KMS key with no key material. You can import key material for a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key. You can also import key material into a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. However, you can't import key material into a KMS key in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. You can also use <code>GetParametersForImport</code> to get a public key and import token to <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html#reimport-key-material\">reimport the original key material</a> into a KMS key whose key material expired or was deleted.</p> <p> <code>GetParametersForImport</code> returns the items that you need to import your key material.</p> <ul> <li> <p>The public key (or \"wrapping key\") of an RSA key pair that KMS generates.</p> <p>You will use this public key to encrypt (\"wrap\") your key material while it's in transit to KMS. </p> </li> <li> <p>A import token that ensures that KMS can decrypt your key material and associate it with the correct KMS key.</p> </li> </ul> <p>The public key and its import token are permanently linked and must be used together. Each public key and import token set is valid for 24 hours. The expiration date and time appear in the <code>ParametersValidTo</code> field in the <code>GetParametersForImport</code> response. You cannot use an expired public key or import token in an <a>ImportKeyMaterial</a> request. If your key and token expire, send another <code>GetParametersForImport</code> request.</p> <p> <code>GetParametersForImport</code> requires the following information:</p> <ul> <li> <p>The key ID of the KMS key for which you are importing the key material.</p> </li> <li> <p>The key spec of the public key (\"wrapping key\") that you will use to encrypt your key material during import.</p> </li> <li> <p>The wrapping algorithm that you will use with the public key to encrypt your key material.</p> </li> </ul> <p>You can use the same or a different public key spec and wrapping algorithm each time you import or reimport the same key material. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetParametersForImport</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ImportKeyMaterial</a> </p> </li> <li> <p> <a>DeleteImportedKeyMaterial</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "GetPublicKey":{
       "name":"GetPublicKey",
@@ -566,7 +567,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Returns the public key of an asymmetric KMS key. Unlike the private key of a asymmetric KMS key, which never leaves KMS unencrypted, callers with <code>kms:GetPublicKey</code> permission can download the public key of an asymmetric KMS key. You can share the public key to allow others to encrypt messages and verify signatures outside of KMS. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>You do not need to download the public key. Instead, you can use the public key within KMS by calling the <a>Encrypt</a>, <a>ReEncrypt</a>, or <a>Verify</a> operations with the identifier of an asymmetric KMS key. When you use the public key within KMS, you benefit from the authentication, authorization, and logging that are part of every KMS operation. You also reduce of risk of encrypting data that cannot be decrypted. These features are not effective outside of KMS.</p> <p>To help you use the public key safely outside of KMS, <code>GetPublicKey</code> returns important information about the public key in the response, including:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeySpec\">KeySpec</a>: The type of key material in the public key, such as <code>RSA_4096</code> or <code>ECC_NIST_P521</code>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeyUsage\">KeyUsage</a>: Whether the key is used for encryption, signing, or deriving a shared secret.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-EncryptionAlgorithms\">EncryptionAlgorithms</a> or <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-SigningAlgorithms\">SigningAlgorithms</a>: A list of the encryption algorithms or the signing algorithms for the key.</p> </li> </ul> <p>Although KMS cannot enforce these restrictions on external operations, it is crucial that you use this information to prevent the public key from being used improperly. For example, you can prevent a public signing key from being used encrypt data, or prevent a public key from being used with an encryption algorithm that is not supported by KMS. You can also avoid errors, such as using the wrong signing algorithm in a verification operation.</p> <p>To verify a signature outside of KMS with an SM2 public key (China Regions only), you must specify the distinguishing ID. By default, KMS uses <code>1234567812345678</code> as the distinguishing ID. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetPublicKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>CreateKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns the public key of an asymmetric KMS key. Unlike the private key of a asymmetric KMS key, which never leaves KMS unencrypted, callers with <code>kms:GetPublicKey</code> permission can download the public key of an asymmetric KMS key. You can share the public key to allow others to encrypt messages and verify signatures outside of KMS. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>You do not need to download the public key. Instead, you can use the public key within KMS by calling the <a>Encrypt</a>, <a>ReEncrypt</a>, or <a>Verify</a> operations with the identifier of an asymmetric KMS key. When you use the public key within KMS, you benefit from the authentication, authorization, and logging that are part of every KMS operation. You also reduce of risk of encrypting data that cannot be decrypted. These features are not effective outside of KMS.</p> <p>To help you use the public key safely outside of KMS, <code>GetPublicKey</code> returns important information about the public key in the response, including:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeySpec\">KeySpec</a>: The type of key material in the public key, such as <code>RSA_4096</code> or <code>ECC_NIST_P521</code>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeyUsage\">KeyUsage</a>: Whether the key is used for encryption, signing, or deriving a shared secret.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-EncryptionAlgorithms\">EncryptionAlgorithms</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-KeyAgreementAlgorithms\">KeyAgreementAlgorithms</a>, or <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html#KMS-GetPublicKey-response-SigningAlgorithms\">SigningAlgorithms</a>: A list of the encryption algorithms, key agreement algorithms, or signing algorithms for the key.</p> </li> </ul> <p>Although KMS cannot enforce these restrictions on external operations, it is crucial that you use this information to prevent the public key from being used improperly. For example, you can prevent a public signing key from being used encrypt data, or prevent a public key from being used with an encryption algorithm that is not supported by KMS. You can also avoid errors, such as using the wrong signing algorithm in a verification operation.</p> <p>To verify a signature outside of KMS with an SM2 public key (China Regions only), you must specify the distinguishing ID. By default, KMS uses <code>1234567812345678</code> as the distinguishing ID. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/offline-operations.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:GetPublicKey</a> (key policy)</p> <p> <b>Related operations</b>: <a>CreateKey</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ImportKeyMaterial":{
       "name":"ImportKeyMaterial",
@@ -588,7 +589,7 @@
         {"shape":"ExpiredImportTokenException"},
         {"shape":"InvalidImportTokenException"}
       ],
-      "documentation":"<p>Imports or reimports key material into an existing KMS key that was created without key material. <code>ImportKeyMaterial</code> also sets the expiration model and expiration date of the imported key material.</p> <p>By default, KMS keys are created with key material that KMS generates. This operation supports <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a>, an advanced feature that lets you generate and import the cryptographic key material for a KMS key. For more information about importing key material into KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>After you successfully import key material into a KMS key, you can <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html#reimport-key-material\">reimport the same key material</a> into that KMS key, but you cannot import different key material. You might reimport key material to replace key material that expired or key material that you deleted. You might also reimport key material to change the expiration model or expiration date of the key material. </p> <p>Each time you import key material into KMS, you can determine whether (<code>ExpirationModel</code>) and when (<code>ValidTo</code>) the key material expires. To change the expiration of your key material, you must import it again, either by calling <code>ImportKeyMaterial</code> or using the <a href=\"kms/latest/developerguide/importing-keys-import-key-material.html#importing-keys-import-key-material-console\">import features</a> of the KMS console.</p> <p>Before calling <code>ImportKeyMaterial</code>:</p> <ul> <li> <p>Create or identify a KMS key with no key material. The KMS key must have an <code>Origin</code> value of <code>EXTERNAL</code>, which indicates that the KMS key is designed for imported key material. </p> <p>To create an new KMS key for imported key material, call the <a>CreateKey</a> operation with an <code>Origin</code> value of <code>EXTERNAL</code>. You can create a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key. You can also import key material into a <a href=\"kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. However, you can't import key material into a KMS key in a <a href=\"kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>.</p> </li> <li> <p>Use the <a>DescribeKey</a> operation to verify that the <code>KeyState</code> of the KMS key is <code>PendingImport</code>, which indicates that the KMS key has no key material. </p> <p>If you are reimporting the same key material into an existing KMS key, you might need to call the <a>DeleteImportedKeyMaterial</a> to delete its existing key material.</p> </li> <li> <p>Call the <a>GetParametersForImport</a> operation to get a public key and import token set for importing key material. </p> </li> <li> <p>Use the public key in the <a>GetParametersForImport</a> response to encrypt your key material.</p> </li> </ul> <p> Then, in an <code>ImportKeyMaterial</code> request, you submit your encrypted key material and import token. When calling this operation, you must specify the following values:</p> <ul> <li> <p>The key ID or key ARN of the KMS key to associate with the imported key material. Its <code>Origin</code> must be <code>EXTERNAL</code> and its <code>KeyState</code> must be <code>PendingImport</code>. You cannot perform this operation on a KMS key in a <a href=\"kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>, or on a KMS key in a different Amazon Web Services account. To get the <code>Origin</code> and <code>KeyState</code> of a KMS key, call <a>DescribeKey</a>.</p> </li> <li> <p>The encrypted key material. </p> </li> <li> <p>The import token that <a>GetParametersForImport</a> returned. You must use a public key and token from the same <code>GetParametersForImport</code> response.</p> </li> <li> <p>Whether the key material expires (<code>ExpirationModel</code>) and, if so, when (<code>ValidTo</code>). For help with this choice, see <a href=\"https://docs.aws.amazon.com/en_us/kms/latest/developerguide/importing-keys.html#importing-keys-expiration\">Setting an expiration time</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>If you set an expiration date, KMS deletes the key material from the KMS key on the specified date, making the KMS key unusable. To use the KMS key in cryptographic operations again, you must reimport the same key material. However, you can delete and reimport the key material at any time, including before the key material expires. Each time you reimport, you can eliminate or reset the expiration time.</p> </li> </ul> <p>When this operation is successful, the key state of the KMS key changes from <code>PendingImport</code> to <code>Enabled</code>, and you can use the KMS key in cryptographic operations.</p> <p>If this operation fails, use the exception to help determine the problem. If the error is related to the key material, the import token, or wrapping key, use <a>GetParametersForImport</a> to get a new public key and import token for the KMS key and repeat the import procedure. For help, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html#importing-keys-overview\">How To Import Key Material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ImportKeyMaterial</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DeleteImportedKeyMaterial</a> </p> </li> <li> <p> <a>GetParametersForImport</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Imports or reimports key material into an existing KMS key that was created without key material. You can also use this operation to set or update the expiration model and expiration date of the imported key material.</p> <p>By default, KMS creates KMS keys with key material that it generates. You can also generate and import your own key material. For more information about importing key material, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">Importing key material</a>.</p> <p>For asymmetric, HMAC and multi-Region keys, you cannot change the key material after the initial import. You can import multiple key materials into single-Region, symmetric encryption keys and rotate the key material on demand using <code>RotateKeyOnDemand</code>.</p> <p>After you import key material, you can <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html#reimport-key-material\">reimport the same key material</a> into that KMS key or, if the key supports on-demand rotation, import new key material. You can use the <code>ImportType</code> parameter to indicate whether you are importing new key material or re-importing previously imported key material. You might reimport key material to replace key material that expired or key material that you deleted. You might also reimport key material to change the expiration model or expiration date of the key material.</p> <p>Each time you import key material into KMS, you can determine whether (<code>ExpirationModel</code>) and when (<code>ValidTo</code>) the key material expires. To change the expiration of your key material, you must import it again, either by calling <code>ImportKeyMaterial</code> or using the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html#importing-keys-import-key-material-console\">import features</a> of the KMS console.</p> <p>Before you call <code>ImportKeyMaterial</code>, complete these steps:</p> <ul> <li> <p>Create or identify a KMS key with <code>EXTERNAL</code> origin, which indicates that the KMS key is designed for imported key material. </p> <p>To create a new KMS key for imported key material, call the <a>CreateKey</a> operation with an <code>Origin</code> value of <code>EXTERNAL</code>. You can create a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, asymmetric key agreement key, or asymmetric signing KMS key. You can also import key material into a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. However, you can't import key material into a KMS key in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>.</p> </li> <li> <p>Call the <a>GetParametersForImport</a> operation to get a public key and import token set for importing key material. </p> </li> <li> <p>Use the public key in the <a>GetParametersForImport</a> response to encrypt your key material.</p> </li> </ul> <p> Then, in an <code>ImportKeyMaterial</code> request, you submit your encrypted key material and import token. When calling this operation, you must specify the following values:</p> <ul> <li> <p>The key ID or key ARN of the KMS key to associate with the imported key material. Its <code>Origin</code> must be <code>EXTERNAL</code> and its <code>KeyState</code> must be <code>PendingImport</code>. You cannot perform this operation on a KMS key in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>, or on a KMS key in a different Amazon Web Services account. To get the <code>Origin</code> and <code>KeyState</code> of a KMS key, call <a>DescribeKey</a>.</p> </li> <li> <p>The encrypted key material. </p> </li> <li> <p>The import token that <a>GetParametersForImport</a> returned. You must use a public key and token from the same <code>GetParametersForImport</code> response.</p> </li> <li> <p>Whether the key material expires (<code>ExpirationModel</code>) and, if so, when (<code>ValidTo</code>). For help with this choice, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html#importing-keys-expiration\">Setting an expiration time</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>If you set an expiration date, KMS deletes the key material from the KMS key on the specified date, making the KMS key unusable. To use the KMS key in cryptographic operations again, you must reimport the same key material. However, you can delete and reimport the key material at any time, including before the key material expires. Each time you reimport, you can eliminate or reset the expiration time.</p> </li> </ul> <p>When this operation is successful, the key state of the KMS key changes from <code>PendingImport</code> to <code>Enabled</code>, and you can use the KMS key in cryptographic operations. For single-Region, symmetric encryption keys, you will need to import all of the key materials associated with the KMS key to change its state to <code>Enabled</code>. Use the <code>ListKeyRotations</code> operation to list the ID and import state of each key material associated with a KMS key.</p> <p>If this operation fails, use the exception to help determine the problem. If the error is related to the key material, the import token, or wrapping key, use <a>GetParametersForImport</a> to get a new public key and import token for the KMS key and repeat the import procedure. For help, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-conceptual.html\">Create a KMS key with imported key material</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ImportKeyMaterial</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DeleteImportedKeyMaterial</a> </p> </li> <li> <p> <a>GetParametersForImport</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListAliases":{
       "name":"ListAliases",
@@ -605,7 +606,7 @@
         {"shape":"InvalidArnException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Gets a list of aliases in the caller's Amazon Web Services account and region. For more information about aliases, see <a>CreateAlias</a>.</p> <p>By default, the <code>ListAliases</code> operation returns all aliases in the account and region. To get only the aliases associated with a particular KMS key, use the <code>KeyId</code> parameter.</p> <p>The <code>ListAliases</code> response can include aliases that you created and associated with your customer managed keys, and aliases that Amazon Web Services created and associated with Amazon Web Services managed keys in your account. You can recognize Amazon Web Services aliases because their names have the format <code>aws/&lt;service-name&gt;</code>, such as <code>aws/dynamodb</code>.</p> <p>The response might also include aliases that have no <code>TargetKeyId</code> field. These are predefined aliases that Amazon Web Services has created but has not yet associated with a KMS key. Aliases that Amazon Web Services creates in your account, including predefined aliases, do not count against your <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#aliases-limit\">KMS aliases quota</a>.</p> <p> <b>Cross-account use</b>: No. <code>ListAliases</code> does not return aliases in other Amazon Web Services accounts.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListAliases</a> (IAM policy)</p> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets a list of aliases in the caller's Amazon Web Services account and region. For more information about aliases, see <a>CreateAlias</a>.</p> <p>By default, the <code>ListAliases</code> operation returns all aliases in the account and region. To get only the aliases associated with a particular KMS key, use the <code>KeyId</code> parameter.</p> <p>The <code>ListAliases</code> response can include aliases that you created and associated with your customer managed keys, and aliases that Amazon Web Services created and associated with Amazon Web Services managed keys in your account. You can recognize Amazon Web Services aliases because their names have the format <code>aws/&lt;service-name&gt;</code>, such as <code>aws/dynamodb</code>.</p> <p>The response might also include aliases that have no <code>TargetKeyId</code> field. These are predefined aliases that Amazon Web Services has created but has not yet associated with a KMS key. Aliases that Amazon Web Services creates in your account, including predefined aliases, do not count against your <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/resource-limits.html#aliases-per-key\">KMS aliases quota</a>.</p> <p> <b>Cross-account use</b>: No. <code>ListAliases</code> does not return aliases in other Amazon Web Services accounts.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListAliases</a> (IAM policy)</p> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/alias-access.html\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>UpdateAlias</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListGrants":{
       "name":"ListGrants",
@@ -624,7 +625,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Gets a list of all grants for the specified KMS key. </p> <p>You must specify the KMS key in all requests. You can filter the grant list by grant ID or grantee principal.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of working with grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-grants.html\">Programming grants</a>. </p> <note> <p>The <code>GranteePrincipal</code> field in the <code>ListGrants</code> response usually contains the user or role designated as the grantee principal in the grant. However, when the grantee principal in the grant is an Amazon Web Services service, the <code>GranteePrincipal</code> field contains the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services\">service principal</a>, which might represent several different grantee principals.</p> </note> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListGrants</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets a list of all grants for the specified KMS key. </p> <p>You must specify the KMS key in all requests. You can filter the grant list by grant ID or grantee principal.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of creating grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_CreateGrant_section.html\">Use CreateGrant with an Amazon Web Services SDK or CLI</a>. </p> <note> <p>The <code>GranteePrincipal</code> field in the <code>ListGrants</code> response usually contains the user or role designated as the grantee principal in the grant. However, when the grantee principal in the grant is an Amazon Web Services service, the <code>GranteePrincipal</code> field contains the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services\">service principal</a>, which might represent several different grantee principals.</p> </note> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListGrants</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListKeyPolicies":{
       "name":"ListKeyPolicies",
@@ -641,7 +642,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Gets the names of the key policies that are attached to a KMS key. This operation is designed to get policy names that you can use in a <a>GetKeyPolicy</a> operation. However, the only valid policy name is <code>default</code>. </p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeyPolicies</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetKeyPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html\">PutKeyPolicy</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets the names of the key policies that are attached to a KMS key. This operation is designed to get policy names that you can use in a <a>GetKeyPolicy</a> operation. However, the only valid policy name is <code>default</code>. </p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeyPolicies</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GetKeyPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html\">PutKeyPolicy</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListKeyRotations":{
       "name":"ListKeyRotations",
@@ -659,7 +660,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Returns information about all completed key material rotations for the specified KMS key.</p> <p>You must specify the KMS key in all requests. You can refine the key rotations list by limiting the number of rotations returned.</p> <p>For detailed information about automatic and on-demand key rotations, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">Rotating KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeyRotations</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns information about the key materials associated with the specified KMS key. You can use the optional <code>IncludeKeyMaterial</code> parameter to control which key materials are included in the response.</p> <p>You must specify the KMS key in all requests. You can refine the key rotations list by limiting the number of rotations returned.</p> <p>For detailed information about automatic and on-demand key rotations, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">Rotate KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeyRotations</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>DeleteImportedKeyMaterial</a> </p> </li> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ImportKeyMaterial</a> </p> </li> <li> <p> <a>RotateKeyOnDemand</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListKeys":{
       "name":"ListKeys",
@@ -674,7 +675,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"InvalidMarkerException"}
       ],
-      "documentation":"<p>Gets a list of all KMS keys in the caller's Amazon Web Services account and Region.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeys</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Gets a list of all KMS keys in the caller's Amazon Web Services account and Region.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListKeys</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListResourceTags":{
       "name":"ListResourceTags",
@@ -690,7 +691,7 @@
         {"shape":"InvalidArnException"},
         {"shape":"InvalidMarkerException"}
       ],
-      "documentation":"<p>Returns all tags on the specified KMS key.</p> <p>For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging keys</a>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListResourceTags</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>TagResource</a> </p> </li> <li> <p> <a>UntagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns all tags on the specified KMS key.</p> <p>For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tags in KMS</a>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListResourceTags</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>TagResource</a> </p> </li> <li> <p> <a>UntagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ListRetirableGrants":{
       "name":"ListRetirableGrants",
@@ -707,7 +708,7 @@
         {"shape":"NotFoundException"},
         {"shape":"KMSInternalException"}
       ],
-      "documentation":"<p>Returns information about all grants in the Amazon Web Services account and Region that have the specified retiring principal. </p> <p>You can specify any principal in your Amazon Web Services account. The grants that are returned include grants for KMS keys in your Amazon Web Services account and other Amazon Web Services accounts. You might use this operation to determine which grants you may retire. To retire a grant, use the <a>RetireGrant</a> operation.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of working with grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-grants.html\">Programming grants</a>. </p> <p> <b>Cross-account use</b>: You must specify a principal in your Amazon Web Services account. This operation returns a list of grants where the retiring principal specified in the <code>ListRetirableGrants</code> request is the same retiring principal on the grant. This can include grants on KMS keys owned by other Amazon Web Services accounts, but you do not need <code>kms:ListRetirableGrants</code> permission (or any other additional permission) in any Amazon Web Services account other than your own.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListRetirableGrants</a> (IAM policy) in your Amazon Web Services account.</p> <note> <p>KMS authorizes <code>ListRetirableGrants</code> requests by evaluating the caller account's kms:ListRetirableGrants permissions. The authorized resource in <code>ListRetirableGrants</code> calls is the retiring principal specified in the request. KMS does not evaluate the caller's permissions to verify their access to any KMS keys or grants that might be returned by the <code>ListRetirableGrants</code> call.</p> </note> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Returns information about all grants in the Amazon Web Services account and Region that have the specified retiring principal. </p> <p>You can specify any principal in your Amazon Web Services account. The grants that are returned include grants for KMS keys in your Amazon Web Services account and other Amazon Web Services accounts. You might use this operation to determine which grants you may retire. To retire a grant, use the <a>RetireGrant</a> operation.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of creating grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_CreateGrant_section.html\">Use CreateGrant with an Amazon Web Services SDK or CLI</a>. </p> <p> <b>Cross-account use</b>: You must specify a principal in your Amazon Web Services account. This operation returns a list of grants where the retiring principal specified in the <code>ListRetirableGrants</code> request is the same retiring principal on the grant. This can include grants on KMS keys owned by other Amazon Web Services accounts, but you do not need <code>kms:ListRetirableGrants</code> permission (or any other additional permission) in any Amazon Web Services account other than your own.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ListRetirableGrants</a> (IAM policy) in your Amazon Web Services account.</p> <note> <p>KMS authorizes <code>ListRetirableGrants</code> requests by evaluating the caller account's kms:ListRetirableGrants permissions. The authorized resource in <code>ListRetirableGrants</code> calls is the retiring principal specified in the request. KMS does not evaluate the caller's permissions to verify their access to any KMS keys or grants that might be returned by the <code>ListRetirableGrants</code> call.</p> </note> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "PutKeyPolicy":{
       "name":"PutKeyPolicy",
@@ -726,7 +727,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Attaches a key policy to the specified KMS key. </p> <p>For more information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key Policies</a> in the <i>Key Management Service Developer Guide</i>. For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>. For examples of adding a key policy in multiple programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-key-policies.html#put-policy\">Setting a key policy</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:PutKeyPolicy</a> (key policy)</p> <p> <b>Related operations</b>: <a>GetKeyPolicy</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Attaches a key policy to the specified KMS key. </p> <p>For more information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key Policies</a> in the <i>Key Management Service Developer Guide</i>. For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>. For examples of adding a key policy in multiple programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_PutKeyPolicy_section.html\">Use PutKeyPolicy with an Amazon Web Services SDK or CLI</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:PutKeyPolicy</a> (key policy)</p> <p> <b>Related operations</b>: <a>GetKeyPolicy</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ReEncrypt":{
       "name":"ReEncrypt",
@@ -749,7 +750,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Decrypts ciphertext and then reencrypts it entirely within KMS. You can use this operation to change the KMS key under which data is encrypted, such as when you <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotate-keys-manually\">manually rotate</a> a KMS key or change the KMS key that protects a ciphertext. You can also use it to reencrypt ciphertext under the same KMS key, such as to change the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">encryption context</a> of a ciphertext.</p> <p>The <code>ReEncrypt</code> operation can decrypt ciphertext that was encrypted by using a KMS key in an KMS operation, such as <a>Encrypt</a> or <a>GenerateDataKey</a>. It can also decrypt ciphertext that was encrypted by using the public key of an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks\">asymmetric KMS key</a> outside of KMS. However, it cannot decrypt ciphertext produced by other libraries, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a>. These libraries return a ciphertext format that is incompatible with KMS.</p> <p>When you use the <code>ReEncrypt</code> operation, you need to provide information for the decrypt operation and the subsequent encrypt operation.</p> <ul> <li> <p>If your ciphertext was encrypted under an asymmetric KMS key, you must use the <code>SourceKeyId</code> parameter to identify the KMS key that encrypted the ciphertext. You must also supply the encryption algorithm that was used. This information is required to decrypt the data.</p> </li> <li> <p>If your ciphertext was encrypted under a symmetric encryption KMS key, the <code>SourceKeyId</code> parameter is optional. KMS can get this information from metadata that it adds to the symmetric ciphertext blob. This feature adds durability to your implementation by ensuring that authorized users can decrypt ciphertext decades after it was encrypted, even if they've lost track of the key ID. However, specifying the source KMS key is always recommended as a best practice. When you use the <code>SourceKeyId</code> parameter to specify a KMS key, KMS uses only the KMS key you specify. If the ciphertext was encrypted under a different KMS key, the <code>ReEncrypt</code> operation fails. This practice ensures that you use the KMS key that you intend.</p> </li> <li> <p>To reencrypt the data, you must use the <code>DestinationKeyId</code> parameter to specify the KMS key that re-encrypts the data after it is decrypted. If the destination KMS key is an asymmetric KMS key, you must also provide the encryption algorithm. The algorithm that you choose must be compatible with the KMS key.</p> <important> <p>When you use an asymmetric KMS key to encrypt or reencrypt data, be sure to record the KMS key and encryption algorithm that you choose. You will be required to provide the same KMS key and encryption algorithm when you decrypt the data. If the KMS key and algorithm do not match the values used to encrypt the data, the decrypt operation fails.</p> <p>You are not required to supply the key ID and encryption algorithm when you decrypt with symmetric encryption KMS keys because KMS stores this information in the ciphertext blob. KMS cannot store metadata in ciphertext generated with asymmetric keys. The standard format for asymmetric key ciphertext does not include configurable fields.</p> </important> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. The source KMS key and destination KMS key can be in different Amazon Web Services accounts. Either or both KMS keys can be in a different account than the caller. To specify a KMS key in a different account, you must use its key ARN or alias ARN.</p> <p> <b>Required permissions</b>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ReEncryptFrom</a> permission on the source KMS key (key policy)</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ReEncryptTo</a> permission on the destination KMS key (key policy)</p> </li> </ul> <p>To permit reencryption from or to a KMS key, include the <code>\"kms:ReEncrypt*\"</code> permission in your <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">key policy</a>. This permission is automatically included in the key policy when you use the console to create a KMS key. But you must include it manually when you create a KMS key programmatically or when you use the <a>PutKeyPolicy</a> operation to set a key policy.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Decrypts ciphertext and then reencrypts it entirely within KMS. You can use this operation to change the KMS key under which data is encrypted, such as when you <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys-manually.html\">manually rotate</a> a KMS key or change the KMS key that protects a ciphertext. You can also use it to reencrypt ciphertext under the same KMS key, such as to change the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">encryption context</a> of a ciphertext.</p> <p>The <code>ReEncrypt</code> operation can decrypt ciphertext that was encrypted by using a KMS key in an KMS operation, such as <a>Encrypt</a> or <a>GenerateDataKey</a>. It can also decrypt ciphertext that was encrypted by using the public key of an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS key</a> outside of KMS. However, it cannot decrypt ciphertext produced by other libraries, such as the <a href=\"https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/\">Amazon Web Services Encryption SDK</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html\">Amazon S3 client-side encryption</a>. These libraries return a ciphertext format that is incompatible with KMS.</p> <p>When you use the <code>ReEncrypt</code> operation, you need to provide information for the decrypt operation and the subsequent encrypt operation.</p> <ul> <li> <p>If your ciphertext was encrypted under an asymmetric KMS key, you must use the <code>SourceKeyId</code> parameter to identify the KMS key that encrypted the ciphertext. You must also supply the encryption algorithm that was used. This information is required to decrypt the data.</p> </li> <li> <p>If your ciphertext was encrypted under a symmetric encryption KMS key, the <code>SourceKeyId</code> parameter is optional. KMS can get this information from metadata that it adds to the symmetric ciphertext blob. This feature adds durability to your implementation by ensuring that authorized users can decrypt ciphertext decades after it was encrypted, even if they've lost track of the key ID. However, specifying the source KMS key is always recommended as a best practice. When you use the <code>SourceKeyId</code> parameter to specify a KMS key, KMS uses only the KMS key you specify. If the ciphertext was encrypted under a different KMS key, the <code>ReEncrypt</code> operation fails. This practice ensures that you use the KMS key that you intend.</p> </li> <li> <p>To reencrypt the data, you must use the <code>DestinationKeyId</code> parameter to specify the KMS key that re-encrypts the data after it is decrypted. If the destination KMS key is an asymmetric KMS key, you must also provide the encryption algorithm. The algorithm that you choose must be compatible with the KMS key.</p> <important> <p>When you use an asymmetric KMS key to encrypt or reencrypt data, be sure to record the KMS key and encryption algorithm that you choose. You will be required to provide the same KMS key and encryption algorithm when you decrypt the data. If the KMS key and algorithm do not match the values used to encrypt the data, the decrypt operation fails.</p> <p>You are not required to supply the key ID and encryption algorithm when you decrypt with symmetric encryption KMS keys because KMS stores this information in the ciphertext blob. KMS cannot store metadata in ciphertext generated with asymmetric keys. The standard format for asymmetric key ciphertext does not include configurable fields.</p> </important> </li> </ul> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. The source KMS key and destination KMS key can be in different Amazon Web Services accounts. Either or both KMS keys can be in a different account than the caller. To specify a KMS key in a different account, you must use its key ARN or alias ARN.</p> <p> <b>Required permissions</b>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ReEncryptFrom</a> permission on the source KMS key (key policy)</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:ReEncryptTo</a> permission on the destination KMS key (key policy)</p> </li> </ul> <p>To permit reencryption from or to a KMS key, include the <code>\"kms:ReEncrypt*\"</code> permission in your <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">key policy</a>. This permission is automatically included in the key policy when you use the console to create a KMS key. But you must include it manually when you create a KMS key programmatically or when you use the <a>PutKeyPolicy</a> operation to set a key policy.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyPair</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ReplicateKey":{
       "name":"ReplicateKey",
@@ -771,7 +772,7 @@
         {"shape":"TagException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Replicates a multi-Region key into the specified Region. This operation creates a multi-Region replica key based on a multi-Region primary key in a different Region of the same Amazon Web Services partition. You can create multiple replicas of a primary key, but each must be in a different Region. To create a multi-Region primary key, use the <a>CreateKey</a> operation.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>A <i>replica key</i> is a fully-functional KMS key that can be used independently of its primary and peer replica keys. A primary key and its replica keys share properties that make them interoperable. They have the same <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id\">key ID</a> and key material. They also have the same <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-spec\">key spec</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-usage\">key usage</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-origin\">key material origin</a>, and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">automatic key rotation status</a>. KMS automatically synchronizes these shared properties among related multi-Region keys. All other properties of a replica key can differ, including its <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">key policy</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">tags</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html\">aliases</a>, and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a>. KMS pricing and quotas for KMS keys apply to each primary key and replica key.</p> <p>When this operation completes, the new replica key has a transient key state of <code>Creating</code>. This key state changes to <code>Enabled</code> (or <code>PendingImport</code>) after a few seconds when the process of creating the new replica key is complete. While the key state is <code>Creating</code>, you can manage key, but you cannot yet use it in cryptographic operations. If you are creating and using the replica key programmatically, retry on <code>KMSInvalidStateException</code> or call <code>DescribeKey</code> to check its <code>KeyState</code> value before using it. For details about the <code>Creating</code> key state, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>You cannot create more than one replica of a primary key in any Region. If the Region already includes a replica of the key you're trying to replicate, <code>ReplicateKey</code> returns an <code>AlreadyExistsException</code> error. If the key state of the existing replica is <code>PendingDeletion</code>, you can cancel the scheduled key deletion (<a>CancelKeyDeletion</a>) or wait for the key to be deleted. The new replica key you create will have the same <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html#mrk-sync-properties\">shared properties</a> as the original replica key.</p> <p>The CloudTrail log of a <code>ReplicateKey</code> operation records a <code>ReplicateKey</code> operation in the primary key's Region and a <a>CreateKey</a> operation in the replica key's Region.</p> <p>If you replicate a multi-Region primary key with imported key material, the replica key is created with no key material. You must import the same key material that you imported into the primary key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-import.html\">Importing key material into multi-Region keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>To convert a replica key to a primary key, use the <a>UpdatePrimaryRegion</a> operation.</p> <note> <p> <code>ReplicateKey</code> uses different default values for the <code>KeyPolicy</code> and <code>Tags</code> parameters than those used in the KMS console. For details, see the parameter descriptions.</p> </note> <p> <b>Cross-account use</b>: No. You cannot use this operation to create a replica key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: </p> <ul> <li> <p> <code>kms:ReplicateKey</code> on the primary key (in the primary key's Region). Include this permission in the primary key's key policy.</p> </li> <li> <p> <code>kms:CreateKey</code> in an IAM policy in the replica Region.</p> </li> <li> <p>To use the <code>Tags</code> parameter, <code>kms:TagResource</code> in an IAM policy in the replica Region.</p> </li> </ul> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>UpdatePrimaryRegion</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Replicates a multi-Region key into the specified Region. This operation creates a multi-Region replica key based on a multi-Region primary key in a different Region of the same Amazon Web Services partition. You can create multiple replicas of a primary key, but each must be in a different Region. To create a multi-Region primary key, use the <a>CreateKey</a> operation.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>A <i>replica key</i> is a fully-functional KMS key that can be used independently of its primary and peer replica keys. A primary key and its replica keys share properties that make them interoperable. They have the same <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id\">key ID</a> and key material. They also have the same key spec, key usage, key material origin, and automatic key rotation status. KMS automatically synchronizes these shared properties among related multi-Region keys. All other properties of a replica key can differ, including its <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">key policy</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">tags</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html\">aliases</a>, and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">key state</a>. KMS pricing and quotas for KMS keys apply to each primary key and replica key.</p> <p>When this operation completes, the new replica key has a transient key state of <code>Creating</code>. This key state changes to <code>Enabled</code> (or <code>PendingImport</code>) after a few seconds when the process of creating the new replica key is complete. While the key state is <code>Creating</code>, you can manage key, but you cannot yet use it in cryptographic operations. If you are creating and using the replica key programmatically, retry on <code>KMSInvalidStateException</code> or call <code>DescribeKey</code> to check its <code>KeyState</code> value before using it. For details about the <code>Creating</code> key state, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>You cannot create more than one replica of a primary key in any Region. If the Region already includes a replica of the key you're trying to replicate, <code>ReplicateKey</code> returns an <code>AlreadyExistsException</code> error. If the key state of the existing replica is <code>PendingDeletion</code>, you can cancel the scheduled key deletion (<a>CancelKeyDeletion</a>) or wait for the key to be deleted. The new replica key you create will have the same <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html#mrk-sync-properties\">shared properties</a> as the original replica key.</p> <p>The CloudTrail log of a <code>ReplicateKey</code> operation records a <code>ReplicateKey</code> operation in the primary key's Region and a <a>CreateKey</a> operation in the replica key's Region.</p> <p>If you replicate a multi-Region primary key with imported key material, the replica key is created with no key material. You must import the same key material that you imported into the primary key.</p> <p>To convert a replica key to a primary key, use the <a>UpdatePrimaryRegion</a> operation.</p> <note> <p> <code>ReplicateKey</code> uses different default values for the <code>KeyPolicy</code> and <code>Tags</code> parameters than those used in the KMS console. For details, see the parameter descriptions.</p> </note> <p> <b>Cross-account use</b>: No. You cannot use this operation to create a replica key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: </p> <ul> <li> <p> <code>kms:ReplicateKey</code> on the primary key (in the primary key's Region). Include this permission in the primary key's key policy.</p> </li> <li> <p> <code>kms:CreateKey</code> in an IAM policy in the replica Region.</p> </li> <li> <p>To use the <code>Tags</code> parameter, <code>kms:TagResource</code> in an IAM policy in the replica Region.</p> </li> </ul> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>UpdatePrimaryRegion</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "RetireGrant":{
       "name":"RetireGrant",
@@ -790,7 +791,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Deletes a grant. Typically, you retire a grant when you no longer need its permissions. To identify the grant to retire, use a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">grant token</a>, or both the grant ID and a key identifier (key ID or key ARN) of the KMS key. The <a>CreateGrant</a> operation returns both values.</p> <p>This operation can be called by the <i>retiring principal</i> for a grant, by the <i>grantee principal</i> if the grant allows the <code>RetireGrant</code> operation, and by the Amazon Web Services account in which the grant is created. It can also be called by principals to whom permission for retiring a grant is delegated. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#grant-delete\">Retiring and revoking grants</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of working with grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-grants.html\">Programming grants</a>. </p> <p> <b>Cross-account use</b>: Yes. You can retire a grant on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: Permission to retire a grant is determined primarily by the grant. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#grant-delete\">Retiring and revoking grants</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes a grant. Typically, you retire a grant when you no longer need its permissions. To identify the grant to retire, use a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">grant token</a>, or both the grant ID and a key identifier (key ID or key ARN) of the KMS key. The <a>CreateGrant</a> operation returns both values.</p> <p>This operation can be called by the <i>retiring principal</i> for a grant, by the <i>grantee principal</i> if the grant allows the <code>RetireGrant</code> operation, and by the Amazon Web Services account in which the grant is created. It can also be called by principals to whom permission for retiring a grant is delegated.</p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of creating grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_CreateGrant_section.html\">Use CreateGrant with an Amazon Web Services SDK or CLI</a>. </p> <p> <b>Cross-account use</b>: Yes. You can retire a grant on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: Permission to retire a grant is determined primarily by the grant. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-delete.html\">Retiring and revoking grants</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RevokeGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "RevokeGrant":{
       "name":"RevokeGrant",
@@ -808,7 +809,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Deletes the specified grant. You revoke a grant to terminate the permissions that the grant allows. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#grant-delete\">Retiring and revoking grants</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>When you create, retire, or revoke a grant, there might be a brief delay, usually less than five minutes, until the grant is available throughout KMS. This state is known as <i>eventual consistency</i>. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-eventual-consistency\">Eventual consistency</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. </p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of working with grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-grants.html\">Programming grants</a>. </p> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:RevokeGrant</a> (key policy).</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes the specified grant. You revoke a grant to terminate the permissions that the grant allows. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-delete.html\">Retiring and revoking grants</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>When you create, retire, or revoke a grant, there might be a brief delay, usually less than five minutes, until the grant is available throughout KMS. This state is known as <i>eventual consistency</i>. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-eventual-consistency\">Eventual consistency</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. </p> <p>For detailed information about grants, including grant terminology, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html\">Grants in KMS</a> in the <i> <i>Key Management Service Developer Guide</i> </i>. For examples of creating grants in several programming languages, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/example_kms_CreateGrant_section.html\">Use CreateGrant with an Amazon Web Services SDK or CLI</a>. </p> <p> <b>Cross-account use</b>: Yes. To perform this operation on a KMS key in a different Amazon Web Services account, specify the key ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:RevokeGrant</a> (key policy).</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateGrant</a> </p> </li> <li> <p> <a>ListGrants</a> </p> </li> <li> <p> <a>ListRetirableGrants</a> </p> </li> <li> <p> <a>RetireGrant</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "RotateKeyOnDemand":{
       "name":"RotateKeyOnDemand",
@@ -829,7 +830,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Immediately initiates rotation of the key material of the specified symmetric encryption KMS key.</p> <p>You can perform <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-on-demand\">on-demand rotation</a> of the key material in customer managed KMS keys, regardless of whether or not <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-enable-disable\">automatic key rotation</a> is enabled. On-demand rotations do not change existing automatic rotation schedules. For example, consider a KMS key that has automatic key rotation enabled with a rotation period of 730 days. If the key is scheduled to automatically rotate on April 14, 2024, and you perform an on-demand rotation on April 10, 2024, the key will automatically rotate, as scheduled, on April 14, 2024 and every 730 days thereafter.</p> <note> <p>You can perform on-demand key rotation a <b>maximum of 10 times</b> per KMS key. You can use the KMS console to view the number of remaining on-demand rotations available for a KMS key.</p> </note> <p>You can use <a>GetKeyRotationStatus</a> to identify any in progress on-demand rotations. You can use <a>ListKeyRotations</a> to identify the date that completed on-demand rotations were performed. You can monitor rotation of the key material for your KMS keys in CloudTrail and Amazon CloudWatch.</p> <p>On-demand key rotation is supported only on <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks\">symmetric encryption KMS keys</a>. You cannot perform on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To perform on-demand rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, invoke the on-demand rotation on the primary key.</p> <p>You cannot initiate on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed KMS keys</a>. KMS always rotates the key material of Amazon Web Services managed keys every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk\">Amazon Web Services owned KMS keys</a> is managed by the Amazon Web Services service that owns the key.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:RotateKeyOnDemand</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Immediately initiates rotation of the key material of the specified symmetric encryption KMS key.</p> <p>You can perform <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-on-demand.html\">on-demand rotation</a> of the key material in customer managed KMS keys, regardless of whether or not <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-enable-disable.html\">automatic key rotation</a> is enabled. On-demand rotations do not change existing automatic rotation schedules. For example, consider a KMS key that has automatic key rotation enabled with a rotation period of 730 days. If the key is scheduled to automatically rotate on April 14, 2024, and you perform an on-demand rotation on April 10, 2024, the key will automatically rotate, as scheduled, on April 14, 2024 and every 730 days thereafter.</p> <note> <p>You can perform on-demand key rotation a <b>maximum of 10 times</b> per KMS key. You can use the KMS console to view the number of remaining on-demand rotations available for a KMS key.</p> </note> <p>You can use <a>GetKeyRotationStatus</a> to identify any in progress on-demand rotations. You can use <a>ListKeyRotations</a> to identify the date that completed on-demand rotations were performed. You can monitor rotation of the key material for your KMS keys in CloudTrail and Amazon CloudWatch.</p> <p>On-demand key rotation is supported only on symmetric encryption KMS keys. You cannot perform on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, multi-Region KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. When you initiate on-demand key rotation on a symmetric encryption KMS key with imported key material, you must have already imported <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html\">new key material</a> and that key material's state should be <code>PENDING_ROTATION</code>. Use the <code>ListKeyRotations</code> operation to check the state of all key materials associated with a KMS key. To perform on-demand rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, invoke the on-demand rotation on the primary key.</p> <p>You cannot initiate on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed KMS keys</a>. KMS always rotates the key material of Amazon Web Services managed keys every year. Rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key\">Amazon Web Services owned KMS keys</a> is managed by the Amazon Web Services service that owns the key.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:RotateKeyOnDemand</a> (key policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>EnableKeyRotation</a> </p> </li> <li> <p> <a>DisableKeyRotation</a> </p> </li> <li> <p> <a>GetKeyRotationStatus</a> </p> </li> <li> <p> <a>ImportKeyMaterial</a> </p> </li> <li> <p> <a>ListKeyRotations</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "ScheduleKeyDeletion":{
       "name":"ScheduleKeyDeletion",
@@ -846,7 +847,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Schedules the deletion of a KMS key. By default, KMS applies a waiting period of 30 days, but you can specify a waiting period of 7-30 days. When this operation is successful, the key state of the KMS key changes to <code>PendingDeletion</code> and the key can't be used in any cryptographic operations. It remains in this state for the duration of the waiting period. Before the waiting period ends, you can use <a>CancelKeyDeletion</a> to cancel the deletion of the KMS key. After the waiting period ends, KMS deletes the KMS key, its key material, and all KMS data associated with it, including all aliases that refer to it.</p> <important> <p>Deleting a KMS key is a destructive and potentially dangerous operation. When a KMS key is deleted, all data that was encrypted under the KMS key is unrecoverable. (The only exception is a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-delete.html\">multi-Region replica key</a>, or an <a href=\"kms/latest/developerguide/importing-keys-managing.html#import-delete-key\">asymmetric or HMAC KMS key with imported key material</a>.) To prevent the use of a KMS key without deleting it, use <a>DisableKey</a>. </p> </important> <p>You can schedule the deletion of a multi-Region primary key and its replica keys at any time. However, KMS will not delete a multi-Region primary key with existing replica keys. If you schedule the deletion of a primary key with replicas, its key state changes to <code>PendingReplicaDeletion</code> and it cannot be replicated or used in cryptographic operations. This status can continue indefinitely. When the last of its replicas keys is deleted (not just scheduled), the key state of the primary key changes to <code>PendingDeletion</code> and its waiting period (<code>PendingWindowInDays</code>) begins. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-delete.html\">Deleting multi-Region keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When KMS <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/delete-cmk-keystore.html\">deletes a KMS key from an CloudHSM key store</a>, it makes a best effort to delete the associated key material from the associated CloudHSM cluster. However, you might need to manually <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html#fix-keystore-orphaned-key\">delete the orphaned key material</a> from the cluster and its backups. <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/delete-xks-key.html\">Deleting a KMS key from an external key store</a> has no effect on the associated external key. However, for both types of custom key stores, deleting a KMS key is destructive and irreversible. You cannot decrypt ciphertext encrypted under the KMS key by using only its associated external key or CloudHSM key. Also, you cannot recreate a KMS key in an external key store by creating a new KMS key with the same key material.</p> <p>For more information about scheduling a KMS key for deletion, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html\">Deleting KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: kms:ScheduleKeyDeletion (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CancelKeyDeletion</a> </p> </li> <li> <p> <a>DisableKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Schedules the deletion of a KMS key. By default, KMS applies a waiting period of 30 days, but you can specify a waiting period of 7-30 days. When this operation is successful, the key state of the KMS key changes to <code>PendingDeletion</code> and the key can't be used in any cryptographic operations. It remains in this state for the duration of the waiting period. Before the waiting period ends, you can use <a>CancelKeyDeletion</a> to cancel the deletion of the KMS key. After the waiting period ends, KMS deletes the KMS key, its key material, and all KMS data associated with it, including all aliases that refer to it.</p> <important> <p>Deleting a KMS key is a destructive and potentially dangerous operation. When a KMS key is deleted, all data that was encrypted under the KMS key is unrecoverable. (The only exception is a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-delete.html\">multi-Region replica key</a>, or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html#import-delete-key\">asymmetric or HMAC KMS key with imported key material</a>.) To prevent the use of a KMS key without deleting it, use <a>DisableKey</a>. </p> </important> <p>You can schedule the deletion of a multi-Region primary key and its replica keys at any time. However, KMS will not delete a multi-Region primary key with existing replica keys. If you schedule the deletion of a primary key with replicas, its key state changes to <code>PendingReplicaDeletion</code> and it cannot be replicated or used in cryptographic operations. This status can continue indefinitely. When the last of its replicas keys is deleted (not just scheduled), the key state of the primary key changes to <code>PendingDeletion</code> and its waiting period (<code>PendingWindowInDays</code>) begins. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html#deleting-mrks\">Deleting multi-Region keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When KMS <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html#delete-cmk-keystore\">deletes a KMS key from an CloudHSM key store</a>, it makes a best effort to delete the associated key material from the associated CloudHSM cluster. However, you might need to manually <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/fix-keystore.html#fix-keystore-orphaned-key\">delete the orphaned key material</a> from the cluster and its backups. <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html#delete-xks-key\">Deleting a KMS key from an external key store</a> has no effect on the associated external key. However, for both types of custom key stores, deleting a KMS key is destructive and irreversible. You cannot decrypt ciphertext encrypted under the KMS key by using only its associated external key or CloudHSM key. Also, you cannot recreate a KMS key in an external key store by creating a new KMS key with the same key material.</p> <p>For more information about scheduling a KMS key for deletion, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html\">Deleting KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: kms:ScheduleKeyDeletion (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CancelKeyDeletion</a> </p> </li> <li> <p> <a>DisableKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "Sign":{
       "name":"Sign",
@@ -867,7 +868,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Creates a <a href=\"https://en.wikipedia.org/wiki/Digital_signature\">digital signature</a> for a message or message digest by using the private key in an asymmetric signing KMS key. To verify the signature, use the <a>Verify</a> operation, or use the public key in the same asymmetric KMS key outside of KMS. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>Digital signatures are generated and verified by using asymmetric key pair, such as an RSA or ECC pair that is represented by an asymmetric KMS key. The key owner (or an authorized user) uses their private key to sign a message. Anyone with the public key can verify that the message was signed with that particular private key and that the message hasn't changed since it was signed. </p> <p>To use the <code>Sign</code> operation, provide the following information:</p> <ul> <li> <p>Use the <code>KeyId</code> parameter to identify an asymmetric KMS key with a <code>KeyUsage</code> value of <code>SIGN_VERIFY</code>. To get the <code>KeyUsage</code> value of a KMS key, use the <a>DescribeKey</a> operation. The caller must have <code>kms:Sign</code> permission on the KMS key.</p> </li> <li> <p>Use the <code>Message</code> parameter to specify the message or message digest to sign. You can submit messages of up to 4096 bytes. To sign a larger message, generate a hash digest of the message, and then provide the hash digest in the <code>Message</code> parameter. To indicate whether the message is a full message or a digest, use the <code>MessageType</code> parameter.</p> </li> <li> <p>Choose a signing algorithm that is compatible with the KMS key. </p> </li> </ul> <important> <p>When signing a message, be sure to record the KMS key and the signing algorithm. This information is required to verify the signature.</p> </important> <note> <p>Best practices recommend that you limit the time during which any signature is effective. This deters an attack where the actor uses a signed message to establish validity repeatedly or long after the message is superseded. Signatures do not include a timestamp, but you can include a timestamp in the signed message to help you detect when its time to refresh the signature. </p> </note> <p>To verify the signature that this operation generates, use the <a>Verify</a> operation. Or use the <a>GetPublicKey</a> operation to download the public key and then use the public key to verify the signature outside of KMS. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Sign</a> (key policy)</p> <p> <b>Related operations</b>: <a>Verify</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Creates a <a href=\"https://en.wikipedia.org/wiki/Digital_signature\">digital signature</a> for a message or message digest by using the private key in an asymmetric signing KMS key. To verify the signature, use the <a>Verify</a> operation, or use the public key in the same asymmetric KMS key outside of KMS. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>Digital signatures are generated and verified by using asymmetric key pair, such as an RSA, ECC, or ML-DSA pair that is represented by an asymmetric KMS key. The key owner (or an authorized user) uses their private key to sign a message. Anyone with the public key can verify that the message was signed with that particular private key and that the message hasn't changed since it was signed. </p> <p>To use the <code>Sign</code> operation, provide the following information:</p> <ul> <li> <p>Use the <code>KeyId</code> parameter to identify an asymmetric KMS key with a <code>KeyUsage</code> value of <code>SIGN_VERIFY</code>. To get the <code>KeyUsage</code> value of a KMS key, use the <a>DescribeKey</a> operation. The caller must have <code>kms:Sign</code> permission on the KMS key.</p> </li> <li> <p>Use the <code>Message</code> parameter to specify the message or message digest to sign. You can submit messages of up to 4096 bytes. To sign a larger message, generate a hash digest of the message, and then provide the hash digest in the <code>Message</code> parameter. To indicate whether the message is a full message, a digest, or an ML-DSA EXTERNAL_MU, use the <code>MessageType</code> parameter.</p> </li> <li> <p>Choose a signing algorithm that is compatible with the KMS key. </p> </li> </ul> <important> <p>When signing a message, be sure to record the KMS key and the signing algorithm. This information is required to verify the signature.</p> </important> <note> <p>Best practices recommend that you limit the time during which any signature is effective. This deters an attack where the actor uses a signed message to establish validity repeatedly or long after the message is superseded. Signatures do not include a timestamp, but you can include a timestamp in the signed message to help you detect when its time to refresh the signature. </p> </note> <p>To verify the signature that this operation generates, use the <a>Verify</a> operation. Or use the <a>GetPublicKey</a> operation to download the public key and then use the public key to verify the signature outside of KMS. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Sign</a> (key policy)</p> <p> <b>Related operations</b>: <a>Verify</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -884,7 +885,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"TagException"}
       ],
-      "documentation":"<p>Adds or edits tags on a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>.</p> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>Each tag consists of a tag key and a tag value, both of which are case-sensitive strings. The tag value can be an empty (null) string. To add a tag, specify a new tag key and a tag value. To edit a tag, specify an existing tag key and a new tag value.</p> <p>You can use this operation to tag a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>, but you cannot tag an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a>, an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk\">Amazon Web Services owned key</a>, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#keystore-concept\">custom key store</a>, or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#alias-concept\">alias</a>.</p> <p>You can also add tags to a KMS key while creating it (<a>CreateKey</a>) or replicating it (<a>ReplicateKey</a>).</p> <p>For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging keys</a>. For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>UntagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Adds or edits tags on a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a>.</p> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>Each tag consists of a tag key and a tag value, both of which are case-sensitive strings. The tag value can be an empty (null) string. To add a tag, specify a new tag key and a tag value. To edit a tag, specify an existing tag key and a new tag value.</p> <p>You can use this operation to tag a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a>, but you cannot tag an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed key</a>, an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key\">Amazon Web Services owned key</a>, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>, or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html\">alias</a>.</p> <p>You can also add tags to a KMS key while creating it (<a>CreateKey</a>) or replicating it (<a>ReplicateKey</a>).</p> <p>For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging keys</a>. For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>UntagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -900,7 +901,7 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"TagException"}
       ],
-      "documentation":"<p>Deletes tags from a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>. To delete a tag, specify the tag key and the KMS key.</p> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>When it succeeds, the <code>UntagResource</code> operation doesn't return any output. Also, if the specified tag key isn't found on the KMS key, it doesn't throw an exception or return a response. To confirm that the operation worked, use the <a>ListResourceTags</a> operation.</p> <p>For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging keys</a>. For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UntagResource</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>TagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Deletes tags from a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a>. To delete a tag, specify the tag key and the KMS key.</p> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>When it succeeds, the <code>UntagResource</code> operation doesn't return any output. Also, if the specified tag key isn't found on the KMS key, it doesn't throw an exception or return a response. To confirm that the operation worked, use the <a>ListResourceTags</a> operation.</p> <p>For information about using tags in KMS, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging keys</a>. For general information about tags, including the format and syntax, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UntagResource</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ListResourceTags</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> <li> <p> <a>TagResource</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "UpdateAlias":{
       "name":"UpdateAlias",
@@ -916,7 +917,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Associates an existing KMS alias with a different KMS key. Each alias is associated with only one KMS key at a time, although a KMS key can have multiple aliases. The alias and the KMS key must be in the same Amazon Web Services account and Region.</p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>The current and new KMS key must be the same type (both symmetric or both asymmetric or both HMAC), and they must have the same key usage. This restriction prevents errors in code that uses aliases. If you must assign an alias to a different type of KMS key, use <a>DeleteAlias</a> to delete the old alias and <a>CreateAlias</a> to create a new alias.</p> <p>You cannot use <code>UpdateAlias</code> to change an alias name. To change an alias name, use <a>DeleteAlias</a> to delete the old alias and <a>CreateAlias</a> to create a new alias.</p> <p>Because an alias is not a property of a KMS key, you can create, update, and delete the aliases of a KMS key without affecting the KMS key. Also, aliases do not appear in the response from the <a>DescribeKey</a> operation. To get the aliases of all KMS keys in the account, use the <a>ListAliases</a> operation. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the current KMS key (key policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the new KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Associates an existing KMS alias with a different KMS key. Each alias is associated with only one KMS key at a time, although a KMS key can have multiple aliases. The alias and the KMS key must be in the same Amazon Web Services account and Region.</p> <note> <p>Adding, deleting, or updating an alias can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>The current and new KMS key must be the same type (both symmetric or both asymmetric or both HMAC), and they must have the same key usage. This restriction prevents errors in code that uses aliases. If you must assign an alias to a different type of KMS key, use <a>DeleteAlias</a> to delete the old alias and <a>CreateAlias</a> to create a new alias.</p> <p>You cannot use <code>UpdateAlias</code> to change an alias name. To change an alias name, use <a>DeleteAlias</a> to delete the old alias and <a>CreateAlias</a> to create a new alias.</p> <p>Because an alias is not a property of a KMS key, you can create, update, and delete the aliases of a KMS key without affecting the KMS key. Also, aliases do not appear in the response from the <a>DescribeKey</a> operation. To get the aliases of all KMS keys in the account, use the <a>ListAliases</a> operation. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the alias (IAM policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the current KMS key (key policy).</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateAlias</a> on the new KMS key (key policy).</p> </li> </ul> <p>For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html#alias-access\">Controlling access to aliases</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>CreateAlias</a> </p> </li> <li> <p> <a>DeleteAlias</a> </p> </li> <li> <p> <a>ListAliases</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "UpdateCustomKeyStore":{
       "name":"UpdateCustomKeyStore",
@@ -945,7 +946,7 @@
         {"shape":"XksProxyInvalidResponseException"},
         {"shape":"XksProxyInvalidConfigurationException"}
       ],
-      "documentation":"<p>Changes the properties of a custom key store. You can use this operation to change the properties of an CloudHSM key store or an external key store.</p> <p>Use the required <code>CustomKeyStoreId</code> parameter to identify the custom key store. Use the remaining optional parameters to change its properties. This operation does not return any property values. To verify the updated property values, use the <a>DescribeCustomKeyStores</a> operation.</p> <p> This operation is part of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key stores</a> feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <important> <p>When updating the properties of an external key store, verify that the updated settings connect your key store, via the external key store proxy, to the same external key manager as the previous settings, or to a backup or snapshot of the external key manager with the same cryptographic keys. If the updated connection settings fail, you can fix them and retry, although an extended delay might disrupt Amazon Web Services services. However, if KMS permanently loses its access to cryptographic keys, ciphertext encrypted under those keys is unrecoverable.</p> </important> <note> <p>For external key stores:</p> <p>Some external key managers provide a simpler method for updating an external key store. For details, see your external key manager documentation.</p> <p>When updating an external key store in the KMS console, you can upload a JSON-based proxy configuration file with the desired values. You cannot upload the proxy configuration file to the <code>UpdateCustomKeyStore</code> operation. However, you can use the file to help you determine the correct values for the <code>UpdateCustomKeyStore</code> parameters.</p> </note> <p>For an CloudHSM key store, you can use this operation to change the custom key store friendly name (<code>NewCustomKeyStoreName</code>), to tell KMS about a change to the <code>kmsuser</code> crypto user password (<code>KeyStorePassword</code>), or to associate the custom key store with a different, but related, CloudHSM cluster (<code>CloudHsmClusterId</code>). To update any property of an CloudHSM key store, the <code>ConnectionState</code> of the CloudHSM key store must be <code>DISCONNECTED</code>. </p> <p>For an external key store, you can use this operation to change the custom key store friendly name (<code>NewCustomKeyStoreName</code>), or to tell KMS about a change to the external key store proxy authentication credentials (<code>XksProxyAuthenticationCredential</code>), connection method (<code>XksProxyConnectivity</code>), external proxy endpoint (<code>XksProxyUriEndpoint</code>) and path (<code>XksProxyUriPath</code>). For external key stores with an <code>XksProxyConnectivity</code> of <code>VPC_ENDPOINT_SERVICE</code>, you can also update the Amazon VPC endpoint service name (<code>XksProxyVpcEndpointServiceName</code>). To update most properties of an external key store, the <code>ConnectionState</code> of the external key store must be <code>DISCONNECTED</code>. However, you can update the <code>CustomKeyStoreName</code>, <code>XksProxyAuthenticationCredential</code>, and <code>XksProxyUriPath</code> of an external key store when it is in the CONNECTED or DISCONNECTED state. </p> <p>If your update requires a <code>DISCONNECTED</code> state, before using <code>UpdateCustomKeyStore</code>, use the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store. After the <code>UpdateCustomKeyStore</code> operation completes, use the <a>ConnectCustomKeyStore</a> to reconnect the custom key store. To find the <code>ConnectionState</code> of the custom key store, use the <a>DescribeCustomKeyStores</a> operation. </p> <p> </p> <p>Before updating the custom key store, verify that the new values allow KMS to connect the custom key store to its backing key store. For example, before you change the <code>XksProxyUriPath</code> value, verify that the external key store proxy is reachable at the new path.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Changes the properties of a custom key store. You can use this operation to change the properties of an CloudHSM key store or an external key store.</p> <p>Use the required <code>CustomKeyStoreId</code> parameter to identify the custom key store. Use the remaining optional parameters to change its properties. This operation does not return any property values. To verify the updated property values, use the <a>DescribeCustomKeyStores</a> operation.</p> <p> This operation is part of the custom key stores feature in KMS, which combines the convenience and extensive integration of KMS with the isolation and control of a key store that you own and manage.</p> <important> <p>When updating the properties of an external key store, verify that the updated settings connect your key store, via the external key store proxy, to the same external key manager as the previous settings, or to a backup or snapshot of the external key manager with the same cryptographic keys. If the updated connection settings fail, you can fix them and retry, although an extended delay might disrupt Amazon Web Services services. However, if KMS permanently loses its access to cryptographic keys, ciphertext encrypted under those keys is unrecoverable.</p> </important> <note> <p>For external key stores:</p> <p>Some external key managers provide a simpler method for updating an external key store. For details, see your external key manager documentation.</p> <p>When updating an external key store in the KMS console, you can upload a JSON-based proxy configuration file with the desired values. You cannot upload the proxy configuration file to the <code>UpdateCustomKeyStore</code> operation. However, you can use the file to help you determine the correct values for the <code>UpdateCustomKeyStore</code> parameters.</p> </note> <p>For an CloudHSM key store, you can use this operation to change the custom key store friendly name (<code>NewCustomKeyStoreName</code>), to tell KMS about a change to the <code>kmsuser</code> crypto user password (<code>KeyStorePassword</code>), or to associate the custom key store with a different, but related, CloudHSM cluster (<code>CloudHsmClusterId</code>). To update any property of an CloudHSM key store, the <code>ConnectionState</code> of the CloudHSM key store must be <code>DISCONNECTED</code>. </p> <p>For an external key store, you can use this operation to change the custom key store friendly name (<code>NewCustomKeyStoreName</code>), or to tell KMS about a change to the external key store proxy authentication credentials (<code>XksProxyAuthenticationCredential</code>), connection method (<code>XksProxyConnectivity</code>), external proxy endpoint (<code>XksProxyUriEndpoint</code>) and path (<code>XksProxyUriPath</code>). For external key stores with an <code>XksProxyConnectivity</code> of <code>VPC_ENDPOINT_SERVICE</code>, you can also update the Amazon VPC endpoint service name (<code>XksProxyVpcEndpointServiceName</code>). To update most properties of an external key store, the <code>ConnectionState</code> of the external key store must be <code>DISCONNECTED</code>. However, you can update the <code>CustomKeyStoreName</code>, <code>XksProxyAuthenticationCredential</code>, and <code>XksProxyUriPath</code> of an external key store when it is in the CONNECTED or DISCONNECTED state. </p> <p>If your update requires a <code>DISCONNECTED</code> state, before using <code>UpdateCustomKeyStore</code>, use the <a>DisconnectCustomKeyStore</a> operation to disconnect the custom key store. After the <code>UpdateCustomKeyStore</code> operation completes, use the <a>ConnectCustomKeyStore</a> to reconnect the custom key store. To find the <code>ConnectionState</code> of the custom key store, use the <a>DescribeCustomKeyStores</a> operation. </p> <p> </p> <p>Before updating the custom key store, verify that the new values allow KMS to connect the custom key store to its backing key store. For example, before you change the <code>XksProxyUriPath</code> value, verify that the external key store proxy is reachable at the new path.</p> <p>If the operation succeeds, it returns a JSON object with no properties.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a custom key store in a different Amazon Web Services account.</p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateCustomKeyStore</a> (IAM policy)</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>ConnectCustomKeyStore</a> </p> </li> <li> <p> <a>CreateCustomKeyStore</a> </p> </li> <li> <p> <a>DeleteCustomKeyStore</a> </p> </li> <li> <p> <a>DescribeCustomKeyStores</a> </p> </li> <li> <p> <a>DisconnectCustomKeyStore</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "UpdateKeyDescription":{
       "name":"UpdateKeyDescription",
@@ -961,7 +962,7 @@
         {"shape":"KMSInternalException"},
         {"shape":"KMSInvalidStateException"}
       ],
-      "documentation":"<p>Updates the description of a KMS key. To see the description of a KMS key, use <a>DescribeKey</a>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateKeyDescription</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Updates the description of a KMS key. To see the description of a KMS key, use <a>DescribeKey</a>. </p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: No. You cannot perform this operation on a KMS key in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:UpdateKeyDescription</a> (key policy)</p> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>DescribeKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "UpdatePrimaryRegion":{
       "name":"UpdatePrimaryRegion",
@@ -978,7 +979,7 @@
         {"shape":"NotFoundException"},
         {"shape":"UnsupportedOperationException"}
       ],
-      "documentation":"<p>Changes the primary key of a multi-Region key. </p> <p>This operation changes the replica key in the specified Region to a primary key and changes the former primary key to a replica key. For example, suppose you have a primary key in <code>us-east-1</code> and a replica key in <code>eu-west-2</code>. If you run <code>UpdatePrimaryRegion</code> with a <code>PrimaryRegion</code> value of <code>eu-west-2</code>, the primary key is now the key in <code>eu-west-2</code>, and the key in <code>us-east-1</code> becomes a replica key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-update\">Updating the primary Region</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The <i>primary key</i> of a multi-Region key is the source for properties that are always shared by primary and replica keys, including the key material, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id\">key ID</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-spec\">key spec</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-usage\">key usage</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-origin\">key material origin</a>, and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">automatic key rotation</a>. It's the only key that can be replicated. You cannot <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html\">delete the primary key</a> until all replica keys are deleted.</p> <p>The key ID and primary Region that you specify uniquely identify the replica key that will become the primary key. The primary Region must already have a replica key. This operation does not create a KMS key in the specified Region. To find the replica keys, use the <a>DescribeKey</a> operation on the primary key or any replica key. To create a replica key, use the <a>ReplicateKey</a> operation.</p> <p>You can run this operation while using the affected multi-Region keys in cryptographic operations. This operation should not delay, interrupt, or cause failures in cryptographic operations. </p> <p>Even after this operation completes, the process of updating the primary Region might still be in progress for a few more seconds. Operations such as <code>DescribeKey</code> might display both the old and new primary keys as replicas. The old and new primary keys have a transient key state of <code>Updating</code>. The original key state is restored when the update is complete. While the key state is <code>Updating</code>, you can use the keys in cryptographic operations, but you cannot replicate the new primary key or perform certain management operations, such as enabling or disabling these keys. For details about the <code>Updating</code> key state, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation does not return any output. To verify that primary key is changed, use the <a>DescribeKey</a> operation.</p> <p> <b>Cross-account use</b>: No. You cannot use this operation in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: </p> <ul> <li> <p> <code>kms:UpdatePrimaryRegion</code> on the current primary key (in the primary key's Region). Include this permission primary key's key policy.</p> </li> <li> <p> <code>kms:UpdatePrimaryRegion</code> on the current replica key (in the replica key's Region). Include this permission in the replica key's key policy.</p> </li> </ul> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Changes the primary key of a multi-Region key. </p> <p>This operation changes the replica key in the specified Region to a primary key and changes the former primary key to a replica key. For example, suppose you have a primary key in <code>us-east-1</code> and a replica key in <code>eu-west-2</code>. If you run <code>UpdatePrimaryRegion</code> with a <code>PrimaryRegion</code> value of <code>eu-west-2</code>, the primary key is now the key in <code>eu-west-2</code>, and the key in <code>us-east-1</code> becomes a replica key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-update.html\">Change the primary key in a set of multi-Region keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation supports <i>multi-Region keys</i>, an KMS feature that lets you create multiple interoperable KMS keys in different Amazon Web Services Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them interchangeably to encrypt data in one Amazon Web Services Region and decrypt it in a different Amazon Web Services Region without re-encrypting the data or making a cross-Region call. For more information about multi-Region keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">Multi-Region keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The <i>primary key</i> of a multi-Region key is the source for properties that are always shared by primary and replica keys, including the key material, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id\">key ID</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-spec\">key spec</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-usage\">key usage</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-origin\">key material origin</a>, and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html\">automatic key rotation</a>. It's the only key that can be replicated. You cannot <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html\">delete the primary key</a> until all replica keys are deleted.</p> <p>The key ID and primary Region that you specify uniquely identify the replica key that will become the primary key. The primary Region must already have a replica key. This operation does not create a KMS key in the specified Region. To find the replica keys, use the <a>DescribeKey</a> operation on the primary key or any replica key. To create a replica key, use the <a>ReplicateKey</a> operation.</p> <p>You can run this operation while using the affected multi-Region keys in cryptographic operations. This operation should not delay, interrupt, or cause failures in cryptographic operations. </p> <p>Even after this operation completes, the process of updating the primary Region might still be in progress for a few more seconds. Operations such as <code>DescribeKey</code> might display both the old and new primary keys as replicas. The old and new primary keys have a transient key state of <code>Updating</code>. The original key state is restored when the update is complete. While the key state is <code>Updating</code>, you can use the keys in cryptographic operations, but you cannot replicate the new primary key or perform certain management operations, such as enabling or disabling these keys. For details about the <code>Updating</code> key state, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>This operation does not return any output. To verify that primary key is changed, use the <a>DescribeKey</a> operation.</p> <p> <b>Cross-account use</b>: No. You cannot use this operation in a different Amazon Web Services account. </p> <p> <b>Required permissions</b>: </p> <ul> <li> <p> <code>kms:UpdatePrimaryRegion</code> on the current primary key (in the primary key's Region). Include this permission primary key's key policy.</p> </li> <li> <p> <code>kms:UpdatePrimaryRegion</code> on the current replica key (in the replica key's Region). Include this permission in the replica key's key policy.</p> </li> </ul> <p> <b>Related operations</b> </p> <ul> <li> <p> <a>CreateKey</a> </p> </li> <li> <p> <a>ReplicateKey</a> </p> </li> </ul> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "Verify":{
       "name":"Verify",
@@ -1000,7 +1001,7 @@
         {"shape":"KMSInvalidSignatureException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Verifies a digital signature that was generated by the <a>Sign</a> operation. </p> <p/> <p>Verification confirms that an authorized user signed the message with the specified KMS key and signing algorithm, and the message hasn't changed since it was signed. If the signature is verified, the value of the <code>SignatureValid</code> field in the response is <code>True</code>. If the signature verification fails, the <code>Verify</code> operation fails with an <code>KMSInvalidSignatureException</code> exception.</p> <p>A digital signature is generated by using the private key in an asymmetric KMS key. The signature is verified by using the public key in the same asymmetric KMS key. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>To use the <code>Verify</code> operation, specify the same asymmetric KMS key, message, and signing algorithm that were used to produce the signature. The message type does not need to be the same as the one used for signing, but it must indicate whether the value of the <code>Message</code> parameter should be hashed as part of the verification process.</p> <p>You can also verify the digital signature by using the public key of the KMS key outside of KMS. Use the <a>GetPublicKey</a> operation to download the public key in the asymmetric KMS key and then use the public key to verify the signature outside of KMS. The advantage of using the <code>Verify</code> operation is that it is performed within KMS. As a result, it's easy to call, the operation is performed within the FIPS boundary, it is logged in CloudTrail, and you can use key policy and IAM policy to determine who is authorized to use the KMS key to verify signatures.</p> <p>To verify a signature outside of KMS with an SM2 public key (China Regions only), you must specify the distinguishing ID. By default, KMS uses <code>1234567812345678</code> as the distinguishing ID. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Verify</a> (key policy)</p> <p> <b>Related operations</b>: <a>Sign</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Verifies a digital signature that was generated by the <a>Sign</a> operation. </p> <p/> <p>Verification confirms that an authorized user signed the message with the specified KMS key and signing algorithm, and the message hasn't changed since it was signed. If the signature is verified, the value of the <code>SignatureValid</code> field in the response is <code>True</code>. If the signature verification fails, the <code>Verify</code> operation fails with an <code>KMSInvalidSignatureException</code> exception.</p> <p>A digital signature is generated by using the private key in an asymmetric KMS key. The signature is verified by using the public key in the same asymmetric KMS key. For information about asymmetric KMS keys, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>To use the <code>Verify</code> operation, specify the same asymmetric KMS key, message, and signing algorithm that were used to produce the signature. The message type does not need to be the same as the one used for signing, but it must indicate whether the value of the <code>Message</code> parameter should be hashed as part of the verification process.</p> <p>You can also verify the digital signature by using the public key of the KMS key outside of KMS. Use the <a>GetPublicKey</a> operation to download the public key in the asymmetric KMS key and then use the public key to verify the signature outside of KMS. The advantage of using the <code>Verify</code> operation is that it is performed within KMS. As a result, it's easy to call, the operation is performed within the FIPS boundary, it is logged in CloudTrail, and you can use key policy and IAM policy to determine who is authorized to use the KMS key to verify signatures.</p> <p>To verify a signature outside of KMS with an SM2 public key (China Regions only), you must specify the distinguishing ID. By default, KMS uses <code>1234567812345678</code> as the distinguishing ID. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/offline-operations.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:Verify</a> (key policy)</p> <p> <b>Related operations</b>: <a>Sign</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     },
     "VerifyMac":{
       "name":"VerifyMac",
@@ -1021,11 +1022,17 @@
         {"shape":"KMSInvalidStateException"},
         {"shape":"DryRunOperationException"}
       ],
-      "documentation":"<p>Verifies the hash-based message authentication code (HMAC) for a specified message, HMAC KMS key, and MAC algorithm. To verify the HMAC, <code>VerifyMac</code> computes an HMAC using the message, HMAC KMS key, and MAC algorithm that you specify, and compares the computed HMAC to the HMAC that you specify. If the HMACs are identical, the verification succeeds; otherwise, it fails. Verification indicates that the message hasn't changed since the HMAC was calculated, and the specified key was used to generate and verify the HMAC.</p> <p>HMAC KMS keys and the HMAC algorithms that KMS uses conform to industry standards defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc2104\">RFC 2104</a>.</p> <p>This operation is part of KMS support for HMAC KMS keys. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:VerifyMac</a> (key policy)</p> <p> <b>Related operations</b>: <a>GenerateMac</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">KMS eventual consistency</a>.</p>"
+      "documentation":"<p>Verifies the hash-based message authentication code (HMAC) for a specified message, HMAC KMS key, and MAC algorithm. To verify the HMAC, <code>VerifyMac</code> computes an HMAC using the message, HMAC KMS key, and MAC algorithm that you specify, and compares the computed HMAC to the HMAC that you specify. If the HMACs are identical, the verification succeeds; otherwise, it fails. Verification indicates that the message hasn't changed since the HMAC was calculated, and the specified key was used to generate and verify the HMAC.</p> <p>HMAC KMS keys and the HMAC algorithms that KMS uses conform to industry standards defined in <a href=\"https://datatracker.ietf.org/doc/html/rfc2104\">RFC 2104</a>.</p> <p>This operation is part of KMS support for HMAC KMS keys. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>The KMS key that you use for this operation must be in a compatible key state. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html\">Key states of KMS keys</a> in the <i>Key Management Service Developer Guide</i>.</p> <p> <b>Cross-account use</b>: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the <code>KeyId</code> parameter. </p> <p> <b>Required permissions</b>: <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:VerifyMac</a> (key policy)</p> <p> <b>Related operations</b>: <a>GenerateMac</a> </p> <p> <b>Eventual consistency</b>: The KMS API follows an eventual consistency model. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/accessing-kms.html#programming-eventual-consistency\">KMS eventual consistency</a>.</p>"
     }
   },
   "shapes":{
     "AWSAccountIdType":{"type":"string"},
+    "AccountIdType":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"[0-9]{12}"
+    },
     "AlgorithmSpec":{
       "type":"string",
       "enum":[
@@ -1091,6 +1098,18 @@
       "max":262144,
       "min":1
     },
+    "BackingKeyIdResponseType":{
+      "type":"string",
+      "max":64,
+      "min":0,
+      "pattern":"^[a-f0-9]+$"
+    },
+    "BackingKeyIdType":{
+      "type":"string",
+      "max":64,
+      "min":64,
+      "pattern":"^[a-f0-9]+$"
+    },
     "BooleanType":{"type":"boolean"},
     "CancelKeyDeletionRequest":{
       "type":"structure",
@@ -1182,8 +1201,7 @@
     },
     "ConnectCustomKeyStoreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConnectionErrorCodeType":{
       "type":"string",
@@ -1227,11 +1245,11 @@
       "members":{
         "AliasName":{
           "shape":"AliasNameType",
-          "documentation":"<p>Specifies the alias name. This value must begin with <code>alias/</code> followed by a name, such as <code>alias/ExampleAlias</code>. </p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>The <code>AliasName</code> value must be string of 1-256 characters. It can contain only alphanumeric characters, forward slashes (/), underscores (_), and dashes (-). The alias name cannot begin with <code>alias/aws/</code>. The <code>alias/aws/</code> prefix is reserved for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed keys</a>.</p>"
+          "documentation":"<p>Specifies the alias name. This value must begin with <code>alias/</code> followed by a name, such as <code>alias/ExampleAlias</code>. </p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>The <code>AliasName</code> value must be string of 1-256 characters. It can contain only alphanumeric characters, forward slashes (/), underscores (_), and dashes (-). The alias name cannot begin with <code>alias/aws/</code>. The <code>alias/aws/</code> prefix is reserved for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed keys</a>.</p>"
         },
         "TargetKeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Associates the alias with the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>. The KMS key must be in the same Amazon Web Services Region. </p> <p>A valid key ID is required. If you supply a null or empty string value, this operation returns an error.</p> <p>For help finding the key ID and ARN, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn\">Finding the Key ID and ARN</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+          "documentation":"<p>Associates the alias with the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a>. The KMS key must be in the same Amazon Web Services Region. </p> <p>A valid key ID is required. If you supply a null or empty string value, this operation returns an error.</p> <p>For help finding the key ID and ARN, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html\">Find the key ID and key ARN</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         }
       }
     },
@@ -1253,7 +1271,7 @@
         },
         "KeyStorePassword":{
           "shape":"KeyStorePasswordType",
-          "documentation":"<p>Specifies the <code>kmsuser</code> password for an CloudHSM key store. This parameter is required for custom key stores with a <code>CustomKeyStoreType</code> of <code>AWS_CLOUDHSM</code>.</p> <p>Enter the password of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-concepts.html#concept-kmsuser\"> <code>kmsuser</code> crypto user (CU) account</a> in the specified CloudHSM cluster. KMS logs into the cluster as this user to manage key material on your behalf.</p> <p>The password must be a string of 7 to 32 characters. Its value is case sensitive.</p> <p>This parameter tells KMS the <code>kmsuser</code> account password; it does not change the password in the CloudHSM cluster.</p>"
+          "documentation":"<p>Specifies the <code>kmsuser</code> password for an CloudHSM key store. This parameter is required for custom key stores with a <code>CustomKeyStoreType</code> of <code>AWS_CLOUDHSM</code>.</p> <p>Enter the password of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html#concept-kmsuser\"> <code>kmsuser</code> crypto user (CU) account</a> in the specified CloudHSM cluster. KMS logs into the cluster as this user to manage key material on your behalf.</p> <p>The password must be a string of 7 to 32 characters. Its value is case sensitive.</p> <p>This parameter tells KMS the <code>kmsuser</code> account password; it does not change the password in the CloudHSM cluster.</p>"
         },
         "CustomKeyStoreType":{
           "shape":"CustomKeyStoreType",
@@ -1271,13 +1289,17 @@
           "shape":"XksProxyVpcEndpointServiceNameType",
           "documentation":"<p>Specifies the name of the Amazon VPC endpoint service for interface endpoints that is used to communicate with your external key store proxy (XKS proxy). This parameter is required when the value of <code>CustomKeyStoreType</code> is <code>EXTERNAL_KEY_STORE</code> and the value of <code>XksProxyConnectivity</code> is <code>VPC_ENDPOINT_SERVICE</code>.</p> <p>The Amazon VPC endpoint service must <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-xks-keystore.html#xks-requirements\">fulfill all requirements</a> for use with an external key store. </p> <p> <b>Uniqueness requirements:</b> </p> <ul> <li> <p>External key stores with <code>VPC_ENDPOINT_SERVICE</code> connectivity can share an Amazon VPC, but each external key store must have its own VPC endpoint service and private DNS name.</p> </li> </ul>"
         },
+        "XksProxyVpcEndpointServiceOwner":{
+          "shape":"AccountIdType",
+          "documentation":"<p>Specifies the Amazon Web Services account ID that owns the Amazon VPC service endpoint for the interface that is used to communicate with your external key store proxy (XKS proxy). This parameter is optional. If not provided, the Amazon Web Services account ID calling the action will be used.</p>"
+        },
         "XksProxyAuthenticationCredential":{
           "shape":"XksProxyAuthenticationCredentialType",
-          "documentation":"<p>Specifies an authentication credential for the external key store proxy (XKS proxy). This parameter is required for all custom key stores with a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>.</p> <p>The <code>XksProxyAuthenticationCredential</code> has two required elements: <code>RawSecretAccessKey</code>, a secret key, and <code>AccessKeyId</code>, a unique identifier for the <code>RawSecretAccessKey</code>. For character requirements, see <a href=\"kms/latest/APIReference/API_XksProxyAuthenticationCredentialType.html\">XksProxyAuthenticationCredentialType</a>.</p> <p>KMS uses this authentication credential to sign requests to the external key store proxy on your behalf. This credential is unrelated to Identity and Access Management (IAM) and Amazon Web Services credentials.</p> <p>This parameter doesn't set or change the authentication credentials on the XKS proxy. It just tells KMS the credential that you established on your external key store proxy. If you rotate your proxy authentication credential, use the <a>UpdateCustomKeyStore</a> operation to provide the new credential to KMS.</p>"
+          "documentation":"<p>Specifies an authentication credential for the external key store proxy (XKS proxy). This parameter is required for all custom key stores with a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>.</p> <p>The <code>XksProxyAuthenticationCredential</code> has two required elements: <code>RawSecretAccessKey</code>, a secret key, and <code>AccessKeyId</code>, a unique identifier for the <code>RawSecretAccessKey</code>. For character requirements, see <a href=\"API_XksProxyAuthenticationCredentialType.html\">XksProxyAuthenticationCredentialType</a>.</p> <p>KMS uses this authentication credential to sign requests to the external key store proxy on your behalf. This credential is unrelated to Identity and Access Management (IAM) and Amazon Web Services credentials.</p> <p>This parameter doesn't set or change the authentication credentials on the XKS proxy. It just tells KMS the credential that you established on your external key store proxy. If you rotate your proxy authentication credential, use the <a>UpdateCustomKeyStore</a> operation to provide the new credential to KMS.</p>"
         },
         "XksProxyConnectivity":{
           "shape":"XksProxyConnectivityType",
-          "documentation":"<p>Indicates how KMS communicates with the external key store proxy. This parameter is required for custom key stores with a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>.</p> <p>If the external key store proxy uses a public endpoint, specify <code>PUBLIC_ENDPOINT</code>. If the external key store proxy uses a Amazon VPC endpoint service for communication with KMS, specify <code>VPC_ENDPOINT_SERVICE</code>. For help making this choice, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/plan-xks-keystore.html#choose-xks-connectivity\">Choosing a connectivity option</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>An Amazon VPC endpoint service keeps your communication with KMS in a private address space entirely within Amazon Web Services, but it requires more configuration, including establishing a Amazon VPC with multiple subnets, a VPC endpoint service, a network load balancer, and a verified private DNS name. A public endpoint is simpler to set up, but it might be slower and might not fulfill your security requirements. You might consider testing with a public endpoint, and then establishing a VPC endpoint service for production tasks. Note that this choice does not determine the location of the external key store proxy. Even if you choose a VPC endpoint service, the proxy can be hosted within the VPC or outside of Amazon Web Services such as in your corporate data center.</p>"
+          "documentation":"<p>Indicates how KMS communicates with the external key store proxy. This parameter is required for custom key stores with a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>.</p> <p>If the external key store proxy uses a public endpoint, specify <code>PUBLIC_ENDPOINT</code>. If the external key store proxy uses a Amazon VPC endpoint service for communication with KMS, specify <code>VPC_ENDPOINT_SERVICE</code>. For help making this choice, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/choose-xks-connectivity.html\">Choosing a connectivity option</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>An Amazon VPC endpoint service keeps your communication with KMS in a private address space entirely within Amazon Web Services, but it requires more configuration, including establishing a Amazon VPC with multiple subnets, a VPC endpoint service, a network load balancer, and a verified private DNS name. A public endpoint is simpler to set up, but it might be slower and might not fulfill your security requirements. You might consider testing with a public endpoint, and then establishing a VPC endpoint service for production tasks. Note that this choice does not determine the location of the external key store proxy. Even if you choose a VPC endpoint service, the proxy can be hosted within the VPC or outside of Amazon Web Services such as in your corporate data center.</p>"
         }
       }
     },
@@ -1308,7 +1330,7 @@
         },
         "RetiringPrincipal":{
           "shape":"PrincipalIdType",
-          "documentation":"<p>The principal that has permission to use the <a>RetireGrant</a> operation to retire the grant. </p> <p>To specify the principal, use the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Name (ARN)</a> of an Amazon Web Services principal. Valid principals include Amazon Web Services accounts, IAM users, IAM roles, federated users, and assumed role users. For help with the ARN syntax for a principal, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns\">IAM ARNs</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p> <p>The grant determines the retiring principal. Other principals might have permission to retire the grant or revoke the grant. For details, see <a>RevokeGrant</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#grant-delete\">Retiring and revoking grants</a> in the <i>Key Management Service Developer Guide</i>. </p>"
+          "documentation":"<p>The principal that has permission to use the <a>RetireGrant</a> operation to retire the grant. </p> <p>To specify the principal, use the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Name (ARN)</a> of an Amazon Web Services principal. Valid principals include Amazon Web Services accounts, IAM users, IAM roles, federated users, and assumed role users. For help with the ARN syntax for a principal, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns\">IAM ARNs</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p> <p>The grant determines the retiring principal. Other principals might have permission to retire the grant or revoke the grant. For details, see <a>RevokeGrant</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-delete.html\">Retiring and revoking grants</a> in the <i>Key Management Service Developer Guide</i>. </p>"
         },
         "Operations":{
           "shape":"GrantOperationList",
@@ -1320,7 +1342,7 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens. </p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens. </p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "Name":{
           "shape":"GrantNameType",
@@ -1328,7 +1350,7 @@
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1337,7 +1359,7 @@
       "members":{
         "GrantToken":{
           "shape":"GrantTokenType",
-          "documentation":"<p>The grant token.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The grant token.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "GrantId":{
           "shape":"GrantIdType",
@@ -1350,7 +1372,7 @@
       "members":{
         "Policy":{
           "shape":"PolicyType",
-          "documentation":"<p>The key policy to attach to the KMS key.</p> <p>If you provide a key policy, it must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <p>If you do not provide a key policy, KMS attaches a default key policy to the KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. </p> <p>The key policy size quota is 32 kilobytes (32768 bytes).</p> <p>For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
+          "documentation":"<p>The key policy to attach to the KMS key.</p> <p>If you provide a key policy, it must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <note> <p>If either of the required <code>Resource</code> or <code>Action</code> elements are missing from a key policy statement, the policy statement has no effect. When a key policy statement is missing one of these elements, the KMS console correctly reports an error, but the <code>CreateKey</code> and <code>PutKeyPolicy</code> API requests succeed, even though the policy statement is ineffective.</p> <p>For more information on required key policy elements, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html#key-policy-elements\">Elements in a key policy</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>If you do not provide a key policy, KMS attaches a default key policy to the KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. </p> <note> <p>If the key policy exceeds the length constraint, KMS returns a <code>LimitExceededException</code>.</p> </note> <p>For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
         },
         "Description":{
           "shape":"DescriptionType",
@@ -1358,7 +1380,7 @@
         },
         "KeyUsage":{
           "shape":"KeyUsageType",
-          "documentation":"<p>Determines the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> for which you can use the KMS key. The default value is <code>ENCRYPT_DECRYPT</code>. This parameter is optional when you are creating a symmetric encryption KMS key; otherwise, it is required. You can't change the <code>KeyUsage</code> value after the KMS key is created.</p> <p>Select only one valid value.</p> <ul> <li> <p>For symmetric encryption KMS keys, omit the parameter or specify <code>ENCRYPT_DECRYPT</code>.</p> </li> <li> <p>For HMAC KMS keys (symmetric), specify <code>GENERATE_VERIFY_MAC</code>.</p> </li> <li> <p>For asymmetric KMS keys with RSA key pairs, specify <code>ENCRYPT_DECRYPT</code> or <code>SIGN_VERIFY</code>.</p> </li> <li> <p>For asymmetric KMS keys with NIST-recommended elliptic curve key pairs, specify <code>SIGN_VERIFY</code> or <code>KEY_AGREEMENT</code>.</p> </li> <li> <p>For asymmetric KMS keys with <code>ECC_SECG_P256K1</code> key pairs specify <code>SIGN_VERIFY</code>.</p> </li> <li> <p>For asymmetric KMS keys with SM2 key pairs (China Regions only), specify <code>ENCRYPT_DECRYPT</code>, <code>SIGN_VERIFY</code>, or <code>KEY_AGREEMENT</code>.</p> </li> </ul>"
+          "documentation":"<p>Determines the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> for which you can use the KMS key. The default value is <code>ENCRYPT_DECRYPT</code>. This parameter is optional when you are creating a symmetric encryption KMS key; otherwise, it is required. You can't change the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#key-usage\"> <code>KeyUsage</code> </a> value after the KMS key is created. Each KMS key can have only one key usage. This follows key usage best practices according to <a href=\"https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final\">NIST SP 800-57 Recommendations for Key Management</a>, section 5.2, Key usage.</p> <p>Select only one valid value.</p> <ul> <li> <p>For symmetric encryption KMS keys, omit the parameter or specify <code>ENCRYPT_DECRYPT</code>.</p> </li> <li> <p>For HMAC KMS keys (symmetric), specify <code>GENERATE_VERIFY_MAC</code>.</p> </li> <li> <p>For asymmetric KMS keys with RSA key pairs, specify <code>ENCRYPT_DECRYPT</code> or <code>SIGN_VERIFY</code>.</p> </li> <li> <p>For asymmetric KMS keys with NIST-standard elliptic curve key pairs, specify <code>SIGN_VERIFY</code> or <code>KEY_AGREEMENT</code>.</p> </li> <li> <p>For asymmetric KMS keys with <code>ECC_SECG_P256K1</code> key pairs, specify <code>SIGN_VERIFY</code>.</p> </li> <li> <p>For asymmetric KMS keys with ML-DSA key pairs, specify <code>SIGN_VERIFY</code>.</p> </li> <li> <p>For asymmetric KMS keys with SM2 key pairs (China Regions only), specify <code>ENCRYPT_DECRYPT</code>, <code>SIGN_VERIFY</code>, or <code>KEY_AGREEMENT</code>.</p> </li> </ul>"
         },
         "CustomerMasterKeySpec":{
           "shape":"CustomerMasterKeySpec",
@@ -1368,7 +1390,7 @@
         },
         "KeySpec":{
           "shape":"KeySpec",
-          "documentation":"<p>Specifies the type of KMS key to create. The default value, <code>SYMMETRIC_DEFAULT</code>, creates a KMS key with a 256-bit AES-GCM key that is used for encryption and decryption, except in China Regions, where it creates a 128-bit symmetric key that uses SM4 encryption. For help choosing a key spec for your KMS key, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-types.html#symm-asymm-choose\">Choosing a KMS key type</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>The <code>KeySpec</code> determines whether the KMS key contains a symmetric key or an asymmetric key pair. It also determines the algorithms that the KMS key supports. You can't change the <code>KeySpec</code> after the KMS key is created. To further restrict the algorithms that can be used with the KMS key, use a condition key in its key policy or IAM policy. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-algorithm\">kms:EncryptionAlgorithm</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-mac-algorithm\">kms:MacAlgorithm</a> or <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-signing-algorithm\">kms:Signing Algorithm</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <important> <p> <a href=\"http://aws.amazon.com/kms/features/#AWS_Service_Integration\">Amazon Web Services services that are integrated with KMS</a> use symmetric encryption KMS keys to protect your data. These services do not support asymmetric KMS keys or HMAC KMS keys.</p> </important> <p>KMS supports the following key specs for KMS keys:</p> <ul> <li> <p>Symmetric encryption key (default)</p> <ul> <li> <p> <code>SYMMETRIC_DEFAULT</code> </p> </li> </ul> </li> <li> <p>HMAC keys (symmetric)</p> <ul> <li> <p> <code>HMAC_224</code> </p> </li> <li> <p> <code>HMAC_256</code> </p> </li> <li> <p> <code>HMAC_384</code> </p> </li> <li> <p> <code>HMAC_512</code> </p> </li> </ul> </li> <li> <p>Asymmetric RSA key pairs (encryption and decryption -or- signing and verification)</p> <ul> <li> <p> <code>RSA_2048</code> </p> </li> <li> <p> <code>RSA_3072</code> </p> </li> <li> <p> <code>RSA_4096</code> </p> </li> </ul> </li> <li> <p>Asymmetric NIST-recommended elliptic curve key pairs (signing and verification -or- deriving shared secrets)</p> <ul> <li> <p> <code>ECC_NIST_P256</code> (secp256r1)</p> </li> <li> <p> <code>ECC_NIST_P384</code> (secp384r1)</p> </li> <li> <p> <code>ECC_NIST_P521</code> (secp521r1)</p> </li> </ul> </li> <li> <p>Other asymmetric elliptic curve key pairs (signing and verification)</p> <ul> <li> <p> <code>ECC_SECG_P256K1</code> (secp256k1), commonly used for cryptocurrencies.</p> </li> </ul> </li> <li> <p>SM2 key pairs (encryption and decryption -or- signing and verification -or- deriving shared secrets)</p> <ul> <li> <p> <code>SM2</code> (China Regions only)</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>Specifies the type of KMS key to create. The default value, <code>SYMMETRIC_DEFAULT</code>, creates a KMS key with a 256-bit AES-GCM key that is used for encryption and decryption, except in China Regions, where it creates a 128-bit symmetric key that uses SM4 encryption. For a detailed description of all supported key specs, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html\">Key spec reference</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <p>The <code>KeySpec</code> determines whether the KMS key contains a symmetric key or an asymmetric key pair. It also determines the algorithms that the KMS key supports. You can't change the <code>KeySpec</code> after the KMS key is created. To further restrict the algorithms that can be used with the KMS key, use a condition key in its key policy or IAM policy. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-encryption-algorithm\">kms:EncryptionAlgorithm</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-mac-algorithm\">kms:MacAlgorithm</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-key-agreement-algorithm\">kms:KeyAgreementAlgorithm</a>, or <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-signing-algorithm\">kms:SigningAlgorithm</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> <important> <p> <a href=\"http://aws.amazon.com/kms/features/#AWS_Service_Integration\">Amazon Web Services services that are integrated with KMS</a> use symmetric encryption KMS keys to protect your data. These services do not support asymmetric KMS keys or HMAC KMS keys.</p> </important> <p>KMS supports the following key specs for KMS keys:</p> <ul> <li> <p>Symmetric encryption key (default)</p> <ul> <li> <p> <code>SYMMETRIC_DEFAULT</code> </p> </li> </ul> </li> <li> <p>HMAC keys (symmetric)</p> <ul> <li> <p> <code>HMAC_224</code> </p> </li> <li> <p> <code>HMAC_256</code> </p> </li> <li> <p> <code>HMAC_384</code> </p> </li> <li> <p> <code>HMAC_512</code> </p> </li> </ul> </li> <li> <p>Asymmetric RSA key pairs (encryption and decryption -or- signing and verification)</p> <ul> <li> <p> <code>RSA_2048</code> </p> </li> <li> <p> <code>RSA_3072</code> </p> </li> <li> <p> <code>RSA_4096</code> </p> </li> </ul> </li> <li> <p>Asymmetric NIST-standard elliptic curve key pairs (signing and verification -or- deriving shared secrets)</p> <ul> <li> <p> <code>ECC_NIST_P256</code> (secp256r1)</p> </li> <li> <p> <code>ECC_NIST_P384</code> (secp384r1)</p> </li> <li> <p> <code>ECC_NIST_P521</code> (secp521r1)</p> </li> <li> <p> <code>ECC_NIST_EDWARDS25519</code> (ed25519) - signing and verification only</p> <ul> <li> <p> <b>Note:</b> For ECC_NIST_EDWARDS25519 KMS keys, the ED25519_SHA_512 signing algorithm requires <a href=\"kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType\"> <code>MessageType:RAW</code> </a>, while ED25519_PH_SHA_512 requires <a href=\"kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType\"> <code>MessageType:DIGEST</code> </a>. These message types cannot be used interchangeably.</p> </li> </ul> </li> </ul> </li> <li> <p>Other asymmetric elliptic curve key pairs (signing and verification)</p> <ul> <li> <p> <code>ECC_SECG_P256K1</code> (secp256k1), commonly used for cryptocurrencies.</p> </li> </ul> </li> <li> <p>Asymmetric ML-DSA key pairs (signing and verification)</p> <ul> <li> <p> <code>ML_DSA_44</code> </p> </li> <li> <p> <code>ML_DSA_65</code> </p> </li> <li> <p> <code>ML_DSA_87</code> </p> </li> </ul> </li> <li> <p>SM2 key pairs (encryption and decryption -or- signing and verification -or- deriving shared secrets)</p> <ul> <li> <p> <code>SM2</code> (China Regions only)</p> </li> </ul> </li> </ul>"
         },
         "Origin":{
           "shape":"OriginType",
@@ -1376,7 +1398,7 @@
         },
         "CustomKeyStoreId":{
           "shape":"CustomKeyStoreIdType",
-          "documentation":"<p>Creates the KMS key in the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. The <code>ConnectionState</code> of the custom key store must be <code>CONNECTED</code>. To find the CustomKeyStoreID and ConnectionState use the <a>DescribeCustomKeyStores</a> operation.</p> <p>This parameter is valid only for symmetric encryption KMS keys in a single Region. You cannot create any other type of KMS key in a custom key store.</p> <p>When you create a KMS key in an CloudHSM key store, KMS generates a non-exportable 256-bit symmetric key in its associated CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you must use the <code>XksKeyId</code> parameter to specify an external key that serves as key material for the KMS key.</p>"
+          "documentation":"<p>Creates the KMS key in the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. The <code>ConnectionState</code> of the custom key store must be <code>CONNECTED</code>. To find the CustomKeyStoreID and ConnectionState use the <a>DescribeCustomKeyStores</a> operation.</p> <p>This parameter is valid only for symmetric encryption KMS keys in a single Region. You cannot create any other type of KMS key in a custom key store.</p> <p>When you create a KMS key in an CloudHSM key store, KMS generates a non-exportable 256-bit symmetric key in its associated CloudHSM cluster and associates it with the KMS key. When you create a KMS key in an external key store, you must use the <code>XksKeyId</code> parameter to specify an external key that serves as key material for the KMS key.</p>"
         },
         "BypassPolicyLockoutSafetyCheck":{
           "shape":"BooleanType",
@@ -1384,7 +1406,7 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>Assigns one or more tags to the KMS key. Use this parameter to tag the KMS key when it is created. To tag an existing KMS key, use the <a>TagResource</a> operation.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>To use this parameter, you must have <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> permission in an IAM policy.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You cannot have more than one tag on a KMS key with the same tag key. If you specify an existing tag key with a different tag value, KMS replaces the current tag value with the specified one.</p> <p>When you add tags to an Amazon Web Services resource, Amazon Web Services generates a cost allocation report with usage and costs aggregated by tags. Tags can also be used to control access to a KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging Keys</a>.</p>"
+          "documentation":"<p>Assigns one or more tags to the KMS key. Use this parameter to tag the KMS key when it is created. To tag an existing KMS key, use the <a>TagResource</a> operation.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>To use this parameter, you must have <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> permission in an IAM policy.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You cannot have more than one tag on a KMS key with the same tag key. If you specify an existing tag key with a different tag value, KMS replaces the current tag value with the specified one.</p> <p>When you add tags to an Amazon Web Services resource, Amazon Web Services generates a cost allocation report with usage and costs aggregated by tags. Tags can also be used to control access to a KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tags in KMS</a>.</p>"
         },
         "MultiRegion":{
           "shape":"NullableBooleanType",
@@ -1392,7 +1414,7 @@
         },
         "XksKeyId":{
           "shape":"XksKeyIdType",
-          "documentation":"<p>Identifies the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-external-key\">external key</a> that serves as key material for the KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key store</a>. Specify the ID that the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-xks-proxy\">external key store proxy</a> uses to refer to the external key. For help, see the documentation for your external key store proxy.</p> <p>This parameter is required for a KMS key with an <code>Origin</code> value of <code>EXTERNAL_KEY_STORE</code>. It is not valid for KMS keys with any other <code>Origin</code> value.</p> <p>The external key must be an existing 256-bit AES symmetric encryption key hosted outside of Amazon Web Services in an external key manager associated with the external key store specified by the <code>CustomKeyStoreId</code> parameter. This key must be enabled and configured to perform encryption and decryption. Each KMS key in an external key store must use a different external key. For details, see <a href=\"https://docs.aws.amazon.com/create-xks-keys.html#xks-key-requirements\">Requirements for a KMS key in an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>Each KMS key in an external key store is associated two backing keys. One is key material that KMS generates. The other is the external key specified by this parameter. When you use the KMS key in an external key store to encrypt data, the encryption operation is performed first by KMS using the KMS key material, and then by the external key manager using the specified external key, a process known as <i>double encryption</i>. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-double-encryption\">Double encryption</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Identifies the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-external-key\">external key</a> that serves as key material for the KMS key in an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html\">external key store</a>. Specify the ID that the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-xks-proxy\">external key store proxy</a> uses to refer to the external key. For help, see the documentation for your external key store proxy.</p> <p>This parameter is required for a KMS key with an <code>Origin</code> value of <code>EXTERNAL_KEY_STORE</code>. It is not valid for KMS keys with any other <code>Origin</code> value.</p> <p>The external key must be an existing 256-bit AES symmetric encryption key hosted outside of Amazon Web Services in an external key manager associated with the external key store specified by the <code>CustomKeyStoreId</code> parameter. This key must be enabled and configured to perform encryption and decryption. Each KMS key in an external key store must use a different external key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-xks-keys.html#xks-key-requirements\">Requirements for a KMS key in an external key store</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>Each KMS key in an external key store is associated two backing keys. One is key material that KMS generates. The other is the external key specified by this parameter. When you use the KMS key in an external key store to encrypt data, the encryption operation is performed first by KMS using the KMS key material, and then by the external key manager using the specified external key, a process known as <i>double encryption</i>. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-double-encryption\">Double encryption</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1530,7 +1552,8 @@
         "ECC_NIST_P384",
         "ECC_NIST_P521",
         "ECC_SECG_P256K1",
-        "SM2"
+        "SM2",
+        "ECC_NIST_EDWARDS25519"
       ]
     },
     "DataKeySpec":{
@@ -1551,11 +1574,11 @@
         },
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context to use when decrypting the data. An encryption context is valid only for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> with a symmetric encryption KMS key. The standard asymmetric encryption algorithms and HMAC algorithms that KMS uses do not support an encryption context.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context to use when decrypting the data. An encryption context is valid only for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> with a symmetric encryption KMS key. The standard asymmetric encryption algorithms and HMAC algorithms that KMS uses do not support an encryption context.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens. </p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens. </p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "KeyId":{
           "shape":"KeyIdType",
@@ -1567,11 +1590,11 @@
         },
         "Recipient":{
           "shape":"RecipientInfo",
-          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-concepts.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To include this parameter, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK.</p> <p>When you use this parameter, instead of returning the plaintext data, KMS encrypts the plaintext data with the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-concepts.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave or NitroTPM, and the encryption algorithm to use with the public key in the attestation document. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter supports the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK for Amazon Web Services Nitro Enclaves. It supports any Amazon Web Services SDK for Amazon Web Services NitroTPM. </p> <p>When you use this parameter, instead of returning the plaintext data, KMS encrypts the plaintext data with the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the attested environment. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1592,7 +1615,11 @@
         },
         "CiphertextForRecipient":{
           "shape":"CiphertextType",
-          "documentation":"<p>The plaintext data encrypted with the public key in the attestation document. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The plaintext data encrypted with the public key from the attestation document. This ciphertext can be decrypted only by using a private key from the attested environment. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave or NitroTPM. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to decrypt the ciphertext. This field is present only when the operation uses a symmetric encryption KMS key. This field is omitted if the request includes the <code>Recipient</code> parameter.</p>"
         }
       }
     },
@@ -1618,8 +1645,7 @@
     },
     "DeleteCustomKeyStoreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImportedKeyMaterialRequest":{
       "type":"structure",
@@ -1628,6 +1654,23 @@
         "KeyId":{
           "shape":"KeyIdType",
           "documentation":"<p>Identifies the KMS key from which you are deleting imported key material. The <code>Origin</code> of the KMS key must be <code>EXTERNAL</code>.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>Identifies the imported key material you are deleting. </p> <important> <p>If no KeyMaterialId is specified, KMS deletes the current key material.</p> </important> <p>To get the list of key material IDs associated with a KMS key, use <a>ListKeyRotations</a>.</p>"
+        }
+      }
+    },
+    "DeleteImportedKeyMaterialResponse":{
+      "type":"structure",
+      "members":{
+        "KeyId":{
+          "shape":"KeyIdType",
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">key ARN</a>) of the KMS key from which the key material was deleted.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdResponseType",
+          "documentation":"<p>Identifies the deleted key material.</p>"
         }
       }
     },
@@ -1650,7 +1693,7 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Identifies an asymmetric NIST-recommended ECC or SM2 (China Regions only) KMS key. KMS uses the private key in the specified key pair to derive the shared secret. The key usage of the KMS key must be <code>KEY_AGREEMENT</code>. To find the <code>KeyUsage</code> of a KMS key, use the <a>DescribeKey</a> operation.</p> <p>To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>. To get the alias name and alias ARN, use <a>ListAliases</a>.</p>"
+          "documentation":"<p>Identifies an asymmetric NIST-standard ECC or SM2 (China Regions only) KMS key. KMS uses the private key in the specified key pair to derive the shared secret. The key usage of the KMS key must be <code>KEY_AGREEMENT</code>. To find the <code>KeyUsage</code> of a KMS key, use the <a>DescribeKey</a> operation.</p> <p>To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>. To get the alias name and alias ARN, use <a>ListAliases</a>.</p>"
         },
         "KeyAgreementAlgorithm":{
           "shape":"KeyAgreementAlgorithmSpec",
@@ -1658,19 +1701,19 @@
         },
         "PublicKey":{
           "shape":"PublicKeyType",
-          "documentation":"<p>Specifies the public key in your peer's NIST-recommended elliptic curve (ECC) or SM2 (China Regions only) key pair.</p> <p>The public key must be a DER-encoded X.509 public key, also known as <code>SubjectPublicKeyInfo</code> (SPKI), as defined in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>.</p> <p> <a>GetPublicKey</a> returns the public key of an asymmetric KMS key pair in the required DER-encoded format.</p> <note> <p>If you use <a href=\"https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html\">Amazon Web Services CLI version 1</a>, you must provide the DER-encoded X.509 public key in a file. Otherwise, the Amazon Web Services CLI Base64-encodes the public key a second time, resulting in a <code>ValidationException</code>.</p> </note> <p>You can specify the public key as binary data in a file using fileb (<code>fileb://&lt;path-to-file&gt;</code>) or in-line using a Base64 encoded string.</p>"
+          "documentation":"<p>Specifies the public key in your peer's NIST-standard elliptic curve (ECC) or SM2 (China Regions only) key pair.</p> <p>The public key must be a DER-encoded X.509 public key, also known as <code>SubjectPublicKeyInfo</code> (SPKI), as defined in <a href=\"https://tools.ietf.org/html/rfc5280\">RFC 5280</a>.</p> <p> <a>GetPublicKey</a> returns the public key of an asymmetric KMS key pair in the required DER-encoded format.</p> <note> <p>If you use <a href=\"https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html\">Amazon Web Services CLI version 1</a>, you must provide the DER-encoded X.509 public key in a file. Otherwise, the Amazon Web Services CLI Base64-encodes the public key a second time, resulting in a <code>ValidationException</code>.</p> </note> <p>You can specify the public key as binary data in a file using fileb (<code>fileb://&lt;path-to-file&gt;</code>) or in-line using a Base64 encoded string.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "Recipient":{
           "shape":"RecipientInfo",
-          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To call DeriveSharedSecret for an Amazon Web Services Nitro Enclaves, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> to generate the attestation document and then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the enclave.</p> <p>When you use this parameter, instead of returning a plaintext copy of the shared secret, KMS encrypts the plaintext shared secret under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>CiphertextBlob</code> field in the response contains the encrypted shared secret derived from the KMS key specified by the <code>KeyId</code> parameter and public key specified by the <code>PublicKey</code> parameter. The <code>SharedSecret</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave or NitroTPM, and the encryption algorithm to use with the public key in the attestation document. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM. To call DeriveSharedSecret generate an attestation document use either <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> for an Amazon Web Services Nitro Enclaves or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/attestation-get-doc.html\">Amazon Web Services NitroTPM tools</a> for Amazon Web Services NitroTPM. Then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the attested environment.</p> <p>When you use this parameter, instead of returning a plaintext copy of the shared secret, KMS encrypts the plaintext shared secret under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the attested environment. The <code>CiphertextBlob</code> field in the response contains the encrypted shared secret derived from the KMS key specified by the <code>KeyId</code> parameter and public key specified by the <code>PublicKey</code> parameter. The <code>SharedSecret</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1687,7 +1730,7 @@
         },
         "CiphertextForRecipient":{
           "shape":"CiphertextType",
-          "documentation":"<p>The plaintext shared secret encrypted with the public key in the attestation document.</p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The plaintext shared secret encrypted with the public key from the attestation document. This ciphertext can be decrypted only by using a private key from the attested environment. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave or NitroTPM. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "KeyAgreementAlgorithm":{
           "shape":"KeyAgreementAlgorithmSpec",
@@ -1743,11 +1786,11 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Describes the specified KMS key. </p> <p>If you specify a predefined Amazon Web Services alias (an Amazon Web Services alias with no key ID), KMS associates the alias with an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html##aws-managed-cmk\">Amazon Web Services managed key</a> and returns its <code>KeyId</code> and <code>Arn</code> in the response.</p> <p>To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>. To get the alias name and alias ARN, use <a>ListAliases</a>.</p>"
+          "documentation":"<p>Describes the specified KMS key. </p> <p>If you specify a predefined Amazon Web Services alias (an Amazon Web Services alias with no key ID), KMS associates the alias with an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed key</a> and returns its <code>KeyId</code> and <code>Arn</code> in the response.</p> <p>To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>. To get the alias name and alias ARN, use <a>ListAliases</a>.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1781,7 +1824,7 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot enable or disable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot enable or disable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         }
       }
     },
@@ -1805,8 +1848,7 @@
     },
     "DisconnectCustomKeyStoreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DryRunOperationException":{
       "type":"structure",
@@ -1832,7 +1874,7 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot enable automatic rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. To enable or disable automatic rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, set the property on the primary key.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         },
         "RotationPeriodInDays":{
           "shape":"RotationPeriodInDaysType",
@@ -1857,11 +1899,11 @@
         },
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context that will be used to encrypt the data. An encryption context is valid only for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> with a symmetric encryption KMS key. The standard asymmetric encryption algorithms and HMAC algorithms that KMS uses do not support an encryption context. </p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context that will be used to encrypt the data. An encryption context is valid only for <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> with a symmetric encryption KMS key. The standard asymmetric encryption algorithms and HMAC algorithms that KMS uses do not support an encryption context. </p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "EncryptionAlgorithm":{
           "shape":"EncryptionAlgorithmSpec",
@@ -1869,7 +1911,7 @@
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1935,7 +1977,7 @@
       "members":{
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context that will be used when encrypting the private key in the data key pair.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context that will be used when encrypting the private key in the data key pair.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "KeyId":{
           "shape":"KeyIdType",
@@ -1943,19 +1985,19 @@
         },
         "KeyPairSpec":{
           "shape":"DataKeyPairSpec",
-          "documentation":"<p>Determines the type of data key pair that is generated. </p> <p>The KMS rule that restricts the use of asymmetric RSA and SM2 KMS keys to encrypt and decrypt or to sign and verify (but not both), and the rule that permits you to use ECC KMS keys only to sign and verify, are not effective on data key pairs, which are used outside of KMS. The SM2 key spec is only available in China Regions.</p>"
+          "documentation":"<p>Determines the type of data key pair that is generated. </p> <p>The KMS rule that restricts the use of asymmetric RSA and SM2 KMS keys to encrypt and decrypt or to sign and verify (but not both), the rule that permits you to use ECC KMS keys only to sign and verify, and the rule that permits you to use ML-DSA key pairs to sign and verify only are not effective on data key pairs, which are used outside of KMS. The SM2 key spec is only available in China Regions.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "Recipient":{
           "shape":"RecipientInfo",
-          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To call DeriveSharedSecret for an Amazon Web Services Nitro Enclaves, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> to generate the attestation document and then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the enclave.</p> <p>When you use this parameter, instead of returning a plaintext copy of the private data key, KMS encrypts the plaintext private data key under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>CiphertextBlob</code> field in the response contains a copy of the private data key encrypted under the KMS key specified by the <code>KeyId</code> parameter. The <code>PrivateKeyPlaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave or NitroTPM, and the encryption algorithm to use with the public key in the attestation document. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM. To call GenerateDataKeyPair generate an attestation document use either <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> for an Amazon Web Services Nitro Enclaves or <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/attestation-get-doc.html\">Amazon Web Services NitroTPM tools</a> for Amazon Web Services NitroTPM. Then use the Recipient parameter from any Amazon Web Services SDK to provide the attestation document for the attested environment.</p> <p>When you use this parameter, instead of returning a plaintext copy of the private data key, KMS encrypts the plaintext private data key under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the attested environment. The <code>CiphertextBlob</code> field in the response contains a copy of the private data key encrypted under the KMS key specified by the <code>KeyId</code> parameter. The <code>PrivateKeyPlaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -1984,7 +2026,11 @@
         },
         "CiphertextForRecipient":{
           "shape":"CiphertextType",
-          "documentation":"<p>The plaintext private data key encrypted with the public key from the Nitro enclave. This ciphertext can be decrypted only by using a private key in the Nitro enclave. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The plaintext private data key encrypted with the public key from the attestation document. This ciphertext can be decrypted only by using a private key from the attested environment. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave or NitroTPM. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to encrypt the private key.</p>"
         }
       }
     },
@@ -1997,7 +2043,7 @@
       "members":{
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context that will be used when encrypting the private key in the data key pair.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context that will be used when encrypting the private key in the data key pair.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "KeyId":{
           "shape":"KeyIdType",
@@ -2005,15 +2051,15 @@
         },
         "KeyPairSpec":{
           "shape":"DataKeyPairSpec",
-          "documentation":"<p>Determines the type of data key pair that is generated.</p> <p>The KMS rule that restricts the use of asymmetric RSA and SM2 KMS keys to encrypt and decrypt or to sign and verify (but not both), and the rule that permits you to use ECC KMS keys only to sign and verify, are not effective on data key pairs, which are used outside of KMS. The SM2 key spec is only available in China Regions.</p>"
+          "documentation":"<p>Determines the type of data key pair that is generated.</p> <p>The KMS rule that restricts the use of asymmetric RSA and SM2 KMS keys to encrypt and decrypt or to sign and verify (but not both), the rule that permits you to use ECC KMS keys only to sign and verify, and the rule that permits you to use ML-DSA key pairs to sign and verify only are not effective on data key pairs, which are used outside of KMS. The SM2 key spec is only available in China Regions.</p>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2035,6 +2081,10 @@
         "KeyPairSpec":{
           "shape":"DataKeyPairSpec",
           "documentation":"<p>The type of data key pair that was generated.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to encrypt the private key.</p>"
         }
       }
     },
@@ -2048,7 +2098,7 @@
         },
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context that will be used when encrypting the data key.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context that will be used when encrypting the data key.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "NumberOfBytes":{
           "shape":"NumberOfBytesType",
@@ -2060,15 +2110,15 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "Recipient":{
           "shape":"RecipientInfo",
-          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To include this parameter, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK.</p> <p>When you use this parameter, instead of returning the plaintext data key, KMS encrypts the plaintext data key under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>CiphertextBlob</code> field in the response contains a copy of the data key encrypted under the KMS key specified by the <code>KeyId</code> parameter. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave or NitroTPM, and the encryption algorithm to use with the public key in the attestation document. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter supports the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK for Amazon Web Services Nitro Enclaves. It supports any Amazon Web Services SDK for Amazon Web Services NitroTPM. </p> <p>When you use this parameter, instead of returning the plaintext data key, KMS encrypts the plaintext data key under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>CiphertextBlob</code> field in the response contains a copy of the data key encrypted under the KMS key specified by the <code>KeyId</code> parameter. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2089,7 +2139,11 @@
         },
         "CiphertextForRecipient":{
           "shape":"CiphertextType",
-          "documentation":"<p>The plaintext data key encrypted with the public key from the Nitro enclave. This ciphertext can be decrypted only by using a private key in the Nitro enclave. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The plaintext data key encrypted with the public key from the attestation document. This ciphertext can be decrypted only by using a private key from the attested environment. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave or NitroTPM. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to encrypt the data key. This field is omitted if the request includes the <code>Recipient</code> parameter.</p>"
         }
       }
     },
@@ -2103,7 +2157,7 @@
         },
         "EncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context that will be used when encrypting the data key.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context that will be used when encrypting the data key.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "KeySpec":{
           "shape":"DataKeySpec",
@@ -2115,11 +2169,11 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2133,6 +2187,10 @@
         "KeyId":{
           "shape":"KeyIdType",
           "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">key ARN</a>) of the KMS key that encrypted the data key.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to encrypt the data key.</p>"
         }
       }
     },
@@ -2158,11 +2216,11 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2196,7 +2254,7 @@
         },
         "Recipient":{
           "shape":"RecipientInfo",
-          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave and the encryption algorithm to use with the enclave's public key. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter only supports attestation documents for Amazon Web Services Nitro Enclaves. To include this parameter, use the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK.</p> <p>When you use this parameter, instead of returning plaintext bytes, KMS encrypts the plaintext bytes under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the enclave. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A signed <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitro-enclave-how.html#term-attestdoc\">attestation document</a> from an Amazon Web Services Nitro enclave or NitroTPM, and the encryption algorithm to use with the public key in the attestation document. The only valid encryption algorithm is <code>RSAES_OAEP_SHA_256</code>. </p> <p>This parameter supports the <a href=\"https://docs.aws.amazon.com/enclaves/latest/user/developing-applications.html#sdk\">Amazon Web Services Nitro Enclaves SDK</a> or any Amazon Web Services SDK for Amazon Web Services Nitro Enclaves. It supports any Amazon Web Services SDK for Amazon Web Services NitroTPM. </p> <p>When you use this parameter, instead of returning plaintext bytes, KMS encrypts the plaintext bytes under the public key in the attestation document, and returns the resulting ciphertext in the <code>CiphertextForRecipient</code> field in the response. This ciphertext can be decrypted only with the private key in the attested environment. The <code>Plaintext</code> field in the response is null or empty.</p> <p>For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2209,7 +2267,7 @@
         },
         "CiphertextForRecipient":{
           "shape":"CiphertextType",
-          "documentation":"<p>The plaintext random bytes encrypted with the public key from the Nitro enclave. This ciphertext can be decrypted only by using a private key in the Nitro enclave. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>The plaintext random bytes encrypted with the public key from the attestation document. This ciphertext can be decrypted only by using a private key from the attested environment. </p> <p>This field is included in the response only when the <code>Recipient</code> parameter in the request includes a valid attestation document from an Amazon Web Services Nitro enclave or NitroTPM. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2271,7 +2329,7 @@
         },
         "OnDemandRotationStartDate":{
           "shape":"DateType",
-          "documentation":"<p>Identifies the date and time that an in progress on-demand rotation was initiated.</p> <p>The KMS API follows an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-eventual-consistency.html\">eventual consistency</a> model due to the distributed nature of the system. As a result, there might be a slight delay between initiating on-demand key rotation and the rotation's completion. Once the on-demand rotation is complete, use <a>ListKeyRotations</a> to view the details of the on-demand rotation.</p>"
+          "documentation":"<p>Identifies the date and time that an in progress on-demand rotation was initiated.</p> <p>KMS uses a background process to perform rotations. As a result, there might be a slight delay between initiating on-demand key rotation and the rotation's completion. Once the on-demand rotation is complete, KMS removes this field from the response. You can use <a>ListKeyRotations</a> to view the details of the completed on-demand rotation.</p>"
         }
       }
     },
@@ -2289,7 +2347,7 @@
         },
         "WrappingAlgorithm":{
           "shape":"AlgorithmSpec",
-          "documentation":"<p>The algorithm you will use with the RSA public key (<code>PublicKey</code>) in the response to protect your key material during import. For more information, see <a href=\"kms/latest/developerguide/importing-keys-get-public-key-and-token.html#select-wrapping-algorithm\">Select a wrapping algorithm</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>For RSA_AES wrapping algorithms, you encrypt your key material with an AES key that you generate, then encrypt your AES key with the RSA public key from KMS. For RSAES wrapping algorithms, you encrypt your key material directly with the RSA public key from KMS.</p> <p>The wrapping algorithms that you can use depend on the type of key material that you are importing. To import an RSA private key, you must use an RSA_AES wrapping algorithm.</p> <ul> <li> <p> <b>RSA_AES_KEY_WRAP_SHA_256</b> — Supported for wrapping RSA and ECC key material.</p> </li> <li> <p> <b>RSA_AES_KEY_WRAP_SHA_1</b> — Supported for wrapping RSA and ECC key material.</p> </li> <li> <p> <b>RSAES_OAEP_SHA_256</b> — Supported for all types of key material, except RSA key material (private key).</p> <p>You cannot use the RSAES_OAEP_SHA_256 wrapping algorithm with the RSA_2048 wrapping key spec to wrap ECC_NIST_P521 key material.</p> </li> <li> <p> <b>RSAES_OAEP_SHA_1</b> — Supported for all types of key material, except RSA key material (private key).</p> <p>You cannot use the RSAES_OAEP_SHA_1 wrapping algorithm with the RSA_2048 wrapping key spec to wrap ECC_NIST_P521 key material.</p> </li> <li> <p> <b>RSAES_PKCS1_V1_5</b> (Deprecated) — As of October 10, 2023, KMS does not support the RSAES_PKCS1_V1_5 wrapping algorithm.</p> </li> </ul>"
+          "documentation":"<p>The algorithm you will use with the RSA public key (<code>PublicKey</code>) in the response to protect your key material during import. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-get-public-key-and-token.html#select-wrapping-algorithm\">Select a wrapping algorithm</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>For RSA_AES wrapping algorithms, you encrypt your key material with an AES key that you generate, then encrypt your AES key with the RSA public key from KMS. For RSAES wrapping algorithms, you encrypt your key material directly with the RSA public key from KMS.</p> <p>The wrapping algorithms that you can use depend on the type of key material that you are importing. To import an RSA private key, you must use an RSA_AES wrapping algorithm.</p> <ul> <li> <p> <b>RSA_AES_KEY_WRAP_SHA_256</b> — Supported for wrapping RSA and ECC key material.</p> </li> <li> <p> <b>RSA_AES_KEY_WRAP_SHA_1</b> — Supported for wrapping RSA and ECC key material.</p> </li> <li> <p> <b>RSAES_OAEP_SHA_256</b> — Supported for all types of key material, except RSA key material (private key).</p> <p>You cannot use the RSAES_OAEP_SHA_256 wrapping algorithm with the RSA_2048 wrapping key spec to wrap ECC_NIST_P521 key material.</p> </li> <li> <p> <b>RSAES_OAEP_SHA_1</b> — Supported for all types of key material, except RSA key material (private key).</p> <p>You cannot use the RSAES_OAEP_SHA_1 wrapping algorithm with the RSA_2048 wrapping key spec to wrap ECC_NIST_P521 key material.</p> </li> <li> <p> <b>RSAES_PKCS1_V1_5</b> (Deprecated) — As of October 10, 2023, KMS does not support the RSAES_PKCS1_V1_5 wrapping algorithm.</p> </li> </ul>"
         },
         "WrappingKeySpec":{
           "shape":"WrappingKeySpec",
@@ -2328,7 +2386,7 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -2376,14 +2434,14 @@
       "members":{
         "EncryptionContextSubset":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>A list of key-value pairs that must be included in the encryption context of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operation</a> request. The grant allows the cryptographic operation only when the encryption context in the request includes the key-value pairs specified in this constraint, although it can include additional key-value pairs.</p>"
+          "documentation":"<p>A list of key-value pairs that must be included in the encryption context of the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operation</a> request. The grant allows the cryptographic operation only when the encryption context in the request includes the key-value pairs specified in this constraint, although it can include additional key-value pairs.</p>"
         },
         "EncryptionContextEquals":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>A list of key-value pairs that must match the encryption context in the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operation</a> request. The grant allows the operation only when the encryption context in the request is the same as the encryption context specified in this constraint.</p>"
+          "documentation":"<p>A list of key-value pairs that must match the encryption context in the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operation</a> request. The grant allows the operation only when the encryption context in the request is the same as the encryption context specified in this constraint.</p>"
         }
       },
-      "documentation":"<p>Use this structure to allow <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> in the grant only when the operation request includes the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">encryption context</a>. </p> <p>KMS applies the grant constraints only to cryptographic operations that support an encryption context, that is, all cryptographic operations with a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks\">symmetric KMS key</a>. Grant constraints are not applied to operations that do not support an encryption context, such as cryptographic operations with asymmetric KMS keys and management operations, such as <a>DescribeKey</a> or <a>RetireGrant</a>.</p> <important> <p>In a cryptographic operation, the encryption context in the decryption operation must be an exact, case-sensitive match for the keys and values in the encryption context of the encryption operation. Only the order of the pairs can vary.</p> <p>However, in a grant constraint, the key in each key-value pair is not case sensitive, but the value is case sensitive.</p> <p>To avoid confusion, do not use multiple encryption context pairs that differ only by case. To require a fully case-sensitive encryption context, use the <code>kms:EncryptionContext:</code> and <code>kms:EncryptionContextKeys</code> conditions in an IAM or key policy. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context\">kms:EncryptionContext:</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> </important>"
+      "documentation":"<p>Use this structure to allow <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> in the grant only when the operation request includes the specified <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">encryption context</a>. </p> <p>KMS applies the grant constraints only to cryptographic operations that support an encryption context, that is, all cryptographic operations with a symmetric KMS key. Grant constraints are not applied to operations that do not support an encryption context, such as cryptographic operations with asymmetric KMS keys and management operations, such as <a>DescribeKey</a> or <a>RetireGrant</a>.</p> <important> <p>In a cryptographic operation, the encryption context in the decryption operation must be an exact, case-sensitive match for the keys and values in the encryption context of the encryption operation. Only the order of the pairs can vary.</p> <p>However, in a grant constraint, the key in each key-value pair is not case sensitive, but the value is case sensitive.</p> <p>To avoid confusion, do not use multiple encryption context pairs that differ only by case. To require a fully case-sensitive encryption context, use the <code>kms:EncryptionContext:</code> and <code>kms:EncryptionContextKeys</code> conditions in an IAM or key policy. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-encryption-context\">kms:EncryptionContext:context-key</a> in the <i> <i>Key Management Service Developer Guide</i> </i>.</p> </important>"
     },
     "GrantIdType":{
       "type":"string",
@@ -2489,7 +2547,7 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>The identifier of the KMS key that will be associated with the imported key material. This must be the same KMS key specified in the <code>KeyID</code> parameter of the corresponding <a>GetParametersForImport</a> request. The <code>Origin</code> of the KMS key must be <code>EXTERNAL</code> and its <code>KeyState</code> must be <code>PendingImport</code>. </p> <p>The KMS key can be a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key, including a <a href=\"kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. You cannot perform this operation on a KMS key in a custom key store, or on a KMS key in a different Amazon Web Services account.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+          "documentation":"<p>The identifier of the KMS key that will be associated with the imported key material. This must be the same KMS key specified in the <code>KeyID</code> parameter of the corresponding <a>GetParametersForImport</a> request. The <code>Origin</code> of the KMS key must be <code>EXTERNAL</code> and its <code>KeyState</code> must be <code>PendingImport</code>. </p> <p>The KMS key can be a symmetric encryption KMS key, HMAC KMS key, asymmetric encryption KMS key, or asymmetric signing KMS key, including a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html\">multi-Region key</a> of any supported type. You cannot perform this operation on a KMS key in a custom key store, or on a KMS key in a different Amazon Web Services account.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         },
         "ImportToken":{
           "shape":"CiphertextType",
@@ -2505,15 +2563,56 @@
         },
         "ExpirationModel":{
           "shape":"ExpirationModelType",
-          "documentation":"<p>Specifies whether the key material expires. The default is <code>KEY_MATERIAL_EXPIRES</code>. For help with this choice, see <a href=\"https://docs.aws.amazon.com/en_us/kms/latest/developerguide/importing-keys.html#importing-keys-expiration\">Setting an expiration time</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When the value of <code>ExpirationModel</code> is <code>KEY_MATERIAL_EXPIRES</code>, you must specify a value for the <code>ValidTo</code> parameter. When value is <code>KEY_MATERIAL_DOES_NOT_EXPIRE</code>, you must omit the <code>ValidTo</code> parameter.</p> <p>You cannot change the <code>ExpirationModel</code> or <code>ValidTo</code> values for the current import after the request completes. To change either value, you must reimport the key material.</p>"
+          "documentation":"<p>Specifies whether the key material expires. The default is <code>KEY_MATERIAL_EXPIRES</code>. For help with this choice, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-import-key-material.html#importing-keys-expiration\">Setting an expiration time</a> in the <i>Key Management Service Developer Guide</i>.</p> <p>When the value of <code>ExpirationModel</code> is <code>KEY_MATERIAL_EXPIRES</code>, you must specify a value for the <code>ValidTo</code> parameter. When value is <code>KEY_MATERIAL_DOES_NOT_EXPIRE</code>, you must omit the <code>ValidTo</code> parameter.</p> <p>You cannot change the <code>ExpirationModel</code> or <code>ValidTo</code> values for the current import after the request completes. To change either value, you must reimport the key material.</p>"
+        },
+        "ImportType":{
+          "shape":"ImportType",
+          "documentation":"<p>Indicates whether the key material being imported is previously associated with this KMS key or not. This parameter is optional and only usable with symmetric encryption keys. If no key material has ever been imported into the KMS key, and this parameter is omitted, the parameter defaults to <code>NEW_KEY_MATERIAL</code>. After the first key material is imported, if this parameter is omitted then the parameter defaults to <code>EXISTING_KEY_MATERIAL</code>.</p>"
+        },
+        "KeyMaterialDescription":{
+          "shape":"KeyMaterialDescriptionType",
+          "documentation":"<p>Description for the key material being imported. This parameter is optional and only usable with symmetric encryption keys. If you do not specify a key material description, KMS retains the value you specified when you last imported the same key material into this KMS key.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>Identifies the key material being imported. This parameter is optional and only usable with symmetric encryption keys. You cannot specify a key material ID with <code>ImportType</code> set to <code>NEW_KEY_MATERIAL</code>. Whenever you import key material into a symmetric encryption key, KMS assigns a unique identifier to the key material based on the KMS key ID and the imported key material. When you re-import key material with a specified key material ID, KMS:</p> <ul> <li> <p>Computes the identifier for the key material</p> </li> <li> <p>Matches the computed identifier against the specified key material ID</p> </li> <li> <p>Verifies that the key material ID is already associated with the KMS key</p> </li> </ul> <p>To get the list of key material IDs associated with a KMS key, use <a>ListKeyRotations</a>.</p>"
         }
       }
     },
     "ImportKeyMaterialResponse":{
       "type":"structure",
       "members":{
+        "KeyId":{
+          "shape":"KeyIdType",
+          "documentation":"<p>The Amazon Resource Name (<a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\">key ARN</a>) of the KMS key into which key material was imported.</p>"
+        },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>Identifies the imported key material.</p>"
+        }
       }
     },
+    "ImportState":{
+      "type":"string",
+      "enum":[
+        "IMPORTED",
+        "PENDING_IMPORT"
+      ]
+    },
+    "ImportType":{
+      "type":"string",
+      "enum":[
+        "NEW_KEY_MATERIAL",
+        "EXISTING_KEY_MATERIAL"
+      ]
+    },
+    "IncludeKeyMaterial":{
+      "type":"string",
+      "enum":[
+        "ALL_KEY_MATERIAL",
+        "ROTATIONS_ONLY"
+      ]
+    },
     "IncorrectKeyException":{
       "type":"structure",
       "members":{
@@ -2527,7 +2626,7 @@
       "members":{
         "message":{"shape":"ErrorMessageType"}
       },
-      "documentation":"<p>The request was rejected because the key material in the request is, expired, invalid, or is not the same key material that was previously imported into this KMS key.</p>",
+      "documentation":"<p>The request was rejected because the key material in the request is, expired, invalid, or does not meet expectations. For example, it is not the same key material that was previously imported or KMS expected new key material but the key material being imported is already associated with the KMS key.</p>",
       "exception":true
     },
     "IncorrectTrustAnchorException":{
@@ -2677,6 +2776,20 @@
         "CUSTOMER"
       ]
     },
+    "KeyMaterialDescriptionType":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"^[a-zA-Z0-9:/_\\s.-]+$"
+    },
+    "KeyMaterialState":{
+      "type":"string",
+      "enum":[
+        "NON_CURRENT",
+        "CURRENT",
+        "PENDING_ROTATION"
+      ]
+    },
     "KeyMetadata":{
       "type":"structure",
       "required":["KeyId"],
@@ -2707,7 +2820,7 @@
         },
         "KeyUsage":{
           "shape":"KeyUsageType",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations\">cryptographic operations</a> for which you can use the KMS key.</p>"
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-cryptography.html#cryptographic-operations\">cryptographic operations</a> for which you can use the KMS key.</p>"
         },
         "KeyState":{
           "shape":"KeyState",
@@ -2719,7 +2832,7 @@
         },
         "ValidTo":{
           "shape":"DateType",
-          "documentation":"<p>The time at which the imported key material expires. When the key material expires, KMS deletes the key material and the KMS key becomes unusable. This value is present only for KMS keys whose <code>Origin</code> is <code>EXTERNAL</code> and whose <code>ExpirationModel</code> is <code>KEY_MATERIAL_EXPIRES</code>, otherwise this value is omitted.</p>"
+          "documentation":"<p>The earliest time at which any imported key material permanently associated with this KMS key expires. When a key material expires, KMS deletes the key material and the KMS key becomes unusable. This value is present only for KMS keys whose <code>Origin</code> is <code>EXTERNAL</code> and the <code>ExpirationModel</code> is <code>KEY_MATERIAL_EXPIRES</code>, otherwise this value is omitted.</p>"
         },
         "Origin":{
           "shape":"OriginType",
@@ -2727,11 +2840,11 @@
         },
         "CustomKeyStoreId":{
           "shape":"CustomKeyStoreIdType",
-          "documentation":"<p>A unique identifier for the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a> that contains the KMS key. This field is present only when the KMS key is created in a custom key store.</p>"
+          "documentation":"<p>A unique identifier for the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a> that contains the KMS key. This field is present only when the KMS key is created in a custom key store.</p>"
         },
         "CloudHsmClusterId":{
           "shape":"CloudHsmClusterIdType",
-          "documentation":"<p>The cluster ID of the CloudHSM cluster that contains the key material for the KMS key. When you create a KMS key in an CloudHSM <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>, KMS creates the key material for the KMS key in the associated CloudHSM cluster. This field is present only when the KMS key is created in an CloudHSM key store.</p>"
+          "documentation":"<p>The cluster ID of the CloudHSM cluster that contains the key material for the KMS key. When you create a KMS key in an CloudHSM <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>, KMS creates the key material for the KMS key in the associated CloudHSM cluster. This field is present only when the KMS key is created in an CloudHSM key store.</p>"
         },
         "ExpirationModel":{
           "shape":"ExpirationModelType",
@@ -2782,6 +2895,10 @@
         "XksKeyConfiguration":{
           "shape":"XksKeyConfigurationType",
           "documentation":"<p>Information about the external key that is associated with a KMS key in an external key store.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html#concept-external-key\">External key</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+        },
+        "CurrentKeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>Identifies the current key material. This value is present for symmetric encryption keys with <code>AWS_KMS</code> origin and single-Region, symmetric encryption keys with <code>EXTERNAL</code> origin. These KMS keys support automatic or on-demand key rotation and can have multiple key materials associated with them. KMS uses the current key material for both encryption and decryption, and the non-current key material for decryption operations only.</p>"
         }
       },
       "documentation":"<p>Contains metadata about a KMS key.</p> <p>This data type is used as a response element for the <a>CreateKey</a>, <a>DescribeKey</a>, and <a>ReplicateKey</a> operations.</p>"
@@ -2801,7 +2918,11 @@
         "HMAC_256",
         "HMAC_384",
         "HMAC_512",
-        "SM2"
+        "SM2",
+        "ML_DSA_44",
+        "ML_DSA_65",
+        "ML_DSA_87",
+        "ECC_NIST_EDWARDS25519"
       ]
     },
     "KeyState":{
@@ -2846,7 +2967,7 @@
       "members":{
         "message":{"shape":"ErrorMessageType"}
       },
-      "documentation":"<p>The request was rejected because a quota was exceeded. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/limits.html\">Quotas</a> in the <i>Key Management Service Developer Guide</i>.</p>",
+      "documentation":"<p>The request was rejected because a length constraint or quota was exceeded. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/limits.html\">Quotas</a> in the <i>Key Management Service Developer Guide</i>.</p>",
       "exception":true
     },
     "LimitType":{
@@ -2974,6 +3095,10 @@
           "shape":"KeyIdType",
           "documentation":"<p>Gets the key rotations for the specified KMS key.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         },
+        "IncludeKeyMaterial":{
+          "shape":"IncludeKeyMaterial",
+          "documentation":"<p>Use this optional parameter to control which key materials associated with this key are listed in the response. The default value of this parameter is <code>ROTATIONS_ONLY</code>. If you omit this parameter, KMS returns information on the key materials created by automatic or on-demand key rotation. When you specify a value of <code>ALL_KEY_MATERIAL</code>, KMS adds the first key material and any imported key material pending rotation to the response. This parameter can only be used with KMS keys that support automatic or on-demand key rotation. </p>"
+        },
         "Limit":{
           "shape":"LimitType",
           "documentation":"<p>Use this parameter to specify the maximum number of items to return. When this value is present, KMS does not return more than the specified number of items, but it might return fewer.</p> <p>This value is optional. If you include a value, it must be between 1 and 1000, inclusive. If you do not include a value, it defaults to 100.</p>"
@@ -2989,7 +3114,7 @@
       "members":{
         "Rotations":{
           "shape":"RotationsList",
-          "documentation":"<p>A list of completed key material rotations.</p>"
+          "documentation":"<p>A list of completed key material rotations. When the optional input parameter <code>IncludeKeyMaterial</code> is specified with a value of <code>ALL_KEY_MATERIAL</code>, this list includes the first key material and any imported key material pending rotation.</p>"
         },
         "NextMarker":{
           "shape":"MarkerType",
@@ -3115,7 +3240,8 @@
       "type":"string",
       "enum":[
         "RAW",
-        "DIGEST"
+        "DIGEST",
+        "EXTERNAL_MU"
       ]
     },
     "MultiRegionConfiguration":{
@@ -3239,7 +3365,7 @@
         },
         "Policy":{
           "shape":"PolicyType",
-          "documentation":"<p>The key policy to attach to the KMS key.</p> <p>The key policy must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <p>A key policy document can include only the following characters:</p> <ul> <li> <p>Printable ASCII characters from the space character (<code>\\u0020</code>) through the end of the ASCII character range.</p> </li> <li> <p>Printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>).</p> </li> <li> <p>The tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>) special characters</p> </li> </ul> <p>For information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key policies in KMS</a> in the <i>Key Management Service Developer Guide</i>.For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
+          "documentation":"<p>The key policy to attach to the KMS key.</p> <p>The key policy must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <note> <p>If either of the required <code>Resource</code> or <code>Action</code> elements are missing from a key policy statement, the policy statement has no effect. When a key policy statement is missing one of these elements, the KMS console correctly reports an error, but the <code>PutKeyPolicy</code> API request succeeds, even though the policy statement is ineffective.</p> <p>For more information on required key policy elements, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html#key-policy-elements\">Elements in a key policy</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>A key policy document can include only the following characters:</p> <ul> <li> <p>Printable ASCII characters from the space character (<code>\\u0020</code>) through the end of the ASCII character range.</p> </li> <li> <p>Printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>).</p> </li> <li> <p>The tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>) special characters</p> </li> </ul> <note> <p>If the key policy exceeds the length constraint, KMS returns a <code>LimitExceededException</code>.</p> </note> <p>For information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key policies in KMS</a> in the <i>Key Management Service Developer Guide</i>.For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
         },
         "BypassPolicyLockoutSafetyCheck":{
           "shape":"BooleanType",
@@ -3260,7 +3386,7 @@
         },
         "SourceEncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies the encryption context to use to decrypt the ciphertext. Enter the same encryption context that was used to encrypt the ciphertext.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the encryption context to use to decrypt the ciphertext. Enter the same encryption context that was used to encrypt the ciphertext.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "SourceKeyId":{
           "shape":"KeyIdType",
@@ -3272,7 +3398,7 @@
         },
         "DestinationEncryptionContext":{
           "shape":"EncryptionContextType",
-          "documentation":"<p>Specifies that encryption context to use when the reencrypting the data.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>A destination encryption context is valid only when the destination KMS key is a symmetric encryption KMS key. The standard ciphertext format for asymmetric KMS keys does not include fields for metadata.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies that encryption context to use when the reencrypting the data.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <p>A destination encryption context is valid only when the destination KMS key is a symmetric encryption KMS key. The standard ciphertext format for asymmetric KMS keys does not include fields for metadata.</p> <p>An <i>encryption context</i> is a collection of non-secret key-value pairs that represent additional authenticated data. When you use an encryption context to encrypt data, you must specify the same (an exact case-sensitive match) encryption context to decrypt the data. An encryption context is supported only on operations with symmetric encryption KMS keys. On operations with symmetric encryption KMS keys, an encryption context is optional, but it is strongly recommended.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html\">Encryption context</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "SourceEncryptionAlgorithm":{
           "shape":"EncryptionAlgorithmSpec",
@@ -3284,11 +3410,11 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3314,6 +3440,14 @@
         "DestinationEncryptionAlgorithm":{
           "shape":"EncryptionAlgorithmSpec",
           "documentation":"<p>The encryption algorithm that was used to reencrypt the data.</p>"
+        },
+        "SourceKeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to originally encrypt the data. This field is present only when the original encryption used a symmetric encryption KMS key.</p>"
+        },
+        "DestinationKeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>The identifier of the key material used to reencrypt the data. This field is present only when data is reencrypted using a symmetric encryption KMS key.</p>"
         }
       }
     },
@@ -3322,14 +3456,14 @@
       "members":{
         "KeyEncryptionAlgorithm":{
           "shape":"KeyEncryptionMechanism",
-          "documentation":"<p>The encryption algorithm that KMS should use with the public key for an Amazon Web Services Nitro Enclave to encrypt plaintext values for the response. The only valid value is <code>RSAES_OAEP_SHA_256</code>.</p>"
+          "documentation":"<p>The encryption algorithm that KMS should use with the public key for an Amazon Web Services Nitro Enclave or NitroTPM to encrypt plaintext values for the response. The only valid value is <code>RSAES_OAEP_SHA_256</code>.</p>"
         },
         "AttestationDocument":{
           "shape":"AttestationDocumentType",
-          "documentation":"<p>The attestation document for an Amazon Web Services Nitro Enclave. This document includes the enclave's public key.</p>"
+          "documentation":"<p>The attestation document for an Amazon Web Services Nitro Enclave or a NitroTPM. This document includes the enclave's public key.</p>"
         }
       },
-      "documentation":"<p>Contains information about the party that receives the response from the API operation.</p> <p>This data type is designed to support Amazon Web Services Nitro Enclaves, which lets you create an isolated compute environment in Amazon EC2. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html\">How Amazon Web Services Nitro Enclaves uses KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+      "documentation":"<p>Contains information about the party that receives the response from the API operation.</p> <p>This data type is designed to support Amazon Web Services Nitro Enclaves and Amazon Web Services NitroTPM, which lets you create an attested environment in Amazon EC2. For information about the interaction between KMS and Amazon Web Services Nitro Enclaves or Amazon Web Services NitroTPM, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/cryptographic-attestation.html\">Cryptographic attestation support in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p>"
     },
     "RegionType":{
       "type":"string",
@@ -3350,11 +3484,11 @@
         },
         "ReplicaRegion":{
           "shape":"RegionType",
-          "documentation":"<p>The Region ID of the Amazon Web Services Region for this replica key. </p> <p>Enter the Region ID, such as <code>us-east-1</code> or <code>ap-southeast-2</code>. For a list of Amazon Web Services Regions in which KMS is supported, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/kms.html#kms_region\">KMS service endpoints</a> in the <i>Amazon Web Services General Reference</i>.</p> <note> <p>HMAC KMS keys are not supported in all Amazon Web Services Regions. If you try to replicate an HMAC KMS key in an Amazon Web Services Region in which HMAC keys are not supported, the <code>ReplicateKey</code> operation returns an <code>UnsupportedOperationException</code>. For a list of Regions in which HMAC KMS keys are supported, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC keys in KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>The replica must be in a different Amazon Web Services Region than its primary key and other replicas of that primary key, but in the same Amazon Web Services partition. KMS must be available in the replica Region. If the Region is not enabled by default, the Amazon Web Services account must be enabled in the Region. For information about Amazon Web Services partitions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>. For information about enabling and disabling Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable\">Enabling a Region</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-disable\">Disabling a Region</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+          "documentation":"<p>The Region ID of the Amazon Web Services Region for this replica key. </p> <p>Enter the Region ID, such as <code>us-east-1</code> or <code>ap-southeast-2</code>. For a list of Amazon Web Services Regions in which KMS is supported, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/kms.html#kms_region\">KMS service endpoints</a> in the <i>Amazon Web Services General Reference</i>.</p> <p>The replica must be in a different Amazon Web Services Region than its primary key and other replicas of that primary key, but in the same Amazon Web Services partition. KMS must be available in the replica Region. If the Region is not enabled by default, the Amazon Web Services account must be enabled in the Region. For information about Amazon Web Services partitions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs)</a> in the <i>Amazon Web Services General Reference</i>. For information about enabling and disabling Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable\">Enabling a Region</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-disable\">Disabling a Region</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
         "Policy":{
           "shape":"PolicyType",
-          "documentation":"<p>The key policy to attach to the KMS key. This parameter is optional. If you do not provide a key policy, KMS attaches the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default\">default key policy</a> to the KMS key.</p> <p>The key policy is not a shared property of multi-Region keys. You can specify the same key policy or a different key policy for each key in a set of related multi-Region keys. KMS does not synchronize this property.</p> <p>If you provide a key policy, it must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <p>A key policy document can include only the following characters:</p> <ul> <li> <p>Printable ASCII characters from the space character (<code>\\u0020</code>) through the end of the ASCII character range.</p> </li> <li> <p>Printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>).</p> </li> <li> <p>The tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>) special characters</p> </li> </ul> <p>For information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key policies in KMS</a> in the <i>Key Management Service Developer Guide</i>. For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
+          "documentation":"<p>The key policy to attach to the KMS key. This parameter is optional. If you do not provide a key policy, KMS attaches the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html\">default key policy</a> to the KMS key.</p> <p>The key policy is not a shared property of multi-Region keys. You can specify the same key policy or a different key policy for each key in a set of related multi-Region keys. KMS does not synchronize this property.</p> <p>If you provide a key policy, it must meet the following criteria:</p> <ul> <li> <p>The key policy must allow the calling principal to make a subsequent <code>PutKeyPolicy</code> request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#prevent-unmanageable-key\">Default key policy</a> in the <i>Key Management Service Developer Guide</i>. (To omit this condition, set <code>BypassPolicyLockoutSafetyCheck</code> to true.)</p> </li> <li> <p>Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to KMS. When you create a new Amazon Web Services principal, you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to KMS. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_eventual-consistency\">Changes that I make are not always immediately visible</a> in the <i>Amazon Web Services Identity and Access Management User Guide</i>.</p> </li> </ul> <p>A key policy document can include only the following characters:</p> <ul> <li> <p>Printable ASCII characters from the space character (<code>\\u0020</code>) through the end of the ASCII character range.</p> </li> <li> <p>Printable characters in the Basic Latin and Latin-1 Supplement character set (through <code>\\u00FF</code>).</p> </li> <li> <p>The tab (<code>\\u0009</code>), line feed (<code>\\u000A</code>), and carriage return (<code>\\u000D</code>) special characters</p> </li> </ul> <p>For information about key policies, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html\">Key policies in KMS</a> in the <i>Key Management Service Developer Guide</i>. For help writing and formatting a JSON policy document, see the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html\">IAM JSON Policy Reference</a> in the <i> <i>Identity and Access Management User Guide</i> </i>.</p>"
         },
         "BypassPolicyLockoutSafetyCheck":{
           "shape":"BooleanType",
@@ -3366,7 +3500,7 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>Assigns one or more tags to the replica key. Use this parameter to tag the KMS key when it is created. To tag an existing KMS key, use the <a>TagResource</a> operation.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>To use this parameter, you must have <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> permission in an IAM policy.</p> <p>Tags are not a shared property of multi-Region keys. You can specify the same tags or different tags for each key in a set of related multi-Region keys. KMS does not synchronize this property.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You cannot have more than one tag on a KMS key with the same tag key. If you specify an existing tag key with a different tag value, KMS replaces the current tag value with the specified one.</p> <p>When you add tags to an Amazon Web Services resource, Amazon Web Services generates a cost allocation report with usage and costs aggregated by tags. Tags can also be used to control access to a KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tagging Keys</a>.</p>"
+          "documentation":"<p>Assigns one or more tags to the replica key. Use this parameter to tag the KMS key when it is created. To tag an existing KMS key, use the <a>TagResource</a> operation.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/abac.html\">ABAC for KMS</a> in the <i>Key Management Service Developer Guide</i>.</p> </note> <p>To use this parameter, you must have <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html\">kms:TagResource</a> permission in an IAM policy.</p> <p>Tags are not a shared property of multi-Region keys. You can specify the same tags or different tags for each key in a set of related multi-Region keys. KMS does not synchronize this property.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You cannot have more than one tag on a KMS key with the same tag key. If you specify an existing tag key with a different tag value, KMS replaces the current tag value with the specified one.</p> <p>When you add tags to an Amazon Web Services resource, Amazon Web Services generates a cost allocation report with usage and costs aggregated by tags. Tags can also be used to control access to a KMS key. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html\">Tags in KMS</a>.</p>"
         }
       }
     },
@@ -3404,7 +3538,7 @@
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3425,7 +3559,7 @@
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3435,7 +3569,7 @@
       "members":{
         "KeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot perform on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html\">custom key store</a>. To perform on-demand rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-manage.html#multi-region-rotate\">multi-Region keys</a>, invoke the on-demand rotation on the primary key.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
+          "documentation":"<p>Identifies a symmetric encryption KMS key. You cannot perform on-demand rotation of <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">asymmetric KMS keys</a>, <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html\">HMAC KMS keys</a>, multi-Region KMS keys with <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html\">imported key material</a>, or KMS keys in a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/key-store-overview.html\">custom key store</a>. To perform on-demand rotation of a set of related <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#multi-region-rotate\">multi-Region keys</a>, invoke the on-demand rotation on the primary key.</p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p>"
         }
       }
     },
@@ -3471,16 +3605,40 @@
           "shape":"KeyIdType",
           "documentation":"<p>Unique identifier of the key.</p>"
         },
+        "KeyMaterialId":{
+          "shape":"BackingKeyIdType",
+          "documentation":"<p>Unique identifier of the key material. </p>"
+        },
+        "KeyMaterialDescription":{
+          "shape":"KeyMaterialDescriptionType",
+          "documentation":"<p>User-specified description of the key material. This field is only present for symmetric encryption KMS keys with <code>EXTERNAL</code> origin.</p>"
+        },
+        "ImportState":{
+          "shape":"ImportState",
+          "documentation":"<p>Indicates if the key material is currently imported into KMS. It has two possible values: <code>IMPORTED</code> or <code>PENDING_IMPORT</code>. This field is only present for symmetric encryption KMS keys with <code>EXTERNAL</code> origin.</p>"
+        },
+        "KeyMaterialState":{
+          "shape":"KeyMaterialState",
+          "documentation":"<p>There are three possible values for this field: <code>CURRENT</code>, <code>NON_CURRENT</code> and <code>PENDING_ROTATION</code>. KMS uses <code>CURRENT</code> key material for both encryption and decryption and <code>NON_CURRENT</code> key material only for decryption. <code>PENDING_ROTATION</code> identifies key material that has been imported for on-demand key rotation but the rotation hasn't completed. Key material in <code>PENDING_ROTATION</code> is not permanently associated with the KMS key. You can delete this key material and import different key material in its place. The <code>PENDING_ROTATION</code> value is only used in symmetric encryption keys with imported key material. The other values, <code>CURRENT</code> and <code>NON_CURRENT</code>, are used for all KMS keys that support automatic or on-demand key rotation.</p>"
+        },
+        "ExpirationModel":{
+          "shape":"ExpirationModelType",
+          "documentation":"<p>Indicates if the key material is configured to automatically expire. There are two possible values for this field: <code>KEY_MATERIAL_EXPIRES</code> and <code>KEY_MATERIAL_DOES_NOT_EXPIRE</code>. For any key material that expires, the expiration date and time is indicated in <code>ValidTo</code>. This field is only present for symmetric encryption KMS keys with <code>EXTERNAL</code> origin.</p>"
+        },
+        "ValidTo":{
+          "shape":"DateType",
+          "documentation":"<p>Date and time at which the key material expires. This field is only present for symmetric encryption KMS keys with <code>EXTERNAL</code> origin in rotation list entries with an <code>ExpirationModel</code> value of <code>KEY_MATERIAL_EXPIRES</code>.</p>"
+        },
         "RotationDate":{
           "shape":"DateType",
-          "documentation":"<p>Date and time that the key material rotation completed. Formatted as Unix time.</p>"
+          "documentation":"<p>Date and time that the key material rotation completed. Formatted as Unix time. This field is not present for the first key material or an imported key material in <code>PENDING_ROTATION</code> state.</p>"
         },
         "RotationType":{
           "shape":"RotationType",
-          "documentation":"<p>Identifies whether the key material rotation was a scheduled <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-enable-disable\">automatic rotation</a> or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-on-demand\">on-demand rotation</a>.</p>"
+          "documentation":"<p>Identifies whether the key material rotation was a scheduled <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-enable-disable.html\">automatic rotation</a> or an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/rotating-keys-on-demand.html\">on-demand rotation</a>. This field is not present for the first key material or an imported key material in <code>PENDING_ROTATION</code> state.</p>"
         }
       },
-      "documentation":"<p>Contains information about completed key material rotations.</p>"
+      "documentation":"<p>Each entry contains information about one of the key materials associated with a KMS key.</p>"
     },
     "ScheduleKeyDeletionRequest":{
       "type":"structure",
@@ -3535,11 +3693,11 @@
         },
         "MessageType":{
           "shape":"MessageType",
-          "documentation":"<p>Tells KMS whether the value of the <code>Message</code> parameter should be hashed as part of the signing algorithm. Use <code>RAW</code> for unhashed messages; use <code>DIGEST</code> for message digests, which are already hashed.</p> <p>When the value of <code>MessageType</code> is <code>RAW</code>, KMS uses the standard signing algorithm, which begins with a hash function. When the value is <code>DIGEST</code>, KMS skips the hashing step in the signing algorithm.</p> <important> <p>Use the <code>DIGEST</code> value only when the value of the <code>Message</code> parameter is a message digest. If you use the <code>DIGEST</code> value with an unhashed message, the security of the signing operation can be compromised.</p> </important> <p>When the value of <code>MessageType</code>is <code>DIGEST</code>, the length of the <code>Message</code> value must match the length of hashed messages for the specified signing algorithm.</p> <p>You can submit a message digest and omit the <code>MessageType</code> or specify <code>RAW</code> so the digest is hashed again while signing. However, this can cause verification failures when verifying with a system that assumes a single hash.</p> <p>The hashing algorithm in that <code>Sign</code> uses is based on the <code>SigningAlgorithm</code> value.</p> <ul> <li> <p>Signing algorithms that end in SHA_256 use the SHA_256 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_384 use the SHA_384 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_512 use the SHA_512 hashing algorithm.</p> </li> <li> <p>SM2DSA uses the SM3 hashing algorithm. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> </li> </ul>"
+          "documentation":"<p>Tells KMS whether the value of the <code>Message</code> parameter should be hashed as part of the signing algorithm. Use <code>RAW</code> for unhashed messages; use <code>DIGEST</code> for message digests, which are already hashed; use <code>EXTERNAL_MU</code> for 64-byte representative μ used in ML-DSA signing as defined in NIST FIPS 204 Section 6.2.</p> <p>When the value of <code>MessageType</code> is <code>RAW</code>, KMS uses the standard signing algorithm, which begins with a hash function. When the value is <code>DIGEST</code>, KMS skips the hashing step in the signing algorithm. When the value is <code>EXTERNAL_MU</code> KMS skips the concatenated hashing of the public key hash and the message done in the ML-DSA signing algorithm.</p> <important> <p>Use the <code>DIGEST</code> or <code>EXTERNAL_MU</code> value only when the value of the <code>Message</code> parameter is a message digest. If you use the <code>DIGEST</code> value with an unhashed message, the security of the signing operation can be compromised.</p> </important> <p>When using ECC_NIST_EDWARDS25519 KMS keys:</p> <ul> <li> <p>ED25519_SHA_512 signing algorithm requires KMS <code>MessageType:RAW</code> </p> </li> <li> <p>ED25519_PH_SHA_512 signing algorithm requires KMS <code>MessageType:DIGEST</code> </p> </li> </ul> <p>When the value of <code>MessageType</code> is <code>DIGEST</code>, the length of the <code>Message</code> value must match the length of hashed messages for the specified signing algorithm.</p> <p>When the value of <code>MessageType</code> is <code>EXTERNAL_MU</code> the length of the <code>Message</code> value must be 64 bytes.</p> <p>You can submit a message digest and omit the <code>MessageType</code> or specify <code>RAW</code> so the digest is hashed again while signing. However, this can cause verification failures when verifying with a system that assumes a single hash.</p> <p>The hashing algorithm that <code>Sign</code> uses is based on the <code>SigningAlgorithm</code> value.</p> <ul> <li> <p>Signing algorithms that end in SHA_256 use the SHA_256 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_384 use the SHA_384 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_512 use the SHA_512 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHAKE_256 use the SHAKE_256 hashing algorithm.</p> </li> <li> <p>SM2DSA uses the SM3 hashing algorithm. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/offline-operations.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> </li> </ul>"
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "SigningAlgorithm":{
           "shape":"SigningAlgorithmSpec",
@@ -3547,7 +3705,7 @@
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3580,7 +3738,10 @@
         "ECDSA_SHA_256",
         "ECDSA_SHA_384",
         "ECDSA_SHA_512",
-        "SM2DSA"
+        "SM2DSA",
+        "ML_DSA_SHAKE_256",
+        "ED25519_SHA_512",
+        "ED25519_PH_SHA_512"
       ]
     },
     "SigningAlgorithmSpecList":{
@@ -3691,7 +3852,7 @@
         },
         "TargetKeyId":{
           "shape":"KeyIdType",
-          "documentation":"<p>Identifies the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> to associate with the alias. You don't have permission to associate an alias with an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a>.</p> <p>The KMS key must be in the same Amazon Web Services account and Region as the alias. Also, the new target KMS key must be the same type as the current target KMS key (both symmetric or both asymmetric or both HMAC) and they must have the same key usage. </p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p> <p>To verify that the alias is mapped to the correct KMS key, use <a>ListAliases</a>.</p>"
+          "documentation":"<p>Identifies the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-mgn-key\">customer managed key</a> to associate with the alias. You don't have permission to associate an alias with an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-key\">Amazon Web Services managed key</a>.</p> <p>The KMS key must be in the same Amazon Web Services account and Region as the alias. Also, the new target KMS key must be the same type as the current target KMS key (both symmetric or both asymmetric or both HMAC) and they must have the same key usage. </p> <p>Specify the key ID or key ARN of the KMS key.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> </ul> <p>To get the key ID and key ARN for a KMS key, use <a>ListKeys</a> or <a>DescribeKey</a>.</p> <p>To verify that the alias is mapped to the correct KMS key, use <a>ListAliases</a>.</p>"
         }
       }
     },
@@ -3727,6 +3888,10 @@
           "shape":"XksProxyVpcEndpointServiceNameType",
           "documentation":"<p>Changes the name that KMS uses to identify the Amazon VPC endpoint service for your external key store proxy (XKS proxy). This parameter is valid when the <code>CustomKeyStoreType</code> is <code>EXTERNAL_KEY_STORE</code> and the <code>XksProxyConnectivity</code> is <code>VPC_ENDPOINT_SERVICE</code>.</p> <p>To change this value, the external key store must be disconnected.</p>"
         },
+        "XksProxyVpcEndpointServiceOwner":{
+          "shape":"AccountIdType",
+          "documentation":"<p>Changes the Amazon Web Services account ID that KMS uses to identify the Amazon VPC endpoint service for your external key store proxy (XKS proxy). This parameter is optional. If not specified, the current Amazon Web Services account ID for the VPC endpoint service will not be updated.</p> <p>To change this value, the external key store must be disconnected.</p>"
+        },
         "XksProxyAuthenticationCredential":{
           "shape":"XksProxyAuthenticationCredentialType",
           "documentation":"<p>Changes the credentials that KMS uses to sign requests to the external key store proxy (XKS proxy). This parameter is valid only for custom key stores with a <code>CustomKeyStoreType</code> of <code>EXTERNAL_KEY_STORE</code>.</p> <p>You must specify both the <code>AccessKeyId</code> and <code>SecretAccessKey</code> value in the authentication credential, even if you are only updating one value.</p> <p>This parameter doesn't establish or change your authentication credentials on the proxy. It just tells KMS the credential that you established with your external key store proxy. For example, if you rotate the credential on your external key store proxy, you can use this parameter to update the credential in KMS.</p> <p>You can change this value when the external key store is connected or disconnected.</p>"
@@ -3739,8 +3904,7 @@
     },
     "UpdateCustomKeyStoreResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateKeyDescriptionRequest":{
       "type":"structure",
@@ -3803,11 +3967,11 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3847,7 +4011,7 @@
         },
         "MessageType":{
           "shape":"MessageType",
-          "documentation":"<p>Tells KMS whether the value of the <code>Message</code> parameter should be hashed as part of the signing algorithm. Use <code>RAW</code> for unhashed messages; use <code>DIGEST</code> for message digests, which are already hashed.</p> <p>When the value of <code>MessageType</code> is <code>RAW</code>, KMS uses the standard signing algorithm, which begins with a hash function. When the value is <code>DIGEST</code>, KMS skips the hashing step in the signing algorithm.</p> <important> <p>Use the <code>DIGEST</code> value only when the value of the <code>Message</code> parameter is a message digest. If you use the <code>DIGEST</code> value with an unhashed message, the security of the verification operation can be compromised.</p> </important> <p>When the value of <code>MessageType</code>is <code>DIGEST</code>, the length of the <code>Message</code> value must match the length of hashed messages for the specified signing algorithm.</p> <p>You can submit a message digest and omit the <code>MessageType</code> or specify <code>RAW</code> so the digest is hashed again while signing. However, if the signed message is hashed once while signing, but twice while verifying, verification fails, even when the message hasn't changed.</p> <p>The hashing algorithm in that <code>Verify</code> uses is based on the <code>SigningAlgorithm</code> value.</p> <ul> <li> <p>Signing algorithms that end in SHA_256 use the SHA_256 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_384 use the SHA_384 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_512 use the SHA_512 hashing algorithm.</p> </li> <li> <p>SM2DSA uses the SM3 hashing algorithm. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/asymmetric-key-specs.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> </li> </ul>"
+          "documentation":"<p>Tells KMS whether the value of the <code>Message</code> parameter should be hashed as part of the signing algorithm. Use <code>RAW</code> for unhashed messages; use <code>DIGEST</code> for message digests, which are already hashed; use <code>EXTERNAL_MU</code> for 64-byte representative μ used in ML-DSA signing as defined in NIST FIPS 204 Section 6.2.</p> <p>When the value of <code>MessageType</code> is <code>RAW</code>, KMS uses the standard signing algorithm, which begins with a hash function. When the value is <code>DIGEST</code>, KMS skips the hashing step in the signing algorithm. When the value is <code>EXTERNAL_MU</code> KMS skips the concatenated hashing of the public key hash and the message done in the ML-DSA signing algorithm.</p> <important> <p>Use the <code>DIGEST</code> or <code>EXTERNAL_MU</code> value only when the value of the <code>Message</code> parameter is a message digest. If you use the <code>DIGEST</code> value with an unhashed message, the security of the signing operation can be compromised.</p> </important> <p>When using ECC_NIST_EDWARDS25519 KMS keys:</p> <ul> <li> <p>ED25519_SHA_512 signing algorithm requires KMS <code>MessageType:RAW</code> </p> </li> <li> <p>ED25519_PH_SHA_512 signing algorithm requires KMS <code>MessageType:DIGEST</code> </p> </li> </ul> <p>When the value of <code>MessageType</code> is <code>DIGEST</code>, the length of the <code>Message</code> value must match the length of hashed messages for the specified signing algorithm.</p> <p>When the value of <code>MessageType</code> is <code>EXTERNAL_MU</code> the length of the <code>Message</code> value must be 64 bytes.</p> <p>You can submit a message digest and omit the <code>MessageType</code> or specify <code>RAW</code> so the digest is hashed again while signing. However, if the signed message is hashed once while signing, but twice while verifying, verification fails, even when the message hasn't changed.</p> <p>The hashing algorithm that <code>Verify</code> uses is based on the <code>SigningAlgorithm</code> value.</p> <ul> <li> <p>Signing algorithms that end in SHA_256 use the SHA_256 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_384 use the SHA_384 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHA_512 use the SHA_512 hashing algorithm.</p> </li> <li> <p>Signing algorithms that end in SHAKE_256 use the SHAKE_256 hashing algorithm.</p> </li> <li> <p>SM2DSA uses the SM3 hashing algorithm. For details, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/offline-operations.html#key-spec-sm-offline-verification\">Offline verification with SM2 key pairs</a>.</p> </li> </ul>"
         },
         "Signature":{
           "shape":"CiphertextType",
@@ -3859,11 +4023,11 @@
         },
         "GrantTokens":{
           "shape":"GrantTokenList",
-          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of grant tokens.</p> <p>Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved <i>eventual consistency</i>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant_token\">Grant token</a> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/using-grant-token.html\">Using a grant token</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         },
         "DryRun":{
           "shape":"NullableBooleanType",
-          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/programming-dryrun.html\">Testing your KMS API calls</a> in the <i>Key Management Service Developer Guide</i>.</p>"
+          "documentation":"<p>Checks if your request will succeed. <code>DryRun</code> is an optional parameter. </p> <p>To learn more about how to use this parameter, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/testing-permissions.html\">Testing your permissions</a> in the <i>Key Management Service Developer Guide</i>.</p>"
         }
       }
     },
@@ -3987,6 +4151,10 @@
         "VpcEndpointServiceName":{
           "shape":"XksProxyVpcEndpointServiceNameType",
           "documentation":"<p>The Amazon VPC endpoint service used to communicate with the external key store proxy. This field appears only when the external key store proxy uses an Amazon VPC endpoint service to communicate with KMS.</p>"
+        },
+        "VpcEndpointServiceOwner":{
+          "shape":"AccountIdType",
+          "documentation":"<p>The Amazon Web Services account ID that owns the Amazon VPC endpoint service used to communicate with the external key store proxy (XKS). This field appears only when the XKS uses an VPC endpoint service to communicate with KMS.</p>"
         }
       },
       "documentation":"<p>Detailed information about the external key store proxy (XKS proxy). Your external key store proxy translates KMS requests into a format that your external key manager can understand. These fields appear in a <a>DescribeCustomKeyStores</a> response only when the <code>CustomKeyStoreType</code> is <code>EXTERNAL_KEY_STORE</code>.</p>"
@@ -4078,7 +4246,7 @@
       "type":"string",
       "max":64,
       "min":20,
-      "pattern":"^com\\.amazonaws\\.vpce\\.([a-z]+-){2,3}\\d+\\.vpce-svc-[0-9a-z]+$"
+      "pattern":"^(com|eu)\\.amazonaws\\.vpce\\.([a-z]+-){2,3}\\d+\\.vpce-svc-[0-9a-z]+$"
     },
     "XksProxyVpcEndpointServiceNotFoundException":{
       "type":"structure",
@@ -4089,5 +4257,5 @@
       "exception":true
     }
   },
-  "documentation":"<fullname>Key Management Service</fullname> <p>Key Management Service (KMS) is an encryption and key management web service. This guide describes the KMS operations that you can call programmatically. For general information about KMS, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/\"> <i>Key Management Service Developer Guide</i> </a>.</p> <note> <p>KMS has replaced the term <i>customer master key (CMK)</i> with <i>KMS key</i> and <i>KMS key</i>. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term.</p> <p>Amazon Web Services provides SDKs that consist of libraries and sample code for various programming languages and platforms (Java, Ruby, .Net, macOS, Android, etc.). The SDKs provide a convenient way to create programmatic access to KMS and other Amazon Web Services services. For example, the SDKs take care of tasks such as signing requests (see below), managing errors, and retrying requests automatically. For more information about the Amazon Web Services SDKs, including how to download and install them, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>.</p> </note> <p>We recommend that you use the Amazon Web Services SDKs to make programmatic API calls to KMS.</p> <p>If you need to use FIPS 140-2 validated cryptographic modules when communicating with Amazon Web Services, use the FIPS endpoint in your preferred Amazon Web Services Region. For more information about the available FIPS endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/kms.html#kms_region\">Service endpoints</a> in the Key Management Service topic of the <i>Amazon Web Services General Reference</i>.</p> <p>All KMS API calls must be signed and be transmitted using Transport Layer Security (TLS). KMS recommends you always use the latest supported TLS version. Clients must also support cipher suites with Perfect Forward Secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and later support these modes.</p> <p> <b>Signing Requests</b> </p> <p>Requests must be signed using an access key ID and a secret access key. We strongly recommend that you do not use your Amazon Web Services account root access key ID and secret access key for everyday work. You can use the access key ID and secret access key for an IAM user or you can use the Security Token Service (STS) to generate temporary security credentials and use those to sign requests. </p> <p>All KMS requests must be signed with <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4</a>.</p> <p> <b>Logging API Requests</b> </p> <p>KMS supports CloudTrail, a service that logs Amazon Web Services API calls and related events for your Amazon Web Services account and delivers them to an Amazon S3 bucket that you specify. By using the information collected by CloudTrail, you can determine what requests were made to KMS, who made the request, when it was made, and so on. To learn more about CloudTrail, including how to turn it on and find your log files, see the <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/\">CloudTrail User Guide</a>.</p> <p> <b>Additional Resources</b> </p> <p>For more information about credentials and request signing, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html\">Amazon Web Services Security Credentials</a> - This topic provides general information about the types of credentials used to access Amazon Web Services.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html\">Temporary Security Credentials</a> - This section of the <i>IAM User Guide</i> describes how to create and use temporary security credentials.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a> - This set of topics walks you through the process of signing a request using an access key ID and a secret access key.</p> </li> </ul> <p> <b>Commonly Used API Operations</b> </p> <p>Of the API operations discussed in this guide, the following will prove the most useful for most applications. You will likely perform operations other than these, such as creating keys and assigning policies, by using the console.</p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul>"
+  "documentation":"<fullname>Key Management Service</fullname> <p>Key Management Service (KMS) is an encryption and key management web service. This guide describes the KMS operations that you can call programmatically. For general information about KMS, see the <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/\"> <i>Key Management Service Developer Guide</i> </a>.</p> <note> <p>KMS has replaced the term <i>customer master key (CMK)</i> with <i>Key Management Service key</i> and <i>KMS key</i>. The concept has not changed. To prevent breaking changes, KMS is keeping some variations of this term.</p> <p>Amazon Web Services provides SDKs that consist of libraries and sample code for various programming languages and platforms (Java, Rust, Python, Ruby, .Net, macOS, Android, etc.). The SDKs provide a convenient way to create programmatic access to KMS and other Amazon Web Services services. For example, the SDKs take care of tasks such as signing requests (see below), managing errors, and retrying requests automatically. For more information about the Amazon Web Services SDKs, including how to download and install them, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>.</p> </note> <p>We recommend that you use the Amazon Web Services SDKs to make programmatic API calls to KMS.</p> <p>If you need to use FIPS 140-2 validated cryptographic modules when communicating with Amazon Web Services, use one of the FIPS endpoints in your preferred Amazon Web Services Region. If you need communicate over IPv6, use the dual-stack endpoint in your preferred Amazon Web Services Region. For more information see <a href=\"https://docs.aws.amazon.com/general/latest/gr/kms.html#kms_region\">Service endpoints</a> in the Key Management Service topic of the <i>Amazon Web Services General Reference</i> and <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/ipv6-kms.html\">Dual-stack endpoint support</a> in the KMS Developer Guide.</p> <p>All KMS API calls must be signed and be transmitted using Transport Layer Security (TLS). KMS recommends you always use the latest supported TLS version. Clients must also support cipher suites with Perfect Forward Secrecy (PFS) such as Ephemeral Diffie-Hellman (DHE) or Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). Most modern systems such as Java 7 and later support these modes.</p> <p> <b>Signing Requests</b> </p> <p>Requests must be signed using an access key ID and a secret access key. We strongly recommend that you do not use your Amazon Web Services account root access key ID and secret access key for everyday work. You can use the access key ID and secret access key for an IAM user or you can use the Security Token Service (STS) to generate temporary security credentials and use those to sign requests. </p> <p>All KMS requests must be signed with <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4</a>.</p> <p> <b>Logging API Requests</b> </p> <p>KMS supports CloudTrail, a service that logs Amazon Web Services API calls and related events for your Amazon Web Services account and delivers them to an Amazon S3 bucket that you specify. By using the information collected by CloudTrail, you can determine what requests were made to KMS, who made the request, when it was made, and so on. To learn more about CloudTrail, including how to turn it on and find your log files, see the <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/\">CloudTrail User Guide</a>.</p> <p> <b>Additional Resources</b> </p> <p>For more information about credentials and request signing, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html\">Amazon Web Services Security Credentials</a> - This topic provides general information about the types of credentials used to access Amazon Web Services.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html\">Temporary Security Credentials</a> - This section of the <i>IAM User Guide</i> describes how to create and use temporary security credentials.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a> - This set of topics walks you through the process of signing a request using an access key ID and a secret access key.</p> </li> </ul> <p> <b>Commonly Used API Operations</b> </p> <p>Of the API operations discussed in this guide, the following will prove the most useful for most applications. You will likely perform operations other than these, such as creating keys and assigning policies, by using the console.</p> <ul> <li> <p> <a>Encrypt</a> </p> </li> <li> <p> <a>Decrypt</a> </p> </li> <li> <p> <a>GenerateDataKey</a> </p> </li> <li> <p> <a>GenerateDataKeyWithoutPlaintext</a> </p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lakeformation/2017-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lakeformation/2017-03-31/service-2.json 2.31.35-1/awscli/botocore/data/lakeformation/2017-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/lakeformation/2017-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lakeformation/2017-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -201,7 +201,8 @@
         {"shape":"OperationTimeoutException"},
         {"shape":"EntityNotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ConcurrentModificationException"}
+        {"shape":"ConcurrentModificationException"},
+        {"shape":"ResourceNumberLimitExceededException"}
       ],
       "documentation":"<p>Enforce Lake Formation permissions for the given databases, tables, and principals.</p>"
     },
@@ -814,7 +815,7 @@
         {"shape":"ResourceNumberLimitExceededException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Registers the resource as managed by the Data Catalog.</p> <p>To add or update data, Lake Formation needs read/write access to the chosen Amazon S3 path. Choose a role that you know has permission to do this, or choose the AWSServiceRoleForLakeFormationDataAccess service-linked role. When you register the first Amazon S3 path, the service-linked role and a new inline policy are created on your behalf. Lake Formation adds the first path to the inline policy and attaches it to the service-linked role. When you register subsequent paths, Lake Formation adds the path to the existing policy.</p> <p>The following request registers a new location and gives Lake Formation permission to use the service-linked role to access that location.</p> <p> <code>ResourceArn = arn:aws:s3:::my-bucket/ UseServiceLinkedRole = true</code> </p> <p>If <code>UseServiceLinkedRole</code> is not set to true, you must provide or set the <code>RoleArn</code>:</p> <p> <code>arn:aws:iam::12345:role/my-data-access-role</code> </p>"
+      "documentation":"<p>Registers the resource as managed by the Data Catalog.</p> <p>To add or update data, Lake Formation needs read/write access to the chosen data location. Choose a role that you know has permission to do this, or choose the AWSServiceRoleForLakeFormationDataAccess service-linked role. When you register the first Amazon S3 path, the service-linked role and a new inline policy are created on your behalf. Lake Formation adds the first path to the inline policy and attaches it to the service-linked role. When you register subsequent paths, Lake Formation adds the path to the existing policy.</p> <p>The following request registers a new location and gives Lake Formation permission to use the service-linked role to access that location.</p> <p> <code>ResourceArn = arn:aws:s3:::my-bucket/ UseServiceLinkedRole = true</code> </p> <p>If <code>UseServiceLinkedRole</code> is not set to true, you must provide or set the <code>RoleArn</code>:</p> <p> <code>arn:aws:iam::12345:role/my-data-access-role</code> </p>"
     },
     "RemoveLFTagsFromResource":{
       "name":"RemoveLFTagsFromResource",
@@ -1125,8 +1126,7 @@
     },
     "AllRowsWildcard":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A structure that you pass to indicate you want all rows in a filter. </p>"
     },
     "AlreadyExistsException":{
@@ -1276,6 +1276,7 @@
           "shape":"PermissionList",
           "documentation":"<p>The permissions to be granted.</p>"
         },
+        "Condition":{"shape":"Condition"},
         "PermissionsWithGrantOption":{
           "shape":"PermissionList",
           "documentation":"<p>Indicates if the option to pass permissions is granted.</p>"
@@ -1310,6 +1311,7 @@
         }
       }
     },
+    "Boolean":{"type":"boolean"},
     "BooleanNullable":{"type":"boolean"},
     "CancelTransactionRequest":{
       "type":"structure",
@@ -1323,8 +1325,7 @@
     },
     "CancelTransactionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CatalogIdString":{
       "type":"string",
@@ -1452,8 +1453,7 @@
     },
     "CreateDataCellsFilterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateLFTagExpressionRequest":{
       "type":"structure",
@@ -1482,8 +1482,7 @@
     },
     "CreateLFTagExpressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateLFTagRequest":{
       "type":"structure",
@@ -1508,8 +1507,7 @@
     },
     "CreateLFTagResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateLakeFormationIdentityCenterConfigurationRequest":{
       "type":"structure",
@@ -1549,13 +1547,13 @@
       ],
       "members":{
         "Principal":{"shape":"DataLakePrincipal"},
-        "Resource":{"shape":"Resource"}
+        "Resource":{"shape":"Resource"},
+        "Condition":{"shape":"Condition"}
       }
     },
     "CreateLakeFormationOptInResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CredentialTimeoutDurationSecondInteger":{
       "type":"integer",
@@ -1775,8 +1773,7 @@
     },
     "DeleteDataCellsFilterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLFTagExpressionRequest":{
       "type":"structure",
@@ -1794,8 +1791,7 @@
     },
     "DeleteLFTagExpressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLFTagRequest":{
       "type":"structure",
@@ -1813,8 +1809,7 @@
     },
     "DeleteLFTagResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLakeFormationIdentityCenterConfigurationRequest":{
       "type":"structure",
@@ -1827,8 +1822,7 @@
     },
     "DeleteLakeFormationIdentityCenterConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLakeFormationOptInRequest":{
       "type":"structure",
@@ -1838,13 +1832,13 @@
       ],
       "members":{
         "Principal":{"shape":"DataLakePrincipal"},
-        "Resource":{"shape":"Resource"}
+        "Resource":{"shape":"Resource"},
+        "Condition":{"shape":"Condition"}
       }
     },
     "DeleteLakeFormationOptInResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteObjectInput":{
       "type":"structure",
@@ -1898,8 +1892,7 @@
     },
     "DeleteObjectsOnCancelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterResourceRequest":{
       "type":"structure",
@@ -1913,8 +1906,7 @@
     },
     "DeregisterResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeLakeFormationIdentityCenterConfigurationRequest":{
       "type":"structure",
@@ -2100,8 +2092,7 @@
     },
     "ExtendTransactionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ExternalFilteringConfiguration":{
       "type":"structure",
@@ -2191,8 +2182,7 @@
     },
     "GetDataLakePrincipalRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetDataLakePrincipalResponse":{
       "type":"structure",
@@ -2708,6 +2698,7 @@
           "shape":"PermissionList",
           "documentation":"<p>The permissions granted to the principal on the resource. Lake Formation defines privileges to grant and revoke access to metadata in the Data Catalog and data organized in underlying data storage such as Amazon S3. Lake Formation requires that each principal be authorized to perform a specific task on Lake Formation resources. </p>"
         },
+        "Condition":{"shape":"Condition"},
         "PermissionsWithGrantOption":{
           "shape":"PermissionList",
           "documentation":"<p>Indicates a list of the granted permissions that the principal may pass to other users. These permissions may only be a subset of the permissions granted in the <code>Privileges</code>.</p>"
@@ -2716,8 +2707,7 @@
     },
     "GrantPermissionsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "HashString":{
       "type":"string",
@@ -3498,8 +3488,7 @@
     },
     "PutDataLakeSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "QueryIdString":{"type":"string"},
     "QueryParameterMap":{
@@ -3599,13 +3588,16 @@
         "HybridAccessEnabled":{
           "shape":"NullableBoolean",
           "documentation":"<p> Specifies whether the data access of tables pointing to the location can be managed by both Lake Formation permissions as well as Amazon S3 bucket policies. </p>"
+        },
+        "WithPrivilegedAccess":{
+          "shape":"Boolean",
+          "documentation":"<p>Grants the calling principal the permissions to perform all supported Lake Formation operations on the registered data location. </p>"
         }
       }
     },
     "RegisterResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveLFTagsFromResourceRequest":{
       "type":"structure",
@@ -3702,6 +3694,10 @@
         "HybridAccessEnabled":{
           "shape":"NullableBoolean",
           "documentation":"<p> Indicates whether the data access of tables pointing to the location can be managed by both Lake Formation permissions as well as Amazon S3 bucket policies. </p>"
+        },
+        "WithPrivilegedAccess":{
+          "shape":"NullableBoolean",
+          "documentation":"<p>Grants the calling principal the permissions to perform all supported Lake Formation operations on the registered data location. </p>"
         }
       },
       "documentation":"<p>A structure containing information about an Lake Formation resource.</p>"
@@ -3780,6 +3776,7 @@
           "shape":"PermissionList",
           "documentation":"<p>The permissions revoked to the principal on the resource. For information about permissions, see <a href=\"https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html\">Security and Access Control to Metadata and Data</a>.</p>"
         },
+        "Condition":{"shape":"Condition"},
         "PermissionsWithGrantOption":{
           "shape":"PermissionList",
           "documentation":"<p>Indicates a list of permissions for which to revoke the grant option allowing the principal to pass permissions to other principals.</p>"
@@ -3788,8 +3785,7 @@
     },
     "RevokePermissionsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RowFilter":{
       "type":"structure",
@@ -4063,8 +4059,7 @@
     },
     "TableWildcard":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A wildcard object representing every table under a database.</p>"
     },
     "TableWithColumnsResource":{
@@ -4283,8 +4278,7 @@
     },
     "UpdateDataCellsFilterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLFTagExpressionRequest":{
       "type":"structure",
@@ -4313,8 +4307,7 @@
     },
     "UpdateLFTagExpressionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLFTagRequest":{
       "type":"structure",
@@ -4340,8 +4333,7 @@
     },
     "UpdateLFTagResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLakeFormationIdentityCenterConfigurationRequest":{
       "type":"structure",
@@ -4366,8 +4358,7 @@
     },
     "UpdateLakeFormationIdentityCenterConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResourceRequest":{
       "type":"structure",
@@ -4396,8 +4387,7 @@
     },
     "UpdateResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTableObjectsRequest":{
       "type":"structure",
@@ -4431,8 +4421,7 @@
     },
     "UpdateTableObjectsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTableStorageOptimizerRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/service-2.json 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,14 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2015-03-31",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"lambda",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS Lambda",
     "serviceId":"Lambda",
     "signatureVersion":"v4",
-    "uid":"lambda-2015-03-31",
-    "auth":["aws.auth#sigv4"]
+    "signingName":"lambda",
+    "uid":"lambda-2015-03-31"
   },
   "operations":{
     "AddLayerVersionPermission":{
@@ -22,12 +23,12 @@
       "input":{"shape":"AddLayerVersionPermissionRequest"},
       "output":{"shape":"AddLayerVersionPermissionResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
         {"shape":"PolicyLengthExceededException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Adds permissions to the resource-based policy of a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. Use this action to grant layer usage permission to other accounts. You can grant permission to a single account, all accounts in an organization, or all Amazon Web Services accounts. </p> <p>To revoke permission, call <a>RemoveLayerVersionPermission</a> with the statement ID that you specified when you added it.</p>"
@@ -42,12 +43,12 @@
       "input":{"shape":"AddPermissionRequest"},
       "output":{"shape":"AddPermissionResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceConflictException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"PolicyLengthExceededException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
+        {"shape":"PolicyLengthExceededException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Grants a <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying\">principal</a> permission to use a function. You can apply the policy at the function level, or specify a qualifier to restrict access to a single version or alias. If you use a qualifier, the invoker must use the full Amazon Resource Name (ARN) of that version or alias to invoke the function. Note: Lambda does not support adding policies to version $LATEST.</p> <p>To grant permission to another account, specify the account ID as the <code>Principal</code>. To grant permission to an organization defined in Organizations, specify the organization ID as the <code>PrincipalOrgID</code>. For Amazon Web Services services, the principal is a domain-style identifier that the service defines, such as <code>s3.amazonaws.com</code> or <code>sns.amazonaws.com</code>. For Amazon Web Services services, you can also specify the ARN of the associated resource as the <code>SourceArn</code>. If you grant permission to a service principal without specifying the source, other accounts could potentially configure resources in their account to invoke your Lambda function.</p> <p>This operation adds a statement to a resource-based permissions policy for the function. For more information about function policies, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html\">Using resource-based policies for Lambda</a>.</p>"
@@ -62,26 +63,27 @@
       "input":{"shape":"CreateAliasRequest"},
       "output":{"shape":"AliasConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceConflictException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Creates an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a> for a Lambda function version. Use aliases to provide clients with a function identifier that you can update to invoke a different version.</p> <p>You can also map an alias to split invocation requests between two versions. Use the <code>RoutingConfig</code> parameter to specify a second version and the percentage of invocation requests that it receives.</p>"
+      "documentation":"<p>Creates an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a> for a Lambda function version. Use aliases to provide clients with a function identifier that you can update to invoke a different version.</p> <p>You can also map an alias to split invocation requests between two versions. Use the <code>RoutingConfig</code> parameter to specify a second version and the percentage of invocation requests that it receives.</p>",
+      "idempotent":true
     },
     "CreateCodeSigningConfig":{
       "name":"CreateCodeSigningConfig",
       "http":{
         "method":"POST",
-        "requestUri":"/2020-04-22/code-signing-configs/",
+        "requestUri":"/2020-04-22/code-signing-configs",
         "responseCode":201
       },
       "input":{"shape":"CreateCodeSigningConfigRequest"},
       "output":{"shape":"CreateCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"}
       ],
       "documentation":"<p>Creates a code signing configuration. A <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html\">code signing configuration</a> defines a list of allowed signing profiles and defines the code-signing validation policy (action to be taken if deployment validation checks fail). </p>"
     },
@@ -89,19 +91,19 @@
       "name":"CreateEventSourceMapping",
       "http":{
         "method":"POST",
-        "requestUri":"/2015-03-31/event-source-mappings/",
+        "requestUri":"/2015-03-31/event-source-mappings",
         "responseCode":202
       },
       "input":{"shape":"CreateEventSourceMappingRequest"},
       "output":{"shape":"EventSourceMappingConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Creates a mapping between an event source and an Lambda function. Lambda reads items from the event source and invokes the function.</p> <p>For details about how to configure different event sources, see the following topics. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-dynamodb-eventsourcemapping\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-eventsourcemapping\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/kafka-smaa.html\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html\"> Amazon DocumentDB</a> </p> </li> </ul> <p>The following error handling options are available only for DynamoDB and Kinesis event sources:</p> <ul> <li> <p> <code>BisectBatchOnFunctionError</code> – If the function returns an error, split the batch in two and retry.</p> </li> <li> <p> <code>MaximumRecordAgeInSeconds</code> – Discard records older than the specified age. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires</p> </li> <li> <p> <code>MaximumRetryAttempts</code> – Discard records after the specified number of retries. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires.</p> </li> <li> <p> <code>ParallelizationFactor</code> – Process multiple batches from each shard concurrently.</p> </li> </ul> <p>For stream sources (DynamoDB, Kinesis, Amazon MSK, and self-managed Apache Kafka), the following option is also available:</p> <ul> <li> <p> <code>DestinationConfig</code> – Send discarded records to an Amazon SQS queue, Amazon SNS topic, or Amazon S3 bucket.</p> </li> </ul> <p>For information about which configuration parameters apply to each event source, see the following topics.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-ddb-params\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-params\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-params\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-params\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-parms\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-kafka-parms\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html#docdb-configuration\"> Amazon DocumentDB</a> </p> </li> </ul>"
+      "documentation":"<p>Creates a mapping between an event source and an Lambda function. Lambda reads items from the event source and invokes the function.</p> <p>For details about how to configure different event sources, see the following topics. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-dynamodb-eventsourcemapping\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-eventsourcemapping\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/kafka-smaa.html\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html\"> Amazon DocumentDB</a> </p> </li> </ul> <p>The following error handling options are available only for DynamoDB and Kinesis event sources:</p> <ul> <li> <p> <code>BisectBatchOnFunctionError</code> – If the function returns an error, split the batch in two and retry.</p> </li> <li> <p> <code>MaximumRecordAgeInSeconds</code> – Discard records older than the specified age. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires</p> </li> <li> <p> <code>MaximumRetryAttempts</code> – Discard records after the specified number of retries. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires.</p> </li> <li> <p> <code>ParallelizationFactor</code> – Process multiple batches from each shard concurrently.</p> </li> </ul> <p>For stream sources (DynamoDB, Kinesis, Amazon MSK, and self-managed Apache Kafka), the following option is also available:</p> <ul> <li> <p> <code>OnFailure</code> – Send discarded records to an Amazon SQS queue, Amazon SNS topic, or Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations\">Adding a destination</a>.</p> </li> </ul> <p>For information about which configuration parameters apply to each event source, see the following topics.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-ddb-params\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-params\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-params\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-params\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-parms\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-kafka-parms\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html#docdb-configuration\"> Amazon DocumentDB</a> </p> </li> </ul>"
     },
     "CreateFunction":{
       "name":"CreateFunction",
@@ -113,17 +115,18 @@
       "input":{"shape":"CreateFunctionRequest"},
       "output":{"shape":"FunctionConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"CodeStorageExceededException"},
-        {"shape":"CodeVerificationFailedException"},
         {"shape":"InvalidCodeSignatureException"},
-        {"shape":"CodeSigningConfigNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"CodeVerificationFailedException"},
+        {"shape":"CodeSigningConfigNotFoundException"},
+        {"shape":"CodeStorageExceededException"}
       ],
-      "documentation":"<p>Creates a Lambda function. To create a function, you need a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html\">deployment package</a> and an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role\">execution role</a>. The deployment package is a .zip file archive or container image that contains your function code. The execution role grants the function permission to use Amazon Web Services services, such as Amazon CloudWatch Logs for log streaming and X-Ray for request tracing.</p> <p>If the deployment package is a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html\">container image</a>, then you set the package type to <code>Image</code>. For a container image, the code property must include the URI of a container image in the Amazon ECR registry. You do not need to specify the handler and runtime properties.</p> <p>If the deployment package is a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html#gettingstarted-package-zip\">.zip file archive</a>, then you set the package type to <code>Zip</code>. For a .zip file archive, the code property specifies the location of the .zip file. You must also specify the handler and runtime properties. The code in the deployment package must be compatible with the target instruction set architecture of the function (<code>x86-64</code> or <code>arm64</code>). If you do not specify the architecture, then the default value is <code>x86-64</code>.</p> <p>When you create a function, Lambda provisions an instance of the function and its supporting resources. If your function connects to a VPC, this process can take a minute or so. During this time, you can't invoke or modify the function. The <code>State</code>, <code>StateReason</code>, and <code>StateReasonCode</code> fields in the response from <a>GetFunctionConfiguration</a> indicate when the function is ready to invoke. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html\">Lambda function states</a>.</p> <p>A function has an unpublished version, and can have published versions and aliases. The unpublished version changes when you update your function's code and configuration. A published version is a snapshot of your function code and configuration that can't be changed. An alias is a named resource that maps to a version, and can be changed to map to a different version. Use the <code>Publish</code> parameter to create version <code>1</code> of your function from its initial configuration.</p> <p>The other parameters let you configure version-specific and function-level settings. You can modify version-specific settings later with <a>UpdateFunctionConfiguration</a>. Function-level settings apply to both the unpublished and published versions of the function, and include tags (<a>TagResource</a>) and per-function concurrency limits (<a>PutFunctionConcurrency</a>).</p> <p>You can use code signing if your deployment package is a .zip file archive. To enable code signing for this function, specify the ARN of a code-signing configuration. When a user attempts to deploy a code package with <a>UpdateFunctionCode</a>, Lambda checks that the code package has a valid signature from a trusted publisher. The code-signing configuration includes set of signing profiles, which define the trusted publishers for this function.</p> <p>If another Amazon Web Services account or an Amazon Web Services service invokes your function, use <a>AddPermission</a> to grant permission by creating a resource-based Identity and Access Management (IAM) policy. You can grant permissions at the function level, on a version, or on an alias.</p> <p>To invoke your function directly, use <a>Invoke</a>. To invoke your function in response to events in other Amazon Web Services services, create an event source mapping (<a>CreateEventSourceMapping</a>), or configure a function trigger in the other service. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html\">Invoking Lambda functions</a>.</p>"
+      "documentation":"<p>Creates a Lambda function. To create a function, you need a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html\">deployment package</a> and an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role\">execution role</a>. The deployment package is a .zip file archive or container image that contains your function code. The execution role grants the function permission to use Amazon Web Services services, such as Amazon CloudWatch Logs for log streaming and X-Ray for request tracing.</p> <p>If the deployment package is a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html\">container image</a>, then you set the package type to <code>Image</code>. For a container image, the code property must include the URI of a container image in the Amazon ECR registry. You do not need to specify the handler and runtime properties.</p> <p>If the deployment package is a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html#gettingstarted-package-zip\">.zip file archive</a>, then you set the package type to <code>Zip</code>. For a .zip file archive, the code property specifies the location of the .zip file. You must also specify the handler and runtime properties. The code in the deployment package must be compatible with the target instruction set architecture of the function (<code>x86-64</code> or <code>arm64</code>). If you do not specify the architecture, then the default value is <code>x86-64</code>.</p> <p>When you create a function, Lambda provisions an instance of the function and its supporting resources. If your function connects to a VPC, this process can take a minute or so. During this time, you can't invoke or modify the function. The <code>State</code>, <code>StateReason</code>, and <code>StateReasonCode</code> fields in the response from <a>GetFunctionConfiguration</a> indicate when the function is ready to invoke. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html\">Lambda function states</a>.</p> <p>A function has an unpublished version, and can have published versions and aliases. The unpublished version changes when you update your function's code and configuration. A published version is a snapshot of your function code and configuration that can't be changed. An alias is a named resource that maps to a version, and can be changed to map to a different version. Use the <code>Publish</code> parameter to create version <code>1</code> of your function from its initial configuration.</p> <p>The other parameters let you configure version-specific and function-level settings. You can modify version-specific settings later with <a>UpdateFunctionConfiguration</a>. Function-level settings apply to both the unpublished and published versions of the function, and include tags (<a>TagResource</a>) and per-function concurrency limits (<a>PutFunctionConcurrency</a>).</p> <p>You can use code signing if your deployment package is a .zip file archive. To enable code signing for this function, specify the ARN of a code-signing configuration. When a user attempts to deploy a code package with <a>UpdateFunctionCode</a>, Lambda checks that the code package has a valid signature from a trusted publisher. The code-signing configuration includes set of signing profiles, which define the trusted publishers for this function.</p> <p>If another Amazon Web Services account or an Amazon Web Services service invokes your function, use <a>AddPermission</a> to grant permission by creating a resource-based Identity and Access Management (IAM) policy. You can grant permissions at the function level, on a version, or on an alias.</p> <p>To invoke your function directly, use <a>Invoke</a>. To invoke your function in response to events in other Amazon Web Services services, create an event source mapping (<a>CreateEventSourceMapping</a>), or configure a function trigger in the other service. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html\">Invoking Lambda functions</a>.</p>",
+      "idempotent":true
     },
     "CreateFunctionUrlConfig":{
       "name":"CreateFunctionUrlConfig",
@@ -135,11 +138,11 @@
       "input":{"shape":"CreateFunctionUrlConfigRequest"},
       "output":{"shape":"CreateFunctionUrlConfigResponse"},
       "errors":[
-        {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Creates a Lambda function URL with the specified configuration parameters. A function URL is a dedicated HTTP(S) endpoint that you can use to invoke your function.</p>"
     },
@@ -152,12 +155,13 @@
       },
       "input":{"shape":"DeleteAliasRequest"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Deletes a Lambda function <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a>.</p>"
+      "documentation":"<p>Deletes a Lambda function <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a>.</p>",
+      "idempotent":true
     },
     "DeleteCodeSigningConfig":{
       "name":"DeleteCodeSigningConfig",
@@ -169,12 +173,13 @@
       "input":{"shape":"DeleteCodeSigningConfigRequest"},
       "output":{"shape":"DeleteCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes the code signing configuration. You can delete the code signing configuration only if no function is using it. </p>"
+      "documentation":"<p>Deletes the code signing configuration. You can delete the code signing configuration only if no function is using it. </p>",
+      "idempotent":true
     },
     "DeleteEventSourceMapping":{
       "name":"DeleteEventSourceMapping",
@@ -186,14 +191,15 @@
       "input":{"shape":"DeleteEventSourceMappingRequest"},
       "output":{"shape":"EventSourceMappingConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceInUseException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceInUseException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html\">event source mapping</a>. You can get the identifier of a mapping from the output of <a>ListEventSourceMappings</a>.</p> <p>When you delete an event source mapping, it enters a <code>Deleting</code> state and might not be completely deleted for several seconds.</p>"
+      "documentation":"<p>Deletes an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/intro-invocation-modes.html\">event source mapping</a>. You can get the identifier of a mapping from the output of <a>ListEventSourceMappings</a>.</p> <p>When you delete an event source mapping, it enters a <code>Deleting</code> state and might not be completely deleted for several seconds.</p>",
+      "idempotent":true
     },
     "DeleteFunction":{
       "name":"DeleteFunction",
@@ -204,13 +210,14 @@
       },
       "input":{"shape":"DeleteFunctionRequest"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes a Lambda function. To delete a specific function version, use the <code>Qualifier</code> parameter. Otherwise, all versions and aliases are deleted. This doesn't require the user to have explicit permissions for <a>DeleteAlias</a>.</p> <p>To delete Lambda event source mappings that invoke a function, use <a>DeleteEventSourceMapping</a>. For Amazon Web Services services and resources that invoke your function directly, delete the trigger in the service where you originally configured it.</p>"
+      "documentation":"<p>Deletes a Lambda function. To delete a specific function version, use the <code>Qualifier</code> parameter. Otherwise, all versions and aliases are deleted. This doesn't require the user to have explicit permissions for <a>DeleteAlias</a>.</p> <note> <p>A deleted Lambda function cannot be recovered. Ensure that you specify the correct function name and version before deleting.</p> </note> <p>To delete Lambda event source mappings that invoke a function, use <a>DeleteEventSourceMapping</a>. For Amazon Web Services services and resources that invoke your function directly, delete the trigger in the service where you originally configured it.</p>",
+      "idempotent":true
     },
     "DeleteFunctionCodeSigningConfig":{
       "name":"DeleteFunctionCodeSigningConfig",
@@ -222,11 +229,11 @@
       "input":{"shape":"DeleteFunctionCodeSigningConfigRequest"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"CodeSigningConfigNotFoundException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"CodeSigningConfigNotFoundException"}
       ],
       "documentation":"<p>Removes the code signing configuration from the function.</p>"
     },
@@ -239,11 +246,11 @@
       },
       "input":{"shape":"DeleteFunctionConcurrencyRequest"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Removes a concurrent execution limit from a function.</p>"
     },
@@ -256,11 +263,11 @@
       },
       "input":{"shape":"DeleteFunctionEventInvokeConfigRequest"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Deletes the configuration for asynchronous invocation for a function, version, or alias.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>"
     },
@@ -274,9 +281,9 @@
       "input":{"shape":"DeleteFunctionUrlConfigRequest"},
       "errors":[
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Deletes a Lambda function URL. When you delete a function URL, you can't recover it. Creating a new function URL results in a different URL address.</p>"
     },
@@ -292,7 +299,8 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Deletes a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. Deleted versions can no longer be viewed or added to functions. To avoid breaking functions, a copy of the version remains in Lambda until no functions refer to it.</p>"
+      "documentation":"<p>Deletes a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. Deleted versions can no longer be viewed or added to functions. To avoid breaking functions, a copy of the version remains in Lambda until no functions refer to it.</p>",
+      "idempotent":true
     },
     "DeleteProvisionedConcurrencyConfig":{
       "name":"DeleteProvisionedConcurrencyConfig",
@@ -305,26 +313,28 @@
       "errors":[
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes the provisioned concurrency configuration for a function.</p>"
+      "documentation":"<p>Deletes the provisioned concurrency configuration for a function.</p>",
+      "idempotent":true
     },
     "GetAccountSettings":{
       "name":"GetAccountSettings",
       "http":{
         "method":"GET",
-        "requestUri":"/2016-08-19/account-settings/",
+        "requestUri":"/2016-08-19/account-settings",
         "responseCode":200
       },
       "input":{"shape":"GetAccountSettingsRequest"},
       "output":{"shape":"GetAccountSettingsResponse"},
       "errors":[
-        {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves details about your account's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/limits.html\">limits</a> and usage in an Amazon Web Services Region.</p>"
+      "documentation":"<p>Retrieves details about your account's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/limits.html\">limits</a> and usage in an Amazon Web Services Region.</p>",
+      "readonly":true
     },
     "GetAlias":{
       "name":"GetAlias",
@@ -336,12 +346,13 @@
       "input":{"shape":"GetAliasRequest"},
       "output":{"shape":"AliasConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns details about a Lambda function <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a>.</p>"
+      "documentation":"<p>Returns details about a Lambda function <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a>.</p>",
+      "readonly":true
     },
     "GetCodeSigningConfig":{
       "name":"GetCodeSigningConfig",
@@ -353,11 +364,12 @@
       "input":{"shape":"GetCodeSigningConfigRequest"},
       "output":{"shape":"GetCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about the specified code signing configuration.</p>"
+      "documentation":"<p>Returns information about the specified code signing configuration.</p>",
+      "readonly":true
     },
     "GetEventSourceMapping":{
       "name":"GetEventSourceMapping",
@@ -369,12 +381,13 @@
       "input":{"shape":"GetEventSourceMappingRequest"},
       "output":{"shape":"EventSourceMappingConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns details about an event source mapping. You can get the identifier of a mapping from the output of <a>ListEventSourceMappings</a>.</p>"
+      "documentation":"<p>Returns details about an event source mapping. You can get the identifier of a mapping from the output of <a>ListEventSourceMappings</a>.</p>",
+      "readonly":true
     },
     "GetFunction":{
       "name":"GetFunction",
@@ -386,12 +399,13 @@
       "input":{"shape":"GetFunctionRequest"},
       "output":{"shape":"GetFunctionResponse"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about the function or function version, with a link to download the deployment package that's valid for 10 minutes. If you specify a function version, only details that are specific to that version are returned.</p>"
+      "documentation":"<p>Returns information about the function or function version, with a link to download the deployment package that's valid for 10 minutes. If you specify a function version, only details that are specific to that version are returned.</p>",
+      "readonly":true
     },
     "GetFunctionCodeSigningConfig":{
       "name":"GetFunctionCodeSigningConfig",
@@ -404,11 +418,12 @@
       "output":{"shape":"GetFunctionCodeSigningConfigResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the code signing configuration for the specified function.</p>"
+      "documentation":"<p>Returns the code signing configuration for the specified function.</p>",
+      "readonly":true
     },
     "GetFunctionConcurrency":{
       "name":"GetFunctionConcurrency",
@@ -421,11 +436,12 @@
       "output":{"shape":"GetFunctionConcurrencyResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns details about the reserved concurrency configuration for a function. To set a concurrency limit for a function, use <a>PutFunctionConcurrency</a>.</p>"
+      "documentation":"<p>Returns details about the reserved concurrency configuration for a function. To set a concurrency limit for a function, use <a>PutFunctionConcurrency</a>.</p>",
+      "readonly":true
     },
     "GetFunctionConfiguration":{
       "name":"GetFunctionConfiguration",
@@ -437,12 +453,13 @@
       "input":{"shape":"GetFunctionConfigurationRequest"},
       "output":{"shape":"FunctionConfiguration"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the version-specific settings of a Lambda function or version. The output includes only options that can vary between versions of a function. To modify these settings, use <a>UpdateFunctionConfiguration</a>.</p> <p>To get all of a function's details, including function-level settings, use <a>GetFunction</a>.</p>"
+      "documentation":"<p>Returns the version-specific settings of a Lambda function or version. The output includes only options that can vary between versions of a function. To modify these settings, use <a>UpdateFunctionConfiguration</a>.</p> <p>To get all of a function's details, including function-level settings, use <a>GetFunction</a>.</p>",
+      "readonly":true
     },
     "GetFunctionEventInvokeConfig":{
       "name":"GetFunctionEventInvokeConfig",
@@ -454,12 +471,13 @@
       "input":{"shape":"GetFunctionEventInvokeConfigRequest"},
       "output":{"shape":"FunctionEventInvokeConfig"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the configuration for asynchronous invocation for a function, version, or alias.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>"
+      "documentation":"<p>Retrieves the configuration for asynchronous invocation for a function, version, or alias.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>",
+      "readonly":true
     },
     "GetFunctionRecursionConfig":{
       "name":"GetFunctionRecursionConfig",
@@ -472,11 +490,12 @@
       "output":{"shape":"GetFunctionRecursionConfigResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns your function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-recursion.html\">recursive loop detection</a> configuration. </p>"
+      "documentation":"<p>Returns your function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-recursion.html\">recursive loop detection</a> configuration. </p>",
+      "readonly":true
     },
     "GetFunctionUrlConfig":{
       "name":"GetFunctionUrlConfig",
@@ -490,10 +509,11 @@
       "errors":[
         {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns details about a Lambda function URL.</p>"
+      "documentation":"<p>Returns details about a Lambda function URL.</p>",
+      "readonly":true
     },
     "GetLayerVersion":{
       "name":"GetLayerVersion",
@@ -505,12 +525,13 @@
       "input":{"shape":"GetLayerVersionRequest"},
       "output":{"shape":"GetLayerVersionResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>, with a link to download the layer archive that's valid for 10 minutes.</p>"
+      "documentation":"<p>Returns information about a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>, with a link to download the layer archive that's valid for 10 minutes.</p>",
+      "readonly":true
     },
     "GetLayerVersionByArn":{
       "name":"GetLayerVersionByArn",
@@ -522,12 +543,13 @@
       "input":{"shape":"GetLayerVersionByArnRequest"},
       "output":{"shape":"GetLayerVersionResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns information about a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>, with a link to download the layer archive that's valid for 10 minutes.</p>"
+      "documentation":"<p>Returns information about a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>, with a link to download the layer archive that's valid for 10 minutes.</p>",
+      "readonly":true
     },
     "GetLayerVersionPolicy":{
       "name":"GetLayerVersionPolicy",
@@ -539,12 +561,13 @@
       "input":{"shape":"GetLayerVersionPolicyRequest"},
       "output":{"shape":"GetLayerVersionPolicyResponse"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the permission policy for a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. For more information, see <a>AddLayerVersionPermission</a>.</p>"
+      "documentation":"<p>Returns the permission policy for a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. For more information, see <a>AddLayerVersionPermission</a>.</p>",
+      "readonly":true
     },
     "GetPolicy":{
       "name":"GetPolicy",
@@ -556,12 +579,13 @@
       "input":{"shape":"GetPolicyRequest"},
       "output":{"shape":"GetPolicyResponse"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns the <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html\">resource-based IAM policy</a> for a function, version, or alias.</p>"
+      "documentation":"<p>Returns the <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html\">resource-based IAM policy</a> for a function, version, or alias.</p>",
+      "readonly":true
     },
     "GetProvisionedConcurrencyConfig":{
       "name":"GetProvisionedConcurrencyConfig",
@@ -574,12 +598,13 @@
       "output":{"shape":"GetProvisionedConcurrencyConfigResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"},
+        {"shape":"ProvisionedConcurrencyConfigNotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"ProvisionedConcurrencyConfigNotFoundException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the provisioned concurrency configuration for a function's alias or version.</p>"
+      "documentation":"<p>Retrieves the provisioned concurrency configuration for a function's alias or version.</p>",
+      "readonly":true
     },
     "GetRuntimeManagementConfig":{
       "name":"GetRuntimeManagementConfig",
@@ -591,113 +616,118 @@
       "input":{"shape":"GetRuntimeManagementConfigRequest"},
       "output":{"shape":"GetRuntimeManagementConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the runtime management configuration for a function's version. If the runtime update mode is <b>Manual</b>, this includes the ARN of the runtime version and the runtime update mode. If the runtime update mode is <b>Auto</b> or <b>Function update</b>, this includes the runtime update mode and <code>null</code> is returned for the ARN. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html\">Runtime updates</a>.</p>"
+      "documentation":"<p>Retrieves the runtime management configuration for a function's version. If the runtime update mode is <b>Manual</b>, this includes the ARN of the runtime version and the runtime update mode. If the runtime update mode is <b>Auto</b> or <b>Function update</b>, this includes the runtime update mode and <code>null</code> is returned for the ARN. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html\">Runtime updates</a>.</p>",
+      "readonly":true
     },
     "Invoke":{
       "name":"Invoke",
       "http":{
         "method":"POST",
-        "requestUri":"/2015-03-31/functions/{FunctionName}/invocations"
+        "requestUri":"/2015-03-31/functions/{FunctionName}/invocations",
+        "responseCode":200
       },
       "input":{"shape":"InvocationRequest"},
       "output":{"shape":"InvocationResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestContentException"},
+        {"shape":"ResourceNotReadyException"},
+        {"shape":"InvalidSecurityGroupIDException"},
+        {"shape":"SnapStartTimeoutException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"EC2ThrottledException"},
+        {"shape":"EFSMountConnectivityException"},
+        {"shape":"SubnetIPAddressLimitReachedException"},
+        {"shape":"KMSAccessDeniedException"},
         {"shape":"RequestTooLargeException"},
+        {"shape":"KMSDisabledException"},
         {"shape":"UnsupportedMediaTypeException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
+        {"shape":"SerializedRequestEntityTooLargeException"},
+        {"shape":"InvalidRuntimeException"},
         {"shape":"EC2UnexpectedException"},
-        {"shape":"SubnetIPAddressLimitReachedException"},
-        {"shape":"ENILimitReachedException"},
-        {"shape":"EFSMountConnectivityException"},
-        {"shape":"EFSMountFailureException"},
-        {"shape":"EFSMountTimeoutException"},
-        {"shape":"EFSIOException"},
-        {"shape":"SnapStartException"},
-        {"shape":"SnapStartTimeoutException"},
-        {"shape":"SnapStartNotReadyException"},
-        {"shape":"EC2ThrottledException"},
-        {"shape":"EC2AccessDeniedException"},
         {"shape":"InvalidSubnetIDException"},
-        {"shape":"InvalidSecurityGroupIDException"},
-        {"shape":"InvalidZipFileException"},
-        {"shape":"KMSDisabledException"},
-        {"shape":"KMSInvalidStateException"},
-        {"shape":"KMSAccessDeniedException"},
         {"shape":"KMSNotFoundException"},
-        {"shape":"InvalidRuntimeException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"EC2AccessDeniedException"},
+        {"shape":"EFSIOException"},
+        {"shape":"KMSInvalidStateException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotReadyException"},
-        {"shape":"RecursiveInvocationException"}
+        {"shape":"ENILimitReachedException"},
+        {"shape":"SnapStartNotReadyException"},
+        {"shape":"ServiceException"},
+        {"shape":"SnapStartException"},
+        {"shape":"RecursiveInvocationException"},
+        {"shape":"EFSMountTimeoutException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestContentException"},
+        {"shape":"InvalidZipFileException"},
+        {"shape":"EFSMountFailureException"}
       ],
-      "documentation":"<p>Invokes a Lambda function. You can invoke a function synchronously (and wait for the response), or asynchronously. By default, Lambda invokes your function synchronously (i.e. the<code>InvocationType</code> is <code>RequestResponse</code>). To invoke a function asynchronously, set <code>InvocationType</code> to <code>Event</code>. Lambda passes the <code>ClientContext</code> object to your function for synchronous invocations only.</p> <p>For <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html\">synchronous invocation</a>, details about the function response, including errors, are included in the response body and headers. For either invocation type, you can find more information in the <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html\">execution log</a> and <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html\">trace</a>.</p> <p>When an error occurs, your function may be invoked multiple times. Retry behavior varies by error type, client, event source, and invocation type. For example, if you invoke a function asynchronously and it returns an error, Lambda executes the function up to two more times. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html\">Error handling and automatic retries in Lambda</a>.</p> <p>For <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html\">asynchronous invocation</a>, Lambda adds events to a queue before sending them to your function. If your function does not have enough capacity to keep up with the queue, events may be lost. Occasionally, your function may receive the same event multiple times, even if no error occurs. To retain events that were not processed, configure your function with a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq\">dead-letter queue</a>.</p> <p>The status code in the API response doesn't reflect function errors. Error codes are reserved for errors that prevent your function from executing, such as permissions errors, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">quota</a> errors, or issues with your function's code and configuration. For example, Lambda returns <code>TooManyRequestsException</code> if running the function would cause you to exceed a concurrency limit at either the account level (<code>ConcurrentInvocationLimitExceeded</code>) or function level (<code>ReservedFunctionConcurrentInvocationLimitExceeded</code>).</p> <p>For functions with a long timeout, your client might disconnect during synchronous invocation while it waits for a response. Configure your HTTP client, SDK, firewall, proxy, or operating system to allow for long connections with timeout or keep-alive settings.</p> <p>This operation requires permission for the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html\">lambda:InvokeFunction</a> action. For details on how to set up permissions for cross-account invocations, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke\">Granting function access to other accounts</a>.</p>"
+      "documentation":"<p>Invokes a Lambda function. You can invoke a function synchronously (and wait for the response), or asynchronously. By default, Lambda invokes your function synchronously (i.e. the<code>InvocationType</code> is <code>RequestResponse</code>). To invoke a function asynchronously, set <code>InvocationType</code> to <code>Event</code>. Lambda passes the <code>ClientContext</code> object to your function for synchronous invocations only.</p> <p>For synchronous invocations, the maximum payload size is 6 MB. For asynchronous invocations, the maximum payload size is 1 MB.</p> <p>For <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html\">synchronous invocation</a>, details about the function response, including errors, are included in the response body and headers. For either invocation type, you can find more information in the <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions.html\">execution log</a> and <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html\">trace</a>.</p> <p>When an error occurs, your function may be invoked multiple times. Retry behavior varies by error type, client, event source, and invocation type. For example, if you invoke a function asynchronously and it returns an error, Lambda executes the function up to two more times. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html\">Error handling and automatic retries in Lambda</a>.</p> <p>For <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html\">asynchronous invocation</a>, Lambda adds events to a queue before sending them to your function. If your function does not have enough capacity to keep up with the queue, events may be lost. Occasionally, your function may receive the same event multiple times, even if no error occurs. To retain events that were not processed, configure your function with a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq\">dead-letter queue</a>.</p> <p>The status code in the API response doesn't reflect function errors. Error codes are reserved for errors that prevent your function from executing, such as permissions errors, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">quota</a> errors, or issues with your function's code and configuration. For example, Lambda returns <code>TooManyRequestsException</code> if running the function would cause you to exceed a concurrency limit at either the account level (<code>ConcurrentInvocationLimitExceeded</code>) or function level (<code>ReservedFunctionConcurrentInvocationLimitExceeded</code>).</p> <p>For functions with a long timeout, your client might disconnect during synchronous invocation while it waits for a response. Configure your HTTP client, SDK, firewall, proxy, or operating system to allow for long connections with timeout or keep-alive settings.</p> <p>This operation requires permission for the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html\">lambda:InvokeFunction</a> action. For details on how to set up permissions for cross-account invocations, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke\">Granting function access to other accounts</a>.</p>"
     },
     "InvokeAsync":{
       "name":"InvokeAsync",
       "http":{
         "method":"POST",
-        "requestUri":"/2014-11-13/functions/{FunctionName}/invoke-async/",
+        "requestUri":"/2014-11-13/functions/{FunctionName}/invoke-async",
         "responseCode":202
       },
       "input":{"shape":"InvokeAsyncRequest"},
       "output":{"shape":"InvokeAsyncResponse"},
       "errors":[
+        {"shape":"InvalidRuntimeException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestContentException"},
-        {"shape":"InvalidRuntimeException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"InvalidRequestContentException"}
       ],
-      "documentation":"<important> <p>For asynchronous function invocation, use <a>Invoke</a>.</p> </important> <p>Invokes a function asynchronously.</p> <note> <p>If you do use the InvokeAsync action, note that it doesn't support the use of X-Ray active tracing. Trace ID is not propagated to the function, even if X-Ray active tracing is turned on.</p> </note>",
+      "documentation":"<p><note> <p>For asynchronous function invocation, use <a>Invoke</a>.</p> </note> <p>Invokes a function asynchronously.</p> <note> <p>The payload limit is 256KB. For larger payloads, for up to 1MB, use <a>Invoke</a>.</p> </note> <note> <p>If you do use the InvokeAsync action, note that it doesn't support the use of X-Ray active tracing. Trace ID is not propagated to the function, even if X-Ray active tracing is turned on.</p> </note></p>",
       "deprecated":true
     },
     "InvokeWithResponseStream":{
       "name":"InvokeWithResponseStream",
       "http":{
         "method":"POST",
-        "requestUri":"/2021-11-15/functions/{FunctionName}/response-streaming-invocations"
+        "requestUri":"/2021-11-15/functions/{FunctionName}/response-streaming-invocations",
+        "responseCode":200
       },
       "input":{"shape":"InvokeWithResponseStreamRequest"},
       "output":{"shape":"InvokeWithResponseStreamResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidRequestContentException"},
+        {"shape":"ResourceNotReadyException"},
+        {"shape":"InvalidSecurityGroupIDException"},
+        {"shape":"SnapStartTimeoutException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"EC2ThrottledException"},
+        {"shape":"EFSMountConnectivityException"},
+        {"shape":"SubnetIPAddressLimitReachedException"},
+        {"shape":"KMSAccessDeniedException"},
         {"shape":"RequestTooLargeException"},
+        {"shape":"KMSDisabledException"},
         {"shape":"UnsupportedMediaTypeException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
+        {"shape":"SerializedRequestEntityTooLargeException"},
+        {"shape":"InvalidRuntimeException"},
         {"shape":"EC2UnexpectedException"},
-        {"shape":"SubnetIPAddressLimitReachedException"},
-        {"shape":"ENILimitReachedException"},
-        {"shape":"EFSMountConnectivityException"},
-        {"shape":"EFSMountFailureException"},
-        {"shape":"EFSMountTimeoutException"},
-        {"shape":"EFSIOException"},
-        {"shape":"SnapStartException"},
-        {"shape":"SnapStartTimeoutException"},
-        {"shape":"SnapStartNotReadyException"},
-        {"shape":"EC2ThrottledException"},
-        {"shape":"EC2AccessDeniedException"},
         {"shape":"InvalidSubnetIDException"},
-        {"shape":"InvalidSecurityGroupIDException"},
-        {"shape":"InvalidZipFileException"},
-        {"shape":"KMSDisabledException"},
-        {"shape":"KMSInvalidStateException"},
-        {"shape":"KMSAccessDeniedException"},
         {"shape":"KMSNotFoundException"},
-        {"shape":"InvalidRuntimeException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"EC2AccessDeniedException"},
+        {"shape":"EFSIOException"},
+        {"shape":"KMSInvalidStateException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotReadyException"},
-        {"shape":"RecursiveInvocationException"}
+        {"shape":"ENILimitReachedException"},
+        {"shape":"SnapStartNotReadyException"},
+        {"shape":"ServiceException"},
+        {"shape":"SnapStartException"},
+        {"shape":"RecursiveInvocationException"},
+        {"shape":"EFSMountTimeoutException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestContentException"},
+        {"shape":"InvalidZipFileException"},
+        {"shape":"EFSMountFailureException"}
       ],
       "documentation":"<p>Configure your Lambda functions to stream response payloads back to clients. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-response-streaming.html\">Configuring a Lambda function to stream responses</a>.</p> <p>This operation requires permission for the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awslambda.html\">lambda:InvokeFunction</a> action. For details on how to set up permissions for cross-account invocations, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-xaccountinvoke\">Granting function access to other accounts</a>.</p>"
     },
@@ -711,44 +741,47 @@
       "input":{"shape":"ListAliasesRequest"},
       "output":{"shape":"ListAliasesResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">aliases</a> for a Lambda function.</p>"
+      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">aliases</a> for a Lambda function.</p>",
+      "readonly":true
     },
     "ListCodeSigningConfigs":{
       "name":"ListCodeSigningConfigs",
       "http":{
         "method":"GET",
-        "requestUri":"/2020-04-22/code-signing-configs/",
+        "requestUri":"/2020-04-22/code-signing-configs",
         "responseCode":200
       },
       "input":{"shape":"ListCodeSigningConfigsRequest"},
       "output":{"shape":"ListCodeSigningConfigsResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"}
       ],
-      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuring-codesigning.html\">code signing configurations</a>. A request returns up to 10,000 configurations per call. You can use the <code>MaxItems</code> parameter to return fewer configurations per call. </p>"
+      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuring-codesigning.html\">code signing configurations</a>. A request returns up to 10,000 configurations per call. You can use the <code>MaxItems</code> parameter to return fewer configurations per call. </p>",
+      "readonly":true
     },
     "ListEventSourceMappings":{
       "name":"ListEventSourceMappings",
       "http":{
         "method":"GET",
-        "requestUri":"/2015-03-31/event-source-mappings/",
+        "requestUri":"/2015-03-31/event-source-mappings",
         "responseCode":200
       },
       "input":{"shape":"ListEventSourceMappingsRequest"},
       "output":{"shape":"ListEventSourceMappingsResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists event source mappings. Specify an <code>EventSourceArn</code> to show only event source mappings for a single event source.</p>"
+      "documentation":"<p>Lists event source mappings. Specify an <code>EventSourceArn</code> to show only event source mappings for a single event source.</p>",
+      "readonly":true
     },
     "ListFunctionEventInvokeConfigs":{
       "name":"ListFunctionEventInvokeConfigs",
@@ -761,11 +794,12 @@
       "output":{"shape":"ListFunctionEventInvokeConfigsResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves a list of configurations for asynchronous invocation for a function.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>"
+      "documentation":"<p>Retrieves a list of configurations for asynchronous invocation for a function.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>",
+      "readonly":true
     },
     "ListFunctionUrlConfigs":{
       "name":"ListFunctionUrlConfigs",
@@ -779,26 +813,28 @@
       "errors":[
         {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of Lambda function URLs for the specified function.</p>"
+      "documentation":"<p>Returns a list of Lambda function URLs for the specified function.</p>",
+      "readonly":true
     },
     "ListFunctions":{
       "name":"ListFunctions",
       "http":{
         "method":"GET",
-        "requestUri":"/2015-03-31/functions/",
+        "requestUri":"/2015-03-31/functions",
         "responseCode":200
       },
       "input":{"shape":"ListFunctionsRequest"},
       "output":{"shape":"ListFunctionsResponse"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"}
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Returns a list of Lambda functions, with the version-specific configuration of each. Lambda returns up to 50 functions per call.</p> <p>Set <code>FunctionVersion</code> to <code>ALL</code> to include all published versions of each function in addition to the unpublished version.</p> <note> <p>The <code>ListFunctions</code> operation returns a subset of the <a>FunctionConfiguration</a> fields. To get the additional fields (State, StateReasonCode, StateReason, LastUpdateStatus, LastUpdateStatusReason, LastUpdateStatusReasonCode, RuntimeVersionConfig) for a function or version, use <a>GetFunction</a>.</p> </note>"
+      "documentation":"<p>Returns a list of Lambda functions, with the version-specific configuration of each. Lambda returns up to 50 functions per call.</p> <p>Set <code>FunctionVersion</code> to <code>ALL</code> to include all published versions of each function in addition to the unpublished version.</p> <note> <p>The <code>ListFunctions</code> operation returns a subset of the <a>FunctionConfiguration</a> fields. To get the additional fields (State, StateReasonCode, StateReason, LastUpdateStatus, LastUpdateStatusReason, LastUpdateStatusReasonCode, RuntimeVersionConfig) for a function or version, use <a>GetFunction</a>.</p> </note>",
+      "readonly":true
     },
     "ListFunctionsByCodeSigningConfig":{
       "name":"ListFunctionsByCodeSigningConfig",
@@ -810,11 +846,12 @@
       "input":{"shape":"ListFunctionsByCodeSigningConfigRequest"},
       "output":{"shape":"ListFunctionsByCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>List the functions that use the specified code signing configuration. You can use this method prior to deleting a code signing configuration, to verify that no functions are using it.</p>"
+      "documentation":"<p>List the functions that use the specified code signing configuration. You can use this method prior to deleting a code signing configuration, to verify that no functions are using it.</p>",
+      "readonly":true
     },
     "ListLayerVersions":{
       "name":"ListLayerVersions",
@@ -826,12 +863,13 @@
       "input":{"shape":"ListLayerVersionsRequest"},
       "output":{"shape":"ListLayerVersionsResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists the versions of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. Versions that have been deleted aren't listed. Specify a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html\">runtime identifier</a> to list only versions that indicate that they're compatible with that runtime. Specify a compatible architecture to include only layer versions that are compatible with that architecture.</p>"
+      "documentation":"<p>Lists the versions of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. Versions that have been deleted aren't listed. Specify a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html\">runtime identifier</a> to list only versions that indicate that they're compatible with that runtime. Specify a compatible architecture to include only layer versions that are compatible with that architecture.</p>",
+      "readonly":true
     },
     "ListLayers":{
       "name":"ListLayers",
@@ -843,11 +881,12 @@
       "input":{"shape":"ListLayersRequest"},
       "output":{"shape":"ListLayersResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html\">Lambda layers</a> and shows information about the latest version of each. Specify a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html\">runtime identifier</a> to list only layers that indicate that they're compatible with that runtime. Specify a compatible architecture to include only layers that are compatible with that <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html\">instruction set architecture</a>.</p>"
+      "documentation":"<p>Lists <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html\">Lambda layers</a> and shows information about the latest version of each. Specify a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html\">runtime identifier</a> to list only layers that indicate that they're compatible with that runtime. Specify a compatible architecture to include only layers that are compatible with that <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html\">instruction set architecture</a>.</p>",
+      "readonly":true
     },
     "ListProvisionedConcurrencyConfigs":{
       "name":"ListProvisionedConcurrencyConfigs",
@@ -860,27 +899,30 @@
       "output":{"shape":"ListProvisionedConcurrencyConfigsResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves a list of provisioned concurrency configurations for a function.</p>"
+      "documentation":"<p>Retrieves a list of provisioned concurrency configurations for a function.</p>",
+      "readonly":true
     },
     "ListTags":{
       "name":"ListTags",
       "http":{
         "method":"GET",
-        "requestUri":"/2017-03-31/tags/{ARN}"
+        "requestUri":"/2017-03-31/tags/{Resource}",
+        "responseCode":200
       },
       "input":{"shape":"ListTagsRequest"},
       "output":{"shape":"ListTagsResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a function, event source mapping, or code signing configuration's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/tagging.html\">tags</a>. You can also view function tags with <a>GetFunction</a>.</p>"
+      "documentation":"<p>Returns a function, event source mapping, or code signing configuration's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/tagging.html\">tags</a>. You can also view function tags with <a>GetFunction</a>.</p>",
+      "readonly":true
     },
     "ListVersionsByFunction":{
       "name":"ListVersionsByFunction",
@@ -892,12 +934,13 @@
       "input":{"shape":"ListVersionsByFunctionRequest"},
       "output":{"shape":"ListVersionsByFunctionResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html\">versions</a>, with the version-specific configuration of each. Lambda returns up to 50 versions per call.</p>"
+      "documentation":"<p>Returns a list of <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html\">versions</a>, with the version-specific configuration of each. Lambda returns up to 50 versions per call.</p>",
+      "readonly":true
     },
     "PublishLayerVersion":{
       "name":"PublishLayerVersion",
@@ -909,10 +952,10 @@
       "input":{"shape":"PublishLayerVersionRequest"},
       "output":{"shape":"PublishLayerVersionResponse"},
       "errors":[
+        {"shape":"InvalidParameterValueException"},
         {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"CodeStorageExceededException"}
       ],
       "documentation":"<p>Creates an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a> from a ZIP archive. Each time you call <code>PublishLayerVersion</code> with the same layer name, a new version is created.</p> <p>Add layers to your function with <a>CreateFunction</a> or <a>UpdateFunctionConfiguration</a>.</p>"
@@ -927,13 +970,13 @@
       "input":{"shape":"PublishVersionRequest"},
       "output":{"shape":"FunctionConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"CodeStorageExceededException"},
-        {"shape":"PreconditionFailedException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Creates a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html\">version</a> from the current code and configuration of a function. Use versions to create a snapshot of your function code and configuration that doesn't change.</p> <p>Lambda doesn't publish a version if the function's configuration and code haven't changed since the last version. Use <a>UpdateFunctionCode</a> or <a>UpdateFunctionConfiguration</a> to update the function before publishing a version.</p> <p>Clients can invoke versions directly or with an alias. To create an alias, use <a>CreateAlias</a>.</p>"
     },
@@ -947,11 +990,11 @@
       "input":{"shape":"PutFunctionCodeSigningConfigRequest"},
       "output":{"shape":"PutFunctionCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"CodeSigningConfigNotFoundException"}
       ],
       "documentation":"<p>Update the code signing configuration for the function. Changes to the code signing configuration take effect the next time a user tries to deploy a code package to the function. </p>"
@@ -966,11 +1009,11 @@
       "input":{"shape":"PutFunctionConcurrencyRequest"},
       "output":{"shape":"Concurrency"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Sets the maximum number of simultaneous executions for a function, and reserves capacity for that concurrency level.</p> <p>Concurrency settings apply to the function as a whole, including all published versions and the unpublished version. Reserving concurrency both ensures that your function has capacity to process the specified number of events simultaneously, and prevents it from scaling beyond that level. Use <a>GetFunction</a> to see the current setting for a function.</p> <p>Use <a>GetAccountSettings</a> to see your Regional concurrency limit. You can reserve concurrency for as many functions as you like, as long as you leave at least 100 simultaneous executions unreserved for functions that aren't configured with a per-function limit. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html\">Lambda function scaling</a>.</p>"
     },
@@ -984,11 +1027,11 @@
       "input":{"shape":"PutFunctionEventInvokeConfigRequest"},
       "output":{"shape":"FunctionEventInvokeConfig"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Configures options for <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html\">asynchronous invocation</a> on a function, version, or alias. If a configuration already exists for a function, version, or alias, this operation overwrites it. If you exclude any settings, they are removed. To set one option without affecting existing settings for other options, use <a>UpdateFunctionEventInvokeConfig</a>.</p> <p>By default, Lambda retries an asynchronous invocation twice if the function returns an error. It retains events in a queue for up to six hours. When an event fails all processing attempts or stays in the asynchronous invocation queue for too long, Lambda discards it. To retain discarded events, configure a dead-letter queue with <a>UpdateFunctionConfiguration</a>.</p> <p>To send an invocation record to a queue, topic, S3 bucket, function, or event bus, specify a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations\">destination</a>. You can configure separate destinations for successful invocations (on-success) and events that fail all processing attempts (on-failure). You can configure destinations in addition to or instead of a dead-letter queue.</p> <note> <p>S3 buckets are supported only for on-failure destinations. To retain records of successful invocations, use another destination type.</p> </note>"
     },
@@ -1004,9 +1047,9 @@
       "errors":[
         {"shape":"InvalidParameterValueException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Sets your function's <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-recursion.html\">recursive loop detection</a> configuration.</p> <p>When you configure a Lambda function to output to the same service or resource that invokes the function, it's possible to create an infinite recursive loop. For example, a Lambda function might write a message to an Amazon Simple Queue Service (Amazon SQS) queue, which then invokes the same function. This invocation causes the function to write another message to the queue, which in turn invokes the function again.</p> <p>Lambda can detect certain types of recursive loops shortly after they occur. When Lambda detects a recursive loop and your function's recursive loop detection configuration is set to <code>Terminate</code>, it stops your function being invoked and notifies you.</p>"
     },
@@ -1021,12 +1064,13 @@
       "output":{"shape":"PutProvisionedConcurrencyConfigResponse"},
       "errors":[
         {"shape":"InvalidParameterValueException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceException"}
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Adds a provisioned concurrency configuration to a function's alias or version.</p>"
+      "documentation":"<p>Adds a provisioned concurrency configuration to a function's alias or version.</p>",
+      "idempotent":true
     },
     "PutRuntimeManagementConfig":{
       "name":"PutRuntimeManagementConfig",
@@ -1038,11 +1082,11 @@
       "input":{"shape":"PutRuntimeManagementConfigRequest"},
       "output":{"shape":"PutRuntimeManagementConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceConflictException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Sets the runtime management configuration for a function's version. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html\">Runtime updates</a>.</p>"
     },
@@ -1055,10 +1099,10 @@
       },
       "input":{"shape":"RemoveLayerVersionPermissionRequest"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Removes a statement from the permissions policy for a version of an <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html\">Lambda layer</a>. For more information, see <a>AddLayerVersionPermission</a>.</p>"
@@ -1072,10 +1116,10 @@
       },
       "input":{"shape":"RemovePermissionRequest"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Revokes function-use permission from an Amazon Web Services service or another Amazon Web Services account. You can get the ID of the statement from the output of <a>GetPolicy</a>.</p>"
@@ -1084,16 +1128,16 @@
       "name":"TagResource",
       "http":{
         "method":"POST",
-        "requestUri":"/2017-03-31/tags/{ARN}",
+        "requestUri":"/2017-03-31/tags/{Resource}",
         "responseCode":204
       },
       "input":{"shape":"TagResourceRequest"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Adds <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/tagging.html\">tags</a> to a function, event source mapping, or code signing configuration.</p>"
     },
@@ -1101,16 +1145,16 @@
       "name":"UntagResource",
       "http":{
         "method":"DELETE",
-        "requestUri":"/2017-03-31/tags/{ARN}",
+        "requestUri":"/2017-03-31/tags/{Resource}",
         "responseCode":204
       },
       "input":{"shape":"UntagResourceRequest"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Removes <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/tagging.html\">tags</a> from a function, event source mapping, or code signing configuration.</p>"
     },
@@ -1124,12 +1168,12 @@
       "input":{"shape":"UpdateAliasRequest"},
       "output":{"shape":"AliasConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"PreconditionFailedException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Updates the configuration of a Lambda function <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html\">alias</a>.</p>"
     },
@@ -1143,8 +1187,8 @@
       "input":{"shape":"UpdateCodeSigningConfigRequest"},
       "output":{"shape":"UpdateCodeSigningConfigResponse"},
       "errors":[
-        {"shape":"ServiceException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ServiceException"},
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Update the code signing configuration. Changes to the code signing configuration take effect the next time a user tries to deploy a code package to the function. </p>"
@@ -1159,14 +1203,14 @@
       "input":{"shape":"UpdateEventSourceMappingRequest"},
       "output":{"shape":"EventSourceMappingConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceInUseException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"ResourceInUseException"}
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Updates an event source mapping. You can change the function that Lambda invokes, or pause invocation and resume later from the same location.</p> <p>For details about how to configure different event sources, see the following topics. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-dynamodb-eventsourcemapping\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-eventsourcemapping\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/kafka-smaa.html\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html\"> Amazon DocumentDB</a> </p> </li> </ul> <p>The following error handling options are available only for DynamoDB and Kinesis event sources:</p> <ul> <li> <p> <code>BisectBatchOnFunctionError</code> – If the function returns an error, split the batch in two and retry.</p> </li> <li> <p> <code>MaximumRecordAgeInSeconds</code> – Discard records older than the specified age. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires</p> </li> <li> <p> <code>MaximumRetryAttempts</code> – Discard records after the specified number of retries. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires.</p> </li> <li> <p> <code>ParallelizationFactor</code> – Process multiple batches from each shard concurrently.</p> </li> </ul> <p>For stream sources (DynamoDB, Kinesis, Amazon MSK, and self-managed Apache Kafka), the following option is also available:</p> <ul> <li> <p> <code>DestinationConfig</code> – Send discarded records to an Amazon SQS queue, Amazon SNS topic, or Amazon S3 bucket.</p> </li> </ul> <p>For information about which configuration parameters apply to each event source, see the following topics.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-ddb-params\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-params\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-params\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-params\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-parms\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-kafka-parms\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html#docdb-configuration\"> Amazon DocumentDB</a> </p> </li> </ul>"
+      "documentation":"<p>Updates an event source mapping. You can change the function that Lambda invokes, or pause invocation and resume later from the same location.</p> <p>For details about how to configure different event sources, see the following topics. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-dynamodb-eventsourcemapping\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-eventsourcemapping\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-eventsourcemapping\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/kafka-smaa.html\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html\"> Amazon DocumentDB</a> </p> </li> </ul> <p>The following error handling options are available only for DynamoDB and Kinesis event sources:</p> <ul> <li> <p> <code>BisectBatchOnFunctionError</code> – If the function returns an error, split the batch in two and retry.</p> </li> <li> <p> <code>MaximumRecordAgeInSeconds</code> – Discard records older than the specified age. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires</p> </li> <li> <p> <code>MaximumRetryAttempts</code> – Discard records after the specified number of retries. The default value is infinite (-1). When set to infinite (-1), failed records are retried until the record expires.</p> </li> <li> <p> <code>ParallelizationFactor</code> – Process multiple batches from each shard concurrently.</p> </li> </ul> <p>For stream sources (DynamoDB, Kinesis, Amazon MSK, and self-managed Apache Kafka), the following option is also available:</p> <ul> <li> <p> <code>OnFailure</code> – Send discarded records to an Amazon SQS queue, Amazon SNS topic, or Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations\">Adding a destination</a>.</p> </li> </ul> <p>For information about which configuration parameters apply to each event source, see the following topics.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html#services-ddb-params\"> Amazon DynamoDB Streams</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html#services-kinesis-params\"> Amazon Kinesis</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#services-sqs-params\"> Amazon SQS</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-mq.html#services-mq-params\"> Amazon MQ and RabbitMQ</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-parms\"> Amazon MSK</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-kafka-parms\"> Apache Kafka</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html#docdb-configuration\"> Amazon DocumentDB</a> </p> </li> </ul>"
     },
     "UpdateFunctionCode":{
       "name":"UpdateFunctionCode",
@@ -1178,16 +1222,16 @@
       "input":{"shape":"UpdateFunctionCodeRequest"},
       "output":{"shape":"FunctionConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"CodeStorageExceededException"},
-        {"shape":"PreconditionFailedException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"CodeVerificationFailedException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
         {"shape":"InvalidCodeSignatureException"},
-        {"shape":"CodeSigningConfigNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"CodeVerificationFailedException"},
+        {"shape":"CodeSigningConfigNotFoundException"},
+        {"shape":"CodeStorageExceededException"},
+        {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Updates a Lambda function's code. If code signing is enabled for the function, the code package must be signed by a trusted publisher. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html\">Configuring code signing for Lambda</a>.</p> <p>If the function's package type is <code>Image</code>, then you must specify the code package in <code>ImageUri</code> as the URI of a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-images.html\">container image</a> in the Amazon ECR registry.</p> <p>If the function's package type is <code>Zip</code>, then you must specify the deployment package as a <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html#gettingstarted-package-zip\">.zip file archive</a>. Enter the Amazon S3 bucket and key of the code .zip file location. You can also provide the function code inline using the <code>ZipFile</code> field.</p> <p>The code in the deployment package must be compatible with the target instruction set architecture of the function (<code>x86-64</code> or <code>arm64</code>).</p> <p>The function's code is locked when you publish a version. You can't modify the code of a published version, only the unpublished version.</p> <note> <p>For a function defined as a container image, Lambda resolves the image tag to an image digest. In Amazon ECR, if you update the image tag to a new image, Lambda does not automatically update the function.</p> </note>"
     },
@@ -1201,15 +1245,15 @@
       "input":{"shape":"UpdateFunctionConfigurationRequest"},
       "output":{"shape":"FunctionConfiguration"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
-        {"shape":"TooManyRequestsException"},
         {"shape":"ResourceConflictException"},
-        {"shape":"PreconditionFailedException"},
-        {"shape":"CodeVerificationFailedException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
         {"shape":"InvalidCodeSignatureException"},
-        {"shape":"CodeSigningConfigNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"CodeVerificationFailedException"},
+        {"shape":"CodeSigningConfigNotFoundException"},
+        {"shape":"PreconditionFailedException"}
       ],
       "documentation":"<p>Modify the version-specific settings of a Lambda function.</p> <p>When you update a function, Lambda provisions an instance of the function and its supporting resources. If your function connects to a VPC, this process can take a minute. During this time, you can't modify the function, but you can still invoke it. The <code>LastUpdateStatus</code>, <code>LastUpdateStatusReason</code>, and <code>LastUpdateStatusReasonCode</code> fields in the response from <a>GetFunctionConfiguration</a> indicate when the update is complete and the function is processing events with the new configuration. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html\">Lambda function states</a>.</p> <p>These settings can vary between versions of a function and are locked when you publish a version. You can't modify the configuration of a published version, only the unpublished version.</p> <p>To configure function concurrency, use <a>PutFunctionConcurrency</a>. To grant invoke permissions to an Amazon Web Services account or Amazon Web Services service, use <a>AddPermission</a>.</p>"
     },
@@ -1223,11 +1267,11 @@
       "input":{"shape":"UpdateFunctionEventInvokeConfigRequest"},
       "output":{"shape":"FunctionEventInvokeConfig"},
       "errors":[
-        {"shape":"ServiceException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
+        {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceConflictException"}
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Updates the configuration for asynchronous invocation for a function, version, or alias.</p> <p>To configure options for asynchronous invocation, use <a>PutFunctionEventInvokeConfig</a>.</p>"
     },
@@ -1241,11 +1285,11 @@
       "input":{"shape":"UpdateFunctionUrlConfigRequest"},
       "output":{"shape":"UpdateFunctionUrlConfigResponse"},
       "errors":[
-        {"shape":"ResourceConflictException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceConflictException"},
         {"shape":"ServiceException"},
-        {"shape":"TooManyRequestsException"}
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Updates the configuration for a Lambda function URL.</p>"
     }
@@ -1409,7 +1453,11 @@
         },
         "FunctionUrlAuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
+        },
+        "InvokedViaFunctionUrl":{
+          "shape":"InvokedViaFunctionUrl",
+          "documentation":"<p>Restricts the <code>lambda:InvokeFunction</code> action to function URL calls. When set to <code>true</code>, this prevents the principal from invoking the function by any means other than the function URL. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         }
       }
     },
@@ -1483,16 +1531,21 @@
       },
       "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-traffic-shifting-using-aliases.html\">traffic-shifting</a> configuration of a Lambda function alias.</p>"
     },
-    "AllowCredentials":{"type":"boolean"},
+    "AllowCredentials":{
+      "type":"boolean",
+      "box":true
+    },
     "AllowMethodsList":{
       "type":"list",
       "member":{"shape":"Method"},
-      "max":6
+      "max":6,
+      "min":0
     },
     "AllowOriginsList":{
       "type":"list",
       "member":{"shape":"Origin"},
-      "max":100
+      "max":100,
+      "min":0
     },
     "AllowedPublishers":{
       "type":"structure",
@@ -1511,6 +1564,10 @@
         "ConsumerGroupId":{
           "shape":"URI",
           "documentation":"<p>The identifier for the Kafka consumer group to join. The consumer group ID must be unique among all your Kafka event sources. After creating a Kafka event source mapping with the consumer group ID specified, you cannot update this value. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-consumer-group-id\">Customizable consumer group ID</a>.</p>"
+        },
+        "SchemaRegistryConfig":{
+          "shape":"KafkaSchemaRegistryConfig",
+          "documentation":"<p>Specific configuration settings for a Kafka schema registry.</p>"
         }
       },
       "documentation":"<p>Specific configuration settings for an Amazon Managed Streaming for Apache Kafka (Amazon MSK) event source.</p>"
@@ -1545,10 +1602,14 @@
     },
     "BatchSize":{
       "type":"integer",
+      "box":true,
       "max":10000,
       "min":1
     },
-    "BisectBatchOnFunctionError":{"type":"boolean"},
+    "BisectBatchOnFunctionError":{
+      "type":"boolean",
+      "box":true
+    },
     "Blob":{
       "type":"blob",
       "sensitive":true
@@ -1598,6 +1659,7 @@
     "CodeSigningConfigArn":{
       "type":"string",
       "max":200,
+      "min":0,
       "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:code-signing-config:csc-[a-z0-9]{17}"
     },
     "CodeSigningConfigId":{
@@ -1615,7 +1677,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The specified code signing configuration does not exist.</p>",
-      "error":{"httpStatusCode":404},
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
       "exception":true
     },
     "CodeSigningPolicies":{
@@ -1623,7 +1688,7 @@
       "members":{
         "UntrustedArtifactOnDeployment":{
           "shape":"CodeSigningPolicy",
-          "documentation":"<p>Code signing configuration policy for deployment validation failure. If you set the policy to <code>Enforce</code>, Lambda blocks the deployment request if signature validation checks fail. If you set the policy to <code>Warn</code>, Lambda allows the deployment and creates a CloudWatch log. </p> <p>Default value: <code>Warn</code> </p>"
+          "documentation":"<p>Code signing configuration policy for deployment validation failure. If you set the policy to <code>Enforce</code>, Lambda blocks the deployment request if signature validation checks fail. If you set the policy to <code>Warn</code>, Lambda allows the deployment and issues a new Amazon CloudWatch metric (<code>SignatureValidationErrors</code>) and also stores the warning in the CloudTrail log.</p> <p>Default value: <code>Warn</code> </p>"
         }
       },
       "documentation":"<p>Code signing configuration <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html#config-codesigning-policies\">policies</a> specify the validation failure action for signature mismatch or expiry.</p>"
@@ -1645,7 +1710,10 @@
         "message":{"shape":"String"}
       },
       "documentation":"<p>Your Amazon Web Services account has exceeded its maximum total code size. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">Lambda quotas</a>.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "CodeVerificationFailedException":{
@@ -1655,7 +1723,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The code signature failed one or more of the validation checks for signature mismatch or expiry, and the code signing policy is set to ENFORCE. Lambda blocks the deployment.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "CollectionName":{
@@ -1667,12 +1738,14 @@
     "CompatibleArchitectures":{
       "type":"list",
       "member":{"shape":"Architecture"},
-      "max":2
+      "max":2,
+      "min":0
     },
     "CompatibleRuntimes":{
       "type":"list",
       "member":{"shape":"Runtime"},
-      "max":15
+      "max":15,
+      "min":0
     },
     "Concurrency":{
       "type":"structure",
@@ -1887,7 +1960,7 @@
         },
         "ProvisionedPollerConfig":{
           "shape":"ProvisionedPollerConfig",
-          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The Provisioned Mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">Provisioned Mode</a>.</p>"
+          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The provisioned mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">provisioned mode</a>.</p>"
         }
       }
     },
@@ -2018,7 +2091,7 @@
         },
         "AuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         },
         "Cors":{
           "shape":"Cors",
@@ -2026,7 +2099,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       }
     },
@@ -2049,7 +2122,7 @@
         },
         "AuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         },
         "Cors":{
           "shape":"Cors",
@@ -2061,7 +2134,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       }
     },
@@ -2080,7 +2153,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of an Amazon SQS queue or Amazon SNS topic.</p>"
         }
       },
-      "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq\">dead-letter queue</a> for failed asynchronous invocations.</p>"
+      "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-dlq\">dead-letter queue</a> for failed asynchronous invocations.</p>"
     },
     "DeleteAliasRequest":{
       "type":"structure",
@@ -2117,8 +2190,7 @@
     },
     "DeleteCodeSigningConfigResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEventSourceMappingRequest":{
       "type":"structure",
@@ -2261,21 +2333,21 @@
       "type":"string",
       "max":350,
       "min":0,
-      "pattern":"^$|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)"
+      "pattern":"$|arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\\-])+:([a-z]{2}(-gov)?-[a-z]+-\\d{1})?:(\\d{12})?:(.*)"
     },
     "DestinationConfig":{
       "type":"structure",
       "members":{
         "OnSuccess":{
           "shape":"OnSuccess",
-          "documentation":"<p>The destination configuration for successful invocations.</p>"
+          "documentation":"<p>The destination configuration for successful invocations. Not supported in <code>CreateEventSourceMapping</code> or <code>UpdateEventSourceMapping</code>.</p>"
         },
         "OnFailure":{
           "shape":"OnFailure",
           "documentation":"<p>The destination configuration for failed invocations.</p>"
         }
       },
-      "documentation":"<p>A configuration object that specifies the destination of an event after Lambda processes it.</p>"
+      "documentation":"<p>A configuration object that specifies the destination of an event after Lambda processes it. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations\">Adding a destination</a>.</p>"
     },
     "DocumentDBEventSourceConfig":{
       "type":"structure",
@@ -2303,7 +2375,8 @@
       },
       "documentation":"<p>Need additional permissions to configure VPC settings.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "EC2ThrottledException":{
       "type":"structure",
@@ -2313,7 +2386,8 @@
       },
       "documentation":"<p>Amazon EC2 throttled Lambda during Lambda function initialization using the execution role provided for the function.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "EC2UnexpectedException":{
       "type":"structure",
@@ -2324,7 +2398,8 @@
       },
       "documentation":"<p>Lambda received an unexpected Amazon EC2 client exception while setting up for the Lambda function.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "EFSIOException":{
       "type":"structure",
@@ -2333,7 +2408,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>An error occurred when reading from or writing to a connected file system.</p>",
-      "error":{"httpStatusCode":410},
+      "error":{
+        "httpStatusCode":410,
+        "senderFault":true
+      },
       "exception":true
     },
     "EFSMountConnectivityException":{
@@ -2343,7 +2421,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The Lambda function couldn't make a network connection to the configured file system.</p>",
-      "error":{"httpStatusCode":408},
+      "error":{
+        "httpStatusCode":408,
+        "senderFault":true
+      },
       "exception":true
     },
     "EFSMountFailureException":{
@@ -2353,7 +2434,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The Lambda function couldn't mount the configured file system due to a permission or configuration issue.</p>",
-      "error":{"httpStatusCode":403},
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
       "exception":true
     },
     "EFSMountTimeoutException":{
@@ -2363,7 +2447,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The Lambda function made a network connection to the configured file system, but the mount operation timed out.</p>",
-      "error":{"httpStatusCode":408},
+      "error":{
+        "httpStatusCode":408,
+        "senderFault":true
+      },
       "exception":true
     },
     "ENILimitReachedException":{
@@ -2374,9 +2461,13 @@
       },
       "documentation":"<p>Lambda couldn't create an elastic network interface in the VPC, specified as part of Lambda function configuration, because the limit for network interfaces has been reached. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">Lambda quotas</a>.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
+    },
+    "Enabled":{
+      "type":"boolean",
+      "box":true
     },
-    "Enabled":{"type":"boolean"},
     "EndPointType":{
       "type":"string",
       "enum":["KAFKA_BOOTSTRAP_SERVERS"]
@@ -2385,7 +2476,7 @@
       "type":"string",
       "max":300,
       "min":1,
-      "pattern":"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}"
+      "pattern":"(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9]):[0-9]{1,5}"
     },
     "EndpointLists":{
       "type":"list",
@@ -2466,6 +2557,7 @@
     },
     "EphemeralStorageSize":{
       "type":"integer",
+      "box":true,
       "max":10240,
       "min":512
     },
@@ -2520,7 +2612,7 @@
         },
         "LastProcessingResult":{
           "shape":"String",
-          "documentation":"<p>The result of the last Lambda invocation of your function.</p>"
+          "documentation":"<p>The result of the event source mapping's last processing attempt.</p>"
         },
         "State":{
           "shape":"String",
@@ -2604,7 +2696,7 @@
         },
         "ProvisionedPollerConfig":{
           "shape":"ProvisionedPollerConfig",
-          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The Provisioned Mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">Provisioned Mode</a>.</p>"
+          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The provisioned mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">provisioned mode</a>.</p>"
         }
       },
       "documentation":"<p>A mapping between an Amazon Web Services resource and a Lambda function. For details, see <a>CreateEventSourceMapping</a>.</p>"
@@ -2650,6 +2742,7 @@
     "FileSystemArn":{
       "type":"string",
       "max":200,
+      "min":0,
       "pattern":"arn:aws[a-zA-Z-]*:elasticfilesystem:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:access-point/fsap-[a-f0-9]{17}"
     },
     "FileSystemConfig":{
@@ -2673,7 +2766,8 @@
     "FileSystemConfigList":{
       "type":"list",
       "member":{"shape":"FileSystemConfig"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "Filter":{
       "type":"structure",
@@ -3043,7 +3137,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Details about a Lambda function URL.</p>"
@@ -3064,8 +3158,7 @@
     },
     "GetAccountSettingsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAccountSettingsResponse":{
       "type":"structure",
@@ -3323,7 +3416,7 @@
         },
         "AuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         },
         "Cors":{
           "shape":"Cors",
@@ -3339,7 +3432,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       }
     },
@@ -3570,17 +3663,20 @@
     "Handler":{
       "type":"string",
       "max":128,
+      "min":0,
       "pattern":"[^\\s]+"
     },
     "Header":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "HeadersList":{
       "type":"list",
       "member":{"shape":"Header"},
-      "max":100
+      "max":100,
+      "min":0
     },
     "HttpStatus":{"type":"integer"},
     "ImageConfig":{
@@ -3637,7 +3733,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The code signature failed the integrity check. If the integrity check fails, then Lambda blocks deployment, even if the code signing policy is set to WARN.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "InvalidParameterValueException":{
@@ -3653,7 +3752,10 @@
         }
       },
       "documentation":"<p>One of the parameters in the request is not valid.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "InvalidRequestContentException":{
@@ -3668,8 +3770,11 @@
           "documentation":"<p>The exception message.</p>"
         }
       },
-      "documentation":"<p>The request body could not be parsed as JSON.</p>",
-      "error":{"httpStatusCode":400},
+      "documentation":"<p>The request body could not be parsed as JSON, or a request header is invalid. For example, the 'x-amzn-RequestId' header is not a valid UUID string.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "InvalidRuntimeException":{
@@ -3680,7 +3785,8 @@
       },
       "documentation":"<p>The runtime or runtime version specified is not supported.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "InvalidSecurityGroupIDException":{
       "type":"structure",
@@ -3690,7 +3796,8 @@
       },
       "documentation":"<p>The security group ID provided in the Lambda function VPC configuration is not valid.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "InvalidSubnetIDException":{
       "type":"structure",
@@ -3700,7 +3807,8 @@
       },
       "documentation":"<p>The subnet ID provided in the Lambda function VPC configuration is not valid.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "InvalidZipFileException":{
       "type":"structure",
@@ -3710,7 +3818,8 @@
       },
       "documentation":"<p>Lambda could not unzip the deployment package.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "InvocationRequest":{
       "type":"structure",
@@ -3742,7 +3851,7 @@
         },
         "Payload":{
           "shape":"Blob",
-          "documentation":"<p>The JSON that you want to provide to your Lambda function as input.</p> <p>You can enter the JSON directly. For example, <code>--payload '{ \"key\": \"value\" }'</code>. You can also specify a file path. For example, <code>--payload file://payload.json</code>.</p>"
+          "documentation":"<p>The JSON that you want to provide to your Lambda function as input. The maximum payload size is 6 MB for synchronous invocations and 1 MB for asynchronous invocations.</p> <p>You can enter the JSON directly. For example, <code>--payload '{ \"key\": \"value\" }'</code>. You can also specify a file path. For example, <code>--payload file://payload.json</code>.</p>"
         },
         "Qualifier":{
           "shape":"Qualifier",
@@ -3948,6 +4057,10 @@
       "documentation":"<p>An object that includes a chunk of the response payload. When the stream has ended, Lambda includes a <code>InvokeComplete</code> object.</p>",
       "eventstream":true
     },
+    "InvokedViaFunctionUrl":{
+      "type":"boolean",
+      "box":true
+    },
     "KMSAccessDeniedException":{
       "type":"structure",
       "members":{
@@ -3956,7 +4069,8 @@
       },
       "documentation":"<p>Lambda couldn't decrypt the environment variables because KMS access was denied. Check the Lambda function's KMS permissions.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "KMSDisabledException":{
       "type":"structure",
@@ -3966,7 +4080,8 @@
       },
       "documentation":"<p>Lambda couldn't decrypt the environment variables because the KMS key used is disabled. Check the Lambda function's KMS key settings.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "KMSInvalidStateException":{
       "type":"structure",
@@ -3976,7 +4091,8 @@
       },
       "documentation":"<p>Lambda couldn't decrypt the environment variables because the state of the KMS key used is not valid for Decrypt. Check the function's KMS key settings.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "KMSKeyArn":{
       "type":"string",
@@ -3990,7 +4106,77 @@
       },
       "documentation":"<p>Lambda couldn't decrypt the environment variables because the KMS key was not found. Check the function's KMS key settings.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
+    },
+    "KafkaSchemaRegistryAccessConfig":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"KafkaSchemaRegistryAuthType",
+          "documentation":"<p> The type of authentication Lambda uses to access your schema registry. </p>"
+        },
+        "URI":{
+          "shape":"Arn",
+          "documentation":"<p> The URI of the secret (Secrets Manager secret ARN) to authenticate with your schema registry. </p>"
+        }
+      },
+      "documentation":"<p>Specific access configuration settings that tell Lambda how to authenticate with your schema registry.</p> <p>If you're working with an Glue schema registry, don't provide authentication details in this object. Instead, ensure that your execution role has the required permissions for Lambda to access your cluster.</p> <p>If you're working with a Confluent schema registry, choose the authentication method in the <code>Type</code> field, and provide the Secrets Manager secret ARN in the <code>URI</code> field.</p>"
+    },
+    "KafkaSchemaRegistryAccessConfigList":{
+      "type":"list",
+      "member":{"shape":"KafkaSchemaRegistryAccessConfig"}
+    },
+    "KafkaSchemaRegistryAuthType":{
+      "type":"string",
+      "enum":[
+        "BASIC_AUTH",
+        "CLIENT_CERTIFICATE_TLS_AUTH",
+        "SERVER_ROOT_CA_CERTIFICATE"
+      ]
+    },
+    "KafkaSchemaRegistryConfig":{
+      "type":"structure",
+      "members":{
+        "SchemaRegistryURI":{
+          "shape":"SchemaRegistryUri",
+          "documentation":"<p>The URI for your schema registry. The correct URI format depends on the type of schema registry you're using.</p> <ul> <li> <p>For Glue schema registries, use the ARN of the registry.</p> </li> <li> <p>For Confluent schema registries, use the URL of the registry.</p> </li> </ul>"
+        },
+        "EventRecordFormat":{
+          "shape":"SchemaRegistryEventRecordFormat",
+          "documentation":"<p>The record format that Lambda delivers to your function after schema validation.</p> <ul> <li> <p>Choose <code>JSON</code> to have Lambda deliver the record to your function as a standard JSON object.</p> </li> <li> <p>Choose <code>SOURCE</code> to have Lambda deliver the record to your function in its original source format. Lambda removes all schema metadata, such as the schema ID, before sending the record to your function.</p> </li> </ul>"
+        },
+        "AccessConfigs":{
+          "shape":"KafkaSchemaRegistryAccessConfigList",
+          "documentation":"<p>An array of access configuration objects that tell Lambda how to authenticate with your schema registry.</p>"
+        },
+        "SchemaValidationConfigs":{
+          "shape":"KafkaSchemaValidationConfigList",
+          "documentation":"<p>An array of schema validation configuration objects, which tell Lambda the message attributes you want to validate and filter using your schema registry.</p>"
+        }
+      },
+      "documentation":"<p>Specific configuration settings for a Kafka schema registry.</p>"
+    },
+    "KafkaSchemaValidationAttribute":{
+      "type":"string",
+      "enum":[
+        "KEY",
+        "VALUE"
+      ]
+    },
+    "KafkaSchemaValidationConfig":{
+      "type":"structure",
+      "members":{
+        "Attribute":{
+          "shape":"KafkaSchemaValidationAttribute",
+          "documentation":"<p> The attributes you want your schema registry to validate and filter for. If you selected <code>JSON</code> as the <code>EventRecordFormat</code>, Lambda also deserializes the selected message attributes. </p>"
+        }
+      },
+      "documentation":"<p>Specific schema validation configuration settings that tell Lambda the message attributes you want to validate and filter using your schema registry.</p>"
+    },
+    "KafkaSchemaValidationConfigList":{
+      "type":"list",
+      "member":{"shape":"KafkaSchemaValidationConfig"}
     },
     "LastUpdateStatus":{
       "type":"string",
@@ -4068,6 +4254,7 @@
     "LayerPermissionAllowedAction":{
       "type":"string",
       "max":22,
+      "min":0,
       "pattern":"lambda:GetLayerVersion"
     },
     "LayerPermissionAllowedPrincipal":{
@@ -4195,7 +4382,8 @@
     },
     "LicenseInfo":{
       "type":"string",
-      "max":512
+      "max":512,
+      "min":0
     },
     "ListAliasesRequest":{
       "type":"structure",
@@ -4603,7 +4791,7 @@
           "shape":"TaggableResource",
           "documentation":"<p>The resource's Amazon Resource Name (ARN). Note: Lambda does not support adding tags to function aliases or versions.</p>",
           "location":"uri",
-          "locationName":"ARN"
+          "locationName":"Resource"
         }
       }
     },
@@ -4656,7 +4844,8 @@
     "LocalMountPath":{
       "type":"string",
       "max":160,
-      "pattern":"^/mnt/[a-zA-Z0-9-_.]+$"
+      "min":0,
+      "pattern":"/mnt/[a-zA-Z0-9-_.]+"
     },
     "LogFormat":{
       "type":"string",
@@ -4707,81 +4896,97 @@
     },
     "MaxAge":{
       "type":"integer",
+      "box":true,
       "max":86400,
       "min":0
     },
     "MaxFunctionEventInvokeConfigListItems":{
       "type":"integer",
+      "box":true,
       "max":50,
       "min":1
     },
     "MaxItems":{
       "type":"integer",
+      "box":true,
       "max":50,
       "min":1
     },
     "MaxLayerListItems":{
       "type":"integer",
+      "box":true,
       "max":50,
       "min":1
     },
     "MaxListItems":{
       "type":"integer",
+      "box":true,
       "max":10000,
       "min":1
     },
     "MaxProvisionedConcurrencyConfigListItems":{
       "type":"integer",
+      "box":true,
       "max":50,
       "min":1
     },
     "MaximumBatchingWindowInSeconds":{
       "type":"integer",
+      "box":true,
       "max":300,
       "min":0
     },
     "MaximumConcurrency":{
       "type":"integer",
+      "box":true,
       "max":1000,
       "min":2
     },
     "MaximumEventAgeInSeconds":{
       "type":"integer",
+      "box":true,
       "max":21600,
       "min":60
     },
     "MaximumNumberOfPollers":{
       "type":"integer",
+      "box":true,
       "max":2000,
       "min":1
     },
     "MaximumRecordAgeInSeconds":{
       "type":"integer",
+      "box":true,
       "max":604800,
       "min":-1
     },
     "MaximumRetryAttempts":{
       "type":"integer",
+      "box":true,
       "max":2,
       "min":0
     },
     "MaximumRetryAttemptsEventSourceMapping":{
       "type":"integer",
+      "box":true,
       "max":10000,
       "min":-1
     },
     "MemorySize":{
       "type":"integer",
+      "box":true,
       "max":10240,
       "min":128
     },
     "Method":{
       "type":"string",
       "max":6,
+      "min":0,
       "pattern":".*"
     },
     "MinimumNumberOfPollers":{
       "type":"integer",
+      "box":true,
       "max":200,
       "min":1
     },
@@ -4803,32 +5008,37 @@
     },
     "NonNegativeInteger":{
       "type":"integer",
+      "box":true,
       "min":0
     },
-    "NullableBoolean":{"type":"boolean"},
+    "NullableBoolean":{
+      "type":"boolean",
+      "box":true
+    },
     "OnFailure":{
       "type":"structure",
       "members":{
         "Destination":{
           "shape":"DestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the destination resource.</p> <p>To retain records of unsuccessful <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations\">asynchronous invocations</a>, you can configure an Amazon SNS topic, Amazon SQS queue, Amazon S3 bucket, Lambda function, or Amazon EventBridge event bus as the destination.</p> <p>To retain records of failed invocations from <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html\">Kinesis</a>, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html\">DynamoDB</a>, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-smaa-onfailure-destination\">self-managed Kafka</a> or <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-onfailure-destination\">Amazon MSK</a>, you can configure an Amazon SNS topic, Amazon SQS queue, or Amazon S3 bucket as the destination.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the destination resource.</p> <p>To retain records of unsuccessful <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations\">asynchronous invocations</a>, you can configure an Amazon SNS topic, Amazon SQS queue, Amazon S3 bucket, Lambda function, or Amazon EventBridge event bus as the destination.</p> <note> <p>Amazon SNS destinations have a message size limit of 256 KB. If the combined size of the function request and response payload exceeds the limit, Lambda will drop the payload when sending <code>OnFailure</code> event to the destination. For details on this behavior, refer to <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html\">Retaining records of asynchronous invocations</a>.</p> </note> <p>To retain records of failed invocations from <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html\">Kinesis</a>, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html\">DynamoDB</a>, <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka.html#services-smaa-onfailure-destination\">self-managed Kafka</a> or <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-onfailure-destination\">Amazon MSK</a>, you can configure an Amazon SNS topic, Amazon SQS queue, or Amazon S3 bucket as the destination.</p>"
         }
       },
-      "documentation":"<p>A destination for events that failed processing.</p>"
+      "documentation":"<p>A destination for events that failed processing. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html#invocation-async-destinations\">Adding a destination</a>.</p>"
     },
     "OnSuccess":{
       "type":"structure",
       "members":{
         "Destination":{
           "shape":"DestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the destination resource.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the destination resource.</p> <note> <p>Amazon SNS destinations have a message size limit of 256 KB. If the combined size of the function request and response payload exceeds the limit, Lambda will drop the payload when sending <code>OnFailure</code> event to the destination. For details on this behavior, refer to <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async-retain-records.html\">Retaining records of asynchronous invocations</a>.</p> </note>"
         }
       },
-      "documentation":"<p>A destination for events that were processed successfully.</p> <p>To retain records of successful <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations\">asynchronous invocations</a>, you can configure an Amazon SNS topic, Amazon SQS queue, Lambda function, or Amazon EventBridge event bus as the destination.</p>"
+      "documentation":"<p>A destination for events that were processed successfully.</p> <p>To retain records of successful <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations\">asynchronous invocations</a>, you can configure an Amazon SNS topic, Amazon SQS queue, Lambda function, or Amazon EventBridge event bus as the destination.</p> <note> <p> <code>OnSuccess</code> is not supported in <code>CreateEventSourceMapping</code> or <code>UpdateEventSourceMapping</code> requests.</p> </note>"
     },
     "OrganizationId":{
       "type":"string",
       "max":34,
+      "min":0,
       "pattern":"o-[a-z0-9]{10,32}"
     },
     "Origin":{
@@ -4846,6 +5056,7 @@
     },
     "ParallelizationFactor":{
       "type":"integer",
+      "box":true,
       "max":10,
       "min":1
     },
@@ -4862,11 +5073,15 @@
         "message":{"shape":"String"}
       },
       "documentation":"<p>The permissions policy for the resource is too large. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">Lambda quotas</a>.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "PositiveInteger":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "PreconditionFailedException":{
@@ -4882,7 +5097,10 @@
         }
       },
       "documentation":"<p>The RevisionId provided does not match the latest RevisionId for the Lambda function or alias.</p> <ul> <li> <p> <b>For AddPermission and RemovePermission API operations:</b> Call <code>GetPolicy</code> to retrieve the latest RevisionId for your resource.</p> </li> <li> <p> <b>For all other API operations:</b> Call <code>GetFunction</code> or <code>GetAlias</code> to retrieve the latest RevisionId for your resource.</p> </li> </ul>",
-      "error":{"httpStatusCode":412},
+      "error":{
+        "httpStatusCode":412,
+        "senderFault":true
+      },
       "exception":true
     },
     "Principal":{
@@ -4893,7 +5111,7 @@
       "type":"string",
       "max":34,
       "min":12,
-      "pattern":"^o-[a-z0-9]{10,32}$"
+      "pattern":"o-[a-z0-9]{10,32}"
     },
     "ProvisionedConcurrencyConfigList":{
       "type":"list",
@@ -4940,7 +5158,10 @@
         "message":{"shape":"String"}
       },
       "documentation":"<p>The specified configuration does not exist.</p>",
-      "error":{"httpStatusCode":404},
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
       "exception":true
     },
     "ProvisionedConcurrencyStatusEnum":{
@@ -4963,7 +5184,7 @@
           "documentation":"<p>The maximum number of event pollers this event source can scale up to.</p>"
         }
       },
-      "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\"> Provisioned Mode</a> configuration for the event source. Use Provisioned Mode to customize the minimum and maximum number of event pollers for your event source. An event poller is a compute unit that provides approximately 5 MBps of throughput.</p>"
+      "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\"> provisioned mode</a> configuration for the event source. Use Provisioned Mode to customize the minimum and maximum number of event pollers for your event source. An event poller is a compute unit that provides approximately 5 MBps of throughput.</p>"
     },
     "PublishLayerVersionRequest":{
       "type":"structure",
@@ -5314,7 +5535,10 @@
         }
       },
       "documentation":"<p>Lambda has detected your function being invoked in a recursive loop with other Amazon Web Services resources and stopped your function's invocation.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "RecursiveLoop":{
@@ -5398,11 +5622,15 @@
         "message":{"shape":"String"}
       },
       "documentation":"<p>The request payload exceeded the <code>Invoke</code> request body JSON input quota. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html\">Lambda quotas</a>.</p>",
-      "error":{"httpStatusCode":413},
+      "error":{
+        "httpStatusCode":413,
+        "senderFault":true
+      },
       "exception":true
     },
     "ReservedConcurrentExecutions":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ResourceArn":{
@@ -5422,7 +5650,10 @@
         }
       },
       "documentation":"<p>The resource already exists, or another operation is in progress.</p>",
-      "error":{"httpStatusCode":409},
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
       "exception":true
     },
     "ResourceInUseException":{
@@ -5432,7 +5663,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The operation conflicts with the resource's availability. For example, you tried to update an event source mapping in the CREATING state, or you tried to delete an event source mapping currently UPDATING.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "ResourceNotFoundException":{
@@ -5442,7 +5676,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The resource specified in the request does not exist.</p>",
-      "error":{"httpStatusCode":404},
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
       "exception":true
     },
     "ResourceNotReadyException":{
@@ -5459,7 +5696,8 @@
       },
       "documentation":"<p>The function is inactive and its VPC connection is no longer available. Wait for the VPC connection to reestablish and try again.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "ResponseStreamingInvocationType":{
       "type":"string",
@@ -5508,20 +5746,24 @@
         "java17",
         "ruby3.2",
         "ruby3.3",
+        "ruby3.4",
         "python3.11",
         "nodejs20.x",
         "provided.al2023",
         "python3.12",
         "java21",
         "python3.13",
-        "nodejs22.x"
+        "nodejs22.x",
+        "java25",
+        "nodejs24.x",
+        "python3.14"
       ]
     },
     "RuntimeVersionArn":{
       "type":"string",
       "max":2048,
       "min":26,
-      "pattern":"^arn:(aws[a-zA-Z-]*):lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}::runtime:.+$"
+      "pattern":"arn:(aws[a-zA-Z-]*):lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}::runtime:.+"
     },
     "RuntimeVersionConfig":{
       "type":"structure",
@@ -5555,7 +5797,7 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[0-9A-Za-z\\.\\-_]*(?<!\\.)$"
+      "pattern":"[0-9A-Za-z\\.\\-_]*(?<!\\.)"
     },
     "S3Key":{
       "type":"string",
@@ -5577,11 +5819,25 @@
       },
       "documentation":"<p>(Amazon SQS only) The scaling configuration for the event source. To remove the configuration, pass an empty value.</p>"
     },
+    "SchemaRegistryEventRecordFormat":{
+      "type":"string",
+      "enum":[
+        "JSON",
+        "SOURCE"
+      ]
+    },
+    "SchemaRegistryUri":{
+      "type":"string",
+      "max":10000,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-\\/*:_+=.@-]*"
+    },
     "SecurityGroupId":{"type":"string"},
     "SecurityGroupIds":{
       "type":"list",
       "member":{"shape":"SecurityGroupId"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "SelfManagedEventSource":{
       "type":"structure",
@@ -5598,7 +5854,11 @@
       "members":{
         "ConsumerGroupId":{
           "shape":"URI",
-          "documentation":"<p>The identifier for the Kafka consumer group to join. The consumer group ID must be unique among all your Kafka event sources. After creating a Kafka event source mapping with the consumer group ID specified, you cannot update this value. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html#services-msk-consumer-group-id\">Customizable consumer group ID</a>.</p>"
+          "documentation":"<p> The identifier for the Kafka consumer group to join. The consumer group ID must be unique among all your Kafka event sources. After creating a Kafka event source mapping with the consumer group ID specified, you cannot update this value. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-kafka-process.html#services-smaa-topic-add\">Customizable consumer group ID</a>.</p>"
+        },
+        "SchemaRegistryConfig":{
+          "shape":"KafkaSchemaRegistryConfig",
+          "documentation":"<p>Specific configuration settings for a Kafka schema registry.</p>"
         }
       },
       "documentation":"<p>Specific configuration settings for a self-managed Apache Kafka event source.</p>"
@@ -5607,6 +5867,22 @@
       "type":"string",
       "sensitive":true
     },
+    "SerializedRequestEntityTooLargeException":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"String",
+          "documentation":"<p>The error type.</p>"
+        },
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The processed request payload exceeded the <code>Invoke</code> request body size limit for asynchronous invocations. While the event payload may be under 1 MB, the size after internal serialization exceeds the maximum allowed size for asynchronous invocations.</p>",
+      "error":{
+        "httpStatusCode":413,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ServiceException":{
       "type":"structure",
       "members":{
@@ -5615,7 +5891,8 @@
       },
       "documentation":"<p>The Lambda service encountered an internal error.</p>",
       "error":{"httpStatusCode":500},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "SigningProfileVersionArns":{
       "type":"list",
@@ -5647,7 +5924,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>The <code>afterRestore()</code> <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks.html\">runtime hook</a> encountered an error. For more information, check the Amazon CloudWatch logs.</p>",
-      "error":{"httpStatusCode":400},
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
       "exception":true
     },
     "SnapStartNotReadyException":{
@@ -5657,7 +5937,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>Lambda is initializing your function. You can invoke the function when the <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/functions-states.html\">function state</a> becomes <code>Active</code>.</p>",
-      "error":{"httpStatusCode":409},
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
       "exception":true
     },
     "SnapStartOptimizationStatus":{
@@ -5688,7 +5971,10 @@
         "Message":{"shape":"String"}
       },
       "documentation":"<p>Lambda couldn't restore the snapshot within the timeout limit.</p>",
-      "error":{"httpStatusCode":408},
+      "error":{
+        "httpStatusCode":408,
+        "senderFault":true
+      },
       "exception":true
     },
     "SourceAccessConfiguration":{
@@ -5727,6 +6013,7 @@
     "SourceOwner":{
       "type":"string",
       "max":12,
+      "min":0,
       "pattern":"\\d{12}"
     },
     "State":{
@@ -5778,7 +6065,8 @@
     "StringList":{
       "type":"list",
       "member":{"shape":"String"},
-      "max":1500
+      "max":1500,
+      "min":0
     },
     "SubnetIPAddressLimitReachedException":{
       "type":"structure",
@@ -5788,13 +6076,15 @@
       },
       "documentation":"<p>Lambda couldn't set up VPC access for the Lambda function because one or more configured subnets has no available IP addresses.</p>",
       "error":{"httpStatusCode":502},
-      "exception":true
+      "exception":true,
+      "fault":true
     },
     "SubnetId":{"type":"string"},
     "SubnetIds":{
       "type":"list",
       "member":{"shape":"SubnetId"},
-      "max":16
+      "max":16,
+      "min":0
     },
     "SystemLogLevel":{
       "type":"string",
@@ -5820,7 +6110,7 @@
           "shape":"TaggableResource",
           "documentation":"<p>The resource's Amazon Resource Name (ARN).</p>",
           "location":"uri",
-          "locationName":"ARN"
+          "locationName":"Resource"
         },
         "Tags":{
           "shape":"Tags",
@@ -5868,7 +6158,7 @@
       "type":"string",
       "max":1000,
       "min":84,
-      "pattern":"^.*$"
+      "pattern":".*"
     },
     "ThrottleReason":{
       "type":"string",
@@ -5883,6 +6173,7 @@
     },
     "Timeout":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "Timestamp":{"type":"string"},
@@ -5900,14 +6191,17 @@
         "Reason":{"shape":"ThrottleReason"}
       },
       "documentation":"<p>The request throughput limit was exceeded. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#api-requests\">Lambda quotas</a>.</p>",
-      "error":{"httpStatusCode":429},
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
       "exception":true
     },
     "Topic":{
       "type":"string",
       "max":249,
       "min":1,
-      "pattern":"^[^.]([a-zA-Z0-9\\-_.]+)"
+      "pattern":"[^.]([a-zA-Z0-9\\-_.]+)"
     },
     "Topics":{
       "type":"list",
@@ -5944,6 +6238,7 @@
     },
     "TumblingWindowInSeconds":{
       "type":"integer",
+      "box":true,
       "max":900,
       "min":0
     },
@@ -5961,6 +6256,7 @@
     },
     "UnreservedConcurrentExecutions":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "UnsupportedMediaTypeException":{
@@ -5970,7 +6266,10 @@
         "message":{"shape":"String"}
       },
       "documentation":"<p>The content type of the <code>Invoke</code> request body is not JSON.</p>",
-      "error":{"httpStatusCode":415},
+      "error":{
+        "httpStatusCode":415,
+        "senderFault":true
+      },
       "exception":true
     },
     "UntagResourceRequest":{
@@ -5984,7 +6283,7 @@
           "shape":"TaggableResource",
           "documentation":"<p>The resource's Amazon Resource Name (ARN).</p>",
           "location":"uri",
-          "locationName":"ARN"
+          "locationName":"Resource"
         },
         "TagKeys":{
           "shape":"TagKeyList",
@@ -6131,6 +6430,8 @@
           "shape":"ScalingConfig",
           "documentation":"<p>(Amazon SQS only) The scaling configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-max-concurrency\">Configuring maximum concurrency for Amazon SQS event sources</a>.</p>"
         },
+        "AmazonManagedKafkaEventSourceConfig":{"shape":"AmazonManagedKafkaEventSourceConfig"},
+        "SelfManagedKafkaEventSourceConfig":{"shape":"SelfManagedKafkaEventSourceConfig"},
         "DocumentDBEventSourceConfig":{
           "shape":"DocumentDBEventSourceConfig",
           "documentation":"<p>Specific configuration settings for a DocumentDB event source.</p>"
@@ -6145,7 +6446,7 @@
         },
         "ProvisionedPollerConfig":{
           "shape":"ProvisionedPollerConfig",
-          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The Provisioned Mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">Provisioned Mode</a>.</p>"
+          "documentation":"<p>(Amazon MSK and self-managed Apache Kafka only) The provisioned mode configuration for the event source. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-provisioned-mode\">provisioned mode</a>.</p>"
         }
       }
     },
@@ -6333,7 +6634,7 @@
         },
         "AuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         },
         "Cors":{
           "shape":"Cors",
@@ -6341,7 +6642,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       }
     },
@@ -6365,7 +6666,7 @@
         },
         "AuthType":{
           "shape":"FunctionUrlAuthType",
-          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Security and auth model for Lambda function URLs</a>.</p>"
+          "documentation":"<p>The type of authentication that your function URL uses. Set to <code>AWS_IAM</code> if you want to restrict access to authenticated users only. Set to <code>NONE</code> if you want to bypass IAM authentication to create a public endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html\">Control access to Lambda function URLs</a>.</p>"
         },
         "Cors":{
           "shape":"Cors",
@@ -6381,7 +6682,7 @@
         },
         "InvokeMode":{
           "shape":"InvokeMode",
-          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 20 MB, however, you can <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html\">request a quota increase</a>.</p> </li> </ul>"
+          "documentation":"<p>Use one of the following options:</p> <ul> <li> <p> <code>BUFFERED</code> – This is the default option. Lambda invokes your function using the <code>Invoke</code> API operation. Invocation results are available when the payload is complete. The maximum payload size is 6 MB.</p> </li> <li> <p> <code>RESPONSE_STREAM</code> – Your function streams payload results as they become available. Lambda invokes your function using the <code>InvokeWithResponseStream</code> API operation. The maximum response payload size is 200 MB.</p> </li> </ul>"
         }
       }
     },
@@ -6447,8 +6748,9 @@
     },
     "WorkingDirectory":{
       "type":"string",
-      "max":1000
+      "max":1000,
+      "min":0
     }
   },
-  "documentation":"<fullname>Lambda</fullname> <p> <b>Overview</b> </p> <p>Lambda is a compute service that lets you run code without provisioning or managing servers. Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, including server and operating system maintenance, capacity provisioning and automatic scaling, code monitoring and logging. With Lambda, you can run code for virtually any type of application or backend service. For more information about the Lambda service, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/welcome.html\">What is Lambda</a> in the <b>Lambda Developer Guide</b>.</p> <p>The <i>Lambda API Reference</i> provides information about each of the API methods, including details about the parameters in each API request and response. </p> <p/> <p>You can use Software Development Kits (SDKs), Integrated Development Environment (IDE) Toolkits, and command line tools to access the API. For installation instructions, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>. </p> <p>For a list of Region-specific endpoints that Lambda supports, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lambda-service.html\">Lambda endpoints and quotas </a> in the <i>Amazon Web Services General Reference.</i>. </p> <p>When making the API calls, you will need to authenticate your request by providing a signature. Lambda supports signature version 4. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 signing process</a> in the <i>Amazon Web Services General Reference.</i>. </p> <p> <b>CA certificates</b> </p> <p>Because Amazon Web Services SDKs use the CA certificates from your computer, changes to the certificates on the Amazon Web Services servers can cause connection failures when you attempt to use an SDK. You can prevent these failures by keeping your computer's CA certificates and operating system up-to-date. If you encounter this issue in a corporate environment and do not manage your own computer, you might need to ask an administrator to assist with the update process. The following list shows minimum operating system and Java versions:</p> <ul> <li> <p>Microsoft Windows versions that have updates from January 2005 or later installed contain at least one of the required CAs in their trust list. </p> </li> <li> <p>Mac OS X 10.4 with Java for Mac OS X 10.4 Release 5 (February 2007), Mac OS X 10.5 (October 2007), and later versions contain at least one of the required CAs in their trust list. </p> </li> <li> <p>Red Hat Enterprise Linux 5 (March 2007), 6, and 7 and CentOS 5, 6, and 7 all contain at least one of the required CAs in their default trusted CA list. </p> </li> <li> <p>Java 1.4.2_12 (May 2006), 5 Update 2 (March 2005), and all later versions, including Java 6 (December 2006), 7, and 8, contain at least one of the required CAs in their default trusted CA list. </p> </li> </ul> <p>When accessing the Lambda management console or Lambda API endpoints, whether through browsers or programmatically, you will need to ensure your client machines support any of the following CAs: </p> <ul> <li> <p>Amazon Root CA 1</p> </li> <li> <p>Starfield Services Root Certificate Authority - G2</p> </li> <li> <p>Starfield Class 2 Certification Authority</p> </li> </ul> <p>Root certificates from the first two authorities are available from <a href=\"https://www.amazontrust.com/repository/\">Amazon trust services</a>, but keeping your computer up-to-date is the more straightforward solution. To learn more about ACM-provided certificates, see <a href=\"http://aws.amazon.com/certificate-manager/faqs/#certificates\">Amazon Web Services Certificate Manager FAQs.</a> </p>"
+  "documentation":"<p><fullname>Lambda</fullname> <p> <b>Overview</b> </p> <p>Lambda is a compute service that lets you run code without provisioning or managing servers. Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, including server and operating system maintenance, capacity provisioning and automatic scaling, code monitoring and logging. With Lambda, you can run code for virtually any type of application or backend service. For more information about the Lambda service, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/welcome.html\">What is Lambda</a> in the <b>Lambda Developer Guide</b>.</p> <p>The <i>Lambda API Reference</i> provides information about each of the API methods, including details about the parameters in each API request and response. </p> <p/> <p>You can use Software Development Kits (SDKs), Integrated Development Environment (IDE) Toolkits, and command line tools to access the API. For installation instructions, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>. </p> <p>For a list of Region-specific endpoints that Lambda supports, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lambda-service.html\">Lambda endpoints and quotas </a> in the <i>Amazon Web Services General Reference.</i>. </p> <p>When making the API calls, you will need to authenticate your request by providing a signature. Lambda supports signature version 4. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 signing process</a> in the <i>Amazon Web Services General Reference.</i>. </p> <p> <b>CA certificates</b> </p> <p>Because Amazon Web Services SDKs use the CA certificates from your computer, changes to the certificates on the Amazon Web Services servers can cause connection failures when you attempt to use an SDK. You can prevent these failures by keeping your computer's CA certificates and operating system up-to-date. If you encounter this issue in a corporate environment and do not manage your own computer, you might need to ask an administrator to assist with the update process. The following list shows minimum operating system and Java versions:</p> <ul> <li> <p>Microsoft Windows versions that have updates from January 2005 or later installed contain at least one of the required CAs in their trust list. </p> </li> <li> <p>Mac OS X 10.4 with Java for Mac OS X 10.4 Release 5 (February 2007), Mac OS X 10.5 (October 2007), and later versions contain at least one of the required CAs in their trust list. </p> </li> <li> <p>Red Hat Enterprise Linux 5 (March 2007), 6, and 7 and CentOS 5, 6, and 7 all contain at least one of the required CAs in their default trusted CA list. </p> </li> <li> <p>Java 1.4.2_12 (May 2006), 5 Update 2 (March 2005), and all later versions, including Java 6 (December 2006), 7, and 8, contain at least one of the required CAs in their default trusted CA list. </p> </li> </ul> <p>When accessing the Lambda management console or Lambda API endpoints, whether through browsers or programmatically, you will need to ensure your client machines support any of the following CAs: </p> <ul> <li> <p>Amazon Root CA 1</p> </li> <li> <p>Starfield Services Root Certificate Authority - G2</p> </li> <li> <p>Starfield Class 2 Certification Authority</p> </li> </ul> <p>Root certificates from the first two authorities are available from <a href=\"https://www.amazontrust.com/repository/\">Amazon trust services</a>, but keeping your computer up-to-date is the more straightforward solution. To learn more about ACM-provided certificates, see <a href=\"http://aws.amazon.com/certificate-manager/faqs/#certificates\">Amazon Web Services Certificate Manager FAQs.</a> </p></p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/waiters-2.json 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/lambda/2015-03-31/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lambda/2015-03-31/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,152 +1,129 @@
 {
-  "version": 2,
-  "waiters": {
-    "FunctionExists": {
-      "delay": 1,
-      "operation": "GetFunction",
-      "maxAttempts": 20,
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "status",
-          "expected": 200
-        },
-        {
-          "state": "retry",
-          "matcher": "error",
-          "expected": "ResourceNotFoundException"
-        }
-      ]
+  "version" : 2,
+  "waiters" : {
+    "FunctionActive" : {
+      "description" : "Waits for the function's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new function creation.",
+      "delay" : 5,
+      "maxAttempts" : 60,
+      "operation" : "GetFunctionConfiguration",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "success",
+        "expected" : "Active"
+      }, {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "retry",
+        "expected" : "Pending"
+      } ]
     },
-    "FunctionActive": {
-      "delay": 5,
-      "maxAttempts": 60,
-      "operation": "GetFunctionConfiguration",
-      "description": "Waits for the function's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new function creation.",
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Active"
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Failed"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Pending"
-        }
-      ]
+    "FunctionActiveV2" : {
+      "description" : "Waits for the function's State to be Active. This waiter uses GetFunction API. This should be used after new function creation.",
+      "delay" : 1,
+      "maxAttempts" : 300,
+      "operation" : "GetFunction",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Configuration.State",
+        "state" : "success",
+        "expected" : "Active"
+      }, {
+        "matcher" : "path",
+        "argument" : "Configuration.State",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "Configuration.State",
+        "state" : "retry",
+        "expected" : "Pending"
+      } ]
     },
-    "FunctionUpdated": {
-      "delay": 5,
-      "maxAttempts": 60,
-      "operation": "GetFunctionConfiguration",
-      "description": "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunctionConfiguration API. This should be used after function updates.",
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "LastUpdateStatus",
-          "expected": "Successful"
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "LastUpdateStatus",
-          "expected": "Failed"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "LastUpdateStatus",
-          "expected": "InProgress"
-        }
-      ]
+    "FunctionExists" : {
+      "delay" : 1,
+      "maxAttempts" : 20,
+      "operation" : "GetFunction",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : false
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "ResourceNotFoundException"
+      } ]
     },
-    "FunctionActiveV2": {
-      "delay": 1,
-      "maxAttempts": 300,
-      "operation": "GetFunction",
-      "description": "Waits for the function's State to be Active. This waiter uses GetFunction API. This should be used after new function creation.",
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "Configuration.State",
-          "expected": "Active"
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "Configuration.State",
-          "expected": "Failed"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Configuration.State",
-          "expected": "Pending"
-        }
-      ]
+    "FunctionUpdated" : {
+      "description" : "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunctionConfiguration API. This should be used after function updates.",
+      "delay" : 5,
+      "maxAttempts" : 60,
+      "operation" : "GetFunctionConfiguration",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "LastUpdateStatus",
+        "state" : "success",
+        "expected" : "Successful"
+      }, {
+        "matcher" : "path",
+        "argument" : "LastUpdateStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "LastUpdateStatus",
+        "state" : "retry",
+        "expected" : "InProgress"
+      } ]
     },
-    "FunctionUpdatedV2": {
-      "delay": 1,
-      "maxAttempts": 300,
-      "operation": "GetFunction",
-      "description": "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunction API. This should be used after function updates.",
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "Configuration.LastUpdateStatus",
-          "expected": "Successful"
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "Configuration.LastUpdateStatus",
-          "expected": "Failed"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Configuration.LastUpdateStatus",
-          "expected": "InProgress"
-        }
-      ]
+    "FunctionUpdatedV2" : {
+      "description" : "Waits for the function's LastUpdateStatus to be Successful. This waiter uses GetFunction API. This should be used after function updates.",
+      "delay" : 1,
+      "maxAttempts" : 300,
+      "operation" : "GetFunction",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Configuration.LastUpdateStatus",
+        "state" : "success",
+        "expected" : "Successful"
+      }, {
+        "matcher" : "path",
+        "argument" : "Configuration.LastUpdateStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "Configuration.LastUpdateStatus",
+        "state" : "retry",
+        "expected" : "InProgress"
+      } ]
     },
-    "PublishedVersionActive": {
-      "delay": 5,
-      "maxAttempts": 312,
-      "operation": "GetFunctionConfiguration",
-      "description": "Waits for the published version's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new version is published.",
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Active"
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Failed"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "State",
-          "expected": "Pending"
-        }
-      ]
+    "PublishedVersionActive" : {
+      "description" : "Waits for the published version's State to be Active. This waiter uses GetFunctionConfiguration API. This should be used after new version is published.",
+      "delay" : 5,
+      "maxAttempts" : 312,
+      "operation" : "GetFunctionConfiguration",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "success",
+        "expected" : "Active"
+      }, {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "path",
+        "argument" : "State",
+        "state" : "retry",
+        "expected" : "Pending"
+      } ]
     }
   }
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/launch-wizard/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lex-models/2017-04-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws"
                                                     ]
                                                 }
                                             ],
@@ -252,7 +248,6 @@
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -261,7 +256,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -281,14 +277,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -302,7 +300,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -322,7 +319,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,14 +329,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -401,9 +399,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/lex-models/2017-04-19/service-2.json 2.31.35-1/awscli/botocore/data/lex-models/2017-04-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/lex-models/2017-04-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lex-models/2017-04-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"models.lex",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Lex Model Building Service",
     "serviceId":"Lex Model Building Service",
     "signatureVersion":"v4",
     "signingName":"lex",
-    "uid":"lex-models-2017-04-19"
+    "uid":"lex-models-2017-04-19",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateBotVersion":{
@@ -4205,8 +4207,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4237,8 +4238,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UserId":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lex-runtime/2016-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,65 +5,110 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
         {
             "conditions": [
                 {
-                    "fn": "aws.partition",
+                    "fn": "isSet",
                     "argv": [
                         {
-                            "ref": "Region"
+                            "ref": "Endpoint"
                         }
-                    ],
-                    "assign": "PartitionResult"
+                    ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "booleanEquals",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
-                                }
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseDualStack"
+                                },
+                                true
                             ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
                         },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
                         {
-                            "fn": "parseURL",
+                            "ref": "Region"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "aws.partition",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
+                                    "ref": "Region"
                                 }
                             ],
-                            "assign": "url"
+                            "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -75,165 +120,109 @@
                                         },
                                         true
                                     ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
                                 }
                             ],
-                            "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                true,
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
+                                                    ]
+                                                }
                                             ]
                                         }
                                     ],
-                                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                                    "type": "error"
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://runtime.lex-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "endpoint": {
-                                        "url": {
-                                            "ref": "Endpoint"
-                                        },
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
+                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                    "type": "error"
                                 }
-                            ]
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
                             "conditions": [
                                 {
                                     "fn": "booleanEquals",
                                     "argv": [
-                                        true,
-                                        {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsFIPS"
-                                            ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
                                         {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsDualStack"
-                                            ]
-                                        }
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://runtime.lex-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
                                                 },
-                                                "supportsFIPS"
+                                                true
                                             ]
                                         }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "type": "tree",
+                                    ],
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -242,12 +231,13 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws"
                                                     ]
                                                 }
                                             ],
                                             "endpoint": {
-                                                "url": "https://runtime-fips.lex.{Region}.{PartitionResult#dnsSuffix}",
+                                                "url": "https://runtime-fips.lex.{Region}.amazonaws.com",
                                                 "properties": {},
                                                 "headers": {}
                                             },
@@ -258,7 +248,6 @@
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -267,12 +256,13 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
                                             "endpoint": {
-                                                "url": "https://runtime-fips.lex.{Region}.{PartitionResult#dnsSuffix}",
+                                                "url": "https://runtime-fips.lex.{Region}.amazonaws.com",
                                                 "properties": {},
                                                 "headers": {}
                                             },
@@ -287,79 +277,138 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "FIPS is enabled but this partition does not support FIPS",
+                                    "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
-                            "conditions": [],
-                            "error": "FIPS is enabled but this partition does not support FIPS",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                true,
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
+                                                    ]
+                                                }
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://runtime.lex.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
+                                {
+                                    "conditions": [],
+                                    "error": "DualStack is enabled but this partition does not support DualStack",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
+                                    "fn": "stringEquals",
                                     "argv": [
-                                        true,
+                                        "aws",
                                         {
                                             "fn": "getAttr",
                                             "argv": [
                                                 {
                                                     "ref": "PartitionResult"
                                                 },
-                                                "supportsDualStack"
+                                                "name"
                                             ]
                                         }
                                     ]
                                 }
                             ],
-                            "type": "tree",
-                            "rules": [
+                            "endpoint": {
+                                "url": "https://runtime.lex.{Region}.amazonaws.com",
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        },
+                        {
+                            "conditions": [
                                 {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://runtime.lex.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        "aws-us-gov",
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "name"
+                                            ]
+                                        }
+                                    ]
                                 }
-                            ]
+                            ],
+                            "endpoint": {
+                                "url": "https://runtime.lex.{Region}.amazonaws.com",
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         },
                         {
                             "conditions": [],
-                            "error": "DualStack is enabled but this partition does not support DualStack",
-                            "type": "error"
+                            "endpoint": {
+                                "url": "https://runtime.lex.{Region}.{PartitionResult#dnsSuffix}",
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
-                    ]
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": "https://runtime.lex.{Region}.{PartitionResult#dnsSuffix}",
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "error": "Invalid Configuration: Missing Region",
+            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/lex-runtime/2016-11-28/service-2.json 2.31.35-1/awscli/botocore/data/lex-runtime/2016-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/lex-runtime/2016-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lex-runtime/2016-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"runtime.lex",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Lex Runtime Service",
     "serviceId":"Lex Runtime Service",
     "signatureVersion":"v4",
     "signingName":"lex",
-    "uid":"runtime.lex-2016-11-28"
+    "uid":"runtime.lex-2016-11-28",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DeleteSession":{
@@ -67,7 +69,8 @@
         {"shape":"LoopDetectedException"}
       ],
       "documentation":"<p> Sends user input (text or speech) to Amazon Lex. Clients use this API to send text and audio requests to Amazon Lex at runtime. Amazon Lex interprets the user input using the machine learning model that it built for the bot. </p> <p>The <code>PostContent</code> operation supports audio input at 8kHz and 16kHz. You can use 8kHz audio to achieve higher speech recognition accuracy in telephone audio applications. </p> <p> In response, Amazon Lex returns the next message to convey to the user. Consider the following example messages: </p> <ul> <li> <p> For a user input \"I would like a pizza,\" Amazon Lex might return a response with a message eliciting slot data (for example, <code>PizzaSize</code>): \"What size pizza would you like?\". </p> </li> <li> <p> After the user provides all of the pizza order information, Amazon Lex might return a response with a message to get user confirmation: \"Order the pizza?\". </p> </li> <li> <p> After the user replies \"Yes\" to the confirmation prompt, Amazon Lex might return a conclusion statement: \"Thank you, your cheese pizza has been ordered.\". </p> </li> </ul> <p> Not all Amazon Lex messages require a response from the user. For example, conclusion statements do not require a response. Some messages require only a yes or no response. In addition to the <code>message</code>, Amazon Lex provides additional context about the message in the response that you can use to enhance client behavior, such as displaying the appropriate client user interface. Consider the following examples: </p> <ul> <li> <p> If the message is to elicit slot data, Amazon Lex returns the following context information: </p> <ul> <li> <p> <code>x-amz-lex-dialog-state</code> header set to <code>ElicitSlot</code> </p> </li> <li> <p> <code>x-amz-lex-intent-name</code> header set to the intent name in the current context </p> </li> <li> <p> <code>x-amz-lex-slot-to-elicit</code> header set to the slot name for which the <code>message</code> is eliciting information </p> </li> <li> <p> <code>x-amz-lex-slots</code> header set to a map of slots configured for the intent with their current values </p> </li> </ul> </li> <li> <p> If the message is a confirmation prompt, the <code>x-amz-lex-dialog-state</code> header is set to <code>Confirmation</code> and the <code>x-amz-lex-slot-to-elicit</code> header is omitted. </p> </li> <li> <p> If the message is a clarification prompt configured for the intent, indicating that the user intent is not understood, the <code>x-amz-dialog-state</code> header is set to <code>ElicitIntent</code> and the <code>x-amz-slot-to-elicit</code> header is omitted. </p> </li> </ul> <p> In addition, Amazon Lex also returns your application-specific <code>sessionAttributes</code>. For more information, see <a href=\"https://docs.aws.amazon.com/lex/latest/dg/context-mgmt.html\">Managing Conversation Context</a>. </p>",
-      "authtype":"v4-unsigned-body"
+      "authtype":"v4-unsigned-body",
+      "unsignedPayload":true
     },
     "PostText":{
       "name":"PostText",
diff -pruN 2.23.6-1/awscli/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lexv2-models/2020-08-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lexv2-models/2020-08-07/service-2.json 2.31.35-1/awscli/botocore/data/lexv2-models/2020-08-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/lexv2-models/2020-08-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lexv2-models/2020-08-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -3649,6 +3649,10 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role used to build and run the bot.</p>"
         },
         "dataPrivacy":{"shape":"DataPrivacy"},
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Allows you to configure destinations where error logs will be published during the bot import process.</p>"
+        },
         "idleSessionTTLInSeconds":{
           "shape":"SessionTTL",
           "documentation":"<p>The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot. </p> <p>A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout.</p> <p>You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.</p>"
@@ -5036,6 +5040,10 @@
         "botMembers":{
           "shape":"BotMembers",
           "documentation":"<p>The list of bot members in a network to be created.</p>"
+        },
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Specifies the configuration for error logging during bot creation.</p>"
         }
       }
     },
@@ -5089,6 +5097,10 @@
         "botMembers":{
           "shape":"BotMembers",
           "documentation":"<p>The list of bots in a network that was created.</p>"
+        },
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Specifies configuration settings for delivering error logs to Cloudwatch Logs in an Amazon Lex bot response.</p>"
         }
       }
     },
@@ -5274,6 +5286,10 @@
         "qnAIntentConfiguration":{
           "shape":"QnAIntentConfiguration",
           "documentation":"<p>Specifies the configuration of the built-in <code>Amazon.QnAIntent</code>. The <code>AMAZON.QnAIntent</code> intent is called when Amazon Lex can't determine another intent to invoke. If you specify this field, you can't specify the <code>kendraConfiguration</code> field.</p>"
+        },
+        "qInConnectIntentConfiguration":{
+          "shape":"QInConnectIntentConfiguration",
+          "documentation":"<p>Qinconnect intent configuration details for the create intent request.</p>"
         }
       }
     },
@@ -5351,6 +5367,10 @@
         "qnAIntentConfiguration":{
           "shape":"QnAIntentConfiguration",
           "documentation":"<p>Details about the the configuration of the built-in <code>Amazon.QnAIntent</code>.</p>"
+        },
+        "qInConnectIntentConfiguration":{
+          "shape":"QInConnectIntentConfiguration",
+          "documentation":"<p>Qinconnect intent configuration details for the create intent response.</p>"
         }
       }
     },
@@ -5717,8 +5737,7 @@
     },
     "CreateUploadUrlRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateUploadUrlResponse":{
       "type":"structure",
@@ -6474,8 +6493,7 @@
     },
     "DeleteUtterancesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeBotAliasRequest":{
       "type":"structure",
@@ -6933,6 +6951,10 @@
         "failureReasons":{
           "shape":"FailureReasons",
           "documentation":"<p>If the <code>botStatus</code> is <code>Failed</code>, this contains a list of reasons that the bot couldn't be built.</p>"
+        },
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Contains the configuration for error logging that specifies where and how bot errors are recorded, including destinations like CloudWatch Logs.</p>"
         }
       }
     },
@@ -7290,6 +7312,10 @@
         "qnAIntentConfiguration":{
           "shape":"QnAIntentConfiguration",
           "documentation":"<p>Details about the configuration of the built-in <code>Amazon.QnAIntent</code>.</p>"
+        },
+        "qInConnectIntentConfiguration":{
+          "shape":"QInConnectIntentConfiguration",
+          "documentation":"<p>Qinconnect intent configuration details for the describe intent response.</p>"
         }
       }
     },
@@ -7744,7 +7770,7 @@
     },
     "Description":{
       "type":"string",
-      "max":200,
+      "max":2000,
       "min":0
     },
     "DescriptiveBotBuilderSpecification":{
@@ -7905,6 +7931,17 @@
         "INTERNAL_SERVER_FAILURE"
       ]
     },
+    "ErrorLogSettings":{
+      "type":"structure",
+      "required":["enabled"],
+      "members":{
+        "enabled":{
+          "shape":"BoxedBoolean",
+          "documentation":"<p>Settings parameters for the error logs, when it is enabled.</p>"
+        }
+      },
+      "documentation":"<p>Settings parameters for the error logs, whether it is enabled or disabled.</p>"
+    },
     "ErrorMessage":{"type":"string"},
     "ExactResponseFields":{
       "type":"structure",
@@ -10841,6 +10878,17 @@
       "min":0
     },
     "NextToken":{"type":"string"},
+    "NluImprovementSpecification":{
+      "type":"structure",
+      "required":["enabled"],
+      "members":{
+        "enabled":{
+          "shape":"Enabled",
+          "documentation":"<p>Specifies whether the assisted nlu feature is enabled.</p>"
+        }
+      },
+      "documentation":"<p>Specifies whether the assisted nlu feature is turned on or off.</p>"
+    },
     "NonEmptyString":{
       "type":"string",
       "min":1
@@ -11246,6 +11294,31 @@
       },
       "documentation":"<p>Specifies a list of message groups that Amazon Lex sends to a user to elicit a response.</p>"
     },
+    "QInConnectAssistantARN":{
+      "type":"string",
+      "pattern":"^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}$"
+    },
+    "QInConnectAssistantConfiguration":{
+      "type":"structure",
+      "required":["assistantArn"],
+      "members":{
+        "assistantArn":{
+          "shape":"QInConnectAssistantARN",
+          "documentation":"<p>The assistant Arn details of the Qinconnect assistant configuration.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details of the Qinconnect assistant.</p>"
+    },
+    "QInConnectIntentConfiguration":{
+      "type":"structure",
+      "members":{
+        "qInConnectAssistantConfiguration":{
+          "shape":"QInConnectAssistantConfiguration",
+          "documentation":"<p>The Qinconnect assistant configuration details of the Qinconnect intent.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details of the Qinconnect intent.</p>"
+    },
     "QnAIntentConfiguration":{
       "type":"structure",
       "members":{
@@ -11437,6 +11510,10 @@
         "slotResolutionImprovement":{
           "shape":"SlotResolutionImprovementSpecification",
           "documentation":"<p>An object containing specifications for the assisted slot resolution feature.</p>"
+        },
+        "nluImprovement":{
+          "shape":"NluImprovementSpecification",
+          "documentation":"<p>An object containing specifications for the assisted nlu feature.</p>"
         }
       },
       "documentation":"<p>Contains specifications about the Amazon Lex runtime generative AI capabilities from Amazon Bedrock that you can turn on for your bot.</p>"
@@ -12878,8 +12955,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -13586,8 +13662,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateBotAliasRequest":{
       "type":"structure",
@@ -13904,6 +13979,10 @@
         "botMembers":{
           "shape":"BotMembers",
           "documentation":"<p>The list of bot members in the network associated with the update action.</p>"
+        },
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Allows you to modify how Amazon Lex logs errors during bot interactions, including destinations for error logs and the types of errors to be captured.</p>"
         }
       }
     },
@@ -13953,6 +14032,10 @@
         "botMembers":{
           "shape":"BotMembers",
           "documentation":"<p>The list of bot members in the network that was updated.</p>"
+        },
+        "errorLogSettings":{
+          "shape":"ErrorLogSettings",
+          "documentation":"<p>Settings for managing error logs within the response of an update bot operation.</p>"
         }
       }
     },
@@ -14096,6 +14179,10 @@
         "qnAIntentConfiguration":{
           "shape":"QnAIntentConfiguration",
           "documentation":"<p>Specifies the configuration of the built-in <code>Amazon.QnAIntent</code>. The <code>AMAZON.QnAIntent</code> intent is called when Amazon Lex can't determine another intent to invoke. If you specify this field, you can't specify the <code>kendraConfiguration</code> field.</p>"
+        },
+        "qInConnectIntentConfiguration":{
+          "shape":"QInConnectIntentConfiguration",
+          "documentation":"<p>Qinconnect intent configuration details for the update intent request.</p>"
         }
       }
     },
@@ -14181,6 +14268,10 @@
         "qnAIntentConfiguration":{
           "shape":"QnAIntentConfiguration",
           "documentation":"<p>Details about the configuration of the built-in <code>Amazon.QnAIntent</code>.</p>"
+        },
+        "qInConnectIntentConfiguration":{
+          "shape":"QInConnectIntentConfiguration",
+          "documentation":"<p>Qinconnect intent configuration details for the update intent response.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lexv2-runtime/2020-08-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lexv2-runtime/2020-08-07/service-2.json 2.31.35-1/awscli/botocore/data/lexv2-runtime/2020-08-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/lexv2-runtime/2020-08-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lexv2-runtime/2020-08-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,12 +6,14 @@
     "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocolSettings":{"h2":"eventstream"},
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Lex Runtime V2",
     "serviceFullName":"Amazon Lex Runtime V2",
     "serviceId":"Lex Runtime V2",
     "signatureVersion":"v4",
     "signingName":"lex",
-    "uid":"runtime.lex.v2-2020-08-07"
+    "uid":"runtime.lex.v2-2020-08-07",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DeleteSession":{
@@ -108,7 +110,8 @@
         {"shape":"BadGatewayException"}
       ],
       "documentation":"<p>Sends user input to Amazon Lex V2. You can send text or speech. Clients use this API to send text and audio requests to Amazon Lex V2 at runtime. Amazon Lex V2 interprets the user input using the machine learning model built for the bot.</p> <p>The following request fields must be compressed with gzip and then base64 encoded before you send them to Amazon Lex V2. </p> <ul> <li> <p>requestAttributes</p> </li> <li> <p>sessionState</p> </li> </ul> <p>The following response fields are compressed using gzip and then base64 encoded by Amazon Lex V2. Before you can use these fields, you must decode and decompress them. </p> <ul> <li> <p>inputTranscript</p> </li> <li> <p>interpretations</p> </li> <li> <p>messages</p> </li> <li> <p>requestAttributes</p> </li> <li> <p>sessionState</p> </li> </ul> <p>The example contains a Java application that compresses and encodes a Java object to send to Amazon Lex V2, and a second that decodes and decompresses a response from Amazon Lex V2.</p> <p>If the optional post-fulfillment response is specified, the messages are returned as follows. For more information, see <a href=\"https://docs.aws.amazon.com/lexv2/latest/dg/API_PostFulfillmentStatusSpecification.html\">PostFulfillmentStatusSpecification</a>.</p> <ul> <li> <p> <b>Success message</b> - Returned if the Lambda function completes successfully and the intent state is fulfilled or ready fulfillment if the message is present.</p> </li> <li> <p> <b>Failed message</b> - The failed message is returned if the Lambda function throws an exception or if the Lambda function returns a failed intent state without a message.</p> </li> <li> <p> <b>Timeout message</b> - If you don't configure a timeout message and a timeout, and the Lambda function doesn't return within 30 seconds, the timeout message is returned. If you configure a timeout, the timeout message is returned when the period times out. </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lexv2/latest/dg/streaming-progress.html#progress-complete.html\">Completion message</a>.</p>",
-      "authtype":"v4-unsigned-body"
+      "authtype":"v4-unsigned-body",
+      "unsignedPayload":true
     },
     "StartConversation":{
       "name":"StartConversation",
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager/2018-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager/2018-08-01/service-2.json 2.31.35-1/awscli/botocore/data/license-manager/2018-08-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/license-manager/2018-08-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager/2018-08-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"license-manager",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS License Manager",
     "serviceId":"License Manager",
     "signatureVersion":"v4",
     "targetPrefix":"AWSLicenseManager",
-    "uid":"license-manager-2018-08-01"
+    "uid":"license-manager-2018-08-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptGrant":{
@@ -776,7 +778,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RateLimitExceededException"}
       ],
-      "documentation":"<p>Lists the tags for the specified license configuration.</p>"
+      "documentation":"<p>Lists the tags for the specified resource. For more information about tagging support in License Manager, see the <a href=\"https://docs.aws.amazon.com/license-manager/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p>"
     },
     "ListTokens":{
       "name":"ListTokens",
@@ -847,7 +849,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RateLimitExceededException"}
       ],
-      "documentation":"<p>Adds the specified tags to the specified license configuration.</p>"
+      "documentation":"<p>Adds the specified tags to the specified resource. The following resources support tagging in License Manager:</p> <ul> <li> <p>Licenses</p> </li> <li> <p>Grants</p> </li> <li> <p>License configurations</p> </li> <li> <p>Report generators</p> </li> </ul>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -864,7 +866,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RateLimitExceededException"}
       ],
-      "documentation":"<p>Removes the specified tags from the specified license configuration.</p>"
+      "documentation":"<p>Removes the specified tags from the specified resource.</p>"
     },
     "UpdateLicenseConfiguration":{
       "name":"UpdateLicenseConfiguration",
@@ -880,7 +882,8 @@
         {"shape":"AuthorizationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"RateLimitExceededException"},
-        {"shape":"ResourceLimitExceededException"}
+        {"shape":"ResourceLimitExceededException"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Modifies the attributes of an existing license configuration.</p>"
     },
@@ -919,7 +922,8 @@
         {"shape":"ServerInternalException"},
         {"shape":"AuthorizationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"RateLimitExceededException"}
+        {"shape":"RateLimitExceededException"},
+        {"shape":"ConflictException"}
       ],
       "documentation":"<p>Adds or removes the specified license configurations for the specified Amazon Web Services resource.</p> <p>You can update the license specifications of AMIs, instances, and hosts. You cannot update the license specifications for launch templates and CloudFormation templates, as they send license configurations to the operation that creates the resource.</p>"
     },
@@ -999,13 +1003,13 @@
     "AllowedOperationList":{
       "type":"list",
       "member":{"shape":"AllowedOperation"},
-      "max":7,
+      "max":8,
       "min":1
     },
     "Arn":{
       "type":"string",
       "max":2048,
-      "pattern":"^arn:aws(-(cn|us-gov|iso-b|iso-c|iso-d))?:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+      "pattern":"^arn:aws[a-zA-Z-]*:[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
     },
     "ArnList":{
       "type":"list",
@@ -1067,8 +1071,7 @@
     },
     "CheckInLicenseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CheckoutBorrowLicenseRequest":{
       "type":"structure",
@@ -1314,6 +1317,10 @@
         "AllowedOperations":{
           "shape":"AllowedOperationList",
           "documentation":"<p>Allowed operations for the grant.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags to add to the grant. For more information about tagging support in License Manager, see the <a href=\"https://docs.aws.amazon.com/license-manager/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p>"
         }
       }
     },
@@ -1421,7 +1428,7 @@
         },
         "LicenseRules":{
           "shape":"StringList",
-          "documentation":"<p>License rules. The syntax is #name=value (for example, #allowedTenancy=EC2-DedicatedHost). The available rules vary by dimension, as follows.</p> <ul> <li> <p> <code>Cores</code> dimension: <code>allowedTenancy</code> | <code>licenseAffinityToHost</code> | <code>maximumCores</code> | <code>minimumCores</code> </p> </li> <li> <p> <code>Instances</code> dimension: <code>allowedTenancy</code> | <code>maximumCores</code> | <code>minimumCores</code> | <code>maximumSockets</code> | <code>minimumSockets</code> | <code>maximumVcpus</code> | <code>minimumVcpus</code> </p> </li> <li> <p> <code>Sockets</code> dimension: <code>allowedTenancy</code> | <code>licenseAffinityToHost</code> | <code>maximumSockets</code> | <code>minimumSockets</code> </p> </li> <li> <p> <code>vCPUs</code> dimension: <code>allowedTenancy</code> | <code>honorVcpuOptimization</code> | <code>maximumVcpus</code> | <code>minimumVcpus</code> </p> </li> </ul> <p>The unit for <code>licenseAffinityToHost</code> is days and the range is 1 to 180. The possible values for <code>allowedTenancy</code> are <code>EC2-Default</code>, <code>EC2-DedicatedHost</code>, and <code>EC2-DedicatedInstance</code>. The possible values for <code>honorVcpuOptimization</code> are <code>True</code> and <code>False</code>.</p>"
+          "documentation":"<p>License rules. The syntax is #name=value (for example, #allowedTenancy=EC2-DedicatedHost). The available rules vary by dimension, as follows.</p> <ul> <li> <p> <code>Cores</code> dimension: <code>allowedTenancy</code> | <code>licenseAffinityToHost</code> | <code>maximumCores</code> | <code>minimumCores</code> </p> </li> <li> <p> <code>Instances</code> dimension: <code>allowedTenancy</code> | <code>maximumVcpus</code> | <code>minimumVcpus</code> </p> </li> <li> <p> <code>Sockets</code> dimension: <code>allowedTenancy</code> | <code>licenseAffinityToHost</code> | <code>maximumSockets</code> | <code>minimumSockets</code> </p> </li> <li> <p> <code>vCPUs</code> dimension: <code>allowedTenancy</code> | <code>honorVcpuOptimization</code> | <code>maximumVcpus</code> | <code>minimumVcpus</code> </p> </li> </ul> <p>The unit for <code>licenseAffinityToHost</code> is days and the range is 1 to 180. The possible values for <code>allowedTenancy</code> are <code>EC2-Default</code>, <code>EC2-DedicatedHost</code>, and <code>EC2-DedicatedInstance</code>. The possible values for <code>honorVcpuOptimization</code> are <code>True</code> and <code>False</code>.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -1584,6 +1591,10 @@
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags to add to the license. For more information about tagging support in License Manager, see the <a href=\"https://docs.aws.amazon.com/license-manager/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p>"
         }
       }
     },
@@ -1798,8 +1809,7 @@
     },
     "DeleteLicenseConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLicenseManagerReportGeneratorRequest":{
       "type":"structure",
@@ -1813,8 +1823,7 @@
     },
     "DeleteLicenseManagerReportGeneratorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLicenseRequest":{
       "type":"structure",
@@ -1858,8 +1867,7 @@
     },
     "DeleteTokenResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DigitalSignatureMethod":{
       "type":"string",
@@ -2347,8 +2355,7 @@
     },
     "GetServiceSettingsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetServiceSettingsResponse":{
       "type":"structure",
@@ -2828,6 +2835,10 @@
         "UsageOperation":{
           "shape":"UsageOperation",
           "documentation":"<p>The Usage operation value that corresponds to the license type you are converting your resource from. For more information about which platforms correspond to which usage operation values see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html#billing-info\">Sample data: usage operation by platform </a> </p>"
+        },
+        "ProductCodes":{
+          "shape":"ProductCodeList",
+          "documentation":"<p>Product codes referred to in the license conversion process.</p>"
         }
       },
       "documentation":"<p>Information about a license type conversion task.</p>"
@@ -3115,7 +3126,7 @@
         },
         "Filters":{
           "shape":"Filters",
-          "documentation":"<p>Filters to scope the results. The following filters and logical operators are supported:</p> <ul> <li> <p> <code>licenseCountingType</code> - The dimension for which licenses are counted. Possible values are <code>vCPU</code> | <code>Instance</code> | <code>Core</code> | <code>Socket</code>. Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>enforceLicenseCount</code> - A Boolean value that indicates whether hard license enforcement is used. Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>usagelimitExceeded</code> - A Boolean value that indicates whether the available licenses have been exceeded. Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> </ul>"
+          "documentation":"<p>Filters to scope the results. The following filters and logical operators are supported:</p> <ul> <li> <p> <code>licenseCountingType</code> - The dimension for which licenses are counted. Possible values are <code>vCPU</code> | <code>Instance</code> | <code>Core</code> | <code>Socket</code>.</p> </li> <li> <p> <code>enforceLicenseCount</code> - A Boolean value that indicates whether hard license enforcement is used.</p> </li> <li> <p> <code>usagelimitExceeded</code> - A Boolean value that indicates whether the available licenses have been exceeded.</p> </li> </ul>"
         }
       }
     },
@@ -3457,7 +3468,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String",
-          "documentation":"<p>Amazon Resource Name (ARN) of the license configuration.</p>"
+          "documentation":"<p>Amazon Resource Name (ARN) of the resource.</p>"
         }
       }
     },
@@ -3522,7 +3533,7 @@
         },
         "Filters":{
           "shape":"Filters",
-          "documentation":"<p>Filters to scope the results. The following filters and logical operators are supported:</p> <ul> <li> <p> <code>resourceArn</code> - The ARN of the license configuration resource. Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>resourceType</code> - The resource type (<code>EC2_INSTANCE</code> | <code>EC2_HOST</code> | <code>EC2_AMI</code> | <code>SYSTEMS_MANAGER_MANAGED_INSTANCE</code>). Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>resourceAccount</code> - The ID of the account that owns the resource. Logical operators are <code>EQUALS</code> | <code>NOT_EQUALS</code>.</p> </li> </ul>"
+          "documentation":"<p>Filters to scope the results. The following filters and logical operators are supported:</p> <ul> <li> <p> <code>resourceArn</code> - The ARN of the license configuration resource.</p> </li> <li> <p> <code>resourceType</code> - The resource type (<code>EC2_INSTANCE</code> | <code>EC2_HOST</code> | <code>EC2_AMI</code> | <code>SYSTEMS_MANAGER_MANAGED_INSTANCE</code>).</p> </li> <li> <p> <code>resourceAccount</code> - The ID of the account that owns the resource.</p> </li> </ul>"
         }
       }
     },
@@ -3623,6 +3634,36 @@
       "max":1,
       "min":1
     },
+    "ProductCodeId":{
+      "type":"string",
+      "pattern":"^[A-Za-z0-9]{1,25}$"
+    },
+    "ProductCodeList":{
+      "type":"list",
+      "member":{"shape":"ProductCodeListItem"}
+    },
+    "ProductCodeListItem":{
+      "type":"structure",
+      "required":[
+        "ProductCodeId",
+        "ProductCodeType"
+      ],
+      "members":{
+        "ProductCodeId":{
+          "shape":"ProductCodeId",
+          "documentation":"<p>The product code ID</p>"
+        },
+        "ProductCodeType":{
+          "shape":"ProductCodeType",
+          "documentation":"<p>The product code type</p>"
+        }
+      },
+      "documentation":"<p>A list item that contains a product code.</p>"
+    },
+    "ProductCodeType":{
+      "type":"string",
+      "enum":["marketplace"]
+    },
     "ProductInformation":{
       "type":"structure",
       "required":[
@@ -3636,7 +3677,7 @@
         },
         "ProductInformationFilterList":{
           "shape":"ProductInformationFilterList",
-          "documentation":"<p>A Product information filter consists of a <code>ProductInformationFilterComparator</code> which is a logical operator, a <code>ProductInformationFilterName</code> which specifies the type of filter being declared, and a <code>ProductInformationFilterValue</code> that specifies the value to filter on. </p> <p>Accepted values for <code>ProductInformationFilterName</code> are listed here along with descriptions and valid options for <code>ProductInformationFilterComparator</code>. </p> <p>The following filters and are supported when the resource type is <code>SSM_MANAGED</code>:</p> <ul> <li> <p> <code>Application Name</code> - The name of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Application Publisher</code> - The publisher of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Application Version</code> - The version of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Platform Name</code> - The name of the platform. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Platform Type</code> - The platform type. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Tag:key</code> - The key of a tag attached to an Amazon Web Services resource you wish to exclude from automated discovery. Logical operator is <code>NOT_EQUALS</code>. The key for your tag must be appended to <code>Tag:</code> following the example: <code>Tag:name-of-your-key</code>. <code>ProductInformationFilterValue</code> is optional if you are not using values for the key. </p> </li> <li> <p> <code>AccountId</code> - The 12-digit ID of an Amazon Web Services account you wish to exclude from automated discovery. Logical operator is <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>License Included</code> - The type of license included. Logical operators are <code>EQUALS</code> and <code>NOT_EQUALS</code>. Possible values are: <code>sql-server-enterprise</code> | <code>sql-server-standard</code> | <code>sql-server-web</code> | <code>windows-server-datacenter</code>.</p> </li> </ul> <p>The following filters and logical operators are supported when the resource type is <code>RDS</code>:</p> <ul> <li> <p> <code>Engine Edition</code> - The edition of the database engine. Logical operator is <code>EQUALS</code>. Possible values are: <code>oracle-ee</code> | <code>oracle-se</code> | <code>oracle-se1</code> | <code>oracle-se2</code>.</p> </li> <li> <p> <code>License Pack</code> - The license pack. Logical operator is <code>EQUALS</code>. Possible values are: <code>data guard</code> | <code>diagnostic pack sqlt</code> | <code>tuning pack sqlt</code> | <code>ols</code> | <code>olap</code>.</p> </li> </ul>"
+          "documentation":"<p>A Product information filter consists of a <code>ProductInformationFilterComparator</code> which is a logical operator, a <code>ProductInformationFilterName</code> which specifies the type of filter being declared, and a <code>ProductInformationFilterValue</code> that specifies the value to filter on. </p> <p>Accepted values for <code>ProductInformationFilterName</code> are listed here along with descriptions and valid options for <code>ProductInformationFilterComparator</code>. </p> <p>The following filters and are supported when the resource type is <code>SSM_MANAGED</code>:</p> <ul> <li> <p> <code>Application Name</code> - The name of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Application Publisher</code> - The publisher of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Application Version</code> - The version of the application. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Platform Name</code> - The name of the platform. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Platform Type</code> - The platform type. Logical operator is <code>EQUALS</code>.</p> </li> <li> <p> <code>Tag:key</code> - The key of a tag attached to an Amazon Web Services resource you wish to exclude from automated discovery. Logical operator is <code>NOT_EQUALS</code>. The key for your tag must be appended to <code>Tag:</code> following the example: <code>Tag:name-of-your-key</code>. <code>ProductInformationFilterValue</code> is optional if you are not using values for the key. </p> </li> <li> <p> <code>AccountId</code> - The 12-digit ID of an Amazon Web Services account you wish to exclude from automated discovery. Logical operator is <code>NOT_EQUALS</code>.</p> </li> <li> <p> <code>License Included</code> - The type of license included. Logical operators are <code>EQUALS</code> and <code>NOT_EQUALS</code>. Possible values are: <code>sql-server-enterprise</code> | <code>sql-server-standard</code> | <code>sql-server-web</code> | <code>windows-server-datacenter</code>.</p> </li> </ul> <p>The following filters and logical operators are supported when the resource type is <code>RDS</code>:</p> <ul> <li> <p> <code>Engine Edition</code> - The edition of the database engine. Logical operator is <code>EQUALS</code>. Possible values are: <code>oracle-ee</code> | <code>oracle-se</code> | <code>oracle-se1</code> | <code>oracle-se2</code> | <code>db2-se</code> | <code>db2-ae</code>.</p> </li> <li> <p> <code>License Pack</code> - The license pack. Logical operator is <code>EQUALS</code>. Possible values are: <code>data guard</code> | <code>diagnostic pack sqlt</code> | <code>tuning pack sqlt</code> | <code>ols</code> | <code>olap</code>.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Describes product information for a license configuration.</p>"
@@ -3978,14 +4019,14 @@
       "members":{
         "Key":{
           "shape":"String",
-          "documentation":"<p>Tag key.</p>"
+          "documentation":"<p>The tag key.</p>"
         },
         "Value":{
           "shape":"String",
-          "documentation":"<p>Tag value.</p>"
+          "documentation":"<p>The tag value.</p>"
         }
       },
-      "documentation":"<p>Details about a tag for a license configuration.</p>"
+      "documentation":"<p>Details about the tags for a resource. For more information about tagging support in License Manager, see the <a href=\"https://docs.aws.amazon.com/license-manager/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p>"
     },
     "TagKeyList":{
       "type":"list",
@@ -4004,7 +4045,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String",
-          "documentation":"<p>Amazon Resource Name (ARN) of the license configuration.</p>"
+          "documentation":"<p>Amazon Resource Name (ARN) of the resource. The following examples provide an example ARN for each supported resource in License Manager:</p> <ul> <li> <p>Licenses - <code>arn:aws:license-manager::111122223333:license:l-EXAMPLE2da7646d6861033667f20e895</code> </p> </li> <li> <p>Grants - <code>arn:aws:license-manager::111122223333:grant:g-EXAMPLE7b19f4a0ab73679b0beb52707</code> </p> </li> <li> <p>License configurations - <code>arn:aws:license-manager:us-east-1:111122223333:license-configuration:lic-EXAMPLE6a788d4c8acd4264ff0ecf2ed2d</code> </p> </li> <li> <p>Report generators - <code>arn:aws:license-manager:us-east-1:111122223333:report-generator:r-EXAMPLE825b4a4f8fe5a3e0c88824e5fc6</code> </p> </li> </ul>"
         },
         "Tags":{
           "shape":"TagList",
@@ -4014,8 +4055,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TokenData":{
       "type":"structure",
@@ -4081,7 +4121,7 @@
       "members":{
         "ResourceArn":{
           "shape":"String",
-          "documentation":"<p>Amazon Resource Name (ARN) of the license configuration.</p>"
+          "documentation":"<p>Amazon Resource Name (ARN) of the resource.</p>"
         },
         "TagKeys":{
           "shape":"TagKeyList",
@@ -4091,8 +4131,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLicenseConfigurationRequest":{
       "type":"structure",
@@ -4138,8 +4177,7 @@
     },
     "UpdateLicenseConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLicenseManagerReportGeneratorRequest":{
       "type":"structure",
@@ -4184,8 +4222,7 @@
     },
     "UpdateLicenseManagerReportGeneratorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLicenseSpecificationsForResourceRequest":{
       "type":"structure",
@@ -4207,8 +4244,7 @@
     },
     "UpdateLicenseSpecificationsForResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateServiceSettingsRequest":{
       "type":"structure",
@@ -4233,8 +4269,7 @@
     },
     "UpdateServiceSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UsageOperation":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager-linux-subscriptions/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2018-05-10",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"license-manager-user-subscriptions",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS License Manager User Subscriptions",
     "serviceId":"License Manager User Subscriptions",
     "signatureVersion":"v4",
     "signingName":"license-manager-user-subscriptions",
-    "uid":"license-manager-user-subscriptions-2018-05-10",
-    "auth":["aws.auth#sigv4"]
+    "uid":"license-manager-user-subscriptions-2018-05-10"
   },
   "operations":{
     "AssociateUser":{
@@ -25,8 +24,8 @@
       "output":{"shape":"AssociateUserResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -46,8 +45,8 @@
       "output":{"shape":"CreateLicenseServerEndpointResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -67,8 +66,8 @@
       "output":{"shape":"DeleteLicenseServerEndpointResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -88,8 +87,8 @@
       "output":{"shape":"DeregisterIdentityProviderResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -109,8 +108,8 @@
       "output":{"shape":"DisassociateUserResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -130,8 +129,8 @@
       "output":{"shape":"ListIdentityProvidersResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -150,8 +149,8 @@
       "output":{"shape":"ListInstancesResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -170,8 +169,8 @@
       "output":{"shape":"ListLicenseServerEndpointsResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
@@ -189,8 +188,8 @@
       "output":{"shape":"ListProductSubscriptionsResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -225,8 +224,8 @@
       "output":{"shape":"ListUserAssociationsResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -245,8 +244,8 @@
       "output":{"shape":"RegisterIdentityProviderResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -266,8 +265,8 @@
       "output":{"shape":"StartProductSubscriptionResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -286,8 +285,8 @@
       "output":{"shape":"StopProductSubscriptionResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
@@ -359,6 +358,10 @@
     "ActiveDirectoryIdentityProvider":{
       "type":"structure",
       "members":{
+        "DirectoryId":{
+          "shape":"Directory",
+          "documentation":"<p>The directory ID for an Active Directory identity provider.</p>"
+        },
         "ActiveDirectorySettings":{
           "shape":"ActiveDirectorySettings",
           "documentation":"<p>The <code>ActiveDirectorySettings</code> resource contains details about the Active Directory, including network access details such as domain name and IP addresses, and the credential provider for user administration.</p>"
@@ -367,9 +370,9 @@
           "shape":"ActiveDirectoryType",
           "documentation":"<p>The type of Active Directory – either a self-managed Active Directory or an Amazon Web Services Managed Active Directory.</p>"
         },
-        "DirectoryId":{
-          "shape":"Directory",
-          "documentation":"<p>The directory ID for an Active Directory identity provider.</p>"
+        "IsSharedActiveDirectory":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether this directory is shared from an Amazon Web Services Managed Active Directory. The default value is false.</p>"
         }
       },
       "documentation":"<p>Details about an Active Directory identity provider.</p>"
@@ -377,17 +380,21 @@
     "ActiveDirectorySettings":{
       "type":"structure",
       "members":{
-        "DomainCredentialsProvider":{
-          "shape":"CredentialsProvider",
-          "documentation":"<p>Points to the <code>CredentialsProvider</code> resource that contains information about the credential provider for user administration.</p>"
+        "DomainName":{
+          "shape":"String",
+          "documentation":"<p>The domain name for the Active Directory.</p>"
         },
         "DomainIpv4List":{
           "shape":"ActiveDirectorySettingsDomainIpv4ListList",
           "documentation":"<p>A list of domain IPv4 addresses that are used for the Active Directory.</p>"
         },
-        "DomainName":{
-          "shape":"String",
-          "documentation":"<p>The domain name for the Active Directory.</p>"
+        "DomainIpv6List":{
+          "shape":"ActiveDirectorySettingsDomainIpv6ListList",
+          "documentation":"<p>A list of domain IPv6 addresses that are used for the Active Directory.</p>"
+        },
+        "DomainCredentialsProvider":{
+          "shape":"CredentialsProvider",
+          "documentation":"<p>Points to the <code>CredentialsProvider</code> resource that contains information about the credential provider for user administration.</p>"
         },
         "DomainNetworkSettings":{
           "shape":"DomainNetworkSettings",
@@ -402,6 +409,12 @@
       "max":2,
       "min":1
     },
+    "ActiveDirectorySettingsDomainIpv6ListList":{
+      "type":"list",
+      "member":{"shape":"IpV6"},
+      "max":2,
+      "min":1
+    },
     "ActiveDirectoryType":{
       "type":"string",
       "enum":[
@@ -411,35 +424,35 @@
     },
     "Arn":{
       "type":"string",
-      "pattern":"^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-zA-Z0-9-\\.]{1,510}/[a-zA-Z0-9-\\.]{1,510}$"
+      "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{1,63}:[a-zA-Z0-9-\\.]{1,510}/[a-zA-Z0-9-\\.]{1,510}"
     },
     "AssociateUserRequest":{
       "type":"structure",
       "required":[
-        "IdentityProvider",
+        "Username",
         "InstanceId",
-        "Username"
+        "IdentityProvider"
       ],
       "members":{
-        "Domain":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains information for the user to associate.</p>"
+          "documentation":"<p>The user name from the identity provider.</p>"
+        },
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the EC2 instance that provides the user-based subscription.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
           "documentation":"<p>The identity provider for the user.</p>"
         },
-        "InstanceId":{
+        "Domain":{
           "shape":"String",
-          "documentation":"<p>The ID of the EC2 instance that provides the user-based subscription.</p>"
+          "documentation":"<p>The domain name of the Active Directory that contains information for the user to associate.</p>"
         },
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>The tags that apply for the user association.</p>"
-        },
-        "Username":{
-          "shape":"String",
-          "documentation":"<p>The user name from the identity provider.</p>"
         }
       }
     },
@@ -453,6 +466,10 @@
         }
       }
     },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
     "BoxInteger":{
       "type":"integer",
       "box":true
@@ -544,13 +561,13 @@
           "shape":"IdentityProvider",
           "documentation":"<p>An object that specifies details for the Active Directory identity provider.</p>"
         },
+        "Product":{
+          "shape":"String",
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
+        },
         "IdentityProviderArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that identifies the identity provider to deregister.</p>"
-        },
-        "Product":{
-          "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
         }
       }
     },
@@ -566,30 +583,30 @@
     },
     "Directory":{
       "type":"string",
-      "pattern":"^(d|sd)-[0-9a-f]{10}$"
+      "pattern":"(d|sd)-[0-9a-f]{10}"
     },
     "DisassociateUserRequest":{
       "type":"structure",
       "members":{
-        "Domain":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains information for the user to disassociate.</p>"
-        },
-        "IdentityProvider":{
-          "shape":"IdentityProvider",
-          "documentation":"<p>An object that specifies details for the Active Directory identity provider.</p>"
+          "documentation":"<p>The user name from the Active Directory identity provider for the user.</p>"
         },
         "InstanceId":{
           "shape":"String",
           "documentation":"<p>The ID of the EC2 instance which provides user-based subscriptions.</p>"
         },
+        "IdentityProvider":{
+          "shape":"IdentityProvider",
+          "documentation":"<p>An object that specifies details for the Active Directory identity provider.</p>"
+        },
         "InstanceUserArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the user to disassociate from the EC2 instance.</p>"
         },
-        "Username":{
+        "Domain":{
           "shape":"String",
-          "documentation":"<p>The user name from the Active Directory identity provider for the user.</p>"
+          "documentation":"<p>The domain name of the Active Directory that contains information for the user to disassociate.</p>"
         }
       }
     },
@@ -656,34 +673,38 @@
       "type":"structure",
       "required":[
         "IdentityProvider",
-        "Product",
         "Settings",
+        "Product",
         "Status"
       ],
       "members":{
-        "FailureMessage":{
-          "shape":"String",
-          "documentation":"<p>The failure message associated with an identity provider.</p>"
-        },
         "IdentityProvider":{
           "shape":"IdentityProvider",
           "documentation":"<p>The <code>IdentityProvider</code> resource contains information about an identity provider.</p>"
         },
-        "IdentityProviderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the identity provider.</p>"
+        "Settings":{
+          "shape":"Settings",
+          "documentation":"<p>The <code>Settings</code> resource contains details about the registered identity provider’s product related configuration settings, such as the subnets to provision VPC endpoints.</p>"
         },
         "Product":{
           "shape":"String",
           "documentation":"<p>The name of the user-based subscription product.</p>"
         },
-        "Settings":{
-          "shape":"Settings",
-          "documentation":"<p>The <code>Settings</code> resource contains details about the registered identity provider’s product related configuration settings, such as the subnets to provision VPC endpoints.</p>"
-        },
         "Status":{
           "shape":"String",
           "documentation":"<p>The status of the identity provider.</p>"
+        },
+        "IdentityProviderArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the identity provider.</p>"
+        },
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>The failure message associated with an identity provider.</p>"
+        },
+        "OwnerAccountId":{
+          "shape":"String",
+          "documentation":"<p>The AWS Account ID of the owner of this resource.</p>"
         }
       },
       "documentation":"<p>Describes an identity provider.</p>"
@@ -696,29 +717,37 @@
       "type":"structure",
       "required":[
         "InstanceId",
-        "Products",
-        "Status"
+        "Status",
+        "Products"
       ],
       "members":{
         "InstanceId":{
           "shape":"String",
           "documentation":"<p>The ID of the EC2 instance, which provides user-based subscriptions.</p>"
         },
-        "LastStatusCheckDate":{
+        "Status":{
           "shape":"String",
-          "documentation":"<p>The date of the last status check.</p>"
+          "documentation":"<p>The status of an EC2 instance resource.</p>"
         },
         "Products":{
           "shape":"StringList",
           "documentation":"<p>A list of provided user-based subscription products.</p>"
         },
-        "Status":{
+        "LastStatusCheckDate":{
           "shape":"String",
-          "documentation":"<p>The status of an EC2 instance resource.</p>"
+          "documentation":"<p>The date of the last status check.</p>"
         },
         "StatusMessage":{
           "shape":"String",
           "documentation":"<p>The status message for an EC2 instance.</p>"
+        },
+        "OwnerAccountId":{
+          "shape":"String",
+          "documentation":"<p>The AWS Account ID of the owner of this resource.</p>"
+        },
+        "IdentityProvider":{
+          "shape":"IdentityProvider",
+          "documentation":"<p>The <code>IdentityProvider</code> resource specifies details about the identity provider.</p>"
         }
       },
       "documentation":"<p>Describes an EC2 instance providing user-based subscriptions.</p>"
@@ -730,47 +759,47 @@
     "InstanceUserSummary":{
       "type":"structure",
       "required":[
-        "IdentityProvider",
+        "Username",
         "InstanceId",
-        "Status",
-        "Username"
+        "IdentityProvider",
+        "Status"
       ],
       "members":{
-        "AssociationDate":{
-          "shape":"String",
-          "documentation":"<p>The date a user was associated with an EC2 instance.</p>"
-        },
-        "DisassociationDate":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The date a user was disassociated from an EC2 instance.</p>"
+          "documentation":"<p>The user name from the identity provider for the user.</p>"
         },
-        "Domain":{
+        "InstanceId":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains the user information for the product subscription.</p>"
+          "documentation":"<p>The ID of the EC2 instance that provides user-based subscriptions.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
           "documentation":"<p>The <code>IdentityProvider</code> resource specifies details about the identity provider.</p>"
         },
-        "InstanceId":{
+        "Status":{
           "shape":"String",
-          "documentation":"<p>The ID of the EC2 instance that provides user-based subscriptions.</p>"
+          "documentation":"<p>The status of a user associated with an EC2 instance.</p>"
         },
         "InstanceUserArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that identifies the instance user.</p>"
         },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The status of a user associated with an EC2 instance.</p>"
-        },
         "StatusMessage":{
           "shape":"String",
           "documentation":"<p>The status message for users of an EC2 instance.</p>"
         },
-        "Username":{
+        "Domain":{
           "shape":"String",
-          "documentation":"<p>The user name from the identity provider for the user.</p>"
+          "documentation":"<p>The domain name of the Active Directory that contains the user information for the product subscription.</p>"
+        },
+        "AssociationDate":{
+          "shape":"String",
+          "documentation":"<p>The date a user was associated with an EC2 instance.</p>"
+        },
+        "DisassociationDate":{
+          "shape":"String",
+          "documentation":"<p>The date a user was disassociated from an EC2 instance.</p>"
         }
       },
       "documentation":"<p>Describes users of an EC2 instance providing user-based subscriptions.</p>"
@@ -791,11 +820,19 @@
     },
     "IpV4":{
       "type":"string",
-      "pattern":"^(?:(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(\\.(?!$)|$)){4}$"
+      "pattern":"(?:(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(\\.(?!$)|$)){4}"
+    },
+    "IpV6":{
+      "type":"string",
+      "pattern":"([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|::[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}"
     },
     "LicenseServer":{
       "type":"structure",
       "members":{
+        "ProvisioningStatus":{
+          "shape":"LicenseServerEndpointProvisioningStatus",
+          "documentation":"<p>The current state of the provisioning process for the RDS license server.</p>"
+        },
         "HealthStatus":{
           "shape":"LicenseServerHealthStatus",
           "documentation":"<p>The health status of the RDS license server.</p>"
@@ -804,9 +841,9 @@
           "shape":"String",
           "documentation":"<p>A list of domain IPv4 addresses that are used for the RDS license server.</p>"
         },
-        "ProvisioningStatus":{
-          "shape":"LicenseServerEndpointProvisioningStatus",
-          "documentation":"<p>The current state of the provisioning process for the RDS license server.</p>"
+        "Ipv6Address":{
+          "shape":"String",
+          "documentation":"<p>A list of domain IPv6 addresses that are used for the RDS license server.</p>"
         }
       },
       "documentation":"<p>Information about a Remote Desktop Services (RDS) license server.</p>"
@@ -814,22 +851,30 @@
     "LicenseServerEndpoint":{
       "type":"structure",
       "members":{
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp when License Manager created the license server endpoint.</p>"
-        },
         "IdentityProviderArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the identity provider that's associated with the RDS license server endpoint.</p>"
         },
-        "LicenseServerEndpointArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the <code>ServerEndpoint</code> resource for the RDS license server.</p>"
+        "ServerType":{
+          "shape":"ServerType",
+          "documentation":"<p>The type of license server.</p>"
+        },
+        "ServerEndpoint":{
+          "shape":"ServerEndpoint",
+          "documentation":"<p>The <code>ServerEndpoint</code> resource contains the network address of the RDS license server endpoint.</p>"
+        },
+        "StatusMessage":{
+          "shape":"String",
+          "documentation":"<p>The message associated with the provisioning status, if there is one.</p>"
         },
         "LicenseServerEndpointId":{
           "shape":"LicenseServerEndpointId",
           "documentation":"<p>The ID of the license server endpoint.</p>"
         },
+        "LicenseServerEndpointArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the <code>ServerEndpoint</code> resource for the RDS license server.</p>"
+        },
         "LicenseServerEndpointProvisioningStatus":{
           "shape":"LicenseServerEndpointProvisioningStatus",
           "documentation":"<p>The current state of the provisioning process for the RDS license server endpoint</p>"
@@ -838,17 +883,9 @@
           "shape":"LicenseServerList",
           "documentation":"<p>An array of <code>LicenseServer</code> resources that represent the license servers that are accessed through this endpoint.</p>"
         },
-        "ServerEndpoint":{
-          "shape":"ServerEndpoint",
-          "documentation":"<p>The <code>ServerEndpoint</code> resource contains the network address of the RDS license server endpoint.</p>"
-        },
-        "ServerType":{
-          "shape":"ServerType",
-          "documentation":"<p>The type of license server.</p>"
-        },
-        "StatusMessage":{
-          "shape":"String",
-          "documentation":"<p>The message associated with the provisioning status, if there is one.</p>"
+        "CreationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when License Manager created the license server endpoint.</p>"
         }
       },
       "documentation":"<p>Contains details about a network endpoint for a Remote Desktop Services (RDS) license server.</p>"
@@ -884,17 +921,17 @@
     "LicenseServerSettings":{
       "type":"structure",
       "required":[
-        "ServerSettings",
-        "ServerType"
+        "ServerType",
+        "ServerSettings"
       ],
       "members":{
-        "ServerSettings":{
-          "shape":"ServerSettings",
-          "documentation":"<p>The <code>ServerSettings</code> resource contains the settings for your server.</p>"
-        },
         "ServerType":{
           "shape":"ServerType",
           "documentation":"<p>The type of license server.</p>"
+        },
+        "ServerSettings":{
+          "shape":"ServerSettings",
+          "documentation":"<p>The <code>ServerSettings</code> resource contains the settings for your server.</p>"
         }
       },
       "documentation":"<p>The settings to configure your license server.</p>"
@@ -902,14 +939,14 @@
     "ListIdentityProvidersRequest":{
       "type":"structure",
       "members":{
-        "Filters":{
-          "shape":"FilterList",
-          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Product</p> </li> <li> <p>DirectoryId</p> </li> </ul>"
-        },
         "MaxResults":{
           "shape":"BoxInteger",
           "documentation":"<p>The maximum number of results to return from a single request.</p>"
         },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Product</p> </li> <li> <p>DirectoryId</p> </li> </ul>"
+        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>A token to specify where to start paginating. This is the nextToken from a previously truncated response.</p>"
@@ -933,10 +970,6 @@
     "ListInstancesRequest":{
       "type":"structure",
       "members":{
-        "Filters":{
-          "shape":"FilterList",
-          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>InstanceId</p> </li> </ul>"
-        },
         "MaxResults":{
           "shape":"BoxInteger",
           "documentation":"<p>The maximum number of results to return from a single request.</p>"
@@ -944,6 +977,10 @@
         "NextToken":{
           "shape":"String",
           "documentation":"<p>A token to specify where to start paginating. This is the nextToken from a previously truncated response.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>InstanceId</p> </li> </ul>"
         }
       }
     },
@@ -963,14 +1000,14 @@
     "ListLicenseServerEndpointsRequest":{
       "type":"structure",
       "members":{
-        "Filters":{
-          "shape":"FilterList",
-          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>IdentityProviderArn</p> </li> </ul>"
-        },
         "MaxResults":{
           "shape":"ListLicenseServerEndpointsRequestMaxResultsInteger",
           "documentation":"<p>The maximum number of results to return from a single request.</p>"
         },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>IdentityProviderArn</p> </li> </ul>"
+        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>A token to specify where to start paginating. This is the nextToken from a previously truncated response.</p>"
@@ -1000,9 +1037,9 @@
       "type":"structure",
       "required":["IdentityProvider"],
       "members":{
-        "Filters":{
-          "shape":"FilterList",
-          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>Username</p> </li> <li> <p>Domain</p> </li> </ul>"
+        "Product":{
+          "shape":"String",
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
@@ -1012,26 +1049,26 @@
           "shape":"BoxInteger",
           "documentation":"<p>The maximum number of results to return from a single request.</p>"
         },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>Username</p> </li> <li> <p>Domain</p> </li> </ul>"
+        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>A token to specify where to start paginating. This is the nextToken from a previously truncated response.</p>"
-        },
-        "Product":{
-          "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
         }
       }
     },
     "ListProductSubscriptionsResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>The next token used for paginated responses. When this field isn't empty, there are additional elements that the service hasn't included in this request. Use this token with the next request to retrieve additional objects.</p>"
-        },
         "ProductUserSummaries":{
           "shape":"ProductUserSummaryList",
           "documentation":"<p>Metadata that describes the list product subscriptions operation.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The next token used for paginated responses. When this field isn't empty, there are additional elements that the service hasn't included in this request. Use this token with the next request to retrieve additional objects.</p>"
         }
       }
     },
@@ -1059,26 +1096,26 @@
     "ListUserAssociationsRequest":{
       "type":"structure",
       "required":[
-        "IdentityProvider",
-        "InstanceId"
+        "InstanceId",
+        "IdentityProvider"
       ],
       "members":{
-        "Filters":{
-          "shape":"FilterList",
-          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>Username</p> </li> <li> <p>Domain</p> </li> </ul>"
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the EC2 instance, which provides user-based subscriptions.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
           "documentation":"<p>An object that specifies details for the identity provider.</p>"
         },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the EC2 instance, which provides user-based subscriptions.</p>"
-        },
         "MaxResults":{
           "shape":"BoxInteger",
           "documentation":"<p>The maximum number of results to return from a single request.</p>"
         },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>You can use the following filters to streamline results:</p> <ul> <li> <p>Status</p> </li> <li> <p>Username</p> </li> <li> <p>Domain</p> </li> </ul>"
+        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>A token to specify where to start paginating. This is the nextToken from a previously truncated response.</p>"
@@ -1101,47 +1138,47 @@
     "ProductUserSummary":{
       "type":"structure",
       "required":[
-        "IdentityProvider",
+        "Username",
         "Product",
-        "Status",
-        "Username"
+        "IdentityProvider",
+        "Status"
       ],
       "members":{
-        "Domain":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains the user information for the product subscription.</p>"
+          "documentation":"<p>The user name from the identity provider for this product user.</p>"
+        },
+        "Product":{
+          "shape":"String",
+          "documentation":"<p>The name of the user-based subscription product.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
           "documentation":"<p>An object that specifies details for the identity provider.</p>"
         },
-        "Product":{
+        "Status":{
           "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p>"
+          "documentation":"<p>The status of a product for this user.</p>"
         },
         "ProductUserArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) for this product user.</p>"
         },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The status of a product for this user.</p>"
-        },
         "StatusMessage":{
           "shape":"String",
           "documentation":"<p>The status message for a product for this user.</p>"
         },
-        "SubscriptionEndDate":{
+        "Domain":{
           "shape":"String",
-          "documentation":"<p>The end date of a subscription.</p>"
+          "documentation":"<p>The domain name of the Active Directory that contains the user information for the product subscription.</p>"
         },
         "SubscriptionStartDate":{
           "shape":"String",
           "documentation":"<p>The start date of a subscription.</p>"
         },
-        "Username":{
+        "SubscriptionEndDate":{
           "shape":"String",
-          "documentation":"<p>The user name from the identity provider for this product user.</p>"
+          "documentation":"<p>The end date of a subscription.</p>"
         }
       },
       "documentation":"<p>A summary of the user-based subscription products for a specific user.</p>"
@@ -1174,7 +1211,7 @@
         },
         "Product":{
           "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
         },
         "Settings":{
           "shape":"Settings",
@@ -1198,7 +1235,7 @@
     },
     "ResourceArn":{
       "type":"string",
-      "pattern":"^arn:([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,510})/([a-z0-9-\\.]{1,510})$"
+      "pattern":"arn:([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,63}):([a-z0-9-\\.]{1,510})/([a-z0-9-\\.]{1,510})"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -1230,7 +1267,7 @@
       "type":"string",
       "max":200,
       "min":5,
-      "pattern":"^sg-(([0-9a-z]{8})|([0-9a-z]{17}))$"
+      "pattern":"sg-(([0-9a-z]{8})|([0-9a-z]{17}))"
     },
     "ServerEndpoint":{
       "type":"structure",
@@ -1268,17 +1305,17 @@
     "Settings":{
       "type":"structure",
       "required":[
-        "SecurityGroupId",
-        "Subnets"
+        "Subnets",
+        "SecurityGroupId"
       ],
       "members":{
-        "SecurityGroupId":{
-          "shape":"SecurityGroup",
-          "documentation":"<p>A security group ID that allows inbound TCP port 1688 communication between resources in your VPC and the VPC endpoint for activation servers.</p>"
-        },
         "Subnets":{
           "shape":"SettingsSubnetsList",
           "documentation":"<p>The subnets defined for the registered identity provider.</p>"
+        },
+        "SecurityGroupId":{
+          "shape":"SecurityGroup",
+          "documentation":"<p>A security group ID that allows inbound TCP port 1688 communication between resources in your VPC and the VPC endpoint for activation servers.</p>"
         }
       },
       "documentation":"<p>The registered identity provider’s product related configuration settings such as the subnets to provision VPC endpoints, and the security group ID that is associated with the VPC endpoints. The security group should permit inbound TCP port 1688 communication from resources in the VPC.</p>"
@@ -1291,14 +1328,14 @@
     "StartProductSubscriptionRequest":{
       "type":"structure",
       "required":[
+        "Username",
         "IdentityProvider",
-        "Product",
-        "Username"
+        "Product"
       ],
       "members":{
-        "Domain":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains the user for whom to start the product subscription.</p>"
+          "documentation":"<p>The user name from the identity provider of the user.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
@@ -1306,15 +1343,15 @@
         },
         "Product":{
           "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
+        },
+        "Domain":{
+          "shape":"String",
+          "documentation":"<p>The domain name of the Active Directory that contains the user for whom to start the product subscription.</p>"
         },
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>The tags that apply to the product subscription.</p>"
-        },
-        "Username":{
-          "shape":"String",
-          "documentation":"<p>The user name from the identity provider of the user.</p>"
         }
       }
     },
@@ -1331,9 +1368,9 @@
     "StopProductSubscriptionRequest":{
       "type":"structure",
       "members":{
-        "Domain":{
+        "Username":{
           "shape":"String",
-          "documentation":"<p>The domain name of the Active Directory that contains the user for whom to stop the product subscription.</p>"
+          "documentation":"<p>The user name from the identity provider for the user.</p>"
         },
         "IdentityProvider":{
           "shape":"IdentityProvider",
@@ -1341,15 +1378,15 @@
         },
         "Product":{
           "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
         },
         "ProductUserArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the product user.</p>"
         },
-        "Username":{
+        "Domain":{
           "shape":"String",
-          "documentation":"<p>The user name from the identity provider for the user.</p>"
+          "documentation":"<p>The domain name of the Active Directory that contains the user for whom to stop the product subscription.</p>"
         }
       }
     },
@@ -1370,7 +1407,7 @@
     },
     "Subnet":{
       "type":"string",
-      "pattern":"^subnet-[a-z0-9]{8,17}"
+      "pattern":"subnet-[a-z0-9]{8,17}.*"
     },
     "Subnets":{
       "type":"list",
@@ -1404,8 +1441,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Tags":{
       "type":"map",
@@ -1447,22 +1483,21 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateIdentityProviderSettingsRequest":{
       "type":"structure",
       "required":["UpdateSettings"],
       "members":{
         "IdentityProvider":{"shape":"IdentityProvider"},
+        "Product":{
+          "shape":"String",
+          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> | <code>REMOTE_DESKTOP_SERVICES</code> </p>"
+        },
         "IdentityProviderArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the identity provider to update.</p>"
         },
-        "Product":{
-          "shape":"String",
-          "documentation":"<p>The name of the user-based subscription product.</p> <p>Valid values: <code>VISUAL_STUDIO_ENTERPRISE</code> | <code>VISUAL_STUDIO_PROFESSIONAL</code> | <code>OFFICE_PROFESSIONAL_PLUS</code> </p>"
-        },
         "UpdateSettings":{
           "shape":"UpdateSettings",
           "documentation":"<p>Updates the registered identity provider’s product related configuration settings. You can update any combination of settings in a single operation such as the:</p> <ul> <li> <p>Subnets which you want to add to provision VPC endpoints.</p> </li> <li> <p>Subnets which you want to remove the VPC endpoints from.</p> </li> <li> <p>Security group ID which permits traffic to the VPC endpoints.</p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/waiters-2.json 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/license-manager-user-subscriptions/2018-05-10/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lightsail/2016-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lightsail/2016-11-28/service-2.json 2.31.35-1/awscli/botocore/data/lightsail/2016-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/lightsail/2016-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lightsail/2016-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Allocates a static IP address.</p>"
@@ -66,9 +67,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Attaches a block storage disk to a running or stopped Lightsail instance and exposes it to the instance with the specified disk name.</p> <p>The <code>attach disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Attaches a block storage disk to a running or stopped Lightsail instance and exposes it to the instance with the specified disk name.</p> <p>The <code>attach disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "AttachInstancesToLoadBalancer":{
       "name":"AttachInstancesToLoadBalancer",
@@ -85,9 +87,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Attaches one or more Lightsail instances to a load balancer.</p> <p>After some time, the instances are attached to the load balancer and the health check status is available.</p> <p>The <code>attach instances to load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Attaches one or more Lightsail instances to a load balancer.</p> <p>After some time, the instances are attached to the load balancer and the health check status is available.</p> <p>The <code>attach instances to load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Lightsail Developer Guide</a>.</p>"
     },
     "AttachLoadBalancerTlsCertificate":{
       "name":"AttachLoadBalancerTlsCertificate",
@@ -104,9 +107,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Attaches a Transport Layer Security (TLS) certificate to your load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL).</p> <p>Once you create and validate your certificate, you can attach it to your load balancer. You can also use this API to rotate the certificates on your account. Use the <code>AttachLoadBalancerTlsCertificate</code> action with the non-attached certificate, and it will replace the existing one and become the attached certificate.</p> <p>The <code>AttachLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Attaches a Transport Layer Security (TLS) certificate to your load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL).</p> <p>Once you create and validate your certificate, you can attach it to your load balancer. You can also use this API to rotate the certificates on your account. Use the <code>AttachLoadBalancerTlsCertificate</code> action with the non-attached certificate, and it will replace the existing one and become the attached certificate.</p> <p>The <code>AttachLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "AttachStaticIp":{
       "name":"AttachStaticIp",
@@ -123,6 +127,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Attaches a static IP address to a specific Amazon Lightsail instance.</p>"
@@ -142,9 +147,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Closes ports for a specific Amazon Lightsail instance.</p> <p>The <code>CloseInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Closes ports for a specific Amazon Lightsail instance.</p> <p>The <code>CloseInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CopySnapshot":{
       "name":"CopySnapshot",
@@ -161,6 +167,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Copies a manual snapshot of an instance or disk as another manual snapshot, or copies an automatic snapshot of an instance or disk as a manual snapshot. This operation can also be used to copy a manual or automatic snapshot of an instance or a disk from one Amazon Web Services Region to another in Amazon Lightsail.</p> <p>When copying a <i>manual snapshot</i>, be sure to define the <code>source region</code>, <code>source snapshot name</code>, and <code>target snapshot name</code> parameters.</p> <p>When copying an <i>automatic snapshot</i>, be sure to define the <code>source region</code>, <code>source resource name</code>, <code>target snapshot name</code>, and either the <code>restore date</code> or the <code>use latest restorable auto snapshot</code> parameters.</p>"
@@ -177,9 +184,10 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InvalidInputException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates an Amazon Lightsail bucket.</p> <p>A bucket is a cloud storage resource available in the Lightsail object storage service. Use buckets to store objects such as data and its descriptive metadata. For more information about buckets, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/buckets-in-amazon-lightsail\">Buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Creates an Amazon Lightsail bucket.</p> <p>A bucket is a cloud storage resource available in the Lightsail object storage service. Use buckets to store objects such as data and its descriptive metadata. For more information about buckets, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/buckets-in-amazon-lightsail\">Buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "CreateBucketAccessKey":{
       "name":"CreateBucketAccessKey",
@@ -194,9 +202,10 @@
         {"shape":"NotFoundException"},
         {"shape":"InvalidInputException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates a new access key for the specified Amazon Lightsail bucket. Access keys consist of an access key ID and corresponding secret access key.</p> <p>Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetBucketAccessKeys.html\">GetBucketAccessKeys</a> action to get a list of current access keys for a specific bucket. For more information about access keys, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> <important> <p>The <code>secretAccessKey</code> value is returned only in response to the <code>CreateBucketAccessKey</code> action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.</p> </important>"
+      "documentation":"<p>Creates a new access key for the specified Amazon Lightsail bucket. Access keys consist of an access key ID and corresponding secret access key.</p> <p>Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetBucketAccessKeys.html\">GetBucketAccessKeys</a> action to get a list of current access keys for a specific bucket. For more information about access keys, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> <important> <p>The <code>secretAccessKey</code> value is returned only in response to the <code>CreateBucketAccessKey</code> action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.</p> </important>"
     },
     "CreateCertificate":{
       "name":"CreateCertificate",
@@ -211,7 +220,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Creates an SSL/TLS certificate for an Amazon Lightsail content delivery network (CDN) distribution and a container service.</p> <p>After the certificate is valid, use the <code>AttachCertificateToDistribution</code> action to use the certificate and its domains with your distribution. Or use the <code>UpdateContainerService</code> action to use the certificate and its domains with your container service.</p> <important> <p>Only certificates created in the <code>us-east-1</code> Amazon Web Services Region can be attached to Lightsail distributions. Lightsail distributions are global resources that can reference an origin in any Amazon Web Services Region, and distribute its content globally. However, all distributions are located in the <code>us-east-1</code> Region.</p> </important>"
     },
@@ -230,6 +240,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Creates an AWS CloudFormation stack, which creates a new Amazon EC2 instance from an exported Amazon Lightsail snapshot. This operation results in a CloudFormation stack record that can be used to track the AWS CloudFormation stack created. Use the <code>get cloud formation stack records</code> operation to get a list of the CloudFormation stacks created.</p> <important> <p>Wait until after your new Amazon EC2 instance is created before running the <code>create cloud formation stack</code> operation again with the same export snapshot record.</p> </important>"
@@ -248,9 +259,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates an email or SMS text message contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Creates an email or SMS text message contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
     },
     "CreateContainerService":{
       "name":"CreateContainerService",
@@ -265,9 +277,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates an Amazon Lightsail container service.</p> <p>A Lightsail container service is a compute resource to which you can deploy containers. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-services\">Container services in Amazon Lightsail</a> in the <i>Lightsail Dev Guide</i>.</p>"
+      "documentation":"<p>Creates an Amazon Lightsail container service.</p> <p>A Lightsail container service is a compute resource to which you can deploy containers. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-services\">Container services in Amazon Lightsail</a> in the <i>Lightsail Dev Guide</i>.</p>"
     },
     "CreateContainerServiceDeployment":{
       "name":"CreateContainerServiceDeployment",
@@ -282,9 +295,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates a deployment for your Amazon Lightsail container service.</p> <p>A deployment specifies the containers that will be launched on the container service and their settings, such as the ports to open, the environment variables to apply, and the launch command to run. It also specifies the container that will serve as the public endpoint of the deployment and its settings, such as the HTTP or HTTPS port to use, and the health check configuration.</p> <p>You can deploy containers to your container service using container images from a public registry such as Amazon ECR Public, or from your local machine. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-creating-container-images\">Creating container images for your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Creates a deployment for your Amazon Lightsail container service.</p> <p>A deployment specifies the containers that will be launched on the container service and their settings, such as the ports to open, the environment variables to apply, and the launch command to run. It also specifies the container that will serve as the public endpoint of the deployment and its settings, such as the HTTP or HTTPS port to use, and the health check configuration.</p> <p>You can deploy containers to your container service using container images from a public registry such as Amazon ECR Public, or from your local machine. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-creating-container-images\">Creating container images for your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "CreateContainerServiceRegistryLogin":{
       "name":"CreateContainerServiceRegistryLogin",
@@ -299,9 +313,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates a temporary set of log in credentials that you can use to log in to the Docker process on your local machine. After you're logged in, you can use the native Docker commands to push your local container images to the container image registry of your Amazon Lightsail account so that you can use them with your Lightsail container service. The log in credentials expire 12 hours after they are created, at which point you will need to create a new set of log in credentials.</p> <note> <p>You can only push container images to the container service registry of your Lightsail account. You cannot pull container images or perform any other container image management actions on the container service registry.</p> </note> <p>After you push your container images to the container image registry of your Lightsail account, use the <code>RegisterContainerImage</code> action to register the pushed images to a specific Lightsail container service.</p> <note> <p>This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-pushing-container-images\">Pushing and managing container images on your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </note>"
+      "documentation":"<p>Creates a temporary set of log in credentials that you can use to log in to the Docker process on your local machine. After you're logged in, you can use the native Docker commands to push your local container images to the container image registry of your Amazon Lightsail account so that you can use them with your Lightsail container service. The log in credentials expire 12 hours after they are created, at which point you will need to create a new set of log in credentials.</p> <note> <p>You can only push container images to the container service registry of your Lightsail account. You cannot pull container images or perform any other container image management actions on the container service registry.</p> </note> <p>After you push your container images to the container image registry of your Lightsail account, use the <code>RegisterContainerImage</code> action to register the pushed images to a specific Lightsail container service.</p> <note> <p>This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-pushing-container-images\">Pushing and managing container images on your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </note>"
     },
     "CreateDisk":{
       "name":"CreateDisk",
@@ -318,9 +333,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a block storage disk that can be attached to an Amazon Lightsail instance in the same Availability Zone (<code>us-east-2a</code>).</p> <p>The <code>create disk</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a block storage disk that can be attached to an Amazon Lightsail instance in the same Availability Zone (<code>us-east-2a</code>).</p> <p>The <code>create disk</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateDiskFromSnapshot":{
       "name":"CreateDiskFromSnapshot",
@@ -337,9 +353,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a block storage disk from a manual or automatic snapshot of a disk. The resulting disk can be attached to an Amazon Lightsail instance in the same Availability Zone (<code>us-east-2a</code>).</p> <p>The <code>create disk from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>disk snapshot name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a block storage disk from a manual or automatic snapshot of a disk. The resulting disk can be attached to an Amazon Lightsail instance in the same Availability Zone (<code>us-east-2a</code>).</p> <p>The <code>create disk from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>disk snapshot name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateDiskSnapshot":{
       "name":"CreateDiskSnapshot",
@@ -356,9 +373,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a snapshot of a block storage disk. You can use snapshots for backups, to make copies of disks, and to save data before shutting down a Lightsail instance.</p> <p>You can take a snapshot of an attached disk that is in use; however, snapshots only capture data that has been written to your disk at the time the snapshot command is issued. This may exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the disk long enough to take a snapshot, your snapshot should be complete. Nevertheless, if you cannot pause all file writes to the disk, you should unmount the disk from within the Lightsail instance, issue the create disk snapshot command, and then remount the disk to ensure a consistent and complete snapshot. You may remount and use your disk while the snapshot status is pending.</p> <p>You can also use this operation to create a snapshot of an instance's system volume. You might want to do this, for example, to recover data from the system volume of a botched instance or to create a backup of the system volume like you would for a block storage disk. To create a snapshot of a system volume, just define the <code>instance name</code> parameter when issuing the snapshot command, and a snapshot of the defined instance's system volume will be created. After the snapshot is available, you can create a block storage disk from the snapshot and attach it to a running instance to access the data on the disk.</p> <p>The <code>create disk snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a snapshot of a block storage disk. You can use snapshots for backups, to make copies of disks, and to save data before shutting down a Lightsail instance.</p> <p>You can take a snapshot of an attached disk that is in use; however, snapshots only capture data that has been written to your disk at the time the snapshot command is issued. This may exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the disk long enough to take a snapshot, your snapshot should be complete. Nevertheless, if you cannot pause all file writes to the disk, you should unmount the disk from within the Lightsail instance, issue the create disk snapshot command, and then remount the disk to ensure a consistent and complete snapshot. You may remount and use your disk while the snapshot status is pending.</p> <p>You can also use this operation to create a snapshot of an instance's system volume. You might want to do this, for example, to recover data from the system volume of a botched instance or to create a backup of the system volume like you would for a block storage disk. To create a snapshot of a system volume, just define the <code>instance name</code> parameter when issuing the snapshot command, and a snapshot of the defined instance's system volume will be created. After the snapshot is available, you can create a block storage disk from the snapshot and attach it to a running instance to access the data on the disk.</p> <p>The <code>create disk snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateDistribution":{
       "name":"CreateDistribution",
@@ -376,7 +394,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates an Amazon Lightsail content delivery network (CDN) distribution.</p> <p>A distribution is a globally distributed network of caching servers that improve the performance of your website or web application hosted on a Lightsail instance. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-content-delivery-network-distributions\">Content delivery networks in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Creates an Amazon Lightsail content delivery network (CDN) distribution.</p> <p>A distribution is a globally distributed network of caching servers that improve the performance of your website or web application hosted on a Lightsail instance. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-content-delivery-network-distributions\">Content delivery networks in Amazon Lightsail</a>.</p>"
     },
     "CreateDomain":{
       "name":"CreateDomain",
@@ -393,9 +411,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a domain resource for the specified domain (example.com).</p> <p>The <code>create domain</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a domain resource for the specified domain (example.com).</p> <p>The <code>create domain</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateDomainEntry":{
       "name":"CreateDomainEntry",
@@ -412,9 +431,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates one of the following domain name system (DNS) records in a domain DNS zone: Address (A), canonical name (CNAME), mail exchanger (MX), name server (NS), start of authority (SOA), service locator (SRV), or text (TXT).</p> <p>The <code>create domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates one of the following domain name system (DNS) records in a domain DNS zone: Address (A), canonical name (CNAME), mail exchanger (MX), name server (NS), start of authority (SOA), service locator (SRV), or text (TXT).</p> <p>The <code>create domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateGUISessionAccessDetails":{
       "name":"CreateGUISessionAccessDetails",
@@ -429,9 +449,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates two URLs that are used to access a virtual computer’s graphical user interface (GUI) session. The primary URL initiates a web-based NICE DCV session to the virtual computer's application. The secondary URL initiates a web-based NICE DCV session to the virtual computer's operating session. </p> <p>Use <code>StartGUISession</code> to open the session.</p>"
+      "documentation":"<p>Creates two URLs that are used to access a virtual computer’s graphical user interface (GUI) session. The primary URL initiates a web-based Amazon DCV session to the virtual computer's application. The secondary URL initiates a web-based Amazon DCV session to the virtual computer's operating session. </p> <p>Use <code>StartGUISession</code> to open the session.</p>"
     },
     "CreateInstanceSnapshot":{
       "name":"CreateInstanceSnapshot",
@@ -448,9 +469,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a snapshot of a specific virtual private server, or <i>instance</i>. You can use a snapshot to create a new instance that is based on that snapshot.</p> <p>The <code>create instance snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a snapshot of a specific virtual private server, or <i>instance</i>. You can use a snapshot to create a new instance that is based on that snapshot.</p> <p>The <code>create instance snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateInstances":{
       "name":"CreateInstances",
@@ -467,9 +489,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates one or more Amazon Lightsail instances.</p> <p>The <code>create instances</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates one or more Amazon Lightsail instances.</p> <p>The <code>create instances</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Lightsail Developer Guide</a>.</p>"
     },
     "CreateInstancesFromSnapshot":{
       "name":"CreateInstancesFromSnapshot",
@@ -486,9 +509,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates one or more new instances from a manual or automatic snapshot of an instance.</p> <p>The <code>create instances from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>instance snapshot name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates one or more new instances from a manual or automatic snapshot of an instance.</p> <p>The <code>create instances from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>instance snapshot name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateKeyPair":{
       "name":"CreateKeyPair",
@@ -505,9 +529,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a custom SSH key pair that you can use with an Amazon Lightsail instance.</p> <note> <p>Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_DownloadDefaultKeyPair.html\">DownloadDefaultKeyPair</a> action to create a Lightsail default key pair in an Amazon Web Services Region where a default key pair does not currently exist.</p> </note> <p>The <code>create key pair</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a custom SSH key pair that you can use with an Amazon Lightsail instance.</p> <note> <p>Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_DownloadDefaultKeyPair.html\">DownloadDefaultKeyPair</a> action to create a Lightsail default key pair in an Amazon Web Services Region where a default key pair does not currently exist.</p> </note> <p>The <code>create key pair</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateLoadBalancer":{
       "name":"CreateLoadBalancer",
@@ -524,9 +549,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a Lightsail load balancer. To learn more about deciding whether to load balance your application, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/configure-lightsail-instances-for-load-balancing\">Configure your Lightsail instances for load balancing</a>. You can create up to 5 load balancers per AWS Region in your account.</p> <p>When you create a load balancer, you can specify a unique name and port settings. To change additional load balancer settings, use the <code>UpdateLoadBalancerAttribute</code> operation.</p> <p>The <code>create load balancer</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a Lightsail load balancer. To learn more about deciding whether to load balance your application, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-lightsail-instances-for-load-balancing\">Configure your Lightsail instances for load balancing</a>. You can create up to 10 load balancers per AWS Region in your account.</p> <p>When you create a load balancer, you can specify a unique name and port settings. To change additional load balancer settings, use the <code>UpdateLoadBalancerAttribute</code> operation.</p> <p>The <code>create load balancer</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateLoadBalancerTlsCertificate":{
       "name":"CreateLoadBalancerTlsCertificate",
@@ -543,9 +569,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates an SSL/TLS certificate for an Amazon Lightsail load balancer.</p> <p>TLS is just an updated, more secure version of Secure Socket Layer (SSL).</p> <p>The <code>CreateLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates an SSL/TLS certificate for an Amazon Lightsail load balancer.</p> <p>TLS is just an updated, more secure version of Secure Socket Layer (SSL).</p> <p>The <code>CreateLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateRelationalDatabase":{
       "name":"CreateRelationalDatabase",
@@ -562,9 +589,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a new database in Amazon Lightsail.</p> <p>The <code>create relational database</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a new database in Amazon Lightsail.</p> <p>The <code>create relational database</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateRelationalDatabaseFromSnapshot":{
       "name":"CreateRelationalDatabaseFromSnapshot",
@@ -581,9 +609,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a new database from an existing database snapshot in Amazon Lightsail.</p> <p>You can create a new database from a snapshot in if something goes wrong with your original database, or to change it to a different plan, such as a high availability or standard plan.</p> <p>The <code>create relational database from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by relationalDatabaseSnapshotName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a new database from an existing database snapshot in Amazon Lightsail.</p> <p>You can create a new database from a snapshot in if something goes wrong with your original database, or to change it to a different plan, such as a high availability or standard plan.</p> <p>The <code>create relational database from snapshot</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by relationalDatabaseSnapshotName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "CreateRelationalDatabaseSnapshot":{
       "name":"CreateRelationalDatabaseSnapshot",
@@ -600,9 +629,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Creates a snapshot of your database in Amazon Lightsail. You can use snapshots for backups, to make copies of a database, and to save data before deleting a database.</p> <p>The <code>create relational database snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Creates a snapshot of your database in Amazon Lightsail. You can use snapshots for backups, to make copies of a database, and to save data before deleting a database.</p> <p>The <code>create relational database snapshot</code> operation supports tag-based access control via request tags. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteAlarm":{
       "name":"DeleteAlarm",
@@ -618,9 +648,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Deletes an alarm.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Deletes an alarm.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
     },
     "DeleteAutoSnapshot":{
       "name":"DeleteAutoSnapshot",
@@ -636,9 +667,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Deletes an automatic snapshot of an instance or disk. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes an automatic snapshot of an instance or disk. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteBucket":{
       "name":"DeleteBucket",
@@ -653,7 +685,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Deletes a Amazon Lightsail bucket.</p> <note> <p>When you delete your bucket, the bucket name is released and can be reused for a new bucket in your account or another Amazon Web Services account.</p> </note>"
     },
@@ -670,9 +703,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Deletes an access key for the specified Amazon Lightsail bucket.</p> <p>We recommend that you delete an access key if the secret access key is compromised.</p> <p>For more information about access keys, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Deletes an access key for the specified Amazon Lightsail bucket.</p> <p>We recommend that you delete an access key if the secret access key is compromised.</p> <p>For more information about access keys, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "DeleteCertificate":{
       "name":"DeleteCertificate",
@@ -687,7 +721,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"AccessDeniedException"},
         {"shape":"NotFoundException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Deletes an SSL/TLS certificate for your Amazon Lightsail content delivery network (CDN) distribution.</p> <p>Certificates that are currently attached to a distribution cannot be deleted. Use the <code>DetachCertificateFromDistribution</code> action to detach a certificate from a distribution.</p>"
     },
@@ -705,9 +740,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Deletes a contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Deletes a contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
     },
     "DeleteContainerImage":{
       "name":"DeleteContainerImage",
@@ -722,7 +758,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Deletes a container image that is registered to your Amazon Lightsail container service.</p>"
     },
@@ -739,7 +776,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Deletes your Amazon Lightsail container service.</p>"
     },
@@ -758,9 +796,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the specified block storage disk. The disk must be in the <code>available</code> state (not attached to a Lightsail instance).</p> <note> <p>The disk may remain in the <code>deleting</code> state for several minutes.</p> </note> <p>The <code>delete disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes the specified block storage disk. The disk must be in the <code>available</code> state (not attached to a Lightsail instance).</p> <note> <p>The disk may remain in the <code>deleting</code> state for several minutes.</p> </note> <p>The <code>delete disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteDiskSnapshot":{
       "name":"DeleteDiskSnapshot",
@@ -777,9 +816,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the specified disk snapshot.</p> <p>When you make periodic snapshots of a disk, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the disk.</p> <p>The <code>delete disk snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk snapshot name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes the specified disk snapshot.</p> <p>When you make periodic snapshots of a disk, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the disk.</p> <p>The <code>delete disk snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk snapshot name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteDistribution":{
       "name":"DeleteDistribution",
@@ -814,9 +854,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the specified domain recordset and all of its domain records.</p> <p>The <code>delete domain</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes the specified domain recordset and all of its domain records.</p> <p>The <code>delete domain</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteDomainEntry":{
       "name":"DeleteDomainEntry",
@@ -833,9 +874,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes a specific domain entry.</p> <p>The <code>delete domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes a specific domain entry.</p> <p>The <code>delete domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteInstance":{
       "name":"DeleteInstance",
@@ -852,9 +894,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes an Amazon Lightsail instance.</p> <p>The <code>delete instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes an Amazon Lightsail instance.</p> <p>The <code>delete instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteInstanceSnapshot":{
       "name":"DeleteInstanceSnapshot",
@@ -871,9 +914,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes a specific snapshot of a virtual private server (or <i>instance</i>).</p> <p>The <code>delete instance snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance snapshot name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes a specific snapshot of a virtual private server (or <i>instance</i>).</p> <p>The <code>delete instance snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance snapshot name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteKeyPair":{
       "name":"DeleteKeyPair",
@@ -890,9 +934,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the specified key pair by removing the public key from Amazon Lightsail.</p> <p>You can delete key pairs that were created using the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_ImportKeyPair.html\">ImportKeyPair</a> and <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateKeyPair.html\">CreateKeyPair</a> actions, as well as the Lightsail default key pair. A new default key pair will not be created unless you launch an instance without specifying a custom key pair, or you call the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_DownloadDefaultKeyPair.html\">DownloadDefaultKeyPair</a> API. </p> <p>The <code>delete key pair</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>key pair name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes the specified key pair by removing the public key from Amazon Lightsail.</p> <p>You can delete key pairs that were created using the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_ImportKeyPair.html\">ImportKeyPair</a> and <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateKeyPair.html\">CreateKeyPair</a> actions, as well as the Lightsail default key pair. A new default key pair will not be created unless you launch an instance without specifying a custom key pair, or you call the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_DownloadDefaultKeyPair.html\">DownloadDefaultKeyPair</a> API. </p> <p>The <code>delete key pair</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>key pair name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteKnownHostKeys":{
       "name":"DeleteKnownHostKeys",
@@ -909,9 +954,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the known host key or certificate used by the Amazon Lightsail browser-based SSH or RDP clients to authenticate an instance. This operation enables the Lightsail browser-based SSH or RDP clients to connect to the instance after a host key mismatch.</p> <important> <p>Perform this operation only if you were expecting the host key or certificate mismatch or if you are familiar with the new host key or certificate on the instance. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-troubleshooting-browser-based-ssh-rdp-client-connection\">Troubleshooting connection issues when using the Amazon Lightsail browser-based SSH or RDP client</a>.</p> </important>"
+      "documentation":"<p>Deletes the known host key or certificate used by the Amazon Lightsail browser-based SSH or RDP clients to authenticate an instance. This operation enables the Lightsail browser-based SSH or RDP clients to connect to the instance after a host key mismatch.</p> <important> <p>Perform this operation only if you were expecting the host key or certificate mismatch or if you are familiar with the new host key or certificate on the instance. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-troubleshooting-browser-based-ssh-rdp-client-connection\">Troubleshooting connection issues when using the Amazon Lightsail browser-based SSH or RDP client</a>.</p> </important>"
     },
     "DeleteLoadBalancer":{
       "name":"DeleteLoadBalancer",
@@ -928,9 +974,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes a Lightsail load balancer and all its associated SSL/TLS certificates. Once the load balancer is deleted, you will need to create a new load balancer, create a new certificate, and verify domain ownership again.</p> <p>The <code>delete load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes a Lightsail load balancer and all its associated SSL/TLS certificates. Once the load balancer is deleted, you will need to create a new load balancer, create a new certificate, and verify domain ownership again.</p> <p>The <code>delete load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteLoadBalancerTlsCertificate":{
       "name":"DeleteLoadBalancerTlsCertificate",
@@ -947,9 +994,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes an SSL/TLS certificate associated with a Lightsail load balancer.</p> <p>The <code>DeleteLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes an SSL/TLS certificate associated with a Lightsail load balancer.</p> <p>The <code>DeleteLoadBalancerTlsCertificate</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteRelationalDatabase":{
       "name":"DeleteRelationalDatabase",
@@ -966,9 +1014,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes a database in Amazon Lightsail.</p> <p>The <code>delete relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes a database in Amazon Lightsail.</p> <p>The <code>delete relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DeleteRelationalDatabaseSnapshot":{
       "name":"DeleteRelationalDatabaseSnapshot",
@@ -985,9 +1034,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes a database snapshot in Amazon Lightsail.</p> <p>The <code>delete relational database snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes a database snapshot in Amazon Lightsail.</p> <p>The <code>delete relational database snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DetachCertificateFromDistribution":{
       "name":"DetachCertificateFromDistribution",
@@ -1022,9 +1072,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Detaches a stopped block storage disk from a Lightsail instance. Make sure to unmount any file systems on the device within your operating system before stopping the instance and detaching the disk.</p> <p>The <code>detach disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Detaches a stopped block storage disk from a Lightsail instance. Make sure to unmount any file systems on the device within your operating system before stopping the instance and detaching the disk.</p> <p>The <code>detach disk</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>disk name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DetachInstancesFromLoadBalancer":{
       "name":"DetachInstancesFromLoadBalancer",
@@ -1041,9 +1092,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Detaches the specified instances from a Lightsail load balancer.</p> <p>This operation waits until the instances are no longer needed before they are detached from the load balancer.</p> <p>The <code>detach instances from load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Detaches the specified instances from a Lightsail load balancer.</p> <p>This operation waits until the instances are no longer needed before they are detached from the load balancer.</p> <p>The <code>detach instances from load balancer</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DetachStaticIp":{
       "name":"DetachStaticIp",
@@ -1060,6 +1112,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Detaches a static IP from the Amazon Lightsail instance to which it is attached.</p>"
@@ -1078,9 +1131,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Disables an add-on for an Amazon Lightsail resource. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Disables an add-on for an Amazon Lightsail resource. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "DownloadDefaultKeyPair":{
       "name":"DownloadDefaultKeyPair",
@@ -1097,6 +1151,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Downloads the regional Amazon Lightsail default key pair.</p> <p>This action also creates a Lightsail default key pair if a default key pair does not currently exist in the Amazon Web Services Region.</p>"
@@ -1115,9 +1170,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Enables or modifies an add-on for an Amazon Lightsail resource. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Enables or modifies an add-on for an Amazon Lightsail resource. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "ExportSnapshot":{
       "name":"ExportSnapshot",
@@ -1134,9 +1190,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Exports an Amazon Lightsail instance or block storage disk snapshot to Amazon Elastic Compute Cloud (Amazon EC2). This operation results in an export snapshot record that can be used with the <code>create cloud formation stack</code> operation to create new Amazon EC2 instances.</p> <p>Exported instance snapshots appear in Amazon EC2 as Amazon Machine Images (AMIs), and the instance system disk appears as an Amazon Elastic Block Store (Amazon EBS) volume. Exported disk snapshots appear in Amazon EC2 as Amazon EBS volumes. Snapshots are exported to the same Amazon Web Services Region in Amazon EC2 as the source Lightsail snapshot.</p> <p/> <p>The <code>export snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>source snapshot name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p> <note> <p>Use the <code>get instance snapshots</code> or <code>get disk snapshots</code> operations to get a list of snapshots that you can export to Amazon EC2.</p> </note>"
+      "documentation":"<p>Exports an Amazon Lightsail instance or block storage disk snapshot to Amazon Elastic Compute Cloud (Amazon EC2). This operation results in an export snapshot record that can be used with the <code>create cloud formation stack</code> operation to create new Amazon EC2 instances.</p> <p>Exported instance snapshots appear in Amazon EC2 as Amazon Machine Images (AMIs), and the instance system disk appears as an Amazon Elastic Block Store (Amazon EBS) volume. Exported disk snapshots appear in Amazon EC2 as Amazon EBS volumes. Snapshots are exported to the same Amazon Web Services Region in Amazon EC2 as the source Lightsail snapshot.</p> <p/> <p>The <code>export snapshot</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>source snapshot name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p> <note> <p>Use the <code>get instance snapshots</code> or <code>get disk snapshots</code> operations to get a list of snapshots that you can export to Amazon EC2.</p> </note>"
     },
     "GetActiveNames":{
       "name":"GetActiveNames",
@@ -1153,6 +1210,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the names of all active (not deleted) resources.</p>"
@@ -1171,9 +1229,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Returns information about the configured alarms. Specify an alarm name in your request to return information about a specific alarm, or specify a monitored resource name to return information about all alarms for a specific resource.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Returns information about the configured alarms. Specify an alarm name in your request to return information about a specific alarm, or specify a monitored resource name to return information about all alarms for a specific resource.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
     },
     "GetAutoSnapshots":{
       "name":"GetAutoSnapshots",
@@ -1189,9 +1248,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Returns the available automatic snapshots for an instance or disk. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Returns the available automatic snapshots for an instance or disk. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "GetBlueprints":{
       "name":"GetBlueprints",
@@ -1208,6 +1268,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the list of available instance images, or <i>blueprints</i>. You can use a blueprint to create a new instance already running a specific operating system, as well as a preinstalled app or development stack. The software each instance is running depends on the blueprint image you choose.</p> <note> <p>Use active blueprints when creating new instances. Inactive blueprints are listed to support customers with existing instances and are not necessarily available to create new instances. Blueprints are marked inactive when they become outdated due to operating system updates or new application releases.</p> </note>"
@@ -1225,7 +1286,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the existing access key IDs for the specified Amazon Lightsail bucket.</p> <important> <p>This action does not return the secret access key value of an access key. You can get a secret access key only when you create it from the response of the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateBucketAccessKey.html\">CreateBucketAccessKey</a> action. If you lose the secret access key, you must create a new access key.</p> </important>"
     },
@@ -1241,7 +1303,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InvalidInputException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the bundles that you can apply to a Amazon Lightsail bucket.</p> <p>The bucket bundle specifies the monthly cost, storage quota, and data transfer quota for a bucket.</p> <p>Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_UpdateBucketBundle.html\">UpdateBucketBundle</a> action to update the bundle for a bucket.</p>"
     },
@@ -1258,7 +1321,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the data points of a specific metric for an Amazon Lightsail bucket.</p> <p>Metrics report the utilization of a bucket. View and collect metric data regularly to monitor the number of objects stored in a bucket (including object versions) and the storage space used by those objects.</p>"
     },
@@ -1275,9 +1339,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Returns information about one or more Amazon Lightsail buckets. The information returned includes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access feature for your Lightsail buckets.</p> <p>For more information about buckets, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/buckets-in-amazon-lightsail\">Buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Returns information about one or more Amazon Lightsail buckets. The information returned includes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access feature for your Lightsail buckets.</p> <p>For more information about buckets, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/buckets-in-amazon-lightsail\">Buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "GetBundles":{
       "name":"GetBundles",
@@ -1294,6 +1359,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the bundles that you can apply to an Amazon Lightsail instance when you create it.</p> <p>A bundle describes the specifications of an instance, such as the monthly cost, amount of memory, the number of vCPUs, amount of storage space, and monthly network data transfer quota.</p> <note> <p>Bundles are referred to as <i>instance plans</i> in the Lightsail console.</p> </note>"
@@ -1311,7 +1377,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns information about one or more Amazon Lightsail SSL/TLS certificates.</p> <note> <p>To get a summary of a certificate, omit <code>includeCertificateDetails</code> from your request. The response will include only the certificate Amazon Resource Name (ARN), certificate name, domain name, and tags.</p> </note>"
     },
@@ -1330,6 +1397,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the CloudFormation stack record created as a result of the <code>create cloud formation stack</code> operation.</p> <p>An AWS CloudFormation stack is used to create a new Amazon EC2 instance from an exported Lightsail snapshot.</p>"
@@ -1348,9 +1416,10 @@
         {"shape":"NotFoundException"},
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Returns information about the configured contact methods. Specify a protocol in your request to return information about a specific contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Returns information about the configured contact methods. Specify a protocol in your request to return information about a specific contact method.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
     },
     "GetContainerAPIMetadata":{
       "name":"GetContainerAPIMetadata",
@@ -1363,7 +1432,8 @@
       "errors":[
         {"shape":"ServiceException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns information about Amazon Lightsail containers, such as the current version of the Lightsail Control (lightsailctl) plugin.</p>"
     },
@@ -1380,7 +1450,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the container images that are registered to your Amazon Lightsail container service.</p> <note> <p>If you created a deployment on your Lightsail container service that uses container images from a public registry like Docker Hub, those images are not returned as part of this action. Those images are not registered to your Lightsail container service.</p> </note>"
     },
@@ -1397,7 +1468,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the log events of a container of your Amazon Lightsail container service.</p> <p>If your container service has more than one node (i.e., a scale greater than 1), then the log events that are returned for the specified container are merged from all nodes on your container service.</p> <note> <p>Container logs are retained for a certain amount of time. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lightsail.html\">Amazon Lightsail endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>.</p> </note>"
     },
@@ -1414,7 +1486,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the deployments for your Amazon Lightsail container service</p> <p>A deployment specifies the settings, such as the ports and launch command, of containers that are deployed to your container service.</p> <p>The deployments are ordered by version in ascending order. The newest version is listed at the top of the response.</p> <note> <p>A set number of deployments are kept before the oldest one is replaced with the newest one. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lightsail.html\">Amazon Lightsail endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>.</p> </note>"
     },
@@ -1431,7 +1504,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the data points of a specific metric of your Amazon Lightsail container service.</p> <p>Metrics report the utilization of your resources. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.</p>"
     },
@@ -1448,7 +1522,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns the list of powers that can be specified for your Amazon Lightsail container services.</p> <p>The power specifies the amount of memory, the number of vCPUs, and the base price of the container service.</p>"
     },
@@ -1465,7 +1540,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns information about one or more of your Amazon Lightsail container services.</p>"
     },
@@ -1482,7 +1558,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Retrieves information about the cost estimate for a specified resource. A cost estimate will not generate for a resource that has been deleted.</p>"
     },
@@ -1501,6 +1578,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific block storage disk.</p>"
@@ -1520,6 +1598,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific block storage disk snapshot.</p>"
@@ -1539,6 +1618,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all block storage disk snapshots in your AWS account and region.</p>"
@@ -1558,6 +1638,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all block storage disks in your AWS account and region.</p>"
@@ -1649,6 +1730,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific domain recordset.</p>"
@@ -1668,6 +1750,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of all domains in the user's account.</p>"
@@ -1687,6 +1770,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns all export snapshot records created as a result of the <code>export snapshot</code> operation.</p> <p>An export snapshot record can be used to create a new Amazon EC2 instance and its related resources with the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateCloudFormationStack.html\">CreateCloudFormationStack</a> action.</p>"
@@ -1706,6 +1790,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific Amazon Lightsail instance, which is a virtual private server.</p>"
@@ -1725,9 +1810,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Returns temporary SSH keys you can use to connect to a specific virtual private server, or <i>instance</i>.</p> <p>The <code>get instance access details</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Returns temporary SSH keys you can use to connect to a specific virtual private server, or <i>instance</i>.</p> <p>The <code>get instance access details</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "GetInstanceMetricData":{
       "name":"GetInstanceMetricData",
@@ -1744,6 +1830,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the data points for the specified Amazon Lightsail instance metric, given an instance name.</p> <p>Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.</p>"
@@ -1763,6 +1850,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the firewall port states for a specific Amazon Lightsail instance, the IP addresses allowed to connect to the instance through the ports, and the protocol.</p>"
@@ -1782,6 +1870,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific instance snapshot.</p>"
@@ -1801,6 +1890,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns all instance snapshots for the user's account.</p>"
@@ -1820,6 +1910,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the state of a specific instance. Works on one instance at a time.</p>"
@@ -1839,6 +1930,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all Amazon Lightsail virtual private servers, or <i>instances</i>.</p>"
@@ -1858,6 +1950,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific key pair.</p>"
@@ -1877,6 +1970,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all key pairs in the user's account.</p>"
@@ -1896,6 +1990,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about the specified Lightsail load balancer.</p>"
@@ -1915,6 +2010,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about health metrics for your Lightsail load balancer.</p> <p>Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.</p>"
@@ -1934,6 +2030,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about the TLS certificates that are associated with the specified Lightsail load balancer.</p> <p>TLS is just an updated, more secure version of Secure Socket Layer (SSL).</p> <p>You can have a maximum of 2 certificates associated with a Lightsail load balancer. One is active and the other is inactive.</p>"
@@ -1950,10 +2047,11 @@
         {"shape":"ServiceException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p>Returns a list of TLS security policies that you can apply to Lightsail load balancers.</p> <p>For more information about load balancer TLS security policies, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Returns a list of TLS security policies that you can apply to Lightsail load balancers.</p> <p>For more information about load balancer TLS security policies, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "GetLoadBalancers":{
       "name":"GetLoadBalancers",
@@ -1970,6 +2068,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all load balancers in an account.</p>"
@@ -1989,6 +2088,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific operation. Operations include events such as when you create an instance, allocate a static IP, attach a static IP, and so on.</p>"
@@ -2008,6 +2108,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all operations.</p> <p>Results are returned from oldest to newest, up to a maximum of 200. Results can be paged by making each subsequent call to <code>GetOperations</code> use the maximum (last) <code>statusChangedAt</code> value from the previous request.</p>"
@@ -2027,6 +2128,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Gets operations for a specific resource (an instance or a static IP).</p>"
@@ -2046,6 +2148,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of all valid regions for Amazon Lightsail. Use the <code>include availability zones</code> parameter to also return the Availability Zones in a region.</p>"
@@ -2065,6 +2168,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific database in Amazon Lightsail.</p>"
@@ -2084,6 +2188,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of available database blueprints in Amazon Lightsail. A blueprint describes the major engine version of a database.</p> <p>You can use a blueprint ID to create a new database that runs a specific database engine.</p>"
@@ -2103,6 +2208,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the list of bundles that are available in Amazon Lightsail. A bundle describes the performance specifications for a database.</p> <p>You can use a bundle ID to create a new database with explicit performance specifications.</p>"
@@ -2122,6 +2228,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of events for a specific database in Amazon Lightsail.</p>"
@@ -2141,6 +2248,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of log events for a database in Amazon Lightsail.</p>"
@@ -2160,6 +2268,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a list of available log streams for a specific database in Amazon Lightsail.</p>"
@@ -2179,6 +2288,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the current, previous, or pending versions of the master user password for a Lightsail database.</p> <p>The <code>GetRelationalDatabaseMasterUserPassword</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName.</p>"
@@ -2198,6 +2308,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns the data points of the specified metric for a database in Amazon Lightsail.</p> <p>Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.</p>"
@@ -2217,6 +2328,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns all of the runtime parameters offered by the underlying database software, or engine, for a specific database in Amazon Lightsail.</p> <p>In addition to the parameter names and values, this operation returns other information about each parameter. This information includes whether changes require a reboot, whether the parameter is modifiable, the allowed values, and the data types.</p>"
@@ -2236,6 +2348,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about a specific database snapshot in Amazon Lightsail.</p>"
@@ -2255,6 +2368,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all of your database snapshots in Amazon Lightsail.</p>"
@@ -2274,6 +2388,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all of your databases in Amazon Lightsail.</p>"
@@ -2291,7 +2406,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Returns detailed information for five of the most recent <code>SetupInstanceHttps</code> requests that were ran on the target instance.</p>"
     },
@@ -2310,6 +2426,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about an Amazon Lightsail static IP.</p>"
@@ -2329,6 +2446,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns information about all static IPs in the user's account.</p>"
@@ -2348,6 +2466,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Imports a public SSH key from a specific key pair.</p>"
@@ -2367,6 +2486,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Returns a Boolean value indicating whether your Lightsail VPC is peered.</p>"
@@ -2386,9 +2506,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol.</p> <p>The <code>OpenInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol.</p> <p>The <code>OpenInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "PeerVpc":{
       "name":"PeerVpc",
@@ -2405,6 +2526,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Peers the Lightsail VPC with the user's default VPC.</p>"
@@ -2423,9 +2545,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"UnauthenticatedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Creates or updates an alarm, and associates it with the specified metric.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p> <p>When this action creates an alarm, the alarm state is immediately set to <code>INSUFFICIENT_DATA</code>. The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed.</p> <p>When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm. The alarm is then evaluated with the updated configuration.</p>"
+      "documentation":"<p>Creates or updates an alarm, and associates it with the specified metric.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p> <p>When this action creates an alarm, the alarm state is immediately set to <code>INSUFFICIENT_DATA</code>. The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed.</p> <p>When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm. The alarm is then evaluated with the updated configuration.</p>"
     },
     "PutInstancePublicPorts":{
       "name":"PutInstancePublicPorts",
@@ -2442,9 +2565,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. This action also closes all currently open ports that are not included in the request. Include all of the ports and the protocols you want to open in your <code>PutInstancePublicPorts</code>request. Or use the <code>OpenInstancePublicPorts</code> action to open ports without closing currently open ports.</p> <p>The <code>PutInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. This action also closes all currently open ports that are not included in the request. Include all of the ports and the protocols you want to open in your <code>PutInstancePublicPorts</code>request. Or use the <code>OpenInstancePublicPorts</code> action to open ports without closing currently open ports.</p> <p>The <code>PutInstancePublicPorts</code> action supports tag-based access control via resource tags applied to the resource identified by <code>instanceName</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "RebootInstance":{
       "name":"RebootInstance",
@@ -2461,9 +2585,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Restarts a specific instance.</p> <p>The <code>reboot instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Restarts a specific instance.</p> <p>The <code>reboot instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "RebootRelationalDatabase":{
       "name":"RebootRelationalDatabase",
@@ -2480,9 +2605,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Restarts a specific database in Amazon Lightsail.</p> <p>The <code>reboot relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Restarts a specific database in Amazon Lightsail.</p> <p>The <code>reboot relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "RegisterContainerImage":{
       "name":"RegisterContainerImage",
@@ -2497,9 +2623,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Registers a container image to your Amazon Lightsail container service.</p> <note> <p>This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-pushing-container-images\">Pushing and managing container images on your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </note>"
+      "documentation":"<p>Registers a container image to your Amazon Lightsail container service.</p> <note> <p>This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-pushing-container-images\">Pushing and managing container images on your Amazon Lightsail container services</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </note>"
     },
     "ReleaseStaticIp":{
       "name":"ReleaseStaticIp",
@@ -2516,6 +2643,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Deletes a specific static IP from your account.</p>"
@@ -2552,9 +2680,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Sends a verification request to an email contact method to ensure it's owned by the requester. SMS contact methods don't need to be verified.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p> <p>A verification request is sent to the contact method when you initially create it. Use this action to send another verification request if a previous verification request was deleted, or has expired.</p> <important> <p>Notifications are not sent to an email contact method until after it is verified, and confirmed as valid.</p> </important>"
+      "documentation":"<p>Sends a verification request to an email contact method to ensure it's owned by the requester. SMS contact methods don't need to be verified.</p> <p>A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p> <p>A verification request is sent to the contact method when you initially create it. Use this action to send another verification request if a previous verification request was deleted, or has expired.</p> <important> <p>Notifications are not sent to an email contact method until after it is verified, and confirmed as valid.</p> </important>"
     },
     "SetIpAddressType":{
       "name":"SetIpAddressType",
@@ -2571,6 +2700,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Sets the IP address type for an Amazon Lightsail resource.</p> <p>Use this action to enable dual-stack for a resource, which enables IPv4 and IPv6 for the specified resource. Alternately, you can use this action to disable dual-stack, and enable IPv4 only.</p>"
@@ -2588,7 +2718,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Sets the Amazon Lightsail resources that can access the specified Lightsail bucket.</p> <p>Lightsail buckets currently support setting access for Lightsail instances in the same Amazon Web Services Region.</p>"
     },
@@ -2605,7 +2736,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Creates an SSL/TLS certificate that secures traffic for your website. After the certificate is created, it is installed on the specified Lightsail instance.</p> <p>If you provide more than one domain name in the request, at least one name must be less than or equal to 63 characters in length.</p>"
     },
@@ -2622,7 +2754,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Initiates a graphical user interface (GUI) session that’s used to access a virtual computer’s operating system and application. The session will be active for 1 hour. Use this action to resume the session after it expires. </p>"
     },
@@ -2641,9 +2774,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Starts a specific Amazon Lightsail instance from a stopped state. To restart an instance, use the <code>reboot instance</code> operation.</p> <note> <p>When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-create-static-ip\">Amazon Lightsail Developer Guide</a>.</p> </note> <p>The <code>start instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Starts a specific Amazon Lightsail instance from a stopped state. To restart an instance, use the <code>reboot instance</code> operation.</p> <note> <p>When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/lightsail-create-static-ip\">Amazon Lightsail Developer Guide</a>.</p> </note> <p>The <code>start instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "StartRelationalDatabase":{
       "name":"StartRelationalDatabase",
@@ -2660,9 +2794,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Starts a specific database from a stopped state in Amazon Lightsail. To restart a database, use the <code>reboot relational database</code> operation.</p> <p>The <code>start relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Starts a specific database from a stopped state in Amazon Lightsail. To restart a database, use the <code>reboot relational database</code> operation.</p> <p>The <code>start relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "StopGUISession":{
       "name":"StopGUISession",
@@ -2677,9 +2812,10 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Terminates a web-based NICE DCV session that’s used to access a virtual computer’s operating system or application. The session will close and any unsaved data will be lost.</p>"
+      "documentation":"<p>Terminates a web-based Amazon DCV session that’s used to access a virtual computer’s operating system or application. The session will close and any unsaved data will be lost.</p>"
     },
     "StopInstance":{
       "name":"StopInstance",
@@ -2696,9 +2832,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Stops a specific Amazon Lightsail instance that is currently running.</p> <note> <p>When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-create-static-ip\">Amazon Lightsail Developer Guide</a>.</p> </note> <p>The <code>stop instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Stops a specific Amazon Lightsail instance that is currently running.</p> <note> <p>When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/lightsail-create-static-ip\">Amazon Lightsail Developer Guide</a>.</p> </note> <p>The <code>stop instance</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>instance name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "StopRelationalDatabase":{
       "name":"StopRelationalDatabase",
@@ -2715,9 +2852,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Stops a specific database that is currently running in Amazon Lightsail.</p> <p>The <code>stop relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Stops a specific database that is currently running in Amazon Lightsail.</p> <note> <p>If you don't manually start your database instance after it has been stopped for seven consecutive days, Amazon Lightsail automatically starts it for you. This action helps ensure that your database instance doesn't fall behind on any required maintenance updates.</p> </note> <p>The <code>stop relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -2734,9 +2872,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Adds one or more tags to the specified Amazon Lightsail resource. Each resource can have a maximum of 50 tags. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p> <p>The <code>tag resource</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>resource name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Adds one or more tags to the specified Amazon Lightsail resource. Each resource can have a maximum of 50 tags. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p> <p>The <code>tag resource</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>resource name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "TestAlarm":{
       "name":"TestAlarm",
@@ -2752,9 +2891,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"UnauthenticatedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"NotFoundException"}
+        {"shape":"NotFoundException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
-      "documentation":"<p>Tests an alarm by displaying a banner on the Amazon Lightsail console. If a notification trigger is configured for the specified alarm, the test also sends a notification to the notification protocol (<code>Email</code> and/or <code>SMS</code>) configured for the alarm.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Tests an alarm by displaying a banner on the Amazon Lightsail console. If a notification trigger is configured for the specified alarm, the test also sends a notification to the notification protocol (<code>Email</code> and/or <code>SMS</code>) configured for the alarm.</p> <p>An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
     },
     "UnpeerVpc":{
       "name":"UnpeerVpc",
@@ -2771,6 +2911,7 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
       "documentation":"<p>Unpeers the Lightsail VPC from the user's default VPC.</p>"
@@ -2790,9 +2931,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Deletes the specified set of tag keys and their values from the specified Amazon Lightsail resource.</p> <p>The <code>untag resource</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>resource name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Deletes the specified set of tag keys and their values from the specified Amazon Lightsail resource.</p> <p>The <code>untag resource</code> operation supports tag-based access control via request tags and resource tags applied to the resource identified by <code>resource name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "UpdateBucket":{
       "name":"UpdateBucket",
@@ -2807,7 +2949,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Updates an existing Amazon Lightsail bucket.</p> <p>Use this action to update the configuration of an existing bucket, such as versioning, public accessibility, and the Amazon Web Services accounts that can access the bucket.</p>"
     },
@@ -2824,7 +2967,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"ServiceException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Updates the bundle, or storage plan, of an existing Amazon Lightsail bucket.</p> <p>A bucket bundle specifies the monthly cost, storage space, and data transfer quota for a bucket. You can update a bucket's bundle only one time within a monthly Amazon Web Services billing cycle. To determine if you can update a bucket's bundle, use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetBuckets.html\">GetBuckets</a> action. The <code>ableToUpdateBundle</code> parameter in the response will indicate whether you can currently update a bucket's bundle.</p> <p>Update a bucket's bundle if it's consistently going over its storage space or data transfer quota, or if a bucket's usage is consistently in the lower range of its storage space or data transfer quota. Due to the unpredictable usage fluctuations that a bucket might experience, we strongly recommend that you update a bucket's bundle only as a long-term strategy, instead of as a short-term, monthly cost-cutting measure. Choose a bucket bundle that will provide the bucket with ample storage space and data transfer for a long time to come.</p>"
     },
@@ -2841,7 +2985,8 @@
         {"shape":"InvalidInputException"},
         {"shape":"NotFoundException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"UnauthenticatedException"}
+        {"shape":"UnauthenticatedException"},
+        {"shape":"RegionSetupInProgressException"}
       ],
       "documentation":"<p>Updates the configuration of your Amazon Lightsail container service, such as its power, scale, and public domain names.</p>"
     },
@@ -2896,9 +3041,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Updates a domain recordset after it is created.</p> <p>The <code>update domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Updates a domain recordset after it is created.</p> <p>The <code>update domain entry</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>domain name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "UpdateInstanceMetadataOptions":{
       "name":"UpdateInstanceMetadataOptions",
@@ -2915,9 +3061,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Modifies the Amazon Lightsail instance metadata parameters on a running or stopped instance. When you modify the parameters on a running instance, the <code>GetInstance</code> or <code>GetInstances</code> API operation initially responds with a state of <code>pending</code>. After the parameter modifications are successfully applied, the state changes to <code>applied</code> in subsequent <code>GetInstance</code> or <code>GetInstances</code> API calls. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-instance-metadata-service\">Use IMDSv2 with an Amazon Lightsail instance</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Modifies the Amazon Lightsail instance metadata parameters on a running or stopped instance. When you modify the parameters on a running instance, the <code>GetInstance</code> or <code>GetInstances</code> API operation initially responds with a state of <code>pending</code>. After the parameter modifications are successfully applied, the state changes to <code>applied</code> in subsequent <code>GetInstance</code> or <code>GetInstances</code> API calls. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-instance-metadata-service\">Use IMDSv2 with an Amazon Lightsail instance</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "UpdateLoadBalancerAttribute":{
       "name":"UpdateLoadBalancerAttribute",
@@ -2934,9 +3081,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Updates the specified attribute for a load balancer. You can only update one attribute at a time.</p> <p>The <code>update load balancer attribute</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Updates the specified attribute for a load balancer. You can only update one attribute at a time.</p> <p>The <code>update load balancer attribute</code> operation supports tag-based access control via resource tags applied to the resource identified by <code>load balancer name</code>. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "UpdateRelationalDatabase":{
       "name":"UpdateRelationalDatabase",
@@ -2953,9 +3101,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Allows the update of one or more attributes of a database in Amazon Lightsail.</p> <p>Updates are applied immediately, or in cases where the updates could result in an outage, are applied during the database's predefined maintenance window.</p> <p>The <code>update relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Allows the update of one or more attributes of a database in Amazon Lightsail.</p> <p>Updates are applied immediately, or in cases where the updates could result in an outage, are applied during the database's predefined maintenance window.</p> <p>The <code>update relational database</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "UpdateRelationalDatabaseParameters":{
       "name":"UpdateRelationalDatabaseParameters",
@@ -2972,9 +3121,10 @@
         {"shape":"OperationFailureException"},
         {"shape":"AccessDeniedException"},
         {"shape":"AccountSetupInProgressException"},
+        {"shape":"RegionSetupInProgressException"},
         {"shape":"UnauthenticatedException"}
       ],
-      "documentation":"<p>Allows the update of one or more parameters of a database in Amazon Lightsail.</p> <p>Parameter updates don't cause outages; therefore, their application is not subject to the preferred maintenance window. However, there are two ways in which parameter updates are applied: <code>dynamic</code> or <code>pending-reboot</code>. Parameters marked with a <code>dynamic</code> apply type are applied immediately. Parameters marked with a <code>pending-reboot</code> apply type are applied only after the database is rebooted using the <code>reboot relational database</code> operation.</p> <p>The <code>update relational database parameters</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Allows the update of one or more parameters of a database in Amazon Lightsail.</p> <p>Parameter updates don't cause outages; therefore, their application is not subject to the preferred maintenance window. However, there are two ways in which parameter updates are applied: <code>dynamic</code> or <code>pending-reboot</code>. Parameters marked with a <code>dynamic</code> apply type are applied immediately. Parameters marked with a <code>pending-reboot</code> apply type are applied only after the database is rebooted using the <code>reboot relational database</code> operation.</p> <p>The <code>update relational database parameters</code> operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-controlling-access-using-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     }
   },
   "shapes":{
@@ -3020,7 +3170,7 @@
           "documentation":"<p>An object that describes the last time the access key was used.</p> <note> <p>This object does not include data in the response of a <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateBucketAccessKey.html\">CreateBucketAccessKey</a> action. If the access key has not been used, the <code>region</code> and <code>serviceName</code> values are <code>N/A</code>, and the <code>lastUsedDate</code> value is null.</p> </note>"
         }
       },
-      "documentation":"<p>Describes an access key for an Amazon Lightsail bucket.</p> <p>Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateBucketAccessKey.html\">CreateBucketAccessKey</a> action to create an access key for a specific bucket. For more information about access keys, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> <important> <p>The <code>secretAccessKey</code> value is returned only in response to the <code>CreateBucketAccessKey</code> action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.</p> </important>"
+      "documentation":"<p>Describes an access key for an Amazon Lightsail bucket.</p> <p>Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_CreateBucketAccessKey.html\">CreateBucketAccessKey</a> action to create an access key for a specific bucket. For more information about access keys, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-creating-bucket-access-keys\">Creating access keys for a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> <important> <p>The <code>secretAccessKey</code> value is returned only in response to the <code>CreateBucketAccessKey</code> action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.</p> </important>"
     },
     "AccessKeyLastUsed":{
       "type":"structure",
@@ -3060,7 +3210,7 @@
           "documentation":"<p>A Boolean value that indicates whether the access control list (ACL) permissions that are applied to individual objects override the <code>getObject</code> option that is currently specified.</p> <p>When this is true, you can use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html\">PutObjectAcl</a> Amazon S3 API action to set individual objects to public (read-only) using the <code>public-read</code> ACL, or to private using the <code>private</code> ACL.</p>"
         }
       },
-      "documentation":"<p>Describes the anonymous access permissions for an Amazon Lightsail bucket and its objects.</p> <p>For more information about bucket access permissions, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-understanding-bucket-permissions\">Understanding bucket permissions in Amazon Lightsail</a> in the </p> <p> <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the anonymous access permissions for an Amazon Lightsail bucket and its objects.</p> <p>For more information about bucket access permissions, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-understanding-bucket-permissions\">Understanding bucket permissions in Amazon Lightsail</a> in the </p> <p> <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "AccessType":{
       "type":"string",
@@ -3082,14 +3232,14 @@
         },
         "message":{
           "shape":"BPAStatusMessage",
-          "documentation":"<p>A message that provides a reason for a <code>Failed</code> or <code>Defaulted</code> synchronization status.</p> <p>The following messages are possible:</p> <ul> <li> <p> <code>SYNC_ON_HOLD</code> - The synchronization has not yet happened. This status message occurs immediately after you create your first Lightsail bucket. This status message should change after the first synchronization happens, approximately 1 hour after the first bucket is created.</p> </li> <li> <p> <code>DEFAULTED_FOR_SLR_MISSING</code> - The synchronization failed because the required service-linked role is missing from your Amazon Web Services account. The account-level BPA configuration for your Lightsail buckets is defaulted to <i>active</i> until the synchronization can occur. This means that all your buckets are private and not publicly accessible. For more information about how to create the required service-linked role to allow synchronization, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-using-service-linked-roles\">Using Service-Linked Roles for Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </li> <li> <p> <code>DEFAULTED_FOR_SLR_MISSING_ON_HOLD</code> - The synchronization failed because the required service-linked role is missing from your Amazon Web Services account. Account-level BPA is not yet configured for your Lightsail buckets. Therefore, only the bucket access permissions and individual object access permissions apply to your Lightsail buckets. For more information about how to create the required service-linked role to allow synchronization, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-using-service-linked-roles\">Using Service-Linked Roles for Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </li> <li> <p> <code>Unknown</code> - The reason that synchronization failed is unknown. Contact Amazon Web Services Support for more information.</p> </li> </ul>"
+          "documentation":"<p>A message that provides a reason for a <code>Failed</code> or <code>Defaulted</code> synchronization status.</p> <p>The following messages are possible:</p> <ul> <li> <p> <code>SYNC_ON_HOLD</code> - The synchronization has not yet happened. This status message occurs immediately after you create your first Lightsail bucket. This status message should change after the first synchronization happens, approximately 1 hour after the first bucket is created.</p> </li> <li> <p> <code>DEFAULTED_FOR_SLR_MISSING</code> - The synchronization failed because the required service-linked role is missing from your Amazon Web Services account. The account-level BPA configuration for your Lightsail buckets is defaulted to <i>active</i> until the synchronization can occur. This means that all your buckets are private and not publicly accessible. For more information about how to create the required service-linked role to allow synchronization, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-using-service-linked-roles\">Using Service-Linked Roles for Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </li> <li> <p> <code>DEFAULTED_FOR_SLR_MISSING_ON_HOLD</code> - The synchronization failed because the required service-linked role is missing from your Amazon Web Services account. Account-level BPA is not yet configured for your Lightsail buckets. Therefore, only the bucket access permissions and individual object access permissions apply to your Lightsail buckets. For more information about how to create the required service-linked role to allow synchronization, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-using-service-linked-roles\">Using Service-Linked Roles for Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </li> <li> <p> <code>Unknown</code> - The reason that synchronization failed is unknown. Contact Amazon Web Services Support for more information.</p> </li> </ul>"
         },
         "bpaImpactsLightsail":{
           "shape":"boolean",
           "documentation":"<p>A Boolean value that indicates whether account-level block public access is affecting your Lightsail buckets.</p>"
         }
       },
-      "documentation":"<p>Describes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access (BPA) feature for your Lightsail buckets.</p> <p>The account-level BPA feature of Amazon S3 provides centralized controls to limit public access to all Amazon S3 buckets in an account. BPA can make all Amazon S3 buckets in an Amazon Web Services account private regardless of the individual bucket and object permissions that are configured. Lightsail buckets take into account the Amazon S3 account-level BPA configuration when allowing or denying public access. To do this, Lightsail periodically fetches the account-level BPA configuration from Amazon S3. When the account-level BPA status is <code>InSync</code>, the Amazon S3 account-level BPA configuration is synchronized and it applies to your Lightsail buckets. For more information about Amazon Simple Storage Service account-level BPA and how it affects Lightsail buckets, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-block-public-access-for-buckets\">Block public access for buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access (BPA) feature for your Lightsail buckets.</p> <p>The account-level BPA feature of Amazon S3 provides centralized controls to limit public access to all Amazon S3 buckets in an account. BPA can make all Amazon S3 buckets in an Amazon Web Services account private regardless of the individual bucket and object permissions that are configured. Lightsail buckets take into account the Amazon S3 account-level BPA configuration when allowing or denying public access. To do this, Lightsail periodically fetches the account-level BPA configuration from Amazon S3. When the account-level BPA status is <code>InSync</code>, the Amazon S3 account-level BPA configuration is synchronized and it applies to your Lightsail buckets. For more information about Amazon Simple Storage Service account-level BPA and how it affects Lightsail buckets, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-block-public-access-for-buckets\">Block public access for buckets in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "AccountLevelBpaSyncStatus":{
       "type":"string",
@@ -3259,7 +3409,7 @@
           "documentation":"<p>Indicates whether the alarm is enabled.</p>"
         }
       },
-      "documentation":"<p>Describes an alarm.</p> <p>An alarm is a way to monitor your Lightsail resource metrics. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Describes an alarm.</p> <p>An alarm is a way to monitor your Lightsail resource metrics. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
     },
     "AlarmState":{
       "type":"string",
@@ -3690,6 +3840,10 @@
         "accessLogConfig":{
           "shape":"BucketAccessLogConfig",
           "documentation":"<p>An object that describes the access log configuration for the bucket.</p>"
+        },
+        "cors":{
+          "shape":"BucketCorsConfig",
+          "documentation":"<p>An array of cross-origin resource sharing (CORS) rules that identify origins and the HTTP methods that can be executed on your bucket. This field is only included in the response when CORS configuration is requested or when updating CORS configuration. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-cors.html\">Configuring cross-origin resource sharing (CORS)</a>.</p>"
         }
       },
       "documentation":"<p>Describes an Amazon Lightsail bucket.</p>"
@@ -3711,7 +3865,7 @@
           "documentation":"<p>The optional object prefix for the bucket access log.</p> <p>The prefix is an optional addition to the object key that organizes your access log files in the destination bucket. For example, if you specify a <code>logs/</code> prefix, then each log object will begin with the <code>logs/</code> prefix in its key (for example, <code>logs/2021-11-01-21-32-16-E568B2907131C0C0</code>).</p> <note> <p>This parameter can be optionally specified when enabling the access log for a bucket, and should be omitted when disabling the access log.</p> </note>"
         }
       },
-      "documentation":"<p>Describes the access log configuration for a bucket in the Amazon Lightsail object storage service.</p> <p>For more information about bucket access logs, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-bucket-access-logs\">Logging bucket requests using access logging in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the access log configuration for a bucket in the Amazon Lightsail object storage service.</p> <p>For more information about bucket access logs, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-bucket-access-logs\">Logging bucket requests using access logging in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "BucketAccessLogPrefix":{
       "type":"string",
@@ -3753,6 +3907,79 @@
       "type":"list",
       "member":{"shape":"BucketBundle"}
     },
+    "BucketCorsAllowedHeaders":{
+      "type":"list",
+      "member":{"shape":"string"}
+    },
+    "BucketCorsAllowedMethod":{
+      "type":"string",
+      "pattern":"^(DELETE|GET|HEAD|POST|PUT)$"
+    },
+    "BucketCorsAllowedMethods":{
+      "type":"list",
+      "member":{"shape":"BucketCorsAllowedMethod"}
+    },
+    "BucketCorsAllowedOrigins":{
+      "type":"list",
+      "member":{"shape":"string"}
+    },
+    "BucketCorsConfig":{
+      "type":"structure",
+      "members":{
+        "rules":{
+          "shape":"BucketCorsRules",
+          "documentation":"<p>A set of origins and methods (cross-origin access that you want to allow). You can add up to 20 rules to the configuration. The total size is limited to 64 KB.</p>"
+        }
+      },
+      "documentation":"<p>Describes the cross-origin resource sharing (CORS) configuration for a Lightsail bucket. CORS defines a way for client web applications that are loaded in one domain to interact with resources in a different domain. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-cors.html\">Configuring cross-origin resource sharing (CORS)</a>.</p>"
+    },
+    "BucketCorsExposeHeaders":{
+      "type":"list",
+      "member":{"shape":"string"}
+    },
+    "BucketCorsRule":{
+      "type":"structure",
+      "required":[
+        "allowedMethods",
+        "allowedOrigins"
+      ],
+      "members":{
+        "id":{
+          "shape":"BucketCorsRuleId",
+          "documentation":"<p>A unique identifier for the CORS rule. The ID value can be up to 255 characters long. The IDs help you find a rule in the configuration.</p>"
+        },
+        "allowedMethods":{
+          "shape":"BucketCorsAllowedMethods",
+          "documentation":"<p>The HTTP methods that are allowed when accessing the bucket from the specified origin. Each CORS rule must identify at least one origin and one method.</p> <p>You can use the following HTTP methods:</p> <ul> <li> <p> <code>GET</code> - Retrieves data from the server, such as downloading files or viewing content.</p> </li> <li> <p> <code>PUT</code> - Uploads or replaces data on the server, such as uploading new files.</p> </li> <li> <p> <code>POST</code> - Sends data to the server for processing, such as submitting forms or creating new resources.</p> </li> <li> <p> <code>DELETE</code> - Removes data from the server, such as deleting files or resources.</p> </li> <li> <p> <code>HEAD</code> - Retrieves only the headers from the server without the actual content, useful for checking if a resource exists.</p> </li> </ul>"
+        },
+        "allowedOrigins":{
+          "shape":"BucketCorsAllowedOrigins",
+          "documentation":"<p>One or more origins you want customers to be able to access the bucket from. Each CORS rule must identify at least one origin and one method.</p>"
+        },
+        "allowedHeaders":{
+          "shape":"BucketCorsAllowedHeaders",
+          "documentation":"<p>Headers that are specified in the <code>Access-Control-Request-Headers</code> header. These headers are allowed in a preflight <code>OPTIONS</code> request. In response to any preflight <code>OPTIONS</code> request, Amazon S3 returns any requested headers that are allowed.</p>"
+        },
+        "exposeHeaders":{
+          "shape":"BucketCorsExposeHeaders",
+          "documentation":"<p>One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript <code>XMLHttpRequest</code> object).</p>"
+        },
+        "maxAgeSeconds":{
+          "shape":"integer",
+          "documentation":"<p>The time in seconds that your browser is to cache the preflight response for the specified resource. A CORS rule can have only one <code>maxAgeSeconds</code> element.</p>"
+        }
+      },
+      "documentation":"<p>Describes a cross-origin resource sharing (CORS) rule for a Lightsail bucket. CORS rules specify which origins are allowed to access the bucket, which HTTP methods are allowed, and other access control information. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-cors.html\">Configuring cross-origin resource sharing (CORS)</a>.</p>"
+    },
+    "BucketCorsRuleId":{
+      "type":"string",
+      "max":255
+    },
+    "BucketCorsRules":{
+      "type":"list",
+      "member":{"shape":"BucketCorsRule"},
+      "max":20
+    },
     "BucketList":{
       "type":"list",
       "member":{"shape":"Bucket"}
@@ -3993,7 +4220,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "supportCode":{
           "shape":"string",
@@ -4052,7 +4279,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         }
       },
       "documentation":"<p>Describes an Amazon Lightsail SSL/TLS certificate.</p>"
@@ -4204,7 +4431,7 @@
           "documentation":"<p>The support code. Include this code in your email to support when you have questions about your Lightsail contact method. This code enables our support team to look up your Lightsail information more easily.</p>"
         }
       },
-      "documentation":"<p>Describes a contact method.</p> <p>A contact method is a way to send you notifications. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Describes a contact method.</p> <p>A contact method is a way to send you notifications. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
     },
     "ContactMethodStatus":{
       "type":"string",
@@ -4319,7 +4546,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "power":{
           "shape":"ContainerServicePowerName",
@@ -4371,7 +4598,7 @@
         },
         "privateRegistryAccess":{
           "shape":"PrivateRegistryAccess",
-          "documentation":"<p>An object that describes the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>An object that describes the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>Describes an Amazon Lightsail container service.</p>"
@@ -4441,7 +4668,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) of the role, if it is activated.</p>"
         }
       },
-      "documentation":"<p>Describes the activation status of the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>When activated, Lightsail creates an Identity and Access Management (IAM) role for the specified Lightsail container service. You can use the ARN of the role to create a trust relationship between your Lightsail container service and an Amazon ECR private repository in your Amazon Web Services account. This allows your container service to pull images from Amazon ECR private repositories. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the activation status of the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>When activated, Lightsail creates an Identity and Access Management (IAM) role for the specified Lightsail container service. You can use the ARN of the role to create a trust relationship between your Lightsail container service and an Amazon ECR private repository in your Amazon Web Services account. This allows your container service to pull images from Amazon ECR private repositories. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "ContainerServiceECRImagePullerRoleRequest":{
       "type":"structure",
@@ -4451,7 +4678,7 @@
           "documentation":"<p>A Boolean value that indicates whether to activate the role.</p>"
         }
       },
-      "documentation":"<p>Describes a request to activate or deactivate the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>When activated, Lightsail creates an Identity and Access Management (IAM) role for the specified Lightsail container service. You can use the ARN of the role to create a trust relationship between your Lightsail container service and an Amazon ECR private repository in your Amazon Web Services account. This allows your container service to pull images from Amazon ECR private repositories. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes a request to activate or deactivate the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>When activated, Lightsail creates an Identity and Access Management (IAM) role for the specified Lightsail container service. You can use the ARN of the role to create a trust relationship between your Lightsail container service and an Amazon ECR private repository in your Amazon Web Services account. This allows your container service to pull images from Amazon ECR private repositories. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "ContainerServiceEndpoint":{
       "type":"structure",
@@ -4711,15 +4938,15 @@
         },
         "sourceResourceName":{
           "shape":"string",
-          "documentation":"<p>The name of the source instance or disk from which the source automatic snapshot was created.</p> <p>Constraint:</p> <ul> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The name of the source instance or disk from which the source automatic snapshot was created.</p> <p>Constraint:</p> <ul> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "restoreDate":{
           "shape":"string",
-          "documentation":"<p>The date of the source automatic snapshot to copy. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The date of the source automatic snapshot to copy. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "useLatestRestorableAutoSnapshot":{
           "shape":"boolean",
-          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot of the specified source instance or disk.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot of the specified source instance or disk.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-keeping-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "targetSnapshotName":{
           "shape":"ResourceName",
@@ -4790,7 +5017,7 @@
       "members":{
         "bucketName":{
           "shape":"BucketName",
-          "documentation":"<p>The name for the bucket.</p> <p>For more information about bucket names, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/bucket-naming-rules-in-amazon-lightsail\">Bucket naming rules in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>The name for the bucket.</p> <p>For more information about bucket names, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/bucket-naming-rules-in-amazon-lightsail\">Bucket naming rules in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         },
         "bundleId":{
           "shape":"NonEmptyString",
@@ -4802,7 +5029,7 @@
         },
         "enableObjectVersioning":{
           "shape":"boolean",
-          "documentation":"<p>A Boolean value that indicates whether to enable versioning of objects in the bucket.</p> <p>For more information about versioning, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-managing-bucket-object-versioning\">Enabling and suspending object versioning in a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>A Boolean value that indicates whether to enable versioning of objects in the bucket.</p> <p>For more information about versioning, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-managing-bucket-object-versioning\">Enabling and suspending object versioning in a bucket in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         }
       }
     },
@@ -4885,7 +5112,7 @@
       "members":{
         "protocol":{
           "shape":"ContactProtocol",
-          "documentation":"<p>The protocol of the contact method, such as <code>Email</code> or <code>SMS</code> (text messaging).</p> <p>The <code>SMS</code> protocol is supported only in the following Amazon Web Services Regions.</p> <ul> <li> <p>US East (N. Virginia) (<code>us-east-1</code>)</p> </li> <li> <p>US West (Oregon) (<code>us-west-2</code>)</p> </li> <li> <p>Europe (Ireland) (<code>eu-west-1</code>)</p> </li> <li> <p>Asia Pacific (Tokyo) (<code>ap-northeast-1</code>)</p> </li> <li> <p>Asia Pacific (Singapore) (<code>ap-southeast-1</code>)</p> </li> <li> <p>Asia Pacific (Sydney) (<code>ap-southeast-2</code>)</p> </li> </ul> <p>For a list of countries/regions where SMS text messages can be sent, and the latest Amazon Web Services Regions where SMS text messaging is supported, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-supported-regions-countries.html\">Supported Regions and Countries</a> in the <i>Amazon SNS Developer Guide</i>.</p> <p>For more information about notifications in Amazon Lightsail, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
+          "documentation":"<p>The protocol of the contact method, such as <code>Email</code> or <code>SMS</code> (text messaging).</p> <p>The <code>SMS</code> protocol is supported only in the following Amazon Web Services Regions.</p> <ul> <li> <p>US East (N. Virginia) (<code>us-east-1</code>)</p> </li> <li> <p>US West (Oregon) (<code>us-west-2</code>)</p> </li> <li> <p>Europe (Ireland) (<code>eu-west-1</code>)</p> </li> <li> <p>Asia Pacific (Tokyo) (<code>ap-northeast-1</code>)</p> </li> <li> <p>Asia Pacific (Singapore) (<code>ap-southeast-1</code>)</p> </li> <li> <p>Asia Pacific (Sydney) (<code>ap-southeast-2</code>)</p> </li> </ul> <p>For a list of countries/regions where SMS text messages can be sent, and the latest Amazon Web Services Regions where SMS text messaging is supported, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-supported-regions-countries.html\">Supported Regions and Countries</a> in the <i>Amazon SNS Developer Guide</i>.</p> <p>For more information about notifications in Amazon Lightsail, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-notifications\">Notifications in Amazon Lightsail</a>.</p>"
         },
         "contactEndpoint":{
           "shape":"StringMax256",
@@ -4931,8 +5158,7 @@
     },
     "CreateContainerServiceRegistryLoginRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateContainerServiceRegistryLoginResult":{
       "type":"structure",
@@ -4965,7 +5191,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values to add to the container service during create.</p> <p>Use the <code>TagResource</code> action to tag a resource after it's created.</p> <p>For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values to add to the container service during create.</p> <p>Use the <code>TagResource</code> action to tag a resource after it's created.</p> <p>For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "publicDomainNames":{
           "shape":"ContainerServicePublicDomains",
@@ -4977,7 +5203,7 @@
         },
         "privateRegistryAccess":{
           "shape":"PrivateRegistryAccessRequest",
-          "documentation":"<p>An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         }
       }
     },
@@ -5024,15 +5250,15 @@
         },
         "sourceDiskName":{
           "shape":"string",
-          "documentation":"<p>The name of the source disk from which the source automatic snapshot was created.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>disk snapshot name</code> parameter. The <code>source disk name</code> and <code>disk snapshot name</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The name of the source disk from which the source automatic snapshot was created.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>disk snapshot name</code> parameter. The <code>source disk name</code> and <code>disk snapshot name</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "restoreDate":{
           "shape":"string",
-          "documentation":"<p>The date of the automatic snapshot to use for the new disk. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The date of the automatic snapshot to use for the new disk. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "useLatestRestorableAutoSnapshot":{
           "shape":"boolean",
-          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         }
       }
     },
@@ -5259,7 +5485,7 @@
         },
         "sessions":{
           "shape":"Sessions",
-          "documentation":"<p>Returns information about the specified NICE DCV GUI session.</p>"
+          "documentation":"<p>Returns information about the specified Amazon DCV GUI session.</p>"
         }
       }
     },
@@ -5323,7 +5549,7 @@
         },
         "userData":{
           "shape":"string",
-          "documentation":"<p>You can create a launch script that configures a server with additional user data. For example, <code>apt-get -y update</code>.</p> <note> <p>Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use <code>yum</code>, Debian and Ubuntu use <code>apt-get</code>, and FreeBSD uses <code>pkg</code>. For a complete list, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/compare-options-choose-lightsail-instance-image\">Amazon Lightsail Developer Guide</a>.</p> </note>"
+          "documentation":"<p>You can create a launch script that configures a server with additional user data. For example, <code>apt-get -y update</code>.</p> <note> <p>Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use <code>yum</code>, Debian and Ubuntu use <code>apt-get</code>, and FreeBSD uses <code>pkg</code>. For a complete list, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/compare-options-choose-lightsail-instance-image\">Amazon Lightsail Developer Guide</a>.</p> </note>"
         },
         "keyPairName":{
           "shape":"ResourceName",
@@ -5343,15 +5569,15 @@
         },
         "sourceInstanceName":{
           "shape":"string",
-          "documentation":"<p>The name of the source instance from which the source automatic snapshot was created.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>instance snapshot name</code> parameter. The <code>source instance name</code> and <code>instance snapshot name</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The name of the source instance from which the source automatic snapshot was created.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>instance snapshot name</code> parameter. The <code>source instance name</code> and <code>instance snapshot name</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "restoreDate":{
           "shape":"string",
-          "documentation":"<p>The date of the automatic snapshot to use for the new instance. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>The date of the automatic snapshot to use for the new instance. Use the <code>get auto snapshots</code> operation to identify the dates of the available automatic snapshots.</p> <p>Constraints:</p> <ul> <li> <p>Must be specified in <code>YYYY-MM-DD</code> format.</p> </li> <li> <p>This parameter cannot be defined together with the <code>use latest restorable auto snapshot</code> parameter. The <code>restore date</code> and <code>use latest restorable auto snapshot</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         },
         "useLatestRestorableAutoSnapshot":{
           "shape":"boolean",
-          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
+          "documentation":"<p>A Boolean value to indicate whether to use the latest available automatic snapshot.</p> <p>Constraints:</p> <ul> <li> <p>This parameter cannot be defined together with the <code>restore date</code> parameter. The <code>use latest restorable auto snapshot</code> and <code>restore date</code> parameters are mutually exclusive.</p> </li> <li> <p>Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configuring-automatic-snapshots\">Amazon Lightsail Developer Guide</a>.</p> </li> </ul>"
         }
       }
     },
@@ -5396,7 +5622,7 @@
         },
         "userData":{
           "shape":"string",
-          "documentation":"<p>A launch script you can create that configures a server with additional user data. For example, you might want to run <code>apt-get -y update</code>.</p> <note> <p>Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use <code>yum</code>, Debian and Ubuntu use <code>apt-get</code>, and FreeBSD uses <code>pkg</code>. For a complete list, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/compare-options-choose-lightsail-instance-image\">Amazon Lightsail Developer Guide</a>.</p> </note>"
+          "documentation":"<p>A launch script you can create that configures a server with additional user data. For example, you might want to run <code>apt-get -y update</code>.</p> <note> <p>Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use <code>yum</code>, Debian and Ubuntu use <code>apt-get</code>, and FreeBSD uses <code>pkg</code>. For a complete list, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/compare-options-choose-lightsail-instance-image\">Amazon Lightsail Developer Guide</a>.</p> </note>"
         },
         "keyPairName":{
           "shape":"ResourceName",
@@ -5501,7 +5727,7 @@
         },
         "tlsPolicyName":{
           "shape":"string",
-          "documentation":"<p>The name of the TLS policy to apply to the load balancer.</p> <p>Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetLoadBalancerTlsPolicies.html\">GetLoadBalancerTlsPolicies</a> action to get a list of TLS policy names that you can specify.</p> <p>For more information about load balancer TLS policies, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>The name of the TLS policy to apply to the load balancer.</p> <p>Use the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_GetLoadBalancerTlsPolicies.html\">GetLoadBalancerTlsPolicies</a> action to get a list of TLS policy names that you can specify.</p> <p>For more information about load balancer TLS policies, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         }
       }
     },
@@ -5854,8 +6080,7 @@
     },
     "DeleteContainerImageResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContainerServiceRequest":{
       "type":"structure",
@@ -5869,8 +6094,7 @@
     },
     "DeleteContainerServiceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDiskRequest":{
       "type":"structure",
@@ -6308,7 +6532,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "addOns":{
           "shape":"AddOnList",
@@ -6436,7 +6660,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "sizeInGb":{
           "shape":"integer",
@@ -6563,7 +6787,7 @@
           "documentation":"<p>The message that describes the reason for the status code.</p>"
         }
       },
-      "documentation":"<p>Describes the creation state of the canonical name (CNAME) records that are automatically added by Amazon Lightsail to the DNS of a domain to validate domain ownership for an SSL/TLS certificate.</p> <p>When you create an SSL/TLS certificate for a Lightsail resource, you must add a set of CNAME records to the DNS of the domains for the certificate to validate that you own the domains. Lightsail can automatically add the CNAME records to the DNS of the domain if the DNS zone for the domain exists within your Lightsail account. If automatic record addition fails, or if you manage the DNS of your domain using a third-party service, then you must manually add the CNAME records to the DNS of your domain. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/verify-tls-ssl-certificate-using-dns-cname-https\">Verify an SSL/TLS certificate in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the creation state of the canonical name (CNAME) records that are automatically added by Amazon Lightsail to the DNS of a domain to validate domain ownership for an SSL/TLS certificate.</p> <p>When you create an SSL/TLS certificate for a Lightsail resource, you must add a set of CNAME records to the DNS of the domains for the certificate to validate that you own the domains. Lightsail can automatically add the CNAME records to the DNS of the domain if the DNS zone for the domain exists within your Lightsail account. If automatic record addition fails, or if you manage the DNS of your domain using a third-party service, then you must manually add the CNAME records to the DNS of your domain. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/verify-tls-ssl-certificate-using-dns-cname-https\">Verify an SSL/TLS certificate in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "DnsRecordCreationStateCode":{
       "type":"string",
@@ -6602,7 +6826,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "domainEntries":{
           "shape":"DomainEntryList",
@@ -6694,8 +6918,7 @@
     },
     "DownloadDefaultKeyPairRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DownloadDefaultKeyPairResult":{
       "type":"structure",
@@ -7134,6 +7357,10 @@
         "includeConnectedResources":{
           "shape":"boolean",
           "documentation":"<p>A Boolean value that indicates whether to include Lightsail instances that were given access to the bucket using the <a href=\"https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_SetResourceAccessForBucket.html\">SetResourceAccessForBucket</a> action.</p>"
+        },
+        "includeCors":{
+          "shape":"boolean",
+          "documentation":"<p>A Boolean value that indicates whether to include Lightsail bucket CORS configuration in the response. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-cors.html\">Configuring cross-origin resource sharing (CORS)</a>.</p> <note> <p>This parameter is only supported when getting a single bucket with <code>bucketName</code> specified. The default value for this parameter is <code>False</code>.</p> </note>"
         }
       }
     },
@@ -7150,7 +7377,7 @@
         },
         "accountLevelBpaSync":{
           "shape":"AccountLevelBpaSync",
-          "documentation":"<p>An object that describes the synchronization status of the Amazon S3 account-level block public access feature for your Lightsail buckets.</p> <p>For more information about this feature and how it affects Lightsail buckets, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-block-public-access-for-buckets\">Block public access for buckets in Amazon Lightsail</a>.</p>"
+          "documentation":"<p>An object that describes the synchronization status of the Amazon S3 account-level block public access feature for your Lightsail buckets.</p> <p>For more information about this feature and how it affects Lightsail buckets, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-block-public-access-for-buckets\">Block public access for buckets in Amazon Lightsail</a>.</p>"
         }
       }
     },
@@ -7260,8 +7487,7 @@
     },
     "GetContainerAPIMetadataRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetContainerAPIMetadataResult":{
       "type":"structure",
@@ -7408,8 +7634,7 @@
     },
     "GetContainerServicePowersRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetContainerServicePowersResult":{
       "type":"structure",
@@ -7544,8 +7769,7 @@
     },
     "GetDistributionBundlesRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetDistributionBundlesResult":{
       "type":"structure",
@@ -7763,7 +7987,7 @@
         },
         "metricName":{
           "shape":"InstanceMetricName",
-          "documentation":"<p>The metric for which you want to return information.</p> <p>Valid instance metric names are listed below, along with the most useful <code>statistics</code> to include in your request, and the published <code>unit</code> value.</p> <ul> <li> <p> <b> <code>BurstCapacityPercentage</code> </b> - The percentage of CPU performance available for your instance to burst above its baseline. Your instance continuously accrues and consumes burst capacity. Burst capacity stops accruing when your instance's <code>BurstCapacityPercentage</code> reaches 100%. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-viewing-instance-burst-capacity\">Viewing instance burst capacity in Amazon Lightsail</a>.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Percent</code>.</p> </li> <li> <p> <b> <code>BurstCapacityTime</code> </b> - The available amount of time for your instance to burst at 100% CPU utilization. Your instance continuously accrues and consumes burst capacity. Burst capacity time stops accruing when your instance's <code>BurstCapacityPercentage</code> metric reaches 100%.</p> <p>Burst capacity time is consumed at the full rate only when your instance operates at 100% CPU utilization. For example, if your instance operates at 50% CPU utilization in the burstable zone for a 5-minute period, then it consumes CPU burst capacity minutes at a 50% rate in that period. Your instance consumed 2 minutes and 30 seconds of CPU burst capacity minutes in the 5-minute period. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-viewing-instance-burst-capacity\">Viewing instance burst capacity in Amazon Lightsail</a>.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Seconds</code>.</p> </li> <li> <p> <b> <code>CPUUtilization</code> </b> - The percentage of allocated compute units that are currently in use on the instance. This metric identifies the processing power to run the applications on the instance. Tools in your operating system can show a lower percentage than Lightsail when the instance is not allocated a full processor core.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Percent</code>.</p> </li> <li> <p> <b> <code>NetworkIn</code> </b> - The number of bytes received on all network interfaces by the instance. This metric identifies the volume of incoming network traffic to the instance. The number reported is the number of bytes received during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Bytes</code>.</p> </li> <li> <p> <b> <code>NetworkOut</code> </b> - The number of bytes sent out on all network interfaces by the instance. This metric identifies the volume of outgoing network traffic from the instance. The number reported is the number of bytes sent during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Bytes</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed</code> </b> - Reports whether the instance passed or failed both the instance status check and the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed_Instance</code> </b> - Reports whether the instance passed or failed the instance status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed_System</code> </b> - Reports whether the instance passed or failed the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>MetadataNoToken</code> </b> - Reports the number of times that the instance metadata service was successfully accessed without a token. This metric determines if there are any processes accessing instance metadata by using Instance Metadata Service Version 1, which doesn't use a token. If all requests use token-backed sessions, such as Instance Metadata Service Version 2, then the value is 0.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> </ul>"
+          "documentation":"<p>The metric for which you want to return information.</p> <p>Valid instance metric names are listed below, along with the most useful <code>statistics</code> to include in your request, and the published <code>unit</code> value.</p> <ul> <li> <p> <b> <code>BurstCapacityPercentage</code> </b> - The percentage of CPU performance available for your instance to burst above its baseline. Your instance continuously accrues and consumes burst capacity. Burst capacity stops accruing when your instance's <code>BurstCapacityPercentage</code> reaches 100%. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-viewing-instance-burst-capacity\">Viewing instance burst capacity in Amazon Lightsail</a>.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Percent</code>.</p> </li> <li> <p> <b> <code>BurstCapacityTime</code> </b> - The available amount of time for your instance to burst at 100% CPU utilization. Your instance continuously accrues and consumes burst capacity. Burst capacity time stops accruing when your instance's <code>BurstCapacityPercentage</code> metric reaches 100%.</p> <p>Burst capacity time is consumed at the full rate only when your instance operates at 100% CPU utilization. For example, if your instance operates at 50% CPU utilization in the burstable zone for a 5-minute period, then it consumes CPU burst capacity minutes at a 50% rate in that period. Your instance consumed 2 minutes and 30 seconds of CPU burst capacity minutes in the 5-minute period. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-viewing-instance-burst-capacity\">Viewing instance burst capacity in Amazon Lightsail</a>.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Seconds</code>.</p> </li> <li> <p> <b> <code>CPUUtilization</code> </b> - The percentage of allocated compute units that are currently in use on the instance. This metric identifies the processing power to run the applications on the instance. Tools in your operating system can show a lower percentage than Lightsail when the instance is not allocated a full processor core.</p> <p> <code>Statistics</code>: The most useful statistics are <code>Maximum</code> and <code>Average</code>.</p> <p> <code>Unit</code>: The published unit is <code>Percent</code>.</p> </li> <li> <p> <b> <code>NetworkIn</code> </b> - The number of bytes received on all network interfaces by the instance. This metric identifies the volume of incoming network traffic to the instance. The number reported is the number of bytes received during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Bytes</code>.</p> </li> <li> <p> <b> <code>NetworkOut</code> </b> - The number of bytes sent out on all network interfaces by the instance. This metric identifies the volume of outgoing network traffic from the instance. The number reported is the number of bytes sent during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Bytes</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed</code> </b> - Reports whether the instance passed or failed both the instance status check and the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed_Instance</code> </b> - Reports whether the instance passed or failed the instance status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>StatusCheckFailed_System</code> </b> - Reports whether the instance passed or failed the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> <li> <p> <b> <code>MetadataNoToken</code> </b> - Reports the number of times that the instance metadata service was successfully accessed without a token. This metric determines if there are any processes accessing instance metadata by using Instance Metadata Service Version 1, which doesn't use a token. If all requests use token-backed sessions, such as Instance Metadata Service Version 2, then the value is 0.</p> <p> <code>Statistics</code>: The most useful statistic is <code>Sum</code>.</p> <p> <code>Unit</code>: The published unit is <code>Count</code>.</p> </li> </ul>"
         },
         "period":{
           "shape":"MetricPeriod",
@@ -8787,7 +9011,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "blueprintId":{
           "shape":"NonEmptyString",
@@ -9025,7 +9249,7 @@
         },
         "httpTokens":{
           "shape":"HttpTokens",
-          "documentation":"<p>The state of token usage for your instance metadata requests.</p> <p>If the state is <code>optional</code>, you can choose whether to retrieve instance metadata with a signed token header on your request. If you retrieve the IAM role credentials without a token, the version 1.0 role credentials are returned. If you retrieve the IAM role credentials by using a valid signed token, the version 2.0 role credentials are returned.</p> <p>If the state is <code>required</code>, you must send a signed token header with all instance metadata retrieval requests. In this state, retrieving the IAM role credential always returns the version 2.0 credentials. The version 1.0 credentials are not available.</p> <important> <p>Not all instance blueprints in Lightsail support version 2.0 credentials. Use the <code>MetadataNoToken</code> instance metric to track the number of calls to the instance metadata service that are using version 1.0 credentials. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-viewing-instance-health-metrics\">Viewing instance metrics in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </important>"
+          "documentation":"<p>The state of token usage for your instance metadata requests.</p> <p>If the state is <code>optional</code>, you can choose whether to retrieve instance metadata with a signed token header on your request. If you retrieve the IAM role credentials without a token, the version 1.0 role credentials are returned. If you retrieve the IAM role credentials by using a valid signed token, the version 2.0 role credentials are returned.</p> <p>If the state is <code>required</code>, you must send a signed token header with all instance metadata retrieval requests. In this state, retrieving the IAM role credential always returns the version 2.0 credentials. The version 1.0 credentials are not available.</p> <important> <p>Not all instance blueprints in Lightsail support version 2.0 credentials. Use the <code>MetadataNoToken</code> instance metric to track the number of calls to the instance metadata service that are using version 1.0 credentials. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-viewing-instance-health-metrics\">Viewing instance metrics in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p> </important>"
         },
         "httpEndpoint":{
           "shape":"HttpEndpoint",
@@ -9205,7 +9429,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "state":{
           "shape":"InstanceSnapshotState",
@@ -9323,8 +9547,7 @@
     },
     "IsVpcPeeredRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "IsVpcPeeredResult":{
       "type":"structure",
@@ -9367,7 +9590,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "fingerprint":{
           "shape":"Base64",
@@ -9461,7 +9684,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "viewerMinimumTlsProtocolVersion":{
           "shape":"string",
@@ -9499,7 +9722,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "dnsName":{
           "shape":"NonEmptyString",
@@ -9634,7 +9857,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "loadBalancerName":{
           "shape":"ResourceName",
@@ -9900,7 +10123,7 @@
           "documentation":"<p>The ciphers used by the TLS security policy.</p> <p>The ciphers are listed in order of preference.</p>"
         }
       },
-      "documentation":"<p>Describes the TLS security policies that are available for Lightsail load balancers.</p> <p>For more information about load balancer TLS security policies, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the TLS security policies that are available for Lightsail load balancers.</p> <p>For more information about load balancer TLS security policies, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-configure-load-balancer-tls-security-policy\">Configuring TLS security policies on your Amazon Lightsail load balancers</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "LoadBalancerTlsPolicyList":{
       "type":"list",
@@ -10059,7 +10282,7 @@
           "documentation":"<p>The Lightsail resource type of the resource being monitored.</p> <p>Instances, load balancers, and relational databases are the only Lightsail resources that can currently be monitored by alarms.</p>"
         }
       },
-      "documentation":"<p>Describes resource being monitored by an alarm.</p> <p>An alarm is a way to monitor your Amazon Lightsail resource metrics. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
+      "documentation":"<p>Describes resource being monitored by an alarm.</p> <p>An alarm is a way to monitor your Amazon Lightsail resource metrics. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-alarms\">Alarms in Amazon Lightsail</a>.</p>"
     },
     "MonthlyTransfer":{
       "type":"structure",
@@ -10083,7 +10306,7 @@
           "documentation":"<p>The message that describes the reason for the status code.</p>"
         }
       },
-      "documentation":"<p>Describes the state of the name server records update made by Amazon Lightsail to an Amazon Route 53 registered domain.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/understanding-dns-in-amazon-lightsail\">DNS in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the state of the name server records update made by Amazon Lightsail to an Amazon Route 53 registered domain.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/understanding-dns-in-amazon-lightsail\">DNS in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "NameServersUpdateStateCode":{
       "type":"string",
@@ -10370,8 +10593,7 @@
     },
     "PeerVpcRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PeerVpcResult":{
       "type":"structure",
@@ -10511,7 +10733,7 @@
           "documentation":"<p>An object that describes the activation status of the role that you can use to grant a Lightsail container service access to Amazon ECR private repositories. If the role is activated, the Amazon Resource Name (ARN) of the role is also listed.</p>"
         }
       },
-      "documentation":"<p>Describes the configuration for an Amazon Lightsail container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the configuration for an Amazon Lightsail container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "PrivateRegistryAccessRequest":{
       "type":"structure",
@@ -10521,7 +10743,7 @@
           "documentation":"<p>An object to describe a request to activate or deactivate the role that you can use to grant an Amazon Lightsail container service access to Amazon Elastic Container Registry (Amazon ECR) private repositories.</p>"
         }
       },
-      "documentation":"<p>Describes a request to configure an Amazon Lightsail container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes a request to configure an Amazon Lightsail container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "PutAlarmRequest":{
       "type":"structure",
@@ -10540,7 +10762,7 @@
         },
         "metricName":{
           "shape":"MetricName",
-          "documentation":"<p>The name of the metric to associate with the alarm.</p> <p>You can configure up to two alarms per metric.</p> <p>The following metrics are available for each resource type:</p> <ul> <li> <p> <b>Instances</b>: <code>BurstCapacityPercentage</code>, <code>BurstCapacityTime</code>, <code>CPUUtilization</code>, <code>NetworkIn</code>, <code>NetworkOut</code>, <code>StatusCheckFailed</code>, <code>StatusCheckFailed_Instance</code>, and <code>StatusCheckFailed_System</code>.</p> </li> <li> <p> <b>Load balancers</b>: <code>ClientTLSNegotiationErrorCount</code>, <code>HealthyHostCount</code>, <code>UnhealthyHostCount</code>, <code>HTTPCode_LB_4XX_Count</code>, <code>HTTPCode_LB_5XX_Count</code>, <code>HTTPCode_Instance_2XX_Count</code>, <code>HTTPCode_Instance_3XX_Count</code>, <code>HTTPCode_Instance_4XX_Count</code>, <code>HTTPCode_Instance_5XX_Count</code>, <code>InstanceResponseTime</code>, <code>RejectedConnectionCount</code>, and <code>RequestCount</code>.</p> </li> <li> <p> <b>Relational databases</b>: <code>CPUUtilization</code>, <code>DatabaseConnections</code>, <code>DiskQueueDepth</code>, <code>FreeStorageSpace</code>, <code>NetworkReceiveThroughput</code>, and <code>NetworkTransmitThroughput</code>.</p> </li> </ul> <p>For more information about these metrics, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-resource-health-metrics#available-metrics\">Metrics available in Lightsail</a>.</p>"
+          "documentation":"<p>The name of the metric to associate with the alarm.</p> <p>You can configure up to two alarms per metric.</p> <p>The following metrics are available for each resource type:</p> <ul> <li> <p> <b>Instances</b>: <code>BurstCapacityPercentage</code>, <code>BurstCapacityTime</code>, <code>CPUUtilization</code>, <code>NetworkIn</code>, <code>NetworkOut</code>, <code>StatusCheckFailed</code>, <code>StatusCheckFailed_Instance</code>, and <code>StatusCheckFailed_System</code>.</p> </li> <li> <p> <b>Load balancers</b>: <code>ClientTLSNegotiationErrorCount</code>, <code>HealthyHostCount</code>, <code>UnhealthyHostCount</code>, <code>HTTPCode_LB_4XX_Count</code>, <code>HTTPCode_LB_5XX_Count</code>, <code>HTTPCode_Instance_2XX_Count</code>, <code>HTTPCode_Instance_3XX_Count</code>, <code>HTTPCode_Instance_4XX_Count</code>, <code>HTTPCode_Instance_5XX_Count</code>, <code>InstanceResponseTime</code>, <code>RejectedConnectionCount</code>, and <code>RequestCount</code>.</p> </li> <li> <p> <b>Relational databases</b>: <code>CPUUtilization</code>, <code>DatabaseConnections</code>, <code>DiskQueueDepth</code>, <code>FreeStorageSpace</code>, <code>NetworkReceiveThroughput</code>, and <code>NetworkTransmitThroughput</code>.</p> </li> </ul> <p>For more information about these metrics, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-resource-health-metrics#available-metrics\">Metrics available in Lightsail</a>.</p>"
         },
         "monitoredResourceName":{
           "shape":"ResourceName",
@@ -10749,9 +10971,27 @@
         "ap-southeast-2",
         "ap-northeast-1",
         "ap-northeast-2",
-        "eu-north-1"
+        "eu-north-1",
+        "ap-southeast-3"
       ]
     },
+    "RegionSetupInProgressException":{
+      "type":"structure",
+      "members":{
+        "code":{"shape":"string"},
+        "docs":{
+          "shape":"string",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/understanding-regions-and-availability-zones-in-amazon-lightsail.html\">Regions and Availability Zones for Lightsail</a> </p>"
+        },
+        "message":{"shape":"string"},
+        "tip":{
+          "shape":"string",
+          "documentation":"<p>Opt-in Regions typically take a few minutes to finish setting up before you can work with them. Wait a few minutes and try again.</p>"
+        }
+      },
+      "documentation":"<p>Lightsail throws this exception when an operation is performed on resources in an opt-in Region that is currently being set up.</p>",
+      "exception":true
+    },
     "RegisterContainerImageRequest":{
       "type":"structure",
       "required":[
@@ -10795,7 +11035,7 @@
           "documentation":"<p>Describes the deletion state of an Amazon Route 53 hosted zone for a domain that is being automatically delegated to an Amazon Lightsail DNS zone.</p>"
         }
       },
-      "documentation":"<p>Describes the delegation state of an Amazon Route 53 registered domain to Amazon Lightsail.</p> <p>When you delegate an Amazon Route 53 registered domain to Lightsail, you can manage the DNS of the domain using a Lightsail DNS zone. You no longer use the Route 53 hosted zone to manage the DNS of the domain. To delegate the domain, Lightsail automatically updates the domain's name servers in Route 53 to the name servers of the Lightsail DNS zone. Then, Lightsail automatically deletes the Route 53 hosted zone for the domain.</p> <p>All of the following conditions must be true for automatic domain delegation to be successful:</p> <ul> <li> <p>The registered domain must be in the same Amazon Web Services account as the Lightsail account making the request.</p> </li> <li> <p>The user or entity making the request must have permission to manage domains in Route 53.</p> </li> <li> <p>The Route 53 hosted zone for the domain must be empty. It cannot contain DNS records other than start of authority (SOA) and name server records.</p> </li> </ul> <p>If automatic domain delegation fails, or if you manage the DNS of your domain using a service other than Route 53, then you must manually add the Lightsail DNS zone name servers to your domain in order to delegate management of its DNS to Lightsail. For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-how-to-create-dns-entry\">Creating a DNS zone to manage your domain’s records in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+      "documentation":"<p>Describes the delegation state of an Amazon Route 53 registered domain to Amazon Lightsail.</p> <p>When you delegate an Amazon Route 53 registered domain to Lightsail, you can manage the DNS of the domain using a Lightsail DNS zone. You no longer use the Route 53 hosted zone to manage the DNS of the domain. To delegate the domain, Lightsail automatically updates the domain's name servers in Route 53 to the name servers of the Lightsail DNS zone. Then, Lightsail automatically deletes the Route 53 hosted zone for the domain.</p> <p>All of the following conditions must be true for automatic domain delegation to be successful:</p> <ul> <li> <p>The registered domain must be in the same Amazon Web Services account as the Lightsail account making the request.</p> </li> <li> <p>The user or entity making the request must have permission to manage domains in Route 53.</p> </li> <li> <p>The Route 53 hosted zone for the domain must be empty. It cannot contain DNS records other than start of authority (SOA) and name server records.</p> </li> </ul> <p>If automatic domain delegation fails, or if you manage the DNS of your domain using a service other than Route 53, then you must manually add the Lightsail DNS zone name servers to your domain in order to delegate management of its DNS to Lightsail. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/lightsail-how-to-create-dns-entry\">Creating a DNS zone to manage your domain’s records in Amazon Lightsail</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
     },
     "RelationalDatabase":{
       "type":"structure",
@@ -10826,7 +11066,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "relationalDatabaseBlueprintId":{
           "shape":"NonEmptyString",
@@ -11143,7 +11383,7 @@
         },
         "tags":{
           "shape":"TagList",
-          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+          "documentation":"<p>The tag keys and optional values for the resource. For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
         },
         "engine":{
           "shape":"NonEmptyString",
@@ -11440,7 +11680,7 @@
           "documentation":"<p>When true, this Boolean value indicates the primary session for the specified resource.</p>"
         }
       },
-      "documentation":"<p>Describes a web-based, remote graphical user interface (GUI), NICE DCV session. The session is used to access a virtual computer’s operating system or application.</p>"
+      "documentation":"<p>Describes a web-based, remote graphical user interface (GUI), Amazon DCV session. The session is used to access a virtual computer’s operating system or application.</p>"
     },
     "Sessions":{
       "type":"list",
@@ -11908,7 +12148,7 @@
           "documentation":"<p>The value of the tag.</p> <p>Constraints: Tag values accept a maximum of 256 letters, numbers, spaces in UTF-8, or the following characters: + - = . _ : / @</p>"
         }
       },
-      "documentation":"<p>Describes a tag key and optional value assigned to an Amazon Lightsail resource.</p> <p>For more information about tags in Lightsail, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
+      "documentation":"<p>Describes a tag key and optional value assigned to an Amazon Lightsail resource.</p> <p>For more information about tags in Lightsail, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-tags\">Amazon Lightsail Developer Guide</a>.</p>"
     },
     "TagKey":{"type":"string"},
     "TagKeyList":{
@@ -12016,8 +12256,7 @@
     },
     "UnpeerVpcRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UnpeerVpcResult":{
       "type":"structure",
@@ -12107,6 +12346,10 @@
         "accessLogConfig":{
           "shape":"BucketAccessLogConfig",
           "documentation":"<p>An object that describes the access log configuration for the bucket.</p>"
+        },
+        "cors":{
+          "shape":"BucketCorsConfig",
+          "documentation":"<p>Sets the cross-origin resource sharing (CORS) configuration for your bucket. If a CORS configuration exists, it is replaced with the specified configuration. For AWS CLI operations, this parameter can also be passed as a file. For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/configure-cors.html\">Configuring cross-origin resource sharing (CORS)</a>.</p> <note> <p>CORS information is only returned in a response when you update the CORS policy.</p> </note>"
         }
       }
     },
@@ -12149,7 +12392,7 @@
         },
         "privateRegistryAccess":{
           "shape":"PrivateRegistryAccessRequest",
-          "documentation":"<p>An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
+          "documentation":"<p>An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/amazon-lightsail-container-service-ecr-private-repo-access\">Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service</a> in the <i>Amazon Lightsail Developer Guide</i>.</p>"
         }
       }
     },
@@ -12433,5 +12676,5 @@
     "string":{"type":"string"},
     "timestamp":{"type":"timestamp"}
   },
-  "documentation":"<p>Amazon Lightsail is the easiest way to get started with Amazon Web Services (Amazon Web Services) for developers who need to build websites or web applications. It includes everything you need to launch your project quickly - instances (virtual private servers), container services, storage buckets, managed databases, SSD-based block storage, static IP addresses, load balancers, content delivery network (CDN) distributions, DNS management of registered domains, and resource snapshots (backups) - for a low, predictable monthly price.</p> <p>You can manage your Lightsail resources using the Lightsail console, Lightsail API, Command Line Interface (CLI), or SDKs. For more information about Lightsail concepts and tasks, see the <a href=\"https://lightsail.aws.amazon.com/ls/docs/en_us/articles/lightsail-how-to-set-up-access-keys-to-use-sdk-api-cli\">Amazon Lightsail Developer Guide</a>.</p> <p>This API Reference provides detailed information about the actions, data types, parameters, and errors of the Lightsail service. For more information about the supported Amazon Web Services Regions, endpoints, and service quotas of the Lightsail service, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lightsail.html\">Amazon Lightsail Endpoints and Quotas</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+  "documentation":"<p>Amazon Lightsail is the easiest way to get started with Amazon Web Services (Amazon Web Services) for developers who need to build websites or web applications. It includes everything you need to launch your project quickly - instances (virtual private servers), container services, storage buckets, managed databases, SSD-based block storage, static IP addresses, load balancers, content delivery network (CDN) distributions, DNS management of registered domains, and resource snapshots (backups) - for a low, predictable monthly price.</p> <p>You can manage your Lightsail resources using the Lightsail console, Lightsail API, Command Line Interface (CLI), or SDKs. For more information about Lightsail concepts and tasks, see the <a href=\"https://docs.aws.amazon.com/lightsail/latest/userguide/lightsail-how-to-set-up-and-configure-aws-cli\">Amazon Lightsail Developer Guide</a>.</p> <p>This API Reference provides detailed information about the actions, data types, parameters, and errors of the Lightsail service. For more information about the supported Amazon Web Services Regions, endpoints, and service quotas of the Lightsail service, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/lightsail.html\">Amazon Lightsail Endpoints and Quotas</a> in the <i>Amazon Web Services General Reference</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/location/2020-11-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/location/2020-11-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/location/2020-11-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/location/2020-11-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/location/2020-11-19/service-2.json 2.31.35-1/awscli/botocore/data/location/2020-11-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/location/2020-11-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/location/2020-11-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-11-19",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"geo",
     "protocol":"rest-json",
     "protocols":["rest-json"],
@@ -23,8 +24,8 @@
       "output":{"shape":"AssociateTrackerConsumerResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -107,7 +108,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Lists the latest device positions for requested devices.</p>",
-      "endpoint":{"hostPrefix":"tracking."}
+      "endpoint":{"hostPrefix":"tracking."},
+      "readonly":true
     },
     "BatchPutGeofence":{
       "name":"BatchPutGeofence",
@@ -163,8 +165,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/calculate-route.html\">Calculates a route</a> given the following required parameters: <code>DeparturePosition</code> and <code>DestinationPosition</code>. Requires that you first <a href=\"https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html\">create a route calculator resource</a>.</p> <p>By default, a request that doesn't specify a departure time uses the best time of day to travel with the best traffic conditions when calculating the route.</p> <p>Additional options include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/departure-time.html\">Specifying a departure time</a> using either <code>DepartureTime</code> or <code>DepartNow</code>. This calculates a route based on predictive traffic data at the given time. </p> <note> <p>You can't specify both <code>DepartureTime</code> and <code>DepartNow</code> in a single request. Specifying both parameters returns a validation error.</p> </note> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/travel-mode.html\">Specifying a travel mode</a> using TravelMode sets the transportation mode used to calculate the routes. This also lets you specify additional route preferences in <code>CarModeOptions</code> if traveling by <code>Car</code>, or <code>TruckModeOptions</code> if traveling by <code>Truck</code>.</p> <note> <p>If you specify <code>walking</code> for the travel mode and your data provider is Esri, the start and destination must be within 40km.</p> </note> </li> </ul>",
-      "endpoint":{"hostPrefix":"routes."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to <a href=\"/location/latest/APIReference/API_CalculateRoutes.html\"> <code>CalculateRoutes</code> </a> or <a href=\"/location/latest/APIReference/API_CalculateIsolines.html\"> <code>CalculateIsolines</code> </a> unless you require Grab data.</p> <ul> <li> <p> <code>CalculateRoute</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>CalculateRoutes</code> operation gives better results for point-to-point routing, while the version 2 <code>CalculateIsolines</code> operation adds support for calculating service areas and travel time envelopes.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> </ul> </important> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/calculate-route.html\">Calculates a route</a> given the following required parameters: <code>DeparturePosition</code> and <code>DestinationPosition</code>. Requires that you first <a href=\"https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html\">create a route calculator resource</a>.</p> <p>By default, a request that doesn't specify a departure time uses the best time of day to travel with the best traffic conditions when calculating the route.</p> <p>Additional options include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/departure-time.html\">Specifying a departure time</a> using either <code>DepartureTime</code> or <code>DepartNow</code>. This calculates a route based on predictive traffic data at the given time. </p> <note> <p>You can't specify both <code>DepartureTime</code> and <code>DepartNow</code> in a single request. Specifying both parameters returns a validation error.</p> </note> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/travel-mode.html\">Specifying a travel mode</a> using TravelMode sets the transportation mode used to calculate the routes. This also lets you specify additional route preferences in <code>CarModeOptions</code> if traveling by <code>Car</code>, or <code>TruckModeOptions</code> if traveling by <code>Truck</code>.</p> <note> <p>If you specify <code>walking</code> for the travel mode and your data provider is Esri, the start and destination must be within 40km.</p> </note> </li> </ul></p>",
+      "endpoint":{"hostPrefix":"routes."},
+      "readonly":true
     },
     "CalculateRouteMatrix":{
       "name":"CalculateRouteMatrix",
@@ -182,8 +185,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html\"> Calculates a route matrix</a> given the following required parameters: <code>DeparturePositions</code> and <code>DestinationPositions</code>. <code>CalculateRouteMatrix</code> calculates routes and returns the travel time and travel distance from each departure position to each destination position in the request. For example, given departure positions A and B, and destination positions X and Y, <code>CalculateRouteMatrix</code> will return time and distance for routes from A to X, A to Y, B to X, and B to Y (in that order). The number of results returned (and routes calculated) will be the number of <code>DeparturePositions</code> times the number of <code>DestinationPositions</code>.</p> <note> <p>Your account is charged for each route calculated, not the number of requests.</p> </note> <p>Requires that you first <a href=\"https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html\">create a route calculator resource</a>.</p> <p>By default, a request that doesn't specify a departure time uses the best time of day to travel with the best traffic conditions when calculating routes.</p> <p>Additional options include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/departure-time.html\"> Specifying a departure time</a> using either <code>DepartureTime</code> or <code>DepartNow</code>. This calculates routes based on predictive traffic data at the given time. </p> <note> <p>You can't specify both <code>DepartureTime</code> and <code>DepartNow</code> in a single request. Specifying both parameters returns a validation error.</p> </note> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/travel-mode.html\">Specifying a travel mode</a> using TravelMode sets the transportation mode used to calculate the routes. This also lets you specify additional route preferences in <code>CarModeOptions</code> if traveling by <code>Car</code>, or <code>TruckModeOptions</code> if traveling by <code>Truck</code>.</p> </li> </ul>",
-      "endpoint":{"hostPrefix":"routes."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the <a href=\"/location/latest/APIReference/API_CalculateRouteMatrix.html\">V2 <code>CalculateRouteMatrix</code> </a> unless you require Grab data.</p> <ul> <li> <p>This version of <code>CalculateRouteMatrix</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>CalculateRouteMatrix</code> operation gives better results for matrix routing calculations.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/calculate-route-matrix.html\"> Calculates a route matrix</a> given the following required parameters: <code>DeparturePositions</code> and <code>DestinationPositions</code>. <code>CalculateRouteMatrix</code> calculates routes and returns the travel time and travel distance from each departure position to each destination position in the request. For example, given departure positions A and B, and destination positions X and Y, <code>CalculateRouteMatrix</code> will return time and distance for routes from A to X, A to Y, B to X, and B to Y (in that order). The number of results returned (and routes calculated) will be the number of <code>DeparturePositions</code> times the number of <code>DestinationPositions</code>.</p> <note> <p>Your account is charged for each route calculated, not the number of requests.</p> </note> <p>Requires that you first <a href=\"https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html\">create a route calculator resource</a>.</p> <p>By default, a request that doesn't specify a departure time uses the best time of day to travel with the best traffic conditions when calculating routes.</p> <p>Additional options include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/departure-time.html\"> Specifying a departure time</a> using either <code>DepartureTime</code> or <code>DepartNow</code>. This calculates routes based on predictive traffic data at the given time. </p> <note> <p>You can't specify both <code>DepartureTime</code> and <code>DepartNow</code> in a single request. Specifying both parameters returns a validation error.</p> </note> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/travel-mode.html\">Specifying a travel mode</a> using TravelMode sets the transportation mode used to calculate the routes. This also lets you specify additional route preferences in <code>CarModeOptions</code> if traveling by <code>Car</code>, or <code>TruckModeOptions</code> if traveling by <code>Truck</code>.</p> </li> </ul></p>",
+      "endpoint":{"hostPrefix":"routes."},
+      "readonly":true
     },
     "CreateGeofenceCollection":{
       "name":"CreateGeofenceCollection",
@@ -223,7 +227,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates an API key resource in your Amazon Web Services account, which lets you grant actions for Amazon Location resources to the API key bearer.</p> <note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">Using API keys</a>.</p> </note>",
+      "documentation":"<p>Creates an API key resource in your Amazon Web Services account, which lets you grant actions for Amazon Location resources to the API key bearer.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">Use API keys to authenticate</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
       "endpoint":{"hostPrefix":"cp.metadata."},
       "idempotent":true
     },
@@ -244,7 +248,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates a map resource in your Amazon Web Services account, which provides map tiles of different styles sourced from global location data providers.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to the Maps API V2 unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>CreateMap</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Maps API version 2 has a simplified interface that can be used without creating or managing map resources.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Creates a map resource in your Amazon Web Services account, which provides map tiles of different styles sourced from global location data providers.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.maps."},
       "idempotent":true
     },
@@ -265,7 +269,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates a place index resource in your Amazon Web Services account. Use a place index resource to geocode addresses and other text queries by using the <code>SearchPlaceIndexForText</code> operation, and reverse geocode coordinates by using the <code>SearchPlaceIndexForPosition</code> operation, and enable autosuggestions by using the <code>SearchPlaceIndexForSuggestions</code> operation.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Places API V2 unless you require Grab data.</p> <ul> <li> <p> <code>CreatePlaceIndex</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Places API version 2 has a simplified interface that can be used without creating or managing place index resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Creates a place index resource in your Amazon Web Services account. Use a place index resource to geocode addresses and other text queries by using the <code>SearchPlaceIndexForText</code> operation, and reverse geocode coordinates by using the <code>SearchPlaceIndexForPosition</code> operation, and enable autosuggestions by using the <code>SearchPlaceIndexForSuggestions</code> operation.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.places."},
       "idempotent":true
     },
@@ -286,7 +290,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates a route calculator resource in your Amazon Web Services account.</p> <p>You can send requests to a route calculator resource to estimate travel time, distance, and get directions. A route calculator sources traffic and road network data from your chosen data provider.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Routes API V2 unless you require Grab data.</p> <ul> <li> <p> <code>CreateRouteCalculator</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Routes API version 2 has a simplified interface that can be used without creating or managing route calculator resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Creates a route calculator resource in your Amazon Web Services account.</p> <p>You can send requests to a route calculator resource to estimate travel time, distance, and get directions. A route calculator sources traffic and road network data from your chosen data provider.</p> <note> <p>If your application is tracking or routing assets you use in your business, such as delivery vehicles or employees, you must not use Esri as your geolocation provider. See section 82 of the <a href=\"http://aws.amazon.com/service-terms\">Amazon Web Services service terms</a> for more details.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.routes."},
       "idempotent":true
     },
@@ -347,7 +351,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes the specified API key. The API key must have been deactivated more than 90 days previously.</p>",
+      "documentation":"<p>Deletes the specified API key. The API key must have been deactivated more than 90 days previously.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">Use API keys to authenticate</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
       "endpoint":{"hostPrefix":"cp.metadata."},
       "idempotent":true
     },
@@ -367,7 +371,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes a map resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently. If the map is being used in an application, the map may not render.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to the Maps API V2 unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>DeleteMap</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Maps API version 2 has a simplified interface that can be used without creating or managing map resources.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Deletes a map resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently. If the map is being used in an application, the map may not render.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.maps."},
       "idempotent":true
     },
@@ -387,7 +391,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes a place index resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Places API V2 unless you require Grab data.</p> <ul> <li> <p> <code>DeletePlaceIndex</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Places API version 2 has a simplified interface that can be used without creating or managing place index resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Deletes a place index resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.places."},
       "idempotent":true
     },
@@ -407,7 +411,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Deletes a route calculator resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently.</p> </note>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Routes API V2 unless you require Grab data.</p> <ul> <li> <p> <code>DeleteRouteCalculator</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Routes API version 2 has a simplified interface that can be used without creating or managing route calculator resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Deletes a route calculator resource from your Amazon Web Services account.</p> <note> <p>This operation deletes the resource permanently.</p> </note></p>",
       "endpoint":{"hostPrefix":"cp.routes."},
       "idempotent":true
     },
@@ -448,7 +452,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Retrieves the geofence collection details.</p>",
-      "endpoint":{"hostPrefix":"cp.geofencing."}
+      "endpoint":{"hostPrefix":"cp.geofencing."},
+      "readonly":true
     },
     "DescribeKey":{
       "name":"DescribeKey",
@@ -466,8 +471,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the API key resource details.</p>",
-      "endpoint":{"hostPrefix":"cp.metadata."}
+      "documentation":"<p>Retrieves the API key resource details.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">Use API keys to authenticate</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"cp.metadata."},
+      "readonly":true
     },
     "DescribeMap":{
       "name":"DescribeMap",
@@ -485,8 +491,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the map resource details.</p>",
-      "endpoint":{"hostPrefix":"cp.maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to the Maps API V2 unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>DescribeMap</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Maps API version 2 has a simplified interface that can be used without creating or managing map resources.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves the map resource details.</p></p>",
+      "endpoint":{"hostPrefix":"cp.maps."},
+      "readonly":true
     },
     "DescribePlaceIndex":{
       "name":"DescribePlaceIndex",
@@ -504,8 +511,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the place index resource details.</p>",
-      "endpoint":{"hostPrefix":"cp.places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Places API V2 unless you require Grab data.</p> <ul> <li> <p> <code>DescribePlaceIndex</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Places API version 2 has a simplified interface that can be used without creating or managing place index resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves the place index resource details.</p></p>",
+      "endpoint":{"hostPrefix":"cp.places."},
+      "readonly":true
     },
     "DescribeRouteCalculator":{
       "name":"DescribeRouteCalculator",
@@ -523,8 +531,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the route calculator resource details.</p>",
-      "endpoint":{"hostPrefix":"cp.routes."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Routes API V2 unless you require Grab data.</p> <ul> <li> <p> <code>DescribeRouteCalculator</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Routes API version 2 has a simplified interface that can be used without creating or managing route calculator resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves the route calculator resource details.</p></p>",
+      "endpoint":{"hostPrefix":"cp.routes."},
+      "readonly":true
     },
     "DescribeTracker":{
       "name":"DescribeTracker",
@@ -543,7 +552,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Retrieves the tracker resource details.</p>",
-      "endpoint":{"hostPrefix":"cp.tracking."}
+      "endpoint":{"hostPrefix":"cp.tracking."},
+      "readonly":true
     },
     "DisassociateTrackerConsumer":{
       "name":"DisassociateTrackerConsumer",
@@ -580,8 +590,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Evaluates device positions against geofence geometries from a given geofence collection. The event forecasts three states for which a device can be in relative to a geofence:</p> <p> <code>ENTER</code>: If a device is outside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window.</p> <p> <code>EXIT</code>: If a device is inside of a geofence, but would breach the fence if the device is moving at its current speed within time horizon window.</p> <p> <code>IDLE</code>: If a device is inside of a geofence, and the device is not moving.</p>",
-      "endpoint":{"hostPrefix":"geofencing."}
+      "documentation":"<p>This action forecasts future geofence events that are likely to occur within a specified time horizon if a device continues moving at its current speed. Each forecasted event is associated with a geofence from a provided geofence collection. A forecast event can have one of the following states:</p> <p> <code>ENTER</code>: The device position is outside the referenced geofence, but the device may cross into the geofence during the forecasting time horizon if it maintains its current speed.</p> <p> <code>EXIT</code>: The device position is inside the referenced geofence, but the device may leave the geofence during the forecasted time horizon if the device maintains it's current speed.</p> <p> <code>IDLE</code>:The device is inside the geofence, and it will remain inside the geofence through the end of the time horizon if the device maintains it's current speed.</p> <note> <p>Heading direction is not considered in the current version. The API takes a conservative approach and includes events that can occur for any heading.</p> </note>",
+      "endpoint":{"hostPrefix":"geofencing."},
+      "readonly":true
     },
     "GetDevicePosition":{
       "name":"GetDevicePosition",
@@ -600,7 +611,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Retrieves a device's most recent position according to its sample time.</p> <note> <p>Device positions are deleted after 30 days.</p> </note>",
-      "endpoint":{"hostPrefix":"tracking."}
+      "endpoint":{"hostPrefix":"tracking."},
+      "readonly":true
     },
     "GetDevicePositionHistory":{
       "name":"GetDevicePositionHistory",
@@ -619,7 +631,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Retrieves the device position history from a tracker resource within a specified range of time.</p> <note> <p>Device positions are deleted after 30 days.</p> </note>",
-      "endpoint":{"hostPrefix":"tracking."}
+      "endpoint":{"hostPrefix":"tracking."},
+      "readonly":true
     },
     "GetGeofence":{
       "name":"GetGeofence",
@@ -638,7 +651,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Retrieves the geofence details from a geofence collection.</p> <note> <p>The returned geometry will always match the geometry format used when the geofence was created.</p> </note>",
-      "endpoint":{"hostPrefix":"geofencing."}
+      "endpoint":{"hostPrefix":"geofencing."},
+      "readonly":true
     },
     "GetMapGlyphs":{
       "name":"GetMapGlyphs",
@@ -656,8 +670,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves glyphs used to display labels on a map.</p>",
-      "endpoint":{"hostPrefix":"maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_geomaps_GetGlyphs.html\"> <code>GetGlyphs</code> </a> unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>GetMapGlyphs</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>GetGlyphs</code> operation gives a better user experience and is compatible with the remainder of the V2 Maps API.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves glyphs used to display labels on a map.</p></p>",
+      "endpoint":{"hostPrefix":"maps."},
+      "readonly":true
     },
     "GetMapSprites":{
       "name":"GetMapSprites",
@@ -675,8 +690,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the sprite sheet corresponding to a map resource. The sprite sheet is a PNG image paired with a JSON document describing the offsets of individual icons that will be displayed on a rendered map.</p>",
-      "endpoint":{"hostPrefix":"maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_geomaps_GetSprites.html\"> <code>GetSprites</code> </a> unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>GetMapSprites</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>GetSprites</code> operation gives a better user experience and is compatible with the remainder of the V2 Maps API.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves the sprite sheet corresponding to a map resource. The sprite sheet is a PNG image paired with a JSON document describing the offsets of individual icons that will be displayed on a rendered map.</p></p>",
+      "endpoint":{"hostPrefix":"maps."},
+      "readonly":true
     },
     "GetMapStyleDescriptor":{
       "name":"GetMapStyleDescriptor",
@@ -694,8 +710,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves the map style descriptor from a map resource. </p> <p>The style descriptor contains speciﬁcations on how features render on a map. For example, what data to display, what order to display the data in, and the style for the data. Style descriptors follow the Mapbox Style Specification.</p>",
-      "endpoint":{"hostPrefix":"maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_geomaps_GetStyleDescriptor.html\"> <code>GetStyleDescriptor</code> </a> unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>GetMapStyleDescriptor</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>GetStyleDescriptor</code> operation gives a better user experience and is compatible with the remainder of the V2 Maps API.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves the map style descriptor from a map resource. </p> <p>The style descriptor contains speciﬁcations on how features render on a map. For example, what data to display, what order to display the data in, and the style for the data. Style descriptors follow the Mapbox Style Specification.</p></p>",
+      "endpoint":{"hostPrefix":"maps."},
+      "readonly":true
     },
     "GetMapTile":{
       "name":"GetMapTile",
@@ -713,8 +730,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves a vector data tile from the map resource. Map tiles are used by clients to render a map. they're addressed using a grid arrangement with an X coordinate, Y coordinate, and Z (zoom) level. </p> <p>The origin (0, 0) is the top left of the map. Increasing the zoom level by 1 doubles both the X and Y dimensions, so a tile containing data for the entire world at (0/0/0) will be split into 4 tiles at zoom 1 (1/0/0, 1/0/1, 1/1/0, 1/1/1).</p>",
-      "endpoint":{"hostPrefix":"maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_geomaps_GetTile.html\"> <code>GetTile</code> </a> unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>GetMapTile</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>GetTile</code> operation gives a better user experience and is compatible with the remainder of the V2 Maps API.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Retrieves a vector data tile from the map resource. Map tiles are used by clients to render a map. they're addressed using a grid arrangement with an X coordinate, Y coordinate, and Z (zoom) level. </p> <p>The origin (0, 0) is the top left of the map. Increasing the zoom level by 1 doubles both the X and Y dimensions, so a tile containing data for the entire world at (0/0/0) will be split into 4 tiles at zoom 1 (1/0/0, 1/0/1, 1/1/0, 1/1/1).</p></p>",
+      "endpoint":{"hostPrefix":"maps."},
+      "readonly":true
     },
     "GetPlace":{
       "name":"GetPlace",
@@ -732,8 +750,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Finds a place by its unique ID. A <code>PlaceId</code> is returned by other search operations.</p> <note> <p>A PlaceId is valid only if all of the following are the same in the original search request and the call to <code>GetPlace</code>.</p> <ul> <li> <p>Customer Amazon Web Services account</p> </li> <li> <p>Amazon Web Services Region</p> </li> <li> <p>Data provider specified in the place index resource</p> </li> </ul> </note>",
-      "endpoint":{"hostPrefix":"places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the <a href=\"/location/latest/APIReference/API_geoplaces_GetPlace.html\">V2 <code>GetPlace</code> </a> operation unless you require Grab data.</p> <ul> <li> <p>This version of <code>GetPlace</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>Version 2 of the <code>GetPlace</code> operation interoperates with the rest of the Places V2 API, while this version does not.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Finds a place by its unique ID. A <code>PlaceId</code> is returned by other search operations.</p> <note> <p>A PlaceId is valid only if all of the following are the same in the original search request and the call to <code>GetPlace</code>.</p> <ul> <li> <p>Customer Amazon Web Services account</p> </li> <li> <p>Amazon Web Services Region</p> </li> <li> <p>Data provider specified in the place index resource</p> </li> </ul> </note> <note> <p>If your Place index resource is configured with Grab as your geolocation provider and Storage as Intended use, the GetPlace operation is unavailable. For more information, see <a href=\"http://aws.amazon.com/service-terms\">AWS service terms</a>.</p> </note></p>",
+      "endpoint":{"hostPrefix":"places."},
+      "readonly":true
     },
     "ListDevicePositions":{
       "name":"ListDevicePositions",
@@ -751,7 +770,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>A batch request to retrieve all device positions.</p>",
-      "endpoint":{"hostPrefix":"tracking."}
+      "endpoint":{"hostPrefix":"tracking."},
+      "readonly":true
     },
     "ListGeofenceCollections":{
       "name":"ListGeofenceCollections",
@@ -769,7 +789,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Lists geofence collections in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.geofencing."}
+      "endpoint":{"hostPrefix":"cp.geofencing."},
+      "readonly":true
     },
     "ListGeofences":{
       "name":"ListGeofences",
@@ -788,7 +809,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Lists geofences stored in a given geofence collection.</p>",
-      "endpoint":{"hostPrefix":"geofencing."}
+      "endpoint":{"hostPrefix":"geofencing."},
+      "readonly":true
     },
     "ListKeys":{
       "name":"ListKeys",
@@ -805,8 +827,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists API key resources in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.metadata."}
+      "documentation":"<p>Lists API key resources in your Amazon Web Services account.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">Use API keys to authenticate</a> in the <i>Amazon Location Service Developer Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"cp.metadata."},
+      "readonly":true
     },
     "ListMaps":{
       "name":"ListMaps",
@@ -823,8 +846,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists map resources in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.maps."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to the Maps API V2 unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>ListMaps</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Maps API version 2 has a simplified interface that can be used without creating or managing map resources.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Lists map resources in your Amazon Web Services account.</p></p>",
+      "endpoint":{"hostPrefix":"cp.maps."},
+      "readonly":true
     },
     "ListPlaceIndexes":{
       "name":"ListPlaceIndexes",
@@ -841,8 +865,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists place index resources in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Places API V2 unless you require Grab data.</p> <ul> <li> <p> <code>ListPlaceIndexes</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Places API version 2 has a simplified interface that can be used without creating or managing place index resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Lists place index resources in your Amazon Web Services account.</p></p>",
+      "endpoint":{"hostPrefix":"cp.places."},
+      "readonly":true
     },
     "ListRouteCalculators":{
       "name":"ListRouteCalculators",
@@ -859,8 +884,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Lists route calculator resources in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.routes."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Routes API V2 unless you require Grab data.</p> <ul> <li> <p> <code>ListRouteCalculators</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Routes API version 2 has a simplified interface that can be used without creating or managing route calculator resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Lists route calculator resources in your Amazon Web Services account.</p></p>",
+      "endpoint":{"hostPrefix":"cp.routes."},
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -879,7 +905,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of tags that are applied to the specified Amazon Location resource.</p>",
-      "endpoint":{"hostPrefix":"cp.metadata."}
+      "endpoint":{"hostPrefix":"cp.metadata."},
+      "readonly":true
     },
     "ListTrackerConsumers":{
       "name":"ListTrackerConsumers",
@@ -898,7 +925,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Lists geofence collections currently associated to the given tracker resource.</p>",
-      "endpoint":{"hostPrefix":"cp.tracking."}
+      "endpoint":{"hostPrefix":"cp.tracking."},
+      "readonly":true
     },
     "ListTrackers":{
       "name":"ListTrackers",
@@ -916,7 +944,8 @@
         {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Lists tracker resources in your Amazon Web Services account.</p>",
-      "endpoint":{"hostPrefix":"cp.tracking."}
+      "endpoint":{"hostPrefix":"cp.tracking."},
+      "readonly":true
     },
     "PutGeofence":{
       "name":"PutGeofence",
@@ -929,8 +958,8 @@
       "output":{"shape":"PutGeofenceResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
@@ -954,8 +983,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Reverse geocodes a given coordinate and returns a legible address. Allows you to search for Places or points of interest near a given position.</p>",
-      "endpoint":{"hostPrefix":"places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to <a href=\"/location/latest/APIReference/API_geoplaces_ReverseGeocode.html\"> <code>ReverseGeocode</code> </a> or <a href=\"/location/latest/APIReference/API_geoplaces_SearchNearby.html\"> <code>SearchNearby</code> </a> unless you require Grab data.</p> <ul> <li> <p> <code>SearchPlaceIndexForPosition</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>ReverseGeocode</code> operation gives better results in the address reverse-geocoding use case, while the version 2 <code>SearchNearby</code> operation gives better results when searching for businesses and points of interest near a specific location.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> </ul> </important> <p>Reverse geocodes a given coordinate and returns a legible address. Allows you to search for Places or points of interest near a given position.</p></p>",
+      "endpoint":{"hostPrefix":"places."},
+      "readonly":true
     },
     "SearchPlaceIndexForSuggestions":{
       "name":"SearchPlaceIndexForSuggestions",
@@ -973,8 +1003,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Generates suggestions for addresses and points of interest based on partial or misspelled free-form text. This operation is also known as autocomplete, autosuggest, or fuzzy matching.</p> <p>Optional parameters let you narrow your search results by bounding box or country, or bias your search toward a specific position on the globe.</p> <note> <p>You can search for suggested place names near a specified position by using <code>BiasPosition</code>, or filter results within a bounding box by using <code>FilterBBox</code>. These parameters are mutually exclusive; using both <code>BiasPosition</code> and <code>FilterBBox</code> in the same command returns an error.</p> </note>",
-      "endpoint":{"hostPrefix":"places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to <a href=\"/location/latest/APIReference/API_geoplaces_Suggest.html\"> <code>Suggest</code> </a> or <a href=\"/location/latest/APIReference/API_geoplaces_Autocomplete.html\"> <code>Autocomplete</code> </a> unless you require Grab data.</p> <ul> <li> <p> <code>SearchPlaceIndexForSuggestions</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>Suggest</code> operation gives better results for typeahead place search suggestions with fuzzy matching, while the version 2 <code>Autocomplete</code> operation gives better results for address completion based on partial input.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> </ul> </important> <p>Generates suggestions for addresses and points of interest based on partial or misspelled free-form text. This operation is also known as autocomplete, autosuggest, or fuzzy matching.</p> <p>Optional parameters let you narrow your search results by bounding box or country, or bias your search toward a specific position on the globe.</p> <note> <p>You can search for suggested place names near a specified position by using <code>BiasPosition</code>, or filter results within a bounding box by using <code>FilterBBox</code>. These parameters are mutually exclusive; using both <code>BiasPosition</code> and <code>FilterBBox</code> in the same command returns an error.</p> </note></p>",
+      "endpoint":{"hostPrefix":"places."},
+      "readonly":true
     },
     "SearchPlaceIndexForText":{
       "name":"SearchPlaceIndexForText",
@@ -992,8 +1023,9 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Geocodes free-form text, such as an address, name, city, or region to allow you to search for Places or points of interest. </p> <p>Optional parameters let you narrow your search results by bounding box or country, or bias your search toward a specific position on the globe.</p> <note> <p>You can search for places near a given position using <code>BiasPosition</code>, or filter results within a bounding box using <code>FilterBBox</code>. Providing both parameters simultaneously returns an error.</p> </note> <p>Search results are returned in order of highest to lowest relevance.</p>",
-      "endpoint":{"hostPrefix":"places."}
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to <a href=\"/location/latest/APIReference/API_geoplaces_Geocode.html\"> <code>Geocode</code> </a> or <a href=\"/location/latest/APIReference/API_geoplaces_SearchText.html\"> <code>SearchText</code> </a> unless you require Grab data.</p> <ul> <li> <p> <code>SearchPlaceIndexForText</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The version 2 <code>Geocode</code> operation gives better results in the address geocoding use case, while the version 2 <code>SearchText</code> operation gives better results when searching for businesses and points of interest.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> </ul> </important> <p>Geocodes free-form text, such as an address, name, city, or region to allow you to search for Places or points of interest. </p> <p>Optional parameters let you narrow your search results by bounding box or country, or bias your search toward a specific position on the globe.</p> <note> <p>You can search for places near a given position using <code>BiasPosition</code>, or filter results within a bounding box using <code>FilterBBox</code>. Providing both parameters simultaneously returns an error.</p> </note> <p>Search results are returned in order of highest to lowest relevance.</p></p>",
+      "endpoint":{"hostPrefix":"places."},
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -1090,7 +1122,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates the specified properties of a given map resource.</p>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend upgrading to the Maps API V2 unless you require <code>Grab</code> data.</p> <ul> <li> <p> <code>UpdateMap</code> is part of a previous Amazon Location Service Maps API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Maps API version 2 has a simplified interface that can be used without creating or managing map resources.</p> </li> <li> <p>If you are using an AWS SDK or the AWS CLI, note that the Maps API version 2 is found under <code>geo-maps</code> or <code>geo_maps</code>, not under <code>location</code>.</p> </li> <li> <p>Since <code>Grab</code> is not yet fully supported in Maps API version 2, we recommend you continue using API version 1 when using <code>Grab</code>.</p> </li> <li> <p>Start your version 2 API journey with the <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_Operations_Amazon_Location_Service_Maps_V2.html\">Maps V2 API Reference</a> or the <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/maps.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Updates the specified properties of a given map resource.</p></p>",
       "endpoint":{"hostPrefix":"cp.maps."},
       "idempotent":true
     },
@@ -1110,7 +1142,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates the specified properties of a given place index resource.</p>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Places API V2 unless you require Grab data.</p> <ul> <li> <p> <code>UpdatePlaceIndex</code> is part of a previous Amazon Location Service Places API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Places API version 2 has a simplified interface that can be used without creating or managing place index resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Places API version 2 is found under <code>geo-places</code> or <code>geo_places</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Places API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Places V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Places_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/places.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Updates the specified properties of a given place index resource.</p></p>",
       "endpoint":{"hostPrefix":"cp.places."},
       "idempotent":true
     },
@@ -1130,7 +1162,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates the specified properties for a given route calculator resource.</p>",
+      "documentation":"<p><important> <p>This operation is no longer current and may be deprecated in the future. We recommend you upgrade to the Routes API V2 unless you require Grab data.</p> <ul> <li> <p> <code>UpdateRouteCalculator</code> is part of a previous Amazon Location Service Routes API (version 1) which has been superseded by a more intuitive, powerful, and complete API (version 2).</p> </li> <li> <p>The Routes API version 2 has a simplified interface that can be used without creating or managing route calculator resources.</p> </li> <li> <p>If you are using an Amazon Web Services SDK or the Amazon Web Services CLI, note that the Routes API version 2 is found under <code>geo-routes</code> or <code>geo_routes</code>, not under <code>location</code>.</p> </li> <li> <p>Since Grab is not yet fully supported in Routes API version 2, we recommend you continue using API version 1 when using Grab.</p> </li> <li> <p>Start your version 2 API journey with the Routes V2 <a href=\"/location/latest/APIReference/API_Operations_Amazon_Location_Service_Routes_V2.html\">API Reference</a> or the <a href=\"/location/latest/developerguide/routes.html\">Developer Guide</a>.</p> </li> </ul> </important> <p>Updates the specified properties for a given route calculator resource.</p></p>",
       "endpoint":{"hostPrefix":"cp.routes."},
       "idempotent":true
     },
@@ -1170,7 +1202,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Verifies the integrity of the device's position by determining if it was reported behind a proxy, and by comparing it to an inferred position estimated based on the device's state.</p>",
+      "documentation":"<p>Verifies the integrity of the device's position by determining if it was reported behind a proxy, and by comparing it to an inferred position estimated based on the device's state.</p> <note> <p>The Location Integrity SDK provides enhanced features related to device verification, and it is available for use by request. To get access to the SDK, contact <a href=\"https://aws.amazon.com/contact-us/sales-support/?pg=locationprice&amp;cta=herobtn\">Sales Support</a>.</p> </note>",
       "endpoint":{"hostPrefix":"tracking."}
     }
   },
@@ -1191,6 +1223,30 @@
       },
       "exception":true
     },
+    "AndroidApp":{
+      "type":"structure",
+      "required":[
+        "Package",
+        "CertificateFingerprint"
+      ],
+      "members":{
+        "Package":{
+          "shape":"AndroidPackageName",
+          "documentation":"<p>Unique package name for an Android app.</p>"
+        },
+        "CertificateFingerprint":{
+          "shape":"Sha1CertificateFingerprint",
+          "documentation":"<p>20 byte SHA-1 certificate fingerprint associated with the Android app signing certificate.</p>"
+        }
+      },
+      "documentation":"<p>Unique identifying information for an Android app. Consists of a package name and a 20 byte SHA-1 certificate fingerprint.</p>"
+    },
+    "AndroidPackageName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"([A-Za-z][A-Za-z\\d_]*\\.)+[A-Za-z][A-Za-z\\d_]*"
+    },
     "ApiKey":{
       "type":"string",
       "max":1000,
@@ -1222,7 +1278,7 @@
       "members":{
         "AllowActions":{
           "shape":"ApiKeyRestrictionsAllowActionsList",
-          "documentation":"<p>A list of allowed actions that an API key resource grants permissions to perform. You must have at least one action for each type of resource. For example, if you have a place resource, you must include at least one place action.</p> <p>The following are valid values for the actions.</p> <ul> <li> <p> <b>Map actions</b> </p> <ul> <li> <p> <code>geo:GetMap*</code> - Allows all actions needed for map rendering.</p> </li> </ul> </li> <li> <p> <b>Place actions</b> </p> <ul> <li> <p> <code>geo:SearchPlaceIndexForText</code> - Allows geocoding.</p> </li> <li> <p> <code>geo:SearchPlaceIndexForPosition</code> - Allows reverse geocoding.</p> </li> <li> <p> <code>geo:SearchPlaceIndexForSuggestions</code> - Allows generating suggestions from text.</p> </li> <li> <p> <code>GetPlace</code> - Allows finding a place by place ID.</p> </li> </ul> </li> <li> <p> <b>Route actions</b> </p> <ul> <li> <p> <code>geo:CalculateRoute</code> - Allows point to point routing.</p> </li> <li> <p> <code>geo:CalculateRouteMatrix</code> - Allows calculating a matrix of routes.</p> </li> </ul> </li> </ul> <note> <p>You must use these strings exactly. For example, to provide access to map rendering, the only valid action is <code>geo:GetMap*</code> as an input to the list. <code>[\"geo:GetMap*\"]</code> is valid but <code>[\"geo:GetMapTile\"]</code> is not. Similarly, you cannot use <code>[\"geo:SearchPlaceIndexFor*\"]</code> - you must list each of the Place actions separately.</p> </note>"
+          "documentation":"<p>A list of allowed actions that an API key resource grants permissions to perform. You must have at least one action for each type of resource. For example, if you have a place resource, you must include at least one place action.</p> <p>The following are valid values for the actions.</p> <ul> <li> <p> <b>Map actions</b> </p> <ul> <li> <p> <code>geo:GetMap*</code> - Allows all actions needed for map rendering.</p> </li> <li> <p> <code>geo-maps:GetTile</code> - Allows retrieving map tiles.</p> </li> <li> <p> <code>geo-maps:GetStaticMap</code> - Allows retrieving static map images.</p> </li> <li> <p> <code>geo-maps:*</code> - Allows all actions related to map functionalities.</p> </li> </ul> </li> <li> <p> <b>Place actions</b> </p> <ul> <li> <p> <code>geo:SearchPlaceIndexForText</code> - Allows geocoding.</p> </li> <li> <p> <code>geo:SearchPlaceIndexForPosition</code> - Allows reverse geocoding.</p> </li> <li> <p> <code>geo:SearchPlaceIndexForSuggestions</code> - Allows generating suggestions from text.</p> </li> <li> <p> <code>GetPlace</code> - Allows finding a place by place ID.</p> </li> <li> <p> <code>geo-places:Geocode</code> - Allows geocoding using place information.</p> </li> <li> <p> <code>geo-places:ReverseGeocode</code> - Allows reverse geocoding from location coordinates.</p> </li> <li> <p> <code>geo-places:SearchNearby</code> - Allows searching for places near a location.</p> </li> <li> <p> <code>geo-places:SearchText</code> - Allows searching for places based on text input.</p> </li> <li> <p> <code>geo-places:Autocomplete</code> - Allows auto-completion of place names based on text input.</p> </li> <li> <p> <code>geo-places:Suggest</code> - Allows generating suggestions for places based on partial input.</p> </li> <li> <p> <code>geo-places:GetPlace</code> - Allows finding a place by its ID.</p> </li> <li> <p> <code>geo-places:*</code> - Allows all actions related to place services.</p> </li> </ul> </li> <li> <p> <b>Route actions</b> </p> <ul> <li> <p> <code>geo:CalculateRoute</code> - Allows point to point routing.</p> </li> <li> <p> <code>geo:CalculateRouteMatrix</code> - Allows calculating a matrix of routes.</p> </li> <li> <p> <code>geo-routes:CalculateRoutes</code> - Allows calculating multiple routes between points.</p> </li> <li> <p> <code>geo-routes:CalculateRouteMatrix</code> - Allows calculating a matrix of routes between points.</p> </li> <li> <p> <code>geo-routes:CalculateIsolines</code> - Allows calculating isolines for a given area.</p> </li> <li> <p> <code>geo-routes:OptimizeWaypoints</code> - Allows optimizing the order of waypoints in a route.</p> </li> <li> <p> <code>geo-routes:SnapToRoads</code> - Allows snapping a route to the nearest roads.</p> </li> <li> <p> <code>geo-routes:*</code> - Allows all actions related to routing functionalities.</p> </li> </ul> </li> </ul> <note> <p>You must use these strings exactly. For example, to provide access to map rendering, the only valid action is <code>geo:GetMap*</code> as an input to the list. <code>[\"geo:GetMap*\"]</code> is valid but <code>[\"geo:GetMapTile\"]</code> is not. Similarly, you cannot use <code>[\"geo:SearchPlaceIndexFor*\"]</code> - you must list each of the Place actions separately.</p> </note>"
         },
         "AllowResources":{
           "shape":"ApiKeyRestrictionsAllowResourcesList",
@@ -1231,6 +1287,14 @@
         "AllowReferers":{
           "shape":"ApiKeyRestrictionsAllowReferersList",
           "documentation":"<p>An optional list of allowed HTTP referers for which requests must originate from. Requests using this API key from other domains will not be allowed.</p> <p>Requirements:</p> <ul> <li> <p>Contain only alphanumeric characters (A–Z, a–z, 0–9) or any symbols in this list <code>$\\-._+!*`(),;/?:@=&amp;</code> </p> </li> <li> <p>May contain a percent (%) if followed by 2 hexadecimal digits (A-F, a-f, 0-9); this is used for URL encoding purposes.</p> </li> <li> <p>May contain wildcard characters question mark (?) and asterisk (*).</p> <p>Question mark (?) will replace any single character (including hexadecimal digits).</p> <p>Asterisk (*) will replace any multiple characters (including multiple hexadecimal digits).</p> </li> <li> <p>No spaces allowed. For example, <code>https://example.com</code>.</p> </li> </ul>"
+        },
+        "AllowAndroidApps":{
+          "shape":"ApiKeyRestrictionsAllowAndroidAppsList",
+          "documentation":"<p>An optional list of allowed Android applications for which requests must originate from. Requests using this API key from other sources will not be allowed.</p>"
+        },
+        "AllowAppleApps":{
+          "shape":"ApiKeyRestrictionsAllowAppleAppsList",
+          "documentation":"<p>An optional list of allowed Apple applications for which requests must originate from. Requests using this API key from other sources will not be allowed.</p>"
         }
       },
       "documentation":"<p>API Restrictions on the allowed actions, resources, and referers for an API key resource.</p>"
@@ -1238,21 +1302,50 @@
     "ApiKeyRestrictionsAllowActionsList":{
       "type":"list",
       "member":{"shape":"ApiKeyAction"},
-      "max":7,
+      "max":24,
       "min":1
     },
+    "ApiKeyRestrictionsAllowAndroidAppsList":{
+      "type":"list",
+      "member":{"shape":"AndroidApp"},
+      "max":5,
+      "min":0
+    },
+    "ApiKeyRestrictionsAllowAppleAppsList":{
+      "type":"list",
+      "member":{"shape":"AppleApp"},
+      "max":5,
+      "min":0
+    },
     "ApiKeyRestrictionsAllowReferersList":{
       "type":"list",
       "member":{"shape":"RefererPattern"},
       "max":5,
-      "min":1
+      "min":0
     },
     "ApiKeyRestrictionsAllowResourcesList":{
       "type":"list",
       "member":{"shape":"GeoArnV2"},
-      "max":5,
+      "max":8,
       "min":1
     },
+    "AppleApp":{
+      "type":"structure",
+      "required":["BundleId"],
+      "members":{
+        "BundleId":{
+          "shape":"AppleBundleId",
+          "documentation":"<p>The unique identifier of the app across all Apple platforms (iOS, macOS, tvOS, watchOS, etc.)</p>"
+        }
+      },
+      "documentation":"<p>Unique identifying information for an Apple app (iOS, macOS, tvOS and watchOS). Consists of an Apple Bundle ID.</p>"
+    },
+    "AppleBundleId":{
+      "type":"string",
+      "max":155,
+      "min":1,
+      "pattern":"[A-Za-z0-9\\-]+(\\.[A-Za-z0-9\\-]+)+"
+    },
     "Arn":{
       "type":"string",
       "max":1600,
@@ -1284,12 +1377,11 @@
     },
     "AssociateTrackerConsumerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Base64EncodedGeobuf":{
       "type":"blob",
-      "max":600000,
+      "max":700000,
       "min":0,
       "sensitive":true
     },
@@ -1620,7 +1712,7 @@
         },
         "Geometry":{
           "shape":"GeofenceGeometry",
-          "documentation":"<p>Contains the details to specify the position of the geofence. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error.</p> <note> <p>The <a href=\"https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html\"> geofence polygon</a> format supports a maximum of 1,000 vertices. The <a href=\"https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html\">Geofence geobuf</a> format supports a maximum of 100,000 vertices.</p> </note>"
+          "documentation":"<p>Contains the details to specify the position of the geofence. Can be a circle, a polygon, or a multipolygon. <code>Polygon</code> and <code>MultiPolygon</code> geometries can be defined using their respective parameters, or encoded in Geobuf format using the <code>Geobuf</code> parameter. Including multiple geometry types in the same request will return a validation error.</p> <note> <p>The geofence <code>Polygon</code> and <code>MultiPolygon</code> formats support a maximum of 1,000 total vertices. The <code>Geobuf</code> format supports a maximum of 100,000 vertices.</p> </note>"
         },
         "GeofenceProperties":{
           "shape":"PropertyMap",
@@ -1751,11 +1843,11 @@
       "type":"structure",
       "members":{
         "AvoidFerries":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids ferries when calculating routes.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "AvoidTolls":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids tolls when calculating routes.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         }
       },
@@ -1777,22 +1869,22 @@
         },
         "DeparturePositions":{
           "shape":"CalculateRouteMatrixRequestDeparturePositionsList",
-          "documentation":"<p>The list of departure (origin) positions for the route matrix. An array of points, each of which is itself a 2-value array defined in <a href=\"https://earth-info.nga.mil/GandG/wgs84/index.html\">WGS 84</a> format: <code>[longitude, latitude]</code>. For example, <code>[-123.115, 49.285]</code>.</p> <important> <p>Depending on the data provider selected in the route calculator resource there may be additional restrictions on the inputs you can choose. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits\"> Position restrictions</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </important> <note> <p>For route calculators that use Esri as the data provider, if you specify a departure that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\"> moves the position to the nearest road</a>. The snapped value is available in the result in <code>SnappedDeparturePositions</code>.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
+          "documentation":"<p>The list of departure (origin) positions for the route matrix. An array of points, each of which is itself a 2-value array defined in <a href=\"https://earth-info.nga.mil/GandG/wgs84/index.html\">WGS 84</a> format: <code>[longitude, latitude]</code>. For example, <code>[-123.115, 49.285]</code>.</p> <important> <p>Depending on the data provider selected in the route calculator resource there may be additional restrictions on the inputs you can choose. See <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/calculate-route-matrix.html#matrix-routing-position-limits\"> Position restrictions</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </important> <note> <p>For route calculators that use Esri as the data provider, if you specify a departure that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\"> moves the position to the nearest road</a>. The snapped value is available in the result in <code>SnappedDeparturePositions</code>.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
         },
         "DestinationPositions":{
           "shape":"CalculateRouteMatrixRequestDestinationPositionsList",
-          "documentation":"<p>The list of destination positions for the route matrix. An array of points, each of which is itself a 2-value array defined in <a href=\"https://earth-info.nga.mil/GandG/wgs84/index.html\">WGS 84</a> format: <code>[longitude, latitude]</code>. For example, <code>[-122.339, 47.615]</code> </p> <important> <p>Depending on the data provider selected in the route calculator resource there may be additional restrictions on the inputs you can choose. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits\"> Position restrictions</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </important> <note> <p>For route calculators that use Esri as the data provider, if you specify a destination that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\"> moves the position to the nearest road</a>. The snapped value is available in the result in <code>SnappedDestinationPositions</code>.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
+          "documentation":"<p>The list of destination positions for the route matrix. An array of points, each of which is itself a 2-value array defined in <a href=\"https://earth-info.nga.mil/GandG/wgs84/index.html\">WGS 84</a> format: <code>[longitude, latitude]</code>. For example, <code>[-122.339, 47.615]</code> </p> <important> <p>Depending on the data provider selected in the route calculator resource there may be additional restrictions on the inputs you can choose. See <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/calculate-route-matrix.html#matrix-routing-position-limits\"> Position restrictions</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </important> <note> <p>For route calculators that use Esri as the data provider, if you specify a destination that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\"> moves the position to the nearest road</a>. The snapped value is available in the result in <code>SnappedDestinationPositions</code>.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
         },
         "TravelMode":{
           "shape":"TravelMode",
-          "documentation":"<p>Specifies the mode of transport when calculating a route. Used in estimating the speed of travel and road compatibility.</p> <p>The <code>TravelMode</code> you specify also determines how you specify route preferences: </p> <ul> <li> <p>If traveling by <code>Car</code> use the <code>CarModeOptions</code> parameter.</p> </li> <li> <p>If traveling by <code>Truck</code> use the <code>TruckModeOptions</code> parameter.</p> </li> </ul> <note> <p> <code>Bicycle</code> or <code>Motorcycle</code> are only valid when using <code>Grab</code> as a data provider, and only within Southeast Asia.</p> <p> <code>Truck</code> is not available for Grab.</p> <p>For more information about using Grab as a data provider, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </note> <p>Default Value: <code>Car</code> </p>"
+          "documentation":"<p>Specifies the mode of transport when calculating a route. Used in estimating the speed of travel and road compatibility.</p> <p>The <code>TravelMode</code> you specify also determines how you specify route preferences: </p> <ul> <li> <p>If traveling by <code>Car</code> use the <code>CarModeOptions</code> parameter.</p> </li> <li> <p>If traveling by <code>Truck</code> use the <code>TruckModeOptions</code> parameter.</p> </li> </ul> <note> <p> <code>Bicycle</code> or <code>Motorcycle</code> are only valid when using <code>Grab</code> as a data provider, and only within Southeast Asia.</p> <p> <code>Truck</code> is not available for Grab.</p> <p>For more information about using Grab as a data provider, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </note> <p>Default Value: <code>Car</code> </p>"
         },
         "DepartureTime":{
           "shape":"Timestamp",
           "documentation":"<p>Specifies the desired time of departure. Uses the given time to calculate the route matrix. You can't set both <code>DepartureTime</code> and <code>DepartNow</code>. If neither is set, the best time of day to travel with the best traffic conditions is used to calculate the route matrix.</p> <note> <p>Setting a departure time in the past returns a <code>400 ValidationException</code> error.</p> </note> <ul> <li> <p>In <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601</a> format: <code>YYYY-MM-DDThh:mm:ss.sssZ</code>. For example, <code>2020–07-2T12:15:20.000Z+01:00</code> </p> </li> </ul>"
         },
         "DepartNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Sets the time of departure as the current time. Uses the current time to calculate the route matrix. You can't set both <code>DepartureTime</code> and <code>DepartNow</code>. If neither is set, the best time of day to travel with the best traffic conditions is used to calculate the route matrix.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "DistanceUnit":{
@@ -1809,7 +1901,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -1876,7 +1968,7 @@
       "members":{
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of traffic and road network data used to calculate the routes. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of traffic and road network data used to calculate the routes. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "RouteCount":{
           "shape":"CalculateRouteMatrixSummaryRouteCountInteger",
@@ -1921,26 +2013,26 @@
         },
         "DeparturePosition":{
           "shape":"Position",
-          "documentation":"<p>The start position for the route. Defined in <a href=\"https://earth-info.nga.mil/index.php?dir=wgs84&amp;action=wgs84\">World Geodetic System (WGS 84)</a> format: <code>[longitude, latitude]</code>.</p> <ul> <li> <p>For example, <code>[-123.115, 49.285]</code> </p> </li> </ul> <note> <p>If you specify a departure that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. If Esri is the provider for your route calculator, specifying a route that is longer than 400 km returns a <code>400 RoutesValidationException</code> error.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
+          "documentation":"<p>The start position for the route. Defined in <a href=\"https://earth-info.nga.mil/index.php?dir=wgs84&amp;action=wgs84\">World Geodetic System (WGS 84)</a> format: <code>[longitude, latitude]</code>.</p> <ul> <li> <p>For example, <code>[-123.115, 49.285]</code> </p> </li> </ul> <note> <p>If you specify a departure that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. If Esri is the provider for your route calculator, specifying a route that is longer than 400 km returns a <code>400 RoutesValidationException</code> error.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
         },
         "DestinationPosition":{
           "shape":"Position",
-          "documentation":"<p>The finish position for the route. Defined in <a href=\"https://earth-info.nga.mil/index.php?dir=wgs84&amp;action=wgs84\">World Geodetic System (WGS 84)</a> format: <code>[longitude, latitude]</code>.</p> <ul> <li> <p> For example, <code>[-122.339, 47.615]</code> </p> </li> </ul> <note> <p>If you specify a destination that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. </p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
+          "documentation":"<p>The finish position for the route. Defined in <a href=\"https://earth-info.nga.mil/index.php?dir=wgs84&amp;action=wgs84\">World Geodetic System (WGS 84)</a> format: <code>[longitude, latitude]</code>.</p> <ul> <li> <p> For example, <code>[-122.339, 47.615]</code> </p> </li> </ul> <note> <p>If you specify a destination that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. </p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
         },
         "WaypointPositions":{
           "shape":"CalculateRouteRequestWaypointPositionsList",
-          "documentation":"<p>Specifies an ordered list of up to 23 intermediate positions to include along a route between the departure position and destination position. </p> <ul> <li> <p>For example, from the <code>DeparturePosition</code> <code>[-123.115, 49.285]</code>, the route follows the order that the waypoint positions are given <code>[[-122.757, 49.0021],[-122.349, 47.620]]</code> </p> </li> </ul> <note> <p>If you specify a waypoint position that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. </p> <p>Specifying more than 23 waypoints returns a <code>400 ValidationException</code> error.</p> <p>If Esri is the provider for your route calculator, specifying a route that is longer than 400 km returns a <code>400 RoutesValidationException</code> error.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
+          "documentation":"<p>Specifies an ordered list of up to 23 intermediate positions to include along a route between the departure position and destination position. </p> <ul> <li> <p>For example, from the <code>DeparturePosition</code> <code>[-123.115, 49.285]</code>, the route follows the order that the waypoint positions are given <code>[[-122.757, 49.0021],[-122.349, 47.620]]</code> </p> </li> </ul> <note> <p>If you specify a waypoint position that's not located on a road, Amazon Location <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">moves the position to the nearest road</a>. </p> <p>Specifying more than 23 waypoints returns a <code>400 ValidationException</code> error.</p> <p>If Esri is the provider for your route calculator, specifying a route that is longer than 400 km returns a <code>400 RoutesValidationException</code> error.</p> </note> <p>Valid Values: <code>[-180 to 180,-90 to 90]</code> </p>"
         },
         "TravelMode":{
           "shape":"TravelMode",
-          "documentation":"<p>Specifies the mode of transport when calculating a route. Used in estimating the speed of travel and road compatibility. You can choose <code>Car</code>, <code>Truck</code>, <code>Walking</code>, <code>Bicycle</code> or <code>Motorcycle</code> as options for the <code>TravelMode</code>.</p> <note> <p> <code>Bicycle</code> and <code>Motorcycle</code> are only valid when using Grab as a data provider, and only within Southeast Asia.</p> <p> <code>Truck</code> is not available for Grab.</p> <p>For more details on the using Grab for routing, including areas of coverage, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </note> <p>The <code>TravelMode</code> you specify also determines how you specify route preferences: </p> <ul> <li> <p>If traveling by <code>Car</code> use the <code>CarModeOptions</code> parameter.</p> </li> <li> <p>If traveling by <code>Truck</code> use the <code>TruckModeOptions</code> parameter.</p> </li> </ul> <p>Default Value: <code>Car</code> </p>"
+          "documentation":"<p>Specifies the mode of transport when calculating a route. Used in estimating the speed of travel and road compatibility. You can choose <code>Car</code>, <code>Truck</code>, <code>Walking</code>, <code>Bicycle</code> or <code>Motorcycle</code> as options for the <code>TravelMode</code>.</p> <note> <p> <code>Bicycle</code> and <code>Motorcycle</code> are only valid when using Grab as a data provider, and only within Southeast Asia.</p> <p> <code>Truck</code> is not available for Grab.</p> <p>For more details on the using Grab for routing, including areas of coverage, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps</a> in the <i>Amazon Location Service Developer Guide</i>.</p> </note> <p>The <code>TravelMode</code> you specify also determines how you specify route preferences: </p> <ul> <li> <p>If traveling by <code>Car</code> use the <code>CarModeOptions</code> parameter.</p> </li> <li> <p>If traveling by <code>Truck</code> use the <code>TruckModeOptions</code> parameter.</p> </li> </ul> <p>Default Value: <code>Car</code> </p>"
         },
         "DepartureTime":{
           "shape":"Timestamp",
           "documentation":"<p>Specifies the desired time of departure. Uses the given time to calculate the route. Otherwise, the best time of day to travel with the best traffic conditions is used to calculate the route.</p> <ul> <li> <p>In <a href=\"https://www.iso.org/iso-8601-date-and-time-format.html\">ISO 8601</a> format: <code>YYYY-MM-DDThh:mm:ss.sssZ</code>. For example, <code>2020–07-2T12:15:20.000Z+01:00</code> </p> </li> </ul>"
         },
         "DepartNow":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Sets the time of departure as the current time. Uses the current time to calculate a route. Otherwise, the best time of day to travel with the best traffic conditions is used to calculate the route.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "DistanceUnit":{
@@ -1948,7 +2040,7 @@
           "documentation":"<p>Set the unit system to specify the distance.</p> <p>Default Value: <code>Kilometers</code> </p>"
         },
         "IncludeLegGeometry":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Set to include the geometry details in the result for each path between a pair of positions.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "CarModeOptions":{
@@ -1969,7 +2061,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -1990,7 +2082,7 @@
       "members":{
         "Legs":{
           "shape":"LegList",
-          "documentation":"<p>Contains details about each path between a pair of positions included along a route such as: <code>StartPosition</code>, <code>EndPosition</code>, <code>Distance</code>, <code>DurationSeconds</code>, <code>Geometry</code>, and <code>Steps</code>. The number of legs returned corresponds to one fewer than the total number of positions in the request. </p> <p>For example, a route with a departure position and destination position returns one leg with the positions <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>:</p> <ul> <li> <p>The <code>StartPosition</code> is the departure position.</p> </li> <li> <p>The <code>EndPosition</code> is the destination position.</p> </li> </ul> <p>A route with a waypoint between the departure and destination position returns two legs with the positions snapped to a nearby road:</p> <ul> <li> <p>Leg 1: The <code>StartPosition</code> is the departure position . The <code>EndPosition</code> is the waypoint positon.</p> </li> <li> <p>Leg 2: The <code>StartPosition</code> is the waypoint position. The <code>EndPosition</code> is the destination position.</p> </li> </ul>"
+          "documentation":"<p>Contains details about each path between a pair of positions included along a route such as: <code>StartPosition</code>, <code>EndPosition</code>, <code>Distance</code>, <code>DurationSeconds</code>, <code>Geometry</code>, and <code>Steps</code>. The number of legs returned corresponds to one fewer than the total number of positions in the request. </p> <p>For example, a route with a departure position and destination position returns one leg with the positions <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>:</p> <ul> <li> <p>The <code>StartPosition</code> is the departure position.</p> </li> <li> <p>The <code>EndPosition</code> is the destination position.</p> </li> </ul> <p>A route with a waypoint between the departure and destination position returns two legs with the positions snapped to a nearby road:</p> <ul> <li> <p>Leg 1: The <code>StartPosition</code> is the departure position . The <code>EndPosition</code> is the waypoint positon.</p> </li> <li> <p>Leg 2: The <code>StartPosition</code> is the waypoint position. The <code>EndPosition</code> is the destination position.</p> </li> </ul>"
         },
         "Summary":{
           "shape":"CalculateRouteSummary",
@@ -2015,7 +2107,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of traffic and road network data used to calculate the route. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of traffic and road network data used to calculate the route. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "Distance":{
           "shape":"CalculateRouteSummaryDistanceDouble",
@@ -2035,22 +2127,24 @@
     "CalculateRouteSummaryDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "CalculateRouteSummaryDurationSecondsDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "CalculateRouteTruckModeOptions":{
       "type":"structure",
       "members":{
         "AvoidFerries":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids ferries when calculating routes.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "AvoidTolls":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p>Avoids tolls when calculating routes.</p> <p>Default Value: <code>false</code> </p> <p>Valid Values: <code>false</code> | <code>true</code> </p>"
         },
         "Dimensions":{
@@ -2093,7 +2187,7 @@
           "documentation":"<p>A single point geometry, specifying the center of the circle, using <a href=\"https://gisgeography.com/wgs84-world-geodetic-system/\">WGS 84</a> coordinates, in the form <code>[longitude, latitude]</code>.</p>"
         },
         "Radius":{
-          "shape":"Double",
+          "shape":"SensitiveDouble",
           "documentation":"<p>The radius of the circle in meters. Must be greater than zero and no larger than 100,000 (100 kilometers).</p>"
         }
       },
@@ -2120,13 +2214,15 @@
       "type":"string",
       "max":3,
       "min":3,
-      "pattern":"[A-Z]{3}"
+      "pattern":"[A-Z]{3}",
+      "sensitive":true
     },
     "CountryCode3OrEmpty":{
       "type":"string",
       "max":3,
       "min":0,
-      "pattern":"[A-Z]{3}$|^"
+      "pattern":"[A-Z]{3}$|^",
+      "sensitive":true
     },
     "CountryCodeList":{
       "type":"list",
@@ -2146,13 +2242,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>This parameter is no longer used.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. No longer allowed."
+          "deprecatedMessage":"Deprecated. No longer allowed.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2234,7 +2332,7 @@
       "members":{
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The key value/string of an API key. This value is used when making API calls to authorize the call. For example, see <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_GetMapGlyphs.html\">GetMapGlyphs</a>.</p>"
+          "documentation":"<p>The key value/string of an API key. This value is used when making API calls to authorize the call. For example, see <a href=\"https://docs.aws.amazon.com/location/previous/APIReference/API_GetMapGlyphs.html\">GetMapGlyphs</a>.</p>"
         },
         "KeyArn":{
           "shape":"Arn",
@@ -2269,7 +2367,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2316,13 +2415,14 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>Specifies the geospatial data provider for the new place index.</p> <note> <p>This field is case-sensitive. Enter the valid values as shown. For example, entering <code>HERE</code> returns an error.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>Esri</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/esri.html\">Esri</a>'s coverage in your region of interest, see <a href=\"https://developers.arcgis.com/rest/geocode/api-reference/geocode-coverage.htm\">Esri details on geocoding coverage</a>.</p> </li> <li> <p> <code>Grab</code> – Grab provides place index functionality for Southeast Asia. For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps</a>' coverage, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and areas covered</a>.</p> </li> <li> <p> <code>Here</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/HERE.html\">HERE Technologies</a>' coverage in your region of interest, see <a href=\"https://developer.here.com/documentation/geocoder/dev_guide/topics/coverage-geocoder.html\">HERE details on goecoding coverage</a>.</p> <important> <p>If you specify HERE Technologies (<code>Here</code>) as the data provider, you may not <a href=\"https://docs.aws.amazon.com/location-places/latest/APIReference/API_DataSourceConfiguration.html\">store results</a> for locations in Japan. For more information, see the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services Service Terms</a> for Amazon Location Service.</p> </important> </li> </ul> <p>For additional information , see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Data providers</a> on the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the geospatial data provider for the new place index.</p> <note> <p>This field is case-sensitive. Enter the valid values as shown. For example, entering <code>HERE</code> returns an error.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>Esri</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/esri.html\">Esri</a>'s coverage in your region of interest, see <a href=\"https://developers.arcgis.com/rest/geocode/api-reference/geocode-coverage.htm\">Esri details on geocoding coverage</a>.</p> </li> <li> <p> <code>Grab</code> – Grab provides place index functionality for Southeast Asia. For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps</a>' coverage, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and areas covered</a>.</p> </li> <li> <p> <code>Here</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/HERE.html\">HERE Technologies</a>' coverage in your region of interest, see <a href=\"https://developer.here.com/documentation/geocoder/dev_guide/topics/coverage-geocoder.html\">HERE details on goecoding coverage</a>.</p> <important> <p>If you specify HERE Technologies (<code>Here</code>) as the data provider, you may not <a href=\"https://docs.aws.amazon.com/location-places/latest/APIReference/API_DataSourceConfiguration.html\">store results</a> for locations in Japan. For more information, see the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services service terms</a> for Amazon Location Service.</p> </important> </li> </ul> <p>For additional information , see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Data providers</a> on the <i>Amazon Location Service developer guide</i>.</p>"
         },
         "PricingPlan":{
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2373,13 +2473,14 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>Specifies the data provider of traffic and road network data.</p> <note> <p>This field is case-sensitive. Enter the valid values as shown. For example, entering <code>HERE</code> returns an error.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>Esri</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/esri.html\">Esri</a>'s coverage in your region of interest, see <a href=\"https://doc.arcgis.com/en/arcgis-online/reference/network-coverage.htm\">Esri details on street networks and traffic coverage</a>.</p> <p>Route calculators that use Esri as a data source only calculate routes that are shorter than 400 km.</p> </li> <li> <p> <code>Grab</code> – Grab provides routing functionality for Southeast Asia. For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps</a>' coverage, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and areas covered</a>.</p> </li> <li> <p> <code>Here</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/HERE.html\">HERE Technologies</a>' coverage in your region of interest, see <a href=\"https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/car-routing.html\">HERE car routing coverage</a> and <a href=\"https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/truck-routing.html\">HERE truck routing coverage</a>.</p> </li> </ul> <p>For additional information , see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Data providers</a> on the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>Specifies the data provider of traffic and road network data.</p> <note> <p>This field is case-sensitive. Enter the valid values as shown. For example, entering <code>HERE</code> returns an error.</p> </note> <p>Valid values include:</p> <ul> <li> <p> <code>Esri</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/esri.html\">Esri</a>'s coverage in your region of interest, see <a href=\"https://doc.arcgis.com/en/arcgis-online/reference/network-coverage.htm\">Esri details on street networks and traffic coverage</a>.</p> <p>Route calculators that use Esri as a data source only calculate routes that are shorter than 400 km.</p> </li> <li> <p> <code>Grab</code> – Grab provides routing functionality for Southeast Asia. For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps</a>' coverage, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and areas covered</a>.</p> </li> <li> <p> <code>Here</code> – For additional information about <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/HERE.html\">HERE Technologies</a>' coverage in your region of interest, see <a href=\"https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/car-routing.html\">HERE car routing coverage</a> and <a href=\"https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/truck-routing.html\">HERE truck routing coverage</a>.</p> </li> </ul> <p>For additional information , see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Data providers</a> on the <i>Amazon Location Service Developer Guide</i>.</p>"
         },
         "PricingPlan":{
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2425,7 +2526,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "KmsKeyId":{
           "shape":"KmsKeyId",
@@ -2435,7 +2537,8 @@
           "shape":"String",
           "documentation":"<p>This parameter is no longer used.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. No longer allowed."
+          "deprecatedMessage":"Deprecated. No longer allowed.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2517,8 +2620,7 @@
     },
     "DeleteGeofenceCollectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKeyRequest":{
       "type":"structure",
@@ -2540,8 +2642,7 @@
     },
     "DeleteKeyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMapRequest":{
       "type":"structure",
@@ -2557,8 +2658,7 @@
     },
     "DeleteMapResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePlaceIndexRequest":{
       "type":"structure",
@@ -2574,8 +2674,7 @@
     },
     "DeletePlaceIndexResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRouteCalculatorRequest":{
       "type":"structure",
@@ -2591,8 +2690,7 @@
     },
     "DeleteRouteCalculatorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrackerRequest":{
       "type":"structure",
@@ -2608,8 +2706,7 @@
     },
     "DeleteTrackerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeGeofenceCollectionRequest":{
       "type":"structure",
@@ -2649,13 +2746,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>No longer used. Always returns an empty string.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Unused."
+          "deprecatedMessage":"Deprecated. Unused.",
+          "deprecatedSince":"2022-02-01"
         },
         "KmsKeyId":{
           "shape":"KmsKeyId",
@@ -2779,7 +2878,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "DataSource":{
           "shape":"String",
@@ -2843,7 +2943,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2859,7 +2960,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of geospatial data. Values can be one of the following:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of geospatial data. Values can be one of the following:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "DataSourceConfiguration":{
           "shape":"DataSourceConfiguration",
@@ -2906,7 +3007,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -2922,7 +3024,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of traffic and road network data. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of traffic and road network data. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "Tags":{
           "shape":"TagMap",
@@ -2968,13 +3070,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>No longer used. Always returns an empty string.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Unused."
+          "deprecatedMessage":"Deprecated. Unused.",
+          "deprecatedSince":"2022-02-01"
         },
         "Tags":{
           "shape":"TagMap",
@@ -3035,7 +3139,7 @@
           "documentation":"<p>The accuracy of the device position.</p>"
         },
         "PositionProperties":{
-          "shape":"PropertyMap",
+          "shape":"PositionPropertyMap",
           "documentation":"<p>The properties associated with the position.</p>"
         }
       },
@@ -3070,7 +3174,7 @@
           "documentation":"<p>The accuracy of the device position.</p>"
         },
         "PositionProperties":{
-          "shape":"PropertyMap",
+          "shape":"PositionPropertyMap",
           "documentation":"<p>Associates one of more properties with the position update. A property is a key-value pair stored with the position update and added to any geofence event the update may trigger.</p> <p>Format: <code>\"key\" : \"value\"</code> </p>"
         }
       },
@@ -3146,8 +3250,7 @@
     },
     "DisassociateTrackerConsumerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DistanceUnit":{
       "type":"string",
@@ -3189,7 +3292,7 @@
           "documentation":"<p>The device's speed.</p>"
         }
       },
-      "documentation":"<p>The device's position, IP address, and WiFi access points.</p>"
+      "documentation":"<p>The device's position and speed.</p>"
     },
     "ForecastGeofenceEventsDeviceStateSpeedDouble":{
       "type":"double",
@@ -3211,11 +3314,11 @@
         },
         "DeviceState":{
           "shape":"ForecastGeofenceEventsDeviceState",
-          "documentation":"<p>The device's state, including current position and speed.</p>"
+          "documentation":"<p>Represents the device's state, including its current position and speed. When speed is omitted, this API performs a <i>containment check</i>. The <i>containment check</i> operation returns <code>IDLE</code> events for geofences where the device is currently inside of, but no other events.</p>"
         },
         "TimeHorizonMinutes":{
           "shape":"ForecastGeofenceEventsRequestTimeHorizonMinutesDouble",
-          "documentation":"<p>Specifies the time horizon in minutes for the forecasted events.</p>"
+          "documentation":"<p>The forward-looking time window for forecasting, specified in minutes. The API only returns events that are predicted to occur within this time horizon. When no value is specified, this API performs a <i>containment check</i>. The <i>containment check</i> operation returns <code>IDLE</code> events for geofences where the device is currently inside of, but no other events.</p>"
         },
         "DistanceUnit":{
           "shape":"DistanceUnit",
@@ -3341,8 +3444,8 @@
       "type":"structure",
       "members":{
         "Polygon":{
-          "shape":"LinearRings",
-          "documentation":"<p>A polygon is a list of linear rings which are each made up of a list of vertices.</p> <p>Each vertex is a 2-dimensional point of the form: <code>[longitude, latitude]</code>. This is represented as an array of doubles of length 2 (so <code>[double, double]</code>).</p> <p>An array of 4 or more vertices, where the first and last vertex are the same (to form a closed boundary), is called a linear ring. The linear ring vertices must be listed in counter-clockwise order around the ring’s interior. The linear ring is represented as an array of vertices, or an array of arrays of doubles (<code>[[double, double], ...]</code>).</p> <p>A geofence consists of a single linear ring. To allow for future expansion, the Polygon parameter takes an array of linear rings, which is represented as an array of arrays of arrays of doubles (<code>[[[double, double], ...], ...]</code>).</p> <p>A linear ring for use in geofences can consist of between 4 and 1,000 vertices.</p>"
+          "shape":"GeofenceGeometryPolygonList",
+          "documentation":"<p>A <code>Polygon</code> is a list of up to 250 linear rings which represent the shape of a geofence. This list <i>must</i> include 1 exterior ring (representing the outer perimeter of the geofence), and can optionally include up to 249 interior rings (representing polygonal spaces within the perimeter, which are excluded from the geofence area).</p> <p>A linear ring is an array of 4 or more vertices, where the first and last vertex are the same (to form a closed boundary). Each vertex is a 2-dimensional point represented as an array of doubles of length 2: <code>[longitude, latitude]</code>.</p> <p>Each linear ring is represented as an array of arrays of doubles (<code>[[longitude, latitude], [longitude, latitude], ...]</code>). The vertices for the exterior ring must be listed in <i>counter-clockwise</i> sequence. Vertices for all interior rings must be listed in <i>clockwise</i> sequence.</p> <p>The list of linear rings that describe the entire <code>Polygon</code> is represented as an array of arrays of arrays of doubles (<code>[[[longitude, latitude], [longitude, latitude], ...], [[longitude, latitude], [longitude, latitude], ...], ...]</code>). The exterior ring must be listed first, before any interior rings.</p> <note> <p>The following additional requirements and limitations apply to geometries defined using the <code>Polygon</code> parameter:</p> <ul> <li> <p>The entire <code>Polygon</code> must consist of no more than 1,000 vertices, including all vertices from the exterior ring and all interior rings.</p> </li> <li> <p>Rings must not touch or cross each other.</p> </li> <li> <p>All interior rings must be fully contained within the exterior ring.</p> </li> <li> <p>Interior rings must not contain other interior rings.</p> </li> <li> <p>No ring is permitted to intersect itself.</p> </li> </ul> </note>"
         },
         "Circle":{
           "shape":"Circle",
@@ -3350,10 +3453,26 @@
         },
         "Geobuf":{
           "shape":"Base64EncodedGeobuf",
-          "documentation":"<p>Geobuf is a compact binary encoding for geographic data that provides lossless compression of GeoJSON polygons. The Geobuf must be Base64-encoded.</p> <p>A polygon in Geobuf format can have up to 100,000 vertices.</p>"
+          "documentation":"<p>Geobuf is a compact binary encoding for geographic data that provides lossless compression of GeoJSON polygons. The Geobuf must be Base64-encoded.</p> <p>This parameter can contain a Geobuf-encoded GeoJSON geometry object of type <code>Polygon</code> <i>OR</i> <code>MultiPolygon</code>. For more information and specific configuration requirements for these object types, see <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_WaypointGeofencing_GeofenceGeometry.html#location-Type-WaypointGeofencing_GeofenceGeometry-Polygon\">Polygon</a> and <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_WaypointGeofencing_GeofenceGeometry.html#location-Type-WaypointGeofencing_GeofenceGeometry-MultiPolygon\">MultiPolygon</a>.</p> <note> <p>The following limitations apply specifically to geometries defined using the <code>Geobuf</code> parameter, and supercede the corresponding limitations of the <code>Polygon</code> and <code>MultiPolygon</code> parameters:</p> <ul> <li> <p>A <code>Polygon</code> in <code>Geobuf</code> format can have up to 25,000 rings and up to 100,000 total vertices, including all vertices from all component rings.</p> </li> <li> <p>A <code>MultiPolygon</code> in <code>Geobuf</code> format can contain up to 10,000 <code>Polygons</code> and up to 100,000 total vertices, including all vertices from all component <code>Polygons</code>.</p> </li> </ul> </note>"
+        },
+        "MultiPolygon":{
+          "shape":"GeofenceGeometryMultiPolygonList",
+          "documentation":"<p>A <code>MultiPolygon</code> is a list of up to 250 <code>Polygon</code> elements which represent the shape of a geofence. The <code>Polygon</code> components of a <code>MultiPolygon</code> geometry can define separate geographical areas that are considered part of the same geofence, perimeters of larger exterior areas with smaller interior spaces that are excluded from the geofence, or some combination of these use cases to form complex geofence boundaries.</p> <p>For more information and specific configuration requirements for the <code>Polygon</code> components that form a <code>MultiPolygon</code>, see <a href=\"https://docs.aws.amazon.com/location/latest/APIReference/API_WaypointGeofencing_GeofenceGeometry.html#location-Type-WaypointGeofencing_GeofenceGeometry-Polygon\">Polygon</a>.</p> <note> <p>The following additional requirements and limitations apply to geometries defined using the <code>MultiPolygon</code> parameter:</p> <ul> <li> <p>The entire <code>MultiPolygon</code> must consist of no more than 1,000 vertices, including all vertices from all component <code>Polygons</code>.</p> </li> <li> <p>Each edge of a component <code>Polygon</code> must intersect no more than 5 edges from other <code>Polygons</code>. Parallel edges that are shared but do not cross are not counted toward this limit.</p> </li> <li> <p>The total number of intersecting edges of component <code>Polygons</code> must be no more than 100,000. Parallel edges that are shared but do not cross are not counted toward this limit.</p> </li> </ul> </note>"
         }
       },
-      "documentation":"<p>Contains the geofence geometry details.</p> <p>A geofence geometry is made up of either a polygon or a circle. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error.</p> <note> <p>Amazon Location doesn't currently support polygons with holes, multipolygons, polygons that are wound clockwise, or that cross the antimeridian. </p> </note>"
+      "documentation":"<p>Contains the geofence geometry details.</p> <p>A geofence geometry can be a circle, a polygon, or a multipolygon. <code>Polygon</code> and <code>MultiPolygon</code> geometries can be defined using their respective parameters, or encoded in Geobuf format using the <code>Geobuf</code> parameter. Including multiple geometry types in the same request will return a validation error.</p> <note> <p>Amazon Location doesn't currently support polygons that cross the antimeridian.</p> </note>"
+    },
+    "GeofenceGeometryMultiPolygonList":{
+      "type":"list",
+      "member":{"shape":"LinearRings"},
+      "max":250,
+      "min":1
+    },
+    "GeofenceGeometryPolygonList":{
+      "type":"list",
+      "member":{"shape":"LinearRing"},
+      "max":250,
+      "min":1
     },
     "GetDevicePositionHistoryRequest":{
       "type":"structure",
@@ -3462,7 +3581,7 @@
           "documentation":"<p>The accuracy of the device position.</p>"
         },
         "PositionProperties":{
-          "shape":"PropertyMap",
+          "shape":"PositionPropertyMap",
           "documentation":"<p>The properties associated with the position.</p>"
         }
       }
@@ -3504,7 +3623,7 @@
         },
         "Geometry":{
           "shape":"GeofenceGeometry",
-          "documentation":"<p>Contains the geofence geometry details describing a polygon or a circle.</p>"
+          "documentation":"<p>Contains the geofence geometry details describing the position of the geofence. Can be a circle, a polygon, or a multipolygon.</p>"
         },
         "Status":{
           "shape":"String",
@@ -3540,7 +3659,7 @@
         },
         "FontStack":{
           "shape":"String",
-          "documentation":"<p>A comma-separated list of fonts to load glyphs from in order of preference. For example, <code>Noto Sans Regular, Arial Unicode</code>.</p> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/esri.html\">Esri</a> styles: </p> <ul> <li> <p>VectorEsriDarkGrayCanvas – <code>Ubuntu Medium Italic</code> | <code>Ubuntu Medium</code> | <code>Ubuntu Italic</code> | <code>Ubuntu Regular</code> | <code>Ubuntu Bold</code> </p> </li> <li> <p>VectorEsriLightGrayCanvas – <code>Ubuntu Italic</code> | <code>Ubuntu Regular</code> | <code>Ubuntu Light</code> | <code>Ubuntu Bold</code> </p> </li> <li> <p>VectorEsriTopographic – <code>Noto Sans Italic</code> | <code>Noto Sans Regular</code> | <code>Noto Sans Bold</code> | <code>Noto Serif Regular</code> | <code>Roboto Condensed Light Italic</code> </p> </li> <li> <p>VectorEsriStreets – <code>Arial Regular</code> | <code>Arial Italic</code> | <code>Arial Bold</code> </p> </li> <li> <p>VectorEsriNavigation – <code>Arial Regular</code> | <code>Arial Italic</code> | <code>Arial Bold</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/HERE.html\">HERE Technologies</a> styles:</p> <ul> <li> <p>VectorHereContrast – <code>Fira GO Regular</code> | <code>Fira GO Bold</code> </p> </li> <li> <p>VectorHereExplore, VectorHereExploreTruck, HybridHereExploreSatellite – <code>Fira GO Italic</code> | <code>Fira GO Map</code> | <code>Fira GO Map Bold</code> | <code>Noto Sans CJK JP Bold</code> | <code>Noto Sans CJK JP Light</code> | <code>Noto Sans CJK JP Regular</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps</a> styles:</p> <ul> <li> <p>VectorGrabStandardLight, VectorGrabStandardDark – <code>Noto Sans Regular</code> | <code>Noto Sans Medium</code> | <code>Noto Sans Bold</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/open-data.html\">Open Data</a> styles:</p> <ul> <li> <p>VectorOpenDataStandardLight, VectorOpenDataStandardDark, VectorOpenDataVisualizationLight, VectorOpenDataVisualizationDark – <code>Amazon Ember Regular,Noto Sans Regular</code> | <code>Amazon Ember Bold,Noto Sans Bold</code> | <code>Amazon Ember Medium,Noto Sans Medium</code> | <code>Amazon Ember Regular Italic,Noto Sans Italic</code> | <code>Amazon Ember Condensed RC Regular,Noto Sans Regular</code> | <code>Amazon Ember Condensed RC Bold,Noto Sans Bold</code> | <code>Amazon Ember Regular,Noto Sans Regular,Noto Sans Arabic Regular</code> | <code>Amazon Ember Condensed RC Bold,Noto Sans Bold,Noto Sans Arabic Condensed Bold</code> | <code>Amazon Ember Bold,Noto Sans Bold,Noto Sans Arabic Bold</code> | <code>Amazon Ember Regular Italic,Noto Sans Italic,Noto Sans Arabic Regular</code> | <code>Amazon Ember Condensed RC Regular,Noto Sans Regular,Noto Sans Arabic Condensed Regular</code> | <code>Amazon Ember Medium,Noto Sans Medium,Noto Sans Arabic Medium</code> </p> </li> </ul> <note> <p>The fonts used by the Open Data map styles are combined fonts that use <code>Amazon Ember</code> for most glyphs but <code>Noto Sans</code> for glyphs unsupported by <code>Amazon Ember</code>.</p> </note>",
+          "documentation":"<p>A comma-separated list of fonts to load glyphs from in order of preference. For example, <code>Noto Sans Regular, Arial Unicode</code>.</p> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/esri.html\">Esri</a> styles: </p> <ul> <li> <p>VectorEsriDarkGrayCanvas – <code>Ubuntu Medium Italic</code> | <code>Ubuntu Medium</code> | <code>Ubuntu Italic</code> | <code>Ubuntu Regular</code> | <code>Ubuntu Bold</code> </p> </li> <li> <p>VectorEsriLightGrayCanvas – <code>Ubuntu Italic</code> | <code>Ubuntu Regular</code> | <code>Ubuntu Light</code> | <code>Ubuntu Bold</code> </p> </li> <li> <p>VectorEsriTopographic – <code>Noto Sans Italic</code> | <code>Noto Sans Regular</code> | <code>Noto Sans Bold</code> | <code>Noto Serif Regular</code> | <code>Roboto Condensed Light Italic</code> </p> </li> <li> <p>VectorEsriStreets – <code>Arial Regular</code> | <code>Arial Italic</code> | <code>Arial Bold</code> </p> </li> <li> <p>VectorEsriNavigation – <code>Arial Regular</code> | <code>Arial Italic</code> | <code>Arial Bold</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/HERE.html\">HERE Technologies</a> styles:</p> <ul> <li> <p>VectorHereContrast – <code>Fira GO Regular</code> | <code>Fira GO Bold</code> </p> </li> <li> <p>VectorHereExplore, VectorHereExploreTruck, HybridHereExploreSatellite – <code>Fira GO Italic</code> | <code>Fira GO Map</code> | <code>Fira GO Map Bold</code> | <code>Noto Sans CJK JP Bold</code> | <code>Noto Sans CJK JP Light</code> | <code>Noto Sans CJK JP Regular</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps</a> styles:</p> <ul> <li> <p>VectorGrabStandardLight, VectorGrabStandardDark – <code>Noto Sans Regular</code> | <code>Noto Sans Medium</code> | <code>Noto Sans Bold</code> </p> </li> </ul> <p>Valid font stacks for <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/open-data.html\">Open Data</a> styles:</p> <ul> <li> <p>VectorOpenDataStandardLight, VectorOpenDataStandardDark, VectorOpenDataVisualizationLight, VectorOpenDataVisualizationDark – <code>Amazon Ember Regular,Noto Sans Regular</code> | <code>Amazon Ember Bold,Noto Sans Bold</code> | <code>Amazon Ember Medium,Noto Sans Medium</code> | <code>Amazon Ember Regular Italic,Noto Sans Italic</code> | <code>Amazon Ember Condensed RC Regular,Noto Sans Regular</code> | <code>Amazon Ember Condensed RC Bold,Noto Sans Bold</code> | <code>Amazon Ember Regular,Noto Sans Regular,Noto Sans Arabic Regular</code> | <code>Amazon Ember Condensed RC Bold,Noto Sans Bold,Noto Sans Arabic Condensed Bold</code> | <code>Amazon Ember Bold,Noto Sans Bold,Noto Sans Arabic Bold</code> | <code>Amazon Ember Regular Italic,Noto Sans Italic,Noto Sans Arabic Regular</code> | <code>Amazon Ember Condensed RC Regular,Noto Sans Regular,Noto Sans Arabic Condensed Regular</code> | <code>Amazon Ember Medium,Noto Sans Medium,Noto Sans Arabic Medium</code> </p> </li> </ul> <note> <p>The fonts used by the Open Data map styles are combined fonts that use <code>Amazon Ember</code> for most glyphs but <code>Noto Sans</code> for glyphs unsupported by <code>Amazon Ember</code>.</p> </note>",
           "location":"uri",
           "locationName":"FontStack"
         },
@@ -3552,7 +3671,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -3605,7 +3724,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -3649,7 +3768,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -3712,7 +3831,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -3720,15 +3839,18 @@
     },
     "GetMapTileRequestXString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetMapTileRequestYString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetMapTileRequestZString":{
       "type":"string",
-      "pattern":".*\\d+.*"
+      "pattern":".*\\d+.*",
+      "sensitive":true
     },
     "GetMapTileResponse":{
       "type":"structure",
@@ -3779,7 +3901,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -3877,11 +3999,11 @@
       "members":{
         "StartPosition":{
           "shape":"Position",
-          "documentation":"<p>The starting position of the leg. Follows the format <code>[longitude,latitude]</code>.</p> <note> <p>If the <code>StartPosition</code> isn't located on a road, it's <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>. </p> </note>"
+          "documentation":"<p>The starting position of the leg. Follows the format <code>[longitude,latitude]</code>.</p> <note> <p>If the <code>StartPosition</code> isn't located on a road, it's <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>. </p> </note>"
         },
         "EndPosition":{
           "shape":"Position",
-          "documentation":"<p>The terminating position of the leg. Follows the format <code>[longitude,latitude]</code>.</p> <note> <p>If the <code>EndPosition</code> isn't located on a road, it's <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/nap-to-nearby-road.html\">snapped to a nearby road</a>. </p> </note>"
+          "documentation":"<p>The terminating position of the leg. Follows the format <code>[longitude,latitude]</code>.</p> <note> <p>If the <code>EndPosition</code> isn't located on a road, it's <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/nap-to-nearby-road.html\">snapped to a nearby road</a>. </p> </note>"
         },
         "Distance":{
           "shape":"LegDistanceDouble",
@@ -3900,17 +4022,19 @@
           "documentation":"<p>Contains a list of steps, which represent subsections of a leg. Each step provides instructions for how to move to the next step in the leg such as the step's start position, end position, travel distance, travel duration, and geometry offset.</p>"
         }
       },
-      "documentation":"<p>Contains the calculated route's details for each path between a pair of positions. The number of legs returned corresponds to one fewer than the total number of positions in the request. </p> <p>For example, a route with a departure position and destination position returns one leg with the positions <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>:</p> <ul> <li> <p>The <code>StartPosition</code> is the departure position.</p> </li> <li> <p>The <code>EndPosition</code> is the destination position.</p> </li> </ul> <p>A route with a waypoint between the departure and destination position returns two legs with the positions snapped to a nearby road:</p> <ul> <li> <p>Leg 1: The <code>StartPosition</code> is the departure position . The <code>EndPosition</code> is the waypoint positon.</p> </li> <li> <p>Leg 2: The <code>StartPosition</code> is the waypoint position. The <code>EndPosition</code> is the destination position.</p> </li> </ul>"
+      "documentation":"<p>Contains the calculated route's details for each path between a pair of positions. The number of legs returned corresponds to one fewer than the total number of positions in the request. </p> <p>For example, a route with a departure position and destination position returns one leg with the positions <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/snap-to-nearby-road.html\">snapped to a nearby road</a>:</p> <ul> <li> <p>The <code>StartPosition</code> is the departure position.</p> </li> <li> <p>The <code>EndPosition</code> is the destination position.</p> </li> </ul> <p>A route with a waypoint between the departure and destination position returns two legs with the positions snapped to a nearby road:</p> <ul> <li> <p>Leg 1: The <code>StartPosition</code> is the departure position . The <code>EndPosition</code> is the waypoint positon.</p> </li> <li> <p>Leg 2: The <code>StartPosition</code> is the waypoint position. The <code>EndPosition</code> is the destination position.</p> </li> </ul>"
     },
     "LegDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "LegDurationSecondsDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "LegGeometry":{
       "type":"structure",
@@ -4010,7 +4134,7 @@
           "documentation":"<p>The accuracy of the device position.</p>"
         },
         "PositionProperties":{
-          "shape":"PropertyMap",
+          "shape":"PositionPropertyMap",
           "documentation":"<p>The properties associated with the position.</p>"
         }
       },
@@ -4074,13 +4198,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>No longer used. Always returns an empty string.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Unused."
+          "deprecatedMessage":"Deprecated. Unused.",
+          "deprecatedSince":"2022-02-01"
         },
         "CreateTime":{
           "shape":"Timestamp",
@@ -4113,7 +4239,7 @@
         },
         "Geometry":{
           "shape":"GeofenceGeometry",
-          "documentation":"<p>Contains the geofence geometry details describing a polygon or a circle.</p>"
+          "documentation":"<p>Contains the geofence geometry details describing the position of the geofence. Can be a circle, a polygon, or a multipolygon.</p>"
         },
         "Status":{
           "shape":"String",
@@ -4312,7 +4438,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "CreateTime":{
           "shape":"Timestamp",
@@ -4382,13 +4509,14 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of geospatial data. Values can be one of the following:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of geospatial data. Values can be one of the following:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "PricingPlan":{
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "CreateTime":{
           "shape":"Timestamp",
@@ -4458,13 +4586,14 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The data provider of traffic and road network data. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The data provider of traffic and road network data. Indicates one of the available providers:</p> <ul> <li> <p> <code>Esri</code> </p> </li> <li> <p> <code>Grab</code> </p> </li> <li> <p> <code>Here</code> </p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "PricingPlan":{
           "shape":"PricingPlan",
           "documentation":"<p>Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "CreateTime":{
           "shape":"Timestamp",
@@ -4596,13 +4725,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>Always returns <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. Always returns RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>No longer used. Always returns an empty string.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. Unused."
+          "deprecatedMessage":"Deprecated. Unused.",
+          "deprecatedSince":"2022-02-01"
         },
         "CreateTime":{
           "shape":"Timestamp",
@@ -4755,11 +4886,11 @@
       "members":{
         "Style":{
           "shape":"MapStyle",
-          "documentation":"<p>Specifies the map style selected from an available data provider.</p> <p>Valid <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/esri.html\">Esri map styles</a>:</p> <ul> <li> <p> <code>VectorEsriDarkGrayCanvas</code> – The Esri Dark Gray Canvas map style. A vector basemap with a dark gray, neutral background with minimal colors, labels, and features that's designed to draw attention to your thematic content. </p> </li> <li> <p> <code>RasterEsriImagery</code> – The Esri Imagery map style. A raster basemap that provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. </p> </li> <li> <p> <code>VectorEsriLightGrayCanvas</code> – The Esri Light Gray Canvas map style, which provides a detailed vector basemap with a light gray, neutral background style with minimal colors, labels, and features that's designed to draw attention to your thematic content. </p> </li> <li> <p> <code>VectorEsriTopographic</code> – The Esri Light map style, which provides a detailed vector basemap with a classic Esri map style.</p> </li> <li> <p> <code>VectorEsriStreets</code> – The Esri Street Map style, which provides a detailed vector basemap for the world symbolized with a classic Esri street map style. The vector tile layer is similar in content and style to the World Street Map raster map.</p> </li> <li> <p> <code>VectorEsriNavigation</code> – The Esri Navigation map style, which provides a detailed basemap for the world symbolized with a custom navigation map style that's designed for use during the day in mobile devices.</p> </li> </ul> <p>Valid <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/HERE.html\">HERE Technologies map styles</a>:</p> <ul> <li> <p> <code>VectorHereContrast</code> – The HERE Contrast (Berlin) map style is a high contrast detailed base map of the world that blends 3D and 2D rendering.</p> <note> <p>The <code>VectorHereContrast</code> style has been renamed from <code>VectorHereBerlin</code>. <code>VectorHereBerlin</code> has been deprecated, but will continue to work in applications that use it.</p> </note> </li> <li> <p> <code>VectorHereExplore</code> – A default HERE map style containing a neutral, global map and its features including roads, buildings, landmarks, and water features. It also now includes a fully designed map of Japan.</p> </li> <li> <p> <code>VectorHereExploreTruck</code> – A global map containing truck restrictions and attributes (e.g. width / height / HAZMAT) symbolized with highlighted segments and icons on top of HERE Explore to support use cases within transport and logistics.</p> </li> <li> <p> <code>RasterHereExploreSatellite</code> – A global map containing high resolution satellite imagery.</p> </li> <li> <p> <code>HybridHereExploreSatellite</code> – A global map displaying the road network, street names, and city labels over satellite imagery. This style will automatically retrieve both raster and vector tiles, and your charges will be based on total tiles retrieved.</p> <note> <p>Hybrid styles use both vector and raster tiles when rendering the map that you see. This means that more tiles are retrieved than when using either vector or raster tiles alone. Your charges will include all tiles retrieved.</p> </note> </li> </ul> <p>Valid <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html\">GrabMaps map styles</a>:</p> <ul> <li> <p> <code>VectorGrabStandardLight</code> – The Grab Standard Light map style provides a basemap with detailed land use coloring, area names, roads, landmarks, and points of interest covering Southeast Asia.</p> </li> <li> <p> <code>VectorGrabStandardDark</code> – The Grab Standard Dark map style provides a dark variation of the standard basemap covering Southeast Asia.</p> </li> </ul> <note> <p>Grab provides maps only for countries in Southeast Asia, and is only available in the Asia Pacific (Singapore) Region (<code>ap-southeast-1</code>). For more information, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and area covered</a>.</p> </note> <p>Valid <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/open-data.html\">Open Data map styles</a>:</p> <ul> <li> <p> <code>VectorOpenDataStandardLight</code> – The Open Data Standard Light map style provides a detailed basemap for the world suitable for website and mobile application use. The map includes highways major roads, minor roads, railways, water features, cities, parks, landmarks, building footprints, and administrative boundaries.</p> </li> <li> <p> <code>VectorOpenDataStandardDark</code> – Open Data Standard Dark is a dark-themed map style that provides a detailed basemap for the world suitable for website and mobile application use. The map includes highways major roads, minor roads, railways, water features, cities, parks, landmarks, building footprints, and administrative boundaries.</p> </li> <li> <p> <code>VectorOpenDataVisualizationLight</code> – The Open Data Visualization Light map style is a light-themed style with muted colors and fewer features that aids in understanding overlaid data.</p> </li> <li> <p> <code>VectorOpenDataVisualizationDark</code> – The Open Data Visualization Dark map style is a dark-themed style with muted colors and fewer features that aids in understanding overlaid data.</p> </li> </ul>"
+          "documentation":"<p>Specifies the map style selected from an available data provider.</p> <p>Valid <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/esri.html\">Esri map styles</a>:</p> <ul> <li> <p> <code>VectorEsriDarkGrayCanvas</code> – The Esri Dark Gray Canvas map style. A vector basemap with a dark gray, neutral background with minimal colors, labels, and features that's designed to draw attention to your thematic content. </p> </li> <li> <p> <code>RasterEsriImagery</code> – The Esri Imagery map style. A raster basemap that provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. </p> </li> <li> <p> <code>VectorEsriLightGrayCanvas</code> – The Esri Light Gray Canvas map style, which provides a detailed vector basemap with a light gray, neutral background style with minimal colors, labels, and features that's designed to draw attention to your thematic content. </p> </li> <li> <p> <code>VectorEsriTopographic</code> – The Esri Light map style, which provides a detailed vector basemap with a classic Esri map style.</p> </li> <li> <p> <code>VectorEsriStreets</code> – The Esri Street Map style, which provides a detailed vector basemap for the world symbolized with a classic Esri street map style. The vector tile layer is similar in content and style to the World Street Map raster map.</p> </li> <li> <p> <code>VectorEsriNavigation</code> – The Esri Navigation map style, which provides a detailed basemap for the world symbolized with a custom navigation map style that's designed for use during the day in mobile devices.</p> </li> </ul> <p>Valid <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/HERE.html\">HERE Technologies map styles</a>:</p> <ul> <li> <p> <code>VectorHereContrast</code> – The HERE Contrast (Berlin) map style is a high contrast detailed base map of the world that blends 3D and 2D rendering.</p> <note> <p>The <code>VectorHereContrast</code> style has been renamed from <code>VectorHereBerlin</code>. <code>VectorHereBerlin</code> has been deprecated, but will continue to work in applications that use it.</p> </note> </li> <li> <p> <code>VectorHereExplore</code> – A default HERE map style containing a neutral, global map and its features including roads, buildings, landmarks, and water features. It also now includes a fully designed map of Japan.</p> </li> <li> <p> <code>VectorHereExploreTruck</code> – A global map containing truck restrictions and attributes (e.g. width / height / HAZMAT) symbolized with highlighted segments and icons on top of HERE Explore to support use cases within transport and logistics.</p> </li> <li> <p> <code>RasterHereExploreSatellite</code> – A global map containing high resolution satellite imagery.</p> </li> <li> <p> <code>HybridHereExploreSatellite</code> – A global map displaying the road network, street names, and city labels over satellite imagery. This style will automatically retrieve both raster and vector tiles, and your charges will be based on total tiles retrieved.</p> <note> <p>Hybrid styles use both vector and raster tiles when rendering the map that you see. This means that more tiles are retrieved than when using either vector or raster tiles alone. Your charges will include all tiles retrieved.</p> </note> </li> </ul> <p>Valid <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html\">GrabMaps map styles</a>:</p> <ul> <li> <p> <code>VectorGrabStandardLight</code> – The Grab Standard Light map style provides a basemap with detailed land use coloring, area names, roads, landmarks, and points of interest covering Southeast Asia.</p> </li> <li> <p> <code>VectorGrabStandardDark</code> – The Grab Standard Dark map style provides a dark variation of the standard basemap covering Southeast Asia.</p> </li> </ul> <note> <p>Grab provides maps only for countries in Southeast Asia, and is only available in the Asia Pacific (Singapore) Region (<code>ap-southeast-1</code>). For more information, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/grab.html#grab-coverage-area\">GrabMaps countries and area covered</a>.</p> </note> <p>Valid <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/open-data.html\">Open Data map styles</a>:</p> <ul> <li> <p> <code>VectorOpenDataStandardLight</code> – The Open Data Standard Light map style provides a detailed basemap for the world suitable for website and mobile application use. The map includes highways major roads, minor roads, railways, water features, cities, parks, landmarks, building footprints, and administrative boundaries.</p> </li> <li> <p> <code>VectorOpenDataStandardDark</code> – Open Data Standard Dark is a dark-themed map style that provides a detailed basemap for the world suitable for website and mobile application use. The map includes highways major roads, minor roads, railways, water features, cities, parks, landmarks, building footprints, and administrative boundaries.</p> </li> <li> <p> <code>VectorOpenDataVisualizationLight</code> – The Open Data Visualization Light map style is a light-themed style with muted colors and fewer features that aids in understanding overlaid data.</p> </li> <li> <p> <code>VectorOpenDataVisualizationDark</code> – The Open Data Visualization Dark map style is a dark-themed style with muted colors and fewer features that aids in understanding overlaid data.</p> </li> </ul>"
         },
         "PoliticalView":{
           "shape":"CountryCode3",
-          "documentation":"<p>Specifies the political view for the style. Leave unset to not use a political view, or, for styles that support specific political views, you can choose a view, such as <code>IND</code> for the Indian view.</p> <p>Default is unset.</p> <note> <p>Not all map resources or styles support political view styles. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#political-views\">Political views</a> for more information.</p> </note>"
+          "documentation":"<p>Specifies the political view for the style. Leave unset to not use a political view, or, for styles that support specific political views, you can choose a view, such as <code>IND</code> for the Indian view.</p> <p>Default is unset.</p> <note> <p>Not all map resources or styles support political view styles. See <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/map-concepts.html#political-views\">Political views</a> for more information.</p> </note>"
         },
         "CustomLayers":{
           "shape":"CustomLayerList",
@@ -4773,7 +4904,7 @@
       "members":{
         "PoliticalView":{
           "shape":"CountryCode3OrEmpty",
-          "documentation":"<p>Specifies the political view for the style. Set to an empty string to not use a political view, or, for styles that support specific political views, you can choose a view, such as <code>IND</code> for the Indian view.</p> <note> <p>Not all map resources or styles support political view styles. See <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html#political-views\">Political views</a> for more information.</p> </note>"
+          "documentation":"<p>Specifies the political view for the style. Set to an empty string to not use a political view, or, for styles that support specific political views, you can choose a view, such as <code>IND</code> for the Indian view.</p> <note> <p>Not all map resources or styles support political view styles. See <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/map-concepts.html#political-views\">Political views</a> for more information.</p> </note>"
         },
         "CustomLayers":{
           "shape":"CustomLayerList",
@@ -4809,44 +4940,44 @@
       "required":["Geometry"],
       "members":{
         "Label":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The full name and address of the point of interest such as a city, region, or country. For example, <code>123 Any Street, Any Town, USA</code>.</p>"
         },
         "Geometry":{"shape":"PlaceGeometry"},
         "AddressNumber":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The numerical portion of an address, such as a building number. </p>"
         },
         "Street":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name for a street or a road to identify a location. For example, <code>Main Street</code>.</p>"
         },
         "Neighborhood":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of a community district. For example, <code>Downtown</code>.</p>"
         },
         "Municipality":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>A name for a local area, such as a city or town name. For example, <code>Toronto</code>.</p>"
         },
         "SubRegion":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>A county, or an area that's part of a larger region. For example, <code>Metro Vancouver</code>.</p>"
         },
         "Region":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>A name for an area or geographical division, such as a province or state name. For example, <code>British Columbia</code>.</p>"
         },
         "Country":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>A country/region specified using <a href=\"https://www.iso.org/iso-3166-country-codes.html\">ISO 3166</a> 3-digit country/region code. For example, <code>CAN</code>.</p>"
         },
         "PostalCode":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>A group of numbers and letters in a country-specific format, which accompanies the address for the purpose of identifying a location. </p>"
         },
         "Interpolated":{
-          "shape":"Boolean",
+          "shape":"SensitiveBoolean",
           "documentation":"<p> <code>True</code> if the result is interpolated from other known places.</p> <p> <code>False</code> if the Place is a known place.</p> <p>Not returned when the partner does not provide the information.</p> <p>For example, returns <code>False</code> for an address location that is found in the partner data, but returns <code>True</code> if an address does not exist in the partner data and its location is calculated by interpolating between other known addresses. </p>"
         },
         "TimeZone":{
@@ -4854,23 +4985,23 @@
           "documentation":"<p>The time zone in which the <code>Place</code> is located. Returned only when using HERE or Grab as the selected partner.</p>"
         },
         "UnitType":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>For addresses with a <code>UnitNumber</code>, the type of unit. For example, <code>Apartment</code>.</p> <note> <p>Returned only for a place index that uses Esri as a data provider.</p> </note>"
         },
         "UnitNumber":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>For addresses with multiple units, the unit identifier. Can include numbers and letters, for example <code>3B</code> or <code>Unit 123</code>.</p> <note> <p>Returned only for a place index that uses Esri or Grab as a data provider. Is not returned for <code>SearchPlaceIndexForPosition</code>.</p> </note>"
         },
         "Categories":{
           "shape":"PlaceCategoryList",
-          "documentation":"<p>The Amazon Location categories that describe this Place.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>The Amazon Location categories that describe this Place.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service developer guide</i>.</p>"
         },
         "SupplementalCategories":{
           "shape":"PlaceSupplementalCategoryList",
           "documentation":"<p>Categories from the data provider that describe the Place that are not mapped to any Amazon Location categories.</p>"
         },
         "SubMunicipality":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>An area that's part of a larger municipality. For example, <code>Blissville </code> is a submunicipality in the Queen County in New York.</p> <note> <p>This property supported by Esri and OpenData. The Esri property is <code>district</code>, and the OpenData property is <code>borough</code>.</p> </note>"
         }
       },
@@ -4879,7 +5010,8 @@
     "PlaceCategory":{
       "type":"string",
       "max":35,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "PlaceCategoryList":{
       "type":"list",
@@ -4897,7 +5029,10 @@
       },
       "documentation":"<p>Places uses a point geometry to specify a location or a Place.</p>"
     },
-    "PlaceId":{"type":"string"},
+    "PlaceId":{
+      "type":"string",
+      "sensitive":true
+    },
     "PlaceIndexSearchResultLimit":{
       "type":"integer",
       "box":true,
@@ -4907,7 +5042,8 @@
     "PlaceSupplementalCategory":{
       "type":"string",
       "max":35,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "PlaceSupplementalCategoryList":{
       "type":"list",
@@ -4930,6 +5066,24 @@
         "AccuracyBased"
       ]
     },
+    "PositionPropertyMap":{
+      "type":"map",
+      "key":{"shape":"PositionPropertyMapKeyString"},
+      "value":{"shape":"PositionPropertyMapValueString"},
+      "max":4,
+      "min":0,
+      "sensitive":true
+    },
+    "PositionPropertyMapKeyString":{
+      "type":"string",
+      "max":20,
+      "min":1
+    },
+    "PositionPropertyMapValueString":{
+      "type":"string",
+      "max":150,
+      "min":1
+    },
     "PositionalAccuracy":{
       "type":"structure",
       "required":["Horizontal"],
@@ -4945,7 +5099,8 @@
       "type":"double",
       "box":true,
       "max":10000000,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "PricingPlan":{
       "type":"string",
@@ -4995,7 +5150,7 @@
         },
         "Geometry":{
           "shape":"GeofenceGeometry",
-          "documentation":"<p>Contains the details to specify the position of the geofence. Can be a polygon, a circle or a polygon encoded in Geobuf format. Including multiple selections will return a validation error.</p> <note> <p>The <a href=\"https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html\"> geofence polygon</a> format supports a maximum of 1,000 vertices. The <a href=\"https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html\">Geofence Geobuf</a> format supports a maximum of 100,000 vertices.</p> </note>"
+          "documentation":"<p>Contains the details to specify the position of the geofence. Can be a circle, a polygon, or a multipolygon. <code>Polygon</code> and <code>MultiPolygon</code> geometries can be defined using their respective parameters, or encoded in Geobuf format using the <code>Geobuf</code> parameter. Including multiple geometry types in the same request will return a validation error.</p> <note> <p>The geofence <code>Polygon</code> and <code>MultiPolygon</code> formats support a maximum of 1,000 total vertices. The <code>Geobuf</code> format supports a maximum of 100,000 vertices.</p> </note>"
         },
         "GeofenceProperties":{
           "shape":"PropertyMap",
@@ -5029,7 +5184,8 @@
       "type":"string",
       "max":253,
       "min":0,
-      "pattern":"([$\\-._+!*\\x{60}(),;/?:@=&\\w]|%([0-9a-fA-F?]{2}|[0-9a-fA-F?]?[*]))+"
+      "pattern":"([\\w!$&()*+,./:;=?@\\x{60}-]|%([\\dA-Fa-f]{2}|[\\dA-Fa-f]?\\*))+",
+      "sensitive":true
     },
     "ResourceDescription":{
       "type":"string",
@@ -5083,12 +5239,14 @@
     "RouteMatrixEntryDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixEntryDurationSecondsDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "RouteMatrixEntryError":{
       "type":"structure",
@@ -5157,7 +5315,8 @@
     "SearchForPositionResultDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SearchForPositionResultList":{
       "type":"list",
@@ -5168,7 +5327,7 @@
       "required":["Text"],
       "members":{
         "Text":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The text of the place suggestion, typically formatted as an address string.</p>"
         },
         "PlaceId":{
@@ -5177,7 +5336,7 @@
         },
         "Categories":{
           "shape":"PlaceCategoryList",
-          "documentation":"<p>The Amazon Location categories that describe the Place.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>The Amazon Location categories that describe the Place.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service developer guide</i>.</p>"
         },
         "SupplementalCategories":{
           "shape":"PlaceSupplementalCategoryList",
@@ -5216,7 +5375,8 @@
     "SearchForTextResultDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SearchForTextResultList":{
       "type":"list",
@@ -5226,7 +5386,8 @@
       "type":"double",
       "box":true,
       "max":1,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "SearchPlaceIndexForPositionRequest":{
       "type":"structure",
@@ -5255,7 +5416,7 @@
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -5295,7 +5456,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "Language":{
           "shape":"LanguageTag",
@@ -5343,11 +5504,11 @@
         },
         "FilterCategories":{
           "shape":"FilterPlaceCategoryList",
-          "documentation":"<p>A list of one or more Amazon Location categories to filter the returned places. If you include more than one category, the results will include results that match <i>any</i> of the categories listed.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of one or more Amazon Location categories to filter the returned places. If you include more than one category, the results will include results that match <i>any</i> of the categories listed.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service developer guide</i>.</p>"
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -5411,7 +5572,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "Language":{
           "shape":"LanguageTag",
@@ -5463,11 +5624,11 @@
         },
         "FilterCategories":{
           "shape":"FilterPlaceCategoryList",
-          "documentation":"<p>A list of one or more Amazon Location categories to filter the returned places. If you include more than one category, the results will include results that match <i>any</i> of the categories listed.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service Developer Guide</i>.</p>"
+          "documentation":"<p>A list of one or more Amazon Location categories to filter the returned places. If you include more than one category, the results will include results that match <i>any</i> of the categories listed.</p> <p>For more information about using categories, including a list of Amazon Location categories, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/category-filtering.html\">Categories and filtering</a>, in the <i>Amazon Location Service developer guide</i>.</p>"
         },
         "Key":{
           "shape":"ApiKey",
-          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
+          "documentation":"<p>The optional <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/using-apikeys.html\">API key</a> to authorize the request.</p>",
           "location":"querystring",
           "locationName":"key"
         }
@@ -5529,7 +5690,7 @@
         },
         "DataSource":{
           "shape":"String",
-          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
+          "documentation":"<p>The geospatial data provider attached to the place index resource specified in the request. Values can be one of the following:</p> <ul> <li> <p>Esri</p> </li> <li> <p>Grab</p> </li> <li> <p>Here</p> </li> </ul> <p>For more information about data providers, see <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/what-is-data-provider.html\">Amazon Location Service data providers</a>.</p>"
         },
         "Language":{
           "shape":"LanguageTag",
@@ -5542,6 +5703,21 @@
       },
       "documentation":"<p>A summary of the request sent by using <code>SearchPlaceIndexForText</code>.</p>"
     },
+    "SensitiveBoolean":{
+      "type":"boolean",
+      "box":true,
+      "sensitive":true
+    },
+    "SensitiveDouble":{
+      "type":"double",
+      "box":true,
+      "sensitive":true
+    },
+    "SensitiveInteger":{
+      "type":"integer",
+      "box":true,
+      "sensitive":true
+    },
     "SensitiveString":{
       "type":"string",
       "sensitive":true
@@ -5556,13 +5732,19 @@
           "locationName":"message"
         }
       },
-      "documentation":"<p>The operation was denied because the request would exceed the maximum <a href=\"https://docs.aws.amazon.com/location/latest/developerguide/location-quotas.html\">quota</a> set for Amazon Location Service.</p>",
+      "documentation":"<p>The operation was denied because the request would exceed the maximum <a href=\"https://docs.aws.amazon.com/location/previous/developerguide/location-quotas.html\">quota</a> set for Amazon Location Service.</p>",
       "error":{
         "httpStatusCode":402,
         "senderFault":true
       },
       "exception":true
     },
+    "Sha1CertificateFingerprint":{
+      "type":"string",
+      "max":59,
+      "min":59,
+      "pattern":"([A-Fa-f0-9]{2}:){19}[A-Fa-f0-9]{2}"
+    },
     "SpeedUnit":{
       "type":"string",
       "enum":[
@@ -5612,12 +5794,14 @@
     "StepDistanceDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StepDurationSecondsDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "StepGeometryOffsetInteger":{
       "type":"integer",
@@ -5633,7 +5817,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"[a-zA-Z+-=._:/]+"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.,:/=+\\-@]*)"
     },
     "TagKeys":{
       "type":"list",
@@ -5669,14 +5853,13 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"[A-Za-z0-9 _=@:.+-/]*"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.,:/=+\\-@]*)"
     },
     "ThrottlingException":{
       "type":"structure",
@@ -5700,11 +5883,11 @@
       "required":["Name"],
       "members":{
         "Name":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The name of the time zone, following the <a href=\"https://www.iana.org/time-zones\"> IANA time zone standard</a>. For example, <code>America/Los_Angeles</code>.</p>"
         },
         "Offset":{
-          "shape":"Integer",
+          "shape":"SensitiveInteger",
           "documentation":"<p>The time zone's offset, in seconds, from UTC.</p>"
         }
       },
@@ -5712,6 +5895,7 @@
     },
     "Timestamp":{
       "type":"timestamp",
+      "sensitive":true,
       "timestampFormat":"iso8601"
     },
     "Token":{
@@ -5764,17 +5948,20 @@
     "TruckDimensionsHeightDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TruckDimensionsLengthDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TruckDimensionsWidthDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "TruckWeight":{
       "type":"structure",
@@ -5793,7 +5980,8 @@
     "TruckWeightTotalDouble":{
       "type":"double",
       "box":true,
-      "min":0
+      "min":0,
+      "sensitive":true
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -5818,8 +6006,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateGeofenceCollectionRequest":{
       "type":"structure",
@@ -5835,13 +6022,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>This parameter is no longer used.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. No longer allowed."
+          "deprecatedMessage":"Deprecated. No longer allowed.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -5939,7 +6128,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -5987,7 +6177,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -6035,7 +6226,8 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -6079,13 +6271,15 @@
           "shape":"PricingPlan",
           "documentation":"<p>No longer used. If included, the only allowed value is <code>RequestBasedUsage</code>.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage."
+          "deprecatedMessage":"Deprecated. If included, the only allowed value is RequestBasedUsage.",
+          "deprecatedSince":"2022-02-01"
         },
         "PricingPlanDataSource":{
           "shape":"String",
           "documentation":"<p>This parameter is no longer used.</p>",
           "deprecated":true,
-          "deprecatedMessage":"Deprecated. No longer allowed."
+          "deprecatedMessage":"Deprecated. No longer allowed.",
+          "deprecatedSince":"2022-02-01"
         },
         "Description":{
           "shape":"ResourceDescription",
@@ -6192,7 +6386,8 @@
         "Missing",
         "CannotParse",
         "FieldValidationFailed",
-        "Other"
+        "Other",
+        "UnknownField"
       ]
     },
     "VehicleWeightUnit":{
@@ -6283,7 +6478,7 @@
       "type":"string",
       "max":17,
       "min":12,
-      "pattern":"([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})"
+      "pattern":"([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})"
     },
     "WiFiAccessPointRssInteger":{
       "type":"integer",
diff -pruN 2.23.6-1/awscli/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/logs/2014-03-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/logs/2014-03-28/service-2.json 2.31.35-1/awscli/botocore/data/logs/2014-03-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/logs/2014-03-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/logs/2014-03-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -27,7 +27,7 @@
         {"shape":"OperationAbortedException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Associates the specified KMS key with either one log group in the account, or with all stored CloudWatch Logs query insights results in the account.</p> <p>When you use <code>AssociateKmsKey</code>, you specify either the <code>logGroupName</code> parameter or the <code>resourceIdentifier</code> parameter. You can't specify both of those parameters in the same operation.</p> <ul> <li> <p>Specify the <code>logGroupName</code> parameter to cause log events ingested into that log group to be encrypted with that key. Only the log events ingested after the key is associated are encrypted with that key.</p> <p>Associating a KMS key with a log group overrides any existing associations between the log group and a KMS key. After a KMS key is associated with a log group, all newly ingested data for the log group is encrypted using the KMS key. This association is stored as long as the data encrypted with the KMS key is still within CloudWatch Logs. This enables CloudWatch Logs to decrypt this data whenever it is requested.</p> <p>Associating a key with a log group does not cause the results of queries of that log group to be encrypted with that key. To have query results encrypted with a KMS key, you must use an <code>AssociateKmsKey</code> operation with the <code>resourceIdentifier</code> parameter that specifies a <code>query-result</code> resource. </p> </li> <li> <p>Specify the <code>resourceIdentifier</code> parameter with a <code>query-result</code> resource, to use that key to encrypt the stored results of all future <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartQuery.html\">StartQuery</a> operations in the account. The response from a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetQueryResults.html\">GetQueryResults</a> operation will still return the query results in plain text.</p> <p>Even if you have not associated a key with your query results, the query results are encrypted when stored, using the default CloudWatch Logs method.</p> <p>If you run a query from a monitoring account that queries logs in a source account, the query results key from the monitoring account, if any, is used.</p> </li> </ul> <important> <p>If you delete the key that is used to encrypt log events or log group query results, then all the associated stored log events or query results that were encrypted with that key will be unencryptable and unusable.</p> </important> <note> <p>CloudWatch Logs supports only symmetric KMS keys. Do not use an associate an asymmetric KMS key with your log group or query results. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Using Symmetric and Asymmetric Keys</a>.</p> </note> <p>It can take up to 5 minutes for this operation to take effect.</p> <p>If you attempt to associate a KMS key with a log group but the KMS key does not exist or the KMS key is disabled, you receive an <code>InvalidParameterException</code> error. </p>"
+      "documentation":"<p>Associates the specified KMS key with either one log group in the account, or with all stored CloudWatch Logs query insights results in the account.</p> <p>When you use <code>AssociateKmsKey</code>, you specify either the <code>logGroupName</code> parameter or the <code>resourceIdentifier</code> parameter. You can't specify both of those parameters in the same operation.</p> <ul> <li> <p>Specify the <code>logGroupName</code> parameter to cause log events ingested into that log group to be encrypted with that key. Only the log events ingested after the key is associated are encrypted with that key.</p> <p>Associating a KMS key with a log group overrides any existing associations between the log group and a KMS key. After a KMS key is associated with a log group, all newly ingested data for the log group is encrypted using the KMS key. This association is stored as long as the data encrypted with the KMS key is still within CloudWatch Logs. This enables CloudWatch Logs to decrypt this data whenever it is requested.</p> <p>Associating a key with a log group does not cause the results of queries of that log group to be encrypted with that key. To have query results encrypted with a KMS key, you must use an <code>AssociateKmsKey</code> operation with the <code>resourceIdentifier</code> parameter that specifies a <code>query-result</code> resource. </p> </li> <li> <p>Specify the <code>resourceIdentifier</code> parameter with a <code>query-result</code> resource, to use that key to encrypt the stored results of all future <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartQuery.html\">StartQuery</a> operations in the account. The response from a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetQueryResults.html\">GetQueryResults</a> operation will still return the query results in plain text.</p> <p>Even if you have not associated a key with your query results, the query results are encrypted when stored, using the default CloudWatch Logs method.</p> <p>If you run a query from a monitoring account that queries logs in a source account, the query results key from the monitoring account, if any, is used.</p> </li> </ul> <important> <p>If you delete the key that is used to encrypt log events or log group query results, then all the associated stored log events or query results that were encrypted with that key will be unencryptable and unusable.</p> </important> <note> <p>CloudWatch Logs supports only symmetric KMS keys. Do not associate an asymmetric KMS key with your log group or query results. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Using Symmetric and Asymmetric Keys</a>.</p> </note> <p>It can take up to 5 minutes for this operation to take effect.</p> <p>If you attempt to associate a KMS key with a log group but the KMS key does not exist or the KMS key is disabled, you receive an <code>InvalidParameterException</code> error. </p>"
     },
     "CancelExportTask":{
       "name":"CancelExportTask",
@@ -61,7 +61,7 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates a <i>delivery</i>. A delivery is a connection between a logical <i>delivery source</i> and a logical <i>delivery destination</i> that you have already created.</p> <p>Only some Amazon Web Services services support being configured as a delivery source using this operation. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>A delivery destination can represent a log group in CloudWatch Logs, an Amazon S3 bucket, or a delivery stream in Firehose.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\">PutDeliveryDestination</a>.</p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>To update an existing delivery configuration, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UpdateDeliveryConfiguration.html\">UpdateDeliveryConfiguration</a>.</p>"
+      "documentation":"<p>Creates a <i>delivery</i>. A delivery is a connection between a logical <i>delivery source</i> and a logical <i>delivery destination</i> that you have already created.</p> <p>Only some Amazon Web Services services support being configured as a delivery source using this operation. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>A delivery destination can represent a log group in CloudWatch Logs, an Amazon S3 bucket, a delivery stream in Firehose, or X-Ray.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\">PutDeliveryDestination</a>.</p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>To update an existing delivery configuration, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UpdateDeliveryConfiguration.html\">UpdateDeliveryConfiguration</a>.</p>"
     },
     "CreateExportTask":{
       "name":"CreateExportTask",
@@ -79,7 +79,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ResourceAlreadyExistsException"}
       ],
-      "documentation":"<p>Creates an export task so that you can efficiently export data from a log group to an Amazon S3 bucket. When you perform a <code>CreateExportTask</code> operation, you must use credentials that have permission to write to the S3 bucket that you specify as the destination.</p> <p>Exporting log data to S3 buckets that are encrypted by KMS is supported. Exporting log data to Amazon S3 buckets that have S3 Object Lock enabled with a retention period is also supported.</p> <p>Exporting to S3 buckets that are encrypted with AES-256 is supported. </p> <p>This is an asynchronous call. If all the required information is provided, this operation initiates an export task and responds with the ID of the task. After the task has started, you can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeExportTasks.html\">DescribeExportTasks</a> to get the status of the export task. Each account can only have one active (<code>RUNNING</code> or <code>PENDING</code>) export task at a time. To cancel an export task, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CancelExportTask.html\">CancelExportTask</a>.</p> <p>You can export logs from multiple log groups or multiple time ranges to the same S3 bucket. To separate log data for each export task, specify a prefix to be used as the Amazon S3 key prefix for all exported objects.</p> <note> <p>We recommend that you don't regularly export to Amazon S3 as a way to continuously archive your logs. For that use case, we instaed recommend that you use subscriptions. For more information about subscriptions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html\">Real-time processing of log data with subscriptions</a>.</p> </note> <note> <p>Time-based sorting on chunks of log data inside an exported file is not guaranteed. You can sort the exported log field data by using Linux utilities.</p> </note>"
+      "documentation":"<p>Creates an export task so that you can efficiently export data from a log group to an Amazon S3 bucket. When you perform a <code>CreateExportTask</code> operation, you must use credentials that have permission to write to the S3 bucket that you specify as the destination.</p> <p>Exporting log data to S3 buckets that are encrypted by KMS is supported. Exporting log data to Amazon S3 buckets that have S3 Object Lock enabled with a retention period is also supported.</p> <p>Exporting to S3 buckets that are encrypted with AES-256 is supported. </p> <p>This is an asynchronous call. If all the required information is provided, this operation initiates an export task and responds with the ID of the task. After the task has started, you can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeExportTasks.html\">DescribeExportTasks</a> to get the status of the export task. Each account can only have one active (<code>RUNNING</code> or <code>PENDING</code>) export task at a time. To cancel an export task, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CancelExportTask.html\">CancelExportTask</a>.</p> <p>You can export logs from multiple log groups or multiple time ranges to the same S3 bucket. To separate log data for each export task, specify a prefix to be used as the Amazon S3 key prefix for all exported objects.</p> <note> <p>We recommend that you don't regularly export to Amazon S3 as a way to continuously archive your logs. For that use case, we instead recommend that you use subscriptions. For more information about subscriptions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html\">Real-time processing of log data with subscriptions</a>.</p> </note> <note> <p>Time-based sorting on chunks of log data inside an exported file is not guaranteed. You can sort the exported log field data by using Linux utilities.</p> </note>"
     },
     "CreateLogAnomalyDetector":{
       "name":"CreateLogAnomalyDetector",
@@ -358,6 +358,7 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"OperationAbortedException"},
         {"shape":"ServiceUnavailableException"}
       ],
       "documentation":"<p>Deletes a resource policy from this account. This revokes the access of the identities in that policy to put log events to this account.</p>"
@@ -422,7 +423,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns a list of all CloudWatch Logs account policies in the account.</p> <p>To use this operation, you must be signed on with the correct permissions depending on the type of policy that you are retrieving information for.</p> <ul> <li> <p>To see data protection policies, you must have the <code>logs:GetDataProtectionPolicy</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see subscription filter policies, you must have the <code>logs:DescrubeSubscriptionFilters</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see transformer policies, you must have the <code>logs:GetTransformer</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see field index policies, you must have the <code>logs:DescribeIndexPolicies</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> </ul>"
+      "documentation":"<p>Returns a list of all CloudWatch Logs account policies in the account.</p> <p>To use this operation, you must be signed on with the correct permissions depending on the type of policy that you are retrieving information for.</p> <ul> <li> <p>To see data protection policies, you must have the <code>logs:GetDataProtectionPolicy</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see subscription filter policies, you must have the <code>logs:DescribeSubscriptionFilters</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see transformer policies, you must have the <code>logs:GetTransformer</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> <li> <p>To see field index policies, you must have the <code>logs:DescribeIndexPolicies</code> and <code>logs:DescribeAccountPolicies</code> permissions.</p> </li> </ul>"
     },
     "DescribeConfigurationTemplates":{
       "name":"DescribeConfigurationTemplates",
@@ -454,7 +455,7 @@
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Retrieves a list of the deliveries that have been created in the account.</p> <p>A <i>delivery</i> is a connection between a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\"> <i>delivery source</i> </a> and a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\"> <i>delivery destination</i> </a>.</p> <p>A delivery source represents an Amazon Web Services resource that sends logs to an logs delivery destination. The destination can be CloudWatch Logs, Amazon S3, or Firehose. Only some Amazon Web Services services support being configured as a delivery source. These services are listed in <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enable logging from Amazon Web Services services.</a> </p>"
+      "documentation":"<p>Retrieves a list of the deliveries that have been created in the account.</p> <p>A <i>delivery</i> is a connection between a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\"> <i>delivery source</i> </a> and a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\"> <i>delivery destination</i> </a>.</p> <p>A delivery source represents an Amazon Web Services resource that sends logs to an logs delivery destination. The destination can be CloudWatch Logs, Amazon S3, Firehose or X-Ray. Only some Amazon Web Services services support being configured as a delivery source. These services are listed in <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enable logging from Amazon Web Services services.</a> </p>"
     },
     "DescribeDeliveryDestinations":{
       "name":"DescribeDeliveryDestinations",
@@ -531,7 +532,7 @@
         {"shape":"OperationAbortedException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns a list of field indexes listed in the field index policies of one or more log groups. For more information about field index policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a>.</p>"
+      "documentation":"<p>Returns a list of custom and default field indexes which are discovered in log data. For more information about field index policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a>.</p>"
     },
     "DescribeIndexPolicies":{
       "name":"DescribeIndexPolicies",
@@ -548,7 +549,7 @@
         {"shape":"OperationAbortedException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns the field index policies of one or more log groups. For more information about field index policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a>.</p> <p>If a specified log group has a log-group level index policy, that policy is returned by this operation.</p> <p>If a specified log group doesn't have a log-group level index policy, but an account-wide index policy applies to it, that account-wide policy is returned by this operation.</p> <p>To find information about only account-level policies, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeAccountPolicies.html\">DescribeAccountPolicies</a> instead.</p>"
+      "documentation":"<p>Returns the field index policies of the specified log group. For more information about field index policies, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a>.</p> <p>If a specified log group has a log-group level index policy, that policy is returned by this operation.</p> <p>If a specified log group doesn't have a log-group level index policy, but an account-wide index policy applies to it, that account-wide policy is returned by this operation.</p> <p>To find information about only account-level policies, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeAccountPolicies.html\">DescribeAccountPolicies</a> instead.</p>"
     },
     "DescribeLogGroups":{
       "name":"DescribeLogGroups",
@@ -562,7 +563,7 @@
         {"shape":"InvalidParameterException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Lists the specified log groups. You can list all your log groups or filter the results by prefix. The results are ASCII-sorted by log group name.</p> <p>CloudWatch Logs doesn't support IAM policies that control access to the <code>DescribeLogGroups</code> action by using the <code>aws:ResourceTag/<i>key-name</i> </code> condition key. Other CloudWatch Logs actions do support the use of the <code>aws:ResourceTag/<i>key-name</i> </code> condition key to control access. For more information about using tags to control access, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html\">Controlling access to Amazon Web Services resources using tags</a>.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p>"
+      "documentation":"<p>Returns information about log groups. You can return all your log groups or filter the results by prefix. The results are ASCII-sorted by log group name.</p> <p>CloudWatch Logs doesn't support IAM policies that control access to the <code>DescribeLogGroups</code> action by using the <code>aws:ResourceTag/<i>key-name</i> </code> condition key. Other CloudWatch Logs actions do support the use of the <code>aws:ResourceTag/<i>key-name</i> </code> condition key to control access. For more information about using tags to control access, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html\">Controlling access to Amazon Web Services resources using tags</a>.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p>"
     },
     "DescribeLogStreams":{
       "name":"DescribeLogStreams",
@@ -680,7 +681,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Lists log events from the specified log group. You can list all the log events or filter the results using a filter pattern, a time range, and the name of the log stream.</p> <p>You must have the <code>logs:FilterLogEvents</code> permission to perform this operation.</p> <p>You can specify the log group to search by using either <code>logGroupIdentifier</code> or <code>logGroupName</code>. You must include one of these two parameters, but you can't include both. </p> <p>By default, this operation returns as many log events as can fit in 1 MB (up to 10,000 log events) or all the events found within the specified time range. If the results include a token, that means there are more log events available. You can get additional results by specifying the token in a subsequent call. This operation can return empty results while there are more log events available through the token.</p> <p>The returned log events are sorted by event timestamp, the timestamp when the event was ingested by CloudWatch Logs, and the ID of the <code>PutLogEvents</code> request.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p>"
+      "documentation":"<p>Lists log events from the specified log group. You can list all the log events or filter the results using one or more of the following:</p> <ul> <li> <p>A filter pattern</p> </li> <li> <p>A time range</p> </li> <li> <p>The log stream name, or a log stream name prefix that matches multiple log streams</p> </li> </ul> <p>You must have the <code>logs:FilterLogEvents</code> permission to perform this operation.</p> <p>You can specify the log group to search by using either <code>logGroupIdentifier</code> or <code>logGroupName</code>. You must include one of these two parameters, but you can't include both. </p> <p> <code>FilterLogEvents</code> is a paginated operation. Each page returned can contain up to 1 MB of log events or up to 10,000 log events. A returned page might only be partially full, or even empty. For example, if the result of a query would return 15,000 log events, the first page isn't guaranteed to have 10,000 log events even if they all fit into 1 MB.</p> <p>Partially full or empty pages don't necessarily mean that pagination is finished. If the results include a <code>nextToken</code>, there might be more log events available. You can return these additional log events by providing the nextToken in a subsequent <code>FilterLogEvents</code> operation. If the results don't include a <code>nextToken</code>, then pagination is finished. </p> <p>Specifying the <code>limit</code> parameter only guarantees that a single page doesn't return more log events than the specified limit, but it might return fewer events than the limit. This is the expected API behavior.</p> <p>The returned log events are sorted by event timestamp, the timestamp when the event was ingested by CloudWatch Logs, and the ID of the <code>PutLogEvents</code> request.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p> <note> <p>If you are using <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html\">log transformation</a>, the <code>FilterLogEvents</code> operation returns only the original versions of log events, before they were transformed. To view the transformed versions, you must use a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html\">CloudWatch Logs query.</a> </p> </note>"
     },
     "GetDataProtectionPolicy":{
       "name":"GetDataProtectionPolicy",
@@ -793,7 +794,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"OperationAbortedException"}
       ],
-      "documentation":"<p>Retrieves information about the log anomaly detector that you specify.</p>"
+      "documentation":"<p>Retrieves information about the log anomaly detector that you specify. The KMS key ARN detected is valid.</p>"
     },
     "GetLogEvents":{
       "name":"GetLogEvents",
@@ -808,7 +809,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Lists log events from the specified log stream. You can list all of the log events or filter using a time range.</p> <p>By default, this operation returns as many log events as can fit in a response size of 1MB (up to 10,000 log events). You can get additional log events by specifying one of the tokens in a subsequent call. This operation can return empty results while there are more log events available through the token.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p> <p>You can specify the log group to search by using either <code>logGroupIdentifier</code> or <code>logGroupName</code>. You must include one of these two parameters, but you can't include both. </p>"
+      "documentation":"<p>Lists log events from the specified log stream. You can list all of the log events or filter using a time range.</p> <p> <code>GetLogEvents</code> is a paginated operation. Each page returned can contain up to 1 MB of log events or up to 10,000 log events. A returned page might only be partially full, or even empty. For example, if the result of a query would return 15,000 log events, the first page isn't guaranteed to have 10,000 log events even if they all fit into 1 MB.</p> <p>Partially full or empty pages don't necessarily mean that pagination is finished. As long as the <code>nextBackwardToken</code> or <code>nextForwardToken</code> returned is NOT equal to the <code>nextToken</code> that you passed into the API call, there might be more log events available. The token that you use depends on the direction you want to move in along the log stream. The returned tokens are never null.</p> <note> <p>If you set <code>startFromHead</code> to <code>true</code> and you don’t include <code>endTime</code> in your request, you can end up in a situation where the pagination doesn't terminate. This can happen when the new log events are being added to the target log streams faster than they are being read. This situation is a good use case for the CloudWatch Logs <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs_LiveTail.html\">Live Tail</a> feature.</p> </note> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p> <p>You can specify the log group to search by using either <code>logGroupIdentifier</code> or <code>logGroupName</code>. You must include one of these two parameters, but you can't include both. </p> <note> <p>If you are using <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html\">log transformation</a>, the <code>GetLogEvents</code> operation returns only the original versions of log events, before they were transformed. To view the transformed versions, you must use a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html\">CloudWatch Logs query.</a> </p> </note>"
     },
     "GetLogGroupFields":{
       "name":"GetLogGroupFields",
@@ -826,6 +827,24 @@
       ],
       "documentation":"<p>Returns a list of the fields that are included in log events in the specified log group. Includes the percentage of log events that contain each field. The search is limited to a time period that you specify.</p> <p>You can specify the log group to search by using either <code>logGroupIdentifier</code> or <code>logGroupName</code>. You must specify one of these parameters, but you can't specify both. </p> <p>In the results, fields that start with <code>@</code> are fields generated by CloudWatch Logs. For example, <code>@timestamp</code> is the timestamp of each log event. For more information about the fields that are generated by CloudWatch logs, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html\">Supported Logs and Discovered Fields</a>.</p> <p>The response results are sorted by the frequency percentage, starting with the highest percentage.</p> <p>If you are using CloudWatch cross-account observability, you can use this operation in a monitoring account and view data from the linked source accounts. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p>"
     },
+    "GetLogObject":{
+      "name":"GetLogObject",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetLogObjectRequest"},
+      "output":{"shape":"GetLogObjectResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"InvalidOperationException"}
+      ],
+      "documentation":"<p>Retrieves a large logging object (LLO) and streams it back. This API is used to fetch the content of large portions of log events that have been ingested through the PutOpenTelemetryLogs API. When log events contain fields that would cause the total event size to exceed 1MB, CloudWatch Logs automatically processes up to 10 fields, starting with the largest fields. Each field is truncated as needed to keep the total event size as close to 1MB as possible. The excess portions are stored as Large Log Objects (LLOs) and these fields are processed separately and LLO reference system fields (in the format <code>@ptr.$[path.to.field]</code>) are added. The path in the reference field reflects the original JSON structure where the large field was located. For example, this could be <code>@ptr.$['input']['message']</code>, <code>@ptr.$['AAA']['BBB']['CCC']['DDD']</code>, <code>@ptr.$['AAA']</code>, or any other path matching your log structure.</p>",
+      "endpoint":{"hostPrefix":"streaming-"}
+    },
     "GetLogRecord":{
       "name":"GetLogRecord",
       "http":{
@@ -919,6 +938,20 @@
       ],
       "documentation":"<p>Retrieves a list of the log anomaly detectors in the account.</p>"
     },
+    "ListLogGroups":{
+      "name":"ListLogGroups",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListLogGroupsRequest"},
+      "output":{"shape":"ListLogGroupsResponse"},
+      "errors":[
+        {"shape":"InvalidParameterException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Returns a list of log groups in the Region in your account. If you are performing this action in a monitoring account, you can choose to also return log groups from source accounts that are linked to the monitoring account. For more information about using cross-account observability to set up monitoring accounts and source accounts, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\"> CloudWatch cross-account observability</a>.</p> <p>You can optionally filter the list by log group class and by using regular expressions in your request to match strings in the log group names.</p> <p>This operation is paginated. By default, your first use of this operation returns 50 results, and includes a token to use in a subsequent operation to return more results.</p>"
+    },
     "ListLogGroupsForQuery":{
       "name":"ListLogGroupsForQuery",
       "http":{
@@ -980,7 +1013,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Creates an account-level data protection policy, subscription filter policy, or field index policy that applies to all log groups or a subset of log groups in the account.</p> <p>To use this operation, you must be signed on with the correct permissions depending on the type of policy that you are creating.</p> <ul> <li> <p>To create a data protection policy, you must have the <code>logs:PutDataProtectionPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a subscription filter policy, you must have the <code>logs:PutSubscriptionFilter</code> and <code>logs:PutccountPolicy</code> permissions.</p> </li> <li> <p>To create a transformer policy, you must have the <code>logs:PutTransformer</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a field index policy, you must have the <code>logs:PutIndexPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> </ul> <p> <b>Data protection policy</b> </p> <p>A data protection policy can help safeguard sensitive data that's ingested by your log groups by auditing and masking the sensitive log data. Each account can have only one account-level data protection policy.</p> <important> <p>Sensitive data is detected and masked when it is ingested into a log group. When you set a data protection policy, log events ingested into the log groups before that time are not masked.</p> </important> <p>If you use <code>PutAccountPolicy</code> to create a data protection policy for your whole account, it applies to both existing log groups and all log groups that are created later in this account. The account-level policy is applied to existing log groups with eventual consistency. It might take up to 5 minutes before sensitive data in existing log groups begins to be masked.</p> <p>By default, when a user views a log event that includes masked data, the sensitive data is replaced by asterisks. A user who has the <code>logs:Unmask</code> permission can use a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html\">GetLogEvents</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html\">FilterLogEvents</a> operation with the <code>unmask</code> parameter set to <code>true</code> to view the unmasked log events. Users with the <code>logs:Unmask</code> can also view unmasked data in the CloudWatch Logs console by running a CloudWatch Logs Insights query with the <code>unmask</code> query command.</p> <p>For more information, including a list of types of data that can be audited and masked, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html\">Protect sensitive log data with masking</a>.</p> <p>To use the <code>PutAccountPolicy</code> operation for a data protection policy, you must be signed on with the <code>logs:PutDataProtectionPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> <p>The <code>PutAccountPolicy</code> operation applies to all log groups in the account. You can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html\">PutDataProtectionPolicy</a> to create a data protection policy that applies to just one log group. If a log group has its own data protection policy and the account also has an account-level data protection policy, then the two policies are cumulative. Any sensitive term specified in either policy is masked.</p> <p> <b>Subscription filter policy</b> </p> <p>A subscription filter policy sets up a real-time feed of log events from CloudWatch Logs to other Amazon Web Services services. Account-level subscription filter policies apply to both existing log groups and log groups that are created later in this account. Supported destinations are Kinesis Data Streams, Firehose, and Lambda. When log events are sent to the receiving service, they are Base64 encoded and compressed with the GZIP format.</p> <p>The following destinations are supported for subscription filters:</p> <ul> <li> <p>An Kinesis Data Streams data stream in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>An Firehose data stream in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>A Lambda function in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>A logical destination in a different account created with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestination.html\">PutDestination</a>, for cross-account delivery. Kinesis Data Streams and Firehose are supported as logical destinations.</p> </li> </ul> <p>Each account can have one account-level subscription filter policy per Region. If you are updating an existing filter, you must specify the correct name in <code>PolicyName</code>. To perform a <code>PutAccountPolicy</code> subscription filter operation for any destination except a Lambda function, you must also have the <code>iam:PassRole</code> permission.</p> <p> <b>Transformer policy</b> </p> <p>Creates or updates a <i>log transformer policy</i> for your account. You use log transformers to transform log events into a different format, making them easier for you to process and analyze. You can also transform logs from different sources into standardized formats that contain relevant, source-specific information. After you have created a transformer, CloudWatch Logs performs this transformation at the time of log ingestion. You can then refer to the transformed versions of the logs during operations such as querying with CloudWatch Logs Insights or creating metric filters or subscription filters.</p> <p>You can also use a transformer to copy metadata from metadata keys into the log events themselves. This metadata can include log group name, log stream name, account ID and Region.</p> <p>A transformer for a log group is a series of processors, where each processor applies one type of transformation to the log events ingested into this log group. For more information about the available processors to use in a transformer, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-Processors\"> Processors that you can use</a>.</p> <p>Having log events in standardized format enables visibility across your applications for your log analysis, reporting, and alarming needs. CloudWatch Logs provides transformation for common log types with out-of-the-box transformation templates for major Amazon Web Services log sources such as VPC flow logs, Lambda, and Amazon RDS. You can use pre-built transformation templates or create custom transformation policies.</p> <p>You can create transformers only for the log groups in the Standard log class.</p> <p>You can have one account-level transformer policy that applies to all log groups in the account. Or you can create as many as 20 account-level transformer policies that are each scoped to a subset of log groups with the <code>selectionCriteria</code> parameter. If you have multiple account-level transformer policies with selection criteria, no two of them can use the same or overlapping log group name prefixes. For example, if you have one policy filtered to log groups that start with <code>my-log</code>, you can't have another field index policy filtered to <code>my-logpprod</code> or <code>my-logging</code>.</p> <p>You can also set up a transformer at the log-group level. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutTransformer.html\">PutTransformer</a>. If there is both a log-group level transformer created with <code>PutTransformer</code> and an account-level transformer that could apply to the same log group, the log group uses only the log-group level transformer. It ignores the account-level transformer.</p> <p> <b>Field index policy</b> </p> <p>You can use field index policies to create indexes on fields found in log events in the log group. Creating field indexes can help lower the scan volume for CloudWatch Logs Insights queries that reference those fields, because these queries attempt to skip the processing of log events that are known to not match the indexed field. Good fields to index are fields that you often need to query for and fields or values that match only a small fraction of the total log events. Common examples of indexes include request ID, session ID, user IDs, or instance IDs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Field-Indexing.html\">Create field indexes to improve query performance and reduce costs</a> </p> <p>To find the fields that are in your log group events, use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogGroupFields.html\">GetLogGroupFields</a> operation.</p> <p>For example, suppose you have created a field index for <code>requestId</code>. Then, any CloudWatch Logs Insights query on that log group that includes <code>requestId = <i>value</i> </code> or <code>requestId in [<i>value</i>, <i>value</i>, ...]</code> will attempt to process only the log events where the indexed field matches the specified value.</p> <p>Matches of log events to the names of indexed fields are case-sensitive. For example, an indexed field of <code>RequestId</code> won't match a log event containing <code>requestId</code>.</p> <p>You can have one account-level field index policy that applies to all log groups in the account. Or you can create as many as 20 account-level field index policies that are each scoped to a subset of log groups with the <code>selectionCriteria</code> parameter. If you have multiple account-level index policies with selection criteria, no two of them can use the same or overlapping log group name prefixes. For example, if you have one policy filtered to log groups that start with <code>my-log</code>, you can't have another field index policy filtered to <code>my-logpprod</code> or <code>my-logging</code>.</p> <p>If you create an account-level field index policy in a monitoring account in cross-account observability, the policy is applied only to the monitoring account and not to any source accounts.</p> <p>If you want to create a field index policy for a single log group, you can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a> instead of <code>PutAccountPolicy</code>. If you do so, that log group will use only that log-group level policy, and will ignore the account-level policy that you create with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutAccountPolicy.html\">PutAccountPolicy</a>.</p>"
+      "documentation":"<p>Creates an account-level data protection policy, subscription filter policy, field index policy, transformer policy, or metric extraction policy that applies to all log groups or a subset of log groups in the account.</p> <p>To use this operation, you must be signed on with the correct permissions depending on the type of policy that you are creating.</p> <ul> <li> <p>To create a data protection policy, you must have the <code>logs:PutDataProtectionPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a subscription filter policy, you must have the <code>logs:PutSubscriptionFilter</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a transformer policy, you must have the <code>logs:PutTransformer</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a field index policy, you must have the <code>logs:PutIndexPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> <li> <p>To create a metric extraction policy, you must have the <code>logs:PutMetricExtractionPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> </li> </ul> <p> <b>Data protection policy</b> </p> <p>A data protection policy can help safeguard sensitive data that's ingested by your log groups by auditing and masking the sensitive log data. Each account can have only one account-level data protection policy.</p> <important> <p>Sensitive data is detected and masked when it is ingested into a log group. When you set a data protection policy, log events ingested into the log groups before that time are not masked.</p> </important> <p>If you use <code>PutAccountPolicy</code> to create a data protection policy for your whole account, it applies to both existing log groups and all log groups that are created later in this account. The account-level policy is applied to existing log groups with eventual consistency. It might take up to 5 minutes before sensitive data in existing log groups begins to be masked.</p> <p>By default, when a user views a log event that includes masked data, the sensitive data is replaced by asterisks. A user who has the <code>logs:Unmask</code> permission can use a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html\">GetLogEvents</a> or <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html\">FilterLogEvents</a> operation with the <code>unmask</code> parameter set to <code>true</code> to view the unmasked log events. Users with the <code>logs:Unmask</code> can also view unmasked data in the CloudWatch Logs console by running a CloudWatch Logs Insights query with the <code>unmask</code> query command.</p> <p>For more information, including a list of types of data that can be audited and masked, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html\">Protect sensitive log data with masking</a>.</p> <p>To use the <code>PutAccountPolicy</code> operation for a data protection policy, you must be signed on with the <code>logs:PutDataProtectionPolicy</code> and <code>logs:PutAccountPolicy</code> permissions.</p> <p>The <code>PutAccountPolicy</code> operation applies to all log groups in the account. You can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDataProtectionPolicy.html\">PutDataProtectionPolicy</a> to create a data protection policy that applies to just one log group. If a log group has its own data protection policy and the account also has an account-level data protection policy, then the two policies are cumulative. Any sensitive term specified in either policy is masked.</p> <p> <b>Subscription filter policy</b> </p> <p>A subscription filter policy sets up a real-time feed of log events from CloudWatch Logs to other Amazon Web Services services. Account-level subscription filter policies apply to both existing log groups and log groups that are created later in this account. Supported destinations are Kinesis Data Streams, Firehose, and Lambda. When log events are sent to the receiving service, they are Base64 encoded and compressed with the GZIP format.</p> <p>The following destinations are supported for subscription filters:</p> <ul> <li> <p>An Kinesis Data Streams data stream in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>An Firehose data stream in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>A Lambda function in the same account as the subscription policy, for same-account delivery.</p> </li> <li> <p>A logical destination in a different account created with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDestination.html\">PutDestination</a>, for cross-account delivery. Kinesis Data Streams and Firehose are supported as logical destinations.</p> </li> </ul> <p>Each account can have one account-level subscription filter policy per Region. If you are updating an existing filter, you must specify the correct name in <code>PolicyName</code>. To perform a <code>PutAccountPolicy</code> subscription filter operation for any destination except a Lambda function, you must also have the <code>iam:PassRole</code> permission.</p> <p> <b>Transformer policy</b> </p> <p>Creates or updates a <i>log transformer policy</i> for your account. You use log transformers to transform log events into a different format, making them easier for you to process and analyze. You can also transform logs from different sources into standardized formats that contain relevant, source-specific information. After you have created a transformer, CloudWatch Logs performs this transformation at the time of log ingestion. You can then refer to the transformed versions of the logs during operations such as querying with CloudWatch Logs Insights or creating metric filters or subscription filters.</p> <p>You can also use a transformer to copy metadata from metadata keys into the log events themselves. This metadata can include log group name, log stream name, account ID and Region.</p> <p>A transformer for a log group is a series of processors, where each processor applies one type of transformation to the log events ingested into this log group. For more information about the available processors to use in a transformer, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-Processors\"> Processors that you can use</a>.</p> <p>Having log events in standardized format enables visibility across your applications for your log analysis, reporting, and alarming needs. CloudWatch Logs provides transformation for common log types with out-of-the-box transformation templates for major Amazon Web Services log sources such as VPC flow logs, Lambda, and Amazon RDS. You can use pre-built transformation templates or create custom transformation policies.</p> <p>You can create transformers only for the log groups in the Standard log class.</p> <p>You can have one account-level transformer policy that applies to all log groups in the account. Or you can create as many as 20 account-level transformer policies that are each scoped to a subset of log groups with the <code>selectionCriteria</code> parameter. If you have multiple account-level transformer policies with selection criteria, no two of them can use the same or overlapping log group name prefixes. For example, if you have one policy filtered to log groups that start with <code>my-log</code>, you can't have another field index policy filtered to <code>my-logpprod</code> or <code>my-logging</code>.</p> <p>CloudWatch Logs provides default field indexes for all log groups in the Standard log class. Default field indexes are automatically available for the following fields: </p> <ul> <li> <p> <code>@aws.region</code> </p> </li> <li> <p> <code>@aws.account</code> </p> </li> <li> <p> <code>@source.log</code> </p> </li> <li> <p> <code>traceId</code> </p> </li> </ul> <p>Default field indexes are in addition to any custom field indexes you define within your policy. Default field indexes are not counted towards your field index quota. </p> <p>You can also set up a transformer at the log-group level. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutTransformer.html\">PutTransformer</a>. If there is both a log-group level transformer created with <code>PutTransformer</code> and an account-level transformer that could apply to the same log group, the log group uses only the log-group level transformer. It ignores the account-level transformer.</p> <p> <b>Field index policy</b> </p> <p>You can use field index policies to create indexes on fields found in log events in the log group. Creating field indexes can help lower the scan volume for CloudWatch Logs Insights queries that reference those fields, because these queries attempt to skip the processing of log events that are known to not match the indexed field. Good fields to index are fields that you often need to query for and fields or values that match only a small fraction of the total log events. Common examples of indexes include request ID, session ID, user IDs, or instance IDs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Field-Indexing.html\">Create field indexes to improve query performance and reduce costs</a> </p> <p>To find the fields that are in your log group events, use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogGroupFields.html\">GetLogGroupFields</a> operation.</p> <p>For example, suppose you have created a field index for <code>requestId</code>. Then, any CloudWatch Logs Insights query on that log group that includes <code>requestId = <i>value</i> </code> or <code>requestId in [<i>value</i>, <i>value</i>, ...]</code> will attempt to process only the log events where the indexed field matches the specified value.</p> <p>Matches of log events to the names of indexed fields are case-sensitive. For example, an indexed field of <code>RequestId</code> won't match a log event containing <code>requestId</code>.</p> <p>You can have one account-level field index policy that applies to all log groups in the account. Or you can create as many as 20 account-level field index policies that are each scoped to a subset of log groups with the <code>selectionCriteria</code> parameter. If you have multiple account-level index policies with selection criteria, no two of them can use the same or overlapping log group name prefixes. For example, if you have one policy filtered to log groups that start with <code>my-log</code>, you can't have another field index policy filtered to <code>my-logpprod</code> or <code>my-logging</code>.</p> <p>If you create an account-level field index policy in a monitoring account in cross-account observability, the policy is applied only to the monitoring account and not to any source accounts.</p> <p>If you want to create a field index policy for a single log group, you can use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutIndexPolicy.html\">PutIndexPolicy</a> instead of <code>PutAccountPolicy</code>. If you do so, that log group will use only that log-group level policy, and will ignore the account-level policy that you create with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutAccountPolicy.html\">PutAccountPolicy</a>.</p> <p> <b>Metric extraction policy</b> </p> <p>A metric extraction policy controls whether CloudWatch Metrics can be created through the Embedded Metrics Format (EMF) for log groups in your account. By default, EMF metric creation is enabled for all log groups. You can use metric extraction policies to disable EMF metric creation for your entire account or specific log groups.</p> <p>When a policy disables EMF metric creation for a log group, log events in the EMF format are still ingested, but no CloudWatch Metrics are created from them.</p> <important> <p>Creating a policy disables metrics for AWS features that use EMF to create metrics, such as CloudWatch Container Insights and CloudWatch Application Signals. To prevent turning off those features by accident, we recommend that you exclude the underlying log-groups through a selection-criteria such as <code>LogGroupNamePrefix NOT IN [\"/aws/containerinsights\", \"/aws/ecs/containerinsights\", \"/aws/application-signals/data\"]</code>.</p> </important> <p>Each account can have either one account-level metric extraction policy that applies to all log groups, or up to 5 policies that are each scoped to a subset of log groups with the <code>selectionCriteria</code> parameter. The selection criteria supports filtering by <code>LogGroupName</code> and <code>LogGroupNamePrefix</code> using the operators <code>IN</code> and <code>NOT IN</code>. You can specify up to 50 values in each <code>IN</code> or <code>NOT IN</code> list.</p> <p>The selection criteria can be specified in these formats:</p> <p> <code>LogGroupName IN [\"log-group-1\", \"log-group-2\"]</code> </p> <p> <code>LogGroupNamePrefix NOT IN [\"/aws/prefix1\", \"/aws/prefix2\"]</code> </p> <p>If you have multiple account-level metric extraction policies with selection criteria, no two of them can have overlapping criteria. For example, if you have one policy with selection criteria <code>LogGroupNamePrefix IN [\"my-log\"]</code>, you can't have another metric extraction policy with selection criteria <code>LogGroupNamePrefix IN [\"/my-log-prod\"]</code> or <code>LogGroupNamePrefix IN [\"/my-logging\"]</code>, as the set of log groups matching these prefixes would be a subset of the log groups matching the first policy's prefix, creating an overlap.</p> <p>When using <code>NOT IN</code>, only one policy with this operator is allowed per account.</p> <p>When combining policies with <code>IN</code> and <code>NOT IN</code> operators, the overlap check ensures that policies don't have conflicting effects. Two policies with <code>IN</code> and <code>NOT IN</code> operators do not overlap if and only if every value in the <code>IN </code>policy is completely contained within some value in the <code>NOT IN</code> policy. For example:</p> <ul> <li> <p>If you have a <code>NOT IN</code> policy for prefix <code>\"/aws/lambda\"</code>, you can create an <code>IN</code> policy for the exact log group name <code>\"/aws/lambda/function1\"</code> because the set of log groups matching <code>\"/aws/lambda/function1\"</code> is a subset of the log groups matching <code>\"/aws/lambda\"</code>.</p> </li> <li> <p>If you have a <code>NOT IN</code> policy for prefix <code>\"/aws/lambda\"</code>, you cannot create an <code>IN</code> policy for prefix <code>\"/aws\"</code> because the set of log groups matching <code>\"/aws\"</code> is not a subset of the log groups matching <code>\"/aws/lambda\"</code>.</p> </li> </ul>"
     },
     "PutDataProtectionPolicy":{
       "name":"PutDataProtectionPolicy",
@@ -1015,7 +1048,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Creates or updates a logical <i>delivery destination</i>. A delivery destination is an Amazon Web Services resource that represents an Amazon Web Services service that logs can be sent to. CloudWatch Logs, Amazon S3, and Firehose are supported as logs delivery destinations.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Use <code>PutDeliveryDestination</code> to create a <i>delivery destination</i> in the same account of the actual delivery destination. The delivery destination that you create is a logical object that represents the actual delivery destination. </p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>Only some Amazon Web Services services support being configured as a delivery source. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>If you use this operation to update an existing delivery destination, all the current delivery destination parameters are overwritten with the new parameter values that you specify.</p>"
+      "documentation":"<p>Creates or updates a logical <i>delivery destination</i>. A delivery destination is an Amazon Web Services resource that represents an Amazon Web Services service that logs can be sent to. CloudWatch Logs, Amazon S3, and Firehose are supported as logs delivery destinations and X-Ray as the trace delivery destination.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Use <code>PutDeliveryDestination</code> to create a <i>delivery destination</i> in the same account of the actual delivery destination. The delivery destination that you create is a logical object that represents the actual delivery destination. </p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>Only some Amazon Web Services services support being configured as a delivery source. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>If you use this operation to update an existing delivery destination, all the current delivery destination parameters are overwritten with the new parameter values that you specify.</p>"
     },
     "PutDeliveryDestinationPolicy":{
       "name":"PutDeliveryDestinationPolicy",
@@ -1049,7 +1082,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates or updates a logical <i>delivery source</i>. A delivery source represents an Amazon Web Services resource that sends logs to an logs delivery destination. The destination can be CloudWatch Logs, Amazon S3, or Firehose.</p> <p>To configure logs delivery between a delivery destination and an Amazon Web Services service that is supported as a delivery source, you must do the following:</p> <ul> <li> <p>Use <code>PutDeliverySource</code> to create a delivery source, which is a logical object that represents the resource that is actually sending the logs. </p> </li> <li> <p>Use <code>PutDeliveryDestination</code> to create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\">PutDeliveryDestination</a>.</p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>Only some Amazon Web Services services support being configured as a delivery source. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>If you use this operation to update an existing delivery source, all the current delivery source parameters are overwritten with the new parameter values that you specify.</p>"
+      "documentation":"<p>Creates or updates a logical <i>delivery source</i>. A delivery source represents an Amazon Web Services resource that sends logs to an logs delivery destination. The destination can be CloudWatch Logs, Amazon S3, Firehose or X-Ray for sending traces.</p> <p>To configure logs delivery between a delivery destination and an Amazon Web Services service that is supported as a delivery source, you must do the following:</p> <ul> <li> <p>Use <code>PutDeliverySource</code> to create a delivery source, which is a logical object that represents the resource that is actually sending the logs. </p> </li> <li> <p>Use <code>PutDeliveryDestination</code> to create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html\">PutDeliveryDestination</a>.</p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Use <code>CreateDelivery</code> to create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>. </p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p> <p>Only some Amazon Web Services services support being configured as a delivery source. These services are listed as <b>Supported [V2 Permissions]</b> in the table at <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html\">Enabling logging from Amazon Web Services services.</a> </p> <p>If you use this operation to update an existing delivery source, all the current delivery source parameters are overwritten with the new parameter values that you specify.</p>"
     },
     "PutDestination":{
       "name":"PutDestination",
@@ -1095,7 +1128,7 @@
         {"shape":"OperationAbortedException"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Creates or updates a <i>field index policy</i> for the specified log group. Only log groups in the Standard log class support field index policies. For more information about log classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a>.</p> <p>You can use field index policies to create <i>field indexes</i> on fields found in log events in the log group. Creating field indexes speeds up and lowers the costs for CloudWatch Logs Insights queries that reference those field indexes, because these queries attempt to skip the processing of log events that are known to not match the indexed field. Good fields to index are fields that you often need to query for and fields or values that match only a small fraction of the total log events. Common examples of indexes include request ID, session ID, userID, and instance IDs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Field-Indexing.html\">Create field indexes to improve query performance and reduce costs</a>.</p> <p>To find the fields that are in your log group events, use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogGroupFields.html\">GetLogGroupFields</a> operation.</p> <p>For example, suppose you have created a field index for <code>requestId</code>. Then, any CloudWatch Logs Insights query on that log group that includes <code>requestId = <i>value</i> </code> or <code>requestId IN [<i>value</i>, <i>value</i>, ...]</code> will process fewer log events to reduce costs, and have improved performance.</p> <p>Each index policy has the following quotas and restrictions:</p> <ul> <li> <p>As many as 20 fields can be included in the policy.</p> </li> <li> <p>Each field name can include as many as 100 characters.</p> </li> </ul> <p>Matches of log events to the names of indexed fields are case-sensitive. For example, a field index of <code>RequestId</code> won't match a log event containing <code>requestId</code>.</p> <p>Log group-level field index policies created with <code>PutIndexPolicy</code> override account-level field index policies created with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutAccountPolicy.html\">PutAccountPolicy</a>. If you use <code>PutIndexPolicy</code> to create a field index policy for a log group, that log group uses only that policy. The log group ignores any account-wide field index policy that you might have created.</p>"
+      "documentation":"<p>Creates or updates a <i>field index policy</i> for the specified log group. Only log groups in the Standard log class support field index policies. For more information about log classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a>.</p> <p>You can use field index policies to create <i>field indexes</i> on fields found in log events in the log group. Creating field indexes speeds up and lowers the costs for CloudWatch Logs Insights queries that reference those field indexes, because these queries attempt to skip the processing of log events that are known to not match the indexed field. Good fields to index are fields that you often need to query for and fields or values that match only a small fraction of the total log events. Common examples of indexes include request ID, session ID, userID, and instance IDs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs-Field-Indexing.html\">Create field indexes to improve query performance and reduce costs</a>.</p> <p>To find the fields that are in your log group events, use the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogGroupFields.html\">GetLogGroupFields</a> operation.</p> <p>For example, suppose you have created a field index for <code>requestId</code>. Then, any CloudWatch Logs Insights query on that log group that includes <code>requestId = <i>value</i> </code> or <code>requestId IN [<i>value</i>, <i>value</i>, ...]</code> will process fewer log events to reduce costs, and have improved performance.</p> <p>CloudWatch Logs provides default field indexes for all log groups in the Standard log class. Default field indexes are automatically available for the following fields: </p> <ul> <li> <p> <code>@aws.region</code> </p> </li> <li> <p> <code>@aws.account</code> </p> </li> <li> <p> <code>@source.log</code> </p> </li> <li> <p> <code>traceId</code> </p> </li> </ul> <p>Default field indexes are in addition to any custom field indexes you define within your policy. Default field indexes are not counted towards your field index quota. </p> <p>Each index policy has the following quotas and restrictions:</p> <ul> <li> <p>As many as 20 fields can be included in the policy.</p> </li> <li> <p>Each field name can include as many as 100 characters.</p> </li> </ul> <p>Matches of log events to the names of indexed fields are case-sensitive. For example, a field index of <code>RequestId</code> won't match a log event containing <code>requestId</code>.</p> <p>Log group-level field index policies created with <code>PutIndexPolicy</code> override account-level field index policies created with <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutAccountPolicy.html\">PutAccountPolicy</a>. If you use <code>PutIndexPolicy</code> to create a field index policy for a log group, that log group uses only that policy. The log group ignores any account-wide field index policy that you might have created.</p>"
     },
     "PutIntegration":{
       "name":"PutIntegration",
@@ -1129,7 +1162,7 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"UnrecognizedClientException"}
       ],
-      "documentation":"<p>Uploads a batch of log events to the specified log stream.</p> <important> <p>The sequence token is now ignored in <code>PutLogEvents</code> actions. <code>PutLogEvents</code> actions are always accepted and never return <code>InvalidSequenceTokenException</code> or <code>DataAlreadyAcceptedException</code> even if the sequence token is not valid. You can use parallel <code>PutLogEvents</code> actions on the same log stream. </p> </important> <p>The batch of events must satisfy the following constraints:</p> <ul> <li> <p>The maximum batch size is 1,048,576 bytes. This size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.</p> </li> <li> <p>None of the log events in the batch can be more than 2 hours in the future.</p> </li> <li> <p>None of the log events in the batch can be more than 14 days in the past. Also, none of the log events can be from earlier than the retention period of the log group.</p> </li> <li> <p>The log events in the batch must be in chronological order by their timestamp. The timestamp is the time that the event occurred, expressed as the number of milliseconds after <code>Jan 1, 1970 00:00:00 UTC</code>. (In Amazon Web Services Tools for PowerShell and the Amazon Web Services SDK for .NET, the timestamp is specified in .NET format: <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2017-09-15T13:45:30</code>.) </p> </li> <li> <p>A batch of log events in a single request cannot span more than 24 hours. Otherwise, the operation fails.</p> </li> <li> <p>Each log event can be no larger than 256 KB.</p> </li> <li> <p>The maximum number of log events in a batch is 10,000.</p> </li> <li> <important> <p>The quota of five requests per second per log stream has been removed. Instead, <code>PutLogEvents</code> actions are throttled based on a per-second per-account quota. You can request an increase to the per-second throttling quota by using the Service Quotas service.</p> </important> </li> </ul> <p>If a call to <code>PutLogEvents</code> returns \"UnrecognizedClientException\" the most likely cause is a non-valid Amazon Web Services access key ID or secret key. </p>"
+      "documentation":"<p>Uploads a batch of log events to the specified log stream.</p> <important> <p>The sequence token is now ignored in <code>PutLogEvents</code> actions. <code>PutLogEvents</code> actions are always accepted and never return <code>InvalidSequenceTokenException</code> or <code>DataAlreadyAcceptedException</code> even if the sequence token is not valid. You can use parallel <code>PutLogEvents</code> actions on the same log stream. </p> </important> <p>The batch of events must satisfy the following constraints:</p> <ul> <li> <p>The maximum batch size is 1,048,576 bytes. This size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.</p> </li> <li> <p>Events more than 2 hours in the future are rejected while processing remaining valid events.</p> </li> <li> <p>Events older than 14 days or preceding the log group's retention period are rejected while processing remaining valid events.</p> </li> <li> <p>The log events in the batch must be in chronological order by their timestamp. The timestamp is the time that the event occurred, expressed as the number of milliseconds after <code>Jan 1, 1970 00:00:00 UTC</code>. (In Amazon Web Services Tools for PowerShell and the Amazon Web Services SDK for .NET, the timestamp is specified in .NET format: <code>yyyy-mm-ddThh:mm:ss</code>. For example, <code>2017-09-15T13:45:30</code>.) </p> </li> <li> <p> A batch of log events in a single request must be in a chronological order. Otherwise, the operation fails.</p> </li> <li> <p>Each log event can be no larger than 1 MB.</p> </li> <li> <p>The maximum number of log events in a batch is 10,000.</p> </li> <li> <p>For valid events (within 14 days in the past to 2 hours in future), the time span in a single batch cannot exceed 24 hours. Otherwise, the operation fails.</p> </li> </ul> <important> <p>The quota of five requests per second per log stream has been removed. Instead, <code>PutLogEvents</code> actions are throttled based on a per-second per-account quota. You can request an increase to the per-second throttling quota by using the Service Quotas service.</p> </important> <p>If a call to <code>PutLogEvents</code> returns \"UnrecognizedClientException\" the most likely cause is a non-valid Amazon Web Services access key ID or secret key. </p>"
     },
     "PutMetricFilter":{
       "name":"PutMetricFilter",
@@ -1175,6 +1208,8 @@
       "errors":[
         {"shape":"InvalidParameterException"},
         {"shape":"LimitExceededException"},
+        {"shape":"OperationAbortedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceUnavailableException"}
       ],
       "documentation":"<p>Creates or updates a resource policy allowing other Amazon Web Services services to put log events to this account, such as Amazon Route 53. An account can have up to 10 resource policies per Amazon Web Services Region.</p>"
@@ -1243,7 +1278,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InvalidOperationException"}
       ],
-      "documentation":"<p>Starts a Live Tail streaming session for one or more log groups. A Live Tail session returns a stream of log events that have been recently ingested in the log groups. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs_LiveTail.html\">Use Live Tail to view logs in near real time</a>. </p> <p>The response to this operation is a response stream, over which the server sends live log events and the client receives them.</p> <p>The following objects are sent over the stream:</p> <ul> <li> <p>A single <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LiveTailSessionStart.html\">LiveTailSessionStart</a> object is sent at the start of the session.</p> </li> <li> <p>Every second, a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LiveTailSessionUpdate.html\">LiveTailSessionUpdate</a> object is sent. Each of these objects contains an array of the actual log events.</p> <p>If no new log events were ingested in the past second, the <code>LiveTailSessionUpdate</code> object will contain an empty array.</p> <p>The array of log events contained in a <code>LiveTailSessionUpdate</code> can include as many as 500 log events. If the number of log events matching the request exceeds 500 per second, the log events are sampled down to 500 log events to be included in each <code>LiveTailSessionUpdate</code> object.</p> <p>If your client consumes the log events slower than the server produces them, CloudWatch Logs buffers up to 10 <code>LiveTailSessionUpdate</code> events or 5000 log events, after which it starts dropping the oldest events.</p> </li> <li> <p>A <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartLiveTailResponseStream.html#CWL-Type-StartLiveTailResponseStream-SessionStreamingException\">SessionStreamingException</a> object is returned if an unknown error occurs on the server side.</p> </li> <li> <p>A <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartLiveTailResponseStream.html#CWL-Type-StartLiveTailResponseStream-SessionTimeoutException\">SessionTimeoutException</a> object is returned when the session times out, after it has been kept open for three hours.</p> </li> </ul> <important> <p>You can end a session before it times out by closing the session stream or by closing the client that is receiving the stream. The session also ends if the established connection between the client and the server breaks.</p> </important> <p>For examples of using an SDK to start a Live Tail session, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/example_cloudwatch-logs_StartLiveTail_section.html\"> Start a Live Tail session using an Amazon Web Services SDK</a>.</p>",
+      "documentation":"<p>Starts a Live Tail streaming session for one or more log groups. A Live Tail session returns a stream of log events that have been recently ingested in the log groups. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatchLogs_LiveTail.html\">Use Live Tail to view logs in near real time</a>. </p> <p>The response to this operation is a response stream, over which the server sends live log events and the client receives them.</p> <p>The following objects are sent over the stream:</p> <ul> <li> <p>A single <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LiveTailSessionStart.html\">LiveTailSessionStart</a> object is sent at the start of the session.</p> </li> <li> <p>Every second, a <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LiveTailSessionUpdate.html\">LiveTailSessionUpdate</a> object is sent. Each of these objects contains an array of the actual log events.</p> <p>If no new log events were ingested in the past second, the <code>LiveTailSessionUpdate</code> object will contain an empty array.</p> <p>The array of log events contained in a <code>LiveTailSessionUpdate</code> can include as many as 500 log events. If the number of log events matching the request exceeds 500 per second, the log events are sampled down to 500 log events to be included in each <code>LiveTailSessionUpdate</code> object.</p> <p>If your client consumes the log events slower than the server produces them, CloudWatch Logs buffers up to 10 <code>LiveTailSessionUpdate</code> events or 5000 log events, after which it starts dropping the oldest events.</p> </li> <li> <p>A <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartLiveTailResponseStream.html#CWL-Type-StartLiveTailResponseStream-SessionStreamingException\">SessionStreamingException</a> object is returned if an unknown error occurs on the server side.</p> </li> <li> <p>A <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_StartLiveTailResponseStream.html#CWL-Type-StartLiveTailResponseStream-SessionTimeoutException\">SessionTimeoutException</a> object is returned when the session times out, after it has been kept open for three hours.</p> </li> </ul> <note> <p>The <code>StartLiveTail</code> API routes requests to <code>streaming-logs.<i>Region</i>.amazonaws.com</code> using SDK host prefix injection. VPC endpoint support is not available for this API.</p> </note> <important> <p>You can end a session before it times out by closing the session stream or by closing the client that is receiving the stream. The session also ends if the established connection between the client and the server breaks.</p> </important> <p>For examples of using an SDK to start a Live Tail session, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/example_cloudwatch-logs_StartLiveTail_section.html\"> Start a Live Tail session using an Amazon Web Services SDK</a>.</p>",
       "endpoint":{"hostPrefix":"streaming-"}
     },
     "StartQuery":{
@@ -1347,7 +1382,7 @@
       "errors":[
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<important> <p>The UntagLogGroup operation is on the path to deprecation. We recommend that you use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UntagResource.html\">UntagResource</a> instead.</p> </important> <p>Removes the specified tags from the specified log group.</p> <p>To list the tags for a log group, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_ListTagsForResource.html\">ListTagsForResource</a>. To add tags, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_TagResource.html\">TagResource</a>.</p> <p>CloudWatch Logs doesn't support IAM policies that prevent users from assigning specified tags to log groups using the <code>aws:Resource/<i>key-name</i> </code> or <code>aws:TagKeys</code> condition keys. </p>",
+      "documentation":"<important> <p>The UntagLogGroup operation is on the path to deprecation. We recommend that you use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UntagResource.html\">UntagResource</a> instead.</p> </important> <p>Removes the specified tags from the specified log group.</p> <p>To list the tags for a log group, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_ListTagsForResource.html\">ListTagsForResource</a>. To add tags, use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_TagResource.html\">TagResource</a>.</p> <p>When using IAM policies to control tag management for CloudWatch Logs log groups, the condition keys <code>aws:Resource/key-name</code> and <code>aws:TagKeys</code> cannot be used to restrict which tags users can assign. </p>",
       "deprecated":true,
       "deprecatedMessage":"Please use the generic tagging API UntagResource"
     },
@@ -1417,8 +1452,7 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You don't have sufficient permissions to perform this action.</p>",
       "exception":true
     },
@@ -1663,7 +1697,7 @@
         },
         "kmsKeyId":{
           "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key assigned to this anomaly detector, if any.</p>"
+          "documentation":"<p>The ARN of the KMS key assigned to this anomaly detector, if any.</p>"
         },
         "creationTimeStamp":{
           "shape":"EpochMillis",
@@ -1855,8 +1889,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This operation attempted to create a resource that already exists.</p>",
       "exception":true
     },
@@ -2011,8 +2044,8 @@
           "documentation":"<p>You can use this parameter to limit the anomaly detection model to examine only log events that match the pattern you specify here. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html\">Filter and Pattern Syntax</a>.</p>"
         },
         "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>Optionally assigns a KMS key to secure this anomaly detector and its findings. If a key is assigned, the anomalies found and the model used by this detector are encrypted at rest with the key. If a key is assigned to an anomaly detector, a user must have permissions for both this key and for the anomaly detector to retrieve information about the anomalies that it finds.</p> <p>For more information about using a KMS key and to see the required IAM policy, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/LogsAnomalyDetection-KMS.html\">Use a KMS key with an anomaly detector</a>.</p>"
+          "shape":"DetectorKmsKeyArn",
+          "documentation":"<p>Optionally assigns a KMS key to secure this anomaly detector and its findings. If a key is assigned, the anomalies found and the model used by this detector are encrypted at rest with the key. If a key is assigned to an anomaly detector, a user must have permissions for both this key and for the anomaly detector to retrieve information about the anomalies that it finds.</p> <p> Make sure the value provided is a valid KMS key ARN. For more information about using a KMS key and to see the required IAM policy, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/LogsAnomalyDetection-KMS.html\">Use a KMS key with an anomaly detector</a>.</p>"
         },
         "anomalyVisibilityTime":{
           "shape":"AnomalyVisibilityTime",
@@ -2051,7 +2084,7 @@
         },
         "logGroupClass":{
           "shape":"LogGroupClass",
-          "documentation":"<p>Use this parameter to specify the log group class for this log group. There are two classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> </ul> <p>If you omit this parameter, the default of <code>STANDARD</code> is used.</p> <important> <p>The value of <code>logGroupClass</code> can't be changed after a log group is created.</p> </important> <p>For details about the features supported by each class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
+          "documentation":"<p>Use this parameter to specify the log group class for this log group. There are three classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> <li> <p>Use the <code>Delivery</code> log class only for delivering Lambda logs to store in Amazon S3 or Amazon Data Firehose. Log events in log groups in the Delivery class are kept in CloudWatch Logs for only one day. This log class doesn't offer rich CloudWatch Logs capabilities such as CloudWatch Logs Insights queries.</p> </li> </ul> <p>If you omit this parameter, the default of <code>STANDARD</code> is used.</p> <important> <p>The value of <code>logGroupClass</code> can't be changed after a log group is created.</p> </important> <p>For details about the features supported by each class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
         }
       }
     },
@@ -2076,6 +2109,7 @@
       "type":"list",
       "member":{"shape":"Arn"}
     },
+    "Data":{"type":"blob"},
     "DataAlreadyAcceptedException":{
       "type":"structure",
       "members":{
@@ -2181,7 +2215,7 @@
       "members":{
         "name":{
           "shape":"DeliveryDestinationName",
-          "documentation":"<p>The name of the delivery destination that you want to delete. You can find a list of delivery destionation names by using the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeDeliveryDestinations.html\">DescribeDeliveryDestinations</a> operation.</p>"
+          "documentation":"<p>The name of the delivery destination that you want to delete. You can find a list of delivery destination names by using the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DescribeDeliveryDestinations.html\">DescribeDeliveryDestinations</a> operation.</p>"
         }
       }
     },
@@ -2227,8 +2261,7 @@
     },
     "DeleteIndexPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIntegrationRequest":{
       "type":"structure",
@@ -2246,8 +2279,7 @@
     },
     "DeleteIntegrationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKeys":{
       "type":"structure",
@@ -2339,6 +2371,14 @@
         "policyName":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy to be revoked. This parameter is required.</p>"
+        },
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the CloudWatch Logs resource for which the resource policy needs to be deleted</p>"
+        },
+        "expectedRevisionId":{
+          "shape":"ExpectedRevisionId",
+          "documentation":"<p>The expected revision ID of the resource policy. Required when deleting a resource-scoped policy to prevent concurrent modifications.</p>"
         }
       }
     },
@@ -2387,7 +2427,7 @@
     },
     "Delimiter":{
       "type":"string",
-      "max":1,
+      "max":2,
       "min":1
     },
     "Deliveries":{
@@ -2415,7 +2455,7 @@
         },
         "deliveryDestinationType":{
           "shape":"DeliveryDestinationType",
-          "documentation":"<p>Displays whether the delivery destination associated with this delivery is CloudWatch Logs, Amazon S3, or Firehose.</p>"
+          "documentation":"<p>Displays whether the delivery destination associated with this delivery is CloudWatch Logs, Amazon S3, Firehose, or X-Ray.</p>"
         },
         "recordFields":{
           "shape":"RecordFields",
@@ -2449,7 +2489,7 @@
         },
         "deliveryDestinationType":{
           "shape":"DeliveryDestinationType",
-          "documentation":"<p>Displays whether this delivery destination is CloudWatch Logs, Amazon S3, or Firehose.</p>"
+          "documentation":"<p>Displays whether this delivery destination is CloudWatch Logs, Amazon S3, Firehose, or X-Ray.</p>"
         },
         "outputFormat":{
           "shape":"OutputFormat",
@@ -2464,7 +2504,7 @@
           "documentation":"<p>The tags that have been assigned to this delivery destination.</p>"
         }
       },
-      "documentation":"<p>This structure contains information about one <i>delivery destination</i> in your account. A delivery destination is an Amazon Web Services resource that represents an Amazon Web Services service that logs can be sent to. CloudWatch Logs, Amazon S3, are supported as Firehose delivery destinations.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. </p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>.</p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p>"
+      "documentation":"<p>This structure contains information about one <i>delivery destination</i> in your account. A delivery destination is an Amazon Web Services resource that represents an Amazon Web Services service that logs can be sent to. CloudWatch Logs, Amazon S3, Firehose, and X-Ray are supported as delivery destinations.</p> <p>To configure logs delivery between a supported Amazon Web Services service and a destination, you must do the following:</p> <ul> <li> <p>Create a delivery source, which is a logical object that represents the resource that is actually sending the logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html\">PutDeliverySource</a>.</p> </li> <li> <p>Create a <i>delivery destination</i>, which is a logical object that represents the actual delivery destination. </p> </li> <li> <p>If you are delivering logs cross-account, you must use <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html\">PutDeliveryDestinationPolicy</a> in the destination account to assign an IAM policy to the destination. This policy allows delivery to that destination. </p> </li> <li> <p>Create a <i>delivery</i> by pairing exactly one delivery source and one delivery destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html\">CreateDelivery</a>.</p> </li> </ul> <p>You can configure a single delivery source to send logs to multiple destinations by creating multiple deliveries. You can also create multiple deliveries to configure multiple delivery sources to send logs to the same delivery destination.</p>"
     },
     "DeliveryDestinationConfiguration":{
       "type":"structure",
@@ -2493,13 +2533,14 @@
       "enum":[
         "S3",
         "CWL",
-        "FH"
+        "FH",
+        "XRAY"
       ]
     },
     "DeliveryDestinationTypes":{
       "type":"list",
       "member":{"shape":"DeliveryDestinationType"},
-      "max":3,
+      "max":4,
       "min":1
     },
     "DeliveryDestinations":{
@@ -2806,12 +2847,18 @@
       "max":50,
       "min":1
     },
+    "DescribeLogGroupsLogGroupIdentifiers":{
+      "type":"list",
+      "member":{"shape":"LogGroupIdentifier"},
+      "max":50,
+      "min":1
+    },
     "DescribeLogGroupsRequest":{
       "type":"structure",
       "members":{
         "accountIdentifiers":{
           "shape":"AccountIds",
-          "documentation":"<p>When <code>includeLinkedAccounts</code> is set to <code>True</code>, use this parameter to specify the list of accounts to search. You can specify as many as 20 account IDs in the array. </p>"
+          "documentation":"<p>When <code>includeLinkedAccounts</code> is set to <code>true</code>, use this parameter to specify the list of accounts to search. You can specify as many as 20 account IDs in the array. </p>"
         },
         "logGroupNamePrefix":{
           "shape":"LogGroupName",
@@ -2819,7 +2866,7 @@
         },
         "logGroupNamePattern":{
           "shape":"LogGroupNamePattern",
-          "documentation":"<p>If you specify a string for this parameter, the operation returns only log groups that have names that match the string based on a case-sensitive substring search. For example, if you specify <code>Foo</code>, log groups named <code>FooBar</code>, <code>aws/Foo</code>, and <code>GroupFoo</code> would match, but <code>foo</code>, <code>F/o/o</code> and <code>Froo</code> would not match.</p> <p>If you specify <code>logGroupNamePattern</code> in your request, then only <code>arn</code>, <code>creationTime</code>, and <code>logGroupName</code> are included in the response. </p> <note> <p> <code>logGroupNamePattern</code> and <code>logGroupNamePrefix</code> are mutually exclusive. Only one of these parameters can be passed. </p> </note>"
+          "documentation":"<p>If you specify a string for this parameter, the operation returns only log groups that have names that match the string based on a case-sensitive substring search. For example, if you specify <code>DataLogs</code>, log groups named <code>DataLogs</code>, <code>aws/DataLogs</code>, and <code>GroupDataLogs</code> would match, but <code>datalogs</code>, <code>Data/log/s</code> and <code>Groupdata</code> would not match.</p> <p>If you specify <code>logGroupNamePattern</code> in your request, then only <code>arn</code>, <code>creationTime</code>, and <code>logGroupName</code> are included in the response. </p> <note> <p> <code>logGroupNamePattern</code> and <code>logGroupNamePrefix</code> are mutually exclusive. Only one of these parameters can be passed. </p> </note>"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -2831,11 +2878,15 @@
         },
         "includeLinkedAccounts":{
           "shape":"IncludeLinkedAccounts",
-          "documentation":"<p>If you are using a monitoring account, set this to <code>True</code> to have the operation return log groups in the accounts listed in <code>accountIdentifiers</code>.</p> <p>If this parameter is set to <code>true</code> and <code>accountIdentifiers</code> contains a null value, the operation returns all log groups in the monitoring account and all log groups in all source accounts that are linked to the monitoring account. </p>"
+          "documentation":"<p>If you are using a monitoring account, set this to <code>true</code> to have the operation return log groups in the accounts listed in <code>accountIdentifiers</code>.</p> <p>If this parameter is set to <code>true</code> and <code>accountIdentifiers</code> contains a null value, the operation returns all log groups in the monitoring account and all log groups in all source accounts that are linked to the monitoring account. </p> <p>The default for this parameter is <code>false</code>.</p>"
         },
         "logGroupClass":{
           "shape":"LogGroupClass",
-          "documentation":"<p>Specifies the log group class for this log group. There are two classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> </ul> <p>For details about the features supported by each class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
+          "documentation":"<p>Use this parameter to limit the results to only those log groups in the specified log group class. If you omit this parameter, log groups of all classes can be returned.</p> <p>Specifies the log group class for this log group. There are three classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> <li> <p>Use the <code>Delivery</code> log class only for delivering Lambda logs to store in Amazon S3 or Amazon Data Firehose. Log events in log groups in the Delivery class are kept in CloudWatch Logs for only one day. This log class doesn't offer rich CloudWatch Logs capabilities such as CloudWatch Logs Insights queries.</p> </li> </ul> <p>For details about the features supported by each class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
+        },
+        "logGroupIdentifiers":{
+          "shape":"DescribeLogGroupsLogGroupIdentifiers",
+          "documentation":"<p>Use this array to filter the list of log groups returned. If you specify this parameter, the only other filter that you can choose to specify is <code>includeLinkedAccounts</code>.</p> <p>If you are using this operation in a monitoring account, you can specify the ARNs of log groups in source accounts and in the monitoring account itself. If you are using this operation in an account that is not a cross-account monitoring account, you can specify only log group names in the same account as the operation.</p>"
         }
       }
     },
@@ -2844,7 +2895,7 @@
       "members":{
         "logGroups":{
           "shape":"LogGroups",
-          "documentation":"<p>The log groups.</p> <p>If the <code>retentionInDays</code> value is not included for a log group, then that log group's events do not expire.</p>"
+          "documentation":"<p>An array of structures, where each structure contains the information about one log group.</p>"
         },
         "nextToken":{"shape":"NextToken"}
       }
@@ -3003,6 +3054,14 @@
         "limit":{
           "shape":"DescribeLimit",
           "documentation":"<p>The maximum number of resource policies to be displayed with one call of this API.</p>"
+        },
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the CloudWatch Logs resource for which to query the resource policy.</p>"
+        },
+        "policyScope":{
+          "shape":"PolicyScope",
+          "documentation":"<p>Specifies the scope of the resource policy. Valid values are <code>ACCOUNT</code> or <code>RESOURCE</code>. When not specified, defaults to <code>ACCOUNT</code>.</p>"
         }
       }
     },
@@ -3101,6 +3160,11 @@
       "type":"list",
       "member":{"shape":"Destination"}
     },
+    "DetectorKmsKeyArn":{
+      "type":"string",
+      "max":256,
+      "pattern":"^arn:aws[a-z\\-]*:kms:[-a-z0-9]*:[0-9]*:key/[-a-z0-9]*$"
+    },
     "DetectorName":{
       "type":"string",
       "min":1
@@ -3140,6 +3204,10 @@
       ]
     },
     "DynamicTokenPosition":{"type":"integer"},
+    "EmitSystemFields":{
+      "type":"list",
+      "member":{"shape":"SystemField"}
+    },
     "EncryptionKey":{
       "type":"string",
       "max":256
@@ -3230,11 +3298,25 @@
       "min":1
     },
     "EventNumber":{"type":"long"},
+    "EventSource":{
+      "type":"string",
+      "enum":[
+        "CloudTrail",
+        "Route53Resolver",
+        "VPCFlow",
+        "EKSAudit",
+        "AWSWAF"
+      ]
+    },
     "EventsLimit":{
       "type":"integer",
       "max":10000,
       "min":1
     },
+    "ExpectedRevisionId":{
+      "type":"string",
+      "min":1
+    },
     "ExportDestinationBucket":{
       "type":"string",
       "max":512,
@@ -3389,6 +3471,22 @@
       "type":"list",
       "member":{"shape":"FieldIndex"}
     },
+    "FieldSelectionCriteria":{
+      "type":"string",
+      "max":2000,
+      "min":0
+    },
+    "FieldsData":{
+      "type":"structure",
+      "members":{
+        "data":{
+          "shape":"Data",
+          "documentation":"<p>The actual log data content returned in the streaming response. This contains the fields and values of the log event in a structured format that can be parsed and processed by the client.</p>"
+        }
+      },
+      "documentation":"<p>A structure containing the extracted fields from a log event. These fields are extracted based on the log format and can be used for structured querying and analysis.</p>",
+      "event":true
+    },
     "FilterCount":{"type":"integer"},
     "FilterLogEventsRequest":{
       "type":"structure",
@@ -3454,7 +3552,7 @@
         },
         "nextToken":{
           "shape":"NextToken",
-          "documentation":"<p>The token to use when requesting the next set of items. The token expires after 24 hours.</p>"
+          "documentation":"<p>The token to use when requesting the next set of items. The token expires after 24 hours.</p> <p>If the results don't include a <code>nextToken</code>, then pagination is finished. </p>"
         }
       }
     },
@@ -3681,7 +3779,7 @@
         },
         "kmsKeyId":{
           "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key assigned to this anomaly detector, if any.</p>"
+          "documentation":"<p>The ARN of the KMS key assigned to this anomaly detector, if any.</p>"
         },
         "creationTimeStamp":{
           "shape":"EpochMillis",
@@ -3782,6 +3880,43 @@
         }
       }
     },
+    "GetLogObjectRequest":{
+      "type":"structure",
+      "required":["logObjectPointer"],
+      "members":{
+        "unmask":{
+          "shape":"Unmask",
+          "documentation":"<p>A boolean flag that indicates whether to unmask sensitive log data. When set to true, any masked or redacted data in the log object will be displayed in its original form. Default is false.</p>"
+        },
+        "logObjectPointer":{
+          "shape":"LogObjectPointer",
+          "documentation":"<p>A pointer to the specific log object to retrieve. This is a required parameter that uniquely identifies the log object within CloudWatch Logs. The pointer is typically obtained from a previous query or filter operation.</p>"
+        }
+      },
+      "documentation":"<p>The parameters for the GetLogObject operation.</p>"
+    },
+    "GetLogObjectResponse":{
+      "type":"structure",
+      "members":{
+        "fieldStream":{
+          "shape":"GetLogObjectResponseStream",
+          "documentation":"<p>A stream of structured log data returned by the GetLogObject operation. This stream contains log events with their associated metadata and extracted fields.</p>"
+        }
+      },
+      "documentation":"<p>The response from the GetLogObject operation.</p>"
+    },
+    "GetLogObjectResponseStream":{
+      "type":"structure",
+      "members":{
+        "fields":{"shape":"FieldsData"},
+        "InternalStreamingException":{
+          "shape":"InternalStreamingException",
+          "documentation":"<p>An internal error occurred during the streaming of log data. This exception is thrown when there's an issue with the internal streaming mechanism used by the GetLogObject operation.</p>"
+        }
+      },
+      "documentation":"<p>A stream of structured log data returned by the GetLogObject operation. This stream contains log events with their associated metadata and extracted fields.</p>",
+      "eventstream":true
+    },
     "GetLogRecordRequest":{
       "type":"structure",
       "required":["logRecordPointer"],
@@ -3881,14 +4016,14 @@
         },
         "match":{
           "shape":"GrokMatch",
-          "documentation":"<p>The grok pattern to match against the log event. For a list of supported grok patterns, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#Grok-Patterns\">Supported grok patterns</a>.</p>"
+          "documentation":"<p>The grok pattern to match against the log event. For a list of supported grok patterns, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#Grok-Patterns\">Supported grok patterns</a>.</p>"
         }
       },
-      "documentation":"<p>This processor uses pattern matching to parse and structure unstructured data. This processor can also extract fields from log messages.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-Grok\"> grok</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
+      "documentation":"<p>This processor uses pattern matching to parse and structure unstructured data. This processor can also extract fields from log messages.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-Grok\">grok</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
     },
     "GrokMatch":{
       "type":"string",
-      "max":128,
+      "max":512,
       "min":1
     },
     "Histogram":{
@@ -3959,7 +4094,7 @@
         },
         "message":{
           "shape":"EventMessage",
-          "documentation":"<p>The raw event message. Each log event can be no larger than 256 KB.</p>"
+          "documentation":"<p>The raw event message. Each log event can be no larger than 1 MB.</p>"
         }
       },
       "documentation":"<p>Represents a log event, which is a record of activity that was recorded by the application or resource being monitored.</p>"
@@ -4039,17 +4174,23 @@
       "enum":["OPENSEARCH"]
     },
     "Interleaved":{"type":"boolean"},
-    "InvalidOperationException":{
+    "InternalStreamingException":{
       "type":"structure",
       "members":{
+        "message":{"shape":"Message"}
       },
+      "documentation":"<p>An internal error occurred during the streaming of log data. This exception is thrown when there's an issue with the internal streaming mechanism used by the GetLogObject operation.</p>",
+      "exception":true
+    },
+    "InvalidOperationException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>The operation is not valid on the specified resource.</p>",
       "exception":true
     },
     "InvalidParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A parameter is specified incorrectly.</p>",
       "exception":true
     },
@@ -4083,8 +4224,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the maximum number of resources that can be created.</p>",
       "exception":true
     },
@@ -4147,6 +4287,11 @@
         }
       }
     },
+    "ListLimit":{
+      "type":"integer",
+      "max":1000,
+      "min":1
+    },
     "ListLogAnomalyDetectorsLimit":{
       "type":"integer",
       "max":50,
@@ -4206,6 +4351,42 @@
         "nextToken":{"shape":"NextToken"}
       }
     },
+    "ListLogGroupsRequest":{
+      "type":"structure",
+      "members":{
+        "logGroupNamePattern":{
+          "shape":"LogGroupNameRegexPattern",
+          "documentation":"<p>Use this parameter to limit the returned log groups to only those with names that match the pattern that you specify. This parameter is a regular expression that can match prefixes and substrings, and supports wildcard matching and matching multiple patterns, as in the following examples. </p> <ul> <li> <p>Use <code>^</code> to match log group names by prefix.</p> </li> <li> <p>For a substring match, specify the string to match. All matches are case sensitive</p> </li> <li> <p>To match multiple patterns, separate them with a <code>|</code> as in the example <code>^/aws/lambda|discovery</code> </p> </li> </ul> <p>You can specify as many as five different regular expression patterns in this field, each of which must be between 3 and 24 characters. You can include the <code>^</code> symbol as many as five times, and include the <code>|</code> symbol as many as four times.</p>"
+        },
+        "logGroupClass":{
+          "shape":"LogGroupClass",
+          "documentation":"<p>Use this parameter to limit the results to only those log groups in the specified log group class. If you omit this parameter, log groups of all classes can be returned.</p>"
+        },
+        "includeLinkedAccounts":{
+          "shape":"IncludeLinkedAccounts",
+          "documentation":"<p>If you are using a monitoring account, set this to <code>true</code> to have the operation return log groups in the accounts listed in <code>accountIdentifiers</code>.</p> <p>If this parameter is set to <code>true</code> and <code>accountIdentifiers</code> contains a null value, the operation returns all log groups in the monitoring account and all log groups in all source accounts that are linked to the monitoring account. </p> <p>The default for this parameter is <code>false</code>.</p>"
+        },
+        "accountIdentifiers":{
+          "shape":"AccountIds",
+          "documentation":"<p>When <code>includeLinkedAccounts</code> is set to <code>true</code>, use this parameter to specify the list of accounts to search. You can specify as many as 20 account IDs in the array.</p>"
+        },
+        "nextToken":{"shape":"NextToken"},
+        "limit":{
+          "shape":"ListLimit",
+          "documentation":"<p>The maximum number of log groups to return. If you omit this parameter, the default is up to 50 log groups.</p>"
+        }
+      }
+    },
+    "ListLogGroupsResponse":{
+      "type":"structure",
+      "members":{
+        "logGroups":{
+          "shape":"LogGroupSummaries",
+          "documentation":"<p>An array of structures, where each structure contains the information about one log group.</p>"
+        },
+        "nextToken":{"shape":"NextToken"}
+      }
+    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["resourceArn"],
@@ -4280,7 +4461,7 @@
           "documentation":"<p>If you set <code>flatten</code> to <code>true</code>, use <code>flattenedElement</code> to specify which element, <code>first</code> or <code>last</code>, to keep. </p> <p>You must specify this parameter if <code>flatten</code> is <code>true</code> </p>"
         }
       },
-      "documentation":"<p>This processor takes a list of objects that contain key fields, and converts them into a map of target keys.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-listToMap\"> listToMap</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
+      "documentation":"<p>This processor takes a list of objects that contain key fields, and converts them into a map of target keys.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation-Processors.html#CloudWatch-Logs-Transformation-listToMap\"> listToMap</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
     },
     "LiveTailSessionLogEvent":{
       "type":"structure",
@@ -4425,7 +4606,7 @@
         },
         "logGroupClass":{
           "shape":"LogGroupClass",
-          "documentation":"<p>This specifies the log group class for this log group. There are two classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> </ul> <p>For details about the features supported by each class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
+          "documentation":"<p>This specifies the log group class for this log group. There are three classes:</p> <ul> <li> <p>The <code>Standard</code> log class supports all CloudWatch Logs features.</p> </li> <li> <p>The <code>Infrequent Access</code> log class supports a subset of CloudWatch Logs features and incurs lower costs.</p> </li> <li> <p>Use the <code>Delivery</code> log class only for delivering Lambda logs to store in Amazon S3 or Amazon Data Firehose. Log events in log groups in the Delivery class are kept in CloudWatch Logs for only one day. This log class doesn't offer rich CloudWatch Logs capabilities such as CloudWatch Logs Insights queries.</p> </li> </ul> <p>For details about the features supported by the Standard and Infrequent Access classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
         },
         "logGroupArn":{
           "shape":"Arn",
@@ -4448,7 +4629,8 @@
       "type":"string",
       "enum":[
         "STANDARD",
-        "INFREQUENT_ACCESS"
+        "INFREQUENT_ACCESS",
+        "DELIVERY"
       ]
     },
     "LogGroupField":{
@@ -4491,14 +4673,47 @@
       "min":0,
       "pattern":"[\\.\\-_/#A-Za-z0-9]*"
     },
+    "LogGroupNameRegexPattern":{
+      "type":"string",
+      "max":129,
+      "min":3,
+      "pattern":"(\\^?[\\.\\-_\\/#A-Za-z0-9]{3,24})(\\|\\^?[\\.\\-_\\/#A-Za-z0-9]{3,24}){0,4}"
+    },
     "LogGroupNames":{
       "type":"list",
       "member":{"shape":"LogGroupName"}
     },
+    "LogGroupSummaries":{
+      "type":"list",
+      "member":{"shape":"LogGroupSummary"}
+    },
+    "LogGroupSummary":{
+      "type":"structure",
+      "members":{
+        "logGroupName":{
+          "shape":"LogGroupName",
+          "documentation":"<p>The name of the log group.</p>"
+        },
+        "logGroupArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the log group.</p>"
+        },
+        "logGroupClass":{
+          "shape":"LogGroupClass",
+          "documentation":"<p>The log group class for this log group. For details about the features supported by each log group class, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html\">Log classes</a> </p>"
+        }
+      },
+      "documentation":"<p>This structure contains information about one log group in your account.</p>"
+    },
     "LogGroups":{
       "type":"list",
       "member":{"shape":"LogGroup"}
     },
+    "LogObjectPointer":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
     "LogRecord":{
       "type":"map",
       "key":{"shape":"Field"},
@@ -4631,6 +4846,14 @@
         "applyOnTransformedLogs":{
           "shape":"ApplyOnTransformedLogs",
           "documentation":"<p>This parameter is valid only for log groups that have an active log transformer. For more information about log transformers, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutTransformer.html\">PutTransformer</a>.</p> <p>If this value is <code>true</code>, the metric filter is applied on the transformed version of the log events instead of the original ingested log events.</p>"
+        },
+        "fieldSelectionCriteria":{
+          "shape":"FieldSelectionCriteria",
+          "documentation":"<p>The filter expression that specifies which log events are processed by this metric filter based on system fields. Returns the <code>fieldSelectionCriteria</code> value if it was specified when the metric filter was created.</p>"
+        },
+        "emitSystemFieldDimensions":{
+          "shape":"EmitSystemFields",
+          "documentation":"<p>The list of system fields that are emitted as additional dimensions in the generated metrics. Returns the <code>emitSystemFieldDimensions</code> value if it was specified when the metric filter was created.</p>"
         }
       },
       "documentation":"<p>Metric filters express how CloudWatch Logs would extract metric observations from ingested log events and transform them into metric data in a CloudWatch metric.</p>"
@@ -4767,6 +4990,10 @@
       "max":128,
       "min":1
     },
+    "OCSFVersion":{
+      "type":"string",
+      "enum":["V1.1"]
+    },
     "OpenSearchApplication":{
       "type":"structure",
       "members":{
@@ -5020,8 +5247,7 @@
     },
     "OperationAbortedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Multiple concurrent requests to update the same resource were in conflict.</p>",
       "exception":true
     },
@@ -5147,6 +5373,28 @@
       },
       "documentation":"<p>Use this processor to parse Route 53 vended logs, extract fields, and and convert them into a JSON format. This processor always processes the entire log event message. For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-parseRoute53\"> parseRoute53</a>.</p> <important> <p>If you use this processor, it must be the first processor in your transformer.</p> </important>"
     },
+    "ParseToOCSF":{
+      "type":"structure",
+      "required":[
+        "eventSource",
+        "ocsfVersion"
+      ],
+      "members":{
+        "source":{
+          "shape":"Source",
+          "documentation":"<p>The path to the field in the log event that you want to parse. If you omit this value, the whole log message is parsed.</p>"
+        },
+        "eventSource":{
+          "shape":"EventSource",
+          "documentation":"<p>Specify the service or process that produces the log events that will be converted with this processor.</p>"
+        },
+        "ocsfVersion":{
+          "shape":"OCSFVersion",
+          "documentation":"<p>Specify which version of the OCSF schema to use for the transformed log events.</p>"
+        }
+      },
+      "documentation":"<p>This processor converts logs into <a href=\"https://ocsf.io\">Open Cybersecurity Schema Framework (OCSF)</a> events.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-parseToOCSF\"> parseToOSCF</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
+    },
     "ParseVPC":{
       "type":"structure",
       "members":{
@@ -5236,13 +5484,21 @@
       "min":1
     },
     "PolicyName":{"type":"string"},
+    "PolicyScope":{
+      "type":"string",
+      "enum":[
+        "ACCOUNT",
+        "RESOURCE"
+      ]
+    },
     "PolicyType":{
       "type":"string",
       "enum":[
         "DATA_PROTECTION_POLICY",
         "SUBSCRIPTION_FILTER_POLICY",
         "FIELD_INDEX_POLICY",
-        "TRANSFORMER_POLICY"
+        "TRANSFORMER_POLICY",
+        "METRIC_EXTRACTION_POLICY"
       ]
     },
     "Priority":{
@@ -5304,6 +5560,10 @@
           "shape":"ParseRoute53",
           "documentation":"<p>Use this parameter to include the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-parseRoute53\"> parseRoute53</a> processor in your transformer.</p> <p>If you use this processor, it must be the first processor in your transformer.</p>"
         },
+        "parseToOCSF":{
+          "shape":"ParseToOCSF",
+          "documentation":"<p>Use this parameter to convert logs into Open Cybersecurity Schema (OCSF) format.</p>"
+        },
         "parsePostgres":{
           "shape":"ParsePostgres",
           "documentation":"<p>Use this parameter to include the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-parsePostGres\"> parsePostGres</a> processor in your transformer.</p> <p>If you use this processor, it must be the first processor in your transformer.</p>"
@@ -5375,7 +5635,7 @@
         },
         "selectionCriteria":{
           "shape":"SelectionCriteria",
-          "documentation":"<p>Use this parameter to apply the new policy to a subset of log groups in the account.</p> <p>Specifing <code>selectionCriteria</code> is valid only when you specify <code>SUBSCRIPTION_FILTER_POLICY</code>, <code>FIELD_INDEX_POLICY</code> or <code>TRANSFORMER_POLICY</code>for <code>policyType</code>.</p> <p>If <code>policyType</code> is <code>SUBSCRIPTION_FILTER_POLICY</code>, the only supported <code>selectionCriteria</code> filter is <code>LogGroupName NOT IN []</code> </p> <p>If <code>policyType</code> is <code>FIELD_INDEX_POLICY</code> or <code>TRANSFORMER_POLICY</code>, the only supported <code>selectionCriteria</code> filter is <code>LogGroupNamePrefix</code> </p> <p>The <code>selectionCriteria</code> string can be up to 25KB in length. The length is determined by using its UTF-8 bytes.</p> <p>Using the <code>selectionCriteria</code> parameter with <code>SUBSCRIPTION_FILTER_POLICY</code> is useful to help prevent infinite loops. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions-recursion-prevention.html\">Log recursion prevention</a>.</p>"
+          "documentation":"<p>Use this parameter to apply the new policy to a subset of log groups in the account.</p> <p>Specifying <code>selectionCriteria</code> is valid only when you specify <code>SUBSCRIPTION_FILTER_POLICY</code>, <code>FIELD_INDEX_POLICY</code> or <code>TRANSFORMER_POLICY</code>for <code>policyType</code>.</p> <p>If <code>policyType</code> is <code>SUBSCRIPTION_FILTER_POLICY</code>, the only supported <code>selectionCriteria</code> filter is <code>LogGroupName NOT IN []</code> </p> <p>If <code>policyType</code> is <code>FIELD_INDEX_POLICY</code> or <code>TRANSFORMER_POLICY</code>, the only supported <code>selectionCriteria</code> filter is <code>LogGroupNamePrefix</code> </p> <p>The <code>selectionCriteria</code> string can be up to 25KB in length. The length is determined by using its UTF-8 bytes.</p> <p>Using the <code>selectionCriteria</code> parameter with <code>SUBSCRIPTION_FILTER_POLICY</code> is useful to help prevent infinite loops. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions-recursion-prevention.html\">Log recursion prevention</a>.</p>"
         }
       }
     },
@@ -5450,10 +5710,7 @@
     },
     "PutDeliveryDestinationRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "deliveryDestinationConfiguration"
-      ],
+      "required":["name"],
       "members":{
         "name":{
           "shape":"DeliveryDestinationName",
@@ -5465,7 +5722,11 @@
         },
         "deliveryDestinationConfiguration":{
           "shape":"DeliveryDestinationConfiguration",
-          "documentation":"<p>A structure that contains the ARN of the Amazon Web Services resource that will receive the logs.</p>"
+          "documentation":"<p>A structure that contains the ARN of the Amazon Web Services resource that will receive the logs.</p> <note> <p> <code>deliveryDestinationConfiguration</code> is required for CloudWatch Logs, Amazon S3, Firehose log delivery destinations and not required for X-Ray trace delivery destinations. <code>deliveryDestinationType</code> is needed for X-Ray trace delivery destinations but not required for other logs delivery destinations.</p> </note>"
+        },
+        "deliveryDestinationType":{
+          "shape":"DeliveryDestinationType",
+          "documentation":"<p>The type of delivery destination. This parameter specifies the target service where log data will be delivered. Valid values include:</p> <ul> <li> <p> <code>S3</code> - Amazon S3 for long-term storage and analytics</p> </li> <li> <p> <code>CWL</code> - CloudWatch Logs for centralized log management</p> </li> <li> <p> <code>FH</code> - Amazon Kinesis Data Firehose for real-time data streaming</p> </li> <li> <p> <code>XRAY</code> - Amazon Web Services X-Ray for distributed tracing and application monitoring</p> </li> </ul> <p>The delivery destination type determines the format and configuration options available for log delivery.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -5500,7 +5761,7 @@
         },
         "logType":{
           "shape":"LogType",
-          "documentation":"<p>Defines the type of log that the source is sending.</p> <ul> <li> <p>For Amazon Bedrock, the valid value is <code>APPLICATION_LOGS</code>.</p> </li> <li> <p>For CloudFront, the valid value is <code>ACCESS_LOGS</code>.</p> </li> <li> <p>For Amazon CodeWhisperer, the valid value is <code>EVENT_LOGS</code>.</p> </li> <li> <p>For Elemental MediaPackage, the valid values are <code>EGRESS_ACCESS_LOGS</code> and <code>INGRESS_ACCESS_LOGS</code>.</p> </li> <li> <p>For Elemental MediaTailor, the valid values are <code>AD_DECISION_SERVER_LOGS</code>, <code>MANIFEST_SERVICE_LOGS</code>, and <code>TRANSCODE_LOGS</code>.</p> </li> <li> <p>For IAM Identity Center, the valid value is <code>ERROR_LOGS</code>.</p> </li> <li> <p>For Amazon Q, the valid value is <code>EVENT_LOGS</code>.</p> </li> <li> <p>For Amazon SES mail manager, the valid value is <code>APPLICATION_LOG</code>.</p> </li> <li> <p>For Amazon WorkMail, the valid values are <code>ACCESS_CONTROL_LOGS</code>, <code>AUTHENTICATION_LOGS</code>, <code>WORKMAIL_AVAILABILITY_PROVIDER_LOGS</code>, <code>WORKMAIL_MAILBOX_ACCESS_LOGS</code>, and <code>WORKMAIL_PERSONAL_ACCESS_TOKEN_LOGS</code>.</p> </li> </ul>"
+          "documentation":"<p>Defines the type of log that the source is sending.</p> <ul> <li> <p>For Amazon Bedrock, the valid value is <code>APPLICATION_LOGS</code> and <code>TRACES</code>.</p> </li> <li> <p>For CloudFront, the valid value is <code>ACCESS_LOGS</code>.</p> </li> <li> <p>For Amazon CodeWhisperer, the valid value is <code>EVENT_LOGS</code>.</p> </li> <li> <p>For Elemental MediaPackage, the valid values are <code>EGRESS_ACCESS_LOGS</code> and <code>INGRESS_ACCESS_LOGS</code>.</p> </li> <li> <p>For Elemental MediaTailor, the valid values are <code>AD_DECISION_SERVER_LOGS</code>, <code>MANIFEST_SERVICE_LOGS</code>, and <code>TRANSCODE_LOGS</code>.</p> </li> <li> <p>For Entity Resolution, the valid value is <code>WORKFLOW_LOGS</code>.</p> </li> <li> <p>For IAM Identity Center, the valid value is <code>ERROR_LOGS</code>.</p> </li> <li> <p>For PCS, the valid values are <code>PCS_SCHEDULER_LOGS</code> and <code>PCS_JOBCOMP_LOGS</code>.</p> </li> <li> <p>For Amazon Q, the valid value is <code>EVENT_LOGS</code>.</p> </li> <li> <p>For Amazon SES mail manager, the valid values are <code>APPLICATION_LOG</code> and <code>TRAFFIC_POLICY_DEBUG_LOGS</code>.</p> </li> <li> <p>For Amazon WorkMail, the valid values are <code>ACCESS_CONTROL_LOGS</code>, <code>AUTHENTICATION_LOGS</code>, <code>WORKMAIL_AVAILABILITY_PROVIDER_LOGS</code>, <code>WORKMAIL_MAILBOX_ACCESS_LOGS</code>, and <code>WORKMAIL_PERSONAL_ACCESS_TOKEN_LOGS</code>.</p> </li> <li> <p>For Amazon VPC Route Server, the valid value is <code>EVENT_LOGS</code>.</p> </li> </ul>"
         },
         "tags":{
           "shape":"Tags",
@@ -5709,6 +5970,14 @@
         "applyOnTransformedLogs":{
           "shape":"ApplyOnTransformedLogs",
           "documentation":"<p>This parameter is valid only for log groups that have an active log transformer. For more information about log transformers, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutTransformer.html\">PutTransformer</a>.</p> <p>If the log group uses either a log-group level or account-level transformer, and you specify <code>true</code>, the metric filter will be applied on the transformed version of the log events instead of the original ingested log events.</p>"
+        },
+        "fieldSelectionCriteria":{
+          "shape":"FieldSelectionCriteria",
+          "documentation":"<p>A filter expression that specifies which log events should be processed by this metric filter based on system fields such as source account and source region. Uses selection criteria syntax with operators like <code>=</code>, <code>!=</code>, <code>AND</code>, <code>OR</code>, <code>IN</code>, <code>NOT IN</code>. Example: <code>@aws.region = \"us-east-1\"</code> or <code>@aws.account IN [\"123456789012\", \"987654321098\"]</code>. Maximum length: 2000 characters.</p>"
+        },
+        "emitSystemFieldDimensions":{
+          "shape":"EmitSystemFields",
+          "documentation":"<p>A list of system fields to emit as additional dimensions in the generated metrics. Valid values are <code>@aws.account</code> and <code>@aws.region</code>. These dimensions help identify the source of centralized log data and count toward the total dimension limit for metric filters.</p>"
         }
       }
     },
@@ -5765,6 +6034,14 @@
         "policyDocument":{
           "shape":"PolicyDocument",
           "documentation":"<p>Details of the new policy, including the identity of the principal that is enabled to put logs to this account. This is formatted as a JSON string. This parameter is required.</p> <p>The following example creates a resource policy enabling the Route 53 service to put DNS query logs in to the specified log group. Replace <code>\"logArn\"</code> with the ARN of your CloudWatch Logs resource, such as a log group or log stream.</p> <p>CloudWatch Logs also supports <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn\">aws:SourceArn</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount\">aws:SourceAccount</a> condition context keys.</p> <p>In the example resource policy, you would replace the value of <code>SourceArn</code> with the resource making the call from Route 53 to CloudWatch Logs. You would also replace the value of <code>SourceAccount</code> with the Amazon Web Services account ID making that call.</p> <p/> <p> <code>{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Sid\": \"Route53LogsToCloudWatchLogs\", \"Effect\": \"Allow\", \"Principal\": { \"Service\": [ \"route53.amazonaws.com\" ] }, \"Action\": \"logs:PutLogEvents\", \"Resource\": \"logArn\", \"Condition\": { \"ArnLike\": { \"aws:SourceArn\": \"myRoute53ResourceArn\" }, \"StringEquals\": { \"aws:SourceAccount\": \"myAwsAccountId\" } } } ] }</code> </p>"
+        },
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the CloudWatch Logs resource to which the resource policy needs to be added or attached. Currently only supports LogGroup ARN.</p>"
+        },
+        "expectedRevisionId":{
+          "shape":"ExpectedRevisionId",
+          "documentation":"<p>The expected revision ID of the resource policy. Required when <code>resourceArn</code> is provided to prevent concurrent modifications. Use <code>null</code> when creating a resource policy for the first time.</p>"
         }
       }
     },
@@ -5774,6 +6051,10 @@
         "resourcePolicy":{
           "shape":"ResourcePolicy",
           "documentation":"<p>The new policy.</p>"
+        },
+        "revisionId":{
+          "shape":"ExpectedRevisionId",
+          "documentation":"<p>The revision ID of the created or updated resource policy. Only returned for resource-scoped policies.</p>"
         }
       }
     },
@@ -5827,6 +6108,14 @@
         "applyOnTransformedLogs":{
           "shape":"ApplyOnTransformedLogs",
           "documentation":"<p>This parameter is valid only for log groups that have an active log transformer. For more information about log transformers, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutTransformer.html\">PutTransformer</a>.</p> <p>If the log group uses either a log-group level or account-level transformer, and you specify <code>true</code>, the subscription filter will be applied on the transformed version of the log events instead of the original ingested log events.</p>"
+        },
+        "fieldSelectionCriteria":{
+          "shape":"FieldSelectionCriteria",
+          "documentation":"<p>A filter expression that specifies which log events should be processed by this subscription filter based on system fields such as source account and source region. Uses selection criteria syntax with operators like <code>=</code>, <code>!=</code>, <code>AND</code>, <code>OR</code>, <code>IN</code>, <code>NOT IN</code>. Example: <code>@aws.region NOT IN [\"cn-north-1\"]</code> or <code>@aws.account = \"123456789012\" AND @aws.region = \"us-east-1\"</code>. Maximum length: 2000 characters.</p>"
+        },
+        "emitSystemFields":{
+          "shape":"EmitSystemFields",
+          "documentation":"<p>A list of system fields to include in the log events sent to the subscription destination. Valid values are <code>@aws.account</code> and <code>@aws.region</code>. These fields provide source information for centralized log data in the forwarded payload.</p>"
         }
       }
     },
@@ -5923,7 +6212,7 @@
     "QueryId":{
       "type":"string",
       "max":256,
-      "min":0
+      "min":1
     },
     "QueryInfo":{
       "type":"structure",
@@ -6128,8 +6417,7 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource already exists.</p>",
       "exception":true
     },
@@ -6156,8 +6444,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource does not exist.</p>",
       "exception":true
     },
@@ -6179,6 +6466,18 @@
         "lastUpdatedTime":{
           "shape":"Timestamp",
           "documentation":"<p>Timestamp showing when this policy was last updated, expressed as the number of milliseconds after <code>Jan 1, 1970 00:00:00 UTC</code>.</p>"
+        },
+        "policyScope":{
+          "shape":"PolicyScope",
+          "documentation":"<p>Specifies scope of the resource policy. Valid values are ACCOUNT or RESOURCE.</p>"
+        },
+        "resourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the CloudWatch Logs resource to which the resource policy is attached. Only populated for resource-scoped policies.</p>"
+        },
+        "revisionId":{
+          "shape":"ExpectedRevisionId",
+          "documentation":"<p>The revision ID of the resource policy. Only populated for resource-scoped policies.</p>"
         }
       },
       "documentation":"<p>A policy enabling one or more entities to put logs to a log group in this account.</p>"
@@ -6267,15 +6566,13 @@
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This request exceeds a service quota.</p>",
       "exception":true
     },
     "ServiceUnavailableException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The service cannot complete the request.</p>",
       "exception":true,
       "fault":true
@@ -6321,6 +6618,11 @@
       },
       "documentation":"<p>Use this processor to split a field into an array of strings using a delimiting character.</p> <p>For more information about this processor including examples, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Transformation.html#CloudWatch-Logs-Transformation-splitString\"> splitString</a> in the <i>CloudWatch Logs User Guide</i>.</p>"
     },
+    "SplitStringDelimiter":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "SplitStringEntries":{
       "type":"list",
       "member":{"shape":"SplitStringEntry"},
@@ -6339,7 +6641,7 @@
           "documentation":"<p>The key of the field to split.</p>"
         },
         "delimiter":{
-          "shape":"Delimiter",
+          "shape":"SplitStringDelimiter",
           "documentation":"<p>The separator characters to split the string entry on.</p>"
         }
       },
@@ -6549,6 +6851,14 @@
         "creationTime":{
           "shape":"Timestamp",
           "documentation":"<p>The creation time of the subscription filter, expressed as the number of milliseconds after <code>Jan 1, 1970 00:00:00 UTC</code>.</p>"
+        },
+        "fieldSelectionCriteria":{
+          "shape":"FieldSelectionCriteria",
+          "documentation":"<p>The filter expression that specifies which log events are processed by this subscription filter based on system fields. Returns the <code>fieldSelectionCriteria</code> value if it was specified when the subscription filter was created.</p>"
+        },
+        "emitSystemFields":{
+          "shape":"EmitSystemFields",
+          "documentation":"<p>The list of system fields that are included in the log events sent to the subscription destination. Returns the <code>emitSystemFields</code> value if it was specified when the subscription filter was created.</p>"
         }
       },
       "documentation":"<p>Represents a subscription filter.</p>"
@@ -6634,6 +6944,7 @@
         "HOURS"
       ]
     },
+    "SystemField":{"type":"string"},
     "TagKey":{
       "type":"string",
       "max":128,
@@ -6774,8 +7085,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request was throttled because of quota limits.</p>",
       "exception":true
     },
@@ -6900,8 +7210,7 @@
     "Unmask":{"type":"boolean"},
     "UnrecognizedClientException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The most likely cause is an Amazon Web Services access key ID or secret key that's not valid.</p>",
       "exception":true
     },
@@ -6995,8 +7304,7 @@
     },
     "UpdateDeliveryConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLogAnomalyDetectorRequest":{
       "type":"structure",
@@ -7043,8 +7351,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One of the parameters for the request is not valid.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutequipment/2020-12-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutequipment/2020-12-15/service-2.json 2.31.35-1/awscli/botocore/data/lookoutequipment/2020-12-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/lookoutequipment/2020-12-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutequipment/2020-12-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"lookoutequipment",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"LookoutEquipment",
     "serviceFullName":"Amazon Lookout for Equipment",
     "serviceId":"LookoutEquipment",
     "signatureVersion":"v4",
     "targetPrefix":"AWSLookoutEquipmentFrontendService",
-    "uid":"lookoutequipment-2020-12-15"
+    "uid":"lookoutequipment-2020-12-15",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateDataset":{
@@ -4204,8 +4206,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4273,8 +4274,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateActiveModelVersionRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ]
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutmetrics-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutmetrics-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutmetrics.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://lookoutmetrics.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-{
-  "pagination": {}
-}
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/lookoutmetrics/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutmetrics/2017-07-25/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,3361 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2017-07-25",
-    "endpointPrefix":"lookoutmetrics",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "serviceAbbreviation":"LookoutMetrics",
-    "serviceFullName":"Amazon Lookout for Metrics",
-    "serviceId":"LookoutMetrics",
-    "signatureVersion":"v4",
-    "signingName":"lookoutmetrics",
-    "uid":"lookoutmetrics-2017-07-25"
-  },
-  "operations":{
-    "ActivateAnomalyDetector":{
-      "name":"ActivateAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ActivateAnomalyDetector"
-      },
-      "input":{"shape":"ActivateAnomalyDetectorRequest"},
-      "output":{"shape":"ActivateAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ConflictException"}
-      ],
-      "documentation":"<p>Activates an anomaly detector.</p>"
-    },
-    "BackTestAnomalyDetector":{
-      "name":"BackTestAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/BackTestAnomalyDetector"
-      },
-      "input":{"shape":"BackTestAnomalyDetectorRequest"},
-      "output":{"shape":"BackTestAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Runs a backtest for anomaly detection for the specified resource.</p>"
-    },
-    "CreateAlert":{
-      "name":"CreateAlert",
-      "http":{
-        "method":"POST",
-        "requestUri":"/CreateAlert"
-      },
-      "input":{"shape":"CreateAlertRequest"},
-      "output":{"shape":"CreateAlertResponse"},
-      "errors":[
-        {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates an alert for an anomaly detector.</p>"
-    },
-    "CreateAnomalyDetector":{
-      "name":"CreateAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/CreateAnomalyDetector"
-      },
-      "input":{"shape":"CreateAnomalyDetectorRequest"},
-      "output":{"shape":"CreateAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ConflictException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates an anomaly detector.</p>"
-    },
-    "CreateMetricSet":{
-      "name":"CreateMetricSet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/CreateMetricSet"
-      },
-      "input":{"shape":"CreateMetricSetRequest"},
-      "output":{"shape":"CreateMetricSetResponse"},
-      "errors":[
-        {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ServiceQuotaExceededException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a dataset.</p>"
-    },
-    "DeactivateAnomalyDetector":{
-      "name":"DeactivateAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DeactivateAnomalyDetector"
-      },
-      "input":{"shape":"DeactivateAnomalyDetectorRequest"},
-      "output":{"shape":"DeactivateAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deactivates an anomaly detector.</p>"
-    },
-    "DeleteAlert":{
-      "name":"DeleteAlert",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DeleteAlert"
-      },
-      "input":{"shape":"DeleteAlertRequest"},
-      "output":{"shape":"DeleteAlertResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes an alert.</p>"
-    },
-    "DeleteAnomalyDetector":{
-      "name":"DeleteAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DeleteAnomalyDetector"
-      },
-      "input":{"shape":"DeleteAnomalyDetectorRequest"},
-      "output":{"shape":"DeleteAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes a detector. Deleting an anomaly detector will delete all of its corresponding resources including any configured datasets and alerts.</p>"
-    },
-    "DescribeAlert":{
-      "name":"DescribeAlert",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DescribeAlert"
-      },
-      "input":{"shape":"DescribeAlertRequest"},
-      "output":{"shape":"DescribeAlertResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Describes an alert.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "DescribeAnomalyDetectionExecutions":{
-      "name":"DescribeAnomalyDetectionExecutions",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DescribeAnomalyDetectionExecutions"
-      },
-      "input":{"shape":"DescribeAnomalyDetectionExecutionsRequest"},
-      "output":{"shape":"DescribeAnomalyDetectionExecutionsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Returns information about the status of the specified anomaly detection jobs.</p>"
-    },
-    "DescribeAnomalyDetector":{
-      "name":"DescribeAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DescribeAnomalyDetector"
-      },
-      "input":{"shape":"DescribeAnomalyDetectorRequest"},
-      "output":{"shape":"DescribeAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Describes a detector.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "DescribeMetricSet":{
-      "name":"DescribeMetricSet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DescribeMetricSet"
-      },
-      "input":{"shape":"DescribeMetricSetRequest"},
-      "output":{"shape":"DescribeMetricSetResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Describes a dataset.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "DetectMetricSetConfig":{
-      "name":"DetectMetricSetConfig",
-      "http":{
-        "method":"POST",
-        "requestUri":"/DetectMetricSetConfig"
-      },
-      "input":{"shape":"DetectMetricSetConfigRequest"},
-      "output":{"shape":"DetectMetricSetConfigResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Detects an Amazon S3 dataset's file format, interval, and offset.</p>"
-    },
-    "GetAnomalyGroup":{
-      "name":"GetAnomalyGroup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/GetAnomalyGroup"
-      },
-      "input":{"shape":"GetAnomalyGroupRequest"},
-      "output":{"shape":"GetAnomalyGroupResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Returns details about a group of anomalous metrics.</p>"
-    },
-    "GetDataQualityMetrics":{
-      "name":"GetDataQualityMetrics",
-      "http":{
-        "method":"POST",
-        "requestUri":"/GetDataQualityMetrics"
-      },
-      "input":{"shape":"GetDataQualityMetricsRequest"},
-      "output":{"shape":"GetDataQualityMetricsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Returns details about the requested data quality metrics.</p>"
-    },
-    "GetFeedback":{
-      "name":"GetFeedback",
-      "http":{
-        "method":"POST",
-        "requestUri":"/GetFeedback"
-      },
-      "input":{"shape":"GetFeedbackRequest"},
-      "output":{"shape":"GetFeedbackResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Get feedback for an anomaly group.</p>"
-    },
-    "GetSampleData":{
-      "name":"GetSampleData",
-      "http":{
-        "method":"POST",
-        "requestUri":"/GetSampleData"
-      },
-      "input":{"shape":"GetSampleDataRequest"},
-      "output":{"shape":"GetSampleDataResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Returns a selection of sample records from an Amazon S3 datasource.</p>"
-    },
-    "ListAlerts":{
-      "name":"ListAlerts",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListAlerts"
-      },
-      "input":{"shape":"ListAlertsRequest"},
-      "output":{"shape":"ListAlertsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p>Lists the alerts attached to a detector.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "ListAnomalyDetectors":{
-      "name":"ListAnomalyDetectors",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListAnomalyDetectors"
-      },
-      "input":{"shape":"ListAnomalyDetectorsRequest"},
-      "output":{"shape":"ListAnomalyDetectorsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists the detectors in the current AWS Region.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "ListAnomalyGroupRelatedMetrics":{
-      "name":"ListAnomalyGroupRelatedMetrics",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListAnomalyGroupRelatedMetrics"
-      },
-      "input":{"shape":"ListAnomalyGroupRelatedMetricsRequest"},
-      "output":{"shape":"ListAnomalyGroupRelatedMetricsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Returns a list of measures that are potential causes or effects of an anomaly group.</p>"
-    },
-    "ListAnomalyGroupSummaries":{
-      "name":"ListAnomalyGroupSummaries",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListAnomalyGroupSummaries"
-      },
-      "input":{"shape":"ListAnomalyGroupSummariesRequest"},
-      "output":{"shape":"ListAnomalyGroupSummariesResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Returns a list of anomaly groups.</p>"
-    },
-    "ListAnomalyGroupTimeSeries":{
-      "name":"ListAnomalyGroupTimeSeries",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListAnomalyGroupTimeSeries"
-      },
-      "input":{"shape":"ListAnomalyGroupTimeSeriesRequest"},
-      "output":{"shape":"ListAnomalyGroupTimeSeriesResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Gets a list of anomalous metrics for a measure in an anomaly group.</p>"
-    },
-    "ListMetricSets":{
-      "name":"ListMetricSets",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ListMetricSets"
-      },
-      "input":{"shape":"ListMetricSetsRequest"},
-      "output":{"shape":"ListMetricSetsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists the datasets in the current AWS Region.</p> <p>Amazon Lookout for Metrics API actions are eventually consistent. If you do a read operation on a resource immediately after creating or modifying it, use retries to allow time for the write operation to complete.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Gets a list of <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> for a detector, dataset, or alert.</p>"
-    },
-    "PutFeedback":{
-      "name":"PutFeedback",
-      "http":{
-        "method":"POST",
-        "requestUri":"/PutFeedback"
-      },
-      "input":{"shape":"PutFeedbackRequest"},
-      "output":{"shape":"PutFeedbackResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Add feedback for an anomalous metric.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Adds <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> to a detector, dataset, or alert.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":204
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Removes <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> from a detector, dataset, or alert.</p>"
-    },
-    "UpdateAlert":{
-      "name":"UpdateAlert",
-      "http":{
-        "method":"POST",
-        "requestUri":"/UpdateAlert"
-      },
-      "input":{"shape":"UpdateAlertRequest"},
-      "output":{"shape":"UpdateAlertResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Make changes to an existing alert.</p>"
-    },
-    "UpdateAnomalyDetector":{
-      "name":"UpdateAnomalyDetector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/UpdateAnomalyDetector"
-      },
-      "input":{"shape":"UpdateAnomalyDetectorRequest"},
-      "output":{"shape":"UpdateAnomalyDetectorResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"}
-      ],
-      "documentation":"<p>Updates a detector. After activation, you can only change a detector's ingestion delay and description.</p>"
-    },
-    "UpdateMetricSet":{
-      "name":"UpdateMetricSet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/UpdateMetricSet"
-      },
-      "input":{"shape":"UpdateMetricSetRequest"},
-      "output":{"shape":"UpdateMetricSetResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"TooManyRequestsException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Updates a dataset.</p>"
-    }
-  },
-  "shapes":{
-    "AccessDeniedException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"}
-      },
-      "documentation":"<p>You do not have sufficient permissions to perform this action.</p>",
-      "error":{"httpStatusCode":403},
-      "exception":true
-    },
-    "Action":{
-      "type":"structure",
-      "members":{
-        "SNSConfiguration":{
-          "shape":"SNSConfiguration",
-          "documentation":"<p>A configuration for an Amazon SNS channel.</p>"
-        },
-        "LambdaConfiguration":{
-          "shape":"LambdaConfiguration",
-          "documentation":"<p>A configuration for an AWS Lambda channel.</p>"
-        }
-      },
-      "documentation":"<p>A configuration that specifies the action to perform when anomalies are detected.</p>"
-    },
-    "ActivateAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the anomaly detector.</p>"
-        }
-      }
-    },
-    "ActivateAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "AggregationFunction":{
-      "type":"string",
-      "enum":[
-        "AVG",
-        "SUM"
-      ]
-    },
-    "Alert":{
-      "type":"structure",
-      "members":{
-        "Action":{
-          "shape":"Action",
-          "documentation":"<p>Action that will be triggered when there is an alert.</p>"
-        },
-        "AlertDescription":{
-          "shape":"AlertDescription",
-          "documentation":"<p>A description of the alert.</p>"
-        },
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to which the alert is attached.</p>"
-        },
-        "AlertName":{
-          "shape":"AlertName",
-          "documentation":"<p>The name of the alert.</p>"
-        },
-        "AlertSensitivityThreshold":{
-          "shape":"SensitivityThreshold",
-          "documentation":"<p>The minimum severity for an anomaly to trigger the alert.</p>"
-        },
-        "AlertType":{
-          "shape":"AlertType",
-          "documentation":"<p>The type of the alert.</p>"
-        },
-        "AlertStatus":{
-          "shape":"AlertStatus",
-          "documentation":"<p>The status of the alert.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the alert was last modified.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the alert was created.</p>"
-        },
-        "AlertFilters":{
-          "shape":"AlertFilters",
-          "documentation":"<p>The configuration of the alert filters, containing MetricList and DimensionFilter.</p>"
-        }
-      },
-      "documentation":"<p>A configuration for Amazon SNS-integrated notifications.</p>"
-    },
-    "AlertDescription":{
-      "type":"string",
-      "max":256,
-      "pattern":".*\\S.*"
-    },
-    "AlertFilters":{
-      "type":"structure",
-      "members":{
-        "MetricList":{
-          "shape":"MetricNameList",
-          "documentation":"<p>The list of measures that you want to get alerts for.</p>"
-        },
-        "DimensionFilterList":{
-          "shape":"DimensionFilterList",
-          "documentation":"<p>The list of DimensionFilter objects that are used for dimension-based filtering.</p>"
-        }
-      },
-      "documentation":"<p>The configuration of the alert filters.</p>"
-    },
-    "AlertName":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "AlertStatus":{
-      "type":"string",
-      "enum":[
-        "ACTIVE",
-        "INACTIVE"
-      ]
-    },
-    "AlertSummary":{
-      "type":"structure",
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to which the alert is attached.</p>"
-        },
-        "AlertName":{
-          "shape":"AlertName",
-          "documentation":"<p>The name of the alert.</p>"
-        },
-        "AlertSensitivityThreshold":{
-          "shape":"SensitivityThreshold",
-          "documentation":"<p>The minimum severity for an anomaly to trigger the alert.</p>"
-        },
-        "AlertType":{
-          "shape":"AlertType",
-          "documentation":"<p>The type of the alert.</p>"
-        },
-        "AlertStatus":{
-          "shape":"AlertStatus",
-          "documentation":"<p>The status of the alert.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the alert was last modified.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the alert was created.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The alert's <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a>.</p>"
-        }
-      },
-      "documentation":"<p>Provides a summary of an alert's configuration.</p>"
-    },
-    "AlertSummaryList":{
-      "type":"list",
-      "member":{"shape":"AlertSummary"}
-    },
-    "AlertType":{
-      "type":"string",
-      "enum":[
-        "SNS",
-        "LAMBDA"
-      ]
-    },
-    "AnomalyDetectionTaskStatus":{
-      "type":"string",
-      "enum":[
-        "PENDING",
-        "IN_PROGRESS",
-        "COMPLETED",
-        "FAILED",
-        "FAILED_TO_SCHEDULE"
-      ]
-    },
-    "AnomalyDetectionTaskStatusMessage":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "AnomalyDetectorConfig":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorFrequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The frequency at which the detector analyzes its source data.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a detector's configuration.</p>"
-    },
-    "AnomalyDetectorConfigSummary":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorFrequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The interval at which the detector analyzes its source data.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a detector's configuration.</p>"
-    },
-    "AnomalyDetectorDataQualityMetric":{
-      "type":"structure",
-      "members":{
-        "StartTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time for the data quality metrics collection.</p>"
-        },
-        "MetricSetDataQualityMetricList":{
-          "shape":"MetricSetDataQualityMetricList",
-          "documentation":"<p>An array of <code>DataQualityMetricList</code> objects. Each object in the array contains information about a data quality metric.</p>"
-        }
-      },
-      "documentation":"<p>Aggregated details about the data quality metrics collected for the <code>AnomalyDetectorArn</code> provided in the <a>GetDataQualityMetrics</a> object.</p>"
-    },
-    "AnomalyDetectorDataQualityMetricList":{
-      "type":"list",
-      "member":{"shape":"AnomalyDetectorDataQualityMetric"}
-    },
-    "AnomalyDetectorDescription":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "AnomalyDetectorFailureType":{
-      "type":"string",
-      "enum":[
-        "ACTIVATION_FAILURE",
-        "BACK_TEST_ACTIVATION_FAILURE",
-        "DELETION_FAILURE",
-        "DEACTIVATION_FAILURE"
-      ]
-    },
-    "AnomalyDetectorName":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "AnomalyDetectorStatus":{
-      "type":"string",
-      "enum":[
-        "ACTIVE",
-        "ACTIVATING",
-        "DELETING",
-        "FAILED",
-        "INACTIVE",
-        "LEARNING",
-        "BACK_TEST_ACTIVATING",
-        "BACK_TEST_ACTIVE",
-        "BACK_TEST_COMPLETE",
-        "DEACTIVATED",
-        "DEACTIVATING"
-      ]
-    },
-    "AnomalyDetectorSummary":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector.</p>"
-        },
-        "AnomalyDetectorName":{
-          "shape":"AnomalyDetectorName",
-          "documentation":"<p>The name of the detector.</p>"
-        },
-        "AnomalyDetectorDescription":{
-          "shape":"AnomalyDetectorDescription",
-          "documentation":"<p>A description of the detector.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the detector was created.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the detector was last modified.</p>"
-        },
-        "Status":{
-          "shape":"AnomalyDetectorStatus",
-          "documentation":"<p>The status of detector.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The detector's <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a>.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about an an anomaly detector.</p>"
-    },
-    "AnomalyDetectorSummaryList":{
-      "type":"list",
-      "member":{"shape":"AnomalyDetectorSummary"}
-    },
-    "AnomalyGroup":{
-      "type":"structure",
-      "members":{
-        "StartTime":{
-          "shape":"TimestampString",
-          "documentation":"<p>The start time for the group.</p>"
-        },
-        "EndTime":{
-          "shape":"TimestampString",
-          "documentation":"<p>The end time for the group.</p>"
-        },
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "AnomalyGroupScore":{
-          "shape":"Score",
-          "documentation":"<p>The severity score of the group.</p>"
-        },
-        "PrimaryMetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the primary affected measure for the group.</p>"
-        },
-        "MetricLevelImpactList":{
-          "shape":"MetricLevelImpactList",
-          "documentation":"<p>A list of measures affected by the anomaly.</p>"
-        }
-      },
-      "documentation":"<p>A group of anomalous metrics</p>"
-    },
-    "AnomalyGroupStatistics":{
-      "type":"structure",
-      "members":{
-        "EvaluationStartDate":{
-          "shape":"TimestampString",
-          "documentation":"<p>The start of the time range that was searched.</p>"
-        },
-        "TotalCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of groups found.</p>"
-        },
-        "ItemizedMetricStatsList":{
-          "shape":"ItemizedMetricStatsList",
-          "documentation":"<p>Statistics for individual metrics within the group.</p>"
-        }
-      },
-      "documentation":"<p>Aggregated statistics for a group of anomalous metrics.</p>"
-    },
-    "AnomalyGroupSummary":{
-      "type":"structure",
-      "members":{
-        "StartTime":{
-          "shape":"TimestampString",
-          "documentation":"<p>The start time for the group.</p>"
-        },
-        "EndTime":{
-          "shape":"TimestampString",
-          "documentation":"<p>The end time for the group.</p>"
-        },
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "AnomalyGroupScore":{
-          "shape":"Score",
-          "documentation":"<p>The severity score of the group.</p>"
-        },
-        "PrimaryMetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the primary affected measure for the group.</p>"
-        }
-      },
-      "documentation":"<p>Details about a group of anomalous metrics.</p>"
-    },
-    "AnomalyGroupSummaryList":{
-      "type":"list",
-      "member":{"shape":"AnomalyGroupSummary"}
-    },
-    "AnomalyGroupTimeSeries":{
-      "type":"structure",
-      "required":["AnomalyGroupId"],
-      "members":{
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "TimeSeriesId":{
-          "shape":"TimeSeriesId",
-          "documentation":"<p>The ID of the metric.</p>"
-        }
-      },
-      "documentation":"<p>An anomalous metric in an anomaly group.</p>"
-    },
-    "AnomalyGroupTimeSeriesFeedback":{
-      "type":"structure",
-      "required":[
-        "AnomalyGroupId",
-        "TimeSeriesId",
-        "IsAnomaly"
-      ],
-      "members":{
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "TimeSeriesId":{
-          "shape":"TimeSeriesId",
-          "documentation":"<p>The ID of the metric.</p>"
-        },
-        "IsAnomaly":{
-          "shape":"Boolean",
-          "documentation":"<p>Feedback on whether the metric is a legitimate anomaly.</p>"
-        }
-      },
-      "documentation":"<p>Feedback for an anomalous metric.</p>"
-    },
-    "AppFlowConfig":{
-      "type":"structure",
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>An IAM role that gives Amazon Lookout for Metrics permission to access the flow.</p>"
-        },
-        "FlowName":{
-          "shape":"FlowName",
-          "documentation":"<p> name of the flow.</p>"
-        }
-      },
-      "documentation":"<p>Details about an Amazon AppFlow flow datasource.</p>"
-    },
-    "Arn":{
-      "type":"string",
-      "max":256,
-      "pattern":"arn:([a-z\\d-]+):.*:.*:.*:.+"
-    },
-    "AthenaDataCatalog":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\t]*"
-    },
-    "AthenaDatabaseName":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_]+"
-    },
-    "AthenaS3ResultsPath":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^s3://[a-z0-9].+$"
-    },
-    "AthenaSourceConfig":{
-      "type":"structure",
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>An IAM role that gives Amazon Lookout for Metrics permission to access the data.</p>"
-        },
-        "DatabaseName":{
-          "shape":"AthenaDatabaseName",
-          "documentation":"<p>The database's name.</p>"
-        },
-        "DataCatalog":{
-          "shape":"AthenaDataCatalog",
-          "documentation":"<p>The database's data catalog.</p>"
-        },
-        "TableName":{
-          "shape":"AthenaTableName",
-          "documentation":"<p>The database's table name.</p>"
-        },
-        "WorkGroupName":{
-          "shape":"AthenaWorkGroupName",
-          "documentation":"<p>The database's work group name.</p>"
-        },
-        "S3ResultsPath":{
-          "shape":"AthenaS3ResultsPath",
-          "documentation":"<p>The database's results path.</p>"
-        },
-        "BackTestConfiguration":{
-          "shape":"BackTestConfiguration",
-          "documentation":"<p>Settings for backtest mode.</p>"
-        }
-      },
-      "documentation":"<p>Details about an Amazon Athena datasource.</p>"
-    },
-    "AthenaTableName":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_]+"
-    },
-    "AthenaWorkGroupName":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"[a-zA-Z0-9._-]{1,128}"
-    },
-    "AttributeValue":{
-      "type":"structure",
-      "members":{
-        "S":{
-          "shape":"StringAttributeValue",
-          "documentation":"<p>A string.</p>"
-        },
-        "N":{
-          "shape":"NumberAttributeValue",
-          "documentation":"<p>A number.</p>"
-        },
-        "B":{
-          "shape":"BinaryAttributeValue",
-          "documentation":"<p>A binary value.</p>"
-        },
-        "SS":{
-          "shape":"StringListAttributeValue",
-          "documentation":"<p>A list of strings.</p>"
-        },
-        "NS":{
-          "shape":"NumberListAttributeValue",
-          "documentation":"<p>A list of numbers.</p>"
-        },
-        "BS":{
-          "shape":"BinaryListAttributeValue",
-          "documentation":"<p>A list of binary values.</p>"
-        }
-      },
-      "documentation":"<p>An attribute value.</p>"
-    },
-    "AutoDetectionMetricSource":{
-      "type":"structure",
-      "members":{
-        "S3SourceConfig":{
-          "shape":"AutoDetectionS3SourceConfig",
-          "documentation":"<p>The source's source config.</p>"
-        }
-      },
-      "documentation":"<p>An auto detection metric source.</p>"
-    },
-    "AutoDetectionS3SourceConfig":{
-      "type":"structure",
-      "members":{
-        "TemplatedPathList":{
-          "shape":"TemplatedPathList",
-          "documentation":"<p>The config's templated path list.</p>"
-        },
-        "HistoricalDataPathList":{
-          "shape":"HistoricalDataPathList",
-          "documentation":"<p>The config's historical data path list.</p>"
-        }
-      },
-      "documentation":"<p>An auto detection source config.</p>"
-    },
-    "BackTestAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        }
-      }
-    },
-    "BackTestAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "BackTestConfiguration":{
-      "type":"structure",
-      "required":["RunBackTestMode"],
-      "members":{
-        "RunBackTestMode":{
-          "shape":"Boolean",
-          "documentation":"<p>Run a backtest instead of monitoring new data.</p>"
-        }
-      },
-      "documentation":"<p>Settings for backtest mode.</p>"
-    },
-    "BinaryAttributeValue":{"type":"string"},
-    "BinaryListAttributeValue":{
-      "type":"list",
-      "member":{"shape":"BinaryAttributeValue"}
-    },
-    "Boolean":{"type":"boolean"},
-    "CSVFileCompression":{
-      "type":"string",
-      "enum":[
-        "NONE",
-        "GZIP"
-      ]
-    },
-    "Charset":{
-      "type":"string",
-      "max":63,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "CloudWatchConfig":{
-      "type":"structure",
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>An IAM role that gives Amazon Lookout for Metrics permission to access data in Amazon CloudWatch.</p>"
-        },
-        "BackTestConfiguration":{
-          "shape":"BackTestConfiguration",
-          "documentation":"<p>Settings for backtest mode.</p>"
-        }
-      },
-      "documentation":"<p>Details about an Amazon CloudWatch datasource.</p>"
-    },
-    "ColumnName":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "Confidence":{
-      "type":"string",
-      "enum":[
-        "HIGH",
-        "LOW",
-        "NONE"
-      ]
-    },
-    "ConflictException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"},
-        "ResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        }
-      },
-      "documentation":"<p>There was a conflict processing the request. Try your request again.</p>",
-      "error":{"httpStatusCode":409},
-      "exception":true
-    },
-    "ContributionMatrix":{
-      "type":"structure",
-      "members":{
-        "DimensionContributionList":{
-          "shape":"DimensionContributionList",
-          "documentation":"<p>A list of contributing dimensions.</p>"
-        }
-      },
-      "documentation":"<p>Details about dimensions that contributed to an anomaly.</p>"
-    },
-    "CreateAlertRequest":{
-      "type":"structure",
-      "required":[
-        "AlertName",
-        "AnomalyDetectorArn",
-        "Action"
-      ],
-      "members":{
-        "AlertName":{
-          "shape":"AlertName",
-          "documentation":"<p>The name of the alert.</p>"
-        },
-        "AlertSensitivityThreshold":{
-          "shape":"SensitivityThreshold",
-          "documentation":"<p>An integer from 0 to 100 specifying the alert sensitivity threshold.</p>"
-        },
-        "AlertDescription":{
-          "shape":"AlertDescription",
-          "documentation":"<p>A description of the alert.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to which the alert is attached.</p>"
-        },
-        "Action":{
-          "shape":"Action",
-          "documentation":"<p>Action that will be triggered when there is an alert.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> to apply to the alert.</p>"
-        },
-        "AlertFilters":{
-          "shape":"AlertFilters",
-          "documentation":"<p>The configuration of the alert filters, containing MetricList and DimensionFilterList.</p>"
-        }
-      }
-    },
-    "CreateAlertResponse":{
-      "type":"structure",
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert.</p>"
-        }
-      }
-    },
-    "CreateAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorName",
-        "AnomalyDetectorConfig"
-      ],
-      "members":{
-        "AnomalyDetectorName":{
-          "shape":"AnomalyDetectorName",
-          "documentation":"<p>The name of the detector.</p>"
-        },
-        "AnomalyDetectorDescription":{
-          "shape":"AnomalyDetectorDescription",
-          "documentation":"<p>A description of the detector.</p>"
-        },
-        "AnomalyDetectorConfig":{
-          "shape":"AnomalyDetectorConfig",
-          "documentation":"<p>Contains information about the configuration of the anomaly detector.</p>"
-        },
-        "KmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The ARN of the KMS key to use to encrypt your data.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> to apply to the anomaly detector.</p>"
-        }
-      }
-    },
-    "CreateAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector.</p>"
-        }
-      }
-    },
-    "CreateMetricSetRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "MetricSetName",
-        "MetricList",
-        "MetricSource"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the anomaly detector that will use the dataset.</p>"
-        },
-        "MetricSetName":{
-          "shape":"MetricSetName",
-          "documentation":"<p>The name of the dataset.</p>"
-        },
-        "MetricSetDescription":{
-          "shape":"MetricSetDescription",
-          "documentation":"<p>A description of the dataset you are creating.</p>"
-        },
-        "MetricList":{
-          "shape":"MetricList",
-          "documentation":"<p>A list of metrics that the dataset will contain.</p>"
-        },
-        "Offset":{
-          "shape":"Offset",
-          "documentation":"<p>After an interval ends, the amount of seconds that the detector waits before importing data. Offset is only supported for S3, Redshift, Athena and datasources.</p>",
-          "box":true
-        },
-        "TimestampColumn":{
-          "shape":"TimestampColumn",
-          "documentation":"<p>Contains information about the column used for tracking time in your source data.</p>"
-        },
-        "DimensionList":{
-          "shape":"DimensionList",
-          "documentation":"<p>A list of the fields you want to treat as dimensions.</p>"
-        },
-        "MetricSetFrequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The frequency with which the source data will be analyzed for anomalies.</p>"
-        },
-        "MetricSource":{
-          "shape":"MetricSource",
-          "documentation":"<p>Contains information about how the source data should be interpreted.</p>"
-        },
-        "Timezone":{
-          "shape":"Timezone",
-          "documentation":"<p>The time zone in which your source data was recorded.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A list of <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a> to apply to the dataset.</p>"
-        },
-        "DimensionFilterList":{
-          "shape":"MetricSetDimensionFilterList",
-          "documentation":"<p>A list of filters that specify which data is kept for anomaly detection.</p>"
-        }
-      }
-    },
-    "CreateMetricSetResponse":{
-      "type":"structure",
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset.</p>"
-        }
-      }
-    },
-    "CsvFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "FileCompression":{
-          "shape":"CSVFileCompression",
-          "documentation":"<p>The level of compression of the source CSV file.</p>"
-        },
-        "Charset":{
-          "shape":"Charset",
-          "documentation":"<p>The character set in which the source CSV file is written.</p>"
-        },
-        "ContainsHeader":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether or not the source CSV file contains a header.</p>"
-        },
-        "Delimiter":{
-          "shape":"Delimiter",
-          "documentation":"<p>The character used to delimit the source CSV file.</p>"
-        },
-        "HeaderList":{
-          "shape":"HeaderList",
-          "documentation":"<p>A list of the source CSV file's headers, if any.</p>"
-        },
-        "QuoteSymbol":{
-          "shape":"QuoteSymbol",
-          "documentation":"<p>The character used as a quote character.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about how a source CSV data file should be analyzed.</p>"
-    },
-    "DataItem":{"type":"string"},
-    "DataQualityMetric":{
-      "type":"structure",
-      "members":{
-        "MetricType":{
-          "shape":"DataQualityMetricType",
-          "documentation":"<p>The name of the data quality metric.</p>"
-        },
-        "MetricDescription":{
-          "shape":"DataQualityMetricDescription",
-          "documentation":"<p>A description of the data quality metric.</p>"
-        },
-        "RelatedColumnName":{
-          "shape":"RelatedColumnName",
-          "documentation":"<p>The column that is being monitored.</p>"
-        },
-        "MetricValue":{
-          "shape":"Double",
-          "documentation":"<p>The value of the data quality metric.</p>"
-        }
-      },
-      "documentation":"<p>An array that describes a data quality metric. Each <code>DataQualityMetric</code> object contains the data quality metric name, its value, a description of the metric, and the affected column.</p>"
-    },
-    "DataQualityMetricDescription":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "DataQualityMetricList":{
-      "type":"list",
-      "member":{"shape":"DataQualityMetric"}
-    },
-    "DataQualityMetricType":{
-      "type":"string",
-      "enum":[
-        "COLUMN_COMPLETENESS",
-        "DIMENSION_UNIQUENESS",
-        "TIME_SERIES_COUNT",
-        "ROWS_PROCESSED",
-        "ROWS_PARTIAL_COMPLIANCE",
-        "INVALID_ROWS_COMPLIANCE",
-        "BACKTEST_TRAINING_DATA_START_TIME_STAMP",
-        "BACKTEST_TRAINING_DATA_END_TIME_STAMP",
-        "BACKTEST_INFERENCE_DATA_START_TIME_STAMP",
-        "BACKTEST_INFERENCE_DATA_END_TIME_STAMP"
-      ]
-    },
-    "DatabaseHost":{
-      "type":"string",
-      "max":253,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "DatabasePort":{
-      "type":"integer",
-      "max":65535,
-      "min":1
-    },
-    "DateTimeFormat":{
-      "type":"string",
-      "max":63,
-      "pattern":".*\\S.*"
-    },
-    "DeactivateAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        }
-      }
-    },
-    "DeactivateAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAlertRequest":{
-      "type":"structure",
-      "required":["AlertArn"],
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert to delete.</p>"
-        }
-      }
-    },
-    "DeleteAlertResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to delete.</p>"
-        }
-      }
-    },
-    "DeleteAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Delimiter":{
-      "type":"string",
-      "max":1,
-      "pattern":"[^\\r\\n]"
-    },
-    "DescribeAlertRequest":{
-      "type":"structure",
-      "required":["AlertArn"],
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert to describe.</p>"
-        }
-      }
-    },
-    "DescribeAlertResponse":{
-      "type":"structure",
-      "members":{
-        "Alert":{
-          "shape":"Alert",
-          "documentation":"<p>Contains information about an alert.</p>"
-        }
-      }
-    },
-    "DescribeAnomalyDetectionExecutionsRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "Timestamp":{
-          "shape":"TimestampString",
-          "documentation":"<p>The timestamp of the anomaly detection job.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The number of items to return in the response.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Specify the pagination token that's returned by a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "DescribeAnomalyDetectionExecutionsResponse":{
-      "type":"structure",
-      "members":{
-        "ExecutionList":{
-          "shape":"ExecutionList",
-          "documentation":"<p>A list of detection jobs.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token that's included if more results are available.</p>"
-        }
-      }
-    },
-    "DescribeAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to describe.</p>"
-        }
-      }
-    },
-    "DescribeAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector.</p>"
-        },
-        "AnomalyDetectorName":{
-          "shape":"AnomalyDetectorName",
-          "documentation":"<p>The name of the detector.</p>"
-        },
-        "AnomalyDetectorDescription":{
-          "shape":"AnomalyDetectorDescription",
-          "documentation":"<p>A description of the detector.</p>"
-        },
-        "AnomalyDetectorConfig":{
-          "shape":"AnomalyDetectorConfigSummary",
-          "documentation":"<p>Contains information about the detector's configuration.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the detector was created.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the detector was last modified.</p>"
-        },
-        "Status":{
-          "shape":"AnomalyDetectorStatus",
-          "documentation":"<p>The status of the detector.</p>"
-        },
-        "FailureReason":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>The reason that the detector failed.</p>"
-        },
-        "KmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The ARN of the KMS key to use to encrypt your data.</p>"
-        },
-        "FailureType":{
-          "shape":"AnomalyDetectorFailureType",
-          "documentation":"<p>The process that caused the detector to fail.</p>"
-        }
-      }
-    },
-    "DescribeMetricSetRequest":{
-      "type":"structure",
-      "required":["MetricSetArn"],
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset.</p>"
-        }
-      }
-    },
-    "DescribeMetricSetResponse":{
-      "type":"structure",
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector that contains the dataset.</p>"
-        },
-        "MetricSetName":{
-          "shape":"MetricSetName",
-          "documentation":"<p>The name of the dataset.</p>"
-        },
-        "MetricSetDescription":{
-          "shape":"MetricSetDescription",
-          "documentation":"<p>The dataset's description.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the dataset was created.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the dataset was last modified.</p>"
-        },
-        "Offset":{
-          "shape":"Offset",
-          "documentation":"<p>After an interval ends, the amount of seconds that the detector waits before importing data. Offset is only supported for S3, Redshift, Athena and datasources.</p>",
-          "box":true
-        },
-        "MetricList":{
-          "shape":"MetricList",
-          "documentation":"<p>A list of the metrics defined by the dataset.</p>"
-        },
-        "TimestampColumn":{
-          "shape":"TimestampColumn",
-          "documentation":"<p>Contains information about the column used for tracking time in your source data.</p>"
-        },
-        "DimensionList":{
-          "shape":"DimensionList",
-          "documentation":"<p>A list of the dimensions chosen for analysis.</p>"
-        },
-        "MetricSetFrequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The interval at which the data will be analyzed for anomalies.</p>"
-        },
-        "Timezone":{
-          "shape":"Timezone",
-          "documentation":"<p>The time zone in which the dataset's data was recorded.</p>"
-        },
-        "MetricSource":{
-          "shape":"MetricSource",
-          "documentation":"<p>Contains information about the dataset's source data.</p>"
-        },
-        "DimensionFilterList":{
-          "shape":"MetricSetDimensionFilterList",
-          "documentation":"<p>The dimensions and their values that were used to filter the dataset.</p>"
-        }
-      }
-    },
-    "DetectMetricSetConfigRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "AutoDetectionMetricSource"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>An anomaly detector ARN.</p>"
-        },
-        "AutoDetectionMetricSource":{
-          "shape":"AutoDetectionMetricSource",
-          "documentation":"<p>A data source.</p>"
-        }
-      }
-    },
-    "DetectMetricSetConfigResponse":{
-      "type":"structure",
-      "members":{
-        "DetectedMetricSetConfig":{
-          "shape":"DetectedMetricSetConfig",
-          "documentation":"<p>The inferred dataset configuration for the datasource.</p>"
-        }
-      }
-    },
-    "DetectedCsvFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "FileCompression":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's file compression.</p>"
-        },
-        "Charset":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's charset.</p>"
-        },
-        "ContainsHeader":{
-          "shape":"DetectedField",
-          "documentation":"<p>Whether the format includes a header.</p>"
-        },
-        "Delimiter":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's delimiter.</p>"
-        },
-        "HeaderList":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's header list.</p>"
-        },
-        "QuoteSymbol":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's quote symbol.</p>"
-        }
-      },
-      "documentation":"<p>Properties of an inferred CSV format.</p>"
-    },
-    "DetectedField":{
-      "type":"structure",
-      "members":{
-        "Value":{
-          "shape":"AttributeValue",
-          "documentation":"<p>The field's value.</p>"
-        },
-        "Confidence":{
-          "shape":"Confidence",
-          "documentation":"<p>The field's confidence.</p>"
-        },
-        "Message":{
-          "shape":"Message",
-          "documentation":"<p>The field's message.</p>"
-        }
-      },
-      "documentation":"<p>An inferred field.</p>"
-    },
-    "DetectedFileFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "CsvFormatDescriptor":{
-          "shape":"DetectedCsvFormatDescriptor",
-          "documentation":"<p>Details about a CSV format.</p>"
-        },
-        "JsonFormatDescriptor":{
-          "shape":"DetectedJsonFormatDescriptor",
-          "documentation":"<p>Details about a JSON format.</p>"
-        }
-      },
-      "documentation":"<p>Properties of an inferred data format.</p>"
-    },
-    "DetectedJsonFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "FileCompression":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's file compression.</p>"
-        },
-        "Charset":{
-          "shape":"DetectedField",
-          "documentation":"<p>The format's character set.</p>"
-        }
-      },
-      "documentation":"<p>A detected JSON format descriptor.</p>"
-    },
-    "DetectedMetricSetConfig":{
-      "type":"structure",
-      "members":{
-        "Offset":{
-          "shape":"DetectedField",
-          "documentation":"<p>The dataset's offset.</p>"
-        },
-        "MetricSetFrequency":{
-          "shape":"DetectedField",
-          "documentation":"<p>The dataset's interval.</p>"
-        },
-        "MetricSource":{
-          "shape":"DetectedMetricSource",
-          "documentation":"<p>The dataset's data source.</p>"
-        }
-      },
-      "documentation":"<p>An inferred dataset configuration.</p>"
-    },
-    "DetectedMetricSource":{
-      "type":"structure",
-      "members":{
-        "S3SourceConfig":{
-          "shape":"DetectedS3SourceConfig",
-          "documentation":"<p>The data source's source configuration.</p>"
-        }
-      },
-      "documentation":"<p>An inferred data source.</p>"
-    },
-    "DetectedS3SourceConfig":{
-      "type":"structure",
-      "members":{
-        "FileFormatDescriptor":{
-          "shape":"DetectedFileFormatDescriptor",
-          "documentation":"<p>The source's file format descriptor.</p>"
-        }
-      },
-      "documentation":"<p>An inferred source configuration.</p>"
-    },
-    "DimensionContribution":{
-      "type":"structure",
-      "members":{
-        "DimensionName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the dimension.</p>"
-        },
-        "DimensionValueContributionList":{
-          "shape":"DimensionValueContributionList",
-          "documentation":"<p>A list of dimension values that contributed to the anomaly.</p>"
-        }
-      },
-      "documentation":"<p>Details about a dimension that contributed to an anomaly.</p>"
-    },
-    "DimensionContributionList":{
-      "type":"list",
-      "member":{"shape":"DimensionContribution"}
-    },
-    "DimensionFilter":{
-      "type":"structure",
-      "members":{
-        "DimensionName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the dimension to filter on.</p>"
-        },
-        "DimensionValueList":{
-          "shape":"DimensionValueList",
-          "documentation":"<p>The list of values for the dimension specified in DimensionName that you want to filter on.</p>"
-        }
-      },
-      "documentation":"<p>The dimension filter, containing DimensionName and DimensionValueList.</p>"
-    },
-    "DimensionFilterList":{
-      "type":"list",
-      "member":{"shape":"DimensionFilter"},
-      "max":5,
-      "min":1
-    },
-    "DimensionList":{
-      "type":"list",
-      "member":{"shape":"ColumnName"},
-      "min":1
-    },
-    "DimensionNameValue":{
-      "type":"structure",
-      "required":[
-        "DimensionName",
-        "DimensionValue"
-      ],
-      "members":{
-        "DimensionName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the dimension.</p>"
-        },
-        "DimensionValue":{
-          "shape":"DimensionValue",
-          "documentation":"<p>The value of the dimension.</p>"
-        }
-      },
-      "documentation":"<p>A dimension name and value.</p>"
-    },
-    "DimensionNameValueList":{
-      "type":"list",
-      "member":{"shape":"DimensionNameValue"}
-    },
-    "DimensionValue":{"type":"string"},
-    "DimensionValueContribution":{
-      "type":"structure",
-      "members":{
-        "DimensionValue":{
-          "shape":"DimensionValue",
-          "documentation":"<p>The value of the dimension.</p>"
-        },
-        "ContributionScore":{
-          "shape":"Score",
-          "documentation":"<p>The severity score of the value.</p>"
-        }
-      },
-      "documentation":"<p>The severity of a value of a dimension that contributed to an anomaly.</p>"
-    },
-    "DimensionValueContributionList":{
-      "type":"list",
-      "member":{"shape":"DimensionValueContribution"}
-    },
-    "DimensionValueList":{
-      "type":"list",
-      "member":{"shape":"DimensionValue"},
-      "max":10,
-      "min":1
-    },
-    "Double":{"type":"double"},
-    "ErrorMessage":{
-      "type":"string",
-      "max":256
-    },
-    "ExecutionList":{
-      "type":"list",
-      "member":{"shape":"ExecutionStatus"}
-    },
-    "ExecutionStatus":{
-      "type":"structure",
-      "members":{
-        "Timestamp":{
-          "shape":"TimestampString",
-          "documentation":"<p>The run's timestamp.</p>"
-        },
-        "Status":{
-          "shape":"AnomalyDetectionTaskStatus",
-          "documentation":"<p>The run's status.</p>"
-        },
-        "FailureReason":{
-          "shape":"AnomalyDetectionTaskStatusMessage",
-          "documentation":"<p>The reason that the run failed, if applicable.</p>"
-        }
-      },
-      "documentation":"<p>The status of an anomaly detector run.</p>"
-    },
-    "FieldName":{"type":"string"},
-    "FileFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "CsvFormatDescriptor":{
-          "shape":"CsvFormatDescriptor",
-          "documentation":"<p>Contains information about how a source CSV data file should be analyzed.</p>"
-        },
-        "JsonFormatDescriptor":{
-          "shape":"JsonFormatDescriptor",
-          "documentation":"<p>Contains information about how a source JSON data file should be analyzed.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a source file's formatting.</p>"
-    },
-    "Filter":{
-      "type":"structure",
-      "members":{
-        "DimensionValue":{
-          "shape":"DimensionValue",
-          "documentation":"<p>The value that you want to include in the filter.</p>"
-        },
-        "FilterOperation":{
-          "shape":"FilterOperation",
-          "documentation":"<p>The condition to apply.</p>"
-        }
-      },
-      "documentation":"<p>Describes a filter for choosing a subset of dimension values. Each filter consists of the dimension that you want to include and the condition statement. The condition statement is specified in the <code>FilterOperation</code> object.</p>"
-    },
-    "FilterList":{
-      "type":"list",
-      "member":{"shape":"Filter"},
-      "min":1
-    },
-    "FilterOperation":{
-      "type":"string",
-      "enum":["EQUALS"]
-    },
-    "FlowName":{
-      "type":"string",
-      "max":256,
-      "pattern":"[a-zA-Z0-9][\\w!@#.-]+"
-    },
-    "Frequency":{
-      "type":"string",
-      "enum":[
-        "P1D",
-        "PT1H",
-        "PT10M",
-        "PT5M"
-      ]
-    },
-    "GetAnomalyGroupRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyGroupId",
-        "AnomalyDetectorArn"
-      ],
-      "members":{
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        }
-      }
-    },
-    "GetAnomalyGroupResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyGroup":{
-          "shape":"AnomalyGroup",
-          "documentation":"<p>Details about the anomaly group.</p>"
-        }
-      }
-    },
-    "GetDataQualityMetricsRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector that you want to investigate.</p>"
-        },
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a specific data quality metric set.</p>"
-        }
-      }
-    },
-    "GetDataQualityMetricsResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorDataQualityMetricList":{
-          "shape":"AnomalyDetectorDataQualityMetricList",
-          "documentation":"<p>A list of the data quality metrics for the <code>AnomalyDetectorArn</code> that you requested.</p>"
-        }
-      }
-    },
-    "GetFeedbackRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "AnomalyGroupTimeSeriesFeedback"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "AnomalyGroupTimeSeriesFeedback":{
-          "shape":"AnomalyGroupTimeSeries",
-          "documentation":"<p>The anomalous metric and group ID.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Specify the pagination token that's returned by a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "GetFeedbackResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyGroupTimeSeriesFeedback":{
-          "shape":"TimeSeriesFeedbackList",
-          "documentation":"<p>Feedback for an anomalous metric.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token that's included if more results are available.</p>"
-        }
-      }
-    },
-    "GetSampleDataRequest":{
-      "type":"structure",
-      "members":{
-        "S3SourceConfig":{
-          "shape":"SampleDataS3SourceConfig",
-          "documentation":"<p>A datasource bucket in Amazon S3.</p>"
-        }
-      }
-    },
-    "GetSampleDataResponse":{
-      "type":"structure",
-      "members":{
-        "HeaderValues":{
-          "shape":"HeaderValueList",
-          "documentation":"<p>A list of header labels for the records.</p>"
-        },
-        "SampleRows":{
-          "shape":"SampleRows",
-          "documentation":"<p>A list of records.</p>"
-        }
-      }
-    },
-    "HeaderList":{
-      "type":"list",
-      "member":{"shape":"ColumnName"}
-    },
-    "HeaderValue":{"type":"string"},
-    "HeaderValueList":{
-      "type":"list",
-      "member":{"shape":"HeaderValue"}
-    },
-    "HistoricalDataPath":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^s3://[a-z0-9].+$"
-    },
-    "HistoricalDataPathList":{
-      "type":"list",
-      "member":{"shape":"HistoricalDataPath"},
-      "max":1,
-      "min":1
-    },
-    "Integer":{"type":"integer"},
-    "InterMetricImpactDetails":{
-      "type":"structure",
-      "members":{
-        "MetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the measure.</p>"
-        },
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "RelationshipType":{
-          "shape":"RelationshipType",
-          "documentation":"<p>Whether a measure is a potential cause of the anomaly group (<code>CAUSE_OF_INPUT_ANOMALY_GROUP</code>), or whether the measure is impacted by the anomaly group (<code>EFFECT_OF_INPUT_ANOMALY_GROUP</code>).</p>"
-        },
-        "ContributionPercentage":{
-          "shape":"MetricChangePercentage",
-          "documentation":"<p>For potential causes (<code>CAUSE_OF_INPUT_ANOMALY_GROUP</code>), the percentage contribution the measure has in causing the anomalies.</p>"
-        }
-      },
-      "documentation":"<p>Aggregated details about the measures contributing to the anomaly group, and the measures potentially impacted by the anomaly group.</p> <p/>"
-    },
-    "InterMetricImpactList":{
-      "type":"list",
-      "member":{"shape":"InterMetricImpactDetails"}
-    },
-    "InternalServerException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"}
-      },
-      "documentation":"<p>The request processing has failed because of an unknown error, exception, or failure.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true,
-      "fault":true
-    },
-    "ItemizedMetricStats":{
-      "type":"structure",
-      "members":{
-        "MetricName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the measure.</p>"
-        },
-        "OccurrenceCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of times that the measure appears.</p>"
-        }
-      },
-      "documentation":"<p>Aggregated statistics about a measure affected by an anomaly.</p>"
-    },
-    "ItemizedMetricStatsList":{
-      "type":"list",
-      "member":{"shape":"ItemizedMetricStats"}
-    },
-    "JsonFileCompression":{
-      "type":"string",
-      "enum":[
-        "NONE",
-        "GZIP"
-      ]
-    },
-    "JsonFormatDescriptor":{
-      "type":"structure",
-      "members":{
-        "FileCompression":{
-          "shape":"JsonFileCompression",
-          "documentation":"<p>The level of compression of the source CSV file.</p>"
-        },
-        "Charset":{
-          "shape":"Charset",
-          "documentation":"<p>The character set in which the source JSON file is written.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about how a source JSON data file should be analyzed.</p>"
-    },
-    "KmsKeyArn":{
-      "type":"string",
-      "max":2048,
-      "min":20,
-      "pattern":"arn:aws.*:kms:.*:[0-9]{12}:key/[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}"
-    },
-    "LambdaConfiguration":{
-      "type":"structure",
-      "required":[
-        "RoleArn",
-        "LambdaArn"
-      ],
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of an IAM role that has permission to invoke the Lambda function.</p>"
-        },
-        "LambdaArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the Lambda function.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a Lambda configuration.</p>"
-    },
-    "ListAlertsRequest":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert's detector.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the result of the previous request is truncated, the response includes a <code>NextToken</code>. To retrieve the next set of results, use the token in the next request. Tokens expire after 24 hours.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results that will be displayed by the request.</p>",
-          "box":true
-        }
-      }
-    },
-    "ListAlertsResponse":{
-      "type":"structure",
-      "members":{
-        "AlertSummaryList":{
-          "shape":"AlertSummaryList",
-          "documentation":"<p>Contains information about an alert.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the response is truncated, the service returns this token. To retrieve the next set of results, use this token in the next request.</p>"
-        }
-      }
-    },
-    "ListAnomalyDetectorsRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the result of the previous request was truncated, the response includes a <code>NextToken</code>. To retrieve the next set of results, use the token in the next request. Tokens expire after 24 hours.</p>"
-        }
-      }
-    },
-    "ListAnomalyDetectorsResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorSummaryList":{
-          "shape":"AnomalyDetectorSummaryList",
-          "documentation":"<p>A list of anomaly detectors in the account in the current region.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the response is truncated, the service returns this token. To retrieve the next set of results, use the token in the next request.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupRelatedMetricsRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "AnomalyGroupId"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "RelationshipTypeFilter":{
-          "shape":"RelationshipType",
-          "documentation":"<p>Filter for potential causes (<code>CAUSE_OF_INPUT_ANOMALY_GROUP</code>) or downstream effects (<code>EFFECT_OF_INPUT_ANOMALY_GROUP</code>) of the anomaly group.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Specify the pagination token that's returned by a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupRelatedMetricsResponse":{
-      "type":"structure",
-      "members":{
-        "InterMetricImpactList":{
-          "shape":"InterMetricImpactList",
-          "documentation":"<p>Aggregated details about the measures contributing to the anomaly group, and the measures potentially impacted by the anomaly group.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token that's included if more results are available.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupSummariesRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "SensitivityThreshold"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "SensitivityThreshold":{
-          "shape":"SensitivityThreshold",
-          "documentation":"<p>The minimum severity score for inclusion in the output.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Specify the pagination token that's returned by a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupSummariesResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyGroupSummaryList":{
-          "shape":"AnomalyGroupSummaryList",
-          "documentation":"<p>A list of anomaly group summaries.</p>"
-        },
-        "AnomalyGroupStatistics":{
-          "shape":"AnomalyGroupStatistics",
-          "documentation":"<p>Aggregated details about the anomaly groups.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token that's included if more results are available.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupTimeSeriesRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "AnomalyGroupId",
-        "MetricName"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "MetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the measure field.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Specify the pagination token that's returned by a previous request to retrieve the next page of results.</p>"
-        }
-      }
-    },
-    "ListAnomalyGroupTimeSeriesResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyGroupId":{
-          "shape":"UUID",
-          "documentation":"<p>The ID of the anomaly group.</p>"
-        },
-        "MetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the measure field.</p>"
-        },
-        "TimestampList":{
-          "shape":"TimestampList",
-          "documentation":"<p>Timestamps for the anomalous metrics.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The pagination token that's included if more results are available.</p>"
-        },
-        "TimeSeriesList":{
-          "shape":"TimeSeriesList",
-          "documentation":"<p>A list of anomalous metrics.</p>"
-        }
-      }
-    },
-    "ListMetricSetsRequest":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the anomaly detector containing the metrics sets to list.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the result of the previous request was truncated, the response includes a <code>NextToken</code>. To retrieve the next set of results, use the token in the next request. Tokens expire after 24 hours.</p>"
-        }
-      }
-    },
-    "ListMetricSetsResponse":{
-      "type":"structure",
-      "members":{
-        "MetricSetSummaryList":{
-          "shape":"MetricSetSummaryList",
-          "documentation":"<p>A list of the datasets in the AWS Region, with configuration details for each.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If the response is truncated, the list call returns this token. To retrieve the next set of results, use the token in the next list request. </p>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["ResourceArn"],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The resource's Amazon Resource Name (ARN).</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The resource's tags.</p>",
-          "locationName":"Tags"
-        }
-      }
-    },
-    "MaxResults":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "Message":{"type":"string"},
-    "Metric":{
-      "type":"structure",
-      "required":[
-        "MetricName",
-        "AggregationFunction"
-      ],
-      "members":{
-        "MetricName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the metric.</p>"
-        },
-        "AggregationFunction":{
-          "shape":"AggregationFunction",
-          "documentation":"<p>The function with which the metric is calculated.</p>"
-        },
-        "Namespace":{
-          "shape":"Namespace",
-          "documentation":"<p>The namespace for the metric.</p>"
-        }
-      },
-      "documentation":"<p>A calculation made by contrasting a measure and a dimension from your source data.</p>"
-    },
-    "MetricChangePercentage":{
-      "type":"double",
-      "max":100.0,
-      "min":0.0
-    },
-    "MetricLevelImpact":{
-      "type":"structure",
-      "members":{
-        "MetricName":{
-          "shape":"MetricName",
-          "documentation":"<p>The name of the measure.</p>"
-        },
-        "NumTimeSeries":{
-          "shape":"Integer",
-          "documentation":"<p>The number of anomalous metrics for the measure.</p>"
-        },
-        "ContributionMatrix":{
-          "shape":"ContributionMatrix",
-          "documentation":"<p>Details about the dimensions that contributed to the anomaly.</p>"
-        }
-      },
-      "documentation":"<p>Details about a measure affected by an anomaly.</p>"
-    },
-    "MetricLevelImpactList":{
-      "type":"list",
-      "member":{"shape":"MetricLevelImpact"}
-    },
-    "MetricList":{
-      "type":"list",
-      "member":{"shape":"Metric"},
-      "min":1
-    },
-    "MetricName":{
-      "type":"string",
-      "max":256,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "MetricNameList":{
-      "type":"list",
-      "member":{"shape":"MetricName"},
-      "max":5,
-      "min":1
-    },
-    "MetricSetDataQualityMetric":{
-      "type":"structure",
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the data quality metric array.</p>"
-        },
-        "DataQualityMetricList":{
-          "shape":"DataQualityMetricList",
-          "documentation":"<p>The array of data quality metrics contained in the data quality metric set.</p>"
-        }
-      },
-      "documentation":"<p>An array of <code>DataQualityMetric</code> objects that describes one or more data quality metrics.</p>"
-    },
-    "MetricSetDataQualityMetricList":{
-      "type":"list",
-      "member":{"shape":"MetricSetDataQualityMetric"}
-    },
-    "MetricSetDescription":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "MetricSetDimensionFilter":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"ColumnName",
-          "documentation":"<p>The dimension that you want to filter on.</p>"
-        },
-        "FilterList":{
-          "shape":"FilterList",
-          "documentation":"<p>The list of filters that you are applying.</p>"
-        }
-      },
-      "documentation":"<p>Describes a list of filters for choosing a subset of dimension values. Each filter consists of the dimension and one of its values that you want to include. When multiple dimensions or values are specified, the dimensions are joined with an AND operation and the values are joined with an OR operation. </p>"
-    },
-    "MetricSetDimensionFilterList":{
-      "type":"list",
-      "member":{"shape":"MetricSetDimensionFilter"}
-    },
-    "MetricSetName":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9\\-_]*"
-    },
-    "MetricSetSummary":{
-      "type":"structure",
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset.</p>"
-        },
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to which the dataset belongs.</p>"
-        },
-        "MetricSetDescription":{
-          "shape":"MetricSetDescription",
-          "documentation":"<p>The description of the dataset.</p>"
-        },
-        "MetricSetName":{
-          "shape":"MetricSetName",
-          "documentation":"<p>The name of the dataset.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the dataset was created.</p>"
-        },
-        "LastModificationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time at which the dataset was last modified.</p>"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The dataset's <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev/detectors-tags.html\">tags</a>.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a dataset.</p>"
-    },
-    "MetricSetSummaryList":{
-      "type":"list",
-      "member":{"shape":"MetricSetSummary"}
-    },
-    "MetricSource":{
-      "type":"structure",
-      "members":{
-        "S3SourceConfig":{"shape":"S3SourceConfig"},
-        "AppFlowConfig":{
-          "shape":"AppFlowConfig",
-          "documentation":"<p>Details about an AppFlow datasource.</p>"
-        },
-        "CloudWatchConfig":{
-          "shape":"CloudWatchConfig",
-          "documentation":"<p>Details about an Amazon CloudWatch monitoring datasource.</p>"
-        },
-        "RDSSourceConfig":{
-          "shape":"RDSSourceConfig",
-          "documentation":"<p>Details about an Amazon Relational Database Service (RDS) datasource.</p>"
-        },
-        "RedshiftSourceConfig":{
-          "shape":"RedshiftSourceConfig",
-          "documentation":"<p>Details about an Amazon Redshift database datasource.</p>"
-        },
-        "AthenaSourceConfig":{
-          "shape":"AthenaSourceConfig",
-          "documentation":"<p>Details about an Amazon Athena datasource.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about source data used to generate metrics.</p>"
-    },
-    "MetricValue":{"type":"double"},
-    "MetricValueList":{
-      "type":"list",
-      "member":{"shape":"MetricValue"}
-    },
-    "Namespace":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[^:].*"
-    },
-    "NextToken":{
-      "type":"string",
-      "max":3000,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "NumberAttributeValue":{"type":"string"},
-    "NumberListAttributeValue":{
-      "type":"list",
-      "member":{"shape":"NumberAttributeValue"}
-    },
-    "Offset":{
-      "type":"integer",
-      "max":432000,
-      "min":0
-    },
-    "PoirotSecretManagerArn":{
-      "type":"string",
-      "max":256,
-      "pattern":"arn:([a-z\\d-]+):.*:.*:secret:AmazonLookoutMetrics-.+"
-    },
-    "PutFeedbackRequest":{
-      "type":"structure",
-      "required":[
-        "AnomalyDetectorArn",
-        "AnomalyGroupTimeSeriesFeedback"
-      ],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the anomaly detector.</p>"
-        },
-        "AnomalyGroupTimeSeriesFeedback":{
-          "shape":"AnomalyGroupTimeSeriesFeedback",
-          "documentation":"<p>Feedback for an anomalous metric.</p>"
-        }
-      }
-    },
-    "PutFeedbackResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "QuotaCode":{"type":"string"},
-    "QuoteSymbol":{
-      "type":"string",
-      "max":1,
-      "pattern":"[^\\r\\n]|^$"
-    },
-    "RDSDatabaseIdentifier":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-zA-Z](?!.*--)(?!.*-$)[0-9a-zA-Z\\-]*$"
-    },
-    "RDSDatabaseName":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_.]+"
-    },
-    "RDSSourceConfig":{
-      "type":"structure",
-      "members":{
-        "DBInstanceIdentifier":{
-          "shape":"RDSDatabaseIdentifier",
-          "documentation":"<p>A string identifying the database instance.</p>"
-        },
-        "DatabaseHost":{
-          "shape":"DatabaseHost",
-          "documentation":"<p>The host name of the database.</p>"
-        },
-        "DatabasePort":{
-          "shape":"DatabasePort",
-          "documentation":"<p>The port number where the database can be accessed.</p>",
-          "box":true
-        },
-        "SecretManagerArn":{
-          "shape":"PoirotSecretManagerArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS Secrets Manager role.</p>"
-        },
-        "DatabaseName":{
-          "shape":"RDSDatabaseName",
-          "documentation":"<p>The name of the RDS database.</p>"
-        },
-        "TableName":{
-          "shape":"TableName",
-          "documentation":"<p>The name of the table in the database.</p>"
-        },
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the role.</p>"
-        },
-        "VpcConfiguration":{
-          "shape":"VpcConfiguration",
-          "documentation":"<p>An object containing information about the Amazon Virtual Private Cloud (VPC) configuration.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about the Amazon Relational Database Service (RDS) configuration.</p>"
-    },
-    "RedshiftClusterIdentifier":{
-      "type":"string",
-      "max":63,
-      "min":1,
-      "pattern":"^[a-z](?!.*--)(?!.*-$)[0-9a-z\\-]*$"
-    },
-    "RedshiftDatabaseName":{
-      "type":"string",
-      "max":100,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_.]+"
-    },
-    "RedshiftSourceConfig":{
-      "type":"structure",
-      "members":{
-        "ClusterIdentifier":{
-          "shape":"RedshiftClusterIdentifier",
-          "documentation":"<p>A string identifying the Redshift cluster.</p>"
-        },
-        "DatabaseHost":{
-          "shape":"DatabaseHost",
-          "documentation":"<p>The name of the database host.</p>"
-        },
-        "DatabasePort":{
-          "shape":"DatabasePort",
-          "documentation":"<p>The port number where the database can be accessed.</p>",
-          "box":true
-        },
-        "SecretManagerArn":{
-          "shape":"PoirotSecretManagerArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS Secrets Manager role.</p>"
-        },
-        "DatabaseName":{
-          "shape":"RedshiftDatabaseName",
-          "documentation":"<p>The Redshift database name.</p>"
-        },
-        "TableName":{
-          "shape":"TableName",
-          "documentation":"<p>The table name of the Redshift database.</p>"
-        },
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the role providing access to the database.</p>"
-        },
-        "VpcConfiguration":{
-          "shape":"VpcConfiguration",
-          "documentation":"<p>Contains information about the Amazon Virtual Private Cloud (VPC) configuration.</p>"
-        }
-      },
-      "documentation":"<p>Provides information about the Amazon Redshift database configuration.</p>"
-    },
-    "RelatedColumnName":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "RelationshipType":{
-      "type":"string",
-      "enum":[
-        "CAUSE_OF_INPUT_ANOMALY_GROUP",
-        "EFFECT_OF_INPUT_ANOMALY_GROUP"
-      ]
-    },
-    "ResourceId":{"type":"string"},
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"},
-        "ResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The specified resource cannot be found. Check the ARN of the resource and try again.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ResourceType":{"type":"string"},
-    "S3SourceConfig":{
-      "type":"structure",
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of an IAM role that has read and write access permissions to the source S3 bucket.</p>"
-        },
-        "TemplatedPathList":{
-          "shape":"TemplatedPathList",
-          "documentation":"<p>A list of templated paths to the source files.</p>"
-        },
-        "HistoricalDataPathList":{
-          "shape":"HistoricalDataPathList",
-          "documentation":"<p>A list of paths to the historical data files.</p>"
-        },
-        "FileFormatDescriptor":{
-          "shape":"FileFormatDescriptor",
-          "documentation":"<p>Contains information about a source file's formatting.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about the configuration of the S3 bucket that contains source files.</p>"
-    },
-    "SNSConfiguration":{
-      "type":"structure",
-      "required":[
-        "RoleArn",
-        "SnsTopicArn"
-      ],
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the IAM role that has access to the target SNS topic.</p>"
-        },
-        "SnsTopicArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the target SNS topic.</p>"
-        },
-        "SnsFormat":{
-          "shape":"SnsFormat",
-          "documentation":"<p>The format of the SNS topic.</p> <ul> <li> <p> <code>JSON</code> – Send JSON alerts with an anomaly ID and a link to the anomaly detail page. This is the default.</p> </li> <li> <p> <code>LONG_TEXT</code> – Send human-readable alerts with information about the impacted timeseries and a link to the anomaly detail page. We recommend this for email.</p> </li> <li> <p> <code>SHORT_TEXT</code> – Send human-readable alerts with a link to the anomaly detail page. We recommend this for SMS.</p> </li> </ul>"
-        }
-      },
-      "documentation":"<p>Contains information about the SNS topic to which you want to send your alerts and the IAM role that has access to that topic.</p>"
-    },
-    "SampleDataS3SourceConfig":{
-      "type":"structure",
-      "required":[
-        "RoleArn",
-        "FileFormatDescriptor"
-      ],
-      "members":{
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the role.</p>"
-        },
-        "TemplatedPathList":{
-          "shape":"TemplatedPathList",
-          "documentation":"<p>An array of strings containing the list of templated paths.</p>"
-        },
-        "HistoricalDataPathList":{
-          "shape":"HistoricalDataPathList",
-          "documentation":"<p>An array of strings containing the historical set of data paths.</p>"
-        },
-        "FileFormatDescriptor":{"shape":"FileFormatDescriptor"}
-      },
-      "documentation":"<p>Contains information about the source configuration in Amazon S3.</p>"
-    },
-    "SampleRow":{
-      "type":"list",
-      "member":{"shape":"DataItem"}
-    },
-    "SampleRows":{
-      "type":"list",
-      "member":{"shape":"SampleRow"}
-    },
-    "Score":{
-      "type":"double",
-      "max":100.0,
-      "min":0.0
-    },
-    "SecurityGroupId":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[-0-9a-zA-Z]+"
-    },
-    "SecurityGroupIdList":{
-      "type":"list",
-      "member":{"shape":"SecurityGroupId"}
-    },
-    "SensitivityThreshold":{
-      "type":"integer",
-      "max":100,
-      "min":0
-    },
-    "ServiceCode":{"type":"string"},
-    "ServiceQuotaExceededException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"},
-        "ResourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        },
-        "QuotaCode":{
-          "shape":"QuotaCode",
-          "documentation":"<p>The quota code.</p>"
-        },
-        "ServiceCode":{
-          "shape":"ServiceCode",
-          "documentation":"<p>The service code.</p>"
-        }
-      },
-      "documentation":"<p>The request exceeded the service's quotas. Check the service quotas and try again.</p>",
-      "error":{"httpStatusCode":402},
-      "exception":true
-    },
-    "SnsFormat":{
-      "type":"string",
-      "enum":[
-        "LONG_TEXT",
-        "SHORT_TEXT",
-        "JSON"
-      ]
-    },
-    "StringAttributeValue":{"type":"string"},
-    "StringListAttributeValue":{
-      "type":"list",
-      "member":{"shape":"StringAttributeValue"}
-    },
-    "SubnetId":{
-      "type":"string",
-      "max":255,
-      "pattern":"[\\-0-9a-zA-Z]+"
-    },
-    "SubnetIdList":{
-      "type":"list",
-      "member":{"shape":"SubnetId"}
-    },
-    "TableName":{
-      "type":"string",
-      "max":100,
-      "min":1,
-      "pattern":"^[a-zA-Z][a-zA-Z0-9_.]*$"
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":50,
-      "min":1
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":50,
-      "min":1
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "Tags"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The resource's Amazon Resource Name (ARN).</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>Tags to apply to the resource. Tag keys and values can contain letters, numbers, spaces, and the following symbols: <code>_.:/=+@-</code> </p>",
-          "locationName":"tags"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256
-    },
-    "TemplatedPath":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^s3://[a-zA-Z0-9_\\-\\/ {}=]+$"
-    },
-    "TemplatedPathList":{
-      "type":"list",
-      "member":{"shape":"TemplatedPath"},
-      "max":1,
-      "min":1
-    },
-    "TimeSeries":{
-      "type":"structure",
-      "required":[
-        "TimeSeriesId",
-        "DimensionList",
-        "MetricValueList"
-      ],
-      "members":{
-        "TimeSeriesId":{
-          "shape":"TimeSeriesId",
-          "documentation":"<p>The ID of the metric.</p>"
-        },
-        "DimensionList":{
-          "shape":"DimensionNameValueList",
-          "documentation":"<p>The dimensions of the metric.</p>"
-        },
-        "MetricValueList":{
-          "shape":"MetricValueList",
-          "documentation":"<p>The values for the metric.</p>"
-        }
-      },
-      "documentation":"<p>Details about a metric. A metric is an aggregation of the values of a measure for a dimension value, such as <i>availability</i> in the <i>us-east-1</i> Region.</p>"
-    },
-    "TimeSeriesFeedback":{
-      "type":"structure",
-      "members":{
-        "TimeSeriesId":{
-          "shape":"TimeSeriesId",
-          "documentation":"<p>The ID of the metric.</p>"
-        },
-        "IsAnomaly":{
-          "shape":"Boolean",
-          "documentation":"<p>Feedback on whether the metric is a legitimate anomaly.</p>"
-        }
-      },
-      "documentation":"<p>Details about feedback submitted for an anomalous metric.</p>"
-    },
-    "TimeSeriesFeedbackList":{
-      "type":"list",
-      "member":{"shape":"TimeSeriesFeedback"}
-    },
-    "TimeSeriesId":{
-      "type":"string",
-      "max":520,
-      "pattern":".*\\S.*"
-    },
-    "TimeSeriesList":{
-      "type":"list",
-      "member":{"shape":"TimeSeries"}
-    },
-    "Timestamp":{"type":"timestamp"},
-    "TimestampColumn":{
-      "type":"structure",
-      "members":{
-        "ColumnName":{
-          "shape":"ColumnName",
-          "documentation":"<p>The name of the timestamp column.</p>"
-        },
-        "ColumnFormat":{
-          "shape":"DateTimeFormat",
-          "documentation":"<p>The format of the timestamp column.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about the column used to track time in a source data file.</p>"
-    },
-    "TimestampList":{
-      "type":"list",
-      "member":{"shape":"TimestampString"}
-    },
-    "TimestampString":{
-      "type":"string",
-      "max":60,
-      "pattern":"^([12]\\d{3})-(1[0-2]|0[1-9])-(0[1-9]|[12]\\d|3[01])T([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)(Z|(\\+|\\-)(0\\d|1[0-2]):([0-5]\\d)(\\[[[:alnum:]\\/\\_]+\\])?)$"
-    },
-    "Timezone":{
-      "type":"string",
-      "max":60,
-      "pattern":".*\\S.*"
-    },
-    "TooManyRequestsException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"}
-      },
-      "documentation":"<p>The request was denied due to too many requests being submitted at the same time.</p>",
-      "error":{"httpStatusCode":429},
-      "exception":true
-    },
-    "UUID":{
-      "type":"string",
-      "max":63,
-      "pattern":"[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}"
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The resource's Amazon Resource Name (ARN).</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "TagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>Keys to remove from the resource's tags.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateAlertRequest":{
-      "type":"structure",
-      "required":["AlertArn"],
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the alert to update.</p>"
-        },
-        "AlertDescription":{
-          "shape":"AlertDescription",
-          "documentation":"<p>A description of the alert.</p>"
-        },
-        "AlertSensitivityThreshold":{
-          "shape":"SensitivityThreshold",
-          "documentation":"<p>An integer from 0 to 100 specifying the alert sensitivity threshold.</p>"
-        },
-        "Action":{
-          "shape":"Action",
-          "documentation":"<p>Action that will be triggered when there is an alert.</p>"
-        },
-        "AlertFilters":{
-          "shape":"AlertFilters",
-          "documentation":"<p>The configuration of the alert filters, containing MetricList and DimensionFilterList.</p>"
-        }
-      }
-    },
-    "UpdateAlertResponse":{
-      "type":"structure",
-      "members":{
-        "AlertArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the updated alert.</p>"
-        }
-      }
-    },
-    "UpdateAnomalyDetectorRequest":{
-      "type":"structure",
-      "required":["AnomalyDetectorArn"],
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the detector to update.</p>"
-        },
-        "KmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an AWS KMS encryption key.</p>"
-        },
-        "AnomalyDetectorDescription":{
-          "shape":"AnomalyDetectorDescription",
-          "documentation":"<p>The updated detector description.</p>"
-        },
-        "AnomalyDetectorConfig":{
-          "shape":"AnomalyDetectorConfig",
-          "documentation":"<p>Contains information about the configuration to which the detector will be updated.</p>"
-        }
-      }
-    },
-    "UpdateAnomalyDetectorResponse":{
-      "type":"structure",
-      "members":{
-        "AnomalyDetectorArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the updated detector.</p>"
-        }
-      }
-    },
-    "UpdateMetricSetRequest":{
-      "type":"structure",
-      "required":["MetricSetArn"],
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset to update.</p>"
-        },
-        "MetricSetDescription":{
-          "shape":"MetricSetDescription",
-          "documentation":"<p>The dataset's description.</p>"
-        },
-        "MetricList":{
-          "shape":"MetricList",
-          "documentation":"<p>The metric list.</p>"
-        },
-        "Offset":{
-          "shape":"Offset",
-          "documentation":"<p>After an interval ends, the amount of seconds that the detector waits before importing data. Offset is only supported for S3, Redshift, Athena and datasources.</p>",
-          "box":true
-        },
-        "TimestampColumn":{
-          "shape":"TimestampColumn",
-          "documentation":"<p>The timestamp column.</p>"
-        },
-        "DimensionList":{
-          "shape":"DimensionList",
-          "documentation":"<p>The dimension list.</p>"
-        },
-        "MetricSetFrequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The dataset's interval.</p>"
-        },
-        "MetricSource":{"shape":"MetricSource"},
-        "DimensionFilterList":{
-          "shape":"MetricSetDimensionFilterList",
-          "documentation":"<p>Describes a list of filters for choosing specific dimensions and specific values. Each filter consists of the dimension and one of its values that you want to include. When multiple dimensions or values are specified, the dimensions are joined with an AND operation and the values are joined with an OR operation.</p>"
-        }
-      }
-    },
-    "UpdateMetricSetResponse":{
-      "type":"structure",
-      "members":{
-        "MetricSetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the dataset.</p>"
-        }
-      }
-    },
-    "ValidationException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"Message"},
-        "Reason":{
-          "shape":"ValidationExceptionReason",
-          "documentation":"<p>The reason that validation failed.</p>"
-        },
-        "Fields":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>Fields that failed validation.</p>"
-        }
-      },
-      "documentation":"<p>The input fails to satisfy the constraints specified by the AWS service. Check your input values and try again.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ValidationExceptionField":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "Message"
-      ],
-      "members":{
-        "Name":{
-          "shape":"FieldName",
-          "documentation":"<p>The name of the field.</p>"
-        },
-        "Message":{
-          "shape":"Message",
-          "documentation":"<p>The message with more information about the validation exception.</p>"
-        }
-      },
-      "documentation":"<p>Contains information about a a field in a validation exception.</p>"
-    },
-    "ValidationExceptionFieldList":{
-      "type":"list",
-      "member":{"shape":"ValidationExceptionField"}
-    },
-    "ValidationExceptionReason":{
-      "type":"string",
-      "enum":[
-        "UNKNOWN_OPERATION",
-        "CANNOT_PARSE",
-        "FIELD_VALIDATION_FAILED",
-        "OTHER"
-      ]
-    },
-    "VpcConfiguration":{
-      "type":"structure",
-      "required":[
-        "SubnetIdList",
-        "SecurityGroupIdList"
-      ],
-      "members":{
-        "SubnetIdList":{
-          "shape":"SubnetIdList",
-          "documentation":"<p>An array of strings containing the Amazon VPC subnet IDs (e.g., <code>subnet-0bb1c79de3EXAMPLE</code>.</p>"
-        },
-        "SecurityGroupIdList":{
-          "shape":"SecurityGroupIdList",
-          "documentation":"<p>An array of strings containing the list of security groups.</p>"
-        }
-      },
-      "documentation":"<p>Contains configuration information about the Amazon Virtual Private Cloud (VPC).</p>"
-    }
-  },
-  "documentation":"<p>This is the <i>Amazon Lookout for Metrics API Reference</i>. For an introduction to the service with tutorials for getting started, visit <a href=\"https://docs.aws.amazon.com/lookoutmetrics/latest/dev\">Amazon Lookout for Metrics Developer Guide</a>.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ]
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutvision-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutvision-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://lookoutvision.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://lookoutvision.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/paginators-1.json 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-{
-  "pagination": {
-    "ListDatasetEntries": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "DatasetEntries"
-    },
-    "ListModels": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "Models"
-    },
-    "ListProjects": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "Projects"
-    },
-    "ListModelPackagingJobs": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "ModelPackagingJobs"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/service-2.json 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/lookoutvision/2020-11-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/lookoutvision/2020-11-20/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,2266 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2020-11-20",
-    "endpointPrefix":"lookoutvision",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "serviceFullName":"Amazon Lookout for Vision",
-    "serviceId":"LookoutVision",
-    "signatureVersion":"v4",
-    "signingName":"lookoutvision",
-    "uid":"lookoutvision-2020-11-20"
-  },
-  "operations":{
-    "CreateDataset":{
-      "name":"CreateDataset",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/datasets",
-        "responseCode":202
-      },
-      "input":{"shape":"CreateDatasetRequest"},
-      "output":{"shape":"CreateDatasetResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Creates a new dataset in an Amazon Lookout for Vision project. <code>CreateDataset</code> can create a training or a test dataset from a valid dataset source (<code>DatasetSource</code>).</p> <p>If you want a single dataset project, specify <code>train</code> for the value of <code>DatasetType</code>.</p> <p>To have a project with separate training and test datasets, call <code>CreateDataset</code> twice. On the first call, specify <code>train</code> for the value of <code>DatasetType</code>. On the second call, specify <code>test</code> for the value of <code>DatasetType</code>. </p> <p>This operation requires permissions to perform the <code>lookoutvision:CreateDataset</code> operation.</p>"
-    },
-    "CreateModel":{
-      "name":"CreateModel",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/models",
-        "responseCode":202
-      },
-      "input":{"shape":"CreateModelRequest"},
-      "output":{"shape":"CreateModelResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Creates a new version of a model within an an Amazon Lookout for Vision project. <code>CreateModel</code> is an asynchronous operation in which Amazon Lookout for Vision trains, tests, and evaluates a new version of a model. </p> <p>To get the current status, check the <code>Status</code> field returned in the response from <a>DescribeModel</a>.</p> <p>If the project has a single dataset, Amazon Lookout for Vision internally splits the dataset to create a training and a test dataset. If the project has a training and a test dataset, Lookout for Vision uses the respective datasets to train and test the model. </p> <p>After training completes, the evaluation metrics are stored at the location specified in <code>OutputConfig</code>. </p> <p>This operation requires permissions to perform the <code>lookoutvision:CreateModel</code> operation. If you want to tag your model, you also require permission to the <code>lookoutvision:TagResource</code> operation.</p>"
-    },
-    "CreateProject":{
-      "name":"CreateProject",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects"
-      },
-      "input":{"shape":"CreateProjectRequest"},
-      "output":{"shape":"CreateProjectResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Creates an empty Amazon Lookout for Vision project. After you create the project, add a dataset by calling <a>CreateDataset</a>.</p> <p>This operation requires permissions to perform the <code>lookoutvision:CreateProject</code> operation.</p>"
-    },
-    "DeleteDataset":{
-      "name":"DeleteDataset",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/2020-11-20/projects/{projectName}/datasets/{datasetType}",
-        "responseCode":202
-      },
-      "input":{"shape":"DeleteDatasetRequest"},
-      "output":{"shape":"DeleteDatasetResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Deletes an existing Amazon Lookout for Vision <code>dataset</code>. </p> <p>If your the project has a single dataset, you must create a new dataset before you can create a model.</p> <p>If you project has a training dataset and a test dataset consider the following. </p> <ul> <li> <p>If you delete the test dataset, your project reverts to a single dataset project. If you then train the model, Amazon Lookout for Vision internally splits the remaining dataset into a training and test dataset.</p> </li> <li> <p>If you delete the training dataset, you must create a training dataset before you can create a model.</p> </li> </ul> <p>This operation requires permissions to perform the <code>lookoutvision:DeleteDataset</code> operation.</p>"
-    },
-    "DeleteModel":{
-      "name":"DeleteModel",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/2020-11-20/projects/{projectName}/models/{modelVersion}",
-        "responseCode":202
-      },
-      "input":{"shape":"DeleteModelRequest"},
-      "output":{"shape":"DeleteModelResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Deletes an Amazon Lookout for Vision model. You can't delete a running model. To stop a running model, use the <a>StopModel</a> operation.</p> <p>It might take a few seconds to delete a model. To determine if a model has been deleted, call <a>ListModels</a> and check if the version of the model (<code>ModelVersion</code>) is in the <code>Models</code> array. </p> <p/> <p>This operation requires permissions to perform the <code>lookoutvision:DeleteModel</code> operation.</p>"
-    },
-    "DeleteProject":{
-      "name":"DeleteProject",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/2020-11-20/projects/{projectName}"
-      },
-      "input":{"shape":"DeleteProjectRequest"},
-      "output":{"shape":"DeleteProjectResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Deletes an Amazon Lookout for Vision project.</p> <p>To delete a project, you must first delete each version of the model associated with the project. To delete a model use the <a>DeleteModel</a> operation.</p> <p>You also have to delete the dataset(s) associated with the model. For more information, see <a>DeleteDataset</a>. The images referenced by the training and test datasets aren't deleted. </p> <p>This operation requires permissions to perform the <code>lookoutvision:DeleteProject</code> operation.</p>"
-    },
-    "DescribeDataset":{
-      "name":"DescribeDataset",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/datasets/{datasetType}"
-      },
-      "input":{"shape":"DescribeDatasetRequest"},
-      "output":{"shape":"DescribeDatasetResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Describe an Amazon Lookout for Vision dataset.</p> <p>This operation requires permissions to perform the <code>lookoutvision:DescribeDataset</code> operation.</p>"
-    },
-    "DescribeModel":{
-      "name":"DescribeModel",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/models/{modelVersion}"
-      },
-      "input":{"shape":"DescribeModelRequest"},
-      "output":{"shape":"DescribeModelResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Describes a version of an Amazon Lookout for Vision model.</p> <p>This operation requires permissions to perform the <code>lookoutvision:DescribeModel</code> operation.</p>"
-    },
-    "DescribeModelPackagingJob":{
-      "name":"DescribeModelPackagingJob",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/modelpackagingjobs/{jobName}"
-      },
-      "input":{"shape":"DescribeModelPackagingJobRequest"},
-      "output":{"shape":"DescribeModelPackagingJobResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Describes an Amazon Lookout for Vision model packaging job. </p> <p>This operation requires permissions to perform the <code>lookoutvision:DescribeModelPackagingJob</code> operation.</p> <p>For more information, see <i>Using your Amazon Lookout for Vision model on an edge device</i> in the Amazon Lookout for Vision Developer Guide. </p>"
-    },
-    "DescribeProject":{
-      "name":"DescribeProject",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}"
-      },
-      "input":{"shape":"DescribeProjectRequest"},
-      "output":{"shape":"DescribeProjectResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Describes an Amazon Lookout for Vision project.</p> <p>This operation requires permissions to perform the <code>lookoutvision:DescribeProject</code> operation.</p>"
-    },
-    "DetectAnomalies":{
-      "name":"DetectAnomalies",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/models/{modelVersion}/detect"
-      },
-      "input":{"shape":"DetectAnomaliesRequest"},
-      "output":{"shape":"DetectAnomaliesResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Detects anomalies in an image that you supply. </p> <p>The response from <code>DetectAnomalies</code> includes a boolean prediction that the image contains one or more anomalies and a confidence value for the prediction. If the model is an image segmentation model, the response also includes segmentation information for each type of anomaly found in the image.</p> <note> <p>Before calling <code>DetectAnomalies</code>, you must first start your model with the <a>StartModel</a> operation. You are charged for the amount of time, in minutes, that a model runs and for the number of anomaly detection units that your model uses. If you are not using a model, use the <a>StopModel</a> operation to stop your model. </p> </note> <p>For more information, see <i>Detecting anomalies in an image</i> in the Amazon Lookout for Vision developer guide.</p> <p>This operation requires permissions to perform the <code>lookoutvision:DetectAnomalies</code> operation.</p>"
-    },
-    "ListDatasetEntries":{
-      "name":"ListDatasetEntries",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/datasets/{datasetType}/entries"
-      },
-      "input":{"shape":"ListDatasetEntriesRequest"},
-      "output":{"shape":"ListDatasetEntriesResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Lists the JSON Lines within a dataset. An Amazon Lookout for Vision JSON Line contains the anomaly information for a single image, including the image location and the assigned label.</p> <p>This operation requires permissions to perform the <code>lookoutvision:ListDatasetEntries</code> operation.</p>"
-    },
-    "ListModelPackagingJobs":{
-      "name":"ListModelPackagingJobs",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/modelpackagingjobs"
-      },
-      "input":{"shape":"ListModelPackagingJobsRequest"},
-      "output":{"shape":"ListModelPackagingJobsResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p> Lists the model packaging jobs created for an Amazon Lookout for Vision project. </p> <p>This operation requires permissions to perform the <code>lookoutvision:ListModelPackagingJobs</code> operation. </p> <p>For more information, see <i>Using your Amazon Lookout for Vision model on an edge device</i> in the Amazon Lookout for Vision Developer Guide. </p>"
-    },
-    "ListModels":{
-      "name":"ListModels",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects/{projectName}/models"
-      },
-      "input":{"shape":"ListModelsRequest"},
-      "output":{"shape":"ListModelsResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Lists the versions of a model in an Amazon Lookout for Vision project.</p> <p>The <code>ListModels</code> operation is eventually consistent. Recent calls to <code>CreateModel</code> might take a while to appear in the response from <code>ListProjects</code>.</p> <p>This operation requires permissions to perform the <code>lookoutvision:ListModels</code> operation.</p>"
-    },
-    "ListProjects":{
-      "name":"ListProjects",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/projects"
-      },
-      "input":{"shape":"ListProjectsRequest"},
-      "output":{"shape":"ListProjectsResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Lists the Amazon Lookout for Vision projects in your AWS account that are in the AWS Region in which you call <code>ListProjects</code>.</p> <p>The <code>ListProjects</code> operation is eventually consistent. Recent calls to <code>CreateProject</code> and <code>DeleteProject</code> might take a while to appear in the response from <code>ListProjects</code>.</p> <p>This operation requires permissions to perform the <code>lookoutvision:ListProjects</code> operation.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/2020-11-20/tags/{resourceArn}"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Returns a list of tags attached to the specified Amazon Lookout for Vision model.</p> <p>This operation requires permissions to perform the <code>lookoutvision:ListTagsForResource</code> operation.</p>"
-    },
-    "StartModel":{
-      "name":"StartModel",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/models/{modelVersion}/start",
-        "responseCode":202
-      },
-      "input":{"shape":"StartModelRequest"},
-      "output":{"shape":"StartModelResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Starts the running of the version of an Amazon Lookout for Vision model. Starting a model takes a while to complete. To check the current state of the model, use <a>DescribeModel</a>.</p> <p>A model is ready to use when its status is <code>HOSTED</code>.</p> <p>Once the model is running, you can detect custom labels in new images by calling <a>DetectAnomalies</a>.</p> <note> <p>You are charged for the amount of time that the model is running. To stop a running model, call <a>StopModel</a>.</p> </note> <p>This operation requires permissions to perform the <code>lookoutvision:StartModel</code> operation.</p>"
-    },
-    "StartModelPackagingJob":{
-      "name":"StartModelPackagingJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/modelpackagingjobs"
-      },
-      "input":{"shape":"StartModelPackagingJobRequest"},
-      "output":{"shape":"StartModelPackagingJobResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Starts an Amazon Lookout for Vision model packaging job. A model packaging job creates an AWS IoT Greengrass component for a Lookout for Vision model. You can use the component to deploy your model to an edge device managed by Greengrass. </p> <p>Use the <a>DescribeModelPackagingJob</a> API to determine the current status of the job. The model packaging job is complete if the value of <code>Status</code> is <code>SUCCEEDED</code>.</p> <p>To deploy the component to the target device, use the component name and component version with the AWS IoT Greengrass <a href=\"https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html\">CreateDeployment</a> API.</p> <p>This operation requires the following permissions:</p> <ul> <li> <p> <code>lookoutvision:StartModelPackagingJob</code> </p> </li> <li> <p> <code>s3:PutObject</code> </p> </li> <li> <p> <code>s3:GetBucketLocation</code> </p> </li> <li> <p> <code>kms:GenerateDataKey</code> </p> </li> <li> <p> <code>greengrass:CreateComponentVersion</code> </p> </li> <li> <p> <code>greengrass:DescribeComponent</code> </p> </li> <li> <p>(Optional) <code>greengrass:TagResource</code>. Only required if you want to tag the component.</p> </li> </ul> <p>For more information, see <i>Using your Amazon Lookout for Vision model on an edge device</i> in the Amazon Lookout for Vision Developer Guide. </p>"
-    },
-    "StopModel":{
-      "name":"StopModel",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/projects/{projectName}/models/{modelVersion}/stop",
-        "responseCode":202
-      },
-      "input":{"shape":"StopModelRequest"},
-      "output":{"shape":"StopModelResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Stops the hosting of a running model. The operation might take a while to complete. To check the current status, call <a>DescribeModel</a>. </p> <p>After the model hosting stops, the <code>Status</code> of the model is <code>TRAINED</code>.</p> <p>This operation requires permissions to perform the <code>lookoutvision:StopModel</code> operation.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/2020-11-20/tags/{resourceArn}"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ServiceQuotaExceededException"}
-      ],
-      "documentation":"<p>Adds one or more key-value tags to an Amazon Lookout for Vision model. For more information, see <i>Tagging a model</i> in the <i>Amazon Lookout for Vision Developer Guide</i>. </p> <p>This operation requires permissions to perform the <code>lookoutvision:TagResource</code> operation.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/2020-11-20/tags/{resourceArn}"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Removes one or more tags from an Amazon Lookout for Vision model. For more information, see <i>Tagging a model</i> in the <i>Amazon Lookout for Vision Developer Guide</i>. </p> <p>This operation requires permissions to perform the <code>lookoutvision:UntagResource</code> operation.</p>"
-    },
-    "UpdateDatasetEntries":{
-      "name":"UpdateDatasetEntries",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/2020-11-20/projects/{projectName}/datasets/{datasetType}/entries",
-        "responseCode":202
-      },
-      "input":{"shape":"UpdateDatasetEntriesRequest"},
-      "output":{"shape":"UpdateDatasetEntriesResponse"},
-      "errors":[
-        {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ValidationException"},
-        {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Adds or updates one or more JSON Line entries in a dataset. A JSON Line includes information about an image used for training or testing an Amazon Lookout for Vision model.</p> <p>To update an existing JSON Line, use the <code>source-ref</code> field to identify the JSON Line. The JSON line that you supply replaces the existing JSON line. Any existing annotations that are not in the new JSON line are removed from the dataset. </p> <p>For more information, see <i>Defining JSON lines for anomaly classification</i> in the Amazon Lookout for Vision Developer Guide. </p> <note> <p>The images you reference in the <code>source-ref</code> field of a JSON line, must be in the same S3 bucket as the existing images in the dataset. </p> </note> <p>Updating a dataset might take a while to complete. To check the current status, call <a>DescribeDataset</a> and check the <code>Status</code> field in the response.</p> <p>This operation requires permissions to perform the <code>lookoutvision:UpdateDatasetEntries</code> operation.</p>"
-    }
-  },
-  "shapes":{
-    "AccessDeniedException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"ExceptionString"}
-      },
-      "documentation":"<p>You are not authorized to perform the action.</p>",
-      "error":{"httpStatusCode":403},
-      "exception":true
-    },
-    "Anomaly":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"AnomalyName",
-          "documentation":"<p>The name of an anomaly type found in an image. <code>Name</code> maps to an anomaly type in the training dataset, apart from the anomaly type <code>background</code>. The service automatically inserts the <code>background</code> anomaly type into the response from <code>DetectAnomalies</code>. </p>"
-        },
-        "PixelAnomaly":{
-          "shape":"PixelAnomaly",
-          "documentation":"<p>Information about the pixel mask that covers an anomaly type.</p>"
-        }
-      },
-      "documentation":"<p>Information about an anomaly type found on an image by an image segmentation model. For more information, see <a>DetectAnomalies</a>.</p>"
-    },
-    "AnomalyClassFilter":{
-      "type":"string",
-      "max":10,
-      "min":1,
-      "pattern":"(normal|anomaly)"
-    },
-    "AnomalyList":{
-      "type":"list",
-      "member":{"shape":"Anomaly"}
-    },
-    "AnomalyMask":{
-      "type":"blob",
-      "max":5242880,
-      "min":1
-    },
-    "AnomalyName":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"[a-zA-Z0-9]*"
-    },
-    "Boolean":{"type":"boolean"},
-    "ClientToken":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9-]+$"
-    },
-    "Color":{
-      "type":"string",
-      "max":7,
-      "min":7,
-      "pattern":"\\#[a-zA-Z0-9]{6}"
-    },
-    "CompilerOptions":{
-      "type":"string",
-      "max":1024,
-      "min":3,
-      "pattern":".*"
-    },
-    "ComponentDescription":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"[a-zA-Z0-9-_. ()':,;?]+"
-    },
-    "ComponentName":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"[a-zA-Z0-9-_.]+"
-    },
-    "ComponentVersion":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"^([0-9]{1,6})\\.([0-9]{1,6})\\.([0-9]{1,6})$"
-    },
-    "ComponentVersionArn":{
-      "type":"string",
-      "pattern":"arn:[^:]*:greengrass:[^:]*:aws:components:[^:]+"
-    },
-    "ConflictException":{
-      "type":"structure",
-      "required":[
-        "Message",
-        "ResourceId",
-        "ResourceType"
-      ],
-      "members":{
-        "Message":{"shape":"ExceptionString"},
-        "ResourceId":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The update or deletion of a resource caused an inconsistent state.</p>",
-      "error":{"httpStatusCode":409},
-      "exception":true
-    },
-    "ContentType":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":".*"
-    },
-    "CreateDatasetRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "DatasetType"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project in which you want to create a dataset.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset. Specify <code>train</code> for a training dataset. Specify <code>test</code> for a test dataset.</p>"
-        },
-        "DatasetSource":{
-          "shape":"DatasetSource",
-          "documentation":"<p>The location of the manifest file that Amazon Lookout for Vision uses to create the dataset.</p> <p>If you don't specify <code>DatasetSource</code>, an empty dataset is created and the operation synchronously returns. Later, you can add JSON Lines by calling <a>UpdateDatasetEntries</a>. </p> <p>If you specify a value for <code>DataSource</code>, the manifest at the S3 location is validated and used to create the dataset. The call to <code>CreateDataset</code> is asynchronous and might take a while to complete. To find out the current status, Check the value of <code>Status</code> returned in a call to <a>DescribeDataset</a>.</p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>CreateDataset</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>CreateDataset</code>. In this case, safely retry your call to <code>CreateDataset</code> by using the same <code>ClientToken</code> parameter value.</p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple dataset creation requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>CreateDataset</code>. An idempotency token is active for 8 hours. </p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "CreateDatasetResponse":{
-      "type":"structure",
-      "members":{
-        "DatasetMetadata":{
-          "shape":"DatasetMetadata",
-          "documentation":"<p>Information about the dataset.</p>"
-        }
-      }
-    },
-    "CreateModelRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "OutputConfig"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project in which you want to create a model version.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "Description":{
-          "shape":"ModelDescriptionMessage",
-          "documentation":"<p>A description for the version of the model.</p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>CreateModel</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>CreateModel</code>. In this case, safely retry your call to <code>CreateModel</code> by using the same <code>ClientToken</code> parameter value. </p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from starting multiple training jobs. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>CreateModel</code>. An idempotency token is active for 8 hours.</p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        },
-        "OutputConfig":{
-          "shape":"OutputConfig",
-          "documentation":"<p>The location where Amazon Lookout for Vision saves the training results.</p>"
-        },
-        "KmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The identifier for your AWS KMS key. The key is used to encrypt training and test images copied into the service for model training. Your source images are unaffected. If this parameter is not specified, the copied images are encrypted by a key that AWS owns and manages.</p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A set of tags (key-value pairs) that you want to attach to the model.</p>"
-        }
-      }
-    },
-    "CreateModelResponse":{
-      "type":"structure",
-      "members":{
-        "ModelMetadata":{
-          "shape":"ModelMetadata",
-          "documentation":"<p>The response from a call to <code>CreateModel</code>.</p>"
-        }
-      }
-    },
-    "CreateProjectRequest":{
-      "type":"structure",
-      "required":["ProjectName"],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name for the project.</p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>CreateProject</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>CreateProject</code>. In this case, safely retry your call to <code>CreateProject</code> by using the same <code>ClientToken</code> parameter value. </p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple project creation requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>CreateProject</code>. An idempotency token is active for 8 hours.</p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "CreateProjectResponse":{
-      "type":"structure",
-      "members":{
-        "ProjectMetadata":{
-          "shape":"ProjectMetadata",
-          "documentation":"<p>Information about the project.</p>"
-        }
-      }
-    },
-    "DatasetChanges":{
-      "type":"blob",
-      "max":10485760,
-      "min":1
-    },
-    "DatasetDescription":{
-      "type":"structure",
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the dataset.</p>"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset. The value <code>train</code> represents a training dataset or single dataset project. The value <code>test</code> represents a test dataset.</p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The Unix timestamp for the time and date that the dataset was created.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The Unix timestamp for the date and time that the dataset was last updated.</p>"
-        },
-        "Status":{
-          "shape":"DatasetStatus",
-          "documentation":"<p>The status of the dataset.</p>"
-        },
-        "StatusMessage":{
-          "shape":"DatasetStatusMessage",
-          "documentation":"<p>The status message for the dataset. </p>"
-        },
-        "ImageStats":{
-          "shape":"DatasetImageStats",
-          "documentation":"<p>Statistics about the images in a dataset.</p>"
-        }
-      },
-      "documentation":"<p>The description for a dataset. For more information, see <a>DescribeDataset</a>.</p>"
-    },
-    "DatasetEntry":{
-      "type":"string",
-      "max":8192,
-      "min":2,
-      "pattern":"^\\{.*\\}$"
-    },
-    "DatasetEntryList":{
-      "type":"list",
-      "member":{"shape":"DatasetEntry"}
-    },
-    "DatasetGroundTruthManifest":{
-      "type":"structure",
-      "members":{
-        "S3Object":{
-          "shape":"InputS3Object",
-          "documentation":"<p>The S3 bucket location for the manifest file.</p>"
-        }
-      },
-      "documentation":"<p>Location information about a manifest file. You can use a manifest file to create a dataset.</p>"
-    },
-    "DatasetImageStats":{
-      "type":"structure",
-      "members":{
-        "Total":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of images in the dataset.</p>"
-        },
-        "Labeled":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of labeled images.</p>"
-        },
-        "Normal":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of images labeled as normal.</p>"
-        },
-        "Anomaly":{
-          "shape":"Integer",
-          "documentation":"<p>the total number of images labeled as an anomaly.</p>"
-        }
-      },
-      "documentation":"<p>Statistics about the images in a dataset.</p>"
-    },
-    "DatasetMetadata":{
-      "type":"structure",
-      "members":{
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset.</p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The Unix timestamp for the date and time that the dataset was created. </p>"
-        },
-        "Status":{
-          "shape":"DatasetStatus",
-          "documentation":"<p>The status for the dataset.</p>"
-        },
-        "StatusMessage":{
-          "shape":"DatasetStatusMessage",
-          "documentation":"<p>The status message for the dataset.</p>"
-        }
-      },
-      "documentation":"<p>Summary information for an Amazon Lookout for Vision dataset. For more information, see <a>DescribeDataset</a> and <a>ProjectDescription</a>.</p>"
-    },
-    "DatasetMetadataList":{
-      "type":"list",
-      "member":{"shape":"DatasetMetadata"}
-    },
-    "DatasetSource":{
-      "type":"structure",
-      "members":{
-        "GroundTruthManifest":{
-          "shape":"DatasetGroundTruthManifest",
-          "documentation":"<p>Location information for the manifest file.</p>"
-        }
-      },
-      "documentation":"<p>Information about the location of a manifest file that Amazon Lookout for Vision uses to to create a dataset.</p>"
-    },
-    "DatasetStatus":{
-      "type":"string",
-      "enum":[
-        "CREATE_IN_PROGRESS",
-        "CREATE_COMPLETE",
-        "CREATE_FAILED",
-        "UPDATE_IN_PROGRESS",
-        "UPDATE_COMPLETE",
-        "UPDATE_FAILED_ROLLBACK_IN_PROGRESS",
-        "UPDATE_FAILED_ROLLBACK_COMPLETE",
-        "DELETE_IN_PROGRESS",
-        "DELETE_COMPLETE",
-        "DELETE_FAILED"
-      ]
-    },
-    "DatasetStatusMessage":{"type":"string"},
-    "DatasetType":{
-      "type":"string",
-      "max":10,
-      "min":1,
-      "pattern":"train|test"
-    },
-    "DateTime":{"type":"timestamp"},
-    "DeleteDatasetRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "DatasetType"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the dataset that you want to delete.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset to delete. Specify <code>train</code> to delete the training dataset. Specify <code>test</code> to delete the test dataset. To delete the dataset in a single dataset project, specify <code>train</code>.</p>",
-          "location":"uri",
-          "locationName":"datasetType"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>DeleteDataset</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>DeleteDataset</code>. In this case, safely retry your call to <code>DeleteDataset</code> by using the same <code>ClientToken</code> parameter value. </p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple deletetion requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>DeleteDataset</code>. An idempotency token is active for 8 hours.</p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "DeleteDatasetResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteModelRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model that you want to delete.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersionNoLatest",
-          "documentation":"<p>The version of the model that you want to delete.</p>",
-          "location":"uri",
-          "locationName":"modelVersion"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>DeleteModel</code> completes only once. You choose the value to pass. For example, an issue might prevent you from getting a response from <code>DeleteModel</code>. In this case, safely retry your call to <code>DeleteModel</code> by using the same <code>ClientToken</code> parameter value.</p> <p>If you don't supply a value for ClientToken, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple model deletion requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>DeleteModel</code>. An idempotency token is active for 8 hours.</p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "DeleteModelResponse":{
-      "type":"structure",
-      "members":{
-        "ModelArn":{
-          "shape":"ModelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model that was deleted.</p>"
-        }
-      }
-    },
-    "DeleteProjectRequest":{
-      "type":"structure",
-      "required":["ProjectName"],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project to delete.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>DeleteProject</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>DeleteProject</code>. In this case, safely retry your call to <code>DeleteProject</code> by using the same <code>ClientToken</code> parameter value. </p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple project deletion requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>DeleteProject</code>. An idempotency token is active for 8 hours.</p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "DeleteProjectResponse":{
-      "type":"structure",
-      "members":{
-        "ProjectArn":{
-          "shape":"ProjectArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the project that was deleted.</p>"
-        }
-      }
-    },
-    "DescribeDatasetRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "DatasetType"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the dataset that you want to describe.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset to describe. Specify <code>train</code> to describe the training dataset. Specify <code>test</code> to describe the test dataset. If you have a single dataset project, specify <code>train</code> </p>",
-          "location":"uri",
-          "locationName":"datasetType"
-        }
-      }
-    },
-    "DescribeDatasetResponse":{
-      "type":"structure",
-      "members":{
-        "DatasetDescription":{
-          "shape":"DatasetDescription",
-          "documentation":"<p>The description of the requested dataset. </p>"
-        }
-      }
-    },
-    "DescribeModelPackagingJobRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "JobName"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model packaging job that you want to describe. </p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "JobName":{
-          "shape":"ModelPackagingJobName",
-          "documentation":"<p>The job name for the model packaging job. </p>",
-          "location":"uri",
-          "locationName":"jobName"
-        }
-      }
-    },
-    "DescribeModelPackagingJobResponse":{
-      "type":"structure",
-      "members":{
-        "ModelPackagingDescription":{
-          "shape":"ModelPackagingDescription",
-          "documentation":"<p>The description of the model packaging job. </p>"
-        }
-      }
-    },
-    "DescribeModelRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The project that contains the version of a model that you want to describe.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model that you want to describe.</p>",
-          "location":"uri",
-          "locationName":"modelVersion"
-        }
-      }
-    },
-    "DescribeModelResponse":{
-      "type":"structure",
-      "members":{
-        "ModelDescription":{
-          "shape":"ModelDescription",
-          "documentation":"<p>Contains the description of the model.</p>"
-        }
-      }
-    },
-    "DescribeProjectRequest":{
-      "type":"structure",
-      "required":["ProjectName"],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that you want to describe.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        }
-      }
-    },
-    "DescribeProjectResponse":{
-      "type":"structure",
-      "members":{
-        "ProjectDescription":{
-          "shape":"ProjectDescription",
-          "documentation":"<p>The description of the project.</p>"
-        }
-      }
-    },
-    "DetectAnomaliesRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion",
-        "Body",
-        "ContentType"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model version that you want to use.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model that you want to use.</p>",
-          "location":"uri",
-          "locationName":"modelVersion"
-        },
-        "Body":{
-          "shape":"Stream",
-          "documentation":"<p>The unencrypted image bytes that you want to analyze. </p>"
-        },
-        "ContentType":{
-          "shape":"ContentType",
-          "documentation":"<p>The type of the image passed in <code>Body</code>. Valid values are <code>image/png</code> (PNG format images) and <code>image/jpeg</code> (JPG format images). </p>",
-          "location":"header",
-          "locationName":"Content-Type"
-        }
-      },
-      "payload":"Body"
-    },
-    "DetectAnomaliesResponse":{
-      "type":"structure",
-      "members":{
-        "DetectAnomalyResult":{
-          "shape":"DetectAnomalyResult",
-          "documentation":"<p>The results of the <code>DetectAnomalies</code> operation.</p>"
-        }
-      }
-    },
-    "DetectAnomalyResult":{
-      "type":"structure",
-      "members":{
-        "Source":{
-          "shape":"ImageSource",
-          "documentation":"<p>The source of the image that was analyzed. <code>direct</code> means that the images was supplied from the local computer. No other values are supported.</p>"
-        },
-        "IsAnomalous":{
-          "shape":"Boolean",
-          "documentation":"<p>True if Amazon Lookout for Vision classifies the image as containing an anomaly, otherwise false.</p>"
-        },
-        "Confidence":{
-          "shape":"Float",
-          "documentation":"<p>The confidence that Lookout for Vision has in the accuracy of the classification in <code>IsAnomalous</code>.</p>"
-        },
-        "Anomalies":{
-          "shape":"AnomalyList",
-          "documentation":"<p>If the model is an image segmentation model, <code>Anomalies</code> contains a list of anomaly types found in the image. There is one entry for each type of anomaly found (even if multiple instances of an anomaly type exist on the image). The first element in the list is always an anomaly type representing the image background ('background') and shouldn't be considered an anomaly. Amazon Lookout for Vision automatically add the background anomaly type to the response, and you don't need to declare a background anomaly type in your dataset.</p> <p>If the list has one entry ('background'), no anomalies were found on the image.</p> <p/> <p>An image classification model doesn't return an <code>Anomalies</code> list. </p>"
-        },
-        "AnomalyMask":{
-          "shape":"AnomalyMask",
-          "documentation":"<p>If the model is an image segmentation model, <code>AnomalyMask</code> contains pixel masks that covers all anomaly types found on the image. Each anomaly type has a different mask color. To map a color to an anomaly type, see the <code>color</code> field of the <a>PixelAnomaly</a> object.</p> <p>An image classification model doesn't return an <code>Anomalies</code> list. </p>"
-        }
-      },
-      "documentation":"<p>The prediction results from a call to <a>DetectAnomalies</a>. <code>DetectAnomalyResult</code> includes classification information for the prediction (<code>IsAnomalous</code> and <code>Confidence</code>). If the model you use is an image segementation model, <code>DetectAnomalyResult</code> also includes segmentation information (<code>Anomalies</code> and <code>AnomalyMask</code>). Classification information is calculated separately from segmentation information and you shouldn't assume a relationship between them.</p>"
-    },
-    "ExceptionString":{"type":"string"},
-    "Float":{"type":"float"},
-    "GreengrassConfiguration":{
-      "type":"structure",
-      "required":[
-        "S3OutputLocation",
-        "ComponentName"
-      ],
-      "members":{
-        "CompilerOptions":{
-          "shape":"CompilerOptions",
-          "documentation":"<p>Additional compiler options for the Greengrass component. Currently, only NVIDIA Graphics Processing Units (GPU) and CPU accelerators are supported. If you specify <code>TargetDevice</code>, don't specify <code>CompilerOptions</code>.</p> <p>For more information, see <i>Compiler options</i> in the Amazon Lookout for Vision Developer Guide. </p>"
-        },
-        "TargetDevice":{
-          "shape":"TargetDevice",
-          "documentation":"<p>The target device for the model. Currently the only supported value is <code>jetson_xavier</code>. If you specify <code>TargetDevice</code>, you can't specify <code>TargetPlatform</code>. </p>"
-        },
-        "TargetPlatform":{
-          "shape":"TargetPlatform",
-          "documentation":"<p>The target platform for the model. If you specify <code>TargetPlatform</code>, you can't specify <code>TargetDevice</code>. </p>"
-        },
-        "S3OutputLocation":{
-          "shape":"S3Location",
-          "documentation":"<p> An S3 location in which Lookout for Vision stores the component artifacts. </p>"
-        },
-        "ComponentName":{
-          "shape":"ComponentName",
-          "documentation":"<p> A name for the AWS IoT Greengrass component. </p>"
-        },
-        "ComponentVersion":{
-          "shape":"ComponentVersion",
-          "documentation":"<p>A Version for the AWS IoT Greengrass component. If you don't provide a value, a default value of <code> <i>Model Version</i>.0.0</code> is used. </p>"
-        },
-        "ComponentDescription":{
-          "shape":"ComponentDescription",
-          "documentation":"<p> A description for the AWS IoT Greengrass component. </p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p> A set of tags (key-value pairs) that you want to attach to the AWS IoT Greengrass component. </p>"
-        }
-      },
-      "documentation":"<p>Configuration information for the AWS IoT Greengrass component created in a model packaging job. For more information, see <a>StartModelPackagingJob</a>. </p> <note> <p>You can't specify a component with the same <code>ComponentName</code> and <code>Componentversion</code> as an existing component with the same component name and component version.</p> </note>"
-    },
-    "GreengrassOutputDetails":{
-      "type":"structure",
-      "members":{
-        "ComponentVersionArn":{
-          "shape":"ComponentVersionArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) of the component. </p>"
-        },
-        "ComponentName":{
-          "shape":"ComponentName",
-          "documentation":"<p> The name of the component. </p>"
-        },
-        "ComponentVersion":{
-          "shape":"ComponentVersion",
-          "documentation":"<p> The version of the component. </p>"
-        }
-      },
-      "documentation":"<p>Information about the AWS IoT Greengrass component created by a model packaging job. </p>"
-    },
-    "ImageSource":{
-      "type":"structure",
-      "members":{
-        "Type":{
-          "shape":"ImageSourceType",
-          "documentation":"<p>The type of the image.</p>"
-        }
-      },
-      "documentation":"<p>The source for an image.</p>"
-    },
-    "ImageSourceType":{
-      "type":"string",
-      "pattern":"direct"
-    },
-    "InferenceUnits":{
-      "type":"integer",
-      "min":1
-    },
-    "InputS3Object":{
-      "type":"structure",
-      "required":[
-        "Bucket",
-        "Key"
-      ],
-      "members":{
-        "Bucket":{
-          "shape":"S3BucketName",
-          "documentation":"<p>The Amazon S3 bucket that contains the manifest.</p>"
-        },
-        "Key":{
-          "shape":"S3ObjectKey",
-          "documentation":"<p>The name and location of the manifest file withiin the bucket.</p>"
-        },
-        "VersionId":{
-          "shape":"S3ObjectVersion",
-          "documentation":"<p>The version ID of the bucket.</p>"
-        }
-      },
-      "documentation":"<p>Amazon S3 Location information for an input manifest file. </p>"
-    },
-    "Integer":{"type":"integer"},
-    "InternalServerException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"ExceptionString"},
-        "RetryAfterSeconds":{
-          "shape":"RetryAfterSeconds",
-          "documentation":"<p>The period of time, in seconds, before the operation can be retried.</p>",
-          "location":"header",
-          "locationName":"Retry-After"
-        }
-      },
-      "documentation":"<p>Amazon Lookout for Vision experienced a service issue. Try your call again.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true,
-      "fault":true
-    },
-    "IsLabeled":{"type":"boolean"},
-    "KmsKeyId":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"^[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,2048}$"
-    },
-    "ListDatasetEntriesRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "DatasetType"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the dataset that you want to list.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset that you want to list. Specify <code>train</code> to list the training dataset. Specify <code>test</code> to list the test dataset. If you have a single dataset project, specify <code>train</code>.</p>",
-          "location":"uri",
-          "locationName":"datasetType"
-        },
-        "Labeled":{
-          "shape":"IsLabeled",
-          "documentation":"<p>Specify <code>true</code> to include labeled entries, otherwise specify <code>false</code>. If you don't specify a value, Lookout for Vision returns all entries.</p>",
-          "location":"querystring",
-          "locationName":"labeled"
-        },
-        "AnomalyClass":{
-          "shape":"AnomalyClassFilter",
-          "documentation":"<p>Specify <code>normal</code> to include only normal images. Specify <code>anomaly</code> to only include anomalous entries. If you don't specify a value, Amazon Lookout for Vision returns normal and anomalous images.</p>",
-          "location":"querystring",
-          "locationName":"anomalyClass"
-        },
-        "BeforeCreationDate":{
-          "shape":"DateTime",
-          "documentation":"<p>Only includes entries before the specified date in the response. For example, <code>2020-06-23T00:00:00</code>.</p>",
-          "location":"querystring",
-          "locationName":"createdBefore"
-        },
-        "AfterCreationDate":{
-          "shape":"DateTime",
-          "documentation":"<p>Only includes entries after the specified date in the response. For example, <code>2020-06-23T00:00:00</code>.</p>",
-          "location":"querystring",
-          "locationName":"createdAfter"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous response was incomplete (because there is more data to retrieve), Amazon Lookout for Vision returns a pagination token in the response. You can use this pagination token to retrieve the next set of dataset entries.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "MaxResults":{
-          "shape":"PageSize",
-          "documentation":"<p>The maximum number of results to return per paginated call. The largest value you can specify is 100. If you specify a value greater than 100, a ValidationException error occurs. The default value is 100.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
-        "SourceRefContains":{
-          "shape":"QueryString",
-          "documentation":"<p>Perform a \"contains\" search on the values of the <code>source-ref</code> key within the dataset. For example a value of \"IMG_17\" returns all JSON Lines where the <code>source-ref</code> key value matches <i>*IMG_17*</i>.</p>",
-          "location":"querystring",
-          "locationName":"sourceRefContains"
-        }
-      }
-    },
-    "ListDatasetEntriesResponse":{
-      "type":"structure",
-      "members":{
-        "DatasetEntries":{
-          "shape":"DatasetEntryList",
-          "documentation":"<p>A list of the entries (JSON Lines) within the dataset.</p>"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the response is truncated, Amazon Lookout for Vision returns this token that you can use in the subsequent request to retrieve the next set ofdataset entries.</p>"
-        }
-      }
-    },
-    "ListModelPackagingJobsRequest":{
-      "type":"structure",
-      "required":["ProjectName"],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p> The name of the project for which you want to list the model packaging jobs. </p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous response was incomplete (because there is more results to retrieve), Amazon Lookout for Vision returns a pagination token in the response. You can use this pagination token to retrieve the next set of results. </p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "MaxResults":{
-          "shape":"PageSize",
-          "documentation":"<p>The maximum number of results to return per paginated call. The largest value you can specify is 100. If you specify a value greater than 100, a ValidationException error occurs. The default value is 100. </p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListModelPackagingJobsResponse":{
-      "type":"structure",
-      "members":{
-        "ModelPackagingJobs":{
-          "shape":"ModelPackagingJobsList",
-          "documentation":"<p> A list of the model packaging jobs created for the specified Amazon Lookout for Vision project. </p>"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous response was incomplete (because there is more results to retrieve), Amazon Lookout for Vision returns a pagination token in the response. You can use this pagination token to retrieve the next set of results. </p>"
-        }
-      }
-    },
-    "ListModelsRequest":{
-      "type":"structure",
-      "required":["ProjectName"],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model versions that you want to list.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous response was incomplete (because there is more data to retrieve), Amazon Lookout for Vision returns a pagination token in the response. You can use this pagination token to retrieve the next set of models.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "MaxResults":{
-          "shape":"PageSize",
-          "documentation":"<p>The maximum number of results to return per paginated call. The largest value you can specify is 100. If you specify a value greater than 100, a ValidationException error occurs. The default value is 100.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListModelsResponse":{
-      "type":"structure",
-      "members":{
-        "Models":{
-          "shape":"ModelMetadataList",
-          "documentation":"<p>A list of model versions in the specified project. </p>"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the response is truncated, Amazon Lookout for Vision returns this token that you can use in the subsequent request to retrieve the next set of models. </p>"
-        }
-      }
-    },
-    "ListProjectsRequest":{
-      "type":"structure",
-      "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous response was incomplete (because there is more data to retrieve), Amazon Lookout for Vision returns a pagination token in the response. You can use this pagination token to retrieve the next set of projects.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
-        "MaxResults":{
-          "shape":"PageSize",
-          "documentation":"<p>The maximum number of results to return per paginated call. The largest value you can specify is 100. If you specify a value greater than 100, a ValidationException error occurs. The default value is 100.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        }
-      }
-    },
-    "ListProjectsResponse":{
-      "type":"structure",
-      "members":{
-        "Projects":{
-          "shape":"ProjectMetadataList",
-          "documentation":"<p>A list of projects in your AWS account.</p>"
-        },
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the response is truncated, Amazon Lookout for Vision returns this token that you can use in the subsequent request to retrieve the next set of projects.</p>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["ResourceArn"],
-      "members":{
-        "ResourceArn":{
-          "shape":"TagArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model for which you want to list tags. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A map of tag keys and values attached to the specified model.</p>"
-        }
-      }
-    },
-    "ModelArn":{"type":"string"},
-    "ModelDescription":{
-      "type":"structure",
-      "members":{
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model</p>"
-        },
-        "ModelArn":{
-          "shape":"ModelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model.</p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The unix timestamp for the date and time that the model was created. </p>"
-        },
-        "Description":{
-          "shape":"ModelDescriptionMessage",
-          "documentation":"<p>The description for the model.</p>"
-        },
-        "Status":{
-          "shape":"ModelStatus",
-          "documentation":"<p>The status of the model.</p>"
-        },
-        "StatusMessage":{
-          "shape":"ModelStatusMessage",
-          "documentation":"<p>The status message for the model.</p>"
-        },
-        "Performance":{
-          "shape":"ModelPerformance",
-          "documentation":"<p>Performance metrics for the model. Created during training.</p>"
-        },
-        "OutputConfig":{
-          "shape":"OutputConfig",
-          "documentation":"<p>The S3 location where Amazon Lookout for Vision saves model training files.</p>"
-        },
-        "EvaluationManifest":{
-          "shape":"OutputS3Object",
-          "documentation":"<p>The S3 location where Amazon Lookout for Vision saves the manifest file that was used to test the trained model and generate the performance scores.</p>"
-        },
-        "EvaluationResult":{
-          "shape":"OutputS3Object",
-          "documentation":"<p>The S3 location where Amazon Lookout for Vision saves the performance metrics.</p>"
-        },
-        "EvaluationEndTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The unix timestamp for the date and time that the evaluation ended. </p>"
-        },
-        "KmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The identifer for the AWS Key Management Service (AWS KMS) key that was used to encrypt the model during training.</p>"
-        },
-        "MinInferenceUnits":{
-          "shape":"InferenceUnits",
-          "documentation":"<p>The minimum number of inference units used by the model. For more information, see <a>StartModel</a> </p>"
-        },
-        "MaxInferenceUnits":{
-          "shape":"InferenceUnits",
-          "documentation":"<p>The maximum number of inference units Amazon Lookout for Vision uses to auto-scale the model. For more information, see <a>StartModel</a>.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Amazon Lookout for Vision model.</p>"
-    },
-    "ModelDescriptionMessage":{
-      "type":"string",
-      "max":500,
-      "min":1,
-      "pattern":"[0-9A-Za-z\\.\\-_]*"
-    },
-    "ModelHostingStatus":{
-      "type":"string",
-      "enum":[
-        "STARTING_HOSTING",
-        "HOSTED",
-        "HOSTING_FAILED",
-        "STOPPING_HOSTING",
-        "SYSTEM_UPDATING"
-      ]
-    },
-    "ModelMetadata":{
-      "type":"structure",
-      "members":{
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The unix timestamp for the date and time that the model was created. </p>"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model.</p>"
-        },
-        "ModelArn":{
-          "shape":"ModelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model.</p>"
-        },
-        "Description":{
-          "shape":"ModelDescriptionMessage",
-          "documentation":"<p>The description for the model.</p>"
-        },
-        "Status":{
-          "shape":"ModelStatus",
-          "documentation":"<p>The status of the model.</p>"
-        },
-        "StatusMessage":{
-          "shape":"ModelStatusMessage",
-          "documentation":"<p>The status message for the model.</p>"
-        },
-        "Performance":{
-          "shape":"ModelPerformance",
-          "documentation":"<p>Performance metrics for the model. Not available until training has successfully completed.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Amazon Lookout for Vision model.</p>"
-    },
-    "ModelMetadataList":{
-      "type":"list",
-      "member":{"shape":"ModelMetadata"}
-    },
-    "ModelPackagingConfiguration":{
-      "type":"structure",
-      "required":["Greengrass"],
-      "members":{
-        "Greengrass":{
-          "shape":"GreengrassConfiguration",
-          "documentation":"<p> Configuration information for the AWS IoT Greengrass component in a model packaging job. </p>"
-        }
-      },
-      "documentation":"<p> Configuration information for a Amazon Lookout for Vision model packaging job. For more information, see <a>StartModelPackagingJob</a>. </p>"
-    },
-    "ModelPackagingDescription":{
-      "type":"structure",
-      "members":{
-        "JobName":{
-          "shape":"ModelPackagingJobName",
-          "documentation":"<p> The name of the model packaging job. </p>"
-        },
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that's associated with a model that's in the model package. </p>"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model used in the model packaging job. </p>"
-        },
-        "ModelPackagingConfiguration":{
-          "shape":"ModelPackagingConfiguration",
-          "documentation":"<p> The configuration information used in the model packaging job. </p>"
-        },
-        "ModelPackagingJobDescription":{
-          "shape":"ModelPackagingJobDescription",
-          "documentation":"<p>The description for the model packaging job. </p>"
-        },
-        "ModelPackagingMethod":{
-          "shape":"ModelPackagingMethod",
-          "documentation":"<p>The AWS service used to package the job. Currently Lookout for Vision can package jobs with AWS IoT Greengrass. </p>"
-        },
-        "ModelPackagingOutputDetails":{
-          "shape":"ModelPackagingOutputDetails",
-          "documentation":"<p>Information about the output of the model packaging job. For more information, see <a>DescribeModelPackagingJob</a>. </p>"
-        },
-        "Status":{
-          "shape":"ModelPackagingJobStatus",
-          "documentation":"<p> The status of the model packaging job. </p>"
-        },
-        "StatusMessage":{
-          "shape":"ModelPackagingStatusMessage",
-          "documentation":"<p> The status message for the model packaging job. </p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p> The Unix timestamp for the time and date that the model packaging job was created. </p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p> The Unix timestamp for the time and date that the model packaging job was last updated. </p>"
-        }
-      },
-      "documentation":"<p> Information about a model packaging job. For more information, see <a>DescribeModelPackagingJob</a>. </p>"
-    },
-    "ModelPackagingJobDescription":{
-      "type":"string",
-      "max":256,
-      "min":1,
-      "pattern":"[a-zA-Z0-9-_. ()':,;?]+"
-    },
-    "ModelPackagingJobMetadata":{
-      "type":"structure",
-      "members":{
-        "JobName":{
-          "shape":"ModelPackagingJobName",
-          "documentation":"<p> The name of the model packaging job. </p>"
-        },
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p> The project that contains the model that is in the model package. </p>"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p> The version of the model that is in the model package. </p>"
-        },
-        "ModelPackagingJobDescription":{
-          "shape":"ModelPackagingJobDescription",
-          "documentation":"<p> The description for the model packaging job. </p>"
-        },
-        "ModelPackagingMethod":{
-          "shape":"ModelPackagingMethod",
-          "documentation":"<p> The AWS service used to package the job. Currently Lookout for Vision can package jobs with AWS IoT Greengrass. </p>"
-        },
-        "Status":{
-          "shape":"ModelPackagingJobStatus",
-          "documentation":"<p>The status of the model packaging job. </p>"
-        },
-        "StatusMessage":{
-          "shape":"ModelPackagingStatusMessage",
-          "documentation":"<p>The status message for the model packaging job. </p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The Unix timestamp for the time and date that the model packaging job was created.</p>"
-        },
-        "LastUpdatedTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The Unix timestamp for the time and date that the model packaging job was last updated.</p>"
-        }
-      },
-      "documentation":"<p> Metadata for a model packaging job. For more information, see <a>ListModelPackagingJobs</a>. </p>"
-    },
-    "ModelPackagingJobName":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"[a-zA-Z0-9-]+"
-    },
-    "ModelPackagingJobStatus":{
-      "type":"string",
-      "enum":[
-        "CREATED",
-        "RUNNING",
-        "SUCCEEDED",
-        "FAILED"
-      ]
-    },
-    "ModelPackagingJobsList":{
-      "type":"list",
-      "member":{"shape":"ModelPackagingJobMetadata"}
-    },
-    "ModelPackagingMethod":{
-      "type":"string",
-      "max":32,
-      "min":1,
-      "pattern":"^[a-zA-Z0-9]+"
-    },
-    "ModelPackagingOutputDetails":{
-      "type":"structure",
-      "members":{
-        "Greengrass":{
-          "shape":"GreengrassOutputDetails",
-          "documentation":"<p> Information about the AWS IoT Greengrass component in a model packaging job. </p>"
-        }
-      },
-      "documentation":"<p> Information about the output from a model packaging job. </p>"
-    },
-    "ModelPackagingStatusMessage":{"type":"string"},
-    "ModelPerformance":{
-      "type":"structure",
-      "members":{
-        "F1Score":{
-          "shape":"Float",
-          "documentation":"<p>The overall F1 score metric for the trained model.</p>"
-        },
-        "Recall":{
-          "shape":"Float",
-          "documentation":"<p>The overall recall metric value for the trained model. </p>"
-        },
-        "Precision":{
-          "shape":"Float",
-          "documentation":"<p>The overall precision metric value for the trained model.</p>"
-        }
-      },
-      "documentation":"<p>Information about the evaluation performance of a trained model. </p>"
-    },
-    "ModelStatus":{
-      "type":"string",
-      "enum":[
-        "TRAINING",
-        "TRAINED",
-        "TRAINING_FAILED",
-        "STARTING_HOSTING",
-        "HOSTED",
-        "HOSTING_FAILED",
-        "STOPPING_HOSTING",
-        "SYSTEM_UPDATING",
-        "DELETING"
-      ]
-    },
-    "ModelStatusMessage":{"type":"string"},
-    "ModelVersion":{
-      "type":"string",
-      "max":10,
-      "min":1,
-      "pattern":"([1-9][0-9]*|latest)"
-    },
-    "ModelVersionNoLatest":{
-      "type":"string",
-      "max":10,
-      "min":1,
-      "pattern":"([1-9][0-9]*)"
-    },
-    "OutputConfig":{
-      "type":"structure",
-      "required":["S3Location"],
-      "members":{
-        "S3Location":{
-          "shape":"S3Location",
-          "documentation":"<p>The S3 location for the output.</p>"
-        }
-      },
-      "documentation":"<p>The S3 location where Amazon Lookout for Vision saves model training files.</p>"
-    },
-    "OutputS3Object":{
-      "type":"structure",
-      "required":[
-        "Bucket",
-        "Key"
-      ],
-      "members":{
-        "Bucket":{
-          "shape":"S3BucketName",
-          "documentation":"<p>The bucket that contains the training output.</p>"
-        },
-        "Key":{
-          "shape":"S3ObjectKey",
-          "documentation":"<p>The location of the training output in the bucket.</p>"
-        }
-      },
-      "documentation":"<p>The S3 location where Amazon Lookout for Vision saves training output.</p>"
-    },
-    "PageSize":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "PaginationToken":{
-      "type":"string",
-      "max":2048,
-      "pattern":"^[a-zA-Z0-9\\/\\+\\=]{0,2048}$"
-    },
-    "PixelAnomaly":{
-      "type":"structure",
-      "members":{
-        "TotalPercentageArea":{
-          "shape":"Float",
-          "documentation":"<p>The percentage area of the image that the anomaly type covers.</p>"
-        },
-        "Color":{
-          "shape":"Color",
-          "documentation":"<p>A hex color value for the mask that covers an anomaly type. Each anomaly type has a different mask color. The color maps to the color of the anomaly type used in the training dataset. </p>"
-        }
-      },
-      "documentation":"<p>Information about the pixels in an anomaly mask. For more information, see <a>Anomaly</a>. <code>PixelAnomaly</code> is only returned by image segmentation models.</p>"
-    },
-    "ProjectArn":{"type":"string"},
-    "ProjectDescription":{
-      "type":"structure",
-      "members":{
-        "ProjectArn":{
-          "shape":"ProjectArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the project.</p>"
-        },
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project.</p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The unix timestamp for the date and time that the project was created. </p>"
-        },
-        "Datasets":{
-          "shape":"DatasetMetadataList",
-          "documentation":"<p>A list of datasets in the project.</p>"
-        }
-      },
-      "documentation":"<p>Describe an Amazon Lookout for Vision project. For more information, see <a>DescribeProject</a>.</p>"
-    },
-    "ProjectMetadata":{
-      "type":"structure",
-      "members":{
-        "ProjectArn":{
-          "shape":"ProjectArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the project.</p>"
-        },
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project.</p>"
-        },
-        "CreationTimestamp":{
-          "shape":"DateTime",
-          "documentation":"<p>The unix timestamp for the date and time that the project was created. </p>"
-        }
-      },
-      "documentation":"<p>Metadata about an Amazon Lookout for Vision project.</p>"
-    },
-    "ProjectMetadataList":{
-      "type":"list",
-      "member":{"shape":"ProjectMetadata"}
-    },
-    "ProjectName":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_\\-]*"
-    },
-    "QueryString":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":".*\\S.*"
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "required":[
-        "Message",
-        "ResourceId",
-        "ResourceType"
-      ],
-      "members":{
-        "Message":{"shape":"ExceptionString"},
-        "ResourceId":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The resource could not be found.</p>",
-      "error":{"httpStatusCode":404},
-      "exception":true
-    },
-    "ResourceType":{
-      "type":"string",
-      "enum":[
-        "PROJECT",
-        "DATASET",
-        "MODEL",
-        "TRIAL",
-        "MODEL_PACKAGE_JOB"
-      ]
-    },
-    "RetryAfterSeconds":{"type":"integer"},
-    "S3BucketName":{
-      "type":"string",
-      "max":63,
-      "min":3,
-      "pattern":"[0-9A-Za-z\\.\\-_]*"
-    },
-    "S3KeyPrefix":{
-      "type":"string",
-      "max":1024,
-      "pattern":"^([a-zA-Z0-9!_.*'()-][/a-zA-Z0-9!_.*'()-]*)?$"
-    },
-    "S3Location":{
-      "type":"structure",
-      "required":["Bucket"],
-      "members":{
-        "Bucket":{
-          "shape":"S3BucketName",
-          "documentation":"<p>The S3 bucket that contains the training or model packaging job output. If you are training a model, the bucket must in your AWS account. If you use an S3 bucket for a model packaging job, the S3 bucket must be in the same AWS Region and AWS account in which you use AWS IoT Greengrass.</p>"
-        },
-        "Prefix":{
-          "shape":"S3KeyPrefix",
-          "documentation":"<p>The path of the folder, within the S3 bucket, that contains the output.</p>"
-        }
-      },
-      "documentation":"<p>Information about the location of training output or the output of a model packaging job.</p>"
-    },
-    "S3ObjectKey":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":"^([a-zA-Z0-9!_.*'()-][/a-zA-Z0-9!_.*'()-]*)?$"
-    },
-    "S3ObjectVersion":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".*"
-    },
-    "ServiceQuotaExceededException":{
-      "type":"structure",
-      "required":[
-        "Message",
-        "QuotaCode",
-        "ServiceCode"
-      ],
-      "members":{
-        "Message":{"shape":"ExceptionString"},
-        "ResourceId":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The ID of the resource.</p>"
-        },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource.</p>"
-        },
-        "QuotaCode":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The quota code. </p>"
-        },
-        "ServiceCode":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The service code. </p>"
-        }
-      },
-      "documentation":"<p>A service quota was exceeded the allowed limit. For more information, see Limits in Amazon Lookout for Vision in the Amazon Lookout for Vision Developer Guide. </p>",
-      "error":{"httpStatusCode":402},
-      "exception":true
-    },
-    "StartModelPackagingJobRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion",
-        "Configuration"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p> The name of the project which contains the version of the model that you want to package. </p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p> The version of the model within the project that you want to package. </p>"
-        },
-        "JobName":{
-          "shape":"ModelPackagingJobName",
-          "documentation":"<p>A name for the model packaging job. If you don't supply a value, the service creates a job name for you. </p>"
-        },
-        "Configuration":{
-          "shape":"ModelPackagingConfiguration",
-          "documentation":"<p>The configuration for the model packaging job. </p>"
-        },
-        "Description":{
-          "shape":"ModelPackagingJobDescription",
-          "documentation":"<p>A description for the model packaging job. </p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>StartModelPackagingJob</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>StartModelPackagingJob</code>. In this case, safely retry your call to <code>StartModelPackagingJob</code> by using the same <code>ClientToken</code> parameter value.</p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple dataset creation requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>StartModelPackagingJob</code>. An idempotency token is active for 8 hours. </p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "StartModelPackagingJobResponse":{
-      "type":"structure",
-      "members":{
-        "JobName":{
-          "shape":"ModelPackagingJobName",
-          "documentation":"<p>The job name for the model packaging job. If you don't supply a job name in the <code>JobName</code> input parameter, the service creates a job name for you. </p>"
-        }
-      }
-    },
-    "StartModelRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion",
-        "MinInferenceUnits"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model that you want to start.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model that you want to start.</p>",
-          "location":"uri",
-          "locationName":"modelVersion"
-        },
-        "MinInferenceUnits":{
-          "shape":"InferenceUnits",
-          "documentation":"<p>The minimum number of inference units to use. A single inference unit represents 1 hour of processing. Use a higher number to increase the TPS throughput of your model. You are charged for the number of inference units that you use. </p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>StartModel</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>StartModel</code>. In this case, safely retry your call to <code>StartModel</code> by using the same <code>ClientToken</code> parameter value. </p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple start requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>StartModel</code>. An idempotency token is active for 8 hours. </p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        },
-        "MaxInferenceUnits":{
-          "shape":"InferenceUnits",
-          "documentation":"<p>The maximum number of inference units to use for auto-scaling the model. If you don't specify a value, Amazon Lookout for Vision doesn't auto-scale the model.</p>"
-        }
-      }
-    },
-    "StartModelResponse":{
-      "type":"structure",
-      "members":{
-        "Status":{
-          "shape":"ModelHostingStatus",
-          "documentation":"<p>The current running status of the model.</p>"
-        }
-      }
-    },
-    "StopModelRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "ModelVersion"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the model that you want to stop.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "ModelVersion":{
-          "shape":"ModelVersion",
-          "documentation":"<p>The version of the model that you want to stop.</p>",
-          "location":"uri",
-          "locationName":"modelVersion"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>StopModel</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>StopModel</code>. In this case, safely retry your call to <code>StopModel</code> by using the same <code>ClientToken</code> parameter value.</p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple stop requests. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>StopModel</code>. An idempotency token is active for 8 hours. </p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "StopModelResponse":{
-      "type":"structure",
-      "members":{
-        "Status":{
-          "shape":"ModelHostingStatus",
-          "documentation":"<p>The status of the model.</p>"
-        }
-      }
-    },
-    "Stream":{
-      "type":"blob",
-      "requiresLength":true,
-      "streaming":true
-    },
-    "Tag":{
-      "type":"structure",
-      "required":[
-        "Key",
-        "Value"
-      ],
-      "members":{
-        "Key":{
-          "shape":"TagKey",
-          "documentation":"<p>The key of the tag that is attached to the specified model.</p>"
-        },
-        "Value":{
-          "shape":"TagValue",
-          "documentation":"<p>The value of the tag that is attached to the specified model.</p>"
-        }
-      },
-      "documentation":"<p>A key and value pair that is attached to the specified Amazon Lookout for Vision model.</p>"
-    },
-    "TagArn":{
-      "type":"string",
-      "max":1011,
-      "min":1
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":200,
-      "min":0
-    },
-    "TagList":{
-      "type":"list",
-      "member":{"shape":"Tag"},
-      "max":200,
-      "min":0
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "Tags"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"TagArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model to assign the tags.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>The key-value tags to assign to the model.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
-    },
-    "TargetDevice":{
-      "type":"string",
-      "enum":["jetson_xavier"]
-    },
-    "TargetPlatform":{
-      "type":"structure",
-      "required":[
-        "Os",
-        "Arch"
-      ],
-      "members":{
-        "Os":{
-          "shape":"TargetPlatformOs",
-          "documentation":"<p>The target operating system for the model. Linux is the only operating system that is currently supported. </p>"
-        },
-        "Arch":{
-          "shape":"TargetPlatformArch",
-          "documentation":"<p>The target architecture for the model. The currently supported architectures are X86_64 (64-bit version of the x86 instruction set) and ARM_64 (ARMv8 64-bit CPU). </p>"
-        },
-        "Accelerator":{
-          "shape":"TargetPlatformAccelerator",
-          "documentation":"<p>The target accelerator for the model. Currently, Amazon Lookout for Vision only supports NVIDIA (Nvidia graphics processing unit) and CPU accelerators. If you specify NVIDIA as an accelerator, you must also specify the <code>gpu-code</code>, <code>trt-ver</code>, and <code>cuda-ver</code> compiler options. If you don't specify an accelerator, Lookout for Vision uses the CPU for compilation and we highly recommend that you use the <a>GreengrassConfiguration$CompilerOptions</a> field. For example, you can use the following compiler options for CPU: </p> <ul> <li> <p> <code>mcpu</code>: CPU micro-architecture. For example, <code>{'mcpu': 'skylake-avx512'}</code> </p> </li> <li> <p> <code>mattr</code>: CPU flags. For example, <code>{'mattr': ['+neon', '+vfpv4']}</code> </p> </li> </ul>"
-        }
-      },
-      "documentation":"<p>The platform on which a model runs on an AWS IoT Greengrass core device.</p>"
-    },
-    "TargetPlatformAccelerator":{
-      "type":"string",
-      "enum":["NVIDIA"]
-    },
-    "TargetPlatformArch":{
-      "type":"string",
-      "enum":[
-        "ARM64",
-        "X86_64"
-      ]
-    },
-    "TargetPlatformOs":{
-      "type":"string",
-      "enum":["LINUX"]
-    },
-    "ThrottlingException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"ExceptionString"},
-        "QuotaCode":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The quota code. </p>"
-        },
-        "ServiceCode":{
-          "shape":"ExceptionString",
-          "documentation":"<p>The service code. </p>"
-        },
-        "RetryAfterSeconds":{
-          "shape":"RetryAfterSeconds",
-          "documentation":"<p>The period of time, in seconds, before the operation can be retried. </p>",
-          "location":"header",
-          "locationName":"Retry-After"
-        }
-      },
-      "documentation":"<p>Amazon Lookout for Vision is temporarily unable to process the request. Try your call again.</p>",
-      "error":{"httpStatusCode":429},
-      "exception":true
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"TagArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the model from which you want to remove tags. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "TagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>A list of the keys of the tags that you want to remove.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateDatasetEntriesRequest":{
-      "type":"structure",
-      "required":[
-        "ProjectName",
-        "DatasetType",
-        "Changes"
-      ],
-      "members":{
-        "ProjectName":{
-          "shape":"ProjectName",
-          "documentation":"<p>The name of the project that contains the dataset that you want to update.</p>",
-          "location":"uri",
-          "locationName":"projectName"
-        },
-        "DatasetType":{
-          "shape":"DatasetType",
-          "documentation":"<p>The type of the dataset that you want to update. Specify <code>train</code> to update the training dataset. Specify <code>test</code> to update the test dataset. If you have a single dataset project, specify <code>train</code>.</p>",
-          "location":"uri",
-          "locationName":"datasetType"
-        },
-        "Changes":{
-          "shape":"DatasetChanges",
-          "documentation":"<p>The entries to add to the dataset.</p>"
-        },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>ClientToken is an idempotency token that ensures a call to <code>UpdateDatasetEntries</code> completes only once. You choose the value to pass. For example, An issue might prevent you from getting a response from <code>UpdateDatasetEntries</code>. In this case, safely retry your call to <code>UpdateDatasetEntries</code> by using the same <code>ClientToken</code> parameter value.</p> <p>If you don't supply a value for <code>ClientToken</code>, the AWS SDK you are using inserts a value for you. This prevents retries after a network error from making multiple updates with the same dataset entries. You'll need to provide your own value for other use cases. </p> <p>An error occurs if the other input parameters are not the same as in the first request. Using a different value for <code>ClientToken</code> is considered a new call to <code>UpdateDatasetEntries</code>. An idempotency token is active for 8 hours. </p>",
-          "idempotencyToken":true,
-          "location":"header",
-          "locationName":"X-Amzn-Client-Token"
-        }
-      }
-    },
-    "UpdateDatasetEntriesResponse":{
-      "type":"structure",
-      "members":{
-        "Status":{
-          "shape":"DatasetStatus",
-          "documentation":"<p>The status of the dataset update.</p>"
-        }
-      }
-    },
-    "ValidationException":{
-      "type":"structure",
-      "required":["Message"],
-      "members":{
-        "Message":{"shape":"ExceptionString"}
-      },
-      "documentation":"<p>An input validation error occured. For example, invalid characters in a project name, or if a pagination token is invalid.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    }
-  },
-  "documentation":"<p>This is the Amazon Lookout for Vision API Reference. It provides descriptions of actions, data types, common parameters, and common errors.</p> <p>Amazon Lookout for Vision enables you to find visual defects in industrial products, accurately and at scale. It uses computer vision to identify missing components in an industrial product, damage to vehicles or structures, irregularities in production lines, and even minuscule defects in silicon wafers — or any other physical item where quality is important such as a missing capacitor on printed circuit boards.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/m2/2021-04-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/m2/2021-04-28/paginators-1.json 2.31.35-1/awscli/botocore/data/m2/2021-04-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/m2/2021-04-28/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/m2/2021-04-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,6 +53,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "environments"
+    },
+    "ListDataSetExportHistory": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dataSetExportTasks"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/m2/2021-04-28/service-2.json 2.31.35-1/awscli/botocore/data/m2/2021-04-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/m2/2021-04-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/m2/2021-04-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,6 +53,27 @@
       "documentation":"<p>Creates a new application with given parameters. Requires an existing runtime environment and application definition file.</p>",
       "idempotent":true
     },
+    "CreateDataSetExportTask":{
+      "name":"CreateDataSetExportTask",
+      "http":{
+        "method":"POST",
+        "requestUri":"/applications/{applicationId}/dataset-export-task",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateDataSetExportTaskRequest"},
+      "output":{"shape":"CreateDataSetExportTaskResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Starts a data set export task for a specific application.</p>",
+      "idempotent":true
+    },
     "CreateDataSetImportTask":{
       "name":"CreateDataSetImportTask",
       "http":{
@@ -247,6 +268,24 @@
       ],
       "documentation":"<p>Gets the details of a specific data set.</p>"
     },
+    "GetDataSetExportTask":{
+      "name":"GetDataSetExportTask",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/dataset-export-tasks/{taskId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDataSetExportTaskRequest"},
+      "output":{"shape":"GetDataSetExportTaskResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets the status of a data set import task initiated with the <a>CreateDataSetExportTask</a> operation.</p>"
+    },
     "GetDataSetImportTask":{
       "name":"GetDataSetImportTask",
       "http":{
@@ -406,6 +445,24 @@
       ],
       "documentation":"<p>Lists all the job steps for a JCL file to restart a batch job. This is only applicable for Micro Focus engine with versions 8.0.6 and above.</p>"
     },
+    "ListDataSetExportHistory":{
+      "name":"ListDataSetExportHistory",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/dataset-export-tasks",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDataSetExportHistoryRequest"},
+      "output":{"shape":"ListDataSetExportHistoryResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the data set exports for the specified application.</p>"
+    },
     "ListDataSetImportHistory":{
       "name":"ListDataSetImportHistory",
       "http":{
@@ -1114,6 +1171,44 @@
         }
       }
     },
+    "CreateDataSetExportTaskRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "exportConfig"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"Identifier",
+          "documentation":"<p>The unique identifier of the application for which you want to export data sets.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier you provide to ensure the idempotency of the request to create a data set export. The service generates the clientToken when the API call is triggered. The token expires after one hour, so if you retry the API within this timeframe with the same clientToken, you will get the same response. The service also handles deleting the clientToken after it expires.</p>",
+          "idempotencyToken":true
+        },
+        "exportConfig":{
+          "shape":"DataSetExportConfig",
+          "documentation":"<p>The data set export task configuration.</p>"
+        },
+        "kmsKeyId":{
+          "shape":"KMSKeyId",
+          "documentation":"<p>The identifier of a customer managed key.</p>"
+        }
+      }
+    },
+    "CreateDataSetExportTaskResponse":{
+      "type":"structure",
+      "required":["taskId"],
+      "members":{
+        "taskId":{
+          "shape":"Identifier",
+          "documentation":"<p>The task identifier. This operation is asynchronous. Use this identifier with the <a>GetDataSetExportTask</a> operation to obtain the status of this task.</p>"
+        }
+      }
+    },
     "CreateDataSetImportTaskRequest":{
       "type":"structure",
       "required":[
@@ -1299,6 +1394,109 @@
       },
       "documentation":"<p>Defines a data set.</p>"
     },
+    "DataSetExportConfig":{
+      "type":"structure",
+      "members":{
+        "dataSets":{
+          "shape":"DataSetExportList",
+          "documentation":"<p>The data sets.</p>"
+        },
+        "s3Location":{
+          "shape":"String",
+          "documentation":"<p>The Amazon S3 location of the data sets.</p>"
+        }
+      },
+      "documentation":"<p>Identifies one or more data sets you want to import with the <a>CreateDataSetExportTask</a> operation.</p>",
+      "union":true
+    },
+    "DataSetExportItem":{
+      "type":"structure",
+      "required":[
+        "datasetName",
+        "externalLocation"
+      ],
+      "members":{
+        "datasetName":{
+          "shape":"String200",
+          "documentation":"<p>The data set.</p>"
+        },
+        "externalLocation":{
+          "shape":"ExternalLocation",
+          "documentation":"<p>The location of the data set.</p>"
+        }
+      },
+      "documentation":"<p>Identifies a specific data set to export from an external location.</p>"
+    },
+    "DataSetExportList":{
+      "type":"list",
+      "member":{"shape":"DataSetExportItem"},
+      "max":1024,
+      "min":1
+    },
+    "DataSetExportSummary":{
+      "type":"structure",
+      "required":[
+        "failed",
+        "inProgress",
+        "pending",
+        "succeeded",
+        "total"
+      ],
+      "members":{
+        "failed":{
+          "shape":"Integer",
+          "documentation":"<p>The number of data set exports that have failed.</p>"
+        },
+        "inProgress":{
+          "shape":"Integer",
+          "documentation":"<p>The number of data set exports that are in progress.</p>"
+        },
+        "pending":{
+          "shape":"Integer",
+          "documentation":"<p>The number of data set exports that are pending.</p>"
+        },
+        "succeeded":{
+          "shape":"Integer",
+          "documentation":"<p>The number of data set exports that have succeeded.</p>"
+        },
+        "total":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of data set exports.</p>"
+        }
+      },
+      "documentation":"<p>Represents a summary of data set exports.</p>"
+    },
+    "DataSetExportTask":{
+      "type":"structure",
+      "required":[
+        "status",
+        "summary",
+        "taskId"
+      ],
+      "members":{
+        "status":{
+          "shape":"DataSetTaskLifecycle",
+          "documentation":"<p>The status of the data set export task.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>If dataset exports failed, the failure reason will show here.</p>"
+        },
+        "summary":{
+          "shape":"DataSetExportSummary",
+          "documentation":"<p>A summary of the data set export task.</p>"
+        },
+        "taskId":{
+          "shape":"Identifier",
+          "documentation":"<p>The identifier of the data set export task.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a data set export task.</p>"
+    },
+    "DataSetExportTaskList":{
+      "type":"list",
+      "member":{"shape":"DataSetExportTask"}
+    },
     "DataSetImportConfig":{
       "type":"structure",
       "members":{
@@ -2196,6 +2394,56 @@
         }
       }
     },
+    "GetDataSetExportTaskRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "taskId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"Identifier",
+          "documentation":"<p>The application identifier.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "taskId":{
+          "shape":"Identifier",
+          "documentation":"<p>The task identifier returned by the <a>CreateDataSetExportTask</a> operation.</p>",
+          "location":"uri",
+          "locationName":"taskId"
+        }
+      }
+    },
+    "GetDataSetExportTaskResponse":{
+      "type":"structure",
+      "required":[
+        "status",
+        "taskId"
+      ],
+      "members":{
+        "kmsKeyArn":{
+          "shape":"String",
+          "documentation":"<p>The identifier of a customer managed key used for exported data set encryption.</p>"
+        },
+        "status":{
+          "shape":"DataSetTaskLifecycle",
+          "documentation":"<p>The status of the task.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>If dataset export failed, the failure reason will show here.</p>"
+        },
+        "summary":{
+          "shape":"DataSetExportSummary",
+          "documentation":"<p>A summary of the status of the task.</p>"
+        },
+        "taskId":{
+          "shape":"Identifier",
+          "documentation":"<p>The task identifier.</p>"
+        }
+      }
+    },
     "GetDataSetImportTaskRequest":{
       "type":"structure",
       "required":[
@@ -2498,6 +2746,19 @@
           "shape":"Integer",
           "documentation":"<p>The number of a procedure step.</p>"
         },
+        "stepCheckpoint":{
+          "shape":"Integer",
+          "documentation":"<p>A registered step-level checkpoint identifier that can be used for restarting an Amazon Web Services Blu Age application batch job.</p>",
+          "box":true
+        },
+        "stepCheckpointStatus":{
+          "shape":"String",
+          "documentation":"<p>The step-level checkpoint status for an Amazon Web Services Blu Age application batch job.</p>"
+        },
+        "stepCheckpointTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The step-level checkpoint status for an Amazon Web Services Blu Age application batch job.</p>"
+        },
         "stepCondCode":{
           "shape":"String",
           "documentation":"<p>The condition code of a step.</p>"
@@ -2529,6 +2790,16 @@
           "shape":"String",
           "documentation":"<p>The step name that a batch job was restarted from.</p>"
         },
+        "skip":{
+          "shape":"Boolean",
+          "documentation":"<p>The step-level checkpoint timestamp (creation or last modification) for an Amazon Web Services Blu Age application batch job.</p>",
+          "box":true
+        },
+        "stepCheckpoint":{
+          "shape":"Integer",
+          "documentation":"<p>Skip selected step and issue a restart from immediate successor step for an Amazon Web Services Blu Age application batch job.</p>",
+          "box":true
+        },
         "toProcStep":{
           "shape":"String",
           "documentation":"<p>The procedure step name that a batch job was restarted to.</p>"
@@ -2540,6 +2811,12 @@
       },
       "documentation":"<p>Provides step/procedure step information for a restart batch job operation.</p>"
     },
+    "KMSKeyId":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"^[a-zA-Z0-9:/_-]+$"
+    },
     "ListApplicationVersionsRequest":{
       "type":"structure",
       "required":["applicationId"],
@@ -2769,6 +3046,44 @@
         }
       }
     },
+    "ListDataSetExportHistoryRequest":{
+      "type":"structure",
+      "required":["applicationId"],
+      "members":{
+        "applicationId":{
+          "shape":"Identifier",
+          "documentation":"<p>The unique identifier of the application.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of objects to return.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token returned from a previous call to this operation. This specifies the next item to return. To return to the beginning of the list, exclude this parameter.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListDataSetExportHistoryResponse":{
+      "type":"structure",
+      "required":["dataSetExportTasks"],
+      "members":{
+        "dataSetExportTasks":{
+          "shape":"DataSetExportTaskList",
+          "documentation":"<p>The data set export tasks.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are more items to return, this contains a token that is passed to a subsequent call to this operation to retrieve the next set of items.</p>"
+        }
+      }
+    },
     "ListDataSetImportHistoryRequest":{
       "type":"structure",
       "required":["applicationId"],
diff -pruN 2.23.6-1/awscli/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/machinelearning/2014-12-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/machinelearning/2014-12-12/service-2.json 2.31.35-1/awscli/botocore/data/machinelearning/2014-12-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/machinelearning/2014-12-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/machinelearning/2014-12-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"machinelearning",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Machine Learning",
     "serviceId":"Machine Learning",
     "signatureVersion":"v4",
     "targetPrefix":"AmazonML_20141212",
-    "uid":"machinelearning-2014-12-12"
+    "uid":"machinelearning-2014-12-12",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddTags":{
diff -pruN 2.23.6-1/awscli/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/macie2/2020-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/macie2/2020-01-01/service-2.json 2.31.35-1/awscli/botocore/data/macie2/2020-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/macie2/2020-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/macie2/2020-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2485,9 +2485,7 @@
         "shape": "ListManagedDataIdentifiersResponse",
         "documentation": "<p>The request succeeded.</p>"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Retrieves information about all the managed data identifiers that Amazon Macie currently provides.</p>"
     },
     "ListMembers": {
@@ -2714,9 +2712,7 @@
         "shape": "ListTagsForResourceResponse",
         "documentation": "<p>The request succeeded.</p>"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Retrieves the tags (keys and values) that are associated with an Amazon Macie resource.</p>"
     },
     "PutClassificationExportConfiguration": {
@@ -2871,9 +2867,7 @@
         "shape": "TagResourceResponse",
         "documentation": "<p>The request succeeded and there isn't any content to include in the body of the response (No Content).</p>"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Adds or updates one or more tags (keys and values) that are associated with an Amazon Macie resource.</p>"
     },
     "TestCustomDataIdentifier": {
@@ -2936,9 +2930,7 @@
         "shape": "UntagResourceResponse",
         "documentation": "<p>The request succeeded and there isn't any content to include in the body of the response (No Content).</p>"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Removes one or more tags (keys and values) from an Amazon Macie resource.</p>"
     },
     "UpdateAllowList": {
@@ -3464,8 +3456,7 @@
     },
     "AcceptInvitationResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "AccessControlList": {
       "type": "structure",
@@ -4879,8 +4870,7 @@
     },
     "CreateSampleFindingsResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "CriteriaBlockForJob": {
       "type": "structure",
@@ -5049,8 +5039,7 @@
     },
     "DailySchedule": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "<p>Specifies that a classification job runs once a day, every day. This is an empty object.</p>"
     },
     "DataIdentifierSeverity": {
@@ -5155,8 +5144,7 @@
     },
     "DeleteAllowListResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeleteCustomDataIdentifierRequest": {
       "type": "structure",
@@ -5174,8 +5162,7 @@
     },
     "DeleteCustomDataIdentifierResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeleteFindingsFilterRequest": {
       "type": "structure",
@@ -5193,8 +5180,7 @@
     },
     "DeleteFindingsFilterResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeleteInvitationsRequest": {
       "type": "structure",
@@ -5235,8 +5221,7 @@
     },
     "DeleteMemberResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DescribeBucketsRequest": {
       "type": "structure",
@@ -5405,8 +5390,7 @@
     },
     "DescribeOrganizationConfigurationRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DescribeOrganizationConfigurationResponse": {
       "type": "structure",
@@ -5475,13 +5459,11 @@
     },
     "DisableMacieRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisableMacieResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisableOrganizationAdminAccountRequest": {
       "type": "structure",
@@ -5499,28 +5481,23 @@
     },
     "DisableOrganizationAdminAccountResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisassociateFromAdministratorAccountRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisassociateFromAdministratorAccountResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisassociateFromMasterAccountRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisassociateFromMasterAccountResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DisassociateMemberRequest": {
       "type": "structure",
@@ -5538,8 +5515,7 @@
     },
     "DisassociateMemberResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DomainDetails": {
       "type": "structure",
@@ -5562,8 +5538,7 @@
     },
     "Empty": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "<p>The request succeeded and there isn't any content to include in the body of the response (No Content).</p>"
     },
     "EnableMacieRequest": {
@@ -5589,8 +5564,7 @@
     },
     "EnableMacieResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "EnableOrganizationAdminAccountRequest": {
       "type": "structure",
@@ -5613,8 +5587,7 @@
     },
     "EnableOrganizationAdminAccountResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "EncryptionType": {
       "type": "string",
@@ -5916,8 +5889,7 @@
     },
     "GetAdministratorAccountRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetAdministratorAccountResponse": {
       "type": "structure",
@@ -5995,8 +5967,7 @@
     },
     "GetAutomatedDiscoveryConfigurationRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetAutomatedDiscoveryConfigurationResponse": {
       "type": "structure",
@@ -6125,8 +6096,7 @@
     },
     "GetClassificationExportConfigurationRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetClassificationExportConfigurationResponse": {
       "type": "structure",
@@ -6350,8 +6320,7 @@
     },
     "GetFindingsPublicationConfigurationRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetFindingsPublicationConfigurationResponse": {
       "type": "structure",
@@ -6393,8 +6362,7 @@
     },
     "GetInvitationsCountRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetInvitationsCountResponse": {
       "type": "structure",
@@ -6408,8 +6376,7 @@
     },
     "GetMacieSessionRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetMacieSessionResponse": {
       "type": "structure",
@@ -6443,8 +6410,7 @@
     },
     "GetMasterAccountRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetMasterAccountResponse": {
       "type": "structure",
@@ -6561,8 +6527,7 @@
     },
     "GetRevealConfigurationRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "GetRevealConfigurationResponse": {
       "type": "structure",
@@ -8134,8 +8099,7 @@
     },
     "PutFindingsPublicationConfigurationResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "Range": {
       "type": "structure",
@@ -9405,8 +9369,7 @@
     },
     "TagResourceResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "TagScopeTerm": {
       "type": "structure",
@@ -9623,8 +9586,7 @@
     },
     "UntagResourceResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateAllowListRequest": {
       "type": "structure",
@@ -9692,8 +9654,7 @@
     },
     "UpdateAutomatedDiscoveryConfigurationResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateClassificationJobRequest": {
       "type": "structure",
@@ -9717,8 +9678,7 @@
     },
     "UpdateClassificationJobResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateClassificationScopeRequest": {
       "type": "structure",
@@ -9741,8 +9701,7 @@
     },
     "UpdateClassificationScopeResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateFindingsFilterRequest": {
       "type": "structure",
@@ -9821,8 +9780,7 @@
     },
     "UpdateMacieSessionResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateMemberSessionRequest": {
       "type": "structure",
@@ -9846,8 +9804,7 @@
     },
     "UpdateMemberSessionResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateOrganizationConfigurationRequest": {
       "type": "structure",
@@ -9864,8 +9821,7 @@
     },
     "UpdateOrganizationConfigurationResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateResourceProfileDetectionsRequest": {
       "type": "structure",
@@ -9888,8 +9844,7 @@
     },
     "UpdateResourceProfileDetectionsResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateResourceProfileRequest": {
       "type": "structure",
@@ -9912,8 +9867,7 @@
     },
     "UpdateResourceProfileResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateRetrievalConfiguration": {
       "type": "structure",
@@ -9998,8 +9952,7 @@
     },
     "UpdateSensitivityInspectionTemplateResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UsageByAccount": {
       "type": "structure",
diff -pruN 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/paginators-1.json 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,6 +53,24 @@
       "output_token": "NextToken",
       "limit_key": "PageSize",
       "result_key": "TrafficPolicies"
+    },
+    "ListAddressListImportJobs": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "ImportJobs"
+    },
+    "ListAddressLists": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "AddressLists"
+    },
+    "ListMembersOfAddressList": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "Addresses"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/service-2.json 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/service-2.json
--- 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-10-17",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"mail-manager",
     "jsonVersion":"1.0",
     "protocol":"json",
@@ -11,8 +12,7 @@
     "signatureVersion":"v4",
     "signingName":"ses",
     "targetPrefix":"MailManagerSvc",
-    "uid":"mailmanager-2023-10-17",
-    "auth":["aws.auth#sigv4"]
+    "uid":"mailmanager-2023-10-17"
   },
   "operations":{
     "CreateAddonInstance":{
@@ -48,6 +48,41 @@
       "documentation":"<p>Creates a subscription for an Add On representing the acceptance of its terms of use and additional pricing. The subscription can then be used to create an instance for use in rule sets or traffic policies.</p>",
       "idempotent":true
     },
+    "CreateAddressList":{
+      "name":"CreateAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateAddressListRequest"},
+      "output":{"shape":"CreateAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a new address list.</p>",
+      "idempotent":true
+    },
+    "CreateAddressListImportJob":{
+      "name":"CreateAddressListImportJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateAddressListImportJobRequest"},
+      "output":{"shape":"CreateAddressListImportJobResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates an import job for an address list.</p>",
+      "idempotent":true
+    },
     "CreateArchive":{
       "name":"CreateArchive",
       "http":{
@@ -160,6 +195,22 @@
       "documentation":"<p>Deletes an Add On subscription.</p>",
       "idempotent":true
     },
+    "DeleteAddressList":{
+      "name":"DeleteAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteAddressListRequest"},
+      "output":{"shape":"DeleteAddressListResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes an address list.</p>",
+      "idempotent":true
+    },
     "DeleteArchive":{
       "name":"DeleteArchive",
       "http":{
@@ -240,6 +291,23 @@
       "documentation":"<p>Delete a traffic policy resource.</p>",
       "idempotent":true
     },
+    "DeregisterMemberFromAddressList":{
+      "name":"DeregisterMemberFromAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeregisterMemberFromAddressListRequest"},
+      "output":{"shape":"DeregisterMemberFromAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Removes a member from an address list.</p>",
+      "idempotent":true
+    },
     "GetAddonInstance":{
       "name":"GetAddonInstance",
       "http":{
@@ -268,6 +336,38 @@
       ],
       "documentation":"<p>Gets detailed information about an Add On subscription.</p>"
     },
+    "GetAddressList":{
+      "name":"GetAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAddressListRequest"},
+      "output":{"shape":"GetAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Fetch attributes of an address list.</p>"
+    },
+    "GetAddressListImportJob":{
+      "name":"GetAddressListImportJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAddressListImportJobRequest"},
+      "output":{"shape":"GetAddressListImportJobResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Fetch attributes of an import job.</p>"
+    },
     "GetArchive":{
       "name":"GetArchive",
       "http":{
@@ -374,6 +474,22 @@
       ],
       "documentation":"<p>Fetch ingress endpoint resource attributes.</p>"
     },
+    "GetMemberOfAddressList":{
+      "name":"GetMemberOfAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetMemberOfAddressListRequest"},
+      "output":{"shape":"GetMemberOfAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Fetch attributes of a member in an address list.</p>"
+    },
     "GetRelay":{
       "name":"GetRelay",
       "http":{
@@ -442,6 +558,37 @@
       ],
       "documentation":"<p>Lists all Add On subscriptions in your account.</p>"
     },
+    "ListAddressListImportJobs":{
+      "name":"ListAddressListImportJobs",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAddressListImportJobsRequest"},
+      "output":{"shape":"ListAddressListImportJobsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists jobs for an address list.</p>"
+    },
+    "ListAddressLists":{
+      "name":"ListAddressLists",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAddressListsRequest"},
+      "output":{"shape":"ListAddressListsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists address lists for this account.</p>"
+    },
     "ListArchiveExports":{
       "name":"ListArchiveExports",
       "http":{
@@ -502,6 +649,22 @@
       ],
       "documentation":"<p>List all ingress endpoint resources.</p>"
     },
+    "ListMembersOfAddressList":{
+      "name":"ListMembersOfAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListMembersOfAddressListRequest"},
+      "output":{"shape":"ListMembersOfAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Lists members of an address list.</p>"
+    },
     "ListRelays":{
       "name":"ListRelays",
       "http":{
@@ -555,6 +718,43 @@
       ],
       "documentation":"<p>List traffic policy resources.</p>"
     },
+    "RegisterMemberToAddressList":{
+      "name":"RegisterMemberToAddressList",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"RegisterMemberToAddressListRequest"},
+      "output":{"shape":"RegisterMemberToAddressListResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Adds a member to an address list.</p>",
+      "idempotent":true
+    },
+    "StartAddressListImportJob":{
+      "name":"StartAddressListImportJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartAddressListImportJobRequest"},
+      "output":{"shape":"StartAddressListImportJobResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Starts an import job for an address list.</p>",
+      "idempotent":true
+    },
     "StartArchiveExport":{
       "name":"StartArchiveExport",
       "http":{
@@ -590,6 +790,24 @@
       ],
       "documentation":"<p>Initiates a search across emails in the specified archive.</p>"
     },
+    "StopAddressListImportJob":{
+      "name":"StopAddressListImportJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StopAddressListImportJobRequest"},
+      "output":{"shape":"StopAddressListImportJobResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Stops an ongoing import job for an address list.</p>",
+      "idempotent":true
+    },
     "StopArchiveExport":{
       "name":"StopArchiveExport",
       "http":{
@@ -782,21 +1000,21 @@
     "AddonInstance":{
       "type":"structure",
       "members":{
-        "AddonInstanceArn":{
-          "shape":"AddonInstanceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Add On instance.</p>"
-        },
         "AddonInstanceId":{
           "shape":"AddonInstanceId",
           "documentation":"<p>The unique ID of the Add On instance.</p>"
         },
+        "AddonSubscriptionId":{
+          "shape":"AddonSubscriptionId",
+          "documentation":"<p>The subscription ID for the instance.</p>"
+        },
         "AddonName":{
           "shape":"AddonName",
           "documentation":"<p>The name of the Add On for the instance.</p>"
         },
-        "AddonSubscriptionId":{
-          "shape":"AddonSubscriptionId",
-          "documentation":"<p>The subscription ID for the instance.</p>"
+        "AddonInstanceArn":{
+          "shape":"AddonInstanceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Add On instance.</p>"
         },
         "CreatedTimestamp":{
           "shape":"Timestamp",
@@ -810,7 +1028,7 @@
       "type":"string",
       "max":67,
       "min":4,
-      "pattern":"^ai-[a-zA-Z0-9]{1,64}$"
+      "pattern":"ai-[a-zA-Z0-9]{1,64}"
     },
     "AddonInstances":{
       "type":"list",
@@ -820,6 +1038,10 @@
     "AddonSubscription":{
       "type":"structure",
       "members":{
+        "AddonSubscriptionId":{
+          "shape":"AddonSubscriptionId",
+          "documentation":"<p>The unique ID of the Add On subscription.</p>"
+        },
         "AddonName":{
           "shape":"AddonName",
           "documentation":"<p>The name of the Add On.</p>"
@@ -828,10 +1050,6 @@
           "shape":"AddonSubscriptionArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Add On subscription.</p>"
         },
-        "AddonSubscriptionId":{
-          "shape":"AddonSubscriptionId",
-          "documentation":"<p>The unique ID of the Add On subscription.</p>"
-        },
         "CreatedTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the Add On subscription was created.</p>"
@@ -844,12 +1062,90 @@
       "type":"string",
       "max":67,
       "min":4,
-      "pattern":"^as-[a-zA-Z0-9]{1,64}$"
+      "pattern":"as-[a-zA-Z0-9]{1,64}"
     },
     "AddonSubscriptions":{
       "type":"list",
       "member":{"shape":"AddonSubscription"}
     },
+    "Address":{
+      "type":"string",
+      "max":320,
+      "min":3,
+      "sensitive":true
+    },
+    "AddressFilter":{
+      "type":"structure",
+      "members":{
+        "AddressPrefix":{
+          "shape":"AddressPrefix",
+          "documentation":"<p>Filter to limit the results to addresses having the provided prefix.</p>"
+        }
+      },
+      "documentation":"<p>Filtering options for ListMembersOfAddressList operation.</p>"
+    },
+    "AddressList":{
+      "type":"structure",
+      "required":[
+        "AddressListId",
+        "AddressListArn",
+        "AddressListName",
+        "CreatedTimestamp",
+        "LastUpdatedTimestamp"
+      ],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The identifier of the address list.</p>"
+        },
+        "AddressListArn":{
+          "shape":"AddressListArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the address list.</p>"
+        },
+        "AddressListName":{
+          "shape":"AddressListName",
+          "documentation":"<p>The user-friendly name of the address list.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the address list was created.</p>"
+        },
+        "LastUpdatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the address list was last updated.</p>"
+        }
+      },
+      "documentation":"<p>An address list contains a list of emails and domains that are used in MailManager Ingress endpoints and Rules for email management.</p>"
+    },
+    "AddressListArn":{"type":"string"},
+    "AddressListId":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-]+"
+    },
+    "AddressListName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.-]+"
+    },
+    "AddressLists":{
+      "type":"list",
+      "member":{"shape":"AddressList"}
+    },
+    "AddressPageSize":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "AddressPrefix":{
+      "type":"string",
+      "max":320,
+      "min":1,
+      "sensitive":true
+    },
     "Analysis":{
       "type":"structure",
       "required":[
@@ -870,7 +1166,7 @@
     },
     "AnalyzerArn":{
       "type":"string",
-      "pattern":"^[a-zA-Z0-9:_/+=,@.#-]+$"
+      "pattern":"[a-zA-Z0-9:_/+=,@.#-]+"
     },
     "Archive":{
       "type":"structure",
@@ -954,13 +1250,13 @@
     "ArchiveFilterCondition":{
       "type":"structure",
       "members":{
-        "BooleanExpression":{
-          "shape":"ArchiveBooleanExpression",
-          "documentation":"<p>A boolean expression to evaluate against email attributes.</p>"
-        },
         "StringExpression":{
           "shape":"ArchiveStringExpression",
           "documentation":"<p>A string expression to evaluate against email attributes.</p>"
+        },
+        "BooleanExpression":{
+          "shape":"ArchiveBooleanExpression",
+          "documentation":"<p>A boolean expression to evaluate against email attributes.</p>"
         }
       },
       "documentation":"<p>A filter condition used to include or exclude emails when exporting from or searching an archive.</p>",
@@ -990,7 +1286,7 @@
       "type":"string",
       "max":66,
       "min":3,
-      "pattern":"^a-[\\w]{1,64}$"
+      "pattern":"a-[\\w]{1,64}"
     },
     "ArchiveIdString":{
       "type":"string",
@@ -1001,7 +1297,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]$"
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]"
     },
     "ArchiveRetention":{
       "type":"structure",
@@ -1091,15 +1387,15 @@
       "type":"structure",
       "required":["AddonSubscriptionId"],
       "members":{
-        "AddonSubscriptionId":{
-          "shape":"AddonSubscriptionId",
-          "documentation":"<p>The unique ID of a previously created subscription that an Add On instance is created for. You can only have one instance per subscription.</p>"
-        },
         "ClientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
           "idempotencyToken":true
         },
+        "AddonSubscriptionId":{
+          "shape":"AddonSubscriptionId",
+          "documentation":"<p>The unique ID of a previously created subscription that an Add On instance is created for. You can only have one instance per subscription.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -1120,15 +1416,15 @@
       "type":"structure",
       "required":["AddonName"],
       "members":{
-        "AddonName":{
-          "shape":"AddonName",
-          "documentation":"<p>The name of the Add On to subscribe to. You can only have one subscription for each Add On name.</p>"
-        },
         "ClientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
           "idempotencyToken":true
         },
+        "AddonName":{
+          "shape":"AddonName",
+          "documentation":"<p>The name of the Add On to subscribe to. You can only have one subscription for each Add On name.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -1145,27 +1441,100 @@
         }
       }
     },
+    "CreateAddressListImportJobRequest":{
+      "type":"structure",
+      "required":[
+        "AddressListId",
+        "Name",
+        "ImportDataFormat"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
+          "idempotencyToken":true
+        },
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list for importing addresses to.</p>"
+        },
+        "Name":{
+          "shape":"JobName",
+          "documentation":"<p>A user-friendly name for the import job.</p>"
+        },
+        "ImportDataFormat":{
+          "shape":"ImportDataFormat",
+          "documentation":"<p>The format of the input for an import job.</p>"
+        }
+      }
+    },
+    "CreateAddressListImportJobResponse":{
+      "type":"structure",
+      "required":[
+        "JobId",
+        "PreSignedUrl"
+      ],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the created import job.</p>"
+        },
+        "PreSignedUrl":{
+          "shape":"PreSignedUrl",
+          "documentation":"<p>The pre-signed URL target for uploading the input file.</p>"
+        }
+      }
+    },
+    "CreateAddressListRequest":{
+      "type":"structure",
+      "required":["AddressListName"],
+      "members":{
+        "ClientToken":{
+          "shape":"IdempotencyToken",
+          "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
+          "idempotencyToken":true
+        },
+        "AddressListName":{
+          "shape":"AddressListName",
+          "documentation":"<p>A user-friendly name for the address list.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
+        }
+      }
+    },
+    "CreateAddressListResponse":{
+      "type":"structure",
+      "required":["AddressListId"],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The identifier of the created address list.</p>"
+        }
+      }
+    },
     "CreateArchiveRequest":{
       "type":"structure",
       "required":["ArchiveName"],
       "members":{
-        "ArchiveName":{
-          "shape":"ArchiveNameString",
-          "documentation":"<p>A unique name for the new archive.</p>"
-        },
         "ClientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique token Amazon SES uses to recognize retries of this request.</p>",
           "idempotencyToken":true
         },
-        "KmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key for encrypting emails in the archive.</p>"
+        "ArchiveName":{
+          "shape":"ArchiveNameString",
+          "documentation":"<p>A unique name for the new archive.</p>"
         },
         "Retention":{
           "shape":"ArchiveRetention",
           "documentation":"<p>The period for retaining emails in the archive before automatic deletion.</p>"
         },
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key for encrypting emails in the archive.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -1188,9 +1557,9 @@
       "type":"structure",
       "required":[
         "IngressPointName",
+        "Type",
         "RuleSetId",
-        "TrafficPolicyId",
-        "Type"
+        "TrafficPolicyId"
       ],
       "members":{
         "ClientToken":{
@@ -1198,29 +1567,33 @@
           "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
           "idempotencyToken":true
         },
-        "IngressPointConfiguration":{
-          "shape":"IngressPointConfiguration",
-          "documentation":"<p>If you choose an Authenticated ingress endpoint, you must configure either an SMTP password or a secret ARN.</p>"
-        },
         "IngressPointName":{
           "shape":"IngressPointName",
           "documentation":"<p>A user friendly name for an ingress endpoint resource.</p>"
         },
+        "Type":{
+          "shape":"IngressPointType",
+          "documentation":"<p>The type of the ingress endpoint to create.</p>"
+        },
         "RuleSetId":{
           "shape":"RuleSetId",
           "documentation":"<p>The identifier of an existing rule set that you attach to an ingress endpoint resource.</p>"
         },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
-        },
         "TrafficPolicyId":{
           "shape":"TrafficPolicyId",
           "documentation":"<p>The identifier of an existing traffic policy that you attach to an ingress endpoint resource.</p>"
         },
-        "Type":{
-          "shape":"IngressPointType",
-          "documentation":"<p>The type of the ingress endpoint to create.</p>"
+        "IngressPointConfiguration":{
+          "shape":"IngressPointConfiguration",
+          "documentation":"<p>If you choose an Authenticated ingress endpoint, you must configure either an SMTP password or a secret ARN.</p>"
+        },
+        "NetworkConfiguration":{
+          "shape":"NetworkConfiguration",
+          "documentation":"<p>Specifies the network configuration for the ingress point. This allows you to create an IPv4-only, Dual-Stack, or PrivateLink type of ingress point. If not specified, the default network type is IPv4-only. </p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
         }
       }
     },
@@ -1237,16 +1610,12 @@
     "CreateRelayRequest":{
       "type":"structure",
       "required":[
-        "Authentication",
         "RelayName",
         "ServerName",
-        "ServerPort"
+        "ServerPort",
+        "Authentication"
       ],
       "members":{
-        "Authentication":{
-          "shape":"RelayAuthentication",
-          "documentation":"<p>Authentication for the relay destination server—specify the secretARN where the SMTP credentials are stored.</p>"
-        },
         "ClientToken":{
           "shape":"IdempotencyToken",
           "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
@@ -1264,6 +1633,10 @@
           "shape":"RelayServerPort",
           "documentation":"<p>The destination relay server port.</p>"
         },
+        "Authentication":{
+          "shape":"RelayAuthentication",
+          "documentation":"<p>Authentication for the relay destination server—specify the secretARN where the SMTP credentials are stored.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
@@ -1319,9 +1692,9 @@
     "CreateTrafficPolicyRequest":{
       "type":"structure",
       "required":[
-        "DefaultAction",
+        "TrafficPolicyName",
         "PolicyStatements",
-        "TrafficPolicyName"
+        "DefaultAction"
       ],
       "members":{
         "ClientToken":{
@@ -1329,6 +1702,14 @@
           "documentation":"<p>A unique token that Amazon SES uses to recognize subsequent retries of the same request.</p>",
           "idempotencyToken":true
         },
+        "TrafficPolicyName":{
+          "shape":"TrafficPolicyName",
+          "documentation":"<p>A user-friendly name for the traffic policy resource.</p>"
+        },
+        "PolicyStatements":{
+          "shape":"PolicyStatementList",
+          "documentation":"<p>Conditional statements for filtering email traffic.</p>"
+        },
         "DefaultAction":{
           "shape":"AcceptAction",
           "documentation":"<p>Default action instructs the traﬃc policy to either Allow or Deny (block) messages that fall outside of (or not addressed by) the conditions of your policy statements</p>"
@@ -1337,17 +1718,9 @@
           "shape":"MaxMessageSizeBytes",
           "documentation":"<p>The maximum message size in bytes of email which is allowed in by this traffic policy—anything larger will be blocked.</p>"
         },
-        "PolicyStatements":{
-          "shape":"PolicyStatementList",
-          "documentation":"<p>Conditional statements for filtering email traffic.</p>"
-        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags used to organize, track, or control access for the resource. For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.</p>"
-        },
-        "TrafficPolicyName":{
-          "shape":"TrafficPolicyName",
-          "documentation":"<p>A user-friendly name for the traffic policy resource.</p>"
         }
       }
     },
@@ -1373,8 +1746,7 @@
     },
     "DeleteAddonInstanceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAddonSubscriptionRequest":{
       "type":"structure",
@@ -1388,9 +1760,22 @@
     },
     "DeleteAddonSubscriptionResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteAddressListRequest":{
+      "type":"structure",
+      "required":["AddressListId"],
       "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The identifier of an existing address list resource to delete.</p>"
+        }
       }
     },
+    "DeleteAddressListResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteArchiveRequest":{
       "type":"structure",
       "required":["ArchiveId"],
@@ -1404,8 +1789,7 @@
     },
     "DeleteArchiveResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response indicating if the archive deletion was successfully initiated.</p> <p>On success, returns an HTTP 200 status code. On failure, returns an error message.</p>"
     },
     "DeleteIngressPointRequest":{
@@ -1420,8 +1804,7 @@
     },
     "DeleteIngressPointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRelayRequest":{
       "type":"structure",
@@ -1435,8 +1818,7 @@
     },
     "DeleteRelayResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleSetRequest":{
       "type":"structure",
@@ -1450,8 +1832,7 @@
     },
     "DeleteRuleSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrafficPolicyRequest":{
       "type":"structure",
@@ -1465,8 +1846,7 @@
     },
     "DeleteTrafficPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeliverToMailboxAction":{
       "type":"structure",
@@ -1500,7 +1880,7 @@
       "members":{
         "ActionFailurePolicy":{
           "shape":"ActionFailurePolicy",
-          "documentation":"<p>A policy that states what to do in the case of failure. The action will fail if there are configuration errors. For example, the specified application has been deleted or the role lacks necessary permissions to call the qbusiness:BatchPutDocument API.</p>"
+          "documentation":"<p>A policy that states what to do in the case of failure. The action will fail if there are configuration errors. For example, the specified application has been deleted or the role lacks necessary permissions to call the <code>qbusiness:BatchPutDocument</code> API.</p>"
         },
         "ApplicationId":{
           "shape":"QBusinessApplicationId",
@@ -1512,26 +1892,46 @@
         },
         "RoleArn":{
           "shape":"IamRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Role to use while delivering to Amazon Q Business. This role must have access to the qbusiness:BatchPutDocument API for the given application and index.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Role to use while delivering to Amazon Q Business. This role must have access to the <code>qbusiness:BatchPutDocument</code> API for the given application and index.</p>"
         }
       },
       "documentation":"<p>The action to deliver incoming emails to an Amazon Q Business application for indexing.</p>"
     },
+    "DeregisterMemberFromAddressListRequest":{
+      "type":"structure",
+      "required":[
+        "AddressListId",
+        "Address"
+      ],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list to remove the address from.</p>"
+        },
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>The address to be removed from the address list.</p>"
+        }
+      }
+    },
+    "DeregisterMemberFromAddressListResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "Double":{
       "type":"double",
       "box":true
     },
     "DropAction":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This action causes processing to stop and the email to be dropped. If the action applies only to certain recipients, only those recipients are dropped, and processing continues for other recipients.</p>"
     },
     "EmailAddress":{
       "type":"string",
       "max":254,
       "min":0,
-      "pattern":"^[0-9A-Za-z@+.-]+$",
+      "pattern":"[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+",
       "sensitive":true
     },
     "EmailReceivedHeadersList":{
@@ -1541,14 +1941,14 @@
     "Envelope":{
       "type":"structure",
       "members":{
-        "From":{
-          "shape":"String",
-          "documentation":"<p>The RCPT FROM given by the host from which the email was received.</p>"
-        },
         "Helo":{
           "shape":"String",
           "documentation":"<p>The HELO used by the host from which the email was received.</p>"
         },
+        "From":{
+          "shape":"String",
+          "documentation":"<p>The RCPT FROM given by the host from which the email was received.</p>"
+        },
         "To":{
           "shape":"StringList",
           "documentation":"<p>All SMTP TO entries given by the host from which the email was received.</p>"
@@ -1591,21 +1991,21 @@
     "ExportStatus":{
       "type":"structure",
       "members":{
+        "SubmissionTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the export job was submitted.</p>"
+        },
         "CompletionTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the export job completed (if finished).</p>"
         },
-        "ErrorMessage":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>An error message if the export job failed.</p>"
-        },
         "State":{
           "shape":"ExportState",
           "documentation":"<p>The current state of the export job.</p>"
         },
-        "SubmissionTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the export job was submitted.</p>"
+        "ErrorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>An error message if the export job failed.</p>"
         }
       },
       "documentation":"<p>The current status of an archive export job.</p>"
@@ -1641,17 +2041,17 @@
     "GetAddonInstanceResponse":{
       "type":"structure",
       "members":{
-        "AddonInstanceArn":{
-          "shape":"AddonInstanceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Add On instance.</p>"
+        "AddonSubscriptionId":{
+          "shape":"AddonSubscriptionId",
+          "documentation":"<p>The subscription ID associated to the instance.</p>"
         },
         "AddonName":{
           "shape":"AddonName",
           "documentation":"<p>The name of the Add On provider associated to the subscription of the instance.</p>"
         },
-        "AddonSubscriptionId":{
-          "shape":"AddonSubscriptionId",
-          "documentation":"<p>The subscription ID associated to the instance.</p>"
+        "AddonInstanceArn":{
+          "shape":"AddonInstanceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Add On instance.</p>"
         },
         "CreatedTimestamp":{
           "shape":"Timestamp",
@@ -1686,6 +2086,120 @@
         }
       }
     },
+    "GetAddressListImportJobRequest":{
+      "type":"structure",
+      "required":["JobId"],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the import job that needs to be retrieved.</p>"
+        }
+      }
+    },
+    "GetAddressListImportJobResponse":{
+      "type":"structure",
+      "required":[
+        "JobId",
+        "Name",
+        "Status",
+        "PreSignedUrl",
+        "ImportDataFormat",
+        "AddressListId",
+        "CreatedTimestamp"
+      ],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the import job.</p>"
+        },
+        "Name":{
+          "shape":"JobName",
+          "documentation":"<p>A user-friendly name for the import job.</p>"
+        },
+        "Status":{
+          "shape":"ImportJobStatus",
+          "documentation":"<p>The status of the import job.</p>"
+        },
+        "PreSignedUrl":{
+          "shape":"PreSignedUrl",
+          "documentation":"<p>The pre-signed URL target for uploading the input file.</p>"
+        },
+        "ImportedItemsCount":{
+          "shape":"JobItemsCount",
+          "documentation":"<p>The number of input addresses successfully imported into the address list.</p>"
+        },
+        "FailedItemsCount":{
+          "shape":"JobItemsCount",
+          "documentation":"<p>The number of input addresses that failed to be imported into the address list.</p>"
+        },
+        "ImportDataFormat":{
+          "shape":"ImportDataFormat",
+          "documentation":"<p>The format of the input for an import job.</p>"
+        },
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list the import job was created for.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was created.</p>"
+        },
+        "StartTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was started.</p>"
+        },
+        "CompletedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was completed.</p>"
+        },
+        "Error":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The reason for failure of an import job.</p>"
+        }
+      }
+    },
+    "GetAddressListRequest":{
+      "type":"structure",
+      "required":["AddressListId"],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The identifier of an existing address list resource to be retrieved.</p>"
+        }
+      }
+    },
+    "GetAddressListResponse":{
+      "type":"structure",
+      "required":[
+        "AddressListId",
+        "AddressListArn",
+        "AddressListName",
+        "CreatedTimestamp",
+        "LastUpdatedTimestamp"
+      ],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The identifier of the address list resource.</p>"
+        },
+        "AddressListArn":{
+          "shape":"AddressListArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the address list resource.</p>"
+        },
+        "AddressListName":{
+          "shape":"AddressListName",
+          "documentation":"<p>A user-friendly name for the address list resource.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date of when then address list was created.</p>"
+        },
+        "LastUpdatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date of when the address list was last updated.</p>"
+        }
+      }
+    },
     "GetArchiveExportRequest":{
       "type":"structure",
       "required":["ExportId"],
@@ -1704,10 +2218,6 @@
           "shape":"ArchiveId",
           "documentation":"<p>The identifier of the archive the email export was performed from.</p>"
         },
-        "ExportDestinationConfiguration":{
-          "shape":"ExportDestinationConfiguration",
-          "documentation":"<p>Where the exported emails are being delivered.</p>"
-        },
         "Filters":{
           "shape":"ArchiveFilters",
           "documentation":"<p>The criteria used to filter emails included in the export.</p>"
@@ -1716,17 +2226,21 @@
           "shape":"Timestamp",
           "documentation":"<p>The start of the timestamp range the exported emails cover.</p>"
         },
+        "ToTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end of the date range the exported emails cover.</p>"
+        },
         "MaxResults":{
           "shape":"ExportMaxResults",
           "documentation":"<p>The maximum number of email items included in the export.</p>"
         },
+        "ExportDestinationConfiguration":{
+          "shape":"ExportDestinationConfiguration",
+          "documentation":"<p>Where the exported emails are being delivered.</p>"
+        },
         "Status":{
           "shape":"ExportStatus",
           "documentation":"<p>The current status of the export job.</p>"
-        },
-        "ToTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end of the date range the exported emails cover.</p>"
         }
       },
       "documentation":"<p>The response containing details of the specified archive export job.</p>"
@@ -1766,10 +2280,6 @@
     "GetArchiveMessageResponse":{
       "type":"structure",
       "members":{
-        "Envelope":{
-          "shape":"Envelope",
-          "documentation":"<p>The SMTP envelope information of the email.</p>"
-        },
         "MessageDownloadLink":{
           "shape":"S3PresignedURL",
           "documentation":"<p>A pre-signed URL to temporarily download the full message content.</p>"
@@ -1777,6 +2287,10 @@
         "Metadata":{
           "shape":"Metadata",
           "documentation":"<p>The metadata about the email.</p>"
+        },
+        "Envelope":{
+          "shape":"Envelope",
+          "documentation":"<p>The SMTP envelope information of the email.</p>"
         }
       },
       "documentation":"<p>The response containing details about the requested archived email message.</p>"
@@ -1795,17 +2309,13 @@
     "GetArchiveResponse":{
       "type":"structure",
       "required":[
-        "ArchiveArn",
         "ArchiveId",
         "ArchiveName",
+        "ArchiveArn",
         "ArchiveState",
         "Retention"
       ],
       "members":{
-        "ArchiveArn":{
-          "shape":"ArchiveArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the archive.</p>"
-        },
         "ArchiveId":{
           "shape":"ArchiveIdString",
           "documentation":"<p>The unique identifier of the archive.</p>"
@@ -1814,25 +2324,29 @@
           "shape":"ArchiveNameString",
           "documentation":"<p>The unique name assigned to the archive.</p>"
         },
+        "ArchiveArn":{
+          "shape":"ArchiveArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the archive.</p>"
+        },
         "ArchiveState":{
           "shape":"ArchiveState",
           "documentation":"<p>The current state of the archive:</p> <ul> <li> <p> <code>ACTIVE</code> – The archive is ready and available for use. </p> </li> <li> <p> <code>PENDING_DELETION</code> – The archive has been marked for deletion and will be permanently deleted in 30 days. No further modifications can be made in this state. </p> </li> </ul>"
         },
+        "Retention":{
+          "shape":"ArchiveRetention",
+          "documentation":"<p>The retention period for emails in this archive.</p>"
+        },
         "CreatedTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the archive was created.</p>"
         },
-        "KmsKeyArn":{
-          "shape":"KmsKeyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the archive.</p>"
-        },
         "LastUpdatedTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the archive was modified.</p>"
         },
-        "Retention":{
-          "shape":"ArchiveRetention",
-          "documentation":"<p>The retention period for emails in this archive.</p>"
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key used to encrypt the archive.</p>"
         }
       },
       "documentation":"<p>The response containing details of the requested archive.</p>"
@@ -1863,6 +2377,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The start timestamp of the range the searched emails cover.</p>"
         },
+        "ToTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end timestamp of the range the searched emails cover.</p>"
+        },
         "MaxResults":{
           "shape":"SearchMaxResults",
           "documentation":"<p>The maximum number of search results to return.</p>"
@@ -1870,10 +2388,6 @@
         "Status":{
           "shape":"SearchStatus",
           "documentation":"<p>The current status of the search job.</p>"
-        },
-        "ToTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end timestamp of the range the searched emails cover.</p>"
         }
       },
       "documentation":"<p>The response containing details of the specified archive search job.</p>"
@@ -1916,22 +2430,6 @@
         "IngressPointName"
       ],
       "members":{
-        "ARecord":{
-          "shape":"IngressPointARecord",
-          "documentation":"<p> The DNS A Record that identifies your ingress endpoint. Configure your DNS Mail Exchange (MX) record with this value to route emails to Mail Manager. </p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ingress endpoint was created.</p>"
-        },
-        "IngressPointArn":{
-          "shape":"IngressPointArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the ingress endpoint resource.</p>"
-        },
-        "IngressPointAuthConfiguration":{
-          "shape":"IngressPointAuthConfiguration",
-          "documentation":"<p>The authentication configuration of the ingress endpoint resource.</p>"
-        },
         "IngressPointId":{
           "shape":"IngressPointId",
           "documentation":"<p>The identifier of an ingress endpoint resource.</p>"
@@ -1940,25 +2438,79 @@
           "shape":"IngressPointName",
           "documentation":"<p>A user friendly name for the ingress endpoint.</p>"
         },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the ingress endpoint was last updated.</p>"
-        },
-        "RuleSetId":{
-          "shape":"RuleSetId",
-          "documentation":"<p>The identifier of a rule set resource associated with the ingress endpoint.</p>"
+        "IngressPointArn":{
+          "shape":"IngressPointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ingress endpoint resource.</p>"
         },
         "Status":{
           "shape":"IngressPointStatus",
           "documentation":"<p>The status of the ingress endpoint resource.</p>"
         },
+        "Type":{
+          "shape":"IngressPointType",
+          "documentation":"<p>The type of ingress endpoint.</p>"
+        },
+        "ARecord":{
+          "shape":"IngressPointARecord",
+          "documentation":"<p> The DNS A Record that identifies your ingress endpoint. Configure your DNS Mail Exchange (MX) record with this value to route emails to Mail Manager. </p>"
+        },
+        "RuleSetId":{
+          "shape":"RuleSetId",
+          "documentation":"<p>The identifier of a rule set resource associated with the ingress endpoint.</p>"
+        },
         "TrafficPolicyId":{
           "shape":"TrafficPolicyId",
           "documentation":"<p>The identifier of the traffic policy resource associated with the ingress endpoint.</p>"
         },
-        "Type":{
-          "shape":"IngressPointType",
-          "documentation":"<p>The type of ingress endpoint.</p>"
+        "IngressPointAuthConfiguration":{
+          "shape":"IngressPointAuthConfiguration",
+          "documentation":"<p>The authentication configuration of the ingress endpoint resource.</p>"
+        },
+        "NetworkConfiguration":{
+          "shape":"NetworkConfiguration",
+          "documentation":"<p>The network configuration for the ingress point.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ingress endpoint was created.</p>"
+        },
+        "LastUpdatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the ingress endpoint was last updated.</p>"
+        }
+      }
+    },
+    "GetMemberOfAddressListRequest":{
+      "type":"structure",
+      "required":[
+        "AddressListId",
+        "Address"
+      ],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list to retrieve the address from.</p>"
+        },
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>The address to be retrieved from the address list.</p>"
+        }
+      }
+    },
+    "GetMemberOfAddressListResponse":{
+      "type":"structure",
+      "required":[
+        "Address",
+        "CreatedTimestamp"
+      ],
+      "members":{
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>The address retrieved from the address list.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the address was created.</p>"
         }
       }
     },
@@ -1976,26 +2528,14 @@
       "type":"structure",
       "required":["RelayId"],
       "members":{
-        "Authentication":{
-          "shape":"RelayAuthentication",
-          "documentation":"<p>The authentication attribute—contains the secret ARN where the customer relay server credentials are stored. </p>"
-        },
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the relay was created.</p>"
-        },
-        "LastModifiedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when relay was last updated.</p>"
+        "RelayId":{
+          "shape":"RelayId",
+          "documentation":"<p>The unique relay identifier.</p>"
         },
         "RelayArn":{
           "shape":"RelayArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the relay.</p>"
         },
-        "RelayId":{
-          "shape":"RelayId",
-          "documentation":"<p>The unique relay identifier.</p>"
-        },
         "RelayName":{
           "shape":"RelayName",
           "documentation":"<p>The unique name of the relay.</p>"
@@ -2007,6 +2547,18 @@
         "ServerPort":{
           "shape":"RelayServerPort",
           "documentation":"<p>The destination relay server port.</p>"
+        },
+        "Authentication":{
+          "shape":"RelayAuthentication",
+          "documentation":"<p>The authentication attribute—contains the secret ARN where the customer relay server credentials are stored. </p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the relay was created.</p>"
+        },
+        "LastModifiedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when relay was last updated.</p>"
         }
       }
     },
@@ -2023,34 +2575,34 @@
     "GetRuleSetResponse":{
       "type":"structure",
       "required":[
-        "CreatedDate",
-        "LastModificationDate",
-        "RuleSetArn",
         "RuleSetId",
+        "RuleSetArn",
         "RuleSetName",
+        "CreatedDate",
+        "LastModificationDate",
         "Rules"
       ],
       "members":{
-        "CreatedDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date of when then rule set was created.</p>"
-        },
-        "LastModificationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date of when the rule set was last modified.</p>"
+        "RuleSetId":{
+          "shape":"RuleSetId",
+          "documentation":"<p>The identifier of the rule set resource.</p>"
         },
         "RuleSetArn":{
           "shape":"RuleSetArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the rule set resource.</p>"
         },
-        "RuleSetId":{
-          "shape":"RuleSetId",
-          "documentation":"<p>The identifier of the rule set resource.</p>"
-        },
         "RuleSetName":{
           "shape":"RuleSetName",
           "documentation":"<p>A user-friendly name for the rule set resource.</p>"
         },
+        "CreatedDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date of when then rule set was created.</p>"
+        },
+        "LastModificationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date of when the rule set was last modified.</p>"
+        },
         "Rules":{
           "shape":"Rules",
           "documentation":"<p>The rules contained in the rule set.</p>"
@@ -2070,41 +2622,41 @@
     "GetTrafficPolicyResponse":{
       "type":"structure",
       "required":[
-        "TrafficPolicyId",
-        "TrafficPolicyName"
+        "TrafficPolicyName",
+        "TrafficPolicyId"
       ],
       "members":{
-        "CreatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the traffic policy was created.</p>"
-        },
-        "DefaultAction":{
-          "shape":"AcceptAction",
-          "documentation":"<p>The default action of the traffic policy.</p>"
+        "TrafficPolicyName":{
+          "shape":"TrafficPolicyName",
+          "documentation":"<p>A user-friendly name for the traffic policy resource.</p>"
         },
-        "LastUpdatedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the traffic policy was last updated.</p>"
+        "TrafficPolicyId":{
+          "shape":"TrafficPolicyId",
+          "documentation":"<p>The identifier of the traffic policy resource.</p>"
         },
-        "MaxMessageSizeBytes":{
-          "shape":"MaxMessageSizeBytes",
-          "documentation":"<p>The maximum message size in bytes of email which is allowed in by this traffic policy—anything larger will be blocked.</p>"
+        "TrafficPolicyArn":{
+          "shape":"TrafficPolicyArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the traffic policy resource.</p>"
         },
         "PolicyStatements":{
           "shape":"PolicyStatementList",
           "documentation":"<p>The list of conditions which are in the traffic policy resource.</p>"
         },
-        "TrafficPolicyArn":{
-          "shape":"TrafficPolicyArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the traffic policy resource.</p>"
+        "MaxMessageSizeBytes":{
+          "shape":"MaxMessageSizeBytes",
+          "documentation":"<p>The maximum message size in bytes of email which is allowed in by this traffic policy—anything larger will be blocked.</p>"
         },
-        "TrafficPolicyId":{
-          "shape":"TrafficPolicyId",
-          "documentation":"<p>The identifier of the traffic policy resource.</p>"
+        "DefaultAction":{
+          "shape":"AcceptAction",
+          "documentation":"<p>The default action of the traffic policy.</p>"
         },
-        "TrafficPolicyName":{
-          "shape":"TrafficPolicyName",
-          "documentation":"<p>A user-friendly name for the traffic policy resource.</p>"
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the traffic policy was created.</p>"
+        },
+        "LastUpdatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the traffic policy was last updated.</p>"
         }
       }
     },
@@ -2112,7 +2664,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[xX]\\-[a-zA-Z0-9\\-]+$"
+      "pattern":"[xX]\\-[a-zA-Z0-9\\-]+"
     },
     "HeaderValue":{
       "type":"string",
@@ -2123,19 +2675,124 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^[a-zA-Z0-9:_/+=,@.#-]+$"
+      "pattern":"[a-zA-Z0-9:_/+=,@.#-]+"
     },
     "IdOrArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^[a-zA-Z0-9:_/+=,@.#-]+$"
+      "pattern":"[a-zA-Z0-9:_/+=,@.#-]+"
     },
     "IdempotencyToken":{
       "type":"string",
       "max":128,
       "min":1
     },
+    "ImportDataFormat":{
+      "type":"structure",
+      "required":["ImportDataType"],
+      "members":{
+        "ImportDataType":{
+          "shape":"ImportDataType",
+          "documentation":"<p>The type of file that would be passed as an input for the address list import job.</p>"
+        }
+      },
+      "documentation":"<p>The import data format contains the specifications of the input file that would be passed to the address list import job.</p>"
+    },
+    "ImportDataType":{
+      "type":"string",
+      "enum":[
+        "CSV",
+        "JSON"
+      ]
+    },
+    "ImportJob":{
+      "type":"structure",
+      "required":[
+        "JobId",
+        "Name",
+        "Status",
+        "PreSignedUrl",
+        "ImportDataFormat",
+        "AddressListId",
+        "CreatedTimestamp"
+      ],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the import job.</p>"
+        },
+        "Name":{
+          "shape":"JobName",
+          "documentation":"<p>A user-friendly name for the import job.</p>"
+        },
+        "Status":{
+          "shape":"ImportJobStatus",
+          "documentation":"<p>The status of the import job.</p>"
+        },
+        "PreSignedUrl":{
+          "shape":"PreSignedUrl",
+          "documentation":"<p>The pre-signed URL target for uploading the input file.</p>"
+        },
+        "ImportedItemsCount":{
+          "shape":"JobItemsCount",
+          "documentation":"<p>The number of addresses in the input that were successfully imported into the address list.</p>"
+        },
+        "FailedItemsCount":{
+          "shape":"JobItemsCount",
+          "documentation":"<p>The number of addresses in the input that failed to get imported into address list.</p>"
+        },
+        "ImportDataFormat":{
+          "shape":"ImportDataFormat",
+          "documentation":"<p>The format of the input for the import job.</p>"
+        },
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list the import job was created for.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was created.</p>"
+        },
+        "StartTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was started.</p>"
+        },
+        "CompletedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the import job was completed.</p>"
+        },
+        "Error":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The reason for failure of an import job.</p>"
+        }
+      },
+      "documentation":"<p>Details about an import job.</p>"
+    },
+    "ImportJobStatus":{
+      "type":"string",
+      "enum":[
+        "CREATED",
+        "PROCESSING",
+        "COMPLETED",
+        "FAILED",
+        "STOPPED"
+      ]
+    },
+    "ImportJobs":{
+      "type":"list",
+      "member":{"shape":"ImportJob"}
+    },
+    "IngressAddressListArnList":{
+      "type":"list",
+      "member":{"shape":"AddressListArn"},
+      "max":1,
+      "min":1
+    },
+    "IngressAddressListEmailAttribute":{
+      "type":"string",
+      "enum":["RECIPIENT"]
+    },
     "IngressAnalysis":{
       "type":"structure",
       "required":[
@@ -2185,6 +2842,10 @@
         "Analysis":{
           "shape":"IngressAnalysis",
           "documentation":"<p>The structure type for a boolean condition stating the Add On ARN and its returned value.</p>"
+        },
+        "IsInAddressList":{
+          "shape":"IngressIsInAddressList",
+          "documentation":"<p>The structure type for a boolean condition that provides the address lists to evaluate incoming traffic on.</p>"
         }
       },
       "documentation":"<p>The union type representing the allowed types of operands for a boolean condition.</p>",
@@ -2235,27 +2896,79 @@
       },
       "documentation":"<p>The union type representing the allowed types for the left hand side of an IP condition.</p>"
     },
+    "IngressIpv6Attribute":{
+      "type":"string",
+      "enum":["SENDER_IPV6"]
+    },
+    "IngressIpv6Expression":{
+      "type":"structure",
+      "required":[
+        "Evaluate",
+        "Operator",
+        "Values"
+      ],
+      "members":{
+        "Evaluate":{
+          "shape":"IngressIpv6ToEvaluate",
+          "documentation":"<p>The left hand side argument of an IPv6 condition expression.</p>"
+        },
+        "Operator":{
+          "shape":"IngressIpOperator",
+          "documentation":"<p>The matching operator for an IPv6 condition expression.</p>"
+        },
+        "Values":{
+          "shape":"Ipv6Cidrs",
+          "documentation":"<p>The right hand side argument of an IPv6 condition expression.</p>"
+        }
+      },
+      "documentation":"<p>The union type representing the allowed types for the left hand side of an IPv6 condition.</p>"
+    },
+    "IngressIpv6ToEvaluate":{
+      "type":"structure",
+      "members":{
+        "Attribute":{
+          "shape":"IngressIpv6Attribute",
+          "documentation":"<p>An enum type representing the allowed attribute types for an IPv6 condition.</p>"
+        }
+      },
+      "documentation":"<p>The structure for an IPv6 based condition matching on the incoming mail.</p>",
+      "union":true
+    },
+    "IngressIsInAddressList":{
+      "type":"structure",
+      "required":[
+        "Attribute",
+        "AddressLists"
+      ],
+      "members":{
+        "Attribute":{
+          "shape":"IngressAddressListEmailAttribute",
+          "documentation":"<p>The email attribute that needs to be evaluated against the address list.</p>"
+        },
+        "AddressLists":{
+          "shape":"IngressAddressListArnList",
+          "documentation":"<p>The address lists that will be used for evaluation.</p>"
+        }
+      },
+      "documentation":"<p>The address lists and the address list attribute value that is evaluated in a policy statement's conditional expression to either deny or block the incoming email.</p>"
+    },
     "IngressPoint":{
       "type":"structure",
       "required":[
-        "IngressPointId",
         "IngressPointName",
+        "IngressPointId",
         "Status",
         "Type"
       ],
       "members":{
-        "ARecord":{
-          "shape":"IngressPointARecord",
-          "documentation":"<p> The DNS A Record that identifies your ingress endpoint. Configure your DNS Mail Exchange (MX) record with this value to route emails to Mail Manager. </p>"
+        "IngressPointName":{
+          "shape":"IngressPointName",
+          "documentation":"<p>A user friendly name for the ingress endpoint resource.</p>"
         },
         "IngressPointId":{
           "shape":"IngressPointId",
           "documentation":"<p>The identifier of the ingress endpoint resource.</p>"
         },
-        "IngressPointName":{
-          "shape":"IngressPointName",
-          "documentation":"<p>A user friendly name for the ingress endpoint resource.</p>"
-        },
         "Status":{
           "shape":"IngressPointStatus",
           "documentation":"<p>The status of the ingress endpoint resource.</p>"
@@ -2263,6 +2976,10 @@
         "Type":{
           "shape":"IngressPointType",
           "documentation":"<p>The type of ingress endpoint resource.</p>"
+        },
+        "ARecord":{
+          "shape":"IngressPointARecord",
+          "documentation":"<p> The DNS A Record that identifies your ingress endpoint. Configure your DNS Mail Exchange (MX) record with this value to route emails to Mail Manager. </p>"
         }
       },
       "documentation":"<p>The structure of an ingress endpoint resource.</p>"
@@ -2286,13 +3003,13 @@
     "IngressPointConfiguration":{
       "type":"structure",
       "members":{
-        "SecretArn":{
-          "shape":"SecretArn",
-          "documentation":"<p>The SecretsManager::Secret ARN of the ingress endpoint resource.</p>"
-        },
         "SmtpPassword":{
           "shape":"SmtpPassword",
           "documentation":"<p>The password of the ingress endpoint resource.</p>"
+        },
+        "SecretArn":{
+          "shape":"SecretArn",
+          "documentation":"<p>The SecretsManager::Secret ARN of the ingress endpoint resource.</p>"
         }
       },
       "documentation":"<p>The configuration of the ingress endpoint resource.</p>",
@@ -2307,22 +3024,22 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[A-Za-z0-9_\\-]+$"
+      "pattern":"[A-Za-z0-9_\\-]+"
     },
     "IngressPointPasswordConfiguration":{
       "type":"structure",
       "members":{
-        "PreviousSmtpPasswordExpiryTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The previous password expiry timestamp of the ingress endpoint resource.</p>"
+        "SmtpPasswordVersion":{
+          "shape":"String",
+          "documentation":"<p>The current password expiry timestamp of the ingress endpoint resource.</p>"
         },
         "PreviousSmtpPasswordVersion":{
           "shape":"String",
           "documentation":"<p>The previous password version of the ingress endpoint resource.</p>"
         },
-        "SmtpPasswordVersion":{
-          "shape":"String",
-          "documentation":"<p>The current password expiry timestamp of the ingress endpoint resource.</p>"
+        "PreviousSmtpPasswordExpiryTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The previous password expiry timestamp of the ingress endpoint resource.</p>"
         }
       },
       "documentation":"<p>The password configuration of the ingress endpoint resource.</p>"
@@ -2399,6 +3116,10 @@
         "Attribute":{
           "shape":"IngressStringEmailAttribute",
           "documentation":"<p>The enum type representing the allowed attribute types for a string condition.</p>"
+        },
+        "Analysis":{
+          "shape":"IngressAnalysis",
+          "documentation":"<p>The structure type for a string condition stating the Add On ARN and its returned value.</p>"
         }
       },
       "documentation":"<p>The union type representing the allowed types for the left hand side of a string condition.</p>",
@@ -2460,23 +3181,56 @@
       "type":"integer",
       "box":true
     },
+    "IpType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "DUAL_STACK"
+      ]
+    },
     "Ipv4Cidr":{
       "type":"string",
-      "pattern":"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/([0-9]|[12][0-9]|3[0-2])$"
+      "pattern":"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/([0-9]|[12][0-9]|3[0-2])"
     },
     "Ipv4Cidrs":{
       "type":"list",
       "member":{"shape":"Ipv4Cidr"}
     },
+    "Ipv6Cidr":{
+      "type":"string",
+      "max":49,
+      "min":0,
+      "pattern":"(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9])"
+    },
+    "Ipv6Cidrs":{
+      "type":"list",
+      "member":{"shape":"Ipv6Cidr"}
+    },
+    "JobId":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9-]+"
+    },
+    "JobItemsCount":{
+      "type":"integer",
+      "box":true
+    },
+    "JobName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_.-]+"
+    },
     "KmsKeyArn":{
       "type":"string",
-      "pattern":"^arn:aws(|-cn|-us-gov):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+$"
+      "pattern":"arn:aws(|-cn|-us-gov):kms:[a-z0-9-]{1,20}:[0-9]{12}:(key|alias)/.+"
     },
     "KmsKeyId":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^[a-zA-Z0-9-:/]+$"
+      "pattern":"[a-zA-Z0-9-:/]+"
     },
     "ListAddonInstancesRequest":{
       "type":"structure",
@@ -2530,6 +3284,65 @@
         }
       }
     },
+    "ListAddressListImportJobsRequest":{
+      "type":"structure",
+      "required":["AddressListId"],
+      "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list for listing import jobs.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
+        },
+        "PageSize":{
+          "shape":"PageSize",
+          "documentation":"<p>The maximum number of import jobs that are returned per call. You can use NextToken to retrieve the next page of jobs.</p>"
+        }
+      }
+    },
+    "ListAddressListImportJobsResponse":{
+      "type":"structure",
+      "required":["ImportJobs"],
+      "members":{
+        "ImportJobs":{
+          "shape":"ImportJobs",
+          "documentation":"<p>The list of import jobs.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        }
+      }
+    },
+    "ListAddressListsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
+        },
+        "PageSize":{
+          "shape":"PageSize",
+          "documentation":"<p>The maximum number of address list resources that are returned per call. You can use NextToken to retrieve the next page of address lists.</p>"
+        }
+      }
+    },
+    "ListAddressListsResponse":{
+      "type":"structure",
+      "required":["AddressLists"],
+      "members":{
+        "AddressLists":{
+          "shape":"AddressLists",
+          "documentation":"<p>The list of address lists.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        }
+      }
+    },
     "ListArchiveExportsRequest":{
       "type":"structure",
       "required":["ArchiveId"],
@@ -2585,13 +3398,13 @@
     "ListArchiveSearchesResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If present, use to retrieve the next page of results.</p>"
-        },
         "Searches":{
           "shape":"SearchSummaryList",
           "documentation":"<p>The list of search job identifiers and statuses.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If present, use to retrieve the next page of results.</p>"
         }
       },
       "documentation":"<p>The response containing a list of archive search jobs and their statuses.</p>"
@@ -2628,13 +3441,13 @@
     "ListIngressPointsRequest":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
-        },
         "PageSize":{
           "shape":"PageSize",
           "documentation":"<p>The maximum number of ingress endpoint resources that are returned per call. You can use NextToken to obtain further ingress endpoints.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
         }
       }
     },
@@ -2651,30 +3464,66 @@
         }
       }
     },
-    "ListRelaysRequest":{
+    "ListMembersOfAddressListRequest":{
       "type":"structure",
+      "required":["AddressListId"],
       "members":{
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list to list the addresses from.</p>"
+        },
+        "Filter":{
+          "shape":"AddressFilter",
+          "documentation":"<p>Filter to be used to limit the results.</p>"
+        },
         "NextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
         },
         "PageSize":{
-          "shape":"Integer",
-          "documentation":"<p>The number of relays to be returned in one request.</p>"
+          "shape":"AddressPageSize",
+          "documentation":"<p>The maximum number of address list members that are returned per call. You can use NextToken to retrieve the next page of members.</p>"
         }
       }
     },
-    "ListRelaysResponse":{
+    "ListMembersOfAddressListResponse":{
       "type":"structure",
-      "required":["Relays"],
+      "required":["Addresses"],
       "members":{
+        "Addresses":{
+          "shape":"SavedAddresses",
+          "documentation":"<p>The list of addresses.</p>"
+        },
         "NextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        }
+      }
+    },
+    "ListRelaysRequest":{
+      "type":"structure",
+      "members":{
+        "PageSize":{
+          "shape":"Integer",
+          "documentation":"<p>The number of relays to be returned in one request.</p>"
         },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
+        }
+      }
+    },
+    "ListRelaysResponse":{
+      "type":"structure",
+      "required":["Relays"],
+      "members":{
         "Relays":{
           "shape":"Relays",
           "documentation":"<p>The list of returned relays.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2695,13 +3544,13 @@
       "type":"structure",
       "required":["RuleSets"],
       "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
-        },
         "RuleSets":{
           "shape":"RuleSets",
           "documentation":"<p>The list of rule sets.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2728,26 +3577,26 @@
     "ListTrafficPoliciesRequest":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
-        },
         "PageSize":{
           "shape":"PageSize",
           "documentation":"<p>The maximum number of traffic policy resources that are returned per call. You can use NextToken to obtain further traffic policies.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If you received a pagination token from a previous call to this API, you can provide it here to continue paginating through the next page of results.</p>"
         }
       }
     },
     "ListTrafficPoliciesResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
-        },
         "TrafficPolicies":{
           "shape":"TrafficPolicyList",
           "documentation":"<p>The list of traffic policies.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If NextToken is returned, there are more results available. The value of NextToken is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2766,6 +3615,10 @@
     "MessageBody":{
       "type":"structure",
       "members":{
+        "Text":{
+          "shape":"String",
+          "documentation":"<p>The plain text body content of the message.</p>"
+        },
         "Html":{
           "shape":"String",
           "documentation":"<p>The HTML body content of the message.</p>"
@@ -2773,10 +3626,6 @@
         "MessageMalformed":{
           "shape":"Boolean",
           "documentation":"<p>A flag indicating if the email was malformed.</p>"
-        },
-        "Text":{
-          "shape":"String",
-          "documentation":"<p>The plain text body content of the message.</p>"
         }
       },
       "documentation":"<p>The textual body content of an email message.</p>"
@@ -2784,10 +3633,18 @@
     "Metadata":{
       "type":"structure",
       "members":{
+        "Timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the email was received.</p>"
+        },
         "IngressPointId":{
           "shape":"IngressPointId",
           "documentation":"<p>The ID of the ingress endpoint through which the email was received.</p>"
         },
+        "TrafficPolicyId":{
+          "shape":"TrafficPolicyId",
+          "documentation":"<p>The ID of the traffic policy that was in effect when the email was received.</p>"
+        },
         "RuleSetId":{
           "shape":"RuleSetId",
           "documentation":"<p>The ID of the rule set that processed the email.</p>"
@@ -2800,10 +3657,6 @@
           "shape":"SenderIpAddress",
           "documentation":"<p>The IP address of the host from which the email was received.</p>"
         },
-        "Timestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the email was received.</p>"
-        },
         "TlsCipherSuite":{
           "shape":"String",
           "documentation":"<p>The TLS cipher suite used to communicate with the host from which the email was received.</p>"
@@ -2812,27 +3665,57 @@
           "shape":"String",
           "documentation":"<p>The TLS protocol used to communicate with the host from which the email was received.</p>"
         },
-        "TrafficPolicyId":{
-          "shape":"TrafficPolicyId",
-          "documentation":"<p>The ID of the traffic policy that was in effect when the email was received.</p>"
+        "SendingMethod":{
+          "shape":"String",
+          "documentation":"<p>The name of the API call used when sent through a configuration set with archiving enabled.</p>"
+        },
+        "SourceIdentity":{
+          "shape":"String",
+          "documentation":"<p>The identity name used to authorize the sending action when sent through a configuration set with archiving enabled.</p>"
+        },
+        "SendingPool":{
+          "shape":"String",
+          "documentation":"<p>The name of the dedicated IP pool used when sent through a configuration set with archiving enabled.</p>"
+        },
+        "ConfigurationSet":{
+          "shape":"String",
+          "documentation":"<p>The name of the configuration set used when sent through a configuration set with archiving enabled.</p>"
+        },
+        "SourceArn":{
+          "shape":"String",
+          "documentation":"<p>Specifies the archived email source, identified by either a Rule Set's ARN with an Archive action, or a Configuration Set's Archive ARN.</p>"
         }
       },
       "documentation":"<p>The metadata about the email.</p>"
     },
     "MimeHeaderAttribute":{
       "type":"string",
-      "pattern":"^X-[a-zA-Z0-9-]{1,256}$"
+      "pattern":"X-[a-zA-Z0-9-]{1,256}"
     },
     "NameOrArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^[a-zA-Z0-9:_/+=,@.#-]+$"
+      "pattern":"[a-zA-Z0-9:_/+=,@.#-]+"
     },
-    "NoAuthentication":{
+    "NetworkConfiguration":{
       "type":"structure",
       "members":{
+        "PublicNetworkConfiguration":{
+          "shape":"PublicNetworkConfiguration",
+          "documentation":"<p>Specifies the network configuration for the public ingress point.</p>"
+        },
+        "PrivateNetworkConfiguration":{
+          "shape":"PrivateNetworkConfiguration",
+          "documentation":"<p>Specifies the network configuration for the private ingress point.</p>"
+        }
       },
+      "documentation":"<p>The network type (IPv4-only, Dual-Stack, PrivateLink) of the ingress endpoint resource.</p>",
+      "union":true
+    },
+    "NoAuthentication":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>Explicitly indicate that the relay destination server does not require SMTP credential authentication.</p>"
     },
     "PageSize":{
@@ -2849,21 +3732,25 @@
     "PolicyCondition":{
       "type":"structure",
       "members":{
-        "BooleanExpression":{
-          "shape":"IngressBooleanExpression",
-          "documentation":"<p>This represents a boolean type condition matching on the incoming mail. It performs the boolean operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
+        "StringExpression":{
+          "shape":"IngressStringExpression",
+          "documentation":"<p>This represents a string based condition matching on the incoming mail. It performs the string operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
         },
         "IpExpression":{
           "shape":"IngressIpv4Expression",
           "documentation":"<p>This represents an IP based condition matching on the incoming mail. It performs the operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
         },
-        "StringExpression":{
-          "shape":"IngressStringExpression",
-          "documentation":"<p>This represents a string based condition matching on the incoming mail. It performs the string operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
+        "Ipv6Expression":{
+          "shape":"IngressIpv6Expression",
+          "documentation":"<p>This represents an IPv6 based condition matching on the incoming mail. It performs the operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
         },
         "TlsExpression":{
           "shape":"IngressTlsProtocolExpression",
           "documentation":"<p>This represents a TLS based condition matching on the incoming mail. It performs the operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
+        },
+        "BooleanExpression":{
+          "shape":"IngressBooleanExpression",
+          "documentation":"<p>This represents a boolean type condition matching on the incoming mail. It performs the boolean operation configured in 'Operator' and evaluates the 'Protocol' object against the 'Value'.</p>"
         }
       },
       "documentation":"<p>The email traffic filtering conditions which are contained in a traffic policy resource.</p>",
@@ -2877,17 +3764,17 @@
     "PolicyStatement":{
       "type":"structure",
       "required":[
-        "Action",
-        "Conditions"
+        "Conditions",
+        "Action"
       ],
       "members":{
-        "Action":{
-          "shape":"AcceptAction",
-          "documentation":"<p>The action that informs a traffic policy resource to either allow or block the email if it matches a condition in the policy statement.</p>"
-        },
         "Conditions":{
           "shape":"PolicyConditions",
           "documentation":"<p>The list of conditions to apply to incoming messages for filtering email traffic.</p>"
+        },
+        "Action":{
+          "shape":"AcceptAction",
+          "documentation":"<p>The action that informs a traffic policy resource to either allow or block the email if it matches a condition in the policy statement.</p>"
         }
       },
       "documentation":"<p>The structure containing traffic policy conditions and actions.</p>"
@@ -2896,17 +3783,43 @@
       "type":"list",
       "member":{"shape":"PolicyStatement"}
     },
+    "PreSignedUrl":{
+      "type":"string",
+      "sensitive":true
+    },
+    "PrivateNetworkConfiguration":{
+      "type":"structure",
+      "required":["VpcEndpointId"],
+      "members":{
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>The identifier of the VPC endpoint to associate with this private ingress point.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the network configuration for the private ingress point.</p>"
+    },
+    "PublicNetworkConfiguration":{
+      "type":"structure",
+      "required":["IpType"],
+      "members":{
+        "IpType":{
+          "shape":"IpType",
+          "documentation":"<p>The IP address type for the public ingress point. Valid values are IPV4 and DUAL_STACK.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the network configuration for the public ingress point.</p>"
+    },
     "QBusinessApplicationId":{
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-z0-9-]+$"
+      "pattern":"[a-z0-9-]+"
     },
     "QBusinessIndexId":{
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-z0-9-]+$"
+      "pattern":"[a-z0-9-]+"
     },
     "Recipients":{
       "type":"list",
@@ -2914,13 +3827,30 @@
       "max":100,
       "min":1
     },
-    "Relay":{
+    "RegisterMemberToAddressListRequest":{
       "type":"structure",
+      "required":[
+        "AddressListId",
+        "Address"
+      ],
       "members":{
-        "LastModifiedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the relay was last modified.</p>"
+        "AddressListId":{
+          "shape":"AddressListId",
+          "documentation":"<p>The unique identifier of the address list where the address should be added.</p>"
         },
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>The address to be added to the address list.</p>"
+        }
+      }
+    },
+    "RegisterMemberToAddressListResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "Relay":{
+      "type":"structure",
+      "members":{
         "RelayId":{
           "shape":"RelayId",
           "documentation":"<p>The unique relay identifier.</p>"
@@ -2928,6 +3858,10 @@
         "RelayName":{
           "shape":"RelayName",
           "documentation":"<p>The unique relay name.</p>"
+        },
+        "LastModifiedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the relay was last modified.</p>"
         }
       },
       "documentation":"<p>The relay resource that can be used as a rule to relay receiving emails to the destination relay server.</p>"
@@ -2940,13 +3874,13 @@
           "shape":"ActionFailurePolicy",
           "documentation":"<p>A policy that states what to do in the case of failure. The action will fail if there are configuration errors. For example, the specified relay has been deleted.</p>"
         },
-        "MailFrom":{
-          "shape":"MailFrom",
-          "documentation":"<p>This action specifies whether to preserve or replace original mail from address while relaying received emails to a destination server.</p>"
-        },
         "Relay":{
           "shape":"IdOrArn",
           "documentation":"<p>The identifier of the relay resource to be used when relaying an email.</p>"
+        },
+        "MailFrom":{
+          "shape":"MailFrom",
+          "documentation":"<p>This action specifies whether to preserve or replace original mail from address while relaying received emails to a destination server.</p>"
         }
       },
       "documentation":"<p>The action relays the email via SMTP to another specific SMTP server.</p>"
@@ -2955,13 +3889,13 @@
     "RelayAuthentication":{
       "type":"structure",
       "members":{
-        "NoAuthentication":{
-          "shape":"NoAuthentication",
-          "documentation":"<p>Keep an empty structure if the relay destination server does not require SMTP credential authentication.</p>"
-        },
         "SecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The ARN of the secret created in secrets manager where the relay server's SMTP credentials are stored.</p>"
+        },
+        "NoAuthentication":{
+          "shape":"NoAuthentication",
+          "documentation":"<p>Keep an empty structure if the relay destination server does not require SMTP credential authentication.</p>"
         }
       },
       "documentation":"<p>Authentication for the relay destination server—specify the secretARN where the SMTP credentials are stored, or specify an empty NoAuthentication structure if the relay destination server does not require SMTP credential authentication.</p>",
@@ -2971,19 +3905,19 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-]+$"
+      "pattern":"[a-zA-Z0-9-]+"
     },
     "RelayName":{
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-_]+$"
+      "pattern":"[a-zA-Z0-9-_]+"
     },
     "RelayServerName":{
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-\\.]+$"
+      "pattern":"[a-zA-Z0-9-\\.]+"
     },
     "RelayServerPort":{
       "type":"integer",
@@ -3017,7 +3951,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[\\sa-zA-Z0-9_]+$"
+      "pattern":"(addon\\.)?[\\sa-zA-Z0-9_]+"
     },
     "RetentionPeriod":{
       "type":"string",
@@ -3047,61 +3981,45 @@
           "shape":"ArchivedMessageId",
           "documentation":"<p>The unique identifier of the archived message.</p>"
         },
-        "Cc":{
-          "shape":"String",
-          "documentation":"<p>The email addresses in the CC header.</p>"
+        "ReceivedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the email was received.</p>"
         },
         "Date":{
           "shape":"String",
           "documentation":"<p>The date the email was sent.</p>"
         },
-        "Envelope":{
-          "shape":"Envelope",
-          "documentation":"<p>The SMTP envelope information of the email.</p>"
+        "To":{
+          "shape":"String",
+          "documentation":"<p>The email addresses in the To header.</p>"
         },
         "From":{
           "shape":"String",
           "documentation":"<p>The email address of the sender.</p>"
         },
-        "HasAttachments":{
-          "shape":"Boolean",
-          "documentation":"<p>A flag indicating if the email has attachments.</p>"
-        },
-        "InReplyTo":{
+        "Cc":{
           "shape":"String",
-          "documentation":"<p>The email message ID this is a reply to.</p>"
+          "documentation":"<p>The email addresses in the CC header.</p>"
         },
-        "IngressPointId":{
-          "shape":"IngressPointId",
-          "documentation":"<p>The ID of the ingress endpoint through which the email was received.</p>"
+        "Subject":{
+          "shape":"String",
+          "documentation":"<p>The subject header value of the email.</p>"
         },
         "MessageId":{
           "shape":"String",
           "documentation":"<p>The unique message ID of the email.</p>"
         },
+        "HasAttachments":{
+          "shape":"Boolean",
+          "documentation":"<p>A flag indicating if the email has attachments.</p>"
+        },
         "ReceivedHeaders":{
           "shape":"EmailReceivedHeadersList",
           "documentation":"<p>The received headers from the email delivery path.</p>"
         },
-        "ReceivedTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the email was received.</p>"
-        },
-        "SenderHostname":{
-          "shape":"String",
-          "documentation":"<p>The name of the host from which the email was received.</p>"
-        },
-        "SenderIpAddress":{
-          "shape":"SenderIpAddress",
-          "documentation":"<p>The IP address of the host from which the email was received.</p>"
-        },
-        "Subject":{
-          "shape":"String",
-          "documentation":"<p>The subject header value of the email.</p>"
-        },
-        "To":{
+        "InReplyTo":{
           "shape":"String",
-          "documentation":"<p>The email addresses in the To header.</p>"
+          "documentation":"<p>The email message ID this is a reply to.</p>"
         },
         "XMailer":{
           "shape":"String",
@@ -3114,6 +4032,26 @@
         "XPriority":{
           "shape":"String",
           "documentation":"<p>The priority level of the email.</p>"
+        },
+        "IngressPointId":{
+          "shape":"IngressPointId",
+          "documentation":"<p>The ID of the ingress endpoint through which the email was received.</p>"
+        },
+        "SenderHostname":{
+          "shape":"String",
+          "documentation":"<p>The name of the host from which the email was received.</p>"
+        },
+        "SenderIpAddress":{
+          "shape":"SenderIpAddress",
+          "documentation":"<ul> <li> <p>Mail archived with Mail Manager: The IP address of the client that connects to the ingress endpoint.</p> </li> <li> <p>Mail sent through a configuration set with the archiving option enabled: The IP address of the client that makes the SendEmail API call.</p> </li> </ul>"
+        },
+        "Envelope":{
+          "shape":"Envelope",
+          "documentation":"<p>The SMTP envelope information of the email.</p>"
+        },
+        "SourceArn":{
+          "shape":"String",
+          "documentation":"<p>Specifies the archived email source, identified by either a Rule Set's ARN with an Archive action, or a Configuration Set's Archive ARN.</p>"
         }
       },
       "documentation":"<p>A result row containing metadata for an archived email message.</p>"
@@ -3126,21 +4064,21 @@
       "type":"structure",
       "required":["Actions"],
       "members":{
-        "Actions":{
-          "shape":"RuleActions",
-          "documentation":"<p>The list of actions to execute when the conditions match the incoming email, and none of the \"unless conditions\" match.</p>"
+        "Name":{
+          "shape":"RuleName",
+          "documentation":"<p>The user-friendly name of the rule.</p>"
         },
         "Conditions":{
           "shape":"RuleConditions",
           "documentation":"<p>The conditions of this rule. All conditions must match the email for the actions to be executed. An empty list of conditions means that all emails match, but are still subject to any \"unless conditions\"</p>"
         },
-        "Name":{
-          "shape":"RuleName",
-          "documentation":"<p>The user-friendly name of the rule.</p>"
-        },
         "Unless":{
           "shape":"RuleConditions",
           "documentation":"<p>The \"unless conditions\" of this rule. None of the conditions can match the email for the actions to be executed. If any of these conditions do match the email, then the actions are not executed.</p>"
+        },
+        "Actions":{
+          "shape":"RuleActions",
+          "documentation":"<p>The list of actions to execute when the conditions match the incoming email, and none of the \"unless conditions\" match.</p>"
         }
       },
       "documentation":"<p>A rule contains conditions, \"unless conditions\" and actions. For each envelope recipient of an email, if all conditions match and none of the \"unless conditions\" match, then all of the actions are executed sequentially. If no conditions are provided, the rule always applies and the actions are implicitly executed. If only \"unless conditions\" are provided, the rule applies if the email does not match the evaluation of the \"unless conditions\".</p>"
@@ -3148,22 +4086,6 @@
     "RuleAction":{
       "type":"structure",
       "members":{
-        "AddHeader":{
-          "shape":"AddHeaderAction",
-          "documentation":"<p>This action adds a header. This can be used to add arbitrary email headers.</p>"
-        },
-        "Archive":{
-          "shape":"ArchiveAction",
-          "documentation":"<p>This action archives the email. This can be used to deliver an email to an archive.</p>"
-        },
-        "DeliverToMailbox":{
-          "shape":"DeliverToMailboxAction",
-          "documentation":"<p>This action delivers an email to a WorkMail mailbox.</p>"
-        },
-        "DeliverToQBusiness":{
-          "shape":"DeliverToQBusinessAction",
-          "documentation":"<p>This action delivers an email to an Amazon Q Business application for ingestion into its knowledge base.</p>"
-        },
         "Drop":{
           "shape":"DropAction",
           "documentation":"<p>This action terminates the evaluation of rules in the rule set.</p>"
@@ -3172,17 +4094,37 @@
           "shape":"RelayAction",
           "documentation":"<p>This action relays the email to another SMTP server.</p>"
         },
-        "ReplaceRecipient":{
-          "shape":"ReplaceRecipientAction",
-          "documentation":"<p>The action replaces certain or all recipients with a different set of recipients.</p>"
+        "Archive":{
+          "shape":"ArchiveAction",
+          "documentation":"<p>This action archives the email. This can be used to deliver an email to an archive.</p>"
+        },
+        "WriteToS3":{
+          "shape":"S3Action",
+          "documentation":"<p>This action writes the MIME content of the email to an S3 bucket.</p>"
         },
         "Send":{
           "shape":"SendAction",
           "documentation":"<p>This action sends the email to the internet.</p>"
         },
-        "WriteToS3":{
-          "shape":"S3Action",
-          "documentation":"<p>This action writes the MIME content of the email to an S3 bucket.</p>"
+        "AddHeader":{
+          "shape":"AddHeaderAction",
+          "documentation":"<p>This action adds a header. This can be used to add arbitrary email headers.</p>"
+        },
+        "ReplaceRecipient":{
+          "shape":"ReplaceRecipientAction",
+          "documentation":"<p>The action replaces certain or all recipients with a different set of recipients.</p>"
+        },
+        "DeliverToMailbox":{
+          "shape":"DeliverToMailboxAction",
+          "documentation":"<p>This action delivers an email to a WorkMail mailbox.</p>"
+        },
+        "DeliverToQBusiness":{
+          "shape":"DeliverToQBusinessAction",
+          "documentation":"<p>This action delivers an email to an Amazon Q Business application for ingestion into its knowledge base.</p>"
+        },
+        "PublishToSns":{
+          "shape":"SnsAction",
+          "documentation":"<p>This action publishes the email content to an Amazon SNS topic.</p>"
         }
       },
       "documentation":"<p>The action for a rule to take. Only one of the contained actions can be set.</p>",
@@ -3194,6 +4136,23 @@
       "max":10,
       "min":1
     },
+    "RuleAddressListArnList":{
+      "type":"list",
+      "member":{"shape":"AddressListArn"},
+      "max":1,
+      "min":1
+    },
+    "RuleAddressListEmailAttribute":{
+      "type":"string",
+      "enum":[
+        "RECIPIENT",
+        "MAIL_FROM",
+        "SENDER",
+        "FROM",
+        "TO",
+        "CC"
+      ]
+    },
     "RuleBooleanEmailAttribute":{
       "type":"string",
       "enum":[
@@ -3233,6 +4192,14 @@
         "Attribute":{
           "shape":"RuleBooleanEmailAttribute",
           "documentation":"<p>The boolean type representing the allowed attribute types for an email.</p>"
+        },
+        "Analysis":{
+          "shape":"Analysis",
+          "documentation":"<p>The Add On ARN and its returned value to evaluate in a boolean condition expression.</p>"
+        },
+        "IsInAddressList":{
+          "shape":"RuleIsInAddressList",
+          "documentation":"<p>The structure representing the address lists and address list attribute that will be used in evaluation of boolean expression.</p>"
         }
       },
       "documentation":"<p>The union type representing the allowed types of operands for a boolean condition.</p>",
@@ -3245,25 +4212,25 @@
           "shape":"RuleBooleanExpression",
           "documentation":"<p>The condition applies to a boolean expression passed in this field.</p>"
         },
-        "DmarcExpression":{
-          "shape":"RuleDmarcExpression",
-          "documentation":"<p>The condition applies to a DMARC policy expression passed in this field.</p>"
-        },
-        "IpExpression":{
-          "shape":"RuleIpExpression",
-          "documentation":"<p>The condition applies to an IP address expression passed in this field.</p>"
+        "StringExpression":{
+          "shape":"RuleStringExpression",
+          "documentation":"<p>The condition applies to a string expression passed in this field.</p>"
         },
         "NumberExpression":{
           "shape":"RuleNumberExpression",
           "documentation":"<p>The condition applies to a number expression passed in this field.</p>"
         },
-        "StringExpression":{
-          "shape":"RuleStringExpression",
-          "documentation":"<p>The condition applies to a string expression passed in this field.</p>"
+        "IpExpression":{
+          "shape":"RuleIpExpression",
+          "documentation":"<p>The condition applies to an IP address expression passed in this field.</p>"
         },
         "VerdictExpression":{
           "shape":"RuleVerdictExpression",
           "documentation":"<p>The condition applies to a verdict expression passed in this field.</p>"
+        },
+        "DmarcExpression":{
+          "shape":"RuleDmarcExpression",
+          "documentation":"<p>The condition applies to a DMARC policy expression passed in this field.</p>"
         }
       },
       "documentation":"<p>The conditional expression used to evaluate an email for determining if a rule action should be taken.</p>",
@@ -3350,9 +4317,9 @@
     },
     "RuleIpStringValue":{
       "type":"string",
-      "max":18,
+      "max":43,
       "min":1,
-      "pattern":"^(([0-9]|.|/)*)$"
+      "pattern":"(([0-9]|.|:|/)*)"
     },
     "RuleIpToEvaluate":{
       "type":"structure",
@@ -3371,11 +4338,29 @@
       "max":10,
       "min":1
     },
+    "RuleIsInAddressList":{
+      "type":"structure",
+      "required":[
+        "Attribute",
+        "AddressLists"
+      ],
+      "members":{
+        "Attribute":{
+          "shape":"RuleAddressListEmailAttribute",
+          "documentation":"<p>The email attribute that needs to be evaluated against the address list.</p>"
+        },
+        "AddressLists":{
+          "shape":"RuleAddressListArnList",
+          "documentation":"<p>The address lists that will be used for evaluation.</p>"
+        }
+      },
+      "documentation":"<p>The structure type for a boolean condition that provides the address lists and address list attribute to evaluate.</p>"
+    },
     "RuleName":{
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[a-zA-Z0-9_.-]+$"
+      "pattern":"[a-zA-Z0-9_.-]+"
     },
     "RuleNumberEmailAttribute":{
       "type":"string",
@@ -3429,10 +4414,6 @@
     "RuleSet":{
       "type":"structure",
       "members":{
-        "LastModificationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last modification date of the rule set.</p>"
-        },
         "RuleSetId":{
           "shape":"RuleSetId",
           "documentation":"<p>The identifier of the rule set.</p>"
@@ -3440,6 +4421,10 @@
         "RuleSetName":{
           "shape":"RuleSetName",
           "documentation":"<p>A user-friendly name for the rule set.</p>"
+        },
+        "LastModificationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last modification date of the rule set.</p>"
         }
       },
       "documentation":"<p>A rule set contains a list of rules that are evaluated in order. Each rule is evaluated sequentially for each email.</p>"
@@ -3454,7 +4439,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^[a-zA-Z0-9_.-]+$"
+      "pattern":"[a-zA-Z0-9_.-]+"
     },
     "RuleSets":{
       "type":"list",
@@ -3522,6 +4507,10 @@
         "MimeHeaderAttribute":{
           "shape":"MimeHeaderAttribute",
           "documentation":"<p>The email MIME X-Header attribute to evaluate in a string condition expression.</p>"
+        },
+        "Analysis":{
+          "shape":"Analysis",
+          "documentation":"<p>The Add On ARN and its returned value to evaluate in a string condition expression.</p>"
         }
       },
       "documentation":"<p>The string to evaluate in a string condition expression.</p>",
@@ -3581,13 +4570,13 @@
     "RuleVerdictToEvaluate":{
       "type":"structure",
       "members":{
-        "Analysis":{
-          "shape":"Analysis",
-          "documentation":"<p>The Add On ARN and its returned value to evaluate in a verdict condition expression.</p>"
-        },
         "Attribute":{
           "shape":"RuleVerdictAttribute",
           "documentation":"<p>The email verdict attribute to evaluate in a string verdict expression.</p>"
+        },
+        "Analysis":{
+          "shape":"Analysis",
+          "documentation":"<p>The Add On ARN and its returned value to evaluate in a verdict condition expression.</p>"
         }
       },
       "documentation":"<p>The verdict to evaluate in a verdict condition expression.</p>",
@@ -3639,7 +4628,7 @@
       "type":"string",
       "max":62,
       "min":1,
-      "pattern":"^[a-zA-Z0-9.-]+$"
+      "pattern":"[a-zA-Z0-9.-]+"
     },
     "S3ExportDestinationConfiguration":{
       "type":"structure",
@@ -3653,15 +4642,37 @@
     },
     "S3Location":{
       "type":"string",
-      "pattern":"^s3://[a-zA-Z0-9.-]{3,63}(/[a-zA-Z0-9!_.*'()/-]*)*$"
+      "pattern":"s3://[a-zA-Z0-9.-]{3,63}(/[a-zA-Z0-9!_.*'()/-]*)*"
     },
     "S3Prefix":{
       "type":"string",
       "max":62,
       "min":1,
-      "pattern":"^[a-zA-Z0-9!_.*'()/-]+$"
+      "pattern":"[a-zA-Z0-9!_.*'()/-]+"
     },
     "S3PresignedURL":{"type":"string"},
+    "SavedAddress":{
+      "type":"structure",
+      "required":[
+        "Address",
+        "CreatedTimestamp"
+      ],
+      "members":{
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>The email or domain that constitutes the address.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the address was added to the address list.</p>"
+        }
+      },
+      "documentation":"<p>An address that is a member of an address list.</p>"
+    },
+    "SavedAddresses":{
+      "type":"list",
+      "member":{"shape":"SavedAddress"}
+    },
     "SearchId":{
       "type":"string",
       "max":64,
@@ -3686,21 +4697,21 @@
     "SearchStatus":{
       "type":"structure",
       "members":{
+        "SubmissionTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the search was submitted.</p>"
+        },
         "CompletionTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of when the search completed (if finished).</p>"
         },
-        "ErrorMessage":{
-          "shape":"ErrorMessage",
-          "documentation":"<p>An error message if the search failed.</p>"
-        },
         "State":{
           "shape":"SearchState",
           "documentation":"<p>The current state of the search job.</p>"
         },
-        "SubmissionTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of when the search was submitted.</p>"
+        "ErrorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>An error message if the search failed.</p>"
         }
       },
       "documentation":"<p>The current status of an archive search job.</p>"
@@ -3725,7 +4736,7 @@
     },
     "SecretArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+$"
+      "pattern":"arn:(aws|aws-cn|aws-us-gov):secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=,.@-]+"
     },
     "SendAction":{
       "type":"structure",
@@ -3758,26 +4769,86 @@
       "type":"string",
       "max":64,
       "min":8,
-      "pattern":"^[A-Za-z0-9!@#$%^&*()_+\\-=\\[\\]{}|.,?]+$",
+      "pattern":"[A-Za-z0-9!@#$%^&*()_+\\-=\\[\\]{}|.,?]+",
       "sensitive":true
     },
+    "SnsAction":{
+      "type":"structure",
+      "required":[
+        "TopicArn",
+        "RoleArn"
+      ],
+      "members":{
+        "ActionFailurePolicy":{
+          "shape":"ActionFailurePolicy",
+          "documentation":"<p>A policy that states what to do in the case of failure. The action will fail if there are configuration errors. For example, specified SNS topic has been deleted or the role lacks necessary permissions to call the <code>sns:Publish</code> API.</p>"
+        },
+        "TopicArn":{
+          "shape":"SnsTopicArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon SNS Topic to which notification for the email received will be published.</p>"
+        },
+        "RoleArn":{
+          "shape":"IamRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Role to use while writing to Amazon SNS. This role must have access to the <code>sns:Publish</code> API for the given topic.</p>"
+        },
+        "Encoding":{
+          "shape":"SnsNotificationEncoding",
+          "documentation":"<p>The encoding to use for the email within the Amazon SNS notification. The default value is <code>UTF-8</code>. Use <code>BASE64</code> if you need to preserve all special characters, especially when the original message uses a different encoding format.</p>"
+        },
+        "PayloadType":{
+          "shape":"SnsNotificationPayloadType",
+          "documentation":"<p>The expected payload type within the Amazon SNS notification. <code>CONTENT</code> attempts to publish the full email content with 20KB of headers content. <code>HEADERS</code> extracts up to 100KB of header content to include in the notification, email content will not be included to the notification. The default value is <code>CONTENT</code>.</p>"
+        }
+      },
+      "documentation":"<p>The action to publish the email content to an Amazon SNS topic. When executed, this action will send the email as a notification to the specified SNS topic.</p>"
+    },
+    "SnsNotificationEncoding":{
+      "type":"string",
+      "enum":[
+        "UTF-8",
+        "BASE64"
+      ]
+    },
+    "SnsNotificationPayloadType":{
+      "type":"string",
+      "enum":[
+        "HEADERS",
+        "CONTENT"
+      ]
+    },
+    "SnsTopicArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:(aws|aws-cn|aws-us-gov):sns:[a-z]{2}-[a-z]+-\\d{1}:\\d{12}:[\\w\\-]{1,256}"
+    },
+    "StartAddressListImportJobRequest":{
+      "type":"structure",
+      "required":["JobId"],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the import job that needs to be started.</p>"
+        }
+      }
+    },
+    "StartAddressListImportJobResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "StartArchiveExportRequest":{
       "type":"structure",
       "required":[
         "ArchiveId",
-        "ExportDestinationConfiguration",
         "FromTimestamp",
-        "ToTimestamp"
+        "ToTimestamp",
+        "ExportDestinationConfiguration"
       ],
       "members":{
         "ArchiveId":{
           "shape":"ArchiveId",
           "documentation":"<p>The identifier of the archive to export emails from.</p>"
         },
-        "ExportDestinationConfiguration":{
-          "shape":"ExportDestinationConfiguration",
-          "documentation":"<p>Details on where to deliver the exported email data.</p>"
-        },
         "Filters":{
           "shape":"ArchiveFilters",
           "documentation":"<p>Criteria to filter which emails are included in the export.</p>"
@@ -3786,17 +4857,21 @@
           "shape":"Timestamp",
           "documentation":"<p>The start of the timestamp range to include emails from.</p>"
         },
-        "IncludeMetadata":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to include message metadata as JSON files in the export.</p>"
+        "ToTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end of the timestamp range to include emails from.</p>"
         },
         "MaxResults":{
           "shape":"ExportMaxResults",
           "documentation":"<p>The maximum number of email items to include in the export.</p>"
         },
-        "ToTimestamp":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end of the timestamp range to include emails from.</p>"
+        "ExportDestinationConfiguration":{
+          "shape":"ExportDestinationConfiguration",
+          "documentation":"<p>Details on where to deliver the exported email data.</p>"
+        },
+        "IncludeMetadata":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include message metadata as JSON files in the export.</p>"
         }
       },
       "documentation":"<p>The request to initiate an export of emails from an archive.</p>"
@@ -3816,8 +4891,8 @@
       "required":[
         "ArchiveId",
         "FromTimestamp",
-        "MaxResults",
-        "ToTimestamp"
+        "ToTimestamp",
+        "MaxResults"
       ],
       "members":{
         "ArchiveId":{
@@ -3832,13 +4907,13 @@
           "shape":"Timestamp",
           "documentation":"<p>The start timestamp of the range to search emails from.</p>"
         },
-        "MaxResults":{
-          "shape":"SearchMaxResults",
-          "documentation":"<p>The maximum number of search results to return.</p>"
-        },
         "ToTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The end timestamp of the range to search emails from.</p>"
+        },
+        "MaxResults":{
+          "shape":"SearchMaxResults",
+          "documentation":"<p>The maximum number of search results to return.</p>"
         }
       },
       "documentation":"<p>The request to initiate a search across emails in an archive.</p>"
@@ -3853,6 +4928,20 @@
       },
       "documentation":"<p>The response from initiating an archive search.</p>"
     },
+    "StopAddressListImportJobRequest":{
+      "type":"structure",
+      "required":["JobId"],
+      "members":{
+        "JobId":{
+          "shape":"JobId",
+          "documentation":"<p>The identifier of the import job that needs to be stopped.</p>"
+        }
+      }
+    },
+    "StopAddressListImportJobResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "StopArchiveExportRequest":{
       "type":"structure",
       "required":["ExportId"],
@@ -3866,8 +4955,7 @@
     },
     "StopArchiveExportResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response indicating if the request to stop the export job succeeded.</p> <p>On success, returns an HTTP 200 status code. On failure, returns an error message.</p>"
     },
     "StopArchiveSearchRequest":{
@@ -3883,8 +4971,7 @@
     },
     "StopArchiveSearchResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response indicating if the request to stop the search job succeeded.</p> <p>On success, returns an HTTP 200 status code. On failure, returns an error message.</p>"
     },
     "String":{"type":"string"},
@@ -3925,8 +5012,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[a-zA-Z0-9/_\\+=\\.:@\\-]+$",
-      "sensitive":true
+      "pattern":"[a-zA-Z0-9/_\\+=\\.:@\\-]+"
     },
     "TagKeyList":{
       "type":"list",
@@ -3959,21 +5045,19 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^[a-zA-Z0-9/_\\+=\\.:@\\-]*$",
-      "sensitive":true
+      "pattern":"[a-zA-Z0-9/_\\+=\\.:@\\-]*"
     },
     "TaggableResourceArn":{
       "type":"string",
       "max":1011,
       "min":20,
-      "pattern":"^arn:aws(|-cn|-us-gov):ses:[a-z0-9-]{1,20}:[0-9]{12}:(mailmanager-|addon-).+$"
+      "pattern":"arn:aws(|-cn|-us-gov):ses:[a-z0-9-]{1,20}:[0-9]{12}:(mailmanager-|addon-).+"
     },
     "ThrottlingException":{
       "type":"structure",
@@ -3987,22 +5071,22 @@
     "TrafficPolicy":{
       "type":"structure",
       "required":[
-        "DefaultAction",
+        "TrafficPolicyName",
         "TrafficPolicyId",
-        "TrafficPolicyName"
+        "DefaultAction"
       ],
       "members":{
-        "DefaultAction":{
-          "shape":"AcceptAction",
-          "documentation":"<p>Default action instructs the traﬃc policy to either Allow or Deny (block) messages that fall outside of (or not addressed by) the conditions of your policy statements</p>"
+        "TrafficPolicyName":{
+          "shape":"TrafficPolicyName",
+          "documentation":"<p>A user-friendly name of the traffic policy resource.</p>"
         },
         "TrafficPolicyId":{
           "shape":"TrafficPolicyId",
           "documentation":"<p>The identifier of the traffic policy resource.</p>"
         },
-        "TrafficPolicyName":{
-          "shape":"TrafficPolicyName",
-          "documentation":"<p>A user-friendly name of the traffic policy resource.</p>"
+        "DefaultAction":{
+          "shape":"AcceptAction",
+          "documentation":"<p>Default action instructs the traﬃc policy to either Allow or Deny (block) messages that fall outside of (or not addressed by) the conditions of your policy statements</p>"
         }
       },
       "documentation":"<p>The structure of a traffic policy resource which is a container for policy statements.</p>"
@@ -4021,7 +5105,7 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^[A-Za-z0-9_\\-]+$"
+      "pattern":"[A-Za-z0-9_\\-]+"
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -4042,8 +5126,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateArchiveRequest":{
       "type":"structure",
@@ -4066,18 +5149,13 @@
     },
     "UpdateArchiveResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response indicating if the archive update succeeded or failed.</p> <p>On success, returns an HTTP 200 status code. On failure, returns an error message.</p>"
     },
     "UpdateIngressPointRequest":{
       "type":"structure",
       "required":["IngressPointId"],
       "members":{
-        "IngressPointConfiguration":{
-          "shape":"IngressPointConfiguration",
-          "documentation":"<p>If you choose an Authenticated ingress endpoint, you must configure either an SMTP password or a secret ARN.</p>"
-        },
         "IngressPointId":{
           "shape":"IngressPointId",
           "documentation":"<p>The identifier for the ingress endpoint you want to update.</p>"
@@ -4086,33 +5164,32 @@
           "shape":"IngressPointName",
           "documentation":"<p>A user friendly name for the ingress endpoint resource.</p>"
         },
-        "RuleSetId":{
-          "shape":"RuleSetId",
-          "documentation":"<p>The identifier of an existing rule set that you attach to an ingress endpoint resource.</p>"
-        },
         "StatusToUpdate":{
           "shape":"IngressPointStatusToUpdate",
           "documentation":"<p>The update status of an ingress endpoint.</p>"
         },
+        "RuleSetId":{
+          "shape":"RuleSetId",
+          "documentation":"<p>The identifier of an existing rule set that you attach to an ingress endpoint resource.</p>"
+        },
         "TrafficPolicyId":{
           "shape":"TrafficPolicyId",
           "documentation":"<p>The identifier of an existing traffic policy that you attach to an ingress endpoint resource.</p>"
+        },
+        "IngressPointConfiguration":{
+          "shape":"IngressPointConfiguration",
+          "documentation":"<p>If you choose an Authenticated ingress endpoint, you must configure either an SMTP password or a secret ARN.</p>"
         }
       }
     },
     "UpdateIngressPointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRelayRequest":{
       "type":"structure",
       "required":["RelayId"],
       "members":{
-        "Authentication":{
-          "shape":"RelayAuthentication",
-          "documentation":"<p>Authentication for the relay destination server—specify the secretARN where the SMTP credentials are stored.</p>"
-        },
         "RelayId":{
           "shape":"RelayId",
           "documentation":"<p>The unique relay identifier.</p>"
@@ -4128,13 +5205,16 @@
         "ServerPort":{
           "shape":"RelayServerPort",
           "documentation":"<p>The destination relay server port.</p>"
+        },
+        "Authentication":{
+          "shape":"RelayAuthentication",
+          "documentation":"<p>Authentication for the relay destination server—specify the secretARN where the SMTP credentials are stored.</p>"
         }
       }
     },
     "UpdateRelayResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRuleSetRequest":{
       "type":"structure",
@@ -4156,25 +5236,12 @@
     },
     "UpdateRuleSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTrafficPolicyRequest":{
       "type":"structure",
       "required":["TrafficPolicyId"],
       "members":{
-        "DefaultAction":{
-          "shape":"AcceptAction",
-          "documentation":"<p>Default action instructs the traﬃc policy to either Allow or Deny (block) messages that fall outside of (or not addressed by) the conditions of your policy statements</p>"
-        },
-        "MaxMessageSizeBytes":{
-          "shape":"MaxMessageSizeBytes",
-          "documentation":"<p>The maximum message size in bytes of email which is allowed in by this traffic policy—anything larger will be blocked.</p>"
-        },
-        "PolicyStatements":{
-          "shape":"PolicyStatementList",
-          "documentation":"<p>The list of conditions to be updated for filtering email traffic.</p>"
-        },
         "TrafficPolicyId":{
           "shape":"TrafficPolicyId",
           "documentation":"<p>The identifier of the traffic policy that you want to update.</p>"
@@ -4182,13 +5249,24 @@
         "TrafficPolicyName":{
           "shape":"TrafficPolicyName",
           "documentation":"<p>A user-friendly name for the traffic policy resource.</p>"
+        },
+        "PolicyStatements":{
+          "shape":"PolicyStatementList",
+          "documentation":"<p>The list of conditions to be updated for filtering email traffic.</p>"
+        },
+        "DefaultAction":{
+          "shape":"AcceptAction",
+          "documentation":"<p>Default action instructs the traﬃc policy to either Allow or Deny (block) messages that fall outside of (or not addressed by) the conditions of your policy statements</p>"
+        },
+        "MaxMessageSizeBytes":{
+          "shape":"MaxMessageSizeBytes",
+          "documentation":"<p>The maximum message size in bytes of email which is allowed in by this traffic policy—anything larger will be blocked.</p>"
         }
       }
     },
     "UpdateTrafficPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -4197,6 +5275,10 @@
       },
       "documentation":"<p>The request validation has failed. For details, see the accompanying error message.</p>",
       "exception":true
+    },
+    "VpcEndpointId":{
+      "type":"string",
+      "pattern":"vpce-[a-zA-Z0-9]{17}"
     }
   },
   "documentation":"<p><fullname>Amazon SES Mail Manager API</fullname> <p>The Amazon SES Mail Manager API contains operations and data types that comprise the Mail Manager feature of <a href=\"http://aws.amazon.com/ses\">Amazon Simple Email Service (SES)</a>.</p> <p>Mail Manager is a set of Amazon SES email gateway features designed to help you strengthen your organization's email infrastructure, simplify email workflow management, and streamline email compliance control. To learn more, see the <a href=\"https://docs.aws.amazon.com/ses/latest/dg/eb.html\">Mail Manager chapter</a> in the <i>Amazon SES Developer Guide</i>.</p></p>"
diff -pruN 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/waiters-2.json 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/mailmanager/2023-10-17/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mailmanager/2023-10-17/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/managedblockchain/2018-09-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/managedblockchain/2018-09-24/service-2.json 2.31.35-1/awscli/botocore/data/managedblockchain/2018-09-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/managedblockchain/2018-09-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/managedblockchain/2018-09-24/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,8 @@
     "serviceId":"ManagedBlockchain",
     "signatureVersion":"v4",
     "signingName":"managedblockchain",
-    "uid":"managedblockchain-2018-09-24"
+    "uid":"managedblockchain-2018-09-24",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateAccessor":{
@@ -879,8 +880,7 @@
     },
     "DeleteAccessorOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMemberInput":{
       "type":"structure",
@@ -905,8 +905,7 @@
     },
     "DeleteMemberOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNodeInput":{
       "type":"structure",
@@ -937,8 +936,7 @@
     },
     "DeleteNodeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescriptionString":{
       "type":"string",
@@ -1125,8 +1123,7 @@
     "InstanceTypeString":{"type":"string"},
     "InternalServiceErrorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request processing has failed because of an unknown error, exception or failure.</p>",
       "error":{"httpStatusCode":500},
       "exception":true
@@ -2315,8 +2312,7 @@
     },
     "RejectInvitationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveAction":{
       "type":"structure",
@@ -2418,8 +2414,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2441,8 +2436,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request or operation couldn't be performed because a service is throttling requests. The most common source of throttling errors is creating resources that exceed your service limit for this resource type. Request a limit increase or delete unused resources if possible.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
@@ -2487,8 +2481,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMemberInput":{
       "type":"structure",
@@ -2517,8 +2510,7 @@
     },
     "UpdateMemberOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNodeInput":{
       "type":"structure",
@@ -2551,8 +2543,7 @@
     },
     "UpdateNodeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UsernameString":{
       "type":"string",
@@ -2597,8 +2588,7 @@
     },
     "VoteOnProposalOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "VoteSummary":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/managedblockchain-query/2023-05-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-agreement/2020-03-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-catalog/2018-09-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-catalog/2018-09-17/service-2.json 2.31.35-1/awscli/botocore/data/marketplace-catalog/2018-09-17/service-2.json
--- 2.23.6-1/awscli/botocore/data/marketplace-catalog/2018-09-17/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-catalog/2018-09-17/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"catalog.marketplace",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"AWS Marketplace Catalog",
     "serviceFullName":"AWS Marketplace Catalog Service",
     "serviceId":"Marketplace Catalog",
     "signatureVersion":"v4",
     "signingName":"aws-marketplace",
-    "uid":"marketplace-catalog-2018-09-17"
+    "uid":"marketplace-catalog-2018-09-17",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchDescribeEntities":{
@@ -200,7 +202,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Allows you to request changes for your entities. Within a single <code>ChangeSet</code>, you can't start the same change type against the same entity multiple times. Additionally, when a <code>ChangeSet</code> is running, all the entities targeted by the different changes are locked until the change set has completed (either succeeded, cancelled, or failed). If you try to start a change set containing a change against an entity that is already locked, you will receive a <code>ResourceInUseException</code> error.</p> <p>For example, you can't start the <code>ChangeSet</code> described in the <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_StartChangeSet.html#API_StartChangeSet_Examples\">example</a> later in this topic because it contains two changes to run the same change type (<code>AddRevisions</code>) against the same entity (<code>entity-id@1</code>).</p> <p>For more information about working with change sets, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets\"> Working with change sets</a>. For information about change types for single-AMI products, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/ami-products.html#working-with-single-AMI-products\">Working with single-AMI products</a>. Also, for more information about change types available for container-based products, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#working-with-container-products\">Working with container products</a>.</p>"
+      "documentation":"<p>Allows you to request changes for your entities. Within a single <code>ChangeSet</code>, you can't start the same change type against the same entity multiple times. Additionally, when a <code>ChangeSet</code> is running, all the entities targeted by the different changes are locked until the change set has completed (either succeeded, cancelled, or failed). If you try to start a change set containing a change against an entity that is already locked, you will receive a <code>ResourceInUseException</code> error.</p> <p>For example, you can't start the <code>ChangeSet</code> described in the <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_StartChangeSet.html#API_StartChangeSet_Examples\">example</a> later in this topic because it contains two changes to run the same change type (<code>AddRevisions</code>) against the same entity (<code>entity-id@1</code>).</p> <p>For more information about working with change sets, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets\"> Working with change sets</a>. For information about change types for single-AMI products, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/ami-products.html#working-with-single-AMI-products\">Working with single-AMI products</a>. Also, for more information about change types available for container-based products, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/container-products.html#working-with-container-products\">Working with container products</a>.</p> <p>To download \"DetailsDocument\" shapes, see <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-python\">Python</a> and <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-java/tree/main\">Java</a> shapes on GitHub.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -524,7 +526,7 @@
         },
         "DetailsDocument":{
           "shape":"JsonDocumentType",
-          "documentation":"<p>Alternative field that accepts a JSON value instead of a string for <code>ChangeType</code> details. You can use either <code>Details</code> or <code>DetailsDocument</code>, but not both.</p>"
+          "documentation":"<p>Alternative field that accepts a JSON value instead of a string for <code>ChangeType</code> details. You can use either <code>Details</code> or <code>DetailsDocument</code>, but not both.</p> <p>To download the \"DetailsDocument\" shapes, see the <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-python\">Python</a> and <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-java/tree/main\">Java</a> shapes on GitHub.</p>"
         },
         "ChangeName":{
           "shape":"ChangeName",
@@ -618,7 +620,7 @@
         },
         "DetailsDocument":{
           "shape":"JsonDocumentType",
-          "documentation":"<p>The JSON value of the details specific to the change type of the requested change.</p>"
+          "documentation":"<p>The JSON value of the details specific to the change type of the requested change.</p> <p>To download the \"DetailsDocument\" shapes, see the <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-python\">Python</a> and <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-java/tree/main\">Java</a> shapes on GitHub.</p>"
         },
         "ErrorDetailList":{
           "shape":"ErrorDetailList",
@@ -731,7 +733,8 @@
         "EntityId",
         "LastModifiedDate",
         "ProductTitle",
-        "Visibility"
+        "Visibility",
+        "CompatibleAWSServices"
       ]
     },
     "ContainerProductSummary":{
@@ -976,8 +979,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeChangeSetRequest":{
       "type":"structure",
@@ -1091,7 +1093,7 @@
         },
         "DetailsDocument":{
           "shape":"JsonDocumentType",
-          "documentation":"<p>The JSON value of the details specific to the entity.</p>"
+          "documentation":"<p>The JSON value of the details specific to the entity.</p> <p>To download \"DetailsDocument\" shapes, see the <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-python\">Python</a> and <a href=\"https://github.com/awslabs/aws-marketplace-catalog-api-shapes-for-java/tree/main\">Java</a> shapes on GitHub.</p>"
         }
       }
     },
@@ -1227,7 +1229,8 @@
         "ResaleAuthorizationSummary":{
           "shape":"ResaleAuthorizationSummary",
           "documentation":"<p>An object that contains summary information about the Resale Authorization.</p>"
-        }
+        },
+        "MachineLearningProductSummary":{"shape":"MachineLearningProductSummary"}
       },
       "documentation":"<p>This object is a container for common summary information about the entity. The summary doesn't contain the whole entity structure, but it does contain information common across all entities.</p>"
     },
@@ -1267,7 +1270,8 @@
         "ResaleAuthorizationFilters":{
           "shape":"ResaleAuthorizationFilters",
           "documentation":"<p>A filter for Resale Authorizations.</p>"
-        }
+        },
+        "MachineLearningProductFilters":{"shape":"MachineLearningProductFilters"}
       },
       "documentation":"<p>Object containing all the filter fields per entity type.</p>",
       "union":true
@@ -1298,7 +1302,8 @@
         "ResaleAuthorizationSort":{
           "shape":"ResaleAuthorizationSort",
           "documentation":"<p>A sort for Resale Authorizations.</p>"
-        }
+        },
+        "MachineLearningProductSort":{"shape":"MachineLearningProductSort"}
       },
       "documentation":"<p>Object containing all the sort fields per entity type.</p>",
       "union":true
@@ -1429,8 +1434,7 @@
     },
     "JsonDocumentType":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "ListChangeSetsMaxResultInteger":{
@@ -1565,6 +1569,169 @@
         }
       }
     },
+    "MachineLearningProductEntityIdFilter":{
+      "type":"structure",
+      "members":{
+        "ValueList":{
+          "shape":"MachineLearningProductEntityIdFilterValueList",
+          "documentation":"<p>A list of entity IDs to filter by. The operation returns machine learning products with entity IDs that match the values in this list.</p>"
+        }
+      },
+      "documentation":"<p>The filter for machine learning product entity IDs.</p>"
+    },
+    "MachineLearningProductEntityIdFilterValueList":{
+      "type":"list",
+      "member":{"shape":"MachineLearningProductEntityIdString"},
+      "documentation":"<p>A list of entity ID values to filter by. You can include up to 10 entity IDs in this list.</p>",
+      "max":10,
+      "min":1
+    },
+    "MachineLearningProductEntityIdString":{
+      "type":"string",
+      "documentation":"<p>The entity ID of a machine learning product. This string uniquely identifies the product.</p>",
+      "max":255,
+      "min":1,
+      "pattern":"^[a-zA-Z0-9][.a-zA-Z0-9/-]+[a-zA-Z0-9]$"
+    },
+    "MachineLearningProductFilters":{
+      "type":"structure",
+      "members":{
+        "EntityId":{
+          "shape":"MachineLearningProductEntityIdFilter",
+          "documentation":"<p>Filter machine learning products by their entity IDs.</p>"
+        },
+        "LastModifiedDate":{
+          "shape":"MachineLearningProductLastModifiedDateFilter",
+          "documentation":"<p>Filter machine learning products by their last modified date.</p>"
+        },
+        "ProductTitle":{
+          "shape":"MachineLearningProductTitleFilter",
+          "documentation":"<p>Filter machine learning products by their product titles.</p>"
+        },
+        "Visibility":{
+          "shape":"MachineLearningProductVisibilityFilter",
+          "documentation":"<p>Filter machine learning products by their visibility status.</p>"
+        }
+      },
+      "documentation":"<p>The filters that you can use with the ListEntities operation to filter machine learning products. You can filter by <code>EntityId</code>, <code>astModifiedDate</code>, <code>ProductTitle</code>, and <code>Visibility</code>.</p>"
+    },
+    "MachineLearningProductLastModifiedDateFilter":{
+      "type":"structure",
+      "members":{
+        "DateRange":{
+          "shape":"MachineLearningProductLastModifiedDateFilterDateRange",
+          "documentation":"<p>A date range to filter by. The operation returns machine learning products with last modified dates that fall within this range.</p>"
+        }
+      },
+      "documentation":"<p>The filter for machine learning product last modified date.</p>"
+    },
+    "MachineLearningProductLastModifiedDateFilterDateRange":{
+      "type":"structure",
+      "members":{
+        "AfterValue":{
+          "shape":"DateTimeISO8601",
+          "documentation":"<p>The start date (inclusive) of the date range. The operation returns machine learning products with last modified dates on or after this date.</p>"
+        },
+        "BeforeValue":{
+          "shape":"DateTimeISO8601",
+          "documentation":"<p>The end date (inclusive) of the date range. The operation returns machine learning products with last modified dates on or before this date.</p>"
+        }
+      },
+      "documentation":"<p>A date range for filtering machine learning products by their last modified date.</p>"
+    },
+    "MachineLearningProductSort":{
+      "type":"structure",
+      "members":{
+        "SortBy":{
+          "shape":"MachineLearningProductSortBy",
+          "documentation":"<p>The field to sort by. Valid values: <code>EntityId</code>, <code>LastModifiedDate</code>, <code>ProductTitle</code>, and <code>Visibility</code>.</p>"
+        },
+        "SortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The sort order. Valid values are <code>ASC</code> (ascending) and <code>DESC</code> (descending).</p>"
+        }
+      },
+      "documentation":"<p>The sort options for machine learning products.</p>"
+    },
+    "MachineLearningProductSortBy":{
+      "type":"string",
+      "documentation":"<p>The fields that you can sort machine learning products by.</p>",
+      "enum":[
+        "EntityId",
+        "LastModifiedDate",
+        "ProductTitle",
+        "Visibility"
+      ]
+    },
+    "MachineLearningProductSummary":{
+      "type":"structure",
+      "members":{
+        "ProductTitle":{
+          "shape":"MachineLearningProductTitleString",
+          "documentation":"<p>The title of the machine learning product.</p>"
+        },
+        "Visibility":{
+          "shape":"MachineLearningProductVisibilityString",
+          "documentation":"<p>The visibility status of the machine learning product. Valid values are <code>Limited</code>, <code>Public</code>, <code>Restricted</code>, and <code>Draft</code>.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a machine learning product.</p>"
+    },
+    "MachineLearningProductTitleFilter":{
+      "type":"structure",
+      "members":{
+        "ValueList":{
+          "shape":"MachineLearningProductTitleFilterValueList",
+          "documentation":"<p>A list of product titles to filter by. The operation returns machine learning products with titles that exactly match the values in this list.</p>"
+        },
+        "WildCardValue":{
+          "shape":"MachineLearningProductTitleString",
+          "documentation":"<p>A wildcard value to filter product titles. The operation returns machine learning products with titles that match this wildcard pattern.</p>"
+        }
+      },
+      "documentation":"<p>The filter for machine learning product titles.</p>"
+    },
+    "MachineLearningProductTitleFilterValueList":{
+      "type":"list",
+      "member":{"shape":"MachineLearningProductTitleString"},
+      "documentation":"<p>A list of product title values to filter by. You can include up to 10 product titles in this list.</p>",
+      "max":10,
+      "min":1
+    },
+    "MachineLearningProductTitleString":{
+      "type":"string",
+      "documentation":"<p>The title of a machine learning product.</p>",
+      "max":255,
+      "min":1,
+      "pattern":"^(.)+$"
+    },
+    "MachineLearningProductVisibilityFilter":{
+      "type":"structure",
+      "members":{
+        "ValueList":{
+          "shape":"MachineLearningProductVisibilityFilterValueList",
+          "documentation":"<p>A list of visibility values to filter by. The operation returns machine learning products with visibility status that match the values in this list.</p>"
+        }
+      },
+      "documentation":"<p>The filter for machine learning product visibility status.</p>"
+    },
+    "MachineLearningProductVisibilityFilterValueList":{
+      "type":"list",
+      "member":{"shape":"MachineLearningProductVisibilityString"},
+      "documentation":"<p>A list of visibility status values to filter by. You can include up to 10 visibility status values in this list.</p>",
+      "max":10,
+      "min":1
+    },
+    "MachineLearningProductVisibilityString":{
+      "type":"string",
+      "documentation":"<p>The visibility status of a machine learning product. Valid values are:</p> <ul> <li> <p> <code>Limited</code> - The product is available to a limited set of buyers.</p> </li> <li> <p> <code>Public</code> - The product is publicly available to all buyers.</p> </li> <li> <p> <code>Restricted</code> - The product has restricted availability.</p> </li> <li> <p> <code>Draft</code> - The product is in draft state and not yet available to buyers.</p> </li> </ul>",
+      "enum":[
+        "Limited",
+        "Public",
+        "Restricted",
+        "Draft"
+      ]
+    },
     "NextToken":{
       "type":"string",
       "max":2048,
@@ -1956,8 +2123,7 @@
     },
     "PutResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequestedChangeList":{
       "type":"list",
@@ -2629,7 +2795,8 @@
         "EntityId",
         "ProductTitle",
         "Visibility",
-        "LastModifiedDate"
+        "LastModifiedDate",
+        "DeliveryOptionTypes"
       ]
     },
     "SaaSProductSummary":{
@@ -2836,8 +3003,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2874,8 +3040,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -2900,5 +3065,5 @@
       "pattern":"^[a-zA-Z]+$"
     }
   },
-  "documentation":"<p>Catalog API actions allow you to manage your entities through list, describe, and update capabilities. An entity can be a product or an offer on AWS Marketplace. </p> <p>You can automate your entity update process by integrating the AWS Marketplace Catalog API with your AWS Marketplace product build or deployment pipelines. You can also create your own applications on top of the Catalog API to manage your products on AWS Marketplace.</p>"
+  "documentation":"<p>Catalog API actions allow you to manage your entities through list, describe, and update capabilities. An <i>entity</i> can be a product or an offer on AWS Marketplace. </p> <p>You can automate your entity update process by integrating the AWS Marketplace Catalog API with your AWS Marketplace product build or deployment pipelines. You can also create your own applications on top of the Catalog API to manage your products on AWS Marketplace.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-deployment/2023-01-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-deployment/2023-01-25/service-2.json 2.31.35-1/awscli/botocore/data/marketplace-deployment/2023-01-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/marketplace-deployment/2023-01-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-deployment/2023-01-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"deployment-marketplace",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"AWS Marketplace Deployment Service",
     "serviceId":"Marketplace Deployment",
     "signatureVersion":"v4",
     "signingName":"aws-marketplace",
-    "uid":"marketplace-deployment-2023-01-25"
+    "uid":"marketplace-deployment-2023-01-25",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "ListTagsForResource":{
@@ -153,7 +155,7 @@
           "documentation":"<p>The text to encrypt and store in the secret.</p>"
         }
       },
-      "documentation":"<p>The shape containing the requested deployment parameter name and secretString.</p>"
+      "documentation":"<p>The shape containing the requested deployment parameter name and secretString.</p> <note> <p>To support AWS CloudFormation dynamic references to this resource using Quick Launch, this value must match a parameter defined in the CloudFormation templated provided to buyers.</p> </note>"
     },
     "DeploymentParameterName":{
       "type":"string",
@@ -215,13 +217,13 @@
         },
         "catalog":{
           "shape":"Catalog",
-          "documentation":"<p>The catalog related to the request. Fixed value: <code>AWS Marketplace</code> </p>",
+          "documentation":"<p>The catalog related to the request. Fixed value: <code>AWSMarketplace</code> </p>",
           "location":"uri",
           "locationName":"catalog"
         },
         "clientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>The idempotency token for deployment parameters. A unique identifier for the new version.</p>",
+          "documentation":"<p>The idempotency token for deployment parameters. A unique identifier for the new version.</p> <note> <p>This field is not required if you're calling using an AWS SDK. Otherwise, a <code>clientToken</code> must be provided with the request.</p> </note>",
           "idempotencyToken":true
         },
         "deploymentParameter":{
@@ -429,5 +431,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>The AWS Marketplace Deployment Service supports the Quick Launch experience, which is a deployment option for software as a service (SaaS) products. Quick Launch simplifies and reduces the time, resources, and steps required to configure, deploy, and launch a products. The AWS Marketplace Deployment Service provides sellers with a secure method for passing deployment parameters (for example, API keys and external IDs) to buyers during the Quick Launch experience.</p>"
+  "documentation":"<p>The AWS Marketplace Deployment Service supports the Quick Launch experience, which is a deployment option for software as a service (SaaS) products. Quick Launch simplifies and reduces the time, resources, and steps required to configure, deploy, and launch a products. The AWS Marketplace Deployment Service provides sellers with a secure method for passing deployment parameters, such as API keys and external IDs, to buyers during the Quick Launch experience.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,152 +57,158 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://entitlement-marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-cn"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://entitlement.marketplace-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://entitlement-marketplace.{Region}.amazonaws.com.cn",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
                                                     "fn": "getAttr",
@@ -210,149 +216,258 @@
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-cn"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://entitlement-marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://entitlement.marketplace-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://entitlement.marketplace-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://entitlement.marketplace-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
                                         {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://entitlement.marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "Region"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        "cn-northwest-1"
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://entitlement-marketplace.cn-northwest-1.amazonaws.com.cn",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        "aws",
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseDualStack"
                                                 },
-                                                "name"
+                                                true
                                             ]
                                         }
-                                    ]
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://entitlement.marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://entitlement.marketplace.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
-                            "endpoint": {
-                                "url": "https://entitlement.marketplace.{Region}.amazonaws.com",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://entitlement.marketplace.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                            "type": "tree"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/service-2.json 2.31.35-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/service-2.json
--- 2.23.6-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-entitlement/2017-01-11/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,8 @@
     "signatureVersion":"v4",
     "signingName":"aws-marketplace",
     "targetPrefix":"AWSMPEntitlementService",
-    "uid":"entitlement.marketplace-2017-01-11"
+    "uid":"entitlement.marketplace-2017-01-11",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetEntitlements":{
@@ -27,7 +28,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServiceErrorException"}
       ],
-      "documentation":"<p>GetEntitlements retrieves entitlement values for a given product. The results can be filtered based on customer identifier or product dimensions.</p>"
+      "documentation":"<p>GetEntitlements retrieves entitlement values for a given product. The results can be filtered based on customer identifier, AWS account ID, or product dimensions.</p> <important> <p> The <code>CustomerIdentifier</code> parameter is on path for deprecation. Use <code>CustomerAWSAccountID</code> instead.</p> <p>These parameters are mutually exclusive. You can't specify both <code>CustomerIdentifier</code> and <code>CustomerAWSAccountID</code> in the same request. </p> </important>"
     }
   },
   "shapes":{
@@ -48,6 +49,10 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The customer identifier is a handle to each unique customer in an application. Customer identifiers are obtained through the ResolveCustomer operation in AWS Marketplace Metering Service.</p>"
         },
+        "CustomerAWSAccountId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p> The <code>CustomerAWSAccountID</code> parameter specifies the AWS account ID of the buyer. </p>"
+        },
         "Value":{
           "shape":"EntitlementValue",
           "documentation":"<p>The EntitlementValue represents the amount of capacity that the customer is entitled to for the product.</p>"
@@ -97,7 +102,8 @@
       "type":"string",
       "enum":[
         "CUSTOMER_IDENTIFIER",
-        "DIMENSION"
+        "DIMENSION",
+        "CUSTOMER_AWS_ACCOUNT_ID"
       ]
     },
     "GetEntitlementFilters":{
@@ -115,7 +121,7 @@
         },
         "Filter":{
           "shape":"GetEntitlementFilters",
-          "documentation":"<p>Filter is used to return entitlements for a specific customer or for a specific dimension. Filters are described as keys mapped to a lists of values. Filtered requests are <i>unioned</i> for each value in the value list, and then <i>intersected</i> for each filter key.</p>"
+          "documentation":"<p>Filter is used to return entitlements for a specific customer or for a specific dimension. Filters are described as keys mapped to a lists of values. Filtered requests are <i>unioned</i> for each value in the value list, and then <i>intersected</i> for each filter key.</p> <p> <code>CustomerIdentifier</code> and <code>CustomerAWSAccountID</code> are mutually exclusive. You can't specify both in the same request. </p>"
         },
         "NextToken":{
           "shape":"NonEmptyString",
diff -pruN 2.23.6-1/awscli/botocore/data/marketplace-reporting/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplace-reporting/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplace-reporting/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplace-reporting/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json 2.31.35-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/marketplacecommerceanalytics/2015-07-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"marketplacecommerceanalytics",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Marketplace Commerce Analytics",
     "serviceId":"Marketplace Commerce Analytics",
     "signatureVersion":"v4",
     "signingName":"marketplacecommerceanalytics",
     "targetPrefix":"MarketplaceCommerceAnalytics20150701",
-    "uid":"marketplacecommerceanalytics-2015-07-01"
+    "uid":"marketplacecommerceanalytics-2015-07-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GenerateDataSet":{
diff -pruN 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/service-2.json 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3038 +1,1937 @@
 {
-  "metadata": {
-    "apiVersion": "2018-11-14",
-    "endpointPrefix": "mediaconnect",
-    "signingName": "mediaconnect",
-    "serviceFullName": "AWS MediaConnect",
-    "serviceId": "MediaConnect",
-    "protocol": "rest-json",
-    "jsonVersion": "1.1",
-    "uid": "mediaconnect-2018-11-14",
-    "signatureVersion": "v4",
-    "auth": [
-      "aws.auth#sigv4"
-    ]
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2018-11-14",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"mediaconnect",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"AWS MediaConnect",
+    "serviceId":"MediaConnect",
+    "signatureVersion":"v4",
+    "signingName":"mediaconnect",
+    "uid":"mediaconnect-2018-11-14"
   },
-  "operations": {
-    "AddBridgeOutputs": {
-      "name": "AddBridgeOutputs",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/bridges/{bridgeArn}/outputs",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "AddBridgeOutputsRequest"
-      },
-      "output": {
-        "shape": "AddBridgeOutputsResponse",
-        "documentation": "AWS Elemental MediaConnect added the bridge outputs successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Adds outputs to an existing bridge."
-    },
-    "AddBridgeSources": {
-      "name": "AddBridgeSources",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/bridges/{bridgeArn}/sources",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "AddBridgeSourcesRequest"
-      },
-      "output": {
-        "shape": "AddBridgeSourcesResponse",
-        "documentation": "AWS Elemental MediaConnect added the bridge sources successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Adds sources to an existing bridge."
-    },
-    "AddFlowMediaStreams": {
-      "name": "AddFlowMediaStreams",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/{flowArn}/mediaStreams",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "AddFlowMediaStreamsRequest"
-      },
-      "output": {
-        "shape": "AddFlowMediaStreamsResponse",
-        "documentation": "MediaConnect created the new resource successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Adds media streams to an existing flow. After you add a media stream to a flow, you can associate it with a source and/or an output that uses the ST 2110 JPEG XS or CDI protocol."
-    },
-    "AddFlowOutputs": {
-      "name": "AddFlowOutputs",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/{flowArn}/outputs",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "AddFlowOutputsRequest"
-      },
-      "output": {
-        "shape": "AddFlowOutputsResponse",
-        "documentation": "AWS Elemental MediaConnect added the outputs successfully."
-      },
-      "errors": [
-        {
-          "shape": "AddFlowOutputs420Exception",
-          "documentation": "AWS Elemental MediaConnect can't complete this request because this flow already has the maximum number of allowed outputs (50). For more information, contact AWS Customer Support."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Adds outputs to an existing flow. You can create up to 50 outputs per flow."
-    },
-    "AddFlowSources": {
-      "name": "AddFlowSources",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/{flowArn}/source",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "AddFlowSourcesRequest"
-      },
-      "output": {
-        "shape": "AddFlowSourcesResponse",
-        "documentation": "AWS Elemental MediaConnect added sources to the flow successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Adds Sources to flow"
-    },
-    "AddFlowVpcInterfaces": {
-      "name": "AddFlowVpcInterfaces",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/{flowArn}/vpcInterfaces",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "AddFlowVpcInterfacesRequest"
-      },
-      "output": {
-        "shape": "AddFlowVpcInterfacesResponse",
-        "documentation": "The following VPC interface was added to the Flow configuration."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Adds VPC interfaces to flow"
-    },
-    "CreateBridge": {
-      "name": "CreateBridge",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/bridges",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "CreateBridgeRequest"
-      },
-      "output": {
-        "shape": "CreateBridgeResponse",
-        "documentation": "AWS Elemental MediaConnect created the new bridge successfully."
-      },
-      "errors": [
-        {
-          "shape": "CreateBridge420Exception",
-          "documentation": "Your account already contains the maximum number of bridges per account, per Region. For more information, contact AWS Customer Support."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Creates a new bridge. The request must include one source."
-    },
-    "CreateFlow": {
-      "name": "CreateFlow",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "CreateFlowRequest"
-      },
-      "output": {
-        "shape": "CreateFlowResponse",
-        "documentation": "AWS Elemental MediaConnect created the new flow successfully."
-      },
-      "errors": [
-        {
-          "shape": "CreateFlow420Exception",
-          "documentation": "Your account already contains the maximum number of 20 flows per account, per Region. For more information, contact AWS Customer Support."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50)."
-    },
-    "CreateGateway": {
-      "name": "CreateGateway",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/gateways",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "CreateGatewayRequest"
-      },
-      "output": {
-        "shape": "CreateGatewayResponse",
-        "documentation": "AWS Elemental MediaConnect created the new gateway successfully."
-      },
-      "errors": [
-        {
-          "shape": "CreateGateway420Exception",
-          "documentation": "Your account already contains the maximum number of gateways per account, per Region. For more information, contact AWS Customer Support."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Creates a new gateway. The request must include at least one network (up to 4)."
-    },
-    "DeleteBridge": {
-      "name": "DeleteBridge",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/bridges/{bridgeArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DeleteBridgeRequest"
-      },
-      "output": {
-        "shape": "DeleteBridgeResponse",
-        "documentation": "AWS Elemental MediaConnect deleted the bridge."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Deletes a bridge. Before you can delete a bridge, you must stop the bridge."
-    },
-    "DeleteFlow": {
-      "name": "DeleteFlow",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "DeleteFlowRequest"
-      },
-      "output": {
-        "shape": "DeleteFlowResponse",
-        "documentation": "AWS Elemental MediaConnect is deleting the flow."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Deletes a flow. Before you can delete a flow, you must stop the flow."
-    },
-    "DeleteGateway": {
-      "name": "DeleteGateway",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/gateways/{gatewayArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DeleteGatewayRequest"
-      },
-      "output": {
-        "shape": "DeleteGatewayResponse",
-        "documentation": "AWS Elemental MediaConnect deleted the gateway."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Deletes a gateway. Before you can delete a gateway, you must deregister its instances and delete its bridges."
-    },
-    "DeregisterGatewayInstance": {
-      "name": "DeregisterGatewayInstance",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/gateway-instances/{gatewayInstanceArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "DeregisterGatewayInstanceRequest"
-      },
-      "output": {
-        "shape": "DeregisterGatewayInstanceResponse",
-        "documentation": "AWS Elemental MediaConnect is deleting the instance."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Deregisters an instance. Before you deregister an instance, all bridges running on the instance must be stopped. If you want to deregister an instance without stopping the bridges, you must use the --force option."
-    },
-    "DescribeBridge": {
-      "name": "DescribeBridge",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/bridges/{bridgeArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeBridgeRequest"
-      },
-      "output": {
-        "shape": "DescribeBridgeResponse",
-        "documentation": "AWS Elemental MediaConnect returned the bridge details successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays the details of a bridge."
-    },
-    "DescribeFlow": {
-      "name": "DescribeFlow",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/flows/{flowArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeFlowRequest"
-      },
-      "output": {
-        "shape": "DescribeFlowResponse",
-        "documentation": "AWS Elemental MediaConnect returned the flow details successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Displays the details of a flow. The response includes the flow ARN, name, and Availability Zone, as well as details about the source, outputs, and entitlements."
-    },
-    "DescribeFlowSourceMetadata": {
-      "name": "DescribeFlowSourceMetadata",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/flows/{flowArn}/source-metadata",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeFlowSourceMetadataRequest"
-      },
-      "output": {
-        "shape": "DescribeFlowSourceMetadataResponse",
-        "documentation": "Flow source metadata successfully described."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Displays details of the flow's source stream. The response contains information about the contents of the stream and its programs."
-    },
-    "DescribeFlowSourceThumbnail": {
-      "name": "DescribeFlowSourceThumbnail",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/flows/{flowArn}/source-thumbnail",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeFlowSourceThumbnailRequest"
-      },
-      "output": {
-        "shape": "DescribeFlowSourceThumbnailResponse",
-        "documentation": "Flow source thumbnail successfully described."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Displays the thumbnail details of a flow's source stream."
-    },
-    "DescribeGateway": {
-      "name": "DescribeGateway",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/gateways/{gatewayArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeGatewayRequest"
-      },
-      "output": {
-        "shape": "DescribeGatewayResponse",
-        "documentation": "AWS Elemental MediaConnect returned the gateway details successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays the details of a gateway. The response includes the gateway ARN, name, and CIDR blocks, as well as details about the networks."
-    },
-    "DescribeGatewayInstance": {
-      "name": "DescribeGatewayInstance",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/gateway-instances/{gatewayInstanceArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeGatewayInstanceRequest"
-      },
-      "output": {
-        "shape": "DescribeGatewayInstanceResponse",
-        "documentation": "AWS Elemental MediaConnect returned the instance details successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays the details of an instance."
-    },
-    "DescribeOffering": {
-      "name": "DescribeOffering",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/offerings/{offeringArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeOfferingRequest"
-      },
-      "output": {
-        "shape": "DescribeOfferingResponse",
-        "documentation": "MediaConnect returned the offering details successfully."
-      },
-      "errors": [
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays the details of an offering. The response includes the offering description, duration, outbound bandwidth, price, and Amazon Resource Name (ARN)."
-    },
-    "DescribeReservation": {
-      "name": "DescribeReservation",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/reservations/{reservationArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "DescribeReservationRequest"
-      },
-      "output": {
-        "shape": "DescribeReservationResponse",
-        "documentation": "MediaConnect returned the reservation details successfully."
-      },
-      "errors": [
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays the details of a reservation. The response includes the reservation name, state, start date and time, and the details of the offering that make up the rest of the reservation (such as price, duration, and outbound bandwidth)."
-    },
-    "GrantFlowEntitlements": {
-      "name": "GrantFlowEntitlements",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/{flowArn}/entitlements",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "GrantFlowEntitlementsRequest"
-      },
-      "output": {
-        "shape": "GrantFlowEntitlementsResponse",
-        "documentation": "AWS Elemental MediaConnect granted the entitlements successfully."
-      },
-      "errors": [
-        {
-          "shape": "GrantFlowEntitlements420Exception",
-          "documentation": "AWS Elemental MediaConnect can't complete this request because this flow already has the maximum number of allowed entitlements (50). For more information, contact AWS Customer Support."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Grants entitlements to an existing flow."
-    },
-    "ListBridges": {
-      "name": "ListBridges",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/bridges",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListBridgesRequest"
-      },
-      "output": {
-        "shape": "ListBridgesResponse",
-        "documentation": "AWS Elemental MediaConnect returned the list of bridges successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays a list of bridges that are associated with this account and an optionally specified Arn. This request returns a paginated result."
-    },
-    "ListEntitlements": {
-      "name": "ListEntitlements",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/entitlements",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListEntitlementsRequest"
-      },
-      "output": {
-        "shape": "ListEntitlementsResponse",
-        "documentation": "AWS Elemental MediaConnect returned the list of entitlements successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays a list of all entitlements that have been granted to this account. This request returns 20 results per page."
-    },
-    "ListFlows": {
-      "name": "ListFlows",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/flows",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListFlowsRequest"
-      },
-      "output": {
-        "shape": "ListFlowsResponse",
-        "documentation": "AWS Elemental MediaConnect returned the list of flows successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays a list of flows that are associated with this account. This request returns a paginated result."
-    },
-    "ListGatewayInstances": {
-      "name": "ListGatewayInstances",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/gateway-instances",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListGatewayInstancesRequest"
-      },
-      "output": {
-        "shape": "ListGatewayInstancesResponse",
-        "documentation": "AWS Elemental MediaConnect returned the list of instances in the gateway successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays a list of instances associated with the AWS account. This request returns a paginated result. You can use the filterArn property to display only the instances associated with the selected Gateway Amazon Resource Name (ARN)."
-    },
-    "ListGateways": {
-      "name": "ListGateways",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/gateways",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListGatewaysRequest"
-      },
-      "output": {
-        "shape": "ListGatewaysResponse",
-        "documentation": "AWS Elemental MediaConnect returned the list of gateways successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Displays a list of gateways that are associated with this account. This request returns a paginated result."
-    },
-    "ListOfferings": {
-      "name": "ListOfferings",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/offerings",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListOfferingsRequest"
-      },
-      "output": {
-        "shape": "ListOfferingsResponse",
-        "documentation": "MediaConnect returned the list of offerings successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays a list of all offerings that are available to this account in the current AWS Region. If you have an active reservation (which means you've purchased an offering that has already started and hasn't expired yet), your account isn't eligible for other offerings."
-    },
-    "ListReservations": {
-      "name": "ListReservations",
-      "http": {
-        "method": "GET",
-        "requestUri": "/v1/reservations",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListReservationsRequest"
-      },
-      "output": {
-        "shape": "ListReservationsResponse",
-        "documentation": "MediaConnect returned the list of reservations successfully."
-      },
-      "errors": [
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        }
-      ],
-      "documentation": "Displays a list of all reservations that have been purchased by this account in the current AWS Region. This list includes all reservations in all states (such as active and expired)."
-    },
-    "ListTagsForResource": {
-      "name": "ListTagsForResource",
-      "http": {
-        "method": "GET",
-        "requestUri": "/tags/{resourceArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "ListTagsForResourceRequest"
-      },
-      "output": {
-        "shape": "ListTagsForResourceResponse",
-        "documentation": "The tags for the resource"
-      },
-      "errors": [
-        {
-          "shape": "NotFoundException",
-          "documentation": "The requested resource was not found"
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The client performed an invalid request"
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "Internal service error"
-        }
+  "operations":{
+    "AddBridgeOutputs":{
+      "name":"AddBridgeOutputs",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/bridges/{BridgeArn}/outputs",
+        "responseCode":202
+      },
+      "input":{"shape":"AddBridgeOutputsRequest"},
+      "output":{"shape":"AddBridgeOutputsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds outputs to an existing bridge.</p>"
+    },
+    "AddBridgeSources":{
+      "name":"AddBridgeSources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/bridges/{BridgeArn}/sources",
+        "responseCode":202
+      },
+      "input":{"shape":"AddBridgeSourcesRequest"},
+      "output":{"shape":"AddBridgeSourcesResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds sources to an existing bridge.</p>"
+    },
+    "AddFlowMediaStreams":{
+      "name":"AddFlowMediaStreams",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/{FlowArn}/mediaStreams",
+        "responseCode":201
+      },
+      "input":{"shape":"AddFlowMediaStreamsRequest"},
+      "output":{"shape":"AddFlowMediaStreamsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds media streams to an existing flow. After you add a media stream to a flow, you can associate it with a source and/or an output that uses the ST 2110 JPEG XS or CDI protocol.</p>"
+    },
+    "AddFlowOutputs":{
+      "name":"AddFlowOutputs",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/{FlowArn}/outputs",
+        "responseCode":201
+      },
+      "input":{"shape":"AddFlowOutputsRequest"},
+      "output":{"shape":"AddFlowOutputsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"AddFlowOutputs420Exception"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds outputs to an existing flow. You can create up to 50 outputs per flow.</p>"
+    },
+    "AddFlowSources":{
+      "name":"AddFlowSources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/{FlowArn}/source",
+        "responseCode":201
+      },
+      "input":{"shape":"AddFlowSourcesRequest"},
+      "output":{"shape":"AddFlowSourcesResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds sources to a flow.</p>"
+    },
+    "AddFlowVpcInterfaces":{
+      "name":"AddFlowVpcInterfaces",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/{FlowArn}/vpcInterfaces",
+        "responseCode":201
+      },
+      "input":{"shape":"AddFlowVpcInterfacesRequest"},
+      "output":{"shape":"AddFlowVpcInterfacesResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Adds VPC interfaces to a flow.</p>"
+    },
+    "CreateBridge":{
+      "name":"CreateBridge",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/bridges",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateBridgeRequest"},
+      "output":{"shape":"CreateBridgeResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"CreateBridge420Exception"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Creates a new bridge. The request must include one source.</p>"
+    },
+    "CreateFlow":{
+      "name":"CreateFlow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateFlowRequest"},
+      "output":{"shape":"CreateFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"CreateFlow420Exception"}
+      ],
+      "documentation":"<p> Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50).</p>"
+    },
+    "CreateGateway":{
+      "name":"CreateGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/gateways",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateGatewayRequest"},
+      "output":{"shape":"CreateGatewayResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"CreateGateway420Exception"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Creates a new gateway. The request must include at least one network (up to four).</p>"
+    },
+    "DeleteBridge":{
+      "name":"DeleteBridge",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/bridges/{BridgeArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteBridgeRequest"},
+      "output":{"shape":"DeleteBridgeResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Deletes a bridge. Before you can delete a bridge, you must stop the bridge.</p>",
+      "idempotent":true
+    },
+    "DeleteFlow":{
+      "name":"DeleteFlow",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteFlowRequest"},
+      "output":{"shape":"DeleteFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Deletes a flow. Before you can delete a flow, you must stop the flow.</p>",
+      "idempotent":true
+    },
+    "DeleteGateway":{
+      "name":"DeleteGateway",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/gateways/{GatewayArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteGatewayRequest"},
+      "output":{"shape":"DeleteGatewayResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Deletes a gateway. Before you can delete a gateway, you must deregister its instances and delete its bridges.</p>",
+      "idempotent":true
+    },
+    "DeregisterGatewayInstance":{
+      "name":"DeregisterGatewayInstance",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/gateway-instances/{GatewayInstanceArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeregisterGatewayInstanceRequest"},
+      "output":{"shape":"DeregisterGatewayInstanceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Deregisters an instance. Before you deregister an instance, all bridges running on the instance must be stopped. If you want to deregister an instance without stopping the bridges, you must use the --force option.</p>",
+      "idempotent":true
+    },
+    "DescribeBridge":{
+      "name":"DescribeBridge",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/bridges/{BridgeArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeBridgeRequest"},
+      "output":{"shape":"DescribeBridgeResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of a bridge.</p>",
+      "readonly":true
+    },
+    "DescribeFlow":{
+      "name":"DescribeFlow",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/flows/{FlowArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeFlowRequest"},
+      "output":{"shape":"DescribeFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of a flow. The response includes the flow Amazon Resource Name (ARN), name, and Availability Zone, as well as details about the source, outputs, and entitlements.</p>",
+      "readonly":true
+    },
+    "DescribeFlowSourceMetadata":{
+      "name":"DescribeFlowSourceMetadata",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/flows/{FlowArn}/source-metadata",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeFlowSourceMetadataRequest"},
+      "output":{"shape":"DescribeFlowSourceMetadataResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> The <code>DescribeFlowSourceMetadata</code> API is used to view information about the flow's source transport stream and programs. This API displays status messages about the flow's source as well as details about the program's video, audio, and other data. </p>",
+      "readonly":true
+    },
+    "DescribeFlowSourceThumbnail":{
+      "name":"DescribeFlowSourceThumbnail",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/flows/{FlowArn}/source-thumbnail",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeFlowSourceThumbnailRequest"},
+      "output":{"shape":"DescribeFlowSourceThumbnailResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Describes the thumbnail for the flow source. </p>",
+      "readonly":true
+    },
+    "DescribeGateway":{
+      "name":"DescribeGateway",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/gateways/{GatewayArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeGatewayRequest"},
+      "output":{"shape":"DescribeGatewayResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of a gateway. The response includes the gateway Amazon Resource Name (ARN), name, and CIDR blocks, as well as details about the networks.</p>",
+      "readonly":true
+    },
+    "DescribeGatewayInstance":{
+      "name":"DescribeGatewayInstance",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/gateway-instances/{GatewayInstanceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeGatewayInstanceRequest"},
+      "output":{"shape":"DescribeGatewayInstanceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of an instance. </p>",
+      "readonly":true
+    },
+    "DescribeOffering":{
+      "name":"DescribeOffering",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/offerings/{OfferingArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeOfferingRequest"},
+      "output":{"shape":"DescribeOfferingResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of an offering. The response includes the offering description, duration, outbound bandwidth, price, and Amazon Resource Name (ARN).</p>",
+      "readonly":true
+    },
+    "DescribeReservation":{
+      "name":"DescribeReservation",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/reservations/{ReservationArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeReservationRequest"},
+      "output":{"shape":"DescribeReservationResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays the details of a reservation. The response includes the reservation name, state, start date and time, and the details of the offering that make up the rest of the reservation (such as price, duration, and outbound bandwidth).</p>",
+      "readonly":true
+    },
+    "GrantFlowEntitlements":{
+      "name":"GrantFlowEntitlements",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/{FlowArn}/entitlements",
+        "responseCode":200
+      },
+      "input":{"shape":"GrantFlowEntitlementsRequest"},
+      "output":{"shape":"GrantFlowEntitlementsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"GrantFlowEntitlements420Exception"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Grants entitlements to an existing flow.</p>"
+    },
+    "ListBridges":{
+      "name":"ListBridges",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/bridges",
+        "responseCode":200
+      },
+      "input":{"shape":"ListBridgesRequest"},
+      "output":{"shape":"ListBridgesResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of bridges that are associated with this account and an optionally specified Amazon Resource Name (ARN). This request returns a paginated result.</p>",
+      "readonly":true
+    },
+    "ListEntitlements":{
+      "name":"ListEntitlements",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/entitlements",
+        "responseCode":200
+      },
+      "input":{"shape":"ListEntitlementsRequest"},
+      "output":{"shape":"ListEntitlementsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of all entitlements that have been granted to this account. This request returns 20 results per page.</p>",
+      "readonly":true
+    },
+    "ListFlows":{
+      "name":"ListFlows",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/flows",
+        "responseCode":200
+      },
+      "input":{"shape":"ListFlowsRequest"},
+      "output":{"shape":"ListFlowsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of flows that are associated with this account. This request returns a paginated result.</p>",
+      "readonly":true
+    },
+    "ListGatewayInstances":{
+      "name":"ListGatewayInstances",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/gateway-instances",
+        "responseCode":200
+      },
+      "input":{"shape":"ListGatewayInstancesRequest"},
+      "output":{"shape":"ListGatewayInstancesResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of instances associated with the Amazon Web Services account. This request returns a paginated result. You can use the filterArn property to display only the instances associated with the selected Gateway Amazon Resource Name (ARN).</p>",
+      "readonly":true
+    },
+    "ListGateways":{
+      "name":"ListGateways",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/gateways",
+        "responseCode":200
+      },
+      "input":{"shape":"ListGatewaysRequest"},
+      "output":{"shape":"ListGatewaysResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of gateways that are associated with this account. This request returns a paginated result.</p>",
+      "readonly":true
+    },
+    "ListOfferings":{
+      "name":"ListOfferings",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/offerings",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOfferingsRequest"},
+      "output":{"shape":"ListOfferingsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of all offerings that are available to this account in the current Amazon Web Services Region. If you have an active reservation (which means you've purchased an offering that has already started and hasn't expired yet), your account isn't eligible for other offerings.</p>",
+      "readonly":true
+    },
+    "ListReservations":{
+      "name":"ListReservations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/reservations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListReservationsRequest"},
+      "output":{"shape":"ListReservationsResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Displays a list of all reservations that have been purchased by this account in the current Amazon Web Services Region. This list includes all reservations in all states (such as active and expired).</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p> List all tags on a MediaConnect resource.</p>",
+      "readonly":true
+    },
+    "PurchaseOffering":{
+      "name":"PurchaseOffering",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/offerings/{OfferingArn}",
+        "responseCode":201
+      },
+      "input":{"shape":"PurchaseOfferingRequest"},
+      "output":{"shape":"PurchaseOfferingResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Submits a request to purchase an offering. If you already have an active reservation, you can't purchase another offering.</p>"
+    },
+    "RemoveBridgeOutput":{
+      "name":"RemoveBridgeOutput",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/bridges/{BridgeArn}/outputs/{OutputName}",
+        "responseCode":202
+      },
+      "input":{"shape":"RemoveBridgeOutputRequest"},
+      "output":{"shape":"RemoveBridgeOutputResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes an output from a bridge.</p>",
+      "idempotent":true
+    },
+    "RemoveBridgeSource":{
+      "name":"RemoveBridgeSource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/bridges/{BridgeArn}/sources/{SourceName}",
+        "responseCode":202
+      },
+      "input":{"shape":"RemoveBridgeSourceRequest"},
+      "output":{"shape":"RemoveBridgeSourceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes a source from a bridge.</p>",
+      "idempotent":true
+    },
+    "RemoveFlowMediaStream":{
+      "name":"RemoveFlowMediaStream",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}/mediaStreams/{MediaStreamName}",
+        "responseCode":200
+      },
+      "input":{"shape":"RemoveFlowMediaStreamRequest"},
+      "output":{"shape":"RemoveFlowMediaStreamResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes a media stream from a flow. This action is only available if the media stream is not associated with a source or output.</p>",
+      "idempotent":true
+    },
+    "RemoveFlowOutput":{
+      "name":"RemoveFlowOutput",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}/outputs/{OutputArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"RemoveFlowOutputRequest"},
+      "output":{"shape":"RemoveFlowOutputResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes an output from an existing flow. This request can be made only on an output that does not have an entitlement associated with it. If the output has an entitlement, you must revoke the entitlement instead. When an entitlement is revoked from a flow, the service automatically removes the associated output.</p>",
+      "idempotent":true
+    },
+    "RemoveFlowSource":{
+      "name":"RemoveFlowSource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}/source/{SourceArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"RemoveFlowSourceRequest"},
+      "output":{"shape":"RemoveFlowSourceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes a source from an existing flow. This request can be made only if there is more than one source on the flow. </p>",
+      "idempotent":true
+    },
+    "RemoveFlowVpcInterface":{
+      "name":"RemoveFlowVpcInterface",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}/vpcInterfaces/{VpcInterfaceName}",
+        "responseCode":200
+      },
+      "input":{"shape":"RemoveFlowVpcInterfaceRequest"},
+      "output":{"shape":"RemoveFlowVpcInterfaceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Removes a VPC Interface from an existing flow. This request can be made only on a VPC interface that does not have a Source or Output associated with it. If the VPC interface is referenced by a Source or Output, you must first delete or update the Source or Output to no longer reference the VPC interface.</p>",
+      "idempotent":true
+    },
+    "RevokeFlowEntitlement":{
+      "name":"RevokeFlowEntitlement",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/flows/{FlowArn}/entitlements/{EntitlementArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"RevokeFlowEntitlementRequest"},
+      "output":{"shape":"RevokeFlowEntitlementResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Revokes an entitlement from a flow. Once an entitlement is revoked, the content becomes unavailable to the subscriber and the associated output is removed.</p>",
+      "idempotent":true
+    },
+    "StartFlow":{
+      "name":"StartFlow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/start/{FlowArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"StartFlowRequest"},
+      "output":{"shape":"StartFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Starts a flow.</p>"
+    },
+    "StopFlow":{
+      "name":"StopFlow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/flows/stop/{FlowArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"StopFlowRequest"},
+      "output":{"shape":"StopFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Stops a flow.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p> Associates the specified tags to a resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are deleted as well.</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p> Deletes specified tags from a resource.</p>",
+      "idempotent":true
+    },
+    "UpdateBridge":{
+      "name":"UpdateBridge",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/bridges/{BridgeArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateBridgeRequest"},
+      "output":{"shape":"UpdateBridgeResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates the bridge.</p>",
+      "idempotent":true
+    },
+    "UpdateBridgeOutput":{
+      "name":"UpdateBridgeOutput",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/bridges/{BridgeArn}/outputs/{OutputName}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateBridgeOutputRequest"},
+      "output":{"shape":"UpdateBridgeOutputResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an existing bridge output.</p>",
+      "idempotent":true
+    },
+    "UpdateBridgeSource":{
+      "name":"UpdateBridgeSource",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/bridges/{BridgeArn}/sources/{SourceName}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateBridgeSourceRequest"},
+      "output":{"shape":"UpdateBridgeSourceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an existing bridge source.</p>",
+      "idempotent":true
+    },
+    "UpdateBridgeState":{
+      "name":"UpdateBridgeState",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/bridges/{BridgeArn}/state",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateBridgeStateRequest"},
+      "output":{"shape":"UpdateBridgeStateResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates the bridge state. </p>",
+      "idempotent":true
+    },
+    "UpdateFlow":{
+      "name":"UpdateFlow",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/flows/{FlowArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateFlowRequest"},
+      "output":{"shape":"UpdateFlowResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an existing flow.</p>",
+      "idempotent":true
+    },
+    "UpdateFlowEntitlement":{
+      "name":"UpdateFlowEntitlement",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/flows/{FlowArn}/entitlements/{EntitlementArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateFlowEntitlementRequest"},
+      "output":{"shape":"UpdateFlowEntitlementResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an entitlement. You can change an entitlement's description, subscribers, and encryption. If you change the subscribers, the service will remove the outputs that are are used by the subscribers that are removed.</p>",
+      "idempotent":true
+    },
+    "UpdateFlowMediaStream":{
+      "name":"UpdateFlowMediaStream",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/flows/{FlowArn}/mediaStreams/{MediaStreamName}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateFlowMediaStreamRequest"},
+      "output":{"shape":"UpdateFlowMediaStreamResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an existing media stream.</p>",
+      "idempotent":true
+    },
+    "UpdateFlowOutput":{
+      "name":"UpdateFlowOutput",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/flows/{FlowArn}/outputs/{OutputArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateFlowOutputRequest"},
+      "output":{"shape":"UpdateFlowOutputResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates an existing flow output.</p>",
+      "idempotent":true
+    },
+    "UpdateFlowSource":{
+      "name":"UpdateFlowSource",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/flows/{FlowArn}/source/{SourceArn}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateFlowSourceRequest"},
+      "output":{"shape":"UpdateFlowSourceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p> Updates the source of a flow.</p>",
+      "idempotent":true
+    },
+    "UpdateGatewayInstance":{
+      "name":"UpdateGatewayInstance",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v1/gateway-instances/{GatewayInstanceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateGatewayInstanceRequest"},
+      "output":{"shape":"UpdateGatewayInstanceResponse"},
+      "errors":[
+        {"shape":"BadRequestException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"InternalServerErrorException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceUnavailableException"}
       ],
-      "documentation": "List all tags on an AWS Elemental MediaConnect resource"
-    },
-    "PurchaseOffering": {
-      "name": "PurchaseOffering",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/offerings/{offeringArn}",
-        "responseCode": 201
-      },
-      "input": {
-        "shape": "PurchaseOfferingRequest"
-      },
-      "output": {
-        "shape": "PurchaseOfferingResponse",
-        "documentation": "AWS Elemental MediaConnect purchased offering successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Submits a request to purchase an offering. If you already have an active reservation, you can't purchase another offering."
-    },
-    "RemoveBridgeOutput": {
-      "name": "RemoveBridgeOutput",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/bridges/{bridgeArn}/outputs/{outputName}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "RemoveBridgeOutputRequest"
-      },
-      "output": {
-        "shape": "RemoveBridgeOutputResponse",
-        "documentation": "The output was successfully removed from the bridge."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Removes an output from a bridge."
-    },
-    "RemoveBridgeSource": {
-      "name": "RemoveBridgeSource",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/bridges/{bridgeArn}/sources/{sourceName}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "RemoveBridgeSourceRequest"
-      },
-      "output": {
-        "shape": "RemoveBridgeSourceResponse",
-        "documentation": "The bridge source was successfully removed from the flow."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Removes a source from a bridge."
-    },
-    "RemoveFlowMediaStream": {
-      "name": "RemoveFlowMediaStream",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}/mediaStreams/{mediaStreamName}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "RemoveFlowMediaStreamRequest"
-      },
-      "output": {
-        "shape": "RemoveFlowMediaStreamResponse",
-        "documentation": "The media stream was successfully removed from the flow."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Removes a media stream from a flow. This action is only available if the media stream is not associated with a source or output."
-    },
-    "RemoveFlowOutput": {
-      "name": "RemoveFlowOutput",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}/outputs/{outputArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "RemoveFlowOutputRequest"
-      },
-      "output": {
-        "shape": "RemoveFlowOutputResponse",
-        "documentation": "output successfully removed from flow configuration."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Removes an output from an existing flow. This request can be made only on an output that does not have an entitlement associated with it. If the output has an entitlement, you must revoke the entitlement instead. When an entitlement is revoked from a flow, the service automatically removes the associated output."
-    },
-    "RemoveFlowSource": {
-      "name": "RemoveFlowSource",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}/source/{sourceArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "RemoveFlowSourceRequest"
-      },
-      "output": {
-        "shape": "RemoveFlowSourceResponse",
-        "documentation": "source successfully removed from flow configuration."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Removes a source from an existing flow. This request can be made only if there is more than one source on the flow."
-    },
-    "RemoveFlowVpcInterface": {
-      "name": "RemoveFlowVpcInterface",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}/vpcInterfaces/{vpcInterfaceName}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "RemoveFlowVpcInterfaceRequest"
-      },
-      "output": {
-        "shape": "RemoveFlowVpcInterfaceResponse",
-        "documentation": "VPC interface successfully removed from flow configuration."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Removes a VPC Interface from an existing flow. This request can be made only on a VPC interface that does not have a Source or Output associated with it. If the VPC interface is referenced by a Source or Output, you must first delete or update the Source or Output to no longer reference the VPC interface."
-    },
-    "RevokeFlowEntitlement": {
-      "name": "RevokeFlowEntitlement",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/v1/flows/{flowArn}/entitlements/{entitlementArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "RevokeFlowEntitlementRequest"
-      },
-      "output": {
-        "shape": "RevokeFlowEntitlementResponse",
-        "documentation": "AWS Elemental MediaConnect revoked the entitlement successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Revokes an entitlement from a flow. Once an entitlement is revoked, the content becomes unavailable to the subscriber and the associated output is removed."
-    },
-    "StartFlow": {
-      "name": "StartFlow",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/start/{flowArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "StartFlowRequest"
-      },
-      "output": {
-        "shape": "StartFlowResponse",
-        "documentation": "AWS Elemental MediaConnect is starting the flow."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Starts a flow."
-    },
-    "StopFlow": {
-      "name": "StopFlow",
-      "http": {
-        "method": "POST",
-        "requestUri": "/v1/flows/stop/{flowArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "StopFlowRequest"
-      },
-      "output": {
-        "shape": "StopFlowResponse",
-        "documentation": "AWS Elemental MediaConnect is stopping the flow."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Stops a flow."
-    },
-    "TagResource": {
-      "name": "TagResource",
-      "http": {
-        "method": "POST",
-        "requestUri": "/tags/{resourceArn}",
-        "responseCode": 204
-      },
-      "input": {
-        "shape": "TagResourceRequest"
-      },
-      "errors": [
-        {
-          "shape": "NotFoundException",
-          "documentation": "The requested resource was not found"
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The client performed an invalid request"
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "Internal service error"
-        }
-      ],
-      "documentation": "Associates the specified tags to a resource with the specified resourceArn. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are deleted as well."
-    },
-    "UntagResource": {
-      "name": "UntagResource",
-      "http": {
-        "method": "DELETE",
-        "requestUri": "/tags/{resourceArn}",
-        "responseCode": 204
-      },
-      "input": {
-        "shape": "UntagResourceRequest"
-      },
-      "errors": [
-        {
-          "shape": "NotFoundException",
-          "documentation": "The requested resource was not found"
-        },
-        {
-          "shape": "BadRequestException",
-          "documentation": "The client performed an invalid request"
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "Internal service error"
-        }
-      ],
-      "documentation": "Deletes specified tags from a resource."
-    },
-    "UpdateBridge": {
-      "name": "UpdateBridge",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/bridges/{bridgeArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateBridgeRequest"
-      },
-      "output": {
-        "shape": "UpdateBridgeResponse",
-        "documentation": "AWS Elemental MediaConnect updated the bridge successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Updates the bridge"
-    },
-    "UpdateBridgeOutput": {
-      "name": "UpdateBridgeOutput",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/bridges/{bridgeArn}/outputs/{outputName}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateBridgeOutputRequest"
-      },
-      "output": {
-        "shape": "UpdateBridgeOutputResponse",
-        "documentation": "MediaConnect is updating the bridge output."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Updates an existing bridge output."
-    },
-    "UpdateBridgeSource": {
-      "name": "UpdateBridgeSource",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/bridges/{bridgeArn}/sources/{sourceName}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateBridgeSourceRequest"
-      },
-      "output": {
-        "shape": "UpdateBridgeSourceResponse",
-        "documentation": "MediaConnect is updating the bridge source."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Updates an existing bridge source."
-    },
-    "UpdateBridgeState": {
-      "name": "UpdateBridgeState",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/bridges/{bridgeArn}/state",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateBridgeStateRequest"
-      },
-      "output": {
-        "shape": "UpdateBridgeStateResponse",
-        "documentation": "AWS Elemental MediaConnect updated the bridge successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Updates the bridge state"
-    },
-    "UpdateFlow": {
-      "name": "UpdateFlow",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/flows/{flowArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateFlowRequest"
-      },
-      "output": {
-        "shape": "UpdateFlowResponse",
-        "documentation": "AWS Elemental MediaConnect updated the flow successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Updates flow"
-    },
-    "UpdateFlowEntitlement": {
-      "name": "UpdateFlowEntitlement",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/flows/{flowArn}/entitlements/{entitlementArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateFlowEntitlementRequest"
-      },
-      "output": {
-        "shape": "UpdateFlowEntitlementResponse",
-        "documentation": "AWS Elemental MediaConnect updated the entitlement successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "You can change an entitlement's description, subscribers, and encryption. If you change the subscribers, the service will remove the outputs that are are used by the subscribers that are removed."
-    },
-    "UpdateFlowMediaStream": {
-      "name": "UpdateFlowMediaStream",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/flows/{flowArn}/mediaStreams/{mediaStreamName}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateFlowMediaStreamRequest"
-      },
-      "output": {
-        "shape": "UpdateFlowMediaStreamResponse",
-        "documentation": "MediaConnect is updating the media stream."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Updates an existing media stream."
-    },
-    "UpdateFlowOutput": {
-      "name": "UpdateFlowOutput",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/flows/{flowArn}/outputs/{outputArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateFlowOutputRequest"
-      },
-      "output": {
-        "shape": "UpdateFlowOutputResponse",
-        "documentation": "AWS Elemental MediaConnect updated the output successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Updates an existing flow output."
-    },
-    "UpdateFlowSource": {
-      "name": "UpdateFlowSource",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/flows/{flowArn}/source/{sourceArn}",
-        "responseCode": 202
-      },
-      "input": {
-        "shape": "UpdateFlowSourceRequest"
-      },
-      "output": {
-        "shape": "UpdateFlowSourceResponse",
-        "documentation": "AWS Elemental MediaConnect updated the flow successfully."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        }
-      ],
-      "documentation": "Updates the source of a flow."
-    },
-    "UpdateGatewayInstance": {
-      "name": "UpdateGatewayInstance",
-      "http": {
-        "method": "PUT",
-        "requestUri": "/v1/gateway-instances/{gatewayInstanceArn}",
-        "responseCode": 200
-      },
-      "input": {
-        "shape": "UpdateGatewayInstanceRequest"
-      },
-      "output": {
-        "shape": "UpdateGatewayInstanceResponse",
-        "documentation": "AWS Elemental MediaConnect is applying the instance state."
-      },
-      "errors": [
-        {
-          "shape": "BadRequestException",
-          "documentation": "The request that you submitted is not valid."
-        },
-        {
-          "shape": "InternalServerErrorException",
-          "documentation": "AWS Elemental MediaConnect can't fulfill your request because it encountered an unexpected condition."
-        },
-        {
-          "shape": "ForbiddenException",
-          "documentation": "You don't have the required permissions to perform this operation."
-        },
-        {
-          "shape": "NotFoundException",
-          "documentation": "AWS Elemental MediaConnect did not find the resource that you specified in the request."
-        },
-        {
-          "shape": "ServiceUnavailableException",
-          "documentation": "AWS Elemental MediaConnect is currently unavailable. Try again later."
-        },
-        {
-          "shape": "TooManyRequestsException",
-          "documentation": "You have exceeded the service request rate limit for your AWS Elemental MediaConnect account."
-        },
-        {
-          "shape": "ConflictException",
-          "documentation": "The request could not be completed due to a conflict with the current state of the target resource."
-        }
-      ],
-      "documentation": "Updates the configuration of an existing Gateway Instance."
+      "documentation":"<p>Updates an existing gateway instance. </p>",
+      "idempotent":true
     }
   },
-  "shapes": {
-    "AddBridgeFlowSourceRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Number (ARN) of the cloud flow to use as a source of this bridge."
-        },
-        "FlowVpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "flowVpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this source."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the flow source. This name is used to reference the source and must be unique among sources in this bridge."
-        }
-      },
-      "documentation": "Add a flow source to an existing bridge.",
-      "required": [
+  "shapes":{
+    "AddBridgeFlowSourceRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "Name"
-      ]
-    },
-    "AddBridgeNetworkOutputRequest": {
-      "type": "structure",
-      "members": {
-        "IpAddress": {
-          "shape": "__string",
-          "locationName": "ipAddress",
-          "documentation": "The network output IP Address."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The network output name. This name is used to reference the output and must be unique among outputs in this bridge."
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network output's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network output port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network output protocol."
-        },
-        "Ttl": {
-          "shape": "__integer",
-          "locationName": "ttl",
-          "documentation": "The network output TTL."
-        }
-      },
-      "documentation": "Add a network output to an existing bridge.",
-      "required": [
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"AddBridgeFlowSourceRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Number (ARN) of the flow to use as a source of this bridge. </p>",
+          "locationName":"flowArn"
+        },
+        "FlowVpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p>The name of the VPC interface attachment to use for this source. </p>",
+          "locationName":"flowVpcInterfaceAttachment"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the flow source. This name is used to reference the source and must be unique among sources in this bridge. </p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p> Add a flow source to an existing bridge. </p>"
+    },
+    "AddBridgeFlowSourceRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "AddBridgeNetworkOutputRequest":{
+      "type":"structure",
+      "required":[
+        "IpAddress",
+        "Name",
         "NetworkName",
         "Port",
-        "IpAddress",
         "Protocol",
-        "Ttl",
-        "Name"
-      ]
-    },
-    "AddBridgeNetworkSourceRequest": {
-      "type": "structure",
-      "members": {
-        "MulticastIp": {
-          "shape": "__string",
-          "locationName": "multicastIp",
-          "documentation": "The network source multicast IP."
-        },
-        "MulticastSourceSettings": {
-          "shape": "MulticastSourceSettings",
-          "locationName": "multicastSourceSettings"
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the network source. This name is used to reference the source and must be unique among sources in this bridge."
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network source's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network source port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network source protocol."
-        }
-      },
-      "documentation": "Add a network source to an existing bridge.",
-      "required": [
-        "NetworkName",
+        "Ttl"
+      ],
+      "members":{
+        "IpAddress":{
+          "shape":"String",
+          "documentation":"<p> The network output IP Address. </p>",
+          "locationName":"ipAddress"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The network output name. This name is used to reference the output and must be unique among outputs in this bridge. </p>",
+          "locationName":"name"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p> The network output's gateway network name. </p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The network output port. </p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The network output protocol. </p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "Ttl":{
+          "shape":"Integer",
+          "documentation":"<p> The network output TTL. </p>",
+          "locationName":"ttl"
+        }
+      },
+      "documentation":"<p>Add a network output to an existing bridge. </p>"
+    },
+    "AddBridgeNetworkSourceRequest":{
+      "type":"structure",
+      "required":[
         "MulticastIp",
+        "Name",
+        "NetworkName",
         "Port",
-        "Protocol",
-        "Name"
-      ]
-    },
-    "AddBridgeOutputRequest": {
-      "type": "structure",
-      "members": {
-        "NetworkOutput": {
-          "shape": "AddBridgeNetworkOutputRequest",
-          "locationName": "networkOutput"
-        }
-      },
-      "documentation": "Add an output to a bridge."
-    },
-    "AddBridgeOutputsRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "Outputs": {
-          "shape": "__listOfAddBridgeOutputRequest",
-          "locationName": "outputs",
-          "documentation": "The outputs that you want to add to this bridge."
-        }
-      },
-      "documentation": "A request to add outputs to the specified bridge.",
-      "required": [
+        "Protocol"
+      ],
+      "members":{
+        "MulticastIp":{
+          "shape":"String",
+          "documentation":"<p> The network source multicast IP.</p>",
+          "locationName":"multicastIp"
+        },
+        "MulticastSourceSettings":{
+          "shape":"MulticastSourceSettings",
+          "documentation":"<p> The settings related to the multicast source. </p>",
+          "locationName":"multicastSourceSettings"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the network source. This name is used to reference the source and must be unique among sources in this bridge.</p>",
+          "locationName":"name"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p> The network source's gateway network name.</p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The network source port.</p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The network source protocol.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        }
+      },
+      "documentation":"<p> Add a network source to an existing bridge. </p>"
+    },
+    "AddBridgeOutputRequest":{
+      "type":"structure",
+      "members":{
+        "NetworkOutput":{
+          "shape":"AddBridgeNetworkOutputRequest",
+          "documentation":"<p> The network output of the bridge. A network output is delivered to your premises. </p>",
+          "locationName":"networkOutput"
+        }
+      },
+      "documentation":"<p> Add outputs to the specified bridge.</p>"
+    },
+    "AddBridgeOutputsRequest":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "Outputs"
-      ]
-    },
-    "AddBridgeOutputsResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "Outputs": {
-          "shape": "__listOfBridgeOutput",
-          "locationName": "outputs",
-          "documentation": "The outputs that you added to this bridge."
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"AddBridgeOutputsRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "Outputs":{
+          "shape":"__listOfAddBridgeOutputRequest",
+          "documentation":"<p> The outputs that you want to add to this bridge.</p>",
+          "locationName":"outputs"
         }
       }
     },
-    "AddBridgeSourceRequest": {
-      "type": "structure",
-      "members": {
-        "FlowSource": {
-          "shape": "AddBridgeFlowSourceRequest",
-          "locationName": "flowSource"
-        },
-        "NetworkSource": {
-          "shape": "AddBridgeNetworkSourceRequest",
-          "locationName": "networkSource"
-        }
-      },
-      "documentation": "Add a source to an existing bridge."
-    },
-    "AddBridgeSourcesRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "Sources": {
-          "shape": "__listOfAddBridgeSourceRequest",
-          "locationName": "sources",
-          "documentation": "The sources that you want to add to this bridge."
+    "AddBridgeOutputsRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "AddBridgeOutputsResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge that you added outputs to.</p>",
+          "locationName":"bridgeArn"
+        },
+        "Outputs":{
+          "shape":"__listOfBridgeOutput",
+          "documentation":"<p> The outputs that you added to this bridge.</p>",
+          "locationName":"outputs"
         }
-      },
-      "documentation": "A request to add sources to the specified bridge.",
-      "required": [
+      }
+    },
+    "AddBridgeSourceRequest":{
+      "type":"structure",
+      "members":{
+        "FlowSource":{
+          "shape":"AddBridgeFlowSourceRequest",
+          "documentation":"<p> The source of the flow. </p>",
+          "locationName":"flowSource"
+        },
+        "NetworkSource":{
+          "shape":"AddBridgeNetworkSourceRequest",
+          "documentation":"<p> The source of the network. </p>",
+          "locationName":"networkSource"
+        }
+      },
+      "documentation":"<p> Add an output to a bridge. </p>"
+    },
+    "AddBridgeSourcesRequest":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "Sources"
-      ]
-    },
-    "AddBridgeSourcesResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "Sources": {
-          "shape": "__listOfBridgeSource",
-          "locationName": "sources",
-          "documentation": "The sources that you added to this bridge."
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"BridgeArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "Sources":{
+          "shape":"__listOfAddBridgeSourceRequest",
+          "documentation":"<p> The sources that you want to add to this bridge.</p>",
+          "locationName":"sources"
         }
       }
     },
-    "AddEgressGatewayBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The maximum expected bitrate (in bps)."
+    "AddBridgeSourcesResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge that you added sources to.</p>",
+          "locationName":"bridgeArn"
+        },
+        "Sources":{
+          "shape":"__listOfBridgeSource",
+          "documentation":"<p> The sources that you added to this bridge.</p>",
+          "locationName":"sources"
         }
-      },
-      "required": [
-        "MaxBitrate"
-      ]
+      }
     },
-    "AddFlowMediaStreamsRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
-        },
-        "MediaStreams": {
-          "shape": "__listOfAddMediaStreamRequest",
-          "locationName": "mediaStreams",
-          "documentation": "The media streams that you want to add to the flow."
-        }
-      },
-      "documentation": "A request to add media streams to the flow.",
-      "required": [
+    "AddEgressGatewayBridgeRequest":{
+      "type":"structure",
+      "required":["MaxBitrate"],
+      "members":{
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum expected bitrate (in bps) of the egress bridge.</p>",
+          "locationName":"maxBitrate"
+        }
+      },
+      "documentation":"<p> Create a bridge with the egress bridge type. An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. </p>"
+    },
+    "AddFlowMediaStreamsRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "MediaStreams"
-      ]
-    },
-    "AddFlowMediaStreamsResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you added media streams to."
-        },
-        "MediaStreams": {
-          "shape": "__listOfMediaStream",
-          "locationName": "mediaStreams",
-          "documentation": "The media streams that you added to the flow."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"AddFlowMediaStreamsRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "MediaStreams":{
+          "shape":"__listOfAddMediaStreamRequest",
+          "documentation":"<p> The media streams that you want to add to the flow.</p>",
+          "locationName":"mediaStreams"
         }
       }
     },
-    "AddFlowOutputs420Exception": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 420
-      }
-    },
-    "AddFlowOutputsRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to add outputs to."
-        },
-        "Outputs": {
-          "shape": "__listOfAddOutputRequest",
-          "locationName": "outputs",
-          "documentation": "A list of outputs that you want to add."
+    "AddFlowMediaStreamsRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "AddFlowMediaStreamsResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that you added media streams to.</p>",
+          "locationName":"flowArn"
+        },
+        "MediaStreams":{
+          "shape":"__listOfMediaStream",
+          "documentation":"<p> The media streams that you added to the flow.</p>",
+          "locationName":"mediaStreams"
         }
-      },
-      "documentation": "A request to add outputs to the specified flow.",
-      "required": [
+      }
+    },
+    "AddFlowOutputs420Exception":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception raised by Elemental MediaConnect when adding the flow output. See the error message for the operation for more information on the cause of this exception. </p>",
+      "error":{
+        "httpStatusCode":420,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AddFlowOutputsRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "Outputs"
-      ]
-    },
-    "AddFlowOutputsResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that these outputs were added to."
-        },
-        "Outputs": {
-          "shape": "__listOfOutput",
-          "locationName": "outputs",
-          "documentation": "The details of the newly added outputs."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"AddFlowOutputsRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to add outputs to.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "Outputs":{
+          "shape":"__listOfAddOutputRequest",
+          "documentation":"<p> A list of outputs that you want to add to the flow.</p>",
+          "locationName":"outputs"
         }
       }
     },
-    "AddFlowSourcesRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to mutate."
-        },
-        "Sources": {
-          "shape": "__listOfSetSourceRequest",
-          "locationName": "sources",
-          "documentation": "A list of sources that you want to add."
+    "AddFlowOutputsRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "AddFlowOutputsResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that these outputs were added to.</p>",
+          "locationName":"flowArn"
+        },
+        "Outputs":{
+          "shape":"__listOfOutput",
+          "documentation":"<p> The details of the newly added outputs.</p>",
+          "locationName":"outputs"
         }
-      },
-      "documentation": "A request to add sources to the flow.",
-      "required": [
+      }
+    },
+    "AddFlowSourcesRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "Sources"
-      ]
-    },
-    "AddFlowSourcesResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that these sources were added to."
-        },
-        "Sources": {
-          "shape": "__listOfSource",
-          "locationName": "sources",
-          "documentation": "The details of the newly added sources."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"AddFlowSourcesRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "Sources":{
+          "shape":"__listOfSetSourceRequest",
+          "documentation":"<p> A list of sources that you want to add to the flow.</p>",
+          "locationName":"sources"
         }
       }
     },
-    "AddFlowVpcInterfacesRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to mutate."
-        },
-        "VpcInterfaces": {
-          "shape": "__listOfVpcInterfaceRequest",
-          "locationName": "vpcInterfaces",
-          "documentation": "A list of VPC interfaces that you want to add."
+    "AddFlowSourcesRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "AddFlowSourcesResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that these sources were added to.</p>",
+          "locationName":"flowArn"
+        },
+        "Sources":{
+          "shape":"__listOfSource",
+          "documentation":"<p> The details of the newly added sources.</p>",
+          "locationName":"sources"
         }
-      },
-      "documentation": "A request to add VPC interfaces to the flow.",
-      "required": [
+      }
+    },
+    "AddFlowVpcInterfacesRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "VpcInterfaces"
-      ]
-    },
-    "AddFlowVpcInterfacesResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that these VPC interfaces were added to."
-        },
-        "VpcInterfaces": {
-          "shape": "__listOfVpcInterface",
-          "locationName": "vpcInterfaces",
-          "documentation": "The details of the newly added VPC interfaces."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"AddFlowVpcInterfacesRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "VpcInterfaces":{
+          "shape":"__listOfVpcInterfaceRequest",
+          "documentation":"<p> A list of VPC interfaces that you want to add to the flow.</p>",
+          "locationName":"vpcInterfaces"
         }
       }
     },
-    "AddIngressGatewayBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The maximum expected bitrate (in bps)."
-        },
-        "MaxOutputs": {
-          "shape": "__integer",
-          "locationName": "maxOutputs",
-          "documentation": "The maximum number of expected outputs."
-        }
-      },
-      "required": [
-        "MaxOutputs",
-        "MaxBitrate"
-      ]
-    },
-    "AddMaintenance": {
-      "type": "structure",
-      "members": {
-        "MaintenanceDay": {
-          "shape": "MaintenanceDay",
-          "locationName": "maintenanceDay",
-          "documentation": "A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday."
-        },
-        "MaintenanceStartHour": {
-          "shape": "__string",
-          "locationName": "maintenanceStartHour",
-          "documentation": "UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00."
+    "AddFlowVpcInterfacesRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "AddFlowVpcInterfacesResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that these VPC interfaces were added to.</p>",
+          "locationName":"flowArn"
+        },
+        "VpcInterfaces":{
+          "shape":"__listOfVpcInterface",
+          "documentation":"<p> The details of the newly added VPC interfaces.</p>",
+          "locationName":"vpcInterfaces"
         }
-      },
-      "documentation": "Create maintenance setting for a flow",
-      "required": [
+      }
+    },
+    "AddIngressGatewayBridgeRequest":{
+      "type":"structure",
+      "required":[
+        "MaxBitrate",
+        "MaxOutputs"
+      ],
+      "members":{
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum expected bitrate (in bps) of the ingress bridge. </p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxOutputs":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum number of expected outputs on the ingress bridge. </p>",
+          "locationName":"maxOutputs"
+        }
+      },
+      "documentation":"<p>Create a bridge with the ingress bridge type. An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. </p>"
+    },
+    "AddMaintenance":{
+      "type":"structure",
+      "required":[
         "MaintenanceDay",
         "MaintenanceStartHour"
-      ]
-    },
-    "AddMediaStreamRequest": {
-      "type": "structure",
-      "members": {
-        "Attributes": {
-          "shape": "MediaStreamAttributesRequest",
-          "locationName": "attributes",
-          "documentation": "The attributes that you want to assign to the new media stream."
-        },
-        "ClockRate": {
-          "shape": "__integer",
-          "locationName": "clockRate",
-          "documentation": "The sample rate (in Hz) for the stream. If the media stream type is video or ancillary data, set this value to 90000. If the media stream type is audio, set this value to either 48000 or 96000."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description that can help you quickly identify what your media stream is used for."
-        },
-        "MediaStreamId": {
-          "shape": "__integer",
-          "locationName": "mediaStreamId",
-          "documentation": "A unique identifier for the media stream."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "A name that helps you distinguish one media stream from another."
-        },
-        "MediaStreamType": {
-          "shape": "MediaStreamType",
-          "locationName": "mediaStreamType",
-          "documentation": "The type of media stream."
-        },
-        "VideoFormat": {
-          "shape": "__string",
-          "locationName": "videoFormat",
-          "documentation": "The resolution of the video."
-        }
-      },
-      "documentation": "The media stream that you want to add to the flow.",
-      "required": [
-        "MediaStreamType",
+      ],
+      "members":{
+        "MaintenanceDay":{
+          "shape":"MaintenanceDay",
+          "documentation":"<p> A day of a week when the maintenance will happen. </p>",
+          "locationName":"maintenanceDay"
+        },
+        "MaintenanceStartHour":{
+          "shape":"String",
+          "documentation":"<p> UTC time when the maintenance will happen. </p> <p>Use 24-hour HH:MM format. </p> <p>Minutes must be 00. </p> <p>Example: 13:00. </p> <p>The default value is 02:00.</p>",
+          "locationName":"maintenanceStartHour"
+        }
+      },
+      "documentation":"<p> Create a maintenance setting for a flow.</p>"
+    },
+    "AddMediaStreamRequest":{
+      "type":"structure",
+      "required":[
         "MediaStreamId",
-        "MediaStreamName"
-      ]
-    },
-    "AddOutputRequest": {
-      "type": "structure",
-      "members": {
-        "CidrAllowList": {
-          "shape": "__listOf__string",
-          "locationName": "cidrAllowList",
-          "documentation": "The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the output. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the end user."
-        },
-        "Destination": {
-          "shape": "__string",
-          "locationName": "destination",
-          "documentation": "The IP address from which video will be sent to output destinations."
-        },
-        "Encryption": {
-          "shape": "Encryption",
-          "locationName": "encryption",
-          "documentation": "The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). Allowable encryption types: static-key."
-        },
-        "MaxLatency": {
-          "shape": "__integer",
-          "locationName": "maxLatency",
-          "documentation": "The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams."
-        },
-        "MediaStreamOutputConfigurations": {
-          "shape": "__listOfMediaStreamOutputConfigurationRequest",
-          "locationName": "mediaStreamOutputConfigurations",
-          "documentation": "The media streams that are associated with the output, and the parameters for those associations."
-        },
-        "MinLatency": {
-          "shape": "__integer",
-          "locationName": "minLatency",
-          "documentation": "The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the output. This value must be unique within the current flow."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The port to use when content is distributed to this output."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The protocol to use for the output."
-        },
-        "RemoteId": {
-          "shape": "__string",
-          "locationName": "remoteId",
-          "documentation": "The remote ID for the Zixi-pull output stream."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SmoothingLatency": {
-          "shape": "__integer",
-          "locationName": "smoothingLatency",
-          "documentation": "The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams."
-        },
-        "StreamId": {
-          "shape": "__string",
-          "locationName": "streamId",
-          "documentation": "The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this output."
-        },
-        "OutputStatus": {
-          "shape": "OutputStatus",
-          "locationName": "outputStatus",
-          "documentation": "An indication of whether the new output should be enabled or disabled as soon as it is created. If you don't specify the outputStatus field in your request, MediaConnect sets it to ENABLED."
-        }
-      },
-      "documentation": "The output that you want to add to this flow.",
-      "required": [
-        "Protocol"
-      ]
-    },
-    "Algorithm": {
-      "type": "string",
-      "enum": [
+        "MediaStreamName",
+        "MediaStreamType"
+      ],
+      "members":{
+        "Attributes":{
+          "shape":"MediaStreamAttributesRequest",
+          "documentation":"<p> The attributes that you want to assign to the new media stream.</p>",
+          "locationName":"attributes"
+        },
+        "ClockRate":{
+          "shape":"Integer",
+          "documentation":"<p> The sample rate (in Hz) for the stream. If the media stream type is video or ancillary data, set this value to 90000. If the media stream type is audio, set this value to either 48000 or 96000.</p>",
+          "locationName":"clockRate"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description that can help you quickly identify what your media stream is used for.</p>",
+          "locationName":"description"
+        },
+        "MediaStreamId":{
+          "shape":"Integer",
+          "documentation":"<p> A unique identifier for the media stream. </p>",
+          "locationName":"mediaStreamId"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> A name that helps you distinguish one media stream from another.</p>",
+          "locationName":"mediaStreamName"
+        },
+        "MediaStreamType":{
+          "shape":"MediaStreamType",
+          "documentation":"<p> The type of media stream.</p>",
+          "locationName":"mediaStreamType"
+        },
+        "VideoFormat":{
+          "shape":"String",
+          "documentation":"<p> The resolution of the video.</p>",
+          "locationName":"videoFormat"
+        },
+        "MediaStreamTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the media stream. </p>",
+          "locationName":"mediaStreamTags"
+        }
+      },
+      "documentation":"<p> The media stream that you want to add to the flow. </p>"
+    },
+    "AddOutputRequest":{
+      "type":"structure",
+      "members":{
+        "CidrAllowList":{
+          "shape":"__listOfString",
+          "documentation":"<p> The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"cidrAllowList"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the output. This description appears only on the Audit Manager console and will not be seen by the end user.</p>",
+          "locationName":"description"
+        },
+        "Destination":{
+          "shape":"String",
+          "documentation":"<p> The IP address from which video will be sent to output destinations.</p>",
+          "locationName":"destination"
+        },
+        "Encryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). Allowable encryption types: static-key.</p>",
+          "locationName":"encryption"
+        },
+        "MaxLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.</p>",
+          "locationName":"maxLatency"
+        },
+        "MediaStreamOutputConfigurations":{
+          "shape":"__listOfMediaStreamOutputConfigurationRequest",
+          "documentation":"<p> The media streams that are associated with the output, and the parameters for those associations.</p>",
+          "locationName":"mediaStreamOutputConfigurations"
+        },
+        "MinLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency.</p>",
+          "locationName":"minLatency"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the output. This value must be unique within the current flow.</p>",
+          "locationName":"name"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The port to use when content is distributed to this output.</p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The protocol to use for the output.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "RemoteId":{
+          "shape":"String",
+          "documentation":"<p> The remote ID for the Zixi-pull output stream.</p>",
+          "locationName":"remoteId"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow uses to send outbound requests to initiate connection with the sender.</p>",
+          "locationName":"senderControlPort"
+        },
+        "SmoothingLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams.</p>",
+          "locationName":"smoothingLatency"
+        },
+        "StreamId":{
+          "shape":"String",
+          "documentation":"<p> The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams.</p>",
+          "locationName":"streamId"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this output.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        },
+        "OutputStatus":{
+          "shape":"OutputStatus",
+          "documentation":"<p> An indication of whether the new output should be enabled or disabled as soon as it is created. If you don't specify the outputStatus field in your request, MediaConnect sets it to ENABLED.</p>",
+          "locationName":"outputStatus"
+        },
+        "NdiSpeedHqQuality":{
+          "shape":"Integer",
+          "documentation":"<p>A quality setting for the NDI Speed HQ encoder. </p>",
+          "locationName":"ndiSpeedHqQuality"
+        },
+        "NdiProgramName":{
+          "shape":"String",
+          "documentation":"<p> A suffix for the names of the NDI sources that the flow creates. If a custom name isn't specified, MediaConnect uses the output name. </p>",
+          "locationName":"ndiProgramName"
+        },
+        "OutputTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the output. </p>",
+          "locationName":"outputTags"
+        }
+      },
+      "documentation":"<p> A request to add an output to a flow.</p>"
+    },
+    "Algorithm":{
+      "type":"string",
+      "enum":[
         "aes128",
         "aes192",
         "aes256"
       ]
     },
-    "AudioMonitoringSetting": {
-      "type": "structure",
-      "members": {
-        "SilentAudio": {
-          "shape": "SilentAudio",
-          "locationName": "silentAudio",
-          "documentation": "Detects periods of silence."
-        }
-      },
-      "documentation": "Specifies the configuration for audio stream metrics monitoring."
-    },
-    "BadRequestException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 400
-      }
-    },
-    "BlackFrames": {
-      "type": "structure",
-      "members": {
-        "State": {
-          "shape": "State",
-          "locationName": "state",
-          "documentation": "Indicates whether the BlackFrames metric is enabled or disabled."
-        },
-        "ThresholdSeconds": {
-          "shape": "__integer",
-          "locationName": "thresholdSeconds",
-          "documentation": "Specifies the number of consecutive seconds of black frames that triggers an event or alert."
-        }
-      },
-      "documentation": "Configures settings for the BlackFrames metric."
-    },
-    "Bridge": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "BridgeMessages": {
-          "shape": "__listOfMessageDetail",
-          "locationName": "bridgeMessages"
-        },
-        "BridgeState": {
-          "shape": "BridgeState",
-          "locationName": "bridgeState"
-        },
-        "EgressGatewayBridge": {
-          "shape": "EgressGatewayBridge",
-          "locationName": "egressGatewayBridge"
-        },
-        "IngressGatewayBridge": {
-          "shape": "IngressGatewayBridge",
-          "locationName": "ingressGatewayBridge"
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the bridge."
-        },
-        "Outputs": {
-          "shape": "__listOfBridgeOutput",
-          "locationName": "outputs",
-          "documentation": "The outputs on this bridge."
-        },
-        "PlacementArn": {
-          "shape": "__string",
-          "locationName": "placementArn",
-          "documentation": "The placement Amazon Resource Number (ARN) of the bridge."
-        },
-        "SourceFailoverConfig": {
-          "shape": "FailoverConfig",
-          "locationName": "sourceFailoverConfig"
-        },
-        "Sources": {
-          "shape": "__listOfBridgeSource",
-          "locationName": "sources",
-          "documentation": "The sources on this bridge."
-        }
-      },
-      "documentation": "A Bridge is the connection between your datacenter's Instances and the AWS cloud. A bridge can be used to send video from the AWS cloud to your datacenter or from your datacenter to the AWS cloud.",
-      "required": [
+    "AudioMonitoringSetting":{
+      "type":"structure",
+      "members":{
+        "SilentAudio":{
+          "shape":"SilentAudio",
+          "documentation":"<p> Detects periods of silence. </p>",
+          "locationName":"silentAudio"
+        }
+      },
+      "documentation":"<p> Specifies the configuration for audio stream metrics monitoring.</p>"
+    },
+    "BadRequestException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>This exception is thrown if the request contains a semantic error. The precise meaning depends on the API, and is documented in the error message. </p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "BlackFrames":{
+      "type":"structure",
+      "members":{
+        "State":{
+          "shape":"State",
+          "documentation":"<p> Indicates whether the <code>BlackFrames</code> metric is enabled or disabled..</p>",
+          "locationName":"state"
+        },
+        "ThresholdSeconds":{
+          "shape":"Integer",
+          "documentation":"<p> Specifies the number of consecutive seconds of black frames that triggers an event or alert.</p>",
+          "locationName":"thresholdSeconds"
+        }
+      },
+      "documentation":"<p> Configures settings for the <code>BlackFrames</code> metric.</p>"
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "Bridge":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "BridgeState",
-        "PlacementArn",
-        "Name"
-      ]
-    },
-    "BridgeFlowOutput": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Number (ARN) of the cloud flow."
-        },
-        "FlowSourceArn": {
-          "shape": "__string",
-          "locationName": "flowSourceArn",
-          "documentation": "The Amazon Resource Number (ARN) of the flow source."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the bridge's output."
-        }
-      },
-      "documentation": "The output of the bridge. A flow output is delivered to the AWS cloud.",
-      "required": [
-        "FlowSourceArn",
+        "Name",
+        "PlacementArn"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Number (ARN) of the bridge.</p>",
+          "locationName":"bridgeArn"
+        },
+        "BridgeMessages":{
+          "shape":"__listOfMessageDetail",
+          "documentation":"<p> Messages with details about the bridge. </p>",
+          "locationName":"bridgeMessages"
+        },
+        "BridgeState":{
+          "shape":"BridgeState",
+          "documentation":"<p>The state of the bridge. </p>",
+          "locationName":"bridgeState"
+        },
+        "EgressGatewayBridge":{
+          "shape":"EgressGatewayBridge",
+          "documentation":"<p> An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. </p>",
+          "locationName":"egressGatewayBridge"
+        },
+        "IngressGatewayBridge":{
+          "shape":"IngressGatewayBridge",
+          "documentation":"<p> An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. </p>",
+          "locationName":"ingressGatewayBridge"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge.</p>",
+          "locationName":"name"
+        },
+        "Outputs":{
+          "shape":"__listOfBridgeOutput",
+          "documentation":"<p> The outputs on this bridge.</p>",
+          "locationName":"outputs"
+        },
+        "PlacementArn":{
+          "shape":"String",
+          "documentation":"<p> The placement Amazon Resource Number (ARN) of the bridge.</p>",
+          "locationName":"placementArn"
+        },
+        "SourceFailoverConfig":{
+          "shape":"FailoverConfig",
+          "documentation":"<p> The settings for source failover. </p>",
+          "locationName":"sourceFailoverConfig"
+        },
+        "Sources":{
+          "shape":"__listOfBridgeSource",
+          "documentation":"<p> The sources on this bridge.</p>",
+          "locationName":"sources"
+        }
+      },
+      "documentation":"<p> A Bridge is the connection between your data center's Instances and the Amazon Web Services cloud. A bridge can be used to send video from the Amazon Web Services cloud to your data center or from your data center to the Amazon Web Services cloud.</p>"
+    },
+    "BridgeArn":{"type":"string"},
+    "BridgeFlowOutput":{
+      "type":"structure",
+      "required":[
         "FlowArn",
+        "FlowSourceArn",
         "Name"
-      ]
-    },
-    "BridgeFlowSource": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the cloud flow used as a source of this bridge."
-        },
-        "FlowVpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "flowVpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this source."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the flow source."
-        },
-        "OutputArn": {
-          "shape": "__string",
-          "locationName": "outputArn",
-          "documentation": "The Amazon Resource Number (ARN) of the output."
-        }
-      },
-      "documentation": "The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow.",
-      "required": [
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Number (ARN) of the cloud flow.</p>",
+          "locationName":"flowArn"
+        },
+        "FlowSourceArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Number (ARN) of the flow source.</p>",
+          "locationName":"flowSourceArn"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge's output.</p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p> The output of the bridge. A flow output is delivered to the Amazon Web Services cloud. </p>"
+    },
+    "BridgeFlowSource":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "Name"
-      ]
-    },
-    "BridgeNetworkOutput": {
-      "type": "structure",
-      "members": {
-        "IpAddress": {
-          "shape": "__string",
-          "locationName": "ipAddress",
-          "documentation": "The network output IP Address."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The network output name."
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network output's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network output port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network output protocol."
-        },
-        "Ttl": {
-          "shape": "__integer",
-          "locationName": "ttl",
-          "documentation": "The network output TTL."
-        }
-      },
-      "documentation": "The output of the bridge. A network output is delivered to your premises.",
-      "required": [
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the cloud flow used as a source of this bridge.</p>",
+          "locationName":"flowArn"
+        },
+        "FlowVpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this source.</p>",
+          "locationName":"flowVpcInterfaceAttachment"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the flow source.</p>",
+          "locationName":"name"
+        },
+        "OutputArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Number (ARN) of the output.</p>",
+          "locationName":"outputArn"
+        }
+      },
+      "documentation":"<p> The source of the bridge. A flow source originates in MediaConnect as an existing cloud flow.</p>"
+    },
+    "BridgeNetworkOutput":{
+      "type":"structure",
+      "required":[
+        "IpAddress",
+        "Name",
         "NetworkName",
         "Port",
-        "IpAddress",
         "Protocol",
-        "Ttl",
-        "Name"
-      ]
-    },
-    "BridgeNetworkSource": {
-      "type": "structure",
-      "members": {
-        "MulticastIp": {
-          "shape": "__string",
-          "locationName": "multicastIp",
-          "documentation": "The network source multicast IP."
-        },
-        "MulticastSourceSettings": {
-          "shape": "MulticastSourceSettings",
-          "locationName": "multicastSourceSettings"
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the network source."
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network source's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network source port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network source protocol."
-        }
-      },
-      "documentation": "The source of the bridge. A network source originates at your premises.",
-      "required": [
-        "NetworkName",
+        "Ttl"
+      ],
+      "members":{
+        "IpAddress":{
+          "shape":"String",
+          "documentation":"<p> The network output IP address.</p>",
+          "locationName":"ipAddress"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The network output name.</p>",
+          "locationName":"name"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p> The network output's gateway network name.</p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The network output's port.</p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The network output protocol.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "Ttl":{
+          "shape":"Integer",
+          "documentation":"<p> The network output TTL.</p>",
+          "locationName":"ttl"
+        }
+      },
+      "documentation":"<p> The output of the bridge. A network output is delivered to your premises.</p>"
+    },
+    "BridgeNetworkSource":{
+      "type":"structure",
+      "required":[
         "MulticastIp",
+        "Name",
+        "NetworkName",
         "Port",
-        "Protocol",
-        "Name"
-      ]
-    },
-    "BridgeOutput": {
-      "type": "structure",
-      "members": {
-        "FlowOutput": {
-          "shape": "BridgeFlowOutput",
-          "locationName": "flowOutput"
-        },
-        "NetworkOutput": {
-          "shape": "BridgeNetworkOutput",
-          "locationName": "networkOutput"
-        }
-      },
-      "documentation": "The output of the bridge."
-    },
-    "BridgePlacement": {
-      "type": "string",
-      "enum": [
+        "Protocol"
+      ],
+      "members":{
+        "MulticastIp":{
+          "shape":"String",
+          "documentation":"<p> The network source multicast IP.</p>",
+          "locationName":"multicastIp"
+        },
+        "MulticastSourceSettings":{
+          "shape":"MulticastSourceSettings",
+          "documentation":"<p>The settings related to the multicast source. </p>",
+          "locationName":"multicastSourceSettings"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the network source.</p>",
+          "locationName":"name"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p> The network source's gateway network name.</p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The network source port.</p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The network source protocol.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        }
+      },
+      "documentation":"<p> The source of the bridge. A network source originates at your premises.</p>"
+    },
+    "BridgeOutput":{
+      "type":"structure",
+      "members":{
+        "FlowOutput":{
+          "shape":"BridgeFlowOutput",
+          "documentation":"<p> The output of the associated flow. </p>",
+          "locationName":"flowOutput"
+        },
+        "NetworkOutput":{
+          "shape":"BridgeNetworkOutput",
+          "documentation":"<p> The network output for the bridge. </p>",
+          "locationName":"networkOutput"
+        }
+      },
+      "documentation":"<p> The output of the bridge.</p>"
+    },
+    "BridgePlacement":{
+      "type":"string",
+      "enum":[
         "AVAILABLE",
         "LOCKED"
       ]
     },
-    "BridgeSource": {
-      "type": "structure",
-      "members": {
-        "FlowSource": {
-          "shape": "BridgeFlowSource",
-          "locationName": "flowSource"
-        },
-        "NetworkSource": {
-          "shape": "BridgeNetworkSource",
-          "locationName": "networkSource"
-        }
-      },
-      "documentation": "The bridge's source."
-    },
-    "BridgeState": {
-      "type": "string",
-      "enum": [
+    "BridgeSource":{
+      "type":"structure",
+      "members":{
+        "FlowSource":{
+          "shape":"BridgeFlowSource",
+          "documentation":"<p> The source of the associated flow. </p>",
+          "locationName":"flowSource"
+        },
+        "NetworkSource":{
+          "shape":"BridgeNetworkSource",
+          "documentation":"<p> The network source for the bridge. </p>",
+          "locationName":"networkSource"
+        }
+      },
+      "documentation":"<p> The bridge's source.</p>"
+    },
+    "BridgeState":{
+      "type":"string",
+      "enum":[
         "CREATING",
         "STANDBY",
         "STARTING",
@@ -3047,9 +1946,9 @@
         "UPDATING"
       ]
     },
-    "Colorimetry": {
-      "type": "string",
-      "enum": [
+    "Colorimetry":{
+      "type":"string",
+      "enum":[
         "BT601",
         "BT709",
         "BT2020",
@@ -3059,1216 +1958,1257 @@
         "XYZ"
       ]
     },
-    "ConflictException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 409
-      }
-    },
-    "ConnectionStatus": {
-      "type": "string",
-      "enum": [
+    "ConflictException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>The requested operation would cause a conflict with the current state of a service resource associated with the request. Resolve the conflict before retrying this request. </p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "ConnectionStatus":{
+      "type":"string",
+      "enum":[
         "CONNECTED",
         "DISCONNECTED"
       ]
     },
-    "ContentQualityAnalysisState": {
-      "type": "string",
-      "enum": [
+    "ContentQualityAnalysisState":{
+      "type":"string",
+      "enum":[
         "ENABLED",
         "DISABLED"
       ]
     },
-    "CreateBridge420Exception": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 420
-      }
-    },
-    "CreateBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "EgressGatewayBridge": {
-          "shape": "AddEgressGatewayBridgeRequest",
-          "locationName": "egressGatewayBridge",
-          "documentation": "Create a bridge with the egress bridge type. An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises."
-        },
-        "IngressGatewayBridge": {
-          "shape": "AddIngressGatewayBridgeRequest",
-          "locationName": "ingressGatewayBridge",
-          "documentation": "Create a bridge with the ingress bridge type. An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the bridge. This name can not be modified after the bridge is created."
-        },
-        "Outputs": {
-          "shape": "__listOfAddBridgeOutputRequest",
-          "locationName": "outputs",
-          "documentation": "The outputs that you want to add to this bridge."
-        },
-        "PlacementArn": {
-          "shape": "__string",
-          "locationName": "placementArn",
-          "documentation": "The bridge placement Amazon Resource Number (ARN)."
-        },
-        "SourceFailoverConfig": {
-          "shape": "FailoverConfig",
-          "locationName": "sourceFailoverConfig",
-          "documentation": "The settings for source failover."
-        },
-        "Sources": {
-          "shape": "__listOfAddBridgeSourceRequest",
-          "locationName": "sources",
-          "documentation": "The sources that you want to add to this bridge."
-        }
-      },
-      "documentation": "Creates a new bridge. The request must include one source.",
-      "required": [
-        "Sources",
+    "CreateBridge420Exception":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception raised by Elemental MediaConnect when creating the bridge. See the error message for the operation for more information on the cause of this exception. </p>",
+      "error":{
+        "httpStatusCode":420,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateBridgeRequest":{
+      "type":"structure",
+      "required":[
+        "Name",
         "PlacementArn",
-        "Name"
-      ]
-    },
-    "CreateBridgeResponse": {
-      "type": "structure",
-      "members": {
-        "Bridge": {
-          "shape": "Bridge",
-          "locationName": "bridge"
+        "Sources"
+      ],
+      "members":{
+        "EgressGatewayBridge":{
+          "shape":"AddEgressGatewayBridgeRequest",
+          "documentation":"<p>An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. </p>",
+          "locationName":"egressGatewayBridge"
+        },
+        "IngressGatewayBridge":{
+          "shape":"AddIngressGatewayBridgeRequest",
+          "documentation":"<p>An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. </p>",
+          "locationName":"ingressGatewayBridge"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge. This name can not be modified after the bridge is created.</p>",
+          "locationName":"name"
+        },
+        "Outputs":{
+          "shape":"__listOfAddBridgeOutputRequest",
+          "documentation":"<p> The outputs that you want to add to this bridge.</p>",
+          "locationName":"outputs"
+        },
+        "PlacementArn":{
+          "shape":"String",
+          "documentation":"<p> The bridge placement Amazon Resource Number (ARN).</p>",
+          "locationName":"placementArn"
+        },
+        "SourceFailoverConfig":{
+          "shape":"FailoverConfig",
+          "documentation":"<p> The settings for source failover.</p>",
+          "locationName":"sourceFailoverConfig"
+        },
+        "Sources":{
+          "shape":"__listOfAddBridgeSourceRequest",
+          "documentation":"<p> The sources that you want to add to this bridge.</p>",
+          "locationName":"sources"
+        }
+      }
+    },
+    "CreateBridgeResponse":{
+      "type":"structure",
+      "members":{
+        "Bridge":{
+          "shape":"Bridge",
+          "documentation":"<p> The name of the bridge that was created.</p>",
+          "locationName":"bridge"
+        }
+      }
+    },
+    "CreateFlow420Exception":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception raised by Elemental MediaConnect when creating the flow. See the error message for the operation for more information on the cause of this exception. </p>",
+      "error":{
+        "httpStatusCode":420,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateFlowRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p> The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current Amazon Web Services Region.</p>",
+          "locationName":"availabilityZone"
+        },
+        "Entitlements":{
+          "shape":"__listOfGrantEntitlementRequest",
+          "documentation":"<p> The entitlements that you want to grant on a flow.</p>",
+          "locationName":"entitlements"
+        },
+        "MediaStreams":{
+          "shape":"__listOfAddMediaStreamRequest",
+          "documentation":"<p> The media streams that you want to add to the flow. You can associate these media streams with sources and outputs on the flow.</p>",
+          "locationName":"mediaStreams"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the flow.</p>",
+          "locationName":"name"
+        },
+        "Outputs":{
+          "shape":"__listOfAddOutputRequest",
+          "documentation":"<p> The outputs that you want to add to this flow.</p>",
+          "locationName":"outputs"
+        },
+        "Source":{
+          "shape":"SetSourceRequest",
+          "documentation":"<p> The settings for the source that you want to use for the new flow. </p>",
+          "locationName":"source"
+        },
+        "SourceFailoverConfig":{
+          "shape":"FailoverConfig",
+          "documentation":"<p> The settings for source failover. </p>",
+          "locationName":"sourceFailoverConfig"
+        },
+        "Sources":{
+          "shape":"__listOfSetSourceRequest",
+          "documentation":"<p>The sources that are assigned to the flow. </p>",
+          "locationName":"sources"
+        },
+        "VpcInterfaces":{
+          "shape":"__listOfVpcInterfaceRequest",
+          "documentation":"<p> The VPC interfaces you want on the flow.</p>",
+          "locationName":"vpcInterfaces"
+        },
+        "Maintenance":{
+          "shape":"AddMaintenance",
+          "documentation":"<p> The maintenance settings you want to use for the flow. </p>",
+          "locationName":"maintenance"
+        },
+        "SourceMonitoringConfig":{
+          "shape":"MonitoringConfig",
+          "documentation":"<p> The settings for source monitoring. </p>",
+          "locationName":"sourceMonitoringConfig"
+        },
+        "FlowSize":{
+          "shape":"FlowSize",
+          "documentation":"<p> Determines the processing capacity and feature set of the flow. Set this optional parameter to <code>LARGE</code> if you want to enable NDI outputs on the flow. </p>",
+          "locationName":"flowSize"
+        },
+        "NdiConfig":{
+          "shape":"NdiConfig",
+          "documentation":"<p> Specifies the configuration settings for NDI outputs. Required when the flow includes NDI outputs. </p>",
+          "locationName":"ndiConfig"
+        },
+        "FlowTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the flow. </p>",
+          "locationName":"flowTags"
+        }
+      }
+    },
+    "CreateFlowResponse":{
+      "type":"structure",
+      "members":{
+        "Flow":{
+          "shape":"Flow",
+          "documentation":"<p> The flow that you created. </p>",
+          "locationName":"flow"
+        }
+      }
+    },
+    "CreateGateway420Exception":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception raised by Elemental MediaConnect when creating the gateway. See the error message for the operation for more information on the cause of this exception. </p>",
+      "error":{
+        "httpStatusCode":420,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "EgressCidrBlocks",
+        "Name",
+        "Networks"
+      ],
+      "members":{
+        "EgressCidrBlocks":{
+          "shape":"__listOfString",
+          "documentation":"<p> The range of IP addresses that are allowed to contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"egressCidrBlocks"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the gateway. This name can not be modified after the gateway is created.</p>",
+          "locationName":"name"
+        },
+        "Networks":{
+          "shape":"__listOfGatewayNetwork",
+          "documentation":"<p> The list of networks that you want to add to the gateway.</p>",
+          "locationName":"networks"
         }
       }
     },
-    "CreateFlow420Exception": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 420
-      }
-    },
-    "CreateFlowRequest": {
-      "type": "structure",
-      "members": {
-        "AvailabilityZone": {
-          "shape": "__string",
-          "locationName": "availabilityZone",
-          "documentation": "The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS Region."
-        },
-        "Entitlements": {
-          "shape": "__listOfGrantEntitlementRequest",
-          "locationName": "entitlements",
-          "documentation": "The entitlements that you want to grant on a flow."
-        },
-        "MediaStreams": {
-          "shape": "__listOfAddMediaStreamRequest",
-          "locationName": "mediaStreams",
-          "documentation": "The media streams that you want to add to the flow. You can associate these media streams with sources and outputs on the flow."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the flow."
-        },
-        "Outputs": {
-          "shape": "__listOfAddOutputRequest",
-          "locationName": "outputs",
-          "documentation": "The outputs that you want to add to this flow."
-        },
-        "Source": {
-          "shape": "SetSourceRequest",
-          "locationName": "source"
-        },
-        "SourceFailoverConfig": {
-          "shape": "FailoverConfig",
-          "locationName": "sourceFailoverConfig"
-        },
-        "Sources": {
-          "shape": "__listOfSetSourceRequest",
-          "locationName": "sources"
-        },
-        "VpcInterfaces": {
-          "shape": "__listOfVpcInterfaceRequest",
-          "locationName": "vpcInterfaces",
-          "documentation": "The VPC interfaces you want on the flow."
-        },
-        "Maintenance": {
-          "shape": "AddMaintenance",
-          "locationName": "maintenance"
-        },
-        "SourceMonitoringConfig": {
-          "shape": "MonitoringConfig",
-          "locationName": "sourceMonitoringConfig"
+    "CreateGatewayResponse":{
+      "type":"structure",
+      "members":{
+        "Gateway":{
+          "shape":"Gateway",
+          "documentation":"<p> The gateway that you created. </p>",
+          "locationName":"gateway"
         }
-      },
-      "documentation": "Creates a new flow. The request must include one source. The request optionally can include outputs (up to 50) and entitlements (up to 50).",
-      "required": [
-        "Name"
-      ]
+      }
     },
-    "CreateFlowResponse": {
-      "type": "structure",
-      "members": {
-        "Flow": {
-          "shape": "Flow",
-          "locationName": "flow"
+    "DeleteBridgeRequest":{
+      "type":"structure",
+      "required":["BridgeArn"],
+      "members":{
+        "BridgeArn":{
+          "shape":"DeleteBridgeRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to delete.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
         }
       }
     },
-    "CreateGateway420Exception": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 420
-      }
-    },
-    "CreateGatewayRequest": {
-      "type": "structure",
-      "members": {
-        "EgressCidrBlocks": {
-          "shape": "__listOf__string",
-          "locationName": "egressCidrBlocks",
-          "documentation": "The range of IP addresses that are allowed to contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the gateway. This name can not be modified after the gateway is created."
-        },
-        "Networks": {
-          "shape": "__listOfGatewayNetwork",
-          "locationName": "networks",
-          "documentation": "The list of networks that you want to add."
-        }
-      },
-      "documentation": "Creates a new gateway. The request must include at least one network (up to 4).",
-      "required": [
-        "Networks",
-        "EgressCidrBlocks",
-        "Name"
-      ]
+    "DeleteBridgeRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
     },
-    "CreateGatewayResponse": {
-      "type": "structure",
-      "members": {
-        "Gateway": {
-          "shape": "Gateway",
-          "locationName": "gateway"
+    "DeleteBridgeResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the deleted bridge.</p>",
+          "locationName":"bridgeArn"
         }
       }
     },
-    "DeleteBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to delete."
-        }
-      },
-      "required": [
-        "BridgeArn"
-      ]
-    },
-    "DeleteBridgeResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the deleted bridge."
+    "DeleteFlowRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"DeleteFlowRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to delete.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
       }
     },
-    "DeleteFlowRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you want to delete."
-        }
-      },
-      "required": [
-        "FlowArn"
-      ]
+    "DeleteFlowRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
     },
-    "DeleteFlowResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that was deleted."
-        },
-        "Status": {
-          "shape": "Status",
-          "locationName": "status",
-          "documentation": "The status of the flow when the DeleteFlow process begins."
+    "DeleteFlowResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that was deleted.</p>",
+          "locationName":"flowArn"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p> The status of the flow when the <code>DeleteFlow</code> process begins.</p>",
+          "locationName":"status"
         }
       }
     },
-    "DeleteGatewayRequest": {
-      "type": "structure",
-      "members": {
-        "GatewayArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:gateway:.+$",
-          "location": "uri",
-          "locationName": "gatewayArn",
-          "documentation": "The ARN of the gateway that you want to delete."
+    "DeleteGatewayRequest":{
+      "type":"structure",
+      "required":["GatewayArn"],
+      "members":{
+        "GatewayArn":{
+          "shape":"DeleteGatewayRequestGatewayArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway that you want to delete.</p>",
+          "location":"uri",
+          "locationName":"GatewayArn"
         }
-      },
-      "required": [
-        "GatewayArn"
-      ]
+      }
+    },
+    "DeleteGatewayRequestGatewayArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:gateway:.+"
     },
-    "DeleteGatewayResponse": {
-      "type": "structure",
-      "members": {
-        "GatewayArn": {
-          "shape": "__string",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway that was deleted."
+    "DeleteGatewayResponse":{
+      "type":"structure",
+      "members":{
+        "GatewayArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the gateway that was deleted.</p>",
+          "locationName":"gatewayArn"
         }
       }
     },
-    "DeregisterGatewayInstanceRequest": {
-      "type": "structure",
-      "members": {
-        "Force": {
-          "shape": "__boolean",
-          "location": "querystring",
-          "locationName": "force",
-          "documentation": "Force the deregistration of an instance. Force will deregister an instance, even if there are bridges running on it."
-        },
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:gateway:.+:instance:.+$",
-          "location": "uri",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway that contains the instance that you want to deregister."
+    "DeregisterGatewayInstanceRequest":{
+      "type":"structure",
+      "required":["GatewayInstanceArn"],
+      "members":{
+        "Force":{
+          "shape":"Boolean",
+          "documentation":"<p> Force the deregistration of an instance. Force will deregister an instance, even if there are bridges running on it.</p>",
+          "location":"querystring",
+          "locationName":"force"
+        },
+        "GatewayInstanceArn":{
+          "shape":"DeregisterGatewayInstanceRequestGatewayInstanceArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway that contains the instance that you want to deregister.</p>",
+          "location":"uri",
+          "locationName":"GatewayInstanceArn"
         }
-      },
-      "required": [
-        "GatewayInstanceArn"
-      ]
+      }
+    },
+    "DeregisterGatewayInstanceRequestGatewayInstanceArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:gateway:.+:instance:.+"
     },
-    "DeregisterGatewayInstanceResponse": {
-      "type": "structure",
-      "members": {
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the instance."
-        },
-        "InstanceState": {
-          "shape": "InstanceState",
-          "locationName": "instanceState",
-          "documentation": "The status of the instance."
+    "DeregisterGatewayInstanceResponse":{
+      "type":"structure",
+      "members":{
+        "GatewayInstanceArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the instance.</p>",
+          "locationName":"gatewayInstanceArn"
+        },
+        "InstanceState":{
+          "shape":"InstanceState",
+          "documentation":"<p> The status of the instance.</p>",
+          "locationName":"instanceState"
         }
       }
     },
-    "DescribeBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to describe."
+    "DescribeBridgeRequest":{
+      "type":"structure",
+      "required":["BridgeArn"],
+      "members":{
+        "BridgeArn":{
+          "shape":"DescribeBridgeRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to describe.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
         }
-      },
-      "required": [
-        "BridgeArn"
-      ]
+      }
+    },
+    "DescribeBridgeRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
     },
-    "DescribeBridgeResponse": {
-      "type": "structure",
-      "members": {
-        "Bridge": {
-          "shape": "Bridge",
-          "locationName": "bridge"
+    "DescribeBridgeResponse":{
+      "type":"structure",
+      "members":{
+        "Bridge":{
+          "shape":"Bridge",
+          "documentation":"<p>The bridge that you requested a description of. </p>",
+          "locationName":"bridge"
         }
       }
     },
-    "DescribeFlowRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you want to describe."
+    "DescribeFlowRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"DescribeFlowRequestFlowArnString",
+          "documentation":"<p> The ARN of the flow that you want to describe.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn"
-      ]
+      }
+    },
+    "DescribeFlowRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
     },
-    "DescribeFlowResponse": {
-      "type": "structure",
-      "members": {
-        "Flow": {
-          "shape": "Flow",
-          "locationName": "flow"
-        },
-        "Messages": {
-          "shape": "Messages",
-          "locationName": "messages"
+    "DescribeFlowResponse":{
+      "type":"structure",
+      "members":{
+        "Flow":{
+          "shape":"Flow",
+          "documentation":"<p>The flow that you requested a description of. </p>",
+          "locationName":"flow"
+        },
+        "Messages":{
+          "shape":"Messages",
+          "documentation":"<p> Any errors that apply currently to the flow. If there are no errors, MediaConnect will not include this field in the response. </p>",
+          "locationName":"messages"
         }
       }
     },
-    "DescribeFlowSourceMetadataRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
+    "DescribeFlowSourceMetadataRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"FlowArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn"
-      ]
+      }
     },
-    "DescribeFlowSourceMetadataResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that DescribeFlowSourceMetadata was performed on."
-        },
-        "Messages": {
-          "shape": "__listOfMessageDetail",
-          "locationName": "messages",
-          "documentation": "Provides a status code and message regarding issues found with the flow source metadata."
-        },
-        "Timestamp": {
-          "shape": "__timestampIso8601",
-          "locationName": "timestamp",
-          "documentation": "The timestamp of the most recent change in metadata for this flow’s source."
-        },
-        "TransportMediaInfo": {
-          "shape": "TransportMediaInfo",
-          "locationName": "transportMediaInfo"
+    "DescribeFlowSourceMetadataResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that DescribeFlowSourceMetadata was performed on.</p>",
+          "locationName":"flowArn"
+        },
+        "Messages":{
+          "shape":"__listOfMessageDetail",
+          "documentation":"<p> Provides a status code and message regarding issues found with the flow source metadata.</p>",
+          "locationName":"messages"
+        },
+        "Timestamp":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The timestamp of the most recent change in metadata for this flow’s source.</p>",
+          "locationName":"timestamp"
+        },
+        "TransportMediaInfo":{
+          "shape":"TransportMediaInfo",
+          "documentation":"<p> Information about the flow's transport media. </p>",
+          "locationName":"transportMediaInfo"
         }
       }
     },
-    "DescribeFlowSourceThumbnailRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
+    "DescribeFlowSourceThumbnailRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"FlowArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn"
-      ]
+      }
     },
-    "DescribeFlowSourceThumbnailResponse": {
-      "type": "structure",
-      "members": {
-        "ThumbnailDetails": {
-          "shape": "ThumbnailDetails",
-          "locationName": "thumbnailDetails"
+    "DescribeFlowSourceThumbnailResponse":{
+      "type":"structure",
+      "members":{
+        "ThumbnailDetails":{
+          "shape":"ThumbnailDetails",
+          "documentation":"<p>The details of the thumbnail, including thumbnail base64 string, timecode and the time when thumbnail was generated. </p>",
+          "locationName":"thumbnailDetails"
         }
       }
     },
-    "DescribeGatewayInstanceRequest": {
-      "type": "structure",
-      "members": {
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:gateway:.+:instance:.+$",
-          "location": "uri",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway instance that you want to describe."
+    "DescribeGatewayInstanceRequest":{
+      "type":"structure",
+      "required":["GatewayInstanceArn"],
+      "members":{
+        "GatewayInstanceArn":{
+          "shape":"DescribeGatewayInstanceRequestGatewayInstanceArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway instance that you want to describe.</p>",
+          "location":"uri",
+          "locationName":"GatewayInstanceArn"
         }
-      },
-      "required": [
-        "GatewayInstanceArn"
-      ]
+      }
     },
-    "DescribeGatewayInstanceResponse": {
-      "type": "structure",
-      "members": {
-        "GatewayInstance": {
-          "shape": "GatewayInstance",
-          "locationName": "gatewayInstance"
+    "DescribeGatewayInstanceRequestGatewayInstanceArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:gateway:.+:instance:.+"
+    },
+    "DescribeGatewayInstanceResponse":{
+      "type":"structure",
+      "members":{
+        "GatewayInstance":{
+          "shape":"GatewayInstance",
+          "documentation":"<p>The gateway instance that you requested a description of. </p>",
+          "locationName":"gatewayInstance"
         }
       }
     },
-    "DescribeGatewayRequest": {
-      "type": "structure",
-      "members": {
-        "GatewayArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:gateway:.+$",
-          "location": "uri",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway that you want to describe."
+    "DescribeGatewayRequest":{
+      "type":"structure",
+      "required":["GatewayArn"],
+      "members":{
+        "GatewayArn":{
+          "shape":"DescribeGatewayRequestGatewayArnString",
+          "documentation":"<p> The ARN of the gateway that you want to describe.</p>",
+          "location":"uri",
+          "locationName":"GatewayArn"
         }
-      },
-      "required": [
-        "GatewayArn"
-      ]
+      }
+    },
+    "DescribeGatewayRequestGatewayArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:gateway:.+"
     },
-    "DescribeGatewayResponse": {
-      "type": "structure",
-      "members": {
-        "Gateway": {
-          "shape": "Gateway",
-          "locationName": "gateway"
+    "DescribeGatewayResponse":{
+      "type":"structure",
+      "members":{
+        "Gateway":{
+          "shape":"Gateway",
+          "documentation":"<p>The gateway that you wanted to describe. </p>",
+          "locationName":"gateway"
         }
       }
     },
-    "DescribeOfferingRequest": {
-      "type": "structure",
-      "members": {
-        "OfferingArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "offeringArn",
-          "documentation": "The Amazon Resource Name (ARN) of the offering."
+    "DescribeOfferingRequest":{
+      "type":"structure",
+      "required":["OfferingArn"],
+      "members":{
+        "OfferingArn":{
+          "shape":"OfferingArn",
+          "documentation":"<p> The ARN of the offering.</p>",
+          "location":"uri",
+          "locationName":"OfferingArn"
         }
-      },
-      "required": [
-        "OfferingArn"
-      ]
+      }
     },
-    "DescribeOfferingResponse": {
-      "type": "structure",
-      "members": {
-        "Offering": {
-          "shape": "Offering",
-          "locationName": "offering"
+    "DescribeOfferingResponse":{
+      "type":"structure",
+      "members":{
+        "Offering":{
+          "shape":"Offering",
+          "documentation":"<p>The offering that you requested a description of. </p>",
+          "locationName":"offering"
         }
       }
     },
-    "DescribeReservationRequest": {
-      "type": "structure",
-      "members": {
-        "ReservationArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "reservationArn",
-          "documentation": "The Amazon Resource Name (ARN) of the reservation."
+    "DescribeReservationRequest":{
+      "type":"structure",
+      "required":["ReservationArn"],
+      "members":{
+        "ReservationArn":{
+          "shape":"ReservationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the offering. </p>",
+          "location":"uri",
+          "locationName":"ReservationArn"
         }
-      },
-      "required": [
-        "ReservationArn"
-      ]
+      }
     },
-    "DescribeReservationResponse": {
-      "type": "structure",
-      "members": {
-        "Reservation": {
-          "shape": "Reservation",
-          "locationName": "reservation"
+    "DescribeReservationResponse":{
+      "type":"structure",
+      "members":{
+        "Reservation":{
+          "shape":"Reservation",
+          "documentation":"<p> A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate. </p>",
+          "locationName":"reservation"
         }
       }
     },
-    "DesiredState": {
-      "type": "string",
-      "enum": [
+    "DesiredState":{
+      "type":"string",
+      "enum":[
         "ACTIVE",
         "STANDBY",
         "DELETED"
       ]
     },
-    "DestinationConfiguration": {
-      "type": "structure",
-      "members": {
-        "DestinationIp": {
-          "shape": "__string",
-          "locationName": "destinationIp",
-          "documentation": "The IP address where contents of the media stream will be sent."
-        },
-        "DestinationPort": {
-          "shape": "__integer",
-          "locationName": "destinationPort",
-          "documentation": "The port to use when the content of the media stream is distributed to the output."
-        },
-        "Interface": {
-          "shape": "Interface",
-          "locationName": "interface",
-          "documentation": "The VPC interface that is used for the media stream associated with the output."
-        },
-        "OutboundIp": {
-          "shape": "__string",
-          "locationName": "outboundIp",
-          "documentation": "The IP address that the receiver requires in order to establish a connection with the flow. This value is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the CDI or ST 2110 JPEG XS protocol."
-        }
-      },
-      "documentation": "The transport parameters that are associated with an outbound media stream.",
-      "required": [
+    "DestinationConfiguration":{
+      "type":"structure",
+      "required":[
         "DestinationIp",
         "DestinationPort",
         "Interface",
         "OutboundIp"
-      ]
-    },
-    "DestinationConfigurationRequest": {
-      "type": "structure",
-      "members": {
-        "DestinationIp": {
-          "shape": "__string",
-          "locationName": "destinationIp",
-          "documentation": "The IP address where you want MediaConnect to send contents of the media stream."
-        },
-        "DestinationPort": {
-          "shape": "__integer",
-          "locationName": "destinationPort",
-          "documentation": "The port that you want MediaConnect to use when it distributes the media stream to the output."
-        },
-        "Interface": {
-          "shape": "InterfaceRequest",
-          "locationName": "interface",
-          "documentation": "The VPC interface that you want to use for the media stream associated with the output."
-        }
-      },
-      "documentation": "The transport parameters that you want to associate with an outbound media stream.",
-      "required": [
+      ],
+      "members":{
+        "DestinationIp":{
+          "shape":"String",
+          "documentation":"<p>The IP address where you want MediaConnect to send contents of the media stream.</p>",
+          "locationName":"destinationIp"
+        },
+        "DestinationPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that you want MediaConnect to use when it distributes the media stream to the output.</p>",
+          "locationName":"destinationPort"
+        },
+        "Interface":{
+          "shape":"Interface",
+          "documentation":"<p> The VPC interface that you want to use for the media stream associated with the output.</p>",
+          "locationName":"interface"
+        },
+        "OutboundIp":{
+          "shape":"String",
+          "documentation":"<p>The IP address that the receiver requires in order to establish a connection with the flow. This value is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the CDI or ST 2110 JPEG XS or protocol. </p>",
+          "locationName":"outboundIp"
+        }
+      },
+      "documentation":"<p> The transport parameters that you want to associate with an outbound media stream.</p>"
+    },
+    "DestinationConfigurationRequest":{
+      "type":"structure",
+      "required":[
         "DestinationIp",
         "DestinationPort",
         "Interface"
-      ]
-    },
-    "DurationUnits": {
-      "type": "string",
-      "enum": [
-        "MONTHS"
-      ]
-    },
-    "EgressGatewayBridge": {
-      "type": "structure",
-      "members": {
-        "InstanceId": {
-          "shape": "__string",
-          "locationName": "instanceId",
-          "documentation": "The ID of the instance running this bridge."
-        },
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The maximum expected bitrate (in bps) of the egress bridge."
-        }
-      },
-      "required": [
-        "MaxBitrate"
-      ]
-    },
-    "EncoderProfile": {
-      "type": "string",
-      "enum": [
+      ],
+      "members":{
+        "DestinationIp":{
+          "shape":"String",
+          "documentation":"<p>The IP address where you want MediaConnect to send contents of the media stream.</p>",
+          "locationName":"destinationIp"
+        },
+        "DestinationPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that you want MediaConnect to use when it distributes the media stream to the output.</p>",
+          "locationName":"destinationPort"
+        },
+        "Interface":{
+          "shape":"InterfaceRequest",
+          "documentation":"<p> The VPC interface that you want to use for the media stream associated with the output.</p>",
+          "locationName":"interface"
+        }
+      },
+      "documentation":"<p>The definition of a media stream that you want to associate with the output. </p>"
+    },
+    "Double":{
+      "type":"double",
+      "box":true
+    },
+    "DurationUnits":{
+      "type":"string",
+      "enum":["MONTHS"]
+    },
+    "EgressGatewayBridge":{
+      "type":"structure",
+      "required":["MaxBitrate"],
+      "members":{
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p> The ID of the instance running this bridge.</p>",
+          "locationName":"instanceId"
+        },
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum expected bitrate (in bps) of the egress bridge.</p>",
+          "locationName":"maxBitrate"
+        }
+      },
+      "documentation":"<p> Create a bridge with the egress bridge type. An egress bridge is a cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. </p>"
+    },
+    "EncoderProfile":{
+      "type":"string",
+      "enum":[
         "main",
         "high"
       ]
     },
-    "EncodingName": {
-      "type": "string",
-      "enum": [
+    "EncodingName":{
+      "type":"string",
+      "enum":[
         "jxsv",
         "raw",
         "smpte291",
         "pcm"
       ]
     },
-    "EncodingParameters": {
-      "type": "structure",
-      "members": {
-        "CompressionFactor": {
-          "shape": "__double",
-          "locationName": "compressionFactor",
-          "documentation": "A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive."
-        },
-        "EncoderProfile": {
-          "shape": "EncoderProfile",
-          "locationName": "encoderProfile",
-          "documentation": "A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol."
-        }
-      },
-      "documentation": "A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source.",
-      "required": [
-        "EncoderProfile",
-        "CompressionFactor"
-      ]
-    },
-    "EncodingParametersRequest": {
-      "type": "structure",
-      "members": {
-        "CompressionFactor": {
-          "shape": "__double",
-          "locationName": "compressionFactor",
-          "documentation": "A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive."
-        },
-        "EncoderProfile": {
-          "shape": "EncoderProfile",
-          "locationName": "encoderProfile",
-          "documentation": "A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, if at least one source on the flow uses the CDI protocol."
-        }
-      },
-      "documentation": "A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source.",
-      "required": [
-        "EncoderProfile",
-        "CompressionFactor"
-      ]
-    },
-    "Encryption": {
-      "type": "structure",
-      "members": {
-        "Algorithm": {
-          "shape": "Algorithm",
-          "locationName": "algorithm",
-          "documentation": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)."
-        },
-        "ConstantInitializationVector": {
-          "shape": "__string",
-          "locationName": "constantInitializationVector",
-          "documentation": "A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption."
-        },
-        "DeviceId": {
-          "shape": "__string",
-          "locationName": "deviceId",
-          "documentation": "The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "KeyType": {
-          "shape": "KeyType",
-          "locationName": "keyType",
-          "documentation": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key)."
-        },
-        "Region": {
-          "shape": "__string",
-          "locationName": "region",
-          "documentation": "The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "ResourceId": {
-          "shape": "__string",
-          "locationName": "resourceId",
-          "documentation": "An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "RoleArn": {
-          "shape": "__string",
-          "locationName": "roleArn",
-          "documentation": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)."
-        },
-        "SecretArn": {
-          "shape": "__string",
-          "locationName": "secretArn",
-          "documentation": "The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption."
-        },
-        "Url": {
-          "shape": "__string",
-          "locationName": "url",
-          "documentation": "The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        }
-      },
-      "documentation": "Information about the encryption of the flow.",
-      "required": [
-        "RoleArn"
-      ]
-    },
-    "Entitlement": {
-      "type": "structure",
-      "members": {
-        "DataTransferSubscriberFeePercent": {
-          "shape": "__integer",
-          "locationName": "dataTransferSubscriberFeePercent",
-          "documentation": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the entitlement."
-        },
-        "Encryption": {
-          "shape": "Encryption",
-          "locationName": "encryption",
-          "documentation": "The type of encryption that will be used on the output that is associated with this entitlement."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement."
-        },
-        "EntitlementStatus": {
-          "shape": "EntitlementStatus",
-          "locationName": "entitlementStatus",
-          "documentation": "An indication of whether the entitlement is enabled."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the entitlement."
-        },
-        "Subscribers": {
-          "shape": "__listOf__string",
-          "locationName": "subscribers",
-          "documentation": "The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source."
-        }
-      },
-      "documentation": "The settings for a flow entitlement.",
-      "required": [
+    "EncodingParameters":{
+      "type":"structure",
+      "required":[
+        "CompressionFactor",
+        "EncoderProfile"
+      ],
+      "members":{
+        "CompressionFactor":{
+          "shape":"Double",
+          "documentation":"<p> A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive.</p>",
+          "locationName":"compressionFactor"
+        },
+        "EncoderProfile":{
+          "shape":"EncoderProfile",
+          "documentation":"<p> A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol.</p>",
+          "locationName":"encoderProfile"
+        }
+      },
+      "documentation":"<p> A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source.</p>"
+    },
+    "EncodingParametersRequest":{
+      "type":"structure",
+      "required":[
+        "CompressionFactor",
+        "EncoderProfile"
+      ],
+      "members":{
+        "CompressionFactor":{
+          "shape":"Double",
+          "documentation":"<p> A value that is used to calculate compression for an output. The bitrate of the output is calculated as follows: Output bitrate = (1 / compressionFactor) * (source bitrate) This property only applies to outputs that use the ST 2110 JPEG XS protocol, with a flow source that uses the CDI protocol. Valid values are floating point numbers in the range of 3.0 to 10.0, inclusive.</p>",
+          "locationName":"compressionFactor"
+        },
+        "EncoderProfile":{
+          "shape":"EncoderProfile",
+          "documentation":"<p> A setting on the encoder that drives compression settings. This property only applies to video media streams associated with outputs that use the ST 2110 JPEG XS protocol, if at least one source on the flow uses the CDI protocol.</p>",
+          "locationName":"encoderProfile"
+        }
+      },
+      "documentation":"<p> A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source.</p>"
+    },
+    "Encryption":{
+      "type":"structure",
+      "required":["RoleArn"],
+      "members":{
+        "Algorithm":{
+          "shape":"Algorithm",
+          "documentation":"<p> The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256).</p>",
+          "locationName":"algorithm"
+        },
+        "ConstantInitializationVector":{
+          "shape":"String",
+          "documentation":"<p> A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption.</p>",
+          "locationName":"constantInitializationVector"
+        },
+        "DeviceId":{
+          "shape":"String",
+          "documentation":"<p> The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"deviceId"
+        },
+        "KeyType":{
+          "shape":"KeyType",
+          "documentation":"<p> The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).</p>",
+          "locationName":"keyType"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Web Services Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"region"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p> An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"resourceId"
+        },
+        "RoleArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the role that you created during setup (when you set up MediaConnect as a trusted entity).</p>",
+          "locationName":"roleArn"
+        },
+        "SecretArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the secret that you created in Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption.</p>",
+          "locationName":"secretArn"
+        },
+        "Url":{
+          "shape":"String",
+          "documentation":"<p> The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"url"
+        }
+      },
+      "documentation":"<p> Information about the encryption of the flow.</p>"
+    },
+    "Entitlement":{
+      "type":"structure",
+      "required":[
         "EntitlementArn",
-        "Subscribers",
-        "Name"
-      ]
-    },
-    "EntitlementStatus": {
-      "type": "string",
-      "enum": [
+        "Name",
+        "Subscribers"
+      ],
+      "members":{
+        "DataTransferSubscriberFeePercent":{
+          "shape":"Integer",
+          "documentation":"<p> Percentage from 0-100 of the data transfer cost to be billed to the subscriber.</p>",
+          "locationName":"dataTransferSubscriberFeePercent"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the entitlement.</p>",
+          "locationName":"description"
+        },
+        "Encryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of encryption that will be used on the output that is associated with this entitlement.</p>",
+          "locationName":"encryption"
+        },
+        "EntitlementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the entitlement. </p>",
+          "locationName":"entitlementArn"
+        },
+        "EntitlementStatus":{
+          "shape":"EntitlementStatus",
+          "documentation":"<p> An indication of whether the entitlement is enabled. </p>",
+          "locationName":"entitlementStatus"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the entitlement. </p>",
+          "locationName":"name"
+        },
+        "Subscribers":{
+          "shape":"__listOfString",
+          "documentation":"<p> The Amazon Web Services account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source. </p>",
+          "locationName":"subscribers"
+        }
+      },
+      "documentation":"<p> The settings for a flow entitlement.</p>"
+    },
+    "EntitlementStatus":{
+      "type":"string",
+      "enum":[
         "ENABLED",
         "DISABLED"
       ]
     },
-    "FailoverConfig": {
-      "type": "structure",
-      "members": {
-        "FailoverMode": {
-          "shape": "FailoverMode",
-          "locationName": "failoverMode",
-          "documentation": "The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams."
-        },
-        "RecoveryWindow": {
-          "shape": "__integer",
-          "locationName": "recoveryWindow",
-          "documentation": "Search window time to look for dash-7 packets"
-        },
-        "SourcePriority": {
-          "shape": "SourcePriority",
-          "locationName": "sourcePriority",
-          "documentation": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams."
-        },
-        "State": {
-          "shape": "State",
-          "locationName": "state"
-        }
-      },
-      "documentation": "The settings for source failover."
-    },
-    "FailoverMode": {
-      "type": "string",
-      "enum": [
+    "FailoverConfig":{
+      "type":"structure",
+      "members":{
+        "FailoverMode":{
+          "shape":"FailoverMode",
+          "documentation":"<p> The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams.</p>",
+          "locationName":"failoverMode"
+        },
+        "RecoveryWindow":{
+          "shape":"Integer",
+          "documentation":"<p> Search window time to look for dash-7 packets.</p>",
+          "locationName":"recoveryWindow"
+        },
+        "SourcePriority":{
+          "shape":"SourcePriority",
+          "documentation":"<p> The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams.</p>",
+          "locationName":"sourcePriority"
+        },
+        "State":{
+          "shape":"State",
+          "documentation":"<p>The state of source failover on the flow. If the state is inactive, the flow can have only one source. If the state is active, the flow can have one or two sources. </p>",
+          "locationName":"state"
+        }
+      },
+      "documentation":"<p> The settings for source failover.</p>"
+    },
+    "FailoverMode":{
+      "type":"string",
+      "enum":[
         "MERGE",
         "FAILOVER"
       ]
     },
-    "Flow": {
-      "type": "structure",
-      "members": {
-        "AvailabilityZone": {
-          "shape": "__string",
-          "locationName": "availabilityZone",
-          "documentation": "The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current AWS."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the flow. This value is not used or seen outside of the current AWS Elemental MediaConnect account."
-        },
-        "EgressIp": {
-          "shape": "__string",
-          "locationName": "egressIp",
-          "documentation": "The IP address from which video will be sent to output destinations."
-        },
-        "Entitlements": {
-          "shape": "__listOfEntitlement",
-          "locationName": "entitlements",
-          "documentation": "The entitlements in this flow."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
-        },
-        "MediaStreams": {
-          "shape": "__listOfMediaStream",
-          "locationName": "mediaStreams",
-          "documentation": "The media streams that are associated with the flow. After you associate a media stream with a source, you can also associate it with outputs on the flow."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the flow."
-        },
-        "Outputs": {
-          "shape": "__listOfOutput",
-          "locationName": "outputs",
-          "documentation": "The outputs in this flow."
-        },
-        "Source": {
-          "shape": "Source",
-          "locationName": "source"
-        },
-        "SourceFailoverConfig": {
-          "shape": "FailoverConfig",
-          "locationName": "sourceFailoverConfig"
-        },
-        "Sources": {
-          "shape": "__listOfSource",
-          "locationName": "sources"
-        },
-        "Status": {
-          "shape": "Status",
-          "locationName": "status",
-          "documentation": "The current status of the flow."
-        },
-        "VpcInterfaces": {
-          "shape": "__listOfVpcInterface",
-          "locationName": "vpcInterfaces",
-          "documentation": "The VPC Interfaces for this flow."
-        },
-        "Maintenance": {
-          "shape": "Maintenance",
-          "locationName": "maintenance"
-        },
-        "SourceMonitoringConfig": {
-          "shape": "MonitoringConfig",
-          "locationName": "sourceMonitoringConfig"
-        }
-      },
-      "documentation": "The settings for a flow, including its source, outputs, and entitlements.",
-      "required": [
-        "Status",
+    "Flow":{
+      "type":"structure",
+      "required":[
         "AvailabilityZone",
-        "Source",
-        "Name",
         "Entitlements",
+        "FlowArn",
+        "Name",
         "Outputs",
-        "FlowArn"
-      ]
-    },
-    "Fmtp": {
-      "type": "structure",
-      "members": {
-        "ChannelOrder": {
-          "shape": "__string",
-          "locationName": "channelOrder",
-          "documentation": "The format of the audio channel."
-        },
-        "Colorimetry": {
-          "shape": "Colorimetry",
-          "locationName": "colorimetry",
-          "documentation": "The format that is used for the representation of color."
-        },
-        "ExactFramerate": {
-          "shape": "__string",
-          "locationName": "exactFramerate",
-          "documentation": "The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate."
-        },
-        "Par": {
-          "shape": "__string",
-          "locationName": "par",
-          "documentation": "The pixel aspect ratio (PAR) of the video."
-        },
-        "Range": {
-          "shape": "Range",
-          "locationName": "range",
-          "documentation": "The encoding range of the video."
-        },
-        "ScanMode": {
-          "shape": "ScanMode",
-          "locationName": "scanMode",
-          "documentation": "The type of compression that was used to smooth the video’s appearance"
-        },
-        "Tcs": {
-          "shape": "Tcs",
-          "locationName": "tcs",
-          "documentation": "The transfer characteristic system (TCS) that is used in the video."
-        }
-      },
-      "documentation": "FMTP"
-    },
-    "FmtpRequest": {
-      "type": "structure",
-      "members": {
-        "ChannelOrder": {
-          "shape": "__string",
-          "locationName": "channelOrder",
-          "documentation": "The format of the audio channel."
-        },
-        "Colorimetry": {
-          "shape": "Colorimetry",
-          "locationName": "colorimetry",
-          "documentation": "The format that is used for the representation of color."
-        },
-        "ExactFramerate": {
-          "shape": "__string",
-          "locationName": "exactFramerate",
-          "documentation": "The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the exactFramerate."
-        },
-        "Par": {
-          "shape": "__string",
-          "locationName": "par",
-          "documentation": "The pixel aspect ratio (PAR) of the video."
-        },
-        "Range": {
-          "shape": "Range",
-          "locationName": "range",
-          "documentation": "The encoding range of the video."
-        },
-        "ScanMode": {
-          "shape": "ScanMode",
-          "locationName": "scanMode",
-          "documentation": "The type of compression that was used to smooth the video’s appearance."
-        },
-        "Tcs": {
-          "shape": "Tcs",
-          "locationName": "tcs",
-          "documentation": "The transfer characteristic system (TCS) that is used in the video."
-        }
-      },
-      "documentation": "The settings that you want to use to define the media stream."
-    },
-    "ForbiddenException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
+        "Source",
+        "Status"
       ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 403
-      }
-    },
-    "FrameResolution": {
-      "type": "structure",
-      "members": {
-        "FrameHeight": {
-          "shape": "__integer",
-          "locationName": "frameHeight",
-          "documentation": "The number of pixels in the height of the video frame."
-        },
-        "FrameWidth": {
-          "shape": "__integer",
-          "locationName": "frameWidth",
-          "documentation": "The number of pixels in the width of the video frame."
-        }
-      },
-      "documentation": "The frame resolution used by the video stream.",
-      "required": [
-        "FrameWidth",
-        "FrameHeight"
-      ]
-    },
-    "FrozenFrames": {
-      "type": "structure",
-      "members": {
-        "State": {
-          "shape": "State",
-          "locationName": "state",
-          "documentation": "Indicates whether the FrozenFrames metric is enabled or disabled."
-        },
-        "ThresholdSeconds": {
-          "shape": "__integer",
-          "locationName": "thresholdSeconds",
-          "documentation": "Specifies the number of consecutive seconds of a static image that triggers an event or alert."
-        }
-      },
-      "documentation": "Configures settings for the FrozenFrames metric."
-    },
-    "Gateway": {
-      "type": "structure",
-      "members": {
-        "EgressCidrBlocks": {
-          "shape": "__listOf__string",
-          "locationName": "egressCidrBlocks",
-          "documentation": "The range of IP addresses that contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "GatewayArn": {
-          "shape": "__string",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway."
-        },
-        "GatewayMessages": {
-          "shape": "__listOfMessageDetail",
-          "locationName": "gatewayMessages"
-        },
-        "GatewayState": {
-          "shape": "GatewayState",
-          "locationName": "gatewayState",
-          "documentation": "The current status of the gateway."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the gateway. This name can not be modified after the gateway is created."
-        },
-        "Networks": {
-          "shape": "__listOfGatewayNetwork",
-          "locationName": "networks",
-          "documentation": "The list of networks in the gateway."
-        }
-      },
-      "documentation": "The settings for a gateway, including its networks.",
-      "required": [
-        "GatewayArn",
-        "Networks",
+      "members":{
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p> The Availability Zone that you want to create the flow in. These options are limited to the Availability Zones within the current Amazon Web Services Region.</p>",
+          "locationName":"availabilityZone"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the flow. This value is not used or seen outside of the current MediaConnect account.</p>",
+          "locationName":"description"
+        },
+        "EgressIp":{
+          "shape":"String",
+          "documentation":"<p> The IP address from which video will be sent to output destinations.</p>",
+          "locationName":"egressIp"
+        },
+        "Entitlements":{
+          "shape":"__listOfEntitlement",
+          "documentation":"<p> The entitlements in this flow.</p>",
+          "locationName":"entitlements"
+        },
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow.</p>",
+          "locationName":"flowArn"
+        },
+        "MediaStreams":{
+          "shape":"__listOfMediaStream",
+          "documentation":"<p> The media streams that are associated with the flow. After you associate a media stream with a source, you can also associate it with outputs on the flow.</p>",
+          "locationName":"mediaStreams"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the flow.</p>",
+          "locationName":"name"
+        },
+        "Outputs":{
+          "shape":"__listOfOutput",
+          "documentation":"<p> The outputs in this flow.</p>",
+          "locationName":"outputs"
+        },
+        "Source":{
+          "shape":"Source",
+          "documentation":"<p> The source for the flow. </p>",
+          "locationName":"source"
+        },
+        "SourceFailoverConfig":{
+          "shape":"FailoverConfig",
+          "documentation":"<p> The settings for the source failover. </p>",
+          "locationName":"sourceFailoverConfig"
+        },
+        "Sources":{
+          "shape":"__listOfSource",
+          "documentation":"<p>The settings for the sources that are assigned to the flow. </p>",
+          "locationName":"sources"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p> The current status of the flow.</p>",
+          "locationName":"status"
+        },
+        "VpcInterfaces":{
+          "shape":"__listOfVpcInterface",
+          "documentation":"<p> The VPC Interfaces for this flow.</p>",
+          "locationName":"vpcInterfaces"
+        },
+        "Maintenance":{
+          "shape":"Maintenance",
+          "documentation":"<p> The maintenance settings for the flow. </p>",
+          "locationName":"maintenance"
+        },
+        "SourceMonitoringConfig":{
+          "shape":"MonitoringConfig",
+          "documentation":"<p> The settings for source monitoring. </p>",
+          "locationName":"sourceMonitoringConfig"
+        },
+        "FlowSize":{
+          "shape":"FlowSize",
+          "documentation":"<p> Determines the processing capacity and feature set of the flow. Set this optional parameter to LARGE if you want to enable NDI outputs on the flow. </p>",
+          "locationName":"flowSize"
+        },
+        "NdiConfig":{
+          "shape":"NdiConfig",
+          "documentation":"<p>Specifies the configuration settings for NDI outputs. Required when the flow includes NDI outputs. </p>",
+          "locationName":"ndiConfig"
+        }
+      },
+      "documentation":"<p> The settings for a flow, including its source, outputs, and entitlements.</p>"
+    },
+    "FlowArn":{"type":"string"},
+    "FlowSize":{
+      "type":"string",
+      "enum":[
+        "MEDIUM",
+        "LARGE"
+      ]
+    },
+    "Fmtp":{
+      "type":"structure",
+      "members":{
+        "ChannelOrder":{
+          "shape":"String",
+          "documentation":"<p> The format of the audio channel. </p>",
+          "locationName":"channelOrder"
+        },
+        "Colorimetry":{
+          "shape":"Colorimetry",
+          "documentation":"<p>The format used for the representation of color. </p>",
+          "locationName":"colorimetry"
+        },
+        "ExactFramerate":{
+          "shape":"String",
+          "documentation":"<p>The frame rate for the video stream, in frames/second. For example: 60000/1001. </p>",
+          "locationName":"exactFramerate"
+        },
+        "Par":{
+          "shape":"String",
+          "documentation":"<p>The pixel aspect ratio (PAR) of the video. </p>",
+          "locationName":"par"
+        },
+        "Range":{
+          "shape":"Range",
+          "documentation":"<p>The encoding range of the video. </p>",
+          "locationName":"range"
+        },
+        "ScanMode":{
+          "shape":"ScanMode",
+          "documentation":"<p>The type of compression that was used to smooth the video’s appearance. </p>",
+          "locationName":"scanMode"
+        },
+        "Tcs":{
+          "shape":"Tcs",
+          "documentation":"<p>The transfer characteristic system (TCS) that is used in the video. </p>",
+          "locationName":"tcs"
+        }
+      },
+      "documentation":"<p> A set of parameters that define the media stream. </p>"
+    },
+    "FmtpRequest":{
+      "type":"structure",
+      "members":{
+        "ChannelOrder":{
+          "shape":"String",
+          "documentation":"<p> The format of the audio channel.</p>",
+          "locationName":"channelOrder"
+        },
+        "Colorimetry":{
+          "shape":"Colorimetry",
+          "documentation":"<p> The format that is used for the representation of color.</p>",
+          "locationName":"colorimetry"
+        },
+        "ExactFramerate":{
+          "shape":"String",
+          "documentation":"<p> The frame rate for the video stream, in frames/second. For example: 60000/1001. If you specify a whole number, MediaConnect uses a ratio of N/1. For example, if you specify 60, MediaConnect uses 60/1 as the <code>exactFramerate</code>.</p>",
+          "locationName":"exactFramerate"
+        },
+        "Par":{
+          "shape":"String",
+          "documentation":"<p> The pixel aspect ratio (PAR) of the video.</p>",
+          "locationName":"par"
+        },
+        "Range":{
+          "shape":"Range",
+          "documentation":"<p> The encoding range of the video.</p>",
+          "locationName":"range"
+        },
+        "ScanMode":{
+          "shape":"ScanMode",
+          "documentation":"<p> The type of compression that was used to smooth the video’s appearance.</p>",
+          "locationName":"scanMode"
+        },
+        "Tcs":{
+          "shape":"Tcs",
+          "documentation":"<p> The transfer characteristic system (TCS) that is used in the video.</p>",
+          "locationName":"tcs"
+        }
+      },
+      "documentation":"<p> The settings that you want to use to define the media stream.</p>"
+    },
+    "ForbiddenException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>You do not have sufficient access to perform this action. </p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "FrameResolution":{
+      "type":"structure",
+      "required":[
+        "FrameHeight",
+        "FrameWidth"
+      ],
+      "members":{
+        "FrameHeight":{
+          "shape":"Integer",
+          "documentation":"<p> The number of pixels in the height of the video frame.</p>",
+          "locationName":"frameHeight"
+        },
+        "FrameWidth":{
+          "shape":"Integer",
+          "documentation":"<p> The number of pixels in the width of the video frame.</p>",
+          "locationName":"frameWidth"
+        }
+      },
+      "documentation":"<p> The frame resolution used by the video stream.</p>"
+    },
+    "FrozenFrames":{
+      "type":"structure",
+      "members":{
+        "State":{
+          "shape":"State",
+          "documentation":"<p>Indicates whether the <code>FrozenFrames</code> metric is enabled or disabled.</p>",
+          "locationName":"state"
+        },
+        "ThresholdSeconds":{
+          "shape":"Integer",
+          "documentation":"<p> Specifies the number of consecutive seconds of a static image that triggers an event or alert.</p>",
+          "locationName":"thresholdSeconds"
+        }
+      },
+      "documentation":"<p> Configures settings for the <code>FrozenFrames</code> metric.</p>"
+    },
+    "Gateway":{
+      "type":"structure",
+      "required":[
         "EgressCidrBlocks",
-        "Name"
-      ]
-    },
-    "GatewayBridgeSource": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge feeding this flow."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this bridge source."
-        }
-      },
-      "documentation": "The source configuration for cloud flows receiving a stream from a bridge.",
-      "required": [
-        "BridgeArn"
-      ]
-    },
-    "GatewayInstance": {
-      "type": "structure",
-      "members": {
-        "BridgePlacement": {
-          "shape": "BridgePlacement",
-          "locationName": "bridgePlacement",
-          "documentation": "The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance."
-        },
-        "ConnectionStatus": {
-          "shape": "ConnectionStatus",
-          "locationName": "connectionStatus",
-          "documentation": "The connection state of the instance."
-        },
-        "GatewayArn": {
-          "shape": "__string",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the instance."
-        },
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway."
-        },
-        "InstanceId": {
-          "shape": "__string",
-          "locationName": "instanceId",
-          "documentation": "The managed instance ID generated by the SSM install. This will begin with \"mi-\"."
-        },
-        "InstanceMessages": {
-          "shape": "__listOfMessageDetail",
-          "locationName": "instanceMessages"
-        },
-        "InstanceState": {
-          "shape": "InstanceState",
-          "locationName": "instanceState",
-          "documentation": "The status of the instance."
-        },
-        "RunningBridgeCount": {
-          "shape": "__integer",
-          "locationName": "runningBridgeCount",
-          "documentation": "The running bridge count."
-        }
-      },
-      "documentation": "The settings for an instance in a gateway.",
-      "required": [
         "GatewayArn",
-        "InstanceState",
+        "Name",
+        "Networks"
+      ],
+      "members":{
+        "EgressCidrBlocks":{
+          "shape":"__listOfString",
+          "documentation":"<p> The range of IP addresses that contribute content or initiate output requests for flows communicating with this gateway. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"egressCidrBlocks"
+        },
+        "GatewayArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway.</p>",
+          "locationName":"gatewayArn"
+        },
+        "GatewayMessages":{
+          "shape":"__listOfMessageDetail",
+          "documentation":"<p>Messages with information about the gateway. </p>",
+          "locationName":"gatewayMessages"
+        },
+        "GatewayState":{
+          "shape":"GatewayState",
+          "documentation":"<p> The current status of the gateway.</p>",
+          "locationName":"gatewayState"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the gateway. This name can not be modified after the gateway is created.</p>",
+          "locationName":"name"
+        },
+        "Networks":{
+          "shape":"__listOfGatewayNetwork",
+          "documentation":"<p> The list of networks in the gateway.</p>",
+          "locationName":"networks"
+        }
+      },
+      "documentation":"<p>The settings for a gateway, including its networks. </p>"
+    },
+    "GatewayBridgeSource":{
+      "type":"structure",
+      "required":["BridgeArn"],
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge feeding this flow.</p>",
+          "locationName":"bridgeArn"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this bridge source.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        }
+      },
+      "documentation":"<p> The source configuration for cloud flows receiving a stream from a bridge.</p>"
+    },
+    "GatewayInstance":{
+      "type":"structure",
+      "required":[
+        "BridgePlacement",
+        "ConnectionStatus",
+        "GatewayArn",
         "GatewayInstanceArn",
         "InstanceId",
-        "RunningBridgeCount",
-        "BridgePlacement",
-        "ConnectionStatus"
-      ]
-    },
-    "GatewayNetwork": {
-      "type": "structure",
-      "members": {
-        "CidrBlock": {
-          "shape": "__string",
-          "locationName": "cidrBlock",
-          "documentation": "A unique IP address range to use for this network. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the network. This name is used to reference the network and must be unique among networks in this gateway."
-        }
-      },
-      "documentation": "The network settings for a gateway.",
-      "required": [
+        "InstanceState",
+        "RunningBridgeCount"
+      ],
+      "members":{
+        "BridgePlacement":{
+          "shape":"BridgePlacement",
+          "documentation":"<p>The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be deployed to this instance. </p>",
+          "locationName":"bridgePlacement"
+        },
+        "ConnectionStatus":{
+          "shape":"ConnectionStatus",
+          "documentation":"<p>The connection state of the instance. </p>",
+          "locationName":"connectionStatus"
+        },
+        "GatewayArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the instance. </p>",
+          "locationName":"gatewayArn"
+        },
+        "GatewayInstanceArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the gateway. </p>",
+          "locationName":"gatewayInstanceArn"
+        },
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The instance ID generated by the SSM install. This will begin with \"mi-\". </p>",
+          "locationName":"instanceId"
+        },
+        "InstanceMessages":{
+          "shape":"__listOfMessageDetail",
+          "documentation":"<p> Messages with information about the gateway. </p>",
+          "locationName":"instanceMessages"
+        },
+        "InstanceState":{
+          "shape":"InstanceState",
+          "documentation":"<p>The status of the instance. </p>",
+          "locationName":"instanceState"
+        },
+        "RunningBridgeCount":{
+          "shape":"Integer",
+          "documentation":"<p> The running bridge count. </p>",
+          "locationName":"runningBridgeCount"
+        }
+      },
+      "documentation":"<p> The settings for an instance in a gateway.</p>"
+    },
+    "GatewayNetwork":{
+      "type":"structure",
+      "required":[
         "CidrBlock",
         "Name"
-      ]
-    },
-    "GatewayState": {
-      "type": "string",
-      "enum": [
+      ],
+      "members":{
+        "CidrBlock":{
+          "shape":"String",
+          "documentation":"<p>A unique IP address range to use for this network. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. </p>",
+          "locationName":"cidrBlock"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the network. This name is used to reference the network and must be unique among networks in this gateway. </p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p>The network settings for a gateway. </p>"
+    },
+    "GatewayState":{
+      "type":"string",
+      "enum":[
         "CREATING",
         "ACTIVE",
         "UPDATING",
@@ -4277,173 +3217,177 @@
         "DELETED"
       ]
     },
-    "GrantEntitlementRequest": {
-      "type": "structure",
-      "members": {
-        "DataTransferSubscriberFeePercent": {
-          "shape": "__integer",
-          "locationName": "dataTransferSubscriberFeePercent",
-          "documentation": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the entitlement. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the subscriber or end user."
-        },
-        "Encryption": {
-          "shape": "Encryption",
-          "locationName": "encryption",
-          "documentation": "The type of encryption that will be used on the output that is associated with this entitlement. Allowable encryption types: static-key, speke."
-        },
-        "EntitlementStatus": {
-          "shape": "EntitlementStatus",
-          "locationName": "entitlementStatus",
-          "documentation": "An indication of whether the new entitlement should be enabled or disabled as soon as it is created. If you don’t specify the entitlementStatus field in your request, MediaConnect sets it to ENABLED."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the entitlement. This value must be unique within the current flow."
-        },
-        "Subscribers": {
-          "shape": "__listOf__string",
-          "locationName": "subscribers",
-          "documentation": "The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flows using your content as the source."
-        }
-      },
-      "documentation": "The entitlements that you want to grant on a flow.",
-      "required": [
-        "Subscribers"
-      ]
-    },
-    "GrantFlowEntitlements420Exception": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
+    "GrantEntitlementRequest":{
+      "type":"structure",
+      "required":["Subscribers"],
+      "members":{
+        "DataTransferSubscriberFeePercent":{
+          "shape":"Integer",
+          "documentation":"<p> Percentage from 0-100 of the data transfer cost to be billed to the subscriber.</p>",
+          "locationName":"dataTransferSubscriberFeePercent"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the entitlement. This description appears only on the MediaConnect console and will not be seen by the subscriber or end user. </p>",
+          "locationName":"description"
+        },
+        "Encryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of encryption that will be used on the output that is associated with this entitlement. Allowable encryption types: static-key, speke.</p>",
+          "locationName":"encryption"
+        },
+        "EntitlementStatus":{
+          "shape":"EntitlementStatus",
+          "documentation":"<p> An indication of whether the new entitlement should be enabled or disabled as soon as it is created. If you don’t specify the entitlementStatus field in your request, MediaConnect sets it to ENABLED.</p>",
+          "locationName":"entitlementStatus"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the entitlement. This value must be unique within the current flow.</p>",
+          "locationName":"name"
+        },
+        "Subscribers":{
+          "shape":"__listOfString",
+          "documentation":"<p> The Amazon Web Services account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flows using your content as the source.</p>",
+          "locationName":"subscribers"
+        },
+        "EntitlementTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the entitlement. </p>",
+          "locationName":"entitlementTags"
+        }
+      },
+      "documentation":"<p> The entitlements that you want to grant on a flow.</p>"
+    },
+    "GrantFlowEntitlements420Exception":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>Exception raised by Elemental MediaConnect when granting the entitlement. See the error message for the operation for more information on the cause of this exception. </p>",
+      "error":{
+        "httpStatusCode":420,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "GrantFlowEntitlementsRequest":{
+      "type":"structure",
+      "required":[
+        "Entitlements",
+        "FlowArn"
       ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 420
-      }
-    },
-    "GrantFlowEntitlementsRequest": {
-      "type": "structure",
-      "members": {
-        "Entitlements": {
-          "shape": "__listOfGrantEntitlementRequest",
-          "locationName": "entitlements",
-          "documentation": "The list of entitlements that you want to grant."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to grant entitlements on."
+      "members":{
+        "Entitlements":{
+          "shape":"__listOfGrantEntitlementRequest",
+          "documentation":"<p> The list of entitlements that you want to grant.</p>",
+          "locationName":"entitlements"
+        },
+        "FlowArn":{
+          "shape":"GrantFlowEntitlementsRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to grant entitlements on.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "documentation": "A request to grant entitlements on a flow.",
-      "required": [
-        "FlowArn",
-        "Entitlements"
-      ]
+      }
     },
-    "GrantFlowEntitlementsResponse": {
-      "type": "structure",
-      "members": {
-        "Entitlements": {
-          "shape": "__listOfEntitlement",
-          "locationName": "entitlements",
-          "documentation": "The entitlements that were just granted."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that these entitlements were granted to."
+    "GrantFlowEntitlementsRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "GrantFlowEntitlementsResponse":{
+      "type":"structure",
+      "members":{
+        "Entitlements":{
+          "shape":"__listOfEntitlement",
+          "documentation":"<p> The entitlements that were just granted.</p>",
+          "locationName":"entitlements"
+        },
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that these entitlements were granted to.</p>",
+          "locationName":"flowArn"
         }
       }
     },
-    "IngressGatewayBridge": {
-      "type": "structure",
-      "members": {
-        "InstanceId": {
-          "shape": "__string",
-          "locationName": "instanceId",
-          "documentation": "The ID of the instance running this bridge."
-        },
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The maximum expected bitrate (in bps) of the ingress bridge."
-        },
-        "MaxOutputs": {
-          "shape": "__integer",
-          "locationName": "maxOutputs",
-          "documentation": "The maximum number of outputs on the ingress bridge."
-        }
-      },
-      "required": [
-        "MaxOutputs",
-        "MaxBitrate"
-      ]
-    },
-    "InputConfiguration": {
-      "type": "structure",
-      "members": {
-        "InputIp": {
-          "shape": "__string",
-          "locationName": "inputIp",
-          "documentation": "The IP address that the flow listens on for incoming content for a media stream."
-        },
-        "InputPort": {
-          "shape": "__integer",
-          "locationName": "inputPort",
-          "documentation": "The port that the flow listens on for an incoming media stream."
-        },
-        "Interface": {
-          "shape": "Interface",
-          "locationName": "interface",
-          "documentation": "The VPC interface where the media stream comes in from."
-        }
-      },
-      "documentation": "The transport parameters that are associated with an incoming media stream.",
-      "required": [
-        "InputPort",
+    "IngressGatewayBridge":{
+      "type":"structure",
+      "required":[
+        "MaxBitrate",
+        "MaxOutputs"
+      ],
+      "members":{
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the instance running this bridge. </p>",
+          "locationName":"instanceId"
+        },
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum expected bitrate (in bps) of the ingress bridge. </p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxOutputs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of outputs on the ingress bridge. </p>",
+          "locationName":"maxOutputs"
+        }
+      },
+      "documentation":"<p>Create a bridge with the ingress bridge type. An ingress bridge is a ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. </p>"
+    },
+    "InputConfiguration":{
+      "type":"structure",
+      "required":[
         "InputIp",
+        "InputPort",
         "Interface"
-      ]
-    },
-    "InputConfigurationRequest": {
-      "type": "structure",
-      "members": {
-        "InputPort": {
-          "shape": "__integer",
-          "locationName": "inputPort",
-          "documentation": "The port that you want the flow to listen on for an incoming media stream."
-        },
-        "Interface": {
-          "shape": "InterfaceRequest",
-          "locationName": "interface",
-          "documentation": "The VPC interface that you want to use for the incoming media stream."
-        }
-      },
-      "documentation": "The transport parameters that you want to associate with an incoming media stream.",
-      "required": [
+      ],
+      "members":{
+        "InputIp":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the flow listens on for incoming content for a media stream.</p>",
+          "locationName":"inputIp"
+        },
+        "InputPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow listens on for an incoming media stream.</p>",
+          "locationName":"inputPort"
+        },
+        "Interface":{
+          "shape":"Interface",
+          "documentation":"<p> The VPC interface where the media stream comes in from.</p>",
+          "locationName":"interface"
+        }
+      },
+      "documentation":"<p> The transport parameters that are associated with an incoming media stream.</p>"
+    },
+    "InputConfigurationRequest":{
+      "type":"structure",
+      "required":[
         "InputPort",
         "Interface"
-      ]
-    },
-    "InstanceState": {
-      "type": "string",
-      "enum": [
+      ],
+      "members":{
+        "InputPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that you want the flow to listen on for an incoming media stream.</p>",
+          "locationName":"inputPort"
+        },
+        "Interface":{
+          "shape":"InterfaceRequest",
+          "documentation":"<p> The VPC interface that you want to use for the incoming media stream.</p>",
+          "locationName":"interface"
+        }
+      },
+      "documentation":"<p> The transport parameters that you want to associate with an incoming media stream.</p>"
+    },
+    "InstanceState":{
+      "type":"string",
+      "enum":[
         "REGISTERING",
         "ACTIVE",
         "DEREGISTERING",
@@ -4452,515 +3396,513 @@
         "DEREGISTRATION_ERROR"
       ]
     },
-    "Interface": {
-      "type": "structure",
-      "members": {
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the VPC interface."
-        }
-      },
-      "documentation": "The VPC interface that is used for the media stream associated with the source or output.",
-      "required": [
-        "Name"
-      ]
-    },
-    "InterfaceRequest": {
-      "type": "structure",
-      "members": {
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the VPC interface."
-        }
-      },
-      "documentation": "The VPC interface that you want to designate where the media stream is coming from or going to.",
-      "required": [
-        "Name"
-      ]
-    },
-    "InternalServerErrorException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 500
-      }
-    },
-    "KeyType": {
-      "type": "string",
-      "enum": [
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "Interface":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface.</p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p> The VPC interface that is used for the media stream associated with the source or output.</p>"
+    },
+    "InterfaceRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface.</p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p> The VPC interface that you want to designate where the media stream is coming from or going to.</p>"
+    },
+    "InternalServerErrorException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>The server encountered an internal error and is unable to complete the request. </p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "KeyType":{
+      "type":"string",
+      "enum":[
         "speke",
         "static-key",
         "srt-password"
       ]
     },
-    "ListBridgesRequest": {
-      "type": "structure",
-      "members": {
-        "FilterArn": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "filterArn",
-          "documentation": "Filter the list results to display only the bridges associated with the selected Amazon Resource Name (ARN)."
-        },
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListBridges request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListBridges request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListBridges request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListBridgesResponse": {
-      "type": "structure",
-      "members": {
-        "Bridges": {
-          "shape": "__listOfListedBridge",
-          "locationName": "bridges",
-          "documentation": "A list of bridge summaries."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListBridges request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListBridges request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListEntitlementsRequest": {
-      "type": "structure",
-      "members": {
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListEntitlements request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 20 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListEntitlementsResponse": {
-      "type": "structure",
-      "members": {
-        "Entitlements": {
-          "shape": "__listOfListedEntitlement",
-          "locationName": "entitlements",
-          "documentation": "A list of entitlements that have been granted to you from other AWS accounts."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListEntitlements request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListEntitlements request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListFlowsRequest": {
-      "type": "structure",
-      "members": {
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListFlows request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListFlowsResponse": {
-      "type": "structure",
-      "members": {
-        "Flows": {
-          "shape": "__listOfListedFlow",
-          "locationName": "flows",
-          "documentation": "A list of flow summaries."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListFlows request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListFlows request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListGatewayInstancesRequest": {
-      "type": "structure",
-      "members": {
-        "FilterArn": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "filterArn",
-          "documentation": "Filter the list results to display only the instances associated with the selected Gateway Amazon Resource Name (ARN)."
-        },
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListInstances request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListInstances request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListInstances request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListGatewayInstancesResponse": {
-      "type": "structure",
-      "members": {
-        "Instances": {
-          "shape": "__listOfListedGatewayInstance",
-          "locationName": "instances",
-          "documentation": "A list of instance summaries."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListInstances request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListInstances request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListGatewaysRequest": {
-      "type": "structure",
-      "members": {
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListGateways request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListGateways request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListGateways request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListGatewaysResponse": {
-      "type": "structure",
-      "members": {
-        "Gateways": {
-          "shape": "__listOfListedGateway",
-          "locationName": "gateways",
-          "documentation": "A list of gateway summaries."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListGateways request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListGateways request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListOfferingsRequest": {
-      "type": "structure",
-      "members": {
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListOfferings request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListOfferingsResponse": {
-      "type": "structure",
-      "members": {
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListOfferings request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value."
-        },
-        "Offerings": {
-          "shape": "__listOfOffering",
-          "locationName": "offerings",
-          "documentation": "A list of offerings that are available to this account in the current AWS Region."
-        }
-      }
-    },
-    "ListReservationsRequest": {
-      "type": "structure",
-      "members": {
-        "MaxResults": {
-          "shape": "MaxResults",
-          "location": "querystring",
-          "locationName": "maxResults",
-          "documentation": "The maximum number of results to return per API request. For example, you submit a ListReservations request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) The service might return fewer results than the MaxResults value. If MaxResults is not included in the request, the service defaults to pagination with a maximum of 10 results per page."
-        },
-        "NextToken": {
-          "shape": "__string",
-          "location": "querystring",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListOfferings request a second time and specify the NextToken value."
-        }
-      }
-    },
-    "ListReservationsResponse": {
-      "type": "structure",
-      "members": {
-        "NextToken": {
-          "shape": "__string",
-          "locationName": "nextToken",
-          "documentation": "The token that identifies which batch of results that you want to see. For example, you submit a ListReservations request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the ListReservations request a second time and specify the NextToken value."
-        },
-        "Reservations": {
-          "shape": "__listOfReservation",
-          "locationName": "reservations",
-          "documentation": "A list of all reservations that have been purchased by this account in the current AWS Region."
-        }
-      }
-    },
-    "ListTagsForResourceRequest": {
-      "type": "structure",
-      "members": {
-        "ResourceArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "resourceArn",
-          "documentation": "The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource for which to list the tags."
-        }
-      },
-      "required": [
-        "ResourceArn"
-      ]
-    },
-    "ListTagsForResourceResponse": {
-      "type": "structure",
-      "members": {
-        "Tags": {
-          "shape": "__mapOf__string",
-          "locationName": "tags",
-          "documentation": "A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters."
-        }
-      }
-    },
-    "ListedBridge": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge."
-        },
-        "BridgeState": {
-          "shape": "BridgeState",
-          "locationName": "bridgeState"
-        },
-        "BridgeType": {
-          "shape": "__string",
-          "locationName": "bridgeType",
-          "documentation": "The type of the bridge."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the bridge."
-        },
-        "PlacementArn": {
-          "shape": "__string",
-          "locationName": "placementArn",
-          "documentation": "The ARN of the gateway associated with the bridge."
-        }
-      },
-      "documentation": "Displays details of the selected bridge.",
-      "required": [
+    "ListBridgesRequest":{
+      "type":"structure",
+      "members":{
+        "FilterArn":{
+          "shape":"String",
+          "documentation":"<p> Filter the list results to display only the bridges associated with the selected ARN.</p>",
+          "location":"querystring",
+          "locationName":"filterArn"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListBridges</code> request with <code>MaxResults</code> set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a <code>NextToken</code> value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListBridges</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListBridges</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListBridgesResponse":{
+      "type":"structure",
+      "members":{
+        "Bridges":{
+          "shape":"__listOfListedBridge",
+          "documentation":"<p> A list of bridge summaries.</p>",
+          "locationName":"bridges"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListBridges</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListBridges</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListEntitlementsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListEntitlements</code> request with set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 20 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListEntitlements</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListEntitlements</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListEntitlementsResponse":{
+      "type":"structure",
+      "members":{
+        "Entitlements":{
+          "shape":"__listOfListedEntitlement",
+          "documentation":"<p>A list of entitlements that have been granted to you from other Amazon Web Services accounts. </p>",
+          "locationName":"entitlements"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a ListEntitlements request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a NextToken value. To see the next batch of results, you can submit the <code>ListEntitlements</code> request a second time and specify the <code>NextToken</code> value. </p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListFlowsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListFlows</code> request with MaxResults set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a <code>NextToken</code> value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListFlows</code> request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListFlows</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListFlowsResponse":{
+      "type":"structure",
+      "members":{
+        "Flows":{
+          "shape":"__listOfListedFlow",
+          "documentation":"<p> A list of flow summaries.</p>",
+          "locationName":"flows"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListFlows</code> request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListFlows</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewayInstancesRequest":{
+      "type":"structure",
+      "members":{
+        "FilterArn":{
+          "shape":"String",
+          "documentation":"<p> Filter the list results to display only the instances associated with the selected Gateway ARN.</p>",
+          "location":"querystring",
+          "locationName":"filterArn"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a ListInstances request with <code>MaxResults</code> set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a <code>NextToken</code> value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListInstances</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListInstances</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewayInstancesResponse":{
+      "type":"structure",
+      "members":{
+        "Instances":{
+          "shape":"__listOfListedGatewayInstance",
+          "documentation":"<p> A list of instance summaries.</p>",
+          "locationName":"instances"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListInstances</code> request with MaxResults set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListInstances</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewaysRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListGateways</code> request with <code>MaxResults</code> set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a <code>NextToken</code> value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListGateways</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListGateways</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListGatewaysResponse":{
+      "type":"structure",
+      "members":{
+        "Gateways":{
+          "shape":"__listOfListedGateway",
+          "documentation":"<p> A list of gateway summaries.</p>",
+          "locationName":"gateways"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListGateways</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListGateways</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListOfferingsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListOfferings</code> request with <code>MaxResults</code> set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a <code>NextToken</code> value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListOfferings</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListOfferings</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListOfferingsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListOfferings</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListOfferings</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        },
+        "Offerings":{
+          "shape":"__listOfOffering",
+          "documentation":"<p> A list of offerings that are available to this account in the current Amazon Web Services Region.</p>",
+          "locationName":"offerings"
+        }
+      }
+    },
+    "ListReservationsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p> The maximum number of results to return per API request. </p> <p>For example, you submit a <code>ListReservations</code> request with <code>MaxResults</code> set at 5. Although 20 items match your request, the service returns no more than the first 5 items. (The service also returns a NextToken value that you can use to fetch the next batch of results.) </p> <p>The service might return fewer results than the <code>MaxResults</code> value. If <code>MaxResults</code> is not included in the request, the service defaults to pagination with a maximum of 10 results per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListReservations</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListOfferings</code> request a second time and specify the <code>NextToken</code> value. </p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListReservationsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token that identifies the batch of results that you want to see. </p> <p>For example, you submit a <code>ListReservations</code> request with <code>MaxResults</code> set at 5. The service returns the first batch of results (up to 5) and a <code>NextToken</code> value. To see the next batch of results, you can submit the <code>ListReservations</code> request a second time and specify the <code>NextToken</code> value.</p>",
+          "locationName":"nextToken"
+        },
+        "Reservations":{
+          "shape":"__listOfReservation",
+          "documentation":"<p> A list of all reservations that have been purchased by this account in the current Amazon Web Services Region. </p>",
+          "locationName":"reservations"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) that identifies the MediaConnect resource for which to list the tags.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "Tags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.</p>",
+          "locationName":"tags"
+        }
+      }
+    },
+    "ListedBridge":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "BridgeState",
-        "PlacementArn",
         "BridgeType",
-        "Name"
-      ]
-    },
-    "ListedEntitlement": {
-      "type": "structure",
-      "members": {
-        "DataTransferSubscriberFeePercent": {
-          "shape": "__integer",
-          "locationName": "dataTransferSubscriberFeePercent",
-          "documentation": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement."
-        },
-        "EntitlementName": {
-          "shape": "__string",
-          "locationName": "entitlementName",
-          "documentation": "The name of the entitlement."
-        }
-      },
-      "documentation": "An entitlement that has been granted to you from other AWS accounts.",
-      "required": [
+        "Name",
+        "PlacementArn"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge.</p>",
+          "locationName":"bridgeArn"
+        },
+        "BridgeState":{
+          "shape":"BridgeState",
+          "documentation":"<p>The state of the bridge. </p>",
+          "locationName":"bridgeState"
+        },
+        "BridgeType":{
+          "shape":"String",
+          "documentation":"<p> The type of the bridge.</p>",
+          "locationName":"bridgeType"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge.</p>",
+          "locationName":"name"
+        },
+        "PlacementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the gateway associated with the bridge.</p>",
+          "locationName":"placementArn"
+        }
+      },
+      "documentation":"<p> Displays details of the selected bridge.</p>"
+    },
+    "ListedEntitlement":{
+      "type":"structure",
+      "required":[
         "EntitlementArn",
         "EntitlementName"
-      ]
-    },
-    "ListedFlow": {
-      "type": "structure",
-      "members": {
-        "AvailabilityZone": {
-          "shape": "__string",
-          "locationName": "availabilityZone",
-          "documentation": "The Availability Zone that the flow was created in."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the flow."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the flow."
-        },
-        "SourceType": {
-          "shape": "SourceType",
-          "locationName": "sourceType",
-          "documentation": "The type of source. This value is either owned (originated somewhere other than an AWS Elemental MediaConnect flow owned by another AWS account) or entitled (originated at an AWS Elemental MediaConnect flow owned by another AWS account)."
-        },
-        "Status": {
-          "shape": "Status",
-          "locationName": "status",
-          "documentation": "The current status of the flow."
-        },
-        "Maintenance": {
-          "shape": "Maintenance",
-          "locationName": "maintenance"
-        }
-      },
-      "documentation": "Provides a summary of a flow, including its ARN, Availability Zone, and source type.",
-      "required": [
-        "Status",
-        "Description",
-        "SourceType",
+      ],
+      "members":{
+        "DataTransferSubscriberFeePercent":{
+          "shape":"Integer",
+          "documentation":"<p> Percentage from 0-100 of the data transfer cost to be billed to the subscriber.</p>",
+          "locationName":"dataTransferSubscriberFeePercent"
+        },
+        "EntitlementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the entitlement.</p>",
+          "locationName":"entitlementArn"
+        },
+        "EntitlementName":{
+          "shape":"String",
+          "documentation":"<p> The name of the entitlement.</p>",
+          "locationName":"entitlementName"
+        }
+      },
+      "documentation":"<p> An entitlement that has been granted to you from other Amazon Web Services accounts.</p>"
+    },
+    "ListedFlow":{
+      "type":"structure",
+      "required":[
         "AvailabilityZone",
+        "Description",
         "FlowArn",
-        "Name"
-      ]
-    },
-    "ListedGateway": {
-      "type": "structure",
-      "members": {
-        "GatewayArn": {
-          "shape": "__string",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway."
-        },
-        "GatewayState": {
-          "shape": "GatewayState",
-          "locationName": "gatewayState"
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the gateway."
-        }
-      },
-      "documentation": "Provides a summary of a gateway, including its name, ARN, and status.",
-      "required": [
+        "Name",
+        "SourceType",
+        "Status"
+      ],
+      "members":{
+        "AvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p> The Availability Zone that the flow was created in.</p>",
+          "locationName":"availabilityZone"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the flow.</p>",
+          "locationName":"description"
+        },
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow.</p>",
+          "locationName":"flowArn"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the flow.</p>",
+          "locationName":"name"
+        },
+        "SourceType":{
+          "shape":"SourceType",
+          "documentation":"<p> The type of source. This value is either owned (originated somewhere other than an MediaConnect flow owned by another Amazon Web Services account) or entitled (originated at a MediaConnect flow owned by another Amazon Web Services account).</p>",
+          "locationName":"sourceType"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p> The current status of the flow.</p>",
+          "locationName":"status"
+        },
+        "Maintenance":{
+          "shape":"Maintenance",
+          "documentation":"<p> The maintenance settings for the flow. </p>",
+          "locationName":"maintenance"
+        }
+      },
+      "documentation":"<p> A summary of a flow, including its ARN, Availability Zone, and source type.</p>"
+    },
+    "ListedGateway":{
+      "type":"structure",
+      "required":[
         "GatewayArn",
         "GatewayState",
         "Name"
-      ]
-    },
-    "ListedGatewayInstance": {
-      "type": "structure",
-      "members": {
-        "GatewayArn": {
-          "shape": "__string",
-          "locationName": "gatewayArn",
-          "documentation": "The Amazon Resource Name (ARN) of the gateway."
-        },
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the instance."
-        },
-        "InstanceId": {
-          "shape": "__string",
-          "locationName": "instanceId",
-          "documentation": "The managed instance ID generated by the SSM install. This will begin with \"mi-\"."
-        },
-        "InstanceState": {
-          "shape": "InstanceState",
-          "locationName": "instanceState",
-          "documentation": "The status of the instance."
-        }
-      },
-      "documentation": "Provides a summary of an instance.",
-      "required": [
+      ],
+      "members":{
+        "GatewayArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway.</p>",
+          "locationName":"gatewayArn"
+        },
+        "GatewayState":{
+          "shape":"GatewayState",
+          "documentation":"<p> The status of the gateway.</p>",
+          "locationName":"gatewayState"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the gateway.</p>",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p> A summary of a gateway, including its name, ARN, and status.</p>"
+    },
+    "ListedGatewayInstance":{
+      "type":"structure",
+      "required":[
         "GatewayArn",
         "GatewayInstanceArn",
         "InstanceId"
-      ]
-    },
-    "Maintenance": {
-      "type": "structure",
-      "members": {
-        "MaintenanceDay": {
-          "shape": "MaintenanceDay",
-          "locationName": "maintenanceDay",
-          "documentation": "A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday."
-        },
-        "MaintenanceDeadline": {
-          "shape": "__string",
-          "locationName": "maintenanceDeadline",
-          "documentation": "The Maintenance has to be performed before this deadline in ISO UTC format. Example: 2021-01-30T08:30:00Z."
-        },
-        "MaintenanceScheduledDate": {
-          "shape": "__string",
-          "locationName": "maintenanceScheduledDate",
-          "documentation": "A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30."
-        },
-        "MaintenanceStartHour": {
-          "shape": "__string",
-          "locationName": "maintenanceStartHour",
-          "documentation": "UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00."
-        }
-      },
-      "documentation": "The maintenance setting of a flow"
-    },
-    "MaintenanceDay": {
-      "type": "string",
-      "enum": [
+      ],
+      "members":{
+        "GatewayArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the gateway.</p>",
+          "locationName":"gatewayArn"
+        },
+        "GatewayInstanceArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the instance.</p>",
+          "locationName":"gatewayInstanceArn"
+        },
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p> The managed instance ID generated by the SSM install. This will begin with \"mi-\".</p>",
+          "locationName":"instanceId"
+        },
+        "InstanceState":{
+          "shape":"InstanceState",
+          "documentation":"<p> The status of the instance.</p>",
+          "locationName":"instanceState"
+        }
+      },
+      "documentation":"<p> A summary of an instance. </p>"
+    },
+    "Maintenance":{
+      "type":"structure",
+      "members":{
+        "MaintenanceDay":{
+          "shape":"MaintenanceDay",
+          "documentation":"<p> A day of a week when the maintenance will happen. Use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday.</p>",
+          "locationName":"maintenanceDay"
+        },
+        "MaintenanceDeadline":{
+          "shape":"String",
+          "documentation":"<p> The Maintenance has to be performed before this deadline in ISO UTC format. Example: 2021-01-30T08:30:00Z.</p>",
+          "locationName":"maintenanceDeadline"
+        },
+        "MaintenanceScheduledDate":{
+          "shape":"String",
+          "documentation":"<p> A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30.</p>",
+          "locationName":"maintenanceScheduledDate"
+        },
+        "MaintenanceStartHour":{
+          "shape":"String",
+          "documentation":"<p> UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00.</p>",
+          "locationName":"maintenanceStartHour"
+        }
+      },
+      "documentation":"<p> The maintenance setting of a flow.</p>"
+    },
+    "MaintenanceDay":{
+      "type":"string",
+      "enum":[
         "Monday",
         "Tuesday",
         "Wednesday",
@@ -4970,478 +3912,531 @@
         "Sunday"
       ]
     },
-    "MaxResults": {
-      "type": "integer",
-      "min": 1,
-      "max": 1000
-    },
-    "MediaStream": {
-      "type": "structure",
-      "members": {
-        "Attributes": {
-          "shape": "MediaStreamAttributes",
-          "locationName": "attributes",
-          "documentation": "Attributes that are related to the media stream."
-        },
-        "ClockRate": {
-          "shape": "__integer",
-          "locationName": "clockRate",
-          "documentation": "The sample rate for the stream. This value is measured in Hz."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description that can help you quickly identify what your media stream is used for."
-        },
-        "Fmt": {
-          "shape": "__integer",
-          "locationName": "fmt",
-          "documentation": "The format type number (sometimes referred to as RTP payload type) of the media stream. MediaConnect assigns this value to the media stream. For ST 2110 JPEG XS outputs, you need to provide this value to the receiver."
-        },
-        "MediaStreamId": {
-          "shape": "__integer",
-          "locationName": "mediaStreamId",
-          "documentation": "A unique identifier for the media stream."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "A name that helps you distinguish one media stream from another."
-        },
-        "MediaStreamType": {
-          "shape": "MediaStreamType",
-          "locationName": "mediaStreamType",
-          "documentation": "The type of media stream."
-        },
-        "VideoFormat": {
-          "shape": "__string",
-          "locationName": "videoFormat",
-          "documentation": "The resolution of the video."
-        }
-      },
-      "documentation": "A single track or stream of media that contains video, audio, or ancillary data. After you add a media stream to a flow, you can associate it with sources and outputs on that flow, as long as they use the CDI protocol or the ST 2110 JPEG XS protocol. Each source or output can consist of one or many media streams.",
-      "required": [
-        "MediaStreamType",
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "MediaStream":{
+      "type":"structure",
+      "required":[
+        "Fmt",
         "MediaStreamId",
         "MediaStreamName",
-        "Fmt"
-      ]
-    },
-    "MediaStreamAttributes": {
-      "type": "structure",
-      "members": {
-        "Fmtp": {
-          "shape": "Fmtp",
-          "locationName": "fmtp",
-          "documentation": "A set of parameters that define the media stream."
-        },
-        "Lang": {
-          "shape": "__string",
-          "locationName": "lang",
-          "documentation": "The audio language, in a format that is recognized by the receiver."
-        }
-      },
-      "documentation": "Attributes that are related to the media stream.",
-      "required": [
-        "Fmtp"
-      ]
-    },
-    "MediaStreamAttributesRequest": {
-      "type": "structure",
-      "members": {
-        "Fmtp": {
-          "shape": "FmtpRequest",
-          "locationName": "fmtp",
-          "documentation": "The settings that you want to use to define the media stream."
-        },
-        "Lang": {
-          "shape": "__string",
-          "locationName": "lang",
-          "documentation": "The audio language, in a format that is recognized by the receiver."
-        }
-      },
-      "documentation": "Attributes that are related to the media stream."
-    },
-    "MediaStreamOutputConfiguration": {
-      "type": "structure",
-      "members": {
-        "DestinationConfigurations": {
-          "shape": "__listOfDestinationConfiguration",
-          "locationName": "destinationConfigurations",
-          "documentation": "The transport parameters that are associated with each outbound media stream."
-        },
-        "EncodingName": {
-          "shape": "EncodingName",
-          "locationName": "encodingName",
-          "documentation": "The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv."
-        },
-        "EncodingParameters": {
-          "shape": "EncodingParameters",
-          "locationName": "encodingParameters",
-          "documentation": "Encoding parameters"
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream."
-        }
-      },
-      "documentation": "The media stream that is associated with the output, and the parameters for that association.",
-      "required": [
-        "MediaStreamName",
-        "EncodingName"
-      ]
-    },
-    "MediaStreamOutputConfigurationRequest": {
-      "type": "structure",
-      "members": {
-        "DestinationConfigurations": {
-          "shape": "__listOfDestinationConfigurationRequest",
-          "locationName": "destinationConfigurations",
-          "documentation": "The transport parameters that you want to associate with the media stream."
-        },
-        "EncodingName": {
-          "shape": "EncodingName",
-          "locationName": "encodingName",
-          "documentation": "The format that will be used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv."
-        },
-        "EncodingParameters": {
-          "shape": "EncodingParametersRequest",
-          "locationName": "encodingParameters",
-          "documentation": "A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream that is associated with the output."
-        }
-      },
-      "documentation": "The media stream that you want to associate with the output, and the parameters for that association.",
-      "required": [
-        "MediaStreamName",
-        "EncodingName"
-      ]
-    },
-    "MediaStreamSourceConfiguration": {
-      "type": "structure",
-      "members": {
-        "EncodingName": {
-          "shape": "EncodingName",
-          "locationName": "encodingName",
-          "documentation": "The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv."
-        },
-        "InputConfigurations": {
-          "shape": "__listOfInputConfiguration",
-          "locationName": "inputConfigurations",
-          "documentation": "The transport parameters that are associated with an incoming media stream."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream."
-        }
-      },
-      "documentation": "The media stream that is associated with the source, and the parameters for that association.",
-      "required": [
-        "MediaStreamName",
-        "EncodingName"
-      ]
-    },
-    "MediaStreamSourceConfigurationRequest": {
-      "type": "structure",
-      "members": {
-        "EncodingName": {
-          "shape": "EncodingName",
-          "locationName": "encodingName",
-          "documentation": "The format you want to use to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv."
-        },
-        "InputConfigurations": {
-          "shape": "__listOfInputConfigurationRequest",
-          "locationName": "inputConfigurations",
-          "documentation": "The transport parameters that you want to associate with the media stream."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream."
-        }
-      },
-      "documentation": "The definition of a media stream that you want to associate with the source.",
-      "required": [
-        "MediaStreamName",
-        "EncodingName"
-      ]
-    },
-    "MediaStreamType": {
-      "type": "string",
-      "enum": [
+        "MediaStreamType"
+      ],
+      "members":{
+        "Attributes":{
+          "shape":"MediaStreamAttributes",
+          "documentation":"<p> Attributes that are related to the media stream.</p>",
+          "locationName":"attributes"
+        },
+        "ClockRate":{
+          "shape":"Integer",
+          "documentation":"<p> The sample rate for the stream. This value is measured in Hz.</p>",
+          "locationName":"clockRate"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description that can help you quickly identify what your media stream is used for.</p>",
+          "locationName":"description"
+        },
+        "Fmt":{
+          "shape":"Integer",
+          "documentation":"<p> The format type number (sometimes referred to as RTP payload type) of the media stream. MediaConnect assigns this value to the media stream. For ST 2110 JPEG XS outputs, you need to provide this value to the receiver.</p>",
+          "locationName":"fmt"
+        },
+        "MediaStreamId":{
+          "shape":"Integer",
+          "documentation":"<p> A unique identifier for the media stream. </p>",
+          "locationName":"mediaStreamId"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> A name that helps you distinguish one media stream from another. </p>",
+          "locationName":"mediaStreamName"
+        },
+        "MediaStreamType":{
+          "shape":"MediaStreamType",
+          "documentation":"<p> The type of media stream. </p>",
+          "locationName":"mediaStreamType"
+        },
+        "VideoFormat":{
+          "shape":"String",
+          "documentation":"<p> The resolution of the video. </p>",
+          "locationName":"videoFormat"
+        }
+      },
+      "documentation":"<p> A media stream represents one component of your content, such as video, audio, or ancillary data. After you add a media stream to your flow, you can associate it with sources and outputs that use the ST 2110 JPEG XS or CDI protocol. </p>"
+    },
+    "MediaStreamAttributes":{
+      "type":"structure",
+      "required":["Fmtp"],
+      "members":{
+        "Fmtp":{
+          "shape":"Fmtp",
+          "documentation":"<p>The settings that you want to use to define the media stream. </p>",
+          "locationName":"fmtp"
+        },
+        "Lang":{
+          "shape":"String",
+          "documentation":"<p>The audio language, in a format that is recognized by the receiver. </p>",
+          "locationName":"lang"
+        }
+      },
+      "documentation":"<p>Attributes that are related to the media stream. </p>"
+    },
+    "MediaStreamAttributesRequest":{
+      "type":"structure",
+      "members":{
+        "Fmtp":{
+          "shape":"FmtpRequest",
+          "documentation":"<p>The settings that you want to use to define the media stream. </p>",
+          "locationName":"fmtp"
+        },
+        "Lang":{
+          "shape":"String",
+          "documentation":"<p>The audio language, in a format that is recognized by the receiver. </p>",
+          "locationName":"lang"
+        }
+      },
+      "documentation":"<p>Attributes that are related to the media stream. </p>"
+    },
+    "MediaStreamOutputConfiguration":{
+      "type":"structure",
+      "required":[
+        "EncodingName",
+        "MediaStreamName"
+      ],
+      "members":{
+        "DestinationConfigurations":{
+          "shape":"__listOfDestinationConfiguration",
+          "documentation":"<p> The transport parameters that are associated with each outbound media stream.</p>",
+          "locationName":"destinationConfigurations"
+        },
+        "EncodingName":{
+          "shape":"EncodingName",
+          "documentation":"<p> The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv.</p>",
+          "locationName":"encodingName"
+        },
+        "EncodingParameters":{
+          "shape":"EncodingParameters",
+          "documentation":"<p>A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. </p>",
+          "locationName":"encodingParameters"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> The name of the media stream.</p>",
+          "locationName":"mediaStreamName"
+        }
+      },
+      "documentation":"<p> The media stream that is associated with the output, and the parameters for that association.</p>"
+    },
+    "MediaStreamOutputConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "EncodingName",
+        "MediaStreamName"
+      ],
+      "members":{
+        "DestinationConfigurations":{
+          "shape":"__listOfDestinationConfigurationRequest",
+          "documentation":"<p> The media streams that you want to associate with the output. </p>",
+          "locationName":"destinationConfigurations"
+        },
+        "EncodingName":{
+          "shape":"EncodingName",
+          "documentation":"<p> The format that will be used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv.</p>",
+          "locationName":"encodingName"
+        },
+        "EncodingParameters":{
+          "shape":"EncodingParametersRequest",
+          "documentation":"<p> A collection of parameters that determine how MediaConnect will convert the content. These fields only apply to outputs on flows that have a CDI source. </p>",
+          "locationName":"encodingParameters"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> The name of the media stream that is associated with the output.</p>",
+          "locationName":"mediaStreamName"
+        }
+      },
+      "documentation":"<p> The media stream that you want to associate with the output, and the parameters for that association.</p>"
+    },
+    "MediaStreamSourceConfiguration":{
+      "type":"structure",
+      "required":[
+        "EncodingName",
+        "MediaStreamName"
+      ],
+      "members":{
+        "EncodingName":{
+          "shape":"EncodingName",
+          "documentation":"<p> The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. </p>",
+          "locationName":"encodingName"
+        },
+        "InputConfigurations":{
+          "shape":"__listOfInputConfiguration",
+          "documentation":"<p>The media streams that you want to associate with the source. </p>",
+          "locationName":"inputConfigurations"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p>A name that helps you distinguish one media stream from another. </p>",
+          "locationName":"mediaStreamName"
+        }
+      },
+      "documentation":"<p>The media stream that is associated with the source, and the parameters for that association. </p>"
+    },
+    "MediaStreamSourceConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "EncodingName",
+        "MediaStreamName"
+      ],
+      "members":{
+        "EncodingName":{
+          "shape":"EncodingName",
+          "documentation":"<p>The format that was used to encode the data. For ancillary data streams, set the encoding name to smpte291. For audio streams, set the encoding name to pcm. For video, 2110 streams, set the encoding name to raw. For video, JPEG XS streams, set the encoding name to jxsv. </p>",
+          "locationName":"encodingName"
+        },
+        "InputConfigurations":{
+          "shape":"__listOfInputConfigurationRequest",
+          "documentation":"<p>The media streams that you want to associate with the source. </p>",
+          "locationName":"inputConfigurations"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p>The name of the media stream. </p>",
+          "locationName":"mediaStreamName"
+        }
+      },
+      "documentation":"<p>The media stream that you want to associate with the source, and the parameters for that association. </p>"
+    },
+    "MediaStreamType":{
+      "type":"string",
+      "enum":[
         "video",
         "audio",
         "ancillary-data"
       ]
     },
-    "MessageDetail": {
-      "type": "structure",
-      "members": {
-        "Code": {
-          "shape": "__string",
-          "locationName": "code",
-          "documentation": "The error code."
-        },
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The specific error message that MediaConnect returns to help you understand the reason that the request did not succeed."
-        },
-        "ResourceName": {
-          "shape": "__string",
-          "locationName": "resourceName",
-          "documentation": "The name of the resource."
-        }
-      },
-      "required": [
-        "Message",
-        "Code"
-      ]
-    },
-    "Messages": {
-      "type": "structure",
-      "members": {
-        "Errors": {
-          "shape": "__listOf__string",
-          "locationName": "errors",
-          "documentation": "A list of errors that might have been generated from processes on this flow."
-        }
-      },
-      "documentation": "Messages that provide the state of the flow.",
-      "required": [
-        "Errors"
+    "MessageDetail":{
+      "type":"structure",
+      "required":[
+        "Code",
+        "Message"
+      ],
+      "members":{
+        "Code":{
+          "shape":"String",
+          "documentation":"<p> The error code.</p>",
+          "locationName":"code"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p> The specific error message that MediaConnect returns to help you understand the reason that the request did not succeed.</p>",
+          "locationName":"message"
+        },
+        "ResourceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the resource.</p>",
+          "locationName":"resourceName"
+        }
+      },
+      "documentation":"<p>The details of an error message. </p>"
+    },
+    "Messages":{
+      "type":"structure",
+      "required":["Errors"],
+      "members":{
+        "Errors":{
+          "shape":"__listOfString",
+          "documentation":"<p> A list of errors that might have been generated from processes on this flow.</p>",
+          "locationName":"errors"
+        }
+      },
+      "documentation":"<p> Messages that provide the state of the flow.</p>"
+    },
+    "MonitoringConfig":{
+      "type":"structure",
+      "members":{
+        "ThumbnailState":{
+          "shape":"ThumbnailState",
+          "documentation":"<p> Indicates whether thumbnails are enabled or disabled.</p>",
+          "locationName":"thumbnailState"
+        },
+        "AudioMonitoringSettings":{
+          "shape":"__listOfAudioMonitoringSetting",
+          "documentation":"<p> Contains the settings for audio stream metrics monitoring.</p>",
+          "locationName":"audioMonitoringSettings"
+        },
+        "ContentQualityAnalysisState":{
+          "shape":"ContentQualityAnalysisState",
+          "documentation":"<p> Indicates whether content quality analysis is enabled or disabled.</p>",
+          "locationName":"contentQualityAnalysisState"
+        },
+        "VideoMonitoringSettings":{
+          "shape":"__listOfVideoMonitoringSetting",
+          "documentation":"<p> Contains the settings for video stream metrics monitoring.</p>",
+          "locationName":"videoMonitoringSettings"
+        }
+      },
+      "documentation":"<p> The settings for source monitoring. </p>"
+    },
+    "MulticastSourceSettings":{
+      "type":"structure",
+      "members":{
+        "MulticastSourceIp":{
+          "shape":"String",
+          "documentation":"<p> The IP address of the source for source-specific multicast (SSM).</p>",
+          "locationName":"multicastSourceIp"
+        }
+      },
+      "documentation":"<p> The settings related to the multicast source. </p>"
+    },
+    "NdiConfig":{
+      "type":"structure",
+      "members":{
+        "NdiState":{
+          "shape":"NdiState",
+          "documentation":"<p>A setting that controls whether NDI outputs can be used in the flow. Must be ENABLED to add NDI outputs. Default is DISABLED. </p>",
+          "locationName":"ndiState"
+        },
+        "MachineName":{
+          "shape":"String",
+          "documentation":"<p>A prefix for the names of the NDI sources that the flow creates. If a custom name isn't specified, MediaConnect generates a unique 12-character ID as the prefix. </p>",
+          "locationName":"machineName"
+        },
+        "NdiDiscoveryServers":{
+          "shape":"__listOfNdiDiscoveryServerConfig",
+          "documentation":"<p>A list of up to three NDI discovery server configurations. While not required by the API, this configuration is necessary for NDI functionality to work properly. </p>",
+          "locationName":"ndiDiscoveryServers"
+        }
+      },
+      "documentation":"<p>Specifies the configuration settings for NDI outputs. Required when the flow includes NDI outputs. </p>"
+    },
+    "NdiDiscoveryServerConfig":{
+      "type":"structure",
+      "required":[
+        "DiscoveryServerAddress",
+        "VpcInterfaceAdapter"
+      ],
+      "members":{
+        "DiscoveryServerAddress":{
+          "shape":"String",
+          "documentation":"<p>The unique network address of the NDI discovery server. </p>",
+          "locationName":"discoveryServerAddress"
+        },
+        "DiscoveryServerPort":{
+          "shape":"Integer",
+          "documentation":"<p>The port for the NDI discovery server. Defaults to 5959 if a custom port isn't specified. </p>",
+          "locationName":"discoveryServerPort"
+        },
+        "VpcInterfaceAdapter":{
+          "shape":"String",
+          "documentation":"<p>The identifier for the Virtual Private Cloud (VPC) network interface used by the flow. </p>",
+          "locationName":"vpcInterfaceAdapter"
+        }
+      },
+      "documentation":"<p>Specifies the configuration settings for individual NDI discovery servers. A maximum of 3 servers is allowed. </p>"
+    },
+    "NdiState":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
       ]
     },
-    "MonitoringConfig": {
-      "type": "structure",
-      "members": {
-        "ThumbnailState": {
-          "shape": "ThumbnailState",
-          "locationName": "thumbnailState",
-          "documentation": "The state of thumbnail monitoring."
-        },
-        "AudioMonitoringSettings": {
-          "shape": "__listOfAudioMonitoringSetting",
-          "locationName": "audioMonitoringSettings",
-          "documentation": "Contains the settings for audio stream metrics monitoring."
-        },
-        "ContentQualityAnalysisState": {
-          "shape": "ContentQualityAnalysisState",
-          "locationName": "contentQualityAnalysisState",
-          "documentation": "Indicates whether content quality analysis is enabled or disabled."
-        },
-        "VideoMonitoringSettings": {
-          "shape": "__listOfVideoMonitoringSetting",
-          "locationName": "videoMonitoringSettings",
-          "documentation": "Contains the settings for video stream metrics monitoring."
-        }
-      },
-      "documentation": "The settings for source monitoring."
-    },
-    "MulticastSourceSettings": {
-      "type": "structure",
-      "members": {
-        "MulticastSourceIp": {
-          "shape": "__string",
-          "locationName": "multicastSourceIp",
-          "documentation": "The IP address of the source for source-specific multicast (SSM)."
-        }
-      },
-      "documentation": "The settings related to the multicast source."
-    },
-    "NetworkInterfaceType": {
-      "type": "string",
-      "enum": [
+    "NetworkInterfaceType":{
+      "type":"string",
+      "enum":[
         "ena",
         "efa"
       ]
     },
-    "NotFoundException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 404
-      }
-    },
-    "Offering": {
-      "type": "structure",
-      "members": {
-        "CurrencyCode": {
-          "shape": "__string",
-          "locationName": "currencyCode",
-          "documentation": "The type of currency that is used for billing. The currencyCode used for all reservations is US dollars."
-        },
-        "Duration": {
-          "shape": "__integer",
-          "locationName": "duration",
-          "documentation": "The length of time that your reservation would be active."
-        },
-        "DurationUnits": {
-          "shape": "DurationUnits",
-          "locationName": "durationUnits",
-          "documentation": "The unit of measurement for the duration of the offering."
-        },
-        "OfferingArn": {
-          "shape": "__string",
-          "locationName": "offeringArn",
-          "documentation": "The Amazon Resource Name (ARN) that MediaConnect assigns to the offering."
-        },
-        "OfferingDescription": {
-          "shape": "__string",
-          "locationName": "offeringDescription",
-          "documentation": "A description of the offering."
-        },
-        "PricePerUnit": {
-          "shape": "__string",
-          "locationName": "pricePerUnit",
-          "documentation": "The cost of a single unit. This value, in combination with priceUnits, makes up the rate."
-        },
-        "PriceUnits": {
-          "shape": "PriceUnits",
-          "locationName": "priceUnits",
-          "documentation": "The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate."
-        },
-        "ResourceSpecification": {
-          "shape": "ResourceSpecification",
-          "locationName": "resourceSpecification",
-          "documentation": "A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering."
-        }
-      },
-      "documentation": "A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time.",
-      "required": [
+    "NotFoundException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>One or more of the resources in the request does not exist in the system. </p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Offering":{
+      "type":"structure",
+      "required":[
         "CurrencyCode",
+        "Duration",
+        "DurationUnits",
         "OfferingArn",
         "OfferingDescription",
-        "DurationUnits",
-        "Duration",
         "PricePerUnit",
-        "ResourceSpecification",
-        "PriceUnits"
-      ]
-    },
-    "Output": {
-      "type": "structure",
-      "members": {
-        "DataTransferSubscriberFeePercent": {
-          "shape": "__integer",
-          "locationName": "dataTransferSubscriberFeePercent",
-          "documentation": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the output."
-        },
-        "Destination": {
-          "shape": "__string",
-          "locationName": "destination",
-          "documentation": "The address where you want to send the output."
-        },
-        "Encryption": {
-          "shape": "Encryption",
-          "locationName": "encryption",
-          "documentation": "The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key)."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement on the originator''s flow. This value is relevant only on entitled flows."
-        },
-        "ListenerAddress": {
-          "shape": "__string",
-          "locationName": "listenerAddress",
-          "documentation": "The IP address that the receiver requires in order to establish a connection with the flow. For public networking, the ListenerAddress is represented by the elastic IP address of the flow. For private networking, the ListenerAddress is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the Zixi pull or SRT listener protocol."
-        },
-        "MediaLiveInputArn": {
-          "shape": "__string",
-          "locationName": "mediaLiveInputArn",
-          "documentation": "The input ARN of the AWS Elemental MediaLive channel. This parameter is relevant only for outputs that were added by creating a MediaLive input."
-        },
-        "MediaStreamOutputConfigurations": {
-          "shape": "__listOfMediaStreamOutputConfiguration",
-          "locationName": "mediaStreamOutputConfigurations",
-          "documentation": "The configuration for each media stream that is associated with the output."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the output. This value must be unique within the current flow."
-        },
-        "OutputArn": {
-          "shape": "__string",
-          "locationName": "outputArn",
-          "documentation": "The ARN of the output."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The port to use when content is distributed to this output."
-        },
-        "Transport": {
-          "shape": "Transport",
-          "locationName": "transport",
-          "documentation": "Attributes related to the transport stream that are used in the output."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this output."
-        },
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that added this output."
-        },
-        "BridgePorts": {
-          "shape": "__listOf__integer",
-          "locationName": "bridgePorts",
-          "documentation": "The bridge output ports currently in use."
-        },
-        "OutputStatus": {
-          "shape": "OutputStatus",
-          "locationName": "outputStatus",
-          "documentation": "An indication of whether the output is transmitting data or not."
-        }
-      },
-      "documentation": "The settings for an output.",
-      "required": [
-        "OutputArn",
-        "Name"
-      ]
-    },
-    "OutputStatus": {
-      "type": "string",
-      "enum": [
+        "PriceUnits",
+        "ResourceSpecification"
+      ],
+      "members":{
+        "CurrencyCode":{
+          "shape":"String",
+          "documentation":"<p> The type of currency that is used for billing. The currencyCode used for all reservations is US dollars.</p>",
+          "locationName":"currencyCode"
+        },
+        "Duration":{
+          "shape":"Integer",
+          "documentation":"<p> The length of time that your reservation would be active.</p>",
+          "locationName":"duration"
+        },
+        "DurationUnits":{
+          "shape":"DurationUnits",
+          "documentation":"<p> The unit of measurement for the duration of the offering.</p>",
+          "locationName":"durationUnits"
+        },
+        "OfferingArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) that MediaConnect assigns to the offering.</p>",
+          "locationName":"offeringArn"
+        },
+        "OfferingDescription":{
+          "shape":"String",
+          "documentation":"<p> A description of the offering.</p>",
+          "locationName":"offeringDescription"
+        },
+        "PricePerUnit":{
+          "shape":"String",
+          "documentation":"<p> The cost of a single unit. This value, in combination with priceUnits, makes up the rate.</p>",
+          "locationName":"pricePerUnit"
+        },
+        "PriceUnits":{
+          "shape":"PriceUnits",
+          "documentation":"<p> The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate.</p>",
+          "locationName":"priceUnits"
+        },
+        "ResourceSpecification":{
+          "shape":"ResourceSpecification",
+          "documentation":"<p> A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering.</p>",
+          "locationName":"resourceSpecification"
+        }
+      },
+      "documentation":"<p> A savings plan that reserves a certain amount of outbound bandwidth usage at a discounted rate each month over a period of time. </p>"
+    },
+    "OfferingArn":{"type":"string"},
+    "Output":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "OutputArn"
+      ],
+      "members":{
+        "DataTransferSubscriberFeePercent":{
+          "shape":"Integer",
+          "documentation":"<p> Percentage from 0-100 of the data transfer cost to be billed to the subscriber.</p>",
+          "locationName":"dataTransferSubscriberFeePercent"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the output.</p>",
+          "locationName":"description"
+        },
+        "Destination":{
+          "shape":"String",
+          "documentation":"<p> The address where you want to send the output.</p>",
+          "locationName":"destination"
+        },
+        "Encryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key).</p>",
+          "locationName":"encryption"
+        },
+        "EntitlementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the entitlement on the originator''s flow. This value is relevant only on entitled flows.</p>",
+          "locationName":"entitlementArn"
+        },
+        "ListenerAddress":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the receiver requires in order to establish a connection with the flow. For public networking, the ListenerAddress is represented by the elastic IP address of the flow. For private networking, the ListenerAddress is represented by the elastic network interface IP address of the VPC. This field applies only to outputs that use the Zixi pull or SRT listener protocol.</p>",
+          "locationName":"listenerAddress"
+        },
+        "MediaLiveInputArn":{
+          "shape":"String",
+          "documentation":"<p> The input ARN of the MediaLive channel. This parameter is relevant only for outputs that were added by creating a MediaLive input.</p>",
+          "locationName":"mediaLiveInputArn"
+        },
+        "MediaStreamOutputConfigurations":{
+          "shape":"__listOfMediaStreamOutputConfiguration",
+          "documentation":"<p> The configuration for each media stream that is associated with the output.</p>",
+          "locationName":"mediaStreamOutputConfigurations"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the output. This value must be unique within the current flow.</p>",
+          "locationName":"name"
+        },
+        "OutputArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the output.</p>",
+          "locationName":"outputArn"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The port to use when content is distributed to this output.</p>",
+          "locationName":"port"
+        },
+        "Transport":{
+          "shape":"Transport",
+          "documentation":"<p> Attributes related to the transport stream that are used in the output.</p>",
+          "locationName":"transport"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this output.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        },
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge added to this output.</p>",
+          "locationName":"bridgeArn"
+        },
+        "BridgePorts":{
+          "shape":"__listOfInteger",
+          "documentation":"<p> The bridge output ports currently in use.</p>",
+          "locationName":"bridgePorts"
+        },
+        "OutputStatus":{
+          "shape":"OutputStatus",
+          "documentation":"<p> An indication of whether the output is transmitting data or not.</p>",
+          "locationName":"outputStatus"
+        },
+        "PeerIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address of the device that is currently receiving content from this output.</p> <note> <ul> <li> <p>For outputs that use protocols where you specify the destination (such as SRT Caller or Zixi Push), this value matches the configured destination address.</p> </li> <li> <p>For outputs that use listener protocols (such as SRT Listener), this value shows the address of the connected receiver. </p> </li> <li> <p>Peer IP addresses aren't available for entitlements, managed MediaLive outputs, NDI outputs, and CDI/ST2110 outputs. </p> </li> <li> <p>The peer IP address might not be visible for flows that haven't been started yet, or flows that were started before May 2025. In these cases, restart your flow to see the peer IP address.</p> </li> </ul> </note>",
+          "locationName":"peerIpAddress"
+        }
+      },
+      "documentation":"<p>The settings for an output. </p>"
+    },
+    "OutputStatus":{
+      "type":"string",
+      "enum":[
         "ENABLED",
         "DISABLED"
       ]
     },
-    "PriceUnits": {
-      "type": "string",
-      "enum": [
-        "HOURLY"
-      ]
-    },
-    "Protocol": {
-      "type": "string",
-      "enum": [
+    "PriceUnits":{
+      "type":"string",
+      "enum":["HOURLY"]
+    },
+    "Protocol":{
+      "type":"string",
+      "enum":[
         "zixi-push",
         "rtp-fec",
         "rtp",
@@ -5452,757 +4447,787 @@
         "srt-listener",
         "srt-caller",
         "fujitsu-qos",
-        "udp"
+        "udp",
+        "ndi-speed-hq"
       ]
     },
-    "PurchaseOfferingRequest": {
-      "type": "structure",
-      "members": {
-        "OfferingArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "offeringArn",
-          "documentation": "The Amazon Resource Name (ARN) of the offering."
-        },
-        "ReservationName": {
-          "shape": "__string",
-          "locationName": "reservationName",
-          "documentation": "The name that you want to use for the reservation."
-        },
-        "Start": {
-          "shape": "__string",
-          "locationName": "start",
-          "documentation": "The date and time that you want the reservation to begin, in Coordinated Universal Time (UTC). You can specify any date and time between 12:00am on the first day of the current month to the current time on today's date, inclusive. Specify the start in a 24-hour notation. Use the following format: YYYY-MM-DDTHH:mm:SSZ, where T and Z are literal characters. For example, to specify 11:30pm on March 5, 2020, enter 2020-03-05T23:30:00Z."
-        }
-      },
-      "documentation": "A request to purchase a offering.",
-      "required": [
+    "PurchaseOfferingRequest":{
+      "type":"structure",
+      "required":[
         "OfferingArn",
-        "Start",
-        "ReservationName"
-      ]
+        "ReservationName",
+        "Start"
+      ],
+      "members":{
+        "OfferingArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the offering.</p>",
+          "location":"uri",
+          "locationName":"OfferingArn"
+        },
+        "ReservationName":{
+          "shape":"String",
+          "documentation":"<p> The name that you want to use for the reservation.</p>",
+          "locationName":"reservationName"
+        },
+        "Start":{
+          "shape":"String",
+          "documentation":"<p> The date and time that you want the reservation to begin, in Coordinated Universal Time (UTC). </p> <p>You can specify any date and time between 12:00am on the first day of the current month to the current time on today's date, inclusive. Specify the start in a 24-hour notation. Use the following format: <code>YYYY-MM-DDTHH:mm:SSZ</code>, where <code>T</code> and <code>Z</code> are literal characters. For example, to specify 11:30pm on March 5, 2020, enter <code>2020-03-05T23:30:00Z</code>.</p>",
+          "locationName":"start"
+        }
+      }
     },
-    "PurchaseOfferingResponse": {
-      "type": "structure",
-      "members": {
-        "Reservation": {
-          "shape": "Reservation",
-          "locationName": "reservation"
+    "PurchaseOfferingResponse":{
+      "type":"structure",
+      "members":{
+        "Reservation":{
+          "shape":"Reservation",
+          "documentation":"<p>The details of the reservation that you just created when you purchased the offering. </p>",
+          "locationName":"reservation"
         }
       }
     },
-    "Range": {
-      "type": "string",
-      "enum": [
+    "Range":{
+      "type":"string",
+      "enum":[
         "NARROW",
         "FULL",
         "FULLPROTECT"
       ]
     },
-    "RemoveBridgeOutputRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "OutputName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "outputName",
-          "documentation": "The name of the bridge output that you want to remove."
-        }
-      },
-      "required": [
-        "OutputName",
-        "BridgeArn"
-      ]
-    },
-    "RemoveBridgeOutputResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn"
-        },
-        "OutputName": {
-          "shape": "__string",
-          "locationName": "outputName"
+    "RemoveBridgeOutputRequest":{
+      "type":"structure",
+      "required":[
+        "BridgeArn",
+        "OutputName"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"RemoveBridgeOutputRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "OutputName":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge output that you want to remove.</p>",
+          "location":"uri",
+          "locationName":"OutputName"
         }
       }
     },
-    "RemoveBridgeSourceRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "SourceName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "sourceName",
-          "documentation": "The name of the bridge source that you want to remove."
+    "RemoveBridgeOutputRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "RemoveBridgeOutputResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge from which the output was removed. </p>",
+          "locationName":"bridgeArn"
+        },
+        "OutputName":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge output that was removed. </p>",
+          "locationName":"outputName"
         }
-      },
-      "required": [
+      }
+    },
+    "RemoveBridgeSourceRequest":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "SourceName"
-      ]
-    },
-    "RemoveBridgeSourceResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn"
-        },
-        "SourceName": {
-          "shape": "__string",
-          "locationName": "sourceName"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"RemoveBridgeSourceRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "SourceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge source that you want to remove.</p>",
+          "location":"uri",
+          "locationName":"SourceName"
         }
       }
     },
-    "RemoveFlowMediaStreamRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream that you want to remove."
+    "RemoveBridgeSourceRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "RemoveBridgeSourceResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge from which the source was removed. </p>",
+          "locationName":"bridgeArn"
+        },
+        "SourceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the bridge source that was removed. </p>",
+          "locationName":"sourceName"
         }
-      },
-      "required": [
+      }
+    },
+    "RemoveFlowMediaStreamRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "MediaStreamName"
-      ]
-    },
-    "RemoveFlowMediaStreamResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream that was removed."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"RemoveFlowMediaStreamRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> The name of the media stream that you want to remove.</p>",
+          "location":"uri",
+          "locationName":"MediaStreamName"
         }
       }
     },
-    "RemoveFlowOutputRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to remove an output from."
-        },
-        "OutputArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:output:.+$",
-          "location": "uri",
-          "locationName": "outputArn",
-          "documentation": "The ARN of the output that you want to remove."
+    "RemoveFlowMediaStreamRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "RemoveFlowMediaStreamResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that was updated.</p>",
+          "locationName":"flowArn"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> The name of the media stream that was removed.</p>",
+          "locationName":"mediaStreamName"
         }
-      },
-      "required": [
+      }
+    },
+    "RemoveFlowOutputRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "OutputArn"
-      ]
-    },
-    "RemoveFlowOutputResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that is associated with the output you removed."
-        },
-        "OutputArn": {
-          "shape": "__string",
-          "locationName": "outputArn",
-          "documentation": "The ARN of the output that was removed."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"RemoveFlowOutputRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to remove an output from.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "OutputArn":{
+          "shape":"RemoveFlowOutputRequestOutputArnString",
+          "documentation":"<p> The ARN of the output that you want to remove. </p>",
+          "location":"uri",
+          "locationName":"OutputArn"
         }
       }
     },
-    "RemoveFlowSourceRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to remove a source from."
-        },
-        "SourceArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:source:.+$",
-          "location": "uri",
-          "locationName": "sourceArn",
-          "documentation": "The ARN of the source that you want to remove."
+    "RemoveFlowOutputRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "RemoveFlowOutputRequestOutputArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:output:.+"
+    },
+    "RemoveFlowOutputResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that the output was removed from. </p>",
+          "locationName":"flowArn"
+        },
+        "OutputArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the output that was removed. </p>",
+          "locationName":"outputArn"
         }
-      },
-      "required": [
+      }
+    },
+    "RemoveFlowSourceRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "SourceArn"
-      ]
-    },
-    "RemoveFlowSourceResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that is associated with the source you removed."
-        },
-        "SourceArn": {
-          "shape": "__string",
-          "locationName": "sourceArn",
-          "documentation": "The ARN of the source that was removed."
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"RemoveFlowSourceRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to remove a source from.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "SourceArn":{
+          "shape":"RemoveFlowSourceRequestSourceArnString",
+          "documentation":"<p> The ARN of the source that you want to remove.</p>",
+          "location":"uri",
+          "locationName":"SourceArn"
         }
       }
     },
-    "RemoveFlowVpcInterfaceRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to remove a VPC interface from."
-        },
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface that you want to remove."
+    "RemoveFlowSourceRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "RemoveFlowSourceRequestSourceArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:source:.+"
+    },
+    "RemoveFlowSourceResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that the source was removed from. </p>",
+          "locationName":"flowArn"
+        },
+        "SourceArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the source that was removed. </p>",
+          "locationName":"sourceArn"
         }
-      },
-      "required": [
+      }
+    },
+    "RemoveFlowVpcInterfaceRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "VpcInterfaceName"
-      ]
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"RemoveFlowVpcInterfaceRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to remove a VPC interface from.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface that you want to remove.</p>",
+          "location":"uri",
+          "locationName":"VpcInterfaceName"
+        }
+      }
     },
-    "RemoveFlowVpcInterfaceResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that is associated with the VPC interface you removed."
-        },
-        "NonDeletedNetworkInterfaceIds": {
-          "shape": "__listOf__string",
-          "locationName": "nonDeletedNetworkInterfaceIds",
-          "documentation": "IDs of network interfaces associated with the removed VPC interface that Media Connect was unable to remove."
-        },
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface that was removed."
-        }
-      }
-    },
-    "Reservation": {
-      "type": "structure",
-      "members": {
-        "CurrencyCode": {
-          "shape": "__string",
-          "locationName": "currencyCode",
-          "documentation": "The type of currency that is used for billing. The currencyCode used for your reservation is US dollars."
-        },
-        "Duration": {
-          "shape": "__integer",
-          "locationName": "duration",
-          "documentation": "The length of time that this reservation is active. MediaConnect defines this value in the offering."
-        },
-        "DurationUnits": {
-          "shape": "DurationUnits",
-          "locationName": "durationUnits",
-          "documentation": "The unit of measurement for the duration of the reservation. MediaConnect defines this value in the offering."
-        },
-        "End": {
-          "shape": "__string",
-          "locationName": "end",
-          "documentation": "The day and time that this reservation expires. This value is calculated based on the start date and time that you set and the offering's duration."
-        },
-        "OfferingArn": {
-          "shape": "__string",
-          "locationName": "offeringArn",
-          "documentation": "The Amazon Resource Name (ARN) that MediaConnect assigns to the offering."
-        },
-        "OfferingDescription": {
-          "shape": "__string",
-          "locationName": "offeringDescription",
-          "documentation": "A description of the offering. MediaConnect defines this value in the offering."
-        },
-        "PricePerUnit": {
-          "shape": "__string",
-          "locationName": "pricePerUnit",
-          "documentation": "The cost of a single unit. This value, in combination with priceUnits, makes up the rate. MediaConnect defines this value in the offering."
-        },
-        "PriceUnits": {
-          "shape": "PriceUnits",
-          "locationName": "priceUnits",
-          "documentation": "The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. MediaConnect defines this value in the offering."
-        },
-        "ReservationArn": {
-          "shape": "__string",
-          "locationName": "reservationArn",
-          "documentation": "The Amazon Resource Name (ARN) that MediaConnect assigns to the reservation when you purchase an offering."
-        },
-        "ReservationName": {
-          "shape": "__string",
-          "locationName": "reservationName",
-          "documentation": "The name that you assigned to the reservation when you purchased the offering."
-        },
-        "ReservationState": {
-          "shape": "ReservationState",
-          "locationName": "reservationState",
-          "documentation": "The status of your reservation."
-        },
-        "ResourceSpecification": {
-          "shape": "ResourceSpecification",
-          "locationName": "resourceSpecification",
-          "documentation": "A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. MediaConnect defines the values that make up the resourceSpecification in the offering."
-        },
-        "Start": {
-          "shape": "__string",
-          "locationName": "start",
-          "documentation": "The day and time that the reservation becomes active. You set this value when you purchase the offering."
+    "RemoveFlowVpcInterfaceRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "RemoveFlowVpcInterfaceResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that is associated with the VPC interface you removed.</p>",
+          "locationName":"flowArn"
+        },
+        "NonDeletedNetworkInterfaceIds":{
+          "shape":"__listOfString",
+          "documentation":"<p> IDs of network interfaces associated with the removed VPC interface that MediaConnect was unable to remove.</p>",
+          "locationName":"nonDeletedNetworkInterfaceIds"
+        },
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface that was removed.</p>",
+          "locationName":"vpcInterfaceName"
         }
-      },
-      "documentation": "A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate.",
-      "required": [
+      }
+    },
+    "Reservation":{
+      "type":"structure",
+      "required":[
         "CurrencyCode",
-        "ReservationState",
-        "OfferingArn",
-        "ReservationArn",
-        "Start",
-        "OfferingDescription",
-        "ReservationName",
-        "End",
         "Duration",
         "DurationUnits",
+        "End",
+        "OfferingArn",
+        "OfferingDescription",
         "PricePerUnit",
+        "PriceUnits",
+        "ReservationArn",
+        "ReservationName",
+        "ReservationState",
         "ResourceSpecification",
-        "PriceUnits"
-      ]
-    },
-    "ReservationState": {
-      "type": "string",
-      "enum": [
+        "Start"
+      ],
+      "members":{
+        "CurrencyCode":{
+          "shape":"String",
+          "documentation":"<p> The type of currency that is used for billing. The currencyCode used for your reservation is US dollars.</p>",
+          "locationName":"currencyCode"
+        },
+        "Duration":{
+          "shape":"Integer",
+          "documentation":"<p> The length of time that this reservation is active. MediaConnect defines this value in the offering.</p>",
+          "locationName":"duration"
+        },
+        "DurationUnits":{
+          "shape":"DurationUnits",
+          "documentation":"<p> The unit of measurement for the duration of the reservation. MediaConnect defines this value in the offering.</p>",
+          "locationName":"durationUnits"
+        },
+        "End":{
+          "shape":"String",
+          "documentation":"<p> The day and time that this reservation expires. This value is calculated based on the start date and time that you set and the offering's duration.</p>",
+          "locationName":"end"
+        },
+        "OfferingArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) that MediaConnect assigns to the offering.</p>",
+          "locationName":"offeringArn"
+        },
+        "OfferingDescription":{
+          "shape":"String",
+          "documentation":"<p> A description of the offering. MediaConnect defines this value in the offering.</p>",
+          "locationName":"offeringDescription"
+        },
+        "PricePerUnit":{
+          "shape":"String",
+          "documentation":"<p> The cost of a single unit. This value, in combination with priceUnits, makes up the rate. MediaConnect defines this value in the offering.</p>",
+          "locationName":"pricePerUnit"
+        },
+        "PriceUnits":{
+          "shape":"PriceUnits",
+          "documentation":"<p> The unit of measurement that is used for billing. This value, in combination with pricePerUnit, makes up the rate. MediaConnect defines this value in the offering.</p>",
+          "locationName":"priceUnits"
+        },
+        "ReservationArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) that MediaConnect assigns to the reservation when you purchase an offering.</p>",
+          "locationName":"reservationArn"
+        },
+        "ReservationName":{
+          "shape":"String",
+          "documentation":"<p> The name that you assigned to the reservation when you purchased the offering.</p>",
+          "locationName":"reservationName"
+        },
+        "ReservationState":{
+          "shape":"ReservationState",
+          "documentation":"<p> The status of your reservation.</p>",
+          "locationName":"reservationState"
+        },
+        "ResourceSpecification":{
+          "shape":"ResourceSpecification",
+          "documentation":"<p> A definition of the amount of outbound bandwidth that you would be reserving if you purchase the offering. MediaConnect defines the values that make up the resourceSpecification in the offering.</p>",
+          "locationName":"resourceSpecification"
+        },
+        "Start":{
+          "shape":"String",
+          "documentation":"<p> The day and time that the reservation becomes active. You set this value when you purchase the offering.</p>",
+          "locationName":"start"
+        }
+      },
+      "documentation":"<p> A pricing agreement for a discounted rate for a specific outbound bandwidth that your MediaConnect account will use each month over a specific time period. The discounted rate in the reservation applies to outbound bandwidth for all flows from your account until your account reaches the amount of bandwidth in your reservation. If you use more outbound bandwidth than the agreed upon amount in a single month, the overage is charged at the on-demand rate.</p>"
+    },
+    "ReservationArn":{"type":"string"},
+    "ReservationState":{
+      "type":"string",
+      "enum":[
         "ACTIVE",
         "EXPIRED",
         "PROCESSING",
         "CANCELED"
       ]
     },
-    "ResourceSpecification": {
-      "type": "structure",
-      "members": {
-        "ReservedBitrate": {
-          "shape": "__integer",
-          "locationName": "reservedBitrate",
-          "documentation": "The amount of outbound bandwidth that is discounted in the offering."
-        },
-        "ResourceType": {
-          "shape": "ResourceType",
-          "locationName": "resourceType",
-          "documentation": "The type of resource and the unit that is being billed for."
-        }
-      },
-      "documentation": "A definition of what is being billed for, including the type and amount.",
-      "required": [
-        "ResourceType"
-      ]
-    },
-    "ResourceType": {
-      "type": "string",
-      "enum": [
-        "Mbps_Outbound_Bandwidth"
-      ]
-    },
-    "ResponseError": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ]
-    },
-    "RevokeFlowEntitlementRequest": {
-      "type": "structure",
-      "members": {
-        "EntitlementArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:entitlement:.+$",
-          "location": "uri",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that you want to revoke."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to revoke an entitlement from."
+    "ResourceSpecification":{
+      "type":"structure",
+      "required":["ResourceType"],
+      "members":{
+        "ReservedBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The amount of outbound bandwidth that is discounted in the offering.</p>",
+          "locationName":"reservedBitrate"
+        },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> The type of resource and the unit that is being billed for.</p>",
+          "locationName":"resourceType"
+        }
+      },
+      "documentation":"<p> A definition of what is being billed for, including the type and amount.</p>"
+    },
+    "ResourceType":{
+      "type":"string",
+      "enum":["Mbps_Outbound_Bandwidth"]
+    },
+    "RevokeFlowEntitlementRequest":{
+      "type":"structure",
+      "required":[
+        "EntitlementArn",
+        "FlowArn"
+      ],
+      "members":{
+        "EntitlementArn":{
+          "shape":"RevokeFlowEntitlementRequestEntitlementArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the entitlement that you want to revoke.</p>",
+          "location":"uri",
+          "locationName":"EntitlementArn"
+        },
+        "FlowArn":{
+          "shape":"RevokeFlowEntitlementRequestFlowArnString",
+          "documentation":"<p> The flow that you want to revoke an entitlement from.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn",
-        "EntitlementArn"
-      ]
+      }
     },
-    "RevokeFlowEntitlementResponse": {
-      "type": "structure",
-      "members": {
-        "EntitlementArn": {
-          "shape": "__string",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that was revoked."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that the entitlement was revoked from."
+    "RevokeFlowEntitlementRequestEntitlementArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:entitlement:.+"
+    },
+    "RevokeFlowEntitlementRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "RevokeFlowEntitlementResponse":{
+      "type":"structure",
+      "members":{
+        "EntitlementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the entitlement that was revoked.</p>",
+          "locationName":"entitlementArn"
+        },
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that the entitlement was revoked from.</p>",
+          "locationName":"flowArn"
         }
       }
     },
-    "ScanMode": {
-      "type": "string",
-      "enum": [
+    "ScanMode":{
+      "type":"string",
+      "enum":[
         "progressive",
         "interlace",
         "progressive-segmented-frame"
       ]
     },
-    "ServiceUnavailableException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 503
-      }
-    },
-    "SetGatewayBridgeSourceRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge feeding this flow."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this bridge source."
-        }
-      },
-      "documentation": "The source configuration for cloud flows receiving a stream from a bridge.",
-      "required": [
-        "BridgeArn"
-      ]
-    },
-    "SetSourceRequest": {
-      "type": "structure",
-      "members": {
-        "Decryption": {
-          "shape": "Encryption",
-          "locationName": "decryption",
-          "documentation": "The type of encryption that is used on the content ingested from this source. Allowable encryption types: static-key."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:entitlement:.+$",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that allows you to subscribe to this flow. The entitlement is set by the flow originator, and the ARN is generated as part of the originator's flow."
-        },
-        "IngestPort": {
-          "shape": "__integer",
-          "locationName": "ingestPort",
-          "documentation": "The port that the flow will be listening on for incoming content."
-        },
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams."
-        },
-        "MaxLatency": {
-          "shape": "__integer",
-          "locationName": "maxLatency",
-          "documentation": "The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams."
-        },
-        "MaxSyncBuffer": {
-          "shape": "__integer",
-          "locationName": "maxSyncBuffer",
-          "documentation": "The size of the buffer (in milliseconds) to use to sync incoming source data."
-        },
-        "MediaStreamSourceConfigurations": {
-          "shape": "__listOfMediaStreamSourceConfigurationRequest",
-          "locationName": "mediaStreamSourceConfigurations",
-          "documentation": "The media streams that are associated with the source, and the parameters for those associations."
-        },
-        "MinLatency": {
-          "shape": "__integer",
-          "locationName": "minLatency",
-          "documentation": "The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the source."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The protocol that is used by the source."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SenderIpAddress": {
-          "shape": "__string",
-          "locationName": "senderIpAddress",
-          "documentation": "The IP address that the flow communicates with to initiate connection with the sender."
-        },
-        "SourceListenerAddress": {
-          "shape": "__string",
-          "locationName": "sourceListenerAddress",
-          "documentation": "Source IP or domain name for SRT-caller protocol."
-        },
-        "SourceListenerPort": {
-          "shape": "__integer",
-          "locationName": "sourceListenerPort",
-          "documentation": "Source port for SRT-caller protocol."
-        },
-        "StreamId": {
-          "shape": "__string",
-          "locationName": "streamId",
-          "documentation": "The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams."
-        },
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface to use for this source."
-        },
-        "WhitelistCidr": {
-          "shape": "__string",
-          "locationName": "whitelistCidr",
-          "documentation": "The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "GatewayBridgeSource": {
-          "shape": "SetGatewayBridgeSourceRequest",
-          "locationName": "gatewayBridgeSource",
-          "documentation": "The source configuration for cloud flows receiving a stream from a bridge."
-        }
-      },
-      "documentation": "The settings for the source of the flow."
-    },
-    "SilentAudio": {
-      "type": "structure",
-      "members": {
-        "State": {
-          "shape": "State",
-          "locationName": "state",
-          "documentation": "Indicates whether the SilentAudio metric is enabled or disabled."
-        },
-        "ThresholdSeconds": {
-          "shape": "__integer",
-          "locationName": "thresholdSeconds",
-          "documentation": "Specifies the number of consecutive seconds of silence that triggers an event or alert."
-        }
-      },
-      "documentation": "Configures settings for the SilentAudio metric."
-    },
-    "Source": {
-      "type": "structure",
-      "members": {
-        "DataTransferSubscriberFeePercent": {
-          "shape": "__integer",
-          "locationName": "dataTransferSubscriberFeePercent",
-          "documentation": "Percentage from 0-100 of the data transfer cost to be billed to the subscriber."
-        },
-        "Decryption": {
-          "shape": "Encryption",
-          "locationName": "decryption",
-          "documentation": "The type of encryption that is used on the content ingested from this source."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that allows you to subscribe to content that comes from another AWS account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow."
-        },
-        "IngestIp": {
-          "shape": "__string",
-          "locationName": "ingestIp",
-          "documentation": "The IP address that the flow will be listening on for incoming content."
-        },
-        "IngestPort": {
-          "shape": "__integer",
-          "locationName": "ingestPort",
-          "documentation": "The port that the flow will be listening on for incoming content."
-        },
-        "MediaStreamSourceConfigurations": {
-          "shape": "__listOfMediaStreamSourceConfiguration",
-          "locationName": "mediaStreamSourceConfigurations",
-          "documentation": "The media streams that are associated with the source, and the parameters for those associations."
-        },
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the source."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SenderIpAddress": {
-          "shape": "__string",
-          "locationName": "senderIpAddress",
-          "documentation": "The IP address that the flow communicates with to initiate connection with the sender."
-        },
-        "SourceArn": {
-          "shape": "__string",
-          "locationName": "sourceArn",
-          "documentation": "The ARN of the source."
-        },
-        "Transport": {
-          "shape": "Transport",
-          "locationName": "transport",
-          "documentation": "Attributes related to the transport stream that are used in the source."
-        },
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface that is used for this source."
-        },
-        "WhitelistCidr": {
-          "shape": "__string",
-          "locationName": "whitelistCidr",
-          "documentation": "The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "GatewayBridgeSource": {
-          "shape": "GatewayBridgeSource",
-          "locationName": "gatewayBridgeSource",
-          "documentation": "The source configuration for cloud flows receiving a stream from a bridge."
-        }
-      },
-      "documentation": "The settings for the source of the flow.",
-      "required": [
+    "ServiceUnavailableException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>The service is currently unavailable or busy. </p>",
+      "error":{"httpStatusCode":503},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "SetGatewayBridgeSourceRequest":{
+      "type":"structure",
+      "required":["BridgeArn"],
+      "members":{
+        "BridgeArn":{
+          "shape":"SetGatewayBridgeSourceRequestBridgeArnString",
+          "documentation":"<p> The ARN of the bridge feeding this flow.</p>",
+          "locationName":"bridgeArn"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this bridge source.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        }
+      },
+      "documentation":"<p> The source configuration for cloud flows receiving a stream from a bridge.</p>"
+    },
+    "SetGatewayBridgeSourceRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "SetSourceRequest":{
+      "type":"structure",
+      "members":{
+        "Decryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of encryption that is used on the content ingested from this source. Allowable encryption types: static-key.</p>",
+          "locationName":"decryption"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description for the source. This value is not used or seen outside of the current MediaConnect account.</p>",
+          "locationName":"description"
+        },
+        "EntitlementArn":{
+          "shape":"SetSourceRequestEntitlementArnString",
+          "documentation":"<p> The ARN of the entitlement that allows you to subscribe to this flow. The entitlement is set by the flow originator, and the ARN is generated as part of the originator's flow.</p>",
+          "locationName":"entitlementArn"
+        },
+        "IngestPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow will be listening on for incoming content.</p>",
+          "locationName":"ingestPort"
+        },
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams.</p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.</p>",
+          "locationName":"maxLatency"
+        },
+        "MaxSyncBuffer":{
+          "shape":"Integer",
+          "documentation":"<p> The size of the buffer (in milliseconds) to use to sync incoming source data.</p>",
+          "locationName":"maxSyncBuffer"
+        },
+        "MediaStreamSourceConfigurations":{
+          "shape":"__listOfMediaStreamSourceConfigurationRequest",
+          "documentation":"<p> The media streams that are associated with the source, and the parameters for those associations.</p>",
+          "locationName":"mediaStreamSourceConfigurations"
+        },
+        "MinLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency.</p>",
+          "locationName":"minLatency"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the source.</p>",
+          "locationName":"name"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The protocol that is used by the source.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow uses to send outbound requests to initiate connection with the sender.</p>",
+          "locationName":"senderControlPort"
+        },
+        "SenderIpAddress":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the flow communicates with to initiate connection with the sender.</p>",
+          "locationName":"senderIpAddress"
+        },
+        "SourceListenerAddress":{
+          "shape":"String",
+          "documentation":"<p> Source IP or domain name for SRT-caller protocol.</p>",
+          "locationName":"sourceListenerAddress"
+        },
+        "SourceListenerPort":{
+          "shape":"Integer",
+          "documentation":"<p> Source port for SRT-caller protocol.</p>",
+          "locationName":"sourceListenerPort"
+        },
+        "StreamId":{
+          "shape":"String",
+          "documentation":"<p> The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams.</p>",
+          "locationName":"streamId"
+        },
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface to use for this source.</p>",
+          "locationName":"vpcInterfaceName"
+        },
+        "WhitelistCidr":{
+          "shape":"String",
+          "documentation":"<p> The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"whitelistCidr"
+        },
+        "GatewayBridgeSource":{
+          "shape":"SetGatewayBridgeSourceRequest",
+          "documentation":"<p> The source configuration for cloud flows receiving a stream from a bridge.</p>",
+          "locationName":"gatewayBridgeSource"
+        },
+        "SourceTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the source. </p>",
+          "locationName":"sourceTags"
+        }
+      },
+      "documentation":"<p> The settings for the source of the flow.</p>"
+    },
+    "SetSourceRequestEntitlementArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:entitlement:.+"
+    },
+    "SilentAudio":{
+      "type":"structure",
+      "members":{
+        "State":{
+          "shape":"State",
+          "documentation":"<p>Indicates whether the <code>SilentAudio</code> metric is enabled or disabled. </p>",
+          "locationName":"state"
+        },
+        "ThresholdSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>Specifies the number of consecutive seconds of silence that triggers an event or alert. </p>",
+          "locationName":"thresholdSeconds"
+        }
+      },
+      "documentation":"<p>Configures settings for the <code>SilentAudio</code> metric. </p>"
+    },
+    "Source":{
+      "type":"structure",
+      "required":[
         "Name",
         "SourceArn"
-      ]
-    },
-    "SourcePriority": {
-      "type": "structure",
-      "members": {
-        "PrimarySource": {
-          "shape": "__string",
-          "locationName": "primarySource",
-          "documentation": "The name of the source you choose as the primary source for this flow."
-        }
-      },
-      "documentation": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams."
-    },
-    "SourceType": {
-      "type": "string",
-      "enum": [
+      ],
+      "members":{
+        "DataTransferSubscriberFeePercent":{
+          "shape":"Integer",
+          "documentation":"<p> Percentage from 0-100 of the data transfer cost to be billed to the subscriber.</p>",
+          "locationName":"dataTransferSubscriberFeePercent"
+        },
+        "Decryption":{
+          "shape":"Encryption",
+          "documentation":"<p> The type of encryption that is used on the content ingested from this source.</p>",
+          "locationName":"decryption"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description for the source. This value is not used or seen outside of the current MediaConnect account.</p>",
+          "locationName":"description"
+        },
+        "EntitlementArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the entitlement that allows you to subscribe to content that comes from another Amazon Web Services account. The entitlement is set by the content originator and the ARN is generated as part of the originator's flow.</p>",
+          "locationName":"entitlementArn"
+        },
+        "IngestIp":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the flow will be listening on for incoming content.</p>",
+          "locationName":"ingestIp"
+        },
+        "IngestPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow will be listening on for incoming content.</p>",
+          "locationName":"ingestPort"
+        },
+        "MediaStreamSourceConfigurations":{
+          "shape":"__listOfMediaStreamSourceConfiguration",
+          "documentation":"<p> The media streams that are associated with the source, and the parameters for those associations.</p>",
+          "locationName":"mediaStreamSourceConfigurations"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> The name of the source.</p>",
+          "locationName":"name"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p> The IP address that the flow communicates with to initiate connection with the sender.</p>",
+          "locationName":"senderControlPort"
+        },
+        "SenderIpAddress":{
+          "shape":"String",
+          "documentation":"<p> The port that the flow uses to send outbound requests to initiate connection with the sender.</p>",
+          "locationName":"senderIpAddress"
+        },
+        "SourceArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the source.</p>",
+          "locationName":"sourceArn"
+        },
+        "Transport":{
+          "shape":"Transport",
+          "documentation":"<p> Attributes related to the transport stream that are used in the source.</p>",
+          "locationName":"transport"
+        },
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface that is used for this source.</p>",
+          "locationName":"vpcInterfaceName"
+        },
+        "WhitelistCidr":{
+          "shape":"String",
+          "documentation":"<p> The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"whitelistCidr"
+        },
+        "GatewayBridgeSource":{
+          "shape":"GatewayBridgeSource",
+          "documentation":"<p> The source configuration for cloud flows receiving a stream from a bridge.</p>",
+          "locationName":"gatewayBridgeSource"
+        },
+        "PeerIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address of the device that is currently sending content to this source. </p> <note> <ul> <li> <p>For sources that use protocols where you specify the origin (such as SRT Caller), this value matches the configured origin address. </p> </li> <li> <p>For sources that use listener protocols (such as SRT Listener or RTP), this value shows the address of the connected sender. </p> </li> <li> <p>Peer IP addresses aren't available for entitlements and CDI/ST2110 sources.</p> </li> <li> <p>The peer IP address might not be visible for flows that haven't been started yet, or flows that were started before May 2025. In these cases, restart your flow to see the peer IP address.</p> </li> </ul> </note>",
+          "locationName":"peerIpAddress"
+        }
+      },
+      "documentation":"<p> The settings for the source of the flow.</p>"
+    },
+    "SourcePriority":{
+      "type":"structure",
+      "members":{
+        "PrimarySource":{
+          "shape":"String",
+          "documentation":"<p> The name of the source you choose as the primary source for this flow.</p>",
+          "locationName":"primarySource"
+        }
+      },
+      "documentation":"<p> The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams. </p>"
+    },
+    "SourceType":{
+      "type":"string",
+      "enum":[
         "OWNED",
         "ENTITLED"
       ]
     },
-    "StartFlowRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you want to start."
+    "StartFlowRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"StartFlowRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to start.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn"
-      ]
+      }
     },
-    "StartFlowResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you started."
-        },
-        "Status": {
-          "shape": "Status",
-          "locationName": "status",
-          "documentation": "The status of the flow when the StartFlow process begins."
+    "StartFlowRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "StartFlowResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that you started.</p>",
+          "locationName":"flowArn"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p> The status of the flow when the <code>StartFlow</code> process begins.</p>",
+          "locationName":"status"
         }
       }
     },
-    "State": {
-      "type": "string",
-      "enum": [
+    "State":{
+      "type":"string",
+      "enum":[
         "ENABLED",
         "DISABLED"
       ]
     },
-    "Status": {
-      "type": "string",
-      "enum": [
+    "Status":{
+      "type":"string",
+      "enum":[
         "STANDBY",
         "ACTIVE",
         "UPDATING",
@@ -6212,60 +5237,65 @@
         "ERROR"
       ]
     },
-    "StopFlowRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you want to stop."
+    "StopFlowRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"StopFlowRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to stop.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
         }
-      },
-      "required": [
-        "FlowArn"
-      ]
+      }
     },
-    "StopFlowResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you stopped."
-        },
-        "Status": {
-          "shape": "Status",
-          "locationName": "status",
-          "documentation": "The status of the flow when the StopFlow process begins."
+    "StopFlowRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "StopFlowResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that you stopped.</p>",
+          "locationName":"flowArn"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p> The status of the flow when the <code>StopFlow</code> process begins.</p>",
+          "locationName":"status"
         }
       }
     },
-    "TagResourceRequest": {
-      "type": "structure",
-      "members": {
-        "ResourceArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "resourceArn",
-          "documentation": "The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource to which to add tags."
-        },
-        "Tags": {
-          "shape": "__mapOf__string",
-          "locationName": "tags",
-          "documentation": "A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters."
-        }
-      },
-      "documentation": "The tags to add to the resource. A tag is an array of key-value pairs. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.",
-      "required": [
+    "String":{"type":"string"},
+    "SyntheticTimestamp_date_time":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
         "ResourceArn",
         "Tags"
-      ]
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) that identifies the MediaConnect resource to which to add tags.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Tags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> A map from tag keys to values. Tag keys can have a maximum character length of 128 characters, and tag values can have a maximum length of 256 characters.</p>",
+          "locationName":"tags"
+        }
+      }
     },
-    "Tcs": {
-      "type": "string",
-      "enum": [
+    "Tcs":{
+      "type":"string",
+      "enum":[
         "SDR",
         "PQ",
         "HLG",
@@ -6277,1444 +5307,1427 @@
         "DENSITY"
       ]
     },
-    "ThumbnailDetails": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that DescribeFlowSourceThumbnail was performed on."
-        },
-        "Thumbnail": {
-          "shape": "__string",
-          "locationName": "thumbnail",
-          "documentation": "Thumbnail Base64 string."
-        },
-        "ThumbnailMessages": {
-          "shape": "__listOfMessageDetail",
-          "locationName": "thumbnailMessages",
-          "documentation": "Status code and messages about the flow source thumbnail."
-        },
-        "Timecode": {
-          "shape": "__string",
-          "locationName": "timecode",
-          "documentation": "Timecode of thumbnail."
-        },
-        "Timestamp": {
-          "shape": "__timestampIso8601",
-          "locationName": "timestamp",
-          "documentation": "The timestamp of when thumbnail was generated."
-        }
-      },
-      "documentation": "The details of the thumbnail, including thumbnail base64 string, timecode and the time when thumbnail was generated.",
-      "required": [
-        "ThumbnailMessages",
-        "FlowArn"
-      ]
-    },
-    "ThumbnailState": {
-      "type": "string",
-      "enum": [
+    "ThumbnailDetails":{
+      "type":"structure",
+      "required":[
+        "FlowArn",
+        "ThumbnailMessages"
+      ],
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that DescribeFlowSourceThumbnail was performed on.</p>",
+          "locationName":"flowArn"
+        },
+        "Thumbnail":{
+          "shape":"String",
+          "documentation":"<p>Thumbnail Base64 string. </p>",
+          "locationName":"thumbnail"
+        },
+        "ThumbnailMessages":{
+          "shape":"__listOfMessageDetail",
+          "documentation":"<p> Status code and messages about the flow source thumbnail.</p>",
+          "locationName":"thumbnailMessages"
+        },
+        "Timecode":{
+          "shape":"String",
+          "documentation":"<p> Timecode of thumbnail.</p>",
+          "locationName":"timecode"
+        },
+        "Timestamp":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p> The timestamp of when thumbnail was generated.</p>",
+          "locationName":"timestamp"
+        }
+      },
+      "documentation":"<p> The details of the thumbnail, including thumbnail base64 string, timecode and the time when thumbnail was generated.</p>"
+    },
+    "ThumbnailState":{
+      "type":"string",
+      "enum":[
         "ENABLED",
         "DISABLED"
       ]
     },
-    "TooManyRequestsException": {
-      "type": "structure",
-      "members": {
-        "Message": {
-          "shape": "__string",
-          "locationName": "message",
-          "documentation": "The error message returned by AWS Elemental MediaConnect."
-        }
-      },
-      "documentation": "Exception raised by AWS Elemental MediaConnect. See the error message and documentation for the operation for more information on the cause of this exception.",
-      "required": [
-        "Message"
-      ],
-      "exception": true,
-      "error": {
-        "httpStatusCode": 429
-      }
-    },
-    "Transport": {
-      "type": "structure",
-      "members": {
-        "CidrAllowList": {
-          "shape": "__listOf__string",
-          "locationName": "cidrAllowList",
-          "documentation": "The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams."
-        },
-        "MaxLatency": {
-          "shape": "__integer",
-          "locationName": "maxLatency",
-          "documentation": "The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams."
-        },
-        "MaxSyncBuffer": {
-          "shape": "__integer",
-          "locationName": "maxSyncBuffer",
-          "documentation": "The size of the buffer (in milliseconds) to use to sync incoming source data."
-        },
-        "MinLatency": {
-          "shape": "__integer",
-          "locationName": "minLatency",
-          "documentation": "The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The protocol that is used by the source or output."
-        },
-        "RemoteId": {
-          "shape": "__string",
-          "locationName": "remoteId",
-          "documentation": "The remote ID for the Zixi-pull stream."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SenderIpAddress": {
-          "shape": "__string",
-          "locationName": "senderIpAddress",
-          "documentation": "The IP address that the flow communicates with to initiate connection with the sender."
-        },
-        "SmoothingLatency": {
-          "shape": "__integer",
-          "locationName": "smoothingLatency",
-          "documentation": "The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams."
-        },
-        "SourceListenerAddress": {
-          "shape": "__string",
-          "locationName": "sourceListenerAddress",
-          "documentation": "Source IP or domain name for SRT-caller protocol."
-        },
-        "SourceListenerPort": {
-          "shape": "__integer",
-          "locationName": "sourceListenerPort",
-          "documentation": "Source port for SRT-caller protocol."
-        },
-        "StreamId": {
-          "shape": "__string",
-          "locationName": "streamId",
-          "documentation": "The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams."
-        }
-      },
-      "documentation": "Attributes related to the transport stream that are used in a source or output.",
-      "required": [
-        "Protocol"
-      ]
-    },
-    "TransportMediaInfo": {
-      "type": "structure",
-      "members": {
-        "Programs": {
-          "shape": "__listOfTransportStreamProgram",
-          "locationName": "programs",
-          "documentation": "The list of transport stream programs in the current flow's source."
-        }
-      },
-      "documentation": "The metadata of the transport stream in the current flow's source.",
-      "required": [
-        "Programs"
-      ]
-    },
-    "TransportStream": {
-      "type": "structure",
-      "members": {
-        "Channels": {
-          "shape": "__integer",
-          "locationName": "channels",
-          "documentation": "The number of channels in the audio stream."
-        },
-        "Codec": {
-          "shape": "__string",
-          "locationName": "codec",
-          "documentation": "The codec used by the stream."
-        },
-        "FrameRate": {
-          "shape": "__string",
-          "locationName": "frameRate",
-          "documentation": "The frame rate used by the video stream."
-        },
-        "FrameResolution": {
-          "shape": "FrameResolution",
-          "locationName": "frameResolution"
-        },
-        "Pid": {
-          "shape": "__integer",
-          "locationName": "pid",
-          "documentation": "The Packet ID (PID) as it is reported in the Program Map Table."
-        },
-        "SampleRate": {
-          "shape": "__integer",
-          "locationName": "sampleRate",
-          "documentation": "The sample rate used by the audio stream."
-        },
-        "SampleSize": {
-          "shape": "__integer",
-          "locationName": "sampleSize",
-          "documentation": "The sample bit size used by the audio stream."
-        },
-        "StreamType": {
-          "shape": "__string",
-          "locationName": "streamType",
-          "documentation": "The Stream Type as it is reported in the Program Map Table."
-        }
-      },
-      "documentation": "The metadata of an elementary transport stream.",
-      "required": [
-        "StreamType",
-        "Pid"
-      ]
-    },
-    "TransportStreamProgram": {
-      "type": "structure",
-      "members": {
-        "PcrPid": {
-          "shape": "__integer",
-          "locationName": "pcrPid",
-          "documentation": "The Program Clock Reference (PCR) Packet ID (PID) as it is reported in the Program Association Table."
-        },
-        "ProgramName": {
-          "shape": "__string",
-          "locationName": "programName",
-          "documentation": "The program name as it is reported in the Program Association Table."
-        },
-        "ProgramNumber": {
-          "shape": "__integer",
-          "locationName": "programNumber",
-          "documentation": "The program number as it is reported in the Program Association Table."
-        },
-        "ProgramPid": {
-          "shape": "__integer",
-          "locationName": "programPid",
-          "documentation": "The program Packet ID (PID) as it is reported in the Program Association Table."
-        },
-        "Streams": {
-          "shape": "__listOfTransportStream",
-          "locationName": "streams",
-          "documentation": "The list of elementary transport streams in the program. The list includes video, audio, and data streams."
-        }
-      },
-      "documentation": "The metadata of a single transport stream program.",
-      "required": [
-        "ProgramPid",
+    "TooManyRequestsException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "locationName":"message"
+        }
+      },
+      "documentation":"<p>The request was denied due to request throttling. </p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "Transport":{
+      "type":"structure",
+      "required":["Protocol"],
+      "members":{
+        "CidrAllowList":{
+          "shape":"__listOfString",
+          "documentation":"<p> The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16</p>",
+          "locationName":"cidrAllowList"
+        },
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams.</p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.</p>",
+          "locationName":"maxLatency"
+        },
+        "MaxSyncBuffer":{
+          "shape":"Integer",
+          "documentation":"<p> The size of the buffer (in milliseconds) to use to sync incoming source data.</p>",
+          "locationName":"maxSyncBuffer"
+        },
+        "MinLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency.</p>",
+          "locationName":"minLatency"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The protocol that is used by the source or output.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "RemoteId":{
+          "shape":"String",
+          "documentation":"<p> The remote ID for the Zixi-pull stream.</p>",
+          "locationName":"remoteId"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow uses to send outbound requests to initiate connection with the sender.</p>",
+          "locationName":"senderControlPort"
+        },
+        "SenderIpAddress":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the flow communicates with to initiate connection with the sender.</p>",
+          "locationName":"senderIpAddress"
+        },
+        "SmoothingLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams.</p>",
+          "locationName":"smoothingLatency"
+        },
+        "SourceListenerAddress":{
+          "shape":"String",
+          "documentation":"<p> Source IP or domain name for SRT-caller protocol.</p>",
+          "locationName":"sourceListenerAddress"
+        },
+        "SourceListenerPort":{
+          "shape":"Integer",
+          "documentation":"<p> Source port for SRT-caller protocol.</p>",
+          "locationName":"sourceListenerPort"
+        },
+        "StreamId":{
+          "shape":"String",
+          "documentation":"<p> The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams.</p>",
+          "locationName":"streamId"
+        },
+        "NdiSpeedHqQuality":{
+          "shape":"Integer",
+          "documentation":"<p>A quality setting for the NDI Speed HQ encoder. </p>",
+          "locationName":"ndiSpeedHqQuality"
+        },
+        "NdiProgramName":{
+          "shape":"String",
+          "documentation":"<p>A suffix for the names of the NDI sources that the flow creates. If a custom name isn't specified, MediaConnect uses the output name. </p>",
+          "locationName":"ndiProgramName"
+        }
+      },
+      "documentation":"<p> Attributes related to the transport stream that are used in a source or output.</p>"
+    },
+    "TransportMediaInfo":{
+      "type":"structure",
+      "required":["Programs"],
+      "members":{
+        "Programs":{
+          "shape":"__listOfTransportStreamProgram",
+          "documentation":"<p> The list of transport stream programs in the current flow's source.</p>",
+          "locationName":"programs"
+        }
+      },
+      "documentation":"<p> The metadata of the transport stream in the current flow's source.</p>"
+    },
+    "TransportStream":{
+      "type":"structure",
+      "required":[
+        "Pid",
+        "StreamType"
+      ],
+      "members":{
+        "Channels":{
+          "shape":"Integer",
+          "documentation":"<p> The number of channels in the audio stream.</p>",
+          "locationName":"channels"
+        },
+        "Codec":{
+          "shape":"String",
+          "documentation":"<p> The codec used by the stream.</p>",
+          "locationName":"codec"
+        },
+        "FrameRate":{
+          "shape":"String",
+          "documentation":"<p> The frame rate used by the video stream.</p>",
+          "locationName":"frameRate"
+        },
+        "FrameResolution":{
+          "shape":"FrameResolution",
+          "documentation":"<p>The frame resolution used by the video stream. </p>",
+          "locationName":"frameResolution"
+        },
+        "Pid":{
+          "shape":"Integer",
+          "documentation":"<p> The Packet ID (PID) as it is reported in the Program Map Table.</p>",
+          "locationName":"pid"
+        },
+        "SampleRate":{
+          "shape":"Integer",
+          "documentation":"<p> The sample rate used by the audio stream.</p>",
+          "locationName":"sampleRate"
+        },
+        "SampleSize":{
+          "shape":"Integer",
+          "documentation":"<p> The sample bit size used by the audio stream.</p>",
+          "locationName":"sampleSize"
+        },
+        "StreamType":{
+          "shape":"String",
+          "documentation":"<p> The Stream Type as it is reported in the Program Map Table.</p>",
+          "locationName":"streamType"
+        }
+      },
+      "documentation":"<p> The metadata of an elementary transport stream.</p>"
+    },
+    "TransportStreamProgram":{
+      "type":"structure",
+      "required":[
         "PcrPid",
         "ProgramNumber",
+        "ProgramPid",
         "Streams"
-      ]
-    },
-    "UntagResourceRequest": {
-      "type": "structure",
-      "members": {
-        "ResourceArn": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "resourceArn",
-          "documentation": "The Amazon Resource Name (ARN) that identifies the AWS Elemental MediaConnect resource from which to delete tags."
-        },
-        "TagKeys": {
-          "shape": "__listOf__string",
-          "location": "querystring",
-          "locationName": "tagKeys",
-          "documentation": "The keys of the tags to be removed."
-        }
-      },
-      "required": [
-        "TagKeys",
-        "ResourceArn"
-      ]
-    },
-    "UpdateBridgeFlowSourceRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the cloud flow to use as a source of this bridge."
-        },
-        "FlowVpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "flowVpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this source."
-        }
-      },
-      "documentation": "Update the flow source of the bridge."
-    },
-    "UpdateBridgeNetworkOutputRequest": {
-      "type": "structure",
-      "members": {
-        "IpAddress": {
-          "shape": "__string",
-          "locationName": "ipAddress",
-          "documentation": "The network output IP Address."
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network output's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network output port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network output protocol."
-        },
-        "Ttl": {
-          "shape": "__integer",
-          "locationName": "ttl",
-          "documentation": "The network output TTL."
-        }
-      },
-      "documentation": "Update an existing network output."
-    },
-    "UpdateBridgeNetworkSourceRequest": {
-      "type": "structure",
-      "members": {
-        "MulticastIp": {
-          "shape": "__string",
-          "locationName": "multicastIp",
-          "documentation": "The network source multicast IP."
-        },
-        "MulticastSourceSettings": {
-          "shape": "MulticastSourceSettings",
-          "locationName": "multicastSourceSettings"
-        },
-        "NetworkName": {
-          "shape": "__string",
-          "locationName": "networkName",
-          "documentation": "The network source's gateway network name."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The network source port."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The network source protocol."
-        }
-      },
-      "documentation": "Update the network source of the bridge."
-    },
-    "UpdateBridgeOutputRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "NetworkOutput": {
-          "shape": "UpdateBridgeNetworkOutputRequest",
-          "locationName": "networkOutput"
-        },
-        "OutputName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "outputName",
-          "documentation": "The name of the bridge output that you want to update."
-        }
-      },
-      "documentation": "The fields that you want to update in the bridge output.",
-      "required": [
-        "OutputName",
-        "BridgeArn"
-      ]
-    },
-    "UpdateBridgeOutputResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "Output": {
-          "shape": "BridgeOutput",
-          "locationName": "output",
-          "documentation": "The output that you updated."
-        }
-      }
-    },
-    "UpdateBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge that you want to update."
-        },
-        "EgressGatewayBridge": {
-          "shape": "UpdateEgressGatewayBridgeRequest",
-          "locationName": "egressGatewayBridge"
-        },
-        "IngressGatewayBridge": {
-          "shape": "UpdateIngressGatewayBridgeRequest",
-          "locationName": "ingressGatewayBridge"
-        },
-        "SourceFailoverConfig": {
-          "shape": "UpdateFailoverConfig",
-          "locationName": "sourceFailoverConfig"
-        }
-      },
-      "documentation": "A request to update the bridge.",
-      "required": [
-        "BridgeArn"
-      ]
-    },
-    "UpdateBridgeResponse": {
-      "type": "structure",
-      "members": {
-        "Bridge": {
-          "shape": "Bridge",
-          "locationName": "bridge"
-        }
-      }
-    },
-    "UpdateBridgeSourceRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "FlowSource": {
-          "shape": "UpdateBridgeFlowSourceRequest",
-          "locationName": "flowSource"
-        },
-        "NetworkSource": {
-          "shape": "UpdateBridgeNetworkSourceRequest",
-          "locationName": "networkSource"
-        },
-        "SourceName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "sourceName",
-          "documentation": "The name of the source that you want to update."
-        }
-      },
-      "documentation": "The fields that you want to update in the bridge source.",
-      "required": [
+      ],
+      "members":{
+        "PcrPid":{
+          "shape":"Integer",
+          "documentation":"<p> The Program Clock Reference (PCR) Packet ID (PID) as it is reported in the Program Association Table.</p>",
+          "locationName":"pcrPid"
+        },
+        "ProgramName":{
+          "shape":"String",
+          "documentation":"<p> The program name as it is reported in the Program Association Table.</p>",
+          "locationName":"programName"
+        },
+        "ProgramNumber":{
+          "shape":"Integer",
+          "documentation":"<p> The program number as it is reported in the Program Association Table.</p>",
+          "locationName":"programNumber"
+        },
+        "ProgramPid":{
+          "shape":"Integer",
+          "documentation":"<p> The program Packet ID (PID) as it is reported in the Program Association Table.</p>",
+          "locationName":"programPid"
+        },
+        "Streams":{
+          "shape":"__listOfTransportStream",
+          "documentation":"<p> The list of elementary transport streams in the program. The list includes video, audio, and data streams.</p>",
+          "locationName":"streams"
+        }
+      },
+      "documentation":"<p> The metadata of a single transport stream program.</p>"
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "TagKeys"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the resource that you want to untag. </p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "TagKeys":{
+          "shape":"__listOfString",
+          "documentation":"<p>The keys of the tags to be removed. </p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UpdateBridgeFlowSourceRequest":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"UpdateBridgeFlowSourceRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) that identifies the MediaConnect resource from which to delete tags.</p>",
+          "locationName":"flowArn"
+        },
+        "FlowVpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p>The name of the VPC interface attachment to use for this source. </p>",
+          "locationName":"flowVpcInterfaceAttachment"
+        }
+      },
+      "documentation":"<p> Update the flow source of the bridge. </p>"
+    },
+    "UpdateBridgeFlowSourceRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateBridgeNetworkOutputRequest":{
+      "type":"structure",
+      "members":{
+        "IpAddress":{
+          "shape":"String",
+          "documentation":"<p>The network output IP Address. </p>",
+          "locationName":"ipAddress"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p>The network output's gateway network name. </p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p>The network output port. </p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The network output protocol. </p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "Ttl":{
+          "shape":"Integer",
+          "documentation":"<p>The network output TTL. </p>",
+          "locationName":"ttl"
+        }
+      },
+      "documentation":"<p>Update an existing network output. </p>"
+    },
+    "UpdateBridgeNetworkSourceRequest":{
+      "type":"structure",
+      "members":{
+        "MulticastIp":{
+          "shape":"String",
+          "documentation":"<p> The network source multicast IP.</p>",
+          "locationName":"multicastIp"
+        },
+        "MulticastSourceSettings":{
+          "shape":"MulticastSourceSettings",
+          "documentation":"<p>The settings related to the multicast source. </p>",
+          "locationName":"multicastSourceSettings"
+        },
+        "NetworkName":{
+          "shape":"String",
+          "documentation":"<p>The network source's gateway network name. </p>",
+          "locationName":"networkName"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p>The network source port. </p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The network source protocol. </p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        }
+      },
+      "documentation":"<p> Update the network source of the bridge.</p>"
+    },
+    "UpdateBridgeOutputRequest":{
+      "type":"structure",
+      "required":[
+        "BridgeArn",
+        "OutputName"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"UpdateBridgeOutputRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "NetworkOutput":{
+          "shape":"UpdateBridgeNetworkOutputRequest",
+          "documentation":"<p> The network of the bridge output. </p>",
+          "locationName":"networkOutput"
+        },
+        "OutputName":{
+          "shape":"String",
+          "documentation":"<p> Tname of the output that you want to update. </p>",
+          "location":"uri",
+          "locationName":"OutputName"
+        }
+      }
+    },
+    "UpdateBridgeOutputRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "UpdateBridgeOutputResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the bridge that was updated. </p>",
+          "locationName":"bridgeArn"
+        },
+        "Output":{
+          "shape":"BridgeOutput",
+          "documentation":"<p> The bridge output that was updated. </p>",
+          "locationName":"output"
+        }
+      }
+    },
+    "UpdateBridgeRequest":{
+      "type":"structure",
+      "required":["BridgeArn"],
+      "members":{
+        "BridgeArn":{
+          "shape":"UpdateBridgeRequestBridgeArnString",
+          "documentation":"<p> TheAmazon Resource Name (ARN) of the bridge that you want to update. </p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "EgressGatewayBridge":{
+          "shape":"UpdateEgressGatewayBridgeRequest",
+          "documentation":"<p> A cloud-to-ground bridge. The content comes from an existing MediaConnect flow and is delivered to your premises. </p>",
+          "locationName":"egressGatewayBridge"
+        },
+        "IngressGatewayBridge":{
+          "shape":"UpdateIngressGatewayBridgeRequest",
+          "documentation":"<p> A ground-to-cloud bridge. The content originates at your premises and is delivered to the cloud. </p>",
+          "locationName":"ingressGatewayBridge"
+        },
+        "SourceFailoverConfig":{
+          "shape":"UpdateFailoverConfig",
+          "documentation":"<p> The settings for source failover. </p>",
+          "locationName":"sourceFailoverConfig"
+        }
+      }
+    },
+    "UpdateBridgeRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "UpdateBridgeResponse":{
+      "type":"structure",
+      "members":{
+        "Bridge":{
+          "shape":"Bridge",
+          "documentation":"<p> The bridge that was updated. </p>",
+          "locationName":"bridge"
+        }
+      }
+    },
+    "UpdateBridgeSourceRequest":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "SourceName"
-      ]
-    },
-    "UpdateBridgeSourceResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "Source": {
-          "shape": "BridgeSource",
-          "locationName": "source"
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"UpdateBridgeSourceRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update.</p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "FlowSource":{
+          "shape":"UpdateBridgeFlowSourceRequest",
+          "documentation":"<p> The name of the flow that you want to update.</p>",
+          "locationName":"flowSource"
+        },
+        "NetworkSource":{
+          "shape":"UpdateBridgeNetworkSourceRequest",
+          "documentation":"<p> The network for the bridge source. </p>",
+          "locationName":"networkSource"
+        },
+        "SourceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the source that you want to update. </p>",
+          "location":"uri",
+          "locationName":"SourceName"
         }
       }
     },
-    "UpdateBridgeStateRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "location": "uri",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge that you want to update."
-        },
-        "DesiredState": {
-          "shape": "DesiredState",
-          "locationName": "desiredState"
+    "UpdateBridgeSourceRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "UpdateBridgeSourceResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the updated bridge source. </p>",
+          "locationName":"bridgeArn"
+        },
+        "Source":{
+          "shape":"BridgeSource",
+          "documentation":"<p> The updated bridge source. </p>",
+          "locationName":"source"
         }
-      },
-      "documentation": "A request to update the bridge state.",
-      "required": [
+      }
+    },
+    "UpdateBridgeStateRequest":{
+      "type":"structure",
+      "required":[
         "BridgeArn",
         "DesiredState"
-      ]
-    },
-    "UpdateBridgeStateResponse": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "locationName": "bridgeArn",
-          "documentation": "The Amazon Resource Number (ARN) of the bridge."
-        },
-        "DesiredState": {
-          "shape": "DesiredState",
-          "locationName": "desiredState",
-          "documentation": "The state of the bridge. ACTIVE or STANDBY."
-        }
-      }
-    },
-    "UpdateEgressGatewayBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "Update an existing egress-type bridge."
-        }
-      }
-    },
-    "UpdateEncryption": {
-      "type": "structure",
-      "members": {
-        "Algorithm": {
-          "shape": "Algorithm",
-          "locationName": "algorithm",
-          "documentation": "The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256)."
-        },
-        "ConstantInitializationVector": {
-          "shape": "__string",
-          "locationName": "constantInitializationVector",
-          "documentation": "A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption."
-        },
-        "DeviceId": {
-          "shape": "__string",
-          "locationName": "deviceId",
-          "documentation": "The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "KeyType": {
-          "shape": "KeyType",
-          "locationName": "keyType",
-          "documentation": "The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key)."
-        },
-        "Region": {
-          "shape": "__string",
-          "locationName": "region",
-          "documentation": "The AWS Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "ResourceId": {
-          "shape": "__string",
-          "locationName": "resourceId",
-          "documentation": "An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        },
-        "RoleArn": {
-          "shape": "__string",
-          "locationName": "roleArn",
-          "documentation": "The ARN of the role that you created during setup (when you set up AWS Elemental MediaConnect as a trusted entity)."
-        },
-        "SecretArn": {
-          "shape": "__string",
-          "locationName": "secretArn",
-          "documentation": "The ARN of the secret that you created in AWS Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption."
-        },
-        "Url": {
-          "shape": "__string",
-          "locationName": "url",
-          "documentation": "The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption."
-        }
-      },
-      "documentation": "Information about the encryption of the flow."
-    },
-    "UpdateFailoverConfig": {
-      "type": "structure",
-      "members": {
-        "FailoverMode": {
-          "shape": "FailoverMode",
-          "locationName": "failoverMode",
-          "documentation": "The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams."
-        },
-        "RecoveryWindow": {
-          "shape": "__integer",
-          "locationName": "recoveryWindow",
-          "documentation": "Recovery window time to look for dash-7 packets"
-        },
-        "SourcePriority": {
-          "shape": "SourcePriority",
-          "locationName": "sourcePriority",
-          "documentation": "The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams."
-        },
-        "State": {
-          "shape": "State",
-          "locationName": "state"
-        }
-      },
-      "documentation": "The settings for source failover."
-    },
-    "UpdateFlowEntitlementRequest": {
-      "type": "structure",
-      "members": {
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the entitlement. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the subscriber or end user."
-        },
-        "Encryption": {
-          "shape": "UpdateEncryption",
-          "locationName": "encryption",
-          "documentation": "The type of encryption that will be used on the output associated with this entitlement. Allowable encryption types: static-key, speke."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:entitlement:.+$",
-          "location": "uri",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that you want to update."
-        },
-        "EntitlementStatus": {
-          "shape": "EntitlementStatus",
-          "locationName": "entitlementStatus",
-          "documentation": "An indication of whether you want to enable the entitlement to allow access, or disable it to stop streaming content to the subscriber’s flow temporarily. If you don’t specify the entitlementStatus field in your request, MediaConnect leaves the value unchanged."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that is associated with the entitlement that you want to update."
-        },
-        "Subscribers": {
-          "shape": "__listOf__string",
-          "locationName": "subscribers",
-          "documentation": "The AWS account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source."
+      ],
+      "members":{
+        "BridgeArn":{
+          "shape":"UpdateBridgeStateRequestBridgeArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the bridge that you want to update the state of. </p>",
+          "location":"uri",
+          "locationName":"BridgeArn"
+        },
+        "DesiredState":{
+          "shape":"DesiredState",
+          "documentation":"<p> The desired state for the bridge. </p>",
+          "locationName":"desiredState"
+        }
+      }
+    },
+    "UpdateBridgeStateRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "UpdateBridgeStateResponse":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the updated bridge. </p>",
+          "locationName":"bridgeArn"
+        },
+        "DesiredState":{
+          "shape":"DesiredState",
+          "documentation":"<p> The new state of the bridge. </p>",
+          "locationName":"desiredState"
+        }
+      }
+    },
+    "UpdateEgressGatewayBridgeRequest":{
+      "type":"structure",
+      "members":{
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum expected bitrate (in bps). </p>",
+          "locationName":"maxBitrate"
+        }
+      },
+      "documentation":"<p> Update an existing egress-type bridge.</p>"
+    },
+    "UpdateEncryption":{
+      "type":"structure",
+      "members":{
+        "Algorithm":{
+          "shape":"Algorithm",
+          "documentation":"<p> The type of algorithm that is used for the encryption (such as aes128, aes192, or aes256).</p>",
+          "locationName":"algorithm"
+        },
+        "ConstantInitializationVector":{
+          "shape":"String",
+          "documentation":"<p> A 128-bit, 16-byte hex value represented by a 32-character string, to be used with the key for encrypting content. This parameter is not valid for static key encryption.</p>",
+          "locationName":"constantInitializationVector"
+        },
+        "DeviceId":{
+          "shape":"String",
+          "documentation":"<p> The value of one of the devices that you configured with your digital rights management (DRM) platform key provider. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"deviceId"
+        },
+        "KeyType":{
+          "shape":"KeyType",
+          "documentation":"<p> The type of key that is used for the encryption. If no keyType is provided, the service will use the default setting (static-key).</p>",
+          "locationName":"keyType"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p> The Amazon Web Services Region that the API Gateway proxy endpoint was created in. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"region"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p> An identifier for the content. The service sends this value to the key server to identify the current endpoint. The resource ID is also known as the content ID. This parameter is required for SPEKE encryption and is not valid for static key encryption. </p>",
+          "locationName":"resourceId"
+        },
+        "RoleArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the role that you created during setup (when you set up MediaConnect as a trusted entity).</p>",
+          "locationName":"roleArn"
+        },
+        "SecretArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the secret that you created in Secrets Manager to store the encryption key. This parameter is required for static key encryption and is not valid for SPEKE encryption.</p>",
+          "locationName":"secretArn"
+        },
+        "Url":{
+          "shape":"String",
+          "documentation":"<p> The URL from the API Gateway proxy that you set up to talk to your key server. This parameter is required for SPEKE encryption and is not valid for static key encryption.</p>",
+          "locationName":"url"
+        }
+      },
+      "documentation":"<p> Information about the encryption of the flow.</p>"
+    },
+    "UpdateFailoverConfig":{
+      "type":"structure",
+      "members":{
+        "FailoverMode":{
+          "shape":"FailoverMode",
+          "documentation":"<p> The type of failover you choose for this flow. MERGE combines the source streams into a single stream, allowing graceful recovery from any single-source loss. FAILOVER allows switching between different streams.</p>",
+          "locationName":"failoverMode"
+        },
+        "RecoveryWindow":{
+          "shape":"Integer",
+          "documentation":"<p> Recovery window time to look for dash-7 packets.</p>",
+          "locationName":"recoveryWindow"
+        },
+        "SourcePriority":{
+          "shape":"SourcePriority",
+          "documentation":"<p> The priority you want to assign to a source. You can have a primary stream and a backup stream or two equally prioritized streams.</p>",
+          "locationName":"sourcePriority"
+        },
+        "State":{
+          "shape":"State",
+          "documentation":"<p>The state of source failover on the flow. If the state is inactive, the flow can have only one source. If the state is active, the flow can have one or two sources. </p>",
+          "locationName":"state"
+        }
+      },
+      "documentation":"<p> The settings for source failover.</p>"
+    },
+    "UpdateFlowEntitlementRequest":{
+      "type":"structure",
+      "required":[
+        "EntitlementArn",
+        "FlowArn"
+      ],
+      "members":{
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the entitlement. This description appears only on the MediaConnect console and will not be seen by the subscriber or end user.</p>",
+          "locationName":"description"
+        },
+        "Encryption":{
+          "shape":"UpdateEncryption",
+          "documentation":"<p> The type of encryption that will be used on the output associated with this entitlement. Allowable encryption types: static-key, speke.</p>",
+          "locationName":"encryption"
+        },
+        "EntitlementArn":{
+          "shape":"UpdateFlowEntitlementRequestEntitlementArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the entitlement that you want to update.</p>",
+          "location":"uri",
+          "locationName":"EntitlementArn"
+        },
+        "EntitlementStatus":{
+          "shape":"EntitlementStatus",
+          "documentation":"<p> An indication of whether you want to enable the entitlement to allow access, or disable it to stop streaming content to the subscriber’s flow temporarily. If you don’t specify the <code>entitlementStatus</code> field in your request, MediaConnect leaves the value unchanged.</p>",
+          "locationName":"entitlementStatus"
+        },
+        "FlowArn":{
+          "shape":"UpdateFlowEntitlementRequestFlowArnString",
+          "documentation":"<p> The ARN of the flow that is associated with the entitlement that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "Subscribers":{
+          "shape":"__listOfString",
+          "documentation":"<p> The Amazon Web Services account IDs that you want to share your content with. The receiving accounts (subscribers) will be allowed to create their own flow using your content as the source.</p>",
+          "locationName":"subscribers"
         }
-      },
-      "documentation": "The entitlement fields that you want to update.",
-      "required": [
-        "FlowArn",
-        "EntitlementArn"
-      ]
+      }
     },
-    "UpdateFlowEntitlementResponse": {
-      "type": "structure",
-      "members": {
-        "Entitlement": {
-          "shape": "Entitlement",
-          "locationName": "entitlement",
-          "documentation": "The new configuration of the entitlement that you updated."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that this entitlement was granted on."
+    "UpdateFlowEntitlementRequestEntitlementArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:entitlement:.+"
+    },
+    "UpdateFlowEntitlementRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateFlowEntitlementResponse":{
+      "type":"structure",
+      "members":{
+        "Entitlement":{
+          "shape":"Entitlement",
+          "documentation":"<p> The new configuration of the entitlement that you updated.</p>",
+          "locationName":"entitlement"
+        },
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that this entitlement was granted on.</p>",
+          "locationName":"flowArn"
         }
       }
     },
-    "UpdateFlowMediaStreamRequest": {
-      "type": "structure",
-      "members": {
-        "Attributes": {
-          "shape": "MediaStreamAttributesRequest",
-          "locationName": "attributes",
-          "documentation": "The attributes that you want to assign to the media stream."
-        },
-        "ClockRate": {
-          "shape": "__integer",
-          "locationName": "clockRate",
-          "documentation": "The sample rate (in Hz) for the stream. If the media stream type is video or ancillary data, set this value to 90000. If the media stream type is audio, set this value to either 48000 or 96000."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "Description"
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The Amazon Resource Name (ARN) of the flow."
-        },
-        "MediaStreamName": {
-          "shape": "__string",
-          "location": "uri",
-          "locationName": "mediaStreamName",
-          "documentation": "The name of the media stream that you want to update."
-        },
-        "MediaStreamType": {
-          "shape": "MediaStreamType",
-          "locationName": "mediaStreamType",
-          "documentation": "The type of media stream."
-        },
-        "VideoFormat": {
-          "shape": "__string",
-          "locationName": "videoFormat",
-          "documentation": "The resolution of the video."
-        }
-      },
-      "documentation": "The fields that you want to update in the media stream.",
-      "required": [
+    "UpdateFlowMediaStreamRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "MediaStreamName"
-      ]
-    },
-    "UpdateFlowMediaStreamResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that is associated with the media stream that you updated."
-        },
-        "MediaStream": {
-          "shape": "MediaStream",
-          "locationName": "mediaStream",
-          "documentation": "The media stream that you updated."
-        }
-      }
-    },
-    "UpdateFlowOutputRequest": {
-      "type": "structure",
-      "members": {
-        "CidrAllowList": {
-          "shape": "__listOf__string",
-          "locationName": "cidrAllowList",
-          "documentation": "The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description of the output. This description appears only on the AWS Elemental MediaConnect console and will not be seen by the end user."
-        },
-        "Destination": {
-          "shape": "__string",
-          "locationName": "destination",
-          "documentation": "The IP address where you want to send the output."
-        },
-        "Encryption": {
-          "shape": "UpdateEncryption",
-          "locationName": "encryption",
-          "documentation": "The type of key used for the encryption. If no keyType is provided, the service will use the default setting (static-key). Allowable encryption types: static-key."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that is associated with the output that you want to update."
-        },
-        "MaxLatency": {
-          "shape": "__integer",
-          "locationName": "maxLatency",
-          "documentation": "The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams."
-        },
-        "MediaStreamOutputConfigurations": {
-          "shape": "__listOfMediaStreamOutputConfigurationRequest",
-          "locationName": "mediaStreamOutputConfigurations",
-          "documentation": "The media streams that are associated with the output, and the parameters for those associations."
-        },
-        "MinLatency": {
-          "shape": "__integer",
-          "locationName": "minLatency",
-          "documentation": "The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency."
-        },
-        "OutputArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:output:.+$",
-          "location": "uri",
-          "locationName": "outputArn",
-          "documentation": "The ARN of the output that you want to update."
-        },
-        "Port": {
-          "shape": "__integer",
-          "locationName": "port",
-          "documentation": "The port to use when content is distributed to this output."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The protocol to use for the output."
-        },
-        "RemoteId": {
-          "shape": "__string",
-          "locationName": "remoteId",
-          "documentation": "The remote ID for the Zixi-pull stream."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SenderIpAddress": {
-          "shape": "__string",
-          "locationName": "senderIpAddress",
-          "documentation": "The IP address that the flow communicates with to initiate connection with the sender."
-        },
-        "SmoothingLatency": {
-          "shape": "__integer",
-          "locationName": "smoothingLatency",
-          "documentation": "The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams."
-        },
-        "StreamId": {
-          "shape": "__string",
-          "locationName": "streamId",
-          "documentation": "The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this output."
-        },
-        "OutputStatus": {
-          "shape": "OutputStatus",
-          "locationName": "outputStatus",
-          "documentation": "An indication of whether the output should transmit data or not. If you don't specify the outputStatus field in your request, MediaConnect leaves the value unchanged."
-        }
-      },
-      "documentation": "The fields that you want to update in the output.",
-      "required": [
-        "FlowArn",
-        "OutputArn"
-      ]
-    },
-    "UpdateFlowOutputResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that is associated with the updated output."
-        },
-        "Output": {
-          "shape": "Output",
-          "locationName": "output",
-          "documentation": "The new settings of the output that you updated."
+      ],
+      "members":{
+        "Attributes":{
+          "shape":"MediaStreamAttributesRequest",
+          "documentation":"<p> The attributes that you want to assign to the media stream.</p>",
+          "locationName":"attributes"
+        },
+        "ClockRate":{
+          "shape":"Integer",
+          "documentation":"<p>The sample rate for the stream. This value in measured in kHz. </p>",
+          "locationName":"clockRate"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description that can help you quickly identify what your media stream is used for. </p>",
+          "locationName":"description"
+        },
+        "FlowArn":{
+          "shape":"UpdateFlowMediaStreamRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that is associated with the media stream that you updated.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "MediaStreamName":{
+          "shape":"String",
+          "documentation":"<p> The media stream that you updated.</p>",
+          "location":"uri",
+          "locationName":"MediaStreamName"
+        },
+        "MediaStreamType":{
+          "shape":"MediaStreamType",
+          "documentation":"<p>The type of media stream. </p>",
+          "locationName":"mediaStreamType"
+        },
+        "VideoFormat":{
+          "shape":"String",
+          "documentation":"<p>The resolution of the video. </p>",
+          "locationName":"videoFormat"
         }
       }
     },
-    "UpdateFlowRequest": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that you want to update."
-        },
-        "SourceFailoverConfig": {
-          "shape": "UpdateFailoverConfig",
-          "locationName": "sourceFailoverConfig"
-        },
-        "Maintenance": {
-          "shape": "UpdateMaintenance",
-          "locationName": "maintenance"
-        },
-        "SourceMonitoringConfig": {
-          "shape": "MonitoringConfig",
-          "locationName": "sourceMonitoringConfig"
+    "UpdateFlowMediaStreamRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateFlowMediaStreamResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the flow that is associated with the media stream that you updated. </p>",
+          "locationName":"flowArn"
+        },
+        "MediaStream":{
+          "shape":"MediaStream",
+          "documentation":"<p>The media stream that you updated. </p>",
+          "locationName":"mediaStream"
         }
-      },
-      "documentation": "A request to update flow.",
-      "required": [
-        "FlowArn"
-      ]
+      }
     },
-    "UpdateFlowResponse": {
-      "type": "structure",
-      "members": {
-        "Flow": {
-          "shape": "Flow",
-          "locationName": "flow"
-        }
-      }
-    },
-    "UpdateFlowSourceRequest": {
-      "type": "structure",
-      "members": {
-        "Decryption": {
-          "shape": "UpdateEncryption",
-          "locationName": "decryption",
-          "documentation": "The type of encryption used on the content ingested from this source. Allowable encryption types: static-key."
-        },
-        "Description": {
-          "shape": "__string",
-          "locationName": "description",
-          "documentation": "A description for the source. This value is not used or seen outside of the current AWS Elemental MediaConnect account."
-        },
-        "EntitlementArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:entitlement:.+$",
-          "locationName": "entitlementArn",
-          "documentation": "The ARN of the entitlement that allows you to subscribe to this flow. The entitlement is set by the flow originator, and the ARN is generated as part of the originator's flow."
-        },
-        "FlowArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:flow:.+$",
-          "location": "uri",
-          "locationName": "flowArn",
-          "documentation": "The flow that is associated with the source that you want to update."
-        },
-        "IngestPort": {
-          "shape": "__integer",
-          "locationName": "ingestPort",
-          "documentation": "The port that the flow will be listening on for incoming content."
-        },
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The smoothing max bitrate (in bps) for RIST, RTP, and RTP-FEC streams."
-        },
-        "MaxLatency": {
-          "shape": "__integer",
-          "locationName": "maxLatency",
-          "documentation": "The maximum latency in milliseconds. This parameter applies only to RIST-based, Zixi-based, and Fujitsu-based streams."
-        },
-        "MaxSyncBuffer": {
-          "shape": "__integer",
-          "locationName": "maxSyncBuffer",
-          "documentation": "The size of the buffer (in milliseconds) to use to sync incoming source data."
-        },
-        "MediaStreamSourceConfigurations": {
-          "shape": "__listOfMediaStreamSourceConfigurationRequest",
-          "locationName": "mediaStreamSourceConfigurations",
-          "documentation": "The media streams that are associated with the source, and the parameters for those associations."
-        },
-        "MinLatency": {
-          "shape": "__integer",
-          "locationName": "minLatency",
-          "documentation": "The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency."
-        },
-        "Protocol": {
-          "shape": "Protocol",
-          "locationName": "protocol",
-          "documentation": "The protocol that is used by the source."
-        },
-        "SenderControlPort": {
-          "shape": "__integer",
-          "locationName": "senderControlPort",
-          "documentation": "The port that the flow uses to send outbound requests to initiate connection with the sender."
-        },
-        "SenderIpAddress": {
-          "shape": "__string",
-          "locationName": "senderIpAddress",
-          "documentation": "The IP address that the flow communicates with to initiate connection with the sender."
-        },
-        "SourceArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:source:.+$",
-          "location": "uri",
-          "locationName": "sourceArn",
-          "documentation": "The ARN of the source that you want to update."
-        },
-        "SourceListenerAddress": {
-          "shape": "__string",
-          "locationName": "sourceListenerAddress",
-          "documentation": "Source IP or domain name for SRT-caller protocol."
-        },
-        "SourceListenerPort": {
-          "shape": "__integer",
-          "locationName": "sourceListenerPort",
-          "documentation": "Source port for SRT-caller protocol."
-        },
-        "StreamId": {
-          "shape": "__string",
-          "locationName": "streamId",
-          "documentation": "The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams."
-        },
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface to use for this source."
-        },
-        "WhitelistCidr": {
-          "shape": "__string",
-          "locationName": "whitelistCidr",
-          "documentation": "The range of IP addresses that should be allowed to contribute content to your source. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16."
-        },
-        "GatewayBridgeSource": {
-          "shape": "UpdateGatewayBridgeSourceRequest",
-          "locationName": "gatewayBridgeSource",
-          "documentation": "The source configuration for cloud flows receiving a stream from a bridge."
-        }
-      },
-      "documentation": "A request to update the source of a flow.",
-      "required": [
+    "UpdateFlowOutputRequest":{
+      "type":"structure",
+      "required":[
+        "FlowArn",
+        "OutputArn"
+      ],
+      "members":{
+        "CidrAllowList":{
+          "shape":"__listOfString",
+          "documentation":"<p> The range of IP addresses that should be allowed to initiate output requests to this flow. These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.</p>",
+          "locationName":"cidrAllowList"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p> A description of the output. This description appears only on the MediaConnect console and will not be seen by the end user.</p>",
+          "locationName":"description"
+        },
+        "Destination":{
+          "shape":"String",
+          "documentation":"<p> The IP address where you want to send the output.</p>",
+          "locationName":"destination"
+        },
+        "Encryption":{
+          "shape":"UpdateEncryption",
+          "documentation":"<p> The type of key used for the encryption. If no <code>keyType</code> is provided, the service will use the default setting (static-key). Allowable encryption types: static-key.</p>",
+          "locationName":"encryption"
+        },
+        "FlowArn":{
+          "shape":"UpdateFlowOutputRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that is associated with the output that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "MaxLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams.</p>",
+          "locationName":"maxLatency"
+        },
+        "MediaStreamOutputConfigurations":{
+          "shape":"__listOfMediaStreamOutputConfigurationRequest",
+          "documentation":"<p> The media streams that are associated with the output, and the parameters for those associations.</p>",
+          "locationName":"mediaStreamOutputConfigurations"
+        },
+        "MinLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency.</p>",
+          "locationName":"minLatency"
+        },
+        "OutputArn":{
+          "shape":"UpdateFlowOutputRequestOutputArnString",
+          "documentation":"<p> The ARN of the output that you want to update.</p>",
+          "location":"uri",
+          "locationName":"OutputArn"
+        },
+        "Port":{
+          "shape":"Integer",
+          "documentation":"<p> The port to use when content is distributed to this output.</p>",
+          "locationName":"port"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p> The protocol to use for the output.</p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "RemoteId":{
+          "shape":"String",
+          "documentation":"<p> The remote ID for the Zixi-pull stream.</p>",
+          "locationName":"remoteId"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p> The port that the flow uses to send outbound requests to initiate connection with the sender.</p>",
+          "locationName":"senderControlPort"
+        },
+        "SenderIpAddress":{
+          "shape":"String",
+          "documentation":"<p> The IP address that the flow communicates with to initiate connection with the sender.</p>",
+          "locationName":"senderIpAddress"
+        },
+        "SmoothingLatency":{
+          "shape":"Integer",
+          "documentation":"<p> The smoothing latency in milliseconds for RIST, RTP, and RTP-FEC streams.</p>",
+          "locationName":"smoothingLatency"
+        },
+        "StreamId":{
+          "shape":"String",
+          "documentation":"<p> The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams.</p>",
+          "locationName":"streamId"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this output.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        },
+        "OutputStatus":{
+          "shape":"OutputStatus",
+          "documentation":"<p> An indication of whether the output should transmit data or not. If you don't specify the <code>outputStatus</code> field in your request, MediaConnect leaves the value unchanged.</p>",
+          "locationName":"outputStatus"
+        },
+        "NdiProgramName":{
+          "shape":"String",
+          "documentation":"<p> A suffix for the names of the NDI sources that the flow creates. If a custom name isn't specified, MediaConnect uses the output name. </p>",
+          "locationName":"ndiProgramName"
+        },
+        "NdiSpeedHqQuality":{
+          "shape":"Integer",
+          "documentation":"<p>A quality setting for the NDI Speed HQ encoder. </p>",
+          "locationName":"ndiSpeedHqQuality"
+        }
+      }
+    },
+    "UpdateFlowOutputRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateFlowOutputRequestOutputArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:output:.+"
+    },
+    "UpdateFlowOutputResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p> The ARN of the flow that is associated with the updated output.</p>",
+          "locationName":"flowArn"
+        },
+        "Output":{
+          "shape":"Output",
+          "documentation":"<p> The new settings of the output that you updated.</p>",
+          "locationName":"output"
+        }
+      }
+    },
+    "UpdateFlowRequest":{
+      "type":"structure",
+      "required":["FlowArn"],
+      "members":{
+        "FlowArn":{
+          "shape":"UpdateFlowRequestFlowArnString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the flow that you want to update.</p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "SourceFailoverConfig":{
+          "shape":"UpdateFailoverConfig",
+          "documentation":"<p> The settings for source failover. </p>",
+          "locationName":"sourceFailoverConfig"
+        },
+        "Maintenance":{
+          "shape":"UpdateMaintenance",
+          "documentation":"<p> The maintenance setting of the flow. </p>",
+          "locationName":"maintenance"
+        },
+        "SourceMonitoringConfig":{
+          "shape":"MonitoringConfig",
+          "documentation":"<p> The settings for source monitoring. </p>",
+          "locationName":"sourceMonitoringConfig"
+        },
+        "NdiConfig":{
+          "shape":"NdiConfig",
+          "documentation":"<p> Specifies the configuration settings for NDI outputs. Required when the flow includes NDI outputs. </p>",
+          "locationName":"ndiConfig"
+        },
+        "FlowSize":{
+          "shape":"FlowSize",
+          "documentation":"<p> Determines the processing capacity and feature set of the flow. </p>",
+          "locationName":"flowSize"
+        }
+      }
+    },
+    "UpdateFlowRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateFlowResponse":{
+      "type":"structure",
+      "members":{
+        "Flow":{
+          "shape":"Flow",
+          "documentation":"<p> The updated flow. </p>",
+          "locationName":"flow"
+        }
+      }
+    },
+    "UpdateFlowSourceRequest":{
+      "type":"structure",
+      "required":[
         "FlowArn",
         "SourceArn"
-      ]
-    },
-    "UpdateFlowSourceResponse": {
-      "type": "structure",
-      "members": {
-        "FlowArn": {
-          "shape": "__string",
-          "locationName": "flowArn",
-          "documentation": "The ARN of the flow that you want to update."
-        },
-        "Source": {
-          "shape": "Source",
-          "locationName": "source",
-          "documentation": "The settings for the source of the flow."
-        }
-      }
-    },
-    "UpdateGatewayBridgeSourceRequest": {
-      "type": "structure",
-      "members": {
-        "BridgeArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:bridge:.+$",
-          "locationName": "bridgeArn",
-          "documentation": "The ARN of the bridge feeding this flow."
-        },
-        "VpcInterfaceAttachment": {
-          "shape": "VpcInterfaceAttachment",
-          "locationName": "vpcInterfaceAttachment",
-          "documentation": "The name of the VPC interface attachment to use for this bridge source."
-        }
-      },
-      "documentation": "The source configuration for cloud flows receiving a stream from a bridge."
-    },
-    "UpdateGatewayInstanceRequest": {
-      "type": "structure",
-      "members": {
-        "BridgePlacement": {
-          "shape": "BridgePlacement",
-          "locationName": "bridgePlacement",
-          "documentation": "The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance."
-        },
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "pattern": "^arn:.+:mediaconnect.+:gateway:.+:instance:.+$",
-          "location": "uri",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the instance that you want to update."
-        }
-      },
-      "documentation": "A request to update gateway instance state.",
-      "required": [
-        "GatewayInstanceArn"
-      ]
-    },
-    "UpdateGatewayInstanceResponse": {
-      "type": "structure",
-      "members": {
-        "BridgePlacement": {
-          "shape": "BridgePlacement",
-          "locationName": "bridgePlacement",
-          "documentation": "The availability of the instance to host new bridges. The bridgePlacement property can be LOCKED or AVAILABLE. If it is LOCKED, no new bridges can be deployed to this instance. If it is AVAILABLE, new bridges can be added to this instance."
-        },
-        "GatewayInstanceArn": {
-          "shape": "__string",
-          "locationName": "gatewayInstanceArn",
-          "documentation": "The Amazon Resource Name (ARN) of the instance."
-        }
-      }
-    },
-    "UpdateIngressGatewayBridgeRequest": {
-      "type": "structure",
-      "members": {
-        "MaxBitrate": {
-          "shape": "__integer",
-          "locationName": "maxBitrate",
-          "documentation": "The maximum expected bitrate (in bps)."
-        },
-        "MaxOutputs": {
-          "shape": "__integer",
-          "locationName": "maxOutputs",
-          "documentation": "The maximum number of expected outputs."
-        }
-      }
-    },
-    "UpdateMaintenance": {
-      "type": "structure",
-      "members": {
-        "MaintenanceDay": {
-          "shape": "MaintenanceDay",
-          "locationName": "maintenanceDay",
-          "documentation": "A day of a week when the maintenance will happen. use Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday."
-        },
-        "MaintenanceScheduledDate": {
-          "shape": "__string",
-          "locationName": "maintenanceScheduledDate",
-          "documentation": "A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30."
-        },
-        "MaintenanceStartHour": {
-          "shape": "__string",
-          "locationName": "maintenanceStartHour",
-          "documentation": "UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00."
-        }
-      },
-      "documentation": "Update maintenance setting for a flow"
-    },
-    "VideoMonitoringSetting": {
-      "type": "structure",
-      "members": {
-        "BlackFrames": {
-          "shape": "BlackFrames",
-          "locationName": "blackFrames",
-          "documentation": "Detects video frames that are black."
-        },
-        "FrozenFrames": {
-          "shape": "FrozenFrames",
-          "locationName": "frozenFrames",
-          "documentation": "Detects video frames that have not changed."
-        }
-      },
-      "documentation": "Specifies the configuration for video stream metrics monitoring."
-    },
-    "VpcInterface": {
-      "type": "structure",
-      "members": {
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "Immutable and has to be a unique against other VpcInterfaces in this Flow."
-        },
-        "NetworkInterfaceIds": {
-          "shape": "__listOf__string",
-          "locationName": "networkInterfaceIds",
-          "documentation": "IDs of the network interfaces created in customer's account by MediaConnect."
-        },
-        "NetworkInterfaceType": {
-          "shape": "NetworkInterfaceType",
-          "locationName": "networkInterfaceType",
-          "documentation": "The type of network interface."
-        },
-        "RoleArn": {
-          "shape": "__string",
-          "locationName": "roleArn",
-          "documentation": "Role Arn MediaConnect can assumes to create ENIs in customer's account"
-        },
-        "SecurityGroupIds": {
-          "shape": "__listOf__string",
-          "locationName": "securityGroupIds",
-          "documentation": "Security Group IDs to be used on ENI."
-        },
-        "SubnetId": {
-          "shape": "__string",
-          "locationName": "subnetId",
-          "documentation": "Subnet must be in the AZ of the Flow"
-        }
-      },
-      "documentation": "The settings for a VPC Source.",
-      "required": [
-        "NetworkInterfaceType",
+      ],
+      "members":{
+        "Decryption":{
+          "shape":"UpdateEncryption",
+          "documentation":"<p>The type of encryption that is used on the content ingested from the source. </p>",
+          "locationName":"decryption"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of the source. This description is not visible outside of the current Amazon Web Services account. </p>",
+          "locationName":"description"
+        },
+        "EntitlementArn":{
+          "shape":"UpdateFlowSourceRequestEntitlementArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the entitlement that allows you to subscribe to the flow. The entitlement is set by the content originator, and the ARN is generated as part of the originator's flow. </p>",
+          "locationName":"entitlementArn"
+        },
+        "FlowArn":{
+          "shape":"UpdateFlowSourceRequestFlowArnString",
+          "documentation":"<p> The ARN of the flow that you want to update. </p>",
+          "location":"uri",
+          "locationName":"FlowArn"
+        },
+        "IngestPort":{
+          "shape":"Integer",
+          "documentation":"<p>The port that the flow listens on for incoming content. If the protocol of the source is Zixi, the port must be set to 2088. </p>",
+          "locationName":"ingestPort"
+        },
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum bitrate for RIST, RTP, and RTP-FEC streams. </p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxLatency":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum latency in milliseconds. This parameter applies only to RIST-based and Zixi-based streams. </p>",
+          "locationName":"maxLatency"
+        },
+        "MaxSyncBuffer":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the buffer (in milliseconds) to use to sync incoming source data. </p>",
+          "locationName":"maxSyncBuffer"
+        },
+        "MediaStreamSourceConfigurations":{
+          "shape":"__listOfMediaStreamSourceConfigurationRequest",
+          "documentation":"<p>The media stream that is associated with the source, and the parameters for that association. </p>",
+          "locationName":"mediaStreamSourceConfigurations"
+        },
+        "MinLatency":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum latency in milliseconds for SRT-based streams. In streams that use the SRT protocol, this value that you set on your MediaConnect source or output represents the minimal potential latency of that connection. The latency of the stream is set to the highest number between the sender’s minimum latency and the receiver’s minimum latency. </p>",
+          "locationName":"minLatency"
+        },
+        "Protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The protocol that the source uses to deliver the content to MediaConnect. </p> <note> <p>Elemental MediaConnect no longer supports the Fujitsu QoS protocol. This reference is maintained for legacy purposes only.</p> </note>",
+          "locationName":"protocol"
+        },
+        "SenderControlPort":{
+          "shape":"Integer",
+          "documentation":"<p>The port that the flow uses to send outbound requests to initiate connection with the sender. </p>",
+          "locationName":"senderControlPort"
+        },
+        "SenderIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address that the flow communicates with to initiate connection with the sender. </p>",
+          "locationName":"senderIpAddress"
+        },
+        "SourceArn":{
+          "shape":"UpdateFlowSourceRequestSourceArnString",
+          "documentation":"<p>The ARN of the source that you want to update. </p>",
+          "location":"uri",
+          "locationName":"SourceArn"
+        },
+        "SourceListenerAddress":{
+          "shape":"String",
+          "documentation":"<p>The source IP or domain name for SRT-caller protocol. </p>",
+          "locationName":"sourceListenerAddress"
+        },
+        "SourceListenerPort":{
+          "shape":"Integer",
+          "documentation":"<p>Source port for SRT-caller protocol. </p>",
+          "locationName":"sourceListenerPort"
+        },
+        "StreamId":{
+          "shape":"String",
+          "documentation":"<p>The stream ID that you want to use for this transport. This parameter applies only to Zixi and SRT caller-based streams. </p>",
+          "locationName":"streamId"
+        },
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p>The name of the VPC interface that you want to send your output to.</p>",
+          "locationName":"vpcInterfaceName"
+        },
+        "WhitelistCidr":{
+          "shape":"String",
+          "documentation":"<p>The range of IP addresses that are allowed to contribute content to your source. Format the IP addresses as a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. </p>",
+          "locationName":"whitelistCidr"
+        },
+        "GatewayBridgeSource":{
+          "shape":"UpdateGatewayBridgeSourceRequest",
+          "documentation":"<p>The source configuration for cloud flows receiving a stream from a bridge. </p>",
+          "locationName":"gatewayBridgeSource"
+        }
+      }
+    },
+    "UpdateFlowSourceRequestEntitlementArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:entitlement:.+"
+    },
+    "UpdateFlowSourceRequestFlowArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:flow:.+"
+    },
+    "UpdateFlowSourceRequestSourceArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:source:.+"
+    },
+    "UpdateFlowSourceResponse":{
+      "type":"structure",
+      "members":{
+        "FlowArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the flow that you was updated. </p>",
+          "locationName":"flowArn"
+        },
+        "Source":{
+          "shape":"Source",
+          "documentation":"<p>The details of the sources that are assigned to the flow. </p>",
+          "locationName":"source"
+        }
+      }
+    },
+    "UpdateGatewayBridgeSourceRequest":{
+      "type":"structure",
+      "members":{
+        "BridgeArn":{
+          "shape":"UpdateGatewayBridgeSourceRequestBridgeArnString",
+          "documentation":"<p> The ARN of the bridge feeding this flow.</p>",
+          "locationName":"bridgeArn"
+        },
+        "VpcInterfaceAttachment":{
+          "shape":"VpcInterfaceAttachment",
+          "documentation":"<p> The name of the VPC interface attachment to use for this bridge source.</p>",
+          "locationName":"vpcInterfaceAttachment"
+        }
+      },
+      "documentation":"<p> The source configuration for cloud flows receiving a stream from a bridge.</p>"
+    },
+    "UpdateGatewayBridgeSourceRequestBridgeArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:bridge:.+"
+    },
+    "UpdateGatewayInstanceRequest":{
+      "type":"structure",
+      "required":["GatewayInstanceArn"],
+      "members":{
+        "BridgePlacement":{
+          "shape":"BridgePlacement",
+          "documentation":"<p>The state of the instance. <code>ACTIVE</code> or <code>INACTIVE</code>. </p>",
+          "locationName":"bridgePlacement"
+        },
+        "GatewayInstanceArn":{
+          "shape":"UpdateGatewayInstanceRequestGatewayInstanceArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the gateway instance that you want to update. </p>",
+          "location":"uri",
+          "locationName":"GatewayInstanceArn"
+        }
+      }
+    },
+    "UpdateGatewayInstanceRequestGatewayInstanceArnString":{
+      "type":"string",
+      "pattern":"arn:.+:mediaconnect.+:gateway:.+:instance:.+"
+    },
+    "UpdateGatewayInstanceResponse":{
+      "type":"structure",
+      "members":{
+        "BridgePlacement":{
+          "shape":"BridgePlacement",
+          "documentation":"<p>The state of the instance. <code>ACTIVE</code> or <code>INACTIVE</code>. </p>",
+          "locationName":"bridgePlacement"
+        },
+        "GatewayInstanceArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the instance that was updated. </p>",
+          "locationName":"gatewayInstanceArn"
+        }
+      }
+    },
+    "UpdateIngressGatewayBridgeRequest":{
+      "type":"structure",
+      "members":{
+        "MaxBitrate":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum expected bitrate (in bps).</p>",
+          "locationName":"maxBitrate"
+        },
+        "MaxOutputs":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum number of expected outputs.</p>",
+          "locationName":"maxOutputs"
+        }
+      },
+      "documentation":"<p> Update an existing ingress-type bridge. </p>"
+    },
+    "UpdateMaintenance":{
+      "type":"structure",
+      "members":{
+        "MaintenanceDay":{
+          "shape":"MaintenanceDay",
+          "documentation":"<p> A day of a week when the maintenance will happen.</p>",
+          "locationName":"maintenanceDay"
+        },
+        "MaintenanceScheduledDate":{
+          "shape":"String",
+          "documentation":"<p> A scheduled date in ISO UTC format when the maintenance will happen. Use YYYY-MM-DD format. Example: 2021-01-30.</p>",
+          "locationName":"maintenanceScheduledDate"
+        },
+        "MaintenanceStartHour":{
+          "shape":"String",
+          "documentation":"<p> UTC time when the maintenance will happen. Use 24-hour HH:MM format. Minutes must be 00. Example: 13:00. The default value is 02:00.</p>",
+          "locationName":"maintenanceStartHour"
+        }
+      },
+      "documentation":"<p> Update maintenance setting for a flow.</p>"
+    },
+    "VideoMonitoringSetting":{
+      "type":"structure",
+      "members":{
+        "BlackFrames":{
+          "shape":"BlackFrames",
+          "documentation":"<p>Detects video frames that are black. </p>",
+          "locationName":"blackFrames"
+        },
+        "FrozenFrames":{
+          "shape":"FrozenFrames",
+          "documentation":"<p>Detects video frames that have not changed. </p>",
+          "locationName":"frozenFrames"
+        }
+      },
+      "documentation":"<p>Specifies the configuration for video stream metrics monitoring.</p>"
+    },
+    "VpcInterface":{
+      "type":"structure",
+      "required":[
+        "Name",
         "NetworkInterfaceIds",
-        "SubnetId",
-        "SecurityGroupIds",
+        "NetworkInterfaceType",
         "RoleArn",
-        "Name"
-      ]
-    },
-    "VpcInterfaceAttachment": {
-      "type": "structure",
-      "members": {
-        "VpcInterfaceName": {
-          "shape": "__string",
-          "locationName": "vpcInterfaceName",
-          "documentation": "The name of the VPC interface to use for this resource."
-        }
-      },
-      "documentation": "The settings for attaching a VPC interface to an resource."
-    },
-    "VpcInterfaceRequest": {
-      "type": "structure",
-      "members": {
-        "Name": {
-          "shape": "__string",
-          "locationName": "name",
-          "documentation": "The name of the VPC Interface. This value must be unique within the current flow."
-        },
-        "NetworkInterfaceType": {
-          "shape": "NetworkInterfaceType",
-          "locationName": "networkInterfaceType",
-          "documentation": "The type of network interface. If this value is not included in the request, MediaConnect uses ENA as the networkInterfaceType."
-        },
-        "RoleArn": {
-          "shape": "__string",
-          "locationName": "roleArn",
-          "documentation": "Role Arn MediaConnect can assumes to create ENIs in customer's account"
-        },
-        "SecurityGroupIds": {
-          "shape": "__listOf__string",
-          "locationName": "securityGroupIds",
-          "documentation": "Security Group IDs to be used on ENI."
-        },
-        "SubnetId": {
-          "shape": "__string",
-          "locationName": "subnetId",
-          "documentation": "Subnet must be in the AZ of the Flow"
-        }
-      },
-      "documentation": "Desired VPC Interface for a Flow",
-      "required": [
-        "SubnetId",
         "SecurityGroupIds",
+        "SubnetId"
+      ],
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p> Immutable and has to be a unique against other VpcInterfaces in this Flow.</p>",
+          "locationName":"name"
+        },
+        "NetworkInterfaceIds":{
+          "shape":"__listOfString",
+          "documentation":"<p> IDs of the network interfaces created in customer's account by MediaConnect.</p>",
+          "locationName":"networkInterfaceIds"
+        },
+        "NetworkInterfaceType":{
+          "shape":"NetworkInterfaceType",
+          "documentation":"<p> The type of network interface.</p>",
+          "locationName":"networkInterfaceType"
+        },
+        "RoleArn":{
+          "shape":"String",
+          "documentation":"<p> A role Arn MediaConnect can assume to create ENIs in your account.</p>",
+          "locationName":"roleArn"
+        },
+        "SecurityGroupIds":{
+          "shape":"__listOfString",
+          "documentation":"<p> Security Group IDs to be used on ENI.</p>",
+          "locationName":"securityGroupIds"
+        },
+        "SubnetId":{
+          "shape":"String",
+          "documentation":"<p> Subnet must be in the AZ of the Flow. </p>",
+          "locationName":"subnetId"
+        }
+      },
+      "documentation":"<p> The settings for a VPC source.</p>"
+    },
+    "VpcInterfaceAttachment":{
+      "type":"structure",
+      "members":{
+        "VpcInterfaceName":{
+          "shape":"String",
+          "documentation":"<p> The name of the VPC interface to use for this resource.</p>",
+          "locationName":"vpcInterfaceName"
+        }
+      },
+      "documentation":"<p> The settings for attaching a VPC interface to an resource. </p>"
+    },
+    "VpcInterfaceRequest":{
+      "type":"structure",
+      "required":[
+        "Name",
         "RoleArn",
-        "Name"
-      ]
-    },
-    "__boolean": {
-      "type": "boolean"
-    },
-    "__double": {
-      "type": "double"
-    },
-    "__integer": {
-      "type": "integer"
-    },
-    "__listOfAddBridgeOutputRequest": {
-      "type": "list",
-      "member": {
-        "shape": "AddBridgeOutputRequest"
-      }
-    },
-    "__listOfAddBridgeSourceRequest": {
-      "type": "list",
-      "member": {
-        "shape": "AddBridgeSourceRequest"
-      }
-    },
-    "__listOfAddMediaStreamRequest": {
-      "type": "list",
-      "member": {
-        "shape": "AddMediaStreamRequest"
-      }
-    },
-    "__listOfAddOutputRequest": {
-      "type": "list",
-      "member": {
-        "shape": "AddOutputRequest"
-      }
-    },
-    "__listOfAudioMonitoringSetting": {
-      "type": "list",
-      "member": {
-        "shape": "AudioMonitoringSetting"
-      }
-    },
-    "__listOfBridgeOutput": {
-      "type": "list",
-      "member": {
-        "shape": "BridgeOutput"
-      }
-    },
-    "__listOfBridgeSource": {
-      "type": "list",
-      "member": {
-        "shape": "BridgeSource"
-      }
-    },
-    "__listOfDestinationConfiguration": {
-      "type": "list",
-      "member": {
-        "shape": "DestinationConfiguration"
-      }
-    },
-    "__listOfDestinationConfigurationRequest": {
-      "type": "list",
-      "member": {
-        "shape": "DestinationConfigurationRequest"
-      }
-    },
-    "__listOfEntitlement": {
-      "type": "list",
-      "member": {
-        "shape": "Entitlement"
-      }
-    },
-    "__listOfGatewayNetwork": {
-      "type": "list",
-      "member": {
-        "shape": "GatewayNetwork"
-      }
-    },
-    "__listOfGrantEntitlementRequest": {
-      "type": "list",
-      "member": {
-        "shape": "GrantEntitlementRequest"
-      }
-    },
-    "__listOfInputConfiguration": {
-      "type": "list",
-      "member": {
-        "shape": "InputConfiguration"
-      }
-    },
-    "__listOfInputConfigurationRequest": {
-      "type": "list",
-      "member": {
-        "shape": "InputConfigurationRequest"
-      }
-    },
-    "__listOfListedBridge": {
-      "type": "list",
-      "member": {
-        "shape": "ListedBridge"
-      }
-    },
-    "__listOfListedEntitlement": {
-      "type": "list",
-      "member": {
-        "shape": "ListedEntitlement"
-      }
-    },
-    "__listOfListedFlow": {
-      "type": "list",
-      "member": {
-        "shape": "ListedFlow"
-      }
-    },
-    "__listOfListedGateway": {
-      "type": "list",
-      "member": {
-        "shape": "ListedGateway"
-      }
-    },
-    "__listOfListedGatewayInstance": {
-      "type": "list",
-      "member": {
-        "shape": "ListedGatewayInstance"
-      }
-    },
-    "__listOfMediaStream": {
-      "type": "list",
-      "member": {
-        "shape": "MediaStream"
-      }
-    },
-    "__listOfMediaStreamOutputConfiguration": {
-      "type": "list",
-      "member": {
-        "shape": "MediaStreamOutputConfiguration"
-      }
-    },
-    "__listOfMediaStreamOutputConfigurationRequest": {
-      "type": "list",
-      "member": {
-        "shape": "MediaStreamOutputConfigurationRequest"
-      }
-    },
-    "__listOfMediaStreamSourceConfiguration": {
-      "type": "list",
-      "member": {
-        "shape": "MediaStreamSourceConfiguration"
-      }
-    },
-    "__listOfMediaStreamSourceConfigurationRequest": {
-      "type": "list",
-      "member": {
-        "shape": "MediaStreamSourceConfigurationRequest"
-      }
-    },
-    "__listOfMessageDetail": {
-      "type": "list",
-      "member": {
-        "shape": "MessageDetail"
-      }
-    },
-    "__listOfOffering": {
-      "type": "list",
-      "member": {
-        "shape": "Offering"
-      }
-    },
-    "__listOfOutput": {
-      "type": "list",
-      "member": {
-        "shape": "Output"
-      }
-    },
-    "__listOfReservation": {
-      "type": "list",
-      "member": {
-        "shape": "Reservation"
-      }
-    },
-    "__listOfSetSourceRequest": {
-      "type": "list",
-      "member": {
-        "shape": "SetSourceRequest"
-      }
-    },
-    "__listOfSource": {
-      "type": "list",
-      "member": {
-        "shape": "Source"
-      }
-    },
-    "__listOfTransportStream": {
-      "type": "list",
-      "member": {
-        "shape": "TransportStream"
-      }
-    },
-    "__listOfTransportStreamProgram": {
-      "type": "list",
-      "member": {
-        "shape": "TransportStreamProgram"
-      }
-    },
-    "__listOfVideoMonitoringSetting": {
-      "type": "list",
-      "member": {
-        "shape": "VideoMonitoringSetting"
-      }
-    },
-    "__listOfVpcInterface": {
-      "type": "list",
-      "member": {
-        "shape": "VpcInterface"
-      }
-    },
-    "__listOfVpcInterfaceRequest": {
-      "type": "list",
-      "member": {
-        "shape": "VpcInterfaceRequest"
-      }
-    },
-    "__listOf__integer": {
-      "type": "list",
-      "member": {
-        "shape": "__integer"
-      }
-    },
-    "__listOf__string": {
-      "type": "list",
-      "member": {
-        "shape": "__string"
-      }
-    },
-    "__long": {
-      "type": "long"
-    },
-    "__mapOf__string": {
-      "type": "map",
-      "key": {
-        "shape": "__string"
-      },
-      "value": {
-        "shape": "__string"
-      }
-    },
-    "__string": {
-      "type": "string"
-    },
-    "__timestampIso8601": {
-      "type": "timestamp",
-      "timestampFormat": "iso8601"
-    },
-    "__timestampUnix": {
-      "type": "timestamp",
-      "timestampFormat": "unixTimestamp"
+        "SecurityGroupIds",
+        "SubnetId"
+      ],
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name for the VPC interface. This name must be unique within the flow. </p>",
+          "locationName":"name"
+        },
+        "NetworkInterfaceType":{
+          "shape":"NetworkInterfaceType",
+          "documentation":"<p>The type of network interface. </p>",
+          "locationName":"networkInterfaceType"
+        },
+        "RoleArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the role that you created when you set up MediaConnect as a trusted service. </p>",
+          "locationName":"roleArn"
+        },
+        "SecurityGroupIds":{
+          "shape":"__listOfString",
+          "documentation":"<p>A virtual firewall to control inbound and outbound traffic. </p>",
+          "locationName":"securityGroupIds"
+        },
+        "SubnetId":{
+          "shape":"String",
+          "documentation":"<p> The subnet IDs that you want to use for your VPC interface. A range of IP addresses in your VPC. When you create your VPC, you specify a range of IPv4 addresses for the VPC in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16. This is the primary CIDR block for your VPC. When you create a subnet for your VPC, you specify the CIDR block for the subnet, which is a subset of the VPC CIDR block. The subnets that you use across all VPC interfaces on the flow must be in the same Availability Zone as the flow. </p>",
+          "locationName":"subnetId"
+        },
+        "VpcInterfaceTags":{
+          "shape":"__mapOfString",
+          "documentation":"<p> The key-value pairs that can be used to tag and organize the VPC network interface. </p>",
+          "locationName":"vpcInterfaceTags"
+        }
+      },
+      "documentation":"<p>The details of the VPC interfaces that you want to add to the flow. </p>"
+    },
+    "__listOfAddBridgeOutputRequest":{
+      "type":"list",
+      "member":{"shape":"AddBridgeOutputRequest"}
+    },
+    "__listOfAddBridgeSourceRequest":{
+      "type":"list",
+      "member":{"shape":"AddBridgeSourceRequest"}
+    },
+    "__listOfAddMediaStreamRequest":{
+      "type":"list",
+      "member":{"shape":"AddMediaStreamRequest"}
+    },
+    "__listOfAddOutputRequest":{
+      "type":"list",
+      "member":{"shape":"AddOutputRequest"}
+    },
+    "__listOfAudioMonitoringSetting":{
+      "type":"list",
+      "member":{"shape":"AudioMonitoringSetting"}
+    },
+    "__listOfBridgeOutput":{
+      "type":"list",
+      "member":{"shape":"BridgeOutput"}
+    },
+    "__listOfBridgeSource":{
+      "type":"list",
+      "member":{"shape":"BridgeSource"}
+    },
+    "__listOfDestinationConfiguration":{
+      "type":"list",
+      "member":{"shape":"DestinationConfiguration"}
+    },
+    "__listOfDestinationConfigurationRequest":{
+      "type":"list",
+      "member":{"shape":"DestinationConfigurationRequest"}
+    },
+    "__listOfEntitlement":{
+      "type":"list",
+      "member":{"shape":"Entitlement"}
+    },
+    "__listOfGatewayNetwork":{
+      "type":"list",
+      "member":{"shape":"GatewayNetwork"}
+    },
+    "__listOfGrantEntitlementRequest":{
+      "type":"list",
+      "member":{"shape":"GrantEntitlementRequest"}
+    },
+    "__listOfInputConfiguration":{
+      "type":"list",
+      "member":{"shape":"InputConfiguration"}
+    },
+    "__listOfInputConfigurationRequest":{
+      "type":"list",
+      "member":{"shape":"InputConfigurationRequest"}
+    },
+    "__listOfInteger":{
+      "type":"list",
+      "member":{"shape":"Integer"}
+    },
+    "__listOfListedBridge":{
+      "type":"list",
+      "member":{"shape":"ListedBridge"}
+    },
+    "__listOfListedEntitlement":{
+      "type":"list",
+      "member":{"shape":"ListedEntitlement"}
+    },
+    "__listOfListedFlow":{
+      "type":"list",
+      "member":{"shape":"ListedFlow"}
+    },
+    "__listOfListedGateway":{
+      "type":"list",
+      "member":{"shape":"ListedGateway"}
+    },
+    "__listOfListedGatewayInstance":{
+      "type":"list",
+      "member":{"shape":"ListedGatewayInstance"}
+    },
+    "__listOfMediaStream":{
+      "type":"list",
+      "member":{"shape":"MediaStream"}
+    },
+    "__listOfMediaStreamOutputConfiguration":{
+      "type":"list",
+      "member":{"shape":"MediaStreamOutputConfiguration"}
+    },
+    "__listOfMediaStreamOutputConfigurationRequest":{
+      "type":"list",
+      "member":{"shape":"MediaStreamOutputConfigurationRequest"}
+    },
+    "__listOfMediaStreamSourceConfiguration":{
+      "type":"list",
+      "member":{"shape":"MediaStreamSourceConfiguration"}
+    },
+    "__listOfMediaStreamSourceConfigurationRequest":{
+      "type":"list",
+      "member":{"shape":"MediaStreamSourceConfigurationRequest"}
+    },
+    "__listOfMessageDetail":{
+      "type":"list",
+      "member":{"shape":"MessageDetail"}
+    },
+    "__listOfNdiDiscoveryServerConfig":{
+      "type":"list",
+      "member":{"shape":"NdiDiscoveryServerConfig"}
+    },
+    "__listOfOffering":{
+      "type":"list",
+      "member":{"shape":"Offering"}
+    },
+    "__listOfOutput":{
+      "type":"list",
+      "member":{"shape":"Output"}
+    },
+    "__listOfReservation":{
+      "type":"list",
+      "member":{"shape":"Reservation"}
+    },
+    "__listOfSetSourceRequest":{
+      "type":"list",
+      "member":{"shape":"SetSourceRequest"}
+    },
+    "__listOfSource":{
+      "type":"list",
+      "member":{"shape":"Source"}
+    },
+    "__listOfString":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "__listOfTransportStream":{
+      "type":"list",
+      "member":{"shape":"TransportStream"}
+    },
+    "__listOfTransportStreamProgram":{
+      "type":"list",
+      "member":{"shape":"TransportStreamProgram"}
+    },
+    "__listOfVideoMonitoringSetting":{
+      "type":"list",
+      "member":{"shape":"VideoMonitoringSetting"}
+    },
+    "__listOfVpcInterface":{
+      "type":"list",
+      "member":{"shape":"VpcInterface"}
+    },
+    "__listOfVpcInterfaceRequest":{
+      "type":"list",
+      "member":{"shape":"VpcInterfaceRequest"}
+    },
+    "__mapOfString":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"String"}
     }
   },
-  "documentation": "API for AWS Elemental MediaConnect"
-}
\ No newline at end of file
+  "documentation":"<p>Welcome to the Elemental MediaConnect API reference. </p> <p>MediaConnect is a service that lets you ingest live video content into the cloud and distribute it to destinations all over the world, both inside and outside the Amazon Web Services cloud. This API reference provides descriptions, syntax, and usage examples for each of the actions and data types that are supported by MediaConnect. </p> <p>Use the following links to get started with the MediaConnect API:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/mediaconnect/latest/api/API_Operations.html\">Actions</a>: An alphabetical list of all MediaConnect API operations.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mediaconnect/latest/api/API_Types.html\">Data types</a>: An alphabetical list of all MediaConnect data types.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mediaconnect/latest/api/CommonParameters.html\">Common parameters</a>: Parameters that all operations can use.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mediaconnect/latest/api/CommonErrors.html\">Common errors</a>: Client and server errors that all operations can return.</p> </li> </ul>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/waiters-2.json 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/mediaconnect/2018-11-14/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediaconnect/2018-11-14/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,118 +1,104 @@
 {
-  "version": 2,
-  "waiters": {
-    "FlowActive": {
-      "description": "Wait until a flow is active",
-      "operation": "DescribeFlow",
-      "delay": 3,
-      "maxAttempts": 40,
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "ACTIVE"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "STARTING"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "UPDATING"
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 500
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 503
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "ERROR"
-        }
-      ]
+  "version" : 2,
+  "waiters" : {
+    "FlowActive" : {
+      "description" : "Wait until a flow is active",
+      "delay" : 3,
+      "maxAttempts" : 40,
+      "operation" : "DescribeFlow",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "retry",
+        "expected" : "STARTING"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "retry",
+        "expected" : "UPDATING"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "InternalServerErrorException"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "ServiceUnavailableException"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "failure",
+        "expected" : "STANDBY"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
     },
-    "FlowStandby": {
-      "description": "Wait until a flow is in standby mode",
-      "operation": "DescribeFlow",
-      "delay": 3,
-      "maxAttempts": 40,
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "STANDBY"
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "STOPPING"
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 500
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 503
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "ERROR"
-        }
-      ]
+    "FlowDeleted" : {
+      "description" : "Wait until a flow is deleted",
+      "delay" : 3,
+      "maxAttempts" : 40,
+      "operation" : "DescribeFlow",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "NotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "retry",
+        "expected" : "DELETING"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "InternalServerErrorException"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "ServiceUnavailableException"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
     },
-    "FlowDeleted": {
-      "description": "Wait until a flow is deleted",
-      "operation": "DescribeFlow",
-      "delay": 3,
-      "maxAttempts": 40,
-      "acceptors": [
-        {
-          "state": "success",
-          "matcher": "status",
-          "expected": 404
-        },
-        {
-          "state": "retry",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "DELETING"
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 500
-        },
-        {
-          "state": "retry",
-          "matcher": "status",
-          "expected": 503
-        },
-        {
-          "state": "failure",
-          "matcher": "path",
-          "argument": "Flow.Status",
-          "expected": "ERROR"
-        }
-      ]
+    "FlowStandby" : {
+      "description" : "Wait until a flow is in standby mode",
+      "delay" : 3,
+      "maxAttempts" : 40,
+      "operation" : "DescribeFlow",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "success",
+        "expected" : "STANDBY"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "retry",
+        "expected" : "STOPPING"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "InternalServerErrorException"
+      }, {
+        "matcher" : "error",
+        "state" : "retry",
+        "expected" : "ServiceUnavailableException"
+      }, {
+        "matcher" : "path",
+        "argument" : "Flow.Status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
     }
   }
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediaconvert/2017-08-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json 2.31.35-1/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediaconvert/2017-08-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,15 +1,15 @@
 {
   "metadata": {
     "apiVersion": "2017-08-29",
-    "endpointPrefix": "mediaconvert",
     "signingName": "mediaconvert",
     "serviceFullName": "AWS Elemental MediaConvert",
     "serviceId": "MediaConvert",
     "protocol": "rest-json",
     "jsonVersion": "1.1",
-    "uid": "mediaconvert-2017-08-29",
     "signatureVersion": "v4",
+    "endpointPrefix": "mediaconvert",
     "serviceAbbreviation": "MediaConvert",
+    "uid": "mediaconvert-2017-08-29",
     "auth": [
       "aws.auth#sigv4"
     ]
@@ -38,6 +38,10 @@
           "documentation": "The service encountered an unexpected condition and cannot fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -79,6 +83,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -120,6 +128,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -161,6 +173,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -202,6 +218,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -243,6 +263,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -261,6 +285,52 @@
       ],
       "documentation": "Create a new transcoding queue. For information about queues, see Working With Queues in the User Guide at https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-queues.html"
     },
+    "CreateResourceShare": {
+      "name": "CreateResourceShare",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2017-08-29/resourceShares",
+        "responseCode": 202
+      },
+      "input": {
+        "shape": "CreateResourceShareRequest"
+      },
+      "output": {
+        "shape": "CreateResourceShareResponse",
+        "documentation": "Share request accepted and queued, or resource is already shared with the specified support case"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "The service can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "The service encountered an unexpected condition and can't fulfill your request."
+        },
+        {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permissions for this action with the credentials you sent."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The resource you requested doesn't exist."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource."
+        }
+      ],
+      "documentation": "Create a new resource share request for MediaConvert resources with AWS Support."
+    },
     "DeleteJobTemplate": {
       "name": "DeleteJobTemplate",
       "http": {
@@ -284,6 +354,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -325,6 +399,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -366,6 +444,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -407,6 +489,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -448,6 +534,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -491,6 +581,10 @@
           "documentation": "The service encountered an unexpected condition and cannot fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -532,6 +626,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -573,6 +671,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -591,6 +693,51 @@
       ],
       "documentation": "Retrieve the JSON for a specific job template."
     },
+    "GetJobsQueryResults": {
+      "name": "GetJobsQueryResults",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2017-08-29/jobsQueries/{id}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetJobsQueryResultsRequest"
+      },
+      "output": {
+        "shape": "GetJobsQueryResultsResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "The service can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "The service encountered an unexpected condition and can't fulfill your request."
+        },
+        {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permissions for this action with the credentials you sent."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The resource you requested doesn't exist."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource."
+        }
+      ],
+      "documentation": "Retrieve a JSON array of up to twenty of your most recent jobs matched by a jobs query."
+    },
     "GetPolicy": {
       "name": "GetPolicy",
       "http": {
@@ -614,6 +761,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -655,6 +806,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -696,6 +851,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -737,6 +896,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -778,6 +941,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -819,6 +986,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -860,6 +1031,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -901,6 +1076,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -942,6 +1121,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -960,6 +1143,51 @@
       ],
       "documentation": "Retrieve a JSON array of all available Job engine versions and the date they expire."
     },
+    "Probe": {
+      "name": "Probe",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2017-08-29/probe",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ProbeRequest"
+      },
+      "output": {
+        "shape": "ProbeResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "The service can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "The service encountered an unexpected condition and can't fulfill your request."
+        },
+        {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permissions for this action with the credentials you sent."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The resource you requested doesn't exist."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource."
+        }
+      ],
+      "documentation": "Use Probe to obtain detailed information about your input media files. Probe returns a JSON that includes container, codec, frame rate, resolution, track count, audio layout, captions, and more. You can use this information to learn more about your media files, or to help make decisions while automating your transcoding workflow."
+    },
     "PutPolicy": {
       "name": "PutPolicy",
       "http": {
@@ -983,6 +1211,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1024,6 +1256,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1042,6 +1278,51 @@
       ],
       "documentation": "Retrieve a JSON array that includes job details for up to twenty of your most recent jobs. Optionally filter results further according to input file, queue, or status. To retrieve the twenty next most recent jobs, use the nextToken string returned with the array."
     },
+    "StartJobsQuery": {
+      "name": "StartJobsQuery",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2017-08-29/jobsQueries",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "StartJobsQueryRequest"
+      },
+      "output": {
+        "shape": "StartJobsQueryResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "The service can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "The service encountered an unexpected condition and can't fulfill your request."
+        },
+        {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permissions for this action with the credentials you sent."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The resource you requested doesn't exist."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource."
+        }
+      ],
+      "documentation": "Start an asynchronous jobs query using the provided filters. To receive the list of jobs that match your query, call the GetJobsQueryResults API using the query ID returned by this API."
+    },
     "TagResource": {
       "name": "TagResource",
       "http": {
@@ -1065,6 +1346,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1106,6 +1391,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1147,6 +1436,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1188,6 +1481,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1229,6 +1526,10 @@
           "documentation": "The service encountered an unexpected condition and can't fulfill your request."
         },
         {
+          "shape": "ServiceQuotaExceededException",
+          "documentation": "You attempted to create more resources than the service allows based on service quotas."
+        },
+        {
           "shape": "ForbiddenException",
           "documentation": "You don't have permissions for this action with the credentials you sent."
         },
@@ -1259,11 +1560,12 @@
     },
     "AacCodecProfile": {
       "type": "string",
-      "documentation": "Specify the AAC profile. For the widest player compatibility and where higher bitrates are acceptable: Keep the default profile, LC (AAC-LC) For improved audio performance at lower bitrates: Choose HEV1 or HEV2. HEV1 (AAC-HE v1) adds spectral band replication to improve speech audio at low bitrates. HEV2 (AAC-HE v2) adds parametric stereo, which optimizes for encoding stereo audio at very low bitrates.",
+      "documentation": "Specify the AAC profile. For the widest player compatibility and where higher bitrates are acceptable: Keep the default profile, LC (AAC-LC) For improved audio performance at lower bitrates: Choose HEV1 or HEV2. HEV1 (AAC-HE v1) adds spectral band replication to improve speech audio at low bitrates. HEV2 (AAC-HE v2) adds parametric stereo, which optimizes for encoding stereo audio at very low bitrates. For improved audio quality at lower bitrates, adaptive audio bitrate switching, and loudness control: Choose XHE.",
       "enum": [
         "LC",
         "HEV1",
-        "HEV2"
+        "HEV2",
+        "XHE"
       ]
     },
     "AacCodingMode": {
@@ -1277,6 +1579,14 @@
         "CODING_MODE_5_1"
       ]
     },
+    "AacLoudnessMeasurementMode": {
+      "type": "string",
+      "documentation": "Choose the loudness measurement mode for your audio content. For music or advertisements: We recommend that you keep the default value, Program. For speech or other content: We recommend that you choose Anchor. When you do, MediaConvert optimizes the loudness of your output for clarify by applying speech gates.",
+      "enum": [
+        "PROGRAM",
+        "ANCHOR"
+      ]
+    },
     "AacRateControlMode": {
       "type": "string",
       "documentation": "Specify the AAC rate control mode. For a constant bitrate: Choose CBR. Your AAC output bitrate will be equal to the value that you choose for Bitrate. For a variable bitrate: Choose VBR. Your AAC output bitrate will vary according to your audio content and the value that you choose for Bitrate quality.",
@@ -1309,13 +1619,23 @@
         "CodecProfile": {
           "shape": "AacCodecProfile",
           "locationName": "codecProfile",
-          "documentation": "Specify the AAC profile. For the widest player compatibility and where higher bitrates are acceptable: Keep the default profile, LC (AAC-LC) For improved audio performance at lower bitrates: Choose HEV1 or HEV2. HEV1 (AAC-HE v1) adds spectral band replication to improve speech audio at low bitrates. HEV2 (AAC-HE v2) adds parametric stereo, which optimizes for encoding stereo audio at very low bitrates."
+          "documentation": "Specify the AAC profile. For the widest player compatibility and where higher bitrates are acceptable: Keep the default profile, LC (AAC-LC) For improved audio performance at lower bitrates: Choose HEV1 or HEV2. HEV1 (AAC-HE v1) adds spectral band replication to improve speech audio at low bitrates. HEV2 (AAC-HE v2) adds parametric stereo, which optimizes for encoding stereo audio at very low bitrates. For improved audio quality at lower bitrates, adaptive audio bitrate switching, and loudness control: Choose XHE."
         },
         "CodingMode": {
           "shape": "AacCodingMode",
           "locationName": "codingMode",
           "documentation": "The Coding mode that you specify determines the number of audio channels and the audio channel layout metadata in your AAC output. Valid coding modes depend on the Rate control mode and Profile that you select. The following list shows the number of audio channels and channel layout for each coding mode. * 1.0 Audio Description (Receiver Mix): One channel, C. Includes audio description data from your stereo input. For more information see ETSI TS 101 154 Annex E. * 1.0 Mono: One channel, C. * 2.0 Stereo: Two channels, L, R. * 5.1 Surround: Six channels, C, L, R, Ls, Rs, LFE."
         },
+        "LoudnessMeasurementMode": {
+          "shape": "AacLoudnessMeasurementMode",
+          "locationName": "loudnessMeasurementMode",
+          "documentation": "Choose the loudness measurement mode for your audio content. For music or advertisements: We recommend that you keep the default value, Program. For speech or other content: We recommend that you choose Anchor. When you do, MediaConvert optimizes the loudness of your output for clarify by applying speech gates."
+        },
+        "RapInterval": {
+          "shape": "__integerMin2000Max30000",
+          "locationName": "rapInterval",
+          "documentation": "Specify the RAP (Random Access Point) interval for your xHE-AAC audio output. A RAP allows a decoder to decode audio data mid-stream, without the need to reference previous audio frames, and perform adaptive audio bitrate switching. To specify the RAP interval: Enter an integer from 2000 to 30000, in milliseconds. Smaller values allow for better seeking and more frequent stream switching, while large values improve compression efficiency. To have MediaConvert automatically determine the RAP interval: Leave blank."
+        },
         "RateControlMode": {
           "shape": "AacRateControlMode",
           "locationName": "rateControlMode",
@@ -1336,6 +1656,11 @@
           "locationName": "specification",
           "documentation": "Use MPEG-2 AAC instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream containers."
         },
+        "TargetLoudnessRange": {
+          "shape": "__integerMin6Max16",
+          "locationName": "targetLoudnessRange",
+          "documentation": "Specify the xHE-AAC loudness target. Enter an integer from 6 to 16, representing \"loudness units\". For more information, see the following specification: Supplementary information for R 128 EBU Tech 3342-2023."
+        },
         "VbrQuality": {
           "shape": "AacVbrQuality",
           "locationName": "vbrQuality",
@@ -1683,8 +2008,7 @@
     },
     "AssociateCertificateResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "AudioChannelTag": {
       "type": "string",
@@ -1841,6 +2165,11 @@
           "locationName": "audioNormalizationSettings",
           "documentation": "Advanced audio normalization settings. Ignore these settings unless you need to comply with a loudness standard."
         },
+        "AudioPitchCorrectionSettings": {
+          "shape": "AudioPitchCorrectionSettings",
+          "locationName": "audioPitchCorrectionSettings",
+          "documentation": "Settings for audio pitch correction during framerate conversion."
+        },
         "AudioSourceName": {
           "shape": "__stringMax2048",
           "locationName": "audioSourceName",
@@ -1869,7 +2198,7 @@
         "LanguageCode": {
           "shape": "LanguageCode",
           "locationName": "languageCode",
-          "documentation": "Indicates the language of the audio output track. The ISO 639 language specified in the 'Language Code' drop down will be used when 'Follow Input Language Code' is not selected or when 'Follow Input Language Code' is selected but there is no ISO 639 language code specified by the input."
+          "documentation": "Specify the language for your output audio track. To follow the input language: Leave blank. When you do, also set Language code control to Follow input. If no input language is detected MediaConvert will not write an output language code. To follow the input langauge, but fall back to a specified language code if there is no input language to follow: Enter an ISO 639-2 three-letter language code in all capital letters. When you do, also set Language code control to Follow input. To specify the language code: Enter an ISO 639 three-letter language code in all capital letters. When you do, also set Language code control to Use configured."
         },
         "LanguageCodeControl": {
           "shape": "AudioLanguageCodeControl",
@@ -1983,6 +2312,53 @@
       },
       "documentation": "Advanced audio normalization settings. Ignore these settings unless you need to comply with a loudness standard."
     },
+    "AudioPitchCorrectionSettings": {
+      "type": "structure",
+      "members": {
+        "SlowPalPitchCorrection": {
+          "shape": "SlowPalPitchCorrection",
+          "locationName": "slowPalPitchCorrection",
+          "documentation": "Use Slow PAL pitch correction to compensate for audio pitch changes during slow PAL frame rate conversion. This setting only applies when Slow PAL is enabled in your output video codec settings. To automatically apply audio pitch correction: Choose Enabled. MediaConvert automatically applies a pitch correction to your output to match the original content's audio pitch. To not apply audio pitch correction: Keep the default value, Disabled."
+        }
+      },
+      "documentation": "Settings for audio pitch correction during framerate conversion."
+    },
+    "AudioProperties": {
+      "type": "structure",
+      "members": {
+        "BitDepth": {
+          "shape": "__integer",
+          "locationName": "bitDepth",
+          "documentation": "The bit depth of the audio track."
+        },
+        "BitRate": {
+          "shape": "__long",
+          "locationName": "bitRate",
+          "documentation": "The bit rate of the audio track, in bits per second."
+        },
+        "Channels": {
+          "shape": "__integer",
+          "locationName": "channels",
+          "documentation": "The number of audio channels in the audio track."
+        },
+        "FrameRate": {
+          "shape": "FrameRate",
+          "locationName": "frameRate",
+          "documentation": "The frame rate of the video or audio track, expressed as a fraction with numerator and denominator values."
+        },
+        "LanguageCode": {
+          "shape": "__string",
+          "locationName": "languageCode",
+          "documentation": "The language code of the audio track, in three character ISO 639-3 format."
+        },
+        "SampleRate": {
+          "shape": "__integer",
+          "locationName": "sampleRate",
+          "documentation": "The sample rate of the audio track."
+        }
+      },
+      "documentation": "Details about the media file's audio track."
+    },
     "AudioSelector": {
       "type": "structure",
       "members": {
@@ -2004,7 +2380,7 @@
         "ExternalAudioFileInput": {
           "shape": "__stringPatternS3Https",
           "locationName": "externalAudioFileInput",
-          "documentation": "Specifies audio data from an external file source."
+          "documentation": "Specify the S3, HTTP, or HTTPS URL for your external audio file input."
         },
         "HlsRenditionGroupSettings": {
           "shape": "HlsRenditionGroupSettings",
@@ -2014,12 +2390,12 @@
         "LanguageCode": {
           "shape": "LanguageCode",
           "locationName": "languageCode",
-          "documentation": "Selects a specific language code from within an audio source."
+          "documentation": "Specify the language, using an ISO 639-2 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
         },
         "Offset": {
           "shape": "__integerMinNegative2147483648Max2147483647",
           "locationName": "offset",
-          "documentation": "Specifies a time delta in milliseconds to offset the audio from the input video."
+          "documentation": "Specify a time delta, in milliseconds, to offset the audio from the input video.\nTo specify no offset: Keep the default value, 0.\nTo specify an offset: Enter an integer from -2147483648 to 2147483647"
         },
         "Pids": {
           "shape": "__listOf__integerMin1Max2147483647",
@@ -2039,12 +2415,17 @@
         "SelectorType": {
           "shape": "AudioSelectorType",
           "locationName": "selectorType",
-          "documentation": "Specifies the type of the audio selector."
+          "documentation": "Specify how MediaConvert selects audio content within your input. The default is Track. PID: Select audio by specifying the Packet Identifier (PID) values for MPEG Transport Stream inputs. Use this when you know the exact PID values of your audio streams. Track: Default. Select audio by track number. This is the most common option and works with most input container formats. If more types of audio data get recognized in the future, these numberings may shift, but the numberings used for Stream mode will not. Language code: Select audio by language using an ISO 639-2 or ISO 639-3 three-letter       code in all capital letters. Use this when your source has embedded language metadata and you want to select tracks based on their language. HLS rendition group: Select audio from an HLS rendition group. Use this when your input is an HLS package with multiple audio renditions and you want to select specific rendition groups. All PCM: Select all uncompressed PCM audio tracks from your input automatically. This is useful when you want to include all PCM audio tracks without specifying individual track numbers. Stream: Select audio by stream number. Stream numbers include all tracks in the source file, regardless of type, and correspond to either the order of tracks in the file, or if applicable, the stream number metadata of the track. Although all tracks count toward these stream numbers, in this audio selector context, only the stream number of a track containing audio data may be used. If your source file contains a track which is not recognized by the service, then the corresponding stream number will still be reserved for future use. If more types of audio data get recognized in the future, these numberings will not shift."
+        },
+        "Streams": {
+          "shape": "__listOf__integerMin1Max2147483647",
+          "locationName": "streams",
+          "documentation": "Identify a track from the input audio to include in this selector by entering the stream index number. These numberings count all tracks in the input file, but only a track containing audio data may be used here. To include several tracks in a single audio selector, specify multiple tracks as follows. Using the console, enter a comma-separated list. For example, type \"1,2,3\" to include tracks 1 through 3."
         },
         "Tracks": {
           "shape": "__listOf__integerMin1Max2147483647",
           "locationName": "tracks",
-          "documentation": "Identify a track from the input audio to include in this selector by entering the track index number. To include several tracks in a single audio selector, specify multiple tracks as follows. Using the console, enter a comma-separated list. For example, type \"1,2,3\" to include tracks 1 through 3."
+          "documentation": "Identify a track from the input audio to include in this selector by entering the track index number. These numberings include only tracks recognized as audio. If the service recognizes more types of audio tracks in the future, these numberings may shift. To include several tracks in a single audio selector, specify multiple tracks as follows. Using the console, enter a comma-separated list. For example, type \"1,2,3\" to include tracks 1 through 3."
         }
       },
       "documentation": "Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input."
@@ -2062,12 +2443,14 @@
     },
     "AudioSelectorType": {
       "type": "string",
-      "documentation": "Specifies the type of the audio selector.",
+      "documentation": "Specify how MediaConvert selects audio content within your input. The default is Track. PID: Select audio by specifying the Packet Identifier (PID) values for MPEG Transport Stream inputs. Use this when you know the exact PID values of your audio streams. Track: Default. Select audio by track number. This is the most common option and works with most input container formats. If more types of audio data get recognized in the future, these numberings may shift, but the numberings used for Stream mode will not. Language code: Select audio by language using an ISO 639-2 or ISO 639-3 three-letter       code in all capital letters. Use this when your source has embedded language metadata and you want to select tracks based on their language. HLS rendition group: Select audio from an HLS rendition group. Use this when your input is an HLS package with multiple audio renditions and you want to select specific rendition groups. All PCM: Select all uncompressed PCM audio tracks from your input automatically. This is useful when you want to include all PCM audio tracks without specifying individual track numbers. Stream: Select audio by stream number. Stream numbers include all tracks in the source file, regardless of type, and correspond to either the order of tracks in the file, or if applicable, the stream number metadata of the track. Although all tracks count toward these stream numbers, in this audio selector context, only the stream number of a track containing audio data may be used. If your source file contains a track which is not recognized by the service, then the corresponding stream number will still be reserved for future use. If more types of audio data get recognized in the future, these numberings will not shift.",
       "enum": [
         "PID",
         "TRACK",
         "LANGUAGE_CODE",
-        "HLS_RENDITION_GROUP"
+        "HLS_RENDITION_GROUP",
+        "ALL_PCM",
+        "STREAM"
       ]
     },
     "AudioTypeControl": {
@@ -2117,6 +2500,11 @@
           "locationName": "maxAbrBitrate",
           "documentation": "Specify the maximum average bitrate for MediaConvert to use in your automated ABR stack. If you don't specify a value, MediaConvert uses 8,000,000 (8 mb/s) by default. The average bitrate of your highest-quality rendition will be equal to or below this value, depending on the quality, complexity, and resolution of your content. Note that the instantaneous maximum bitrate may vary above the value that you specify."
         },
+        "MaxQualityLevel": {
+          "shape": "__doubleMin1Max10",
+          "locationName": "maxQualityLevel",
+          "documentation": "Optional. Specify the QVBR quality level to use for all renditions in your automated ABR stack. To have MediaConvert automatically determine the quality level: Leave blank. To manually specify a quality level: Enter a value from 1 to 10. MediaConvert will use a quality level up to the value that you specify, depending on your source. For more information about QVBR quality levels, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/qvbr-guidelines.html"
+        },
         "MaxRenditions": {
           "shape": "__integerMin3Max15",
           "locationName": "maxRenditions",
@@ -2184,11 +2572,12 @@
     },
     "Av1FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "Av1QvbrSettings": {
@@ -2240,7 +2629,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "Av1FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -2267,6 +2656,11 @@
           "locationName": "numberBFramesBetweenReferenceFrames",
           "documentation": "Specify from the number of B-frames, in the range of 0-15. For AV1 encoding, we recommend using 7 or 15. Choose a larger number for a lower bitrate and smaller file size; choose a smaller number for better video quality."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "QvbrSettings": {
           "shape": "Av1QvbrSettings",
           "locationName": "qvbrSettings",
@@ -2329,11 +2723,12 @@
     },
     "AvcIntraFramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "AvcIntraInterlaceMode": {
@@ -2376,7 +2771,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "AvcIntraFramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max1001",
@@ -2393,6 +2788,11 @@
           "locationName": "interlaceMode",
           "documentation": "Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "ScanTypeConversionMode": {
           "shape": "AvcIntraScanTypeConversionMode",
           "locationName": "scanTypeConversionMode",
@@ -2751,8 +3151,7 @@
     },
     "CancelJobResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "CaptionDescription": {
       "type": "structure",
@@ -3004,6 +3403,14 @@
         "WEBVTT"
       ]
     },
+    "CaptionSourceUpconvertSTLToTeletext": {
+      "type": "string",
+      "documentation": "Specify whether this set of input captions appears in your outputs in both STL and Teletext format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the STL data through using the Teletext compatibility bytes fields of the Teletext wrapper, and it also translates the STL data into Teletext.",
+      "enum": [
+        "UPCONVERT",
+        "DISABLED"
+      ]
+    },
     "ChannelMapping": {
       "type": "structure",
       "members": {
@@ -3015,6 +3422,15 @@
       },
       "documentation": "Channel mapping contains the group of fields that hold the remixing value for each channel, in dB. Specify remix values to indicate how much of the content from your input audio channel you want in your output audio channels. Each instance of the InputChannels or InputChannelsFineTune array specifies these values for one output channel. Use one instance of this array for each output channel. In the console, each array corresponds to a column in the graphical depiction of the mapping matrix. The rows of the graphical matrix correspond to input channels. Valid values are within the range from -60 (mute) through 6. A setting of 0 passes the input channel unchanged to the output channel (no attenuation or amplification). Use InputChannels or InputChannelsFineTune to specify your remix values. Don't use both."
     },
+    "ChromaPositionMode": {
+      "type": "string",
+      "documentation": "Specify the chroma sample positioning metadata for your H.264 or H.265 output. To have MediaConvert automatically determine chroma positioning: We recommend that you keep the default value, Auto. To specify center positioning: Choose Force center. To specify top left positioning: Choose Force top left.",
+      "enum": [
+        "AUTO",
+        "FORCE_CENTER",
+        "FORCE_TOP_LEFT"
+      ]
+    },
     "ClipLimits": {
       "type": "structure",
       "members": {
@@ -3148,7 +3564,7 @@
         "DashManifestStyle": {
           "shape": "DashManifestStyle",
           "locationName": "dashManifestStyle",
-          "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct."
+          "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline for outputs that you also specify a Name modifier for: Keep the default value, Basic. Note that if you do not specify a name modifier for an output, MediaConvert will not write a SegmentTimeline for it. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. To write a SegmentTimeline in each AdaptationSet: Choose Full."
         },
         "Destination": {
           "shape": "__stringPatternS3",
@@ -3228,7 +3644,7 @@
         "SegmentLengthControl": {
           "shape": "CmafSegmentLengthControl",
           "locationName": "segmentLengthControl",
-          "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary."
+          "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz."
         },
         "StreamInfResolution": {
           "shape": "CmafStreamInfResolution",
@@ -3383,10 +3799,11 @@
     },
     "CmafSegmentLengthControl": {
       "type": "string",
-      "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary.",
+      "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz.",
       "enum": [
         "EXACT",
-        "GOP_MULTIPLE"
+        "GOP_MULTIPLE",
+        "MATCH"
       ]
     },
     "CmafStreamInfResolution": {
@@ -3595,6 +4012,98 @@
         "VERSION_1"
       ]
     },
+    "Codec": {
+      "type": "string",
+      "enum": [
+        "UNKNOWN",
+        "AAC",
+        "AC3",
+        "EAC3",
+        "FLAC",
+        "MP3",
+        "OPUS",
+        "PCM",
+        "VORBIS",
+        "AV1",
+        "AVC",
+        "HEVC",
+        "JPEG2000",
+        "MJPEG",
+        "MPEG1",
+        "MP4V",
+        "MPEG2",
+        "PRORES",
+        "THEORA",
+        "VFW",
+        "VP8",
+        "VP9",
+        "QTRLE",
+        "C608",
+        "C708",
+        "WEBVTT"
+      ]
+    },
+    "CodecMetadata": {
+      "type": "structure",
+      "members": {
+        "BitDepth": {
+          "shape": "__integer",
+          "locationName": "bitDepth",
+          "documentation": "The number of bits used per color component in the video essence such as 8, 10, or 12 bits. Standard range (SDR) video typically uses 8-bit, while 10-bit is common for high dynamic range (HDR)."
+        },
+        "ChromaSubsampling": {
+          "shape": "__string",
+          "locationName": "chromaSubsampling",
+          "documentation": "The chroma subsampling format used in the video encoding, such as \"4:2:0\" or \"4:4:4\". This describes how color information is sampled relative to brightness information. Different subsampling ratios affect video quality and file size, with \"4:4:4\" providing the highest color fidelity and \"4:2:0\" being most common for standard video."
+        },
+        "CodedFrameRate": {
+          "shape": "FrameRate",
+          "locationName": "codedFrameRate",
+          "documentation": "The frame rate of the video or audio track, expressed as a fraction with numerator and denominator values."
+        },
+        "ColorPrimaries": {
+          "shape": "ColorPrimaries",
+          "locationName": "colorPrimaries",
+          "documentation": "The color space primaries of the video track, defining the red, green, and blue color coordinates used for the video. This information helps ensure accurate color reproduction during playback and transcoding."
+        },
+        "Height": {
+          "shape": "__integer",
+          "locationName": "height",
+          "documentation": "The height in pixels as coded by the codec. This represents the actual encoded video height as specified in the video stream headers."
+        },
+        "Level": {
+          "shape": "__string",
+          "locationName": "level",
+          "documentation": "The codec level or tier that specifies the maximum processing requirements and capabilities. Levels define constraints such as maximum bit rate, frame rate, and resolution."
+        },
+        "MatrixCoefficients": {
+          "shape": "MatrixCoefficients",
+          "locationName": "matrixCoefficients",
+          "documentation": "The color space matrix coefficients of the video track, defining how RGB color values are converted to and from YUV color space. This affects color accuracy during encoding and decoding processes."
+        },
+        "Profile": {
+          "shape": "__string",
+          "locationName": "profile",
+          "documentation": "The codec profile used to encode the video. Profiles define specific feature sets and capabilities within a codec standard. For example, H.264 profiles include Baseline, Main, and High, each supporting different encoding features and complexity levels."
+        },
+        "ScanType": {
+          "shape": "__string",
+          "locationName": "scanType",
+          "documentation": "The scanning method specified in the video essence, indicating whether the video uses progressive or interlaced scanning."
+        },
+        "TransferCharacteristics": {
+          "shape": "TransferCharacteristics",
+          "locationName": "transferCharacteristics",
+          "documentation": "The color space transfer characteristics of the video track, defining the relationship between linear light values and the encoded signal values. This affects brightness and contrast reproduction."
+        },
+        "Width": {
+          "shape": "__integer",
+          "locationName": "width",
+          "documentation": "The width in pixels as coded by the codec. This represents the actual encoded video width as specified in the video stream headers."
+        }
+      },
+      "documentation": "Codec-specific parameters parsed from the video essence headers. This information provides detailed technical specifications about how the video was encoded, including profile settings, resolution details, and color space information that can help you understand the source video characteristics and make informed encoding decisions."
+    },
     "ColorConversion3DLUTSetting": {
       "type": "structure",
       "members": {
@@ -3695,6 +4204,28 @@
         "INSERT"
       ]
     },
+    "ColorPrimaries": {
+      "type": "string",
+      "documentation": "The color space primaries of the video track, defining the red, green, and blue color coordinates used for the video. This information helps ensure accurate color reproduction during playback and transcoding.",
+      "enum": [
+        "ITU_709",
+        "UNSPECIFIED",
+        "RESERVED",
+        "ITU_470M",
+        "ITU_470BG",
+        "SMPTE_170M",
+        "SMPTE_240M",
+        "GENERIC_FILM",
+        "ITU_2020",
+        "SMPTE_428_1",
+        "SMPTE_431_2",
+        "SMPTE_EG_432_1",
+        "IPT",
+        "SMPTE_2067XYZ",
+        "EBU_3213_E",
+        "LAST"
+      ]
+    },
     "ColorSpace": {
       "type": "string",
       "documentation": "If your input video has accurate color space metadata, or if you don't know about color space: Keep the default value, Follow. MediaConvert will automatically detect your input color space. If your input video has metadata indicating the wrong color space, or has missing metadata: Specify the accurate color space here. If your input video is HDR 10 and the SMPTE ST 2086 Mastering Display Color Volume static metadata isn't present in your video stream, or if that metadata is present but not accurate: Choose Force HDR 10. Specify correct values in the input HDR 10 metadata settings. For more information about HDR jobs, see https://docs.aws.amazon.com/console/mediaconvert/hdr. When you specify an input color space, MediaConvert uses the following color space metadata, which includes color primaries, transfer characteristics, and matrix coefficients:\n * HDR 10: BT.2020, PQ, BT.2020 non-constant\n * HLG 2020: BT.2020, HLG, BT.2020 non-constant\n * P3DCI (Theater): DCIP3, SMPTE 428M, BT.709\n * P3D65 (SDR): Display P3, sRGB, BT.709\n * P3D65 (HDR): Display P3, PQ, BT.709",
@@ -3752,6 +4283,27 @@
       },
       "documentation": "The service couldn't complete your request because there is a conflict with the current state of the resource."
     },
+    "Container": {
+      "type": "structure",
+      "members": {
+        "Duration": {
+          "shape": "__double",
+          "locationName": "duration",
+          "documentation": "The total duration of your media file, in seconds."
+        },
+        "Format": {
+          "shape": "Format",
+          "locationName": "format",
+          "documentation": "The format of your media file. For example: MP4, QuickTime (MOV), Matroska (MKV), WebM or MXF. Note that this will be blank if your media file has a format that the MediaConvert Probe operation does not recognize."
+        },
+        "Tracks": {
+          "shape": "__listOfTrack",
+          "locationName": "tracks",
+          "documentation": "Details about each track (video, audio, or data) in the media file."
+        }
+      },
+      "documentation": "The container of your media file. This information helps you understand the overall structure and details of your media, including format, duration, and track layout."
+    },
     "ContainerSettings": {
       "type": "structure",
       "members": {
@@ -3808,6 +4360,7 @@
       "documentation": "Container for this output. Some containers require a container settings object. If not specified, the default object will be created.",
       "enum": [
         "F4V",
+        "GIF",
         "ISMV",
         "M2TS",
         "M3U8",
@@ -3841,7 +4394,7 @@
         "BillingTagsSource": {
           "shape": "BillingTagsSource",
           "locationName": "billingTagsSource",
-          "documentation": "Optional. Choose a tag type that AWS Billing and Cost Management will use to sort your AWS Elemental MediaConvert costs on any billing report that you set up. Any transcoding outputs that don't have an associated tag will appear in your billing report unsorted. If you don't choose a valid value for this field, your job outputs will appear on the billing report unsorted."
+          "documentation": "Optionally choose a Billing tags source that AWS Billing and Cost Management will use to display tags for individual output costs on any billing report that you set up. Leave blank to use the default value, Job."
         },
         "ClientRequestToken": {
           "shape": "__string",
@@ -3857,7 +4410,7 @@
         "JobEngineVersion": {
           "shape": "__string",
           "locationName": "jobEngineVersion",
-          "documentation": "Use Job engine versions to run jobs for your production workflow on one version, while you test and validate the latest version. To specify a Job engine version: Enter a date in a YYYY-MM-DD format. For a list of valid Job engine versions, submit a ListVersions request. To not specify a Job engine version: Leave blank."
+          "documentation": "Use Job engine versions to run jobs for your production workflow on one version, while you test and validate the latest version. Job engine versions represent periodically grouped MediaConvert releases with new features, updates, improvements, and fixes. Job engine versions are in a YYYY-MM-DD format. Note that the Job engine version feature is not publicly available at this time. To request access, contact AWS support."
         },
         "JobTemplate": {
           "shape": "__string",
@@ -4086,6 +4639,29 @@
         }
       }
     },
+    "CreateResourceShareRequest": {
+      "type": "structure",
+      "members": {
+        "JobId": {
+          "shape": "__string",
+          "locationName": "jobId",
+          "documentation": "Specify MediaConvert Job ID or ARN to share"
+        },
+        "SupportCaseId": {
+          "shape": "__string",
+          "locationName": "supportCaseId",
+          "documentation": "AWS Support case identifier"
+        }
+      },
+      "required": [
+        "SupportCaseId",
+        "JobId"
+      ]
+    },
+    "CreateResourceShareResponse": {
+      "type": "structure",
+      "members": {}
+    },
     "DashAdditionalManifest": {
       "type": "structure",
       "members": {
@@ -4152,7 +4728,7 @@
         "DashManifestStyle": {
           "shape": "DashManifestStyle",
           "locationName": "dashManifestStyle",
-          "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct."
+          "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline for outputs that you also specify a Name modifier for: Keep the default value, Basic. Note that if you do not specify a name modifier for an output, MediaConvert will not write a SegmentTimeline for it. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. To write a SegmentTimeline in each AdaptationSet: Choose Full."
         },
         "Destination": {
           "shape": "__stringPatternS3",
@@ -4227,7 +4803,7 @@
         "SegmentLengthControl": {
           "shape": "DashIsoSegmentLengthControl",
           "locationName": "segmentLengthControl",
-          "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary."
+          "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz."
         },
         "VideoCompositionOffsets": {
           "shape": "DashIsoVideoCompositionOffsets",
@@ -4346,10 +4922,11 @@
     },
     "DashIsoSegmentLengthControl": {
       "type": "string",
-      "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary.",
+      "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz.",
       "enum": [
         "EXACT",
-        "GOP_MULTIPLE"
+        "GOP_MULTIPLE",
+        "MATCH"
       ]
     },
     "DashIsoVideoCompositionOffsets": {
@@ -4370,13 +4947,25 @@
     },
     "DashManifestStyle": {
       "type": "string",
-      "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct.",
+      "documentation": "Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline for outputs that you also specify a Name modifier for: Keep the default value, Basic. Note that if you do not specify a name modifier for an output, MediaConvert will not write a SegmentTimeline for it. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. To write a SegmentTimeline in each AdaptationSet: Choose Full.",
       "enum": [
         "BASIC",
         "COMPACT",
-        "DISTINCT"
+        "DISTINCT",
+        "FULL"
       ]
     },
+    "DataProperties": {
+      "type": "structure",
+      "members": {
+        "LanguageCode": {
+          "shape": "__string",
+          "locationName": "languageCode",
+          "documentation": "The language code of the data track, in three character ISO 639-3 format."
+        }
+      },
+      "documentation": "Details about the media file's data track."
+    },
     "DecryptionMode": {
       "type": "string",
       "documentation": "Specify the encryption mode that you used to encrypt your input files.",
@@ -4451,18 +5040,15 @@
     },
     "DeleteJobTemplateResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeletePolicyRequest": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeletePolicyResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeletePresetRequest": {
       "type": "structure",
@@ -4480,8 +5066,7 @@
     },
     "DeletePresetResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeleteQueueRequest": {
       "type": "structure",
@@ -4499,8 +5084,7 @@
     },
     "DeleteQueueResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DescribeEndpointsMode": {
       "type": "string",
@@ -4578,8 +5162,7 @@
     },
     "DisassociateCertificateResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DolbyVision": {
       "type": "structure",
@@ -4729,7 +5312,7 @@
         "DdsHandling": {
           "shape": "DvbddsHandling",
           "locationName": "ddsHandling",
-          "documentation": "Specify how MediaConvert handles the display definition segment (DDS). To exclude the DDS from this set of captions: Keep the default, None. To include the DDS: Choose Specified. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate. To include the DDS, but not include display window data: Choose No display window. When you do, you can write position metadata to the page composition segment (PCS) with DDS x-coordinate and DDS y-coordinate. For video resolutions with a height of 576 pixels or less, MediaConvert doesn't include the DDS, regardless of the value you choose for DDS handling. All burn-in and DVB-Sub font settings must match."
+          "documentation": "Specify how MediaConvert handles the display definition segment (DDS). To exclude the DDS from this set of captions: Keep the default, None. To include the DDS: Choose Specified. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate. To include the DDS, but not include display window data: Choose No display window. When you do, you can write position metadata to the page composition segment (PCS) with DDS x-coordinate and DDS y-coordinate. For video resolutions with a height of 576 pixels or less, MediaConvert doesn't include the DDS, regardless of the value you choose for DDS handling. All burn-in and DVB-Sub font settings must match. To include the DDS, with optimized subtitle placement and reduced data overhead: We recommend that you choose Specified (optimal). This option provides the same visual positioning as Specified while using less bandwidth. This also supports resolutions higher than 1080p while maintaining full DVB-Sub compatibility. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate."
         },
         "DdsXCoordinate": {
           "shape": "__integerMin0Max2147483647",
@@ -4988,11 +5571,51 @@
     },
     "DvbddsHandling": {
       "type": "string",
-      "documentation": "Specify how MediaConvert handles the display definition segment (DDS). To exclude the DDS from this set of captions: Keep the default, None. To include the DDS: Choose Specified. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate. To include the DDS, but not include display window data: Choose No display window. When you do, you can write position metadata to the page composition segment (PCS) with DDS x-coordinate and DDS y-coordinate. For video resolutions with a height of 576 pixels or less, MediaConvert doesn't include the DDS, regardless of the value you choose for DDS handling. All burn-in and DVB-Sub font settings must match.",
+      "documentation": "Specify how MediaConvert handles the display definition segment (DDS). To exclude the DDS from this set of captions: Keep the default, None. To include the DDS: Choose Specified. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate. To include the DDS, but not include display window data: Choose No display window. When you do, you can write position metadata to the page composition segment (PCS) with DDS x-coordinate and DDS y-coordinate. For video resolutions with a height of 576 pixels or less, MediaConvert doesn't include the DDS, regardless of the value you choose for DDS handling. All burn-in and DVB-Sub font settings must match. To include the DDS, with optimized subtitle placement and reduced data overhead: We recommend that you choose Specified (optimal). This option provides the same visual positioning as Specified while using less bandwidth. This also supports resolutions higher than 1080p while maintaining full DVB-Sub compatibility. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate.",
       "enum": [
         "NONE",
         "SPECIFIED",
-        "NO_DISPLAY_WINDOW"
+        "NO_DISPLAY_WINDOW",
+        "SPECIFIED_OPTIMAL"
+      ]
+    },
+    "DynamicAudioSelector": {
+      "type": "structure",
+      "members": {
+        "AudioDurationCorrection": {
+          "shape": "AudioDurationCorrection",
+          "locationName": "audioDurationCorrection",
+          "documentation": "Apply audio timing corrections to help synchronize audio and video in your output. To apply timing corrections, your input must meet the following requirements: * Container: MP4, or MOV, with an accurate time-to-sample (STTS) table. * Audio track: AAC. Choose from the following audio timing correction settings: * Disabled (Default): Apply no correction. * Auto: Recommended for most inputs. MediaConvert analyzes the audio timing in your input and determines which correction setting to use, if needed. * Track: Adjust the duration of each audio frame by a constant amount to align the audio track length with STTS duration. Track-level correction does not affect pitch, and is recommended for tonal audio content such as music. * Frame: Adjust the duration of each audio frame by a variable amount to align audio frames with STTS timestamps. No corrections are made to already-aligned frames. Frame-level correction may affect the pitch of corrected frames, and is recommended for atonal audio content such as speech or percussion. * Force: Apply audio duration correction, either Track or Frame depending on your input, regardless of the accuracy of your input's STTS table. Your output audio and video may not be aligned or it may contain audio artifacts."
+        },
+        "ExternalAudioFileInput": {
+          "shape": "__stringPatternS3Https",
+          "locationName": "externalAudioFileInput",
+          "documentation": "Specify the S3, HTTP, or HTTPS URL for your external audio file input."
+        },
+        "LanguageCode": {
+          "shape": "LanguageCode",
+          "locationName": "languageCode",
+          "documentation": "Specify the language, using an ISO 639-2 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
+        },
+        "Offset": {
+          "shape": "__integerMinNegative2147483648Max2147483647",
+          "locationName": "offset",
+          "documentation": "Specify a time delta, in milliseconds, to offset the audio from the input video.\nTo specify no offset: Keep the default value, 0.\nTo specify an offset: Enter an integer from -2147483648 to 2147483647"
+        },
+        "SelectorType": {
+          "shape": "DynamicAudioSelectorType",
+          "locationName": "selectorType",
+          "documentation": "Specify which audio tracks to dynamically select from your source. To select all audio tracks: Keep the default value, All tracks. To select all audio tracks with a specific language code: Choose Language code. When you do, you must also specify a language code under the Language code setting. If there is no matching Language code in your source, then no track will be selected."
+        }
+      },
+      "documentation": "Use Dynamic audio selectors when you do not know the track layout of your source when you submit your job, but want to select multiple audio tracks. When you include an audio track in your output and specify this Dynamic audio selector as the Audio source, MediaConvert creates an audio track within that output for each dynamically selected track. Note that when you include a Dynamic audio selector for two or more inputs, each input must have the same number of audio tracks and audio channels."
+    },
+    "DynamicAudioSelectorType": {
+      "type": "string",
+      "documentation": "Specify which audio tracks to dynamically select from your source. To select all audio tracks: Keep the default value, All tracks. To select all audio tracks with a specific language code: Choose Language code. When you do, you must also specify a language code under the Language code setting. If there is no matching Language code in your source, then no track will be selected.",
+      "enum": [
+        "ALL_TRACKS",
+        "LANGUAGE_CODE"
       ]
     },
     "Eac3AtmosBitstreamMode": {
@@ -5661,6 +6284,11 @@
           "shape": "FileSourceTimeDeltaUnits",
           "locationName": "timeDeltaUnits",
           "documentation": "When you use the setting Time delta to adjust the sync between your sidecar captions and your video, use this setting to specify the units for the delta that you specify. When you don't specify a value for Time delta units, MediaConvert uses seconds by default."
+        },
+        "UpconvertSTLToTeletext": {
+          "shape": "CaptionSourceUpconvertSTLToTeletext",
+          "locationName": "upconvertSTLToTeletext",
+          "documentation": "Specify whether this set of input captions appears in your outputs in both STL and Teletext format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the STL data through using the Teletext compatibility bytes fields of the Teletext wrapper, and it also translates the STL data into Teletext."
         }
       },
       "documentation": "If your input captions are SCC, SMI, SRT, STL, TTML, WebVTT, or IMSC 1.1 in an xml file, specify the URI of the input caption source file. If your caption source is IMSC in an IMF package, use TrackSourceSettings instead of FileSoureSettings."
@@ -5687,7 +6315,7 @@
           "documentation": "Specify the number of channels in this output audio track. Choosing Mono on the console gives you 1 output channel; choosing Stereo gives you 2. In the API, valid values are between 1 and 8."
         },
         "SampleRate": {
-          "shape": "__integerMin22050Max48000",
+          "shape": "__integerMin22050Max192000",
           "locationName": "sampleRate",
           "documentation": "Sample rate in Hz."
         }
@@ -5733,6 +6361,16 @@
       },
       "documentation": "Use Force include renditions to specify one or more resolutions to include your ABR stack. * (Recommended) To optimize automated ABR, specify as few resolutions as possible. * (Required) The number of resolutions that you specify must be equal to, or less than, the Max renditions setting. * If you specify a Min top rendition size rule, specify at least one resolution that is equal to, or greater than, Min top rendition size. * If you specify a Min bottom rendition size rule, only specify resolutions that are equal to, or greater than, Min bottom rendition size. * If you specify a Force include renditions rule, do not specify a separate rule for Allowed renditions. * Note: The ABR stack may include other resolutions that you do not specify here, depending on the Max renditions setting."
     },
+    "Format": {
+      "type": "string",
+      "enum": [
+        "mp4",
+        "quicktime",
+        "matroska",
+        "webm",
+        "mxf"
+      ]
+    },
     "FrameCaptureSettings": {
       "type": "structure",
       "members": {
@@ -5759,6 +6397,35 @@
       },
       "documentation": "Required when you set Codec to the value FRAME_CAPTURE."
     },
+    "FrameMetricType": {
+      "type": "string",
+      "documentation": "* PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes",
+      "enum": [
+        "PSNR",
+        "SSIM",
+        "MS_SSIM",
+        "PSNR_HVS",
+        "VMAF",
+        "QVBR",
+        "SHOT_CHANGE"
+      ]
+    },
+    "FrameRate": {
+      "type": "structure",
+      "members": {
+        "Denominator": {
+          "shape": "__integer",
+          "locationName": "denominator",
+          "documentation": "The denominator, or bottom number, in the fractional frame rate. For example, if your frame rate is 24000 / 1001 (23.976 frames per second), then the denominator would be 1001."
+        },
+        "Numerator": {
+          "shape": "__integer",
+          "locationName": "numerator",
+          "documentation": "The numerator, or top number, in the fractional frame rate. For example, if your frame rate is 24000 / 1001 (23.976 frames per second), then the numerator would be 24000."
+        }
+      },
+      "documentation": "The frame rate of the video or audio track, expressed as a fraction with numerator and denominator values."
+    },
     "GetJobRequest": {
       "type": "structure",
       "members": {
@@ -5807,11 +6474,44 @@
         }
       }
     },
-    "GetPolicyRequest": {
+    "GetJobsQueryResultsRequest": {
       "type": "structure",
       "members": {
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The ID of the jobs query.",
+          "location": "uri"
+        }
+      },
+      "required": [
+        "Id"
+      ]
+    },
+    "GetJobsQueryResultsResponse": {
+      "type": "structure",
+      "members": {
+        "Jobs": {
+          "shape": "__listOfJob",
+          "locationName": "jobs",
+          "documentation": "List of jobs."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "Use this string to request the next batch of jobs via the StartJobsQuery API."
+        },
+        "Status": {
+          "shape": "JobsQueryStatus",
+          "locationName": "status",
+          "documentation": "The status of the jobs query."
+        }
       }
     },
+    "GetPolicyRequest": {
+      "type": "structure",
+      "members": {}
+    },
     "GetPolicyResponse": {
       "type": "structure",
       "members": {
@@ -5870,6 +6570,48 @@
         }
       }
     },
+    "GifFramerateControl": {
+      "type": "string",
+      "documentation": "If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator.",
+      "enum": [
+        "INITIALIZE_FROM_SOURCE",
+        "SPECIFIED"
+      ]
+    },
+    "GifFramerateConversionAlgorithm": {
+      "type": "string",
+      "documentation": "Optional. Specify how the transcoder performs framerate conversion. The default behavior is to use Drop duplicate (DUPLICATE_DROP) conversion. When you choose Interpolate (INTERPOLATE) instead, the conversion produces smoother motion.",
+      "enum": [
+        "DUPLICATE_DROP",
+        "INTERPOLATE"
+      ]
+    },
+    "GifSettings": {
+      "type": "structure",
+      "members": {
+        "FramerateControl": {
+          "shape": "GifFramerateControl",
+          "locationName": "framerateControl",
+          "documentation": "If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator."
+        },
+        "FramerateConversionAlgorithm": {
+          "shape": "GifFramerateConversionAlgorithm",
+          "locationName": "framerateConversionAlgorithm",
+          "documentation": "Optional. Specify how the transcoder performs framerate conversion. The default behavior is to use Drop duplicate (DUPLICATE_DROP) conversion. When you choose Interpolate (INTERPOLATE) instead, the conversion produces smoother motion."
+        },
+        "FramerateDenominator": {
+          "shape": "__integerMin1Max2147483647",
+          "locationName": "framerateDenominator",
+          "documentation": "When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example,  24000 / 1001 = 23.976 fps. Use FramerateDenominator to specify the denominator of this fraction. In this example, use 1001 for the value of FramerateDenominator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976."
+        },
+        "FramerateNumerator": {
+          "shape": "__integerMin1Max2147483647",
+          "locationName": "framerateNumerator",
+          "documentation": "When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example,  24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976."
+        }
+      },
+      "documentation": "Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value GIF"
+    },
     "H264AdaptiveQuantization": {
       "type": "string",
       "documentation": "Keep the default value, Auto, for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set H264AdaptiveQuantization to a value other than Auto. Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off. Related settings: The value that you choose here applies to the following settings: H264FlickerAdaptiveQuantization, H264SpatialAdaptiveQuantization, and H264TemporalAdaptiveQuantization.",
@@ -5969,11 +6711,12 @@
     },
     "H264FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "H264GopBReference": {
@@ -6145,7 +6888,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "H264FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -6232,6 +6975,11 @@
           "locationName": "parNumerator",
           "documentation": "Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "QualityTuningLevel": {
           "shape": "H264QualityTuningLevel",
           "locationName": "qualityTuningLevel",
@@ -6427,6 +7175,14 @@
         "MAIN_422_10BIT_HIGH"
       ]
     },
+    "H265Deblocking": {
+      "type": "string",
+      "documentation": "Use Deblocking to improve the video quality of your output by smoothing the edges of macroblock artifacts created during video compression. To reduce blocking artifacts at block boundaries, and improve overall video quality: Keep the default value, Enabled. To not apply any deblocking: Choose Disabled. Visible block edge artifacts might appear in the output, especially at lower bitrates.",
+      "enum": [
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "H265DynamicSubGop": {
       "type": "string",
       "documentation": "Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames.",
@@ -6461,11 +7217,12 @@
     },
     "H265FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "H265GopBReference": {
@@ -6602,6 +7359,11 @@
           "locationName": "codecProfile",
           "documentation": "Represents the Profile and Tier, per the HEVC (H.265) specification. Selections are grouped as [Profile] / [Tier], so \"Main/High\" represents Main Profile with High Tier. 4:2:2 profiles are only available with the HEVC 4:2:2 License."
         },
+        "Deblocking": {
+          "shape": "H265Deblocking",
+          "locationName": "deblocking",
+          "documentation": "Use Deblocking to improve the video quality of your output by smoothing the edges of macroblock artifacts created during video compression. To reduce blocking artifacts at block boundaries, and improve overall video quality: Keep the default value, Enabled. To not apply any deblocking: Choose Disabled. Visible block edge artifacts might appear in the output, especially at lower bitrates."
+        },
         "DynamicSubGop": {
           "shape": "H265DynamicSubGop",
           "locationName": "dynamicSubGop",
@@ -6625,7 +7387,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "H265FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -6712,6 +7474,11 @@
           "locationName": "parNumerator",
           "documentation": "Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "QualityTuningLevel": {
           "shape": "H265QualityTuningLevel",
           "locationName": "qualityTuningLevel",
@@ -7006,12 +7773,12 @@
         "CustomLanguageCode": {
           "shape": "__stringMin3Max3PatternAZaZ3",
           "locationName": "customLanguageCode",
-          "documentation": "Specify the language for this captions channel, using the ISO 639-2 or ISO 639-3 three-letter language code"
+          "documentation": "Specify the language, using an ISO 639-2 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
         },
         "LanguageCode": {
           "shape": "LanguageCode",
           "locationName": "languageCode",
-          "documentation": "Specify the language, using the ISO 639-2 three-letter code listed at https://www.loc.gov/standards/iso639-2/php/code_list.php."
+          "documentation": "Specify the language, using an ISO 639-2 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
         },
         "LanguageDescription": {
           "shape": "__string",
@@ -7250,7 +8017,7 @@
         "SegmentLengthControl": {
           "shape": "HlsSegmentLengthControl",
           "locationName": "segmentLengthControl",
-          "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary."
+          "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz."
         },
         "SegmentsPerSubdirectory": {
           "shape": "__integerMin1Max2147483647",
@@ -7287,9 +8054,10 @@
     },
     "HlsIFrameOnlyManifest": {
       "type": "string",
-      "documentation": "Choose Include to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude.",
+      "documentation": "Generate a variant manifest that lists only the I-frames for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only variant manifest and the regular variant manifest to the multivariant manifest. To have MediaConvert write a variant manifest that references I-frames from your output content using EXT-X-BYTERANGE tags: Choose Include. To have MediaConvert output I-frames as single frame TS files and a corresponding variant manifest that references them: Choose Include as TS. When you don't need the I-frame only variant manifest: Keep the default value, Exclude.",
       "enum": [
         "INCLUDE",
+        "INCLUDE_AS_TS",
         "EXCLUDE"
       ]
     },
@@ -7422,7 +8190,7 @@
         "RenditionLanguageCode": {
           "shape": "LanguageCode",
           "locationName": "renditionLanguageCode",
-          "documentation": "Optional. Specify ISO 639-2 or ISO 639-3 code in the language property"
+          "documentation": "Optionally specify the language, using an ISO 639-2 or ISO 639-3 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
         },
         "RenditionName": {
           "shape": "__string",
@@ -7442,10 +8210,11 @@
     },
     "HlsSegmentLengthControl": {
       "type": "string",
-      "documentation": "Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary.",
+      "documentation": "Specify how you want MediaConvert to determine segment lengths in this output group. To use the exact value that you specify under Segment length: Choose Exact. Note that this might result in additional I-frames in the output GOP. To create segment lengths that are a multiple of the GOP: Choose Multiple of GOP. MediaConvert will round up the segment lengths to match the next GOP boundary. To have MediaConvert automatically determine a segment duration that is a multiple of both the audio packets and the frame rates: Choose Match. When you do, also specify a target segment duration under Segment length. This is useful for some ad-insertion or segment replacement workflows. Note that Match has the following requirements: - Output containers: Include at least one video output and at least one audio output. Audio-only outputs are not supported. - Output frame rate: Follow source is not supported. - Multiple output frame rates: When you specify multiple outputs, we recommend they share a similar frame rate (as in X/3, X/2, X, or 2X). For example: 5, 15, 30 and 60. Or: 25 and 50. (Outputs must share an integer multiple.) - Output audio codec: Specify Advanced Audio Coding (AAC). - Output sample rate: Choose 48kHz.",
       "enum": [
         "EXACT",
-        "GOP_MULTIPLE"
+        "GOP_MULTIPLE",
+        "MATCH"
       ]
     },
     "HlsSettings": {
@@ -7479,7 +8248,7 @@
         "IFrameOnlyManifest": {
           "shape": "HlsIFrameOnlyManifest",
           "locationName": "iFrameOnlyManifest",
-          "documentation": "Choose Include to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude."
+          "documentation": "Generate a variant manifest that lists only the I-frames for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only variant manifest and the regular variant manifest to the multivariant manifest. To have MediaConvert write a variant manifest that references I-frames from your output content using EXT-X-BYTERANGE tags: Choose Include. To have MediaConvert output I-frames as single frame TS files and a corresponding variant manifest that references them: Choose Include as TS. When you don't need the I-frame only variant manifest: Keep the default value, Exclude."
         },
         "SegmentModifier": {
           "shape": "__string",
@@ -7569,7 +8338,7 @@
     },
     "ImscAccessibilitySubs": {
       "type": "string",
-      "documentation": "If the IMSC captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>.",
+      "documentation": "If the IMSC captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.transcribes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>.",
       "enum": [
         "DISABLED",
         "ENABLED"
@@ -7581,7 +8350,7 @@
         "Accessibility": {
           "shape": "ImscAccessibilitySubs",
           "locationName": "accessibility",
-          "documentation": "If the IMSC captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>."
+          "documentation": "If the IMSC captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.transcribes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>."
         },
         "StylePassthrough": {
           "shape": "ImscStylePassthrough",
@@ -7652,10 +8421,15 @@
           "locationName": "dolbyVisionMetadataXml",
           "documentation": "Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and uses only the the metadata from this external XML file. Note that your IAM service role must grant MediaConvert read permissions to this file. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html."
         },
+        "DynamicAudioSelectors": {
+          "shape": "__mapOfDynamicAudioSelector",
+          "locationName": "dynamicAudioSelectors",
+          "documentation": "Use Dynamic audio selectors when you do not know the track layout of your source when you submit your job, but want to select multiple audio tracks. When you include an audio track in your output and specify this Dynamic audio selector as the Audio source, MediaConvert creates an output audio track for each dynamically selected track. Note that when you include a Dynamic audio selector for two or more inputs, each input must have the same number of audio tracks and audio channels."
+        },
         "FileInput": {
           "shape": "__stringMax2048PatternS3Https",
           "locationName": "fileInput",
-          "documentation": "Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service concatenates these inputs, in the order that you specify them in the job, to create the outputs. If your input format is IMF, specify your input by providing the path to your CPL. For example, \"s3://bucket/vf/cpl.xml\". If the CPL is in an incomplete IMP, make sure to use *Supplemental IMPs* to specify any supplemental IMPs that contain assets referenced by the CPL."
+          "documentation": "Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service concatenates these inputs, in the order that you specify them in the job, to create the outputs. For standard inputs, provide the path to your S3, HTTP, or HTTPS source file. For example, s3://amzn-s3-demo-bucket/input.mp4 for an Amazon S3 input or https://example.com/input.mp4 for an HTTPS input. For TAMS inputs, specify the HTTPS endpoint of your TAMS server. For example, https://tams-server.example.com . When you do, also specify Source ID, Timerange, GAP handling, and the Authorization connection ARN under TAMS settings. (Don't include these parameters in the Input file URL.) For IMF inputs, specify your input by providing the path to your CPL. For example, s3://amzn-s3-demo-bucket/vf/cpl.xml . If the CPL is in an incomplete IMP, make sure to use Supplemental IMPsto specify any supplemental IMPs that contain assets referenced by the CPL."
         },
         "FilterEnable": {
           "shape": "InputFilterEnable",
@@ -7702,6 +8476,11 @@
           "locationName": "supplementalImps",
           "documentation": "Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're using for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a trailing slash or the ASSETMAP.xml files. For example [\"s3://bucket/ov/\", \"s3://bucket/vf2/ASSETMAP.xml\"]. You don't need to specify the IMP that contains your input CPL, because the service automatically detects it."
         },
+        "TamsSettings": {
+          "shape": "InputTamsSettings",
+          "locationName": "tamsSettings",
+          "documentation": "Specify a Time Addressable Media Store (TAMS) server as an input source. TAMS is an open-source API specification that provides access to time-segmented media content. Use TAMS to retrieve specific time ranges from live or archived media streams. When you specify TAMS settings, MediaConvert connects to your TAMS server, retrieves the media segments for your specified time range, and processes them as a single input. This enables workflows like extracting clips from live streams or processing specific portions of archived content. To use TAMS, you must: 1. Have access to a TAMS-compliant server 2. Specify the server URL in the Input file URL field 3. Provide the required SourceId and Timerange parameters 4. Configure authentication, if your TAMS server requires it"
+        },
         "TimecodeSource": {
           "shape": "InputTimecodeSource",
           "locationName": "timecodeSource",
@@ -7841,6 +8620,32 @@
         "PSF"
       ]
     },
+    "InputTamsSettings": {
+      "type": "structure",
+      "members": {
+        "AuthConnectionArn": {
+          "shape": "__stringPatternArnAwsAZ09EventsAZ090912ConnectionAZAZ09AF0936",
+          "locationName": "authConnectionArn",
+          "documentation": "Specify the ARN (Amazon Resource Name) of an EventBridge Connection to authenticate with your TAMS server. The EventBridge Connection stores your authentication credentials securely. MediaConvert assumes your job's IAM role to access this connection, so ensure the role has the events:RetrieveConnectionCredentials, secretsmanager:DescribeSecret, and secretsmanager:GetSecretValue permissions. Format: arn:aws:events:region:account-id:connection/connection-name/unique-id This setting is required when you include TAMS settings in your job."
+        },
+        "GapHandling": {
+          "shape": "TamsGapHandling",
+          "locationName": "gapHandling",
+          "documentation": "Specify how MediaConvert handles gaps between media segments in your TAMS source. Gaps can occur in live streams due to network issues or other interruptions. Choose from the following options: * Skip gaps - Default. Skip over gaps and join segments together. This creates a continuous output with no blank frames, but may cause timeline discontinuities. * Fill with black - Insert black frames to fill gaps between segments. This maintains timeline continuity but adds black frames where content is missing. * Hold last frame - Repeat the last frame before a gap until the next segment begins. This maintains visual continuity during gaps."
+        },
+        "SourceId": {
+          "shape": "__string",
+          "locationName": "sourceId",
+          "documentation": "Specify the unique identifier for the media source in your TAMS server. MediaConvert uses this source ID to locate the appropriate flows containing the media segments you want to process. The source ID corresponds to a specific media source registered in your TAMS server. This source must be of type urn:x-nmos:format:multi, and can can reference multiple flows for audio, video, or combined audio/video content. MediaConvert automatically selects the highest quality flows available for your job. This setting is required when you include TAMS settings in your job."
+        },
+        "Timerange": {
+          "shape": "__stringPattern019090190908019090190908",
+          "locationName": "timerange",
+          "documentation": "Specify the time range of media segments to retrieve from your TAMS server. MediaConvert fetches only the segments that fall within this range. Use the format specified by your TAMS server implementation. This must be two timestamp values with the format {sign?}{seconds}:{nanoseconds}, separated by an underscore, surrounded by either parentheses or square brackets.  Example: [15:0_35:0) This setting is required when you include TAMS settings in your job."
+        }
+      },
+      "documentation": "Specify a Time Addressable Media Store (TAMS) server as an input source. TAMS is an open-source API specification that provides access to time-segmented media content. Use TAMS to retrieve specific time ranges from live or archived media streams. When you specify TAMS settings, MediaConvert connects to your TAMS server, retrieves the media segments for your specified time range, and processes them as a single input. This enables workflows like extracting clips from live streams or processing specific portions of archived content. To use TAMS, you must: 1. Have access to a TAMS-compliant server 2. Specify the server URL in the Input file URL field 3. Provide the required SourceId and Timerange parameters 4. Configure authentication, if your TAMS server requires it"
+    },
     "InputTemplate": {
       "type": "structure",
       "members": {
@@ -7889,6 +8694,11 @@
           "locationName": "dolbyVisionMetadataXml",
           "documentation": "Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and uses only the the metadata from this external XML file. Note that your IAM service role must grant MediaConvert read permissions to this file. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html."
         },
+        "DynamicAudioSelectors": {
+          "shape": "__mapOfDynamicAudioSelector",
+          "locationName": "dynamicAudioSelectors",
+          "documentation": "Use Dynamic audio selectors when you do not know the track layout of your source when you submit your job, but want to select multiple audio tracks. When you include an audio track in your output and specify this Dynamic audio selector as the Audio source, MediaConvert creates an output audio track for each dynamically selected track. Note that when you include a Dynamic audio selector for two or more inputs, each input must have the same number of audio tracks and audio channels."
+        },
         "FilterEnable": {
           "shape": "InputFilterEnable",
           "locationName": "filterEnable",
@@ -7984,10 +8794,20 @@
           "locationName": "framerateNumerator",
           "documentation": "Specify the numerator of the fraction that represents the frame rate for your video generator input. When you do, you must also specify a value for Frame rate denominator. MediaConvert uses a default frame rate of 29.97 when you leave Frame rate numerator and Frame rate denominator blank."
         },
+        "Height": {
+          "shape": "__integerMin32Max8192",
+          "locationName": "height",
+          "documentation": "Specify the height, in pixels, for your video generator input. This is useful for positioning when you include one or more video overlays for this input. To use the default resolution 540x360: Leave both width and height blank. To specify a height: Enter an even integer from 32 to 8192. When you do, you must also specify a value for width."
+        },
         "SampleRate": {
           "shape": "__integerMin32000Max48000",
           "locationName": "sampleRate",
           "documentation": "Specify the audio sample rate, in Hz, for the silent audio in your video generator input.\nEnter an integer from 32000 to 48000."
+        },
+        "Width": {
+          "shape": "__integerMin32Max8192",
+          "locationName": "width",
+          "documentation": "Specify the width, in pixels, for your video generator input. This is useful for positioning when you include one or more video overlays for this input. To use the default resolution 540x360: Leave both width and height blank. To specify a width: Enter an even integer from 32 to 8192. When you do, you must also specify a value for height."
         }
       },
       "documentation": "When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if you do not have a video input or if you want to add black video frames before, or after, other inputs. You can specify Video generator, or you can specify an Input file, but you cannot specify both. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html"
@@ -8145,6 +8965,11 @@
           "locationName": "jobTemplate",
           "documentation": "The job template that the job is created from, if it is created from a job template."
         },
+        "LastShareDetails": {
+          "shape": "__string",
+          "locationName": "lastShareDetails",
+          "documentation": "Contains information about the most recent share attempt for the job. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/creating-resource-share.html"
+        },
         "Messages": {
           "shape": "JobMessages",
           "locationName": "messages",
@@ -8185,6 +9010,11 @@
           "locationName": "settings",
           "documentation": "JobSettings contains all the transcode settings for a job."
         },
+        "ShareStatus": {
+          "shape": "ShareStatus",
+          "locationName": "shareStatus",
+          "documentation": "A job's share status can be NOT_SHARED, INITIATED, or SHARED"
+        },
         "SimulateReservedQueue": {
           "shape": "SimulateReservedQueue",
           "locationName": "simulateReservedQueue",
@@ -8233,7 +9063,7 @@
         "Version": {
           "shape": "__string",
           "locationName": "version",
-          "documentation": "Use Job engine versions to run jobs for your production workflow on one version, while you test and validate the latest version. Job engine versions are in a YYYY-MM-DD format."
+          "documentation": "Use Job engine versions to run jobs for your production workflow on one version, while you test and validate the latest version. Job engine versions represent periodically grouped MediaConvert releases with new features, updates, improvements, and fixes. Job engine versions are in a YYYY-MM-DD format. Note that the Job engine version feature is not publicly available at this time. To request access, contact AWS support."
         }
       },
       "documentation": "Use Job engine versions to run jobs for your production workflow on one version, while you test and validate the latest version. Job engine versions are in a YYYY-MM-DD format."
@@ -8510,6 +9340,45 @@
       },
       "documentation": "JobTemplateSettings contains all the transcode settings saved in the template that will be applied to jobs created from it."
     },
+    "JobsQueryFilter": {
+      "type": "structure",
+      "members": {
+        "Key": {
+          "shape": "JobsQueryFilterKey",
+          "locationName": "key",
+          "documentation": "Specify job details to filter for while performing a jobs query. You specify these filters as part of a key-value pair within the JobsQueryFilter array. The following list describes which keys are available and their possible values: * queue - Your Queue's name or ARN. * status - Your job's status. (SUBMITTED | PROGRESSING | COMPLETE | CANCELED | ERROR) * fileInput - Your input file URL, or partial input file name. * jobEngineVersionRequested - The Job engine version that you requested for your job. Valid versions are in a YYYY-MM-DD format. * jobEngineVersionUsed - The Job engine version that your job used. This may differ from the version that you requested. Valid versions are in a YYYY-MM-DD format. * audioCodec - Your output's audio codec. (AAC | MP2 | MP3 | WAV | AIFF | AC3| EAC3 | EAC3_ATMOS | VORBIS | OPUS | PASSTHROUGH | FLAC) * videoCodec - Your output's video codec. (AV1 | AVC_INTRA | FRAME_CAPTURE | H_264 | H_265 | MPEG2 | PASSTHROUGH | PRORES | UNCOMPRESSED | VC3 | VP8 | VP9 | XAVC)"
+        },
+        "Values": {
+          "shape": "__listOf__stringMax100",
+          "locationName": "values",
+          "documentation": "A list of values associated with a JobsQueryFilterKey."
+        }
+      },
+      "documentation": "Provide one or more JobsQueryFilter objects, each containing a Key with an associated Values array. Note that MediaConvert queries jobs using OR logic."
+    },
+    "JobsQueryFilterKey": {
+      "type": "string",
+      "documentation": "Specify job details to filter for while performing a jobs query. You specify these filters as part of a key-value pair within the JobsQueryFilter array. The following list describes which keys are available and their possible values: * queue - Your Queue's name or ARN. * status - Your job's status. (SUBMITTED | PROGRESSING | COMPLETE | CANCELED | ERROR) * fileInput - Your input file URL, or partial input file name. * jobEngineVersionRequested - The Job engine version that you requested for your job. Valid versions are in a YYYY-MM-DD format. * jobEngineVersionUsed - The Job engine version that your job used. This may differ from the version that you requested. Valid versions are in a YYYY-MM-DD format. * audioCodec - Your output's audio codec. (AAC | MP2 | MP3 | WAV | AIFF | AC3| EAC3 | EAC3_ATMOS | VORBIS | OPUS | PASSTHROUGH | FLAC) * videoCodec - Your output's video codec. (AV1 | AVC_INTRA | FRAME_CAPTURE | H_264 | H_265 | MPEG2 | PASSTHROUGH | PRORES | UNCOMPRESSED | VC3 | VP8 | VP9 | XAVC)",
+      "enum": [
+        "queue",
+        "status",
+        "fileInput",
+        "jobEngineVersionRequested",
+        "jobEngineVersionUsed",
+        "audioCodec",
+        "videoCodec"
+      ]
+    },
+    "JobsQueryStatus": {
+      "type": "string",
+      "documentation": "A job query's status can be SUBMITTED, PROGRESSING, COMPLETE, or ERROR.",
+      "enum": [
+        "SUBMITTED",
+        "PROGRESSING",
+        "COMPLETE",
+        "ERROR"
+      ]
+    },
     "KantarWatermarkSettings": {
       "type": "structure",
       "members": {
@@ -8583,7 +9452,7 @@
     },
     "LanguageCode": {
       "type": "string",
-      "documentation": "Specify the language, using the ISO 639-2 three-letter code listed at https://www.loc.gov/standards/iso639-2/php/code_list.php.",
+      "documentation": "Specify the language, using an ISO 639-2 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php",
       "enum": [
         "ENG",
         "SPA",
@@ -9205,6 +10074,11 @@
           "locationName": "audioPids",
           "documentation": "Specify the packet identifiers (PIDs) for any elementary audio streams you include in this output. Specify multiple PIDs as a JSON array. Default is the range 482-492."
         },
+        "AudioPtsOffsetDelta": {
+          "shape": "__integerMinNegative10000Max10000",
+          "locationName": "audioPtsOffsetDelta",
+          "documentation": "Manually specify the difference in PTS offset that will be applied to the audio track, in seconds or milliseconds, when you set PTS offset to Seconds or Milliseconds. Enter an integer from -10000 to 10000. Leave blank to keep the default value 0."
+        },
         "Bitrate": {
           "shape": "__integerMin0Max2147483647",
           "locationName": "bitrate",
@@ -9343,7 +10217,7 @@
         "PtsOffsetMode": {
           "shape": "TsPtsOffset",
           "locationName": "ptsOffsetMode",
-          "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds. Then specify the number of seconds with PTS offset."
+          "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds or Milliseconds. Then specify the number of seconds or milliseconds with PTS offset."
         },
         "RateMode": {
           "shape": "M2tsRateMode",
@@ -9456,6 +10330,11 @@
           "locationName": "audioPids",
           "documentation": "Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation."
         },
+        "AudioPtsOffsetDelta": {
+          "shape": "__integerMinNegative10000Max10000",
+          "locationName": "audioPtsOffsetDelta",
+          "documentation": "Manually specify the difference in PTS offset that will be applied to the audio track, in seconds or milliseconds, when you set PTS offset to Seconds or Milliseconds. Enter an integer from -10000 to 10000. Leave blank to keep the default value 0."
+        },
         "DataPTSControl": {
           "shape": "M3u8DataPtsControl",
           "locationName": "dataPTSControl",
@@ -9514,7 +10393,7 @@
         "PtsOffsetMode": {
           "shape": "TsPtsOffset",
           "locationName": "ptsOffsetMode",
-          "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds. Then specify the number of seconds with PTS offset."
+          "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds or Milliseconds. Then specify the number of seconds or milliseconds with PTS offset."
         },
         "Scte35Pid": {
           "shape": "__integerMin32Max8182",
@@ -9549,6 +10428,56 @@
       },
       "documentation": "These settings relate to the MPEG-2 transport stream (MPEG2-TS) container for the MPEG2-TS segments in your HLS outputs."
     },
+    "MatrixCoefficients": {
+      "type": "string",
+      "documentation": "The color space matrix coefficients of the video track, defining how RGB color values are converted to and from YUV color space. This affects color accuracy during encoding and decoding processes.",
+      "enum": [
+        "RGB",
+        "ITU_709",
+        "UNSPECIFIED",
+        "RESERVED",
+        "FCC",
+        "ITU_470BG",
+        "SMPTE_170M",
+        "SMPTE_240M",
+        "YCgCo",
+        "ITU_2020_NCL",
+        "ITU_2020_CL",
+        "SMPTE_2085",
+        "CD_NCL",
+        "CD_CL",
+        "ITU_2100ICtCp",
+        "IPT",
+        "EBU3213",
+        "LAST"
+      ]
+    },
+    "Metadata": {
+      "type": "structure",
+      "members": {
+        "ETag": {
+          "shape": "__string",
+          "locationName": "eTag",
+          "documentation": "The entity tag (ETag) of the file."
+        },
+        "FileSize": {
+          "shape": "__long",
+          "locationName": "fileSize",
+          "documentation": "The size of the media file, in bytes."
+        },
+        "LastModified": {
+          "shape": "__timestampUnix",
+          "locationName": "lastModified",
+          "documentation": "The last modification timestamp of the media file, in Unix time."
+        },
+        "MimeType": {
+          "shape": "__string",
+          "locationName": "mimeType",
+          "documentation": "The MIME type of the media file."
+        }
+      },
+      "documentation": "Metadata and other file information."
+    },
     "MinBottomRenditionSize": {
       "type": "structure",
       "members": {
@@ -9736,9 +10665,22 @@
       },
       "documentation": "These settings relate to your QuickTime MOV output container."
     },
+    "Mp2AudioDescriptionMix": {
+      "type": "string",
+      "documentation": "Choose BROADCASTER_MIXED_AD when the input contains pre-mixed main audio + audio description (AD) as a stereo pair. The value for AudioType will be set to 3, which signals to downstream systems that this stream contains \"broadcaster mixed AD\". Note that the input received by the encoder must contain pre-mixed audio; the encoder does not perform the mixing. When you choose BROADCASTER_MIXED_AD, the encoder ignores any values you provide in AudioType and FollowInputAudioType. Choose NONE when the input does not contain pre-mixed audio + audio description (AD). In this case, the encoder will use any values you provide for AudioType and FollowInputAudioType.",
+      "enum": [
+        "BROADCASTER_MIXED_AD",
+        "NONE"
+      ]
+    },
     "Mp2Settings": {
       "type": "structure",
       "members": {
+        "AudioDescriptionMix": {
+          "shape": "Mp2AudioDescriptionMix",
+          "locationName": "audioDescriptionMix",
+          "documentation": "Choose BROADCASTER_MIXED_AD when the input contains pre-mixed main audio + audio description (AD) as a stereo pair. The value for AudioType will be set to 3, which signals to downstream systems that this stream contains \"broadcaster mixed AD\". Note that the input received by the encoder must contain pre-mixed audio; the encoder does not perform the mixing. When you choose BROADCASTER_MIXED_AD, the encoder ignores any values you provide in AudioType and FollowInputAudioType. Choose NONE when the input does not contain pre-mixed audio + audio description (AD). In this case, the encoder will use any values you provide for AudioType and FollowInputAudioType."
+        },
         "Bitrate": {
           "shape": "__integerMin32000Max384000",
           "locationName": "bitrate",
@@ -9796,6 +10738,14 @@
       },
       "documentation": "Required when you set Codec, under AudioDescriptions>CodecSettings, to the value MP3."
     },
+    "Mp4C2paManifest": {
+      "type": "string",
+      "documentation": "When enabled, a C2PA compliant manifest will be generated, signed and embeded in the output. For more information on C2PA, see https://c2pa.org/specifications/specifications/2.1/index.html",
+      "enum": [
+        "INCLUDE",
+        "EXCLUDE"
+      ]
+    },
     "Mp4CslgAtom": {
       "type": "string",
       "documentation": "When enabled, file composition times will start at zero, composition times in the 'ctts' (composition time to sample) box for B-frames will be negative, and a 'cslg' (composition shift least greatest) box will be included per 14496-1 amendment 1. This improves compatibility with Apple players and tools.",
@@ -9828,6 +10778,16 @@
           "locationName": "audioDuration",
           "documentation": "Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec."
         },
+        "C2paManifest": {
+          "shape": "Mp4C2paManifest",
+          "locationName": "c2paManifest",
+          "documentation": "When enabled, a C2PA compliant manifest will be generated, signed and embeded in the output. For more information on C2PA, see https://c2pa.org/specifications/specifications/2.1/index.html"
+        },
+        "CertificateSecret": {
+          "shape": "__stringMin1Max2048PatternArnAZSecretsmanagerWD12SecretAZAZ09",
+          "locationName": "certificateSecret",
+          "documentation": "Specify the name or ARN of the AWS Secrets Manager secret that contains your C2PA public certificate chain in PEM format. Provide a valid secret name or ARN. Note that your MediaConvert service role must allow access to this secret. The public certificate chain is added to the COSE header (x5chain) for signature validation. Include the signer's certificate and all intermediate certificates. Do not include the root certificate. For details on COSE, see: https://opensource.contentauthenticity.org/docs/manifest/signing-manifests"
+        },
         "CslgAtom": {
           "shape": "Mp4CslgAtom",
           "locationName": "cslgAtom",
@@ -9852,6 +10812,11 @@
           "shape": "__string",
           "locationName": "mp4MajorBrand",
           "documentation": "Overrides the \"Major Brand\" field in the output file. Usually not necessary to specify."
+        },
+        "SigningKmsKey": {
+          "shape": "__stringMin1PatternArnAwsUsGovCnKmsAZ26EastWestCentralNorthSouthEastWest1912D12KeyAFAF098AFAF094AFAF094AFAF094AFAF0912MrkAFAF0932",
+          "locationName": "signingKmsKey",
+          "documentation": "Specify the ID or ARN of the AWS KMS key used to sign the C2PA manifest in your MP4 output. Provide a valid KMS key ARN. Note that your MediaConvert service role must allow access to this key."
         }
       },
       "documentation": "These settings relate to your MP4 output container. You can create audio only outputs with this container. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/supported-codecs-containers-audio-only.html#output-codecs-and-containers-supported-for-audio-only."
@@ -9874,7 +10839,7 @@
     },
     "MpdCaptionContainerType": {
       "type": "string",
-      "documentation": "Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files.",
+      "documentation": "Use this setting only in DASH output groups that include sidecar TTML, IMSC or WEBVTT captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files.",
       "enum": [
         "RAW",
         "FRAGMENTED_MP4"
@@ -9928,7 +10893,7 @@
         "CaptionContainerType": {
           "shape": "MpdCaptionContainerType",
           "locationName": "captionContainerType",
-          "documentation": "Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files."
+          "documentation": "Use this setting only in DASH output groups that include sidecar TTML, IMSC or WEBVTT captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files."
         },
         "KlvMetadata": {
           "shape": "MpdKlvMetadata",
@@ -10036,11 +11001,12 @@
     },
     "Mpeg2FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "Mpeg2GopSizeUnits": {
@@ -10149,7 +11115,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "Mpeg2FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max1001",
@@ -10231,6 +11197,11 @@
           "locationName": "parNumerator",
           "documentation": "Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "QualityTuningLevel": {
           "shape": "Mpeg2QualityTuningLevel",
           "locationName": "qualityTuningLevel",
@@ -10799,7 +11770,7 @@
         "Extension": {
           "shape": "__stringMax256",
           "locationName": "extension",
-          "documentation": "Use Extension to specify the file extension for outputs in File output groups. If you do not specify a value, the service will use default extensions by container type as follows * MPEG-2 transport stream, m2ts * Quicktime, mov * MXF container, mxf * MPEG-4 container, mp4 * WebM container, webm * No Container, the service will use codec extensions (e.g. AAC, H265, H265, AC3)"
+          "documentation": "Use Extension to specify the file extension for outputs in File output groups. If you do not specify a value, the service will use default extensions by container type as follows * MPEG-2 transport stream, m2ts * Quicktime, mov * MXF container, mxf * MPEG-4 container, mp4 * WebM container, webm * Animated GIF container, gif * No Container, the service will use codec extensions (e.g. AAC, H265, H265, AC3)"
         },
         "NameModifier": {
           "shape": "__stringMin1Max256",
@@ -10926,6 +11897,11 @@
           "locationName": "msSmoothGroupSettings",
           "documentation": "Settings related to your Microsoft Smooth Streaming output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "Type": {
           "shape": "OutputGroupType",
           "locationName": "type",
@@ -10985,6 +11961,17 @@
       },
       "documentation": "If you work with a third party video watermarking partner, use the group of settings that correspond with your watermarking partner to include watermarks in your output."
     },
+    "PassthroughSettings": {
+      "type": "structure",
+      "members": {
+        "VideoSelectorMode": {
+          "shape": "VideoSelectorMode",
+          "locationName": "videoSelectorMode",
+          "documentation": "AUTO will select the highest bitrate input in the video selector source. REMUX_ALL will passthrough all the selected streams in the video selector source. When selecting streams from multiple renditions (i.e. using Stream video selector type): REMUX_ALL will only remux all streams selected, and AUTO will use the highest bitrate video stream among the selected streams as source."
+        }
+      },
+      "documentation": "Optional settings when you set Codec to the value Passthrough."
+    },
     "Policy": {
       "type": "structure",
       "members": {
@@ -11126,6 +12113,58 @@
         "RESERVED"
       ]
     },
+    "ProbeInputFile": {
+      "type": "structure",
+      "members": {
+        "FileUrl": {
+          "shape": "__string",
+          "locationName": "fileUrl",
+          "documentation": "Specify the S3, HTTP, or HTTPS URL for your media file."
+        }
+      },
+      "documentation": "The input file that needs to be analyzed."
+    },
+    "ProbeRequest": {
+      "type": "structure",
+      "members": {
+        "InputFiles": {
+          "shape": "__listOfProbeInputFile",
+          "locationName": "inputFiles",
+          "documentation": "Specify a media file to probe."
+        }
+      }
+    },
+    "ProbeResponse": {
+      "type": "structure",
+      "members": {
+        "ProbeResults": {
+          "shape": "__listOfProbeResult",
+          "locationName": "probeResults",
+          "documentation": "Probe results for your media file."
+        }
+      }
+    },
+    "ProbeResult": {
+      "type": "structure",
+      "members": {
+        "Container": {
+          "shape": "Container",
+          "locationName": "container",
+          "documentation": "The container of your media file. This information helps you understand the overall structure and details of your media, including format, duration, and track layout."
+        },
+        "Metadata": {
+          "shape": "Metadata",
+          "locationName": "metadata",
+          "documentation": "Metadata and other file information."
+        },
+        "TrackMappings": {
+          "shape": "__listOfTrackMapping",
+          "locationName": "trackMappings",
+          "documentation": "An array containing track mapping information."
+        }
+      },
+      "documentation": "Probe results for your media file."
+    },
     "ProresChromaSampling": {
       "type": "string",
       "documentation": "This setting applies only to ProRes 4444 and ProRes 4444 XQ outputs that you create from inputs that use 4:4:4 chroma sampling. Set Preserve 4:4:4 sampling to allow outputs to also use 4:4:4 chroma sampling. You must specify a value for this setting when your output codec profile supports 4:4:4 chroma sampling. Related Settings: For Apple ProRes outputs with 4:4:4 chroma sampling: Choose Preserve 4:4:4 sampling. Use when your input has 4:4:4 chroma sampling and your output codec Profile is Apple ProRes 4444 or 4444 XQ. Note that when you choose Preserve 4:4:4 sampling, you cannot include any of the following Preprocessors: Dolby Vision, HDR10+, or Noise reducer.",
@@ -11156,11 +12195,12 @@
     },
     "ProresFramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "ProresInterlaceMode": {
@@ -11211,7 +12251,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "ProresFramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -11243,6 +12283,11 @@
           "locationName": "parNumerator",
           "documentation": "Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "ScanTypeConversionMode": {
           "shape": "ProresScanTypeConversionMode",
           "locationName": "scanTypeConversionMode",
@@ -11805,6 +12850,28 @@
       },
       "documentation": "A service override applied by MediaConvert to the settings that you have configured. If you see any overrides, we recommend that you contact AWS Support."
     },
+    "ServiceQuotaExceededException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "__string",
+          "locationName": "message"
+        }
+      },
+      "exception": true,
+      "error": {
+        "httpStatusCode": 402
+      },
+      "documentation": "You attempted to create more resources than the service allows based on service quotas."
+    },
+    "ShareStatus": {
+      "type": "string",
+      "enum": [
+        "NOT_SHARED",
+        "INITIATED",
+        "SHARED"
+      ]
+    },
     "SimulateReservedQueue": {
       "type": "string",
       "documentation": "Enable this setting when you run a test job to estimate how many reserved transcoding slots (RTS) you need. When this is enabled, MediaConvert runs your job from an on-demand queue with similar performance to what you will see with one RTS in a reserved queue. This setting is disabled by default.",
@@ -11813,6 +12880,14 @@
         "ENABLED"
       ]
     },
+    "SlowPalPitchCorrection": {
+      "type": "string",
+      "documentation": "Use Slow PAL pitch correction to compensate for audio pitch changes during slow PAL frame rate conversion. This setting only applies when Slow PAL is enabled in your output video codec settings. To automatically apply audio pitch correction: Choose Enabled. MediaConvert automatically applies a pitch correction to your output to match the original content's audio pitch. To not apply audio pitch correction: Keep the default value, Disabled.",
+      "enum": [
+        "DISABLED",
+        "ENABLED"
+      ]
+    },
     "SpekeKeyProvider": {
       "type": "structure",
       "members": {
@@ -11834,7 +12909,7 @@
         "SystemIds": {
           "shape": "__listOf__stringPattern09aFAF809aFAF409aFAF409aFAF409aFAF12",
           "locationName": "systemIds",
-          "documentation": "Relates to SPEKE implementation. DRM system identifiers. DASH output groups support a max of two system ids. Other group types support one system id. See\n https://dashif.org/identifiers/content_protection/ for more details."
+          "documentation": "Relates to SPEKE implementation. DRM system identifiers. DASH output groups support a max of two system ids. HLS output groups support a max of 3 system ids. Other group types support one system id. See https://dashif.org/identifiers/content_protection/ for more details."
         },
         "Url": {
           "shape": "__stringPatternHttpsD",
@@ -11865,7 +12940,7 @@
         "HlsSignaledSystemIds": {
           "shape": "__listOf__stringMin36Max36Pattern09aFAF809aFAF409aFAF409aFAF409aFAF12",
           "locationName": "hlsSignaledSystemIds",
-          "documentation": "Specify the DRM system ID that you want signaled in the HLS manifest that MediaConvert creates as part of this CMAF package. The HLS manifest can currently signal only one system ID. For more information, see https://dashif.org/identifiers/content_protection/."
+          "documentation": "Specify up to 3 DRM system IDs that you want signaled in the HLS manifest that MediaConvert creates as part of this CMAF package. For more information, see https://dashif.org/identifiers/content_protection/."
         },
         "ResourceId": {
           "shape": "__stringPatternW",
@@ -11899,6 +12974,41 @@
         "DISABLED"
       ]
     },
+    "StartJobsQueryRequest": {
+      "type": "structure",
+      "members": {
+        "FilterList": {
+          "shape": "__listOfJobsQueryFilter",
+          "locationName": "filterList",
+          "documentation": "Optional. Provide an array of JobsQueryFilters for your StartJobsQuery request."
+        },
+        "MaxResults": {
+          "shape": "__integerMin1Max20",
+          "locationName": "maxResults",
+          "documentation": "Optional. Number of jobs, up to twenty, that will be included in the jobs query."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "Use this string to request the next batch of jobs matched by a jobs query."
+        },
+        "Order": {
+          "shape": "Order",
+          "locationName": "order",
+          "documentation": "Optional. When you request lists of resources, you can specify whether they are sorted in ASCENDING or DESCENDING order. Default varies by resource."
+        }
+      }
+    },
+    "StartJobsQueryResponse": {
+      "type": "structure",
+      "members": {
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The ID of the jobs query."
+        }
+      }
+    },
     "StaticKeyProvider": {
       "type": "structure",
       "members": {
@@ -11967,8 +13077,16 @@
     },
     "TagResourceResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
+    },
+    "TamsGapHandling": {
+      "type": "string",
+      "documentation": "Specify how MediaConvert handles gaps between media segments in your TAMS source. Gaps can occur in live streams due to network issues or other interruptions. Choose from the following options: * Skip gaps - Default. Skip over gaps and join segments together. This creates a continuous output with no blank frames, but may cause timeline discontinuities. * Fill with black - Insert black frames to fill gaps between segments. This maintains timeline continuity but adds black frames where content is missing. * Hold last frame - Repeat the last frame before a gap until the next segment begins. This maintains visual continuity during gaps.",
+      "enum": [
+        "SKIP_GAPS",
+        "FILL_WITH_BLACK",
+        "HOLD_LAST_FRAME"
+      ]
     },
     "TeletextDestinationSettings": {
       "type": "structure",
@@ -12141,23 +13259,124 @@
       },
       "documentation": "Too many requests have been sent in too short of a time. The service limits the rate at which it will accept requests."
     },
+    "Track": {
+      "type": "structure",
+      "members": {
+        "AudioProperties": {
+          "shape": "AudioProperties",
+          "locationName": "audioProperties",
+          "documentation": "Details about the media file's audio track."
+        },
+        "Codec": {
+          "shape": "Codec",
+          "locationName": "codec",
+          "documentation": "The codec of the audio or video track, or caption format of the data track."
+        },
+        "DataProperties": {
+          "shape": "DataProperties",
+          "locationName": "dataProperties",
+          "documentation": "Details about the media file's data track."
+        },
+        "Duration": {
+          "shape": "__double",
+          "locationName": "duration",
+          "documentation": "The duration of the track, in seconds."
+        },
+        "Index": {
+          "shape": "__integer",
+          "locationName": "index",
+          "documentation": "The unique index number of the track, starting at 1."
+        },
+        "TrackType": {
+          "shape": "TrackType",
+          "locationName": "trackType",
+          "documentation": "The type of track: video, audio, or data."
+        },
+        "VideoProperties": {
+          "shape": "VideoProperties",
+          "locationName": "videoProperties",
+          "documentation": "Details about the media file's video track."
+        }
+      },
+      "documentation": "Details about each track (video, audio, or data) in the media file."
+    },
+    "TrackMapping": {
+      "type": "structure",
+      "members": {
+        "AudioTrackIndexes": {
+          "shape": "__listOf__integer",
+          "locationName": "audioTrackIndexes",
+          "documentation": "The index numbers of the audio tracks in your media file."
+        },
+        "DataTrackIndexes": {
+          "shape": "__listOf__integer",
+          "locationName": "dataTrackIndexes",
+          "documentation": "The index numbers of the data tracks in your media file."
+        },
+        "VideoTrackIndexes": {
+          "shape": "__listOf__integer",
+          "locationName": "videoTrackIndexes",
+          "documentation": "The index numbers of the video tracks in your media file."
+        }
+      },
+      "documentation": "An array containing track mapping information."
+    },
     "TrackSourceSettings": {
       "type": "structure",
       "members": {
+        "StreamNumber": {
+          "shape": "__integerMin1Max2147483647",
+          "locationName": "streamNumber",
+          "documentation": "Use this setting to select a single captions track from a source. Stream numbers include all tracks in the source file, regardless of type, and correspond to either the order of tracks in the file, or if applicable, the stream number metadata of the track. Although all tracks count toward these stream numbers, in this caption selector context, only the stream number of a track containing caption data may be used. To include more than one captions track in your job outputs, create multiple input captions selectors. Specify one stream per selector. If your source file contains a track which is not recognized by the service, then the corresponding stream number will still be reserved for future use. If more types of caption data get recognized in the future, these numberings will not shift."
+        },
         "TrackNumber": {
           "shape": "__integerMin1Max2147483647",
           "locationName": "trackNumber",
-          "documentation": "Use this setting to select a single captions track from a source. Track numbers correspond to the order in the captions source file. For IMF sources, track numbering is based on the order that the captions appear in the CPL. For example, use 1 to select the captions asset that is listed first in the CPL. To include more than one captions track in your job outputs, create multiple input captions selectors. Specify one track per selector."
+          "documentation": "Use this setting to select a single captions track from a source. Track numbers correspond to the order in the captions source file. For IMF sources, track numbering is based on the order that the captions appear in the CPL. For example, use 1 to select the captions asset that is listed first in the CPL. To include more than one captions track in your job outputs, create multiple input captions selectors. Specify one track per selector. If more types of caption data get recognized in the future, these numberings may shift, but the numberings used for streamNumber will not."
         }
       },
       "documentation": "Settings specific to caption sources that are specified by track number. Currently, this is only IMSC captions in an IMF package. If your caption source is IMSC 1.1 in a separate xml file, use FileSourceSettings instead of TrackSourceSettings."
     },
+    "TrackType": {
+      "type": "string",
+      "enum": [
+        "video",
+        "audio",
+        "data"
+      ]
+    },
+    "TransferCharacteristics": {
+      "type": "string",
+      "documentation": "The color space transfer characteristics of the video track, defining the relationship between linear light values and the encoded signal values. This affects brightness and contrast reproduction.",
+      "enum": [
+        "ITU_709",
+        "UNSPECIFIED",
+        "RESERVED",
+        "ITU_470M",
+        "ITU_470BG",
+        "SMPTE_170M",
+        "SMPTE_240M",
+        "LINEAR",
+        "LOG10_2",
+        "LOC10_2_5",
+        "IEC_61966_2_4",
+        "ITU_1361",
+        "IEC_61966_2_1",
+        "ITU_2020_10bit",
+        "ITU_2020_12bit",
+        "SMPTE_2084",
+        "SMPTE_428_1",
+        "ARIB_B67",
+        "LAST"
+      ]
+    },
     "TsPtsOffset": {
       "type": "string",
-      "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds. Then specify the number of seconds with PTS offset.",
+      "documentation": "Specify the initial presentation timestamp (PTS) offset for your transport stream output. To let MediaConvert automatically determine the initial PTS offset: Keep the default value, Auto. We recommend that you choose Auto for the widest player compatibility. The initial PTS will be at least two seconds and vary depending on your output's bitrate, HRD buffer size and HRD buffer initial fill percentage. To manually specify an initial PTS offset: Choose Seconds or Milliseconds. Then specify the number of seconds or milliseconds with PTS offset.",
       "enum": [
         "AUTO",
-        "SECONDS"
+        "SECONDS",
+        "MILLISECONDS"
       ]
     },
     "TtmlDestinationSettings": {
@@ -12205,11 +13424,12 @@
     },
     "UncompressedFramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "UncompressedInterlaceMode": {
@@ -12244,7 +13464,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "UncompressedFramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -12316,8 +13536,7 @@
     },
     "UntagResourceResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "UpdateJobTemplateRequest": {
       "type": "structure",
@@ -12485,11 +13704,12 @@
     },
     "Vc3FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "Vc3InterlaceMode": {
@@ -12519,7 +13739,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "Vc3FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max1001",
@@ -12590,6 +13810,7 @@
         "AV1",
         "AVC_INTRA",
         "FRAME_CAPTURE",
+        "GIF",
         "H_264",
         "H_265",
         "MPEG2",
@@ -12618,13 +13839,18 @@
         "Codec": {
           "shape": "VideoCodec",
           "locationName": "codec",
-          "documentation": "Specifies the video codec. This must be equal to one of the enum values defined by the object VideoCodec. To passthrough the video stream of your input JPEG2000, VC-3, AVC-INTRA or Apple ProRes video without any video encoding: Choose Passthrough. If you have multiple input videos, note that they must have identical encoding attributes. When you choose Passthrough, your output container must be MXF or QuickTime MOV."
+          "documentation": "Specifies the video codec. This must be equal to one of the enum values defined by the object VideoCodec. To passthrough the video stream of your input without any video encoding: Choose Passthrough. More information about passthrough codec support and job settings requirements, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/video-passthrough-feature-restrictions.html"
         },
         "FrameCaptureSettings": {
           "shape": "FrameCaptureSettings",
           "locationName": "frameCaptureSettings",
           "documentation": "Required when you set Codec to the value FRAME_CAPTURE."
         },
+        "GifSettings": {
+          "shape": "GifSettings",
+          "locationName": "gifSettings",
+          "documentation": "Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value GIF"
+        },
         "H264Settings": {
           "shape": "H264Settings",
           "locationName": "h264Settings",
@@ -12640,6 +13866,11 @@
           "locationName": "mpeg2Settings",
           "documentation": "Required when you set Codec to the value MPEG2."
         },
+        "PassthroughSettings": {
+          "shape": "PassthroughSettings",
+          "locationName": "passthroughSettings",
+          "documentation": "Optional settings when you set Codec to the value Passthrough."
+        },
         "ProresSettings": {
           "shape": "ProresSettings",
           "locationName": "proresSettings",
@@ -12671,7 +13902,7 @@
           "documentation": "Required when you set Codec to the value XAVC."
         }
       },
-      "documentation": "Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * UNCOMPRESSED, UncompressedSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings"
+      "documentation": "Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * GIF, GifSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * UNCOMPRESSED, UncompressedSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings"
     },
     "VideoDescription": {
       "type": "structure",
@@ -12686,10 +13917,15 @@
           "locationName": "antiAlias",
           "documentation": "The anti-alias filter is automatically applied to all outputs. The service no longer accepts the value DISABLED for AntiAlias. If you specify that in your job, the service will ignore the setting."
         },
+        "ChromaPositionMode": {
+          "shape": "ChromaPositionMode",
+          "locationName": "chromaPositionMode",
+          "documentation": "Specify the chroma sample positioning metadata for your H.264 or H.265 output. To have MediaConvert automatically determine chroma positioning: We recommend that you keep the default value, Auto. To specify center positioning: Choose Force center. To specify top left positioning: Choose Force top left."
+        },
         "CodecSettings": {
           "shape": "VideoCodecSettings",
           "locationName": "codecSettings",
-          "documentation": "Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * UNCOMPRESSED, UncompressedSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings"
+          "documentation": "Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * GIF, GifSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * UNCOMPRESSED, UncompressedSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings"
         },
         "ColorMetadata": {
           "shape": "ColorMetadata",
@@ -12778,6 +14014,11 @@
     "VideoOverlay": {
       "type": "structure",
       "members": {
+        "Crop": {
+          "shape": "VideoOverlayCrop",
+          "locationName": "crop",
+          "documentation": "Specify a rectangle of content to crop and use from your video overlay's input video. When you do, MediaConvert uses the cropped dimensions that you specify under X offset, Y offset, Width, and Height."
+        },
         "EndTimecode": {
           "shape": "__stringPattern010920405090509092",
           "locationName": "endTimecode",
@@ -12811,6 +14052,37 @@
       },
       "documentation": "Overlay one or more videos on top of your input video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-overlays.html"
     },
+    "VideoOverlayCrop": {
+      "type": "structure",
+      "members": {
+        "Height": {
+          "shape": "__integerMin0Max2147483647",
+          "locationName": "height",
+          "documentation": "Specify the height of the video overlay cropping rectangle. To use the same height as your overlay input video: Keep blank, or enter 0. To specify a different height for the cropping rectangle: Enter an integer representing the Unit type that you choose, either Pixels or Percentage. For example, when you enter 100 and choose Pixels, the cropping rectangle will be 100 pixels high. When you enter 10, choose Percentage, and your overlay input video is 1920x1080, the cropping rectangle will be 108 pixels high."
+        },
+        "Unit": {
+          "shape": "VideoOverlayUnit",
+          "locationName": "unit",
+          "documentation": "Specify the Unit type to use when you enter a value for X position, Y position, Width, or Height. You can choose Pixels or Percentage. Leave blank to use the default value, Pixels."
+        },
+        "Width": {
+          "shape": "__integerMin0Max2147483647",
+          "locationName": "width",
+          "documentation": "Specify the width of the video overlay cropping rectangle. To use the same width as your overlay input video: Keep blank, or enter 0. To specify a different width for the cropping rectangle: Enter an integer representing the Unit type that you choose, either Pixels or Percentage. For example, when you enter 100 and choose Pixels, the cropping rectangle will be 100 pixels wide. When you enter 10, choose Percentage, and your overlay input video is 1920x1080, the cropping rectangle will be 192 pixels wide."
+        },
+        "X": {
+          "shape": "__integerMin0Max2147483647",
+          "locationName": "x",
+          "documentation": "Specify the distance between the cropping rectangle and the left edge of your overlay video's frame. To position the cropping rectangle along the left edge: Keep blank, or enter 0. To position the cropping rectangle to the right, relative to the left edge of your overlay video's frame: Enter an integer representing the Unit type that you choose, either Pixels or Percentage. For example, when you enter 10 and choose Pixels, the cropping rectangle will be positioned 10 pixels from the left edge of the overlay video's frame. When you enter 10, choose Percentage, and your overlay input video is 1920x1080, the cropping rectangle will be positioned 192 pixels from the left edge of the overlay video's frame."
+        },
+        "Y": {
+          "shape": "__integerMin0Max2147483647",
+          "locationName": "y",
+          "documentation": "Specify the distance between the cropping rectangle and the top edge of your overlay video's frame. To position the cropping rectangle along the top edge: Keep blank, or enter 0. To position the cropping rectangle down, relative to the top edge of your overlay video's frame: Enter an integer representing the Unit type that you choose, either Pixels or Percentage. For example, when you enter 10 and choose Pixels, the cropping rectangle will be positioned 10 pixels from the top edge of the overlay video's frame. When you enter 10, choose Percentage, and your overlay input video is 1920x1080, the cropping rectangle will be positioned 108 pixels from the top edge of the overlay video's frame."
+        }
+      },
+      "documentation": "Specify a rectangle of content to crop and use from your video overlay's input video. When you do, MediaConvert uses the cropped dimensions that you specify under X offset, Y offset, Width, and Height."
+    },
     "VideoOverlayInput": {
       "type": "structure",
       "members": {
@@ -12869,6 +14141,11 @@
           "locationName": "height",
           "documentation": "To scale your video overlay to the same height as the base input video: Leave blank. To scale the height of your video overlay to a different height: Enter an integer representing the Unit type that you choose, either Pixels or Percentage. For example, when you enter 360 and choose Pixels, your video overlay will be rendered with a height of 360. When you enter 50, choose Percentage, and your overlay's source has a height of 1080, your video overlay will be rendered with a height of 540. To scale your overlay to a specific height while automatically maintaining its original aspect ratio, enter a value for Height and leave Width blank."
         },
+        "Opacity": {
+          "shape": "__integerMin0Max100",
+          "locationName": "opacity",
+          "documentation": "Use Opacity to specify how much of the underlying video shows through the overlay video. 0 is transparent and 100 is fully opaque. Default is 100."
+        },
         "Unit": {
           "shape": "VideoOverlayUnit",
           "locationName": "unit",
@@ -12911,7 +14188,7 @@
           "documentation": "Specify the timecode for when this transition begins. Use the format HH:MM:SS:FF or HH:MM:SS;FF, where HH is the hour, MM is the minute, SS is the second, and FF is the frame number. When entering this value, take into account your choice for Timecode source."
         }
       },
-      "documentation": "Specify one or more Transitions for your video overlay. Use Transitions to reposition or resize your overlay over time. To use the same position and size for the duration of your video overlay: Leave blank. To specify a Transition: Enter a value for Start timecode, End Timecode, X Position, Y Position, Width, or Height."
+      "documentation": "Specify one or more Transitions for your video overlay. Use Transitions to reposition or resize your overlay over time. To use the same position and size for the duration of your video overlay: Leave blank. To specify a Transition: Enter a value for Start timecode, End Timecode, X Position, Y Position, Width, Height, or Opacity"
     },
     "VideoOverlayUnit": {
       "type": "string",
@@ -12967,6 +14244,57 @@
       },
       "documentation": "Find additional transcoding features under Preprocessors. Enable the features at each output individually. These features are disabled by default."
     },
+    "VideoProperties": {
+      "type": "structure",
+      "members": {
+        "BitDepth": {
+          "shape": "__integer",
+          "locationName": "bitDepth",
+          "documentation": "The number of bits used per color component such as 8, 10, or 12 bits. Standard range (SDR) video typically uses 8-bit, while 10-bit is common for high dynamic range (HDR)."
+        },
+        "BitRate": {
+          "shape": "__long",
+          "locationName": "bitRate",
+          "documentation": "The bit rate of the video track, in bits per second."
+        },
+        "CodecMetadata": {
+          "shape": "CodecMetadata",
+          "locationName": "codecMetadata",
+          "documentation": "Codec-specific parameters parsed from the video essence headers. This information provides detailed technical specifications about how the video was encoded, including profile settings, resolution details, and color space information that can help you understand the source video characteristics and make informed encoding decisions."
+        },
+        "ColorPrimaries": {
+          "shape": "ColorPrimaries",
+          "locationName": "colorPrimaries",
+          "documentation": "The color space primaries of the video track, defining the red, green, and blue color coordinates used for the video. This information helps ensure accurate color reproduction during playback and transcoding."
+        },
+        "FrameRate": {
+          "shape": "FrameRate",
+          "locationName": "frameRate",
+          "documentation": "The frame rate of the video or audio track, expressed as a fraction with numerator and denominator values."
+        },
+        "Height": {
+          "shape": "__integer",
+          "locationName": "height",
+          "documentation": "The height of the video track, in pixels."
+        },
+        "MatrixCoefficients": {
+          "shape": "MatrixCoefficients",
+          "locationName": "matrixCoefficients",
+          "documentation": "The color space matrix coefficients of the video track, defining how RGB color values are converted to and from YUV color space. This affects color accuracy during encoding and decoding processes."
+        },
+        "TransferCharacteristics": {
+          "shape": "TransferCharacteristics",
+          "locationName": "transferCharacteristics",
+          "documentation": "The color space transfer characteristics of the video track, defining the relationship between linear light values and the encoded signal values. This affects brightness and contrast reproduction."
+        },
+        "Width": {
+          "shape": "__integer",
+          "locationName": "width",
+          "documentation": "The width of the video track, in pixels."
+        }
+      },
+      "documentation": "Details about the media file's video track."
+    },
     "VideoSelector": {
       "type": "structure",
       "members": {
@@ -13024,10 +14352,36 @@
           "shape": "InputSampleRange",
           "locationName": "sampleRange",
           "documentation": "If the sample range metadata in your input video is accurate, or if you don't know about sample range, keep the default value, Follow, for this setting. When you do, the service automatically detects your input sample range. If your input video has metadata indicating the wrong sample range, specify the accurate sample range here. When you do, MediaConvert ignores any sample range information in the input metadata. Regardless of whether MediaConvert uses the input sample range or the sample range that you specify, MediaConvert uses the sample range for transcoding and also writes it to the output metadata."
+        },
+        "SelectorType": {
+          "shape": "VideoSelectorType",
+          "locationName": "selectorType",
+          "documentation": "Choose the video selector type for your HLS input. Use to specify which video rendition MediaConvert uses from your HLS input. To have MediaConvert automatically use the highest bitrate rendition from your HLS input: Keep the default value, Auto. To manually specify a rendition: Choose Stream. Then enter the unique stream number in the Streams array, starting at 1, corresponding to the stream order in the manifest."
+        },
+        "Streams": {
+          "shape": "__listOf__integerMin1Max2147483647",
+          "locationName": "streams",
+          "documentation": "Specify one or more video streams for MediaConvert to use from your HLS input. Enter an integer corresponding to the stream number, with the first stream in your HLS multivariant playlist starting at 1.For re-encoding workflows, MediaConvert uses the video stream that you select with the highest bitrate as the input.For video passthrough workflows, you specify whether to passthrough a single video stream or multiple video streams under Video selector source in the output video encoding settings."
         }
       },
       "documentation": "Input video selectors contain the video settings for the input. Each of your inputs can have up to one video selector."
     },
+    "VideoSelectorMode": {
+      "type": "string",
+      "documentation": "AUTO will select the highest bitrate input in the video selector source. REMUX_ALL will passthrough all the selected streams in the video selector source. When selecting streams from multiple renditions (i.e. using Stream video selector type): REMUX_ALL will only remux all streams selected, and AUTO will use the highest bitrate video stream among the selected streams as source.",
+      "enum": [
+        "AUTO",
+        "REMUX_ALL"
+      ]
+    },
+    "VideoSelectorType": {
+      "type": "string",
+      "documentation": "Choose the video selector type for your HLS input. Use to specify which video rendition MediaConvert uses from your HLS input. To have MediaConvert automatically use the highest bitrate rendition from your HLS input: Keep the default value, Auto. To manually specify a rendition: Choose Stream. Then enter the unique stream number in the Streams array, starting at 1, corresponding to the stream order in the manifest.",
+      "enum": [
+        "AUTO",
+        "STREAM"
+      ]
+    },
     "VideoTimecodeInsertion": {
       "type": "string",
       "documentation": "Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable Timecode insertion when the input frame rate is identical to the output frame rate. To include timecodes in this output, set Timecode insertion to PIC_TIMING_SEI. To leave them out, set it to DISABLED. Default is DISABLED. When the service inserts timecodes in an output, by default, it uses any embedded timecodes from the input. If none are present, the service will set the timecode for the first output frame to zero. To change this default behavior, adjust the settings under Timecode configuration. In the console, these settings are located under Job > Job settings > Timecode configuration. Note - Timecode source under input settings does not affect the timecodes that are inserted in the output. Source under Job settings > Timecode configuration does.",
@@ -13067,11 +14421,12 @@
     },
     "Vp8FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "Vp8ParControl": {
@@ -13113,7 +14468,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "Vp8FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -13178,11 +14533,12 @@
     },
     "Vp9FramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "Vp9ParControl": {
@@ -13224,7 +14580,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "Vp9FramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max2147483647",
@@ -13312,10 +14668,11 @@
     },
     "WavFormat": {
       "type": "string",
-      "documentation": "The service defaults to using RIFF for WAV outputs. If your output audio is likely to exceed 4 GB in file size, or if you otherwise need the extended support of the RF64 format, set your output WAV file format to RF64.",
+      "documentation": "Specify the file format for your wave audio output. To use a RIFF wave format: Keep the default value, RIFF. If your output audio is likely to exceed 4GB in file size, or if you otherwise need the extended support of the RF64 format: Choose RF64. If your player only supports the extensible wave format: Choose Extensible.",
       "enum": [
         "RIFF",
-        "RF64"
+        "RF64",
+        "EXTENSIBLE"
       ]
     },
     "WavSettings": {
@@ -13334,7 +14691,7 @@
         "Format": {
           "shape": "WavFormat",
           "locationName": "format",
-          "documentation": "The service defaults to using RIFF for WAV outputs. If your output audio is likely to exceed 4 GB in file size, or if you otherwise need the extended support of the RF64 format, set your output WAV file format to RF64."
+          "documentation": "Specify the file format for your wave audio output. To use a RIFF wave format: Keep the default value, RIFF. If your output audio is likely to exceed 4GB in file size, or if you otherwise need the extended support of the RF64 format: Choose RF64. If your player only supports the extensible wave format: Choose Extensible."
         },
         "SampleRate": {
           "shape": "__integerMin8000Max192000",
@@ -13346,7 +14703,7 @@
     },
     "WebvttAccessibilitySubs": {
       "type": "string",
-      "documentation": "If the WebVTT captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>.",
+      "documentation": "If the WebVTT captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.transcribes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>.",
       "enum": [
         "DISABLED",
         "ENABLED"
@@ -13358,12 +14715,12 @@
         "Accessibility": {
           "shape": "WebvttAccessibilitySubs",
           "locationName": "accessibility",
-          "documentation": "If the WebVTT captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>."
+          "documentation": "If the WebVTT captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS=\"public.accessibility.transcribes-spoken-dialog,public.accessibility.describes-music-and-sound\" and AUTOSELECT=\"YES\". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: <Accessibility schemeIdUri=\"urn:mpeg:dash:role:2011\" value=\"caption\"/>. If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: <Role schemeIDUri=\"urn:mpeg:dash:role:2011\" value=\"subtitle\"/>."
         },
         "StylePassthrough": {
           "shape": "WebvttStylePassthrough",
           "locationName": "stylePassthrough",
-          "documentation": "To use the available style, color, and position information from your input captions: Set Style passthrough to Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled, or leave blank."
+          "documentation": "Specify how MediaConvert writes style information in your output WebVTT captions. To use the available style, color, and position information from your input captions: Choose Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Choose Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Keep the default value, Disabled. Or leave blank. To use the available style, color, and position information from your input captions, while merging cues with identical time ranges: Choose merge. This setting can help prevent positioning overlaps for certain players that expect a single single cue for any given time range."
         }
       },
       "documentation": "Settings related to WebVTT captions. WebVTT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html."
@@ -13379,7 +14736,7 @@
         "RenditionLanguageCode": {
           "shape": "LanguageCode",
           "locationName": "renditionLanguageCode",
-          "documentation": "Optional. Specify ISO 639-2 or ISO 639-3 code in the language property"
+          "documentation": "Optionally specify the language, using an ISO 639-2 or ISO 639-3 three-letter code in all capital letters. You can find a list of codes at: https://www.loc.gov/standards/iso639-2/php/code_list.php"
         },
         "RenditionName": {
           "shape": "__string",
@@ -13391,11 +14748,12 @@
     },
     "WebvttStylePassthrough": {
       "type": "string",
-      "documentation": "To use the available style, color, and position information from your input captions: Set Style passthrough to Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled, or leave blank.",
+      "documentation": "Specify how MediaConvert writes style information in your output WebVTT captions. To use the available style, color, and position information from your input captions: Choose Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Choose Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Keep the default value, Disabled. Or leave blank. To use the available style, color, and position information from your input captions, while merging cues with identical time ranges: Choose merge. This setting can help prevent positioning overlaps for certain players that expect a single single cue for any given time range.",
       "enum": [
         "ENABLED",
         "DISABLED",
-        "STRICT"
+        "STRICT",
+        "MERGE"
       ]
     },
     "Xavc4kIntraCbgProfileClass": {
@@ -13550,11 +14908,12 @@
     },
     "XavcFramerateConversionAlgorithm": {
       "type": "string",
-      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96.",
+      "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates.",
       "enum": [
         "DUPLICATE_DROP",
         "INTERPOLATE",
-        "FRAMEFORMER"
+        "FRAMEFORMER",
+        "MAINTAIN_FRAME_COUNT"
       ]
     },
     "XavcGopBReference": {
@@ -13705,7 +15064,7 @@
         "FramerateConversionAlgorithm": {
           "shape": "XavcFramerateConversionAlgorithm",
           "locationName": "framerateConversionAlgorithm",
-          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96."
+          "documentation": "Choose the method that you want MediaConvert to use when increasing or decreasing your video's frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. To create an output with the same number of frames as your input: Choose Maintain frame count. When you do, MediaConvert will not drop, interpolate, add, or otherwise change the frame count from your input to your output. Note that since the frame count is maintained, the duration of your output will become shorter at higher frame rates and longer at lower frame rates."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max1001",
@@ -13717,6 +15076,11 @@
           "locationName": "framerateNumerator",
           "documentation": "When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976."
         },
+        "PerFrameMetrics": {
+          "shape": "__listOfFrameMetricType",
+          "locationName": "perFrameMetrics",
+          "documentation": "Optionally choose one or more per frame metric reports to generate along with your output. You can use these metrics to analyze your video output according to one or more commonly used image quality metrics. You can specify per frame metrics for output groups or for individual outputs. When you do, MediaConvert writes a CSV (Comma-Separated Values) file to your S3 output destination, named after the output name and metric type. For example: videofile_PSNR.csv Jobs that generate per frame metrics will take longer to complete, depending on the resolution and complexity of your output. For example, some 4K jobs might take up to twice as long to complete. Note that when analyzing the video quality of your output, or when comparing the video quality of multiple different outputs, we generally also recommend a detailed visual review in a controlled environment. You can choose from the following per frame metrics: * PSNR: Peak Signal-to-Noise Ratio * SSIM: Structural Similarity Index Measure * MS_SSIM: Multi-Scale Similarity Index Measure * PSNR_HVS: Peak Signal-to-Noise Ratio, Human Visual System * VMAF: Video Multi-Method Assessment Fusion * QVBR: Quality-Defined Variable Bitrate. This option is only available when your output uses the QVBR rate control mode. * SHOT_CHANGE: Shot Changes"
+        },
         "Profile": {
           "shape": "XavcProfile",
           "locationName": "profile",
@@ -13809,6 +15173,9 @@
     "__doubleMin0Max2147483647": {
       "type": "double"
     },
+    "__doubleMin1Max10": {
+      "type": "double"
+    },
     "__doubleMinNegative59Max0": {
       "type": "double"
     },
@@ -14150,6 +15517,16 @@
       "min": 1,
       "max": 8
     },
+    "__integerMin2000Max30000": {
+      "type": "integer",
+      "min": 2000,
+      "max": 30000
+    },
+    "__integerMin22050Max192000": {
+      "type": "integer",
+      "min": 22050,
+      "max": 192000
+    },
     "__integerMin22050Max48000": {
       "type": "integer",
       "min": 22050,
@@ -14245,6 +15622,11 @@
       "min": 64000,
       "max": 640000
     },
+    "__integerMin6Max16": {
+      "type": "integer",
+      "min": 6,
+      "max": 16
+    },
     "__integerMin8000Max192000": {
       "type": "integer",
       "min": 8000,
@@ -14280,6 +15662,11 @@
       "min": 96,
       "max": 600
     },
+    "__integerMinNegative10000Max10000": {
+      "type": "integer",
+      "min": -10000,
+      "max": 10000
+    },
     "__integerMinNegative1000Max1000": {
       "type": "integer",
       "min": -1000,
@@ -14401,6 +15788,12 @@
         "shape": "ForceIncludeRenditionSize"
       }
     },
+    "__listOfFrameMetricType": {
+      "type": "list",
+      "member": {
+        "shape": "FrameMetricType"
+      }
+    },
     "__listOfHlsAdMarkers": {
       "type": "list",
       "member": {
@@ -14473,6 +15866,12 @@
         "shape": "JobTemplate"
       }
     },
+    "__listOfJobsQueryFilter": {
+      "type": "list",
+      "member": {
+        "shape": "JobsQueryFilter"
+      }
+    },
     "__listOfMsSmoothAdditionalManifest": {
       "type": "list",
       "member": {
@@ -14515,6 +15914,18 @@
         "shape": "Preset"
       }
     },
+    "__listOfProbeInputFile": {
+      "type": "list",
+      "member": {
+        "shape": "ProbeInputFile"
+      }
+    },
+    "__listOfProbeResult": {
+      "type": "list",
+      "member": {
+        "shape": "ProbeResult"
+      }
+    },
     "__listOfQueue": {
       "type": "list",
       "member": {
@@ -14539,6 +15950,18 @@
         "shape": "TeletextPageType"
       }
     },
+    "__listOfTrack": {
+      "type": "list",
+      "member": {
+        "shape": "Track"
+      }
+    },
+    "__listOfTrackMapping": {
+      "type": "list",
+      "member": {
+        "shape": "TrackMapping"
+      }
+    },
     "__listOfVideoOverlay": {
       "type": "list",
       "member": {
@@ -14569,6 +15992,12 @@
         "shape": "__doubleMinNegative60Max6"
       }
     },
+    "__listOf__integer": {
+      "type": "list",
+      "member": {
+        "shape": "__integer"
+      }
+    },
     "__listOf__integerMin1Max2147483647": {
       "type": "list",
       "member": {
@@ -14593,6 +16022,12 @@
         "shape": "__string"
       }
     },
+    "__listOf__stringMax100": {
+      "type": "list",
+      "member": {
+        "shape": "__stringMax100"
+      }
+    },
     "__listOf__stringMin1": {
       "type": "list",
       "member": {
@@ -14617,6 +16052,9 @@
         "shape": "__stringPatternS3ASSETMAPXml"
       }
     },
+    "__long": {
+      "type": "long"
+    },
     "__mapOfAudioSelector": {
       "type": "map",
       "key": {
@@ -14644,6 +16082,15 @@
         "shape": "CaptionSelector"
       }
     },
+    "__mapOfDynamicAudioSelector": {
+      "type": "map",
+      "key": {
+        "shape": "__string"
+      },
+      "value": {
+        "shape": "DynamicAudioSelector"
+      }
+    },
     "__mapOf__string": {
       "type": "map",
       "key": {
@@ -14656,6 +16103,10 @@
     "__string": {
       "type": "string"
     },
+    "__stringMax100": {
+      "type": "string",
+      "max": 100
+    },
     "__stringMax1000": {
       "type": "string",
       "max": 1000
@@ -14755,6 +16206,11 @@
       "max": 50,
       "pattern": "^[a-zA-Z0-9_\\/_+=.@-]*$"
     },
+    "__stringMin1PatternArnAwsUsGovCnKmsAZ26EastWestCentralNorthSouthEastWest1912D12KeyAFAF098AFAF094AFAF094AFAF094AFAF0912MrkAFAF0932": {
+      "type": "string",
+      "min": 1,
+      "pattern": "^(arn:aws(-us-gov|-cn)?:kms:[a-z-]{2,6}-(east|west|central|((north|south)(east|west)?))-[1-9]{1,2}:\\d{12}:key/)?[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}|mrk-[a-fA-F0-9]{32}$"
+    },
     "__stringMin24Max512PatternAZaZ0902": {
       "type": "string",
       "min": 24,
@@ -14809,6 +16265,10 @@
       "type": "string",
       "pattern": "^([01][0-9]|2[0-4]):[0-5][0-9]:[0-5][0-9][:;][0-9]{2}(@[0-9]+(\\.[0-9]+)?(:[0-9]+)?)?$"
     },
+    "__stringPattern019090190908019090190908": {
+      "type": "string",
+      "pattern": "^(\\[|\\()?(-?(0|[1-9][0-9]*):(0|[1-9][0-9]{0,8}))?(_(-?(0|[1-9][0-9]*):(0|[1-9][0-9]{0,8}))?)?(\\]|\\))?$"
+    },
     "__stringPattern01D20305D205D": {
       "type": "string",
       "pattern": "^((([0-1]\\d)|(2[0-3]))(:[0-5]\\d){2}([:;][0-5]\\d))$"
@@ -14841,9 +16301,13 @@
       "type": "string",
       "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9-]+)?$"
     },
+    "__stringPatternArnAwsAZ09EventsAZ090912ConnectionAZAZ09AF0936": {
+      "type": "string",
+      "pattern": "^arn:aws[a-z0-9-]*:events:[a-z0-9-]+:[0-9]{12}:connection/[a-zA-Z0-9-]+/[a-f0-9-]{36}$"
+    },
     "__stringPatternArnAwsUsGovAcm": {
       "type": "string",
-      "pattern": "^arn:aws(-us-gov)?:acm:"
+      "pattern": "^arn:aws(-us-gov)?:acm:.*$"
     },
     "__stringPatternArnAwsUsGovCnKmsAZ26EastWestCentralNorthSouthEastWest1912D12KeyAFAF098AFAF094AFAF094AFAF094AFAF0912MrkAFAF0932": {
       "type": "string",
@@ -14855,7 +16319,7 @@
     },
     "__stringPatternHttps": {
       "type": "string",
-      "pattern": "^https:\\/\\/"
+      "pattern": "^https:\\/\\/.*$"
     },
     "__stringPatternHttpsD": {
       "type": "string",
@@ -14871,7 +16335,7 @@
     },
     "__stringPatternS3": {
       "type": "string",
-      "pattern": "^s3:\\/\\/"
+      "pattern": "^s3:\\/\\/.*$"
     },
     "__stringPatternS3ASSETMAPXml": {
       "type": "string",
diff -pruN 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/paginators-1.json 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -113,6 +113,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "Networks"
+    },
+    "ListSdiSources": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "SdiSources"
+    },
+    "ListAlerts": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Alerts"
+    },
+    "ListClusterAlerts": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Alerts"
+    },
+    "ListMultiplexAlerts": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Alerts"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/service-2.json 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/medialive/2017-10-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/medialive/2017-10-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5212,6 +5212,374 @@
         }
       ],
       "documentation": "Retrieves an array of all the encoder engine versions that are available in this AWS account."
+    },
+    "CreateSdiSource": {
+      "name": "CreateSdiSource",
+      "http": {
+        "method": "POST",
+        "requestUri": "/prod/sdiSources",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateSdiSourceRequest"
+      },
+      "output": {
+        "shape": "CreateSdiSourceResponse",
+        "documentation": "The SdiSource is created."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "MediaLive can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permission to create the SdiSource."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded on create SdiSource calls to service."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The SdiSource is unable to create due to an issue with SdiSource resources."
+        }
+      ],
+      "documentation": "Create an SdiSource for each video source that uses the SDI protocol. You will reference the SdiSource when you create an SDI input in MediaLive. You will also reference it in an SdiSourceMapping, in order to create a connection between the logical SdiSource and the physical SDI card and port that the physical SDI source uses."
+    },
+    "DeleteSdiSource": {
+      "name": "DeleteSdiSource",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/prod/sdiSources/{sdiSourceId}",
+        "responseCode": 202
+      },
+      "input": {
+        "shape": "DeleteSdiSourceRequest"
+      },
+      "output": {
+        "shape": "DeleteSdiSourceResponse",
+        "documentation": "Deletion of the SdiSource is in progress."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "This request was invalid."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permission to delete the SdiSource."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The SdiSource that you are trying to delete doesn't exist. Check the ID and try again."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded on DeleteSdiSource calls to SdiSource service."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The SdiSource is unable to delete due to an issue with SdiSource resources."
+        }
+      ],
+      "documentation": "Delete an SdiSource. The SdiSource must not be part of any SidSourceMapping and must not be attached to any input."
+    },
+    "DescribeSdiSource": {
+      "name": "DescribeSdiSource",
+      "http": {
+        "method": "GET",
+        "requestUri": "/prod/sdiSources/{sdiSourceId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DescribeSdiSourceRequest"
+      },
+      "output": {
+        "shape": "DescribeSdiSourceResponse",
+        "documentation": "Details for one SdiSource."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "This request was invalid."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permission to describe the SdiSource."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The SdiSource that you are trying to describe does not exist. Check the ID and try again."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded on describe SdiSource calls to SdiSource service."
+        }
+      ],
+      "documentation": "Gets details about a SdiSource."
+    },
+    "ListSdiSources": {
+      "name": "ListSdiSources",
+      "http": {
+        "method": "GET",
+        "requestUri": "/prod/sdiSources",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListSdiSourcesRequest"
+      },
+      "output": {
+        "shape": "ListSdiSourcesResponse",
+        "documentation": "An array of SdiSources."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "MediaLive can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permission to list SdiSources."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded on ListSdiSources calls to SdiSource service."
+        }
+      ],
+      "documentation": "List all the SdiSources in the AWS account."
+    },
+    "UpdateSdiSource": {
+      "name": "UpdateSdiSource",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/prod/sdiSources/{sdiSourceId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateSdiSourceRequest"
+      },
+      "output": {
+        "shape": "UpdateSdiSourceResponse",
+        "documentation": "The SdiSource has been successfully updated."
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "MediaLive can't process your request because of a problem in the request. Please check your request form and syntax."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error."
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You don't have permission to update the SdiSource."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout."
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded on UpdateSdiSource calls to service."
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "The SdiSource is unable to update due to an issue with SdiSource resources."
+        }
+      ],
+      "documentation": "Change some of the settings in an SdiSource."
+    },
+    "ListAlerts": {
+      "name": "ListAlerts",
+      "http": {
+        "method": "GET",
+        "requestUri": "/prod/channels/{channelId}/alerts",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListAlertsRequest"
+      },
+      "output": {
+        "shape": "ListAlertsResponse",
+        "documentation": "List of alerts"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "This request was invalid."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You do not have permission to list the alerts."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error"
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The specified channel doesn't exist."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded for this operation."
+        }
+      ],
+      "documentation": "List the alerts for a channel with optional filtering based on alert state."
+    },
+    "ListClusterAlerts": {
+      "name": "ListClusterAlerts",
+      "http": {
+        "method": "GET",
+        "requestUri": "/prod/clusters/{clusterId}/alerts",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListClusterAlertsRequest"
+      },
+      "output": {
+        "shape": "ListClusterAlertsResponse",
+        "documentation": "List of alerts"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "This request was invalid."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You do not have permission to list the alerts."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error."
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The specified cluster doesn't exist."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded for this operation."
+        }
+      ],
+      "documentation": "List the alerts for a cluster with optional filtering based on alert state."
+    },
+    "ListMultiplexAlerts": {
+      "name": "ListMultiplexAlerts",
+      "http": {
+        "method": "GET",
+        "requestUri": "/prod/multiplexes/{multiplexId}/alerts",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListMultiplexAlertsRequest"
+      },
+      "output": {
+        "shape": "ListMultiplexAlertsResponse",
+        "documentation": "List of alerts"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "This request was invalid."
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "Internal Service Error"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "You do not have permission to list the alerts."
+        },
+        {
+          "shape": "BadGatewayException",
+          "documentation": "Bad Gateway Error"
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "The specified multiplex doesn't exist."
+        },
+        {
+          "shape": "GatewayTimeoutException",
+          "documentation": "Gateway Timeout"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "Request limit exceeded for this operation."
+        }
+      ],
+      "documentation": "List the alerts for a multiplex with optional filtering based on alert state."
     }
   },
   "shapes": {
@@ -5447,8 +5815,7 @@
     },
     "AcceptInputDeviceTransferResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for AcceptInputDeviceTransferResponse"
     },
     "AccessDenied": {
@@ -5554,7 +5921,7 @@
         "ContainerSettings": {
           "shape": "ArchiveContainerSettings",
           "locationName": "containerSettings",
-          "documentation": "Settings specific to the container type of the file."
+          "documentation": "Container for this output. Can be auto-detected from extension field."
         },
         "Extension": {
           "shape": "__string",
@@ -5593,14 +5960,12 @@
     },
     "AribDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Arib Destination Settings"
     },
     "AribSourceSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Arib Source Settings"
     },
     "AudioChannelMapping": {
@@ -6664,6 +7029,11 @@
           "shape": "__integerMin0",
           "locationName": "yPosition",
           "documentation": "Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  All burn-in and DVB-Sub font settings must match."
+        },
+        "SubtitleRows": {
+          "shape": "BurnInDestinationSubtitleRows",
+          "locationName": "subtitleRows",
+          "documentation": "Applies only when the input captions are Teletext and the output captions are DVB-Sub or Burn-In. Choose the number of lines for the captions bitmap. The captions bitmap is 700 wide × 576 high and will be laid over the video. For example, a value of 16 divides the bitmap into 16 lines, with each line 36 pixels high (16 × 36 = 576). The default is 24 (24 pixels high). Enter the same number in every encode in every output that converts the same Teletext source to DVB-Sub or Burn-in."
         }
       },
       "documentation": "Burn In Destination Settings"
@@ -6726,8 +7096,7 @@
     },
     "CancelInputDeviceTransferResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for CancelInputDeviceTransferResponse"
     },
     "CaptionDescription": {
@@ -7243,8 +7612,7 @@
     },
     "ClaimDeviceResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for ClaimDeviceResponse"
     },
     "ColorCorrection": {
@@ -7299,8 +7667,7 @@
     },
     "ColorSpacePassthroughSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Passthrough applies no color space conversion to the output"
     },
     "ConflictException": {
@@ -7588,6 +7955,15 @@
           "shape": "MulticastSettingsCreateRequest",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "Placeholder documentation for CreateInput"
@@ -7663,6 +8039,15 @@
           "shape": "MulticastSettingsCreateRequest",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "The name of the input"
@@ -8121,8 +8506,7 @@
     },
     "DeleteInputResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for DeleteInputResponse"
     },
     "DeleteInputSecurityGroupRequest": {
@@ -8142,8 +8526,7 @@
     },
     "DeleteInputSecurityGroupResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for DeleteInputSecurityGroupResponse"
     },
     "DeleteMultiplexProgramRequest": {
@@ -8403,8 +8786,7 @@
     },
     "DeleteScheduleResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for DeleteScheduleResponse"
     },
     "DeleteTagsRequest": {
@@ -8430,8 +8812,7 @@
     },
     "DescribeAccountConfigurationRequest": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for DescribeAccountConfigurationRequest"
     },
     "DescribeAccountConfigurationResponse": {
@@ -8842,6 +9223,15 @@
           "shape": "MulticastSettings",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "Placeholder documentation for DescribeInputResponse"
@@ -9337,8 +9727,7 @@
     },
     "DolbyVision81Settings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Dolby Vision81 Settings"
     },
     "DvbNitSettings": {
@@ -9531,6 +9920,11 @@
           "shape": "__integerMin0",
           "locationName": "yPosition",
           "documentation": "Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match."
+        },
+        "SubtitleRows": {
+          "shape": "DvbSubDestinationSubtitleRows",
+          "locationName": "subtitleRows",
+          "documentation": "Applies only when the input captions are Teletext and the output captions are DVB-Sub or Burn-In. Choose the number of lines for the captions bitmap. The captions bitmap is 700 wide × 576 high and will be laid over the video. For example, a value of 16 divides the bitmap into 16 lines, with each line 36 pixels high (16 × 36 = 576). The default is 24 (24 pixels high). Enter the same number in every encode in every output that converts the same Teletext source to DVB-Sub or Burn-in."
         }
       },
       "documentation": "Dvb Sub Destination Settings"
@@ -9910,17 +10304,27 @@
         "FillLineGap": {
           "shape": "EbuTtDFillLineGapControl",
           "locationName": "fillLineGap",
-          "documentation": "Specifies how to handle the gap between the lines (in multi-line captions).\n\n- enabled: Fill with the captions background color (as specified in the input captions).\n- disabled: Leave the gap unfilled."
+          "documentation": "Specifies how to handle the gap between the lines (in multi-line captions). ENABLED: Fill with the captions background color (as specified in the input captions). DISABLED: Leave the gap unfilled"
         },
         "FontFamily": {
           "shape": "__string",
           "locationName": "fontFamily",
-          "documentation": "Specifies the font family to include in the font data attached to the EBU-TT captions. Valid only if styleControl is set to include. If you leave this field empty, the font family is set to \"monospaced\". (If styleControl is set to exclude, the font family is always set to \"monospaced\".)\n\nYou specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size.\n\n- Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the downstream player choose the font).\n- Leave blank to set the family to “monospace”."
+          "documentation": "Specifies the font family to include in the font data attached to the EBU-TT captions. Valid only if style_control is set to include. (If style_control is set to exclude, the font family is always set to monospaced.) Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as Arial), or a generic font family (such as serif), or default (to let the downstream player choose the font). Or leave blank to set the family to monospace. Note that you can specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size."
         },
         "StyleControl": {
           "shape": "EbuTtDDestinationStyleControl",
           "locationName": "styleControl",
-          "documentation": "Specifies the style information (font color, font position, and so on) to include in the font data that is attached to the EBU-TT captions.\n\n- include: Take the style information (font color, font position, and so on) from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext.\n- exclude: In the font data attached to the EBU-TT captions, set the font family to \"monospaced\". Do not include any other style information."
+          "documentation": "Specifies the style information to include in the font data that is attached to the EBU-TT captions. INCLUDE: Take the style information from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext. EXCLUDE: Set the font family to monospaced. Do not include any other style information."
+        },
+        "DefaultFontSize": {
+          "shape": "__integerMin1Max800",
+          "locationName": "defaultFontSize",
+          "documentation": "Specifies the default font size as a percentage of the computed cell size. Valid only if the defaultLineHeight is also set. If you leave this field empty, the default font size is 80% of the cell size."
+        },
+        "DefaultLineHeight": {
+          "shape": "__integerMin80Max800",
+          "locationName": "defaultLineHeight",
+          "documentation": "Documentation update needed"
         }
       },
       "documentation": "Ebu Tt DDestination Settings"
@@ -9951,14 +10355,12 @@
     },
     "EmbeddedDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Embedded Destination Settings"
     },
     "EmbeddedPlusScte20DestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Embedded Plus Scte20 Destination Settings"
     },
     "EmbeddedScte20Detection": {
@@ -9997,8 +10399,7 @@
     },
     "Empty": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for Empty"
     },
     "EncoderSettings": {
@@ -10370,8 +10771,7 @@
     },
     "FrameCaptureHlsSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Frame Capture Hls Settings"
     },
     "FrameCaptureIntervalUnit": {
@@ -10468,7 +10868,7 @@
         "OutputLockingMode": {
           "shape": "GlobalConfigurationOutputLockingMode",
           "locationName": "outputLockingMode",
-          "documentation": "Indicates how MediaLive pipelines are synchronized.\n\nPIPELINE_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the other.\nEPOCH_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the Unix epoch."
+          "documentation": "Indicates how MediaLive pipelines are synchronized.\n\nPIPELINE_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the other.\nEPOCH_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the Unix epoch.\nDISABLED - MediaLive will not attempt to synchronize the output of pipelines. We advise against disabling output locking because it has negative side effects in most workflows. For more information, see the section about output locking (pipeline locking) in the Medialive user guide."
         },
         "OutputTimingSource": {
           "shape": "GlobalConfigurationOutputTimingSource",
@@ -10509,7 +10909,8 @@
       "documentation": "Global Configuration Output Locking Mode",
       "enum": [
         "EPOCH_LOCKING",
-        "PIPELINE_LOCKING"
+        "PIPELINE_LOCKING",
+        "DISABLED"
       ]
     },
     "GlobalConfigurationOutputTimingSource": {
@@ -10713,7 +11114,7 @@
         "AdaptiveQuantization": {
           "shape": "H264AdaptiveQuantization",
           "locationName": "adaptiveQuantization",
-          "documentation": "Enables or disables adaptive quantization, which is a technique MediaLive can apply to video on a frame-by-frame basis to produce more compression without losing quality. There are three types of adaptive quantization: flicker, spatial, and temporal. Set the field in one of these ways: Set to Auto. Recommended. For each type of AQ, MediaLive will determine if AQ is needed, and if so, the appropriate strength. Set a strength (a value other than Auto or Disable). This strength will apply to any of the AQ fields that you choose to enable. Set to Disabled to disable all types of adaptive quantization."
+          "documentation": "Enables or disables adaptive quantization (AQ), which is a technique MediaLive can apply to video on a frame-by-frame basis to produce more compression without losing quality. There are three types of adaptive quantization: spatial, temporal, and flicker. We recommend that you set the field to Auto. For more information about all the options, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "AfdSignaling": {
           "shape": "AfdSignaling",
@@ -10743,7 +11144,7 @@
         "ColorSpaceSettings": {
           "shape": "H264ColorSpaceSettings",
           "locationName": "colorSpaceSettings",
-          "documentation": "Color Space settings"
+          "documentation": "Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source."
         },
         "EntropyEncoding": {
           "shape": "H264EntropyEncoding",
@@ -10763,7 +11164,7 @@
         "FlickerAq": {
           "shape": "H264FlickerAq",
           "locationName": "flickerAq",
-          "documentation": "Flicker AQ makes adjustments within each frame to reduce flicker or 'pop' on I-frames. The value to enter in this field depends on the value in the Adaptive quantization field: If you have set the Adaptive quantization field to Auto, MediaLive ignores any value in this field. MediaLive will determine if flicker AQ is appropriate and will apply the appropriate strength. If you have set the Adaptive quantization field to a strength, you can set this field to Enabled or Disabled. Enabled: MediaLive will apply flicker AQ using the specified strength. Disabled: MediaLive won't apply flicker AQ. If you have set the Adaptive quantization to Disabled, MediaLive ignores any value in this field and doesn't apply flicker AQ."
+          "documentation": "Flicker AQ makes adjustments within each frame to reduce flicker or 'pop' on I-frames. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "ForceFieldPictures": {
           "shape": "H264ForceFieldPictures",
@@ -10893,7 +11294,7 @@
         "SpatialAq": {
           "shape": "H264SpatialAq",
           "locationName": "spatialAq",
-          "documentation": "Spatial AQ makes adjustments within each frame based on spatial variation of content complexity. The value to enter in this field depends on the value in the Adaptive quantization field: If you have set the Adaptive quantization field to Auto, MediaLive ignores any value in this field. MediaLive will determine if spatial AQ is appropriate and will apply the appropriate strength. If you have set the Adaptive quantization field to a strength, you can set this field to Enabled or Disabled. Enabled: MediaLive will apply spatial AQ using the specified strength. Disabled: MediaLive won't apply spatial AQ. If you have set the Adaptive quantization to Disabled, MediaLive ignores any value in this field and doesn't apply spatial AQ."
+          "documentation": "Spatial AQ makes adjustments within each frame based on spatial variation of content complexity. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "SubgopLength": {
           "shape": "H264SubGopLength",
@@ -10908,7 +11309,7 @@
         "TemporalAq": {
           "shape": "H264TemporalAq",
           "locationName": "temporalAq",
-          "documentation": "Temporal makes adjustments within each frame based on temporal variation of content complexity. The value to enter in this field depends on the value in the Adaptive quantization field: If you have set the Adaptive quantization field to Auto, MediaLive ignores any value in this field. MediaLive will determine if temporal AQ is appropriate and will apply the appropriate strength. If you have set the Adaptive quantization field to a strength, you can set this field to Enabled or Disabled. Enabled: MediaLive will apply temporal AQ using the specified strength. Disabled: MediaLive won't apply temporal AQ. If you have set the Adaptive quantization to Disabled, MediaLive ignores any value in this field and doesn't apply temporal AQ."
+          "documentation": "Temporal makes adjustments within each frame based on variations in content complexity over time. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "TimecodeInsertion": {
           "shape": "H264TimecodeInsertionBehavior",
@@ -10924,6 +11325,11 @@
           "shape": "__integerMin1Max51",
           "locationName": "minQp",
           "documentation": "Sets the minimum QP. If you aren't familiar with quantization adjustment, leave the field empty. MediaLive will\napply an appropriate value."
+        },
+        "MinBitrate": {
+          "shape": "__integerMin0",
+          "locationName": "minBitrate",
+          "documentation": "Used for QVBR rate control mode only.\nOptional.\nEnter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output."
         }
       },
       "documentation": "H264 Settings"
@@ -11121,7 +11527,7 @@
         "AdaptiveQuantization": {
           "shape": "H265AdaptiveQuantization",
           "locationName": "adaptiveQuantization",
-          "documentation": "Adaptive quantization. Allows intra-frame quantizers to vary to improve visual quality."
+          "documentation": "Enables or disables adaptive quantization (AQ), which is a technique MediaLive can apply to video on a frame-by-frame basis to produce more compression without losing quality. There are three types of adaptive quantization: spatial, temporal, and flicker. Flicker is the only type that you can customize. We recommend that you set the field to Auto. For more information about all the options, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "AfdSignaling": {
           "shape": "AfdSignaling",
@@ -11151,7 +11557,7 @@
         "ColorSpaceSettings": {
           "shape": "H265ColorSpaceSettings",
           "locationName": "colorSpaceSettings",
-          "documentation": "Color Space settings"
+          "documentation": "Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source."
         },
         "FilterSettings": {
           "shape": "H265FilterSettings",
@@ -11166,7 +11572,7 @@
         "FlickerAq": {
           "shape": "H265FlickerAq",
           "locationName": "flickerAq",
-          "documentation": "If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on I-frames."
+          "documentation": "Flicker AQ makes adjustments within each frame to reduce flicker or 'pop' on I-frames. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide."
         },
         "FramerateDenominator": {
           "shape": "__integerMin1Max3003",
@@ -11307,6 +11713,26 @@
           "shape": "H265Deblocking",
           "locationName": "deblocking",
           "documentation": "Enable or disable the deblocking filter for this codec. The filter reduces blocking artifacts at block boundaries,\nwhich improves overall video quality. If the filter is disabled, visible block edges might appear in the output,\nespecially at lower bitrates."
+        },
+        "GopBReference": {
+          "shape": "H265GopBReference",
+          "locationName": "gopBReference",
+          "documentation": "Allows the encoder to use a B-Frame as a reference frame as well.\nENABLED: B-frames will also serve as reference frames.\nDISABLED: B-frames won't be reference frames.\nMust be DISABLED if resolution is greater than 1080p or when using tiled hevc encoding."
+        },
+        "GopNumBFrames": {
+          "shape": "__integerMin0Max3",
+          "locationName": "gopNumBFrames",
+          "documentation": "Sets the number of B-frames between reference frames.\nSet to 2 if resolution is greater than 1080p or when using tiled hevc encoding."
+        },
+        "MinBitrate": {
+          "shape": "__integerMin0Max40000000",
+          "locationName": "minBitrate",
+          "documentation": "Used for QVBR rate control mode only.\nOptional.\nEnter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output."
+        },
+        "SubgopLength": {
+          "shape": "H265SubGopLength",
+          "locationName": "subgopLength",
+          "documentation": "Sets the number of B-frames in each sub-GOP.\nFIXED: Use the value in Num B-frames.\nDYNAMIC: Optimizes the number of B-frames in each sub-GOP to improve visual quality.\nMust be FIXED if resolution is greater than 1080p or when using tiled hevc encoding."
         }
       },
       "documentation": "H265 Settings",
@@ -12078,8 +12504,7 @@
     },
     "HtmlMotionGraphicsSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Html Motion Graphics Settings"
     },
     "IFrameOnlyPlaylistType": {
@@ -12092,8 +12517,7 @@
     },
     "ImmediateModeScheduleActionStartSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Settings to configure an action so that it occurs as soon as possible."
     },
     "IncludeFillerNalUnits": {
@@ -12200,6 +12624,15 @@
           "shape": "MulticastSettings",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "Placeholder documentation for Input"
@@ -12523,6 +12956,11 @@
           "shape": "__listOfInputDeviceConfigurableAudioChannelPairConfig",
           "locationName": "audioChannelPairs",
           "documentation": "An array of eight audio configurations, one for each audio pair in the source. Set up each audio configuration either to exclude the pair, or to format it and include it in the output from the device. This parameter applies only to UHD devices, and only when the device is configured as the source for a MediaConnect flow. For an HD device, you configure the audio by setting up audio selectors in the channel configuration."
+        },
+        "InputResolution": {
+          "shape": "__string",
+          "locationName": "inputResolution",
+          "documentation": "Choose the resolution of the Link device's source (HD or UHD). Make sure the resolution matches the current source from the device. This value determines MediaLive resource allocation and billing for this input. Only UHD devices can specify this parameter."
         }
       },
       "documentation": "Configurable settings for the input device."
@@ -12913,6 +13351,11 @@
           "shape": "__listOfInputDeviceUhdAudioChannelPairConfig",
           "locationName": "audioChannelPairs",
           "documentation": "An array of eight audio configurations, one for each audio pair in the source. Each audio configuration specifies either to exclude the pair, or to format it and include it in the output from the UHD device. Applies only when the device is configured as the source for a MediaConnect flow."
+        },
+        "InputResolution": {
+          "shape": "__string",
+          "locationName": "inputResolution",
+          "documentation": "The resolution of the Link device's source (HD or UHD). This value determines MediaLive resource allocation and billing for this input."
         }
       },
       "documentation": "Settings that describe the active source from the input device, and the video characteristics of that source."
@@ -13340,7 +13783,9 @@
         "AWS_CDI",
         "TS_FILE",
         "SRT_CALLER",
-        "MULTICAST"
+        "MULTICAST",
+        "SMPTE_2110_RECEIVER_GROUP",
+        "SDI"
       ]
     },
     "InputVpcRequest": {
@@ -14686,6 +15131,11 @@
           "shape": "OutputLocationRef",
           "locationName": "destination",
           "documentation": "MediaPackage channel destination."
+        },
+        "MediapackageV2GroupSettings": {
+          "shape": "MediaPackageV2GroupSettings",
+          "locationName": "mediapackageV2GroupSettings",
+          "documentation": "Parameters that apply only if the destination parameter (for the output group) specifies a channelGroup and channelName. Use of these two paramters indicates that the output group is for MediaPackage V2 (CMAF Ingest)."
         }
       },
       "documentation": "Media Package Group Settings",
@@ -14717,6 +15167,11 @@
     "MediaPackageOutputSettings": {
       "type": "structure",
       "members": {
+        "MediaPackageV2DestinationSettings": {
+          "shape": "MediaPackageV2DestinationSettings",
+          "locationName": "mediaPackageV2DestinationSettings",
+          "documentation": "Optional settings for MediaPackage V2 destinations"
+        }
       },
       "documentation": "Media Package Output Settings"
     },
@@ -14766,8 +15221,7 @@
     },
     "MotionGraphicsDeactivateScheduleActionSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Settings to specify the ending of rendering motion graphics into the video stream."
     },
     "MotionGraphicsInsertion": {
@@ -15191,8 +15645,7 @@
     },
     "MultiplexGroupSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Multiplex Group Settings"
     },
     "MultiplexMediaConnectOutputDestinationSettings": {
@@ -15888,6 +16341,11 @@
           "shape": "__listOfSrtOutputDestinationSettings",
           "locationName": "srtSettings",
           "documentation": "SRT settings for an SRT output; one destination for each redundant encoder."
+        },
+        "LogicalInterfaceNames": {
+          "shape": "__listOf__string",
+          "locationName": "logicalInterfaceNames",
+          "documentation": "Optional assignment of an output to a logical interface on the Node. Only applies to on premises channels."
         }
       },
       "documentation": "Placeholder documentation for OutputDestination"
@@ -16060,8 +16518,7 @@
     },
     "PassThroughSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Pass Through Settings"
     },
     "PauseStateScheduleActionSettings": {
@@ -16120,8 +16577,7 @@
     },
     "PipelineLockingSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Pipeline Locking Settings"
     },
     "PipelinePauseStateSettings": {
@@ -16256,8 +16712,7 @@
     },
     "RawSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Raw Settings"
     },
     "RebootInputDevice": {
@@ -16301,20 +16756,17 @@
     },
     "RebootInputDeviceResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for RebootInputDeviceResponse"
     },
     "Rec601Settings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Rec601 Settings"
     },
     "Rec709Settings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Rec709 Settings"
     },
     "RejectInputDeviceTransferRequest": {
@@ -16334,8 +16786,7 @@
     },
     "RejectInputDeviceTransferResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for RejectInputDeviceTransferResponse"
     },
     "RemixSettings": {
@@ -16658,8 +17109,7 @@
     },
     "RtmpCaptionInfoDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Rtmp Caption Info Destination Settings"
     },
     "RtmpGroupSettings": {
@@ -16895,8 +17345,7 @@
     },
     "ScheduleDeleteResultModel": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Result of a schedule deletion."
     },
     "ScheduleDescribeResultModel": {
@@ -16928,8 +17377,7 @@
     },
     "Scte20PlusEmbeddedDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Scte20 Plus Embedded Destination Settings"
     },
     "Scte20SourceSettings": {
@@ -16950,8 +17398,7 @@
     },
     "Scte27DestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Scte27 Destination Settings"
     },
     "Scte27OcrLanguage": {
@@ -17373,8 +17820,7 @@
     },
     "SmpteTtDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Smpte Tt Destination Settings"
     },
     "StandardHlsSettings": {
@@ -17531,8 +17977,7 @@
     },
     "StartInputDeviceMaintenanceWindowResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for StartInputDeviceMaintenanceWindowResponse"
     },
     "StartInputDeviceRequest": {
@@ -17552,8 +17997,7 @@
     },
     "StartInputDeviceResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for StartInputDeviceResponse"
     },
     "StartMultiplexRequest": {
@@ -17957,8 +18401,7 @@
     },
     "StopInputDeviceResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for StopInputDeviceResponse"
     },
     "StopMultiplexRequest": {
@@ -18070,8 +18513,7 @@
     },
     "TeletextDestinationSettings": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Teletext Destination Settings"
     },
     "TeletextSourceSettings": {
@@ -18207,8 +18649,7 @@
     },
     "ThumbnailNoData": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Response when thumbnail has no data. It should have no message."
     },
     "ThumbnailState": {
@@ -18372,8 +18813,7 @@
     },
     "TransferInputDeviceResponse": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for TransferInputDeviceResponse"
     },
     "TransferringInputDeviceSummary": {
@@ -18605,6 +19045,11 @@
         "DryRun": {
           "shape": "__boolean",
           "locationName": "dryRun"
+        },
+        "AnywhereSettings": {
+          "shape": "AnywhereSettings",
+          "locationName": "anywhereSettings",
+          "documentation": "The Elemental Anywhere settings for this channel."
         }
       },
       "documentation": "Placeholder documentation for UpdateChannel"
@@ -18725,6 +19170,11 @@
         "DryRun": {
           "shape": "__boolean",
           "locationName": "dryRun"
+        },
+        "AnywhereSettings": {
+          "shape": "AnywhereSettings",
+          "locationName": "anywhereSettings",
+          "documentation": "The Elemental Anywhere settings for this channel."
         }
       },
       "documentation": "A request to update a channel.",
@@ -18799,6 +19249,15 @@
           "shape": "MulticastSettingsUpdateRequest",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "Placeholder documentation for UpdateInput"
@@ -19003,6 +19462,15 @@
           "shape": "MulticastSettingsUpdateRequest",
           "locationName": "multicastSettings",
           "documentation": "Multicast Input settings."
+        },
+        "Smpte2110ReceiverGroupSettings": {
+          "shape": "Smpte2110ReceiverGroupSettings",
+          "locationName": "smpte2110ReceiverGroupSettings",
+          "documentation": "Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input."
+        },
+        "SdiSources": {
+          "shape": "InputSdiSources",
+          "locationName": "sdiSources"
         }
       },
       "documentation": "A request to update an input.",
@@ -19395,12 +19863,12 @@
         "ColorSpace": {
           "shape": "VideoSelectorColorSpace",
           "locationName": "colorSpace",
-          "documentation": "Specifies the color space of an input. This setting works in tandem with colorSpaceUsage and a video description's colorSpaceSettingsChoice to determine if any conversion will be performed."
+          "documentation": "Controls how MediaLive will use the color space metadata from the source. Typically, choose FOLLOW, which means to use the color space metadata without changing it. Or choose another value (a standard). In this case, the handling is controlled by the colorspaceUsage property."
         },
         "ColorSpaceSettings": {
           "shape": "VideoSelectorColorSpaceSettings",
           "locationName": "colorSpaceSettings",
-          "documentation": "Color space settings"
+          "documentation": "Choose HDR10 only if the following situation applies. Firstly, you specified HDR10 in ColorSpace. Secondly, the attached input is for AWS Elemental Link. Thirdly, you plan to convert the content to another color space. You need to specify the color space metadata that is missing from the source sent from AWS Elemental Link."
         },
         "ColorSpaceUsage": {
           "shape": "VideoSelectorColorSpaceUsage",
@@ -20780,6 +21248,31 @@
           "shape": "__stringMax100",
           "locationName": "id3NameModifier",
           "documentation": "Change the modifier that MediaLive automatically adds to the Streams() name that identifies an ID3 track. The default is \"id3\", which means the default name will be Streams(id3.cmfm). Any string you enter here will replace the \"id3\" string.\\nThe modifier can only contain: numbers, letters, plus (+), minus (-), underscore (_) and period (.) and has a maximum length of 100 characters."
+        },
+        "CaptionLanguageMappings": {
+          "shape": "__listOfCmafIngestCaptionLanguageMapping",
+          "locationName": "captionLanguageMappings",
+          "documentation": "An array that identifies the languages in the four caption channels in the embedded captions."
+        },
+        "TimedMetadataId3Frame": {
+          "shape": "CmafTimedMetadataId3Frame",
+          "locationName": "timedMetadataId3Frame",
+          "documentation": "Set to none if you don't want to insert a timecode in the output. Otherwise choose the frame type for the timecode."
+        },
+        "TimedMetadataId3Period": {
+          "shape": "__integerMin0Max10000",
+          "locationName": "timedMetadataId3Period",
+          "documentation": "If you set up to insert a timecode in the output, specify the frequency for the frame, in seconds."
+        },
+        "TimedMetadataPassthrough": {
+          "shape": "CmafTimedMetadataPassthrough",
+          "locationName": "timedMetadataPassthrough",
+          "documentation": "Set to enabled to pass through ID3 metadata from the input sources."
+        },
+        "AdditionalDestinations": {
+          "shape": "__listOfAdditionalDestinations",
+          "locationName": "additionalDestinations",
+          "documentation": "Optional an array of additional destinational HTTP destinations for the OutputGroup outputs"
         }
       },
       "documentation": "Cmaf Ingest Group Settings",
@@ -21075,7 +21568,8 @@
         "MEDIAPACKAGE_CHANNEL",
         "MEDIAPACKAGE_ORIGIN_ENDPOINT",
         "MEDIACONNECT_FLOW",
-        "S3_BUCKET"
+        "S3_BUCKET",
+        "MEDIATAILOR_PLAYBACK_CONFIGURATION"
       ]
     },
     "CloudWatchAlarmTemplateTreatMissingData": {
@@ -21115,6 +21609,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21138,6 +21638,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21289,6 +21795,12 @@
         "TreatMissingData": {
           "shape": "CloudWatchAlarmTemplateTreatMissingData",
           "locationName": "treatMissingData"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21367,6 +21879,12 @@
         "TreatMissingData": {
           "shape": "CloudWatchAlarmTemplateTreatMissingData",
           "locationName": "treatMissingData"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21582,6 +22100,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21605,6 +22129,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21723,6 +22253,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21761,6 +22297,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21909,6 +22451,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -21946,6 +22494,12 @@
         "Tags": {
           "shape": "TagMap",
           "locationName": "tags"
+        },
+        "RequestId": {
+          "shape": "__stringMin1Max256PatternS",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
         }
       },
       "required": [
@@ -25383,14 +25937,14 @@
           "documentation": "Configures whether MediaLive will write AFD values into the video.\nAUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid).\nFIXED: the AFD value will be the value configured in the fixedAfd parameter.\nNONE: MediaLive won't write AFD into the video"
         },
         "BufSize": {
-          "shape": "__integerMin50000Max16000000",
+          "shape": "__integerMin50000Max24000000",
           "locationName": "bufSize",
           "documentation": "The size of the buffer (HRD buffer model) in bits."
         },
         "ColorSpaceSettings": {
           "shape": "Av1ColorSpaceSettings",
           "locationName": "colorSpaceSettings",
-          "documentation": "Color Space settings"
+          "documentation": "Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source."
         },
         "FixedAfd": {
           "shape": "FixedAfd",
@@ -25428,7 +25982,7 @@
           "documentation": "Sets the amount of lookahead. A value of LOW can decrease latency and memory usage. A value of HIGH can produce better quality for certain content."
         },
         "MaxBitrate": {
-          "shape": "__integerMin50000Max8000000",
+          "shape": "__integerMin50000Max12000000",
           "locationName": "maxBitrate",
           "documentation": "The maximum bitrate to assign.\nFor recommendations, see the description for qvbrQualityLevel."
         },
@@ -25461,6 +26015,21 @@
           "shape": "TimecodeBurninSettings",
           "locationName": "timecodeBurninSettings",
           "documentation": "Configures the timecode burn-in feature. If you enable this feature, the timecode will become part of the video."
+        },
+        "Bitrate": {
+          "shape": "__integerMin50000Max12000000",
+          "locationName": "bitrate",
+          "documentation": "Average bitrate in bits/second. Required when the rate control mode is CBR. Not used for QVBR."
+        },
+        "RateControlMode": {
+          "shape": "Av1RateControlMode",
+          "locationName": "rateControlMode",
+          "documentation": "Rate control mode.\n\nQVBR: Quality will match the specified quality level except when it is constrained by the\nmaximum bitrate.  Recommended if you or your viewers pay for bandwidth.\n\nCBR: Quality varies, depending on the video complexity. Recommended only if you distribute\nyour assets to devices that cannot handle variable bitrates."
+        },
+        "MinBitrate": {
+          "shape": "__integerMin0Max8000000",
+          "locationName": "minBitrate",
+          "documentation": "Used for QVBR rate control mode only.\nOptional.\nEnter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output."
         }
       },
       "documentation": "Av1 Settings",
@@ -25616,7 +26185,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -25936,6 +26505,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for CreateNodeResponse"
@@ -25993,7 +26567,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -26192,6 +26766,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for DeleteNodeResponse"
@@ -26265,7 +26844,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -26306,7 +26885,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -26347,7 +26926,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -26717,6 +27296,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for DescribeNodeResponse"
@@ -26773,6 +27357,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Contains the response for CreateNode, DescribeNode, DeleteNode, UpdateNode"
@@ -26834,6 +27423,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for DescribeNodeSummary"
@@ -27574,7 +28168,7 @@
         "Nodes": {
           "shape": "__listOf__string",
           "locationName": "nodes",
-          "documentation": "An array with one item, which is the signle Node that is associated with the ChannelPlacementGroup."
+          "documentation": "An array with one item, which is the single Node that is associated with the ChannelPlacementGroup."
         },
         "State": {
           "shape": "ChannelPlacementGroupState",
@@ -27825,6 +28419,11 @@
           "shape": "NodeRole",
           "locationName": "role",
           "documentation": "The initial role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappingsUpdateRequest",
+          "locationName": "sdiSourceMappings",
+          "documentation": "The mappings of a SDI capture card port to a logical SDI data stream"
         }
       },
       "documentation": "A request to update the node.",
@@ -27885,6 +28484,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for UpdateNodeResponse"
@@ -27976,6 +28580,11 @@
           "shape": "NodeState",
           "locationName": "state",
           "documentation": "The current state of the Node."
+        },
+        "SdiSourceMappings": {
+          "shape": "SdiSourceMappings",
+          "locationName": "sdiSourceMappings",
+          "documentation": "An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses."
         }
       },
       "documentation": "Placeholder documentation for UpdateNodeStateResponse"
@@ -27986,17 +28595,17 @@
       "max": 16000,
       "documentation": "Placeholder documentation for __integerMin40Max16000"
     },
-    "__integerMin50000Max16000000": {
+    "__integerMin50000Max24000000": {
       "type": "integer",
       "min": 50000,
-      "max": 16000000,
-      "documentation": "Placeholder documentation for __integerMin50000Max16000000"
+      "max": 24000000,
+      "documentation": "Placeholder documentation for __integerMin50000Max24000000"
     },
-    "__integerMin50000Max8000000": {
+    "__integerMin50000Max12000000": {
       "type": "integer",
       "min": 50000,
-      "max": 8000000,
-      "documentation": "Placeholder documentation for __integerMin50000Max8000000"
+      "max": 12000000,
+      "documentation": "Placeholder documentation for __integerMin50000Max12000000"
     },
     "__listOfDescribeChannelPlacementGroupSummary": {
       "type": "list",
@@ -28318,8 +28927,7 @@
     },
     "ListVersionsRequest": {
       "type": "structure",
-      "members": {
-      },
+      "members": {},
       "documentation": "Placeholder documentation for ListVersionsRequest"
     },
     "ListVersionsResponse": {
@@ -28377,6 +28985,1033 @@
       "required": [
         "Id3"
       ]
+    },
+    "__stringMin1Max256PatternS": {
+      "type": "string",
+      "min": 1,
+      "max": 256,
+      "pattern": "^[\\S]+$",
+      "documentation": "Placeholder documentation for __stringMin1Max256PatternS"
+    },
+    "__integerMin1Max800": {
+      "type": "integer",
+      "min": 1,
+      "max": 800,
+      "documentation": "Placeholder documentation for __integerMin1Max800"
+    },
+    "__integerMin80Max800": {
+      "type": "integer",
+      "min": 80,
+      "max": 800,
+      "documentation": "Placeholder documentation for __integerMin80Max800"
+    },
+    "InputSdpLocation": {
+      "type": "structure",
+      "members": {
+        "MediaIndex": {
+          "shape": "__integer",
+          "locationName": "mediaIndex",
+          "documentation": "The index of the media stream in the SDP file for one SMPTE 2110 stream."
+        },
+        "SdpUrl": {
+          "shape": "__string",
+          "locationName": "sdpUrl",
+          "documentation": "The URL of the SDP file for one SMPTE 2110 stream."
+        }
+      },
+      "documentation": "The location of the SDP file for one of the SMPTE 2110 streams in a receiver group."
+    },
+    "Smpte2110ReceiverGroup": {
+      "type": "structure",
+      "members": {
+        "SdpSettings": {
+          "shape": "Smpte2110ReceiverGroupSdpSettings",
+          "locationName": "sdpSettings",
+          "documentation": "The single Smpte2110ReceiverGroupSdpSettings that identify the video, audio, and ancillary streams for this receiver group."
+        }
+      },
+      "documentation": "A receiver group is a collection of video, audio, and ancillary streams that you want to group together and attach to one input."
+    },
+    "Smpte2110ReceiverGroupSdpSettings": {
+      "type": "structure",
+      "members": {
+        "AncillarySdps": {
+          "shape": "__listOfInputSdpLocation",
+          "locationName": "ancillarySdps",
+          "documentation": "A list of InputSdpLocations. Each item in the list specifies the SDP file and index for one ancillary SMPTE 2110 stream.\nEach stream encapsulates one captions stream (out of any number you can include) or the single SCTE 35 stream that you can include."
+        },
+        "AudioSdps": {
+          "shape": "__listOfInputSdpLocation",
+          "locationName": "audioSdps",
+          "documentation": "A list of InputSdpLocations. Each item in the list specifies the SDP file and index for one audio SMPTE 2110 stream."
+        },
+        "VideoSdp": {
+          "shape": "InputSdpLocation",
+          "locationName": "videoSdp",
+          "documentation": "The InputSdpLocation that specifies the SDP file and index for the single video SMPTE 2110 stream for this 2110 input."
+        }
+      },
+      "documentation": "Information about the SDP files that describe the SMPTE 2110 streams that go into one SMPTE 2110 receiver group."
+    },
+    "Smpte2110ReceiverGroupSettings": {
+      "type": "structure",
+      "members": {
+        "Smpte2110ReceiverGroups": {
+          "shape": "__listOfSmpte2110ReceiverGroup",
+          "locationName": "smpte2110ReceiverGroups"
+        }
+      },
+      "documentation": "Configures the sources for the SMPTE 2110 Receiver Group input."
+    },
+    "__listOfInputSdpLocation": {
+      "type": "list",
+      "member": {
+        "shape": "InputSdpLocation"
+      },
+      "documentation": "Placeholder documentation for __listOfInputSdpLocation"
+    },
+    "__listOfSmpte2110ReceiverGroup": {
+      "type": "list",
+      "member": {
+        "shape": "Smpte2110ReceiverGroup"
+      },
+      "documentation": "Placeholder documentation for __listOfSmpte2110ReceiverGroup"
+    },
+    "CreateSdiSourceRequest": {
+      "type": "structure",
+      "members": {
+        "Mode": {
+          "shape": "SdiSourceMode",
+          "locationName": "mode",
+          "documentation": "Applies only if the type is QUAD. Specify the mode for handling the quad-link signal: QUADRANT or INTERLEAVE."
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive."
+        },
+        "RequestId": {
+          "shape": "__string",
+          "locationName": "requestId",
+          "documentation": "An ID that you assign to a create request. This ID ensures idempotency when creating resources.",
+          "idempotencyToken": true
+        },
+        "Tags": {
+          "shape": "Tags",
+          "locationName": "tags",
+          "documentation": "A collection of key-value pairs."
+        },
+        "Type": {
+          "shape": "SdiSourceType",
+          "locationName": "type",
+          "documentation": "Specify the  type of the SDI source: SINGLE: The source  is a single-link source. QUAD: The source  is one part of a quad-link source."
+        }
+      },
+      "documentation": "A request to create a SdiSource."
+    },
+    "CreateSdiSourceResponse": {
+      "type": "structure",
+      "members": {
+        "SdiSource": {
+          "shape": "SdiSource",
+          "locationName": "sdiSource",
+          "documentation": "Settings for the SDI source."
+        }
+      },
+      "documentation": "Placeholder documentation for CreateSdiSourceResponse"
+    },
+    "DeleteSdiSourceRequest": {
+      "type": "structure",
+      "members": {
+        "SdiSourceId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "sdiSourceId",
+          "documentation": "The ID of the SdiSource."
+        }
+      },
+      "required": [
+        "SdiSourceId"
+      ],
+      "documentation": "Placeholder documentation for DeleteSdiSourceRequest"
+    },
+    "DeleteSdiSourceResponse": {
+      "type": "structure",
+      "members": {
+        "SdiSource": {
+          "shape": "SdiSource",
+          "locationName": "sdiSource",
+          "documentation": "Settings for the SDI source."
+        }
+      },
+      "documentation": "Placeholder documentation for DeleteSdiSourceResponse"
+    },
+    "DescribeSdiSourceRequest": {
+      "type": "structure",
+      "members": {
+        "SdiSourceId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "sdiSourceId",
+          "documentation": "Get details about an SdiSource."
+        }
+      },
+      "required": [
+        "SdiSourceId"
+      ],
+      "documentation": "Placeholder documentation for DescribeSdiSourceRequest"
+    },
+    "DescribeSdiSourceResponse": {
+      "type": "structure",
+      "members": {
+        "SdiSource": {
+          "shape": "SdiSource",
+          "locationName": "sdiSource",
+          "documentation": "Settings for the SDI source."
+        }
+      },
+      "documentation": "Placeholder documentation for DescribeSdiSourceResponse"
+    },
+    "InputSdiSources": {
+      "type": "list",
+      "documentation": "SDI Sources for this Input.",
+      "member": {
+        "shape": "__string"
+      }
+    },
+    "ListSdiSourcesRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "MaxResults",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "The maximum number of items to return."
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "The token to retrieve the next page of results."
+        }
+      },
+      "documentation": "Placeholder documentation for ListSdiSourcesRequest"
+    },
+    "ListSdiSourcesResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken"
+        },
+        "SdiSources": {
+          "shape": "__listOfSdiSourceSummary",
+          "locationName": "sdiSources"
+        }
+      },
+      "documentation": "Placeholder documentation for ListSdiSourcesResponse"
+    },
+    "SdiSource": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "locationName": "arn",
+          "documentation": "The ARN of this SdiSource. It is automatically assigned when the SdiSource is created."
+        },
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The ID of the SdiSource. Unique in the AWS account.The ID is the resource-id portion of the ARN."
+        },
+        "Inputs": {
+          "shape": "__listOf__string",
+          "locationName": "inputs",
+          "documentation": "The list of inputs that are currently using this SDI source. This list will be empty if the SdiSource has just been deleted."
+        },
+        "Mode": {
+          "shape": "SdiSourceMode",
+          "locationName": "mode",
+          "documentation": "Applies only if the type is QUAD. The mode for handling the quad-link signal QUADRANT or INTERLEAVE."
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "The name of the SdiSource."
+        },
+        "State": {
+          "shape": "SdiSourceState",
+          "locationName": "state",
+          "documentation": "Specifies whether the SDI source is attached to an SDI input (IN_USE) or not (IDLE)."
+        },
+        "Type": {
+          "shape": "SdiSourceType",
+          "locationName": "type"
+        }
+      },
+      "documentation": "Used in CreateSdiSourceResponse, DeleteSdiSourceResponse, DescribeSdiSourceResponse, ListSdiSourcesResponse, UpdateSdiSourceResponse"
+    },
+    "SdiSourceMapping": {
+      "type": "structure",
+      "members": {
+        "CardNumber": {
+          "shape": "__integer",
+          "locationName": "cardNumber",
+          "documentation": "A number that uniquely identifies the SDI card on the node hardware."
+        },
+        "ChannelNumber": {
+          "shape": "__integer",
+          "locationName": "channelNumber",
+          "documentation": "A number that uniquely identifies a port on the SDI card."
+        },
+        "SdiSource": {
+          "shape": "__string",
+          "locationName": "sdiSource",
+          "documentation": "The ID of the SdiSource to associate with this port on this card. You can use the ListSdiSources operation to discover all the IDs."
+        }
+      },
+      "documentation": "Used in DescribeNodeSummary, DescribeNodeResult."
+    },
+    "SdiSourceMappingUpdateRequest": {
+      "type": "structure",
+      "members": {
+        "CardNumber": {
+          "shape": "__integer",
+          "locationName": "cardNumber",
+          "documentation": "A number that uniquely identifies the SDI card on the node hardware. For information about how physical cards are identified on your node hardware, see the documentation for your node hardware. The numbering always starts at 1."
+        },
+        "ChannelNumber": {
+          "shape": "__integer",
+          "locationName": "channelNumber",
+          "documentation": "A number that uniquely identifies a port on the card. This must be an SDI port (not a timecode port, for example). For information about how ports are identified on physical cards, see the documentation for your node hardware."
+        },
+        "SdiSource": {
+          "shape": "__string",
+          "locationName": "sdiSource",
+          "documentation": "The ID of a SDI source streaming on the given SDI capture card port."
+        }
+      },
+      "documentation": "Used in SdiSourceMappingsUpdateRequest. One SDI source mapping. It connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses. You must specify all three parameters in this object."
+    },
+    "SdiSourceMappings": {
+      "type": "list",
+      "documentation": "Used in SdiSourceMappings.",
+      "member": {
+        "shape": "SdiSourceMapping"
+      }
+    },
+    "SdiSourceMappingsUpdateRequest": {
+      "type": "list",
+      "documentation": "Used in the SdiSourceMappingsUpdateRequest, which is a parameter of the UpdateNodeRequest, which is used in the UpdateNodeRequest operation. This means that you create a mapping for an SDI source by updating a Node. You can't create the mapping when you first create the Node.",
+      "member": {
+        "shape": "SdiSourceMappingUpdateRequest"
+      }
+    },
+    "SdiSourceMode": {
+      "type": "string",
+      "documentation": "Used in SdiSource, CreateSdiSourceRequest, UpdateSdiSourceRequest.",
+      "enum": [
+        "QUADRANT",
+        "INTERLEAVE"
+      ]
+    },
+    "SdiSourceState": {
+      "type": "string",
+      "documentation": "Used in SdiSource, DescribeNodeRequest, DescribeNodeResult",
+      "enum": [
+        "IDLE",
+        "IN_USE",
+        "DELETED"
+      ]
+    },
+    "SdiSourceSummary": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "locationName": "arn",
+          "documentation": "The ARN of this SdiSource. It is automatically assigned when the SdiSource is created."
+        },
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The ID of the SdiSource. Unique in the AWS account.The ID is the resource-id portion of the ARN."
+        },
+        "Inputs": {
+          "shape": "__listOf__string",
+          "locationName": "inputs",
+          "documentation": "The list of inputs that are currently using this SDI source. This list will be empty if the SdiSource has just been deleted."
+        },
+        "Mode": {
+          "shape": "SdiSourceMode",
+          "locationName": "mode",
+          "documentation": "Applies only if the type is QUAD. The mode for handling the quad-link signal QUADRANT or INTERLEAVE."
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "The name of the SdiSource."
+        },
+        "State": {
+          "shape": "SdiSourceState",
+          "locationName": "state",
+          "documentation": "Specifies whether the SDI source is attached to an SDI input (IN_USE) or not (IDLE)."
+        },
+        "Type": {
+          "shape": "SdiSourceType",
+          "locationName": "type"
+        }
+      },
+      "documentation": "Used in CreateSdiSourceResponse, DeleteSdiSourceResponse, DescribeSdiSourceResponse, ListSdiSourcesResponse, UpdateSdiSourceResponse"
+    },
+    "SdiSourceType": {
+      "type": "string",
+      "documentation": "Used in SdiSource, CreateSdiSourceRequest, UpdateSdiSourceRequest.",
+      "enum": [
+        "SINGLE",
+        "QUAD"
+      ]
+    },
+    "UpdateSdiSourceRequest": {
+      "type": "structure",
+      "members": {
+        "Mode": {
+          "shape": "SdiSourceMode",
+          "locationName": "mode",
+          "documentation": "Include this parameter only if you want to change the name of the SdiSource. Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive."
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "Include this parameter only if you want to change the name of the SdiSource. Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive."
+        },
+        "SdiSourceId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "sdiSourceId",
+          "documentation": "The ID of the SdiSource"
+        },
+        "Type": {
+          "shape": "SdiSourceType",
+          "locationName": "type",
+          "documentation": "Include this parameter only if you want to change the mode. Specify the type of the SDI source: SINGLE: The source is a single-link source. QUAD: The source is one part of a quad-link source."
+        }
+      },
+      "documentation": "A request to update the SdiSource.",
+      "required": [
+        "SdiSourceId"
+      ]
+    },
+    "UpdateSdiSourceResponse": {
+      "type": "structure",
+      "members": {
+        "SdiSource": {
+          "shape": "SdiSource",
+          "locationName": "sdiSource",
+          "documentation": "Settings for the SDI source."
+        }
+      },
+      "documentation": "Placeholder documentation for UpdateSdiSourceResponse"
+    },
+    "__listOfSdiSourceSummary": {
+      "type": "list",
+      "member": {
+        "shape": "SdiSourceSummary"
+      },
+      "documentation": "Placeholder documentation for __listOfSdiSourceSummary"
+    },
+    "CmafIngestCaptionLanguageMapping": {
+      "type": "structure",
+      "members": {
+        "CaptionChannel": {
+          "shape": "__integerMin1Max4",
+          "locationName": "captionChannel",
+          "documentation": "A number for the channel for this caption, 1 to 4."
+        },
+        "LanguageCode": {
+          "shape": "__stringMin3Max3",
+          "locationName": "languageCode",
+          "documentation": "Language code for the language of the caption in this channel.  For example, ger/deu. See http://www.loc.gov/standards/iso639-2"
+        }
+      },
+      "documentation": "Add an array item for each language. Follow the order of the caption descriptions. For example, if the first caption description is for German, then the first array item must be for German, and its caption channel must be set to 1. The second array item must be 2, and so on.",
+      "required": [
+        "LanguageCode",
+        "CaptionChannel"
+      ]
+    },
+    "CmafTimedMetadataId3Frame": {
+      "type": "string",
+      "documentation": "Cmaf Timed Metadata Id3 Frame",
+      "enum": [
+        "NONE",
+        "PRIV",
+        "TDRL"
+      ]
+    },
+    "CmafTimedMetadataPassthrough": {
+      "type": "string",
+      "documentation": "Cmaf Timed Metadata Passthrough",
+      "enum": [
+        "DISABLED",
+        "ENABLED"
+      ]
+    },
+    "__listOfCmafIngestCaptionLanguageMapping": {
+      "type": "list",
+      "member": {
+        "shape": "CmafIngestCaptionLanguageMapping"
+      },
+      "documentation": "Placeholder documentation for __listOfCmafIngestCaptionLanguageMapping"
+    },
+    "Av1RateControlMode": {
+      "type": "string",
+      "documentation": "Av1 Rate Control Mode",
+      "enum": [
+        "CBR",
+        "QVBR"
+      ]
+    },
+    "AdditionalDestinations": {
+      "type": "structure",
+      "members": {
+        "Destination": {
+          "shape": "OutputLocationRef",
+          "locationName": "destination",
+          "documentation": "The destination location"
+        }
+      },
+      "documentation": "Additional output destinations for a CMAF Ingest output group",
+      "required": [
+        "Destination"
+      ]
+    },
+    "__listOfAdditionalDestinations": {
+      "type": "list",
+      "member": {
+        "shape": "AdditionalDestinations"
+      },
+      "documentation": "Placeholder documentation for __listOfAdditionalDestinations"
+    },
+    "BurnInDestinationSubtitleRows": {
+      "type": "string",
+      "documentation": "Burn In Destination Subtitle Rows",
+      "enum": [
+        "ROWS_16",
+        "ROWS_20",
+        "ROWS_24"
+      ]
+    },
+    "DvbSubDestinationSubtitleRows": {
+      "type": "string",
+      "documentation": "Dvb Sub Destination Subtitle Rows",
+      "enum": [
+        "ROWS_16",
+        "ROWS_20",
+        "ROWS_24"
+      ]
+    },
+    "HlsAutoSelect": {
+      "type": "string",
+      "documentation": "Hls Auto Select",
+      "enum": [
+        "NO",
+        "OMIT",
+        "YES"
+      ]
+    },
+    "HlsDefault": {
+      "type": "string",
+      "documentation": "Hls Default",
+      "enum": [
+        "NO",
+        "OMIT",
+        "YES"
+      ]
+    },
+    "MediaPackageV2DestinationSettings": {
+      "type": "structure",
+      "members": {
+        "AudioGroupId": {
+          "shape": "__string",
+          "locationName": "audioGroupId",
+          "documentation": "Applies only to an output that contains audio. If you want to put several audio encodes into one audio rendition group, decide on a name (ID) for the group. Then in every audio output that you want to belong to that group, enter that ID in this field. Note that this information is part of the HLS specification (not the CMAF specification), but if you include it then MediaPackage will include it in the manifest it creates for the video player."
+        },
+        "AudioRenditionSets": {
+          "shape": "__string",
+          "locationName": "audioRenditionSets",
+          "documentation": "Applies only to an output that contains video, and only if you want to associate one or more audio groups to this video. In this field you assign the groups that you create (in the Group ID fields in the various audio outputs). Enter one group ID, or enter a comma-separated list of group IDs. Note that this information is part of the HLS specification (not the CMAF specification), but if you include it then MediaPackage will include it in the manifest it creates for the video player."
+        },
+        "HlsAutoSelect": {
+          "shape": "HlsAutoSelect",
+          "locationName": "hlsAutoSelect",
+          "documentation": "Specifies whether MediaPackage should set this output as the auto-select rendition in the HLS manifest. YES means this must be the auto-select. NO means this should never be the auto-select. OMIT means MediaPackage decides what to set on this rendition.\nWhen you consider all the renditions, follow these guidelines. You can set zero or one renditions to YES. You can set zero or more renditions to NO, but you can't set all renditions to NO. You can set zero, some, or all to OMIT."
+        },
+        "HlsDefault": {
+          "shape": "HlsDefault",
+          "locationName": "hlsDefault",
+          "documentation": "Specifies whether MediaPackage should set this output as the default rendition in the HLS manifest. YES means this must be the default. NO means this should never be the default. OMIT means MediaPackage decides what to set on this rendition.\nWhen you consider all the renditions, follow these guidelines. You can set zero or one renditions to YES. You can set zero or more renditions to NO, but you can't set all renditions to NO. You can set zero, some, or all to OMIT."
+        }
+      },
+      "documentation": "Media Package V2 Destination Settings"
+    },
+    "MediaPackageV2GroupSettings": {
+      "type": "structure",
+      "members": {
+        "CaptionLanguageMappings": {
+          "shape": "__listOfCaptionLanguageMapping",
+          "locationName": "captionLanguageMappings",
+          "documentation": "Mapping of up to 4 caption channels to caption languages."
+        },
+        "Id3Behavior": {
+          "shape": "CmafId3Behavior",
+          "locationName": "id3Behavior",
+          "documentation": "Set to ENABLED to enable ID3 metadata insertion. To include metadata, you configure other parameters in the output group, or you add an ID3 action to the channel schedule."
+        },
+        "KlvBehavior": {
+          "shape": "CmafKLVBehavior",
+          "locationName": "klvBehavior",
+          "documentation": "If set to passthrough, passes any KLV data from the input source to this output."
+        },
+        "NielsenId3Behavior": {
+          "shape": "CmafNielsenId3Behavior",
+          "locationName": "nielsenId3Behavior",
+          "documentation": "If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output."
+        },
+        "Scte35Type": {
+          "shape": "Scte35Type",
+          "locationName": "scte35Type",
+          "documentation": "Type of scte35 track to add. none or scte35WithoutSegmentation"
+        },
+        "SegmentLength": {
+          "shape": "__integerMin1",
+          "locationName": "segmentLength",
+          "documentation": "The nominal duration of segments. The units are specified in SegmentLengthUnits. The segments will end on the next keyframe after the specified duration, so the actual segment length might be longer, and it might be a fraction of the units."
+        },
+        "SegmentLengthUnits": {
+          "shape": "CmafIngestSegmentLengthUnits",
+          "locationName": "segmentLengthUnits",
+          "documentation": "Time unit for segment length parameter."
+        },
+        "TimedMetadataId3Frame": {
+          "shape": "CmafTimedMetadataId3Frame",
+          "locationName": "timedMetadataId3Frame",
+          "documentation": "Set to none if you don't want to insert a timecode in the output. Otherwise choose the frame type for the timecode."
+        },
+        "TimedMetadataId3Period": {
+          "shape": "__integerMin0Max10000",
+          "locationName": "timedMetadataId3Period",
+          "documentation": "If you set up to insert a timecode in the output, specify the frequency for the frame, in seconds."
+        },
+        "TimedMetadataPassthrough": {
+          "shape": "CmafTimedMetadataPassthrough",
+          "locationName": "timedMetadataPassthrough",
+          "documentation": "Set to enabled to pass through ID3 metadata from the input sources."
+        }
+      },
+      "documentation": "Media Package V2 Group Settings"
+    },
+    "H265GopBReference": {
+      "type": "string",
+      "documentation": "H265 Gop BReference",
+      "enum": [
+        "DISABLED",
+        "ENABLED"
+      ]
+    },
+    "H265SubGopLength": {
+      "type": "string",
+      "documentation": "H265 Sub Gop Length",
+      "enum": [
+        "DYNAMIC",
+        "FIXED"
+      ]
+    },
+    "__integerMin0Max3": {
+      "type": "integer",
+      "min": 0,
+      "max": 3,
+      "documentation": "Placeholder documentation for __integerMin0Max3"
+    },
+    "__integerMin0Max40000000": {
+      "type": "integer",
+      "min": 0,
+      "max": 40000000,
+      "documentation": "Placeholder documentation for __integerMin0Max40000000"
+    },
+    "__integerMin0Max8000000": {
+      "type": "integer",
+      "min": 0,
+      "max": 8000000,
+      "documentation": "Placeholder documentation for __integerMin0Max8000000"
+    },
+    "ChannelAlert": {
+      "type": "structure",
+      "members": {
+        "AlertType": {
+          "shape": "__string",
+          "locationName": "alertType",
+          "documentation": "The type of the alert"
+        },
+        "ClearedTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "clearedTimestamp",
+          "documentation": "The time when the alert was cleared"
+        },
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The unique ID for this alert instance"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "The user facing alert message which can have more context"
+        },
+        "PipelineId": {
+          "shape": "__string",
+          "locationName": "pipelineId",
+          "documentation": "The ID of the pipeline this alert is associated with"
+        },
+        "SetTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "setTimestamp",
+          "documentation": "The time when the alert was set"
+        },
+        "State": {
+          "shape": "ChannelAlertState",
+          "locationName": "state",
+          "documentation": "The state of the alert"
+        }
+      },
+      "documentation": "An alert on a channel"
+    },
+    "ChannelAlertState": {
+      "type": "string",
+      "documentation": "The possible states of a channel alert. SET - The alert is actively happening. CLEARED - The alert is no longer happening.",
+      "enum": [
+        "SET",
+        "CLEARED"
+      ]
+    },
+    "ClusterAlert": {
+      "type": "structure",
+      "members": {
+        "AlertType": {
+          "shape": "__string",
+          "locationName": "alertType",
+          "documentation": "The type of the alert"
+        },
+        "ChannelId": {
+          "shape": "__string",
+          "locationName": "channelId",
+          "documentation": "The ID of the channel this alert is associated with"
+        },
+        "ClearedTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "clearedTimestamp",
+          "documentation": "The time when the alert was cleared"
+        },
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The further subtype of this alert"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "The user facing alert message which can have more context"
+        },
+        "NodeId": {
+          "shape": "__string",
+          "locationName": "nodeId",
+          "documentation": "The ID of the node this alert is associated with"
+        },
+        "SetTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "setTimestamp",
+          "documentation": "The time when the alert was set"
+        },
+        "State": {
+          "shape": "ClusterAlertState",
+          "locationName": "state",
+          "documentation": "The state of the alert"
+        }
+      },
+      "documentation": "An alert on a cluster"
+    },
+    "ClusterAlertState": {
+      "type": "string",
+      "documentation": "The possible states of a cluster alert. SET - The alert is actively happening. CLEARED - The alert is no longer happening.",
+      "enum": [
+        "SET",
+        "CLEARED"
+      ]
+    },
+    "ListAlertsRequest": {
+      "type": "structure",
+      "members": {
+        "ChannelId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "channelId",
+          "documentation": "The unique ID of the channel"
+        },
+        "MaxResults": {
+          "shape": "MaxResults",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "The maximum number of items to return"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "The next pagination token"
+        },
+        "StateFilter": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "stateFilter",
+          "documentation": "Specifies the set of alerts to return based on their state. SET - Return only alerts with SET state. CLEARED - Return only alerts with CLEARED state. ALL - Return all alerts."
+        }
+      },
+      "required": [
+        "ChannelId"
+      ],
+      "documentation": "Placeholder documentation for ListAlertsRequest"
+    },
+    "ListAlertsResponse": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfChannelAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this channel"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "Placeholder documentation for ListAlertsResponse"
+    },
+    "ListAlertsResultModel": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfChannelAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this channel"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "The result of a successful ListAlerts request"
+    },
+    "ListClusterAlertsRequest": {
+      "type": "structure",
+      "members": {
+        "ClusterId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "clusterId",
+          "documentation": "The unique ID of the cluster"
+        },
+        "MaxResults": {
+          "shape": "MaxResults",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "The maximum number of items to return"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "The next pagination token"
+        },
+        "StateFilter": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "stateFilter",
+          "documentation": "Specifies the set of alerts to return based on their state. SET - Return only alerts with SET state. CLEARED - Return only alerts with CLEARED state. ALL - Return all alerts."
+        }
+      },
+      "required": [
+        "ClusterId"
+      ],
+      "documentation": "Placeholder documentation for ListClusterAlertsRequest"
+    },
+    "ListClusterAlertsResponse": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfClusterAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this cluster"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "Placeholder documentation for ListClusterAlertsResponse"
+    },
+    "ListClusterAlertsResultModel": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfClusterAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this cluster"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "The result of a successful ListClusterAlerts request"
+    },
+    "ListMultiplexAlertsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxResults": {
+          "shape": "MaxResults",
+          "location": "querystring",
+          "locationName": "maxResults",
+          "documentation": "The maximum number of items to return"
+        },
+        "MultiplexId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "multiplexId",
+          "documentation": "The unique ID of the multiplex"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "The next pagination token"
+        },
+        "StateFilter": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "stateFilter",
+          "documentation": "Specifies the set of alerts to return based on their state. SET - Return only alerts with SET state. CLEARED - Return only alerts with CLEARED state. ALL - Return all alerts."
+        }
+      },
+      "required": [
+        "MultiplexId"
+      ],
+      "documentation": "Placeholder documentation for ListMultiplexAlertsRequest"
+    },
+    "ListMultiplexAlertsResponse": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfMultiplexAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this multiplex"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "Placeholder documentation for ListMultiplexAlertsResponse"
+    },
+    "ListMultiplexAlertsResultModel": {
+      "type": "structure",
+      "members": {
+        "Alerts": {
+          "shape": "__listOfMultiplexAlert",
+          "locationName": "alerts",
+          "documentation": "The alerts found for this multiplex"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "The token to use to retrieve the next page of results"
+        }
+      },
+      "documentation": "The result of a successful ListMultiplexAlerts request."
+    },
+    "MultiplexAlert": {
+      "type": "structure",
+      "members": {
+        "AlertType": {
+          "shape": "__string",
+          "locationName": "alertType",
+          "documentation": "The type of the alert"
+        },
+        "ClearedTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "clearedTimestamp",
+          "documentation": "The time when the alert was cleared"
+        },
+        "Id": {
+          "shape": "__string",
+          "locationName": "id",
+          "documentation": "The unique ID for this alert instance"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "The user facing alert message which can have more context"
+        },
+        "PipelineId": {
+          "shape": "__string",
+          "locationName": "pipelineId",
+          "documentation": "The ID of the pipeline this alert is associated with"
+        },
+        "SetTimestamp": {
+          "shape": "__timestampIso8601",
+          "locationName": "setTimestamp",
+          "documentation": "The time when the alert was set"
+        },
+        "State": {
+          "shape": "MultiplexAlertState",
+          "locationName": "state",
+          "documentation": "The state of the alert"
+        }
+      },
+      "documentation": "An alert on a multiplex"
+    },
+    "MultiplexAlertState": {
+      "type": "string",
+      "documentation": "The possible states of a multiplex alert. SET - The alert is actively happening. CLEARED - The alert is no longer happening.",
+      "enum": [
+        "SET",
+        "CLEARED"
+      ]
+    },
+    "__listOfChannelAlert": {
+      "type": "list",
+      "member": {
+        "shape": "ChannelAlert"
+      },
+      "documentation": "Placeholder documentation for __listOfChannelAlert"
+    },
+    "__listOfClusterAlert": {
+      "type": "list",
+      "member": {
+        "shape": "ClusterAlert"
+      },
+      "documentation": "Placeholder documentation for __listOfClusterAlert"
+    },
+    "__listOfMultiplexAlert": {
+      "type": "list",
+      "member": {
+        "shape": "MultiplexAlert"
+      },
+      "documentation": "Placeholder documentation for __listOfMultiplexAlert"
     }
   },
   "documentation": "API for AWS Elemental MediaLive"
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackage/2017-10-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackage/2017-10-12/service-2.json 2.31.35-1/awscli/botocore/data/mediapackage/2017-10-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediapackage/2017-10-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackage/2017-10-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,10 @@
     "serviceId": "MediaPackage",
     "signatureVersion": "v4",
     "signingName": "mediapackage",
-    "uid": "mediapackage-2017-10-12"
+    "uid": "mediapackage-2017-10-12",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
   "operations": {
     "ConfigureLogs": {
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackage-vod/2018-11-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackage-vod/2018-11-07/service-2.json 2.31.35-1/awscli/botocore/data/mediapackage-vod/2018-11-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediapackage-vod/2018-11-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackage-vod/2018-11-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,10 @@
     "serviceId": "MediaPackage Vod",
     "signatureVersion": "v4",
     "signingName": "mediapackage-vod",
-    "uid": "mediapackage-vod-2018-11-07"
+    "uid": "mediapackage-vod-2018-11-07",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
   "operations": {
     "ConfigureLogs": {
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackagev2/2022-12-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json 2.31.35-1/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediapackagev2/2022-12-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,10 +24,10 @@
       "input":{"shape":"CancelHarvestJobRequest"},
       "output":{"shape":"CancelHarvestJobResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -44,10 +44,10 @@
       "input":{"shape":"CreateChannelRequest"},
       "output":{"shape":"CreateChannelResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -65,10 +65,10 @@
       "input":{"shape":"CreateChannelGroupRequest"},
       "output":{"shape":"CreateChannelGroupResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -86,10 +86,10 @@
       "input":{"shape":"CreateHarvestJobRequest"},
       "output":{"shape":"CreateHarvestJobResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -107,10 +107,10 @@
       "input":{"shape":"CreateOriginEndpointRequest"},
       "output":{"shape":"CreateOriginEndpointResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -128,10 +128,10 @@
       "input":{"shape":"DeleteChannelRequest"},
       "output":{"shape":"DeleteChannelResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Delete a channel to stop AWS Elemental MediaPackage from receiving further content. You must delete the channel's origin endpoints before you can delete the channel.</p>",
@@ -147,10 +147,10 @@
       "input":{"shape":"DeleteChannelGroupRequest"},
       "output":{"shape":"DeleteChannelGroupResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Delete a channel group. You must delete the channel group's channels and origin endpoints before you can delete the channel group. If you delete a channel group, you'll lose access to the egress domain and will have to create a new channel group to replace it.</p>",
@@ -166,10 +166,10 @@
       "input":{"shape":"DeleteChannelPolicyRequest"},
       "output":{"shape":"DeleteChannelPolicyResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Delete a channel policy.</p>",
@@ -186,8 +186,8 @@
       "output":{"shape":"DeleteOriginEndpointResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Origin endpoints can serve content until they're deleted. Delete the endpoint if it should no longer respond to playback requests. You must delete all endpoints from a channel before you can delete the channel.</p>",
@@ -203,10 +203,10 @@
       "input":{"shape":"DeleteOriginEndpointPolicyRequest"},
       "output":{"shape":"DeleteOriginEndpointPolicyResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Delete an origin endpoint policy.</p>",
@@ -223,12 +223,12 @@
       "output":{"shape":"GetChannelResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the specified channel that's configured in AWS Elemental MediaPackage, including the origin endpoints that are associated with it.</p>"
+      "documentation":"<p>Retrieves the specified channel that's configured in AWS Elemental MediaPackage.</p>"
     },
     "GetChannelGroup":{
       "name":"GetChannelGroup",
@@ -241,12 +241,12 @@
       "output":{"shape":"GetChannelGroupResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves the specified channel group that's configured in AWS Elemental MediaPackage, including the channels and origin endpoints that are associated with it.</p>"
+      "documentation":"<p>Retrieves the specified channel group that's configured in AWS Elemental MediaPackage.</p>"
     },
     "GetChannelPolicy":{
       "name":"GetChannelPolicy",
@@ -259,8 +259,8 @@
       "output":{"shape":"GetChannelPolicyResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -277,8 +277,8 @@
       "output":{"shape":"GetHarvestJobResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -295,8 +295,8 @@
       "output":{"shape":"GetOriginEndpointResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -313,8 +313,8 @@
       "output":{"shape":"GetOriginEndpointPolicyResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -331,11 +331,11 @@
       "output":{"shape":"ListChannelGroupsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves all channel groups that are configured in AWS Elemental MediaPackage, including the channels and origin endpoints that are associated with it.</p>"
+      "documentation":"<p>Retrieves all channel groups that are configured in Elemental MediaPackage.</p>"
     },
     "ListChannels":{
       "name":"ListChannels",
@@ -348,12 +348,12 @@
       "output":{"shape":"ListChannelsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Retrieves all channels in a specific channel group that are configured in AWS Elemental MediaPackage, including the origin endpoints that are associated with it.</p>"
+      "documentation":"<p>Retrieves all channels in a specific channel group that are configured in AWS Elemental MediaPackage.</p>"
     },
     "ListHarvestJobs":{
       "name":"ListHarvestJobs",
@@ -366,8 +366,8 @@
       "output":{"shape":"ListHarvestJobsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -384,8 +384,8 @@
       "output":{"shape":"ListOriginEndpointsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -415,10 +415,10 @@
       "input":{"shape":"PutChannelPolicyRequest"},
       "output":{"shape":"PutChannelPolicyResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -435,14 +435,54 @@
       "input":{"shape":"PutOriginEndpointPolicyRequest"},
       "output":{"shape":"PutOriginEndpointPolicyResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Attaches an IAM policy to the specified origin endpoint. You can attach only one policy with each request.</p>",
+      "idempotent":true
+    },
+    "ResetChannelState":{
+      "name":"ResetChannelState",
+      "http":{
+        "method":"POST",
+        "requestUri":"/channelGroup/{ChannelGroupName}/channel/{ChannelName}/reset",
+        "responseCode":200
+      },
+      "input":{"shape":"ResetChannelStateRequest"},
+      "output":{"shape":"ResetChannelStateResponse"},
+      "errors":[
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Resetting the channel can help to clear errors from misconfigurations in the encoder. A reset refreshes the ingest stream and removes previous content. </p> <p> Be sure to stop the encoder before you reset the channel, and wait at least 30 seconds before you restart the encoder. </p>",
+      "idempotent":true
+    },
+    "ResetOriginEndpointState":{
+      "name":"ResetOriginEndpointState",
+      "http":{
+        "method":"POST",
+        "requestUri":"/channelGroup/{ChannelGroupName}/channel/{ChannelName}/originEndpoint/{OriginEndpointName}/reset",
+        "responseCode":200
+      },
+      "input":{"shape":"ResetOriginEndpointStateRequest"},
+      "output":{"shape":"ResetOriginEndpointStateResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Attaches an IAM policy to the specified origin endpoint. You can attach only one policy with each request.</p>",
+      "documentation":"<p>Resetting the origin endpoint can help to resolve unexpected behavior and other content packaging issues. It also helps to preserve special events when you don't want the previous content to be available for viewing. A reset clears out all previous content from the origin endpoint.</p> <p>MediaPackage might return old content from this endpoint in the first 30 seconds after the endpoint reset. For best results, when possible, wait 30 seconds from endpoint reset to send playback requests to this endpoint. </p>",
       "idempotent":true
     },
     "TagResource":{
@@ -482,10 +522,10 @@
       "input":{"shape":"UpdateChannelRequest"},
       "output":{"shape":"UpdateChannelResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -502,10 +542,10 @@
       "input":{"shape":"UpdateChannelGroupRequest"},
       "output":{"shape":"UpdateChannelGroupResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -522,10 +562,10 @@
       "input":{"shape":"UpdateOriginEndpointRequest"},
       "output":{"shape":"UpdateOriginEndpointResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -540,7 +580,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see Access Management in the IAM User Guide.</p>",
+      "documentation":"<p>Access is denied because either you don't have permissions to perform the requested operation or MediaPackage is getting throttling errors with CDN authorization. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see Access Management in the IAM User Guide. Or, if you're using CDN authorization, you will receive this exception if MediaPackage receives a throttling error from Secrets Manager.</p>",
       "error":{
         "httpStatusCode":403,
         "senderFault":true
@@ -556,7 +596,10 @@
     },
     "AdMarkerHls":{
       "type":"string",
-      "enum":["DATERANGE"]
+      "enum":[
+        "DATERANGE",
+        "SCTE35_ENHANCED"
+      ]
     },
     "Boolean":{
       "type":"boolean",
@@ -605,8 +648,40 @@
     },
     "CancelHarvestJobResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "CdnAuthConfiguration":{
+      "type":"structure",
+      "required":[
+        "CdnIdentifierSecretArns",
+        "SecretsRoleArn"
+      ],
       "members":{
-      }
+        "CdnIdentifierSecretArns":{
+          "shape":"CdnAuthConfigurationCdnIdentifierSecretArnsList",
+          "documentation":"<p>The ARN for the secret in Secrets Manager that your CDN uses for authorization to access the endpoint.</p>"
+        },
+        "SecretsRoleArn":{
+          "shape":"CdnAuthConfigurationSecretsRoleArnString",
+          "documentation":"<p>The ARN for the IAM role that gives MediaPackage read access to Secrets Manager and KMS for CDN authorization.</p>"
+        }
+      },
+      "documentation":"<p>The settings to enable CDN authorization headers in MediaPackage.</p>"
+    },
+    "CdnAuthConfigurationCdnIdentifierSecretArnsList":{
+      "type":"list",
+      "member":{"shape":"CdnIdentifierSecretArn"},
+      "min":1
+    },
+    "CdnAuthConfigurationSecretsRoleArnString":{
+      "type":"string",
+      "max":2048,
+      "min":20
+    },
+    "CdnIdentifierSecretArn":{
+      "type":"string",
+      "max":2048,
+      "min":20
     },
     "ChannelGroupListConfiguration":{
       "type":"structure",
@@ -725,7 +800,8 @@
       "type":"string",
       "enum":[
         "TS",
-        "CMAF"
+        "CMAF",
+        "ISM"
       ]
     },
     "CreateChannelGroupRequest":{
@@ -946,6 +1022,30 @@
         "UtcTiming":{
           "shape":"DashUtcTiming",
           "documentation":"<p>Determines the type of UTC timing included in the DASH Media Presentation Description (MPD).</p>"
+        },
+        "Profiles":{
+          "shape":"DashProfiles",
+          "documentation":"<p>The profile that the output is compliant with.</p>"
+        },
+        "BaseUrls":{
+          "shape":"DashBaseUrls",
+          "documentation":"<p>The base URLs to use for retrieving segments.</p>"
+        },
+        "ProgramInformation":{
+          "shape":"DashProgramInformation",
+          "documentation":"<p>Details about the content that you want MediaPackage to pass through in the manifest to the playback device.</p>"
+        },
+        "DvbSettings":{
+          "shape":"DashDvbSettings",
+          "documentation":"<p>For endpoints that use the DVB-DASH profile only. The font download and error reporting information that you want MediaPackage to pass through to the manifest.</p>"
+        },
+        "Compactness":{
+          "shape":"DashCompactness",
+          "documentation":"<p>The layout of the DASH manifest that MediaPackage produces. <code>STANDARD</code> indicates a default manifest, which is compacted. <code>NONE</code> indicates a full manifest.</p> <p>For information about compactness, see <a href=\"https://docs.aws.amazon.com/mediapackage/latest/userguide/compacted.html\">DASH manifest compactness</a> in the <i>Elemental MediaPackage v2 User Guide</i>.</p>"
+        },
+        "SubtitleConfiguration":{
+          "shape":"DashSubtitleConfiguration",
+          "documentation":"<p>The configuration for DASH subtitles.</p>"
         }
       },
       "documentation":"<p>Create a DASH manifest configuration.</p>"
@@ -1141,7 +1241,11 @@
           "shape":"CreateHlsManifestConfigurationProgramDateTimeIntervalSecondsInteger",
           "documentation":"<p>Inserts EXT-X-PROGRAM-DATE-TIME tags in the output manifest at the interval that you specify. If you don't enter an interval, EXT-X-PROGRAM-DATE-TIME tags aren't included in the manifest. The tags sync the stream to the wall clock so that viewers can seek to a specific time in the playback timeline on the player.</p> <p>Irrespective of this parameter, if any ID3Timed metadata is in the HLS input, it is passed through to the HLS output.</p>"
         },
-        "FilterConfiguration":{"shape":"FilterConfiguration"}
+        "FilterConfiguration":{"shape":"FilterConfiguration"},
+        "UrlEncodeChildManifest":{
+          "shape":"Boolean",
+          "documentation":"<p>When enabled, MediaPackage URL-encodes the query string for API requests for HLS child manifests to comply with Amazon Web Services Signature Version 4 (SigV4) signature signing protocol. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html\">Amazon Web Services Signature Version 4 for API requests</a> in <i>Identity and Access Management User Guide</i>.</p>"
+        }
       },
       "documentation":"<p>Create an HTTP live streaming (HLS) manifest configuration.</p>"
     },
@@ -1182,7 +1286,11 @@
           "shape":"CreateLowLatencyHlsManifestConfigurationProgramDateTimeIntervalSecondsInteger",
           "documentation":"<p>Inserts EXT-X-PROGRAM-DATE-TIME tags in the output manifest at the interval that you specify. If you don't enter an interval, EXT-X-PROGRAM-DATE-TIME tags aren't included in the manifest. The tags sync the stream to the wall clock so that viewers can seek to a specific time in the playback timeline on the player.</p> <p>Irrespective of this parameter, if any ID3Timed metadata is in the HLS input, it is passed through to the HLS output.</p>"
         },
-        "FilterConfiguration":{"shape":"FilterConfiguration"}
+        "FilterConfiguration":{"shape":"FilterConfiguration"},
+        "UrlEncodeChildManifest":{
+          "shape":"Boolean",
+          "documentation":"<p>When enabled, MediaPackage URL-encodes the query string for API requests for LL-HLS child manifests to comply with Amazon Web Services Signature Version 4 (SigV4) signature signing protocol. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html\">Amazon Web Services Signature Version 4 for API requests</a> in <i>Identity and Access Management User Guide</i>.</p>"
+        }
       },
       "documentation":"<p>Create a low-latency HTTP live streaming (HLS) manifest configuration.</p>"
     },
@@ -1201,6 +1309,35 @@
       "type":"list",
       "member":{"shape":"CreateLowLatencyHlsManifestConfiguration"}
     },
+    "CreateMssManifestConfiguration":{
+      "type":"structure",
+      "required":["ManifestName"],
+      "members":{
+        "ManifestName":{
+          "shape":"ManifestName",
+          "documentation":"<p>A short string that's appended to the endpoint URL to create a unique path to this MSS manifest. The manifest name must be unique within the origin endpoint and can contain letters, numbers, hyphens, and underscores.</p>"
+        },
+        "ManifestWindowSeconds":{
+          "shape":"CreateMssManifestConfigurationManifestWindowSecondsInteger",
+          "documentation":"<p>The total duration (in seconds) of the manifest window. This determines how much content is available in the manifest at any given time. The manifest window slides forward as new segments become available, maintaining a consistent duration of content. The minimum value is 30 seconds.</p>"
+        },
+        "FilterConfiguration":{"shape":"FilterConfiguration"},
+        "ManifestLayout":{
+          "shape":"MssManifestLayout",
+          "documentation":"<p>Determines the layout format of the MSS manifest. This controls how the manifest is structured and presented to client players, affecting compatibility with different MSS-compatible devices and applications.</p>"
+        }
+      },
+      "documentation":"<p>Configuration parameters for creating a Microsoft Smooth Streaming (MSS) manifest. MSS is a streaming media format developed by Microsoft that delivers adaptive bitrate streaming content to compatible players and devices.</p>"
+    },
+    "CreateMssManifestConfigurationManifestWindowSecondsInteger":{
+      "type":"integer",
+      "box":true,
+      "min":30
+    },
+    "CreateMssManifests":{
+      "type":"list",
+      "member":{"shape":"CreateMssManifestConfiguration"}
+    },
     "CreateOriginEndpointRequest":{
       "type":"structure",
       "required":[
@@ -1261,6 +1398,10 @@
           "shape":"CreateDashManifests",
           "documentation":"<p>A DASH manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"CreateMssManifests",
+          "documentation":"<p>A list of Microsoft Smooth Streaming (MSS) manifest configurations for the origin endpoint. You can configure multiple MSS manifests to provide different streaming experiences or to support different client requirements.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -1342,6 +1483,10 @@
           "shape":"GetDashManifests",
           "documentation":"<p>A DASH manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"GetMssManifests",
+          "documentation":"<p>The Microsoft Smooth Streaming (MSS) manifest configurations that were created for this origin endpoint.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -1356,6 +1501,64 @@
         }
       }
     },
+    "DashBaseUrl":{
+      "type":"structure",
+      "required":["Url"],
+      "members":{
+        "Url":{
+          "shape":"DashBaseUrlUrlString",
+          "documentation":"<p>A source location for segments.</p>"
+        },
+        "ServiceLocation":{
+          "shape":"DashBaseUrlServiceLocationString",
+          "documentation":"<p>The name of the source location.</p>"
+        },
+        "DvbPriority":{
+          "shape":"DashBaseUrlDvbPriorityInteger",
+          "documentation":"<p>For use with DVB-DASH profiles only. The priority of this location for servings segments. The lower the number, the higher the priority.</p>"
+        },
+        "DvbWeight":{
+          "shape":"DashBaseUrlDvbWeightInteger",
+          "documentation":"<p>For use with DVB-DASH profiles only. The weighting for source locations that have the same priority. </p>"
+        }
+      },
+      "documentation":"<p>The base URLs to use for retrieving segments. You can specify multiple locations and indicate the priority and weight for when each should be used, for use in mutli-CDN workflows.</p>"
+    },
+    "DashBaseUrlDvbPriorityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":15000,
+      "min":1
+    },
+    "DashBaseUrlDvbWeightInteger":{
+      "type":"integer",
+      "box":true,
+      "max":15000,
+      "min":1
+    },
+    "DashBaseUrlServiceLocationString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashBaseUrlUrlString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashBaseUrls":{
+      "type":"list",
+      "member":{"shape":"DashBaseUrl"},
+      "max":20,
+      "min":0
+    },
+    "DashCompactness":{
+      "type":"string",
+      "enum":[
+        "STANDARD",
+        "NONE"
+      ]
+    },
     "DashDrmSignaling":{
       "type":"string",
       "enum":[
@@ -1363,6 +1566,86 @@
         "REFERENCED"
       ]
     },
+    "DashDvbErrorMetrics":{
+      "type":"list",
+      "member":{"shape":"DashDvbMetricsReporting"},
+      "max":20,
+      "min":0
+    },
+    "DashDvbFontDownload":{
+      "type":"structure",
+      "members":{
+        "Url":{
+          "shape":"DashDvbFontDownloadUrlString",
+          "documentation":"<p>The URL for downloading fonts for subtitles.</p>"
+        },
+        "MimeType":{
+          "shape":"DashDvbFontDownloadMimeTypeString",
+          "documentation":"<p>The <code>mimeType</code> of the resource that's at the font download URL.</p> <p>For information about font MIME types, see the <a href=\"https://dvb.org/wp-content/uploads/2021/06/A168r4_MPEG-DASH-Profile-for-Transport-of-ISO-BMFF-Based-DVB-Services_Draft-ts_103-285-v140_November_2021.pdf\">MPEG-DASH Profile for Transport of ISO BMFF Based DVB Services over IP Based Networks</a> document. </p>"
+        },
+        "FontFamily":{
+          "shape":"DashDvbFontDownloadFontFamilyString",
+          "documentation":"<p>The <code>fontFamily</code> name for subtitles, as described in <a href=\"https://tech.ebu.ch/publications/tech3380\">EBU-TT-D Subtitling Distribution Format</a>. </p>"
+        }
+      },
+      "documentation":"<p>For use with DVB-DASH profiles only. The settings for font downloads that you want Elemental MediaPackage to pass through to the manifest.</p>"
+    },
+    "DashDvbFontDownloadFontFamilyString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "DashDvbFontDownloadMimeTypeString":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_/-]*[a-zA-Z0-9]"
+    },
+    "DashDvbFontDownloadUrlString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashDvbMetricsReporting":{
+      "type":"structure",
+      "required":["ReportingUrl"],
+      "members":{
+        "ReportingUrl":{
+          "shape":"DashDvbMetricsReportingReportingUrlString",
+          "documentation":"<p>The URL where playback devices send error reports.</p>"
+        },
+        "Probability":{
+          "shape":"DashDvbMetricsReportingProbabilityInteger",
+          "documentation":"<p>The number of playback devices per 1000 that will send error reports to the reporting URL. This represents the probability that a playback device will be a reporting player for this session.</p>"
+        }
+      },
+      "documentation":"<p>For use with DVB-DASH profiles only. The settings for error reporting from the playback device that you want Elemental MediaPackage to pass through to the manifest.</p>"
+    },
+    "DashDvbMetricsReportingProbabilityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "DashDvbMetricsReportingReportingUrlString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashDvbSettings":{
+      "type":"structure",
+      "members":{
+        "FontDownload":{
+          "shape":"DashDvbFontDownload",
+          "documentation":"<p>Subtitle font settings.</p>"
+        },
+        "ErrorMetrics":{
+          "shape":"DashDvbErrorMetrics",
+          "documentation":"<p>Playback device error reporting settings.</p>"
+        }
+      },
+      "documentation":"<p>For endpoints that use the DVB-DASH profile only. The font download and error reporting information that you want MediaPackage to pass through to the manifest.</p>"
+    },
     "DashPeriodTrigger":{
       "type":"string",
       "enum":[
@@ -1379,10 +1662,100 @@
       "max":100,
       "min":0
     },
+    "DashProfile":{
+      "type":"string",
+      "enum":["DVB_DASH"]
+    },
+    "DashProfiles":{
+      "type":"list",
+      "member":{"shape":"DashProfile"},
+      "max":5,
+      "min":0
+    },
+    "DashProgramInformation":{
+      "type":"structure",
+      "members":{
+        "Title":{
+          "shape":"DashProgramInformationTitleString",
+          "documentation":"<p>The title for the manifest.</p>"
+        },
+        "Source":{
+          "shape":"DashProgramInformationSourceString",
+          "documentation":"<p>Information about the content provider.</p>"
+        },
+        "Copyright":{
+          "shape":"DashProgramInformationCopyrightString",
+          "documentation":"<p>A copyright statement about the content.</p>"
+        },
+        "LanguageCode":{
+          "shape":"DashProgramInformationLanguageCodeString",
+          "documentation":"<p>The language code for this manifest.</p>"
+        },
+        "MoreInformationUrl":{
+          "shape":"DashProgramInformationMoreInformationUrlString",
+          "documentation":"<p>An absolute URL that contains more information about this content.</p>"
+        }
+      },
+      "documentation":"<p>Details about the content that you want MediaPackage to pass through in the manifest to the playback device.</p>"
+    },
+    "DashProgramInformationCopyrightString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashProgramInformationLanguageCodeString":{
+      "type":"string",
+      "max":5,
+      "min":2,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]"
+    },
+    "DashProgramInformationMoreInformationUrlString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashProgramInformationSourceString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DashProgramInformationTitleString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
     "DashSegmentTemplateFormat":{
       "type":"string",
       "enum":["NUMBER_WITH_TIMELINE"]
     },
+    "DashSubtitleConfiguration":{
+      "type":"structure",
+      "members":{
+        "TtmlConfiguration":{
+          "shape":"DashTtmlConfiguration",
+          "documentation":"<p>Settings for TTML subtitles.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for DASH subtitles.</p>"
+    },
+    "DashTtmlConfiguration":{
+      "type":"structure",
+      "required":["TtmlProfile"],
+      "members":{
+        "TtmlProfile":{
+          "shape":"DashTtmlProfile",
+          "documentation":"<p>The profile that MediaPackage uses when signaling subtitles in the manifest. <code>IMSC</code> is the default profile. <code>EBU-TT-D</code> produces subtitles that are compliant with the EBU-TT-D TTML profile. MediaPackage passes through subtitle styles to the manifest. For more information about EBU-TT-D subtitles, see <a href=\"https://tech.ebu.ch/publications/tech3380\">EBU-TT-D Subtitling Distribution Format</a>.</p>"
+        }
+      },
+      "documentation":"<p>The settings for TTML subtitles.</p>"
+    },
+    "DashTtmlProfile":{
+      "type":"string",
+      "enum":[
+        "IMSC_1",
+        "EBU_TT_D_101"
+      ]
+    },
     "DashUtcTiming":{
       "type":"structure",
       "members":{
@@ -1425,8 +1798,7 @@
     },
     "DeleteChannelGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteChannelPolicyRequest":{
       "type":"structure",
@@ -1451,8 +1823,7 @@
     },
     "DeleteChannelPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteChannelRequest":{
       "type":"structure",
@@ -1477,8 +1848,7 @@
     },
     "DeleteChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOriginEndpointPolicyRequest":{
       "type":"structure",
@@ -1510,8 +1880,7 @@
     },
     "DeleteOriginEndpointPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOriginEndpointRequest":{
       "type":"structure",
@@ -1543,8 +1912,7 @@
     },
     "DeleteOriginEndpointResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Destination":{
       "type":"structure",
@@ -1586,6 +1954,10 @@
           "shape":"EncryptionKeyRotationIntervalSecondsInteger",
           "documentation":"<p>The frequency (in seconds) of key changes for live workflows, in which content is streamed real time. The service retrieves content keys before the live content begins streaming, and then retrieves them as needed over the lifetime of the workflow. By default, key rotation is set to 300 seconds (5 minutes), the minimum rotation interval, which is equivalent to setting it to 300. If you don't enter an interval, content keys aren't rotated.</p> <p>The following example setting causes the service to rotate keys every thirty minutes: <code>1800</code> </p>"
         },
+        "CmafExcludeSegmentDrmMetadata":{
+          "shape":"Boolean",
+          "documentation":"<p>Excludes SEIG and SGPD boxes from segment metadata in CMAF containers.</p> <p>When set to <code>true</code>, MediaPackage omits these DRM metadata boxes from CMAF segments, which can improve compatibility with certain devices and players that don't support these boxes.</p> <p>Important considerations:</p> <ul> <li> <p>This setting only affects CMAF container formats</p> </li> <li> <p>Key rotation can still be handled through media playlist signaling</p> </li> <li> <p>PSSH and TENC boxes remain unaffected</p> </li> <li> <p>Default behavior is preserved when this setting is disabled</p> </li> </ul> <p>Valid values: <code>true</code> | <code>false</code> </p> <p>Default: <code>false</code> </p>"
+        },
         "SpekeKeyProvider":{
           "shape":"SpekeKeyProvider",
           "documentation":"<p>The parameters for the SPEKE key provider.</p>"
@@ -1633,6 +2005,10 @@
         "CmafEncryptionMethod":{
           "shape":"CmafEncryptionMethod",
           "documentation":"<p>The encryption method to use.</p>"
+        },
+        "IsmEncryptionMethod":{
+          "shape":"IsmEncryptionMethod",
+          "documentation":"<p>The encryption method used for Microsoft Smooth Streaming (MSS) content. This specifies how the MSS segments are encrypted to protect the content during delivery to client players.</p>"
         }
       },
       "documentation":"<p>The encryption type.</p>"
@@ -1858,6 +2234,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The date and time the channel was modified.</p>"
         },
+        "ResetAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time that the channel was last reset.</p>"
+        },
         "Description":{
           "shape":"ResourceDescription",
           "documentation":"<p>The description for your channel.</p>"
@@ -1936,6 +2316,30 @@
         "UtcTiming":{
           "shape":"DashUtcTiming",
           "documentation":"<p>Determines the type of UTC timing included in the DASH Media Presentation Description (MPD).</p>"
+        },
+        "Profiles":{
+          "shape":"DashProfiles",
+          "documentation":"<p>The profile that the output is compliant with.</p>"
+        },
+        "BaseUrls":{
+          "shape":"DashBaseUrls",
+          "documentation":"<p>The base URL to use for retrieving segments.</p>"
+        },
+        "ProgramInformation":{
+          "shape":"DashProgramInformation",
+          "documentation":"<p>Details about the content that you want MediaPackage to pass through in the manifest to the playback device.</p>"
+        },
+        "DvbSettings":{
+          "shape":"DashDvbSettings",
+          "documentation":"<p>For endpoints that use the DVB-DASH profile only. The font download and error reporting information that you want MediaPackage to pass through to the manifest.</p>"
+        },
+        "Compactness":{
+          "shape":"DashCompactness",
+          "documentation":"<p>The layout of the DASH manifest that MediaPackage produces. <code>STANDARD</code> indicates a default manifest, which is compacted. <code>NONE</code> indicates a full manifest.</p>"
+        },
+        "SubtitleConfiguration":{
+          "shape":"DashSubtitleConfiguration",
+          "documentation":"<p>The configuration for DASH subtitles.</p>"
         }
       },
       "documentation":"<p>Retrieve the DASH manifest configuration.</p>"
@@ -2088,7 +2492,11 @@
         },
         "ScteHls":{"shape":"ScteHls"},
         "FilterConfiguration":{"shape":"FilterConfiguration"},
-        "StartTag":{"shape":"StartTag"}
+        "StartTag":{"shape":"StartTag"},
+        "UrlEncodeChildManifest":{
+          "shape":"Boolean",
+          "documentation":"<p>When enabled, MediaPackage URL-encodes the query string for API requests for HLS child manifests to comply with Amazon Web Services Signature Version 4 (SigV4) signature signing protocol. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html\">Amazon Web Services Signature Version 4 for API requests</a> in <i>Identity and Access Management User Guide</i>.</p>"
+        }
       },
       "documentation":"<p>Retrieve the HTTP live streaming (HLS) manifest configuration.</p>"
     },
@@ -2125,7 +2533,11 @@
         },
         "ScteHls":{"shape":"ScteHls"},
         "FilterConfiguration":{"shape":"FilterConfiguration"},
-        "StartTag":{"shape":"StartTag"}
+        "StartTag":{"shape":"StartTag"},
+        "UrlEncodeChildManifest":{
+          "shape":"Boolean",
+          "documentation":"<p>When enabled, MediaPackage URL-encodes the query string for API requests for LL-HLS child manifests to comply with Amazon Web Services Signature Version 4 (SigV4) signature signing protocol. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html\">Amazon Web Services Signature Version 4 for API requests</a> in <i>Identity and Access Management User Guide</i>.</p>"
+        }
       },
       "documentation":"<p>Retrieve the low-latency HTTP live streaming (HLS) manifest configuration.</p>"
     },
@@ -2133,6 +2545,37 @@
       "type":"list",
       "member":{"shape":"GetLowLatencyHlsManifestConfiguration"}
     },
+    "GetMssManifestConfiguration":{
+      "type":"structure",
+      "required":[
+        "ManifestName",
+        "Url"
+      ],
+      "members":{
+        "ManifestName":{
+          "shape":"ManifestName",
+          "documentation":"<p>The name of the MSS manifest. This name is appended to the origin endpoint URL to create the unique path for accessing this specific MSS manifest.</p>"
+        },
+        "Url":{
+          "shape":"String",
+          "documentation":"<p>The complete URL for accessing the MSS manifest. Client players use this URL to retrieve the manifest and begin streaming the Microsoft Smooth Streaming content.</p>"
+        },
+        "FilterConfiguration":{"shape":"FilterConfiguration"},
+        "ManifestWindowSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>The duration (in seconds) of the manifest window. This represents the total amount of content available in the manifest at any given time.</p>"
+        },
+        "ManifestLayout":{
+          "shape":"MssManifestLayout",
+          "documentation":"<p>The layout format of the MSS manifest, which determines how the manifest is structured for client compatibility.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for a Microsoft Smooth Streaming (MSS) manifest associated with an origin endpoint. This includes all the settings and properties that define how the MSS content is packaged and delivered.</p>"
+    },
+    "GetMssManifests":{
+      "type":"list",
+      "member":{"shape":"GetMssManifestConfiguration"}
+    },
     "GetOriginEndpointPolicyRequest":{
       "type":"structure",
       "required":[
@@ -2185,6 +2628,10 @@
         "Policy":{
           "shape":"PolicyText",
           "documentation":"<p>The policy assigned to the origin endpoint.</p>"
+        },
+        "CdnAuthConfiguration":{
+          "shape":"CdnAuthConfiguration",
+          "documentation":"<p>The settings for using authorization headers between the MediaPackage endpoint and your CDN. </p> <p>For information about CDN authorization, see <a href=\"https://docs.aws.amazon.com/mediapackage/latest/userguide/cdn-auth.html\">CDN authorization in Elemental MediaPackage</a> in the MediaPackage user guide.</p>"
         }
       }
     },
@@ -2258,6 +2705,10 @@
           "shape":"Timestamp",
           "documentation":"<p>The date and time the origin endpoint was modified.</p>"
         },
+        "ResetAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time that the origin endpoint was last reset.</p>"
+        },
         "Description":{
           "shape":"ResourceDescription",
           "documentation":"<p>The description for your origin endpoint.</p>"
@@ -2278,6 +2729,10 @@
           "shape":"GetDashManifests",
           "documentation":"<p>A DASH manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"GetMssManifests",
+          "documentation":"<p>The Microsoft Smooth Streaming (MSS) manifest configurations associated with this origin endpoint.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -2493,10 +2948,20 @@
         "MQCSInputSwitching":{
           "shape":"Boolean",
           "documentation":"<p>When true, AWS Elemental MediaPackage performs input switching based on the MQCS. Default is true. This setting is valid only when <code>InputType</code> is <code>CMAF</code>.</p>"
+        },
+        "PreferredInput":{
+          "shape":"InputSwitchConfigurationPreferredInputInteger",
+          "documentation":"<p>For CMAF inputs, indicates which input MediaPackage should prefer when both inputs have equal MQCS scores. Select <code>1</code> to prefer the first ingest endpoint, or <code>2</code> to prefer the second ingest endpoint. If you don't specify a preferred input, MediaPackage uses its default switching behavior when MQCS scores are equal.</p>"
         }
       },
       "documentation":"<p>The configuration for input switching based on the media quality confidence score (MQCS) as provided from AWS Elemental MediaLive.</p>"
     },
+    "InputSwitchConfigurationPreferredInputInteger":{
+      "type":"integer",
+      "box":true,
+      "max":2,
+      "min":1
+    },
     "InputType":{
       "type":"string",
       "enum":[
@@ -2518,6 +2983,10 @@
       "exception":true,
       "fault":true
     },
+    "IsmEncryptionMethod":{
+      "type":"string",
+      "enum":["CENC"]
+    },
     "ListChannelGroupsRequest":{
       "type":"structure",
       "members":{
@@ -2725,6 +3194,25 @@
       "type":"list",
       "member":{"shape":"ListLowLatencyHlsManifestConfiguration"}
     },
+    "ListMssManifestConfiguration":{
+      "type":"structure",
+      "required":["ManifestName"],
+      "members":{
+        "ManifestName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the MSS manifest configuration.</p>"
+        },
+        "Url":{
+          "shape":"String",
+          "documentation":"<p>The URL for accessing the MSS manifest.</p>"
+        }
+      },
+      "documentation":"<p>Summary information about a Microsoft Smooth Streaming (MSS) manifest configuration. This provides key details about the MSS manifest without including all configuration parameters.</p>"
+    },
+    "ListMssManifests":{
+      "type":"list",
+      "member":{"shape":"ListMssManifestConfiguration"}
+    },
     "ListOriginEndpointsRequest":{
       "type":"structure",
       "required":[
@@ -2805,6 +3293,13 @@
       "min":1,
       "pattern":"[a-zA-Z0-9-]+"
     },
+    "MssManifestLayout":{
+      "type":"string",
+      "enum":[
+        "FULL",
+        "COMPACT"
+      ]
+    },
     "OriginEndpointListConfiguration":{
       "type":"structure",
       "required":[
@@ -2859,6 +3354,10 @@
           "shape":"ListDashManifests",
           "documentation":"<p>A DASH manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"ListMssManifests",
+          "documentation":"<p>A list of Microsoft Smooth Streaming (MSS) manifest configurations associated with the origin endpoint. Each configuration represents a different MSS streaming option available from this endpoint.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -2938,8 +3437,7 @@
     },
     "PutChannelPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutOriginEndpointPolicyRequest":{
       "type":"structure",
@@ -2971,12 +3469,123 @@
         "Policy":{
           "shape":"PolicyText",
           "documentation":"<p>The policy to attach to the specified origin endpoint.</p>"
+        },
+        "CdnAuthConfiguration":{
+          "shape":"CdnAuthConfiguration",
+          "documentation":"<p>The settings for using authorization headers between the MediaPackage endpoint and your CDN. </p> <p>For information about CDN authorization, see <a href=\"https://docs.aws.amazon.com/mediapackage/latest/userguide/cdn-auth.html\">CDN authorization in Elemental MediaPackage</a> in the MediaPackage user guide. </p>"
         }
       }
     },
     "PutOriginEndpointPolicyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "ResetChannelStateRequest":{
+      "type":"structure",
+      "required":[
+        "ChannelGroupName",
+        "ChannelName"
+      ],
+      "members":{
+        "ChannelGroupName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel group that contains the channel that you are resetting.</p>",
+          "location":"uri",
+          "locationName":"ChannelGroupName"
+        },
+        "ChannelName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel that you are resetting.</p>",
+          "location":"uri",
+          "locationName":"ChannelName"
+        }
+      }
+    },
+    "ResetChannelStateResponse":{
+      "type":"structure",
+      "required":[
+        "ChannelGroupName",
+        "ChannelName",
+        "Arn",
+        "ResetAt"
+      ],
+      "members":{
+        "ChannelGroupName":{
+          "shape":"String",
+          "documentation":"<p>The name of the channel group that contains the channel that you just reset.</p>"
+        },
+        "ChannelName":{
+          "shape":"String",
+          "documentation":"<p>The name of the channel that you just reset.</p>"
+        },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the channel that you just reset.</p>"
+        },
+        "ResetAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time that the channel was last reset.</p>"
+        }
+      }
+    },
+    "ResetOriginEndpointStateRequest":{
+      "type":"structure",
+      "required":[
+        "ChannelGroupName",
+        "ChannelName",
+        "OriginEndpointName"
+      ],
+      "members":{
+        "ChannelGroupName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel group that contains the channel with the origin endpoint that you are resetting.</p>",
+          "location":"uri",
+          "locationName":"ChannelGroupName"
+        },
+        "ChannelName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel with the origin endpoint that you are resetting.</p>",
+          "location":"uri",
+          "locationName":"ChannelName"
+        },
+        "OriginEndpointName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the origin endpoint that you are resetting.</p>",
+          "location":"uri",
+          "locationName":"OriginEndpointName"
+        }
+      }
+    },
+    "ResetOriginEndpointStateResponse":{
+      "type":"structure",
+      "required":[
+        "ChannelGroupName",
+        "ChannelName",
+        "OriginEndpointName",
+        "Arn",
+        "ResetAt"
+      ],
       "members":{
+        "ChannelGroupName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel group that contains the channel with the origin endpoint that you just reset.</p>"
+        },
+        "ChannelName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the channel with the origin endpoint that you just reset.</p>"
+        },
+        "OriginEndpointName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the origin endpoint that you just reset.</p>"
+        },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) associated with the endpoint that you just reset.</p>"
+        },
+        "ResetAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time that the origin endpoint was last reset.</p>"
+        }
       }
     },
     "ResourceDescription":{
@@ -3512,6 +4121,10 @@
           "shape":"CreateDashManifests",
           "documentation":"<p>A DASH manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"CreateMssManifests",
+          "documentation":"<p>A list of Microsoft Smooth Streaming (MSS) manifest configurations to update for the origin endpoint. This replaces the existing MSS manifest configurations.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -3591,6 +4204,10 @@
           "shape":"GetLowLatencyHlsManifests",
           "documentation":"<p>A low-latency HLS manifest configuration.</p>"
         },
+        "MssManifests":{
+          "shape":"GetMssManifests",
+          "documentation":"<p>The updated Microsoft Smooth Streaming (MSS) manifest configurations for this origin endpoint.</p>"
+        },
         "ForceEndpointErrorConfiguration":{
           "shape":"ForceEndpointErrorConfiguration",
           "documentation":"<p>The failover settings for the endpoint.</p>"
@@ -3634,6 +4251,7 @@
         "ENCRYPTION_METHOD_CONTAINER_TYPE_MISMATCH",
         "CENC_IV_INCOMPATIBLE",
         "ENCRYPTION_CONTRACT_WITHOUT_AUDIO_RENDITION_INCOMPATIBLE",
+        "ENCRYPTION_CONTRACT_WITH_ISM_CONTAINER_INCOMPATIBLE",
         "ENCRYPTION_CONTRACT_UNENCRYPTED",
         "ENCRYPTION_CONTRACT_SHARED",
         "NUM_MANIFESTS_LOW",
@@ -3682,10 +4300,38 @@
         "HARVEST_JOB_CUSTOMER_ENDPOINT_READ_ACCESS_DENIED",
         "CLIP_START_TIME_WITH_START_OR_END",
         "START_TAG_TIME_OFFSET_INVALID",
+        "INCOMPATIBLE_DASH_PROFILE_DVB_DASH_CONFIGURATION",
+        "DASH_DVB_ATTRIBUTES_WITHOUT_DVB_DASH_PROFILE",
+        "INCOMPATIBLE_DASH_COMPACTNESS_CONFIGURATION",
+        "INCOMPATIBLE_XML_ENCODING",
+        "CMAF_EXCLUDE_SEGMENT_DRM_METADATA_INCOMPATIBLE_CONTAINER_TYPE",
         "ONLY_CMAF_INPUT_TYPE_ALLOW_MQCS_INPUT_SWITCHING",
-        "ONLY_CMAF_INPUT_TYPE_ALLOW_MQCS_OUTPUT_CONFIGURATION"
+        "ONLY_CMAF_INPUT_TYPE_ALLOW_MQCS_OUTPUT_CONFIGURATION",
+        "ONLY_CMAF_INPUT_TYPE_ALLOW_PREFERRED_INPUT_CONFIGURATION",
+        "TS_CONTAINER_TYPE_WITH_MSS_MANIFEST",
+        "CMAF_CONTAINER_TYPE_WITH_MSS_MANIFEST",
+        "ISM_CONTAINER_TYPE_WITH_HLS_MANIFEST",
+        "ISM_CONTAINER_TYPE_WITH_LL_HLS_MANIFEST",
+        "ISM_CONTAINER_TYPE_WITH_DASH_MANIFEST",
+        "ISM_CONTAINER_TYPE_WITH_SCTE",
+        "ISM_CONTAINER_WITH_KEY_ROTATION",
+        "BATCH_GET_SECRET_VALUE_DENIED",
+        "GET_SECRET_VALUE_DENIED",
+        "DESCRIBE_SECRET_DENIED",
+        "INVALID_SECRET_FORMAT",
+        "SECRET_IS_NOT_ONE_KEY_VALUE_PAIR",
+        "INVALID_SECRET_KEY",
+        "INVALID_SECRET_VALUE",
+        "SECRET_ARN_RESOURCE_NOT_FOUND",
+        "DECRYPT_SECRET_FAILED",
+        "TOO_MANY_SECRETS",
+        "DUPLICATED_SECRET",
+        "MALFORMED_SECRET_ARN",
+        "SECRET_FROM_DIFFERENT_ACCOUNT",
+        "SECRET_FROM_DIFFERENT_REGION",
+        "INVALID_SECRET"
       ]
     }
   },
-  "documentation":"<note> <p>This guide is intended for creating AWS Elemental MediaPackage resources in MediaPackage Version 2 (v2) starting from May 2023. To get started with MediaPackage v2, create your MediaPackage resources. There isn't an automated process to migrate your resources from MediaPackage v1 to MediaPackage v2. </p> <p>The names of the entities that you use to access this API, like URLs and ARNs, all have the versioning information added, like \"v2\", to distinguish from the prior version. If you used MediaPackage prior to this release, you can't use the MediaPackage v2 CLI or the MediaPackage v2 API to access any MediaPackage v1 resources.</p> <p>If you created resources in MediaPackage v1, use video on demand (VOD) workflows, and aren't looking to migrate to MediaPackage v2 yet, see the <a href=\"https://docs.aws.amazon.com/mediapackage/latest/apireference/what-is.html\">MediaPackage v1 Live API Reference</a>.</p> </note> <p>This is the AWS Elemental MediaPackage v2 Live REST API Reference. It describes all the MediaPackage API operations for live content in detail, and provides sample requests, responses, and errors for the supported web services protocols.</p> <p>We assume that you have the IAM permissions that you need to use MediaPackage via the REST API. We also assume that you are familiar with the features and operations of MediaPackage, as described in the AWS Elemental MediaPackage User Guide.</p>"
+  "documentation":"<p><note> <p>This guide is intended for creating AWS Elemental MediaPackage resources in MediaPackage Version 2 (v2) starting from May 2023. To get started with MediaPackage v2, create your MediaPackage resources. There isn't an automated process to migrate your resources from MediaPackage v1 to MediaPackage v2. </p> <p>The names of the entities that you use to access this API, like URLs and ARNs, all have the versioning information added, like &quot;v2&quot;, to distinguish from the prior version. If you used MediaPackage prior to this release, you can't use the MediaPackage v2 CLI or the MediaPackage v2 API to access any MediaPackage v1 resources.</p> <p>If you created resources in MediaPackage v1, use video on demand (VOD) workflows, and aren't looking to migrate to MediaPackage v2 yet, see the <a href=\"https://docs.aws.amazon.com/mediapackage/latest/apireference/what-is.html\">MediaPackage v1 Live API Reference</a>.</p> </note> <p>This is the AWS Elemental MediaPackage v2 Live REST API Reference. It describes all the MediaPackage API operations for live content in detail, and provides sample requests, responses, and errors for the supported web services protocols.</p> <p>We assume that you have the IAM permissions that you need to use MediaPackage via the REST API. We also assume that you are familiar with the features and operations of MediaPackage, as described in the AWS Elemental MediaPackage User Guide.</p></p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediastore/2017-09-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/mediastore/2017-09-01/service-2.json 2.31.35-1/awscli/botocore/data/mediastore/2017-09-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediastore/2017-09-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediastore/2017-09-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,13 +5,15 @@
     "endpointPrefix":"mediastore",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"MediaStore",
     "serviceFullName":"AWS Elemental MediaStore",
     "serviceId":"MediaStore",
     "signatureVersion":"v4",
     "signingName":"mediastore",
     "targetPrefix":"MediaStore_20170901",
-    "uid":"mediastore-2017-09-01"
+    "uid":"mediastore-2017-09-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateContainer":{
@@ -526,8 +528,7 @@
     },
     "DeleteContainerOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContainerPolicyInput":{
       "type":"structure",
@@ -541,8 +542,7 @@
     },
     "DeleteContainerPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCorsPolicyInput":{
       "type":"structure",
@@ -556,8 +556,7 @@
     },
     "DeleteCorsPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLifecyclePolicyInput":{
       "type":"structure",
@@ -571,8 +570,7 @@
     },
     "DeleteLifecyclePolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMetricPolicyInput":{
       "type":"structure",
@@ -586,8 +584,7 @@
     },
     "DeleteMetricPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeContainerInput":{
       "type":"structure",
@@ -884,8 +881,7 @@
     },
     "PutContainerPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutCorsPolicyInput":{
       "type":"structure",
@@ -906,8 +902,7 @@
     },
     "PutCorsPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutLifecyclePolicyInput":{
       "type":"structure",
@@ -928,8 +923,7 @@
     },
     "PutLifecyclePolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutMetricPolicyInput":{
       "type":"structure",
@@ -950,8 +944,7 @@
     },
     "PutMetricPolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartAccessLoggingInput":{
       "type":"structure",
@@ -965,8 +958,7 @@
     },
     "StartAccessLoggingOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopAccessLoggingInput":{
       "type":"structure",
@@ -980,8 +972,7 @@
     },
     "StopAccessLoggingOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Tag":{
       "type":"structure",
@@ -1033,8 +1024,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1062,8 +1052,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     }
   },
   "documentation":"<p>An AWS Elemental MediaStore container is a namespace that holds folders and objects. You use a container endpoint to create, read, and delete objects. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediastore-data/2017-09-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/mediastore-data/2017-09-01/service-2.json 2.31.35-1/awscli/botocore/data/mediastore-data/2017-09-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediastore-data/2017-09-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediastore-data/2017-09-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,12 +4,14 @@
     "apiVersion":"2017-09-01",
     "endpointPrefix":"data.mediastore",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"MediaStore Data",
     "serviceFullName":"AWS Elemental MediaStore Data Plane",
     "serviceId":"MediaStore Data",
     "signatureVersion":"v4",
     "signingName":"mediastore",
-    "uid":"mediastore-data-2017-09-01"
+    "uid":"mediastore-data-2017-09-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DeleteObject":{
@@ -85,7 +87,8 @@
         {"shape":"InternalServerError"}
       ],
       "documentation":"<p>Uploads an object to the specified path. Object sizes are limited to 25 MB for standard upload availability and 10 MB for streaming upload availability.</p>",
-      "authtype":"v4-unsigned-body"
+      "authtype":"v4-unsigned-body",
+      "unsignedPayload":true
     }
   },
   "shapes":{
@@ -120,8 +123,7 @@
     },
     "DeleteObjectResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeObjectRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediatailor/2018-04-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mediatailor/2018-04-23/service-2.json 2.31.35-1/awscli/botocore/data/mediatailor/2018-04-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/mediatailor/2018-04-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mediatailor/2018-04-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2018-04-23",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"api.mediatailor",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"MediaTailor",
     "serviceFullName":"AWS MediaTailor",
     "serviceId":"MediaTailor",
@@ -33,7 +34,7 @@
       },
       "input":{"shape":"ConfigureLogsForPlaybackConfigurationRequest"},
       "output":{"shape":"ConfigureLogsForPlaybackConfigurationResponse"},
-      "documentation":"<p>Amazon CloudWatch log settings for a playback configuration.</p>",
+      "documentation":"<p>Defines where AWS Elemental MediaTailor sends logs for the playback configuration.</p>",
       "idempotent":true
     },
     "CreateChannel":{
@@ -213,7 +214,8 @@
       },
       "input":{"shape":"DescribeChannelRequest"},
       "output":{"shape":"DescribeChannelResponse"},
-      "documentation":"<p>Describes a channel. For information about MediaTailor channels, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html\">Working with channels</a> in the <i>MediaTailor User Guide</i>.</p>"
+      "documentation":"<p>Describes a channel. For information about MediaTailor channels, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html\">Working with channels</a> in the <i>MediaTailor User Guide</i>.</p>",
+      "readonly":true
     },
     "DescribeLiveSource":{
       "name":"DescribeLiveSource",
@@ -224,7 +226,8 @@
       },
       "input":{"shape":"DescribeLiveSourceRequest"},
       "output":{"shape":"DescribeLiveSourceResponse"},
-      "documentation":"<p>The live source to describe.</p>"
+      "documentation":"<p>The live source to describe.</p>",
+      "readonly":true
     },
     "DescribeProgram":{
       "name":"DescribeProgram",
@@ -235,7 +238,8 @@
       },
       "input":{"shape":"DescribeProgramRequest"},
       "output":{"shape":"DescribeProgramResponse"},
-      "documentation":"<p>Describes a program within a channel. For information about programs, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-programs.html\">Working with programs</a> in the <i>MediaTailor User Guide</i>.</p>"
+      "documentation":"<p>Describes a program within a channel. For information about programs, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-programs.html\">Working with programs</a> in the <i>MediaTailor User Guide</i>.</p>",
+      "readonly":true
     },
     "DescribeSourceLocation":{
       "name":"DescribeSourceLocation",
@@ -246,7 +250,8 @@
       },
       "input":{"shape":"DescribeSourceLocationRequest"},
       "output":{"shape":"DescribeSourceLocationResponse"},
-      "documentation":"<p>Describes a source location. A source location is a container for sources. For more information about source locations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html\">Working with source locations</a> in the <i>MediaTailor User Guide</i>.</p>"
+      "documentation":"<p>Describes a source location. A source location is a container for sources. For more information about source locations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-source-locations.html\">Working with source locations</a> in the <i>MediaTailor User Guide</i>.</p>",
+      "readonly":true
     },
     "DescribeVodSource":{
       "name":"DescribeVodSource",
@@ -257,7 +262,8 @@
       },
       "input":{"shape":"DescribeVodSourceRequest"},
       "output":{"shape":"DescribeVodSourceResponse"},
-      "documentation":"<p>Provides details about a specific video on demand (VOD) source in a specific source location.</p>"
+      "documentation":"<p>Provides details about a specific video on demand (VOD) source in a specific source location.</p>",
+      "readonly":true
     },
     "GetChannelPolicy":{
       "name":"GetChannelPolicy",
@@ -268,7 +274,8 @@
       },
       "input":{"shape":"GetChannelPolicyRequest"},
       "output":{"shape":"GetChannelPolicyResponse"},
-      "documentation":"<p>Returns the channel's IAM policy. IAM policies are used to control access to your channel.</p>"
+      "documentation":"<p>Returns the channel's IAM policy. IAM policies are used to control access to your channel.</p>",
+      "readonly":true
     },
     "GetChannelSchedule":{
       "name":"GetChannelSchedule",
@@ -279,7 +286,8 @@
       },
       "input":{"shape":"GetChannelScheduleRequest"},
       "output":{"shape":"GetChannelScheduleResponse"},
-      "documentation":"<p>Retrieves information about your channel's schedule.</p>"
+      "documentation":"<p>Retrieves information about your channel's schedule.</p>",
+      "readonly":true
     },
     "GetPlaybackConfiguration":{
       "name":"GetPlaybackConfiguration",
@@ -290,7 +298,8 @@
       },
       "input":{"shape":"GetPlaybackConfigurationRequest"},
       "output":{"shape":"GetPlaybackConfigurationResponse"},
-      "documentation":"<p>Retrieves a playback configuration. For information about MediaTailor configurations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html\">Working with configurations in AWS Elemental MediaTailor</a>.</p>"
+      "documentation":"<p>Retrieves a playback configuration. For information about MediaTailor configurations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html\">Working with configurations in AWS Elemental MediaTailor</a>.</p>",
+      "readonly":true
     },
     "GetPrefetchSchedule":{
       "name":"GetPrefetchSchedule",
@@ -301,7 +310,8 @@
       },
       "input":{"shape":"GetPrefetchScheduleRequest"},
       "output":{"shape":"GetPrefetchScheduleResponse"},
-      "documentation":"<p>Retrieves a prefetch schedule for a playback configuration. A prefetch schedule allows you to tell MediaTailor to fetch and prepare certain ads before an ad break happens. For more information about ad prefetching, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html\">Using ad prefetching</a> in the <i>MediaTailor User Guide</i>.</p>"
+      "documentation":"<p>Retrieves a prefetch schedule for a playback configuration. A prefetch schedule allows you to tell MediaTailor to fetch and prepare certain ads before an ad break happens. For more information about ad prefetching, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html\">Using ad prefetching</a> in the <i>MediaTailor User Guide</i>.</p>",
+      "readonly":true
     },
     "ListAlerts":{
       "name":"ListAlerts",
@@ -312,7 +322,8 @@
       },
       "input":{"shape":"ListAlertsRequest"},
       "output":{"shape":"ListAlertsResponse"},
-      "documentation":"<p>Lists the alerts that are associated with a MediaTailor channel assembly resource.</p>"
+      "documentation":"<p>Lists the alerts that are associated with a MediaTailor channel assembly resource.</p>",
+      "readonly":true
     },
     "ListChannels":{
       "name":"ListChannels",
@@ -323,7 +334,8 @@
       },
       "input":{"shape":"ListChannelsRequest"},
       "output":{"shape":"ListChannelsResponse"},
-      "documentation":"<p>Retrieves information about the channels that are associated with the current AWS account.</p>"
+      "documentation":"<p>Retrieves information about the channels that are associated with the current AWS account.</p>",
+      "readonly":true
     },
     "ListLiveSources":{
       "name":"ListLiveSources",
@@ -334,7 +346,8 @@
       },
       "input":{"shape":"ListLiveSourcesRequest"},
       "output":{"shape":"ListLiveSourcesResponse"},
-      "documentation":"<p>Lists the live sources contained in a source location. A source represents a piece of content.</p>"
+      "documentation":"<p>Lists the live sources contained in a source location. A source represents a piece of content.</p>",
+      "readonly":true
     },
     "ListPlaybackConfigurations":{
       "name":"ListPlaybackConfigurations",
@@ -345,7 +358,8 @@
       },
       "input":{"shape":"ListPlaybackConfigurationsRequest"},
       "output":{"shape":"ListPlaybackConfigurationsResponse"},
-      "documentation":"<p>Retrieves existing playback configurations. For information about MediaTailor configurations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html\">Working with Configurations in AWS Elemental MediaTailor</a>.</p>"
+      "documentation":"<p>Retrieves existing playback configurations. For information about MediaTailor configurations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html\">Working with Configurations in AWS Elemental MediaTailor</a>.</p>",
+      "readonly":true
     },
     "ListPrefetchSchedules":{
       "name":"ListPrefetchSchedules",
@@ -356,7 +370,8 @@
       },
       "input":{"shape":"ListPrefetchSchedulesRequest"},
       "output":{"shape":"ListPrefetchSchedulesResponse"},
-      "documentation":"<p>Lists the prefetch schedules for a playback configuration.</p>"
+      "documentation":"<p>Lists the prefetch schedules for a playback configuration.</p>",
+      "readonly":true
     },
     "ListSourceLocations":{
       "name":"ListSourceLocations",
@@ -367,7 +382,8 @@
       },
       "input":{"shape":"ListSourceLocationsRequest"},
       "output":{"shape":"ListSourceLocationsResponse"},
-      "documentation":"<p>Lists the source locations for a channel. A source location defines the host server URL, and contains a list of sources.</p>"
+      "documentation":"<p>Lists the source locations for a channel. A source location defines the host server URL, and contains a list of sources.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -381,7 +397,8 @@
       "errors":[
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>A list of tags that are associated with this resource. Tags are key-value pairs that you can associate with Amazon resources to help with organization, access control, and cost tracking. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html\">Tagging AWS Elemental MediaTailor Resources</a>.</p>"
+      "documentation":"<p>A list of tags that are associated with this resource. Tags are key-value pairs that you can associate with Amazon resources to help with organization, access control, and cost tracking. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/tagging.html\">Tagging AWS Elemental MediaTailor Resources</a>.</p>",
+      "readonly":true
     },
     "ListVodSources":{
       "name":"ListVodSources",
@@ -392,7 +409,8 @@
       },
       "input":{"shape":"ListVodSourcesRequest"},
       "output":{"shape":"ListVodSourcesResponse"},
-      "documentation":"<p>Lists the VOD sources contained in a source location. A source represents a piece of content.</p>"
+      "documentation":"<p>Lists the VOD sources contained in a source location. A source represents a piece of content.</p>",
+      "readonly":true
     },
     "PutChannelPolicy":{
       "name":"PutChannelPolicy",
@@ -557,10 +575,6 @@
       "type":"structure",
       "required":["OffsetMillis"],
       "members":{
-        "AdBreakMetadata":{
-          "shape":"AdBreakMetadataList",
-          "documentation":"<p>Defines a list of key/value pairs that MediaTailor generates within the <code>EXT-X-ASSET</code>tag for <code>SCTE35_ENHANCED</code> output.</p>"
-        },
         "MessageType":{
           "shape":"MessageType",
           "documentation":"<p>The SCTE-35 ad insertion type. Accepted value: <code>SPLICE_INSERT</code>, <code>TIME_SIGNAL</code>.</p>"
@@ -580,6 +594,10 @@
         "TimeSignalMessage":{
           "shape":"TimeSignalMessage",
           "documentation":"<p>Defines the SCTE-35 <code>time_signal</code> message inserted around the ad.</p> <p>Programs on a channel's schedule can be configured with one or more ad breaks. You can attach a <code>splice_insert</code> SCTE-35 message to the ad break. This message provides basic metadata about the ad break.</p> <p>See section 9.7.4 of the 2022 SCTE-35 specification for more information.</p>"
+        },
+        "AdBreakMetadata":{
+          "shape":"AdBreakMetadataList",
+          "documentation":"<p>Defines a list of key/value pairs that MediaTailor generates within the <code>EXT-X-ASSET</code>tag for <code>SCTE35_ENHANCED</code> output.</p>"
         }
       },
       "documentation":"<p>Ad break configuration parameters.</p>"
@@ -604,6 +622,17 @@
       },
       "documentation":"<p>A location at which a zero-duration ad marker was detected in a VOD source manifest.</p>"
     },
+    "AdConditioningConfiguration":{
+      "type":"structure",
+      "required":["StreamingMediaFileConditioning"],
+      "members":{
+        "StreamingMediaFileConditioning":{
+          "shape":"StreamingMediaFileConditioning",
+          "documentation":"<p>For ads that have media files with streaming delivery and supported file extensions, indicates what transcoding action MediaTailor takes when it first receives these ads from the ADS. <code>TRANSCODE</code> indicates that MediaTailor must transcode the ads. <code>NONE</code> indicates that you have already transcoded the ads outside of MediaTailor and don't need them transcoded as part of the ad insertion workflow. For more information about ad conditioning see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/precondition-ads.html\">Using preconditioned ads</a> in the Elemental MediaTailor user guide.</p>"
+        }
+      },
+      "documentation":"<p>The setting that indicates what conditioning MediaTailor will perform on ads that the ad decision server (ADS) returns.</p>"
+    },
     "AdMarkerPassthrough":{
       "type":"structure",
       "members":{
@@ -621,6 +650,70 @@
         "SCTE35_ENHANCED"
       ]
     },
+    "AdsInteractionExcludeEventType":{
+      "type":"string",
+      "enum":[
+        "AD_MARKER_FOUND",
+        "NON_AD_MARKER_FOUND",
+        "MAKING_ADS_REQUEST",
+        "MODIFIED_TARGET_URL",
+        "VAST_REDIRECT",
+        "EMPTY_VAST_RESPONSE",
+        "EMPTY_VMAP_RESPONSE",
+        "VAST_RESPONSE",
+        "REDIRECTED_VAST_RESPONSE",
+        "FILLED_AVAIL",
+        "FILLED_OVERLAY_AVAIL",
+        "BEACON_FIRED",
+        "WARNING_NO_ADVERTISEMENTS",
+        "WARNING_VPAID_AD_DROPPED",
+        "WARNING_URL_VARIABLE_SUBSTITUTION_FAILED",
+        "ERROR_UNKNOWN",
+        "ERROR_UNKNOWN_HOST",
+        "ERROR_DISALLOWED_HOST",
+        "ERROR_ADS_IO",
+        "ERROR_ADS_TIMEOUT",
+        "ERROR_ADS_RESPONSE_PARSE",
+        "ERROR_ADS_RESPONSE_UNKNOWN_ROOT_ELEMENT",
+        "ERROR_ADS_INVALID_RESPONSE",
+        "ERROR_VAST_REDIRECT_EMPTY_RESPONSE",
+        "ERROR_VAST_REDIRECT_MULTIPLE_VAST",
+        "ERROR_VAST_REDIRECT_FAILED",
+        "ERROR_VAST_MISSING_MEDIAFILES",
+        "ERROR_VAST_MISSING_CREATIVES",
+        "ERROR_VAST_MISSING_OVERLAYS",
+        "ERROR_VAST_MISSING_IMPRESSION",
+        "ERROR_VAST_INVALID_VAST_AD_TAG_URI",
+        "ERROR_VAST_MULTIPLE_TRACKING_EVENTS",
+        "ERROR_VAST_MULTIPLE_LINEAR",
+        "ERROR_VAST_INVALID_MEDIA_FILE",
+        "ERROR_FIRING_BEACON_FAILED",
+        "ERROR_PERSONALIZATION_DISABLED",
+        "VOD_TIME_BASED_AVAIL_PLAN_VAST_RESPONSE_FOR_OFFSET",
+        "VOD_TIME_BASED_AVAIL_PLAN_SUCCESS",
+        "VOD_TIME_BASED_AVAIL_PLAN_WARNING_NO_ADVERTISEMENTS",
+        "INTERSTITIAL_VOD_SUCCESS",
+        "INTERSTITIAL_VOD_FAILURE"
+      ]
+    },
+    "AdsInteractionLog":{
+      "type":"structure",
+      "members":{
+        "PublishOptInEventTypes":{
+          "shape":"__adsInteractionPublishOptInEventTypesList",
+          "documentation":"<p>Indicates that MediaTailor emits <code>RAW_ADS_RESPONSE</code> logs for playback sessions that are initialized with this configuration.</p>"
+        },
+        "ExcludeEventTypes":{
+          "shape":"__adsInteractionExcludeEventTypesList",
+          "documentation":"<p>Indicates that MediaTailor won't emit the selected events in the logs for playback sessions that are initialized with this configuration.</p>"
+        }
+      },
+      "documentation":"<p>Settings for customizing what events are included in logs for interactions with the ad decision server (ADS).</p> <p>For more information about ADS logs, inlcuding descriptions of the event types, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/ads-log-format.html\">MediaTailor ADS logs description and event types</a> in Elemental MediaTailor User Guide.</p>"
+    },
+    "AdsInteractionPublishOptInEventType":{
+      "type":"string",
+      "enum":["RAW_ADS_RESPONSE"]
+    },
     "Alert":{
       "type":"structure",
       "required":[
@@ -639,10 +732,6 @@
           "shape":"__string",
           "documentation":"<p>If an alert is generated for a resource, an explanation of the reason for the alert.</p>"
         },
-        "Category":{
-          "shape":"AlertCategory",
-          "documentation":"<p>The category that MediaTailor assigns to the alert.</p>"
-        },
         "LastModifiedTime":{
           "shape":"__timestampUnix",
           "documentation":"<p>The timestamp when the alert was last modified.</p>"
@@ -654,6 +743,10 @@
         "ResourceArn":{
           "shape":"__string",
           "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "Category":{
+          "shape":"AlertCategory",
+          "documentation":"<p>The category that MediaTailor assigns to the alert.</p>"
         }
       },
       "documentation":"<p>Alert configuration parameters.</p>"
@@ -669,30 +762,30 @@
     "AlternateMedia":{
       "type":"structure",
       "members":{
-        "AdBreaks":{
-          "shape":"__listOfAdBreak",
-          "documentation":"<p>Ad break configuration parameters defined in AlternateMedia.</p>"
-        },
-        "ClipRange":{"shape":"ClipRange"},
-        "DurationMillis":{
-          "shape":"__long",
-          "documentation":"<p>The duration of the alternateMedia in milliseconds.</p>"
+        "SourceLocationName":{
+          "shape":"__string",
+          "documentation":"<p>The name of the source location for alternateMedia.</p>"
         },
         "LiveSourceName":{
           "shape":"__string",
           "documentation":"<p>The name of the live source for alternateMedia.</p>"
         },
+        "VodSourceName":{
+          "shape":"__string",
+          "documentation":"<p>The name of the VOD source for alternateMedia.</p>"
+        },
+        "ClipRange":{"shape":"ClipRange"},
         "ScheduledStartTimeMillis":{
           "shape":"__long",
           "documentation":"<p>The date and time that the alternateMedia is scheduled to start, in epoch milliseconds.</p>"
         },
-        "SourceLocationName":{
-          "shape":"__string",
-          "documentation":"<p>The name of the source location for alternateMedia.</p>"
+        "AdBreaks":{
+          "shape":"__listOfAdBreak",
+          "documentation":"<p>Ad break configuration parameters defined in AlternateMedia.</p>"
         },
-        "VodSourceName":{
-          "shape":"__string",
-          "documentation":"<p>The name of the VOD source for alternateMedia.</p>"
+        "DurationMillis":{
+          "shape":"__long",
+          "documentation":"<p>The duration of the alternateMedia in milliseconds.</p>"
         }
       },
       "documentation":"<p>A playlist of media (VOD and/or live) to be played instead of the default media on a particular program.</p>"
@@ -700,13 +793,13 @@
     "AudienceMedia":{
       "type":"structure",
       "members":{
-        "AlternateMedia":{
-          "shape":"__listOfAlternateMedia",
-          "documentation":"<p>The list of AlternateMedia defined in AudienceMedia.</p>"
-        },
         "Audience":{
           "shape":"__string",
           "documentation":"<p>The Audience defined in AudienceMedia.</p>"
+        },
+        "AlternateMedia":{
+          "shape":"__listOfAlternateMedia",
+          "documentation":"<p>The list of AlternateMedia defined in AudienceMedia.</p>"
         }
       },
       "documentation":"<p>An AudienceMedia object contains an Audience and a list of AlternateMedia.</p>"
@@ -736,10 +829,6 @@
     "AvailSuppression":{
       "type":"structure",
       "members":{
-        "FillPolicy":{
-          "shape":"FillPolicy",
-          "documentation":"<p>Defines the policy to apply to the avail suppression mode. <code>BEHIND_LIVE_EDGE</code> will always use the full avail suppression policy. <code>AFTER_LIVE_EDGE</code> mode can be used to invoke partial ad break fills when a session starts mid-break.</p>"
-        },
         "Mode":{
           "shape":"Mode",
           "documentation":"<p>Sets the ad suppression mode. By default, ad suppression is off and all ad breaks are filled with ads or slate. When Mode is set to <code>BEHIND_LIVE_EDGE</code>, ad suppression is active and MediaTailor won't fill ad breaks on or behind the ad suppression Value time in the manifest lookback window. When Mode is set to <code>AFTER_LIVE_EDGE</code>, ad suppression is active and MediaTailor won't fill ad breaks that are within the live edge plus the avail suppression value.</p>"
@@ -747,6 +836,10 @@
         "Value":{
           "shape":"__string",
           "documentation":"<p>A live edge offset time in HH:MM:SS. MediaTailor won't fill ad breaks on or behind this time in the manifest lookback window. If Value is set to 00:00:00, it is in sync with the live edge, and MediaTailor won't fill any ad breaks on or behind the live edge. If you set a Value time, MediaTailor won't fill any ad breaks on or behind this time in the manifest lookback window. For example, if you set 00:45:00, then MediaTailor will fill ad breaks that occur within 45 minutes behind the live edge, but won't fill ad breaks on or behind 45 minutes behind the live edge.</p>"
+        },
+        "FillPolicy":{
+          "shape":"FillPolicy",
+          "documentation":"<p>Defines the policy to apply to the avail suppression mode. <code>BEHIND_LIVE_EDGE</code> will always use the full avail suppression policy. <code>AFTER_LIVE_EDGE</code> mode can be used to invoke partial ad break fills when a session starts mid-break.</p>"
         }
       },
       "documentation":"<p>The configuration for avail suppression, also known as ad suppression. For more information about ad suppression, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/ad-behavior.html\">Ad Suppression</a>.</p>"
@@ -797,20 +890,16 @@
         "Arn",
         "ChannelName",
         "ChannelState",
-        "LogConfiguration",
         "Outputs",
         "PlaybackMode",
-        "Tier"
+        "Tier",
+        "LogConfiguration"
       ],
       "members":{
         "Arn":{
           "shape":"__string",
           "documentation":"<p>The ARN of the channel.</p>"
         },
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel.</p>"
@@ -831,10 +920,6 @@
           "shape":"__timestampUnix",
           "documentation":"<p>The timestamp of when the channel was last modified.</p>"
         },
-        "LogConfiguration":{
-          "shape":"LogConfigurationForChannel",
-          "documentation":"<p>The log configuration.</p>"
-        },
         "Outputs":{
           "shape":"ResponseOutputs",
           "documentation":"<p>The channel's output properties.</p>"
@@ -851,6 +936,14 @@
         "Tier":{
           "shape":"__string",
           "documentation":"<p>The tier for this channel. STANDARD tier channels can contain live programs.</p>"
+        },
+        "LogConfiguration":{
+          "shape":"LogConfigurationForChannel",
+          "documentation":"<p>The log configuration.</p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       },
       "documentation":"<p>The configuration parameters for a channel. For information about MediaTailor channels, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/channel-assembly-channels.html\">Working with channels</a> in the <i>MediaTailor User Guide</i>.</p>"
@@ -940,11 +1033,23 @@
       "members":{
         "PercentEnabled":{
           "shape":"__integer",
-          "documentation":"<p>The percentage of session logs that MediaTailor sends to your Cloudwatch Logs account. For example, if your playback configuration has 1000 sessions and percentEnabled is set to <code>60</code>, MediaTailor sends logs for 600 of the sessions to CloudWatch Logs. MediaTailor decides at random which of the playback configuration sessions to send logs for. If you want to view logs for a specific session, you can use the <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html\">debug log mode</a>.</p> <p>Valid values: <code>0</code> - <code>100</code> </p>"
+          "documentation":"<p>The percentage of session logs that MediaTailor sends to your CloudWatch Logs account. For example, if your playback configuration has 1000 sessions and percentEnabled is set to <code>60</code>, MediaTailor sends logs for 600 of the sessions to CloudWatch Logs. MediaTailor decides at random which of the playback configuration sessions to send logs for. If you want to view logs for a specific session, you can use the <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html\">debug log mode</a>.</p> <p>Valid values: <code>0</code> - <code>100</code> </p>"
         },
         "PlaybackConfigurationName":{
           "shape":"__string",
           "documentation":"<p>The name of the playback configuration.</p>"
+        },
+        "EnabledLoggingStrategies":{
+          "shape":"__listOfLoggingStrategies",
+          "documentation":"<p>The method used for collecting logs from AWS Elemental MediaTailor. To configure MediaTailor to send logs directly to Amazon CloudWatch Logs, choose <code>LEGACY_CLOUDWATCH</code>. To configure MediaTailor to send logs to CloudWatch, which then vends the logs to your destination of choice, choose <code>VENDED_LOGS</code>. Supported destinations are CloudWatch Logs log group, Amazon S3 bucket, and Amazon Data Firehose stream.</p> <p>To use vended logs, you must configure the delivery destination in Amazon CloudWatch, as described in <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions-V2\">Enable logging from AWS services, Logging that requires additional permissions [V2]</a>.</p>"
+        },
+        "AdsInteractionLog":{
+          "shape":"AdsInteractionLog",
+          "documentation":"<p>The event types that MediaTailor emits in logs for interactions with the ADS.</p>"
+        },
+        "ManifestServiceInteractionLog":{
+          "shape":"ManifestServiceInteractionLog",
+          "documentation":"<p>The event types that MediaTailor emits in logs for interactions with the origin server.</p>"
         }
       },
       "documentation":"<p>Configures Amazon CloudWatch log settings for a playback configuration.</p>"
@@ -960,6 +1065,18 @@
         "PlaybackConfigurationName":{
           "shape":"__string",
           "documentation":"<p>The name of the playback configuration.</p>"
+        },
+        "EnabledLoggingStrategies":{
+          "shape":"__listOfLoggingStrategies",
+          "documentation":"<p>The method used for collecting logs from AWS Elemental MediaTailor. <code>LEGACY_CLOUDWATCH</code> indicates that MediaTailor is sending logs directly to Amazon CloudWatch Logs. <code>VENDED_LOGS</code> indicates that MediaTailor is sending logs to CloudWatch, which then vends the logs to your destination of choice. Supported destinations are CloudWatch Logs log group, Amazon S3 bucket, and Amazon Data Firehose stream. </p>"
+        },
+        "AdsInteractionLog":{
+          "shape":"AdsInteractionLog",
+          "documentation":"<p>The event types that MediaTailor emits in logs for interactions with the ADS.</p>"
+        },
+        "ManifestServiceInteractionLog":{
+          "shape":"ManifestServiceInteractionLog",
+          "documentation":"<p>The event types that MediaTailor emits in logs for interactions with the origin server.</p>"
         }
       }
     },
@@ -971,10 +1088,6 @@
         "PlaybackMode"
       ],
       "members":{
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel.</p>",
@@ -1005,6 +1118,10 @@
         "TimeShiftConfiguration":{
           "shape":"TimeShiftConfiguration",
           "documentation":"<p> The time-shifted viewing configuration you want to associate to the channel. </p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       }
     },
@@ -1015,10 +1132,6 @@
           "shape":"__string",
           "documentation":"<p>The Amazon Resource Name (ARN) to assign to the channel.</p>"
         },
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name to assign to the channel.</p>"
@@ -1059,6 +1172,10 @@
         "TimeShiftConfiguration":{
           "shape":"TimeShiftConfiguration",
           "documentation":"<p> The time-shifted viewing configuration assigned to the channel. </p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       }
     },
@@ -1130,15 +1247,13 @@
     "CreatePrefetchScheduleRequest":{
       "type":"structure",
       "required":[
-        "Consumption",
         "Name",
-        "PlaybackConfigurationName",
-        "Retrieval"
+        "PlaybackConfigurationName"
       ],
       "members":{
         "Consumption":{
           "shape":"PrefetchConsumption",
-          "documentation":"<p>The configuration settings for MediaTailor's <i>consumption</i> of the prefetched ads from the ad decision server. Each consumption configuration contains an end time and an optional start time that define the <i>consumption window</i>. Prefetch schedules automatically expire no earlier than seven days after the end time.</p>"
+          "documentation":"<p>The configuration settings for how and when MediaTailor consumes prefetched ads from the ad decision server for single prefetch schedules. Each consumption configuration contains an end time and an optional start time that define the <i>consumption window</i>. Prefetch schedules automatically expire no earlier than seven days after the end time.</p>"
         },
         "Name":{
           "shape":"__string",
@@ -1156,6 +1271,14 @@
           "shape":"PrefetchRetrieval",
           "documentation":"<p>The configuration settings for retrieval of prefetched ads from the ad decision server. Only one set of prefetched ads will be retrieved and subsequently consumed for each ad break.</p>"
         },
+        "RecurringPrefetchConfiguration":{
+          "shape":"RecurringPrefetchConfiguration",
+          "documentation":"<p>The configuration that defines how and when MediaTailor performs ad prefetching in a live event.</p>"
+        },
+        "ScheduleType":{
+          "shape":"PrefetchScheduleType",
+          "documentation":"<p>The frequency that MediaTailor creates prefetch schedules. <code>SINGLE</code> indicates that this schedule applies to one ad break. <code>RECURRING</code> indicates that MediaTailor automatically creates a schedule for each ad avail in a live event.</p> <p>For more information about the prefetch types and when you might use each, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html\">Prefetching ads in Elemental MediaTailor.</a> </p>"
+        },
         "StreamId":{
           "shape":"__string",
           "documentation":"<p>An optional stream identifier that MediaTailor uses to prefetch ads for multiple streams that use the same playback configuration. If <code>StreamId</code> is specified, MediaTailor returns all of the prefetch schedules with an exact match on <code>StreamId</code>. If not specified, MediaTailor returns all of the prefetch schedules for the playback configuration, regardless of <code>StreamId</code>.</p>"
@@ -1171,7 +1294,7 @@
         },
         "Consumption":{
           "shape":"PrefetchConsumption",
-          "documentation":"<p>The configuration settings for MediaTailor's <i>consumption</i> of the prefetched ads from the ad decision server. Each consumption configuration contains an end time and an optional start time that define the <i>consumption window</i>. Prefetch schedules automatically expire no earlier than seven days after the end time.</p>"
+          "documentation":"<p>The configuration settings for how and when MediaTailor consumes prefetched ads from the ad decision server for single prefetch schedules. Each consumption configuration contains an end time and an optional start time that define the <i>consumption window</i>. Prefetch schedules automatically expire no earlier than seven days after the end time.</p>"
         },
         "Name":{
           "shape":"__string",
@@ -1185,6 +1308,14 @@
           "shape":"PrefetchRetrieval",
           "documentation":"<p>The configuration settings for retrieval of prefetched ads from the ad decision server. Only one set of prefetched ads will be retrieved and subsequently consumed for each ad break.</p>"
         },
+        "RecurringPrefetchConfiguration":{
+          "shape":"RecurringPrefetchConfiguration",
+          "documentation":"<p>The configuration that defines how MediaTailor performs recurring prefetch. </p>"
+        },
+        "ScheduleType":{
+          "shape":"PrefetchScheduleType",
+          "documentation":"<p>The frequency that MediaTailor creates prefetch schedules. <code>SINGLE</code> indicates that this schedule applies to one ad break. <code>RECURRING</code> indicates that MediaTailor automatically creates a schedule for each ad avail in a live event.</p>"
+        },
         "StreamId":{
           "shape":"__string",
           "documentation":"<p>An optional stream identifier that MediaTailor uses to prefetch ads for multiple streams that use the same playback configuration. If <code>StreamId</code> is specified, MediaTailor returns all of the prefetch schedules with an exact match on <code>StreamId</code>. If not specified, MediaTailor returns all of the prefetch schedules for the playback configuration, regardless of <code>StreamId</code>.</p>"
@@ -1204,10 +1335,6 @@
           "shape":"__listOfAdBreak",
           "documentation":"<p>The ad break configuration settings.</p>"
         },
-        "AudienceMedia":{
-          "shape":"__listOfAudienceMedia",
-          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel for this Program.</p>",
@@ -1235,6 +1362,10 @@
         "VodSourceName":{
           "shape":"__string",
           "documentation":"<p>The name that's used to refer to a VOD source.</p>"
+        },
+        "AudienceMedia":{
+          "shape":"__listOfAudienceMedia",
+          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
         }
       }
     },
@@ -1249,26 +1380,14 @@
           "shape":"__string",
           "documentation":"<p>The ARN to assign to the program.</p>"
         },
-        "AudienceMedia":{
-          "shape":"__listOfAudienceMedia",
-          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name to assign to the channel for this program.</p>"
         },
-        "ClipRange":{
-          "shape":"ClipRange",
-          "documentation":"<p>The clip range configuration settings.</p>"
-        },
         "CreationTime":{
           "shape":"__timestampUnix",
           "documentation":"<p>The time the program was created.</p>"
         },
-        "DurationMillis":{
-          "shape":"__long",
-          "documentation":"<p>The duration of the live program in milliseconds.</p>"
-        },
         "LiveSourceName":{
           "shape":"__string",
           "documentation":"<p>The name of the LiveSource for this Program.</p>"
@@ -1288,6 +1407,18 @@
         "VodSourceName":{
           "shape":"__string",
           "documentation":"<p>The name that's used to refer to a VOD source.</p>"
+        },
+        "ClipRange":{
+          "shape":"ClipRange",
+          "documentation":"<p>The clip range configuration settings.</p>"
+        },
+        "DurationMillis":{
+          "shape":"__long",
+          "documentation":"<p>The duration of the live program in milliseconds.</p>"
+        },
+        "AudienceMedia":{
+          "shape":"__listOfAudienceMedia",
+          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
         }
       }
     },
@@ -1512,8 +1643,7 @@
     },
     "DeleteChannelPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteChannelRequest":{
       "type":"structure",
@@ -1529,8 +1659,7 @@
     },
     "DeleteChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLiveSourceRequest":{
       "type":"structure",
@@ -1555,8 +1684,7 @@
     },
     "DeleteLiveSourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePlaybackConfigurationRequest":{
       "type":"structure",
@@ -1572,8 +1700,7 @@
     },
     "DeletePlaybackConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePrefetchScheduleRequest":{
       "type":"structure",
@@ -1598,8 +1725,7 @@
     },
     "DeletePrefetchScheduleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProgramRequest":{
       "type":"structure",
@@ -1624,8 +1750,7 @@
     },
     "DeleteProgramResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSourceLocationRequest":{
       "type":"structure",
@@ -1641,8 +1766,7 @@
     },
     "DeleteSourceLocationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVodSourceRequest":{
       "type":"structure",
@@ -1667,8 +1791,7 @@
     },
     "DeleteVodSourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeChannelRequest":{
       "type":"structure",
@@ -1690,10 +1813,6 @@
           "shape":"__string",
           "documentation":"<p>The ARN of the channel.</p>"
         },
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel.</p>"
@@ -1714,10 +1833,6 @@
           "shape":"__timestampUnix",
           "documentation":"<p>The timestamp of when the channel was last modified.</p>"
         },
-        "LogConfiguration":{
-          "shape":"LogConfigurationForChannel",
-          "documentation":"<p>The log configuration for the channel.</p>"
-        },
         "Outputs":{
           "shape":"ResponseOutputs",
           "documentation":"<p>The channel's output properties.</p>"
@@ -1735,9 +1850,17 @@
           "shape":"__string",
           "documentation":"<p>The channel's tier.</p>"
         },
+        "LogConfiguration":{
+          "shape":"LogConfigurationForChannel",
+          "documentation":"<p>The log configuration for the channel.</p>"
+        },
         "TimeShiftConfiguration":{
           "shape":"TimeShiftConfiguration",
           "documentation":"<p> The time-shifted viewing configuration for the channel. </p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       }
     },
@@ -1828,26 +1951,14 @@
           "shape":"__string",
           "documentation":"<p>The ARN of the program.</p>"
         },
-        "AudienceMedia":{
-          "shape":"__listOfAudienceMedia",
-          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel that the program belongs to.</p>"
         },
-        "ClipRange":{
-          "shape":"ClipRange",
-          "documentation":"<p>The clip range configuration settings.</p>"
-        },
         "CreationTime":{
           "shape":"__timestampUnix",
           "documentation":"<p>The timestamp of when the program was created.</p>"
         },
-        "DurationMillis":{
-          "shape":"Long",
-          "documentation":"<p>The duration of the live program in milliseconds.</p>"
-        },
         "LiveSourceName":{
           "shape":"__string",
           "documentation":"<p>The name of the LiveSource for this Program.</p>"
@@ -1867,6 +1978,18 @@
         "VodSourceName":{
           "shape":"__string",
           "documentation":"<p>The name that's used to refer to a VOD source.</p>"
+        },
+        "ClipRange":{
+          "shape":"ClipRange",
+          "documentation":"<p>The clip range configuration settings.</p>"
+        },
+        "DurationMillis":{
+          "shape":"Long",
+          "documentation":"<p>The duration of the live program in milliseconds.</p>"
+        },
+        "AudienceMedia":{
+          "shape":"__listOfAudienceMedia",
+          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
         }
       }
     },
@@ -2015,12 +2138,6 @@
       "type":"structure",
       "required":["ChannelName"],
       "members":{
-        "Audience":{
-          "shape":"__string",
-          "documentation":"<p>The single audience for GetChannelScheduleRequest.</p>",
-          "location":"querystring",
-          "locationName":"audience"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel associated with this Channel Schedule.</p>",
@@ -2044,6 +2161,12 @@
           "documentation":"<p>(Optional) If the playback configuration has more than <code>MaxResults</code> channel schedules, use <code>NextToken</code> to get the second and subsequent pages of results.</p> <p>For the first <code>GetChannelScheduleRequest</code> request, omit this value.</p> <p>For the second and subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request.</p> <p>If the previous response didn't include a <code>NextToken</code> element, there are no more channel schedules to get.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "Audience":{
+          "shape":"__string",
+          "documentation":"<p>The single audience for GetChannelScheduleRequest.</p>",
+          "location":"querystring",
+          "locationName":"audience"
         }
       }
     },
@@ -2093,7 +2216,7 @@
         },
         "ConfigurationAliases":{
           "shape":"ConfigurationAliasesResponse",
-          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html\">Domain Variables</a>.</p>"
+          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domains.html\">Domain Variables</a>.</p>"
         },
         "DashConfiguration":{
           "shape":"DashConfiguration",
@@ -2113,7 +2236,7 @@
         },
         "LogConfiguration":{
           "shape":"LogConfiguration",
-          "documentation":"<p>The Amazon CloudWatch log settings for a playback configuration.</p>"
+          "documentation":"<p>The configuration that defines where AWS Elemental MediaTailor sends logs for the playback configuration.</p>"
         },
         "ManifestProcessingRules":{
           "shape":"ManifestProcessingRules",
@@ -2155,6 +2278,10 @@
         "VideoContentSourceUrl":{
           "shape":"__string",
           "documentation":"<p>The URL prefix for the parent manifest for the stream, minus the asset ID. The maximum length is 512 characters.</p>"
+        },
+        "AdConditioningConfiguration":{
+          "shape":"AdConditioningConfiguration",
+          "documentation":"<p>The setting that indicates what conditioning MediaTailor will perform on ads that the ad decision server (ADS) returns, and what priority MediaTailor uses when inserting ads. </p>"
         }
       }
     },
@@ -2188,7 +2315,7 @@
         },
         "Consumption":{
           "shape":"PrefetchConsumption",
-          "documentation":"<p>Consumption settings determine how, and when, MediaTailor places the prefetched ads into ad breaks. Ad consumption occurs within a span of time that you define, called a <i>consumption window</i>. You can designate which ad breaks that MediaTailor fills with prefetch ads by setting avail matching criteria.</p>"
+          "documentation":"<p>The configuration settings for how and when MediaTailor consumes prefetched ads from the ad decision server for single prefetch schedules. Each consumption configuration contains an end time and an optional start time that define the <i>consumption window</i>. Prefetch schedules automatically expire no earlier than seven days after the end time.</p>"
         },
         "Name":{
           "shape":"__string",
@@ -2202,6 +2329,14 @@
           "shape":"PrefetchRetrieval",
           "documentation":"<p>A complex type that contains settings for prefetch retrieval from the ad decision server (ADS).</p>"
         },
+        "ScheduleType":{
+          "shape":"PrefetchScheduleType",
+          "documentation":"<p>The frequency that MediaTailor creates prefetch schedules. <code>SINGLE</code> indicates that this schedule applies to one ad break. <code>RECURRING</code> indicates that MediaTailor automatically creates a schedule for each ad avail in a live event.</p>"
+        },
+        "RecurringPrefetchConfiguration":{
+          "shape":"RecurringPrefetchConfiguration",
+          "documentation":"<p>The configuration that defines how and when MediaTailor performs ad prefetching in a live event.</p>"
+        },
         "StreamId":{
           "shape":"__string",
           "documentation":"<p>An optional stream identifier that you can specify in order to prefetch for multiple streams that use the same playback configuration.</p>"
@@ -2221,13 +2356,13 @@
     "HlsPlaylistSettings":{
       "type":"structure",
       "members":{
-        "AdMarkupType":{
-          "shape":"adMarkupTypes",
-          "documentation":"<p>Determines the type of SCTE 35 tags to use in ad markup. Specify <code>DATERANGE</code> to use <code>DATERANGE</code> tags (for live or VOD content). Specify <code>SCTE35_ENHANCED</code> to use <code>EXT-X-CUE-OUT</code> and <code>EXT-X-CUE-IN</code> tags (for VOD content only).</p>"
-        },
         "ManifestWindowSeconds":{
           "shape":"__integer",
           "documentation":"<p>The total duration (in seconds) of each manifest. Minimum value: <code>30</code> seconds. Maximum value: <code>3600</code> seconds.</p>"
+        },
+        "AdMarkupType":{
+          "shape":"adMarkupTypes",
+          "documentation":"<p>Determines the type of SCTE 35 tags to use in ad markup. Specify <code>DATERANGE</code> to use <code>DATERANGE</code> tags (for live or VOD content). Specify <code>SCTE35_ENHANCED</code> to use <code>EXT-X-CUE-OUT</code> and <code>EXT-X-CUE-IN</code> tags (for VOD content only).</p>"
         }
       },
       "documentation":"<p>HLS playlist configuration parameters.</p>"
@@ -2307,13 +2442,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of alerts that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> alerts, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p>The maximum number of alerts that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> alerts, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListAlerts</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
@@ -2343,13 +2478,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of channels that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> channels, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p>The maximum number of channels that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> channels, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListChannels</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         }
@@ -2374,13 +2509,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of live sources that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> live sources, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p>The maximum number of live sources that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> live sources, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListLiveSources</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
@@ -2410,13 +2545,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of playback configurations that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> playback configurations, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p>The maximum number of playback configurations that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> playback configurations, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"MaxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListPlaybackConfigurations</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"NextToken"
         }
@@ -2435,17 +2570,25 @@
         }
       }
     },
+    "ListPrefetchScheduleType":{
+      "type":"string",
+      "enum":[
+        "SINGLE",
+        "RECURRING",
+        "ALL"
+      ]
+    },
     "ListPrefetchSchedulesRequest":{
       "type":"structure",
       "required":["PlaybackConfigurationName"],
       "members":{
         "MaxResults":{
           "shape":"__integerMin1Max100",
-          "documentation":"<p>The maximum number of prefetch schedules that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> prefetch schedules, use the value of <code>NextToken</code> in the response to get the next page of results.</p>"
+          "documentation":"<p>The maximum number of prefetch schedules that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> prefetch schedules, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>(Optional) If the playback configuration has more than <code>MaxResults</code> prefetch schedules, use <code>NextToken</code> to get the second and subsequent pages of results.</p> <p> For the first <code>ListPrefetchSchedulesRequest</code> request, omit this value.</p> <p> For the second and subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request.</p> <p> If the previous response didn't include a <code>NextToken</code> element, there are no more prefetch schedules to get.</p>"
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListPrefetchSchedules</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>"
         },
         "PlaybackConfigurationName":{
           "shape":"__string",
@@ -2453,6 +2596,10 @@
           "location":"uri",
           "locationName":"PlaybackConfigurationName"
         },
+        "ScheduleType":{
+          "shape":"ListPrefetchScheduleType",
+          "documentation":"<p>The type of prefetch schedules that you want to list. <code>SINGLE</code> indicates that you want to list the configured single prefetch schedules. <code>RECURRING</code> indicates that you want to list the configured recurring prefetch schedules. <code>ALL</code> indicates that you want to list all configured prefetch schedules.</p>"
+        },
         "StreamId":{
           "shape":"__string",
           "documentation":"<p>An optional filtering parameter whereby MediaTailor filters the prefetch schedules to include only specific streams.</p>"
@@ -2477,13 +2624,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p> The maximum number of source locations that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> source locations, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p> The maximum number of source locations that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> source locations, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListSourceLocations</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         }
@@ -2530,13 +2677,13 @@
       "members":{
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p> The maximum number of VOD sources that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> VOD sources, use the value of <code>NextToken</code> in the response to get the next page of results.</p>",
+          "documentation":"<p> The maximum number of VOD sources that you want MediaTailor to return in response to the current request. If there are more than <code>MaxResults</code> VOD sources, use the value of <code>NextToken</code> in the response to get the next page of results.</p> <p>The default value is 100. MediaTailor uses DynamoDB-based pagination, which means that a response might contain fewer than <code>MaxResults</code> items, including 0 items, even when more results are available. To retrieve all results, you must continue making requests using the <code>NextToken</code> value from each response until the response no longer includes a <code>NextToken</code> value.</p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "NextToken":{
           "shape":"__string",
-          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p>",
+          "documentation":"<p>Pagination token returned by the list request when results exceed the maximum allowed. Use the token to fetch the next page of results.</p> <p>For the first <code>ListVodSources</code> request, omit this value. For subsequent requests, get the value of <code>NextToken</code> from the previous response and specify that value for <code>NextToken</code> in the request. Continue making requests until the response no longer includes a <code>NextToken</code> value, which indicates that all results have been retrieved.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
@@ -2618,14 +2765,29 @@
     },
     "LogConfiguration":{
       "type":"structure",
-      "required":["PercentEnabled"],
+      "required":[
+        "PercentEnabled",
+        "EnabledLoggingStrategies"
+      ],
       "members":{
         "PercentEnabled":{
           "shape":"__integer",
-          "documentation":"<p>The percentage of session logs that MediaTailor sends to your Cloudwatch Logs account. For example, if your playback configuration has 1000 sessions and <code>percentEnabled</code> is set to <code>60</code>, MediaTailor sends logs for 600 of the sessions to CloudWatch Logs. MediaTailor decides at random which of the playback configuration sessions to send logs for. If you want to view logs for a specific session, you can use the <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html\">debug log mode</a>.</p> <p>Valid values: <code>0</code> - <code>100</code> </p>"
+          "documentation":"<p>The percentage of session logs that MediaTailor sends to your configured log destination. For example, if your playback configuration has 1000 sessions and <code>percentEnabled</code> is set to <code>60</code>, MediaTailor sends logs for 600 of the sessions to CloudWatch Logs. MediaTailor decides at random which of the playback configuration sessions to send logs for. If you want to view logs for a specific session, you can use the <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/debug-log-mode.html\">debug log mode</a>.</p> <p>Valid values: <code>0</code> - <code>100</code> </p>"
+        },
+        "EnabledLoggingStrategies":{
+          "shape":"__listOfLoggingStrategies",
+          "documentation":"<p>The method used for collecting logs from AWS Elemental MediaTailor. <code>LEGACY_CLOUDWATCH</code> indicates that MediaTailor is sending logs directly to Amazon CloudWatch Logs. <code>VENDED_LOGS</code> indicates that MediaTailor is sending logs to CloudWatch, which then vends the logs to your destination of choice. Supported destinations are CloudWatch Logs log group, Amazon S3 bucket, and Amazon Data Firehose stream. </p>"
+        },
+        "AdsInteractionLog":{
+          "shape":"AdsInteractionLog",
+          "documentation":"<p>Settings for customizing what events are included in logs for interactions with the ad decision server (ADS).</p>"
+        },
+        "ManifestServiceInteractionLog":{
+          "shape":"ManifestServiceInteractionLog",
+          "documentation":"<p>Settings for customizing what events are included in logs for interactions with the origin server.</p>"
         }
       },
-      "documentation":"<p>Returns Amazon CloudWatch log settings for a playback configuration.</p>"
+      "documentation":"<p>Defines where AWS Elemental MediaTailor sends logs for the playback configuration.</p>"
     },
     "LogConfigurationForChannel":{
       "type":"structure",
@@ -2645,6 +2807,13 @@
       "type":"list",
       "member":{"shape":"LogType"}
     },
+    "LoggingStrategy":{
+      "type":"string",
+      "enum":[
+        "VENDED_LOGS",
+        "LEGACY_CLOUDWATCH"
+      ]
+    },
     "Long":{
       "type":"long",
       "box":true
@@ -2659,6 +2828,53 @@
       },
       "documentation":"<p>The configuration for manifest processing rules. Manifest processing rules enable customization of the personalized manifests created by MediaTailor.</p>"
     },
+    "ManifestServiceExcludeEventType":{
+      "type":"string",
+      "enum":[
+        "GENERATED_MANIFEST",
+        "ORIGIN_MANIFEST",
+        "SESSION_INITIALIZED",
+        "TRACKING_RESPONSE",
+        "CONFIG_SYNTAX_ERROR",
+        "CONFIG_SECURITY_ERROR",
+        "UNKNOWN_HOST",
+        "TIMEOUT_ERROR",
+        "CONNECTION_ERROR",
+        "IO_ERROR",
+        "UNKNOWN_ERROR",
+        "HOST_DISALLOWED",
+        "PARSING_ERROR",
+        "MANIFEST_ERROR",
+        "NO_MASTER_OR_MEDIA_PLAYLIST",
+        "NO_MASTER_PLAYLIST",
+        "NO_MEDIA_PLAYLIST",
+        "INCOMPATIBLE_HLS_VERSION",
+        "SCTE35_PARSING_ERROR",
+        "INVALID_SINGLE_PERIOD_DASH_MANIFEST",
+        "UNSUPPORTED_SINGLE_PERIOD_DASH_MANIFEST",
+        "LAST_PERIOD_MISSING_AUDIO",
+        "LAST_PERIOD_MISSING_AUDIO_WARNING",
+        "ERROR_ORIGIN_PREFIX_INTERPOLATION",
+        "ERROR_ADS_INTERPOLATION",
+        "ERROR_LIVE_PRE_ROLL_ADS_INTERPOLATION",
+        "ERROR_CDN_AD_SEGMENT_INTERPOLATION",
+        "ERROR_CDN_CONTENT_SEGMENT_INTERPOLATION",
+        "ERROR_SLATE_AD_URL_INTERPOLATION",
+        "ERROR_PROFILE_NAME_INTERPOLATION",
+        "ERROR_BUMPER_START_INTERPOLATION",
+        "ERROR_BUMPER_END_INTERPOLATION"
+      ]
+    },
+    "ManifestServiceInteractionLog":{
+      "type":"structure",
+      "members":{
+        "ExcludeEventTypes":{
+          "shape":"__manifestServiceExcludeEventTypesList",
+          "documentation":"<p>Indicates that MediaTailor won't emit the selected events in the logs for playback sessions that are initialized with this configuration.</p>"
+        }
+      },
+      "documentation":"<p>Settings for customizing what events are included in logs for interactions with the origin server.</p> <p>For more information about manifest service logs, including descriptions of the event types, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/log-types.html\">MediaTailor manifest logs description and event types</a> in Elemental MediaTailor User Guide.</p>"
+    },
     "MaxResults":{
       "type":"integer",
       "box":true,
@@ -2712,7 +2928,7 @@
         },
         "ConfigurationAliases":{
           "shape":"ConfigurationAliasesResponse",
-          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html\">Domain Variables</a>.</p>"
+          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domains.html\">Domain Variables</a>.</p>"
         },
         "DashConfiguration":{
           "shape":"DashConfiguration",
@@ -2732,7 +2948,7 @@
         },
         "LogConfiguration":{
           "shape":"LogConfiguration",
-          "documentation":"<p>The Amazon CloudWatch log settings for a playback configuration.</p>"
+          "documentation":"<p>Defines where AWS Elemental MediaTailor sends logs for the playback configuration.</p>"
         },
         "ManifestProcessingRules":{
           "shape":"ManifestProcessingRules",
@@ -2774,6 +2990,10 @@
         "VideoContentSourceUrl":{
           "shape":"__string",
           "documentation":"<p>The URL prefix for the parent manifest for the stream, minus the asset ID. The maximum length is 512 characters.</p>"
+        },
+        "AdConditioningConfiguration":{
+          "shape":"AdConditioningConfiguration",
+          "documentation":"<p>The setting that indicates what conditioning MediaTailor will perform on ads that the ad decision server (ADS) returns, and what priority MediaTailor uses when inserting ads.</p>"
         }
       },
       "documentation":"<p>A playback configuration. For information about MediaTailor configurations, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/configurations.html\">Working with configurations in AWS Elemental MediaTailor</a>.</p>"
@@ -2799,10 +3019,10 @@
         },
         "StartTime":{
           "shape":"__timestampUnix",
-          "documentation":"<p>The time when prefetched ads are considered for use in an ad break. If you don't specify <code>StartTime</code>, the prefetched ads are available after MediaTailor retrives them from the ad decision server.</p>"
+          "documentation":"<p>The time when prefetched ads are considered for use in an ad break. If you don't specify <code>StartTime</code>, the prefetched ads are available after MediaTailor retrieves them from the ad decision server.</p>"
         }
       },
-      "documentation":"<p>A complex type that contains settings that determine how and when that MediaTailor places prefetched ads into upcoming ad breaks.</p>"
+      "documentation":"<p>For single prefetch, describes how and when that MediaTailor places prefetched ads into upcoming ad breaks.</p>"
     },
     "PrefetchRetrieval":{
       "type":"structure",
@@ -2819,6 +3039,18 @@
         "StartTime":{
           "shape":"__timestampUnix",
           "documentation":"<p>The time when prefetch retrievals can start for this break. Ad prefetching will be attempted for manifest requests that occur at or after this time. Defaults to the current time. If not specified, the prefetch retrieval starts as soon as possible.</p>"
+        },
+        "TrafficShapingType":{
+          "shape":"TrafficShapingType",
+          "documentation":"<p>Indicates the type of traffic shaping used for prefetch traffic shaping and limiting the number of requests to the ADS at one time.</p>"
+        },
+        "TrafficShapingRetrievalWindow":{
+          "shape":"TrafficShapingRetrievalWindow",
+          "documentation":"<p>Configuration for spreading ADS traffic across a set window instead of sending ADS requests for all sessions at the same time.</p>"
+        },
+        "TrafficShapingTpsConfiguration":{
+          "shape":"TrafficShapingTpsConfiguration",
+          "documentation":"<p>The configuration for TPS-based traffic shaping that limits the number of requests to the ad decision server (ADS) based on transactions per second instead of time windows.</p>"
         }
       },
       "documentation":"<p>A complex type that contains settings governing when MediaTailor prefetches ads, and which dynamic variables that MediaTailor includes in the request to the ad decision server.</p>"
@@ -2827,10 +3059,8 @@
       "type":"structure",
       "required":[
         "Arn",
-        "Consumption",
         "Name",
-        "PlaybackConfigurationName",
-        "Retrieval"
+        "PlaybackConfigurationName"
       ],
       "members":{
         "Arn":{
@@ -2839,7 +3069,7 @@
         },
         "Consumption":{
           "shape":"PrefetchConsumption",
-          "documentation":"<p>Consumption settings determine how, and when, MediaTailor places the prefetched ads into ad breaks. Ad consumption occurs within a span of time that you define, called a <i>consumption window</i>. You can designate which ad breaks that MediaTailor fills with prefetch ads by setting avail matching criteria.</p>"
+          "documentation":"<p>Consumption settings determine how, and when, MediaTailor places the prefetched ads into ad breaks for single prefetch schedules. Ad consumption occurs within a span of time that you define, called a <i>consumption window</i>. You can designate which ad breaks that MediaTailor fills with prefetch ads by setting avail matching criteria.</p>"
         },
         "Name":{
           "shape":"__string",
@@ -2853,6 +3083,14 @@
           "shape":"PrefetchRetrieval",
           "documentation":"<p>A complex type that contains settings for prefetch retrieval from the ad decision server (ADS).</p>"
         },
+        "ScheduleType":{
+          "shape":"PrefetchScheduleType",
+          "documentation":"<p>The frequency that MediaTailor creates prefetch schedules. <code>SINGLE</code> indicates that this schedule applies to one ad break. <code>RECURRING</code> indicates that MediaTailor automatically creates a schedule for each ad avail in a live event.</p> <p>For more information about the prefetch types and when you might use each, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html\">Prefetching ads in Elemental MediaTailor.</a> </p>"
+        },
+        "RecurringPrefetchConfiguration":{
+          "shape":"RecurringPrefetchConfiguration",
+          "documentation":"<p>The settings that determine how and when MediaTailor prefetches ads and inserts them into ad breaks.</p>"
+        },
         "StreamId":{
           "shape":"__string",
           "documentation":"<p>An optional stream identifier that you can specify in order to prefetch for multiple streams that use the same playback configuration.</p>"
@@ -2860,6 +3098,13 @@
       },
       "documentation":"<p>A prefetch schedule allows you to tell MediaTailor to fetch and prepare certain ads before an ad break happens. For more information about ad prefetching, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/prefetching-ads.html\">Using ad prefetching</a> in the <i>MediaTailor User Guide</i>.</p>"
     },
+    "PrefetchScheduleType":{
+      "type":"string",
+      "enum":[
+        "SINGLE",
+        "RECURRING"
+      ]
+    },
     "PutChannelPolicyRequest":{
       "type":"structure",
       "required":[
@@ -2881,8 +3126,7 @@
     },
     "PutChannelPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutPlaybackConfigurationRequest":{
       "type":"structure",
@@ -2906,7 +3150,7 @@
         },
         "ConfigurationAliases":{
           "shape":"ConfigurationAliasesRequest",
-          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html\">Domain Variables</a>.</p>"
+          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domains.html\">Domain Variables</a>.</p>"
         },
         "DashConfiguration":{
           "shape":"DashConfigurationForPut",
@@ -2948,6 +3192,10 @@
         "VideoContentSourceUrl":{
           "shape":"__string",
           "documentation":"<p>The URL prefix for the parent manifest for the stream, minus the asset ID. The maximum length is 512 characters.</p>"
+        },
+        "AdConditioningConfiguration":{
+          "shape":"AdConditioningConfiguration",
+          "documentation":"<p>The setting that indicates what conditioning MediaTailor will perform on ads that the ad decision server (ADS) returns, and what priority MediaTailor uses when inserting ads. </p>"
         }
       }
     },
@@ -2972,7 +3220,7 @@
         },
         "ConfigurationAliases":{
           "shape":"ConfigurationAliasesResponse",
-          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domain.html\">Domain Variables</a>.</p>"
+          "documentation":"<p>The player parameters and aliases used as dynamic variables during session initialization. For more information, see <a href=\"https://docs.aws.amazon.com/mediatailor/latest/ug/variables-domains.html\">Domain Variables</a>.</p>"
         },
         "DashConfiguration":{
           "shape":"DashConfiguration",
@@ -2992,7 +3240,7 @@
         },
         "LogConfiguration":{
           "shape":"LogConfiguration",
-          "documentation":"<p>The Amazon CloudWatch log settings for a playback configuration.</p>"
+          "documentation":"<p>The configuration that defines where AWS Elemental MediaTailor sends logs for the playback configuration.</p>"
         },
         "ManifestProcessingRules":{
           "shape":"ManifestProcessingRules",
@@ -3034,9 +3282,80 @@
         "VideoContentSourceUrl":{
           "shape":"__string",
           "documentation":"<p>The URL prefix for the parent manifest for the stream, minus the asset ID. The maximum length is 512 characters.</p>"
+        },
+        "AdConditioningConfiguration":{
+          "shape":"AdConditioningConfiguration",
+          "documentation":"<p>The setting that indicates what conditioning MediaTailor will perform on ads that the ad decision server (ADS) returns, and what priority MediaTailor uses when inserting ads. </p>"
         }
       }
     },
+    "RecurringConsumption":{
+      "type":"structure",
+      "members":{
+        "RetrievedAdExpirationSeconds":{
+          "shape":"__integer",
+          "documentation":"<p>The number of seconds that an ad is available for insertion after it was prefetched.</p>"
+        },
+        "AvailMatchingCriteria":{
+          "shape":"__listOfAvailMatchingCriteria",
+          "documentation":"<p>The configuration for the dynamic variables that determine which ad breaks that MediaTailor inserts prefetched ads in.</p>"
+        }
+      },
+      "documentation":"<p>The settings that determine how and when MediaTailor places prefetched ads into upcoming ad breaks for recurring prefetch scedules.</p>"
+    },
+    "RecurringPrefetchConfiguration":{
+      "type":"structure",
+      "required":[
+        "EndTime",
+        "RecurringConsumption",
+        "RecurringRetrieval"
+      ],
+      "members":{
+        "StartTime":{
+          "shape":"__timestampUnix",
+          "documentation":"<p>The start time for the window that MediaTailor prefetches and inserts ads in a live event. </p>"
+        },
+        "EndTime":{
+          "shape":"__timestampUnix",
+          "documentation":"<p>The end time for the window that MediaTailor prefetches and inserts ads in a live event. </p>"
+        },
+        "RecurringConsumption":{
+          "shape":"RecurringConsumption",
+          "documentation":"<p>The settings that determine how and when MediaTailor places prefetched ads into upcoming ad breaks for recurring prefetch scedules.</p>"
+        },
+        "RecurringRetrieval":{
+          "shape":"RecurringRetrieval",
+          "documentation":"<p>The configuration for prefetch ad retrieval from the ADS.</p>"
+        }
+      },
+      "documentation":"<p>The configuration that defines how MediaTailor performs recurring prefetch. </p>"
+    },
+    "RecurringRetrieval":{
+      "type":"structure",
+      "members":{
+        "DynamicVariables":{
+          "shape":"__mapOf__string",
+          "documentation":"<p>The dynamic variables to use for substitution during prefetch requests to the ADS.</p>"
+        },
+        "DelayAfterAvailEndSeconds":{
+          "shape":"__integer",
+          "documentation":"<p>The number of seconds that MediaTailor waits after an ad avail before prefetching ads for the next avail. If not set, the default is 0 (no delay).</p>"
+        },
+        "TrafficShapingType":{
+          "shape":"TrafficShapingType",
+          "documentation":"<p>Indicates the type of traffic shaping used for traffic shaping and limiting the number of requests to the ADS at one time.</p>"
+        },
+        "TrafficShapingRetrievalWindow":{
+          "shape":"TrafficShapingRetrievalWindow",
+          "documentation":"<p>Configuration for spreading ADS traffic across a set window instead of sending ADS requests for all sessions at the same time.</p>"
+        },
+        "TrafficShapingTpsConfiguration":{
+          "shape":"TrafficShapingTpsConfiguration",
+          "documentation":"<p>The configuration for TPS-based traffic shaping that limits the number of requests to the ad decision server (ADS) based on transactions per second instead of time windows.</p>"
+        }
+      },
+      "documentation":"<p>With recurring prefetch, MediaTailor automatically prefetches ads for every avail that occurs during the retrieval window. The following configurations describe the MediaTailor behavior when prefetching ads for a live event.</p>"
+    },
     "RelativePosition":{
       "type":"string",
       "enum":[
@@ -3136,13 +3455,13 @@
       "type":"structure",
       "required":["Transition"],
       "members":{
-        "ClipRange":{
-          "shape":"ClipRange",
-          "documentation":"<p>Program clip range configuration.</p>"
-        },
         "Transition":{
           "shape":"Transition",
           "documentation":"<p>Program transition configurations.</p>"
+        },
+        "ClipRange":{
+          "shape":"ClipRange",
+          "documentation":"<p>Program clip range configuration.</p>"
         }
       },
       "documentation":"<p>Schedule configuration parameters. A channel must be stopped before changes can be made to the schedule.</p>"
@@ -3168,10 +3487,6 @@
           "shape":"__string",
           "documentation":"<p>The ARN of the program.</p>"
         },
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in ScheduleEntry.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel that uses this schedule.</p>"
@@ -3199,6 +3514,10 @@
         "VodSourceName":{
           "shape":"__string",
           "documentation":"<p>The name of the VOD source.</p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in ScheduleEntry.</p>"
         }
       },
       "documentation":"<p>The properties for a schedule.</p>"
@@ -3246,25 +3565,25 @@
     "SegmentationDescriptor":{
       "type":"structure",
       "members":{
-        "SegmentNum":{
-          "shape":"Integer",
-          "documentation":"<p>The segment number to assign to the <code>segmentation_descriptor.segment_num</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification Values must be between 0 and 256, inclusive. The default value is 0.</p>"
-        },
         "SegmentationEventId":{
           "shape":"Integer",
           "documentation":"<p>The Event Identifier to assign to the <code>segmentation_descriptor.segmentation_event_id</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. The default value is 1.</p>"
         },
-        "SegmentationTypeId":{
+        "SegmentationUpidType":{
           "shape":"Integer",
-          "documentation":"<p>The Type Identifier to assign to the <code>segmentation_descriptor.segmentation_type_id</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and 256, inclusive. The default value is 48.</p>"
+          "documentation":"<p>The Upid Type to assign to the <code>segmentation_descriptor.segmentation_upid_type</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and 256, inclusive. The default value is 14.</p>"
         },
         "SegmentationUpid":{
           "shape":"String",
           "documentation":"<p>The Upid to assign to the <code>segmentation_descriptor.segmentation_upid</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. The value must be a hexadecimal string containing only the characters 0 though 9 and A through F. The default value is \"\" (an empty string).</p>"
         },
-        "SegmentationUpidType":{
+        "SegmentationTypeId":{
           "shape":"Integer",
-          "documentation":"<p>The Upid Type to assign to the <code>segmentation_descriptor.segmentation_upid_type</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and 256, inclusive. The default value is 14.</p>"
+          "documentation":"<p>The Type Identifier to assign to the <code>segmentation_descriptor.segmentation_type_id</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification. Values must be between 0 and 256, inclusive. The default value is 48.</p>"
+        },
+        "SegmentNum":{
+          "shape":"Integer",
+          "documentation":"<p>The segment number to assign to the <code>segmentation_descriptor.segment_num</code> message, as defined in section 10.3.3.1 of the 2022 SCTE-35 specification Values must be between 0 and 256, inclusive. The default value is 0.</p>"
         },
         "SegmentsExpected":{
           "shape":"Integer",
@@ -3383,8 +3702,7 @@
     },
     "StartChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopChannelRequest":{
       "type":"structure",
@@ -3400,8 +3718,14 @@
     },
     "StopChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "StreamingMediaFileConditioning":{
+      "type":"string",
+      "enum":[
+        "TRANSCODE",
+        "NONE"
+      ]
     },
     "String":{"type":"string"},
     "TagResourceRequest":{
@@ -3452,6 +3776,37 @@
       },
       "documentation":"<p>The SCTE-35 <code>time_signal</code> message can be sent with one or more <code>segmentation_descriptor</code> messages. A <code>time_signal</code> message can be sent only if a single <code>segmentation_descriptor</code> message is sent.</p> <p>The <code>time_signal</code> message contains only the <code>splice_time</code> field which is constructed using a given presentation timestamp. When sending a <code>time_signal</code> message, the <code>splice_command_type</code> field in the <code>splice_info_section</code> message is set to 6 (0x06).</p> <p>See the <code>time_signal()</code> table of the 2022 SCTE-35 specification for more information.</p>"
     },
+    "TrafficShapingRetrievalWindow":{
+      "type":"structure",
+      "members":{
+        "RetrievalWindowDurationSeconds":{
+          "shape":"__integer",
+          "documentation":"<p>The amount of time, in seconds, that MediaTailor spreads prefetch requests to the ADS. </p>"
+        }
+      },
+      "documentation":"<p>The configuration that tells Elemental MediaTailor how to spread out requests to the ad decision server (ADS). Instead of sending ADS requests for all sessions at the same time, MediaTailor spreads the requests across the amount of time specified in the retrieval window.</p>"
+    },
+    "TrafficShapingTpsConfiguration":{
+      "type":"structure",
+      "members":{
+        "PeakTps":{
+          "shape":"__integer",
+          "documentation":"<p>The maximum number of transactions per second (TPS) that your ad decision server (ADS) can handle. MediaTailor uses this value along with concurrent users and headroom multiplier to calculate optimal traffic distribution and prevent ADS overload.</p>"
+        },
+        "PeakConcurrentUsers":{
+          "shape":"__integer",
+          "documentation":"<p>The expected peak number of concurrent viewers for your content. MediaTailor uses this value along with peak TPS to determine how to distribute prefetch requests across the available capacity without exceeding your ADS limits.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for TPS-based traffic shaping. This approach limits requests to the ad decision server (ADS) based on transactions per second and concurrent users, providing more intuitive capacity management compared to time-window based traffic shaping.</p>"
+    },
+    "TrafficShapingType":{
+      "type":"string",
+      "enum":[
+        "RETRIEVAL_WINDOW",
+        "TPS"
+      ]
+    },
     "Transition":{
       "type":"structure",
       "required":[
@@ -3517,10 +3872,6 @@
         "Outputs"
       ],
       "members":{
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel.</p>",
@@ -3538,6 +3889,10 @@
         "TimeShiftConfiguration":{
           "shape":"TimeShiftConfiguration",
           "documentation":"<p> The time-shifted viewing configuration you want to associate to the channel. </p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       }
     },
@@ -3548,10 +3903,6 @@
           "shape":"__string",
           "documentation":"<p>The Amazon Resource Name (ARN) associated with the channel.</p>"
         },
-        "Audiences":{
-          "shape":"Audiences",
-          "documentation":"<p>The list of audiences defined in channel.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel.</p>"
@@ -3592,6 +3943,10 @@
         "TimeShiftConfiguration":{
           "shape":"TimeShiftConfiguration",
           "documentation":"<p> The time-shifted viewing configuration for the channel. </p>"
+        },
+        "Audiences":{
+          "shape":"Audiences",
+          "documentation":"<p>The list of audiences defined in channel.</p>"
         }
       }
     },
@@ -3667,10 +4022,6 @@
           "shape":"__listOfAdBreak",
           "documentation":"<p>The ad break configuration settings.</p>"
         },
-        "AudienceMedia":{
-          "shape":"__listOfAudienceMedia",
-          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name of the channel for this Program.</p>",
@@ -3686,6 +4037,10 @@
         "ScheduleConfiguration":{
           "shape":"UpdateProgramScheduleConfiguration",
           "documentation":"<p>The schedule configuration settings.</p>"
+        },
+        "AudienceMedia":{
+          "shape":"__listOfAudienceMedia",
+          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
         }
       }
     },
@@ -3700,38 +4055,18 @@
           "shape":"__string",
           "documentation":"<p>The ARN to assign to the program.</p>"
         },
-        "AudienceMedia":{
-          "shape":"__listOfAudienceMedia",
-          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
-        },
         "ChannelName":{
           "shape":"__string",
           "documentation":"<p>The name to assign to the channel for this program.</p>"
         },
-        "ClipRange":{
-          "shape":"ClipRange",
-          "documentation":"<p>The clip range configuration settings.</p>"
-        },
         "CreationTime":{
           "shape":"__timestampUnix",
           "documentation":"<p>The time the program was created.</p>"
         },
-        "DurationMillis":{
-          "shape":"__long",
-          "documentation":"<p>The duration of the live program in milliseconds.</p>"
-        },
-        "LiveSourceName":{
-          "shape":"__string",
-          "documentation":"<p>The name of the LiveSource for this Program.</p>"
-        },
         "ProgramName":{
           "shape":"__string",
           "documentation":"<p>The name to assign to this program.</p>"
         },
-        "ScheduledStartTime":{
-          "shape":"__timestampUnix",
-          "documentation":"<p>The scheduled start time for this Program.</p>"
-        },
         "SourceLocationName":{
           "shape":"__string",
           "documentation":"<p>The name to assign to the source location for this program.</p>"
@@ -3739,19 +4074,39 @@
         "VodSourceName":{
           "shape":"__string",
           "documentation":"<p>The name that's used to refer to a VOD source.</p>"
+        },
+        "LiveSourceName":{
+          "shape":"__string",
+          "documentation":"<p>The name of the LiveSource for this Program.</p>"
+        },
+        "ClipRange":{
+          "shape":"ClipRange",
+          "documentation":"<p>The clip range configuration settings.</p>"
+        },
+        "DurationMillis":{
+          "shape":"__long",
+          "documentation":"<p>The duration of the live program in milliseconds.</p>"
+        },
+        "ScheduledStartTime":{
+          "shape":"__timestampUnix",
+          "documentation":"<p>The scheduled start time for this Program.</p>"
+        },
+        "AudienceMedia":{
+          "shape":"__listOfAudienceMedia",
+          "documentation":"<p>The list of AudienceMedia defined in program.</p>"
         }
       }
     },
     "UpdateProgramScheduleConfiguration":{
       "type":"structure",
       "members":{
-        "ClipRange":{
-          "shape":"ClipRange",
-          "documentation":"<p>Program clip range configuration.</p>"
-        },
         "Transition":{
           "shape":"UpdateProgramTransition",
           "documentation":"<p>Program transition configuration.</p>"
+        },
+        "ClipRange":{
+          "shape":"ClipRange",
+          "documentation":"<p>Program clip range configuration.</p>"
         }
       },
       "documentation":"<p>Schedule configuration parameters.</p>"
@@ -3759,13 +4114,13 @@
     "UpdateProgramTransition":{
       "type":"structure",
       "members":{
-        "DurationMillis":{
-          "shape":"__long",
-          "documentation":"<p>The duration of the live program in seconds.</p>"
-        },
         "ScheduledStartTimeMillis":{
           "shape":"__long",
           "documentation":"<p>The date and time that the program is scheduled to start, in epoch milliseconds.</p>"
+        },
+        "DurationMillis":{
+          "shape":"__long",
+          "documentation":"<p>The duration of the live program in seconds.</p>"
         }
       },
       "documentation":"<p>Program transition configuration.</p>"
@@ -3944,6 +4299,14 @@
       },
       "documentation":"<p>VOD source configuration parameters.</p>"
     },
+    "__adsInteractionExcludeEventTypesList":{
+      "type":"list",
+      "member":{"shape":"AdsInteractionExcludeEventType"}
+    },
+    "__adsInteractionPublishOptInEventTypesList":{
+      "type":"list",
+      "member":{"shape":"AdsInteractionPublishOptInEventType"}
+    },
     "__boolean":{
       "type":"boolean",
       "box":true
@@ -3991,6 +4354,10 @@
       "type":"list",
       "member":{"shape":"LiveSource"}
     },
+    "__listOfLoggingStrategies":{
+      "type":"list",
+      "member":{"shape":"LoggingStrategy"}
+    },
     "__listOfPlaybackConfiguration":{
       "type":"list",
       "member":{"shape":"PlaybackConfiguration"}
@@ -4027,6 +4394,10 @@
       "type":"long",
       "box":true
     },
+    "__manifestServiceExcludeEventTypesList":{
+      "type":"list",
+      "member":{"shape":"ManifestServiceExcludeEventType"}
+    },
     "__mapOf__string":{
       "type":"map",
       "key":{"shape":"__string"},
diff -pruN 2.23.6-1/awscli/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/medical-imaging/2023-07-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/medical-imaging/2023-07-19/service-2.json 2.31.35-1/awscli/botocore/data/medical-imaging/2023-07-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/medical-imaging/2023-07-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/medical-imaging/2023-07-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -49,6 +49,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
       "documentation":"<p>Create a data store.</p>",
@@ -112,7 +113,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Get the import job properties to learn more about the job or job progress.</p> <note> <p>The <code>jobStatus</code> refers to the execution of the import job. Therefore, an import job can return a <code>jobStatus</code> as <code>COMPLETED</code> even if validation issues are discovered during the import process. If a <code>jobStatus</code> returns as <code>COMPLETED</code>, we still recommend you review the output manifests written to S3, as they provide details on the success or failure of individual P10 object imports.</p> </note>"
+      "documentation":"<p>Get the import job properties to learn more about the job or job progress.</p> <note> <p>The <code>jobStatus</code> refers to the execution of the import job. Therefore, an import job can return a <code>jobStatus</code> as <code>COMPLETED</code> even if validation issues are discovered during the import process. If a <code>jobStatus</code> returns as <code>COMPLETED</code>, we still recommend you review the output manifests written to S3, as they provide details on the success or failure of individual P10 object imports.</p> </note>",
+      "readonly":true
     },
     "GetDatastore":{
       "name":"GetDatastore",
@@ -130,7 +132,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Get data store properties.</p>"
+      "documentation":"<p>Get data store properties.</p>",
+      "readonly":true
     },
     "GetImageFrame":{
       "name":"GetImageFrame",
@@ -150,7 +153,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Get an image frame (pixel data) for an image set.</p>",
-      "endpoint":{"hostPrefix":"runtime-"}
+      "endpoint":{"hostPrefix":"runtime-"},
+      "readonly":true
     },
     "GetImageSet":{
       "name":"GetImageSet",
@@ -170,7 +174,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Get image set properties.</p>",
-      "endpoint":{"hostPrefix":"runtime-"}
+      "endpoint":{"hostPrefix":"runtime-"},
+      "readonly":true
     },
     "GetImageSetMetadata":{
       "name":"GetImageSetMetadata",
@@ -190,7 +195,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Get metadata attributes for an image set.</p>",
-      "endpoint":{"hostPrefix":"runtime-"}
+      "endpoint":{"hostPrefix":"runtime-"},
+      "readonly":true
     },
     "ListDICOMImportJobs":{
       "name":"ListDICOMImportJobs",
@@ -209,7 +215,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>List import jobs created for a specific data store.</p>"
+      "documentation":"<p>List import jobs created for a specific data store.</p>",
+      "readonly":true
     },
     "ListDatastores":{
       "name":"ListDatastores",
@@ -226,7 +233,8 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List data stores.</p>"
+      "documentation":"<p>List data stores.</p>",
+      "readonly":true
     },
     "ListImageSetVersions":{
       "name":"ListImageSetVersions",
@@ -246,7 +254,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>List image set versions.</p>",
-      "endpoint":{"hostPrefix":"runtime-"}
+      "endpoint":{"hostPrefix":"runtime-"},
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -264,7 +273,8 @@
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Lists all tags associated with a medical imaging resource.</p>"
+      "documentation":"<p>Lists all tags associated with a medical imaging resource.</p>",
+      "readonly":true
     },
     "SearchImageSets":{
       "name":"SearchImageSets",
@@ -517,9 +527,15 @@
         },
         "force":{
           "shape":"Boolean",
-          "documentation":"<p>Setting this flag will force the <code>CopyImageSet</code> operation, even if Patient, Study, or Series level metadata are mismatched across the <code>sourceImageSet</code> and <code>destinationImageSet</code>.</p>",
+          "documentation":"<p>Providing this parameter will force completion of the <code>CopyImageSet</code> operation, even if there are inconsistent Patient, Study, and/or Series level metadata elements between the <code>sourceImageSet</code> and <code>destinationImageSet</code>.</p>",
           "location":"querystring",
           "locationName":"force"
+        },
+        "promoteToPrimary":{
+          "shape":"Boolean",
+          "documentation":"<p>Providing this parameter will configure the <code>CopyImageSet</code> operation to promote the given image set to the primary DICOM hierarchy. If successful, a new primary image set ID will be returned as the destination image set.</p>",
+          "location":"querystring",
+          "locationName":"promoteToPrimary"
         }
       },
       "payload":"copyImageSetInformation"
@@ -619,6 +635,14 @@
         "kmsKeyArn":{
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) assigned to the Key Management Service (KMS) key for accessing encrypted data.</p>"
+        },
+        "lambdaAuthorizerArn":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The ARN of the authorizer's Lambda function.</p>"
+        },
+        "losslessStorageFormat":{
+          "shape":"LosslessStorageFormat",
+          "documentation":"<p>The lossless storage format for the datastore.</p>"
         }
       }
     },
@@ -756,7 +780,7 @@
     },
     "DICOMNumberOfStudyRelatedInstances":{
       "type":"integer",
-      "max":10000,
+      "max":1000000,
       "min":0
     },
     "DICOMNumberOfStudyRelatedSeries":{
@@ -798,7 +822,7 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"(?:[0-9][0-9]*|0)(\\.(?:[1-9][0-9]*|0))*",
+      "pattern":"(?:[0-9][0-9]*|0)(\\.(?:[0-9][0-9]*|0))*",
       "sensitive":true
     },
     "DICOMSeriesModality":{
@@ -837,13 +861,13 @@
     },
     "DICOMStudyDescription":{
       "type":"string",
-      "max":64,
+      "max":256,
       "min":0,
       "sensitive":true
     },
     "DICOMStudyId":{
       "type":"string",
-      "max":16,
+      "max":256,
       "min":0,
       "sensitive":true
     },
@@ -851,7 +875,7 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"(?:[0-9][0-9]*|0)(\\.(?:[1-9][0-9]*|0))*",
+      "pattern":"(?:[0-9][0-9]*|0)(\\.(?:[0-9][0-9]*|0))*",
       "sensitive":true
     },
     "DICOMStudyTime":{
@@ -978,6 +1002,14 @@
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) assigned to the Key Management Service (KMS) key for accessing encrypted data.</p>"
         },
+        "lambdaAuthorizerArn":{
+          "shape":"LambdaArn",
+          "documentation":"<p>The ARN of the authorizer's Lambda function.</p>"
+        },
+        "losslessStorageFormat":{
+          "shape":"LosslessStorageFormat",
+          "documentation":"<p>The datastore's lossless storage format.</p>"
+        },
         "datastoreArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) for the data store.</p>"
@@ -1210,7 +1242,7 @@
         },
         "contentType":{
           "shape":"String",
-          "documentation":"<p>The format in which the image frame information is returned to the customer. Default is <code>application/octet-stream</code>.</p>",
+          "documentation":"<p>The format in which the image frame information is returned to the customer. Default is <code>application/octet-stream</code>.</p> <note> <ul> <li> <p>If the stored transfer syntax is <code>1.2.840.10008.1.2.1</code>, the returned <code>contentType</code> is <code>application/octet-stream</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is <code>1.2.840.10008.1.2.4.50</code>, the returned <code>contentType</code> is <code>image/jpeg</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is <code>1.2.840.10008.1.2.4.91</code>, the returned <code>contentType</code> is <code>image/j2c</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is MPEG2, <code>1.2.840.10008.1.2.4.100</code>, <code>1.2.840.10008.1.2.4.100.1</code>, <code>1.2.840.10008.1.2.4.101</code>, or <code>1.2.840.10008.1.2.4.101.1</code>, the returned <code>contentType</code> is <code>video/mpeg</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is MPEG-4 AVC/H.264, UID <code>1.2.840.10008.1.2.4.102</code>, <code>1.2.840.10008.1.2.4.102.1</code>, <code>1.2.840.10008.1.2.4.103</code>, <code>1.2.840.10008.1.2.4.103.1</code>, <code>1.2.840.10008.1.2.4.104</code>, <code>1.2.840.10008.1.2.4.104.1</code>, <code>1.2.840.10008.1.2.4.105</code>, <code>1.2.840.10008.1.2.4.105.1</code>, <code>1.2.840.10008.1.2.4.106</code>, or <code>1.2.840.10008.1.2.4.106.1</code>, the returned <code>contentType</code> is <code>video/mp4</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is HEVC/H.265, UID <code>1.2.840.10008.1.2.4.107</code> or <code>1.2.840.10008.1.2.4.108</code>, the returned <code>contentType</code> is <code>video/H256</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is <code>1.2.840.10008.1.2.4.202</code> or if the stored transfer syntax is <i>missing</i>, the returned <code>contentType</code> is <code>image/jph</code>.</p> </li> </ul> <ul> <li> <p>If the stored transfer syntax is <code>1.2.840.10008.1.2.4.203</code>, the returned contentType is <code>image/jphc</code>.</p> </li> </ul> </note>",
           "location":"header",
           "locationName":"Content-Type"
         }
@@ -1346,6 +1378,18 @@
         "overrides":{
           "shape":"Overrides",
           "documentation":"<p>This object contains the details of any overrides used while creating a specific image set version. If an image set was copied or updated using the <code>force</code> flag, this object will contain the <code>forced</code> flag.</p>"
+        },
+        "isPrimary":{
+          "shape":"Boolean",
+          "documentation":"<p>The flag to determine whether the image set is primary or not.</p>"
+        },
+        "lastAccessedAt":{
+          "shape":"Date",
+          "documentation":"<p>When the image set was last accessed.</p>"
+        },
+        "storageTier":{
+          "shape":"StorageTier",
+          "documentation":"<p>The storage tier of the image set.</p>"
         }
       }
     },
@@ -1419,6 +1463,10 @@
         "overrides":{
           "shape":"Overrides",
           "documentation":"<p>Contains details on overrides used when creating the returned version of an image set. For example, if <code>forced</code> exists, the <code>forced</code> flag was used when creating the image set.</p>"
+        },
+        "isPrimary":{
+          "shape":"Boolean",
+          "documentation":"<p>The flag to determine whether the image set is primary or not.</p>"
         }
       },
       "documentation":"<p>The image set properties.</p>"
@@ -1447,7 +1495,10 @@
         "UPDATED",
         "UPDATE_FAILED",
         "DELETING",
-        "DELETED"
+        "DELETED",
+        "IMPORTING",
+        "IMPORTED",
+        "IMPORT_FAILED"
       ]
     },
     "ImageSetsMetadataSummaries":{
@@ -1474,9 +1525,21 @@
           "shape":"Date",
           "documentation":"<p>The time an image set was last updated.</p>"
         },
+        "lastAccessedAt":{
+          "shape":"Date",
+          "documentation":"<p>When the image set was last accessed.</p>"
+        },
+        "storageTier":{
+          "shape":"StorageTier",
+          "documentation":"<p>The image set's storage tier.</p>"
+        },
         "DICOMTags":{
           "shape":"DICOMTags",
           "documentation":"<p>The DICOM tags associated with the image set.</p>"
+        },
+        "isPrimary":{
+          "shape":"Boolean",
+          "documentation":"<p>The flag to determine whether the image set is primary or not.</p>"
         }
       },
       "documentation":"<p>Summary of the image set metadata.</p>"
@@ -1524,6 +1587,10 @@
       "min":1,
       "pattern":"arn:aws[a-zA-Z-]{0,16}:kms:[a-z]{2}(-[a-z]{1,16}){1,3}-\\d{1}:\\d{12}:((key/[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})|(alias/[a-zA-Z0-9:/_-]{1,256}))"
     },
+    "LambdaArn":{
+      "type":"string",
+      "pattern":"arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
+    },
     "ListDICOMImportJobsRequest":{
       "type":"structure",
       "required":["datastoreId"],
@@ -1691,6 +1758,13 @@
         }
       }
     },
+    "LosslessStorageFormat":{
+      "type":"string",
+      "enum":[
+        "HTJ2K",
+        "JPEG_2000_LOSSLESS"
+      ]
+    },
     "Message":{
       "type":"string",
       "max":2048,
@@ -1741,7 +1815,7 @@
       "members":{
         "forced":{
           "shape":"Boolean",
-          "documentation":"<p>Setting this flag will force the <code>CopyImageSet</code> and <code>UpdateImageSetMetadata</code> operations, even if Patient, Study, or Series level metadata are mismatched.</p>"
+          "documentation":"<p>Providing this parameter will force completion of the <code>CopyImageSet</code> and <code>UpdateImageSetMetadata</code> actions, even if metadata is inconsistent at the Patient, Study, and/or Series levels.</p>"
         }
       },
       "documentation":"<p>Specifies the overrides used in image set modification calls to <code>CopyImageSet</code> and <code>UpdateImageSetMetadata</code>.</p>"
@@ -1809,6 +1883,10 @@
         "DICOMStudyDateAndTime":{
           "shape":"DICOMStudyDateAndTime",
           "documentation":"<p>The aggregated structure containing DICOM study date and study time for search.</p>"
+        },
+        "isPrimary":{
+          "shape":"Boolean",
+          "documentation":"<p>The primary image set flag provided for search.</p>"
         }
       },
       "documentation":"<p>The search input attribute value.</p>",
@@ -2028,6 +2106,14 @@
         }
       }
     },
+    "StorageTier":{
+      "type":"string",
+      "documentation":"<p>Storage tier for image sets</p>",
+      "enum":[
+        "FREQUENT_ACCESS",
+        "ARCHIVE_INSTANT_ACCESS"
+      ]
+    },
     "String":{"type":"string"},
     "TagKey":{
       "type":"string",
@@ -2067,8 +2153,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2111,8 +2196,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateImageSetMetadataRequest":{
       "type":"structure",
@@ -2211,5 +2295,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>This is the <i>AWS HealthImaging API Reference</i>. AWS HealthImaging is a HIPAA eligible service that empowers healthcare providers, life science organizations, and their software partners to store, analyze, and share medical images in the cloud at petabyte scale. For an introduction to the service, see the <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/what-is.html\"> <i>AWS HealthImaging Developer Guide</i> </a>.</p> <note> <p>We recommend using one of the AWS Software Development Kits (SDKs) for your programming language, as they take care of request authentication, serialization, and connection management. For more information, see <a href=\"http://aws.amazon.com/developer/tools\">Tools to build on AWS</a>.</p> </note> <p>The following sections list AWS HealthImaging API actions categorized according to functionality. Links are provided to actions within this Reference, along with links back to corresponding sections in the <i>AWS HealthImaging Developer Guide</i> where you can view tested code examples.</p> <p class=\"title\"> <b>Data store actions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_CreateDatastore.html\">CreateDatastore</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/create-data-store.html\">Creating a data store</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_GetDatastore.html\">GetDatastore</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/get-data-store.html\">Getting data store properties</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_ListDatastores.html\">ListDatastores</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/list-data-stores.html\">Listing data stores</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_DeleteDatastore.html\">DeleteDatastore</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/delete-data-store.html\">Deleting a data store</a>.</p> </li> </ul> <p class=\"title\"> <b>Import job actions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_StartDICOMImportJob.html\">StartDICOMImportJob</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/start-dicom-import-job.html\">Starting an import job</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_GetDICOMImportJob.html\">GetDICOMImportJob</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/get-dicom-import-job.html\">Getting import job properties</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_ListDICOMImportJobs.html\">ListDICOMImportJobs</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/list-dicom-import-jobs.html\">Listing import jobs</a>.</p> </li> </ul> <p class=\"title\"> <b>Image set access actions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_SearchImageSets.html\">SearchImageSets</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/search-image-sets.html\">Searching image sets</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_GetImageSet.html\">GetImageSet</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/get-image-set-properties.html\">Getting image set properties</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_GetImageSetMetadata.html\">GetImageSetMetadata</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/get-image-set-metadata.html\">Getting image set metadata</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_GetImageFrame.html\">GetImageFrame</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/get-image-frame.html\">Getting image set pixel data</a>.</p> </li> </ul> <p class=\"title\"> <b>Image set modification actions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_ListImageSetVersions.html\">ListImageSetVersions</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/list-image-set-versions.html\">Listing image set versions</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_UpdateImageSetMetadata.html\">UpdateImageSetMetadata</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/update-image-set-metadata.html\">Updating image set metadata</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_CopyImageSet.html\">CopyImageSet</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/copy-image-set.html\">Copying an image set</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_DeleteImageSet.html\">DeleteImageSet</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/delete-image-set.html\">Deleting an image set</a>.</p> </li> </ul> <p class=\"title\"> <b>Tagging actions</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_TagResource.html\">TagResource</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/tag-resource.html\">Tagging a resource</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_ListTagsForResource.html\">ListTagsForResource</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/list-tag-resource.html\">Listing tags for a resource</a>.</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/healthimaging/latest/APIReference/API_UntagResource.html\">UntagResource</a> – See <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/untag-resource.html\">Untagging a resource</a>.</p> </li> </ul>"
+  "documentation":"<p>This is the <i>AWS HealthImaging API Reference</i>. For an introduction to the service, see <a href=\"https://docs.aws.amazon.com/healthimaging/latest/devguide/what-is.html\">What is AWS HealthImaging?</a> in the <i>AWS HealthImaging Developer Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/memorydb/2021-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/memorydb/2021-01-01/service-2.json 2.31.35-1/awscli/botocore/data/memorydb/2021-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/memorydb/2021-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/memorydb/2021-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -381,6 +381,38 @@
       ],
       "documentation":"<p>Returns details about one or more multi-Region clusters.</p>"
     },
+    "DescribeMultiRegionParameterGroups":{
+      "name":"DescribeMultiRegionParameterGroups",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMultiRegionParameterGroupsRequest"},
+      "output":{"shape":"DescribeMultiRegionParameterGroupsResponse"},
+      "errors":[
+        {"shape":"MultiRegionParameterGroupNotFoundFault"},
+        {"shape":"ServiceLinkedRoleNotFoundFault"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InvalidParameterCombinationException"}
+      ],
+      "documentation":"<p>Returns a list of multi-region parameter groups.</p>"
+    },
+    "DescribeMultiRegionParameters":{
+      "name":"DescribeMultiRegionParameters",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeMultiRegionParametersRequest"},
+      "output":{"shape":"DescribeMultiRegionParametersResponse"},
+      "errors":[
+        {"shape":"MultiRegionParameterGroupNotFoundFault"},
+        {"shape":"ServiceLinkedRoleNotFoundFault"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InvalidParameterCombinationException"}
+      ],
+      "documentation":"<p>Returns the detailed parameter list for a particular multi-region parameter group.</p>"
+    },
     "DescribeParameterGroups":{
       "name":"DescribeParameterGroups",
       "http":{
@@ -575,7 +607,7 @@
         {"shape":"MultiRegionClusterNotFoundFault"},
         {"shape":"MultiRegionParameterGroupNotFoundFault"}
       ],
-      "documentation":"<p>Lists all tags currently on a named resource. A tag is a key-value pair where the key and value are case-sensitive. You can use tags to categorize and track your MemoryDB resources. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p>"
+      "documentation":"<p>Lists all tags currently on a named resource. A tag is a key-value pair where the key and value are case-sensitive. You can use tags to categorize and track your MemoryDB resources. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p>When you add or remove tags from multi region clusters, you might not immediately see the latest effective tags in the ListTags API response due to it being eventually consistent specifically for multi region clusters. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p/>"
     },
     "PurchaseReservedNodesOffering":{
       "name":"PurchaseReservedNodesOffering",
@@ -636,7 +668,7 @@
         {"shape":"ServiceLinkedRoleNotFoundFault"},
         {"shape":"InvalidParameterValueException"}
       ],
-      "documentation":"<p>A tag is a key-value pair where the key and value are case-sensitive. You can use tags to categorize and track all your MemoryDB resources. When you add or remove tags on clusters, those actions will be replicated to all nodes in the cluster. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/iam.resourcelevelpermissions.html\">Resource-level permissions</a>.</p> <p>For example, you can use cost-allocation tags to your MemoryDB resources, Amazon generates a cost allocation report as a comma-separated value (CSV) file with your usage and costs aggregated by your tags. You can apply tags that represent business categories (such as cost centers, application names, or owners) to organize your costs across multiple services. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/tagging.html\">Using Cost Allocation Tags</a>.</p>"
+      "documentation":"<p> Use this operation to add tags to a resource. A tag is a key-value pair where the key and value are case-sensitive. You can use tags to categorize and track all your MemoryDB resources. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p>When you add tags to multi region clusters, you might not immediately see the latest effective tags in the ListTags API response due to it being eventually consistent specifically for multi region clusters. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p>You can specify cost-allocation tags for your MemoryDB resources, Amazon generates a cost allocation report as a comma-separated value (CSV) file with your usage and costs aggregated by your tags. You can apply tags that represent business categories (such as cost centers, application names, or owners) to organize your costs across multiple services. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/tagging.html\">Using Cost Allocation Tags</a>.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -661,7 +693,7 @@
         {"shape":"MultiRegionClusterNotFoundFault"},
         {"shape":"MultiRegionParameterGroupNotFoundFault"}
       ],
-      "documentation":"<p>Use this operation to remove tags on a resource.</p>"
+      "documentation":"<p>Use this operation to remove tags on a resource. A tag is a key-value pair where the key and value are case-sensitive. You can use tags to categorize and track all your MemoryDB resources. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p>When you remove tags from multi region clusters, you might not immediately see the latest effective tags in the ListTags API response due to it being eventually consistent specifically for multi region clusters. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/Tagging-Resources.html\">Tagging your MemoryDB resources</a>.</p> <p>You can specify cost-allocation tags for your MemoryDB resources, Amazon generates a cost allocation report as a comma-separated value (CSV) file with your usage and costs aggregated by your tags. You can apply tags that represent business categories (such as cost centers, application names, or owners) to organize your costs across multiple services. For more information, see <a href=\"https://docs.aws.amazon.com/MemoryDB/latest/devguide/tagging.html\">Using Cost Allocation Tags</a>.</p>"
     },
     "UpdateACL":{
       "name":"UpdateACL",
@@ -816,9 +848,8 @@
     },
     "ACLAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>An ACL with the specified name already exists.</p>",
       "exception":true
     },
     "ACLClusterNameList":{
@@ -840,9 +871,8 @@
     },
     "ACLNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified ACL does not exist.</p>",
       "exception":true
     },
     "ACLPendingChanges":{
@@ -861,9 +891,8 @@
     },
     "ACLQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of ACLs allowed.</p>",
       "exception":true
     },
     "ACLsUpdateStatus":{
@@ -878,9 +907,8 @@
     },
     "APICallRateForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The customer has exceeded the maximum number of API requests allowed per time period.</p>",
       "exception":true
     },
     "AZStatus":{
@@ -1084,15 +1112,22 @@
         "DataTiering":{
           "shape":"DataTieringStatus",
           "documentation":"<p>Enables data tiering. Data tiering is only supported for clusters using the r6gd node type. This parameter must be set when using r6gd nodes. For more information, see <a href=\"https://docs.aws.amazon.com/memorydb/latest/devguide/data-tiering.html\">Data tiering</a>.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The IP address type for the cluster. Returns 'ipv4' for IPv4 only, 'ipv6' for IPv6 only, or 'dual-stack' if the cluster supports both IPv4 and IPv6 addressing.</p>"
+        },
+        "IpDiscovery":{
+          "shape":"IpDiscovery",
+          "documentation":"<p>The mechanism that the cluster uses to discover IP addresses. Returns 'ipv4' when DNS endpoints resolve to IPv4 addresses, or 'ipv6' when DNS endpoints resolve to IPv6 addresses.</p>"
         }
       },
       "documentation":"<p>Contains all of the attributes of a specific cluster.</p>"
     },
     "ClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A cluster with the specified name already exists.</p>",
       "exception":true
     },
     "ClusterConfiguration":{
@@ -1180,9 +1215,8 @@
     },
     "ClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified cluster does not exist.</p>",
       "exception":true
     },
     "ClusterPendingUpdates":{
@@ -1205,9 +1239,8 @@
     },
     "ClusterQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of clusters allowed for this customer.</p>",
       "exception":true
     },
     "CopySnapshotRequest":{
@@ -1378,6 +1411,14 @@
         "DataTiering":{
           "shape":"BooleanOptional",
           "documentation":"<p>Enables data tiering. Data tiering is only supported for clusters using the r6gd node type. This parameter must be set when using r6gd nodes. For more information, see <a href=\"https://docs.aws.amazon.com/memorydb/latest/devguide/data-tiering.html\">Data tiering</a>.</p>"
+        },
+        "NetworkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies the IP address type for the cluster. Valid values are 'ipv4', 'ipv6', or 'dual_stack'. When set to 'ipv4', the cluster will only be accessible via IPv4 addresses. When set to 'ipv6', the cluster will only be accessible via IPv6 addresses. When set to 'dual_stack', the cluster will be accessible via both IPv4 and IPv6 addresses. If not specified, the default is 'ipv4'.</p>"
+        },
+        "IpDiscovery":{
+          "shape":"IpDiscovery",
+          "documentation":"<p>The mechanism for discovering IP addresses for the cluster discovery protocol. Valid values are 'ipv4' or 'ipv6'. When set to 'ipv4', cluster discovery functions such as cluster slots, cluster shards, and cluster nodes return IPv4 addresses for cluster nodes. When set to 'ipv6', the cluster discovery functions return IPv6 addresses for cluster nodes. The value must be compatible with the NetworkType parameter. If not specified, the default is 'ipv4'.</p>"
         }
       }
     },
@@ -1399,7 +1440,7 @@
       "members":{
         "MultiRegionClusterNameSuffix":{
           "shape":"String",
-          "documentation":"<p>A suffix to be added to the multi-Region cluster name.</p>"
+          "documentation":"<p>A suffix to be added to the Multi-Region cluster name. Amazon MemoryDB automatically applies a prefix to the Multi-Region cluster Name when it is created. Each Amazon Region has its own prefix. For instance, a Multi-Region cluster Name created in the US-West-1 region will begin with \"virxk\", along with the suffix name you provide. The suffix guarantees uniqueness of the Multi-Region cluster name across multiple regions.</p>"
         },
         "Description":{
           "shape":"String",
@@ -1590,9 +1631,8 @@
     },
     "DefaultUserRequired":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A default user is required and must be specified.</p>",
       "exception":true
     },
     "DeleteACLRequest":{
@@ -1922,6 +1962,71 @@
         }
       }
     },
+    "DescribeMultiRegionParameterGroupsRequest":{
+      "type":"structure",
+      "members":{
+        "MultiRegionParameterGroupName":{
+          "shape":"String",
+          "documentation":"<p>The request for information on a specific multi-region parameter group.</p>"
+        },
+        "MaxResults":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The maximum number of records to include in the response. If more records exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by MaxResults.</p>"
+        }
+      }
+    },
+    "DescribeMultiRegionParameterGroupsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>An optional token to include in the response. If this token is provided, the response includes only results beyond the token, up to the value specified by MaxResults.</p>"
+        },
+        "MultiRegionParameterGroups":{
+          "shape":"MultiRegionParameterGroupList",
+          "documentation":"<p>A list of multi-region parameter groups. Each element in the list contains detailed information about one parameter group.</p>"
+        }
+      }
+    },
+    "DescribeMultiRegionParametersRequest":{
+      "type":"structure",
+      "required":["MultiRegionParameterGroupName"],
+      "members":{
+        "MultiRegionParameterGroupName":{
+          "shape":"String",
+          "documentation":"<p>The name of the multi-region parameter group to return details for.</p>"
+        },
+        "Source":{
+          "shape":"String",
+          "documentation":"<p>The parameter types to return. Valid values: user | system | engine-default</p>"
+        },
+        "MaxResults":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The maximum number of records to include in the response. If more records exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by MaxResults.</p>"
+        }
+      }
+    },
+    "DescribeMultiRegionParametersResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>An optional token to include in the response. If this token is provided, the response includes only results beyond the token, up to the value specified by MaxResults.</p>"
+        },
+        "MultiRegionParameters":{
+          "shape":"MultiRegionParametersList",
+          "documentation":"<p>A list of parameters specific to a particular multi-region parameter group. Each element in the list contains detailed information about one parameter.</p>"
+        }
+      }
+    },
     "DescribeParameterGroupsRequest":{
       "type":"structure",
       "members":{
@@ -2218,9 +2323,8 @@
     "Double":{"type":"double"},
     "DuplicateUserNameFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A user with the specified name already exists.</p>",
       "exception":true
     },
     "Endpoint":{
@@ -2359,60 +2463,52 @@
     },
     "InsufficientClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The cluster does not have sufficient capacity to perform the requested operation.</p>",
       "exception":true
     },
     "Integer":{"type":"integer"},
     "IntegerOptional":{"type":"integer"},
     "InvalidACLStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The ACL is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidARNFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified Amazon Resource Name (ARN) is not valid.</p>",
       "exception":true
     },
     "InvalidClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The cluster is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidCredentialsException":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The provided credentials are not valid.</p>",
       "exception":true
     },
     "InvalidKMSKeyFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified KMS key is not valid or accessible.</p>",
       "exception":true
     },
     "InvalidMultiRegionClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation cannot be performed on the multi-Region cluster in its current state.</p>",
       "exception":true
     },
     "InvalidNodeStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The node is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidParameterCombinationException":{
@@ -2420,15 +2516,14 @@
       "members":{
         "message":{"shape":"AwsQueryErrorMessage"}
       },
-      "documentation":"<p/>",
+      "documentation":"<p>The specified parameter combination is not valid.</p>",
       "exception":true,
       "synthetic":true
     },
     "InvalidParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The parameter group is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidParameterValueException":{
@@ -2436,38 +2531,41 @@
       "members":{
         "message":{"shape":"AwsQueryErrorMessage"}
       },
-      "documentation":"<p/>",
+      "documentation":"<p>The specified parameter value is not valid.</p>",
       "exception":true,
       "synthetic":true
     },
     "InvalidSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The snapshot is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified subnet is not valid.</p>",
       "exception":true
     },
     "InvalidUserStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The user is not in a valid state for the requested operation.</p>",
       "exception":true
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The VPC network is not in a valid state for the requested operation.</p>",
       "exception":true
     },
+    "IpDiscovery":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6"
+      ]
+    },
     "KeyList":{
       "type":"list",
       "member":{"shape":"String"}
@@ -2593,8 +2691,7 @@
     },
     "MultiRegionClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A multi-Region cluster with the specified name already exists.</p>",
       "exception":true
     },
@@ -2604,23 +2701,96 @@
     },
     "MultiRegionClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified multi-Region cluster does not exist.</p>",
       "exception":true
     },
-    "MultiRegionParameterGroupNotFoundFault":{
+    "MultiRegionParameter":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the parameter.</p>"
+        },
+        "Value":{
+          "shape":"String",
+          "documentation":"<p>The value of the parameter.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of the parameter.</p>"
+        },
+        "Source":{
+          "shape":"String",
+          "documentation":"<p>Indicates the source of the parameter value. Valid values: user | system | engine-default</p>"
+        },
+        "DataType":{
+          "shape":"String",
+          "documentation":"<p>The valid data type for the parameter.</p>"
+        },
+        "AllowedValues":{
+          "shape":"String",
+          "documentation":"<p>The valid range of values for the parameter.</p>"
+        },
+        "MinimumEngineVersion":{
+          "shape":"String",
+          "documentation":"<p>The earliest engine version to which the parameter can apply.</p>"
+        }
+      },
+      "documentation":"<p>Describes an individual setting that controls some aspect of MemoryDB behavior across multiple regions.</p>"
+    },
+    "MultiRegionParameterGroup":{
       "type":"structure",
       "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the multi-region parameter group.</p>"
+        },
+        "Family":{
+          "shape":"String",
+          "documentation":"<p>The name of the parameter group family that this multi-region parameter group is compatible with.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of the multi-region parameter group.</p>"
+        },
+        "ARN":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the multi-region parameter group.</p>"
+        }
       },
+      "documentation":"<p>Represents the output of a CreateMultiRegionParameterGroup operation. A multi-region parameter group represents a collection of parameters that can be applied to clusters across multiple regions.</p>"
+    },
+    "MultiRegionParameterGroupList":{
+      "type":"list",
+      "member":{"shape":"MultiRegionParameterGroup"}
+    },
+    "MultiRegionParameterGroupNotFoundFault":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>The specified multi-Region parameter group does not exist.</p>",
       "exception":true
     },
+    "MultiRegionParametersList":{
+      "type":"list",
+      "member":{"shape":"MultiRegionParameter"}
+    },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "ipv6",
+        "dual_stack"
+      ]
+    },
+    "NetworkTypeList":{
+      "type":"list",
+      "member":{"shape":"NetworkType"}
+    },
     "NoOperationFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The requested operation would result in no changes.</p>",
       "exception":true
     },
     "Node":{
@@ -2655,16 +2825,14 @@
     },
     "NodeQuotaForClusterExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of nodes allowed for this cluster.</p>",
       "exception":true
     },
     "NodeQuotaForCustomerExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of nodes allowed for this customer.</p>",
       "exception":true
     },
     "NodeTypeList":{
@@ -2725,9 +2893,8 @@
     },
     "ParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A parameter group with the specified name already exists.</p>",
       "exception":true
     },
     "ParameterGroupList":{
@@ -2736,16 +2903,14 @@
     },
     "ParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified parameter group does not exist.</p>",
       "exception":true
     },
     "ParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of parameter groups allowed.</p>",
       "exception":true
     },
     "ParameterNameList":{
@@ -2935,8 +3100,7 @@
     },
     "ReservedNodeAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You already have a reservation with the given identifier.</p>",
       "exception":true
     },
@@ -2946,15 +3110,13 @@
     },
     "ReservedNodeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested node does not exist.</p>",
       "exception":true
     },
     "ReservedNodeQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be processed because it would exceed the user's node quota.</p>",
       "exception":true
     },
@@ -2994,8 +3156,7 @@
     },
     "ReservedNodesOfferingNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested node offering does not exist. </p>",
       "exception":true
     },
@@ -3060,9 +3221,8 @@
     },
     "ServiceLinkedRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The required service-linked role was not found.</p>",
       "exception":true
     },
     "ServiceUpdate":{
@@ -3113,9 +3273,8 @@
     },
     "ServiceUpdateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified service update does not exist.</p>",
       "exception":true
     },
     "ServiceUpdateRequest":{
@@ -3228,16 +3387,14 @@
     },
     "ShardNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified shard does not exist.</p>",
       "exception":true
     },
     "ShardsPerClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of shards allowed per cluster.</p>",
       "exception":true
     },
     "SlotMigration":{
@@ -3286,9 +3443,8 @@
     },
     "SnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A snapshot with the specified name already exists.</p>",
       "exception":true
     },
     "SnapshotArnsList":{
@@ -3301,16 +3457,14 @@
     },
     "SnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified snapshot does not exist.</p>",
       "exception":true
     },
     "SnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of snapshots allowed.</p>",
       "exception":true
     },
     "SourceType":{
@@ -3335,6 +3489,10 @@
         "AvailabilityZone":{
           "shape":"AvailabilityZone",
           "documentation":"<p>The Availability Zone where the subnet resides</p>"
+        },
+        "SupportedNetworkTypes":{
+          "shape":"NetworkTypeList",
+          "documentation":"<p>The network types supported by this subnet. Returns an array of strings that can include 'ipv4', 'ipv6', or both, indicating whether the subnet supports IPv4 only, IPv6 only, or dual-stack deployments.</p>"
         }
       },
       "documentation":"<p>Represents the subnet associated with a cluster. This parameter refers to subnets defined in Amazon Virtual Private Cloud (Amazon VPC) and used with MemoryDB.</p>"
@@ -3361,22 +3519,24 @@
         "ARN":{
           "shape":"String",
           "documentation":"<p>The ARN (Amazon Resource Name) of the subnet group.</p>"
+        },
+        "SupportedNetworkTypes":{
+          "shape":"NetworkTypeList",
+          "documentation":"<p>The network types supported by this subnet group. Returns an array of strings that can include 'ipv4', 'ipv6', or both, indicating the IP address types that can be used for clusters deployed in this subnet group.</p>"
         }
       },
       "documentation":"<p>Represents the output of one of the following operations:</p> <ul> <li> <p>CreateSubnetGroup</p> </li> <li> <p>UpdateSubnetGroup</p> </li> </ul> <p>A subnet group is a collection of subnets (typically private) that you can designate for your clusters running in an Amazon Virtual Private Cloud (VPC) environment.</p>"
     },
     "SubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A subnet group with the specified name already exists.</p>",
       "exception":true
     },
     "SubnetGroupInUseFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The subnet group is currently in use and cannot be deleted.</p>",
       "exception":true
     },
     "SubnetGroupList":{
@@ -3385,16 +3545,14 @@
     },
     "SubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified subnet group does not exist.</p>",
       "exception":true
     },
     "SubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of subnet groups allowed.</p>",
       "exception":true
     },
     "SubnetIdentifierList":{
@@ -3403,9 +3561,8 @@
     },
     "SubnetInUse":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The subnet is currently in use and cannot be deleted.</p>",
       "exception":true
     },
     "SubnetList":{
@@ -3414,16 +3571,14 @@
     },
     "SubnetNotAllowedFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified subnet is not allowed for this operation.</p>",
       "exception":true
     },
     "SubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of subnets allowed.</p>",
       "exception":true
     },
     "TStamp":{"type":"timestamp"},
@@ -3448,16 +3603,14 @@
     },
     "TagNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified tag does not exist.</p>",
       "exception":true
     },
     "TagQuotaPerResourceExceeded":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of tags allowed per resource.</p>",
       "exception":true
     },
     "TagResourceRequest":{
@@ -3493,9 +3646,8 @@
     },
     "TestFailoverNotAvailableFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>Test failover is not available for this cluster configuration.</p>",
       "exception":true
     },
     "UnprocessedCluster":{
@@ -3636,6 +3788,10 @@
         "ACLName":{
           "shape":"ACLName",
           "documentation":"<p>The Access Control List that is associated with the cluster.</p>"
+        },
+        "IpDiscovery":{
+          "shape":"IpDiscovery",
+          "documentation":"<p>The mechanism for discovering IP addresses for the cluster discovery protocol. Valid values are 'ipv4' or 'ipv6'. When set to 'ipv4', cluster discovery functions such as cluster slots, cluster shards, and cluster nodes will return IPv4 addresses for cluster nodes. When set to 'ipv6', the cluster discovery functions return IPv6 addresses for cluster nodes. The value must be compatible with the NetworkType parameter. If not specified, the default is 'ipv4'.</p>"
         }
       }
     },
@@ -3675,7 +3831,7 @@
         },
         "UpdateStrategy":{
           "shape":"UpdateStrategy",
-          "documentation":"<p>Whether to force the update even if it may cause data loss.</p>"
+          "documentation":"<p>The strategy to use for the update operation. Supported values are \"coordinated\" or \"uncoordinated\".</p>"
         }
       }
     },
@@ -3811,9 +3967,8 @@
     },
     "UserAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>A user with the specified name already exists.</p>",
       "exception":true
     },
     "UserList":{
@@ -3836,16 +3991,14 @@
     },
     "UserNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The specified user does not exist.</p>",
       "exception":true
     },
     "UserQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p/>",
+      "members":{},
+      "documentation":"<p>The request cannot be processed because it would exceed the maximum number of users allowed.</p>",
       "exception":true
     }
   },
diff -pruN 2.23.6-1/awscli/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/meteringmarketplace/2016-01-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -58,307 +57,417 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://metering-marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-cn"
                                             ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://metering.marketplace-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://metering-marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://metering-marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://metering.marketplace-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://metering.marketplace-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://metering.marketplace-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
                                         {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://metering.marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        "aws",
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "name"
+                                                false
                                             ]
-                                        }
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://metering.marketplace.{Region}.amazonaws.com",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        "aws-us-gov",
+                                        },
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseDualStack"
                                                 },
-                                                "name"
+                                                true
                                             ]
                                         }
-                                    ]
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://metering.marketplace.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://metering.marketplace.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
-                            "endpoint": {
-                                "url": "https://metering.marketplace.{Region}.amazonaws.com",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://metering.marketplace.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/meteringmarketplace/2016-01-14/service-2.json 2.31.35-1/awscli/botocore/data/meteringmarketplace/2016-01-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/meteringmarketplace/2016-01-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/meteringmarketplace/2016-01-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"metering.marketplace",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWSMarketplace Metering",
     "serviceId":"Marketplace Metering",
     "signatureVersion":"v4",
     "signingName":"aws-marketplace",
     "targetPrefix":"AWSMPMeteringService",
-    "uid":"meteringmarketplace-2016-01-14"
+    "uid":"meteringmarketplace-2016-01-14",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchMeterUsage":{
@@ -32,7 +34,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"DisabledApiException"}
       ],
-      "documentation":"<p> <code>BatchMeterUsage</code> is called from a SaaS application listed on AWS Marketplace to post metering records for a set of customers.</p> <p>For identical requests, the API is idempotent; requests can be retried with the same records or a subset of the input records.</p> <p>Every request to <code>BatchMeterUsage</code> is for one product. If you need to meter usage for multiple products, you must make multiple calls to <code>BatchMeterUsage</code>.</p> <p>Usage records are expected to be submitted as quickly as possible after the event that is being recorded, and are not accepted more than 6 hours after the event.</p> <p> <code>BatchMeterUsage</code> can process up to 25 <code>UsageRecords</code> at a time.</p> <p>A <code>UsageRecord</code> can optionally include multiple usage allocations, to provide customers with usage data split into buckets by tags that you define (or allow the customer to define).</p> <p> <code>BatchMeterUsage</code> returns a list of <code>UsageRecordResult</code> objects, showing the result for each <code>UsageRecord</code>, as well as a list of <code>UnprocessedRecords</code>, indicating errors in the service side that you should retry.</p> <p> <code>BatchMeterUsage</code> requests must be less than 1MB in size.</p> <note> <p>For an example of using <code>BatchMeterUsage</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-batchmeterusage-example\"> BatchMeterUsage code example</a> in the <i>AWS Marketplace Seller Guide</i>.</p> </note>"
+      "documentation":"<important> <p> The <code>CustomerIdentifier</code> parameter is scheduled for deprecation on March 31, 2026. Use <code>CustomerAWSAccountID</code> instead.</p> <p>These parameters are mutually exclusive. You can't specify both <code>CustomerIdentifier</code> and <code>CustomerAWSAccountID</code> in the same request. </p> </important> <p>To post metering records for customers, SaaS applications call <code>BatchMeterUsage</code>, which is used for metering SaaS flexible consumption pricing (FCP). Identical requests are idempotent and can be retried with the same records or a subset of records. Each <code>BatchMeterUsage</code> request is for only one product. If you want to meter usage for multiple products, you must make multiple <code>BatchMeterUsage</code> calls.</p> <p>Usage records should be submitted in quick succession following a recorded event. Usage records aren't accepted 6 hours or more after an event.</p> <p> <code>BatchMeterUsage</code> can process up to 25 <code>UsageRecords</code> at a time, and each request must be less than 1 MB in size. Optionally, you can have multiple usage allocations for usage data that's split into buckets according to predefined tags.</p> <p> <code>BatchMeterUsage</code> returns a list of <code>UsageRecordResult</code> objects, which have each <code>UsageRecord</code>. It also returns a list of <code>UnprocessedRecords</code>, which indicate errors on the service side that should be retried.</p> <p>For Amazon Web Services Regions that support <code>BatchMeterUsage</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/APIReference/metering-regions.html#batchmeterusage-region-support\">BatchMeterUsage Region support</a>. </p> <note> <p>For an example of <code>BatchMeterUsage</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-batchmeterusage-example\"> BatchMeterUsage code example</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p> </note>"
     },
     "MeterUsage":{
       "name":"MeterUsage",
@@ -51,10 +53,11 @@
         {"shape":"InvalidEndpointRegionException"},
         {"shape":"TimestampOutOfBoundsException"},
         {"shape":"DuplicateRequestException"},
+        {"shape":"IdempotencyConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"CustomerNotEntitledException"}
       ],
-      "documentation":"<p>API to emit metering records. For identical requests, the API is idempotent. It simply returns the metering record ID.</p> <p> <code>MeterUsage</code> is authenticated on the buyer's AWS account using credentials from the EC2 instance, ECS task, or EKS pod.</p> <p> <code>MeterUsage</code> can optionally include multiple usage allocations, to provide customers with usage data split into buckets by tags that you define (or allow the customer to define).</p> <p>Usage records are expected to be submitted as quickly as possible after the event that is being recorded, and are not accepted more than 6 hours after the event.</p>"
+      "documentation":"<p>API to emit metering records. For identical requests, the API is idempotent and returns the metering record ID. This is used for metering flexible consumption pricing (FCP) Amazon Machine Images (AMI) and container products.</p> <p> <code>MeterUsage</code> is authenticated on the buyer's Amazon Web Services account using credentials from the Amazon EC2 instance, Amazon ECS task, or Amazon EKS pod.</p> <p> <code>MeterUsage</code> can optionally include multiple usage allocations, to provide customers with usage data split into buckets by tags that you define (or allow the customer to define).</p> <p>Submit usage records to report events from the previous hour. If you submit records that are greater than six hours after events occur, the records won’t be accepted. The timestamp in your request determines when an event is recorded. You can only report usage once per hour for each dimension. For AMI-based products, this is per dimension and per EC2 instance. For container products, this is per dimension and per ECS task or EKS pod. You can’t modify values after they’re recorded. If you report usage before the current hour ends, you will be unable to report additional usage until the next hour begins.</p> <p>For Amazon Web Services Regions that support <code>MeterUsage</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/APIReference/metering-regions.html#meterusage-region-support-ec2\">MeterUsage Region support for Amazon EC2</a> and <a href=\"https://docs.aws.amazon.com/marketplace/latest/APIReference/metering-regions.html#meterusage-region-support-ecs-eks\">MeterUsage Region support for Amazon ECS and Amazon EKS</a>. </p>"
     },
     "RegisterUsage":{
       "name":"RegisterUsage",
@@ -74,7 +77,7 @@
         {"shape":"InternalServiceErrorException"},
         {"shape":"DisabledApiException"}
       ],
-      "documentation":"<p>Paid container software products sold through AWS Marketplace must integrate with the AWS Marketplace Metering Service and call the <code>RegisterUsage</code> operation for software entitlement and metering. Free and BYOL products for Amazon ECS or Amazon EKS aren't required to call <code>RegisterUsage</code>, but you may choose to do so if you would like to receive usage data in your seller reports. The sections below explain the behavior of <code>RegisterUsage</code>. <code>RegisterUsage</code> performs two primary functions: metering and entitlement.</p> <ul> <li> <p> <i>Entitlement</i>: <code>RegisterUsage</code> allows you to verify that the customer running your paid software is subscribed to your product on AWS Marketplace, enabling you to guard against unauthorized use. Your container image that integrates with <code>RegisterUsage</code> is only required to guard against unauthorized use at container startup, as such a <code>CustomerNotSubscribedException</code> or <code>PlatformNotSupportedException</code> will only be thrown on the initial call to <code>RegisterUsage</code>. Subsequent calls from the same Amazon ECS task instance (e.g. task-id) or Amazon EKS pod will not throw a <code>CustomerNotSubscribedException</code>, even if the customer unsubscribes while the Amazon ECS task or Amazon EKS pod is still running.</p> </li> <li> <p> <i>Metering</i>: <code>RegisterUsage</code> meters software use per ECS task, per hour, or per pod for Amazon EKS with usage prorated to the second. A minimum of 1 minute of usage applies to tasks that are short lived. For example, if a customer has a 10 node Amazon ECS or Amazon EKS cluster and a service configured as a Daemon Set, then Amazon ECS or Amazon EKS will launch a task on all 10 cluster nodes and the customer will be charged: (10 * hourly_rate). Metering for software use is automatically handled by the AWS Marketplace Metering Control Plane -- your software is not required to perform any metering specific actions, other than call <code>RegisterUsage</code> once for metering of software use to commence. The AWS Marketplace Metering Control Plane will also continue to bill customers for running ECS tasks and Amazon EKS pods, regardless of the customers subscription state, removing the need for your software to perform entitlement checks at runtime.</p> </li> </ul>"
+      "documentation":"<p>Paid container software products sold through Amazon Web Services Marketplace must integrate with the Amazon Web Services Marketplace Metering Service and call the <code>RegisterUsage</code> operation for software entitlement and metering. Free and BYOL products for Amazon ECS or Amazon EKS aren't required to call <code>RegisterUsage</code>, but you may choose to do so if you would like to receive usage data in your seller reports. The sections below explain the behavior of <code>RegisterUsage</code>. <code>RegisterUsage</code> performs two primary functions: metering and entitlement.</p> <ul> <li> <p> <i>Entitlement</i>: <code>RegisterUsage</code> allows you to verify that the customer running your paid software is subscribed to your product on Amazon Web Services Marketplace, enabling you to guard against unauthorized use. Your container image that integrates with <code>RegisterUsage</code> is only required to guard against unauthorized use at container startup, as such a <code>CustomerNotSubscribedException</code> or <code>PlatformNotSupportedException</code> will only be thrown on the initial call to <code>RegisterUsage</code>. Subsequent calls from the same Amazon ECS task instance (e.g. task-id) or Amazon EKS pod will not throw a <code>CustomerNotSubscribedException</code>, even if the customer unsubscribes while the Amazon ECS task or Amazon EKS pod is still running.</p> </li> <li> <p> <i>Metering</i>: <code>RegisterUsage</code> meters software use per ECS task, per hour, or per pod for Amazon EKS with usage prorated to the second. A minimum of 1 minute of usage applies to tasks that are short lived. For example, if a customer has a 10 node Amazon ECS or Amazon EKS cluster and a service configured as a Daemon Set, then Amazon ECS or Amazon EKS will launch a task on all 10 cluster nodes and the customer will be charged for 10 tasks. Software metering is handled by the Amazon Web Services Marketplace metering control plane—your software is not required to perform metering-specific actions other than to call <code>RegisterUsage</code> to commence metering. The Amazon Web Services Marketplace metering control plane will also bill customers for running ECS tasks and Amazon EKS pods, regardless of the customer's subscription state, which removes the need for your software to run entitlement checks at runtime. For containers, <code>RegisterUsage</code> should be called immediately at launch. If you don’t register the container within the first 6 hours of the launch, Amazon Web Services Marketplace Metering Service doesn’t provide any metering guarantees for previous months. Metering will continue, however, for the current month forward until the container ends. <code>RegisterUsage</code> is for metering paid hourly container products.</p> <p>For Amazon Web Services Regions that support <code>RegisterUsage</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/APIReference/metering-regions.html#registerusage-region-support\">RegisterUsage Region support</a>. </p> </li> </ul>"
     },
     "ResolveCustomer":{
       "name":"ResolveCustomer",
@@ -91,7 +94,7 @@
         {"shape":"InternalServiceErrorException"},
         {"shape":"DisabledApiException"}
       ],
-      "documentation":"<p> <code>ResolveCustomer</code> is called by a SaaS application during the registration process. When a buyer visits your website during the registration process, the buyer submits a registration token through their browser. The registration token is resolved through this API to obtain a <code>CustomerIdentifier</code> along with the <code>CustomerAWSAccountId</code> and <code>ProductCode</code>.</p> <note> <p>The API needs to called from the seller account id used to publish the SaaS application to successfully resolve the token.</p> <p>For an example of using <code>ResolveCustomer</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-resolvecustomer-example\"> ResolveCustomer code example</a> in the <i>AWS Marketplace Seller Guide</i>.</p> </note>"
+      "documentation":"<p> <code>ResolveCustomer</code> is called by a SaaS application during the registration process. When a buyer visits your website during the registration process, the buyer submits a registration token through their browser. The registration token is resolved through this API to obtain a <code>CustomerIdentifier</code> along with the <code>CustomerAWSAccountId</code> and <code>ProductCode</code>.</p> <note> <p>To successfully resolve the token, the API must be called from the account that was used to publish the SaaS application. For an example of using <code>ResolveCustomer</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-resolvecustomer-example\"> ResolveCustomer code example</a> in the <i>Amazon Web Services Marketplace Seller Guide</i>.</p> </note> <p>Permission is required for this operation. Your IAM role or user performing this operation requires a policy to allow the <code>aws-marketplace:ResolveCustomer</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsmarketplacemeteringservice.html\">Actions, resources, and condition keys for Amazon Web Services Marketplace Metering Service</a> in the <i>Service Authorization Reference</i>.</p> <p>For Amazon Web Services Regions that support <code>ResolveCustomer</code>, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/APIReference/metering-regions.html#resolvecustomer-region-support\">ResolveCustomer Region support</a>. </p>"
     }
   },
   "shapes":{
@@ -113,7 +116,7 @@
         },
         "ProductCode":{
           "shape":"ProductCode",
-          "documentation":"<p>Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
+          "documentation":"<p>Product code is used to uniquely identify a product in Amazon Web Services Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
         }
       },
       "documentation":"<p>A <code>BatchMeterUsageRequest</code> contains <code>UsageRecords</code>, which indicate quantities of usage within your application.</p>"
@@ -123,7 +126,7 @@
       "members":{
         "Results":{
           "shape":"UsageRecordResultList",
-          "documentation":"<p>Contains all <code>UsageRecords</code> processed by <code>BatchMeterUsage</code>. These records were either honored by AWS Marketplace Metering Service or were invalid. Invalid records should be fixed before being resubmitted.</p>"
+          "documentation":"<p>Contains all <code>UsageRecords</code> processed by <code>BatchMeterUsage</code>. These records were either honored by Amazon Web Services Marketplace Metering Service or were invalid. Invalid records should be fixed before being resubmitted.</p>"
         },
         "UnprocessedRecords":{
           "shape":"UsageRecordList",
@@ -133,6 +136,11 @@
       "documentation":"<p>Contains the <code>UsageRecords</code> processed by <code>BatchMeterUsage</code> and any records that have failed due to transient error.</p>"
     },
     "Boolean":{"type":"boolean"},
+    "ClientToken":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
     "CustomerAWSAccountId":{
       "type":"string",
       "max":255,
@@ -142,8 +150,8 @@
     "CustomerIdentifier":{
       "type":"string",
       "max":255,
-      "min":1,
-      "pattern":"[\\s\\S]+"
+      "min":0,
+      "pattern":"[\\s\\S]*"
     },
     "CustomerNotEntitledException":{
       "type":"structure",
@@ -177,12 +185,20 @@
       "documentation":"<p>The submitted registration token has expired. This can happen if the buyer's browser takes too long to redirect to your page, the buyer has resubmitted the registration token, or your application has held on to the registration token for too long. Your SaaS registration website should redeem this token as soon as it is submitted by the buyer's browser.</p>",
       "exception":true
     },
+    "IdempotencyConflictException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"errorMessage"}
+      },
+      "documentation":"<p>The <code>ClientToken</code> is being used for multiple requests.</p>",
+      "exception":true
+    },
     "InternalServiceErrorException":{
       "type":"structure",
       "members":{
         "message":{"shape":"errorMessage"}
       },
-      "documentation":"<p>An internal error has occurred. Retry your request. If the problem persists, post a message with details on the AWS forums.</p>",
+      "documentation":"<p>An internal error has occurred. Retry your request. If the problem persists, post a message with details on the Amazon Web Services forums.</p>",
       "exception":true,
       "fault":true
     },
@@ -199,7 +215,7 @@
       "members":{
         "message":{"shape":"errorMessage"}
       },
-      "documentation":"<p>The endpoint being called is in a AWS Region different from your EC2 instance, ECS task, or EKS pod. The Region of the Metering Service endpoint and the AWS Region of the resource must match.</p>",
+      "documentation":"<p>The endpoint being called is in a Amazon Web Services Region different from your EC2 instance, ECS task, or EKS pod. The Region of the Metering Service endpoint and the Amazon Web Services Region of the resource must match.</p>",
       "exception":true
     },
     "InvalidProductCodeException":{
@@ -223,7 +239,7 @@
       "members":{
         "message":{"shape":"errorMessage"}
       },
-      "documentation":"<p> <code>RegisterUsage</code> must be called in the same AWS Region the ECS task was launched in. This prevents a container from hardcoding a Region (e.g. withRegion(“us-east-1”) when calling <code>RegisterUsage</code>.</p>",
+      "documentation":"<p> <code>RegisterUsage</code> must be called in the same Amazon Web Services Region the ECS task was launched in. This prevents a container from hardcoding a Region (e.g. withRegion(“us-east-1”) when calling <code>RegisterUsage</code>.</p>",
       "exception":true
     },
     "InvalidTagException":{
@@ -247,7 +263,7 @@
       "members":{
         "message":{"shape":"errorMessage"}
       },
-      "documentation":"<p>The usage allocation objects are invalid, or the number of allocations is greater than 500 for a single usage record.</p>",
+      "documentation":"<p>Sum of allocated usage quantities is not equal to the usage quantity.</p>",
       "exception":true
     },
     "InvalidUsageDimensionException":{
@@ -268,11 +284,11 @@
       "members":{
         "ProductCode":{
           "shape":"ProductCode",
-          "documentation":"<p>Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
+          "documentation":"<p>Product code is used to uniquely identify a product in Amazon Web Services Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
         },
         "Timestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp, in UTC, for which the usage is being reported. Your application can meter usage for up to one hour in the past. Make sure the <code>timestamp</code> value is not before the start of the software usage.</p>"
+          "documentation":"<p>Timestamp, in UTC, for which the usage is being reported. Your application can meter usage for up to six hours in the past. Make sure the <code>timestamp</code> value is not before the start of the software usage.</p>"
         },
         "UsageDimension":{
           "shape":"UsageDimension",
@@ -289,6 +305,11 @@
         "UsageAllocations":{
           "shape":"UsageAllocations",
           "documentation":"<p>The set of <code>UsageAllocations</code> to submit.</p> <p>The sum of all <code>UsageAllocation</code> quantities must equal the <code>UsageQuantity</code> of the <code>MeterUsage</code> request, and each <code>UsageAllocation</code> must have a unique set of tags (include no tags).</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Specifies a unique, case-sensitive identifier that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotencyConflictException</code> error.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -315,7 +336,7 @@
       "members":{
         "message":{"shape":"errorMessage"}
       },
-      "documentation":"<p>AWS Marketplace does not support metering usage from the underlying platform. Currently, Amazon ECS, Amazon EKS, and AWS Fargate are supported.</p>",
+      "documentation":"<p>Amazon Web Services Marketplace does not support metering usage from the underlying platform. Currently, Amazon ECS, Amazon EKS, and Fargate are supported.</p>",
       "exception":true
     },
     "ProductCode":{
@@ -333,11 +354,11 @@
       "members":{
         "ProductCode":{
           "shape":"ProductCode",
-          "documentation":"<p>Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
+          "documentation":"<p>Product code is used to uniquely identify a product in Amazon Web Services Marketplace. The product code should be the same as the one used during the publishing of a new product.</p>"
         },
         "PublicKeyVersion":{
           "shape":"VersionInteger",
-          "documentation":"<p>Public Key Version provided by AWS Marketplace</p>"
+          "documentation":"<p>Public Key Version provided by Amazon Web Services Marketplace</p>"
         },
         "Nonce":{
           "shape":"Nonce",
@@ -382,7 +403,7 @@
         },
         "CustomerAWSAccountId":{
           "shape":"CustomerAWSAccountId",
-          "documentation":"<p>The <code>CustomerAWSAccountId</code> provides the AWS account ID associated with the <code>CustomerIdentifier</code> for the individual customer.</p>"
+          "documentation":"<p>The <code>CustomerAWSAccountId</code> provides the Amazon Web Services account ID associated with the <code>CustomerIdentifier</code> for the individual customer.</p>"
         }
       },
       "documentation":"<p>The result of the <code>ResolveCustomer</code> operation. Contains the <code>CustomerIdentifier</code> along with the <code>CustomerAWSAccountId</code> and <code>ProductCode</code>.</p>"
@@ -477,13 +498,12 @@
       "type":"structure",
       "required":[
         "Timestamp",
-        "CustomerIdentifier",
         "Dimension"
       ],
       "members":{
         "Timestamp":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp, in UTC, for which the usage is being reported.</p> <p>Your application can meter usage for up to one hour in the past. Make sure the <code>timestamp</code> value is not before the start of the software usage.</p>"
+          "documentation":"<p>Timestamp, in UTC, for which the usage is being reported.</p> <p>Your application can meter usage for up to six hours in the past. Make sure the <code>timestamp</code> value is not before the start of the software usage.</p>"
         },
         "CustomerIdentifier":{
           "shape":"CustomerIdentifier",
@@ -491,7 +511,7 @@
         },
         "Dimension":{
           "shape":"UsageDimension",
-          "documentation":"<p>During the process of registering a product on AWS Marketplace, dimensions are specified. These represent different units of value in your application.</p>"
+          "documentation":"<p>During the process of registering a product on Amazon Web Services Marketplace, dimensions are specified. These represent different units of value in your application.</p>"
         },
         "Quantity":{
           "shape":"UsageQuantity",
@@ -500,6 +520,10 @@
         "UsageAllocations":{
           "shape":"UsageAllocations",
           "documentation":"<p>The set of <code>UsageAllocations</code> to submit. The sum of all <code>UsageAllocation</code> quantities must equal the Quantity of the <code>UsageRecord</code>.</p>"
+        },
+        "CustomerAWSAccountId":{
+          "shape":"CustomerAWSAccountId",
+          "documentation":"<p> The <code>CustomerAWSAccountID</code> parameter specifies the AWS account ID of the buyer. </p>"
         }
       },
       "documentation":"<p>A <code>UsageRecord</code> indicates a quantity of usage for a given product, customer, dimension and time.</p> <p>Multiple requests with the same <code>UsageRecords</code> as input will be de-duplicated to prevent double charges.</p>"
@@ -523,7 +547,7 @@
         },
         "Status":{
           "shape":"UsageRecordResultStatus",
-          "documentation":"<p>The <code>UsageRecordResult</code> <code>Status</code> indicates the status of an individual <code>UsageRecord</code> processed by <code>BatchMeterUsage</code>.</p> <ul> <li> <p> <i>Success</i>- The <code>UsageRecord</code> was accepted and honored by <code>BatchMeterUsage</code>.</p> </li> <li> <p> <i>CustomerNotSubscribed</i>- The <code>CustomerIdentifier</code> specified is not able to use your product. The <code>UsageRecord</code> was not honored. There are three causes for this result:</p> <ul> <li> <p>The customer identifier is invalid.</p> </li> <li> <p>The customer identifier provided in the metering record does not have an active agreement or subscription with this product. Future <code>UsageRecords</code> for this customer will fail until the customer subscribes to your product.</p> </li> <li> <p>The customer's AWS account was suspended.</p> </li> </ul> </li> <li> <p> <i>DuplicateRecord</i>- Indicates that the <code>UsageRecord</code> was invalid and not honored. A previously metered <code>UsageRecord</code> had the same customer, dimension, and time, but a different quantity.</p> </li> </ul>"
+          "documentation":"<p>The <code>UsageRecordResult</code> <code>Status</code> indicates the status of an individual <code>UsageRecord</code> processed by <code>BatchMeterUsage</code>.</p> <ul> <li> <p> <i>Success</i>- The <code>UsageRecord</code> was accepted and honored by <code>BatchMeterUsage</code>.</p> </li> <li> <p> <i>CustomerNotSubscribed</i>- The <code>CustomerIdentifier</code> specified is not able to use your product. The <code>UsageRecord</code> was not honored. There are three causes for this result:</p> <ul> <li> <p>The customer identifier is invalid.</p> </li> <li> <p>The customer identifier provided in the metering record does not have an active agreement or subscription with this product. Future <code>UsageRecords</code> for this customer will fail until the customer subscribes to your product.</p> </li> <li> <p>The customer's Amazon Web Services account was suspended.</p> </li> </ul> </li> <li> <p> <i>DuplicateRecord</i>- Indicates that the <code>UsageRecord</code> was invalid and not honored. A previously metered <code>UsageRecord</code> had the same customer, dimension, and time, but a different quantity.</p> </li> </ul>"
         }
       },
       "documentation":"<p>A <code>UsageRecordResult</code> indicates the status of a given <code>UsageRecord</code> processed by <code>BatchMeterUsage</code>.</p>"
@@ -546,5 +570,5 @@
     },
     "errorMessage":{"type":"string"}
   },
-  "documentation":"<fullname>AWS Marketplace Metering Service</fullname> <p>This reference provides descriptions of the low-level AWS Marketplace Metering Service API.</p> <p>AWS Marketplace sellers can use this API to submit usage data for custom usage dimensions.</p> <p>For information on the permissions you need to use this API, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/iam-user-policy-for-aws-marketplace-actions.html\">AWS Marketplace metering and entitlement API permissions</a> in the <i>AWS Marketplace Seller Guide.</i> </p> <p> <b>Submitting Metering Records</b> </p> <ul> <li> <p> <i>MeterUsage</i> - Submits the metering record for an AWS Marketplace product. <code>MeterUsage</code> is called from an EC2 instance or a container running on EKS or ECS.</p> </li> <li> <p> <i>BatchMeterUsage</i> - Submits the metering record for a set of customers. <code>BatchMeterUsage</code> is called from a software-as-a-service (SaaS) application.</p> </li> </ul> <p> <b>Accepting New Customers</b> </p> <ul> <li> <p> <i>ResolveCustomer</i> - Called by a SaaS application during the registration process. When a buyer visits your website during the registration process, the buyer submits a Registration Token through the browser. The Registration Token is resolved through this API to obtain a <code>CustomerIdentifier</code> along with the <code>CustomerAWSAccountId</code> and <code>ProductCode</code>.</p> </li> </ul> <p> <b>Entitlement and Metering for Paid Container Products</b> </p> <ul> <li> <p>Paid container software products sold through AWS Marketplace must integrate with the AWS Marketplace Metering Service and call the <code>RegisterUsage</code> operation for software entitlement and metering. Free and BYOL products for Amazon ECS or Amazon EKS aren't required to call <code>RegisterUsage</code>, but you can do so if you want to receive usage data in your seller reports. For more information on using the <code>RegisterUsage</code> operation, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/container-based-products.html\">Container-Based Products</a>. </p> </li> </ul> <p> <code>BatchMeterUsage</code> API calls are captured by AWS CloudTrail. You can use Cloudtrail to verify that the SaaS metering records that you sent are accurate by searching for records with the <code>eventName</code> of <code>BatchMeterUsage</code>. You can also use CloudTrail to audit records over time. For more information, see the <i> <a href=\"http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html\">AWS CloudTrail User Guide</a>.</i> </p>"
+  "documentation":"<fullname>Amazon Web Services Marketplace Metering Service</fullname> <p>This reference provides descriptions of the low-level Marketplace Metering Service API.</p> <p>Amazon Web Services Marketplace sellers can use this API to submit usage data for custom usage dimensions.</p> <p>For information about the permissions that you need to use this API, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/iam-user-policy-for-aws-marketplace-actions.html\">Amazon Web Services Marketplace metering and entitlement API permissions</a> in the <i>Amazon Web Services Marketplace Seller Guide.</i> </p> <p> <b>Submitting metering records</b> </p> <p> <i>MeterUsage</i> </p> <ul> <li> <p>Submits the metering record for an Amazon Web Services Marketplace product.</p> </li> <li> <p>Called from: Amazon Elastic Compute Cloud (Amazon EC2) instance or a container running on either Amazon Elastic Kubernetes Service (Amazon EKS) or Amazon Elastic Container Service (Amazon ECS)</p> </li> <li> <p>Supported product types: Amazon Machine Images (AMIs) and containers</p> </li> <li> <p>Vendor-metered tagging: Supported allocation tagging</p> </li> </ul> <p> <i>BatchMeterUsage</i> </p> <ul> <li> <p>Submits the metering record for a set of customers. <code>BatchMeterUsage</code> API calls are captured by CloudTrail. You can use CloudTrail to verify that the software as a subscription (SaaS) metering records that you sent are accurate by searching for records with the <code>eventName</code> of <code>BatchMeterUsage</code>. You can also use CloudTrail to audit records over time. For more information, see the <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html\">CloudTrail User Guide</a>.</p> </li> <li> <p>Called from: SaaS applications</p> </li> <li> <p>Supported product type: SaaS</p> </li> <li> <p>Vendor-metered tagging: Supports allocation tagging</p> </li> </ul> <p> <b>Accepting new customers</b> </p> <p> <i>ResolveCustomer</i> </p> <ul> <li> <p>Resolves the registration token that the buyer submits through the browser during the registration process. Obtains a <code>CustomerIdentifier</code> along with the <code>CustomerAWSAccountId</code> and <code>ProductCode</code>.</p> </li> <li> <p>Called from: SaaS application during the registration process</p> </li> <li> <p>Supported product type: SaaS</p> </li> <li> <p>Vendor-metered tagging: Not applicable</p> </li> </ul> <p> <b>Entitlement and metering for paid container products</b> </p> <p> <i>RegisteredUsage</i> </p> <ul> <li> <p>Provides software entitlement and metering. Paid container software products sold through Amazon Web Services Marketplace must integrate with the Marketplace Metering Service and call the <code>RegisterUsage</code> operation. Free and Bring Your Own License model (BYOL) products for Amazon ECS or Amazon EKS aren't required to call <code>RegisterUsage</code>. However, you can do so if you want to receive usage data in your seller reports. For more information about using the <code>RegisterUsage</code> operation, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/container-based-products.html\">Container-based products</a>.</p> </li> <li> <p>Called from: Paid container software products</p> </li> <li> <p>Supported product type: Containers</p> </li> <li> <p>Vendor-metered tagging: Not applicable</p> </li> </ul> <p> <b>Entitlement custom metering for container products</b> </p> <ul> <li> <p>MeterUsage API is available in GovCloud Regions but only supports AMI FCP products in GovCloud Regions. Flexible Consumption Pricing (FCP) Container products aren’t supported in GovCloud Regions: us-gov-west-1 and us-gov-east-1. For more information, see <a href=\"https://docs.aws.amazon.com/marketplace/latest/userguide/container-based-products.html\">Container-based products</a>.</p> </li> <li> <p>Custom metering for container products are called using the MeterUsage API. The API is used for FCP AMI and FCP Container product metering.</p> </li> </ul> <p> <b>Custom metering for Amazon EKS is available in 17 Amazon Web Services Regions</b> </p> <ul> <li> <p>The metering service supports Amazon ECS and EKS for Flexible Consumption Pricing (FCP) products using MeterUsage API. Amazon ECS is supported in all Amazon Web Services Regions that MeterUsage API is available except for GovCloud.</p> </li> <li> <p>Amazon EKS is supported in the following: us-east-1, us-east-2, us-west-1, us-west-2, eu-west-1, eu-central-1, eu-west-2, eu-west-3, eu-north-1, ap-east-1, ap-southeast-1, ap-northeast-1, ap-southeast-2, ap-northeast-2, ap-south-1, ca-central-1, sa-east-1.</p> <note> <p>For questions about adding Amazon Web Services Regions for metering, contact <a href=\"mailto://aws.amazon.com/marketplace/management/contact-us/\">Amazon Web Services Marketplace Seller Operations</a>.</p> </note> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mgh/2017-05-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mgh/2017-05-31/service-2.json 2.31.35-1/awscli/botocore/data/mgh/2017-05-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/mgh/2017-05-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mgh/2017-05-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -516,8 +516,7 @@
     },
     "AssociateCreatedArtifactResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateDiscoveredResourceRequest":{
       "type":"structure",
@@ -547,8 +546,7 @@
     },
     "AssociateDiscoveredResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateSourceResourceRequest":{
       "type":"structure",
@@ -578,8 +576,7 @@
     },
     "AssociateSourceResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ConfigurationId":{
       "type":"string",
@@ -603,8 +600,7 @@
     },
     "CreateProgressUpdateStreamResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreatedArtifact":{
       "type":"structure",
@@ -653,8 +649,7 @@
     },
     "DeleteProgressUpdateStreamResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeApplicationStateRequest":{
       "type":"structure",
@@ -733,8 +728,7 @@
     },
     "DisassociateCreatedArtifactResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateDiscoveredResourceRequest":{
       "type":"structure",
@@ -764,8 +758,7 @@
     },
     "DisassociateDiscoveredResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateSourceResourceRequest":{
       "type":"structure",
@@ -795,8 +788,7 @@
     },
     "DisassociateSourceResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DiscoveredResource":{
       "type":"structure",
@@ -864,8 +856,7 @@
     },
     "ImportMigrationTaskResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "InternalServerError":{
       "type":"structure",
@@ -1268,8 +1259,7 @@
     },
     "NotifyApplicationStateResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NotifyMigrationTaskStateRequest":{
       "type":"structure",
@@ -1309,8 +1299,7 @@
     },
     "NotifyMigrationTaskStateResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PolicyErrorException":{
       "type":"structure",
@@ -1374,8 +1363,7 @@
     },
     "PutResourceAttributesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ResourceAttribute":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mgn/2020-02-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/migration-hub-refactor-spaces/2021-10-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/migrationhub-config/2019-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/migrationhub-config/2019-06-30/service-2.json 2.31.35-1/awscli/botocore/data/migrationhub-config/2019-06-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/migrationhub-config/2019-06-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/migrationhub-config/2019-06-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"migrationhub-config",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Migration Hub Config",
     "serviceId":"MigrationHub Config",
     "signatureVersion":"v4",
     "signingName":"mgh",
     "targetPrefix":"AWSMigrationHubMultiAccountService",
-    "uid":"migrationhub-config-2019-06-30"
+    "uid":"migrationhub-config-2019-06-30",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateHomeRegionControl":{
@@ -140,8 +142,7 @@
     },
     "DeleteHomeRegionControlResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeHomeRegionControlsMaxResults":{
       "type":"integer",
@@ -199,8 +200,7 @@
     "ErrorMessage":{"type":"string"},
     "GetHomeRegionRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetHomeRegionResult":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/migrationhuborchestrator/2021-08-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/migrationhubstrategy/2020-02-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://mpa-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://mpa.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/paginators-1.json 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,40 @@
+{
+  "pagination": {
+    "ListApprovalTeams": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ApprovalTeams"
+    },
+    "ListIdentitySources": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "IdentitySources"
+    },
+    "ListPolicies": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Policies"
+    },
+    "ListPolicyVersions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "PolicyVersions"
+    },
+    "ListResourcePolicies": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ResourcePolicies"
+    },
+    "ListSessions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Sessions"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/service-2.json 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,2293 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2022-07-26",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"mpa",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"AWS Multi-party Approval",
+    "serviceId":"MPA",
+    "signatureVersion":"v4",
+    "signingName":"mpa",
+    "uid":"mpa-2022-07-26"
+  },
+  "operations":{
+    "CancelSession":{
+      "name":"CancelSession",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/sessions/{SessionArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"CancelSessionRequest"},
+      "output":{"shape":"CancelSessionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Cancels an approval session. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Session</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "idempotent":true
+    },
+    "CreateApprovalTeam":{
+      "name":"CreateApprovalTeam",
+      "http":{
+        "method":"POST",
+        "requestUri":"/approval-teams",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateApprovalTeamRequest"},
+      "output":{"shape":"CreateApprovalTeamResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates a new approval team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Approval team</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "idempotent":true
+    },
+    "CreateIdentitySource":{
+      "name":"CreateIdentitySource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identity-sources",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateIdentitySourceRequest"},
+      "output":{"shape":"CreateIdentitySourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a new identity source. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity Source</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "idempotent":true
+    },
+    "DeleteIdentitySource":{
+      "name":"DeleteIdentitySource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/identity-sources/{IdentitySourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteIdentitySourceRequest"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes an identity source. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity Source</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "idempotent":true
+    },
+    "DeleteInactiveApprovalTeamVersion":{
+      "name":"DeleteInactiveApprovalTeamVersion",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/approval-teams/{Arn}/{VersionId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteInactiveApprovalTeamVersionRequest"},
+      "output":{"shape":"DeleteInactiveApprovalTeamVersionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes an inactive approval team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p> <p>You can also use this operation to delete a team draft. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/update-team.html#update-team-draft-status\">Interacting with drafts</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "idempotent":true
+    },
+    "GetApprovalTeam":{
+      "name":"GetApprovalTeam",
+      "http":{
+        "method":"GET",
+        "requestUri":"/approval-teams/{Arn}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetApprovalTeamRequest"},
+      "output":{"shape":"GetApprovalTeamResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns details for an approval team.</p>"
+    },
+    "GetIdentitySource":{
+      "name":"GetIdentitySource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/identity-sources/{IdentitySourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetIdentitySourceRequest"},
+      "output":{"shape":"GetIdentitySourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns details for an identity source. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity Source</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "GetPolicyVersion":{
+      "name":"GetPolicyVersion",
+      "http":{
+        "method":"GET",
+        "requestUri":"/policy-versions/{PolicyVersionArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetPolicyVersionRequest"},
+      "output":{"shape":"GetPolicyVersionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns details for the version of a policy. Policies define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "GetResourcePolicy":{
+      "name":"GetResourcePolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetResourcePolicy",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResourcePolicyRequest"},
+      "output":{"shape":"GetResourcePolicyResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InvalidParameterException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns details about a policy for a resource.</p>"
+    },
+    "GetSession":{
+      "name":"GetSession",
+      "http":{
+        "method":"GET",
+        "requestUri":"/sessions/{SessionArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetSessionRequest"},
+      "output":{"shape":"GetSessionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns details for an approval session. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Session</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "ListApprovalTeams":{
+      "name":"ListApprovalTeams",
+      "http":{
+        "method":"POST",
+        "requestUri":"/approval-teams/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListApprovalTeamsRequest"},
+      "output":{"shape":"ListApprovalTeamsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of approval teams.</p>"
+    },
+    "ListIdentitySources":{
+      "name":"ListIdentitySources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/identity-sources/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListIdentitySourcesRequest"},
+      "output":{"shape":"ListIdentitySourcesResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of identity sources. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity Source</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "ListPolicies":{
+      "name":"ListPolicies",
+      "http":{
+        "method":"POST",
+        "requestUri":"/policies/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListPoliciesRequest"},
+      "output":{"shape":"ListPoliciesResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of policies. Policies define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "ListPolicyVersions":{
+      "name":"ListPolicyVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/policies/{PolicyArn}/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListPolicyVersionsRequest"},
+      "output":{"shape":"ListPolicyVersionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of the versions for policies. Policies define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "ListResourcePolicies":{
+      "name":"ListResourcePolicies",
+      "http":{
+        "method":"POST",
+        "requestUri":"/resource-policies/{ResourceArn}/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListResourcePoliciesRequest"},
+      "output":{"shape":"ListResourcePoliciesResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of policies for a resource.</p>"
+    },
+    "ListSessions":{
+      "name":"ListSessions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/approval-teams/{ApprovalTeamArn}/sessions/?List",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSessionsRequest"},
+      "output":{"shape":"ListSessionsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of approval sessions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Session</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns a list of the tags for a resource.</p>"
+    },
+    "StartActiveApprovalTeamDeletion":{
+      "name":"StartActiveApprovalTeamDeletion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/approval-teams/{Arn}?Delete",
+        "responseCode":200
+      },
+      "input":{"shape":"StartActiveApprovalTeamDeletionRequest"},
+      "output":{"shape":"StartActiveApprovalTeamDeletionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Starts the deletion process for an active approval team.</p> <note> <p> <b>Deletions require team approval</b> </p> <p>Requests to delete an active team must be approved by the team.</p> </note>",
+      "idempotent":true
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates or updates a resource tag. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{ResourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes a resource tag. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources. </p>",
+      "idempotent":true
+    },
+    "UpdateApprovalTeam":{
+      "name":"UpdateApprovalTeam",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/approval-teams/{Arn}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateApprovalTeamRequest"},
+      "output":{"shape":"UpdateApprovalTeamResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Updates an approval team. You can request to update the team description, approval threshold, and approvers in the team.</p> <note> <p> <b>Updates require team approval</b> </p> <p>Updates to an active team must be approved by the team.</p> </note>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>AccessDeniedException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>You do not have sufficient access to perform this action. Check your permissions, and try again.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AccountId":{
+      "type":"string",
+      "max":12,
+      "min":0,
+      "pattern":"\\d{12}"
+    },
+    "ActionCompletionStrategy":{
+      "type":"string",
+      "enum":["AUTO_COMPLETION_UPON_APPROVAL"]
+    },
+    "ActionName":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "ApprovalStrategy":{
+      "type":"structure",
+      "members":{
+        "MofN":{
+          "shape":"MofNApprovalStrategy",
+          "documentation":"<p>Minimum number of approvals (M) required for a total number of approvers (N).</p>"
+        }
+      },
+      "documentation":"<p>Strategy for how an approval team grants approval.</p>",
+      "union":true
+    },
+    "ApprovalStrategyResponse":{
+      "type":"structure",
+      "members":{
+        "MofN":{
+          "shape":"MofNApprovalStrategy",
+          "documentation":"<p>Minimum number of approvals (M) required for a total number of approvers (N).</p>"
+        }
+      },
+      "documentation":"<p>Contains details for how an approval team grants approval.</p>",
+      "union":true
+    },
+    "ApprovalTeamArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws(-[^:]+)?:mpa:[a-z0-9-]{1,20}:[0-9]{12}:approval-team/[a-zA-Z0-9._-]+"
+    },
+    "ApprovalTeamName":{
+      "type":"string",
+      "max":64,
+      "min":0,
+      "pattern":"[a-zA-Z0-9._-]+"
+    },
+    "ApprovalTeamRequestApprover":{
+      "type":"structure",
+      "required":[
+        "PrimaryIdentityId",
+        "PrimaryIdentitySourceArn"
+      ],
+      "members":{
+        "PrimaryIdentityId":{
+          "shape":"IdentityId",
+          "documentation":"<p>ID for the user.</p>"
+        },
+        "PrimaryIdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source. The identity source manages the user authentication for approvers.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an approver.</p>"
+    },
+    "ApprovalTeamRequestApprovers":{
+      "type":"list",
+      "member":{"shape":"ApprovalTeamRequestApprover"},
+      "max":20,
+      "min":1
+    },
+    "ApprovalTeamStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "INACTIVE",
+        "DELETING",
+        "PENDING"
+      ]
+    },
+    "ApprovalTeamStatusCode":{
+      "type":"string",
+      "enum":[
+        "VALIDATING",
+        "PENDING_ACTIVATION",
+        "FAILED_VALIDATION",
+        "FAILED_ACTIVATION",
+        "UPDATE_PENDING_APPROVAL",
+        "UPDATE_PENDING_ACTIVATION",
+        "UPDATE_FAILED_APPROVAL",
+        "UPDATE_FAILED_ACTIVATION",
+        "UPDATE_FAILED_VALIDATION",
+        "DELETE_PENDING_APPROVAL",
+        "DELETE_FAILED_APPROVAL",
+        "DELETE_FAILED_VALIDATION"
+      ]
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CancelSessionRequest":{
+      "type":"structure",
+      "required":["SessionArn"],
+      "members":{
+        "SessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the session.</p>",
+          "location":"uri",
+          "locationName":"SessionArn"
+        }
+      }
+    },
+    "CancelSessionResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>ConflictException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The request cannot be completed because it conflicts with the current state of a resource.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateApprovalTeamRequest":{
+      "type":"structure",
+      "required":[
+        "ApprovalStrategy",
+        "Approvers",
+        "Description",
+        "Policies",
+        "Name"
+      ],
+      "members":{
+        "ClientToken":{
+          "shape":"Token",
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services populates this field.</p> <note> <p> <b>What is idempotency?</b> </p> <p>When you make a mutating API request, the request typically returns a result before the operation's asynchronous workflows have completed. Operations might also time out or encounter other server issues before they complete, even though the request has already returned a result. This could make it difficult to determine whether the request succeeded or not, and could lead to multiple retries to ensure that the operation completes successfully. However, if the original request and the subsequent retries are successful, the operation is completed multiple times. This means that you might create more resources than you intended.</p> <p> <i>Idempotency</i> ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p> </note>",
+          "idempotencyToken":true
+        },
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategy",
+          "documentation":"<p>An <code>ApprovalStrategy</code> object. Contains details for how the team grants approval.</p>"
+        },
+        "Approvers":{
+          "shape":"ApprovalTeamRequestApprovers",
+          "documentation":"<p>An array of <code>ApprovalTeamRequesterApprovers</code> objects. Contains details for the approvers in the team.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "Policies":{
+          "shape":"PoliciesReferences",
+          "documentation":"<p>An array of <code>PolicyReference</code> objects. Contains a list of policies that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "Name":{
+          "shape":"ApprovalTeamName",
+          "documentation":"<p>Name of the team.</p>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>Tags you want to attach to the team.</p>"
+        }
+      }
+    },
+    "CreateApprovalTeamResponse":{
+      "type":"structure",
+      "members":{
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the team was created.</p>"
+        },
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team that was created.</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>Name of the team that was created.</p>"
+        },
+        "VersionId":{
+          "shape":"String",
+          "documentation":"<p>Version ID for the team that was created. When a team is updated, the version ID changes.</p>"
+        }
+      }
+    },
+    "CreateIdentitySourceRequest":{
+      "type":"structure",
+      "required":["IdentitySourceParameters"],
+      "members":{
+        "IdentitySourceParameters":{
+          "shape":"IdentitySourceParameters",
+          "documentation":"<p>A <code> IdentitySourceParameters</code> object. Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "ClientToken":{
+          "shape":"Token",
+          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services populates this field.</p> <note> <p> <b>What is idempotency?</b> </p> <p>When you make a mutating API request, the request typically returns a result before the operation's asynchronous workflows have completed. Operations might also time out or encounter other server issues before they complete, even though the request has already returned a result. This could make it difficult to determine whether the request succeeded or not, and could lead to multiple retries to ensure that the operation completes successfully. However, if the original request and the subsequent retries are successful, the operation is completed multiple times. This means that you might create more resources than you intended.</p> <p> <i>Idempotency</i> ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p> </note>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>Tag you want to attach to the identity source.</p>"
+        }
+      }
+    },
+    "CreateIdentitySourceResponse":{
+      "type":"structure",
+      "members":{
+        "IdentitySourceType":{
+          "shape":"IdentitySourceType",
+          "documentation":"<p>The type of resource that provided identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source that was created.</p>"
+        },
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the identity source was created.</p>"
+        }
+      }
+    },
+    "DeleteIdentitySourceRequest":{
+      "type":"structure",
+      "required":["IdentitySourceArn"],
+      "members":{
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for identity source.</p>",
+          "location":"uri",
+          "locationName":"IdentitySourceArn"
+        }
+      }
+    },
+    "DeleteInactiveApprovalTeamVersionRequest":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "VersionId"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amaazon Resource Name (ARN) for the team.</p>",
+          "location":"uri",
+          "locationName":"Arn"
+        },
+        "VersionId":{
+          "shape":"String",
+          "documentation":"<p>Version ID for the team.</p>",
+          "location":"uri",
+          "locationName":"VersionId"
+        }
+      }
+    },
+    "DeleteInactiveApprovalTeamVersionResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "Description":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "sensitive":true
+    },
+    "Filter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"FilterField",
+          "documentation":"<p>Name of the filter to use.</p> <note> <p> <b>Supported filters</b> </p> <p>The supported filters for <a>ListSessions</a> are: <code>ActionName</code>, <code>SessionStatus</code>, and <code>InitationTime</code>.</p> </note>"
+        },
+        "Operator":{
+          "shape":"Operator",
+          "documentation":"<p>Operator to use for filtering.</p> <ul> <li> <p> <code>EQ</code>: Equal to the specified value</p> </li> <li> <p> <code>NE</code>: Not equal to the specified value</p> </li> <li> <p> <code>GT</code>: Greater than the specified value</p> </li> <li> <p> <code>LT</code>: Less than the specified value</p> </li> <li> <p> <code>GTE</code>: Greater than or equal to the specified value</p> </li> <li> <p> <code>LTE</code>: Less than or equal to the specified value</p> </li> <li> <p> <code>CONTAINS</code>: Contains the specified value</p> </li> <li> <p> <code>NOT_CONTAINS</code>: Does not contain the specified value</p> </li> <li> <p> <code>BETWEEN</code>: Between two values, inclusive of the specified values.</p> </li> </ul> <note> <p> <b>Supported operators for each filter</b>:</p> <ul> <li> <p> <code>ActionName</code>: <code>EQ</code> | <code>NE</code> | <code>CONTAINS</code> | <code>NOT_CONTAINS</code> </p> </li> <li> <p> <code>SessionStatus</code>: <code>EQ</code> | <code>NE</code> </p> </li> <li> <p> <code>InitiationTime</code>: <code>GT</code> | <code>LT</code> | <code>GTE</code> | <code>LTE</code> | <code>BETWEEN</code> </p> </li> </ul> </note>"
+        },
+        "Value":{
+          "shape":"String",
+          "documentation":"<p>Value to use for filtering. For the <code>BETWEEN</code> operator, specify values in the format <code>a AND b</code> (<code>AND</code> is case-insensitive).</p>"
+        }
+      },
+      "documentation":"<p>Contains the filter to apply to requests. You can specify up to 10 filters for a request.</p>"
+    },
+    "FilterField":{
+      "type":"string",
+      "enum":[
+        "ActionName",
+        "ApprovalTeamName",
+        "VotingTime",
+        "Vote",
+        "SessionStatus",
+        "InitiationTime"
+      ]
+    },
+    "Filters":{
+      "type":"list",
+      "member":{"shape":"Filter"},
+      "max":10,
+      "min":0
+    },
+    "GetApprovalTeamRequest":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>",
+          "location":"uri",
+          "locationName":"Arn"
+        }
+      }
+    },
+    "GetApprovalTeamResponse":{
+      "type":"structure",
+      "members":{
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the team was created.</p>"
+        },
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategyResponse",
+          "documentation":"<p>An <code>ApprovalStrategyResponse</code> object. Contains details for how the team grants approval.</p>"
+        },
+        "NumberOfApprovers":{
+          "shape":"Integer",
+          "documentation":"<p>Total number of approvers in the team.</p>"
+        },
+        "Approvers":{
+          "shape":"GetApprovalTeamResponseApprovers",
+          "documentation":"<p>An array of <code>GetApprovalTeamResponseApprover </code> objects. Contains details for the approvers in the team.</p>"
+        },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>Name of the approval team.</p>"
+        },
+        "Status":{
+          "shape":"ApprovalTeamStatus",
+          "documentation":"<p>Status for the team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusCode":{
+          "shape":"ApprovalTeamStatusCode",
+          "documentation":"<p>Status code for the approval team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusMessage":{
+          "shape":"Message",
+          "documentation":"<p>Message describing the status for the team.</p>"
+        },
+        "UpdateSessionArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the session.</p>"
+        },
+        "VersionId":{
+          "shape":"String",
+          "documentation":"<p>Version ID for the team.</p>"
+        },
+        "Policies":{
+          "shape":"PoliciesReferences",
+          "documentation":"<p>An array of <code>PolicyReference</code> objects. Contains a list of policies that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "LastUpdateTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the team was last updated.</p>"
+        },
+        "PendingUpdate":{
+          "shape":"PendingUpdate",
+          "documentation":"<p>A <code>PendingUpdate</code> object. Contains details for the pending updates for the team, if applicable.</p>"
+        }
+      }
+    },
+    "GetApprovalTeamResponseApprover":{
+      "type":"structure",
+      "members":{
+        "ApproverId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>ID for the approver.</p>"
+        },
+        "ResponseTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the approver responded to an approval team invitation.</p>"
+        },
+        "PrimaryIdentityId":{
+          "shape":"IdentityId",
+          "documentation":"<p>ID for the user.</p>"
+        },
+        "PrimaryIdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source. The identity source manages the user authentication for approvers.</p>"
+        },
+        "PrimaryIdentityStatus":{
+          "shape":"IdentityStatus",
+          "documentation":"<p>Status for the identity source. For example, if an approver has accepted a team invitation with a user authentication method managed by the identity source.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an approver.</p>"
+    },
+    "GetApprovalTeamResponseApprovers":{
+      "type":"list",
+      "member":{"shape":"GetApprovalTeamResponseApprover"},
+      "max":20,
+      "min":0
+    },
+    "GetIdentitySourceRequest":{
+      "type":"structure",
+      "required":["IdentitySourceArn"],
+      "members":{
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source.</p>",
+          "location":"uri",
+          "locationName":"IdentitySourceArn"
+        }
+      }
+    },
+    "GetIdentitySourceResponse":{
+      "type":"structure",
+      "members":{
+        "IdentitySourceType":{
+          "shape":"IdentitySourceType",
+          "documentation":"<p>The type of resource that provided identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "IdentitySourceParameters":{
+          "shape":"IdentitySourceParametersForGet",
+          "documentation":"<p>A <code> IdentitySourceParameters</code> object. Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source.</p>"
+        },
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the identity source was created.</p>"
+        },
+        "Status":{
+          "shape":"IdentitySourceStatus",
+          "documentation":"<p>Status for the identity source. For example, if the identity source is <code>ACTIVE</code>.</p>"
+        },
+        "StatusCode":{
+          "shape":"IdentitySourceStatusCode",
+          "documentation":"<p>Status code of the identity source.</p>"
+        },
+        "StatusMessage":{
+          "shape":"String",
+          "documentation":"<p>Message describing the status for the identity source.</p>"
+        }
+      }
+    },
+    "GetPolicyVersionRequest":{
+      "type":"structure",
+      "required":["PolicyVersionArn"],
+      "members":{
+        "PolicyVersionArn":{
+          "shape":"QualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>",
+          "location":"uri",
+          "locationName":"PolicyVersionArn"
+        }
+      }
+    },
+    "GetPolicyVersionResponse":{
+      "type":"structure",
+      "required":["PolicyVersion"],
+      "members":{
+        "PolicyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>A <code>PolicyVersion</code> object. Contains details for the version of the policy. Policies define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        }
+      }
+    },
+    "GetResourcePolicyRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "PolicyName",
+        "PolicyType"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "PolicyName":{
+          "shape":"String",
+          "documentation":"<p>Name of the policy.</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy.</p>"
+        }
+      }
+    },
+    "GetResourcePolicyResponse":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "PolicyType",
+        "PolicyName",
+        "PolicyDocument"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource.</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy</p>"
+        },
+        "PolicyVersionArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy version.</p>"
+        },
+        "PolicyName":{
+          "shape":"PolicyName",
+          "documentation":"<p>Name of the policy.</p>"
+        },
+        "PolicyDocument":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>Document that contains the contents for the policy.</p>"
+        }
+      }
+    },
+    "GetSessionRequest":{
+      "type":"structure",
+      "required":["SessionArn"],
+      "members":{
+        "SessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the session.</p>",
+          "location":"uri",
+          "locationName":"SessionArn"
+        }
+      }
+    },
+    "GetSessionResponse":{
+      "type":"structure",
+      "members":{
+        "SessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the session.</p>"
+        },
+        "ApprovalTeamArn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the approval team.</p>"
+        },
+        "ApprovalTeamName":{
+          "shape":"ApprovalTeamName",
+          "documentation":"<p>Name of the approval team.</p>"
+        },
+        "ProtectedResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the protected operation.</p>"
+        },
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategyResponse",
+          "documentation":"<p>An <code>ApprovalStrategyResponse</code> object. Contains details for how the team grants approval</p>"
+        },
+        "NumberOfApprovers":{
+          "shape":"Integer",
+          "documentation":"<p>Total number of approvers in the session.</p>"
+        },
+        "InitiationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session was initiated.</p>"
+        },
+        "ExpirationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session will expire.</p>"
+        },
+        "CompletionTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session completed.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the session.</p>"
+        },
+        "Metadata":{
+          "shape":"SessionMetadata",
+          "documentation":"<p>Metadata for the session.</p>"
+        },
+        "Status":{
+          "shape":"SessionStatus",
+          "documentation":"<p>Status for the session. For example, if the team has approved the requested operation.</p>"
+        },
+        "StatusCode":{
+          "shape":"SessionStatusCode",
+          "documentation":"<p>Status code of the session.</p>"
+        },
+        "StatusMessage":{
+          "shape":"Message",
+          "documentation":"<p>Message describing the status for session.</p>"
+        },
+        "ExecutionStatus":{
+          "shape":"SessionExecutionStatus",
+          "documentation":"<p>Status for the protected operation. For example, if the operation is <code>PENDING</code>.</p>"
+        },
+        "ActionName":{
+          "shape":"ActionName",
+          "documentation":"<p>Name of the protected operation.</p>"
+        },
+        "RequesterServicePrincipal":{
+          "shape":"ServicePrincipal",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services\">Service principal</a> for the service associated with the protected operation.</p>"
+        },
+        "RequesterPrincipalArn":{
+          "shape":"String",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request\">IAM principal</a> that made the operation request.</p>"
+        },
+        "RequesterAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>ID for the account that made the operation request.</p>"
+        },
+        "RequesterRegion":{
+          "shape":"Region",
+          "documentation":"<p>Amazon Web Services Region where the operation request originated.</p>"
+        },
+        "RequesterComment":{
+          "shape":"RequesterComment",
+          "documentation":"<p>Message from the account that made the operation request</p>"
+        },
+        "ActionCompletionStrategy":{
+          "shape":"ActionCompletionStrategy",
+          "documentation":"<p>Strategy for executing the protected operation. <code>AUTO_COMPLETION_UPON_APPROVAL</code> means the operation is automatically executed using the requester's permissions, if approved.</p>"
+        },
+        "ApproverResponses":{
+          "shape":"GetSessionResponseApproverResponses",
+          "documentation":"<p>An array of <code>GetSessionResponseApproverResponse</code> objects. Contains details for approver responses in the session.</p>"
+        }
+      }
+    },
+    "GetSessionResponseApproverResponse":{
+      "type":"structure",
+      "members":{
+        "ApproverId":{
+          "shape":"ParticipantId",
+          "documentation":"<p>ID for the approver.</p>"
+        },
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source. The identity source manages the user authentication for approvers.</p>"
+        },
+        "IdentityId":{
+          "shape":"IdentityId",
+          "documentation":"<p>ID for the identity source. The identity source manages the user authentication for approvers.</p>"
+        },
+        "Response":{
+          "shape":"SessionResponse",
+          "documentation":"<p>Response to the operation request.</p>"
+        },
+        "ResponseTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when a approver responded to the operation request.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an approver response in an approval session.</p>"
+    },
+    "GetSessionResponseApproverResponses":{
+      "type":"list",
+      "member":{"shape":"GetSessionResponseApproverResponse"},
+      "max":20,
+      "min":0
+    },
+    "IamIdentityCenter":{
+      "type":"structure",
+      "required":[
+        "InstanceArn",
+        "Region"
+      ],
+      "members":{
+        "InstanceArn":{
+          "shape":"IdcInstanceArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the IAM Identity Center instance.</p>"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p>Amazon Web Services Region where the IAM Identity Center instance is located.</p>"
+        }
+      },
+      "documentation":"<p>IAM Identity Center credentials. For more information see, <a href=\"http://aws.amazon.com/identity-center/\">IAM Identity Center</a> .</p>"
+    },
+    "IamIdentityCenterForGet":{
+      "type":"structure",
+      "members":{
+        "InstanceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the IAM Identity Center instance.</p>"
+        },
+        "ApprovalPortalUrl":{
+          "shape":"String",
+          "documentation":"<p>URL for the approval portal associated with the IAM Identity Center instance.</p>"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p>Amazon Web Services Region where the IAM Identity Center instance is located.</p>"
+        }
+      },
+      "documentation":"<p>IAM Identity Center credentials. For more information see, <a href=\"http://aws.amazon.com/identity-center/\">IAM Identity Center</a> .</p>"
+    },
+    "IamIdentityCenterForList":{
+      "type":"structure",
+      "members":{
+        "InstanceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the IAM Identity Center instance.</p>"
+        },
+        "ApprovalPortalUrl":{
+          "shape":"String",
+          "documentation":"<p>URL for the approval portal associated with the IAM Identity Center instance.</p>"
+        },
+        "Region":{
+          "shape":"String",
+          "documentation":"<p>Amazon Web Services Region where the IAM Identity Center instance is located.</p>"
+        }
+      },
+      "documentation":"<p>IAM Identity Center credentials. For more information see, <a href=\"http://aws.amazon.com/identity-center/\">IAM Identity Center</a> .</p>"
+    },
+    "IdcInstanceArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:.+:sso:::instance/(?:sso)?ins-[a-zA-Z0-9-.]{16}"
+    },
+    "IdentityId":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "IdentitySourceForList":{
+      "type":"structure",
+      "members":{
+        "IdentitySourceType":{
+          "shape":"IdentitySourceType",
+          "documentation":"<p>The type of resource that provided identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "IdentitySourceParameters":{
+          "shape":"IdentitySourceParametersForList",
+          "documentation":"<p>A <code>IdentitySourceParametersForList</code> object. Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance.</p>"
+        },
+        "IdentitySourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the identity source.</p>"
+        },
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the identity source was created.</p>"
+        },
+        "Status":{
+          "shape":"IdentitySourceStatus",
+          "documentation":"<p>Status for the identity source. For example, if the identity source is <code>ACTIVE</code>.</p>"
+        },
+        "StatusCode":{
+          "shape":"IdentitySourceStatusCode",
+          "documentation":"<p>Status code of the identity source.</p>"
+        },
+        "StatusMessage":{
+          "shape":"String",
+          "documentation":"<p>Message describing the status for the identity source.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an identity source. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity source</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "IdentitySourceParameters":{
+      "type":"structure",
+      "members":{
+        "IamIdentityCenter":{
+          "shape":"IamIdentityCenter",
+          "documentation":"<p>IAM Identity Center credentials.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance.</p>"
+    },
+    "IdentitySourceParametersForGet":{
+      "type":"structure",
+      "members":{
+        "IamIdentityCenter":{
+          "shape":"IamIdentityCenterForGet",
+          "documentation":"<p>IAM Identity Center credentials.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity source</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "union":true
+    },
+    "IdentitySourceParametersForList":{
+      "type":"structure",
+      "members":{
+        "IamIdentityCenter":{
+          "shape":"IamIdentityCenterForList",
+          "documentation":"<p>IAM Identity Center credentials.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the resource that provides identities to the identity source. For example, an IAM Identity Center instance. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-concepts.html\">Identity source</a> in the <i>Multi-party approval User Guide</i>.</p>",
+      "union":true
+    },
+    "IdentitySourceStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "DELETING",
+        "ERROR"
+      ]
+    },
+    "IdentitySourceStatusCode":{
+      "type":"string",
+      "enum":[
+        "ACCESS_DENIED",
+        "DELETION_FAILED",
+        "IDC_INSTANCE_NOT_FOUND",
+        "IDC_INSTANCE_NOT_VALID"
+      ]
+    },
+    "IdentitySourceType":{
+      "type":"string",
+      "enum":["IAM_IDENTITY_CENTER"]
+    },
+    "IdentitySources":{
+      "type":"list",
+      "member":{"shape":"IdentitySourceForList"},
+      "max":20,
+      "min":0
+    },
+    "IdentityStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "ACCEPTED",
+        "REJECTED",
+        "INVALID"
+      ]
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>InternalServerException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The service encountered an internal error. Try your request again. If the problem persists, contact Amazon Web Services Support.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "InvalidParameterException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>InvalidParameterException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The request contains an invalid parameter value.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "IsoTimestamp":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "ListApprovalTeamsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListApprovalTeamsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "ApprovalTeams":{
+          "shape":"ListApprovalTeamsResponseApprovalTeams",
+          "documentation":"<p>An array of <code>ListApprovalTeamsResponseApprovalTeam</code> objects. Contains details for approval teams.</p>"
+        }
+      }
+    },
+    "ListApprovalTeamsResponseApprovalTeam":{
+      "type":"structure",
+      "members":{
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the team was created.</p>"
+        },
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategyResponse",
+          "documentation":"<p>An <code>ApprovalStrategyResponse</code> object. Contains details for how an approval team grants approval.</p>"
+        },
+        "NumberOfApprovers":{
+          "shape":"Integer",
+          "documentation":"<p>Total number of approvers in the team.</p>"
+        },
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>"
+        },
+        "Name":{
+          "shape":"ApprovalTeamName",
+          "documentation":"<p>Name of the team.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "Status":{
+          "shape":"ApprovalTeamStatus",
+          "documentation":"<p>Status for the team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusCode":{
+          "shape":"ApprovalTeamStatusCode",
+          "documentation":"<p>Status code for the team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusMessage":{
+          "shape":"Message",
+          "documentation":"<p>Message describing the status for the team.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an approval team</p>"
+    },
+    "ListApprovalTeamsResponseApprovalTeams":{
+      "type":"list",
+      "member":{"shape":"ListApprovalTeamsResponseApprovalTeam"},
+      "max":20,
+      "min":0
+    },
+    "ListIdentitySourcesRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListIdentitySourcesResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "IdentitySources":{
+          "shape":"IdentitySources",
+          "documentation":"<p>A <code>IdentitySources</code>. Contains details for identity sources.</p>"
+        }
+      }
+    },
+    "ListPoliciesRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListPoliciesResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "Policies":{
+          "shape":"Policies",
+          "documentation":"<p>An array of <code>Policy</code> objects. Contains a list of policies that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        }
+      }
+    },
+    "ListPolicyVersionsRequest":{
+      "type":"structure",
+      "required":["PolicyArn"],
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "PolicyArn":{
+          "shape":"UnqualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>",
+          "location":"uri",
+          "locationName":"PolicyArn"
+        }
+      }
+    },
+    "ListPolicyVersionsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "PolicyVersions":{
+          "shape":"PolicyVersions",
+          "documentation":"<p>An array of <code>PolicyVersionSummary</code> objects. Contains details for the version of the policies that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        }
+      }
+    },
+    "ListResourcePoliciesRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        }
+      }
+    },
+    "ListResourcePoliciesResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "ResourcePolicies":{
+          "shape":"ListResourcePoliciesResponseResourcePolicies",
+          "documentation":"<p>An array of <code>ListResourcePoliciesResponseResourcePolicy</code> objects. Contains details about the policy for the resource.</p>"
+        }
+      }
+    },
+    "ListResourcePoliciesResponseResourcePolicies":{
+      "type":"list",
+      "member":{"shape":"ListResourcePoliciesResponseResourcePolicy"},
+      "max":100,
+      "min":0
+    },
+    "ListResourcePoliciesResponseResourcePolicy":{
+      "type":"structure",
+      "members":{
+        "PolicyArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for policy.</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy.</p>"
+        },
+        "PolicyName":{
+          "shape":"String",
+          "documentation":"<p>Name of the policy.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about a policy for a resource.</p>"
+    },
+    "ListSessionsRequest":{
+      "type":"structure",
+      "required":["ApprovalTeamArn"],
+      "members":{
+        "ApprovalTeamArn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the approval team.</p>",
+          "location":"uri",
+          "locationName":"ApprovalTeamArn"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the response. If more results exist than the specified <code>MaxResults</code> value, a token is included in the response so that you can retrieve the remaining results.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "Filters":{
+          "shape":"Filters",
+          "documentation":"<p>An array of <code>Filter</code> objects. Contains the filter to apply when listing sessions.</p>"
+        }
+      }
+    },
+    "ListSessionsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a next call to the operation to get more output. You can repeat this until the <code>NextToken</code> response element returns <code>null</code>.</p>"
+        },
+        "Sessions":{
+          "shape":"ListSessionsResponseSessions",
+          "documentation":"<p>An array of <code>ListSessionsResponseSession</code> objects. Contains details for the sessions.</p>"
+        }
+      }
+    },
+    "ListSessionsResponseSession":{
+      "type":"structure",
+      "members":{
+        "SessionArn":{
+          "shape":"SessionArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the session.</p>"
+        },
+        "ApprovalTeamName":{
+          "shape":"ApprovalTeamName",
+          "documentation":"<p>Name of the approval team.</p>"
+        },
+        "ApprovalTeamArn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the approval team.</p>"
+        },
+        "InitiationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session was initiated.</p>"
+        },
+        "ExpirationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session was expire.</p>"
+        },
+        "CompletionTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the session was completed.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "ActionName":{
+          "shape":"ActionName",
+          "documentation":"<p>Name of the protected operation.</p>"
+        },
+        "ProtectedResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the protected operation.</p>"
+        },
+        "RequesterServicePrincipal":{
+          "shape":"ServicePrincipal",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services\">Service principal</a> for the service associated with the protected operation.</p>"
+        },
+        "RequesterPrincipalArn":{
+          "shape":"String",
+          "documentation":"<p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-request\">IAM principal</a> that made the operation request.</p>"
+        },
+        "RequesterRegion":{
+          "shape":"Region",
+          "documentation":"<p>Amazon Web Services Region where the operation request originated.</p>"
+        },
+        "RequesterAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>ID for the account that made the operation request.</p>"
+        },
+        "Status":{
+          "shape":"SessionStatus",
+          "documentation":"<p>Status for the protected operation. For example, if the operation is <code>PENDING</code>.</p>"
+        },
+        "StatusCode":{
+          "shape":"SessionStatusCode",
+          "documentation":"<p>Status code of the session.</p>"
+        },
+        "StatusMessage":{
+          "shape":"Message",
+          "documentation":"<p>Message describing the status for session.</p>"
+        },
+        "ActionCompletionStrategy":{
+          "shape":"ActionCompletionStrategy",
+          "documentation":"<p>Strategy for executing the protected operation. <code>AUTO_COMPLETION_UPON_APPROVAL</code> means the operation is executed automatically using the requester's permissions, if approved.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for an approval session. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Session</a> in the <i>Multi-party approval User Guide</i> </p>"
+    },
+    "ListSessionsResponseSessions":{
+      "type":"list",
+      "member":{"shape":"ListSessionsResponseSession"},
+      "max":20,
+      "min":0
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>Tags attached to the resource.</p>"
+        }
+      }
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "Message":{
+      "type":"string",
+      "max":500,
+      "min":0
+    },
+    "MofNApprovalStrategy":{
+      "type":"structure",
+      "required":["MinApprovalsRequired"],
+      "members":{
+        "MinApprovalsRequired":{
+          "shape":"MofNApprovalStrategyMinApprovalsRequiredInteger",
+          "documentation":"<p>Minimum number of approvals (M) required for a total number of approvers (N).</p>"
+        }
+      },
+      "documentation":"<p>Strategy for how an approval team grants approval.</p>"
+    },
+    "MofNApprovalStrategyMinApprovalsRequiredInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "Operator":{
+      "type":"string",
+      "enum":[
+        "EQ",
+        "NE",
+        "GT",
+        "LT",
+        "GTE",
+        "LTE",
+        "CONTAINS",
+        "NOT_CONTAINS",
+        "BETWEEN"
+      ]
+    },
+    "ParticipantId":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "PendingUpdate":{
+      "type":"structure",
+      "members":{
+        "VersionId":{
+          "shape":"String",
+          "documentation":"<p>Version ID for the team.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategyResponse",
+          "documentation":"<p>An <code>ApprovalStrategyResponse</code> object. Contains details for how the team grants approval.</p>"
+        },
+        "NumberOfApprovers":{
+          "shape":"Integer",
+          "documentation":"<p>Total number of approvers in the team.</p>"
+        },
+        "Status":{
+          "shape":"ApprovalTeamStatus",
+          "documentation":"<p>Status for the team. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusCode":{
+          "shape":"ApprovalTeamStatusCode",
+          "documentation":"<p>Status code for the update. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-health.html\">Team health</a> in the <i>Multi-party approval User Guide</i>.</p>"
+        },
+        "StatusMessage":{
+          "shape":"Message",
+          "documentation":"<p>Message describing the status for the team.</p>"
+        },
+        "Approvers":{
+          "shape":"GetApprovalTeamResponseApprovers",
+          "documentation":"<p>An array of <code>GetApprovalTeamResponseApprover </code> objects. Contains details for the approvers in the team.</p>"
+        },
+        "UpdateInitiationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the update request was initiated.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the pending updates for an approval team, if applicable.</p>"
+    },
+    "Policies":{
+      "type":"list",
+      "member":{"shape":"Policy"},
+      "max":20,
+      "min":0
+    },
+    "PoliciesReferences":{
+      "type":"list",
+      "member":{"shape":"PolicyReference"},
+      "max":10,
+      "min":1
+    },
+    "Policy":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "DefaultVersion",
+        "PolicyType",
+        "Name"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"UnqualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>"
+        },
+        "DefaultVersion":{
+          "shape":"PolicyVersionId",
+          "documentation":"<p>Determines if the specified policy is the default for the team.</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy.</p>"
+        },
+        "Name":{
+          "shape":"PolicyName",
+          "documentation":"<p>Name of the policy.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for a policy. Policies define what operations a team that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "PolicyDocument":{
+      "type":"string",
+      "max":400000,
+      "min":0,
+      "sensitive":true
+    },
+    "PolicyName":{
+      "type":"string",
+      "max":64,
+      "min":0
+    },
+    "PolicyReference":{
+      "type":"structure",
+      "required":["PolicyArn"],
+      "members":{
+        "PolicyArn":{
+          "shape":"QualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>"
+        }
+      },
+      "documentation":"<p>Contains the Amazon Resource Name (ARN) for a policy. Policies define what operations a team that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "PolicyStatus":{
+      "type":"string",
+      "enum":[
+        "ATTACHABLE",
+        "DEPRECATED"
+      ]
+    },
+    "PolicyType":{
+      "type":"string",
+      "enum":[
+        "AWS_MANAGED",
+        "AWS_RAM"
+      ]
+    },
+    "PolicyVersion":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "PolicyArn",
+        "VersionId",
+        "PolicyType",
+        "IsDefault",
+        "Name",
+        "Status",
+        "CreationTime",
+        "LastUpdatedTime",
+        "Document"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"QualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>"
+        },
+        "PolicyArn":{
+          "shape":"UnqualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>"
+        },
+        "VersionId":{
+          "shape":"PolicyVersionId",
+          "documentation":"<p>Verison ID</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy.</p>"
+        },
+        "IsDefault":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if the specified policy is the default for the team.</p>"
+        },
+        "Name":{
+          "shape":"PolicyName",
+          "documentation":"<p>Name of the policy.</p>"
+        },
+        "Status":{
+          "shape":"PolicyStatus",
+          "documentation":"<p>Status for the policy. For example, if the policy is <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_attach-policy.html\">attachable</a> or <a href=\"https://docs.aws.amazon.com/access_policies_managed-deprecated.html\">deprecated</a>.</p>"
+        },
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the policy was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the policy was last updated.</p>"
+        },
+        "Document":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>Document that contains the policy contents.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the version of a policy. Policies define what operations a team that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "PolicyVersionId":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "PolicyVersionSummary":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "PolicyArn",
+        "VersionId",
+        "PolicyType",
+        "IsDefault",
+        "Name",
+        "Status",
+        "CreationTime",
+        "LastUpdatedTime"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"QualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>"
+        },
+        "PolicyArn":{
+          "shape":"UnqualifiedPolicyArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the policy.</p>"
+        },
+        "VersionId":{
+          "shape":"PolicyVersionId",
+          "documentation":"<p>Version ID for the policy.</p>"
+        },
+        "PolicyType":{
+          "shape":"PolicyType",
+          "documentation":"<p>The type of policy.</p>"
+        },
+        "IsDefault":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines if the specified policy is the default for the team.</p>"
+        },
+        "Name":{
+          "shape":"PolicyName",
+          "documentation":"<p>Name of the policy</p>"
+        },
+        "Status":{
+          "shape":"PolicyStatus",
+          "documentation":"<p>Status for the policy. For example, if the policy is <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_attach-policy.html\">attachable</a> or <a href=\"https://docs.aws.amazon.com/access_policies_managed-deprecated.html\">deprecated</a>.</p>"
+        },
+        "CreationTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the policy was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the policy was last updated.</p>"
+        }
+      },
+      "documentation":"<p>Contains details for the version of a policy. Policies define what operations a team that define the permissions for team resources.</p> <p>The protected operation for a service integration might require specific permissions. For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/mpa-integrations.html\">How other services work with Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+    },
+    "PolicyVersions":{
+      "type":"list",
+      "member":{"shape":"PolicyVersionSummary"},
+      "max":20,
+      "min":0
+    },
+    "QualifiedPolicyArn":{
+      "type":"string",
+      "max":1224,
+      "min":0,
+      "pattern":"arn:.{1,63}:mpa:::aws:policy/[a-zA-Z0-9_\\.-]{1,1023}/[a-zA-Z0-9_\\.-]{1,1023}/(?:[\\d]+|\\$DEFAULT)"
+    },
+    "Region":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
+    "RequesterComment":{
+      "type":"string",
+      "max":200,
+      "min":0,
+      "sensitive":true
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>ResourceNotFoundException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The specified resource doesn't exist. Check the resource ID, and try again.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ServicePrincipal":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>ServiceQuotaExceededException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The request exceeds the service quota for your account. Request a quota increase or reduce your request size.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "SessionArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws(-[^:]+)?:mpa:[a-z0-9-]{1,20}:[0-9]{12}:session/[a-zA-Z0-9._-]+/[a-zA-Z0-9_-]+"
+    },
+    "SessionExecutionStatus":{
+      "type":"string",
+      "enum":[
+        "EXECUTED",
+        "FAILED",
+        "PENDING"
+      ]
+    },
+    "SessionKey":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\p{P}]*",
+      "sensitive":true
+    },
+    "SessionMetadata":{
+      "type":"map",
+      "key":{"shape":"SessionKey"},
+      "value":{"shape":"SessionValue"},
+      "sensitive":true
+    },
+    "SessionResponse":{
+      "type":"string",
+      "enum":[
+        "APPROVED",
+        "REJECTED",
+        "NO_RESPONSE"
+      ]
+    },
+    "SessionStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "CANCELLED",
+        "APPROVED",
+        "FAILED",
+        "CREATING"
+      ]
+    },
+    "SessionStatusCode":{
+      "type":"string",
+      "enum":[
+        "REJECTED",
+        "EXPIRED",
+        "CONFIGURATION_CHANGED"
+      ]
+    },
+    "SessionValue":{
+      "type":"string",
+      "max":200,
+      "min":1,
+      "pattern":"[a-zA-Z0-9\\p{P}]*",
+      "sensitive":true
+    },
+    "StartActiveApprovalTeamDeletionRequest":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "PendingWindowDays":{
+          "shape":"Integer",
+          "documentation":"<p>Number of days between when the team approves the delete request and when the team is deleted.</p>"
+        },
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>",
+          "location":"uri",
+          "locationName":"Arn"
+        }
+      }
+    },
+    "StartActiveApprovalTeamDeletionResponse":{
+      "type":"structure",
+      "members":{
+        "DeletionCompletionTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the deletion process is scheduled to complete.</p>"
+        },
+        "DeletionStartTime":{
+          "shape":"IsoTimestamp",
+          "documentation":"<p>Timestamp when the deletion process was initiated.</p>"
+        }
+      }
+    },
+    "String":{
+      "type":"string",
+      "max":1000,
+      "min":0
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "sensitive":true
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":50,
+      "min":0,
+      "sensitive":true
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "Tags"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource you want to tag.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>Tags that you have added to the specified resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "sensitive":true
+    },
+    "Tags":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "sensitive":true
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>ThrottlingException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Token":{
+      "type":"string",
+      "max":4096,
+      "min":0
+    },
+    "TooManyTagsException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>TooManyTagsException</code> error.</p>"
+        },
+        "ResourceName":{
+          "shape":"String",
+          "documentation":"<p>Name of the resource for the <code>TooManyTagsException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The request exceeds the maximum number of tags allowed for this resource. Remove some tags, and try again.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UnqualifiedPolicyArn":{
+      "type":"string",
+      "max":1224,
+      "min":0,
+      "pattern":"arn:.{1,63}:mpa:::aws:policy/[a-zA-Z0-9_\\.-]{1,1023}/[a-zA-Z0-9_\\.-]{1,1023}"
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "ResourceArn",
+        "TagKeys"
+      ],
+      "members":{
+        "ResourceArn":{
+          "shape":"String",
+          "documentation":"<p>Amazon Resource Name (ARN) for the resource you want to untag.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>Array of tag key-value pairs that you want to untag.</p>"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "UpdateApprovalTeamRequest":{
+      "type":"structure",
+      "required":["Arn"],
+      "members":{
+        "ApprovalStrategy":{
+          "shape":"ApprovalStrategy",
+          "documentation":"<p>An <code>ApprovalStrategy</code> object. Contains details for how the team grants approval.</p>"
+        },
+        "Approvers":{
+          "shape":"ApprovalTeamRequestApprovers",
+          "documentation":"<p>An array of <code>ApprovalTeamRequestApprover</code> objects. Contains details for the approvers in the team.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Description for the team.</p>"
+        },
+        "Arn":{
+          "shape":"ApprovalTeamArn",
+          "documentation":"<p>Amazon Resource Name (ARN) for the team.</p>",
+          "location":"uri",
+          "locationName":"Arn"
+        }
+      }
+    },
+    "UpdateApprovalTeamResponse":{
+      "type":"structure",
+      "members":{
+        "VersionId":{
+          "shape":"String",
+          "documentation":"<p>Version ID for the team that was created. When an approval team is updated, the version ID changes.</p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Message for the <code>ValidationException</code> error.</p>"
+        }
+      },
+      "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    }
+  },
+  "documentation":"<p>Multi-party approval is a capability of <a href=\"http://aws.amazon.com/organizations\">Organizations</a> that allows you to protect a predefined list of operations through a distributed approval process. Use Multi-party approval to establish approval workflows and transform security processes into team-based decisions.</p> <p> <b>When to use Multi-party approval</b>:</p> <ul> <li> <p>You need to align with the Zero Trust principle of \"never trust, always verify\"</p> </li> <li> <p>You need to make sure that the right humans have access to the right things in the right way</p> </li> <li> <p>You need distributed decision-making for sensitive or critical operations</p> </li> <li> <p>You need to protect against unintended operations on sensitive or critical resources</p> </li> <li> <p>You need formal reviews and approvals for auditing or compliance reasons</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/mpa/latest/userguide/what-is.html\">What is Multi-party approval</a> in the <i>Multi-party approval User Guide</i>.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/waiters-2.json 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/mpa/2022-07-26/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mpa/2022-07-26/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mq/2017-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mq/2017-11-27/service-2.json 2.31.35-1/awscli/botocore/data/mq/2017-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/mq/2017-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mq/2017-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -188,6 +188,44 @@
       ],
       "documentation": "<p>Deletes a broker. Note: This API is asynchronous.</p>"
     },
+    "DeleteConfiguration": {
+      "name": "DeleteConfiguration",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v1/configurations/{configuration-id}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteConfigurationRequest"
+      },
+      "output": {
+        "shape": "DeleteConfigurationResponse",
+        "documentation": "<p>HTTP Status Code 200: OK.</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>HTTP Status Code 404: Resource not found due to incorrect input. Correct your request and then retry it.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>HTTP Status Code 400: Bad request due to incorrect input. Correct your request and then retry it.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>HTTP Status Code 500: Unexpected internal server error. Retrying your request might resolve the issue.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>HTTP Status Code 409: Conflict. This broker name already exists. Retry your request with another name.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>HTTP Status Code 403: Access forbidden. Correct your credentials and then retry your request.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes the specified configuration.</p>"
+    },
     "DeleteTags": {
       "name": "DeleteTags",
       "http": {
@@ -815,7 +853,8 @@
       "documentation": "<p>Optional. The authentication strategy used to secure the broker. The default is SIMPLE.</p>",
       "enum": [
         "SIMPLE",
-        "LDAP"
+        "LDAP",
+        "CONFIG_MANAGED"
       ]
     },
     "AvailabilityZone": {
@@ -1309,13 +1348,12 @@
         "Users": {
           "shape": "__listOfUser",
           "locationName": "users",
-          "documentation": "<p>The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent broker users are created by making RabbitMQ API calls directly to brokers or via the RabbitMQ web console.</p>"
+          "documentation": "<p>The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, an administrative user is required if using simple authentication and authorization. For brokers using OAuth2, this user is optional. When provided, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent broker users are created by making RabbitMQ API calls directly to brokers or via the RabbitMQ web console.</p>"
         }
       },
       "documentation": "<p>Creates a broker.</p>",
       "required": [
         "HostInstanceType",
-        "Users",
         "BrokerName",
         "DeploymentMode",
         "EngineType",
@@ -1435,7 +1473,7 @@
         "Users": {
           "shape": "__listOfUser",
           "locationName": "users",
-          "documentation": "<p>The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent broker users are created by making RabbitMQ API calls directly to brokers or via the RabbitMQ web console.</p>"
+          "documentation": "<p>The list of broker users (persons or applications) who can access queues and topics. For Amazon MQ for RabbitMQ brokers, an administrative user is required if using simple authentication and authorization. For brokers using OAuth2, this user is optional. When provided, one and only one administrative user is accepted and created when a broker is first provisioned. All subsequent broker users are created by making RabbitMQ API calls directly to brokers or via the RabbitMQ web console.</p>"
         },
         "DataReplicationMode": {
           "shape": "DataReplicationMode",
@@ -1451,7 +1489,6 @@
       "documentation": "<p>Creates a broker using the specified properties.</p>",
       "required": [
         "HostInstanceType",
-        "Users",
         "BrokerName",
         "DeploymentMode",
         "EngineType",
@@ -1715,8 +1752,7 @@
     },
     "CreateUserResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DataReplicationCounterpart": {
       "type": "structure",
@@ -1812,6 +1848,41 @@
         }
       }
     },
+    "DeleteConfigurationOutput": {
+      "type": "structure",
+      "members": {
+        "ConfigurationId": {
+          "shape": "__string",
+          "locationName": "configurationId",
+          "documentation": "<p>The unique ID that Amazon MQ generates for the configuration.</p>"
+        }
+      },
+      "documentation": "<p>Returns information about the deleted configuration.</p>"
+    },
+    "DeleteConfigurationRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "configuration-id",
+          "documentation": "<p>The unique ID that Amazon MQ generates for the configuration.</p>"
+        }
+      },
+      "required": [
+        "ConfigurationId"
+      ]
+    },
+    "DeleteConfigurationResponse": {
+      "type": "structure",
+      "members": {
+        "ConfigurationId": {
+          "shape": "__string",
+          "locationName": "configurationId",
+          "documentation": "<p>The unique ID that Amazon MQ generates for the configuration.</p>"
+        }
+      }
+    },
     "DeleteTagsRequest": {
       "type": "structure",
       "members": {
@@ -1856,8 +1927,7 @@
     },
     "DeleteUserResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "DeploymentMode": {
       "type": "string",
@@ -3258,8 +3328,7 @@
     },
     "RebootBrokerResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "SanitizationWarning": {
       "type": "structure",
@@ -3792,8 +3861,7 @@
     },
     "UpdateUserResponse": {
       "type": "structure",
-      "members": {
-      }
+      "members": {}
     },
     "User": {
       "type": "structure",
diff -pruN 2.23.6-1/awscli/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mturk/2017-01-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,65 +5,110 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
         {
             "conditions": [
                 {
-                    "fn": "aws.partition",
+                    "fn": "isSet",
                     "argv": [
                         {
-                            "ref": "Region"
+                            "ref": "Endpoint"
                         }
-                    ],
-                    "assign": "PartitionResult"
+                    ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "booleanEquals",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
-                                }
+                                    "ref": "UseFIPS"
+                                },
+                                true
                             ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseDualStack"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
                         },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
                         {
-                            "fn": "parseURL",
+                            "fn": "aws.partition",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
+                                    "ref": "Region"
                                 }
                             ],
-                            "assign": "url"
+                            "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -75,158 +120,103 @@
                                         },
                                         true
                                     ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
                                 }
                             ],
-                            "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                true,
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
+                                                    ]
+                                                }
                                             ]
                                         }
                                     ],
-                                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                                    "type": "error"
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://mturk-requester-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "endpoint": {
-                                        "url": {
-                                            "ref": "Endpoint"
-                                        },
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
+                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                    "type": "error"
                                 }
-                            ]
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
                             "conditions": [
                                 {
                                     "fn": "booleanEquals",
                                     "argv": [
-                                        true,
-                                        {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsFIPS"
-                                            ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
                                         {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsDualStack"
-                                            ]
-                                        }
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://mturk-requester-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
                                                 },
-                                                "supportsFIPS"
+                                                true
                                             ]
                                         }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "type": "tree",
+                                    ],
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -237,74 +227,70 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "FIPS is enabled but this partition does not support FIPS",
+                                    "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
-                            "conditions": [],
-                            "error": "FIPS is enabled but this partition does not support FIPS",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
                             "conditions": [
                                 {
                                     "fn": "booleanEquals",
                                     "argv": [
-                                        true,
                                         {
-                                            "fn": "getAttr",
-                                            "argv": [
-                                                {
-                                                    "ref": "PartitionResult"
-                                                },
-                                                "supportsDualStack"
-                                            ]
-                                        }
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                true,
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
+                                                    ]
+                                                }
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://mturk-requester.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
                                     "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://mturk-requester.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
+                                    "error": "DualStack is enabled but this partition does not support DualStack",
+                                    "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
-                            "conditions": [],
-                            "error": "DualStack is enabled but this partition does not support DualStack",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [],
-                    "type": "tree",
-                    "rules": [
-                        {
                             "conditions": [
                                 {
                                     "fn": "stringEquals",
@@ -332,9 +318,16 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "error": "Invalid Configuration: Missing Region",
+            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/mturk/2017-01-17/service-2.json 2.31.35-1/awscli/botocore/data/mturk/2017-01-17/service-2.json
--- 2.23.6-1/awscli/botocore/data/mturk/2017-01-17/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mturk/2017-01-17/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"mturk-requester",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"Amazon MTurk",
     "serviceFullName":"Amazon Mechanical Turk",
     "serviceId":"MTurk",
     "signatureVersion":"v4",
     "targetPrefix":"MTurkRequesterServiceV20170117",
-    "uid":"mturk-requester-2017-01-17"
+    "uid":"mturk-requester-2017-01-17",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptQualificationRequest":{
@@ -603,8 +605,7 @@
     },
     "AcceptQualificationRequestResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ApproveAssignmentRequest":{
       "type":"structure",
@@ -626,8 +627,7 @@
     },
     "ApproveAssignmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Assignment":{
       "type":"structure",
@@ -726,8 +726,7 @@
     },
     "AssociateQualificationWithWorkerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "BonusPayment":{
       "type":"structure",
@@ -800,8 +799,7 @@
     },
     "CreateAdditionalAssignmentsForHITResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateHITRequest":{
       "type":"structure",
@@ -1072,8 +1070,7 @@
     },
     "CreateWorkerBlockResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CurrencyAmount":{
       "type":"string",
@@ -1102,8 +1099,7 @@
     },
     "DeleteHITResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteQualificationTypeRequest":{
       "type":"structure",
@@ -1117,8 +1113,7 @@
     },
     "DeleteQualificationTypeResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkerBlockRequest":{
       "type":"structure",
@@ -1136,8 +1131,7 @@
     },
     "DeleteWorkerBlockResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateQualificationFromWorkerRequest":{
       "type":"structure",
@@ -1162,8 +1156,7 @@
     },
     "DisassociateQualificationFromWorkerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EntityId":{
       "type":"string",
@@ -1195,8 +1188,7 @@
     "ExceptionMessage":{"type":"string"},
     "GetAccountBalanceRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAccountBalanceResponse":{
       "type":"structure",
@@ -2166,8 +2158,7 @@
     },
     "RejectAssignmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RejectQualificationRequestRequest":{
       "type":"structure",
@@ -2185,8 +2176,7 @@
     },
     "RejectQualificationRequestResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequestError":{
       "type":"structure",
@@ -2367,8 +2357,7 @@
     },
     "SendBonusResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SendTestEventNotificationRequest":{
       "type":"structure",
@@ -2389,8 +2378,7 @@
     },
     "SendTestEventNotificationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ServiceFault":{
       "type":"structure",
@@ -2428,8 +2416,7 @@
     },
     "UpdateExpirationForHITResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateHITReviewStatusRequest":{
       "type":"structure",
@@ -2447,8 +2434,7 @@
     },
     "UpdateHITReviewStatusResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateHITTypeOfHITRequest":{
       "type":"structure",
@@ -2469,8 +2455,7 @@
     },
     "UpdateHITTypeOfHITResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotificationSettingsRequest":{
       "type":"structure",
@@ -2492,8 +2477,7 @@
     },
     "UpdateNotificationSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateQualificationTypeRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mwaa/2020-07-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/mwaa/2020-07-01/service-2.json 2.31.35-1/awscli/botocore/data/mwaa/2020-07-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/mwaa/2020-07-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/mwaa/2020-07-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -825,6 +825,10 @@
         "Source":{
           "shape":"UpdateSource",
           "documentation":"<p>The source of the last update to the environment. Includes internal processes by Amazon MWAA, such as an environment maintenance update.</p>"
+        },
+        "WorkerReplacementStrategy":{
+          "shape":"WorkerReplacementStrategy",
+          "documentation":"<p>The worker replacement strategy used in the last update of the environment.</p>"
         }
       },
       "documentation":"<p>Describes the status of the last update on the environment, and any errors that were encountered.</p>"
@@ -1375,18 +1379,50 @@
           "shape":"IamRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the execution role in IAM that allows MWAA to access Amazon Web Services resources in your environment. For example, <code>arn:aws:iam::123456789:role/my-execution-role</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/mwaa-create-role.html\">Amazon MWAA Execution role</a>.</p>"
         },
+        "AirflowConfigurationOptions":{
+          "shape":"AirflowConfigurationOptions",
+          "documentation":"<p>A list of key-value pairs containing the Apache Airflow configuration options you want to attach to your environment. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-env-variables.html\">Apache Airflow configuration options</a>.</p>"
+        },
         "AirflowVersion":{
           "shape":"AirflowVersion",
           "documentation":"<p>The Apache Airflow version for your environment. To upgrade your environment, specify a newer version of Apache Airflow supported by Amazon MWAA.</p> <p>Before you upgrade an environment, make sure your requirements, DAGs, plugins, and other resources used in your workflows are compatible with the new Apache Airflow version. For more information about updating your resources, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/upgrading-environment.html\">Upgrading an Amazon MWAA environment</a>.</p> <p>Valid values: <code>1.10.12</code>, <code>2.0.2</code>, <code>2.2.2</code>, <code>2.4.3</code>, <code>2.5.1</code>, <code>2.6.3</code>, <code>2.7.2</code>, <code>2.8.1</code>, <code>2.9.2</code>, <code>2.10.1</code>, and <code>2.10.3</code>.</p>"
         },
-        "SourceBucketArn":{
-          "shape":"S3BucketArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon S3 bucket where your DAG code and supporting files are stored. For example, <code>arn:aws:s3:::my-airflow-bucket-unique-name</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/mwaa-s3-bucket.html\">Create an Amazon S3 bucket for Amazon MWAA</a>.</p>"
-        },
         "DagS3Path":{
           "shape":"RelativePath",
           "documentation":"<p>The relative path to the DAGs folder on your Amazon S3 bucket. For example, <code>dags</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html\">Adding or updating DAGs</a>.</p>"
         },
+        "EnvironmentClass":{
+          "shape":"EnvironmentClass",
+          "documentation":"<p>The environment class type. Valid values: <code>mw1.micro</code>, <code>mw1.small</code>, <code>mw1.medium</code>, <code>mw1.large</code>, <code>mw1.xlarge</code>, and <code>mw1.2xlarge</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/environment-class.html\">Amazon MWAA environment class</a>. </p>"
+        },
+        "LoggingConfiguration":{
+          "shape":"LoggingConfigurationInput",
+          "documentation":"<p>The Apache Airflow log types to send to CloudWatch Logs.</p>"
+        },
+        "MaxWorkers":{
+          "shape":"MaxWorkers",
+          "documentation":"<p>The maximum number of workers that you want to run in your environment. MWAA scales the number of Apache Airflow workers up to the number you specify in the <code>MaxWorkers</code> field. For example, <code>20</code>. When there are no more tasks running, and no more in the queue, MWAA disposes of the extra workers leaving the one worker that is included with your environment, or the number you specify in <code>MinWorkers</code>.</p>"
+        },
+        "MinWorkers":{
+          "shape":"MinWorkers",
+          "documentation":"<p>The minimum number of workers that you want to run in your environment. MWAA scales the number of Apache Airflow workers up to the number you specify in the <code>MaxWorkers</code> field. When there are no more tasks running, and no more in the queue, MWAA disposes of the extra workers leaving the worker count you specify in the <code>MinWorkers</code> field. For example, <code>2</code>.</p>"
+        },
+        "MaxWebservers":{
+          "shape":"MaxWebservers",
+          "documentation":"<p> The maximum number of web servers that you want to run in your environment. Amazon MWAA scales the number of Apache Airflow web servers up to the number you specify for <code>MaxWebservers</code> when you interact with your Apache Airflow environment using Apache Airflow REST API, or the Apache Airflow CLI. For example, in scenarios where your workload requires network calls to the Apache Airflow REST API with a high transaction-per-second (TPS) rate, Amazon MWAA will increase the number of web servers up to the number set in <code>MaxWebserers</code>. As TPS rates decrease Amazon MWAA disposes of the additional web servers, and scales down to the number set in <code>MinxWebserers</code>. </p> <p>Valid values: For environments larger than mw1.micro, accepts values from <code>2</code> to <code>5</code>. Defaults to <code>2</code> for all environment sizes except mw1.micro, which defaults to <code>1</code>.</p>"
+        },
+        "MinWebservers":{
+          "shape":"MinWebservers",
+          "documentation":"<p> The minimum number of web servers that you want to run in your environment. Amazon MWAA scales the number of Apache Airflow web servers up to the number you specify for <code>MaxWebservers</code> when you interact with your Apache Airflow environment using Apache Airflow REST API, or the Apache Airflow CLI. As the transaction-per-second rate, and the network load, decrease, Amazon MWAA disposes of the additional web servers, and scales down to the number set in <code>MinxWebserers</code>. </p> <p>Valid values: For environments larger than mw1.micro, accepts values from <code>2</code> to <code>5</code>. Defaults to <code>2</code> for all environment sizes except mw1.micro, which defaults to <code>1</code>.</p>"
+        },
+        "WorkerReplacementStrategy":{
+          "shape":"WorkerReplacementStrategy",
+          "documentation":"<p>The worker replacement strategy to use when updating the environment.</p> <p>You can select one of the following strategies:</p> <ul> <li> <p> <b>Forced -</b> Stops and replaces Apache Airflow workers without waiting for tasks to complete before an update.</p> </li> <li> <p> <b>Graceful -</b> Allows Apache Airflow workers to complete running tasks for up to 12 hours during an update before they're stopped and replaced.</p> </li> </ul>"
+        },
+        "NetworkConfiguration":{
+          "shape":"UpdateNetworkConfigurationInput",
+          "documentation":"<p>The VPC networking components used to secure and enable network traffic between the Amazon Web Services resources for your environment. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/networking-about.html\">About networking on Amazon MWAA</a>.</p>"
+        },
         "PluginsS3Path":{
           "shape":"RelativePath",
           "documentation":"<p>The relative path to the <code>plugins.zip</code> file on your Amazon S3 bucket. For example, <code>plugins.zip</code>. If specified, then the plugins.zip version is required. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-import-plugins.html\">Installing custom plugins</a>.</p>"
@@ -1403,6 +1439,14 @@
           "shape":"S3ObjectVersion",
           "documentation":"<p>The version of the requirements.txt file on your Amazon S3 bucket. You must specify a version each time a <code>requirements.txt</code> file is updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/versioning-workflows.html\">How S3 Versioning works</a>.</p>"
         },
+        "Schedulers":{
+          "shape":"Schedulers",
+          "documentation":"<p>The number of Apache Airflow schedulers to run in your Amazon MWAA environment.</p>"
+        },
+        "SourceBucketArn":{
+          "shape":"S3BucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon S3 bucket where your DAG code and supporting files are stored. For example, <code>arn:aws:s3:::my-airflow-bucket-unique-name</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/mwaa-s3-bucket.html\">Create an Amazon S3 bucket for Amazon MWAA</a>.</p>"
+        },
         "StartupScriptS3Path":{
           "shape":"RelativePath",
           "documentation":"<p>The relative path to the startup shell script in your Amazon S3 bucket. For example, <code>s3://mwaa-environment/startup.sh</code>.</p> <p> Amazon MWAA runs the script as your environment starts, and before running the Apache Airflow process. You can use this script to install dependencies, modify Apache Airflow configuration options, and set environment variables. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/using-startup-script.html\">Using a startup script</a>. </p>"
@@ -1411,49 +1455,13 @@
           "shape":"S3ObjectVersion",
           "documentation":"<p> The version of the startup shell script in your Amazon S3 bucket. You must specify the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/versioning-workflows.html\">version ID</a> that Amazon S3 assigns to the file every time you update the script. </p> <p> Version IDs are Unicode, UTF-8 encoded, URL-ready, opaque strings that are no more than 1,024 bytes long. The following is an example: </p> <p> <code>3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo</code> </p> <p> For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/using-startup-script.html\">Using a startup script</a>. </p>"
         },
-        "AirflowConfigurationOptions":{
-          "shape":"AirflowConfigurationOptions",
-          "documentation":"<p>A list of key-value pairs containing the Apache Airflow configuration options you want to attach to your environment. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-env-variables.html\">Apache Airflow configuration options</a>.</p>"
-        },
-        "EnvironmentClass":{
-          "shape":"EnvironmentClass",
-          "documentation":"<p>The environment class type. Valid values: <code>mw1.micro</code>, <code>mw1.small</code>, <code>mw1.medium</code>, <code>mw1.large</code>, <code>mw1.xlarge</code>, and <code>mw1.2xlarge</code>. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/environment-class.html\">Amazon MWAA environment class</a>. </p>"
-        },
-        "MaxWorkers":{
-          "shape":"MaxWorkers",
-          "documentation":"<p>The maximum number of workers that you want to run in your environment. MWAA scales the number of Apache Airflow workers up to the number you specify in the <code>MaxWorkers</code> field. For example, <code>20</code>. When there are no more tasks running, and no more in the queue, MWAA disposes of the extra workers leaving the one worker that is included with your environment, or the number you specify in <code>MinWorkers</code>.</p>"
-        },
-        "NetworkConfiguration":{
-          "shape":"UpdateNetworkConfigurationInput",
-          "documentation":"<p>The VPC networking components used to secure and enable network traffic between the Amazon Web Services resources for your environment. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/networking-about.html\">About networking on Amazon MWAA</a>.</p>"
-        },
-        "LoggingConfiguration":{
-          "shape":"LoggingConfigurationInput",
-          "documentation":"<p>The Apache Airflow log types to send to CloudWatch Logs.</p>"
-        },
-        "WeeklyMaintenanceWindowStart":{
-          "shape":"WeeklyMaintenanceWindowStart",
-          "documentation":"<p>The day and time of the week in Coordinated Universal Time (UTC) 24-hour standard time to start weekly maintenance updates of your environment in the following format: <code>DAY:HH:MM</code>. For example: <code>TUE:03:30</code>. You can specify a start time in 30 minute increments only.</p>"
-        },
         "WebserverAccessMode":{
           "shape":"WebserverAccessMode",
           "documentation":"<p>The Apache Airflow <i>Web server</i> access mode. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-networking.html\">Apache Airflow access modes</a>.</p>"
         },
-        "MinWorkers":{
-          "shape":"MinWorkers",
-          "documentation":"<p>The minimum number of workers that you want to run in your environment. MWAA scales the number of Apache Airflow workers up to the number you specify in the <code>MaxWorkers</code> field. When there are no more tasks running, and no more in the queue, MWAA disposes of the extra workers leaving the worker count you specify in the <code>MinWorkers</code> field. For example, <code>2</code>.</p>"
-        },
-        "Schedulers":{
-          "shape":"Schedulers",
-          "documentation":"<p>The number of Apache Airflow schedulers to run in your Amazon MWAA environment.</p>"
-        },
-        "MinWebservers":{
-          "shape":"MinWebservers",
-          "documentation":"<p> The minimum number of web servers that you want to run in your environment. Amazon MWAA scales the number of Apache Airflow web servers up to the number you specify for <code>MaxWebservers</code> when you interact with your Apache Airflow environment using Apache Airflow REST API, or the Apache Airflow CLI. As the transaction-per-second rate, and the network load, decrease, Amazon MWAA disposes of the additional web servers, and scales down to the number set in <code>MinxWebserers</code>. </p> <p>Valid values: For environments larger than mw1.micro, accepts values from <code>2</code> to <code>5</code>. Defaults to <code>2</code> for all environment sizes except mw1.micro, which defaults to <code>1</code>.</p>"
-        },
-        "MaxWebservers":{
-          "shape":"MaxWebservers",
-          "documentation":"<p> The maximum number of web servers that you want to run in your environment. Amazon MWAA scales the number of Apache Airflow web servers up to the number you specify for <code>MaxWebservers</code> when you interact with your Apache Airflow environment using Apache Airflow REST API, or the Apache Airflow CLI. For example, in scenarios where your workload requires network calls to the Apache Airflow REST API with a high transaction-per-second (TPS) rate, Amazon MWAA will increase the number of web servers up to the number set in <code>MaxWebserers</code>. As TPS rates decrease Amazon MWAA disposes of the additional web servers, and scales down to the number set in <code>MinxWebserers</code>. </p> <p>Valid values: For environments larger than mw1.micro, accepts values from <code>2</code> to <code>5</code>. Defaults to <code>2</code> for all environment sizes except mw1.micro, which defaults to <code>1</code>.</p>"
+        "WeeklyMaintenanceWindowStart":{
+          "shape":"WeeklyMaintenanceWindowStart",
+          "documentation":"<p>The day and time of the week in Coordinated Universal Time (UTC) 24-hour standard time to start weekly maintenance updates of your environment in the following format: <code>DAY:HH:MM</code>. For example: <code>TUE:03:30</code>. You can specify a start time in 30 minute increments only.</p>"
         }
       }
     },
@@ -1541,6 +1549,13 @@
       "max":9,
       "min":1,
       "pattern":".*(MON|TUE|WED|THU|FRI|SAT|SUN):([01]\\d|2[0-3]):(00|30).*"
+    },
+    "WorkerReplacementStrategy":{
+      "type":"string",
+      "enum":[
+        "FORCED",
+        "GRACEFUL"
+      ]
     }
   },
   "documentation":"<p><fullname>Amazon Managed Workflows for Apache Airflow</fullname> <p>This section contains the Amazon Managed Workflows for Apache Airflow (MWAA) API reference documentation. For more information, see <a href=\"https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html\">What is Amazon MWAA?</a>.</p> <p> <b>Endpoints</b> </p> <ul> <li> <p> <code>api.airflow.{region}.amazonaws.com</code> - This endpoint is used for environment management.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_CreateEnvironment.html\">CreateEnvironment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_DeleteEnvironment.html\">DeleteEnvironment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_GetEnvironment.html\">GetEnvironment</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_ListEnvironments.html\">ListEnvironments</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_ListTagsForResource.html\">ListTagsForResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_TagResource.html\">TagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_UntagResource.html\">UntagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_UpdateEnvironment.html\">UpdateEnvironment</a> </p> </li> </ul> </li> <li> <p> <code>env.airflow.{region}.amazonaws.com</code> - This endpoint is used to operate the Airflow environment.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_CreateCliToken.html \">CreateCliToken</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_CreateWebLoginToken.html\">CreateWebLoginToken</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/mwaa/latest/API/API_InvokeRestApi.html\">InvokeRestApi</a> </p> </li> </ul> </li> </ul> <p> <b>Regions</b> </p> <p>For a list of supported regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/mwaa.html\">Amazon MWAA endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>.</p></p>"
diff -pruN 2.23.6-1/awscli/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptune/2014-10-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/neptune/2014-10-31/service-2.json 2.31.35-1/awscli/botocore/data/neptune/2014-10-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/neptune/2014-10-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptune/2014-10-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1261,6 +1261,25 @@
         {"shape":"InvalidDBInstanceStateFault"}
       ],
       "documentation":"<p>Stops an Amazon Neptune DB cluster. When you stop a DB cluster, Neptune retains the DB cluster's metadata, including its endpoints and DB parameter groups.</p> <p>Neptune also retains the transaction logs so you can do a point-in-time restore if necessary.</p>"
+    },
+    "SwitchoverGlobalCluster":{
+      "name":"SwitchoverGlobalCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"SwitchoverGlobalClusterMessage"},
+      "output":{
+        "shape":"SwitchoverGlobalClusterResult",
+        "resultWrapper":"SwitchoverGlobalClusterResult"
+      },
+      "errors":[
+        {"shape":"GlobalClusterNotFoundFault"},
+        {"shape":"InvalidGlobalClusterStateFault"},
+        {"shape":"InvalidDBClusterStateFault"},
+        {"shape":"DBClusterNotFoundFault"}
+      ],
+      "documentation":"<p>Switches over the specified secondary DB cluster to be the new primary DB cluster in the global database cluster. Switchover operations were previously called \"managed planned failovers.\"</p> <p>Promotes the specified secondary cluster to assume full read/write capabilities and demotes the current primary cluster to a secondary (read-only) cluster, maintaining the original replication topology. All secondary clusters are synchronized with the primary at the beginning of the process so the new primary continues operations for the global database without losing any data. Your database is unavailable for a short time while the primary and selected secondary clusters are assuming their new roles.</p> <note> <p>This operation is intended for controlled environments, for operations such as \"regional rotation\" or to fall back to the original primary after a global database failover.</p> </note>"
     }
   },
   "shapes":{
@@ -1369,8 +1388,7 @@
     },
     "AuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specified CIDRIP or EC2 security group is not authorized for the specified DB security group.</p> <p>Neptune may not also be authorized via IAM to perform necessary actions on your behalf.</p>",
       "error":{
         "code":"AuthorizationNotFound",
@@ -1408,8 +1426,7 @@
     "BooleanOptional":{"type":"boolean"},
     "CertificateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>CertificateIdentifier</i> does not refer to an existing certificate.</p>",
       "error":{
         "code":"CertificateNotFound",
@@ -1471,7 +1488,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type for the DB cluster.</p>"
+          "documentation":"<p>The pending change in storage type for the DB cluster.   Valid Values:</p> <ul> <li> <p> <b> <code>standard</code> </b>   –   ( <i>the default</i> ) Configures cost-effective database storage for applications with moderate to small I/O usage.</p> </li> <li> <p> <b> <code>iopt1</code> </b>   –   Enables <a href=\"https://docs.aws.amazon.com/neptune/latest/userguide/storage-types.html#provisioned-iops-storage\">I/O-Optimized storage</a> that's designed to meet the needs of I/O-intensive graph workloads that require predictable pricing with low I/O latency and consistent I/O throughput.</p> <p>Neptune I/O-Optimized storage is only available starting with engine release 1.3.0.0.</p> </li> </ul>"
         },
         "AllocatedStorage":{
           "shape":"IntegerOptional",
@@ -1479,7 +1496,7 @@
         },
         "Iops":{
           "shape":"IntegerOptional",
-          "documentation":"<p>The Provisioned IOPS (I/O operations per second) value. This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+          "documentation":"<p>The Provisioned IOPS (I/O operations per second) value. This setting is only for Multi-AZ DB clusters.</p>"
         }
       },
       "documentation":"<p>This data type is used as a response element in the <code>ModifyDBCluster</code> operation and contains changes that will be applied during the next maintenance window.</p>"
@@ -1525,7 +1542,7 @@
       "members":{
         "SourceDBClusterSnapshotIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the DB cluster snapshot to copy. This parameter is not case-sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid system snapshot in the \"available\" state.</p> </li> <li> <p>Specify a valid DB snapshot identifier.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
+          "documentation":"<p>The identifier of the DB cluster snapshot to copy. This parameter is not case-sensitive. If the source DB cluster snapshot is in a different region or owned by another account, specify the snapshot ARN.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid system snapshot in the \"available\" state.</p> </li> <li> <p>Specify a valid DB snapshot identifier.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
         },
         "TargetDBClusterSnapshotIdentifier":{
           "shape":"String",
@@ -1716,7 +1733,7 @@
         },
         "EngineVersion":{
           "shape":"String",
-          "documentation":"<p>The version number of the database engine to use for the new DB cluster.</p> <p>Example: <code>1.0.2.1</code> </p>"
+          "documentation":"<p>The version number of the database engine to use for the new DB cluster.</p> <p>Example: <code>1.2.1.0</code> </p>"
         },
         "Port":{
           "shape":"IntegerOptional",
@@ -1784,7 +1801,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <code>standard | iopt1</code> </p> </li> </ul> <p>Default:</p> <ul> <li> <p> <code>standard</code> </p> </li> </ul> <note> <p>When you create a Neptune cluster with the storage type set to <code>iopt1</code>, the storage type is returned in the response. The storage type isn't returned when you set it to <code>standard</code>.</p> </note>"
+          "documentation":"<p>The storage type for the new DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <b> <code>standard</code> </b>   –   ( <i>the default</i> ) Configures cost-effective database storage for applications with moderate to small I/O usage. When set to <code>standard</code>, the storage type is not returned in the response.</p> </li> <li> <p> <b> <code>iopt1</code> </b>   –   Enables <a href=\"https://docs.aws.amazon.com/neptune/latest/userguide/storage-types.html#provisioned-iops-storage\">I/O-Optimized storage</a> that's designed to meet the needs of I/O-intensive graph workloads that require predictable pricing with low I/O latency and consistent I/O throughput.</p> <p>Neptune I/O-Optimized storage is only available starting with engine release 1.3.0.0.</p> </li> </ul>"
         }
       }
     },
@@ -1956,8 +1973,7 @@
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
-          "documentation":"<p>This flag should no longer be used.</p>",
-          "deprecated":true
+          "documentation":"<p>Indicates whether the DB instance is publicly accessible.</p> <p>When the DB instance is publicly accessible and you connect from outside of the DB instance's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB instance, the endpoint resolves to the private IP address. Access to the DB instance is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB instance isn't publicly accessible, it is an internal DB instance with a DNS name that resolves to a private IP address.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -1969,7 +1985,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Specifies the storage type to be associated with the DB instance.</p> <p>Not applicable. Storage is managed by the DB Cluster.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "TdeCredentialArn":{
           "shape":"String",
@@ -2367,7 +2383,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type associated with the DB cluster.</p>"
+          "documentation":"<p>The storage type used by the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <b> <code>standard</code> </b>   –   ( <i>the default</i> ) Provides cost-effective database storage for applications with moderate to small I/O usage.</p> </li> <li> <p> <b> <code>iopt1</code> </b>   –   Enables <a href=\"https://docs.aws.amazon.com/neptune/latest/userguide/storage-types.html#provisioned-iops-storage\">I/O-Optimized storage</a> that's designed to meet the needs of I/O-intensive graph workloads that require predictable pricing with low I/O latency and consistent I/O throughput.</p> <p>Neptune I/O-Optimized storage is only available starting with engine release 1.3.0.0.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Contains the details of an Amazon Neptune DB cluster.</p> <p>This data type is used as a response element in the <a>DescribeDBClusters</a>.</p>",
@@ -2375,8 +2391,7 @@
     },
     "DBClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User already has a DB cluster with the given identifier.</p>",
       "error":{
         "code":"DBClusterAlreadyExistsFault",
@@ -2433,8 +2448,7 @@
     },
     "DBClusterEndpointAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified custom endpoint cannot be created because it already exists.</p>",
       "error":{
         "code":"DBClusterEndpointAlreadyExistsFault",
@@ -2455,7 +2469,7 @@
       "members":{
         "Marker":{
           "shape":"String",
-          "documentation":"<p> An optional pagination token provided by a previous <code>DescribeDBClusterEndpoints</code> request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>. </p>"
+          "documentation":"<p> n optional pagination token provided by a previous <code>DescribeDBClusterEndpoints</code> request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>.</p>"
         },
         "DBClusterEndpoints":{
           "shape":"DBClusterEndpointList",
@@ -2465,8 +2479,7 @@
     },
     "DBClusterEndpointNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified custom endpoint doesn't exist.</p>",
       "error":{
         "code":"DBClusterEndpointNotFoundFault",
@@ -2477,8 +2490,7 @@
     },
     "DBClusterEndpointQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster already has the maximum number of custom endpoints.</p>",
       "error":{
         "code":"DBClusterEndpointQuotaExceededFault",
@@ -2539,8 +2551,7 @@
     },
     "DBClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBClusterIdentifier</i> does not refer to an existing DB cluster.</p>",
       "error":{
         "code":"DBClusterNotFoundFault",
@@ -2624,8 +2635,7 @@
     },
     "DBClusterParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBClusterParameterGroupName</i> does not refer to an existing DB Cluster parameter group.</p>",
       "error":{
         "code":"DBClusterParameterGroupNotFound",
@@ -2649,8 +2659,7 @@
     },
     "DBClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User attempted to create a new DB cluster and the user has already reached the maximum allowed DB cluster quota.</p>",
       "error":{
         "code":"DBClusterQuotaExceededFault",
@@ -2679,8 +2688,7 @@
     },
     "DBClusterRoleAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified IAM role Amazon Resource Name (ARN) is already associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleAlreadyExists",
@@ -2691,8 +2699,7 @@
     },
     "DBClusterRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified IAM role Amazon Resource Name (ARN) is not associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleNotFound",
@@ -2703,8 +2710,7 @@
     },
     "DBClusterRoleQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of IAM roles that can be associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleQuotaExceeded",
@@ -2813,8 +2819,7 @@
     },
     "DBClusterSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User already has a DB cluster snapshot with the given identifier.</p>",
       "error":{
         "code":"DBClusterSnapshotAlreadyExistsFault",
@@ -2881,8 +2886,7 @@
     },
     "DBClusterSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBClusterSnapshotIdentifier</i> does not refer to an existing DB cluster snapshot.</p>",
       "error":{
         "code":"DBClusterSnapshotNotFoundFault",
@@ -3094,8 +3098,7 @@
         },
         "PubliclyAccessible":{
           "shape":"Boolean",
-          "documentation":"<p>This flag should no longer be used.</p>",
-          "deprecated":true
+          "documentation":"<p>Indicates whether the DB instance is publicly accessible.</p> <p>When the DB instance is publicly accessible and you connect from outside of the DB instance's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB instance, the endpoint resolves to the private IP address. Access to the DB instance is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB instance isn't publicly accessible, it is an internal DB instance with a DNS name that resolves to a private IP address.</p>"
         },
         "StatusInfos":{
           "shape":"DBInstanceStatusInfoList",
@@ -3103,7 +3106,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Specifies the storage type associated with DB instance.</p>"
+          "documentation":"<p>Specifies the storage type associated with the DB instance.</p>"
         },
         "TdeCredentialArn":{
           "shape":"String",
@@ -3191,8 +3194,7 @@
     },
     "DBInstanceAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User already has a DB instance with the given identifier.</p>",
       "error":{
         "code":"DBInstanceAlreadyExists",
@@ -3223,8 +3225,7 @@
     },
     "DBInstanceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBInstanceIdentifier</i> does not refer to an existing DB instance.</p>",
       "error":{
         "code":"DBInstanceNotFound",
@@ -3287,8 +3288,7 @@
     },
     "DBParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A DB parameter group with the same name exists.</p>",
       "error":{
         "code":"DBParameterGroupAlreadyExists",
@@ -3328,8 +3328,7 @@
     },
     "DBParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBParameterGroupName</i> does not refer to an existing DB parameter group.</p>",
       "error":{
         "code":"DBParameterGroupNotFound",
@@ -3340,8 +3339,7 @@
     },
     "DBParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed number of DB parameter groups.</p>",
       "error":{
         "code":"DBParameterGroupQuotaExceeded",
@@ -3414,8 +3412,7 @@
     },
     "DBSecurityGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBSecurityGroupName</i> does not refer to an existing DB security group.</p>",
       "error":{
         "code":"DBSecurityGroupNotFound",
@@ -3426,8 +3423,7 @@
     },
     "DBSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBSnapshotIdentifier</i> is already used by an existing snapshot.</p>",
       "error":{
         "code":"DBSnapshotAlreadyExists",
@@ -3438,8 +3434,7 @@
     },
     "DBSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBSnapshotIdentifier</i> does not refer to an existing DB snapshot.</p>",
       "error":{
         "code":"DBSnapshotNotFound",
@@ -3481,8 +3476,7 @@
     },
     "DBSubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBSubnetGroupName</i> is already used by an existing DB subnet group.</p>",
       "error":{
         "code":"DBSubnetGroupAlreadyExists",
@@ -3493,8 +3487,7 @@
     },
     "DBSubnetGroupDoesNotCoverEnoughAZs":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Subnets in the DB subnet group should cover at least two Availability Zones unless there is only one Availability Zone.</p>",
       "error":{
         "code":"DBSubnetGroupDoesNotCoverEnoughAZs",
@@ -3518,8 +3511,7 @@
     },
     "DBSubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>DBSubnetGroupName</i> does not refer to an existing DB subnet group.</p>",
       "error":{
         "code":"DBSubnetGroupNotFoundFault",
@@ -3530,8 +3522,7 @@
     },
     "DBSubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed number of DB subnet groups.</p>",
       "error":{
         "code":"DBSubnetGroupQuotaExceeded",
@@ -3549,8 +3540,7 @@
     },
     "DBSubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed number of subnets in a DB subnet groups.</p>",
       "error":{
         "code":"DBSubnetQuotaExceededFault",
@@ -3561,8 +3551,7 @@
     },
     "DBUpgradeDependencyFailureFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB upgrade failed because a resource the DB depends on could not be modified.</p>",
       "error":{
         "code":"DBUpgradeDependencyFailure",
@@ -3770,11 +3759,11 @@
         },
         "MaxRecords":{
           "shape":"IntegerOptional",
-          "documentation":"<p>The maximum number of records to include in the response. If more records exist than the specified <code>MaxRecords</code> value, a pagination token called a marker is included in the response so you can retrieve the remaining results. </p> <p>Default: 100</p> <p>Constraints: Minimum 20, maximum 100.</p>"
+          "documentation":"<p>The maximum number of records to include in the response. If more records exist than the specified <code>MaxRecords</code> value, a pagination token called a marker is included in the response so you can retrieve the remaining results.</p> <p>Default: 100</p> <p>Constraints: Minimum 20, maximum 100.</p>"
         },
         "Marker":{
           "shape":"String",
-          "documentation":"<p> An optional pagination token provided by a previous <code>DescribeDBClusterEndpoints</code> request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>. </p>"
+          "documentation":"<p>An optional pagination token provided by a previous <code>DescribeDBClusterEndpoints</code> request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>.</p>"
         }
       }
     },
@@ -4283,8 +4272,7 @@
     },
     "DomainNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>Domain</i> does not refer to an existing Active Directory Domain.</p>",
       "error":{
         "code":"DomainNotFoundFault",
@@ -4477,8 +4465,7 @@
     },
     "EventSubscriptionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the number of events you can subscribe to.</p>",
       "error":{
         "code":"EventSubscriptionQuotaExceeded",
@@ -4553,6 +4540,14 @@
         "TargetDbClusterIdentifier":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the secondary Neptune DB cluster that you want to promote to primary for the global database.</p>"
+        },
+        "AllowDataLoss":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to allow data loss for this global database cluster operation. Allowing data loss triggers a global failover operation.</p> <p>If you don't specify <code>AllowDataLoss</code>, the global database cluster operation defaults to a switchover.</p> <p>Constraints:Can't be specified together with the <code>Switchover</code> parameter.</p>"
+        },
+        "Switchover":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to switch over this global database cluster.</p> <p>Constraints:Can't be specified together with the <code>AllowDataLoss</code> parameter.</p>"
         }
       }
     },
@@ -4562,6 +4557,37 @@
         "GlobalCluster":{"shape":"GlobalCluster"}
       }
     },
+    "FailoverState":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"FailoverStatus",
+          "documentation":"<p>The current status of the global cluster. Possible values are as follows:</p> <ul> <li> <p>pending &#x96; The service received a request to switch over or fail over the global cluster. The global cluster's primary DB cluster and the specified secondary DB cluster are being verified before the operation starts.</p> </li> <li> <p>failing-over &#x96; Neptune is promoting the chosen secondary Neptune DB cluster to become the new primary DB cluster to fail over the global cluster.</p> </li> <li> <p>cancelling &#x96; The request to switch over or fail over the global cluster was cancelled and the primary Neptune DB cluster and the selected secondary Neptune DB cluster are returning to their previous states.</p> </li> <li> <p>switching-over &#x96; This status covers the range of Neptune internal operations that take place during the switchover process, such as demoting the primary Neptune DB cluster, promoting the secondary Neptune DB cluster, and synchronizing replicas.</p> </li> </ul>"
+        },
+        "FromDbClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Neptune DB cluster that is currently being demoted, and which is associated with this state.</p>"
+        },
+        "ToDbClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Neptune DB cluster that is currently being promoted, and which is associated with this state.</p>"
+        },
+        "IsDataLossAllowed":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the operation is a global switchover or a global failover. If data loss is allowed, then the operation is a global failover. Otherwise, it's a switchover.</p>"
+        }
+      },
+      "documentation":"<p>Contains the state of scheduled or in-process operations on a global cluster (Neptune global database). This data type is empty unless a switchover or failover operation is scheduled or is in progress on the Neptune global database.</p>",
+      "wrapper":true
+    },
+    "FailoverStatus":{
+      "type":"string",
+      "enum":[
+        "pending",
+        "failing-over",
+        "cancelling"
+      ]
+    },
     "Filter":{
       "type":"structure",
       "required":[
@@ -4632,6 +4658,10 @@
         "GlobalClusterMembers":{
           "shape":"GlobalClusterMemberList",
           "documentation":"<p>A list of cluster ARNs and instance ARNs for all the DB clusters that are part of the global database.</p>"
+        },
+        "FailoverState":{
+          "shape":"FailoverState",
+          "documentation":"<p>A data object containing all properties for the current state of an in-process or pending switchover or failover process for this global cluster (Neptune global database). This object is empty unless the <code>SwitchoverGlobalCluster</code> or <code>FailoverGlobalCluster</code> operation was called on this global cluster.</p>"
         }
       },
       "documentation":"<p>Contains the details of an Amazon Neptune global database.</p> <p>This data type is used as a response element for the <a>CreateGlobalCluster</a>, <a>DescribeGlobalClusters</a>, <a>ModifyGlobalCluster</a>, <a>DeleteGlobalCluster</a>, <a>FailoverGlobalCluster</a>, and <a>RemoveFromGlobalCluster</a> actions.</p>",
@@ -4639,8 +4669,7 @@
     },
     "GlobalClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> already exists. Choose a new global database identifier (unique name) to create a new global database cluster.</p>",
       "error":{
         "code":"GlobalClusterAlreadyExistsFault",
@@ -4690,8 +4719,7 @@
     },
     "GlobalClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> doesn't refer to an existing global database cluster. </p>",
       "error":{
         "code":"GlobalClusterNotFoundFault",
@@ -4702,8 +4730,7 @@
     },
     "GlobalClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of global database clusters for this account is already at the maximum allowed.</p>",
       "error":{
         "code":"GlobalClusterQuotaExceededFault",
@@ -4727,8 +4754,7 @@
     },
     "InstanceQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed number of DB instances.</p>",
       "error":{
         "code":"InstanceQuotaExceeded",
@@ -4739,8 +4765,7 @@
     },
     "InsufficientDBClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB cluster does not have enough capacity for the current operation.</p>",
       "error":{
         "code":"InsufficientDBClusterCapacityFault",
@@ -4751,8 +4776,7 @@
     },
     "InsufficientDBInstanceCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specified DB instance class is not available in the specified Availability Zone.</p>",
       "error":{
         "code":"InsufficientDBInstanceCapacity",
@@ -4763,8 +4787,7 @@
     },
     "InsufficientStorageClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is insufficient storage available for the current action. You may be able to resolve this error by updating your subnet group to use different Availability Zones that have more storage available.</p>",
       "error":{
         "code":"InsufficientStorageClusterCapacity",
@@ -4777,8 +4800,7 @@
     "IntegerOptional":{"type":"integer"},
     "InvalidDBClusterEndpointStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation cannot be performed on the endpoint while the endpoint is in this state.</p>",
       "error":{
         "code":"InvalidDBClusterEndpointStateFault",
@@ -4789,8 +4811,7 @@
     },
     "InvalidDBClusterSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The supplied value is not a valid DB cluster snapshot state.</p>",
       "error":{
         "code":"InvalidDBClusterSnapshotStateFault",
@@ -4801,8 +4822,7 @@
     },
     "InvalidDBClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB cluster is not in a valid state.</p>",
       "error":{
         "code":"InvalidDBClusterStateFault",
@@ -4813,8 +4833,7 @@
     },
     "InvalidDBInstanceStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB instance is not in the <i>available</i> state.</p>",
       "error":{
         "code":"InvalidDBInstanceState",
@@ -4825,8 +4844,7 @@
     },
     "InvalidDBParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB parameter group is in use or is in an invalid state. If you are attempting to delete the parameter group, you cannot delete it when the parameter group is in this state.</p>",
       "error":{
         "code":"InvalidDBParameterGroupState",
@@ -4837,8 +4855,7 @@
     },
     "InvalidDBSecurityGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the DB security group does not allow deletion.</p>",
       "error":{
         "code":"InvalidDBSecurityGroupState",
@@ -4849,8 +4866,7 @@
     },
     "InvalidDBSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the DB snapshot does not allow deletion.</p>",
       "error":{
         "code":"InvalidDBSnapshotState",
@@ -4861,8 +4877,7 @@
     },
     "InvalidDBSubnetGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet group cannot be deleted because it is in use.</p>",
       "error":{
         "code":"InvalidDBSubnetGroupStateFault",
@@ -4873,8 +4888,7 @@
     },
     "InvalidDBSubnetStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet is not in the <i>available</i> state.</p>",
       "error":{
         "code":"InvalidDBSubnetStateFault",
@@ -4885,8 +4899,7 @@
     },
     "InvalidEventSubscriptionStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The event subscription is in an invalid state.</p>",
       "error":{
         "code":"InvalidEventSubscriptionState",
@@ -4897,8 +4910,7 @@
     },
     "InvalidGlobalClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The global cluster is in an invalid state and can't perform the requested operation. </p>",
       "error":{
         "code":"InvalidGlobalClusterStateFault",
@@ -4909,8 +4921,7 @@
     },
     "InvalidRestoreFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cannot restore from vpc backup to non-vpc DB instance.</p>",
       "error":{
         "code":"InvalidRestoreFault",
@@ -4921,8 +4932,7 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is invalid, or multiple subnets were requested that are not all in a common VPC.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -4933,8 +4943,7 @@
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>DB subnet group does not cover all Availability Zones after it is created because users' change.</p>",
       "error":{
         "code":"InvalidVPCNetworkStateFault",
@@ -4945,8 +4954,7 @@
     },
     "KMSKeyNotAccessibleFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Error accessing KMS key.</p>",
       "error":{
         "code":"KMSKeyNotAccessibleFault",
@@ -5127,7 +5135,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <code>standard | iopt1</code> </p> </li> </ul> <p>Default:</p> <ul> <li> <p> <code>standard</code> </p> </li> </ul>"
+          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <b> <code>standard</code> </b>   –   ( <i>the default</i> ) Configures cost-effective database storage for applications with moderate to small I/O usage.</p> </li> <li> <p> <b> <code>iopt1</code> </b>   –   Enables <a href=\"https://docs.aws.amazon.com/neptune/latest/userguide/storage-types.html#provisioned-iops-storage\">I/O-Optimized storage</a> that's designed to meet the needs of I/O-intensive graph workloads that require predictable pricing with low I/O latency and consistent I/O throughput.</p> <p>Neptune I/O-Optimized storage is only available starting with engine release 1.3.0.0.</p> </li> </ul>"
         }
       }
     },
@@ -5271,7 +5279,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Not supported.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "TdeCredentialArn":{
           "shape":"String",
@@ -5303,8 +5311,7 @@
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
-          "documentation":"<p>This flag should no longer be used.</p>",
-          "deprecated":true
+          "documentation":"<p>Indicates whether the DB instance is publicly accessible.</p> <p>When the DB instance is publicly accessible and you connect from outside of the DB instance's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB instance, the endpoint resolves to the private IP address. Access to the DB instance is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB instance isn't publicly accessible, it is an internal DB instance with a DNS name that resolves to a private IP address.</p>"
         },
         "MonitoringRoleArn":{
           "shape":"String",
@@ -5477,8 +5484,7 @@
     },
     "OptionGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The designated option group could not be found.</p>",
       "error":{
         "code":"OptionGroupNotFoundFault",
@@ -5528,7 +5534,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Indicates the storage type for a DB instance.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "SupportsIops":{
           "shape":"Boolean",
@@ -5767,7 +5773,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Specifies the storage type to be associated with the DB instance.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "CACertificateIdentifier":{
           "shape":"String",
@@ -5802,8 +5808,7 @@
     },
     "ProvisionedIopsNotAvailableInAZFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Provisioned IOPS not available in the specified Availability Zone.</p>",
       "error":{
         "code":"ProvisionedIopsNotAvailableInAZFault",
@@ -6004,8 +6009,7 @@
     },
     "ResourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource ID was not found.</p>",
       "error":{
         "code":"ResourceNotFoundFault",
@@ -6206,8 +6210,7 @@
     },
     "SNSInvalidTopicFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The SNS topic is invalid.</p>",
       "error":{
         "code":"SNSInvalidTopic",
@@ -6218,8 +6221,7 @@
     },
     "SNSNoAuthorizationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is no SNS authorization.</p>",
       "error":{
         "code":"SNSNoAuthorization",
@@ -6230,8 +6232,7 @@
     },
     "SNSTopicArnNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The ARN of the SNS topic could not be found.</p>",
       "error":{
         "code":"SNSTopicArnNotFound",
@@ -6274,8 +6275,7 @@
     },
     "SharedSnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of accounts that you can share a manual DB snapshot with.</p>",
       "error":{
         "code":"SharedSnapshotQuotaExceeded",
@@ -6286,8 +6286,7 @@
     },
     "SnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed number of DB snapshots.</p>",
       "error":{
         "code":"SnapshotQuotaExceeded",
@@ -6305,8 +6304,7 @@
     },
     "SourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source could not be found.</p>",
       "error":{
         "code":"SourceNotFound",
@@ -6360,8 +6358,7 @@
     },
     "StorageQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would result in user exceeding the allowed amount of storage available across all DB instances.</p>",
       "error":{
         "code":"StorageQuotaExceeded",
@@ -6372,8 +6369,7 @@
     },
     "StorageTypeNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <i>StorageType</i> specified cannot be associated with the DB Instance.</p>",
       "error":{
         "code":"StorageTypeNotSupported",
@@ -6407,8 +6403,7 @@
     },
     "SubnetAlreadyInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet is already in use in the Availability Zone.</p>",
       "error":{
         "code":"SubnetAlreadyInUse",
@@ -6433,8 +6428,7 @@
     },
     "SubscriptionAlreadyExistFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This subscription already exists.</p>",
       "error":{
         "code":"SubscriptionAlreadyExist",
@@ -6445,8 +6439,7 @@
     },
     "SubscriptionCategoryNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The designated subscription category could not be found.</p>",
       "error":{
         "code":"SubscriptionCategoryNotFound",
@@ -6457,8 +6450,7 @@
     },
     "SubscriptionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The designated subscription could not be found.</p>",
       "error":{
         "code":"SubscriptionNotFound",
@@ -6481,6 +6473,29 @@
         "locationName":"Timezone"
       }
     },
+    "SwitchoverGlobalClusterMessage":{
+      "type":"structure",
+      "required":[
+        "GlobalClusterIdentifier",
+        "TargetDbClusterIdentifier"
+      ],
+      "members":{
+        "GlobalClusterIdentifier":{
+          "shape":"GlobalClusterIdentifier",
+          "documentation":"<p>The identifier of the global database cluster to switch over. This parameter isn't case-sensitive.</p> <p>Constraints: Must match the identifier of an existing global database cluster.</p>"
+        },
+        "TargetDbClusterIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the secondary Neptune DB cluster that you want to promote to primary for the global database.</p>"
+        }
+      }
+    },
+    "SwitchoverGlobalClusterResult":{
+      "type":"structure",
+      "members":{
+        "GlobalCluster":{"shape":"GlobalCluster"}
+      }
+    },
     "TStamp":{"type":"timestamp"},
     "Tag":{
       "type":"structure",
@@ -6568,22 +6583,22 @@
       "members":{
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The valid storage types for your DB instance. For example, gp2, io1.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "StorageSize":{
           "shape":"RangeList",
-          "documentation":"<p>The valid range of storage in gibibytes. For example, 100 to 16384.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "ProvisionedIops":{
           "shape":"RangeList",
-          "documentation":"<p>The valid range of provisioned IOPS. For example, 1000-20000.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         },
         "IopsToStorageRatio":{
           "shape":"DoubleRangeList",
-          "documentation":"<p>The valid range of Provisioned IOPS to gibibytes of storage multiplier. For example, 3-10, which means that provisioned IOPS can be between 3 and 10 times storage.</p>"
+          "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
         }
       },
-      "documentation":"<p>Information about valid modifications that you can make to your DB instance.</p> <p>Contains the result of a successful call to the <a>DescribeValidDBInstanceModifications</a> action.</p>"
+      "documentation":"<p>Not applicable. In Neptune the storage type is managed at the DB Cluster level.</p>"
     },
     "ValidStorageOptionsList":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,32 +5,32 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "ApiType": {
             "required": true,
             "documentation": "Parameter to determine whether current API is a control plane or dataplane API",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/service-2.json 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,7 +6,6 @@
     "endpointPrefix":"neptune-graph",
     "protocol":"rest-json",
     "protocols":["rest-json"],
-    "ripServiceName":"neptune-graph",
     "serviceAbbreviation":"Neptune Graph",
     "serviceFullName":"Amazon Neptune Graph",
     "serviceId":"Neptune Graph",
@@ -240,8 +239,8 @@
       "input":{"shape":"ExecuteQueryInput"},
       "output":{"shape":"ExecuteQueryOutput"},
       "errors":[
-        {"shape":"UnprocessableException"},
         {"shape":"ThrottlingException"},
+        {"shape":"UnprocessableException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
@@ -609,6 +608,27 @@
         "ApiType":{"value":"ControlPlane"}
       }
     },
+    "StartGraph":{
+      "name":"StartGraph",
+      "http":{
+        "method":"POST",
+        "requestUri":"/graphs/{graphIdentifier}/start",
+        "responseCode":200
+      },
+      "input":{"shape":"StartGraphInput"},
+      "output":{"shape":"StartGraphOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Starts the specific graph.</p>",
+      "staticContextParams":{
+        "ApiType":{"value":"ControlPlane"}
+      }
+    },
     "StartImportTask":{
       "name":"StartImportTask",
       "http":{
@@ -630,6 +650,27 @@
         "ApiType":{"value":"ControlPlane"}
       }
     },
+    "StopGraph":{
+      "name":"StopGraph",
+      "http":{
+        "method":"POST",
+        "requestUri":"/graphs/{graphIdentifier}/stop",
+        "responseCode":200
+      },
+      "input":{"shape":"StopGraphInput"},
+      "output":{"shape":"StopGraphOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Stops the specific graph.</p>",
+      "staticContextParams":{
+        "ApiType":{"value":"ControlPlane"}
+      }
+    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -898,7 +939,7 @@
       "members":{
         "graphName":{
           "shape":"GraphName",
-          "documentation":"<p>A name for the new Neptune Analytics graph to be created.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. </p>"
+          "documentation":"<p>A name for the new Neptune Analytics graph to be created.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -926,7 +967,7 @@
         },
         "provisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Min = 128</p>"
+          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Min = 16</p>"
         }
       }
     },
@@ -944,7 +985,7 @@
         },
         "name":{
           "shape":"GraphName",
-          "documentation":"<p>The graph name. For example: <code>my-graph-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. </p>"
+          "documentation":"<p>The graph name. For example: <code>my-graph-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "arn":{
           "shape":"String",
@@ -964,7 +1005,7 @@
         },
         "provisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 128</p>"
+          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 16</p>"
         },
         "endpoint":{
           "shape":"String",
@@ -1013,7 +1054,7 @@
         },
         "snapshotName":{
           "shape":"SnapshotName",
-          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens.</p>"
+          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -1069,7 +1110,7 @@
       "members":{
         "graphName":{
           "shape":"GraphName",
-          "documentation":"<p>A name for the new Neptune Analytics graph to be created.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. </p>"
+          "documentation":"<p>A name for the new Neptune Analytics graph to be created.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -1101,11 +1142,11 @@
         },
         "maxProvisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The maximum provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Default: 1024, or the approved upper limit for your account.</p> <p> If both the minimum and maximum values are specified, the max of the <code>min-provisioned-memory</code> and <code>max-provisioned memory</code> is used to create the graph. If neither value is specified 128 m-NCUs are used.</p>"
+          "documentation":"<p>The maximum provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Default: 1024, or the approved upper limit for your account.</p> <p> If both the minimum and maximum values are specified, the final <code>provisioned-memory</code> will be chosen per the actual size of your imported data. If neither value is specified, 128 m-NCUs are used.</p>"
         },
         "minProvisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The minimum provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Default: 128</p>"
+          "documentation":"<p>The minimum provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph. Default: 16</p>"
         },
         "failOnError":{
           "shape":"Boolean",
@@ -1340,7 +1381,7 @@
         },
         "name":{
           "shape":"SnapshotName",
-          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens.</p>"
+          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "arn":{
           "shape":"String",
@@ -1413,8 +1454,7 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "DocumentValuedMap":{
@@ -1884,7 +1924,7 @@
         },
         "name":{
           "shape":"SnapshotName",
-          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens.</p>"
+          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "arn":{
           "shape":"String",
@@ -2195,7 +2235,7 @@
         },
         "name":{
           "shape":"SnapshotName",
-          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens.</p>"
+          "documentation":"<p>The snapshot name. For example: <code>my-snapshot-1</code>.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "arn":{
           "shape":"String",
@@ -2234,7 +2274,10 @@
         "UPDATING",
         "SNAPSHOTTING",
         "FAILED",
-        "IMPORTING"
+        "IMPORTING",
+        "STARTING",
+        "STOPPING",
+        "STOPPED"
       ]
     },
     "GraphSummary":{
@@ -2445,6 +2488,12 @@
     "ListExportTasksInput":{
       "type":"structure",
       "members":{
+        "graphIdentifier":{
+          "shape":"GraphIdentifier",
+          "documentation":"<p>The unique identifier of the Neptune Analytics graph.</p>",
+          "location":"querystring",
+          "locationName":"graphIdentifier"
+        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>Pagination token used to paginate input.</p>",
@@ -3006,11 +3055,11 @@
         },
         "graphName":{
           "shape":"GraphName",
-          "documentation":"<p>A name for the new Neptune Analytics graph to be created from the snapshot.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. </p>"
+          "documentation":"<p>A name for the new Neptune Analytics graph to be created from the snapshot.</p> <p>The name must contain from 1 to 63 letters, numbers, or hyphens, and its first character must be a letter. It cannot end with a hyphen or contain two consecutive hyphens. Only lowercase letters are allowed.</p>"
         },
         "provisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 128</p>"
+          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 16</p>"
         },
         "deletionProtection":{
           "shape":"Boolean",
@@ -3099,7 +3148,7 @@
     },
     "RoleArn":{
       "type":"string",
-      "pattern":"arn:aws[^:]*:iam::\\d{12}:(role|role/service-role)/[\\w+=,.@-]*"
+      "pattern":"arn:aws[^:]*:iam::\\d{12}:(role|role/service-role)(/[\\w+=,.@-]+)+"
     },
     "SecurityGroupId":{
       "type":"string",
@@ -3271,6 +3320,85 @@
       "max":1024,
       "min":1
     },
+    "StartGraphInput":{
+      "type":"structure",
+      "required":["graphIdentifier"],
+      "members":{
+        "graphIdentifier":{
+          "shape":"GraphIdentifier",
+          "documentation":"<p>The unique identifier of the Neptune Analytics graph.</p>",
+          "location":"uri",
+          "locationName":"graphIdentifier"
+        }
+      }
+    },
+    "StartGraphOutput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "arn"
+      ],
+      "members":{
+        "id":{
+          "shape":"GraphId",
+          "documentation":"<p>The unique identifier of the graph.</p>"
+        },
+        "name":{
+          "shape":"GraphName",
+          "documentation":"<p>The name of the graph.</p>"
+        },
+        "arn":{
+          "shape":"String",
+          "documentation":"<p>The ARN associated with the graph.</p>"
+        },
+        "status":{
+          "shape":"GraphStatus",
+          "documentation":"<p>The status of the graph.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason that the graph has this status.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the graph was created.</p>"
+        },
+        "provisionedMemory":{
+          "shape":"ProvisionedMemory",
+          "documentation":"<p>The number of memory-optimized Neptune Capacity Units (m-NCUs) allocated to the graph.</p>"
+        },
+        "endpoint":{
+          "shape":"String",
+          "documentation":"<p>The graph endpoint.</p>"
+        },
+        "publicConnectivity":{
+          "shape":"Boolean",
+          "documentation":"<p>If <code>true</code>, the graph has a public endpoint, otherwise not.</p>"
+        },
+        "vectorSearchConfiguration":{"shape":"VectorSearchConfiguration"},
+        "replicaCount":{
+          "shape":"ReplicaCount",
+          "documentation":"<p>The number of replicas for the graph.</p>"
+        },
+        "kmsKeyIdentifier":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ID of the KMS key used to encrypt and decrypt graph data.</p>"
+        },
+        "sourceSnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>The ID of the snapshot from which the graph was created, if it was created from a snapshot.</p>"
+        },
+        "deletionProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>If <code>true</code>, deletion protection is enabled for the graph.</p>"
+        },
+        "buildNumber":{
+          "shape":"String",
+          "documentation":"<p>The build number of the graph.</p>"
+        }
+      }
+    },
     "StartImportTaskInput":{
       "type":"structure",
       "required":[
@@ -3352,6 +3480,85 @@
         "importOptions":{"shape":"ImportOptions"}
       }
     },
+    "StopGraphInput":{
+      "type":"structure",
+      "required":["graphIdentifier"],
+      "members":{
+        "graphIdentifier":{
+          "shape":"GraphIdentifier",
+          "documentation":"<p>The unique identifier of the Neptune Analytics graph.</p>",
+          "location":"uri",
+          "locationName":"graphIdentifier"
+        }
+      }
+    },
+    "StopGraphOutput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "arn"
+      ],
+      "members":{
+        "id":{
+          "shape":"GraphId",
+          "documentation":"<p>The unique identifier of the graph.</p>"
+        },
+        "name":{
+          "shape":"GraphName",
+          "documentation":"<p>The name of the graph.</p>"
+        },
+        "arn":{
+          "shape":"String",
+          "documentation":"<p>The ARN associated with the graph.</p>"
+        },
+        "status":{
+          "shape":"GraphStatus",
+          "documentation":"<p>The status of the graph.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason that the graph has this status.</p>"
+        },
+        "createTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the graph was created.</p>"
+        },
+        "provisionedMemory":{
+          "shape":"ProvisionedMemory",
+          "documentation":"<p>The number of memory-optimized Neptune Capacity Units (m-NCUs) allocated to the graph.</p>"
+        },
+        "endpoint":{
+          "shape":"String",
+          "documentation":"<p>The graph endpoint.</p>"
+        },
+        "publicConnectivity":{
+          "shape":"Boolean",
+          "documentation":"<p>If true, the graph has a public endpoint, otherwise not.</p>"
+        },
+        "vectorSearchConfiguration":{"shape":"VectorSearchConfiguration"},
+        "replicaCount":{
+          "shape":"ReplicaCount",
+          "documentation":"<p>The number of replicas for the graph.</p>"
+        },
+        "kmsKeyIdentifier":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ID of the KMS key used to encrypt and decrypt graph data.</p>"
+        },
+        "sourceSnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>The ID of the snapshot from which the graph was created, if it was created from a snapshot.</p>"
+        },
+        "deletionProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>If <code>true</code>, deletion protection is enabled for the graph.</p>"
+        },
+        "buildNumber":{
+          "shape":"String",
+          "documentation":"<p>The build number of the graph.</p>"
+        }
+      }
+    },
     "String":{"type":"string"},
     "SubnetId":{
       "type":"string",
@@ -3407,8 +3614,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3490,8 +3696,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateGraphInput":{
       "type":"structure",
@@ -3509,7 +3714,7 @@
         },
         "provisionedMemory":{
           "shape":"ProvisionedMemory",
-          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 128</p>"
+          "documentation":"<p>The provisioned memory-optimized Neptune Capacity Units (m-NCUs) to use for the graph.</p> <p>Min = 16</p>"
         },
         "deletionProtection":{
           "shape":"Boolean",
diff -pruN 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/waiters-2.json 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/neptune-graph/2023-11-29/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptune-graph/2023-11-29/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -121,6 +121,23 @@
         "expected" : "ResourceNotFoundException"
       } ]
     },
+    "GraphStopped" : {
+      "description" : "Wait until Graph is Stopped",
+      "delay" : 20,
+      "maxAttempts" : 90,
+      "operation" : "GetGraph",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "STOPPED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status != 'STOPPING'",
+        "state" : "failure",
+        "expected" : true
+      } ]
+    },
     "ImportTaskCancelled" : {
       "description" : "Wait until Import Task is Cancelled",
       "delay" : 60,
diff -pruN 2.23.6-1/awscli/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptunedata/2023-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/neptunedata/2023-08-01/service-2.json 2.31.35-1/awscli/botocore/data/neptunedata/2023-08-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/neptunedata/2023-08-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/neptunedata/2023-08-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,10 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2023-08-01",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"neptune-db",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon NeptuneData",
     "serviceId":"neptunedata",
     "signatureVersion":"v4",
@@ -79,8 +80,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -104,8 +105,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -129,8 +130,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -183,8 +184,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -207,8 +208,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -288,9 +289,9 @@
         {"shape":"IllegalArgumentException"},
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedOperationException"},
-        {"shape":"ServerShutdownException"},
-        {"shape":"PreconditionsFailedException"},
         {"shape":"MethodNotAllowedException"},
+        {"shape":"PreconditionsFailedException"},
+        {"shape":"ServerShutdownException"},
         {"shape":"ReadOnlyViolationException"},
         {"shape":"ConstraintViolationException"},
         {"shape":"InvalidArgumentException"},
@@ -553,8 +554,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -577,8 +578,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -601,8 +602,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -625,8 +626,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -885,8 +886,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -909,8 +910,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -933,8 +934,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -957,8 +958,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -1072,8 +1073,8 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedOperationException"},
         {"shape":"InternalFailureException"},
-        {"shape":"S3Exception"},
         {"shape":"PreconditionsFailedException"},
+        {"shape":"S3Exception"},
         {"shape":"ConstraintViolationException"},
         {"shape":"InvalidArgumentException"},
         {"shape":"MissingParameterException"}
@@ -1093,8 +1094,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -1117,8 +1118,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -1141,8 +1142,8 @@
       "errors":[
         {"shape":"UnsupportedOperationException"},
         {"shape":"BadRequestException"},
-        {"shape":"MLResourceNotFoundException"},
         {"shape":"InvalidParameterException"},
+        {"shape":"MLResourceNotFoundException"},
         {"shape":"ClientTimeoutException"},
         {"shape":"PreconditionsFailedException"},
         {"shape":"ConstraintViolationException"},
@@ -1716,8 +1717,7 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "DocumentValuedMap":{
@@ -3805,7 +3805,20 @@
         "cn-north-1",
         "cn-northwest-1",
         "us-gov-west-1",
-        "us-gov-east-1"
+        "us-gov-east-1",
+        "ca-west-1",
+        "eu-south-2",
+        "il-central-1",
+        "me-central-1",
+        "ap-northeast-3",
+        "ap-southeast-3",
+        "ap-southeast-4",
+        "ap-southeast-5",
+        "ap-southeast-7",
+        "mx-central-1",
+        "ap-east-2",
+        "ap-south-2",
+        "eu-central-2"
       ]
     },
     "S3Exception":{
diff -pruN 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.json 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,36 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "TLSInspectionConfigurations"
+    },
+    "GetAnalysisReportResults": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "AnalysisReportResults"
+    },
+    "ListAnalysisReports": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "AnalysisReports"
+    },
+    "ListFlowOperationResults": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Flows"
+    },
+    "ListFlowOperations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "FlowOperations"
+    },
+    "ListVpcEndpointAssociations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "VpcEndpointAssociations"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "GetAnalysisReportResults": {
+        "non_aggregate_keys": [
+          "EndTime",
+          "ReportTime",
+          "Status",
+          "AnalysisType",
+          "StartTime"
+        ]
+      },
+      "ListFlowOperationResults": {
+        "non_aggregate_keys": [
+          "FirewallArn",
+          "FlowOperationId",
+          "AvailabilityZone",
+          "FlowOperationStatus",
+          "FlowRequestTimestamp",
+          "StatusMessage",
+          "VpcEndpointAssociationArn",
+          "VpcEndpointId"
+        ]
+      }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/service-2.json 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/network-firewall/2020-11-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/network-firewall/2020-11-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,41 @@
     "auth":["aws.auth#sigv4"]
   },
   "operations":{
+    "AcceptNetworkFirewallTransitGatewayAttachment":{
+      "name":"AcceptNetworkFirewallTransitGatewayAttachment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AcceptNetworkFirewallTransitGatewayAttachmentRequest"},
+      "output":{"shape":"AcceptNetworkFirewallTransitGatewayAttachmentResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Accepts a transit gateway attachment request for Network Firewall. When you accept the attachment request, Network Firewall creates the necessary routing components to enable traffic flow between the transit gateway and firewall endpoints.</p> <p>You must accept a transit gateway attachment to complete the creation of a transit gateway-attached firewall, unless auto-accept is enabled on the transit gateway. After acceptance, use <a>DescribeFirewall</a> to verify the firewall status.</p> <p>To reject an attachment instead of accepting it, use <a>RejectNetworkFirewallTransitGatewayAttachment</a>.</p> <note> <p>It can take several minutes for the attachment acceptance to complete and the firewall to become available.</p> </note>"
+    },
+    "AssociateAvailabilityZones":{
+      "name":"AssociateAvailabilityZones",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateAvailabilityZonesRequest"},
+      "output":{"shape":"AssociateAvailabilityZonesResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidTokenException"},
+        {"shape":"InvalidOperationException"},
+        {"shape":"InsufficientCapacityException"}
+      ],
+      "documentation":"<p>Associates the specified Availability Zones with a transit gateway-attached firewall. For each Availability Zone, Network Firewall creates a firewall endpoint to process traffic. You can specify one or more Availability Zones where you want to deploy the firewall.</p> <p>After adding Availability Zones, you must update your transit gateway route tables to direct traffic through the new firewall endpoints. Use <a>DescribeFirewall</a> to monitor the status of the new endpoints.</p>"
+    },
     "AssociateFirewallPolicy":{
       "name":"AssociateFirewallPolicy",
       "http":{
@@ -69,7 +104,7 @@
         {"shape":"InsufficientCapacityException"},
         {"shape":"InvalidOperationException"}
       ],
-      "documentation":"<p>Creates an Network Firewall <a>Firewall</a> and accompanying <a>FirewallStatus</a> for a VPC. </p> <p>The firewall defines the configuration settings for an Network Firewall firewall. The settings that you can define at creation include the firewall policy, the subnets in your VPC to use for the firewall endpoints, and any tags that are attached to the firewall Amazon Web Services resource. </p> <p>After you create a firewall, you can provide additional settings, like the logging configuration. </p> <p>To update the settings for a firewall, you use the operations that apply to the settings themselves, for example <a>UpdateLoggingConfiguration</a>, <a>AssociateSubnets</a>, and <a>UpdateFirewallDeleteProtection</a>. </p> <p>To manage a firewall's tags, use the standard Amazon Web Services resource tagging operations, <a>ListTagsForResource</a>, <a>TagResource</a>, and <a>UntagResource</a>.</p> <p>To retrieve information about firewalls, use <a>ListFirewalls</a> and <a>DescribeFirewall</a>.</p>"
+      "documentation":"<p>Creates an Network Firewall <a>Firewall</a> and accompanying <a>FirewallStatus</a> for a VPC. </p> <p>The firewall defines the configuration settings for an Network Firewall firewall. The settings that you can define at creation include the firewall policy, the subnets in your VPC to use for the firewall endpoints, and any tags that are attached to the firewall Amazon Web Services resource. </p> <p>After you create a firewall, you can provide additional settings, like the logging configuration. </p> <p>To update the settings for a firewall, you use the operations that apply to the settings themselves, for example <a>UpdateLoggingConfiguration</a>, <a>AssociateSubnets</a>, and <a>UpdateFirewallDeleteProtection</a>. </p> <p>To manage a firewall's tags, use the standard Amazon Web Services resource tagging operations, <a>ListTagsForResource</a>, <a>TagResource</a>, and <a>UntagResource</a>.</p> <p>To retrieve information about firewalls, use <a>ListFirewalls</a> and <a>DescribeFirewall</a>.</p> <p>To generate a report on the last 30 days of traffic monitored by a firewall, use <a>StartAnalysisReport</a>.</p>"
     },
     "CreateFirewallPolicy":{
       "name":"CreateFirewallPolicy",
@@ -122,6 +157,25 @@
       ],
       "documentation":"<p>Creates an Network Firewall TLS inspection configuration. Network Firewall uses TLS inspection configurations to decrypt your firewall's inbound and outbound SSL/TLS traffic. After decryption, Network Firewall inspects the traffic according to your firewall policy's stateful rules, and then re-encrypts it before sending it to its destination. You can enable inspection of your firewall's inbound traffic, outbound traffic, or both. To use TLS inspection with your firewall, you must first import or provision certificates using ACM, create a TLS inspection configuration, add that configuration to a new firewall policy, and then associate that policy with your firewall.</p> <p>To update the settings for a TLS inspection configuration, use <a>UpdateTLSInspectionConfiguration</a>.</p> <p>To manage a TLS inspection configuration's tags, use the standard Amazon Web Services resource tagging operations, <a>ListTagsForResource</a>, <a>TagResource</a>, and <a>UntagResource</a>.</p> <p>To retrieve information about TLS inspection configurations, use <a>ListTLSInspectionConfigurations</a> and <a>DescribeTLSInspectionConfiguration</a>.</p> <p> For more information about TLS inspection configurations, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/tls-inspection.html\">Inspecting SSL/TLS traffic with TLS inspection configurations</a> in the <i>Network Firewall Developer Guide</i>. </p>"
     },
+    "CreateVpcEndpointAssociation":{
+      "name":"CreateVpcEndpointAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateVpcEndpointAssociationRequest"},
+      "output":{"shape":"CreateVpcEndpointAssociationResponse"},
+      "errors":[
+        {"shape":"LimitExceededException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerError"},
+        {"shape":"InsufficientCapacityException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidOperationException"}
+      ],
+      "documentation":"<p>Creates a firewall endpoint for an Network Firewall firewall. This type of firewall endpoint is independent of the firewall endpoints that you specify in the <code>Firewall</code> itself, and you define it in addition to those endpoints after the firewall has been created. You can define a VPC endpoint association using a different VPC than the one you used in the firewall specifications. </p>"
+    },
     "DeleteFirewall":{
       "name":"DeleteFirewall",
       "http":{
@@ -158,6 +212,22 @@
       ],
       "documentation":"<p>Deletes the specified <a>FirewallPolicy</a>. </p>"
     },
+    "DeleteNetworkFirewallTransitGatewayAttachment":{
+      "name":"DeleteNetworkFirewallTransitGatewayAttachment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteNetworkFirewallTransitGatewayAttachmentRequest"},
+      "output":{"shape":"DeleteNetworkFirewallTransitGatewayAttachmentResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a transit gateway attachment from a Network Firewall. Either the firewall owner or the transit gateway owner can delete the attachment.</p> <important> <p>After you delete a transit gateway attachment, traffic will no longer flow through the firewall endpoints.</p> </important> <p>After you initiate the delete operation, use <a>DescribeFirewall</a> to monitor the deletion status.</p>"
+    },
     "DeleteResourcePolicy":{
       "name":"DeleteResourcePolicy",
       "http":{
@@ -210,6 +280,23 @@
       ],
       "documentation":"<p>Deletes the specified <a>TLSInspectionConfiguration</a>.</p>"
     },
+    "DeleteVpcEndpointAssociation":{
+      "name":"DeleteVpcEndpointAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteVpcEndpointAssociationRequest"},
+      "output":{"shape":"DeleteVpcEndpointAssociationResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidOperationException"}
+      ],
+      "documentation":"<p>Deletes the specified <a>VpcEndpointAssociation</a>.</p> <p>You can check whether an endpoint association is in use by reviewing the route tables for the Availability Zones where you have the endpoint subnet mapping. You can retrieve the subnet mapping by calling <a>DescribeVpcEndpointAssociation</a>. You define and update the route tables through Amazon VPC. As needed, update the route tables for the Availability Zone to remove the firewall endpoint for the association. When the route tables no longer use the firewall endpoint, you can remove the endpoint association safely.</p>"
+    },
     "DescribeFirewall":{
       "name":"DescribeFirewall",
       "http":{
@@ -226,6 +313,22 @@
       ],
       "documentation":"<p>Returns the data objects for the specified firewall. </p>"
     },
+    "DescribeFirewallMetadata":{
+      "name":"DescribeFirewallMetadata",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeFirewallMetadataRequest"},
+      "output":{"shape":"DescribeFirewallMetadataResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the high-level information about a firewall, including the Availability Zones where the Firewall is currently in use. </p>"
+    },
     "DescribeFirewallPolicy":{
       "name":"DescribeFirewallPolicy",
       "http":{
@@ -242,6 +345,22 @@
       ],
       "documentation":"<p>Returns the data objects for the specified firewall policy. </p>"
     },
+    "DescribeFlowOperation":{
+      "name":"DescribeFlowOperation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeFlowOperationRequest"},
+      "output":{"shape":"DescribeFlowOperationResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns key information about a specific flow operation.</p>"
+    },
     "DescribeLoggingConfiguration":{
       "name":"DescribeLoggingConfiguration",
       "http":{
@@ -306,6 +425,22 @@
       ],
       "documentation":"<p>High-level information about a rule group, returned by operations like create and describe. You can use the information provided in the metadata to retrieve and manage a rule group. You can retrieve all objects for a rule group by calling <a>DescribeRuleGroup</a>. </p>"
     },
+    "DescribeRuleGroupSummary":{
+      "name":"DescribeRuleGroupSummary",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeRuleGroupSummaryRequest"},
+      "output":{"shape":"DescribeRuleGroupSummaryResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Returns detailed information for a stateful rule group.</p> <p>For active threat defense Amazon Web Services managed rule groups, this operation provides insight into the protections enabled by the rule group, based on Suricata rule metadata fields. Summaries are available for rule groups you manage and for active threat defense Amazon Web Services managed rule groups.</p> <p>To modify how threat information appears in summaries, use the <code>SummaryConfiguration</code> parameter in <a>UpdateRuleGroup</a>.</p>"
+    },
     "DescribeTLSInspectionConfiguration":{
       "name":"DescribeTLSInspectionConfiguration",
       "http":{
@@ -322,6 +457,40 @@
       ],
       "documentation":"<p>Returns the data objects for the specified TLS inspection configuration.</p>"
     },
+    "DescribeVpcEndpointAssociation":{
+      "name":"DescribeVpcEndpointAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeVpcEndpointAssociationRequest"},
+      "output":{"shape":"DescribeVpcEndpointAssociationResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the data object for the specified VPC endpoint association. </p>"
+    },
+    "DisassociateAvailabilityZones":{
+      "name":"DisassociateAvailabilityZones",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateAvailabilityZonesRequest"},
+      "output":{"shape":"DisassociateAvailabilityZonesResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidTokenException"},
+        {"shape":"InvalidOperationException"}
+      ],
+      "documentation":"<p>Removes the specified Availability Zone associations from a transit gateway-attached firewall. This removes the firewall endpoints from these Availability Zones and stops traffic filtering in those zones. Before removing an Availability Zone, ensure you've updated your transit gateway route tables to redirect traffic appropriately.</p> <note> <p>If <code>AvailabilityZoneChangeProtection</code> is enabled, you must first disable it using <a>UpdateAvailabilityZoneChangeProtection</a>.</p> </note> <p>To verify the status of your Availability Zone changes, use <a>DescribeFirewall</a>.</p>"
+    },
     "DisassociateSubnets":{
       "name":"DisassociateSubnets",
       "http":{
@@ -340,6 +509,38 @@
       ],
       "documentation":"<p>Removes the specified subnet associations from the firewall. This removes the firewall endpoints from the subnets and removes any network filtering protections that the endpoints were providing. </p>"
     },
+    "GetAnalysisReportResults":{
+      "name":"GetAnalysisReportResults",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAnalysisReportResultsRequest"},
+      "output":{"shape":"GetAnalysisReportResultsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>The results of a <code>COMPLETED</code> analysis report generated with <a>StartAnalysisReport</a>.</p> <p>For more information, see <a>AnalysisTypeReportResult</a>. </p>"
+    },
+    "ListAnalysisReports":{
+      "name":"ListAnalysisReports",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAnalysisReportsRequest"},
+      "output":{"shape":"ListAnalysisReportsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of all traffic analysis reports generated within the last 30 days.</p>"
+    },
     "ListFirewallPolicies":{
       "name":"ListFirewallPolicies",
       "http":{
@@ -370,6 +571,38 @@
       ],
       "documentation":"<p>Retrieves the metadata for the firewalls that you have defined. If you provide VPC identifiers in your request, this returns only the firewalls for those VPCs.</p> <p>Depending on your setting for max results and the number of firewalls, a single call might not return the full list. </p>"
     },
+    "ListFlowOperationResults":{
+      "name":"ListFlowOperationResults",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListFlowOperationResultsRequest"},
+      "output":{"shape":"ListFlowOperationResultsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the results of a specific flow operation. </p> <p>Flow operations let you manage the flows tracked in the flow table, also known as the firewall table.</p> <p>A flow is network traffic that is monitored by a firewall, either by stateful or stateless rules. For traffic to be considered part of a flow, it must share Destination, DestinationPort, Direction, Protocol, Source, and SourcePort. </p>"
+    },
+    "ListFlowOperations":{
+      "name":"ListFlowOperations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListFlowOperationsRequest"},
+      "output":{"shape":"ListFlowOperationsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of all flow operations ran in a specific firewall. You can optionally narrow the request scope by specifying the operation type or Availability Zone associated with a firewall's flow operations. </p> <p>Flow operations let you manage the flows tracked in the flow table, also known as the firewall table.</p> <p>A flow is network traffic that is monitored by a firewall, either by stateful or stateless rules. For traffic to be considered part of a flow, it must share Destination, DestinationPort, Direction, Protocol, Source, and SourcePort. </p>"
+    },
     "ListRuleGroups":{
       "name":"ListRuleGroups",
       "http":{
@@ -416,6 +649,21 @@
       ],
       "documentation":"<p>Retrieves the tags associated with the specified resource. Tags are key:value pairs that you can use to categorize and manage your resources, for purposes like billing. For example, you might set the tag key to \"customer\" and the value to the customer name or ID. You can specify one or more tags to add to each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can tag the Amazon Web Services resources that you manage through Network Firewall: firewalls, firewall policies, and rule groups. </p>"
     },
+    "ListVpcEndpointAssociations":{
+      "name":"ListVpcEndpointAssociations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListVpcEndpointAssociationsRequest"},
+      "output":{"shape":"ListVpcEndpointAssociationsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Retrieves the metadata for the VPC endpoint associations that you have defined. If you specify a fireawll, this returns only the endpoint associations for that firewall. </p> <p>Depending on your setting for max results and the number of associations, a single call might not return the full list. </p>"
+    },
     "PutResourcePolicy":{
       "name":"PutResourcePolicy",
       "http":{
@@ -431,7 +679,71 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidResourcePolicyException"}
       ],
-      "documentation":"<p>Creates or updates an IAM policy for your rule group or firewall policy. Use this to share rule groups and firewall policies between accounts. This operation works in conjunction with the Amazon Web Services Resource Access Manager (RAM) service to manage resource sharing for Network Firewall. </p> <p>Use this operation to create or update a resource policy for your rule group or firewall policy. In the policy, you specify the accounts that you want to share the resource with and the operations that you want the accounts to be able to perform. </p> <p>When you add an account in the resource policy, you then run the following Resource Access Manager (RAM) operations to access and accept the shared rule group or firewall policy. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/ram/latest/APIReference/API_GetResourceShareInvitations.html\">GetResourceShareInvitations</a> - Returns the Amazon Resource Names (ARNs) of the resource share invitations. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/ram/latest/APIReference/API_AcceptResourceShareInvitation.html\">AcceptResourceShareInvitation</a> - Accepts the share invitation for a specified resource share. </p> </li> </ul> <p>For additional information about resource sharing using RAM, see <a href=\"https://docs.aws.amazon.com/ram/latest/userguide/what-is.html\">Resource Access Manager User Guide</a>.</p>"
+      "documentation":"<p>Creates or updates an IAM policy for your rule group, firewall policy, or firewall. Use this to share these resources between accounts. This operation works in conjunction with the Amazon Web Services Resource Access Manager (RAM) service to manage resource sharing for Network Firewall. </p> <p>For information about using sharing with Network Firewall resources, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/sharing.html\">Sharing Network Firewall resources</a> in the <i>Network Firewall Developer Guide</i>.</p> <p>Use this operation to create or update a resource policy for your Network Firewall rule group, firewall policy, or firewall. In the resource policy, you specify the accounts that you want to share the Network Firewall resource with and the operations that you want the accounts to be able to perform. </p> <p>When you add an account in the resource policy, you then run the following Resource Access Manager (RAM) operations to access and accept the shared resource. </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/ram/latest/APIReference/API_GetResourceShareInvitations.html\">GetResourceShareInvitations</a> - Returns the Amazon Resource Names (ARNs) of the resource share invitations. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/ram/latest/APIReference/API_AcceptResourceShareInvitation.html\">AcceptResourceShareInvitation</a> - Accepts the share invitation for a specified resource share. </p> </li> </ul> <p>For additional information about resource sharing using RAM, see <a href=\"https://docs.aws.amazon.com/ram/latest/userguide/what-is.html\">Resource Access Manager User Guide</a>.</p>"
+    },
+    "RejectNetworkFirewallTransitGatewayAttachment":{
+      "name":"RejectNetworkFirewallTransitGatewayAttachment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"RejectNetworkFirewallTransitGatewayAttachmentRequest"},
+      "output":{"shape":"RejectNetworkFirewallTransitGatewayAttachmentResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Rejects a transit gateway attachment request for Network Firewall. When you reject the attachment request, Network Firewall cancels the creation of routing components between the transit gateway and firewall endpoints.</p> <p>Only the transit gateway owner can reject the attachment. After rejection, no traffic will flow through the firewall endpoints for this attachment.</p> <p>Use <a>DescribeFirewall</a> to monitor the rejection status. To accept the attachment instead of rejecting it, use <a>AcceptNetworkFirewallTransitGatewayAttachment</a>.</p> <note> <p>Once rejected, you cannot reverse this action. To establish connectivity, you must create a new transit gateway-attached firewall.</p> </note>"
+    },
+    "StartAnalysisReport":{
+      "name":"StartAnalysisReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartAnalysisReportRequest"},
+      "output":{"shape":"StartAnalysisReportResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Generates a traffic analysis report for the timeframe and traffic type you specify.</p> <p>For information on the contents of a traffic analysis report, see <a>AnalysisReport</a>.</p>"
+    },
+    "StartFlowCapture":{
+      "name":"StartFlowCapture",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartFlowCaptureRequest"},
+      "output":{"shape":"StartFlowCaptureResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Begins capturing the flows in a firewall, according to the filters you define. Captures are similar, but not identical to snapshots. Capture operations provide visibility into flows that are not closed and are tracked by a firewall's flow table. Unlike snapshots, captures are a time-boxed view. </p> <p>A flow is network traffic that is monitored by a firewall, either by stateful or stateless rules. For traffic to be considered part of a flow, it must share Destination, DestinationPort, Direction, Protocol, Source, and SourcePort. </p> <note> <p>To avoid encountering operation limits, you should avoid starting captures with broad filters, like wide IP ranges. Instead, we recommend you define more specific criteria with <code>FlowFilters</code>, like narrow IP ranges, ports, or protocols.</p> </note>"
+    },
+    "StartFlowFlush":{
+      "name":"StartFlowFlush",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartFlowFlushRequest"},
+      "output":{"shape":"StartFlowFlushResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Begins the flushing of traffic from the firewall, according to the filters you define. When the operation starts, impacted flows are temporarily marked as timed out before the Suricata engine prunes, or flushes, the flows from the firewall table.</p> <important> <p>While the flush completes, impacted flows are processed as midstream traffic. This may result in a temporary increase in midstream traffic metrics. We recommend that you double check your stream exception policy before you perform a flush operation.</p> </important>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -465,6 +777,40 @@
       ],
       "documentation":"<p>Removes the tags with the specified keys from the specified resource. Tags are key:value pairs that you can use to categorize and manage your resources, for purposes like billing. For example, you might set the tag key to \"customer\" and the value to the customer name or ID. You can specify one or more tags to add to each Amazon Web Services resource, up to 50 tags for a resource.</p> <p>You can manage tags for the Amazon Web Services resources that you manage through Network Firewall: firewalls, firewall policies, and rule groups. </p>"
     },
+    "UpdateAvailabilityZoneChangeProtection":{
+      "name":"UpdateAvailabilityZoneChangeProtection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateAvailabilityZoneChangeProtectionRequest"},
+      "output":{"shape":"UpdateAvailabilityZoneChangeProtectionResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidTokenException"},
+        {"shape":"ResourceOwnerCheckException"}
+      ],
+      "documentation":"<p>Modifies the <code>AvailabilityZoneChangeProtection</code> setting for a transit gateway-attached firewall. When enabled, this setting prevents accidental changes to the firewall's Availability Zone configuration. This helps protect against disrupting traffic flow in production environments.</p> <p>When enabled, you must disable this protection before using <a>AssociateAvailabilityZones</a> or <a>DisassociateAvailabilityZones</a> to modify the firewall's Availability Zone configuration.</p>"
+    },
+    "UpdateFirewallAnalysisSettings":{
+      "name":"UpdateFirewallAnalysisSettings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateFirewallAnalysisSettingsRequest"},
+      "output":{"shape":"UpdateFirewallAnalysisSettingsResponse"},
+      "errors":[
+        {"shape":"InvalidRequestException"},
+        {"shape":"InternalServerError"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Enables specific types of firewall analysis on a specific firewall you define.</p>"
+    },
     "UpdateFirewallDeleteProtection":{
       "name":"UpdateFirewallDeleteProtection",
       "http":{
@@ -625,6 +971,46 @@
     }
   },
   "shapes":{
+    "AWSAccountId":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"^\\d{12}$"
+    },
+    "AZSyncState":{
+      "type":"structure",
+      "members":{
+        "Attachment":{"shape":"Attachment"}
+      },
+      "documentation":"<p>The status of the firewall endpoint defined by a <code>VpcEndpointAssociation</code>. </p>"
+    },
+    "AcceptNetworkFirewallTransitGatewayAttachmentRequest":{
+      "type":"structure",
+      "required":["TransitGatewayAttachmentId"],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>Required. The unique identifier of the transit gateway attachment to accept. This ID is returned in the response when creating a transit gateway-attached firewall.</p>"
+        }
+      }
+    },
+    "AcceptNetworkFirewallTransitGatewayAttachmentResponse":{
+      "type":"structure",
+      "required":[
+        "TransitGatewayAttachmentId",
+        "TransitGatewayAttachmentStatus"
+      ],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>The unique identifier of the transit gateway attachment that was accepted.</p>"
+        },
+        "TransitGatewayAttachmentStatus":{
+          "shape":"TransitGatewayAttachmentStatus",
+          "documentation":"<p>The current status of the transit gateway attachment. Valid values are:</p> <ul> <li> <p> <code>CREATING</code> - The attachment is being created</p> </li> <li> <p> <code>DELETING</code> - The attachment is being deleted</p> </li> <li> <p> <code>DELETED</code> - The attachment has been deleted</p> </li> <li> <p> <code>FAILED</code> - The attachment creation has failed and cannot be recovered</p> </li> <li> <p> <code>ERROR</code> - The attachment is in an error state that might be recoverable</p> </li> <li> <p> <code>READY</code> - The attachment is active and processing traffic</p> </li> <li> <p> <code>PENDING_ACCEPTANCE</code> - The attachment is waiting to be accepted</p> </li> <li> <p> <code>REJECTING</code> - The attachment is in the process of being rejected</p> </li> <li> <p> <code>REJECTED</code> - The attachment has been rejected</p> </li> </ul>"
+        }
+      }
+    },
     "ActionDefinition":{
       "type":"structure",
       "members":{
@@ -662,6 +1048,48 @@
       "type":"list",
       "member":{"shape":"Address"}
     },
+    "Age":{"type":"integer"},
+    "AnalysisReport":{
+      "type":"structure",
+      "members":{
+        "AnalysisReportId":{
+          "shape":"AnalysisReportId",
+          "documentation":"<p>The unique ID of the query that ran when you requested an analysis report. </p>"
+        },
+        "AnalysisType":{
+          "shape":"EnabledAnalysisType",
+          "documentation":"<p>The type of traffic that will be used to generate a report. </p>"
+        },
+        "ReportTime":{
+          "shape":"ReportTime",
+          "documentation":"<p>The date and time the analysis report was ran. </p>"
+        },
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the analysis report you specify. Statuses include <code>RUNNING</code>, <code>COMPLETED</code>, or <code>FAILED</code>.</p>"
+        }
+      },
+      "documentation":"<p>A report that captures key activity from the last 30 days of network traffic monitored by your firewall.</p> <p>You can generate up to one report per traffic type, per 30 day period. For example, when you successfully create an HTTP traffic report, you cannot create another HTTP traffic report until 30 days pass. Alternatively, if you generate a report that combines metrics on both HTTP and HTTPS traffic, you cannot create another report for either traffic type until 30 days pass.</p>"
+    },
+    "AnalysisReportId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"\\S+"
+    },
+    "AnalysisReportNextToken":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "AnalysisReportResults":{
+      "type":"list",
+      "member":{"shape":"AnalysisTypeReportResult"}
+    },
+    "AnalysisReports":{
+      "type":"list",
+      "member":{"shape":"AnalysisReport"}
+    },
     "AnalysisResult":{
       "type":"structure",
       "members":{
@@ -678,12 +1106,85 @@
           "documentation":"<p>Provides analysis details for the identified rule.</p>"
         }
       },
-      "documentation":"<p>The analysis result for Network Firewall's stateless rule group analyzer. Every time you call <a>CreateRuleGroup</a>, <a>UpdateRuleGroup</a>, or <a>DescribeRuleGroup</a> on a stateless rule group, Network Firewall analyzes the stateless rule groups in your account and identifies the rules that might adversely effect your firewall's functionality. For example, if Network Firewall detects a rule that's routing traffic asymmetrically, which impacts the service's ability to properly process traffic, the service includes the rule in a list of analysis results.</p>"
+      "documentation":"<p>The analysis result for Network Firewall's stateless rule group analyzer. Every time you call <a>CreateRuleGroup</a>, <a>UpdateRuleGroup</a>, or <a>DescribeRuleGroup</a> on a stateless rule group, Network Firewall analyzes the stateless rule groups in your account and identifies the rules that might adversely effect your firewall's functionality. For example, if Network Firewall detects a rule that's routing traffic asymmetrically, which impacts the service's ability to properly process traffic, the service includes the rule in a list of analysis results.</p> <p>The <code>AnalysisResult</code> data type is not related to traffic analysis reports you generate using <a>StartAnalysisReport</a>. For information on traffic analysis report results, see <a>AnalysisTypeReportResult</a>.</p>"
     },
     "AnalysisResultList":{
       "type":"list",
       "member":{"shape":"AnalysisResult"}
     },
+    "AnalysisTypeReportResult":{
+      "type":"structure",
+      "members":{
+        "Protocol":{
+          "shape":"CollectionMember_String",
+          "documentation":"<p>The type of traffic captured by the analysis report.</p>"
+        },
+        "FirstAccessed":{
+          "shape":"FirstAccessed",
+          "documentation":"<p>The date and time any domain was first accessed (within the last 30 day period).</p>"
+        },
+        "LastAccessed":{
+          "shape":"LastAccessed",
+          "documentation":"<p>The date and time any domain was last accessed (within the last 30 day period).</p>"
+        },
+        "Domain":{
+          "shape":"Domain",
+          "documentation":"<p>The most frequently accessed domains.</p>"
+        },
+        "Hits":{
+          "shape":"Hits",
+          "documentation":"<p>The number of attempts made to access a observed domain.</p>"
+        },
+        "UniqueSources":{
+          "shape":"UniqueSources",
+          "documentation":"<p>The number of unique source IP addresses that connected to a domain.</p>"
+        }
+      },
+      "documentation":"<p>The results of a <code>COMPLETED</code> analysis report generated with <a>StartAnalysisReport</a>.</p> <p>For an example of traffic analysis report results, see the response syntax of <a>GetAnalysisReportResults</a>.</p>"
+    },
+    "AssociateAvailabilityZonesRequest":{
+      "type":"structure",
+      "required":["AvailabilityZoneMappings"],
+      "members":{
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>Required. The Availability Zones where you want to create firewall endpoints. You must specify at least one Availability Zone.</p>"
+        }
+      }
+    },
+    "AssociateAvailabilityZonesResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>The Availability Zones where Network Firewall created firewall endpoints. Each mapping specifies an Availability Zone where the firewall processes traffic.</p>"
+        },
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        }
+      }
+    },
     "AssociateFirewallPolicyRequest":{
       "type":"structure",
       "required":["FirewallPolicyArn"],
@@ -770,6 +1271,11 @@
         }
       }
     },
+    "AssociationSyncState":{
+      "type":"map",
+      "key":{"shape":"AvailabilityZone"},
+      "value":{"shape":"AZSyncState"}
+    },
     "Attachment":{
       "type":"structure",
       "members":{
@@ -783,15 +1289,16 @@
         },
         "Status":{
           "shape":"AttachmentStatus",
-          "documentation":"<p>The current status of the firewall endpoint in the subnet. This value reflects both the instantiation of the endpoint in the VPC subnet and the sync states that are reported in the <code>Config</code> settings. When this value is <code>READY</code>, the endpoint is available and configured properly to handle network traffic. When the endpoint isn't available for traffic, this value will reflect its state, for example <code>CREATING</code> or <code>DELETING</code>.</p>"
+          "documentation":"<p>The current status of the firewall endpoint instantiation in the subnet. </p> <p>When this value is <code>READY</code>, the endpoint is available to handle network traffic. Otherwise, this value reflects its state, for example <code>CREATING</code> or <code>DELETING</code>.</p>"
         },
         "StatusMessage":{
           "shape":"StatusMessage",
           "documentation":"<p>If Network Firewall fails to create or delete the firewall endpoint in the subnet, it populates this with the reason for the error or failure and how to resolve it. A <code>FAILED</code> status indicates a non-recoverable state, and a <code>ERROR</code> status indicates an issue that you can fix. Depending on the error, it can take as many as 15 minutes to populate this field. For more information about the causes for failiure or errors and solutions available for this field, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-troubleshooting-endpoint-failures.html\">Troubleshooting firewall endpoint failures</a> in the <i>Network Firewall Developer Guide</i>.</p>"
         }
       },
-      "documentation":"<p>The configuration and status for a single subnet that you've specified for use by the Network Firewall firewall. This is part of the <a>FirewallStatus</a>.</p>"
+      "documentation":"<p>The definition and status of the firewall endpoint for a single subnet. In each configured subnet, Network Firewall instantiates a firewall endpoint to handle network traffic. </p> <p>This data type is used for any firewall endpoint type: </p> <ul> <li> <p>For <code>Firewall.SubnetMappings</code>, this <code>Attachment</code> is part of the <code>FirewallStatus</code> sync states information. You define firewall subnets using <code>CreateFirewall</code> and <code>AssociateSubnets</code>. </p> </li> <li> <p>For <code>VpcEndpointAssociation</code>, this <code>Attachment</code> is part of the <code>VpcEndpointAssociationStatus</code> sync states information. You define these subnets using <code>CreateVpcEndpointAssociation</code>. </p> </li> </ul>"
     },
+    "AttachmentId":{"type":"string"},
     "AttachmentStatus":{
       "type":"string",
       "enum":[
@@ -804,6 +1311,37 @@
       ]
     },
     "AvailabilityZone":{"type":"string"},
+    "AvailabilityZoneMapping":{
+      "type":"structure",
+      "required":["AvailabilityZone"],
+      "members":{
+        "AvailabilityZone":{
+          "shape":"AvailabilityZoneMappingString",
+          "documentation":"<p>The ID of the Availability Zone where the firewall endpoint is located. For example, <code>us-east-2a</code>. The Availability Zone must be in the same Region as the transit gateway.</p>"
+        }
+      },
+      "documentation":"<p>Defines the mapping between an Availability Zone and a firewall endpoint for a transit gateway-attached firewall. Each mapping represents where the firewall can process traffic. You use these mappings when calling <a>CreateFirewall</a>, <a>AssociateAvailabilityZones</a>, and <a>DisassociateAvailabilityZones</a>.</p> <p>To retrieve the current Availability Zone mappings for a firewall, use <a>DescribeFirewall</a>.</p>"
+    },
+    "AvailabilityZoneMappingString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"\\S+"
+    },
+    "AvailabilityZoneMappings":{
+      "type":"list",
+      "member":{"shape":"AvailabilityZoneMapping"}
+    },
+    "AvailabilityZoneMetadata":{
+      "type":"structure",
+      "members":{
+        "IPAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type of the Firewall subnet in the Availability Zone. You can't change the IP address type after you create the subnet.</p>"
+        }
+      },
+      "documentation":"<p>High-level information about an Availability Zone where the firewall has an endpoint defined. </p>"
+    },
     "AzSubnet":{
       "type":"string",
       "max":128,
@@ -815,6 +1353,7 @@
       "member":{"shape":"AzSubnet"}
     },
     "Boolean":{"type":"boolean"},
+    "ByteCount":{"type":"long"},
     "CIDRCount":{
       "type":"integer",
       "max":1000000,
@@ -875,6 +1414,7 @@
         "CAPACITY_CONSTRAINED"
       ]
     },
+    "Count":{"type":"integer"},
     "CreateFirewallPolicyRequest":{
       "type":"structure",
       "required":[
@@ -929,9 +1469,7 @@
       "type":"structure",
       "required":[
         "FirewallName",
-        "FirewallPolicyArn",
-        "VpcId",
-        "SubnetMappings"
+        "FirewallPolicyArn"
       ],
       "members":{
         "FirewallName":{
@@ -973,6 +1511,22 @@
         "EncryptionConfiguration":{
           "shape":"EncryptionConfiguration",
           "documentation":"<p>A complex type that contains settings for encryption of your firewall resources.</p>"
+        },
+        "EnabledAnalysisTypes":{
+          "shape":"EnabledAnalysisTypes",
+          "documentation":"<p>An optional setting indicating the specific traffic analysis types to enable on the firewall. </p>"
+        },
+        "TransitGatewayId":{
+          "shape":"TransitGatewayId",
+          "documentation":"<p>Required when creating a transit gateway-attached firewall. The unique identifier of the transit gateway to attach to this firewall. You can provide either a transit gateway from your account or one that has been shared with you through Resource Access Manager.</p> <important> <p>After creating the firewall, you cannot change the transit gateway association. To use a different transit gateway, you must create a new firewall.</p> </important> <p>For information about creating firewalls, see <a>CreateFirewall</a>. For specific guidance about transit gateway-attached firewalls, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/tgw-firewall-considerations.html\">Considerations for transit gateway-attached firewalls</a> in the <i>Network Firewall Developer Guide</i>.</p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>Required. The Availability Zones where you want to create firewall endpoints for a transit gateway-attached firewall. You must specify at least one Availability Zone. Consider enabling the firewall in every Availability Zone where you have workloads to maintain Availability Zone isolation.</p> <p>You can modify Availability Zones later using <a>AssociateAvailabilityZones</a> or <a>DisassociateAvailabilityZones</a>, but this may briefly disrupt traffic. The <code>AvailabilityZoneChangeProtection</code> setting controls whether you can make these modifications.</p>"
+        },
+        "AvailabilityZoneChangeProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>Optional. A setting indicating whether the firewall is protected against changes to its Availability Zone configuration. When set to <code>TRUE</code>, you cannot add or remove Availability Zones without first disabling this protection using <a>UpdateAvailabilityZoneChangeProtection</a>.</p> <p>Default value: <code>FALSE</code> </p>"
         }
       }
     },
@@ -985,7 +1539,7 @@
         },
         "FirewallStatus":{
           "shape":"FirewallStatus",
-          "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p>"
+          "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p> <p>The firewall status indicates a combined status. It indicates whether all subnets are up-to-date with the latest firewall configurations, which is based on the sync states config values, and also whether all subnets have their endpoints fully enabled, based on their sync states attachment values. </p>"
         }
       }
     },
@@ -1040,6 +1594,10 @@
         "AnalyzeRuleGroup":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether you want Network Firewall to analyze the stateless rules in the rule group for rule behavior such as asymmetric routing. If set to <code>TRUE</code>, Network Firewall runs the analysis and then creates the rule group for you. To run the stateless rule group analyzer without creating the rule group, set <code>DryRun</code> to <code>TRUE</code>.</p>"
+        },
+        "SummaryConfiguration":{
+          "shape":"SummaryConfiguration",
+          "documentation":"<p>An object that contains a <code>RuleOptions</code> array of strings. You use <code>RuleOptions</code> to determine which of the following <a>RuleSummary</a> values are returned in response to <code>DescribeRuleGroupSummary</code>.</p> <ul> <li> <p> <code>Metadata</code> - returns</p> </li> <li> <p> <code>Msg</code> </p> </li> <li> <p> <code>SID</code> </p> </li> </ul>"
         }
       }
     },
@@ -1103,6 +1661,46 @@
         }
       }
     },
+    "CreateVpcEndpointAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "FirewallArn",
+        "VpcId",
+        "SubnetMapping"
+      ],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the VPC where you want to create a firewall endpoint. </p>"
+        },
+        "SubnetMapping":{"shape":"SubnetMapping"},
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the VPC endpoint association. </p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The key:value pairs to associate with the resource.</p>"
+        }
+      }
+    },
+    "CreateVpcEndpointAssociationResponse":{
+      "type":"structure",
+      "members":{
+        "VpcEndpointAssociation":{
+          "shape":"VpcEndpointAssociation",
+          "documentation":"<p>The configuration settings for the VPC endpoint association. These settings include the firewall and the VPC and subnet to use for the firewall endpoint. </p>"
+        },
+        "VpcEndpointAssociationStatus":{
+          "shape":"VpcEndpointAssociationStatus",
+          "documentation":"<p>Detailed information about the current status of a <a>VpcEndpointAssociation</a>. You can retrieve this by calling <a>DescribeVpcEndpointAssociation</a> and providing the VPC endpoint association ARN.</p>"
+        }
+      }
+    },
     "CustomAction":{
       "type":"structure",
       "required":[
@@ -1125,6 +1723,7 @@
       "type":"list",
       "member":{"shape":"CustomAction"}
     },
+    "DeepThreatInspection":{"type":"boolean"},
     "DeleteFirewallPolicyRequest":{
       "type":"structure",
       "members":{
@@ -1168,6 +1767,33 @@
         "FirewallStatus":{"shape":"FirewallStatus"}
       }
     },
+    "DeleteNetworkFirewallTransitGatewayAttachmentRequest":{
+      "type":"structure",
+      "required":["TransitGatewayAttachmentId"],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>Required. The unique identifier of the transit gateway attachment to delete.</p>"
+        }
+      }
+    },
+    "DeleteNetworkFirewallTransitGatewayAttachmentResponse":{
+      "type":"structure",
+      "required":[
+        "TransitGatewayAttachmentId",
+        "TransitGatewayAttachmentStatus"
+      ],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>The ID of the transit gateway attachment that was deleted.</p>"
+        },
+        "TransitGatewayAttachmentStatus":{
+          "shape":"TransitGatewayAttachmentStatus",
+          "documentation":"<p>The current status of the transit gateway attachment deletion process.</p> <p>Valid values are:</p> <ul> <li> <p> <code>CREATING</code> - The attachment is being created</p> </li> <li> <p> <code>DELETING</code> - The attachment is being deleted</p> </li> <li> <p> <code>DELETED</code> - The attachment has been deleted</p> </li> <li> <p> <code>FAILED</code> - The attachment creation has failed and cannot be recovered</p> </li> <li> <p> <code>ERROR</code> - The attachment is in an error state that might be recoverable</p> </li> <li> <p> <code>READY</code> - The attachment is active and processing traffic</p> </li> <li> <p> <code>PENDING_ACCEPTANCE</code> - The attachment is waiting to be accepted</p> </li> <li> <p> <code>REJECTING</code> - The attachment is in the process of being rejected</p> </li> <li> <p> <code>REJECTED</code> - The attachment has been rejected</p> </li> </ul>"
+        }
+      }
+    },
     "DeleteResourcePolicyRequest":{
       "type":"structure",
       "required":["ResourceArn"],
@@ -1180,8 +1806,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleGroupRequest":{
       "type":"structure",
@@ -1233,6 +1858,67 @@
         }
       }
     },
+    "DeleteVpcEndpointAssociationRequest":{
+      "type":"structure",
+      "required":["VpcEndpointAssociationArn"],
+      "members":{
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        }
+      }
+    },
+    "DeleteVpcEndpointAssociationResponse":{
+      "type":"structure",
+      "members":{
+        "VpcEndpointAssociation":{
+          "shape":"VpcEndpointAssociation",
+          "documentation":"<p>The configuration settings for the VPC endpoint association. These settings include the firewall and the VPC and subnet to use for the firewall endpoint. </p>"
+        },
+        "VpcEndpointAssociationStatus":{
+          "shape":"VpcEndpointAssociationStatus",
+          "documentation":"<p>Detailed information about the current status of a <a>VpcEndpointAssociation</a>. You can retrieve this by calling <a>DescribeVpcEndpointAssociation</a> and providing the VPC endpoint association ARN.</p>"
+        }
+      }
+    },
+    "DescribeFirewallMetadataRequest":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        }
+      }
+    },
+    "DescribeFirewallMetadataResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FirewallPolicyArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall policy.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the firewall.</p>"
+        },
+        "Status":{
+          "shape":"FirewallStatusValue",
+          "documentation":"<p>The readiness of the configured firewall to handle network traffic across all of the Availability Zones where you have it configured. This setting is <code>READY</code> only when the <code>ConfigurationSyncStateSummary</code> value is <code>IN_SYNC</code> and the <code>Attachment</code> <code>Status</code> values for all of the configured subnets are <code>READY</code>. </p>"
+        },
+        "SupportedAvailabilityZones":{
+          "shape":"SupportedAvailabilityZones",
+          "documentation":"<p>The Availability Zones that the firewall currently supports. This includes all Availability Zones for which the firewall has a subnet defined. </p>"
+        },
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>The unique identifier of the transit gateway attachment associated with this firewall. This field is only present for transit gateway-attached firewalls.</p>"
+        }
+      }
+    },
     "DescribeFirewallPolicyRequest":{
       "type":"structure",
       "members":{
@@ -1293,7 +1979,81 @@
         },
         "FirewallStatus":{
           "shape":"FirewallStatus",
-          "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p>"
+          "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p> <p>The firewall status indicates a combined status. It indicates whether all subnets are up-to-date with the latest firewall configurations, which is based on the sync states config values, and also whether all subnets have their endpoints fully enabled, based on their sync states attachment values. </p>"
+        }
+      }
+    },
+    "DescribeFlowOperationRequest":{
+      "type":"structure",
+      "required":[
+        "FirewallArn",
+        "FlowOperationId"
+      ],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        }
+      }
+    },
+    "DescribeFlowOperationResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "FlowOperationType":{
+          "shape":"FlowOperationType",
+          "documentation":"<p>Defines the type of <code>FlowOperation</code>.</p>"
+        },
+        "FlowOperationStatus":{
+          "shape":"FlowOperationStatus",
+          "documentation":"<p>Returns the status of the flow operation. This string is returned in the responses to start, list, and describe commands.</p> <p>If the status is <code>COMPLETED_WITH_ERRORS</code>, results may be returned with any number of <code>Flows</code> missing from the response. If the status is <code>FAILED</code>, <code>Flows</code> returned will be empty.</p>"
+        },
+        "StatusMessage":{
+          "shape":"StatusReason",
+          "documentation":"<p>If the asynchronous operation fails, Network Firewall populates this with the reason for the error or failure. Options include <code>Flow operation error</code> and <code>Flow timeout</code>.</p>"
+        },
+        "FlowRequestTimestamp":{
+          "shape":"FlowRequestTimestamp",
+          "documentation":"<p>A timestamp indicating when the Suricata engine identified flows impacted by an operation. </p>"
+        },
+        "FlowOperation":{
+          "shape":"FlowOperation",
+          "documentation":"<p>Returns key information about a flow operation, such as related statuses, unique identifiers, and all filters defined in the operation.</p>"
         }
       }
     },
@@ -1317,7 +2077,11 @@
           "shape":"ResourceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
         },
-        "LoggingConfiguration":{"shape":"LoggingConfiguration"}
+        "LoggingConfiguration":{"shape":"LoggingConfiguration"},
+        "EnableMonitoringDashboard":{
+          "shape":"EnableMonitoringDashboard",
+          "documentation":"<p>A boolean that reflects whether or not the firewall monitoring dashboard is enabled on a firewall.</p> <p> Returns <code>TRUE</code> when the firewall monitoring dashboard is enabled on the firewall. Returns <code>FALSE</code> when the firewall monitoring dashboard is not enabled on the firewall. </p>"
+        }
       }
     },
     "DescribeResourcePolicyRequest":{
@@ -1386,7 +2150,7 @@
         "StatefulRuleOptions":{"shape":"StatefulRuleOptions"},
         "LastModifiedTime":{
           "shape":"LastUpdateTime",
-          "documentation":"<p>The last time that the rule group was changed.</p>"
+          "documentation":"<p>A timestamp indicating when the rule group was last modified.</p>"
         }
       }
     },
@@ -1432,6 +2196,41 @@
         }
       }
     },
+    "DescribeRuleGroupSummaryRequest":{
+      "type":"structure",
+      "members":{
+        "RuleGroupName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the rule group. You can't change the name of a rule group after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "RuleGroupArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>Required. The Amazon Resource Name (ARN) of the rule group.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "Type":{
+          "shape":"RuleGroupType",
+          "documentation":"<p>The type of rule group you want a summary for. This is a required field.</p> <p>Valid value: <code>STATEFUL</code> </p> <p>Note that <code>STATELESS</code> exists but is not currently supported. If you provide <code>STATELESS</code>, an exception is returned.</p>"
+        }
+      }
+    },
+    "DescribeRuleGroupSummaryResponse":{
+      "type":"structure",
+      "required":["RuleGroupName"],
+      "members":{
+        "RuleGroupName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the rule group. You can't change the name of a rule group after you create it.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the rule group. </p>"
+        },
+        "Summary":{
+          "shape":"Summary",
+          "documentation":"<p>A complex type that contains rule information based on the rule group's configured summary settings. The content varies depending on the fields that you specified to extract in your SummaryConfiguration. When you haven't configured any summary settings, this returns an empty array. The response might include:</p> <ul> <li> <p>Rule identifiers</p> </li> <li> <p>Rule descriptions</p> </li> <li> <p>Any metadata fields that you specified in your SummaryConfiguration</p> </li> </ul>"
+        }
+      }
+    },
     "DescribeTLSInspectionConfigurationRequest":{
       "type":"structure",
       "members":{
@@ -1466,6 +2265,29 @@
         }
       }
     },
+    "DescribeVpcEndpointAssociationRequest":{
+      "type":"structure",
+      "required":["VpcEndpointAssociationArn"],
+      "members":{
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        }
+      }
+    },
+    "DescribeVpcEndpointAssociationResponse":{
+      "type":"structure",
+      "members":{
+        "VpcEndpointAssociation":{
+          "shape":"VpcEndpointAssociation",
+          "documentation":"<p>The configuration settings for the VPC endpoint association. These settings include the firewall and the VPC and subnet to use for the firewall endpoint. </p>"
+        },
+        "VpcEndpointAssociationStatus":{
+          "shape":"VpcEndpointAssociationStatus",
+          "documentation":"<p>Detailed information about the current status of a <a>VpcEndpointAssociation</a>. You can retrieve this by calling <a>DescribeVpcEndpointAssociation</a> and providing the VPC endpoint association ARN.</p>"
+        }
+      }
+    },
     "Description":{
       "type":"string",
       "max":512,
@@ -1500,6 +2322,49 @@
       "max":1,
       "min":1
     },
+    "DisassociateAvailabilityZonesRequest":{
+      "type":"structure",
+      "required":["AvailabilityZoneMappings"],
+      "members":{
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>Required. The Availability Zones to remove from the firewall's configuration.</p>"
+        }
+      }
+    },
+    "DisassociateAvailabilityZonesResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>The remaining Availability Zones where the firewall has endpoints after the disassociation.</p>"
+        },
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        }
+      }
+    },
     "DisassociateSubnetsRequest":{
       "type":"structure",
       "required":["SubnetIds"],
@@ -1543,6 +2408,20 @@
         }
       }
     },
+    "Domain":{"type":"string"},
+    "EnableMonitoringDashboard":{"type":"boolean"},
+    "EnableTLSSessionHolding":{"type":"boolean"},
+    "EnabledAnalysisType":{
+      "type":"string",
+      "enum":[
+        "TLS_SNI",
+        "HTTP_HOST"
+      ]
+    },
+    "EnabledAnalysisTypes":{
+      "type":"list",
+      "member":{"shape":"EnabledAnalysisType"}
+    },
     "EncryptionConfiguration":{
       "type":"structure",
       "required":["Type"],
@@ -1565,6 +2444,7 @@
         "AWS_OWNED_KMS_KEY"
       ]
     },
+    "EndTime":{"type":"timestamp"},
     "EndpointId":{"type":"string"},
     "ErrorMessage":{"type":"string"},
     "Firewall":{
@@ -1594,7 +2474,7 @@
         },
         "SubnetMappings":{
           "shape":"SubnetMappings",
-          "documentation":"<p>The public subnets that Network Firewall is using for the firewall. Each subnet must belong to a different Availability Zone. </p>"
+          "documentation":"<p>The primary public subnets that Network Firewall is using for the firewall. Network Firewall creates a firewall endpoint in each subnet. Create a subnet mapping for each Availability Zone where you want to use the firewall.</p> <p>These subnets are all defined for a single, primary VPC, and each must belong to a different Availability Zone. Each of these subnets establishes the availability of the firewall in its Availability Zone. </p> <p>In addition to these subnets, you can define other endpoints for the firewall in <code>VpcEndpointAssociation</code> resources. You can define these additional endpoints for any VPC, and for any of the Availability Zones where the firewall resource already has a subnet mapping. VPC endpoint associations give you the ability to protect multiple VPCs using a single firewall, and to define multiple firewall endpoints for a VPC in a single Availability Zone. </p>"
         },
         "DeleteProtection":{
           "shape":"Boolean",
@@ -1623,9 +2503,33 @@
         "EncryptionConfiguration":{
           "shape":"EncryptionConfiguration",
           "documentation":"<p>A complex type that contains the Amazon Web Services KMS encryption configuration settings for your firewall.</p>"
+        },
+        "NumberOfAssociations":{
+          "shape":"NumberOfAssociations",
+          "documentation":"<p>The number of <code>VpcEndpointAssociation</code> resources that use this firewall. </p>"
+        },
+        "EnabledAnalysisTypes":{
+          "shape":"EnabledAnalysisTypes",
+          "documentation":"<p>An optional setting indicating the specific traffic analysis types to enable on the firewall. </p>"
+        },
+        "TransitGatewayId":{
+          "shape":"TransitGatewayId",
+          "documentation":"<p>The unique identifier of the transit gateway associated with this firewall. This field is only present for transit gateway-attached firewalls.</p>"
+        },
+        "TransitGatewayOwnerAccountId":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the transit gateway. This may be different from the firewall owner's account ID when using a shared transit gateway.</p>"
+        },
+        "AvailabilityZoneMappings":{
+          "shape":"AvailabilityZoneMappings",
+          "documentation":"<p>The Availability Zones where the firewall endpoints are created for a transit gateway-attached firewall. Each mapping specifies an Availability Zone where the firewall processes traffic.</p>"
+        },
+        "AvailabilityZoneChangeProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>A setting indicating whether the firewall is protected against changes to its Availability Zone configuration. When set to <code>TRUE</code>, you must first disable this protection before adding or removing Availability Zones.</p>"
         }
       },
-      "documentation":"<p>The firewall defines the configuration settings for an Network Firewall firewall. These settings include the firewall policy, the subnets in your VPC to use for the firewall endpoints, and any tags that are attached to the firewall Amazon Web Services resource. </p> <p>The status of the firewall, for example whether it's ready to filter network traffic, is provided in the corresponding <a>FirewallStatus</a>. You can retrieve both objects by calling <a>DescribeFirewall</a>.</p>"
+      "documentation":"<p>A firewall defines the behavior of a firewall, the main VPC where the firewall is used, the Availability Zones where the firewall can be used, and one subnet to use for a firewall endpoint within each of the Availability Zones. The Availability Zones are defined implicitly in the subnet specifications.</p> <p>In addition to the firewall endpoints that you define in this <code>Firewall</code> specification, you can create firewall endpoints in <code>VpcEndpointAssociation</code> resources for any VPC, in any Availability Zone where the firewall is already in use. </p> <p>The status of the firewall, for example whether it's ready to filter network traffic, is provided in the corresponding <a>FirewallStatus</a>. You can retrieve both the firewall and firewall status by calling <a>DescribeFirewall</a>.</p>"
     },
     "FirewallMetadata":{
       "type":"structure",
@@ -1637,6 +2541,10 @@
         "FirewallArn":{
           "shape":"ResourceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>The unique identifier of the transit gateway attachment associated with this firewall. This field is only present for transit gateway-attached firewalls.</p>"
         }
       },
       "documentation":"<p>High-level information about a firewall, returned by operations like create and describe. You can use the information provided in the metadata to retrieve and manage a firewall.</p>"
@@ -1687,6 +2595,10 @@
         "PolicyVariables":{
           "shape":"PolicyVariables",
           "documentation":"<p>Contains variables that you can use to override default Suricata settings in your firewall policy.</p>"
+        },
+        "EnableTLSSessionHolding":{
+          "shape":"EnableTLSSessionHolding",
+          "documentation":"<p>When true, prevents TCP and TLS packets from reaching destination servers until TLS Inspection has evaluated Server Name Indication (SNI) rules. Requires an associated TLS Inspection configuration.</p>"
         }
       },
       "documentation":"<p>The firewall policy defines the behavior of a firewall using a collection of stateless and stateful rule groups and other settings. You can use one firewall policy for multiple firewalls. </p> <p>This, along with <a>FirewallPolicyResponse</a>, define the policy. You can retrieve all objects for a firewall policy by calling <a>DescribeFirewallPolicy</a>.</p>"
@@ -1769,22 +2681,26 @@
       "members":{
         "Status":{
           "shape":"FirewallStatusValue",
-          "documentation":"<p>The readiness of the configured firewall to handle network traffic across all of the Availability Zones where you've configured it. This setting is <code>READY</code> only when the <code>ConfigurationSyncStateSummary</code> value is <code>IN_SYNC</code> and the <code>Attachment</code> <code>Status</code> values for all of the configured subnets are <code>READY</code>. </p>"
+          "documentation":"<p>The readiness of the configured firewall to handle network traffic across all of the Availability Zones where you have it configured. This setting is <code>READY</code> only when the <code>ConfigurationSyncStateSummary</code> value is <code>IN_SYNC</code> and the <code>Attachment</code> <code>Status</code> values for all of the configured subnets are <code>READY</code>. </p>"
         },
         "ConfigurationSyncStateSummary":{
           "shape":"ConfigurationSyncState",
-          "documentation":"<p>The configuration sync state for the firewall. This summarizes the sync states reported in the <code>Config</code> settings for all of the Availability Zones where you have configured the firewall. </p> <p>When you create a firewall or update its configuration, for example by adding a rule group to its firewall policy, Network Firewall distributes the configuration changes to all zones where the firewall is in use. This summary indicates whether the configuration changes have been applied everywhere. </p> <p>This status must be <code>IN_SYNC</code> for the firewall to be ready for use, but it doesn't indicate that the firewall is ready. The <code>Status</code> setting indicates firewall readiness.</p>"
+          "documentation":"<p>The configuration sync state for the firewall. This summarizes the <code>Config</code> settings in the <code>SyncStates</code> for this firewall status object. </p> <p>When you create a firewall or update its configuration, for example by adding a rule group to its firewall policy, Network Firewall distributes the configuration changes to all Availability Zones that have subnets defined for the firewall. This summary indicates whether the configuration changes have been applied everywhere. </p> <p>This status must be <code>IN_SYNC</code> for the firewall to be ready for use, but it doesn't indicate that the firewall is ready. The <code>Status</code> setting indicates firewall readiness. It's based on this setting and the readiness of the firewall endpoints to take traffic. </p>"
         },
         "SyncStates":{
           "shape":"SyncStates",
-          "documentation":"<p>The subnets that you've configured for use by the Network Firewall firewall. This contains one array element per Availability Zone where you've configured a subnet. These objects provide details of the information that is summarized in the <code>ConfigurationSyncStateSummary</code> and <code>Status</code>, broken down by zone and configuration object. </p>"
+          "documentation":"<p>Status for the subnets that you've configured in the firewall. This contains one array element per Availability Zone where you've configured a subnet in the firewall. </p> <p>These objects provide detailed information for the settings <code>ConfigurationSyncStateSummary</code> and <code>Status</code>. </p>"
         },
         "CapacityUsageSummary":{
           "shape":"CapacityUsageSummary",
-          "documentation":"<p>Describes the capacity usage of the resources contained in a firewall's reference sets. Network Firewall calclulates the capacity usage by taking an aggregated count of all of the resources used by all of the reference sets in a firewall.</p>"
+          "documentation":"<p>Describes the capacity usage of the resources contained in a firewall's reference sets. Network Firewall calculates the capacity usage by taking an aggregated count of all of the resources used by all of the reference sets in a firewall.</p>"
+        },
+        "TransitGatewayAttachmentSyncState":{
+          "shape":"TransitGatewayAttachmentSyncState",
+          "documentation":"<p>The synchronization state of the transit gateway attachment. This indicates whether the firewall's transit gateway configuration is properly synchronized and operational. Use this to verify that your transit gateway configuration changes have been applied.</p>"
         }
       },
-      "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p>"
+      "documentation":"<p>Detailed information about the current status of a <a>Firewall</a>. You can retrieve this for a firewall by calling <a>DescribeFirewall</a> and providing the firewall name and ARN.</p> <p>The firewall status indicates a combined status. It indicates whether all subnets are up-to-date with the latest firewall configurations, which is based on the sync states config values, and also whether all subnets have their endpoints fully enabled, based on their sync states attachment values. </p>"
     },
     "FirewallStatusValue":{
       "type":"string",
@@ -1798,10 +2714,130 @@
       "type":"list",
       "member":{"shape":"FirewallMetadata"}
     },
+    "FirstAccessed":{"type":"timestamp"},
     "Flags":{
       "type":"list",
       "member":{"shape":"TCPFlag"}
     },
+    "Flow":{
+      "type":"structure",
+      "members":{
+        "SourceAddress":{"shape":"Address"},
+        "DestinationAddress":{"shape":"Address"},
+        "SourcePort":{
+          "shape":"Port",
+          "documentation":"<p>The source port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
+        },
+        "DestinationPort":{
+          "shape":"Port",
+          "documentation":"<p>The destination port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
+        },
+        "Protocol":{
+          "shape":"ProtocolString",
+          "documentation":"<p>The protocols to inspect for, specified using the assigned internet protocol number (IANA) for each protocol. If not specified, this matches with any protocol.</p>"
+        },
+        "Age":{
+          "shape":"Age",
+          "documentation":"<p>Returned as info about age of the flows identified by the flow operation.</p>"
+        },
+        "PacketCount":{
+          "shape":"PacketCount",
+          "documentation":"<p>Returns the total number of data packets received or transmitted in a flow.</p>"
+        },
+        "ByteCount":{
+          "shape":"ByteCount",
+          "documentation":"<p>Returns the number of bytes received or transmitted in a specific flow.</p>"
+        }
+      },
+      "documentation":"<p>Any number of arrays, where each array is a single flow identified in the scope of the operation. If multiple flows were in the scope of the operation, multiple <code>Flows</code> arrays are returned.</p>"
+    },
+    "FlowFilter":{
+      "type":"structure",
+      "members":{
+        "SourceAddress":{"shape":"Address"},
+        "DestinationAddress":{"shape":"Address"},
+        "SourcePort":{
+          "shape":"Port",
+          "documentation":"<p>The source port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
+        },
+        "DestinationPort":{
+          "shape":"Port",
+          "documentation":"<p>The destination port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
+        },
+        "Protocols":{
+          "shape":"ProtocolStrings",
+          "documentation":"<p>The protocols to inspect for, specified using the assigned internet protocol number (IANA) for each protocol. If not specified, this matches with any protocol.</p>"
+        }
+      },
+      "documentation":"<p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+    },
+    "FlowFilters":{
+      "type":"list",
+      "member":{"shape":"FlowFilter"}
+    },
+    "FlowOperation":{
+      "type":"structure",
+      "members":{
+        "MinimumFlowAgeInSeconds":{
+          "shape":"Age",
+          "documentation":"<p>The reqested <code>FlowOperation</code> ignores flows with an age (in seconds) lower than <code>MinimumFlowAgeInSeconds</code>. You provide this for start commands.</p>"
+        },
+        "FlowFilters":{
+          "shape":"FlowFilters",
+          "documentation":"<p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a flow operation, such as related statuses, unique identifiers, and all filters defined in the operation.</p> <p>Flow operations let you manage the flows tracked in the flow table, also known as the firewall table.</p> <p>A flow is network traffic that is monitored by a firewall, either by stateful or stateless rules. For traffic to be considered part of a flow, it must share Destination, DestinationPort, Direction, Protocol, Source, and SourcePort. </p>"
+    },
+    "FlowOperationId":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"^([0-9a-f]{8})-([0-9a-f]{4}-){3}([0-9a-f]{12})$"
+    },
+    "FlowOperationMetadata":{
+      "type":"structure",
+      "members":{
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "FlowOperationType":{
+          "shape":"FlowOperationType",
+          "documentation":"<p>Defines the type of <code>FlowOperation</code>.</p>"
+        },
+        "FlowRequestTimestamp":{
+          "shape":"FlowRequestTimestamp",
+          "documentation":"<p>A timestamp indicating when the Suricata engine identified flows impacted by an operation. </p>"
+        },
+        "FlowOperationStatus":{
+          "shape":"FlowOperationStatus",
+          "documentation":"<p>Returns the status of the flow operation. This string is returned in the responses to start, list, and describe commands.</p> <p>If the status is <code>COMPLETED_WITH_ERRORS</code>, results may be returned with any number of <code>Flows</code> missing from the response. If the status is <code>FAILED</code>, <code>Flows</code> returned will be empty.</p>"
+        }
+      },
+      "documentation":"<p>An array of objects with metadata about the requested <code>FlowOperation</code>.</p>"
+    },
+    "FlowOperationStatus":{
+      "type":"string",
+      "enum":[
+        "COMPLETED",
+        "IN_PROGRESS",
+        "FAILED",
+        "COMPLETED_WITH_ERRORS"
+      ]
+    },
+    "FlowOperationType":{
+      "type":"string",
+      "enum":[
+        "FLOW_FLUSH",
+        "FLOW_CAPTURE"
+      ]
+    },
+    "FlowOperations":{
+      "type":"list",
+      "member":{"shape":"FlowOperationMetadata"}
+    },
+    "FlowRequestTimestamp":{"type":"timestamp"},
     "FlowTimeouts":{
       "type":"structure",
       "members":{
@@ -1812,13 +2848,78 @@
       },
       "documentation":"<p>Describes the amount of time that can pass without any traffic sent through the firewall before the firewall determines that the connection is idle and Network Firewall removes the flow entry from its flow table. Existing connections and flows are not impacted when you update this value. Only new connections after you update this value are impacted. </p>"
     },
+    "Flows":{
+      "type":"list",
+      "member":{"shape":"Flow"}
+    },
     "GeneratedRulesType":{
       "type":"string",
       "enum":[
         "ALLOWLIST",
-        "DENYLIST"
+        "DENYLIST",
+        "REJECTLIST",
+        "ALERTLIST"
       ]
     },
+    "GetAnalysisReportResultsRequest":{
+      "type":"structure",
+      "required":["AnalysisReportId"],
+      "members":{
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "AnalysisReportId":{
+          "shape":"AnalysisReportId",
+          "documentation":"<p>The unique ID of the query that ran when you requested an analysis report. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "NextToken":{
+          "shape":"AnalysisReportNextToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"PaginationMaxResults",
+          "documentation":"<p>The maximum number of objects that you want Network Firewall to return for this request. If more objects are available, in the response, Network Firewall provides a <code>NextToken</code> value that you can use in a subsequent call to get the next batch of objects.</p>"
+        }
+      }
+    },
+    "GetAnalysisReportResultsResponse":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the analysis report you specify. Statuses include <code>RUNNING</code>, <code>COMPLETED</code>, or <code>FAILED</code>.</p>"
+        },
+        "StartTime":{
+          "shape":"StartTime",
+          "documentation":"<p> The date and time within the last 30 days from which to start retrieving analysis data, in UTC format (for example, <code>YYYY-MM-DDTHH:MM:SSZ</code>. </p>"
+        },
+        "EndTime":{
+          "shape":"EndTime",
+          "documentation":"<p>The date and time, up to the current date, from which to stop retrieving analysis data, in UTC format (for example, <code>YYYY-MM-DDTHH:MM:SSZ</code>). </p>"
+        },
+        "ReportTime":{
+          "shape":"ReportTime",
+          "documentation":"<p>The date and time the analysis report was ran. </p>"
+        },
+        "AnalysisType":{
+          "shape":"EnabledAnalysisType",
+          "documentation":"<p>The type of traffic that will be used to generate a report. </p>"
+        },
+        "NextToken":{
+          "shape":"AnalysisReportNextToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "AnalysisReportResults":{
+          "shape":"AnalysisReportResults",
+          "documentation":"<p>Retrieves the results of a traffic analysis report.</p>"
+        }
+      }
+    },
     "HashMapKey":{
       "type":"string",
       "max":50,
@@ -1852,7 +2953,7 @@
         },
         "SourcePort":{
           "shape":"Port",
-          "documentation":"<p>The source port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>. </p>"
+          "documentation":"<p>The source port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
         },
         "Direction":{
           "shape":"StatefulRuleDirection",
@@ -1864,11 +2965,21 @@
         },
         "DestinationPort":{
           "shape":"Port",
-          "documentation":"<p>The destination port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>. </p>"
+          "documentation":"<p>The destination port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p>"
         }
       },
       "documentation":"<p>The basic rule criteria for Network Firewall to use to inspect packet headers in stateful traffic flow inspection. Traffic flows that match the criteria are a match for the corresponding <a>StatefulRule</a>. </p>"
     },
+    "Hits":{
+      "type":"structure",
+      "members":{
+        "Count":{
+          "shape":"Count",
+          "documentation":"<p>The number of attempts made to access a domain.</p>"
+        }
+      },
+      "documentation":"<p>Attempts made to a access domain.</p>"
+    },
     "IPAddressType":{
       "type":"string",
       "enum":[
@@ -1999,6 +3110,7 @@
       "min":1,
       "pattern":".*"
     },
+    "LastAccessed":{"type":"timestamp"},
     "LastUpdateTime":{"type":"timestamp"},
     "LimitExceededException":{
       "type":"structure",
@@ -2008,6 +3120,40 @@
       "documentation":"<p>Unable to perform the operation because doing so would violate a limit setting. </p>",
       "exception":true
     },
+    "ListAnalysisReportsRequest":{
+      "type":"structure",
+      "members":{
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"PaginationMaxResults",
+          "documentation":"<p>The maximum number of objects that you want Network Firewall to return for this request. If more objects are available, in the response, Network Firewall provides a <code>NextToken</code> value that you can use in a subsequent call to get the next batch of objects.</p>"
+        }
+      }
+    },
+    "ListAnalysisReportsResponse":{
+      "type":"structure",
+      "members":{
+        "AnalysisReports":{
+          "shape":"AnalysisReports",
+          "documentation":"<p>The <code>id</code> and <code>ReportTime</code> associated with a requested analysis report. Does not provide the status of the analysis report. </p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        }
+      }
+    },
     "ListFirewallPoliciesRequest":{
       "type":"structure",
       "members":{
@@ -2064,6 +3210,135 @@
         }
       }
     },
+    "ListFlowOperationResultsRequest":{
+      "type":"structure",
+      "required":[
+        "FirewallArn",
+        "FlowOperationId"
+      ],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"PaginationMaxResults",
+          "documentation":"<p>The maximum number of objects that you want Network Firewall to return for this request. If more objects are available, in the response, Network Firewall provides a <code>NextToken</code> value that you can use in a subsequent call to get the next batch of objects.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        }
+      }
+    },
+    "ListFlowOperationResultsResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p/>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p/>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "FlowOperationStatus":{
+          "shape":"FlowOperationStatus",
+          "documentation":"<p>Returns the status of the flow operation. This string is returned in the responses to start, list, and describe commands.</p> <p>If the status is <code>COMPLETED_WITH_ERRORS</code>, results may be returned with any number of <code>Flows</code> missing from the response. If the status is <code>FAILED</code>, <code>Flows</code> returned will be empty.</p>"
+        },
+        "StatusMessage":{
+          "shape":"StatusReason",
+          "documentation":"<p>If the asynchronous operation fails, Network Firewall populates this with the reason for the error or failure. Options include <code>Flow operation error</code> and <code>Flow timeout</code>.</p>"
+        },
+        "FlowRequestTimestamp":{
+          "shape":"FlowRequestTimestamp",
+          "documentation":"<p>A timestamp indicating when the Suricata engine identified flows impacted by an operation. </p>"
+        },
+        "Flows":{
+          "shape":"Flows",
+          "documentation":"<p>Any number of arrays, where each array is a single flow identified in the scope of the operation. If multiple flows were in the scope of the operation, multiple <code>Flows</code> arrays are returned.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        }
+      }
+    },
+    "ListFlowOperationsRequest":{
+      "type":"structure",
+      "required":["FirewallArn"],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "FlowOperationType":{
+          "shape":"FlowOperationType",
+          "documentation":"<p>An optional string that defines whether any or all operation types are returned.</p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"PaginationMaxResults",
+          "documentation":"<p>The maximum number of objects that you want Network Firewall to return for this request. If more objects are available, in the response, Network Firewall provides a <code>NextToken</code> value that you can use in a subsequent call to get the next batch of objects.</p>"
+        }
+      }
+    },
+    "ListFlowOperationsResponse":{
+      "type":"structure",
+      "members":{
+        "FlowOperations":{
+          "shape":"FlowOperations",
+          "documentation":"<p>Flow operations let you manage the flows tracked in the flow table, also known as the firewall table.</p> <p>A flow is network traffic that is monitored by a firewall, either by stateful or stateless rules. For traffic to be considered part of a flow, it must share Destination, DestinationPort, Direction, Protocol, Source, and SourcePort. </p>"
+        },
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        }
+      }
+    },
     "ListRuleGroupsRequest":{
       "type":"structure",
       "members":{
@@ -2159,6 +3434,36 @@
         }
       }
     },
+    "ListVpcEndpointAssociationsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"PaginationMaxResults",
+          "documentation":"<p>The maximum number of objects that you want Network Firewall to return for this request. If more objects are available, in the response, Network Firewall provides a <code>NextToken</code> value that you can use in a subsequent call to get the next batch of objects.</p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>If you don't specify this, Network Firewall retrieves all VPC endpoint associations that you have defined.</p>"
+        }
+      }
+    },
+    "ListVpcEndpointAssociationsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When you request a list of objects with a <code>MaxResults</code> setting, if the number of objects that are still available for retrieval exceeds the maximum you requested, Network Firewall returns a <code>NextToken</code> value in the response. To retrieve the next batch of objects, use the token returned from the prior request in your next request.</p>"
+        },
+        "VpcEndpointAssociations":{
+          "shape":"VpcEndpointAssociations",
+          "documentation":"<p>The VPC endpoint assocation metadata objects for the firewall that you specified. If you didn't specify a firewall, this is all VPC endpoint associations that you have defined. </p> <p>Depending on your setting for max results and the number of firewalls you have, a single call might not be the full list. </p>"
+        }
+      }
+    },
     "LogDestinationConfig":{
       "type":"structure",
       "required":[
@@ -2242,15 +3547,15 @@
         },
         "SourcePorts":{
           "shape":"PortRanges",
-          "documentation":"<p>The source ports to inspect for. If not specified, this matches with any source port. This setting is only used for protocols 6 (TCP) and 17 (UDP). </p> <p>You can specify individual ports, for example <code>1994</code> and you can specify port ranges, for example <code>1990:1994</code>. </p>"
+          "documentation":"<p>The source port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p> <p> If not specified, this matches with any source port.</p> <p>This setting is only used for protocols 6 (TCP) and 17 (UDP).</p>"
         },
         "DestinationPorts":{
           "shape":"PortRanges",
-          "documentation":"<p>The destination ports to inspect for. If not specified, this matches with any destination port. This setting is only used for protocols 6 (TCP) and 17 (UDP). </p> <p>You can specify individual ports, for example <code>1994</code> and you can specify port ranges, for example <code>1990:1994</code>. </p>"
+          "documentation":"<p>The destination port to inspect for. You can specify an individual port, for example <code>1994</code> and you can specify a port range, for example <code>1990:1994</code>. To match with any port, specify <code>ANY</code>.</p> <p>This setting is only used for protocols 6 (TCP) and 17 (UDP). </p>"
         },
         "Protocols":{
           "shape":"ProtocolNumbers",
-          "documentation":"<p>The protocols to inspect for, specified using each protocol's assigned internet protocol number (IANA). If not specified, this matches with any protocol. </p>"
+          "documentation":"<p>The protocols to inspect for, specified using the assigned internet protocol number (IANA) for each protocol. If not specified, this matches with any protocol.</p>"
         },
         "TCPFlags":{
           "shape":"TCPFlags",
@@ -2264,6 +3569,7 @@
       "type":"string",
       "enum":["DROP_TO_ALERT"]
     },
+    "PacketCount":{"type":"integer"},
     "PaginationMaxResults":{
       "type":"integer",
       "max":100,
@@ -2375,6 +3681,16 @@
       "type":"list",
       "member":{"shape":"ProtocolNumber"}
     },
+    "ProtocolString":{
+      "type":"string",
+      "max":12,
+      "min":1,
+      "pattern":"^.*$"
+    },
+    "ProtocolStrings":{
+      "type":"list",
+      "member":{"shape":"ProtocolString"}
+    },
     "PublishMetricAction":{
       "type":"structure",
       "required":["Dimensions"],
@@ -2395,18 +3711,17 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the account that you want to share rule groups and firewall policies with.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the account that you want to share your Network Firewall resources with.</p>"
         },
         "Policy":{
           "shape":"PolicyString",
-          "documentation":"<p>The IAM policy statement that lists the accounts that you want to share your rule group or firewall policy with and the operations that you want the accounts to be able to perform. </p> <p>For a rule group resource, you can specify the following operations in the Actions section of the statement:</p> <ul> <li> <p>network-firewall:CreateFirewallPolicy</p> </li> <li> <p>network-firewall:UpdateFirewallPolicy</p> </li> <li> <p>network-firewall:ListRuleGroups</p> </li> </ul> <p>For a firewall policy resource, you can specify the following operations in the Actions section of the statement:</p> <ul> <li> <p>network-firewall:AssociateFirewallPolicy</p> </li> <li> <p>network-firewall:ListFirewallPolicies</p> </li> </ul> <p>In the Resource section of the statement, you specify the ARNs for the rule groups and firewall policies that you want to share with the account that you specified in <code>Arn</code>.</p>"
+          "documentation":"<p>The IAM policy statement that lists the accounts that you want to share your Network Firewall resources with and the operations that you want the accounts to be able to perform. </p> <p>For a rule group resource, you can specify the following operations in the Actions section of the statement:</p> <ul> <li> <p>network-firewall:CreateFirewallPolicy</p> </li> <li> <p>network-firewall:UpdateFirewallPolicy</p> </li> <li> <p>network-firewall:ListRuleGroups</p> </li> </ul> <p>For a firewall policy resource, you can specify the following operations in the Actions section of the statement:</p> <ul> <li> <p>network-firewall:AssociateFirewallPolicy</p> </li> <li> <p>network-firewall:ListFirewallPolicies</p> </li> </ul> <p>For a firewall resource, you can specify the following operations in the Actions section of the statement:</p> <ul> <li> <p>network-firewall:CreateVpcEndpointAssociation</p> </li> <li> <p>network-firewall:DescribeFirewallMetadata</p> </li> <li> <p>network-firewall:ListFirewalls</p> </li> </ul> <p>In the Resource section of the statement, you specify the ARNs for the Network Firewall resources that you want to share with the account that you specified in <code>Arn</code>.</p>"
         }
       }
     },
     "PutResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReferenceSets":{
       "type":"structure",
@@ -2418,6 +3733,34 @@
       },
       "documentation":"<p>Contains a set of IP set references.</p>"
     },
+    "RejectNetworkFirewallTransitGatewayAttachmentRequest":{
+      "type":"structure",
+      "required":["TransitGatewayAttachmentId"],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>Required. The unique identifier of the transit gateway attachment to reject. This ID is returned in the response when creating a transit gateway-attached firewall.</p>"
+        }
+      }
+    },
+    "RejectNetworkFirewallTransitGatewayAttachmentResponse":{
+      "type":"structure",
+      "required":[
+        "TransitGatewayAttachmentId",
+        "TransitGatewayAttachmentStatus"
+      ],
+      "members":{
+        "TransitGatewayAttachmentId":{
+          "shape":"TransitGatewayAttachmentId",
+          "documentation":"<p>The unique identifier of the transit gateway attachment that was rejected.</p>"
+        },
+        "TransitGatewayAttachmentStatus":{
+          "shape":"TransitGatewayAttachmentStatus",
+          "documentation":"<p>The current status of the transit gateway attachment. Valid values are:</p> <ul> <li> <p> <code>CREATING</code> - The attachment is being created</p> </li> <li> <p> <code>DELETING</code> - The attachment is being deleted</p> </li> <li> <p> <code>DELETED</code> - The attachment has been deleted</p> </li> <li> <p> <code>FAILED</code> - The attachment creation has failed and cannot be recovered</p> </li> <li> <p> <code>ERROR</code> - The attachment is in an error state that might be recoverable</p> </li> <li> <p> <code>READY</code> - The attachment is active and processing traffic</p> </li> <li> <p> <code>PENDING_ACCEPTANCE</code> - The attachment is waiting to be accepted</p> </li> <li> <p> <code>REJECTING</code> - The attachment is in the process of being rejected</p> </li> <li> <p> <code>REJECTED</code> - The attachment has been rejected</p> </li> </ul> <p>For information about troubleshooting endpoint failures, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-troubleshooting-endpoint-failures.html\">Troubleshooting firewall endpoint failures</a> in the <i>Network Firewall Developer Guide</i>.</p>"
+        }
+      }
+    },
+    "ReportTime":{"type":"timestamp"},
     "ResourceArn":{
       "type":"string",
       "max":256,
@@ -2441,7 +3784,8 @@
       "type":"string",
       "enum":[
         "AWS_MANAGED_THREAT_SIGNATURES",
-        "AWS_MANAGED_DOMAIN_LISTS"
+        "AWS_MANAGED_DOMAIN_LISTS",
+        "ACTIVE_THREAT_DEFENSE"
       ]
     },
     "ResourceName":{
@@ -2596,7 +3940,7 @@
         },
         "SnsTopic":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon resource name (ARN) of the Amazon Simple Notification Service SNS topic that's used to record changes to the managed rule group. You can subscribe to the SNS topic to receive notifications when the managed rule group is modified, such as for new versions and for version expiration. For more information, see the <a href=\"https://docs.aws.amazon.com/sns/latest/dg/welcome.html\">Amazon Simple Notification Service Developer Guide.</a>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Simple Notification Service SNS topic that's used to record changes to the managed rule group. You can subscribe to the SNS topic to receive notifications when the managed rule group is modified, such as for new versions and for version expiration. For more information, see the <a href=\"https://docs.aws.amazon.com/sns/latest/dg/welcome.html\">Amazon Simple Notification Service Developer Guide.</a>.</p>"
         },
         "LastModifiedTime":{
           "shape":"LastUpdateTime",
@@ -2605,6 +3949,10 @@
         "AnalysisResults":{
           "shape":"AnalysisResultList",
           "documentation":"<p>The list of analysis results for <code>AnalyzeRuleGroup</code>. If you set <code>AnalyzeRuleGroup</code> to <code>TRUE</code> in <a>CreateRuleGroup</a>, <a>UpdateRuleGroup</a>, or <a>DescribeRuleGroup</a>, Network Firewall analyzes the rule group and identifies the rules that might adversely effect your firewall's functionality. For example, if Network Firewall detects a rule that's routing traffic asymmetrically, which impacts the service's ability to properly process traffic, the service includes the rule in the list of analysis results.</p>"
+        },
+        "SummaryConfiguration":{
+          "shape":"SummaryConfiguration",
+          "documentation":"<p>A complex type containing the currently selected rule option fields that will be displayed for rule summarization returned by <a>DescribeRuleGroupSummary</a>.</p> <ul> <li> <p>The <code>RuleOptions</code> specified in <a>SummaryConfiguration</a> </p> </li> <li> <p>Rule metadata organization preferences</p> </li> </ul>"
         }
       },
       "documentation":"<p>The high-level properties of a rule group. This, along with the <a>RuleGroup</a>, define the rule group. You can retrieve all objects for a rule group by calling <a>DescribeRuleGroup</a>. </p>"
@@ -2630,11 +3978,11 @@
       "members":{
         "Keyword":{
           "shape":"Keyword",
-          "documentation":"<p>The keyword for the Suricata compatible rule option. You must include a <code>sid</code> (signature ID), and can optionally include other keywords. For information about Suricata compatible keywords, see <a href=\"https://suricata.readthedocs.io/en/suricata-6.0.9/rules/intro.html#rule-options\">Rule options</a> in the Suricata documentation.</p>"
+          "documentation":"<p>The keyword for the Suricata compatible rule option. You must include a <code>sid</code> (signature ID), and can optionally include other keywords. For information about Suricata compatible keywords, see <a href=\"https://suricata.readthedocs.io/en/suricata-7.0.3/rules/intro.html#rule-options\">Rule options</a> in the Suricata documentation.</p>"
         },
         "Settings":{
           "shape":"Settings",
-          "documentation":"<p>The settings of the Suricata compatible rule option. Rule options have zero or more setting values, and the number of possible and required settings depends on the <code>Keyword</code>. For more information about the settings for specific options, see <a href=\"https://suricata.readthedocs.io/en/suricata-6.0.9/rules/intro.html#rule-options\">Rule options</a>.</p>"
+          "documentation":"<p>The settings of the Suricata compatible rule option. Rule options have zero or more setting values, and the number of possible and required settings depends on the <code>Keyword</code>. For more information about the settings for specific options, see <a href=\"https://suricata.readthedocs.io/en/suricata-7.0.3/rules/intro.html#rule-options\">Rule options</a>.</p>"
         }
       },
       "documentation":"<p>Additional settings for a stateful rule. This is part of the <a>StatefulRule</a> configuration.</p>"
@@ -2650,6 +3998,28 @@
         "STRICT_ORDER"
       ]
     },
+    "RuleSummaries":{
+      "type":"list",
+      "member":{"shape":"RuleSummary"}
+    },
+    "RuleSummary":{
+      "type":"structure",
+      "members":{
+        "SID":{
+          "shape":"CollectionMember_String",
+          "documentation":"<p>The unique identifier (Signature ID) of the Suricata rule.</p>"
+        },
+        "Msg":{
+          "shape":"CollectionMember_String",
+          "documentation":"<p>The contents taken from the rule's msg field.</p>"
+        },
+        "Metadata":{
+          "shape":"CollectionMember_String",
+          "documentation":"<p>The contents of the rule's metadata.</p>"
+        }
+      },
+      "documentation":"<p>A complex type containing details about a Suricata rule. Contains:</p> <ul> <li> <p> <code>SID</code> </p> </li> <li> <p> <code>Msg</code> </p> </li> <li> <p> <code>Metadata</code> </p> </li> </ul> <p>Summaries are available for rule groups you manage and for active threat defense Amazon Web Services managed rule groups.</p>"
+    },
     "RuleTargets":{
       "type":"list",
       "member":{"shape":"CollectionMember_String"}
@@ -2672,7 +4042,7 @@
           "documentation":"<p>A list of port ranges. </p>"
         }
       },
-      "documentation":"<p>Settings that are available for use in the rules in the <a>RuleGroup</a> where this is defined. </p>"
+      "documentation":"<p>Settings that are available for use in the rules in the <a>RuleGroup</a> where this is defined. See <a>CreateRuleGroup</a> or <a>UpdateRuleGroup</a> for usage.</p>"
     },
     "RulesSource":{
       "type":"structure",
@@ -2687,7 +4057,7 @@
         },
         "StatefulRules":{
           "shape":"StatefulRules",
-          "documentation":"<p>An array of individual stateful rules inspection criteria to be used together in a stateful rule group. Use this option to specify simple Suricata rules with protocol, source and destination, ports, direction, and rule options. For information about the Suricata <code>Rules</code> format, see <a href=\"https://suricata.readthedocs.io/en/suricata-6.0.9/rules/intro.html\">Rules Format</a>. </p>"
+          "documentation":"<p>An array of individual stateful rules inspection criteria to be used together in a stateful rule group. Use this option to specify simple Suricata rules with protocol, source and destination, ports, direction, and rule options. For information about the Suricata <code>Rules</code> format, see <a href=\"https://suricata.readthedocs.io/en/suricata-7.0.3/rules/intro.html\">Rules Format</a>. </p>"
         },
         "StatelessRulesAndCustomActions":{
           "shape":"StatelessRulesAndCustomActions",
@@ -2714,7 +4084,7 @@
         },
         "GeneratedRulesType":{
           "shape":"GeneratedRulesType",
-          "documentation":"<p>Whether you want to allow or deny access to the domains in your target list.</p>"
+          "documentation":"<p>Whether you want to apply allow, reject, alert, or drop behavior to the domains in your target list.</p> <note> <p>When logging is enabled and you choose Alert, traffic that matches the domain specifications generates an alert in the firewall's logs. Then, traffic either passes, is rejected, or drops based on other rules in the firewall policy.</p> </note>"
         }
       },
       "documentation":"<p>Stateful inspection criteria for a domain list rule group. </p> <p>For HTTPS traffic, domain filtering is SNI-based. It uses the server name indicator extension of the TLS handshake.</p> <p>By default, Network Firewall domain list inspection only includes traffic coming from the VPC where you deploy the firewall. To inspect traffic from IP addresses outside of the deployment VPC, you set the <code>HOME_NET</code> rule variable to include the CIDR range of the deployment VPC plus the other CIDR ranges. For more information, see <a>RuleVariables</a> in this guide and <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/stateful-rule-groups-domain-names.html\">Stateful domain list rule groups in Network Firewall</a> in the <i>Network Firewall Developer Guide</i>.</p>"
@@ -2747,7 +4117,7 @@
         },
         "CertificateAuthorityArn":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the imported certificate authority (CA) certificate within Certificate Manager (ACM) to use for outbound SSL/TLS inspection.</p> <p>The following limitations apply:</p> <ul> <li> <p>You can use CA certificates that you imported into ACM, but you can't generate CA certificates with ACM.</p> </li> <li> <p>You can't use certificates issued by Private Certificate Authority.</p> </li> </ul> <p>For more information about configuring certificates for outbound inspection, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/tls-inspection-certificate-requirements.html\">Using SSL/TLS certificates with certificates with TLS inspection configurations</a> in the <i>Network Firewall Developer Guide</i>. </p> <p>For information about working with certificates in ACM, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html\">Importing certificates</a> in the <i>Certificate Manager User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the imported certificate authority (CA) certificate within Certificate Manager (ACM) to use for outbound SSL/TLS inspection.</p> <p>The following limitations apply:</p> <ul> <li> <p>You can use CA certificates that you imported into ACM, but you can't generate CA certificates with ACM.</p> </li> <li> <p>You can't use certificates issued by Private Certificate Authority.</p> </li> </ul> <p>For more information about configuring certificates for outbound inspection, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/tls-inspection-certificate-requirements.html\">Using SSL/TLS certificates with TLS inspection configurations</a> in the <i>Network Firewall Developer Guide</i>. </p> <p>For information about working with certificates in ACM, see <a href=\"https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html\">Importing certificates</a> in the <i>Certificate Manager User Guide</i>.</p>"
         },
         "CheckCertificateRevocationStatus":{
           "shape":"CheckCertificateRevocationStatusActions",
@@ -2781,7 +4151,7 @@
         },
         "Protocols":{
           "shape":"ProtocolNumbers",
-          "documentation":"<p>The protocols to decrypt for inspection, specified using each protocol's assigned internet protocol number (IANA). Network Firewall currently supports only TCP.</p>"
+          "documentation":"<p>The protocols to inspect for, specified using the assigned internet protocol number (IANA) for each protocol. If not specified, this matches with any protocol.</p> <p>Network Firewall currently supports only TCP.</p>"
         }
       },
       "documentation":"<p>Settings that define the Secure Sockets Layer/Transport Layer Security (SSL/TLS) traffic that Network Firewall should decrypt for inspection by the stateful rule engine.</p>"
@@ -2824,6 +4194,135 @@
       },
       "documentation":"<p>High-level information about the managed rule group that your own rule group is copied from. You can use the the metadata to track version updates made to the originating rule group. You can retrieve all objects for a rule group by calling <a href=\"https://docs.aws.amazon.com/network-firewall/latest/APIReference/API_DescribeRuleGroup.html\">DescribeRuleGroup</a>.</p>"
     },
+    "StartAnalysisReportRequest":{
+      "type":"structure",
+      "required":["AnalysisType"],
+      "members":{
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "AnalysisType":{
+          "shape":"EnabledAnalysisType",
+          "documentation":"<p>The type of traffic that will be used to generate a report. </p>"
+        }
+      }
+    },
+    "StartAnalysisReportResponse":{
+      "type":"structure",
+      "required":["AnalysisReportId"],
+      "members":{
+        "AnalysisReportId":{
+          "shape":"AnalysisReportId",
+          "documentation":"<p>The unique ID of the query that ran when you requested an analysis report. </p>"
+        }
+      }
+    },
+    "StartFlowCaptureRequest":{
+      "type":"structure",
+      "required":[
+        "FirewallArn",
+        "FlowFilters"
+      ],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "MinimumFlowAgeInSeconds":{
+          "shape":"Age",
+          "documentation":"<p>The reqested <code>FlowOperation</code> ignores flows with an age (in seconds) lower than <code>MinimumFlowAgeInSeconds</code>. You provide this for start commands.</p> <note> <p>We recommend setting this value to at least 1 minute (60 seconds) to reduce chance of capturing flows that are not yet established.</p> </note>"
+        },
+        "FlowFilters":{
+          "shape":"FlowFilters",
+          "documentation":"<p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        }
+      }
+    },
+    "StartFlowCaptureResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "FlowOperationStatus":{
+          "shape":"FlowOperationStatus",
+          "documentation":"<p>Returns the status of the flow operation. This string is returned in the responses to start, list, and describe commands.</p> <p>If the status is <code>COMPLETED_WITH_ERRORS</code>, results may be returned with any number of <code>Flows</code> missing from the response. If the status is <code>FAILED</code>, <code>Flows</code> returned will be empty.</p>"
+        }
+      }
+    },
+    "StartFlowFlushRequest":{
+      "type":"structure",
+      "required":[
+        "FirewallArn",
+        "FlowFilters"
+      ],
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The ID of the Availability Zone where the firewall is located. For example, <code>us-east-2a</code>.</p> <p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>A unique identifier for the primary endpoint associated with a firewall.</p>"
+        },
+        "MinimumFlowAgeInSeconds":{
+          "shape":"Age",
+          "documentation":"<p>The reqested <code>FlowOperation</code> ignores flows with an age (in seconds) lower than <code>MinimumFlowAgeInSeconds</code>. You provide this for start commands.</p>"
+        },
+        "FlowFilters":{
+          "shape":"FlowFilters",
+          "documentation":"<p>Defines the scope a flow operation. You can use up to 20 filters to configure a single flow operation.</p>"
+        }
+      }
+    },
+    "StartFlowFlushResponse":{
+      "type":"structure",
+      "members":{
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FlowOperationId":{
+          "shape":"FlowOperationId",
+          "documentation":"<p>A unique identifier for the flow operation. This ID is returned in the responses to start and list commands. You provide to describe commands.</p>"
+        },
+        "FlowOperationStatus":{
+          "shape":"FlowOperationStatus",
+          "documentation":"<p>Returns the status of the flow operation. This string is returned in the responses to start, list, and describe commands.</p> <p>If the status is <code>COMPLETED_WITH_ERRORS</code>, results may be returned with any number of <code>Flows</code> missing from the response. If the status is <code>FAILED</code>, <code>Flows</code> returned will be empty.</p>"
+        }
+      }
+    },
+    "StartTime":{"type":"timestamp"},
     "StatefulAction":{
       "type":"string",
       "enum":[
@@ -2842,7 +4341,7 @@
       "members":{
         "RuleOrder":{
           "shape":"RuleOrder",
-          "documentation":"<p>Indicates how to manage the order of stateful rule evaluation for the policy. <code>STRICT_ORDER</code> is the default and recommended option. With <code>STRICT_ORDER</code>, provide your rules in the order that you want them to be evaluated. You can then choose one or more default actions for packets that don't match any rules. Choose <code>STRICT_ORDER</code> to have the stateful rules engine determine the evaluation order of your rules. The default action for this rule order is <code>PASS</code>, followed by <code>DROP</code>, <code>REJECT</code>, and <code>ALERT</code> actions. Stateful rules are provided to the rule engine as Suricata compatible strings, and Suricata evaluates them based on your settings. For more information, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/suricata-rule-evaluation-order.html\">Evaluation order for stateful rules</a> in the <i>Network Firewall Developer Guide</i>. </p>"
+          "documentation":"<p>Indicates how to manage the order of stateful rule evaluation for the policy. <code>STRICT_ORDER</code> is the recommended option, but <code>DEFAULT_ACTION_ORDER</code> is the default option. With <code>STRICT_ORDER</code>, provide your rules in the order that you want them to be evaluated. You can then choose one or more default actions for packets that don't match any rules. Choose <code>STRICT_ORDER</code> to have the stateful rules engine determine the evaluation order of your rules. The default action for this rule order is <code>PASS</code>, followed by <code>DROP</code>, <code>REJECT</code>, and <code>ALERT</code> actions. Stateful rules are provided to the rule engine as Suricata compatible strings, and Suricata evaluates them based on your settings. For more information, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/suricata-rule-evaluation-order.html\">Evaluation order for stateful rules</a> in the <i>Network Firewall Developer Guide</i>. </p>"
         },
         "StreamExceptionPolicy":{
           "shape":"StreamExceptionPolicy",
@@ -2876,7 +4375,7 @@
           "documentation":"<p>Additional options for the rule. These are the Suricata <code>RuleOptions</code> settings.</p>"
         }
       },
-      "documentation":"<p>A single Suricata rules specification, for use in a stateful rule group. Use this option to specify a simple Suricata rule with protocol, source and destination, ports, direction, and rule options. For information about the Suricata <code>Rules</code> format, see <a href=\"https://suricata.readthedocs.io/en/suricata-6.0.9/rules/intro.html\">Rules Format</a>. </p>"
+      "documentation":"<p>A single Suricata rules specification, for use in a stateful rule group. Use this option to specify a simple Suricata rule with protocol, source and destination, ports, direction, and rule options. For information about the Suricata <code>Rules</code> format, see <a href=\"https://suricata.readthedocs.io/en/suricata-7.0.3/rules/intro.html\">Rules Format</a>. </p>"
     },
     "StatefulRuleDirection":{
       "type":"string",
@@ -2911,6 +4410,10 @@
         "Override":{
           "shape":"StatefulRuleGroupOverride",
           "documentation":"<p>The action that allows the policy owner to override the behavior of the rule group within a policy.</p>"
+        },
+        "DeepThreatInspection":{
+          "shape":"DeepThreatInspection",
+          "documentation":"<p>Network Firewall plans to augment the active threat defense managed rule group with an additional deep threat inspection capability. When this capability is released, Amazon Web Services will analyze service logs of network traffic processed by these rule groups to identify threat indicators across customers. Amazon Web Services will use these threat indicators to improve the active threat defense managed rule groups and protect the security of Amazon Web Services customers and services.</p> <note> <p>Customers can opt-out of deep threat inspection at any time through the Network Firewall console or API. When customers opt out, Network Firewall will not use the network traffic processed by those customers' active threat defense rule groups for rule group improvement.</p> </note>"
         }
       },
       "documentation":"<p>Identifier for a single stateful rule group, used in a firewall policy to refer to a rule group. </p>"
@@ -2950,7 +4453,9 @@
         "IKEV2",
         "TFTP",
         "NTP",
-        "DHCP"
+        "DHCP",
+        "HTTP2",
+        "QUIC"
       ]
     },
     "StatefulRules":{
@@ -3020,6 +4525,7 @@
       },
       "documentation":"<p>Stateless inspection criteria. Each stateless rule group uses exactly one of these data types to define its stateless rules. </p>"
     },
+    "Status":{"type":"string"},
     "StatusMessage":{"type":"string"},
     "StatusReason":{
       "type":"string",
@@ -3048,25 +4554,62 @@
           "documentation":"<p>The subnet's IP address type. You can't change the IP address type after you create the subnet.</p>"
         }
       },
-      "documentation":"<p>The ID for a subnet that you want to associate with the firewall. This is used with <a>CreateFirewall</a> and <a>AssociateSubnets</a>. Network Firewall creates an instance of the associated firewall in each subnet that you specify, to filter traffic in the subnet's Availability Zone.</p>"
+      "documentation":"<p>The ID for a subnet that's used in an association with a firewall. This is used in <a>CreateFirewall</a>, <a>AssociateSubnets</a>, and <a>CreateVpcEndpointAssociation</a>. Network Firewall creates an instance of the associated firewall in each subnet that you specify, to filter traffic in the subnet's Availability Zone.</p>"
     },
     "SubnetMappings":{
       "type":"list",
       "member":{"shape":"SubnetMapping"}
     },
+    "Summary":{
+      "type":"structure",
+      "members":{
+        "RuleSummaries":{
+          "shape":"RuleSummaries",
+          "documentation":"<p>An array of <a>RuleSummary</a> objects containing individual rule details that had been configured by the rulegroup's SummaryConfiguration.</p>"
+        }
+      },
+      "documentation":"<p>A complex type containing summaries of security protections provided by a rule group.</p> <p>Network Firewall extracts this information from selected fields in the rule group's Suricata rules, based on your <a>SummaryConfiguration</a> settings.</p>"
+    },
+    "SummaryConfiguration":{
+      "type":"structure",
+      "members":{
+        "RuleOptions":{
+          "shape":"SummaryRuleOptions",
+          "documentation":"<p>Specifies the selected rule options returned by <a>DescribeRuleGroupSummary</a>.</p>"
+        }
+      },
+      "documentation":"<p>A complex type that specifies which Suricata rule metadata fields to use when displaying threat information. Contains:</p> <ul> <li> <p> <code>RuleOptions</code> - The Suricata rule options fields to extract and display</p> </li> </ul> <p>These settings affect how threat information appears in both the console and API responses. Summaries are available for rule groups you manage and for active threat defense Amazon Web Services managed rule groups.</p>"
+    },
+    "SummaryRuleOption":{
+      "type":"string",
+      "enum":[
+        "SID",
+        "MSG",
+        "METADATA"
+      ]
+    },
+    "SummaryRuleOptions":{
+      "type":"list",
+      "member":{"shape":"SummaryRuleOption"}
+    },
+    "SupportedAvailabilityZones":{
+      "type":"map",
+      "key":{"shape":"AvailabilityZone"},
+      "value":{"shape":"AvailabilityZoneMetadata"}
+    },
     "SyncState":{
       "type":"structure",
       "members":{
         "Attachment":{
           "shape":"Attachment",
-          "documentation":"<p>The attachment status of the firewall's association with a single VPC subnet. For each configured subnet, Network Firewall creates the attachment by instantiating the firewall endpoint in the subnet so that it's ready to take traffic. This is part of the <a>FirewallStatus</a>.</p>"
+          "documentation":"<p>The configuration and status for a single firewall subnet. For each configured subnet, Network Firewall creates the attachment by instantiating the firewall endpoint in the subnet so that it's ready to take traffic. </p>"
         },
         "Config":{
           "shape":"SyncStateConfig",
-          "documentation":"<p>The configuration status of the firewall endpoint in a single VPC subnet. Network Firewall provides each endpoint with the rules that are configured in the firewall policy. Each time you add a subnet or modify the associated firewall policy, Network Firewall synchronizes the rules in the endpoint, so it can properly filter network traffic. This is part of the <a>FirewallStatus</a>.</p>"
+          "documentation":"<p>The configuration status of the firewall endpoint in a single VPC subnet. Network Firewall provides each endpoint with the rules that are configured in the firewall policy. Each time you add a subnet or modify the associated firewall policy, Network Firewall synchronizes the rules in the endpoint, so it can properly filter network traffic. </p>"
         }
       },
-      "documentation":"<p>The status of the firewall endpoint and firewall policy configuration for a single VPC subnet. </p> <p>For each VPC subnet that you associate with a firewall, Network Firewall does the following: </p> <ul> <li> <p>Instantiates a firewall endpoint in the subnet, ready to take traffic.</p> </li> <li> <p>Configures the endpoint with the current firewall policy settings, to provide the filtering behavior for the endpoint.</p> </li> </ul> <p>When you update a firewall, for example to add a subnet association or change a rule group in the firewall policy, the affected sync states reflect out-of-sync or not ready status until the changes are complete. </p>"
+      "documentation":"<p>The status of the firewall endpoint and firewall policy configuration for a single VPC subnet. This is part of the <a>FirewallStatus</a>. </p> <p>For each VPC subnet that you associate with a firewall, Network Firewall does the following: </p> <ul> <li> <p>Instantiates a firewall endpoint in the subnet, ready to take traffic.</p> </li> <li> <p>Configures the endpoint with the current firewall policy settings, to provide the filtering behavior for the endpoint.</p> </li> </ul> <p>When you update a firewall, for example to add a subnet association or change a rule group in the firewall policy, the affected sync states reflect out-of-sync or not ready status until the changes are complete. </p>"
     },
     "SyncStateConfig":{
       "type":"map",
@@ -3245,8 +4788,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3301,6 +4843,61 @@
       },
       "documentation":"<p>Contains metadata about an Certificate Manager certificate.</p>"
     },
+    "TransitGatewayAttachmentId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"^tgw-attach-[0-9a-z]+$"
+    },
+    "TransitGatewayAttachmentStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "DELETING",
+        "DELETED",
+        "FAILED",
+        "ERROR",
+        "READY",
+        "PENDING_ACCEPTANCE",
+        "REJECTING",
+        "REJECTED"
+      ]
+    },
+    "TransitGatewayAttachmentSyncState":{
+      "type":"structure",
+      "members":{
+        "AttachmentId":{
+          "shape":"AttachmentId",
+          "documentation":"<p>The unique identifier of the transit gateway attachment.</p>"
+        },
+        "TransitGatewayAttachmentStatus":{
+          "shape":"TransitGatewayAttachmentStatus",
+          "documentation":"<p>The current status of the transit gateway attachment.</p> <p>Valid values are:</p> <ul> <li> <p> <code>CREATING</code> - The attachment is being created</p> </li> <li> <p> <code>DELETING</code> - The attachment is being deleted</p> </li> <li> <p> <code>DELETED</code> - The attachment has been deleted</p> </li> <li> <p> <code>FAILED</code> - The attachment creation has failed and cannot be recovered</p> </li> <li> <p> <code>ERROR</code> - The attachment is in an error state that might be recoverable</p> </li> <li> <p> <code>READY</code> - The attachment is active and processing traffic</p> </li> <li> <p> <code>PENDING_ACCEPTANCE</code> - The attachment is waiting to be accepted</p> </li> <li> <p> <code>REJECTING</code> - The attachment is in the process of being rejected</p> </li> <li> <p> <code>REJECTED</code> - The attachment has been rejected</p> </li> </ul>"
+        },
+        "StatusMessage":{
+          "shape":"TransitGatewayAttachmentSyncStateMessage",
+          "documentation":"<p>A message providing additional information about the current status, particularly useful when the transit gateway attachment is in a non-<code>READY</code> state.</p> <p>Valid values are:</p> <ul> <li> <p> <code>CREATING</code> - The attachment is being created</p> </li> <li> <p> <code>DELETING</code> - The attachment is being deleted</p> </li> <li> <p> <code>DELETED</code> - The attachment has been deleted</p> </li> <li> <p> <code>FAILED</code> - The attachment creation has failed and cannot be recovered</p> </li> <li> <p> <code>ERROR</code> - The attachment is in an error state that might be recoverable</p> </li> <li> <p> <code>READY</code> - The attachment is active and processing traffic</p> </li> <li> <p> <code>PENDING_ACCEPTANCE</code> - The attachment is waiting to be accepted</p> </li> <li> <p> <code>REJECTING</code> - The attachment is in the process of being rejected</p> </li> <li> <p> <code>REJECTED</code> - The attachment has been rejected</p> </li> </ul> <p>For information about troubleshooting endpoint failures, see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-troubleshooting-endpoint-failures.html\">Troubleshooting firewall endpoint failures</a> in the <i>Network Firewall Developer Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the synchronization state of a transit gateway attachment, including its current status and any error messages. Network Firewall uses this to track the state of your transit gateway configuration changes.</p>"
+    },
+    "TransitGatewayAttachmentSyncStateMessage":{"type":"string"},
+    "TransitGatewayId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"^tgw-[0-9a-z]+$"
+    },
+    "UniqueSources":{
+      "type":"structure",
+      "members":{
+        "Count":{
+          "shape":"Count",
+          "documentation":"<p>The number of unique source IP addresses that connected to a domain.</p>"
+        }
+      },
+      "documentation":"<p>A unique source IP address that connected to a domain.</p>"
+    },
     "UnsupportedOperationException":{
       "type":"structure",
       "members":{
@@ -3328,7 +4925,91 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateAvailabilityZoneChangeProtectionRequest":{
+      "type":"structure",
+      "required":["AvailabilityZoneChangeProtection"],
       "members":{
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "AvailabilityZoneChangeProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>A setting indicating whether the firewall is protected against changes to the subnet associations. Use this setting to protect against accidentally modifying the subnet associations for a firewall that is in use. When you create a firewall, the operation initializes this setting to <code>TRUE</code>.</p>"
+        }
+      }
+    },
+    "UpdateAvailabilityZoneChangeProtectionResponse":{
+      "type":"structure",
+      "members":{
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p>"
+        },
+        "AvailabilityZoneChangeProtection":{
+          "shape":"Boolean",
+          "documentation":"<p>A setting indicating whether the firewall is protected against changes to the subnet associations. Use this setting to protect against accidentally modifying the subnet associations for a firewall that is in use. When you create a firewall, the operation initializes this setting to <code>TRUE</code>.</p>"
+        }
+      }
+    },
+    "UpdateFirewallAnalysisSettingsRequest":{
+      "type":"structure",
+      "members":{
+        "EnabledAnalysisTypes":{
+          "shape":"EnabledAnalysisTypes",
+          "documentation":"<p>An optional setting indicating the specific traffic analysis types to enable on the firewall. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        }
+      }
+    },
+    "UpdateFirewallAnalysisSettingsResponse":{
+      "type":"structure",
+      "members":{
+        "EnabledAnalysisTypes":{
+          "shape":"EnabledAnalysisTypes",
+          "documentation":"<p>An optional setting indicating the specific traffic analysis types to enable on the firewall. </p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "FirewallName":{
+          "shape":"ResourceName",
+          "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p> <p>You must specify the ARN or the name, and you can specify both. </p>"
+        },
+        "UpdateToken":{
+          "shape":"UpdateToken",
+          "documentation":"<p>An optional token that you can use for optimistic locking. Network Firewall returns a token to your requests that access the firewall. The token marks the state of the firewall resource at the time of the request. </p> <p>To make an unconditional change to the firewall, omit the token in your update request. Without the token, Network Firewall performs your updates regardless of whether the firewall has changed since you last retrieved it.</p> <p>To make a conditional change to the firewall, provide the token in your update request. Network Firewall uses the token to ensure that the firewall hasn't changed since you last retrieved it. If it has changed, the operation fails with an <code>InvalidTokenException</code>. If this happens, retrieve the firewall again to get a current copy of it with a new token. Reapply your changes as needed, then try the operation again using the new token. </p>"
+        }
       }
     },
     "UpdateFirewallDeleteProtectionRequest":{
@@ -3563,6 +5244,10 @@
         "LoggingConfiguration":{
           "shape":"LoggingConfiguration",
           "documentation":"<p>Defines how Network Firewall performs logging for a firewall. If you omit this setting, Network Firewall disables logging for the firewall.</p>"
+        },
+        "EnableMonitoringDashboard":{
+          "shape":"EnableMonitoringDashboard",
+          "documentation":"<p>A boolean that lets you enable or disable the detailed firewall monitoring dashboard on the firewall. </p> <p>The monitoring dashboard provides comprehensive visibility into your firewall's flow logs and alert logs. After you enable detailed monitoring, you can access these dashboards directly from the <b>Monitoring</b> page of the Network Firewall console.</p> <p> Specify <code>TRUE</code> to enable the the detailed monitoring dashboard on the firewall. Specify <code>FALSE</code> to disable the the detailed monitoring dashboard on the firewall. </p>"
         }
       }
     },
@@ -3577,7 +5262,11 @@
           "shape":"ResourceName",
           "documentation":"<p>The descriptive name of the firewall. You can't change the name of a firewall after you create it.</p>"
         },
-        "LoggingConfiguration":{"shape":"LoggingConfiguration"}
+        "LoggingConfiguration":{"shape":"LoggingConfiguration"},
+        "EnableMonitoringDashboard":{
+          "shape":"EnableMonitoringDashboard",
+          "documentation":"<p>A boolean that reflects whether or not the firewall monitoring dashboard is enabled on a firewall.</p> <p> Returns <code>TRUE</code> when the firewall monitoring dashboard is enabled on the firewall. Returns <code>FALSE</code> when the firewall monitoring dashboard is not enabled on the firewall. </p>"
+        }
       }
     },
     "UpdateRuleGroupRequest":{
@@ -3627,6 +5316,10 @@
         "AnalyzeRuleGroup":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether you want Network Firewall to analyze the stateless rules in the rule group for rule behavior such as asymmetric routing. If set to <code>TRUE</code>, Network Firewall runs the analysis and then updates the rule group for you. To run the stateless rule group analyzer without updating the rule group, set <code>DryRun</code> to <code>TRUE</code>. </p>"
+        },
+        "SummaryConfiguration":{
+          "shape":"SummaryConfiguration",
+          "documentation":"<p>Updates the selected summary configuration for a rule group.</p> <p>Changes affect subsequent responses from <a>DescribeRuleGroupSummary</a>.</p>"
         }
       }
     },
@@ -3755,6 +5448,78 @@
       "type":"list",
       "member":{"shape":"VariableDefinition"}
     },
+    "VpcEndpointAssociation":{
+      "type":"structure",
+      "required":[
+        "VpcEndpointAssociationArn",
+        "FirewallArn",
+        "VpcId",
+        "SubnetMapping"
+      ],
+      "members":{
+        "VpcEndpointAssociationId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VPC endpoint association. </p>"
+        },
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        },
+        "FirewallArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the firewall.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the VPC for the endpoint association. </p>"
+        },
+        "SubnetMapping":{"shape":"SubnetMapping"},
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>A description of the VPC endpoint association. </p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The key:value pairs to associate with the resource.</p>"
+        }
+      },
+      "documentation":"<p>A VPC endpoint association defines a single subnet to use for a firewall endpoint for a <code>Firewall</code>. You can define VPC endpoint associations only in the Availability Zones that already have a subnet mapping defined in the <code>Firewall</code> resource. </p> <note> <p>You can retrieve the list of Availability Zones that are available for use by calling <code>DescribeFirewallMetadata</code>.</p> </note> <p>To manage firewall endpoints, first, in the <code>Firewall</code> specification, you specify a single VPC and one subnet for each of the Availability Zones where you want to use the firewall. Then you can define additional endpoints as VPC endpoint associations. </p> <p>You can use VPC endpoint associations to expand the protections of the firewall as follows: </p> <ul> <li> <p> <b>Protect multiple VPCs with a single firewall</b> - You can use the firewall to protect other VPCs, either in your account or in accounts where the firewall is shared. You can only specify Availability Zones that already have a firewall endpoint defined in the <code>Firewall</code> subnet mappings.</p> </li> <li> <p> <b>Define multiple firewall endpoints for a VPC in an Availability Zone</b> - You can create additional firewall endpoints for the VPC that you have defined in the firewall, in any Availability Zone that already has an endpoint defined in the <code>Firewall</code> subnet mappings. You can create multiple VPC endpoint associations for any other VPC where you use the firewall.</p> </li> </ul> <p>You can use Resource Access Manager to share a <code>Firewall</code> that you own with other accounts, which gives them the ability to use the firewall to create VPC endpoint associations. For information about sharing a firewall, see <code>PutResourcePolicy</code> in this guide and see <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/sharing.html\">Sharing Network Firewall resources</a> in the <i>Network Firewall Developer Guide</i>.</p> <p>The status of the VPC endpoint association, which indicates whether it's ready to filter network traffic, is provided in the corresponding <a>VpcEndpointAssociationStatus</a>. You can retrieve both the association and its status by calling <a>DescribeVpcEndpointAssociation</a>.</p>"
+    },
+    "VpcEndpointAssociationMetadata":{
+      "type":"structure",
+      "members":{
+        "VpcEndpointAssociationArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of a VPC endpoint association.</p>"
+        }
+      },
+      "documentation":"<p>High-level information about a VPC endpoint association, returned by <code>ListVpcEndpointAssociations</code>. You can use the information provided in the metadata to retrieve and manage a VPC endpoint association.</p>"
+    },
+    "VpcEndpointAssociationStatus":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "Status":{
+          "shape":"FirewallStatusValue",
+          "documentation":"<p>The readiness of the configured firewall endpoint to handle network traffic. </p>"
+        },
+        "AssociationSyncState":{
+          "shape":"AssociationSyncState",
+          "documentation":"<p>The list of the Availability Zone sync states for all subnets that are defined by the firewall. </p>"
+        }
+      },
+      "documentation":"<p>Detailed information about the current status of a <a>VpcEndpointAssociation</a>. You can retrieve this by calling <a>DescribeVpcEndpointAssociation</a> and providing the VPC endpoint association ARN.</p>"
+    },
+    "VpcEndpointAssociations":{
+      "type":"list",
+      "member":{"shape":"VpcEndpointAssociationMetadata"}
+    },
+    "VpcEndpointId":{
+      "type":"string",
+      "max":256,
+      "min":5,
+      "pattern":"^vpce-[a-zA-Z0-9]*$"
+    },
     "VpcId":{
       "type":"string",
       "max":128,
@@ -3766,5 +5531,5 @@
       "member":{"shape":"VpcId"}
     }
   },
-  "documentation":"<p>This is the API Reference for Network Firewall. This guide is for developers who need detailed information about the Network Firewall API actions, data types, and errors. </p> <p>The REST API requires you to handle connection details, such as calculating signatures, handling request retries, and error handling. For general information about using the Amazon Web Services REST APIs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-apis.html\">Amazon Web Services APIs</a>. </p> <p>To view the complete list of Amazon Web Services Regions where Network Firewall is available, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/network-firewall.html\">Service endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>To access Network Firewall using the IPv4 REST API endpoint: <code>https://network-firewall.&lt;region&gt;.amazonaws.com </code> </p> <p>To access Network Firewall using the Dualstack (IPv4 and IPv6) REST API endpoint: <code>https://network-firewall.&lt;region&gt;.aws.api </code> </p> <p>Alternatively, you can use one of the Amazon Web Services SDKs to access an API that's tailored to the programming language or platform that you're using. For more information, see <a href=\"http://aws.amazon.com/tools/#SDKs\">Amazon Web Services SDKs</a>.</p> <p>For descriptions of Network Firewall features, including and step-by-step instructions on how to use them through the Network Firewall console, see the <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/\">Network Firewall Developer Guide</a>.</p> <p>Network Firewall is a stateful, managed, network firewall and intrusion detection and prevention service for Amazon Virtual Private Cloud (Amazon VPC). With Network Firewall, you can filter traffic at the perimeter of your VPC. This includes filtering traffic going to and coming from an internet gateway, NAT gateway, or over VPN or Direct Connect. Network Firewall uses rules that are compatible with Suricata, a free, open source network analysis and threat detection engine. </p> <p>You can use Network Firewall to monitor and protect your VPC traffic in a number of ways. The following are just a few examples: </p> <ul> <li> <p>Allow domains or IP addresses for known Amazon Web Services service endpoints, such as Amazon S3, and block all other forms of traffic.</p> </li> <li> <p>Use custom lists of known bad domains to limit the types of domain names that your applications can access.</p> </li> <li> <p>Perform deep packet inspection on traffic entering or leaving your VPC.</p> </li> <li> <p>Use stateful protocol detection to filter protocols like HTTPS, regardless of the port used.</p> </li> </ul> <p>To enable Network Firewall for your VPCs, you perform steps in both Amazon VPC and in Network Firewall. For information about using Amazon VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/\">Amazon VPC User Guide</a>.</p> <p>To start using Network Firewall, do the following: </p> <ol> <li> <p>(Optional) If you don't already have a VPC that you want to protect, create it in Amazon VPC. </p> </li> <li> <p>In Amazon VPC, in each Availability Zone where you want to have a firewall endpoint, create a subnet for the sole use of Network Firewall. </p> </li> <li> <p>In Network Firewall, create stateless and stateful rule groups, to define the components of the network traffic filtering behavior that you want your firewall to have. </p> </li> <li> <p>In Network Firewall, create a firewall policy that uses your rule groups and specifies additional default traffic filtering behavior. </p> </li> <li> <p>In Network Firewall, create a firewall and specify your new firewall policy and VPC subnets. Network Firewall creates a firewall endpoint in each subnet that you specify, with the behavior that's defined in the firewall policy.</p> </li> <li> <p>In Amazon VPC, use ingress routing enhancements to route traffic through the new firewall endpoints.</p> </li> </ol>"
+  "documentation":"<p>This is the API Reference for Network Firewall. This guide is for developers who need detailed information about the Network Firewall API actions, data types, and errors. </p> <p>The REST API requires you to handle connection details, such as calculating signatures, handling request retries, and error handling. For general information about using the Amazon Web Services REST APIs, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-apis.html\">Amazon Web Services APIs</a>. </p> <p>To view the complete list of Amazon Web Services Regions where Network Firewall is available, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/network-firewall.html\">Service endpoints and quotas</a> in the <i>Amazon Web Services General Reference</i>. </p> <p>To access Network Firewall using the IPv4 REST API endpoint: <code>https://network-firewall.&lt;region&gt;.amazonaws.com </code> </p> <p>To access Network Firewall using the Dualstack (IPv4 and IPv6) REST API endpoint: <code>https://network-firewall.&lt;region&gt;.aws.api </code> </p> <p>Alternatively, you can use one of the Amazon Web Services SDKs to access an API that's tailored to the programming language or platform that you're using. For more information, see <a href=\"http://aws.amazon.com/tools/#SDKs\">Amazon Web Services SDKs</a>.</p> <p>For descriptions of Network Firewall features, including and step-by-step instructions on how to use them through the Network Firewall console, see the <a href=\"https://docs.aws.amazon.com/network-firewall/latest/developerguide/\">Network Firewall Developer Guide</a>.</p> <p>Network Firewall is a stateful, managed, network firewall and intrusion detection and prevention service for Amazon Virtual Private Cloud (Amazon VPC). With Network Firewall, you can filter traffic at the perimeter of your VPC. This includes filtering traffic going to and coming from an internet gateway, NAT gateway, or over VPN or Direct Connect. Network Firewall uses rules that are compatible with Suricata, a free, open source network analysis and threat detection engine. Network Firewall supports Suricata version 7.0.3. For information about Suricata, see the <a href=\"https://suricata.io/\">Suricata website</a> and the <a href=\"https://suricata.readthedocs.io/en/suricata-7.0.3/\">Suricata User Guide</a>. </p> <p>You can use Network Firewall to monitor and protect your VPC traffic in a number of ways. The following are just a few examples: </p> <ul> <li> <p>Allow domains or IP addresses for known Amazon Web Services service endpoints, such as Amazon S3, and block all other forms of traffic.</p> </li> <li> <p>Use custom lists of known bad domains to limit the types of domain names that your applications can access.</p> </li> <li> <p>Perform deep packet inspection on traffic entering or leaving your VPC.</p> </li> <li> <p>Use stateful protocol detection to filter protocols like HTTPS, regardless of the port used.</p> </li> </ul> <p>To enable Network Firewall for your VPCs, you perform steps in both Amazon VPC and in Network Firewall. For information about using Amazon VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/\">Amazon VPC User Guide</a>.</p> <p>To start using Network Firewall, do the following: </p> <ol> <li> <p>(Optional) If you don't already have a VPC that you want to protect, create it in Amazon VPC. </p> </li> <li> <p>In Amazon VPC, in each Availability Zone where you want to have a firewall endpoint, create a subnet for the sole use of Network Firewall. </p> </li> <li> <p>In Network Firewall, define the firewall behavior as follows: </p> <ol> <li> <p>Create stateless and stateful rule groups, to define the components of the network traffic filtering behavior that you want your firewall to have. </p> </li> <li> <p>Create a firewall policy that uses your rule groups and specifies additional default traffic filtering behavior. </p> </li> </ol> </li> <li> <p>In Network Firewall, create a firewall and specify your new firewall policy and VPC subnets. Network Firewall creates a firewall endpoint in each subnet that you specify, with the behavior that's defined in the firewall policy.</p> </li> <li> <p>In Amazon VPC, use ingress routing enhancements to route traffic through the new firewall endpoints.</p> </li> </ol> <p>After your firewall is established, you can add firewall endpoints for new Availability Zones by following the prior steps for the Amazon VPC setup and firewall subnet definitions. You can also add endpoints to Availability Zones that you're using in the firewall, either for the same VPC or for another VPC, by following the prior steps for the Amazon VPC setup, and defining the new VPC subnets as VPC endpoint associations. </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/networkflowmonitor/2023-04-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/networkflowmonitor/2023-04-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/networkflowmonitor/2023-04-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/networkflowmonitor/2023-04-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/networkflowmonitor/2023-04-19/service-2.json 2.31.35-1/awscli/botocore/data/networkflowmonitor/2023-04-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/networkflowmonitor/2023-04-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/networkflowmonitor/2023-04-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Create a monitor for specific network flows between local and remote resources, so that you can monitor network performance for one or several of your workloads. For each monitor, Network Flow Monitor publishes detailed end-to-end performance metrics and a network health indicators (NHI) that informs you whether there were Amazon Web Services network issues for one or more of the network flows tracked by a monitor, during a time period that you choose. </p>",
+      "documentation":"<p>Create a monitor for specific network flows between local and remote resources, so that you can monitor network performance for one or several of your workloads. For each monitor, Network Flow Monitor publishes detailed end-to-end performance metrics and a network health indicator (NHI) that informs you whether there were Amazon Web Services network issues for one or more of the network flows tracked by a monitor, during a time period that you choose. </p>",
       "idempotent":true
     },
     "CreateScope":{
@@ -50,7 +50,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Create a scope of resources that you want to be available for Network Flow Monitor to generate metrics for, when you have active agents on those resources sending metrics reports to the Network Flow Monitor backend. This call returns a scope ID to identify the scope.</p> <p>When you create a scope, you enable permissions for Network Flow Monitor. The scope is set to the resources for the Amazon Web Services that enables the feature.</p>",
+      "documentation":"<p>In Network Flow Monitor, you specify a scope for the service to generate metrics for. By using the scope, Network Flow Monitor can generate a topology of all the resources to measure performance metrics for. When you create a scope, you enable permissions for Network Flow Monitor.</p> <p>A scope is a Region-account pair or multiple Region-account pairs. Network Flow Monitor uses your scope to determine all the resources (the topology) where Network Flow Monitor will gather network flow performance metrics for you. To provide performance metrics, Network Flow Monitor uses the data that is sent by the Network Flow Monitor agents you install on the resources.</p> <p>To define the Region-account pairs for your scope, the Network Flow Monitor API uses the following constucts, which allow for future flexibility in defining scopes:</p> <ul> <li> <p> <i>Targets</i>, which are arrays of targetResources.</p> </li> <li> <p> <i>Target resources</i>, which are Region-targetIdentifier pairs.</p> </li> <li> <p> <i>Target identifiers</i>, made up of a targetID (currently always an account ID) and a targetType (currently always an account). </p> </li> </ul>",
       "idempotent":true
     },
     "DeleteMonitor":{
@@ -64,6 +64,7 @@
       "output":{"shape":"DeleteMonitorOutput"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
@@ -83,6 +84,8 @@
       "output":{"shape":"DeleteScopeOutput"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
@@ -107,7 +110,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets information about a monitor in Network Flow Monitor based on a monitor name. The information returned includes the Amazon Resource Name (ARN), create time, modified time, resources included in the monitor, and status information.</p>"
+      "documentation":"<p>Gets information about a monitor in Network Flow Monitor based on a monitor name. The information returned includes the Amazon Resource Name (ARN), create time, modified time, resources included in the monitor, and status information.</p>",
+      "readonly":true
     },
     "GetQueryResultsMonitorTopContributors":{
       "name":"GetQueryResultsMonitorTopContributors",
@@ -126,7 +130,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. You specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryMonitorTopContributors</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. You specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryMonitorTopContributors</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "GetQueryResultsWorkloadInsightsTopContributors":{
       "name":"GetQueryResultsWorkloadInsightsTopContributors",
@@ -145,7 +150,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. You specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributors</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. You specify the query that you want to return results for by providing a query ID and a monitor name.</p> <p>This query returns the top contributors for a scope for workload insights. Workload insights provide a high level view of network flow performance data collected by agents. To return the data for the top contributors, see <code>GetQueryResultsWorkloadInsightsTopContributorsData</code>.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributors</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "GetQueryResultsWorkloadInsightsTopContributorsData":{
       "name":"GetQueryResultsWorkloadInsightsTopContributorsData",
@@ -164,7 +170,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a scope ID. This query returns data for the top contributors for workload insights. Workload insights provide a high level view of network flow performance data collected by agents for a scope.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributorsData</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p> <p>The top contributor network flows overall for a specific metric type, for example, the number of retransmissions.</p>"
+      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a scope ID.</p> <p>This query returns the data for top contributors for workload insights for a specific scope. Workload insights provide a high level view of network flow performance data collected by agents for a scope. To return just the top contributors, see <code>GetQueryResultsWorkloadInsightsTopContributors</code>.</p> <p>Create a query ID for this call by calling the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributorsData</code>. Use the scope ID that was returned for your account by <code>CreateScope</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p> <p>The top contributor network flows overall are for a specific metric type, for example, the number of retransmissions.</p>",
+      "readonly":true
     },
     "GetQueryStatusMonitorTopContributors":{
       "name":"GetQueryStatusMonitorTopContributors",
@@ -182,7 +189,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns the current status of a query for the Network Flow Monitor query interface, for a specified query ID and monitor. This call returns the query status for the top contributors for a monitor.</p> <p>When you start a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start the query, <code>StartQueryMonitorTopContributors</code>.</p> <p>When you run a query, use this call to check the status of the query to make sure that the query has <code>SUCCEEDED</code> before you review the results.</p>"
+      "documentation":"<p>Returns the current status of a query for the Network Flow Monitor query interface, for a specified query ID and monitor. This call returns the query status for the top contributors for a monitor.</p> <p>When you create a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start (create) the query, <code>StartQueryMonitorTopContributors</code>.</p> <p>When you run a query, use this call to check the status of the query to make sure that the query has <code>SUCCEEDED</code> before you review the results.</p>",
+      "readonly":true
     },
     "GetQueryStatusWorkloadInsightsTopContributors":{
       "name":"GetQueryStatusWorkloadInsightsTopContributors",
@@ -200,7 +208,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for workload insights.</p> <p>When you start a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributors</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for workload insights.</p> <p>When you start a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributors</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "GetQueryStatusWorkloadInsightsTopContributorsData":{
       "name":"GetQueryStatusWorkloadInsightsTopContributorsData",
@@ -218,7 +227,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns the current status of a query for the Network Flow Monitor query interface, for a specified query ID and monitor. This call returns the query status for the top contributors data for workload insights.</p> <p>When you start a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributorsData</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p> <p>The top contributor network flows overall for a specific metric type, for example, the number of retransmissions.</p>"
+      "documentation":"<p>Returns the current status of a query for the Network Flow Monitor query interface, for a specified query ID and monitor. This call returns the query status for the top contributors data for workload insights.</p> <p>When you start a query, use this call to check the status of the query to make sure that it has has <code>SUCCEEDED</code> before you review the results. Use the same query ID that you used for the corresponding API call to start the query, <code>StartQueryWorkloadInsightsTopContributorsData</code>.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p> <p>The top contributor network flows overall are for a specific metric type, for example, the number of retransmissions.</p>",
+      "readonly":true
     },
     "GetScope":{
       "name":"GetScope",
@@ -231,12 +241,14 @@
       "output":{"shape":"GetScopeOutput"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets information about a scope, including the name, status, tags, and target details. The scope in Network Flow Monitor is an account.</p>"
+      "documentation":"<p>Gets information about a scope, including the name, status, tags, and target details. The scope in Network Flow Monitor is an account.</p>",
+      "readonly":true
     },
     "ListMonitors":{
       "name":"ListMonitors",
@@ -253,7 +265,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List all monitors in an account. Optionally, you can list only monitors that have a specific status, by using the <code>STATUS</code> parameter.</p>"
+      "documentation":"<p>List all monitors in an account. Optionally, you can list only monitors that have a specific status, by using the <code>STATUS</code> parameter.</p>",
+      "readonly":true
     },
     "ListScopes":{
       "name":"ListScopes",
@@ -271,7 +284,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List all the scopes for an account.</p>"
+      "documentation":"<p>List all the scopes for an account.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -290,7 +304,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns all the tags for a resource.</p>"
+      "documentation":"<p>Returns all the tags for a resource.</p>",
+      "readonly":true
     },
     "StartQueryMonitorTopContributors":{
       "name":"StartQueryMonitorTopContributors",
@@ -308,7 +323,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Start a query to return the data with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Create a query that you can use with the Network Flow Monitor query interface to return the top contributors for a monitor. Specify the monitor that you want to create the query for. </p> <p>The call returns a query ID that you can use with <a href=\"https://docs.aws.amazon.com/networkflowmonitor/2.0/APIReference/API_GetQueryResultsMonitorTopContributors.html\"> GetQueryResultsMonitorTopContributors</a> to run the query and return the top contributors for a specific monitor.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable APIs for the top contributors that you want to be returned.</p>"
     },
     "StartQueryWorkloadInsightsTopContributors":{
       "name":"StartQueryWorkloadInsightsTopContributors",
@@ -326,7 +341,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Start a query to return the data with the Network Flow Monitor query interface. Specify the query that you want to start by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Create a query with the Network Flow Monitor query interface that you can run to return workload insights top contributors. Specify the scope that you want to create a query for.</p> <p>The call returns a query ID that you can use with <a href=\"https://docs.aws.amazon.com/networkflowmonitor/2.0/APIReference/API_GetQueryResultsWorkloadInsightsTopContributors.html\"> GetQueryResultsWorkloadInsightsTopContributors</a> to run the query and return the top contributors for the workload insights for a scope.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable APIs for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "StartQueryWorkloadInsightsTopContributorsData":{
       "name":"StartQueryWorkloadInsightsTopContributorsData",
@@ -344,7 +360,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a scope ID. This query returns data for the top contributors for workload insights. Workload insights provide a high level view of network flow performance data collected by agents for a scope.</p> <p>A query ID is returned from an API call to start a query of a specific type; for example </p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p> <p>The top contributor network flows overall for a specific metric type, for example, the number of retransmissions.</p>"
+      "documentation":"<p>Create a query with the Network Flow Monitor query interface that you can run to return data for workload insights top contributors. Specify the scope that you want to create a query for.</p> <p>The call returns a query ID that you can use with <a href=\"https://docs.aws.amazon.com/networkflowmonitor/2.0/APIReference/API_GetQueryResultsWorkloadInsightsTopContributorsData.html\"> GetQueryResultsWorkloadInsightsTopContributorsData</a> to run the query and return the data for the top contributors for the workload insights for a scope.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "StopQueryMonitorTopContributors":{
       "name":"StopQueryMonitorTopContributors",
@@ -362,7 +379,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Stop a query with the Network Flow Monitor query interface. Specify the query that you want to stop by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>",
+      "documentation":"<p>Stop a top contributors query for a monitor. Specify the query that you want to stop by providing a query ID and a monitor name. </p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
       "idempotent":true
     },
     "StopQueryWorkloadInsightsTopContributors":{
@@ -381,7 +398,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Stop a query with the Network Flow Monitor query interface. Specify the query that you want to stop by providing a query ID and a monitor name. This query returns the top contributors for a specific monitor.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p>"
+      "documentation":"<p>Stop a top contributors query for workload insights. Specify the query that you want to stop by providing a query ID and a scope ID. </p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "StopQueryWorkloadInsightsTopContributorsData":{
       "name":"StopQueryWorkloadInsightsTopContributorsData",
@@ -399,7 +417,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Return the data for a query with the Network Flow Monitor query interface. Specify the query that you want to return results for by providing a query ID and a scope ID. This query returns data for the top contributors for workload insights. Workload insights provide a high level view of network flow performance data collected by agents for a scope.</p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type, related to a scope (for workload insights) or a monitor.</p> <p>The top contributor network flows overall for a specific metric type, for example, the number of retransmissions.</p>"
+      "documentation":"<p>Stop a top contributors data query for workload insights. Specify the query that you want to stop by providing a query ID and a scope ID. </p> <p>Top contributors in Network Flow Monitor are network flows with the highest values for a specific metric type. Top contributors can be across all workload insights, for a given scope, or for a specific monitor. Use the applicable call for the top contributors that you want to be returned.</p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -471,6 +490,8 @@
       "output":{"shape":"UpdateScopeOutput"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
@@ -535,18 +556,18 @@
         },
         "localResources":{
           "shape":"CreateMonitorInputLocalResourcesList",
-          "documentation":"<p>The local resources to monitor. A local resource, in a bi-directional flow of a workload, is the host where the agent is installed. For example, if a workload consists of an interaction between a web service and a backend database (for example, Amazon Relational Database Service (RDS)), the EC2 instance hosting the web service, which also runs the agent, is the local resource.</p>"
+          "documentation":"<p>The local resources to monitor. A local resource in a workload is the location of the host, or hosts, where the Network Flow Monitor agent is installed. For example, if a workload consists of an interaction between a web service and a backend database (for example, Amazon Dynamo DB), the subnet with the EC2 instance that hosts the web service, which also runs the agent, is the local resource.</p> <p>Be aware that all local resources must belong to the current Region.</p>"
         },
         "remoteResources":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remote resources to monitor. A remote resource is the other endpoint in the bi-directional flow of a workload, with a local resource. For example, Amazon Relational Database Service (RDS) can be a remote resource.</p>"
+          "documentation":"<p>The remote resources to monitor. A remote resource is the other endpoint in the bi-directional flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource.</p> <p>When you specify remote resources, be aware that specific combinations of resources are allowed and others are not, including the following constraints:</p> <ul> <li> <p>All remote resources that you specify must all belong to a single Region.</p> </li> <li> <p>If you specify Amazon Web Services services as remote resources, any other remote resources that you specify must be in the current Region.</p> </li> <li> <p>When you specify a remote resource for another Region, you can only specify the <code>Region</code> resource type. You cannot specify a subnet, VPC, or Availability Zone in another Region.</p> </li> <li> <p>If you leave the <code>RemoteResources</code> parameter empty, the monitor will include all network flows that terminate in the current Region.</p> </li> </ul>"
         },
         "scopeArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the scope for the monitor.</p>"
         },
         "clientToken":{
-          "shape":"String",
+          "shape":"UuidString",
           "documentation":"<p>A unique, case-sensitive string of up to 64 ASCII characters that you specify to make an idempotent API request. Don't reuse the same client token for other API requests.</p>",
           "idempotencyToken":true
         },
@@ -587,11 +608,11 @@
         },
         "localResources":{
           "shape":"MonitorLocalResources",
-          "documentation":"<p>The local resources to monitor. A local resource, in a bi-directional flow of a workload, is the host where the agent is installed. </p>"
+          "documentation":"<p>The local resources to monitor. A local resource in a workload is the location of hosts where the Network Flow Monitor agent is installed. </p>"
         },
         "remoteResources":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remote resources to monitor. A remote resource is the other endpoint in the bi-directional flow of a workload, with a local resource. For example, Amazon Relational Database Service (RDS) can be a remote resource. The remote resource is identified by its ARN or an identifier.</p>"
+          "documentation":"<p>The remote resources to monitor. A remote resource is the other endpoint specified for the network flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource. </p>"
         },
         "createdAt":{
           "shape":"Iso8601Timestamp",
@@ -613,10 +634,10 @@
       "members":{
         "targets":{
           "shape":"CreateScopeInputTargetsList",
-          "documentation":"<p>The targets to define the scope to be monitored. Currently, a target is an Amazon Web Services account.</p>"
+          "documentation":"<p>The targets to define the scope to be monitored. A target is an array of targetResources, which are currently Region-account pairs, defined by targetResource constructs.</p>"
         },
         "clientToken":{
-          "shape":"String",
+          "shape":"UuidString",
           "documentation":"<p>A unique, case-sensitive string of up to 64 ASCII characters that you specify to make an idempotent API request. Don't reuse the same client token for other API requests.</p>",
           "idempotencyToken":true
         },
@@ -646,7 +667,7 @@
         },
         "status":{
           "shape":"ScopeStatus",
-          "documentation":"<p>The status for a call to create a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The status for a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, <code>FAILED</code>, <code>DEACTIVATING</code>, or <code>DEACTIVATED</code>.</p> <p>A status of <code>DEACTIVATING</code> means that you've requested a scope to be deactivated and Network Flow Monitor is in the process of deactivating the scope. A status of <code>DEACTIVATED</code> means that the deactivating process is complete.</p>"
         },
         "scopeArn":{
           "shape":"Arn",
@@ -672,8 +693,7 @@
     },
     "DeleteMonitorOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteScopeInput":{
       "type":"structure",
@@ -689,8 +709,7 @@
     },
     "DeleteScopeOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DestinationCategory":{
       "type":"string",
@@ -700,7 +719,8 @@
         "INTER_VPC",
         "UNCLASSIFIED",
         "AMAZON_S3",
-        "AMAZON_DYNAMODB"
+        "AMAZON_DYNAMODB",
+        "INTER_REGION"
       ]
     },
     "Double":{
@@ -745,11 +765,11 @@
         },
         "localResources":{
           "shape":"MonitorLocalResources",
-          "documentation":"<p>The local resources for this monitor.</p>"
+          "documentation":"<p>The local resources to monitor. A local resource in a workload is the location of the hosts where the Network Flow Monitor agent is installed. </p>"
         },
         "remoteResources":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remote resources for this monitor.</p>"
+          "documentation":"<p>The remote resources to monitor. A remote resource is the other endpoint specified for the network flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource. </p>"
         },
         "createdAt":{
           "shape":"Iso8601Timestamp",
@@ -780,7 +800,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         },
@@ -830,7 +850,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         },
@@ -884,7 +904,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         },
@@ -1039,7 +1059,7 @@
         },
         "status":{
           "shape":"ScopeStatus",
-          "documentation":"<p>The status of a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The status for a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, <code>FAILED</code>, <code>DEACTIVATING</code>, or <code>DEACTIVATED</code>.</p> <p>A status of <code>DEACTIVATING</code> means that you've requested a scope to be deactivated and Network Flow Monitor is in the process of deactivating the scope. A status of <code>DEACTIVATED</code> means that the deactivating process is complete.</p>"
         },
         "scopeArn":{
           "shape":"Arn",
@@ -1047,7 +1067,7 @@
         },
         "targets":{
           "shape":"TargetResourceList",
-          "documentation":"<p>The targets for a scope</p>"
+          "documentation":"<p>The targets to define the scope to be monitored. A target is an array of targetResources, which are currently Region-account pairs, defined by targetResource constructs.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -1262,21 +1282,22 @@
       "members":{
         "type":{
           "shape":"MonitorLocalResourceType",
-          "documentation":"<p>The type of the local resource. Valid values are <code>AWS::EC2::VPC</code> <code>AWS::AvailabilityZone</code> or <code>AWS::EC2::Subnet</code>.</p>"
+          "documentation":"<p>The type of the local resource. Valid values are <code>AWS::EC2::VPC</code> <code>AWS::AvailabilityZone</code>, <code>AWS::EC2::Subnet</code>, or <code>AWS::Region</code>.</p>"
         },
         "identifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the local resource, such as an ARN.</p>"
+          "documentation":"<p>The identifier of the local resource. For a VPC or subnet, this identifier is the VPC Amazon Resource Name (ARN) or subnet ARN. For an Availability Zone, this identifier is the AZ name, for example, us-west-2b.</p>"
         }
       },
-      "documentation":"<p>A local resource is the host where the agent is installed. Local resources can be a a subnet, a VPC, or an Availability Zone.</p>"
+      "documentation":"<p>A local resource is the host where the agent is installed. Local resources can be a a subnet, a VPC, an Availability Zone, or an Amazon Web Services service.</p>"
     },
     "MonitorLocalResourceType":{
       "type":"string",
       "enum":[
         "AWS::EC2::VPC",
         "AWS::AvailabilityZone",
-        "AWS::EC2::Subnet"
+        "AWS::EC2::Subnet",
+        "AWS::Region"
       ]
     },
     "MonitorLocalResources":{
@@ -1301,14 +1322,14 @@
       "members":{
         "type":{
           "shape":"MonitorRemoteResourceType",
-          "documentation":"<p>The type of the remote resource. Valid values are <code>AWS::EC2::VPC</code> <code>AWS::AvailabilityZone</code>, <code>AWS::EC2::Subnet</code>, or <code>AWS::AWSService</code>.</p>"
+          "documentation":"<p>The type of the remote resource. Valid values are <code>AWS::EC2::VPC</code> <code>AWS::AvailabilityZone</code>, <code>AWS::EC2::Subnet</code>, <code>AWS::AWSService</code>, or <code>AWS::Region</code>.</p>"
         },
         "identifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the remote resource, such as an ARN.</p>"
+          "documentation":"<p>The identifier of the remote resource. For a VPC or subnet, this identifier is the VPC Amazon Resource Name (ARN) or subnet ARN. For an Availability Zone, this identifier is the AZ name, for example, us-west-2b. For an Amazon Web Services Region , this identifier is the Region name, for example, us-west-2. </p>"
         }
       },
-      "documentation":"<p>A remote resource is the other endpoint in a network flow. That is, one endpoint is the local resource and the other is the remote resource. Remote resources can be a a subnet, a VPC, an Availability Zone, or an Amazon Web Services service. </p>"
+      "documentation":"<p>A remote resource is the other endpoint in a network flow. That is, one endpoint is the local resource and the other is the remote resource. Remote resources can be a a subnet, a VPC, an Availability Zone, an Amazon Web Services service, or an Amazon Web Services Region.</p> <p>When a remote resource is an Amazon Web Services Region, Network Flow Monitor provides network performance measurements up to the edge of the Region that you specify.</p>"
     },
     "MonitorRemoteResourceType":{
       "type":"string",
@@ -1316,7 +1337,8 @@
         "AWS::EC2::VPC",
         "AWS::AvailabilityZone",
         "AWS::EC2::Subnet",
-        "AWS::AWSService"
+        "AWS::AWSService",
+        "AWS::Region"
       ]
     },
     "MonitorRemoteResources":{
@@ -1354,7 +1376,7 @@
           "documentation":"<p>The status of a monitor. The status can be one of the following</p> <ul> <li> <p> <code>PENDING</code>: The monitor is in the process of being created.</p> </li> <li> <p> <code>ACTIVE</code>: The monitor is active.</p> </li> <li> <p> <code>INACTIVE</code>: The monitor is inactive.</p> </li> <li> <p> <code>ERROR</code>: Monitor creation failed due to an error.</p> </li> <li> <p> <code>DELETING</code>: The monitor is in the process of being deleted.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>A summary of information about a monitor, includ the ARN, the name, and the status.</p>"
+      "documentation":"<p>A summary of information about a monitor, including the ARN, the name, and the status.</p>"
     },
     "MonitorTopContributorsRow":{
       "type":"structure",
@@ -1393,7 +1415,7 @@
         },
         "destinationCategory":{
           "shape":"DestinationCategory",
-          "documentation":"<p>The destination category for a top contributors row. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
+          "documentation":"<p>The destination category for a top contributors row. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_REGION</code>: Top contributor network flows between Regions (to the edge of another Region)</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
         },
         "remoteVpcId":{
           "shape":"VpcId",
@@ -1500,7 +1522,9 @@
       "enum":[
         "SUCCEEDED",
         "IN_PROGRESS",
-        "FAILED"
+        "FAILED",
+        "DEACTIVATING",
+        "DEACTIVATED"
       ]
     },
     "ScopeSummary":{
@@ -1513,11 +1537,11 @@
       "members":{
         "scopeId":{
           "shape":"ScopeId",
-          "documentation":"<p>The identifier for the scope that includes the resources you want to get data results for. A scope ID is an internally-generated identifier that includes all the resources for a specific root account.</p>"
+          "documentation":"<p>The identifier for the scope that includes the resources that you want to get data results for. A scope ID is an internally-generated identifier that includes all the resources for the accounts in a scope.</p>"
         },
         "status":{
           "shape":"ScopeStatus",
-          "documentation":"<p>The status of a scope. The status can be one of the following, depending on the state of scope creation: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The status for a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, <code>FAILED</code>, <code>DEACTIVATING</code>, or <code>DEACTIVATED</code>.</p> <p>A status of <code>DEACTIVATING</code> means that you've requested a scope to be deactivated and Network Flow Monitor is in the process of deactivating the scope. A status of <code>DEACTIVATED</code> means that the deactivating process is complete.</p>"
         },
         "scopeArn":{
           "shape":"Arn",
@@ -1560,7 +1584,7 @@
         },
         "startTime":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp that is the date and time beginning of the period that you want to retrieve results for with your query.</p>"
+          "documentation":"<p>The timestamp that is the date and time that is the beginning of the period that you want to retrieve results for with your query.</p>"
         },
         "endTime":{
           "shape":"SyntheticTimestamp_date_time",
@@ -1568,11 +1592,11 @@
         },
         "metricName":{
           "shape":"MonitorMetric",
-          "documentation":"<p>The metric that you want to query top contributors for. That is, you can specify this metric to return the top contributor network flows, for this type of metric, for a monitor and (optionally) within a specific category, such as network flows between Availability Zones.</p>"
+          "documentation":"<p>The metric that you want to query top contributors for. That is, you can specify a metric with this call and return the top contributor network flows, for that type of metric, for a monitor and (optionally) within a specific category, such as network flows between Availability Zones.</p>"
         },
         "destinationCategory":{
           "shape":"DestinationCategory",
-          "documentation":"<p>The category that you want to query top contributors for, for a specific monitor. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
+          "documentation":"<p>The category that you want to query top contributors for, for a specific monitor. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_REGION</code>: Top contributor network flows between Regions (to the edge of another Region)</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AMAZON_S3</code>: Top contributor network flows to or from Amazon S3</p> </li> <li> <p> <code>AMAZON_DYNAMODB</code>: Top contributor network flows to or from Amazon Dynamo DB</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
         },
         "limit":{
           "shape":"Limit",
@@ -1608,7 +1632,7 @@
         },
         "startTime":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp that is the date and time beginning of the period that you want to retrieve results for with your query.</p>"
+          "documentation":"<p>The timestamp that is the date and time that is the beginning of the period that you want to retrieve results for with your query.</p>"
         },
         "endTime":{
           "shape":"SyntheticTimestamp_date_time",
@@ -1620,7 +1644,7 @@
         },
         "destinationCategory":{
           "shape":"DestinationCategory",
-          "documentation":"<p>The destination category for a top contributors. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
+          "documentation":"<p>The destination category for a top contributors. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_REGION</code>: Top contributor network flows between Regions (to the edge of another Region)</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
         }
       }
     },
@@ -1652,7 +1676,7 @@
         },
         "startTime":{
           "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp that is the date and time beginning of the period that you want to retrieve results for with your query.</p>"
+          "documentation":"<p>The timestamp that is the date and time that is the beginning of the period that you want to retrieve results for with your query.</p>"
         },
         "endTime":{
           "shape":"SyntheticTimestamp_date_time",
@@ -1664,7 +1688,7 @@
         },
         "destinationCategory":{
           "shape":"DestinationCategory",
-          "documentation":"<p>The destination category for a top contributors row. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
+          "documentation":"<p>The destination category for a top contributors row. Destination categories can be one of the following: </p> <ul> <li> <p> <code>INTRA_AZ</code>: Top contributor network flows within a single Availability Zone</p> </li> <li> <p> <code>INTER_AZ</code>: Top contributor network flows between Availability Zones</p> </li> <li> <p> <code>INTER_REGION</code>: Top contributor network flows between Regions (to the edge of another Region)</p> </li> <li> <p> <code>INTER_VPC</code>: Top contributor network flows between VPCs</p> </li> <li> <p> <code>AWS_SERVICES</code>: Top contributor network flows to or from Amazon Web Services services</p> </li> <li> <p> <code>UNCLASSIFIED</code>: Top contributor network flows that do not have a bucket classification</p> </li> </ul>"
         },
         "limit":{
           "shape":"Limit",
@@ -1697,7 +1721,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         }
@@ -1705,8 +1729,7 @@
     },
     "StopQueryMonitorTopContributorsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopQueryWorkloadInsightsTopContributorsDataInput":{
       "type":"structure",
@@ -1723,7 +1746,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         }
@@ -1731,8 +1754,7 @@
     },
     "StopQueryWorkloadInsightsTopContributorsDataOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopQueryWorkloadInsightsTopContributorsInput":{
       "type":"structure",
@@ -1749,7 +1771,7 @@
         },
         "queryId":{
           "shape":"String",
-          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to start a query.</p>",
+          "documentation":"<p>The identifier for the query. A query ID is an internally-generated identifier for a specific query returned from an API call to create a query.</p>",
           "location":"uri",
           "locationName":"queryId"
         }
@@ -1757,8 +1779,7 @@
     },
     "StopQueryWorkloadInsightsTopContributorsOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{"type":"string"},
     "SubnetArn":{"type":"string"},
@@ -1809,8 +1830,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1837,14 +1857,14 @@
       "members":{
         "targetId":{
           "shape":"TargetId",
-          "documentation":"<p>The identifier for a target.</p>"
+          "documentation":"<p>The identifier for a target, which is currently always an account ID .</p>"
         },
         "targetType":{
           "shape":"TargetType",
-          "documentation":"<p>The type of a target. A target type is currently always <code>ACCOUNT</code> because a target is currently a single Amazon Web Services account.</p>"
+          "documentation":"<p>The type of a target. A target type is currently always <code>ACCOUNT</code>.</p>"
         }
       },
-      "documentation":"<p>A target identifier is a pair of identifying information for a resource that is included in a target. A target identifier includes the target ID and the target type.</p>"
+      "documentation":"<p>A target identifier is a pair of identifying information for a scope that is included in a target. A target identifier is made up of a target ID and a target type. Currently the target ID is always an account ID and the target type is always ACCOUNT.</p>"
     },
     "TargetResource":{
       "type":"structure",
@@ -1855,14 +1875,14 @@
       "members":{
         "targetIdentifier":{
           "shape":"TargetIdentifier",
-          "documentation":"<p>A target identifier is a pair of identifying information for a resource that is included in a target. A target identifier includes the target ID and the target type.</p>"
+          "documentation":"<p>A target identifier is a pair of identifying information for a scope. A target identifier is made up of a targetID (currently always an account ID) and a targetType (currently always an account).</p>"
         },
         "region":{
           "shape":"AwsRegion",
-          "documentation":"<p>The Amazon Web Services Region where the target resource is located.</p>"
+          "documentation":"<p>The Amazon Web Services Region for the scope.</p>"
         }
       },
-      "documentation":"<p>A target resource in a scope. The resource is identified by a Region and a target identifier, which includes a target ID and a target type.</p>"
+      "documentation":"<p>A target resource in a scope. The resource is identified by a Region and an account, defined by a target identifier. A target identifier is made up of a target ID (currently always an account ID) and a target type (currently always <code>ACCOUNT</code>).</p>"
     },
     "TargetResourceList":{
       "type":"list",
@@ -1898,7 +1918,7 @@
         },
         "componentArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a tranversed component.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a traversed component.</p>"
         },
         "serviceName":{
           "shape":"String",
@@ -1934,8 +1954,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMonitorInput":{
       "type":"structure",
@@ -1949,7 +1968,7 @@
         },
         "localResourcesToAdd":{
           "shape":"MonitorLocalResources",
-          "documentation":"<p>The local resources to add, as an array of resources with identifiers and types.</p>"
+          "documentation":"<p>Additional local resources to specify network flows for a monitor, as an array of resources with identifiers and types. A local resource in a workload is the location of hosts where the Network Flow Monitor agent is installed. </p>"
         },
         "localResourcesToRemove":{
           "shape":"MonitorLocalResources",
@@ -1957,14 +1976,14 @@
         },
         "remoteResourcesToAdd":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remove resources to add, as an array of resources with identifiers and types.</p>"
+          "documentation":"<p>The remote resources to add, as an array of resources with identifiers and types.</p> <p>A remote resource is the other endpoint in the flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource. </p>"
         },
         "remoteResourcesToRemove":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remove resources to remove, as an array of resources with identifiers and types.</p>"
+          "documentation":"<p>The remote resources to remove, as an array of resources with identifiers and types.</p> <p>A remote resource is the other endpoint specified for the network flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource. </p>"
         },
         "clientToken":{
-          "shape":"String",
+          "shape":"UuidString",
           "documentation":"<p>A unique, case-sensitive string of up to 64 ASCII characters that you specify to make an idempotent API request. Don't reuse the same client token for other API requests.</p>",
           "idempotencyToken":true
         }
@@ -1996,11 +2015,11 @@
         },
         "localResources":{
           "shape":"MonitorLocalResources",
-          "documentation":"<p>The local resources updated for a monitor, as an array of resources with identifiers and types.</p>"
+          "documentation":"<p>The local resources to monitor. A local resource in a workload is the location of hosts where the Network Flow Monitor agent is installed. </p>"
         },
         "remoteResources":{
           "shape":"MonitorRemoteResources",
-          "documentation":"<p>The remote resources updated for a monitor, as an array of resources with identifiers and types.</p>"
+          "documentation":"<p>The remote resources updated for a monitor, as an array of resources with identifiers and types.</p> <p>A remote resource is the other endpoint specified for the network flow of a workload, with a local resource. For example, Amazon Dynamo DB can be a remote resource.</p>"
         },
         "createdAt":{
           "shape":"Iso8601Timestamp",
@@ -2062,7 +2081,7 @@
         },
         "status":{
           "shape":"ScopeStatus",
-          "documentation":"<p>The status for a call to update a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, or <code>FAILED</code>.</p>"
+          "documentation":"<p>The status for a scope. The status can be one of the following: <code>SUCCEEDED</code>, <code>IN_PROGRESS</code>, <code>FAILED</code>, <code>DEACTIVATING</code>, or <code>DEACTIVATED</code>.</p> <p>A status of <code>DEACTIVATING</code> means that you've requested a scope to be deactivated and Network Flow Monitor is in the process of deactivating the scope. A status of <code>DEACTIVATED</code> means that the deactivating process is complete.</p>"
         },
         "scopeArn":{
           "shape":"Arn",
@@ -2074,6 +2093,12 @@
         }
       }
     },
+    "UuidString":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -2151,7 +2176,7 @@
         },
         "remoteIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of a remote resource.</p>"
+          "documentation":"<p>The identifier of a remote resource. For a VPC or subnet, this identifier is the VPC Amazon Resource Name (ARN) or subnet ARN. For an Availability Zone, this identifier is the AZ name, for example, us-west-2b. For an Amazon Web Services Region , this identifier is the Region name, for example, us-west-2.</p>"
         },
         "value":{
           "shape":"Long",
diff -pruN 2.23.6-1/awscli/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/networkmanager/2019-07-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,254 +57,322 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "stringEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://networkmanager.us-west-2.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "networkmanager",
-                                            "signingRegion": "us-west-2"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://networkmanager.us-west-2.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "stringEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
                                                 },
-                                                "name"
+                                                "aws"
                                             ]
                                         },
-                                        "aws-us-gov"
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
                                         },
-                                        false
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        false
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://networkmanager.us-gov-west-1.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "networkmanager",
-                                            "signingRegion": "us-gov-west-1"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://networkmanager.us-west-2.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "name"
+                                                    ]
+                                                },
+                                                "aws"
+                                            ]
                                         },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://networkmanager-fips.us-west-2.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://networkmanager-fips.us-west-2.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://networkmanager-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
+                                    "endpoint": {
+                                        "url": "https://networkmanager.us-gov-west-1.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
                                                 {
                                                     "fn": "getAttr",
@@ -312,105 +380,293 @@
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
                                                 },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://networkmanager.us-gov-west-1.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-gov-west-1"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
                                                 true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://networkmanager-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://networkmanager-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://networkmanager-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://networkmanager.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://networkmanager.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://networkmanager.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://networkmanager.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/networkmanager/2019-07-05/service-2.json 2.31.35-1/awscli/botocore/data/networkmanager/2019-07-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/networkmanager/2019-07-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/networkmanager/2019-07-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2611,6 +2611,18 @@
         "ServiceInsertionActions":{
           "shape":"ServiceInsertionActionList",
           "documentation":"<p>Describes the service insertion action. </p>"
+        },
+        "VpnEcmpSupport":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether Equal Cost Multipath (ECMP) is enabled for the core network.</p>"
+        },
+        "DnsSupport":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether public DNS support is supported. The default is <code>true</code>. </p>"
+        },
+        "SecurityGroupReferencingSupport":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether security group referencing is enabled for the core network.</p>"
         }
       },
       "documentation":"<p>Describes a core network change.</p>"
@@ -3716,8 +3728,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSiteRequest":{
       "type":"structure",
@@ -4102,8 +4113,7 @@
     },
     "ExecuteCoreNetworkChangeSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ExternalRegionCode":{
       "type":"string",
@@ -6256,8 +6266,7 @@
     },
     "PutResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReasonContextKey":{
       "type":"string",
@@ -6903,8 +6912,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7120,8 +7128,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectionRequest":{
       "type":"structure",
@@ -7552,6 +7559,14 @@
         "ApplianceModeSupport":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether appliance mode is supported. If enabled, traffic flow between a source and destination use the same Availability Zone for the VPC attachment for the lifetime of that flow. The default value is <code>false</code>.</p>"
+        },
+        "DnsSupport":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether DNS is supported.</p>"
+        },
+        "SecurityGroupReferencingSupport":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether security group referencing is enabled for this VPC attachment. The default is <code>true</code>. However, at the core network policy-level the default is set to <code>false</code>.</p>"
         }
       },
       "documentation":"<p>Describes the VPC options.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/networkmonitor/2023-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,6 +53,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "managedNotificationEvents"
+    },
+    "ListMemberAccounts": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "memberAccounts"
+    },
+    "ListOrganizationalUnits": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "organizationalUnits"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/notifications/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/notifications/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -27,11 +27,11 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Associates a delivery <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/managing-delivery-channels.html\">Channel</a> with a particular <code>NotificationConfiguration</code>. Supported Channels include Chatbot, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "documentation":"<p>Associates a delivery <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/managing-delivery-channels.html\">Channel</a> with a particular <code>NotificationConfiguration</code>. Supported Channels include Amazon Q Developer in chat applications, the Console Mobile Application, and emails (notifications-contacts).</p>",
       "idempotent":true
     },
     "AssociateManagedNotificationAccountContact":{
@@ -48,9 +48,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Associates an Account Contact with a particular <code>ManagedNotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -69,11 +69,32 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Associates an additional Channel with a particular <code>ManagedNotificationConfiguration</code>.</p> <p>Supported Channels include Amazon Q Developer in chat applications, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "idempotent":true
+    },
+    "AssociateOrganizationalUnit":{
+      "name":"AssociateOrganizationalUnit",
+      "http":{
+        "method":"POST",
+        "requestUri":"/organizational-units/associate/{organizationalUnitId}",
+        "responseCode":201
+      },
+      "input":{"shape":"AssociateOrganizationalUnitRequest"},
+      "output":{"shape":"AssociateOrganizationalUnitResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Associates an additional Channel with a particular <code>ManagedNotificationConfiguration</code>.</p> <p>Supported Channels include Chatbot, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "documentation":"<p>Associates an organizational unit with a notification configuration.</p>",
       "idempotent":true
     },
     "CreateEventRule":{
@@ -90,9 +111,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Creates an <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/glossary.html\"> <code>EventRule</code> </a> that is associated with a specified <code>NotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -111,8 +132,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Creates a new <code>NotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -130,9 +151,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deletes an <code>EventRule</code>.</p>",
       "idempotent":true
@@ -150,9 +171,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deletes a <code>NotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -170,9 +191,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Deregisters a <code>NotificationConfiguration</code> in the specified Region.</p> <note> <p>You can't deregister the last <code>NotificationHub</code> in the account. <code>NotificationEvents</code> stored in the deregistered <code>NotificationConfiguration</code> are no longer be visible. Recreating a new <code>NotificationConfiguration</code> in the same Region restores access to those <code>NotificationEvents</code>.</p> </note>",
       "idempotent":true
@@ -191,9 +212,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Disables service trust between User Notifications and Amazon Web Services Organizations.</p>",
       "idempotent":true
@@ -211,10 +232,10 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Disassociates a Channel from a specified <code>NotificationConfiguration</code>. Supported Channels include Chatbot, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "documentation":"<p>Disassociates a Channel from a specified <code>NotificationConfiguration</code>. Supported Channels include Amazon Q Developer in chat applications, the Console Mobile Application, and emails (notifications-contacts).</p>",
       "idempotent":true
     },
     "DisassociateManagedNotificationAccountContact":{
@@ -230,9 +251,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Disassociates an Account Contact with a particular <code>ManagedNotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -250,10 +271,29 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Disassociates an additional Channel from a particular <code>ManagedNotificationConfiguration</code>.</p> <p>Supported Channels include Amazon Q Developer in chat applications, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "idempotent":true
+    },
+    "DisassociateOrganizationalUnit":{
+      "name":"DisassociateOrganizationalUnit",
+      "http":{
+        "method":"POST",
+        "requestUri":"/organizational-units/disassociate/{organizationalUnitId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateOrganizationalUnitRequest"},
+      "output":{"shape":"DisassociateOrganizationalUnitResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Disassociates an additional Channel from a particular <code>ManagedNotificationConfiguration</code>.</p> <p>Supported Channels include Chatbot, the Console Mobile Application, and emails (notifications-contacts).</p>",
+      "documentation":"<p>Removes the association between an organizational unit and a notification configuration.</p>",
       "idempotent":true
     },
     "EnableNotificationsAccessForOrganization":{
@@ -270,9 +310,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Enables service trust between User Notifications and Amazon Web Services Organizations.</p>",
       "idempotent":true
@@ -290,8 +330,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a specified <code>EventRule</code>.</p>"
     },
@@ -308,8 +348,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns the child event of a specific given <code>ManagedNotificationEvent</code>.</p>"
     },
@@ -326,8 +366,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a specified <code>ManagedNotificationConfiguration</code>.</p>"
     },
@@ -344,8 +384,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a specified <code>ManagedNotificationEvent</code>.</p>"
     },
@@ -362,8 +402,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a specified <code>NotificationConfiguration</code>.</p>"
     },
@@ -380,8 +420,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a specified <code>NotificationEvent</code>.</p> <important> <p>User Notifications stores notifications in the individual Regions you register as notification hubs and the Region of the source event rule. <code>GetNotificationEvent</code> only returns notifications stored in the same Region in which the action is called. User Notifications doesn't backfill notifications to new Regions selected as notification hubs. For this reason, we recommend that you make calls in your oldest registered notification hub. For more information, see <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/notification-hubs.html\">Notification hubs</a> in the <i>Amazon Web Services User Notifications User Guide</i>.</p> </important>"
     },
@@ -415,8 +455,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of Channels for a <code>NotificationConfiguration</code>.</p>"
     },
@@ -433,8 +473,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of <code>EventRules</code> according to specified filters, in reverse chronological order (newest first).</p>"
     },
@@ -451,8 +491,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of Account contacts and Channels associated with a <code>ManagedNotificationConfiguration</code>, in paginated format.</p>"
     },
@@ -507,6 +547,24 @@
       ],
       "documentation":"<p>Returns a list of Managed Notification Events according to specified filters, ordered by creation time in reverse chronological order (newest first).</p>"
     },
+    "ListMemberAccounts":{
+      "name":"ListMemberAccounts",
+      "http":{
+        "method":"GET",
+        "requestUri":"/list-member-accounts",
+        "responseCode":200
+      },
+      "input":{"shape":"ListMemberAccountsRequest"},
+      "output":{"shape":"ListMemberAccountsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a list of member accounts associated with a notification configuration.</p>"
+    },
     "ListNotificationConfigurations":{
       "name":"ListNotificationConfigurations",
       "http":{
@@ -558,6 +616,24 @@
       ],
       "documentation":"<p>Returns a list of <code>NotificationHubs</code>.</p>"
     },
+    "ListOrganizationalUnits":{
+      "name":"ListOrganizationalUnits",
+      "http":{
+        "method":"GET",
+        "requestUri":"/organizational-units",
+        "responseCode":200
+      },
+      "input":{"shape":"ListOrganizationalUnitsRequest"},
+      "output":{"shape":"ListOrganizationalUnitsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of organizational units associated with a notification configuration.</p>"
+    },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
       "http":{
@@ -571,8 +647,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Returns a list of tags for a specified Amazon Resource Name (ARN).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\">Tagging your Amazon Web Services resources</a> in the <i>Tagging Amazon Web Services Resources User Guide</i>.</p> <note> <p>This is only supported for <code>NotificationConfigurations</code>.</p> </note>"
     },
@@ -590,8 +666,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Registers a <code>NotificationConfiguration</code> in the specified Region.</p> <p>There is a maximum of one <code>NotificationConfiguration</code> per Region. You can have a maximum of 3 <code>NotificationHub</code> resources at a time.</p>",
       "idempotent":true
@@ -609,8 +685,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Tags the resource with a tag key and value.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\">Tagging your Amazon Web Services resources</a> in the <i>Tagging Amazon Web Services Resources User Guide</i>.</p> <note> <p>This is only supported for <code>NotificationConfigurations</code>.</p> </note>",
       "idempotent":true
@@ -628,8 +704,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Untags a resource with a specified Amazon Resource Name (ARN).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\">Tagging your Amazon Web Services resources</a> in the <i>Tagging Amazon Web Services Resources User Guide</i>.</p>",
       "idempotent":true
@@ -647,9 +723,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Updates an existing <code>EventRule</code>.</p>",
       "idempotent":true
@@ -667,9 +743,9 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
       ],
       "documentation":"<p>Updates a <code>NotificationConfiguration</code>.</p>",
       "idempotent":true
@@ -694,7 +770,8 @@
       "enum":[
         "ENABLED",
         "DISABLED",
-        "PENDING"
+        "PENDING",
+        "FAILED"
       ]
     },
     "AccountContactType":{
@@ -811,7 +888,7 @@
       "members":{
         "arn":{
           "shape":"ChannelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Channel to associate with the <code>NotificationConfiguration</code>.</p> <p>Supported ARNs include Chatbot, the Console Mobile Application, and notifications-contacts.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Channel to associate with the <code>NotificationConfiguration</code>.</p> <p>Supported ARNs include Amazon Q Developer in chat applications, the Console Mobile Application, and notifications-contacts.</p>",
           "location":"uri",
           "locationName":"arn"
         },
@@ -823,8 +900,7 @@
     },
     "AssociateChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateManagedNotificationAccountContactRequest":{
       "type":"structure",
@@ -847,8 +923,7 @@
     },
     "AssociateManagedNotificationAccountContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateManagedNotificationAdditionalChannelRequest":{
       "type":"structure",
@@ -859,7 +934,7 @@
       "members":{
         "channelArn":{
           "shape":"ChannelArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Channel to associate with the <code>ManagedNotificationConfiguration</code>.</p> <p>Supported ARNs include Chatbot, the Console Mobile Application, and email (notifications-contacts).</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Channel to associate with the <code>ManagedNotificationConfiguration</code>.</p> <p>Supported ARNs include Amazon Q Developer in chat applications, the Console Mobile Application, and email (notifications-contacts).</p>",
           "location":"uri",
           "locationName":"channelArn"
         },
@@ -871,9 +946,31 @@
     },
     "AssociateManagedNotificationAdditionalChannelResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "AssociateOrganizationalUnitRequest":{
+      "type":"structure",
+      "required":[
+        "organizationalUnitId",
+        "notificationConfigurationArn"
+      ],
       "members":{
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit to associate.</p>",
+          "location":"uri",
+          "locationName":"organizationalUnitId"
+        },
+        "notificationConfigurationArn":{
+          "shape":"NotificationConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the notification configuration to associate with the organizational unit.</p>"
+        }
       }
     },
+    "AssociateOrganizationalUnitResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "Boolean":{
       "type":"boolean",
       "box":true
@@ -1039,8 +1136,7 @@
     },
     "DeleteEventRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNotificationConfigurationRequest":{
       "type":"structure",
@@ -1056,8 +1152,7 @@
     },
     "DeleteNotificationConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterNotificationHubRequest":{
       "type":"structure",
@@ -1114,13 +1209,11 @@
     },
     "DisableNotificationsAccessForOrganizationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableNotificationsAccessForOrganizationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateChannelRequest":{
       "type":"structure",
@@ -1143,8 +1236,7 @@
     },
     "DisassociateChannelResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateManagedNotificationAccountContactRequest":{
       "type":"structure",
@@ -1167,8 +1259,7 @@
     },
     "DisassociateManagedNotificationAccountContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateManagedNotificationAdditionalChannelRequest":{
       "type":"structure",
@@ -1191,18 +1282,38 @@
     },
     "DisassociateManagedNotificationAdditionalChannelResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DisassociateOrganizationalUnitRequest":{
+      "type":"structure",
+      "required":[
+        "organizationalUnitId",
+        "notificationConfigurationArn"
+      ],
       "members":{
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit to disassociate.</p>",
+          "location":"uri",
+          "locationName":"organizationalUnitId"
+        },
+        "notificationConfigurationArn":{
+          "shape":"NotificationConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the notification configuration to disassociate from the organizational unit.</p>"
+        }
       }
     },
+    "DisassociateOrganizationalUnitResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "EnableNotificationsAccessForOrganizationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableNotificationsAccessForOrganizationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ErrorMessage":{"type":"string"},
     "EventRuleArn":{
@@ -1556,6 +1667,10 @@
         "aggregationDuration":{
           "shape":"AggregationDuration",
           "documentation":"<p>The aggregation preference of the <code>NotificationConfiguration</code>.</p> <ul> <li> <p>Values:</p> <ul> <li> <p> <code>LONG</code> </p> <ul> <li> <p>Aggregate notifications for long periods of time (12 hours).</p> </li> </ul> </li> <li> <p> <code>SHORT</code> </p> <ul> <li> <p>Aggregate notifications for short periods of time (5 minutes).</p> </li> </ul> </li> <li> <p> <code>NONE</code> </p> <ul> <li> <p>Don't aggregate notifications.</p> </li> </ul> </li> </ul> </li> </ul>"
+        },
+        "subtype":{
+          "shape":"NotificationConfigurationSubtype",
+          "documentation":"<p>The subtype of the notification configuration returned in the response.</p>"
         }
       }
     },
@@ -1606,8 +1721,7 @@
     },
     "GetNotificationsAccessForOrganizationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetNotificationsAccessForOrganizationResponse":{
       "type":"structure",
@@ -1961,6 +2075,68 @@
         }
       }
     },
+    "ListMemberAccountsRequest":{
+      "type":"structure",
+      "required":["notificationConfigurationArn"],
+      "members":{
+        "notificationConfigurationArn":{
+          "shape":"NotificationConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the notification configuration used to filter the member accounts.</p>",
+          "location":"querystring",
+          "locationName":"notificationConfigurationArn"
+        },
+        "maxResults":{
+          "shape":"ListMemberAccountsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return in a single call. Valid values are 1-100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results. Use the value returned in the previous response.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "memberAccount":{
+          "shape":"AccountId",
+          "documentation":"<p>The member account identifier used to filter the results.</p>",
+          "location":"querystring",
+          "locationName":"memberAccount"
+        },
+        "status":{
+          "shape":"MemberAccountNotificationConfigurationStatus",
+          "documentation":"<p>The status used to filter the member accounts.</p>",
+          "location":"querystring",
+          "locationName":"status"
+        },
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The organizational unit ID used to filter the member accounts.</p>",
+          "location":"querystring",
+          "locationName":"organizationalUnitId"
+        }
+      }
+    },
+    "ListMemberAccountsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListMemberAccountsResponse":{
+      "type":"structure",
+      "required":["memberAccounts"],
+      "members":{
+        "memberAccounts":{
+          "shape":"MemberAccounts",
+          "documentation":"<p>The list of member accounts that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use for the next page of results.</p>"
+        }
+      }
+    },
     "ListNotificationConfigurationsRequest":{
       "type":"structure",
       "members":{
@@ -1982,6 +2158,12 @@
           "location":"querystring",
           "locationName":"status"
         },
+        "subtype":{
+          "shape":"NotificationConfigurationSubtype",
+          "documentation":"<p>The subtype used to filter the notification configurations in the request.</p>",
+          "location":"querystring",
+          "locationName":"subtype"
+        },
         "maxResults":{
           "shape":"ListNotificationConfigurationsRequestMaxResultsInteger",
           "documentation":"<p>The maximum number of results to be returned in this call. Defaults to 20.</p>",
@@ -2066,6 +2248,12 @@
           "documentation":"<p>The start token for paginated calls. Retrieved from the response of a previous <code>ListEventRules</code> call. Next token uses Base64 encoding.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit used to filter notification events.</p>",
+          "location":"querystring",
+          "locationName":"organizationalUnitId"
         }
       }
     },
@@ -2126,6 +2314,50 @@
         }
       }
     },
+    "ListOrganizationalUnitsRequest":{
+      "type":"structure",
+      "required":["notificationConfigurationArn"],
+      "members":{
+        "notificationConfigurationArn":{
+          "shape":"NotificationConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the notification configuration used to filter the organizational units.</p>",
+          "location":"querystring",
+          "locationName":"notificationConfigurationArn"
+        },
+        "maxResults":{
+          "shape":"ListOrganizationalUnitsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of organizational units to return in a single call. Valid values are 1-100.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results. Use the value returned in the previous response.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListOrganizationalUnitsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListOrganizationalUnitsResponse":{
+      "type":"structure",
+      "required":["organizationalUnits"],
+      "members":{
+        "organizationalUnits":{
+          "shape":"OrganizationalUnits",
+          "documentation":"<p>The list of organizational units that match the specified criteria.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use for the next page of results. If there are no additional results, this value is null.</p>"
+        }
+      }
+    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["arn"],
@@ -2180,7 +2412,7 @@
         },
         "channelType":{
           "shape":"ChannelType",
-          "documentation":"<p>The type of notification channel used for message delivery.</p> <ul> <li> <p>Values:</p> <ul> <li> <p> <code>ACCOUNT_CONTACT</code> </p> <ul> <li> <p>Delivers notifications to Account Managed contacts through the User Notification Service.</p> </li> </ul> </li> <li> <p> <code>MOBILE</code> </p> <ul> <li> <p>Delivers notifications through the Amazon Web Services Console Mobile Application to mobile devices.</p> </li> </ul> </li> <li> <p> <code>CHATBOT</code> </p> <ul> <li> <p>Delivers notifications through Chatbot to collaboration platforms (Slack, Chime).</p> </li> </ul> </li> <li> <p> <code>EMAIL</code> </p> <ul> <li> <p>Delivers notifications to email addresses.</p> </li> </ul> </li> </ul> </li> </ul>"
+          "documentation":"<p>The type of notification channel used for message delivery.</p> <ul> <li> <p>Values:</p> <ul> <li> <p> <code>ACCOUNT_CONTACT</code> </p> <ul> <li> <p>Delivers notifications to Account Managed contacts through the User Notification Service.</p> </li> </ul> </li> <li> <p> <code>MOBILE</code> </p> <ul> <li> <p>Delivers notifications through the Amazon Web Services Console Mobile Application to mobile devices.</p> </li> </ul> </li> <li> <p> <code>CHATBOT</code> </p> <ul> <li> <p>Delivers notifications through Amazon Q Developer in chat applications to collaboration platforms (Slack, Chime).</p> </li> </ul> </li> <li> <p> <code>EMAIL</code> </p> <ul> <li> <p>Delivers notifications to email addresses.</p> </li> </ul> </li> </ul> </li> </ul>"
         },
         "overrideOption":{
           "shape":"ChannelAssociationOverrideOption",
@@ -2473,7 +2705,10 @@
           "shape":"CreationTime",
           "documentation":"<p>The creation time of the <code>ManagedNotificationEvent</code>.</p>"
         },
-        "notificationEvent":{"shape":"ManagedNotificationEventSummary"},
+        "notificationEvent":{
+          "shape":"ManagedNotificationEventSummary",
+          "documentation":"<p/>"
+        },
         "aggregationEventType":{
           "shape":"AggregationEventType",
           "documentation":"<p>The notifications aggregation type.</p> <ul> <li> <p>Values:</p> <ul> <li> <p> <code>AGGREGATE</code> </p> <ul> <li> <p>The notification event is an aggregate notification. Aggregate notifications summarize grouped events over a specified time period.</p> </li> </ul> </li> <li> <p> <code>CHILD</code> </p> <ul> <li> <p>Some <code>EventRules</code> are <code>ACTIVE</code> and some are <code>INACTIVE</code>. Any call can be run.</p> </li> </ul> </li> <li> <p> <code>NONE</code> </p> <ul> <li> <p>The notification isn't aggregated.</p> </li> </ul> </li> </ul> </li> </ul>"
@@ -2607,6 +2842,52 @@
       "max":256,
       "min":1
     },
+    "MemberAccount":{
+      "type":"structure",
+      "required":[
+        "accountId",
+        "status",
+        "statusReason",
+        "organizationalUnitId"
+      ],
+      "members":{
+        "notificationConfigurationArn":{
+          "shape":"NotificationConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the notification configuration associated with the member account.</p>"
+        },
+        "accountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The AWS account ID of the member account.</p>"
+        },
+        "status":{
+          "shape":"MemberAccountNotificationConfigurationStatus",
+          "documentation":"<p>The current status of the member account.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the member account.</p>"
+        },
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit containing the member account.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a member account.</p>"
+    },
+    "MemberAccountNotificationConfigurationStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "PENDING",
+        "INACTIVE",
+        "CREATING",
+        "DELETING"
+      ]
+    },
+    "MemberAccounts":{
+      "type":"list",
+      "member":{"shape":"MemberAccount"}
+    },
     "MessageComponents":{
       "type":"structure",
       "members":{
@@ -2616,7 +2897,7 @@
         },
         "paragraphSummary":{
           "shape":"TextPartReference",
-          "documentation":"<p>A paragraph long or multiple sentence summary. For example, Chatbot notifications.</p>"
+          "documentation":"<p>A paragraph long or multiple sentence summary. For example, Amazon Q Developer in chat applications notifications.</p>"
         },
         "completeDescription":{
           "shape":"TextPartReference",
@@ -2709,10 +2990,21 @@
         "aggregationDuration":{
           "shape":"AggregationDuration",
           "documentation":"<p>The aggregation preference of the <code>NotificationConfiguration</code>.</p> <ul> <li> <p>Values:</p> <ul> <li> <p> <code>LONG</code> </p> <ul> <li> <p>Aggregate notifications for long periods of time (12 hours).</p> </li> </ul> </li> <li> <p> <code>SHORT</code> </p> <ul> <li> <p>Aggregate notifications for short periods of time (5 minutes).</p> </li> </ul> </li> <li> <p> <code>NONE</code> </p> <ul> <li> <p>Don't aggregate notifications.</p> </li> </ul> </li> </ul> </li> </ul>"
+        },
+        "subtype":{
+          "shape":"NotificationConfigurationSubtype",
+          "documentation":"<p>The subtype of the notification configuration.</p>"
         }
       },
       "documentation":"<p>Contains the complete list of fields for a NotificationConfiguration.</p>"
     },
+    "NotificationConfigurationSubtype":{
+      "type":"string",
+      "enum":[
+        "ACCOUNT",
+        "ADMIN_MANAGED"
+      ]
+    },
     "NotificationConfigurations":{
       "type":"list",
       "member":{"shape":"NotificationConfigurationStructure"}
@@ -2785,6 +3077,10 @@
         "media":{
           "shape":"Media",
           "documentation":"<p>A list of media elements.</p>"
+        },
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit associated with the notification event.</p>"
         }
       },
       "documentation":"<p>A <code>NotificationEvent</code> is a notification-focused representation of an event. They contain semantic information used by Channels to create end-user notifications.</p>"
@@ -2838,6 +3134,10 @@
         "aggregationSummary":{
           "shape":"AggregationSummary",
           "documentation":"<p>Provides an aggregated summary data for notification events.</p>"
+        },
+        "organizationalUnitId":{
+          "shape":"OrganizationalUnitId",
+          "documentation":"<p>The unique identifier of the organizational unit in the notification event overview.</p>"
         }
       },
       "documentation":"<p>Describes a short summary of a <code>NotificationEvent</code>. This is only used when listing notification events.</p>"
@@ -2960,7 +3260,11 @@
     },
     "OrganizationalUnitId":{
       "type":"string",
-      "pattern":"Root|ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}"
+      "pattern":"(Root|r-[0-9a-z]{4,32}|ou-[0-9a-z]{4,32}-[a-z0-9]{8,32})"
+    },
+    "OrganizationalUnits":{
+      "type":"list",
+      "member":{"shape":"OrganizationalUnitId"}
     },
     "QuotaCode":{"type":"string"},
     "Region":{
@@ -3308,8 +3612,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3431,8 +3734,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEventRuleRequest":{
       "type":"structure",
@@ -3567,5 +3869,5 @@
       ]
     }
   },
-  "documentation":"<p>The <i>Amazon Web Services User Notifications API Reference</i> provides descriptions, API request parameters, and the JSON response for each of the User Notification API actions.</p> <p>User Notification control plane APIs are currently available in US East (Virginia) - <code>us-east-1</code>.</p> <p> <a href=\"https://docs.aws.amazon.com/notifications/latest/APIReference/API_GetNotificationEvent.html\">GetNotificationEvent</a> and <a href=\"https://docs.aws.amazon.com/notifications/latest/APIReference/API_ListNotificationEvents.html\">ListNotificationEvents</a> APIs are currently available in <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/supported-regions.html\">commercial partition Regions</a> and only return notifications stored in the same Region in which they're called.</p> <p>The User Notifications console can only be used in US East (Virginia). Your data however, is stored in each Region chosen as a <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/notification-hubs.html\">notification hub</a> in addition to US East (Virginia).</p>"
+  "documentation":"<p>The <i>User Notifications API Reference</i> provides descriptions, API request parameters, and the JSON response for each of the User Notifications API actions.</p> <p>User Notification control plane APIs are currently available in US East (Virginia) - <code>us-east-1</code>.</p> <p> <a href=\"https://docs.aws.amazon.com/notifications/latest/APIReference/API_GetNotificationEvent.html\">GetNotificationEvent</a> and <a href=\"https://docs.aws.amazon.com/notifications/latest/APIReference/API_ListNotificationEvents.html\">ListNotificationEvents</a> APIs are currently available in <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/supported-regions.html\">commercial partition Regions</a> and only return notifications stored in the same Region in which they're called.</p> <p>The User Notifications console can only be used in US East (Virginia). Your data however, is stored in each Region chosen as a <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/notification-hubs.html\">notification hub</a> in addition to US East (Virginia).</p> <note> <p>For information about descriptions, API request parameters, and the JSON response for email contact related API actions, see the <a href=\"https://docs.aws.amazon.com/notificationscontacts/latest/APIReference/Welcome.html\">User Notifications Contacts API Reference Guide</a>.</p> </note>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/notificationscontacts/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/notificationscontacts/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/notificationscontacts/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/notificationscontacts/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/oam/2022-06-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/oam/2022-06-10/service-2.json 2.31.35-1/awscli/botocore/data/oam/2022-06-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/oam/2022-06-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/oam/2022-06-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,8 @@
     "serviceId":"OAM",
     "signatureVersion":"v4",
     "signingName":"oam",
-    "uid":"oam-2022-06-10"
+    "uid":"oam-2022-06-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateLink":{
@@ -214,7 +215,7 @@
         {"shape":"InvalidParameterException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Creates or updates the resource policy that grants permissions to source accounts to link to the monitoring account sink. When you create a sink policy, you can grant permissions to all accounts in an organization or to individual accounts.</p> <p>You can also use a sink policy to limit the types of data that is shared. The three types that you can allow or deny are:</p> <ul> <li> <p> <b>Metrics</b> - Specify with <code>AWS::CloudWatch::Metric</code> </p> </li> <li> <p> <b>Log groups</b> - Specify with <code>AWS::Logs::LogGroup</code> </p> </li> <li> <p> <b>Traces</b> - Specify with <code>AWS::XRay::Trace</code> </p> </li> <li> <p> <b>Application Insights - Applications</b> - Specify with <code>AWS::ApplicationInsights::Application</code> </p> </li> </ul> <p>See the examples in this section to see how to specify permitted source accounts and data types.</p>"
+      "documentation":"<p>Creates or updates the resource policy that grants permissions to source accounts to link to the monitoring account sink. When you create a sink policy, you can grant permissions to all accounts in an organization or to individual accounts.</p> <p>You can also use a sink policy to limit the types of data that is shared. The six types of services with their respective resource types that you can allow or deny are:</p> <ul> <li> <p> <b>Metrics</b> - Specify with <code>AWS::CloudWatch::Metric</code> </p> </li> <li> <p> <b>Log groups</b> - Specify with <code>AWS::Logs::LogGroup</code> </p> </li> <li> <p> <b>Traces</b> - Specify with <code>AWS::XRay::Trace</code> </p> </li> <li> <p> <b>Application Insights - Applications</b> - Specify with <code>AWS::ApplicationInsights::Application</code> </p> </li> <li> <p> <b>Internet Monitor</b> - Specify with <code>AWS::InternetMonitor::Monitor</code> </p> </li> <li> <p> <b>Application Signals</b> - Specify with <code>AWS::ApplicationSignals::Service</code> and <code>AWS::ApplicationSignals::ServiceLevelObjective</code> </p> </li> </ul> <p>See the examples in this section to see how to specify permitted source accounts and data types.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -298,7 +299,7 @@
       "members":{
         "LabelTemplate":{
           "shape":"LabelTemplate",
-          "documentation":"<p>Specify a friendly human-readable name to use to identify this source account when you are viewing data from it in the monitoring account.</p> <p>You can use a custom label or use the following variables:</p> <ul> <li> <p> <code>$AccountName</code> is the name of the account</p> </li> <li> <p> <code>$AccountEmail</code> is the globally unique email address of the account</p> </li> <li> <p> <code>$AccountEmailNoDomain</code> is the email address of the account without the domain name</p> </li> </ul>"
+          "documentation":"<p>Specify a friendly human-readable name to use to identify this source account when you are viewing data from it in the monitoring account.</p> <p>You can use a custom label or use the following variables:</p> <ul> <li> <p> <code>$AccountName</code> is the name of the account</p> </li> <li> <p> <code>$AccountEmail</code> is the globally unique email address of the account</p> </li> <li> <p> <code>$AccountEmailNoDomain</code> is the email address of the account without the domain name</p> </li> </ul> <note> <p>In the Amazon Web Services GovCloud (US-East) and Amazon Web Services GovCloud (US-West) Regions, the only supported option is to use custom labels, and the <code>$AccountName</code>, <code>$AccountEmail</code>, and <code>$AccountEmailNoDomain</code> variables all resolve as <i>account-id</i> instead of the specified variable.</p> </note>"
         },
         "LinkConfiguration":{
           "shape":"LinkConfiguration",
@@ -427,6 +428,10 @@
         "Identifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The ARN of the link to retrieve information for.</p>"
+        },
+        "IncludeTags":{
+          "shape":"IncludeTags",
+          "documentation":"<p>Specifies whether to include the tags associated with the link in the response. When <code>IncludeTags</code> is set to <code>true</code> and the caller has the required permission, <code>oam:ListTagsForResource</code>, the API will return the tags for the specified resource. If the caller doesn't have the required permission, <code>oam:ListTagsForResource</code>, the API will raise an exception.</p> <p>The default value is <code>false</code>.</p>"
         }
       }
     },
@@ -474,6 +479,10 @@
         "Identifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The ARN of the sink to retrieve information for.</p>"
+        },
+        "IncludeTags":{
+          "shape":"IncludeTags",
+          "documentation":"<p>Specifies whether to include the tags associated with the sink in the response. When <code>IncludeTags</code> is set to <code>true</code> and the caller has the required permission, <code>oam:ListTagsForResource</code>, the API will return the tags for the specified resource. If the caller doesn't have the required permission, <code>oam:ListTagsForResource</code>, the API will raise an exception.</p> <p>The default value is <code>false</code>.</p>"
         }
       }
     },
@@ -525,6 +534,10 @@
         }
       }
     },
+    "IncludeTags":{
+      "type":"boolean",
+      "box":true
+    },
     "InternalServiceFault":{
       "type":"structure",
       "members":{
@@ -891,7 +904,9 @@
         "AWS::Logs::LogGroup",
         "AWS::XRay::Trace",
         "AWS::ApplicationInsights::Application",
-        "AWS::InternetMonitor::Monitor"
+        "AWS::InternetMonitor::Monitor",
+        "AWS::ApplicationSignals::Service",
+        "AWS::ApplicationSignals::ServiceLevelObjective"
       ]
     },
     "ResourceTypesInput":{
@@ -1027,6 +1042,10 @@
           "shape":"ResourceIdentifier",
           "documentation":"<p>The ARN of the link that you want to update.</p>"
         },
+        "IncludeTags":{
+          "shape":"IncludeTags",
+          "documentation":"<p>Specifies whether to include the tags associated with the link in the response after the update operation. When <code>IncludeTags</code> is set to <code>true</code> and the caller has the required permission, <code>oam:ListTagsForResource</code>, the API will return the tags for the specified resource. If the caller doesn't have the required permission, <code>oam:ListTagsForResource</code>, the API will raise an exception. </p> <p>The default value is <code>false</code>.</p>"
+        },
         "LinkConfiguration":{
           "shape":"LinkConfiguration",
           "documentation":"<p>Use this structure to filter which metric namespaces and which log groups are to be shared from the source account to the monitoring account.</p>"
@@ -1087,5 +1106,5 @@
       "exception":true
     }
   },
-  "documentation":"<p>Use Amazon CloudWatch Observability Access Manager to create and manage links between source accounts and monitoring accounts by using <i>CloudWatch cross-account observability</i>. With CloudWatch cross-account observability, you can monitor and troubleshoot applications that span multiple accounts within a Region. Seamlessly search, visualize, and analyze your metrics, logs, traces, and Application Insights applications in any of the linked accounts without account boundaries.</p> <p>Set up one or more Amazon Web Services accounts as <i>monitoring accounts</i> and link them with multiple <i>source accounts</i>. A monitoring account is a central Amazon Web Services account that can view and interact with observability data generated from source accounts. A source account is an individual Amazon Web Services account that generates observability data for the resources that reside in it. Source accounts share their observability data with the monitoring account. The shared observability data can include metrics in Amazon CloudWatch, logs in Amazon CloudWatch Logs, traces in X-Ray, and applications in Amazon CloudWatch Application Insights.</p>"
+  "documentation":"<p>Use Amazon CloudWatch Observability Access Manager to create and manage links between source accounts and monitoring accounts by using <i>CloudWatch cross-account observability</i>. With CloudWatch cross-account observability, you can monitor and troubleshoot applications that span multiple accounts within a Region. Seamlessly search, visualize, and analyze your metrics, logs, traces, Application Signals services and service level objectives (SLOs), Application Insights applications, and internet monitors in any of the linked accounts without account boundaries.</p> <p>Set up one or more Amazon Web Services accounts as <i>monitoring accounts</i> and link them with multiple <i>source accounts</i>. A monitoring account is a central Amazon Web Services account that can view and interact with observability data generated from source accounts. A source account is an individual Amazon Web Services account that generates observability data for the resources that reside in it. Source accounts share their observability data with the monitoring account. The shared observability data can include metrics in Amazon CloudWatch, logs in Amazon CloudWatch Logs, traces in X-Ray, Application Signals services and service level objectives (SLOs), applications in Amazon CloudWatch Application Insights, and internet monitors in CloudWatch Internet Monitor.</p> <p>When you set up a link, you can choose to share the metrics from all namespaces with the monitoring account, or filter to a subset of namespaces. And for CloudWatch Logs, you can choose to share all log groups with the monitoring account, or filter to a subset of log groups. </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,24 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "TelemetryConfigurations"
+    },
+    "ListTelemetryRules": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "TelemetryRuleSummaries"
+    },
+    "ListTelemetryRulesForOrganization": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "TelemetryRuleSummaries"
+    },
+    "ListCentralizationRulesForOrganization": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "CentralizationRuleSummaries"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/observabilityadmin/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,150 @@
     "uid":"observabilityadmin-2018-05-10"
   },
   "operations":{
+    "CreateCentralizationRuleForOrganization":{
+      "name":"CreateCentralizationRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateCentralizationRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateCentralizationRuleForOrganizationInput"},
+      "output":{"shape":"CreateCentralizationRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p>Creates a centralization rule that applies across an Amazon Web Services Organization. This operation can only be called by the organization's management account or a delegated administrator account.</p>"
+    },
+    "CreateTelemetryRule":{
+      "name":"CreateTelemetryRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateTelemetryRule",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateTelemetryRuleInput"},
+      "output":{"shape":"CreateTelemetryRuleOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Creates a telemetry rule that defines how telemetry should be configured for Amazon Web Services resources in your account. The rule specifies which resources should have telemetry enabled and how that telemetry data should be collected based on resource type, telemetry type, and selection criteria. </p>"
+    },
+    "CreateTelemetryRuleForOrganization":{
+      "name":"CreateTelemetryRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateTelemetryRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateTelemetryRuleForOrganizationInput"},
+      "output":{"shape":"CreateTelemetryRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Creates a telemetry rule that applies across an Amazon Web Services Organization. This operation can only be called by the organization's management account or a delegated administrator account. </p>"
+    },
+    "DeleteCentralizationRuleForOrganization":{
+      "name":"DeleteCentralizationRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteCentralizationRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteCentralizationRuleForOrganizationInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p>Deletes an organization-wide centralization rule. This operation can only be called by the organization's management account or a delegated administrator account.</p>"
+    },
+    "DeleteTelemetryRule":{
+      "name":"DeleteTelemetryRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteTelemetryRule",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteTelemetryRuleInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Deletes a telemetry rule from your account. Any telemetry configurations previously created by the rule will remain but no new resources will be configured by this rule. </p>"
+    },
+    "DeleteTelemetryRuleForOrganization":{
+      "name":"DeleteTelemetryRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteTelemetryRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteTelemetryRuleForOrganizationInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Deletes an organization-wide telemetry rule. This operation can only be called by the organization's management account or a delegated administrator account. </p>"
+    },
+    "GetCentralizationRuleForOrganization":{
+      "name":"GetCentralizationRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetCentralizationRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"GetCentralizationRuleForOrganizationInput"},
+      "output":{"shape":"GetCentralizationRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p>Retrieves the details of a specific organization centralization rule. This operation can only be called by the organization's management account or a delegated administrator account.</p>",
+      "readonly":true
+    },
+    "GetTelemetryEnrichmentStatus":{
+      "name":"GetTelemetryEnrichmentStatus",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetTelemetryEnrichmentStatus",
+        "responseCode":200
+      },
+      "output":{"shape":"GetTelemetryEnrichmentStatusOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Returns the current status of the resource tags for telemetry feature, which enhances telemetry data with additional resource metadata from Amazon Web Services Resource Explorer. </p>",
+      "readonly":true
+    },
     "GetTelemetryEvaluationStatus":{
       "name":"GetTelemetryEvaluationStatus",
       "http":{
@@ -23,9 +167,11 @@
       "output":{"shape":"GetTelemetryEvaluationStatusOutput"},
       "errors":[
         {"shape":"AccessDeniedException"},
-        {"shape":"InternalServerException"}
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> Returns the current onboarding status of the telemetry config feature, including the status of the feature and reason the feature failed to start or stop. </p>"
+      "documentation":"<p> Returns the current onboarding status of the telemetry config feature, including the status of the feature and reason the feature failed to start or stop. </p>",
+      "readonly":true
     },
     "GetTelemetryEvaluationStatusForOrganization":{
       "name":"GetTelemetryEvaluationStatusForOrganization",
@@ -38,9 +184,67 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> This returns the onboarding status of the telemetry configuration feature for the organization. It can only be called by a Management Account of an Amazon Web Services Organization or an assigned Delegated Admin Account of Amazon CloudWatch telemetry config. </p>",
+      "readonly":true
+    },
+    "GetTelemetryRule":{
+      "name":"GetTelemetryRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetTelemetryRule",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTelemetryRuleInput"},
+      "output":{"shape":"GetTelemetryRuleOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Retrieves the details of a specific telemetry rule in your account. </p>",
+      "readonly":true
+    },
+    "GetTelemetryRuleForOrganization":{
+      "name":"GetTelemetryRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetTelemetryRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTelemetryRuleForOrganizationInput"},
+      "output":{"shape":"GetTelemetryRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Retrieves the details of a specific organization telemetry rule. This operation can only be called by the organization's management account or a delegated administrator account. </p>",
+      "readonly":true
+    },
+    "ListCentralizationRulesForOrganization":{
+      "name":"ListCentralizationRulesForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListCentralizationRulesForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"ListCentralizationRulesForOrganizationInput"},
+      "output":{"shape":"ListCentralizationRulesForOrganizationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> This returns the onboarding status of the telemetry configuration feature for the organization. It can only be called by a Management Account of an AWS Organization or an assigned Delegated Admin Account of AWS CloudWatch telemetry config. </p>"
+      "documentation":"<p>Lists all centralization rules in your organization. This operation can only be called by the organization's management account or a delegated administrator account.</p>",
+      "readonly":true
     },
     "ListResourceTelemetry":{
       "name":"ListResourceTelemetry",
@@ -54,9 +258,11 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> Returns a list of telemetry configurations for AWS resources supported by telemetry config. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/telemetry-config-cloudwatch.html\">Auditing CloudWatch telemetry configurations</a>. </p>"
+      "documentation":"<p> Returns a list of telemetry configurations for Amazon Web Services resources supported by telemetry config. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/telemetry-config-cloudwatch.html\">Auditing CloudWatch telemetry configurations</a>. </p>",
+      "readonly":true
     },
     "ListResourceTelemetryForOrganization":{
       "name":"ListResourceTelemetryForOrganization",
@@ -70,9 +276,82 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Returns a list of telemetry configurations for Amazon Web Services resources supported by telemetry config in the organization. </p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListTagsForResource",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceInput"},
+      "output":{"shape":"ListTagsForResourceOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Lists all tags attached to the specified telemetry rule resource. </p>",
+      "readonly":true
+    },
+    "ListTelemetryRules":{
+      "name":"ListTelemetryRules",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListTelemetryRules",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTelemetryRulesInput"},
+      "output":{"shape":"ListTelemetryRulesOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Lists all telemetry rules in your account. You can filter the results by specifying a rule name prefix. </p>",
+      "readonly":true
+    },
+    "ListTelemetryRulesForOrganization":{
+      "name":"ListTelemetryRulesForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListTelemetryRulesForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTelemetryRulesForOrganizationInput"},
+      "output":{"shape":"ListTelemetryRulesForOrganizationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Lists all telemetry rules in your organization. This operation can only be called by the organization's management account or a delegated administrator account. </p>",
+      "readonly":true
+    },
+    "StartTelemetryEnrichment":{
+      "name":"StartTelemetryEnrichment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/StartTelemetryEnrichment",
+        "responseCode":202
+      },
+      "output":{"shape":"StartTelemetryEnrichmentOutput"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> Returns a list of telemetry configurations for AWS resources supported by telemetry config in the organization. </p>"
+      "documentation":"<p> Enables the resource tags for telemetry feature for your account, which enhances telemetry data with additional resource metadata from Amazon Web Services Resource Explorer to provide richer context for monitoring and observability. </p>"
     },
     "StartTelemetryEvaluation":{
       "name":"StartTelemetryEvaluation",
@@ -84,9 +363,10 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> This action begins onboarding onboarding the caller AWS account to the telemetry config feature. </p>"
+      "documentation":"<p> This action begins onboarding the caller Amazon Web Services account to the telemetry config feature. </p>"
     },
     "StartTelemetryEvaluationForOrganization":{
       "name":"StartTelemetryEvaluationForOrganization",
@@ -98,10 +378,27 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
       "documentation":"<p> This actions begins onboarding the organization and all member accounts to the telemetry config feature. </p>"
     },
+    "StopTelemetryEnrichment":{
+      "name":"StopTelemetryEnrichment",
+      "http":{
+        "method":"POST",
+        "requestUri":"/StopTelemetryEnrichment",
+        "responseCode":202
+      },
+      "output":{"shape":"StopTelemetryEnrichmentOutput"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Disables the resource tags for telemetry feature for your account, stopping the enhancement of telemetry data with additional resource metadata. </p>"
+    },
     "StopTelemetryEvaluation":{
       "name":"StopTelemetryEvaluation",
       "http":{
@@ -112,9 +409,10 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> This action begins offboarding the caller AWS account from the telemetry config feature. </p>"
+      "documentation":"<p> This action begins offboarding the caller Amazon Web Services account from the telemetry config feature. </p>"
     },
     "StopTelemetryEvaluationForOrganization":{
       "name":"StopTelemetryEvaluationForOrganization",
@@ -126,9 +424,102 @@
       "errors":[
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
-        {"shape":"ValidationException"}
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> This action offboards the Organization of the caller Amazon Web Services account from the telemetry config feature. </p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/TagResource",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceInput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Adds or updates tags for a telemetry rule resource. </p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/UntagResource",
+        "responseCode":200
+      },
+      "input":{"shape":"UntagResourceInput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Removes tags from a telemetry rule resource. </p>"
+    },
+    "UpdateCentralizationRuleForOrganization":{
+      "name":"UpdateCentralizationRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/UpdateCentralizationRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateCentralizationRuleForOrganizationInput"},
+      "output":{"shape":"UpdateCentralizationRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p>Updates an existing centralization rule that applies across an Amazon Web Services Organization. This operation can only be called by the organization's management account or a delegated administrator account.</p>"
+    },
+    "UpdateTelemetryRule":{
+      "name":"UpdateTelemetryRule",
+      "http":{
+        "method":"POST",
+        "requestUri":"/UpdateTelemetryRule",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateTelemetryRuleInput"},
+      "output":{"shape":"UpdateTelemetryRuleOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p> Updates an existing telemetry rule in your account. </p>"
+    },
+    "UpdateTelemetryRuleForOrganization":{
+      "name":"UpdateTelemetryRuleForOrganization",
+      "http":{
+        "method":"POST",
+        "requestUri":"/UpdateTelemetryRuleForOrganization",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateTelemetryRuleForOrganizationInput"},
+      "output":{"shape":"UpdateTelemetryRuleForOrganizationOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p> This action offboards the Organization of the caller AWS account from thef telemetry config feature. </p>"
+      "documentation":"<p> Updates an existing telemetry rule that applies across an Amazon Web Services Organization. This operation can only be called by the organization's management account or a delegated administrator account. </p>"
     }
   },
   "shapes":{
@@ -143,7 +534,7 @@
           "locationName":"x-amzn-ErrorType"
         }
       },
-      "documentation":"<p> Indicates you don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html\">Access management for AWS resources</a> in the IAM user guide. </p>",
+      "documentation":"<p> Indicates you don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html\">Access management for Amazon Web Services resources</a> in the IAM user guide. </p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -160,9 +551,368 @@
       "type":"list",
       "member":{"shape":"AccountIdentifier"},
       "max":10,
-      "min":0
+      "min":1
+    },
+    "AwsResourceExplorerManagedViewArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:aws([a-z0-9\\-]+)?:resource-explorer-2:([a-z0-9\\-]+)?:([0-9]{12})?:managed-view/(.+)"
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CentralizationFailureReason":{
+      "type":"string",
+      "enum":[
+        "TRUSTED_ACCESS_NOT_ENABLED",
+        "DESTINATION_ACCOUNT_NOT_IN_ORGANIZATION",
+        "INTERNAL_SERVER_ERROR"
+      ]
+    },
+    "CentralizationRule":{
+      "type":"structure",
+      "required":[
+        "Source",
+        "Destination"
+      ],
+      "members":{
+        "Source":{
+          "shape":"CentralizationRuleSource",
+          "documentation":"<p>Configuration determining the source of the telemetry data to be centralized.</p>"
+        },
+        "Destination":{
+          "shape":"CentralizationRuleDestination",
+          "documentation":"<p>Configuration determining where the telemetry data should be centralized, backed up, as well as encryption configuration for the primary and backup destinations.</p>"
+        }
+      },
+      "documentation":"<p>Defines how telemetry data should be centralized across an Amazon Web Services Organization, including source and destination configurations.</p>"
+    },
+    "CentralizationRuleDestination":{
+      "type":"structure",
+      "required":["Region"],
+      "members":{
+        "Region":{
+          "shape":"Region",
+          "documentation":"<p>The primary destination region to which telemetry data should be centralized.</p>"
+        },
+        "Account":{
+          "shape":"AccountIdentifier",
+          "documentation":"<p>The destination account (within the organization) to which the telemetry data should be centralized.</p>"
+        },
+        "DestinationLogsConfiguration":{
+          "shape":"DestinationLogsConfiguration",
+          "documentation":"<p>Log specific configuration for centralization destination log groups.</p>"
+        }
+      },
+      "documentation":"<p>Configuration specifying the primary destination for centralized telemetry data.</p>"
+    },
+    "CentralizationRuleSource":{
+      "type":"structure",
+      "required":["Regions"],
+      "members":{
+        "Regions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of source regions from which telemetry data should be centralized.</p>"
+        },
+        "Scope":{
+          "shape":"SourceFilterString",
+          "documentation":"<p>The organizational scope from which telemetry data should be centralized, specified using organization id, accounts or organizational unit ids.</p>"
+        },
+        "SourceLogsConfiguration":{
+          "shape":"SourceLogsConfiguration",
+          "documentation":"<p>Log specific configuration for centralization source log groups.</p>"
+        }
+      },
+      "documentation":"<p>Configuration specifying the source of telemetry data to be centralized.</p>"
+    },
+    "CentralizationRuleSummaries":{
+      "type":"list",
+      "member":{"shape":"CentralizationRuleSummary"}
+    },
+    "CentralizationRuleSummary":{
+      "type":"structure",
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the organization centralization rule.</p>"
+        },
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the organization centralization rule.</p>"
+        },
+        "CreatorAccountId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Account that created the organization centralization rule.</p>"
+        },
+        "CreatedTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp when the organization centralization rule was created.</p>"
+        },
+        "CreatedRegion":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Web Services region where the organization centralization rule was created.</p>"
+        },
+        "LastUpdateTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp when the organization centralization rule was last updated.</p>"
+        },
+        "RuleHealth":{
+          "shape":"RuleHealth",
+          "documentation":"<p>The health status of the organization centralization rule.</p>"
+        },
+        "FailureReason":{
+          "shape":"CentralizationFailureReason",
+          "documentation":"<p>The reason why an organization centralization rule is marked UNHEALTHY.</p>"
+        },
+        "DestinationAccountId":{
+          "shape":"String",
+          "documentation":"<p>The primary destination account of the organization centralization rule.</p>"
+        },
+        "DestinationRegion":{
+          "shape":"Region",
+          "documentation":"<p>The primary destination region of the organization centralization rule.</p>"
+        }
+      },
+      "documentation":"<p>A summary of a centralization rule's key properties and status.</p>"
+    },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"}
+      },
+      "documentation":"<p> The requested operation conflicts with the current state of the specified resource or with another request. </p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateCentralizationRuleForOrganizationInput":{
+      "type":"structure",
+      "required":[
+        "RuleName",
+        "Rule"
+      ],
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p>A unique name for the organization-wide centralization rule being created.</p>"
+        },
+        "Rule":{
+          "shape":"CentralizationRule",
+          "documentation":"<p>The configuration details for the organization-wide centralization rule, including the source configuration and the destination configuration to centralize telemetry data across the organization.</p>"
+        },
+        "Tags":{
+          "shape":"TagMapInput",
+          "documentation":"<p>The key-value pairs to associate with the organization telemetry rule resource for categorization and management purposes.</p>"
+        }
+      }
+    },
+    "CreateCentralizationRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created organization centralization rule.</p>"
+        }
+      }
+    },
+    "CreateTelemetryRuleForOrganizationInput":{
+      "type":"structure",
+      "required":[
+        "RuleName",
+        "Rule"
+      ],
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p> A unique name for the organization-wide telemetry rule being created. </p>"
+        },
+        "Rule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The configuration details for the organization-wide telemetry rule, including the resource type, telemetry type, destination configuration, and selection criteria for which resources the rule applies to across the organization. </p>"
+        },
+        "Tags":{
+          "shape":"TagMapInput",
+          "documentation":"<p> The key-value pairs to associate with the organization telemetry rule resource for categorization and management purposes. </p>"
+        }
+      }
+    },
+    "CreateTelemetryRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the created organization telemetry rule. </p>"
+        }
+      }
+    },
+    "CreateTelemetryRuleInput":{
+      "type":"structure",
+      "required":[
+        "RuleName",
+        "Rule"
+      ],
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p> A unique name for the telemetry rule being created. </p>"
+        },
+        "Rule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The configuration details for the telemetry rule, including the resource type, telemetry type, destination configuration, and selection criteria for which resources the rule applies to. </p>"
+        },
+        "Tags":{
+          "shape":"TagMapInput",
+          "documentation":"<p> The key-value pairs to associate with the telemetry rule resource for categorization and management purposes. </p>"
+        }
+      }
+    },
+    "CreateTelemetryRuleOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the created telemetry rule. </p>"
+        }
+      }
+    },
+    "DeleteCentralizationRuleForOrganizationInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The identifier (name or ARN) of the organization centralization rule to delete.</p>"
+        }
+      }
+    },
+    "DeleteTelemetryRuleForOrganizationInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the organization telemetry rule to delete. </p>"
+        }
+      }
+    },
+    "DeleteTelemetryRuleInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the telemetry rule to delete. </p>"
+        }
+      }
+    },
+    "DestinationLogsConfiguration":{
+      "type":"structure",
+      "members":{
+        "LogsEncryptionConfiguration":{
+          "shape":"LogsEncryptionConfiguration",
+          "documentation":"<p>The encryption configuration for centralization destination log groups.</p>"
+        },
+        "BackupConfiguration":{
+          "shape":"LogsBackupConfiguration",
+          "documentation":"<p>Configuration defining the backup region and an optional KMS key for the backup destination.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for centralization destination log groups, including encryption and backup settings.</p>"
+    },
+    "DestinationType":{
+      "type":"string",
+      "enum":["cloud-watch-logs"]
+    },
+    "EncryptedLogGroupStrategy":{
+      "type":"string",
+      "enum":[
+        "ALLOW",
+        "SKIP"
+      ]
+    },
+    "EncryptionConflictResolutionStrategy":{
+      "type":"string",
+      "enum":[
+        "ALLOW",
+        "SKIP"
+      ]
+    },
+    "EncryptionStrategy":{
+      "type":"string",
+      "enum":[
+        "CUSTOMER_MANAGED",
+        "AWS_OWNED"
+      ]
     },
     "FailureReason":{"type":"string"},
+    "GetCentralizationRuleForOrganizationInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The identifier (name or ARN) of the organization centralization rule to retrieve.</p>"
+        }
+      }
+    },
+    "GetCentralizationRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the organization centralization rule.</p>"
+        },
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the organization centralization rule.</p>"
+        },
+        "CreatorAccountId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services Account that created the organization centralization rule.</p>"
+        },
+        "CreatedTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp when the organization centralization rule was created.</p>"
+        },
+        "CreatedRegion":{
+          "shape":"Region",
+          "documentation":"<p>The Amazon Web Services region where the organization centralization rule was created.</p>"
+        },
+        "LastUpdateTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp when the organization centralization rule was last updated.</p>"
+        },
+        "RuleHealth":{
+          "shape":"RuleHealth",
+          "documentation":"<p>The health status of the organization centralization rule.</p>"
+        },
+        "FailureReason":{
+          "shape":"CentralizationFailureReason",
+          "documentation":"<p>The reason why an organization centralization rule is marked UNHEALTHY.</p>"
+        },
+        "CentralizationRule":{
+          "shape":"CentralizationRule",
+          "documentation":"<p>The configuration details for the organization centralization rule.</p>"
+        }
+      }
+    },
+    "GetTelemetryEnrichmentStatusOutput":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"TelemetryEnrichmentStatus",
+          "documentation":"<p> The current status of the resource tags for telemetry feature (<code>Running</code>, <code>Stopped</code>, or <code>Impaired</code>). </p>"
+        },
+        "AwsResourceExplorerManagedViewArn":{
+          "shape":"AwsResourceExplorerManagedViewArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the Amazon Web Services Resource Explorer managed view used for resource tags for telemetry, if the feature is enabled. </p>"
+        }
+      }
+    },
     "GetTelemetryEvaluationStatusForOrganizationOutput":{
       "type":"structure",
       "members":{
@@ -189,6 +939,80 @@
         }
       }
     },
+    "GetTelemetryRuleForOrganizationInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the organization telemetry rule to retrieve. </p>"
+        }
+      }
+    },
+    "GetTelemetryRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p> The name of the organization telemetry rule. </p>"
+        },
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the organization telemetry rule. </p>"
+        },
+        "CreatedTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the organization telemetry rule was created. </p>"
+        },
+        "LastUpdateTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the organization telemetry rule was last updated. </p>"
+        },
+        "TelemetryRule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The configuration details of the organization telemetry rule. </p>"
+        }
+      }
+    },
+    "GetTelemetryRuleInput":{
+      "type":"structure",
+      "required":["RuleIdentifier"],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the telemetry rule to retrieve. </p>"
+        }
+      }
+    },
+    "GetTelemetryRuleOutput":{
+      "type":"structure",
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p> The name of the telemetry rule. </p>"
+        },
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the telemetry rule. </p>"
+        },
+        "CreatedTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the telemetry rule was created. </p>"
+        },
+        "LastUpdateTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the telemetry rule was last updated. </p>"
+        },
+        "TelemetryRule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The configuration details of the telemetry rule. </p>"
+        }
+      }
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
     "InternalServerException":{
       "type":"structure",
       "members":{
@@ -205,12 +1029,57 @@
       "exception":true,
       "fault":true
     },
+    "ListCentralizationRulesForOrganizationInput":{
+      "type":"structure",
+      "members":{
+        "RuleNamePrefix":{
+          "shape":"ListCentralizationRulesForOrganizationInputRuleNamePrefixString",
+          "documentation":"<p>A string to filter organization centralization rules whose names begin with the specified prefix.</p>"
+        },
+        "AllRegions":{
+          "shape":"Boolean",
+          "documentation":"<p>A flag determining whether to return organization centralization rules from all regions or only the current region.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListCentralizationRulesForOrganizationMaxResults",
+          "documentation":"<p>The maximum number of organization centralization rules to return in a single call.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. A previous call generates this token.</p>"
+        }
+      }
+    },
+    "ListCentralizationRulesForOrganizationInputRuleNamePrefixString":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "ListCentralizationRulesForOrganizationMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListCentralizationRulesForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "CentralizationRuleSummaries":{
+          "shape":"CentralizationRuleSummaries",
+          "documentation":"<p>A list of centralization rule summaries.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to resume pagination of results.</p>"
+        }
+      }
+    },
     "ListResourceTelemetryForOrganizationInput":{
       "type":"structure",
       "members":{
         "AccountIdentifiers":{
           "shape":"AccountIdentifiers",
-          "documentation":"<p> A list of AWS account IDs used to filter the resources to those associated with the specified accounts. </p>"
+          "documentation":"<p> A list of Amazon Web Services accounts used to filter the resources to those associated with the specified accounts. </p>"
         },
         "ResourceIdentifierPrefix":{
           "shape":"ResourceIdentifierPrefix",
@@ -249,7 +1118,7 @@
       "members":{
         "TelemetryConfigurations":{
           "shape":"TelemetryConfigurations",
-          "documentation":"<p> A list of telemetry configurations for AWS resources supported by telemetry config in the organization. </p>"
+          "documentation":"<p> A list of telemetry configurations for Amazon Web Services resources supported by telemetry config in the organization. </p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -297,7 +1166,7 @@
       "members":{
         "TelemetryConfigurations":{
           "shape":"TelemetryConfigurations",
-          "documentation":"<p> A list of telemetry configurations for AWS resources supported by telemetry config in the caller's account. </p>"
+          "documentation":"<p> A list of telemetry configurations for Amazon Web Services resources supported by telemetry config in the caller's account. </p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -305,17 +1174,192 @@
         }
       }
     },
+    "ListTagsForResourceInput":{
+      "type":"structure",
+      "required":["ResourceARN"],
+      "members":{
+        "ResourceARN":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the telemetry rule resource whose tags you want to list. </p>"
+        }
+      }
+    },
+    "ListTagsForResourceOutput":{
+      "type":"structure",
+      "required":["Tags"],
+      "members":{
+        "Tags":{
+          "shape":"TagMapOutput",
+          "documentation":"<p> The list of tags associated with the telemetry rule resource. </p>"
+        }
+      }
+    },
+    "ListTelemetryRulesForOrganizationInput":{
+      "type":"structure",
+      "members":{
+        "RuleNamePrefix":{
+          "shape":"String",
+          "documentation":"<p> A string to filter organization telemetry rules whose names begin with the specified prefix. </p>"
+        },
+        "SourceAccountIds":{
+          "shape":"AccountIdentifiers",
+          "documentation":"<p> The list of account IDs to filter organization telemetry rules by their source accounts. </p>"
+        },
+        "SourceOrganizationUnitIds":{
+          "shape":"OrganizationUnitIdentifiers",
+          "documentation":"<p> The list of organizational unit IDs to filter organization telemetry rules by their source organizational units. </p>"
+        },
+        "MaxResults":{
+          "shape":"ListTelemetryRulesForOrganizationMaxResults",
+          "documentation":"<p> The maximum number of organization telemetry rules to return in a single call. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token for the next set of results. A previous call generates this token. </p>"
+        }
+      }
+    },
+    "ListTelemetryRulesForOrganizationMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListTelemetryRulesForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "TelemetryRuleSummaries":{
+          "shape":"TelemetryRuleSummaries",
+          "documentation":"<p> A list of organization telemetry rule summaries. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> A token to resume pagination of results. </p>"
+        }
+      }
+    },
+    "ListTelemetryRulesInput":{
+      "type":"structure",
+      "members":{
+        "RuleNamePrefix":{
+          "shape":"String",
+          "documentation":"<p> A string to filter telemetry rules whose names begin with the specified prefix. </p>"
+        },
+        "MaxResults":{
+          "shape":"ListTelemetryRulesMaxResults",
+          "documentation":"<p> The maximum number of telemetry rules to return in a single call. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token for the next set of results. A previous call generates this token. </p>"
+        }
+      }
+    },
+    "ListTelemetryRulesMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListTelemetryRulesOutput":{
+      "type":"structure",
+      "members":{
+        "TelemetryRuleSummaries":{
+          "shape":"TelemetryRuleSummaries",
+          "documentation":"<p> A list of telemetry rule summaries. </p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> A token to resume pagination of results. </p>"
+        }
+      }
+    },
+    "LogsBackupConfiguration":{
+      "type":"structure",
+      "required":["Region"],
+      "members":{
+        "Region":{
+          "shape":"Region",
+          "documentation":"<p>Logs specific backup destination region within the primary destination account to which log data should be centralized.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>KMS Key arn belonging to the primary destination account and backup region, to encrypt newly created central log groups in the backup destination.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for backing up centralized log data to a secondary region.</p>"
+    },
+    "LogsEncryptionConfiguration":{
+      "type":"structure",
+      "required":["EncryptionStrategy"],
+      "members":{
+        "EncryptionStrategy":{
+          "shape":"EncryptionStrategy",
+          "documentation":"<p>Configuration that determines the encryption strategy of the destination log groups. CUSTOMER_MANAGED uses the configured KmsKeyArn to encrypt newly created destination log groups.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>KMS Key arn belonging to the primary destination account and region, to encrypt newly created central log groups in the primary destination.</p>"
+        },
+        "EncryptionConflictResolutionStrategy":{
+          "shape":"EncryptionConflictResolutionStrategy",
+          "documentation":"<p>Conflict resolution strategy for centralization if the encryption strategy is set to CUSTOMER_MANAGED and the destination log group is encrypted with an AWS_OWNED KMS Key. ALLOW lets centralization go through while SKIP prevents centralization into the destination log group.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for encrypting centralized log groups. This configuration is only applied to destination log groups for which the corresponding source log groups are encrypted using Customer Managed KMS Keys.</p>"
+    },
+    "LogsFilterString":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
     "Long":{
       "type":"long",
       "box":true
     },
     "NextToken":{"type":"string"},
+    "OrganizationUnitIdentifier":{
+      "type":"string",
+      "pattern":"ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}"
+    },
+    "OrganizationUnitIdentifiers":{
+      "type":"list",
+      "member":{"shape":"OrganizationUnitIdentifier"},
+      "min":1
+    },
+    "Region":{
+      "type":"string",
+      "min":1
+    },
+    "Regions":{
+      "type":"list",
+      "member":{"shape":"Region"},
+      "min":1
+    },
+    "ResourceArn":{
+      "type":"string",
+      "max":1011,
+      "min":1,
+      "pattern":"arn:aws([a-z0-9\\-]+)?:([a-zA-Z0-9\\-]+):([a-z0-9\\-]+)?:([0-9]{12})?:(.+)"
+    },
     "ResourceIdentifier":{"type":"string"},
     "ResourceIdentifierPrefix":{
       "type":"string",
       "max":768,
       "min":3
     },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"}
+      },
+      "documentation":"<p> The specified resource (such as a telemetry rule) could not be found. </p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ResourceType":{
       "type":"string",
       "enum":[
@@ -327,9 +1371,88 @@
     "ResourceTypes":{
       "type":"list",
       "member":{"shape":"ResourceType"},
-      "max":5,
+      "max":9,
+      "min":1
+    },
+    "RetentionPeriodInDays":{
+      "type":"integer",
+      "box":true,
+      "max":3653,
+      "min":1
+    },
+    "RuleHealth":{
+      "type":"string",
+      "enum":[
+        "Healthy",
+        "Unhealthy",
+        "Provisioning"
+      ]
+    },
+    "RuleIdentifier":{
+      "type":"string",
+      "max":1011,
       "min":1
     },
+    "RuleName":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[0-9A-Za-z-_.#/]+"
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"},
+        "amznErrorType":{
+          "shape":"String",
+          "documentation":"<p> The name of the exception. </p>",
+          "location":"header",
+          "locationName":"x-amzn-ErrorType"
+        }
+      },
+      "documentation":"<p> The requested operation would exceed the allowed quota for the specified resource type. </p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "SourceFilterString":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
+    "SourceLogsConfiguration":{
+      "type":"structure",
+      "required":[
+        "LogGroupSelectionCriteria",
+        "EncryptedLogGroupStrategy"
+      ],
+      "members":{
+        "LogGroupSelectionCriteria":{
+          "shape":"LogsFilterString",
+          "documentation":"<p>The selection criteria that specifies which source log groups to centralize. The selection criteria uses the same format as OAM link filters.</p>"
+        },
+        "EncryptedLogGroupStrategy":{
+          "shape":"EncryptedLogGroupStrategy",
+          "documentation":"<p>A strategy determining whether to centralize source log groups that are encrypted with customer managed KMS keys (CMK). ALLOW will consider CMK encrypted source log groups for centralization while SKIP will skip CMK encrypted source log groups from centralization.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for selecting and handling source log groups for centralization.</p>"
+    },
+    "StartTelemetryEnrichmentOutput":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"TelemetryEnrichmentStatus",
+          "documentation":"<p> The status of the resource tags for telemetry feature after the start operation (<code>Running</code>, <code>Stopped</code>, or <code>Impaired</code>). </p>"
+        },
+        "AwsResourceExplorerManagedViewArn":{
+          "shape":"AwsResourceExplorerManagedViewArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the Amazon Web Services Resource Explorer managed view created for resource tags for telemetry. </p>"
+        }
+      }
+    },
     "Status":{
       "type":"string",
       "enum":[
@@ -342,6 +1465,15 @@
         "STOPPED"
       ]
     },
+    "StopTelemetryEnrichmentOutput":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"TelemetryEnrichmentStatus",
+          "documentation":"<p> The status of the resource tags for telemetry feature after the stop operation (<code>Running</code>, <code>Stopped</code>, or <code>Impaired</code>). </p>"
+        }
+      }
+    },
     "String":{"type":"string"},
     "TagKey":{
       "type":"string",
@@ -349,18 +1481,41 @@
       "min":1,
       "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":50,
+      "min":1
+    },
     "TagMapInput":{
       "type":"map",
       "key":{"shape":"TagKey"},
       "value":{"shape":"TagValue"},
       "max":50,
-      "min":0
+      "min":1
     },
     "TagMapOutput":{
       "type":"map",
       "key":{"shape":"String"},
       "value":{"shape":"String"}
     },
+    "TagResourceInput":{
+      "type":"structure",
+      "required":[
+        "ResourceARN",
+        "Tags"
+      ],
+      "members":{
+        "ResourceARN":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the telemetry rule resource to tag. </p>"
+        },
+        "Tags":{
+          "shape":"TagMapInput",
+          "documentation":"<p> The key-value pairs to add or update for the telemetry rule resource. </p>"
+        }
+      }
+    },
     "TagValue":{
       "type":"string",
       "max":256,
@@ -380,7 +1535,7 @@
         },
         "ResourceType":{
           "shape":"ResourceType",
-          "documentation":"<p> The type of resource, for example <code>AWS::EC2::Instance</code>. </p>"
+          "documentation":"<p> The type of resource, for example <code>Amazon Web Services::EC2::Instance</code>. </p>"
         },
         "ResourceIdentifier":{
           "shape":"ResourceIdentifier",
@@ -406,6 +1561,97 @@
       "type":"list",
       "member":{"shape":"TelemetryConfiguration"}
     },
+    "TelemetryDestinationConfiguration":{
+      "type":"structure",
+      "members":{
+        "DestinationType":{
+          "shape":"DestinationType",
+          "documentation":"<p> The type of destination for the telemetry data (e.g., \"Amazon CloudWatch Logs\", \"S3\"). </p>"
+        },
+        "DestinationPattern":{
+          "shape":"String",
+          "documentation":"<p> The pattern used to generate the destination path or name, supporting macros like &lt;resourceId&gt; and &lt;accountId&gt;. </p>"
+        },
+        "RetentionInDays":{
+          "shape":"RetentionPeriodInDays",
+          "documentation":"<p> The number of days to retain the telemetry data in the destination. </p>"
+        },
+        "VPCFlowLogParameters":{
+          "shape":"VPCFlowLogParameters",
+          "documentation":"<p> Configuration parameters specific to VPC Flow Logs when VPC is the resource type. </p>"
+        }
+      },
+      "documentation":"<p> Configuration specifying where and how telemetry data should be delivered for Amazon Web Services resources. </p>"
+    },
+    "TelemetryEnrichmentStatus":{
+      "type":"string",
+      "enum":[
+        "Running",
+        "Stopped",
+        "Impaired"
+      ]
+    },
+    "TelemetryRule":{
+      "type":"structure",
+      "required":["TelemetryType"],
+      "members":{
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> The type of Amazon Web Services resource to configure telemetry for (e.g., \"AWS::EC2::VPC\"). </p>"
+        },
+        "TelemetryType":{
+          "shape":"TelemetryType",
+          "documentation":"<p> The type of telemetry to collect (Logs, Metrics, or Traces). </p>"
+        },
+        "DestinationConfiguration":{
+          "shape":"TelemetryDestinationConfiguration",
+          "documentation":"<p> Configuration specifying where and how the telemetry data should be delivered. </p>"
+        },
+        "Scope":{
+          "shape":"String",
+          "documentation":"<p> The organizational scope to which the rule applies, specified using accounts or organizational units. </p>"
+        },
+        "SelectionCriteria":{
+          "shape":"String",
+          "documentation":"<p> Criteria for selecting which resources the rule applies to, such as resource tags. </p>"
+        }
+      },
+      "documentation":"<p> Defines how telemetry should be configured for specific Amazon Web Services resources. </p>"
+    },
+    "TelemetryRuleSummaries":{
+      "type":"list",
+      "member":{"shape":"TelemetryRuleSummary"}
+    },
+    "TelemetryRuleSummary":{
+      "type":"structure",
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p> The name of the telemetry rule. </p>"
+        },
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the telemetry rule. </p>"
+        },
+        "CreatedTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the telemetry rule was created. </p>"
+        },
+        "LastUpdateTimeStamp":{
+          "shape":"Long",
+          "documentation":"<p> The timestamp when the telemetry rule was last modified. </p>"
+        },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> The type of Amazon Web Services resource the rule applies to. </p>"
+        },
+        "TelemetryType":{
+          "shape":"TelemetryType",
+          "documentation":"<p> The type of telemetry (Logs, Metrics, or Traces) the rule configures. </p>"
+        }
+      },
+      "documentation":"<p> A summary of a telemetry rule's key properties. </p>"
+    },
     "TelemetryState":{
       "type":"string",
       "enum":[
@@ -422,6 +1668,131 @@
         "Traces"
       ]
     },
+    "TooManyRequestsException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"}
+      },
+      "documentation":"<p> The request throughput limit was exceeded. </p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UntagResourceInput":{
+      "type":"structure",
+      "required":[
+        "ResourceARN",
+        "TagKeys"
+      ],
+      "members":{
+        "ResourceARN":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the telemetry rule resource to remove tags from. </p>"
+        },
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p> The list of tag keys to remove from the telemetry rule resource. </p>"
+        }
+      }
+    },
+    "UpdateCentralizationRuleForOrganizationInput":{
+      "type":"structure",
+      "required":[
+        "RuleIdentifier",
+        "Rule"
+      ],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The identifier (name or ARN) of the organization centralization rule to update.</p>"
+        },
+        "Rule":{
+          "shape":"CentralizationRule",
+          "documentation":"<p>The configuration details for the organization-wide centralization rule, including the source configuration and the destination configuration to centralize telemetry data across the organization.</p>"
+        }
+      }
+    },
+    "UpdateCentralizationRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated organization centralization rule.</p>"
+        }
+      }
+    },
+    "UpdateTelemetryRuleForOrganizationInput":{
+      "type":"structure",
+      "required":[
+        "RuleIdentifier",
+        "Rule"
+      ],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the organization telemetry rule to update. </p>"
+        },
+        "Rule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The new configuration details for the organization telemetry rule, including resource type, telemetry type, and destination configuration. </p>"
+        }
+      }
+    },
+    "UpdateTelemetryRuleForOrganizationOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the updated organization telemetry rule. </p>"
+        }
+      }
+    },
+    "UpdateTelemetryRuleInput":{
+      "type":"structure",
+      "required":[
+        "RuleIdentifier",
+        "Rule"
+      ],
+      "members":{
+        "RuleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p> The identifier (name or ARN) of the telemetry rule to update. </p>"
+        },
+        "Rule":{
+          "shape":"TelemetryRule",
+          "documentation":"<p> The new configuration details for the telemetry rule. </p>"
+        }
+      }
+    },
+    "UpdateTelemetryRuleOutput":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the updated telemetry rule. </p>"
+        }
+      }
+    },
+    "VPCFlowLogParameters":{
+      "type":"structure",
+      "members":{
+        "LogFormat":{
+          "shape":"String",
+          "documentation":"<p> The format in which VPC Flow Log entries should be logged. </p>"
+        },
+        "TrafficType":{
+          "shape":"String",
+          "documentation":"<p> The type of traffic to log (ACCEPT, REJECT, or ALL). </p>"
+        },
+        "MaxAggregationInterval":{
+          "shape":"Integer",
+          "documentation":"<p> The maximum interval in seconds between the capture of flow log records. </p>"
+        }
+      },
+      "documentation":"<p> Configuration parameters specific to VPC Flow Logs. </p>"
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -435,5 +1806,5 @@
       "exception":true
     }
   },
-  "documentation":"<p> Amazon CloudWatch Obsersavability Admin to control temletry config for your AWS Organization or account. Telemetry config conﬁg to discover and understand the state of telemetry conﬁguration for your AWS resources from a central view in the CloudWatch console. Telemetry conﬁg simpliﬁes the process of auditing your telemetry collection conﬁgurations across multiple resource types across your AWS Organization or account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/telemetry-config-cloudwatch.html\">Auditing CloudWatch telemetry conﬁgurations</a> in the CloudWatch User Guide.</p> <p>For information on the permissions you need to use this API, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html\">Identity and access management for Amazon CloudWatch</a> in the CloudWatch User Guide.</p>"
+  "documentation":"<p> You can use Amazon CloudWatch Observability Admin to discover and understand the state of telemetry configuration in CloudWatch for your Amazon Web Services Organization or account. This simplifies the process of auditing your telemetry collection configurations across multiple resource types within your Amazon Web Services Organization or account. By providing a consolidated view, it allows you to easily review and manage telemetry settings, helping you ensure proper monitoring and data collection across your Amazon Web Services environment. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/telemetry-config-cloudwatch.html\">Auditing CloudWatch telemetry conﬁgurations</a> in the CloudWatch User Guide.</p> <p>For information on the permissions you need to use this API, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html\">Identity and access management for Amazon CloudWatch</a> in the CloudWatch User Guide.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/odb/2024-08-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/odb/2024-08-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/odb/2024-08-20/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/odb/2024-08-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://odb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://odb-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://odb.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://odb.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/odb/2024-08-20/paginators-1.json 2.31.35-1/awscli/botocore/data/odb/2024-08-20/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/odb/2024-08-20/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/odb/2024-08-20/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,70 @@
+{
+  "pagination": {
+    "ListAutonomousVirtualMachines": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "autonomousVirtualMachines"
+    },
+    "ListCloudAutonomousVmClusters": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "cloudAutonomousVmClusters"
+    },
+    "ListCloudExadataInfrastructures": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "cloudExadataInfrastructures"
+    },
+    "ListCloudVmClusters": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "cloudVmClusters"
+    },
+    "ListDbNodes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dbNodes"
+    },
+    "ListDbServers": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dbServers"
+    },
+    "ListDbSystemShapes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "dbSystemShapes"
+    },
+    "ListGiVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "giVersions"
+    },
+    "ListOdbNetworks": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "odbNetworks"
+    },
+    "ListOdbPeeringConnections": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "odbPeeringConnections"
+    },
+    "ListSystemVersions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "systemVersions"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/odb/2024-08-20/service-2.json 2.31.35-1/awscli/botocore/data/odb/2024-08-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/odb/2024-08-20/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/odb/2024-08-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5282 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2024-08-20",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"odb",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceFullName":"odb",
+    "serviceId":"odb",
+    "signatureVersion":"v4",
+    "signingName":"odb",
+    "targetPrefix":"Odb",
+    "uid":"odb-2024-08-20"
+  },
+  "operations":{
+    "AcceptMarketplaceRegistration":{
+      "name":"AcceptMarketplaceRegistration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AcceptMarketplaceRegistrationInput"},
+      "output":{"shape":"AcceptMarketplaceRegistrationOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Registers the Amazon Web Services Marketplace token for your Amazon Web Services account to activate your Oracle Database@Amazon Web Services subscription.</p>",
+      "idempotent":true
+    },
+    "CreateCloudAutonomousVmCluster":{
+      "name":"CreateCloudAutonomousVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateCloudAutonomousVmClusterInput"},
+      "output":{"shape":"CreateCloudAutonomousVmClusterOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a new Autonomous VM cluster in the specified Exadata infrastructure.</p>",
+      "idempotent":true
+    },
+    "CreateCloudExadataInfrastructure":{
+      "name":"CreateCloudExadataInfrastructure",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateCloudExadataInfrastructureInput"},
+      "output":{"shape":"CreateCloudExadataInfrastructureOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates an Exadata infrastructure.</p>",
+      "idempotent":true
+    },
+    "CreateCloudVmCluster":{
+      "name":"CreateCloudVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateCloudVmClusterInput"},
+      "output":{"shape":"CreateCloudVmClusterOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a VM cluster on the specified Exadata infrastructure.</p>",
+      "idempotent":true
+    },
+    "CreateOdbNetwork":{
+      "name":"CreateOdbNetwork",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateOdbNetworkInput"},
+      "output":{"shape":"CreateOdbNetworkOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates an ODB network.</p>",
+      "idempotent":true
+    },
+    "CreateOdbPeeringConnection":{
+      "name":"CreateOdbPeeringConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateOdbPeeringConnectionInput"},
+      "output":{"shape":"CreateOdbPeeringConnectionOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a peering connection between an ODB network and a VPC.</p> <p>A peering connection enables private connectivity between the networks for application-tier communication.</p>",
+      "idempotent":true
+    },
+    "DeleteCloudAutonomousVmCluster":{
+      "name":"DeleteCloudAutonomousVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteCloudAutonomousVmClusterInput"},
+      "output":{"shape":"DeleteCloudAutonomousVmClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes an Autonomous VM cluster.</p>",
+      "idempotent":true
+    },
+    "DeleteCloudExadataInfrastructure":{
+      "name":"DeleteCloudExadataInfrastructure",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteCloudExadataInfrastructureInput"},
+      "output":{"shape":"DeleteCloudExadataInfrastructureOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes the specified Exadata infrastructure. Before you use this operation, make sure to delete all of the VM clusters that are hosted on this Exadata infrastructure.</p>",
+      "idempotent":true
+    },
+    "DeleteCloudVmCluster":{
+      "name":"DeleteCloudVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteCloudVmClusterInput"},
+      "output":{"shape":"DeleteCloudVmClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes the specified VM cluster.</p>",
+      "idempotent":true
+    },
+    "DeleteOdbNetwork":{
+      "name":"DeleteOdbNetwork",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteOdbNetworkInput"},
+      "output":{"shape":"DeleteOdbNetworkOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes the specified ODB network.</p>",
+      "idempotent":true
+    },
+    "DeleteOdbPeeringConnection":{
+      "name":"DeleteOdbPeeringConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteOdbPeeringConnectionInput"},
+      "output":{"shape":"DeleteOdbPeeringConnectionOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Deletes an ODB peering connection.</p> <p>When you delete an ODB peering connection, the underlying VPC peering connection is also deleted.</p>",
+      "idempotent":true
+    },
+    "GetCloudAutonomousVmCluster":{
+      "name":"GetCloudAutonomousVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCloudAutonomousVmClusterInput"},
+      "output":{"shape":"GetCloudAutonomousVmClusterOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Gets information about a specific Autonomous VM cluster.</p>",
+      "readonly":true
+    },
+    "GetCloudExadataInfrastructure":{
+      "name":"GetCloudExadataInfrastructure",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCloudExadataInfrastructureInput"},
+      "output":{"shape":"GetCloudExadataInfrastructureOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the specified Exadata infrastructure.</p>",
+      "readonly":true
+    },
+    "GetCloudExadataInfrastructureUnallocatedResources":{
+      "name":"GetCloudExadataInfrastructureUnallocatedResources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCloudExadataInfrastructureUnallocatedResourcesInput"},
+      "output":{"shape":"GetCloudExadataInfrastructureUnallocatedResourcesOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves information about unallocated resources in a specified Cloud Exadata Infrastructure.</p>",
+      "readonly":true
+    },
+    "GetCloudVmCluster":{
+      "name":"GetCloudVmCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCloudVmClusterInput"},
+      "output":{"shape":"GetCloudVmClusterOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the specified VM cluster.</p>",
+      "readonly":true
+    },
+    "GetDbNode":{
+      "name":"GetDbNode",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDbNodeInput"},
+      "output":{"shape":"GetDbNodeOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the specified DB node.</p>",
+      "readonly":true
+    },
+    "GetDbServer":{
+      "name":"GetDbServer",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDbServerInput"},
+      "output":{"shape":"GetDbServerOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the specified database server.</p>",
+      "readonly":true
+    },
+    "GetOciOnboardingStatus":{
+      "name":"GetOciOnboardingStatus",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetOciOnboardingStatusInput"},
+      "output":{"shape":"GetOciOnboardingStatusOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns the tenancy activation link and onboarding status for your Amazon Web Services account.</p>",
+      "readonly":true
+    },
+    "GetOdbNetwork":{
+      "name":"GetOdbNetwork",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetOdbNetworkInput"},
+      "output":{"shape":"GetOdbNetworkOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the specified ODB network.</p>",
+      "readonly":true
+    },
+    "GetOdbPeeringConnection":{
+      "name":"GetOdbPeeringConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetOdbPeeringConnectionInput"},
+      "output":{"shape":"GetOdbPeeringConnectionOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves information about an ODB peering connection.</p>",
+      "readonly":true
+    },
+    "InitializeService":{
+      "name":"InitializeService",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"InitializeServiceInput"},
+      "output":{"shape":"InitializeServiceOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Initializes the ODB service for the first time in an account.</p>",
+      "idempotent":true
+    },
+    "ListAutonomousVirtualMachines":{
+      "name":"ListAutonomousVirtualMachines",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAutonomousVirtualMachinesInput"},
+      "output":{"shape":"ListAutonomousVirtualMachinesOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Lists all Autonomous VMs in an Autonomous VM cluster.</p>",
+      "readonly":true
+    },
+    "ListCloudAutonomousVmClusters":{
+      "name":"ListCloudAutonomousVmClusters",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListCloudAutonomousVmClustersInput"},
+      "output":{"shape":"ListCloudAutonomousVmClustersOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Lists all Autonomous VM clusters in a specified Cloud Exadata infrastructure.</p>",
+      "readonly":true
+    },
+    "ListCloudExadataInfrastructures":{
+      "name":"ListCloudExadataInfrastructures",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListCloudExadataInfrastructuresInput"},
+      "output":{"shape":"ListCloudExadataInfrastructuresOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about the Exadata infrastructures owned by your Amazon Web Services account.</p>",
+      "readonly":true
+    },
+    "ListCloudVmClusters":{
+      "name":"ListCloudVmClusters",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListCloudVmClustersInput"},
+      "output":{"shape":"ListCloudVmClustersOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the VM clusters owned by your Amazon Web Services account or only the ones on the specified Exadata infrastructure.</p>",
+      "readonly":true
+    },
+    "ListDbNodes":{
+      "name":"ListDbNodes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDbNodesInput"},
+      "output":{"shape":"ListDbNodesOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the DB nodes for the specified VM cluster.</p>",
+      "readonly":true
+    },
+    "ListDbServers":{
+      "name":"ListDbServers",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDbServersInput"},
+      "output":{"shape":"ListDbServersOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the database servers that belong to the specified Exadata infrastructure.</p>",
+      "readonly":true
+    },
+    "ListDbSystemShapes":{
+      "name":"ListDbSystemShapes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDbSystemShapesInput"},
+      "output":{"shape":"ListDbSystemShapesOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about the shapes that are available for an Exadata infrastructure.</p>",
+      "readonly":true
+    },
+    "ListGiVersions":{
+      "name":"ListGiVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListGiVersionsInput"},
+      "output":{"shape":"ListGiVersionsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about Oracle Grid Infrastructure (GI) software versions that are available for a VM cluster for the specified shape.</p>",
+      "readonly":true
+    },
+    "ListOdbNetworks":{
+      "name":"ListOdbNetworks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListOdbNetworksInput"},
+      "output":{"shape":"ListOdbNetworksOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about the ODB networks owned by your Amazon Web Services account.</p>",
+      "readonly":true
+    },
+    "ListOdbPeeringConnections":{
+      "name":"ListOdbPeeringConnections",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListOdbPeeringConnectionsInput"},
+      "output":{"shape":"ListOdbPeeringConnectionsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Lists all ODB peering connections or those associated with a specific ODB network.</p>",
+      "readonly":true
+    },
+    "ListSystemVersions":{
+      "name":"ListSystemVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListSystemVersionsInput"},
+      "output":{"shape":"ListSystemVersionsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the system versions that are available for a VM cluster for the specified <code>giVersion</code> and <code>shape</code>.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns information about the tags applied to this resource.</p>",
+      "readonly":true
+    },
+    "RebootDbNode":{
+      "name":"RebootDbNode",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"RebootDbNodeInput"},
+      "output":{"shape":"RebootDbNodeOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Reboots the specified DB node in a VM cluster.</p>"
+    },
+    "StartDbNode":{
+      "name":"StartDbNode",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartDbNodeInput"},
+      "output":{"shape":"StartDbNodeOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Starts the specified DB node in a VM cluster.</p>"
+    },
+    "StopDbNode":{
+      "name":"StopDbNode",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StopDbNodeInput"},
+      "output":{"shape":"StopDbNodeOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Stops the specified DB node in a VM cluster.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Applies tags to the specified resource.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Removes tags from the specified resource.</p>",
+      "idempotent":true
+    },
+    "UpdateCloudExadataInfrastructure":{
+      "name":"UpdateCloudExadataInfrastructure",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateCloudExadataInfrastructureInput"},
+      "output":{"shape":"UpdateCloudExadataInfrastructureOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Updates the properties of an Exadata infrastructure resource.</p>"
+    },
+    "UpdateOdbNetwork":{
+      "name":"UpdateOdbNetwork",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateOdbNetworkInput"},
+      "output":{"shape":"UpdateOdbNetworkOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Updates properties of a specified ODB network.</p>"
+    },
+    "UpdateOdbPeeringConnection":{
+      "name":"UpdateOdbPeeringConnection",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateOdbPeeringConnectionInput"},
+      "output":{"shape":"UpdateOdbPeeringConnectionOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Modifies the settings of an Oracle Database@Amazon Web Services peering connection. You can update the display name and add or remove CIDR blocks from the peering connection.</p>"
+    }
+  },
+  "shapes":{
+    "AcceptMarketplaceRegistrationInput":{
+      "type":"structure",
+      "required":["marketplaceRegistrationToken"],
+      "members":{
+        "marketplaceRegistrationToken":{
+          "shape":"String",
+          "documentation":"<p>The registration token that's generated by Amazon Web Services Marketplace and sent to Oracle Database@Amazon Web Services.</p>"
+        }
+      }
+    },
+    "AcceptMarketplaceRegistrationOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "Access":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>You don't have sufficient access to perform this action. Make sure you have the required permissions and try again.</p>",
+      "exception":true
+    },
+    "AutonomousVirtualMachineList":{
+      "type":"list",
+      "member":{"shape":"AutonomousVirtualMachineSummary"}
+    },
+    "AutonomousVirtualMachineSummary":{
+      "type":"structure",
+      "members":{
+        "autonomousVirtualMachineId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Autonomous VM.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the Autonomous VM, if applicable.</p>"
+        },
+        "vmName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Autonomous VM.</p>"
+        },
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the database server hosting this Autonomous VM.</p>"
+        },
+        "dbServerDisplayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the database server hosting this Autonomous VM.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores allocated to this Autonomous VM.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory allocated to this Autonomous VM, in gigabytes (GB).</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of storage allocated to this Autonomous Virtual Machine, in gigabytes (GB).</p>"
+        },
+        "clientIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The IP address used by clients to connect to this Autonomous VM.</p>"
+        },
+        "cloudAutonomousVmClusterId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster containing this Autonomous VM.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud Identifier (OCID) of the Autonomous VM.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Oracle Cloud Infrastructure (OCI) resource anchor associated with this Autonomous VM.</p>"
+        }
+      },
+      "documentation":"<p>A summary of an Autonomous Virtual Machine (VM) within an Autonomous VM cluster.</p>"
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CloudAutonomousVmCluster":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster.</p>"
+        },
+        "cloudAutonomousVmClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the Autonomous VM cluster.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network associated with this Autonomous VM cluster.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor associated with this Autonomous VM cluster.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The progress of the current operation on the Autonomous VM cluster, as a percentage.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>The display name of the Autonomous VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current state of the Autonomous VM cluster. Possible values include <code>CREATING</code>, <code>AVAILABLE</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>DELETED</code>, <code>FAILED</code>.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the Autonomous VM cluster.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Cloud Exadata Infrastructure containing this Autonomous VM cluster.</p>"
+        },
+        "autonomousDataStoragePercentage":{
+          "shape":"Float",
+          "documentation":"<p>The percentage of data storage currently in use for Autonomous Databases in the Autonomous VM cluster.</p>"
+        },
+        "autonomousDataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The data storage size allocated for Autonomous Databases in the Autonomous VM cluster, in TB.</p>"
+        },
+        "availableAutonomousDataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The available data storage space for Autonomous Databases in the Autonomous VM cluster, in TB.</p>"
+        },
+        "availableContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs that you can create with the currently available storage.</p>"
+        },
+        "availableCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPU cores available for allocation to Autonomous Databases.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The compute model of the Autonomous VM cluster: ECPU or OCPU.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores in the Autonomous VM cluster.</p>"
+        },
+        "cpuCoreCountPerNode":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled per node in the Autonomous VM cluster.</p>"
+        },
+        "cpuPercentage":{
+          "shape":"Float",
+          "documentation":"<p>The percentage of total CPU cores currently in use in the Autonomous VM cluster.</p>"
+        },
+        "dataStorageSizeInGBs":{
+          "shape":"Double",
+          "documentation":"<p>The total data storage allocated to the Autonomous VM cluster, in GB.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The total data storage allocated to the Autonomous VM cluster, in TB.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The local node storage allocated to the Autonomous VM cluster, in gigabytes (GB).</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers associated with the Autonomous VM cluster.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The user-provided description of the Autonomous VM cluster.</p>"
+        },
+        "domain":{
+          "shape":"String",
+          "documentation":"<p>The domain name for the Autonomous VM cluster.</p>"
+        },
+        "exadataStorageInTBsLowestScaledValue":{
+          "shape":"Double",
+          "documentation":"<p>The minimum value to which you can scale down the Exadata storage, in TB.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The hostname for the Autonomous VM cluster.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud Identifier (OCID) of the Autonomous VM cluster.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL for accessing the OCI console page for this Autonomous VM cluster.</p>"
+        },
+        "isMtlsEnabledVmCluster":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether mutual TLS (mTLS) authentication is enabled for the Autonomous VM cluster.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model that applies to the Autonomous VM cluster.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "maxAcdsLowestScaledValue":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum value to which you can scale down the maximum number of Autonomous CDBs.</p>"
+        },
+        "memoryPerOracleComputeUnitInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory allocated per Oracle Compute Unit, in GB.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of memory allocated to the Autonomous VM cluster, in gigabytes (GB).</p>"
+        },
+        "nodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of database server nodes in the Autonomous VM cluster.</p>"
+        },
+        "nonProvisionableAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs that can't be provisioned because of resource constraints.</p>"
+        },
+        "provisionableAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs that can be provisioned in the Autonomous VM cluster.</p>"
+        },
+        "provisionedAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs currently provisioned in the Autonomous VM cluster.</p>"
+        },
+        "provisionedCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPU cores currently provisioned in the Autonomous VM cluster.</p>"
+        },
+        "reclaimableCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPU cores that can be reclaimed from terminated or scaled-down Autonomous Databases.</p>"
+        },
+        "reservedCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPU cores reserved for system operations and redundancy.</p>"
+        },
+        "scanListenerPortNonTls":{
+          "shape":"Integer",
+          "documentation":"<p>The SCAN listener port for non-TLS (TCP) protocol. The default is 1521.</p>"
+        },
+        "scanListenerPortTls":{
+          "shape":"Integer",
+          "documentation":"<p>The SCAN listener port for TLS (TCP) protocol. The default is 2484.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The shape of the Exadata infrastructure for the Autonomous VM cluster.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the Autonomous VM cluster was created.</p>"
+        },
+        "timeDatabaseSslCertificateExpires":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The expiration date and time of the database SSL certificate.</p>"
+        },
+        "timeOrdsCertificateExpires":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The expiration date and time of the Oracle REST Data Services (ORDS) certificate.</p>"
+        },
+        "timeZone":{
+          "shape":"String",
+          "documentation":"<p>The time zone of the Autonomous VM cluster.</p>"
+        },
+        "totalContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of Autonomous Container Databases that can be created with the allocated local storage.</p>"
+        }
+      },
+      "documentation":"<p>Information about an Autonomous VM cluster resource.</p>"
+    },
+    "CloudAutonomousVmClusterList":{
+      "type":"list",
+      "member":{"shape":"CloudAutonomousVmClusterSummary"}
+    },
+    "CloudAutonomousVmClusterResourceDetails":{
+      "type":"structure",
+      "members":{
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster.</p>"
+        },
+        "unallocatedAdbStorageInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The amount of unallocated Autonomous Database storage in the Autonomous VM cluster, in terabytes.</p>"
+        }
+      },
+      "documentation":"<p>Resource details of an Autonomous VM cluster.</p>"
+    },
+    "CloudAutonomousVmClusterResourceDetailsList":{
+      "type":"list",
+      "member":{"shape":"CloudAutonomousVmClusterResourceDetails"}
+    },
+    "CloudAutonomousVmClusterSummary":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster.</p>"
+        },
+        "cloudAutonomousVmClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the Autonomous VM cluster.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network associated with this Autonomous VM cluster.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor associated with this Autonomous VM cluster.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The progress of the current operation on the Autonomous VM cluster, as a percentage.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>The user-friendly name for the Autonomous VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Autonomous VM cluster.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the Autonomous VM cluster, if applicable.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure containing this Autonomous VM cluster.</p>"
+        },
+        "autonomousDataStoragePercentage":{
+          "shape":"Float",
+          "documentation":"<p>The percentage of data storage currently in use for Autonomous Databases in the Autonomous VM cluster.</p>"
+        },
+        "autonomousDataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The total data storage allocated for Autonomous Databases in the Autonomous VM cluster, in TB.</p>"
+        },
+        "availableAutonomousDataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The available data storage for Autonomous Databases in the Autonomous VM cluster, in TB.</p>"
+        },
+        "availableContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous Container Databases that you can create with the currently available storage.</p>"
+        },
+        "availableCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPU cores available for allocation to Autonomous Databases.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The compute model of the Autonomous VM cluster: ECPU or OCPU.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores in the Autonomous VM cluster.</p>"
+        },
+        "cpuCoreCountPerNode":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores per node in the Autonomous VM cluster.</p>"
+        },
+        "cpuPercentage":{
+          "shape":"Float",
+          "documentation":"<p>The percentage of total CPU cores currently in use in the Autonomous VM cluster.</p>"
+        },
+        "dataStorageSizeInGBs":{
+          "shape":"Double",
+          "documentation":"<p>The total data storage allocated to the Autonomous VM cluster, in GB.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The total data storage allocated to the Autonomous VM cluster, in TB.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The local node storage allocated to the Autonomous VM cluster, in GB.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers associated with the Autonomous VM cluster.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The user-provided description of the Autonomous VM cluster.</p>"
+        },
+        "domain":{
+          "shape":"String",
+          "documentation":"<p>The domain name for the Autonomous VM cluster.</p>"
+        },
+        "exadataStorageInTBsLowestScaledValue":{
+          "shape":"Double",
+          "documentation":"<p>The lowest value to which Exadata storage can be scaled down, in TB.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The host name for the Autonomous VM cluster.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud Identifier (OCID) of the Autonomous VM cluster.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL for accessing the OCI console page for this Autonomous VM cluster.</p>"
+        },
+        "isMtlsEnabledVmCluster":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if mutual TLS (mTLS) authentication is enabled for the Autonomous VM cluster.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model that applies to the Autonomous VM cluster.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "maxAcdsLowestScaledValue":{
+          "shape":"Integer",
+          "documentation":"<p>The lowest value to which you can scale down the maximum number of Autonomous CDBs.</p>"
+        },
+        "memoryPerOracleComputeUnitInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory allocated per Oracle Compute Unit (OCU), in GB.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of memory allocated to the Autonomous VM cluster, in GB.</p>"
+        },
+        "nodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of database server nodes in the Autonomous VM cluster.</p>"
+        },
+        "nonProvisionableAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs that can't be provisioned because of resource constraints.</p>"
+        },
+        "provisionableAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous CDBs that you can provision in the Autonomous VM cluster.</p>"
+        },
+        "provisionedAutonomousContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The number of Autonomous Container Databases currently provisioned in the Autonomous VM cluster.</p>"
+        },
+        "provisionedCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPUs currently provisioned in the Autonomous VM cluster.</p>"
+        },
+        "reclaimableCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPUs that can be reclaimed from terminated or scaled-down Autonomous Databases.</p>"
+        },
+        "reservedCpus":{
+          "shape":"Float",
+          "documentation":"<p>The number of CPUs reserved for system operations and redundancy.</p>"
+        },
+        "scanListenerPortNonTls":{
+          "shape":"Integer",
+          "documentation":"<p>The SCAN listener port for non-TLS (TCP) protocol.</p>"
+        },
+        "scanListenerPortTls":{
+          "shape":"Integer",
+          "documentation":"<p>The SCAN listener port for TLS (TCP) protocol.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The shape of the Exadata infrastructure for the Autonomous VM cluster.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the Autonomous VM cluster was created.</p>"
+        },
+        "timeDatabaseSslCertificateExpires":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The expiration date and time of the database SSL certificate.</p>"
+        },
+        "timeOrdsCertificateExpires":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The expiration date and time of the Oracle REST Data Services (ORDS) certificate.</p>"
+        },
+        "timeZone":{
+          "shape":"String",
+          "documentation":"<p>The time zone of the Autonomous VM cluster.</p>"
+        },
+        "totalContainerDatabases":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of Autonomous Container Databases that can be created in the Autonomous VM cluster.</p>"
+        }
+      },
+      "documentation":"<p>A summary of an Autonomous VM cluster.</p>"
+    },
+    "CloudExadataInfrastructure":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier for the Exadata infrastructure.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the Exadata infrastructure.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Exadata infrastructure.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the Exadata infrastructure.</p>"
+        },
+        "cloudExadataInfrastructureArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the Exadata infrastructure.</p>"
+        },
+        "activatedStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers requested for the Exadata infrastructure.</p>"
+        },
+        "additionalStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers requested for the Exadata infrastructure.</p>"
+        },
+        "availableStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of available storage, in gigabytes (GB), for the Exadata infrastructure.</p>"
+        },
+        "availabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The name of the Availability Zone (AZ) where the Exadata infrastructure is located.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The AZ ID of the AZ where the Exadata infrastructure is located.</p>"
+        },
+        "computeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of database servers for the Exadata infrastructure.</p>"
+        },
+        "cpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores that are allocated to the Exadata infrastructure.</p>"
+        },
+        "customerContactsToSendToOCI":{
+          "shape":"CustomerContacts",
+          "documentation":"<p>The email addresses of contacts to receive notification from Oracle about maintenance updates for the Exadata infrastructure.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The size of the Exadata infrastructure's data disk group, in terabytes (TB).</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the Exadata infrastructure's local node storage, in gigabytes (GB).</p>"
+        },
+        "dbServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the database servers (dom0) in the Exadata infrastructure.</p>"
+        },
+        "lastMaintenanceRunId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud Identifier (OCID) of the last maintenance run for the Exadata infrastructure.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "maxCpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores available on the Exadata infrastructure.</p>"
+        },
+        "maxDataStorageInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The total amount of data disk group storage, in terabytes (TB), that's available on the Exadata infrastructure.</p>"
+        },
+        "maxDbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of local node storage, in gigabytes (GB), that's available on the Exadata infrastructure.</p>"
+        },
+        "maxMemoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of memory, in gigabytes (GB), that's available on the Exadata infrastructure.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that's allocated on the Exadata infrastructure.</p>"
+        },
+        "monthlyDbServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The monthly software version of the database servers installed on the Exadata infrastructure.</p>"
+        },
+        "monthlyStorageServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The monthly software version of the storage servers installed on the Exadata infrastructure.</p>"
+        },
+        "nextMaintenanceRunId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the next maintenance run for the Exadata infrastructure.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the Exadata infrastructure.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The HTTPS link to the Exadata infrastructure in OCI.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the Exadata infrastructure.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The model name of the Exadata infrastructure.</p>"
+        },
+        "storageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers that are activated for the Exadata infrastructure.</p>"
+        },
+        "storageServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the storage servers on the Exadata infrastructure.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the Exadata infrastructure was created.</p>"
+        },
+        "totalStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of storage, in gigabytes (GB), on the the Exadata infrastructure.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the Exadata infrastructure, expressed as a percentage.</p>"
+        },
+        "databaseServerType":{
+          "shape":"String",
+          "documentation":"<p>The database server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "storageServerType":{
+          "shape":"String",
+          "documentation":"<p>The storage server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled. </p>"
+        }
+      },
+      "documentation":"<p>Information about an Exadata infrastructure.</p>"
+    },
+    "CloudExadataInfrastructureList":{
+      "type":"list",
+      "member":{"shape":"CloudExadataInfrastructureSummary"}
+    },
+    "CloudExadataInfrastructureSummary":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier for the Exadata infrastructure.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the Exadata infrastructure.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Exadata infrastructure.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the Exadata infrastructure.</p>"
+        },
+        "cloudExadataInfrastructureArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) for the Exadata infrastructure.</p>"
+        },
+        "activatedStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers requested for the Exadata infrastructure.</p>"
+        },
+        "additionalStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers requested for the Exadata infrastructure.</p>"
+        },
+        "availableStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of available storage, in gigabytes (GB), for the Exadata infrastructure.</p>"
+        },
+        "availabilityZone":{
+          "shape":"String",
+          "documentation":"<p>The name of the Availability Zone (AZ) where the Exadata infrastructure is located.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The AZ ID of the AZ where the Exadata infrastructure is located.</p>"
+        },
+        "computeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of database servers for the Exadata infrastructure.</p>"
+        },
+        "cpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores that are allocated to the Exadata infrastructure.</p>"
+        },
+        "customerContactsToSendToOCI":{
+          "shape":"CustomerContacts",
+          "documentation":"<p>The email addresses of contacts to receive notification from Oracle about maintenance updates for the Exadata infrastructure.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The size of the Exadata infrastructure's data disk group, in terabytes (TB).</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the Exadata infrastructure's local node storage, in gigabytes (GB).</p>"
+        },
+        "dbServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the database servers on the Exadata infrastructure.</p>"
+        },
+        "lastMaintenanceRunId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud Identifier (OCID) of the last maintenance run for the Exadata infrastructure.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "maxCpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores available on the Exadata infrastructure.</p>"
+        },
+        "maxDataStorageInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The total amount of data disk group storage, in terabytes (TB), that's available on the Exadata infrastructure.</p>"
+        },
+        "maxDbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of local node storage, in gigabytes (GB), that's available on the Exadata infrastructure.</p>"
+        },
+        "maxMemoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of memory, in gigabytes (GB), that's available on the Exadata infrastructure.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that's allocated on the Exadata infrastructure.</p>"
+        },
+        "monthlyDbServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The monthly software version of the database servers (dom0) installed on the Exadata infrastructure.</p>"
+        },
+        "monthlyStorageServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The monthly software version of the storage servers installed on the Exadata infrastructure.</p>"
+        },
+        "nextMaintenanceRunId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the next maintenance run for the Exadata infrastructure.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the Exadata infrastructure.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The HTTPS link to the Exadata infrastructure in OCI.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the Exadata infrastructure.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The model name of the Exadata infrastructure.</p>"
+        },
+        "storageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers that are activated for the Exadata infrastructure.</p>"
+        },
+        "storageServerVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the storage servers on the Exadata infrastructure.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the Exadata infrastructure was created.</p>"
+        },
+        "totalStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of storage, in gigabytes (GB), on the the Exadata infrastructure.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the Exadata infrastructure, expressed as a percentage.</p>"
+        },
+        "databaseServerType":{
+          "shape":"String",
+          "documentation":"<p>The database server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "storageServerType":{
+          "shape":"String",
+          "documentation":"<p>The storage server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled. </p>"
+        }
+      },
+      "documentation":"<p>Information about an Exadata infrastructure.</p>"
+    },
+    "CloudExadataInfrastructureUnallocatedResources":{
+      "type":"structure",
+      "members":{
+        "cloudAutonomousVmClusters":{
+          "shape":"CloudAutonomousVmClusterResourceDetailsList",
+          "documentation":"<p>A list of Autonomous VM clusters associated with this Cloud Exadata Infrastructure.</p>"
+        },
+        "cloudExadataInfrastructureDisplayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the Cloud Exadata infrastructure.</p>"
+        },
+        "exadataStorageInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The amount of unallocated Exadata storage available, in terabytes (TB).</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Cloud Exadata infrastructure.</p>"
+        },
+        "localStorageInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of unallocated local storage available, in gigabytes (GB).</p>"
+        },
+        "memoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of unallocated memory available, in gigabytes (GB).</p>"
+        },
+        "ocpus":{
+          "shape":"Integer",
+          "documentation":"<p>The number of unallocated Oracle CPU Units (OCPUs) available.</p>"
+        }
+      },
+      "documentation":"<p>Information about unallocated resources in the Cloud Exadata infrastructure.</p>"
+    },
+    "CloudVmCluster":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the VM cluster.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the VM cluster.</p>"
+        },
+        "cloudVmClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the VM cluster.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure that this VM cluster belongs to.</p>"
+        },
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Grid Infrastructure (GI) cluster.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled on the VM cluster.</p>"
+        },
+        "dataCollectionOptions":{
+          "shape":"DataCollectionOptions",
+          "documentation":"<p>The set of diagnostic collection options enabled for the VM cluster.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The size of the data disk group, in terabytes (TB), that's allocated for the VM cluster.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated for the VM cluster.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers for the VM cluster.</p>"
+        },
+        "diskRedundancy":{
+          "shape":"DiskRedundancy",
+          "documentation":"<p>The type of redundancy configured for the VM cluster. <code>NORMAL</code> is 2-way redundancy. <code>HIGH</code> is 3-way redundancy.</p>"
+        },
+        "giVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the Oracle Grid Infrastructure (GI) for the VM cluster.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The host name for the VM cluster.</p>"
+        },
+        "iormConfigCache":{
+          "shape":"ExadataIormConfig",
+          "documentation":"<p>The ExadataIormConfig cache details for the VM cluster.</p>"
+        },
+        "isLocalBackupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether database backups to local Exadata storage is enabled for the VM cluster.</p>"
+        },
+        "isSparseDiskgroupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the VM cluster is configured with a sparse disk group.</p>"
+        },
+        "lastUpdateHistoryEntryId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud ID (OCID) of the last maintenance update history entry.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model applied to the VM cluster.</p>"
+        },
+        "listenerPort":{
+          "shape":"Integer",
+          "documentation":"<p>The port number configured for the listener on the VM cluster.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that's allocated for the VM cluster.</p>"
+        },
+        "nodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of nodes in the VM cluster.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the VM cluster.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the VM cluster.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The HTTPS link to the VM cluster in OCI.</p>"
+        },
+        "domain":{
+          "shape":"String",
+          "documentation":"<p>The domain of the VM cluster.</p>"
+        },
+        "scanDnsName":{
+          "shape":"String",
+          "documentation":"<p>The FQDN of the DNS record for the Single Client Access Name (SCAN) IP addresses that are associated with the VM cluster.</p>"
+        },
+        "scanDnsRecordId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DNS record for the SCAN IP addresses that are associated with the VM cluster.</p>"
+        },
+        "scanIpIds":{
+          "shape":"StringList",
+          "documentation":"<p>The OCID of the SCAN IP addresses that are associated with the VM cluster.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The hardware model name of the Exadata infrastructure that's running the VM cluster.</p>"
+        },
+        "sshPublicKeys":{
+          "shape":"SensitiveStringList",
+          "documentation":"<p>The public key portion of one or more key pairs used for SSH access to the VM cluster.</p>"
+        },
+        "storageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated to the VM cluster.</p>"
+        },
+        "systemVersion":{
+          "shape":"String",
+          "documentation":"<p>The operating system version of the image chosen for the VM cluster.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the VM cluster was created.</p>"
+        },
+        "timeZone":{
+          "shape":"String",
+          "documentation":"<p>The time zone of the VM cluster.</p>"
+        },
+        "vipIds":{
+          "shape":"StringList",
+          "documentation":"<p>The virtual IP (VIP) addresses that are associated with the VM cluster. Oracle's Cluster Ready Services (CRS) creates and maintains one VIP address for each node in the VM cluster to enable failover. If one node fails, the VIP is reassigned to another active node in the cluster.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network for the VM cluster.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the VM cluster, expressed as a percentage.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled. </p>"
+        }
+      },
+      "documentation":"<p>Information about a VM cluster.</p>"
+    },
+    "CloudVmClusterList":{
+      "type":"list",
+      "member":{"shape":"CloudVmClusterSummary"}
+    },
+    "CloudVmClusterSummary":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the VM cluster.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the VM cluster.</p>"
+        },
+        "cloudVmClusterArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the VM cluster.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure that this VM cluster belongs to.</p>"
+        },
+        "clusterName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Grid Infrastructure (GI) cluster.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled on the VM cluster.</p>"
+        },
+        "dataCollectionOptions":{"shape":"DataCollectionOptions"},
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The size of the data disk group, in terabytes (TB), that's allocated for the VM cluster.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated for the VM cluster.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers for the VM cluster.</p>"
+        },
+        "diskRedundancy":{
+          "shape":"DiskRedundancy",
+          "documentation":"<p>The type of redundancy configured for the VM cluster. <code>NORMAL</code> is 2-way redundancy. <code>HIGH</code> is 3-way redundancy.</p>"
+        },
+        "giVersion":{
+          "shape":"String",
+          "documentation":"<p>The software version of the Oracle Grid Infrastructure (GI) for the VM cluster.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The host name for the VM cluster.</p>"
+        },
+        "iormConfigCache":{"shape":"ExadataIormConfig"},
+        "isLocalBackupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether database backups to local Exadata storage is enabled for the VM cluster.</p>"
+        },
+        "isSparseDiskgroupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the VM cluster is configured with a sparse disk group.</p>"
+        },
+        "lastUpdateHistoryEntryId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud ID (OCID) of the last maintenance update history entry.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model applied to the VM cluster.</p>"
+        },
+        "listenerPort":{
+          "shape":"Integer",
+          "documentation":"<p>The port number configured for the listener on the VM cluster.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that's allocated for the VM cluster.</p>"
+        },
+        "nodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of nodes in the VM cluster.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the VM cluster.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the VM cluster.</p>"
+        },
+        "ociUrl":{
+          "shape":"String",
+          "documentation":"<p>The HTTPS link to the VM cluster in OCI.</p>"
+        },
+        "domain":{
+          "shape":"String",
+          "documentation":"<p>The domain of the VM cluster.</p>"
+        },
+        "scanDnsName":{
+          "shape":"String",
+          "documentation":"<p>The FQDN of the DNS record for the Single Client Access Name (SCAN) IP addresses that are associated with the VM cluster.</p>"
+        },
+        "scanDnsRecordId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DNS record for the SCAN IP addresses that are associated with the VM cluster.</p>"
+        },
+        "scanIpIds":{
+          "shape":"StringList",
+          "documentation":"<p>The OCID of the SCAN IP addresses that are associated with the VM cluster.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The hardware model name of the Exadata infrastructure that's running the VM cluster.</p>"
+        },
+        "sshPublicKeys":{
+          "shape":"SensitiveStringList",
+          "documentation":"<p>The public key portion of one or more key pairs used for SSH access to the VM cluster.</p>"
+        },
+        "storageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated to the VM cluster.</p>"
+        },
+        "systemVersion":{
+          "shape":"String",
+          "documentation":"<p>The operating system version of the image chosen for the VM cluster.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the VM cluster was created.</p>"
+        },
+        "timeZone":{
+          "shape":"String",
+          "documentation":"<p>The time zone of the VM cluster.</p>"
+        },
+        "vipIds":{
+          "shape":"StringList",
+          "documentation":"<p>The virtual IP (VIP) addresses that are associated with the VM cluster. Oracle's Cluster Ready Services (CRS) creates and maintains one VIP address for each node in the VM cluster to enable failover. If one node fails, the VIP is reassigned to another active node in the cluster.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network for the VM cluster.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the VM cluster, expressed as a percentage.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled. </p>"
+        }
+      },
+      "documentation":"<p>Information about a VM cluster.</p>"
+    },
+    "ComputeModel":{
+      "type":"string",
+      "enum":[
+        "ECPU",
+        "OCPU"
+      ]
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "resourceId",
+        "resourceType"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the resource that caused the conflict.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>The type of resource that caused the conflict.</p>"
+        }
+      },
+      "documentation":"<p>Occurs when a conflict with the current status of your resource. Fix any inconsistencies with your resource and try again.</p>",
+      "exception":true
+    },
+    "CreateCloudAutonomousVmClusterInput":{
+      "type":"structure",
+      "required":[
+        "cloudExadataInfrastructureId",
+        "odbNetworkId",
+        "displayName",
+        "autonomousDataStorageSizeInTBs",
+        "cpuCoreCountPerNode",
+        "memoryPerOracleComputeUnitInGBs",
+        "totalContainerDatabases"
+      ],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure where the VM cluster will be created.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network to be used for the VM cluster.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>The display name for the Autonomous VM cluster. The name does not need to be unique.</p>"
+        },
+        "clientToken":{
+          "shape":"CreateCloudAutonomousVmClusterInputClientTokenString",
+          "documentation":"<p>A client-provided token to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
+        },
+        "autonomousDataStorageSizeInTBs":{
+          "shape":"CreateCloudAutonomousVmClusterInputAutonomousDataStorageSizeInTBsDouble",
+          "documentation":"<p>The data disk group size to be allocated for Autonomous Databases, in terabytes (TB).</p>"
+        },
+        "cpuCoreCountPerNode":{
+          "shape":"CreateCloudAutonomousVmClusterInputCpuCoreCountPerNodeInteger",
+          "documentation":"<p>The number of CPU cores to be enabled per VM cluster node.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers to be used for the Autonomous VM cluster.</p>"
+        },
+        "description":{
+          "shape":"CreateCloudAutonomousVmClusterInputDescriptionString",
+          "documentation":"<p>A user-provided description of the Autonomous VM cluster.</p>"
+        },
+        "isMtlsEnabledVmCluster":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable mutual TLS (mTLS) authentication for the Autonomous VM cluster.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model to apply to the Autonomous VM cluster.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "memoryPerOracleComputeUnitInGBs":{
+          "shape":"CreateCloudAutonomousVmClusterInputMemoryPerOracleComputeUnitInGBsInteger",
+          "documentation":"<p>The amount of memory to be allocated per OCPU, in GB.</p>"
+        },
+        "scanListenerPortNonTls":{
+          "shape":"CreateCloudAutonomousVmClusterInputScanListenerPortNonTlsInteger",
+          "documentation":"<p>The SCAN listener port for non-TLS (TCP) protocol.</p>"
+        },
+        "scanListenerPortTls":{
+          "shape":"CreateCloudAutonomousVmClusterInputScanListenerPortTlsInteger",
+          "documentation":"<p>The SCAN listener port for TLS (TCP) protocol.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>Free-form tags for this resource. Each tag is a key-value pair with no predefined name, type, or namespace.</p>"
+        },
+        "timeZone":{
+          "shape":"CreateCloudAutonomousVmClusterInputTimeZoneString",
+          "documentation":"<p>The time zone to use for the Autonomous VM cluster.</p>"
+        },
+        "totalContainerDatabases":{
+          "shape":"CreateCloudAutonomousVmClusterInputTotalContainerDatabasesInteger",
+          "documentation":"<p>The total number of Autonomous CDBs that you can create in the Autonomous VM cluster.</p>"
+        }
+      }
+    },
+    "CreateCloudAutonomousVmClusterInputAutonomousDataStorageSizeInTBsDouble":{
+      "type":"double",
+      "box":true,
+      "min":0
+    },
+    "CreateCloudAutonomousVmClusterInputClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":8,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudAutonomousVmClusterInputCpuCoreCountPerNodeInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "CreateCloudAutonomousVmClusterInputDescriptionString":{
+      "type":"string",
+      "max":400,
+      "min":1
+    },
+    "CreateCloudAutonomousVmClusterInputMemoryPerOracleComputeUnitInGBsInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "CreateCloudAutonomousVmClusterInputScanListenerPortNonTlsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":8999,
+      "min":1024
+    },
+    "CreateCloudAutonomousVmClusterInputScanListenerPortTlsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":8999,
+      "min":1024
+    },
+    "CreateCloudAutonomousVmClusterInputTimeZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudAutonomousVmClusterInputTotalContainerDatabasesInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "CreateCloudAutonomousVmClusterOutput":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the created Autonomous VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Autonomous VM cluster creation process.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the Autonomous VM cluster creation process, if applicable.</p>"
+        },
+        "cloudAutonomousVmClusterId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the created Autonomous VM cluster.</p>"
+        }
+      }
+    },
+    "CreateCloudExadataInfrastructureInput":{
+      "type":"structure",
+      "required":[
+        "displayName",
+        "shape",
+        "computeCount",
+        "storageCount"
+      ],
+      "members":{
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>A user-friendly name for the Exadata infrastructure.</p>"
+        },
+        "shape":{
+          "shape":"CreateCloudExadataInfrastructureInputShapeString",
+          "documentation":"<p>The model name of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "availabilityZone":{
+          "shape":"CreateCloudExadataInfrastructureInputAvailabilityZoneString",
+          "documentation":"<p>The name of the Availability Zone (AZ) where the Exadata infrastructure is located.</p> <p>This operation requires that you specify a value for either <code>availabilityZone</code> or <code>availabilityZoneId</code>.</p> <p>Example: <code>us-east-1a</code> </p>"
+        },
+        "availabilityZoneId":{
+          "shape":"CreateCloudExadataInfrastructureInputAvailabilityZoneIdString",
+          "documentation":"<p>The AZ ID of the AZ where the Exadata infrastructure is located.</p> <p>This operation requires that you specify a value for either <code>availabilityZone</code> or <code>availabilityZoneId</code>.</p> <p>Example: <code>use1-az1</code> </p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>The list of resource tags to apply to the Exadata infrastructure.</p>"
+        },
+        "computeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of database servers for the Exadata infrastructure. Valid values for this parameter depend on the shape. To get information about the minimum and maximum values, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "customerContactsToSendToOCI":{
+          "shape":"CustomerContacts",
+          "documentation":"<p>The email addresses of contacts to receive notification from Oracle about maintenance updates for the Exadata infrastructure.</p>"
+        },
+        "maintenanceWindow":{
+          "shape":"MaintenanceWindow",
+          "documentation":"<p>The maintenance window configuration for the Exadata Cloud infrastructure.</p> <p>This allows you to define when maintenance operations such as patching and updates can be performed on the infrastructure.</p>"
+        },
+        "storageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of storage servers to activate for this Exadata infrastructure. Valid values for this parameter depend on the shape. To get information about the minimum and maximum values, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "clientToken":{
+          "shape":"CreateCloudExadataInfrastructureInputClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.</p>",
+          "idempotencyToken":true
+        },
+        "databaseServerType":{
+          "shape":"CreateCloudExadataInfrastructureInputDatabaseServerTypeString",
+          "documentation":"<p>The database server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        },
+        "storageServerType":{
+          "shape":"CreateCloudExadataInfrastructureInputStorageServerTypeString",
+          "documentation":"<p>The storage server model type of the Exadata infrastructure. For the list of valid model names, use the <code>ListDbSystemShapes</code> operation.</p>"
+        }
+      }
+    },
+    "CreateCloudExadataInfrastructureInputAvailabilityZoneIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudExadataInfrastructureInputAvailabilityZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudExadataInfrastructureInputClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":8,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudExadataInfrastructureInputDatabaseServerTypeString":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudExadataInfrastructureInputShapeString":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudExadataInfrastructureInputStorageServerTypeString":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudExadataInfrastructureOutput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the Exadata infrastructure.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Exadata infrastructure.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the Exadata infrastructure.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "CreateCloudVmClusterInput":{
+      "type":"structure",
+      "required":[
+        "cloudExadataInfrastructureId",
+        "cpuCoreCount",
+        "displayName",
+        "giVersion",
+        "hostname",
+        "sshPublicKeys",
+        "odbNetworkId"
+      ],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure for this VM cluster.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"CreateCloudVmClusterInputCpuCoreCountInteger",
+          "documentation":"<p>The number of CPU cores to enable on the VM cluster.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>A user-friendly name for the VM cluster.</p>"
+        },
+        "giVersion":{
+          "shape":"CreateCloudVmClusterInputGiVersionString",
+          "documentation":"<p>A valid software version of Oracle Grid Infrastructure (GI). To get the list of valid values, use the <code>ListGiVersions</code> operation and specify the shape of the Exadata infrastructure.</p> <p>Example: <code>19.0.0.0</code> </p>"
+        },
+        "hostname":{
+          "shape":"CreateCloudVmClusterInputHostnameString",
+          "documentation":"<p>The host name for the VM cluster.</p> <p>Constraints:</p> <ul> <li> <p>Can't be \"localhost\" or \"hostname\".</p> </li> <li> <p>Can't contain \"-version\".</p> </li> <li> <p>The maximum length of the combined hostname and domain is 63 characters.</p> </li> <li> <p>The hostname must be unique within the subnet.</p> </li> </ul>"
+        },
+        "sshPublicKeys":{
+          "shape":"StringList",
+          "documentation":"<p>The public key portion of one or more key pairs used for SSH access to the VM cluster.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network for the VM cluster.</p>"
+        },
+        "clusterName":{
+          "shape":"CreateCloudVmClusterInputClusterNameString",
+          "documentation":"<p>A name for the Grid Infrastructure cluster. The name isn't case sensitive.</p>"
+        },
+        "dataCollectionOptions":{
+          "shape":"DataCollectionOptions",
+          "documentation":"<p>The set of preferences for the various diagnostic collection options for the VM cluster.</p>"
+        },
+        "dataStorageSizeInTBs":{
+          "shape":"Double",
+          "documentation":"<p>The size of the data disk group, in terabytes (TBs), to allocate for the VM cluster.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GBs), to allocate for the VM cluster.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The list of database servers for the VM cluster.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>The list of resource tags to apply to the VM cluster.</p>"
+        },
+        "isLocalBackupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to enable database backups to local Exadata storage for the VM cluster.</p>"
+        },
+        "isSparseDiskgroupEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to create a sparse disk group for the VM cluster.</p>"
+        },
+        "licenseModel":{
+          "shape":"LicenseModel",
+          "documentation":"<p>The Oracle license model to apply to the VM cluster.</p> <p>Default: <code>LICENSE_INCLUDED</code> </p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GBs), to allocate for the VM cluster.</p>"
+        },
+        "systemVersion":{
+          "shape":"CreateCloudVmClusterInputSystemVersionString",
+          "documentation":"<p>The version of the operating system of the image for the VM cluster.</p>"
+        },
+        "timeZone":{
+          "shape":"CreateCloudVmClusterInputTimeZoneString",
+          "documentation":"<p>The time zone for the VM cluster. For a list of valid values for time zone, you can check the options in the console.</p> <p>Default: UTC</p>"
+        },
+        "clientToken":{
+          "shape":"CreateCloudVmClusterInputClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.</p>",
+          "idempotencyToken":true
+        },
+        "scanListenerPortTcp":{
+          "shape":"CreateCloudVmClusterInputScanListenerPortTcpInteger",
+          "documentation":"<p>The port number for TCP connections to the single client access name (SCAN) listener. </p> <p>Valid values: <code>1024–8999</code> with the following exceptions: <code>2484</code>, <code>6100</code>, <code>6200</code>, <code>7060</code>, <code>7070</code>, <code>7085</code>, and <code>7879</code> </p> <p>Default: <code>1521</code> </p>"
+        }
+      }
+    },
+    "CreateCloudVmClusterInputClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":8,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateCloudVmClusterInputClusterNameString":{
+      "type":"string",
+      "max":11,
+      "min":1,
+      "pattern":"[a-zA-Z][a-zA-Z0-9-]*"
+    },
+    "CreateCloudVmClusterInputCpuCoreCountInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":0
+    },
+    "CreateCloudVmClusterInputGiVersionString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudVmClusterInputHostnameString":{
+      "type":"string",
+      "max":12,
+      "min":1,
+      "pattern":"[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]"
+    },
+    "CreateCloudVmClusterInputScanListenerPortTcpInteger":{
+      "type":"integer",
+      "box":true,
+      "max":8999,
+      "min":1024
+    },
+    "CreateCloudVmClusterInputSystemVersionString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudVmClusterInputTimeZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateCloudVmClusterOutput":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name for the VM cluster.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the VM cluster.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the VM cluster.</p>"
+        },
+        "cloudVmClusterId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier for the VM cluster.</p>"
+        }
+      }
+    },
+    "CreateOdbNetworkInput":{
+      "type":"structure",
+      "required":[
+        "displayName",
+        "clientSubnetCidr"
+      ],
+      "members":{
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>A user-friendly name for the ODB network.</p>"
+        },
+        "availabilityZone":{
+          "shape":"CreateOdbNetworkInputAvailabilityZoneString",
+          "documentation":"<p>The Amazon Web Services Availability Zone (AZ) where the ODB network is located.</p> <p>This operation requires that you specify a value for either <code>availabilityZone</code> or <code>availabilityZoneId</code>.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"CreateOdbNetworkInputAvailabilityZoneIdString",
+          "documentation":"<p>The AZ ID of the AZ where the ODB network is located.</p> <p>This operation requires that you specify a value for either <code>availabilityZone</code> or <code>availabilityZoneId</code>.</p>"
+        },
+        "clientSubnetCidr":{
+          "shape":"CreateOdbNetworkInputClientSubnetCidrString",
+          "documentation":"<p>The CIDR range of the client subnet for the ODB network.</p> <p>Constraints:</p> <ul> <li> <p>Must not overlap with the CIDR range of the backup subnet.</p> </li> <li> <p>Must not overlap with the CIDR ranges of the VPCs that are connected to the ODB network.</p> </li> <li> <p>Must not use the following CIDR ranges that are reserved by OCI:</p> <ul> <li> <p> <code>100.106.0.0/16</code> and <code>100.107.0.0/16</code> </p> </li> <li> <p> <code>169.254.0.0/16</code> </p> </li> <li> <p> <code>224.0.0.0 - 239.255.255.255</code> </p> </li> <li> <p> <code>240.0.0.0 - 255.255.255.255</code> </p> </li> </ul> </li> </ul>"
+        },
+        "backupSubnetCidr":{
+          "shape":"CreateOdbNetworkInputBackupSubnetCidrString",
+          "documentation":"<p>The CIDR range of the backup subnet for the ODB network.</p> <p>Constraints:</p> <ul> <li> <p>Must not overlap with the CIDR range of the client subnet.</p> </li> <li> <p>Must not overlap with the CIDR ranges of the VPCs that are connected to the ODB network.</p> </li> <li> <p>Must not use the following CIDR ranges that are reserved by OCI:</p> <ul> <li> <p> <code>100.106.0.0/16</code> and <code>100.107.0.0/16</code> </p> </li> <li> <p> <code>169.254.0.0/16</code> </p> </li> <li> <p> <code>224.0.0.0 - 239.255.255.255</code> </p> </li> <li> <p> <code>240.0.0.0 - 255.255.255.255</code> </p> </li> </ul> </li> </ul>"
+        },
+        "customDomainName":{
+          "shape":"CreateOdbNetworkInputCustomDomainNameString",
+          "documentation":"<p>The domain name to use for the resources in the ODB network.</p>"
+        },
+        "defaultDnsPrefix":{
+          "shape":"CreateOdbNetworkInputDefaultDnsPrefixString",
+          "documentation":"<p>The DNS prefix to the default DNS domain name. The default DNS domain name is oraclevcn.com.</p>"
+        },
+        "clientToken":{
+          "shape":"CreateOdbNetworkInputClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you don't specify a client token, the Amazon Web Services SDK automatically generates a client token and uses it for the request to ensure idempotency. The client token is valid for up to 24 hours after it's first used.</p>",
+          "idempotencyToken":true
+        },
+        "s3Access":{
+          "shape":"Access",
+          "documentation":"<p>Specifies the configuration for Amazon S3 access from the ODB network.</p>"
+        },
+        "zeroEtlAccess":{
+          "shape":"Access",
+          "documentation":"<p>Specifies the configuration for Zero-ETL access from the ODB network.</p>"
+        },
+        "s3PolicyDocument":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>Specifies the endpoint policy for Amazon S3 access from the ODB network.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>The list of resource tags to apply to the ODB network.</p>"
+        }
+      }
+    },
+    "CreateOdbNetworkInputAvailabilityZoneIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateOdbNetworkInputAvailabilityZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateOdbNetworkInputBackupSubnetCidrString":{
+      "type":"string",
+      "max":43,
+      "min":1
+    },
+    "CreateOdbNetworkInputClientSubnetCidrString":{
+      "type":"string",
+      "max":43,
+      "min":1
+    },
+    "CreateOdbNetworkInputClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":8,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateOdbNetworkInputCustomDomainNameString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "CreateOdbNetworkInputDefaultDnsPrefixString":{
+      "type":"string",
+      "max":15,
+      "min":1,
+      "pattern":"[a-zA-Z][a-zA-Z0-9]*"
+    },
+    "CreateOdbNetworkOutput":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the ODB network.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the ODB network.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the ODB network.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the ODB network.</p>"
+        }
+      }
+    },
+    "CreateOdbPeeringConnectionInput":{
+      "type":"structure",
+      "required":[
+        "odbNetworkId",
+        "peerNetworkId"
+      ],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network that initiates the peering connection.</p>"
+        },
+        "peerNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the peer network. This can be either a VPC ID or another ODB network ID.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>The display name for the ODB peering connection.</p>"
+        },
+        "peerNetworkCidrsToBeAdded":{
+          "shape":"PeeredCidrList",
+          "documentation":"<p>A list of CIDR blocks to add to the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection.</p>"
+        },
+        "clientToken":{
+          "shape":"CreateOdbPeeringConnectionInputClientTokenString",
+          "documentation":"<p>The client token for the ODB peering connection request.</p> <p>Constraints:</p> <ul> <li> <p>Must be unique for each request.</p> </li> </ul>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>The tags to assign to the ODB peering connection.</p>"
+        }
+      }
+    },
+    "CreateOdbPeeringConnectionInputClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":8,
+      "pattern":"[a-zA-Z0-9_\\/.=-]+"
+    },
+    "CreateOdbPeeringConnectionOutput":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the ODB peering connection.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The status of the ODB peering connection.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the ODB peering connection.</p>"
+        },
+        "odbPeeringConnectionId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the ODB peering connection.</p>"
+        }
+      }
+    },
+    "CustomerContact":{
+      "type":"structure",
+      "members":{
+        "email":{
+          "shape":"CustomerContactEmailString",
+          "documentation":"<p>The email address of the contact.</p>"
+        }
+      },
+      "documentation":"<p>A contact to receive notification from Oracle about maintenance updates for a specific Exadata infrastructure.</p>"
+    },
+    "CustomerContactEmailString":{
+      "type":"string",
+      "max":320,
+      "min":1,
+      "sensitive":true
+    },
+    "CustomerContacts":{
+      "type":"list",
+      "member":{"shape":"CustomerContact"}
+    },
+    "DataCollectionOptions":{
+      "type":"structure",
+      "members":{
+        "isDiagnosticsEventsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether diagnostic collection is enabled for the VM cluster.</p>"
+        },
+        "isHealthMonitoringEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether health monitoring is enabled for the VM cluster.</p>"
+        },
+        "isIncidentLogsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether incident logs are enabled for the cloud VM cluster.</p>"
+        }
+      },
+      "documentation":"<p>Information about the data collection options enabled for a VM cluster.</p>"
+    },
+    "DayOfWeek":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"DayOfWeekName",
+          "documentation":"<p>The name of the day of the week.</p>"
+        }
+      },
+      "documentation":"<p>An enumeration of days of the week used for scheduling maintenance windows.</p>"
+    },
+    "DayOfWeekName":{
+      "type":"string",
+      "enum":[
+        "MONDAY",
+        "TUESDAY",
+        "WEDNESDAY",
+        "THURSDAY",
+        "FRIDAY",
+        "SATURDAY",
+        "SUNDAY"
+      ]
+    },
+    "DaysOfWeek":{
+      "type":"list",
+      "member":{"shape":"DayOfWeek"}
+    },
+    "DbIormConfig":{
+      "type":"structure",
+      "members":{
+        "dbName":{
+          "shape":"String",
+          "documentation":"<p>The database name. For the default DbPlan, the dbName is <code>default</code>.</p>"
+        },
+        "flashCacheLimit":{
+          "shape":"String",
+          "documentation":"<p>The flash cache limit for this database. This value is internally configured based on the share value assigned to the database.</p>"
+        },
+        "share":{
+          "shape":"Integer",
+          "documentation":"<p>The relative priority of this database.</p>"
+        }
+      },
+      "documentation":"<p>The IORM configuration settings for the database.</p>"
+    },
+    "DbIormConfigList":{
+      "type":"list",
+      "member":{"shape":"DbIormConfig"}
+    },
+    "DbNode":{
+      "type":"structure",
+      "members":{
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node.</p>"
+        },
+        "dbNodeArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DB node.</p>"
+        },
+        "status":{
+          "shape":"DbNodeResourceStatus",
+          "documentation":"<p>The current status of the DB node.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the DB node.</p>"
+        },
+        "additionalDetails":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the planned maintenance.</p>"
+        },
+        "backupIpId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud ID (OCID) of the backup IP address that's associated with the DB node.</p>"
+        },
+        "backupVnic2Id":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the second backup VNIC.</p>"
+        },
+        "backupVnicId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the backup VNIC.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>Number of CPU cores enabled on the DB node.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GBs), that's allocated on the DB node.</p>"
+        },
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Db server that is associated with the DB node.</p>"
+        },
+        "dbSystemId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DB system.</p>"
+        },
+        "faultDomain":{
+          "shape":"String",
+          "documentation":"<p>The name of the fault domain the instance is contained in.</p>"
+        },
+        "hostIpId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the host IP address that's associated with the DB node.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The host name for the DB node.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DB node.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the DB node.</p>"
+        },
+        "maintenanceType":{
+          "shape":"DbNodeMaintenanceType",
+          "documentation":"<p>The type of database node maintenance. Either <code>VMDB_REBOOT_MIGRATION</code> or <code>EXADBXS_REBOOT_MIGRATION</code>.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The allocated memory in GBs on the DB node.</p>"
+        },
+        "softwareStorageSizeInGB":{
+          "shape":"Integer",
+          "documentation":"<p>The size (in GB) of the block storage volume allocation for the DB system. </p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the DB node was created.</p>"
+        },
+        "timeMaintenanceWindowEnd":{
+          "shape":"String",
+          "documentation":"<p>End date and time of maintenance window.</p>"
+        },
+        "timeMaintenanceWindowStart":{
+          "shape":"String",
+          "documentation":"<p>Start date and time of maintenance window.</p>"
+        },
+        "totalCpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores reserved on the DB node.</p>"
+        },
+        "vnic2Id":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the second VNIC.</p>"
+        },
+        "vnicId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the VNIC.</p>"
+        },
+        "privateIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The private IP address assigned to the DB node.</p>"
+        },
+        "floatingIpAddress":{
+          "shape":"String",
+          "documentation":"<p>The floating IP address assigned to the DB node.</p>"
+        }
+      },
+      "documentation":"<p>Information about a DB node.</p>"
+    },
+    "DbNodeList":{
+      "type":"list",
+      "member":{"shape":"DbNodeSummary"}
+    },
+    "DbNodeMaintenanceType":{
+      "type":"string",
+      "enum":["VMDB_REBOOT_MIGRATION"]
+    },
+    "DbNodeResourceStatus":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "FAILED",
+        "PROVISIONING",
+        "TERMINATED",
+        "TERMINATING",
+        "UPDATING",
+        "STOPPING",
+        "STOPPED",
+        "STARTING"
+      ]
+    },
+    "DbNodeSummary":{
+      "type":"structure",
+      "members":{
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node.</p>"
+        },
+        "dbNodeArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DB node.</p>"
+        },
+        "status":{
+          "shape":"DbNodeResourceStatus",
+          "documentation":"<p>The current status of the DB node.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the DB node.</p>"
+        },
+        "additionalDetails":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the planned maintenance.</p>"
+        },
+        "backupIpId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle Cloud ID (OCID) of the backup IP address that's associated with the DB node.</p>"
+        },
+        "backupVnic2Id":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the second backup virtual network interface card (VNIC) for the DB node.</p>"
+        },
+        "backupVnicId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the backup VNIC for the DB node.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled on the DB node.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated on the DB node.</p>"
+        },
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the database server that's associated with the DB node.</p>"
+        },
+        "dbSystemId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DB system.</p>"
+        },
+        "faultDomain":{
+          "shape":"String",
+          "documentation":"<p>The name of the fault domain where the DB node is located.</p>"
+        },
+        "hostIpId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the host IP address that's associated with the DB node.</p>"
+        },
+        "hostname":{
+          "shape":"String",
+          "documentation":"<p>The host name for the DB node.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the DB node.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the DB node.</p>"
+        },
+        "maintenanceType":{
+          "shape":"DbNodeMaintenanceType",
+          "documentation":"<p>The type of maintenance the DB node. </p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that allocated on the DB node.</p>"
+        },
+        "softwareStorageSizeInGB":{
+          "shape":"Integer",
+          "documentation":"<p>The size of the block storage volume, in gigabytes (GB), that's allocated for the DB system. This attribute applies only for virtual machine DB systems.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the DB node was created.</p>"
+        },
+        "timeMaintenanceWindowEnd":{
+          "shape":"String",
+          "documentation":"<p>The end date and time of the maintenance window.</p>"
+        },
+        "timeMaintenanceWindowStart":{
+          "shape":"String",
+          "documentation":"<p>The start date and time of the maintenance window.</p>"
+        },
+        "totalCpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores reserved on the DB node.</p>"
+        },
+        "vnic2Id":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the second VNIC.</p>"
+        },
+        "vnicId":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the VNIC.</p>"
+        }
+      },
+      "documentation":"<p>Information about a DB node.</p>"
+    },
+    "DbServer":{
+      "type":"structure",
+      "members":{
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier for the database server.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the database server.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the database server.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled on the database server.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The allocated local node storage in GBs on the database server.</p>"
+        },
+        "dbServerPatchingDetails":{
+          "shape":"DbServerPatchingDetails",
+          "documentation":"<p>The scheduling details for the quarterly maintenance window. Patching and system updates take place during the maintenance window.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the database server.</p>"
+        },
+        "exadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Exadata infrastructure the database server belongs to.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the database server.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the database server.</p>"
+        },
+        "maxCpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores available.</p>"
+        },
+        "maxDbNodeStorageInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total local node storage available in GBs.</p>"
+        },
+        "maxMemoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total memory available in GBs.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The allocated memory in GBs on the database server.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The shape of the database server. The shape determines the amount of CPU, storage, and memory resources available.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the database server was created.</p>"
+        },
+        "vmClusterIds":{
+          "shape":"StringList",
+          "documentation":"<p>The OCID of the VM clusters that are associated with the database server.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The compute model of the database server (ECPU or OCPU).</p>"
+        },
+        "autonomousVmClusterIds":{
+          "shape":"StringList",
+          "documentation":"<p>The list of identifiers for the Autonomous VM clusters associated with this database server.</p>"
+        },
+        "autonomousVirtualMachineIds":{
+          "shape":"StringList",
+          "documentation":"<p>The list of unique identifiers for the Autonomous VMs associated with this database server.</p>"
+        }
+      },
+      "documentation":"<p>Information about a database server.</p>"
+    },
+    "DbServerList":{
+      "type":"list",
+      "member":{"shape":"DbServerSummary"}
+    },
+    "DbServerPatchingDetails":{
+      "type":"structure",
+      "members":{
+        "estimatedPatchDuration":{
+          "shape":"Integer",
+          "documentation":"<p>Estimated time, in minutes, to patch one database server.</p>"
+        },
+        "patchingStatus":{
+          "shape":"DbServerPatchingStatus",
+          "documentation":"<p>The status of the patching operation. Possible values are <code>SCHEDULED</code>, <code>MAINTENANCE_IN_PROGRESS</code>, <code>FAILED</code>, and <code>COMPLETE</code>.</p>"
+        },
+        "timePatchingEnded":{
+          "shape":"String",
+          "documentation":"<p>The time when the patching operation ended.</p>"
+        },
+        "timePatchingStarted":{
+          "shape":"String",
+          "documentation":"<p>The time when the patching operation started.</p>"
+        }
+      },
+      "documentation":"<p>The scheduling details for the quarterly maintenance window. Patching and system updates take place during the maintenance window.</p>"
+    },
+    "DbServerPatchingStatus":{
+      "type":"string",
+      "enum":[
+        "COMPLETE",
+        "FAILED",
+        "MAINTENANCE_IN_PROGRESS",
+        "SCHEDULED"
+      ]
+    },
+    "DbServerSummary":{
+      "type":"structure",
+      "members":{
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the database server.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the database server.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the database server.</p>"
+        },
+        "cpuCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of CPU cores enabled on the database server.</p>"
+        },
+        "dbNodeStorageSizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of local node storage, in gigabytes (GB), that's allocated on the database server.</p>"
+        },
+        "dbServerPatchingDetails":{"shape":"DbServerPatchingDetails"},
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the database server. The name doesn't need to be unique.</p>"
+        },
+        "exadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Exadata infrastructure that hosts the database server.</p>"
+        },
+        "ocid":{
+          "shape":"String",
+          "documentation":"<p>The OCID of the database server.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor for the database server.</p>"
+        },
+        "maxCpuCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total number of CPU cores available on the database server.</p>"
+        },
+        "maxDbNodeStorageInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of local node storage, in gigabytes (GB), that's available on the database server.</p>"
+        },
+        "maxMemoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The total amount of memory, in gigabytes (GB), that's available on the database server.</p>"
+        },
+        "memorySizeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The amount of memory, in gigabytes (GB), that's allocated on the database server.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The hardware system model of the Exadata infrastructure that the database server is hosted on. The shape determines the amount of CPU, storage, and memory resources available.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the database server was created.</p>"
+        },
+        "vmClusterIds":{
+          "shape":"StringList",
+          "documentation":"<p>The IDs of the VM clusters that are associated with the database server.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled.</p>"
+        },
+        "autonomousVmClusterIds":{
+          "shape":"StringList",
+          "documentation":"<p>A list of identifiers for the Autonomous VM clusters.</p>"
+        },
+        "autonomousVirtualMachineIds":{
+          "shape":"StringList",
+          "documentation":"<p>A list of unique identifiers for the Autonomous VMs.</p>"
+        }
+      },
+      "documentation":"<p>Information about a database server.</p>"
+    },
+    "DbSystemShapeList":{
+      "type":"list",
+      "member":{"shape":"DbSystemShapeSummary"}
+    },
+    "DbSystemShapeSummary":{
+      "type":"structure",
+      "members":{
+        "availableCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of CPU cores that can be enabled for the shape.</p>"
+        },
+        "availableCoreCountPerNode":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of CPU cores per DB node that can be enabled for the shape.</p>"
+        },
+        "availableDataStorageInTBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of data storage, in terabytes (TB), that can be enabled for the shape.</p>"
+        },
+        "availableDataStoragePerServerInTBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of data storage, in terabytes (TB), that's available per storage server for the shape.</p>"
+        },
+        "availableDbNodePerNodeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of DB node storage, in gigabytes (GB), that's available per DB node for the shape.</p>"
+        },
+        "availableDbNodeStorageInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of DB node storage, in gigabytes (GB), that can be enabled for the shape.</p>"
+        },
+        "availableMemoryInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of memory, in gigabytes (GB), that can be enabled for the shape.</p>"
+        },
+        "availableMemoryPerNodeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum amount of memory, in gigabytes (GB), that's available per DB node for the shape.</p>"
+        },
+        "coreCountIncrement":{
+          "shape":"Integer",
+          "documentation":"<p>The discrete number by which the CPU core count for the shape can be increased or decreased.</p>"
+        },
+        "maxStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of Exadata storage servers that's available for the shape.</p>"
+        },
+        "maximumNodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of compute servers that is available for the shape.</p>"
+        },
+        "minCoreCountPerNode":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum number of CPU cores that can be enabled per node for the shape.</p>"
+        },
+        "minDataStorageInTBs":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum amount of data storage, in terabytes (TB), that must be allocated for the shape.</p>"
+        },
+        "minDbNodeStoragePerNodeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum amount of DB node storage, in gigabytes (GB), that must be allocated per DB node for the shape.</p>"
+        },
+        "minMemoryPerNodeInGBs":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum amount of memory, in gigabytes (GB), that must be allocated per DB node for the shape.</p>"
+        },
+        "minStorageCount":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum number of Exadata storage servers that are available for the shape.</p>"
+        },
+        "minimumCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum number of CPU cores that can be enabled for the shape.</p>"
+        },
+        "minimumNodeCount":{
+          "shape":"Integer",
+          "documentation":"<p>The minimum number of compute servers that are available for the shape.</p>"
+        },
+        "runtimeMinimumCoreCount":{
+          "shape":"Integer",
+          "documentation":"<p>The runtime minimum number of CPU cores that can be enabled for the shape.</p>"
+        },
+        "shapeFamily":{
+          "shape":"String",
+          "documentation":"<p>The family of the shape.</p>"
+        },
+        "shapeType":{
+          "shape":"ShapeType",
+          "documentation":"<p>The shape type. This property is determined by the CPU hardware.</p>"
+        },
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the shape.</p>"
+        },
+        "computeModel":{
+          "shape":"ComputeModel",
+          "documentation":"<p>The OCI model compute model used when you create or clone an instance: ECPU or OCPU. An ECPU is an abstracted measure of compute resources. ECPUs are based on the number of cores elastically allocated from a pool of compute and storage servers. An OCPU is a legacy physical measure of compute resources. OCPUs are based on the physical core of a processor with hyper-threading enabled. </p>"
+        },
+        "areServerTypesSupported":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the hardware system model supports configurable database and server storage types.</p>"
+        }
+      },
+      "documentation":"<p>Information about a hardware system model (shape) that's available for an Exadata infrastructure. The shape determines resources, such as CPU cores, memory, and storage, to allocate to the Exadata infrastructure.</p>"
+    },
+    "DeleteCloudAutonomousVmClusterInput":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster to delete.</p>"
+        }
+      }
+    },
+    "DeleteCloudAutonomousVmClusterOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteCloudExadataInfrastructureInput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure to delete.</p>"
+        }
+      }
+    },
+    "DeleteCloudExadataInfrastructureOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteCloudVmClusterInput":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster to delete.</p>"
+        }
+      }
+    },
+    "DeleteCloudVmClusterOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteOdbNetworkInput":{
+      "type":"structure",
+      "required":[
+        "odbNetworkId",
+        "deleteAssociatedResources"
+      ],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network to delete.</p>"
+        },
+        "deleteAssociatedResources":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to delete associated OCI networking resources along with the ODB network.</p>"
+        }
+      }
+    },
+    "DeleteOdbNetworkOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteOdbPeeringConnectionInput":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "odbPeeringConnectionId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB peering connection to delete.</p>"
+        }
+      }
+    },
+    "DeleteOdbPeeringConnectionOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DiskRedundancy":{
+      "type":"string",
+      "enum":[
+        "HIGH",
+        "NORMAL"
+      ]
+    },
+    "Double":{
+      "type":"double",
+      "box":true
+    },
+    "ExadataIormConfig":{
+      "type":"structure",
+      "members":{
+        "dbPlans":{
+          "shape":"DbIormConfigList",
+          "documentation":"<p>An array of IORM settings for all the database in the Exadata DB system.</p>"
+        },
+        "lifecycleDetails":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current lifecycleState.</p>"
+        },
+        "lifecycleState":{
+          "shape":"IormLifecycleState",
+          "documentation":"<p>The current state of IORM configuration for the Exadata DB system.</p>"
+        },
+        "objective":{
+          "shape":"Objective",
+          "documentation":"<p>The current value for the IORM objective. The default is AUTO.</p>"
+        }
+      },
+      "documentation":"<p>The IORM settings of the Exadata DB system.</p>"
+    },
+    "Float":{
+      "type":"float",
+      "box":true
+    },
+    "GetCloudAutonomousVmClusterInput":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetCloudAutonomousVmClusterOutput":{
+      "type":"structure",
+      "members":{
+        "cloudAutonomousVmCluster":{
+          "shape":"CloudAutonomousVmCluster",
+          "documentation":"<p>The details of the requested Autonomous VM cluster.</p>"
+        }
+      }
+    },
+    "GetCloudExadataInfrastructureInput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "GetCloudExadataInfrastructureOutput":{
+      "type":"structure",
+      "members":{
+        "cloudExadataInfrastructure":{
+          "shape":"CloudExadataInfrastructure",
+          "documentation":"<p>The Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "GetCloudExadataInfrastructureUnallocatedResourcesInput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Cloud Exadata infrastructure for which to retrieve unallocated resources.</p>"
+        },
+        "dbServers":{
+          "shape":"StringList",
+          "documentation":"<p>The database servers to include in the unallocated resources query.</p>"
+        }
+      }
+    },
+    "GetCloudExadataInfrastructureUnallocatedResourcesOutput":{
+      "type":"structure",
+      "members":{
+        "cloudExadataInfrastructureUnallocatedResources":{
+          "shape":"CloudExadataInfrastructureUnallocatedResources",
+          "documentation":"<p>Details about the unallocated resources in the specified Cloud Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "GetCloudVmClusterInput":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster.</p>"
+        }
+      }
+    },
+    "GetCloudVmClusterOutput":{
+      "type":"structure",
+      "members":{
+        "cloudVmCluster":{
+          "shape":"CloudVmCluster",
+          "documentation":"<p>The VM cluster.</p>"
+        }
+      }
+    },
+    "GetDbNodeInput":{
+      "type":"structure",
+      "required":[
+        "cloudVmClusterId",
+        "dbNodeId"
+      ],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster that contains the DB node.</p>"
+        },
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetDbNodeOutput":{
+      "type":"structure",
+      "members":{
+        "dbNode":{"shape":"DbNode"}
+      }
+    },
+    "GetDbServerInput":{
+      "type":"structure",
+      "required":[
+        "cloudExadataInfrastructureId",
+        "dbServerId"
+      ],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Oracle Exadata infrastructure that contains the database server.</p>"
+        },
+        "dbServerId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the database server to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetDbServerOutput":{
+      "type":"structure",
+      "members":{
+        "dbServer":{
+          "shape":"DbServer",
+          "documentation":"<p>The details of the requested database server.</p>"
+        }
+      }
+    },
+    "GetOciOnboardingStatusInput":{
+      "type":"structure",
+      "members":{}
+    },
+    "GetOciOnboardingStatusOutput":{
+      "type":"structure",
+      "members":{
+        "status":{"shape":"OciOnboardingStatus"},
+        "existingTenancyActivationLink":{
+          "shape":"String",
+          "documentation":"<p>The existing OCI tenancy activation link for your Amazon Web Services account.</p>"
+        },
+        "newTenancyActivationLink":{
+          "shape":"String",
+          "documentation":"<p>A new OCI tenancy activation link for your Amazon Web Services account.</p>"
+        }
+      }
+    },
+    "GetOdbNetworkInput":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network.</p>"
+        }
+      }
+    },
+    "GetOdbNetworkOutput":{
+      "type":"structure",
+      "members":{
+        "odbNetwork":{
+          "shape":"OdbNetwork",
+          "documentation":"<p>The ODB network.</p>"
+        }
+      }
+    },
+    "GetOdbPeeringConnectionInput":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "odbPeeringConnectionId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB peering connection to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetOdbPeeringConnectionOutput":{
+      "type":"structure",
+      "members":{
+        "odbPeeringConnection":{"shape":"OdbPeeringConnection"}
+      }
+    },
+    "GiVersionList":{
+      "type":"list",
+      "member":{"shape":"GiVersionSummary"}
+    },
+    "GiVersionSummary":{
+      "type":"structure",
+      "members":{
+        "version":{
+          "shape":"String",
+          "documentation":"<p>The GI software version.</p>"
+        }
+      },
+      "documentation":"<p>Information about a specific version of Oracle Grid Infrastructure (GI) software that can be installed on a VM cluster.</p>"
+    },
+    "HoursOfDay":{
+      "type":"list",
+      "member":{"shape":"Integer"}
+    },
+    "InitializeServiceInput":{
+      "type":"structure",
+      "members":{}
+    },
+    "InitializeServiceOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"},
+        "retryAfterSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>The number of seconds to wait before retrying the request after an internal server error.</p>"
+        }
+      },
+      "documentation":"<p>Occurs when there is an internal failure in the Oracle Database@Amazon Web Services service. Wait and try again.</p>",
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "IormLifecycleState":{
+      "type":"string",
+      "enum":[
+        "BOOTSTRAPPING",
+        "DISABLED",
+        "ENABLED",
+        "FAILED",
+        "UPDATING"
+      ]
+    },
+    "LicenseModel":{
+      "type":"string",
+      "enum":[
+        "BRING_YOUR_OWN_LICENSE",
+        "LICENSE_INCLUDED"
+      ]
+    },
+    "ListAutonomousVirtualMachinesInput":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusterId"],
+      "members":{
+        "maxResults":{
+          "shape":"ListAutonomousVirtualMachinesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return per page.</p>"
+        },
+        "nextToken":{
+          "shape":"ListAutonomousVirtualMachinesInputNextTokenString",
+          "documentation":"<p>The pagination token to continue listing from.</p>"
+        },
+        "cloudAutonomousVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the Autonomous VM cluster whose virtual machines you're listing.</p>"
+        }
+      }
+    },
+    "ListAutonomousVirtualMachinesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListAutonomousVirtualMachinesInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListAutonomousVirtualMachinesOutput":{
+      "type":"structure",
+      "required":["autonomousVirtualMachines"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token from which to continue listing.</p>"
+        },
+        "autonomousVirtualMachines":{
+          "shape":"AutonomousVirtualMachineList",
+          "documentation":"<p>The list of Autonomous VMs in the specified Autonomous VM cluster.</p>"
+        }
+      }
+    },
+    "ListCloudAutonomousVmClustersInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListCloudAutonomousVmClustersInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return per page.</p>"
+        },
+        "nextToken":{
+          "shape":"ListCloudAutonomousVmClustersInputNextTokenString",
+          "documentation":"<p>The pagination token to continue listing from.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Cloud Exadata Infrastructure that hosts the Autonomous VM clusters to be listed.</p>"
+        }
+      }
+    },
+    "ListCloudAutonomousVmClustersInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListCloudAutonomousVmClustersInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListCloudAutonomousVmClustersOutput":{
+      "type":"structure",
+      "required":["cloudAutonomousVmClusters"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token to continue listing from.</p>"
+        },
+        "cloudAutonomousVmClusters":{
+          "shape":"CloudAutonomousVmClusterList",
+          "documentation":"<p>The list of Autonomous VM clusters in the specified Cloud Exadata Infrastructure.</p>"
+        }
+      }
+    },
+    "ListCloudExadataInfrastructuresInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListCloudExadataInfrastructuresInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListCloudExadataInfrastructuresInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        }
+      }
+    },
+    "ListCloudExadataInfrastructuresInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListCloudExadataInfrastructuresInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListCloudExadataInfrastructuresOutput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructures"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "cloudExadataInfrastructures":{
+          "shape":"CloudExadataInfrastructureList",
+          "documentation":"<p>The list of Exadata infrastructures along with their properties.</p>"
+        }
+      }
+    },
+    "ListCloudVmClustersInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListCloudVmClustersInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListCloudVmClustersInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Oracle Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "ListCloudVmClustersInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListCloudVmClustersInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListCloudVmClustersOutput":{
+      "type":"structure",
+      "required":["cloudVmClusters"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "cloudVmClusters":{
+          "shape":"CloudVmClusterList",
+          "documentation":"<p>The list of VM clusters along with their properties.</p>"
+        }
+      }
+    },
+    "ListDbNodesInput":{
+      "type":"structure",
+      "required":["cloudVmClusterId"],
+      "members":{
+        "maxResults":{
+          "shape":"ListDbNodesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListDbNodesInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster.</p>"
+        }
+      }
+    },
+    "ListDbNodesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListDbNodesInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListDbNodesOutput":{
+      "type":"structure",
+      "required":["dbNodes"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "dbNodes":{
+          "shape":"DbNodeList",
+          "documentation":"<p>The list of DB nodes along with their properties.</p>"
+        }
+      }
+    },
+    "ListDbServersInput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Oracle Exadata infrastructure.</p>"
+        },
+        "maxResults":{
+          "shape":"ListDbServersInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListDbServersInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        }
+      }
+    },
+    "ListDbServersInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListDbServersInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListDbServersOutput":{
+      "type":"structure",
+      "required":["dbServers"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "dbServers":{
+          "shape":"DbServerList",
+          "documentation":"<p>The list of database servers along with their properties.</p>"
+        }
+      }
+    },
+    "ListDbSystemShapesInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListDbSystemShapesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListDbSystemShapesInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "availabilityZone":{
+          "shape":"ListDbSystemShapesInputAvailabilityZoneString",
+          "documentation":"<p>The logical name of the AZ, for example, us-east-1a. This name varies depending on the account.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"ListDbSystemShapesInputAvailabilityZoneIdString",
+          "documentation":"<p>The physical ID of the AZ, for example, use1-az4. This ID persists across accounts.</p>"
+        }
+      }
+    },
+    "ListDbSystemShapesInputAvailabilityZoneIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "ListDbSystemShapesInputAvailabilityZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "ListDbSystemShapesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListDbSystemShapesInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListDbSystemShapesOutput":{
+      "type":"structure",
+      "required":["dbSystemShapes"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "dbSystemShapes":{
+          "shape":"DbSystemShapeList",
+          "documentation":"<p>The list of shapes and their properties.</p>"
+        }
+      }
+    },
+    "ListGiVersionsInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListGiVersionsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListGiVersionsInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "shape":{
+          "shape":"ListGiVersionsInputShapeString",
+          "documentation":"<p>The shape to return GI versions for. For a list of valid shapes, use the <code>ListDbSystemShapes</code> operation..</p>"
+        }
+      }
+    },
+    "ListGiVersionsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListGiVersionsInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListGiVersionsInputShapeString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "ListGiVersionsOutput":{
+      "type":"structure",
+      "required":["giVersions"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "giVersions":{
+          "shape":"GiVersionList",
+          "documentation":"<p>The list of GI versions and their properties.</p>"
+        }
+      }
+    },
+    "ListOdbNetworksInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListOdbNetworksInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListOdbNetworksInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        }
+      }
+    },
+    "ListOdbNetworksInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListOdbNetworksInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListOdbNetworksOutput":{
+      "type":"structure",
+      "required":["odbNetworks"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "odbNetworks":{
+          "shape":"OdbNetworkList",
+          "documentation":"<p>The list of ODB networks.</p>"
+        }
+      }
+    },
+    "ListOdbPeeringConnectionsInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListOdbPeeringConnectionsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of ODB peering connections to return in the response.</p> <p>Default: <code>20</code> </p> <p>Constraints:</p> <ul> <li> <p>Must be between 1 and 100.</p> </li> </ul>"
+        },
+        "nextToken":{
+          "shape":"ListOdbPeeringConnectionsInputNextTokenString",
+          "documentation":"<p>The pagination token for the next page of ODB peering connections.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The identifier of the ODB network to list peering connections for.</p> <p>If not specified, lists all ODB peering connections in the account.</p>"
+        }
+      }
+    },
+    "ListOdbPeeringConnectionsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListOdbPeeringConnectionsInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListOdbPeeringConnectionsOutput":{
+      "type":"structure",
+      "required":["odbPeeringConnections"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token for the next page of ODB peering connections.</p>"
+        },
+        "odbPeeringConnections":{
+          "shape":"OdbPeeringConnectionList",
+          "documentation":"<p>The list of ODB peering connections.</p>"
+        }
+      }
+    },
+    "ListSystemVersionsInput":{
+      "type":"structure",
+      "required":[
+        "giVersion",
+        "shape"
+      ],
+      "members":{
+        "maxResults":{
+          "shape":"ListSystemVersionsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output.</p> <p>Default: <code>10</code> </p>"
+        },
+        "nextToken":{
+          "shape":"ListSystemVersionsInputNextTokenString",
+          "documentation":"<p>The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request.</p>"
+        },
+        "giVersion":{
+          "shape":"ListSystemVersionsInputGiVersionString",
+          "documentation":"<p>The software version of the Exadata Grid Infrastructure (GI).</p>"
+        },
+        "shape":{
+          "shape":"ListSystemVersionsInputShapeString",
+          "documentation":"<p>The Exadata hardware system model.</p>"
+        }
+      }
+    },
+    "ListSystemVersionsInputGiVersionString":{
+      "type":"string",
+      "max":30,
+      "min":1
+    },
+    "ListSystemVersionsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListSystemVersionsInputNextTokenString":{
+      "type":"string",
+      "max":8192,
+      "min":1
+    },
+    "ListSystemVersionsInputShapeString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "ListSystemVersionsOutput":{
+      "type":"structure",
+      "required":["systemVersions"],
+      "members":{
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to include in another request to get the next page of items. This value is <code>null</code> when there are no more items to return.</p>"
+        },
+        "systemVersions":{
+          "shape":"SystemVersionList",
+          "documentation":"<p>The list of system versions.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to list tags for.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"ResponseTagMap",
+          "documentation":"<p>The list of tags applied to the resource.</p>"
+        }
+      }
+    },
+    "MaintenanceWindow":{
+      "type":"structure",
+      "members":{
+        "customActionTimeoutInMins":{
+          "shape":"MaintenanceWindowCustomActionTimeoutInMinsInteger",
+          "documentation":"<p>The custom action timeout in minutes for the maintenance window.</p>"
+        },
+        "daysOfWeek":{
+          "shape":"DaysOfWeek",
+          "documentation":"<p>The days of the week when maintenance can be performed.</p>"
+        },
+        "hoursOfDay":{
+          "shape":"HoursOfDay",
+          "documentation":"<p>The hours of the day when maintenance can be performed.</p>"
+        },
+        "isCustomActionTimeoutEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether custom action timeout is enabled for the maintenance window.</p>"
+        },
+        "leadTimeInWeeks":{
+          "shape":"MaintenanceWindowLeadTimeInWeeksInteger",
+          "documentation":"<p>The lead time in weeks before the maintenance window.</p>"
+        },
+        "months":{
+          "shape":"Months",
+          "documentation":"<p>The months when maintenance can be performed.</p>"
+        },
+        "patchingMode":{
+          "shape":"PatchingModeType",
+          "documentation":"<p>The patching mode for the maintenance window.</p>"
+        },
+        "preference":{
+          "shape":"PreferenceType",
+          "documentation":"<p>The preference for the maintenance window scheduling.</p>"
+        },
+        "skipRu":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to skip release updates during maintenance.</p>"
+        },
+        "weeksOfMonth":{
+          "shape":"WeeksOfMonth",
+          "documentation":"<p>The weeks of the month when maintenance can be performed.</p>"
+        }
+      },
+      "documentation":"<p>The scheduling details for the maintenance window. Patching and system updates take place during the maintenance window.</p>"
+    },
+    "MaintenanceWindowCustomActionTimeoutInMinsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":120,
+      "min":15
+    },
+    "MaintenanceWindowLeadTimeInWeeksInteger":{
+      "type":"integer",
+      "box":true,
+      "max":4,
+      "min":1
+    },
+    "ManagedResourceStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "ENABLING",
+        "DISABLED",
+        "DISABLING"
+      ]
+    },
+    "ManagedS3BackupAccess":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"ManagedResourceStatus",
+          "documentation":"<p>The status of the managed Amazon S3 backup access.</p>"
+        },
+        "ipv4Addresses":{
+          "shape":"StringList",
+          "documentation":"<p>The IPv4 addresses for the managed Amazon S3 backup access.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for managed Amazon S3 backup access from the ODB network.</p>"
+    },
+    "ManagedServices":{
+      "type":"structure",
+      "members":{
+        "serviceNetworkArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
+        "resourceGatewayArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
+        },
+        "managedServicesIpv4Cidrs":{
+          "shape":"StringList",
+          "documentation":"<p>The IPv4 CIDR blocks for the managed services.</p>"
+        },
+        "serviceNetworkEndpoint":{
+          "shape":"ServiceNetworkEndpoint",
+          "documentation":"<p>The service network endpoint configuration.</p>"
+        },
+        "managedS3BackupAccess":{
+          "shape":"ManagedS3BackupAccess",
+          "documentation":"<p>The managed Amazon S3 backup access configuration.</p>"
+        },
+        "zeroEtlAccess":{
+          "shape":"ZeroEtlAccess",
+          "documentation":"<p>The Zero-ETL access configuration.</p>"
+        },
+        "s3Access":{
+          "shape":"S3Access",
+          "documentation":"<p>The Amazon S3 access configuration.</p>"
+        }
+      },
+      "documentation":"<p>The managed services configuration for the ODB network.</p>"
+    },
+    "Month":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"MonthName",
+          "documentation":"<p>The name of the month.</p>"
+        }
+      },
+      "documentation":"<p>An enumeration of months used for scheduling maintenance windows.</p>"
+    },
+    "MonthName":{
+      "type":"string",
+      "enum":[
+        "JANUARY",
+        "FEBRUARY",
+        "MARCH",
+        "APRIL",
+        "MAY",
+        "JUNE",
+        "JULY",
+        "AUGUST",
+        "SEPTEMBER",
+        "OCTOBER",
+        "NOVEMBER",
+        "DECEMBER"
+      ]
+    },
+    "Months":{
+      "type":"list",
+      "member":{"shape":"Month"}
+    },
+    "Objective":{
+      "type":"string",
+      "enum":[
+        "AUTO",
+        "BALANCED",
+        "BASIC",
+        "HIGH_THROUGHPUT",
+        "LOW_LATENCY"
+      ]
+    },
+    "OciDnsForwardingConfig":{
+      "type":"structure",
+      "members":{
+        "domainName":{
+          "shape":"OciDnsForwardingConfigDomainNameString",
+          "documentation":"<p>Domain name to which DNS resolver forwards to.</p>"
+        },
+        "ociDnsListenerIp":{
+          "shape":"String",
+          "documentation":"<p>OCI DNS listener IP for custom DNS setup.</p>"
+        }
+      },
+      "documentation":"<p>DNS configuration to forward DNS resolver endpoints to your OCI Private Zone.</p>"
+    },
+    "OciDnsForwardingConfigDomainNameString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OciDnsForwardingConfigList":{
+      "type":"list",
+      "member":{"shape":"OciDnsForwardingConfig"}
+    },
+    "OciOnboardingStatus":{
+      "type":"string",
+      "documentation":"<p/>",
+      "enum":[
+        "NOT_STARTED",
+        "PENDING_LINK_GENERATION",
+        "PENDING_CUSTOMER_ACTION",
+        "PENDING_INITIALIZATION",
+        "ACTIVATING",
+        "ACTIVE_IN_HOME_REGION",
+        "ACTIVE",
+        "ACTIVE_LIMITED",
+        "FAILED",
+        "PUBLIC_OFFER_UNSUPPORTED",
+        "SUSPENDED",
+        "CANCELED"
+      ]
+    },
+    "OdbNetwork":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the ODB network.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the ODB network.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the ODB network.</p>"
+        },
+        "odbNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network.</p>"
+        },
+        "availabilityZone":{
+          "shape":"OdbNetworkAvailabilityZoneString",
+          "documentation":"<p>The Amazon Web Services Availability Zone (AZ) where the ODB network is located.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"OdbNetworkAvailabilityZoneIdString",
+          "documentation":"<p>The AZ ID of the AZ where the ODB network is located.</p>"
+        },
+        "clientSubnetCidr":{
+          "shape":"OdbNetworkClientSubnetCidrString",
+          "documentation":"<p>The CIDR range of the client subnet in the ODB network.</p>"
+        },
+        "backupSubnetCidr":{
+          "shape":"OdbNetworkBackupSubnetCidrString",
+          "documentation":"<p>The CIDR range of the backup subnet in the ODB network.</p>"
+        },
+        "customDomainName":{
+          "shape":"OdbNetworkCustomDomainNameString",
+          "documentation":"<p>The domain name for the resources in the ODB network.</p>"
+        },
+        "defaultDnsPrefix":{
+          "shape":"OdbNetworkDefaultDnsPrefixString",
+          "documentation":"<p>The DNS prefix to the default DNS domain name. The default DNS domain name is oraclevcn.com.</p>"
+        },
+        "peeredCidrs":{
+          "shape":"StringList",
+          "documentation":"<p>The list of CIDR ranges from the peered VPC that are allowed access to the ODB network.</p>"
+        },
+        "ociNetworkAnchorId":{
+          "shape":"OdbNetworkOciNetworkAnchorIdString",
+          "documentation":"<p>The unique identifier of the OCI network anchor for the ODB network.</p>"
+        },
+        "ociNetworkAnchorUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL of the OCI network anchor for the ODB network.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor that's associated with the ODB network.</p>"
+        },
+        "ociVcnId":{
+          "shape":"OdbNetworkOciVcnIdString",
+          "documentation":"<p>The Oracle Cloud ID (OCID) for the Virtual Cloud Network (VCN) that's associated with the ODB network.</p>"
+        },
+        "ociVcnUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL for the VCN that's associated with the ODB network.</p>"
+        },
+        "ociDnsForwardingConfigs":{
+          "shape":"OciDnsForwardingConfigList",
+          "documentation":"<p>The DNS resolver endpoint in OCI for forwarding DNS queries for the ociPrivateZone domain.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the ODB network was created.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the ODB network, expressed as a percentage.</p>"
+        },
+        "managedServices":{
+          "shape":"ManagedServices",
+          "documentation":"<p>The managed services configuration for the ODB network.</p>"
+        }
+      },
+      "documentation":"<p>Information about an ODB network.</p>"
+    },
+    "OdbNetworkAvailabilityZoneIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkAvailabilityZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkBackupSubnetCidrString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkClientSubnetCidrString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkCustomDomainNameString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkDefaultDnsPrefixString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkList":{
+      "type":"list",
+      "member":{"shape":"OdbNetworkSummary"}
+    },
+    "OdbNetworkOciNetworkAnchorIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkOciVcnIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummary":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the ODB network.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the ODB network.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the current status of the ODB network.</p>"
+        },
+        "odbNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network.</p>"
+        },
+        "availabilityZone":{
+          "shape":"OdbNetworkSummaryAvailabilityZoneString",
+          "documentation":"<p>The Amazon Web Services Availability Zone (AZ) where the ODB network is located.</p>"
+        },
+        "availabilityZoneId":{
+          "shape":"OdbNetworkSummaryAvailabilityZoneIdString",
+          "documentation":"<p>The AZ ID of the AZ where the ODB network is located.</p>"
+        },
+        "clientSubnetCidr":{
+          "shape":"OdbNetworkSummaryClientSubnetCidrString",
+          "documentation":"<p>The CIDR range of the client subnet in the ODB network.</p>"
+        },
+        "backupSubnetCidr":{
+          "shape":"OdbNetworkSummaryBackupSubnetCidrString",
+          "documentation":"<p>The CIDR range of the backup subnet in the ODB network.</p>"
+        },
+        "customDomainName":{
+          "shape":"OdbNetworkSummaryCustomDomainNameString",
+          "documentation":"<p>The domain name for the resources in the ODB network.</p>"
+        },
+        "defaultDnsPrefix":{
+          "shape":"OdbNetworkSummaryDefaultDnsPrefixString",
+          "documentation":"<p>The DNS prefix to the default DNS domain name. The default DNS domain name is oraclevcn.com.</p>"
+        },
+        "peeredCidrs":{
+          "shape":"StringList",
+          "documentation":"<p>The list of CIDR ranges from the peered VPC that are allowed access to the ODB network.</p>"
+        },
+        "ociNetworkAnchorId":{
+          "shape":"OdbNetworkSummaryOciNetworkAnchorIdString",
+          "documentation":"<p>The unique identifier of the OCI network anchor for the ODB network.</p>"
+        },
+        "ociNetworkAnchorUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL of the OCI network anchor for the ODB network.</p>"
+        },
+        "ociResourceAnchorName":{
+          "shape":"String",
+          "documentation":"<p>The name of the OCI resource anchor associated with the ODB network.</p>"
+        },
+        "ociVcnId":{
+          "shape":"OdbNetworkSummaryOciVcnIdString",
+          "documentation":"<p>The Oracle Cloud ID (OCID) for the Virtual Cloud Network (VCN) associated with the ODB network.</p>"
+        },
+        "ociVcnUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL for the VCN that's associated with the ODB network.</p>"
+        },
+        "ociDnsForwardingConfigs":{
+          "shape":"OciDnsForwardingConfigList",
+          "documentation":"<p>The DNS resolver endpoint in OCI for forwarding DNS queries for the ociPrivateZone domain.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the ODB network was created.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The amount of progress made on the current operation on the ODB network, expressed as a percentage.</p>"
+        },
+        "managedServices":{
+          "shape":"ManagedServices",
+          "documentation":"<p>The managed services configuration for the ODB network.</p>"
+        }
+      },
+      "documentation":"<p>Information about an ODB network.</p>"
+    },
+    "OdbNetworkSummaryAvailabilityZoneIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryAvailabilityZoneString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryBackupSubnetCidrString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryClientSubnetCidrString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryCustomDomainNameString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryDefaultDnsPrefixString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryOciNetworkAnchorIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbNetworkSummaryOciVcnIdString":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "OdbPeeringConnection":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "odbPeeringConnectionId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB peering connection. A sample ID is <code>odbpcx-abcdefgh12345678</code>.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the ODB peering connection.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The status of the ODB peering connection.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the ODB peering connection.</p>"
+        },
+        "odbPeeringConnectionArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB peering connection.</p> <p>Example: <code>arn:aws:odb:us-east-1:123456789012:odb-peering-connection/odbpcx-abcdefgh12345678</code> </p>"
+        },
+        "odbNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network that initiated the peering connection.</p>"
+        },
+        "peerNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the peer network.</p>"
+        },
+        "odbPeeringConnectionType":{
+          "shape":"String",
+          "documentation":"<p>The type of the ODB peering connection.</p> <p>Valid Values: <code>ODB-VPC | ODB-ODB</code> </p>"
+        },
+        "peerNetworkCidrs":{
+          "shape":"PeeredCidrList",
+          "documentation":"<p>The CIDR blocks associated with the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the ODB peering connection was created.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The percentage progress of the ODB peering connection creation or deletion.</p>"
+        }
+      },
+      "documentation":"<p>A peering connection between an ODB network and either another ODB network or a customer-owned VPC.</p>"
+    },
+    "OdbPeeringConnectionList":{
+      "type":"list",
+      "member":{"shape":"OdbPeeringConnectionSummary"}
+    },
+    "OdbPeeringConnectionSummary":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "odbPeeringConnectionId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB peering connection. A sample ID is <code>odbpcx-abcdefgh12345678</code>.</p>"
+        },
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the ODB peering connection.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The status of the ODB peering connection.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>The reason for the current status of the ODB peering connection.</p>"
+        },
+        "odbPeeringConnectionArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB peering connection.</p>"
+        },
+        "odbNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the ODB network that initiated the peering connection.</p>"
+        },
+        "peerNetworkArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the peer network.</p>"
+        },
+        "odbPeeringConnectionType":{
+          "shape":"String",
+          "documentation":"<p>The type of the ODB peering connection.</p> <p>Valid Values: <code>ODB-VPC | ODB-ODB</code> </p>"
+        },
+        "peerNetworkCidrs":{
+          "shape":"PeeredCidrList",
+          "documentation":"<p>The CIDR blocks associated with the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection.</p>"
+        },
+        "createdAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the ODB peering connection was created.</p>"
+        },
+        "percentProgress":{
+          "shape":"Float",
+          "documentation":"<p>The percentage progress of the ODB peering connection creation or deletion.</p>"
+        }
+      },
+      "documentation":"<p>A summary of an ODB peering connection.</p>"
+    },
+    "PatchingModeType":{
+      "type":"string",
+      "enum":[
+        "ROLLING",
+        "NONROLLING"
+      ]
+    },
+    "PeeredCidr":{
+      "type":"string",
+      "max":18,
+      "min":1,
+      "pattern":"(?:(?:\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d|\\d)\\/(?:[1-2][0-9]|3[0-2]|[1-9])"
+    },
+    "PeeredCidrList":{
+      "type":"list",
+      "member":{"shape":"PeeredCidr"}
+    },
+    "PolicyDocument":{
+      "type":"string",
+      "max":20480,
+      "min":3
+    },
+    "PreferenceType":{
+      "type":"string",
+      "enum":[
+        "NO_PREFERENCE",
+        "CUSTOM_PREFERENCE"
+      ]
+    },
+    "RebootDbNodeInput":{
+      "type":"structure",
+      "required":[
+        "cloudVmClusterId",
+        "dbNodeId"
+      ],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster that contains the DB node to reboot.</p>"
+        },
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node to reboot.</p>"
+        }
+      }
+    },
+    "RebootDbNodeOutput":{
+      "type":"structure",
+      "required":["dbNodeId"],
+      "members":{
+        "dbNodeId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the DB node that was rebooted.</p>"
+        },
+        "status":{
+          "shape":"DbNodeResourceStatus",
+          "documentation":"<p>The current status of the DB node after the reboot operation.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the DB node after the reboot operation.</p>"
+        }
+      }
+    },
+    "RequestTagMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":200,
+      "min":1
+    },
+    "ResourceArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:(?:aws|aws-cn|aws-us-gov|aws-iso-{0,1}[a-z]{0,1}):[a-z0-9-]+:[a-z0-9-]*:[0-9]+:[a-z0-9-]+/[a-z0-9-_]{6,64}"
+    },
+    "ResourceDisplayName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z_](?!.*--)[a-zA-Z0-9_-]*"
+    },
+    "ResourceId":{
+      "type":"string",
+      "max":64,
+      "min":6,
+      "pattern":"[a-zA-Z0-9_~.-]+"
+    },
+    "ResourceIdOrArn":{
+      "type":"string",
+      "max":2048,
+      "min":6,
+      "pattern":"(arn:(?:aws|aws-cn|aws-us-gov|aws-iso-{0,1}[a-z]{0,1}):[a-z0-9-]+:[a-z0-9-]*:[0-9]+:[a-z0-9-]+/[a-zA-Z0-9_~.-]{6,64}|[a-zA-Z0-9_~.-]{6,64})"
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "resourceId",
+        "resourceType"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the resource that was not found.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>The type of resource that was not found.</p>"
+        }
+      },
+      "documentation":"<p>The operation tried to access a resource that doesn't exist. Make sure you provided the correct resource and try again.</p>",
+      "exception":true
+    },
+    "ResourceStatus":{
+      "type":"string",
+      "enum":[
+        "AVAILABLE",
+        "FAILED",
+        "PROVISIONING",
+        "TERMINATED",
+        "TERMINATING",
+        "UPDATING",
+        "MAINTENANCE_IN_PROGRESS"
+      ]
+    },
+    "ResponseTagMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":200,
+      "min":0
+    },
+    "S3Access":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"ManagedResourceStatus",
+          "documentation":"<p>The status of the Amazon S3 access.</p>"
+        },
+        "ipv4Addresses":{
+          "shape":"StringList",
+          "documentation":"<p>The IPv4 addresses for the Amazon S3 access.</p>"
+        },
+        "domainName":{
+          "shape":"String",
+          "documentation":"<p>The domain name for the Amazon S3 access.</p>"
+        },
+        "s3PolicyDocument":{
+          "shape":"String",
+          "documentation":"<p>The endpoint policy for the Amazon S3 access.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for Amazon S3 access from the ODB network.</p>"
+    },
+    "SensitiveString":{
+      "type":"string",
+      "sensitive":true
+    },
+    "SensitiveStringList":{
+      "type":"list",
+      "member":{"shape":"SensitiveString"}
+    },
+    "ServiceNetworkEndpoint":{
+      "type":"structure",
+      "members":{
+        "vpcEndpointId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the VPC endpoint.</p>"
+        },
+        "vpcEndpointType":{
+          "shape":"VpcEndpointType",
+          "documentation":"<p>The type of the VPC endpoint.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a service network endpoint.</p>"
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "resourceId",
+        "resourceType",
+        "quotaCode"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "resourceId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the resource that exceeded the service quota.</p>"
+        },
+        "resourceType":{
+          "shape":"String",
+          "documentation":"<p>The type of resource that exceeded the service quota.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>The unqiue identifier of the service quota that was exceeded.</p>"
+        }
+      },
+      "documentation":"<p>You have exceeded the service quota.</p>",
+      "exception":true
+    },
+    "ShapeType":{
+      "type":"string",
+      "enum":[
+        "AMD",
+        "INTEL",
+        "INTEL_FLEX_X9",
+        "AMPERE_FLEX_A1"
+      ]
+    },
+    "StartDbNodeInput":{
+      "type":"structure",
+      "required":[
+        "cloudVmClusterId",
+        "dbNodeId"
+      ],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster that contains the DB node to start.</p>"
+        },
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node to start.</p>"
+        }
+      }
+    },
+    "StartDbNodeOutput":{
+      "type":"structure",
+      "required":["dbNodeId"],
+      "members":{
+        "dbNodeId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the DB node that was started.</p>"
+        },
+        "status":{
+          "shape":"DbNodeResourceStatus",
+          "documentation":"<p>The current status of the DB node after the start operation.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the DB node after the start operation.</p>"
+        }
+      }
+    },
+    "StopDbNodeInput":{
+      "type":"structure",
+      "required":[
+        "cloudVmClusterId",
+        "dbNodeId"
+      ],
+      "members":{
+        "cloudVmClusterId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the VM cluster that contains the DB node to stop.</p>"
+        },
+        "dbNodeId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The unique identifier of the DB node to stop.</p>"
+        }
+      }
+    },
+    "StopDbNodeOutput":{
+      "type":"structure",
+      "required":["dbNodeId"],
+      "members":{
+        "dbNodeId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the DB node that was stopped.</p>"
+        },
+        "status":{
+          "shape":"DbNodeResourceStatus",
+          "documentation":"<p>The current status of the DB node after the stop operation.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the DB node after the stop operation.</p>"
+        }
+      }
+    },
+    "String":{"type":"string"},
+    "StringList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":1024,
+      "min":1
+    },
+    "SyntheticTimestamp_date_time":{
+      "type":"timestamp",
+      "timestampFormat":"iso8601"
+    },
+    "SystemVersionList":{
+      "type":"list",
+      "member":{"shape":"SystemVersionSummary"}
+    },
+    "SystemVersionSummary":{
+      "type":"structure",
+      "members":{
+        "giVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of GI software.</p>"
+        },
+        "shape":{
+          "shape":"String",
+          "documentation":"<p>The Exadata hardware model.</p>"
+        },
+        "systemVersions":{
+          "shape":"StringList",
+          "documentation":"<p>The Exadata system versions that are compatible with the specified Exadata shape and GI version.</p>"
+        }
+      },
+      "documentation":"<p>Information about the compatible system versions that can be used with a specific Exadata shape and Grid Infrastructure (GI) version.</p>"
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeys":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":1
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to apply tags to.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>The list of tags to apply to the resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"},
+        "retryAfterSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>The number of seconds to wait before retrying the request after being throttled.</p>"
+        }
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "exception":true
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to remove tags from.</p>"
+        },
+        "tagKeys":{
+          "shape":"TagKeys",
+          "documentation":"<p>The names (keys) of the tags to remove from the resource.</p>"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateCloudExadataInfrastructureInput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "cloudExadataInfrastructureId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the Exadata infrastructure to update.</p>"
+        },
+        "maintenanceWindow":{"shape":"MaintenanceWindow"}
+      }
+    },
+    "UpdateCloudExadataInfrastructureOutput":{
+      "type":"structure",
+      "required":["cloudExadataInfrastructureId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the updated Exadata infrastructure.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the Exadata infrastructure after the update operation.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the Exadata infrastructure after the update operation.</p>"
+        },
+        "cloudExadataInfrastructureId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the updated Exadata infrastructure.</p>"
+        }
+      }
+    },
+    "UpdateOdbNetworkInput":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "odbNetworkId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The unique identifier of the ODB network to update.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>The new user-friendly name of the ODB network.</p>"
+        },
+        "peeredCidrsToBeAdded":{
+          "shape":"StringList",
+          "documentation":"<p>The list of CIDR ranges from the peered VPC that allow access to the ODB network.</p>"
+        },
+        "peeredCidrsToBeRemoved":{
+          "shape":"StringList",
+          "documentation":"<p>The list of CIDR ranges from the peered VPC to remove from the ODB network.</p>"
+        },
+        "s3Access":{
+          "shape":"Access",
+          "documentation":"<p>Specifies the updated configuration for Amazon S3 access from the ODB network.</p>"
+        },
+        "zeroEtlAccess":{
+          "shape":"Access",
+          "documentation":"<p>Specifies the updated configuration for Zero-ETL access from the ODB network.</p>"
+        },
+        "s3PolicyDocument":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>Specifies the updated endpoint policy for Amazon S3 access from the ODB network.</p>"
+        }
+      }
+    },
+    "UpdateOdbNetworkOutput":{
+      "type":"structure",
+      "required":["odbNetworkId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The user-friendly name of the ODB network.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the ODB network.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the ODB network.</p>"
+        },
+        "odbNetworkId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the ODB network.</p>"
+        }
+      }
+    },
+    "UpdateOdbPeeringConnectionInput":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "odbPeeringConnectionId":{
+          "shape":"ResourceIdOrArn",
+          "documentation":"<p>The identifier of the Oracle Database@Amazon Web Services peering connection to update.</p>"
+        },
+        "displayName":{
+          "shape":"ResourceDisplayName",
+          "documentation":"<p>A new display name for the peering connection.</p>"
+        },
+        "peerNetworkCidrsToBeAdded":{
+          "shape":"PeeredCidrList",
+          "documentation":"<p>A list of CIDR blocks to add to the peering connection. These CIDR blocks define the IP address ranges that can communicate through the peering connection. The CIDR blocks must not overlap with existing CIDR blocks in the Oracle Database@Amazon Web Services network.</p>"
+        },
+        "peerNetworkCidrsToBeRemoved":{
+          "shape":"PeeredCidrList",
+          "documentation":"<p>A list of CIDR blocks to remove from the peering connection. The CIDR blocks must currently exist in the peering connection.</p>"
+        }
+      }
+    },
+    "UpdateOdbPeeringConnectionOutput":{
+      "type":"structure",
+      "required":["odbPeeringConnectionId"],
+      "members":{
+        "displayName":{
+          "shape":"String",
+          "documentation":"<p>The display name of the peering connection.</p>"
+        },
+        "status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The status of the peering connection update operation.</p>"
+        },
+        "statusReason":{
+          "shape":"String",
+          "documentation":"<p>Additional information about the status of the peering connection update operation.</p>"
+        },
+        "odbPeeringConnectionId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the Oracle Database@Amazon Web Services peering connection that was updated.</p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "message",
+        "reason"
+      ],
+      "members":{
+        "message":{"shape":"String"},
+        "reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>The reason why the validation failed.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>A list of fields that failed validation.</p>"
+        }
+      },
+      "documentation":"<p>The request has failed validation because it is missing required fields or has invalid inputs.</p>",
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "message"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The field name for which validation failed.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The description of the error.</p>"
+        }
+      },
+      "documentation":"<p>The input failed to meet the constraints specified by the service in a specified field. Make sure you provided the correct input and try again.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "unknownOperation",
+        "cannotParse",
+        "fieldValidationFailed",
+        "other"
+      ]
+    },
+    "VpcEndpointType":{
+      "type":"string",
+      "enum":["SERVICENETWORK"]
+    },
+    "WeeksOfMonth":{
+      "type":"list",
+      "member":{"shape":"Integer"}
+    },
+    "ZeroEtlAccess":{
+      "type":"structure",
+      "members":{
+        "status":{
+          "shape":"ManagedResourceStatus",
+          "documentation":"<p>The status of the Zero-ETL access.</p>"
+        },
+        "cidr":{
+          "shape":"String",
+          "documentation":"<p>The CIDR block for the Zero-ETL access.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for Zero-ETL access from the ODB network.</p>"
+    }
+  },
+  "documentation":"<p>Oracle Database@Amazon Web Services is an offering that enables you to access Oracle Exadata infrastructure managed by Oracle Cloud Infrastructure (OCI) inside Amazon Web Services data centers. You can migrate your Oracle Exadata workloads, establish low-latency connectivity with applications running on Amazon Web Services, and integrate with Amazon Web Services services. For example, you can run application servers in a Virtual Private Cloud (VPC) and access an Oracle Exadata system running in Oracle Database@Amazon Web Services. You can get started with Oracle Database@Amazon Web Services by using the familiar Amazon Web Services Management Console, APIs, or CLI.</p> <p>This interface reference for Oracle Database@Amazon Web Services contains documentation for a programming or command line interface that you can use to manage Oracle Database@Amazon Web Services. Oracle Database@Amazon Web Services is asynchronous, which means that some interfaces might require techniques such as polling or callback functions to determine when a command has been applied. The reference structure is as follows.</p> <p> <b>Oracle Database@Amazon Web Services API Reference</b> </p> <ul> <li> <p>For the alphabetical list of API actions, see <a href=\"https://docs.aws.amazon.com/odb/latest/APIReference/API_Operations.html\">API Actions</a>.</p> </li> <li> <p>For the alphabetical list of data types, see <a href=\"https://docs.aws.amazon.com/odb/latest/APIReference/API_Types.html\">Data Types</a>.</p> </li> <li> <p>For a list of common query parameters, see <a href=\"https://docs.aws.amazon.com/odb/latest/APIReference/CommonParameters.html\">Common Parameters</a>.</p> </li> <li> <p>For descriptions of the error codes, see <a href=\"https://docs.aws.amazon.com/odb/latest/APIReference/CommonErrors.html\">Common Errors</a>.</p> </li> </ul>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/odb/2024-08-20/waiters-2.json 2.31.35-1/awscli/botocore/data/odb/2024-08-20/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/odb/2024-08-20/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/odb/2024-08-20/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/omics/2022-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/omics/2022-11-28/paginators-1.json 2.31.35-1/awscli/botocore/data/omics/2022-11-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/omics/2022-11-28/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/omics/2022-11-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -125,6 +125,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "items"
+    },
+    "ListWorkflowVersions": {
+      "input_token": "startingToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/omics/2022-11-28/service-2.json 2.31.35-1/awscli/botocore/data/omics/2022-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/omics/2022-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/omics/2022-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -32,7 +32,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Stops a multipart upload.</p>",
+      "documentation":"<p>Stops a multipart read set upload into a sequence store and returns a response with no body if the operation is successful. To confirm that a multipart read set upload has been stopped, use the <code>ListMultipartReadSetUploads</code> API operation to view all active multipart read set uploads.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "AcceptShare":{
@@ -73,7 +73,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes one or more read sets.</p>",
+      "documentation":"<p>Deletes one or more read sets. If the operation is successful, it returns a response with no body. If there is an error with deleting one of the read sets, the operation returns an error list. If the operation successfully deletes only a subset of files, it will return an error list for the remaining files that fail to be deleted. There is a limit of 100 read sets that can be deleted in each <code>BatchDeleteReadSet</code> API call.</p>",
       "endpoint":{"hostPrefix":"control-storage-"},
       "idempotent":true
     },
@@ -93,7 +93,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Cancels an annotation import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Cancels an annotation import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"},
       "idempotent":true
     },
@@ -115,7 +115,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Cancels a run.</p>",
+      "documentation":"<p>Cancels a run using its ID and returns a response with no body if the operation is successful. To confirm that the run has been cancelled, use the <code>ListRuns</code> API operation to check that it is no longer listed.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "CancelVariantImportJob":{
@@ -134,7 +134,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Cancels a variant import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Cancels a variant import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"},
       "idempotent":true
     },
@@ -157,7 +157,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Concludes a multipart upload once you have uploaded all the components.</p>",
+      "documentation":"<p>Completes a multipart read set upload into a sequence store after you have initiated the upload process with <code>CreateMultipartReadSetUpload</code> and uploaded all read set parts using <code>UploadReadSetPart</code>. You must specify the parts you uploaded using the parts parameter. If the operation is successful, it returns the read set ID(s) of the uploaded read set(s).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/synchronous-uploads.html\">Direct upload to a sequence store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"storage-"}
     },
     "CreateAnnotationStore":{
@@ -178,7 +178,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates an annotation store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Creates an annotation store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "CreateAnnotationStoreVersion":{
@@ -221,7 +221,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Begins a multipart read set upload.</p>",
+      "documentation":"<p>Initiates a multipart read set upload for uploading partitioned source files into a sequence store. You can directly import source files from an EC2 instance and other local compute, or from an S3 bucket. To separate these source files into parts, use the <code>split</code> operation. Each part cannot be larger than 100 MB. If the operation is successful, it provides an <code>uploadId</code> which is required by the <code>UploadReadSetPart</code> API operation to upload parts into a sequence store.</p> <p>To continue uploading a multipart read set into your sequence store, you must use the <code>UploadReadSetPart</code> API operation to upload each part individually following the steps below:</p> <ul> <li> <p>Specify the <code>uploadId</code> obtained from the previous call to <code>CreateMultipartReadSetUpload</code>.</p> </li> <li> <p>Upload parts for that <code>uploadId</code>.</p> </li> </ul> <p>When you have finished uploading parts, use the <code>CompleteMultipartReadSetUpload</code> API to complete the multipart read set upload and to retrieve the final read set IDs in the response.</p> <p>To learn more about creating parts and the <code>split</code> operation, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/synchronous-uploads.html\">Direct upload to a sequence store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "CreateReferenceStore":{
@@ -241,7 +241,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Creates a reference store.</p>",
+      "documentation":"<p>Creates a reference store and returns metadata in JSON format. Reference stores are used to store reference genomes in FASTA format. A reference store is created when the first reference genome is imported. To import additional reference genomes from an Amazon S3 bucket, use the <code>StartReferenceImportJob</code> API operation. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-reference-store.html\">Creating a HealthOmics reference store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "CreateRunCache":{
@@ -263,7 +263,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>You can create a run cache to save the task outputs from completed tasks in a run for a private workflow. Subsequent runs use the task outputs from the cache, rather than computing the task outputs again. You specify an Amazon S3 location where HealthOmics saves the cached data. This data must be immediately accessible (not in an archived state).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-cache-create.html\">Creating a run cache</a> in the AWS HealthOmics User Guide.</p>",
+      "documentation":"<p>Creates a run cache to store and reference task outputs from completed private runs. Specify an Amazon S3 location where Amazon Web Services HealthOmics saves the cached data. This data must be immediately accessible and not in an archived state. You can save intermediate task files to a run cache if they are declared as task outputs in the workflow definition file.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-call-caching.html\">Call caching</a> and <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-cache-create.html\">Creating a run cache</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "CreateRunGroup":{
@@ -285,7 +285,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>You can optionally create a run group to limit the compute resources for the runs that you add to the group.</p>",
+      "documentation":"<p>Creates a run group to limit the compute resources for the runs that are added to the group. Returns an ARN, ID, and tags for the run group.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "CreateSequenceStore":{
@@ -305,7 +305,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Creates a sequence store.</p>",
+      "documentation":"<p>Creates a sequence store and returns its metadata. Sequence stores are used to store sequence data files called read sets that are saved in FASTQ, BAM, uBAM, or CRAM formats. For aligned formats (BAM and CRAM), a sequence store can only use one reference genome. For unaligned formats (FASTQ and uBAM), a reference genome is not required. You can create multiple sequence stores per region per account. </p> <p>The following are optional parameters you can specify for your sequence store:</p> <ul> <li> <p>Use <code>s3AccessConfig</code> to configure your sequence store with S3 access logs (recommended).</p> </li> <li> <p>Use <code>sseConfig</code> to define your own KMS key for encryption.</p> </li> <li> <p>Use <code>eTagAlgorithmFamily</code> to define which algorithm to use for the HealthOmics eTag on objects.</p> </li> <li> <p>Use <code>fallbackLocation</code> to define a backup location for storing files that have failed a direct upload.</p> </li> <li> <p>Use <code>propagatedSetLevelTags</code> to configure tags that propagate to all objects in your store.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-sequence-store.html\">Creating a HealthOmics sequence store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "CreateShare":{
@@ -347,7 +347,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates a variant store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Creates a variant store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "CreateWorkflow":{
@@ -369,9 +369,32 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Creates a workflow.</p>",
+      "documentation":"<p>Creates a private workflow. Before you create a private workflow, you must create and configure these required resources:</p> <ul> <li> <p> <i>Workflow definition file:</i> A workflow definition file written in WDL, Nextflow, or CWL. The workflow definition specifies the inputs and outputs for runs that use the workflow. It also includes specifications for the runs and run tasks for your workflow, including compute and memory requirements. The workflow definition file must be in <code>.zip</code> format. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-definition-files.html\">Workflow definition files</a> in Amazon Web Services HealthOmics.</p> <ul> <li> <p>You can use Amazon Q CLI to build and validate your workflow definition files in WDL, Nextflow, and CWL. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/getting-started.html#omics-q-prompts\">Example prompts for Amazon Q CLI</a> and the <a href=\"https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai\">Amazon Web Services HealthOmics Agentic generative AI tutorial</a> on GitHub.</p> </li> </ul> </li> <li> <p> <i>(Optional) Parameter template file:</i> A parameter template file written in JSON. Create the file to define the run parameters, or Amazon Web Services HealthOmics generates the parameter template for you. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/parameter-templates.html\">Parameter template files for HealthOmics workflows</a>. </p> </li> <li> <p> <i>ECR container images:</i> Create container images for the workflow in a private ECR repository, or synchronize images from a supported upstream registry with your Amazon ECR private repository.</p> </li> <li> <p> <i>(Optional) Sentieon licenses:</i> Request a Sentieon license to use the Sentieon software in private workflows.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/creating-private-workflows.html\">Creating or updating a private workflow in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
+    "CreateWorkflowVersion":{
+      "name":"CreateWorkflowVersion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/workflow/{workflowId}/version",
+        "responseCode":201
+      },
+      "input":{"shape":"CreateWorkflowVersionRequest"},
+      "output":{"shape":"CreateWorkflowVersionResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p>Creates a new workflow version for the workflow that you specify with the <code>workflowId</code> parameter.</p> <p>When you create a new version of a workflow, you need to specify the configuration for the new version. It doesn't inherit any configuration values from the workflow.</p> <p>Provide a version name that is unique for this workflow. You cannot change the name after HealthOmics creates the version.</p> <note> <p>Don't include any personally identifiable information (PII) in the version name. Version names appear in the workflow version ARN.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"workflows-"},
+      "idempotent":true
+    },
     "DeleteAnnotationStore":{
       "name":"DeleteAnnotationStore",
       "http":{
@@ -389,7 +412,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Deletes an annotation store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Deletes an annotation store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"},
       "idempotent":true
     },
@@ -432,7 +455,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a genome reference.</p>",
+      "documentation":"<p>Deletes a reference genome and returns a response with no body if the operation is successful. The read set associated with the reference genome must first be deleted before deleting the reference genome. After the reference genome is deleted, you can delete the reference store using the <code>DeleteReferenceStore</code> API operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/deleting-reference-and-sequence-stores.html\">Deleting HealthOmics reference and sequence stores</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"},
       "idempotent":true
     },
@@ -454,7 +477,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a genome reference store.</p>",
+      "documentation":"<p>Deletes a reference store and returns a response with no body if the operation is successful. You can only delete a reference store when it does not contain any reference genomes. To empty a reference store, use <code>DeleteReference</code>.</p> <p>For more information about your workflow status, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/deleting-reference-and-sequence-stores.html\">Deleting HealthOmics reference and sequence stores</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"},
       "idempotent":true
     },
@@ -476,7 +499,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a workflow run.</p>",
+      "documentation":"<p>Deletes a run and returns a response with no body if the operation is successful. You can only delete a run that has reached a <code>COMPLETED</code>, <code>FAILED</code>, or <code>CANCELLED</code> stage. A completed run has delivered an output, or was cancelled and resulted in no output. When you delete a run, only the metadata associated with the run is deleted. The run outputs remain in Amazon S3 and logs remain in CloudWatch.</p> <p>To verify that the workflow is deleted:</p> <ul> <li> <p>Use <code>ListRuns</code> to confirm the workflow no longer appears in the list.</p> </li> <li> <p>Use <code>GetRun</code> to verify the workflow cannot be found.</p> </li> </ul>",
       "endpoint":{"hostPrefix":"workflows-"},
       "idempotent":true
     },
@@ -498,7 +521,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Delete a run cache. This action removes the cache metadata stored in the service account, but doesn't delete the data in Amazon S3. You can access the cache data in Amazon S3, for inspection or to troubleshoot issues. You can remove old cache data using standard S3 <code>Delete</code> operations. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-cache-delete.html\">Deleting a run cache</a> in the AWS HealthOmics User Guide.</p>",
+      "documentation":"<p>Deletes a run cache and returns a response with no body if the operation is successful. This action removes the cache metadata stored in the service account, but does not delete the data in Amazon S3. You can access the cache data in Amazon S3, for inspection or to troubleshoot issues. You can remove old cache data using standard S3 <code>Delete</code> operations. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-cache-delete.html\">Deleting a run cache</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"},
       "idempotent":true
     },
@@ -520,7 +543,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a workflow run group.</p>",
+      "documentation":"<p>Deletes a run group and returns a response with no body if the operation is successful.</p> <p>To verify that the run group is deleted:</p> <ul> <li> <p>Use <code>ListRunGroups</code> to confirm the workflow no longer appears in the list.</p> </li> <li> <p>Use <code>GetRunGroup</code> to verify the workflow cannot be found.</p> </li> </ul>",
       "endpoint":{"hostPrefix":"workflows-"},
       "idempotent":true
     },
@@ -534,8 +557,8 @@
       "input":{"shape":"DeleteS3AccessPolicyRequest"},
       "output":{"shape":"DeleteS3AccessPolicyResponse"},
       "errors":[
-        {"shape":"InternalServerException"},
         {"shape":"NotSupportedOperationException"},
+        {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
@@ -564,7 +587,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a sequence store.</p>",
+      "documentation":"<p>Deletes a sequence store and returns a response with no body if the operation is successful. You can only delete a sequence store when it does not contain any read sets.</p> <p>Use the <code>BatchDeleteReadSet</code> API operation to ensure that all read sets in the sequence store are deleted. When a sequence store is deleted, all tags associated with the store are also deleted.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/deleting-reference-and-sequence-stores.html\">Deleting HealthOmics reference and sequence stores</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"},
       "idempotent":true
     },
@@ -607,7 +630,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Deletes a variant store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Deletes a variant store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"},
       "idempotent":true
     },
@@ -629,7 +652,29 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Deletes a workflow.</p>",
+      "documentation":"<p>Deletes a workflow by specifying its ID. This operation returns a response with no body if the deletion is successful.</p> <p>To verify that the workflow is deleted:</p> <ul> <li> <p>Use <code>ListWorkflows</code> to confirm the workflow no longer appears in the list.</p> </li> <li> <p>Use <code>GetWorkflow</code> to verify the workflow cannot be found.</p> </li> </ul>",
+      "endpoint":{"hostPrefix":"workflows-"},
+      "idempotent":true
+    },
+    "DeleteWorkflowVersion":{
+      "name":"DeleteWorkflowVersion",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/workflow/{workflowId}/version/{versionName}",
+        "responseCode":202
+      },
+      "input":{"shape":"DeleteWorkflowVersionRequest"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p>Deletes a workflow version. Deleting a workflow version doesn't affect any ongoing runs that are using the workflow version.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"},
       "idempotent":true
     },
@@ -649,7 +694,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets information about an annotation import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Gets information about an annotation import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "GetAnnotationStore":{
@@ -668,7 +713,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets information about an annotation store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Gets information about an annotation store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "GetAnnotationStoreVersion":{
@@ -709,7 +754,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets a file from a read set.</p>",
+      "documentation":"<p>Retrieves detailed information from parts of a read set and returns the read set in the same format that it was uploaded. You must have read sets uploaded to your sequence store in order to run this operation.</p>",
       "endpoint":{"hostPrefix":"storage-"}
     },
     "GetReadSetActivationJob":{
@@ -729,7 +774,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a read set activation job.</p>",
+      "documentation":"<p>Returns detailed information about the status of a read set activation job in JSON format.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReadSetExportJob":{
@@ -749,7 +794,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a read set export job.</p>",
+      "documentation":"<p>Retrieves status information about a read set export job and returns the data in JSON format. Use this operation to actively monitor the progress of an export job.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReadSetImportJob":{
@@ -769,7 +814,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a read set import job.</p>",
+      "documentation":"<p>Gets detailed and status information about a read set import job and returns the data in JSON format.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReadSetMetadata":{
@@ -789,7 +834,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets details about a read set.</p>",
+      "documentation":"<p>Retrieves the metadata for a read set from a sequence store in JSON format. This operation does not return tags. To retrieve the list of tags for a read set, use the <code>ListTagsForResource</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReference":{
@@ -810,7 +855,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets a reference file.</p>",
+      "documentation":"<p>Downloads parts of data from a reference genome and returns the reference file in the same format that it was uploaded.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-reference-store.html\">Creating a HealthOmics reference store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"storage-"}
     },
     "GetReferenceImportJob":{
@@ -830,7 +875,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a reference import job.</p>",
+      "documentation":"<p>Monitors the status of a reference import job. This operation can be called after calling the <code>StartReferenceImportJob</code> operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReferenceMetadata":{
@@ -850,7 +895,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a genome reference's metadata.</p>",
+      "documentation":"<p>Retrieves metadata for a reference genome. This operation returns the number of parts, part size, and MD5 of an entire file. This operation does not return tags. To retrieve the list of tags for a read set, use the <code>ListTagsForResource</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetReferenceStore":{
@@ -892,7 +937,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a workflow run.</p> <p>If a workflow is shared with you, you cannot export information about the run.</p> <p>HealthOmics stores a fixed number of runs that are available to the console and API. If GetRun doesn't return the requested run, you can find run logs for all runs in the CloudWatch logs. For more information about viewing the run logs, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/cloudwatch-logs.html\">CloudWatch logs</a> in the <i>AWS HealthOmics User Guide</i>.</p>",
+      "documentation":"<p>Gets detailed information about a specific run using its ID.</p> <p>Amazon Web Services HealthOmics stores a configurable number of runs, as determined by service limits, that are available to the console and API. If <code>GetRun</code> does not return the requested run, you can find all run logs in the CloudWatch logs. For more information about viewing the run logs, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/monitoring-cloudwatch-logs.html\">CloudWatch logs</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "GetRunCache":{
@@ -914,7 +959,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieve the details for the specified run cache.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-call-caching.html\">Call caching for HealthOmics runs</a> in the AWS HealthOmics User Guide.</p>",
+      "documentation":"<p>Retrieves detailed information about the specified run cache using its ID.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-call-caching.html\">Call caching for Amazon Web Services HealthOmics runs</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "GetRunGroup":{
@@ -936,7 +981,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a workflow run group.</p>",
+      "documentation":"<p>Gets information about a run group and returns its metadata.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "GetRunTask":{
@@ -958,7 +1003,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a workflow run task.</p>",
+      "documentation":"<p>Gets detailed information about a run task using its ID.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "GetS3AccessPolicy":{
@@ -971,8 +1016,8 @@
       "input":{"shape":"GetS3AccessPolicyRequest"},
       "output":{"shape":"GetS3AccessPolicyResponse"},
       "errors":[
-        {"shape":"InternalServerException"},
         {"shape":"NotSupportedOperationException"},
+        {"shape":"InternalServerException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1000,7 +1045,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a sequence store.</p>",
+      "documentation":"<p>Retrieves metadata for a sequence store using its ID and returns it in JSON format.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "GetShare":{
@@ -1040,7 +1085,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets information about a variant import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Gets information about a variant import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "GetVariantStore":{
@@ -1059,7 +1104,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets information about a variant store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Gets information about a variant store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "GetWorkflow":{
@@ -1081,7 +1126,29 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Gets information about a workflow.</p> <p>If a workflow is shared with you, you cannot export the workflow.</p>",
+      "documentation":"<p>Gets all information about a workflow using its ID.</p> <p>If a workflow is shared with you, you cannot export the workflow.</p> <p>For more information about your workflow status, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/using-get-workflow.html\">Verify the workflow status</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"workflows-"}
+    },
+    "GetWorkflowVersion":{
+      "name":"GetWorkflowVersion",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workflow/{workflowId}/version/{versionName}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWorkflowVersionRequest"},
+      "output":{"shape":"GetWorkflowVersionResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p>Gets information about a workflow version. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "ListAnnotationImportJobs":{
@@ -1100,7 +1167,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of annotation import jobs.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Retrieves a list of annotation import jobs.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "ListAnnotationStoreVersions":{
@@ -1138,7 +1205,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of annotation stores.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Retrieves a list of annotation stores.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "ListMultipartReadSetUploads":{
@@ -1160,7 +1227,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Lists multipart read set uploads and for in progress uploads. Once the upload is completed, a read set is created and the upload will no longer be returned in the response.</p>",
+      "documentation":"<p>Lists in-progress multipart read set uploads for a sequence store and returns it in a JSON formatted output. Multipart read set uploads are initiated by the <code>CreateMultipartReadSetUploads</code> API operation. This operation returns a response with no body when the upload is complete. </p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReadSetActivationJobs":{
@@ -1180,7 +1247,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of read set activation jobs.</p>",
+      "documentation":"<p>Retrieves a list of read set activation jobs and returns the metadata in a JSON formatted output. To extract metadata from a read set activation job, use the <code>GetReadSetActivationJob</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReadSetExportJobs":{
@@ -1200,7 +1267,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of read set export jobs.</p>",
+      "documentation":"<p>Retrieves a list of read set export jobs in a JSON formatted response. This API operation is used to check the status of a read set export job initiated by the <code>StartReadSetExportJob</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReadSetImportJobs":{
@@ -1220,7 +1287,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of read set import jobs.</p>",
+      "documentation":"<p>Retrieves a list of read set import jobs and returns the data in JSON format.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReadSetUploadParts":{
@@ -1242,7 +1309,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>This operation will list all parts in a requested multipart upload for a sequence store.</p>",
+      "documentation":"<p>Lists all parts in a multipart read set upload for a sequence store and returns the metadata in a JSON formatted output.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReadSets":{
@@ -1262,7 +1329,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of read sets.</p>",
+      "documentation":"<p>Retrieves a list of read sets from a sequence store ID and returns the metadata in JSON format.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReferenceImportJobs":{
@@ -1282,7 +1349,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of reference import jobs.</p>",
+      "documentation":"<p>Retrieves the metadata of one or more reference import jobs for a reference store.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReferenceStores":{
@@ -1301,7 +1368,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of reference stores.</p>",
+      "documentation":"<p>Retrieves a list of reference stores linked to your account and returns their metadata in JSON format.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-reference-store.html\">Creating a reference store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListReferences":{
@@ -1321,7 +1388,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of references.</p>",
+      "documentation":"<p>Retrieves the metadata of one or more reference genomes in a reference store.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-reference-store.html\">Creating a reference store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListRunCaches":{
@@ -1343,7 +1410,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of your run caches.</p>",
+      "documentation":"<p>Retrieves a list of your run caches and the metadata for each cache.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "ListRunGroups":{
@@ -1365,7 +1432,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of run groups.</p>",
+      "documentation":"<p>Retrieves a list of all run groups and returns the metadata for each run group.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "ListRunTasks":{
@@ -1387,7 +1454,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of tasks for a run.</p>",
+      "documentation":"<p>Returns a list of tasks and status information within their specified run. Use this operation to monitor runs and to identify which specific tasks have failed.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "ListRuns":{
@@ -1409,7 +1476,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of runs.</p> <p>HealthOmics stores a fixed number of runs that are available to the console and API. If the ListRuns response doesn't include specific runs that you expected, you can find run logs for all runs in the CloudWatch logs. For more information about viewing the run logs, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/cloudwatch-logs.html\">CloudWatch logs</a> in the <i>AWS HealthOmics User Guide</i>.</p>",
+      "documentation":"<p>Retrieves a list of runs and returns each run's metadata and status.</p> <p>Amazon Web Services HealthOmics stores a configurable number of runs, as determined by service limits, that are available to the console and API. If the <code>ListRuns</code> response doesn't include specific runs that you expected, you can find all run logs in the CloudWatch logs. For more information about viewing the run logs, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/monitoring-cloudwatch-logs.html\">CloudWatch logs</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "ListSequenceStores":{
@@ -1428,7 +1495,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of sequence stores.</p>",
+      "documentation":"<p>Retrieves a list of sequence stores and returns each sequence store's metadata.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/create-sequence-store.html\">Creating a HealthOmics sequence store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "ListShares":{
@@ -1490,7 +1557,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of variant import jobs.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Retrieves a list of variant import jobs.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "ListVariantStores":{
@@ -1509,9 +1576,31 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of variant stores.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Retrieves a list of variant stores.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
+    "ListWorkflowVersions":{
+      "name":"ListWorkflowVersions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/workflow/{workflowId}/version",
+        "responseCode":200
+      },
+      "input":{"shape":"ListWorkflowVersionsRequest"},
+      "output":{"shape":"ListWorkflowVersionsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p>Lists the workflow versions for the specified workflow. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"workflows-"}
+    },
     "ListWorkflows":{
       "name":"ListWorkflows",
       "http":{
@@ -1531,7 +1620,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Retrieves a list of workflows.</p>",
+      "documentation":"<p>Retrieves a list of existing workflows. You can filter for specific workflows by their name and type. Using the type parameter, specify <code>PRIVATE</code> to retrieve a list of private workflows or specify <code>READY2RUN</code> for a list of all Ready2Run workflows. If you do not specify the type of workflow, this operation returns a list of existing workflows.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "PutS3AccessPolicy":{
@@ -1544,8 +1633,8 @@
       "input":{"shape":"PutS3AccessPolicyRequest"},
       "output":{"shape":"PutS3AccessPolicyResponse"},
       "errors":[
-        {"shape":"InternalServerException"},
         {"shape":"NotSupportedOperationException"},
+        {"shape":"InternalServerException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
@@ -1572,7 +1661,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Starts an annotation import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Starts an annotation import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "StartReadSetActivationJob":{
@@ -1593,7 +1682,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Activates an archived read set. To reduce storage charges, Amazon Omics archives unused read sets after 30 days.</p>",
+      "documentation":"<p>Activates an archived read set and returns its metadata in a JSON formatted output. AWS HealthOmics automatically archives unused read sets after 30 days. To monitor the status of your read set activation job, use the <code>GetReadSetActivationJob</code> operation.</p> <p>To learn more, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/activating-read-sets.html\">Activating read sets</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "StartReadSetExportJob":{
@@ -1614,7 +1703,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Exports a read set to Amazon S3.</p>",
+      "documentation":"<p>Starts a read set export job. When the export job is finished, the read set is exported to an Amazon S3 bucket which can be retrieved using the <code>GetReadSetExportJob</code> API operation.</p> <p>To monitor the status of the export job, use the <code>ListReadSetExportJobs</code> API operation. </p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "StartReadSetImportJob":{
@@ -1635,7 +1724,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Starts a read set import job.</p>",
+      "documentation":"<p>Imports a read set from the sequence store. Read set import jobs support a maximum of 100 read sets of different types. Monitor the progress of your read set import job by calling the <code>GetReadSetImportJob</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "StartReferenceImportJob":{
@@ -1656,7 +1745,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Starts a reference import job.</p>",
+      "documentation":"<p>Imports a reference genome from Amazon S3 into a specified reference store. You can have multiple reference genomes in a reference store. You can only import reference genomes one at a time into each reference store. Monitor the status of your reference import job by using the <code>GetReferenceImportJob</code> API operation.</p>",
       "endpoint":{"hostPrefix":"control-storage-"}
     },
     "StartRun":{
@@ -1678,7 +1767,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Starts a workflow run. To duplicate a run, specify the run's ID and a role ARN. The remaining parameters are copied from the previous run.</p> <p>StartRun will not support re-run for a workflow that is shared with you.</p> <p>HealthOmics stores a fixed number of runs that are available to the console and API. By default, HealthOmics doesn't any remove any runs. If HealthOmics reaches the maximum number of runs, you must manually remove runs. To have older runs removed automatically, set the retention mode to <code>REMOVE</code>.</p> <p>By default, the run uses STATIC storage. For STATIC storage, set the <code>storageCapacity</code> field. You can set the storage type to DYNAMIC. You do not set <code>storageCapacity</code>, because HealthOmics dynamically scales the storage up or down as required. For more information about static and dynamic storage, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/Using-workflows.html\">Running workflows</a> in the <i>AWS HealthOmics User Guide</i>.</p>",
+      "documentation":"<p>Starts a new run and returns details about the run, or duplicates an existing run. A run is a single invocation of a workflow. If you provide request IDs, Amazon Web Services HealthOmics identifies duplicate requests and starts the run only once. Monitor the progress of the run by calling the <code>GetRun</code> API operation.</p> <p>To start a new run, the following inputs are required:</p> <ul> <li> <p>A service role ARN (<code>roleArn</code>).</p> </li> <li> <p>The run's workflow ID (<code>workflowId</code>, not the <code>uuid</code> or <code>runId</code>).</p> </li> <li> <p>An Amazon S3 location (<code>outputUri</code>) where the run outputs will be saved.</p> </li> <li> <p>All required workflow parameters (<code>parameter</code>), which can include optional parameters from the parameter template. The run cannot include any parameters that are not defined in the parameter template. To see all possible parameters, use the <code>GetRun</code> API operation. </p> </li> <li> <p>For runs with a <code>STATIC</code> (default) storage type, specify the required storage capacity (in gibibytes). A storage capacity value is not required for runs that use <code>DYNAMIC</code> storage.</p> </li> </ul> <p> <code>StartRun</code> can also duplicate an existing run using the run's default values. You can modify these default values and/or add other optional inputs. To duplicate a run, the following inputs are required:</p> <ul> <li> <p>A service role ARN (<code>roleArn</code>).</p> </li> <li> <p>The ID of the run to duplicate (<code>runId</code>).</p> </li> <li> <p>An Amazon S3 location where the run outputs will be saved (<code>outputUri</code>).</p> </li> </ul> <p>To learn more about the optional parameters for <code>StartRun</code>, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/starting-a-run.html\">Starting a run</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p> <p>Use the <code>retentionMode</code> input to control how long the metadata for each run is stored in CloudWatch. There are two retention modes:</p> <ul> <li> <p>Specify <code>REMOVE</code> to automatically remove the oldest runs when you reach the maximum service retention limit for runs. It is recommended that you use the <code>REMOVE</code> mode to initiate major run requests so that your runs do not fail when you reach the limit.</p> </li> <li> <p>The <code>retentionMode</code> is set to the <code>RETAIN</code> mode by default, which allows you to manually remove runs after reaching the maximum service retention limit. Under this setting, you cannot create additional runs until you remove the excess runs.</p> </li> </ul> <p>To learn more about the retention modes, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/run-retention.html\">Run retention mode</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p> <p>You can use Amazon Q CLI to analyze run logs and make performance optimization recommendations. To get started, see the <a href=\"https://github.com/awslabs/mcp/tree/main/src/aws-healthomics-mcp-server\">Amazon Web Services HealthOmics MCP server</a> on GitHub.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "StartVariantImportJob":{
@@ -1698,7 +1787,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Starts a variant import job.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Starts a variant import job.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "TagResource":{
@@ -1762,7 +1851,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Updates an annotation store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Updates an annotation store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "UpdateAnnotationStoreVersion":{
@@ -1802,7 +1891,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Update a run cache. </p>",
+      "documentation":"<p>Updates a run cache using its ID and returns a response with no body if the operation is successful. You can update the run cache description, name, or the default run cache behavior with <code>CACHE_ON_FAILURE</code> or <code>CACHE_ALWAYS</code>. To confirm that your run cache settings have been properly updated, use the <code>GetRunCache</code> API operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/how-run-cache.html\">How call caching works</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "UpdateRunGroup":{
@@ -1823,7 +1912,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Updates a run group.</p>",
+      "documentation":"<p>Updates the settings of a run group and returns a response with no body if the operation is successful.</p> <p>You can update the following settings with <code>UpdateRunGroup</code>:</p> <ul> <li> <p>Maximum number of CPUs</p> </li> <li> <p>Run time (measured in minutes)</p> </li> <li> <p>Number of GPUs</p> </li> <li> <p>Number of concurrent runs</p> </li> <li> <p>Group name</p> </li> </ul> <p>To confirm that the settings have been successfully updated, use the <code>ListRunGroups</code> or <code>GetRunGroup</code> API operations to verify that the desired changes have been made.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "UpdateSequenceStore":{
@@ -1863,7 +1952,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Updates a variant store.</p>",
+      "documentation":"<p><important> <p>Amazon Web Services HealthOmics variant stores and annotation stores will no longer be open to new customers starting November 7, 2025. If you would like to use variant stores or annotation stores, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/variant-store-availability-change.html\"> Amazon Web Services HealthOmics variant store and annotation store availability change</a>.</p> </important> <p>Updates a variant store.</p></p>",
       "endpoint":{"hostPrefix":"analytics-"}
     },
     "UpdateWorkflow":{
@@ -1884,7 +1973,28 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>Updates a workflow.</p>",
+      "documentation":"<p>Updates information about a workflow.</p> <p>You can update the following workflow information:</p> <ul> <li> <p>Name</p> </li> <li> <p>Description</p> </li> <li> <p>Default storage type</p> </li> <li> <p>Default storage capacity (with workflow ID)</p> </li> </ul> <p>This operation returns a response with no body if the operation is successful. You can check the workflow updates by calling the <code>GetWorkflow</code> API operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/update-private-workflow.html\">Update a private workflow</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
+      "endpoint":{"hostPrefix":"workflows-"}
+    },
+    "UpdateWorkflowVersion":{
+      "name":"UpdateWorkflowVersion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/workflow/{workflowId}/version/{versionName}",
+        "responseCode":202
+      },
+      "input":{"shape":"UpdateWorkflowVersionRequest"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p>Updates information about the workflow version. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning in Amazon Web Services HealthOmics</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"workflows-"}
     },
     "UploadReadSetPart":{
@@ -1906,7 +2016,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"RequestTimeoutException"}
       ],
-      "documentation":"<p>This operation uploads a specific part of a read set. If you upload a new part using a previously used part number, the previously uploaded part will be overwritten.</p>",
+      "documentation":"<p>Uploads a specific part of a read set into a sequence store. When you a upload a read set part with a part number that already exists, the new part replaces the existing one. This operation returns a JSON formatted response containing a string identifier that is used to confirm that parts are being added to the intended upload.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/synchronous-uploads.html\">Direct upload to a sequence store</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>",
       "endpoint":{"hostPrefix":"storage-"},
       "unsignedPayload":true,
       "authtype":"v4-unsigned-body"
@@ -2543,6 +2653,26 @@
       },
       "exception":true
     },
+    "ConnectionArn":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"arn:aws(-[\\w]+)*:.+:.+:[0-9]{12}:.+"
+    },
+    "ContainerRegistryMap":{
+      "type":"structure",
+      "members":{
+        "registryMappings":{
+          "shape":"RegistryMappingsList",
+          "documentation":"<p>Mapping that provides the ECR repository path where upstream container images are pulled and synchronized.</p>"
+        },
+        "imageMappings":{
+          "shape":"ImageMappingsList",
+          "documentation":"<p>Image mappings specify path mappings between the ECR private repository and their corresponding external repositories.</p>"
+        }
+      },
+      "documentation":"<p>Use a container registry map to specify mappings between the ECR private repository and one or more upstream registries. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-ecr.html\">Container images</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+    },
     "CreateAnnotationStoreRequest":{
       "type":"structure",
       "required":["storeFormat"],
@@ -2878,7 +3008,7 @@
       "members":{
         "cacheBehavior":{
           "shape":"CacheBehavior",
-          "documentation":"<p>Default cache behavior for runs that use this cache. Supported values are:</p> <p> <code>CACHE_ON_FAILURE</code>: Caches task outputs from completed tasks for runs that fail. This setting is useful if you're debugging a workflow that fails after several tasks completed successfully. The subsequent run uses the cache outputs for previously-completed tasks if the task definition, inputs, and container in ECR are identical to the prior run.</p> <p> <code>CACHE_ALWAYS</code>: Caches task outputs from completed tasks for all runs. This setting is useful in development mode, but do not use it in a production setting.</p> <p>If you don't specify a value, the default behavior is CACHE_ON_FAILURE. When you start a run that uses this cache, you can override the default cache behavior.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/how-run-cache.html#run-cache-behavior\">Run cache behavior</a> in the AWS HealthOmics User Guide.</p>"
+          "documentation":"<p>Default cache behavior for runs that use this cache. Supported values are:</p> <p> <code>CACHE_ON_FAILURE</code>: Caches task outputs from completed tasks for runs that fail. This setting is useful if you're debugging a workflow that fails after several tasks completed successfully. The subsequent run uses the cache outputs for previously-completed tasks if the task definition, inputs, and container in ECR are identical to the prior run.</p> <p> <code>CACHE_ALWAYS</code>: Caches task outputs from completed tasks for all runs. This setting is useful in development mode, but do not use it in a production setting.</p> <p>If you don't specify a value, the default behavior is CACHE_ON_FAILURE. When you start a run that uses this cache, you can override the default cache behavior.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/how-run-cache.html#run-cache-behavior\">Run cache behavior</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "cacheS3Location":{
           "shape":"S3UriForBucketOrObject",
@@ -2894,7 +3024,7 @@
         },
         "requestId":{
           "shape":"RunCacheRequestId",
-          "documentation":"<p>A unique request token, to ensure idempotency. If you don't specify a token, HealthOmics automatically generates a universally unique identifier (UUID) for the request.</p>",
+          "documentation":"<p>A unique request token, to ensure idempotency. If you don't specify a token, Amazon Web Services HealthOmics automatically generates a universally unique identifier (UUID) for the request.</p>",
           "idempotencyToken":true
         },
         "tags":{
@@ -2903,7 +3033,7 @@
         },
         "cacheBucketOwnerId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The AWS account ID of the expected owner of the S3 bucket for the run cache. If not provided, your account ID is set as the owner of the bucket.</p>"
+          "documentation":"<p>The Amazon Web Services account ID of the expected owner of the S3 bucket for the run cache. If not provided, your account ID is set as the owner of the bucket.</p>"
         }
       }
     },
@@ -3022,28 +3152,28 @@
         },
         "tags":{
           "shape":"TagMap",
-          "documentation":"<p>Tags for the store.</p>"
+          "documentation":"<p>Tags for the store. You can configure up to 50 tags.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>To ensure that requests don't run multiple times, specify a unique token for each request.</p>",
+          "documentation":"<p>An idempotency token used to dedupe retry requests so that duplicate runs are not created.</p>",
           "idempotencyToken":true
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
-          "documentation":"<p>An S3 location that is used to store files that have failed a direct upload.</p>"
+          "shape":"FallbackLocation",
+          "documentation":"<p>An S3 location that is used to store files that have failed a direct upload. You can add or change the <code>fallbackLocation</code> after creating a sequence store. This is not required if you are uploading files from a different S3 bucket.</p>"
         },
         "eTagAlgorithmFamily":{
           "shape":"ETagAlgorithmFamily",
-          "documentation":"<p>The ETag algorithm family to use for ingested read sets.</p>"
+          "documentation":"<p>The ETag algorithm family to use for ingested read sets. The default value is MD5up. For more information on ETags, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/etags-and-provenance.html\">ETags and data provenance</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "propagatedSetLevelTags":{
           "shape":"PropagatedSetLevelTags",
-          "documentation":"<p>The tags keys to propagate to the S3 objects associated with read sets in the sequence store.</p>"
+          "documentation":"<p>The tags keys to propagate to the S3 objects associated with read sets in the sequence store. These tags can be used as input to add metadata to your read sets.</p>"
         },
         "s3AccessConfig":{
           "shape":"S3AccessConfig",
-          "documentation":"<p>S3 access configuration parameters</p>"
+          "documentation":"<p>S3 access configuration parameters. This specifies the parameters needed to access logs stored in S3 buckets. The S3 bucket must be in the same region and account as the sequence store. </p>"
         }
       }
     },
@@ -3073,14 +3203,14 @@
         },
         "sseConfig":{
           "shape":"SseConfig",
-          "documentation":"<p>The store's SSE settings.</p>"
+          "documentation":"<p>Server-side encryption (SSE) settings for the store. This contains the KMS key ARN that is used to encrypt read set objects.</p>"
         },
         "creationTime":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>When the store was created.</p>"
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
+          "shape":"FallbackLocation",
           "documentation":"<p>An S3 location that is used to store files that have failed a direct upload.</p>"
         },
         "eTagAlgorithmFamily":{
@@ -3203,7 +3333,7 @@
       "members":{
         "name":{
           "shape":"WorkflowName",
-          "documentation":"<p>A name for the workflow.</p>"
+          "documentation":"<p>Name (optional but highly recommended) for the workflow to locate relevant information in the CloudWatch logs and Amazon Web Services HealthOmics console. </p>"
         },
         "description":{
           "shape":"WorkflowDescription",
@@ -3211,40 +3341,76 @@
         },
         "engine":{
           "shape":"WorkflowEngine",
-          "documentation":"<p>An engine for the workflow.</p>"
+          "documentation":"<p>The workflow engine for the workflow. This is only required if you have workflow definition files from more than one engine in your zip file. Otherwise, the service can detect the engine automatically from your workflow definition.</p>"
         },
         "definitionZip":{
           "shape":"Blob",
-          "documentation":"<p>A ZIP archive for the workflow.</p>"
+          "documentation":"<p>A ZIP archive containing the main workflow definition file and dependencies that it imports for the workflow. You can use a file with a ://fileb prefix instead of the Base64 string. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-defn-requirements.html\">Workflow definition requirements</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "definitionUri":{
           "shape":"WorkflowDefinition",
-          "documentation":"<p>The URI of a definition for the workflow.</p>"
+          "documentation":"<p>The S3 URI of a definition for the workflow. The S3 bucket must be in the same region as the workflow.</p>"
         },
         "main":{
           "shape":"WorkflowMain",
-          "documentation":"<p>The path of the main definition file for the workflow.</p>"
+          "documentation":"<p>The path of the main definition file for the workflow. This parameter is not required if the ZIP archive contains only one workflow definition file, or if the main definition file is named “main”. An example path is: <code>workflow-definition/main-file.wdl</code>. </p>"
         },
         "parameterTemplate":{
           "shape":"WorkflowParameterTemplate",
-          "documentation":"<p>A parameter template for the workflow.</p>"
+          "documentation":"<p>A parameter template for the workflow. If this field is blank, Amazon Web Services HealthOmics will automatically parse the parameter template values from your workflow definition file. To override these service generated default values, provide a parameter template. To view an example of a parameter template, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/parameter-templates.html\">Parameter template files</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "storageCapacity":{
           "shape":"CreateWorkflowRequestStorageCapacityInteger",
-          "documentation":"<p>The default storage capacity for the workflow runs, in gibibytes.</p>"
+          "documentation":"<p>The default static storage capacity (in gibibytes) for runs that use this workflow or workflow version. The <code>storageCapacity</code> can be overwritten at run time. The storage capacity is not required for runs with a <code>DYNAMIC</code> storage type.</p>"
         },
         "tags":{
           "shape":"TagMap",
-          "documentation":"<p>Tags for the workflow.</p>"
+          "documentation":"<p>Tags for the workflow. You can define up to 50 tags for the workflow. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/add-a-tag.html\">Adding a tag</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "requestId":{
           "shape":"WorkflowRequestId",
-          "documentation":"<p>To ensure that requests don't run multiple times, specify a unique ID for each request.</p>",
+          "documentation":"<p>An idempotency token to ensure that duplicate workflows are not created when Amazon Web Services HealthOmics submits retry requests.</p>",
           "idempotencyToken":true
         },
         "accelerators":{
           "shape":"Accelerators",
           "documentation":"<p>The computational accelerator specified to run the workflow.</p>"
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for runs that use this workflow. The <code>storageType</code> can be overridden at run time. <code>DYNAMIC</code> storage dynamically scales the storage up or down, based on file system utilization. <code>STATIC</code> storage allocates a fixed amount of storage. For more information about dynamic and static storage types, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-run-types.html\">Run storage types</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "containerRegistryMap":{
+          "shape":"ContainerRegistryMap",
+          "documentation":"<p>(Optional) Use a container registry map to specify mappings between the ECR private repository and one or more upstream registries. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-ecr.html\">Container images</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "containerRegistryMapUri":{
+          "shape":"Uri",
+          "documentation":"<p>(Optional) URI of the S3 location for the registry mapping file.</p>"
+        },
+        "readmeMarkdown":{
+          "shape":"ReadmeMarkdown",
+          "documentation":"<p>The markdown content for the workflow's README file. This provides documentation and usage information for users of the workflow.</p>"
+        },
+        "parameterTemplatePath":{
+          "shape":"ParameterTemplatePath",
+          "documentation":"<p>The path to the workflow parameter template JSON file within the repository. This file defines the input parameters for runs that use this workflow. If not specified, the workflow will be created without a parameter template.</p>"
+        },
+        "readmePath":{
+          "shape":"ReadmePath",
+          "documentation":"<p>The path to the workflow README markdown file within the repository. This file provides documentation and usage information for the workflow. If not specified, the <code>README.md</code> file from the root directory of the repository will be used.</p>"
+        },
+        "definitionRepository":{
+          "shape":"DefinitionRepository",
+          "documentation":"<p>The repository information for the workflow definition. This allows you to source your workflow definition directly from a code repository.</p>"
+        },
+        "workflowBucketOwnerId":{
+          "shape":"WorkflowBucketOwnerId",
+          "documentation":"<p>The Amazon Web Services account ID of the expected owner of the S3 bucket that contains the workflow definition. If not specified, the service skips the validation.</p>"
+        },
+        "readmeUri":{
+          "shape":"S3UriForObject",
+          "documentation":"<p>The S3 URI of the README file for the workflow. This file provides documentation and usage information for the workflow. Requirements include:</p> <ul> <li> <p>The S3 URI must begin with <code>s3://USER-OWNED-BUCKET/</code> </p> </li> <li> <p>The requester must have access to the S3 bucket and object.</p> </li> <li> <p>The max README content length is 500 KiB.</p> </li> </ul>"
         }
       }
     },
@@ -3272,6 +3438,142 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The workflow's tags.</p>"
+        },
+        "uuid":{
+          "shape":"WorkflowUuid",
+          "documentation":"<p>The universally unique identifier (UUID) value for this workflow.</p>"
+        }
+      }
+    },
+    "CreateWorkflowVersionRequest":{
+      "type":"structure",
+      "required":[
+        "workflowId",
+        "versionName",
+        "requestId"
+      ],
+      "members":{
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The ID of the workflow where you are creating the new version. The <code>workflowId</code> is not the UUID.</p>",
+          "location":"uri",
+          "locationName":"workflowId"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>A name for the workflow version. Provide a version name that is unique for this workflow. You cannot change the name after HealthOmics creates the version. </p> <p>The version name must start with a letter or number and it can include upper-case and lower-case letters, numbers, hyphens, periods and underscores. The maximum length is 64 characters. You can use a simple naming scheme, such as version1, version2, version3. You can also match your workflow versions with your own internal versioning conventions, such as 2.7.0, 2.7.1, 2.7.2.</p>"
+        },
+        "definitionZip":{
+          "shape":"Blob",
+          "documentation":"<p>A ZIP archive containing the main workflow definition file and dependencies that it imports for this workflow version. You can use a file with a ://fileb prefix instead of the Base64 string. For more information, see Workflow definition requirements in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "definitionUri":{
+          "shape":"WorkflowDefinition",
+          "documentation":"<p>The S3 URI of a definition for this workflow version. The S3 bucket must be in the same region as this workflow version.</p>"
+        },
+        "accelerators":{
+          "shape":"Accelerators",
+          "documentation":"<p>The computational accelerator for this workflow version.</p>"
+        },
+        "description":{
+          "shape":"WorkflowVersionDescription",
+          "documentation":"<p>A description for this workflow version.</p>"
+        },
+        "engine":{
+          "shape":"WorkflowEngine",
+          "documentation":"<p>The workflow engine for this workflow version. This is only required if you have workflow definition files from more than one engine in your zip file. Otherwise, the service can detect the engine automatically from your workflow definition.</p>"
+        },
+        "main":{
+          "shape":"WorkflowMain",
+          "documentation":"<p>The path of the main definition file for this workflow version. This parameter is not required if the ZIP archive contains only one workflow definition file, or if the main definition file is named “main”. An example path is: <code>workflow-definition/main-file.wdl</code>. </p>"
+        },
+        "parameterTemplate":{
+          "shape":"WorkflowParameterTemplate",
+          "documentation":"<p>A parameter template for this workflow version. If this field is blank, Amazon Web Services HealthOmics will automatically parse the parameter template values from your workflow definition file. To override these service generated default values, provide a parameter template. To view an example of a parameter template, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/parameter-templates.html\">Parameter template files</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "requestId":{
+          "shape":"WorkflowRequestId",
+          "documentation":"<p>An idempotency token to ensure that duplicate workflows are not created when Amazon Web Services HealthOmics submits retry requests.</p>",
+          "idempotencyToken":true
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for runs that use this workflow version. The <code>storageType</code> can be overridden at run time. <code>DYNAMIC</code> storage dynamically scales the storage up or down, based on file system utilization. STATIC storage allocates a fixed amount of storage. For more information about dynamic and static storage types, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-run-types.html\">Run storage types</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "storageCapacity":{
+          "shape":"CreateWorkflowVersionRequestStorageCapacityInteger",
+          "documentation":"<p>The default static storage capacity (in gibibytes) for runs that use this workflow version. The <code>storageCapacity</code> can be overwritten at run time. The storage capacity is not required for runs with a <code>DYNAMIC</code> storage type.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>Tags for this workflow version. You can define up to 50 tags for the workflow. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/add-a-tag.html\">Adding a tag</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "workflowBucketOwnerId":{
+          "shape":"WorkflowBucketOwnerId",
+          "documentation":"<p>Amazon Web Services Id of the owner of the S3 bucket that contains the workflow definition. You need to specify this parameter if your account is not the bucket owner.</p>"
+        },
+        "containerRegistryMap":{
+          "shape":"ContainerRegistryMap",
+          "documentation":"<p>(Optional) Use a container registry map to specify mappings between the ECR private repository and one or more upstream registries. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-ecr.html\">Container images</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
+        },
+        "containerRegistryMapUri":{
+          "shape":"Uri",
+          "documentation":"<p>(Optional) URI of the S3 location for the registry mapping file.</p>"
+        },
+        "readmeMarkdown":{
+          "shape":"ReadmeMarkdown",
+          "documentation":"<p>The markdown content for the workflow version's README file. This provides documentation and usage information for users of this specific workflow version.</p>"
+        },
+        "parameterTemplatePath":{
+          "shape":"ParameterTemplatePath",
+          "documentation":"<p>The path to the workflow version parameter template JSON file within the repository. This file defines the input parameters for runs that use this workflow version. If not specified, the workflow version will be created without a parameter template.</p>"
+        },
+        "readmePath":{
+          "shape":"ReadmePath",
+          "documentation":"<p>The path to the workflow version README markdown file within the repository. This file provides documentation and usage information for the workflow. If not specified, the <code>README.md</code> file from the root directory of the repository will be used.</p>"
+        },
+        "definitionRepository":{
+          "shape":"DefinitionRepository",
+          "documentation":"<p>The repository information for the workflow version definition. This allows you to source your workflow version definition directly from a code repository.</p>"
+        },
+        "readmeUri":{
+          "shape":"S3UriForObject",
+          "documentation":"<p>The S3 URI of the README file for the workflow version. This file provides documentation and usage information for the workflow version. Requirements include:</p> <ul> <li> <p>The S3 URI must begin with <code>s3://USER-OWNED-BUCKET/</code> </p> </li> <li> <p>The requester must have access to the S3 bucket and object.</p> </li> <li> <p>The max README content length is 500 KiB.</p> </li> </ul>"
+        }
+      }
+    },
+    "CreateWorkflowVersionRequestStorageCapacityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100000,
+      "min":0
+    },
+    "CreateWorkflowVersionResponse":{
+      "type":"structure",
+      "members":{
+        "arn":{
+          "shape":"WorkflowVersionArn",
+          "documentation":"<p>ARN of the workflow version.</p>"
+        },
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID.</p>"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The workflow version name.</p>"
+        },
+        "status":{
+          "shape":"WorkflowStatus",
+          "documentation":"<p>The workflow version status.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The workflow version's tags.</p>"
+        },
+        "uuid":{
+          "shape":"WorkflowUuid",
+          "documentation":"<p>The universally unique identifier (UUID) value for this workflow version.</p>"
         }
       }
     },
@@ -3292,6 +3594,58 @@
         "UPLOAD"
       ]
     },
+    "DefinitionRepository":{
+      "type":"structure",
+      "required":[
+        "connectionArn",
+        "fullRepositoryId"
+      ],
+      "members":{
+        "connectionArn":{
+          "shape":"ConnectionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection to the source code repository.</p>"
+        },
+        "fullRepositoryId":{
+          "shape":"FullRepositoryId",
+          "documentation":"<p>The full repository identifier, including the repository owner and name. For example, 'repository-owner/repository-name'.</p>"
+        },
+        "sourceReference":{
+          "shape":"SourceReference",
+          "documentation":"<p>The source reference for the repository, such as a branch name, tag, or commit ID.</p>"
+        },
+        "excludeFilePatterns":{
+          "shape":"ExcludeFilePatternList",
+          "documentation":"<p>A list of file patterns to exclude when retrieving the workflow definition from the repository.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a source code repository that hosts the workflow definition files.</p>"
+    },
+    "DefinitionRepositoryDetails":{
+      "type":"structure",
+      "members":{
+        "connectionArn":{
+          "shape":"ConnectionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connection to the source code repository.</p>"
+        },
+        "fullRepositoryId":{
+          "shape":"FullRepositoryId",
+          "documentation":"<p>The full repository identifier, including the repository owner and name. For example, 'repository-owner/repository-name'.</p>"
+        },
+        "sourceReference":{
+          "shape":"SourceReference",
+          "documentation":"<p>The source reference for the repository, such as a branch name, tag, or commit ID.</p>"
+        },
+        "providerType":{
+          "shape":"String",
+          "documentation":"<p>The provider type of the source code repository, such as Bitbucket, GitHub, GitHubEnterpriseServer, GitLab, and GitLabSelfManaged.</p>"
+        },
+        "providerEndpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint URL of the source code repository provider.</p>"
+        }
+      },
+      "documentation":"<p>Contains detailed information about the source code repository that hosts the workflow definition files.</p>"
+    },
     "DeleteAnnotationStoreRequest":{
       "type":"structure",
       "required":["name"],
@@ -3528,6 +3882,27 @@
         }
       }
     },
+    "DeleteWorkflowVersionRequest":{
+      "type":"structure",
+      "required":[
+        "workflowId",
+        "versionName"
+      ],
+      "members":{
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID.</p>",
+          "location":"uri",
+          "locationName":"workflowId"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The workflow version name.</p>",
+          "location":"uri",
+          "locationName":"versionName"
+        }
+      }
+    },
     "Description":{
       "type":"string",
       "max":500,
@@ -3573,6 +3948,12 @@
         "SHA512up"
       ]
     },
+    "EcrRepositoryPrefix":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
     "Encoding":{
       "type":"string",
       "max":20,
@@ -3596,6 +3977,12 @@
       "min":1
     },
     "EscapeQuotes":{"type":"boolean"},
+    "ExcludeFilePatternList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "max":50,
+      "min":1
+    },
     "ExportJobId":{
       "type":"string",
       "max":36,
@@ -3698,6 +4085,10 @@
       "type":"list",
       "member":{"shape":"ExportReadSetJobDetail"}
     },
+    "FallbackLocation":{
+      "type":"string",
+      "pattern":"$|^s3://([a-z0-9][a-z0-9-.]{1,61}[a-z0-9])/?((.{1,1024})/)?"
+    },
     "FileInformation":{
       "type":"structure",
       "members":{
@@ -3801,6 +4192,10 @@
       "max":1000,
       "min":0
     },
+    "FullRepositoryId":{
+      "type":"string",
+      "pattern":".+/.+"
+    },
     "GeneratedFrom":{
       "type":"string",
       "max":127,
@@ -4837,7 +5232,7 @@
         },
         "engineVersion":{
           "shape":"EngineVersion",
-          "documentation":"<p>The workflow engine version.</p>"
+          "documentation":"<p>The actual Nextflow engine version that Amazon Web Services HealthOmics used for the run. The other workflow definition languages don't provide a value for this field.</p>"
         },
         "status":{
           "shape":"RunStatus",
@@ -4954,6 +5349,14 @@
         "workflowOwnerId":{
           "shape":"WorkflowOwnerId",
           "documentation":"<p>The ID of the workflow owner.</p>"
+        },
+        "workflowVersionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The workflow version name.</p>"
+        },
+        "workflowUuid":{
+          "shape":"WorkflowUuid",
+          "documentation":"<p>The universally unique identifier (UUID) value for the workflow.</p>"
         }
       }
     },
@@ -5011,7 +5414,7 @@
         },
         "cacheHit":{
           "shape":"Boolean",
-          "documentation":"<p>Set to true if AWS HealthOmics found a matching entry in the run cache for this task.</p>"
+          "documentation":"<p>Set to true if Amazon Web Services HealthOmics found a matching entry in the run cache for this task.</p>"
         },
         "cacheS3Uri":{
           "shape":"S3UriForBucketOrObject",
@@ -5052,6 +5455,10 @@
         "failureReason":{
           "shape":"TaskFailureReason",
           "documentation":"<p>The reason a task has failed.</p>"
+        },
+        "imageDetails":{
+          "shape":"ImageDetails",
+          "documentation":"<p>Details about the container image that this task uses.</p>"
         }
       }
     },
@@ -5092,7 +5499,7 @@
         },
         "storeId":{
           "shape":"StoreId",
-          "documentation":"<p>The AWS-generated Sequence Store or Reference Store ID.</p>"
+          "documentation":"<p>The Amazon Web Services-generated Sequence Store or Reference Store ID.</p>"
         },
         "storeType":{
           "shape":"StoreType",
@@ -5154,7 +5561,7 @@
           "documentation":"<p>When the store was created.</p>"
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
+          "shape":"FallbackLocation",
           "documentation":"<p>An S3 location that is used to store files that have failed a direct upload.</p>"
         },
         "s3Access":{
@@ -5434,7 +5841,7 @@
         },
         "storageCapacity":{
           "shape":"GetWorkflowResponseStorageCapacityInteger",
-          "documentation":"<p>The workflow's default run storage capacity in gibibytes.</p>"
+          "documentation":"<p>The default static storage capacity (in gibibytes) for runs that use this workflow or workflow version.</p>"
         },
         "creationTime":{
           "shape":"WorkflowTimestamp",
@@ -5450,11 +5857,35 @@
         },
         "metadata":{
           "shape":"WorkflowMetadata",
-          "documentation":"<p>Gets metadata for workflow.</p>"
+          "documentation":"<p>Gets metadata for the workflow.</p>"
         },
         "accelerators":{
           "shape":"Accelerators",
           "documentation":"<p>The computational accelerator specified to run the workflow. </p>"
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for runs using this workflow.</p>"
+        },
+        "uuid":{
+          "shape":"WorkflowUuid",
+          "documentation":"<p>The universally unique identifier (UUID) value for this workflow.</p>"
+        },
+        "containerRegistryMap":{
+          "shape":"ContainerRegistryMap",
+          "documentation":"<p>The registry map that this workflow is using.</p>"
+        },
+        "readme":{
+          "shape":"ReadmeS3PresignedUrl",
+          "documentation":"<p>The README content for the workflow, providing documentation and usage information.</p>"
+        },
+        "definitionRepositoryDetails":{
+          "shape":"DefinitionRepositoryDetails",
+          "documentation":"<p>Details about the source code repository that hosts the workflow definition files.</p>"
+        },
+        "readmePath":{
+          "shape":"ReadmePath",
+          "documentation":"<p>The path to the workflow README markdown file within the repository. This file provides documentation and usage information for the workflow. If not specified, the <code>README.md</code> file from the root directory of the repository will be used.</p>"
         }
       }
     },
@@ -5464,7 +5895,189 @@
       "max":100000,
       "min":0
     },
+    "GetWorkflowVersionRequest":{
+      "type":"structure",
+      "required":[
+        "workflowId",
+        "versionName"
+      ],
+      "members":{
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID. The <code>workflowId</code> is not the UUID.</p>",
+          "location":"uri",
+          "locationName":"workflowId"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The workflow version name.</p>",
+          "location":"uri",
+          "locationName":"versionName"
+        },
+        "type":{
+          "shape":"WorkflowType",
+          "documentation":"<p>The workflow's type. </p>",
+          "location":"querystring",
+          "locationName":"type"
+        },
+        "export":{
+          "shape":"WorkflowExportList",
+          "documentation":"<p>The export format for the workflow.</p>",
+          "location":"querystring",
+          "locationName":"export"
+        },
+        "workflowOwnerId":{
+          "shape":"WorkflowOwnerId",
+          "documentation":"<p>The 12-digit account ID of the workflow owner. The workflow owner ID can be retrieved using the <code>GetShare</code> API operation. If you are the workflow owner, you do not need to include this ID.</p>",
+          "location":"querystring",
+          "locationName":"workflowOwnerId"
+        }
+      }
+    },
+    "GetWorkflowVersionResponse":{
+      "type":"structure",
+      "members":{
+        "arn":{
+          "shape":"WorkflowVersionArn",
+          "documentation":"<p>ARN of the workflow version.</p>"
+        },
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID.</p>"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The workflow version name.</p>"
+        },
+        "accelerators":{
+          "shape":"Accelerators",
+          "documentation":"<p>The accelerator for this workflow version.</p>"
+        },
+        "creationTime":{
+          "shape":"WorkflowTimestamp",
+          "documentation":"<p>When the workflow version was created.</p>"
+        },
+        "description":{
+          "shape":"WorkflowVersionDescription",
+          "documentation":"<p>Description of the workflow version.</p>"
+        },
+        "definition":{
+          "shape":"WorkflowDefinition",
+          "documentation":"<p>Definition of the workflow version.</p>"
+        },
+        "digest":{
+          "shape":"WorkflowDigest",
+          "documentation":"<p>The workflow version's digest.</p>"
+        },
+        "engine":{
+          "shape":"WorkflowEngine",
+          "documentation":"<p>The workflow engine for this workflow version.</p>"
+        },
+        "main":{
+          "shape":"WorkflowMain",
+          "documentation":"<p>The path of the main definition file for the workflow.</p>"
+        },
+        "metadata":{
+          "shape":"WorkflowMetadata",
+          "documentation":"<p>The metadata for the workflow version.</p>"
+        },
+        "parameterTemplate":{
+          "shape":"WorkflowParameterTemplate",
+          "documentation":"<p>The parameter template for the workflow version.</p>"
+        },
+        "status":{
+          "shape":"WorkflowStatus",
+          "documentation":"<p>The workflow version status</p>"
+        },
+        "statusMessage":{
+          "shape":"WorkflowStatusMessage",
+          "documentation":"<p>The workflow version status message</p>"
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for the run.</p>"
+        },
+        "storageCapacity":{
+          "shape":"GetWorkflowVersionResponseStorageCapacityInteger",
+          "documentation":"<p>The default run storage capacity for static storage.</p>"
+        },
+        "type":{
+          "shape":"WorkflowType",
+          "documentation":"<p>The workflow version type</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The workflow version tags</p>"
+        },
+        "uuid":{
+          "shape":"WorkflowUuid",
+          "documentation":"<p>The universally unique identifier (UUID) value for this workflow version</p>"
+        },
+        "workflowBucketOwnerId":{
+          "shape":"WorkflowBucketOwnerId",
+          "documentation":"<p>Amazon Web Services Id of the owner of the bucket.</p>"
+        },
+        "containerRegistryMap":{
+          "shape":"ContainerRegistryMap",
+          "documentation":"<p>The registry map that this workflow version uses.</p>"
+        },
+        "readme":{
+          "shape":"ReadmeS3PresignedUrl",
+          "documentation":"<p>The README content for the workflow version, providing documentation and usage information specific to this version.</p>"
+        },
+        "definitionRepositoryDetails":{
+          "shape":"DefinitionRepositoryDetails",
+          "documentation":"<p>Details about the source code repository that hosts the workflow version definition files.</p>"
+        },
+        "readmePath":{
+          "shape":"ReadmePath",
+          "documentation":"<p>The path to the workflow version README markdown file within the repository. This file provides documentation and usage information for the workflow. If not specified, the <code>README.md</code> file from the root directory of the repository will be used.</p>"
+        }
+      }
+    },
+    "GetWorkflowVersionResponseStorageCapacityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100000,
+      "min":0
+    },
     "Header":{"type":"boolean"},
+    "ImageDetails":{
+      "type":"structure",
+      "members":{
+        "image":{
+          "shape":"Uri",
+          "documentation":"<p>The URI of the container image.</p>"
+        },
+        "imageDigest":{
+          "shape":"TaskImageDigest",
+          "documentation":"<p>The container image digest. If the image URI was transformed, this will be the digest of the container image referenced by the transformed URI.</p>"
+        },
+        "sourceImage":{
+          "shape":"Uri",
+          "documentation":"<p>URI of the source registry. If the URI is from a third-party registry, Amazon Web Services HealthOmics transforms the URI to the corresponding ECR path, using the pull-through cache mapping rules.</p>"
+        }
+      },
+      "documentation":"<p>Information about the container image used for a task.</p>"
+    },
+    "ImageMapping":{
+      "type":"structure",
+      "members":{
+        "sourceImage":{
+          "shape":"Uri",
+          "documentation":"<p>Specifies the URI of the source image in the upstream registry.</p>"
+        },
+        "destinationImage":{
+          "shape":"Uri",
+          "documentation":"<p>Specifies the URI of the corresponding image in the private ECR registry.</p>"
+        }
+      },
+      "documentation":"<p>Specifies image mappings that workflow tasks can use. For example, you can replace all the task references of a public image to use an equivalent image in your private ECR repository. You can use image mappings with upstream registries that don't support pull through cache. You need to manually synchronize the upstream registry with your private repository. </p>"
+    },
+    "ImageMappingsList":{
+      "type":"list",
+      "member":{"shape":"ImageMapping"}
+    },
     "ImportJobId":{
       "type":"string",
       "max":36,
@@ -6781,6 +7394,61 @@
         }
       }
     },
+    "ListWorkflowVersionsRequest":{
+      "type":"structure",
+      "required":["workflowId"],
+      "members":{
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID. The <code>workflowId</code> is not the UUID.</p>",
+          "location":"uri",
+          "locationName":"workflowId"
+        },
+        "type":{
+          "shape":"WorkflowType",
+          "documentation":"<p>The workflow type.</p>",
+          "location":"querystring",
+          "locationName":"type"
+        },
+        "workflowOwnerId":{
+          "shape":"WorkflowOwnerId",
+          "documentation":"<p>The 12-digit account ID of the workflow owner. The workflow owner ID can be retrieved using the <code>GetShare</code> API operation. If you are the workflow owner, you do not need to include this ID.</p>",
+          "location":"querystring",
+          "locationName":"workflowOwnerId"
+        },
+        "startingToken":{
+          "shape":"WorkflowVersionListToken",
+          "documentation":"<p>Specify the pagination token from a previous request to retrieve the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"startingToken"
+        },
+        "maxResults":{
+          "shape":"ListWorkflowVersionsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of workflows to return in one page of results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListWorkflowVersionsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListWorkflowVersionsResponse":{
+      "type":"structure",
+      "members":{
+        "items":{
+          "shape":"WorkflowVersionList",
+          "documentation":"<p>A list of workflow version items.</p>"
+        },
+        "nextToken":{
+          "shape":"WorkflowVersionListToken",
+          "documentation":"<p>A pagination token that's included if more results are available.</p>"
+        }
+      }
+    },
     "ListWorkflowsRequest":{
       "type":"structure",
       "members":{
@@ -6928,6 +7596,12 @@
       "min":1,
       "pattern":"[0-9]+"
     },
+    "ParameterTemplatePath":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
     "PrimitiveBoolean":{"type":"boolean"},
     "PropagatedSetLevelTags":{
       "type":"list",
@@ -6964,7 +7638,7 @@
         },
         "storeId":{
           "shape":"StoreId",
-          "documentation":"<p>The AWS-generated Sequence Store or Reference Store ID.</p>"
+          "documentation":"<p>The Amazon Web Services-generated Sequence Store or Reference Store ID.</p>"
         },
         "storeType":{
           "shape":"StoreType",
@@ -7413,6 +8087,19 @@
       "max":5368709120,
       "min":1
     },
+    "ReadmeMarkdown":{"type":"string"},
+    "ReadmePath":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
+    "ReadmeS3PresignedUrl":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
     "ReferenceArn":{
       "type":"string",
       "max":127,
@@ -7669,6 +8356,32 @@
       "type":"blob",
       "streaming":true
     },
+    "RegistryMapping":{
+      "type":"structure",
+      "members":{
+        "upstreamRegistryUrl":{
+          "shape":"Uri",
+          "documentation":"<p>The URI of the upstream registry.</p>"
+        },
+        "ecrRepositoryPrefix":{
+          "shape":"EcrRepositoryPrefix",
+          "documentation":"<p>The repository prefix to use in the ECR private repository.</p>"
+        },
+        "upstreamRepositoryPrefix":{
+          "shape":"UpstreamRepositoryPrefix",
+          "documentation":"<p>The repository prefix of the corresponding repository in the upstream registry.</p>"
+        },
+        "ecrAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>Account ID of the account that owns the upstream container image.</p>"
+        }
+      },
+      "documentation":"<p>If you are using the ECR pull through cache feature, the registry mapping maps between the ECR repository and the upstream registry where container images are pulled and synchronized.</p>"
+    },
+    "RegistryMappingsList":{
+      "type":"list",
+      "member":{"shape":"RegistryMapping"}
+    },
     "RequestTimeoutException":{
       "type":"structure",
       "required":["message"],
@@ -7968,6 +8681,10 @@
         "storageType":{
           "shape":"StorageType",
           "documentation":"<p>The run's storage type.</p>"
+        },
+        "workflowVersionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The name of the workflow version.</p>"
         }
       },
       "documentation":"<p>A workflow run.</p>"
@@ -8143,6 +8860,10 @@
       "documentation":"<p>Uri to a S3 object or bucket</p>",
       "pattern":"s3://([a-z0-9][a-z0-9-.]{1,61}[a-z0-9])(/(.{0,1024}))?"
     },
+    "S3UriForObject":{
+      "type":"string",
+      "pattern":"s3://([a-z0-9][a-z0-9-.]{1,61}[a-z0-9])/((.{1,1024}))"
+    },
     "SampleId":{
       "type":"string",
       "max":127,
@@ -8243,7 +8964,7 @@
           "documentation":"<p>When the store was created.</p>"
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
+          "shape":"FallbackLocation",
           "documentation":"<p> An S3 location that is used to store files that have failed a direct upload. </p>"
         },
         "eTagAlgorithmFamily":{
@@ -8448,6 +9169,33 @@
       },
       "documentation":"<p>Source files for a sequence.</p>"
     },
+    "SourceReference":{
+      "type":"structure",
+      "required":[
+        "type",
+        "value"
+      ],
+      "members":{
+        "type":{
+          "shape":"SourceReferenceType",
+          "documentation":"<p>The type of source reference, such as branch, tag, or commit.</p>"
+        },
+        "value":{
+          "shape":"SourceReferenceValue",
+          "documentation":"<p>The value of the source reference, such as the branch name, tag name, or commit ID.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the source reference in a code repository, such as a branch, tag, or commit.</p>"
+    },
+    "SourceReferenceType":{
+      "type":"string",
+      "enum":[
+        "BRANCH",
+        "TAG",
+        "COMMIT"
+      ]
+    },
+    "SourceReferenceValue":{"type":"string"},
     "SseConfig":{
       "type":"structure",
       "required":["type"],
@@ -8865,16 +9613,17 @@
       "type":"structure",
       "required":[
         "roleArn",
+        "outputUri",
         "requestId"
       ],
       "members":{
         "workflowId":{
           "shape":"WorkflowId",
-          "documentation":"<p>The run's workflow ID.</p>"
+          "documentation":"<p>The run's workflow ID. The <code>workflowId</code> is not the UUID.</p>"
         },
         "workflowType":{
           "shape":"WorkflowType",
-          "documentation":"<p>The run's workflow type.</p>"
+          "documentation":"<p>The run's workflow type. The <code>workflowType</code> must be specified if you are running a <code>READY2RUN</code> workflow. If you are running a <code>PRIVATE</code> workflow (default), you do not need to include the workflow type. </p>"
         },
         "runId":{
           "shape":"RunId",
@@ -8882,11 +9631,11 @@
         },
         "roleArn":{
           "shape":"RunRoleArn",
-          "documentation":"<p>A service role for the run.</p>"
+          "documentation":"<p>A service role for the run. The <code>roleArn</code> requires access to Amazon Web Services HealthOmics, S3, Cloudwatch logs, and EC2. An example <code>roleArn</code> is <code>arn:aws:iam::123456789012:role/omics-service-role-serviceRole-W8O1XMPL7QZ</code>. In this example, the AWS account ID is <code>123456789012</code> and the role name is <code>omics-service-role-serviceRole-W8O1XMPL7QZ</code>.</p>"
         },
         "name":{
           "shape":"RunName",
-          "documentation":"<p>A name for the run.</p>"
+          "documentation":"<p>A name for the run. This is recommended to view and organize runs in the Amazon Web Services HealthOmics console and CloudWatch logs.</p>"
         },
         "cacheId":{
           "shape":"NumericIdInArn",
@@ -8894,27 +9643,27 @@
         },
         "cacheBehavior":{
           "shape":"CacheBehavior",
-          "documentation":"<p>The cache behavior for the run. You specify this value if you want to override the default behavior for the cache. You had set the default value when you created the cache. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/how-run-cache.html#run-cache-behavior\">Run cache behavior</a> in the AWS HealthOmics User Guide.</p>"
+          "documentation":"<p>The cache behavior for the run. You specify this value if you want to override the default behavior for the cache. You had set the default value when you created the cache. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/how-run-cache.html#run-cache-behavior\">Run cache behavior</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "runGroupId":{
           "shape":"RunGroupId",
-          "documentation":"<p>The run's group ID.</p>"
+          "documentation":"<p>The run's group ID. Use a run group to cap the compute resources (and number of concurrent runs) for the runs that you add to the run group.</p>"
         },
         "priority":{
           "shape":"StartRunRequestPriorityInteger",
-          "documentation":"<p>A priority for the run.</p>"
+          "documentation":"<p>Use the run priority (highest: 1) to establish the order of runs in a run group when you start a run. If multiple runs share the same priority, the run that was initiated first will have the higher priority. Runs that do not belong to a run group can be assigned a priority. The priorities of these runs are ranked among other runs that are not in a run group. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/creating-run-groups.html#run-priority\">Run priority</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "parameters":{
           "shape":"RunParameters",
-          "documentation":"<p>Parameters for the run.</p>"
+          "documentation":"<p>Parameters for the run. The run needs all required parameters and can include optional parameters. The run cannot include any parameters that are not defined in the parameter template. To retrieve parameters from the run, use the GetRun API operation.</p>"
         },
         "storageCapacity":{
           "shape":"StartRunRequestStorageCapacityInteger",
-          "documentation":"<p>A storage capacity for the run in gibibytes. This field is not required if the storage type is dynamic (the system ignores any value that you enter).</p>"
+          "documentation":"<p>The <code>STATIC</code> storage capacity (in gibibytes, GiB) for this run. The default run storage capacity is 1200 GiB. If your requested storage capacity is unavailable, the system rounds up the value to the nearest 1200 GiB multiple. If the requested storage capacity is still unavailable, the system rounds up the value to the nearest 2400 GiB multiple. This field is not required if the storage type is <code>DYNAMIC</code> (the system ignores any value that you enter).</p>"
         },
         "outputUri":{
           "shape":"RunOutputUri",
-          "documentation":"<p>An output URI for the run.</p>"
+          "documentation":"<p>An output S3 URI for the run. The S3 bucket must be in the same region as the workflow. The role ARN must have permission to write to this S3 bucket.</p>"
         },
         "logLevel":{
           "shape":"RunLogLevel",
@@ -8922,24 +9671,28 @@
         },
         "tags":{
           "shape":"TagMap",
-          "documentation":"<p>Tags for the run.</p>"
+          "documentation":"<p>Tags for the run. You can add up to 50 tags per run. For more information, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/add-a-tag.html\">Adding a tag</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "requestId":{
           "shape":"RunRequestId",
-          "documentation":"<p>To ensure that requests don't run multiple times, specify a unique ID for each request.</p>",
+          "documentation":"<p>An idempotency token used to dedupe retry requests so that duplicate runs are not created.</p>",
           "idempotencyToken":true
         },
         "retentionMode":{
           "shape":"RunRetentionMode",
-          "documentation":"<p>The retention mode for the run. The default value is RETAIN. </p> <p>HealthOmics stores a fixed number of runs that are available to the console and API. In the default mode (RETAIN), you need to remove runs manually when the number of run exceeds the maximum. If you set the retention mode to <code>REMOVE</code>, HealthOmics automatically removes runs (that have mode set to REMOVE) when the number of run exceeds the maximum. All run logs are available in CloudWatch logs, if you need information about a run that is no longer available to the API.</p> <p>For more information about retention mode, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/starting-a-run.html\">Specifying run retention mode</a> in the <i>AWS HealthOmics User Guide</i>.</p>"
+          "documentation":"<p>The retention mode for the run. The default value is <code>RETAIN</code>. </p> <p>Amazon Web Services HealthOmics stores a fixed number of runs that are available to the console and API. In the default mode (<code>RETAIN</code>), you need to remove runs manually when the number of run exceeds the maximum. If you set the retention mode to <code>REMOVE</code>, Amazon Web Services HealthOmics automatically removes runs (that have mode set to <code>REMOVE</code>) when the number of run exceeds the maximum. All run logs are available in CloudWatch logs, if you need information about a run that is no longer available to the API.</p> <p>For more information about retention mode, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/starting-a-run.html\">Specifying run retention mode</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "storageType":{
           "shape":"StorageType",
-          "documentation":"<p>The run's storage type. By default, the run uses STATIC storage type, which allocates a fixed amount of storage. If you set the storage type to DYNAMIC, HealthOmics dynamically scales the storage up or down, based on file system utilization.</p>"
+          "documentation":"<p>The storage type for the run. If you set the storage type to <code>DYNAMIC</code>, Amazon Web Services HealthOmics dynamically scales the storage up or down, based on file system utilization. By default, the run uses <code>STATIC</code> storage type, which allocates a fixed amount of storage. For more information about <code>DYNAMIC</code> and <code>STATIC</code> storage, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-run-types.html\">Run storage types</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         },
         "workflowOwnerId":{
           "shape":"WorkflowOwnerId",
-          "documentation":"<p>The ID of the workflow owner. </p>"
+          "documentation":"<p>The 12-digit account ID of the workflow owner that is used for running a shared workflow. The workflow owner ID can be retrieved using the <code>GetShare</code> API operation. If you are the workflow owner, you do not need to include this ID.</p>"
+        },
+        "workflowVersionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The name of the workflow version. Use workflow versions to track and organize changes to the workflow. If your workflow has multiple versions, the run uses the default version unless you specify a version name. To learn more, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflow-versions.html\">Workflow versioning</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
         }
       }
     },
@@ -9105,7 +9858,7 @@
     },
     "TagArn":{
       "type":"string",
-      "max":128,
+      "max":150,
       "min":1,
       "pattern":"arn:.+"
     },
@@ -9173,6 +9926,12 @@
       "min":1,
       "pattern":"[0-9]+"
     },
+    "TaskImageDigest":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"sha[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
     "TaskInstanceType":{
       "type":"string",
       "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
@@ -9202,7 +9961,7 @@
         },
         "cacheHit":{
           "shape":"Boolean",
-          "documentation":"<p>Set to true if AWS HealthOmics found a matching entry in the run cache for this task.</p>"
+          "documentation":"<p>Set to true if Amazon Web Services HealthOmics found a matching entry in the run cache for this task.</p>"
         },
         "cacheS3Uri":{
           "shape":"S3UriForBucketOrObject",
@@ -9633,7 +10392,7 @@
           "idempotencyToken":true
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
+          "shape":"FallbackLocation",
           "documentation":"<p>The S3 URI of a bucket and folder to store Read Sets that fail to upload.</p>"
         },
         "propagatedSetLevelTags":{
@@ -9692,7 +10451,7 @@
           "documentation":"<p>The status message of the sequence store.</p>"
         },
         "fallbackLocation":{
-          "shape":"S3Destination",
+          "shape":"FallbackLocation",
           "documentation":"<p>The S3 URI of a bucket and folder to store Read Sets that fail to upload.</p>"
         },
         "s3Access":{"shape":"SequenceStoreS3Access"},
@@ -9781,9 +10540,70 @@
         "description":{
           "shape":"WorkflowDescription",
           "documentation":"<p>A description for the workflow.</p>"
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for runs that use this workflow. STATIC storage allocates a fixed amount of storage. DYNAMIC storage dynamically scales the storage up or down, based on file system utilization. For more information about static and dynamic storage, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/Using-workflows.html\">Running workflows</a> in the <i>Amazon Web Services HealthOmics User Guide</i>. </p>"
+        },
+        "storageCapacity":{
+          "shape":"UpdateWorkflowRequestStorageCapacityInteger",
+          "documentation":"<p>The default static storage capacity (in gibibytes) for runs that use this workflow or workflow version. </p>"
+        },
+        "readmeMarkdown":{
+          "shape":"ReadmeMarkdown",
+          "documentation":"<p>The markdown content for the workflow's README file. This provides documentation and usage information for users of the workflow.</p>"
+        }
+      }
+    },
+    "UpdateWorkflowRequestStorageCapacityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100000,
+      "min":0
+    },
+    "UpdateWorkflowVersionRequest":{
+      "type":"structure",
+      "required":[
+        "workflowId",
+        "versionName"
+      ],
+      "members":{
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID. The <code>workflowId</code> is not the UUID.</p>",
+          "location":"uri",
+          "locationName":"workflowId"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The name of the workflow version.</p>",
+          "location":"uri",
+          "locationName":"versionName"
+        },
+        "description":{
+          "shape":"WorkflowVersionDescription",
+          "documentation":"<p>Description of the workflow version.</p>"
+        },
+        "storageType":{
+          "shape":"StorageType",
+          "documentation":"<p>The default storage type for runs that use this workflow version. The <code>storageType</code> can be overridden at run time. <code>DYNAMIC</code> storage dynamically scales the storage up or down, based on file system utilization. STATIC storage allocates a fixed amount of storage. For more information about dynamic and static storage types, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/workflows-run-types.html\">Run storage types</a> in the <i>in the <i>Amazon Web Services HealthOmics User Guide</i> </i>.</p>"
+        },
+        "storageCapacity":{
+          "shape":"UpdateWorkflowVersionRequestStorageCapacityInteger",
+          "documentation":"<p>The default static storage capacity (in gibibytes) for runs that use this workflow version. The <code>storageCapacity</code> can be overwritten at run time. The storage capacity is not required for runs with a <code>DYNAMIC</code> storage type.</p>"
+        },
+        "readmeMarkdown":{
+          "shape":"ReadmeMarkdown",
+          "documentation":"<p>The markdown content for the workflow version's README file. This provides documentation and usage information for users of this specific workflow version.</p>"
         }
       }
     },
+    "UpdateWorkflowVersionRequestStorageCapacityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100000,
+      "min":0
+    },
     "UploadId":{
       "type":"string",
       "max":36,
@@ -9847,6 +10667,18 @@
         }
       }
     },
+    "UpstreamRepositoryPrefix":{
+      "type":"string",
+      "max":30,
+      "min":2,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
+    "Uri":{
+      "type":"string",
+      "max":750,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
     "UserCustomDescription":{
       "type":"string",
       "max":256,
@@ -10111,6 +10943,10 @@
       "min":1,
       "pattern":"arn:.+"
     },
+    "WorkflowBucketOwnerId":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
     "WorkflowDefinition":{
       "type":"string",
       "max":256,
@@ -10133,14 +10969,18 @@
       "enum":[
         "WDL",
         "NEXTFLOW",
-        "CWL"
+        "CWL",
+        "WDL_LENIENT"
       ],
       "max":64,
       "min":1
     },
     "WorkflowExport":{
       "type":"string",
-      "enum":["DEFINITION"],
+      "enum":[
+        "DEFINITION",
+        "README"
+      ],
       "max":64,
       "min":1
     },
@@ -10303,7 +11143,81 @@
       ],
       "max":64,
       "min":1
+    },
+    "WorkflowUuid":{
+      "type":"string",
+      "pattern":"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
+    },
+    "WorkflowVersionArn":{
+      "type":"string",
+      "max":150,
+      "min":1,
+      "pattern":"arn:.+"
+    },
+    "WorkflowVersionDescription":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
+    "WorkflowVersionList":{
+      "type":"list",
+      "member":{"shape":"WorkflowVersionListItem"}
+    },
+    "WorkflowVersionListItem":{
+      "type":"structure",
+      "members":{
+        "arn":{
+          "shape":"WorkflowVersionArn",
+          "documentation":"<p>ARN of the workflow version.</p>"
+        },
+        "workflowId":{
+          "shape":"WorkflowId",
+          "documentation":"<p>The workflow's ID.</p>"
+        },
+        "versionName":{
+          "shape":"WorkflowVersionName",
+          "documentation":"<p>The name of the workflow version.</p>"
+        },
+        "description":{
+          "shape":"WorkflowVersionDescription",
+          "documentation":"<p>The description of the workflow version.</p>"
+        },
+        "status":{
+          "shape":"WorkflowStatus",
+          "documentation":"<p>The status of the workflow version.</p>"
+        },
+        "type":{
+          "shape":"WorkflowType",
+          "documentation":"<p>The type of the workflow version.</p>"
+        },
+        "digest":{
+          "shape":"WorkflowDigest",
+          "documentation":"<p>The digist of the workflow version.</p>"
+        },
+        "creationTime":{
+          "shape":"WorkflowTimestamp",
+          "documentation":"<p>The creation time of the workflow version.</p>"
+        },
+        "metadata":{
+          "shape":"WorkflowMetadata",
+          "documentation":"<p>Metadata for the workflow version.</p>"
+        }
+      },
+      "documentation":"<p>A list of workflow version items.</p>"
+    },
+    "WorkflowVersionListToken":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\p{L}||\\p{M}||\\p{Z}||\\p{S}||\\p{N}||\\p{P}]+"
+    },
+    "WorkflowVersionName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z0-9][A-Za-z0-9\\-\\._]*"
     }
   },
-  "documentation":"<p>This is the <i>AWS HealthOmics API Reference</i>. For an introduction to the service, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/\">What is AWS HealthOmics?</a> in the <i>AWS HealthOmics User Guide</i>.</p>"
+  "documentation":"<p>Amazon Web Services HealthOmics is a service that helps users such as bioinformaticians, researchers, and scientists to store, query, analyze, and generate insights from genomics and other biological data. It simplifies and accelerates the process of storing and analyzing genomic information for Amazon Web Services.</p> <p>For an introduction to the service, see <a href=\"https://docs.aws.amazon.com/omics/latest/dev/what-is-healthomics.html\">What is Amazon Web Services HealthOmics?</a> in the <i>Amazon Web Services HealthOmics User Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/omics/2022-11-28/waiters-2.json 2.31.35-1/awscli/botocore/data/omics/2022-11-28/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/omics/2022-11-28/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/omics/2022-11-28/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -541,6 +541,33 @@
         "state" : "failure",
         "expected" : "FAILED"
       } ]
+    },
+    "WorkflowVersionActive" : {
+      "description" : "Wait until a workflow version is active.",
+      "delay" : 3,
+      "maxAttempts" : 10,
+      "operation" : "GetWorkflowVersion",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "retry",
+        "expected" : "CREATING"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "retry",
+        "expected" : "UPDATING"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      } ]
     }
   }
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opensearch/2021-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/opensearch/2021-01-01/service-2.json 2.31.35-1/awscli/botocore/data/opensearch/2021-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/opensearch/2021-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opensearch/2021-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,7 +183,7 @@
         {"shape":"InternalException"},
         {"shape":"DisabledOperationException"}
       ],
-      "documentation":"<p>Creates an OpenSearch Application.</p>"
+      "documentation":"<p>Creates an OpenSearch UI application. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application.html\">Using the OpenSearch user interface in Amazon OpenSearch Service</a>.</p>"
     },
     "CreateDomain":{
       "name":"CreateDomain",
@@ -275,7 +275,7 @@
         {"shape":"InternalException"},
         {"shape":"DisabledOperationException"}
       ],
-      "documentation":"<p>Deletes an existing OpenSearch Application.</p>"
+      "documentation":"<p>Deletes a specified OpenSearch application.</p>"
     },
     "DeleteDataSource":{
       "name":"DeleteDataSource",
@@ -684,7 +684,7 @@
         {"shape":"InternalException"},
         {"shape":"DisabledOperationException"}
       ],
-      "documentation":"<p>Check the configuration and status of an existing OpenSearch Application.</p>"
+      "documentation":"<p>Retrieves the configuration and status of an existing OpenSearch application.</p>"
     },
     "GetCompatibleVersions":{
       "name":"GetCompatibleVersions",
@@ -721,6 +721,23 @@
       ],
       "documentation":"<p>Retrieves information about a direct query data source.</p>"
     },
+    "GetDefaultApplicationSetting":{
+      "name":"GetDefaultApplicationSetting",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2021-01-01/opensearch/defaultApplicationSetting",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDefaultApplicationSettingRequest"},
+      "output":{"shape":"GetDefaultApplicationSettingResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Gets the ARN of the current default application.</p> <p> If the default application isn't set, the operation returns a resource not found error.</p>"
+    },
     "GetDirectQueryDataSource":{
       "name":"GetDirectQueryDataSource",
       "http":{
@@ -823,7 +840,7 @@
         {"shape":"InternalException"},
         {"shape":"DisabledOperationException"}
       ],
-      "documentation":"<p>List all OpenSearch Applications under your account.</p>"
+      "documentation":"<p>Lists all OpenSearch applications under your account.</p>"
     },
     "ListDataSources":{
       "name":"ListDataSources",
@@ -1055,6 +1072,23 @@
       ],
       "documentation":"<p>Allows you to purchase Amazon OpenSearch Service Reserved Instances.</p>"
     },
+    "PutDefaultApplicationSetting":{
+      "name":"PutDefaultApplicationSetting",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2021-01-01/opensearch/defaultApplicationSetting",
+        "responseCode":200
+      },
+      "input":{"shape":"PutDefaultApplicationSettingRequest"},
+      "output":{"shape":"PutDefaultApplicationSettingResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Sets the default application to the application with the specified ARN.</p> <p> To remove the default application, use the <code>GetDefaultApplicationSetting</code> operation to get the current default and then call the <code>PutDefaultApplicationSetting</code> with the current applications ARN and the <code>setAsDefault</code> parameter set to <code>false</code>.</p>"
+    },
     "RejectInboundConnection":{
       "name":"RejectInboundConnection",
       "http":{
@@ -1151,7 +1185,7 @@
         {"shape":"InternalException"},
         {"shape":"DisabledOperationException"}
       ],
-      "documentation":"<p>Update the OpenSearch Application. </p>"
+      "documentation":"<p>Updates the configuration and settings of an existing OpenSearch application.</p>"
     },
     "UpdateDataSource":{
       "name":"UpdateDataSource",
@@ -1304,6 +1338,10 @@
         "NaturalLanguageQueryGenerationOptions":{
           "shape":"NaturalLanguageQueryGenerationOptionsInput",
           "documentation":"<p>Container for parameters required for natural language query generation on the specified domain.</p>"
+        },
+        "S3VectorsEngine":{
+          "shape":"S3VectorsEngine",
+          "documentation":"<p>Container for parameters required to enable S3 vectors engine features on the specified domain.</p>"
         }
       },
       "documentation":"<p>Container for parameters required to enable all machine learning features.</p>"
@@ -1314,6 +1352,10 @@
         "NaturalLanguageQueryGenerationOptions":{
           "shape":"NaturalLanguageQueryGenerationOptionsOutput",
           "documentation":"<p>Container for parameters required for natural language query generation on the specified domain.</p>"
+        },
+        "S3VectorsEngine":{
+          "shape":"S3VectorsEngine",
+          "documentation":"<p>Container for parameters representing the state of S3 vectors engine features on the specified domain.</p>"
         }
       },
       "documentation":"<p>Container for parameters representing the state of machine learning features on the specified domain.</p>"
@@ -1388,8 +1430,7 @@
     },
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred because you don't have permissions to access the resource.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -1593,6 +1634,10 @@
           "shape":"JWTOptionsOutput",
           "documentation":"<p>Container for information about the JWT configuration of the Amazon OpenSearch Service.</p>"
         },
+        "IAMFederationOptions":{
+          "shape":"IAMFederationOptionsOutput",
+          "documentation":"<p>Configuration options for IAM identity federation in advanced security settings.</p>"
+        },
         "AnonymousAuthDisableDate":{
           "shape":"DisableTimestamp",
           "documentation":"<p>Date and time when the migration period will be disabled. Only necessary when <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-enabling-existing\">enabling fine-grained access control on an existing domain</a>.</p>"
@@ -1627,6 +1672,10 @@
           "shape":"JWTOptionsInput",
           "documentation":"<p>Container for information about the JWT configuration of the Amazon OpenSearch Service. </p>"
         },
+        "IAMFederationOptions":{
+          "shape":"IAMFederationOptionsInput",
+          "documentation":"<p>Input configuration for IAM identity federation within advanced security options.</p>"
+        },
         "AnonymousAuthEnabled":{
           "shape":"Boolean",
           "documentation":"<p>True to enable a 30-day migration period during which administrators can create role mappings. Only necessary when <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-enabling-existing\">enabling fine-grained access control on an existing domain</a>.</p>"
@@ -1657,14 +1706,14 @@
       "members":{
         "key":{
           "shape":"AppConfigType",
-          "documentation":"<p>Specify the item to configure, such as admin role for the OpenSearch Application.</p>"
+          "documentation":"<p>The configuration item to set, such as the admin role for the OpenSearch application.</p>"
         },
         "value":{
           "shape":"AppConfigValue",
-          "documentation":"<p>Specifies the value to configure for the key, such as an IAM user ARN.</p>"
+          "documentation":"<p>The value assigned to the configuration key, such as an IAM user ARN.</p>"
         }
       },
-      "documentation":"<p>Configurations of the OpenSearch Application.</p>"
+      "documentation":"<p>Configuration settings for an OpenSearch application. For more information, see see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/application.html\">Using the OpenSearch user interface in Amazon OpenSearch Service</a>.</p>"
     },
     "AppConfigType":{
       "type":"string",
@@ -1712,31 +1761,31 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier for an OpenSearch application.</p>"
+          "documentation":"<p>The unique identifier of an OpenSearch application.</p>"
         },
         "arn":{"shape":"ARN"},
         "name":{
           "shape":"ApplicationName",
-          "documentation":"<p>Name of an OpenSearch Application.</p>"
+          "documentation":"<p>The name of an OpenSearch application.</p>"
         },
         "endpoint":{
           "shape":"String",
-          "documentation":"<p>Endpoint URL of an OpenSearch Application.</p>"
+          "documentation":"<p>The endpoint URL of an OpenSearch application.</p>"
         },
         "status":{
           "shape":"ApplicationStatus",
-          "documentation":"<p>Status of an OpenSearch Application. Possible values are <code>CREATING</code>, <code>UPDATING</code>,<code> DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>"
+          "documentation":"<p>The current status of an OpenSearch application. Possible values: <code>CREATING</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which an OpenSearch Application was created.</p>"
+          "documentation":"<p>The timestamp when an OpenSearch application was created.</p>"
         },
         "lastUpdatedAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which an OpenSearch Application was last updated.</p>"
+          "documentation":"<p>The timestamp of the last update to an OpenSearch application.</p>"
         }
       },
-      "documentation":"<p>Basic information of the OpenSearch Application.</p>"
+      "documentation":"<p>Basic details of an OpenSearch application.</p>"
     },
     "AssociatePackageRequest":{
       "type":"structure",
@@ -2474,8 +2523,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred because the client attempts to remove a resource that is currently in use.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -2521,24 +2569,24 @@
       "members":{
         "clientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>A unique client idempotency token. It will be auto generated if not provided.</p>",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
           "idempotencyToken":true
         },
         "name":{
           "shape":"ApplicationName",
-          "documentation":"<p>Name of the OpenSearch Appication to create. Application names are unique across the applications owned by an account within an Amazon Web Services Region.</p>"
+          "documentation":"<p>The unique name of the OpenSearch application. Names must be unique within an Amazon Web Services Region for each account.</p>"
         },
         "dataSources":{
           "shape":"DataSources",
-          "documentation":"<p>Data sources to be associated with the OpenSearch Application.</p>"
+          "documentation":"<p>The data sources to link to the OpenSearch application.</p>"
         },
         "iamIdentityCenterOptions":{
           "shape":"IamIdentityCenterOptionsInput",
-          "documentation":"<p>Settings of IAM Identity Center for the OpenSearch Application.</p>"
+          "documentation":"<p>Configuration settings for integrating Amazon Web Services IAM Identity Center with the OpenSearch application.</p>"
         },
         "appConfigs":{
           "shape":"AppConfigs",
-          "documentation":"<p>Configurations of the OpenSearch Application, inlcuding admin configuration.</p>"
+          "documentation":"<p>Configuration settings for the OpenSearch application, including administrative options.</p>"
         },
         "tagList":{"shape":"TagList"}
       }
@@ -2548,29 +2596,29 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier for the created OpenSearch Application.</p>"
+          "documentation":"<p>The unique identifier assigned to the OpenSearch application.</p>"
         },
         "name":{
           "shape":"ApplicationName",
-          "documentation":"<p>Name of the created OpenSearch Application.</p>"
+          "documentation":"<p>The name of the OpenSearch application.</p>"
         },
         "arn":{"shape":"ARN"},
         "dataSources":{
           "shape":"DataSources",
-          "documentation":"<p>Data sources associated with the created OpenSearch Application.</p>"
+          "documentation":"<p>The data sources linked to the OpenSearch application.</p>"
         },
         "iamIdentityCenterOptions":{
           "shape":"IamIdentityCenterOptions",
-          "documentation":"<p>Settings of IAM Identity Center for the created OpenSearch Application.</p>"
+          "documentation":"<p>The IAM Identity Center settings configured for the OpenSearch application.</p>"
         },
         "appConfigs":{
           "shape":"AppConfigs",
-          "documentation":"<p>Configurations of the OpenSearch Application, inlcuding admin configuration.</p>"
+          "documentation":"<p>Configuration settings for the OpenSearch application, including administrative options.</p>"
         },
         "tagList":{"shape":"TagList"},
         "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp when the OpenSearch Application was created.</p>"
+          "documentation":"<p>The timestamp indicating when the OpenSearch application was created.</p>"
         }
       }
     },
@@ -2640,7 +2688,7 @@
         },
         "IdentityCenterOptions":{
           "shape":"IdentityCenterOptionsInput",
-          "documentation":"<p>Options for IAM Identity Center Option control for the domain.</p>"
+          "documentation":"<p>Configuration options for enabling and managing IAM Identity Center integration within a domain.</p>"
         },
         "TagList":{
           "shape":"TagList",
@@ -2843,7 +2891,7 @@
           "documentation":"<p>Detailed description of a data source.</p>"
         }
       },
-      "documentation":"<p>Data sources that are associated with an OpenSearch Application. </p>"
+      "documentation":"<p>Data sources that are associated with an OpenSearch application. </p>"
     },
     "DataSourceDescription":{
       "type":"string",
@@ -2910,7 +2958,7 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier for the OpenSearch Application that you want to delete.</p>",
+          "documentation":"<p>The unique identifier of the OpenSearch application to delete.</p>",
           "location":"uri",
           "locationName":"id"
         }
@@ -2918,8 +2966,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDataSourceRequest":{
       "type":"structure",
@@ -3081,8 +3128,7 @@
     },
     "DependencyFailureException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for when a failure in one of the dependencies results in the service being unable to fetch details about the resource.</p>",
       "error":{"httpStatusCode":424},
       "exception":true
@@ -3722,8 +3768,7 @@
     "DisableTimestamp":{"type":"timestamp"},
     "DisabledOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occured because the client wanted to access an unsupported operation.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -3850,7 +3895,7 @@
         },
         "IdentityCenterOptions":{
           "shape":"IdentityCenterOptionsStatus",
-          "documentation":"<p>Container for IAM Identity Center Option control for the domain.</p>"
+          "documentation":"<p>Configuration options for enabling and managing IAM Identity Center integration within a domain.</p>"
         },
         "AutoTuneOptions":{
           "shape":"AutoTuneOptionsStatus",
@@ -4036,7 +4081,7 @@
         },
         "NodeType":{
           "shape":"NodeType",
-          "documentation":"<p>Indicates whether the nodes is a data, master, or ultrawarm node.</p>"
+          "documentation":"<p>Indicates whether the nodes is a data, master, or UltraWarm node.</p>"
         },
         "AvailabilityZone":{
           "shape":"AvailabilityZone",
@@ -4056,7 +4101,7 @@
         },
         "StorageVolumeType":{
           "shape":"VolumeType",
-          "documentation":"<p>If the nodes has EBS storage, indicates if the volume type is GP2 or GP3. Only applicable for data nodes. </p>"
+          "documentation":"<p>If the nodes has EBS storage, indicates if the volume type is gp2 or gp3. Only applicable for data nodes. </p>"
         },
         "StorageSize":{
           "shape":"VolumeSize",
@@ -4269,7 +4314,7 @@
         },
         "IdentityCenterOptions":{
           "shape":"IdentityCenterOptions",
-          "documentation":"<p>Container for IAM Identity Center Option control for the domain.</p>"
+          "documentation":"<p>Configuration options for controlling IAM Identity Center integration within a domain.</p>"
         },
         "AutoTuneOptions":{
           "shape":"AutoTuneOptionsOutput",
@@ -4542,7 +4587,7 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier of the checked OpenSearch Application.</p>",
+          "documentation":"<p>The unique identifier of the OpenSearch application to retrieve.</p>",
           "location":"uri",
           "locationName":"id"
         }
@@ -4553,40 +4598,40 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier of the checked OpenSearch Application.</p>"
+          "documentation":"<p>The unique identifier of the OpenSearch application.</p>"
         },
         "arn":{"shape":"ARN"},
         "name":{
           "shape":"ApplicationName",
-          "documentation":"<p>Name of the checked OpenSearch Application.</p>"
+          "documentation":"<p>The name of the OpenSearch application.</p>"
         },
         "endpoint":{
           "shape":"String",
-          "documentation":"<p>Endpoint URL of the checked OpenSearch Application.</p>"
+          "documentation":"<p>The endpoint URL of the OpenSearch application.</p>"
         },
         "status":{
           "shape":"ApplicationStatus",
-          "documentation":"<p>Current status of the checked OpenSearch Application. Possible values are <code>CREATING</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>"
+          "documentation":"<p>The current status of the OpenSearch application. Possible values: <code>CREATING</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>"
         },
         "iamIdentityCenterOptions":{
           "shape":"IamIdentityCenterOptions",
-          "documentation":"<p>IAM Identity Center settings for the checked OpenSearch Application.</p>"
+          "documentation":"<p>The IAM Identity Center settings configured for the OpenSearch application.</p>"
         },
         "dataSources":{
           "shape":"DataSources",
-          "documentation":"<p>Associated data sources to the checked OpenSearch Application.</p>"
+          "documentation":"<p>The data sources associated with the OpenSearch application.</p>"
         },
         "appConfigs":{
           "shape":"AppConfigs",
-          "documentation":"<p>App configurations of the checked OpenSearch Application.</p>"
+          "documentation":"<p>The configuration settings of the OpenSearch application.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which the checked OpenSearch Application was created.</p>"
+          "documentation":"<p>The timestamp when the OpenSearch application was created.</p>"
         },
         "lastUpdatedAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which the checked OpenSearch Application was last updated.</p>"
+          "documentation":"<p>The timestamp of the last update to the OpenSearch application.</p>"
         }
       }
     },
@@ -4656,6 +4701,16 @@
       },
       "documentation":"<p>The result of a <code>GetDataSource</code> operation.</p>"
     },
+    "GetDefaultApplicationSettingRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "GetDefaultApplicationSettingResponse":{
+      "type":"structure",
+      "members":{
+        "applicationArn":{"shape":"ARN"}
+      }
+    },
     "GetDirectQueryDataSourceRequest":{
       "type":"structure",
       "required":["DataSourceName"],
@@ -4859,6 +4914,54 @@
       "documentation":"<p>Container for the response returned by the <code>GetUpgradeStatus</code> operation.</p>"
     },
     "HostedZoneId":{"type":"string"},
+    "IAMFederationOptionsInput":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether IAM identity federation is enabled for the OpenSearch domain.</p>"
+        },
+        "SubjectKey":{
+          "shape":"IAMFederationSubjectKey",
+          "documentation":"<p>The key in the SAML assertion that contains the user's subject identifier.</p>"
+        },
+        "RolesKey":{
+          "shape":"IAMFederationRolesKey",
+          "documentation":"<p>The key in the SAML assertion that contains the user's role information.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for configuring IAM identity federation settings.</p>"
+    },
+    "IAMFederationOptionsOutput":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether IAM identity federation is currently enabled for the domain.</p>"
+        },
+        "SubjectKey":{
+          "shape":"IAMFederationSubjectKey",
+          "documentation":"<p>The configured key in the SAML assertion for the user's subject identifier.</p>"
+        },
+        "RolesKey":{
+          "shape":"IAMFederationRolesKey",
+          "documentation":"<p>The configured key in the SAML assertion for the user's role information.</p>"
+        }
+      },
+      "documentation":"<p>Output parameters showing the current IAM identity federation configuration.</p>"
+    },
+    "IAMFederationRolesKey":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"^(null|[A-Za-z][A-Za-z0-9_.:/=+\\-@]*)$"
+    },
+    "IAMFederationSubjectKey":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"^(null|[A-Za-z][A-Za-z0-9_.:/=+\\-@]*)$"
+    },
     "IPAddressType":{
       "type":"string",
       "enum":[
@@ -4886,31 +4989,31 @@
       "members":{
         "enabled":{
           "shape":"Boolean",
-          "documentation":"<p>IAM Identity Center is enabled for the OpenSearch Application.</p>"
+          "documentation":"<p>Indicates whether IAM Identity Center is enabled for the OpenSearch application.</p>"
         },
         "iamIdentityCenterInstanceArn":{"shape":"ARN"},
         "iamRoleForIdentityCenterApplicationArn":{
           "shape":"RoleArn",
-          "documentation":"<p>Amazon Resource Name of the IAM Identity Center's Application created for the OpenSearch Application after enabling IAM Identity Center.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role assigned to the IAM Identity Center application for the OpenSearch application.</p>"
         },
         "iamIdentityCenterApplicationArn":{"shape":"ARN"}
       },
-      "documentation":"<p>Settings for IAM Identity Center for an OpenSearch Application.</p>"
+      "documentation":"<p>Configuration settings for IAM Identity Center in an OpenSearch application.</p>"
     },
     "IamIdentityCenterOptionsInput":{
       "type":"structure",
       "members":{
         "enabled":{
           "shape":"Boolean",
-          "documentation":"<p>Enable/disable settings for IAM Identity Center.</p>"
+          "documentation":"<p>Specifies whether IAM Identity Center is enabled or disabled.</p>"
         },
         "iamIdentityCenterInstanceArn":{"shape":"ARN"},
         "iamRoleForIdentityCenterApplicationArn":{
           "shape":"RoleArn",
-          "documentation":"<p>Amazon Resource Name of IAM Identity Center's application.</p>"
+          "documentation":"<p>The ARN of the IAM role associated with the IAM Identity Center application.</p>"
         }
       },
-      "documentation":"<p>Settings for IAM Identity Center.</p>"
+      "documentation":"<p>Configuration settings for enabling and managing IAM Identity Center.</p>"
     },
     "Id":{
       "type":"string",
@@ -4933,52 +5036,52 @@
       "members":{
         "EnabledAPIAccess":{
           "shape":"Boolean",
-          "documentation":"<p>True to enable IAM Identity Center for API access in Amazon OpenSearch Service.</p>"
+          "documentation":"<p>Indicates whether IAM Identity Center is enabled for the application.</p>"
         },
         "IdentityCenterInstanceARN":{
           "shape":"IdentityCenterInstanceARN",
-          "documentation":"<p>The ARN for IAM Identity Center Instance.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Identity Center instance.</p>"
         },
         "SubjectKey":{
           "shape":"SubjectKeyIdCOption",
-          "documentation":"<p>Specify the attribute that contains the subject (username, userID, email) of IAM Identity Center.</p>"
+          "documentation":"<p>Specifies the attribute that contains the subject identifier (such as username, user ID, or email) in IAM Identity Center.</p>"
         },
         "RolesKey":{
           "shape":"RolesKeyIdCOption",
-          "documentation":"<p>Specify the attribute that contains the backend role (groupName, groupID) of IAM Identity Center</p>"
+          "documentation":"<p>Specifies the attribute that contains the backend role identifier (such as group name or group ID) in IAM Identity Center.</p>"
         },
         "IdentityCenterApplicationARN":{
           "shape":"IdentityCenterApplicationARN",
-          "documentation":"<p>The ARN for IAM Identity Center Application which will integrate with Amazon OpenSearch Service.</p>"
+          "documentation":"<p>The ARN of the IAM Identity Center application that integrates with Amazon OpenSearch Service.</p>"
         },
         "IdentityStoreId":{
           "shape":"IdentityStoreId",
-          "documentation":"<p>The ID of IAM Identity Store.</p>"
+          "documentation":"<p>The identifier of the IAM Identity Store.</p>"
         }
       },
-      "documentation":"<p>Container for IAM Identity Center Options settings.</p>"
+      "documentation":"<p>Settings container for integrating IAM Identity Center with OpenSearch UI applications, which enables enabling secure user authentication and access control across multiple data sources. This setup supports single sign-on (SSO) through IAM Identity Center, allowing centralized user management.</p>"
     },
     "IdentityCenterOptionsInput":{
       "type":"structure",
       "members":{
         "EnabledAPIAccess":{
           "shape":"Boolean",
-          "documentation":"<p>True to enable IAM Identity Center for API access in Amazon OpenSearch Service.</p>"
+          "documentation":"<p>Indicates whether IAM Identity Center is enabled for API access in Amazon OpenSearch Service.</p>"
         },
         "IdentityCenterInstanceARN":{
           "shape":"IdentityCenterInstanceARN",
-          "documentation":"<p>The ARN for IAM Identity Center Instance which will be used for IAM Identity Center Application creation.</p>"
+          "documentation":"<p>The ARN of the IAM Identity Center instance used to create an OpenSearch UI application that uses IAM Identity Center for authentication.</p>"
         },
         "SubjectKey":{
           "shape":"SubjectKeyIdCOption",
-          "documentation":"<p>Specify the attribute that contains the subject (username, userID, email) of IAM Identity Center.</p>"
+          "documentation":"<p>Specifies the attribute that contains the subject identifier (such as username, user ID, or email) in IAM Identity Center.</p>"
         },
         "RolesKey":{
           "shape":"RolesKeyIdCOption",
-          "documentation":"<p>Specify the attribute that contains the backend role (groupName, groupID) of IAM Identity Center</p>"
+          "documentation":"<p>Specifies the attribute that contains the backend role identifier (such as group name or group ID) in IAM Identity Center.</p>"
         }
       },
-      "documentation":"<p>Container for IAM Identity Center Options settings.</p>"
+      "documentation":"<p>Configuration settings for enabling and managing IAM Identity Center.</p>"
     },
     "IdentityCenterOptionsStatus":{
       "type":"structure",
@@ -4989,14 +5092,14 @@
       "members":{
         "Options":{
           "shape":"IdentityCenterOptions",
-          "documentation":"<p>Container for IAM Identity Center Options settings.</p>"
+          "documentation":"<p>Configuration settings for IAM Identity Center integration.</p>"
         },
         "Status":{
           "shape":"OptionStatus",
-          "documentation":"<p>The status of IAM Identity Center Options settings for a domain.</p>"
+          "documentation":"<p>The status of IAM Identity Center configuration settings for a domain.</p>"
         }
       },
-      "documentation":"<p>The status of IAM Identity Center Options settings for a domain.</p>"
+      "documentation":"<p>The status of IAM Identity Center configuration settings for a domain.</p>"
     },
     "IdentityPoolId":{
       "type":"string",
@@ -5160,24 +5263,21 @@
     "IntegerClass":{"type":"integer"},
     "InternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request processing failed because of an unknown error, exception, or internal failure.</p>",
       "error":{"httpStatusCode":500},
       "exception":true
     },
     "InvalidPaginationTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request processing failed because you provided an invalid pagination token.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
     "InvalidTypeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for trying to create or access a sub-resource that's either invalid or not supported.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -5260,8 +5360,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for trying to create more than the allowed number of resources or sub-resources.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -5306,7 +5405,7 @@
         },
         "statuses":{
           "shape":"ApplicationStatuses",
-          "documentation":"<p>OpenSearch Application Status can be used as filters for the listing request. Possible values are <code>CREATING</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>",
+          "documentation":"<p>Filters the list of OpenSearch applications by status. Possible values: <code>CREATING</code>, <code>UPDATING</code>, <code>DELETING</code>, <code>FAILED</code>, <code>ACTIVE</code>, and <code>DELETED</code>.</p>",
           "location":"querystring",
           "locationName":"statuses"
         },
@@ -5322,7 +5421,7 @@
       "members":{
         "ApplicationSummaries":{
           "shape":"ApplicationSummaries",
-          "documentation":"<p>Summary of the OpenSearch Applications, including ID, ARN, name, endpoint, status, create time and last update time.</p>"
+          "documentation":"<p>Summarizes OpenSearch applications, including ID, ARN, name, endpoint, status, creation time, and last update time.</p>"
         },
         "nextToken":{"shape":"NextToken"}
       }
@@ -5955,18 +6054,18 @@
       "members":{
         "Enabled":{
           "shape":"Boolean",
-          "documentation":"<p>A boolean that indicates whether a particular node type is enabled or not.</p>"
+          "documentation":"<p>A boolean value indicating whether a specific node type is active or inactive.</p>"
         },
         "Type":{
           "shape":"OpenSearchPartitionInstanceType",
-          "documentation":"<p>The instance type of a particular node type in the cluster.</p>"
+          "documentation":"<p>The instance type of a particular node within the cluster.</p>"
         },
         "Count":{
           "shape":"IntegerClass",
-          "documentation":"<p>The number of nodes of a particular node type in the cluster.</p>"
+          "documentation":"<p>The number of nodes of a specific type within the cluster.</p>"
         }
       },
-      "documentation":"<p>Container for specifying configuration of any node type.</p>"
+      "documentation":"<p>Configuration options for defining the setup of any node type within the cluster.</p>"
     },
     "NodeId":{
       "type":"string",
@@ -5978,14 +6077,14 @@
       "members":{
         "NodeType":{
           "shape":"NodeOptionsNodeType",
-          "documentation":"<p>Container for node type like coordinating.</p>"
+          "documentation":"<p>Defines the type of node, such as coordinating nodes.</p>"
         },
         "NodeConfig":{
           "shape":"NodeConfig",
-          "documentation":"<p>Container for specifying configuration of any node type.</p>"
+          "documentation":"<p>Configuration options for defining the setup of any node type.</p>"
         }
       },
-      "documentation":"<p>Container for specifying node type.</p>"
+      "documentation":"<p>Configuration settings for defining the node type within a cluster.</p>"
     },
     "NodeOptionsList":{
       "type":"list",
@@ -6431,7 +6530,7 @@
         },
         "PackageOwner":{
           "shape":"PackageOwner",
-          "documentation":"<p>The owner of the package who is allowed to create/update a package and add users to the package scope.</p>"
+          "documentation":"<p>The owner of the package who is allowed to create and update a package and add users to the package scope.</p>"
         },
         "PackageVendingOptions":{
           "shape":"PackageVendingOptions",
@@ -6439,7 +6538,7 @@
         },
         "PackageEncryptionOptions":{
           "shape":"PackageEncryptionOptions",
-          "documentation":"<p>Package Encryption Options for a package.</p>"
+          "documentation":"<p>Encryption options for a package.</p>"
         }
       },
       "documentation":"<p>Basic information about a package.</p>"
@@ -6454,7 +6553,7 @@
         },
         "PrerequisitePackageIDList":{
           "shape":"PackageIDList",
-          "documentation":"<p>List of package IDs that must be associated with the domain with or before the package can be associated.</p>"
+          "documentation":"<p>List of package IDs that must be linked to the domain before or simultaneously with the package association.</p>"
         },
         "AssociationConfiguration":{
           "shape":"PackageAssociationConfiguration",
@@ -6477,11 +6576,11 @@
       "members":{
         "KmsKeyIdentifier":{
           "shape":"KmsKeyId",
-          "documentation":"<p> KMS key ID for encrypting the package.</p>"
+          "documentation":"<p>KMS key ID for encrypting the package.</p>"
         },
         "EncryptionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>This indicates whether encryption is enabled for the package.</p>"
+          "documentation":"<p>Whether encryption is enabled for the package.</p>"
         }
       },
       "documentation":"<p>Encryption options for a package.</p>"
@@ -6564,10 +6663,10 @@
       "members":{
         "VendingEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>This indicates whether vending is enabled for the package to determine if package can be used by other users. </p>"
+          "documentation":"<p>Indicates whether the package vending feature is enabled, allowing the package to be used by other users.</p>"
         }
       },
-      "documentation":"<p>The vending options for a package to determine if the package can be used by other users. </p>"
+      "documentation":"<p>Configuration options for determining whether a package can be made available for use by other users.</p>"
     },
     "PackageVersion":{"type":"string"},
     "PackageVersionHistory":{
@@ -6706,6 +6805,26 @@
       },
       "documentation":"<p>Represents the output of a <code>PurchaseReservedInstanceOffering</code> operation.</p>"
     },
+    "PutDefaultApplicationSettingRequest":{
+      "type":"structure",
+      "required":[
+        "applicationArn",
+        "setAsDefault"
+      ],
+      "members":{
+        "applicationArn":{"shape":"ARN"},
+        "setAsDefault":{
+          "shape":"Boolean",
+          "documentation":"<p>Set to true to set the specified ARN as the default application. Set to false to clear the default application.</p>"
+        }
+      }
+    },
+    "PutDefaultApplicationSettingResponse":{
+      "type":"structure",
+      "members":{
+        "applicationArn":{"shape":"ARN"}
+      }
+    },
     "RecurringCharge":{
       "type":"structure",
       "members":{
@@ -6910,16 +7029,14 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for creating a resource that already exists.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for accessing or deleting a resource that doesn't exist.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -6946,8 +7063,7 @@
     },
     "RevokeVpcEndpointAccessResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RoleArn":{
       "type":"string",
@@ -6995,6 +7111,16 @@
       "max":1024,
       "min":1
     },
+    "S3VectorsEngine":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables S3 vectors engine features.</p>"
+        }
+      },
+      "documentation":"<p>Options for enabling S3 vectors engine features on the specified domain.</p>"
+    },
     "SAMLEntityId":{
       "type":"string",
       "max":512,
@@ -7526,17 +7652,17 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier of the OpenSearch Application to be updated.</p>",
+          "documentation":"<p>The unique identifier for the OpenSearch application to be updated.</p>",
           "location":"uri",
           "locationName":"id"
         },
         "dataSources":{
           "shape":"DataSources",
-          "documentation":"<p>Data sources to be associated with the OpenSearch Application.</p>"
+          "documentation":"<p>The data sources to associate with the OpenSearch application.</p>"
         },
         "appConfigs":{
           "shape":"AppConfigs",
-          "documentation":"<p>Configurations to be changed for the OpenSearch Application.</p>"
+          "documentation":"<p>The configuration settings to modify for the OpenSearch application.</p>"
         }
       }
     },
@@ -7545,32 +7671,32 @@
       "members":{
         "id":{
           "shape":"Id",
-          "documentation":"<p>Unique identifier of the updated OpenSearch Application.</p>"
+          "documentation":"<p>The unique identifier of the updated OpenSearch application.</p>"
         },
         "name":{
           "shape":"ApplicationName",
-          "documentation":"<p>Name of the updated OpenSearch Application.</p>"
+          "documentation":"<p>The name of the updated OpenSearch application.</p>"
         },
         "arn":{"shape":"ARN"},
         "dataSources":{
           "shape":"DataSources",
-          "documentation":"<p>Data sources associated with the updated OpenSearch Application.</p>"
+          "documentation":"<p>The data sources associated with the updated OpenSearch application.</p>"
         },
         "iamIdentityCenterOptions":{
           "shape":"IamIdentityCenterOptions",
-          "documentation":"<p>IAM Identity Center settings for the updated OpenSearch Application.</p>"
+          "documentation":"<p>The IAM Identity Center configuration for the updated OpenSearch application.</p>"
         },
         "appConfigs":{
           "shape":"AppConfigs",
-          "documentation":"<p>Configurations for the updated OpenSearch Application.</p>"
+          "documentation":"<p>The configuration settings for the updated OpenSearch application.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which the OpenSearch Application was created.</p>"
+          "documentation":"<p>The timestamp when the OpenSearch application was originally created.</p>"
         },
         "lastUpdatedAt":{
           "shape":"Timestamp",
-          "documentation":"<p>Timestamp at which the OpenSearch Application was last updated.</p>"
+          "documentation":"<p>The timestamp when the OpenSearch application was last updated.</p>"
         }
       }
     },
@@ -8113,8 +8239,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for accessing or deleting a resource that doesn't exist.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/service-2.json 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2021-11-01",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"aoss",
     "jsonVersion":"1.0",
     "protocol":"json",
@@ -11,8 +12,7 @@
     "signatureVersion":"v4",
     "signingName":"aoss",
     "targetPrefix":"OpenSearchServerless",
-    "uid":"opensearchserverless-2021-11-01",
-    "auth":["aws.auth#sigv4"]
+    "uid":"opensearchserverless-2021-11-01"
   },
   "operations":{
     "BatchGetCollection":{
@@ -27,7 +27,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Returns attributes for one or more collections, including the collection endpoint and the OpenSearch Dashboards endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html\">Creating and managing Amazon OpenSearch Serverless collections</a>.</p>"
+      "documentation":"<p>Returns attributes for one or more collections, including the collection endpoint, the OpenSearch Dashboards endpoint, and FIPS-compliant endpoints. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html\">Creating and managing Amazon OpenSearch Serverless collections</a>.</p>"
     },
     "BatchGetEffectiveLifecyclePolicy":{
       "name":"BatchGetEffectiveLifecyclePolicy",
@@ -97,8 +97,8 @@
       "input":{"shape":"CreateCollectionRequest"},
       "output":{"shape":"CreateCollectionResponse"},
       "errors":[
-        {"shape":"OcuLimitExceededException"},
         {"shape":"InternalServerException"},
+        {"shape":"OcuLimitExceededException"},
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
@@ -106,6 +106,23 @@
       "documentation":"<p>Creates a new OpenSearch Serverless collection. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html\">Creating and managing Amazon OpenSearch Serverless collections</a>.</p>",
       "idempotent":true
     },
+    "CreateIndex":{
+      "name":"CreateIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateIndexRequest"},
+      "output":{"shape":"CreateIndexResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates an index within an OpenSearch Serverless collection. Unlike other OpenSearch indexes, indexes created by this API are automatically configured to conduct automatic semantic enrichment ingestion and search. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-semantic-enrichment\">About automatic semantic enrichment</a> in the <i>OpenSearch User Guide</i>.</p>",
+      "idempotent":true
+    },
     "CreateLifecyclePolicy":{
       "name":"CreateLifecyclePolicy",
       "http":{
@@ -137,7 +154,7 @@
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Specifies a security configuration for OpenSearch Serverless. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html\">SAML authentication for Amazon OpenSearch Serverless</a>. </p>",
+      "documentation":"<p>Specifies a security configuration for OpenSearch Serverless. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html\">SAML authentication for Amazon OpenSearch Serverless</a>.</p>",
       "idempotent":true
     },
     "CreateSecurityPolicy":{
@@ -184,8 +201,8 @@
       "output":{"shape":"DeleteAccessPolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes an OpenSearch Serverless access policy. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html\">Data access control for Amazon OpenSearch Serverless</a>.</p>",
@@ -201,13 +218,29 @@
       "output":{"shape":"DeleteCollectionResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes an OpenSearch Serverless collection. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html\">Creating and managing Amazon OpenSearch Serverless collections</a>.</p>",
       "idempotent":true
     },
+    "DeleteIndex":{
+      "name":"DeleteIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteIndexRequest"},
+      "output":{"shape":"DeleteIndexResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes an index from an OpenSearch Serverless collection. Be aware that the index might be configured to conduct automatic semantic enrichment ingestion and search. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-semantic-enrichment\">About automatic semantic enrichment</a>.</p>",
+      "idempotent":true
+    },
     "DeleteLifecyclePolicy":{
       "name":"DeleteLifecyclePolicy",
       "http":{
@@ -218,8 +251,8 @@
       "output":{"shape":"DeleteLifecyclePolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes an OpenSearch Serverless lifecycle policy. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-lifecycle.html#serverless-lifecycle-delete\">Deleting data lifecycle policies</a>.</p>",
@@ -235,8 +268,8 @@
       "output":{"shape":"DeleteSecurityConfigResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes a security configuration for OpenSearch Serverless. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html\">SAML authentication for Amazon OpenSearch Serverless</a>.</p>",
@@ -252,8 +285,8 @@
       "output":{"shape":"DeleteSecurityPolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes an OpenSearch Serverless security policy.</p>",
@@ -269,8 +302,8 @@
       "output":{"shape":"DeleteVpcEndpointResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Deletes an OpenSearch Serverless-managed interface endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html\">Access Amazon OpenSearch Serverless using an interface endpoint</a>.</p>",
@@ -305,6 +338,21 @@
       ],
       "documentation":"<p>Returns account-level settings related to OpenSearch Serverless.</p>"
     },
+    "GetIndex":{
+      "name":"GetIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetIndexRequest"},
+      "output":{"shape":"GetIndexResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about an index in an OpenSearch Serverless collection, including its schema definition. The index might be configured to conduct automatic semantic enrichment ingestion and search. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-semantic-enrichment\">About automatic semantic enrichment</a>.</p>"
+    },
     "GetPoliciesStats":{
       "name":"GetPoliciesStats",
       "http":{
@@ -457,8 +505,8 @@
       "output":{"shape":"TagResourceResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
@@ -474,8 +522,8 @@
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Removes a tag or set of tags from an OpenSearch Serverless resource. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/tag-collection.html\">Tagging Amazon OpenSearch Serverless collections</a>.</p>"
@@ -490,8 +538,8 @@
       "output":{"shape":"UpdateAccessPolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Updates an OpenSearch Serverless access policy. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html\">Data access control for Amazon OpenSearch Serverless</a>.</p>",
@@ -527,6 +575,22 @@
       "documentation":"<p>Updates an OpenSearch Serverless collection.</p>",
       "idempotent":true
     },
+    "UpdateIndex":{
+      "name":"UpdateIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateIndexRequest"},
+      "output":{"shape":"UpdateIndexResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates an existing index in an OpenSearch Serverless collection. This operation allows you to modify the index schema, including adding new fields or changing field mappings. You can also enable automatic semantic enrichment ingestion and search. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-semantic-enrichment\">About automatic semantic enrichment</a>.</p>",
+      "idempotent":true
+    },
     "UpdateLifecyclePolicy":{
       "name":"UpdateLifecyclePolicy",
       "http":{
@@ -537,8 +601,8 @@
       "output":{"shape":"UpdateLifecyclePolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
@@ -555,8 +619,8 @@
       "output":{"shape":"UpdateSecurityConfigResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"}
       ],
       "documentation":"<p>Updates a security configuration for OpenSearch Serverless. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html\">SAML authentication for Amazon OpenSearch Serverless</a>.</p>",
@@ -572,8 +636,8 @@
       "output":{"shape":"UpdateSecurityPolicyResponse"},
       "errors":[
         {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
@@ -601,33 +665,33 @@
     "AccessPolicyDetail":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of access policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the policy.</p>"
+        },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the policy.</p>"
+        },
         "policy":{
           "shape":"Document",
           "documentation":"<p>The JSON policy document without any whitespaces.</p>"
         },
-        "policyVersion":{
-          "shape":"PolicyVersion",
-          "documentation":"<p>The version of the policy.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the policy was created.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of access policy.</p>"
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
         }
       },
       "documentation":"<p>Details about an OpenSearch Serverless access policy.</p>"
@@ -649,17 +713,9 @@
     "AccessPolicySummary":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The Epoch time when the access policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the access policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the collection was last modified.</p>"
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of access policy. Currently, the only available type is <code>data</code>.</p>"
         },
         "name":{
           "shape":"PolicyName",
@@ -669,9 +725,17 @@
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the policy.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of access policy. Currently, the only available type is <code>data</code>.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the access policy.</p>"
+        },
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The Epoch time when the access policy was created.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the collection was last modified.</p>"
         }
       },
       "documentation":"<p>A summary of the data access policy.</p>"
@@ -813,25 +877,57 @@
     "CollectionDetail":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>A unique identifier for the collection.</p>"
+        },
+        "name":{
+          "shape":"CollectionName",
+          "documentation":"<p>The name of the collection.</p>"
+        },
+        "status":{
+          "shape":"CollectionStatus",
+          "documentation":"<p>The current status of the collection.</p>"
+        },
+        "type":{
+          "shape":"CollectionType",
+          "documentation":"<p>The type of collection.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>A description of the collection.</p>"
+        },
         "arn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
         },
-        "collectionEndpoint":{
+        "kmsKeyArn":{
           "shape":"String",
-          "documentation":"<p>Collection-specific endpoint used to submit index, search, and data upload requests to an OpenSearch Serverless collection.</p>"
+          "documentation":"<p>The ARN of the Amazon Web Services KMS key used to encrypt the collection.</p>"
+        },
+        "standbyReplicas":{
+          "shape":"StandbyReplicas",
+          "documentation":"<p>Details about an OpenSearch Serverless collection.</p>"
         },
         "createdDate":{
           "shape":"Long",
           "documentation":"<p>The Epoch time when the collection was created.</p>"
         },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the collection was last modified.</p>"
+        },
+        "collectionEndpoint":{
+          "shape":"String",
+          "documentation":"<p>Collection-specific endpoint used to submit index, search, and data upload requests to an OpenSearch Serverless collection.</p>"
+        },
         "dashboardEndpoint":{
           "shape":"String",
           "documentation":"<p>Collection-specific endpoint used to access OpenSearch Dashboards.</p>"
         },
-        "description":{
-          "shape":"String",
-          "documentation":"<p>A description of the collection.</p>"
+        "fipsEndpoints":{
+          "shape":"FipsEndpoints",
+          "documentation":"<p>FIPS-compliant endpoints for the collection. These endpoints use FIPS 140-3 validated cryptographic modules and are required for federal government workloads that must comply with FedRAMP security standards.</p>"
         },
         "failureCode":{
           "shape":"String",
@@ -840,37 +936,9 @@
         "failureMessage":{
           "shape":"String",
           "documentation":"<p>A message associated with the failure code.</p>"
-        },
-        "id":{
-          "shape":"CollectionId",
-          "documentation":"<p>A unique identifier for the collection.</p>"
-        },
-        "kmsKeyArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the Amazon Web Services KMS key used to encrypt the collection.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the collection was last modified.</p>"
-        },
-        "name":{
-          "shape":"CollectionName",
-          "documentation":"<p>The name of the collection.</p>"
-        },
-        "standbyReplicas":{
-          "shape":"StandbyReplicas",
-          "documentation":"<p>Details about an OpenSearch Serverless collection.</p>"
-        },
-        "status":{
-          "shape":"CollectionStatus",
-          "documentation":"<p>The current status of the collection.</p>"
-        },
-        "type":{
-          "shape":"CollectionType",
-          "documentation":"<p>The type of collection.</p>"
         }
       },
-      "documentation":"<p>Details about each OpenSearch Serverless collection, including the collection endpoint and the OpenSearch Dashboards endpoint.</p>"
+      "documentation":"<p>Details about each OpenSearch Serverless collection, including the collection endpoint, the OpenSearch Dashboards endpoint, and FIPS-compliant endpoints for federal government workloads.</p>"
     },
     "CollectionDetails":{
       "type":"list",
@@ -879,14 +947,6 @@
     "CollectionErrorDetail":{
       "type":"structure",
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code for the request. For example, <code>NOT_FOUND</code>.</p>"
-        },
-        "errorMessage":{
-          "shape":"String",
-          "documentation":"<p>A description of the error. For example, <code>The specified Collection is not found.</code> </p>"
-        },
         "id":{
           "shape":"CollectionId",
           "documentation":"<p>If the request contains collection IDs, the response includes the IDs provided in the request.</p>"
@@ -894,6 +954,14 @@
         "name":{
           "shape":"CollectionName",
           "documentation":"<p>If the request contains collection names, the response includes the names provided in the request.</p>"
+        },
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A description of the error. For example, <code>The specified Collection is not found.</code> </p>"
+        },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>The error code for the request. For example, <code>NOT_FOUND</code>.</p>"
         }
       },
       "documentation":"<p>Error information for an OpenSearch Serverless request.</p>"
@@ -920,7 +988,7 @@
       "type":"string",
       "max":40,
       "min":3,
-      "pattern":"^[a-z0-9]{3,40}$"
+      "pattern":"[a-z0-9]{3,40}"
     },
     "CollectionIds":{
       "type":"list",
@@ -932,7 +1000,7 @@
       "type":"string",
       "max":32,
       "min":3,
-      "pattern":"^[a-z][a-z0-9-]+$"
+      "pattern":"[a-z][a-z0-9-]+"
     },
     "CollectionNames":{
       "type":"list",
@@ -956,10 +1024,6 @@
     "CollectionSummary":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
-        },
         "id":{
           "shape":"CollectionId",
           "documentation":"<p>The unique identifier of the collection.</p>"
@@ -971,6 +1035,10 @@
         "status":{
           "shape":"CollectionStatus",
           "documentation":"<p>The current status of the collection.</p>"
+        },
+        "arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
         }
       },
       "documentation":"<p>Details about each OpenSearch Serverless collection.</p>"
@@ -992,7 +1060,7 @@
       "type":"string",
       "max":32,
       "min":3,
-      "pattern":"^[a-z][a-z0-9-]+$"
+      "pattern":"[a-z][a-z0-9-]+"
     },
     "ConflictException":{
       "type":"structure",
@@ -1005,31 +1073,31 @@
     "CreateAccessPolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policy",
-        "type"
+        "policy"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        },
         "policy":{
           "shape":"PolicyDocument",
           "documentation":"<p>The JSON policy document to use as the content for the policy.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1045,45 +1113,45 @@
     "CreateCollectionDetail":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection.</p>"
         },
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The Epoch time when the collection was created.</p>"
+        "name":{
+          "shape":"CollectionName",
+          "documentation":"<p>The name of the collection.</p>"
+        },
+        "status":{
+          "shape":"CollectionStatus",
+          "documentation":"<p>The current status of the collection.</p>"
+        },
+        "type":{
+          "shape":"CollectionType",
+          "documentation":"<p>The type of collection.</p>"
         },
         "description":{
           "shape":"String",
           "documentation":"<p>A description of the collection.</p>"
         },
-        "id":{
-          "shape":"CollectionId",
-          "documentation":"<p>The unique identifier of the collection.</p>"
+        "arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
         },
         "kmsKeyArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key with which to encrypt the collection.</p>"
         },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the collection was last modified.</p>"
-        },
-        "name":{
-          "shape":"CollectionName",
-          "documentation":"<p>The name of the collection.</p>"
-        },
         "standbyReplicas":{
           "shape":"StandbyReplicas",
           "documentation":"<p>Creates details about an OpenSearch Serverless collection.</p>"
         },
-        "status":{
-          "shape":"CollectionStatus",
-          "documentation":"<p>The current status of the collection.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The Epoch time when the collection was created.</p>"
         },
-        "type":{
-          "shape":"CollectionType",
-          "documentation":"<p>The type of collection.</p>"
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the collection was last modified.</p>"
         }
       },
       "documentation":"<p>Details about the created OpenSearch Serverless collection.</p>"
@@ -1092,30 +1160,30 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"CollectionName",
+          "documentation":"<p>Name of the collection.</p>"
+        },
+        "type":{
+          "shape":"CollectionType",
+          "documentation":"<p>The type of collection.</p>"
         },
         "description":{
           "shape":"CreateCollectionRequestDescriptionString",
           "documentation":"<p>Description of the collection.</p>"
         },
-        "name":{
-          "shape":"CollectionName",
-          "documentation":"<p>Name of the collection.</p>"
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>An arbitrary set of tags (key–value pairs) to associate with the OpenSearch Serverless collection.</p>"
         },
         "standbyReplicas":{
           "shape":"StandbyReplicas",
           "documentation":"<p>Indicates whether standby replicas should be used for a collection.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>An arbitrary set of tags (key–value pairs) to associate with the OpenSearch Serverless collection.</p>"
-        },
-        "type":{
-          "shape":"CollectionType",
-          "documentation":"<p>The type of collection.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1137,10 +1205,6 @@
       "type":"structure",
       "required":["instanceArn"],
       "members":{
-        "groupAttribute":{
-          "shape":"IamIdentityCenterGroupAttribute",
-          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
-        },
         "instanceArn":{
           "shape":"IamIdentityCenterInstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance used to integrate with OpenSearch Serverless.</p>"
@@ -1148,38 +1212,67 @@
         "userAttribute":{
           "shape":"IamIdentityCenterUserAttribute",
           "documentation":"<p>The user attribute for this IAM Identity Center integration. Defaults to <code>UserId</code>.</p>"
+        },
+        "groupAttribute":{
+          "shape":"IamIdentityCenterGroupAttribute",
+          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
         }
       },
       "documentation":"<p>Describes IAM Identity Center options for creating an OpenSearch Serverless security configuration in the form of a key-value map.</p>"
     },
+    "CreateIndexRequest":{
+      "type":"structure",
+      "required":[
+        "id",
+        "indexName"
+      ],
+      "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection in which to create the index.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the index to create. Index names must be lowercase and can't begin with underscores (_) or hyphens (-).</p>"
+        },
+        "indexSchema":{
+          "shape":"IndexSchema",
+          "documentation":"<p>The JSON schema definition for the index, including field mappings and settings.</p>"
+        }
+      }
+    },
+    "CreateIndexResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "CreateLifecyclePolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policy",
-        "type"
+        "policy"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the lifecycle policy.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the lifecycle policy.</p>"
         },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the lifecycle policy.</p>"
+        },
         "policy":{
           "shape":"PolicyDocument",
           "documentation":"<p>The JSON policy document to use as the content for the lifecycle policy.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1195,34 +1288,38 @@
     "CreateSecurityConfigRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "type":{
+          "shape":"SecurityConfigType",
+          "documentation":"<p>The type of security configuration.</p>"
+        },
+        "name":{
+          "shape":"ConfigName",
+          "documentation":"<p>The name of the security configuration.</p>"
         },
         "description":{
           "shape":"ConfigDescription",
           "documentation":"<p>A description of the security configuration.</p>"
         },
+        "samlOptions":{
+          "shape":"SamlConfigOptions",
+          "documentation":"<p>Describes SAML options in in the form of a key-value map. This field is required if you specify <code>SAML</code> for the <code>type</code> parameter.</p>"
+        },
         "iamIdentityCenterOptions":{
           "shape":"CreateIamIdentityCenterConfigOptions",
           "documentation":"<p>Describes IAM Identity Center options in the form of a key-value map. This field is required if you specify iamidentitycenter for the type parameter.</p>"
         },
-        "name":{
-          "shape":"ConfigName",
-          "documentation":"<p>The name of the security configuration.</p>"
-        },
-        "samlOptions":{
-          "shape":"SamlConfigOptions",
-          "documentation":"<p>Describes SAML options in in the form of a key-value map. This field is required if you specify <code>saml</code> for the <code>type</code> parameter.</p>"
+        "iamFederationOptions":{
+          "shape":"IamFederationConfigOptions",
+          "documentation":"<p>Describes IAM federation options in the form of a key-value map. This field is required if you specify <code>iamFederation</code> for the <code>type</code> parameter.</p>"
         },
-        "type":{
-          "shape":"SecurityConfigType",
-          "documentation":"<p>The type of security configuration.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1231,38 +1328,38 @@
       "members":{
         "securityConfigDetail":{
           "shape":"SecurityConfigDetail",
-          "documentation":"<p>Details about the created security configuration. </p>"
+          "documentation":"<p>Details about the created security configuration.</p>"
         }
       }
     },
     "CreateSecurityPolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policy",
-        "type"
+        "policy"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of security policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        },
         "policy":{
           "shape":"PolicyDocument",
           "documentation":"<p>The JSON policy document to use as the content for the new policy.</p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of security policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1297,30 +1394,30 @@
       "type":"structure",
       "required":[
         "name",
-        "subnetIds",
-        "vpcId"
+        "vpcId",
+        "subnetIds"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
         "name":{
           "shape":"VpcEndpointName",
           "documentation":"<p>The name of the interface endpoint.</p>"
         },
-        "securityGroupIds":{
-          "shape":"SecurityGroupIds",
-          "documentation":"<p>The unique identifiers of the security groups that define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC from which you'll access OpenSearch Serverless.</p>"
         },
         "subnetIds":{
           "shape":"SubnetIds",
           "documentation":"<p>The ID of one or more subnets from which you'll access OpenSearch Serverless.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC from which you'll access OpenSearch Serverless.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>The unique identifiers of the security groups that define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1336,29 +1433,28 @@
     "DeleteAccessPolicyRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy to delete.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "DeleteAccessPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCollectionDetail":{
       "type":"structure",
@@ -1382,14 +1478,14 @@
       "type":"structure",
       "required":["id"],
       "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection. For example, <code>1iu5usc406kd</code>. The ID is part of the collection endpoint. You can also retrieve it using the <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html\">ListCollections</a> API.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
           "idempotencyToken":true
-        },
-        "id":{
-          "shape":"CollectionId",
-          "documentation":"<p>The unique identifier of the collection. For example, <code>1iu5usc406kd</code>. The ID is part of the collection endpoint. You can also retrieve it using the <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html\">ListCollections</a> API.</p>"
         }
       }
     },
@@ -1402,79 +1498,97 @@
         }
       }
     },
+    "DeleteIndexRequest":{
+      "type":"structure",
+      "required":[
+        "id",
+        "indexName"
+      ],
+      "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection containing the index to delete.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the index to delete.</p>"
+        }
+      }
+    },
+    "DeleteIndexResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteLifecyclePolicyRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy to delete.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "DeleteLifecyclePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSecurityConfigRequest":{
       "type":"structure",
       "required":["id"],
       "members":{
+        "id":{
+          "shape":"SecurityConfigId",
+          "documentation":"<p>The security configuration identifier. For SAML the ID will be <code>saml/&lt;accountId&gt;/&lt;idpProviderName&gt;</code>. For example, <code>saml/123456789123/OKTADev</code>.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
           "idempotencyToken":true
-        },
-        "id":{
-          "shape":"SecurityConfigId",
-          "documentation":"<p>The security configuration identifier. For SAML the ID will be <code>saml/&lt;accountId&gt;/&lt;idpProviderName&gt;</code>. For example, <code>saml/123456789123/OKTADev</code>.</p>"
         }
       }
     },
     "DeleteSecurityConfigResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSecurityPolicyRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy to delete.</p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of policy.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "DeleteSecurityPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVpcEndpointDetail":{
       "type":"structure",
@@ -1498,14 +1612,14 @@
       "type":"structure",
       "required":["id"],
       "members":{
+        "id":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>The VPC endpoint identifier.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
           "idempotencyToken":true
-        },
-        "id":{
-          "shape":"VpcEndpointId",
-          "documentation":"<p>The VPC endpoint identifier.</p>"
         }
       }
     },
@@ -1520,25 +1634,24 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "EffectiveLifecyclePolicyDetail":{
       "type":"structure",
       "members":{
-        "noMinRetentionPeriod":{
-          "shape":"Boolean",
-          "documentation":"<p>The minimum number of index retention days set. That is an optional param that will return as <code>true</code> if the minimum number of days or hours is not set to a index resource.</p>"
-        },
-        "policyName":{
-          "shape":"PolicyName",
-          "documentation":"<p>The name of the lifecycle policy.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "resource":{
           "shape":"Resource",
           "documentation":"<p>The name of the OpenSearch Serverless index resource.</p>"
         },
+        "policyName":{
+          "shape":"PolicyName",
+          "documentation":"<p>The name of the lifecycle policy.</p>"
+        },
         "resourceType":{
           "shape":"ResourceType",
           "documentation":"<p>The type of OpenSearch Serverless resource. Currently, the only supported resource is <code>index</code>.</p>"
@@ -1547,9 +1660,9 @@
           "shape":"String",
           "documentation":"<p>The minimum number of index retention in days or hours. This is an optional parameter that will return only if it’s set.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "noMinRetentionPeriod":{
+          "shape":"Boolean",
+          "documentation":"<p>The minimum number of index retention days set. That is an optional param that will return as <code>true</code> if the minimum number of days or hours is not set to a index resource.</p>"
         }
       },
       "documentation":"<p>Error information for an OpenSearch Serverless request.</p>"
@@ -1561,21 +1674,21 @@
     "EffectiveLifecyclePolicyErrorDetail":{
       "type":"structure",
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code for the request.</p>"
-        },
-        "errorMessage":{
-          "shape":"String",
-          "documentation":"<p>A description of the error. For example, <code>The specified Index resource is not found</code>.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "resource":{
           "shape":"Resource",
           "documentation":"<p>The name of OpenSearch Serverless index resource.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A description of the error. For example, <code>The specified Index resource is not found</code>.</p>"
+        },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>The error code for the request.</p>"
         }
       },
       "documentation":"<p>Error information for an OpenSearch Serverless request.</p>"
@@ -1584,20 +1697,34 @@
       "type":"list",
       "member":{"shape":"EffectiveLifecyclePolicyErrorDetail"}
     },
+    "FipsEndpoints":{
+      "type":"structure",
+      "members":{
+        "collectionEndpoint":{
+          "shape":"String",
+          "documentation":"<p>FIPS-compliant collection endpoint used to submit index, search, and data upload requests to an OpenSearch Serverless collection. This endpoint uses FIPS 140-3 validated cryptography and is required for federal government workloads.</p>"
+        },
+        "dashboardEndpoint":{
+          "shape":"String",
+          "documentation":"<p>FIPS-compliant endpoint used to access OpenSearch Dashboards. This endpoint uses FIPS 140-3 validated cryptography and is required for federal government workloads that need dashboard visualization capabilities.</p>"
+        }
+      },
+      "documentation":"<p>FIPS-compliant endpoint URLs for an OpenSearch Serverless collection. These endpoints ensure all data transmission uses FIPS 140-3 validated cryptographic implementations, meeting federal security requirements for government workloads.</p>"
+    },
     "GetAccessPolicyRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "name":{
-          "shape":"PolicyName",
-          "documentation":"<p>The name of the access policy.</p>"
-        },
         "type":{
           "shape":"AccessPolicyType",
           "documentation":"<p>Tye type of policy. Currently, the only supported value is <code>data</code>.</p>"
+        },
+        "name":{
+          "shape":"PolicyName",
+          "documentation":"<p>The name of the access policy.</p>"
         }
       }
     },
@@ -1612,8 +1739,7 @@
     },
     "GetAccountSettingsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAccountSettingsResponse":{
       "type":"structure",
@@ -1624,11 +1750,36 @@
         }
       }
     },
-    "GetPoliciesStatsRequest":{
+    "GetIndexRequest":{
+      "type":"structure",
+      "required":[
+        "id",
+        "indexName"
+      ],
+      "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection containing the index.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the index to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetIndexResponse":{
       "type":"structure",
       "members":{
+        "indexSchema":{
+          "shape":"IndexSchema",
+          "documentation":"<p>The JSON schema definition for the index, including field mappings and settings.</p>"
+        }
       }
     },
+    "GetPoliciesStatsRequest":{
+      "type":"structure",
+      "members":{}
+    },
     "GetPoliciesStatsResponse":{
       "type":"structure",
       "members":{
@@ -1636,17 +1787,17 @@
           "shape":"AccessPolicyStats",
           "documentation":"<p>Information about the data access policies in your account.</p>"
         },
-        "LifecyclePolicyStats":{
-          "shape":"LifecyclePolicyStats",
-          "documentation":"<p>Information about the lifecycle policies in your account.</p>"
+        "SecurityPolicyStats":{
+          "shape":"SecurityPolicyStats",
+          "documentation":"<p>Information about the security policies in your account.</p>"
         },
         "SecurityConfigStats":{
           "shape":"SecurityConfigStats",
           "documentation":"<p>Information about the security configurations in your account.</p>"
         },
-        "SecurityPolicyStats":{
-          "shape":"SecurityPolicyStats",
-          "documentation":"<p>Information about the security policies in your account.</p>"
+        "LifecyclePolicyStats":{
+          "shape":"LifecyclePolicyStats",
+          "documentation":"<p>Information about the lifecycle policies in your account.</p>"
         },
         "TotalPolicyCount":{
           "shape":"Long",
@@ -1676,17 +1827,17 @@
     "GetSecurityPolicyRequest":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "name":{
-          "shape":"PolicyName",
-          "documentation":"<p>The name of the security policy.</p>"
-        },
         "type":{
           "shape":"SecurityPolicyType",
           "documentation":"<p>The type of security policy.</p>"
+        },
+        "name":{
+          "shape":"PolicyName",
+          "documentation":"<p>The name of the security policy.</p>"
         }
       }
     },
@@ -1699,38 +1850,52 @@
         }
       }
     },
+    "IamFederationConfigOptions":{
+      "type":"structure",
+      "members":{
+        "groupAttribute":{
+          "shape":"iamFederationGroupAttribute",
+          "documentation":"<p>The group attribute for this IAM federation integration. This attribute is used to map identity provider groups to OpenSearch Serverless permissions.</p>"
+        },
+        "userAttribute":{
+          "shape":"iamFederationUserAttribute",
+          "documentation":"<p>The user attribute for this IAM federation integration. This attribute is used to identify users in the federated authentication process.</p>"
+        }
+      },
+      "documentation":"<p>Describes IAM federation options for an OpenSearch Serverless security configuration in the form of a key-value map. These options define how OpenSearch Serverless integrates with external identity providers using federation.</p>"
+    },
     "IamIdentityCenterApplicationArn":{
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}"
     },
     "IamIdentityCenterConfigOptions":{
       "type":"structure",
       "members":{
+        "instanceArn":{
+          "shape":"IamIdentityCenterInstanceArn",
+          "documentation":"<p>The ARN of the IAM Identity Center instance used to integrate with OpenSearch Serverless.</p>"
+        },
         "applicationArn":{
           "shape":"IamIdentityCenterApplicationArn",
           "documentation":"<p>The ARN of the IAM Identity Center application used to integrate with OpenSearch Serverless.</p>"
         },
-        "applicationDescription":{
-          "shape":"String",
-          "documentation":"<p>The description of the IAM Identity Center application used to integrate with OpenSearch Serverless.</p>"
-        },
         "applicationName":{
           "shape":"String",
           "documentation":"<p>The name of the IAM Identity Center application used to integrate with OpenSearch Serverless.</p>"
         },
-        "groupAttribute":{
-          "shape":"IamIdentityCenterGroupAttribute",
-          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
-        },
-        "instanceArn":{
-          "shape":"IamIdentityCenterInstanceArn",
-          "documentation":"<p>The ARN of the IAM Identity Center instance used to integrate with OpenSearch Serverless.</p>"
+        "applicationDescription":{
+          "shape":"String",
+          "documentation":"<p>The description of the IAM Identity Center application used to integrate with OpenSearch Serverless.</p>"
         },
         "userAttribute":{
           "shape":"IamIdentityCenterUserAttribute",
           "documentation":"<p>The user attribute for this IAM Identity Center integration. Defaults to <code>UserId</code> </p>"
+        },
+        "groupAttribute":{
+          "shape":"IamIdentityCenterGroupAttribute",
+          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
         }
       },
       "documentation":"<p>Describes IAM Identity Center options for an OpenSearch Serverless security configuration in the form of a key-value map.</p>"
@@ -1746,7 +1911,7 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}"
     },
     "IamIdentityCenterUserAttribute":{
       "type":"string",
@@ -1756,6 +1921,12 @@
         "Email"
       ]
     },
+    "IndexName":{"type":"string"},
+    "IndexSchema":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
     "IndexingCapacityValue":{
       "type":"integer",
       "box":true,
@@ -1773,33 +1944,33 @@
     "LifecyclePolicyDetail":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the lifecycle policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the lifecycle policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The timestamp of when the lifecycle policy was last modified.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the lifecycle policy.</p>"
         },
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the lifecycle policy.</p>"
+        },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the lifecycle policy.</p>"
+        },
         "policy":{
           "shape":"Document",
           "documentation":"<p>The JSON policy document without any whitespaces.</p>"
         },
-        "policyVersion":{
-          "shape":"PolicyVersion",
-          "documentation":"<p>The version of the lifecycle policy.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the lifecycle policy was created.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp of when the lifecycle policy was last modified.</p>"
         }
       },
       "documentation":"<p>Details about an OpenSearch Serverless lifecycle policy.</p>"
@@ -1811,21 +1982,21 @@
     "LifecyclePolicyErrorDetail":{
       "type":"structure",
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code for the request. For example, <code>NOT_FOUND</code>.</p>"
-        },
-        "errorMessage":{
-          "shape":"String",
-          "documentation":"<p>A description of the error. For example, <code>The specified Lifecycle Policy is not found</code>.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the lifecycle policy.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "errorMessage":{
+          "shape":"String",
+          "documentation":"<p>A description of the error. For example, <code>The specified Lifecycle Policy is not found</code>.</p>"
+        },
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>The error code for the request. For example, <code>NOT_FOUND</code>.</p>"
         }
       },
       "documentation":"<p>Error information for an OpenSearch Serverless request.</p>"
@@ -1837,17 +2008,17 @@
     "LifecyclePolicyIdentifier":{
       "type":"structure",
       "required":[
-        "name",
-        "type"
+        "type",
+        "name"
       ],
       "members":{
-        "name":{
-          "shape":"PolicyName",
-          "documentation":"<p>The name of the lifecycle policy.</p>"
-        },
         "type":{
           "shape":"LifecyclePolicyType",
           "documentation":"<p>The type of lifecycle policy.</p>"
+        },
+        "name":{
+          "shape":"PolicyName",
+          "documentation":"<p>The name of the lifecycle policy.</p>"
         }
       },
       "documentation":"<p>The unique identifiers of policy types and policy names.</p>"
@@ -1861,17 +2032,17 @@
     "LifecyclePolicyResourceIdentifier":{
       "type":"structure",
       "required":[
-        "resource",
-        "type"
+        "type",
+        "resource"
       ],
       "members":{
-        "resource":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the OpenSearch Serverless ilndex resource.</p>"
-        },
         "type":{
           "shape":"LifecyclePolicyType",
           "documentation":"<p>The type of lifecycle policy.</p>"
+        },
+        "resource":{
+          "shape":"ResourceName",
+          "documentation":"<p>The name of the OpenSearch Serverless ilndex resource.</p>"
         }
       },
       "documentation":"<p>The unique identifiers of policy types and resource names.</p>"
@@ -1899,17 +2070,9 @@
     "LifecyclePolicySummary":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The Epoch time when the lifecycle policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the lifecycle policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the lifecycle policy was last modified.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
@@ -1919,9 +2082,17 @@
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the lifecycle policy.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the lifecycle policy.</p>"
+        },
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The Epoch time when the lifecycle policy was created.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the lifecycle policy was last modified.</p>"
         }
       },
       "documentation":"<p>A summary of the lifecycle policy.</p>"
@@ -1935,21 +2106,21 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "maxResults":{
-          "shape":"ListAccessPoliciesRequestMaxResultsInteger",
-          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
-        },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>If your initial <code>ListAccessPolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListAccessPolicies</code> operations, which returns results in the next page. </p>"
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of access policy.</p>"
         },
         "resource":{
           "shape":"ListAccessPoliciesRequestResourceList",
           "documentation":"<p>Resource filters (can be collections or indexes) that policies can apply to.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of access policy.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If your initial <code>ListAccessPolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListAccessPolicies</code> operations, which returns results in the next page.</p>"
+        },
+        "maxResults":{
+          "shape":"ListAccessPoliciesRequestMaxResultsInteger",
+          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
         }
       }
     },
@@ -1985,13 +2156,13 @@
           "shape":"CollectionFilters",
           "documentation":"<p> A list of filter names and values that you can use for requests.</p>"
         },
-        "maxResults":{
-          "shape":"ListCollectionsRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return. Default is 20. You can use <code>nextToken</code> to get the next page of results.</p>"
-        },
         "nextToken":{
           "shape":"String",
           "documentation":"<p>If your initial <code>ListCollections</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListCollections</code> operations, which returns results in the next page.</p>"
+        },
+        "maxResults":{
+          "shape":"ListCollectionsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results to return. Default is 20. You can use <code>nextToken</code> to get the next page of results.</p>"
         }
       }
     },
@@ -2018,21 +2189,21 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "maxResults":{
-          "shape":"ListLifecyclePoliciesRequestMaxResultsInteger",
-          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use use <code>nextToken</code> to get the next page of results. The default is 10.</p>"
-        },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>If your initial <code>ListLifecyclePolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListLifecyclePolicies</code> operations, which returns results in the next page.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p>The type of lifecycle policy.</p>"
         },
         "resources":{
           "shape":"ListLifecyclePoliciesRequestResourcesList",
           "documentation":"<p>Resource filters that policies can apply to. Currently, the only supported resource type is <code>index</code>.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p>The type of lifecycle policy.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If your initial <code>ListLifecyclePolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListLifecyclePolicies</code> operations, which returns results in the next page.</p>"
+        },
+        "maxResults":{
+          "shape":"ListLifecyclePoliciesRequestMaxResultsInteger",
+          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use use <code>nextToken</code> to get the next page of results. The default is 10.</p>"
         }
       }
     },
@@ -2065,17 +2236,17 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "maxResults":{
-          "shape":"ListSecurityConfigsRequestMaxResultsInteger",
-          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
+        "type":{
+          "shape":"SecurityConfigType",
+          "documentation":"<p>The type of security configuration.</p>"
         },
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>If your initial <code>ListSecurityConfigs</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListSecurityConfigs</code> operations, which returns results in the next page. </p>"
+          "documentation":"<p>If your initial <code>ListSecurityConfigs</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListSecurityConfigs</code> operations, which returns results in the next page.</p>"
         },
-        "type":{
-          "shape":"SecurityConfigType",
-          "documentation":"<p>The type of security configuration.</p>"
+        "maxResults":{
+          "shape":"ListSecurityConfigsRequestMaxResultsInteger",
+          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
         }
       }
     },
@@ -2088,13 +2259,13 @@
     "ListSecurityConfigsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
-        },
         "securityConfigSummaries":{
           "shape":"SecurityConfigSummaries",
           "documentation":"<p>Details about the security configurations in your account.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2102,21 +2273,21 @@
       "type":"structure",
       "required":["type"],
       "members":{
-        "maxResults":{
-          "shape":"ListSecurityPoliciesRequestMaxResultsInteger",
-          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
-        },
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>If your initial <code>ListSecurityPolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListSecurityPolicies</code> operations, which returns results in the next page. </p>"
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of policy.</p>"
         },
         "resource":{
           "shape":"ListSecurityPoliciesRequestResourceList",
           "documentation":"<p>Resource filters (can be collection or indexes) that policies can apply to. </p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of policy.</p>"
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If your initial <code>ListSecurityPolicies</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListSecurityPolicies</code> operations, which returns results in the next page.</p>"
+        },
+        "maxResults":{
+          "shape":"ListSecurityPoliciesRequestMaxResultsInteger",
+          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
         }
       }
     },
@@ -2135,13 +2306,13 @@
     "ListSecurityPoliciesResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
-        },
         "securityPolicySummaries":{
           "shape":"SecurityPolicySummaries",
           "documentation":"<p>Details about the security policies in your account.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2167,17 +2338,17 @@
     "ListVpcEndpointsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"ListVpcEndpointsRequestMaxResultsInteger",
-          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
+        "vpcEndpointFilters":{
+          "shape":"VpcEndpointFilters",
+          "documentation":"<p>Filter the results according to the current status of the VPC endpoint. Possible statuses are <code>CREATING</code>, <code>DELETING</code>, <code>UPDATING</code>, <code>ACTIVE</code>, and <code>FAILED</code>.</p>"
         },
         "nextToken":{
           "shape":"String",
           "documentation":"<p>If your initial <code>ListVpcEndpoints</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListVpcEndpoints</code> operations, which returns results in the next page. </p>"
         },
-        "vpcEndpointFilters":{
-          "shape":"VpcEndpointFilters",
-          "documentation":"<p>Filter the results according to the current status of the VPC endpoint. Possible statuses are <code>CREATING</code>, <code>DELETING</code>, <code>UPDATING</code>, <code>ACTIVE</code>, and <code>FAILED</code>.</p>"
+        "maxResults":{
+          "shape":"ListVpcEndpointsRequestMaxResultsInteger",
+          "documentation":"<p>An optional parameter that specifies the maximum number of results to return. You can use <code>nextToken</code> to get the next page of results. The default is 20.</p>"
         }
       }
     },
@@ -2190,13 +2361,13 @@
     "ListVpcEndpointsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
-        },
         "vpcEndpointSummaries":{
           "shape":"VpcEndpointSummaries",
           "documentation":"<p>Details about each VPC endpoint, including the name and current status.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
         }
       }
     },
@@ -2225,24 +2396,24 @@
       "type":"string",
       "max":20480,
       "min":1,
-      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+"
+      "pattern":".*[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+.*"
     },
     "PolicyName":{
       "type":"string",
       "max":32,
       "min":3,
-      "pattern":"^[a-z][a-z0-9-]+$"
+      "pattern":"[a-z][a-z0-9-]+"
     },
     "PolicyVersion":{
       "type":"string",
       "max":36,
       "min":20,
-      "pattern":"^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$"
+      "pattern":"([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?"
     },
     "Resource":{"type":"string"},
     "ResourceName":{
       "type":"string",
-      "pattern":"^index/[a-z][a-z0-9-]{3,32}/([a-z;0-9&$%][+.~=\\-_a-z;0-9&$%]*)$"
+      "pattern":"index/[a-z][a-z0-9-]{3,32}/([a-z;0-9&$%][+.~=\\-_a-z;0-9&$%]*)"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -2260,21 +2431,25 @@
       "type":"structure",
       "required":["metadata"],
       "members":{
+        "metadata":{
+          "shape":"samlMetadata",
+          "documentation":"<p>The XML IdP metadata file generated from your identity provider.</p>"
+        },
+        "userAttribute":{
+          "shape":"samlUserAttribute",
+          "documentation":"<p>A user attribute for this SAML integration.</p>"
+        },
         "groupAttribute":{
           "shape":"samlGroupAttribute",
           "documentation":"<p>The group attribute for this SAML integration.</p>"
         },
-        "metadata":{
-          "shape":"samlMetadata",
-          "documentation":"<p>The XML IdP metadata file generated from your identity provider.</p>"
+        "openSearchServerlessEntityId":{
+          "shape":"openSearchServerlessEntityId",
+          "documentation":"<p>Custom entity ID attribute to override the default entity ID for this SAML integration.</p>"
         },
         "sessionTimeout":{
           "shape":"SamlConfigOptionsSessionTimeoutInteger",
           "documentation":"<p>The session timeout, in minutes. Default is 60 minutes (12 hours).</p>"
-        },
-        "userAttribute":{
-          "shape":"samlUserAttribute",
-          "documentation":"<p>A user attribute for this SAML integration.</p>"
         }
       },
       "documentation":"<p>Describes SAML options for an OpenSearch Serverless security configuration in the form of a key-value map.</p>"
@@ -2293,40 +2468,44 @@
     "SecurityConfigDetail":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"SecurityConfigId",
+          "documentation":"<p>The unique identifier of the security configuration.</p>"
+        },
+        "type":{
+          "shape":"SecurityConfigType",
+          "documentation":"<p>The type of security configuration.</p>"
+        },
         "configVersion":{
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the security configuration.</p>"
         },
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the configuration was created.</p>"
-        },
         "description":{
           "shape":"ConfigDescription",
           "documentation":"<p>The description of the security configuration.</p>"
         },
+        "samlOptions":{
+          "shape":"SamlConfigOptions",
+          "documentation":"<p>SAML options for the security configuration in the form of a key-value map.</p>"
+        },
         "iamIdentityCenterOptions":{
           "shape":"IamIdentityCenterConfigOptions",
           "documentation":"<p>Describes IAM Identity Center options in the form of a key-value map.</p>"
         },
-        "id":{
-          "shape":"SecurityConfigId",
-          "documentation":"<p>The unique identifier of the security configuration.</p>"
+        "iamFederationOptions":{
+          "shape":"IamFederationConfigOptions",
+          "documentation":"<p>Describes IAM federation options in the form of a key-value map. Contains configuration details about how OpenSearch Serverless integrates with external identity providers through federation.</p>"
+        },
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the configuration was created.</p>"
         },
         "lastModifiedDate":{
           "shape":"Long",
           "documentation":"<p>The timestamp of when the configuration was last modified.</p>"
-        },
-        "samlOptions":{
-          "shape":"SamlConfigOptions",
-          "documentation":"<p>SAML options for the security configuration in the form of a key-value map.</p>"
-        },
-        "type":{
-          "shape":"SecurityConfigType",
-          "documentation":"<p>The type of security configuration.</p>"
         }
       },
-      "documentation":"<p>Details about a security configuration for OpenSearch Serverless. </p>"
+      "documentation":"<p>Details about a security configuration for OpenSearch Serverless.</p>"
     },
     "SecurityConfigId":{
       "type":"string",
@@ -2350,29 +2529,29 @@
     "SecurityConfigSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"SecurityConfigId",
+          "documentation":"<p>The unique identifier of the security configuration.</p>"
+        },
+        "type":{
+          "shape":"SecurityConfigType",
+          "documentation":"<p>The type of security configuration.</p>"
+        },
         "configVersion":{
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the security configuration.</p>"
         },
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The Epoch time when the security configuration was created.</p>"
-        },
         "description":{
           "shape":"ConfigDescription",
           "documentation":"<p>The description of the security configuration.</p>"
         },
-        "id":{
-          "shape":"SecurityConfigId",
-          "documentation":"<p>The unique identifier of the security configuration.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The Epoch time when the security configuration was created.</p>"
         },
         "lastModifiedDate":{
           "shape":"Long",
           "documentation":"<p>The timestamp of when the configuration was last modified.</p>"
-        },
-        "type":{
-          "shape":"SecurityConfigType",
-          "documentation":"<p>The type of security configuration.</p>"
         }
       },
       "documentation":"<p>A summary of a security configuration for OpenSearch Serverless.</p>"
@@ -2381,14 +2560,15 @@
       "type":"string",
       "enum":[
         "saml",
-        "iamidentitycenter"
+        "iamidentitycenter",
+        "iamfederation"
       ]
     },
     "SecurityGroupId":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\w+\\-]+$"
+      "pattern":"[\\w+\\-]+"
     },
     "SecurityGroupIds":{
       "type":"list",
@@ -2399,33 +2579,33 @@
     "SecurityPolicyDetail":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the security policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of security policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
+        "policyVersion":{
+          "shape":"PolicyVersion",
+          "documentation":"<p>The version of the policy.</p>"
+        },
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the security policy.</p>"
+        },
         "policy":{
           "shape":"Document",
           "documentation":"<p>The JSON policy document without any whitespaces.</p>"
         },
-        "policyVersion":{
-          "shape":"PolicyVersion",
-          "documentation":"<p>The version of the policy.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the policy was created.</p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of security policy.</p>"
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
         }
       },
       "documentation":"<p>Details about an OpenSearch Serverless security policy.</p>"
@@ -2451,17 +2631,9 @@
     "SecurityPolicySummary":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the policy was created.</p>"
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>The description of the security policy.</p>"
-        },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of security policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
@@ -2471,9 +2643,17 @@
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the policy.</p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of security policy.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>The description of the security policy.</p>"
+        },
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the policy was created.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp of when the policy was last modified.</p>"
         }
       },
       "documentation":"<p>A summary of a security policy for OpenSearch Serverless.</p>"
@@ -2496,10 +2676,6 @@
           "shape":"String",
           "documentation":"<p>Description of the error.</p>"
         },
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>Service Quotas requirement to identify originating quota.</p>"
-        },
         "resourceId":{
           "shape":"String",
           "documentation":"<p>Identifier of the resource affected.</p>"
@@ -2511,6 +2687,10 @@
         "serviceCode":{
           "shape":"String",
           "documentation":"<p>Service Quotas requirement to identify originating service.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>Service Quotas requirement to identify originating quota.</p>"
         }
       },
       "documentation":"<p>Thrown when you attempt to create more resources than the service allows based on service quotas.</p>",
@@ -2528,12 +2708,11 @@
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^subnet-([0-9a-f]{8}|[0-9a-f]{17})$"
+      "pattern":"subnet-([0-9a-f]{8}|[0-9a-f]{17})"
     },
     "SubnetIds":{
       "type":"list",
       "member":{"shape":"SubnetId"},
-      "max":6,
       "min":1
     },
     "Tag":{
@@ -2584,8 +2763,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2617,41 +2795,40 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccessPolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policyVersion",
-        "type"
+        "policyVersion"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        "type":{
+          "shape":"AccessPolicyType",
+          "documentation":"<p>The type of policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The JSON policy document to use as the content for the policy.</p>"
-        },
         "policyVersion":{
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the policy being updated.</p>"
         },
-        "type":{
-          "shape":"AccessPolicyType",
-          "documentation":"<p>The type of policy.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The JSON policy document to use as the content for the policy.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2675,33 +2852,17 @@
       "members":{
         "accountSettingsDetail":{
           "shape":"AccountSettingsDetail",
-          "documentation":"<p>OpenSearch Serverless-related settings for the current Amazon Web Services account. </p>"
+          "documentation":"<p>OpenSearch Serverless-related settings for the current Amazon Web Services account.</p>"
         }
       }
     },
     "UpdateCollectionDetail":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
-        },
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the collection was created.</p>"
-        },
-        "description":{
-          "shape":"String",
-          "documentation":"<p>The description of the collection.</p>"
-        },
         "id":{
           "shape":"CollectionId",
           "documentation":"<p>The unique identifier of the collection.</p>"
         },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The date and time when the collection was last modified.</p>"
-        },
         "name":{
           "shape":"CollectionName",
           "documentation":"<p>The name of the collection.</p>"
@@ -2713,6 +2874,22 @@
         "type":{
           "shape":"CollectionType",
           "documentation":"<p>The collection type.</p>"
+        },
+        "description":{
+          "shape":"String",
+          "documentation":"<p>The description of the collection.</p>"
+        },
+        "arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the collection.</p>"
+        },
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the collection was created.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The date and time when the collection was last modified.</p>"
         }
       },
       "documentation":"<p>Details about an updated OpenSearch Serverless collection.</p>"
@@ -2721,18 +2898,18 @@
       "type":"structure",
       "required":["id"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection.</p>"
         },
         "description":{
           "shape":"UpdateCollectionRequestDescriptionString",
           "documentation":"<p>A description of the collection.</p>"
         },
-        "id":{
-          "shape":"CollectionId",
-          "documentation":"<p>The unique identifier of the collection.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2753,49 +2930,74 @@
     "UpdateIamIdentityCenterConfigOptions":{
       "type":"structure",
       "members":{
-        "groupAttribute":{
-          "shape":"IamIdentityCenterGroupAttribute",
-          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
-        },
         "userAttribute":{
           "shape":"IamIdentityCenterUserAttribute",
           "documentation":"<p>The user attribute for this IAM Identity Center integration. Defaults to <code>UserId</code>.</p>"
+        },
+        "groupAttribute":{
+          "shape":"IamIdentityCenterGroupAttribute",
+          "documentation":"<p>The group attribute for this IAM Identity Center integration. Defaults to <code>GroupId</code>.</p>"
         }
       },
       "documentation":"<p>Describes IAM Identity Center options for updating an OpenSearch Serverless security configuration in the form of a key-value map.</p>"
     },
+    "UpdateIndexRequest":{
+      "type":"structure",
+      "required":[
+        "id",
+        "indexName"
+      ],
+      "members":{
+        "id":{
+          "shape":"CollectionId",
+          "documentation":"<p>The unique identifier of the collection containing the index to update.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the index to update.</p>"
+        },
+        "indexSchema":{
+          "shape":"IndexSchema",
+          "documentation":"<p>The updated JSON schema definition for the index, including field mappings and settings. </p>"
+        }
+      }
+    },
+    "UpdateIndexResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateLifecyclePolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policyVersion",
-        "type"
+        "policyVersion"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the lifecycle policy.</p>"
+        "type":{
+          "shape":"LifecyclePolicyType",
+          "documentation":"<p> The type of lifecycle policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The JSON policy document to use as the content for the lifecycle policy.</p>"
-        },
         "policyVersion":{
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the policy being updated.</p>"
         },
-        "type":{
-          "shape":"LifecyclePolicyType",
-          "documentation":"<p> The type of lifecycle policy.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the lifecycle policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The JSON policy document to use as the content for the lifecycle policy.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2811,14 +3013,13 @@
     "UpdateSecurityConfigRequest":{
       "type":"structure",
       "required":[
-        "configVersion",
-        "id"
+        "id",
+        "configVersion"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "id":{
+          "shape":"SecurityConfigId",
+          "documentation":"<p>The security configuration identifier. For SAML the ID will be <code>saml/&lt;accountId&gt;/&lt;idpProviderName&gt;</code>. For example, <code>saml/123456789123/OKTADev</code>.</p>"
         },
         "configVersion":{
           "shape":"PolicyVersion",
@@ -2828,17 +3029,22 @@
           "shape":"ConfigDescription",
           "documentation":"<p>A description of the security configuration.</p>"
         },
+        "samlOptions":{
+          "shape":"SamlConfigOptions",
+          "documentation":"<p>SAML options in in the form of a key-value map.</p>"
+        },
         "iamIdentityCenterOptionsUpdates":{
           "shape":"UpdateIamIdentityCenterConfigOptions",
           "documentation":"<p>Describes IAM Identity Center options in the form of a key-value map.</p>"
         },
-        "id":{
-          "shape":"SecurityConfigId",
-          "documentation":"<p>The security configuration identifier. For SAML the ID will be <code>saml/&lt;accountId&gt;/&lt;idpProviderName&gt;</code>. For example, <code>saml/123456789123/OKTADev</code>.</p>"
+        "iamFederationOptions":{
+          "shape":"IamFederationConfigOptions",
+          "documentation":"<p>Describes IAM federation options in the form of a key-value map for updating an existing security configuration. Use this field to modify IAM federation settings for the security configuration.</p>"
         },
-        "samlOptions":{
-          "shape":"SamlConfigOptions",
-          "documentation":"<p>SAML options in in the form of a key-value map.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2854,35 +3060,35 @@
     "UpdateSecurityPolicyRequest":{
       "type":"structure",
       "required":[
+        "type",
         "name",
-        "policyVersion",
-        "type"
+        "policyVersion"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"PolicyDescription",
-          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        "type":{
+          "shape":"SecurityPolicyType",
+          "documentation":"<p>The type of access policy.</p>"
         },
         "name":{
           "shape":"PolicyName",
           "documentation":"<p>The name of the policy.</p>"
         },
-        "policy":{
-          "shape":"PolicyDocument",
-          "documentation":"<p>The JSON policy document to use as the content for the new policy.</p>"
-        },
         "policyVersion":{
           "shape":"PolicyVersion",
           "documentation":"<p>The version of the policy being updated.</p>"
         },
-        "type":{
-          "shape":"SecurityPolicyType",
-          "documentation":"<p>The type of access policy.</p>"
+        "description":{
+          "shape":"PolicyDescription",
+          "documentation":"<p>A description of the policy. Typically used to store information about the permissions defined in the policy.</p>"
+        },
+        "policy":{
+          "shape":"PolicyDocument",
+          "documentation":"<p>The JSON policy document to use as the content for the new policy.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2902,18 +3108,10 @@
           "shape":"VpcEndpointId",
           "documentation":"<p>The unique identifier of the endpoint.</p>"
         },
-        "lastModifiedDate":{
-          "shape":"Long",
-          "documentation":"<p>The timestamp of when the endpoint was last modified.</p>"
-        },
         "name":{
           "shape":"VpcEndpointName",
           "documentation":"<p>The name of the endpoint.</p>"
         },
-        "securityGroupIds":{
-          "shape":"SecurityGroupIds",
-          "documentation":"<p>The unique identifiers of the security groups that define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
-        },
         "status":{
           "shape":"VpcEndpointStatus",
           "documentation":"<p>The current status of the endpoint update process.</p>"
@@ -2921,6 +3119,14 @@
         "subnetIds":{
           "shape":"SubnetIds",
           "documentation":"<p>The ID of the subnets from which you access OpenSearch Serverless.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>The unique identifiers of the security groups that define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
+        },
+        "lastModifiedDate":{
+          "shape":"Long",
+          "documentation":"<p>The timestamp of when the endpoint was last modified.</p>"
         }
       },
       "documentation":"<p>Update details for an OpenSearch Serverless-managed interface endpoint.</p>"
@@ -2929,30 +3135,30 @@
       "type":"structure",
       "required":["id"],
       "members":{
-        "addSecurityGroupIds":{
-          "shape":"SecurityGroupIds",
-          "documentation":"<p>The unique identifiers of the security groups to add to the endpoint. Security groups define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
+        "id":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>The unique identifier of the interface endpoint to update.</p>"
         },
         "addSubnetIds":{
           "shape":"SubnetIds",
           "documentation":"<p>The ID of one or more subnets to add to the endpoint.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
-          "idempotencyToken":true
+        "removeSubnetIds":{
+          "shape":"SubnetIds",
+          "documentation":"<p>The unique identifiers of the subnets to remove from the endpoint.</p>"
         },
-        "id":{
-          "shape":"VpcEndpointId",
-          "documentation":"<p>The unique identifier of the interface endpoint to update.</p>"
+        "addSecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>The unique identifiers of the security groups to add to the endpoint. Security groups define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
         },
         "removeSecurityGroupIds":{
           "shape":"SecurityGroupIds",
           "documentation":"<p>The unique identifiers of the security groups to remove from the endpoint.</p>"
         },
-        "removeSubnetIds":{
-          "shape":"SubnetIds",
-          "documentation":"<p>The unique identifiers of the subnets to remove from the endpoint.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique, case-sensitive identifier to ensure idempotency of the request.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2976,18 +3182,6 @@
     "VpcEndpointDetail":{
       "type":"structure",
       "members":{
-        "createdDate":{
-          "shape":"Long",
-          "documentation":"<p>The date the endpoint was created.</p>"
-        },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>A failure code associated with the request.</p>"
-        },
-        "failureMessage":{
-          "shape":"String",
-          "documentation":"<p>A message associated with the failure code.</p>"
-        },
         "id":{
           "shape":"VpcEndpointId",
           "documentation":"<p>The unique identifier of the endpoint.</p>"
@@ -2996,6 +3190,14 @@
           "shape":"VpcEndpointName",
           "documentation":"<p>The name of the endpoint.</p>"
         },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC from which you access OpenSearch Serverless.</p>"
+        },
+        "subnetIds":{
+          "shape":"SubnetIds",
+          "documentation":"<p>The ID of the subnets from which you access OpenSearch Serverless.</p>"
+        },
         "securityGroupIds":{
           "shape":"SecurityGroupIds",
           "documentation":"<p>The unique identifiers of the security groups that define the ports, protocols, and sources for inbound traffic that you are authorizing into your endpoint.</p>"
@@ -3004,13 +3206,17 @@
           "shape":"VpcEndpointStatus",
           "documentation":"<p>The current status of the endpoint.</p>"
         },
-        "subnetIds":{
-          "shape":"SubnetIds",
-          "documentation":"<p>The ID of the subnets from which you access OpenSearch Serverless.</p>"
+        "createdDate":{
+          "shape":"Long",
+          "documentation":"<p>The date the endpoint was created.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC from which you access OpenSearch Serverless.</p>"
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>A failure code associated with the request.</p>"
+        },
+        "failureMessage":{
+          "shape":"String",
+          "documentation":"<p>A message associated with the failure code.</p>"
         }
       },
       "documentation":"<p>Details about an OpenSearch Serverless-managed interface endpoint.</p>"
@@ -3022,17 +3228,17 @@
     "VpcEndpointErrorDetail":{
       "type":"structure",
       "members":{
-        "errorCode":{
-          "shape":"String",
-          "documentation":"<p>The error code for the failed request.</p>"
+        "id":{
+          "shape":"VpcEndpointId",
+          "documentation":"<p>The unique identifier of the VPC endpoint.</p>"
         },
         "errorMessage":{
           "shape":"String",
           "documentation":"<p>An error message describing the reason for the failure.</p>"
         },
-        "id":{
-          "shape":"VpcEndpointId",
-          "documentation":"<p>The unique identifier of the VPC endpoint.</p>"
+        "errorCode":{
+          "shape":"String",
+          "documentation":"<p>The error code for the failed request.</p>"
         }
       },
       "documentation":"<p>Error information for a failed <code>BatchGetVpcEndpoint</code> request.</p>"
@@ -3055,18 +3261,19 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^vpce-[0-9a-z]*$"
+      "pattern":"vpce-[0-9a-z]*"
     },
     "VpcEndpointIds":{
       "type":"list",
       "member":{"shape":"VpcEndpointId"},
+      "max":100,
       "min":1
     },
     "VpcEndpointName":{
       "type":"string",
       "max":32,
       "min":3,
-      "pattern":"^[a-z][a-z0-9-]+$"
+      "pattern":"[a-z][a-z0-9-]+"
     },
     "VpcEndpointStatus":{
       "type":"string",
@@ -3103,26 +3310,44 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^vpc-[0-9a-z]*$"
+      "pattern":"vpc-[0-9a-z]*"
+    },
+    "iamFederationGroupAttribute":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9_.:/=+\\-@]*"
+    },
+    "iamFederationUserAttribute":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9_.:/=+\\-@]*"
+    },
+    "openSearchServerlessEntityId":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"aws:opensearch:[0-9]{12}:*.*"
     },
     "samlGroupAttribute":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"[\\w+=,.@-]+"
+      "pattern":".*[\\w+=,.@-]+.*"
     },
     "samlMetadata":{
       "type":"string",
       "max":51200,
       "min":1,
-      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+"
+      "pattern":".*[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]+.*"
     },
     "samlUserAttribute":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"[\\w+=,.@-]+"
+      "pattern":".*[\\w+=,.@-]+.*"
     }
   },
-  "documentation":"<p>Use the Amazon OpenSearch Serverless API to create, configure, and manage OpenSearch Serverless collections and security policies.</p> <p>OpenSearch Serverless is an on-demand, pre-provisioned serverless configuration for Amazon OpenSearch Service. OpenSearch Serverless removes the operational complexities of provisioning, configuring, and tuning your OpenSearch clusters. It enables you to easily search and analyze petabytes of data without having to worry about the underlying infrastructure and data management.</p> <p> To learn more about OpenSearch Serverless, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html\">What is Amazon OpenSearch Serverless?</a> </p>"
+  "documentation":"<p>Use the Amazon OpenSearch Serverless API to create, configure, and manage OpenSearch Serverless collections and security policies.</p> <p>OpenSearch Serverless is an on-demand, pre-provisioned serverless configuration for Amazon OpenSearch Service. OpenSearch Serverless removes the operational complexities of provisioning, configuring, and tuning your OpenSearch clusters. It enables you to easily search and analyze petabytes of data without having to worry about the underlying infrastructure and data management.</p> <p>To learn more about OpenSearch Serverless, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html\">What is Amazon OpenSearch Serverless?</a> </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/waiters-2.json 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/opensearchserverless/2021-11-01/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opensearchserverless/2021-11-01/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/completions-1.json 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/completions-1.json
--- 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/completions-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/completions-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,1823 +0,0 @@
-{
-  "version": "1.0",
-  "resources": {
-    "App": {
-      "operation": "DescribeApps",
-      "resourceIdentifier": {
-        "Description": "Apps[].Description",
-        "DataSources": "Apps[].DataSources",
-        "AppSource": "Apps[].AppSource",
-        "Domains": "Apps[].Domains",
-        "EnableSsl": "Apps[].EnableSsl",
-        "SslConfiguration": "Apps[].SslConfiguration",
-        "Environment": "Apps[].Environment"
-      }
-    },
-    "Command": {
-      "operation": "DescribeCommands",
-      "resourceIdentifier": {
-        "CommandId": "Commands[].CommandId"
-      }
-    },
-    "Deployment": {
-      "operation": "DescribeDeployments",
-      "resourceIdentifier": {
-        "DeploymentId": "Deployments[].DeploymentId",
-        "AppId": "Deployments[].AppId",
-        "InstanceIds": "Deployments[].InstanceIds"
-      }
-    },
-    "ElasticLoadBalancer": {
-      "operation": "DescribeElasticLoadBalancers",
-      "resourceIdentifier": {
-        "ElasticLoadBalancerName": "ElasticLoadBalancers[].ElasticLoadBalancerName"
-      }
-    },
-    "Instance": {
-      "operation": "DescribeInstances",
-      "resourceIdentifier": {
-        "AmiId": "Instances[].AmiId",
-        "Architecture": "Instances[].Architecture",
-        "AutoScalingType": "Instances[].AutoScalingType",
-        "EbsOptimized": "Instances[].EbsOptimized",
-        "EcsClusterArn": "Instances[].EcsClusterArn",
-        "ElasticIp": "Instances[].ElasticIp",
-        "Hostname": "Instances[].Hostname",
-        "InstanceType": "Instances[].InstanceType",
-        "LayerIds": "Instances[].LayerIds",
-        "Os": "Instances[].Os",
-        "PrivateIp": "Instances[].PrivateIp",
-        "PublicIp": "Instances[].PublicIp",
-        "SshKeyName": "Instances[].SshKeyName"
-      }
-    },
-    "Layer": {
-      "operation": "DescribeLayers",
-      "resourceIdentifier": {
-        "LayerId": "Layers[].LayerId",
-        "Shortname": "Layers[].Shortname",
-        "CloudWatchLogsConfiguration": "Layers[].CloudWatchLogsConfiguration",
-        "CustomInstanceProfileArn": "Layers[].CustomInstanceProfileArn",
-        "CustomSecurityGroupIds": "Layers[].CustomSecurityGroupIds",
-        "Packages": "Layers[].Packages",
-        "VolumeConfigurations": "Layers[].VolumeConfigurations",
-        "EnableAutoHealing": "Layers[].EnableAutoHealing",
-        "AutoAssignElasticIps": "Layers[].AutoAssignElasticIps",
-        "AutoAssignPublicIps": "Layers[].AutoAssignPublicIps",
-        "CustomRecipes": "Layers[].CustomRecipes",
-        "InstallUpdatesOnBoot": "Layers[].InstallUpdatesOnBoot",
-        "UseEbsOptimizedInstances": "Layers[].UseEbsOptimizedInstances",
-        "LifecycleEventConfiguration": "Layers[].LifecycleEventConfiguration"
-      }
-    },
-    "Permission": {
-      "operation": "DescribePermissions",
-      "resourceIdentifier": {
-        "AllowSsh": "Permissions[].AllowSsh",
-        "AllowSudo": "Permissions[].AllowSudo",
-        "Level": "Permissions[].Level"
-      }
-    },
-    "ServiceError": {
-      "operation": "DescribeServiceErrors",
-      "resourceIdentifier": {
-        "ServiceErrorId": "ServiceErrors[].ServiceErrorId",
-        "Type": "ServiceErrors[].Type"
-      }
-    },
-    "Stack": {
-      "operation": "DescribeStacks",
-      "resourceIdentifier": {
-        "StackId": "Stacks[].StackId",
-        "VpcId": "Stacks[].VpcId",
-        "Attributes": "Stacks[].Attributes",
-        "ServiceRoleArn": "Stacks[].ServiceRoleArn",
-        "DefaultInstanceProfileArn": "Stacks[].DefaultInstanceProfileArn",
-        "DefaultOs": "Stacks[].DefaultOs",
-        "HostnameTheme": "Stacks[].HostnameTheme",
-        "DefaultAvailabilityZone": "Stacks[].DefaultAvailabilityZone",
-        "DefaultSubnetId": "Stacks[].DefaultSubnetId",
-        "CustomJson": "Stacks[].CustomJson",
-        "ConfigurationManager": "Stacks[].ConfigurationManager",
-        "ChefConfiguration": "Stacks[].ChefConfiguration",
-        "UseCustomCookbooks": "Stacks[].UseCustomCookbooks",
-        "UseOpsworksSecurityGroups": "Stacks[].UseOpsworksSecurityGroups",
-        "CustomCookbooksSource": "Stacks[].CustomCookbooksSource",
-        "DefaultSshKeyName": "Stacks[].DefaultSshKeyName",
-        "DefaultRootDeviceType": "Stacks[].DefaultRootDeviceType",
-        "AgentVersion": "Stacks[].AgentVersion"
-      }
-    },
-    "UserProfile": {
-      "operation": "DescribeUserProfiles",
-      "resourceIdentifier": {
-        "IamUserArn": "UserProfiles[].IamUserArn",
-        "SshUsername": "UserProfiles[].SshUsername",
-        "SshPublicKey": "UserProfiles[].SshPublicKey",
-        "AllowSelfManagement": "UserProfiles[].AllowSelfManagement"
-      }
-    },
-    "Volume": {
-      "operation": "DescribeVolumes",
-      "resourceIdentifier": {
-        "VolumeId": "Volumes[].VolumeId",
-        "Ec2VolumeId": "Volumes[].Ec2VolumeId",
-        "Name": "Volumes[].Name",
-        "RaidArrayId": "Volumes[].RaidArrayId",
-        "InstanceId": "Volumes[].InstanceId",
-        "MountPoint": "Volumes[].MountPoint",
-        "Region": "Volumes[].Region"
-      }
-    }
-  },
-  "operations": {
-    "AssignInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "LayerIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "LayerIds"
-          }
-        ]
-      }
-    },
-    "AssignVolume": {
-      "VolumeId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "VolumeId"
-          }
-        ]
-      },
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "AssociateElasticIp": {
-      "ElasticIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "ElasticIp"
-          }
-        ]
-      },
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "AttachElasticLoadBalancer": {
-      "ElasticLoadBalancerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "ElasticLoadBalancer",
-            "resourceIdentifier": "ElasticLoadBalancerName"
-          }
-        ]
-      },
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      }
-    },
-    "CloneStack": {
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      },
-      "Region": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Region"
-          }
-        ]
-      },
-      "VpcId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "VpcId"
-          }
-        ]
-      },
-      "Attributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "Attributes"
-          }
-        ]
-      },
-      "ServiceRoleArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ServiceRoleArn"
-          }
-        ]
-      },
-      "DefaultInstanceProfileArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultInstanceProfileArn"
-          }
-        ]
-      },
-      "DefaultOs": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultOs"
-          }
-        ]
-      },
-      "HostnameTheme": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "HostnameTheme"
-          }
-        ]
-      },
-      "DefaultAvailabilityZone": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultAvailabilityZone"
-          }
-        ]
-      },
-      "DefaultSubnetId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultSubnetId"
-          }
-        ]
-      },
-      "CustomJson": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "CustomJson"
-          }
-        ]
-      },
-      "ConfigurationManager": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ConfigurationManager"
-          }
-        ]
-      },
-      "ChefConfiguration": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ChefConfiguration"
-          }
-        ]
-      },
-      "UseCustomCookbooks": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "UseCustomCookbooks"
-          }
-        ]
-      },
-      "UseOpsworksSecurityGroups": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "UseOpsworksSecurityGroups"
-          }
-        ]
-      },
-      "CustomCookbooksSource": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "CustomCookbooksSource"
-          }
-        ]
-      },
-      "DefaultSshKeyName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultSshKeyName"
-          }
-        ]
-      },
-      "DefaultRootDeviceType": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultRootDeviceType"
-          }
-        ]
-      },
-      "AgentVersion": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "AgentVersion"
-          }
-        ]
-      }
-    },
-    "DeleteApp": {
-      "AppId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "AppId"
-          }
-        ]
-      }
-    },
-    "DeleteInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "DeleteLayer": {
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      }
-    },
-    "DeleteStack": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DeleteUserProfile": {
-      "IamUserArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "IamUserArn"
-          }
-        ]
-      }
-    },
-    "DeregisterEcsCluster": {
-      "EcsClusterArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "EcsClusterArn"
-          }
-        ]
-      }
-    },
-    "DeregisterElasticIp": {
-      "ElasticIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "ElasticIp"
-          }
-        ]
-      }
-    },
-    "DeregisterInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "DeregisterVolume": {
-      "VolumeId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "VolumeId"
-          }
-        ]
-      }
-    },
-    "DescribeAgentVersions": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "ConfigurationManager": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ConfigurationManager"
-          }
-        ]
-      }
-    },
-    "DescribeApps": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "AppIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "AppId"
-          }
-        ]
-      }
-    },
-    "DescribeCommands": {
-      "DeploymentId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "DeploymentId"
-          }
-        ]
-      },
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "CommandIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Command",
-            "resourceIdentifier": "CommandId"
-          }
-        ]
-      }
-    },
-    "DescribeDeployments": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "AppId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "AppId"
-          }
-        ]
-      },
-      "DeploymentIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "DeploymentId"
-          }
-        ]
-      }
-    },
-    "DescribeEcsClusters": {
-      "EcsClusterArns": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "EcsClusterArn"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeElasticIps": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeElasticLoadBalancers": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "LayerIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "LayerIds"
-          }
-        ]
-      }
-    },
-    "DescribeInstances": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      },
-      "InstanceIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "InstanceIds"
-          }
-        ]
-      }
-    },
-    "DescribeLayers": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "LayerIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "LayerIds"
-          }
-        ]
-      }
-    },
-    "DescribeLoadBasedAutoScaling": {
-      "LayerIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "LayerIds"
-          }
-        ]
-      }
-    },
-    "DescribePermissions": {
-      "IamUserArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "IamUserArn"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeRaidArrays": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "RaidArrayIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "RaidArrayId"
-          }
-        ]
-      }
-    },
-    "DescribeRdsDbInstances": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeServiceErrors": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "ServiceErrorIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "ServiceError",
-            "resourceIdentifier": "ServiceErrorId"
-          }
-        ]
-      }
-    },
-    "DescribeStackProvisioningParameters": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeStackSummary": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeStacks": {
-      "StackIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "DescribeTimeBasedAutoScaling": {
-      "InstanceIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "InstanceIds"
-          }
-        ]
-      }
-    },
-    "DescribeUserProfiles": {
-      "IamUserArns": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "IamUserArn"
-          }
-        ]
-      }
-    },
-    "DescribeVolumes": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "RaidArrayId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "RaidArrayId"
-          }
-        ]
-      },
-      "VolumeIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "VolumeId"
-          }
-        ]
-      }
-    },
-    "DetachElasticLoadBalancer": {
-      "ElasticLoadBalancerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "ElasticLoadBalancer",
-            "resourceIdentifier": "ElasticLoadBalancerName"
-          }
-        ]
-      },
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      }
-    },
-    "DisassociateElasticIp": {
-      "ElasticIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "ElasticIp"
-          }
-        ]
-      }
-    },
-    "GetHostnameSuggestion": {
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      }
-    },
-    "GrantAccess": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "RebootInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "RegisterEcsCluster": {
-      "EcsClusterArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "EcsClusterArn"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "RegisterElasticIp": {
-      "ElasticIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "ElasticIp"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "RegisterInstance": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "Hostname": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "Hostname"
-          }
-        ]
-      },
-      "PublicIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "PublicIp"
-          }
-        ]
-      },
-      "PrivateIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "PrivateIp"
-          }
-        ]
-      }
-    },
-    "RegisterRdsDbInstance": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "RegisterVolume": {
-      "Ec2VolumeId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Ec2VolumeId"
-          }
-        ]
-      },
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "SetLoadBasedAutoScaling": {
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      }
-    },
-    "SetPermission": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "IamUserArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "IamUserArn"
-          }
-        ]
-      },
-      "AllowSsh": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Permission",
-            "resourceIdentifier": "AllowSsh"
-          }
-        ]
-      },
-      "AllowSudo": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Permission",
-            "resourceIdentifier": "AllowSudo"
-          }
-        ]
-      },
-      "Level": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Permission",
-            "resourceIdentifier": "Level"
-          }
-        ]
-      }
-    },
-    "SetTimeBasedAutoScaling": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "StartInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "StartStack": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "StopInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "StopStack": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      }
-    },
-    "UnassignInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      }
-    },
-    "UnassignVolume": {
-      "VolumeId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "VolumeId"
-          }
-        ]
-      }
-    },
-    "UpdateApp": {
-      "AppId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Deployment",
-            "resourceIdentifier": "AppId"
-          }
-        ]
-      },
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      },
-      "Description": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "Description"
-          }
-        ]
-      },
-      "DataSources": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "DataSources"
-          }
-        ]
-      },
-      "Type": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "ServiceError",
-            "resourceIdentifier": "Type"
-          }
-        ]
-      },
-      "AppSource": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "AppSource"
-          }
-        ]
-      },
-      "Domains": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "Domains"
-          }
-        ]
-      },
-      "EnableSsl": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "EnableSsl"
-          }
-        ]
-      },
-      "SslConfiguration": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "SslConfiguration"
-          }
-        ]
-      },
-      "Attributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "Attributes"
-          }
-        ]
-      },
-      "Environment": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "App",
-            "resourceIdentifier": "Environment"
-          }
-        ]
-      }
-    },
-    "UpdateElasticIp": {
-      "ElasticIp": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "ElasticIp"
-          }
-        ]
-      },
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      }
-    },
-    "UpdateInstance": {
-      "InstanceId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "InstanceId"
-          }
-        ]
-      },
-      "LayerIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "LayerIds"
-          }
-        ]
-      },
-      "InstanceType": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "InstanceType"
-          }
-        ]
-      },
-      "AutoScalingType": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "AutoScalingType"
-          }
-        ]
-      },
-      "Hostname": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "Hostname"
-          }
-        ]
-      },
-      "Os": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "Os"
-          }
-        ]
-      },
-      "AmiId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "AmiId"
-          }
-        ]
-      },
-      "SshKeyName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "SshKeyName"
-          }
-        ]
-      },
-      "Architecture": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "Architecture"
-          }
-        ]
-      },
-      "InstallUpdatesOnBoot": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "InstallUpdatesOnBoot"
-          }
-        ]
-      },
-      "EbsOptimized": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Instance",
-            "resourceIdentifier": "EbsOptimized"
-          }
-        ]
-      },
-      "AgentVersion": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "AgentVersion"
-          }
-        ]
-      }
-    },
-    "UpdateLayer": {
-      "LayerId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LayerId"
-          }
-        ]
-      },
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      },
-      "Shortname": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "Shortname"
-          }
-        ]
-      },
-      "Attributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "Attributes"
-          }
-        ]
-      },
-      "CloudWatchLogsConfiguration": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "CloudWatchLogsConfiguration"
-          }
-        ]
-      },
-      "CustomInstanceProfileArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "CustomInstanceProfileArn"
-          }
-        ]
-      },
-      "CustomJson": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "CustomJson"
-          }
-        ]
-      },
-      "CustomSecurityGroupIds": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "CustomSecurityGroupIds"
-          }
-        ]
-      },
-      "Packages": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "Packages"
-          }
-        ]
-      },
-      "VolumeConfigurations": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "VolumeConfigurations"
-          }
-        ]
-      },
-      "EnableAutoHealing": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "EnableAutoHealing"
-          }
-        ]
-      },
-      "AutoAssignElasticIps": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "AutoAssignElasticIps"
-          }
-        ]
-      },
-      "AutoAssignPublicIps": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "AutoAssignPublicIps"
-          }
-        ]
-      },
-      "CustomRecipes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "CustomRecipes"
-          }
-        ]
-      },
-      "InstallUpdatesOnBoot": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "InstallUpdatesOnBoot"
-          }
-        ]
-      },
-      "UseEbsOptimizedInstances": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "UseEbsOptimizedInstances"
-          }
-        ]
-      },
-      "LifecycleEventConfiguration": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Layer",
-            "resourceIdentifier": "LifecycleEventConfiguration"
-          }
-        ]
-      }
-    },
-    "UpdateMyUserProfile": {
-      "SshPublicKey": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "SshPublicKey"
-          }
-        ]
-      }
-    },
-    "UpdateStack": {
-      "StackId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "StackId"
-          }
-        ]
-      },
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      },
-      "Attributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "Attributes"
-          }
-        ]
-      },
-      "ServiceRoleArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ServiceRoleArn"
-          }
-        ]
-      },
-      "DefaultInstanceProfileArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultInstanceProfileArn"
-          }
-        ]
-      },
-      "DefaultOs": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultOs"
-          }
-        ]
-      },
-      "HostnameTheme": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "HostnameTheme"
-          }
-        ]
-      },
-      "DefaultAvailabilityZone": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultAvailabilityZone"
-          }
-        ]
-      },
-      "DefaultSubnetId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultSubnetId"
-          }
-        ]
-      },
-      "CustomJson": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "CustomJson"
-          }
-        ]
-      },
-      "ConfigurationManager": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ConfigurationManager"
-          }
-        ]
-      },
-      "ChefConfiguration": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "ChefConfiguration"
-          }
-        ]
-      },
-      "UseCustomCookbooks": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "UseCustomCookbooks"
-          }
-        ]
-      },
-      "CustomCookbooksSource": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "CustomCookbooksSource"
-          }
-        ]
-      },
-      "DefaultSshKeyName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultSshKeyName"
-          }
-        ]
-      },
-      "DefaultRootDeviceType": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "DefaultRootDeviceType"
-          }
-        ]
-      },
-      "UseOpsworksSecurityGroups": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "UseOpsworksSecurityGroups"
-          }
-        ]
-      },
-      "AgentVersion": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Stack",
-            "resourceIdentifier": "AgentVersion"
-          }
-        ]
-      }
-    },
-    "UpdateUserProfile": {
-      "IamUserArn": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "IamUserArn"
-          }
-        ]
-      },
-      "SshUsername": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "SshUsername"
-          }
-        ]
-      },
-      "SshPublicKey": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "SshPublicKey"
-          }
-        ]
-      },
-      "AllowSelfManagement": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "UserProfile",
-            "resourceIdentifier": "AllowSelfManagement"
-          }
-        ]
-      }
-    },
-    "UpdateVolume": {
-      "VolumeId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "VolumeId"
-          }
-        ]
-      },
-      "Name": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "Name"
-          }
-        ]
-      },
-      "MountPoint": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Volume",
-            "resourceIdentifier": "MountPoint"
-          }
-        ]
-      }
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://opsworks.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/paginators-1.json 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-{
-  "pagination": {
-    "DescribeEcsClusters": {
-      "input_token": "NextToken",
-      "output_token": "NextToken",
-      "limit_key": "MaxResults",
-      "result_key": "EcsClusters"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/service-2.json 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/service-2.json
--- 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,4984 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2013-02-18",
-    "endpointPrefix":"opsworks",
-    "jsonVersion":"1.1",
-    "protocol":"json",
-    "protocols":["json"],
-    "serviceFullName":"AWS OpsWorks",
-    "serviceId":"OpsWorks",
-    "signatureVersion":"v4",
-    "targetPrefix":"OpsWorks_20130218",
-    "uid":"opsworks-2013-02-18"
-  },
-  "operations":{
-    "AssignInstance":{
-      "name":"AssignInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AssignInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Assign a registered instance to a layer.</p> <ul> <li> <p>You can assign registered on-premises instances to any layer type.</p> </li> <li> <p>You can assign registered Amazon EC2 instances only to custom layers.</p> </li> <li> <p>You cannot use this action with instances that were created with OpsWorks Stacks.</p> </li> </ul> <p> <b>Required Permissions</b>: To use this action, an Identity and Access Management (IAM) user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "AssignVolume":{
-      "name":"AssignVolume",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AssignVolumeRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Assigns one of the stack's registered Amazon EBS volumes to a specified instance. The volume must first be registered with the stack by calling <a>RegisterVolume</a>. After you register the volume, you must call <a>UpdateVolume</a> to specify a mount point before calling <code>AssignVolume</code>. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "AssociateElasticIp":{
-      "name":"AssociateElasticIp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AssociateElasticIpRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Associates one of the stack's registered Elastic IP addresses with a specified instance. The address must first be registered with the stack by calling <a>RegisterElasticIp</a>. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "AttachElasticLoadBalancer":{
-      "name":"AttachElasticLoadBalancer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AttachElasticLoadBalancerRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Attaches an Elastic Load Balancing load balancer to a specified layer. OpsWorks Stacks does not support Application Load Balancer. You can only use Classic Load Balancer with OpsWorks Stacks. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/layers-elb.html\">Elastic Load Balancing</a>.</p> <note> <p>You must create the Elastic Load Balancing instance separately, by using the Elastic Load Balancing console, API, or CLI. For more information, see the <a href=\"https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/Welcome.html\">Elastic Load Balancing Developer Guide</a>.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CloneStack":{
-      "name":"CloneStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CloneStackRequest"},
-      "output":{"shape":"CloneStackResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Creates a clone of a specified stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-cloning.html\">Clone a Stack</a>. By default, all parameters are set to the values used by the parent stack.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateApp":{
-      "name":"CreateApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateAppRequest"},
-      "output":{"shape":"CreateAppResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Creates an app for a specified stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Creating Apps</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateDeployment":{
-      "name":"CreateDeployment",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateDeploymentRequest"},
-      "output":{"shape":"CreateDeploymentResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Runs deployment or stack commands. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-deploying.html\">Deploying Apps</a> and <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-commands.html\">Run Stack Commands</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Deploy or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateInstance":{
-      "name":"CreateInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateInstanceRequest"},
-      "output":{"shape":"CreateInstanceResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Creates an instance in a specified stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html\">Adding an Instance to a Layer</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateLayer":{
-      "name":"CreateLayer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateLayerRequest"},
-      "output":{"shape":"CreateLayerResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Creates a layer. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-create.html\">How to Create a Layer</a>.</p> <note> <p>You should use <b>CreateLayer</b> for noncustom layer types such as PHP App Server only if the stack does not have an existing layer of that type. A stack can have at most one instance of each noncustom layer; if you attempt to create a second instance, <b>CreateLayer</b> fails. A stack can have an arbitrary number of custom layers, so you can call <b>CreateLayer</b> as many times as you like for that layer type.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateStack":{
-      "name":"CreateStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateStackRequest"},
-      "output":{"shape":"CreateStackResult"},
-      "errors":[
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p>Creates a new stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-edit.html\">Create a New Stack</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "CreateUserProfile":{
-      "name":"CreateUserProfile",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateUserProfileRequest"},
-      "output":{"shape":"CreateUserProfileResult"},
-      "errors":[
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p>Creates a new user profile.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeleteApp":{
-      "name":"DeleteApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteAppRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deletes a specified app.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeleteInstance":{
-      "name":"DeleteInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deletes a specified instance, which terminates the associated Amazon EC2 instance. You must stop an instance before you can delete it.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-delete.html\">Deleting Instances</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeleteLayer":{
-      "name":"DeleteLayer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteLayerRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deletes a specified layer. You must first stop and then delete all associated instances or unassign registered instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-delete.html\">How to Delete a Layer</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeleteStack":{
-      "name":"DeleteStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteStackRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deletes a specified stack. You must first delete all instances, layers, and apps or deregister registered instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-shutting.html\">Shut Down a Stack</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeleteUserProfile":{
-      "name":"DeleteUserProfile",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteUserProfileRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deletes a user profile.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeregisterEcsCluster":{
-      "name":"DeregisterEcsCluster",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeregisterEcsClusterRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deregisters a specified Amazon ECS cluster from a stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-ecscluster.html#workinglayers-ecscluster-delete\"> Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html</a>.</p>"
-    },
-    "DeregisterElasticIp":{
-      "name":"DeregisterElasticIp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeregisterElasticIpRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deregisters a specified Elastic IP address. The address can be registered by another stack after it is deregistered. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeregisterInstance":{
-      "name":"DeregisterInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeregisterInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deregister an instance from OpsWorks Stacks. The instance can be a registered instance (Amazon EC2 or on-premises) or an instance created with OpsWorks. This action removes the instance from the stack and returns it to your control.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeregisterRdsDbInstance":{
-      "name":"DeregisterRdsDbInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeregisterRdsDbInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deregisters an Amazon RDS instance.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DeregisterVolume":{
-      "name":"DeregisterVolume",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeregisterVolumeRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Deregisters an Amazon EBS volume. The volume can then be registered by another stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeAgentVersions":{
-      "name":"DescribeAgentVersions",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeAgentVersionsRequest"},
-      "output":{"shape":"DescribeAgentVersionsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes the available OpsWorks Stacks agent versions. You must specify a stack ID or a configuration manager. <code>DescribeAgentVersions</code> returns a list of available agent versions for the specified stack or configuration manager.</p>"
-    },
-    "DescribeApps":{
-      "name":"DescribeApps",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeAppsRequest"},
-      "output":{"shape":"DescribeAppsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of a specified set of apps.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeCommands":{
-      "name":"DescribeCommands",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeCommandsRequest"},
-      "output":{"shape":"DescribeCommandsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes the results of specified commands.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeDeployments":{
-      "name":"DescribeDeployments",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeDeploymentsRequest"},
-      "output":{"shape":"DescribeDeploymentsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of a specified set of deployments.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeEcsClusters":{
-      "name":"DescribeEcsClusters",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeEcsClustersRequest"},
-      "output":{"shape":"DescribeEcsClustersResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes Amazon ECS clusters that are registered with a stack. If you specify only a stack ID, you can use the <code>MaxResults</code> and <code>NextToken</code> parameters to paginate the response. However, OpsWorks Stacks currently supports only one cluster per layer, so the result set has a maximum of one element.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack or an attached policy that explicitly grants permission. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p> <p>This call accepts only one resource-identifying parameter.</p>"
-    },
-    "DescribeElasticIps":{
-      "name":"DescribeElasticIps",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeElasticIpsRequest"},
-      "output":{"shape":"DescribeElasticIpsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP addresses</a>.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeElasticLoadBalancers":{
-      "name":"DescribeElasticLoadBalancers",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeElasticLoadBalancersRequest"},
-      "output":{"shape":"DescribeElasticLoadBalancersResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes a stack's Elastic Load Balancing instances.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeInstances":{
-      "name":"DescribeInstances",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeInstancesRequest"},
-      "output":{"shape":"DescribeInstancesResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of a set of instances.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeLayers":{
-      "name":"DescribeLayers",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeLayersRequest"},
-      "output":{"shape":"DescribeLayersResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of one or more layers in a specified stack.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeLoadBasedAutoScaling":{
-      "name":"DescribeLoadBasedAutoScaling",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeLoadBasedAutoScalingRequest"},
-      "output":{"shape":"DescribeLoadBasedAutoScalingResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes load-based auto scaling configurations for specified layers.</p> <note> <p>You must specify at least one of the parameters.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeMyUserProfile":{
-      "name":"DescribeMyUserProfile",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "output":{"shape":"DescribeMyUserProfileResult"},
-      "documentation":"<p>Describes a user's SSH information.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have self-management enabled or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeOperatingSystems":{
-      "name":"DescribeOperatingSystems",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "output":{"shape":"DescribeOperatingSystemsResponse"},
-      "documentation":"<p>Describes the operating systems that are supported by OpsWorks Stacks.</p>"
-    },
-    "DescribePermissions":{
-      "name":"DescribePermissions",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribePermissionsRequest"},
-      "output":{"shape":"DescribePermissionsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes the permissions for a specified stack.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeRaidArrays":{
-      "name":"DescribeRaidArrays",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeRaidArraysRequest"},
-      "output":{"shape":"DescribeRaidArraysResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describe an instance's RAID arrays.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeRdsDbInstances":{
-      "name":"DescribeRdsDbInstances",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeRdsDbInstancesRequest"},
-      "output":{"shape":"DescribeRdsDbInstancesResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes Amazon RDS instances.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p> <p>This call accepts only one resource-identifying parameter.</p>"
-    },
-    "DescribeServiceErrors":{
-      "name":"DescribeServiceErrors",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeServiceErrorsRequest"},
-      "output":{"shape":"DescribeServiceErrorsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes OpsWorks Stacks service errors.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p> <p>This call accepts only one resource-identifying parameter.</p>"
-    },
-    "DescribeStackProvisioningParameters":{
-      "name":"DescribeStackProvisioningParameters",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStackProvisioningParametersRequest"},
-      "output":{"shape":"DescribeStackProvisioningParametersResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of a stack's provisioning parameters.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeStackSummary":{
-      "name":"DescribeStackSummary",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStackSummaryRequest"},
-      "output":{"shape":"DescribeStackSummaryResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes the number of layers and apps in a specified stack, and the number of instances in each state, such as <code>running_setup</code> or <code>online</code>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeStacks":{
-      "name":"DescribeStacks",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeStacksRequest"},
-      "output":{"shape":"DescribeStacksResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Requests a description of one or more stacks.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeTimeBasedAutoScaling":{
-      "name":"DescribeTimeBasedAutoScaling",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeTimeBasedAutoScalingRequest"},
-      "output":{"shape":"DescribeTimeBasedAutoScalingResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes time-based auto scaling configurations for specified instances.</p> <note> <p>You must specify at least one of the parameters.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeUserProfiles":{
-      "name":"DescribeUserProfiles",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeUserProfilesRequest"},
-      "output":{"shape":"DescribeUserProfilesResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describe specified users.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DescribeVolumes":{
-      "name":"DescribeVolumes",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeVolumesRequest"},
-      "output":{"shape":"DescribeVolumesResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Describes an instance's Amazon EBS volumes.</p> <note> <p>This call accepts only one resource-identifying parameter.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Show, Deploy, or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DetachElasticLoadBalancer":{
-      "name":"DetachElasticLoadBalancer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DetachElasticLoadBalancerRequest"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Detaches a specified Elastic Load Balancing instance from its layer.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "DisassociateElasticIp":{
-      "name":"DisassociateElasticIp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DisassociateElasticIpRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Disassociates an Elastic IP address from its instance. The address remains registered with the stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "GetHostnameSuggestion":{
-      "name":"GetHostnameSuggestion",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetHostnameSuggestionRequest"},
-      "output":{"shape":"GetHostnameSuggestionResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Gets a generated host name for the specified layer, based on the current host name theme.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "GrantAccess":{
-      "name":"GrantAccess",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GrantAccessRequest"},
-      "output":{"shape":"GrantAccessResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<note> <p>This action can be used only with Windows stacks.</p> </note> <p>Grants RDP access to a Windows instance for a specified time period.</p>"
-    },
-    "ListTags":{
-      "name":"ListTags",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListTagsRequest"},
-      "output":{"shape":"ListTagsResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Returns a list of tags that are applied to the specified stack or layer.</p>"
-    },
-    "RebootInstance":{
-      "name":"RebootInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RebootInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Reboots a specified instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html\">Starting, Stopping, and Rebooting Instances</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "RegisterEcsCluster":{
-      "name":"RegisterEcsCluster",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RegisterEcsClusterRequest"},
-      "output":{"shape":"RegisterEcsClusterResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Registers a specified Amazon ECS cluster with a stack. You can register only one cluster with a stack. A cluster can be registered with only one stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-ecscluster.html\"> Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\"> Managing User Permissions</a>.</p>"
-    },
-    "RegisterElasticIp":{
-      "name":"RegisterElasticIp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RegisterElasticIpRequest"},
-      "output":{"shape":"RegisterElasticIpResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Registers an Elastic IP address with a specified stack. An address can be registered with only one stack at a time. If the address is already registered, you must first deregister it by calling <a>DeregisterElasticIp</a>. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "RegisterInstance":{
-      "name":"RegisterInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RegisterInstanceRequest"},
-      "output":{"shape":"RegisterInstanceResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Registers instances that were created outside of OpsWorks Stacks with a specified stack.</p> <note> <p>We do not recommend using this action to register instances. The complete registration operation includes two tasks: installing the OpsWorks Stacks agent on the instance, and registering the instance with the stack. <code>RegisterInstance</code> handles only the second step. You should instead use the CLI <code>register</code> command, which performs the entire registration operation. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-register.html\"> Registering an Instance with an OpsWorks Stacks Stack</a>.</p> </note> <p>Registered instances have the same requirements as instances that are created by using the <a>CreateInstance</a> API. For example, registered instances must be running a supported Linux-based operating system, and they must have a supported instance type. For more information about requirements for instances that you want to register, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-register-registering-preparer.html\"> Preparing the Instance</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "RegisterRdsDbInstance":{
-      "name":"RegisterRdsDbInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RegisterRdsDbInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Registers an Amazon RDS instance with a stack.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "RegisterVolume":{
-      "name":"RegisterVolume",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RegisterVolumeRequest"},
-      "output":{"shape":"RegisterVolumeResult"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Registers an Amazon EBS volume with a specified stack. A volume can be registered with only one stack at a time. If the volume is already registered, you must first deregister it by calling <a>DeregisterVolume</a>. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "SetLoadBasedAutoScaling":{
-      "name":"SetLoadBasedAutoScaling",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"SetLoadBasedAutoScalingRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Specify the load-based auto scaling configuration for a specified layer. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html\">Managing Load with Time-based and Load-based Instances</a>.</p> <note> <p>To use load-based auto scaling, you must create a set of load-based auto scaling instances. Load-based auto scaling operates only on the instances from that set, so you must ensure that you have created enough instances to handle the maximum anticipated load.</p> </note> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "SetPermission":{
-      "name":"SetPermission",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"SetPermissionRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Specifies a user's permissions. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingsecurity.html\">Security and Permissions</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "SetTimeBasedAutoScaling":{
-      "name":"SetTimeBasedAutoScaling",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"SetTimeBasedAutoScalingRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Specify the time-based auto scaling configuration for a specified instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html\">Managing Load with Time-based and Load-based Instances</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "StartInstance":{
-      "name":"StartInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Starts a specified instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html\">Starting, Stopping, and Rebooting Instances</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "StartStack":{
-      "name":"StartStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartStackRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Starts a stack's instances.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "StopInstance":{
-      "name":"StopInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StopInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Stops a specified instance. When you stop a standard instance, the data disappears and must be reinstalled when you restart the instance. You can stop an Amazon EBS-backed instance without losing data. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html\">Starting, Stopping, and Rebooting Instances</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "StopStack":{
-      "name":"StopStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StopStackRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Stops a specified stack.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Apply cost-allocation tags to a specified stack or layer in OpsWorks Stacks. For more information about how tagging works, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/tagging.html\">Tags</a> in the OpsWorks User Guide.</p>"
-    },
-    "UnassignInstance":{
-      "name":"UnassignInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UnassignInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Unassigns a registered instance from all layers that are using the instance. The instance remains in the stack as an unassigned instance, and can be assigned to another layer as needed. You cannot use this action with instances that were created with OpsWorks Stacks.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UnassignVolume":{
-      "name":"UnassignVolume",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UnassignVolumeRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Unassigns an assigned Amazon EBS volume. The volume remains registered with the stack. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Removes tags from a specified stack or layer.</p>"
-    },
-    "UpdateApp":{
-      "name":"UpdateApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateAppRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a specified app.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Deploy or Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateElasticIp":{
-      "name":"UpdateElasticIp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateElasticIpRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a registered Elastic IP address's name. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateInstance":{
-      "name":"UpdateInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a specified instance.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateLayer":{
-      "name":"UpdateLayer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateLayerRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a specified layer.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateMyUserProfile":{
-      "name":"UpdateMyUserProfile",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateMyUserProfileRequest"},
-      "errors":[
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p>Updates a user's SSH public key.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have self-management enabled or an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateRdsDbInstance":{
-      "name":"UpdateRdsDbInstance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateRdsDbInstanceRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates an Amazon RDS instance.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateStack":{
-      "name":"UpdateStack",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateStackRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a specified stack.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateUserProfile":{
-      "name":"UpdateUserProfile",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateUserProfileRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates a specified user profile.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have an attached policy that explicitly grants permissions. For more information about user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    },
-    "UpdateVolume":{
-      "name":"UpdateVolume",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateVolumeRequest"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates an Amazon EBS volume's name or mount point. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/resources.html\">Resource Management</a>.</p> <p> <b>Required Permissions</b>: To use this action, an IAM user must have a Manage permissions level for the stack, or an attached policy that explicitly grants permissions. For more information on user permissions, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-    }
-  },
-  "shapes":{
-    "AgentVersion":{
-      "type":"structure",
-      "members":{
-        "Version":{
-          "shape":"String",
-          "documentation":"<p>The agent version.</p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager.</p>"
-        }
-      },
-      "documentation":"<p>Describes an agent version.</p>"
-    },
-    "AgentVersions":{
-      "type":"list",
-      "member":{"shape":"AgentVersion"}
-    },
-    "App":{
-      "type":"structure",
-      "members":{
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The app stack ID.</p>"
-        },
-        "Shortname":{
-          "shape":"String",
-          "documentation":"<p>The app's short name.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The app name.</p>"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p>A description of the app.</p>"
-        },
-        "DataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The app's data sources.</p>"
-        },
-        "Type":{
-          "shape":"AppType",
-          "documentation":"<p>The app type.</p>"
-        },
-        "AppSource":{
-          "shape":"Source",
-          "documentation":"<p>A <code>Source</code> object that describes the app repository.</p>"
-        },
-        "Domains":{
-          "shape":"Strings",
-          "documentation":"<p>The app vhost settings with multiple domains separated by commas. For example: <code>'www.example.com, example.com'</code> </p>"
-        },
-        "EnableSsl":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to enable SSL for the app.</p>"
-        },
-        "SslConfiguration":{
-          "shape":"SslConfiguration",
-          "documentation":"<p>An <code>SslConfiguration</code> object with the SSL configuration.</p>"
-        },
-        "Attributes":{
-          "shape":"AppAttributes",
-          "documentation":"<p>The stack attributes.</p>"
-        },
-        "CreatedAt":{
-          "shape":"String",
-          "documentation":"<p>When the app was created.</p>"
-        },
-        "Environment":{
-          "shape":"EnvironmentVariables",
-          "documentation":"<p>An array of <code>EnvironmentVariable</code> objects that specify environment variables to be associated with the app. After you deploy the app, these variables are defined on the associated app server instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment\"> Environment Variables</a>. </p> <note> <p>There is no specific limit on the number of environment variables. However, the size of the associated data structure - which includes the variable names, values, and protected flag values - cannot exceed 20 KB. This limit should accommodate most if not all use cases, but if you do exceed it, you will cause an exception (API) with an \"Environment: is too large (maximum is 20 KB)\" message.</p> </note>"
-        }
-      },
-      "documentation":"<p>A description of the app.</p>"
-    },
-    "AppAttributes":{
-      "type":"map",
-      "key":{"shape":"AppAttributesKeys"},
-      "value":{"shape":"String"}
-    },
-    "AppAttributesKeys":{
-      "type":"string",
-      "enum":[
-        "DocumentRoot",
-        "RailsEnv",
-        "AutoBundleOnDeploy",
-        "AwsFlowRubySettings"
-      ]
-    },
-    "AppType":{
-      "type":"string",
-      "enum":[
-        "aws-flow-ruby",
-        "java",
-        "rails",
-        "php",
-        "nodejs",
-        "static",
-        "other"
-      ]
-    },
-    "Apps":{
-      "type":"list",
-      "member":{"shape":"App"}
-    },
-    "Architecture":{
-      "type":"string",
-      "enum":[
-        "x86_64",
-        "i386"
-      ]
-    },
-    "AssignInstanceRequest":{
-      "type":"structure",
-      "required":[
-        "InstanceId",
-        "LayerIds"
-      ],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>The layer ID, which must correspond to a custom layer. You cannot assign a registered instance to a built-in layer.</p>"
-        }
-      }
-    },
-    "AssignVolumeRequest":{
-      "type":"structure",
-      "required":["VolumeId"],
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The volume ID.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "AssociateElasticIpRequest":{
-      "type":"structure",
-      "required":["ElasticIp"],
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "AttachElasticLoadBalancerRequest":{
-      "type":"structure",
-      "required":[
-        "ElasticLoadBalancerName",
-        "LayerId"
-      ],
-      "members":{
-        "ElasticLoadBalancerName":{
-          "shape":"String",
-          "documentation":"<p>The Elastic Load Balancing instance's name.</p>"
-        },
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the layer to which the Elastic Load Balancing instance is to be attached.</p>"
-        }
-      }
-    },
-    "AutoScalingThresholds":{
-      "type":"structure",
-      "members":{
-        "InstanceCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances to add or remove when the load exceeds a threshold.</p>"
-        },
-        "ThresholdsWaitTime":{
-          "shape":"Minute",
-          "documentation":"<p>The amount of time, in minutes, that the load must exceed a threshold before more instances are added or removed.</p>"
-        },
-        "IgnoreMetricsTime":{
-          "shape":"Minute",
-          "documentation":"<p>The amount of time (in minutes) after a scaling event occurs that OpsWorks Stacks should ignore metrics and suppress additional scaling events. For example, OpsWorks Stacks adds new instances following an upscaling event but the instances won't start reducing the load until they have been booted and configured. There is no point in raising additional scaling events during that operation, which typically takes several minutes. <code>IgnoreMetricsTime</code> allows you to direct OpsWorks Stacks to suppress scaling events long enough to get the new instances online.</p>"
-        },
-        "CpuThreshold":{
-          "shape":"Double",
-          "documentation":"<p>The CPU utilization threshold, as a percent of the available CPU. A value of -1 disables the threshold.</p>"
-        },
-        "MemoryThreshold":{
-          "shape":"Double",
-          "documentation":"<p>The memory utilization threshold, as a percent of the available memory. A value of -1 disables the threshold.</p>"
-        },
-        "LoadThreshold":{
-          "shape":"Double",
-          "documentation":"<p>The load threshold. A value of -1 disables the threshold. For more information about how load is computed, see <a href=\"http://en.wikipedia.org/wiki/Load_%28computing%29\">Load (computing)</a>.</p>"
-        },
-        "Alarms":{
-          "shape":"Strings",
-          "documentation":"<p>Custom CloudWatch auto scaling alarms, to be used as thresholds. This parameter takes a list of up to five alarm names, which are case sensitive and must be in the same region as the stack.</p> <note> <p>To use custom alarms, you must update your service role to allow <code>cloudwatch:DescribeAlarms</code>. You can either have OpsWorks Stacks update the role for you when you first use this feature or you can edit the role manually. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-servicerole.html\">Allowing OpsWorks Stacks to Act on Your Behalf</a>.</p> </note>"
-        }
-      },
-      "documentation":"<p>Describes a load-based auto scaling upscaling or downscaling threshold configuration, which specifies when OpsWorks Stacks starts or stops load-based instances.</p>"
-    },
-    "AutoScalingType":{
-      "type":"string",
-      "enum":[
-        "load",
-        "timer"
-      ]
-    },
-    "BlockDeviceMapping":{
-      "type":"structure",
-      "members":{
-        "DeviceName":{
-          "shape":"String",
-          "documentation":"<p>The device name that is exposed to the instance, such as <code>/dev/sdh</code>. For the root device, you can use the explicit device name or you can set this parameter to <code>ROOT_DEVICE</code> and OpsWorks Stacks will provide the correct device name.</p>"
-        },
-        "NoDevice":{
-          "shape":"String",
-          "documentation":"<p>Suppresses the specified device included in the AMI's block device mapping.</p>"
-        },
-        "VirtualName":{
-          "shape":"String",
-          "documentation":"<p>The virtual device name. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html\">BlockDeviceMapping</a>.</p>"
-        },
-        "Ebs":{
-          "shape":"EbsBlockDevice",
-          "documentation":"<p>An <code>EBSBlockDevice</code> that defines how to configure an Amazon EBS volume when the instance is launched.</p>"
-        }
-      },
-      "documentation":"<p>Describes a block device mapping. This data type maps directly to the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html\">BlockDeviceMapping</a> data type. </p>"
-    },
-    "BlockDeviceMappings":{
-      "type":"list",
-      "member":{"shape":"BlockDeviceMapping"}
-    },
-    "Boolean":{
-      "type":"boolean",
-      "box":true
-    },
-    "ChefConfiguration":{
-      "type":"structure",
-      "members":{
-        "ManageBerkshelf":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to enable Berkshelf.</p>"
-        },
-        "BerkshelfVersion":{
-          "shape":"String",
-          "documentation":"<p>The Berkshelf version.</p>"
-        }
-      },
-      "documentation":"<p>Describes the Chef configuration.</p>"
-    },
-    "CloneStackRequest":{
-      "type":"structure",
-      "required":[
-        "SourceStackId",
-        "ServiceRoleArn"
-      ],
-      "members":{
-        "SourceStackId":{
-          "shape":"String",
-          "documentation":"<p>The source stack ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The cloned stack name. Stack names can be a maximum of 64 characters.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The cloned stack Amazon Web Services Region, such as <code>ap-northeast-2</code>. For more information about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC that the cloned stack is to be launched into. It must be in the specified region. All instances are launched into this VPC, and you cannot change the ID later.</p> <ul> <li> <p>If your account supports EC2 Classic, the default value is no VPC.</p> </li> <li> <p>If your account does not support EC2 Classic, the default value is the default VPC for the specified region.</p> </li> </ul> <p>If the VPC ID corresponds to a default VPC and you have specified either the <code>DefaultAvailabilityZone</code> or the <code>DefaultSubnetId</code> parameter only, OpsWorks Stacks infers the value of the other parameter. If you specify neither parameter, OpsWorks Stacks sets these parameters to the first valid Availability Zone for the specified region and the corresponding default VPC subnet ID, respectively. </p> <p>If you specify a nondefault VPC ID, note the following:</p> <ul> <li> <p>It must belong to a VPC in your account that is in the specified region.</p> </li> <li> <p>You must specify a value for <code>DefaultSubnetId</code>.</p> </li> </ul> <p>For more information about how to use OpsWorks Stacks with a VPC, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-vpc.html\">Running a Stack in a VPC</a>. For more information about default VPC and EC2 Classic, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html\">Supported Platforms</a>. </p>"
-        },
-        "Attributes":{
-          "shape":"StackAttributes",
-          "documentation":"<p>A list of stack attributes and values as key/value pairs to be added to the cloned stack.</p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p>The stack Identity and Access Management (IAM) role, which allows OpsWorks Stacks to work with Amazon Web Services resources on your behalf. You must set this parameter to the Amazon Resource Name (ARN) for an existing IAM role. If you create a stack by using the OpsWorkss Stacks console, it creates the role for you. You can obtain an existing stack's IAM ARN programmatically by calling <a>DescribePermissions</a>. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p> <note> <p>You must set this parameter to a valid service role ARN or the action will fail; there is no default value. You can specify the source stack's service role ARN, if you prefer, but you must do so explicitly.</p> </note>"
-        },
-        "DefaultInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM profile that is the default profile for all of the stack's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "DefaultOs":{
-          "shape":"String",
-          "documentation":"<p>The stack's operating system, which must be set to one of the following.</p> <ul> <li> <p>A supported Linux operating system: An Amazon Linux version, such as <code>Amazon Linux 2</code>, <code>Amazon Linux 2018.03</code>, <code>Amazon Linux 2017.09</code>, <code>Amazon Linux 2017.03</code>, <code>Amazon Linux 2016.09</code>, <code>Amazon Linux 2016.03</code>, <code>Amazon Linux 2015.09</code>, or <code>Amazon Linux 2015.03</code>.</p> </li> <li> <p>A supported Ubuntu operating system, such as <code>Ubuntu 18.04 LTS</code>, <code>Ubuntu 16.04 LTS</code>, <code>Ubuntu 14.04 LTS</code>, or <code>Ubuntu 12.04 LTS</code>.</p> </li> <li> <p> <code>CentOS Linux 7</code> </p> </li> <li> <p> <code>Red Hat Enterprise Linux 7</code> </p> </li> <li> <p> <code>Microsoft Windows Server 2012 R2 Base</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Express</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Standard</code>, or <code>Microsoft Windows Server 2012 R2 with SQL Server Web</code>.</p> </li> <li> <p>A custom AMI: <code>Custom</code>. You specify the custom AMI you want to use when you create instances. For more information about how to use custom AMIs with OpsWorks, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Using Custom AMIs</a>.</p> </li> </ul> <p>The default option is the parent stack's operating system. Not all operating systems are supported with all versions of Chef. For more information about supported operating systems, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html\">OpsWorks Stacks Operating Systems</a>.</p> <note> <p>You can specify a different Linux operating system for the cloned stack, but you cannot change from Linux to Windows or Windows to Linux.</p> </note>"
-        },
-        "HostnameTheme":{
-          "shape":"String",
-          "documentation":"<p>The stack's host name theme, with spaces are replaced by underscores. The theme is used to generate host names for the stack's instances. By default, <code>HostnameTheme</code> is set to <code>Layer_Dependent</code>, which creates host names by appending integers to the layer's short name. The other themes are:</p> <ul> <li> <p> <code>Baked_Goods</code> </p> </li> <li> <p> <code>Clouds</code> </p> </li> <li> <p> <code>Europe_Cities</code> </p> </li> <li> <p> <code>Fruits</code> </p> </li> <li> <p> <code>Greek_Deities_and_Titans</code> </p> </li> <li> <p> <code>Legendary_creatures_from_Japan</code> </p> </li> <li> <p> <code>Planets_and_Moons</code> </p> </li> <li> <p> <code>Roman_Deities</code> </p> </li> <li> <p> <code>Scottish_Islands</code> </p> </li> <li> <p> <code>US_Cities</code> </p> </li> <li> <p> <code>Wild_Cats</code> </p> </li> </ul> <p>To obtain a generated host name, call <code>GetHostNameSuggestion</code>, which returns a host name based on the current theme.</p>"
-        },
-        "DefaultAvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The cloned stack's default Availability Zone, which must be in the specified region. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>. If you also specify a value for <code>DefaultSubnetId</code>, the subnet must be in the same zone. For more information, see the <code>VpcId</code> parameter description. </p>"
-        },
-        "DefaultSubnetId":{
-          "shape":"String",
-          "documentation":"<p>The stack's default VPC subnet ID. This parameter is required if you specify a value for the <code>VpcId</code> parameter. All instances are launched into this subnet unless you specify otherwise when you create the instance. If you also specify a value for <code>DefaultAvailabilityZone</code>, the subnet must be in that zone. For information on default values and when this parameter is required, see the <code>VpcId</code> parameter description. </p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A string that contains user-defined, custom JSON. It is used to override the corresponding default stack configuration JSON values. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information about custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a> </p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager. When you clone a stack we recommend that you use the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is currently 12.</p>"
-        },
-        "ChefConfiguration":{
-          "shape":"ChefConfiguration",
-          "documentation":"<p>A <code>ChefConfiguration</code> object that specifies whether to enable Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "UseCustomCookbooks":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to use custom cookbooks.</p>"
-        },
-        "UseOpsworksSecurityGroups":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to associate the OpsWorks Stacks built-in security groups with the stack's layers.</p> <p>OpsWorks Stacks provides a standard set of security groups, one for each layer, which are associated with layers by default. With <code>UseOpsworksSecurityGroups</code> you can instead provide your own custom security groups. <code>UseOpsworksSecurityGroups</code> has the following settings: </p> <ul> <li> <p>True - OpsWorks Stacks automatically associates the appropriate built-in security group with each layer (default setting). You can associate additional security groups with a layer after you create it but you cannot delete the built-in security group.</p> </li> <li> <p>False - OpsWorks Stacks does not associate built-in security groups with layers. You must create appropriate Amazon EC2 security groups and associate a security group with each layer that you create. However, you can still manually associate a built-in security group with a layer on creation; custom security groups are required only for those layers that need custom settings.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "CustomCookbooksSource":{
-          "shape":"Source",
-          "documentation":"<p>Contains the information required to retrieve an app or cookbook from a repository. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Adding Apps</a> or <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html\">Cookbooks and Recipes</a>.</p>"
-        },
-        "DefaultSshKeyName":{
-          "shape":"String",
-          "documentation":"<p>A default Amazon EC2 key pair name. The default value is none. If you specify a key pair name, OpsWorks installs the public key on the instance and you can use the private key with an SSH client to log in to the instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html\"> Using SSH to Communicate with an Instance</a> and <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html\"> Managing SSH Access</a>. You can override this setting by specifying a different key pair, or no key pair, when you <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html\"> create an instance</a>. </p>"
-        },
-        "ClonePermissions":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to clone the source stack's permissions.</p>"
-        },
-        "CloneAppIds":{
-          "shape":"Strings",
-          "documentation":"<p>A list of source stack app IDs to be included in the cloned stack.</p>"
-        },
-        "DefaultRootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The default root device type. This value is used by default for all instances in the cloned stack, but you can override it when you create an instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>.</p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The default OpsWorks Stacks agent version. You have the following options:</p> <ul> <li> <p>Auto-update - Set this parameter to <code>LATEST</code>. OpsWorks Stacks automatically installs new agent versions on the stack's instances as soon as they are available.</p> </li> <li> <p>Fixed version - Set this parameter to your preferred agent version. To update the agent version, you must edit the stack configuration and specify a new version. OpsWorks Stacks automatically installs that version on the stack's instances.</p> </li> </ul> <p>The default setting is <code>LATEST</code>. To specify an agent version, you must use the complete version number, not the abbreviated number shown on the console. For a list of available agent version numbers, call <a>DescribeAgentVersions</a>. AgentVersion cannot be set to Chef 12.2.</p> <note> <p>You can also specify an agent version when you create or update an instance, which overrides the stack's default setting.</p> </note>"
-        }
-      }
-    },
-    "CloneStackResult":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The cloned stack ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CloneStack</code> request.</p>"
-    },
-    "CloudWatchLogsConfiguration":{
-      "type":"structure",
-      "members":{
-        "Enabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether CloudWatch Logs is enabled for a layer.</p>"
-        },
-        "LogStreams":{
-          "shape":"CloudWatchLogsLogStreams",
-          "documentation":"<p>A list of configuration options for CloudWatch Logs.</p>"
-        }
-      },
-      "documentation":"<p>Describes the Amazon CloudWatch Logs configuration for a layer.</p>"
-    },
-    "CloudWatchLogsEncoding":{
-      "type":"string",
-      "documentation":"<p>Specifies the encoding of the log file so that the file can be read correctly. The default is <code>utf_8</code>. Encodings supported by Python <code>codecs.decode()</code> can be used here.</p>",
-      "enum":[
-        "ascii",
-        "big5",
-        "big5hkscs",
-        "cp037",
-        "cp424",
-        "cp437",
-        "cp500",
-        "cp720",
-        "cp737",
-        "cp775",
-        "cp850",
-        "cp852",
-        "cp855",
-        "cp856",
-        "cp857",
-        "cp858",
-        "cp860",
-        "cp861",
-        "cp862",
-        "cp863",
-        "cp864",
-        "cp865",
-        "cp866",
-        "cp869",
-        "cp874",
-        "cp875",
-        "cp932",
-        "cp949",
-        "cp950",
-        "cp1006",
-        "cp1026",
-        "cp1140",
-        "cp1250",
-        "cp1251",
-        "cp1252",
-        "cp1253",
-        "cp1254",
-        "cp1255",
-        "cp1256",
-        "cp1257",
-        "cp1258",
-        "euc_jp",
-        "euc_jis_2004",
-        "euc_jisx0213",
-        "euc_kr",
-        "gb2312",
-        "gbk",
-        "gb18030",
-        "hz",
-        "iso2022_jp",
-        "iso2022_jp_1",
-        "iso2022_jp_2",
-        "iso2022_jp_2004",
-        "iso2022_jp_3",
-        "iso2022_jp_ext",
-        "iso2022_kr",
-        "latin_1",
-        "iso8859_2",
-        "iso8859_3",
-        "iso8859_4",
-        "iso8859_5",
-        "iso8859_6",
-        "iso8859_7",
-        "iso8859_8",
-        "iso8859_9",
-        "iso8859_10",
-        "iso8859_13",
-        "iso8859_14",
-        "iso8859_15",
-        "iso8859_16",
-        "johab",
-        "koi8_r",
-        "koi8_u",
-        "mac_cyrillic",
-        "mac_greek",
-        "mac_iceland",
-        "mac_latin2",
-        "mac_roman",
-        "mac_turkish",
-        "ptcp154",
-        "shift_jis",
-        "shift_jis_2004",
-        "shift_jisx0213",
-        "utf_32",
-        "utf_32_be",
-        "utf_32_le",
-        "utf_16",
-        "utf_16_be",
-        "utf_16_le",
-        "utf_7",
-        "utf_8",
-        "utf_8_sig"
-      ]
-    },
-    "CloudWatchLogsInitialPosition":{
-      "type":"string",
-      "documentation":"<p>Specifies where to start to read data (start_of_file or end_of_file). The default is start_of_file. It's only used if there is no state persisted for that log stream.</p>",
-      "enum":[
-        "start_of_file",
-        "end_of_file"
-      ]
-    },
-    "CloudWatchLogsLogStream":{
-      "type":"structure",
-      "members":{
-        "LogGroupName":{
-          "shape":"String",
-          "documentation":"<p>Specifies the destination log group. A log group is created automatically if it doesn't already exist. Log group names can be between 1 and 512 characters long. Allowed characters include a-z, A-Z, 0-9, '_' (underscore), '-' (hyphen), '/' (forward slash), and '.' (period).</p>"
-        },
-        "DatetimeFormat":{
-          "shape":"String",
-          "documentation":"<p>Specifies how the time stamp is extracted from logs. For more information, see the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html\">CloudWatch Logs Agent Reference</a>.</p>"
-        },
-        "TimeZone":{
-          "shape":"CloudWatchLogsTimeZone",
-          "documentation":"<p>Specifies the time zone of log event time stamps.</p>"
-        },
-        "File":{
-          "shape":"String",
-          "documentation":"<p>Specifies log files that you want to push to CloudWatch Logs.</p> <p> <code>File</code> can point to a specific file or multiple files (by using wild card characters such as <code>/var/log/system.log*</code>). Only the latest file is pushed to CloudWatch Logs, based on file modification time. We recommend that you use wild card characters to specify a series of files of the same type, such as <code>access_log.2014-06-01-01</code>, <code>access_log.2014-06-01-02</code>, and so on by using a pattern like <code>access_log.*</code>. Don't use a wildcard to match multiple file types, such as <code>access_log_80</code> and <code>access_log_443</code>. To specify multiple, different file types, add another log stream entry to the configuration file, so that each log file type is stored in a different log group.</p> <p>Zipped files are not supported.</p>"
-        },
-        "FileFingerprintLines":{
-          "shape":"String",
-          "documentation":"<p>Specifies the range of lines for identifying a file. The valid values are one number, or two dash-delimited numbers, such as '1', '2-5'. The default value is '1', meaning the first line is used to calculate the fingerprint. Fingerprint lines are not sent to CloudWatch Logs unless all specified lines are available.</p>"
-        },
-        "MultiLineStartPattern":{
-          "shape":"String",
-          "documentation":"<p>Specifies the pattern for identifying the start of a log message.</p>"
-        },
-        "InitialPosition":{
-          "shape":"CloudWatchLogsInitialPosition",
-          "documentation":"<p>Specifies where to start to read data (start_of_file or end_of_file). The default is start_of_file. This setting is only used if there is no state persisted for that log stream.</p>"
-        },
-        "Encoding":{
-          "shape":"CloudWatchLogsEncoding",
-          "documentation":"<p>Specifies the encoding of the log file so that the file can be read correctly. The default is <code>utf_8</code>. Encodings supported by Python <code>codecs.decode()</code> can be used here.</p>"
-        },
-        "BufferDuration":{
-          "shape":"Integer",
-          "documentation":"<p>Specifies the time duration for the batching of log events. The minimum value is 5000ms and default value is 5000ms.</p>"
-        },
-        "BatchCount":{
-          "shape":"Integer",
-          "documentation":"<p>Specifies the max number of log events in a batch, up to 10000. The default value is 1000.</p>"
-        },
-        "BatchSize":{
-          "shape":"Integer",
-          "documentation":"<p>Specifies the maximum size of log events in a batch, in bytes, up to 1048576 bytes. The default value is 32768 bytes. This size is calculated as the sum of all event messages in UTF-8, plus 26 bytes for each log event.</p>"
-        }
-      },
-      "documentation":"<p>Describes the CloudWatch Logs configuration for a layer. For detailed information about members of this data type, see the <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html\">CloudWatch Logs Agent Reference</a>.</p>"
-    },
-    "CloudWatchLogsLogStreams":{
-      "type":"list",
-      "member":{"shape":"CloudWatchLogsLogStream"},
-      "documentation":"<p>Describes the Amazon CloudWatch Logs configuration for a layer.</p>"
-    },
-    "CloudWatchLogsTimeZone":{
-      "type":"string",
-      "documentation":"<p>The preferred time zone for logs streamed to CloudWatch Logs. Valid values are <code>LOCAL</code> and <code>UTC</code>, for Coordinated Universal Time.</p>",
-      "enum":[
-        "LOCAL",
-        "UTC"
-      ]
-    },
-    "Command":{
-      "type":"structure",
-      "members":{
-        "CommandId":{
-          "shape":"String",
-          "documentation":"<p>The command ID.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the instance where the command was executed.</p>"
-        },
-        "DeploymentId":{
-          "shape":"String",
-          "documentation":"<p>The command deployment ID.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date and time when the command was run.</p>"
-        },
-        "AcknowledgedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date and time when the command was acknowledged.</p>"
-        },
-        "CompletedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date when the command completed.</p>"
-        },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The command status:</p> <ul> <li> <p>failed</p> </li> <li> <p>successful</p> </li> <li> <p>skipped</p> </li> <li> <p>pending</p> </li> </ul>"
-        },
-        "ExitCode":{
-          "shape":"Integer",
-          "documentation":"<p>The command exit code.</p>"
-        },
-        "LogUrl":{
-          "shape":"String",
-          "documentation":"<p>The URL of the command log.</p>"
-        },
-        "Type":{
-          "shape":"String",
-          "documentation":"<p>The command type:</p> <ul> <li> <p> <code>configure</code> </p> </li> <li> <p> <code>deploy</code> </p> </li> <li> <p> <code>execute_recipes</code> </p> </li> <li> <p> <code>install_dependencies</code> </p> </li> <li> <p> <code>restart</code> </p> </li> <li> <p> <code>rollback</code> </p> </li> <li> <p> <code>setup</code> </p> </li> <li> <p> <code>start</code> </p> </li> <li> <p> <code>stop</code> </p> </li> <li> <p> <code>undeploy</code> </p> </li> <li> <p> <code>update_custom_cookbooks</code> </p> </li> <li> <p> <code>update_dependencies</code> </p> </li> </ul>"
-        }
-      },
-      "documentation":"<p>Describes a command.</p>"
-    },
-    "Commands":{
-      "type":"list",
-      "member":{"shape":"Command"}
-    },
-    "CreateAppRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "Name",
-        "Type"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "Shortname":{
-          "shape":"String",
-          "documentation":"<p>The app's short name.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The app name.</p>"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p>A description of the app.</p>"
-        },
-        "DataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The app's data source.</p>"
-        },
-        "Type":{
-          "shape":"AppType",
-          "documentation":"<p>The app type. Each supported type is associated with a particular layer. For example, PHP applications are associated with a PHP layer. OpsWorks Stacks deploys an application to those instances that are members of the corresponding layer. If your app isn't one of the standard types, or you prefer to implement your own Deploy recipes, specify <code>other</code>.</p>"
-        },
-        "AppSource":{
-          "shape":"Source",
-          "documentation":"<p>A <code>Source</code> object that specifies the app repository.</p>"
-        },
-        "Domains":{
-          "shape":"Strings",
-          "documentation":"<p>The app virtual host settings, with multiple domains separated by commas. For example: <code>'www.example.com, example.com'</code> </p>"
-        },
-        "EnableSsl":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to enable SSL for the app.</p>"
-        },
-        "SslConfiguration":{
-          "shape":"SslConfiguration",
-          "documentation":"<p>An <code>SslConfiguration</code> object with the SSL configuration.</p>"
-        },
-        "Attributes":{
-          "shape":"AppAttributes",
-          "documentation":"<p>One or more user-defined key/value pairs to be added to the stack attributes.</p>"
-        },
-        "Environment":{
-          "shape":"EnvironmentVariables",
-          "documentation":"<p>An array of <code>EnvironmentVariable</code> objects that specify environment variables to be associated with the app. After you deploy the app, these variables are defined on the associated app server instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment\"> Environment Variables</a>.</p> <p>There is no specific limit on the number of environment variables. However, the size of the associated data structure - which includes the variables' names, values, and protected flag values - cannot exceed 20 KB. This limit should accommodate most if not all use cases. Exceeding it will cause an exception with the message, \"Environment: is too large (maximum is 20KB).\"</p> <note> <p>If you have specified one or more environment variables, you cannot modify the stack's Chef version.</p> </note>"
-        }
-      }
-    },
-    "CreateAppResult":{
-      "type":"structure",
-      "members":{
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateApp</code> request.</p>"
-    },
-    "CreateDeploymentRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "Command"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID. This parameter is required for app deployments, but not for other deployment commands.</p>"
-        },
-        "InstanceIds":{
-          "shape":"Strings",
-          "documentation":"<p>The instance IDs for the deployment targets.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>The layer IDs for the deployment targets.</p>"
-        },
-        "Command":{
-          "shape":"DeploymentCommand",
-          "documentation":"<p>A <code>DeploymentCommand</code> object that specifies the deployment command and any associated arguments.</p>"
-        },
-        "Comment":{
-          "shape":"String",
-          "documentation":"<p>A user-defined comment.</p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A string that contains user-defined, custom JSON. You can use this parameter to override some corresponding default stack configuration JSON values. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information about custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a> and <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html\">Overriding Attributes With Custom JSON</a>.</p>"
-        }
-      }
-    },
-    "CreateDeploymentResult":{
-      "type":"structure",
-      "members":{
-        "DeploymentId":{
-          "shape":"String",
-          "documentation":"<p>The deployment ID, which can be used with other requests to identify the deployment.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateDeployment</code> request.</p>"
-    },
-    "CreateInstanceRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "LayerIds",
-        "InstanceType"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array that contains the instance's layer IDs.</p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p>The instance type, such as <code>t2.micro</code>. For a list of supported instance types, open the stack in the console, choose <b>Instances</b>, and choose <b>+ Instance</b>. The <b>Size</b> list contains the currently supported types. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance Families and Types</a>. The parameter values that you use to specify the various types are in the <b>API Name</b> column of the <b>Available Instance Types</b> table.</p>"
-        },
-        "AutoScalingType":{
-          "shape":"AutoScalingType",
-          "documentation":"<p>For load-based or time-based instances, the type. Windows stacks can use only time-based instances.</p>"
-        },
-        "Hostname":{
-          "shape":"String",
-          "documentation":"<p>The instance host name. The following are character limits for instance host names.</p> <ul> <li> <p>Linux-based instances: 63 characters</p> </li> <li> <p>Windows-based instances: 15 characters</p> </li> </ul>"
-        },
-        "Os":{
-          "shape":"String",
-          "documentation":"<p>The instance's operating system, which must be set to one of the following.</p> <ul> <li> <p>A supported Linux operating system: An Amazon Linux version, such as <code>Amazon Linux 2</code>, <code>Amazon Linux 2018.03</code>, <code>Amazon Linux 2017.09</code>, <code>Amazon Linux 2017.03</code>, <code>Amazon Linux 2016.09</code>, <code>Amazon Linux 2016.03</code>, <code>Amazon Linux 2015.09</code>, or <code>Amazon Linux 2015.03</code>.</p> </li> <li> <p>A supported Ubuntu operating system, such as <code>Ubuntu 18.04 LTS</code>, <code>Ubuntu 16.04 LTS</code>, <code>Ubuntu 14.04 LTS</code>, or <code>Ubuntu 12.04 LTS</code>.</p> </li> <li> <p> <code>CentOS Linux 7</code> </p> </li> <li> <p> <code>Red Hat Enterprise Linux 7</code> </p> </li> <li> <p>A supported Windows operating system, such as <code>Microsoft Windows Server 2012 R2 Base</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Express</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Standard</code>, or <code>Microsoft Windows Server 2012 R2 with SQL Server Web</code>.</p> </li> <li> <p>A custom AMI: <code>Custom</code>.</p> </li> </ul> <p>Not all operating systems are supported with all versions of Chef. For more information about the supported operating systems, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html\">OpsWorks Stacks Operating Systems</a>.</p> <p>The default option is the current Amazon Linux version. If you set this parameter to <code>Custom</code>, you must use the <a>CreateInstance</a> action's AmiId parameter to specify the custom AMI that you want to use. Block device mappings are not supported if the value is <code>Custom</code>. For more information about how to use custom AMIs with OpsWorks Stacks, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Using Custom AMIs</a>.</p>"
-        },
-        "AmiId":{
-          "shape":"String",
-          "documentation":"<p>A custom AMI ID to be used to create the instance. The AMI should be based on one of the supported operating systems. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Using Custom AMIs</a>.</p> <note> <p>If you specify a custom AMI, you must set <code>Os</code> to <code>Custom</code>.</p> </note>"
-        },
-        "SshKeyName":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon EC2 key-pair name.</p>"
-        },
-        "AvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The instance Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "VirtualizationType":{
-          "shape":"String",
-          "documentation":"<p>The instance's virtualization type, <code>paravirtual</code> or <code>hvm</code>.</p>"
-        },
-        "SubnetId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the instance's subnet. If the stack is running in a VPC, you can use this parameter to override the stack's default subnet ID value and direct OpsWorks Stacks to launch the instance in a different subnet.</p>"
-        },
-        "Architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The instance architecture. The default option is <code>x86_64</code>. Instance types do not necessarily support both architectures. For a list of the architectures that are supported by the different instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance Families and Types</a>.</p>"
-        },
-        "RootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The instance root device type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>.</p>"
-        },
-        "BlockDeviceMappings":{
-          "shape":"BlockDeviceMappings",
-          "documentation":"<p>An array of <code>BlockDeviceMapping</code> objects that specify the instance's block devices. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html\">Block Device Mapping</a>. Note that block device mappings are not supported for custom AMIs.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. To control when updates are installed, set this value to <code>false</code>. You must then update your instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or by manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>We strongly recommend using the default value of <code>true</code> to ensure that your instances have the latest security updates.</p> </note>"
-        },
-        "EbsOptimized":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to create an Amazon EBS-optimized instance.</p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The default OpsWorks Stacks agent version. You have the following options:</p> <ul> <li> <p> <code>INHERIT</code> - Use the stack's default agent version setting.</p> </li> <li> <p> <i>version_number</i> - Use the specified agent version. This value overrides the stack's default setting. To update the agent version, edit the instance configuration and specify a new version. OpsWorks Stacks installs that version on the instance.</p> </li> </ul> <p>The default setting is <code>INHERIT</code>. To specify an agent version, you must use the complete version number, not the abbreviated number shown on the console. For a list of available agent version numbers, call <a>DescribeAgentVersions</a>. AgentVersion cannot be set to Chef 12.2.</p>"
-        },
-        "Tenancy":{
-          "shape":"String",
-          "documentation":"<p>The instance's tenancy option. The default option is no tenancy, or if the instance is running in a VPC, inherit tenancy settings from the VPC. The following are valid values for this parameter: <code>dedicated</code>, <code>default</code>, or <code>host</code>. Because there are costs associated with changes in tenancy options, we recommend that you research tenancy options before choosing them for your instances. For more information about dedicated hosts, see <a href=\"http://aws.amazon.com/ec2/dedicated-hosts/\">Dedicated Hosts Overview</a> and <a href=\"http://aws.amazon.com/ec2/dedicated-hosts/\">Amazon EC2 Dedicated Hosts</a>. For more information about dedicated instances, see <a href=\"https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/dedicated-instance.html\">Dedicated Instances</a> and <a href=\"http://aws.amazon.com/ec2/purchasing-options/dedicated-instances/\">Amazon EC2 Dedicated Instances</a>.</p>"
-        }
-      }
-    },
-    "CreateInstanceResult":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateInstance</code> request.</p>"
-    },
-    "CreateLayerRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "Type",
-        "Name",
-        "Shortname"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The layer stack ID.</p>"
-        },
-        "Type":{
-          "shape":"LayerType",
-          "documentation":"<p>The layer type. A stack cannot have more than one built-in layer of the same type. It can have any number of custom layers. Built-in layers are not available in Chef 12 stacks.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The layer name, which is used by the console. Layer names can be a maximum of 32 characters.</p>"
-        },
-        "Shortname":{
-          "shape":"String",
-          "documentation":"<p>For custom layers only, use this parameter to specify the layer's short name, which is used internally by OpsWorks Stacks and by Chef recipes. The short name is also used as the name for the directory where your app files are installed. It can have a maximum of 32 characters, which are limited to the alphanumeric characters, '-', '_', and '.'.</p> <p>Built-in layer short names are defined by OpsWorks Stacks. For more information, see the <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/layers.html\">Layer Reference</a>.</p>"
-        },
-        "Attributes":{
-          "shape":"LayerAttributes",
-          "documentation":"<p>One or more user-defined key-value pairs to be added to the stack attributes.</p> <p>To create a cluster layer, set the <code>EcsClusterArn</code> attribute to the cluster's ARN.</p>"
-        },
-        "CloudWatchLogsConfiguration":{
-          "shape":"CloudWatchLogsConfiguration",
-          "documentation":"<p>Specifies CloudWatch Logs configuration options for the layer. For more information, see <a>CloudWatchLogsLogStream</a>.</p>"
-        },
-        "CustomInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of an IAM profile to be used for the layer's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A JSON-formatted string containing custom stack configuration and deployment attributes to be installed on the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html\"> Using Custom JSON</a>. This feature is supported as of version 1.7.42 of the CLI. </p>"
-        },
-        "CustomSecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the layer custom security group IDs.</p>"
-        },
-        "Packages":{
-          "shape":"Strings",
-          "documentation":"<p>An array of <code>Package</code> objects that describes the layer packages.</p>"
-        },
-        "VolumeConfigurations":{
-          "shape":"VolumeConfigurations",
-          "documentation":"<p>A <code>VolumeConfigurations</code> object that describes the layer's Amazon EBS volumes.</p>"
-        },
-        "EnableAutoHealing":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to disable auto healing for the layer.</p>"
-        },
-        "AutoAssignElasticIps":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to automatically assign an <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP address</a> to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "AutoAssignPublicIps":{
-          "shape":"Boolean",
-          "documentation":"<p>For stacks that are running in a VPC, whether to automatically assign a public IP address to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "CustomRecipes":{
-          "shape":"Recipes",
-          "documentation":"<p>A <code>LayerCustomRecipes</code> object that specifies the layer custom recipes.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. To control when updates are installed, set this value to <code>false</code>. You must then update your instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or by manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>To ensure that your instances have the latest security updates, we strongly recommend using the default value of <code>true</code>.</p> </note>"
-        },
-        "UseEbsOptimizedInstances":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to use Amazon EBS-optimized instances.</p>"
-        },
-        "LifecycleEventConfiguration":{
-          "shape":"LifecycleEventConfiguration",
-          "documentation":"<p>A <code>LifeCycleEventConfiguration</code> object that you can use to configure the Shutdown event to specify an execution timeout and enable or disable Elastic Load Balancer connection draining.</p>"
-        }
-      }
-    },
-    "CreateLayerResult":{
-      "type":"structure",
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateLayer</code> request.</p>"
-    },
-    "CreateStackRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "Region",
-        "ServiceRoleArn",
-        "DefaultInstanceProfileArn"
-      ],
-      "members":{
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The stack name. Stack names can be a maximum of 64 characters.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The stack's Amazon Web Services Region, such as <code>ap-south-1</code>. For more information about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p> <note> <p>In the CLI, this API maps to the <code>--stack-region</code> parameter. If the <code>--stack-region</code> parameter and the CLI common parameter <code>--region</code> are set to the same value, the stack uses a <i>regional</i> endpoint. If the <code>--stack-region</code> parameter is not set, but the CLI <code>--region</code> parameter is, this also results in a stack with a <i>regional</i> endpoint. However, if the <code>--region</code> parameter is set to <code>us-east-1</code>, and the <code>--stack-region</code> parameter is set to one of the following, then the stack uses a legacy or <i>classic</i> region: <code>us-west-1, us-west-2, sa-east-1, eu-central-1, eu-west-1, ap-northeast-1, ap-southeast-1, ap-southeast-2</code>. In this case, the actual API endpoint of the stack is in <code>us-east-1</code>. Only the preceding regions are supported as classic regions in the <code>us-east-1</code> API endpoint. Because it is a best practice to choose the regional endpoint that is closest to where you manage Amazon Web Services, we recommend that you use regional endpoints for new stacks. The CLI common <code>--region</code> parameter always specifies a regional API endpoint; it cannot be used to specify a classic OpsWorks Stacks region.</p> </note>"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC that the stack is to be launched into. The VPC must be in the stack's region. All instances are launched into this VPC. You cannot change the ID later.</p> <ul> <li> <p>If your account supports EC2-Classic, the default value is <code>no VPC</code>.</p> </li> <li> <p>If your account does not support EC2-Classic, the default value is the default VPC for the specified region.</p> </li> </ul> <p>If the VPC ID corresponds to a default VPC and you have specified either the <code>DefaultAvailabilityZone</code> or the <code>DefaultSubnetId</code> parameter only, OpsWorks Stacks infers the value of the other parameter. If you specify neither parameter, OpsWorks Stacks sets these parameters to the first valid Availability Zone for the specified region and the corresponding default VPC subnet ID, respectively.</p> <p>If you specify a nondefault VPC ID, note the following:</p> <ul> <li> <p>It must belong to a VPC in your account that is in the specified region.</p> </li> <li> <p>You must specify a value for <code>DefaultSubnetId</code>.</p> </li> </ul> <p>For more information about how to use OpsWorks Stacks with a VPC, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-vpc.html\">Running a Stack in a VPC</a>. For more information about default VPC and EC2-Classic, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html\">Supported Platforms</a>. </p>"
-        },
-        "Attributes":{
-          "shape":"StackAttributes",
-          "documentation":"<p>One or more user-defined key-value pairs to be added to the stack attributes.</p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p>The stack's IAM role, which allows OpsWorks Stacks to work with Amazon Web Services resources on your behalf. You must set this parameter to the Amazon Resource Name (ARN) for an existing IAM role. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "DefaultInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM profile that is the default profile for all of the stack's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "DefaultOs":{
-          "shape":"String",
-          "documentation":"<p>The stack's default operating system, which is installed on every instance unless you specify a different operating system when you create the instance. You can specify one of the following.</p> <ul> <li> <p>A supported Linux operating system: An Amazon Linux version, such as <code>Amazon Linux 2</code>, <code>Amazon Linux 2018.03</code>, <code>Amazon Linux 2017.09</code>, <code>Amazon Linux 2017.03</code>, <code>Amazon Linux 2016.09</code>, <code>Amazon Linux 2016.03</code>, <code>Amazon Linux 2015.09</code>, or <code>Amazon Linux 2015.03</code>.</p> </li> <li> <p>A supported Ubuntu operating system, such as <code>Ubuntu 18.04 LTS</code>, <code>Ubuntu 16.04 LTS</code>, <code>Ubuntu 14.04 LTS</code>, or <code>Ubuntu 12.04 LTS</code>.</p> </li> <li> <p> <code>CentOS Linux 7</code> </p> </li> <li> <p> <code>Red Hat Enterprise Linux 7</code> </p> </li> <li> <p>A supported Windows operating system, such as <code>Microsoft Windows Server 2012 R2 Base</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Express</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Standard</code>, or <code>Microsoft Windows Server 2012 R2 with SQL Server Web</code>.</p> </li> <li> <p>A custom AMI: <code>Custom</code>. You specify the custom AMI you want to use when you create instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\"> Using Custom AMIs</a>.</p> </li> </ul> <p>The default option is the current Amazon Linux version. Not all operating systems are supported with all versions of Chef. For more information about supported operating systems, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html\">OpsWorks Stacks Operating Systems</a>.</p>"
-        },
-        "HostnameTheme":{
-          "shape":"String",
-          "documentation":"<p>The stack's host name theme, with spaces replaced by underscores. The theme is used to generate host names for the stack's instances. By default, <code>HostnameTheme</code> is set to <code>Layer_Dependent</code>, which creates host names by appending integers to the layer's short name. The other themes are:</p> <ul> <li> <p> <code>Baked_Goods</code> </p> </li> <li> <p> <code>Clouds</code> </p> </li> <li> <p> <code>Europe_Cities</code> </p> </li> <li> <p> <code>Fruits</code> </p> </li> <li> <p> <code>Greek_Deities_and_Titans</code> </p> </li> <li> <p> <code>Legendary_creatures_from_Japan</code> </p> </li> <li> <p> <code>Planets_and_Moons</code> </p> </li> <li> <p> <code>Roman_Deities</code> </p> </li> <li> <p> <code>Scottish_Islands</code> </p> </li> <li> <p> <code>US_Cities</code> </p> </li> <li> <p> <code>Wild_Cats</code> </p> </li> </ul> <p>To obtain a generated host name, call <code>GetHostNameSuggestion</code>, which returns a host name based on the current theme.</p>"
-        },
-        "DefaultAvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The stack's default Availability Zone, which must be in the specified region. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>. If you also specify a value for <code>DefaultSubnetId</code>, the subnet must be in the same zone. For more information, see the <code>VpcId</code> parameter description. </p>"
-        },
-        "DefaultSubnetId":{
-          "shape":"String",
-          "documentation":"<p>The stack's default VPC subnet ID. This parameter is required if you specify a value for the <code>VpcId</code> parameter. All instances are launched into this subnet unless you specify otherwise when you create the instance. If you also specify a value for <code>DefaultAvailabilityZone</code>, the subnet must be in that zone. For information on default values and when this parameter is required, see the <code>VpcId</code> parameter description. </p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A string that contains user-defined, custom JSON. It can be used to override the corresponding default stack configuration attribute values or to pass data to recipes. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information about custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a>.</p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager. When you create a stack we recommend that you use the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is currently 12.</p>"
-        },
-        "ChefConfiguration":{
-          "shape":"ChefConfiguration",
-          "documentation":"<p>A <code>ChefConfiguration</code> object that specifies whether to enable Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "UseCustomCookbooks":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the stack uses custom cookbooks.</p>"
-        },
-        "UseOpsworksSecurityGroups":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to associate the OpsWorks Stacks built-in security groups with the stack's layers.</p> <p>OpsWorks Stacks provides a standard set of built-in security groups, one for each layer, which are associated with layers by default. With <code>UseOpsworksSecurityGroups</code> you can instead provide your own custom security groups. <code>UseOpsworksSecurityGroups</code> has the following settings: </p> <ul> <li> <p>True - OpsWorks Stacks automatically associates the appropriate built-in security group with each layer (default setting). You can associate additional security groups with a layer after you create it, but you cannot delete the built-in security group.</p> </li> <li> <p>False - OpsWorks Stacks does not associate built-in security groups with layers. You must create appropriate EC2 security groups and associate a security group with each layer that you create. However, you can still manually associate a built-in security group with a layer on creation; custom security groups are required only for those layers that need custom settings.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "CustomCookbooksSource":{
-          "shape":"Source",
-          "documentation":"<p>Contains the information required to retrieve an app or cookbook from a repository. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Adding Apps</a> or <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html\">Cookbooks and Recipes</a>.</p>"
-        },
-        "DefaultSshKeyName":{
-          "shape":"String",
-          "documentation":"<p>A default Amazon EC2 key pair name. The default value is none. If you specify a key pair name, OpsWorks installs the public key on the instance and you can use the private key with an SSH client to log in to the instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html\"> Using SSH to Communicate with an Instance</a> and <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html\"> Managing SSH Access</a>. You can override this setting by specifying a different key pair, or no key pair, when you <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html\"> create an instance</a>. </p>"
-        },
-        "DefaultRootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The default root device type. This value is the default for all instances in the stack, but you can override it when you create an instance. The default option is <code>instance-store</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>.</p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The default OpsWorks Stacks agent version. You have the following options:</p> <ul> <li> <p>Auto-update - Set this parameter to <code>LATEST</code>. OpsWorks Stacks automatically installs new agent versions on the stack's instances as soon as they are available.</p> </li> <li> <p>Fixed version - Set this parameter to your preferred agent version. To update the agent version, you must edit the stack configuration and specify a new version. OpsWorks Stacks installs that version on the stack's instances.</p> </li> </ul> <p>The default setting is the most recent release of the agent. To specify an agent version, you must use the complete version number, not the abbreviated number shown on the console. For a list of available agent version numbers, call <a>DescribeAgentVersions</a>. AgentVersion cannot be set to Chef 12.2.</p> <note> <p>You can also specify an agent version when you create or update an instance, which overrides the stack's default setting.</p> </note>"
-        }
-      }
-    },
-    "CreateStackResult":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID, which is an opaque string that you use to identify the stack when performing actions such as <code>DescribeStacks</code>.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateStack</code> request.</p>"
-    },
-    "CreateUserProfileRequest":{
-      "type":"structure",
-      "required":["IamUserArn"],
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN; this can also be a federated user's ARN.</p>"
-        },
-        "SshUsername":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH user name. The allowable characters are [a-z], [A-Z], [0-9], '-', and '_'. If the specified name includes other punctuation marks, OpsWorks Stacks removes them. For example, <code>my.name</code> is changed to <code>myname</code>. If you do not specify an SSH user name, OpsWorks Stacks generates one from the IAM user name. </p>"
-        },
-        "SshPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The user's public SSH key.</p>"
-        },
-        "AllowSelfManagement":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether users can specify their own SSH public key through the My Settings page. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html\">Setting an IAM User's Public SSH Key</a>.</p>"
-        }
-      }
-    },
-    "CreateUserProfileResult":{
-      "type":"structure",
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>CreateUserProfile</code> request.</p>"
-    },
-    "DailyAutoScalingSchedule":{
-      "type":"map",
-      "key":{"shape":"Hour"},
-      "value":{"shape":"Switch"}
-    },
-    "DataSource":{
-      "type":"structure",
-      "members":{
-        "Type":{
-          "shape":"String",
-          "documentation":"<p>The data source's type, <code>AutoSelectOpsworksMysqlInstance</code>, <code>OpsworksMysqlInstance</code>, <code>RdsDbInstance</code>, or <code>None</code>.</p>"
-        },
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The data source's ARN.</p>"
-        },
-        "DatabaseName":{
-          "shape":"String",
-          "documentation":"<p>The database name.</p>"
-        }
-      },
-      "documentation":"<p>Describes an app's data source.</p>"
-    },
-    "DataSources":{
-      "type":"list",
-      "member":{"shape":"DataSource"}
-    },
-    "DateTime":{"type":"string"},
-    "DeleteAppRequest":{
-      "type":"structure",
-      "required":["AppId"],
-      "members":{
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID.</p>"
-        }
-      }
-    },
-    "DeleteInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "DeleteElasticIp":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to delete the instance Elastic IP address.</p>"
-        },
-        "DeleteVolumes":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to delete the instance's Amazon EBS volumes.</p>"
-        }
-      }
-    },
-    "DeleteLayerRequest":{
-      "type":"structure",
-      "required":["LayerId"],
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        }
-      }
-    },
-    "DeleteStackRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "DeleteUserProfileRequest":{
-      "type":"structure",
-      "required":["IamUserArn"],
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN. This can also be a federated user's ARN.</p>"
-        }
-      }
-    },
-    "Deployment":{
-      "type":"structure",
-      "members":{
-        "DeploymentId":{
-          "shape":"String",
-          "documentation":"<p>The deployment ID.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date when the deployment was created.</p>"
-        },
-        "CompletedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date when the deployment completed.</p>"
-        },
-        "Duration":{
-          "shape":"Integer",
-          "documentation":"<p>The deployment duration.</p>"
-        },
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN.</p>"
-        },
-        "Comment":{
-          "shape":"String",
-          "documentation":"<p>A user-defined comment.</p>"
-        },
-        "Command":{
-          "shape":"DeploymentCommand",
-          "documentation":"<p>Used to specify a stack or deployment command.</p>"
-        },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The deployment status:</p> <ul> <li> <p>running</p> </li> <li> <p>successful</p> </li> <li> <p>failed</p> </li> </ul>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A string that contains user-defined custom JSON. It can be used to override the corresponding default stack configuration attribute values for stack or to pass data to recipes. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information on custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a>.</p>"
-        },
-        "InstanceIds":{
-          "shape":"Strings",
-          "documentation":"<p>The IDs of the target instances.</p>"
-        }
-      },
-      "documentation":"<p>Describes a deployment of a stack or app.</p>"
-    },
-    "DeploymentCommand":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"DeploymentCommandName",
-          "documentation":"<p>Specifies the operation. You can specify only one command.</p> <p>For stacks, the following commands are available:</p> <ul> <li> <p> <code>execute_recipes</code>: Execute one or more recipes. To specify the recipes, set an <code>Args</code> parameter named <code>recipes</code> to the list of recipes to be executed. For example, to execute <code>phpapp::appsetup</code>, set <code>Args</code> to <code>{\"recipes\":[\"phpapp::appsetup\"]}</code>.</p> </li> <li> <p> <code>install_dependencies</code>: Install the stack's dependencies.</p> </li> <li> <p> <code>update_custom_cookbooks</code>: Update the stack's custom cookbooks.</p> </li> <li> <p> <code>update_dependencies</code>: Update the stack's dependencies.</p> </li> </ul> <note> <p>The update_dependencies and install_dependencies commands are supported only for Linux instances. You can run the commands successfully on Windows instances, but they do nothing.</p> </note> <p>For apps, the following commands are available:</p> <ul> <li> <p> <code>deploy</code>: Deploy an app. Ruby on Rails apps have an optional <code>Args</code> parameter named <code>migrate</code>. Set <code>Args</code> to {\"migrate\":[\"true\"]} to migrate the database. The default setting is {\"migrate\":[\"false\"]}.</p> </li> <li> <p> <code>rollback</code> Roll the app back to the previous version. When you update an app, OpsWorks Stacks stores the previous version, up to a maximum of five versions. You can use this command to roll an app back as many as four versions.</p> </li> <li> <p> <code>start</code>: Start the app's web or application server.</p> </li> <li> <p> <code>stop</code>: Stop the app's web or application server.</p> </li> <li> <p> <code>restart</code>: Restart the app's web or application server.</p> </li> <li> <p> <code>undeploy</code>: Undeploy the app.</p> </li> </ul>"
-        },
-        "Args":{
-          "shape":"DeploymentCommandArgs",
-          "documentation":"<p>The arguments of those commands that take arguments. It should be set to a JSON object with the following format:</p> <p> <code>{\"arg_name1\" : [\"value1\", \"value2\", ...], \"arg_name2\" : [\"value1\", \"value2\", ...], ...}</code> </p> <p>The <code>update_dependencies</code> command takes two arguments:</p> <ul> <li> <p> <code>upgrade_os_to</code> - Specifies the Amazon Linux version that you want instances to run, such as <code>Amazon Linux 2</code>. You must also set the <code>allow_reboot</code> argument to true.</p> </li> <li> <p> <code>allow_reboot</code> - Specifies whether to allow OpsWorks Stacks to reboot the instances if necessary, after installing the updates. This argument can be set to either <code>true</code> or <code>false</code>. The default value is <code>false</code>.</p> </li> </ul> <p>For example, to upgrade an instance to Amazon Linux 2018.03, set <code>Args</code> to the following.</p> <p> <code> { \"upgrade_os_to\":[\"Amazon Linux 2018.03\"], \"allow_reboot\":[\"true\"] } </code> </p>"
-        }
-      },
-      "documentation":"<p>Used to specify a stack or deployment command.</p>"
-    },
-    "DeploymentCommandArgs":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"Strings"}
-    },
-    "DeploymentCommandName":{
-      "type":"string",
-      "enum":[
-        "install_dependencies",
-        "update_dependencies",
-        "update_custom_cookbooks",
-        "execute_recipes",
-        "configure",
-        "setup",
-        "deploy",
-        "rollback",
-        "start",
-        "stop",
-        "restart",
-        "undeploy"
-      ]
-    },
-    "Deployments":{
-      "type":"list",
-      "member":{"shape":"Deployment"}
-    },
-    "DeregisterEcsClusterRequest":{
-      "type":"structure",
-      "required":["EcsClusterArn"],
-      "members":{
-        "EcsClusterArn":{
-          "shape":"String",
-          "documentation":"<p>The cluster's Amazon Resource Number (ARN).</p>"
-        }
-      }
-    },
-    "DeregisterElasticIpRequest":{
-      "type":"structure",
-      "required":["ElasticIp"],
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>"
-        }
-      }
-    },
-    "DeregisterInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "DeregisterRdsDbInstanceRequest":{
-      "type":"structure",
-      "required":["RdsDbInstanceArn"],
-      "members":{
-        "RdsDbInstanceArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon RDS instance's ARN.</p>"
-        }
-      }
-    },
-    "DeregisterVolumeRequest":{
-      "type":"structure",
-      "required":["VolumeId"],
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The OpsWorks Stacks volume ID, which is the GUID that OpsWorks Stacks assigned to the instance when you registered the volume with the stack, not the Amazon EC2 volume ID.</p>"
-        }
-      }
-    },
-    "DescribeAgentVersionsRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager.</p>"
-        }
-      }
-    },
-    "DescribeAgentVersionsResult":{
-      "type":"structure",
-      "members":{
-        "AgentVersions":{
-          "shape":"AgentVersions",
-          "documentation":"<p>The agent versions for the specified stack or configuration manager. Note that this value is the complete version number, not the abbreviated number used by the console.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeAgentVersions</code> request.</p>"
-    },
-    "DescribeAppsRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The app stack ID. If you use this parameter, <code>DescribeApps</code> returns a description of the apps in the specified stack.</p>"
-        },
-        "AppIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of app IDs for the apps to be described. If you use this parameter, <code>DescribeApps</code> returns a description of the specified apps. Otherwise, it returns a description of every app.</p>"
-        }
-      }
-    },
-    "DescribeAppsResult":{
-      "type":"structure",
-      "members":{
-        "Apps":{
-          "shape":"Apps",
-          "documentation":"<p>An array of <code>App</code> objects that describe the specified apps. </p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeApps</code> request.</p>"
-    },
-    "DescribeCommandsRequest":{
-      "type":"structure",
-      "members":{
-        "DeploymentId":{
-          "shape":"String",
-          "documentation":"<p>The deployment ID. If you include this parameter, <code>DescribeCommands</code> returns a description of the commands associated with the specified deployment.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID. If you include this parameter, <code>DescribeCommands</code> returns a description of the commands associated with the specified instance.</p>"
-        },
-        "CommandIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of command IDs. If you include this parameter, <code>DescribeCommands</code> returns a description of the specified commands. Otherwise, it returns a description of every command.</p>"
-        }
-      }
-    },
-    "DescribeCommandsResult":{
-      "type":"structure",
-      "members":{
-        "Commands":{
-          "shape":"Commands",
-          "documentation":"<p>An array of <code>Command</code> objects that describe each of the specified commands.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeCommands</code> request.</p>"
-    },
-    "DescribeDeploymentsRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID. If you include this parameter, the command returns a description of the commands associated with the specified stack.</p>"
-        },
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID. If you include this parameter, the command returns a description of the commands associated with the specified app.</p>"
-        },
-        "DeploymentIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of deployment IDs to be described. If you include this parameter, the command returns a description of the specified deployments. Otherwise, it returns a description of every deployment.</p>"
-        }
-      }
-    },
-    "DescribeDeploymentsResult":{
-      "type":"structure",
-      "members":{
-        "Deployments":{
-          "shape":"Deployments",
-          "documentation":"<p>An array of <code>Deployment</code> objects that describe the deployments.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeDeployments</code> request.</p>"
-    },
-    "DescribeEcsClustersRequest":{
-      "type":"structure",
-      "members":{
-        "EcsClusterArns":{
-          "shape":"Strings",
-          "documentation":"<p>A list of ARNs, one for each cluster to be described.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID. <code>DescribeEcsClusters</code> returns a description of the cluster that is registered with the stack.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's<code>NextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>DescribeEcsClusters</code> again and assign that token to the request object's <code>NextToken</code> parameter. If there are no remaining results, the previous response object's <code>NextToken</code> parameter is set to <code>null</code>.</p>"
-        },
-        "MaxResults":{
-          "shape":"Integer",
-          "documentation":"<p>To receive a paginated response, use this parameter to specify the maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can assign to the <code>NextToken</code> request parameter to get the next set of results.</p>"
-        }
-      }
-    },
-    "DescribeEcsClustersResult":{
-      "type":"structure",
-      "members":{
-        "EcsClusters":{
-          "shape":"EcsClusters",
-          "documentation":"<p>A list of <code>EcsCluster</code> objects containing the cluster descriptions.</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>If a paginated request does not return all of the remaining results, this parameter is set to a token that you can assign to the request object's <code>NextToken</code> parameter to retrieve the next set of results. If the previous paginated request returned all of the remaining results, this parameter is set to <code>null</code>.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeEcsClusters</code> request.</p>"
-    },
-    "DescribeElasticIpsRequest":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID. If you include this parameter, <code>DescribeElasticIps</code> returns a description of the Elastic IP addresses associated with the specified instance.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID. If you include this parameter, <code>DescribeElasticIps</code> returns a description of the Elastic IP addresses that are registered with the specified stack.</p>"
-        },
-        "Ips":{
-          "shape":"Strings",
-          "documentation":"<p>An array of Elastic IP addresses to be described. If you include this parameter, <code>DescribeElasticIps</code> returns a description of the specified Elastic IP addresses. Otherwise, it returns a description of every Elastic IP address.</p>"
-        }
-      }
-    },
-    "DescribeElasticIpsResult":{
-      "type":"structure",
-      "members":{
-        "ElasticIps":{
-          "shape":"ElasticIps",
-          "documentation":"<p>An <code>ElasticIps</code> object that describes the specified Elastic IP addresses.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeElasticIps</code> request.</p>"
-    },
-    "DescribeElasticLoadBalancersRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID. The action describes the stack's Elastic Load Balancing instances.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>A list of layer IDs. The action describes the Elastic Load Balancing instances for the specified layers.</p>"
-        }
-      }
-    },
-    "DescribeElasticLoadBalancersResult":{
-      "type":"structure",
-      "members":{
-        "ElasticLoadBalancers":{
-          "shape":"ElasticLoadBalancers",
-          "documentation":"<p>A list of <code>ElasticLoadBalancer</code> objects that describe the specified Elastic Load Balancing instances.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeElasticLoadBalancers</code> request.</p>"
-    },
-    "DescribeInstancesRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID. If you use this parameter, <code>DescribeInstances</code> returns descriptions of the instances associated with the specified stack.</p>"
-        },
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>A layer ID. If you use this parameter, <code>DescribeInstances</code> returns descriptions of the instances associated with the specified layer.</p>"
-        },
-        "InstanceIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of instance IDs to be described. If you use this parameter, <code>DescribeInstances</code> returns a description of the specified instances. Otherwise, it returns a description of every instance.</p>"
-        }
-      }
-    },
-    "DescribeInstancesResult":{
-      "type":"structure",
-      "members":{
-        "Instances":{
-          "shape":"Instances",
-          "documentation":"<p>An array of <code>Instance</code> objects that describe the instances.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeInstances</code> request.</p>"
-    },
-    "DescribeLayersRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of layer IDs that specify the layers to be described. If you omit this parameter, <code>DescribeLayers</code> returns a description of every layer in the specified stack.</p>"
-        }
-      }
-    },
-    "DescribeLayersResult":{
-      "type":"structure",
-      "members":{
-        "Layers":{
-          "shape":"Layers",
-          "documentation":"<p>An array of <code>Layer</code> objects that describe the layers.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeLayers</code> request.</p>"
-    },
-    "DescribeLoadBasedAutoScalingRequest":{
-      "type":"structure",
-      "required":["LayerIds"],
-      "members":{
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of layer IDs.</p>"
-        }
-      }
-    },
-    "DescribeLoadBasedAutoScalingResult":{
-      "type":"structure",
-      "members":{
-        "LoadBasedAutoScalingConfigurations":{
-          "shape":"LoadBasedAutoScalingConfigurations",
-          "documentation":"<p>An array of <code>LoadBasedAutoScalingConfiguration</code> objects that describe each layer's configuration.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeLoadBasedAutoScaling</code> request.</p>"
-    },
-    "DescribeMyUserProfileResult":{
-      "type":"structure",
-      "members":{
-        "UserProfile":{
-          "shape":"SelfUserProfile",
-          "documentation":"<p>A <code>UserProfile</code> object that describes the user's SSH information.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeMyUserProfile</code> request.</p>"
-    },
-    "DescribeOperatingSystemsResponse":{
-      "type":"structure",
-      "members":{
-        "OperatingSystems":{
-          "shape":"OperatingSystems",
-          "documentation":"<p>Contains information in response to a <code>DescribeOperatingSystems</code> request.</p>"
-        }
-      },
-      "documentation":"<p>The response to a <code>DescribeOperatingSystems</code> request.</p>"
-    },
-    "DescribePermissionsRequest":{
-      "type":"structure",
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN. This can also be a federated user's ARN. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "DescribePermissionsResult":{
-      "type":"structure",
-      "members":{
-        "Permissions":{
-          "shape":"Permissions",
-          "documentation":"<p>An array of <code>Permission</code> objects that describe the stack permissions.</p> <ul> <li> <p>If the request object contains only a stack ID, the array contains a <code>Permission</code> object with permissions for each of the stack IAM ARNs.</p> </li> <li> <p>If the request object contains only an IAM ARN, the array contains a <code>Permission</code> object with permissions for each of the user's stack IDs.</p> </li> <li> <p>If the request contains a stack ID and an IAM ARN, the array contains a single <code>Permission</code> object with permissions for the specified stack and IAM ARN.</p> </li> </ul>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribePermissions</code> request.</p>"
-    },
-    "DescribeRaidArraysRequest":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID. If you use this parameter, <code>DescribeRaidArrays</code> returns descriptions of the RAID arrays associated with the specified instance. </p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "RaidArrayIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of RAID array IDs. If you use this parameter, <code>DescribeRaidArrays</code> returns descriptions of the specified arrays. Otherwise, it returns a description of every array.</p>"
-        }
-      }
-    },
-    "DescribeRaidArraysResult":{
-      "type":"structure",
-      "members":{
-        "RaidArrays":{
-          "shape":"RaidArrays",
-          "documentation":"<p>A <code>RaidArrays</code> object that describes the specified RAID arrays.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeRaidArrays</code> request.</p>"
-    },
-    "DescribeRdsDbInstancesRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the stack with which the instances are registered. The operation returns descriptions of all registered Amazon RDS instances.</p>"
-        },
-        "RdsDbInstanceArns":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the ARNs of the instances to be described.</p>"
-        }
-      }
-    },
-    "DescribeRdsDbInstancesResult":{
-      "type":"structure",
-      "members":{
-        "RdsDbInstances":{
-          "shape":"RdsDbInstances",
-          "documentation":"<p>An a array of <code>RdsDbInstance</code> objects that describe the instances.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeRdsDbInstances</code> request.</p>"
-    },
-    "DescribeServiceErrorsRequest":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID. If you use this parameter, <code>DescribeServiceErrors</code> returns descriptions of the errors associated with the specified stack.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID. If you use this parameter, <code>DescribeServiceErrors</code> returns descriptions of the errors associated with the specified instance.</p>"
-        },
-        "ServiceErrorIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of service error IDs. If you use this parameter, <code>DescribeServiceErrors</code> returns descriptions of the specified errors. Otherwise, it returns a description of every error.</p>"
-        }
-      }
-    },
-    "DescribeServiceErrorsResult":{
-      "type":"structure",
-      "members":{
-        "ServiceErrors":{
-          "shape":"ServiceErrors",
-          "documentation":"<p>An array of <code>ServiceError</code> objects that describe the specified service errors.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeServiceErrors</code> request.</p>"
-    },
-    "DescribeStackProvisioningParametersRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "DescribeStackProvisioningParametersResult":{
-      "type":"structure",
-      "members":{
-        "AgentInstallerUrl":{
-          "shape":"String",
-          "documentation":"<p>The OpsWorks Stacks agent installer's URL.</p>"
-        },
-        "Parameters":{
-          "shape":"Parameters",
-          "documentation":"<p>An embedded object that contains the provisioning parameters.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeStackProvisioningParameters</code> request.</p>"
-    },
-    "DescribeStackSummaryRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "DescribeStackSummaryResult":{
-      "type":"structure",
-      "members":{
-        "StackSummary":{
-          "shape":"StackSummary",
-          "documentation":"<p>A <code>StackSummary</code> object that contains the results.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeStackSummary</code> request.</p>"
-    },
-    "DescribeStacksRequest":{
-      "type":"structure",
-      "members":{
-        "StackIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of stack IDs that specify the stacks to be described. If you omit this parameter, and have permissions to get information about all stacks, <code>DescribeStacks</code> returns a description of every stack. If the IAM policy that is attached to an IAM user limits the <code>DescribeStacks</code> action to specific stack ARNs, this parameter is required, and the user must specify a stack ARN that is allowed by the policy. Otherwise, <code>DescribeStacks</code> returns an <code>AccessDenied</code> error.</p>"
-        }
-      }
-    },
-    "DescribeStacksResult":{
-      "type":"structure",
-      "members":{
-        "Stacks":{
-          "shape":"Stacks",
-          "documentation":"<p>An array of <code>Stack</code> objects that describe the stacks.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeStacks</code> request.</p>"
-    },
-    "DescribeTimeBasedAutoScalingRequest":{
-      "type":"structure",
-      "required":["InstanceIds"],
-      "members":{
-        "InstanceIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array of instance IDs.</p>"
-        }
-      }
-    },
-    "DescribeTimeBasedAutoScalingResult":{
-      "type":"structure",
-      "members":{
-        "TimeBasedAutoScalingConfigurations":{
-          "shape":"TimeBasedAutoScalingConfigurations",
-          "documentation":"<p>An array of <code>TimeBasedAutoScalingConfiguration</code> objects that describe the configuration for the specified instances.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeTimeBasedAutoScaling</code> request.</p>"
-    },
-    "DescribeUserProfilesRequest":{
-      "type":"structure",
-      "members":{
-        "IamUserArns":{
-          "shape":"Strings",
-          "documentation":"<p>An array of IAM or federated user ARNs that identify the users to be described.</p>"
-        }
-      }
-    },
-    "DescribeUserProfilesResult":{
-      "type":"structure",
-      "members":{
-        "UserProfiles":{
-          "shape":"UserProfiles",
-          "documentation":"<p>A <code>Users</code> object that describes the specified users.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeUserProfiles</code> request.</p>"
-    },
-    "DescribeVolumesRequest":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID. If you use this parameter, <code>DescribeVolumes</code> returns descriptions of the volumes associated with the specified instance.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID. The action describes the stack's registered Amazon EBS volumes.</p>"
-        },
-        "RaidArrayId":{
-          "shape":"String",
-          "documentation":"<p>The RAID array ID. If you use this parameter, <code>DescribeVolumes</code> returns descriptions of the volumes associated with the specified RAID array.</p>"
-        },
-        "VolumeIds":{
-          "shape":"Strings",
-          "documentation":"<p>Am array of volume IDs. If you use this parameter, <code>DescribeVolumes</code> returns descriptions of the specified volumes. Otherwise, it returns a description of every volume.</p>"
-        }
-      }
-    },
-    "DescribeVolumesResult":{
-      "type":"structure",
-      "members":{
-        "Volumes":{
-          "shape":"Volumes",
-          "documentation":"<p>An array of volume IDs.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>DescribeVolumes</code> request.</p>"
-    },
-    "DetachElasticLoadBalancerRequest":{
-      "type":"structure",
-      "required":[
-        "ElasticLoadBalancerName",
-        "LayerId"
-      ],
-      "members":{
-        "ElasticLoadBalancerName":{
-          "shape":"String",
-          "documentation":"<p>The Elastic Load Balancing instance's name.</p>"
-        },
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the layer that the Elastic Load Balancing instance is attached to.</p>"
-        }
-      }
-    },
-    "DisassociateElasticIpRequest":{
-      "type":"structure",
-      "required":["ElasticIp"],
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>"
-        }
-      }
-    },
-    "Double":{
-      "type":"double",
-      "box":true
-    },
-    "EbsBlockDevice":{
-      "type":"structure",
-      "members":{
-        "SnapshotId":{
-          "shape":"String",
-          "documentation":"<p>The snapshot ID.</p>"
-        },
-        "Iops":{
-          "shape":"Integer",
-          "documentation":"<p>The number of I/O operations per second (IOPS) that the volume supports. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html\">EbsBlockDevice</a>.</p>"
-        },
-        "VolumeSize":{
-          "shape":"Integer",
-          "documentation":"<p>The volume size, in GiB. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html\">EbsBlockDevice</a>.</p>"
-        },
-        "VolumeType":{
-          "shape":"VolumeType",
-          "documentation":"<p>The volume type. <code>gp2</code> for General Purpose (SSD) volumes, <code>io1</code> for Provisioned IOPS (SSD) volumes, <code>st1</code> for Throughput Optimized hard disk drives (HDD), <code>sc1</code> for Cold HDD,and <code>standard</code> for Magnetic volumes.</p> <p>If you specify the <code>io1</code> volume type, you must also specify a value for the <code>Iops</code> attribute. The maximum ratio of provisioned IOPS to requested volume size (in GiB) is 50:1. Amazon Web Services uses the default volume size (in GiB) specified in the AMI attributes to set IOPS to 50 x (volume size).</p>"
-        },
-        "DeleteOnTermination":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the volume is deleted on instance termination.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Amazon EBS volume. This data type maps directly to the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html\">EbsBlockDevice</a> data type.</p>"
-    },
-    "EcsCluster":{
-      "type":"structure",
-      "members":{
-        "EcsClusterArn":{
-          "shape":"String",
-          "documentation":"<p>The cluster's ARN.</p>"
-        },
-        "EcsClusterName":{
-          "shape":"String",
-          "documentation":"<p>The cluster name.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "RegisteredAt":{
-          "shape":"DateTime",
-          "documentation":"<p>The time and date that the cluster was registered with the stack.</p>"
-        }
-      },
-      "documentation":"<p>Describes a registered Amazon ECS cluster.</p>"
-    },
-    "EcsClusters":{
-      "type":"list",
-      "member":{"shape":"EcsCluster"}
-    },
-    "ElasticIp":{
-      "type":"structure",
-      "members":{
-        "Ip":{
-          "shape":"String",
-          "documentation":"<p>The IP address.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The name, which can be a maximum of 32 characters.</p>"
-        },
-        "Domain":{
-          "shape":"String",
-          "documentation":"<p>The domain.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the instance that the address is attached to.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Elastic IP address.</p>"
-    },
-    "ElasticIps":{
-      "type":"list",
-      "member":{"shape":"ElasticIp"}
-    },
-    "ElasticLoadBalancer":{
-      "type":"structure",
-      "members":{
-        "ElasticLoadBalancerName":{
-          "shape":"String",
-          "documentation":"<p>The Elastic Load Balancing instance name.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon Web Services Region.</p>"
-        },
-        "DnsName":{
-          "shape":"String",
-          "documentation":"<p>The instance's public DNS name.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the stack with which the instance is associated.</p>"
-        },
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the layer to which the instance is attached.</p>"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The VPC ID.</p>"
-        },
-        "AvailabilityZones":{
-          "shape":"Strings",
-          "documentation":"<p>A list of Availability Zones.</p>"
-        },
-        "SubnetIds":{
-          "shape":"Strings",
-          "documentation":"<p>A list of subnet IDs, if the stack is running in a VPC.</p>"
-        },
-        "Ec2InstanceIds":{
-          "shape":"Strings",
-          "documentation":"<p>A list of the EC2 instances for which the Elastic Load Balancing instance is managing traffic.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Elastic Load Balancing instance.</p>"
-    },
-    "ElasticLoadBalancers":{
-      "type":"list",
-      "member":{"shape":"ElasticLoadBalancer"}
-    },
-    "EnvironmentVariable":{
-      "type":"structure",
-      "required":[
-        "Key",
-        "Value"
-      ],
-      "members":{
-        "Key":{
-          "shape":"String",
-          "documentation":"<p>(Required) The environment variable's name, which can consist of up to 64 characters and must be specified. The name can contain upper- and lowercase letters, numbers, and underscores (_), but it must start with a letter or underscore.</p>"
-        },
-        "Value":{
-          "shape":"String",
-          "documentation":"<p>(Optional) The environment variable's value, which can be left empty. If you specify a value, it can contain up to 256 characters, which must all be printable.</p>"
-        },
-        "Secure":{
-          "shape":"Boolean",
-          "documentation":"<p>(Optional) Whether the variable's value is returned by the <a>DescribeApps</a> action. To hide an environment variable's value, set <code>Secure</code> to <code>true</code>. <code>DescribeApps</code> returns <code>*****FILTERED*****</code> instead of the actual value. The default value for <code>Secure</code> is <code>false</code>. </p>"
-        }
-      },
-      "documentation":"<p>Represents an app's environment variable.</p>"
-    },
-    "EnvironmentVariables":{
-      "type":"list",
-      "member":{"shape":"EnvironmentVariable"}
-    },
-    "GetHostnameSuggestionRequest":{
-      "type":"structure",
-      "required":["LayerId"],
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        }
-      }
-    },
-    "GetHostnameSuggestionResult":{
-      "type":"structure",
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        },
-        "Hostname":{
-          "shape":"String",
-          "documentation":"<p>The generated host name.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>GetHostnameSuggestion</code> request.</p>"
-    },
-    "GrantAccessRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance's OpsWorks Stacks ID.</p>"
-        },
-        "ValidForInMinutes":{
-          "shape":"ValidForInMinutes",
-          "documentation":"<p>The length of time (in minutes) that the grant is valid. When the grant expires at the end of this period, the user will no longer be able to use the credentials to log in. If the user is logged in at the time, they are logged out.</p>"
-        }
-      }
-    },
-    "GrantAccessResult":{
-      "type":"structure",
-      "members":{
-        "TemporaryCredential":{
-          "shape":"TemporaryCredential",
-          "documentation":"<p>A <code>TemporaryCredential</code> object that contains the data needed to log in to the instance by RDP clients, such as the Microsoft Remote Desktop Connection.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>GrantAccess</code> request.</p>"
-    },
-    "Hour":{"type":"string"},
-    "Instance":{
-      "type":"structure",
-      "members":{
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The agent version. This parameter is set to <code>INHERIT</code> if the instance inherits the default stack setting or to a a version number for a fixed agent version.</p>"
-        },
-        "AmiId":{
-          "shape":"String",
-          "documentation":"<p>A custom AMI ID to be used to create the instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Instances</a> </p>"
-        },
-        "Architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The instance architecture: \"i386\" or \"x86_64\".</p>"
-        },
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon Resource Number (ARN).</p>"
-        },
-        "AutoScalingType":{
-          "shape":"AutoScalingType",
-          "documentation":"<p>For load-based or time-based instances, the type.</p>"
-        },
-        "AvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The instance Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "BlockDeviceMappings":{
-          "shape":"BlockDeviceMappings",
-          "documentation":"<p>An array of <code>BlockDeviceMapping</code> objects that specify the instance's block device mappings.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>The time that the instance was created.</p>"
-        },
-        "EbsOptimized":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether this is an Amazon EBS-optimized instance.</p>"
-        },
-        "Ec2InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the associated Amazon EC2 instance.</p>"
-        },
-        "EcsClusterArn":{
-          "shape":"String",
-          "documentation":"<p>For container instances, the Amazon ECS cluster's ARN.</p>"
-        },
-        "EcsContainerInstanceArn":{
-          "shape":"String",
-          "documentation":"<p>For container instances, the instance's ARN.</p>"
-        },
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The instance <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP address</a>.</p>"
-        },
-        "Hostname":{
-          "shape":"String",
-          "documentation":"<p>The instance host name. The following are character limits for instance host names.</p> <ul> <li> <p>Linux-based instances: 63 characters</p> </li> <li> <p>Windows-based instances: 15 characters</p> </li> </ul>"
-        },
-        "InfrastructureClass":{
-          "shape":"String",
-          "documentation":"<p>For registered instances, the infrastructure class: <code>ec2</code> or <code>on-premises</code>.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. If this value is set to <code>false</code>, you must update instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or by manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>We strongly recommend using the default value of <code>true</code> to ensure that your instances have the latest security updates.</p> </note>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "InstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the instance's IAM profile. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p>The instance type, such as <code>t2.micro</code>.</p>"
-        },
-        "LastServiceErrorId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the last service error. For more information, call <a>DescribeServiceErrors</a>.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the instance layer IDs.</p>"
-        },
-        "Os":{
-          "shape":"String",
-          "documentation":"<p>The instance's operating system.</p>"
-        },
-        "Platform":{
-          "shape":"String",
-          "documentation":"<p>The instance's platform.</p>"
-        },
-        "PrivateDns":{
-          "shape":"String",
-          "documentation":"<p>The instance's private DNS name.</p>"
-        },
-        "PrivateIp":{
-          "shape":"String",
-          "documentation":"<p>The instance's private IP address.</p>"
-        },
-        "PublicDns":{
-          "shape":"String",
-          "documentation":"<p>The instance public DNS name.</p>"
-        },
-        "PublicIp":{
-          "shape":"String",
-          "documentation":"<p>The instance public IP address.</p>"
-        },
-        "RegisteredBy":{
-          "shape":"String",
-          "documentation":"<p>For registered instances, who performed the registration.</p>"
-        },
-        "ReportedAgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The instance's reported OpsWorks Stacks agent version.</p>"
-        },
-        "ReportedOs":{
-          "shape":"ReportedOs",
-          "documentation":"<p>For registered instances, the reported operating system.</p>"
-        },
-        "RootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The instance's root device type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>.</p>"
-        },
-        "RootDeviceVolumeId":{
-          "shape":"String",
-          "documentation":"<p>The root device volume ID.</p>"
-        },
-        "SecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the instance security group IDs.</p>"
-        },
-        "SshHostDsaKeyFingerprint":{
-          "shape":"String",
-          "documentation":"<p>The SSH key's Deep Security Agent (DSA) fingerprint.</p>"
-        },
-        "SshHostRsaKeyFingerprint":{
-          "shape":"String",
-          "documentation":"<p>The SSH key's RSA fingerprint.</p>"
-        },
-        "SshKeyName":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon EC2 key-pair name.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The instance status:</p> <ul> <li> <p> <code>booting</code> </p> </li> <li> <p> <code>connection_lost</code> </p> </li> <li> <p> <code>online</code> </p> </li> <li> <p> <code>pending</code> </p> </li> <li> <p> <code>rebooting</code> </p> </li> <li> <p> <code>requested</code> </p> </li> <li> <p> <code>running_setup</code> </p> </li> <li> <p> <code>setup_failed</code> </p> </li> <li> <p> <code>shutting_down</code> </p> </li> <li> <p> <code>start_failed</code> </p> </li> <li> <p> <code>stop_failed</code> </p> </li> <li> <p> <code>stopped</code> </p> </li> <li> <p> <code>stopping</code> </p> </li> <li> <p> <code>terminated</code> </p> </li> <li> <p> <code>terminating</code> </p> </li> </ul>"
-        },
-        "SubnetId":{
-          "shape":"String",
-          "documentation":"<p>The instance's subnet ID; applicable only if the stack is running in a VPC.</p>"
-        },
-        "Tenancy":{
-          "shape":"String",
-          "documentation":"<p>The instance's tenancy option, such as <code>dedicated</code> or <code>host</code>.</p>"
-        },
-        "VirtualizationType":{
-          "shape":"VirtualizationType",
-          "documentation":"<p>The instance's virtualization type: <code>paravirtual</code> or <code>hvm</code>.</p>"
-        }
-      },
-      "documentation":"<p>Describes an instance.</p>"
-    },
-    "InstanceIdentity":{
-      "type":"structure",
-      "members":{
-        "Document":{
-          "shape":"String",
-          "documentation":"<p>A JSON document that contains the metadata.</p>"
-        },
-        "Signature":{
-          "shape":"String",
-          "documentation":"<p>A signature that can be used to verify the document's accuracy and authenticity.</p>"
-        }
-      },
-      "documentation":"<p>Contains a description of an Amazon EC2 instance from the Amazon EC2 metadata service. For more information, see <a href=\"https://docs.aws.amazon.com/sdkfornet/latest/apidocs/Index.html\">Instance Metadata and User Data</a>.</p>"
-    },
-    "Instances":{
-      "type":"list",
-      "member":{"shape":"Instance"}
-    },
-    "InstancesCount":{
-      "type":"structure",
-      "members":{
-        "Assigning":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances in the Assigning state.</p>"
-        },
-        "Booting":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>booting</code> status.</p>"
-        },
-        "ConnectionLost":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>connection_lost</code> status.</p>"
-        },
-        "Deregistering":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances in the Deregistering state.</p>"
-        },
-        "Online":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>online</code> status.</p>"
-        },
-        "Pending":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>pending</code> status.</p>"
-        },
-        "Rebooting":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>rebooting</code> status.</p>"
-        },
-        "Registered":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances in the Registered state.</p>"
-        },
-        "Registering":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances in the Registering state.</p>"
-        },
-        "Requested":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>requested</code> status.</p>"
-        },
-        "RunningSetup":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>running_setup</code> status.</p>"
-        },
-        "SetupFailed":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>setup_failed</code> status.</p>"
-        },
-        "ShuttingDown":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>shutting_down</code> status.</p>"
-        },
-        "StartFailed":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>start_failed</code> status.</p>"
-        },
-        "StopFailed":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>stop_failed</code> status.</p>"
-        },
-        "Stopped":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>stopped</code> status.</p>"
-        },
-        "Stopping":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>stopping</code> status.</p>"
-        },
-        "Terminated":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>terminated</code> status.</p>"
-        },
-        "Terminating":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances with <code>terminating</code> status.</p>"
-        },
-        "Unassigning":{
-          "shape":"Integer",
-          "documentation":"<p>The number of instances in the Unassigning state.</p>"
-        }
-      },
-      "documentation":"<p>Describes how many instances a stack has for each status.</p>"
-    },
-    "Integer":{
-      "type":"integer",
-      "box":true
-    },
-    "Layer":{
-      "type":"structure",
-      "members":{
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Number (ARN) of a layer.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The layer stack ID.</p>"
-        },
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        },
-        "Type":{
-          "shape":"LayerType",
-          "documentation":"<p>The layer type.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The layer name. Layer names can be a maximum of 32 characters.</p>"
-        },
-        "Shortname":{
-          "shape":"String",
-          "documentation":"<p>The layer short name.</p>"
-        },
-        "Attributes":{
-          "shape":"LayerAttributes",
-          "documentation":"<p>The layer attributes.</p> <p>For the <code>HaproxyStatsPassword</code>, <code>MysqlRootPassword</code>, and <code>GangliaPassword</code> attributes, OpsWorks Stacks returns <code>*****FILTERED*****</code> instead of the actual value</p> <p>For an ECS Cluster layer, OpsWorks Stacks the <code>EcsClusterArn</code> attribute is set to the cluster's ARN.</p>"
-        },
-        "CloudWatchLogsConfiguration":{
-          "shape":"CloudWatchLogsConfiguration",
-          "documentation":"<p>The Amazon CloudWatch Logs configuration settings for the layer.</p>"
-        },
-        "CustomInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the default IAM profile to be used for the layer's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A JSON formatted string containing the layer's custom stack configuration and deployment attributes.</p>"
-        },
-        "CustomSecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the layer's custom security group IDs.</p>"
-        },
-        "DefaultSecurityGroupNames":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the layer's security group names.</p>"
-        },
-        "Packages":{
-          "shape":"Strings",
-          "documentation":"<p>An array of <code>Package</code> objects that describe the layer's packages.</p>"
-        },
-        "VolumeConfigurations":{
-          "shape":"VolumeConfigurations",
-          "documentation":"<p>A <code>VolumeConfigurations</code> object that describes the layer's Amazon EBS volumes.</p>"
-        },
-        "EnableAutoHealing":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether auto healing is disabled for the layer.</p>"
-        },
-        "AutoAssignElasticIps":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to automatically assign an <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP address</a> to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "AutoAssignPublicIps":{
-          "shape":"Boolean",
-          "documentation":"<p>For stacks that are running in a VPC, whether to automatically assign a public IP address to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "DefaultRecipes":{
-          "shape":"Recipes",
-          "documentation":"<p>OpsWorks Stacks supports five lifecycle events: <b>setup</b>, <b>configuration</b>, <b>deploy</b>, <b>undeploy</b>, and <b>shutdown</b>. For each layer, OpsWorks Stacks runs a set of standard recipes for each event. You can also provide custom recipes for any or all layers and events. OpsWorks Stacks runs custom event recipes after the standard recipes. <code>LayerCustomRecipes</code> specifies the custom recipes for a particular layer to be run in response to each of the five events.</p> <p>To specify a recipe, use the cookbook's directory name in the repository followed by two colons and the recipe name, which is the recipe's file name without the <code>.rb</code> extension. For example: <code>phpapp2::dbsetup</code> specifies the <code>dbsetup.rb</code> recipe in the repository's <code>phpapp2</code> folder.</p>"
-        },
-        "CustomRecipes":{
-          "shape":"Recipes",
-          "documentation":"<p>A <code>LayerCustomRecipes</code> object that specifies the layer's custom recipes.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>Date when the layer was created.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. If this value is set to <code>false</code>, you must then update your instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>We strongly recommend using the default value of <code>true</code>, to ensure that your instances have the latest security updates.</p> </note>"
-        },
-        "UseEbsOptimizedInstances":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the layer uses Amazon EBS-optimized instances.</p>"
-        },
-        "LifecycleEventConfiguration":{
-          "shape":"LifecycleEventConfiguration",
-          "documentation":"<p>A <code>LifeCycleEventConfiguration</code> object that specifies the Shutdown event configuration.</p>"
-        }
-      },
-      "documentation":"<p>Describes a layer.</p>"
-    },
-    "LayerAttributes":{
-      "type":"map",
-      "key":{"shape":"LayerAttributesKeys"},
-      "value":{"shape":"String"}
-    },
-    "LayerAttributesKeys":{
-      "type":"string",
-      "enum":[
-        "EcsClusterArn",
-        "EnableHaproxyStats",
-        "HaproxyStatsUrl",
-        "HaproxyStatsUser",
-        "HaproxyStatsPassword",
-        "HaproxyHealthCheckUrl",
-        "HaproxyHealthCheckMethod",
-        "MysqlRootPassword",
-        "MysqlRootPasswordUbiquitous",
-        "GangliaUrl",
-        "GangliaUser",
-        "GangliaPassword",
-        "MemcachedMemory",
-        "NodejsVersion",
-        "RubyVersion",
-        "RubygemsVersion",
-        "ManageBundler",
-        "BundlerVersion",
-        "RailsStack",
-        "PassengerVersion",
-        "Jvm",
-        "JvmVersion",
-        "JvmOptions",
-        "JavaAppServer",
-        "JavaAppServerVersion"
-      ]
-    },
-    "LayerType":{
-      "type":"string",
-      "enum":[
-        "aws-flow-ruby",
-        "ecs-cluster",
-        "java-app",
-        "lb",
-        "web",
-        "php-app",
-        "rails-app",
-        "nodejs-app",
-        "memcached",
-        "db-master",
-        "monitoring-master",
-        "custom"
-      ]
-    },
-    "Layers":{
-      "type":"list",
-      "member":{"shape":"Layer"}
-    },
-    "LifecycleEventConfiguration":{
-      "type":"structure",
-      "members":{
-        "Shutdown":{
-          "shape":"ShutdownEventConfiguration",
-          "documentation":"<p>A <code>ShutdownEventConfiguration</code> object that specifies the Shutdown event configuration.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the lifecycle event configuration</p>"
-    },
-    "ListTagsRequest":{
-      "type":"structure",
-      "required":["ResourceArn"],
-      "members":{
-        "ResourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The stack or layer's Amazon Resource Number (ARN).</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>Do not use. A validation exception occurs if you add a <code>MaxResults</code> parameter to a <code>ListTagsRequest</code> call. </p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>Do not use. A validation exception occurs if you add a <code>NextToken</code> parameter to a <code>ListTagsRequest</code> call. </p>"
-        }
-      }
-    },
-    "ListTagsResult":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>A set of key-value pairs that contain tag keys and tag values that are attached to a stack or layer.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If a paginated request does not return all of the remaining results, this parameter is set to a token that you can assign to the request object's <code>NextToken</code> parameter to get the next set of results. If the previous paginated request returned all of the remaining results, this parameter is set to <code>null</code>. </p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>ListTags</code> request.</p>"
-    },
-    "LoadBasedAutoScalingConfiguration":{
-      "type":"structure",
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        },
-        "Enable":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether load-based auto scaling is enabled for the layer.</p>"
-        },
-        "UpScaling":{
-          "shape":"AutoScalingThresholds",
-          "documentation":"<p>An <code>AutoScalingThresholds</code> object that describes the upscaling configuration, which defines how and when OpsWorks Stacks increases the number of instances.</p>"
-        },
-        "DownScaling":{
-          "shape":"AutoScalingThresholds",
-          "documentation":"<p>An <code>AutoScalingThresholds</code> object that describes the downscaling configuration, which defines how and when OpsWorks Stacks reduces the number of instances.</p>"
-        }
-      },
-      "documentation":"<p>Describes a layer's load-based auto scaling configuration.</p>"
-    },
-    "LoadBasedAutoScalingConfigurations":{
-      "type":"list",
-      "member":{"shape":"LoadBasedAutoScalingConfiguration"}
-    },
-    "MaxResults":{"type":"integer"},
-    "Minute":{
-      "type":"integer",
-      "box":true,
-      "max":100,
-      "min":1
-    },
-    "NextToken":{"type":"string"},
-    "OperatingSystem":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The name of the operating system, such as <code>Amazon Linux 2</code>.</p>"
-        },
-        "Id":{
-          "shape":"String",
-          "documentation":"<p>The ID of a supported operating system, such as <code>Amazon Linux 2</code>.</p>"
-        },
-        "Type":{
-          "shape":"String",
-          "documentation":"<p>The type of a supported operating system, either <code>Linux</code> or <code>Windows</code>.</p>"
-        },
-        "ConfigurationManagers":{
-          "shape":"OperatingSystemConfigurationManagers",
-          "documentation":"<p>Supported configuration manager name and versions for an OpsWorks Stacks operating system.</p>"
-        },
-        "ReportedName":{
-          "shape":"String",
-          "documentation":"<p>A short name for the operating system manufacturer.</p>"
-        },
-        "ReportedVersion":{
-          "shape":"String",
-          "documentation":"<p>The version of the operating system, including the release and edition, if applicable.</p>"
-        },
-        "Supported":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates that an operating system is not supported for new instances.</p>"
-        }
-      },
-      "documentation":"<p>Describes supported operating systems in OpsWorks Stacks.</p>"
-    },
-    "OperatingSystemConfigurationManager":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The name of the configuration manager, which is Chef.</p>"
-        },
-        "Version":{
-          "shape":"String",
-          "documentation":"<p>The versions of the configuration manager that are supported by an operating system.</p>"
-        }
-      },
-      "documentation":"<p>A block that contains information about the configuration manager (Chef) and the versions of the configuration manager that are supported for an operating system.</p>"
-    },
-    "OperatingSystemConfigurationManagers":{
-      "type":"list",
-      "member":{"shape":"OperatingSystemConfigurationManager"}
-    },
-    "OperatingSystems":{
-      "type":"list",
-      "member":{"shape":"OperatingSystem"}
-    },
-    "Parameters":{
-      "type":"map",
-      "key":{"shape":"String"},
-      "value":{"shape":"String"}
-    },
-    "Permission":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>A stack ID.</p>"
-        },
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) for an Identity and Access Management (IAM) role. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "AllowSsh":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the user can use SSH.</p>"
-        },
-        "AllowSudo":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the user can use <b>sudo</b>.</p>"
-        },
-        "Level":{
-          "shape":"String",
-          "documentation":"<p>The user's permission level, which must be the following:</p> <ul> <li> <p> <code>deny</code> </p> </li> <li> <p> <code>show</code> </p> </li> <li> <p> <code>deploy</code> </p> </li> <li> <p> <code>manage</code> </p> </li> <li> <p> <code>iam_only</code> </p> </li> </ul> <p>For more information on the permissions associated with these levels, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a> </p>"
-        }
-      },
-      "documentation":"<p>Describes stack or user permissions.</p>"
-    },
-    "Permissions":{
-      "type":"list",
-      "member":{"shape":"Permission"}
-    },
-    "RaidArray":{
-      "type":"structure",
-      "members":{
-        "RaidArrayId":{
-          "shape":"String",
-          "documentation":"<p>The array ID.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The array name.</p>"
-        },
-        "RaidLevel":{
-          "shape":"Integer",
-          "documentation":"<p>The <a href=\"http://en.wikipedia.org/wiki/Standard_RAID_levels\">RAID level</a>.</p>"
-        },
-        "NumberOfDisks":{
-          "shape":"Integer",
-          "documentation":"<p>The number of disks in the array.</p>"
-        },
-        "Size":{
-          "shape":"Integer",
-          "documentation":"<p>The array's size.</p>"
-        },
-        "Device":{
-          "shape":"String",
-          "documentation":"<p>The array's Linux device. For example /dev/mdadm0.</p>"
-        },
-        "MountPoint":{
-          "shape":"String",
-          "documentation":"<p>The array's mount point.</p>"
-        },
-        "AvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The array's Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>When the RAID array was created.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "VolumeType":{
-          "shape":"String",
-          "documentation":"<p>The volume type, standard or PIOPS.</p>"
-        },
-        "Iops":{
-          "shape":"Integer",
-          "documentation":"<p>For PIOPS volumes, the IOPS per disk.</p>"
-        }
-      },
-      "documentation":"<p>Describes an instance's RAID array.</p>"
-    },
-    "RaidArrays":{
-      "type":"list",
-      "member":{"shape":"RaidArray"}
-    },
-    "RdsDbInstance":{
-      "type":"structure",
-      "members":{
-        "RdsDbInstanceArn":{
-          "shape":"String",
-          "documentation":"<p>The instance's ARN.</p>"
-        },
-        "DbInstanceIdentifier":{
-          "shape":"String",
-          "documentation":"<p>The database instance identifier.</p>"
-        },
-        "DbUser":{
-          "shape":"String",
-          "documentation":"<p>The master user name.</p>"
-        },
-        "DbPassword":{
-          "shape":"String",
-          "documentation":"<p>OpsWorks Stacks returns <code>*****FILTERED*****</code> instead of the actual value.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon Web Services Region.</p>"
-        },
-        "Address":{
-          "shape":"String",
-          "documentation":"<p>The instance's address.</p>"
-        },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p>The instance's database engine.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the stack with which the instance is registered.</p>"
-        },
-        "MissingOnRds":{
-          "shape":"Boolean",
-          "documentation":"<p>Set to <code>true</code> if OpsWorks Stacks is unable to discover the Amazon RDS instance. OpsWorks Stacks attempts to discover the instance only once. If this value is set to <code>true</code>, you must deregister the instance, and then register it again.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Amazon RDS instance.</p>"
-    },
-    "RdsDbInstances":{
-      "type":"list",
-      "member":{"shape":"RdsDbInstance"}
-    },
-    "RebootInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "Recipes":{
-      "type":"structure",
-      "members":{
-        "Setup":{
-          "shape":"Strings",
-          "documentation":"<p>An array of custom recipe names to be run following a <code>setup</code> event.</p>"
-        },
-        "Configure":{
-          "shape":"Strings",
-          "documentation":"<p>An array of custom recipe names to be run following a <code>configure</code> event.</p>"
-        },
-        "Deploy":{
-          "shape":"Strings",
-          "documentation":"<p>An array of custom recipe names to be run following a <code>deploy</code> event.</p>"
-        },
-        "Undeploy":{
-          "shape":"Strings",
-          "documentation":"<p>An array of custom recipe names to be run following a <code>undeploy</code> event.</p>"
-        },
-        "Shutdown":{
-          "shape":"Strings",
-          "documentation":"<p>An array of custom recipe names to be run following a <code>shutdown</code> event.</p>"
-        }
-      },
-      "documentation":"<p>OpsWorks Stacks supports five lifecycle events: <b>setup</b>, <b>configuration</b>, <b>deploy</b>, <b>undeploy</b>, and <b>shutdown</b>. For each layer, OpsWorks Stacks runs a set of standard recipes for each event. In addition, you can provide custom recipes for any or all layers and events. OpsWorks Stacks runs custom event recipes after the standard recipes. <code>LayerCustomRecipes</code> specifies the custom recipes for a particular layer to be run in response to each of the five events. </p> <p>To specify a recipe, use the cookbook's directory name in the repository followed by two colons and the recipe name, which is the recipe's file name without the .rb extension. For example: phpapp2::dbsetup specifies the dbsetup.rb recipe in the repository's phpapp2 folder.</p>"
-    },
-    "RegisterEcsClusterRequest":{
-      "type":"structure",
-      "required":[
-        "EcsClusterArn",
-        "StackId"
-      ],
-      "members":{
-        "EcsClusterArn":{
-          "shape":"String",
-          "documentation":"<p>The cluster's ARN.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "RegisterEcsClusterResult":{
-      "type":"structure",
-      "members":{
-        "EcsClusterArn":{
-          "shape":"String",
-          "documentation":"<p>The cluster's ARN.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>RegisterEcsCluster</code> request.</p>"
-    },
-    "RegisterElasticIpRequest":{
-      "type":"structure",
-      "required":[
-        "ElasticIp",
-        "StackId"
-      ],
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "RegisterElasticIpResult":{
-      "type":"structure",
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The Elastic IP address.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>RegisterElasticIp</code> request.</p>"
-    },
-    "RegisterInstanceRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the stack that the instance is to be registered with.</p>"
-        },
-        "Hostname":{
-          "shape":"String",
-          "documentation":"<p>The instance's host name. The following are character limits for instance host names.</p> <ul> <li> <p>Linux-based instances: 63 characters</p> </li> <li> <p>Windows-based instances: 15 characters</p> </li> </ul>"
-        },
-        "PublicIp":{
-          "shape":"String",
-          "documentation":"<p>The instance's public IP address.</p>"
-        },
-        "PrivateIp":{
-          "shape":"String",
-          "documentation":"<p>The instance's private IP address.</p>"
-        },
-        "RsaPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The instances public RSA key. This key is used to encrypt communication between the instance and the service.</p>"
-        },
-        "RsaPublicKeyFingerprint":{
-          "shape":"String",
-          "documentation":"<p>The instances public RSA key fingerprint.</p>"
-        },
-        "InstanceIdentity":{
-          "shape":"InstanceIdentity",
-          "documentation":"<p>An InstanceIdentity object that contains the instance's identity.</p>"
-        }
-      }
-    },
-    "RegisterInstanceResult":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The registered instance's OpsWorks Stacks ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>RegisterInstanceResult</code> request.</p>"
-    },
-    "RegisterRdsDbInstanceRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "RdsDbInstanceArn",
-        "DbUser",
-        "DbPassword"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "RdsDbInstanceArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon RDS instance's ARN.</p>"
-        },
-        "DbUser":{
-          "shape":"String",
-          "documentation":"<p>The database's master user name.</p>"
-        },
-        "DbPassword":{
-          "shape":"String",
-          "documentation":"<p>The database password.</p>"
-        }
-      }
-    },
-    "RegisterVolumeRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "Ec2VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The Amazon EBS volume ID.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "RegisterVolumeResult":{
-      "type":"structure",
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The volume ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the response to a <code>RegisterVolume</code> request.</p>"
-    },
-    "ReportedOs":{
-      "type":"structure",
-      "members":{
-        "Family":{
-          "shape":"String",
-          "documentation":"<p>The operating system family.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The operating system name.</p>"
-        },
-        "Version":{
-          "shape":"String",
-          "documentation":"<p>The operating system version.</p>"
-        }
-      },
-      "documentation":"<p>A registered instance's reported operating system.</p>"
-    },
-    "ResourceArn":{"type":"string"},
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The exception message.</p>"
-        }
-      },
-      "documentation":"<p>Indicates that a resource was not found.</p>",
-      "exception":true
-    },
-    "RootDeviceType":{
-      "type":"string",
-      "enum":[
-        "ebs",
-        "instance-store"
-      ]
-    },
-    "SelfUserProfile":{
-      "type":"structure",
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The user's name.</p>"
-        },
-        "SshUsername":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH user name.</p>"
-        },
-        "SshPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH public key.</p>"
-        }
-      },
-      "documentation":"<p>Describes a user's SSH information.</p>"
-    },
-    "ServiceError":{
-      "type":"structure",
-      "members":{
-        "ServiceErrorId":{
-          "shape":"String",
-          "documentation":"<p>The error ID.</p>"
-        },
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "Type":{
-          "shape":"String",
-          "documentation":"<p>The error type.</p>"
-        },
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>A message that describes the error.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>When the error occurred.</p>"
-        }
-      },
-      "documentation":"<p>Describes an OpsWorks Stacks service error.</p>"
-    },
-    "ServiceErrors":{
-      "type":"list",
-      "member":{"shape":"ServiceError"}
-    },
-    "SetLoadBasedAutoScalingRequest":{
-      "type":"structure",
-      "required":["LayerId"],
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        },
-        "Enable":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables load-based auto scaling for the layer.</p>"
-        },
-        "UpScaling":{
-          "shape":"AutoScalingThresholds",
-          "documentation":"<p>An <code>AutoScalingThresholds</code> object with the upscaling threshold configuration. If the load exceeds these thresholds for a specified amount of time, OpsWorks Stacks starts a specified number of instances.</p>"
-        },
-        "DownScaling":{
-          "shape":"AutoScalingThresholds",
-          "documentation":"<p>An <code>AutoScalingThresholds</code> object with the downscaling threshold configuration. If the load falls below these thresholds for a specified amount of time, OpsWorks Stacks stops a specified number of instances.</p>"
-        }
-      }
-    },
-    "SetPermissionRequest":{
-      "type":"structure",
-      "required":[
-        "StackId",
-        "IamUserArn"
-      ],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN. This can also be a federated user's ARN.</p>"
-        },
-        "AllowSsh":{
-          "shape":"Boolean",
-          "documentation":"<p>The user is allowed to use SSH to communicate with the instance.</p>"
-        },
-        "AllowSudo":{
-          "shape":"Boolean",
-          "documentation":"<p>The user is allowed to use <b>sudo</b> to elevate privileges.</p>"
-        },
-        "Level":{
-          "shape":"String",
-          "documentation":"<p>The user's permission level, which must be set to one of the following strings. You cannot set your own permissions level.</p> <ul> <li> <p> <code>deny</code> </p> </li> <li> <p> <code>show</code> </p> </li> <li> <p> <code>deploy</code> </p> </li> <li> <p> <code>manage</code> </p> </li> <li> <p> <code>iam_only</code> </p> </li> </ul> <p>For more information about the permissions associated with these levels, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users.html\">Managing User Permissions</a>.</p>"
-        }
-      }
-    },
-    "SetTimeBasedAutoScalingRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "AutoScalingSchedule":{
-          "shape":"WeeklyAutoScalingSchedule",
-          "documentation":"<p>An <code>AutoScalingSchedule</code> with the instance schedule.</p>"
-        }
-      }
-    },
-    "ShutdownEventConfiguration":{
-      "type":"structure",
-      "members":{
-        "ExecutionTimeout":{
-          "shape":"Integer",
-          "documentation":"<p>The time, in seconds, that OpsWorks Stacks waits after triggering a Shutdown event before shutting down an instance.</p>"
-        },
-        "DelayUntilElbConnectionsDrained":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to enable Elastic Load Balancing connection draining. For more information, see <a href=\"https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#conn-drain\">Connection Draining</a> </p>"
-        }
-      },
-      "documentation":"<p>The Shutdown event configuration.</p>"
-    },
-    "Source":{
-      "type":"structure",
-      "members":{
-        "Type":{
-          "shape":"SourceType",
-          "documentation":"<p>The repository type.</p>"
-        },
-        "Url":{
-          "shape":"String",
-          "documentation":"<p>The source URL. The following is an example of an Amazon S3 source URL: <code>https://s3.amazonaws.com/opsworks-demo-bucket/opsworks_cookbook_demo.tar.gz</code>.</p>"
-        },
-        "Username":{
-          "shape":"String",
-          "documentation":"<p>This parameter depends on the repository type.</p> <ul> <li> <p>For Amazon S3 bundles, set <code>Username</code> to the appropriate IAM access key ID.</p> </li> <li> <p>For HTTP bundles, Git repositories, and Subversion repositories, set <code>Username</code> to the user name.</p> </li> </ul>"
-        },
-        "Password":{
-          "shape":"String",
-          "documentation":"<p>When included in a request, the parameter depends on the repository type.</p> <ul> <li> <p>For Amazon S3 bundles, set <code>Password</code> to the appropriate IAM secret access key.</p> </li> <li> <p>For HTTP bundles and Subversion repositories, set <code>Password</code> to the password.</p> </li> </ul> <p>For more information on how to safely handle IAM credentials, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html\">https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html</a>.</p> <p>In responses, OpsWorks Stacks returns <code>*****FILTERED*****</code> instead of the actual value.</p>"
-        },
-        "SshKey":{
-          "shape":"String",
-          "documentation":"<p>In requests, the repository's SSH key.</p> <p>In responses, OpsWorks Stacks returns <code>*****FILTERED*****</code> instead of the actual value.</p>"
-        },
-        "Revision":{
-          "shape":"String",
-          "documentation":"<p>The application's version. OpsWorks Stacks enables you to easily deploy new versions of an application. One of the simplest approaches is to have branches or revisions in your repository that represent different versions that can potentially be deployed.</p>"
-        }
-      },
-      "documentation":"<p>Contains the information required to retrieve an app or cookbook from a repository. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Creating Apps</a> or <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html\">Custom Recipes and Cookbooks</a>.</p>"
-    },
-    "SourceType":{
-      "type":"string",
-      "enum":[
-        "git",
-        "svn",
-        "archive",
-        "s3"
-      ]
-    },
-    "SslConfiguration":{
-      "type":"structure",
-      "required":[
-        "Certificate",
-        "PrivateKey"
-      ],
-      "members":{
-        "Certificate":{
-          "shape":"String",
-          "documentation":"<p>The contents of the certificate's domain.crt file.</p>"
-        },
-        "PrivateKey":{
-          "shape":"String",
-          "documentation":"<p>The private key; the contents of the certificate's domain.kex file.</p>"
-        },
-        "Chain":{
-          "shape":"String",
-          "documentation":"<p>Optional. Can be used to specify an intermediate certificate authority key or client authentication.</p>"
-        }
-      },
-      "documentation":"<p>Describes an app's SSL configuration.</p>"
-    },
-    "Stack":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The stack name. Stack names can be a maximum of 64 characters.</p>"
-        },
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The stack's ARN.</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The stack Amazon Web Services Region, such as <code>ap-northeast-2</code>. For more information about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "VpcId":{
-          "shape":"String",
-          "documentation":"<p>The VPC ID; applicable only if the stack is running in a VPC.</p>"
-        },
-        "Attributes":{
-          "shape":"StackAttributes",
-          "documentation":"<p>The stack's attributes.</p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p>The stack Identity and Access Management (IAM) role.</p>"
-        },
-        "DefaultInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of an IAM profile that is the default profile for all of the stack's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "DefaultOs":{
-          "shape":"String",
-          "documentation":"<p>The stack's default operating system.</p>"
-        },
-        "HostnameTheme":{
-          "shape":"String",
-          "documentation":"<p>The stack host name theme, with spaces replaced by underscores.</p>"
-        },
-        "DefaultAvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The stack's default Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "DefaultSubnetId":{
-          "shape":"String",
-          "documentation":"<p>The default subnet ID; applicable only if the stack is running in a VPC.</p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A JSON object that contains user-defined attributes to be added to the stack configuration and deployment attributes. You can use custom JSON to override the corresponding default stack configuration attribute values or to pass data to recipes. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information on custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a>.</p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager.</p>"
-        },
-        "ChefConfiguration":{
-          "shape":"ChefConfiguration",
-          "documentation":"<p>A <code>ChefConfiguration</code> object that specifies whether to enable Berkshelf and the Berkshelf version. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "UseCustomCookbooks":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the stack uses custom cookbooks.</p>"
-        },
-        "UseOpsworksSecurityGroups":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the stack automatically associates the OpsWorks Stacks built-in security groups with the stack's layers.</p>"
-        },
-        "CustomCookbooksSource":{
-          "shape":"Source",
-          "documentation":"<p>Contains the information required to retrieve an app or cookbook from a repository. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Adding Apps</a> or <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html\">Cookbooks and Recipes</a>.</p>"
-        },
-        "DefaultSshKeyName":{
-          "shape":"String",
-          "documentation":"<p>A default Amazon EC2 key pair for the stack's instances. You can override this value when you create or update an instance.</p>"
-        },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>The date when the stack was created.</p>"
-        },
-        "DefaultRootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The default root device type. This value is used by default for all instances in the stack, but you can override it when you create an instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>. </p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The agent version. This parameter is set to <code>LATEST</code> for auto-update. or a version number for a fixed agent version.</p>"
-        }
-      },
-      "documentation":"<p>Describes a stack.</p>"
-    },
-    "StackAttributes":{
-      "type":"map",
-      "key":{"shape":"StackAttributesKeys"},
-      "value":{"shape":"String"}
-    },
-    "StackAttributesKeys":{
-      "type":"string",
-      "enum":["Color"]
-    },
-    "StackConfigurationManager":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The name. This parameter must be set to <code>Chef</code>.</p>"
-        },
-        "Version":{
-          "shape":"String",
-          "documentation":"<p>The Chef version. This parameter must be set to 12, 11.10, or 11.4 for Linux stacks, and to 12.2 for Windows stacks. The default value for Linux stacks is 12.</p>"
-        }
-      },
-      "documentation":"<p>Describes the configuration manager.</p>"
-    },
-    "StackSummary":{
-      "type":"structure",
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The stack name.</p>"
-        },
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The stack's ARN.</p>"
-        },
-        "LayersCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of layers.</p>"
-        },
-        "AppsCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of apps.</p>"
-        },
-        "InstancesCount":{
-          "shape":"InstancesCount",
-          "documentation":"<p>An <code>InstancesCount</code> object with the number of instances in each status.</p>"
-        }
-      },
-      "documentation":"<p>Summarizes the number of layers, instances, and apps in a stack.</p>"
-    },
-    "Stacks":{
-      "type":"list",
-      "member":{"shape":"Stack"}
-    },
-    "StartInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "StartStackRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "StopInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "Force":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether to force an instance to stop. If the instance's root device type is <code>ebs</code>, or EBS-backed, adding the <code>Force</code> parameter to the <code>StopInstances</code> API call disassociates the OpsWorks Stacks instance from EC2, and forces deletion of <i>only</i> the OpsWorks Stacks instance. You must also delete the formerly-associated instance in EC2 after troubleshooting and replacing the OpsWorks Stacks instance with a new one.</p>"
-        }
-      }
-    },
-    "StopStackRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        }
-      }
-    },
-    "String":{"type":"string"},
-    "Strings":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "Switch":{"type":"string"},
-    "TagKey":{"type":"string"},
-    "TagKeys":{
-      "type":"list",
-      "member":{"shape":"TagKey"}
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "Tags"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The stack or layer's Amazon Resource Number (ARN).</p>"
-        },
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to a stack or layer.</p> <ul> <li> <p>The key cannot be empty.</p> </li> <li> <p>The key can be a maximum of 127 characters, and can contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>The value can be a maximum 255 characters, and contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>Leading and trailing white spaces are trimmed from both the key and value.</p> </li> <li> <p>A maximum of 40 tags is allowed for any resource.</p> </li> </ul>"
-        }
-      }
-    },
-    "TagValue":{"type":"string"},
-    "Tags":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"}
-    },
-    "TemporaryCredential":{
-      "type":"structure",
-      "members":{
-        "Username":{
-          "shape":"String",
-          "documentation":"<p>The user name.</p>"
-        },
-        "Password":{
-          "shape":"String",
-          "documentation":"<p>The password.</p>"
-        },
-        "ValidForInMinutes":{
-          "shape":"Integer",
-          "documentation":"<p>The length of time (in minutes) that the grant is valid. When the grant expires, at the end of this period, the user will no longer be able to use the credentials to log in. If they are logged in at the time, they are automatically logged out.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance's OpsWorks Stacks ID.</p>"
-        }
-      },
-      "documentation":"<p>Contains the data needed by RDP clients such as the Microsoft Remote Desktop Connection to log in to the instance.</p>"
-    },
-    "TimeBasedAutoScalingConfiguration":{
-      "type":"structure",
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "AutoScalingSchedule":{
-          "shape":"WeeklyAutoScalingSchedule",
-          "documentation":"<p>A <code>WeeklyAutoScalingSchedule</code> object with the instance schedule.</p>"
-        }
-      },
-      "documentation":"<p>Describes an instance's time-based auto scaling configuration.</p>"
-    },
-    "TimeBasedAutoScalingConfigurations":{
-      "type":"list",
-      "member":{"shape":"TimeBasedAutoScalingConfiguration"}
-    },
-    "UnassignInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        }
-      }
-    },
-    "UnassignVolumeRequest":{
-      "type":"structure",
-      "required":["VolumeId"],
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The volume ID.</p>"
-        }
-      }
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The stack or layer's Amazon Resource Number (ARN).</p>"
-        },
-        "TagKeys":{
-          "shape":"TagKeys",
-          "documentation":"<p>A list of the keys of tags to be removed from a stack or layer.</p>"
-        }
-      }
-    },
-    "UpdateAppRequest":{
-      "type":"structure",
-      "required":["AppId"],
-      "members":{
-        "AppId":{
-          "shape":"String",
-          "documentation":"<p>The app ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The app name.</p>"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p>A description of the app.</p>"
-        },
-        "DataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The app's data sources.</p>"
-        },
-        "Type":{
-          "shape":"AppType",
-          "documentation":"<p>The app type.</p>"
-        },
-        "AppSource":{
-          "shape":"Source",
-          "documentation":"<p>A <code>Source</code> object that specifies the app repository.</p>"
-        },
-        "Domains":{
-          "shape":"Strings",
-          "documentation":"<p>The app's virtual host settings, with multiple domains separated by commas. For example: <code>'www.example.com, example.com'</code> </p>"
-        },
-        "EnableSsl":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether SSL is enabled for the app.</p>"
-        },
-        "SslConfiguration":{
-          "shape":"SslConfiguration",
-          "documentation":"<p>An <code>SslConfiguration</code> object with the SSL configuration.</p>"
-        },
-        "Attributes":{
-          "shape":"AppAttributes",
-          "documentation":"<p>One or more user-defined key/value pairs to be added to the stack attributes.</p>"
-        },
-        "Environment":{
-          "shape":"EnvironmentVariables",
-          "documentation":"<p>An array of <code>EnvironmentVariable</code> objects that specify environment variables to be associated with the app. After you deploy the app, these variables are defined on the associated app server instances.For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment\"> Environment Variables</a>.</p> <p>There is no specific limit on the number of environment variables. However, the size of the associated data structure - which includes the variables' names, values, and protected flag values - cannot exceed 20 KB. This limit should accommodate most if not all use cases. Exceeding it will cause an exception with the message, \"Environment: is too large (maximum is 20 KB).\"</p> <note> <p>If you have specified one or more environment variables, you cannot modify the stack's Chef version.</p> </note>"
-        }
-      }
-    },
-    "UpdateElasticIpRequest":{
-      "type":"structure",
-      "required":["ElasticIp"],
-      "members":{
-        "ElasticIp":{
-          "shape":"String",
-          "documentation":"<p>The IP address for which you want to update the name.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The new name, which can be a maximum of 32 characters.</p>"
-        }
-      }
-    },
-    "UpdateInstanceRequest":{
-      "type":"structure",
-      "required":["InstanceId"],
-      "members":{
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "LayerIds":{
-          "shape":"Strings",
-          "documentation":"<p>The instance's layer IDs.</p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p>The instance type, such as <code>t2.micro</code>. For a list of supported instance types, open the stack in the console, choose <b>Instances</b>, and choose <b>+ Instance</b>. The <b>Size</b> list contains the currently supported types. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance Families and Types</a>. The parameter values that you use to specify the various types are in the <b>API Name</b> column of the <b>Available Instance Types</b> table.</p>"
-        },
-        "AutoScalingType":{
-          "shape":"AutoScalingType",
-          "documentation":"<p>For load-based or time-based instances, the type. Windows stacks can use only time-based instances.</p>"
-        },
-        "Hostname":{
-          "shape":"String",
-          "documentation":"<p>The instance host name. The following are character limits for instance host names.</p> <ul> <li> <p>Linux-based instances: 63 characters</p> </li> <li> <p>Windows-based instances: 15 characters</p> </li> </ul>"
-        },
-        "Os":{
-          "shape":"String",
-          "documentation":"<p>The instance's operating system, which must be set to one of the following. You cannot update an instance that is using a custom AMI.</p> <ul> <li> <p>A supported Linux operating system: An Amazon Linux version, such as <code>Amazon Linux 2</code>, <code>Amazon Linux 2018.03</code>, <code>Amazon Linux 2017.09</code>, <code>Amazon Linux 2017.03</code>, <code>Amazon Linux 2016.09</code>, <code>Amazon Linux 2016.03</code>, <code>Amazon Linux 2015.09</code>, or <code>Amazon Linux 2015.03</code>.</p> </li> <li> <p>A supported Ubuntu operating system, such as <code>Ubuntu 18.04 LTS</code>, <code>Ubuntu 16.04 LTS</code>, <code>Ubuntu 14.04 LTS</code>, or <code>Ubuntu 12.04 LTS</code>.</p> </li> <li> <p> <code>CentOS Linux 7</code> </p> </li> <li> <p> <code>Red Hat Enterprise Linux 7</code> </p> </li> <li> <p>A supported Windows operating system, such as <code>Microsoft Windows Server 2012 R2 Base</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Express</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Standard</code>, or <code>Microsoft Windows Server 2012 R2 with SQL Server Web</code>.</p> </li> </ul> <p>Not all operating systems are supported with all versions of Chef. For more information about supported operating systems, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html\">OpsWorks Stacks Operating Systems</a>.</p> <p>The default option is the current Amazon Linux version. If you set this parameter to <code>Custom</code>, you must use the AmiId parameter to specify the custom AMI that you want to use. For more information about how to use custom AMIs with OpsWorks, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Using Custom AMIs</a>.</p> <note> <p>You can specify a different Linux operating system for the updated stack, but you cannot change from Linux to Windows or Windows to Linux.</p> </note>"
-        },
-        "AmiId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the AMI that was used to create the instance. The value of this parameter must be the same AMI ID that the instance is already using. You cannot apply a new AMI to an instance by running UpdateInstance. UpdateInstance does not work on instances that are using custom AMIs. </p>"
-        },
-        "SshKeyName":{
-          "shape":"String",
-          "documentation":"<p>The instance's Amazon EC2 key name.</p>"
-        },
-        "Architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The instance architecture. Instance types do not necessarily support both architectures. For a list of the architectures that are supported by the different instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance Families and Types</a>.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. To control when updates are installed, set this value to <code>false</code>. You must then update your instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or by manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>We strongly recommend using the default value of <code>true</code>, to ensure that your instances have the latest security updates.</p> </note>"
-        },
-        "EbsOptimized":{
-          "shape":"Boolean",
-          "documentation":"<p>This property cannot be updated.</p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The default OpsWorks Stacks agent version. You have the following options:</p> <ul> <li> <p> <code>INHERIT</code> - Use the stack's default agent version setting.</p> </li> <li> <p> <i>version_number</i> - Use the specified agent version. This value overrides the stack's default setting. To update the agent version, you must edit the instance configuration and specify a new version. OpsWorks Stacks installs that version on the instance.</p> </li> </ul> <p>The default setting is <code>INHERIT</code>. To specify an agent version, you must use the complete version number, not the abbreviated number shown on the console. For a list of available agent version numbers, call <a>DescribeAgentVersions</a>.</p> <p>AgentVersion cannot be set to Chef 12.2.</p>"
-        }
-      }
-    },
-    "UpdateLayerRequest":{
-      "type":"structure",
-      "required":["LayerId"],
-      "members":{
-        "LayerId":{
-          "shape":"String",
-          "documentation":"<p>The layer ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The layer name, which is used by the console. Layer names can be a maximum of 32 characters.</p>"
-        },
-        "Shortname":{
-          "shape":"String",
-          "documentation":"<p>For custom layers only, use this parameter to specify the layer's short name, which is used internally by OpsWorks Stacks and by Chef. The short name is also used as the name for the directory where your app files are installed. It can have a maximum of 32 characters and must be in the following format: /\\A[a-z0-9\\-\\_\\.]+\\Z/.</p> <p>Built-in layer short names are defined by OpsWorks Stacks. For more information, see the <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/layers.html\">Layer reference</a> in the OpsWorks User Guide. </p>"
-        },
-        "Attributes":{
-          "shape":"LayerAttributes",
-          "documentation":"<p>One or more user-defined key/value pairs to be added to the stack attributes.</p>"
-        },
-        "CloudWatchLogsConfiguration":{
-          "shape":"CloudWatchLogsConfiguration",
-          "documentation":"<p>Specifies CloudWatch Logs configuration options for the layer. For more information, see <a>CloudWatchLogsLogStream</a>.</p>"
-        },
-        "CustomInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of an IAM profile to be used for all of the layer's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A JSON-formatted string containing custom stack configuration and deployment attributes to be installed on the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html\"> Using Custom JSON</a>. </p>"
-        },
-        "CustomSecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p>An array containing the layer's custom security group IDs.</p>"
-        },
-        "Packages":{
-          "shape":"Strings",
-          "documentation":"<p>An array of <code>Package</code> objects that describe the layer's packages.</p>"
-        },
-        "VolumeConfigurations":{
-          "shape":"VolumeConfigurations",
-          "documentation":"<p>A <code>VolumeConfigurations</code> object that describes the layer's Amazon EBS volumes.</p>"
-        },
-        "EnableAutoHealing":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to disable auto healing for the layer.</p>"
-        },
-        "AutoAssignElasticIps":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to automatically assign an <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP address</a> to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "AutoAssignPublicIps":{
-          "shape":"Boolean",
-          "documentation":"<p>For stacks that are running in a VPC, whether to automatically assign a public IP address to the layer's instances. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html\">How to Edit a Layer</a>.</p>"
-        },
-        "CustomRecipes":{
-          "shape":"Recipes",
-          "documentation":"<p>A <code>LayerCustomRecipes</code> object that specifies the layer's custom recipes.</p>"
-        },
-        "InstallUpdatesOnBoot":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to install operating system and package updates when the instance boots. The default value is <code>true</code>. To control when updates are installed, set this value to <code>false</code>. You must then update your instances manually by using <a>CreateDeployment</a> to run the <code>update_dependencies</code> stack command or manually running <code>yum</code> (Amazon Linux) or <code>apt-get</code> (Ubuntu) on the instances. </p> <note> <p>We strongly recommend using the default value of <code>true</code>, to ensure that your instances have the latest security updates.</p> </note>"
-        },
-        "UseEbsOptimizedInstances":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to use Amazon EBS-optimized instances.</p>"
-        },
-        "LifecycleEventConfiguration":{
-          "shape":"LifecycleEventConfiguration",
-          "documentation":"<p/>"
-        }
-      }
-    },
-    "UpdateMyUserProfileRequest":{
-      "type":"structure",
-      "members":{
-        "SshPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH public key.</p>"
-        }
-      }
-    },
-    "UpdateRdsDbInstanceRequest":{
-      "type":"structure",
-      "required":["RdsDbInstanceArn"],
-      "members":{
-        "RdsDbInstanceArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon RDS instance's ARN.</p>"
-        },
-        "DbUser":{
-          "shape":"String",
-          "documentation":"<p>The master user name.</p>"
-        },
-        "DbPassword":{
-          "shape":"String",
-          "documentation":"<p>The database password.</p>"
-        }
-      }
-    },
-    "UpdateStackRequest":{
-      "type":"structure",
-      "required":["StackId"],
-      "members":{
-        "StackId":{
-          "shape":"String",
-          "documentation":"<p>The stack ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The stack's new name. Stack names can be a maximum of 64 characters.</p>"
-        },
-        "Attributes":{
-          "shape":"StackAttributes",
-          "documentation":"<p>One or more user-defined key-value pairs to be added to the stack attributes.</p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p>Do not use this parameter. You cannot update a stack's service role.</p>"
-        },
-        "DefaultInstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of an IAM profile that is the default profile for all of the stack's EC2 instances. For more information about IAM ARNs, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html\">Using Identifiers</a>.</p>"
-        },
-        "DefaultOs":{
-          "shape":"String",
-          "documentation":"<p>The stack's operating system, which must be set to one of the following:</p> <ul> <li> <p>A supported Linux operating system: An Amazon Linux version, such as <code>Amazon Linux 2</code>, <code>Amazon Linux 2018.03</code>, <code>Amazon Linux 2017.09</code>, <code>Amazon Linux 2017.03</code>, <code>Amazon Linux 2016.09</code>, <code>Amazon Linux 2016.03</code>, <code>Amazon Linux 2015.09</code>, or <code>Amazon Linux 2015.03</code>.</p> </li> <li> <p>A supported Ubuntu operating system, such as <code>Ubuntu 18.04 LTS</code>, <code>Ubuntu 16.04 LTS</code>, <code>Ubuntu 14.04 LTS</code>, or <code>Ubuntu 12.04 LTS</code>.</p> </li> <li> <p> <code>CentOS Linux 7</code> </p> </li> <li> <p> <code>Red Hat Enterprise Linux 7</code> </p> </li> <li> <p>A supported Windows operating system, such as <code>Microsoft Windows Server 2012 R2 Base</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Express</code>, <code>Microsoft Windows Server 2012 R2 with SQL Server Standard</code>, or <code>Microsoft Windows Server 2012 R2 with SQL Server Web</code>.</p> </li> <li> <p>A custom AMI: <code>Custom</code>. You specify the custom AMI you want to use when you create instances. For more information about how to use custom AMIs with OpsWorks, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-custom-ami.html\">Using Custom AMIs</a>.</p> </li> </ul> <p>The default option is the stack's current operating system. Not all operating systems are supported with all versions of Chef. For more information about supported operating systems, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-os.html\">OpsWorks Stacks Operating Systems</a>.</p>"
-        },
-        "HostnameTheme":{
-          "shape":"String",
-          "documentation":"<p>The stack's new host name theme, with spaces replaced by underscores. The theme is used to generate host names for the stack's instances. By default, <code>HostnameTheme</code> is set to <code>Layer_Dependent</code>, which creates host names by appending integers to the layer's short name. The other themes are:</p> <ul> <li> <p> <code>Baked_Goods</code> </p> </li> <li> <p> <code>Clouds</code> </p> </li> <li> <p> <code>Europe_Cities</code> </p> </li> <li> <p> <code>Fruits</code> </p> </li> <li> <p> <code>Greek_Deities_and_Titans</code> </p> </li> <li> <p> <code>Legendary_creatures_from_Japan</code> </p> </li> <li> <p> <code>Planets_and_Moons</code> </p> </li> <li> <p> <code>Roman_Deities</code> </p> </li> <li> <p> <code>Scottish_Islands</code> </p> </li> <li> <p> <code>US_Cities</code> </p> </li> <li> <p> <code>Wild_Cats</code> </p> </li> </ul> <p>To obtain a generated host name, call <code>GetHostNameSuggestion</code>, which returns a host name based on the current theme.</p>"
-        },
-        "DefaultAvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The stack's default Availability Zone, which must be in the stack's region. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>. If you also specify a value for <code>DefaultSubnetId</code>, the subnet must be in the same zone. For more information, see <a>CreateStack</a>. </p>"
-        },
-        "DefaultSubnetId":{
-          "shape":"String",
-          "documentation":"<p>The stack's default VPC subnet ID. This parameter is required if you specify a value for the <code>VpcId</code> parameter. All instances are launched into this subnet unless you specify otherwise when you create the instance. If you also specify a value for <code>DefaultAvailabilityZone</code>, the subnet must be in that zone. For information on default values and when this parameter is required, see the <code>VpcId</code> parameter description. </p>"
-        },
-        "CustomJson":{
-          "shape":"String",
-          "documentation":"<p>A string that contains user-defined, custom JSON. It can be used to override the corresponding default stack configuration JSON values or to pass data to recipes. The string should be in the following format:</p> <p> <code>\"{\\\"key1\\\": \\\"value1\\\", \\\"key2\\\": \\\"value2\\\",...}\"</code> </p> <p>For more information about custom JSON, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-json.html\">Use Custom JSON to Modify the Stack Configuration Attributes</a>.</p>"
-        },
-        "ConfigurationManager":{
-          "shape":"StackConfigurationManager",
-          "documentation":"<p>The configuration manager. When you update a stack, we recommend that you use the configuration manager to specify the Chef version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for Linux stacks is currently 12.</p>"
-        },
-        "ChefConfiguration":{
-          "shape":"ChefConfiguration",
-          "documentation":"<p>A <code>ChefConfiguration</code> object that specifies whether to enable Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "UseCustomCookbooks":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the stack uses custom cookbooks.</p>"
-        },
-        "CustomCookbooksSource":{
-          "shape":"Source",
-          "documentation":"<p>Contains the information required to retrieve an app or cookbook from a repository. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html\">Adding Apps</a> or <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook.html\">Cookbooks and Recipes</a>.</p>"
-        },
-        "DefaultSshKeyName":{
-          "shape":"String",
-          "documentation":"<p>A default Amazon EC2 key-pair name. The default value is <code>none</code>. If you specify a key-pair name, OpsWorks Stacks installs the public key on the instance and you can use the private key with an SSH client to log in to the instance. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-ssh.html\"> Using SSH to Communicate with an Instance</a> and <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html\"> Managing SSH Access</a>. You can override this setting by specifying a different key pair, or no key pair, when you <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html\"> create an instance</a>. </p>"
-        },
-        "DefaultRootDeviceType":{
-          "shape":"RootDeviceType",
-          "documentation":"<p>The default root device type. This value is used by default for all instances in the stack, but you can override it when you create an instance. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device\">Storage for the Root Device</a>.</p>"
-        },
-        "UseOpsworksSecurityGroups":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to associate the OpsWorks Stacks built-in security groups with the stack's layers.</p> <p>OpsWorks Stacks provides a standard set of built-in security groups, one for each layer, which are associated with layers by default. <code>UseOpsworksSecurityGroups</code> allows you to provide your own custom security groups instead of using the built-in groups. <code>UseOpsworksSecurityGroups</code> has the following settings: </p> <ul> <li> <p>True - OpsWorks Stacks automatically associates the appropriate built-in security group with each layer (default setting). You can associate additional security groups with a layer after you create it, but you cannot delete the built-in security group.</p> </li> <li> <p>False - OpsWorks Stacks does not associate built-in security groups with layers. You must create appropriate EC2 security groups and associate a security group with each layer that you create. However, you can still manually associate a built-in security group with a layer on. Custom security groups are required only for those layers that need custom settings.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html\">Create a New Stack</a>.</p>"
-        },
-        "AgentVersion":{
-          "shape":"String",
-          "documentation":"<p>The default OpsWorks Stacks agent version. You have the following options:</p> <ul> <li> <p>Auto-update - Set this parameter to <code>LATEST</code>. OpsWorks Stacks automatically installs new agent versions on the stack's instances as soon as they are available.</p> </li> <li> <p>Fixed version - Set this parameter to your preferred agent version. To update the agent version, you must edit the stack configuration and specify a new version. OpsWorks Stacks installs that version on the stack's instances.</p> </li> </ul> <p>The default setting is <code>LATEST</code>. To specify an agent version, you must use the complete version number, not the abbreviated number shown on the console. For a list of available agent version numbers, call <a>DescribeAgentVersions</a>. AgentVersion cannot be set to Chef 12.2.</p> <note> <p>You can also specify an agent version when you create or update an instance, which overrides the stack's default setting.</p> </note>"
-        }
-      }
-    },
-    "UpdateUserProfileRequest":{
-      "type":"structure",
-      "required":["IamUserArn"],
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user IAM ARN. This can also be a federated user's ARN.</p>"
-        },
-        "SshUsername":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH user name. The allowable characters are [a-z], [A-Z], [0-9], '-', and '_'. If the specified name includes other punctuation marks, OpsWorks Stacks removes them. For example, <code>my.name</code> will be changed to <code>myname</code>. If you do not specify an SSH user name, OpsWorks Stacks generates one from the IAM user name. </p>"
-        },
-        "SshPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The user's new SSH public key.</p>"
-        },
-        "AllowSelfManagement":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether users can specify their own SSH public key through the My Settings page. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html\">Managing User Permissions</a>.</p>"
-        }
-      }
-    },
-    "UpdateVolumeRequest":{
-      "type":"structure",
-      "required":["VolumeId"],
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The volume ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The new name. Volume names can be a maximum of 128 characters.</p>"
-        },
-        "MountPoint":{
-          "shape":"String",
-          "documentation":"<p>The new mount point.</p>"
-        }
-      }
-    },
-    "UserProfile":{
-      "type":"structure",
-      "members":{
-        "IamUserArn":{
-          "shape":"String",
-          "documentation":"<p>The user's IAM ARN.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The user's name.</p>"
-        },
-        "SshUsername":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH user name.</p>"
-        },
-        "SshPublicKey":{
-          "shape":"String",
-          "documentation":"<p>The user's SSH public key.</p>"
-        },
-        "AllowSelfManagement":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether users can specify their own SSH public key through the My Settings page. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/security-settingsshkey.html\">Managing User Permissions</a>.</p>"
-        }
-      },
-      "documentation":"<p>Describes a user's SSH information.</p>"
-    },
-    "UserProfiles":{
-      "type":"list",
-      "member":{"shape":"UserProfile"}
-    },
-    "ValidForInMinutes":{
-      "type":"integer",
-      "box":true,
-      "max":1440,
-      "min":60
-    },
-    "ValidationException":{
-      "type":"structure",
-      "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The exception message.</p>"
-        }
-      },
-      "documentation":"<p>Indicates that a request was not valid.</p>",
-      "exception":true
-    },
-    "VirtualizationType":{
-      "type":"string",
-      "enum":[
-        "paravirtual",
-        "hvm"
-      ]
-    },
-    "Volume":{
-      "type":"structure",
-      "members":{
-        "VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The volume ID.</p>"
-        },
-        "Ec2VolumeId":{
-          "shape":"String",
-          "documentation":"<p>The Amazon EC2 volume ID.</p>"
-        },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The volume name. Volume names are a maximum of 128 characters.</p>"
-        },
-        "RaidArrayId":{
-          "shape":"String",
-          "documentation":"<p>The RAID array ID.</p>"
-        },
-        "InstanceId":{
-          "shape":"String",
-          "documentation":"<p>The instance ID.</p>"
-        },
-        "Status":{
-          "shape":"String",
-          "documentation":"<p>The value returned by <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumes.html\">DescribeVolumes</a>.</p>"
-        },
-        "Size":{
-          "shape":"Integer",
-          "documentation":"<p>The volume size.</p>"
-        },
-        "Device":{
-          "shape":"String",
-          "documentation":"<p>The device name.</p>"
-        },
-        "MountPoint":{
-          "shape":"String",
-          "documentation":"<p>The volume mount point. For example, \"/mnt/disk1\".</p>"
-        },
-        "Region":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region. For more information about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "AvailabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The volume Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html\">Regions and Endpoints</a>.</p>"
-        },
-        "VolumeType":{
-          "shape":"String",
-          "documentation":"<p>The volume type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html\"> Amazon EBS Volume Types</a>.</p> <ul> <li> <p> <code>standard</code> - Magnetic. Magnetic volumes must have a minimum size of 1 GiB and a maximum size of 1024 GiB.</p> </li> <li> <p> <code>io1</code> - Provisioned IOPS (SSD). PIOPS volumes must have a minimum size of 4 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>gp2</code> - General Purpose (SSD). General purpose volumes must have a minimum size of 1 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>st1</code> - Throughput Optimized hard disk drive (HDD). Throughput optimized HDD volumes must have a minimum size of 125 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>sc1</code> - Cold HDD. Cold HDD volumes must have a minimum size of 125 GiB and a maximum size of 16384 GiB.</p> </li> </ul>"
-        },
-        "Iops":{
-          "shape":"Integer",
-          "documentation":"<p>For PIOPS volumes, the IOPS per disk.</p>"
-        },
-        "Encrypted":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether an Amazon EBS volume is encrypted. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html\">Amazon EBS Encryption</a>.</p>"
-        }
-      },
-      "documentation":"<p>Describes an instance's Amazon EBS volume.</p>"
-    },
-    "VolumeConfiguration":{
-      "type":"structure",
-      "required":[
-        "MountPoint",
-        "NumberOfDisks",
-        "Size"
-      ],
-      "members":{
-        "MountPoint":{
-          "shape":"String",
-          "documentation":"<p>The volume mount point. For example \"/dev/sdh\".</p>"
-        },
-        "RaidLevel":{
-          "shape":"Integer",
-          "documentation":"<p>The volume <a href=\"http://en.wikipedia.org/wiki/Standard_RAID_levels\">RAID level</a>.</p>"
-        },
-        "NumberOfDisks":{
-          "shape":"Integer",
-          "documentation":"<p>The number of disks in the volume.</p>"
-        },
-        "Size":{
-          "shape":"Integer",
-          "documentation":"<p>The volume size.</p>"
-        },
-        "VolumeType":{
-          "shape":"String",
-          "documentation":"<p>The volume type. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html\"> Amazon EBS Volume Types</a>.</p> <ul> <li> <p> <code>standard</code> - Magnetic. Magnetic volumes must have a minimum size of 1 GiB and a maximum size of 1024 GiB.</p> </li> <li> <p> <code>io1</code> - Provisioned IOPS (SSD). PIOPS volumes must have a minimum size of 4 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>gp2</code> - General Purpose (SSD). General purpose volumes must have a minimum size of 1 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>st1</code> - Throughput Optimized hard disk drive (HDD). Throughput optimized HDD volumes must have a minimum size of 125 GiB and a maximum size of 16384 GiB.</p> </li> <li> <p> <code>sc1</code> - Cold HDD. Cold HDD volumes must have a minimum size of 125 GiB and a maximum size of 16384 GiB.</p> </li> </ul>"
-        },
-        "Iops":{
-          "shape":"Integer",
-          "documentation":"<p>For PIOPS volumes, the IOPS per disk.</p>"
-        },
-        "Encrypted":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether an Amazon EBS volume is encrypted. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html\">Amazon EBS Encryption</a>.</p>"
-        }
-      },
-      "documentation":"<p>Describes an Amazon EBS volume configuration.</p>"
-    },
-    "VolumeConfigurations":{
-      "type":"list",
-      "member":{"shape":"VolumeConfiguration"}
-    },
-    "VolumeType":{
-      "type":"string",
-      "enum":[
-        "gp2",
-        "io1",
-        "standard"
-      ]
-    },
-    "Volumes":{
-      "type":"list",
-      "member":{"shape":"Volume"}
-    },
-    "WeeklyAutoScalingSchedule":{
-      "type":"structure",
-      "members":{
-        "Monday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Monday.</p>"
-        },
-        "Tuesday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Tuesday.</p>"
-        },
-        "Wednesday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Wednesday.</p>"
-        },
-        "Thursday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Thursday.</p>"
-        },
-        "Friday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Friday.</p>"
-        },
-        "Saturday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Saturday.</p>"
-        },
-        "Sunday":{
-          "shape":"DailyAutoScalingSchedule",
-          "documentation":"<p>The schedule for Sunday.</p>"
-        }
-      },
-      "documentation":"<p>Describes a time-based instance's auto scaling schedule. The schedule consists of a set of key-value pairs.</p> <ul> <li> <p>The key is the time period (a UTC hour) and must be an integer from 0 - 23.</p> </li> <li> <p>The value indicates whether the instance should be online or offline for the specified period, and must be set to \"on\" or \"off\"</p> </li> </ul> <p>The default setting for all time periods is off, so you use the following parameters primarily to specify the online periods. You don't have to explicitly specify offline periods unless you want to change an online period to an offline period.</p> <p>The following example specifies that the instance should be online for four hours, from UTC 1200 - 1600. It will be off for the remainder of the day.</p> <p> <code> { \"12\":\"on\", \"13\":\"on\", \"14\":\"on\", \"15\":\"on\" } </code> </p>"
-    }
-  },
-  "documentation":"<fullname>OpsWorks</fullname> <p>Welcome to the <i>OpsWorks Stacks API Reference</i>. This guide provides descriptions, syntax, and usage examples for OpsWorks Stacks actions and data types, including common parameters and error codes. </p> <p>OpsWorks Stacks is an application management service that provides an integrated experience for managing the complete application lifecycle. For information about OpsWorks, see the <a href=\"http://aws.amazon.com/opsworks/\">OpsWorks</a> information page.</p> <p> <b>SDKs and CLI</b> </p> <p>Use the OpsWorks Stacks API by using the Command Line Interface (CLI) or by using one of the Amazon Web Services SDKs to implement applications in your preferred language. For more information, see:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html\">CLI</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/opsworks/AWSOpsWorksClient.html\">SDK for Java</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/OpsWorks/NOpsWorks.html\">SDK for .NET</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.OpsWorks.OpsWorksClient.html\">SDK for PHP</a> </p> </li> <li> <p> <a href=\"http://docs.aws.amazon.com/sdkforruby/api/\">SDK for Ruby</a> </p> </li> <li> <p> <a href=\"http://aws.amazon.com/documentation/sdkforjavascript/\">Amazon Web Services SDK for Node.js</a> </p> </li> <li> <p> <a href=\"http://docs.pythonboto.org/en/latest/ref/opsworks.html\">SDK for Python (Boto)</a> </p> </li> </ul> <p> <b>Endpoints</b> </p> <p>OpsWorks Stacks supports the following endpoints, all HTTPS. You must connect to one of the following endpoints. Stacks can only be accessed or managed within the endpoint in which they are created.</p> <ul> <li> <p>opsworks.us-east-1.amazonaws.com</p> </li> <li> <p>opsworks.us-east-2.amazonaws.com</p> </li> <li> <p>opsworks.us-west-1.amazonaws.com</p> </li> <li> <p>opsworks.us-west-2.amazonaws.com</p> </li> <li> <p>opsworks.ca-central-1.amazonaws.com (API only; not available in the Amazon Web Services Management Console)</p> </li> <li> <p>opsworks.eu-west-1.amazonaws.com</p> </li> <li> <p>opsworks.eu-west-2.amazonaws.com</p> </li> <li> <p>opsworks.eu-west-3.amazonaws.com</p> </li> <li> <p>opsworks.eu-central-1.amazonaws.com</p> </li> <li> <p>opsworks.ap-northeast-1.amazonaws.com</p> </li> <li> <p>opsworks.ap-northeast-2.amazonaws.com</p> </li> <li> <p>opsworks.ap-south-1.amazonaws.com</p> </li> <li> <p>opsworks.ap-southeast-1.amazonaws.com</p> </li> <li> <p>opsworks.ap-southeast-2.amazonaws.com</p> </li> <li> <p>opsworks.sa-east-1.amazonaws.com</p> </li> </ul> <p> <b>Chef Versions</b> </p> <p>When you call <a>CreateStack</a>, <a>CloneStack</a>, or <a>UpdateStack</a> we recommend you use the <code>ConfigurationManager</code> parameter to specify the Chef version. The recommended and default value for Linux stacks is currently 12. Windows stacks use Chef 12.2. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-chef11.html\">Chef Versions</a>.</p> <note> <p>You can specify Chef 12, 11.10, or 11.4 for your Linux stack. We recommend migrating your existing Linux stacks to Chef 12 as soon as possible.</p> </note>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/waiters-2.json 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/opsworks/2013-02-18/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworks/2013-02-18/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,289 +0,0 @@
-{
-  "version": 2,
-  "waiters": {
-    "AppExists": {
-      "delay": 1,
-      "operation": "DescribeApps",
-      "maxAttempts": 40,
-      "acceptors": [
-        {
-          "expected": 200,
-          "matcher": "status",
-          "state": "success"
-        },
-        {
-          "matcher": "status",
-          "expected": 400,
-          "state": "failure"
-        }
-      ]
-    },
-    "DeploymentSuccessful": {
-      "delay": 15,
-      "operation": "DescribeDeployments",
-      "maxAttempts": 40,
-      "description": "Wait until a deployment has completed successfully.",
-      "acceptors": [
-        {
-          "expected": "successful",
-          "matcher": "pathAll",
-          "state": "success",
-          "argument": "Deployments[].Status"
-        },
-        {
-          "expected": "failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Deployments[].Status"
-        }
-      ]
-    },
-    "InstanceOnline": {
-      "delay": 15,
-      "operation": "DescribeInstances",
-      "maxAttempts": 40,
-      "description": "Wait until OpsWorks instance is online.",
-      "acceptors": [
-        {
-          "expected": "online",
-          "matcher": "pathAll",
-          "state": "success",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "setup_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "shutting_down",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "start_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stopped",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stopping",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "terminating",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "terminated",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stop_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        }
-      ]
-    },
-    "InstanceRegistered": {
-      "delay": 15,
-      "operation": "DescribeInstances",
-      "maxAttempts": 40,
-      "description": "Wait until OpsWorks instance is registered.",
-      "acceptors": [
-        {
-          "expected": "registered",
-          "matcher": "pathAll",
-          "state": "success",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "setup_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "shutting_down",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stopped",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stopping",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "terminating",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "terminated",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stop_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        }
-      ]
-    },
-    "InstanceStopped": {
-      "delay": 15,
-      "operation": "DescribeInstances",
-      "maxAttempts": 40,
-      "description": "Wait until OpsWorks instance is stopped.",
-      "acceptors": [
-        {
-          "expected": "stopped",
-          "matcher": "pathAll",
-          "state": "success",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "booting",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "pending",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "rebooting",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "requested",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "running_setup",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "setup_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "start_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "stop_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        }
-      ]
-    },
-    "InstanceTerminated": {
-      "delay": 15,
-      "operation": "DescribeInstances",
-      "maxAttempts": 40,
-      "description": "Wait until OpsWorks instance is terminated.",
-      "acceptors": [
-        {
-          "expected": "terminated",
-          "matcher": "pathAll",
-          "state": "success",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "ResourceNotFoundException",
-          "matcher": "error",
-          "state": "success"
-        },
-        {
-          "expected": "booting",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "online",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "pending",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "rebooting",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "requested",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "running_setup",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "setup_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        },
-        {
-          "expected": "start_failed",
-          "matcher": "pathAny",
-          "state": "failure",
-          "argument": "Instances[].Status"
-        }
-      ]
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/completions-1.json 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/completions-1.json
--- 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/completions-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/completions-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,268 +0,0 @@
-{
-  "version": "1.0",
-  "resources": {
-    "Backup": {
-      "operation": "DescribeBackups",
-      "resourceIdentifier": {
-        "BackupId": "Backups[].BackupId"
-      }
-    },
-    "Server": {
-      "operation": "DescribeServers",
-      "resourceIdentifier": {
-        "BackupRetentionCount": "Servers[].BackupRetentionCount",
-        "ServerName": "Servers[].ServerName",
-        "DisableAutomatedBackup": "Servers[].DisableAutomatedBackup",
-        "EngineAttributes": "Servers[].EngineAttributes",
-        "InstanceType": "Servers[].InstanceType",
-        "KeyPair": "Servers[].KeyPair",
-        "PreferredMaintenanceWindow": "Servers[].PreferredMaintenanceWindow",
-        "PreferredBackupWindow": "Servers[].PreferredBackupWindow"
-      }
-    }
-  },
-  "operations": {
-    "AssociateNode": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      },
-      "EngineAttributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "EngineAttributes"
-          }
-        ]
-      }
-    },
-    "DeleteBackup": {
-      "BackupId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Backup",
-            "resourceIdentifier": "BackupId"
-          }
-        ]
-      }
-    },
-    "DeleteServer": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "DescribeBackups": {
-      "BackupId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Backup",
-            "resourceIdentifier": "BackupId"
-          }
-        ]
-      },
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "DescribeEvents": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "DescribeNodeAssociationStatus": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "DescribeServers": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "DisassociateNode": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      },
-      "EngineAttributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "EngineAttributes"
-          }
-        ]
-      }
-    },
-    "ExportServerEngineAttribute": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    },
-    "RestoreServer": {
-      "BackupId": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Backup",
-            "resourceIdentifier": "BackupId"
-          }
-        ]
-      },
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      },
-      "InstanceType": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "InstanceType"
-          }
-        ]
-      },
-      "KeyPair": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "KeyPair"
-          }
-        ]
-      }
-    },
-    "StartMaintenance": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      },
-      "EngineAttributes": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "EngineAttributes"
-          }
-        ]
-      }
-    },
-    "UpdateServer": {
-      "DisableAutomatedBackup": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "DisableAutomatedBackup"
-          }
-        ]
-      },
-      "BackupRetentionCount": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "BackupRetentionCount"
-          }
-        ]
-      },
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      },
-      "PreferredMaintenanceWindow": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "PreferredMaintenanceWindow"
-          }
-        ]
-      },
-      "PreferredBackupWindow": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "PreferredBackupWindow"
-          }
-        ]
-      }
-    },
-    "UpdateServerEngineAttributes": {
-      "ServerName": {
-        "completions": [
-          {
-            "parameters": {},
-            "resourceName": "Server",
-            "resourceIdentifier": "ServerName"
-          }
-        ]
-      }
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ]
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks-cm-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks-cm-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://opsworks-cm.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://opsworks-cm.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/paginators-1.json 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-{
-  "pagination": {
-    "DescribeBackups": {
-      "input_token": "NextToken",
-      "limit_key": "MaxResults",
-      "output_token": "NextToken",
-      "result_key": "Backups"
-    },
-    "DescribeEvents": {
-      "input_token": "NextToken",
-      "limit_key": "MaxResults",
-      "output_token": "NextToken",
-      "result_key": "ServerEvents"
-    },
-    "DescribeServers": {
-      "input_token": "NextToken",
-      "limit_key": "MaxResults",
-      "output_token": "NextToken",
-      "result_key": "Servers"
-    },
-    "ListTagsForResource": {
-      "input_token": "NextToken",
-      "limit_key": "MaxResults",
-      "output_token": "NextToken",
-      "result_key": "Tags"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/service-2.json 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,1434 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2016-11-01",
-    "endpointPrefix":"opsworks-cm",
-    "jsonVersion":"1.1",
-    "protocol":"json",
-    "serviceAbbreviation":"OpsWorksCM",
-    "serviceFullName":"AWS OpsWorks CM",
-    "serviceId":"OpsWorksCM",
-    "signatureVersion":"v4",
-    "signingName":"opsworks-cm",
-    "targetPrefix":"OpsWorksCM_V2016_11_01",
-    "uid":"opsworkscm-2016-11-01"
-  },
-  "operations":{
-    "AssociateNode":{
-      "name":"AssociateNode",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"AssociateNodeRequest"},
-      "output":{"shape":"AssociateNodeResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Associates a new node with the server. For more information about how to disassociate a node, see <a>DisassociateNode</a>.</p> <p> On a Chef server: This command is an alternative to <code>knife bootstrap</code>.</p> <p> Example (Chef): <code>aws opsworks-cm associate-node --server-name <i>MyServer</i> --node-name <i>MyManagedNode</i> --engine-attributes \"Name=<i>CHEF_ORGANIZATION</i>,Value=default\" \"Name=<i>CHEF_NODE_PUBLIC_KEY</i>,Value=<i>public-key-pem</i>\"</code> </p> <p> On a Puppet server, this command is an alternative to the <code>puppet cert sign</code> command that signs a Puppet node CSR. </p> <p> Example (Puppet): <code>aws opsworks-cm associate-node --server-name <i>MyServer</i> --node-name <i>MyManagedNode</i> --engine-attributes \"Name=<i>PUPPET_NODE_CSR</i>,Value=<i>csr-pem</i>\"</code> </p> <p> A node can can only be associated with servers that are in a <code>HEALTHY</code> state. Otherwise, an <code>InvalidStateException</code> is thrown. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. The AssociateNode API call can be integrated into Auto Scaling configurations, AWS Cloudformation templates, or the user data of a server's instance. </p>"
-    },
-    "CreateBackup":{
-      "name":"CreateBackup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateBackupRequest"},
-      "output":{"shape":"CreateBackupResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Creates an application-level backup of a server. While the server is in the <code>BACKING_UP</code> state, the server cannot be changed, and no additional backup can be created. </p> <p> Backups can be created for servers in <code>RUNNING</code>, <code>HEALTHY</code>, and <code>UNHEALTHY</code> states. By default, you can create a maximum of 50 manual backups. </p> <p> This operation is asynchronous. </p> <p> A <code>LimitExceededException</code> is thrown when the maximum number of manual backups is reached. An <code>InvalidStateException</code> is thrown when the server is not in any of the following states: RUNNING, HEALTHY, or UNHEALTHY. A <code>ResourceNotFoundException</code> is thrown when the server is not found. A <code>ValidationException</code> is thrown when parameters of the request are not valid. </p>"
-    },
-    "CreateServer":{
-      "name":"CreateServer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateServerRequest"},
-      "output":{"shape":"CreateServerResponse"},
-      "errors":[
-        {"shape":"LimitExceededException"},
-        {"shape":"ResourceAlreadyExistsException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Creates and immedately starts a new server. The server is ready to use when it is in the <code>HEALTHY</code> state. By default, you can create a maximum of 10 servers. </p> <p> This operation is asynchronous. </p> <p> A <code>LimitExceededException</code> is thrown when you have created the maximum number of servers (10). A <code>ResourceAlreadyExistsException</code> is thrown when a server with the same name already exists in the account. A <code>ResourceNotFoundException</code> is thrown when you specify a backup ID that is not valid or is for a backup that does not exist. A <code>ValidationException</code> is thrown when parameters of the request are not valid. </p> <p> If you do not specify a security group by adding the <code>SecurityGroupIds</code> parameter, AWS OpsWorks creates a new security group. </p> <p> <i>Chef Automate:</i> The default security group opens the Chef server to the world on TCP port 443. If a KeyName is present, AWS OpsWorks enables SSH access. SSH is also open to the world on TCP port 22. </p> <p> <i>Puppet Enterprise:</i> The default security group opens TCP ports 22, 443, 4433, 8140, 8142, 8143, and 8170. If a KeyName is present, AWS OpsWorks enables SSH access. SSH is also open to the world on TCP port 22. </p> <p>By default, your server is accessible from any IP address. We recommend that you update your security group rules to allow access from known IP addresses and address ranges only. To edit security group rules, open Security Groups in the navigation pane of the EC2 management console. </p> <p>To specify your own domain for a server, and provide your own self-signed or CA-signed certificate and private key, specify values for <code>CustomDomain</code>, <code>CustomCertificate</code>, and <code>CustomPrivateKey</code>.</p>"
-    },
-    "DeleteBackup":{
-      "name":"DeleteBackup",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteBackupRequest"},
-      "output":{"shape":"DeleteBackupResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Deletes a backup. You can delete both manual and automated backups. This operation is asynchronous. </p> <p> An <code>InvalidStateException</code> is thrown when a backup deletion is already in progress. A <code>ResourceNotFoundException</code> is thrown when the backup does not exist. A <code>ValidationException</code> is thrown when parameters of the request are not valid. </p>"
-    },
-    "DeleteServer":{
-      "name":"DeleteServer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteServerRequest"},
-      "output":{"shape":"DeleteServerResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Deletes the server and the underlying AWS CloudFormation stacks (including the server's EC2 instance). When you run this command, the server state is updated to <code>DELETING</code>. After the server is deleted, it is no longer returned by <code>DescribeServer</code> requests. If the AWS CloudFormation stack cannot be deleted, the server cannot be deleted. </p> <p> This operation is asynchronous. </p> <p> An <code>InvalidStateException</code> is thrown when a server deletion is already in progress. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p> <p> </p>"
-    },
-    "DescribeAccountAttributes":{
-      "name":"DescribeAccountAttributes",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeAccountAttributesRequest"},
-      "output":{"shape":"DescribeAccountAttributesResponse"},
-      "documentation":"<p> Describes your OpsWorks-CM account attributes. </p> <p> This operation is synchronous. </p>"
-    },
-    "DescribeBackups":{
-      "name":"DescribeBackups",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeBackupsRequest"},
-      "output":{"shape":"DescribeBackupsResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidNextTokenException"}
-      ],
-      "documentation":"<p> Describes backups. The results are ordered by time, with newest backups first. If you do not specify a BackupId or ServerName, the command returns all backups. </p> <p> This operation is synchronous. </p> <p> A <code>ResourceNotFoundException</code> is thrown when the backup does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "DescribeEvents":{
-      "name":"DescribeEvents",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeEventsRequest"},
-      "output":{"shape":"DescribeEventsResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"InvalidNextTokenException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p> Describes events for a specified server. Results are ordered by time, with newest events first. </p> <p> This operation is synchronous. </p> <p> A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "DescribeNodeAssociationStatus":{
-      "name":"DescribeNodeAssociationStatus",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeNodeAssociationStatusRequest"},
-      "output":{"shape":"DescribeNodeAssociationStatusResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Returns the current status of an existing association or disassociation request. </p> <p> A <code>ResourceNotFoundException</code> is thrown when no recent association or disassociation request with the specified token is found, or when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "DescribeServers":{
-      "name":"DescribeServers",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DescribeServersRequest"},
-      "output":{"shape":"DescribeServersResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidNextTokenException"}
-      ],
-      "documentation":"<p> Lists all configuration management servers that are identified with your account. Only the stored results from Amazon DynamoDB are returned. AWS OpsWorks CM does not query other services. </p> <p> This operation is synchronous. </p> <p> A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "DisassociateNode":{
-      "name":"DisassociateNode",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DisassociateNodeRequest"},
-      "output":{"shape":"DisassociateNodeResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Disassociates a node from an AWS OpsWorks CM server, and removes the node from the server's managed nodes. After a node is disassociated, the node key pair is no longer valid for accessing the configuration manager's API. For more information about how to associate a node, see <a>AssociateNode</a>. </p> <p>A node can can only be disassociated from a server that is in a <code>HEALTHY</code> state. Otherwise, an <code>InvalidStateException</code> is thrown. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "ExportServerEngineAttribute":{
-      "name":"ExportServerEngineAttribute",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ExportServerEngineAttributeRequest"},
-      "output":{"shape":"ExportServerEngineAttributeResponse"},
-      "errors":[
-        {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidStateException"}
-      ],
-      "documentation":"<p> Exports a specified server engine attribute as a base64-encoded string. For example, you can export user data that you can use in EC2 to associate nodes with a server. </p> <p> This operation is synchronous. </p> <p> A <code>ValidationException</code> is raised when parameters of the request are not valid. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. An <code>InvalidStateException</code> is thrown when the server is in any of the following states: CREATING, TERMINATED, FAILED or DELETING. </p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p>Returns a list of tags that are applied to the specified AWS OpsWorks for Chef Automate or AWS OpsWorks for Puppet Enterprise servers or backups.</p>"
-    },
-    "RestoreServer":{
-      "name":"RestoreServer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"RestoreServerRequest"},
-      "output":{"shape":"RestoreServerResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Restores a backup to a server that is in a <code>CONNECTION_LOST</code>, <code>HEALTHY</code>, <code>RUNNING</code>, <code>UNHEALTHY</code>, or <code>TERMINATED</code> state. When you run RestoreServer, the server's EC2 instance is deleted, and a new EC2 instance is configured. RestoreServer maintains the existing server endpoint, so configuration management of the server's client devices (nodes) should continue to work. </p> <p>Restoring from a backup is performed by creating a new EC2 instance. If restoration is successful, and the server is in a <code>HEALTHY</code> state, AWS OpsWorks CM switches traffic over to the new instance. After restoration is finished, the old EC2 instance is maintained in a <code>Running</code> or <code>Stopped</code> state, but is eventually terminated.</p> <p> This operation is asynchronous. </p> <p> An <code>InvalidStateException</code> is thrown when the server is not in a valid state. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "StartMaintenance":{
-      "name":"StartMaintenance",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartMaintenanceRequest"},
-      "output":{"shape":"StartMaintenanceResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Manually starts server maintenance. This command can be useful if an earlier maintenance attempt failed, and the underlying cause of maintenance failure has been resolved. The server is in an <code>UNDER_MAINTENANCE</code> state while maintenance is in progress. </p> <p> Maintenance can only be started on servers in <code>HEALTHY</code> and <code>UNHEALTHY</code> states. Otherwise, an <code>InvalidStateException</code> is thrown. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InvalidStateException"}
-      ],
-      "documentation":"<p>Applies tags to an AWS OpsWorks for Chef Automate or AWS OpsWorks for Puppet Enterprise server, or to server backups.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InvalidStateException"}
-      ],
-      "documentation":"<p>Removes specified tags from an AWS OpsWorks-CM server or backup.</p>"
-    },
-    "UpdateServer":{
-      "name":"UpdateServer",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateServerRequest"},
-      "output":{"shape":"UpdateServerResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Updates settings for a server. </p> <p> This operation is synchronous. </p>"
-    },
-    "UpdateServerEngineAttributes":{
-      "name":"UpdateServerEngineAttributes",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateServerEngineAttributesRequest"},
-      "output":{"shape":"UpdateServerEngineAttributesResponse"},
-      "errors":[
-        {"shape":"InvalidStateException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"}
-      ],
-      "documentation":"<p> Updates engine-specific attributes on a specified server. The server enters the <code>MODIFYING</code> state when this operation is in progress. Only one update can occur at a time. You can use this command to reset a Chef server's public key (<code>CHEF_PIVOTAL_KEY</code>) or a Puppet server's admin password (<code>PUPPET_ADMIN_PASSWORD</code>). </p> <p> This operation is asynchronous. </p> <p> This operation can only be called for servers in <code>HEALTHY</code> or <code>UNHEALTHY</code> states. Otherwise, an <code>InvalidStateException</code> is raised. A <code>ResourceNotFoundException</code> is thrown when the server does not exist. A <code>ValidationException</code> is raised when parameters of the request are not valid. </p>"
-    }
-  },
-  "shapes":{
-    "AWSOpsWorksCMResourceArn":{
-      "type":"string",
-      "pattern":"arn:aws.*:opsworks-cm:.*:[0-9]{12}:.*"
-    },
-    "AccountAttribute":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"String",
-          "documentation":"<p> The attribute name. The following are supported attribute names. </p> <ul> <li> <p> <i>ServerLimit:</i> The number of current servers/maximum number of servers allowed. By default, you can have a maximum of 10 servers. </p> </li> <li> <p> <i>ManualBackupLimit:</i> The number of current manual backups/maximum number of backups allowed. By default, you can have a maximum of 50 manual backups saved. </p> </li> </ul>"
-        },
-        "Maximum":{
-          "shape":"Integer",
-          "documentation":"<p> The maximum allowed value. </p>"
-        },
-        "Used":{
-          "shape":"Integer",
-          "documentation":"<p> The current usage, such as the current number of servers that are associated with the account. </p>"
-        }
-      },
-      "documentation":"<p>Stores account attributes. </p>"
-    },
-    "AccountAttributes":{
-      "type":"list",
-      "member":{"shape":"AccountAttribute"},
-      "documentation":"<p> A list of individual account attributes. </p>"
-    },
-    "AssociateNodeRequest":{
-      "type":"structure",
-      "required":[
-        "ServerName",
-        "NodeName",
-        "EngineAttributes"
-      ],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server with which to associate the node. </p>"
-        },
-        "NodeName":{
-          "shape":"NodeName",
-          "documentation":"<p>The name of the node. </p>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>Engine attributes used for associating the node. </p> <p class=\"title\"> <b>Attributes accepted in a AssociateNode request for Chef</b> </p> <ul> <li> <p> <code>CHEF_ORGANIZATION</code>: The Chef organization with which the node is associated. By default only one organization named <code>default</code> can exist. </p> </li> <li> <p> <code>CHEF_NODE_PUBLIC_KEY</code>: A PEM-formatted public key. This key is required for the <code>chef-client</code> agent to access the Chef API. </p> </li> </ul> <p class=\"title\"> <b>Attributes accepted in a AssociateNode request for Puppet</b> </p> <ul> <li> <p> <code>PUPPET_NODE_CSR</code>: A PEM-formatted certificate-signing request (CSR) that is created by the node. </p> </li> </ul>"
-        }
-      }
-    },
-    "AssociateNodeResponse":{
-      "type":"structure",
-      "members":{
-        "NodeAssociationStatusToken":{
-          "shape":"NodeAssociationStatusToken",
-          "documentation":"<p>Contains a token which can be passed to the <code>DescribeNodeAssociationStatus</code> API call to get the status of the association request. </p>"
-        }
-      }
-    },
-    "AttributeName":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"[A-Z][A-Z0-9_]*"
-    },
-    "AttributeValue":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*"
-    },
-    "Backup":{
-      "type":"structure",
-      "members":{
-        "BackupArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the backup. </p>"
-        },
-        "BackupId":{
-          "shape":"BackupId",
-          "documentation":"<p> The generated ID of the backup. Example: <code>myServerName-yyyyMMddHHmmssSSS</code> </p>"
-        },
-        "BackupType":{
-          "shape":"BackupType",
-          "documentation":"<p> The backup type. Valid values are <code>automated</code> or <code>manual</code>. </p>"
-        },
-        "CreatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p> The time stamp when the backup was created in the database. Example: <code>2016-07-29T13:38:47.520Z</code> </p>"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p> A user-provided description for a manual backup. This field is empty for automated backups. </p>"
-        },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p> The engine type that is obtained from the server when the backup is created. </p>"
-        },
-        "EngineModel":{
-          "shape":"String",
-          "documentation":"<p> The engine model that is obtained from the server when the backup is created. </p>"
-        },
-        "EngineVersion":{
-          "shape":"String",
-          "documentation":"<p> The engine version that is obtained from the server when the backup is created. </p>"
-        },
-        "InstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p> The EC2 instance profile ARN that is obtained from the server when the backup is created. Because this value is stored, you are not required to provide the InstanceProfileArn again if you restore a backup. </p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p> The instance type that is obtained from the server when the backup is created. </p>"
-        },
-        "KeyPair":{
-          "shape":"String",
-          "documentation":"<p> The key pair that is obtained from the server when the backup is created. </p>"
-        },
-        "PreferredBackupWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p> The preferred backup period that is obtained from the server when the backup is created. </p>"
-        },
-        "PreferredMaintenanceWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p> The preferred maintenance period that is obtained from the server when the backup is created. </p>"
-        },
-        "S3DataSize":{
-          "shape":"Integer",
-          "documentation":"<p> This field is deprecated and is no longer used. </p>",
-          "deprecated":true
-        },
-        "S3DataUrl":{
-          "shape":"String",
-          "documentation":"<p> This field is deprecated and is no longer used. </p>",
-          "deprecated":true
-        },
-        "S3LogUrl":{
-          "shape":"String",
-          "documentation":"<p> The Amazon S3 URL of the backup's log file. </p>"
-        },
-        "SecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p> The security group IDs that are obtained from the server when the backup is created. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p> The name of the server from which the backup was made. </p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p> The service role ARN that is obtained from the server when the backup is created. </p>"
-        },
-        "Status":{
-          "shape":"BackupStatus",
-          "documentation":"<p>The status of a backup while in progress. </p>"
-        },
-        "StatusDescription":{
-          "shape":"String",
-          "documentation":"<p> An informational message about backup status. </p>"
-        },
-        "SubnetIds":{
-          "shape":"Strings",
-          "documentation":"<p> The subnet IDs that are obtained from the server when the backup is created. </p>"
-        },
-        "ToolsVersion":{
-          "shape":"String",
-          "documentation":"<p> The version of AWS OpsWorks CM-specific tools that is obtained from the server when the backup is created. </p>"
-        },
-        "UserArn":{
-          "shape":"String",
-          "documentation":"<p> The IAM user ARN of the requester for manual backups. This field is empty for automated backups. </p>"
-        }
-      },
-      "documentation":"<p>Describes a single backup. </p>"
-    },
-    "BackupId":{
-      "type":"string",
-      "max":79,
-      "pattern":"[a-zA-Z][a-zA-Z0-9\\-\\.\\:]*"
-    },
-    "BackupRetentionCountDefinition":{
-      "type":"integer",
-      "min":1
-    },
-    "BackupStatus":{
-      "type":"string",
-      "enum":[
-        "IN_PROGRESS",
-        "OK",
-        "FAILED",
-        "DELETING"
-      ]
-    },
-    "BackupType":{
-      "type":"string",
-      "enum":[
-        "AUTOMATED",
-        "MANUAL"
-      ]
-    },
-    "Backups":{
-      "type":"list",
-      "member":{"shape":"Backup"}
-    },
-    "Boolean":{"type":"boolean"},
-    "CreateBackupRequest":{
-      "type":"structure",
-      "required":["ServerName"],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server that you want to back up. </p>"
-        },
-        "Description":{
-          "shape":"String",
-          "documentation":"<p> A user-defined description of the backup. </p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A map that contains tag keys and tag values to attach to an AWS OpsWorks-CM server backup.</p> <ul> <li> <p>The key cannot be empty.</p> </li> <li> <p>The key can be a maximum of 127 characters, and can contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>The value can be a maximum 255 characters, and contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>Leading and trailing white spaces are trimmed from both the key and value.</p> </li> <li> <p>A maximum of 50 user-applied tags is allowed for tag-supported AWS OpsWorks-CM resources.</p> </li> </ul>"
-        }
-      }
-    },
-    "CreateBackupResponse":{
-      "type":"structure",
-      "members":{
-        "Backup":{
-          "shape":"Backup",
-          "documentation":"<p>Backup created by request.</p>"
-        }
-      }
-    },
-    "CreateServerRequest":{
-      "type":"structure",
-      "required":[
-        "Engine",
-        "ServerName",
-        "InstanceProfileArn",
-        "InstanceType",
-        "ServiceRoleArn"
-      ],
-      "members":{
-        "AssociatePublicIpAddress":{
-          "shape":"Boolean",
-          "documentation":"<p> Associate a public IP address with a server that you are launching. Valid values are <code>true</code> or <code>false</code>. The default value is <code>true</code>. </p>"
-        },
-        "CustomDomain":{
-          "shape":"CustomDomain",
-          "documentation":"<p>An optional public endpoint of a server, such as <code>https://aws.my-company.com</code>. To access the server, create a CNAME DNS record in your preferred DNS service that points the custom domain to the endpoint that is generated when the server is created (the value of the CreateServer Endpoint attribute). You cannot access the server by using the generated <code>Endpoint</code> value if the server is using a custom domain. If you specify a custom domain, you must also specify values for <code>CustomCertificate</code> and <code>CustomPrivateKey</code>.</p>"
-        },
-        "CustomCertificate":{
-          "shape":"CustomCertificate",
-          "documentation":"<p>A PEM-formatted HTTPS certificate. The value can be be a single, self-signed certificate, or a certificate chain. If you specify a custom certificate, you must also specify values for <code>CustomDomain</code> and <code>CustomPrivateKey</code>. The following are requirements for the <code>CustomCertificate</code> value:</p> <ul> <li> <p>You can provide either a self-signed, custom certificate, or the full certificate chain.</p> </li> <li> <p>The certificate must be a valid X509 certificate, or a certificate chain in PEM format.</p> </li> <li> <p>The certificate must be valid at the time of upload. A certificate can't be used before its validity period begins (the certificate's <code>NotBefore</code> date), or after it expires (the certificate's <code>NotAfter</code> date).</p> </li> <li> <p>The certificate’s common name or subject alternative names (SANs), if present, must match the value of <code>CustomDomain</code>.</p> </li> <li> <p>The certificate must match the value of <code>CustomPrivateKey</code>.</p> </li> </ul>"
-        },
-        "CustomPrivateKey":{
-          "shape":"CustomPrivateKey",
-          "documentation":"<p>A private key in PEM format for connecting to the server by using HTTPS. The private key must not be encrypted; it cannot be protected by a password or passphrase. If you specify a custom private key, you must also specify values for <code>CustomDomain</code> and <code>CustomCertificate</code>.</p>"
-        },
-        "DisableAutomatedBackup":{
-          "shape":"Boolean",
-          "documentation":"<p> Enable or disable scheduled backups. Valid values are <code>true</code> or <code>false</code>. The default value is <code>true</code>. </p>"
-        },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p> The configuration management engine to use. Valid values include <code>ChefAutomate</code> and <code>Puppet</code>. </p>"
-        },
-        "EngineModel":{
-          "shape":"String",
-          "documentation":"<p> The engine model of the server. Valid values in this release include <code>Monolithic</code> for Puppet and <code>Single</code> for Chef. </p>"
-        },
-        "EngineVersion":{
-          "shape":"String",
-          "documentation":"<p> The major release version of the engine that you want to use. For a Chef server, the valid value for EngineVersion is currently <code>2</code>. For a Puppet server, valid values are <code>2019</code> or <code>2017</code>. </p>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>Optional engine attributes on a specified server. </p> <p class=\"title\"> <b>Attributes accepted in a Chef createServer request:</b> </p> <ul> <li> <p> <code>CHEF_AUTOMATE_PIVOTAL_KEY</code>: A base64-encoded RSA public key. The corresponding private key is required to access the Chef API. When no CHEF_AUTOMATE_PIVOTAL_KEY is set, a private key is generated and returned in the response. </p> </li> <li> <p> <code>CHEF_AUTOMATE_ADMIN_PASSWORD</code>: The password for the administrative user in the Chef Automate web-based dashboard. The password length is a minimum of eight characters, and a maximum of 32. The password can contain letters, numbers, and special characters (!/@#$%^&amp;+=_). The password must contain at least one lower case letter, one upper case letter, one number, and one special character. When no CHEF_AUTOMATE_ADMIN_PASSWORD is set, one is generated and returned in the response.</p> </li> </ul> <p class=\"title\"> <b>Attributes accepted in a Puppet createServer request:</b> </p> <ul> <li> <p> <code>PUPPET_ADMIN_PASSWORD</code>: To work with the Puppet Enterprise console, a password must use ASCII characters.</p> </li> <li> <p> <code>PUPPET_R10K_REMOTE</code>: The r10k remote is the URL of your control repository (for example, ssh://git@your.git-repo.com:user/control-repo.git). Specifying an r10k remote opens TCP port 8170.</p> </li> <li> <p> <code>PUPPET_R10K_PRIVATE_KEY</code>: If you are using a private Git repository, add PUPPET_R10K_PRIVATE_KEY to specify a PEM-encoded private SSH key.</p> </li> </ul>"
-        },
-        "BackupRetentionCount":{
-          "shape":"BackupRetentionCountDefinition",
-          "documentation":"<p> The number of automated backups that you want to keep. Whenever a new backup is created, AWS OpsWorks CM deletes the oldest backups if this number is exceeded. The default value is <code>1</code>. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p> The name of the server. The server name must be unique within your AWS account, within each region. Server names must start with a letter; then letters, numbers, or hyphens (-) are allowed, up to a maximum of 40 characters. </p>"
-        },
-        "InstanceProfileArn":{
-          "shape":"InstanceProfileArn",
-          "documentation":"<p> The ARN of the instance profile that your Amazon EC2 instances use. Although the AWS OpsWorks console typically creates the instance profile for you, if you are using API commands instead, run the service-role-creation.yaml AWS CloudFormation template, located at https://s3.amazonaws.com/opsworks-cm-us-east-1-prod-default-assets/misc/opsworks-cm-roles.yaml. This template creates a CloudFormation stack that includes the instance profile you need. </p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p> The Amazon EC2 instance type to use. For example, <code>m5.large</code>. </p>"
-        },
-        "KeyPair":{
-          "shape":"KeyPair",
-          "documentation":"<p> The Amazon EC2 key pair to set for the instance. This parameter is optional; if desired, you may specify this parameter to connect to your instances by using SSH. </p>"
-        },
-        "PreferredMaintenanceWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p> The start time for a one-hour period each week during which AWS OpsWorks CM performs maintenance on the instance. Valid values must be specified in the following format: <code>DDD:HH:MM</code>. <code>MM</code> must be specified as <code>00</code>. The specified time is in coordinated universal time (UTC). The default value is a random one-hour period on Tuesday, Wednesday, or Friday. See <code>TimeWindowDefinition</code> for more information. </p> <p> <b>Example:</b> <code>Mon:08:00</code>, which represents a start time of every Monday at 08:00 UTC. (8:00 a.m.) </p>"
-        },
-        "PreferredBackupWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p> The start time for a one-hour period during which AWS OpsWorks CM backs up application-level data on your server if automated backups are enabled. Valid values must be specified in one of the following formats: </p> <ul> <li> <p> <code>HH:MM</code> for daily backups</p> </li> <li> <p> <code>DDD:HH:MM</code> for weekly backups</p> </li> </ul> <p> <code>MM</code> must be specified as <code>00</code>. The specified time is in coordinated universal time (UTC). The default value is a random, daily start time.</p> <p> <b>Example:</b> <code>08:00</code>, which represents a daily start time of 08:00 UTC.</p> <p> <b>Example:</b> <code>Mon:08:00</code>, which represents a start time of every Monday at 08:00 UTC. (8:00 a.m.)</p>"
-        },
-        "SecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p> A list of security group IDs to attach to the Amazon EC2 instance. If you add this parameter, the specified security groups must be within the VPC that is specified by <code>SubnetIds</code>. </p> <p> If you do not specify this parameter, AWS OpsWorks CM creates one new security group that uses TCP ports 22 and 443, open to 0.0.0.0/0 (everyone). </p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"ServiceRoleArn",
-          "documentation":"<p> The service role that the AWS OpsWorks CM service backend uses to work with your account. Although the AWS OpsWorks management console typically creates the service role for you, if you are using the AWS CLI or API commands, run the service-role-creation.yaml AWS CloudFormation template, located at https://s3.amazonaws.com/opsworks-cm-us-east-1-prod-default-assets/misc/opsworks-cm-roles.yaml. This template creates a CloudFormation stack that includes the service role and instance profile that you need. </p>"
-        },
-        "SubnetIds":{
-          "shape":"Strings",
-          "documentation":"<p> The IDs of subnets in which to launch the server EC2 instance. </p> <p> Amazon EC2-Classic customers: This field is required. All servers must run within a VPC. The VPC must have \"Auto Assign Public IP\" enabled. </p> <p> EC2-VPC customers: This field is optional. If you do not specify subnet IDs, your EC2 instances are created in a default subnet that is selected by Amazon EC2. If you specify subnet IDs, the VPC must have \"Auto Assign Public IP\" enabled. </p> <p>For more information about supported Amazon EC2 platforms, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html\">Supported Platforms</a>.</p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A map that contains tag keys and tag values to attach to an AWS OpsWorks for Chef Automate or AWS OpsWorks for Puppet Enterprise server.</p> <ul> <li> <p>The key cannot be empty.</p> </li> <li> <p>The key can be a maximum of 127 characters, and can contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : / @</code> </p> </li> <li> <p>The value can be a maximum 255 characters, and contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : / @</code> </p> </li> <li> <p>Leading and trailing white spaces are trimmed from both the key and value.</p> </li> <li> <p>A maximum of 50 user-applied tags is allowed for any AWS OpsWorks-CM server.</p> </li> </ul>"
-        },
-        "BackupId":{
-          "shape":"BackupId",
-          "documentation":"<p> If you specify this field, AWS OpsWorks CM creates the server by using the backup represented by BackupId. </p>"
-        }
-      }
-    },
-    "CreateServerResponse":{
-      "type":"structure",
-      "members":{
-        "Server":{
-          "shape":"Server",
-          "documentation":"<p>The server that is created by the request. </p>"
-        }
-      }
-    },
-    "CustomCertificate":{
-      "type":"string",
-      "max":2097152,
-      "pattern":"(?s)\\s*-----BEGIN CERTIFICATE-----.+-----END CERTIFICATE-----\\s*"
-    },
-    "CustomDomain":{
-      "type":"string",
-      "max":253,
-      "pattern":"^(((?!-)[A-Za-z0-9-]{0,62}[A-Za-z0-9])\\.)+((?!-)[A-Za-z0-9-]{1,62}[A-Za-z0-9])$"
-    },
-    "CustomPrivateKey":{
-      "type":"string",
-      "max":4096,
-      "pattern":"(?ms)\\s*^-----BEGIN (?-s:.*)PRIVATE KEY-----$.*?^-----END (?-s:.*)PRIVATE KEY-----$\\s*",
-      "sensitive":true
-    },
-    "DeleteBackupRequest":{
-      "type":"structure",
-      "required":["BackupId"],
-      "members":{
-        "BackupId":{
-          "shape":"BackupId",
-          "documentation":"<p>The ID of the backup to delete. Run the DescribeBackups command to get a list of backup IDs. Backup IDs are in the format <code>ServerName-yyyyMMddHHmmssSSS</code>. </p>"
-        }
-      }
-    },
-    "DeleteBackupResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteServerRequest":{
-      "type":"structure",
-      "required":["ServerName"],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The ID of the server to delete.</p>"
-        }
-      }
-    },
-    "DeleteServerResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DescribeAccountAttributesRequest":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DescribeAccountAttributesResponse":{
-      "type":"structure",
-      "members":{
-        "Attributes":{
-          "shape":"AccountAttributes",
-          "documentation":"<p> The attributes that are currently set for the account. </p>"
-        }
-      }
-    },
-    "DescribeBackupsRequest":{
-      "type":"structure",
-      "members":{
-        "BackupId":{
-          "shape":"BackupId",
-          "documentation":"<p>Describes a single backup. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>Returns backups for the server with the specified ServerName. </p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>This is not currently implemented for <code>DescribeBackups</code> requests.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>This is not currently implemented for <code>DescribeBackups</code> requests.</p>"
-        }
-      }
-    },
-    "DescribeBackupsResponse":{
-      "type":"structure",
-      "members":{
-        "Backups":{
-          "shape":"Backups",
-          "documentation":"<p>Contains the response to a <code>DescribeBackups</code> request. </p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>This is not currently implemented for <code>DescribeBackups</code> requests.</p>"
-        }
-      }
-    },
-    "DescribeEventsRequest":{
-      "type":"structure",
-      "required":["ServerName"],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server for which you want to view events.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>NextToken is a string that is returned in some command responses. It indicates that not all entries have been returned, and that you must run at least one more request to get remaining items. To get remaining results, call <code>DescribeEvents</code> again, and assign the token from the previous results as the value of the <code>nextToken</code> parameter. If there are no more results, the response object's <code>nextToken</code> parameter value is <code>null</code>. Setting a <code>nextToken</code> value that was not returned in your previous results causes an <code>InvalidNextTokenException</code> to occur. </p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>To receive a paginated response, use this parameter to specify the maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can assign to the <code>NextToken</code> request parameter to get the next set of results. </p>"
-        }
-      }
-    },
-    "DescribeEventsResponse":{
-      "type":"structure",
-      "members":{
-        "ServerEvents":{
-          "shape":"ServerEvents",
-          "documentation":"<p>Contains the response to a <code>DescribeEvents</code> request. </p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>NextToken is a string that is returned in some command responses. It indicates that not all entries have been returned, and that you must run at least one more request to get remaining items. To get remaining results, call <code>DescribeEvents</code> again, and assign the token from the previous results as the value of the <code>nextToken</code> parameter. If there are no more results, the response object's <code>nextToken</code> parameter value is <code>null</code>. Setting a <code>nextToken</code> value that was not returned in your previous results causes an <code>InvalidNextTokenException</code> to occur. </p>"
-        }
-      }
-    },
-    "DescribeNodeAssociationStatusRequest":{
-      "type":"structure",
-      "required":[
-        "NodeAssociationStatusToken",
-        "ServerName"
-      ],
-      "members":{
-        "NodeAssociationStatusToken":{
-          "shape":"NodeAssociationStatusToken",
-          "documentation":"<p>The token returned in either the AssociateNodeResponse or the DisassociateNodeResponse. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server from which to disassociate the node. </p>"
-        }
-      }
-    },
-    "DescribeNodeAssociationStatusResponse":{
-      "type":"structure",
-      "members":{
-        "NodeAssociationStatus":{
-          "shape":"NodeAssociationStatus",
-          "documentation":"<p>The status of the association or disassociation request. </p> <p class=\"title\"> <b>Possible values:</b> </p> <ul> <li> <p> <code>SUCCESS</code>: The association or disassociation succeeded. </p> </li> <li> <p> <code>FAILED</code>: The association or disassociation failed. </p> </li> <li> <p> <code>IN_PROGRESS</code>: The association or disassociation is still in progress. </p> </li> </ul>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>Attributes specific to the node association. In Puppet, the attibute PUPPET_NODE_CERT contains the signed certificate (the result of the CSR). </p>"
-        }
-      }
-    },
-    "DescribeServersRequest":{
-      "type":"structure",
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>Describes the server with the specified ServerName.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>This is not currently implemented for <code>DescribeServers</code> requests. </p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>This is not currently implemented for <code>DescribeServers</code> requests. </p>"
-        }
-      }
-    },
-    "DescribeServersResponse":{
-      "type":"structure",
-      "members":{
-        "Servers":{
-          "shape":"Servers",
-          "documentation":"<p>Contains the response to a <code>DescribeServers</code> request.</p> <p> <i>For Chef Automate servers:</i> If <code>DescribeServersResponse$Servers$EngineAttributes</code> includes CHEF_MAJOR_UPGRADE_AVAILABLE, you can upgrade the Chef Automate server to Chef Automate 2. To be eligible for upgrade, a server running Chef Automate 1 must have had at least one successful maintenance run after November 1, 2019.</p> <p> <i>For Puppet servers:</i> <code>DescribeServersResponse$Servers$EngineAttributes</code> contains the following two responses:</p> <ul> <li> <p> <code>PUPPET_API_CA_CERT</code>, the PEM-encoded CA certificate that is used by the Puppet API over TCP port number 8140. The CA certificate is also used to sign node certificates.</p> </li> <li> <p> <code>PUPPET_API_CRL</code>, a certificate revocation list. The certificate revocation list is for internal maintenance purposes only. For more information about the Puppet certificate revocation list, see <a href=\"https://puppet.com/docs/puppet/5.5/man/certificate_revocation_list.html\">Man Page: puppet certificate_revocation_list</a> in the Puppet documentation.</p> </li> </ul>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>This is not currently implemented for <code>DescribeServers</code> requests. </p>"
-        }
-      }
-    },
-    "DisassociateNodeRequest":{
-      "type":"structure",
-      "required":[
-        "ServerName",
-        "NodeName"
-      ],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server from which to disassociate the node. </p>"
-        },
-        "NodeName":{
-          "shape":"NodeName",
-          "documentation":"<p>The name of the client node. </p>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>Engine attributes that are used for disassociating the node. No attributes are required for Puppet. </p> <p class=\"title\"> <b>Attributes required in a DisassociateNode request for Chef</b> </p> <ul> <li> <p> <code>CHEF_ORGANIZATION</code>: The Chef organization with which the node was associated. By default only one organization named <code>default</code> can exist. </p> </li> </ul>"
-        }
-      }
-    },
-    "DisassociateNodeResponse":{
-      "type":"structure",
-      "members":{
-        "NodeAssociationStatusToken":{
-          "shape":"NodeAssociationStatusToken",
-          "documentation":"<p>Contains a token which can be passed to the <code>DescribeNodeAssociationStatus</code> API call to get the status of the disassociation request. </p>"
-        }
-      }
-    },
-    "EngineAttribute":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"EngineAttributeName",
-          "documentation":"<p>The name of the engine attribute. </p>"
-        },
-        "Value":{
-          "shape":"EngineAttributeValue",
-          "documentation":"<p>The value of the engine attribute. </p>"
-        }
-      },
-      "documentation":"<p>A name and value pair that is specific to the engine of the server. </p>"
-    },
-    "EngineAttributeName":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*"
-    },
-    "EngineAttributeValue":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*",
-      "sensitive":true
-    },
-    "EngineAttributes":{
-      "type":"list",
-      "member":{"shape":"EngineAttribute"}
-    },
-    "ExportServerEngineAttributeRequest":{
-      "type":"structure",
-      "required":[
-        "ExportAttributeName",
-        "ServerName"
-      ],
-      "members":{
-        "ExportAttributeName":{
-          "shape":"String",
-          "documentation":"<p>The name of the export attribute. Currently, the supported export attribute is <code>Userdata</code>. This exports a user data script that includes parameters and values provided in the <code>InputAttributes</code> list.</p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server from which you are exporting the attribute.</p>"
-        },
-        "InputAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>The list of engine attributes. The list type is <code>EngineAttribute</code>. An <code>EngineAttribute</code> list item is a pair that includes an attribute name and its value. For the <code>Userdata</code> ExportAttributeName, the following are supported engine attribute names.</p> <ul> <li> <p> <b>RunList</b> In Chef, a list of roles or recipes that are run in the specified order. In Puppet, this parameter is ignored.</p> </li> <li> <p> <b>OrganizationName</b> In Chef, an organization name. AWS OpsWorks for Chef Automate always creates the organization <code>default</code>. In Puppet, this parameter is ignored.</p> </li> <li> <p> <b>NodeEnvironment</b> In Chef, a node environment (for example, development, staging, or one-box). In Puppet, this parameter is ignored.</p> </li> <li> <p> <b>NodeClientVersion</b> In Chef, the version of the Chef engine (three numbers separated by dots, such as 13.8.5). If this attribute is empty, OpsWorks for Chef Automate uses the most current version. In Puppet, this parameter is ignored.</p> </li> </ul>"
-        }
-      }
-    },
-    "ExportServerEngineAttributeResponse":{
-      "type":"structure",
-      "members":{
-        "EngineAttribute":{
-          "shape":"EngineAttribute",
-          "documentation":"<p>The requested engine attribute pair with attribute name and value.</p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The server name used in the request.</p>"
-        }
-      }
-    },
-    "InstanceProfileArn":{
-      "type":"string",
-      "max":10000,
-      "pattern":"arn:aws:iam::[0-9]{12}:instance-profile/.*"
-    },
-    "Integer":{"type":"integer"},
-    "InvalidNextTokenException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message that can contain more detail about a nextToken failure. </p>"
-        }
-      },
-      "documentation":"<p>This occurs when the provided nextToken is not valid. </p>",
-      "exception":true
-    },
-    "InvalidStateException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message that provides more detail if a resource is in a state that is not valid for performing a specified action. </p>"
-        }
-      },
-      "documentation":"<p>The resource is in a state that does not allow you to perform a specified action. </p>",
-      "exception":true
-    },
-    "KeyPair":{
-      "type":"string",
-      "max":10000,
-      "pattern":".*"
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message that the maximum allowed number of servers or backups has been exceeded. </p>"
-        }
-      },
-      "documentation":"<p>The limit of servers or backups has been reached. </p>",
-      "exception":true
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["ResourceArn"],
-      "members":{
-        "ResourceArn":{
-          "shape":"AWSOpsWorksCMResourceArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of an AWS OpsWorks for Chef Automate or AWS OpsWorks for Puppet Enterprise server for which you want to show applied tags. For example, <code>arn:aws:opsworks-cm:us-west-2:123456789012:server/test-owcm-server/EXAMPLE-66b0-4196-8274-d1a2bEXAMPLE</code>.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>NextToken is a string that is returned in some command responses. It indicates that not all entries have been returned, and that you must run at least one more request to get remaining items. To get remaining results, call <code>ListTagsForResource</code> again, and assign the token from the previous results as the value of the <code>nextToken</code> parameter. If there are no more results, the response object's <code>nextToken</code> parameter value is <code>null</code>. Setting a <code>nextToken</code> value that was not returned in your previous results causes an <code>InvalidNextTokenException</code> to occur.</p>"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>To receive a paginated response, use this parameter to specify the maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a <code>NextToken</code> value that you can assign to the <code>NextToken</code> request parameter to get the next set of results.</p>"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>Tags that have been applied to the resource.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A token that you can use as the value of <code>NextToken</code> in subsequent calls to the API to show more results.</p>"
-        }
-      }
-    },
-    "MaintenanceStatus":{
-      "type":"string",
-      "enum":[
-        "SUCCESS",
-        "FAILED"
-      ]
-    },
-    "MaxResults":{
-      "type":"integer",
-      "min":1
-    },
-    "NextToken":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*"
-    },
-    "NodeAssociationStatus":{
-      "type":"string",
-      "documentation":"<p>The status of the association or disassociation request. </p> <p class=\"title\"> <b>Possible values:</b> </p> <ul> <li> <p> <code>SUCCESS</code>: The association or disassociation succeeded. </p> </li> <li> <p> <code>FAILED</code>: The association or disassociation failed. </p> </li> <li> <p> <code>IN_PROGRESS</code>: The association or disassociation is still in progress. </p> </li> </ul>",
-      "enum":[
-        "SUCCESS",
-        "FAILED",
-        "IN_PROGRESS"
-      ]
-    },
-    "NodeAssociationStatusToken":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*"
-    },
-    "NodeName":{
-      "type":"string",
-      "documentation":"<p>The node name that is used by <code>chef-client</code> or <code>puppet-agent</code>for a new node. We recommend to use a unique FQDN as hostname. For more information, see the <a href=\"https://docs.aws.amazon.com/https:/docs.chef.io/nodes.html#about-node-names\">Chef</a> or <a href=\"https://docs.aws.amazon.com/https:/docs.puppet.com/puppet/4.10/man/agent.html\">Puppet</a> documentation. </p>",
-      "max":10000,
-      "pattern":"^[\\-\\p{Alnum}_:.]+$"
-    },
-    "ResourceAlreadyExistsException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message in response to a CreateServer request that a resource cannot be created because it already exists. </p>"
-        }
-      },
-      "documentation":"<p>The requested resource cannot be created because it already exists. </p>",
-      "exception":true
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message that can contain more detail about problems locating or accessing a resource. </p>"
-        }
-      },
-      "documentation":"<p>The requested resource does not exist, or access was denied. </p>",
-      "exception":true
-    },
-    "RestoreServerRequest":{
-      "type":"structure",
-      "required":[
-        "BackupId",
-        "ServerName"
-      ],
-      "members":{
-        "BackupId":{
-          "shape":"BackupId",
-          "documentation":"<p> The ID of the backup that you want to use to restore a server. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p> The name of the server that you want to restore. </p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p> The type of instance to restore. Valid values must be specified in the following format: <code>^([cm][34]|t2).*</code> For example, <code>m5.large</code>. Valid values are <code>m5.large</code>, <code>r5.xlarge</code>, and <code>r5.2xlarge</code>. If you do not specify this parameter, RestoreServer uses the instance type from the specified backup. </p>"
-        },
-        "KeyPair":{
-          "shape":"KeyPair",
-          "documentation":"<p> The name of the key pair to set on the new EC2 instance. This can be helpful if the administrator no longer has the SSH key. </p>"
-        }
-      }
-    },
-    "RestoreServerResponse":{
-      "type":"structure",
-      "members":{
-        "Server":{"shape":"Server"}
-      }
-    },
-    "Server":{
-      "type":"structure",
-      "members":{
-        "AssociatePublicIpAddress":{
-          "shape":"Boolean",
-          "documentation":"<p>Associate a public IP address with a server that you are launching. </p>"
-        },
-        "BackupRetentionCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of automated backups to keep. </p>"
-        },
-        "ServerName":{
-          "shape":"String",
-          "documentation":"<p>The name of the server. </p>"
-        },
-        "CreatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>Time stamp of server creation. Example <code>2016-07-29T13:38:47.520Z</code> </p>"
-        },
-        "CloudFormationStackArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the CloudFormation stack that was used to create the server. </p>"
-        },
-        "CustomDomain":{
-          "shape":"CustomDomain",
-          "documentation":"<p>An optional public endpoint of a server, such as <code>https://aws.my-company.com</code>. You cannot access the server by using the <code>Endpoint</code> value if the server has a <code>CustomDomain</code> specified.</p>"
-        },
-        "DisableAutomatedBackup":{
-          "shape":"Boolean",
-          "documentation":"<p>Disables automated backups. The number of stored backups is dependent on the value of PreferredBackupCount. </p>"
-        },
-        "Endpoint":{
-          "shape":"String",
-          "documentation":"<p> A DNS name that can be used to access the engine. Example: <code>myserver-asdfghjkl.us-east-1.opsworks.io</code>. You cannot access the server by using the <code>Endpoint</code> value if the server has a <code>CustomDomain</code> specified. </p>"
-        },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p>The engine type of the server. Valid values in this release include <code>ChefAutomate</code> and <code>Puppet</code>. </p>"
-        },
-        "EngineModel":{
-          "shape":"String",
-          "documentation":"<p>The engine model of the server. Valid values in this release include <code>Monolithic</code> for Puppet and <code>Single</code> for Chef. </p>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>The response of a createServer() request returns the master credential to access the server in EngineAttributes. These credentials are not stored by AWS OpsWorks CM; they are returned only as part of the result of createServer(). </p> <p class=\"title\"> <b>Attributes returned in a createServer response for Chef</b> </p> <ul> <li> <p> <code>CHEF_AUTOMATE_PIVOTAL_KEY</code>: A base64-encoded RSA private key that is generated by AWS OpsWorks for Chef Automate. This private key is required to access the Chef API.</p> </li> <li> <p> <code>CHEF_STARTER_KIT</code>: A base64-encoded ZIP file. The ZIP file contains a Chef starter kit, which includes a README, a configuration file, and the required RSA private key. Save this file, unzip it, and then change to the directory where you've unzipped the file contents. From this directory, you can run Knife commands.</p> </li> </ul> <p class=\"title\"> <b>Attributes returned in a createServer response for Puppet</b> </p> <ul> <li> <p> <code>PUPPET_STARTER_KIT</code>: A base64-encoded ZIP file. The ZIP file contains a Puppet starter kit, including a README and a required private key. Save this file, unzip it, and then change to the directory where you've unzipped the file contents.</p> </li> <li> <p> <code>PUPPET_ADMIN_PASSWORD</code>: An administrator password that you can use to sign in to the Puppet Enterprise console after the server is online.</p> </li> </ul>"
-        },
-        "EngineVersion":{
-          "shape":"String",
-          "documentation":"<p>The engine version of the server. For a Chef server, the valid value for EngineVersion is currently <code>2</code>. For a Puppet server, specify either <code>2019</code> or <code>2017</code>. </p>"
-        },
-        "InstanceProfileArn":{
-          "shape":"String",
-          "documentation":"<p>The instance profile ARN of the server. </p>"
-        },
-        "InstanceType":{
-          "shape":"String",
-          "documentation":"<p> The instance type for the server, as specified in the CloudFormation stack. This might not be the same instance type that is shown in the EC2 console. </p>"
-        },
-        "KeyPair":{
-          "shape":"String",
-          "documentation":"<p>The key pair associated with the server. </p>"
-        },
-        "MaintenanceStatus":{
-          "shape":"MaintenanceStatus",
-          "documentation":"<p>The status of the most recent server maintenance run. Shows <code>SUCCESS</code> or <code>FAILED</code>. </p>"
-        },
-        "PreferredMaintenanceWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p>The preferred maintenance period specified for the server. </p>"
-        },
-        "PreferredBackupWindow":{
-          "shape":"TimeWindowDefinition",
-          "documentation":"<p>The preferred backup period specified for the server. </p>"
-        },
-        "SecurityGroupIds":{
-          "shape":"Strings",
-          "documentation":"<p> The security group IDs for the server, as specified in the CloudFormation stack. These might not be the same security groups that are shown in the EC2 console. </p>"
-        },
-        "ServiceRoleArn":{
-          "shape":"String",
-          "documentation":"<p>The service role ARN used to create the server. </p>"
-        },
-        "Status":{
-          "shape":"ServerStatus",
-          "documentation":"<p> The server's status. This field displays the states of actions in progress, such as creating, running, or backing up the server, as well as the server's health state. </p>"
-        },
-        "StatusReason":{
-          "shape":"String",
-          "documentation":"<p> Depending on the server status, this field has either a human-readable message (such as a create or backup error), or an escaped block of JSON (used for health check results). </p>"
-        },
-        "SubnetIds":{
-          "shape":"Strings",
-          "documentation":"<p> The subnet IDs specified in a CreateServer request. </p>"
-        },
-        "ServerArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the server. </p>"
-        }
-      },
-      "documentation":"<p>Describes a configuration management server. </p>"
-    },
-    "ServerEvent":{
-      "type":"structure",
-      "members":{
-        "CreatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when the event occurred. </p>"
-        },
-        "ServerName":{
-          "shape":"String",
-          "documentation":"<p>The name of the server on or for which the event occurred. </p>"
-        },
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>A human-readable informational or status message.</p>"
-        },
-        "LogUrl":{
-          "shape":"String",
-          "documentation":"<p>The Amazon S3 URL of the event's log file.</p>"
-        }
-      },
-      "documentation":"<p>An event that is related to the server, such as the start of maintenance or backup. </p>"
-    },
-    "ServerEvents":{
-      "type":"list",
-      "member":{"shape":"ServerEvent"}
-    },
-    "ServerName":{
-      "type":"string",
-      "max":40,
-      "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9\\-]*"
-    },
-    "ServerStatus":{
-      "type":"string",
-      "enum":[
-        "BACKING_UP",
-        "CONNECTION_LOST",
-        "CREATING",
-        "DELETING",
-        "MODIFYING",
-        "FAILED",
-        "HEALTHY",
-        "RUNNING",
-        "RESTORING",
-        "SETUP",
-        "UNDER_MAINTENANCE",
-        "UNHEALTHY",
-        "TERMINATED"
-      ]
-    },
-    "Servers":{
-      "type":"list",
-      "member":{"shape":"Server"}
-    },
-    "ServiceRoleArn":{
-      "type":"string",
-      "max":10000,
-      "pattern":"arn:aws:iam::[0-9]{12}:role/.*"
-    },
-    "StartMaintenanceRequest":{
-      "type":"structure",
-      "required":["ServerName"],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server on which to run maintenance. </p>"
-        },
-        "EngineAttributes":{
-          "shape":"EngineAttributes",
-          "documentation":"<p>Engine attributes that are specific to the server on which you want to run maintenance.</p> <p class=\"title\"> <b>Attributes accepted in a StartMaintenance request for Chef</b> </p> <ul> <li> <p> <code>CHEF_MAJOR_UPGRADE</code>: If a Chef Automate server is eligible for upgrade to Chef Automate 2, add this engine attribute to a <code>StartMaintenance</code> request and set the value to <code>true</code> to upgrade the server to Chef Automate 2. For more information, see <a href=\"https://docs.aws.amazon.com/opsworks/latest/userguide/opscm-a2upgrade.html\">Upgrade an AWS OpsWorks for Chef Automate Server to Chef Automate 2</a>. </p> </li> </ul>"
-        }
-      }
-    },
-    "StartMaintenanceResponse":{
-      "type":"structure",
-      "members":{
-        "Server":{
-          "shape":"Server",
-          "documentation":"<p>Contains the response to a <code>StartMaintenance</code> request. </p>"
-        }
-      }
-    },
-    "String":{
-      "type":"string",
-      "max":10000,
-      "pattern":"(?s).*"
-    },
-    "Strings":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "Tag":{
-      "type":"structure",
-      "required":[
-        "Key",
-        "Value"
-      ],
-      "members":{
-        "Key":{
-          "shape":"TagKey",
-          "documentation":"<p>A tag key, such as <code>Stage</code> or <code>Name</code>. A tag key cannot be empty. The key can be a maximum of 127 characters, and can contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p>"
-        },
-        "Value":{
-          "shape":"TagValue",
-          "documentation":"<p>An optional tag value, such as <code>Production</code> or <code>test-owcm-server</code>. The value can be a maximum of 255 characters, and contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p>"
-        }
-      },
-      "documentation":"<p>A map that contains tag keys and tag values to attach to an AWS OpsWorks for Chef Automate or AWS OpsWorks for Puppet Enterprise server. Leading and trailing white spaces are trimmed from both the key and value. A maximum of 50 user-applied tags is allowed for tag-supported AWS OpsWorks-CM resources.</p>"
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":200,
-      "min":0
-    },
-    "TagList":{
-      "type":"list",
-      "member":{"shape":"Tag"},
-      "max":200,
-      "min":0
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "Tags"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"AWSOpsWorksCMResourceArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of a resource to which you want to apply tags. For example, <code>arn:aws:opsworks-cm:us-west-2:123456789012:server/test-owcm-server/EXAMPLE-66b0-4196-8274-d1a2bEXAMPLE</code>.</p>"
-        },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>A map that contains tag keys and tag values to attach to AWS OpsWorks-CM servers or backups.</p> <ul> <li> <p>The key cannot be empty.</p> </li> <li> <p>The key can be a maximum of 127 characters, and can contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>The value can be a maximum 255 characters, and contain only Unicode letters, numbers, or separators, or the following special characters: <code>+ - = . _ : /</code> </p> </li> <li> <p>Leading and trailing white spaces are trimmed from both the key and value.</p> </li> <li> <p>A maximum of 50 user-applied tags is allowed for any AWS OpsWorks-CM server or backup.</p> </li> </ul>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
-    },
-    "TimeWindowDefinition":{
-      "type":"string",
-      "documentation":"<p> <code>DDD:HH:MM</code> (weekly start time) or <code>HH:MM</code> (daily start time). </p> <p> Time windows always use coordinated universal time (UTC). Valid strings for day of week (<code>DDD</code>) are: <code>Mon</code>, <code>Tue</code>, <code>Wed</code>, <code>Thr</code>, <code>Fri</code>, <code>Sat</code>, or <code>Sun</code>.</p>",
-      "max":10000,
-      "pattern":"^((Mon|Tue|Wed|Thu|Fri|Sat|Sun):)?([0-1][0-9]|2[0-3]):[0-5][0-9]$"
-    },
-    "Timestamp":{"type":"timestamp"},
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"AWSOpsWorksCMResourceArn",
-          "documentation":"<p>The Amazon Resource Number (ARN) of a resource from which you want to remove tags. For example, <code>arn:aws:opsworks-cm:us-west-2:123456789012:server/test-owcm-server/EXAMPLE-66b0-4196-8274-d1a2bEXAMPLE</code>.</p>"
-        },
-        "TagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>The keys of tags that you want to remove.</p>"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateServerEngineAttributesRequest":{
-      "type":"structure",
-      "required":[
-        "ServerName",
-        "AttributeName"
-      ],
-      "members":{
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server to update. </p>"
-        },
-        "AttributeName":{
-          "shape":"AttributeName",
-          "documentation":"<p>The name of the engine attribute to update. </p>"
-        },
-        "AttributeValue":{
-          "shape":"AttributeValue",
-          "documentation":"<p>The value to set for the attribute. </p>"
-        }
-      }
-    },
-    "UpdateServerEngineAttributesResponse":{
-      "type":"structure",
-      "members":{
-        "Server":{
-          "shape":"Server",
-          "documentation":"<p>Contains the response to an <code>UpdateServerEngineAttributes</code> request. </p>"
-        }
-      }
-    },
-    "UpdateServerRequest":{
-      "type":"structure",
-      "required":["ServerName"],
-      "members":{
-        "DisableAutomatedBackup":{
-          "shape":"Boolean",
-          "documentation":"<p>Setting DisableAutomatedBackup to <code>true</code> disables automated or scheduled backups. Automated backups are enabled by default. </p>"
-        },
-        "BackupRetentionCount":{
-          "shape":"Integer",
-          "documentation":"<p>Sets the number of automated backups that you want to keep. </p>"
-        },
-        "ServerName":{
-          "shape":"ServerName",
-          "documentation":"<p>The name of the server to update. </p>"
-        },
-        "PreferredMaintenanceWindow":{"shape":"TimeWindowDefinition"},
-        "PreferredBackupWindow":{"shape":"TimeWindowDefinition"}
-      }
-    },
-    "UpdateServerResponse":{
-      "type":"structure",
-      "members":{
-        "Server":{
-          "shape":"Server",
-          "documentation":"<p>Contains the response to a <code>UpdateServer</code> request. </p>"
-        }
-      }
-    },
-    "ValidationException":{
-      "type":"structure",
-      "members":{
-        "Message":{
-          "shape":"String",
-          "documentation":"<p>Error or informational message that can contain more detail about a validation failure. </p>"
-        }
-      },
-      "documentation":"<p>One or more of the provided request parameters are not valid. </p>",
-      "exception":true
-    }
-  },
-  "documentation":"<fullname>AWS OpsWorks CM</fullname> <p>AWS OpsWorks for configuration management (CM) is a service that runs and manages configuration management servers. You can use AWS OpsWorks CM to create and manage AWS OpsWorks for Chef Automate and AWS OpsWorks for Puppet Enterprise servers, and add or remove nodes for the servers to manage.</p> <p> <b>Glossary of terms</b> </p> <ul> <li> <p> <b>Server</b>: A configuration management server that can be highly-available. The configuration management server runs on an Amazon Elastic Compute Cloud (EC2) instance, and may use various other AWS services, such as Amazon Relational Database Service (RDS) and Elastic Load Balancing. A server is a generic abstraction over the configuration manager that you want to use, much like Amazon RDS. In AWS OpsWorks CM, you do not start or stop servers. After you create servers, they continue to run until they are deleted.</p> </li> <li> <p> <b>Engine</b>: The engine is the specific configuration manager that you want to use. Valid values in this release include <code>ChefAutomate</code> and <code>Puppet</code>.</p> </li> <li> <p> <b>Backup</b>: This is an application-level backup of the data that the configuration manager stores. AWS OpsWorks CM creates an S3 bucket for backups when you launch the first server. A backup maintains a snapshot of a server's configuration-related attributes at the time the backup starts.</p> </li> <li> <p> <b>Events</b>: Events are always related to a server. Events are written during server creation, when health checks run, when backups are created, when system maintenance is performed, etc. When you delete a server, the server's events are also deleted.</p> </li> <li> <p> <b>Account attributes</b>: Every account has attributes that are assigned in the AWS OpsWorks CM database. These attributes store information about configuration limits (servers, backups, etc.) and your customer account. </p> </li> </ul> <p> <b>Endpoints</b> </p> <p>AWS OpsWorks CM supports the following endpoints, all HTTPS. You must connect to one of the following endpoints. Your servers can only be accessed or managed within the endpoint in which they are created.</p> <ul> <li> <p>opsworks-cm.us-east-1.amazonaws.com</p> </li> <li> <p>opsworks-cm.us-east-2.amazonaws.com</p> </li> <li> <p>opsworks-cm.us-west-1.amazonaws.com</p> </li> <li> <p>opsworks-cm.us-west-2.amazonaws.com</p> </li> <li> <p>opsworks-cm.ap-northeast-1.amazonaws.com</p> </li> <li> <p>opsworks-cm.ap-southeast-1.amazonaws.com</p> </li> <li> <p>opsworks-cm.ap-southeast-2.amazonaws.com</p> </li> <li> <p>opsworks-cm.eu-central-1.amazonaws.com</p> </li> <li> <p>opsworks-cm.eu-west-1.amazonaws.com</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/opsworks-service.html\">AWS OpsWorks endpoints and quotas</a> in the AWS General Reference.</p> <p> <b>Throttling limits</b> </p> <p>All API operations allow for five requests per second with a burst of 10 requests per second.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/waiters-2.json 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/opsworkscm/2016-11-01/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/opsworkscm/2016-11-01/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-{
-  "version": 2,
-  "waiters": {
-    "NodeAssociated": {
-      "delay": 15,
-      "maxAttempts": 15,
-      "operation": "DescribeNodeAssociationStatus",
-      "description": "Wait until node is associated or disassociated.",
-      "acceptors": [
-        {
-          "expected": "SUCCESS",
-          "state": "success",
-          "matcher": "path",
-          "argument": "NodeAssociationStatus"
-        },
-        {
-          "expected": "FAILED",
-          "state": "failure",
-          "matcher": "path",
-          "argument": "NodeAssociationStatus"
-        }
-      ]
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.json 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -94,6 +94,18 @@
       "limit_key": "MaxResults",
       "output_token": "NextToken",
       "result_key": "DelegatedServices"
+    },
+    "ListAccountsWithInvalidEffectivePolicy": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "Accounts"
+    },
+    "ListEffectivePolicyValidationErrors": {
+      "input_token": "NextToken",
+      "limit_key": "MaxResults",
+      "output_token": "NextToken",
+      "result_key": "EffectivePolicyValidationErrors"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,20 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "ListAccountsWithInvalidEffectivePolicy": {
+        "non_aggregate_keys": [
+          "PolicyType"
+        ]
+      },
+      "ListEffectivePolicyValidationErrors": {
+        "non_aggregate_keys": [
+          "PolicyType",
+          "AccountId",
+          "EvaluationTimestamp",
+          "Path"
+        ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/service-2.json 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/organizations/2016-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/organizations/2016-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -60,7 +60,7 @@
         {"shape":"UnsupportedAPIEndpointException"},
         {"shape":"PolicyChangesInProgressException"}
       ],
-      "documentation":"<p>Attaches a policy to a root, an organizational unit (OU), or an individual account. How the policy affects accounts depends on the type of policy. Refer to the <i>Organizations User Guide</i> for information about each policy type:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Attaches a policy to a root, an organizational unit (OU), or an individual account. How the policy affects accounts depends on the type of policy. Refer to the <i>Organizations User Guide</i> for information about each policy type:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "CancelHandshake":{
       "name":"CancelHandshake",
@@ -208,7 +208,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Creates a policy of a specified type that you can attach to a root, an organizational unit (OU), or an individual Amazon Web Services account.</p> <p>For more information about policies and their use, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies.html\">Managing Organizations policies</a>.</p> <p>If the request includes tags, then the requester must have the <code>organizations:TagResource</code> permission.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Creates a policy of a specified type that you can attach to a root, an organizational unit (OU), or an individual Amazon Web Services account.</p> <p>For more information about policies and their use, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies.html\">Managing Organizations policies</a>.</p> <p>If the request includes tags, then the requester must have the <code>organizations:TagResource</code> permission.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DeclineHandshake":{
       "name":"DeclineHandshake",
@@ -284,7 +284,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Deletes the specified policy from your organization. Before you perform this operation, you must first detach the policy from all organizational units (OUs), roots, and accounts.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Deletes the specified policy from your organization. Before you perform this operation, you must first detach the policy from all organizational units (OUs), roots, and accounts.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DeleteResourcePolicy":{
       "name":"DeleteResourcePolicy",
@@ -302,7 +302,7 @@
         {"shape":"AWSOrganizationsNotInUseException"},
         {"shape":"ResourcePolicyNotFoundException"}
       ],
-      "documentation":"<p>Deletes the resource policy from your organization.</p> <p>You can only call this operation from the organization's management account.</p>"
+      "documentation":"<p>Deletes the resource policy from your organization.</p> <p>This operation can be called only from the organization's management account.</p>"
     },
     "DeregisterDelegatedAdministrator":{
       "name":"DeregisterDelegatedAdministrator",
@@ -341,7 +341,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves Organizations-related information about the specified account.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves Organizations-related information about the specified account.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DescribeCreateAccountStatus":{
       "name":"DescribeCreateAccountStatus",
@@ -360,7 +360,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Retrieves the current status of an asynchronous request to create an account.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves the current status of an asynchronous request to create an account.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DescribeEffectivePolicy":{
       "name":"DescribeEffectivePolicy",
@@ -433,7 +433,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves information about an organizational unit (OU).</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves information about an organizational unit (OU).</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DescribePolicy":{
       "name":"DescribePolicy",
@@ -452,7 +452,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Retrieves information about a policy.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves information about a policy.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DescribeResourcePolicy":{
       "name":"DescribeResourcePolicy",
@@ -470,7 +470,7 @@
         {"shape":"ResourcePolicyNotFoundException"},
         {"shape":"ConstraintViolationException"}
       ],
-      "documentation":"<p>Retrieves information about a resource policy.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves information about a resource policy.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DetachPolicy":{
       "name":"DetachPolicy",
@@ -493,7 +493,7 @@
         {"shape":"UnsupportedAPIEndpointException"},
         {"shape":"PolicyChangesInProgressException"}
       ],
-      "documentation":"<p>Detaches a policy from a target root, organizational unit (OU), or account.</p> <important> <p>If the policy being detached is a service control policy (SCP), the changes to permissions for Identity and Access Management (IAM) users and roles in affected accounts are immediate.</p> </important> <p>Every root, OU, and account must have at least one SCP attached. If you want to replace the default <code>FullAWSAccess</code> policy with an SCP that limits the permissions that can be delegated, you must attach the replacement SCP before you can remove the default SCP. This is the authorization strategy of an \"<a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/SCP_strategies.html#orgs_policies_allowlist\">allow list</a>\". If you instead attach a second SCP and leave the <code>FullAWSAccess</code> SCP still attached, and specify <code>\"Effect\": \"Deny\"</code> in the second SCP to override the <code>\"Effect\": \"Allow\"</code> in the <code>FullAWSAccess</code> policy (or any other attached SCP), you're using the authorization strategy of a \"<a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/SCP_strategies.html#orgs_policies_denylist\">deny list</a>\".</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Detaches a policy from a target root, organizational unit (OU), or account.</p> <important> <p>If the policy being detached is a service control policy (SCP), the changes to permissions for Identity and Access Management (IAM) users and roles in affected accounts are immediate.</p> </important> <p>Every root, OU, and account must have at least one SCP attached. If you want to replace the default <code>FullAWSAccess</code> policy with an SCP that limits the permissions that can be delegated, you must attach the replacement SCP before you can remove the default SCP. This is the authorization strategy of an \"<a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/SCP_strategies.html#orgs_policies_allowlist\">allow list</a>\". If you instead attach a second SCP and leave the <code>FullAWSAccess</code> SCP still attached, and specify <code>\"Effect\": \"Deny\"</code> in the second SCP to override the <code>\"Effect\": \"Allow\"</code> in the <code>FullAWSAccess</code> policy (or any other attached SCP), you're using the authorization strategy of a \"<a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/SCP_strategies.html#orgs_policies_denylist\">deny list</a>\".</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "DisableAWSServiceAccess":{
       "name":"DisableAWSServiceAccess",
@@ -535,7 +535,7 @@
         {"shape":"UnsupportedAPIEndpointException"},
         {"shape":"PolicyChangesInProgressException"}
       ],
-      "documentation":"<p>Disables an organizational policy type in a root. A policy of a certain type can be attached to entities in a root only if that type is enabled in the root. After you perform this operation, you no longer can attach policies of the specified type to that root or to any organizational unit (OU) or account in that root. You can undo this by using the <a>EnablePolicyType</a> operation.</p> <p>This is an asynchronous request that Amazon Web Services performs in the background. If you disable a policy type for a root, it still appears enabled for the organization if <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features</a> are enabled for the organization. Amazon Web Services recommends that you first use <a>ListRoots</a> to see the status of policy types for a specified root, and then use this operation.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p> <p> To view the status of available policy types in the organization, use <a>DescribeOrganization</a>.</p>"
+      "documentation":"<p>Disables an organizational policy type in a root. A policy of a certain type can be attached to entities in a root only if that type is enabled in the root. After you perform this operation, you no longer can attach policies of the specified type to that root or to any organizational unit (OU) or account in that root. You can undo this by using the <a>EnablePolicyType</a> operation.</p> <p>This is an asynchronous request that Amazon Web Services performs in the background. If you disable a policy type for a root, it still appears enabled for the organization if <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">all features</a> are enabled for the organization. Amazon Web Services recommends that you first use <a>ListRoots</a> to see the status of policy types for a specified root, and then use this operation.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p> <p> To view the status of available policy types in the organization, use <a>ListRoots</a>.</p>"
     },
     "EnableAWSServiceAccess":{
       "name":"EnableAWSServiceAccess",
@@ -554,7 +554,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Provides an Amazon Web Services service (the service that is specified by <code>ServicePrincipal</code>) with permissions to view the structure of an organization, create a <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html\">service-linked role</a> in all the accounts in the organization, and allow the service to perform operations on behalf of the organization and its accounts. Establishing these permissions can be a first step in enabling the integration of an Amazon Web Services service with Organizations.</p> <important> <p>We recommend that you enable integration between Organizations and the specified Amazon Web Services service by using the console or commands that are provided by the specified service. Doing so ensures that the service is aware that it can create the resources that are required for the integration. How the service creates those resources in the organization's accounts depends on that service. For more information, see the documentation for the other Amazon Web Services service.</p> </important> <p>For more information about enabling services to integrate with Organizations, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Organizations User Guide</i>.</p> <p>You can only call this operation from the organization's management account and only if the organization has <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html\">enabled all features</a>.</p>"
+      "documentation":"<p>Provides an Amazon Web Services service (the service that is specified by <code>ServicePrincipal</code>) with permissions to view the structure of an organization, create a <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html\">service-linked role</a> in all the accounts in the organization, and allow the service to perform operations on behalf of the organization and its accounts. Establishing these permissions can be a first step in enabling the integration of an Amazon Web Services service with Organizations.</p> <important> <p>We recommend that you enable integration between Organizations and the specified Amazon Web Services service by using the console or commands that are provided by the specified service. Doing so ensures that the service is aware that it can create the resources that are required for the integration. How the service creates those resources in the organization's accounts depends on that service. For more information, see the documentation for the other Amazon Web Services service.</p> </important> <p>For more information about enabling services to integrate with Organizations, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Organizations User Guide</i>.</p> <p>This operation can be called only from the organization's management account.</p>"
     },
     "EnableAllFeatures":{
       "name":"EnableAllFeatures",
@@ -598,7 +598,7 @@
         {"shape":"UnsupportedAPIEndpointException"},
         {"shape":"PolicyChangesInProgressException"}
       ],
-      "documentation":"<p>Enables a policy type in a root. After you enable a policy type in a root, you can attach policies of that type to the root, any organizational unit (OU), or account in that root. You can undo this by using the <a>DisablePolicyType</a> operation.</p> <p>This is an asynchronous request that Amazon Web Services performs in the background. Amazon Web Services recommends that you first use <a>ListRoots</a> to see the status of policy types for a specified root, and then use this operation.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p> <p>You can enable a policy type in a root only if that policy type is available in the organization. To view the status of available policy types in the organization, use <a>DescribeOrganization</a>.</p>"
+      "documentation":"<p>Enables a policy type in a root. After you enable a policy type in a root, you can attach policies of that type to the root, any organizational unit (OU), or account in that root. You can undo this by using the <a>DisablePolicyType</a> operation.</p> <p>This is an asynchronous request that Amazon Web Services performs in the background. Amazon Web Services recommends that you first use <a>ListRoots</a> to see the status of policy types for a specified root, and then use this operation.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p> <p>You can enable a policy type in a root only if that policy type is available in the organization. To view the status of available policy types in the organization, use <a>ListRoots</a>.</p>"
     },
     "InviteAccountToOrganization":{
       "name":"InviteAccountToOrganization",
@@ -621,7 +621,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Sends an invitation to another account to join your organization as a member account. Organizations sends email on your behalf to the email address that is associated with the other account's owner. The invitation is implemented as a <a>Handshake</a> whose details are in the response.</p> <important> <ul> <li> <p>You can invite Amazon Web Services accounts only from the same seller as the management account. For example, if your organization's management account was created by Amazon Internet Services Pvt. Ltd (AISPL), an Amazon Web Services seller in India, you can invite only other AISPL accounts to your organization. You can't combine accounts from AISPL and Amazon Web Services or from any other Amazon Web Services seller. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/useconsolidatedbilling-India.html\">Consolidated billing in India</a>.</p> </li> <li> <p>If you receive an exception that indicates that you exceeded your account limits for the organization or that the operation failed because your organization is still initializing, wait one hour and then try again. If the error persists after an hour, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </li> </ul> </important> <p>If the request includes tags, then the requester must have the <code>organizations:TagResource</code> permission.</p> <p>This operation can be called only from the organization's management account.</p>"
+      "documentation":"<p>Sends an invitation to another account to join your organization as a member account. Organizations sends email on your behalf to the email address that is associated with the other account's owner. The invitation is implemented as a <a>Handshake</a> whose details are in the response.</p> <important> <p>If you receive an exception that indicates that you exceeded your account limits for the organization or that the operation failed because your organization is still initializing, wait one hour and then try again. If the error persists after an hour, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </important> <p>If the request includes tags, then the requester must have the <code>organizations:TagResource</code> permission.</p> <p>This operation can be called only from the organization's management account.</p>"
     },
     "LeaveOrganization":{
       "name":"LeaveOrganization",
@@ -640,7 +640,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Removes a member account from its parent organization. This version of the operation is performed by the account that wants to leave. To remove a member account as a user in the management account, use <a>RemoveAccountFromOrganization</a> instead.</p> <p>This operation can be called only from a member account in the organization.</p> <important> <ul> <li> <p>The management account in an organization with all features enabled can set service control policies (SCPs) that can restrict what administrators of member accounts can do. This includes preventing them from successfully calling <code>LeaveOrganization</code> and leaving the organization.</p> </li> <li> <p>You can leave an organization as a member account only if the account is configured with the information required to operate as a standalone account. When you create an account in an organization using the Organizations console, API, or CLI commands, the information required of standalone accounts is <i>not</i> automatically collected. For each account that you want to make standalone, you must perform the following steps. If any of the steps are already completed for this account, that step doesn't appear.</p> <ul> <li> <p>Choose a support plan</p> </li> <li> <p>Provide and verify the required contact information</p> </li> <li> <p>Provide a current payment method</p> </li> </ul> <p>Amazon Web Services uses the payment method to charge for any billable (not free tier) Amazon Web Services activity that occurs while the account isn't attached to an organization. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>The account that you want to leave must not be a delegated administrator account for any Amazon Web Services service enabled for your organization. If the account is a delegated administrator, you must first change the delegated administrator account to another account that is remaining in the organization.</p> </li> <li> <p>You can leave an organization only after you enable IAM user access to billing in your account. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/grantaccess.html#ControllingAccessWebsite-Activate\">About IAM access to the Billing and Cost Management console</a> in the <i>Amazon Web Services Billing and Cost Management User Guide</i>.</p> </li> <li> <p>After the account leaves the organization, all tags that were attached to the account object in the organization are deleted. Amazon Web Services accounts outside of an organization do not support tags.</p> </li> <li> <p>A newly created account has a waiting period before it can be removed from its organization. You must wait until at least seven days after the account was created. Invited accounts aren't subject to this waiting period.</p> </li> <li> <p>If you are using an organization principal to call <code>LeaveOrganization</code> across multiple accounts, you can only do this up to 5 accounts per second in a single organization.</p> </li> </ul> </important>"
+      "documentation":"<p>Removes a member account from its parent organization. This version of the operation is performed by the account that wants to leave. To remove a member account as a user in the management account, use <a>RemoveAccountFromOrganization</a> instead.</p> <p>This operation can be called only from a member account in the organization.</p> <important> <ul> <li> <p>The management account in an organization with all features enabled can set service control policies (SCPs) that can restrict what administrators of member accounts can do. This includes preventing them from successfully calling <code>LeaveOrganization</code> and leaving the organization.</p> </li> <li> <p>You can leave an organization as a member account only if the account is configured with the information required to operate as a standalone account. When you create an account in an organization using the Organizations console, API, or CLI commands, the information required of standalone accounts is <i>not</i> automatically collected. For each account that you want to make standalone, you must perform the following steps. If any of the steps are already completed for this account, that step doesn't appear.</p> <ul> <li> <p>Choose a support plan</p> </li> <li> <p>Provide and verify the required contact information</p> </li> <li> <p>Provide a current payment method</p> </li> </ul> <p>Amazon Web Services uses the payment method to charge for any billable (not free tier) Amazon Web Services activity that occurs while the account isn't attached to an organization. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>The account that you want to leave must not be a delegated administrator account for any Amazon Web Services service enabled for your organization. If the account is a delegated administrator, you must first change the delegated administrator account to another account that is remaining in the organization.</p> </li> <li> <p>After the account leaves the organization, all tags that were attached to the account object in the organization are deleted. Amazon Web Services accounts outside of an organization do not support tags.</p> </li> <li> <p>A newly created account has a waiting period before it can be removed from its organization. You must wait until at least four days after the account was created. Invited accounts aren't subject to this waiting period.</p> </li> <li> <p>If you are using an organization principal to call <code>LeaveOrganization</code> across multiple accounts, you can only do this up to 5 accounts per second in a single organization.</p> </li> </ul> </important>"
     },
     "ListAWSServiceAccessForOrganization":{
       "name":"ListAWSServiceAccessForOrganization",
@@ -659,7 +659,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Returns a list of the Amazon Web Services services that you enabled to integrate with your organization. After a service on this list creates the resources that it requires for the integration, it can perform operations on your organization and its accounts.</p> <p>For more information about integrating other services with Organizations, including the list of services that currently work with Organizations, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Organizations User Guide</i>.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Returns a list of the Amazon Web Services services that you enabled to integrate with your organization. After a service on this list creates the resources that it requires for the integration, it can perform operations on your organization and its accounts.</p> <p>For more information about integrating other services with Organizations, including the list of services that currently work with Organizations, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html\">Using Organizations with other Amazon Web Services services</a> in the <i>Organizations User Guide</i>.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListAccounts":{
       "name":"ListAccounts",
@@ -676,7 +676,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists all the accounts in the organization. To request only the accounts in a specified root or organizational unit (OU), use the <a>ListAccountsForParent</a> operation instead.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists all the accounts in the organization. To request only the accounts in a specified root or organizational unit (OU), use the <a>ListAccountsForParent</a> operation instead.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListAccountsForParent":{
       "name":"ListAccountsForParent",
@@ -694,7 +694,27 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the accounts in an organization that are contained by the specified target root or organizational unit (OU). If you specify the root, you get a list of all the accounts that aren't in any OU. If you specify an OU, you get a list of all the accounts in only that OU and not in any child OUs. To get a list of all accounts in the organization, use the <a>ListAccounts</a> operation.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the accounts in an organization that are contained by the specified target root or organizational unit (OU). If you specify the root, you get a list of all the accounts that aren't in any OU. If you specify an OU, you get a list of all the accounts in only that OU and not in any child OUs. To get a list of all accounts in the organization, use the <a>ListAccounts</a> operation.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
+    },
+    "ListAccountsWithInvalidEffectivePolicy":{
+      "name":"ListAccountsWithInvalidEffectivePolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListAccountsWithInvalidEffectivePolicyRequest"},
+      "output":{"shape":"ListAccountsWithInvalidEffectivePolicyResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"AWSOrganizationsNotInUseException"},
+        {"shape":"ConstraintViolationException"},
+        {"shape":"EffectivePolicyNotFoundException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"UnsupportedAPIEndpointException"}
+      ],
+      "documentation":"<p>Lists all the accounts in an organization that have invalid effective policies. An <i>invalid effective policy</i> is an <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_effective.html\">effective policy</a> that fails validation checks, resulting in the effective policy not being fully enforced on all the intended accounts within an organization.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListChildren":{
       "name":"ListChildren",
@@ -712,7 +732,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists all of the organizational units (OUs) or accounts that are contained in the specified parent OU or root. This operation, along with <a>ListParents</a> enables you to traverse the tree structure that makes up this root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists all of the organizational units (OUs) or accounts that are contained in the specified parent OU or root. This operation, along with <a>ListParents</a> enables you to traverse the tree structure that makes up this root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListCreateAccountStatus":{
       "name":"ListCreateAccountStatus",
@@ -730,7 +750,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Lists the account creation requests that match the specified status that is currently being tracked for the organization.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the account creation requests that match the specified status that is currently being tracked for the organization.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListDelegatedAdministrators":{
       "name":"ListDelegatedAdministrators",
@@ -749,7 +769,7 @@
         {"shape":"ServiceException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Lists the Amazon Web Services accounts that are designated as delegated administrators in this organization.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the Amazon Web Services accounts that are designated as delegated administrators in this organization.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListDelegatedServicesForAccount":{
       "name":"ListDelegatedServicesForAccount",
@@ -770,7 +790,28 @@
         {"shape":"ServiceException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>List the Amazon Web Services services for which the specified account is a delegated administrator.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>List the Amazon Web Services services for which the specified account is a delegated administrator.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
+    },
+    "ListEffectivePolicyValidationErrors":{
+      "name":"ListEffectivePolicyValidationErrors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListEffectivePolicyValidationErrorsRequest"},
+      "output":{"shape":"ListEffectivePolicyValidationErrorsResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"AWSOrganizationsNotInUseException"},
+        {"shape":"ConstraintViolationException"},
+        {"shape":"EffectivePolicyNotFoundException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"AccountNotFoundException"},
+        {"shape":"InvalidInputException"},
+        {"shape":"UnsupportedAPIEndpointException"}
+      ],
+      "documentation":"<p>Lists all the validation errors on an <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_effective.html\">effective policy</a> for a specified account and policy type.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListHandshakesForAccount":{
       "name":"ListHandshakesForAccount",
@@ -805,7 +846,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the handshakes that are associated with the organization that the requesting user is part of. The <code>ListHandshakesForOrganization</code> operation returns a list of handshake structures. Each structure contains details and status about a handshake.</p> <p>Handshakes that are <code>ACCEPTED</code>, <code>DECLINED</code>, <code>CANCELED</code>, or <code>EXPIRED</code> appear in the results of this API for only 30 days after changing to that state. After that, they're deleted and no longer accessible.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the handshakes that are associated with the organization that the requesting user is part of. The <code>ListHandshakesForOrganization</code> operation returns a list of handshake structures. Each structure contains details and status about a handshake.</p> <p>Handshakes that are <code>ACCEPTED</code>, <code>DECLINED</code>, <code>CANCELED</code>, or <code>EXPIRED</code> appear in the results of this API for only 30 days after changing to that state. After that, they're deleted and no longer accessible.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListOrganizationalUnitsForParent":{
       "name":"ListOrganizationalUnitsForParent",
@@ -823,7 +864,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the organizational units (OUs) in a parent organizational unit or root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the organizational units (OUs) in a parent organizational unit or root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListParents":{
       "name":"ListParents",
@@ -841,7 +882,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the root or organizational units (OUs) that serve as the immediate parent of the specified child OU or account. This operation, along with <a>ListChildren</a> enables you to traverse the tree structure that makes up this root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p> <note> <p>In the current release, a child can have only a single parent.</p> </note>"
+      "documentation":"<p>Lists the root or organizational units (OUs) that serve as the immediate parent of the specified child OU or account. This operation, along with <a>ListChildren</a> enables you to traverse the tree structure that makes up this root.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p> <note> <p>In the current release, a child can have only a single parent.</p> </note>"
     },
     "ListPolicies":{
       "name":"ListPolicies",
@@ -859,7 +900,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Retrieves the list of all policies in an organization of a specified type.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Retrieves the list of all policies in an organization of a specified type.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListPoliciesForTarget":{
       "name":"ListPoliciesForTarget",
@@ -878,7 +919,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Lists the policies that are directly attached to the specified target root, organizational unit (OU), or account. You must specify the policy type that you want included in the returned list.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists the policies that are directly attached to the specified target root, organizational unit (OU), or account. You must specify the policy type that you want included in the returned list.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListRoots":{
       "name":"ListRoots",
@@ -895,7 +936,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the roots that are defined in the current organization.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p> <note> <p>Policy types can be enabled and disabled in roots. This is distinct from whether they're available in the organization. When you enable all features, you make policy types available for use in that organization. Individual policy types can then be enabled and disabled in a root. To see the availability of a policy type in an organization, use <a>DescribeOrganization</a>.</p> </note>"
+      "documentation":"<p>Lists the roots that are defined in the current organization.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p> <note> <p>Policy types can be enabled and disabled in roots. This is distinct from whether they're available in the organization. When you enable all features, you make policy types available for use in that organization. Individual policy types can then be enabled and disabled in a root. To see the availability of a policy type in an organization, use <a>DescribeOrganization</a>.</p> </note>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -913,7 +954,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists tags that are attached to the specified resource.</p> <p>You can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists tags that are attached to the specified resource.</p> <p>You can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "ListTargetsForPolicy":{
       "name":"ListTargetsForPolicy",
@@ -932,7 +973,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"UnsupportedAPIEndpointException"}
       ],
-      "documentation":"<p>Lists all the roots, organizational units (OUs), and accounts that the specified policy is attached to.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Lists all the roots, organizational units (OUs), and accounts that the specified policy is attached to.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a <code>List*</code> operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "MoveAccount":{
       "name":"MoveAccount",
@@ -973,7 +1014,7 @@
         {"shape":"ConstraintViolationException"},
         {"shape":"AWSOrganizationsNotInUseException"}
       ],
-      "documentation":"<p>Creates or updates a resource policy.</p> <p>You can only call this operation from the organization's management account.</p>"
+      "documentation":"<p>Creates or updates a resource policy.</p> <p>This operation can be called only from the organization's management account..</p>"
     },
     "RegisterDelegatedAdministrator":{
       "name":"RegisterDelegatedAdministrator",
@@ -1033,7 +1074,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Adds one or more tags to the specified resource.</p> <p>Currently, you can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Adds one or more tags to the specified resource.</p> <p>Currently, you can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -1052,7 +1093,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Removes any tags with the specified keys from the specified resource.</p> <p>You can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Removes any tags with the specified keys from the specified resource.</p> <p>You can attach tags to the following resources in Organizations.</p> <ul> <li> <p>Amazon Web Services account</p> </li> <li> <p>Organization root</p> </li> <li> <p>Organizational unit (OU)</p> </li> <li> <p>Policy (any type)</p> </li> </ul> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     },
     "UpdateOrganizationalUnit":{
       "name":"UpdateOrganizationalUnit",
@@ -1096,7 +1137,7 @@
         {"shape":"UnsupportedAPIEndpointException"},
         {"shape":"PolicyChangesInProgressException"}
       ],
-      "documentation":"<p>Updates an existing policy with a new name, description, or content. If you don't supply any parameter, that value remains unchanged. You can't change a policy's type.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator for an Amazon Web Services service.</p>"
+      "documentation":"<p>Updates an existing policy with a new name, description, or content. If you don't supply any parameter, that value remains unchanged. You can't change a policy's type.</p> <p>This operation can be called only from the organization's management account or by a member account that is a delegated administrator.</p>"
     }
   },
   "shapes":{
@@ -1169,7 +1210,11 @@
         },
         "Status":{
           "shape":"AccountStatus",
-          "documentation":"<p>The status of the account in the organization.</p>"
+          "documentation":"<p>The status of the account in the organization.</p> <important> <p>The <code>Status</code> parameter in the <code>Account</code> object will be retired on September 9, 2026. Although both the account <code>State</code> and account <code>Status</code> parameters are currently available in the Organizations APIs (<code>DescribeAccount</code>, <code>ListAccounts</code>, <code>ListAccountsForParent</code>), we recommend that you update your scripts or other code to use the <code>State</code> parameter instead of <code>Status</code> before September 9, 2026.</p> </important>"
+        },
+        "State":{
+          "shape":"AccountState",
+          "documentation":"<p>Each state represents a specific phase in the account lifecycle. Use this information to manage account access, automate workflows, or trigger actions based on account state changes.</p> <p>For more information about account states and their implications, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_account_state.html\">Monitor the state of your Amazon Web Services accounts </a> in the <i>Organizations User Guide</i>.</p>"
         },
         "JoinedMethod":{
           "shape":"AccountJoinedMethod",
@@ -1245,6 +1290,16 @@
       "documentation":"<p>You can't invite an existing account to your organization until you verify that you own the email address associated with the management account. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_create.html#about-email-verification\">Email address verification</a> in the <i>Organizations User Guide</i>.</p>",
       "exception":true
     },
+    "AccountState":{
+      "type":"string",
+      "enum":[
+        "PENDING_ACTIVATION",
+        "ACTIVE",
+        "SUSPENDED",
+        "PENDING_CLOSURE",
+        "CLOSED"
+      ]
+    },
     "AccountStatus":{
       "type":"string",
       "enum":[
@@ -1381,7 +1436,7 @@
         "Message":{"shape":"ExceptionMessage"},
         "Reason":{"shape":"ConstraintViolationExceptionReason"}
       },
-      "documentation":"<p>Performing this operation violates a minimum or maximum value limit. For example, attempting to remove the last service control policy (SCP) from an OU or root, inviting or creating too many accounts to the organization, or attaching too many policies to an account, OU, or root. This exception includes a reason that contains additional information about the violated limit:</p> <note> <p>Some of the reasons in the following list might not be applicable to this specific API or operation.</p> </note> <ul> <li> <p>ACCOUNT_CANNOT_LEAVE_ORGANIZATION: You attempted to remove the management account from the organization. You can't remove the management account. Instead, after you remove all member accounts, delete the organization itself.</p> </li> <li> <p>ACCOUNT_CANNOT_LEAVE_WITHOUT_PHONE_VERIFICATION: You attempted to remove an account from the organization that doesn't yet have enough information to exist as a standalone account. This account requires you to first complete phone verification. Follow the steps at <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_remove.html#orgs_manage_accounts_remove-from-master\">Removing a member account from your organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>ACCOUNT_CREATION_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of accounts that you can create in one day.</p> </li> <li> <p>ACCOUNT_CREATION_NOT_COMPLETE: Your account setup isn't complete or your account isn't fully active. You must complete the account setup before you create an organization.</p> </li> <li> <p>ACCOUNT_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the limit on the number of accounts in an organization. If you need more accounts, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a> to request an increase in your limit. </p> <p>Or the number of invitations that you tried to send would cause you to exceed the limit of accounts in your organization. Send fewer invitations or contact Amazon Web Services Support to request an increase in the number of accounts.</p> <note> <p>Deleted and closed accounts still count toward your limit.</p> </note> <important> <p>If you get this exception when running a command immediately after creating the organization, wait one hour and try again. After an hour, if the command continues to fail with this error, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </important> </li> <li> <p>ALL_FEATURES_MIGRATION_ORGANIZATION_SIZE_LIMIT_EXCEEDED: Your organization has more than 5000 accounts, and you can only use the standard migration process for organizations with less than 5000 accounts. Use the assisted migration process to enable all features mode, or create a support case for assistance if you are unable to use assisted migration.</p> </li> <li> <p>CANNOT_REGISTER_SUSPENDED_ACCOUNT_AS_DELEGATED_ADMINISTRATOR: You cannot register a suspended account as a delegated administrator.</p> </li> <li> <p>CANNOT_REGISTER_MASTER_AS_DELEGATED_ADMINISTRATOR: You attempted to register the management account of the organization as a delegated administrator for an Amazon Web Services service integrated with Organizations. You can designate only a member account as a delegated administrator.</p> </li> <li> <p>CANNOT_CLOSE_MANAGEMENT_ACCOUNT: You attempted to close the management account. To close the management account for the organization, you must first either remove or close all member accounts in the organization. Follow standard account closure process using root credentials.​ </p> </li> <li> <p>CANNOT_REMOVE_DELEGATED_ADMINISTRATOR_FROM_ORG: You attempted to remove an account that is registered as a delegated administrator for a service integrated with your organization. To complete this operation, you must first deregister this account as a delegated administrator. </p> </li> <li> <p>CLOSE_ACCOUNT_QUOTA_EXCEEDED: You have exceeded close account quota for the past 30 days. </p> </li> <li> <p>CLOSE_ACCOUNT_REQUESTS_LIMIT_EXCEEDED: You attempted to exceed the number of accounts that you can close at a time. ​ </p> </li> <li> <p>CREATE_ORGANIZATION_IN_BILLING_MODE_UNSUPPORTED_REGION: To create an organization in the specified region, you must enable all features mode.</p> </li> <li> <p>DELEGATED_ADMINISTRATOR_EXISTS_FOR_THIS_SERVICE: You attempted to register an Amazon Web Services account as a delegated administrator for an Amazon Web Services service that already has a delegated administrator. To complete this operation, you must first deregister any existing delegated administrators for this service.</p> </li> <li> <p>EMAIL_VERIFICATION_CODE_EXPIRED: The email verification code is only valid for a limited period of time. You must resubmit the request and generate a new verfication code.</p> </li> <li> <p>HANDSHAKE_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of handshakes that you can send in one day.</p> </li> <li> <p>INVALID_PAYMENT_INSTRUMENT: You cannot remove an account because no supported payment method is associated with the account. Amazon Web Services does not support cards issued by financial institutions in Russia or Belarus. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-general.html\">Managing your Amazon Web Services payments</a>.</p> </li> <li> <p>MASTER_ACCOUNT_ADDRESS_DOES_NOT_MATCH_MARKETPLACE: To create an account in this organization, you first must migrate the organization's management account to the marketplace that corresponds to the management account's address. All accounts in an organization must be associated with the same marketplace.</p> </li> <li> <p>MASTER_ACCOUNT_MISSING_BUSINESS_LICENSE: Applies only to the Amazon Web Services Regions in China. To create an organization, the master must have a valid business license. For more information, contact customer support.</p> </li> <li> <p>MASTER_ACCOUNT_MISSING_CONTACT_INFO: To complete this operation, you must first provide a valid contact address and phone number for the management account. Then try the operation again.</p> </li> <li> <p>MASTER_ACCOUNT_NOT_GOVCLOUD_ENABLED: To complete this operation, the management account must have an associated account in the Amazon Web Services GovCloud (US-West) Region. For more information, see <a href=\"https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-organizations.html\">Organizations</a> in the <i>Amazon Web Services GovCloud User Guide</i>.</p> </li> <li> <p>MASTER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED: To create an organization with this management account, you first must associate a valid payment instrument, such as a credit card, with the account. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>MAX_DELEGATED_ADMINISTRATORS_FOR_SERVICE_LIMIT_EXCEEDED: You attempted to register more delegated administrators than allowed for the service principal. </p> </li> <li> <p>MAX_POLICY_TYPE_ATTACHMENT_LIMIT_EXCEEDED: You attempted to exceed the number of policies of a certain type that can be attached to an entity at one time.</p> </li> <li> <p>MAX_TAG_LIMIT_EXCEEDED: You have exceeded the number of tags allowed on this resource. </p> </li> <li> <p>MEMBER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED: To complete this operation with this member account, you first must associate a valid payment instrument, such as a credit card, with the account. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>MIN_POLICY_TYPE_ATTACHMENT_LIMIT_EXCEEDED: You attempted to detach a policy from an entity that would cause the entity to have fewer than the minimum number of policies of a certain type required.</p> </li> <li> <p>ORGANIZATION_NOT_IN_ALL_FEATURES_MODE: You attempted to perform an operation that requires the organization to be configured to support all features. An organization that supports only consolidated billing features can't perform this operation.</p> </li> <li> <p>OU_DEPTH_LIMIT_EXCEEDED: You attempted to create an OU tree that is too many levels deep.</p> </li> <li> <p>OU_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the number of OUs that you can have in an organization.</p> </li> <li> <p>POLICY_CONTENT_LIMIT_EXCEEDED: You attempted to create a policy that is larger than the maximum size.</p> </li> <li> <p>POLICY_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the number of policies that you can have in an organization.</p> </li> <li> <p>SERVICE_ACCESS_NOT_ENABLED: You attempted to register a delegated administrator before you enabled service access. Call the <code>EnableAWSServiceAccess</code> API first.</p> </li> <li> <p>TAG_POLICY_VIOLATION: You attempted to create or update a resource with tags that are not compliant with the tag policy requirements for this account.</p> </li> <li> <p>WAIT_PERIOD_ACTIVE: After you create an Amazon Web Services account, you must wait until at least seven days after the account was created. Invited accounts aren't subject to this waiting period.</p> </li> </ul>",
+      "documentation":"<p>Performing this operation violates a minimum or maximum value limit. For example, attempting to remove the last service control policy (SCP) from an OU or root, inviting or creating too many accounts to the organization, or attaching too many policies to an account, OU, or root. This exception includes a reason that contains additional information about the violated limit:</p> <note> <p>Some of the reasons in the following list might not be applicable to this specific API or operation.</p> </note> <ul> <li> <p>ACCOUNT_CANNOT_LEAVE_ORGANIZATION: You attempted to remove the management account from the organization. You can't remove the management account. Instead, after you remove all member accounts, delete the organization itself.</p> </li> <li> <p>ACCOUNT_CANNOT_LEAVE_WITHOUT_PHONE_VERIFICATION: You attempted to remove an account from the organization that doesn't yet have enough information to exist as a standalone account. This account requires you to first complete phone verification. Follow the steps at <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_remove.html#orgs_manage_accounts_remove-from-master\">Removing a member account from your organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>ACCOUNT_CREATION_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of accounts that you can create in one day.</p> </li> <li> <p>ACCOUNT_CREATION_NOT_COMPLETE: Your account setup isn't complete or your account isn't fully active. You must complete the account setup before you create an organization.</p> </li> <li> <p>ACCOUNT_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the limit on the number of accounts in an organization. If you need more accounts, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a> to request an increase in your limit. </p> <p>Or the number of invitations that you tried to send would cause you to exceed the limit of accounts in your organization. Send fewer invitations or contact Amazon Web Services Support to request an increase in the number of accounts.</p> <note> <p>Deleted and closed accounts still count toward your limit.</p> </note> <important> <p>If you get this exception when running a command immediately after creating the organization, wait one hour and try again. After an hour, if the command continues to fail with this error, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </important> </li> <li> <p>ALL_FEATURES_MIGRATION_ORGANIZATION_SIZE_LIMIT_EXCEEDED: Your organization has more than 5000 accounts, and you can only use the standard migration process for organizations with less than 5000 accounts. Use the assisted migration process to enable all features mode, or create a support case for assistance if you are unable to use assisted migration.</p> </li> <li> <p>CANNOT_REGISTER_SUSPENDED_ACCOUNT_AS_DELEGATED_ADMINISTRATOR: You cannot register a suspended account as a delegated administrator.</p> </li> <li> <p>CANNOT_REGISTER_MASTER_AS_DELEGATED_ADMINISTRATOR: You attempted to register the management account of the organization as a delegated administrator for an Amazon Web Services service integrated with Organizations. You can designate only a member account as a delegated administrator.</p> </li> <li> <p>CANNOT_CLOSE_MANAGEMENT_ACCOUNT: You attempted to close the management account. To close the management account for the organization, you must first either remove or close all member accounts in the organization. Follow standard account closure process using root credentials.​ </p> </li> <li> <p>CANNOT_REMOVE_DELEGATED_ADMINISTRATOR_FROM_ORG: You attempted to remove an account that is registered as a delegated administrator for a service integrated with your organization. To complete this operation, you must first deregister this account as a delegated administrator. </p> </li> <li> <p>CLOSE_ACCOUNT_QUOTA_EXCEEDED: You have exceeded close account quota for the past 30 days. </p> </li> <li> <p>CLOSE_ACCOUNT_REQUESTS_LIMIT_EXCEEDED: You attempted to exceed the number of accounts that you can close at a time. ​ </p> </li> <li> <p>CREATE_ORGANIZATION_IN_BILLING_MODE_UNSUPPORTED_REGION: To create an organization in the specified region, you must enable all features mode.</p> </li> <li> <p>DELEGATED_ADMINISTRATOR_EXISTS_FOR_THIS_SERVICE: You attempted to register an Amazon Web Services account as a delegated administrator for an Amazon Web Services service that already has a delegated administrator. To complete this operation, you must first deregister any existing delegated administrators for this service.</p> </li> <li> <p>EMAIL_VERIFICATION_CODE_EXPIRED: The email verification code is only valid for a limited period of time. You must resubmit the request and generate a new verfication code.</p> </li> <li> <p>HANDSHAKE_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of handshakes that you can send in one day.</p> </li> <li> <p>INVALID_PAYMENT_INSTRUMENT: You cannot remove an account because no supported payment method is associated with the account. Amazon Web Services does not support cards issued by financial institutions in Russia or Belarus. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-general.html\">Managing your Amazon Web Services payments</a>.</p> </li> <li> <p>MASTER_ACCOUNT_ADDRESS_DOES_NOT_MATCH_MARKETPLACE: To create an account in this organization, you first must migrate the organization's management account to the marketplace that corresponds to the management account's address. All accounts in an organization must be associated with the same marketplace.</p> </li> <li> <p>MASTER_ACCOUNT_MISSING_BUSINESS_LICENSE: Applies only to the Amazon Web Services Regions in China. To create an organization, the master must have a valid business license. For more information, contact customer support.</p> </li> <li> <p>MASTER_ACCOUNT_MISSING_CONTACT_INFO: To complete this operation, you must first provide a valid contact address and phone number for the management account. Then try the operation again.</p> </li> <li> <p>MASTER_ACCOUNT_NOT_GOVCLOUD_ENABLED: To complete this operation, the management account must have an associated account in the Amazon Web Services GovCloud (US-West) Region. For more information, see <a href=\"https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-organizations.html\">Organizations</a> in the <i>Amazon Web Services GovCloud User Guide</i>.</p> </li> <li> <p>MASTER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED: To create an organization with this management account, you first must associate a valid payment instrument, such as a credit card, with the account. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>MAX_DELEGATED_ADMINISTRATORS_FOR_SERVICE_LIMIT_EXCEEDED: You attempted to register more delegated administrators than allowed for the service principal. </p> </li> <li> <p>MAX_POLICY_TYPE_ATTACHMENT_LIMIT_EXCEEDED: You attempted to exceed the number of policies of a certain type that can be attached to an entity at one time.</p> </li> <li> <p>MAX_TAG_LIMIT_EXCEEDED: You have exceeded the number of tags allowed on this resource. </p> </li> <li> <p>MEMBER_ACCOUNT_PAYMENT_INSTRUMENT_REQUIRED: To complete this operation with this member account, you first must associate a valid payment instrument, such as a credit card, with the account. For more information, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_account-before-remove.html\">Considerations before removing an account from an organization</a> in the <i>Organizations User Guide</i>.</p> </li> <li> <p>MIN_POLICY_TYPE_ATTACHMENT_LIMIT_EXCEEDED: You attempted to detach a policy from an entity that would cause the entity to have fewer than the minimum number of policies of a certain type required.</p> </li> <li> <p>ORGANIZATION_NOT_IN_ALL_FEATURES_MODE: You attempted to perform an operation that requires the organization to be configured to support all features. An organization that supports only consolidated billing features can't perform this operation.</p> </li> <li> <p>OU_DEPTH_LIMIT_EXCEEDED: You attempted to create an OU tree that is too many levels deep.</p> </li> <li> <p>OU_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the number of OUs that you can have in an organization.</p> </li> <li> <p>POLICY_CONTENT_LIMIT_EXCEEDED: You attempted to create a policy that is larger than the maximum size.</p> </li> <li> <p>POLICY_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the number of policies that you can have in an organization.</p> </li> <li> <p>POLICY_TYPE_ENABLED_FOR_THIS_SERVICE: You attempted to disable service access before you disabled the policy type (for example, SECURITYHUB_POLICY). To complete this operation, you must first disable the policy type.</p> </li> <li> <p>SERVICE_ACCESS_NOT_ENABLED:</p> <ul> <li> <p>You attempted to register a delegated administrator before you enabled service access. Call the <code>EnableAWSServiceAccess</code> API first.</p> </li> <li> <p>You attempted to enable a policy type before you enabled service access. Call the <code>EnableAWSServiceAccess</code> API first.</p> </li> </ul> </li> <li> <p>TAG_POLICY_VIOLATION: You attempted to create or update a resource with tags that are not compliant with the tag policy requirements for this account.</p> </li> <li> <p>WAIT_PERIOD_ACTIVE: After you create an Amazon Web Services account, you must wait until at least four days after the account was created. Invited accounts aren't subject to this waiting period.</p> </li> </ul>",
       "exception":true
     },
     "ConstraintViolationExceptionReason":{
@@ -1414,6 +1469,7 @@
         "CANNOT_REGISTER_MASTER_AS_DELEGATED_ADMINISTRATOR",
         "CANNOT_REMOVE_DELEGATED_ADMINISTRATOR_FROM_ORG",
         "DELEGATED_ADMINISTRATOR_EXISTS_FOR_THIS_SERVICE",
+        "POLICY_TYPE_ENABLED_FOR_THIS_SERVICE",
         "MASTER_ACCOUNT_MISSING_BUSINESS_LICENSE",
         "CANNOT_CLOSE_MANAGEMENT_ACCOUNT",
         "CLOSE_ACCOUNT_QUOTA_EXCEEDED",
@@ -1663,7 +1719,7 @@
         },
         "Type":{
           "shape":"PolicyType",
-          "documentation":"<p>The type of policy to create. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>The type of policy to create. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         },
         "Tags":{
           "shape":"Tags",
@@ -1722,6 +1778,10 @@
           "shape":"AccountStatus",
           "documentation":"<p>The status of the delegated administrator's account in the organization.</p>"
         },
+        "State":{
+          "shape":"AccountState",
+          "documentation":"<p>Each state represents a specific phase in the account lifecycle. Use this information to manage account access, automate workflows, or trigger actions based on account state changes.</p> <p>For more information about account states and their implications, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_account_state.html\">Monitor the state of your Amazon Web Services accounts </a> in the <i>Organizations User Guide</i>.</p>"
+        },
         "JoinedMethod":{
           "shape":"AccountJoinedMethod",
           "documentation":"<p>The method by which the delegated administrator's account joined the organization.</p>"
@@ -1811,7 +1871,7 @@
       "members":{
         "Account":{
           "shape":"Account",
-          "documentation":"<p>A structure that contains information about the requested account.</p>"
+          "documentation":"<p>A structure that contains information about the requested account.</p> <important> <p>The <code>Status</code> parameter in the API response will be retired on September 9, 2026. Although both the account <code>State</code> and account <code>Status</code> parameters are currently available in the Organizations APIs (<code>DescribeAccount</code>, <code>ListAccounts</code>, <code>ListAccountsForParent</code>), we recommend that you update your scripts or other code to use the <code>State</code> parameter instead of <code>Status</code> before September 9, 2026.</p> </important>"
         }
       }
     },
@@ -1840,7 +1900,7 @@
       "members":{
         "PolicyType":{
           "shape":"EffectivePolicyType",
-          "documentation":"<p>The type of policy that you want information about. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>The type of policy that you want information about. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         },
         "TargetId":{
           "shape":"PolicyTargetId",
@@ -1980,7 +2040,7 @@
         },
         "PolicyType":{
           "shape":"PolicyType",
-          "documentation":"<p>The policy type that you want to disable in this root. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>The policy type that you want to disable in this root. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         }
       }
     },
@@ -2070,9 +2130,36 @@
         "BACKUP_POLICY",
         "AISERVICES_OPT_OUT_POLICY",
         "CHATBOT_POLICY",
-        "DECLARATIVE_POLICY_EC2"
+        "DECLARATIVE_POLICY_EC2",
+        "SECURITYHUB_POLICY"
       ]
     },
+    "EffectivePolicyValidationError":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>The error code for the validation error. For example, <code>ELEMENTS_TOO_MANY</code>.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"ErrorMessage",
+          "documentation":"<p>The error message for the validation error.</p>"
+        },
+        "PathToError":{
+          "shape":"PathToError",
+          "documentation":"<p>The path within the effective policy where the validation error occurred.</p>"
+        },
+        "ContributingPolicies":{
+          "shape":"PolicyIds",
+          "documentation":"<p>The individual policies <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_inheritance_mgmt.html\">inherited</a> and <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_policies_attach.html\">attached</a> to the account which contributed to the validation error.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the validation errors that occurred when generating or enforcing an <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_effective.html\">effective policy</a>, such as which policies contributed to the error and location of the error.</p>"
+    },
+    "EffectivePolicyValidationErrors":{
+      "type":"list",
+      "member":{"shape":"EffectivePolicyValidationError"}
+    },
     "Email":{
       "type":"string",
       "max":64,
@@ -2092,8 +2179,7 @@
     },
     "EnableAllFeaturesRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableAllFeaturesResponse":{
       "type":"structure",
@@ -2117,7 +2203,7 @@
         },
         "PolicyType":{
           "shape":"PolicyType",
-          "documentation":"<p>The policy type that you want to enable. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>The policy type that you want to enable. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         }
       }
     },
@@ -2148,6 +2234,8 @@
       "type":"list",
       "member":{"shape":"EnabledServicePrincipal"}
     },
+    "ErrorCode":{"type":"string"},
+    "ErrorMessage":{"type":"string"},
     "ExceptionMessage":{"type":"string"},
     "ExceptionType":{"type":"string"},
     "FinalizingOrganizationException":{
@@ -2218,7 +2306,7 @@
         "Message":{"shape":"ExceptionMessage"},
         "Reason":{"shape":"HandshakeConstraintViolationExceptionReason"}
       },
-      "documentation":"<p>The requested operation would violate the constraint identified in the reason code.</p> <note> <p>Some of the reasons in the following list might not be applicable to this specific API or operation:</p> </note> <ul> <li> <p>ACCOUNT_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the limit on the number of accounts in an organization. Note that deleted and closed accounts still count toward your limit.</p> <important> <p>If you get this exception immediately after creating the organization, wait one hour and try again. If after an hour it continues to fail with this error, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </important> </li> <li> <p>ALREADY_IN_AN_ORGANIZATION: The handshake request is invalid because the invited account is already a member of an organization.</p> </li> <li> <p>HANDSHAKE_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of handshakes that you can send in one day.</p> </li> <li> <p>INVITE_DISABLED_DURING_ENABLE_ALL_FEATURES: You can't issue new invitations to join an organization while it's in the process of enabling all features. You can resume inviting accounts after you finalize the process when all accounts have agreed to the change.</p> </li> <li> <p>ORGANIZATION_ALREADY_HAS_ALL_FEATURES: The handshake request is invalid because the organization has already enabled all features.</p> </li> <li> <p>ORGANIZATION_IS_ALREADY_PENDING_ALL_FEATURES_MIGRATION: The handshake request is invalid because the organization has already started the process to enable all features.</p> </li> <li> <p>ORGANIZATION_FROM_DIFFERENT_SELLER_OF_RECORD: The request failed because the account is from a different marketplace than the accounts in the organization. For example, accounts with India addresses must be associated with the AISPL marketplace. All accounts in an organization must be from the same marketplace.</p> </li> <li> <p>ORGANIZATION_MEMBERSHIP_CHANGE_RATE_LIMIT_EXCEEDED: You attempted to change the membership of an account too quickly after its previous change.</p> </li> <li> <p>PAYMENT_INSTRUMENT_REQUIRED: You can't complete the operation with an account that doesn't have a payment instrument, such as a credit card, associated with it.</p> </li> </ul>",
+      "documentation":"<p>The requested operation would violate the constraint identified in the reason code.</p> <note> <p>Some of the reasons in the following list might not be applicable to this specific API or operation:</p> </note> <ul> <li> <p>ACCOUNT_NUMBER_LIMIT_EXCEEDED: You attempted to exceed the limit on the number of accounts in an organization. Note that deleted and closed accounts still count toward your limit.</p> <important> <p>If you get this exception immediately after creating the organization, wait one hour and try again. If after an hour it continues to fail with this error, contact <a href=\"https://console.aws.amazon.com/support/home#/\">Amazon Web Services Support</a>.</p> </important> </li> <li> <p>ALREADY_IN_AN_ORGANIZATION: The handshake request is invalid because the invited account is already a member of an organization.</p> </li> <li> <p>HANDSHAKE_RATE_LIMIT_EXCEEDED: You attempted to exceed the number of handshakes that you can send in one day.</p> </li> <li> <p>INVITE_DISABLED_DURING_ENABLE_ALL_FEATURES: You can't issue new invitations to join an organization while it's in the process of enabling all features. You can resume inviting accounts after you finalize the process when all accounts have agreed to the change.</p> </li> <li> <p>ORGANIZATION_ALREADY_HAS_ALL_FEATURES: The handshake request is invalid because the organization has already enabled all features.</p> </li> <li> <p>ORGANIZATION_IS_ALREADY_PENDING_ALL_FEATURES_MIGRATION: The handshake request is invalid because the organization has already started the process to enable all features.</p> </li> <li> <p>ORGANIZATION_FROM_DIFFERENT_SELLER_OF_RECORD: The request failed because the account is from a different marketplace than the accounts in the organization.</p> </li> <li> <p>ORGANIZATION_MEMBERSHIP_CHANGE_RATE_LIMIT_EXCEEDED: You attempted to change the membership of an account too quickly after its previous change.</p> </li> <li> <p>PAYMENT_INSTRUMENT_REQUIRED: You can't complete the operation with an account that doesn't have a payment instrument, such as a credit card, associated with it.</p> </li> </ul>",
       "exception":true
     },
     "HandshakeConstraintViolationExceptionReason":{
@@ -2495,7 +2583,7 @@
       "members":{
         "Accounts":{
           "shape":"Accounts",
-          "documentation":"<p>A list of the accounts in the specified root or OU.</p>"
+          "documentation":"<p>A list of the accounts in the specified root or OU.</p> <important> <p>The <code>Status</code> parameter in the API response will be retired on September 9, 2026. Although both the account <code>State</code> and account <code>Status</code> parameters are currently available in the Organizations APIs (<code>DescribeAccount</code>, <code>ListAccounts</code>, <code>ListAccountsForParent</code>), we recommend that you update your scripts or other code to use the <code>State</code> parameter instead of <code>Status</code> before September 9, 2026.</p> </important>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2521,7 +2609,42 @@
       "members":{
         "Accounts":{
           "shape":"Accounts",
-          "documentation":"<p>A list of objects in the organization.</p>"
+          "documentation":"<p>A list of objects in the organization.</p> <important> <p>The <code>Status</code> parameter in the API response will be retired on September 9, 2026. Although both the account <code>State</code> and account <code>Status</code> parameters are currently available in the Organizations APIs (<code>DescribeAccount</code>, <code>ListAccounts</code>, <code>ListAccountsForParent</code>), we recommend that you update your scripts or other code to use the <code>State</code> parameter instead of <code>Status</code> before September 9, 2026.</p> </important>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>.</p>"
+        }
+      }
+    },
+    "ListAccountsWithInvalidEffectivePolicyRequest":{
+      "type":"structure",
+      "required":["PolicyType"],
+      "members":{
+        "PolicyType":{
+          "shape":"EffectivePolicyType",
+          "documentation":"<p>The type of policy that you want information about. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The total number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value that is specific to the operation. If additional items exist beyond the maximum you specify, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results. Note that Organizations might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
+        }
+      }
+    },
+    "ListAccountsWithInvalidEffectivePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "Accounts":{
+          "shape":"Accounts",
+          "documentation":"<p>The accounts in the organization which have an invalid effective policy for the specified policy type.</p>"
+        },
+        "PolicyType":{
+          "shape":"EffectivePolicyType",
+          "documentation":"<p>The specified policy type. One of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2658,6 +2781,60 @@
         }
       }
     },
+    "ListEffectivePolicyValidationErrorsRequest":{
+      "type":"structure",
+      "required":[
+        "AccountId",
+        "PolicyType"
+      ],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the account that you want details about. Specifying an organization root or organizational unit (OU) as the target is not supported.</p>"
+        },
+        "PolicyType":{
+          "shape":"EffectivePolicyType",
+          "documentation":"<p>The type of policy that you want information about. You can specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The total number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value that is specific to the operation. If additional items exist beyond the maximum you specify, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results. Note that Organizations might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
+        }
+      }
+    },
+    "ListEffectivePolicyValidationErrorsResponse":{
+      "type":"structure",
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the specified account.</p>"
+        },
+        "PolicyType":{
+          "shape":"EffectivePolicyType",
+          "documentation":"<p>The specified policy type. One of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
+        },
+        "Path":{
+          "shape":"Path",
+          "documentation":"<p>The path in the organization where the specified account exists.</p>"
+        },
+        "EvaluationTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the latest effective policy was generated for the specified account.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>.</p>"
+        },
+        "EffectivePolicyValidationErrors":{
+          "shape":"EffectivePolicyValidationErrors",
+          "documentation":"<p>The <code>EffectivePolicyValidationError</code> object contains details about the validation errors that occurred when generating or enforcing an effective policy, such as which policies contributed to the error and location of the error.</p>"
+        }
+      }
+    },
     "ListHandshakesForAccountRequest":{
       "type":"structure",
       "members":{
@@ -2793,7 +2970,7 @@
         },
         "Filter":{
           "shape":"PolicyType",
-          "documentation":"<p>The type of policy that you want to include in the returned list. You must specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>The type of policy that you want to include in the returned list. You must specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -2824,7 +3001,7 @@
       "members":{
         "Filter":{
           "shape":"PolicyType",
-          "documentation":"<p>Specifies the type of policy that you want to include in the response. You must specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> </ul>"
+          "documentation":"<p>Specifies the type of policy that you want to include in the response. You must specify one of the following values:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scp.html\">SERVICE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html\">RESOURCE_CONTROL_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html\">DECLARATIVE_POLICY_EC2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_backup.html\">BACKUP_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html\">TAG_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_chatbot.html\">CHATBOT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html\">AISERVICES_OPT_OUT_POLICY</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_security_hub.html\">SECURITYHUB_POLICY</a> </p> </li> </ul>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -3130,6 +3307,11 @@
       "type":"list",
       "member":{"shape":"Parent"}
     },
+    "Path":{
+      "type":"string",
+      "pattern":"^(o-[a-z0-9]{10,32}\\/r-[0-9a-z]{4,32}(\\/ou\\-[0-9a-z]{4,32}-[a-z0-9]{8,32})*(\\/\\d{12})*)\\/"
+    },
+    "PathToError":{"type":"string"},
     "Policies":{
       "type":"list",
       "member":{"shape":"PolicySummary"}
@@ -3175,6 +3357,10 @@
       "max":130,
       "pattern":"^p-[0-9a-zA-Z_]{8,128}$"
     },
+    "PolicyIds":{
+      "type":"list",
+      "member":{"shape":"PolicyId"}
+    },
     "PolicyInUseException":{
       "type":"structure",
       "members":{
@@ -3275,7 +3461,8 @@
         "BACKUP_POLICY",
         "AISERVICES_OPT_OUT_POLICY",
         "CHATBOT_POLICY",
-        "DECLARATIVE_POLICY_EC2"
+        "DECLARATIVE_POLICY_EC2",
+        "SECURITYHUB_POLICY"
       ]
     },
     "PolicyTypeAlreadyEnabledException":{
@@ -3676,5 +3863,5 @@
       }
     }
   },
-  "documentation":"<p>Organizations is a web service that enables you to consolidate your multiple Amazon Web Services accounts into an <i>organization</i> and centrally manage your accounts and their resources.</p> <p>This guide provides descriptions of the Organizations operations. For more information about using this service, see the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html\">Organizations User Guide</a>.</p> <p> <b>Support and feedback for Organizations</b> </p> <p>We welcome your feedback. Send your comments to <a href=\"mailto:feedback-awsorganizations@amazon.com\">feedback-awsorganizations@amazon.com</a> or post your feedback and questions in the <a href=\"http://forums.aws.amazon.com/forum.jspa?forumID=219\">Organizations support forum</a>. For more information about the Amazon Web Services support forums, see <a href=\"http://forums.aws.amazon.com/help.jspa\">Forums Help</a>.</p> <p> <b>Endpoint to call When using the CLI or the Amazon Web Services SDK</b> </p> <p>For the current release of Organizations, specify the <code>us-east-1</code> region for all Amazon Web Services API and CLI calls made from the commercial Amazon Web Services Regions outside of China. If calling from one of the Amazon Web Services Regions in China, then specify <code>cn-northwest-1</code>. You can do this in the CLI by using these parameters and commands:</p> <ul> <li> <p>Use the following parameter with each command to specify both the endpoint and its region:</p> <p> <code>--endpoint-url https://organizations.us-east-1.amazonaws.com</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>--endpoint-url https://organizations.cn-northwest-1.amazonaws.com.cn</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> <li> <p>Use the default endpoint, but configure your default region with this command:</p> <p> <code>aws configure set default.region us-east-1</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>aws configure set default.region cn-northwest-1</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> <li> <p>Use the following parameter with each command to specify the endpoint:</p> <p> <code>--region us-east-1</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>--region cn-northwest-1</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> </ul> <p> <b>Recording API Requests</b> </p> <p>Organizations supports CloudTrail, a service that records Amazon Web Services API calls for your Amazon Web Services account and delivers log files to an Amazon S3 bucket. By using information collected by CloudTrail, you can determine which requests the Organizations service received, who made the request and when, and so on. For more about Organizations and its support for CloudTrail, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_incident-response.html#orgs_cloudtrail-integration\">Logging Organizations API calls with CloudTrail</a> in the <i>Organizations User Guide</i>. To learn more about CloudTrail, including how to turn it on and find your log files, see the <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html\">CloudTrail User Guide</a>.</p>"
+  "documentation":"<p>Organizations is a web service that enables you to consolidate your multiple Amazon Web Services accounts into an <i>organization</i> and centrally manage your accounts and their resources.</p> <p>This guide provides descriptions of the Organizations operations. For more information about using this service, see the <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html\">Organizations User Guide</a>.</p> <p> <b>Support and feedback for Organizations</b> </p> <p>We welcome your feedback. You can post your feedback and questions in the <a href=\"https://forums.aws.amazon.com/forum.jspa?forumID=219\">Organizations support forum</a>. For more information about the Amazon Web Services Support forums, see <a href=\"https://forums.aws.amazon.com/help.jspa\">Forums Help</a>.</p> <p> <b>Endpoint to call When using the CLI or the Amazon Web Services SDK</b> </p> <p>For the current release of Organizations, specify the <code>us-east-1</code> region for all Amazon Web Services API and CLI calls made from the commercial Amazon Web Services Regions outside of China. If calling from one of the Amazon Web Services Regions in China, then specify <code>cn-northwest-1</code>. You can do this in the CLI by using these parameters and commands:</p> <ul> <li> <p>Use the following parameter with each command to specify both the endpoint and its region:</p> <p> <code>--endpoint-url https://organizations.us-east-1.amazonaws.com</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>--endpoint-url https://organizations.cn-northwest-1.amazonaws.com.cn</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> <li> <p>Use the default endpoint, but configure your default region with this command:</p> <p> <code>aws configure set default.region us-east-1</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>aws configure set default.region cn-northwest-1</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> <li> <p>Use the following parameter with each command to specify the endpoint:</p> <p> <code>--region us-east-1</code> <i>(from commercial Amazon Web Services Regions outside of China)</i> </p> <p>or</p> <p> <code>--region cn-northwest-1</code> <i>(from Amazon Web Services Regions in China)</i> </p> </li> </ul> <p> <b>Recording API Requests</b> </p> <p>Organizations supports CloudTrail, a service that records Amazon Web Services API calls for your Amazon Web Services account and delivers log files to an Amazon S3 bucket. By using information collected by CloudTrail, you can determine which requests the Organizations service received, who made the request and when, and so on. For more about Organizations and its support for CloudTrail, see <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_incident-response.html#orgs_cloudtrail-integration\">Logging Organizations API calls with CloudTrail</a> in the <i>Organizations User Guide</i>. To learn more about CloudTrail, including how to turn it on and find your log files, see the <a href=\"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html\">CloudTrail User Guide</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/osis/2022-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/osis/2022-01-01/paginators-1.json 2.31.35-1/awscli/botocore/data/osis/2022-01-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/osis/2022-01-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/osis/2022-01-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,16 @@
 {
-  "pagination": {}
+  "pagination": {
+    "ListPipelineEndpointConnections": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "PipelineEndpointConnections"
+    },
+    "ListPipelineEndpoints": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "PipelineEndpoints"
+    }
+  }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/osis/2022-01-01/service-2.json 2.31.35-1/awscli/botocore/data/osis/2022-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/osis/2022-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/osis/2022-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -31,6 +31,24 @@
       ],
       "documentation":"<p>Creates an OpenSearch Ingestion pipeline. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/creating-pipeline.html\">Creating Amazon OpenSearch Ingestion pipelines</a>.</p>"
     },
+    "CreatePipelineEndpoint":{
+      "name":"CreatePipelineEndpoint",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2022-01-01/osis/createPipelineEndpoint"
+      },
+      "input":{"shape":"CreatePipelineEndpointRequest"},
+      "output":{"shape":"CreatePipelineEndpointResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Creates a VPC endpoint for an OpenSearch Ingestion pipeline. Pipeline endpoints allow you to ingest data from your VPC into pipelines that you have access to.</p>"
+    },
     "DeletePipeline":{
       "name":"DeletePipeline",
       "http":{
@@ -49,6 +67,42 @@
       ],
       "documentation":"<p>Deletes an OpenSearch Ingestion pipeline. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/delete-pipeline.html\">Deleting Amazon OpenSearch Ingestion pipelines</a>.</p>"
     },
+    "DeletePipelineEndpoint":{
+      "name":"DeletePipelineEndpoint",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2022-01-01/osis/deletePipelineEndpoint/{EndpointId}"
+      },
+      "input":{"shape":"DeletePipelineEndpointRequest"},
+      "output":{"shape":"DeletePipelineEndpointResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a VPC endpoint for an OpenSearch Ingestion pipeline.</p>",
+      "idempotent":true
+    },
+    "DeleteResourcePolicy":{
+      "name":"DeleteResourcePolicy",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/2022-01-01/osis/resourcePolicy/{ResourceArn}"
+      },
+      "input":{"shape":"DeleteResourcePolicyRequest"},
+      "output":{"shape":"DeleteResourcePolicyResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a resource-based policy from an OpenSearch Ingestion resource.</p>",
+      "idempotent":true
+    },
     "GetPipeline":{
       "name":"GetPipeline",
       "http":{
@@ -100,6 +154,24 @@
       ],
       "documentation":"<p>Returns progress information for the current change happening on an OpenSearch Ingestion pipeline. Currently, this operation only returns information when a pipeline is being created.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/creating-pipeline.html#get-pipeline-progress\">Tracking the status of pipeline creation</a>.</p>"
     },
+    "GetResourcePolicy":{
+      "name":"GetResourcePolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2022-01-01/osis/resourcePolicy/{ResourceArn}"
+      },
+      "input":{"shape":"GetResourcePolicyRequest"},
+      "output":{"shape":"GetResourcePolicyResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the resource-based policy attached to an OpenSearch Ingestion resource.</p>"
+    },
     "ListPipelineBlueprints":{
       "name":"ListPipelineBlueprints",
       "http":{
@@ -117,6 +189,40 @@
       ],
       "documentation":"<p>Retrieves a list of all available blueprints for Data Prepper. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/creating-pipeline.html#pipeline-blueprint\">Using blueprints to create a pipeline</a>.</p>"
     },
+    "ListPipelineEndpointConnections":{
+      "name":"ListPipelineEndpointConnections",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2022-01-01/osis/listPipelineEndpointConnections"
+      },
+      "input":{"shape":"ListPipelineEndpointConnectionsRequest"},
+      "output":{"shape":"ListPipelineEndpointConnectionsResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists the pipeline endpoints connected to pipelines in your account.</p>"
+    },
+    "ListPipelineEndpoints":{
+      "name":"ListPipelineEndpoints",
+      "http":{
+        "method":"GET",
+        "requestUri":"/2022-01-01/osis/listPipelineEndpoints"
+      },
+      "input":{"shape":"ListPipelineEndpointsRequest"},
+      "output":{"shape":"ListPipelineEndpointsResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all pipeline endpoints in your account.</p>"
+    },
     "ListPipelines":{
       "name":"ListPipelines",
       "http":{
@@ -151,6 +257,43 @@
       ],
       "documentation":"<p>Lists all resource tags associated with an OpenSearch Ingestion pipeline. For more information, see <a href=\"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/tag-pipeline.html\">Tagging Amazon OpenSearch Ingestion pipelines</a>.</p>"
     },
+    "PutResourcePolicy":{
+      "name":"PutResourcePolicy",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/2022-01-01/osis/resourcePolicy/{ResourceArn}"
+      },
+      "input":{"shape":"PutResourcePolicyRequest"},
+      "output":{"shape":"PutResourcePolicyResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Attaches a resource-based policy to an OpenSearch Ingestion resource. Resource-based policies grant permissions to principals to perform actions on the resource.</p>",
+      "idempotent":true
+    },
+    "RevokePipelineEndpointConnections":{
+      "name":"RevokePipelineEndpointConnections",
+      "http":{
+        "method":"POST",
+        "requestUri":"/2022-01-01/osis/revokePipelineEndpointConnections"
+      },
+      "input":{"shape":"RevokePipelineEndpointConnectionsRequest"},
+      "output":{"shape":"RevokePipelineEndpointConnectionsResponse"},
+      "errors":[
+        {"shape":"DisabledOperationException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Revokes pipeline endpoints from specified endpoint IDs.</p>",
+      "idempotent":true
+    },
     "StartPipeline":{
       "name":"StartPipeline",
       "http":{
@@ -260,12 +403,17 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You don't have permissions to access the resource.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
     },
+    "AwsAccountId":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"^\\\\d{12}$"
+    },
     "BlueprintFormat":{
       "type":"string",
       "pattern":"(YAML|JSON)"
@@ -369,12 +517,49 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The client attempted to remove a resource that is currently in use.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
+    "CreatePipelineEndpointRequest":{
+      "type":"structure",
+      "required":[
+        "PipelineArn",
+        "VpcOptions"
+      ],
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline to create the endpoint for.</p>"
+        },
+        "VpcOptions":{
+          "shape":"PipelineEndpointVpcOptions",
+          "documentation":"<p>Container for the VPC configuration for the pipeline endpoint, including subnet IDs and security group IDs.</p>"
+        }
+      }
+    },
+    "CreatePipelineEndpointResponse":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline associated with the endpoint.</p>"
+        },
+        "EndpointId":{
+          "shape":"PipelineEndpointId",
+          "documentation":"<p>The unique identifier of the pipeline endpoint.</p>"
+        },
+        "Status":{
+          "shape":"PipelineEndpointStatus",
+          "documentation":"<p>The current status of the pipeline endpoint.</p>"
+        },
+        "VpcId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the VPC where the pipeline endpoint was created.</p>"
+        }
+      }
+    },
     "CreatePipelineRequest":{
       "type":"structure",
       "required":[
@@ -419,6 +604,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>List of tags to add to the pipeline upon creation.</p>"
+        },
+        "PipelineRoleArn":{
+          "shape":"PipelineRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants the pipeline permission to access Amazon Web Services resources.</p>"
         }
       }
     },
@@ -431,6 +620,22 @@
         }
       }
     },
+    "DeletePipelineEndpointRequest":{
+      "type":"structure",
+      "required":["EndpointId"],
+      "members":{
+        "EndpointId":{
+          "shape":"PipelineEndpointId",
+          "documentation":"<p>The unique identifier of the pipeline endpoint to delete.</p>",
+          "location":"uri",
+          "locationName":"EndpointId"
+        }
+      }
+    },
+    "DeletePipelineEndpointResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeletePipelineRequest":{
       "type":"structure",
       "required":["PipelineName"],
@@ -445,13 +650,27 @@
     },
     "DeletePipelineResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteResourcePolicyRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
       "members":{
+        "ResourceArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource from which to delete the policy.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
       }
     },
+    "DeleteResourcePolicyResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DisabledOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Exception is thrown when an operation has been disabled.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -540,6 +759,31 @@
         }
       }
     },
+    "GetResourcePolicyRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource for which to retrieve the policy.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        }
+      }
+    },
+    "GetResourcePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "ResourceArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "Policy":{
+          "shape":"ResourcePolicy",
+          "documentation":"<p>The resource-based policy document in JSON format.</p>"
+        }
+      }
+    },
     "IngestEndpointUrlsList":{
       "type":"list",
       "member":{"shape":"String"}
@@ -547,16 +791,14 @@
     "Integer":{"type":"integer"},
     "InternalException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request failed because of an unknown error, exception, or failure (the failure is internal to the service).</p>",
       "error":{"httpStatusCode":500},
       "exception":true
     },
     "InvalidPaginationTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid pagination token provided in the request.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -568,16 +810,14 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You attempted to create more than the allowed number of tags.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "ListPipelineBlueprintsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ListPipelineBlueprintsResponse":{
       "type":"structure",
@@ -588,6 +828,66 @@
         }
       }
     },
+    "ListPipelineEndpointConnectionsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of pipeline endpoint connections to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If your initial <code>ListPipelineEndpointConnections</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in subsequent <code>ListPipelineEndpointConnections</code> operations, which returns results in the next page.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListPipelineEndpointConnectionsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        },
+        "PipelineEndpointConnections":{
+          "shape":"PipelineEndpointConnectionsSummaryList",
+          "documentation":"<p>A list of pipeline endpoint connections.</p>"
+        }
+      }
+    },
+    "ListPipelineEndpointsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of pipeline endpoints to return in the response.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If your initial <code>ListPipelineEndpoints</code> operation returns a <code>NextToken</code>, you can include the returned <code>NextToken</code> in subsequent <code>ListPipelineEndpoints</code> operations, which returns results in the next page.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListPipelineEndpointsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>When <code>NextToken</code> is returned, there are more results available. The value of <code>NextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        },
+        "PipelineEndpoints":{
+          "shape":"PipelineEndpointsSummaryList",
+          "documentation":"<p>A list of pipeline endpoints.</p>"
+        }
+      }
+    },
     "ListPipelinesRequest":{
       "type":"structure",
       "members":{
@@ -738,6 +1038,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>A list of tags associated with the given pipeline.</p>"
+        },
+        "PipelineRoleArn":{
+          "shape":"PipelineRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that the pipeline uses to access AWS resources.</p>"
         }
       },
       "documentation":"<p>Information about an existing OpenSearch Ingestion pipeline.</p>"
@@ -831,12 +1135,113 @@
       "type":"list",
       "member":{"shape":"PipelineDestination"}
     },
+    "PipelineEndpoint":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline associated with this endpoint.</p>"
+        },
+        "EndpointId":{
+          "shape":"PipelineEndpointId",
+          "documentation":"<p>The unique identifier for the pipeline endpoint.</p>"
+        },
+        "Status":{
+          "shape":"PipelineEndpointStatus",
+          "documentation":"<p>The current status of the pipeline endpoint.</p>"
+        },
+        "VpcId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the VPC where the pipeline endpoint is created.</p>"
+        },
+        "VpcOptions":{
+          "shape":"PipelineEndpointVpcOptions",
+          "documentation":"<p>Configuration options for the VPC endpoint, including subnet and security group settings.</p>"
+        },
+        "IngestEndpointUrl":{
+          "shape":"String",
+          "documentation":"<p>The URL used to ingest data to the pipeline through the VPC endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Represents a VPC endpoint for an OpenSearch Ingestion pipeline, enabling private connectivity between your VPC and the pipeline.</p>"
+    },
+    "PipelineEndpointConnection":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline in the endpoint connection.</p>"
+        },
+        "EndpointId":{
+          "shape":"PipelineEndpointId",
+          "documentation":"<p>The unique identifier of the endpoint in the connection.</p>"
+        },
+        "Status":{
+          "shape":"PipelineEndpointStatus",
+          "documentation":"<p>The current status of the pipeline endpoint connection.</p>"
+        },
+        "VpcEndpointOwner":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the VPC endpoint used in this connection.</p>"
+        }
+      },
+      "documentation":"<p>Represents a connection to a pipeline endpoint, containing details about the endpoint association.</p>"
+    },
+    "PipelineEndpointConnectionsSummaryList":{
+      "type":"list",
+      "member":{"shape":"PipelineEndpointConnection"}
+    },
+    "PipelineEndpointId":{
+      "type":"string",
+      "max":512,
+      "min":3,
+      "pattern":"^[a-zA-Z0-9][a-zA-Z0-9-_]+$"
+    },
+    "PipelineEndpointIdsList":{
+      "type":"list",
+      "member":{"shape":"PipelineEndpointId"}
+    },
+    "PipelineEndpointStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "ACTIVE",
+        "CREATE_FAILED",
+        "DELETING",
+        "REVOKING",
+        "REVOKED"
+      ]
+    },
+    "PipelineEndpointVpcOptions":{
+      "type":"structure",
+      "members":{
+        "SubnetIds":{
+          "shape":"SubnetIds",
+          "documentation":"<p>A list of subnet IDs where the pipeline endpoint network interfaces are created.</p>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>A list of security group IDs that control network access to the pipeline endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for the VPC endpoint, specifying network access controls.</p>"
+    },
+    "PipelineEndpointsSummaryList":{
+      "type":"list",
+      "member":{"shape":"PipelineEndpoint"}
+    },
     "PipelineName":{
       "type":"string",
       "max":28,
       "min":3,
       "pattern":"[a-z][a-z0-9\\-]+"
     },
+    "PipelineRoleArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"^arn:(aws|aws\\-cn|aws\\-us\\-gov|aws\\-iso|aws\\-iso\\-b|aws\\-iso\\-e|aws\\-iso\\-f):iam::[0-9]+:role\\/.*$"
+    },
     "PipelineStatus":{
       "type":"string",
       "enum":[
@@ -913,22 +1318,83 @@
       "type":"integer",
       "min":1
     },
-    "ResourceAlreadyExistsException":{
+    "PutResourcePolicyRequest":{
       "type":"structure",
+      "required":[
+        "ResourceArn",
+        "Policy"
+      ],
       "members":{
-      },
+        "ResourceArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to attach the policy to.</p>",
+          "location":"uri",
+          "locationName":"ResourceArn"
+        },
+        "Policy":{
+          "shape":"ResourcePolicy",
+          "documentation":"<p>The resource-based policy document in JSON format.</p>"
+        }
+      }
+    },
+    "PutResourcePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "ResourceArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "Policy":{
+          "shape":"ResourcePolicy",
+          "documentation":"<p>The resource-based policy document that was attached to the resource.</p>"
+        }
+      }
+    },
+    "ResourceAlreadyExistsException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>You attempted to create a resource that already exists.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You attempted to access or delete a resource that does not exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
     },
+    "ResourcePolicy":{
+      "type":"string",
+      "max":204800,
+      "min":2
+    },
+    "RevokePipelineEndpointConnectionsRequest":{
+      "type":"structure",
+      "required":[
+        "PipelineArn",
+        "EndpointIds"
+      ],
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline from which to revoke endpoint connections.</p>"
+        },
+        "EndpointIds":{
+          "shape":"PipelineEndpointIdsList",
+          "documentation":"<p>A list of endpoint IDs for which to revoke access to the pipeline.</p>"
+        }
+      }
+    },
+    "RevokePipelineEndpointConnectionsResponse":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline from which endpoint connections were revoked.</p>"
+        }
+      }
+    },
     "SecurityGroupId":{
       "type":"string",
       "max":20,
@@ -1061,8 +1527,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1092,8 +1557,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePipelineRequest":{
       "type":"structure",
@@ -1128,6 +1592,10 @@
         "EncryptionAtRestOptions":{
           "shape":"EncryptionAtRestOptions",
           "documentation":"<p>Key-value pairs to configure encryption for data that is written to a persistent buffer.</p>"
+        },
+        "PipelineRoleArn":{
+          "shape":"PipelineRoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants the pipeline permission to access Amazon Web Services resources.</p>"
         }
       }
     },
@@ -1165,8 +1633,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An exception for missing or invalid input fields.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.json 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -59,6 +59,12 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "BlockingInstances"
+    },
+    "GetOutpostBillingInformation": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Subscriptions"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -7,6 +7,11 @@
           "OutpostArn",
           "OutpostId"
         ]
+      },
+      "GetOutpostBillingInformation": {
+        "non_aggregate_keys": [
+          "ContractEndDate"
+        ]
       }
     }
   }
diff -pruN 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/service-2.json 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/outposts/2019-12-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/outposts/2019-12-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -163,6 +163,7 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"NotFoundException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Gets information about the specified catalog item.</p>"
@@ -214,6 +215,21 @@
       ],
       "documentation":"<p>Gets information about the specified Outpost.</p>"
     },
+    "GetOutpostBillingInformation":{
+      "name":"GetOutpostBillingInformation",
+      "http":{
+        "method":"GET",
+        "requestUri":"/outpost/{OutpostIdentifier}/billing-information"
+      },
+      "input":{"shape":"GetOutpostBillingInformationInput"},
+      "output":{"shape":"GetOutpostBillingInformationOutput"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p>Gets current and historical billing information about the specified Outpost.</p>"
+    },
     "GetOutpostInstanceTypes":{
       "name":"GetOutpostInstanceTypes",
       "http":{
@@ -353,6 +369,7 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"NotFoundException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Lists the items in the catalog.</p> <p>Use filters to return specific results. If you specify multiple filters, the results include only the resources that match all of the specified filters. For a filter where you can specify multiple values, the results include items that match any of the values that you specify for the filter.</p>"
@@ -451,6 +468,23 @@
       ],
       "documentation":"<note> <p> Amazon Web Services uses this action to install Outpost servers.</p> </note> <p> Starts the connection required for Outpost server installation. </p> <p> Use CloudTrail to monitor this action or Amazon Web Services managed policy for Amazon Web Services Outposts to secure it. For more information, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/security-iam-awsmanpol.html\"> Amazon Web Services managed policies for Amazon Web Services Outposts</a> and <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/logging-using-cloudtrail.html\"> Logging Amazon Web Services Outposts API calls with Amazon Web Services CloudTrail</a> in the <i>Amazon Web Services Outposts User Guide</i>. </p>"
     },
+    "StartOutpostDecommission":{
+      "name":"StartOutpostDecommission",
+      "http":{
+        "method":"POST",
+        "requestUri":"/outposts/{OutpostId}/decommission"
+      },
+      "input":{"shape":"StartOutpostDecommissionInput"},
+      "output":{"shape":"StartOutpostDecommissionOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"NotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Starts the decommission process to return the Outposts racks or servers.</p>"
+    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -589,6 +623,8 @@
     "Address":{
       "type":"structure",
       "required":[
+        "ContactName",
+        "ContactPhoneNumber",
         "AddressLine1",
         "City",
         "StateOrRegion",
@@ -679,6 +715,12 @@
       "min":1,
       "pattern":"^(\\w+)$"
     },
+    "AssetIdInput":{
+      "type":"string",
+      "max":10,
+      "min":10,
+      "pattern":"\\d{10}"
+    },
     "AssetIdList":{
       "type":"list",
       "member":{"shape":"AssetId"}
@@ -688,7 +730,7 @@
       "members":{
         "AssetId":{
           "shape":"AssetId",
-          "documentation":"<p> The ID of the asset. </p>"
+          "documentation":"<p> The ID of the asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
         },
         "RackId":{
           "shape":"RackId",
@@ -722,7 +764,7 @@
         },
         "AssetId":{
           "shape":"AssetId",
-          "documentation":"<p>The ID of the asset.</p>"
+          "documentation":"<p>The ID of the asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
         },
         "AccountId":{"shape":"AccountId"},
         "AwsServiceName":{
@@ -829,6 +871,22 @@
       "type":"list",
       "member":{"shape":"BlockingInstance"}
     },
+    "BlockingResourceType":{
+      "type":"string",
+      "enum":[
+        "EC2_INSTANCE",
+        "OUTPOST_RAM_SHARE",
+        "LGW_ROUTING_DOMAIN",
+        "LGW_ROUTE_TABLE",
+        "LGW_VIRTUAL_INTERFACE_GROUP",
+        "OUTPOST_ORDER_CANCELLABLE",
+        "OUTPOST_ORDER_INTERVENTION_REQUIRED"
+      ]
+    },
+    "BlockingResourceTypeList":{
+      "type":"list",
+      "member":{"shape":"BlockingResourceType"}
+    },
     "CIDR":{
       "type":"string",
       "max":18,
@@ -862,8 +920,7 @@
     },
     "CancelCapacityTaskOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelOrderInput":{
       "type":"structure",
@@ -879,8 +936,7 @@
     },
     "CancelOrderOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CapacityTaskFailure":{
       "type":"structure",
@@ -952,6 +1008,10 @@
           "shape":"OrderId",
           "documentation":"<p>The ID of the Amazon Web Services Outposts order of the host associated with the capacity task.</p>"
         },
+        "AssetId":{
+          "shape":"AssetId",
+          "documentation":"<p>The ID of the asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
+        },
         "CapacityTaskStatus":{
           "shape":"CapacityTaskStatus",
           "documentation":"<p>The status of the capacity task.</p>"
@@ -1158,7 +1218,6 @@
       "type":"structure",
       "required":[
         "OutpostIdentifier",
-        "LineItems",
         "PaymentOption"
       ],
       "members":{
@@ -1254,6 +1313,14 @@
         "Site":{"shape":"Site"}
       }
     },
+    "DecommissionRequestStatus":{
+      "type":"string",
+      "enum":[
+        "SKIPPED",
+        "BLOCKED",
+        "REQUESTED"
+      ]
+    },
     "DeleteOutpostInput":{
       "type":"structure",
       "required":["OutpostId"],
@@ -1268,8 +1335,7 @@
     },
     "DeleteOutpostOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSiteInput":{
       "type":"structure",
@@ -1285,8 +1351,7 @@
     },
     "DeleteSiteOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeviceSerialNumber":{
       "type":"string",
@@ -1382,6 +1447,10 @@
           "shape":"OrderId",
           "documentation":"<p>ID of the Amazon Web Services Outposts order associated with the specified capacity task.</p>"
         },
+        "AssetId":{
+          "shape":"AssetId",
+          "documentation":"<p>The ID of the Outpost asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
+        },
         "RequestedInstancePools":{
           "shape":"RequestedInstancePools",
           "documentation":"<p>List of instance pools requested in the capacity task.</p>"
@@ -1396,7 +1465,7 @@
         },
         "CapacityTaskStatus":{
           "shape":"CapacityTaskStatus",
-          "documentation":"<p>Status of the capacity task.</p> <p>A capacity task can have one of the following statuses:</p> <ul> <li> <p> <code>REQUESTED</code> - The capacity task was created and is awaiting the next step by Amazon Web Services Outposts.</p> </li> <li> <p> <code>IN_PROGRESS</code> - The capacity task is running and cannot be cancelled.</p> </li> <li> <p> <code>WAITING_FOR_EVACUATION</code> - The capacity task requires capacity to run. You must stop the recommended EC2 running instances to free up capacity for the task to run.</p> </li> </ul>"
+          "documentation":"<p>Status of the capacity task.</p> <p>A capacity task can have one of the following statuses:</p> <ul> <li> <p> <code>REQUESTED</code> - The capacity task was created and is awaiting the next step by Amazon Web Services Outposts.</p> </li> <li> <p> <code>IN_PROGRESS</code> - The capacity task is running and cannot be cancelled.</p> </li> <li> <p> <code>FAILED</code> - The capacity task could not be completed.</p> </li> <li> <p> <code>COMPLETED</code> - The capacity task has completed successfully.</p> </li> <li> <p> <code>WAITING_FOR_EVACUATION</code> - The capacity task requires capacity to run. You must stop the recommended EC2 running instances to free up capacity for the task to run.</p> </li> <li> <p> <code>CANCELLATION_IN_PROGRESS</code> - The capacity task has been cancelled and is in the process of cleaning up resources.</p> </li> <li> <p> <code>CANCELLED</code> - The capacity task is cancelled.</p> </li> </ul>"
         },
         "Failed":{
           "shape":"CapacityTaskFailure",
@@ -1484,13 +1553,49 @@
         "Order":{"shape":"Order"}
       }
     },
+    "GetOutpostBillingInformationInput":{
+      "type":"structure",
+      "required":["OutpostIdentifier"],
+      "members":{
+        "NextToken":{
+          "shape":"Token",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults1000",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "OutpostIdentifier":{
+          "shape":"OutpostIdentifier",
+          "documentation":"<p>The ID or ARN of the Outpost.</p>",
+          "location":"uri",
+          "locationName":"OutpostIdentifier"
+        }
+      }
+    },
+    "GetOutpostBillingInformationOutput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{"shape":"Token"},
+        "Subscriptions":{
+          "shape":"SubscriptionList",
+          "documentation":"<p>The subscription details for the specified Outpost.</p>"
+        },
+        "ContractEndDate":{
+          "shape":"String",
+          "documentation":"<p>The date the current contract term ends for the specified Outpost. You must start the renewal or decommission process at least 5 business days before the current term for your Amazon Web Services Outposts ends. Failing to complete these steps at least 5 business days before the current term ends might result in unanticipated charges.</p>"
+        }
+      }
+    },
     "GetOutpostInput":{
       "type":"structure",
       "required":["OutpostId"],
       "members":{
         "OutpostId":{
           "shape":"OutpostId",
-          "documentation":"<p> The ID or ARN of the Outpost. </p>",
+          "documentation":"<p>The ID or ARN of the Outpost.</p>",
           "location":"uri",
           "locationName":"OutpostId"
         }
@@ -1552,6 +1657,12 @@
           "location":"querystring",
           "locationName":"OrderId"
         },
+        "AssetId":{
+          "shape":"AssetIdInput",
+          "documentation":"<p>The ID of the Outpost asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>",
+          "location":"querystring",
+          "locationName":"AssetId"
+        },
         "MaxResults":{
           "shape":"MaxResults1000",
           "location":"querystring",
@@ -1787,7 +1898,7 @@
       "members":{
         "AssetId":{
           "shape":"AssetId",
-          "documentation":"<p> The ID of the asset. </p>"
+          "documentation":"<p> The ID of the asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
         },
         "MacAddressList":{
           "shape":"MacAddressList",
@@ -2252,6 +2363,7 @@
       "error":{"httpStatusCode":404},
       "exception":true
     },
+    "NullableDouble":{"type":"double"},
     "OpticalStandard":{
       "type":"string",
       "enum":[
@@ -2318,6 +2430,10 @@
       "min":1,
       "pattern":"oo-[a-f0-9]{17}$"
     },
+    "OrderIdList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "OrderStatus":{
       "type":"string",
       "enum":[
@@ -2714,6 +2830,10 @@
           "shape":"OrderId",
           "documentation":"<p>The ID of the Amazon Web Services Outposts order associated with the specified capacity task.</p>"
         },
+        "AssetId":{
+          "shape":"AssetIdInput",
+          "documentation":"<p>The ID of the Outpost asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
+        },
         "InstancePools":{
           "shape":"RequestedInstancePools",
           "documentation":"<p>The instance pools specified in the capacity task.</p>"
@@ -2747,6 +2867,10 @@
           "shape":"OrderId",
           "documentation":"<p>ID of the Amazon Web Services Outposts order of the host associated with the capacity task.</p>"
         },
+        "AssetId":{
+          "shape":"AssetId",
+          "documentation":"<p>The ID of the asset. An Outpost asset can be a single server within an Outposts rack or an Outposts server configuration.</p>"
+        },
         "RequestedInstancePools":{
           "shape":"RequestedInstancePools",
           "documentation":"<p>List of the instance pools requested in the specified capacity task.</p>"
@@ -2799,7 +2923,7 @@
         },
         "AssetId":{
           "shape":"AssetId",
-          "documentation":"<p> The ID of the Outpost server. </p>"
+          "documentation":"<p> The ID of the Outpost server.</p>"
         },
         "ClientPublicKey":{
           "shape":"WireGuardPublicKey",
@@ -2824,6 +2948,35 @@
         }
       }
     },
+    "StartOutpostDecommissionInput":{
+      "type":"structure",
+      "required":["OutpostIdentifier"],
+      "members":{
+        "OutpostIdentifier":{
+          "shape":"OutpostIdentifier",
+          "documentation":"<p>The ID or ARN of the Outpost that you want to decommission.</p>",
+          "location":"uri",
+          "locationName":"OutpostId"
+        },
+        "ValidateOnly":{
+          "shape":"ValidateOnly",
+          "documentation":"<p>Validates the request without starting the decommission process.</p>"
+        }
+      }
+    },
+    "StartOutpostDecommissionOutput":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"DecommissionRequestStatus",
+          "documentation":"<p>The status of the decommission request.</p>"
+        },
+        "BlockingResourceTypes":{
+          "shape":"BlockingResourceTypeList",
+          "documentation":"<p>The resources still associated with the Outpost that you are decommissioning.</p>"
+        }
+      }
+    },
     "StateOrRegion":{
       "type":"string",
       "max":50,
@@ -2846,6 +2999,64 @@
       "min":1,
       "pattern":"^[\\S \\n]+$"
     },
+    "Subscription":{
+      "type":"structure",
+      "members":{
+        "SubscriptionId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the subscription that appears on the Amazon Web Services Billing Center console.</p>"
+        },
+        "SubscriptionType":{
+          "shape":"SubscriptionType",
+          "documentation":"<p>The type of subscription which can be one of the following:</p> <ul> <li> <p> <b>ORIGINAL</b> - The first order on the Amazon Web Services Outposts.</p> </li> <li> <p> <b>RENEWAL</b> - Renewal requests, both month to month and longer term.</p> </li> <li> <p> <b>CAPACITY_INCREASE</b> - Capacity scaling orders.</p> </li> </ul>"
+        },
+        "SubscriptionStatus":{
+          "shape":"SubscriptionStatus",
+          "documentation":"<p>The status of subscription which can be one of the following:</p> <ul> <li> <p> <b>INACTIVE</b> - Subscription requests that are inactive.</p> </li> <li> <p> <b>ACTIVE</b> - Subscription requests that are in progress and have an end date in the future.</p> </li> <li> <p> <b>CANCELLED</b> - Subscription requests that are cancelled.</p> </li> </ul>"
+        },
+        "OrderIds":{
+          "shape":"OrderIdList",
+          "documentation":"<p>The order ID for your subscription.</p>"
+        },
+        "BeginDate":{
+          "shape":"ISO8601Timestamp",
+          "documentation":"<p>The date your subscription starts.</p>"
+        },
+        "EndDate":{
+          "shape":"ISO8601Timestamp",
+          "documentation":"<p>The date your subscription ends.</p>"
+        },
+        "MonthlyRecurringPrice":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The amount you are billed each month in the subscription period.</p>"
+        },
+        "UpfrontPrice":{
+          "shape":"NullableDouble",
+          "documentation":"<p>The amount billed when the subscription is created. This is a one-time charge.</p>"
+        }
+      },
+      "documentation":"<p>Provides information about your Amazon Web Services Outposts subscriptions.</p>"
+    },
+    "SubscriptionList":{
+      "type":"list",
+      "member":{"shape":"Subscription"}
+    },
+    "SubscriptionStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "INACTIVE",
+        "CANCELLED"
+      ]
+    },
+    "SubscriptionType":{
+      "type":"string",
+      "enum":[
+        "ORIGINAL",
+        "RENEWAL",
+        "CAPACITY_INCREASE"
+      ]
+    },
     "SupportedHardwareType":{
       "type":"string",
       "enum":[
@@ -2909,8 +3120,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2966,8 +3176,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOutpostInput":{
       "type":"structure",
@@ -3136,6 +3345,7 @@
       "type":"integer",
       "box":true
     },
+    "ValidateOnly":{"type":"boolean"},
     "ValidationException":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/panorama/2019-07-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/partitions.json 2.31.35-1/awscli/botocore/data/partitions.json
--- 2.23.6-1/awscli/botocore/data/partitions.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/partitions.json	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,9 @@
       "ap-east-1" : {
         "description" : "Asia Pacific (Hong Kong)"
       },
+      "ap-east-2" : {
+        "description" : "Asia Pacific (Taipei)"
+      },
       "ap-northeast-1" : {
         "description" : "Asia Pacific (Tokyo)"
       },
@@ -47,11 +50,14 @@
       "ap-southeast-5" : {
         "description" : "Asia Pacific (Malaysia)"
       },
+      "ap-southeast-6" : {
+        "description" : "Asia Pacific (New Zealand)"
+      },
       "ap-southeast-7" : {
         "description" : "Asia Pacific (Thailand)"
       },
       "aws-global" : {
-        "description" : "AWS Standard global region"
+        "description" : "aws global region"
       },
       "ca-central-1" : {
         "description" : "Canada (Central)"
@@ -124,7 +130,7 @@
     "regionRegex" : "^cn\\-\\w+\\-\\d+$",
     "regions" : {
       "aws-cn-global" : {
-        "description" : "AWS China global region"
+        "description" : "aws-cn global region"
       },
       "cn-north-1" : {
         "description" : "China (Beijing)"
@@ -134,41 +140,35 @@
       }
     }
   }, {
-    "id" : "aws-us-gov",
+    "id" : "aws-eusc",
     "outputs" : {
-      "dnsSuffix" : "amazonaws.com",
-      "dualStackDnsSuffix" : "api.aws",
-      "implicitGlobalRegion" : "us-gov-west-1",
-      "name" : "aws-us-gov",
+      "dnsSuffix" : "amazonaws.eu",
+      "dualStackDnsSuffix" : "api.amazonwebservices.eu",
+      "implicitGlobalRegion" : "eusc-de-east-1",
+      "name" : "aws-eusc",
       "supportsDualStack" : true,
       "supportsFIPS" : true
     },
-    "regionRegex" : "^us\\-gov\\-\\w+\\-\\d+$",
+    "regionRegex" : "^eusc\\-(de)\\-\\w+\\-\\d+$",
     "regions" : {
-      "aws-us-gov-global" : {
-        "description" : "AWS GovCloud (US) global region"
-      },
-      "us-gov-east-1" : {
-        "description" : "AWS GovCloud (US-East)"
-      },
-      "us-gov-west-1" : {
-        "description" : "AWS GovCloud (US-West)"
+      "eusc-de-east-1" : {
+        "description" : "EU (Germany)"
       }
     }
   }, {
     "id" : "aws-iso",
     "outputs" : {
       "dnsSuffix" : "c2s.ic.gov",
-      "dualStackDnsSuffix" : "c2s.ic.gov",
+      "dualStackDnsSuffix" : "api.aws.ic.gov",
       "implicitGlobalRegion" : "us-iso-east-1",
       "name" : "aws-iso",
-      "supportsDualStack" : false,
+      "supportsDualStack" : true,
       "supportsFIPS" : true
     },
     "regionRegex" : "^us\\-iso\\-\\w+\\-\\d+$",
     "regions" : {
       "aws-iso-global" : {
-        "description" : "AWS ISO (US) global region"
+        "description" : "aws-iso global region"
       },
       "us-iso-east-1" : {
         "description" : "US ISO East"
@@ -181,33 +181,39 @@
     "id" : "aws-iso-b",
     "outputs" : {
       "dnsSuffix" : "sc2s.sgov.gov",
-      "dualStackDnsSuffix" : "sc2s.sgov.gov",
+      "dualStackDnsSuffix" : "api.aws.scloud",
       "implicitGlobalRegion" : "us-isob-east-1",
       "name" : "aws-iso-b",
-      "supportsDualStack" : false,
+      "supportsDualStack" : true,
       "supportsFIPS" : true
     },
     "regionRegex" : "^us\\-isob\\-\\w+\\-\\d+$",
     "regions" : {
       "aws-iso-b-global" : {
-        "description" : "AWS ISOB (US) global region"
+        "description" : "aws-iso-b global region"
       },
       "us-isob-east-1" : {
         "description" : "US ISOB East (Ohio)"
+      },
+      "us-isob-west-1" : {
+        "description" : "US ISOB West"
       }
     }
   }, {
     "id" : "aws-iso-e",
     "outputs" : {
       "dnsSuffix" : "cloud.adc-e.uk",
-      "dualStackDnsSuffix" : "cloud.adc-e.uk",
+      "dualStackDnsSuffix" : "api.cloud-aws.adc-e.uk",
       "implicitGlobalRegion" : "eu-isoe-west-1",
       "name" : "aws-iso-e",
-      "supportsDualStack" : false,
+      "supportsDualStack" : true,
       "supportsFIPS" : true
     },
     "regionRegex" : "^eu\\-isoe\\-\\w+\\-\\d+$",
     "regions" : {
+      "aws-iso-e-global" : {
+        "description" : "aws-iso-e global region"
+      },
       "eu-isoe-west-1" : {
         "description" : "EU ISOE West"
       }
@@ -216,14 +222,46 @@
     "id" : "aws-iso-f",
     "outputs" : {
       "dnsSuffix" : "csp.hci.ic.gov",
-      "dualStackDnsSuffix" : "csp.hci.ic.gov",
+      "dualStackDnsSuffix" : "api.aws.hci.ic.gov",
       "implicitGlobalRegion" : "us-isof-south-1",
       "name" : "aws-iso-f",
-      "supportsDualStack" : false,
+      "supportsDualStack" : true,
       "supportsFIPS" : true
     },
     "regionRegex" : "^us\\-isof\\-\\w+\\-\\d+$",
-    "regions" : { }
+    "regions" : {
+      "aws-iso-f-global" : {
+        "description" : "aws-iso-f global region"
+      },
+      "us-isof-east-1" : {
+        "description" : "US ISOF EAST"
+      },
+      "us-isof-south-1" : {
+        "description" : "US ISOF SOUTH"
+      }
+    }
+  }, {
+    "id" : "aws-us-gov",
+    "outputs" : {
+      "dnsSuffix" : "amazonaws.com",
+      "dualStackDnsSuffix" : "api.aws",
+      "implicitGlobalRegion" : "us-gov-west-1",
+      "name" : "aws-us-gov",
+      "supportsDualStack" : true,
+      "supportsFIPS" : true
+    },
+    "regionRegex" : "^us\\-gov\\-\\w+\\-\\d+$",
+    "regions" : {
+      "aws-us-gov-global" : {
+        "description" : "aws-us-gov global region"
+      },
+      "us-gov-east-1" : {
+        "description" : "AWS GovCloud (US-East)"
+      },
+      "us-gov-west-1" : {
+        "description" : "AWS GovCloud (US-West)"
+      }
+    }
   } ],
   "version" : "1.1"
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/service-2.json 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-07-26",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"partnercentral-selling",
     "jsonVersion":"1.0",
     "protocol":"json",
@@ -11,8 +12,7 @@
     "signatureVersion":"v4",
     "signingName":"partnercentral-selling",
     "targetPrefix":"AWSPartnerCentralSelling",
-    "uid":"partnercentral-selling-2022-07-26",
-    "auth":["aws.auth#sigv4"]
+    "uid":"partnercentral-selling-2022-07-26"
   },
   "operations":{
     "AcceptEngagementInvitation":{
@@ -23,8 +23,8 @@
       },
       "input":{"shape":"AcceptEngagementInvitationRequest"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -73,8 +73,8 @@
       "input":{"shape":"CreateEngagementRequest"},
       "output":{"shape":"CreateEngagementResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -92,8 +92,8 @@
       "input":{"shape":"CreateEngagementInvitationRequest"},
       "output":{"shape":"CreateEngagementInvitationResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -111,8 +111,8 @@
       "input":{"shape":"CreateOpportunityRequest"},
       "output":{"shape":"CreateOpportunityResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -130,8 +130,8 @@
       "input":{"shape":"CreateResourceSnapshotRequest"},
       "output":{"shape":"CreateResourceSnapshotResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -149,8 +149,8 @@
       "input":{"shape":"CreateResourceSnapshotJobRequest"},
       "output":{"shape":"CreateResourceSnapshotJobResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
@@ -167,8 +167,8 @@
       },
       "input":{"shape":"DeleteResourceSnapshotJobRequest"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
@@ -419,7 +419,7 @@
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>This request accepts a list of filters that retrieve opportunity subsets as well as sort options. This feature is available to partners from <a href=\"https://partnercentral.awspartner.com/\">Partner Central</a> using the <code>ListOpportunities</code> API action.</p> <p>To synchronize your system with Amazon Web Services, only list the opportunities that were newly created or updated. We recommend you rely on events emitted by the service into your Amazon Web Services account’s Amazon EventBridge default event bus, you can also use the <code>ListOpportunities</code> action.</p> <p>We recommend the following approach:</p> <ol> <li> <p>Find the latest <code>LastModifiedDate</code> that you stored, and only use the values that came from Amazon Web Services. Don’t use values generated by your system.</p> </li> <li> <p>When you send a <code>ListOpportunities</code> request, submit the date in ISO 8601 format in the <code>AfterLastModifiedDate</code> filter.</p> </li> <li> <p>Amazon Web Services only returns opportunities created or updated on or after that date and time. Use <code>NextToken</code> to iterate over all pages.</p> </li> </ol>"
+      "documentation":"<p>This request accepts a list of filters that retrieve opportunity subsets as well as sort options. This feature is available to partners from <a href=\"https://partnercentral.awspartner.com/\">Partner Central</a> using the <code>ListOpportunities</code> API action.</p> <p>To synchronize your system with Amazon Web Services, list only the opportunities that were newly created or updated. We recommend you rely on events emitted by the service into your Amazon Web Services account’s Amazon EventBridge default event bus. You can also use the <code>ListOpportunities</code> action.</p> <p>We recommend the following approach:</p> <ol> <li> <p>Find the latest <code>LastModifiedDate</code> that you stored, and only use the values that came from Amazon Web Services. Don’t use values generated by your system.</p> </li> <li> <p>When you send a <code>ListOpportunities</code> request, submit the date in ISO 8601 format in the <code>AfterLastModifiedDate</code> filter.</p> </li> <li> <p>Amazon Web Services only returns opportunities created or updated on or after that date and time. Use <code>NextToken</code> to iterate over all pages.</p> </li> </ol>"
     },
     "ListResourceSnapshotJobs":{
       "name":"ListResourceSnapshotJobs",
@@ -511,8 +511,8 @@
       },
       "input":{"shape":"RejectEngagementInvitationRequest"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -529,8 +529,8 @@
       "input":{"shape":"StartEngagementByAcceptingInvitationTaskRequest"},
       "output":{"shape":"StartEngagementByAcceptingInvitationTaskResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -548,15 +548,15 @@
       "input":{"shape":"StartEngagementFromOpportunityTaskRequest"},
       "output":{"shape":"StartEngagementFromOpportunityTaskResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>This action initiates the engagement process from an existing opportunity by accepting the engagement invitation and creating a corresponding opportunity in the partner’s system. Similar to <code>StartEngagementByAcceptingInvitationTask</code>, this action is asynchronous and performs multiple steps before completion.</p>"
+      "documentation":"<p>Similar to <code>StartEngagementByAcceptingInvitationTask</code>, this action is asynchronous and performs multiple steps before completion. This action orchestrates a comprehensive workflow that combines multiple API operations into a single task to create and initiate an engagement from an existing opportunity. It automatically executes a sequence of operations including <code>GetOpportunity</code>, <code>CreateEngagement</code> (if it doesn't exist), <code>CreateResourceSnapshot</code>, <code>CreateResourceSnapshotJob</code>, <code>CreateEngagementInvitation</code> (if not already invited/accepted), and <code>SubmitOpportunity</code>. </p>"
     },
     "StartResourceSnapshotJob":{
       "name":"StartResourceSnapshotJob",
@@ -615,8 +615,8 @@
       "input":{"shape":"TagResourceRequest"},
       "output":{"shape":"TagResourceResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -634,8 +634,8 @@
       "input":{"shape":"UntagResourceRequest"},
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -653,8 +653,8 @@
       "input":{"shape":"UpdateOpportunityRequest"},
       "output":{"shape":"UpdateOpportunityResponse"},
       "errors":[
-        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"},
         {"shape":"ValidationException"},
@@ -693,22 +693,6 @@
       "type":"structure",
       "required":["CompanyName"],
       "members":{
-        "Address":{
-          "shape":"Address",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s address details associated with the <code>Opportunity</code>.</p>"
-        },
-        "AwsAccountId":{
-          "shape":"AwsAccount",
-          "documentation":"<p>Specifies the <code>Customer</code> Amazon Web Services account ID associated with the <code>Opportunity</code>.</p>"
-        },
-        "CompanyName":{
-          "shape":"AccountCompanyNameString",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s company name associated with the <code>Opportunity</code>.</p>"
-        },
-        "Duns":{
-          "shape":"DunsNumber",
-          "documentation":"<p>Indicates the <code>Customer</code> DUNS number, if available.</p>"
-        },
         "Industry":{
           "shape":"Industry",
           "documentation":"<p>Specifies the industry the end <code>Customer</code> belongs to that's associated with the <code>Opportunity</code>. It refers to the category or sector where the customer's business operates. This is a required field.</p>"
@@ -717,9 +701,25 @@
           "shape":"AccountOtherIndustryString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s industry associated with the <code>Opportunity</code>, when the selected value in the <code>Industry</code> field is <code>Other</code>.</p>"
         },
+        "CompanyName":{
+          "shape":"AccountCompanyNameString",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s company name associated with the <code>Opportunity</code>.</p>"
+        },
         "WebsiteUrl":{
           "shape":"WebsiteUrl",
           "documentation":"<p>Specifies the end customer's company website URL associated with the <code>Opportunity</code>. This value is crucial to map the customer within the Amazon Web Services CRM system. This field is required in all cases except when the opportunity is related to national security.</p>"
+        },
+        "AwsAccountId":{
+          "shape":"AwsAccount",
+          "documentation":"<p>Specifies the <code>Customer</code> Amazon Web Services account ID associated with the <code>Opportunity</code>.</p>"
+        },
+        "Address":{
+          "shape":"Address",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s address details associated with the <code>Opportunity</code>.</p>"
+        },
+        "Duns":{
+          "shape":"DunsNumber",
+          "documentation":"<p>Indicates the <code>Customer</code> DUNS number, if available.</p>"
         }
       },
       "documentation":"<p>Specifies the <code>Customer</code>'s account details associated with the <code>Opportunity</code>.</p>"
@@ -754,14 +754,6 @@
       "type":"structure",
       "required":["CompanyName"],
       "members":{
-        "Address":{
-          "shape":"AddressSummary",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s address details associated with the <code>Opportunity</code>.</p>"
-        },
-        "CompanyName":{
-          "shape":"AccountSummaryCompanyNameString",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s company name associated with the <code>Opportunity</code>.</p>"
-        },
         "Industry":{
           "shape":"Industry",
           "documentation":"<p>Specifies which industry the end <code>Customer</code> belongs to associated with the <code>Opportunity</code>. It refers to the category or sector that the customer's business operates in.</p> <p>To submit a value outside the picklist, use <code>Other</code>.</p> <p>Conditionally mandatory if <code>Other</code> is selected for Industry Vertical in LOVs.</p>"
@@ -770,9 +762,17 @@
           "shape":"AccountSummaryOtherIndustryString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s industry associated with the <code> Opportunity</code>, when the selected value in the <code>Industry</code> field is <code>Other</code>. This field is relevant when the customer's industry doesn't fall under the predefined picklist values and requires a custom description.</p>"
         },
+        "CompanyName":{
+          "shape":"AccountSummaryCompanyNameString",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s company name associated with the <code>Opportunity</code>.</p>"
+        },
         "WebsiteUrl":{
           "shape":"WebsiteUrl",
           "documentation":"<p>Specifies the end customer's company website URL associated with the <code>Opportunity</code>. This value is crucial to map the customer within the Amazon Web Services CRM system.</p>"
+        },
+        "Address":{
+          "shape":"AddressSummary",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s address details associated with the <code>Opportunity</code>.</p>"
         }
       },
       "documentation":"<p>An object that contains an <code>Account</code>'s subset of fields.</p>"
@@ -795,10 +795,6 @@
           "shape":"AddressCityString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s city associated with the <code>Opportunity</code>.</p>"
         },
-        "CountryCode":{
-          "shape":"CountryCode",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s country associated with the <code>Opportunity</code>.</p>"
-        },
         "PostalCode":{
           "shape":"AddressPostalCodeString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s postal code associated with the <code>Opportunity</code>.</p>"
@@ -807,6 +803,10 @@
           "shape":"AddressPart",
           "documentation":"<p>Specifies the end <code>Customer</code>'s state or region associated with the <code>Opportunity</code>.</p> <p>Valid values: <code>Alabama | Alaska | American Samoa | Arizona | Arkansas | California | Colorado | Connecticut | Delaware | Dist. of Columbia | Federated States of Micronesia | Florida | Georgia | Guam | Hawaii | Idaho | Illinois | Indiana | Iowa | Kansas | Kentucky | Louisiana | Maine | Marshall Islands | Maryland | Massachusetts | Michigan | Minnesota | Mississippi | Missouri | Montana | Nebraska | Nevada | New Hampshire | New Jersey | New Mexico | New York | North Carolina | North Dakota | Northern Mariana Islands | Ohio | Oklahoma | Oregon | Palau | Pennsylvania | Puerto Rico | Rhode Island | South Carolina | South Dakota | Tennessee | Texas | Utah | Vermont | Virginia | Virgin Islands | Washington | West Virginia | Wisconsin | Wyoming | APO/AE | AFO/FPO | FPO, AP</code> </p>"
         },
+        "CountryCode":{
+          "shape":"CountryCode",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s country associated with the <code>Opportunity</code>.</p>"
+        },
         "StreetAddress":{
           "shape":"AddressStreetAddressString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s street address associated with the <code>Opportunity</code>.</p>"
@@ -843,10 +843,6 @@
           "shape":"AddressSummaryCityString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s city associated with the <code>Opportunity</code>.</p>"
         },
-        "CountryCode":{
-          "shape":"CountryCode",
-          "documentation":"<p>Specifies the end <code>Customer</code>'s country associated with the <code>Opportunity</code>.</p>"
-        },
         "PostalCode":{
           "shape":"AddressSummaryPostalCodeString",
           "documentation":"<p>Specifies the end <code>Customer</code>'s postal code associated with the <code>Opportunity</code>.</p>"
@@ -854,6 +850,10 @@
         "StateOrRegion":{
           "shape":"AddressPart",
           "documentation":"<p>Specifies the end <code>Customer</code>'s state or region associated with the <code>Opportunity</code>.</p> <p>Valid values: <code>Alabama | Alaska | American Samoa | Arizona | Arkansas | California | Colorado | Connecticut | Delaware | Dist. of Columbia | Federated States of Micronesia | Florida | Georgia | Guam | Hawaii | Idaho | Illinois | Indiana | Iowa | Kansas | Kentucky | Louisiana | Maine | Marshall Islands | Maryland | Massachusetts | Michigan | Minnesota | Mississippi | Missouri | Montana | Nebraska | Nevada | New Hampshire | New Jersey | New Mexico | New York | North Carolina | North Dakota | Northern Mariana Islands | Ohio | Oklahoma | Oregon | Palau | Pennsylvania | Puerto Rico | Rhode Island | South Carolina | South Dakota | Tennessee | Texas | Utah | Vermont | Virginia | Virgin Islands | Washington | West Virginia | Wisconsin | Wyoming | APO/AE | AFO/FPO | FPO, AP</code> </p>"
+        },
+        "CountryCode":{
+          "shape":"CountryCode",
+          "documentation":"<p>Specifies the end <code>Customer</code>'s country associated with the <code>Opportunity</code>.</p>"
         }
       },
       "documentation":"<p>An object that contains an <code>Address</code> object's subset of fields.</p>"
@@ -874,7 +874,12 @@
       "type":"string",
       "max":80,
       "min":0,
-      "pattern":"^[\\p{L}\\p{N}\\p{P}\\p{Z}]+$"
+      "sensitive":true
+    },
+    "Amount":{
+      "type":"string",
+      "pattern":"(0|([1-9][0-9]{0,30}))(\\.[0-9]{0,2})?",
+      "sensitive":true
     },
     "ApnPrograms":{
       "type":"list",
@@ -883,15 +888,11 @@
     "AssignOpportunityRequest":{
       "type":"structure",
       "required":[
-        "Assignee",
         "Catalog",
-        "Identifier"
+        "Identifier",
+        "Assignee"
       ],
       "members":{
-        "Assignee":{
-          "shape":"AssigneeContact",
-          "documentation":"<p>Specifies the user or team member responsible for managing the assigned opportunity. This field identifies the <i>Assignee</i> based on the partner's internal team structure. Ensure that the email address is associated with a registered user in your Partner Central account.</p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the opportunity is assigned in. Use <code>AWS</code> to assign real opportunities in the Amazon Web Services catalog, and <code>Sandbox</code> for testing in secure, isolated environments.</p>"
@@ -899,22 +900,22 @@
         "Identifier":{
           "shape":"OpportunityIdentifier",
           "documentation":"<p>Requires the <code>Opportunity</code>'s unique identifier when you want to assign it to another user. Provide the correct identifier so the intended opportunity is reassigned.</p>"
+        },
+        "Assignee":{
+          "shape":"AssigneeContact",
+          "documentation":"<p>Specifies the user or team member responsible for managing the assigned opportunity. This field identifies the <i>Assignee</i> based on the partner's internal team structure. Ensure that the email address is associated with a registered user in your Partner Central account.</p>"
         }
       }
     },
     "AssigneeContact":{
       "type":"structure",
       "required":[
-        "BusinessTitle",
         "Email",
         "FirstName",
-        "LastName"
+        "LastName",
+        "BusinessTitle"
       ],
       "members":{
-        "BusinessTitle":{
-          "shape":"JobTitle",
-          "documentation":"<p>Specifies the business title of the assignee managing the opportunity. This helps clarify the individual's role and responsibilities within the organization. Use the value <code>PartnerAccountManager</code> to update details of the opportunity owner.</p>"
-        },
         "Email":{
           "shape":"Email",
           "documentation":"<p>Provides the email address of the assignee. This email is used for communications and notifications related to the opportunity.</p>"
@@ -926,6 +927,10 @@
         "LastName":{
           "shape":"AssigneeContactLastNameString",
           "documentation":"<p>Specifies the last name of the assignee managing the opportunity. The system automatically retrieves this value from the user profile by referencing the associated email address.</p>"
+        },
+        "BusinessTitle":{
+          "shape":"JobTitle",
+          "documentation":"<p>Specifies the business title of the assignee managing the opportunity. This helps clarify the individual's role and responsibilities within the organization. Use the value <code>PartnerAccountManager</code> to update details of the opportunity owner.</p>"
         }
       },
       "documentation":"<p>Represents the contact details of the individual assigned to manage the opportunity within the partner organization. This helps to ensure that there is a point of contact for the opportunity's progress.</p>"
@@ -947,8 +952,8 @@
       "required":[
         "Catalog",
         "OpportunityIdentifier",
-        "RelatedEntityIdentifier",
-        "RelatedEntityType"
+        "RelatedEntityType",
+        "RelatedEntityIdentifier"
       ],
       "members":{
         "Catalog":{
@@ -959,13 +964,13 @@
           "shape":"OpportunityIdentifier",
           "documentation":"<p>Requires the <code>Opportunity</code>'s unique identifier when you want to associate it with a related entity. Provide the correct identifier so the intended opportunity is updated with the association.</p>"
         },
-        "RelatedEntityIdentifier":{
-          "shape":"AssociateOpportunityRequestRelatedEntityIdentifierString",
-          "documentation":"<p>Requires the related entity's unique identifier when you want to associate it with the <code> Opportunity</code>. For Amazon Web Services Marketplace entities, provide the Amazon Resource Name (ARN). Use the <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html\"> Amazon Web Services Marketplace API</a> to obtain the ARN.</p>"
-        },
         "RelatedEntityType":{
           "shape":"RelatedEntityType",
           "documentation":"<p>Specifies the entity type that you're associating with the <code> Opportunity</code>. This helps to categorize and properly process the association.</p>"
+        },
+        "RelatedEntityIdentifier":{
+          "shape":"AssociateOpportunityRequestRelatedEntityIdentifierString",
+          "documentation":"<p>Requires the related entity's unique identifier when you want to associate it with the <code> Opportunity</code>. For Amazon Web Services Marketplace entities, provide the Amazon Resource Name (ARN). Use the <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html\"> Amazon Web Services Marketplace API</a> to obtain the ARN.</p>"
         }
       }
     },
@@ -976,7 +981,7 @@
     },
     "AwsAccount":{
       "type":"string",
-      "pattern":"^([0-9]{12}|\\w{1,12})$",
+      "pattern":"([0-9]{12}|\\w{1,12})",
       "sensitive":true
     },
     "AwsAccountIdOrAliasList":{
@@ -1053,7 +1058,7 @@
     },
     "AwsMarketplaceOfferIdentifier":{
       "type":"string",
-      "pattern":"^arn:aws:aws-marketplace:[a-z]{1,2}-[a-z]*-\\d+:\\d{12}:AWSMarketplace/Offer/.*$"
+      "pattern":"arn:aws:aws-marketplace:[a-z]{1,2}-[a-z]*-\\d+:\\d{12}:AWSMarketplace/Offer/.*"
     },
     "AwsMarketplaceOfferIdentifiers":{
       "type":"list",
@@ -1083,13 +1088,13 @@
     "AwsOpportunityInsights":{
       "type":"structure",
       "members":{
-        "EngagementScore":{
-          "shape":"EngagementScore",
-          "documentation":"<p>Represents a score assigned by AWS to indicate the level of engagement and potential success for the opportunity. This score helps partners prioritize their efforts.</p>"
-        },
         "NextBestActions":{
           "shape":"String",
           "documentation":"<p>Provides recommendations from AWS on the next best actions to take in order to move the opportunity forward and increase the likelihood of success.</p>"
+        },
+        "EngagementScore":{
+          "shape":"EngagementScore",
+          "documentation":"<p>Represents a score assigned by AWS to indicate the level of engagement and potential success for the opportunity. This score helps partners prioritize their efforts.</p>"
         }
       },
       "documentation":"<p>Contains insights provided by AWS for the opportunity, offering recommendations and analysis that can help the partner optimize their engagement and strategy.</p>"
@@ -1097,10 +1102,18 @@
     "AwsOpportunityLifeCycle":{
       "type":"structure",
       "members":{
+        "TargetCloseDate":{
+          "shape":"Date",
+          "documentation":"<p>Indicates the expected date by which the opportunity is projected to close. This field helps in planning resources and timelines for both the partner and AWS.</p>"
+        },
         "ClosedLostReason":{
           "shape":"AwsClosedLostReason",
           "documentation":"<p>Indicates the reason why an opportunity was marked as <code>Closed Lost</code>. This helps in understanding the context behind the lost opportunity and aids in refining future strategies.</p>"
         },
+        "Stage":{
+          "shape":"AwsOpportunityStage",
+          "documentation":"<p>Represents the current stage of the opportunity in its lifecycle, such as <code>Qualification</code>, <code>Validation</code>, or <code>Closed Won</code>. This helps in understanding the opportunity's progress.</p>"
+        },
         "NextSteps":{
           "shape":"AwsOpportunityLifeCycleNextStepsString",
           "documentation":"<p>Specifies the immediate next steps required to progress the opportunity. These steps are based on AWS guidance and the current stage of the opportunity.</p>"
@@ -1108,14 +1121,6 @@
         "NextStepsHistory":{
           "shape":"AwsOpportunityLifeCycleNextStepsHistoryList",
           "documentation":"<p>Provides a historical log of previous next steps that were taken to move the opportunity forward. This helps in tracking the decision-making process and identifying any delays or obstacles encountered.</p>"
-        },
-        "Stage":{
-          "shape":"AwsOpportunityStage",
-          "documentation":"<p>Represents the current stage of the opportunity in its lifecycle, such as <code>Qualification</code>, <code>Validation</code>, or <code>Closed Won</code>. This helps in understanding the opportunity's progress.</p>"
-        },
-        "TargetCloseDate":{
-          "shape":"Date",
-          "documentation":"<p>Indicates the expected date by which the opportunity is projected to close. This field helps in planning resources and timelines for both the partner and AWS.</p>"
         }
       },
       "documentation":"<p>Tracks the lifecycle of the AWS opportunity, including stages such as qualification, validation, and closure. This field helps partners understand the current status and progression of the opportunity.</p>"
@@ -1212,10 +1217,6 @@
     "AwsTeamMember":{
       "type":"structure",
       "members":{
-        "BusinessTitle":{
-          "shape":"AwsMemberBusinessTitle",
-          "documentation":"<p>Specifies the Amazon Web Services team member's business title and indicates their organizational role.</p>"
-        },
         "Email":{
           "shape":"Email",
           "documentation":"<p>Provides the Amazon Web Services team member's email address.</p>"
@@ -1227,6 +1228,10 @@
         "LastName":{
           "shape":"AwsTeamMemberLastNameString",
           "documentation":"<p>Provides the Amazon Web Services team member's last name.</p>"
+        },
+        "BusinessTitle":{
+          "shape":"AwsMemberBusinessTitle",
+          "documentation":"<p>Specifies the Amazon Web Services team member's business title and indicates their organizational role.</p>"
         }
       },
       "documentation":"<p>Represents an Amazon Web Services team member for the engagement. This structure includes details such as name, email, and business title.</p>"
@@ -1245,7 +1250,7 @@
     },
     "CatalogIdentifier":{
       "type":"string",
-      "pattern":"^[a-zA-Z]+$"
+      "pattern":"[a-zA-Z]+"
     },
     "Channel":{
       "type":"string",
@@ -1271,7 +1276,7 @@
     },
     "ClientToken":{
       "type":"string",
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "ClosedLostReason":{
       "type":"string",
@@ -1301,13 +1306,13 @@
       "type":"string",
       "max":120,
       "min":1,
-      "pattern":"^[\\p{L}\\p{N}\\p{P}\\p{Z}]+$"
+      "sensitive":true
     },
     "CompanyWebsiteUrl":{
       "type":"string",
       "max":255,
       "min":4,
-      "pattern":"^((http|https)://)??(www[.])??([a-zA-Z0-9]|-)+?([.][a-zA-Z0-9(-|/|=|?)??]+?)+?$",
+      "pattern":"((http|https)://)??(www[.])??([a-zA-Z0-9]|-)+?([.][a-zA-Z0-9(-|/|=|?)??]+?)+?",
       "sensitive":true
     },
     "CompetitorName":{
@@ -1337,10 +1342,6 @@
     "Contact":{
       "type":"structure",
       "members":{
-        "BusinessTitle":{
-          "shape":"JobTitle",
-          "documentation":"<p>The partner contact's title (job title or role) associated with the <code>Opportunity</code>. <code>BusinessTitle</code> supports either <code>PartnerAccountManager</code> or <code>OpportunityOwner</code>.</p>"
-        },
         "Email":{
           "shape":"Email",
           "documentation":"<p>The contact's email address associated with the <code>Opportunity</code>.</p>"
@@ -1353,6 +1354,10 @@
           "shape":"ContactLastNameString",
           "documentation":"<p>The contact's last name associated with the <code>Opportunity</code>.</p>"
         },
+        "BusinessTitle":{
+          "shape":"JobTitle",
+          "documentation":"<p>The partner contact's title (job title or role) associated with the <code>Opportunity</code>. <code>BusinessTitle</code> supports either <code>PartnerAccountManager</code> or <code>OpportunityOwner</code>.</p>"
+        },
         "Phone":{
           "shape":"PhoneNumber",
           "documentation":"<p>The contact's phone number associated with the <code>Opportunity</code>.</p>"
@@ -1658,17 +1663,17 @@
     "CreateEngagementInvitationResponse":{
       "type":"structure",
       "required":[
-        "Arn",
-        "Id"
+        "Id",
+        "Arn"
       ],
       "members":{
-        "Arn":{
-          "shape":"EngagementInvitationArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) that uniquely identifies the engagement invitation. </p>"
-        },
         "Id":{
           "shape":"EngagementInvitationIdentifier",
           "documentation":"<p> Unique identifier assigned to the newly created engagement invitation. </p>"
+        },
+        "Arn":{
+          "shape":"EngagementInvitationArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) that uniquely identifies the engagement invitation. </p>"
         }
       }
     },
@@ -1677,8 +1682,8 @@
       "required":[
         "Catalog",
         "ClientToken",
-        "Description",
-        "Title"
+        "Title",
+        "Description"
       ],
       "members":{
         "Catalog":{
@@ -1690,34 +1695,34 @@
           "documentation":"<p>The <code>CreateEngagementRequest$ClientToken</code> parameter specifies a unique, case-sensitive identifier to ensure that the request is handled exactly once. The value must not exceed sixty-four alphanumeric characters.</p>",
           "idempotencyToken":true
         },
-        "Contexts":{
-          "shape":"EngagementContexts",
-          "documentation":"<p>The <code>Contexts</code> field is a required array of objects, with a maximum of 5 contexts allowed, specifying detailed information about customer projects associated with the Engagement. Each context object contains a <code>Type</code> field indicating the context type, which must be <code>CustomerProject</code> in this version, and a <code>Payload</code> field containing the <code>CustomerProject</code> details. The <code>CustomerProject</code> object is composed of two main components: <code>Customer</code> and <code>Project</code>. The <code>Customer</code> object includes information such as <code>CompanyName</code>, <code>WebsiteUrl</code>, <code>Industry</code>, and <code>CountryCode</code>, providing essential details about the customer. The <code>Project</code> object contains <code>Title</code>, <code>BusinessProblem</code>, and <code>TargetCompletionDate</code>, offering insights into the specific project associated with the customer. This structure allows comprehensive context to be included within the Engagement, facilitating effective collaboration between parties by providing relevant customer and project information.</p>"
+        "Title":{
+          "shape":"EngagementTitle",
+          "documentation":"<p>Specifies the title of the <code>Engagement</code>.</p>"
         },
         "Description":{
           "shape":"EngagementDescription",
           "documentation":"<p>Provides a description of the <code>Engagement</code>.</p>"
         },
-        "Title":{
-          "shape":"EngagementTitle",
-          "documentation":"<p>Specifies the title of the <code>Engagement</code>.</p>"
+        "Contexts":{
+          "shape":"EngagementContexts",
+          "documentation":"<p>The <code>Contexts</code> field is a required array of objects, with a maximum of 5 contexts allowed, specifying detailed information about customer projects associated with the Engagement. Each context object contains a <code>Type</code> field indicating the context type, which must be <code>CustomerProject</code> in this version, and a <code>Payload</code> field containing the <code>CustomerProject</code> details. The <code>CustomerProject</code> object is composed of two main components: <code>Customer</code> and <code>Project</code>. The <code>Customer</code> object includes information such as <code>CompanyName</code>, <code>WebsiteUrl</code>, <code>Industry</code>, and <code>CountryCode</code>, providing essential details about the customer. The <code>Project</code> object contains <code>Title</code>, <code>BusinessProblem</code>, and <code>TargetCompletionDate</code>, offering insights into the specific project associated with the customer. This structure allows comprehensive context to be included within the Engagement, facilitating effective collaboration between parties by providing relevant customer and project information.</p>"
         }
       }
     },
     "CreateEngagementRequestClientTokenString":{
       "type":"string",
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "CreateEngagementResponse":{
       "type":"structure",
       "members":{
-        "Arn":{
-          "shape":"EngagementArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the engagement.</p>"
-        },
         "Id":{
           "shape":"EngagementIdentifier",
           "documentation":"<p>Unique identifier assigned to the newly created engagement.</p>"
+        },
+        "Arn":{
+          "shape":"EngagementArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that identifies the engagement.</p>"
         }
       }
     },
@@ -1732,54 +1737,58 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the opportunity is created in. Use <code>AWS</code> to create opportunities in the Amazon Web Services catalog, and <code>Sandbox</code> for testing in secure, isolated environments.</p>"
         },
-        "ClientToken":{
-          "shape":"CreateOpportunityRequestClientTokenString",
-          "documentation":"<p>Required to be unique, and should be unchanging, it can be randomly generated or a meaningful string.</p> <p>Default: None</p> <p>Best practice: To help ensure uniqueness and avoid conflicts, use a Universally Unique Identifier (UUID) as the <code>ClientToken</code>. You can use standard libraries from most programming languages to generate this. If you use the same client token, the API returns the following error: \"Conflicting client token submitted for a new request body.\"</p>",
-          "idempotencyToken":true
+        "PrimaryNeedsFromAws":{
+          "shape":"PrimaryNeedsFromAws",
+          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an Amazon Web Services seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connect with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs Amazon Web Services RFx support.</p> </li> </ul>"
+        },
+        "NationalSecurity":{
+          "shape":"NationalSecurity",
+          "documentation":"<p>Indicates whether the <code>Opportunity</code> pertains to a national security project. This field must be set to <code>true</code> only when the customer's industry is <i>Government</i>. Additional privacy and security measures apply during the review and management process for opportunities marked as <code>NationalSecurity</code>.</p>"
+        },
+        "PartnerOpportunityIdentifier":{
+          "shape":"CreateOpportunityRequestPartnerOpportunityIdentifierString",
+          "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload to the partner.</p> <p>This field allows partners to link an opportunity to their CRM, which helps to ensure seamless integration and accurate synchronization between the Partner Central API and the partner's internal systems.</p>"
         },
         "Customer":{
           "shape":"Customer",
           "documentation":"<p>Specifies customer details associated with the <code>Opportunity</code>.</p>"
         },
-        "LifeCycle":{
-          "shape":"LifeCycle",
-          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
+        "Project":{
+          "shape":"Project",
+          "documentation":"<p>An object that contains project details for the <code>Opportunity</code>.</p>"
+        },
+        "OpportunityType":{
+          "shape":"OpportunityType",
+          "documentation":"<p>Specifies the opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
         },
         "Marketing":{
           "shape":"Marketing",
           "documentation":"<p>This object contains marketing details and is optional for an opportunity.</p>"
         },
-        "NationalSecurity":{
-          "shape":"NationalSecurity",
-          "documentation":"<p>Indicates whether the <code>Opportunity</code> pertains to a national security project. This field must be set to <code>true</code> only when the customer's industry is <i>Government</i>. Additional privacy and security measures apply during the review and management process for opportunities marked as <code>NationalSecurity</code>.</p>"
+        "SoftwareRevenue":{
+          "shape":"SoftwareRevenue",
+          "documentation":"<p>Specifies details of a customer's procurement terms. This is required only for partners in eligible programs.</p>"
         },
-        "OpportunityTeam":{
-          "shape":"PartnerOpportunityTeamMembersList",
-          "documentation":"<p>Represents the internal team handling the opportunity. Specify collaborating members of this opportunity who are within the partner's organization.</p>"
+        "ClientToken":{
+          "shape":"CreateOpportunityRequestClientTokenString",
+          "documentation":"<p>Required to be unique, and should be unchanging, it can be randomly generated or a meaningful string.</p> <p>Default: None</p> <p>Best practice: To help ensure uniqueness and avoid conflicts, use a Universally Unique Identifier (UUID) as the <code>ClientToken</code>. You can use standard libraries from most programming languages to generate this. If you use the same client token, the API returns the following error: \"Conflicting client token submitted for a new request body.\"</p>",
+          "idempotencyToken":true
         },
-        "OpportunityType":{
-          "shape":"OpportunityType",
-          "documentation":"<p>Specifies the opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
+        "LifeCycle":{
+          "shape":"LifeCycle",
+          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
         },
         "Origin":{
           "shape":"OpportunityOrigin",
           "documentation":"<p>Specifies the origin of the opportunity, indicating if it was sourced from Amazon Web Services or the partner. For all opportunities created with <code>Catalog: AWS</code>, this field must only be <code>Partner Referral</code>. However, when using <code>Catalog: Sandbox</code>, you can set this field to <code>AWS Referral</code> to simulate Amazon Web Services referral creation. This allows Amazon Web Services-originated flows testing in the sandbox catalog.</p>"
         },
-        "PartnerOpportunityIdentifier":{
-          "shape":"CreateOpportunityRequestPartnerOpportunityIdentifierString",
-          "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload to the partner.</p> <p>This field allows partners to link an opportunity to their CRM, which helps to ensure seamless integration and accurate synchronization between the Partner Central API and the partner's internal systems.</p>"
-        },
-        "PrimaryNeedsFromAws":{
-          "shape":"PrimaryNeedsFromAws",
-          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an Amazon Web Services seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connect with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs Amazon Web Services RFx support.</p> </li> </ul>"
-        },
-        "Project":{
-          "shape":"Project",
-          "documentation":"<p>An object that contains project details for the <code>Opportunity</code>.</p>"
+        "OpportunityTeam":{
+          "shape":"PartnerOpportunityTeamMembersList",
+          "documentation":"<p>Represents the internal team handling the opportunity. Specify collaborating members of this opportunity who are within the partner's organization.</p>"
         },
-        "SoftwareRevenue":{
-          "shape":"SoftwareRevenue",
-          "documentation":"<p>Specifies details of a customer's procurement terms. This is required only for partners in eligible programs.</p>"
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign.</p>"
         }
       }
     },
@@ -1800,13 +1809,13 @@
           "shape":"OpportunityIdentifier",
           "documentation":"<p>Read-only, system-generated <code>Opportunity</code> unique identifier. Amazon Web Services creates this identifier, and it's used for all subsequent opportunity actions, such as updates, associations, and submissions. It helps to ensure that each opportunity is accurately tracked and managed.</p>"
         },
-        "LastModifiedDate":{
-          "shape":"DateTime",
-          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified. When the <code>Opportunity</code> is created, its value is <code>CreatedDate</code>.</p>"
-        },
         "PartnerOpportunityIdentifier":{
           "shape":"String",
           "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner.</p>"
+        },
+        "LastModifiedDate":{
+          "shape":"DateTime",
+          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified. When the <code>Opportunity</code> is created, its value is <code>CreatedDate</code>.</p>"
         }
       }
     },
@@ -1816,9 +1825,9 @@
         "Catalog",
         "ClientToken",
         "EngagementIdentifier",
+        "ResourceType",
         "ResourceIdentifier",
-        "ResourceSnapshotTemplateIdentifier",
-        "ResourceType"
+        "ResourceSnapshotTemplateIdentifier"
       ],
       "members":{
         "Catalog":{
@@ -1834,6 +1843,10 @@
           "shape":"EngagementIdentifier",
           "documentation":"<p>Specifies the identifier of the engagement associated with the resource to be snapshotted.</p>"
         },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of resource for which the snapshot job is being created. Must be one of the supported resource types i.e. <code>Opportunity</code> </p>"
+        },
         "ResourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>Specifies the identifier of the specific resource to be snapshotted. The format depends on the <code> ResourceType</code>.</p>"
@@ -1842,30 +1855,26 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p>Specifies the name of the template that defines the schema for the snapshot.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource for which the snapshot job is being created. Must be one of the supported resource types i.e. <code>Opportunity</code> </p>"
-        },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>A list of objects specifying each tag name and value.</p>"
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign.</p>"
         }
       }
     },
     "CreateResourceSnapshotJobRequestClientTokenString":{
       "type":"string",
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "CreateResourceSnapshotJobResponse":{
       "type":"structure",
       "members":{
-        "Arn":{
-          "shape":"ResourceSnapshotJobArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the created snapshot job.</p>"
-        },
         "Id":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p>The unique identifier for the created snapshot job.</p>"
+        },
+        "Arn":{
+          "shape":"ResourceSnapshotJobArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created snapshot job.</p>"
         }
       }
     },
@@ -1873,26 +1882,25 @@
       "type":"structure",
       "required":[
         "Catalog",
-        "ClientToken",
         "EngagementIdentifier",
+        "ResourceType",
         "ResourceIdentifier",
         "ResourceSnapshotTemplateIdentifier",
-        "ResourceType"
+        "ClientToken"
       ],
       "members":{
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p> Specifies the catalog where the snapshot is created. Valid values are <code>AWS</code> and <code>Sandbox</code>. </p>"
         },
-        "ClientToken":{
-          "shape":"CreateResourceSnapshotRequestClientTokenString",
-          "documentation":"<p> Specifies a unique, client-generated UUID to ensure that the request is handled exactly once. This token helps prevent duplicate snapshot creations. </p>",
-          "idempotencyToken":true
-        },
         "EngagementIdentifier":{
           "shape":"EngagementIdentifier",
           "documentation":"<p> The unique identifier of the engagement associated with this snapshot. This field links the snapshot to a specific engagement context. </p>"
         },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> Specifies the type of resource for which the snapshot is being created. This field determines the structure and content of the snapshot. Must be one of the supported resource types, such as: <code>Opportunity</code>. </p>"
+        },
         "ResourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p> The unique identifier of the specific resource to be snapshotted. The format and constraints of this identifier depend on the <code>ResourceType</code> specified. For example: For <code>Opportunity</code> type, it will be an opportunity ID. </p>"
@@ -1901,15 +1909,16 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p> The name of the template that defines the schema for the snapshot. This template determines which subset of the resource data will be included in the snapshot. Must correspond to an existing and valid template for the specified <code>ResourceType</code>. </p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p> Specifies the type of resource for which the snapshot is being created. This field determines the structure and content of the snapshot. Must be one of the supported resource types, such as: <code>Opportunity</code>. </p>"
+        "ClientToken":{
+          "shape":"CreateResourceSnapshotRequestClientTokenString",
+          "documentation":"<p> Specifies a unique, client-generated UUID to ensure that the request is handled exactly once. This token helps prevent duplicate snapshot creations. </p>",
+          "idempotencyToken":true
         }
       }
     },
     "CreateResourceSnapshotRequestClientTokenString":{
       "type":"string",
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "CreateResourceSnapshotResponse":{
       "type":"structure",
@@ -2139,7 +2148,7 @@
     },
     "Date":{
       "type":"string",
-      "pattern":"^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$"
+      "pattern":"[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
     },
     "DateTime":{
       "type":"timestamp",
@@ -2182,8 +2191,8 @@
       "required":[
         "Catalog",
         "OpportunityIdentifier",
-        "RelatedEntityIdentifier",
-        "RelatedEntityType"
+        "RelatedEntityType",
+        "RelatedEntityIdentifier"
       ],
       "members":{
         "Catalog":{
@@ -2194,13 +2203,13 @@
           "shape":"OpportunityIdentifier",
           "documentation":"<p>The opportunity's unique identifier for when you want to disassociate it from related entities. This identifier helps to ensure that the correct opportunity is updated.</p> <p>Validation: Ensure that the provided identifier corresponds to an existing opportunity in the Amazon Web Services system because incorrect identifiers result in an error and no changes are made.</p>"
         },
-        "RelatedEntityIdentifier":{
-          "shape":"DisassociateOpportunityRequestRelatedEntityIdentifierString",
-          "documentation":"<p>The related entity's identifier that you want to disassociate from the opportunity. Depending on the type of entity, this could be a simple identifier or an Amazon Resource Name (ARN) for entities managed through Amazon Web Services Marketplace.</p> <p>For Amazon Web Services Marketplace entities, use the Amazon Web Services Marketplace API to obtain the necessary ARNs. For guidance on retrieving these ARNs, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html\"> Amazon Web Services MarketplaceUsing the Amazon Web Services Marketplace Catalog API</a>.</p> <p>Validation: Ensure the identifier or ARN is valid and corresponds to an existing entity. An incorrect or invalid identifier results in an error.</p>"
-        },
         "RelatedEntityType":{
           "shape":"RelatedEntityType",
           "documentation":"<p>The type of the entity that you're disassociating from the opportunity. When you specify the entity type, it helps the system correctly process the disassociation request to ensure that the right connections are removed.</p> <p>Examples of entity types include Partner Solution, Amazon Web Services product, and Amazon Web Services Marketplaceoffer. Ensure that the value matches one of the expected entity types.</p> <p>Validation: Provide a valid entity type to help ensure successful disassociation. An invalid or incorrect entity type results in an error.</p>"
+        },
+        "RelatedEntityIdentifier":{
+          "shape":"DisassociateOpportunityRequestRelatedEntityIdentifierString",
+          "documentation":"<p>The related entity's identifier that you want to disassociate from the opportunity. Depending on the type of entity, this could be a simple identifier or an Amazon Resource Name (ARN) for entities managed through Amazon Web Services Marketplace.</p> <p>For Amazon Web Services Marketplace entities, use the Amazon Web Services Marketplace API to obtain the necessary ARNs. For guidance on retrieving these ARNs, see <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html\"> Amazon Web Services MarketplaceUsing the Amazon Web Services Marketplace Catalog API</a>.</p> <p>Validation: Ensure the identifier or ARN is valid and corresponds to an existing entity. An incorrect or invalid identifier results in an error.</p>"
         }
       }
     },
@@ -2211,35 +2220,35 @@
     },
     "DunsNumber":{
       "type":"string",
-      "pattern":"^[0-9]{9}$",
+      "pattern":"[0-9]{9}",
       "sensitive":true
     },
     "Email":{
       "type":"string",
       "max":80,
       "min":0,
-      "pattern":"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$",
+      "pattern":"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
       "sensitive":true
     },
     "EngagementArn":{
       "type":"string",
-      "pattern":"^arn:.*"
+      "pattern":"arn:.*"
     },
     "EngagementArnOrIdentifier":{
       "type":"string",
-      "pattern":"^(arn:.*|eng-[0-9a-z]{14})$"
+      "pattern":"(arn:.*|eng-[0-9a-z]{14})"
     },
     "EngagementContextDetails":{
       "type":"structure",
       "required":["Type"],
       "members":{
-        "Payload":{
-          "shape":"EngagementContextPayload",
-          "documentation":"<p>Contains the specific details of the Engagement context. The structure of this payload varies depending on the Type field. </p>"
-        },
         "Type":{
           "shape":"EngagementContextType",
           "documentation":"<p>Specifies the type of Engagement context. Valid values are \"CustomerProject\" or \"Document\", indicating whether the context relates to a customer project or a document respectively. </p>"
+        },
+        "Payload":{
+          "shape":"EngagementContextPayload",
+          "documentation":"<p>Contains the specific details of the Engagement context. The structure of this payload varies depending on the Type field. </p>"
         }
       },
       "documentation":"<p>Provides detailed context information for an Engagement. This structure allows for specifying the type of context and its associated payload. </p>"
@@ -2268,27 +2277,27 @@
     "EngagementCustomer":{
       "type":"structure",
       "required":[
-        "CompanyName",
-        "CountryCode",
         "Industry",
-        "WebsiteUrl"
+        "CompanyName",
+        "WebsiteUrl",
+        "CountryCode"
       ],
       "members":{
-        "CompanyName":{
-          "shape":"CompanyName",
-          "documentation":"<p>Represents the name of the customer’s company associated with the Engagement Invitation. This field is used to identify the customer.</p>"
-        },
-        "CountryCode":{
-          "shape":"CountryCode",
-          "documentation":"<p>Indicates the country in which the customer’s company operates. This field is useful for understanding regional requirements or compliance needs.</p>"
-        },
         "Industry":{
           "shape":"Industry",
           "documentation":"<p>Specifies the industry to which the customer’s company belongs. This field helps categorize the opportunity based on the customer’s business sector.</p>"
         },
+        "CompanyName":{
+          "shape":"CompanyName",
+          "documentation":"<p>Represents the name of the customer’s company associated with the Engagement Invitation. This field is used to identify the customer.</p>"
+        },
         "WebsiteUrl":{
           "shape":"CompanyWebsiteUrl",
           "documentation":"<p>Provides the website URL of the customer’s company. This field helps partners verify the legitimacy and size of the customer organization.</p>"
+        },
+        "CountryCode":{
+          "shape":"CountryCode",
+          "documentation":"<p>Indicates the country in which the customer’s company operates. This field is useful for understanding regional requirements or compliance needs.</p>"
         }
       },
       "documentation":"<p>Contains details about the customer associated with the Engagement Invitation, including company information and industry.</p>"
@@ -2302,11 +2311,15 @@
     "EngagementCustomerProjectDetails":{
       "type":"structure",
       "required":[
+        "Title",
         "BusinessProblem",
-        "TargetCompletionDate",
-        "Title"
+        "TargetCompletionDate"
       ],
       "members":{
+        "Title":{
+          "shape":"EngagementCustomerProjectTitle",
+          "documentation":"<p>The title of the project.</p>"
+        },
         "BusinessProblem":{
           "shape":"EngagementCustomerBusinessProblem",
           "documentation":"<p>A description of the business problem the project aims to solve.</p>"
@@ -2314,17 +2327,13 @@
         "TargetCompletionDate":{
           "shape":"EngagementCustomerProjectDetailsTargetCompletionDateString",
           "documentation":"<p>The target completion date for the customer's project.</p>"
-        },
-        "Title":{
-          "shape":"EngagementCustomerProjectTitle",
-          "documentation":"<p>The title of the project.</p>"
         }
       },
       "documentation":"<p>Provides comprehensive details about a customer project associated with an Engagement. This may include information such as project goals, timelines, and specific customer requirements. </p>"
     },
     "EngagementCustomerProjectDetailsTargetCompletionDateString":{
       "type":"string",
-      "pattern":"^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$"
+      "pattern":"[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"
     },
     "EngagementCustomerProjectTitle":{
       "type":"string",
@@ -2338,7 +2347,7 @@
     },
     "EngagementIdentifier":{
       "type":"string",
-      "pattern":"^eng-[0-9a-z]{14}$"
+      "pattern":"eng-[0-9a-z]{14}"
     },
     "EngagementIdentifiers":{
       "type":"list",
@@ -2348,17 +2357,17 @@
     },
     "EngagementInvitationArn":{
       "type":"string",
-      "pattern":"^arn:aws:partnercentral::[0-9]{12}:[a-zA-Z]+/engagement-invitation/engi-[0-9,a-z]{13}$"
+      "pattern":"arn:aws:partnercentral::[0-9]{12}:[a-zA-Z]+/engagement-invitation/engi-[0-9,a-z]{13}"
     },
     "EngagementInvitationArnOrIdentifier":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^(arn:.*|engi-[0-9a-z]{13})$"
+      "pattern":"(arn:.*|engi-[0-9a-z]{13})"
     },
     "EngagementInvitationIdentifier":{
       "type":"string",
-      "pattern":"^engi-[0-9,a-z]{13}$"
+      "pattern":"engi-[0-9,a-z]{13}"
     },
     "EngagementInvitationIdentifiers":{
       "type":"list",
@@ -2377,17 +2386,21 @@
     "EngagementInvitationSummary":{
       "type":"structure",
       "required":[
-        "Catalog",
-        "Id"
+        "Id",
+        "Catalog"
       ],
       "members":{
         "Arn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Engagement Invitation. The ARN is a unique identifier that allows partners to reference the invitation in their system and manage its lifecycle.</p>"
         },
-        "Catalog":{
-          "shape":"CatalogIdentifier",
-          "documentation":"<p>Specifies the catalog in which the Engagement Invitation resides. This can be either the <code>AWS</code> or <code>Sandbox</code> catalog, indicating whether the opportunity is live or being tested.</p>"
+        "PayloadType":{
+          "shape":"EngagementInvitationPayloadType",
+          "documentation":"<p>Describes the type of payload associated with the Engagement Invitation, such as <code>Opportunity</code> or <code>MarketplaceOffer</code>. This helps partners understand the nature of the engagement request from AWS.</p>"
+        },
+        "Id":{
+          "shape":"EngagementInvitationArnOrIdentifier",
+          "documentation":"<p>Represents the unique identifier of the Engagement Invitation. This identifier is used to track the invitation and to manage responses like acceptance or rejection.</p>"
         },
         "EngagementId":{
           "shape":"EngagementIdentifier",
@@ -2397,29 +2410,17 @@
           "shape":"EngagementTitle",
           "documentation":"<p>Provides a short title or description of the Engagement Invitation. This title helps partners quickly identify and differentiate between multiple engagement opportunities.</p>"
         },
-        "ExpirationDate":{
-          "shape":"DateTime",
-          "documentation":"<p>Indicates the date and time when the Engagement Invitation will expire. After this date, the invitation can no longer be accepted, and the opportunity will be unavailable to the partner.</p>"
-        },
-        "Id":{
-          "shape":"EngagementInvitationArnOrIdentifier",
-          "documentation":"<p>Represents the unique identifier of the Engagement Invitation. This identifier is used to track the invitation and to manage responses like acceptance or rejection.</p>"
+        "Status":{
+          "shape":"InvitationStatus",
+          "documentation":"<p>Represents the current status of the Engagement Invitation, such as <code>Pending</code>, <code>Accepted</code>, or <code>Rejected</code>. The status helps track the progress and response to the invitation.</p>"
         },
         "InvitationDate":{
           "shape":"DateTime",
           "documentation":"<p>Indicates the date when the Engagement Invitation was sent to the partner. This provides context for when the opportunity was shared and helps in tracking the timeline for engagement.</p>"
         },
-        "ParticipantType":{
-          "shape":"ParticipantType",
-          "documentation":"<p>Identifies the role of the caller in the engagement invitation.</p>"
-        },
-        "PayloadType":{
-          "shape":"EngagementInvitationPayloadType",
-          "documentation":"<p>Describes the type of payload associated with the Engagement Invitation, such as <code>Opportunity</code> or <code>MarketplaceOffer</code>. This helps partners understand the nature of the engagement request from AWS.</p>"
-        },
-        "Receiver":{
-          "shape":"Receiver",
-          "documentation":"<p>Specifies the partner company or individual that received the Engagement Invitation. This field is important for tracking who the invitation was sent to within the partner organization.</p>"
+        "ExpirationDate":{
+          "shape":"DateTime",
+          "documentation":"<p>Indicates the date and time when the Engagement Invitation will expire. After this date, the invitation can no longer be accepted, and the opportunity will be unavailable to the partner.</p>"
         },
         "SenderAwsAccountId":{
           "shape":"AwsAccount",
@@ -2429,9 +2430,17 @@
           "shape":"EngagementInvitationSummarySenderCompanyNameString",
           "documentation":"<p>Indicates the name of the company or AWS division that sent the Engagement Invitation. This information is useful for partners to know which part of AWS is requesting engagement.</p>"
         },
-        "Status":{
-          "shape":"InvitationStatus",
-          "documentation":"<p>Represents the current status of the Engagement Invitation, such as <code>Pending</code>, <code>Accepted</code>, or <code>Rejected</code>. The status helps track the progress and response to the invitation.</p>"
+        "Receiver":{
+          "shape":"Receiver",
+          "documentation":"<p>Specifies the partner company or individual that received the Engagement Invitation. This field is important for tracking who the invitation was sent to within the partner organization.</p>"
+        },
+        "Catalog":{
+          "shape":"CatalogIdentifier",
+          "documentation":"<p>Specifies the catalog in which the Engagement Invitation resides. This can be either the <code>AWS</code> or <code>Sandbox</code> catalog, indicating whether the opportunity is live or being tested.</p>"
+        },
+        "ParticipantType":{
+          "shape":"ParticipantType",
+          "documentation":"<p>Identifies the role of the caller in the engagement invitation.</p>"
         }
       },
       "documentation":"<p>Provides a summarized view of the Engagement Invitation, including details like the identifier, status, and sender. This summary helps partners track and manage AWS originated opportunities.</p>"
@@ -2448,10 +2457,6 @@
     "EngagementMember":{
       "type":"structure",
       "members":{
-        "AccountId":{
-          "shape":"AwsAccount",
-          "documentation":"<p>This is the unique identifier for the AWS account associated with the member organization. It's used for AWS-related operations and identity verification. </p>"
-        },
         "CompanyName":{
           "shape":"MemberCompanyName",
           "documentation":"<p>The official name of the member's company or organization.</p>"
@@ -2459,6 +2464,10 @@
         "WebsiteUrl":{
           "shape":"String",
           "documentation":"<p>The URL of the member company's website. This offers a way to find more information about the member organization and serves as an additional identifier. </p>"
+        },
+        "AccountId":{
+          "shape":"AwsAccount",
+          "documentation":"<p>This is the unique identifier for the AWS account associated with the member organization. It's used for AWS-related operations and identity verification. </p>"
         }
       },
       "documentation":"<p>Engagement members are the participants in an Engagement, which is likely a collaborative project or business opportunity within the AWS partner network. Members can be different partner organizations or AWS accounts that are working together on a specific engagement. </p> <p>Each member is represented by their AWS Account ID, Company Name, and associated details. Members have a status within the Engagement (PENDING, ACCEPTED, REJECTED, or WITHDRAWN), indicating their current state of participation. Only existing members of an Engagement can view the list of other members. This implies a level of privacy and access control within the Engagement structure. </p>"
@@ -2501,21 +2510,21 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p> Indicates the environment in which the resource and engagement exist. </p>"
         },
-        "CreatedBy":{
-          "shape":"AwsAccount",
-          "documentation":"<p>The AWS account ID of the entity that owns the resource. Identifies the account responsible for or having primary control over the resource. </p>"
-        },
         "EngagementId":{
           "shape":"EngagementIdentifier",
           "documentation":"<p> A unique identifier for the engagement associated with the resource. </p>"
         },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> Categorizes the type of resource associated with the engagement. </p>"
+        },
         "ResourceId":{
           "shape":"ResourceIdentifier",
           "documentation":"<p> A unique identifier for the specific resource. Varies depending on the resource type. </p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p> Categorizes the type of resource associated with the engagement. </p>"
+        "CreatedBy":{
+          "shape":"AwsAccount",
+          "documentation":"<p>The AWS account ID of the entity that owns the resource. Identifies the account responsible for or having primary control over the resource. </p>"
         }
       },
       "documentation":"<p> This provide a streamlined view of the relationships between engagements and resources. These summaries offer a crucial link between collaborative engagements and the specific resources involved, such as opportunities.These summaries are particularly valuable for partners navigating complex engagements with multiple resources. They enable quick insights into resource distribution across engagements, support efficient resource management, and help maintain a clear overview of collaborative activities. </p>"
@@ -2535,17 +2544,17 @@
     "EngagementSort":{
       "type":"structure",
       "required":[
-        "SortBy",
-        "SortOrder"
+        "SortOrder",
+        "SortBy"
       ],
       "members":{
-        "SortBy":{
-          "shape":"EngagementSortName",
-          "documentation":"<p>The field by which to sort the results.</p>"
-        },
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The order in which to sort the results.</p>"
+        },
+        "SortBy":{
+          "shape":"EngagementSortName",
+          "documentation":"<p>The field by which to sort the results.</p>"
         }
       },
       "documentation":"<p>Specifies the sorting parameters for listing Engagements.</p>"
@@ -2561,6 +2570,14 @@
           "shape":"EngagementArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the created Engagement.</p>"
         },
+        "Id":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p>The unique identifier for the Engagement.</p>"
+        },
+        "Title":{
+          "shape":"EngagementTitle",
+          "documentation":"<p>The title of the Engagement.</p>"
+        },
         "CreatedAt":{
           "shape":"DateTime",
           "documentation":"<p>The date and time when the Engagement was created.</p>"
@@ -2569,17 +2586,9 @@
           "shape":"AwsAccount",
           "documentation":"<p>The AWS Account ID of the Engagement creator.</p>"
         },
-        "Id":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p>The unique identifier for the Engagement.</p>"
-        },
         "MemberCount":{
           "shape":"Integer",
           "documentation":"<p>The number of members in the Engagement.</p>"
-        },
-        "Title":{
-          "shape":"EngagementTitle",
-          "documentation":"<p>The title of the Engagement.</p>"
         }
       },
       "documentation":"<p>An object that contains an <code>Engagement</code>'s subset of fields. </p>"
@@ -2603,24 +2612,24 @@
       ],
       "members":{
         "Amount":{
-          "shape":"String",
+          "shape":"Amount",
           "documentation":"<p>Represents the estimated monthly revenue that the partner expects to earn from the opportunity. This helps in forecasting financial returns.</p>"
         },
         "CurrencyCode":{
           "shape":"ExpectedCustomerSpendCurrencyCodeEnum",
           "documentation":"<p>Indicates the currency in which the revenue estimate is provided. This helps in understanding the financial impact across different markets.</p>"
         },
-        "EstimationUrl":{
-          "shape":"WebsiteUrl",
-          "documentation":"<p>A URL providing additional information or context about the spend estimation.</p>"
-        },
         "Frequency":{
           "shape":"PaymentFrequency",
-          "documentation":"<p>Indicates how frequently the customer is expected to spend the projected amount. This can include values such as <code>Monthly</code>, <code>Quarterly</code>, or <code>Annually</code>. The default value is <code>Monthly</code>, representing recurring monthly spend.</p>"
+          "documentation":"<p>Indicates how frequently the customer is expected to spend the projected amount. Only the value <code>Monthly</code> is allowed for the <code>Frequency</code> field, representing recurring monthly spend.</p>"
         },
         "TargetCompany":{
           "shape":"ExpectedCustomerSpendTargetCompanyString",
-          "documentation":"<p>Specifies the name of the partner company that is expected to generate revenue from the opportunity. This field helps track the partner’s involvement in the opportunity.</p>"
+          "documentation":"<p>Specifies the name of the partner company that is expected to generate revenue from the opportunity. This field helps track the partner’s involvement in the opportunity. This field only accepts the value <code>AWS</code>. If any other value is provided, the system will automatically set it to <code>AWS</code>.</p>"
+        },
+        "EstimationUrl":{
+          "shape":"WebsiteUrl",
+          "documentation":"<p>A URL providing additional information or context about the spend estimation.</p>"
         }
       },
       "documentation":"<p>Provides an estimate of the revenue that the partner is expected to generate from the opportunity. This information helps partners assess the financial value of the project.</p>"
@@ -2797,13 +2806,14 @@
         "ZMW",
         "ZWL"
       ],
-      "pattern":"^USD$",
+      "pattern":"USD",
       "sensitive":true
     },
     "ExpectedCustomerSpendList":{
       "type":"list",
       "member":{"shape":"ExpectedCustomerSpend"},
-      "min":1
+      "max":10,
+      "min":0
     },
     "ExpectedCustomerSpendTargetCompanyString":{
       "type":"string",
@@ -2835,21 +2845,21 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog in which the AWS Opportunity exists. This is the environment (e.g., <code>AWS</code> or <code>Sandbox</code>) where the opportunity is being managed.</p>"
         },
-        "Customer":{
-          "shape":"AwsOpportunityCustomer",
-          "documentation":"<p>Provides details about the customer associated with the AWS Opportunity, including account information, industry, and other customer data. These details help partners understand the business context of the opportunity.</p>"
+        "RelatedOpportunityId":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Provides the unique identifier of the related partner opportunity, allowing partners to link the AWS Opportunity to their corresponding opportunity in their CRM system.</p>"
         },
-        "Insights":{
-          "shape":"AwsOpportunityInsights",
-          "documentation":"<p>Provides insights into the AWS Opportunity, including engagement score and recommended actions that AWS suggests for the partner.</p>"
+        "Origin":{
+          "shape":"OpportunityOrigin",
+          "documentation":"<p>Specifies whether the AWS Opportunity originated from AWS or the partner. This helps distinguish between opportunities that were sourced by AWS and those referred by the partner.</p>"
         },
         "InvolvementType":{
           "shape":"SalesInvolvementType",
           "documentation":"<p>Specifies the type of involvement AWS has in the opportunity, such as direct cosell or advisory support. This field helps partners understand the role AWS plays in advancing the opportunity.</p>"
         },
-        "InvolvementTypeChangeReason":{
-          "shape":"InvolvementTypeChangeReason",
-          "documentation":"<p>Provides a reason for any changes in the involvement type of AWS in the opportunity. This field is used to track why the level of AWS engagement has changed from <code>For Visibility Only</code> to <code>Co-sell</code> offering transparency into the partnership dynamics.</p>"
+        "Visibility":{
+          "shape":"Visibility",
+          "documentation":"<p>Defines the visibility level for the AWS Opportunity. Use <code>Full</code> visibility for most cases, while <code>Limited</code> visibility is reserved for special programs or sensitive opportunities.</p>"
         },
         "LifeCycle":{
           "shape":"AwsOpportunityLifeCycle",
@@ -2859,25 +2869,25 @@
           "shape":"AwsOpportunityTeamMembersList",
           "documentation":"<p>Details the AWS opportunity team, including members involved. This information helps partners know who from AWS is engaged and what their role is.</p>"
         },
-        "Origin":{
-          "shape":"OpportunityOrigin",
-          "documentation":"<p>Specifies whether the AWS Opportunity originated from AWS or the partner. This helps distinguish between opportunities that were sourced by AWS and those referred by the partner.</p>"
+        "Insights":{
+          "shape":"AwsOpportunityInsights",
+          "documentation":"<p>Provides insights into the AWS Opportunity, including engagement score and recommended actions that AWS suggests for the partner.</p>"
         },
-        "Project":{
-          "shape":"AwsOpportunityProject",
-          "documentation":"<p>Provides details about the project associated with the AWS Opportunity, including the customer’s business problem, expected outcomes, and project scope. This information is crucial for understanding the broader context of the opportunity.</p>"
+        "InvolvementTypeChangeReason":{
+          "shape":"InvolvementTypeChangeReason",
+          "documentation":"<p>Provides a reason for any changes in the involvement type of AWS in the opportunity. This field is used to track why the level of AWS engagement has changed from <code>For Visibility Only</code> to <code>Co-sell</code> offering transparency into the partnership dynamics.</p>"
         },
         "RelatedEntityIds":{
           "shape":"AwsOpportunityRelatedEntities",
           "documentation":"<p>Lists related entity identifiers, such as AWS products or partner solutions, associated with the AWS Opportunity. These identifiers provide additional context and help partners understand which AWS services are involved.</p>"
         },
-        "RelatedOpportunityId":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Provides the unique identifier of the related partner opportunity, allowing partners to link the AWS Opportunity to their corresponding opportunity in their CRM system.</p>"
+        "Customer":{
+          "shape":"AwsOpportunityCustomer",
+          "documentation":"<p>Provides details about the customer associated with the AWS Opportunity, including account information, industry, and other customer data. These details help partners understand the business context of the opportunity.</p>"
         },
-        "Visibility":{
-          "shape":"Visibility",
-          "documentation":"<p>Defines the visibility level for the AWS Opportunity. Use <code>Full</code> visibility for most cases, while <code>Limited</code> visibility is reserved for special programs or sensitive opportunities.</p>"
+        "Project":{
+          "shape":"AwsOpportunityProject",
+          "documentation":"<p>Provides details about the project associated with the AWS Opportunity, including the customer’s business problem, expected outcomes, and project scope. This information is crucial for understanding the broader context of the opportunity.</p>"
         }
       }
     },
@@ -2901,21 +2911,21 @@
     "GetEngagementInvitationResponse":{
       "type":"structure",
       "required":[
-        "Catalog",
-        "Id"
+        "Id",
+        "Catalog"
       ],
       "members":{
         "Arn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) that identifies the engagement invitation.</p>"
         },
-        "Catalog":{
-          "shape":"CatalogIdentifier",
-          "documentation":"<p>Indicates the catalog from which the engagement invitation details are retrieved. This field helps in identifying the appropriate catalog (e.g., <code>AWS</code> or <code>Sandbox</code>) used in the request.</p>"
+        "PayloadType":{
+          "shape":"EngagementInvitationPayloadType",
+          "documentation":"<p>The type of payload contained in the engagement invitation, indicating what data or context the payload covers.</p>"
         },
-        "EngagementDescription":{
-          "shape":"EngagementDescription",
-          "documentation":"<p>The description of the engagement associated with this invitation.</p>"
+        "Id":{
+          "shape":"EngagementInvitationArnOrIdentifier",
+          "documentation":"<p>Unique identifier assigned to the engagement invitation being retrieved.</p>"
         },
         "EngagementId":{
           "shape":"EngagementIdentifier",
@@ -2925,53 +2935,53 @@
           "shape":"EngagementTitle",
           "documentation":"<p>The title of the engagement invitation, summarizing the purpose or objectives of the opportunity shared by AWS.</p>"
         },
-        "ExistingMembers":{
-          "shape":"EngagementMemberSummaries",
-          "documentation":"<p>A list of active members currently part of the Engagement. This array contains a maximum of 10 members, each represented by an object with the following properties.</p> <ul> <li> <p>CompanyName: The name of the member's company.</p> </li> <li> <p>WebsiteUrl: The website URL of the member's company.</p> </li> </ul>"
-        },
-        "ExpirationDate":{
-          "shape":"DateTime",
-          "documentation":"<p>Indicates the date on which the engagement invitation will expire if not accepted by the partner.</p>"
-        },
-        "Id":{
-          "shape":"EngagementInvitationArnOrIdentifier",
-          "documentation":"<p>Unique identifier assigned to the engagement invitation being retrieved.</p>"
+        "Status":{
+          "shape":"InvitationStatus",
+          "documentation":"<p>The current status of the engagement invitation.</p>"
         },
         "InvitationDate":{
           "shape":"DateTime",
           "documentation":"<p>The date when the engagement invitation was sent to the partner.</p>"
         },
-        "InvitationMessage":{
-          "shape":"InvitationMessage",
-          "documentation":"<p>The message sent to the invited partner when the invitation was created.</p>"
+        "ExpirationDate":{
+          "shape":"DateTime",
+          "documentation":"<p>Indicates the date on which the engagement invitation will expire if not accepted by the partner.</p>"
         },
-        "Payload":{
-          "shape":"Payload",
-          "documentation":"<p>Details of the engagement invitation payload, including specific data relevant to the invitation's contents, such as customer information and opportunity insights.</p>"
+        "SenderAwsAccountId":{
+          "shape":"AwsAccount",
+          "documentation":"<p>Specifies the AWS Account ID of the sender, which identifies the AWS team responsible for sharing the engagement invitation.</p>"
         },
-        "PayloadType":{
-          "shape":"EngagementInvitationPayloadType",
-          "documentation":"<p>The type of payload contained in the engagement invitation, indicating what data or context the payload covers.</p>"
+        "SenderCompanyName":{
+          "shape":"GetEngagementInvitationResponseSenderCompanyNameString",
+          "documentation":"<p>The name of the AWS organization or team that sent the engagement invitation.</p>"
         },
         "Receiver":{
           "shape":"Receiver",
           "documentation":"<p>Information about the partner organization or team that received the engagement invitation, including contact details and identifiers.</p>"
         },
+        "Catalog":{
+          "shape":"CatalogIdentifier",
+          "documentation":"<p>Indicates the catalog from which the engagement invitation details are retrieved. This field helps in identifying the appropriate catalog (e.g., <code>AWS</code> or <code>Sandbox</code>) used in the request.</p>"
+        },
         "RejectionReason":{
           "shape":"RejectionReasonString",
           "documentation":"<p>If the engagement invitation was rejected, this field specifies the reason provided by the partner for the rejection.</p>"
         },
-        "SenderAwsAccountId":{
-          "shape":"AwsAccount",
-          "documentation":"<p>Specifies the AWS Account ID of the sender, which identifies the AWS team responsible for sharing the engagement invitation.</p>"
+        "Payload":{
+          "shape":"Payload",
+          "documentation":"<p>Details of the engagement invitation payload, including specific data relevant to the invitation's contents, such as customer information and opportunity insights.</p>"
         },
-        "SenderCompanyName":{
-          "shape":"GetEngagementInvitationResponseSenderCompanyNameString",
-          "documentation":"<p>The name of the AWS organization or team that sent the engagement invitation.</p>"
+        "InvitationMessage":{
+          "shape":"InvitationMessage",
+          "documentation":"<p>The message sent to the invited partner when the invitation was created.</p>"
         },
-        "Status":{
-          "shape":"InvitationStatus",
-          "documentation":"<p>The current status of the engagement invitation.</p>"
+        "EngagementDescription":{
+          "shape":"EngagementDescription",
+          "documentation":"<p>The description of the engagement associated with this invitation.</p>"
+        },
+        "ExistingMembers":{
+          "shape":"EngagementMemberSummaries",
+          "documentation":"<p>A list of active members currently part of the Engagement. This array contains a maximum of 10 members, each represented by an object with the following properties.</p> <ul> <li> <p>CompanyName: The name of the member's company.</p> </li> <li> <p>WebsiteUrl: The website URL of the member's company.</p> </li> </ul>"
         }
       }
     },
@@ -3000,13 +3010,21 @@
     "GetEngagementResponse":{
       "type":"structure",
       "members":{
+        "Id":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p>The unique resource identifier of the engagement retrieved.</p>"
+        },
         "Arn":{
           "shape":"EngagementArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the engagement retrieved.</p>"
         },
-        "Contexts":{
-          "shape":"EngagementContexts",
-          "documentation":"<p>A list of context objects associated with the engagement. Each context provides additional information related to the Engagement, such as customer projects or documents.</p>"
+        "Title":{
+          "shape":"EngagementTitle",
+          "documentation":"<p>The title of the engagement. It provides a brief, descriptive name for the engagement that is meaningful and easily recognizable.</p>"
+        },
+        "Description":{
+          "shape":"EngagementDescription",
+          "documentation":"<p>A more detailed description of the engagement. This provides additional context or information about the engagement's purpose or scope.</p>"
         },
         "CreatedAt":{
           "shape":"DateTime",
@@ -3016,21 +3034,13 @@
           "shape":"AwsAccount",
           "documentation":"<p>The AWS account ID of the user who originally created the engagement. This field helps in tracking the origin of the engagement.</p>"
         },
-        "Description":{
-          "shape":"EngagementDescription",
-          "documentation":"<p>A more detailed description of the engagement. This provides additional context or information about the engagement's purpose or scope.</p>"
-        },
-        "Id":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p>The unique resource identifier of the engagement retrieved.</p>"
-        },
         "MemberCount":{
           "shape":"Integer",
           "documentation":"<p>Specifies the current count of members participating in the Engagement. This count includes all active members regardless of their roles or permissions within the Engagement.</p>"
         },
-        "Title":{
-          "shape":"EngagementTitle",
-          "documentation":"<p>The title of the engagement. It provides a brief, descriptive name for the engagement that is meaningful and easily recognizable.</p>"
+        "Contexts":{
+          "shape":"EngagementContexts",
+          "documentation":"<p>A list of context objects associated with the engagement. Each context provides additional information related to the Engagement, such as customer projects or documents.</p>"
         }
       }
     },
@@ -3055,75 +3065,75 @@
       "type":"structure",
       "required":[
         "Catalog",
-        "CreatedDate",
         "Id",
         "LastModifiedDate",
+        "CreatedDate",
         "RelatedEntityIdentifiers"
       ],
       "members":{
-        "Arn":{
-          "shape":"OpportunityArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the opportunity.</p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the opportunity information is retrieved from. Use <code>AWS</code> to retrieve opportunities in the Amazon Web Services catalog, and <code>Sandbox</code> to retrieve opportunities in a secure and isolated testing environment.</p>"
         },
-        "CreatedDate":{
-          "shape":"DateTime",
-          "documentation":"<p> <code>DateTime</code> when the <code>Opportunity</code> was last created.</p>"
+        "PrimaryNeedsFromAws":{
+          "shape":"PrimaryNeedsFromAws",
+          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an Amazon Web Services seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connect with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs Amazon Web Services RFx support.</p> </li> </ul>"
+        },
+        "NationalSecurity":{
+          "shape":"NationalSecurity",
+          "documentation":"<p>Indicates whether the <code>Opportunity</code> pertains to a national security project. This field must be set to <code>true</code> only when the customer's industry is <i>Government</i>. Additional privacy and security measures apply during the review and management process for opportunities marked as <code>NationalSecurity</code>.</p>"
+        },
+        "PartnerOpportunityIdentifier":{
+          "shape":"GetOpportunityResponsePartnerOpportunityIdentifierString",
+          "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner.</p>"
         },
         "Customer":{
           "shape":"Customer",
           "documentation":"<p>Specifies details of the customer associated with the <code>Opportunity</code>.</p>"
         },
-        "Id":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Read-only, system generated <code>Opportunity</code> unique identifier.</p>"
-        },
-        "LastModifiedDate":{
-          "shape":"DateTime",
-          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified.</p>"
+        "Project":{
+          "shape":"Project",
+          "documentation":"<p>An object that contains project details summary for the <code>Opportunity</code>.</p>"
         },
-        "LifeCycle":{
-          "shape":"LifeCycle",
-          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
+        "OpportunityType":{
+          "shape":"OpportunityType",
+          "documentation":"<p>Specifies the opportunity type as renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, which helps to ensure service continuity.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of a customer's contract or subscription, either by adding new services or increasing the volume of existing services.</p> </li> </ul>"
         },
         "Marketing":{
           "shape":"Marketing",
           "documentation":"<p>An object that contains marketing details for the <code>Opportunity</code>.</p>"
         },
-        "NationalSecurity":{
-          "shape":"NationalSecurity",
-          "documentation":"<p>Indicates whether the <code>Opportunity</code> pertains to a national security project. This field must be set to <code>true</code> only when the customer's industry is <i>Government</i>. Additional privacy and security measures apply during the review and management process for opportunities marked as <code>NationalSecurity</code>.</p>"
-        },
-        "OpportunityTeam":{
-          "shape":"PartnerOpportunityTeamMembersList",
-          "documentation":"<p>Represents the internal team handling the opportunity. Specify the members involved in collaborating on this opportunity within the partner's organization.</p>"
+        "SoftwareRevenue":{
+          "shape":"SoftwareRevenue",
+          "documentation":"<p>Specifies details of a customer's procurement terms. Required only for partners in eligible programs.</p>"
         },
-        "OpportunityType":{
-          "shape":"OpportunityType",
-          "documentation":"<p>Specifies the opportunity type as renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, which helps to ensure service continuity.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of a customer's contract or subscription, either by adding new services or increasing the volume of existing services.</p> </li> </ul>"
+        "Id":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Read-only, system generated <code>Opportunity</code> unique identifier.</p>"
         },
-        "PartnerOpportunityIdentifier":{
-          "shape":"GetOpportunityResponsePartnerOpportunityIdentifierString",
-          "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner.</p>"
+        "Arn":{
+          "shape":"OpportunityArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the opportunity.</p>"
         },
-        "PrimaryNeedsFromAws":{
-          "shape":"PrimaryNeedsFromAws",
-          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an Amazon Web Services seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connect with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs Amazon Web Services RFx support.</p> </li> </ul>"
+        "LastModifiedDate":{
+          "shape":"DateTime",
+          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified.</p>"
         },
-        "Project":{
-          "shape":"Project",
-          "documentation":"<p>An object that contains project details summary for the <code>Opportunity</code>.</p>"
+        "CreatedDate":{
+          "shape":"DateTime",
+          "documentation":"<p> <code>DateTime</code> when the <code>Opportunity</code> was last created.</p>"
         },
         "RelatedEntityIdentifiers":{
           "shape":"RelatedEntityIdentifiers",
           "documentation":"<p>Provides information about the associations of other entities with the opportunity. These entities include identifiers for <code>AWSProducts</code>, <code>Partner Solutions</code>, and <code>AWSMarketplaceOffers</code>.</p>"
         },
-        "SoftwareRevenue":{
-          "shape":"SoftwareRevenue",
-          "documentation":"<p>Specifies details of a customer's procurement terms. Required only for partners in eligible programs.</p>"
+        "LifeCycle":{
+          "shape":"LifeCycle",
+          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
+        },
+        "OpportunityTeam":{
+          "shape":"PartnerOpportunityTeamMembersList",
+          "documentation":"<p>Represents the internal team handling the opportunity. Specify the members involved in collaborating on this opportunity within the partner's organization.</p>"
         }
       }
     },
@@ -3153,53 +3163,53 @@
       "type":"structure",
       "required":["Catalog"],
       "members":{
-        "Arn":{
-          "shape":"ResourceSnapshotJobArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the snapshot job. This globally unique identifier can be used for resource-specific operations across AWS services. </p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>The catalog in which the snapshot job was created. This will match the Catalog specified in the request. </p>"
         },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>The date and time when the snapshot job was created in ISO 8601 format (UTC). Example: \"2023-05-01T20:37:46Z\" </p>"
-        },
-        "EngagementId":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p>The identifier of the engagement associated with this snapshot job. This links the job to a specific engagement context. </p>"
-        },
         "Id":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p>The unique identifier of the snapshot job. This matches the ResourceSnapshotJobIdentifier provided in the request. </p>"
         },
-        "LastFailure":{
-          "shape":"String",
-          "documentation":"<p>If the job has encountered any failures, this field contains the error message from the most recent failure. This can be useful for troubleshooting issues with the job. </p>"
+        "Arn":{
+          "shape":"ResourceSnapshotJobArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the snapshot job. This globally unique identifier can be used for resource-specific operations across AWS services. </p>"
         },
-        "LastSuccessfulExecutionDate":{
-          "shape":"DateTime",
-          "documentation":"<p>The date and time of the last successful execution of the job, in ISO 8601 format (UTC). Example: \"2023-05-01T20:37:46Z\" </p>"
+        "EngagementId":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p>The identifier of the engagement associated with this snapshot job. This links the job to a specific engagement context. </p>"
         },
-        "ResourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource being snapshotted. This provides a globally unique identifier for the resource across AWS. </p>"
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of resource being snapshotted. This would have \"Opportunity\" as a value as it is dependent on the supported resource type.</p>"
         },
         "ResourceId":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The identifier of the specific resource being snapshotted. The format might vary depending on the ResourceType. </p>"
         },
+        "ResourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource being snapshotted. This provides a globally unique identifier for the resource across AWS. </p>"
+        },
         "ResourceSnapshotTemplateName":{
           "shape":"ResourceTemplateName",
           "documentation":"<p>The name of the template used for creating the snapshot. This is the same as the template name. It defines the structure and content of the snapshot.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource being snapshotted. This would have \"Opportunity\" as a value as it is dependent on the supported resource type.</p>"
+        "CreatedAt":{
+          "shape":"DateTime",
+          "documentation":"<p>The date and time when the snapshot job was created in ISO 8601 format (UTC). Example: \"2023-05-01T20:37:46Z\" </p>"
         },
         "Status":{
           "shape":"ResourceSnapshotJobStatus",
           "documentation":"<p>The current status of the snapshot job. Valid values:</p> <ul> <li> <p>STOPPED: The job is not currently running.</p> </li> <li> <p>RUNNING: The job is actively executing.</p> </li> </ul>"
+        },
+        "LastSuccessfulExecutionDate":{
+          "shape":"DateTime",
+          "documentation":"<p>The date and time of the last successful execution of the job, in ISO 8601 format (UTC). Example: \"2023-05-01T20:37:46Z\" </p>"
+        },
+        "LastFailure":{
+          "shape":"String",
+          "documentation":"<p>If the job has encountered any failures, this field contains the error message from the most recent failure. This can be useful for troubleshooting issues with the job. </p>"
         }
       }
     },
@@ -3208,9 +3218,9 @@
       "required":[
         "Catalog",
         "EngagementIdentifier",
+        "ResourceType",
         "ResourceIdentifier",
-        "ResourceSnapshotTemplateIdentifier",
-        "ResourceType"
+        "ResourceSnapshotTemplateIdentifier"
       ],
       "members":{
         "Catalog":{
@@ -3221,6 +3231,10 @@
           "shape":"EngagementIdentifier",
           "documentation":"<p>The unique identifier of the engagement associated with the snapshot. This field links the snapshot to a specific engagement context.</p>"
         },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>Specifies the type of resource that was snapshotted. This field determines the structure and content of the snapshot payload. Valid value includes:<code>Opportunity</code>: For opportunity-related data. </p>"
+        },
         "ResourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The unique identifier of the specific resource that was snapshotted. The format and constraints of this identifier depend on the ResourceType specified. For <code>Opportunity</code> type, it will be an <code>opportunity ID</code> </p>"
@@ -3229,10 +3243,6 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p>he name of the template that defines the schema for the snapshot. This template determines which subset of the resource data is included in the snapshot and must correspond to an existing and valid template for the specified <code>ResourceType</code>.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>Specifies the type of resource that was snapshotted. This field determines the structure and content of the snapshot payload. Valid value includes:<code>Opportunity</code>: For opportunity-related data. </p>"
-        },
         "Revision":{
           "shape":"ResourceSnapshotRevision",
           "documentation":"<p>Specifies which revision of the snapshot to retrieve. If omitted returns the latest revision.</p>"
@@ -3243,27 +3253,30 @@
       "type":"structure",
       "required":["Catalog"],
       "members":{
-        "Arn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the resource snapshot.</p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>The catalog in which the snapshot was created. Matches the Catalog specified in the request.</p>"
         },
-        "CreatedAt":{
-          "shape":"DateTime",
-          "documentation":"<p>The timestamp when the snapshot was created, in ISO 8601 format (e.g., \"2023-06-01T14:30:00Z\"). This allows for precise tracking of when the snapshot was taken. </p>"
+        "Arn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the resource snapshot.</p>"
         },
         "CreatedBy":{
           "shape":"AwsAccount",
           "documentation":"<p>The AWS account ID of the principal (user or role) who created the snapshot. This helps in tracking the origin of the snapshot. </p>"
         },
+        "CreatedAt":{
+          "shape":"DateTime",
+          "documentation":"<p>The timestamp when the snapshot was created, in ISO 8601 format (e.g., \"2023-06-01T14:30:00Z\"). This allows for precise tracking of when the snapshot was taken. </p>"
+        },
         "EngagementId":{
           "shape":"EngagementIdentifier",
           "documentation":"<p>The identifier of the engagement associated with this snapshot. Matches the EngagementIdentifier specified in the request. </p>"
         },
-        "Payload":{"shape":"ResourceSnapshotPayload"},
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of the resource that was snapshotted. Matches the ResourceType specified in the request.</p>"
+        },
         "ResourceId":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The identifier of the specific resource that was snapshotted. Matches the ResourceIdentifier specified in the request.</p>"
@@ -3272,14 +3285,11 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p>The name of the view used for this snapshot. This is the same as the template name.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of the resource that was snapshotted. Matches the ResourceType specified in the request.</p>"
-        },
         "Revision":{
           "shape":"ResourceSnapshotRevision",
           "documentation":"<p>The revision number of this snapshot. This is a positive integer that is sequential and unique within the context of a resource view.</p>"
-        }
+        },
+        "Payload":{"shape":"ResourceSnapshotPayload"}
       }
     },
     "GetSellingSystemSettingsRequest":{
@@ -3356,23 +3366,24 @@
       "type":"structure",
       "required":[
         "Message",
-        "Payload",
-        "Receiver"
+        "Receiver",
+        "Payload"
       ],
       "members":{
         "Message":{
           "shape":"InvitationMessage",
           "documentation":"<p> A message accompanying the invitation. </p>"
         },
-        "Payload":{"shape":"Payload"},
-        "Receiver":{"shape":"Receiver"}
+        "Receiver":{"shape":"Receiver"},
+        "Payload":{"shape":"Payload"}
       },
       "documentation":"<p> The Invitation structure represents an invitation exchanged between partners and AWS. It includes a message, receiver information, and a payload providing context for the invitation. </p>"
     },
     "InvitationMessage":{
       "type":"string",
       "max":255,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "InvitationStatus":{
       "type":"string",
@@ -3422,6 +3433,10 @@
     "LifeCycle":{
       "type":"structure",
       "members":{
+        "Stage":{
+          "shape":"Stage",
+          "documentation":"<p>Specifies the current stage of the <code>Opportunity</code>'s lifecycle as it maps to Amazon Web Services stages from the current stage in the partner CRM. This field provides a translated value of the stage, and offers insight into the <code>Opportunity</code>'s progression in the sales cycle, according to Amazon Web Services definitions.</p> <note> <p>A lead and a prospect must be further matured to a <code>Qualified</code> opportunity before submission. Opportunities that were closed/lost before submission aren't suitable for submission.</p> </note> <p>The descriptions of each sales stage are:</p> <ul> <li> <p>Prospect: Amazon Web Services identifies the opportunity. It can be active (Comes directly from the end customer through a lead) or latent (Your account team believes it exists based on research, account plans, sales plays).</p> </li> <li> <p>Qualified: Your account team engaged with the customer to discuss viability and requirements. The customer agreed that the opportunity is real, of interest, and may solve business/technical needs.</p> </li> <li> <p>Technical Validation: All parties understand the implementation plan.</p> </li> <li> <p>Business Validation: Pricing was proposed, and all parties agree to the steps to close.</p> </li> <li> <p>Committed: The customer signed the contract, but Amazon Web Services hasn't started billing.</p> </li> <li> <p>Launched: The workload is complete, and Amazon Web Services has started billing.</p> </li> <li> <p>Closed Lost: The opportunity is lost, and there are no steps to move forward.</p> </li> </ul>"
+        },
         "ClosedLostReason":{
           "shape":"ClosedLostReason",
           "documentation":"<p>Specifies the reason code when an opportunity is marked as <i>Closed Lost</i>. When you select an appropriate reason code, you communicate the context for closing the <code>Opportunity</code>, and aid in accurate reports and analysis of opportunity outcomes. The possible values are:</p> <ul> <li> <p>Customer Deficiency: The customer lacked necessary resources or capabilities.</p> </li> <li> <p>Delay/Cancellation of Project: The project was delayed or canceled.</p> </li> <li> <p>Legal/Tax/Regulatory: Legal, tax, or regulatory issues prevented progress.</p> </li> <li> <p>Lost to Competitor—Google: The opportunity was lost to Google.</p> </li> <li> <p>Lost to Competitor—Microsoft: The opportunity was lost to Microsoft.</p> </li> <li> <p>Lost to Competitor—SoftLayer: The opportunity was lost to SoftLayer.</p> </li> <li> <p>Lost to Competitor—VMWare: The opportunity was lost to VMWare.</p> </li> <li> <p>Lost to Competitor—Other: The opportunity was lost to a competitor not listed above.</p> </li> <li> <p>No Opportunity: There was no opportunity to pursue.</p> </li> <li> <p>On Premises Deployment: The customer chose an on-premises solution.</p> </li> <li> <p>Partner Gap: The partner lacked necessary resources or capabilities.</p> </li> <li> <p>Price: The price was not competitive or acceptable to the customer.</p> </li> <li> <p>Security/Compliance: Security or compliance issues prevented progress.</p> </li> <li> <p>Technical Limitations: Technical limitations prevented progress.</p> </li> <li> <p>Customer Experience: Issues related to the customer's experience impacted the decision.</p> </li> <li> <p>Other: Any reason not covered by the other values.</p> </li> <li> <p>People/Relationship/Governance: Issues related to people, relationships, or governance.</p> </li> <li> <p>Product/Technology: Issues related to the product or technology.</p> </li> <li> <p>Financial/Commercial: Financial or commercial issues impacted the decision.</p> </li> </ul>"
@@ -3430,29 +3445,25 @@
           "shape":"LifeCycleNextStepsString",
           "documentation":"<p>Specifies the upcoming actions or tasks for the <code>Opportunity</code>. Use this field to communicate with Amazon Web Services about the next actions required for the <code>Opportunity</code>.</p>"
         },
-        "NextStepsHistory":{
-          "shape":"LifeCycleNextStepsHistoryList",
-          "documentation":"<p>Captures a chronological record of the next steps or actions planned or taken for the current opportunity, along with the timestamp.</p>"
-        },
-        "ReviewComments":{
-          "shape":"String",
-          "documentation":"<p>Indicates why an opportunity was sent back for further details. Partners must take corrective action based on the <code>ReviewComments</code>.</p>"
+        "TargetCloseDate":{
+          "shape":"Date",
+          "documentation":"<p>Specifies the date when Amazon Web Services expects to start significant billing, when the project finishes, and when it moves into production. This field informs the Amazon Web Services seller about when the opportunity launches and starts to incur Amazon Web Services usage.</p> <p>Ensure the <code>Target Close Date</code> isn't in the past.</p>"
         },
         "ReviewStatus":{
           "shape":"ReviewStatus",
           "documentation":"<p>Indicates the review status of an opportunity referred by a partner. This field is read-only and only applicable for partner referrals. The possible values are:</p> <ul> <li> <p>Pending Submission: Not submitted for validation (editable).</p> </li> <li> <p>Submitted: Submitted for validation, and Amazon Web Services hasn't reviewed it (read-only).</p> </li> <li> <p>In Review: Amazon Web Services is validating (read-only).</p> </li> <li> <p>Action Required: Issues that Amazon Web Services highlights need to be addressed. Partners should use the <code>UpdateOpportunity</code> API action to update the opportunity and helps to ensure that all required changes are made. Only the following fields are editable when the <code>Lifecycle.ReviewStatus</code> is <code>Action Required</code>:</p> <ul> <li> <p>Customer.Account.Address.City</p> </li> <li> <p>Customer.Account.Address.CountryCode</p> </li> <li> <p>Customer.Account.Address.PostalCode</p> </li> <li> <p>Customer.Account.Address.StateOrRegion</p> </li> <li> <p>Customer.Account.Address.StreetAddress</p> </li> <li> <p>Customer.Account.WebsiteUrl</p> </li> <li> <p>LifeCycle.TargetCloseDate</p> </li> <li> <p>Project.ExpectedMonthlyAWSRevenue.Amount</p> </li> <li> <p>Project.ExpectedMonthlyAWSRevenue.CurrencyCode</p> </li> <li> <p>Project.CustomerBusinessProblem</p> </li> <li> <p>PartnerOpportunityIdentifier</p> </li> </ul> <p>After updates, the opportunity re-enters the validation phase. This process repeats until all issues are resolved, and the opportunity's <code>Lifecycle.ReviewStatus</code> is set to <code>Approved</code> or <code>Rejected</code>.</p> </li> <li> <p>Approved: Validated and converted into the Amazon Web Services seller's pipeline (editable).</p> </li> <li> <p>Rejected: Disqualified (read-only).</p> </li> </ul>"
         },
-        "ReviewStatusReason":{
+        "ReviewComments":{
           "shape":"String",
-          "documentation":"<p>Indicates the reason a decision was made during the opportunity review process. This field combines the reasons for both disqualified and action required statuses, and provide clarity for why an opportunity was disqualified or requires further action.</p>"
+          "documentation":"<p>Contains detailed feedback from Amazon Web Services when requesting additional information from partners. Provides specific guidance on what partners need to provide or clarify for opportunity validation, complementing the <code>ReviewStatusReason</code> field.</p>"
         },
-        "Stage":{
-          "shape":"Stage",
-          "documentation":"<p>Specifies the current stage of the <code>Opportunity</code>'s lifecycle as it maps to Amazon Web Services stages from the current stage in the partner CRM. This field provides a translated value of the stage, and offers insight into the <code>Opportunity</code>'s progression in the sales cycle, according to Amazon Web Services definitions.</p> <note> <p>A lead and a prospect must be further matured to a <code>Qualified</code> opportunity before submission. Opportunities that were closed/lost before submission aren't suitable for submission.</p> </note> <p>The descriptions of each sales stage are:</p> <ul> <li> <p>Prospect: Amazon Web Services identifies the opportunity. It can be active (Comes directly from the end customer through a lead) or latent (Your account team believes it exists based on research, account plans, sales plays).</p> </li> <li> <p>Qualified: Your account team engaged with the customer to discuss viability and requirements. The customer agreed that the opportunity is real, of interest, and may solve business/technical needs.</p> </li> <li> <p>Technical Validation: All parties understand the implementation plan.</p> </li> <li> <p>Business Validation: Pricing was proposed, and all parties agree to the steps to close.</p> </li> <li> <p>Committed: The customer signed the contract, but Amazon Web Services hasn't started billing.</p> </li> <li> <p>Launched: The workload is complete, and Amazon Web Services has started billing.</p> </li> <li> <p>Closed Lost: The opportunity is lost, and there are no steps to move forward.</p> </li> </ul>"
+        "ReviewStatusReason":{
+          "shape":"String",
+          "documentation":"<p>Code indicating the validation decision during the Amazon Web Services opportunity review. Applies when status is <code>Rejected</code> or <code>Action Required</code>. Used to document validation results for AWS Partner Referrals and indicate when additional information is needed from partners as part of the APN Customer Engagement (ACE) program.</p>"
         },
-        "TargetCloseDate":{
-          "shape":"Date",
-          "documentation":"<p>Specifies the date when Amazon Web Services expects to start significant billing, when the project finishes, and when it moves into production. This field informs the Amazon Web Services seller about when the opportunity launches and starts to incur Amazon Web Services usage.</p> <p>Ensure the <code>Target Close Date</code> isn't in the past.</p>"
+        "NextStepsHistory":{
+          "shape":"LifeCycleNextStepsHistoryList",
+          "documentation":"<p>Captures a chronological record of the next steps or actions planned or taken for the current opportunity, along with the timestamp.</p>"
         }
       },
       "documentation":"<p>An object that contains the <code>Opportunity</code> lifecycle's details.</p>"
@@ -3460,9 +3471,9 @@
     "LifeCycleForView":{
       "type":"structure",
       "members":{
-        "NextSteps":{
-          "shape":"LifeCycleForViewNextStepsString",
-          "documentation":"<p> Describes the next steps for the opportunity shared through a snapshot. </p>"
+        "TargetCloseDate":{
+          "shape":"Date",
+          "documentation":"<p> The projected launch date of the opportunity shared through a snapshot. </p>"
         },
         "ReviewStatus":{
           "shape":"ReviewStatus",
@@ -3472,9 +3483,9 @@
           "shape":"Stage",
           "documentation":"<p> Defines the current stage of the opportunity shared through a snapshot. </p>"
         },
-        "TargetCloseDate":{
-          "shape":"Date",
-          "documentation":"<p> The projected launch date of the opportunity shared through a snapshot. </p>"
+        "NextSteps":{
+          "shape":"LifeCycleForViewNextStepsString",
+          "documentation":"<p> Describes the next steps for the opportunity shared through a snapshot. </p>"
         }
       },
       "documentation":"<p> Provides the lifecycle view of an opportunity resource shared through a snapshot. </p>"
@@ -3500,6 +3511,10 @@
     "LifeCycleSummary":{
       "type":"structure",
       "members":{
+        "Stage":{
+          "shape":"Stage",
+          "documentation":"<p>Specifies the current stage of the <code>Opportunity</code>'s lifecycle as it maps to Amazon Web Services stages from the current stage in the partner CRM. This field provides a translated value of the stage, and offers insight into the <code>Opportunity</code>'s progression in the sales cycle, according to Amazon Web Services definitions.</p> <note> <p>A lead and a prospect must be further matured to a <code>Qualified</code> opportunity before submission. Opportunities that were closed/lost before submission aren't suitable for submission.</p> </note> <p>The descriptions of each sales stage are:</p> <ul> <li> <p>Prospect: Amazon Web Services identifies the opportunity. It can be active (Comes directly from the end customer through a lead) or latent (Your account team believes it exists based on research, account plans, sales plays).</p> </li> <li> <p>Qualified: Your account team engaged with the customer to discuss viability and understand requirements. The customer agreed that the opportunity is real, of interest, and may solve business/technical needs.</p> </li> <li> <p>Technical Validation: All parties understand the implementation plan.</p> </li> <li> <p>Business Validation: Pricing was proposed, and all parties agree to the steps to close.</p> </li> <li> <p>Committed: The customer signed the contract, but Amazon Web Services hasn't started billing.</p> </li> <li> <p>Launched: The workload is complete, and Amazon Web Services has started billing.</p> </li> <li> <p>Closed Lost: The opportunity is lost, and there are no steps to move forward.</p> </li> </ul>"
+        },
         "ClosedLostReason":{
           "shape":"ClosedLostReason",
           "documentation":"<p>Specifies the reason code when an opportunity is marked as <i>Closed Lost</i>. When you select an appropriate reason code, you communicate the context for closing the <code>Opportunity</code>, and aid in accurate reports and analysis of opportunity outcomes.</p>"
@@ -3508,25 +3523,21 @@
           "shape":"LifeCycleSummaryNextStepsString",
           "documentation":"<p>Specifies the upcoming actions or tasks for the <code>Opportunity</code>. This field is utilized to communicate to Amazon Web Services the next actions required for the <code>Opportunity</code>.</p>"
         },
-        "ReviewComments":{
-          "shape":"String",
-          "documentation":"<p>Indicates why an opportunity was sent back for further details. Partners must take corrective action based on the <code>ReviewComments</code>.</p>"
+        "TargetCloseDate":{
+          "shape":"Date",
+          "documentation":"<p>Specifies the date when Amazon Web Services expects to start significant billing, when the project finishes, and when it moves into production. This field informs the Amazon Web Services seller about when the opportunity launches and starts to incur Amazon Web Services usage.</p> <p>Ensure the <code>Target Close Date</code> isn't in the past.</p>"
         },
         "ReviewStatus":{
           "shape":"ReviewStatus",
           "documentation":"<p>Indicates the review status of a partner referred opportunity. This field is read-only and only applicable for partner referrals. Valid values:</p> <ul> <li> <p>Pending Submission: Not submitted for validation (editable).</p> </li> <li> <p>Submitted: Submitted for validation and not yet Amazon Web Services reviewed (read-only).</p> </li> <li> <p>In Review: Undergoing Amazon Web Services validation (read-only).</p> </li> <li> <p>Action Required: Address any issues Amazon Web Services highlights. Use the <code>UpdateOpportunity</code> API action to update the opportunity, and ensure you make all required changes. Only these fields are editable when the <code>Lifecycle.ReviewStatus</code> is <code>Action Required</code>:</p> <ul> <li> <p>Customer.Account.Address.City</p> </li> <li> <p>Customer.Account.Address.CountryCode</p> </li> <li> <p>Customer.Account.Address.PostalCode</p> </li> <li> <p>Customer.Account.Address.StateOrRegion</p> </li> <li> <p>Customer.Account.Address.StreetAddress</p> </li> <li> <p>Customer.Account.WebsiteUrl</p> </li> <li> <p>LifeCycle.TargetCloseDate</p> </li> <li> <p>Project.ExpectedCustomerSpend.Amount</p> </li> <li> <p>Project.ExpectedCustomerSpend.CurrencyCode</p> </li> <li> <p>Project.CustomerBusinessProblem</p> </li> <li> <p>PartnerOpportunityIdentifier</p> </li> </ul> <p>After updates, the opportunity re-enters the validation phase. This process repeats until all issues are resolved, and the opportunity's <code>Lifecycle.ReviewStatus</code> is set to <code>Approved</code> or <code>Rejected</code>.</p> </li> <li> <p>Approved: Validated and converted into the Amazon Web Services seller's pipeline (editable).</p> </li> <li> <p>Rejected: Disqualified (read-only).</p> </li> </ul>"
         },
+        "ReviewComments":{
+          "shape":"String",
+          "documentation":"<p>Indicates why an opportunity was sent back for further details. Partners must take corrective action based on the <code>ReviewComments</code>.</p>"
+        },
         "ReviewStatusReason":{
           "shape":"String",
           "documentation":"<p>Indicates the reason a specific decision was taken during the opportunity review process. This field combines the reasons for both disqualified and action required statuses, and provides clarity for why an opportunity was disqualified or required further action.</p>"
-        },
-        "Stage":{
-          "shape":"Stage",
-          "documentation":"<p>Specifies the current stage of the <code>Opportunity</code>'s lifecycle as it maps to Amazon Web Services stages from the current stage in the partner CRM. This field provides a translated value of the stage, and offers insight into the <code>Opportunity</code>'s progression in the sales cycle, according to Amazon Web Services definitions.</p> <note> <p>A lead and a prospect must be further matured to a <code>Qualified</code> opportunity before submission. Opportunities that were closed/lost before submission aren't suitable for submission.</p> </note> <p>The descriptions of each sales stage are:</p> <ul> <li> <p>Prospect: Amazon Web Services identifies the opportunity. It can be active (Comes directly from the end customer through a lead) or latent (Your account team believes it exists based on research, account plans, sales plays).</p> </li> <li> <p>Qualified: Your account team engaged with the customer to discuss viability and understand requirements. The customer agreed that the opportunity is real, of interest, and may solve business/technical needs.</p> </li> <li> <p>Technical Validation: All parties understand the implementation plan.</p> </li> <li> <p>Business Validation: Pricing was proposed, and all parties agree to the steps to close.</p> </li> <li> <p>Committed: The customer signed the contract, but Amazon Web Services hasn't started billing.</p> </li> <li> <p>Launched: The workload is complete, and Amazon Web Services has started billing.</p> </li> <li> <p>Closed Lost: The opportunity is lost, and there are no steps to move forward.</p> </li> </ul>"
-        },
-        "TargetCloseDate":{
-          "shape":"Date",
-          "documentation":"<p>Specifies the date when Amazon Web Services expects to start significant billing, when the project finishes, and when it moves into production. This field informs the Amazon Web Services seller about when the opportunity launches and starts to incur Amazon Web Services usage.</p> <p>Ensure the <code>Target Close Date</code> isn't in the past.</p>"
         }
       },
       "documentation":"<p>An object that contains a <code>LifeCycle</code> object's subset of fields.</p>"
@@ -3544,41 +3555,41 @@
     "ListEngagementByAcceptingInvitationTaskSummary":{
       "type":"structure",
       "members":{
-        "EngagementInvitationId":{
-          "shape":"EngagementInvitationIdentifier",
-          "documentation":"<p> The unique identifier of the engagement invitation that was accepted. </p>"
+        "TaskId":{
+          "shape":"TaskIdentifier",
+          "documentation":"<p> Unique identifier of the task. </p>"
+        },
+        "TaskArn":{
+          "shape":"TaskArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) that uniquely identifies the task. </p>"
+        },
+        "StartTime":{
+          "shape":"DateTime",
+          "documentation":"<p> Task start timestamp. </p>"
+        },
+        "TaskStatus":{
+          "shape":"TaskStatus",
+          "documentation":"<p> Status of the task. </p>"
         },
         "Message":{
           "shape":"String",
           "documentation":"<p> Detailed message describing the failure and possible recovery steps. </p>"
         },
-        "OpportunityId":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p> Unique identifier of opportunity that was created. </p>"
-        },
         "ReasonCode":{
           "shape":"ReasonCode",
           "documentation":"<p> A code pointing to the specific reason for the failure. </p>"
         },
+        "OpportunityId":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p> Unique identifier of opportunity that was created. </p>"
+        },
         "ResourceSnapshotJobId":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p> Unique identifier of the resource snapshot job that was created. </p>"
         },
-        "StartTime":{
-          "shape":"DateTime",
-          "documentation":"<p> Task start timestamp. </p>"
-        },
-        "TaskArn":{
-          "shape":"TaskArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) that uniquely identifies the task. </p>"
-        },
-        "TaskId":{
-          "shape":"TaskIdentifier",
-          "documentation":"<p> Unique identifier of the task. </p>"
-        },
-        "TaskStatus":{
-          "shape":"TaskStatus",
-          "documentation":"<p> Status of the task. </p>"
+        "EngagementInvitationId":{
+          "shape":"EngagementInvitationIdentifier",
+          "documentation":"<p> The unique identifier of the engagement invitation that was accepted. </p>"
         }
       },
       "documentation":"<p> Specifies a subset of fields associated with tasks related to accepting an engagement invitation. </p>"
@@ -3587,14 +3598,6 @@
       "type":"structure",
       "required":["Catalog"],
       "members":{
-        "Catalog":{
-          "shape":"CatalogIdentifier",
-          "documentation":"<p> Specifies the catalog related to the request. Valid values are: </p> <ul> <li> <p> AWS: Retrieves the request from the production AWS environment. </p> </li> <li> <p> Sandbox: Retrieves the request from a sandbox environment used for testing or development purposes. </p> </li> </ul>"
-        },
-        "EngagementInvitationIdentifier":{
-          "shape":"EngagementInvitationIdentifiers",
-          "documentation":"<p> Filters tasks by the identifiers of the engagement invitations they are processing. </p>"
-        },
         "MaxResults":{
           "shape":"ListEngagementByAcceptingInvitationTasksRequestMaxResultsInteger",
           "documentation":"<p> Use this parameter to control the number of items returned in each request, which can be useful for performance tuning and managing large result sets. </p>"
@@ -3603,21 +3606,29 @@
           "shape":"ListEngagementByAcceptingInvitationTasksRequestNextTokenString",
           "documentation":"<p> Use this parameter for pagination when the result set spans multiple pages. This value is obtained from the NextToken field in the response of a previous call to this API. </p>"
         },
-        "OpportunityIdentifier":{
-          "shape":"OpportunityIdentifiers",
-          "documentation":"<p> Filters tasks by the identifiers of the opportunities they created or are associated with. </p>"
-        },
         "Sort":{
           "shape":"ListTasksSortBase",
           "documentation":"<p> Specifies the sorting criteria for the returned results. This allows you to order the tasks based on specific attributes. </p>"
         },
-        "TaskIdentifier":{
-          "shape":"TaskIdentifiers",
-          "documentation":"<p> Filters tasks by their unique identifiers. Use this when you want to retrieve information about specific tasks. </p>"
+        "Catalog":{
+          "shape":"CatalogIdentifier",
+          "documentation":"<p> Specifies the catalog related to the request. Valid values are: </p> <ul> <li> <p> AWS: Retrieves the request from the production AWS environment. </p> </li> <li> <p> Sandbox: Retrieves the request from a sandbox environment used for testing or development purposes. </p> </li> </ul>"
         },
         "TaskStatus":{
           "shape":"TaskStatuses",
           "documentation":"<p> Filters the tasks based on their current status. This allows you to focus on tasks in specific states. </p>"
+        },
+        "OpportunityIdentifier":{
+          "shape":"OpportunityIdentifiers",
+          "documentation":"<p> Filters tasks by the identifiers of the opportunities they created or are associated with. </p>"
+        },
+        "EngagementInvitationIdentifier":{
+          "shape":"EngagementInvitationIdentifiers",
+          "documentation":"<p> Filters tasks by the identifiers of the engagement invitations they are processing. </p>"
+        },
+        "TaskIdentifier":{
+          "shape":"TaskIdentifiers",
+          "documentation":"<p> Filters tasks by their unique identifiers. Use this when you want to retrieve information about specific tasks. </p>"
         }
       }
     },
@@ -3635,13 +3646,13 @@
     "ListEngagementByAcceptingInvitationTasksResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p> A token used for pagination to retrieve the next page of results.If there are more results available, this field will contain a token that can be used in a subsequent API call to retrieve the next page. If there are no more results, this field will be null or an empty string. </p>"
-        },
         "TaskSummaries":{
           "shape":"ListEngagementByAcceptingInvitationTaskSummaries",
           "documentation":"<p> An array of <code>EngagementByAcceptingInvitationTaskSummary</code> objects, each representing a task that matches the specified filters. The array may be empty if no tasks match the criteria. </p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> A token used for pagination to retrieve the next page of results.If there are more results available, this field will contain a token that can be used in a subsequent API call to retrieve the next page. If there are no more results, this field will be null or an empty string. </p>"
         }
       }
     },
@@ -3652,45 +3663,45 @@
     "ListEngagementFromOpportunityTaskSummary":{
       "type":"structure",
       "members":{
-        "EngagementId":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p> The unique identifier of the engagement created as a result of the task. This field is populated when the task is completed successfully. </p>"
+        "TaskId":{
+          "shape":"TaskIdentifier",
+          "documentation":"<p> A unique identifier for a specific task. </p>"
         },
-        "EngagementInvitationId":{
-          "shape":"EngagementInvitationIdentifier",
-          "documentation":"<p>The unique identifier of the Engagement Invitation.</p>"
+        "TaskArn":{
+          "shape":"TaskArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) uniquely identifying this task within AWS. This ARN can be used for referencing the task in other AWS services or APIs. </p>"
+        },
+        "StartTime":{
+          "shape":"DateTime",
+          "documentation":"<p> The timestamp indicating when the task was initiated, in RFC 3339 5.6 date-time format. </p>"
+        },
+        "TaskStatus":{
+          "shape":"TaskStatus",
+          "documentation":"<p> The current status of the task. </p>"
         },
         "Message":{
           "shape":"String",
           "documentation":"<p> A detailed message providing additional information about the task, especially useful in case of failures. This field may contain error details or other relevant information about the task's execution </p>"
         },
-        "OpportunityId":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p> The unique identifier of the original Opportunity from which the Engagement is being created. This field helps track the source of the Engagement creation task. </p>"
-        },
         "ReasonCode":{
           "shape":"ReasonCode",
           "documentation":"<p> A code indicating the specific reason for a task failure. This field is populated when the task status is FAILED and provides a categorized reason for the failure. </p>"
         },
+        "OpportunityId":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p> The unique identifier of the original Opportunity from which the Engagement is being created. This field helps track the source of the Engagement creation task. </p>"
+        },
         "ResourceSnapshotJobId":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p> The identifier of the resource snapshot job associated with this task, if a snapshot was created as part of the Engagement creation process. </p>"
         },
-        "StartTime":{
-          "shape":"DateTime",
-          "documentation":"<p> The timestamp indicating when the task was initiated, in RFC 3339 5.6 date-time format. </p>"
-        },
-        "TaskArn":{
-          "shape":"TaskArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) uniquely identifying this task within AWS. This ARN can be used for referencing the task in other AWS services or APIs. </p>"
-        },
-        "TaskId":{
-          "shape":"TaskIdentifier",
-          "documentation":"<p> A unique identifier for a specific task. </p>"
+        "EngagementId":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p> The unique identifier of the engagement created as a result of the task. This field is populated when the task is completed successfully. </p>"
         },
-        "TaskStatus":{
-          "shape":"TaskStatus",
-          "documentation":"<p> The current status of the task. </p>"
+        "EngagementInvitationId":{
+          "shape":"EngagementInvitationIdentifier",
+          "documentation":"<p>The unique identifier of the Engagement Invitation.</p>"
         }
       },
       "documentation":"<p> Provides a summary of a task related to creating an engagement from an opportunity. This structure contains key information about the task's status, associated identifiers, and any failure details. </p>"
@@ -3699,14 +3710,6 @@
       "type":"structure",
       "required":["Catalog"],
       "members":{
-        "Catalog":{
-          "shape":"CatalogIdentifier",
-          "documentation":"<p> Specifies the catalog related to the request. Valid values are: </p> <ul> <li> <p> AWS: Retrieves the request from the production AWS environment. </p> </li> <li> <p> Sandbox: Retrieves the request from a sandbox environment used for testing or development purposes. </p> </li> </ul>"
-        },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifiers",
-          "documentation":"<p> Filters tasks by the identifiers of the engagements they created or are associated with. </p>"
-        },
         "MaxResults":{
           "shape":"ListEngagementFromOpportunityTasksRequestMaxResultsInteger",
           "documentation":"<p> Specifies the maximum number of results to return in a single page of the response.Use this parameter to control the number of items returned in each request, which can be useful for performance tuning and managing large result sets. </p>"
@@ -3715,21 +3718,29 @@
           "shape":"ListEngagementFromOpportunityTasksRequestNextTokenString",
           "documentation":"<p> The token for requesting the next page of results. This value is obtained from the NextToken field in the response of a previous call to this API. Use this parameter for pagination when the result set spans multiple pages. </p>"
         },
-        "OpportunityIdentifier":{
-          "shape":"OpportunityIdentifiers",
-          "documentation":"<p> The identifier of the original opportunity associated with this task. </p>"
-        },
         "Sort":{
           "shape":"ListTasksSortBase",
           "documentation":"<p> Specifies the sorting criteria for the returned results. This allows you to order the tasks based on specific attributes. </p>"
         },
-        "TaskIdentifier":{
-          "shape":"TaskIdentifiers",
-          "documentation":"<p> Filters tasks by their unique identifiers. Use this when you want to retrieve information about specific tasks. </p>"
+        "Catalog":{
+          "shape":"CatalogIdentifier",
+          "documentation":"<p> Specifies the catalog related to the request. Valid values are: </p> <ul> <li> <p> AWS: Retrieves the request from the production AWS environment. </p> </li> <li> <p> Sandbox: Retrieves the request from a sandbox environment used for testing or development purposes. </p> </li> </ul>"
         },
         "TaskStatus":{
           "shape":"TaskStatuses",
           "documentation":"<p> Filters the tasks based on their current status. This allows you to focus on tasks in specific states. </p>"
+        },
+        "TaskIdentifier":{
+          "shape":"TaskIdentifiers",
+          "documentation":"<p> Filters tasks by their unique identifiers. Use this when you want to retrieve information about specific tasks. </p>"
+        },
+        "OpportunityIdentifier":{
+          "shape":"OpportunityIdentifiers",
+          "documentation":"<p> The identifier of the original opportunity associated with this task. </p>"
+        },
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifiers",
+          "documentation":"<p> Filters tasks by the identifiers of the engagements they created or are associated with. </p>"
         }
       }
     },
@@ -3747,13 +3758,13 @@
     "ListEngagementFromOpportunityTasksResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p> A token used for pagination to retrieve the next page of results. If there are more results available, this field will contain a token that can be used in a subsequent API call to retrieve the next page. If there are no more results, this field will be null or an empty string. </p>"
-        },
         "TaskSummaries":{
           "shape":"ListEngagementFromOpportunityTaskSummaries",
           "documentation":"<p> TaskSummaries An array of TaskSummary objects containing details about each task. </p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> A token used for pagination to retrieve the next page of results. If there are more results available, this field will contain a token that can be used in a subsequent API call to retrieve the next page. If there are no more results, this field will be null or an empty string. </p>"
         }
       }
     },
@@ -3768,10 +3779,6 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog from which to list the engagement invitations. Use <code>AWS</code> for production invitations or <code>Sandbox</code> for testing environments.</p>"
         },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifiers",
-          "documentation":"<p> Retrieves a list of engagement invitation summaries based on specified filters. The ListEngagementInvitations operation allows you to view all invitations that you have sent or received. You must specify the ParticipantType to filter invitations where you are either the SENDER or the RECEIVER. Invitations will automatically expire if not accepted within 15 days. </p>"
-        },
         "MaxResults":{
           "shape":"PageSize",
           "documentation":"<p>Specifies the maximum number of engagement invitations to return in the response. If more results are available, a pagination token will be provided.</p>"
@@ -3780,25 +3787,29 @@
           "shape":"String",
           "documentation":"<p>A pagination token used to retrieve additional pages of results when the response to a previous request was truncated. Pass this token to continue listing invitations from where the previous call left off.</p>"
         },
-        "ParticipantType":{
-          "shape":"ParticipantType",
-          "documentation":"<p>Specifies the type of participant for which to list engagement invitations. Identifies the role of the participant.</p>"
+        "Sort":{
+          "shape":"OpportunityEngagementInvitationSort",
+          "documentation":"<p>Specifies the sorting options for listing engagement invitations. Invitations can be sorted by fields such as <code>InvitationDate</code> or <code>Status</code> to help partners view results in their preferred order.</p>"
         },
         "PayloadType":{
           "shape":"EngagementInvitationsPayloadType",
           "documentation":"<p>Defines the type of payload associated with the engagement invitations to be listed. The attributes in this payload help decide on acceptance or rejection of the invitation.</p>"
         },
-        "SenderAwsAccountId":{
-          "shape":"AwsAccountIdOrAliasList",
-          "documentation":"<p> List of sender AWS account IDs to filter the invitations. </p>"
-        },
-        "Sort":{
-          "shape":"OpportunityEngagementInvitationSort",
-          "documentation":"<p>Specifies the sorting options for listing engagement invitations. Invitations can be sorted by fields such as <code>InvitationDate</code> or <code>Status</code> to help partners view results in their preferred order.</p>"
+        "ParticipantType":{
+          "shape":"ParticipantType",
+          "documentation":"<p>Specifies the type of participant for which to list engagement invitations. Identifies the role of the participant.</p>"
         },
         "Status":{
           "shape":"InvitationStatusList",
           "documentation":"<p> Status values to filter the invitations. </p>"
+        },
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifiers",
+          "documentation":"<p> Retrieves a list of engagement invitation summaries based on specified filters. The ListEngagementInvitations operation allows you to view all invitations that you have sent or received. You must specify the ParticipantType to filter invitations where you are either the SENDER or the RECEIVER. Invitations will automatically expire if not accepted within 15 days. </p>"
+        },
+        "SenderAwsAccountId":{
+          "shape":"AwsAccountIdOrAliasList",
+          "documentation":"<p> List of sender AWS account IDs to filter the invitations. </p>"
         }
       }
     },
@@ -3862,14 +3873,6 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog in which to search for engagement-resource associations. Valid Values: \"AWS\" or \"Sandbox\"</p> <ul> <li> <p> <code>AWS</code> for production environments.</p> </li> <li> <p> <code>Sandbox</code> for testing and development purposes.</p> </li> </ul>"
         },
-        "CreatedBy":{
-          "shape":"AwsAccount",
-          "documentation":"<p>Filters the response to include only snapshots of resources owned by the specified AWS account ID. Use this when you want to find associations related to resources owned by a particular account. </p>"
-        },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p>Filters the results to include only associations related to the specified engagement. Use this when you want to find all resources associated with a specific engagement.</p>"
-        },
         "MaxResults":{
           "shape":"ListEngagementResourceAssociationsRequestMaxResultsInteger",
           "documentation":"<p>Limits the number of results returned in a single call. Use this to control the number of results returned, especially useful for pagination.</p>"
@@ -3878,13 +3881,21 @@
           "shape":"String",
           "documentation":"<p>A token used for pagination of results. Include this token in subsequent requests to retrieve the next set of results.</p>"
         },
-        "ResourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>Filters the results to include only associations with the specified resource. Varies depending on the resource type. Use this when you want to find all engagements associated with a specific resource.</p>"
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p>Filters the results to include only associations related to the specified engagement. Use this when you want to find all resources associated with a specific engagement.</p>"
         },
         "ResourceType":{
           "shape":"ResourceType",
           "documentation":"<p> Filters the results to include only associations with resources of the specified type. </p>"
+        },
+        "ResourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>Filters the results to include only associations with the specified resource. Varies depending on the resource type. Use this when you want to find all engagements associated with a specific resource.</p>"
+        },
+        "CreatedBy":{
+          "shape":"AwsAccount",
+          "documentation":"<p>Filters the response to include only snapshots of resources owned by the specified AWS account ID. Use this when you want to find associations related to resources owned by a particular account. </p>"
         }
       }
     },
@@ -3920,14 +3931,11 @@
           "shape":"AwsAccountList",
           "documentation":"<p> A list of AWS account IDs. When specified, the response includes engagements created by these accounts. This filter is useful for finding engagements created by specific team members. </p>"
         },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifiers",
-          "documentation":"<p>An array of strings representing engagement identifiers to retrieve.</p>"
-        },
         "ExcludeCreatedBy":{
           "shape":"AwsAccountList",
           "documentation":"<p>An array of strings representing AWS Account IDs. Use this to exclude engagements created by specific users. </p>"
         },
+        "Sort":{"shape":"EngagementSort"},
         "MaxResults":{
           "shape":"EngagementPageSize",
           "documentation":"<p>The maximum number of results to return in a single call.</p>"
@@ -3936,9 +3944,9 @@
           "shape":"String",
           "documentation":"<p>The token for the next set of results. This value is returned from a previous call.</p>"
         },
-        "Sort":{
-          "shape":"EngagementSort",
-          "documentation":"<p> An object that specifies the sort order of the results. </p>"
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifiers",
+          "documentation":"<p>An array of strings representing engagement identifiers to retrieve.</p>"
         }
       }
     },
@@ -3964,37 +3972,37 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the opportunities are listed in. Use <code>AWS</code> for listing real opportunities in the Amazon Web Services catalog, and <code>Sandbox</code> for testing in secure, isolated environments.</p>"
         },
-        "CustomerCompanyName":{
-          "shape":"ListOpportunitiesRequestCustomerCompanyNameList",
-          "documentation":"<p>Filters the opportunities based on the customer's company name. This allows partners to search for opportunities associated with a specific customer by matching the provided company name string.</p>"
+        "MaxResults":{
+          "shape":"PageSize",
+          "documentation":"<p>Specifies the maximum number of results to return in a single call. This limits the number of opportunities returned in the response to avoid providing too many results at once.</p> <p>Default: 20</p>"
         },
-        "Identifier":{
-          "shape":"ListOpportunitiesRequestIdentifierList",
-          "documentation":"<p>Filters the opportunities based on the opportunity identifier. This allows partners to retrieve specific opportunities by providing their unique identifiers, ensuring precise results.</p>"
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
+        },
+        "Sort":{
+          "shape":"OpportunitySort",
+          "documentation":"<p>An object that specifies how the response is sorted. The default <code>Sort.SortBy</code> value is <code>LastModifiedDate</code>.</p>"
         },
         "LastModifiedDate":{
           "shape":"LastModifiedDate",
           "documentation":"<p>Filters the opportunities based on their last modified date. This filter helps retrieve opportunities that were updated after the specified date, allowing partners to track recent changes or updates.</p>"
         },
-        "LifeCycleReviewStatus":{
-          "shape":"ListOpportunitiesRequestLifeCycleReviewStatusList",
-          "documentation":"<p>Filters the opportunities based on their current lifecycle approval status. Use this filter to retrieve opportunities with statuses such as <code>Pending Submission</code>, <code>In Review</code>, <code>Action Required</code>, or <code>Approved</code>.</p>"
+        "Identifier":{
+          "shape":"ListOpportunitiesRequestIdentifierList",
+          "documentation":"<p>Filters the opportunities based on the opportunity identifier. This allows partners to retrieve specific opportunities by providing their unique identifiers, ensuring precise results.</p>"
         },
         "LifeCycleStage":{
           "shape":"ListOpportunitiesRequestLifeCycleStageList",
           "documentation":"<p>Filters the opportunities based on their lifecycle stage. This filter allows partners to retrieve opportunities at various stages in the sales cycle, such as <code>Qualified</code>, <code>Technical Validation</code>, <code>Business Validation</code>, or <code>Closed Won</code>.</p>"
         },
-        "MaxResults":{
-          "shape":"PageSize",
-          "documentation":"<p>Specifies the maximum number of results to return in a single call. This limits the number of opportunities returned in the response to avoid providing too many results at once.</p> <p>Default: 20</p>"
-        },
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
+        "LifeCycleReviewStatus":{
+          "shape":"ListOpportunitiesRequestLifeCycleReviewStatusList",
+          "documentation":"<p>Filters the opportunities based on their current lifecycle approval status. Use this filter to retrieve opportunities with statuses such as <code>Pending Submission</code>, <code>In Review</code>, <code>Action Required</code>, or <code>Approved</code>.</p>"
         },
-        "Sort":{
-          "shape":"OpportunitySort",
-          "documentation":"<p>An object that specifies how the response is sorted. The default <code>Sort.SortBy</code> value is <code>LastModifiedDate</code>.</p>"
+        "CustomerCompanyName":{
+          "shape":"ListOpportunitiesRequestCustomerCompanyNameList",
+          "documentation":"<p>Filters the opportunities based on the customer's company name. This allows partners to search for opportunities associated with a specific customer by matching the provided company name string.</p>"
         }
       }
     },
@@ -4026,13 +4034,13 @@
       "type":"structure",
       "required":["OpportunitySummaries"],
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
-        },
         "OpportunitySummaries":{
           "shape":"OpportunitySummaries",
           "documentation":"<p>An array that contains minimal details for opportunities that match the request criteria. This summary view provides a quick overview of relevant opportunities.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
         }
       }
     },
@@ -4044,10 +4052,6 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p> Specifies the catalog related to the request. </p>"
         },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p> The identifier of the engagement to filter the response. </p>"
-        },
         "MaxResults":{
           "shape":"ListResourceSnapshotJobsRequestMaxResultsInteger",
           "documentation":"<p> The maximum number of results to return in a single call. If omitted, defaults to 50. </p>"
@@ -4056,13 +4060,17 @@
           "shape":"String",
           "documentation":"<p> The token for the next set of results. </p>"
         },
-        "Sort":{
-          "shape":"SortObject",
-          "documentation":"<p> Configures the sorting of the response. If omitted, results are sorted by <code>CreatedDate</code> in descending order. </p>"
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p> The identifier of the engagement to filter the response. </p>"
         },
         "Status":{
           "shape":"ResourceSnapshotJobStatus",
           "documentation":"<p> The status of the jobs to filter the response. </p>"
+        },
+        "Sort":{
+          "shape":"SortObject",
+          "documentation":"<p> Configures the sorting of the response. If omitted, results are sorted by <code>CreatedDate</code> in descending order. </p>"
         }
       }
     },
@@ -4076,13 +4084,13 @@
       "type":"structure",
       "required":["ResourceSnapshotJobSummaries"],
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p> The token to retrieve the next set of results. If there are no additional results, this value is null. </p>"
-        },
         "ResourceSnapshotJobSummaries":{
           "shape":"ResourceSnapshotJobSummaryList",
           "documentation":"<p> An array of resource snapshot job summary objects. </p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token to retrieve the next set of results. If there are no additional results, this value is null. </p>"
         }
       }
     },
@@ -4097,14 +4105,6 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p> Specifies the catalog related to the request. </p>"
         },
-        "CreatedBy":{
-          "shape":"AwsAccount",
-          "documentation":"<p>Filters the response to include only snapshots of resources owned by the specified AWS account. </p>"
-        },
-        "EngagementIdentifier":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p> The unique identifier of the engagement associated with the snapshots. </p>"
-        },
         "MaxResults":{
           "shape":"ListResourceSnapshotsRequestMaxResultsInteger",
           "documentation":"<p> The maximum number of results to return in a single call. </p>"
@@ -4113,6 +4113,14 @@
           "shape":"String",
           "documentation":"<p> The token for the next set of results. </p>"
         },
+        "EngagementIdentifier":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p> The unique identifier of the engagement associated with the snapshots. </p>"
+        },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p> Filters the response to include only snapshots of the specified resource type. </p>"
+        },
         "ResourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p> Filters the response to include only snapshots of the specified resource. </p>"
@@ -4121,9 +4129,9 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p>Filters the response to include only snapshots created using the specified template.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p> Filters the response to include only snapshots of the specified resource type. </p>"
+        "CreatedBy":{
+          "shape":"AwsAccount",
+          "documentation":"<p>Filters the response to include only snapshots of resources owned by the specified AWS account. </p>"
         }
       }
     },
@@ -4137,13 +4145,13 @@
       "type":"structure",
       "required":["ResourceSnapshotSummaries"],
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p> The token to retrieve the next set of results. If there are no additional results, this value is null. </p>"
-        },
         "ResourceSnapshotSummaries":{
           "shape":"ResourceSnapshotSummaryList",
           "documentation":"<p> An array of resource snapshot summary objects. </p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p> The token to retrieve the next set of results. If there are no additional results, this value is null. </p>"
         }
       }
     },
@@ -4155,14 +4163,6 @@
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the solutions are listed in. Use <code>AWS</code> to list solutions in the Amazon Web Services catalog, and <code>Sandbox</code> to list solutions in a secure and isolated testing environment.</p>"
         },
-        "Category":{
-          "shape":"ListSolutionsRequestCategoryList",
-          "documentation":"<p>Filters the solutions based on the category to which they belong. This allows partners to search for solutions within specific categories, such as <code>Software</code>, <code>Consulting</code>, or <code>Managed Services</code>.</p>"
-        },
-        "Identifier":{
-          "shape":"ListSolutionsRequestIdentifierList",
-          "documentation":"<p>Filters the solutions based on their unique identifier. Use this filter to retrieve specific solutions by providing the solution's identifier for accurate results.</p>"
-        },
         "MaxResults":{
           "shape":"PageSize",
           "documentation":"<p>The maximum number of results returned by a single call. This value must be provided in the next call to retrieve the next set of results.</p> <p>Default: 20</p>"
@@ -4178,6 +4178,14 @@
         "Status":{
           "shape":"ListSolutionsRequestStatusList",
           "documentation":"<p>Filters solutions based on their status. This filter helps partners manage their solution portfolios effectively.</p>"
+        },
+        "Identifier":{
+          "shape":"ListSolutionsRequestIdentifierList",
+          "documentation":"<p>Filters the solutions based on their unique identifier. Use this filter to retrieve specific solutions by providing the solution's identifier for accurate results.</p>"
+        },
+        "Category":{
+          "shape":"ListSolutionsRequestCategoryList",
+          "documentation":"<p>Filters the solutions based on the category to which they belong. This allows partners to search for solutions within specific categories, such as <code>Software</code>, <code>Consulting</code>, or <code>Managed Services</code>.</p>"
         }
       }
     },
@@ -4203,13 +4211,13 @@
       "type":"structure",
       "required":["SolutionSummaries"],
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
-        },
         "SolutionSummaries":{
           "shape":"SolutionList",
           "documentation":"<p>An array with minimal details for solutions matching the request criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token used to retrieve the next set of results in subsequent calls. This token is included in the response only if there are additional result pages available.</p>"
         }
       }
     },
@@ -4236,17 +4244,17 @@
     "ListTasksSortBase":{
       "type":"structure",
       "required":[
-        "SortBy",
-        "SortOrder"
+        "SortOrder",
+        "SortBy"
       ],
       "members":{
-        "SortBy":{
-          "shape":"ListTasksSortName",
-          "documentation":"<p> Specifies the field by which the task list should be sorted. </p>"
-        },
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p> Determines the order in which the sorted results are presented. </p>"
+        },
+        "SortBy":{
+          "shape":"ListTasksSortName",
+          "documentation":"<p> Specifies the field by which the task list should be sorted. </p>"
         }
       },
       "documentation":"<p> Defines the sorting parameters for listing tasks. This structure allows for specifying the field to sort by and the order of sorting. </p>"
@@ -4258,18 +4266,10 @@
     "Marketing":{
       "type":"structure",
       "members":{
-        "AwsFundingUsed":{
-          "shape":"AwsFundingUsed",
-          "documentation":"<p>Indicates if the <code>Opportunity</code> is a marketing development fund (MDF) funded activity.</p>"
-        },
         "CampaignName":{
           "shape":"String",
           "documentation":"<p>Specifies the <code>Opportunity</code> marketing campaign code. The Amazon Web Services campaign code is a reference to specific marketing initiatives, promotions, or activities. This field captures the identifier used to track and categorize the <code>Opportunity</code> within marketing campaigns. If you don't have a campaign code, contact your Amazon Web Services point of contact to obtain one.</p>"
         },
-        "Channels":{
-          "shape":"Channels",
-          "documentation":"<p>Specifies the <code>Opportunity</code>'s channel that the marketing activity is associated with or was contacted through. This field provides information about the specific marketing channel that contributed to the generation of the lead or contact.</p>"
-        },
         "Source":{
           "shape":"MarketingSource",
           "documentation":"<p>Indicates if the <code>Opportunity</code> was sourced from an Amazon Web Services marketing activity. Use the value <code>Marketing Activity</code>. Use <code>None</code> if it's not associated with an Amazon Web Services marketing activity. This field helps Amazon Web Services track the return on marketing investments and enables better distribution of marketing budgets among partners.</p>"
@@ -4277,6 +4277,14 @@
         "UseCases":{
           "shape":"UseCases",
           "documentation":"<p>Specifies the marketing activity use case or purpose that led to the <code>Opportunity</code>'s creation or contact. This field captures the context or marketing activity's execution's intention and the direct correlation to the generated opportunity or contact. Must be empty when <code>Marketing.AWSFundingUsed = No</code>.</p> <p>Valid values: <code>AI/ML | Analytics | Application Integration | Blockchain | Business Applications | Cloud Financial Management | Compute | Containers | Customer Engagement | Databases | Developer Tools | End User Computing | Front End Web &amp; Mobile | Game Tech | IoT | Management &amp; Governance | Media Services | Migration &amp; Transfer | Networking &amp; Content Delivery | Quantum Technologies | Robotics | Satellite | Security | Serverless | Storage | VR &amp; AR</code> </p>"
+        },
+        "Channels":{
+          "shape":"Channels",
+          "documentation":"<p>Specifies the <code>Opportunity</code>'s channel that the marketing activity is associated with or was contacted through. This field provides information about the specific marketing channel that contributed to the generation of the lead or contact.</p>"
+        },
+        "AwsFundingUsed":{
+          "shape":"AwsFundingUsed",
+          "documentation":"<p>Indicates if the <code>Opportunity</code> is a marketing development fund (MDF) funded activity.</p>"
         }
       },
       "documentation":"<p>An object that contains marketing details for the <code>Opportunity</code>.</p>"
@@ -4291,7 +4299,8 @@
     "MemberCompanyName":{
       "type":"string",
       "max":120,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "MemberPageSize":{
       "type":"integer",
@@ -4319,7 +4328,7 @@
     },
     "MonetaryValueAmountString":{
       "type":"string",
-      "pattern":"^(0|([1-9][0-9]{0,30}))(\\.[0-9]{0,2})?$"
+      "pattern":"(0|([1-9][0-9]{0,30}))(\\.[0-9]{0,2})?"
     },
     "Name":{
       "type":"string",
@@ -4337,39 +4346,39 @@
     "NextStepsHistory":{
       "type":"structure",
       "required":[
-        "Time",
-        "Value"
+        "Value",
+        "Time"
       ],
       "members":{
-        "Time":{
-          "shape":"DateTime",
-          "documentation":"<p>Indicates the step execution time.</p>"
-        },
         "Value":{
           "shape":"String",
           "documentation":"<p>Indicates the step's execution details.</p>"
+        },
+        "Time":{
+          "shape":"DateTime",
+          "documentation":"<p>Indicates the step execution time.</p>"
         }
       },
       "documentation":"<p>Read-only; shows the last 50 values and change dates for the <code>NextSteps</code> field.</p>"
     },
     "OpportunityArn":{
       "type":"string",
-      "pattern":"^arn:.*$"
+      "pattern":"arn:.*"
     },
     "OpportunityEngagementInvitationSort":{
       "type":"structure",
       "required":[
-        "SortBy",
-        "SortOrder"
+        "SortOrder",
+        "SortBy"
       ],
       "members":{
-        "SortBy":{
-          "shape":"OpportunityEngagementInvitationSortName",
-          "documentation":"<p>Specifies the field by which the Engagement Invitations are sorted. Common values include <code>InvitationDate</code> and <code>Status</code>.</p>"
-        },
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>Defines the order in which the Engagement Invitations are sorted. The values can be <code>ASC</code> (ascending) or <code>DESC</code> (descending).</p>"
+        },
+        "SortBy":{
+          "shape":"OpportunityEngagementInvitationSortName",
+          "documentation":"<p>Specifies the field by which the Engagement Invitations are sorted. Common values include <code>InvitationDate</code> and <code>Status</code>.</p>"
         }
       },
       "documentation":"<p>Defines sorting options for retrieving Engagement Invitations. Sorting can be done based on various criteria like the invitation date or status.</p>"
@@ -4380,7 +4389,7 @@
     },
     "OpportunityIdentifier":{
       "type":"string",
-      "pattern":"^O[0-9]{1,19}$"
+      "pattern":"O[0-9]{1,19}"
     },
     "OpportunityIdentifiers":{
       "type":"list",
@@ -4391,11 +4400,19 @@
     "OpportunityInvitationPayload":{
       "type":"structure",
       "required":[
+        "ReceiverResponsibilities",
         "Customer",
-        "Project",
-        "ReceiverResponsibilities"
+        "Project"
       ],
       "members":{
+        "SenderContacts":{
+          "shape":"SenderContactList",
+          "documentation":"<p>Represents the contact details of the AWS representatives involved in sending the Engagement Invitation. These contacts are opportunity stakeholders.</p>"
+        },
+        "ReceiverResponsibilities":{
+          "shape":"ReceiverResponsibilityList",
+          "documentation":"<p>Outlines the responsibilities or expectations of the receiver in the context of the invitation.</p>"
+        },
         "Customer":{
           "shape":"EngagementCustomer",
           "documentation":"<p>Contains information about the customer related to the opportunity in the Engagement Invitation. This data helps partners understand the customer’s profile and requirements.</p>"
@@ -4403,14 +4420,6 @@
         "Project":{
           "shape":"ProjectDetails",
           "documentation":"<p>Describes the project details associated with the opportunity, including the customer’s needs and the scope of work expected to be performed.</p>"
-        },
-        "ReceiverResponsibilities":{
-          "shape":"ReceiverResponsibilityList",
-          "documentation":"<p>Outlines the responsibilities or expectations of the receiver in the context of the invitation.</p>"
-        },
-        "SenderContacts":{
-          "shape":"SenderContactList",
-          "documentation":"<p>Represents the contact details of the AWS representatives involved in sending the Engagement Invitation. These contacts are opportunity stakeholders.</p>"
         }
       },
       "documentation":"<p>Represents the data payload of an Engagement Invitation for a specific opportunity. This contains detailed information that partners use to evaluate the engagement.</p>"
@@ -4425,17 +4434,17 @@
     "OpportunitySort":{
       "type":"structure",
       "required":[
-        "SortBy",
-        "SortOrder"
+        "SortOrder",
+        "SortBy"
       ],
       "members":{
-        "SortBy":{
-          "shape":"OpportunitySortName",
-          "documentation":"<p>Field name to sort by.</p>"
-        },
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>Sort order.</p> <p>Default: <code>Descending</code> </p>"
+        },
+        "SortBy":{
+          "shape":"OpportunitySortName",
+          "documentation":"<p>Field name to sort by.</p>"
         }
       },
       "documentation":"<p>Object that configures response sorting.</p>"
@@ -4456,41 +4465,41 @@
       "type":"structure",
       "required":["Catalog"],
       "members":{
-        "Arn":{
-          "shape":"OpportunityArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) for the opportunity. This globally unique identifier can be used for IAM policies and cross-service references. </p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the opportunity, either <code>AWS</code> or <code>Sandbox</code>. This indicates the environment in which the opportunity is managed.</p>"
         },
-        "CreatedDate":{
-          "shape":"DateTime",
-          "documentation":"<p> <code>DateTime</code> when the <code>Opportunity</code> was last created.</p>"
-        },
-        "Customer":{
-          "shape":"CustomerSummary",
-          "documentation":"<p>An object that contains the <code>Opportunity</code>'s customer details.</p>"
-        },
         "Id":{
           "shape":"OpportunityIdentifier",
           "documentation":"<p>Read-only, system-generated <code>Opportunity</code> unique identifier.</p>"
         },
+        "Arn":{
+          "shape":"OpportunityArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) for the opportunity. This globally unique identifier can be used for IAM policies and cross-service references. </p>"
+        },
+        "PartnerOpportunityIdentifier":{
+          "shape":"String",
+          "documentation":"<p>Specifies the <code>Opportunity</code>'s unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner. It allows partners to link an opportunity to their CRM.</p>"
+        },
+        "OpportunityType":{
+          "shape":"OpportunityType",
+          "documentation":"<p>Specifies opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New Opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal Opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion Opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
+        },
         "LastModifiedDate":{
           "shape":"DateTime",
           "documentation":"<p> <code>DateTime</code> when the <code>Opportunity</code> was last modified.</p>"
         },
+        "CreatedDate":{
+          "shape":"DateTime",
+          "documentation":"<p> <code>DateTime</code> when the <code>Opportunity</code> was last created.</p>"
+        },
         "LifeCycle":{
           "shape":"LifeCycleSummary",
           "documentation":"<p>An object that contains the <code>Opportunity</code>'s lifecycle details.</p>"
         },
-        "OpportunityType":{
-          "shape":"OpportunityType",
-          "documentation":"<p>Specifies opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New Opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal Opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion Opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
-        },
-        "PartnerOpportunityIdentifier":{
-          "shape":"String",
-          "documentation":"<p>Specifies the <code>Opportunity</code>'s unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner. It allows partners to link an opportunity to their CRM.</p>"
+        "Customer":{
+          "shape":"CustomerSummary",
+          "documentation":"<p>An object that contains the <code>Opportunity</code>'s customer details.</p>"
         },
         "Project":{
           "shape":"ProjectSummary",
@@ -4502,7 +4511,10 @@
     "OpportunitySummaryView":{
       "type":"structure",
       "members":{
-        "Customer":{"shape":"Customer"},
+        "OpportunityType":{
+          "shape":"OpportunityType",
+          "documentation":"<p> Specifies the opportunity type. </p>"
+        },
         "Lifecycle":{
           "shape":"LifeCycleForView",
           "documentation":"<p> Contains information about the opportunity's lifecycle, including its current stage, status, and important dates such as creation and last modification times. </p>"
@@ -4511,14 +4523,11 @@
           "shape":"PartnerOpportunityTeamMembersList",
           "documentation":"<p> Represents the internal team handling the opportunity. Specify the members involved in collaborating on an opportunity within the partner's organization. </p>"
         },
-        "OpportunityType":{
-          "shape":"OpportunityType",
-          "documentation":"<p> Specifies the opportunity type. </p>"
-        },
         "PrimaryNeedsFromAws":{
           "shape":"PrimaryNeedsFromAws",
           "documentation":"<p> Identifies the type of support the partner needs from AWS. </p>"
         },
+        "Customer":{"shape":"Customer"},
         "Project":{
           "shape":"ProjectView",
           "documentation":"<p> Contains summary information about the project associated with the opportunity, including project name, description, timeline, and other relevant details. </p>"
@@ -4551,7 +4560,7 @@
     "PartnerOpportunityTeamMembersList":{
       "type":"list",
       "member":{"shape":"Contact"},
-      "max":1,
+      "max":2,
       "min":0
     },
     "Payload":{
@@ -4573,7 +4582,7 @@
       "type":"string",
       "max":40,
       "min":0,
-      "pattern":"^\\+[1-9]\\d{1,14}$",
+      "pattern":"\\+[1-9]\\d{1,14}",
       "sensitive":true
     },
     "PrimaryNeedFromAws":{
@@ -4596,17 +4605,17 @@
     "ProfileNextStepsHistory":{
       "type":"structure",
       "required":[
-        "Time",
-        "Value"
+        "Value",
+        "Time"
       ],
       "members":{
-        "Time":{
-          "shape":"DateTime",
-          "documentation":"<p>Indicates the date and time when a particular next step was recorded or planned. This helps in managing the timeline for the opportunity.</p>"
-        },
         "Value":{
           "shape":"String",
           "documentation":"<p>Represents the details of the next step recorded, such as follow-up actions or decisions made. This field helps in tracking progress and ensuring alignment with project goals.</p>"
+        },
+        "Time":{
+          "shape":"DateTime",
+          "documentation":"<p>Indicates the date and time when a particular next step was recorded or planned. This helps in managing the timeline for the opportunity.</p>"
         }
       },
       "documentation":"<p>Tracks the history of next steps associated with the opportunity. This field captures the actions planned for the future and their timeline.</p>"
@@ -4614,18 +4623,22 @@
     "Project":{
       "type":"structure",
       "members":{
-        "AdditionalComments":{
-          "shape":"ProjectAdditionalCommentsString",
-          "documentation":"<p>Captures additional comments or information for the <code>Opportunity</code> that weren't captured in other fields.</p>"
+        "DeliveryModels":{
+          "shape":"DeliveryModels",
+          "documentation":"<p>Specifies the deployment or consumption model for your solution or service in the <code>Opportunity</code>'s context. You can select multiple options.</p> <p>Options' descriptions from the <code>Delivery Model</code> field are:</p> <ul> <li> <p>SaaS or PaaS: Your Amazon Web Services based solution deployed as SaaS or PaaS in your Amazon Web Services environment.</p> </li> <li> <p>BYOL or AMI: Your Amazon Web Services based solution deployed as BYOL or AMI in the end customer's Amazon Web Services environment.</p> </li> <li> <p>Managed Services: The end customer's Amazon Web Services business management (For example: Consulting, design, implementation, billing support, cost optimization, technical support).</p> </li> <li> <p>Professional Services: Offerings to help enterprise end customers achieve specific business outcomes for enterprise cloud adoption (For example: Advisory or transformation planning).</p> </li> <li> <p>Resell: Amazon Web Services accounts and billing management for your customers.</p> </li> <li> <p>Other: Delivery model not described above.</p> </li> </ul>"
+        },
+        "ExpectedCustomerSpend":{
+          "shape":"ExpectedCustomerSpendList",
+          "documentation":"<p>Represents the estimated amount that the customer is expected to spend on AWS services related to the opportunity. This helps in evaluating the potential financial value of the opportunity for AWS.</p>"
+        },
+        "Title":{
+          "shape":"ProjectTitleString",
+          "documentation":"<p>Specifies the <code>Opportunity</code>'s title or name.</p>"
         },
         "ApnPrograms":{
           "shape":"ApnPrograms",
           "documentation":"<p>Specifies the Amazon Partner Network (APN) program that influenced the <code>Opportunity</code>. APN programs refer to specific partner programs or initiatives that can impact the <code>Opportunity</code>.</p> <p>Valid values: <code>APN Immersion Days | APN Solution Space | ATO (Authority to Operate) | AWS Marketplace Campaign | IS Immersion Day SFID Program | ISV Workload Migration | Migration Acceleration Program | P3 | Partner Launch Initiative | Partner Opportunity Acceleration Funded | The Next Smart | VMware Cloud on AWS | Well-Architected | Windows | Workspaces/AppStream Accelerator Program | WWPS NDPP</code> </p>"
         },
-        "CompetitorName":{
-          "shape":"CompetitorName",
-          "documentation":"<p>Name of the <code>Opportunity</code>'s competitor (if any). Use <code>Other</code> to submit a value not in the picklist.</p>"
-        },
         "CustomerBusinessProblem":{
           "shape":"ProjectCustomerBusinessProblemString",
           "documentation":"<p>Describes the problem the end customer has, and how the partner is helping. Utilize this field to provide a concise narrative that outlines the customer's business challenge or issue. Elaborate on how the partner's solution or offerings align to resolve the customer's business problem. Include relevant information about the partner's value proposition, unique selling points, and expertise to tackle the issue. Offer insights on how the proposed solution meets the customer's needs and provides value. Use concise language and precise descriptions to convey the context and significance of the <code>Opportunity</code>. The content in this field helps Amazon Web Services understand the nature of the <code>Opportunity</code> and the strategic fit of the partner's solution.</p>"
@@ -4634,13 +4647,17 @@
           "shape":"String",
           "documentation":"<p>Specifies the proposed solution focus or type of workload for the Opportunity. This field captures the primary use case or objective of the proposed solution, and provides context and clarity to the addressed workload.</p> <p>Valid values: <code>AI Machine Learning and Analytics | Archiving | Big Data: Data Warehouse/Data Integration/ETL/Data Lake/BI | Blockchain | Business Applications: Mainframe Modernization | Business Applications &amp; Contact Center | Business Applications &amp; SAP Production | Centralized Operations Management | Cloud Management Tools | Cloud Management Tools &amp; DevOps with Continuous Integration &amp; Continuous Delivery (CICD) | Configuration, Compliance &amp; Auditing | Connected Services | Containers &amp; Serverless | Content Delivery &amp; Edge Services | Database | Edge Computing/End User Computing | Energy | Enterprise Governance &amp; Controls | Enterprise Resource Planning | Financial Services | Healthcare and Life Sciences | High Performance Computing | Hybrid Application Platform | Industrial Software | IOT | Manufacturing, Supply Chain and Operations | Media &amp; High performance computing (HPC) | Migration/Database Migration | Monitoring, logging and performance | Monitoring &amp; Observability | Networking | Outpost | SAP | Security &amp; Compliance | Storage &amp; Backup | Training | VMC | VMWare | Web development &amp; DevOps</code> </p>"
         },
-        "DeliveryModels":{
-          "shape":"DeliveryModels",
-          "documentation":"<p>Specifies the deployment or consumption model for your solution or service in the <code>Opportunity</code>'s context. You can select multiple options.</p> <p>Options' descriptions from the <code>Delivery Model</code> field are:</p> <ul> <li> <p>SaaS or PaaS: Your Amazon Web Services based solution deployed as SaaS or PaaS in your Amazon Web Services environment.</p> </li> <li> <p>BYOL or AMI: Your Amazon Web Services based solution deployed as BYOL or AMI in the end customer's Amazon Web Services environment.</p> </li> <li> <p>Managed Services: The end customer's Amazon Web Services business management (For example: Consulting, design, implementation, billing support, cost optimization, technical support).</p> </li> <li> <p>Professional Services: Offerings to help enterprise end customers achieve specific business outcomes for enterprise cloud adoption (For example: Advisory or transformation planning).</p> </li> <li> <p>Resell: Amazon Web Services accounts and billing management for your customers.</p> </li> <li> <p>Other: Delivery model not described above.</p> </li> </ul>"
+        "RelatedOpportunityIdentifier":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Specifies the current opportunity's parent opportunity identifier.</p>"
         },
-        "ExpectedCustomerSpend":{
-          "shape":"ExpectedCustomerSpendList",
-          "documentation":"<p>Represents the estimated amount that the customer is expected to spend on AWS services related to the opportunity. This helps in evaluating the potential financial value of the opportunity for AWS.</p>"
+        "SalesActivities":{
+          "shape":"SalesActivities",
+          "documentation":"<p>Specifies the <code>Opportunity</code>'s sales activities conducted with the end customer. These activities help drive Amazon Web Services assignment priority.</p> <p>Valid values:</p> <ul> <li> <p>Initialized discussions with customer: Initial conversations with the customer to understand their needs and introduce your solution.</p> </li> <li> <p>Customer has shown interest in solution: After initial discussions, the customer is interested in your solution.</p> </li> <li> <p>Conducted POC/demo: You conducted a proof of concept (POC) or demonstration of the solution for the customer.</p> </li> <li> <p>In evaluation/planning stage: The customer is evaluating the solution and planning potential implementation.</p> </li> <li> <p>Agreed on solution to Business Problem: Both parties agree on how the solution addresses the customer's business problem.</p> </li> <li> <p>Completed Action Plan: A detailed action plan is complete and outlines the steps for implementation.</p> </li> <li> <p>Finalized Deployment Need: Both parties agree with and finalized the deployment needs.</p> </li> <li> <p>SOW Signed: Both parties signed a statement of work (SOW), and formalize the agreement and detail the project scope and deliverables.</p> </li> </ul>"
+        },
+        "CompetitorName":{
+          "shape":"CompetitorName",
+          "documentation":"<p>Name of the <code>Opportunity</code>'s competitor (if any). Use <code>Other</code> to submit a value not in the picklist.</p>"
         },
         "OtherCompetitorNames":{
           "shape":"ProjectOtherCompetitorNamesString",
@@ -4650,17 +4667,9 @@
           "shape":"ProjectOtherSolutionDescriptionString",
           "documentation":"<p>Specifies the offered solution for the customer's business problem when the <code> RelatedEntityIdentifiers.Solutions</code> field value is <code>Other</code>.</p>"
         },
-        "RelatedOpportunityIdentifier":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Specifies the current opportunity's parent opportunity identifier.</p>"
-        },
-        "SalesActivities":{
-          "shape":"SalesActivities",
-          "documentation":"<p>Specifies the <code>Opportunity</code>'s sales activities conducted with the end customer. These activities help drive Amazon Web Services assignment priority.</p> <p>Valid values:</p> <ul> <li> <p>Initialized discussions with customer: Initial conversations with the customer to understand their needs and introduce your solution.</p> </li> <li> <p>Customer has shown interest in solution: After initial discussions, the customer is interested in your solution.</p> </li> <li> <p>Conducted POC/demo: You conducted a proof of concept (POC) or demonstration of the solution for the customer.</p> </li> <li> <p>In evaluation/planning stage: The customer is evaluating the solution and planning potential implementation.</p> </li> <li> <p>Agreed on solution to Business Problem: Both parties agree on how the solution addresses the customer's business problem.</p> </li> <li> <p>Completed Action Plan: A detailed action plan is complete and outlines the steps for implementation.</p> </li> <li> <p>Finalized Deployment Need: Both parties agree with and finalized the deployment needs.</p> </li> <li> <p>SOW Signed: Both parties signed a statement of work (SOW), and formalize the agreement and detail the project scope and deliverables.</p> </li> </ul>"
-        },
-        "Title":{
-          "shape":"ProjectTitleString",
-          "documentation":"<p>Specifies the <code>Opportunity</code>'s title or name.</p>"
+        "AdditionalComments":{
+          "shape":"ProjectAdditionalCommentsString",
+          "documentation":"<p>Captures additional comments or information for the <code>Opportunity</code> that weren't captured in other fields.</p>"
         }
       },
       "documentation":"<p>An object that contains the <code>Opportunity</code>'s project details.</p>"
@@ -4680,26 +4689,26 @@
       "type":"structure",
       "required":[
         "BusinessProblem",
-        "ExpectedCustomerSpend",
+        "Title",
         "TargetCompletionDate",
-        "Title"
+        "ExpectedCustomerSpend"
       ],
       "members":{
         "BusinessProblem":{
           "shape":"EngagementCustomerBusinessProblem",
           "documentation":"<p>Describes the business problem that the project aims to solve. This information is crucial for understanding the project’s goals and objectives.</p>"
         },
-        "ExpectedCustomerSpend":{
-          "shape":"ExpectedCustomerSpendList",
-          "documentation":"<p>Contains revenue estimates for the partner related to the project. This field provides an idea of the financial potential of the opportunity for the partner.</p>"
+        "Title":{
+          "shape":"ProjectDetailsTitleString",
+          "documentation":"<p>Specifies the title of the project. This title helps partners quickly identify and understand the focus of the project.</p>"
         },
         "TargetCompletionDate":{
           "shape":"Date",
           "documentation":"<p>Specifies the estimated date of project completion. This field helps track the project timeline and manage expectations.</p>"
         },
-        "Title":{
-          "shape":"ProjectDetailsTitleString",
-          "documentation":"<p>Specifies the title of the project. This title helps partners quickly identify and understand the focus of the project.</p>"
+        "ExpectedCustomerSpend":{
+          "shape":"ExpectedCustomerSpendList",
+          "documentation":"<p>Contains revenue estimates for the partner related to the project. This field provides an idea of the financial potential of the opportunity for the partner.</p>"
         }
       },
       "documentation":"<p>Contains details about the project associated with the Engagement Invitation, including the business problem and expected outcomes.</p>"
@@ -4743,10 +4752,6 @@
     "ProjectView":{
       "type":"structure",
       "members":{
-        "CustomerUseCase":{
-          "shape":"String",
-          "documentation":"<p> Specifies the proposed solution focus or type of workload for the project. </p>"
-        },
         "DeliveryModels":{
           "shape":"DeliveryModels",
           "documentation":"<p> Describes the deployment or consumption model for the partner solution or offering. This field indicates how the project's solution will be delivered or implemented for the customer. </p>"
@@ -4755,13 +4760,17 @@
           "shape":"ExpectedCustomerSpendList",
           "documentation":"<p> Provides information about the anticipated customer spend related to this project. This may include details such as amount, frequency, and currency of expected expenditure. </p>"
         },
-        "OtherSolutionDescription":{
-          "shape":"ProjectViewOtherSolutionDescriptionString",
-          "documentation":"<p> Offers a description of other solutions if the standard solutions do not adequately cover the project's scope. </p>"
+        "CustomerUseCase":{
+          "shape":"String",
+          "documentation":"<p> Specifies the proposed solution focus or type of workload for the project. </p>"
         },
         "SalesActivities":{
           "shape":"SalesActivities",
           "documentation":"<p> Lists the pre-sales activities that have occurred with the end-customer related to the opportunity. This field is conditionally mandatory when the project is qualified for Co-Sell and helps drive assignment priority on the AWS side. It provides insight into the engagement level with the customer. </p>"
+        },
+        "OtherSolutionDescription":{
+          "shape":"ProjectViewOtherSolutionDescriptionString",
+          "documentation":"<p> Offers a description of other solutions if the standard solutions do not adequately cover the project's scope. </p>"
         }
       },
       "documentation":"<p> Provides the project view of an opportunity resource shared through a snapshot. </p>"
@@ -4876,7 +4885,7 @@
     },
     "RejectionReasonString":{
       "type":"string",
-      "pattern":"^[\\u0020-\\u007E\\u00A0-\\uD7FF\\uE000-\\uFFFD]{1,80}$"
+      "pattern":"[\\u0020-\\u007E\\u00A0-\\uD7FF\\uE000-\\uFFFD]{1,80}"
     },
     "RelatedEntityIdentifiers":{
       "type":"structure",
@@ -4885,13 +4894,13 @@
           "shape":"AwsMarketplaceOfferIdentifiers",
           "documentation":"<p>Takes one value per opportunity. Each value is an Amazon Resource Name (ARN), in this format: <code>\"offers\": [\"arn:aws:aws-marketplace:us-east-1:999999999999:AWSMarketplace/Offer/offer-sampleOffer32\"]</code>.</p> <p>Use the <a href=\"https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_ListEntities.html\">ListEntities</a> action in the Marketplace Catalog APIs for a list of offers in the associated Marketplace seller account.</p>"
         },
-        "AwsProducts":{
-          "shape":"AwsProductIdentifiers",
-          "documentation":"<p>Enables the association of specific Amazon Web Services products with the <code>Opportunity</code>. Partners can indicate the relevant Amazon Web Services products for the <code>Opportunity</code>'s solution and align with the customer's needs. Returns multiple values separated by commas. For example, <code>\"AWSProducts\" : [\"AmazonRedshift\", \"AWSAppFabric\", \"AWSCleanRooms\"]</code>.</p> <p>Use the file with the list of Amazon Web Services products hosted on GitHub: <a href=\"https://github.com/aws-samples/partner-crm-integration-samples/blob/main/resources/aws_products.json\"> Amazon Web Services products</a>.</p>"
-        },
         "Solutions":{
           "shape":"SolutionIdentifiers",
           "documentation":"<p>Enables partner solutions or offerings' association with an opportunity. To associate a solution, provide the solution's unique identifier, which you can obtain with the <code>ListSolutions</code> operation.</p> <p>If the specific solution identifier is not available, you can use the value <code>Other</code> and provide details about the solution in the <code>otherSolutionOffered</code> field. But when the opportunity reaches the <code>Committed</code> stage or beyond, the <code>Other</code> value cannot be used, and a valid solution identifier must be provided.</p> <p>By associating the relevant solutions with the opportunity, you can communicate the offerings that are being considered or implemented to address the customer's business problem.</p>"
+        },
+        "AwsProducts":{
+          "shape":"AwsProductIdentifiers",
+          "documentation":"<p>Enables the association of specific Amazon Web Services products with the <code>Opportunity</code>. Partners can indicate the relevant Amazon Web Services products for the <code>Opportunity</code>'s solution and align with the customer's needs. Returns multiple values separated by commas. For example, <code>\"AWSProducts\" : [\"AmazonRedshift\", \"AWSAppFabric\", \"AWSCleanRooms\"]</code>.</p> <p>Use the file with the list of Amazon Web Services products hosted on GitHub: <a href=\"https://github.com/aws-samples/partner-crm-integration-samples/blob/main/resources/aws_products.json\"> Amazon Web Services products</a>.</p>"
         }
       },
       "documentation":"<p>This field provides the associations' information for other entities with the opportunity. These entities include identifiers for <code>AWSProducts</code>, <code>Partner Solutions</code>, and <code>AWSMarketplaceOffers</code>.</p>"
@@ -4906,11 +4915,11 @@
     },
     "ResourceArn":{
       "type":"string",
-      "pattern":"^arn:.*"
+      "pattern":"arn:.*"
     },
     "ResourceIdentifier":{
       "type":"string",
-      "pattern":"^O[0-9]{1,19}$"
+      "pattern":"O[0-9]{1,19}"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -4922,27 +4931,27 @@
     },
     "ResourceSnapshotArn":{
       "type":"string",
-      "pattern":"^arn:.*"
+      "pattern":"arn:.*"
     },
     "ResourceSnapshotJobArn":{
       "type":"string",
-      "pattern":"^arn:.*"
+      "pattern":"arn:.*"
     },
     "ResourceSnapshotJobIdentifier":{
       "type":"string",
-      "pattern":"^job-[0-9a-z]{13}$"
+      "pattern":"job-[0-9a-z]{13}"
     },
     "ResourceSnapshotJobRoleArn":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^arn:aws:iam::\\d{12}:role/([-+=,.@_a-zA-Z0-9]+/)*[-+=,.@_a-zA-Z0-9]{1,64}$"
+      "pattern":"arn:aws:iam::\\d{12}:role/([-+=,.@_a-zA-Z0-9]+/)*[-+=,.@_a-zA-Z0-9]{1,64}"
     },
     "ResourceSnapshotJobRoleIdentifier":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(arn:aws:iam::\\d{12}:role/([-+=,.@_a-zA-Z0-9]+/)*)?[-+=,.@_a-zA-Z0-9]{1,64}$"
+      "pattern":"(arn:aws:iam::\\d{12}:role/([-+=,.@_a-zA-Z0-9]+/)*)?[-+=,.@_a-zA-Z0-9]{1,64}"
     },
     "ResourceSnapshotJobStatus":{
       "type":"string",
@@ -4954,6 +4963,10 @@
     "ResourceSnapshotJobSummary":{
       "type":"structure",
       "members":{
+        "Id":{
+          "shape":"ResourceSnapshotJobIdentifier",
+          "documentation":"<p> The unique identifier for the resource snapshot job within the AWS Partner Central system. This ID is used for direct references to the job within the service. </p>"
+        },
         "Arn":{
           "shape":"ResourceSnapshotJobArn",
           "documentation":"<p> The Amazon Resource Name (ARN) for the resource snapshot job. </p>"
@@ -4962,10 +4975,6 @@
           "shape":"EngagementIdentifier",
           "documentation":"<p>The unique identifier of the Engagement.</p>"
         },
-        "Id":{
-          "shape":"ResourceSnapshotJobIdentifier",
-          "documentation":"<p> The unique identifier for the resource snapshot job within the AWS Partner Central system. This ID is used for direct references to the job within the service. </p>"
-        },
         "Status":{
           "shape":"ResourceSnapshotJobStatus",
           "documentation":"<p>The current status of the snapshot job.</p> <p>Valid values:</p> <ul> <li> <p> STOPPED: The job is not currently running. </p> </li> <li> <p> RUNNING: The job is actively executing. </p> </li> </ul>"
@@ -5000,9 +5009,13 @@
           "shape":"ResourceSnapshotArn",
           "documentation":"<p> The Amazon Resource Name (ARN) of the snapshot. This globally unique identifier can be used for cross-service references and in IAM policies. </p>"
         },
-        "CreatedBy":{
-          "shape":"AwsAccount",
-          "documentation":"<p>The AWS account ID of the entity that owns the resource from which the snapshot was created.</p>"
+        "Revision":{
+          "shape":"ResourceSnapshotRevision",
+          "documentation":"<p>The revision number of the snapshot. This integer value is incremented each time the snapshot is updated, allowing for version tracking of the resource snapshot. </p>"
+        },
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of resource snapshotted.</p>"
         },
         "ResourceId":{
           "shape":"ResourceIdentifier",
@@ -5012,13 +5025,9 @@
           "shape":"ResourceTemplateName",
           "documentation":"<p>The name of the template used to create the snapshot.</p>"
         },
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource snapshotted.</p>"
-        },
-        "Revision":{
-          "shape":"ResourceSnapshotRevision",
-          "documentation":"<p>The revision number of the snapshot. This integer value is incremented each time the snapshot is updated, allowing for version tracking of the resource snapshot. </p>"
+        "CreatedBy":{
+          "shape":"AwsAccount",
+          "documentation":"<p>The AWS account ID of the entity that owns the resource from which the snapshot was created.</p>"
         }
       },
       "documentation":"<p> Provides a concise summary of a resource snapshot, including its unique identifier and version information. This structure is used to quickly reference and identify specific versions of resource snapshots. </p>"
@@ -5029,7 +5038,7 @@
     },
     "ResourceTemplateName":{
       "type":"string",
-      "pattern":"^[a-zA-Z0-9]{3,80}$"
+      "pattern":"[a-zA-Z0-9]{3,80}"
     },
     "ResourceType":{
       "type":"string",
@@ -5082,10 +5091,6 @@
       "type":"structure",
       "required":["Email"],
       "members":{
-        "BusinessTitle":{
-          "shape":"JobTitle",
-          "documentation":"<p>The sender-provided contact's title (job title or role) associated with the <code>EngagementInvitation</code>.</p>"
-        },
         "Email":{
           "shape":"SenderContactEmail",
           "documentation":"<p>The sender-provided contact's email address associated with the <code>EngagementInvitation</code>.</p>"
@@ -5098,6 +5103,10 @@
           "shape":"Name",
           "documentation":"<p>The sender-provided contact's first name associated with the <code>EngagementInvitation</code>.</p>"
         },
+        "BusinessTitle":{
+          "shape":"JobTitle",
+          "documentation":"<p>The sender-provided contact's title (job title or role) associated with the <code>EngagementInvitation</code>.</p>"
+        },
         "Phone":{
           "shape":"PhoneNumber",
           "documentation":"<p>The sender-provided contact's phone number associated with the <code>EngagementInvitation</code>.</p>"
@@ -5109,7 +5118,7 @@
       "type":"string",
       "max":80,
       "min":0,
-      "pattern":"^[a-zA-Z0-9.!#$%&'*+/=?^_{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$",
+      "pattern":"[a-zA-Z0-9.!#$%&'*+/=?^_{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*",
       "sensitive":true
     },
     "SenderContactList":{
@@ -5133,6 +5142,10 @@
           "shape":"RevenueModel",
           "documentation":"<p>Specifies the customer's intended payment type agreement or procurement method to acquire the solution or service outlined in the <code>Opportunity</code>.</p>"
         },
+        "Value":{
+          "shape":"MonetaryValue",
+          "documentation":"<p>Specifies the payment value (amount and currency).</p>"
+        },
         "EffectiveDate":{
           "shape":"Date",
           "documentation":"<p>Specifies the <code>Opportunity</code>'s customer engagement start date for the contract's effectiveness.</p>"
@@ -5140,49 +5153,37 @@
         "ExpirationDate":{
           "shape":"Date",
           "documentation":"<p>Specifies the expiration date for the contract between the customer and Amazon Web Services partner. It signifies the termination date of the agreed-upon engagement period between both parties.</p>"
-        },
-        "Value":{
-          "shape":"MonetaryValue",
-          "documentation":"<p>Specifies the payment value (amount and currency).</p>"
         }
       },
       "documentation":"<p>Specifies a customer's procurement terms details. Required only for partners in eligible programs.</p>"
     },
     "SolutionArn":{
       "type":"string",
-      "pattern":"^S-[0-9]{1,19}$"
+      "pattern":"S-[0-9]{1,19}"
     },
     "SolutionBase":{
       "type":"structure",
       "required":[
         "Catalog",
-        "Category",
-        "CreatedDate",
         "Id",
         "Name",
-        "Status"
+        "Status",
+        "Category",
+        "CreatedDate"
       ],
       "members":{
-        "Arn":{
-          "shape":"SolutionArn",
-          "documentation":"<p> The SolutionBase structure provides essential information about a solution. </p>"
-        },
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog in which the solution is hosted, either <code>AWS</code> or <code>Sandbox</code>. This helps partners differentiate between live solutions and those in testing environments.</p>"
         },
-        "Category":{
-          "shape":"String",
-          "documentation":"<p>Specifies the solution category, which helps to categorize and organize the solutions partners offer. Valid values: <code>Software Product</code> | <code>Consulting Service</code> | <code>Hardware Product</code> | <code>Communications Product</code> | <code>Professional Service</code> | <code>Managed Service</code> | <code>Value-Added Resale Amazon Web Services Service</code> | <code>Distribution Service</code> | <code>Training Service</code> | <code>Merger and Acquisition Advising Service</code>.</p>"
-        },
-        "CreatedDate":{
-          "shape":"DateTime",
-          "documentation":"<p>Indicates the solution creation date. This is useful to track and audit.</p>"
-        },
         "Id":{
           "shape":"SolutionIdentifier",
           "documentation":"<p>Enables the association of solutions (offerings) to opportunities.</p>"
         },
+        "Arn":{
+          "shape":"SolutionArn",
+          "documentation":"<p> The SolutionBase structure provides essential information about a solution. </p>"
+        },
         "Name":{
           "shape":"String",
           "documentation":"<p>Specifies the solution name.</p>"
@@ -5190,13 +5191,21 @@
         "Status":{
           "shape":"SolutionStatus",
           "documentation":"<p>Specifies the solution's current status, which indicates its state in the system. Valid values: <code>Active</code> | <code>Inactive</code> | <code>Draft</code>. The status helps partners and Amazon Web Services track the solution's lifecycle and availability. Filter for <code>Active</code> solutions for association to an opportunity.</p>"
+        },
+        "Category":{
+          "shape":"String",
+          "documentation":"<p>Specifies the solution category, which helps to categorize and organize the solutions partners offer. Valid values: <code>Software Product</code> | <code>Consulting Service</code> | <code>Hardware Product</code> | <code>Communications Product</code> | <code>Professional Service</code> | <code>Managed Service</code> | <code>Value-Added Resale Amazon Web Services Service</code> | <code>Distribution Service</code> | <code>Training Service</code> | <code>Merger and Acquisition Advising Service</code>.</p>"
+        },
+        "CreatedDate":{
+          "shape":"DateTime",
+          "documentation":"<p>Indicates the solution creation date. This is useful to track and audit.</p>"
         }
       },
       "documentation":"<p>Specifies minimal information for the solution offered to solve the customer's business problem.</p>"
     },
     "SolutionIdentifier":{
       "type":"string",
-      "pattern":"^S-[0-9]{1,19}$"
+      "pattern":"S-[0-9]{1,19}"
     },
     "SolutionIdentifiers":{
       "type":"list",
@@ -5209,17 +5218,17 @@
     "SolutionSort":{
       "type":"structure",
       "required":[
-        "SortBy",
-        "SortOrder"
+        "SortOrder",
+        "SortBy"
       ],
       "members":{
-        "SortBy":{
-          "shape":"SolutionSortName",
-          "documentation":"<p>Specifies the attribute to sort by, such as <code>Name</code>, <code>CreatedDate</code>, or <code>Status</code>.</p>"
-        },
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>Specifies the sorting order, either <code>Ascending</code> or <code>Descending</code>. The default is <code>Descending</code>.</p>"
+        },
+        "SortBy":{
+          "shape":"SolutionSortName",
+          "documentation":"<p>Specifies the attribute to sort by, such as <code>Name</code>, <code>CreatedDate</code>, or <code>Status</code>.</p>"
         }
       },
       "documentation":"<p>Configures the solutions' response sorting that enables partners to order solutions based on specified attributes.</p>"
@@ -5302,66 +5311,65 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>A list of objects specifying each tag name and value.</p>"
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign.</p>"
         }
       }
     },
     "StartEngagementByAcceptingInvitationTaskRequestClientTokenString":{
       "type":"string",
       "min":1,
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "StartEngagementByAcceptingInvitationTaskResponse":{
       "type":"structure",
       "members":{
-        "EngagementInvitationId":{
-          "shape":"EngagementInvitationIdentifier",
-          "documentation":"<p>Returns the identifier of the engagement invitation that was accepted and used to create the opportunity.</p>"
+        "TaskId":{
+          "shape":"TaskIdentifier",
+          "documentation":"<p>The unique identifier of the task, used to track the task’s progress.</p>"
+        },
+        "TaskArn":{
+          "shape":"TaskArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the task, used for tracking and managing the task within AWS.</p>"
+        },
+        "StartTime":{
+          "shape":"DateTime",
+          "documentation":"<p>The timestamp indicating when the task was initiated. The format follows RFC 3339 section 5.6.</p>"
+        },
+        "TaskStatus":{
+          "shape":"TaskStatus",
+          "documentation":"<p>Indicates the current status of the task.</p>"
         },
         "Message":{
           "shape":"String",
           "documentation":"<p>If the task fails, this field contains a detailed message describing the failure and possible recovery steps.</p>"
         },
-        "OpportunityId":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Returns the original opportunity identifier passed in the request. This is the unique identifier for the opportunity.</p>"
-        },
         "ReasonCode":{
           "shape":"ReasonCode",
           "documentation":"<p>Indicates the reason for task failure using an enumerated code.</p>"
         },
+        "OpportunityId":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Returns the original opportunity identifier passed in the request. This is the unique identifier for the opportunity.</p>"
+        },
         "ResourceSnapshotJobId":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p>The identifier of the Resource Snapshot Job created as part of this task.</p>"
         },
-        "StartTime":{
-          "shape":"DateTime",
-          "documentation":"<p>The timestamp indicating when the task was initiated. The format follows RFC 3339 section 5.6.</p>"
-        },
-        "TaskArn":{
-          "shape":"TaskArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the task, used for tracking and managing the task within AWS.</p>"
-        },
-        "TaskId":{
-          "shape":"TaskIdentifier",
-          "documentation":"<p>The unique identifier of the task, used to track the task’s progress.</p>"
-        },
-        "TaskStatus":{
-          "shape":"TaskStatus",
-          "documentation":"<p>Indicates the current status of the task.</p>"
+        "EngagementInvitationId":{
+          "shape":"EngagementInvitationIdentifier",
+          "documentation":"<p>Returns the identifier of the engagement invitation that was accepted and used to create the opportunity.</p>"
         }
       }
     },
     "StartEngagementFromOpportunityTaskRequest":{
       "type":"structure",
       "required":[
-        "AwsSubmission",
         "Catalog",
         "ClientToken",
-        "Identifier"
+        "Identifier",
+        "AwsSubmission"
       ],
       "members":{
-        "AwsSubmission":{"shape":"AwsSubmission"},
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog in which the engagement is tracked. Acceptable values include <code>AWS</code> for production and <code>Sandbox</code> for testing environments.</p>"
@@ -5375,59 +5383,60 @@
           "shape":"OpportunityIdentifier",
           "documentation":"<p>The unique identifier of the opportunity from which the engagement task is to be initiated. This helps ensure that the task is applied to the correct opportunity.</p>"
         },
+        "AwsSubmission":{"shape":"AwsSubmission"},
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>A list of objects specifying each tag name and value.</p>"
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign.</p>"
         }
       }
     },
     "StartEngagementFromOpportunityTaskRequestClientTokenString":{
       "type":"string",
       "min":1,
-      "pattern":"^[!-~]{1,64}$"
+      "pattern":"[!-~]{1,64}"
     },
     "StartEngagementFromOpportunityTaskResponse":{
       "type":"structure",
       "members":{
-        "EngagementId":{
-          "shape":"EngagementIdentifier",
-          "documentation":"<p>The identifier of the newly created Engagement. Only populated if TaskStatus is COMPLETE.</p>"
+        "TaskId":{
+          "shape":"TaskIdentifier",
+          "documentation":"<p>The unique identifier of the task, used to track the task’s progress. This value follows a specific pattern: <code>^oit-[0-9a-z]{13}$</code>.</p>"
         },
-        "EngagementInvitationId":{
-          "shape":"EngagementInvitationIdentifier",
-          "documentation":"<p>The identifier of the new Engagement invitation. Only populated if TaskStatus is COMPLETE.</p>"
+        "TaskArn":{
+          "shape":"TaskArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the task, used for tracking and managing the task within AWS.</p>"
+        },
+        "StartTime":{
+          "shape":"DateTime",
+          "documentation":"<p>The timestamp indicating when the task was initiated. The format follows RFC 3339 section 5.6.</p>"
+        },
+        "TaskStatus":{
+          "shape":"TaskStatus",
+          "documentation":"<p>Indicates the current status of the task. Valid values include <code>IN_PROGRESS</code>, <code>COMPLETE</code>, and <code>FAILED</code>.</p>"
         },
         "Message":{
           "shape":"String",
           "documentation":"<p>If the task fails, this field contains a detailed message describing the failure and possible recovery steps.</p>"
         },
-        "OpportunityId":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Returns the original opportunity identifier passed in the request, which is the unique identifier for the opportunity created in the partner’s system.</p>"
-        },
         "ReasonCode":{
           "shape":"ReasonCode",
           "documentation":"<p>Indicates the reason for task failure using an enumerated code.</p>"
         },
+        "OpportunityId":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Returns the original opportunity identifier passed in the request, which is the unique identifier for the opportunity created in the partner’s system.</p>"
+        },
         "ResourceSnapshotJobId":{
           "shape":"ResourceSnapshotJobIdentifier",
           "documentation":"<p>The identifier of the resource snapshot job created to add the opportunity resource snapshot to the Engagement. Only populated if TaskStatus is COMPLETE</p>"
         },
-        "StartTime":{
-          "shape":"DateTime",
-          "documentation":"<p>The timestamp indicating when the task was initiated. The format follows RFC 3339 section 5.6.</p>"
-        },
-        "TaskArn":{
-          "shape":"TaskArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the task, used for tracking and managing the task within AWS.</p>"
-        },
-        "TaskId":{
-          "shape":"TaskIdentifier",
-          "documentation":"<p>The unique identifier of the task, used to track the task’s progress. This value follows a specific pattern: <code>^oit-[0-9a-z]{13}$</code>.</p>"
+        "EngagementId":{
+          "shape":"EngagementIdentifier",
+          "documentation":"<p>The identifier of the newly created Engagement. Only populated if TaskStatus is COMPLETE.</p>"
         },
-        "TaskStatus":{
-          "shape":"TaskStatus",
-          "documentation":"<p>Indicates the current status of the task. Valid values include <code>IN_PROGRESS</code>, <code>COMPLETE</code>, and <code>FAILED</code>.</p>"
+        "EngagementInvitationId":{
+          "shape":"EngagementInvitationIdentifier",
+          "documentation":"<p>The identifier of the new Engagement invitation. Only populated if TaskStatus is COMPLETE.</p>"
         }
       }
     },
@@ -5514,7 +5523,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TagKeyList":{
       "type":"list",
@@ -5541,38 +5550,37 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign.</p>"
         }
       }
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TaggableResourceArn":{
       "type":"string",
       "max":1000,
       "min":1,
-      "pattern":"^arn:[\\w+=/,.@-]+:partnercentral:[\\w+=/,.@-]*:[0-9]{12}:catalog/([a-zA-Z]+)/[\\w+=,.@-]+(/[\\w+=,.@-]+)*$"
+      "pattern":"arn:[\\w+=/,.@-]+:partnercentral:[\\w+=/,.@-]*:[0-9]{12}:catalog/([a-zA-Z]+)/[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
     },
     "TaskArn":{
       "type":"string",
-      "pattern":"^arn:.*"
+      "pattern":"arn:.*"
     },
     "TaskArnOrIdentifier":{
       "type":"string",
-      "pattern":"^(arn:.*|task-[0-9a-z]{13})$"
+      "pattern":"(arn:.*|task-[0-9a-z]{13})"
     },
     "TaskIdentifier":{
       "type":"string",
-      "pattern":"task-[0-9a-z]{13}$"
+      "pattern":".*task-[0-9a-z]{13}"
     },
     "TaskIdentifiers":{
       "type":"list",
@@ -5621,64 +5629,63 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOpportunityRequest":{
       "type":"structure",
       "required":[
         "Catalog",
-        "Identifier",
-        "LastModifiedDate"
+        "LastModifiedDate",
+        "Identifier"
       ],
       "members":{
         "Catalog":{
           "shape":"CatalogIdentifier",
           "documentation":"<p>Specifies the catalog associated with the request. This field takes a string value from a predefined list: <code>AWS</code> or <code>Sandbox</code>. The catalog determines which environment the opportunity is updated in. Use <code>AWS</code> to update real opportunities in the production environment, and <code>Sandbox</code> for testing in secure, isolated environments. When you use the <code>Sandbox</code> catalog, it allows you to simulate and validate your interactions with Amazon Web Services services without affecting live data or operations.</p>"
         },
-        "Customer":{
-          "shape":"Customer",
-          "documentation":"<p>Specifies details of the customer associated with the <code>Opportunity</code>.</p>"
-        },
-        "Identifier":{
-          "shape":"OpportunityIdentifier",
-          "documentation":"<p>Read-only, system generated <code>Opportunity</code> unique identifier.</p>"
-        },
-        "LastModifiedDate":{
-          "shape":"DateTime",
-          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified.</p>"
-        },
-        "LifeCycle":{
-          "shape":"LifeCycle",
-          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
-        },
-        "Marketing":{
-          "shape":"Marketing",
-          "documentation":"<p>An object that contains marketing details for the <code>Opportunity</code>.</p>"
+        "PrimaryNeedsFromAws":{
+          "shape":"PrimaryNeedsFromAws",
+          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an AWS seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connection with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs RFx support from Amazon Web Services.</p> </li> </ul>"
         },
         "NationalSecurity":{
           "shape":"NationalSecurity",
           "documentation":"<p>Specifies if the opportunity is associated with national security concerns. This flag is only applicable when the industry is <code>Government</code>. For national-security-related opportunities, validation and compliance rules may apply, impacting the opportunity's visibility and processing.</p>"
         },
-        "OpportunityType":{
-          "shape":"OpportunityType",
-          "documentation":"<p>Specifies the opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
-        },
         "PartnerOpportunityIdentifier":{
           "shape":"UpdateOpportunityRequestPartnerOpportunityIdentifierString",
           "documentation":"<p>Specifies the opportunity's unique identifier in the partner's CRM system. This value is essential to track and reconcile because it's included in the outbound payload sent back to the partner.</p>"
         },
-        "PrimaryNeedsFromAws":{
-          "shape":"PrimaryNeedsFromAws",
-          "documentation":"<p>Identifies the type of support the partner needs from Amazon Web Services.</p> <p>Valid values:</p> <ul> <li> <p>Cosell—Architectural Validation: Confirmation from Amazon Web Services that the partner's proposed solution architecture is aligned with Amazon Web Services best practices and poses minimal architectural risks.</p> </li> <li> <p>Cosell—Business Presentation: Request Amazon Web Services seller's participation in a joint customer presentation.</p> </li> <li> <p>Cosell—Competitive Information: Access to Amazon Web Services competitive resources and support for the partner's proposed solution.</p> </li> <li> <p>Cosell—Pricing Assistance: Connect with an AWS seller for support situations where a partner may be receiving an upfront discount on a service (for example: EDP deals).</p> </li> <li> <p>Cosell—Technical Consultation: Connection with an Amazon Web Services Solutions Architect to address the partner's questions about the proposed solution.</p> </li> <li> <p>Cosell—Total Cost of Ownership Evaluation: Assistance with quoting different cost savings of proposed solutions on Amazon Web Services versus on-premises or a traditional hosting environment.</p> </li> <li> <p>Cosell—Deal Support: Request Amazon Web Services seller's support to progress the opportunity (for example: joint customer call, strategic positioning).</p> </li> <li> <p>Cosell—Support for Public Tender/RFx: Opportunity related to the public sector where the partner needs RFx support from Amazon Web Services.</p> </li> </ul>"
+        "Customer":{
+          "shape":"Customer",
+          "documentation":"<p>Specifies details of the customer associated with the <code>Opportunity</code>.</p>"
         },
         "Project":{
           "shape":"Project",
           "documentation":"<p>An object that contains project details summary for the <code>Opportunity</code>.</p>"
         },
+        "OpportunityType":{
+          "shape":"OpportunityType",
+          "documentation":"<p>Specifies the opportunity type as a renewal, new, or expansion.</p> <p>Opportunity types:</p> <ul> <li> <p>New opportunity: Represents a new business opportunity with a potential customer that's not previously engaged with your solutions or services.</p> </li> <li> <p>Renewal opportunity: Represents an opportunity to renew an existing contract or subscription with a current customer, ensuring continuity of service.</p> </li> <li> <p>Expansion opportunity: Represents an opportunity to expand the scope of an existing contract or subscription, either by adding new services or increasing the volume of existing services for a current customer.</p> </li> </ul>"
+        },
+        "Marketing":{
+          "shape":"Marketing",
+          "documentation":"<p>An object that contains marketing details for the <code>Opportunity</code>.</p>"
+        },
         "SoftwareRevenue":{
           "shape":"SoftwareRevenue",
           "documentation":"<p>Specifies details of a customer's procurement terms. Required only for partners in eligible programs.</p>"
+        },
+        "LastModifiedDate":{
+          "shape":"DateTime",
+          "documentation":"<p> <code>DateTime</code> when the opportunity was last modified.</p>"
+        },
+        "Identifier":{
+          "shape":"OpportunityIdentifier",
+          "documentation":"<p>Read-only, system generated <code>Opportunity</code> unique identifier.</p>"
+        },
+        "LifeCycle":{
+          "shape":"LifeCycle",
+          "documentation":"<p>An object that contains lifecycle details for the <code>Opportunity</code>.</p>"
         }
       }
     },
@@ -5715,14 +5722,14 @@
         "Reason"
       ],
       "members":{
-        "ErrorList":{
-          "shape":"ValidationExceptionErrorList",
-          "documentation":"<p>A list of issues that were discovered in the submitted request or the resource state.</p>"
-        },
         "Message":{"shape":"String"},
         "Reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>The primary reason for this validation exception to occur.</p> <ul> <li> <p> <i>REQUEST_VALIDATION_FAILED:</i> The request format is not valid.</p> <p>Fix: Verify your request payload includes all required fields, uses correct data types and string formats.</p> </li> <li> <p> <i>BUSINESS_VALIDATION_FAILED:</i> The requested change doesn't pass the business validation rules.</p> <p>Fix: Check that your change aligns with the business rules defined by AWS Partner Central.</p> </li> </ul>"
+        },
+        "ErrorList":{
+          "shape":"ValidationExceptionErrorList",
+          "documentation":"<p>A list of issues that were discovered in the submitted request or the resource state.</p>"
         }
       },
       "documentation":"<p>The input fails to satisfy the constraints specified by the service or business validation rules.</p> <p>Suggested action: Review the error message, including the failed fields and reasons, to correct the request payload.</p>",
@@ -5731,14 +5738,10 @@
     "ValidationExceptionError":{
       "type":"structure",
       "required":[
-        "Code",
-        "Message"
+        "Message",
+        "Code"
       ],
       "members":{
-        "Code":{
-          "shape":"ValidationExceptionErrorCode",
-          "documentation":"<p>Specifies the error code for the invalid field value.</p>"
-        },
         "FieldName":{
           "shape":"String",
           "documentation":"<p>Specifies the field name with the invalid value.</p>"
@@ -5746,6 +5749,10 @@
         "Message":{
           "shape":"String",
           "documentation":"<p>Specifies the detailed error message for the invalid field value.</p>"
+        },
+        "Code":{
+          "shape":"ValidationExceptionErrorCode",
+          "documentation":"<p>Specifies the error code for the invalid field value.</p>"
         }
       },
       "documentation":"<p>Indicates an invalid value for a field.</p> <ul> <li> <p> <i>REQUIRED_FIELD_MISSING:</i> The request is missing a required field.</p> <p>Fix: Verify your request payload includes all required fields.</p> </li> <li> <p> <i>INVALID_ENUM_VALUE:</i> The enum field value isn't an accepted values.</p> <p>Fix: Check the documentation for the list of valid enum values, and update your request with a valid value.</p> </li> <li> <p> <i>INVALID_STRING_FORMAT:</i> The string format is invalid.</p> <p>Fix: Confirm that the string is in the expected format (For example: email address, date).</p> </li> <li> <p> <i>INVALID_VALUE:</i> The value isn't valid.</p> <p>Fix: Confirm that the value meets the expected criteria and is within the allowable range or set.</p> </li> <li> <p> <i>TOO_MANY_VALUES:</i> There are too many values in a field that expects fewer entries.</p> <p>Fix: Reduce the number of values to match the expected limit.</p> </li> <li> <p> <i>ACTION_NOT_PERMITTED:</i> The action isn't permitted due to current state or permissions.</p> <p>Fix: Verify that the action is appropriate for the current state, and that you have the necessary permissions to perform it.</p> </li> <li> <p> <i>DUPLICATE_KEY_VALUE:</i> The value in a field duplicates a value that must be unique.</p> <p>Fix: Verify that the value is unique and doesn't duplicate an existing value in the system.</p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/waiters-2.json 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/partnercentral-selling/2022-07-26/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/partnercentral-selling/2022-07-26/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/payment-cryptography/2021-09-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json 2.31.35-1/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/payment-cryptography/2021-09-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,25 @@
     "uid":"payment-cryptography-2021-09-14"
   },
   "operations":{
+    "AddKeyReplicationRegions":{
+      "name":"AddKeyReplicationRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AddKeyReplicationRegionsInput"},
+      "output":{"shape":"AddKeyReplicationRegionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Adds replication Amazon Web Services Regions to an existing Amazon Web Services Payment Cryptography key, enabling the key to be used for cryptographic operations in additional Amazon Web Services Regions.</p> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a> allow you to use the same key material across multiple Amazon Web Services Regions, providing lower latency for applications distributed across regions. When you add Replication Regions, Amazon Web Services Payment Cryptography securely replicates the key material to the specified Amazon Web Services Regions.</p> <p>The key must be in an active state to add Replication Regions. You can add multiple regions in a single operation, and the key will be available for use in those regions once replication is complete.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_RemoveKeyReplicationRegions.html\">RemoveKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_EnableDefaultKeyReplicationRegions.html\">EnableDefaultKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetDefaultKeyReplicationRegions.html\">GetDefaultKeyReplicationRegions</a> </p> </li> </ul>"
+    },
     "CreateAlias":{
       "name":"CreateAlias",
       "http":{
@@ -54,7 +73,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates an Amazon Web Services Payment Cryptography key, a logical representation of a cryptographic key, that is unique in your account and Amazon Web Services Region. You use keys for cryptographic functions such as encryption and decryption. </p> <p>In addition to the key material used in cryptographic operations, an Amazon Web Services Payment Cryptography key includes metadata such as the key ARN, key usage, key origin, creation date, description, and key state.</p> <p>When you create a key, you specify both immutable and mutable data about the key. The immutable data contains key attributes that define the scope and cryptographic operations that you can perform using the key, for example key class (example: <code>SYMMETRIC_KEY</code>), key algorithm (example: <code>TDES_2KEY</code>), key usage (example: <code>TR31_P0_PIN_ENCRYPTION_KEY</code>) and key modes of use (example: <code>Encrypt</code>). For information about valid combinations of key attributes, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. The mutable data contained within a key includes usage timestamp and key deletion timestamp and can be modified after creation.</p> <p>Amazon Web Services Payment Cryptography binds key attributes to keys using key blocks when you store or export them. Amazon Web Services Payment Cryptography stores the key contents wrapped and never stores or transmits them in the clear. </p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetKey.html\">GetKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListKeys.html\">ListKeys</a> </p> </li> </ul>"
+      "documentation":"<p>Creates an Amazon Web Services Payment Cryptography key, a logical representation of a cryptographic key, that is unique in your account and Amazon Web Services Region. You use keys for cryptographic functions such as encryption and decryption. </p> <p>In addition to the key material used in cryptographic operations, an Amazon Web Services Payment Cryptography key includes metadata such as the key ARN, key usage, key origin, creation date, description, and key state.</p> <p>When you create a key, you specify both immutable and mutable data about the key. The immutable data contains key attributes that define the scope and cryptographic operations that you can perform using the key, for example key class (example: <code>SYMMETRIC_KEY</code>), key algorithm (example: <code>TDES_2KEY</code>), key usage (example: <code>TR31_P0_PIN_ENCRYPTION_KEY</code>) and key modes of use (example: <code>Encrypt</code>). Amazon Web Services Payment Cryptography binds key attributes to keys using key blocks when you store or export them. Amazon Web Services Payment Cryptography stores the key contents wrapped and never stores or transmits them in the clear.</p> <p>For information about valid combinations of key attributes, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. The mutable data contained within a key includes usage timestamp and key deletion timestamp and can be modified after creation.</p> <p>You can use the <code>CreateKey</code> operation to generate an ECC (Elliptic Curve Cryptography) key pair used for establishing an ECDH (Elliptic Curve Diffie-Hellman) key agreement between two parties. In the ECDH key agreement process, both parties generate their own ECC key pair with key usage K3 and exchange the public keys. Each party then use their private key, the received public key from the other party, and the key derivation parameters including key derivation function, hash algorithm, derivation data, and key algorithm to derive a shared key.</p> <p>To maintain the single-use principle of cryptographic keys in payments, ECDH derived keys should not be used for multiple purposes, such as a <code>TR31_P0_PIN_ENCRYPTION_KEY</code> and <code>TR31_K1_KEY_BLOCK_PROTECTION_KEY</code>. When creating ECC key pairs in Amazon Web Services Payment Cryptography you can optionally set the <code>DeriveKeyUsage</code> parameter, which defines the key usage bound to the symmetric key that will be derived using the ECC key pair.</p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetKey.html\">GetKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListKeys.html\">ListKeys</a> </p> </li> </ul>"
     },
     "DeleteAlias":{
       "name":"DeleteAlias",
@@ -96,6 +115,44 @@
       "documentation":"<p>Deletes the key material and metadata associated with Amazon Web Services Payment Cryptography key.</p> <p>Key deletion is irreversible. After a key is deleted, you can't perform cryptographic operations using the key. For example, you can't decrypt data that was encrypted by a deleted Amazon Web Services Payment Cryptography key, and the data may become unrecoverable. Because key deletion is destructive, Amazon Web Services Payment Cryptography has a safety mechanism to prevent accidental deletion of a key. When you call this operation, Amazon Web Services Payment Cryptography disables the specified key but doesn't delete it until after a waiting period set using <code>DeleteKeyInDays</code>. The default waiting period is 7 days. During the waiting period, the <code>KeyState</code> is <code>DELETE_PENDING</code>. After the key is deleted, the <code>KeyState</code> is <code>DELETE_COMPLETE</code>.</p> <p>You should delete a key only when you are sure that you don't need to use it anymore and no other parties are utilizing this key. If you aren't sure, consider deactivating it instead by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_StopKeyUsage.html\">StopKeyUsage</a>.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_RestoreKey.html\">RestoreKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_StartKeyUsage.html\">StartKeyUsage</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_StopKeyUsage.html\">StopKeyUsage</a> </p> </li> </ul>",
       "idempotent":true
     },
+    "DisableDefaultKeyReplicationRegions":{
+      "name":"DisableDefaultKeyReplicationRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisableDefaultKeyReplicationRegionsInput"},
+      "output":{"shape":"DisableDefaultKeyReplicationRegionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Disables <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a> settings for the specified Amazon Web Services Regions in your Amazon Web Services account, preventing new keys from being automatically replicated to those regions.</p> <p>After disabling Multi-Region key replication for specific regions, new keys created in your account will not be automatically replicated to those regions. You can still manually add replication to those regions for individual keys using the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_AddKeyReplicationRegions.html\">AddKeyReplicationRegions</a> operation.</p> <p>This operation does not affect existing keys or their current replication configuration.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_EnableDefaultKeyReplicationRegions.html\">EnableDefaultKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetDefaultKeyReplicationRegions.html\">GetDefaultKeyReplicationRegions</a> </p> </li> </ul>"
+    },
+    "EnableDefaultKeyReplicationRegions":{
+      "name":"EnableDefaultKeyReplicationRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"EnableDefaultKeyReplicationRegionsInput"},
+      "output":{"shape":"EnableDefaultKeyReplicationRegionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Enables <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a> settings for your Amazon Web Services account, causing new keys to be automatically replicated to the specified Amazon Web Services Regions when created.</p> <p>When Multi-Region key replication are enabled, any new keys created in your account will automatically be replicated to these regions unless you explicitly override this behavior during key creation. This simplifies key management for applications that operate across multiple regions.</p> <p>Existing keys are not affected by this operation - only keys created after enabling default replication will be automatically replicated.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DisableDefaultKeyReplicationRegions.html\">DisableDefaultKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetDefaultKeyReplicationRegions.html\">GetDefaultKeyReplicationRegions</a> </p> </li> </ul>"
+    },
     "ExportKey":{
       "name":"ExportKey",
       "http":{
@@ -113,7 +170,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Exports a key from Amazon Web Services Payment Cryptography.</p> <p>Amazon Web Services Payment Cryptography simplifies key exchange by replacing the existing paper-based approach with a modern electronic approach. With <code>ExportKey</code> you can export symmetric keys using either symmetric and asymmetric key exchange mechanisms. Using this operation, you can share your Amazon Web Services Payment Cryptography generated keys with other service partners to perform cryptographic operations outside of Amazon Web Services Payment Cryptography </p> <p>For symmetric key exchange, Amazon Web Services Payment Cryptography uses the ANSI X9 TR-31 norm in accordance with PCI PIN guidelines. And for asymmetric key exchange, Amazon Web Services Payment Cryptography supports ANSI X9 TR-34 norm and RSA wrap and unwrap key exchange mechanism. Asymmetric key exchange methods are typically used to establish bi-directional trust between the two parties exhanging keys and are used for initial key exchange such as Key Encryption Key (KEK). After which you can export working keys using symmetric method to perform various cryptographic operations within Amazon Web Services Payment Cryptography.</p> <p>The TR-34 norm is intended for exchanging 3DES keys only and keys are imported in a WrappedKeyBlock format. Key attributes (such as KeyUsage, KeyAlgorithm, KeyModesOfUse, Exportability) are contained within the key block. With RSA wrap and unwrap, you can exchange both 3DES and AES-128 keys. The keys are imported in a WrappedKeyCryptogram format and you will need to specify the key attributes during import. </p> <p>You can also use <code>ExportKey</code> functionality to generate and export an IPEK (Initial Pin Encryption Key) from Amazon Web Services Payment Cryptography using either TR-31 or TR-34 export key exchange. IPEK is generated from BDK (Base Derivation Key) and <code>ExportDukptInitialKey</code> attribute KSN (<code>KeySerialNumber</code>). The generated IPEK does not persist within Amazon Web Services Payment Cryptography and has to be re-generated each time during export.</p> <p>For key exchange using TR-31 or TR-34 key blocks, you can also export optional blocks within the key block header which contain additional attribute information about the key. The <code>KeyVersion</code> within <code>KeyBlockHeaders</code> indicates the version of the key within the key block. Furthermore, <code>KeyExportability</code> within <code>KeyBlockHeaders</code> can be used to further restrict exportability of the key after export from Amazon Web Services Payment Cryptography.</p> <p>The <code>OptionalBlocks</code> contain the additional data related to the key. For information on data type that can be included within optional blocks, refer to <a href=\"https://webstore.ansi.org/standards/ascx9/ansix91432022\">ASC X9.143-2022</a>.</p> <note> <p>Data included in key block headers is signed but transmitted in clear text. Sensitive or confidential information should not be included in optional blocks. Refer to ASC X9.143-2022 standard for information on allowed data type.</p> </note> <p> <b>To export initial keys (KEK) or IPEK using TR-34</b> </p> <p>Using this operation, you can export initial key using TR-34 asymmetric key exchange. You can only export KEK generated within Amazon Web Services Payment Cryptography. In TR-34 terminology, the sending party of the key is called Key Distribution Host (KDH) and the receiving party of the key is called Key Receiving Device (KRD). During key export process, KDH is Amazon Web Services Payment Cryptography which initiates key export and KRD is the user receiving the key.</p> <p>To initiate TR-34 key export, the KRD must obtain an export token by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a>. This operation also generates a key pair for the purpose of key export, signs the key and returns back the signing public key certificate (also known as KDH signing certificate) and root certificate chain. The KDH uses the private key to sign the the export payload and the signing public key certificate is provided to KRD to verify the signature. The KRD can import the root certificate into its Hardware Security Module (HSM), as required. The export token and the associated KDH signing certificate expires after 7 days. </p> <p>Next the KRD generates a key pair for the the purpose of encrypting the KDH key and provides the public key cerificate (also known as KRD wrapping certificate) back to KDH. The KRD will also import the root cerificate chain into Amazon Web Services Payment Cryptography by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> for <code>RootCertificatePublicKey</code>. The KDH, Amazon Web Services Payment Cryptography, will use the KRD wrapping cerificate to encrypt (wrap) the key under export and signs it with signing private key to generate a TR-34 WrappedKeyBlock. For more information on TR-34 key export, see section <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-export.html\">Exporting symmetric keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p>Set the following parameters:</p> <ul> <li> <p> <code>ExportAttributes</code>: Specify export attributes in case of IPEK export. This parameter is optional for KEK export.</p> </li> <li> <p> <code>ExportKeyIdentifier</code>: The <code>KeyARN</code> of the KEK or BDK (in case of IPEK) under export.</p> </li> <li> <p> <code>KeyMaterial</code>: Use <code>Tr34KeyBlock</code> parameters.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed the KRD wrapping key certificate.</p> </li> <li> <p> <code>ExportToken</code>: Obtained from KDH by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>.</p> </li> <li> <p> <code>WrappingKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the KRD wrapping key Amazon Web Services Payment Cryptography uses for encryption of the TR-34 export payload. This certificate must be signed by the root certificate (CertificateAuthorityPublicKeyIdentifier) imported into Amazon Web Services Payment Cryptography.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the KEK or IPEK as a TR-34 WrappedKeyBlock. </p> <p> <b>To export initial keys (KEK) or IPEK using RSA Wrap and Unwrap</b> </p> <p>Using this operation, you can export initial key using asymmetric RSA wrap and unwrap key exchange method. To initiate export, generate an asymmetric key pair on the receiving HSM and obtain the public key certificate in PEM format (base64 encoded) for the purpose of wrapping and the root certifiate chain. Import the root certificate into Amazon Web Services Payment Cryptography by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> for <code>RootCertificatePublicKey</code>.</p> <p>Next call <code>ExportKey</code> and set the following parameters:</p> <ul> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed wrapping key certificate.</p> </li> <li> <p> <code>KeyMaterial</code>: Set to <code>KeyCryptogram</code>.</p> </li> <li> <p> <code>WrappingKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) obtained by the receiving HSM and signed by the root certificate (CertificateAuthorityPublicKeyIdentifier) imported into Amazon Web Services Payment Cryptography. The receiving HSM uses its private key component to unwrap the WrappedKeyCryptogram.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the WrappedKeyCryptogram. </p> <p> <b>To export working keys or IPEK using TR-31</b> </p> <p>Using this operation, you can export working keys or IPEK using TR-31 symmetric key exchange. In TR-31, you must use an initial key such as KEK to encrypt or wrap the key under export. To establish a KEK, you can use <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> or <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a>. </p> <p>Set the following parameters:</p> <ul> <li> <p> <code>ExportAttributes</code>: Specify export attributes in case of IPEK export. This parameter is optional for KEK export.</p> </li> <li> <p> <code>ExportKeyIdentifier</code>: The <code>KeyARN</code> of the KEK or BDK (in case of IPEK) under export.</p> </li> <li> <p> <code>KeyMaterial</code>: Use <code>Tr31KeyBlock</code> parameters.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the working key or IPEK as a TR-31 WrappedKeyBlock.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
+      "documentation":"<p>Exports a key from Amazon Web Services Payment Cryptography.</p> <p>Amazon Web Services Payment Cryptography simplifies key exchange by replacing the existing paper-based approach with a modern electronic approach. With <code>ExportKey</code> you can export symmetric keys using either symmetric and asymmetric key exchange mechanisms. Using this operation, you can share your Amazon Web Services Payment Cryptography generated keys with other service partners to perform cryptographic operations outside of Amazon Web Services Payment Cryptography </p> <p>For symmetric key exchange, Amazon Web Services Payment Cryptography uses the ANSI X9 TR-31 norm in accordance with PCI PIN guidelines. And for asymmetric key exchange, Amazon Web Services Payment Cryptography supports ANSI X9 TR-34 norm, RSA unwrap, and ECDH (Elliptic Curve Diffie-Hellman) key exchange mechanisms. Asymmetric key exchange methods are typically used to establish bi-directional trust between the two parties exhanging keys and are used for initial key exchange such as Key Encryption Key (KEK). After which you can export working keys using symmetric method to perform various cryptographic operations within Amazon Web Services Payment Cryptography.</p> <p>PCI requires specific minimum key strength of wrapping keys used to protect the keys being exchanged electronically. These requirements can change when PCI standards are revised. The rules specify that wrapping keys used for transport must be at least as strong as the key being protected. For more information on recommended key strength of wrapping keys and key exchange mechanism, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-importexport.html\">Importing and exporting keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>You can also use <code>ExportKey</code> functionality to generate and export an IPEK (Initial Pin Encryption Key) from Amazon Web Services Payment Cryptography using either TR-31 or TR-34 export key exchange. IPEK is generated from BDK (Base Derivation Key) and <code>ExportDukptInitialKey</code> attribute KSN (<code>KeySerialNumber</code>). The generated IPEK does not persist within Amazon Web Services Payment Cryptography and has to be re-generated each time during export.</p> <p>For key exchange using TR-31 or TR-34 key blocks, you can also export optional blocks within the key block header which contain additional attribute information about the key. The <code>KeyVersion</code> within <code>KeyBlockHeaders</code> indicates the version of the key within the key block. Furthermore, <code>KeyExportability</code> within <code>KeyBlockHeaders</code> can be used to further restrict exportability of the key after export from Amazon Web Services Payment Cryptography.</p> <p>The <code>OptionalBlocks</code> contain the additional data related to the key. For information on data type that can be included within optional blocks, refer to <a href=\"https://webstore.ansi.org/standards/ascx9/ansix91432022\">ASC X9.143-2022</a>.</p> <note> <p>Data included in key block headers is signed but transmitted in clear text. Sensitive or confidential information should not be included in optional blocks. Refer to ASC X9.143-2022 standard for information on allowed data type.</p> </note> <p> <b>To export initial keys (KEK) or IPEK using TR-34</b> </p> <p>Using this operation, you can export initial key using TR-34 asymmetric key exchange. You can only export KEK generated within Amazon Web Services Payment Cryptography. In TR-34 terminology, the sending party of the key is called Key Distribution Host (KDH) and the receiving party of the key is called Key Receiving Device (KRD). During key export process, KDH is Amazon Web Services Payment Cryptography which initiates key export and KRD is the user receiving the key.</p> <p>To initiate TR-34 key export, the KRD must obtain an export token by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a>. This operation also generates a key pair for the purpose of key export, signs the key and returns back the signing public key certificate (also known as KDH signing certificate) and root certificate chain. The KDH uses the private key to sign the the export payload and the signing public key certificate is provided to KRD to verify the signature. The KRD can import the root certificate into its Hardware Security Module (HSM), as required. The export token and the associated KDH signing certificate expires after 30 days. </p> <p>Next the KRD generates a key pair for the the purpose of encrypting the KDH key and provides the public key cerificate (also known as KRD wrapping certificate) back to KDH. The KRD will also import the root cerificate chain into Amazon Web Services Payment Cryptography by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> for <code>RootCertificatePublicKey</code>. The KDH, Amazon Web Services Payment Cryptography, will use the KRD wrapping cerificate to encrypt (wrap) the key under export and signs it with signing private key to generate a TR-34 WrappedKeyBlock. For more information on TR-34 key export, see section <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-export.html\">Exporting symmetric keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p>Set the following parameters:</p> <ul> <li> <p> <code>ExportAttributes</code>: Specify export attributes in case of IPEK export. This parameter is optional for KEK export.</p> </li> <li> <p> <code>ExportKeyIdentifier</code>: The <code>KeyARN</code> of the KEK or BDK (in case of IPEK) under export.</p> </li> <li> <p> <code>KeyMaterial</code>: Use <code>Tr34KeyBlock</code> parameters.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed the KRD wrapping key certificate.</p> </li> <li> <p> <code>ExportToken</code>: Obtained from KDH by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>.</p> </li> <li> <p> <code>WrappingKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the KRD wrapping key Amazon Web Services Payment Cryptography uses for encryption of the TR-34 export payload. This certificate must be signed by the root certificate (CertificateAuthorityPublicKeyIdentifier) imported into Amazon Web Services Payment Cryptography.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the KEK or IPEK as a TR-34 WrappedKeyBlock. </p> <p> <b>To export initial keys (KEK) or IPEK using RSA Wrap and Unwrap</b> </p> <p>Using this operation, you can export initial key using asymmetric RSA wrap and unwrap key exchange method. To initiate export, generate an asymmetric key pair on the receiving HSM and obtain the public key certificate in PEM format (base64 encoded) for the purpose of wrapping and the root certifiate chain. Import the root certificate into Amazon Web Services Payment Cryptography by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> for <code>RootCertificatePublicKey</code>.</p> <p>Next call <code>ExportKey</code> and set the following parameters:</p> <ul> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed wrapping key certificate.</p> </li> <li> <p> <code>KeyMaterial</code>: Set to <code>KeyCryptogram</code>.</p> </li> <li> <p> <code>WrappingKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) obtained by the receiving HSM and signed by the root certificate (CertificateAuthorityPublicKeyIdentifier) imported into Amazon Web Services Payment Cryptography. The receiving HSM uses its private key component to unwrap the WrappedKeyCryptogram.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the WrappedKeyCryptogram. </p> <p> <b>To export working keys or IPEK using TR-31</b> </p> <p>Using this operation, you can export working keys or IPEK using TR-31 symmetric key exchange. In TR-31, you must use an initial key such as KEK to encrypt or wrap the key under export. To establish a KEK, you can use <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> or <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a>. </p> <p>Set the following parameters:</p> <ul> <li> <p> <code>ExportAttributes</code>: Specify export attributes in case of IPEK export. This parameter is optional for KEK export.</p> </li> <li> <p> <code>ExportKeyIdentifier</code>: The <code>KeyARN</code> of the KEK or BDK (in case of IPEK) under export.</p> </li> <li> <p> <code>KeyMaterial</code>: Use <code>Tr31KeyBlock</code> parameters.</p> </li> </ul> <p> <b>To export working keys using ECDH</b> </p> <p>You can also use ECDH key agreement to export working keys in a TR-31 keyblock, where the wrapping key is an ECDH derived key.</p> <p>To initiate a TR-31 key export using ECDH, both sides must create an ECC key pair with key usage K3 and exchange public key certificates. In Amazon Web Services Payment Cryptography, you can do this by calling <code>CreateKey</code>. If you have not already done so, you must import the CA chain that issued the receiving public key certificate by calling <code>ImportKey</code> with input <code>RootCertificatePublicKey</code> for root CA or <code>TrustedPublicKey</code> for intermediate CA. You can then complete a TR-31 key export by deriving a shared wrapping key using the service ECC key pair, public certificate of your ECC key pair outside of Amazon Web Services Payment Cryptography, and the key derivation parameters including key derivation function, hash algorithm, derivation data, key algorithm.</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>DiffieHellmanTr31KeyBlock</code> parameters.</p> </li> <li> <p> <code>PrivateKeyIdentifier</code>: The <code>KeyArn</code> of the ECC key pair created within Amazon Web Services Payment Cryptography to derive a shared KEK.</p> </li> <li> <p> <code>PublicKeyCertificate</code>: The public key certificate of the receiving ECC key pair in PEM format (base64 encoded) to derive a shared KEK.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>keyARN</code> of the CA that signed the public key certificate of the receiving ECC key pair.</p> </li> </ul> <p>When this operation is successful, Amazon Web Services Payment Cryptography returns the working key as a TR-31 WrappedKeyBlock, where the wrapping key is the ECDH derived key.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
     },
     "GetAlias":{
       "name":"GetAlias",
@@ -131,7 +188,45 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the Amazon Web Services Payment Cryptography key associated with the alias.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateAlias.html\">CreateAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteAlias.html\">DeleteAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListAliases.html\">ListAliases</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UpdateAlias.html\">UpdateAlias</a> </p> </li> </ul>"
+      "documentation":"<p>Gets the Amazon Web Services Payment Cryptography key associated with the alias.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateAlias.html\">CreateAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteAlias.html\">DeleteAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListAliases.html\">ListAliases</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UpdateAlias.html\">UpdateAlias</a> </p> </li> </ul>",
+      "readonly":true
+    },
+    "GetCertificateSigningRequest":{
+      "name":"GetCertificateSigningRequest",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetCertificateSigningRequestInput"},
+      "output":{"shape":"GetCertificateSigningRequestOutput"},
+      "errors":[
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Creates a certificate signing request (CSR) from a key pair.</p>"
+    },
+    "GetDefaultKeyReplicationRegions":{
+      "name":"GetDefaultKeyReplicationRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDefaultKeyReplicationRegionsInput"},
+      "output":{"shape":"GetDefaultKeyReplicationRegionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves the list of Amazon Web Services Regions where <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a> is currently enabled for your Amazon Web Services account.</p> <p>This operation returns the current Multi-Region key replication configuration. New keys created in your account will be automatically replicated to these regions unless explicitly overridden during key creation.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_EnableDefaultKeyReplicationRegions.html\">EnableDefaultKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DisableDefaultKeyReplicationRegions.html\">DisableDefaultKeyReplicationRegions</a> </p> </li> </ul>"
     },
     "GetKey":{
       "name":"GetKey",
@@ -149,7 +244,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the key material for an Amazon Web Services Payment Cryptography key, including the immutable and mutable data specified when the key was created.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListKeys.html\">ListKeys</a> </p> </li> </ul>"
+      "documentation":"<p>Gets the key metadata for an Amazon Web Services Payment Cryptography key, including the immutable and mutable attributes specified when the key was created. Returns key metadata including attributes, state, and timestamps, but does not return the actual cryptographic key material.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ListKeys.html\">ListKeys</a> </p> </li> </ul>",
+      "readonly":true
     },
     "GetParametersForExport":{
       "name":"GetParametersForExport",
@@ -169,7 +265,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the export token and the signing key certificate to initiate a TR-34 key export from Amazon Web Services Payment Cryptography.</p> <p>The signing key certificate signs the wrapped key under export within the TR-34 key payload. The export token and signing key certificate must be in place and operational before calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a>. The export token expires in 7 days. You can use the same export token to export multiple keys from your service account.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> </p> </li> </ul>"
+      "documentation":"<p>Gets the export token and the signing key certificate to initiate a TR-34 key export from Amazon Web Services Payment Cryptography.</p> <p>The signing key certificate signs the wrapped key under export within the TR-34 key payload. The export token and signing key certificate must be in place and operational before calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a>. The export token expires in 30 days. You can use the same export token to export multiple keys from your service account.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> </p> </li> </ul>"
     },
     "GetParametersForImport":{
       "name":"GetParametersForImport",
@@ -189,7 +285,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the import token and the wrapping key certificate in PEM format (base64 encoded) to initiate a TR-34 WrappedKeyBlock or a RSA WrappedKeyCryptogram import into Amazon Web Services Payment Cryptography.</p> <p>The wrapping key certificate wraps the key under import. The import token and wrapping key certificate must be in place and operational before calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a>. The import token expires in 7 days. You can use the same import token to import multiple keys into your service account.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
+      "documentation":"<p>Gets the import token and the wrapping key certificate in PEM format (base64 encoded) to initiate a TR-34 WrappedKeyBlock or a RSA WrappedKeyCryptogram import into Amazon Web Services Payment Cryptography.</p> <p>The wrapping key certificate wraps the key under import. The import token and wrapping key certificate must be in place and operational before calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a>. The import token expires in 30 days. You can use the same import token to import multiple keys into your service account.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
     },
     "GetPublicKeyCertificate":{
       "name":"GetPublicKeyCertificate",
@@ -207,7 +303,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Gets the public key certificate of the asymmetric key pair that exists within Amazon Web Services Payment Cryptography.</p> <p>Unlike the private key of an asymmetric key, which never leaves Amazon Web Services Payment Cryptography unencrypted, callers with <code>GetPublicKeyCertificate</code> permission can download the public key certificate of the asymmetric key. You can share the public key certificate to allow others to encrypt messages and verify signatures outside of Amazon Web Services Payment Cryptography</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p>"
+      "documentation":"<p>Gets the public key certificate of the asymmetric key pair that exists within Amazon Web Services Payment Cryptography.</p> <p>Unlike the private key of an asymmetric key, which never leaves Amazon Web Services Payment Cryptography unencrypted, callers with <code>GetPublicKeyCertificate</code> permission can download the public key certificate of the asymmetric key. You can share the public key certificate to allow others to encrypt messages and verify signatures outside of Amazon Web Services Payment Cryptography</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p>",
+      "readonly":true
     },
     "ImportKey":{
       "name":"ImportKey",
@@ -227,7 +324,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Imports symmetric keys and public key certificates in PEM format (base64 encoded) into Amazon Web Services Payment Cryptography.</p> <p>Amazon Web Services Payment Cryptography simplifies key exchange by replacing the existing paper-based approach with a modern electronic approach. With <code>ImportKey</code> you can import symmetric keys using either symmetric and asymmetric key exchange mechanisms.</p> <p>For symmetric key exchange, Amazon Web Services Payment Cryptography uses the ANSI X9 TR-31 norm in accordance with PCI PIN guidelines. And for asymmetric key exchange, Amazon Web Services Payment Cryptography supports ANSI X9 TR-34 norm and RSA wrap and unwrap key exchange mechanisms. Asymmetric key exchange methods are typically used to establish bi-directional trust between the two parties exhanging keys and are used for initial key exchange such as Key Encryption Key (KEK) or Zone Master Key (ZMK). After which you can import working keys using symmetric method to perform various cryptographic operations within Amazon Web Services Payment Cryptography.</p> <p>The TR-34 norm is intended for exchanging 3DES keys only and keys are imported in a WrappedKeyBlock format. Key attributes (such as KeyUsage, KeyAlgorithm, KeyModesOfUse, Exportability) are contained within the key block. With RSA wrap and unwrap, you can exchange both 3DES and AES-128 keys. The keys are imported in a WrappedKeyCryptogram format and you will need to specify the key attributes during import. </p> <p>You can also import a <i>root public key certificate</i>, used to sign other public key certificates, or a <i>trusted public key certificate</i> under an already established root public key certificate.</p> <p> <b>To import a public root key certificate</b> </p> <p>You can also import a <i>root public key certificate</i>, used to sign other public key certificates, or a <i>trusted public key certificate</i> under an already established root public key certificate.</p> <p> <b>To import a public root key certificate</b> </p> <p>Using this operation, you can import the public component (in PEM cerificate format) of your private root key. You can use the imported public root key certificate for digital signatures, for example signing wrapping key or signing key in TR-34, within your Amazon Web Services Payment Cryptography account.</p> <p>Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: <code>RootCertificatePublicKey</code> </p> </li> <li> <p> <code>KeyClass</code>: <code>PUBLIC_KEY</code> </p> </li> <li> <p> <code>KeyModesOfUse</code>: <code>Verify</code> </p> </li> <li> <p> <code>KeyUsage</code>: <code>TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE</code> </p> </li> <li> <p> <code>PublicKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the private root key under import.</p> </li> </ul> <p> <b>To import a trusted public key certificate</b> </p> <p>The root public key certificate must be in place and operational before you import a trusted public key certificate. Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: <code>TrustedCertificatePublicKey</code> </p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: <code>KeyArn</code> of the <code>RootCertificatePublicKey</code>.</p> </li> <li> <p> <code>KeyModesOfUse</code> and <code>KeyUsage</code>: Corresponding to the cryptographic operations such as wrap, sign, or encrypt that you will allow the trusted public key certificate to perform.</p> </li> <li> <p> <code>PublicKeyCertificate</code>: The trusted public key certificate in PEM format (base64 encoded) under import.</p> </li> </ul> <p> <b>To import initial keys (KEK or ZMK or similar) using TR-34</b> </p> <p>Using this operation, you can import initial key using TR-34 asymmetric key exchange. In TR-34 terminology, the sending party of the key is called Key Distribution Host (KDH) and the receiving party of the key is called Key Receiving Device (KRD). During the key import process, KDH is the user who initiates the key import and KRD is Amazon Web Services Payment Cryptography who receives the key.</p> <p>To initiate TR-34 key import, the KDH must obtain an import token by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>. This operation generates an encryption keypair for the purpose of key import, signs the key and returns back the wrapping key certificate (also known as KRD wrapping certificate) and the root certificate chain. The KDH must trust and install the KRD wrapping certificate on its HSM and use it to encrypt (wrap) the KDH key during TR-34 WrappedKeyBlock generation. The import token and associated KRD wrapping certificate expires after 7 days.</p> <p>Next the KDH generates a key pair for the purpose of signing the encrypted KDH key and provides the public certificate of the signing key to Amazon Web Services Payment Cryptography. The KDH will also need to import the root certificate chain of the KDH signing certificate by calling <code>ImportKey</code> for <code>RootCertificatePublicKey</code>. For more information on TR-34 key import, see section <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-import.html\">Importing symmetric keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>Tr34KeyBlock</code> parameters.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed the KDH signing key certificate.</p> </li> <li> <p> <code>ImportToken</code>: Obtained from KRD by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>.</p> </li> <li> <p> <code>WrappedKeyBlock</code>: The TR-34 wrapped key material from KDH. It contains the KDH key under import, wrapped with KRD wrapping certificate and signed by KDH signing private key. This TR-34 key block is typically generated by the KDH Hardware Security Module (HSM) outside of Amazon Web Services Payment Cryptography.</p> </li> <li> <p> <code>SigningKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the KDH signing key generated under the root certificate (CertificateAuthorityPublicKeyIdentifier) imported in Amazon Web Services Payment Cryptography.</p> </li> </ul> <p> <b>To import initial keys (KEK or ZMK or similar) using RSA Wrap and Unwrap</b> </p> <p>Using this operation, you can import initial key using asymmetric RSA wrap and unwrap key exchange method. To initiate import, call <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> with <code>KeyMaterial</code> set to <code>KEY_CRYPTOGRAM</code> to generate an import token. This operation also generates an encryption keypair for the purpose of key import, signs the key and returns back the wrapping key certificate in PEM format (base64 encoded) and its root certificate chain. The import token and associated KRD wrapping certificate expires after 7 days. </p> <p>You must trust and install the wrapping certificate and its certificate chain on the sending HSM and use it to wrap the key under export for WrappedKeyCryptogram generation. Next call <code>ImportKey</code> with <code>KeyMaterial</code> set to <code>KEY_CRYPTOGRAM</code> and provide the <code>ImportToken</code> and <code>KeyAttributes</code> for the key under import.</p> <p> <b>To import working keys using TR-31</b> </p> <p>Amazon Web Services Payment Cryptography uses TR-31 symmetric key exchange norm to import working keys. A KEK must be established within Amazon Web Services Payment Cryptography by using TR-34 key import or by using <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a>. To initiate a TR-31 key import, set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>Tr31KeyBlock</code> parameters.</p> </li> <li> <p> <code>WrappedKeyBlock</code>: The TR-31 wrapped key material. It contains the key under import, encrypted using KEK. The TR-31 key block is typically generated by a HSM outside of Amazon Web Services Payment Cryptography. </p> </li> <li> <p> <code>WrappingKeyIdentifier</code>: The <code>KeyArn</code> of the KEK that Amazon Web Services Payment Cryptography uses to decrypt or unwrap the key under import.</p> </li> </ul> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> </p> </li> </ul>"
+      "documentation":"<p>Imports symmetric keys and public key certificates in PEM format (base64 encoded) into Amazon Web Services Payment Cryptography.</p> <p>Amazon Web Services Payment Cryptography simplifies key exchange by replacing the existing paper-based approach with a modern electronic approach. With <code>ImportKey</code> you can import symmetric keys using either symmetric and asymmetric key exchange mechanisms.</p> <p>For symmetric key exchange, Amazon Web Services Payment Cryptography uses the ANSI X9 TR-31 norm in accordance with PCI PIN guidelines. And for asymmetric key exchange, Amazon Web Services Payment Cryptography supports ANSI X9 TR-34 norm, RSA unwrap, and ECDH (Elliptic Curve Diffie-Hellman) key exchange mechanisms. Asymmetric key exchange methods are typically used to establish bi-directional trust between the two parties exhanging keys and are used for initial key exchange such as Key Encryption Key (KEK) or Zone Master Key (ZMK). After which you can import working keys using symmetric method to perform various cryptographic operations within Amazon Web Services Payment Cryptography.</p> <p>PCI requires specific minimum key strength of wrapping keys used to protect the keys being exchanged electronically. These requirements can change when PCI standards are revised. The rules specify that wrapping keys used for transport must be at least as strong as the key being protected. For more information on recommended key strength of wrapping keys and key exchange mechanism, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-importexport.html\">Importing and exporting keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>You can also import a <i>root public key certificate</i>, used to sign other public key certificates, or a <i>trusted public key certificate</i> under an already established root public key certificate.</p> <p> <b>To import a public root key certificate</b> </p> <p>Using this operation, you can import the public component (in PEM cerificate format) of your private root key. You can use the imported public root key certificate for digital signatures, for example signing wrapping key or signing key in TR-34, within your Amazon Web Services Payment Cryptography account.</p> <p>Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: <code>RootCertificatePublicKey</code> </p> </li> <li> <p> <code>KeyClass</code>: <code>PUBLIC_KEY</code> </p> </li> <li> <p> <code>KeyModesOfUse</code>: <code>Verify</code> </p> </li> <li> <p> <code>KeyUsage</code>: <code>TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE</code> </p> </li> <li> <p> <code>PublicKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the private root key under import.</p> </li> </ul> <p> <b>To import a trusted public key certificate</b> </p> <p>The root public key certificate must be in place and operational before you import a trusted public key certificate. Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: <code>TrustedCertificatePublicKey</code> </p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: <code>KeyArn</code> of the <code>RootCertificatePublicKey</code>.</p> </li> <li> <p> <code>KeyModesOfUse</code> and <code>KeyUsage</code>: Corresponding to the cryptographic operations such as wrap, sign, or encrypt that you will allow the trusted public key certificate to perform.</p> </li> <li> <p> <code>PublicKeyCertificate</code>: The trusted public key certificate in PEM format (base64 encoded) under import.</p> </li> </ul> <p> <b>To import initial keys (KEK or ZMK or similar) using TR-34</b> </p> <p>Using this operation, you can import initial key using TR-34 asymmetric key exchange. In TR-34 terminology, the sending party of the key is called Key Distribution Host (KDH) and the receiving party of the key is called Key Receiving Device (KRD). During the key import process, KDH is the user who initiates the key import and KRD is Amazon Web Services Payment Cryptography who receives the key.</p> <p>To initiate TR-34 key import, the KDH must obtain an import token by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>. This operation generates an encryption keypair for the purpose of key import, signs the key and returns back the wrapping key certificate (also known as KRD wrapping certificate) and the root certificate chain. The KDH must trust and install the KRD wrapping certificate on its HSM and use it to encrypt (wrap) the KDH key during TR-34 WrappedKeyBlock generation. The import token and associated KRD wrapping certificate expires after 30 days.</p> <p>Next the KDH generates a key pair for the purpose of signing the encrypted KDH key and provides the public certificate of the signing key to Amazon Web Services Payment Cryptography. The KDH will also need to import the root certificate chain of the KDH signing certificate by calling <code>ImportKey</code> for <code>RootCertificatePublicKey</code>. For more information on TR-34 key import, see section <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-import.html\">Importing symmetric keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>Set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>Tr34KeyBlock</code> parameters.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>KeyARN</code> of the certificate chain that signed the KDH signing key certificate.</p> </li> <li> <p> <code>ImportToken</code>: Obtained from KRD by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a>.</p> </li> <li> <p> <code>WrappedKeyBlock</code>: The TR-34 wrapped key material from KDH. It contains the KDH key under import, wrapped with KRD wrapping certificate and signed by KDH signing private key. This TR-34 key block is typically generated by the KDH Hardware Security Module (HSM) outside of Amazon Web Services Payment Cryptography.</p> </li> <li> <p> <code>SigningKeyCertificate</code>: The public key certificate in PEM format (base64 encoded) of the KDH signing key generated under the root certificate (CertificateAuthorityPublicKeyIdentifier) imported in Amazon Web Services Payment Cryptography.</p> </li> </ul> <p> <b>To import initial keys (KEK or ZMK or similar) using RSA Wrap and Unwrap</b> </p> <p>Using this operation, you can import initial key using asymmetric RSA wrap and unwrap key exchange method. To initiate import, call <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> with <code>KeyMaterial</code> set to <code>KEY_CRYPTOGRAM</code> to generate an import token. This operation also generates an encryption keypair for the purpose of key import, signs the key and returns back the wrapping key certificate in PEM format (base64 encoded) and its root certificate chain. The import token and associated KRD wrapping certificate expires after 30 days. </p> <p>You must trust and install the wrapping certificate and its certificate chain on the sending HSM and use it to wrap the key under export for WrappedKeyCryptogram generation. Next call <code>ImportKey</code> with <code>KeyMaterial</code> set to <code>KEY_CRYPTOGRAM</code> and provide the <code>ImportToken</code> and <code>KeyAttributes</code> for the key under import.</p> <p> <b>To import working keys using TR-31</b> </p> <p>Amazon Web Services Payment Cryptography uses TR-31 symmetric key exchange norm to import working keys. A KEK must be established within Amazon Web Services Payment Cryptography by using TR-34 key import or by using <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a>. To initiate a TR-31 key import, set the following parameters:</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>Tr31KeyBlock</code> parameters.</p> </li> <li> <p> <code>WrappedKeyBlock</code>: The TR-31 wrapped key material. It contains the key under import, encrypted using KEK. The TR-31 key block is typically generated by a HSM outside of Amazon Web Services Payment Cryptography. </p> </li> <li> <p> <code>WrappingKeyIdentifier</code>: The <code>KeyArn</code> of the KEK that Amazon Web Services Payment Cryptography uses to decrypt or unwrap the key under import.</p> </li> </ul> <p> <b>To import working keys using ECDH</b> </p> <p>You can also use ECDH key agreement to import working keys as a TR-31 keyblock, where the wrapping key is an ECDH derived key.</p> <p>To initiate a TR-31 key import using ECDH, both sides must create an ECC key pair with key usage K3 and exchange public key certificates. In Amazon Web Services Payment Cryptography, you can do this by calling <code>CreateKey</code> and then <code>GetPublicKeyCertificate</code> to retrieve its public key certificate. Next, you can then generate a TR-31 WrappedKeyBlock using your own ECC key pair, the public certificate of the service's ECC key pair, and the key derivation parameters including key derivation function, hash algorithm, derivation data, and key algorithm. If you have not already done so, you must import the CA chain that issued the receiving public key certificate by calling <code>ImportKey</code> with input <code>RootCertificatePublicKey</code> for root CA or <code>TrustedPublicKey</code> for intermediate CA. To complete the TR-31 key import, you can use the following parameters. It is important that the ECDH key derivation parameters you use should match those used during import to derive the same shared wrapping key within Amazon Web Services Payment Cryptography.</p> <ul> <li> <p> <code>KeyMaterial</code>: Use <code>DiffieHellmanTr31KeyBlock</code> parameters.</p> </li> <li> <p> <code>PrivateKeyIdentifier</code>: The <code>KeyArn</code> of the ECC key pair created within Amazon Web Services Payment Cryptography to derive a shared KEK.</p> </li> <li> <p> <code>PublicKeyCertificate</code>: The public key certificate of the receiving ECC key pair in PEM format (base64 encoded) to derive a shared KEK.</p> </li> <li> <p> <code>CertificateAuthorityPublicKeyIdentifier</code>: The <code>keyARN</code> of the CA that signed the public key certificate of the receiving ECC key pair.</p> </li> </ul> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportKey.html\">ExportKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForImport.html\">GetParametersForImport</a> </p> </li> </ul>"
     },
     "ListAliases":{
       "name":"ListAliases",
@@ -245,7 +342,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the aliases for all keys in the caller's Amazon Web Services account and Amazon Web Services Region. You can filter the aliases by <code>keyARN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-managealias.html\">Using aliases</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the aliases. When the response contains only a subset of aliases, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListAliases</code> request to get more aliases. When you receive a response with no NextToken (or an empty or null value), that means there are no more aliases to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateAlias.html\">CreateAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteAlias.html\">DeleteAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetAlias.html\">GetAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UpdateAlias.html\">UpdateAlias</a> </p> </li> </ul>"
+      "documentation":"<p>Lists the aliases for all keys in the caller's Amazon Web Services account and Amazon Web Services Region. You can filter the aliases by <code>keyARN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-managealias.html\">Using aliases</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the aliases. When the response contains only a subset of aliases, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListAliases</code> request to get more aliases. When you receive a response with no NextToken (or an empty or null value), that means there are no more aliases to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateAlias.html\">CreateAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteAlias.html\">DeleteAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetAlias.html\">GetAlias</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UpdateAlias.html\">UpdateAlias</a> </p> </li> </ul>",
+      "readonly":true
     },
     "ListKeys":{
       "name":"ListKeys",
@@ -263,7 +361,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the keys in the caller's Amazon Web Services account and Amazon Web Services Region. You can filter the list of keys.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the keys. When the response contains only a subset of keys, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListKeys</code> request to get more keys. When you receive a response with no NextToken (or an empty or null value), that means there are no more keys to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetKey.html\">GetKey</a> </p> </li> </ul>"
+      "documentation":"<p>Lists the keys in the caller's Amazon Web Services account and Amazon Web Services Region. You can filter the list of keys.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the keys. When the response contains only a subset of keys, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListKeys</code> request to get more keys. When you receive a response with no NextToken (or an empty or null value), that means there are no more keys to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DeleteKey.html\">DeleteKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetKey.html\">GetKey</a> </p> </li> </ul>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -281,7 +380,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the tags for an Amazon Web Services resource.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the tags. When the response contains only a subset of tags, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListTagsForResource</code> request to get more tags. When you receive a response with no NextToken (or an empty or null value), that means there are no more tags to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html\">TagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UntagResource.html\">UntagResource</a> </p> </li> </ul>"
+      "documentation":"<p>Lists the tags for an Amazon Web Services resource.</p> <p>This is a paginated operation, which means that each response might contain only a subset of all the tags. When the response contains only a subset of tags, it includes a <code>NextToken</code> value. Use this value in a subsequent <code>ListTagsForResource</code> request to get more tags. When you receive a response with no NextToken (or an empty or null value), that means there are no more tags to get.</p> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html\">TagResource</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_UntagResource.html\">UntagResource</a> </p> </li> </ul>",
+      "readonly":true
+    },
+    "RemoveKeyReplicationRegions":{
+      "name":"RemoveKeyReplicationRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"RemoveKeyReplicationRegionsInput"},
+      "output":{"shape":"RemoveKeyReplicationRegionsOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes Replication Regions from an existing Amazon Web Services Payment Cryptography key, disabling the key's availability for cryptographic operations in the specified Amazon Web Services Regions.</p> <p>When you remove Replication Regions, the key material is securely deleted from those regions and can no longer be used for cryptographic operations there. This operation is irreversible for the specified Amazon Web Services Regions. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p> <important> <p>Ensure that no active cryptographic operations or applications depend on the key in the regions you're removing before performing this operation.</p> </important> <p> <b>Cross-account use:</b> This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_AddKeyReplicationRegions.html\">AddKeyReplicationRegions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_DisableDefaultKeyReplicationRegions.html\">DisableDefaultKeyReplicationRegions</a> </p> </li> </ul>"
     },
     "RestoreKey":{
       "name":"RestoreKey",
@@ -408,9 +527,38 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
+      "documentation":"<p>You do not have sufficient access to perform this action.</p> <p>This exception is thrown when the caller lacks the necessary IAM permissions to perform the requested operation. Verify that your IAM policy includes the required permissions for the specific Amazon Web Services Payment Cryptography action you're attempting.</p>",
       "exception":true
     },
+    "AddKeyReplicationRegionsInput":{
+      "type":"structure",
+      "required":[
+        "KeyIdentifier",
+        "ReplicationRegions"
+      ],
+      "members":{
+        "KeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The key identifier (ARN or alias) of the key for which to add replication regions.</p> <p>This key must exist and be in a valid state for replication operations.</p>"
+        },
+        "ReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of Amazon Web Services Regions to add to the key's replication configuration.</p> <p>Each region must be a valid Amazon Web Services Region where Amazon Web Services Payment Cryptography is available. The key will be replicated to these regions, allowing cryptographic operations to be performed closer to your applications.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for adding replication regions to a specific key.</p>"
+    },
+    "AddKeyReplicationRegionsOutput":{
+      "type":"structure",
+      "required":["Key"],
+      "members":{
+        "Key":{
+          "shape":"Key",
+          "documentation":"<p>The updated key metadata after adding the replication regions.</p> <p>This includes the current state of the key and its replication configuration.</p>"
+        }
+      },
+      "documentation":"<p>Output from adding replication regions to a key.</p>"
+    },
     "Alias":{
       "type":"structure",
       "required":["AliasName"],
@@ -440,19 +588,102 @@
       "type":"boolean",
       "box":true
     },
-    "CertificateType":{
+    "CertificateSigningRequestType":{
       "type":"string",
       "max":32768,
       "min":1,
       "pattern":"[^\\[;\\]<>]+",
       "sensitive":true
     },
+    "CertificateSubjectType":{
+      "type":"structure",
+      "required":["CommonName"],
+      "members":{
+        "CommonName":{
+          "shape":"CertificateSubjectTypeCommonNameString",
+          "documentation":"<p>The name you provide to create the certificate signing request.</p>"
+        },
+        "OrganizationUnit":{
+          "shape":"CertificateSubjectTypeOrganizationUnitString",
+          "documentation":"<p>The organization unit you provide to create the certificate signing request.</p>"
+        },
+        "Organization":{
+          "shape":"CertificateSubjectTypeOrganizationString",
+          "documentation":"<p>The organization you provide to create the certificate signing request.</p>"
+        },
+        "City":{
+          "shape":"CertificateSubjectTypeCityString",
+          "documentation":"<p>The city you provide to create the certificate signing request.</p>"
+        },
+        "Country":{
+          "shape":"CertificateSubjectTypeCountryString",
+          "documentation":"<p>The city you provide to create the certificate signing request.</p>"
+        },
+        "StateOrProvince":{
+          "shape":"CertificateSubjectTypeStateOrProvinceString",
+          "documentation":"<p>The state or province you provide to create the certificate signing request.</p>"
+        },
+        "EmailAddress":{
+          "shape":"CertificateSubjectTypeEmailAddressString",
+          "documentation":"<p>The email address you provide to create the certificate signing request.</p>"
+        }
+      },
+      "documentation":"<p>The metadata used to create the certificate signing request.</p>"
+    },
+    "CertificateSubjectTypeCityString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
+    "CertificateSubjectTypeCommonNameString":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
+    "CertificateSubjectTypeCountryString":{
+      "type":"string",
+      "max":2,
+      "min":2,
+      "pattern":"[A-Za-z]+"
+    },
+    "CertificateSubjectTypeEmailAddressString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*"
+    },
+    "CertificateSubjectTypeOrganizationString":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
+    "CertificateSubjectTypeOrganizationUnitString":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
+    "CertificateSubjectTypeStateOrProvinceString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
+    "CertificateType":{
+      "type":"string",
+      "max":32768,
+      "min":1,
+      "pattern":"[^\\[;\\]<>]+"
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>This request can cause an inconsistent state for the resource.</p>",
+      "documentation":"<p>This request can cause an inconsistent state for the resource.</p> <p>The requested operation conflicts with the current state of the resource. For example, attempting to delete a key that is currently being used, or trying to create a resource that already exists.</p>",
       "exception":true
     },
     "CreateAliasInput":{
@@ -505,7 +736,12 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>Assigns one or more tags to the Amazon Web Services Payment Cryptography key. Use this parameter to tag a key when it is created. To tag an existing Amazon Web Services Payment Cryptography key, use the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You can't have more than one tag on an Amazon Web Services Payment Cryptography key with the same tag key. </p> <important> <p>Don't include personal, confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging an Amazon Web Services Payment Cryptography key can allow or deny permission to the key.</p> </note>"
-        }
+        },
+        "DeriveKeyUsage":{
+          "shape":"DeriveKeyUsage",
+          "documentation":"<p>The intended cryptographic usage of keys derived from the ECC key pair to be created.</p> <p>After creating an ECC key pair, you cannot change the intended cryptographic usage of keys derived from it using ECDH.</p>"
+        },
+        "ReplicationRegions":{"shape":"Regions"}
       }
     },
     "CreateKeyOutput":{
@@ -530,8 +766,7 @@
     },
     "DeleteAliasOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKeyInput":{
       "type":"structure",
@@ -563,6 +798,85 @@
         }
       }
     },
+    "DeriveKeyUsage":{
+      "type":"string",
+      "enum":[
+        "TR31_B0_BASE_DERIVATION_KEY",
+        "TR31_C0_CARD_VERIFICATION_KEY",
+        "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY",
+        "TR31_E0_EMV_MKEY_APP_CRYPTOGRAMS",
+        "TR31_E1_EMV_MKEY_CONFIDENTIALITY",
+        "TR31_E2_EMV_MKEY_INTEGRITY",
+        "TR31_E4_EMV_MKEY_DYNAMIC_NUMBERS",
+        "TR31_E5_EMV_MKEY_CARD_PERSONALIZATION",
+        "TR31_E6_EMV_MKEY_OTHER",
+        "TR31_K0_KEY_ENCRYPTION_KEY",
+        "TR31_K1_KEY_BLOCK_PROTECTION_KEY",
+        "TR31_M3_ISO_9797_3_MAC_KEY",
+        "TR31_M1_ISO_9797_1_MAC_KEY",
+        "TR31_M6_ISO_9797_5_CMAC_KEY",
+        "TR31_M7_HMAC_KEY",
+        "TR31_P0_PIN_ENCRYPTION_KEY",
+        "TR31_P1_PIN_GENERATION_KEY",
+        "TR31_V1_IBM3624_PIN_VERIFICATION_KEY",
+        "TR31_V2_VISA_PIN_VERIFICATION_KEY"
+      ]
+    },
+    "DiffieHellmanDerivationData":{
+      "type":"structure",
+      "members":{
+        "SharedInformation":{
+          "shape":"SharedInformation",
+          "documentation":"<p>A string containing information that binds the ECDH derived key to the two parties involved or to the context of the key.</p> <p>It may include details like identities of the two parties deriving the key, context of the operation, session IDs, and optionally a nonce. It must not contain zero bytes. It is not recommended to reuse shared information for multiple ECDH key derivations, as it could result in derived key material being the same across different derivations.</p>"
+        }
+      },
+      "documentation":"<p>The shared information used when deriving a key using ECDH.</p>",
+      "union":true
+    },
+    "DisableDefaultKeyReplicationRegionsInput":{
+      "type":"structure",
+      "required":["ReplicationRegions"],
+      "members":{
+        "ReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of Amazon Web Services Regions to remove from the account's default replication regions.</p> <p>New keys created after this operation will not automatically be replicated to these regions, though existing keys with replication to these regions will be unaffected.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for disabling default key replication regions for the account.</p>"
+    },
+    "DisableDefaultKeyReplicationRegionsOutput":{
+      "type":"structure",
+      "required":["EnabledReplicationRegions"],
+      "members":{
+        "EnabledReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The remaining list of regions where default key replication is still enabled for the account.</p> <p>This reflects the account's default replication configuration after removing the specified regions.</p>"
+        }
+      },
+      "documentation":"<p>Output from disabling default key replication regions for the account.</p>"
+    },
+    "EnableDefaultKeyReplicationRegionsInput":{
+      "type":"structure",
+      "required":["ReplicationRegions"],
+      "members":{
+        "ReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of Amazon Web Services Regions to enable as default replication regions for the Amazon Web Services account for <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p> <p>New keys created in this account will automatically be replicated to these regions unless explicitly overridden during key creation.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for enabling default key replication regions for the account.</p>"
+    },
+    "EnableDefaultKeyReplicationRegionsOutput":{
+      "type":"structure",
+      "required":["EnabledReplicationRegions"],
+      "members":{
+        "EnabledReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The complete list of regions where default key replication is now enabled for the account.</p> <p>This includes both previously enabled regions and the newly added regions from this operation.</p>"
+        }
+      },
+      "documentation":"<p>Output from enabling default key replication regions for the account.</p>"
+    },
     "EvenHexLengthBetween16And32":{
       "type":"string",
       "max":32,
@@ -583,6 +897,50 @@
       },
       "documentation":"<p>The attributes for IPEK generation during export.</p>"
     },
+    "ExportDiffieHellmanTr31KeyBlock":{
+      "type":"structure",
+      "required":[
+        "PrivateKeyIdentifier",
+        "CertificateAuthorityPublicKeyIdentifier",
+        "PublicKeyCertificate",
+        "DeriveKeyAlgorithm",
+        "KeyDerivationFunction",
+        "KeyDerivationHashAlgorithm",
+        "DerivationData"
+      ],
+      "members":{
+        "PrivateKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the asymmetric ECC key created within Amazon Web Services Payment Cryptography.</p>"
+        },
+        "CertificateAuthorityPublicKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the CA that signed the <code>PublicKeyCertificate</code> for the client's receiving ECC key pair.</p>"
+        },
+        "PublicKeyCertificate":{
+          "shape":"CertificateType",
+          "documentation":"<p>The public key certificate of the client's receiving ECC key pair, in PEM format (base64 encoded), to use for ECDH key derivation.</p>"
+        },
+        "DeriveKeyAlgorithm":{
+          "shape":"SymmetricKeyAlgorithm",
+          "documentation":"<p>The key algorithm of the shared derived ECDH key.</p>"
+        },
+        "KeyDerivationFunction":{
+          "shape":"KeyDerivationFunction",
+          "documentation":"<p>The key derivation function to use when deriving a key using ECDH.</p>"
+        },
+        "KeyDerivationHashAlgorithm":{
+          "shape":"KeyDerivationHashAlgorithm",
+          "documentation":"<p>The hash type to use when deriving a key using ECDH.</p>"
+        },
+        "DerivationData":{
+          "shape":"DiffieHellmanDerivationData",
+          "documentation":"<p>The shared information used when deriving a key using ECDH.</p>"
+        },
+        "KeyBlockHeaders":{"shape":"KeyBlockHeaders"}
+      },
+      "documentation":"<p>Key derivation parameter information for key material export using asymmetric ECDH key exchange method.</p>"
+    },
     "ExportDukptInitialKey":{
       "type":"structure",
       "required":["KeySerialNumber"],
@@ -651,6 +1009,10 @@
         "KeyCryptogram":{
           "shape":"ExportKeyCryptogram",
           "documentation":"<p>Parameter information for key material export using asymmetric RSA wrap and unwrap key exchange method</p>"
+        },
+        "DiffieHellmanTr31KeyBlock":{
+          "shape":"ExportDiffieHellmanTr31KeyBlock",
+          "documentation":"<p>Key derivation parameter information for key material export using asymmetric ECDH key exchange method.</p>"
         }
       },
       "documentation":"<p>Parameter information for key material export from Amazon Web Services Payment Cryptography using TR-31 or TR-34 or RSA wrap and unwrap key exchange method.</p>",
@@ -667,7 +1029,7 @@
     },
     "ExportTokenId":{
       "type":"string",
-      "pattern":"export-token-[0-9a-zA-Z]{16,64}"
+      "pattern":"(export-token-[0-9a-zA-Z]{16,64})?"
     },
     "ExportTr31KeyBlock":{
       "type":"structure",
@@ -689,7 +1051,6 @@
       "required":[
         "CertificateAuthorityPublicKeyIdentifier",
         "WrappingKeyCertificate",
-        "ExportToken",
         "KeyBlockFormat"
       ],
       "members":{
@@ -703,7 +1064,15 @@
         },
         "ExportToken":{
           "shape":"ExportTokenId",
-          "documentation":"<p>The export token to initiate key export from Amazon Web Services Payment Cryptography. It also contains the signing key certificate that will sign the wrapped key during TR-34 key block generation. Call <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> to receive an export token. It expires after 7 days. You can use the same export token to export multiple keys from the same service account.</p>"
+          "documentation":"<p>The export token to initiate key export from Amazon Web Services Payment Cryptography. It also contains the signing key certificate that will sign the wrapped key during TR-34 key block generation. Call <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetParametersForExport.html\">GetParametersForExport</a> to receive an export token. It expires after 30 days. You can use the same export token to export multiple keys from the same service account.</p>"
+        },
+        "SigningKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>Key Identifier used for signing the export key</p>"
+        },
+        "SigningKeyCertificate":{
+          "shape":"CertificateType",
+          "documentation":"<p>The certificate used to sign the TR-34 key block.</p>"
         },
         "KeyBlockFormat":{
           "shape":"Tr34KeyBlockFormat",
@@ -740,6 +1109,54 @@
         }
       }
     },
+    "GetCertificateSigningRequestInput":{
+      "type":"structure",
+      "required":[
+        "KeyIdentifier",
+        "SigningAlgorithm",
+        "CertificateSubject"
+      ],
+      "members":{
+        "KeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>Asymmetric key used for generating the certificate signing request</p>"
+        },
+        "SigningAlgorithm":{
+          "shape":"SigningAlgorithmType",
+          "documentation":"<p>The cryptographic algorithm used to sign your CSR.</p>"
+        },
+        "CertificateSubject":{
+          "shape":"CertificateSubjectType",
+          "documentation":"<p>The metadata used to create the CSR.</p>"
+        }
+      }
+    },
+    "GetCertificateSigningRequestOutput":{
+      "type":"structure",
+      "required":["CertificateSigningRequest"],
+      "members":{
+        "CertificateSigningRequest":{
+          "shape":"CertificateSigningRequestType",
+          "documentation":"<p>The certificate signing request generated using the key pair associated with the key identifier.</p>"
+        }
+      }
+    },
+    "GetDefaultKeyReplicationRegionsInput":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Input parameters for retrieving the account's default key replication regions. This operation requires no input parameters.</p>"
+    },
+    "GetDefaultKeyReplicationRegionsOutput":{
+      "type":"structure",
+      "required":["EnabledReplicationRegions"],
+      "members":{
+        "EnabledReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of regions where default key replication is currently enabled for the account.</p> <p>New keys created in this account will automatically be replicated to these regions unless explicitly configured otherwise during key creation.</p>"
+        }
+      },
+      "documentation":"<p>Output containing the account's current default key replication configuration.</p>"
+    },
     "GetKeyInput":{
       "type":"structure",
       "required":["KeyIdentifier"],
@@ -756,7 +1173,7 @@
       "members":{
         "Key":{
           "shape":"Key",
-          "documentation":"<p>The key material, including the immutable and mutable data for the key.</p>"
+          "documentation":"<p>Contains the key metadata, including both immutable and mutable attributes for the key, but does not include actual cryptographic key material.</p>"
         }
       }
     },
@@ -789,7 +1206,7 @@
       "members":{
         "SigningKeyCertificate":{
           "shape":"CertificateType",
-          "documentation":"<p>The signing key certificate in PEM format (base64 encoded) of the public key for signature within the TR-34 key block. The certificate expires after 7 days.</p>"
+          "documentation":"<p>The signing key certificate in PEM format (base64 encoded) of the public key for signature within the TR-34 key block. The certificate expires after 30 days.</p>"
         },
         "SigningKeyCertificateChain":{
           "shape":"CertificateType",
@@ -801,7 +1218,7 @@
         },
         "ExportToken":{
           "shape":"ExportTokenId",
-          "documentation":"<p>The export token to initiate key export from Amazon Web Services Payment Cryptography. The export token expires after 7 days. You can use the same export token to export multiple keys from the same service account.</p>"
+          "documentation":"<p>The export token to initiate key export from Amazon Web Services Payment Cryptography. The export token expires after 30 days. You can use the same export token to export multiple keys from the same service account.</p>"
         },
         "ParametersValidUntilTimestamp":{
           "shape":"Timestamp",
@@ -838,7 +1255,7 @@
       "members":{
         "WrappingKeyCertificate":{
           "shape":"CertificateType",
-          "documentation":"<p>The wrapping key certificate in PEM format (base64 encoded) of the wrapping key for use within the TR-34 key block. The certificate expires in 7 days.</p>"
+          "documentation":"<p>The wrapping key certificate in PEM format (base64 encoded) of the wrapping key for use within the TR-34 key block. The certificate expires in 30 days.</p>"
         },
         "WrappingKeyCertificateChain":{
           "shape":"CertificateType",
@@ -850,7 +1267,7 @@
         },
         "ImportToken":{
           "shape":"ImportTokenId",
-          "documentation":"<p>The import token to initiate key import into Amazon Web Services Payment Cryptography. The import token expires after 7 days. You can use the same import token to import multiple keys to the same service account.</p>"
+          "documentation":"<p>The import token to initiate key import into Amazon Web Services Payment Cryptography. The import token expires after 30 days. You can use the same import token to import multiple keys to the same service account.</p>"
         },
         "ParametersValidUntilTimestamp":{
           "shape":"Timestamp",
@@ -891,6 +1308,54 @@
       "min":20,
       "pattern":"[0-9A-F]{20}$|^[0-9A-F]{24}"
     },
+    "ImportDiffieHellmanTr31KeyBlock":{
+      "type":"structure",
+      "required":[
+        "PrivateKeyIdentifier",
+        "CertificateAuthorityPublicKeyIdentifier",
+        "PublicKeyCertificate",
+        "DeriveKeyAlgorithm",
+        "KeyDerivationFunction",
+        "KeyDerivationHashAlgorithm",
+        "DerivationData",
+        "WrappedKeyBlock"
+      ],
+      "members":{
+        "PrivateKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the asymmetric ECC key created within Amazon Web Services Payment Cryptography.</p>"
+        },
+        "CertificateAuthorityPublicKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the CA that signed the <code>PublicKeyCertificate</code> for the client's receiving ECC key pair.</p>"
+        },
+        "PublicKeyCertificate":{
+          "shape":"CertificateType",
+          "documentation":"<p>The public key certificate of the client's receiving ECC key pair, in PEM format (base64 encoded), to use for ECDH key derivation.</p>"
+        },
+        "DeriveKeyAlgorithm":{
+          "shape":"SymmetricKeyAlgorithm",
+          "documentation":"<p>The key algorithm of the shared derived ECDH key.</p>"
+        },
+        "KeyDerivationFunction":{
+          "shape":"KeyDerivationFunction",
+          "documentation":"<p>The key derivation function to use when deriving a key using ECDH.</p>"
+        },
+        "KeyDerivationHashAlgorithm":{
+          "shape":"KeyDerivationHashAlgorithm",
+          "documentation":"<p>The hash type to use when deriving a key using ECDH.</p>"
+        },
+        "DerivationData":{
+          "shape":"DiffieHellmanDerivationData",
+          "documentation":"<p>The shared information used when deriving a key using ECDH.</p>"
+        },
+        "WrappedKeyBlock":{
+          "shape":"Tr31WrappedKeyBlock",
+          "documentation":"<p>The ECDH wrapped key block to import.</p>"
+        }
+      },
+      "documentation":"<p>Key derivation parameter information for key material import using asymmetric ECDH key exchange method.</p>"
+    },
     "ImportKeyCryptogram":{
       "type":"structure",
       "required":[
@@ -911,7 +1376,7 @@
         },
         "ImportToken":{
           "shape":"ImportTokenId",
-          "documentation":"<p>The import token that initiates key import using the asymmetric RSA wrap and unwrap key exchange method into AWS Payment Cryptography. It expires after 7 days. You can use the same import token to import multiple keys to the same service account.</p>"
+          "documentation":"<p>The import token that initiates key import using the asymmetric RSA wrap and unwrap key exchange method into AWS Payment Cryptography. It expires after 30 days. You can use the same import token to import multiple keys to the same service account.</p>"
         },
         "WrappingSpec":{
           "shape":"WrappingKeySpec",
@@ -939,7 +1404,8 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>Assigns one or more tags to the Amazon Web Services Payment Cryptography key. Use this parameter to tag a key when it is imported. To tag an existing Amazon Web Services Payment Cryptography key, use the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_TagResource.html\">TagResource</a> operation.</p> <p>Each tag consists of a tag key and a tag value. Both the tag key and the tag value are required, but the tag value can be an empty (null) string. You can't have more than one tag on an Amazon Web Services Payment Cryptography key with the same tag key. If you specify an existing tag key with a different tag value, Amazon Web Services Payment Cryptography replaces the current tag value with the specified one.</p> <important> <p>Don't include personal, confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important> <note> <p>Tagging or untagging an Amazon Web Services Payment Cryptography key can allow or deny permission to the key.</p> </note>"
-        }
+        },
+        "ReplicationRegions":{"shape":"Regions"}
       }
     },
     "ImportKeyMaterial":{
@@ -964,6 +1430,10 @@
         "KeyCryptogram":{
           "shape":"ImportKeyCryptogram",
           "documentation":"<p>Parameter information for key material import using asymmetric RSA wrap and unwrap key exchange method.</p>"
+        },
+        "DiffieHellmanTr31KeyBlock":{
+          "shape":"ImportDiffieHellmanTr31KeyBlock",
+          "documentation":"<p>Key derivation parameter information for key material import using asymmetric ECDH key exchange method.</p>"
         }
       },
       "documentation":"<p>Parameter information for key material import into Amazon Web Services Payment Cryptography using TR-31 or TR-34 or RSA wrap and unwrap key exchange method.</p>",
@@ -981,7 +1451,7 @@
     },
     "ImportTokenId":{
       "type":"string",
-      "pattern":"import-token-[0-9a-zA-Z]{16,64}"
+      "pattern":"(import-token-[0-9a-zA-Z]{16,64})?"
     },
     "ImportTr31KeyBlock":{
       "type":"structure",
@@ -1006,7 +1476,6 @@
       "required":[
         "CertificateAuthorityPublicKeyIdentifier",
         "SigningKeyCertificate",
-        "ImportToken",
         "WrappedKeyBlock",
         "KeyBlockFormat"
       ],
@@ -1021,7 +1490,15 @@
         },
         "ImportToken":{
           "shape":"ImportTokenId",
-          "documentation":"<p>The import token that initiates key import using the asymmetric TR-34 key exchange method into Amazon Web Services Payment Cryptography. It expires after 7 days. You can use the same import token to import multiple keys to the same service account.</p>"
+          "documentation":"<p>The import token that initiates key import using the asymmetric TR-34 key exchange method into Amazon Web Services Payment Cryptography. It expires after 30 days. You can use the same import token to import multiple keys to the same service account.</p>"
+        },
+        "WrappingKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>Key Identifier used for unwrapping the import key</p>"
+        },
+        "WrappingKeyCertificate":{
+          "shape":"CertificateType",
+          "documentation":"<p>The certificate used to wrap the TR-34 key block.</p>"
         },
         "WrappedKeyBlock":{
           "shape":"Tr34WrappedKeyBlock",
@@ -1043,7 +1520,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>The request processing has failed because of an unknown error, exception, or failure.</p>",
+      "documentation":"<p>The request processing has failed because of an unknown error, exception, or failure.</p> <p>This indicates a server-side error within the Amazon Web Services Payment Cryptography service. If this error persists, contact support for assistance.</p>",
       "exception":true,
       "fault":true
     },
@@ -1112,6 +1589,23 @@
         "DeleteTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time after which Amazon Web Services Payment Cryptography will delete the key. This value is present only when when the <code>KeyState</code> is <code>DELETE_COMPLETE</code> and the Amazon Web Services Payment Cryptography key is deleted.</p>"
+        },
+        "DeriveKeyUsage":{
+          "shape":"DeriveKeyUsage",
+          "documentation":"<p>The cryptographic usage of an ECDH derived key as deﬁned in section A.5.2 of the TR-31 spec.</p>"
+        },
+        "MultiRegionKeyType":{
+          "shape":"MultiRegionKeyType",
+          "documentation":"<p>Indicates whether this key is a Multi-Region key and its role in the Multi-Region key hierarchy.</p> <p>Multi-Region replication keys allow the same key material to be used across multiple Amazon Web Services Regions. This field specifies whether the key is a Primary Region key (PRK) (which can be replicated to other Amazon Web Services Regions) or a Replica Region key (RRK) (which is a copy of a PRK in another Region). For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p>"
+        },
+        "PrimaryRegion":{"shape":"Region"},
+        "ReplicationStatus":{
+          "shape":"ReplicationStatus",
+          "documentation":"<p>Information about the replication status of the key across different Amazon Web Services Regions.</p> <p>This field provides details about the current state of key replication, including any status messages or operational information. It helps track the progress and health of key replication operations.</p>"
+        },
+        "UsingDefaultReplicationRegions":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether this key is using the account's default replication regions configuration for <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p> <p>When set to <code>true</code>, the key automatically replicates to the regions specified in the account's default replication settings. When set to <code>false</code>, the key has a custom replication configuration that overrides the account defaults.</p>"
         }
       },
       "documentation":"<p>Metadata about an Amazon Web Services Payment Cryptography key.</p>"
@@ -1124,11 +1618,16 @@
         "AES_128",
         "AES_192",
         "AES_256",
+        "HMAC_SHA256",
+        "HMAC_SHA384",
+        "HMAC_SHA512",
+        "HMAC_SHA224",
         "RSA_2048",
         "RSA_3072",
         "RSA_4096",
         "ECC_NIST_P256",
-        "ECC_NIST_P384"
+        "ECC_NIST_P384",
+        "ECC_NIST_P521"
       ]
     },
     "KeyArn":{
@@ -1139,6 +1638,7 @@
     },
     "KeyArnOrKeyAliasType":{
       "type":"string",
+      "documentation":"<p>A key identifier that can be either a key ARN or an alias name. This allows flexible key identification in operations.</p> <p>When using a key ARN, it must be a fully qualified ARN in the format: <code>arn:aws:payment-cryptography:region:account:key/key-id</code>.</p> <p>When using an alias, it must begin with <code>alias/</code> followed by the alias name.</p> <important> <p>Do not include confidential or sensitive information in this field. This field may be displayed in plaintext in CloudTrail logs and other output.</p> </important>",
       "max":322,
       "min":7,
       "pattern":"arn:aws:payment-cryptography:[a-z]{2}-[a-z]{1,16}-[0-9]+:[0-9]{12}:(key/[0-9a-zA-Z]{16,64}|alias/[a-zA-Z0-9/_-]+)$|^alias/[a-zA-Z0-9/_-]+"
@@ -1200,7 +1700,9 @@
       "type":"string",
       "enum":[
         "CMAC",
-        "ANSI_X9_24"
+        "ANSI_X9_24",
+        "HMAC",
+        "SHA_1"
       ]
     },
     "KeyClass":{
@@ -1212,6 +1714,21 @@
         "PUBLIC_KEY"
       ]
     },
+    "KeyDerivationFunction":{
+      "type":"string",
+      "enum":[
+        "NIST_SP800",
+        "ANSI_X963"
+      ]
+    },
+    "KeyDerivationHashAlgorithm":{
+      "type":"string",
+      "enum":[
+        "SHA_256",
+        "SHA_384",
+        "SHA_512"
+      ]
+    },
     "KeyExportability":{
       "type":"string",
       "enum":[
@@ -1223,7 +1740,7 @@
     "KeyMaterial":{
       "type":"string",
       "max":16384,
-      "min":48,
+      "min":32,
       "sensitive":true
     },
     "KeyMaterialType":{
@@ -1286,6 +1803,16 @@
         "AWS_PAYMENT_CRYPTOGRAPHY"
       ]
     },
+    "KeyReplicationState":{
+      "type":"string",
+      "documentation":"<p>Defines the replication state of a key</p>",
+      "enum":[
+        "IN_PROGRESS",
+        "DELETE_IN_PROGRESS",
+        "FAILED",
+        "SYNCHRONIZED"
+      ]
+    },
     "KeyState":{
       "type":"string",
       "documentation":"<p>Defines the state of a key</p>",
@@ -1330,7 +1857,12 @@
         "Enabled":{
           "shape":"Boolean",
           "documentation":"<p>Specifies whether the key is enabled. </p>"
-        }
+        },
+        "MultiRegionKeyType":{
+          "shape":"MultiRegionKeyType",
+          "documentation":"<p>Indicates whether this key is a Multi-Region key and its role in the Multi-Region key hierarchy.</p> <p>Multi-Region replication keys allow the same key material to be used across multiple Amazon Web Services Regions. This field specifies whether the key is a Primary Region key (PRK) (which can be replicated to other Amazon Web Services Regions) or a Replica Region key (RRK) (which is a copy of a PRK in another Region). For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p>"
+        },
+        "PrimaryRegion":{"shape":"Region"}
       },
       "documentation":"<p>Metadata about an Amazon Web Services Payment Cryptography key.</p>"
     },
@@ -1472,6 +2004,14 @@
       "max":100,
       "min":1
     },
+    "MultiRegionKeyType":{
+      "type":"string",
+      "documentation":"<p>Defines the replication type of a key</p>",
+      "enum":[
+        "PRIMARY",
+        "REPLICA"
+      ]
+    },
     "NextToken":{
       "type":"string",
       "max":8192,
@@ -1488,7 +2028,7 @@
       "type":"string",
       "max":108,
       "min":1,
-      "pattern":"[0-9A-Z]+",
+      "pattern":"[0-9a-zA-Z]+",
       "sensitive":true
     },
     "OptionalBlocks":{
@@ -1497,6 +2037,65 @@
       "value":{"shape":"OptionalBlockValue"}
     },
     "PrimitiveBoolean":{"type":"boolean"},
+    "Region":{
+      "type":"string",
+      "documentation":"<p>An Amazon Web Services Region identifier in the standard format (e.g., <code>us-east-1</code>, <code>eu-west-1</code>).</p> <p>Used to specify regions for key replication operations. The region must be a valid Amazon Web Services Region where Amazon Web Services Payment Cryptography is available.</p>",
+      "pattern":"[a-z]{2}-[a-z]{1,16}-[0-9]+"
+    },
+    "Regions":{
+      "type":"list",
+      "member":{"shape":"Region"},
+      "documentation":"<p>A list of Amazon Web Services Regions for key replication operations.</p> <p>Each region in the list must be a valid Amazon Web Services Region identifier where Amazon Web Services Payment Cryptography is available. This list is used to specify which regions should be added to or removed from a key's replication configuration.</p>"
+    },
+    "RemoveKeyReplicationRegionsInput":{
+      "type":"structure",
+      "required":[
+        "KeyIdentifier",
+        "ReplicationRegions"
+      ],
+      "members":{
+        "KeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The key identifier (ARN or alias) of the key from which to remove replication regions.</p> <p>This key must exist and have replication enabled in the specified regions.</p>"
+        },
+        "ReplicationRegions":{
+          "shape":"Regions",
+          "documentation":"<p>The list of Amazon Web Services Regions to remove from the key's replication configuration.</p> <p>The key will no longer be available for cryptographic operations in these regions after removal. Ensure no active operations depend on the key in these regions before removal.</p>"
+        }
+      },
+      "documentation":"<p>Input parameters for removing replication regions from a specific key.</p>"
+    },
+    "RemoveKeyReplicationRegionsOutput":{
+      "type":"structure",
+      "required":["Key"],
+      "members":{
+        "Key":{
+          "shape":"Key",
+          "documentation":"<p>The updated key metadata after removing the replication regions.</p> <p>This reflects the current state of the key and its updated replication configuration.</p>"
+        }
+      },
+      "documentation":"<p>Output from removing replication regions from a key.</p>"
+    },
+    "ReplicationStatus":{
+      "type":"map",
+      "key":{"shape":"Region"},
+      "value":{"shape":"ReplicationStatusType"}
+    },
+    "ReplicationStatusType":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "Status":{
+          "shape":"KeyReplicationState",
+          "documentation":"<p>The current status of key replication in this Amazon Web Services Region.</p> <p>This field indicates whether the key replication is in progress, completed successfully, or has encountered an error. Possible values include states such as <code>SYNCRHONIZED</code>, <code>IN_PROGRESS</code>, <code>DELETE_IN_PROGRESS</code>, or <code>FAILED</code>. This provides visibility into the replication process for monitoring and troubleshooting purposes.</p>"
+        },
+        "StatusMessage":{
+          "shape":"String",
+          "documentation":"<p>A message that provides additional information about the current replication status of the key.</p> <p>This field contains details about any issues or progress updates related to key replication operations. It may include information about replication failures, synchronization status, or other operational details.</p>"
+        }
+      },
+      "documentation":"<p>Represents the replication status information for a key in a replication region for <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-multi-region-replication.html\">Multi-Region key replication</a>.</p> <p>This structure contains details about the current state of key replication, including any status messages and operational information about the replication process.</p>"
+    },
     "ResourceArn":{
       "type":"string",
       "max":150,
@@ -1508,10 +2107,10 @@
       "members":{
         "ResourceId":{
           "shape":"String",
-          "documentation":"<p>The string for the exception.</p>"
+          "documentation":"<p>The identifier of the resource that was not found.</p> <p>This field contains the specific resource identifier (such as a key ARN or alias name) that could not be located.</p>"
         }
       },
-      "documentation":"<p>The request was denied due to an invalid resource error.</p>",
+      "documentation":"<p>The request was denied due to resource not found.</p> <p>The specified key, alias, or other resource does not exist in your account or region. Verify that the resource identifier is correct and that the resource exists in the expected region.</p>",
       "exception":true
     },
     "RestoreKeyInput":{
@@ -1557,7 +2156,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>This request would cause a service quota to be exceeded.</p>",
+      "documentation":"<p>This request would cause a service quota to be exceeded.</p> <p>You have reached the maximum number of keys, aliases, or other resources allowed in your account. Review your current usage and consider deleting unused resources or requesting a quota increase.</p>",
       "exception":true
     },
     "ServiceUnavailableException":{
@@ -1565,10 +2164,26 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>The service cannot complete the request.</p>",
+      "documentation":"<p>The service cannot complete the request.</p> <p>The Amazon Web Services Payment Cryptography service is temporarily unavailable. This is typically a temporary condition - retry your request after a brief delay.</p>",
       "exception":true,
       "fault":true
     },
+    "SharedInformation":{
+      "type":"string",
+      "max":2048,
+      "min":2,
+      "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+"
+    },
+    "SigningAlgorithmType":{
+      "type":"string",
+      "documentation":"<p>Defines the Algorithm used to generate the certificate signing request</p>",
+      "enum":[
+        "SHA224",
+        "SHA256",
+        "SHA384",
+        "SHA512"
+      ]
+    },
     "StartKeyUsageInput":{
       "type":"structure",
       "required":["KeyIdentifier"],
@@ -1610,6 +2225,20 @@
       }
     },
     "String":{"type":"string"},
+    "SymmetricKeyAlgorithm":{
+      "type":"string",
+      "enum":[
+        "TDES_2KEY",
+        "TDES_3KEY",
+        "AES_128",
+        "AES_192",
+        "AES_256",
+        "HMAC_SHA256",
+        "HMAC_SHA384",
+        "HMAC_SHA512",
+        "HMAC_SHA224"
+      ]
+    },
     "Tag":{
       "type":"structure",
       "required":[
@@ -1658,8 +2287,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1677,7 +2305,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "documentation":"<p>The request was denied due to request throttling.</p> <p>You have exceeded the rate limits for Amazon Web Services Payment Cryptography API calls. Implement exponential backoff and retry logic in your application to handle throttling gracefully.</p>",
       "exception":true
     },
     "Timestamp":{"type":"timestamp"},
@@ -1685,7 +2313,7 @@
       "type":"string",
       "max":9984,
       "min":56,
-      "pattern":"[0-9A-Z]+",
+      "pattern":"[0-9a-zA-Z]+",
       "sensitive":true
     },
     "Tr34KeyBlockFormat":{
@@ -1741,8 +2369,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAliasInput":{
       "type":"structure",
@@ -1773,7 +2400,7 @@
       "members":{
         "Message":{"shape":"String"}
       },
-      "documentation":"<p>The request was denied due to an invalid request error.</p>",
+      "documentation":"<p>The request was denied due to an invalid request error.</p> <p>One or more parameters in your request are invalid. Check the parameter values, formats, and constraints specified in the API documentation.</p>",
       "exception":true
     },
     "WrappedKey":{
diff -pruN 2.23.6-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/service-2.json 2.31.35-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/payment-cryptography-data/2022-02-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -83,7 +83,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Generates a Message Authentication Code (MAC) cryptogram within Amazon Web Services Payment Cryptography. </p> <p>You can use this operation to authenticate card-related data by using known data values to generate MAC for data validation between the sending and receiving parties. This operation uses message data, a secret encryption key and MAC algorithm to generate a unique MAC value for transmission. The receiving party of the MAC must use the same message data, secret encryption key and MAC algorithm to reproduce another MAC value for comparision.</p> <p>You can use this operation to generate a DUPKT, CMAC, HMAC or EMV MAC by setting generation attributes and algorithm to the associated values. The MAC generation encryption key must have valid values for <code>KeyUsage</code> such as <code>TR31_M7_HMAC_KEY</code> for HMAC generation, and they key must have <code>KeyModesOfUse</code> set to <code>Generate</code> and <code>Verify</code>.</p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>VerifyMac</a> </p> </li> </ul>"
+      "documentation":"<p>Generates a Message Authentication Code (MAC) cryptogram within Amazon Web Services Payment Cryptography. </p> <p>You can use this operation to authenticate card-related data by using known data values to generate MAC for data validation between the sending and receiving parties. This operation uses message data, a secret encryption key and MAC algorithm to generate a unique MAC value for transmission. The receiving party of the MAC must use the same message data, secret encryption key and MAC algorithm to reproduce another MAC value for comparision.</p> <p>You can use this operation to generate a DUPKT, CMAC, HMAC or EMV MAC by setting generation attributes and algorithm to the associated values. The MAC generation encryption key must have valid values for <code>KeyUsage</code> such as <code>TR31_M7_HMAC_KEY</code> for HMAC generation, and the key must have <code>KeyModesOfUse</code> set to <code>Generate</code> and <code>Verify</code>.</p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>VerifyMac</a> </p> </li> </ul>"
     },
     "GenerateMacEmvPinChange":{
       "name":"GenerateMacEmvPinChange",
@@ -139,6 +139,24 @@
       ],
       "documentation":"<p>Re-encrypt ciphertext using DUKPT or Symmetric data encryption keys. </p> <p>You can either generate an encryption key within Amazon Web Services Payment Cryptography by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> or import your own encryption key by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a>. The <code>KeyArn</code> for use with this operation must be in a compatible key state with <code>KeyModesOfUse</code> set to <code>Encrypt</code>. </p> <p>This operation also supports dynamic keys, allowing you to pass a dynamic encryption key as a TR-31 WrappedKeyBlock. This can be used when key material is frequently rotated, such as during every card transaction, and there is need to avoid importing short-lived keys into Amazon Web Services Payment Cryptography. To re-encrypt using dynamic keys, the <code>keyARN</code> is the Key Encryption Key (KEK) of the TR-31 wrapped encryption key material. The incoming wrapped key shall have a key purpose of D0 with a mode of use of B or D. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/use-cases-acquirers-dynamickeys.html\">Using Dynamic Keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>For symmetric and DUKPT encryption, Amazon Web Services Payment Cryptography supports <code>TDES</code> and <code>AES</code> algorithms. To encrypt using DUKPT, a DUKPT key must already exist within your account with <code>KeyModesOfUse</code> set to <code>DeriveKey</code> or a new DUKPT can be generated by calling <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a>.</p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>DecryptData</a> </p> </li> <li> <p> <a>EncryptData</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html\">GetPublicCertificate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
     },
+    "TranslateKeyMaterial":{
+      "name":"TranslateKeyMaterial",
+      "http":{
+        "method":"POST",
+        "requestUri":"/keymaterial/translate",
+        "responseCode":200
+      },
+      "input":{"shape":"TranslateKeyMaterialInput"},
+      "output":{"shape":"TranslateKeyMaterialOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Translates an encryption key between different wrapping keys without importing the key into Amazon Web Services Payment Cryptography.</p> <p>This operation can be used when key material is frequently rotated, such as during every card transaction, and there is a need to avoid importing short-lived keys into Amazon Web Services Payment Cryptography. It translates short-lived transaction keys such as Pin Encryption Key (PEK) generated for each transaction and wrapped with an ECDH (Elliptic Curve Diffie-Hellman) derived wrapping key to another KEK (Key Encryption Key) wrapping key. </p> <p>Before using this operation, you must first request the public key certificate of the ECC key pair generated within Amazon Web Services Payment Cryptography to establish an ECDH key agreement. In <code>TranslateKeyData</code>, the service uses its own ECC key pair, public certificate of receiving ECC key pair, and the key derivation parameters to generate a derived key. The service uses this derived key to unwrap the incoming transaction key received as a TR31WrappedKeyBlock and re-wrap using a user provided KEK to generate an outgoing Tr31WrappedKeyBlock. For more information on establishing ECDH derived keys, see the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/create-keys.html\">Creating keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>. </p> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html\">CreateKey</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html\">GetPublicCertificate</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html\">ImportKey</a> </p> </li> </ul>"
+    },
     "TranslatePinData":{
       "name":"TranslatePinData",
       "http":{
@@ -155,7 +173,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Translates encrypted PIN block from and to ISO 9564 formats 0,1,3,4. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/translate-pin-data.html\">Translate PIN data</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>PIN block translation involves changing a PIN block from one encryption key to another and optionally change its format. PIN block translation occurs entirely within the HSM boundary and PIN data never enters or leaves Amazon Web Services Payment Cryptography in clear text. The encryption key transformation can be from PEK (Pin Encryption Key) to BDK (Base Derivation Key) for DUKPT or from BDK for DUKPT to PEK.</p> <p>Amazon Web Services Payment Cryptography also supports use of dynamic keys and ECDH (Elliptic Curve Diffie-Hellman) based key exchange for this operation.</p> <p>Dynamic keys allow you to pass a PEK as a TR-31 WrappedKeyBlock. They can be used when key material is frequently rotated, such as during every card transaction, and there is need to avoid importing short-lived keys into Amazon Web Services Payment Cryptography. To translate PIN block using dynamic keys, the <code>keyARN</code> is the Key Encryption Key (KEK) of the TR-31 wrapped PEK. The incoming wrapped key shall have a key purpose of P0 with a mode of use of B or D. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/use-cases-acquirers-dynamickeys.html\">Using Dynamic Keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>Using ECDH key exchange, you can receive cardholder selectable PINs into Amazon Web Services Payment Cryptography. The ECDH derived key protects the incoming PIN block, which is translated to a PEK encrypted PIN block for use within the service. You can also use ECDH for reveal PIN, wherein the service translates the PIN block from PEK to a ECDH derived encryption key. For more information on establishing ECDH derived keys, see the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/create-keys.html\">Generating keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>The allowed combinations of PIN block format translations are guided by PCI. It is important to note that not all encrypted PIN block formats (example, format 1) require PAN (Primary Account Number) as input. And as such, PIN block format that requires PAN (example, formats 0,3,4) cannot be translated to a format (format 1) that does not require a PAN for generation. </p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <note> <p>Amazon Web Services Payment Cryptography currently supports ISO PIN block 4 translation for PIN block built using legacy PAN length. That is, PAN is the right most 12 digits excluding the check digits.</p> </note> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GeneratePinData</a> </p> </li> <li> <p> <a>VerifyPinData</a> </p> </li> </ul>"
+      "documentation":"<p>Translates encrypted PIN block from and to ISO 9564 formats 0,1,3,4. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/translate-pin-data.html\">Translate PIN data</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>PIN block translation involves changing a PIN block from one encryption key to another and optionally change its format. PIN block translation occurs entirely within the HSM boundary and PIN data never enters or leaves Amazon Web Services Payment Cryptography in clear text. The encryption key transformation can be from PEK (Pin Encryption Key) to BDK (Base Derivation Key) for DUKPT or from BDK for DUKPT to PEK.</p> <p>Amazon Web Services Payment Cryptography also supports use of dynamic keys and ECDH (Elliptic Curve Diffie-Hellman) based key exchange for this operation.</p> <p>Dynamic keys allow you to pass a PEK as a TR-31 WrappedKeyBlock. They can be used when key material is frequently rotated, such as during every card transaction, and there is need to avoid importing short-lived keys into Amazon Web Services Payment Cryptography. To translate PIN block using dynamic keys, the <code>keyARN</code> is the Key Encryption Key (KEK) of the TR-31 wrapped PEK. The incoming wrapped key shall have a key purpose of P0 with a mode of use of B or D. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/use-cases-acquirers-dynamickeys.html\">Using Dynamic Keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>Using ECDH key exchange, you can receive cardholder selectable PINs into Amazon Web Services Payment Cryptography. The ECDH derived key protects the incoming PIN block, which is translated to a PEK encrypted PIN block for use within the service. You can also use ECDH for reveal PIN, wherein the service translates the PIN block from PEK to a ECDH derived encryption key. For more information on establishing ECDH derived keys, see the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/create-keys.html\">Creating keys</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>The allowed combinations of PIN block format translations are guided by PCI. It is important to note that not all encrypted PIN block formats (example, format 1) require PAN (Primary Account Number) as input. And as such, PIN block format that requires PAN (example, formats 0,3,4) cannot be translated to a format (format 1) that does not require a PAN for generation. </p> <p>For information about valid keys for this operation, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html\">Understanding key attributes</a> and <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html\">Key types for specific data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <note> <p>Amazon Web Services Payment Cryptography currently supports ISO PIN block 4 translation for PIN block built using legacy PAN length. That is, PAN is the right most 12 digits excluding the check digits.</p> </note> <p> <b>Cross-account use</b>: This operation can't be used across different Amazon Web Services accounts.</p> <p> <b>Related operations:</b> </p> <ul> <li> <p> <a>GeneratePinData</a> </p> </li> <li> <p> <a>VerifyPinData</a> </p> </li> </ul>"
     },
     "VerifyAuthRequestCryptogram":{
       "name":"VerifyAuthRequestCryptogram",
@@ -475,12 +493,11 @@
       "type":"string",
       "max":32768,
       "min":1,
-      "pattern":"[^\\[;\\]<>]+",
-      "sensitive":true
+      "pattern":"[^\\[;\\]<>]+"
     },
     "CipherTextType":{
       "type":"string",
-      "max":4096,
+      "max":4224,
       "min":2,
       "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+",
       "sensitive":true
@@ -635,6 +652,17 @@
       "documentation":"<p>Parameters to derive the payment card specific confidentiality and integrity keys.</p>",
       "union":true
     },
+    "DiffieHellmanDerivationData":{
+      "type":"structure",
+      "members":{
+        "SharedInformation":{
+          "shape":"SharedInformation",
+          "documentation":"<p>A string containing information that binds the ECDH derived key to the two parties involved or to the context of the key.</p> <p>It may include details like identities of the two parties deriving the key, context of the operation, session IDs, and optionally a nonce. It must not contain zero bytes. It is not recommended to reuse shared information for multiple ECDH key derivations, as it could result in derived key material being the same across different derivations.</p>"
+        }
+      },
+      "documentation":"<p>The shared information used when deriving a key using ECDH.</p>",
+      "union":true
+    },
     "DiscoverDynamicCardVerificationCode":{
       "type":"structure",
       "required":[
@@ -666,7 +694,7 @@
       ],
       "members":{
         "KeySerialNumber":{
-          "shape":"HexLengthBetween10And24",
+          "shape":"HexLength16Or20Or24",
           "documentation":"<p>The unique identifier known as Key Serial Number (KSN) that comes from an encrypting device using DUKPT encryption method. The KSN is derived from the encrypting device unique identifier and an internal transaction counter.</p>"
         },
         "DukptDerivationType":{
@@ -681,7 +709,7 @@
       "required":["KeySerialNumber"],
       "members":{
         "KeySerialNumber":{
-          "shape":"HexLengthBetween10And24",
+          "shape":"HexLength16Or20Or24",
           "documentation":"<p>The unique identifier known as Key Serial Number (KSN) that comes from an encrypting device using DUKPT encryption method. The KSN is derived from the encrypting device unique identifier and an internal transaction counter.</p>"
         },
         "DukptKeyDerivationType":{
@@ -710,7 +738,7 @@
       "required":["KeySerialNumber"],
       "members":{
         "KeySerialNumber":{
-          "shape":"HexLengthBetween10And24",
+          "shape":"HexLength16Or20Or24",
           "documentation":"<p>The unique identifier known as Key Serial Number (KSN) that comes from an encrypting device using DUKPT encryption method. The KSN is derived from the encrypting device unique identifier and an internal transaction counter.</p>"
         },
         "Mode":{
@@ -1243,7 +1271,6 @@
         "GenerationKeyIdentifier",
         "EncryptionKeyIdentifier",
         "GenerationAttributes",
-        "PrimaryAccountNumber",
         "PinBlockFormat"
       ],
       "members":{
@@ -1269,7 +1296,7 @@
         },
         "PinBlockFormat":{
           "shape":"PinBlockFormatForPinData",
-          "documentation":"<p>The PIN encoding format for pin data generation as specified in ISO 9564. Amazon Web Services Payment Cryptography supports <code>ISO_Format_0</code> and <code>ISO_Format_3</code>.</p> <p>The <code>ISO_Format_0</code> PIN block format is equivalent to the ANSI X9.8, VISA-1, and ECI-1 PIN block formats. It is similar to a VISA-4 PIN block format. It supports a PIN from 4 to 12 digits in length.</p> <p>The <code>ISO_Format_3</code> PIN block format is the same as <code>ISO_Format_0</code> except that the fill digits are random values from 10 to 15.</p>"
+          "documentation":"<p>The PIN encoding format for pin data generation as specified in ISO 9564. Amazon Web Services Payment Cryptography supports <code>ISO_Format_0</code>, <code>ISO_Format_3</code> and <code>ISO_Format_4</code>.</p> <p>The <code>ISO_Format_0</code> PIN block format is equivalent to the ANSI X9.8, VISA-1, and ECI-1 PIN block formats. It is similar to a VISA-4 PIN block format. It supports a PIN from 4 to 12 digits in length.</p> <p>The <code>ISO_Format_3</code> PIN block format is the same as <code>ISO_Format_0</code> except that the fill digits are random values from 10 to 15.</p> <p>The <code>ISO_Format_4</code> PIN block format is the only one supporting AES encryption. It is similar to <code>ISO_Format_3</code> but doubles the pin block length by padding with fill digit A and random values from 10 to 15.</p>"
         },
         "EncryptionWrappedKey":{"shape":"WrappedKey"}
       }
@@ -1318,11 +1345,11 @@
       "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+",
       "sensitive":true
     },
-    "HexLengthBetween10And24":{
+    "HexLength16Or20Or24":{
       "type":"string",
       "max":24,
-      "min":10,
-      "pattern":"[0-9a-fA-F]+"
+      "min":16,
+      "pattern":"(?:[0-9a-fA-F]{16}|[0-9a-fA-F]{20}|[0-9a-fA-F]{24})"
     },
     "HexLengthBetween2And4":{
       "type":"string",
@@ -1484,6 +1511,62 @@
       },
       "documentation":"<p>Parameters that are required to generate or verify Ibm3624 random PIN.</p>"
     },
+    "IncomingDiffieHellmanTr31KeyBlock":{
+      "type":"structure",
+      "required":[
+        "PrivateKeyIdentifier",
+        "CertificateAuthorityPublicKeyIdentifier",
+        "PublicKeyCertificate",
+        "DeriveKeyAlgorithm",
+        "KeyDerivationFunction",
+        "KeyDerivationHashAlgorithm",
+        "DerivationData",
+        "WrappedKeyBlock"
+      ],
+      "members":{
+        "PrivateKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the asymmetric ECC key pair.</p>"
+        },
+        "CertificateAuthorityPublicKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyArn</code> of the certificate that signed the client's <code>PublicKeyCertificate</code>.</p>"
+        },
+        "PublicKeyCertificate":{
+          "shape":"CertificateType",
+          "documentation":"<p>The client's public key certificate in PEM format (base64 encoded) to use for ECDH key derivation.</p>"
+        },
+        "DeriveKeyAlgorithm":{
+          "shape":"SymmetricKeyAlgorithm",
+          "documentation":"<p>The key algorithm of the derived ECDH key.</p>"
+        },
+        "KeyDerivationFunction":{
+          "shape":"KeyDerivationFunction",
+          "documentation":"<p>The key derivation function to use for deriving a key using ECDH.</p>"
+        },
+        "KeyDerivationHashAlgorithm":{
+          "shape":"KeyDerivationHashAlgorithm",
+          "documentation":"<p>The hash type to use for deriving a key using ECDH.</p>"
+        },
+        "DerivationData":{"shape":"DiffieHellmanDerivationData"},
+        "WrappedKeyBlock":{
+          "shape":"Tr31WrappedKeyBlock",
+          "documentation":"<p>The WrappedKeyBlock containing the transaction key wrapped using an ECDH dervied key. </p>"
+        }
+      },
+      "documentation":"<p>Parameter information of a TR31KeyBlock wrapped using an ECDH derived key.</p>"
+    },
+    "IncomingKeyMaterial":{
+      "type":"structure",
+      "members":{
+        "DiffieHellmanTr31KeyBlock":{
+          "shape":"IncomingDiffieHellmanTr31KeyBlock",
+          "documentation":"<p>Parameter information of the TR31WrappedKeyBlock containing the transaction key wrapped using an ECDH dervied key.</p>"
+        }
+      },
+      "documentation":"<p>Parameter information of the incoming WrappedKeyBlock containing the transaction key.</p>",
+      "union":true
+    },
     "InitializationVectorType":{
       "type":"string",
       "max":32,
@@ -1547,7 +1630,9 @@
       "type":"string",
       "enum":[
         "CMAC",
-        "ANSI_X9_24"
+        "ANSI_X9_24",
+        "HMAC",
+        "SHA_1"
       ]
     },
     "KeyDerivationFunction":{
@@ -1565,12 +1650,19 @@
         "SHA_512"
       ]
     },
+    "KeyMaterial":{
+      "type":"string",
+      "max":16384,
+      "min":48,
+      "sensitive":true
+    },
     "MacAlgorithm":{
       "type":"string",
       "enum":[
         "ISO9797_ALGORITHM1",
         "ISO9797_ALGORITHM3",
         "CMAC",
+        "HMAC",
         "HMAC_SHA224",
         "HMAC_SHA256",
         "HMAC_SHA384",
@@ -1585,7 +1677,7 @@
       ],
       "members":{
         "KeySerialNumber":{
-          "shape":"HexLengthBetween10And24",
+          "shape":"HexLength16Or20Or24",
           "documentation":"<p>The unique identifier known as Key Serial Number (KSN) that comes from an encrypting device using DUKPT encryption method. The KSN is derived from the encrypting device unique identifier and an internal transaction counter.</p>"
         },
         "DukptKeyVariant":{
@@ -1710,7 +1802,7 @@
     },
     "MessageDataType":{
       "type":"string",
-      "max":4096,
+      "max":8192,
       "min":2,
       "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+",
       "sensitive":true
@@ -1721,6 +1813,28 @@
       "min":2,
       "pattern":"[0-9]+"
     },
+    "OutgoingKeyMaterial":{
+      "type":"structure",
+      "members":{
+        "Tr31KeyBlock":{
+          "shape":"OutgoingTr31KeyBlock",
+          "documentation":"<p>Parameter information of the TR31WrappedKeyBlock containing the transaction key wrapped using a KEK.</p>"
+        }
+      },
+      "documentation":"<p>Parameter information of the outgoing TR31WrappedKeyBlock containing the transaction key.</p>",
+      "union":true
+    },
+    "OutgoingTr31KeyBlock":{
+      "type":"structure",
+      "required":["WrappingKeyIdentifier"],
+      "members":{
+        "WrappingKeyIdentifier":{
+          "shape":"KeyArnOrKeyAliasType",
+          "documentation":"<p>The <code>keyARN</code> of the KEK used to wrap the transaction key.</p>"
+        }
+      },
+      "documentation":"<p>Parameter information of the TR31WrappedKeyBlock containing the transaction key wrapped using a KEK.</p>"
+    },
     "PaddingType":{
       "type":"string",
       "enum":[
@@ -1742,6 +1856,7 @@
       "type":"string",
       "enum":[
         "ISO_FORMAT_0",
+        "ISO_FORMAT_1",
         "ISO_FORMAT_3",
         "ISO_FORMAT_4"
       ]
@@ -1851,14 +1966,14 @@
     },
     "PlainTextOutputType":{
       "type":"string",
-      "max":4096,
+      "max":4224,
       "min":2,
       "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+",
       "sensitive":true
     },
     "PlainTextType":{
       "type":"string",
-      "max":4064,
+      "max":4096,
       "min":2,
       "pattern":"(?:[0-9a-fA-F][0-9a-fA-F])+",
       "sensitive":true
@@ -2177,7 +2292,11 @@
         "TDES_3KEY",
         "AES_128",
         "AES_192",
-        "AES_256"
+        "AES_256",
+        "HMAC_SHA256",
+        "HMAC_SHA384",
+        "HMAC_SHA512",
+        "HMAC_SHA224"
       ]
     },
     "ThrottlingException":{
@@ -2196,7 +2315,7 @@
       "type":"string",
       "max":9984,
       "min":56,
-      "pattern":"[0-9A-Z]+",
+      "pattern":"[0-9a-zA-Z]+",
       "sensitive":true
     },
     "TrackDataType":{
@@ -2213,6 +2332,37 @@
       "pattern":"[0-9a-fA-F]+",
       "sensitive":true
     },
+    "TranslateKeyMaterialInput":{
+      "type":"structure",
+      "required":[
+        "IncomingKeyMaterial",
+        "OutgoingKeyMaterial"
+      ],
+      "members":{
+        "IncomingKeyMaterial":{
+          "shape":"IncomingKeyMaterial",
+          "documentation":"<p>Parameter information of the TR31WrappedKeyBlock containing the transaction key.</p>"
+        },
+        "OutgoingKeyMaterial":{
+          "shape":"OutgoingKeyMaterial",
+          "documentation":"<p>Parameter information of the wrapping key used to wrap the transaction key in the outgoing TR31WrappedKeyBlock.</p>"
+        },
+        "KeyCheckValueAlgorithm":{
+          "shape":"KeyCheckValueAlgorithm",
+          "documentation":"<p>The key check value (KCV) algorithm used for calculating the KCV.</p>"
+        }
+      }
+    },
+    "TranslateKeyMaterialOutput":{
+      "type":"structure",
+      "required":["WrappedKey"],
+      "members":{
+        "WrappedKey":{
+          "shape":"WrappedWorkingKey",
+          "documentation":"<p>The outgoing KEK wrapped TR31WrappedKeyBlock.</p>"
+        }
+      }
+    },
     "TranslatePinDataInput":{
       "type":"structure",
       "required":[
@@ -2319,8 +2469,7 @@
     },
     "TranslationPinDataIsoFormat1":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Parameters that are required for ISO9564 PIN format 1 tranlation.</p>"
     },
     "ValidationDataType":{
@@ -2557,7 +2706,6 @@
         "EncryptionKeyIdentifier",
         "VerificationAttributes",
         "EncryptedPinBlock",
-        "PrimaryAccountNumber",
         "PinBlockFormat"
       ],
       "members":{
@@ -2762,6 +2910,37 @@
       },
       "documentation":"<p>Parameter information of a WrappedKeyBlock for encryption key exchange.</p>",
       "union":true
+    },
+    "WrappedKeyMaterialFormat":{
+      "type":"string",
+      "enum":[
+        "KEY_CRYPTOGRAM",
+        "TR31_KEY_BLOCK",
+        "TR34_KEY_BLOCK"
+      ]
+    },
+    "WrappedWorkingKey":{
+      "type":"structure",
+      "required":[
+        "WrappedKeyMaterial",
+        "KeyCheckValue",
+        "WrappedKeyMaterialFormat"
+      ],
+      "members":{
+        "WrappedKeyMaterial":{
+          "shape":"KeyMaterial",
+          "documentation":"<p>The wrapped key block of the outgoing transaction key.</p>"
+        },
+        "KeyCheckValue":{
+          "shape":"KeyCheckValue",
+          "documentation":"<p>The key check value (KCV) of the key contained within the outgoing TR31WrappedKeyBlock.</p> <p> The KCV is used to check if all parties holding a given key have the same key or to detect that a key has changed. For more information on KCV, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/terminology.html#terms.kcv\">KCV</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p>"
+        },
+        "WrappedKeyMaterialFormat":{
+          "shape":"WrappedKeyMaterialFormat",
+          "documentation":"<p>The key block format of the wrapped key.</p>"
+        }
+      },
+      "documentation":"<p>The parameter information of the outgoing wrapped key block.</p>"
     }
   },
   "documentation":"<p>You use the Amazon Web Services Payment Cryptography Data Plane to manage how encryption keys are used for payment-related transaction processing and associated cryptographic operations. You can encrypt, decrypt, generate, verify, and translate payment-related cryptographic operations in Amazon Web Services Payment Cryptography. For more information, see <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/userguide/data-operations.html\">Data operations</a> in the <i>Amazon Web Services Payment Cryptography User Guide</i>.</p> <p>To manage your encryption keys, you use the <a href=\"https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/Welcome.html\">Amazon Web Services Payment Cryptography Control Plane</a>. You can create, import, export, share, manage, and delete keys. You can also manage Identity and Access Management (IAM) policies for keys. </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pca-connector-ad/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/pca-connector-ad/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/pca-connector-ad/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/pca-connector-ad/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pca-connector-ad/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"pca-connector-ad",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"PcaConnectorAd",
     "serviceId":"Pca Connector Ad",
     "signatureVersion":"v4",
     "signingName":"pca-connector-ad",
-    "uid":"pca-connector-ad-2018-05-10"
+    "uid":"pca-connector-ad-2018-05-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateConnector":{
@@ -830,8 +832,11 @@
     "ConnectorStatusReason":{
       "type":"string",
       "enum":[
+        "CA_CERTIFICATE_REGISTRATION_FAILED",
         "DIRECTORY_ACCESS_DENIED",
         "INTERNAL_FAILURE",
+        "INSUFFICIENT_FREE_ADDRESSES",
+        "INVALID_SUBNET_IP_PROTOCOL",
         "PRIVATECA_ACCESS_DENIED",
         "PRIVATECA_RESOURCE_NOT_FOUND",
         "SECURITY_GROUP_NOT_IN_VPC",
@@ -909,7 +914,7 @@
         },
         "VpcInformation":{
           "shape":"VpcInformation",
-          "documentation":"<p>Security group IDs that describe the inbound and outbound rules.</p>"
+          "documentation":"<p>Information about your VPC and security groups used with the connector.</p>"
         }
       }
     },
@@ -1563,6 +1568,13 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "IpAddressType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "DUALSTACK"
+      ]
+    },
     "KeySpec":{
       "type":"string",
       "enum":[
@@ -2120,6 +2132,7 @@
         "DIRECTORY_NOT_REACHABLE",
         "DIRECTORY_RESOURCE_NOT_FOUND",
         "SPN_EXISTS_ON_DIFFERENT_AD_OBJECT",
+        "SPN_LIMIT_EXCEEDED",
         "INTERNAL_FAILURE"
       ]
     },
@@ -2777,6 +2790,7 @@
       "type":"string",
       "enum":[
         "FIELD_VALIDATION_FAILED",
+        "INVALID_CA_SUBJECT",
         "INVALID_PERMISSION",
         "INVALID_STATE",
         "MISMATCHED_CONNECTOR",
@@ -2824,6 +2838,10 @@
       "type":"structure",
       "required":["SecurityGroupIds"],
       "members":{
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The VPC IP address type.</p>"
+        },
         "SecurityGroupIds":{
           "shape":"SecurityGroupIdList",
           "documentation":"<p>The security groups used with the connector. You can use a maximum of 4 security groups with a connector.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/pca-connector-scep/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pca-connector-scep/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pca-connector-scep/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pca-connector-scep/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pcs/2023-02-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pcs/2023-02-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pcs/2023-02-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pcs/2023-02-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pcs/2023-02-10/service-2.json 2.31.35-1/awscli/botocore/data/pcs/2023-02-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/pcs/2023-02-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pcs/2023-02-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -31,7 +31,7 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates a cluster in your account. Amazon Web Services PCS creates the cluster controller in a service-owned account. The cluster controller communicates with the cluster resources in your account. The subnets and security groups for the cluster must already exist before you use this API action.</p> <note> <p>It takes time for Amazon Web Services PCS to create the cluster. The cluster is in a <code>Creating</code> state until it is ready to use. There can only be 1 cluster in a <code>Creating</code> state per Amazon Web Services Region per Amazon Web Services account. <code>CreateCluster</code> fails with a <code>ServiceQuotaExceededException</code> if there is already a cluster in a <code>Creating</code> state.</p> </note>",
+      "documentation":"<p>Creates a cluster in your account. PCS creates the cluster controller in a service-owned account. The cluster controller communicates with the cluster resources in your account. The subnets and security groups for the cluster must already exist before you use this API action.</p> <note> <p>It takes time for PCS to create the cluster. The cluster is in a <code>Creating</code> state until it is ready to use. There can only be 1 cluster in a <code>Creating</code> state per Amazon Web Services Region per Amazon Web Services account. <code>CreateCluster</code> fails with a <code>ServiceQuotaExceededException</code> if there is already a cluster in a <code>Creating</code> state.</p> </note>",
       "idempotent":true
     },
     "CreateComputeNodeGroup":{
@@ -51,7 +51,7 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Creates a managed set of compute nodes. You associate a compute node group with a cluster through 1 or more Amazon Web Services PCS queues or as part of the login fleet. A compute node group includes the definition of the compute properties and lifecycle management. Amazon Web Services PCS uses the information you provide to this API action to launch compute nodes in your account. You can only specify subnets in the same Amazon VPC as your cluster. You receive billing charges for the compute nodes that Amazon Web Services PCS launches in your account. You must already have a launch template before you call this API. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Launch an instance from a launch template</a> in the <i>Amazon Elastic Compute Cloud User Guide for Linux Instances</i>.</p>",
+      "documentation":"<p>Creates a managed set of compute nodes. You associate a compute node group with a cluster through 1 or more PCS queues or as part of the login fleet. A compute node group includes the definition of the compute properties and lifecycle management. PCS uses the information you provide to this API action to launch compute nodes in your account. You can only specify subnets in the same Amazon VPC as your cluster. You receive billing charges for the compute nodes that PCS launches in your account. You must already have a launch template before you call this API. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html\">Launch an instance from a launch template</a> in the <i>Amazon Elastic Compute Cloud User Guide for Linux Instances</i>.</p>",
       "idempotent":true
     },
     "CreateQueue":{
@@ -128,7 +128,7 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Deletes a job queue. If the compute node group associated with this queue isn't associated with any other queues, Amazon Web Services PCS terminates all the compute nodes for this queue.</p>",
+      "documentation":"<p>Deletes a job queue. If the compute node group associated with this queue isn't associated with any other queues, PCS terminates all the compute nodes for this queue.</p>",
       "idempotent":true
     },
     "GetCluster":{
@@ -147,7 +147,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns detailed information about a running cluster in your account. This API action provides networking information, endpoint information for communication with the scheduler, and provisioning status.</p>"
+      "documentation":"<p>Returns detailed information about a running cluster in your account. This API action provides networking information, endpoint information for communication with the scheduler, and provisioning status.</p>",
+      "readonly":true
     },
     "GetComputeNodeGroup":{
       "name":"GetComputeNodeGroup",
@@ -165,7 +166,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns detailed information about a compute node group. This API action provides networking information, EC2 instance type, compute node group status, and scheduler (such as Slurm) configuration.</p>"
+      "documentation":"<p>Returns detailed information about a compute node group. This API action provides networking information, EC2 instance type, compute node group status, and scheduler (such as Slurm) configuration.</p>",
+      "readonly":true
     },
     "GetQueue":{
       "name":"GetQueue",
@@ -183,7 +185,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns detailed information about a queue. The information includes the compute node groups that the queue uses to schedule jobs.</p>"
+      "documentation":"<p>Returns detailed information about a queue. The information includes the compute node groups that the queue uses to schedule jobs.</p>",
+      "readonly":true
     },
     "ListClusters":{
       "name":"ListClusters",
@@ -201,7 +204,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of running clusters in your account.</p>"
+      "documentation":"<p>Returns a list of running clusters in your account.</p>",
+      "readonly":true
     },
     "ListComputeNodeGroups":{
       "name":"ListComputeNodeGroups",
@@ -219,7 +223,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of all compute node groups associated with a cluster.</p>"
+      "documentation":"<p>Returns a list of all compute node groups associated with a cluster.</p>",
+      "readonly":true
     },
     "ListQueues":{
       "name":"ListQueues",
@@ -237,7 +242,8 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of all queues associated with a cluster.</p>"
+      "documentation":"<p>Returns a list of all queues associated with a cluster.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -250,7 +256,8 @@
       "errors":[
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of all tags on an Amazon Web Services PCS resource.</p>"
+      "documentation":"<p>Returns a list of all tags on an PCS resource.</p>",
+      "readonly":true
     },
     "RegisterComputeNodeGroupInstance":{
       "name":"RegisterComputeNodeGroupInstance",
@@ -264,7 +271,7 @@
         {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<important> <p>This API action isn't intended for you to use.</p> </important> <p>Amazon Web Services PCS uses this API action to register the compute nodes it launches in your account.</p>"
+      "documentation":"<p><important> <p>This API action isn't intended for you to use.</p> </important> <p>PCS uses this API action to register the compute nodes it launches in your account.</p></p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -274,9 +281,10 @@
       },
       "input":{"shape":"TagResourceRequest"},
       "errors":[
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Adds or edits tags on an Amazon Web Services PCS resource. Each tag consists of a tag key and a tag value. The tag key and tag value are case-sensitive strings. The tag value can be an empty (null) string. To add a tag, specify a new tag key and a tag value. To edit a tag, specify an existing tag key and a new tag value.</p>",
+      "documentation":"<p>Adds or edits tags on an PCS resource. Each tag consists of a tag key and a tag value. The tag key and tag value are case-sensitive strings. The tag value can be an empty (null) string. To add a tag, specify a new tag key and a tag value. To edit a tag, specify an existing tag key and a new tag value.</p>",
       "idempotent":true
     },
     "UntagResource":{
@@ -289,7 +297,26 @@
       "errors":[
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Deletes tags from an Amazon Web Services PCS resource. To delete a tag, specify the tag key and the Amazon Resource Name (ARN) of the Amazon Web Services PCS resource.</p>",
+      "documentation":"<p>Deletes tags from an PCS resource. To delete a tag, specify the tag key and the Amazon Resource Name (ARN) of the PCS resource.</p>",
+      "idempotent":true
+    },
+    "UpdateCluster":{
+      "name":"UpdateCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateClusterRequest"},
+      "output":{"shape":"UpdateClusterResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates a cluster configuration. You can modify Slurm scheduler settings, accounting configuration, and security groups for an existing cluster. </p> <note> <p>You can only update clusters that are in <code>ACTIVE</code>, <code>UPDATE_FAILED</code>, or <code>SUSPENDED</code> state. All associated resources (queues and compute node groups) must be in <code>ACTIVE</code> state before you can update the cluster.</p> </note>",
       "idempotent":true
     },
     "UpdateComputeNodeGroup":{
@@ -343,6 +370,55 @@
       "documentation":"<p>You don't have permission to perform the action.</p> <p> <u>Examples</u> </p> <ul> <li> <p>The launch template instance profile doesn't pass <code>iam:PassRole</code> verification.</p> </li> <li> <p>There is a mismatch between the account ID and cluster ID.</p> </li> <li> <p>The cluster ID doesn't exist.</p> </li> <li> <p>The EC2 instance isn't present.</p> </li> </ul>",
       "exception":true
     },
+    "Accounting":{
+      "type":"structure",
+      "required":["mode"],
+      "members":{
+        "defaultPurgeTimeInDays":{
+          "shape":"AccountingDefaultPurgeTimeInDaysInteger",
+          "documentation":"<p>The default value for all purge settings for <code>slurmdbd.conf</code>. For more information, see the <a href=\"https://slurm.schedmd.com/slurmdbd.conf.html\">slurmdbd.conf documentation at SchedMD</a>.</p> <p>The default value for <code>defaultPurgeTimeInDays</code> is <code>-1</code>.</p> <p>A value of <code>-1</code> means there is no purge time and records persist as long as the cluster exists.</p> <important> <p> <code>0</code> isn't a valid value.</p> </important>"
+        },
+        "mode":{
+          "shape":"AccountingMode",
+          "documentation":"<p>The default value for <code>mode</code> is <code>STANDARD</code>. A value of <code>STANDARD</code> means Slurm accounting is enabled.</p>"
+        }
+      },
+      "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting. It's a property of the <b>ClusterSlurmConfiguration</b> object.</p>"
+    },
+    "AccountingDefaultPurgeTimeInDaysInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":-1
+    },
+    "AccountingMode":{
+      "type":"string",
+      "enum":[
+        "STANDARD",
+        "NONE"
+      ]
+    },
+    "AccountingRequest":{
+      "type":"structure",
+      "required":["mode"],
+      "members":{
+        "defaultPurgeTimeInDays":{
+          "shape":"AccountingRequestDefaultPurgeTimeInDaysInteger",
+          "documentation":"<p>The default value for all purge settings for <code>slurmdbd.conf</code>. For more information, see the <a href=\"https://slurm.schedmd.com/slurmdbd.conf.html\">slurmdbd.conf documentation at SchedMD</a>.</p> <p>The default value for <code>defaultPurgeTimeInDays</code> is <code>-1</code>.</p> <p>A value of <code>-1</code> means there is no purge time and records persist as long as the cluster exists.</p> <important> <p> <code>0</code> isn't a valid value.</p> </important>"
+        },
+        "mode":{
+          "shape":"AccountingMode",
+          "documentation":"<p>The default value for <code>mode</code> is <code>STANDARD</code>. A value of <code>STANDARD</code> means Slurm accounting is enabled.</p>"
+        }
+      },
+      "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting. It's a property of the <b>ClusterSlurmConfiguration</b> object.</p>"
+    },
+    "AccountingRequestDefaultPurgeTimeInDaysInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":-1
+    },
     "AmiId":{
       "type":"string",
       "pattern":"ami-[a-z0-9]+"
@@ -351,7 +427,7 @@
       "type":"string",
       "max":1011,
       "min":1,
-      "pattern":"arn:aws*:pcs:.*:[0-9]{12}:.*/[a-z0-9_\\-]+"
+      "pattern":"arn:aws.*:pcs:.*:[0-9]{12}:.*/[a-z0-9_\\-]+"
     },
     "BootstrapId":{
       "type":"string",
@@ -387,7 +463,7 @@
         },
         "status":{
           "shape":"ClusterStatus",
-          "documentation":"<p>The provisioning status of the cluster.</p> <note> <p>The provisioning status doesn't indicate the overall health of the cluster.</p> </note>"
+          "documentation":"<p>The provisioning status of the cluster.</p> <note> <p>The provisioning status doesn't indicate the overall health of the cluster.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         },
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
@@ -420,7 +496,7 @@
     },
     "ClusterIdentifier":{
       "type":"string",
-      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{1,40})"
+      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{2,40})"
     },
     "ClusterList":{
       "type":"list",
@@ -429,8 +505,8 @@
     "ClusterName":{
       "type":"string",
       "max":40,
-      "min":1,
-      "pattern":"(?!pcs_)^(?![A-Za-z0-9]{10}$)[A-Za-z][A-Za-z0-9-]+"
+      "min":3,
+      "pattern":"(?!pcs_)^[A-Za-z][A-Za-z0-9-]+"
     },
     "ClusterSlurmConfiguration":{
       "type":"structure",
@@ -446,6 +522,10 @@
         "authKey":{
           "shape":"SlurmAuthKey",
           "documentation":"<p>The shared Slurm key for authentication, also known as the <b>cluster secret</b>.</p>"
+        },
+        "accounting":{
+          "shape":"Accounting",
+          "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting.</p>"
         }
       },
       "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
@@ -460,6 +540,10 @@
         "slurmCustomSettings":{
           "shape":"SlurmCustomSettings",
           "documentation":"<p>Additional Slurm-specific configuration that directly maps to Slurm settings.</p>"
+        },
+        "accounting":{
+          "shape":"AccountingRequest",
+          "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting.</p>"
         }
       },
       "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
@@ -483,7 +567,9 @@
         "DELETING",
         "CREATE_FAILED",
         "DELETE_FAILED",
-        "UPDATE_FAILED"
+        "UPDATE_FAILED",
+        "SUSPENDING",
+        "SUSPENDED"
       ]
     },
     "ClusterSummary":{
@@ -519,7 +605,7 @@
         },
         "status":{
           "shape":"ClusterStatus",
-          "documentation":"<p>The provisioning status of the cluster.</p> <note> <p>The provisioning status doesn't indicate the overall health of the cluster.</p> </note>"
+          "documentation":"<p>The provisioning status of the cluster.</p> <note> <p>The provisioning status doesn't indicate the overall health of the cluster.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         }
       },
       "documentation":"<p>The object returned by the <code>ListClusters</code> API action.</p>"
@@ -567,11 +653,11 @@
         },
         "status":{
           "shape":"ComputeNodeGroupStatus",
-          "documentation":"<p>The provisioning status of the compute node group.</p> <note> <p>The provisioning status doesn't indicate the overall health of the compute node group.</p> </note>"
+          "documentation":"<p>The provisioning status of the compute node group.</p> <note> <p>The provisioning status doesn't indicate the overall health of the compute node group.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         },
         "amiId":{
           "shape":"AmiId",
-          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that Amazon Web Services PCS uses to launch instances. If not provided, Amazon Web Services PCS uses the AMI ID specified in the custom launch template.</p>"
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that PCS uses to launch instances. If not provided, PCS uses the AMI ID specified in the custom launch template.</p>"
         },
         "subnetIds":{
           "shape":"SubnetIdList",
@@ -579,17 +665,17 @@
         },
         "purchaseOption":{
           "shape":"PurchaseOption",
-          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. Amazon Web Services PCS supports On-Demand and Spot instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Instance purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
+          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. PCS supports On-Demand Instances, Spot Instances, and Amazon EC2 Capacity Blocks for ML. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Amazon EC2 billing and purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about PCS support for Capacity Blocks, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/capacity-blocks.html\">Using Amazon EC2 Capacity Blocks for ML with PCS</a> in the <i>PCS User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
         },
         "customLaunchTemplate":{"shape":"CustomLaunchTemplate"},
         "iamInstanceProfileArn":{
           "shape":"InstanceProfileArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission. The resource identifier of the ARN must start with <code>AWSPCS</code> or it must have <code>/aws-pcs/</code> in its path.</p> <p class=\"title\"> <b>Examples</b> </p> <ul> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/AWSPCS-example-role-1</code> </p> </li> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/aws-pcs/example-role-2</code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission and the role name must start with <code>AWSPCS</code> or must have the path <code>/aws-pcs/</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/security-instance-profiles.html\">IAM instance profiles for PCS</a> in the <i>PCS User Guide</i>.</p>"
         },
         "scalingConfiguration":{"shape":"ScalingConfiguration"},
         "instanceConfigs":{
           "shape":"InstanceList",
-          "documentation":"<p>A list of EC2 instance configurations that Amazon Web Services PCS can provision in the compute node group.</p>"
+          "documentation":"<p>A list of EC2 instance configurations that PCS can provision in the compute node group.</p>"
         },
         "spotOptions":{"shape":"SpotOptions"},
         "slurmConfiguration":{"shape":"ComputeNodeGroupSlurmConfiguration"},
@@ -616,7 +702,7 @@
     },
     "ComputeNodeGroupIdentifier":{
       "type":"string",
-      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{1,25})"
+      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{2,25})"
     },
     "ComputeNodeGroupList":{
       "type":"list",
@@ -625,8 +711,8 @@
     "ComputeNodeGroupName":{
       "type":"string",
       "max":25,
-      "min":1,
-      "pattern":"(?!pcs_)^(?![A-Za-z0-9]{10}$)[A-Za-z][A-Za-z0-9-]+"
+      "min":3,
+      "pattern":"(?!pcs_)^[A-Za-z][A-Za-z0-9-]+"
     },
     "ComputeNodeGroupSlurmConfiguration":{
       "type":"structure",
@@ -658,7 +744,9 @@
         "CREATE_FAILED",
         "DELETE_FAILED",
         "UPDATE_FAILED",
-        "DELETED"
+        "DELETED",
+        "SUSPENDING",
+        "SUSPENDED"
       ]
     },
     "ComputeNodeGroupSummary":{
@@ -699,7 +787,7 @@
         },
         "status":{
           "shape":"ComputeNodeGroupStatus",
-          "documentation":"<p>The provisioning status of the compute node group.</p> <note> <p>The provisioning status doesn't indicate the overall health of the compute node group.</p> </note>"
+          "documentation":"<p>The provisioning status of the compute node group.</p> <note> <p>The provisioning status doesn't indicate the overall health of the compute node group.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         }
       },
       "documentation":"<p>The object returned by the <code>ListComputeNodeGroups</code> API action.</p>"
@@ -796,7 +884,7 @@
         },
         "amiId":{
           "shape":"AmiId",
-          "documentation":"<p> The ID of the Amazon Machine Image (AMI) that Amazon Web Services PCS uses to launch compute nodes (Amazon EC2 instances). If you don't provide this value, Amazon Web Services PCS uses the AMI ID specified in the custom launch template.</p>"
+          "documentation":"<p> The ID of the Amazon Machine Image (AMI) that PCS uses to launch compute nodes (Amazon EC2 instances). If you don't provide this value, PCS uses the AMI ID specified in the custom launch template.</p>"
         },
         "subnetIds":{
           "shape":"StringList",
@@ -804,12 +892,12 @@
         },
         "purchaseOption":{
           "shape":"PurchaseOption",
-          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. Amazon Web Services PCS supports On-Demand and Spot instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Instance purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
+          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. PCS supports On-Demand Instances, Spot Instances, and Amazon EC2 Capacity Blocks for ML. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Amazon EC2 billing and purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about PCS support for Capacity Blocks, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/capacity-blocks.html\">Using Amazon EC2 Capacity Blocks for ML with PCS</a> in the <i>PCS User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
         },
         "customLaunchTemplate":{"shape":"CustomLaunchTemplate"},
         "iamInstanceProfileArn":{
           "shape":"InstanceProfileArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission. The resource identifier of the ARN must start with <code>AWSPCS</code> or it must have <code>/aws-pcs/</code> in its path.</p> <p class=\"title\"> <b>Examples</b> </p> <ul> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/AWSPCS-example-role-1</code> </p> </li> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/aws-pcs/example-role-2</code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission and the role name must start with <code>AWSPCS</code> or must have the path <code>/aws-pcs/</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/security-instance-profiles.html\">IAM instance profiles for PCS</a> in the <i>PCS User Guide</i>.</p>"
         },
         "scalingConfiguration":{
           "shape":"ScalingConfigurationRequest",
@@ -817,7 +905,7 @@
         },
         "instanceConfigs":{
           "shape":"InstanceList",
-          "documentation":"<p>A list of EC2 instance configurations that Amazon Web Services PCS can provision in the compute node group.</p>"
+          "documentation":"<p>A list of EC2 instance configurations that PCS can provision in the compute node group.</p>"
         },
         "spotOptions":{"shape":"SpotOptions"},
         "slurmConfiguration":{
@@ -860,6 +948,10 @@
           "shape":"ComputeNodeGroupConfigurationList",
           "documentation":"<p>The list of compute node group configurations to associate with the queue. Queues assign jobs to associated compute node groups.</p>"
         },
+        "slurmConfiguration":{
+          "shape":"QueueSlurmConfigurationRequest",
+          "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+        },
         "clientToken":{
           "shape":"SBClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, the subsequent retries with the same client token return the result from the original successful request and they have no additional effect. If you don't specify a client token, the CLI and SDK automatically generate 1 for you.</p>",
@@ -893,7 +985,7 @@
           "documentation":"<p>The version of the EC2 launch template to use to provision instances.</p>"
         }
       },
-      "documentation":"<p>An Amazon EC2 launch template Amazon Web Services PCS uses to launch compute nodes.</p>"
+      "documentation":"<p>An Amazon EC2 launch template PCS uses to launch compute nodes.</p>"
     },
     "DeleteClusterRequest":{
       "type":"structure",
@@ -912,8 +1004,7 @@
     },
     "DeleteClusterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteComputeNodeGroupRequest":{
       "type":"structure",
@@ -939,8 +1030,7 @@
     },
     "DeleteComputeNodeGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteQueueRequest":{
       "type":"structure",
@@ -966,8 +1056,7 @@
     },
     "DeleteQueueResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Endpoint":{
       "type":"structure",
@@ -983,11 +1072,15 @@
         },
         "privateIpAddress":{
           "shape":"String",
-          "documentation":"<p>The endpoint's private IP address.</p> <p>Example: <code>2.2.2.2</code> </p>"
+          "documentation":"<p>For clusters that use IPv4, this is the endpoint's private IP address.</p> <p>Example: <code>10.1.2.3</code> </p> <p>For clusters configured to use IPv6, this is an empty string.</p>"
         },
         "publicIpAddress":{
           "shape":"String",
-          "documentation":"<p>The endpoint's public IP address.</p> <p>Example: <code>1.1.1.1</code> </p>"
+          "documentation":"<p>The endpoint's public IP address.</p> <p>Example: <code>192.0.2.1</code> </p>"
+        },
+        "ipv6Address":{
+          "shape":"String",
+          "documentation":"<p>The endpoint's IPv6 address.</p> <p>Example: <code>2001:db8::1</code> </p>"
         },
         "port":{
           "shape":"String",
@@ -1031,7 +1124,7 @@
       "members":{
         "clusterIdentifier":{
           "shape":"ClusterIdentifier",
-          "documentation":"<p>The name or ID of the cluster of the queue.</p>"
+          "documentation":"<p>The name or ID of the cluster.</p>"
         }
       }
     },
@@ -1095,10 +1188,10 @@
       "members":{
         "instanceType":{
           "shape":"String",
-          "documentation":"<p>The EC2 instance type that Amazon Web Services PCS can provision in the compute node group.</p> <p> Example: <code>t2.xlarge</code> </p>"
+          "documentation":"<p>The EC2 instance type that PCS can provision in the compute node group.</p> <p> Example: <code>t2.xlarge</code> </p>"
         }
       },
-      "documentation":"<p>An EC2 instance configuration Amazon Web Services PCS uses to launch compute nodes.</p>"
+      "documentation":"<p>An EC2 instance configuration PCS uses to launch compute nodes.</p>"
     },
     "InstanceList":{
       "type":"list",
@@ -1106,7 +1199,7 @@
     },
     "InstanceProfileArn":{
       "type":"string",
-      "pattern":"arn:aws([a-zA-Z-]{0,10})?:iam::[0-9]{12}:instance-profile/.{1,128}"
+      "pattern":"arn:aws([a-zA-Z-]{0,10})?:iam::[0-9]{12}:instance-profile/([!-~]{1,510}/)?([\\w+=,.@-]{1,128})"
     },
     "Integer":{
       "type":"integer",
@@ -1118,7 +1211,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>Amazon Web Services PCS can't process your request right now. Try again later.</p>",
+      "documentation":"<p>PCS can't process your request right now. Try again later.</p>",
       "exception":true,
       "fault":true,
       "retryable":{"throttling":false}
@@ -1239,16 +1332,27 @@
       "max":100,
       "min":1
     },
+    "NetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "IPV6"
+      ]
+    },
     "Networking":{
       "type":"structure",
       "members":{
         "subnetIds":{
           "shape":"SubnetIdList",
-          "documentation":"<p>The ID of the subnet where Amazon Web Services PCS creates an Elastic Network Interface (ENI) to enable communication between managed controllers and Amazon Web Services PCS resources. The subnet must have an available IP address, cannot reside in AWS Outposts, AWS Wavelength, or an AWS Local Zone.</p> <p> Example: <code>subnet-abcd1234</code> </p>"
+          "documentation":"<p>The ID of the subnet where PCS creates an Elastic Network Interface (ENI) to enable communication between managed controllers and PCS resources. The subnet must have an available IP address, cannot reside in Outposts, Wavelength, or an Amazon Web Services Local Zone.</p> <p> Example: <code>subnet-abcd1234</code> </p>"
         },
         "securityGroupIds":{
           "shape":"SecurityGroupIdList",
-          "documentation":"<p>The list of security group IDs associated with the Elastic Network Interface (ENI) created in subnets.</p> <p>The following rules are required:</p> <ul> <li> <p>Inbound rule 1</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Source: Self</p> </li> </ul> </li> <li> <p>Outbound rule 1</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Destination: 0.0.0.0/0 (IPv4)</p> </li> </ul> </li> <li> <p>Outbound rule 2</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Destination: Self</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>The list of security group IDs associated with the Elastic Network Interface (ENI) created in subnets.</p> <p>The following rules are required:</p> <ul> <li> <p>Inbound rule 1</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Source: Self</p> </li> </ul> </li> <li> <p>Outbound rule 1</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Destination: 0.0.0.0/0 (IPv4) or ::/0 (IPv6)</p> </li> </ul> </li> <li> <p>Outbound rule 2</p> <ul> <li> <p>Protocol: All</p> </li> <li> <p>Ports: All</p> </li> <li> <p>Destination: Self</p> </li> </ul> </li> </ul>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The IP address version the cluster uses. The default is <code>IPV4</code>.</p>"
         }
       },
       "documentation":"<p>The networking configuration for the cluster's control plane.</p>"
@@ -1258,11 +1362,15 @@
       "members":{
         "subnetIds":{
           "shape":"SubnetIdList",
-          "documentation":"<p>The list of subnet IDs where Amazon Web Services PCS creates an Elastic Network Interface (ENI) to enable communication between managed controllers and Amazon Web Services PCS resources. Subnet IDs have the form <code>subnet-0123456789abcdef0</code>.</p> <p>Subnets can't be in Outposts, Wavelength or an Amazon Web Services Local Zone.</p> <note> <p>Amazon Web Services PCS currently supports only 1 subnet in this list.</p> </note>"
+          "documentation":"<p>The list of subnet IDs where PCS creates an Elastic Network Interface (ENI) to enable communication between managed controllers and PCS resources. Subnet IDs have the form <code>subnet-0123456789abcdef0</code>.</p> <p>Subnets can't be in Outposts, Wavelength or an Amazon Web Services Local Zone.</p> <note> <p>PCS currently supports only 1 subnet in this list.</p> </note>"
         },
         "securityGroupIds":{
           "shape":"SecurityGroupIdList",
           "documentation":"<p>A list of security group IDs associated with the Elastic Network Interface (ENI) created in subnets.</p>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>The IP address version the cluster uses. The default is <code>IPV4</code>.</p>"
         }
       },
       "documentation":"<p>The networking configuration for the cluster's control plane.</p>"
@@ -1271,7 +1379,8 @@
       "type":"string",
       "enum":[
         "ONDEMAND",
-        "SPOT"
+        "SPOT",
+        "CAPACITY_BLOCK"
       ]
     },
     "Queue":{
@@ -1313,12 +1422,16 @@
         },
         "status":{
           "shape":"QueueStatus",
-          "documentation":"<p>The provisioning status of the queue.</p> <note> <p>The provisioning status doesn't indicate the overall health of the queue.</p> </note>"
+          "documentation":"<p>The provisioning status of the queue.</p> <note> <p>The provisioning status doesn't indicate the overall health of the queue.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         },
         "computeNodeGroupConfigurations":{
           "shape":"ComputeNodeGroupConfigurationList",
           "documentation":"<p>The list of compute node group configurations associated with the queue. Queues assign jobs to associated compute node groups.</p>"
         },
+        "slurmConfiguration":{
+          "shape":"QueueSlurmConfiguration",
+          "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+        },
         "errorInfo":{
           "shape":"ErrorInfoList",
           "documentation":"<p>The list of errors that occurred during queue provisioning.</p>"
@@ -1328,7 +1441,7 @@
     },
     "QueueIdentifier":{
       "type":"string",
-      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{1,25})"
+      "pattern":"(pcs_[a-zA-Z0-9]+|[A-Za-z][A-Za-z0-9-]{2,25})"
     },
     "QueueList":{
       "type":"list",
@@ -1337,8 +1450,28 @@
     "QueueName":{
       "type":"string",
       "max":25,
-      "min":1,
-      "pattern":"(?!pcs_)^(?![A-Za-z0-9]{10}$)[A-Za-z][A-Za-z0-9-]+"
+      "min":3,
+      "pattern":"(?!pcs_)^[A-Za-z][A-Za-z0-9-]+"
+    },
+    "QueueSlurmConfiguration":{
+      "type":"structure",
+      "members":{
+        "slurmCustomSettings":{
+          "shape":"SlurmCustomSettings",
+          "documentation":"<p>Additional Slurm-specific configuration that directly maps to Slurm settings.</p>"
+        }
+      },
+      "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+    },
+    "QueueSlurmConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "slurmCustomSettings":{
+          "shape":"SlurmCustomSettings",
+          "documentation":"<p>Additional Slurm-specific configuration that directly maps to Slurm settings.</p>"
+        }
+      },
+      "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
     },
     "QueueStatus":{
       "type":"string",
@@ -1349,7 +1482,9 @@
         "DELETING",
         "CREATE_FAILED",
         "DELETE_FAILED",
-        "UPDATE_FAILED"
+        "UPDATE_FAILED",
+        "SUSPENDING",
+        "SUSPENDED"
       ]
     },
     "QueueSummary":{
@@ -1390,7 +1525,7 @@
         },
         "status":{
           "shape":"QueueStatus",
-          "documentation":"<p>The provisioning status of the queue.</p> <note> <p> The provisioning status doesn't indicate the overall health of the queue.</p> </note>"
+          "documentation":"<p>The provisioning status of the queue.</p> <note> <p> The provisioning status doesn't indicate the overall health of the queue.</p> </note> <important> <p>The resource enters the <code>SUSPENDING</code> and <code>SUSPENDED</code> states when the scheduler is beyond end of life and we have suspended the cluster. When in these states, you can't use the cluster. The cluster controller is down and all compute instances are terminated. The resources still count toward your service quotas. You can delete a resource if its status is <code>SUSPENDED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions_faq.html\">Frequently asked questions about Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
         }
       },
       "documentation":"<p>The object returned by the <code>ListQueues</code> API action.</p>"
@@ -1537,11 +1672,11 @@
       "members":{
         "type":{
           "shape":"SchedulerType",
-          "documentation":"<p>The software Amazon Web Services PCS uses to manage cluster scaling and job scheduling.</p>"
+          "documentation":"<p>The software PCS uses to manage cluster scaling and job scheduling.</p>"
         },
         "version":{
           "shape":"String",
-          "documentation":"<p>The version of the specified scheduling software that Amazon Web Services PCS uses to manage cluster scaling and job scheduling.</p>"
+          "documentation":"<p>The version of the specified scheduling software that PCS uses to manage cluster scaling and job scheduling. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions.html\">Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> <p>Valid Values: <code>23.11 | 24.05 | 24.11</code> </p>"
         }
       },
       "documentation":"<p>The cluster management and job scheduling software associated with the cluster.</p>"
@@ -1555,11 +1690,11 @@
       "members":{
         "type":{
           "shape":"SchedulerType",
-          "documentation":"<p>The software Amazon Web Services PCS uses to manage cluster scaling and job scheduling.</p>"
+          "documentation":"<p>The software PCS uses to manage cluster scaling and job scheduling.</p>"
         },
         "version":{
           "shape":"String",
-          "documentation":"<p>The version of the specified scheduling software that Amazon Web Services PCS uses to manage cluster scaling and job scheduling.</p>"
+          "documentation":"<p>The version of the specified scheduling software that PCS uses to manage cluster scaling and job scheduling. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-versions.html\">Slurm versions in PCS</a> in the <i>PCS User Guide</i>.</p> <p>Valid Values: <code>23.11 | 24.05 | 24.11</code> </p>"
         }
       },
       "documentation":"<p>The cluster management and job scheduling software associated with the cluster.</p>"
@@ -1625,7 +1760,7 @@
       "members":{
         "secretArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the the shared Slurm key.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the shared Slurm key.</p>"
         },
         "secretVersion":{
           "shape":"String",
@@ -1643,14 +1778,14 @@
       "members":{
         "parameterName":{
           "shape":"String",
-          "documentation":"<p>Amazon Web Services PCS supports configuration of the following Slurm parameters:</p> <ul> <li> <p>For <b>clusters</b> </p> <ul> <li> <p> <a href=\"https://slurm.schedmd.com/slurm.conf.html#OPT_Prolog_1\"> <code>Prolog</code> </a> </p> </li> <li> <p> <a href=\"https://slurm.schedmd.com/slurm.conf.html#OPT_Epilog_1\"> <code>Epilog</code> </a> </p> </li> <li> <p> <a href=\"https://slurm.schedmd.com/slurm.conf.html#OPT_SelectTypeParameters\"> <code>SelectTypeParameters</code> </a> </p> </li> </ul> </li> <li> <p>For <b>compute node groups</b> </p> <ul> <li> <p> <a href=\"https://slurm.schedmd.com/slurm.conf.html#OPT_Weight\"> <code>Weight</code> </a> </p> </li> <li> <p> <a href=\"https://slurm.schedmd.com/slurm.conf.html#OPT_Weight\"> <code>RealMemory</code> </a> </p> </li> </ul> </li> </ul>"
+          "documentation":"<p>PCS supports custom Slurm settings for clusters, compute node groups, and queues. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-custom-settings.html\">Configuring custom Slurm settings in PCS</a> in the <i>PCS User Guide</i>.</p>"
         },
         "parameterValue":{
           "shape":"String",
           "documentation":"<p>The values for the configured Slurm settings.</p>"
         }
       },
-      "documentation":"<p>Additional settings that directly map to Slurm settings.</p>"
+      "documentation":"<p>Additional settings that directly map to Slurm settings.</p> <important> <p>PCS supports a subset of Slurm settings. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/slurm-custom-settings.html\">Configuring custom Slurm settings in PCS</a> in the <i>PCS User Guide</i>.</p> </important>"
     },
     "SlurmCustomSettings":{
       "type":"list",
@@ -1669,7 +1804,7 @@
       "members":{
         "allocationStrategy":{
           "shape":"SpotAllocationStrategy",
-          "documentation":"<p>The Amazon EC2 allocation strategy Amazon Web Services PCS uses to provision EC2 instances. Amazon Web Services PCS supports <b>lowest price</b>, <b>capacity optimized</b>, and <b>price capacity optimized</b>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html\">Use allocation strategies to determine how EC2 Fleet or Spot Fleet fulfills Spot and On-Demand capacity</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. If you don't provide this option, it defaults to <b>price capacity optimized</b>.</p>"
+          "documentation":"<p>The Amazon EC2 allocation strategy PCS uses to provision EC2 instances. PCS supports <b>lowest price</b>, <b>capacity optimized</b>, and <b>price capacity optimized</b>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html\">Use allocation strategies to determine how EC2 Fleet or Spot Fleet fulfills Spot and On-Demand capacity</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. If you don't provide this option, it defaults to <b>price capacity optimized</b>.</p>"
         }
       },
       "documentation":"<p>Additional configuration when you specify <code>SPOT</code> as the <code>purchaseOption</code> for the <code>CreateComputeNodeGroup</code> API action.</p>"
@@ -1756,6 +1891,74 @@
         }
       }
     },
+    "UpdateAccountingRequest":{
+      "type":"structure",
+      "members":{
+        "defaultPurgeTimeInDays":{
+          "shape":"UpdateAccountingRequestDefaultPurgeTimeInDaysInteger",
+          "documentation":"<p>The default value for all purge settings for <code>slurmdbd.conf</code>. For more information, see the <a href=\"https://slurm.schedmd.com/slurmdbd.conf.html\">slurmdbd.conf documentation at SchedMD</a>.</p> <p>The default value for <code>defaultPurgeTimeInDays</code> is <code>-1</code>.</p> <p>A value of <code>-1</code> means there is no purge time and records persist as long as the cluster exists.</p> <important> <p> <code>0</code> isn't a valid value.</p> </important>"
+        },
+        "mode":{
+          "shape":"AccountingMode",
+          "documentation":"<p>The default value for <code>mode</code> is <code>STANDARD</code>. A value of <code>STANDARD</code> means Slurm accounting is enabled.</p>"
+        }
+      },
+      "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting.</p>"
+    },
+    "UpdateAccountingRequestDefaultPurgeTimeInDaysInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":-1
+    },
+    "UpdateClusterRequest":{
+      "type":"structure",
+      "required":["clusterIdentifier"],
+      "members":{
+        "clusterIdentifier":{
+          "shape":"ClusterIdentifier",
+          "documentation":"<p>The name or ID of the cluster to update.</p>"
+        },
+        "clientToken":{
+          "shape":"SBClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, the subsequent retries with the same client token return the result from the original successful request and they have no additional effect. If you don't specify a client token, the CLI and SDK automatically generate 1 for you.</p>",
+          "idempotencyToken":true
+        },
+        "slurmConfiguration":{
+          "shape":"UpdateClusterSlurmConfigurationRequest",
+          "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+        }
+      }
+    },
+    "UpdateClusterResponse":{
+      "type":"structure",
+      "members":{
+        "cluster":{"shape":"Cluster"}
+      }
+    },
+    "UpdateClusterSlurmConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "scaleDownIdleTimeInSeconds":{
+          "shape":"UpdateClusterSlurmConfigurationRequestScaleDownIdleTimeInSecondsInteger",
+          "documentation":"<p>The time (in seconds) before an idle node is scaled down.</p> <p>Default: <code>600</code> </p>"
+        },
+        "slurmCustomSettings":{
+          "shape":"SlurmCustomSettings",
+          "documentation":"<p>Additional Slurm-specific configuration that directly maps to Slurm settings.</p>"
+        },
+        "accounting":{
+          "shape":"UpdateAccountingRequest",
+          "documentation":"<p>The accounting configuration includes configurable settings for Slurm accounting.</p>"
+        }
+      },
+      "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+    },
+    "UpdateClusterSlurmConfigurationRequestScaleDownIdleTimeInSecondsInteger":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
     "UpdateComputeNodeGroupRequest":{
       "type":"structure",
       "required":[
@@ -1773,7 +1976,7 @@
         },
         "amiId":{
           "shape":"AmiId",
-          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that Amazon Web Services PCS uses to launch instances. If not provided, Amazon Web Services PCS uses the AMI ID specified in the custom launch template.</p>"
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) that PCS uses to launch instances. If not provided, PCS uses the AMI ID specified in the custom launch template.</p>"
         },
         "subnetIds":{
           "shape":"StringList",
@@ -1782,7 +1985,7 @@
         "customLaunchTemplate":{"shape":"CustomLaunchTemplate"},
         "purchaseOption":{
           "shape":"PurchaseOption",
-          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. Amazon Web Services PCS supports On-Demand and Spot instances. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Instance purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
+          "documentation":"<p>Specifies how EC2 instances are purchased on your behalf. PCS supports On-Demand Instances, Spot Instances, and Amazon EC2 Capacity Blocks for ML. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html\">Amazon EC2 billing and purchasing options</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about PCS support for Capacity Blocks, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/capacity-blocks.html\">Using Amazon EC2 Capacity Blocks for ML with PCS</a> in the <i>PCS User Guide</i>. If you don't provide this option, it defaults to On-Demand.</p>"
         },
         "spotOptions":{"shape":"SpotOptions"},
         "scalingConfiguration":{
@@ -1791,7 +1994,7 @@
         },
         "iamInstanceProfileArn":{
           "shape":"InstanceProfileArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission. The resource identifier of the ARN must start with <code>AWSPCS</code> or it must have <code>/aws-pcs/</code> in its path.</p> <p class=\"title\"> <b>Examples</b> </p> <ul> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/AWSPCS-example-role-1</code> </p> </li> <li> <p> <code>arn:aws:iam::111122223333:instance-profile/aws-pcs/example-role-2</code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM instance profile used to pass an IAM role when launching EC2 instances. The role contained in your instance profile must have the <code>pcs:RegisterComputeNodeGroupInstance</code> permission and the role name must start with <code>AWSPCS</code> or must have the path <code>/aws-pcs/</code>. For more information, see <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide/security-instance-profiles.html\">IAM instance profiles for PCS</a> in the <i>PCS User Guide</i>.</p>"
         },
         "slurmConfiguration":{
           "shape":"UpdateComputeNodeGroupSlurmConfigurationRequest",
@@ -1839,6 +2042,10 @@
           "shape":"ComputeNodeGroupConfigurationList",
           "documentation":"<p>The list of compute node group configurations to associate with the queue. Queues assign jobs to associated compute node groups.</p>"
         },
+        "slurmConfiguration":{
+          "shape":"UpdateQueueSlurmConfigurationRequest",
+          "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+        },
         "clientToken":{
           "shape":"SBClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, the subsequent retries with the same client token return the result from the original successful request and they have no additional effect. If you don't specify a client token, the CLI and SDK automatically generate 1 for you.</p>",
@@ -1852,6 +2059,16 @@
         "queue":{"shape":"Queue"}
       }
     },
+    "UpdateQueueSlurmConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "slurmCustomSettings":{
+          "shape":"SlurmCustomSettings",
+          "documentation":"<p>Additional Slurm-specific configuration that directly maps to Slurm settings.</p>"
+        }
+      },
+      "documentation":"<p>Additional options related to the Slurm scheduler.</p>"
+    },
     "ValidationException":{
       "type":"structure",
       "required":[
@@ -1904,5 +2121,5 @@
       ]
     }
   },
-  "documentation":"<p>Amazon Web Services Parallel Computing Service (Amazon Web Services PCS) is a managed service that makes it easier for you to run and scale your high performance computing (HPC) workloads, and build scientific and engineering models on Amazon Web Services using Slurm. For more information, see the <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide\">Amazon Web Services Parallel Computing Service User Guide</a>.</p> <p>This reference describes the actions and data types of the service management API. You can use the Amazon Web Services SDKs to call the API actions in software, or use the Command Line Interface (CLI) to call the API actions manually. These API actions manage the service through an Amazon Web Services account.</p> <p>The API actions operate on Amazon Web Services PCS resources. A <i>resource</i> is an entity in Amazon Web Services that you can work with. Amazon Web Services services create resources when you use the features of the service. Examples of Amazon Web Services PCS resources include clusters, compute node groups, and queues. For more information about resources in Amazon Web Services, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html#term-resource\">Resource</a> in the <i>Resource Explorer User Guide</i>. </p> <p>An Amazon Web Services PCS <i>compute node</i> is an Amazon EC2 instance. You don't launch compute nodes directly. Amazon Web Services PCS uses configuration information that you provide to launch compute nodes in your Amazon Web Services account. You receive billing charges for your running compute nodes. Amazon Web Services PCS automatically terminates your compute nodes when you delete the Amazon Web Services PCS resources related to those compute nodes.</p>"
+  "documentation":"<p>Parallel Computing Service (PCS) is a managed service that makes it easier for you to run and scale your high performance computing (HPC) workloads, and build scientific and engineering models on Amazon Web Services using Slurm. For more information, see the <a href=\"https://docs.aws.amazon.com/pcs/latest/userguide\">Parallel Computing Service User Guide</a>.</p> <p>This reference describes the actions and data types of the service management API. You can use the Amazon Web Services SDKs to call the API actions in software, or use the Command Line Interface (CLI) to call the API actions manually. These API actions manage the service through an Amazon Web Services account.</p> <p>The API actions operate on PCS resources. A <i>resource</i> is an entity in Amazon Web Services that you can work with. Amazon Web Services services create resources when you use the features of the service. Examples of PCS resources include clusters, compute node groups, and queues. For more information about resources in Amazon Web Services, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html#term-resource\">Resource</a> in the <i>Resource Explorer User Guide</i>. </p> <p>An PCS <i>compute node</i> is an Amazon EC2 instance. You don't launch compute nodes directly. PCS uses configuration information that you provide to launch compute nodes in your Amazon Web Services account. You receive billing charges for your running compute nodes. PCS automatically terminates your compute nodes when you delete the PCS resources related to those compute nodes.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize/2018-05-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/personalize/2018-05-22/service-2.json 2.31.35-1/awscli/botocore/data/personalize/2018-05-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/personalize/2018-05-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize/2018-05-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -311,7 +311,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ResourceInUseException"}
       ],
-      "documentation":"<p>Deletes a dataset. You can't delete a dataset if an associated <code>DatasetImportJob</code> or <code>SolutionVersion</code> is in the CREATE PENDING or IN PROGRESS state. For more information on datasets, see <a href=\"https://docs.aws.amazon.com/personalize/latest/dg/API_CreateDataset.html\">CreateDataset</a>.</p>",
+      "documentation":"<p>Deletes a dataset. You can't delete a dataset if an associated <code>DatasetImportJob</code> or <code>SolutionVersion</code> is in the CREATE PENDING or IN PROGRESS state. For more information about deleting datasets, see <a href=\"https://docs.aws.amazon.com/personalize/latest/dg/delete-dataset.html\">Deleting a dataset</a>. </p>",
       "idempotent":true
     },
     "DeleteDatasetGroup":{
@@ -1662,7 +1662,8 @@
     },
     "ColumnName":{
       "type":"string",
-      "max":150
+      "max":150,
+      "pattern":"[A-Za-z_][A-Za-z\\d_]*"
     },
     "ColumnNamesList":{
       "type":"list",
@@ -3385,6 +3386,29 @@
       ]
     },
     "ErrorMessage":{"type":"string"},
+    "EventParameters":{
+      "type":"structure",
+      "members":{
+        "eventType":{
+          "shape":"EventType",
+          "documentation":"<p>The name of the event type to be considered for solution creation.</p>"
+        },
+        "eventValueThreshold":{
+          "shape":"EventTypeThresholdValue",
+          "documentation":"<p>The threshold of the event type. Only events with a value greater or equal to this threshold will be considered for solution creation.</p>"
+        },
+        "weight":{
+          "shape":"EventTypeWeight",
+          "documentation":"<p>The weight of the event type. A higher weight means higher importance of the event type for the created solution.</p>"
+        }
+      },
+      "documentation":"<p>Describes the parameters of events, which are used in solution creation.</p>"
+    },
+    "EventParametersList":{
+      "type":"list",
+      "member":{"shape":"EventParameters"},
+      "max":10
+    },
     "EventTracker":{
       "type":"structure",
       "members":{
@@ -3458,10 +3482,26 @@
       "type":"string",
       "max":256
     },
+    "EventTypeThresholdValue":{"type":"double"},
+    "EventTypeWeight":{
+      "type":"double",
+      "max":1,
+      "min":0
+    },
     "EventValueThreshold":{
       "type":"string",
       "max":256
     },
+    "EventsConfig":{
+      "type":"structure",
+      "members":{
+        "eventParametersList":{
+          "shape":"EventParametersList",
+          "documentation":"<p>A list of event parameters, which includes event types and their event value thresholds and weights.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of events, which are used in solution creation.</p>"
+    },
     "ExcludedDatasetColumns":{
       "type":"map",
       "key":{"shape":"DatasetType"},
@@ -4888,6 +4928,10 @@
           "shape":"AutoMLConfig",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/personalize/latest/dg/API_AutoMLConfig.html\">AutoMLConfig</a> object containing a list of recipes to search when AutoML is performed.</p>"
         },
+        "eventsConfig":{
+          "shape":"EventsConfig",
+          "documentation":"<p>Describes the configuration of an event, which includes a list of event parameters. You can specify up to 10 event parameters. Events are used in solution creation.</p>"
+        },
         "optimizationObjective":{
           "shape":"OptimizationObjective",
           "documentation":"<p>Describes the additional objective for the solution, such as maximizing streaming minutes or increasing revenue. For more information see <a href=\"https://docs.aws.amazon.com/personalize/latest/dg/optimizing-solution-for-objective.html\">Optimizing a solution</a>.</p>"
@@ -4936,7 +4980,11 @@
     "SolutionUpdateConfig":{
       "type":"structure",
       "members":{
-        "autoTrainingConfig":{"shape":"AutoTrainingConfig"}
+        "autoTrainingConfig":{"shape":"AutoTrainingConfig"},
+        "eventsConfig":{
+          "shape":"EventsConfig",
+          "documentation":"<p>Describes the configuration of an event, which includes a list of event parameters. You can specify up to 10 event parameters. Events are used in solution creation.</p>"
+        }
       },
       "documentation":"<p>The configuration details of the solution update.</p>"
     },
@@ -5162,7 +5210,8 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+      "sensitive":true
     },
     "TagKeys":{
       "type":"list",
@@ -5189,14 +5238,14 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+      "sensitive":true
     },
     "Tags":{
       "type":"list",
@@ -5302,8 +5351,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCampaignRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize-events/2018-03-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/personalize-events/2018-03-22/service-2.json 2.31.35-1/awscli/botocore/data/personalize-events/2018-03-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/personalize-events/2018-03-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize-events/2018-03-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"personalize-events",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Personalize Events",
     "serviceId":"Personalize Events",
     "signatureVersion":"v4",
     "signingName":"personalize",
-    "uid":"personalize-events-2018-03-22"
+    "uid":"personalize-events-2018-03-22",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "PutActionInteractions":{
diff -pruN 2.23.6-1/awscli/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize-runtime/2018-05-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/personalize-runtime/2018-05-22/service-2.json 2.31.35-1/awscli/botocore/data/personalize-runtime/2018-05-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/personalize-runtime/2018-05-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/personalize-runtime/2018-05-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,8 @@
     "serviceId":"Personalize Runtime",
     "signatureVersion":"v4",
     "signingName":"personalize",
-    "uid":"personalize-runtime-2018-05-22"
+    "uid":"personalize-runtime-2018-05-22",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetActionRecommendations":{
diff -pruN 2.23.6-1/awscli/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pi/2018-02-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pi/2018-02-27/service-2.json 2.31.35-1/awscli/botocore/data/pi/2018-02-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/pi/2018-02-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pi/2018-02-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -74,7 +74,7 @@
         {"shape":"InternalServiceError"},
         {"shape":"NotAuthorizedException"}
       ],
-      "documentation":"<p>Get the attributes of the specified dimension group for a DB instance or data source. For example, if you specify a SQL ID, <code>GetDimensionKeyDetails</code> retrieves the full text of the dimension <code>db.sql.statement</code> associated with this ID. This operation is useful because <code>GetResourceMetrics</code> and <code>DescribeDimensionKeys</code> don't support retrieval of large SQL statement text.</p>"
+      "documentation":"<p>Get the attributes of the specified dimension group for a DB instance or data source. For example, if you specify a SQL ID, <code>GetDimensionKeyDetails</code> retrieves the full text of the dimension <code>db.sql.statement</code> associated with this ID. This operation is useful because <code>GetResourceMetrics</code> and <code>DescribeDimensionKeys</code> don't support retrieval of large SQL statement text, lock snapshots, and execution plans.</p>"
     },
     "GetPerformanceAnalysisReport":{
       "name":"GetPerformanceAnalysisReport",
@@ -435,8 +435,7 @@
     },
     "DeletePerformanceAnalysisReportResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDimensionKeysRequest":{
       "type":"structure",
@@ -479,7 +478,7 @@
         },
         "AdditionalMetrics":{
           "shape":"AdditionalMetricsList",
-          "documentation":"<p>Additional metrics for the top <code>N</code> dimension keys. If the specified dimension group in the <code>GroupBy</code> parameter is <code>db.sql_tokenized</code>, you can specify per-SQL metrics to get the values for the top <code>N</code> SQL digests. The response syntax is as follows: <code>\"AdditionalMetrics\" : { \"<i>string</i>\" : \"<i>string</i>\" }</code>. </p>"
+          "documentation":"<p>Additional metrics for the top <code>N</code> dimension keys. If the specified dimension group in the <code>GroupBy</code> parameter is <code>db.sql_tokenized</code>, you can specify per-SQL metrics to get the values for the top <code>N</code> SQL digests. The response syntax is as follows: <code>\"AdditionalMetrics\" : { \"<i>string</i>\" : \"<i>string</i>\" }</code>.</p> <p>The only supported statistic function is <code>.avg</code>.</p>"
         },
         "PartitionBy":{
           "shape":"DimensionGroup",
@@ -568,11 +567,11 @@
       "members":{
         "Group":{
           "shape":"SanitizedString",
-          "documentation":"<p>The name of the dimension group. Valid values are as follows:</p> <ul> <li> <p> <code>db</code> - The name of the database to which the client is connected. The following values are permitted:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Aurora MySQL</p> </li> <li> <p>Amazon RDS MySQL</p> </li> <li> <p>Amazon RDS MariaDB</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.application</code> - The name of the application that is connected to the database. The following values are permitted:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.host</code> - The host name of the connected client (all engines).</p> </li> <li> <p> <code>db.query</code> - The query that is currently running (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query_tokenized</code> - The digest query (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.session_type</code> - The type of the current session (only Aurora PostgreSQL and RDS PostgreSQL).</p> </li> <li> <p> <code>db.sql</code> - The text of the SQL statement that is currently running (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql_tokenized</code> - The SQL digest (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.user</code> - The user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event</code> - The event for which the database backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event_type</code> - The type of event for which the database backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_state</code> - The event for which the database backend is waiting (only Amazon DocumentDB).</p> </li> </ul>"
+          "documentation":"<p>The name of the dimension group. Valid values are as follows:</p> <ul> <li> <p> <code>db</code> - The name of the database to which the client is connected. The following values are permitted:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Aurora MySQL</p> </li> <li> <p>Amazon RDS MySQL</p> </li> <li> <p>Amazon RDS MariaDB</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.application</code> - The name of the application that is connected to the database. The following values are permitted:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.blocking_sql</code> - The SQL queries blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_session</code> - The sessions blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_object</code> - The object resources acquired by other sessions that are blocking the most DB load.</p> </li> <li> <p> <code>db.host</code> - The host name of the connected client (all engines).</p> </li> <li> <p> <code>db.plans</code> - The execution plans for the query (only Aurora PostgreSQL).</p> </li> <li> <p> <code>db.query</code> - The query that is currently running (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query_tokenized</code> - The digest query (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.session_type</code> - The type of the current session (only Aurora PostgreSQL and RDS PostgreSQL).</p> </li> <li> <p> <code>db.sql</code> - The text of the SQL statement that is currently running (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql_tokenized</code> - The SQL digest (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.user</code> - The user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event</code> - The event for which the database backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event_type</code> - The type of event for which the database backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_state</code> - The event for which the database backend is waiting (only Amazon DocumentDB).</p> </li> </ul>"
         },
         "Dimensions":{
           "shape":"SanitizedStringList",
-          "documentation":"<p>A list of specific dimensions from a dimension group. If this parameter is not present, then it signifies that all of the dimensions in the group were requested, or are present in the response.</p> <p>Valid values for elements in the <code>Dimensions</code> array are:</p> <ul> <li> <p> <code>db.application.name</code> - The name of the application that is connected to the database. Valid values are as follows: </p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.host.id</code> - The host ID of the connected client (all engines).</p> </li> <li> <p> <code>db.host.name</code> - The host name of the connected client (all engines).</p> </li> <li> <p> <code>db.name</code> - The name of the database to which the client is connected. Valid values are as follows:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Aurora MySQL</p> </li> <li> <p>Amazon RDS MySQL</p> </li> <li> <p>Amazon RDS MariaDB</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.query.id</code> - The query ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.db_id</code> - The query ID generated by the database (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.statement</code> - The text of the query that is being run (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized_id</code> </p> </li> <li> <p> <code>db.query.tokenized.id</code> - The query digest ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized.db_id</code> - The query digest ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized.statement</code> - The text of the query digest (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.session_type.name</code> - The type of the current session (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.id</code> - The hash of the full, non-tokenized SQL statement generated by Performance Insights (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.db_id</code> - Either the SQL ID generated by the database engine, or a value generated by Performance Insights that begins with <code>pi-</code> (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.statement</code> - The full text of the SQL statement that is running, as in <code>SELECT * FROM employees</code> (all engines except Amazon DocumentDB)</p> </li> <li> <p> <code>db.sql.tokenized_id</code> - The hash of the SQL digest generated by Performance Insights (all engines except Amazon DocumentDB). The <code>db.sql.tokenized_id</code> dimension fetches the value of the <code>db.sql_tokenized.id</code> dimension. Amazon RDS returns <code>db.sql.tokenized_id</code> from the <code>db.sql</code> dimension group. </p> </li> <li> <p> <code>db.sql_tokenized.id</code> - The hash of the SQL digest generated by Performance Insights (all engines except Amazon DocumentDB). In the console, <code>db.sql_tokenized.id</code> is called the Support ID because Amazon Web Services Support can look at this data to help you troubleshoot database issues.</p> </li> <li> <p> <code>db.sql_tokenized.db_id</code> - Either the native database ID used to refer to the SQL statement, or a synthetic ID such as <code>pi-2372568224</code> that Performance Insights generates if the native database ID isn't available (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql_tokenized.statement</code> - The text of the SQL digest, as in <code>SELECT * FROM employees WHERE employee_id = ?</code> (all engines except Amazon DocumentDB)</p> </li> <li> <p> <code>db.user.id</code> - The ID of the user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.user.name</code> - The name of the user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event.name</code> - The event for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event.type</code> - The type of event for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event_type.name</code> - The name of the event type for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_state.name</code> - The event for which the backend is waiting (only Amazon DocumentDB).</p> </li> </ul>"
+          "documentation":"<p>A list of specific dimensions from a dimension group. If this parameter is not present, then it signifies that all of the dimensions in the group were requested, or are present in the response.</p> <p>Valid values for elements in the <code>Dimensions</code> array are:</p> <ul> <li> <p> <code>db.application.name</code> - The name of the application that is connected to the database. Valid values are as follows: </p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.blocking_sql.id</code> - The ID for each of the SQL queries blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_sql.sql</code> - The SQL text for each of the SQL queries blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_session.id</code> - The ID for each of the sessions blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_object.id</code> - The ID for each of the object resources acquired by other sessions that are blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_object.type</code> - The object type for each of the object resources acquired by other sessions that are blocking the most DB load.</p> </li> <li> <p> <code>db.blocking_object.value</code> - The value for each of the object resources acquired by other sessions that are blocking the most DB load.</p> </li> <li> <p> <code>db.host.id</code> - The host ID of the connected client (all engines).</p> </li> <li> <p> <code>db.host.name</code> - The host name of the connected client (all engines).</p> </li> <li> <p> <code>db.name</code> - The name of the database to which the client is connected. Valid values are as follows:</p> <ul> <li> <p>Aurora PostgreSQL</p> </li> <li> <p>Amazon RDS PostgreSQL</p> </li> <li> <p>Aurora MySQL</p> </li> <li> <p>Amazon RDS MySQL</p> </li> <li> <p>Amazon RDS MariaDB</p> </li> <li> <p>Amazon DocumentDB</p> </li> </ul> </li> <li> <p> <code>db.query.id</code> - The query ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.db_id</code> - The query ID generated by the database (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.statement</code> - The text of the query that is being run (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized_id</code> </p> </li> <li> <p> <code>db.query.tokenized.id</code> - The query digest ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized.db_id</code> - The query digest ID generated by Performance Insights (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.query.tokenized.statement</code> - The text of the query digest (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.session_type.name</code> - The type of the current session (only Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.id</code> - The hash of the full, non-tokenized SQL statement generated by Performance Insights (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.db_id</code> - Either the SQL ID generated by the database engine, or a value generated by Performance Insights that begins with <code>pi-</code> (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql.statement</code> - The full text of the SQL statement that is running, as in <code>SELECT * FROM employees</code> (all engines except Amazon DocumentDB)</p> </li> <li> <p> <code>db.sql.tokenized_id</code> - The hash of the SQL digest generated by Performance Insights (all engines except Amazon DocumentDB). The <code>db.sql.tokenized_id</code> dimension fetches the value of the <code>db.sql_tokenized.id</code> dimension. Amazon RDS returns <code>db.sql.tokenized_id</code> from the <code>db.sql</code> dimension group. </p> </li> <li> <p> <code>db.sql_tokenized.id</code> - The hash of the SQL digest generated by Performance Insights (all engines except Amazon DocumentDB). In the console, <code>db.sql_tokenized.id</code> is called the Support ID because Amazon Web Services Support can look at this data to help you troubleshoot database issues.</p> </li> <li> <p> <code>db.sql_tokenized.db_id</code> - Either the native database ID used to refer to the SQL statement, or a synthetic ID such as <code>pi-2372568224</code> that Performance Insights generates if the native database ID isn't available (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.sql_tokenized.statement</code> - The text of the SQL digest, as in <code>SELECT * FROM employees WHERE employee_id = ?</code> (all engines except Amazon DocumentDB)</p> </li> <li> <p> <code>db.user.id</code> - The ID of the user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.user.name</code> - The name of the user logged in to the database (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event.name</code> - The event for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event.type</code> - The type of event for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_event_type.name</code> - The name of the event type for which the backend is waiting (all engines except Amazon DocumentDB).</p> </li> <li> <p> <code>db.wait_state.name</code> - The event for which the backend is waiting (only Amazon DocumentDB).</p> </li> </ul>"
         },
         "Limit":{
           "shape":"Limit",
@@ -713,15 +712,15 @@
         },
         "Group":{
           "shape":"RequestString",
-          "documentation":"<p>The name of the dimension group. Performance Insights searches the specified group for the dimension group ID. The following group name values are valid:</p> <ul> <li> <p> <code>db.query</code> (Amazon DocumentDB only)</p> </li> <li> <p> <code>db.sql</code> (Amazon RDS and Aurora only)</p> </li> </ul>"
+          "documentation":"<p>The name of the dimension group. Performance Insights searches the specified group for the dimension group ID. The following group name values are valid:</p> <ul> <li> <p> <code>db.execution_plan</code> (Amazon RDS and Aurora only)</p> </li> <li> <p> <code>db.lock_snapshot</code> (Aurora only)</p> </li> <li> <p> <code>db.query</code> (Amazon DocumentDB only)</p> </li> <li> <p> <code>db.sql</code> (Amazon RDS and Aurora only)</p> </li> </ul>"
         },
         "GroupIdentifier":{
           "shape":"RequestString",
-          "documentation":"<p>The ID of the dimension group from which to retrieve dimension details. For dimension group <code>db.sql</code>, the group ID is <code>db.sql.id</code>. The following group ID values are valid:</p> <ul> <li> <p> <code>db.sql.id</code> for dimension group <code>db.sql</code> (Aurora and RDS only)</p> </li> <li> <p> <code>db.query.id</code> for dimension group <code>db.query</code> (DocumentDB only)</p> </li> </ul>"
+          "documentation":"<p>The ID of the dimension group from which to retrieve dimension details. For dimension group <code>db.sql</code>, the group ID is <code>db.sql.id</code>. The following group ID values are valid:</p> <ul> <li> <p> <code>db.execution_plan.id</code> for dimension group <code>db.execution_plan</code> (Aurora and RDS only)</p> </li> <li> <p> <code>db.sql.id</code> for dimension group <code>db.sql</code> (Aurora and RDS only)</p> </li> <li> <p> <code>db.query.id</code> for dimension group <code>db.query</code> (DocumentDB only)</p> </li> <li> <p>For the dimension group <code>db.lock_snapshot</code>, the <code>GroupIdentifier</code> is the epoch timestamp when Performance Insights captured the snapshot, in seconds. You can retrieve this value with the <code>GetResourceMetrics</code> operation for a 1 second period.</p> </li> </ul>"
         },
         "RequestedDimensions":{
           "shape":"RequestedDimensionList",
-          "documentation":"<p>A list of dimensions to retrieve the detail data for within the given dimension group. If you don't specify this parameter, Performance Insights returns all dimension data within the specified dimension group. Specify dimension names for the following dimension groups:</p> <ul> <li> <p> <code>db.sql</code> - Specify either the full dimension name <code>db.sql.statement</code> or the short dimension name <code>statement</code> (Aurora and RDS only).</p> </li> <li> <p> <code>db.query</code> - Specify either the full dimension name <code>db.query.statement</code> or the short dimension name <code>statement</code> (DocumentDB only).</p> </li> </ul>"
+          "documentation":"<p>A list of dimensions to retrieve the detail data for within the given dimension group. If you don't specify this parameter, Performance Insights returns all dimension data within the specified dimension group. Specify dimension names for the following dimension groups:</p> <ul> <li> <p> <code>db.execution_plan</code> - Specify the dimension name <code>db.execution_plan.raw_plan</code> or the short dimension name <code>raw_plan</code> (Amazon RDS and Aurora only)</p> </li> <li> <p> <code>db.lock_snapshot</code> - Specify the dimension name <code>db.lock_snapshot.lock_trees</code> or the short dimension name <code>lock_trees</code>. (Aurora only)</p> </li> <li> <p> <code>db.sql</code> - Specify either the full dimension name <code>db.sql.statement</code> or the short dimension name <code>statement</code> (Aurora and RDS only).</p> </li> <li> <p> <code>db.query</code> - Specify either the full dimension name <code>db.query.statement</code> or the short dimension name <code>statement</code> (DocumentDB only).</p> </li> </ul>"
         }
       }
     },
@@ -839,7 +838,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of items to return in the response. If more items exist than the specified <code>MaxRecords</code> value, a pagination token is included in the response so that the remaining results can be retrieved. </p>"
+          "documentation":"<p>The maximum number of items to return in the response.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -1234,6 +1233,10 @@
           "shape":"DescriptiveMap",
           "documentation":"<p>A dimension map that contains the dimensions for this partition.</p>"
         },
+        "Filter":{
+          "shape":"DescriptiveMap",
+          "documentation":"<p>The filter for the Performance Insights metric.</p>"
+        },
         "Value":{
           "shape":"Double",
           "documentation":"<p>The value of the metric. For example, <code>9</code> for <code>db.load.avg</code>.</p>"
@@ -1424,8 +1427,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1464,8 +1466,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     }
   },
   "documentation":"<fullname>Amazon RDS Performance Insights</fullname> <p>Amazon RDS Performance Insights enables you to monitor and explore different dimensions of database load based on data captured from a running DB instance. The guide provides detailed information about Performance Insights data types, parameters and errors.</p> <p>When Performance Insights is enabled, the Amazon RDS Performance Insights API provides visibility into the performance of your DB instance. Amazon CloudWatch provides the authoritative source for Amazon Web Services service-vended monitoring metrics. Performance Insights offers a domain-specific view of DB load.</p> <p>DB load is measured as average active sessions. Performance Insights provides the data to API consumers as a two-dimensional time-series dataset. The time dimension provides DB load data for each time point in the queried time range. Each time point decomposes overall load in relation to the requested dimensions, measured at that time point. Examples include SQL, Wait event, User, and Host.</p> <ul> <li> <p>To learn more about Performance Insights and Amazon Aurora DB instances, go to the <i> <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.html\"> Amazon Aurora User Guide</a> </i>. </p> </li> <li> <p>To learn more about Performance Insights and Amazon RDS DB instances, go to the <i> <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html\"> Amazon RDS User Guide</a> </i>. </p> </li> <li> <p>To learn more about Performance Insights and Amazon DocumentDB clusters, go to the <i> <a href=\"https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights.html\"> Amazon DocumentDB Developer Guide</a> </i>.</p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint/2016-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint/2016-12-01/service-2.json 2.31.35-1/awscli/botocore/data/pinpoint/2016-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/pinpoint/2016-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint/2016-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -3899,9 +3899,7 @@
         "shape": "ListTagsForResourceResponse",
         "documentation": "<p>The request succeeded.</p>"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Retrieves all the tags (keys and values) that are associated with an application, campaign, message template, or segment.</p>"
     },
     "ListTemplateVersions": {
@@ -4320,9 +4318,7 @@
       "input": {
         "shape": "TagResourceRequest"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Adds one or more tags (keys and values) to an application, campaign, message template, or segment.</p>"
     },
     "UntagResource": {
@@ -4335,9 +4331,7 @@
       "input": {
         "shape": "UntagResourceRequest"
       },
-      "errors": [
-
-      ],
+      "errors": [],
       "documentation": "<p>Removes one or more tags (keys and values) from an application, campaign, message template, or segment.</p>"
     },
     "UpdateAdmChannel": {
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-email/2018-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-email/2018-07-26/service-2.json 2.31.35-1/awscli/botocore/data/pinpoint-email/2018-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-email/2018-07-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-email/2018-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"email",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Pinpoint Email",
     "serviceFullName":"Amazon Pinpoint Email Service",
     "serviceId":"Pinpoint Email",
     "signatureVersion":"v4",
     "signingName":"ses",
-    "uid":"pinpoint-email-2018-07-26"
+    "uid":"pinpoint-email-2018-07-26",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateConfigurationSet":{
@@ -667,16 +669,14 @@
   "shapes":{
     "AccountSuspendedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the account's ability to send email has been permanently restricted.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
     "AlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource specified in your request already exists.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -684,8 +684,7 @@
     "AmazonResourceName":{"type":"string"},
     "BadRequestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input you provided is invalid.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -793,8 +792,7 @@
     },
     "ConcurrentModificationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource is being modified by another operation or thread.</p>",
       "error":{"httpStatusCode":500},
       "exception":true
@@ -849,8 +847,7 @@
     },
     "CreateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateConfigurationSetRequest":{
@@ -886,8 +883,7 @@
     },
     "CreateConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateDedicatedIpPoolRequest":{
@@ -907,8 +903,7 @@
     },
     "CreateDedicatedIpPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateDeliverabilityTestReportRequest":{
@@ -1074,8 +1069,7 @@
     },
     "DeleteConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteConfigurationSetRequest":{
@@ -1093,8 +1087,7 @@
     },
     "DeleteConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteDedicatedIpPoolRequest":{
@@ -1112,8 +1105,7 @@
     },
     "DeleteDedicatedIpPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteEmailIdentityRequest":{
@@ -1131,8 +1123,7 @@
     },
     "DeleteEmailIdentityResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeliverabilityDashboardAccountStatus":{
@@ -1516,8 +1507,7 @@
     "GeneralEnforcementStatus":{"type":"string"},
     "GetAccountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request to obtain information about the email-sending capabilities of your Amazon Pinpoint account.</p>"
     },
     "GetAccountResponse":{
@@ -1699,8 +1689,7 @@
     },
     "GetDeliverabilityDashboardOptionsRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Retrieve information about the status of the Deliverability dashboard for your Amazon Pinpoint account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for the domains that you use to send email using Amazon Pinpoint. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon Pinpoint. For more information about the features and cost of a Deliverability dashboard subscription, see <a href=\"http://aws.amazon.com/pinpoint/pricing/\">Amazon Pinpoint Pricing</a>.</p>"
     },
     "GetDeliverabilityDashboardOptionsResponse":{
@@ -1993,8 +1982,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There are too many instances of the specified resource type.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -2240,8 +2228,7 @@
     },
     "MailFromDomainNotVerifiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the sending domain isn't verified.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -2284,8 +2271,7 @@
     "MessageData":{"type":"string"},
     "MessageRejected":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because it contains invalid content.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -2324,8 +2310,7 @@
     "NextToken":{"type":"string"},
     "NotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource you attempted to access doesn't exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
@@ -2406,8 +2391,7 @@
     },
     "PutAccountDedicatedIpWarmupAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutAccountSendingAttributesRequest":{
@@ -2422,8 +2406,7 @@
     },
     "PutAccountSendingAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetDeliveryOptionsRequest":{
@@ -2449,8 +2432,7 @@
     },
     "PutConfigurationSetDeliveryOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetReputationOptionsRequest":{
@@ -2472,8 +2454,7 @@
     },
     "PutConfigurationSetReputationOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetSendingOptionsRequest":{
@@ -2495,8 +2476,7 @@
     },
     "PutConfigurationSetSendingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetTrackingOptionsRequest":{
@@ -2518,8 +2498,7 @@
     },
     "PutConfigurationSetTrackingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDedicatedIpInPoolRequest":{
@@ -2544,8 +2523,7 @@
     },
     "PutDedicatedIpInPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDedicatedIpWarmupAttributesRequest":{
@@ -2570,8 +2548,7 @@
     },
     "PutDedicatedIpWarmupAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDeliverabilityDashboardOptionRequest":{
@@ -2591,8 +2568,7 @@
     },
     "PutDeliverabilityDashboardOptionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A response that indicates whether the Deliverability dashboard is enabled for your Amazon Pinpoint account.</p>"
     },
     "PutEmailIdentityDkimAttributesRequest":{
@@ -2614,8 +2590,7 @@
     },
     "PutEmailIdentityDkimAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutEmailIdentityFeedbackAttributesRequest":{
@@ -2637,8 +2612,7 @@
     },
     "PutEmailIdentityFeedbackAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutEmailIdentityMailFromAttributesRequest":{
@@ -2664,8 +2638,7 @@
     },
     "PutEmailIdentityMailFromAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "RawMessage":{
@@ -2787,8 +2760,7 @@
     },
     "SendingPausedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the account's ability to send email is currently paused.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -2856,8 +2828,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{"type":"string"},
     "Template":{
@@ -2889,8 +2860,7 @@
     },
     "TooManyRequestsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Too many requests have been made to the operation.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
@@ -2929,8 +2899,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConfigurationSetEventDestinationRequest":{
       "type":"structure",
@@ -2961,8 +2930,7 @@
     },
     "UpdateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "Volume":{
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -32,38 +32,32 @@
         {
             "conditions": [
                 {
-                    "fn": "aws.partition",
+                    "fn": "isSet",
                     "argv": [
                         {
-                            "ref": "Region"
+                            "ref": "Endpoint"
                         }
-                    ],
-                    "assign": "PartitionResult"
+                    ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "booleanEquals",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
-                                }
+                                    "ref": "UseFIPS"
+                                },
+                                true
                             ]
-                        },
-                        {
-                            "fn": "parseURL",
-                            "argv": [
-                                {
-                                    "ref": "Endpoint"
-                                }
-                            ],
-                            "assign": "url"
                         }
                     ],
-                    "type": "tree",
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
                     "rules": [
                         {
                             "conditions": [
@@ -71,239 +65,286 @@
                                     "fn": "booleanEquals",
                                     "argv": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "ref": "UseDualStack"
                                         },
                                         true
                                     ]
                                 }
                             ],
-                            "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
                             "type": "error"
                         },
                         {
                             "conditions": [],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                                    "type": "error"
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": {
-                                            "ref": "Endpoint"
-                                        },
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
-                    ]
-                },
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        },
-                        {
-                            "fn": "booleanEquals",
+                            "fn": "isSet",
                             "argv": [
                                 {
-                                    "ref": "UseDualStack"
-                                },
-                                true
+                                    "ref": "Region"
+                                }
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
-                                        true,
                                         {
-                                            "fn": "getAttr",
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "supportsFIPS"
+                                                true
                                             ]
-                                        }
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                        },
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseDualStack"
                                                 },
-                                                "supportsDualStack"
+                                                true
                                             ]
                                         }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://sms-voice.pinpoint-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://sms-voice.pinpoint-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseFIPS"
                                                 },
-                                                "supportsFIPS"
+                                                true
                                             ]
                                         }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://sms-voice.pinpoint-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "FIPS is enabled but this partition does not support FIPS",
-                            "type": "error"
-                        }
-                    ]
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://sms-voice.pinpoint-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 },
-                                true
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        true,
+                                    "conditions": [
                                         {
-                                            "fn": "getAttr",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "PartitionResult"
+                                                    "ref": "UseDualStack"
                                                 },
-                                                "supportsDualStack"
+                                                true
                                             ]
                                         }
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://sms-voice.pinpoint.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
                                 {
                                     "conditions": [],
-                                    "endpoint": {
-                                        "url": "https://sms-voice.pinpoint.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                        "properties": {},
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://sms-voice.pinpoint.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "error": "DualStack is enabled but this partition does not support DualStack",
-                            "type": "error"
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
-                    "endpoint": {
-                        "url": "https://sms-voice.pinpoint.{Region}.{PartitionResult#dnsSuffix}",
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice/2018-09-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,677 +1,808 @@
 {
-  "metadata" : {
-    "apiVersion" : "2018-09-05",
-    "endpointPrefix" : "sms-voice.pinpoint",
-    "signingName" : "sms-voice",
-    "serviceAbbreviation":"Pinpoint SMS Voice",
-    "serviceFullName" : "Amazon Pinpoint SMS and Voice Service",
-    "serviceId" : "Pinpoint SMS Voice",
-    "protocol" : "rest-json",
-    "jsonVersion" : "1.1",
-    "uid" : "pinpoint-sms-voice-2018-09-05",
-    "signatureVersion" : "v4"
+  "metadata": {
+    "apiVersion": "2018-09-05",
+    "endpointPrefix": "sms-voice.pinpoint",
+    "signingName": "sms-voice",
+    "serviceAbbreviation": "Pinpoint SMS Voice",
+    "serviceFullName": "Amazon Pinpoint SMS and Voice Service",
+    "serviceId": "Pinpoint SMS Voice",
+    "protocol": "rest-json",
+    "jsonVersion": "1.1",
+    "uid": "pinpoint-sms-voice-2018-09-05",
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
-  "operations" : {
-    "CreateConfigurationSet" : {
-      "name" : "CreateConfigurationSet",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v1/sms-voice/configuration-sets",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateConfigurationSetRequest"
-      },
-      "output" : {
-        "shape" : "CreateConfigurationSetResponse",
-        "documentation" : "CreateConfigurationSetResponse"
-      },
-      "errors" : [ {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "LimitExceededException",
-        "documentation" : "LimitExceededException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      }, {
-        "shape" : "AlreadyExistsException",
-        "documentation" : "AlreadyExistsException"
-      } ],
-      "documentation" : "Create a new configuration set. After you create the configuration set, you can add one or more event destinations to it."
-    },
-    "CreateConfigurationSetEventDestination" : {
-      "name" : "CreateConfigurationSetEventDestination",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "CreateConfigurationSetEventDestinationRequest"
-      },
-      "output" : {
-        "shape" : "CreateConfigurationSetEventDestinationResponse",
-        "documentation" : "CreateConfigurationSetEventDestinationResponse"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "LimitExceededException",
-        "documentation" : "LimitExceededException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      }, {
-        "shape" : "NotFoundException",
-        "documentation" : "NotFoundException"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "AlreadyExistsException",
-        "documentation" : "AlreadyExistsException"
-      } ],
-      "documentation" : "Create a new event destination in a configuration set."
-    },
-    "DeleteConfigurationSet" : {
-      "name" : "DeleteConfigurationSet",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v1/sms-voice/configuration-sets/{ConfigurationSetName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteConfigurationSetRequest"
-      },
-      "output" : {
-        "shape" : "DeleteConfigurationSetResponse",
-        "documentation" : "DeleteConfigurationSetResponse"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "NotFoundException"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      } ],
-      "documentation" : "Deletes an existing configuration set."
-    },
-    "DeleteConfigurationSetEventDestination" : {
-      "name" : "DeleteConfigurationSetEventDestination",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "DeleteConfigurationSetEventDestinationRequest"
-      },
-      "output" : {
-        "shape" : "DeleteConfigurationSetEventDestinationResponse",
-        "documentation" : "DeleteConfigurationSetEventDestinationResponse"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "NotFoundException"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      } ],
-      "documentation" : "Deletes an event destination in a configuration set."
-    },
-    "GetConfigurationSetEventDestinations" : {
-      "name" : "GetConfigurationSetEventDestinations",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetConfigurationSetEventDestinationsRequest"
-      },
-      "output" : {
-        "shape" : "GetConfigurationSetEventDestinationsResponse",
-        "documentation" : "GetConfigurationSetEventDestinationsResponse"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "NotFoundException"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      } ],
-      "documentation" : "Obtain information about an event destination, including the types of events it reports, the Amazon Resource Name (ARN) of the destination, and the name of the event destination."
-    },
-    "SendVoiceMessage" : {
-      "name" : "SendVoiceMessage",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/v1/sms-voice/voice/message",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "SendVoiceMessageRequest"
-      },
-      "output" : {
-        "shape" : "SendVoiceMessageResponse",
-        "documentation" : "SendVoiceMessageResponse"
-      },
-      "errors" : [ {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      } ],
-      "documentation" : "Create a new voice message and send it to a recipient's phone number."
-    },
-    "UpdateConfigurationSetEventDestination" : {
-      "name" : "UpdateConfigurationSetEventDestination",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateConfigurationSetEventDestinationRequest"
-      },
-      "output" : {
-        "shape" : "UpdateConfigurationSetEventDestinationResponse",
-        "documentation" : "UpdateConfigurationSetEventDestinationResponse"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "NotFoundException"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "TooManyRequestsException"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "BadRequestException"
-      }, {
-        "shape" : "InternalServiceErrorException",
-        "documentation" : "InternalServiceErrorException"
-      } ],
-      "documentation" : "Update an event destination in a configuration set. An event destination is a location that you publish information about your voice calls to. For example, you can log an event to an Amazon CloudWatch destination when a call fails."
+  "operations": {
+    "CreateConfigurationSet": {
+      "name": "CreateConfigurationSet",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v1/sms-voice/configuration-sets",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateConfigurationSetRequest"
+      },
+      "output": {
+        "shape": "CreateConfigurationSetResponse",
+        "documentation": "CreateConfigurationSetResponse"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "LimitExceededException",
+          "documentation": "LimitExceededException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        },
+        {
+          "shape": "AlreadyExistsException",
+          "documentation": "AlreadyExistsException"
+        }
+      ],
+      "documentation": "Create a new configuration set. After you create the configuration set, you can add one or more event destinations to it."
+    },
+    "CreateConfigurationSetEventDestination": {
+      "name": "CreateConfigurationSetEventDestination",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "CreateConfigurationSetEventDestinationRequest"
+      },
+      "output": {
+        "shape": "CreateConfigurationSetEventDestinationResponse",
+        "documentation": "CreateConfigurationSetEventDestinationResponse"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "LimitExceededException",
+          "documentation": "LimitExceededException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "NotFoundException"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "AlreadyExistsException",
+          "documentation": "AlreadyExistsException"
+        }
+      ],
+      "documentation": "Create a new event destination in a configuration set."
+    },
+    "DeleteConfigurationSet": {
+      "name": "DeleteConfigurationSet",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v1/sms-voice/configuration-sets/{ConfigurationSetName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteConfigurationSetRequest"
+      },
+      "output": {
+        "shape": "DeleteConfigurationSetResponse",
+        "documentation": "DeleteConfigurationSetResponse"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "NotFoundException"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "Deletes an existing configuration set."
+    },
+    "DeleteConfigurationSetEventDestination": {
+      "name": "DeleteConfigurationSetEventDestination",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "DeleteConfigurationSetEventDestinationRequest"
+      },
+      "output": {
+        "shape": "DeleteConfigurationSetEventDestinationResponse",
+        "documentation": "DeleteConfigurationSetEventDestinationResponse"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "NotFoundException"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "Deletes an event destination in a configuration set."
+    },
+    "GetConfigurationSetEventDestinations": {
+      "name": "GetConfigurationSetEventDestinations",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetConfigurationSetEventDestinationsRequest"
+      },
+      "output": {
+        "shape": "GetConfigurationSetEventDestinationsResponse",
+        "documentation": "GetConfigurationSetEventDestinationsResponse"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "NotFoundException"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "Obtain information about an event destination, including the types of events it reports, the Amazon Resource Name (ARN) of the destination, and the name of the event destination."
+    },
+    "ListConfigurationSets": {
+      "name": "ListConfigurationSets",
+      "http": {
+        "method": "GET",
+        "requestUri": "/v1/sms-voice/configuration-sets",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListConfigurationSetsRequest"
+      },
+      "output": {
+        "shape": "ListConfigurationSetsResponse",
+        "documentation": "ListConfigurationSetsResponse"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "List all of the configuration sets associated with your Amazon Pinpoint account in the current region."
+    },
+    "SendVoiceMessage": {
+      "name": "SendVoiceMessage",
+      "http": {
+        "method": "POST",
+        "requestUri": "/v1/sms-voice/voice/message",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "SendVoiceMessageRequest"
+      },
+      "output": {
+        "shape": "SendVoiceMessageResponse",
+        "documentation": "SendVoiceMessageResponse"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "Create a new voice message and send it to a recipient's phone number."
+    },
+    "UpdateConfigurationSetEventDestination": {
+      "name": "UpdateConfigurationSetEventDestination",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/v1/sms-voice/configuration-sets/{ConfigurationSetName}/event-destinations/{EventDestinationName}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateConfigurationSetEventDestinationRequest"
+      },
+      "output": {
+        "shape": "UpdateConfigurationSetEventDestinationResponse",
+        "documentation": "UpdateConfigurationSetEventDestinationResponse"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "NotFoundException"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "TooManyRequestsException"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "BadRequestException"
+        },
+        {
+          "shape": "InternalServiceErrorException",
+          "documentation": "InternalServiceErrorException"
+        }
+      ],
+      "documentation": "Update an event destination in a configuration set. An event destination is a location that you publish information about your voice calls to. For example, you can log an event to an Amazon CloudWatch destination when a call fails."
     }
   },
-  "shapes" : {
-    "AlreadyExistsException" : {
-      "type" : "structure",
-      "documentation" : "The resource specified in your request already exists.",
-      "members" : {
-        "Message" : {
-          "shape" : "String"
+  "shapes": {
+    "AlreadyExistsException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
         }
       },
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 409
+      "documentation": "The resource specified in your request already exists.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 409
       }
     },
-    "BadRequestException" : {
-      "type" : "structure",
-      "documentation" : "The input you provided is invalid.",
-      "members" : {
-        "Message" : {
-          "shape" : "String"
+    "BadRequestException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
         }
       },
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 400
+      "documentation": "The input you provided is invalid.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 400
       }
     },
-    "Boolean" : {
-      "type" : "boolean"
-    },
-    "CallInstructionsMessageType" : {
-      "type" : "structure",
-      "members" : {
-        "Text" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
-        }
-      },
-      "documentation" : "An object that defines a message that contains text formatted using Amazon Pinpoint Voice Instructions markup.",
-      "required" : [ ]
-    },
-    "CloudWatchLogsDestination" : {
-      "type" : "structure",
-      "members" : {
-        "IamRoleArn" : {
-          "shape" : "String",
-          "documentation" : "The Amazon Resource Name (ARN) of an Amazon Identity and Access Management (IAM) role that is able to write event data to an Amazon CloudWatch destination."
-        },
-        "LogGroupArn" : {
-          "shape" : "String",
-          "documentation" : "The name of the Amazon CloudWatch Log Group that you want to record events in."
-        }
-      },
-      "documentation" : "An object that contains information about an event destination that sends data to Amazon CloudWatch Logs.",
-      "required" : [ ]
-    },
-    "CreateConfigurationSetEventDestinationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConfigurationSetName",
-          "documentation" : "ConfigurationSetName"
-        },
-        "EventDestination" : {
-          "shape" : "EventDestinationDefinition"
-        },
-        "EventDestinationName" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "A name that identifies the event destination."
-        }
-      },
-      "documentation" : "Create a new event destination in a configuration set.",
-      "required" : [ "ConfigurationSetName" ]
-    },
-    "CreateConfigurationSetEventDestinationResponse" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "An empty object that indicates that the event destination was created successfully."
-    },
-    "CreateConfigurationSetRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "WordCharactersWithDelimiters",
-          "documentation" : "The name that you want to give the configuration set."
-        }
-      },
-      "documentation" : "A request to create a new configuration set."
-    },
-    "CreateConfigurationSetResponse" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "An empty object that indicates that the configuration set was successfully created."
-    },
-    "DeleteConfigurationSetEventDestinationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConfigurationSetName",
-          "documentation" : "ConfigurationSetName"
-        },
-        "EventDestinationName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "EventDestinationName",
-          "documentation" : "EventDestinationName"
-        }
-      },
-      "required" : [ "EventDestinationName", "ConfigurationSetName" ]
-    },
-    "DeleteConfigurationSetEventDestinationResponse" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "An empty object that indicates that the event destination was deleted successfully."
+    "Boolean": {
+      "type": "boolean"
     },
-    "DeleteConfigurationSetRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConfigurationSetName",
-          "documentation" : "ConfigurationSetName"
-        }
-      },
-      "required" : [ "ConfigurationSetName" ]
-    },
-    "DeleteConfigurationSetResponse" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "An empty object that indicates that the configuration set was deleted successfully."
+    "CallInstructionsMessageType": {
+      "type": "structure",
+      "members": {
+        "Text": {
+          "shape": "NonEmptyString",
+          "documentation": "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
+        }
+      },
+      "documentation": "An object that defines a message that contains text formatted using Amazon Pinpoint Voice Instructions markup.",
+      "required": []
+    },
+    "CloudWatchLogsDestination": {
+      "type": "structure",
+      "members": {
+        "IamRoleArn": {
+          "shape": "String",
+          "documentation": "The Amazon Resource Name (ARN) of an Amazon Identity and Access Management (IAM) role that is able to write event data to an Amazon CloudWatch destination."
+        },
+        "LogGroupArn": {
+          "shape": "String",
+          "documentation": "The name of the Amazon CloudWatch Log Group that you want to record events in."
+        }
+      },
+      "documentation": "An object that contains information about an event destination that sends data to Amazon CloudWatch Logs.",
+      "required": []
+    },
+    "ConfigurationSets": {
+      "type": "list",
+      "documentation": "An array that contains all of the configuration sets in your Amazon Pinpoint account in the current AWS Region.",
+      "member": {
+        "shape": "WordCharactersWithDelimiters"
+      }
     },
-    "EventDestination" : {
-      "type" : "structure",
-      "members" : {
-        "CloudWatchLogsDestination" : {
-          "shape" : "CloudWatchLogsDestination"
-        },
-        "Enabled" : {
-          "shape" : "Boolean",
-          "documentation" : "Indicates whether or not the event destination is enabled. If the event destination is enabled, then Amazon Pinpoint sends response data to the specified event destination."
-        },
-        "KinesisFirehoseDestination" : {
-          "shape" : "KinesisFirehoseDestination"
-        },
-        "MatchingEventTypes" : {
-          "shape" : "EventTypes"
-        },
-        "Name" : {
-          "shape" : "String",
-          "documentation" : "A name that identifies the event destination configuration."
-        },
-        "SnsDestination" : {
-          "shape" : "SnsDestination"
-        }
-      },
-      "documentation" : "An object that defines an event destination."
+    "CreateConfigurationSetEventDestinationRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConfigurationSetName",
+          "documentation": "ConfigurationSetName"
+        },
+        "EventDestination": {
+          "shape": "EventDestinationDefinition"
+        },
+        "EventDestinationName": {
+          "shape": "NonEmptyString",
+          "documentation": "A name that identifies the event destination."
+        }
+      },
+      "documentation": "Create a new event destination in a configuration set.",
+      "required": [
+        "ConfigurationSetName"
+      ]
+    },
+    "CreateConfigurationSetEventDestinationResponse": {
+      "type": "structure",
+      "members": {},
+      "documentation": "An empty object that indicates that the event destination was created successfully."
+    },
+    "CreateConfigurationSetRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "WordCharactersWithDelimiters",
+          "documentation": "The name that you want to give the configuration set."
+        }
+      },
+      "documentation": "A request to create a new configuration set."
+    },
+    "CreateConfigurationSetResponse": {
+      "type": "structure",
+      "members": {},
+      "documentation": "An empty object that indicates that the configuration set was successfully created."
+    },
+    "DeleteConfigurationSetEventDestinationRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConfigurationSetName",
+          "documentation": "ConfigurationSetName"
+        },
+        "EventDestinationName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "EventDestinationName",
+          "documentation": "EventDestinationName"
+        }
+      },
+      "required": [
+        "EventDestinationName",
+        "ConfigurationSetName"
+      ]
+    },
+    "DeleteConfigurationSetEventDestinationResponse": {
+      "type": "structure",
+      "members": {},
+      "documentation": "An empty object that indicates that the event destination was deleted successfully."
+    },
+    "DeleteConfigurationSetRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConfigurationSetName",
+          "documentation": "ConfigurationSetName"
+        }
+      },
+      "required": [
+        "ConfigurationSetName"
+      ]
+    },
+    "DeleteConfigurationSetResponse": {
+      "type": "structure",
+      "members": {},
+      "documentation": "An empty object that indicates that the configuration set was deleted successfully."
+    },
+    "EventDestination": {
+      "type": "structure",
+      "members": {
+        "CloudWatchLogsDestination": {
+          "shape": "CloudWatchLogsDestination"
+        },
+        "Enabled": {
+          "shape": "Boolean",
+          "documentation": "Indicates whether or not the event destination is enabled. If the event destination is enabled, then Amazon Pinpoint sends response data to the specified event destination."
+        },
+        "KinesisFirehoseDestination": {
+          "shape": "KinesisFirehoseDestination"
+        },
+        "MatchingEventTypes": {
+          "shape": "EventTypes"
+        },
+        "Name": {
+          "shape": "String",
+          "documentation": "A name that identifies the event destination configuration."
+        },
+        "SnsDestination": {
+          "shape": "SnsDestination"
+        }
+      },
+      "documentation": "An object that defines an event destination."
+    },
+    "EventDestinationDefinition": {
+      "type": "structure",
+      "members": {
+        "CloudWatchLogsDestination": {
+          "shape": "CloudWatchLogsDestination"
+        },
+        "Enabled": {
+          "shape": "Boolean",
+          "documentation": "Indicates whether or not the event destination is enabled. If the event destination is enabled, then Amazon Pinpoint sends response data to the specified event destination."
+        },
+        "KinesisFirehoseDestination": {
+          "shape": "KinesisFirehoseDestination"
+        },
+        "MatchingEventTypes": {
+          "shape": "EventTypes"
+        },
+        "SnsDestination": {
+          "shape": "SnsDestination"
+        }
+      },
+      "documentation": "An object that defines a single event destination.",
+      "required": []
+    },
+    "EventDestinations": {
+      "type": "list",
+      "documentation": "An array of EventDestination objects. Each EventDestination object includes ARNs and other information that define an event destination.",
+      "member": {
+        "shape": "EventDestination"
+      }
     },
-    "EventDestinationDefinition" : {
-      "type" : "structure",
-      "members" : {
-        "CloudWatchLogsDestination" : {
-          "shape" : "CloudWatchLogsDestination"
-        },
-        "Enabled" : {
-          "shape" : "Boolean",
-          "documentation" : "Indicates whether or not the event destination is enabled. If the event destination is enabled, then Amazon Pinpoint sends response data to the specified event destination."
-        },
-        "KinesisFirehoseDestination" : {
-          "shape" : "KinesisFirehoseDestination"
-        },
-        "MatchingEventTypes" : {
-          "shape" : "EventTypes"
-        },
-        "SnsDestination" : {
-          "shape" : "SnsDestination"
-        }
-      },
-      "documentation" : "An object that defines a single event destination.",
-      "required" : [ ]
+    "EventType": {
+      "type": "string",
+      "documentation": "The types of events that are sent to the event destination.",
+      "enum": [
+        "INITIATED_CALL",
+        "RINGING",
+        "ANSWERED",
+        "COMPLETED_CALL",
+        "BUSY",
+        "FAILED",
+        "NO_ANSWER"
+      ]
+    },
+    "EventTypes": {
+      "type": "list",
+      "documentation": "An array of EventDestination objects. Each EventDestination object includes ARNs and other information that define an event destination.",
+      "member": {
+        "shape": "EventType"
+      }
     },
-    "EventDestinations" : {
-      "type" : "list",
-      "documentation" : "An array of EventDestination objects. Each EventDestination object includes ARNs and other information that define an event destination.",
-      "member" : {
-        "shape" : "EventDestination"
+    "GetConfigurationSetEventDestinationsRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConfigurationSetName",
+          "documentation": "ConfigurationSetName"
+        }
+      },
+      "required": [
+        "ConfigurationSetName"
+      ]
+    },
+    "GetConfigurationSetEventDestinationsResponse": {
+      "type": "structure",
+      "members": {
+        "EventDestinations": {
+          "shape": "EventDestinations"
+        }
+      },
+      "documentation": "An object that contains information about an event destination."
+    },
+    "InternalServiceErrorException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
+        }
+      },
+      "documentation": "The API encountered an unexpected error and couldn't complete the request. You might be able to successfully issue the request again in the future.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 500
       }
     },
-    "EventType" : {
-      "type" : "string",
-      "documentation" : "The types of events that are sent to the event destination.",
-      "enum" : [ "INITIATED_CALL", "RINGING", "ANSWERED", "COMPLETED_CALL", "BUSY", "FAILED", "NO_ANSWER" ]
-    },
-    "EventTypes" : {
-      "type" : "list",
-      "documentation" : "An array of EventDestination objects. Each EventDestination object includes ARNs and other information that define an event destination.",
-      "member" : {
-        "shape" : "EventType"
+    "KinesisFirehoseDestination": {
+      "type": "structure",
+      "members": {
+        "DeliveryStreamArn": {
+          "shape": "String",
+          "documentation": "The Amazon Resource Name (ARN) of an IAM role that can write data to an Amazon Kinesis Data Firehose stream."
+        },
+        "IamRoleArn": {
+          "shape": "String",
+          "documentation": "The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose destination that you want to use in the event destination."
+        }
+      },
+      "documentation": "An object that contains information about an event destination that sends data to Amazon Kinesis Data Firehose.",
+      "required": []
+    },
+    "LimitExceededException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
+        }
+      },
+      "documentation": "There are too many instances of the specified resource type.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 412
       }
     },
-    "GetConfigurationSetEventDestinationsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConfigurationSetName",
-          "documentation" : "ConfigurationSetName"
-        }
-      },
-      "required" : [ "ConfigurationSetName" ]
-    },
-    "GetConfigurationSetEventDestinationsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "EventDestinations" : {
-          "shape" : "EventDestinations"
-        }
-      },
-      "documentation" : "An object that contains information about an event destination."
-    },
-    "InternalServiceErrorException" : {
-      "type" : "structure",
-      "members" : {
-        "Message" : {
-          "shape" : "String"
-        }
-      },
-      "documentation" : "The API encountered an unexpected error and couldn't complete the request. You might be able to successfully issue the request again in the future.",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 500
+    "ListConfigurationSetsRequest": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "NextToken",
+          "documentation": "A token returned from a previous call to the API that indicates the position in the list of results."
+        },
+        "PageSize": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "PageSize",
+          "documentation": "Used to specify the number of items that should be returned in the response."
+        }
       }
     },
-    "KinesisFirehoseDestination" : {
-      "type" : "structure",
-      "members" : {
-        "DeliveryStreamArn" : {
-          "shape" : "String",
-          "documentation" : "The Amazon Resource Name (ARN) of an IAM role that can write data to an Amazon Kinesis Data Firehose stream."
-        },
-        "IamRoleArn" : {
-          "shape" : "String",
-          "documentation" : "The Amazon Resource Name (ARN) of the Amazon Kinesis Data Firehose destination that you want to use in the event destination."
-        }
-      },
-      "documentation" : "An object that contains information about an event destination that sends data to Amazon Kinesis Data Firehose.",
-      "required" : [ ]
-    },
-    "LimitExceededException" : {
-      "type" : "structure",
-      "documentation" : "There are too many instances of the specified resource type.",
-      "exception" : true,
-      "members" : {
-        "Message" : {
-          "shape" : "String"
+    "ListConfigurationSetsResponse": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSets": {
+          "shape": "ConfigurationSets",
+          "documentation": "An object that contains a list of configuration sets for your account in the current region."
+        },
+        "NextToken": {
+          "shape": "NextTokenString",
+          "documentation": "A token returned from a previous call to ListConfigurationSets to indicate the position in the list of configuration sets."
         }
       },
-      "error" : {
-        "httpStatusCode" : 412
-      }
+      "documentation": "An object that contains information about the configuration sets for your account in the current region."
+    },
+    "NextTokenString": {
+      "type": "string"
     },
-    "NonEmptyString" : {
-      "type" : "string"
+    "NonEmptyString": {
+      "type": "string"
     },
-    "NotFoundException" : {
-      "type" : "structure",
-      "documentation" : "The resource you attempted to access doesn't exist.",
-      "exception" : true,
-      "members" : {
-        "Message" : {
-          "shape" : "String"
+    "NotFoundException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
         }
       },
-      "error" : {
-        "httpStatusCode" : 404
+      "documentation": "The resource you attempted to access doesn't exist.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 404
       }
     },
-    "PlainTextMessageType" : {
-      "type" : "structure",
-      "members" : {
-        "LanguageCode" : {
-          "shape" : "String",
-          "documentation" : "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
+    "PlainTextMessageType": {
+      "type": "structure",
+      "members": {
+        "LanguageCode": {
+          "shape": "String",
+          "documentation": "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
         },
-        "Text" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "The plain (not SSML-formatted) text to deliver to the recipient."
+        "Text": {
+          "shape": "NonEmptyString",
+          "documentation": "The plain (not SSML-formatted) text to deliver to the recipient."
         },
-        "VoiceId" : {
-          "shape" : "String",
-          "documentation" : "The name of the voice that you want to use to deliver the message. For a complete list of supported voices, see the Amazon Polly Developer Guide."
+        "VoiceId": {
+          "shape": "String",
+          "documentation": "The name of the voice that you want to use to deliver the message. For a complete list of supported voices, see the Amazon Polly Developer Guide."
         }
       },
-      "documentation" : "An object that defines a message that contains unformatted text.",
-      "required" : [ ]
+      "documentation": "An object that defines a message that contains unformatted text.",
+      "required": []
     },
-    "SSMLMessageType" : {
-      "type" : "structure",
-      "members" : {
-        "LanguageCode" : {
-          "shape" : "String",
-          "documentation" : "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
+    "SSMLMessageType": {
+      "type": "structure",
+      "members": {
+        "LanguageCode": {
+          "shape": "String",
+          "documentation": "The language to use when delivering the message. For a complete list of supported languages, see the Amazon Polly Developer Guide."
         },
-        "Text" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "The SSML-formatted text to deliver to the recipient."
+        "Text": {
+          "shape": "NonEmptyString",
+          "documentation": "The SSML-formatted text to deliver to the recipient."
         },
-        "VoiceId" : {
-          "shape" : "String",
-          "documentation" : "The name of the voice that you want to use to deliver the message. For a complete list of supported voices, see the Amazon Polly Developer Guide."
+        "VoiceId": {
+          "shape": "String",
+          "documentation": "The name of the voice that you want to use to deliver the message. For a complete list of supported voices, see the Amazon Polly Developer Guide."
         }
       },
-      "documentation" : "An object that defines a message that contains SSML-formatted text.",
-      "required" : [ ]
+      "documentation": "An object that defines a message that contains SSML-formatted text.",
+      "required": []
     },
-    "SendVoiceMessageRequest" : {
-      "type" : "structure",
-      "members" : {
-        "CallerId" : {
-          "shape" : "String",
-          "documentation" : "The phone number that appears on recipients' devices when they receive the message."
+    "SendVoiceMessageRequest": {
+      "type": "structure",
+      "members": {
+        "CallerId": {
+          "shape": "String",
+          "documentation": "The phone number that appears on recipients' devices when they receive the message."
         },
-        "ConfigurationSetName" : {
-          "shape" : "WordCharactersWithDelimiters",
-          "documentation" : "The name of the configuration set that you want to use to send the message."
+        "ConfigurationSetName": {
+          "shape": "WordCharactersWithDelimiters",
+          "documentation": "The name of the configuration set that you want to use to send the message."
         },
-        "Content" : {
-          "shape" : "VoiceMessageContent"
+        "Content": {
+          "shape": "VoiceMessageContent"
         },
-        "DestinationPhoneNumber" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "The phone number that you want to send the voice message to."
+        "DestinationPhoneNumber": {
+          "shape": "NonEmptyString",
+          "documentation": "The phone number that you want to send the voice message to."
         },
-        "OriginationPhoneNumber" : {
-          "shape" : "NonEmptyString",
-          "documentation" : "The phone number that Amazon Pinpoint should use to send the voice message. This isn't necessarily the phone number that appears on recipients' devices when they receive the message, because you can specify a CallerId parameter in the request."
+        "OriginationPhoneNumber": {
+          "shape": "NonEmptyString",
+          "documentation": "The phone number that Amazon Pinpoint should use to send the voice message. This isn't necessarily the phone number that appears on recipients' devices when they receive the message, because you can specify a CallerId parameter in the request."
         }
       },
-      "documentation" : "SendVoiceMessageRequest"
+      "documentation": "SendVoiceMessageRequest"
     },
-    "SendVoiceMessageResponse" : {
-      "type" : "structure",
-      "members" : {
-        "MessageId" : {
-          "shape" : "String",
-          "documentation" : "A unique identifier for the voice message."
+    "SendVoiceMessageResponse": {
+      "type": "structure",
+      "members": {
+        "MessageId": {
+          "shape": "String",
+          "documentation": "A unique identifier for the voice message."
         }
       },
-      "documentation" : "An object that that contains the Message ID of a Voice message that was sent successfully."
+      "documentation": "An object that that contains the Message ID of a Voice message that was sent successfully."
     },
-    "SnsDestination" : {
-      "type" : "structure",
-      "members" : {
-        "TopicArn" : {
-          "shape" : "String",
-          "documentation" : "The Amazon Resource Name (ARN) of the Amazon SNS topic that you want to publish events to."
+    "SnsDestination": {
+      "type": "structure",
+      "members": {
+        "TopicArn": {
+          "shape": "String",
+          "documentation": "The Amazon Resource Name (ARN) of the Amazon SNS topic that you want to publish events to."
         }
       },
-      "documentation" : "An object that contains information about an event destination that sends data to Amazon SNS.",
-      "required" : [ ]
+      "documentation": "An object that contains information about an event destination that sends data to Amazon SNS.",
+      "required": []
     },
-    "String" : {
-      "type" : "string"
+    "String": {
+      "type": "string"
     },
-    "TooManyRequestsException" : {
-      "type" : "structure",
-      "documentation" : "You've issued too many requests to the resource. Wait a few minutes, and then try again.",
-      "exception" : true,
-      "members" : {
-        "Message" : {
-          "shape" : "String"
+    "TooManyRequestsException": {
+      "type": "structure",
+      "members": {
+        "Message": {
+          "shape": "String"
         }
       },
-      "error" : {
-        "httpStatusCode" : 429
+      "documentation": "You've issued too many requests to the resource. Wait a few minutes, and then try again.",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 429
       }
     },
-    "UpdateConfigurationSetEventDestinationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ConfigurationSetName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "ConfigurationSetName",
-          "documentation" : "ConfigurationSetName"
+    "UpdateConfigurationSetEventDestinationRequest": {
+      "type": "structure",
+      "members": {
+        "ConfigurationSetName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "ConfigurationSetName",
+          "documentation": "ConfigurationSetName"
         },
-        "EventDestination" : {
-          "shape" : "EventDestinationDefinition"
+        "EventDestination": {
+          "shape": "EventDestinationDefinition"
         },
-        "EventDestinationName" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "EventDestinationName",
-          "documentation" : "EventDestinationName"
+        "EventDestinationName": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "EventDestinationName",
+          "documentation": "EventDestinationName"
         }
       },
-      "documentation" : "UpdateConfigurationSetEventDestinationRequest",
-      "required" : [ "EventDestinationName", "ConfigurationSetName" ]
+      "documentation": "UpdateConfigurationSetEventDestinationRequest",
+      "required": [
+        "EventDestinationName",
+        "ConfigurationSetName"
+      ]
     },
-    "UpdateConfigurationSetEventDestinationResponse" : {
-      "type" : "structure",
-      "members" : { },
-      "documentation" : "An empty object that indicates that the event destination was updated successfully."
+    "UpdateConfigurationSetEventDestinationResponse": {
+      "type": "structure",
+      "members": {},
+      "documentation": "An empty object that indicates that the event destination was updated successfully."
     },
-    "VoiceMessageContent" : {
-      "type" : "structure",
-      "members" : {
-        "CallInstructionsMessage" : {
-          "shape" : "CallInstructionsMessageType"
+    "VoiceMessageContent": {
+      "type": "structure",
+      "members": {
+        "CallInstructionsMessage": {
+          "shape": "CallInstructionsMessageType"
         },
-        "PlainTextMessage" : {
-          "shape" : "PlainTextMessageType"
+        "PlainTextMessage": {
+          "shape": "PlainTextMessageType"
         },
-        "SSMLMessage" : {
-          "shape" : "SSMLMessageType"
+        "SSMLMessage": {
+          "shape": "SSMLMessageType"
         }
       },
-      "documentation" : "An object that contains a voice message and information about the recipient that you want to send it to."
+      "documentation": "An object that contains a voice message and information about the recipient that you want to send it to."
     },
-    "WordCharactersWithDelimiters" : {
-      "type" : "string"
+    "WordCharactersWithDelimiters": {
+      "type": "string"
     },
-    "__boolean" : {
-      "type" : "boolean"
+    "__boolean": {
+      "type": "boolean"
     },
-    "__double" : {
-      "type" : "double"
+    "__double": {
+      "type": "double"
     },
-    "__integer" : {
-      "type" : "integer"
+    "__integer": {
+      "type": "integer"
     },
-    "__long" : {
-      "type" : "long"
+    "__long": {
+      "type": "long"
     },
-    "__string" : {
-      "type" : "string"
+    "__string": {
+      "type": "string"
     },
-    "__timestampIso8601" : {
-      "type" : "timestamp",
-      "timestampFormat" : "iso8601"
+    "__timestampIso8601": {
+      "type": "timestamp",
+      "timestampFormat": "iso8601"
     },
-    "__timestampUnix" : {
-      "type" : "timestamp",
-      "timestampFormat" : "unixTimestamp"
+    "__timestampUnix": {
+      "type": "timestamp",
+      "timestampFormat": "unixTimestamp"
     }
   },
-  "documentation" : "Pinpoint SMS and Voice Messaging public facing APIs"
+  "documentation": "Pinpoint SMS and Voice Messaging public facing APIs"
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pinpoint-sms-voice-v2/2022-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -46,12 +46,29 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Associate a protect configuration with a configuration set. This replaces the configuration sets current protect configuration. A configuration set can only be associated with one protect configuration at a time. A protect configuration can be associated with multiple configuration sets.</p>"
     },
+    "CarrierLookup":{
+      "name":"CarrierLookup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CarrierLookupRequest"},
+      "output":{"shape":"CarrierLookupResult"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns information about a destination phone number, including whether the number type and whether it is valid, the carrier, and more.</p>"
+    },
     "CreateConfigurationSet":{
       "name":"CreateConfigurationSet",
       "http":{
@@ -87,7 +104,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates a new event destination in a configuration set.</p> <p>An event destination is a location where you send message events. The event options are Amazon CloudWatch, Amazon Data Firehose, or Amazon SNS. For example, when a message is delivered successfully, you can send information about that event to an event destination, or send notifications to endpoints that are subscribed to an Amazon SNS topic.</p> <p>Each configuration set can contain between 0 and 5 event destinations. Each event destination can contain a reference to a single destination, such as a CloudWatch or Firehose destination.</p>"
+      "documentation":"<p>Creates a new event destination in a configuration set.</p> <p>An event destination is a location where you send message events. The event options are Amazon CloudWatch, Amazon Data Firehose, or Amazon SNS. For example, when a message is delivered successfully, you can send information about that event to an event destination, or send notifications to endpoints that are subscribed to an Amazon SNS topic. </p> <p>You can only create one event destination at a time. You must provide a value for a single event destination using either <code>CloudWatchLogsDestination</code>, <code>KinesisFirehoseDestination</code> or <code>SnsDestination</code>. If an event destination isn't provided then an exception is returned.</p> <p>Each configuration set can contain between 0 and 5 event destinations. Each event destination can contain a reference to a single destination, such as a CloudWatch or Firehose destination.</p>"
     },
     "CreateOptOutList":{
       "name":"CreateOptOutList",
@@ -105,7 +122,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates a new opt-out list.</p> <p>If the opt-out list name already exists, an error is returned.</p> <p>An opt-out list is a list of phone numbers that are opted out, meaning you can't send SMS or voice messages to them. If end user replies with the keyword \"STOP,\" an entry for the phone number is added to the opt-out list. In addition to STOP, your recipients can use any supported opt-out keyword, such as CANCEL or OPTOUT. For a list of supported opt-out keywords, see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-manage.html#channels-sms-manage-optout\"> SMS opt out </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Creates a new opt-out list.</p> <p>If the opt-out list name already exists, an error is returned.</p> <p>An opt-out list is a list of phone numbers that are opted out, meaning you can't send SMS or voice messages to them. If end user replies with the keyword \"STOP,\" an entry for the phone number is added to the opt-out list. In addition to STOP, your recipients can use any supported opt-out keyword, such as CANCEL or OPTOUT. For a list of supported opt-out keywords, see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-manage.html#channels-sms-manage-optout\"> SMS opt out </a> in the End User MessagingSMS User Guide.</p>"
     },
     "CreatePool":{
       "name":"CreatePool",
@@ -139,6 +156,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create a new protect configuration. By default all country rule sets for each capability are set to <code>ALLOW</code>. Update the country rule sets using <code>UpdateProtectConfigurationCountryRuleSet</code>. A protect configurations name is stored as a Tag with the key set to <code>Name</code> and value as the name of the protect configuration.</p>"
@@ -336,7 +354,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes an existing keyword from an origination phone number or pool.</p> <p>A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, AWS End User Messaging SMS and Voice responds with a customizable message.</p> <p>Keywords \"HELP\" and \"STOP\" can't be deleted or modified.</p>"
+      "documentation":"<p>Deletes an existing keyword from an origination phone number or pool.</p> <p>A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, End User MessagingSMS responds with a customizable message.</p> <p>Keywords \"HELP\" and \"STOP\" can't be deleted or modified.</p>"
     },
     "DeleteMediaMessageSpendLimitOverride":{
       "name":"DeleteMediaMessageSpendLimitOverride",
@@ -420,8 +438,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Permanently delete the protect configuration. The protect configuration must have deletion protection disabled and must not be associated as the account default protect configuration or associated with a configuration set.</p>"
@@ -512,7 +530,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes the resource-based policy document attached to the AWS End User Messaging SMS and Voice resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number.</p>"
+      "documentation":"<p>Deletes the resource-based policy document attached to the End User MessagingSMS resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number.</p>"
     },
     "DeleteTextMessageSpendLimitOverride":{
       "name":"DeleteTextMessageSpendLimitOverride",
@@ -528,7 +546,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes an account-level monthly spending limit override for sending text messages. Deleting a spend limit override will set the <code>EnforcedLimit</code> to equal the <code>MaxLimit</code>, which is controlled by Amazon Web Services. For more information on spend limits (quotas) see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Deletes an account-level monthly spending limit override for sending text messages. Deleting a spend limit override will set the <code>EnforcedLimit</code> to equal the <code>MaxLimit</code>, which is controlled by Amazon Web Services. For more information on spend limits (quotas) see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "DeleteVerifiedDestinationNumber":{
       "name":"DeleteVerifiedDestinationNumber",
@@ -562,7 +580,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes an account level monthly spend limit override for sending voice messages. Deleting a spend limit override sets the <code>EnforcedLimit</code> equal to the <code>MaxLimit</code>, which is controlled by Amazon Web Services. For more information on spending limits (quotas) see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Deletes an account level monthly spend limit override for sending voice messages. Deleting a spend limit override sets the <code>EnforcedLimit</code> equal to the <code>MaxLimit</code>, which is controlled by Amazon Web Services. For more information on spending limits (quotas) see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "DescribeAccountAttributes":{
       "name":"DescribeAccountAttributes",
@@ -594,7 +612,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes the current AWS End User Messaging SMS and Voice SMS Voice V2 resource quotas for your account. The description for a quota includes the quota name, current usage toward that quota, and the quota's maximum value.</p> <p>When you establish an Amazon Web Services account, the account has initial quotas on the maximum number of configuration sets, opt-out lists, phone numbers, and pools that you can create in a given Region. For more information see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Describes the current End User MessagingSMS SMS Voice V2 resource quotas for your account. The description for a quota includes the quota name, current usage toward that quota, and the quota's maximum value.</p> <p>When you establish an Amazon Web Services account, the account has initial quotas on the maximum number of configuration sets, opt-out lists, phone numbers, and pools that you can create in a given Region. For more information see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/quotas.html\">Quotas </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "DescribeConfigurationSets":{
       "name":"DescribeConfigurationSets",
@@ -628,7 +646,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes the specified keywords or all keywords on your origination phone number or pool.</p> <p>A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, AWS End User Messaging SMS and Voice responds with a customizable message.</p> <p>If you specify a keyword that isn't valid, an error is returned.</p>"
+      "documentation":"<p>Describes the specified keywords or all keywords on your origination phone number or pool.</p> <p>A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, End User MessagingSMS responds with a customizable message.</p> <p>If you specify a keyword that isn't valid, an error is returned.</p>"
     },
     "DescribeOptOutLists":{
       "name":"DescribeOptOutLists",
@@ -862,7 +880,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes the current monthly spend limits for sending voice and text messages.</p> <p>When you establish an Amazon Web Services account, the account has initial monthly spend limit in a given Region. For more information on increasing your monthly spend limit, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html\"> Requesting increases to your monthly SMS, MMS, or Voice spending quota </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Describes the current monthly spend limits for sending voice and text messages.</p> <p>When you establish an Amazon Web Services account, the account has initial monthly spend limit in a given Region. For more information on increasing your monthly spend limit, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html\"> Requesting increases to your monthly SMS, MMS, or Voice spending quota </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "DescribeVerifiedDestinationNumbers":{
       "name":"DescribeVerifiedDestinationNumbers",
@@ -911,8 +929,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Disassociate a protect configuration from a configuration set.</p>"
@@ -967,7 +985,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves the JSON text of the resource-based policy document attached to the AWS End User Messaging SMS and Voice resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number.</p>"
+      "documentation":"<p>Retrieves the JSON text of the resource-based policy document attached to the End User MessagingSMS resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number.</p>"
     },
     "ListPoolOriginationIdentities":{
       "name":"ListPoolOriginationIdentities",
@@ -1054,7 +1072,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates or updates a keyword configuration on an origination phone number or pool.</p> <p> A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, AWS End User Messaging SMS and Voice responds with a customizable message.</p> <p>If you specify a keyword that isn't valid, an error is returned.</p>"
+      "documentation":"<p>Creates or updates a keyword configuration on an origination phone number or pool.</p> <p> A keyword is a word that you can search for on a particular phone number or pool. It is also a specific word or phrase that an end user can send to your number to elicit a response, such as an informational message or a special offer. When your number receives a message that begins with a keyword, End User MessagingSMS responds with a customizable message.</p> <p>If you specify a keyword that isn't valid, an error is returned.</p>"
     },
     "PutMessageFeedback":{
       "name":"PutMessageFeedback",
@@ -1106,7 +1124,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Create or update a RuleSetNumberOverride and associate it with a protect configuration.</p>"
+      "documentation":"<p>Create or update a phone number rule override and associate it with a protect configuration.</p>"
     },
     "PutRegistrationFieldValue":{
       "name":"PutRegistrationFieldValue",
@@ -1141,7 +1159,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Attaches a resource-based policy to a AWS End User Messaging SMS and Voice resource(phone number, sender Id, phone poll, or opt-out list) that is used for sharing the resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number. For more information about resource-based policies, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/shared-resources.html\">Working with shared resources</a> in the <i>AWS End User Messaging SMS User Guide</i>. </p>"
+      "documentation":"<p>Attaches a resource-based policy to a End User MessagingSMS resource(phone number, sender Id, phone poll, or opt-out list) that is used for sharing the resource. A shared resource can be a Pool, Opt-out list, Sender Id, or Phone number. For more information about resource-based policies, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/shared-resources.html\">Working with shared resources</a> in the <i>End User MessagingSMS User Guide</i>. </p>"
     },
     "ReleasePhoneNumber":{
       "name":"ReleasePhoneNumber",
@@ -1196,7 +1214,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Request an origination phone number for use in your account. For more information on phone number request see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request.html\">Request a phone number</a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Request an origination phone number for use in your account. For more information on phone number request see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request.html\">Request a phone number</a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "RequestSenderId":{
       "name":"RequestSenderId",
@@ -1271,7 +1289,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates a new text message and sends it to a recipient's phone number. SendTextMessage only sends an SMS message to one recipient each time it is invoked.</p> <p>SMS throughput limits are measured in Message Parts per Second (MPS). Your MPS limit depends on the destination country of your messages, as well as the type of phone number (origination number) that you use to send the message. For more information about MPS, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations-mps.html\">Message Parts per Second (MPS) limits</a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Creates a new text message and sends it to a recipient's phone number. SendTextMessage only sends an SMS message to one recipient each time it is invoked.</p> <p>SMS throughput limits are measured in Message Parts per Second (MPS). Your MPS limit depends on the destination country of your messages, as well as the type of phone number (origination number) that you use to send the message. For more information about MPS, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations-mps.html\">Message Parts per Second (MPS) limits</a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "SendVoiceMessage":{
       "name":"SendVoiceMessage",
@@ -1442,7 +1460,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Adds or overwrites only the specified tags for the specified resource. When you specify an existing tag key, the value is overwritten with the new value. Each resource can have a maximum of 50 tags. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-tags.html\">Tags </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Adds or overwrites only the specified tags for the specified resource. When you specify an existing tag key, the value is overwritten with the new value. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-tags.html\">Tags </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -1459,7 +1477,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Removes the association of the specified tags from a resource. For more information on tags see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-tags.html\">Tags </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p>Removes the association of the specified tags from a resource. For more information on tags see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-tags.html\">Tags </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "UpdateEventDestination":{
       "name":"UpdateEventDestination",
@@ -1547,7 +1565,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a country rule set to <code>ALLOW</code> or <code>BLOCK</code> messages to be sent to the specified destination counties. You can update one or multiple countries at a time. The updates are only applied to the specified NumberCapability type.</p>"
+      "documentation":"<p>Update a country rule set to <code>ALLOW</code>, <code>BLOCK</code>, <code>MONITOR</code>, or <code>FILTER</code> messages to be sent to the specified destination counties. You can update one or multiple countries at a time. The updates are only applied to the specified NumberCapability type.</p>"
     },
     "UpdateSenderId":{
       "name":"UpdateSenderId",
@@ -1690,11 +1708,11 @@
       "members":{
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The pool to update with the new Identity. This value can be either the PoolId or PoolArn, and you can find these values using <a>DescribePools</a>.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The pool to update with the new Identity. This value can be either the PoolId or PoolArn, and you can find these values using <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_DescribePools.html\">DescribePools</a>.</p> <important> <p>If you are using a shared End User MessagingSMS; resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "OriginationIdentity":{
           "shape":"PhoneOrSenderIdOrArn",
-          "documentation":"<p>The origination identity to use, such as PhoneNumberId, PhoneNumberArn, SenderId, or SenderIdArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn, while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use, such as PhoneNumberId, PhoneNumberArn, SenderId, or SenderIdArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn, while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "IsoCountryCode":{
           "shape":"IsoCountryCode",
@@ -1804,6 +1822,63 @@
       "type":"boolean",
       "box":true
     },
+    "CarrierLookupInputPhoneNumberType":{
+      "type":"string",
+      "max":40,
+      "min":1,
+      "pattern":"\\+[({\\s\\[]?[1-9][0-9(){}\\s\\[\\],.-]{1,38}"
+    },
+    "CarrierLookupRequest":{
+      "type":"structure",
+      "required":["PhoneNumber"],
+      "members":{
+        "PhoneNumber":{
+          "shape":"CarrierLookupInputPhoneNumberType",
+          "documentation":"<p>The phone number that you want to retrieve information about. You can provide the phone number in various formats including special characters such as parentheses, brackets, spaces, hyphens, periods, and commas. The service automatically converts the input to E164 format for processing.</p>"
+        }
+      }
+    },
+    "CarrierLookupResult":{
+      "type":"structure",
+      "required":[
+        "E164PhoneNumber",
+        "PhoneNumberType"
+      ],
+      "members":{
+        "E164PhoneNumber":{
+          "shape":"E164PhoneNumberType",
+          "documentation":"<p>The phone number in E164 format, sanitized from the original input by removing any formatting characters.</p>"
+        },
+        "DialingCountryCode":{
+          "shape":"DialingCountryCodeType",
+          "documentation":"<p>The numeric dialing code for the country or region where the phone number was originally registered.</p>"
+        },
+        "IsoCountryCode":{
+          "shape":"IsoCountryCode",
+          "documentation":"<p>The two-character code, in ISO 3166-1 alpha-2 format, for the country or region where the phone number was originally registered.</p>"
+        },
+        "Country":{
+          "shape":"String",
+          "documentation":"<p>The name of the country where the phone number was originally registered.</p>"
+        },
+        "MCC":{
+          "shape":"MCCType",
+          "documentation":"<p>The phone number's mobile country code, for mobile phone number types</p>"
+        },
+        "MNC":{
+          "shape":"MNCType",
+          "documentation":"<p>The phone number's mobile network code, for mobile phone number types.</p>"
+        },
+        "Carrier":{
+          "shape":"String",
+          "documentation":"<p>The carrier or service provider that the phone number is currently registered with. In some countries and regions, this value may be the carrier or service provider that the phone number was originally registered with.</p>"
+        },
+        "PhoneNumberType":{
+          "shape":"PhoneNumberType",
+          "documentation":"<p>Describes the type of phone number. Valid values are: MOBILE, LANDLINE, OTHER, and INVALID. Avoid sending SMS or voice messages to INVALID phone numbers, as these numbers are unlikely to belong to actual recipients.</p>"
+        }
+      }
+    },
     "ClientToken":{
       "type":"string",
       "max":64,
@@ -2067,7 +2142,7 @@
         },
         "MatchingEventTypes":{
           "shape":"EventTypeList",
-          "documentation":"<p>An array of event types that determine which events to log. If \"ALL\" is used, then AWS End User Messaging SMS and Voice logs every event type.</p> <note> <p>The <code>TEXT_SENT</code> event type is not supported.</p> </note>"
+          "documentation":"<p>An array of event types that determine which events to log. If \"ALL\" is used, then End User MessagingSMS logs every event type.</p> <note> <p>The <code>TEXT_SENT</code> event type is not supported.</p> </note>"
         },
         "CloudWatchLogsDestination":{
           "shape":"CloudWatchLogsDestination",
@@ -2155,7 +2230,7 @@
       "members":{
         "OriginationIdentity":{
           "shape":"PhoneOrSenderIdOrArn",
-          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <p>After the pool is created you can add more origination identities to the pool by using <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_AssociateOriginationIdentity.html\">AssociateOriginationIdentity</a>.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_DescribePhoneNumbers.html\">DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn, and use <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_DescribeSenderIds.html\">DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <p>After the pool is created you can add more origination identities to the pool by using <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_AssociateOriginationIdentity.html\">AssociateOriginationIdentity</a>.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "IsoCountryCode":{
           "shape":"IsoCountryCode",
@@ -2167,7 +2242,7 @@
         },
         "DeletionProtectionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>By default this is set to false. When set to true the pool can't be deleted. You can change this value using the <a>UpdatePool</a> action.</p>"
+          "documentation":"<p>By default this is set to false. When set to true the pool can't be deleted. You can change this value using the <a href=\"https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_UpdatePool.html\">UpdatePool</a> action.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -2213,7 +2288,7 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false, and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
@@ -2569,8 +2644,7 @@
     },
     "DeleteAccountDefaultProtectConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAccountDefaultProtectConfigurationResult":{
       "type":"structure",
@@ -2729,7 +2803,7 @@
       "members":{
         "OriginationIdentity":{
           "shape":"PhoneOrPoolIdOrArn",
-          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, PoolId or PoolArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn and <a>DescribePools</a> to find the values of PoolId and PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, PoolId or PoolArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn and <a>DescribePools</a> to find the values of PoolId and PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Keyword":{
           "shape":"Keyword",
@@ -2764,8 +2838,7 @@
     },
     "DeleteMediaMessageSpendLimitOverrideRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMediaMessageSpendLimitOverrideResult":{
       "type":"structure",
@@ -2782,7 +2855,7 @@
       "members":{
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutListName or OptOutListArn of the OptOutList to delete. You can use <a>DescribeOptOutLists</a> to find the values for OptOutListName and OptOutListArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutListName or OptOutListArn of the OptOutList to delete. You can use <a>DescribeOptOutLists</a> to find the values for OptOutListName and OptOutListArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         }
       }
     },
@@ -2812,7 +2885,7 @@
       "members":{
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutListName or OptOutListArn to remove the phone number from.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutListName or OptOutListArn to remove the phone number from.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "OptedOutNumber":{
           "shape":"PhoneNumber",
@@ -2851,7 +2924,7 @@
       "members":{
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The PoolId or PoolArn of the pool to delete. You can use <a>DescribePools</a> to find the values for PoolId and PoolArn .</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The PoolId or PoolArn of the pool to delete. You can use <a>DescribePools</a> to find the values for PoolId and PoolArn .</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         }
       }
     },
@@ -2888,7 +2961,7 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
@@ -3165,7 +3238,7 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource you're deleting the resource-based policy from.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource you're deleting the resource-based policy from.</p>"
         }
       }
     },
@@ -3174,7 +3247,7 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource that the resource-based policy was deleted from.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource that the resource-based policy was deleted from.</p>"
         },
         "Policy":{
           "shape":"ResourcePolicy",
@@ -3188,8 +3261,7 @@
     },
     "DeleteTextMessageSpendLimitOverrideRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTextMessageSpendLimitOverrideResult":{
       "type":"structure",
@@ -3239,8 +3311,7 @@
     },
     "DeleteVoiceMessageSpendLimitOverrideRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVoiceMessageSpendLimitOverrideResult":{
       "type":"structure",
@@ -3349,7 +3420,7 @@
       "members":{
         "OriginationIdentity":{
           "shape":"PhoneOrPoolIdOrArn",
-          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> to find the values for PhoneNumberId and PhoneNumberArn while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Keywords":{
           "shape":"KeywordList",
@@ -3395,7 +3466,7 @@
       "members":{
         "OptOutListNames":{
           "shape":"OptOutListNameList",
-          "documentation":"<p>The OptOutLists to show the details of. This is an array of strings that can be either the OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutLists to show the details of. This is an array of strings that can be either the OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -3430,7 +3501,7 @@
       "members":{
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutListName or OptOutListArn of the OptOutList. You can use <a>DescribeOptOutLists</a> to find the values for OptOutListName and OptOutListArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutListName or OptOutListArn of the OptOutList. You can use <a>DescribeOptOutLists</a> to find the values for OptOutListName and OptOutListArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "OptedOutNumbers":{
           "shape":"OptedOutNumberList",
@@ -3476,7 +3547,7 @@
       "members":{
         "PhoneNumberIds":{
           "shape":"PhoneNumberIdList",
-          "documentation":"<p>The unique identifier of phone numbers to find information about. This is an array of strings that can be either the PhoneNumberId or PhoneNumberArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier of phone numbers to find information about. This is an array of strings that can be either the PhoneNumberId or PhoneNumberArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Filters":{
           "shape":"PhoneNumberFilterList",
@@ -3514,7 +3585,7 @@
       "members":{
         "PoolIds":{
           "shape":"PoolIdList",
-          "documentation":"<p>The unique identifier of pools to find. This is an array of strings that can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier of pools to find. This is an array of strings that can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Filters":{
           "shape":"PoolFilterList",
@@ -3894,7 +3965,7 @@
       "members":{
         "SenderIds":{
           "shape":"SenderIdList",
-          "documentation":"<p>An array of SenderIdAndCountry objects to search for.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>An array of SenderIdAndCountry objects to search for.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Filters":{
           "shape":"SenderIdFilterList",
@@ -4018,6 +4089,12 @@
       "max":5,
       "min":0
     },
+    "DialingCountryCodeType":{
+      "type":"string",
+      "max":3,
+      "min":1,
+      "pattern":"[\\d]+"
+    },
     "DisassociateOriginationIdentityRequest":{
       "type":"structure",
       "required":[
@@ -4028,11 +4105,11 @@
       "members":{
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The unique identifier for the pool to disassociate with the origination identity. This value can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier for the pool to disassociate with the origination identity. This value can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "OriginationIdentity":{
           "shape":"PhoneOrSenderIdOrArn",
-          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> find the values for PhoneNumberId and PhoneNumberArn, or use <a>DescribeSenderIds</a> to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> find the values for PhoneNumberId and PhoneNumberArn, or use <a>DescribeSenderIds</a> to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "IsoCountryCode":{
           "shape":"IsoCountryCode",
@@ -4156,6 +4233,12 @@
         }
       }
     },
+    "E164PhoneNumberType":{
+      "type":"string",
+      "max":20,
+      "min":1,
+      "pattern":"\\+[1-9][0-9]{1,18}"
+    },
     "EventDestination":{
       "type":"structure",
       "required":[
@@ -4335,7 +4418,7 @@
         },
         "CountryRuleSet":{
           "shape":"ProtectConfigurationCountryRuleSet",
-          "documentation":"<p>A map of ProtectConfigurationCountryRuleSetInformation objects that contain the details for the requested NumberCapability. The Key is the two-letter ISO country code. For a list of supported ISO country codes, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html\">Supported countries and regions (SMS channel)</a> in the AWS End User Messaging SMS User Guide.</p>"
+          "documentation":"<p>A map of ProtectConfigurationCountryRuleSetInformation objects that contain the details for the requested NumberCapability. The Key is the two-letter ISO country code. For a list of supported ISO country codes, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html\">Supported countries and regions (SMS channel)</a> in the End User MessagingSMS User Guide.</p>"
         }
       }
     },
@@ -4345,7 +4428,7 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource attached to the resource-based policy.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource attached to the resource-based policy.</p>"
         }
       }
     },
@@ -4354,11 +4437,11 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource attached to the resource-based policy.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource attached to the resource-based policy.</p>"
         },
         "Policy":{
           "shape":"ResourcePolicy",
-          "documentation":"<p>The JSON formatted string that contains the resource-based policy attached to the AWS End User Messaging SMS and Voice resource. </p>"
+          "documentation":"<p>The JSON formatted string that contains the resource-based policy attached to the End User MessagingSMS resource. </p>"
         },
         "CreatedTimestamp":{
           "shape":"Timestamp",
@@ -4519,7 +4602,7 @@
       "members":{
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The unique identifier for the pool. This value can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier for the pool. This value can be either the PoolId or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Filters":{
           "shape":"PoolOriginationIdentitiesFilterList",
@@ -4691,6 +4774,18 @@
       "min":20,
       "pattern":"arn:\\S+"
     },
+    "MCCType":{
+      "type":"string",
+      "max":3,
+      "min":3,
+      "pattern":"[\\d]+"
+    },
+    "MNCType":{
+      "type":"string",
+      "max":3,
+      "min":2,
+      "pattern":"[\\d]+"
+    },
     "MaxPrice":{
       "type":"string",
       "max":8,
@@ -5073,12 +5168,16 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>When set to false an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out request. For more information see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-sms-managing.html#settings-account-sms-self-managed-opt-out\">Self-managed opt-outs</a> </p>"
+          "documentation":"<p>When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out request. For more information see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-sms-managing.html#settings-account-sms-self-managed-opt-out\">Self-managed opt-outs</a> </p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
           "documentation":"<p>The name of the OptOutList associated with the phone number.</p>"
         },
+        "InternationalSendingEnabled":{
+          "shape":"PrimitiveBoolean",
+          "documentation":"<p>When set to true the international sending of phone number is Enabled.</p>"
+        },
         "DeletionProtectionEnabled":{
           "shape":"PrimitiveBoolean",
           "documentation":"<p>When set to true the phone number can't be deleted.</p>"
@@ -5102,6 +5201,15 @@
       "type":"list",
       "member":{"shape":"PhoneNumberInformation"}
     },
+    "PhoneNumberType":{
+      "type":"string",
+      "enum":[
+        "MOBILE",
+        "LANDLINE",
+        "OTHER",
+        "INVALID"
+      ]
+    },
     "PhoneOrPoolIdOrArn":{
       "type":"string",
       "max":256,
@@ -5208,7 +5316,7 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>When set to false, an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests. For more information see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-sms-managing.html#settings-account-sms-self-managed-opt-out\">Self-managed opt-outs</a> </p>"
+          "documentation":"<p>When set to false, an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests. For more information see <a href=\"https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-sms-managing.html#settings-account-sms-self-managed-opt-out\">Self-managed opt-outs</a> </p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
@@ -5422,7 +5530,7 @@
           "documentation":"<p>The time the rule will expire at. If <code>ExpirationTimestamp</code> is not set then the rule will not expire.</p>"
         }
       },
-      "documentation":"<p>Provides details on a RuleSetNumberOverride.</p>"
+      "documentation":"<p>Provides details on phone number rule overrides for a protect configuration.</p>"
     },
     "ProtectConfigurationRuleSetNumberOverrideFilterItem":{
       "type":"structure",
@@ -5464,7 +5572,9 @@
       "type":"string",
       "enum":[
         "ALLOW",
-        "BLOCK"
+        "BLOCK",
+        "MONITOR",
+        "FILTER"
       ]
     },
     "PutKeywordRequest":{
@@ -5477,7 +5587,7 @@
       "members":{
         "OriginationIdentity":{
           "shape":"PhoneOrPoolIdOrArn",
-          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> get the values for PhoneNumberId and PhoneNumberArn while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use such as a PhoneNumberId, PhoneNumberArn, SenderId or SenderIdArn. You can use <a>DescribePhoneNumbers</a> get the values for PhoneNumberId and PhoneNumberArn while <a>DescribeSenderIds</a> can be used to get the values for SenderId and SenderIdArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "Keyword":{
           "shape":"Keyword",
@@ -5561,7 +5671,7 @@
       "members":{
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutListName or OptOutListArn to add the phone number to.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutListName or OptOutListArn to add the phone number to.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "OptedOutNumber":{
           "shape":"PhoneNumber",
@@ -5742,7 +5852,7 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource to attach the resource-based policy to.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource to attach the resource-based policy to.</p>"
         },
         "Policy":{
           "shape":"ResourcePolicy",
@@ -5755,7 +5865,7 @@
       "members":{
         "ResourceArn":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS End User Messaging SMS and Voice resource attached to the resource-based policy.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the End User MessagingSMS resource attached to the resource-based policy.</p>"
         },
         "Policy":{
           "shape":"ResourcePolicy",
@@ -6470,7 +6580,7 @@
       "members":{
         "PhoneNumberId":{
           "shape":"PhoneNumberIdOrArn",
-          "documentation":"<p>The PhoneNumberId or PhoneNumberArn of the phone number to release. You can use <a>DescribePhoneNumbers</a> to get the values for PhoneNumberId and PhoneNumberArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The PhoneNumberId or PhoneNumberArn of the phone number to release. You can use <a>DescribePhoneNumbers</a> to get the values for PhoneNumberId and PhoneNumberArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         }
       }
     },
@@ -6527,7 +6637,7 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
@@ -6616,7 +6726,7 @@
         },
         "MessageType":{
           "shape":"MessageType",
-          "documentation":"<p>The type of message. Valid values are TRANSACTIONAL for messages that are critical or time-sensitive and PROMOTIONAL for messages that aren't critical or time-sensitive.</p>"
+          "documentation":"<p>The type of message. Valid values are <code>TRANSACTIONAL</code> for messages that are critical or time-sensitive and <code>PROMOTIONAL</code> for messages that aren't critical or time-sensitive.</p>"
         },
         "NumberCapabilities":{
           "shape":"NumberCapabilityList",
@@ -6624,27 +6734,31 @@
         },
         "NumberType":{
           "shape":"RequestableNumberType",
-          "documentation":"<p>The type of phone number to request.</p>"
+          "documentation":"<p>The type of phone number to request.</p> <p>When you request a <code>SIMULATOR</code> phone number, you must set <b>MessageType</b> as <code>TRANSACTIONAL</code>. </p>"
         },
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The name of the OptOutList to associate with the phone number. You can use the OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The name of the OptOutList to associate with the phone number. You can use the OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The pool to associated with the phone number. You can use the PoolId or PoolArn. </p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The pool to associated with the phone number. You can use the PoolId or PoolArn. </p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "RegistrationId":{
           "shape":"RegistrationIdOrArn",
           "documentation":"<p>Use this field to attach your phone number for an external registration process.</p>"
         },
+        "InternationalSendingEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>By default this is set to false. When set to true the international sending of phone number is Enabled. </p>"
+        },
         "DeletionProtectionEnabled":{
           "shape":"Boolean",
           "documentation":"<p>By default this is set to false. When set to true the phone number can't be deleted.</p>"
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>An array of tags (key and value pairs) associate with the requested phone number. </p>"
+          "documentation":"<p>An array of tags (key and value pairs) to associate with the requested phone number. </p>"
         },
         "ClientToken":{
           "shape":"ClientToken",
@@ -6706,12 +6820,16 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
           "documentation":"<p>The name of the OptOutList that is associated with the requested phone number.</p>"
         },
+        "InternationalSendingEnabled":{
+          "shape":"PrimitiveBoolean",
+          "documentation":"<p>By default this is set to false. When set to true the international sending of phone number is Enabled. </p>"
+        },
         "DeletionProtectionEnabled":{
           "shape":"PrimitiveBoolean",
           "documentation":"<p>By default this is set to false. When set to true the phone number can't be deleted. </p>"
@@ -6866,6 +6984,7 @@
         "registration-attachment",
         "verified-destination-number",
         "protect-configuration",
+        "message-template",
         "policy",
         "message"
       ]
@@ -6960,7 +7079,7 @@
         },
         "OriginationIdentity":{
           "shape":"VerificationMessageOriginationIdentity",
-          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "ConfigurationSetName":{
           "shape":"ConfigurationSetNameOrArn",
@@ -6999,7 +7118,7 @@
         },
         "OriginationIdentity":{
           "shape":"MediaMessageOriginationIdentity",
-          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "MessageBody":{
           "shape":"TextMessageBody",
@@ -7007,7 +7126,7 @@
         },
         "MediaUrls":{
           "shape":"MediaUrlList",
-          "documentation":"<p>An array of URLs to each media file to send. </p> <p>The media files have to be stored in a publicly available S3 bucket. Supported media file formats are listed in <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/mms-limitations-character.html\">MMS file types, size and character limits</a>. For more information on creating an S3 bucket and managing objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html\">Creating a bucket</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html\">Uploading objects</a> in the S3 user guide.</p>"
+          "documentation":"<p>An array of URLs to each media file to send. </p> <p>The media files have to be stored in an S3 bucket. Supported media file formats are listed in <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/mms-limitations-character.html\">MMS file types, size and character limits</a>. For more information on creating an S3 bucket and managing objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html\">Creating a bucket</a>, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html\">Uploading objects</a> in the <i>Amazon S3 User Guide</i>, and <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/send-mms-message.html#send-mms-message-bucket\">Setting up an Amazon S3 bucket for MMS files</a> in the <i>Amazon Web Services End User Messaging SMS User Guide</i>.</p>"
         },
         "ConfigurationSetName":{
           "shape":"ConfigurationSetNameOrArn",
@@ -7058,7 +7177,7 @@
         },
         "OriginationIdentity":{
           "shape":"TextMessageOriginationIdentity",
-          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity of the message. This can be either the PhoneNumber, PhoneNumberId, PhoneNumberArn, SenderId, SenderIdArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "MessageBody":{
           "shape":"TextMessageBody",
@@ -7094,7 +7213,7 @@
         },
         "DryRun":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>When set to true, the message is checked and validated, but isn't sent to the end recipient. You are not charged for using <code>DryRun</code>.</p> <p>The Message Parts per Second (MPS) limit when using <code>DryRun</code> is five. If your origination identity has a lower MPS limit then the lower MPS limit is used. For more information about MPS limits, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations-mps.html\">Message Parts per Second (MPS) limits</a> in the <i>AWS End User Messaging SMS User Guide</i>..</p>"
+          "documentation":"<p>When set to true, the message is checked and validated, but isn't sent to the end recipient. You are not charged for using <code>DryRun</code>.</p> <p>The Message Parts per Second (MPS) limit when using <code>DryRun</code> is five. If your origination identity has a lower MPS limit then the lower MPS limit is used. For more information about MPS limits, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations-mps.html\">Message Parts per Second (MPS) limits</a> in the <i>End User MessagingSMS User Guide</i>..</p>"
         },
         "ProtectConfigurationId":{
           "shape":"ProtectConfigurationIdOrArn",
@@ -7128,7 +7247,7 @@
         },
         "OriginationIdentity":{
           "shape":"VoiceMessageOriginationIdentity",
-          "documentation":"<p>The origination identity to use for the voice call. This can be the PhoneNumber, PhoneNumberId, PhoneNumberArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The origination identity to use for the voice call. This can be the PhoneNumber, PhoneNumberId, PhoneNumberArn, PoolId, or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "MessageBody":{
           "shape":"VoiceMessageBody",
@@ -7203,7 +7322,7 @@
           "documentation":"<p>The two-character code, in ISO 3166-1 alpha-2 format, for the country or region. </p>"
         }
       },
-      "documentation":"<p> The alphanumeric sender ID in a specific country that you want to describe. For more information on sender IDs see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id-request.html\">Requesting sender IDs </a> in the <i>AWS End User Messaging SMS User Guide</i>.</p>"
+      "documentation":"<p> The alphanumeric sender ID in a specific country that you want to describe. For more information on sender IDs see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id-request.html\">Requesting sender IDs </a> in the <i>End User MessagingSMS User Guide</i>.</p>"
     },
     "SenderIdFilter":{
       "type":"structure",
@@ -7571,7 +7690,7 @@
           "documentation":"<p>When set to <code>True</code>, the value that has been specified in the <code>EnforcedLimit</code> is used to determine the maximum amount in US dollars that can be spent to send messages each month, in US dollars.</p>"
         }
       },
-      "documentation":"<p>Describes the current monthly spend limits for sending voice and text messages. For more information on increasing your monthly spend limit, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html\"> Requesting a spending quota increase </a> in the <i>AWS End User Messaging SMS User Guide</i>. </p>"
+      "documentation":"<p>Describes the current monthly spend limits for sending voice and text messages. For more information on increasing your monthly spend limit, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html\"> Requesting a spending quota increase </a> in the <i>End User MessagingSMS User Guide</i>. </p>"
     },
     "SpendLimitList":{
       "type":"list",
@@ -7655,7 +7774,7 @@
         },
         "AssociationBehavior":{
           "shape":"RegistrationAssociationBehavior",
-          "documentation":"<p>The association behavior.</p> <ul> <li> <p> <code>ASSOCIATE_BEFORE_SUBMIT</code> The origination identity has to be supplied when creating a registration.</p> </li> <li> <p> <code>ASSOCIATE_ON_APPROVAL</code> This applies to all short code registrations. The short code will be automatically provisioned once the registration is approved.</p> </li> <li> <p> <code>ASSOCIATE_AFTER_COMPLETE</code> This applies to phone number registrations when you must complete a registration first, then associate one or more phone numbers later. For example 10DLC campaigns and long codes. </p> </li> </ul>"
+          "documentation":"<p>The association behavior.</p> <ul> <li> <p> <code>ASSOCIATE_BEFORE_SUBMIT</code> The origination identity has to be supplied when creating a registration.</p> </li> <li> <p> <code>ASSOCIATE_ON_APPROVAL</code> This applies to all sender ID registrations. The sender ID will be automatically provisioned once the registration is approved.</p> </li> <li> <p> <code>ASSOCIATE_AFTER_COMPLETE</code> This applies to phone number registrations when you must complete a registration first, then associate one or more phone numbers later. For example 10DLC campaigns and long codes. </p> </li> </ul>"
         },
         "DisassociationBehavior":{
           "shape":"RegistrationDisassociationBehavior",
@@ -7723,8 +7842,7 @@
     },
     "TagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7813,8 +7931,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEventDestinationRequest":{
       "type":"structure",
@@ -7876,7 +7993,7 @@
       "members":{
         "PhoneNumberId":{
           "shape":"PhoneNumberIdOrArn",
-          "documentation":"<p>The unique identifier of the phone number. Valid values for this field can be either the PhoneNumberId or PhoneNumberArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier of the phone number. Valid values for this field can be either the PhoneNumberId or PhoneNumberArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "TwoWayEnabled":{
           "shape":"Boolean",
@@ -7892,11 +8009,15 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutList to add the phone number to. Valid values for this field can be either the OutOutListName or OutOutListArn.</p>"
+          "documentation":"<p>The OptOutList to add the phone number to. You can use either the opt out list name or the opt out list ARN.</p>"
+        },
+        "InternationalSendingEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>By default this is set to false. When set to true the international sending of phone number is Enabled. </p>"
         },
         "DeletionProtectionEnabled":{
           "shape":"Boolean",
@@ -7963,6 +8084,10 @@
           "shape":"OptOutListName",
           "documentation":"<p>The name of the OptOutList associated with the phone number.</p>"
         },
+        "InternationalSendingEnabled":{
+          "shape":"PrimitiveBoolean",
+          "documentation":"<p>When set to true the international sending of phone number is Enabled.</p>"
+        },
         "DeletionProtectionEnabled":{
           "shape":"PrimitiveBoolean",
           "documentation":"<p>When set to true the phone number can't be deleted.</p>"
@@ -7983,7 +8108,7 @@
       "members":{
         "PoolId":{
           "shape":"PoolIdOrArn",
-          "documentation":"<p>The unique identifier of the pool to update. Valid values are either the PoolId or PoolArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The unique identifier of the pool to update. Valid values are either the PoolId or PoolArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "TwoWayEnabled":{
           "shape":"Boolean",
@@ -7999,11 +8124,11 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>By default this is set to false. When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>By default this is set to false. When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListNameOrArn",
-          "documentation":"<p>The OptOutList to associate with the pool. Valid values are either OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared AWS End User Messaging SMS and Voice resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
+          "documentation":"<p>The OptOutList to associate with the pool. Valid values are either OptOutListName or OptOutListArn.</p> <important> <p>If you are using a shared End User MessagingSMS resource then you must use the full Amazon Resource Name(ARN).</p> </important>"
         },
         "SharedRoutesEnabled":{
           "shape":"Boolean",
@@ -8048,7 +8173,7 @@
         },
         "SelfManagedOptOutsEnabled":{
           "shape":"PrimitiveBoolean",
-          "documentation":"<p>When an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, AWS End User Messaging SMS and Voice automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
+          "documentation":"<p>When set to false and an end recipient sends a message that begins with HELP or STOP to one of your dedicated numbers, End User MessagingSMS automatically replies with a customizable message and adds the end recipient to the OptOutList. When set to true you're responsible for responding to HELP and STOP requests. You're also responsible for tracking and honoring opt-out requests.</p>"
         },
         "OptOutListName":{
           "shape":"OptOutListName",
@@ -8086,7 +8211,7 @@
         },
         "CountryRuleSetUpdates":{
           "shape":"ProtectConfigurationCountryRuleSet",
-          "documentation":"<p>A map of ProtectConfigurationCountryRuleSetInformation objects that contain the details for the requested NumberCapability. The Key is the two-letter ISO country code. For a list of supported ISO country codes, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html\">Supported countries and regions (SMS channel)</a> in the AWS End User Messaging SMS User Guide.</p>"
+          "documentation":"<p>A map of ProtectConfigurationCountryRuleSetInformation objects that contain the details for the requested NumberCapability. The Key is the two-letter ISO country code. For a list of supported ISO country codes, see <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html\">Supported countries and regions (SMS channel)</a> in the End User MessagingSMS User Guide.</p> <p>For example, to set the United States as allowed and Canada as blocked, the <code>CountryRuleSetUpdates</code> would be formatted as: <code>\"CountryRuleSetUpdates\": { \"US\" : { \"ProtectStatus\": \"ALLOW\" } \"CA\" : { \"ProtectStatus\": \"BLOCK\" } }</code> </p>"
         }
       }
     },
@@ -8277,6 +8402,7 @@
         "DESTINATION_COUNTRY_BLOCKED",
         "FIELD_VALIDATION_FAILED",
         "ATTACHMENT_TYPE_NOT_SUPPORTED",
+        "INTERNATIONAL_SENDING_NOT_SUPPORTED",
         "INVALID_ARN",
         "INVALID_FILTER_VALUES",
         "INVALID_IDENTITY_FOR_DESTINATION_COUNTRY",
@@ -8549,5 +8675,5 @@
       "pattern":"[A-Za-z0-9_:/\\+-]+"
     }
   },
-  "documentation":"<p>Welcome to the <i>AWS End User Messaging SMS and Voice, version 2 API Reference</i>. This guide provides information about AWS End User Messaging SMS and Voice, version 2 API resources, including supported HTTP methods, parameters, and schemas.</p> <p>Amazon Pinpoint is an Amazon Web Services service that you can use to engage with your recipients across multiple messaging channels. The AWS End User Messaging SMS and Voice, version 2 API provides programmatic access to options that are unique to the SMS and voice channels. AWS End User Messaging SMS and Voice, version 2 resources such as phone numbers, sender IDs, and opt-out lists can be used by the Amazon Pinpoint API.</p> <p>If you're new to AWS End User Messaging SMS and Voice, it's also helpful to review the <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html\"> AWS End User Messaging SMS User Guide</a>. The <i>AWS End User Messaging SMS User Guide </i> provides tutorials, code samples, and procedures that demonstrate how to use AWS End User Messaging SMS and Voice features programmatically and how to integrate functionality into mobile apps and other types of applications. The guide also provides key information, such as AWS End User Messaging SMS and Voice integration with other Amazon Web Services services, and the quotas that apply to use of the service.</p> <p> <b>Regional availability</b> </p> <p>The <i>AWS End User Messaging SMS and Voice version 2 API Reference</i> is available in several Amazon Web Services Regions and it provides an endpoint for each of these Regions. For a list of all the Regions and endpoints where the API is currently available, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#pinpoint_region\">Amazon Web Services Service Endpoints</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/pinpoint.html\">Amazon Pinpoint endpoints and quotas</a> in the Amazon Web Services General Reference. To learn more about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html\">Managing Amazon Web Services Regions</a> in the Amazon Web Services General Reference.</p> <p>In each Region, Amazon Web Services maintains multiple Availability Zones. These Availability Zones are physically isolated from each other, but are united by private, low-latency, high-throughput, and highly redundant network connections. These Availability Zones enable us to provide very high levels of availability and redundancy, while also minimizing latency. To learn more about the number of Availability Zones that are available in each Region, see <a href=\"https://aws.amazon.com/about-aws/global-infrastructure/\">Amazon Web Services Global Infrastructure.</a> </p>"
+  "documentation":"<p>Welcome to the <i>End User MessagingSMS, version 2 API Reference</i>. This guide provides information about End User MessagingSMS, version 2 API resources, including supported HTTP methods, parameters, and schemas.</p> <p>Amazon Pinpoint is an Amazon Web Services service that you can use to engage with your recipients across multiple messaging channels. The End User MessagingSMS, version 2 API provides programmatic access to options that are unique to the SMS and voice channels. End User MessagingSMS, version 2 resources such as phone numbers, sender IDs, and opt-out lists can be used by the Amazon Pinpoint API.</p> <p>If you're new to End User MessagingSMS, it's also helpful to review the <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html\"> End User MessagingSMS User Guide</a>, where you'll find tutorials, code samples, and procedures that demonstrate how to use End User MessagingSMS features programmatically and how to integrate functionality into mobile apps and other types of applications. The guide also provides key information, such as End User MessagingSMS integration with other Amazon Web Services services, and the quotas that apply to use of the service.</p> <p> <b>Regional availability</b> </p> <p>The <i>End User MessagingSMS version 2 API Reference</i> is available in several Amazon Web Services Regions and it provides an endpoint for each of these Regions. For a list of all the Regions and endpoints where the API is currently available, see <a href=\"https://docs.aws.amazon.com/hgeneral/latest/gr/rande.html#pinpoint_region\">Amazon Web Services Service Endpoints</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/pinpoint.html\">Amazon Pinpoint endpoints and quotas</a> in the Amazon Web Services General Reference. To learn more about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html\">Managing Amazon Web Services Regions</a> in the Amazon Web Services General Reference.</p> <p>In each Region, Amazon Web Services maintains multiple Availability Zones. These Availability Zones are physically isolated from each other, but are united by private, low-latency, high-throughput, and highly redundant network connections. These Availability Zones enable us to provide very high levels of availability and redundancy, while also minimizing latency. To learn more about the number of Availability Zones that are available in each Region, see <a href=\"http://aws.amazon.com/about-aws/global-infrastructure/\">Amazon Web Services Global Infrastructure.</a> </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pipes/2015-10-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/polly/2016-06-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/polly/2016-06-10/service-2.json 2.31.35-1/awscli/botocore/data/polly/2016-06-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/polly/2016-06-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/polly/2016-06-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -193,8 +193,7 @@
     },
     "DeleteLexiconOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeVoicesInput":{
       "type":"structure",
@@ -430,7 +429,8 @@
         "nl-BE",
         "fr-BE",
         "cs-CZ",
-        "de-CH"
+        "de-CH",
+        "en-SG"
       ]
     },
     "LanguageCodeList":{
@@ -645,6 +645,7 @@
       "enum":[
         "json",
         "mp3",
+        "ogg_opus",
         "ogg_vorbis",
         "pcm"
       ]
@@ -679,8 +680,7 @@
     },
     "PutLexiconOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequestCharacters":{"type":"integer"},
     "SampleRate":{"type":"string"},
@@ -879,7 +879,7 @@
       "members":{
         "Engine":{
           "shape":"Engine",
-          "documentation":"<p>Specifies the engine (<code>standard</code>, <code>neural</code>, <code>long-form</code>, or <code>generative</code>) for Amazon Polly to use when processing input text for speech synthesis. Provide an engine that is supported by the voice you select. If you don't provide an engine, the standard engine is selected by default. If a chosen voice isn't supported by the standard engine, this will result in an error. For information on Amazon Polly voices and which voices are available for each engine, see <a href=\"https://docs.aws.amazon.com/polly/latest/dg/voicelist.html\">Available Voices</a>.</p> <p>Type: String</p> <p>Valid Values: <code>standard</code> | <code>neural</code> | <code>long-form</code> | <code>generative</code> </p> <p>Required: Yes</p>"
+          "documentation":"<p>Specifies the engine (<code>standard</code>, <code>neural</code>, <code>long-form</code>, or <code>generative</code>) for Amazon Polly to use when processing input text for speech synthesis. Provide an engine that is supported by the voice you select. If you don't provide an engine, the standard engine is selected by default. If a chosen voice isn't supported by the standard engine, this will result in an error. For information on Amazon Polly voices and which voices are available for each engine, see <a href=\"https://docs.aws.amazon.com/polly/latest/dg/voicelist.html\">Available Voices</a>.</p>"
         },
         "LanguageCode":{
           "shape":"LanguageCode",
@@ -895,7 +895,7 @@
         },
         "SampleRate":{
           "shape":"SampleRate",
-          "documentation":"<p>The audio frequency specified in Hz.</p> <p>The valid values for mp3 and ogg_vorbis are \"8000\", \"16000\", \"22050\", and \"24000\". The default value for standard voices is \"22050\". The default value for neural voices is \"24000\". The default value for long-form voices is \"24000\". The default value for generative voices is \"24000\".</p> <p>Valid values for pcm are \"8000\" and \"16000\" The default value is \"16000\". </p>"
+          "documentation":"<p>The audio frequency specified in Hz.</p> <p>The valid values for mp3 and ogg_vorbis are \"8000\", \"16000\", \"22050\", \"24000\", \"44100\" and \"48000\". The default value for standard voices is \"22050\". The default value for neural voices is \"24000\". The default value for long-form voices is \"24000\". The default value for generative voices is \"24000\".</p> <p>Valid values for pcm are \"8000\" and \"16000\" The default value is \"16000\". </p>"
         },
         "SpeechMarkTypes":{
           "shape":"SpeechMarkTypeList",
@@ -1120,7 +1120,9 @@
         "Gregory",
         "Burcu",
         "Jitka",
-        "Sabrina"
+        "Sabrina",
+        "Jasmine",
+        "Jihye"
       ]
     },
     "VoiceList":{
diff -pruN 2.23.6-1/awscli/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pricing/2017-10-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/pricing/2017-10-15/service-2.json 2.31.35-1/awscli/botocore/data/pricing/2017-10-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/pricing/2017-10-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/pricing/2017-10-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -154,7 +154,7 @@
           "documentation":"<p>The code for the service whose information you want to retrieve, such as <code>AmazonEC2</code>. You can use the <code>ServiceCode</code> to filter the results in a <code>GetProducts</code> call. To retrieve a list of all services, leave this blank.</p>"
         },
         "FormatVersion":{
-          "shape":"String",
+          "shape":"FormatVersion",
           "documentation":"<p>The format version that you want the response to be in.</p> <p>Valid values are: <code>aws_v1</code> </p>"
         },
         "NextToken":{
@@ -175,7 +175,7 @@
           "documentation":"<p>The service metadata for the service or services in the response.</p>"
         },
         "FormatVersion":{
-          "shape":"String",
+          "shape":"FormatVersion",
           "documentation":"<p>The format version of the response. For example, <code>aws_v1</code>.</p>"
         },
         "NextToken":{
@@ -193,6 +193,11 @@
       "documentation":"<p>The pagination token expired. Try again without a pagination token.</p>",
       "exception":true
     },
+    "Field":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "FileFormat":{
       "type":"string",
       "max":255,
@@ -212,26 +217,39 @@
       "members":{
         "Type":{
           "shape":"FilterType",
-          "documentation":"<p>The type of filter that you want to use.</p> <p>Valid values are: <code>TERM_MATCH</code>. <code>TERM_MATCH</code> returns only products that match both the given filter field and the given value.</p>"
+          "documentation":"<p>The type of filter that you want to use.</p> <p>Valid values are:</p> <ul> <li> <p> <code>TERM_MATCH</code>: Returns only products that match both the given filter field and the given value.</p> </li> <li> <p> <code>EQUALS</code>: Returns products that have a field value exactly matching the provided value.</p> </li> <li> <p> <code>CONTAINS</code>: Returns products where the field value contains the provided value as a substring.</p> </li> <li> <p> <code>ANY_OF</code>: Returns products where the field value is any of the provided values.</p> </li> <li> <p> <code>NONE_OF</code>: Returns products where the field value is not any of the provided values.</p> </li> </ul>"
         },
         "Field":{
-          "shape":"String",
+          "shape":"Field",
           "documentation":"<p>The product metadata field that you want to filter on. You can filter by just the service code to see all products for a specific service, filter by just the attribute name to see a specific attribute for multiple services, or use both a service code and an attribute name to retrieve only products that match both fields.</p> <p>Valid values include: <code>ServiceCode</code>, and all attribute names</p> <p>For example, you can filter by the <code>AmazonEC2</code> service code and the <code>volumeType</code> attribute name to get the prices for only Amazon EC2 volumes.</p>"
         },
         "Value":{
-          "shape":"String",
-          "documentation":"<p>The service code or attribute value that you want to filter by. If you're filtering by service code this is the actual service code, such as <code>AmazonEC2</code>. If you're filtering by attribute name, this is the attribute value that you want the returned products to match, such as a <code>Provisioned IOPS</code> volume.</p>"
+          "shape":"Value",
+          "documentation":"<p>The service code or attribute value that you want to filter by. If you're filtering by service code this is the actual service code, such as <code>AmazonEC2</code>. If you're filtering by attribute name, this is the attribute value that you want the returned products to match, such as a <code>Provisioned IOPS</code> volume.</p> <p>For <code>ANY_OF</code> and <code>NONE_OF</code> filter types, you can provide multiple values as a comma-separated string. For example, <code>t2.micro,t2.small,t2.medium</code> or <code>Compute optimized, GPU instance, Micro instances</code>.</p>"
         }
       },
       "documentation":"<p>The constraints that you want all returned products to match.</p>"
     },
     "FilterType":{
       "type":"string",
-      "enum":["TERM_MATCH"]
+      "enum":[
+        "TERM_MATCH",
+        "EQUALS",
+        "CONTAINS",
+        "ANY_OF",
+        "NONE_OF"
+      ]
     },
     "Filters":{
       "type":"list",
-      "member":{"shape":"Filter"}
+      "member":{"shape":"Filter"},
+      "max":50,
+      "min":0
+    },
+    "FormatVersion":{
+      "type":"string",
+      "max":32,
+      "min":1
     },
     "GetAttributeValuesRequest":{
       "type":"structure",
@@ -310,7 +328,7 @@
           "documentation":"<p>The list of filters that limit the returned products. only products that match all filters are returned.</p>"
         },
         "FormatVersion":{
-          "shape":"String",
+          "shape":"FormatVersion",
           "documentation":"<p>The format version that you want the response to be in.</p> <p>Valid values are: <code>aws_v1</code> </p>"
         },
         "NextToken":{
@@ -327,7 +345,7 @@
       "type":"structure",
       "members":{
         "FormatVersion":{
-          "shape":"String",
+          "shape":"FormatVersion",
           "documentation":"<p>The format version of the response. For example, aws_v1.</p>"
         },
         "PriceList":{
@@ -514,6 +532,11 @@
       "exception":true,
       "retryable":{"throttling":true}
     },
+    "Value":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "errorMessage":{"type":"string"}
   },
   "documentation":"<p>The Amazon Web Services Price List API is a centralized and convenient way to programmatically query Amazon Web Services for services, products, and pricing information. The Amazon Web Services Price List uses standardized product attributes such as <code>Location</code>, <code>Storage Class</code>, and <code>Operating System</code>, and provides prices at the SKU level. You can use the Amazon Web Services Price List to do the following:</p> <ul> <li> <p>Build cost control and scenario planning tools</p> </li> <li> <p>Reconcile billing data</p> </li> <li> <p>Forecast future spend for budgeting purposes</p> </li> <li> <p>Provide cost benefit analysis that compare your internal workloads with Amazon Web Services</p> </li> </ul> <p>Use <code>GetServices</code> without a service code to retrieve the service codes for all Amazon Web Services services, then <code>GetServices</code> with a service code to retrieve the attribute names for that service. After you have the service code and attribute names, you can use <code>GetAttributeValues</code> to see what values are available for an attribute. With the service code and an attribute name and value, you can use <code>GetProducts</code> to find specific products that you're interested in, such as an <code>AmazonEC2</code> instance, with a <code>Provisioned IOPS</code> <code>volumeType</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html\">Using the Amazon Web Services Price List API</a> in the <i>Billing User Guide</i>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ]
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://private-networks-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://private-networks-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://private-networks.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://private-networks.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/paginators-1.json 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,34 +0,0 @@
-{
-  "pagination": {
-    "ListDeviceIdentifiers": {
-      "input_token": "startToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "deviceIdentifiers"
-    },
-    "ListNetworkResources": {
-      "input_token": "startToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "networkResources"
-    },
-    "ListNetworkSites": {
-      "input_token": "startToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "networkSites"
-    },
-    "ListNetworks": {
-      "input_token": "startToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "networks"
-    },
-    "ListOrders": {
-      "input_token": "startToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "orders"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/service-2.json 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/privatenetworks/2021-12-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/privatenetworks/2021-12-03/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,2182 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2021-12-03",
-    "endpointPrefix":"private-networks",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "serviceFullName":"AWS Private 5G",
-    "serviceId":"PrivateNetworks",
-    "signatureVersion":"v4",
-    "signingName":"private-networks",
-    "uid":"privatenetworks-2021-12-03"
-  },
-  "operations":{
-    "AcknowledgeOrderReceipt":{
-      "name":"AcknowledgeOrderReceipt",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/orders/acknowledge",
-        "responseCode":200
-      },
-      "input":{"shape":"AcknowledgeOrderReceiptRequest"},
-      "output":{"shape":"AcknowledgeOrderReceiptResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Acknowledges that the specified network order was received.</p>"
-    },
-    "ActivateDeviceIdentifier":{
-      "name":"ActivateDeviceIdentifier",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/device-identifiers/activate",
-        "responseCode":200
-      },
-      "input":{"shape":"ActivateDeviceIdentifierRequest"},
-      "output":{"shape":"ActivateDeviceIdentifierResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Activates the specified device identifier.</p>",
-      "idempotent":true
-    },
-    "ActivateNetworkSite":{
-      "name":"ActivateNetworkSite",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-sites/activate",
-        "responseCode":200
-      },
-      "input":{"shape":"ActivateNetworkSiteRequest"},
-      "output":{"shape":"ActivateNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Activates the specified network site.</p>",
-      "idempotent":true
-    },
-    "ConfigureAccessPoint":{
-      "name":"ConfigureAccessPoint",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-resources/configure",
-        "responseCode":200
-      },
-      "input":{"shape":"ConfigureAccessPointRequest"},
-      "output":{"shape":"ConfigureAccessPointResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Configures the specified network resource. </p> <p> Use this action to specify the geographic position of the hardware. You must provide Certified Professional Installer (CPI) credentials in the request so that we can obtain spectrum grants. For more information, see <a href=\"https://docs.aws.amazon.com/private-networks/latest/userguide/radio-units.html\">Radio units</a> in the <i>Amazon Web Services Private 5G User Guide</i>. </p>",
-      "idempotent":true
-    },
-    "CreateNetwork":{
-      "name":"CreateNetwork",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/networks",
-        "responseCode":200
-      },
-      "input":{"shape":"CreateNetworkRequest"},
-      "output":{"shape":"CreateNetworkResponse"},
-      "errors":[
-        {"shape":"LimitExceededException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a network.</p>",
-      "idempotent":true
-    },
-    "CreateNetworkSite":{
-      "name":"CreateNetworkSite",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-sites",
-        "responseCode":200
-      },
-      "input":{"shape":"CreateNetworkSiteRequest"},
-      "output":{"shape":"CreateNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Creates a network site.</p>",
-      "idempotent":true
-    },
-    "DeactivateDeviceIdentifier":{
-      "name":"DeactivateDeviceIdentifier",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/device-identifiers/deactivate",
-        "responseCode":200
-      },
-      "input":{"shape":"DeactivateDeviceIdentifierRequest"},
-      "output":{"shape":"DeactivateDeviceIdentifierResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deactivates the specified device identifier.</p>",
-      "idempotent":true
-    },
-    "DeleteNetwork":{
-      "name":"DeleteNetwork",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/v1/networks/{networkArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DeleteNetworkRequest"},
-      "output":{"shape":"DeleteNetworkResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes the specified network. You must delete network sites before you delete the network. For more information, see <a href=\"https://docs.aws.amazon.com/private-networks/latest/APIReference/API_DeleteNetworkSite.html\">DeleteNetworkSite</a> in the <i>API Reference for Amazon Web Services Private 5G</i>.</p>",
-      "idempotent":true
-    },
-    "DeleteNetworkSite":{
-      "name":"DeleteNetworkSite",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/v1/network-sites/{networkSiteArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"DeleteNetworkSiteRequest"},
-      "output":{"shape":"DeleteNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Deletes the specified network site. Return the hardware after you delete the network site. You are responsible for minimum charges. For more information, see <a href=\"https://docs.aws.amazon.com/private-networks/latest/userguide/hardware-maintenance.html\">Hardware returns</a> in the <i>Amazon Web Services Private 5G User Guide</i>. </p>",
-      "idempotent":true
-    },
-    "GetDeviceIdentifier":{
-      "name":"GetDeviceIdentifier",
-      "http":{
-        "method":"GET",
-        "requestUri":"/v1/device-identifiers/{deviceIdentifierArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetDeviceIdentifierRequest"},
-      "output":{"shape":"GetDeviceIdentifierResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets the specified device identifier.</p>"
-    },
-    "GetNetwork":{
-      "name":"GetNetwork",
-      "http":{
-        "method":"GET",
-        "requestUri":"/v1/networks/{networkArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetNetworkRequest"},
-      "output":{"shape":"GetNetworkResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets the specified network.</p>"
-    },
-    "GetNetworkResource":{
-      "name":"GetNetworkResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/v1/network-resources/{networkResourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetNetworkResourceRequest"},
-      "output":{"shape":"GetNetworkResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets the specified network resource.</p>"
-    },
-    "GetNetworkSite":{
-      "name":"GetNetworkSite",
-      "http":{
-        "method":"GET",
-        "requestUri":"/v1/network-sites/{networkSiteArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetNetworkSiteRequest"},
-      "output":{"shape":"GetNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets the specified network site.</p>"
-    },
-    "GetOrder":{
-      "name":"GetOrder",
-      "http":{
-        "method":"GET",
-        "requestUri":"/v1/orders/{orderArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"GetOrderRequest"},
-      "output":{"shape":"GetOrderResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Gets the specified order.</p>"
-    },
-    "ListDeviceIdentifiers":{
-      "name":"ListDeviceIdentifiers",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/device-identifiers/list",
-        "responseCode":200
-      },
-      "input":{"shape":"ListDeviceIdentifiersRequest"},
-      "output":{"shape":"ListDeviceIdentifiersResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists device identifiers. Add filters to your request to return a more specific list of results. Use filters to match the Amazon Resource Name (ARN) of an order, the status of device identifiers, or the ARN of the traffic group.</p> <p>If you specify multiple filters, filters are joined with an OR, and the request returns results that match all of the specified filters.</p>"
-    },
-    "ListNetworkResources":{
-      "name":"ListNetworkResources",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-resources",
-        "responseCode":200
-      },
-      "input":{"shape":"ListNetworkResourcesRequest"},
-      "output":{"shape":"ListNetworkResourcesResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists network resources. Add filters to your request to return a more specific list of results. Use filters to match the Amazon Resource Name (ARN) of an order or the status of network resources.</p> <p>If you specify multiple filters, filters are joined with an OR, and the request returns results that match all of the specified filters.</p>"
-    },
-    "ListNetworkSites":{
-      "name":"ListNetworkSites",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-sites/list",
-        "responseCode":200
-      },
-      "input":{"shape":"ListNetworkSitesRequest"},
-      "output":{"shape":"ListNetworkSitesResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists network sites. Add filters to your request to return a more specific list of results. Use filters to match the status of the network site.</p>"
-    },
-    "ListNetworks":{
-      "name":"ListNetworks",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/networks/list",
-        "responseCode":200
-      },
-      "input":{"shape":"ListNetworksRequest"},
-      "output":{"shape":"ListNetworksResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists networks. Add filters to your request to return a more specific list of results. Use filters to match the status of the network.</p>"
-    },
-    "ListOrders":{
-      "name":"ListOrders",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/orders/list",
-        "responseCode":200
-      },
-      "input":{"shape":"ListOrdersRequest"},
-      "output":{"shape":"ListOrdersResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Lists orders. Add filters to your request to return a more specific list of results. Use filters to match the Amazon Resource Name (ARN) of the network site or the status of the order.</p> <p>If you specify multiple filters, filters are joined with an OR, and the request returns results that match all of the specified filters.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Lists the tags for the specified resource.</p>"
-    },
-    "Ping":{
-      "name":"Ping",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ping",
-        "responseCode":200
-      },
-      "output":{"shape":"PingResponse"},
-      "errors":[
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Checks the health of the service.</p>"
-    },
-    "StartNetworkResourceUpdate":{
-      "name":"StartNetworkResourceUpdate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/v1/network-resources/update",
-        "responseCode":200
-      },
-      "input":{"shape":"StartNetworkResourceUpdateRequest"},
-      "output":{"shape":"StartNetworkResourceUpdateResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Use this action to do the following tasks:</p> <ul> <li> <p>Update the duration and renewal status of the commitment period for a radio unit. The update goes into effect immediately.</p> </li> <li> <p>Request a replacement for a network resource.</p> </li> <li> <p>Request that you return a network resource.</p> </li> </ul> <p>After you submit a request to replace or return a network resource, the status of the network resource changes to <code>CREATING_SHIPPING_LABEL</code>. The shipping label is available when the status of the network resource is <code>PENDING_RETURN</code>. After the network resource is successfully returned, its status changes to <code>DELETED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/private-networks/latest/userguide/radio-units.html#return-radio-unit\">Return a radio unit</a>.</p>",
-      "idempotent":true
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p> Adds tags to the specified resource. </p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}",
-        "responseCode":200
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<p>Removes tags from the specified resource.</p>"
-    },
-    "UpdateNetworkSite":{
-      "name":"UpdateNetworkSite",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/v1/network-sites/site",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateNetworkSiteRequest"},
-      "output":{"shape":"UpdateNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Updates the specified network site.</p>",
-      "idempotent":true
-    },
-    "UpdateNetworkSitePlan":{
-      "name":"UpdateNetworkSitePlan",
-      "http":{
-        "method":"PUT",
-        "requestUri":"/v1/network-sites/plan",
-        "responseCode":200
-      },
-      "input":{"shape":"UpdateNetworkSitePlanRequest"},
-      "output":{"shape":"UpdateNetworkSiteResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<p>Updates the specified network site plan.</p>",
-      "idempotent":true
-    }
-  },
-  "shapes":{
-    "AccessDeniedException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p>You do not have permission to perform this operation.</p>",
-      "error":{
-        "httpStatusCode":403,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "AcknowledgeOrderReceiptRequest":{
-      "type":"structure",
-      "required":["orderArn"],
-      "members":{
-        "orderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the order.</p>"
-        }
-      }
-    },
-    "AcknowledgeOrderReceiptResponse":{
-      "type":"structure",
-      "required":["order"],
-      "members":{
-        "order":{
-          "shape":"Order",
-          "documentation":"<p>Information about the order.</p>"
-        }
-      }
-    },
-    "AcknowledgmentStatus":{
-      "type":"string",
-      "enum":[
-        "ACKNOWLEDGING",
-        "ACKNOWLEDGED",
-        "UNACKNOWLEDGED"
-      ]
-    },
-    "ActivateDeviceIdentifierRequest":{
-      "type":"structure",
-      "required":["deviceIdentifierArn"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "deviceIdentifierArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the device identifier.</p>"
-        }
-      }
-    },
-    "ActivateDeviceIdentifierResponse":{
-      "type":"structure",
-      "required":["deviceIdentifier"],
-      "members":{
-        "deviceIdentifier":{
-          "shape":"DeviceIdentifier",
-          "documentation":"<p>Information about the device identifier.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The tags on the device identifier. </p>"
-        }
-      }
-    },
-    "ActivateNetworkSiteRequest":{
-      "type":"structure",
-      "required":[
-        "networkSiteArn",
-        "shippingAddress"
-      ],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "commitmentConfiguration":{
-          "shape":"CommitmentConfiguration",
-          "documentation":"<p>Determines the duration and renewal status of the commitment period for all pending radio units.</p> <p>If you include <code>commitmentConfiguration</code> in the <code>ActivateNetworkSiteRequest</code> action, you must specify the following:</p> <ul> <li> <p>The commitment period for the radio unit. You can choose a 60-day, 1-year, or 3-year period.</p> </li> <li> <p>Whether you want your commitment period to automatically renew for one more year after your current commitment period expires.</p> </li> </ul> <p>For pricing, see <a href=\"http://aws.amazon.com/private5g/pricing\">Amazon Web Services Private 5G Pricing</a>.</p> <p>If you do not include <code>commitmentConfiguration</code> in the <code>ActivateNetworkSiteRequest</code> action, the commitment period is set to 60-days.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>"
-        },
-        "shippingAddress":{
-          "shape":"Address",
-          "documentation":"<p>The shipping address of the network site.</p>"
-        }
-      }
-    },
-    "ActivateNetworkSiteResponse":{
-      "type":"structure",
-      "members":{
-        "networkSite":{
-          "shape":"NetworkSite",
-          "documentation":"<p>Information about the network site.</p>"
-        }
-      }
-    },
-    "Address":{
-      "type":"structure",
-      "required":[
-        "city",
-        "country",
-        "name",
-        "postalCode",
-        "stateOrProvince",
-        "street1"
-      ],
-      "members":{
-        "city":{
-          "shape":"AddressContent",
-          "documentation":"<p>The city for this address.</p>"
-        },
-        "company":{
-          "shape":"AddressContent",
-          "documentation":"<p>The company name for this address.</p>"
-        },
-        "country":{
-          "shape":"AddressContent",
-          "documentation":"<p>The country for this address.</p>"
-        },
-        "emailAddress":{
-          "shape":"AddressContent",
-          "documentation":"<p>The recipient's email address.</p>"
-        },
-        "name":{
-          "shape":"AddressContent",
-          "documentation":"<p>The recipient's name for this address.</p>"
-        },
-        "phoneNumber":{
-          "shape":"AddressContent",
-          "documentation":"<p>The recipient's phone number.</p>"
-        },
-        "postalCode":{
-          "shape":"AddressContent",
-          "documentation":"<p>The postal code for this address.</p>"
-        },
-        "stateOrProvince":{
-          "shape":"AddressContent",
-          "documentation":"<p>The state or province for this address.</p>"
-        },
-        "street1":{
-          "shape":"AddressContent",
-          "documentation":"<p>The first line of the street address.</p>"
-        },
-        "street2":{
-          "shape":"AddressContent",
-          "documentation":"<p>The second line of the street address.</p>"
-        },
-        "street3":{
-          "shape":"AddressContent",
-          "documentation":"<p>The third line of the street address.</p>"
-        }
-      },
-      "documentation":"<p>Information about an address.</p>"
-    },
-    "AddressContent":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "sensitive":true
-    },
-    "Arn":{
-      "type":"string",
-      "pattern":"^arn:aws:private-networks:[a-z0-9-]+:[^:]*:.*$"
-    },
-    "Boolean":{
-      "type":"boolean",
-      "box":true
-    },
-    "ClientToken":{
-      "type":"string",
-      "max":100,
-      "min":1
-    },
-    "CommitmentConfiguration":{
-      "type":"structure",
-      "required":[
-        "automaticRenewal",
-        "commitmentLength"
-      ],
-      "members":{
-        "automaticRenewal":{
-          "shape":"Boolean",
-          "documentation":"<p>Determines whether the commitment period for a radio unit is set to automatically renew for an additional 1 year after your current commitment period expires.</p> <p>Set to <code>True</code>, if you want your commitment period to automatically renew. Set to <code>False</code> if you do not want your commitment to automatically renew.</p> <p>You can do the following:</p> <ul> <li> <p>Set a 1-year commitment to automatically renew for an additional 1 year. The hourly rate for the additional year will continue to be the same as your existing 1-year rate.</p> </li> <li> <p>Set a 3-year commitment to automatically renew for an additional 1 year. The hourly rate for the additional year will continue to be the same as your existing 3-year rate.</p> </li> <li> <p>Turn off a previously-enabled automatic renewal on a 1-year or 3-year commitment.</p> </li> </ul> <p>You cannot use the automatic-renewal option for a 60-day commitment.</p>"
-        },
-        "commitmentLength":{
-          "shape":"CommitmentLength",
-          "documentation":"<p>The duration of the commitment period for the radio unit. You can choose a 60-day, 1-year, or 3-year period.</p>"
-        }
-      },
-      "documentation":"<p>Determines the duration and renewal status of the commitment period for a radio unit.</p> <p>For pricing, see <a href=\"http://aws.amazon.com/private5g/pricing\">Amazon Web Services Private 5G Pricing</a>.</p>"
-    },
-    "CommitmentInformation":{
-      "type":"structure",
-      "required":["commitmentConfiguration"],
-      "members":{
-        "commitmentConfiguration":{
-          "shape":"CommitmentConfiguration",
-          "documentation":"<p>The duration and renewal status of the commitment period for the radio unit.</p>"
-        },
-        "expiresOn":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the commitment period ends. If you do not cancel or renew the commitment before the expiration date, you will be billed at the 60-day-commitment rate.</p>"
-        },
-        "startAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the commitment period started.</p>"
-        }
-      },
-      "documentation":"<p>Shows the duration, the date and time that the contract started and ends, and the renewal status of the commitment period for the radio unit.</p>"
-    },
-    "CommitmentLength":{
-      "type":"string",
-      "enum":[
-        "SIXTY_DAYS",
-        "ONE_YEAR",
-        "THREE_YEARS"
-      ]
-    },
-    "ConfigureAccessPointRequest":{
-      "type":"structure",
-      "required":["accessPointArn"],
-      "members":{
-        "accessPointArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network resource.</p>"
-        },
-        "cpiSecretKey":{
-          "shape":"ConfigureAccessPointRequestCpiSecretKeyString",
-          "documentation":"<p>A Base64 encoded string of the CPI certificate associated with the CPI user who is certifying the coordinates of the network resource. </p>"
-        },
-        "cpiUserId":{
-          "shape":"ConfigureAccessPointRequestCpiUserIdString",
-          "documentation":"<p>The CPI user ID of the CPI user who is certifying the coordinates of the network resource. </p>"
-        },
-        "cpiUserPassword":{
-          "shape":"ConfigureAccessPointRequestCpiUserPasswordString",
-          "documentation":"<p>The CPI password associated with the CPI certificate in <code>cpiSecretKey</code>.</p>"
-        },
-        "cpiUsername":{
-          "shape":"ConfigureAccessPointRequestCpiUsernameString",
-          "documentation":"<p>The CPI user name of the CPI user who is certifying the coordinates of the radio unit.</p>"
-        },
-        "position":{
-          "shape":"Position",
-          "documentation":"<p>The position of the network resource.</p>"
-        }
-      }
-    },
-    "ConfigureAccessPointRequestCpiSecretKeyString":{
-      "type":"string",
-      "max":100000,
-      "min":1,
-      "sensitive":true
-    },
-    "ConfigureAccessPointRequestCpiUserIdString":{
-      "type":"string",
-      "max":4096,
-      "min":1,
-      "sensitive":true
-    },
-    "ConfigureAccessPointRequestCpiUserPasswordString":{
-      "type":"string",
-      "max":4096,
-      "min":1,
-      "sensitive":true
-    },
-    "ConfigureAccessPointRequestCpiUsernameString":{
-      "type":"string",
-      "max":4096,
-      "min":1,
-      "sensitive":true
-    },
-    "ConfigureAccessPointResponse":{
-      "type":"structure",
-      "required":["accessPoint"],
-      "members":{
-        "accessPoint":{
-          "shape":"NetworkResource",
-          "documentation":"<p>Information about the network resource.</p>"
-        }
-      }
-    },
-    "CreateNetworkRequest":{
-      "type":"structure",
-      "required":["networkName"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the network.</p>"
-        },
-        "networkName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the network. You can't change the name after you create the network.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The tags to apply to the network. </p>"
-        }
-      }
-    },
-    "CreateNetworkResponse":{
-      "type":"structure",
-      "required":["network"],
-      "members":{
-        "network":{
-          "shape":"Network",
-          "documentation":"<p>Information about the network.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network tags. </p>"
-        }
-      }
-    },
-    "CreateNetworkSiteRequest":{
-      "type":"structure",
-      "required":[
-        "networkArn",
-        "networkSiteName"
-      ],
-      "members":{
-        "availabilityZone":{
-          "shape":"String",
-          "documentation":"<p>The Availability Zone that is the parent of this site. You can't change the Availability Zone after you create the site.</p>"
-        },
-        "availabilityZoneId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the Availability Zone that is the parent of this site. You can't change the Availability Zone after you create the site.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the site.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "networkSiteName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the site. You can't change the name after you create the site.</p>"
-        },
-        "pendingPlan":{
-          "shape":"SitePlan",
-          "documentation":"<p>Information about the pending plan for this site.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The tags to apply to the network site. </p>"
-        }
-      }
-    },
-    "CreateNetworkSiteResponse":{
-      "type":"structure",
-      "members":{
-        "networkSite":{
-          "shape":"NetworkSite",
-          "documentation":"<p>Information about the network site.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network site tags. </p>"
-        }
-      }
-    },
-    "DeactivateDeviceIdentifierRequest":{
-      "type":"structure",
-      "required":["deviceIdentifierArn"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "deviceIdentifierArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the device identifier.</p>"
-        }
-      }
-    },
-    "DeactivateDeviceIdentifierResponse":{
-      "type":"structure",
-      "required":["deviceIdentifier"],
-      "members":{
-        "deviceIdentifier":{
-          "shape":"DeviceIdentifier",
-          "documentation":"<p>Information about the device identifier.</p>"
-        }
-      }
-    },
-    "DeleteNetworkRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>",
-          "location":"querystring",
-          "locationName":"clientToken"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>",
-          "location":"uri",
-          "locationName":"networkArn"
-        }
-      }
-    },
-    "DeleteNetworkResponse":{
-      "type":"structure",
-      "required":["network"],
-      "members":{
-        "network":{
-          "shape":"Network",
-          "documentation":"<p>Information about the network.</p>"
-        }
-      }
-    },
-    "DeleteNetworkSiteRequest":{
-      "type":"structure",
-      "required":["networkSiteArn"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>",
-          "location":"querystring",
-          "locationName":"clientToken"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>",
-          "location":"uri",
-          "locationName":"networkSiteArn"
-        }
-      }
-    },
-    "DeleteNetworkSiteResponse":{
-      "type":"structure",
-      "members":{
-        "networkSite":{
-          "shape":"NetworkSite",
-          "documentation":"<p>Information about the network site.</p>"
-        }
-      }
-    },
-    "Description":{
-      "type":"string",
-      "max":100,
-      "min":0
-    },
-    "DeviceIdentifier":{
-      "type":"structure",
-      "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of this device identifier.</p>"
-        },
-        "deviceIdentifierArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the device identifier.</p>"
-        },
-        "iccid":{
-          "shape":"String",
-          "documentation":"<p>The Integrated Circuit Card Identifier of the device identifier.</p>"
-        },
-        "imsi":{
-          "shape":"DeviceIdentifierImsiString",
-          "documentation":"<p>The International Mobile Subscriber Identity of the device identifier.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network on which the device identifier appears.</p>"
-        },
-        "orderArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the order used to purchase the device identifier.</p>"
-        },
-        "status":{
-          "shape":"DeviceIdentifierStatus",
-          "documentation":"<p>The status of the device identifier.</p>"
-        },
-        "trafficGroupArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the traffic group to which the device identifier belongs.</p>"
-        },
-        "vendor":{
-          "shape":"String",
-          "documentation":"<p>The vendor of the device identifier.</p>"
-        }
-      },
-      "documentation":"<p>Information about a subscriber of a device that can use a network.</p>"
-    },
-    "DeviceIdentifierFilterKeys":{
-      "type":"string",
-      "enum":[
-        "STATUS",
-        "ORDER",
-        "TRAFFIC_GROUP"
-      ]
-    },
-    "DeviceIdentifierFilterValues":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "DeviceIdentifierFilters":{
-      "type":"map",
-      "key":{"shape":"DeviceIdentifierFilterKeys"},
-      "value":{"shape":"DeviceIdentifierFilterValues"}
-    },
-    "DeviceIdentifierImsiString":{
-      "type":"string",
-      "pattern":"^[0-9]{15}$",
-      "sensitive":true
-    },
-    "DeviceIdentifierList":{
-      "type":"list",
-      "member":{"shape":"DeviceIdentifier"}
-    },
-    "DeviceIdentifierStatus":{
-      "type":"string",
-      "enum":[
-        "ACTIVE",
-        "INACTIVE"
-      ]
-    },
-    "Double":{
-      "type":"double",
-      "box":true
-    },
-    "ElevationReference":{
-      "type":"string",
-      "enum":[
-        "AGL",
-        "AMSL"
-      ]
-    },
-    "ElevationUnit":{
-      "type":"string",
-      "enum":["FEET"]
-    },
-    "GetDeviceIdentifierRequest":{
-      "type":"structure",
-      "required":["deviceIdentifierArn"],
-      "members":{
-        "deviceIdentifierArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the device identifier.</p>",
-          "location":"uri",
-          "locationName":"deviceIdentifierArn"
-        }
-      }
-    },
-    "GetDeviceIdentifierResponse":{
-      "type":"structure",
-      "members":{
-        "deviceIdentifier":{
-          "shape":"DeviceIdentifier",
-          "documentation":"<p>Information about the device identifier.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The device identifier tags. </p>"
-        }
-      }
-    },
-    "GetNetworkRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>",
-          "location":"uri",
-          "locationName":"networkArn"
-        }
-      }
-    },
-    "GetNetworkResourceRequest":{
-      "type":"structure",
-      "required":["networkResourceArn"],
-      "members":{
-        "networkResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network resource.</p>",
-          "location":"uri",
-          "locationName":"networkResourceArn"
-        }
-      }
-    },
-    "GetNetworkResourceResponse":{
-      "type":"structure",
-      "required":["networkResource"],
-      "members":{
-        "networkResource":{
-          "shape":"NetworkResource",
-          "documentation":"<p>Information about the network resource.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network resource tags. </p>"
-        }
-      }
-    },
-    "GetNetworkResponse":{
-      "type":"structure",
-      "required":["network"],
-      "members":{
-        "network":{
-          "shape":"Network",
-          "documentation":"<p>Information about the network.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network tags. </p>"
-        }
-      }
-    },
-    "GetNetworkSiteRequest":{
-      "type":"structure",
-      "required":["networkSiteArn"],
-      "members":{
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>",
-          "location":"uri",
-          "locationName":"networkSiteArn"
-        }
-      }
-    },
-    "GetNetworkSiteResponse":{
-      "type":"structure",
-      "members":{
-        "networkSite":{
-          "shape":"NetworkSite",
-          "documentation":"<p>Information about the network site.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network site tags. </p>"
-        }
-      }
-    },
-    "GetOrderRequest":{
-      "type":"structure",
-      "required":["orderArn"],
-      "members":{
-        "orderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the order.</p>",
-          "location":"uri",
-          "locationName":"orderArn"
-        }
-      }
-    },
-    "GetOrderResponse":{
-      "type":"structure",
-      "required":["order"],
-      "members":{
-        "order":{
-          "shape":"Order",
-          "documentation":"<p>Information about the order.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The order tags. </p>"
-        }
-      }
-    },
-    "HealthStatus":{
-      "type":"string",
-      "enum":[
-        "INITIAL",
-        "HEALTHY",
-        "UNHEALTHY"
-      ]
-    },
-    "Integer":{
-      "type":"integer",
-      "box":true
-    },
-    "InternalServerException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Description of the error.</p>"
-        },
-        "retryAfterSeconds":{
-          "shape":"Integer",
-          "documentation":"<p>Advice to clients on when the call can be safely retried.</p>",
-          "location":"header",
-          "locationName":"Retry-After"
-        }
-      },
-      "documentation":"<p>Information about an internal error.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true,
-      "fault":true,
-      "retryable":{"throttling":false}
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "required":["message"],
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p>The limit was exceeded.</p>",
-      "error":{
-        "httpStatusCode":400,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ListDeviceIdentifiersRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "filters":{
-          "shape":"DeviceIdentifierFilters",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>ORDER</code> - The Amazon Resource Name (ARN) of the order.</p> </li> <li> <p> <code>STATUS</code> - The status (<code>ACTIVE</code> | <code>INACTIVE</code>).</p> </li> <li> <p> <code>TRAFFIC_GROUP</code> - The Amazon Resource Name (ARN) of the traffic group.</p> </li> </ul> <p>Filter values are case sensitive. If you specify multiple values for a filter, the values are joined with an <code>OR</code>, and the request returns all results that match any of the specified values.</p>"
-        },
-        "maxResults":{
-          "shape":"ListDeviceIdentifiersRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "startToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListDeviceIdentifiersRequestMaxResultsInteger":{
-      "type":"integer",
-      "box":true,
-      "max":20,
-      "min":1
-    },
-    "ListDeviceIdentifiersResponse":{
-      "type":"structure",
-      "members":{
-        "deviceIdentifiers":{
-          "shape":"DeviceIdentifierList",
-          "documentation":"<p>Information about the device identifiers.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworkResourcesRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "filters":{
-          "shape":"NetworkResourceFilters",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>ORDER</code> - The Amazon Resource Name (ARN) of the order.</p> </li> <li> <p> <code>STATUS</code> - The status (<code>AVAILABLE</code> | <code>DELETED</code> | <code>DELETING</code> | <code>PENDING</code> | <code>PENDING_RETURN</code> | <code>PROVISIONING</code> | <code>SHIPPED</code>).</p> </li> </ul> <p>Filter values are case sensitive. If you specify multiple values for a filter, the values are joined with an <code>OR</code>, and the request returns all results that match any of the specified values.</p>"
-        },
-        "maxResults":{
-          "shape":"ListNetworkResourcesRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "startToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworkResourcesRequestMaxResultsInteger":{
-      "type":"integer",
-      "box":true,
-      "max":20,
-      "min":1
-    },
-    "ListNetworkResourcesResponse":{
-      "type":"structure",
-      "members":{
-        "networkResources":{
-          "shape":"NetworkResourceList",
-          "documentation":"<p>Information about network resources.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworkSitesRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "filters":{
-          "shape":"NetworkSiteFilters",
-          "documentation":"<p>The filters. Add filters to your request to return a more specific list of results. Use filters to match the status of the network sites.</p> <ul> <li> <p> <code>STATUS</code> - The status (<code>AVAILABLE</code> | <code>CREATED</code> | <code>DELETED</code> | <code>DEPROVISIONING</code> | <code>PROVISIONING</code>).</p> </li> </ul> <p>Filter values are case sensitive. If you specify multiple values for a filter, the values are joined with an <code>OR</code>, and the request returns all results that match any of the specified values.</p>"
-        },
-        "maxResults":{
-          "shape":"ListNetworkSitesRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "startToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworkSitesRequestMaxResultsInteger":{
-      "type":"integer",
-      "box":true,
-      "max":20,
-      "min":1
-    },
-    "ListNetworkSitesResponse":{
-      "type":"structure",
-      "members":{
-        "networkSites":{
-          "shape":"NetworkSiteList",
-          "documentation":"<p>Information about the network sites.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworksRequest":{
-      "type":"structure",
-      "members":{
-        "filters":{
-          "shape":"NetworkFilters",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>STATUS</code> - The status (<code>AVAILABLE</code> | <code>CREATED</code> | <code>DELETED</code> | <code>DEPROVISIONING</code> | <code>PROVISIONING</code>).</p> </li> </ul> <p>Filter values are case sensitive. If you specify multiple values for a filter, the values are joined with an <code>OR</code>, and the request returns all results that match any of the specified values.</p>"
-        },
-        "maxResults":{
-          "shape":"ListNetworksRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return.</p>"
-        },
-        "startToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListNetworksRequestMaxResultsInteger":{
-      "type":"integer",
-      "box":true,
-      "max":20,
-      "min":1
-    },
-    "ListNetworksResponse":{
-      "type":"structure",
-      "members":{
-        "networks":{
-          "shape":"NetworkList",
-          "documentation":"<p>The networks.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListOrdersRequest":{
-      "type":"structure",
-      "required":["networkArn"],
-      "members":{
-        "filters":{
-          "shape":"OrderFilters",
-          "documentation":"<p>The filters.</p> <ul> <li> <p> <code>NETWORK_SITE</code> - The Amazon Resource Name (ARN) of the network site.</p> </li> <li> <p> <code>STATUS</code> - The status (<code>ACKNOWLEDGING</code> | <code>ACKNOWLEDGED</code> | <code>UNACKNOWLEDGED</code>).</p> </li> </ul> <p>Filter values are case sensitive. If you specify multiple values for a filter, the values are joined with an <code>OR</code>, and the request returns all results that match any of the specified values.</p>"
-        },
-        "maxResults":{
-          "shape":"ListOrdersRequestMaxResultsInteger",
-          "documentation":"<p>The maximum number of results to return.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "startToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        }
-      }
-    },
-    "ListOrdersRequestMaxResultsInteger":{
-      "type":"integer",
-      "box":true,
-      "max":20,
-      "min":1
-    },
-    "ListOrdersResponse":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The token for the next page of results.</p>"
-        },
-        "orders":{
-          "shape":"OrderList",
-          "documentation":"<p>Information about the orders.</p>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["resourceArn"],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The resource tags.</p>"
-        }
-      }
-    },
-    "Name":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"^[0-9a-zA-Z-]*$"
-    },
-    "NameValuePair":{
-      "type":"structure",
-      "required":["name"],
-      "members":{
-        "name":{
-          "shape":"String",
-          "documentation":"<p>The name of the pair.</p>"
-        },
-        "value":{
-          "shape":"String",
-          "documentation":"<p>The value of the pair.</p>"
-        }
-      },
-      "documentation":"<p>Information about a name/value pair.</p>"
-    },
-    "NameValuePairs":{
-      "type":"list",
-      "member":{"shape":"NameValuePair"}
-    },
-    "Network":{
-      "type":"structure",
-      "required":[
-        "networkArn",
-        "networkName",
-        "status"
-      ],
-      "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the network.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the network.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network.</p>"
-        },
-        "networkName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the network.</p>"
-        },
-        "status":{
-          "shape":"NetworkStatus",
-          "documentation":"<p>The status of the network.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the network.</p>"
-        }
-      },
-      "documentation":"<p>Information about a network.</p>"
-    },
-    "NetworkFilterKeys":{
-      "type":"string",
-      "enum":["STATUS"]
-    },
-    "NetworkFilterValues":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "NetworkFilters":{
-      "type":"map",
-      "key":{"shape":"NetworkFilterKeys"},
-      "value":{"shape":"NetworkFilterValues"}
-    },
-    "NetworkList":{
-      "type":"list",
-      "member":{"shape":"Network"}
-    },
-    "NetworkResource":{
-      "type":"structure",
-      "members":{
-        "attributes":{
-          "shape":"NameValuePairs",
-          "documentation":"<p>The attributes of the network resource.</p>"
-        },
-        "commitmentInformation":{
-          "shape":"CommitmentInformation",
-          "documentation":"<p>Information about the commitment period for the radio unit. Shows the duration, the date and time that the contract started and ends, and the renewal status of the commitment period.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the network resource.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the network resource.</p>"
-        },
-        "health":{
-          "shape":"HealthStatus",
-          "documentation":"<p>The health of the network resource.</p>"
-        },
-        "model":{
-          "shape":"String",
-          "documentation":"<p>The model of the network resource.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network on which this network resource appears.</p>"
-        },
-        "networkResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network resource.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site on which this network resource appears.</p>"
-        },
-        "orderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the order used to purchase this network resource.</p>"
-        },
-        "position":{
-          "shape":"Position",
-          "documentation":"<p>The position of the network resource.</p>"
-        },
-        "returnInformation":{
-          "shape":"ReturnInformation",
-          "documentation":"<p>Information about a request to return the network resource.</p>"
-        },
-        "serialNumber":{
-          "shape":"String",
-          "documentation":"<p>The serial number of the network resource.</p>"
-        },
-        "status":{
-          "shape":"NetworkResourceStatus",
-          "documentation":"<p>The status of the network resource.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the network resource.</p>"
-        },
-        "type":{
-          "shape":"NetworkResourceType",
-          "documentation":"<p>The type of the network resource.</p>"
-        },
-        "vendor":{
-          "shape":"String",
-          "documentation":"<p>The vendor of the network resource.</p>"
-        }
-      },
-      "documentation":"<p>Information about a network resource.</p>"
-    },
-    "NetworkResourceDefinition":{
-      "type":"structure",
-      "required":[
-        "count",
-        "type"
-      ],
-      "members":{
-        "count":{
-          "shape":"NetworkResourceDefinitionCountInteger",
-          "documentation":"<p>The count in the network resource definition.</p>"
-        },
-        "options":{
-          "shape":"Options",
-          "documentation":"<p>The options in the network resource definition.</p>"
-        },
-        "type":{
-          "shape":"NetworkResourceDefinitionType",
-          "documentation":"<p>The type in the network resource definition.</p>"
-        }
-      },
-      "documentation":"<p>Information about a network resource definition.</p>"
-    },
-    "NetworkResourceDefinitionCountInteger":{
-      "type":"integer",
-      "box":true,
-      "min":0
-    },
-    "NetworkResourceDefinitionType":{
-      "type":"string",
-      "enum":[
-        "RADIO_UNIT",
-        "DEVICE_IDENTIFIER"
-      ]
-    },
-    "NetworkResourceDefinitions":{
-      "type":"list",
-      "member":{"shape":"NetworkResourceDefinition"}
-    },
-    "NetworkResourceFilterKeys":{
-      "type":"string",
-      "enum":[
-        "ORDER",
-        "STATUS"
-      ]
-    },
-    "NetworkResourceFilterValues":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "NetworkResourceFilters":{
-      "type":"map",
-      "key":{"shape":"NetworkResourceFilterKeys"},
-      "value":{"shape":"NetworkResourceFilterValues"}
-    },
-    "NetworkResourceList":{
-      "type":"list",
-      "member":{"shape":"NetworkResource"}
-    },
-    "NetworkResourceStatus":{
-      "type":"string",
-      "enum":[
-        "PENDING",
-        "SHIPPED",
-        "PROVISIONING",
-        "PROVISIONED",
-        "AVAILABLE",
-        "DELETING",
-        "PENDING_RETURN",
-        "DELETED",
-        "CREATING_SHIPPING_LABEL"
-      ]
-    },
-    "NetworkResourceType":{
-      "type":"string",
-      "enum":["RADIO_UNIT"]
-    },
-    "NetworkSite":{
-      "type":"structure",
-      "required":[
-        "networkArn",
-        "networkSiteArn",
-        "networkSiteName",
-        "status"
-      ],
-      "members":{
-        "availabilityZone":{
-          "shape":"String",
-          "documentation":"<p> The parent Availability Zone for the network site. </p>"
-        },
-        "availabilityZoneId":{
-          "shape":"String",
-          "documentation":"<p> The parent Availability Zone ID for the network site. </p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the network site.</p>"
-        },
-        "currentPlan":{
-          "shape":"SitePlan",
-          "documentation":"<p>The current plan of the network site.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the network site.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network to which the network site belongs.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>"
-        },
-        "networkSiteName":{
-          "shape":"Name",
-          "documentation":"<p>The name of the network site.</p>"
-        },
-        "pendingPlan":{
-          "shape":"SitePlan",
-          "documentation":"<p>The pending plan of the network site.</p>"
-        },
-        "status":{
-          "shape":"NetworkSiteStatus",
-          "documentation":"<p>The status of the network site.</p>"
-        },
-        "statusReason":{
-          "shape":"String",
-          "documentation":"<p>The status reason of the network site.</p>"
-        }
-      },
-      "documentation":"<p>Information about a network site.</p>"
-    },
-    "NetworkSiteFilterKeys":{
-      "type":"string",
-      "enum":["STATUS"]
-    },
-    "NetworkSiteFilterValues":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "NetworkSiteFilters":{
-      "type":"map",
-      "key":{"shape":"NetworkSiteFilterKeys"},
-      "value":{"shape":"NetworkSiteFilterValues"}
-    },
-    "NetworkSiteList":{
-      "type":"list",
-      "member":{"shape":"NetworkSite"}
-    },
-    "NetworkSiteStatus":{
-      "type":"string",
-      "enum":[
-        "CREATED",
-        "PROVISIONING",
-        "AVAILABLE",
-        "DEPROVISIONING",
-        "DELETED"
-      ]
-    },
-    "NetworkStatus":{
-      "type":"string",
-      "enum":[
-        "CREATED",
-        "PROVISIONING",
-        "AVAILABLE",
-        "DEPROVISIONING",
-        "DELETED"
-      ]
-    },
-    "Options":{
-      "type":"list",
-      "member":{"shape":"NameValuePair"}
-    },
-    "Order":{
-      "type":"structure",
-      "members":{
-        "acknowledgmentStatus":{
-          "shape":"AcknowledgmentStatus",
-          "documentation":"<p>The acknowledgement status of the order.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the order.</p>"
-        },
-        "networkArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network associated with this order.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site associated with this order.</p>"
-        },
-        "orderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the order.</p>"
-        },
-        "orderedResources":{
-          "shape":"OrderedResourceDefinitions",
-          "documentation":"<p>A list of the network resources placed in the order.</p>"
-        },
-        "shippingAddress":{
-          "shape":"Address",
-          "documentation":"<p>The shipping address of the order.</p>"
-        },
-        "trackingInformation":{
-          "shape":"TrackingInformationList",
-          "documentation":"<p>The tracking information of the order.</p>"
-        }
-      },
-      "documentation":"<p>Information about an order.</p>"
-    },
-    "OrderFilterKeys":{
-      "type":"string",
-      "enum":[
-        "STATUS",
-        "NETWORK_SITE"
-      ]
-    },
-    "OrderFilterValues":{
-      "type":"list",
-      "member":{"shape":"String"}
-    },
-    "OrderFilters":{
-      "type":"map",
-      "key":{"shape":"OrderFilterKeys"},
-      "value":{"shape":"OrderFilterValues"}
-    },
-    "OrderList":{
-      "type":"list",
-      "member":{"shape":"Order"}
-    },
-    "OrderedResourceDefinition":{
-      "type":"structure",
-      "required":[
-        "count",
-        "type"
-      ],
-      "members":{
-        "commitmentConfiguration":{
-          "shape":"CommitmentConfiguration",
-          "documentation":"<p>The duration and renewal status of the commitment period for each radio unit in the order. Does not show details if the resource type is DEVICE_IDENTIFIER.</p>"
-        },
-        "count":{
-          "shape":"OrderedResourceDefinitionCountInteger",
-          "documentation":"<p>The number of network resources in the order.</p>"
-        },
-        "type":{
-          "shape":"NetworkResourceDefinitionType",
-          "documentation":"<p>The type of network resource in the order.</p>"
-        }
-      },
-      "documentation":"<p>Details of the network resources in the order.</p>"
-    },
-    "OrderedResourceDefinitionCountInteger":{
-      "type":"integer",
-      "box":true,
-      "min":0
-    },
-    "OrderedResourceDefinitions":{
-      "type":"list",
-      "member":{"shape":"OrderedResourceDefinition"}
-    },
-    "PaginationToken":{"type":"string"},
-    "PingResponse":{
-      "type":"structure",
-      "members":{
-        "status":{
-          "shape":"String",
-          "documentation":"<p>Information about the health of the service.</p>"
-        }
-      }
-    },
-    "Position":{
-      "type":"structure",
-      "members":{
-        "elevation":{
-          "shape":"Double",
-          "documentation":"<p>The elevation of the equipment at this position.</p>"
-        },
-        "elevationReference":{
-          "shape":"ElevationReference",
-          "documentation":"<p>The reference point from which elevation is reported.</p>"
-        },
-        "elevationUnit":{
-          "shape":"ElevationUnit",
-          "documentation":"<p>The units used to measure the elevation of the position.</p>"
-        },
-        "latitude":{
-          "shape":"Double",
-          "documentation":"<p>The latitude of the position.</p>"
-        },
-        "longitude":{
-          "shape":"Double",
-          "documentation":"<p>The longitude of the position.</p>"
-        }
-      },
-      "documentation":"<p>Information about a position.</p>"
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "required":[
-        "message",
-        "resourceId",
-        "resourceType"
-      ],
-      "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Description of the error.</p>"
-        },
-        "resourceId":{
-          "shape":"String",
-          "documentation":"<p>Identifier of the affected resource.</p>"
-        },
-        "resourceType":{
-          "shape":"String",
-          "documentation":"<p>Type of the affected resource.</p>"
-        }
-      },
-      "documentation":"<p>The resource was not found.</p>",
-      "error":{
-        "httpStatusCode":404,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ReturnInformation":{
-      "type":"structure",
-      "members":{
-        "replacementOrderArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the replacement order.</p>"
-        },
-        "returnReason":{
-          "shape":"String",
-          "documentation":"<p>The reason for the return. If the return request did not include a reason for the return, this value is null.</p>"
-        },
-        "shippingAddress":{
-          "shape":"Address",
-          "documentation":"<p>The shipping address.</p>"
-        },
-        "shippingLabel":{
-          "shape":"String",
-          "documentation":"<p>The URL of the shipping label. The shipping label is available for download only if the status of the network resource is <code>PENDING_RETURN</code>. For more information, see <a href=\"https://docs.aws.amazon.com/private-networks/latest/userguide/radio-units.html#return-radio-unit\">Return a radio unit</a>.</p>"
-        }
-      },
-      "documentation":"<p>Information about a request to return a network resource.</p>"
-    },
-    "SitePlan":{
-      "type":"structure",
-      "members":{
-        "options":{
-          "shape":"Options",
-          "documentation":"<p>The options of the plan.</p>"
-        },
-        "resourceDefinitions":{
-          "shape":"NetworkResourceDefinitions",
-          "documentation":"<p>The resource definitions of the plan.</p>"
-        }
-      },
-      "documentation":"<p>Information about a site plan.</p>"
-    },
-    "StartNetworkResourceUpdateRequest":{
-      "type":"structure",
-      "required":[
-        "networkResourceArn",
-        "updateType"
-      ],
-      "members":{
-        "commitmentConfiguration":{
-          "shape":"CommitmentConfiguration",
-          "documentation":"<p>Use this action to extend and automatically renew the commitment period for the radio unit. You can do the following:</p> <ul> <li> <p>Change a 60-day commitment to a 1-year or 3-year commitment. The change is immediate and the hourly rate decreases to the rate for the new commitment period.</p> </li> <li> <p>Change a 1-year commitment to a 3-year commitment. The change is immediate and the hourly rate decreases to the rate for the 3-year commitment period.</p> </li> <li> <p>Set a 1-year commitment to automatically renew for an additional 1 year. The hourly rate for the additional year will continue to be the same as your existing 1-year rate.</p> </li> <li> <p>Set a 3-year commitment to automatically renew for an additional 1 year. The hourly rate for the additional year will continue to be the same as your existing 3-year rate.</p> </li> <li> <p>Turn off a previously-enabled automatic renewal on a 1-year or 3-year commitment. You cannot use the automatic-renewal option for a 60-day commitment.</p> </li> </ul> <p>For pricing, see <a href=\"http://aws.amazon.com/private5g/pricing\">Amazon Web Services Private 5G Pricing</a>.</p>"
-        },
-        "networkResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network resource.</p>"
-        },
-        "returnReason":{
-          "shape":"StartNetworkResourceUpdateRequestReturnReasonString",
-          "documentation":"<p>The reason for the return. Providing a reason for a return is optional.</p>"
-        },
-        "shippingAddress":{
-          "shape":"Address",
-          "documentation":"<p>The shipping address. If you don't provide a shipping address when replacing or returning a network resource, we use the address from the original order for the network resource.</p>"
-        },
-        "updateType":{
-          "shape":"UpdateType",
-          "documentation":"<p>The update type.</p> <ul> <li> <p> <code>REPLACE</code> - Submits a request to replace a defective radio unit. We provide a shipping label that you can use for the return process and we ship a replacement radio unit to you.</p> </li> <li> <p> <code>RETURN</code> - Submits a request to return a radio unit that you no longer need. We provide a shipping label that you can use for the return process.</p> </li> <li> <p> <code>COMMITMENT</code> - Submits a request to change or renew the commitment period. If you choose this value, then you must set <a href=\"https://docs.aws.amazon.com/private-networks/latest/APIReference/API_StartNetworkResourceUpdate.html#privatenetworks-StartNetworkResourceUpdate-request-commitmentConfiguration\"> <code>commitmentConfiguration</code> </a>.</p> </li> </ul>"
-        }
-      }
-    },
-    "StartNetworkResourceUpdateRequestReturnReasonString":{
-      "type":"string",
-      "max":1000,
-      "min":0
-    },
-    "StartNetworkResourceUpdateResponse":{
-      "type":"structure",
-      "members":{
-        "networkResource":{
-          "shape":"NetworkResource",
-          "documentation":"<p>The network resource.</p>"
-        }
-      }
-    },
-    "String":{"type":"string"},
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"^(?!aws:)[^\\x00-\\x1f\\x22]+$"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":50,
-      "min":1,
-      "sensitive":true
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":50,
-      "min":1,
-      "sensitive":true
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tags"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p> The Amazon Resource Name (ARN) of the resource. </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The tags to add to the resource.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0,
-      "pattern":"^[^\\x00-\\x1f\\x22]*$"
-    },
-    "ThrottlingException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"String"}
-      },
-      "documentation":"<p> The request was denied due to request throttling. </p>",
-      "error":{
-        "httpStatusCode":429,
-        "senderFault":true
-      },
-      "exception":true,
-      "retryable":{"throttling":true}
-    },
-    "Timestamp":{
-      "type":"timestamp",
-      "timestampFormat":"iso8601"
-    },
-    "TrackingInformation":{
-      "type":"structure",
-      "members":{
-        "trackingNumber":{
-          "shape":"String",
-          "documentation":"<p>The tracking number of the shipment.</p>"
-        }
-      },
-      "documentation":"<p>Information about tracking a shipment.</p>"
-    },
-    "TrackingInformationList":{
-      "type":"list",
-      "member":{"shape":"TrackingInformation"}
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tagKeys"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>The tag keys.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateNetworkSitePlanRequest":{
-      "type":"structure",
-      "required":[
-        "networkSiteArn",
-        "pendingPlan"
-      ],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>"
-        },
-        "pendingPlan":{
-          "shape":"SitePlan",
-          "documentation":"<p>The pending plan.</p>"
-        }
-      }
-    },
-    "UpdateNetworkSiteRequest":{
-      "type":"structure",
-      "required":["networkSiteArn"],
-      "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html\">How to ensure idempotency</a>.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description.</p>"
-        },
-        "networkSiteArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the network site.</p>"
-        }
-      }
-    },
-    "UpdateNetworkSiteResponse":{
-      "type":"structure",
-      "members":{
-        "networkSite":{
-          "shape":"NetworkSite",
-          "documentation":"<p>Information about the network site.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p> The network site tags. </p>"
-        }
-      }
-    },
-    "UpdateType":{
-      "type":"string",
-      "enum":[
-        "REPLACE",
-        "RETURN",
-        "COMMITMENT"
-      ]
-    },
-    "ValidationException":{
-      "type":"structure",
-      "required":[
-        "message",
-        "reason"
-      ],
-      "members":{
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The list of fields that caused the error, if applicable.</p>"
-        },
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Description of the error.</p>"
-        },
-        "reason":{
-          "shape":"ValidationExceptionReason",
-          "documentation":"<p>Reason the request failed validation.</p>"
-        }
-      },
-      "documentation":"<p>The request failed validation.</p>",
-      "error":{
-        "httpStatusCode":400,
-        "senderFault":true
-      },
-      "exception":true
-    },
-    "ValidationExceptionField":{
-      "type":"structure",
-      "required":[
-        "message",
-        "name"
-      ],
-      "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The message about the validation failure.</p>"
-        },
-        "name":{
-          "shape":"String",
-          "documentation":"<p>The field name that failed validation.</p>"
-        }
-      },
-      "documentation":"<p>Information about a field that failed validation.</p>"
-    },
-    "ValidationExceptionFieldList":{
-      "type":"list",
-      "member":{"shape":"ValidationExceptionField"}
-    },
-    "ValidationExceptionReason":{
-      "type":"string",
-      "enum":[
-        "UNKNOWN_OPERATION",
-        "CANNOT_PARSE",
-        "CANNOT_ASSUME_ROLE",
-        "FIELD_VALIDATION_FAILED",
-        "OTHER"
-      ]
-    }
-  },
-  "documentation":"<p>Amazon Web Services Private 5G is a managed service that makes it easy to deploy, operate, and scale your own private mobile network at your on-premises location. Private 5G provides the pre-configured hardware and software for mobile networks, helps automate setup, and scales capacity on demand to support additional devices as needed.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/proton/2020-07-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/proton/2020-07-20/service-2.json 2.31.35-1/awscli/botocore/data/proton/2020-07-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/proton/2020-07-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/proton/2020-07-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,6 +30,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>In a management account, an environment account connection request is accepted. When the environment account connection request is accepted, Proton can use the associated IAM role to provision environment infrastructure resources in the associated environment account.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CancelComponentDeployment":{
@@ -48,7 +50,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Attempts to cancel a component deployment (for a component that is in the <code>IN_PROGRESS</code> deployment status).</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Attempts to cancel a component deployment (for a component that is in the <code>IN_PROGRESS</code> deployment status).</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "CancelEnvironmentDeployment":{
       "name":"CancelEnvironmentDeployment",
@@ -66,7 +70,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Attempts to cancel an environment deployment on an <a>UpdateEnvironment</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-update.html\">Update an environment</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateEnvironment</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>"
+      "documentation":"<p>Attempts to cancel an environment deployment on an <a>UpdateEnvironment</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-update.html\">Update an environment</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateEnvironment</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "CancelServiceInstanceDeployment":{
       "name":"CancelServiceInstanceDeployment",
@@ -84,7 +90,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Attempts to cancel a service instance deployment on an <a>UpdateServiceInstance</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-svc-instance-update.html\">Update a service instance</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateServiceInstance</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>"
+      "documentation":"<p>Attempts to cancel a service instance deployment on an <a>UpdateServiceInstance</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-svc-instance-update.html\">Update a service instance</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateServiceInstance</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "CancelServicePipelineDeployment":{
       "name":"CancelServicePipelineDeployment",
@@ -102,7 +110,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Attempts to cancel a service pipeline deployment on an <a>UpdateServicePipeline</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-svc-pipeline-update.html\">Update a service pipeline</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateServicePipeline</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>"
+      "documentation":"<p>Attempts to cancel a service pipeline deployment on an <a>UpdateServicePipeline</a> action, if the deployment is <code>IN_PROGRESS</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-svc-pipeline-update.html\">Update a service pipeline</a> in the <i>Proton User guide</i>.</p> <p>The following list includes potential cancellation scenarios.</p> <ul> <li> <p>If the cancellation attempt succeeds, the resulting deployment state is <code>CANCELLED</code>.</p> </li> <li> <p>If the cancellation attempt fails, the resulting deployment state is <code>FAILED</code>.</p> </li> <li> <p>If the current <a>UpdateServicePipeline</a> action succeeds before the cancellation attempt starts, the resulting deployment state is <code>SUCCEEDED</code> and the cancellation attempt has no effect.</p> </li> </ul>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "CreateComponent":{
       "name":"CreateComponent",
@@ -122,6 +132,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create an Proton component. A component is an infrastructure extension for a service instance.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateEnvironment":{
@@ -142,6 +154,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deploy a new environment. An Proton environment is created from an environment template that defines infrastructure and resources that can be shared across services.</p> <p class=\"title\"> <b>You can provision environments using the following methods:</b> </p> <ul> <li> <p>Amazon Web Services-managed provisioning: Proton makes direct calls to provision your resources.</p> </li> <li> <p>Self-managed provisioning: Proton makes pull requests on your repository to provide compiled infrastructure as code (IaC) files that your IaC engine uses to provision resources.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-environments.html\">Environments</a> and <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html\">Provisioning methods</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateEnvironmentAccountConnection":{
@@ -161,6 +175,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create an environment account connection in an environment account so that environment infrastructure resources can be provisioned in the environment account from a management account.</p> <p>An environment account connection is a secure bi-directional connection between a <i>management account</i> and an <i>environment account</i> that maintains authorization and permissions. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateEnvironmentTemplate":{
@@ -180,6 +196,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create an environment template for Proton. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-templates.html\">Environment Templates</a> in the <i>Proton User Guide</i>.</p> <p>You can create an environment template in one of the two following ways:</p> <ul> <li> <p>Register and publish a <i>standard</i> environment template that instructs Proton to deploy and manage environment infrastructure.</p> </li> <li> <p>Register and publish a <i>customer managed</i> environment template that connects Proton to your existing provisioned infrastructure that you manage. Proton <i>doesn't</i> manage your existing provisioned infrastructure. To create an environment template for customer provisioned and managed infrastructure, include the <code>provisioning</code> parameter and set the value to <code>CUSTOMER_MANAGED</code>. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/template-create.html\">Register and publish an environment template</a> in the <i>Proton User Guide</i>.</p> </li> </ul>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateEnvironmentTemplateVersion":{
@@ -200,6 +218,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create a new major or minor version of an environment template. A major version of an environment template is a version that <i>isn't</i> backwards compatible. A minor version of an environment template is a version that's backwards compatible within its major version.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateRepository":{
@@ -219,6 +239,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create and register a link to a repository. Proton uses the link to repeatedly access the repository, to either push to it (self-managed provisioning) or pull from it (template sync). You can share a linked repository across multiple resources (like environments using self-managed provisioning, or synced templates). When you create a repository link, Proton creates a <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/using-service-linked-roles.html\">service-linked role</a> for you.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html#ag-works-prov-methods-self\">Self-managed provisioning</a>, <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-template-authoring.html#ag-template-bundles\">Template bundles</a>, and <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-template-sync-configs.html\">Template sync configurations</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateService":{
@@ -239,6 +261,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create an Proton service. An Proton service is an instantiation of a service template and often includes several service instances and pipeline. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-services.html\">Services</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateServiceInstance":{
@@ -258,6 +282,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create a service instance.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateServiceSyncConfig":{
@@ -277,6 +303,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create the Proton Ops configuration file.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateServiceTemplate":{
@@ -296,6 +324,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create a service template. The administrator creates a service template to define standardized infrastructure and an optional CI/CD service pipeline. Developers, in turn, select the service template from Proton. If the selected service template includes a service pipeline definition, they provide a link to their source code repository. Proton then deploys and manages the infrastructure defined by the selected service template. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-templates.html\">Proton templates</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateServiceTemplateVersion":{
@@ -316,6 +346,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Create a new major or minor version of a service template. A major version of a service template is a version that <i>isn't</i> backward compatible. A minor version of a service template is a version that's backward compatible within its major version.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "CreateTemplateSyncConfig":{
@@ -335,6 +367,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Set up a template to create new template versions automatically by tracking a linked repository. A linked repository is a repository that has been registered with Proton. For more information, see <a>CreateRepository</a>.</p> <p>When a commit is pushed to your linked repository, Proton checks for changes to your repository template bundles. If it detects a template bundle change, a new major or minor version of its template is created, if the version doesn’t already exist. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-template-sync-configs.html\">Template sync configurations</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteComponent":{
@@ -354,6 +388,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete an Proton component resource.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteDeployment":{
@@ -372,6 +408,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete the deployment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteEnvironment":{
@@ -391,6 +429,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete an environment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteEnvironmentAccountConnection":{
@@ -410,6 +450,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>In an environment account, delete an environment account connection.</p> <p>After you delete an environment account connection that’s in use by an Proton environment, Proton <i>can’t</i> manage the environment infrastructure resources until a new environment account connection is accepted for the environment account and associated environment. You're responsible for cleaning up provisioned resources that remain without an environment connection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteEnvironmentTemplate":{
@@ -429,6 +471,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>If no other major or minor versions of an environment template exist, delete the environment template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteEnvironmentTemplateVersion":{
@@ -448,6 +492,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>If no other minor versions of an environment template exist, delete a major version of the environment template if it's not the <code>Recommended</code> version. Delete the <code>Recommended</code> version of the environment template if no other major versions or minor versions of the environment template exist. A major version of an environment template is a version that's not backward compatible.</p> <p>Delete a minor version of an environment template if it <i>isn't</i> the <code>Recommended</code> version. Delete a <code>Recommended</code> minor version of the environment template if no other minor versions of the environment template exist. A minor version of an environment template is a version that's backward compatible.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteRepository":{
@@ -467,6 +513,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>De-register and unlink your repository.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteService":{
@@ -486,6 +534,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete a service, with its instances and pipeline.</p> <note> <p>You can't delete a service if it has any service instances that have components attached to them.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p> </note>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteServiceSyncConfig":{
@@ -505,6 +555,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete the Proton Ops file.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteServiceTemplate":{
@@ -524,6 +576,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>If no other major or minor versions of the service template exist, delete the service template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteServiceTemplateVersion":{
@@ -543,6 +597,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>If no other minor versions of a service template exist, delete a major version of the service template if it's not the <code>Recommended</code> version. Delete the <code>Recommended</code> version of the service template if no other major versions or minor versions of the service template exist. A major version of a service template is a version that <i>isn't</i> backwards compatible.</p> <p>Delete a minor version of a service template if it's not the <code>Recommended</code> version. Delete a <code>Recommended</code> minor version of the service template if no other minor versions of the service template exist. A minor version of a service template is a version that's backwards compatible.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "DeleteTemplateSyncConfig":{
@@ -562,6 +618,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Delete a template sync configuration.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "GetAccountSettings":{
@@ -579,7 +637,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detail data for Proton account-wide settings.</p>"
+      "documentation":"<p>Get detail data for Proton account-wide settings.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetComponent":{
       "name":"GetComponent",
@@ -596,7 +656,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a component.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Get detailed data for a component.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetDeployment":{
       "name":"GetDeployment",
@@ -613,7 +675,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a deployment.</p>"
+      "documentation":"<p>Get detailed data for a deployment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetEnvironment":{
       "name":"GetEnvironment",
@@ -630,7 +694,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for an environment.</p>"
+      "documentation":"<p>Get detailed data for an environment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetEnvironmentAccountConnection":{
       "name":"GetEnvironmentAccountConnection",
@@ -647,7 +713,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>In an environment account, get the detailed data for an environment account connection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>"
+      "documentation":"<p>In an environment account, get the detailed data for an environment account connection.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetEnvironmentTemplate":{
       "name":"GetEnvironmentTemplate",
@@ -664,7 +732,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for an environment template.</p>"
+      "documentation":"<p>Get detailed data for an environment template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetEnvironmentTemplateVersion":{
       "name":"GetEnvironmentTemplateVersion",
@@ -681,7 +751,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a major or minor version of an environment template.</p>"
+      "documentation":"<p>Get detailed data for a major or minor version of an environment template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetRepository":{
       "name":"GetRepository",
@@ -698,7 +770,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detail data for a linked repository.</p>"
+      "documentation":"<p>Get detail data for a linked repository.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetRepositorySyncStatus":{
       "name":"GetRepositorySyncStatus",
@@ -715,7 +789,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get the sync status of a repository used for Proton template sync. For more information about template sync, see .</p> <note> <p>A repository sync status isn't tied to the Proton Repository resource (or any other Proton resource). Therefore, tags on an Proton Repository resource have no effect on this action. Specifically, you can't use these tags to control access to this action using Attribute-based access control (ABAC).</p> <p>For more information about ABAC, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-tags\">ABAC</a> in the <i>Proton User Guide</i>.</p> </note>"
+      "documentation":"<p>Get the sync status of a repository used for Proton template sync. For more information about template sync, see .</p> <note> <p>A repository sync status isn't tied to the Proton Repository resource (or any other Proton resource). Therefore, tags on an Proton Repository resource have no effect on this action. Specifically, you can't use these tags to control access to this action using Attribute-based access control (ABAC).</p> <p>For more information about ABAC, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-tags\">ABAC</a> in the <i>Proton User Guide</i>.</p> </note>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetResourcesSummary":{
       "name":"GetResourcesSummary",
@@ -731,7 +807,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get counts of Proton resources.</p> <p>For infrastructure-provisioning resources (environments, services, service instances, pipelines), the action returns staleness counts. A resource is stale when it's behind the recommended version of the Proton template that it uses and it needs an update to become current.</p> <p>The action returns staleness counts (counts of resources that are up-to-date, behind a template major version, or behind a template minor version), the total number of resources, and the number of resources that are in a failed state, grouped by resource type. Components, environments, and service templates return less information - see the <code>components</code>, <code>environments</code>, and <code>serviceTemplates</code> field descriptions.</p> <p>For context, the action also returns the total number of each type of Proton template in the Amazon Web Services account.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/monitoring-dashboard.html\">Proton dashboard</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Get counts of Proton resources.</p> <p>For infrastructure-provisioning resources (environments, services, service instances, pipelines), the action returns staleness counts. A resource is stale when it's behind the recommended version of the Proton template that it uses and it needs an update to become current.</p> <p>The action returns staleness counts (counts of resources that are up-to-date, behind a template major version, or behind a template minor version), the total number of resources, and the number of resources that are in a failed state, grouped by resource type. Components, environments, and service templates return less information - see the <code>components</code>, <code>environments</code>, and <code>serviceTemplates</code> field descriptions.</p> <p>For context, the action also returns the total number of each type of Proton template in the Amazon Web Services account.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/monitoring-dashboard.html\">Proton dashboard</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetService":{
       "name":"GetService",
@@ -748,7 +826,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a service.</p>"
+      "documentation":"<p>Get detailed data for a service.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceInstance":{
       "name":"GetServiceInstance",
@@ -765,7 +845,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a service instance. A service instance is an instantiation of service template and it runs in a specific environment.</p>"
+      "documentation":"<p>Get detailed data for a service instance. A service instance is an instantiation of service template and it runs in a specific environment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceInstanceSyncStatus":{
       "name":"GetServiceInstanceSyncStatus",
@@ -782,7 +864,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get the status of the synced service instance.</p>"
+      "documentation":"<p>Get the status of the synced service instance.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceSyncBlockerSummary":{
       "name":"GetServiceSyncBlockerSummary",
@@ -799,7 +883,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for the service sync blocker summary.</p>"
+      "documentation":"<p>Get detailed data for the service sync blocker summary.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceSyncConfig":{
       "name":"GetServiceSyncConfig",
@@ -816,7 +902,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed information for the service sync configuration.</p>"
+      "documentation":"<p>Get detailed information for the service sync configuration.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceTemplate":{
       "name":"GetServiceTemplate",
@@ -833,7 +921,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a service template.</p>"
+      "documentation":"<p>Get detailed data for a service template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetServiceTemplateVersion":{
       "name":"GetServiceTemplateVersion",
@@ -850,7 +940,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detailed data for a major or minor version of a service template.</p>"
+      "documentation":"<p>Get detailed data for a major or minor version of a service template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetTemplateSyncConfig":{
       "name":"GetTemplateSyncConfig",
@@ -867,7 +959,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get detail data for a template sync configuration.</p>"
+      "documentation":"<p>Get detail data for a template sync configuration.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "GetTemplateSyncStatus":{
       "name":"GetTemplateSyncStatus",
@@ -884,7 +978,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get the status of a template sync.</p>"
+      "documentation":"<p>Get the status of a template sync.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListComponentOutputs":{
       "name":"ListComponentOutputs",
@@ -901,7 +997,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get a list of component Infrastructure as Code (IaC) outputs.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Get a list of component Infrastructure as Code (IaC) outputs.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListComponentProvisionedResources":{
       "name":"ListComponentProvisionedResources",
@@ -918,7 +1016,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List provisioned resources for a component with details.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>List provisioned resources for a component with details.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListComponents":{
       "name":"ListComponents",
@@ -934,7 +1034,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List components with summary data. You can filter the result list by environment, service, or a single service instance.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>List components with summary data. You can filter the result list by environment, service, or a single service instance.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListDeployments":{
       "name":"ListDeployments",
@@ -951,7 +1053,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List deployments. You can filter the result list by environment, service, or a single service instance.</p>"
+      "documentation":"<p>List deployments. You can filter the result list by environment, service, or a single service instance.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironmentAccountConnections":{
       "name":"ListEnvironmentAccountConnections",
@@ -967,7 +1071,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>View a list of environment account connections.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>"
+      "documentation":"<p>View a list of environment account connections.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironmentOutputs":{
       "name":"ListEnvironmentOutputs",
@@ -984,7 +1090,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List the infrastructure as code outputs for your environment.</p>"
+      "documentation":"<p>List the infrastructure as code outputs for your environment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironmentProvisionedResources":{
       "name":"ListEnvironmentProvisionedResources",
@@ -1001,7 +1109,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List the provisioned resources for your environment.</p>"
+      "documentation":"<p>List the provisioned resources for your environment.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironmentTemplateVersions":{
       "name":"ListEnvironmentTemplateVersions",
@@ -1018,7 +1128,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List major or minor versions of an environment template with detail data.</p>"
+      "documentation":"<p>List major or minor versions of an environment template with detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironmentTemplates":{
       "name":"ListEnvironmentTemplates",
@@ -1034,7 +1146,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List environment templates.</p>"
+      "documentation":"<p>List environment templates.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListEnvironments":{
       "name":"ListEnvironments",
@@ -1051,7 +1165,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List environments with detail data summaries.</p>"
+      "documentation":"<p>List environments with detail data summaries.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListRepositories":{
       "name":"ListRepositories",
@@ -1068,7 +1184,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List linked repositories with detail data.</p>"
+      "documentation":"<p>List linked repositories with detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListRepositorySyncDefinitions":{
       "name":"ListRepositorySyncDefinitions",
@@ -1084,7 +1202,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List repository sync definitions with detail data.</p>"
+      "documentation":"<p>List repository sync definitions with detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServiceInstanceOutputs":{
       "name":"ListServiceInstanceOutputs",
@@ -1101,7 +1221,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get a list service of instance Infrastructure as Code (IaC) outputs.</p>"
+      "documentation":"<p>Get a list service of instance Infrastructure as Code (IaC) outputs.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServiceInstanceProvisionedResources":{
       "name":"ListServiceInstanceProvisionedResources",
@@ -1118,7 +1240,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List provisioned resources for a service instance with details.</p>"
+      "documentation":"<p>List provisioned resources for a service instance with details.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServiceInstances":{
       "name":"ListServiceInstances",
@@ -1135,7 +1259,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List service instances with summary data. This action lists service instances of all services in the Amazon Web Services account.</p>"
+      "documentation":"<p>List service instances with summary data. This action lists service instances of all services in the Amazon Web Services account.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServicePipelineOutputs":{
       "name":"ListServicePipelineOutputs",
@@ -1152,7 +1278,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get a list of service pipeline Infrastructure as Code (IaC) outputs.</p>"
+      "documentation":"<p>Get a list of service pipeline Infrastructure as Code (IaC) outputs.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServicePipelineProvisionedResources":{
       "name":"ListServicePipelineProvisionedResources",
@@ -1169,7 +1297,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List provisioned resources for a service and pipeline with details.</p>"
+      "documentation":"<p>List provisioned resources for a service and pipeline with details.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServiceTemplateVersions":{
       "name":"ListServiceTemplateVersions",
@@ -1186,7 +1316,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List major or minor versions of a service template with detail data.</p>"
+      "documentation":"<p>List major or minor versions of a service template with detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServiceTemplates":{
       "name":"ListServiceTemplates",
@@ -1202,7 +1334,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List service templates with detail data.</p>"
+      "documentation":"<p>List service templates with detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListServices":{
       "name":"ListServices",
@@ -1218,7 +1352,9 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List services with summaries of detail data.</p>"
+      "documentation":"<p>List services with summaries of detail data.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1235,7 +1371,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List tags for a resource. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/resources.html\">Proton resources and tagging</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>List tags for a resource. For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/resources.html\">Proton resources and tagging</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "NotifyResourceDeploymentStatusChange":{
       "name":"NotifyResourceDeploymentStatusChange",
@@ -1254,7 +1392,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Notify Proton of status changes to a provisioned resource when you use self-managed provisioning.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html#ag-works-prov-methods-self\">Self-managed provisioning</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Notify Proton of status changes to a provisioned resource when you use self-managed provisioning.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html#ag-works-prov-methods-self\">Self-managed provisioning</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "RejectEnvironmentAccountConnection":{
       "name":"RejectEnvironmentAccountConnection",
@@ -1273,6 +1413,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>In a management account, reject an environment account connection from another environment account.</p> <p>After you reject an environment account connection request, you <i>can't</i> accept or use the rejected environment account connection.</p> <p>You <i>can’t</i> reject an environment account connection that's connected to an environment.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "TagResource":{
@@ -1292,6 +1434,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Tag a resource. A tag is a key-value pair of metadata that you associate with an Proton resource.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/resources.html\">Proton resources and tagging</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "UntagResource":{
@@ -1311,6 +1455,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Remove a customer tag from a resource. A tag is a key-value pair of metadata associated with an Proton resource.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/resources.html\">Proton resources and tagging</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "UpdateAccountSettings":{
@@ -1328,7 +1474,9 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update Proton settings that are used for multiple services in the Amazon Web Services account.</p>"
+      "documentation":"<p>Update Proton settings that are used for multiple services in the Amazon Web Services account.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateComponent":{
       "name":"UpdateComponent",
@@ -1347,7 +1495,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a component.</p> <p>There are a few modes for updating a component. The <code>deploymentType</code> field defines the mode.</p> <note> <p>You can't update a component while its deployment status, or the deployment status of a service instance attached to it, is <code>IN_PROGRESS</code>.</p> </note> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>"
+      "documentation":"<p>Update a component.</p> <p>There are a few modes for updating a component. The <code>deploymentType</code> field defines the mode.</p> <note> <p>You can't update a component while its deployment status, or the deployment status of a service instance attached to it, is <code>IN_PROGRESS</code>.</p> </note> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateEnvironment":{
       "name":"UpdateEnvironment",
@@ -1365,7 +1515,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update an environment.</p> <p>If the environment is associated with an environment account connection, <i>don't</i> update or include the <code>protonServiceRoleArn</code> and <code>provisioningRepository</code> parameter to update or connect to an environment account connection.</p> <p>You can only update to a new environment account connection if that connection was created in the same environment account that the current environment account connection was created in. The account connection must also be associated with the current environment.</p> <p>If the environment <i>isn't</i> associated with an environment account connection, <i>don't</i> update or include the <code>environmentAccountConnectionId</code> parameter. You <i>can't</i> update or connect the environment to an environment account connection if it <i>isn't</i> already associated with an environment connection.</p> <p>You can update either the <code>environmentAccountConnectionId</code> or <code>protonServiceRoleArn</code> parameter and value. You can’t update both.</p> <p>If the environment was configured for Amazon Web Services-managed provisioning, omit the <code>provisioningRepository</code> parameter.</p> <p>If the environment was configured for self-managed provisioning, specify the <code>provisioningRepository</code> parameter and omit the <code>protonServiceRoleArn</code> and <code>environmentAccountConnectionId</code> parameters.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-environments.html\">Environments</a> and <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html\">Provisioning methods</a> in the <i>Proton User Guide</i>.</p> <p>There are four modes for updating an environment. The <code>deploymentType</code> field defines the mode.</p> <dl> <dt/> <dd> <p> <code>NONE</code> </p> <p>In this mode, a deployment <i>doesn't</i> occur. Only the requested metadata parameters are updated.</p> </dd> <dt/> <dd> <p> <code>CURRENT_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the new spec that you provide. Only requested parameters are updated. <i>Don’t</i> include minor or major version parameters when you use this <code>deployment-type</code>.</p> </dd> <dt/> <dd> <p> <code>MINOR_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the published, recommended (latest) minor version of the current major version in use, by default. You can also specify a different minor version of the current major version in use.</p> </dd> <dt/> <dd> <p> <code>MAJOR_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the published, recommended (latest) major and minor version of the current template, by default. You can also specify a different major version that's higher than the major version in use and a minor version.</p> </dd> </dl>"
+      "documentation":"<p>Update an environment.</p> <p>If the environment is associated with an environment account connection, <i>don't</i> update or include the <code>protonServiceRoleArn</code> and <code>provisioningRepository</code> parameter to update or connect to an environment account connection.</p> <p>You can only update to a new environment account connection if that connection was created in the same environment account that the current environment account connection was created in. The account connection must also be associated with the current environment.</p> <p>If the environment <i>isn't</i> associated with an environment account connection, <i>don't</i> update or include the <code>environmentAccountConnectionId</code> parameter. You <i>can't</i> update or connect the environment to an environment account connection if it <i>isn't</i> already associated with an environment connection.</p> <p>You can update either the <code>environmentAccountConnectionId</code> or <code>protonServiceRoleArn</code> parameter and value. You can’t update both.</p> <p>If the environment was configured for Amazon Web Services-managed provisioning, omit the <code>provisioningRepository</code> parameter.</p> <p>If the environment was configured for self-managed provisioning, specify the <code>provisioningRepository</code> parameter and omit the <code>protonServiceRoleArn</code> and <code>environmentAccountConnectionId</code> parameters.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-environments.html\">Environments</a> and <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-works-prov-methods.html\">Provisioning methods</a> in the <i>Proton User Guide</i>.</p> <p>There are four modes for updating an environment. The <code>deploymentType</code> field defines the mode.</p> <dl> <dt/> <dd> <p> <code>NONE</code> </p> <p>In this mode, a deployment <i>doesn't</i> occur. Only the requested metadata parameters are updated.</p> </dd> <dt/> <dd> <p> <code>CURRENT_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the new spec that you provide. Only requested parameters are updated. <i>Don’t</i> include minor or major version parameters when you use this <code>deployment-type</code>.</p> </dd> <dt/> <dd> <p> <code>MINOR_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the published, recommended (latest) minor version of the current major version in use, by default. You can also specify a different minor version of the current major version in use.</p> </dd> <dt/> <dd> <p> <code>MAJOR_VERSION</code> </p> <p>In this mode, the environment is deployed and updated with the published, recommended (latest) major and minor version of the current template, by default. You can also specify a different major version that's higher than the major version in use and a minor version.</p> </dd> </dl>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateEnvironmentAccountConnection":{
       "name":"UpdateEnvironmentAccountConnection",
@@ -1384,6 +1536,8 @@
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>In an environment account, update an environment account connection to use a new IAM role.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html\">Environment account connections</a> in the <i>Proton User guide</i>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers.",
       "idempotent":true
     },
     "UpdateEnvironmentTemplate":{
@@ -1402,7 +1556,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update an environment template.</p>"
+      "documentation":"<p>Update an environment template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateEnvironmentTemplateVersion":{
       "name":"UpdateEnvironmentTemplateVersion",
@@ -1420,7 +1576,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a major or minor version of an environment template.</p>"
+      "documentation":"<p>Update a major or minor version of an environment template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateService":{
       "name":"UpdateService",
@@ -1439,7 +1597,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Edit a service description or use a spec to add and delete service instances.</p> <note> <p>Existing service instances and the service pipeline <i>can't</i> be edited using this API. They can only be deleted.</p> </note> <p>Use the <code>description</code> parameter to modify the description.</p> <p>Edit the <code>spec</code> parameter to add or delete instances.</p> <note> <p>You can't delete a service instance (remove it from the spec) if it has an attached component.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p> </note>"
+      "documentation":"<p>Edit a service description or use a spec to add and delete service instances.</p> <note> <p>Existing service instances and the service pipeline <i>can't</i> be edited using this API. They can only be deleted.</p> </note> <p>Use the <code>description</code> parameter to modify the description.</p> <p>Edit the <code>spec</code> parameter to add or delete instances.</p> <note> <p>You can't delete a service instance (remove it from the spec) if it has an attached component.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p> </note>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServiceInstance":{
       "name":"UpdateServiceInstance",
@@ -1457,7 +1617,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a service instance.</p> <p>There are a few modes for updating a service instance. The <code>deploymentType</code> field defines the mode.</p> <note> <p>You can't update a service instance while its deployment status, or the deployment status of a component attached to it, is <code>IN_PROGRESS</code>.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p> </note>"
+      "documentation":"<p>Update a service instance.</p> <p>There are a few modes for updating a service instance. The <code>deploymentType</code> field defines the mode.</p> <note> <p>You can't update a service instance while its deployment status, or the deployment status of a component attached to it, is <code>IN_PROGRESS</code>.</p> <p>For more information about components, see <a href=\"https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html\">Proton components</a> in the <i>Proton User Guide</i>.</p> </note>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServicePipeline":{
       "name":"UpdateServicePipeline",
@@ -1475,7 +1637,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update the service pipeline.</p> <p>There are four modes for updating a service pipeline. The <code>deploymentType</code> field defines the mode.</p> <dl> <dt/> <dd> <p> <code>NONE</code> </p> <p>In this mode, a deployment <i>doesn't</i> occur. Only the requested metadata parameters are updated.</p> </dd> <dt/> <dd> <p> <code>CURRENT_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the new spec that you provide. Only requested parameters are updated. <i>Don’t</i> include major or minor version parameters when you use this <code>deployment-type</code>.</p> </dd> <dt/> <dd> <p> <code>MINOR_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the published, recommended (latest) minor version of the current major version in use, by default. You can specify a different minor version of the current major version in use.</p> </dd> <dt/> <dd> <p> <code>MAJOR_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the published, recommended (latest) major and minor version of the current template by default. You can specify a different major version that's higher than the major version in use and a minor version.</p> </dd> </dl>"
+      "documentation":"<p>Update the service pipeline.</p> <p>There are four modes for updating a service pipeline. The <code>deploymentType</code> field defines the mode.</p> <dl> <dt/> <dd> <p> <code>NONE</code> </p> <p>In this mode, a deployment <i>doesn't</i> occur. Only the requested metadata parameters are updated.</p> </dd> <dt/> <dd> <p> <code>CURRENT_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the new spec that you provide. Only requested parameters are updated. <i>Don’t</i> include major or minor version parameters when you use this <code>deployment-type</code>.</p> </dd> <dt/> <dd> <p> <code>MINOR_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the published, recommended (latest) minor version of the current major version in use, by default. You can specify a different minor version of the current major version in use.</p> </dd> <dt/> <dd> <p> <code>MAJOR_VERSION</code> </p> <p>In this mode, the service pipeline is deployed and updated with the published, recommended (latest) major and minor version of the current template by default. You can specify a different major version that's higher than the major version in use and a minor version.</p> </dd> </dl>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServiceSyncBlocker":{
       "name":"UpdateServiceSyncBlocker",
@@ -1493,7 +1657,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update the service sync blocker by resolving it.</p>"
+      "documentation":"<p>Update the service sync blocker by resolving it.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServiceSyncConfig":{
       "name":"UpdateServiceSyncConfig",
@@ -1511,7 +1677,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update the Proton Ops config file.</p>"
+      "documentation":"<p>Update the Proton Ops config file.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServiceTemplate":{
       "name":"UpdateServiceTemplate",
@@ -1529,7 +1697,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a service template.</p>"
+      "documentation":"<p>Update a service template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateServiceTemplateVersion":{
       "name":"UpdateServiceTemplateVersion",
@@ -1547,7 +1717,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update a major or minor version of a service template.</p>"
+      "documentation":"<p>Update a major or minor version of a service template.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     },
     "UpdateTemplateSyncConfig":{
       "name":"UpdateTemplateSyncConfig",
@@ -1565,7 +1737,9 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Update template sync configuration parameters, except for the <code>templateName</code> and <code>templateType</code>. Repository details (branch, name, and provider) should be of a linked repository. A linked repository is a repository that has been registered with Proton. For more information, see <a>CreateRepository</a>.</p>"
+      "documentation":"<p>Update template sync configuration parameters, except for the <code>templateName</code> and <code>templateType</code>. Repository details (branch, name, and provider) should be of a linked repository. A linked repository is a repository that has been registered with Proton. For more information, see <a>CreateRepository</a>.</p>",
+      "deprecated":true,
+      "deprecatedMessage":"AWS Proton is not accepting new customers."
     }
   },
   "shapes":{
diff -pruN 2.23.6-1/awscli/botocore/data/qapps/2023-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/qapps/2023-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/qapps/2023-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qapps/2023-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/qapps/2023-11-27/service-2.json 2.31.35-1/awscli/botocore/data/qapps/2023-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/qapps/2023-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qapps/2023-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -145,7 +145,7 @@
         {"shape":"UnauthorizedException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Creates a presigned URL for an S3 POST operation to upload a file. You can use this URL to set a default file for a <code>FileUploadCard</code> in a Q App definition or to provide a file for a single Q App run. The <code>scope</code> parameter determines how the file will be used, either at the app definition level or the app session level.</p>"
+      "documentation":"<p>Creates a presigned URL for an S3 POST operation to upload a file. You can use this URL to set a default file for a <code>FileUploadCard</code> in a Q App definition or to provide a file for a single Q App run. The <code>scope</code> parameter determines how the file will be used, either at the app definition level or the app session level.</p> <note> <p>The IAM permissions are derived from the <code>qapps:ImportDocument</code> action. For more information on the IAM policy for Amazon Q Apps, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/deploy-q-apps-iam-permissions.html\">IAM permissions for using Amazon Q Apps</a>.</p> </note>"
     },
     "CreateQApp":{
       "name":"CreateQApp",
@@ -1648,8 +1648,7 @@
     },
     "Document":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "DocumentAttribute":{
@@ -1927,8 +1926,7 @@
     },
     "FormInputCardMetadataSchema":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "GetLibraryItemInput":{
@@ -3283,8 +3281,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3442,8 +3439,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLibraryItemInput":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,20 +5,20 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.json 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -107,6 +107,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "relevantContent"
+    },
+    "ListSubscriptions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "subscriptions"
+    },
+    "ListChatResponseConfigurations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "chatResponseConfigurations"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,9 +6,11 @@
                 "non_aggregate_keys": [
                     "responseScope",
                     "blockedPhrases",
-                    "creatorModeConfiguration"
+                    "creatorModeConfiguration",
+                    "orchestrationConfiguration",
+                    "hallucinationReductionConfiguration"
                 ]
             }
         }
     }
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/service-2.json 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/qbusiness/2023-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qbusiness/2023-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,15 +24,15 @@
       "input":{"shape":"AssociatePermissionRequest"},
       "output":{"shape":"AssociatePermissionResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Adds or updates a permission policy for a Q Business application, allowing cross-account access for an ISV. This operation creates a new policy statement for the specified Q Business application. The policy statement defines the IAM actions that the ISV is allowed to perform on the Q Business application's resources.</p>"
+      "documentation":"<p>Adds or updates a permission policy for a Amazon Q Business application, allowing cross-account access for an ISV. This operation creates a new policy statement for the specified Amazon Q Business application. The policy statement defines the IAM actions that the ISV is allowed to perform on the Amazon Q Business application's resources.</p>"
     },
     "BatchDeleteDocument":{
       "name":"BatchDeleteDocument",
@@ -44,8 +44,8 @@
       "input":{"shape":"BatchDeleteDocumentRequest"},
       "output":{"shape":"BatchDeleteDocumentResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -63,8 +63,8 @@
       "input":{"shape":"BatchPutDocumentRequest"},
       "output":{"shape":"BatchPutDocumentResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -73,6 +73,25 @@
       ],
       "documentation":"<p>Adds one or more documents to an Amazon Q Business index.</p> <p>You use this API to:</p> <ul> <li> <p>ingest your structured and unstructured documents and documents stored in an Amazon S3 bucket into an Amazon Q Business index.</p> </li> <li> <p>add custom attributes to documents in an Amazon Q Business index.</p> </li> <li> <p>attach an access control list to the documents added to an Amazon Q Business index.</p> </li> </ul> <p>You can see the progress of the deletion, and any error messages related to the process, by using CloudWatch.</p>"
     },
+    "CancelSubscription":{
+      "name":"CancelSubscription",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/applications/{applicationId}/subscriptions/{subscriptionId}",
+        "responseCode":200
+      },
+      "input":{"shape":"CancelSubscriptionRequest"},
+      "output":{"shape":"CancelSubscriptionResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Unsubscribes a user or a group from their pricing tier in an Amazon Q Business application. An unsubscribed user or group loses all Amazon Q Business feature access at the start of next month. </p>",
+      "idempotent":true
+    },
     "Chat":{
       "name":"Chat",
       "http":{
@@ -83,10 +102,10 @@
       "input":{"shape":"ChatInput"},
       "output":{"shape":"ChatOutput"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
-        {"shape":"LicenseNotFoundException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"LicenseNotFoundException"},
         {"shape":"ExternalResourceException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -104,10 +123,10 @@
       "input":{"shape":"ChatSyncInput"},
       "output":{"shape":"ChatSyncOutput"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
-        {"shape":"LicenseNotFoundException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"LicenseNotFoundException"},
         {"shape":"ExternalResourceException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -115,6 +134,43 @@
       ],
       "documentation":"<p>Starts or continues a non-streaming Amazon Q Business conversation.</p>"
     },
+    "CheckDocumentAccess":{
+      "name":"CheckDocumentAccess",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/index/{indexId}/users/{userId}/documents/{documentId}/check-document-access",
+        "responseCode":200
+      },
+      "input":{"shape":"CheckDocumentAccessRequest"},
+      "output":{"shape":"CheckDocumentAccessResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Verifies if a user has access permissions for a specified document and returns the actual ACL attached to the document. Resolves user access on the document via user aliases and groups when verifying user access.</p>"
+    },
+    "CreateAnonymousWebExperienceUrl":{
+      "name":"CreateAnonymousWebExperienceUrl",
+      "http":{
+        "method":"POST",
+        "requestUri":"/applications/{applicationId}/experiences/{webExperienceId}/anonymous-url",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateAnonymousWebExperienceUrlRequest"},
+      "output":{"shape":"CreateAnonymousWebExperienceUrlResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a unique URL for anonymous Amazon Q Business web experience. This URL can only be used once and must be used within 5 minutes after it's generated.</p>"
+    },
     "CreateApplication":{
       "name":"CreateApplication",
       "http":{
@@ -125,8 +181,8 @@
       "input":{"shape":"CreateApplicationRequest"},
       "output":{"shape":"CreateApplicationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -136,6 +192,27 @@
       "documentation":"<p>Creates an Amazon Q Business application.</p> <note> <p>There are new tiers for Amazon Q Business. Not all features in Amazon Q Business Pro are also available in Amazon Q Business Lite. For information on what's included in Amazon Q Business Lite and what's included in Amazon Q Business Pro, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/tiers.html#user-sub-tiers\">Amazon Q Business tiers</a>. You must use the Amazon Q Business console to assign subscription tiers to users. </p> <p>An Amazon Q Apps service linked role will be created if it's absent in the Amazon Web Services account when <code>QAppsConfiguration</code> is enabled in the request. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/using-service-linked-roles-qapps.html\"> Using service-linked roles for Q Apps</a>.</p> <p>When you create an application, Amazon Q Business may securely transmit data for processing from your selected Amazon Web Services region, but within your geography. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/cross-region-inference.html\">Cross region inference in Amazon Q Business</a>.</p> </note>",
       "idempotent":true
     },
+    "CreateChatResponseConfiguration":{
+      "name":"CreateChatResponseConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/applications/{applicationId}/chatresponseconfigurations",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateChatResponseConfigurationRequest"},
+      "output":{"shape":"CreateChatResponseConfigurationResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p>Creates a new chat response configuration for an Amazon Q Business application. This operation establishes a set of parameters that define how the system generates and formats responses to user queries in chat interactions.</p>",
+      "idempotent":true
+    },
     "CreateDataAccessor":{
       "name":"CreateDataAccessor",
       "http":{
@@ -146,15 +223,15 @@
       "input":{"shape":"CreateDataAccessorRequest"},
       "output":{"shape":"CreateDataAccessorResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a new data accessor for an ISV to access data from a Q Business application. The data accessor is an entity that represents the ISV's access to the Q Business application's data. It includes the IAM role ARN for the ISV, a friendly name, and a set of action configurations that define the specific actions the ISV is allowed to perform and any associated data filters. When the data accessor is created, an AWS IAM Identity Center application is also created to manage the ISV's identity and authentication for accessing the Q Business application.</p>",
+      "documentation":"<p>Creates a new data accessor for an ISV to access data from a Amazon Q Business application. The data accessor is an entity that represents the ISV's access to the Amazon Q Business application's data. It includes the IAM role ARN for the ISV, a friendly name, and a set of action configurations that define the specific actions the ISV is allowed to perform and any associated data filters. When the data accessor is created, an IAM Identity Center application is also created to manage the ISV's identity and authentication for accessing the Amazon Q Business application.</p>",
       "idempotent":true
     },
     "CreateDataSource":{
@@ -167,8 +244,8 @@
       "input":{"shape":"CreateDataSourceRequest"},
       "output":{"shape":"CreateDataSourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -188,8 +265,8 @@
       "input":{"shape":"CreateIndexRequest"},
       "output":{"shape":"CreateIndexResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -208,8 +285,8 @@
       "input":{"shape":"CreatePluginRequest"},
       "output":{"shape":"CreatePluginResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -229,8 +306,8 @@
       "input":{"shape":"CreateRetrieverRequest"},
       "output":{"shape":"CreateRetrieverResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -239,6 +316,26 @@
       ],
       "documentation":"<p>Adds a retriever to your Amazon Q Business application.</p>"
     },
+    "CreateSubscription":{
+      "name":"CreateSubscription",
+      "http":{
+        "method":"POST",
+        "requestUri":"/applications/{applicationId}/subscriptions",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateSubscriptionRequest"},
+      "output":{"shape":"CreateSubscriptionResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Subscribes an IAM Identity Center user or a group to a pricing tier for an Amazon Q Business application.</p> <p>Amazon Q Business offers two subscription tiers: <code>Q_LITE</code> and <code>Q_BUSINESS</code>. Subscription tier determines feature access for the user. For more information on subscriptions and pricing tiers, see <a href=\"https://aws.amazon.com/q/business/pricing/\">Amazon Q Business pricing</a>.</p> <note> <p>For an example IAM role policy for assigning subscriptions, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/setting-up.html#permissions\">Set up required permissions</a> in the Amazon Q Business User Guide.</p> </note>",
+      "idempotent":true
+    },
     "CreateUser":{
       "name":"CreateUser",
       "http":{
@@ -249,8 +346,8 @@
       "input":{"shape":"CreateUserRequest"},
       "output":{"shape":"CreateUserResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -270,8 +367,8 @@
       "input":{"shape":"CreateWebExperienceRequest"},
       "output":{"shape":"CreateWebExperienceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -290,8 +387,8 @@
       "input":{"shape":"DeleteApplicationRequest"},
       "output":{"shape":"DeleteApplicationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -300,6 +397,26 @@
       "documentation":"<p>Deletes an Amazon Q Business application.</p>",
       "idempotent":true
     },
+    "DeleteAttachment":{
+      "name":"DeleteAttachment",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/applications/{applicationId}/conversations/{conversationId}/attachments/{attachmentId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteAttachmentRequest"},
+      "output":{"shape":"DeleteAttachmentResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"LicenseNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes an attachment associated with a specific Amazon Q Business conversation.</p>",
+      "idempotent":true
+    },
     "DeleteChatControlsConfiguration":{
       "name":"DeleteChatControlsConfiguration",
       "http":{
@@ -310,8 +427,8 @@
       "input":{"shape":"DeleteChatControlsConfigurationRequest"},
       "output":{"shape":"DeleteChatControlsConfigurationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -319,6 +436,26 @@
       "documentation":"<p>Deletes chat controls configured for an existing Amazon Q Business application.</p>",
       "idempotent":true
     },
+    "DeleteChatResponseConfiguration":{
+      "name":"DeleteChatResponseConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/applications/{applicationId}/chatresponseconfigurations/{chatResponseConfigurationId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteChatResponseConfigurationRequest"},
+      "output":{"shape":"DeleteChatResponseConfigurationResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a specified chat response configuration from an Amazon Q Business application.</p>",
+      "idempotent":true
+    },
     "DeleteConversation":{
       "name":"DeleteConversation",
       "http":{
@@ -329,8 +466,9 @@
       "input":{"shape":"DeleteConversationRequest"},
       "output":{"shape":"DeleteConversationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -349,14 +487,14 @@
       "input":{"shape":"DeleteDataAccessorRequest"},
       "output":{"shape":"DeleteDataAccessorResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Deletes a specified data accessor. This operation permanently removes the data accessor and its associated AWS IAM Identity Center application. Any access granted to the ISV through this data accessor will be revoked</p>",
+      "documentation":"<p>Deletes a specified data accessor. This operation permanently removes the data accessor and its associated IAM Identity Center application. Any access granted to the ISV through this data accessor will be revoked.</p>",
       "idempotent":true
     },
     "DeleteDataSource":{
@@ -369,8 +507,8 @@
       "input":{"shape":"DeleteDataSourceRequest"},
       "output":{"shape":"DeleteDataSourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -389,8 +527,8 @@
       "input":{"shape":"DeleteGroupRequest"},
       "output":{"shape":"DeleteGroupResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -409,8 +547,8 @@
       "input":{"shape":"DeleteIndexRequest"},
       "output":{"shape":"DeleteIndexResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -429,8 +567,8 @@
       "input":{"shape":"DeletePluginRequest"},
       "output":{"shape":"DeletePluginResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -449,8 +587,8 @@
       "input":{"shape":"DeleteRetrieverRequest"},
       "output":{"shape":"DeleteRetrieverResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -469,8 +607,8 @@
       "input":{"shape":"DeleteUserRequest"},
       "output":{"shape":"DeleteUserResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -489,8 +627,8 @@
       "input":{"shape":"DeleteWebExperienceRequest"},
       "output":{"shape":"DeleteWebExperienceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -509,14 +647,14 @@
       "input":{"shape":"DisassociatePermissionRequest"},
       "output":{"shape":"DisassociatePermissionResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Removes a permission policy from a Q Business application, revoking the cross-account access that was previously granted to an ISV. This operation deletes the specified policy statement from the application's permission policy.</p>",
+      "documentation":"<p>Removes a permission policy from a Amazon Q Business application, revoking the cross-account access that was previously granted to an ISV. This operation deletes the specified policy statement from the application's permission policy.</p>",
       "idempotent":true
     },
     "GetApplication":{
@@ -529,8 +667,8 @@
       "input":{"shape":"GetApplicationRequest"},
       "output":{"shape":"GetApplicationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -547,13 +685,31 @@
       "input":{"shape":"GetChatControlsConfigurationRequest"},
       "output":{"shape":"GetChatControlsConfigurationResponse"},
       "errors":[
+        {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Gets information about chat controls configured for an existing Amazon Q Business application.</p>"
+    },
+    "GetChatResponseConfiguration":{
+      "name":"GetChatResponseConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/chatresponseconfigurations/{chatResponseConfigurationId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetChatResponseConfigurationRequest"},
+      "output":{"shape":"GetChatResponseConfigurationResponse"},
+      "errors":[
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Gets information about an chat controls configured for an existing Amazon Q Business application.</p>"
+      "documentation":"<p>Retrieves detailed information about a specific chat response configuration from an Amazon Q Business application. This operation returns the complete configuration settings and metadata.</p>"
     },
     "GetDataAccessor":{
       "name":"GetDataAccessor",
@@ -565,13 +721,13 @@
       "input":{"shape":"GetDataAccessorRequest"},
       "output":{"shape":"GetDataAccessorResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves information about a specified data accessor. This operation returns details about the data accessor, including its display name, unique identifier, Amazon Resource Name (ARN), the associated Q Business application and AWS IAM Identity Center application, the IAM role for the ISV, the action configurations, and the timestamps for when the data accessor was created and last updated.</p>"
+      "documentation":"<p>Retrieves information about a specified data accessor. This operation returns details about the data accessor, including its display name, unique identifier, Amazon Resource Name (ARN), the associated Amazon Q Business application and IAM Identity Center application, the IAM role for the ISV, the action configurations, and the timestamps for when the data accessor was created and last updated.</p>"
     },
     "GetDataSource":{
       "name":"GetDataSource",
@@ -583,14 +739,32 @@
       "input":{"shape":"GetDataSourceRequest"},
       "output":{"shape":"GetDataSourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Gets information about an existing Amazon Q Business data source connector.</p>"
     },
+    "GetDocumentContent":{
+      "name":"GetDocumentContent",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/index/{indexId}/documents/{documentId}/content",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDocumentContentRequest"},
+      "output":{"shape":"GetDocumentContentResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the content of a document that was ingested into Amazon Q Business. This API validates user authorization against document ACLs before returning a pre-signed URL for secure document access. You can download or view source documents referenced in chat responses through the URL.</p>"
+    },
     "GetGroup":{
       "name":"GetGroup",
       "http":{
@@ -601,8 +775,8 @@
       "input":{"shape":"GetGroupRequest"},
       "output":{"shape":"GetGroupResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -620,8 +794,8 @@
       "input":{"shape":"GetIndexRequest"},
       "output":{"shape":"GetIndexResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -638,8 +812,8 @@
       "input":{"shape":"GetMediaRequest"},
       "output":{"shape":"GetMediaResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"MediaTooLargeException"},
         {"shape":"ThrottlingException"},
@@ -658,8 +832,8 @@
       "input":{"shape":"GetPluginRequest"},
       "output":{"shape":"GetPluginResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -676,13 +850,13 @@
       "input":{"shape":"GetPolicyRequest"},
       "output":{"shape":"GetPolicyResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves the current permission policy for a Q Business application. The policy is returned as a JSON-formatted string and defines the IAM actions that are allowed or denied for the application's resources.</p>"
+      "documentation":"<p>Retrieves the current permission policy for a Amazon Q Business application. The policy is returned as a JSON-formatted string and defines the IAM actions that are allowed or denied for the application's resources.</p>"
     },
     "GetRetriever":{
       "name":"GetRetriever",
@@ -694,8 +868,8 @@
       "input":{"shape":"GetRetrieverRequest"},
       "output":{"shape":"GetRetrieverResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -712,8 +886,8 @@
       "input":{"shape":"GetUserRequest"},
       "output":{"shape":"GetUserResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -731,8 +905,8 @@
       "input":{"shape":"GetWebExperienceRequest"},
       "output":{"shape":"GetWebExperienceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -766,8 +940,8 @@
       "input":{"shape":"ListAttachmentsRequest"},
       "output":{"shape":"ListAttachmentsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -775,6 +949,24 @@
       ],
       "documentation":"<p>Gets a list of attachments associated with an Amazon Q Business web experience or a list of attachements associated with a specific Amazon Q Business conversation.</p>"
     },
+    "ListChatResponseConfigurations":{
+      "name":"ListChatResponseConfigurations",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/chatresponseconfigurations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListChatResponseConfigurationsRequest"},
+      "output":{"shape":"ListChatResponseConfigurationsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves a list of all chat response configurations available in a specified Amazon Q Business application. This operation returns summary information about each configuration to help administrators manage and select appropriate response settings.</p>"
+    },
     "ListConversations":{
       "name":"ListConversations",
       "http":{
@@ -785,8 +977,8 @@
       "input":{"shape":"ListConversationsRequest"},
       "output":{"shape":"ListConversationsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -804,13 +996,13 @@
       "input":{"shape":"ListDataAccessorsRequest"},
       "output":{"shape":"ListDataAccessorsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists the data accessors for a Q Business application. This operation returns a paginated list of data accessor summaries, including the friendly name, unique identifier, ARN, associated IAM role, and creation/update timestamps for each data accessor.</p>"
+      "documentation":"<p>Lists the data accessors for a Amazon Q Business application. This operation returns a paginated list of data accessor summaries, including the friendly name, unique identifier, ARN, associated IAM role, and creation/update timestamps for each data accessor.</p>"
     },
     "ListDataSourceSyncJobs":{
       "name":"ListDataSourceSyncJobs",
@@ -822,8 +1014,8 @@
       "input":{"shape":"ListDataSourceSyncJobsRequest"},
       "output":{"shape":"ListDataSourceSyncJobsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -841,8 +1033,8 @@
       "input":{"shape":"ListDataSourcesRequest"},
       "output":{"shape":"ListDataSourcesResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -859,8 +1051,8 @@
       "input":{"shape":"ListDocumentsRequest"},
       "output":{"shape":"ListDocumentsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -877,8 +1069,8 @@
       "input":{"shape":"ListGroupsRequest"},
       "output":{"shape":"ListGroupsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -896,8 +1088,8 @@
       "input":{"shape":"ListIndicesRequest"},
       "output":{"shape":"ListIndicesResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -914,8 +1106,8 @@
       "input":{"shape":"ListMessagesRequest"},
       "output":{"shape":"ListMessagesResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -933,8 +1125,8 @@
       "input":{"shape":"ListPluginActionsRequest"},
       "output":{"shape":"ListPluginActionsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -985,8 +1177,8 @@
       "input":{"shape":"ListPluginsRequest"},
       "output":{"shape":"ListPluginsResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -1003,14 +1195,33 @@
       "input":{"shape":"ListRetrieversRequest"},
       "output":{"shape":"ListRetrieversResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Lists the retriever used by an Amazon Q Business application.</p>"
     },
+    "ListSubscriptions":{
+      "name":"ListSubscriptions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/applications/{applicationId}/subscriptions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSubscriptionsRequest"},
+      "output":{"shape":"ListSubscriptionsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p> Lists all subscriptions created in an Amazon Q Business application. </p>"
+    },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
       "http":{
@@ -1021,8 +1232,8 @@
       "input":{"shape":"ListTagsForResourceRequest"},
       "output":{"shape":"ListTagsForResourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -1039,8 +1250,8 @@
       "input":{"shape":"ListWebExperiencesRequest"},
       "output":{"shape":"ListWebExperiencesResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -1056,8 +1267,8 @@
       },
       "input":{"shape":"PutFeedbackRequest"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -1074,15 +1285,15 @@
       "input":{"shape":"PutGroupRequest"},
       "output":{"shape":"PutGroupResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Create, or updates, a mapping of users—who have access to a document—to groups.</p> <p>You can also map sub groups to groups. For example, the group \"Company Intellectual Property Teams\" includes sub groups \"Research\" and \"Engineering\". These sub groups include their own list of users or people who work in these teams. Only users who work in research and engineering, and therefore belong in the intellectual property group, can see top-secret company documents in their Amazon Q Business chat results.</p>",
+      "documentation":"<p>Create, or updates, a mapping of users—who have access to a document—to groups.</p> <p>You can also map sub groups to groups. For example, the group \"Company Intellectual Property Teams\" includes sub groups \"Research\" and \"Engineering\". These sub groups include their own list of users or people who work in these teams. Only users who work in research and engineering, and therefore belong in the intellectual property group, can see top-secret company documents in their Amazon Q Business chat results.</p> <p>There are two options for creating groups, either passing group members inline or using an S3 file via the S3PathForGroupMembers field. For inline groups, there is a limit of 1000 members per group and for provided S3 files there is a limit of 100 thousand members. When creating a group using an S3 file, you provide both an S3 file and a <code>RoleArn</code> for Amazon Q Buisness to access the file.</p>",
       "idempotent":true
     },
     "SearchRelevantContent":{
@@ -1095,14 +1306,14 @@
       "input":{"shape":"SearchRelevantContentRequest"},
       "output":{"shape":"SearchRelevantContentResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"LicenseNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Searches for relevant content in a Q Business application based on a query. This operation takes a search query text, the Q Business application identifier, and optional filters (such as content source and maximum results) as input. It returns a list of relevant content items, where each item includes the content text, the unique document identifier, the document title, the document URI, any relevant document attributes, and score attributes indicating the confidence level of the relevance.</p>"
+      "documentation":"<p>Searches for relevant content in a Amazon Q Business application based on a query. This operation takes a search query text, the Amazon Q Business application identifier, and optional filters (such as content source and maximum results) as input. It returns a list of relevant content items, where each item includes the content text, the unique document identifier, the document title, the document URI, any relevant document attributes, and score attributes indicating the confidence level of the relevance.</p>"
     },
     "StartDataSourceSyncJob":{
       "name":"StartDataSourceSyncJob",
@@ -1114,8 +1325,8 @@
       "input":{"shape":"StartDataSourceSyncJobRequest"},
       "output":{"shape":"StartDataSourceSyncJobResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1134,8 +1345,8 @@
       "input":{"shape":"StopDataSourceSyncJobRequest"},
       "output":{"shape":"StopDataSourceSyncJobResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1153,8 +1364,8 @@
       "input":{"shape":"TagResourceRequest"},
       "output":{"shape":"TagResourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1173,8 +1384,8 @@
       "input":{"shape":"UntagResourceRequest"},
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"}
@@ -1192,8 +1403,8 @@
       "input":{"shape":"UpdateApplicationRequest"},
       "output":{"shape":"UpdateApplicationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1212,15 +1423,35 @@
       "input":{"shape":"UpdateChatControlsConfigurationRequest"},
       "output":{"shape":"UpdateChatControlsConfigurationResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Updates an set of chat controls configured for an existing Amazon Q Business application.</p>",
+      "documentation":"<p>Updates a set of chat controls configured for an existing Amazon Q Business application.</p>",
+      "idempotent":true
+    },
+    "UpdateChatResponseConfiguration":{
+      "name":"UpdateChatResponseConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/applications/{applicationId}/chatresponseconfigurations/{chatResponseConfigurationId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateChatResponseConfigurationRequest"},
+      "output":{"shape":"UpdateChatResponseConfigurationResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates an existing chat response configuration in an Amazon Q Business application. This operation allows administrators to modify configuration settings, display name, and response parameters to refine how the system generates responses.</p>",
       "idempotent":true
     },
     "UpdateDataAccessor":{
@@ -1233,8 +1464,8 @@
       "input":{"shape":"UpdateDataAccessorRequest"},
       "output":{"shape":"UpdateDataAccessorResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1253,8 +1484,8 @@
       "input":{"shape":"UpdateDataSourceRequest"},
       "output":{"shape":"UpdateDataSourceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1273,8 +1504,8 @@
       "input":{"shape":"UpdateIndexRequest"},
       "output":{"shape":"UpdateIndexResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1294,8 +1525,8 @@
       "input":{"shape":"UpdatePluginRequest"},
       "output":{"shape":"UpdatePluginResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1315,8 +1546,8 @@
       "input":{"shape":"UpdateRetrieverRequest"},
       "output":{"shape":"UpdateRetrieverResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1326,6 +1557,26 @@
       "documentation":"<p>Updates the retriever used for your Amazon Q Business application.</p>",
       "idempotent":true
     },
+    "UpdateSubscription":{
+      "name":"UpdateSubscription",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/applications/{applicationId}/subscriptions/{subscriptionId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateSubscriptionRequest"},
+      "output":{"shape":"UpdateSubscriptionResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates the pricing tier for an Amazon Q Business subscription. Upgrades are instant. Downgrades apply at the start of the next month. Subscription tier determines feature access for the user. For more information on subscriptions and pricing tiers, see <a href=\"https://aws.amazon.com/q/business/pricing/\">Amazon Q Business pricing</a>.</p>",
+      "idempotent":true
+    },
     "UpdateUser":{
       "name":"UpdateUser",
       "http":{
@@ -1336,8 +1587,9 @@
       "input":{"shape":"UpdateUserRequest"},
       "output":{"shape":"UpdateUserResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
@@ -1356,8 +1608,8 @@
       "input":{"shape":"UpdateWebExperienceRequest"},
       "output":{"shape":"UpdateWebExperienceResponse"},
       "errors":[
-        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"},
@@ -1440,7 +1692,7 @@
       "members":{
         "action":{
           "shape":"QIamAction",
-          "documentation":"<p>The Q Business action that is allowed.</p>"
+          "documentation":"<p>The Amazon Q Business action that is allowed.</p>"
         },
         "filterConfiguration":{
           "shape":"ActionFilterConfiguration",
@@ -1796,6 +2048,17 @@
       },
       "documentation":"<p>The creator mode specific admin controls configured for an Amazon Q Business application. Determines whether an end user can generate LLM-only responses when they use the web experience.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/guardrails.html\">Admin controls and guardrails</a> and <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/using-web-experience.html#chat-source-scope\">Conversation settings</a>.</p>"
     },
+    "AppliedOrchestrationConfiguration":{
+      "type":"structure",
+      "required":["control"],
+      "members":{
+        "control":{
+          "shape":"OrchestrationControl",
+          "documentation":"<p> Information about whether chat orchestration is enabled or disabled for an Amazon Q Business application. </p>"
+        }
+      },
+      "documentation":"<p>The chat orchestration specific admin controls configured for an Amazon Q Business application. Determines whether Amazon Q Business automatically routes chat requests across configured plugins and data sources in your Amazon Q Business application.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/guardrails-global-controls.html#guardrails-global-orchestration\">Chat orchestration settings</a>.</p>"
+    },
     "AssociatePermissionRequest":{
       "type":"structure",
       "required":[
@@ -1807,7 +2070,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -1817,11 +2080,15 @@
         },
         "actions":{
           "shape":"QIamActions",
-          "documentation":"<p>The list of Q Business actions that the ISV is allowed to perform.</p>"
+          "documentation":"<p>The list of Amazon Q Business actions that the ISV is allowed to perform.</p>"
+        },
+        "conditions":{
+          "shape":"PermissionConditions",
+          "documentation":"<p>The conditions that restrict when the permission is effective. These conditions can be used to limit the permission based on specific attributes of the request.</p>"
         },
         "principal":{
           "shape":"PrincipalRoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role for the ISV that is being granted permission.</p>"
+          "documentation":"<p>The Amazon Resource Name of the IAM role for the ISV that is being granted permission.</p>"
         }
       }
     },
@@ -1834,6 +2101,42 @@
         }
       }
     },
+    "AssociatedGroup":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"GroupName",
+          "documentation":"<p>The name of the group associated with the user. This is used to identify the group in access control decisions.</p>"
+        },
+        "type":{
+          "shape":"MembershipType",
+          "documentation":"<p>The type of the associated group. This indicates the scope of the group's applicability.</p>"
+        }
+      },
+      "documentation":"<p>Represents a group associated with a given user in the access control system.</p>"
+    },
+    "AssociatedGroups":{
+      "type":"list",
+      "member":{"shape":"AssociatedGroup"}
+    },
+    "AssociatedUser":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the associated user. This is used to identify the user in access control decisions.</p>"
+        },
+        "type":{
+          "shape":"MembershipType",
+          "documentation":"<p>The type of the associated user. This indicates the scope of the user's association.</p>"
+        }
+      },
+      "documentation":"<p>Represents an associated user in the access control system.</p>"
+    },
+    "AssociatedUsers":{
+      "type":"list",
+      "member":{"shape":"AssociatedUser"}
+    },
     "Attachment":{
       "type":"structure",
       "members":{
@@ -2043,6 +2346,57 @@
       "type":"string",
       "enum":["DELETE"]
     },
+    "AudioExtractionConfiguration":{
+      "type":"structure",
+      "required":["audioExtractionStatus"],
+      "members":{
+        "audioExtractionStatus":{
+          "shape":"AudioExtractionStatus",
+          "documentation":"<p>The status of audio extraction (ENABLED or DISABLED) for processing audio content from files.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for audio content extraction and processing.</p>"
+    },
+    "AudioExtractionStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "AudioExtractionType":{
+      "type":"string",
+      "enum":[
+        "TRANSCRIPT",
+        "SUMMARY"
+      ]
+    },
+    "AudioSourceDetails":{
+      "type":"structure",
+      "members":{
+        "mediaId":{
+          "shape":"MediaId",
+          "documentation":"<p>Unique identifier for the audio media file.</p>"
+        },
+        "mediaMimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the audio file (e.g., audio/mp3, audio/wav).</p>"
+        },
+        "startTimeMilliseconds":{
+          "shape":"Long",
+          "documentation":"<p>The starting timestamp in milliseconds for the relevant audio segment.</p>"
+        },
+        "endTimeMilliseconds":{
+          "shape":"Long",
+          "documentation":"<p>The ending timestamp in milliseconds for the relevant audio segment.</p>"
+        },
+        "audioExtractionType":{
+          "shape":"AudioExtractionType",
+          "documentation":"<p>The type of audio extraction performed on the content.</p>"
+        }
+      },
+      "documentation":"<p>Details about an audio source, including its identifier, format, and time information.</p>"
+    },
     "AuthChallengeRequest":{
       "type":"structure",
       "required":["authorizationUrl"],
@@ -2205,7 +2559,7 @@
         },
         "documents":{
           "shape":"Documents",
-          "documentation":"<p>One or more documents to add to the index.</p>"
+          "documentation":"<p>One or more documents to add to the index.</p> <important> <p>Ensure that the name of your document doesn't contain any confidential information. Amazon Q Business returns document names in chat responses and citations when relevant.</p> </important>"
         },
         "roleArn":{
           "shape":"RoleArn",
@@ -2242,7 +2596,7 @@
       "members":{
         "blockedPhrases":{
           "shape":"BlockedPhrases",
-          "documentation":"<p>A list of phrases blocked from a Amazon Q Business web experience chat.</p>"
+          "documentation":"<p>A list of phrases blocked from a Amazon Q Business web experience chat.</p> <note> <p>Each phrase can contain a maximum of 36 characters. The list can contain a maximum of 20 phrases.</p> </note>"
         },
         "systemMessageOverride":{
           "shape":"SystemMessageOverride",
@@ -2303,6 +2657,44 @@
       "max":2,
       "min":0
     },
+    "CancelSubscriptionRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "subscriptionId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The identifier of the Amazon Q Business application for which the subscription is being cancelled.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "subscriptionId":{
+          "shape":"SubscriptionId",
+          "documentation":"<p>The identifier of the Amazon Q Business subscription being cancelled.</p>",
+          "location":"uri",
+          "locationName":"subscriptionId"
+        }
+      }
+    },
+    "CancelSubscriptionResponse":{
+      "type":"structure",
+      "members":{
+        "subscriptionArn":{
+          "shape":"SubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Business subscription being cancelled.</p>"
+        },
+        "currentSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of your current Amazon Q Business subscription.</p>"
+        },
+        "nextSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of the Amazon Q Business subscription for the next month.</p>"
+        }
+      }
+    },
     "ChatInput":{
       "type":"structure",
       "required":["applicationId"],
@@ -2438,6 +2830,94 @@
       "documentation":"<p>The streaming output for the <code>Chat</code> API.</p>",
       "eventstream":true
     },
+    "ChatResponseConfiguration":{
+      "type":"structure",
+      "required":[
+        "chatResponseConfigurationId",
+        "chatResponseConfigurationArn",
+        "displayName",
+        "status"
+      ],
+      "members":{
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>A unique identifier for your chat response configuration settings, used to reference and manage the configuration within the Amazon Q Business service.</p>"
+        },
+        "chatResponseConfigurationArn":{
+          "shape":"ChatResponseConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the chat response configuration, which uniquely identifies the resource across all Amazon Web Services services and accounts.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>A human-readable name for the chat response configuration, making it easier to identify and manage multiple configurations within an organization.</p>"
+        },
+        "responseConfigurationSummary":{
+          "shape":"ResponseConfigurationSummary",
+          "documentation":"<p>A summary of the response configuration settings, providing a concise overview of the key parameters that define how responses are generated and formatted.</p>"
+        },
+        "status":{
+          "shape":"ChatResponseConfigurationStatus",
+          "documentation":"<p>The current status of the chat response configuration, indicating whether it is active, pending, or in another state that affects its availability for use in chat interactions.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp indicating when the chat response configuration was initially created, useful for tracking the lifecycle of configuration resources.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp indicating when the chat response configuration was last modified, helping administrators track changes and maintain version awareness.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details that define how Amazon Q Business generates and formats responses to user queries in chat interactions. This configuration allows administrators to customize response characteristics to meet specific organizational needs and communication standards.</p>"
+    },
+    "ChatResponseConfigurationArn":{
+      "type":"string",
+      "max":1284,
+      "min":1,
+      "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+    },
+    "ChatResponseConfigurationDetail":{
+      "type":"structure",
+      "members":{
+        "responseConfigurations":{
+          "shape":"ResponseConfigurations",
+          "documentation":"<p>A collection of specific response configuration settings that collectively define how responses are generated, formatted, and presented to users in chat interactions.</p>"
+        },
+        "responseConfigurationSummary":{
+          "shape":"String",
+          "documentation":"<p>A summary of the response configuration details, providing a concise overview of the key parameters and settings that define the response generation behavior.</p>"
+        },
+        "status":{
+          "shape":"ChatResponseConfigurationStatus",
+          "documentation":"<p>The current status of the chat response configuration, indicating whether it is active, pending, or in another state that affects its availability for use.</p>"
+        },
+        "error":{"shape":"ErrorDetail"},
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp indicating when the detailed chat response configuration was last modified, helping administrators track changes and maintain version awareness.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about a chat response configuration, including comprehensive settings and parameters that define how Amazon Q Business generates and formats responses.</p>"
+    },
+    "ChatResponseConfigurationId":{
+      "type":"string",
+      "max":36,
+      "min":36,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9-]{35}"
+    },
+    "ChatResponseConfigurationStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "UPDATING",
+        "FAILED",
+        "ACTIVE"
+      ]
+    },
+    "ChatResponseConfigurations":{
+      "type":"list",
+      "member":{"shape":"ChatResponseConfiguration"}
+    },
     "ChatSyncInput":{
       "type":"structure",
       "required":["applicationId"],
@@ -2540,6 +3020,68 @@
         }
       }
     },
+    "CheckDocumentAccessRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "indexId",
+        "userId",
+        "documentId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the application. This is required to identify the specific Amazon Q Business application context for the document access check.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "indexId":{
+          "shape":"IndexId",
+          "documentation":"<p>The unique identifier of the index. Used to locate the correct index within the application where the document is stored.</p>",
+          "location":"uri",
+          "locationName":"indexId"
+        },
+        "userId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the user. Used to check the access permissions for this specific user against the document's ACL.</p>",
+          "location":"uri",
+          "locationName":"userId"
+        },
+        "documentId":{
+          "shape":"DocumentId",
+          "documentation":"<p>The unique identifier of the document. Specifies which document's access permissions are being checked.</p>",
+          "location":"uri",
+          "locationName":"documentId"
+        },
+        "dataSourceId":{
+          "shape":"DataSourceId",
+          "documentation":"<p>The unique identifier of the data source. Identifies the specific data source from which the document originates. Should not be used when a document is uploaded directly with BatchPutDocument, as no dataSourceId is available or necessary. </p>",
+          "location":"querystring",
+          "locationName":"dataSourceId"
+        }
+      }
+    },
+    "CheckDocumentAccessResponse":{
+      "type":"structure",
+      "members":{
+        "userGroups":{
+          "shape":"AssociatedGroups",
+          "documentation":"<p>An array of groups the user is part of for the specified data source. Each group has a name and type.</p>"
+        },
+        "userAliases":{
+          "shape":"AssociatedUsers",
+          "documentation":"<p>An array of aliases associated with the user. This includes both global and local aliases, each with a name and type.</p>"
+        },
+        "hasAccess":{
+          "shape":"Boolean",
+          "documentation":"<p>A boolean value indicating whether the specified user has access to the document, either direct access or transitive access via groups and aliases attached to the document.</p>"
+        },
+        "documentAcl":{
+          "shape":"DocumentAcl",
+          "documentation":"<p>The Access Control List (ACL) associated with the document. Includes allowlist and denylist conditions that determine user access.</p>"
+        }
+      }
+    },
     "ClientIdForOIDC":{
       "type":"string",
       "max":255,
@@ -2708,6 +3250,40 @@
       "documentation":"<p>The source reference for an existing attachment.</p>",
       "union":true
     },
+    "CreateAnonymousWebExperienceUrlRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "webExperienceId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The identifier of the Amazon Q Business application environment attached to the web experience.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "webExperienceId":{
+          "shape":"WebExperienceId",
+          "documentation":"<p>The identifier of the web experience.</p>",
+          "location":"uri",
+          "locationName":"webExperienceId"
+        },
+        "sessionDurationInMinutes":{
+          "shape":"SessionDurationInMinutes",
+          "documentation":"<p>The duration of the session associated with the unique URL for the web experience.</p>"
+        }
+      }
+    },
+    "CreateAnonymousWebExperienceUrlResponse":{
+      "type":"structure",
+      "members":{
+        "anonymousUrl":{
+          "shape":"Url",
+          "documentation":"<p>The unique URL for accessing the web experience.</p> <important> <p>This URL can only be used once and must be used within 5 minutes after it's generated.</p> </important>"
+        }
+      }
+    },
     "CreateApplicationRequest":{
       "type":"structure",
       "required":["displayName"],
@@ -2784,6 +3360,56 @@
         }
       }
     },
+    "CreateChatResponseConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "displayName",
+        "responseConfigurations"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application for which to create the new chat response configuration.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>A human-readable name for the new chat response configuration, making it easier to identify and manage among multiple configurations.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request. This helps prevent the same configuration from being created multiple times if retries occur.</p>",
+          "idempotencyToken":true
+        },
+        "responseConfigurations":{
+          "shape":"ResponseConfigurations",
+          "documentation":"<p>A collection of response configuration settings that define how Amazon Q Business will generate and format responses to user queries in chat interactions.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of key-value pairs to apply as tags to the new chat response configuration, enabling categorization and management of resources across Amazon Web Services services.</p>"
+        }
+      }
+    },
+    "CreateChatResponseConfigurationResponse":{
+      "type":"structure",
+      "required":[
+        "chatResponseConfigurationId",
+        "chatResponseConfigurationArn"
+      ],
+      "members":{
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>The unique identifier assigned to a newly created chat response configuration, used for subsequent operations on this resource.</p>"
+        },
+        "chatResponseConfigurationArn":{
+          "shape":"ChatResponseConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created chat response configuration, which uniquely identifies the resource across all Amazon Web Services services. </p>"
+        }
+      }
+    },
     "CreateDataAccessorRequest":{
       "type":"structure",
       "required":[
@@ -2795,7 +3421,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -2816,6 +3442,10 @@
           "shape":"DataAccessorName",
           "documentation":"<p>A friendly name for the data accessor.</p>"
         },
+        "authenticationDetail":{
+          "shape":"DataAccessorAuthenticationDetail",
+          "documentation":"<p>The authentication configuration details for the data accessor. This specifies how the ISV will authenticate when accessing data through this data accessor.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags to associate with the data accessor.</p>"
@@ -2836,7 +3466,7 @@
         },
         "idcApplicationArn":{
           "shape":"IdcApplicationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS IAM Identity Center application created for this data accessor.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Identity Center application created for this data accessor.</p>"
         },
         "dataAccessorArn":{
           "shape":"DataAccessorArn",
@@ -2891,7 +3521,7 @@
         },
         "roleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role with permission to access the data source and required resources.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role with permission to access the data source and required resources. This field is required for all connector types except custom connectors, where it is optional.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
@@ -3083,6 +3713,56 @@
         }
       }
     },
+    "CreateSubscriptionRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "principal",
+        "type"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The identifier of the Amazon Q Business application the subscription should be added to.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "principal":{
+          "shape":"SubscriptionPrincipal",
+          "documentation":"<p>The IAM Identity Center <code>UserId</code> or <code>GroupId</code> of a user or group in the IAM Identity Center instance connected to the Amazon Q Business application.</p>"
+        },
+        "type":{
+          "shape":"SubscriptionType",
+          "documentation":"<p>The type of Amazon Q Business subscription you want to create.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A token that you provide to identify the request to create a subscription for your Amazon Q Business application.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateSubscriptionResponse":{
+      "type":"structure",
+      "members":{
+        "subscriptionId":{
+          "shape":"SubscriptionId",
+          "documentation":"<p>The identifier of the Amazon Q Business subscription created.</p>"
+        },
+        "subscriptionArn":{
+          "shape":"SubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Business subscription created.</p>"
+        },
+        "currentSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of your current Amazon Q Business subscription.</p>"
+        },
+        "nextSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of the Amazon Q Business subscription for the next month.</p>"
+        }
+      }
+    },
     "CreateUserRequest":{
       "type":"structure",
       "required":[
@@ -3150,11 +3830,11 @@
         },
         "origins":{
           "shape":"WebExperienceOrigins",
-          "documentation":"<p>Sets the website domain origins that are allowed to embed the Amazon Q Business web experience. <pre><code> The &lt;i&gt;domain origin&lt;/i&gt; refers to the base URL for accessing a website including the protocol (&lt;code&gt;http/https&lt;/code&gt;), the domain name, and the port number (if specified). &lt;/p&gt; &lt;note&gt; &lt;p&gt;You must only submit a &lt;i&gt;base URL&lt;/i&gt; and not a full path. For example, &lt;code&gt;https://docs.aws.amazon.com&lt;/code&gt;.&lt;/p&gt; &lt;/note&gt; </code></pre>"
+          "documentation":"<p>Sets the website domain origins that are allowed to embed the Amazon Q Business web experience. The <i>domain origin</i> refers to the base URL for accessing a website including the protocol (<code>http/https</code>), the domain name, and the port number (if specified). </p> <note> <p>You must only submit a <i>base URL</i> and not a full path. For example, <code>https://docs.aws.amazon.com</code>.</p> </note>"
         },
         "roleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service role attached to your web experience.</p> <note> <p>You must provide this value if you're using IAM Identity Center to manage end user access to your application. If you're using legacy identity management to manage user access, you don't need to provide this value.</p> </note>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service role attached to your web experience.</p> <note> <p>The <code>roleArn</code> parameter is required when your Amazon Q Business application is created with IAM Identity Center. It is not required for SAML-based applications.</p> </note>"
         },
         "tags":{
           "shape":"Tags",
@@ -3220,8 +3900,7 @@
       "type":"structure",
       "required":[
         "description",
-        "apiSchemaType",
-        "apiSchema"
+        "apiSchemaType"
       ],
       "members":{
         "description":{
@@ -3278,12 +3957,16 @@
         },
         "idcApplicationArn":{
           "shape":"IdcApplicationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the associated AWS IAM Identity Center application.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the associated IAM Identity Center application.</p>"
         },
         "principal":{
           "shape":"PrincipalRoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role for the ISV associated with this data accessor.</p>"
         },
+        "authenticationDetail":{
+          "shape":"DataAccessorAuthenticationDetail",
+          "documentation":"<p>The authentication configuration details for the data accessor. This specifies how the ISV authenticates when accessing data through this data accessor.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp when the data accessor was created.</p>"
@@ -3301,12 +3984,73 @@
       "min":0,
       "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
     },
+    "DataAccessorAuthenticationConfiguration":{
+      "type":"structure",
+      "members":{
+        "idcTrustedTokenIssuerConfiguration":{
+          "shape":"DataAccessorIdcTrustedTokenIssuerConfiguration",
+          "documentation":"<p>Configuration for IAM Identity Center Trusted Token Issuer (TTI) authentication used when the authentication type is <code>AWS_IAM_IDC_TTI</code>.</p>"
+        }
+      },
+      "documentation":"<p>A union type that contains the specific authentication configuration based on the authentication type selected.</p>",
+      "union":true
+    },
+    "DataAccessorAuthenticationDetail":{
+      "type":"structure",
+      "required":["authenticationType"],
+      "members":{
+        "authenticationType":{
+          "shape":"DataAccessorAuthenticationType",
+          "documentation":"<p>The type of authentication to use for the data accessor. This determines how the ISV authenticates when accessing data. You can use one of two authentication types:</p> <ul> <li> <p> <code>AWS_IAM_IDC_TTI</code> - Authentication using IAM Identity Center Trusted Token Issuer (TTI). This authentication type allows the ISV to use a trusted token issuer to generate tokens for accessing the data.</p> </li> <li> <p> <code>AWS_IAM_IDC_AUTH_CODE</code> - Authentication using IAM Identity Center authorization code flow. This authentication type uses the standard OAuth 2.0 authorization code flow for authentication.</p> </li> </ul>"
+        },
+        "authenticationConfiguration":{
+          "shape":"DataAccessorAuthenticationConfiguration",
+          "documentation":"<p>The specific authentication configuration based on the authentication type.</p>"
+        },
+        "externalIds":{
+          "shape":"DataAccessorExternalIds",
+          "documentation":"<p>A list of external identifiers associated with this authentication configuration. These are used to correlate the data accessor with external systems.</p>"
+        }
+      },
+      "documentation":"<p>Contains the authentication configuration details for a data accessor. This structure defines how the ISV authenticates when accessing data through the data accessor.</p>"
+    },
+    "DataAccessorAuthenticationType":{
+      "type":"string",
+      "documentation":"<p>The type of authentication mechanism used by the data accessor.</p>",
+      "enum":[
+        "AWS_IAM_IDC_TTI",
+        "AWS_IAM_IDC_AUTH_CODE"
+      ]
+    },
+    "DataAccessorExternalId":{
+      "type":"string",
+      "max":1000,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_-]*"
+    },
+    "DataAccessorExternalIds":{
+      "type":"list",
+      "member":{"shape":"DataAccessorExternalId"},
+      "max":1,
+      "min":1
+    },
     "DataAccessorId":{
       "type":"string",
       "max":36,
       "min":36,
       "pattern":"[a-zA-Z0-9][a-zA-Z0-9-]{35}"
     },
+    "DataAccessorIdcTrustedTokenIssuerConfiguration":{
+      "type":"structure",
+      "required":["idcTrustedTokenIssuerArn"],
+      "members":{
+        "idcTrustedTokenIssuerArn":{
+          "shape":"IdcTrustedTokenIssuerArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Identity Center Trusted Token Issuer that will be used for authentication.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for IAM Identity Center Trusted Token Issuer (TTI) authentication.</p>"
+    },
     "DataAccessorName":{
       "type":"string",
       "max":100,
@@ -3500,7 +4244,7 @@
       "members":{
         "boostingLevel":{
           "shape":"DocumentAttributeBoostingLevel",
-          "documentation":"<p>Specifies how much a document attribute is boosted.</p>"
+          "documentation":"<p>Specifies the priority tier ranking of boosting applied to document attributes. For version 2, this parameter indicates the relative ranking between boosted fields (ONE being highest priority, TWO being second highest, etc.) and determines the order in which attributes influence document ranking in search results. For version 1, this parameter specifies the boosting intensity. For version 2, boosting intensity (VERY HIGH, HIGH, MEDIUM, LOW, NONE) are not supported. Note that in version 2, you are not allowed to boost on only one field and make this value TWO.</p>"
         },
         "boostingDurationInSeconds":{
           "shape":"BoostingDurationInSeconds",
@@ -3526,6 +4270,45 @@
       "members":{
       }
     },
+    "DeleteAttachmentRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "conversationId",
+        "attachmentId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier for the Amazon Q Business application environment.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "conversationId":{
+          "shape":"ConversationId",
+          "documentation":"<p>The unique identifier of the conversation.</p>",
+          "location":"uri",
+          "locationName":"conversationId"
+        },
+        "attachmentId":{
+          "shape":"AttachmentId",
+          "documentation":"<p>The unique identifier for the attachment.</p>",
+          "location":"uri",
+          "locationName":"attachmentId"
+        },
+        "userId":{
+          "shape":"UserId",
+          "documentation":"<p>The unique identifier of the user involved in the conversation.</p>",
+          "location":"querystring",
+          "locationName":"userId"
+        }
+      }
+    },
+    "DeleteAttachmentResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DeleteChatControlsConfigurationRequest":{
       "type":"structure",
       "required":["applicationId"],
@@ -3543,6 +4326,32 @@
       "members":{
       }
     },
+    "DeleteChatResponseConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "chatResponseConfigurationId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of theAmazon Q Business application from which to delete the chat response configuration.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>The unique identifier of the chat response configuration to delete from the specified application. </p>",
+          "location":"uri",
+          "locationName":"chatResponseConfigurationId"
+        }
+      }
+    },
+    "DeleteChatResponseConfigurationResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DeleteConversationRequest":{
       "type":"structure",
       "required":[
@@ -3584,7 +4393,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -3833,7 +4642,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -3850,6 +4659,11 @@
       "members":{
       }
     },
+    "DisplayName":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
     "Document":{
       "type":"structure",
       "required":["id"],
@@ -3889,6 +4703,92 @@
       },
       "documentation":"<p>A document in an Amazon Q Business application.</p>"
     },
+    "DocumentAcl":{
+      "type":"structure",
+      "members":{
+        "allowlist":{
+          "shape":"DocumentAclMembership",
+          "documentation":"<p>The allowlist conditions for the document. Users or groups matching these conditions are granted access to the document.</p>"
+        },
+        "denyList":{
+          "shape":"DocumentAclMembership",
+          "documentation":"<p>The denylist conditions for the document. Users or groups matching these conditions are denied access to the document, overriding allowlist permissions.</p>"
+        }
+      },
+      "documentation":"<p>Represents the Access Control List (ACL) for a document, containing both allowlist and denylist conditions.</p>"
+    },
+    "DocumentAclCondition":{
+      "type":"structure",
+      "members":{
+        "memberRelation":{
+          "shape":"MemberRelation",
+          "documentation":"<p>The logical relation between members in the condition, determining how multiple user or group conditions are combined.</p>"
+        },
+        "users":{
+          "shape":"DocumentAclUsers",
+          "documentation":"<p>An array of user identifiers that this condition applies to. Users listed here are subject to the access rule defined by this condition.</p>"
+        },
+        "groups":{
+          "shape":"DocumentAclGroups",
+          "documentation":"<p>An array of group identifiers that this condition applies to. Groups listed here are subject to the access rule defined by this condition.</p>"
+        }
+      },
+      "documentation":"<p>Represents a condition in the document's ACL, specifying access rules for users and groups.</p>"
+    },
+    "DocumentAclConditions":{
+      "type":"list",
+      "member":{"shape":"DocumentAclCondition"}
+    },
+    "DocumentAclGroup":{
+      "type":"structure",
+      "members":{
+        "name":{
+          "shape":"GroupName",
+          "documentation":"<p>The name of the group in the document's ACL. This is used to identify the group when applying access rules.</p>"
+        },
+        "type":{
+          "shape":"MembershipType",
+          "documentation":"<p>The type of the group. This indicates the scope of the group's applicability in access control.</p>"
+        }
+      },
+      "documentation":"<p>Represents a group in the document's ACL, used to define access permissions for multiple users collectively.</p>"
+    },
+    "DocumentAclGroups":{
+      "type":"list",
+      "member":{"shape":"DocumentAclGroup"}
+    },
+    "DocumentAclMembership":{
+      "type":"structure",
+      "members":{
+        "memberRelation":{
+          "shape":"MemberRelation",
+          "documentation":"<p>The logical relation between members in the membership rule, determining how multiple conditions are combined.</p>"
+        },
+        "conditions":{
+          "shape":"DocumentAclConditions",
+          "documentation":"<p>An array of conditions that define the membership rules. Each condition specifies criteria for users or groups to be included in this membership.</p>"
+        }
+      },
+      "documentation":"<p>Represents membership rules in the document's ACL, defining how users or groups are associated with access permissions.</p>"
+    },
+    "DocumentAclUser":{
+      "type":"structure",
+      "members":{
+        "id":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the user in the document's ACL. This is used to identify the user when applying access rules.</p>"
+        },
+        "type":{
+          "shape":"MembershipType",
+          "documentation":"<p>The type of the user. This indicates the scope of the user's applicability in access control.</p>"
+        }
+      },
+      "documentation":"<p>Represents a user in the document's ACL, used to define access permissions for individual users.</p>"
+    },
+    "DocumentAclUsers":{
+      "type":"list",
+      "member":{"shape":"DocumentAclUser"}
+    },
     "DocumentAttribute":{
       "type":"structure",
       "required":[
@@ -3912,22 +4812,22 @@
       "members":{
         "numberConfiguration":{
           "shape":"NumberAttributeBoostingConfiguration",
-          "documentation":"<p>Provides information on boosting <code>NUMBER</code> type document attributes.</p>"
+          "documentation":"<p>Provides information on boosting <code>NUMBER</code> type document attributes.</p> <p> <code>NUMBER</code> attributes are not supported when using <code>NativeIndexConfiguration</code> version 2, which focuses on <code>DATE</code> attributes for recency and <code>STRING</code> attributes for source prioritization.</p>"
         },
         "stringConfiguration":{
           "shape":"StringAttributeBoostingConfiguration",
-          "documentation":"<p>Provides information on boosting <code>STRING</code> type document attributes.</p>"
+          "documentation":"<p>Provides information on boosting <code>STRING</code> type document attributes.</p> <p>Version 2 assigns priority tiers to <code>STRING</code> attributes, establishing clear hierarchical relationships with other boosted attributes.</p>"
         },
         "dateConfiguration":{
           "shape":"DateAttributeBoostingConfiguration",
-          "documentation":"<p>Provides information on boosting <code>DATE</code> type document attributes.</p>"
+          "documentation":"<p>Provides information on boosting <code>DATE</code> type document attributes.</p> <p>Version 2 assigns priority tiers to <code>DATE</code> attributes, establishing clear hierarchical relationships with other boosted attributes.</p>"
         },
         "stringListConfiguration":{
           "shape":"StringListAttributeBoostingConfiguration",
-          "documentation":"<p>Provides information on boosting <code>STRING_LIST</code> type document attributes.</p>"
+          "documentation":"<p>Provides information on boosting <code>STRING_LIST</code> type document attributes.</p> <p> <code>STRING_LIST</code> attributes are not supported when using <code>NativeIndexConfiguration</code> version 2, which focuses on <code>DATE</code> attributes for recency and <code>STRING</code> attributes for source prioritization.</p>"
         }
       },
-      "documentation":"<p>Provides information on boosting supported Amazon Q Business document attribute types. When an end user chat query matches document attributes that have been boosted, Amazon Q Business prioritizes generating responses from content that matches the boosted document attributes.</p> <note> <p>For <code>STRING</code> and <code>STRING_LIST</code> type document attributes to be used for boosting on the console and the API, they must be enabled for search using the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_DocumentAttributeConfiguration.html\">DocumentAttributeConfiguration</a> object of the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_UpdateIndex.html\">UpdateIndex</a> API. If you haven't enabled searching on these attributes, you can't boost attributes of these data types on either the console or the API.</p> </note> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>",
+      "documentation":"<p>Provides information on boosting supported Amazon Q Business document attribute types. When an end user chat query matches document attributes that have been boosted, Amazon Q Business prioritizes generating responses from content that matches the boosted document attributes.</p> <p>In version 2, boosting uses numeric values (ONE, TWO) to indicate priority tiers that establish clear hierarchical relationships between boosted attributes. This allows for more precise control over how different attributes influence search results.</p> <note> <p>For <code>STRING</code> and <code>STRING_LIST</code> type document attributes to be used for boosting on the console and the API, they must be enabled for search using the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_DocumentAttributeConfiguration.html\">DocumentAttributeConfiguration</a> object of the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_UpdateIndex.html\">UpdateIndex</a> API. If you haven't enabled searching on these attributes, you can't boost attributes of these data types on either the console or the API.</p> </note> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>",
       "union":true
     },
     "DocumentAttributeBoostingLevel":{
@@ -3937,7 +4837,9 @@
         "LOW",
         "MEDIUM",
         "HIGH",
-        "VERY_HIGH"
+        "VERY_HIGH",
+        "ONE",
+        "TWO"
       ]
     },
     "DocumentAttributeBoostingOverrideMap":{
@@ -4061,7 +4963,7 @@
           "documentation":"<p>The path to the document in an Amazon S3 bucket.</p>"
         }
       },
-      "documentation":"<p>The contents of a document.</p>",
+      "documentation":"<p>The contents of a document.</p> <note> <p>Documents have size limitations. The maximum file size for a document is 50 MB. The maximum amount of text that can be extracted from a single document is 5 MB. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/doc-types.html\">Supported document formats in Amazon Q Business</a>.</p> </note>",
       "union":true
     },
     "DocumentContentOperator":{
@@ -4432,6 +5334,10 @@
           "shape":"ResponseScope",
           "documentation":"<p>The response scope configured for a Amazon Q Business application. This determines whether your application uses its retrieval augmented generation (RAG) system to generate answers only from your enterprise data, or also uses the large language models (LLM) knowledge to respons to end user questions in chat.</p>"
         },
+        "orchestrationConfiguration":{
+          "shape":"AppliedOrchestrationConfiguration",
+          "documentation":"<p> The chat response orchestration settings for your application.</p> <note> <p>Chat orchestration is optimized to work for English language content. For more details on language support in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/supported-languages.html\">Supported languages</a>.</p> </note>"
+        },
         "blockedPhrases":{
           "shape":"BlockedPhrasesConfiguration",
           "documentation":"<p>The phrases blocked from chat by your chat control configuration.</p>"
@@ -4447,6 +5353,60 @@
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>If the <code>maxResults</code> response was incomplete because there is more data to retrieve, Amazon Q Business returns a pagination token in the response. You can use this pagination token to retrieve the next set of Amazon Q Business chat controls configured.</p>"
+        },
+        "hallucinationReductionConfiguration":{
+          "shape":"HallucinationReductionConfiguration",
+          "documentation":"<p> The hallucination reduction settings for your application.</p>"
+        }
+      }
+    },
+    "GetChatResponseConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "chatResponseConfigurationId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application containing the chat response configuration to retrieve.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>The unique identifier of the chat response configuration to retrieve from the specified application.</p>",
+          "location":"uri",
+          "locationName":"chatResponseConfigurationId"
+        }
+      }
+    },
+    "GetChatResponseConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>The unique identifier of the retrieved chat response configuration.</p>"
+        },
+        "chatResponseConfigurationArn":{
+          "shape":"ChatResponseConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the retrieved chat response configuration, which uniquely identifies the resource across all Amazon Web Services services. </p>"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The human-readable name of the retrieved chat response configuration, making it easier to identify among multiple configurations.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp indicating when the chat response configuration was initially created.</p>"
+        },
+        "inUseConfiguration":{
+          "shape":"ChatResponseConfigurationDetail",
+          "documentation":"<p>The currently active configuration settings that are being used to generate responses in the Amazon Q Business application.</p>"
+        },
+        "lastUpdateConfiguration":{
+          "shape":"ChatResponseConfigurationDetail",
+          "documentation":"<p>Information about the most recent update to the configuration, including timestamp and modification details.</p>"
         }
       }
     },
@@ -4459,7 +5419,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -4488,11 +5448,11 @@
         },
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application associated with this data accessor.</p>"
+          "documentation":"<p>The unique identifier of the Amazon Q Business application associated with this data accessor.</p>"
         },
         "idcApplicationArn":{
           "shape":"IdcApplicationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS IAM Identity Center application associated with this data accessor.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Identity Center application associated with this data accessor.</p>"
         },
         "principal":{
           "shape":"PrincipalRoleArn",
@@ -4502,6 +5462,10 @@
           "shape":"ActionConfigurationList",
           "documentation":"<p>The list of action configurations specifying the allowed actions and any associated filters.</p>"
         },
+        "authenticationDetail":{
+          "shape":"DataAccessorAuthenticationDetail",
+          "documentation":"<p>The authentication configuration details for the data accessor. This specifies how the ISV authenticates when accessing data through this data accessor.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp when the data accessor was created.</p>"
@@ -4610,6 +5574,63 @@
         }
       }
     },
+    "GetDocumentContentRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "indexId",
+        "documentId"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application containing the document. This ensures the request is scoped to the correct application environment and its associated security policies.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "indexId":{
+          "shape":"IndexId",
+          "documentation":"<p>The identifier of the index where documents are indexed.</p>",
+          "location":"uri",
+          "locationName":"indexId"
+        },
+        "dataSourceId":{
+          "shape":"DataSourceId",
+          "documentation":"<p>The identifier of the data source from which the document was ingested. This field is not present if the document is ingested by directly calling the BatchPutDocument API. If the document is from a file-upload data source, the datasource will be \"uploaded-docs-file-stat-datasourceid\".</p>",
+          "location":"querystring",
+          "locationName":"dataSourceId"
+        },
+        "documentId":{
+          "shape":"DocumentId",
+          "documentation":"<p>The unique identifier of the document that is indexed via BatchPutDocument API or file-upload or connector sync. It is also found in chat or chatSync response.</p>",
+          "location":"uri",
+          "locationName":"documentId"
+        },
+        "outputFormat":{
+          "shape":"OutputFormat",
+          "documentation":"<p>Document outputFormat. Defaults to RAW if not selected.</p>",
+          "location":"querystring",
+          "locationName":"outputFormat"
+        }
+      }
+    },
+    "GetDocumentContentResponse":{
+      "type":"structure",
+      "required":[
+        "presignedUrl",
+        "mimeType"
+      ],
+      "members":{
+        "presignedUrl":{
+          "shape":"String",
+          "documentation":"<p>A pre-signed URL that provides temporary access to download the document content directly from Amazon Q Business. The URL expires after 5 minutes for security purposes. This URL is generated only after successful ACL validation.</p>"
+        },
+        "mimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the document content. When outputFormat is RAW, this corresponds to the original document's MIME type (e.g., application/pdf, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document). When outputFormat is EXTRACTED, the MIME type is always application/json.</p>"
+        }
+      }
+    },
     "GetGroupRequest":{
       "type":"structure",
       "required":[
@@ -4860,7 +5881,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         }
@@ -5038,7 +6059,7 @@
         },
         "origins":{
           "shape":"WebExperienceOrigins",
-          "documentation":"<p>Gets the website domain origins that are allowed to embed the Amazon Q Business web experience. <pre><code> The &lt;i&gt;domain origin&lt;/i&gt; refers to the base URL for accessing a website including the protocol (&lt;code&gt;http/https&lt;/code&gt;), the domain name, and the port number (if specified). &lt;/p&gt; </code></pre>"
+          "documentation":"<p>Gets the website domain origins that are allowed to embed the Amazon Q Business web experience. The <i>domain origin</i> refers to the base URL for accessing a website including the protocol (<code>http/https</code>), the domain name, and the port number (if specified). </p>"
         },
         "roleArn":{
           "shape":"RoleArn",
@@ -5068,6 +6089,12 @@
         }
       }
     },
+    "GroupIdentifier":{
+      "type":"string",
+      "max":47,
+      "min":1,
+      "pattern":"([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
+    },
     "GroupMembers":{
       "type":"structure",
       "members":{
@@ -5135,6 +6162,23 @@
       "type":"list",
       "member":{"shape":"GroupSummary"}
     },
+    "HallucinationReductionConfiguration":{
+      "type":"structure",
+      "members":{
+        "hallucinationReductionControl":{
+          "shape":"HallucinationReductionControl",
+          "documentation":"<p>Controls whether hallucination reduction has been enabled or disabled for your application. The default status is <code>DISABLED</code>. </p>"
+        }
+      },
+      "documentation":"<p>Configuration information required to setup hallucination reduction. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/hallucination-reduction.html\"> hallucination reduction</a>.</p> <note> <p>The hallucination reduction feature won't work if chat orchestration controls are enabled for your application.</p> </note>"
+    },
+    "HallucinationReductionControl":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "HookConfiguration":{
       "type":"structure",
       "members":{
@@ -5144,7 +6188,7 @@
         },
         "lambdaArn":{
           "shape":"LambdaArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a role with permission to run a Lambda function during ingestion. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/iam-roles.html#cde-iam-role\">IAM roles for Custom Document Enrichment (CDE)</a>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Lambda function during ingestion. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/cde-lambda-operations.html\">Using Lambda functions for Amazon Q Business document enrichment</a>.</p>"
         },
         "s3BucketName":{
           "shape":"S3BucketName",
@@ -5187,6 +6231,12 @@
       },
       "documentation":"<p>Information about the IAM Identity Center Application used to configure authentication for a plugin.</p>"
     },
+    "IdcTrustedTokenIssuerArn":{
+      "type":"string",
+      "max":1284,
+      "min":0,
+      "pattern":"arn:aws:sso::[0-9]{12}:trustedTokenIssuer/(sso)?ins-[a-zA-Z0-9-.]{16}/tti-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
     "IdentityProviderConfiguration":{
       "type":"structure",
       "members":{
@@ -5202,7 +6252,8 @@
         "AWS_IAM_IDP_SAML",
         "AWS_IAM_IDP_OIDC",
         "AWS_IAM_IDC",
-        "AWS_QUICKSIGHT_IDP"
+        "AWS_QUICKSIGHT_IDP",
+        "ANONYMOUS"
       ]
     },
     "ImageExtractionConfiguration":{
@@ -5223,6 +6274,20 @@
         "DISABLED"
       ]
     },
+    "ImageSourceDetails":{
+      "type":"structure",
+      "members":{
+        "mediaId":{
+          "shape":"MediaId",
+          "documentation":"<p>Unique identifier for the image file.</p>"
+        },
+        "mediaMimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the image file.</p>"
+        }
+      },
+      "documentation":"<p>Details about an image source, including its identifier and format.</p>"
+    },
     "Index":{
       "type":"structure",
       "members":{
@@ -5347,6 +6412,50 @@
       "min":10,
       "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}"
     },
+    "Instruction":{
+      "type":"string",
+      "max":1000,
+      "min":5,
+      "pattern":"[\\s\\S]*"
+    },
+    "InstructionCollection":{
+      "type":"structure",
+      "members":{
+        "responseLength":{
+          "shape":"Instruction",
+          "documentation":"<p>Specifies the desired length of responses generated by Amazon Q Business. This parameter allows administrators to control whether responses are concise and brief or more detailed and comprehensive.</p>"
+        },
+        "targetAudience":{
+          "shape":"Instruction",
+          "documentation":"<p>Defines the intended audience for the responses, allowing Amazon Q Business to tailor its language, terminology, and explanations appropriately. This could range from technical experts to general users with varying levels of domain knowledge.</p>"
+        },
+        "perspective":{
+          "shape":"Instruction",
+          "documentation":"<p>Determines the point of view or perspective from which Amazon Q Business generates responses, such as first-person, second-person, or third-person perspective, affecting how information is presented to users.</p>"
+        },
+        "outputStyle":{
+          "shape":"Instruction",
+          "documentation":"<p>Specifies the formatting and structural style of responses, such as bullet points, paragraphs, step-by-step instructions, or other organizational formats that enhance readability and comprehension.</p>"
+        },
+        "identity":{
+          "shape":"Instruction",
+          "documentation":"<p>Defines the persona or identity that Amazon Q Business should adopt when responding to users, allowing for customization of the assistant's character, role, or representation within an organization.</p>"
+        },
+        "tone":{
+          "shape":"Instruction",
+          "documentation":"<p>Controls the emotional tone and communication style of responses, such as formal, casual, technical, friendly, or professional, to align with organizational communication standards and user expectations.</p>"
+        },
+        "customInstructions":{
+          "shape":"Instruction",
+          "documentation":"<p>Allows administrators to provide specific, custom instructions that guide how Amazon Q Business should respond in particular scenarios or to certain types of queries, enabling fine-grained control over response generation.</p>"
+        },
+        "examples":{
+          "shape":"Instruction",
+          "documentation":"<p>Provides sample responses or templates that Amazon Q Business can reference when generating responses, helping to establish consistent patterns and formats for different types of user queries.</p>"
+        }
+      },
+      "documentation":"<p>A set of instructions that define how Amazon Q Business should generate and format responses to user queries. This collection includes parameters for controlling response characteristics such as length, audience targeting, perspective, style, identity, tone, and custom instructions.</p>"
+    },
     "Integer":{
       "type":"integer",
       "box":true
@@ -5483,6 +6592,43 @@
         }
       }
     },
+    "ListChatResponseConfigurationsRequest":{
+      "type":"structure",
+      "required":["applicationId"],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application for which to list available chat response configurations.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of chat response configurations to return in a single response. This parameter helps control pagination of results when many configurations exist.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token used to retrieve the next set of results when the number of configurations exceeds the specified <code>maxResults</code> value.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListChatResponseConfigurationsResponse":{
+      "type":"structure",
+      "members":{
+        "chatResponseConfigurations":{
+          "shape":"ChatResponseConfigurations",
+          "documentation":"<p>A list of chat response configuration summaries, each containing key information about an available configuration in the specified application.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token that can be used in a subsequent request to retrieve additional chat response configurations if the results were truncated due to the <code>maxResults</code> parameter.</p>"
+        }
+      }
+    },
     "ListConversationsRequest":{
       "type":"structure",
       "required":["applicationId"],
@@ -5532,7 +6678,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -6071,6 +7217,43 @@
         }
       }
     },
+    "ListSubscriptionsRequest":{
+      "type":"structure",
+      "required":["applicationId"],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The identifier of the Amazon Q Business application linked to the subscription.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the <code>maxResults</code> response was incomplete because there is more data to retrieve, Amazon Q Business returns a pagination token in the response. You can use this pagination token to retrieve the next set of Amazon Q Business subscriptions.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResultsIntegerForListSubscriptions",
+          "documentation":"<p>The maximum number of Amazon Q Business subscriptions to return.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListSubscriptionsResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the response is truncated, Amazon Q Business returns this token. You can use this token in a subsequent request to retrieve the next set of subscriptions.</p>"
+        },
+        "subscriptions":{
+          "shape":"Subscriptions",
+          "documentation":"<p>An array of summary information on the subscriptions configured for an Amazon Q Business application.</p>"
+        }
+      }
+    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["resourceARN"],
@@ -6141,7 +7324,9 @@
     },
     "MaxResults":{
       "type":"integer",
-      "box":true
+      "box":true,
+      "max":100,
+      "min":1
     },
     "MaxResultsIntegerForGetTopicConfigurations":{
       "type":"integer",
@@ -6239,6 +7424,12 @@
       "max":50,
       "min":1
     },
+    "MaxResultsIntegerForListSubscriptions":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
     "MaxResultsIntegerForListWebExperiencesRequest":{
       "type":"integer",
       "box":true,
@@ -6251,6 +7442,14 @@
         "imageExtractionConfiguration":{
           "shape":"ImageExtractionConfiguration",
           "documentation":"<p>The configuration for extracting semantic meaning from images in documents. For more information, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/extracting-meaning-from-images.html\">Extracting semantic meaning from images and visuals</a>. </p>"
+        },
+        "audioExtractionConfiguration":{
+          "shape":"AudioExtractionConfiguration",
+          "documentation":"<p>Configuration settings for extracting and processing audio content from media files.</p>"
+        },
+        "videoExtractionConfiguration":{
+          "shape":"VideoExtractionConfiguration",
+          "documentation":"<p>Configuration settings for extracting and processing video content from media files.</p>"
         }
       },
       "documentation":"<p>The configuration for extracting information from media in documents.</p>"
@@ -6476,6 +7675,10 @@
           "shape":"IndexId",
           "documentation":"<p>The identifier for the Amazon Q Business index.</p>"
         },
+        "version":{
+          "shape":"Long",
+          "documentation":"<p>A read-only field that specifies the version of the <code>NativeIndexConfiguration</code>.</p> <p>Amazon Q Business introduces enhanced document retrieval capabilities in version 2 of <code>NativeIndexConfiguration</code>, focusing on streamlined metadata boosting that prioritizes recency and source relevance to deliver more accurate responses to your queries. Version 2 has the following differences from version 1:</p> <ul> <li> <p>Version 2 supports a single Date field (created_at OR last_updated_at) for recency boosting</p> </li> <li> <p>Version 2 supports a single String field with an ordered list of up to 5 values</p> </li> <li> <p>Version 2 introduces number-based boost levels (ONE, TWO) alongside the text-based levels</p> </li> <li> <p>Version 2 allows specifying prioritization between Date and String fields</p> </li> <li> <p>Version 2 maintains backward compatibility with existing configurations</p> </li> </ul>"
+        },
         "boostingOverride":{
           "shape":"DocumentAttributeBoostingOverrideMap",
           "documentation":"<p>Overrides the default boosts applied by Amazon Q Business to supported document attribute data types.</p>"
@@ -6505,14 +7708,14 @@
       "members":{
         "boostingLevel":{
           "shape":"DocumentAttributeBoostingLevel",
-          "documentation":"<p>Specifies the duration, in seconds, of a boost applies to a <code>NUMBER</code> type document attribute.</p>"
+          "documentation":"<p>Specifies the priority of boosted document attributes in relation to other boosted attributes. This parameter determines how strongly the attribute influences document ranking in search results. <code>NUMBER</code> attributes can serve as additional boosting factors when needed, but are not supported when using <code>NativeIndexConfiguration</code> version 2.</p>"
         },
         "boostingType":{
           "shape":"NumberAttributeBoostingType",
-          "documentation":"<p>Specifies how much a document attribute is boosted.</p>"
+          "documentation":"<p>Specifies whether higher or lower numeric values should be prioritized when boosting. Valid values are ASCENDING (higher numbers are more important) and DESCENDING (lower numbers are more important).</p>"
         }
       },
-      "documentation":"<p>Provides information on boosting <code>NUMBER</code> type document attributes.</p> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>"
+      "documentation":"<p>Provides information on boosting <code>NUMBER</code> type document attributes.</p> <p>In the current boosting implementation, boosting focuses primarily on <code>DATE</code> attributes for recency and <code>STRING</code> attributes for source prioritization. <code>NUMBER</code> attributes can serve as additional boosting factors when needed, but are not supported when using <code>NativeIndexConfiguration</code> version 2.</p> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>"
     },
     "NumberAttributeBoostingType":{
       "type":"string",
@@ -6565,16 +7768,90 @@
       },
       "documentation":"<p>Information about the OIDC-compliant identity provider (IdP) used to authenticate end users of an Amazon Q Business web experience.</p>"
     },
+    "OrchestrationConfiguration":{
+      "type":"structure",
+      "required":["control"],
+      "members":{
+        "control":{
+          "shape":"OrchestrationControl",
+          "documentation":"<p> Status information about whether chat orchestration is activated or deactivated for your Amazon Q Business application.</p>"
+        }
+      },
+      "documentation":"<p>Configuration information required to enable chat orchestration for your Amazon Q Business application.</p> <note> <p>Chat orchestration is optimized to work for English language content. For more details on language support in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/supported-languages.html\">Supported languages</a>.</p> </note>"
+    },
+    "OrchestrationControl":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "Origin":{
       "type":"string",
       "max":256,
       "min":1,
       "pattern":"(http://|https://)[a-zA-Z0-9-_.]+(?::[0-9]{1,5})?"
     },
+    "OutputFormat":{
+      "type":"string",
+      "enum":[
+        "RAW",
+        "EXTRACTED"
+      ]
+    },
     "Payload":{
       "type":"string",
       "sensitive":true
     },
+    "PermissionCondition":{
+      "type":"structure",
+      "required":[
+        "conditionOperator",
+        "conditionKey",
+        "conditionValues"
+      ],
+      "members":{
+        "conditionOperator":{
+          "shape":"PermissionConditionOperator",
+          "documentation":"<p>The operator to use for the condition evaluation. This determines how the condition values are compared.</p>"
+        },
+        "conditionKey":{
+          "shape":"PermissionConditionKey",
+          "documentation":"<p>The key for the condition. This identifies the attribute that the condition applies to.</p>"
+        },
+        "conditionValues":{
+          "shape":"PermissionConditionValues",
+          "documentation":"<p>The values to compare against using the specified condition operator.</p>"
+        }
+      },
+      "documentation":"<p>Defines a condition that restricts when a permission is effective. Conditions allow you to control access based on specific attributes of the request.</p>"
+    },
+    "PermissionConditionKey":{
+      "type":"string",
+      "pattern":"aws:PrincipalTag/qbusiness-dataaccessor:[a-zA-Z]+.*"
+    },
+    "PermissionConditionOperator":{
+      "type":"string",
+      "enum":["StringEquals"]
+    },
+    "PermissionConditionValue":{
+      "type":"string",
+      "max":1000,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_-]*"
+    },
+    "PermissionConditionValues":{
+      "type":"list",
+      "member":{"shape":"PermissionConditionValue"},
+      "max":1,
+      "min":1
+    },
+    "PermissionConditions":{
+      "type":"list",
+      "member":{"shape":"PermissionCondition"},
+      "max":10,
+      "min":1
+    },
     "PersonalizationConfiguration":{
       "type":"structure",
       "required":["personalizationControlMode"],
@@ -6903,7 +8180,7 @@
         "groupMembers":{"shape":"GroupMembers"},
         "roleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that has access to the S3 file that contains your list of users that belong to a group.The Amazon Resource Name (ARN) of an IAM role that has access to the S3 file that contains your list of users that belong to a group.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of an IAM role that has access to the S3 file that contains your list of users that belong to a group.</p>"
         }
       }
     },
@@ -7021,6 +8298,32 @@
       },
       "exception":true
     },
+    "ResponseConfiguration":{
+      "type":"structure",
+      "members":{
+        "instructionCollection":{
+          "shape":"InstructionCollection",
+          "documentation":"<p>A collection of instructions that guide how Amazon Q Business generates responses, including parameters for response length, target audience, perspective, output style, identity, tone, and custom instructions.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings to define how Amazon Q Business generates and formats responses to user queries. This includes customization options for response style, tone, length, and other characteristics.</p>"
+    },
+    "ResponseConfigurationSummary":{
+      "type":"string",
+      "max":1000,
+      "min":1
+    },
+    "ResponseConfigurationType":{
+      "type":"string",
+      "enum":["ALL"]
+    },
+    "ResponseConfigurations":{
+      "type":"map",
+      "key":{"shape":"ResponseConfigurationType"},
+      "value":{"shape":"ResponseConfiguration"},
+      "max":1,
+      "min":1
+    },
     "ResponseScope":{
       "type":"string",
       "enum":[
@@ -7285,7 +8588,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application to search.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application to search.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -7300,7 +8603,8 @@
         "attributeFilter":{"shape":"AttributeFilter"},
         "maxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>"
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "box":true
         },
         "nextToken":{
           "shape":"NextToken",
@@ -7367,6 +8671,12 @@
       },
       "exception":true
     },
+    "SessionDurationInMinutes":{
+      "type":"integer",
+      "box":true,
+      "max":60,
+      "min":15
+    },
     "SnippetExcerpt":{
       "type":"structure",
       "members":{
@@ -7404,6 +8714,18 @@
         "textMessageSegments":{
           "shape":"TextSegmentList",
           "documentation":"<p>A text extract from a source document that is used for source attribution.</p>"
+        },
+        "documentId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the source document used in the citation, obtained from the Amazon Q Business index during chat response generation. This ID is used as input to the <code>GetDocumentContent</code> API to retrieve the actual document content for user verification.</p>"
+        },
+        "indexId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the index containing the source document's metadata and access control information. This links the citation back to the specific Amazon Q Business index where the document's searchable content and permissions are stored.</p>"
+        },
+        "datasourceId":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the data source from which the document was ingested. This field is not present if the document is ingested by directly calling the BatchPutDocument API (similar to checkDocumentAccess). If the document is from a file-upload data source, the datasource will be \"uploaded-docs-file-stat-datasourceid\".</p>"
         }
       },
       "documentation":"<p>The documents used to generate an Amazon Q Business web experience response.</p>"
@@ -7418,6 +8740,25 @@
       "type":"list",
       "member":{"shape":"SourceAttribution"}
     },
+    "SourceDetails":{
+      "type":"structure",
+      "members":{
+        "imageSourceDetails":{
+          "shape":"ImageSourceDetails",
+          "documentation":"<p>Details specific to image content within the source.</p>"
+        },
+        "audioSourceDetails":{
+          "shape":"AudioSourceDetails",
+          "documentation":"<p>Details specific to audio content within the source.</p>"
+        },
+        "videoSourceDetails":{
+          "shape":"VideoSourceDetails",
+          "documentation":"<p>Details specific to video content within the source.</p>"
+        }
+      },
+      "documentation":"<p>Container for details about different types of media sources (image, audio, or video).</p>",
+      "union":true
+    },
     "StartDataSourceSyncJobRequest":{
       "type":"structure",
       "required":[
@@ -7512,11 +8853,11 @@
       "members":{
         "boostingLevel":{
           "shape":"DocumentAttributeBoostingLevel",
-          "documentation":"<p>Specifies how much a document attribute is boosted.</p>"
+          "documentation":"<p>Specifies the priority tier ranking of boosting applied to document attributes. For version 2, this parameter indicates the relative ranking between boosted fields (ONE being highest priority, TWO being second highest, etc.) and determines the order in which attributes influence document ranking in search results. For version 1, this parameter specifies the boosting intensity. For version 2, boosting intensity (VERY HIGH, HIGH, MEDIUM, LOW, NONE) are not supported. Note that in version 2, you are not allowed to boost on only one field and make this value TWO.</p>"
         },
         "attributeValueBoosting":{
           "shape":"StringAttributeValueBoosting",
-          "documentation":"<p>Specifies specific values of a <code>STRING</code> type document attribute being boosted.</p>"
+          "documentation":"<p>Specifies specific values of a <code>STRING</code> type document attribute being boosted. When using <code>NativeIndexConfiguration</code> version 2, you can specify up to five values in order of priority.</p>"
         }
       },
       "documentation":"<p>Provides information on boosting <code>STRING</code> type document attributes.</p> <note> <p>For <code>STRING</code> and <code>STRING_LIST</code> type document attributes to be used for boosting on the console and the API, they must be enabled for search using the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_DocumentAttributeConfiguration.html\">DocumentAttributeConfiguration</a> object of the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_UpdateIndex.html\">UpdateIndex</a> API. If you haven't enabled searching on these attributes, you can't boost attributes of these data types on either the console or the API.</p> </note> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>"
@@ -7534,7 +8875,12 @@
         "LOW",
         "MEDIUM",
         "HIGH",
-        "VERY_HIGH"
+        "VERY_HIGH",
+        "ONE",
+        "TWO",
+        "THREE",
+        "FOUR",
+        "FIVE"
       ]
     },
     "StringListAttributeBoostingConfiguration":{
@@ -7543,10 +8889,10 @@
       "members":{
         "boostingLevel":{
           "shape":"DocumentAttributeBoostingLevel",
-          "documentation":"<p>Specifies how much a document attribute is boosted.</p>"
+          "documentation":"<p>Specifies the priority of boosted document attributes in relation to other boosted attributes. This parameter determines how strongly the attribute influences document ranking in search results. <code>STRING_LIST</code> attributes can serve as additional boosting factors when needed, but are not supported when using <code>NativeIndexConfiguration</code> version 2.</p>"
         }
       },
-      "documentation":"<p>Provides information on boosting <code>STRING_LIST</code> type document attributes.</p> <note> <p>For <code>STRING</code> and <code>STRING_LIST</code> type document attributes to be used for boosting on the console and the API, they must be enabled for search using the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_DocumentAttributeConfiguration.html\">DocumentAttributeConfiguration</a> object of the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_UpdateIndex.html\">UpdateIndex</a> API. If you haven't enabled searching on these attributes, you can't boost attributes of these data types on either the console or the API.</p> </note> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>"
+      "documentation":"<p>Provides information on boosting <code>STRING_LIST</code> type document attributes.</p> <p>In the current boosting implementation, boosting focuses primarily on <code>DATE</code> attributes for recency and <code>STRING</code> attributes for source prioritization. <code>STRING_LIST</code> attributes can serve as additional boosting factors when needed, but are not supported when using <code>NativeIndexConfiguration</code> version 2.</p> <note> <p>For <code>STRING</code> and <code>STRING_LIST</code> type document attributes to be used for boosting on the console and the API, they must be enabled for search using the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_DocumentAttributeConfiguration.html\">DocumentAttributeConfiguration</a> object of the <a href=\"https://docs.aws.amazon.com/amazonq/latest/api-reference/API_UpdateIndex.html\">UpdateIndex</a> API. If you haven't enabled searching on these attributes, you can't boost attributes of these data types on either the console or the API.</p> </note> <p>For more information on how boosting document attributes work in Amazon Q Business, see <a href=\"https://docs.aws.amazon.com/amazonq/latest/business-use-dg/metadata-boosting.html\">Boosting using document attributes</a>.</p>"
     },
     "SubnetId":{
       "type":"string",
@@ -7558,6 +8904,68 @@
       "type":"list",
       "member":{"shape":"SubnetId"}
     },
+    "Subscription":{
+      "type":"structure",
+      "members":{
+        "subscriptionId":{
+          "shape":"SubscriptionId",
+          "documentation":"<p>The identifier of the Amazon Q Business subscription to be updated.</p>"
+        },
+        "subscriptionArn":{
+          "shape":"SubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Business subscription that was updated.</p>"
+        },
+        "principal":{
+          "shape":"SubscriptionPrincipal",
+          "documentation":"<p>The IAM Identity Center <code>UserId</code> or <code>GroupId</code> of a user or group in the IAM Identity Center instance connected to the Amazon Q Business application.</p>"
+        },
+        "currentSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of your current Amazon Q Business subscription.</p>"
+        },
+        "nextSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of the Amazon Q Business subscription for the next month.</p>"
+        }
+      },
+      "documentation":"<p>Information about an Amazon Q Business subscription.</p> <p>Subscriptions are used to provide access for an IAM Identity Center user or a group to an Amazon Q Business application.</p> <p>Amazon Q Business offers two subscription tiers: <code>Q_LITE</code> and <code>Q_BUSINESS</code>. Subscription tier determines feature access for the user. For more information on subscriptions and pricing tiers, see <a href=\"https://aws.amazon.com/q/business/pricing/\">Amazon Q Business pricing</a>.</p>"
+    },
+    "SubscriptionArn":{
+      "type":"string",
+      "max":1224,
+      "min":10,
+      "pattern":"arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}"
+    },
+    "SubscriptionDetails":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"SubscriptionType",
+          "documentation":"<p> The type of an Amazon Q Business subscription. </p>"
+        }
+      },
+      "documentation":"<p> The details of an Amazon Q Business subscription. </p>"
+    },
+    "SubscriptionId":{
+      "type":"string",
+      "max":1224,
+      "min":0
+    },
+    "SubscriptionPrincipal":{
+      "type":"structure",
+      "members":{
+        "user":{
+          "shape":"UserIdentifier",
+          "documentation":"<p>The identifier of a user in the IAM Identity Center instance connected to the Amazon Q Business application.</p>"
+        },
+        "group":{
+          "shape":"GroupIdentifier",
+          "documentation":"<p>The identifier of a group in the IAM Identity Center instance connected to the Amazon Q Business application.</p>"
+        }
+      },
+      "documentation":"<p>A user or group in the IAM Identity Center instance connected to the Amazon Q Business application.</p>",
+      "union":true
+    },
     "SubscriptionType":{
       "type":"string",
       "enum":[
@@ -7565,6 +8973,10 @@
         "Q_BUSINESS"
       ]
     },
+    "Subscriptions":{
+      "type":"list",
+      "member":{"shape":"Subscription"}
+    },
     "SyncSchedule":{
       "type":"string",
       "max":998,
@@ -7583,6 +8995,13 @@
       "min":0,
       "pattern":"\\P{C}*"
     },
+    "SystemMessageType":{
+      "type":"string",
+      "enum":[
+        "RESPONSE",
+        "GROUNDED_RESPONSE"
+      ]
+    },
     "Tag":{
       "type":"structure",
       "required":[
@@ -7676,6 +9095,10 @@
     "TextOutputEvent":{
       "type":"structure",
       "members":{
+        "systemMessageType":{
+          "shape":"SystemMessageType",
+          "documentation":"<p>The type of AI-generated message in a <code>TextOutputEvent</code>. Amazon Q Business currently supports two types of messages:</p> <ul> <li> <p> <code>RESPONSE</code> - The Amazon Q Business system response.</p> </li> <li> <p> <code>GROUNDED_RESPONSE</code> - The corrected, hallucination-reduced, response returned by Amazon Q Business. Available only if hallucination reduction is supported and configured for the application and detected in the end user chat query by Amazon Q Business.</p> </li> </ul>"
+        },
         "conversationId":{
           "shape":"ConversationId",
           "documentation":"<p>The identifier of the conversation with which the text output event is associated.</p>"
@@ -7713,11 +9136,21 @@
         },
         "mediaId":{
           "shape":"SourceAttributionMediaId",
-          "documentation":"<p>The identifier of the media object associated with the text segment in the source attribution.</p>"
+          "documentation":"<p>The identifier of the media object associated with the text segment in the source attribution.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Deprecated in favor of using mediaId within the respective sourceDetails field.",
+          "deprecatedSince":"2025-02-28"
         },
         "mediaMimeType":{
           "shape":"String",
-          "documentation":"<p>The MIME type (image/png) of the media object associated with the text segment in the source attribution.</p>"
+          "documentation":"<p>The MIME type (image/png) of the media object associated with the text segment in the source attribution.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Deprecated in favor of using mediaMimeType within the respective sourceDetails field.",
+          "deprecatedSince":"2025-02-28"
+        },
+        "sourceDetails":{
+          "shape":"SourceDetails",
+          "documentation":"<p>Source information for a segment of extracted text, including its media type.</p>"
         }
       },
       "documentation":"<p>Provides information about a text extract in a chat response that can be attributed to a source document.</p>"
@@ -7883,6 +9316,10 @@
           "shape":"ResponseScope",
           "documentation":"<p>The response scope configured for your application. This determines whether your application uses its retrieval augmented generation (RAG) system to generate answers only from your enterprise data, or also uses the large language models (LLM) knowledge to respons to end user questions in chat.</p>"
         },
+        "orchestrationConfiguration":{
+          "shape":"OrchestrationConfiguration",
+          "documentation":"<p> The chat response orchestration settings for your application.</p>"
+        },
         "blockedPhrasesConfigurationUpdate":{
           "shape":"BlockedPhrasesConfigurationUpdate",
           "documentation":"<p>The phrases blocked from chat by your chat control configuration.</p>"
@@ -7898,6 +9335,10 @@
         "creatorModeConfiguration":{
           "shape":"CreatorModeConfiguration",
           "documentation":"<p>The configuration details for <code>CREATOR_MODE</code>.</p>"
+        },
+        "hallucinationReductionConfiguration":{
+          "shape":"HallucinationReductionConfiguration",
+          "documentation":"<p> The hallucination reduction settings for your application.</p>"
         }
       }
     },
@@ -7906,6 +9347,46 @@
       "members":{
       }
     },
+    "UpdateChatResponseConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "chatResponseConfigurationId",
+        "responseConfigurations"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application containing the chat response configuration to update.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "chatResponseConfigurationId":{
+          "shape":"ChatResponseConfigurationId",
+          "documentation":"<p>The unique identifier of the chat response configuration to update within the specified application.</p>",
+          "location":"uri",
+          "locationName":"chatResponseConfigurationId"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The new human-readable name to assign to the chat response configuration, making it easier to identify among multiple configurations.</p>"
+        },
+        "responseConfigurations":{
+          "shape":"ResponseConfigurations",
+          "documentation":"<p>The updated collection of response configuration settings that define how Amazon Q Business generates and formats responses to user queries.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier to ensure idempotency of the request. This helps prevent the same update from being processed multiple times if retries occur.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "UpdateChatResponseConfigurationResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "UpdateDataAccessorRequest":{
       "type":"structure",
       "required":[
@@ -7916,7 +9397,7 @@
       "members":{
         "applicationId":{
           "shape":"ApplicationId",
-          "documentation":"<p>The unique identifier of the Q Business application.</p>",
+          "documentation":"<p>The unique identifier of the Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"applicationId"
         },
@@ -7930,6 +9411,10 @@
           "shape":"ActionConfigurationList",
           "documentation":"<p>The updated list of action configurations specifying the allowed actions and any associated filters.</p>"
         },
+        "authenticationDetail":{
+          "shape":"DataAccessorAuthenticationDetail",
+          "documentation":"<p>The updated authentication configuration details for the data accessor. This specifies how the ISV will authenticate when accessing data through this data accessor.</p>"
+        },
         "displayName":{
           "shape":"DataAccessorName",
           "documentation":"<p>The updated friendly name for the data accessor.</p>"
@@ -8120,6 +9605,49 @@
       "members":{
       }
     },
+    "UpdateSubscriptionRequest":{
+      "type":"structure",
+      "required":[
+        "applicationId",
+        "subscriptionId",
+        "type"
+      ],
+      "members":{
+        "applicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The identifier of the Amazon Q Business application where the subscription update should take effect.</p>",
+          "location":"uri",
+          "locationName":"applicationId"
+        },
+        "subscriptionId":{
+          "shape":"SubscriptionId",
+          "documentation":"<p>The identifier of the Amazon Q Business subscription to be updated.</p>",
+          "location":"uri",
+          "locationName":"subscriptionId"
+        },
+        "type":{
+          "shape":"SubscriptionType",
+          "documentation":"<p>The type of the Amazon Q Business subscription to be updated.</p>"
+        }
+      }
+    },
+    "UpdateSubscriptionResponse":{
+      "type":"structure",
+      "members":{
+        "subscriptionArn":{
+          "shape":"SubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Business subscription that was updated.</p>"
+        },
+        "currentSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of your current Amazon Q Business subscription.</p>"
+        },
+        "nextSubscription":{
+          "shape":"SubscriptionDetails",
+          "documentation":"<p>The type of the Amazon Q Business subscription for the next month.</p>"
+        }
+      }
+    },
     "UpdateUserRequest":{
       "type":"structure",
       "required":[
@@ -8217,7 +9745,7 @@
         },
         "origins":{
           "shape":"WebExperienceOrigins",
-          "documentation":"<p>Updates the website domain origins that are allowed to embed the Amazon Q Business web experience. <pre><code> The &lt;i&gt;domain origin&lt;/i&gt; refers to the &lt;i&gt;base URL&lt;/i&gt; for accessing a website including the protocol (&lt;code&gt;http/https&lt;/code&gt;), the domain name, and the port number (if specified).&lt;/p&gt; &lt;note&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;Any values except &lt;code&gt;null&lt;/code&gt; submitted as part of this update will replace all previous values.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;You must only submit a &lt;i&gt;base URL&lt;/i&gt; and not a full path. For example, &lt;code&gt;https://docs.aws.amazon.com&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/note&gt; </code></pre>"
+          "documentation":"<p>Updates the website domain origins that are allowed to embed the Amazon Q Business web experience. The <i>domain origin</i> refers to the <i>base URL</i> for accessing a website including the protocol (<code>http/https</code>), the domain name, and the port number (if specified).</p> <note> <ul> <li> <p>Any values except <code>null</code> submitted as part of this update will replace all previous values.</p> </li> <li> <p>You must only submit a <i>base URL</i> and not a full path. For example, <code>https://docs.aws.amazon.com</code>.</p> </li> </ul> </note>"
         },
         "browserExtensionConfiguration":{
           "shape":"BrowserExtensionConfiguration",
@@ -8273,6 +9801,12 @@
       "min":1,
       "pattern":"\\P{C}*"
     },
+    "UserIdentifier":{
+      "type":"string",
+      "max":47,
+      "min":1,
+      "pattern":"([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
+    },
     "UserIds":{
       "type":"list",
       "member":{"shape":"String"}
@@ -8349,6 +9883,57 @@
         "UNKNOWN_OPERATION"
       ]
     },
+    "VideoExtractionConfiguration":{
+      "type":"structure",
+      "required":["videoExtractionStatus"],
+      "members":{
+        "videoExtractionStatus":{
+          "shape":"VideoExtractionStatus",
+          "documentation":"<p>The status of video extraction (ENABLED or DISABLED) for processing video content from files.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for video content extraction and processing.</p>"
+    },
+    "VideoExtractionStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "VideoExtractionType":{
+      "type":"string",
+      "enum":[
+        "TRANSCRIPT",
+        "SUMMARY"
+      ]
+    },
+    "VideoSourceDetails":{
+      "type":"structure",
+      "members":{
+        "mediaId":{
+          "shape":"MediaId",
+          "documentation":"<p>Unique identifier for the video media file.</p>"
+        },
+        "mediaMimeType":{
+          "shape":"String",
+          "documentation":"<p>The MIME type of the video file (e.g., video/mp4, video/avi).</p>"
+        },
+        "startTimeMilliseconds":{
+          "shape":"Long",
+          "documentation":"<p>The starting timestamp in milliseconds for the relevant video segment.</p>"
+        },
+        "endTimeMilliseconds":{
+          "shape":"Long",
+          "documentation":"<p>The ending timestamp in milliseconds for the relevant video segment.</p>"
+        },
+        "videoExtractionType":{
+          "shape":"VideoExtractionType",
+          "documentation":"<p>The type of video extraction performed on the content.</p>"
+        }
+      },
+      "documentation":"<p>Details about a video source, including its identifier, format, and time information.</p>"
+    },
     "WebExperience":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/service-2.json 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/service-2.json
--- 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-10-19",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"wisdom",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Amazon Q Connect",
     "serviceId":"QConnect",
     "signatureVersion":"v4",
     "signingName":"wisdom",
-    "uid":"qconnect-2020-10-19",
-    "auth":["aws.auth#sigv4"]
+    "uid":"qconnect-2020-10-19"
   },
   "operations":{
     "ActivateMessageTemplate":{
@@ -45,6 +44,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -65,9 +65,10 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Creates and Amazon Q in Connect AI Agent version.</p>",
       "idempotent":true
@@ -85,6 +86,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -105,9 +107,10 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Creates an Amazon Q in Connect AI Guardrail version.</p>",
       "idempotent":true
@@ -125,6 +128,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -145,9 +149,10 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Creates an Amazon Q in Connect AI Prompt version.</p>",
       "idempotent":true
@@ -165,6 +170,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Creates an Amazon Q in Connect assistant.</p>",
@@ -202,6 +208,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -221,6 +228,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -240,6 +248,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Creates a knowledge base.</p> <note> <p>When using this API, you cannot reuse <a href=\"https://docs.aws.amazon.com/appintegrations/latest/APIReference/Welcome.html\">Amazon AppIntegrations</a> DataIntegrations with external knowledge bases such as Salesforce and ServiceNow. If you do, you'll get an <code>InvalidRequestException</code> error. </p> <p>For example, you're programmatically managing your external knowledge base, and you want to add or remove one of the fields that is being ingested from Salesforce. Do the following:</p> <ol> <li> <p>Call <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_DeleteKnowledgeBase.html\">DeleteKnowledgeBase</a>.</p> </li> <li> <p>Call <a href=\"https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_DeleteDataIntegration.html\">DeleteDataIntegration</a>.</p> </li> <li> <p>Call <a href=\"https://docs.aws.amazon.com/appintegrations/latest/APIReference/API_CreateDataIntegration.html\">CreateDataIntegration</a> to recreate the DataIntegration or a create different one.</p> </li> <li> <p>Call CreateKnowledgeBase.</p> </li> </ol> </note>",
@@ -278,6 +287,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -317,6 +327,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -335,6 +346,8 @@
       "errors":[
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
+        {"shape":"DependencyFailedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -370,6 +383,7 @@
       "output":{"shape":"DeleteAIAgentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -387,8 +401,9 @@
       "input":{"shape":"DeleteAIAgentVersionRequest"},
       "output":{"shape":"DeleteAIAgentVersionResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -406,8 +421,9 @@
       "input":{"shape":"DeleteAIGuardrailRequest"},
       "output":{"shape":"DeleteAIGuardrailResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -425,8 +441,9 @@
       "input":{"shape":"DeleteAIGuardrailVersionRequest"},
       "output":{"shape":"DeleteAIGuardrailVersionResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -445,6 +462,7 @@
       "output":{"shape":"DeleteAIPromptResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -462,8 +480,9 @@
       "input":{"shape":"DeleteAIPromptVersionRequest"},
       "output":{"shape":"DeleteAIPromptVersionResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -482,6 +501,7 @@
       "output":{"shape":"DeleteAssistantResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -499,6 +519,7 @@
       "output":{"shape":"DeleteAssistantAssociationResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -516,6 +537,8 @@
       "output":{"shape":"DeleteContentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -533,6 +556,7 @@
       "output":{"shape":"DeleteContentAssociationResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -549,8 +573,9 @@
       "input":{"shape":"DeleteImportJobRequest"},
       "output":{"shape":"DeleteImportJobResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -569,6 +594,7 @@
       "errors":[
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -624,6 +650,7 @@
       "output":{"shape":"DeleteQuickResponseResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -641,6 +668,7 @@
       "output":{"shape":"GetAIAgentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -658,6 +686,7 @@
       "output":{"shape":"GetAIGuardrailResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -675,6 +704,7 @@
       "output":{"shape":"GetAIPromptResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -692,6 +722,7 @@
       "output":{"shape":"GetAssistantResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -708,6 +739,7 @@
       "output":{"shape":"GetAssistantAssociationResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -724,6 +756,7 @@
       "output":{"shape":"GetContentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -740,6 +773,7 @@
       "output":{"shape":"GetContentAssociationResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -756,6 +790,7 @@
       "output":{"shape":"GetContentSummaryResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -788,6 +823,7 @@
       "output":{"shape":"GetKnowledgeBaseResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -804,6 +840,7 @@
       "output":{"shape":"GetMessageTemplateResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -837,6 +874,7 @@
       "output":{"shape":"GetQuickResponseResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -856,7 +894,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<important> <p>This API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024, you will need to create a new Assistant in the Amazon Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications.</p> </important> <p>Retrieves recommendations for the specified session. To avoid retrieving the same recommendations in subsequent calls, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_NotifyRecommendationsReceived.html\">NotifyRecommendationsReceived</a>. This API supports long-polling behavior with the <code>waitTimeSeconds</code> parameter. Short poll is the default behavior and only returns recommendations already available. To perform a manual query against an assistant, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_QueryAssistant.html\">QueryAssistant</a>.</p>",
+      "documentation":"<p><important> <p>This API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024, you will need to create a new Assistant in the Amazon Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications.</p> </important> <p>Retrieves recommendations for the specified session. To avoid retrieving the same recommendations in subsequent calls, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_NotifyRecommendationsReceived.html\">NotifyRecommendationsReceived</a>. This API supports long-polling behavior with the <code>waitTimeSeconds</code> parameter. Short poll is the default behavior and only returns recommendations already available. To perform a manual query against an assistant, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_QueryAssistant.html\">QueryAssistant</a>.</p></p>",
       "deprecated":true,
       "deprecatedMessage":"GetRecommendations API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024 you will need to create a new Assistant in the Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications."
     },
@@ -871,6 +909,7 @@
       "output":{"shape":"GetSessionResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -887,9 +926,10 @@
       "output":{"shape":"ListAIAgentVersionsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>List AI Agent versions.</p>"
     },
@@ -904,9 +944,10 @@
       "output":{"shape":"ListAIAgentsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists AI Agents.</p>"
     },
@@ -921,9 +962,10 @@
       "output":{"shape":"ListAIGuardrailVersionsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists AI Guardrail versions.</p>"
     },
@@ -938,6 +980,7 @@
       "output":{"shape":"ListAIGuardrailsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -955,9 +998,10 @@
       "output":{"shape":"ListAIPromptVersionsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists AI Prompt versions.</p>"
     },
@@ -972,9 +1016,10 @@
       "output":{"shape":"ListAIPromptsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"}
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists the AI Prompts available on the Amazon Q in Connect assistant.</p>"
     },
@@ -1005,6 +1050,7 @@
       "output":{"shape":"ListAssistantsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"}
       ],
       "documentation":"<p>Lists information about assistants.</p>"
@@ -1020,6 +1066,7 @@
       "output":{"shape":"ListContentAssociationsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1200,7 +1247,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<important> <p>This API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024, you will need to create a new Assistant in the Amazon Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications.</p> </important> <p>Performs a manual search against the specified assistant. To retrieve recommendations for an assistant, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_GetRecommendations.html\">GetRecommendations</a>. </p>",
+      "documentation":"<p><important> <p>This API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024, you will need to create a new Assistant in the Amazon Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications.</p> </important> <p>Performs a manual search against the specified assistant. To retrieve recommendations for an assistant, use <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_GetRecommendations.html\">GetRecommendations</a>. </p></p>",
       "deprecated":true,
       "deprecatedMessage":"QueryAssistant API will be discontinued starting June 1, 2024. To receive generative responses after March 1, 2024 you will need to create a new Assistant in the Connect console and integrate the Amazon Q in Connect JavaScript library (amazon-q-connectjs) into your applications."
     },
@@ -1219,7 +1266,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Removes the AI Agent that is set for use by defafult on an Amazon Q in Connect Assistant.</p>",
+      "documentation":"<p>Removes the AI Agent that is set for use by default on an Amazon Q in Connect Assistant.</p>",
       "idempotent":true
     },
     "RemoveKnowledgeBaseTemplateUri":{
@@ -1266,6 +1313,7 @@
       "output":{"shape":"SearchContentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1282,6 +1330,7 @@
       "output":{"shape":"SearchMessageTemplatesResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -1300,6 +1349,7 @@
       "errors":[
         {"shape":"RequestTimeoutException"},
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1316,6 +1366,7 @@
       "output":{"shape":"SearchSessionsResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1332,8 +1383,8 @@
       "output":{"shape":"SendMessageResponse"},
       "errors":[
         {"shape":"RequestTimeoutException"},
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -1352,6 +1403,7 @@
       "output":{"shape":"StartContentUploadResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1370,6 +1422,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1417,8 +1470,9 @@
       "input":{"shape":"UpdateAIAgentRequest"},
       "output":{"shape":"UpdateAIAgentResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -1436,8 +1490,9 @@
       "input":{"shape":"UpdateAIGuardrailRequest"},
       "output":{"shape":"UpdateAIGuardrailResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -1455,8 +1510,9 @@
       "input":{"shape":"UpdateAIPromptRequest"},
       "output":{"shape":"UpdateAIPromptResponse"},
       "errors":[
-        {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
@@ -1479,7 +1535,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Updates the AI Agent that is set for use by defafult on an Amazon Q in Connect Assistant.</p>"
+      "documentation":"<p>Updates the AI Agent that is set for use by default on an Amazon Q in Connect Assistant.</p>"
     },
     "UpdateContent":{
       "name":"UpdateContent",
@@ -1492,6 +1548,7 @@
       "output":{"shape":"UpdateContentResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"PreconditionFailedException"},
         {"shape":"ResourceNotFoundException"}
@@ -1562,6 +1619,7 @@
       "errors":[
         {"shape":"ConflictException"},
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"PreconditionFailedException"},
         {"shape":"ResourceNotFoundException"}
@@ -1579,6 +1637,7 @@
       "output":{"shape":"UpdateSessionResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1595,6 +1654,7 @@
       "output":{"shape":"UpdateSessionDataResponse"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"UnauthorizedException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"}
       ],
@@ -1609,17 +1669,29 @@
     "AIAgentConfiguration":{
       "type":"structure",
       "members":{
-        "answerRecommendationAIAgentConfiguration":{
-          "shape":"AnswerRecommendationAIAgentConfiguration",
-          "documentation":"<p>The configuration for AI Agents of type <code>ANSWER_RECOMMENDATION</code>.</p>"
-        },
         "manualSearchAIAgentConfiguration":{
           "shape":"ManualSearchAIAgentConfiguration",
           "documentation":"<p>The configuration for AI Agents of type <code>MANUAL_SEARCH</code>.</p>"
         },
+        "answerRecommendationAIAgentConfiguration":{
+          "shape":"AnswerRecommendationAIAgentConfiguration",
+          "documentation":"<p>The configuration for AI Agents of type <code>ANSWER_RECOMMENDATION</code>.</p>"
+        },
         "selfServiceAIAgentConfiguration":{
           "shape":"SelfServiceAIAgentConfiguration",
           "documentation":"<p>The configuration for AI Agents of type SELF_SERVICE.</p>"
+        },
+        "emailResponseAIAgentConfiguration":{
+          "shape":"EmailResponseAIAgentConfiguration",
+          "documentation":"<p>Configuration for the EMAIL_RESPONSE AI agent that generates professional email responses using knowledge base content.</p>"
+        },
+        "emailOverviewAIAgentConfiguration":{
+          "shape":"EmailOverviewAIAgentConfiguration",
+          "documentation":"<p>Configuration for the EMAIL_OVERVIEW AI agent that generates structured overview of email conversations.</p>"
+        },
+        "emailGenerativeAnswerAIAgentConfiguration":{
+          "shape":"EmailGenerativeAnswerAIAgentConfiguration",
+          "documentation":"<p>Configuration for the EMAIL_GENERATIVE_ANSWER AI agent that provides comprehensive knowledge-based answers for customer queries.</p>"
         }
       },
       "documentation":"<p>A typed union that specifies the configuration based on the type of AI Agent.</p>",
@@ -1644,47 +1716,59 @@
     "AIAgentData":{
       "type":"structure",
       "required":[
-        "aiAgentArn",
-        "aiAgentId",
-        "assistantArn",
         "assistantId",
-        "configuration",
+        "assistantArn",
+        "aiAgentId",
+        "aiAgentArn",
         "name",
         "type",
+        "configuration",
         "visibilityStatus"
       ],
       "members":{
-        "aiAgentArn":{
+        "assistantId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        },
+        "assistantArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AI agent.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "aiAgentId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the AI Agent.</p>"
         },
-        "assistantArn":{
+        "aiAgentArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AI agent.</p>"
         },
-        "assistantId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Agent.</p>"
+        },
+        "type":{
+          "shape":"AIAgentType",
+          "documentation":"<p>The type of the AI Agent.</p>"
         },
         "configuration":{
           "shape":"AIAgentConfiguration",
           "documentation":"<p>Configuration for the AI Agent.</p>"
         },
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the AI Agent was last modified.</p>"
+        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the AI Agent.</p>"
         },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the AI Agent was last modified.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Agent.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Agent.</p>"
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
         "origin":{
           "shape":"Origin",
@@ -1693,18 +1777,6 @@
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of the AI Agent.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "type":{
-          "shape":"AIAgentType",
-          "documentation":"<p>The type of the AI Agent.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Agent.</p>"
         }
       },
       "documentation":"<p>The data for the AI Agent.</p>"
@@ -1712,51 +1784,59 @@
     "AIAgentSummary":{
       "type":"structure",
       "required":[
-        "aiAgentArn",
-        "aiAgentId",
-        "assistantArn",
-        "assistantId",
         "name",
+        "assistantId",
+        "assistantArn",
+        "aiAgentId",
         "type",
+        "aiAgentArn",
         "visibilityStatus"
       ],
       "members":{
-        "aiAgentArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AI agent.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Agent.</p>"
         },
-        "aiAgentId":{
+        "assistantId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the AI Agent.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
         "assistantArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
-        "assistantId":{
+        "aiAgentId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+          "documentation":"<p>The identifier of the AI Agent.</p>"
         },
-        "configuration":{
-          "shape":"AIAgentConfiguration",
-          "documentation":"<p>The configuration for the AI Agent.</p>"
+        "type":{
+          "shape":"AIAgentType",
+          "documentation":"<p>The type of the AI Agent.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the AI Agent.</p>"
+        "aiAgentArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AI agent.</p>"
         },
         "modifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time the AI Agent was last modified.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Agent.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Agent.</p>"
+        },
+        "configuration":{
+          "shape":"AIAgentConfiguration",
+          "documentation":"<p>The configuration for the AI Agent.</p>"
         },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Agent. <code>SYSTEM</code> for a default AI Agent created by Q in Connect or <code>CUSTOMER</code> for an AI Agent created by calling AI Agent creation APIs.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AI Agent.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of the AI Agent.</p>"
@@ -1764,14 +1844,6 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "type":{
-          "shape":"AIAgentType",
-          "documentation":"<p>The type of the AI Agent.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Agent.</p>"
         }
       },
       "documentation":"<p>The summary of the AI Agent.</p>"
@@ -1785,7 +1857,10 @@
       "enum":[
         "MANUAL_SEARCH",
         "ANSWER_RECOMMENDATION",
-        "SELF_SERVICE"
+        "SELF_SERVICE",
+        "EMAIL_RESPONSE",
+        "EMAIL_OVERVIEW",
+        "EMAIL_GENERATIVE_ANSWER"
       ]
     },
     "AIAgentVersionSummariesList":{
@@ -1838,16 +1913,24 @@
     "AIGuardrailData":{
       "type":"structure",
       "required":[
+        "assistantId",
+        "assistantArn",
         "aiGuardrailArn",
         "aiGuardrailId",
-        "assistantArn",
-        "assistantId",
-        "blockedInputMessaging",
-        "blockedOutputsMessaging",
         "name",
-        "visibilityStatus"
+        "visibilityStatus",
+        "blockedInputMessaging",
+        "blockedOutputsMessaging"
       ],
       "members":{
+        "assistantId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        },
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
+        },
         "aiGuardrailArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the AI Guardrail.</p>"
@@ -1856,13 +1939,13 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>"
         },
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Guardrail.</p>"
         },
-        "assistantId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
         },
         "blockedInputMessaging":{
           "shape":"AIGuardrailBlockedMessaging",
@@ -1872,49 +1955,41 @@
           "shape":"AIGuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the AI Guardrail blocks a model response.</p>"
         },
-        "contentPolicyConfig":{
-          "shape":"AIGuardrailContentPolicyConfig",
-          "documentation":"<p>Contains details about how to handle harmful content.</p>"
-        },
-        "contextualGroundingPolicyConfig":{
-          "shape":"AIGuardrailContextualGroundingPolicyConfig",
-          "documentation":"<p>The policy configuration details for the AI Guardrail's contextual grounding policy.</p>"
-        },
         "description":{
           "shape":"AIGuardrailDescription",
           "documentation":"<p>A description of the AI Guardrail.</p>"
         },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the AI Guardrail was last modified.</p>"
+        "topicPolicyConfig":{
+          "shape":"AIGuardrailTopicPolicyConfig",
+          "documentation":"<p>Contains details about topics that the AI Guardrail should identify and deny.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Guardrail.</p>"
+        "contentPolicyConfig":{
+          "shape":"AIGuardrailContentPolicyConfig",
+          "documentation":"<p>Contains details about how to handle harmful content.</p>"
+        },
+        "wordPolicyConfig":{
+          "shape":"AIGuardrailWordPolicyConfig",
+          "documentation":"<p>Contains details about the word policy to configured for the AI Guardrail.</p>"
         },
         "sensitiveInformationPolicyConfig":{
           "shape":"AIGuardrailSensitiveInformationPolicyConfig",
           "documentation":"<p>Contains details about PII entities and regular expressions to configure for the AI Guardrail.</p>"
         },
-        "status":{
-          "shape":"Status",
-          "documentation":"<p>The status of the AI Guardrail.</p>"
+        "contextualGroundingPolicyConfig":{
+          "shape":"AIGuardrailContextualGroundingPolicyConfig",
+          "documentation":"<p>The policy configuration details for the AI Guardrail's contextual grounding policy.</p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "topicPolicyConfig":{
-          "shape":"AIGuardrailTopicPolicyConfig",
-          "documentation":"<p>Contains details about topics that the AI Guardrail should identify and deny.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the AI Guardrail.</p>"
         },
-        "wordPolicyConfig":{
-          "shape":"AIGuardrailWordPolicyConfig",
-          "documentation":"<p>Contains details about the word policy to configured for the AI Guardrail.</p>"
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the AI Guardrail was last modified.</p>"
         }
       },
       "documentation":"<p>The data for the AI Guardrail</p>"
@@ -1947,41 +2022,45 @@
     "AIGuardrailSummary":{
       "type":"structure",
       "required":[
-        "aiGuardrailArn",
-        "aiGuardrailId",
-        "assistantArn",
-        "assistantId",
         "name",
+        "assistantId",
+        "assistantArn",
+        "aiGuardrailId",
+        "aiGuardrailArn",
         "visibilityStatus"
       ],
       "members":{
-        "aiGuardrailArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Guardrail.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Guardrail.</p>"
         },
-        "aiGuardrailId":{
+        "assistantId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
         "assistantArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
-        "assistantId":{
+        "aiGuardrailId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>"
         },
-        "description":{
-          "shape":"AIGuardrailDescription",
-          "documentation":"<p>A description of the AI Guardrail.</p>"
+        "aiGuardrailArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Guardrail.</p>"
         },
         "modifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time the AI Guardrail was last modified.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Guardrail.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
+        },
+        "description":{
+          "shape":"AIGuardrailDescription",
+          "documentation":"<p>A description of the AI Guardrail.</p>"
         },
         "status":{
           "shape":"Status",
@@ -1990,10 +2069,6 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
         }
       },
       "documentation":"<p>The summary of the AI Guardrail.</p>"
@@ -2030,13 +2105,13 @@
     "AIGuardrailWordPolicyConfig":{
       "type":"structure",
       "members":{
-        "managedWordListsConfig":{
-          "shape":"GuardrailManagedWordListsConfig",
-          "documentation":"<p>A list of managed words to configure for the AI Guardrail.</p>"
-        },
         "wordsConfig":{
           "shape":"GuardrailWordsConfig",
           "documentation":"<p>A list of words to configure for the AI Guardrail.</p>"
+        },
+        "managedWordListsConfig":{
+          "shape":"GuardrailManagedWordListsConfig",
+          "documentation":"<p>A list of managed words to configure for the AI Guardrail.</p>"
         }
       },
       "documentation":"<p>Contains details about the word policy to configured for the AI Guardrail.</p>"
@@ -2045,88 +2120,90 @@
       "type":"string",
       "enum":[
         "ANTHROPIC_CLAUDE_MESSAGES",
-        "ANTHROPIC_CLAUDE_TEXT_COMPLETIONS"
+        "ANTHROPIC_CLAUDE_TEXT_COMPLETIONS",
+        "MESSAGES",
+        "TEXT_COMPLETIONS"
       ]
     },
     "AIPromptData":{
       "type":"structure",
       "required":[
-        "aiPromptArn",
-        "aiPromptId",
-        "apiFormat",
-        "assistantArn",
         "assistantId",
-        "modelId",
+        "assistantArn",
+        "aiPromptId",
+        "aiPromptArn",
         "name",
-        "templateConfiguration",
-        "templateType",
         "type",
+        "templateType",
+        "modelId",
+        "apiFormat",
+        "templateConfiguration",
         "visibilityStatus"
       ],
       "members":{
-        "aiPromptArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Prompt.</p>"
-        },
-        "aiPromptId":{
+        "assistantId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>"
-        },
-        "apiFormat":{
-          "shape":"AIPromptAPIFormat",
-          "documentation":"<p>The API format used for this AI Prompt.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
         "assistantArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
-        "assistantId":{
+        "aiPromptId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the AI Prompt.</p>"
-        },
-        "modelId":{
-          "shape":"AIPromptModelIdentifier",
-          "documentation":"<p>The identifier of the model used for this AI Prompt. Model Ids supported are: <code>CLAUDE_3_HAIKU_20240307_V1</code>.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>"
         },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the AI Prompt was last modified.</p>"
+        "aiPromptArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Prompt.</p>"
         },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the AI Prompt</p>"
         },
-        "origin":{
-          "shape":"Origin",
-          "documentation":"<p>The origin of the AI Prompt. <code>SYSTEM</code> for a default AI Prompt created by Q in Connect or <code>CUSTOMER</code> for an AI Prompt created by calling AI Prompt creation APIs. </p>"
+        "type":{
+          "shape":"AIPromptType",
+          "documentation":"<p>The type of this AI Prompt.</p>"
         },
-        "status":{
-          "shape":"Status",
-          "documentation":"<p>The status of the AI Prompt.</p>"
+        "templateType":{
+          "shape":"AIPromptTemplateType",
+          "documentation":"<p>The type of the prompt template for this AI Prompt.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "modelId":{
+          "shape":"AIPromptModelIdentifier",
+          "documentation":"<p>The identifier of the model used for this AI Prompt. The following model Ids are supported:</p> <ul> <li> <p> <code>anthropic.claude-3-haiku--v1:0</code> </p> </li> <li> <p> <code>apac.amazon.nova-lite-v1:0</code> </p> </li> <li> <p> <code>apac.amazon.nova-micro-v1:0</code> </p> </li> <li> <p> <code>apac.amazon.nova-pro-v1:0</code> </p> </li> <li> <p> <code>apac.anthropic.claude-3-5-sonnet--v2:0</code> </p> </li> <li> <p> <code>apac.anthropic.claude-3-haiku-20240307-v1:0</code> </p> </li> <li> <p> <code>eu.amazon.nova-lite-v1:0</code> </p> </li> <li> <p> <code>eu.amazon.nova-micro-v1:0</code> </p> </li> <li> <p> <code>eu.amazon.nova-pro-v1:0</code> </p> </li> <li> <p> <code>eu.anthropic.claude-3-7-sonnet-20250219-v1:0</code> </p> </li> <li> <p> <code>eu.anthropic.claude-3-haiku-20240307-v1:0</code> </p> </li> <li> <p> <code>us.amazon.nova-lite-v1:0</code> </p> </li> <li> <p> <code>us.amazon.nova-micro-v1:0</code> </p> </li> <li> <p> <code>us.amazon.nova-pro-v1:0</code> </p> </li> <li> <p> <code>us.anthropic.claude-3-5-haiku-20241022-v1:0</code> </p> </li> <li> <p> <code>us.anthropic.claude-3-7-sonnet-20250219-v1:0</code> </p> </li> <li> <p> <code>us.anthropic.claude-3-haiku-20240307-v1:0</code> </p> </li> </ul>"
+        },
+        "apiFormat":{
+          "shape":"AIPromptAPIFormat",
+          "documentation":"<p>The API format used for this AI Prompt.</p>"
         },
         "templateConfiguration":{
           "shape":"AIPromptTemplateConfiguration",
           "documentation":"<p>The configuration of the prompt template for this AI Prompt.</p>"
         },
-        "templateType":{
-          "shape":"AIPromptTemplateType",
-          "documentation":"<p>The type of the prompt template for this AI Prompt.</p>"
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the AI Prompt was last modified.</p>"
         },
-        "type":{
-          "shape":"AIPromptType",
-          "documentation":"<p>The type of this AI Prompt.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AI Prompt.</p>"
         },
         "visibilityStatus":{
           "shape":"VisibilityStatus",
           "documentation":"<p>The visibility status of the AI Prompt.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
+        "origin":{
+          "shape":"Origin",
+          "documentation":"<p>The origin of the AI Prompt. <code>SYSTEM</code> for a default AI Prompt created by Q in Connect or <code>CUSTOMER</code> for an AI Prompt created by calling AI Prompt creation APIs. </p>"
+        },
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the AI Prompt.</p>"
         }
       },
       "documentation":"<p>The data for the AI Prompt</p>"
@@ -2139,58 +2216,70 @@
     "AIPromptSummary":{
       "type":"structure",
       "required":[
-        "aiPromptArn",
-        "aiPromptId",
-        "apiFormat",
-        "assistantArn",
-        "assistantId",
-        "modelId",
         "name",
-        "templateType",
+        "assistantId",
+        "assistantArn",
+        "aiPromptId",
         "type",
+        "aiPromptArn",
+        "templateType",
+        "modelId",
+        "apiFormat",
         "visibilityStatus"
       ],
       "members":{
-        "aiPromptArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Prompt.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Prompt.</p>"
         },
-        "aiPromptId":{
+        "assistantId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>"
-        },
-        "apiFormat":{
-          "shape":"AIPromptAPIFormat",
-          "documentation":"<p>The API format used for this AI Prompt.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
         "assistantArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
-        "assistantId":{
+        "aiPromptId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the AI Prompt.</p>"
+        "type":{
+          "shape":"AIPromptType",
+          "documentation":"<p>The type of this AI Prompt.</p>"
         },
-        "modelId":{
-          "shape":"AIPromptModelIdentifier",
-          "documentation":"<p>The identifier of the model used for this AI Prompt. Model Ids supported are: <code>CLAUDE_3_HAIKU_20240307_V1</code>.</p>"
+        "aiPromptArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the AI Prompt.</p>"
         },
         "modifiedTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time the AI Prompt was last modified.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Prompt.</p>"
+        "templateType":{
+          "shape":"AIPromptTemplateType",
+          "documentation":"<p>The type of the prompt template for this AI Prompt.</p>"
+        },
+        "modelId":{
+          "shape":"AIPromptModelIdentifier",
+          "documentation":"<p>The identifier of the model used for this AI Prompt. Model Ids supported are: <code>anthropic.claude-3-haiku-20240307-v1:0</code>.</p>"
+        },
+        "apiFormat":{
+          "shape":"AIPromptAPIFormat",
+          "documentation":"<p>The API format used for this AI Prompt.</p>"
+        },
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Prompt.</p>"
         },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Prompt. <code>SYSTEM</code> for a default AI Prompt created by Q in Connect or <code>CUSTOMER</code> for an AI Prompt created by calling AI Prompt creation APIs. </p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AI Prompt.</p>"
+        },
         "status":{
           "shape":"Status",
           "documentation":"<p>The status of the AI Prompt.</p>"
@@ -2198,18 +2287,6 @@
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "templateType":{
-          "shape":"AIPromptTemplateType",
-          "documentation":"<p>The type of the prompt template for this AI Prompt.</p>"
-        },
-        "type":{
-          "shape":"AIPromptType",
-          "documentation":"<p>The type of this AI Prompt.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Prompt.</p>"
         }
       },
       "documentation":"<p>The summary of the AI Prompt.</p>"
@@ -2240,7 +2317,11 @@
         "INTENT_LABELING_GENERATION",
         "QUERY_REFORMULATION",
         "SELF_SERVICE_PRE_PROCESSING",
-        "SELF_SERVICE_ANSWER_GENERATION"
+        "SELF_SERVICE_ANSWER_GENERATION",
+        "EMAIL_RESPONSE",
+        "EMAIL_OVERVIEW",
+        "EMAIL_GENERATIVE_ANSWER",
+        "EMAIL_QUERY_REFORMULATION"
       ]
     },
     "AIPromptVersionSummariesList":{
@@ -2352,29 +2433,29 @@
     "AnswerRecommendationAIAgentConfiguration":{
       "type":"structure",
       "members":{
-        "answerGenerationAIGuardrailId":{
+        "intentLabelingGenerationAIPromptId":{
           "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Guardrail identifier for the Answer Generation Guardrail used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
+          "documentation":"<p>The AI Prompt identifier for the Intent Labeling prompt used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
+        },
+        "queryReformulationAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The AI Prompt identifier for the Query Reformulation prompt used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
         },
         "answerGenerationAIPromptId":{
           "shape":"UuidWithQualifier",
           "documentation":"<p>The AI Prompt identifier for the Answer Generation prompt used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
         },
+        "answerGenerationAIGuardrailId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The AI Guardrail identifier for the Answer Generation Guardrail used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
+        },
         "associationConfigurations":{
           "shape":"AssociationConfigurationList",
           "documentation":"<p>The association configurations for overriding behavior on this AI Agent.</p>"
         },
-        "intentLabelingGenerationAIPromptId":{
-          "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Prompt identifier for the Intent Labeling prompt used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
-        },
         "locale":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The locale to which specifies the language and region settings that determine the response language for <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_QueryAssistant.html\">QueryAssistant</a>.</p> <note> <p>Changing this locale to anything other than <code>en_US</code> will turn off recommendations triggered by contact transcripts for agent assistance, as this feature is not supported in multiple languages.</p> </note>"
-        },
-        "queryReformulationAIPromptId":{
-          "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Prompt identifier for the Query Reformulation prompt used by the <code>ANSWER_RECOMMENDATION</code> AI Agent.</p>"
+          "documentation":"<p>The locale to which specifies the language and region settings that determine the response language for <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_QueryAssistant.html\">QueryAssistant</a>.</p> <note> <p>For more information on supported locales, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/supported-languages.html#qic-notes-languages\">Language support for Amazon Q in Connect</a>.</p> </note>"
         }
       },
       "documentation":"<p>The configuration for the <code>ANSWER_RECOMMENDATION</code> AI Agent type.</p>"
@@ -2396,47 +2477,47 @@
     },
     "Arn":{
       "type":"string",
-      "pattern":"^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}$"
+      "pattern":"arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}"
     },
     "ArnWithQualifier":{
       "type":"string",
-      "pattern":"^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}(:[A-Z0-9_$]+){0,1}$"
+      "pattern":"arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}(:[A-Z0-9_$]+){0,1}"
     },
     "AssistantAssociationData":{
       "type":"structure",
       "required":[
-        "assistantArn",
-        "assistantAssociationArn",
         "assistantAssociationId",
+        "assistantAssociationArn",
         "assistantId",
-        "associationData",
-        "associationType"
+        "assistantArn",
+        "associationType",
+        "associationData"
       ],
       "members":{
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
+        "assistantAssociationId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the assistant association.</p>"
         },
         "assistantAssociationArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the assistant association.</p>"
         },
-        "assistantAssociationId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the assistant association.</p>"
-        },
         "assistantId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
         },
-        "associationData":{
-          "shape":"AssistantAssociationOutputData",
-          "documentation":"<p>A union type that currently has a single argument, the knowledge base ID.</p>"
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "associationType":{
           "shape":"AssociationType",
           "documentation":"<p>The type of association.</p>"
         },
+        "associationData":{
+          "shape":"AssistantAssociationOutputData",
+          "documentation":"<p>A union type that currently has a single argument, the knowledge base ID.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -2469,38 +2550,38 @@
     "AssistantAssociationSummary":{
       "type":"structure",
       "required":[
-        "assistantArn",
-        "assistantAssociationArn",
         "assistantAssociationId",
+        "assistantAssociationArn",
         "assistantId",
-        "associationData",
-        "associationType"
+        "assistantArn",
+        "associationType",
+        "associationData"
       ],
       "members":{
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
+        "assistantAssociationId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the assistant association.</p>"
         },
         "assistantAssociationArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the assistant association.</p>"
         },
-        "assistantAssociationId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the assistant association.</p>"
-        },
         "assistantId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
         },
-        "associationData":{
-          "shape":"AssistantAssociationOutputData",
-          "documentation":"<p>The association data.</p>"
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "associationType":{
           "shape":"AssociationType",
           "documentation":"<p>The type of association.</p>"
         },
+        "associationData":{
+          "shape":"AssistantAssociationOutputData",
+          "documentation":"<p>The association data.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -2532,56 +2613,56 @@
     "AssistantData":{
       "type":"structure",
       "required":[
-        "assistantArn",
         "assistantId",
+        "assistantArn",
         "name",
-        "status",
-        "type"
+        "type",
+        "status"
       ],
       "members":{
-        "aiAgentConfiguration":{
-          "shape":"AIAgentConfigurationMap",
-          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that is set on the Amazon Q in Connect Assistant.</p>"
-        },
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
-        },
         "assistantId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
         },
-        "capabilityConfiguration":{
-          "shape":"AssistantCapabilityConfiguration",
-          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant capability. </p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description.</p>"
-        },
-        "integrationConfiguration":{
-          "shape":"AssistantIntegrationConfiguration",
-          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant integration.</p>"
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name.</p>"
         },
-        "serverSideEncryptionConfiguration":{
-          "shape":"ServerSideEncryptionConfiguration",
-          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
+        "type":{
+          "shape":"AssistantType",
+          "documentation":"<p>The type of assistant.</p>"
         },
         "status":{
           "shape":"AssistantStatus",
           "documentation":"<p>The status of the assistant.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "type":{
-          "shape":"AssistantType",
-          "documentation":"<p>The type of assistant.</p>"
+        "serverSideEncryptionConfiguration":{
+          "shape":"ServerSideEncryptionConfiguration",
+          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
+        },
+        "integrationConfiguration":{
+          "shape":"AssistantIntegrationConfiguration",
+          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant integration.</p>"
+        },
+        "capabilityConfiguration":{
+          "shape":"AssistantCapabilityConfiguration",
+          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant capability. </p>"
+        },
+        "aiAgentConfiguration":{
+          "shape":"AIAgentConfigurationMap",
+          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that is set on the Amazon Q in Connect Assistant.</p>"
         }
       },
       "documentation":"<p>The assistant data.</p>"
@@ -2614,56 +2695,56 @@
     "AssistantSummary":{
       "type":"structure",
       "required":[
-        "assistantArn",
         "assistantId",
+        "assistantArn",
         "name",
-        "status",
-        "type"
+        "type",
+        "status"
       ],
       "members":{
-        "aiAgentConfiguration":{
-          "shape":"AIAgentConfigurationMap",
-          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that is set on the Amazon Q in Connect Assistant.</p>"
-        },
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
-        },
         "assistantId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
         },
-        "capabilityConfiguration":{
-          "shape":"AssistantCapabilityConfiguration",
-          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant capability. </p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the assistant.</p>"
-        },
-        "integrationConfiguration":{
-          "shape":"AssistantIntegrationConfiguration",
-          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant integration.</p>"
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the assistant.</p>"
         },
-        "serverSideEncryptionConfiguration":{
-          "shape":"ServerSideEncryptionConfiguration",
-          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
+        "type":{
+          "shape":"AssistantType",
+          "documentation":"<p>The type of the assistant.</p>"
         },
         "status":{
           "shape":"AssistantStatus",
           "documentation":"<p>The status of the assistant.</p>"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the assistant.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "type":{
-          "shape":"AssistantType",
-          "documentation":"<p>The type of the assistant.</p>"
+        "serverSideEncryptionConfiguration":{
+          "shape":"ServerSideEncryptionConfiguration",
+          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
+        },
+        "integrationConfiguration":{
+          "shape":"AssistantIntegrationConfiguration",
+          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant integration.</p>"
+        },
+        "capabilityConfiguration":{
+          "shape":"AssistantCapabilityConfiguration",
+          "documentation":"<p>The configuration information for the Amazon Q in Connect assistant capability. </p>"
+        },
+        "aiAgentConfiguration":{
+          "shape":"AIAgentConfigurationMap",
+          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that is set on the Amazon Q in Connect Assistant.</p>"
         }
       },
       "documentation":"<p>Summary information about the assistant.</p>"
@@ -2675,10 +2756,6 @@
     "AssociationConfiguration":{
       "type":"structure",
       "members":{
-        "associationConfigurationData":{
-          "shape":"AssociationConfigurationData",
-          "documentation":"<p>The data of the configuration for an Amazon Q in Connect Assistant Association.</p>"
-        },
         "associationId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the association for this Association Configuration.</p>"
@@ -2686,6 +2763,10 @@
         "associationType":{
           "shape":"AIAgentAssociationConfigurationType",
           "documentation":"<p>The type of the association for this Association Configuration.</p>"
+        },
+        "associationConfigurationData":{
+          "shape":"AssociationConfigurationData",
+          "documentation":"<p>The data of the configuration for an Amazon Q in Connect Assistant Association.</p>"
         }
       },
       "documentation":"<p>The configuration for an Amazon Q in Connect Assistant Association.</p>"
@@ -2713,7 +2794,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[\\p{L}\\p{M}\\p{N}_\\s&@()+,;=\\-]+\\.[A-Za-z0-9]+$",
+      "pattern":"[\\p{L}\\p{M}\\p{N}_\\s&@()+,;=\\-]+\\.[A-Za-z0-9]+",
       "sensitive":true
     },
     "BedrockFoundationModelConfigurationForParsing":{
@@ -2735,7 +2816,7 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/anthropic.claude-3-haiku-20240307-v1:0$"
+      "pattern":"arn:aws(-[^:]+)?:bedrock:[a-z0-9-]{1,20}::foundation-model/anthropic.claude-3-haiku-20240307-v1:0"
     },
     "Boolean":{
       "type":"boolean",
@@ -2870,47 +2951,47 @@
     "ContentAssociationData":{
       "type":"structure",
       "required":[
-        "associationData",
-        "associationType",
+        "knowledgeBaseId",
+        "knowledgeBaseArn",
+        "contentId",
         "contentArn",
-        "contentAssociationArn",
         "contentAssociationId",
-        "contentId",
-        "knowledgeBaseArn",
-        "knowledgeBaseId"
+        "contentAssociationArn",
+        "associationType",
+        "associationData"
       ],
       "members":{
-        "associationData":{
-          "shape":"ContentAssociationContents",
-          "documentation":"<p>The content association.</p>"
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "associationType":{
-          "shape":"ContentAssociationType",
-          "documentation":"<p>The type of association.</p>"
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "contentId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the content.</p>"
         },
         "contentArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the content.</p>"
         },
-        "contentAssociationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the content association.</p>"
-        },
         "contentAssociationId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
-        "contentId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the content.</p>"
-        },
-        "knowledgeBaseArn":{
+        "contentAssociationArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the content association.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
+        "associationType":{
+          "shape":"ContentAssociationType",
+          "documentation":"<p>The type of association.</p>"
+        },
+        "associationData":{
+          "shape":"ContentAssociationContents",
+          "documentation":"<p>The content association.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -2922,47 +3003,47 @@
     "ContentAssociationSummary":{
       "type":"structure",
       "required":[
-        "associationData",
-        "associationType",
+        "knowledgeBaseId",
+        "knowledgeBaseArn",
+        "contentId",
         "contentArn",
-        "contentAssociationArn",
         "contentAssociationId",
-        "contentId",
-        "knowledgeBaseArn",
-        "knowledgeBaseId"
+        "contentAssociationArn",
+        "associationType",
+        "associationData"
       ],
       "members":{
-        "associationData":{
-          "shape":"ContentAssociationContents",
-          "documentation":"<p>The content association.</p>"
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "associationType":{
-          "shape":"ContentAssociationType",
-          "documentation":"<p>The type of association.</p>"
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "contentId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the content.</p>"
         },
         "contentArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the content.</p>"
         },
-        "contentAssociationArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the content association.</p>"
-        },
         "contentAssociationId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
-        "contentId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the content.</p>"
-        },
-        "knowledgeBaseArn":{
+        "contentAssociationArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the content association.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
+        "associationType":{
+          "shape":"ContentAssociationType",
+          "documentation":"<p>The type of association.</p>"
+        },
+        "associationData":{
+          "shape":"ContentAssociationContents",
+          "documentation":"<p>The content association.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -2984,14 +3065,14 @@
       "required":[
         "contentArn",
         "contentId",
-        "contentType",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "metadata",
         "name",
         "revisionId",
-        "status",
         "title",
+        "contentType",
+        "status",
+        "metadata",
         "url",
         "urlExpiry"
       ],
@@ -3004,10 +3085,6 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the content.</p>"
         },
-        "contentType":{
-          "shape":"ContentType",
-          "documentation":"<p>The media type of the content.</p>"
-        },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
@@ -3016,14 +3093,6 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "linkOutUri":{
-          "shape":"Uri",
-          "documentation":"<p>The URI of the content.</p>"
-        },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the content.</p>"
@@ -3032,17 +3101,29 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The identifier of the content revision.</p>"
         },
+        "title":{
+          "shape":"ContentTitle",
+          "documentation":"<p>The title of the content.</p>"
+        },
+        "contentType":{
+          "shape":"ContentType",
+          "documentation":"<p>The media type of the content.</p>"
+        },
         "status":{
           "shape":"ContentStatus",
           "documentation":"<p>The status of the content.</p>"
         },
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "title":{
-          "shape":"ContentTitle",
-          "documentation":"<p>The title of the content.</p>"
+        "linkOutUri":{
+          "shape":"Uri",
+          "documentation":"<p>The URI of the content.</p>"
         },
         "url":{
           "shape":"Url",
@@ -3058,17 +3139,17 @@
     "ContentDataDetails":{
       "type":"structure",
       "required":[
-        "rankingData",
-        "textData"
+        "textData",
+        "rankingData"
       ],
       "members":{
-        "rankingData":{
-          "shape":"RankingData",
-          "documentation":"<p>Details about the content ranking data.</p>"
-        },
         "textData":{
           "shape":"TextData",
           "documentation":"<p>Details about the content text data.</p>"
+        },
+        "rankingData":{
+          "shape":"RankingData",
+          "documentation":"<p>Details about the content ranking data.</p>"
         }
       },
       "documentation":"<p>Details about the content data.</p>"
@@ -3098,14 +3179,6 @@
     "ContentReference":{
       "type":"structure",
       "members":{
-        "contentArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the content.</p>"
-        },
-        "contentId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the content.</p>"
-        },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
@@ -3114,13 +3187,21 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base.</p>"
         },
-        "referenceType":{
-          "shape":"ReferenceType",
-          "documentation":"<p>The type of reference content.</p>"
+        "contentArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the content.</p>"
+        },
+        "contentId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the content.</p>"
         },
         "sourceURL":{
           "shape":"String",
           "documentation":"<p>The web URL of the source content.</p>"
+        },
+        "referenceType":{
+          "shape":"ReferenceType",
+          "documentation":"<p>The type of reference content.</p>"
         }
       },
       "documentation":"<p>Reference information about the content.</p>"
@@ -3142,14 +3223,14 @@
       "required":[
         "contentArn",
         "contentId",
-        "contentType",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "metadata",
         "name",
         "revisionId",
+        "title",
+        "contentType",
         "status",
-        "title"
+        "metadata"
       ],
       "members":{
         "contentArn":{
@@ -3160,10 +3241,6 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the content.</p>"
         },
-        "contentType":{
-          "shape":"ContentType",
-          "documentation":"<p>The media type of the content.</p>"
-        },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
@@ -3172,10 +3249,6 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base.</p>"
         },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the content.</p>"
@@ -3184,17 +3257,25 @@
           "shape":"NonEmptyString",
           "documentation":"<p>The identifier of the revision of the content.</p>"
         },
+        "title":{
+          "shape":"ContentTitle",
+          "documentation":"<p>The title of the content.</p>"
+        },
+        "contentType":{
+          "shape":"ContentType",
+          "documentation":"<p>The media type of the content.</p>"
+        },
         "status":{
           "shape":"ContentStatus",
           "documentation":"<p>The status of the content.</p>"
         },
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "title":{
-          "shape":"ContentTitle",
-          "documentation":"<p>The title of the content.</p>"
         }
       },
       "documentation":"<p>Summary information about the content.</p>"
@@ -3210,7 +3291,7 @@
     },
     "ContentType":{
       "type":"string",
-      "pattern":"^(text/(plain|html|csv))|(application/(pdf|vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document))|(application/x\\.wisdom-json;source=(salesforce|servicenow|zendesk))$"
+      "pattern":"(text/(plain|html|csv))|(application/(pdf|vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document))|(application/x\\.wisdom-json;source=(salesforce|servicenow|zendesk))"
     },
     "ConversationContext":{
       "type":"structure",
@@ -3227,13 +3308,13 @@
       "type":"structure",
       "required":["status"],
       "members":{
-        "reason":{
-          "shape":"ConversationStatusReason",
-          "documentation":"<p>The reason of the conversation state.</p>"
-        },
         "status":{
           "shape":"ConversationStatus",
           "documentation":"<p>The status of the conversation state.</p>"
+        },
+        "reason":{
+          "shape":"ConversationStatusReason",
+          "documentation":"<p>The reason of the conversation state.</p>"
         }
       },
       "documentation":"<p>The conversation state associated to a message.</p>"
@@ -3258,46 +3339,46 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "configuration",
         "name",
         "type",
+        "configuration",
         "visibilityStatus"
       ],
       "members":{
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
           "idempotencyToken":true
         },
-        "configuration":{
-          "shape":"AIAgentConfiguration",
-          "documentation":"<p>The configuration of the AI Agent.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the AI Agent.</p>"
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
         },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the AI Agent.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
         "type":{
           "shape":"AIAgentType",
           "documentation":"<p>The type of the AI Agent.</p>"
         },
+        "configuration":{
+          "shape":"AIAgentConfiguration",
+          "documentation":"<p>The configuration of the AI Agent.</p>"
+        },
         "visibilityStatus":{
           "shape":"VisibilityStatus",
           "documentation":"<p>The visibility status of the AI Agent.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AI Agent.</p>"
         }
       }
     },
@@ -3313,30 +3394,30 @@
     "CreateAIAgentVersionRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
-        "assistantId"
+        "assistantId",
+        "aiAgentId"
       ],
       "members":{
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
+        },
         "aiAgentId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent.</p>",
           "location":"uri",
           "locationName":"aiAgentId"
         },
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The modification time of the AI Agent should be tracked for version creation. This field should be specified to avoid version creation when simultaneous update to the underlying AI Agent are possible. The value should be the modifiedTime returned from the request to create or update an AI Agent so that version creation can fail if an update to the AI Agent post the specified modification time has been made.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
           "idempotencyToken":true
-        },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The modification time of the AI Agent should be tracked for version creation. This field should be specified to avoid version creation when simultaneous update to the underlying AI Agent are possible. The value should be the modifiedTime returned from the request to create or update an AI Agent so that version creation can fail if an update to the AI Agent post the specified modification time has been made.</p>"
         }
       }
     },
@@ -3357,18 +3438,27 @@
       "type":"structure",
       "required":[
         "assistantId",
+        "name",
         "blockedInputMessaging",
         "blockedOutputsMessaging",
-        "name",
         "visibilityStatus"
       ],
       "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
+          "idempotencyToken":true
+        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the AI Guardrail.</p>"
+        },
         "blockedInputMessaging":{
           "shape":"AIGuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the AI Guardrail blocks a prompt.</p>"
@@ -3377,46 +3467,37 @@
           "shape":"AIGuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the AI Guardrail blocks a model response.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
-          "idempotencyToken":true
-        },
-        "contentPolicyConfig":{
-          "shape":"AIGuardrailContentPolicyConfig",
-          "documentation":"<p>The content filter policies to configure for the AI Guardrail.</p>"
-        },
-        "contextualGroundingPolicyConfig":{
-          "shape":"AIGuardrailContextualGroundingPolicyConfig",
-          "documentation":"<p>The contextual grounding policy configuration used to create an AI Guardrail.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
         },
         "description":{
           "shape":"AIGuardrailDescription",
           "documentation":"<p>A description of the AI Guardrail.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the AI Guardrail.</p>"
-        },
-        "sensitiveInformationPolicyConfig":{
-          "shape":"AIGuardrailSensitiveInformationPolicyConfig",
-          "documentation":"<p>The sensitive information policy to configure for the AI Guardrail.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
         "topicPolicyConfig":{
           "shape":"AIGuardrailTopicPolicyConfig",
           "documentation":"<p>The topic policies to configure for the AI Guardrail.</p>"
         },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Guardrail.</p>"
+        "contentPolicyConfig":{
+          "shape":"AIGuardrailContentPolicyConfig",
+          "documentation":"<p>The content filter policies to configure for the AI Guardrail.</p>"
         },
         "wordPolicyConfig":{
           "shape":"AIGuardrailWordPolicyConfig",
           "documentation":"<p>The word policy you configure for the AI Guardrail.</p>"
+        },
+        "sensitiveInformationPolicyConfig":{
+          "shape":"AIGuardrailSensitiveInformationPolicyConfig",
+          "documentation":"<p>The sensitive information policy to configure for the AI Guardrail.</p>"
+        },
+        "contextualGroundingPolicyConfig":{
+          "shape":"AIGuardrailContextualGroundingPolicyConfig",
+          "documentation":"<p>The contextual grounding policy configuration used to create an AI Guardrail.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
@@ -3432,30 +3513,30 @@
     "CreateAIGuardrailVersionRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
-        "assistantId"
+        "assistantId",
+        "aiGuardrailId"
       ],
       "members":{
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
+        },
         "aiGuardrailId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
           "location":"uri",
           "locationName":"aiGuardrailId"
         },
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the AI Guardrail was last modified.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
           "idempotencyToken":true
-        },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the AI Guardrail was last modified.</p>"
         }
       }
     },
@@ -3475,19 +3556,20 @@
     "CreateAIPromptRequest":{
       "type":"structure",
       "required":[
-        "apiFormat",
         "assistantId",
-        "modelId",
         "name",
+        "type",
         "templateConfiguration",
+        "visibilityStatus",
         "templateType",
-        "type",
-        "visibilityStatus"
+        "modelId",
+        "apiFormat"
       ],
       "members":{
-        "apiFormat":{
-          "shape":"AIPromptAPIFormat",
-          "documentation":"<p>The API Format of the AI Prompt.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
+          "idempotencyToken":true
         },
         "assistantId":{
           "shape":"UuidOrArn",
@@ -3495,42 +3577,41 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the AI Prompt.</p>"
-        },
-        "modelId":{
-          "shape":"AIPromptModelIdentifier",
-          "documentation":"<p>The identifier of the model used for this AI Prompt. Model Ids supported are: <code>CLAUDE_3_HAIKU_20240307_V1</code> </p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the AI Prompt.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "type":{
+          "shape":"AIPromptType",
+          "documentation":"<p>The type of this AI Prompt.</p>"
         },
         "templateConfiguration":{
           "shape":"AIPromptTemplateConfiguration",
           "documentation":"<p>The configuration of the prompt template for this AI Prompt.</p>"
         },
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the AI Prompt.</p>"
+        },
         "templateType":{
           "shape":"AIPromptTemplateType",
           "documentation":"<p>The type of the prompt template for this AI Prompt.</p>"
         },
-        "type":{
-          "shape":"AIPromptType",
-          "documentation":"<p>The type of this AI Prompt.</p>"
+        "modelId":{
+          "shape":"AIPromptModelIdentifier",
+          "documentation":"<p>The identifier of the model used for this AI Prompt.</p> <note> <p>For information about which models are supported in each Amazon Web Services Region, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/create-ai-prompts.html#cli-create-aiprompt\">Supported models for system/custom prompts</a>.</p> </note>"
         },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the AI Prompt.</p>"
+        "apiFormat":{
+          "shape":"AIPromptAPIFormat",
+          "documentation":"<p>The API Format of the AI Prompt.</p> <p>Recommended values: <code>MESSAGES | TEXT_COMPLETIONS</code> </p> <note> <p>The values <code>ANTHROPIC_CLAUDE_MESSAGES | ANTHROPIC_CLAUDE_TEXT_COMPLETIONS</code> will be deprecated.</p> </note>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the AI Prompt.</p>"
         }
       }
     },
@@ -3546,30 +3627,30 @@
     "CreateAIPromptVersionRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
-        "assistantId"
+        "assistantId",
+        "aiPromptId"
       ],
       "members":{
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
+        },
         "aiPromptId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>",
           "location":"uri",
           "locationName":"aiPromptId"
         },
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
+        "modifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time the AI Prompt was last modified.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
           "idempotencyToken":true
-        },
-        "modifiedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the AI Prompt was last modified.</p>"
         }
       }
     },
@@ -3590,8 +3671,8 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "association",
-        "associationType"
+        "associationType",
+        "association"
       ],
       "members":{
         "assistantId":{
@@ -3600,14 +3681,14 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "association":{
-          "shape":"AssistantAssociationInputData",
-          "documentation":"<p>The identifier of the associated resource.</p>"
-        },
         "associationType":{
           "shape":"AssociationType",
           "documentation":"<p>The type of association.</p>"
         },
+        "association":{
+          "shape":"AssistantAssociationInputData",
+          "documentation":"<p>The identifier of the associated resource.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
@@ -3640,25 +3721,25 @@
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
           "idempotencyToken":true
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the assistant.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the assistant.</p>"
         },
-        "serverSideEncryptionConfiguration":{
-          "shape":"ServerSideEncryptionConfiguration",
-          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>The customer managed key must have a policy that allows <code>kms:CreateGrant</code>, <code> kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
+        "type":{
+          "shape":"AssistantType",
+          "documentation":"<p>The type of assistant.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the assistant.</p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "type":{
-          "shape":"AssistantType",
-          "documentation":"<p>The type of assistant.</p>"
+        "serverSideEncryptionConfiguration":{
+          "shape":"ServerSideEncryptionConfiguration",
+          "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>The customer managed key must have a policy that allows <code>kms:CreateGrant</code>, <code> kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. To use Amazon Q in Connect with chat, the key policy must also allow <code>kms:Decrypt</code>, <code>kms:GenerateDataKey*</code>, and <code>kms:DescribeKey</code> permissions to the <code>connect.amazonaws.com</code> service principal. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
         }
       }
     },
@@ -3674,36 +3755,36 @@
     "CreateContentAssociationRequest":{
       "type":"structure",
       "required":[
-        "association",
-        "associationType",
+        "knowledgeBaseId",
         "contentId",
-        "knowledgeBaseId"
+        "associationType",
+        "association"
       ],
       "members":{
-        "association":{
-          "shape":"ContentAssociationContents",
-          "documentation":"<p>The identifier of the associated resource.</p>"
-        },
-        "associationType":{
-          "shape":"ContentAssociationType",
-          "documentation":"<p>The type of association.</p>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
           "idempotencyToken":true
         },
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "contentId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the content.</p>",
           "location":"uri",
           "locationName":"contentId"
         },
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "associationType":{
+          "shape":"ContentAssociationType",
+          "documentation":"<p>The type of association.</p>"
+        },
+        "association":{
+          "shape":"ContentAssociationContents",
+          "documentation":"<p>The identifier of the associated resource.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -3728,40 +3809,40 @@
         "uploadId"
       ],
       "members":{
-        "clientToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
-          "idempotencyToken":true
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the content. Each piece of content in a knowledge base must have a unique name. You can retrieve a piece of content using only its knowledge base and its name with the <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_SearchContent.html\">SearchContent</a> API.</p>"
         },
+        "title":{
+          "shape":"ContentTitle",
+          "documentation":"<p>The title of the content. If not set, the title is equal to the name.</p>"
+        },
         "overrideLinkOutUri":{
           "shape":"Uri",
           "documentation":"<p>The URI you want to use for the article. If the knowledge base has a templateUri, setting this argument overrides it for this piece of content.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "title":{
-          "shape":"ContentTitle",
-          "documentation":"<p>The title of the content. If not set, the title is equal to the name.</p>"
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
         },
         "uploadId":{
           "shape":"UploadId",
           "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/amazon-q-connect/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         }
       }
     },
@@ -3777,8 +3858,8 @@
     "CreateKnowledgeBaseRequest":{
       "type":"structure",
       "required":[
-        "knowledgeBaseType",
-        "name"
+        "name",
+        "knowledgeBaseType"
       ],
       "members":{
         "clientToken":{
@@ -3786,37 +3867,37 @@
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
           "idempotencyToken":true
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the knowledge base.</p>"
         },
         "knowledgeBaseType":{
           "shape":"KnowledgeBaseType",
           "documentation":"<p>The type of knowledge base. Only CUSTOM knowledge bases allow you to upload your own content. EXTERNAL knowledge bases support integrations with third-party systems whose content is synchronized automatically. </p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the knowledge base.</p>"
+        "sourceConfiguration":{
+          "shape":"SourceConfiguration",
+          "documentation":"<p>The source of the knowledge base content. Only set this argument for EXTERNAL or Managed knowledge bases.</p>"
         },
         "renderingConfiguration":{
           "shape":"RenderingConfiguration",
           "documentation":"<p>Information about how to render the content.</p>"
         },
+        "vectorIngestionConfiguration":{
+          "shape":"VectorIngestionConfiguration",
+          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
+        },
         "serverSideEncryptionConfiguration":{
           "shape":"ServerSideEncryptionConfiguration",
           "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect.</p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
         },
-        "sourceConfiguration":{
-          "shape":"SourceConfiguration",
-          "documentation":"<p>The source of the knowledge base content. Only set this argument for EXTERNAL or Managed knowledge bases.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description.</p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "vectorIngestionConfiguration":{
-          "shape":"VectorIngestionConfiguration",
-          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
         }
       }
     },
@@ -3832,25 +3913,13 @@
     "CreateMessageTemplateAttachmentRequest":{
       "type":"structure",
       "required":[
-        "body",
-        "contentDisposition",
         "knowledgeBaseId",
         "messageTemplateId",
-        "name"
+        "contentDisposition",
+        "name",
+        "body"
       ],
       "members":{
-        "body":{
-          "shape":"NonEmptyUnlimitedString",
-          "documentation":"<p>The body of the attachment file being uploaded. It should be encoded using base64 encoding.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>"
-        },
-        "contentDisposition":{
-          "shape":"ContentDisposition",
-          "documentation":"<p>The presentation information for the attachment file.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
@@ -3863,9 +3932,21 @@
           "location":"uri",
           "locationName":"messageTemplateId"
         },
+        "contentDisposition":{
+          "shape":"ContentDisposition",
+          "documentation":"<p>The presentation information for the attachment file.</p>"
+        },
         "name":{
           "shape":"AttachmentFileName",
           "documentation":"<p>The name of the attachment file being uploaded. The name should include the file extension.</p>"
+        },
+        "body":{
+          "shape":"NonEmptyUnlimitedString",
+          "documentation":"<p>The body of the attachment file being uploaded. It should be encoded using base64 encoding.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>"
         }
       }
     },
@@ -3881,47 +3962,47 @@
     "CreateMessageTemplateRequest":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "content",
         "knowledgeBaseId",
-        "name"
+        "name",
+        "content",
+        "channelSubtype"
       ],
       "members":{
-        "channelSubtype":{
-          "shape":"ChannelSubtype",
-          "documentation":"<p>The channel subtype this message template applies to.</p>"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the message template.</p>"
         },
         "content":{
           "shape":"MessageTemplateContentProvider",
           "documentation":"<p>The content of the message template.</p>"
         },
-        "defaultAttributes":{
-          "shape":"MessageTemplateAttributes",
-          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
-        },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the message template.</p>"
         },
-        "groupingConfiguration":{"shape":"GroupingConfiguration"},
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "channelSubtype":{
+          "shape":"ChannelSubtype",
+          "documentation":"<p>The channel subtype this message template applies to.</p>"
         },
         "language":{
           "shape":"LanguageCode",
           "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the message template.</p>"
+        "defaultAttributes":{
+          "shape":"MessageTemplateAttributes",
+          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
+        },
+        "groupingConfiguration":{"shape":"GroupingConfiguration"},
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"Tags",
@@ -3951,15 +4032,15 @@
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "messageTemplateContentSha256":{
-          "shape":"MessageTemplateContentSha256",
-          "documentation":"<p>The checksum value of the message template content that is referenced by the <code>$LATEST</code> qualifier. It can be returned in <code>MessageTemplateData</code> or <code>ExtendedMessageTemplateData</code>. It’s calculated by content, language, <code>defaultAttributes</code> and <code>Attachments</code> of the message template. If not supplied, the message template version will be created based on the message template content that is referenced by the <code>$LATEST</code> qualifier by default.</p>"
-        },
         "messageTemplateId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN. It cannot contain any qualifier.</p>",
           "location":"uri",
           "locationName":"messageTemplateId"
+        },
+        "messageTemplateContentSha256":{
+          "shape":"MessageTemplateContentSha256",
+          "documentation":"<p>The checksum value of the message template content that is referenced by the <code>$LATEST</code> qualifier. It can be returned in <code>MessageTemplateData</code> or <code>ExtendedMessageTemplateData</code>. It’s calculated by content, language, <code>defaultAttributes</code> and <code>Attachments</code> of the message template. If not supplied, the message template version will be created based on the message template content that is referenced by the <code>$LATEST</code> qualifier by default.</p>"
         }
       }
     },
@@ -3975,19 +4056,20 @@
     "CreateQuickResponseRequest":{
       "type":"structure",
       "required":[
-        "content",
         "knowledgeBaseId",
-        "name"
+        "name",
+        "content"
       ],
       "members":{
-        "channels":{
-          "shape":"Channels",
-          "documentation":"<p>The Amazon Connect channels this quick response applies to.</p>"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
-        "clientToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"QuickResponseName",
+          "documentation":"<p>The name of the quick response.</p>"
         },
         "content":{
           "shape":"QuickResponseDataProvider",
@@ -3997,35 +4079,34 @@
           "shape":"QuickResponseType",
           "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for a quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for a quick response written in richtext.</p> </li> </ul>"
         },
+        "groupingConfiguration":{
+          "shape":"GroupingConfiguration",
+          "documentation":"<p>The configuration information of the user groups that the quick response is accessible to.</p>"
+        },
         "description":{
           "shape":"QuickResponseDescription",
           "documentation":"<p>The description of the quick response.</p>"
         },
-        "groupingConfiguration":{
-          "shape":"GroupingConfiguration",
-          "documentation":"<p>The configuration information of the user groups that the quick response is accessible to.</p>"
+        "shortcutKey":{
+          "shape":"ShortCutKey",
+          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base. </p>"
         },
         "isActive":{
           "shape":"Boolean",
           "documentation":"<p>Whether the quick response is active.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "channels":{
+          "shape":"Channels",
+          "documentation":"<p>The Amazon Connect channels this quick response applies to.</p>"
         },
         "language":{
           "shape":"LanguageCode",
           "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
-        "name":{
-          "shape":"QuickResponseName",
-          "documentation":"<p>The name of the quick response.</p>"
-        },
-        "shortcutKey":{
-          "shape":"ShortCutKey",
-          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base. </p>"
+        "clientToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"Tags",
@@ -4049,9 +4130,10 @@
         "name"
       ],
       "members":{
-        "aiAgentConfiguration":{
-          "shape":"AIAgentConfigurationMap",
-          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
+          "idempotencyToken":true
         },
         "assistantId":{
           "shape":"UuidOrArn",
@@ -4059,26 +4141,29 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the session.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the session.</p>"
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
         "tagFilter":{
           "shape":"TagFilter",
           "documentation":"<p>An object that can be used to specify Tag conditions. </p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "aiAgentConfiguration":{
+          "shape":"AIAgentConfigurationMap",
+          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
+        },
+        "contactArn":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the email contact in Amazon Connect. Used to retrieve email content and establish session context for AI-powered email assistance.</p>"
         }
       }
     },
@@ -4100,121 +4185,153 @@
     "CustomerProfileAttributes":{
       "type":"structure",
       "members":{
-        "accountNumber":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>A unique account number that you have given to the customer.</p>"
-        },
-        "additionalInformation":{
+        "profileId":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>Any additional information relevant to the customer's profile.</p>"
+          "documentation":"<p>The unique identifier of a customer profile.</p>"
         },
-        "address1":{
+        "profileARN":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The first line of a customer address.</p>"
+          "documentation":"<p>The ARN of a customer profile.</p>"
         },
-        "address2":{
+        "firstName":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The second line of a customer address.</p>"
+          "documentation":"<p>The customer's first name.</p>"
         },
-        "address3":{
+        "middleName":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The third line of a customer address.</p>"
+          "documentation":"<p>The customer's middle name.</p>"
         },
-        "address4":{
+        "lastName":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The fourth line of a customer address.</p>"
+          "documentation":"<p>The customer's last name.</p>"
         },
-        "billingAddress1":{
+        "accountNumber":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The first line of a customer’s billing address.</p>"
+          "documentation":"<p>A unique account number that you have given to the customer.</p>"
         },
-        "billingAddress2":{
+        "emailAddress":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The second line of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's email address, which has not been specified as a personal or business address.</p>"
         },
-        "billingAddress3":{
+        "phoneNumber":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The third line of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's phone number, which has not been specified as a mobile, home, or business number.</p>"
         },
-        "billingAddress4":{
+        "additionalInformation":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The fourth line of a customer’s billing address.</p>"
+          "documentation":"<p>Any additional information relevant to the customer's profile.</p>"
         },
-        "billingCity":{
+        "partyType":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The city of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's party type.</p>"
         },
-        "billingCountry":{
+        "businessName":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The country of a customer’s billing address.</p>"
+          "documentation":"<p>The name of the customer's business.</p>"
         },
-        "billingCounty":{
+        "birthDate":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The county of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's birth date.</p>"
         },
-        "billingPostalCode":{
+        "gender":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The postal code of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's gender.</p>"
         },
-        "billingProvince":{
+        "mobilePhoneNumber":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The province of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's mobile phone number.</p>"
         },
-        "billingState":{
+        "homePhoneNumber":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The state of a customer’s billing address.</p>"
+          "documentation":"<p>The customer's mobile phone number.</p>"
         },
-        "birthDate":{
+        "businessPhoneNumber":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's birth date.</p>"
+          "documentation":"<p>The customer's business phone number.</p>"
         },
         "businessEmailAddress":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The customer's business email address.</p>"
         },
-        "businessName":{
+        "address1":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The name of the customer's business.</p>"
+          "documentation":"<p>The first line of a customer address.</p>"
         },
-        "businessPhoneNumber":{
+        "address2":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's business phone number.</p>"
+          "documentation":"<p>The second line of a customer address.</p>"
+        },
+        "address3":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The third line of a customer address.</p>"
+        },
+        "address4":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The fourth line of a customer address.</p>"
         },
         "city":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The city in which a customer lives.</p>"
         },
+        "county":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The county in which a customer lives.</p>"
+        },
         "country":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The country in which a customer lives.</p>"
         },
-        "county":{
+        "postalCode":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The county in which a customer lives.</p>"
+          "documentation":"<p>The postal code of a customer address.</p>"
         },
-        "custom":{
-          "shape":"CustomAttributes",
-          "documentation":"<p>The custom attributes in customer profile attributes.</p>"
+        "province":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The province in which a customer lives.</p>"
         },
-        "emailAddress":{
+        "state":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's email address, which has not been specified as a personal or business address.</p>"
+          "documentation":"<p>The state in which a customer lives.</p>"
         },
-        "firstName":{
+        "shippingAddress1":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's first name.</p>"
+          "documentation":"<p>The first line of a customer’s shipping address.</p>"
         },
-        "gender":{
+        "shippingAddress2":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's gender.</p>"
+          "documentation":"<p>The second line of a customer’s shipping address.</p>"
         },
-        "homePhoneNumber":{
+        "shippingAddress3":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's mobile phone number.</p>"
+          "documentation":"<p>The third line of a customer’s shipping address.</p>"
         },
-        "lastName":{
+        "shippingAddress4":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's last name.</p>"
+          "documentation":"<p>The fourth line of a customer’s shipping address.</p>"
+        },
+        "shippingCity":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The city of a customer’s shipping address.</p>"
+        },
+        "shippingCounty":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The county of a customer’s shipping address.</p>"
+        },
+        "shippingCountry":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The country of a customer’s shipping address.</p>"
+        },
+        "shippingPostalCode":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The postal code of a customer’s shipping address.</p>"
+        },
+        "shippingProvince":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The province of a customer’s shipping address.</p>"
+        },
+        "shippingState":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The state of a customer’s shipping address.</p>"
         },
         "mailingAddress1":{
           "shape":"MessageTemplateAttributeValue",
@@ -4236,14 +4353,14 @@
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The city of a customer’s mailing address.</p>"
         },
-        "mailingCountry":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The country of a customer’s mailing address.</p>"
-        },
         "mailingCounty":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The county of a customer’s mailing address.</p>"
         },
+        "mailingCountry":{
+          "shape":"MessageTemplateAttributeValue",
+          "documentation":"<p>The country of a customer’s mailing address.</p>"
+        },
         "mailingPostalCode":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The postal code of a customer’s mailing address.</p>"
@@ -4256,81 +4373,49 @@
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The state of a customer’s mailing address.</p>"
         },
-        "middleName":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's middle name.</p>"
-        },
-        "mobilePhoneNumber":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's mobile phone number.</p>"
-        },
-        "partyType":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's party type.</p>"
-        },
-        "phoneNumber":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The customer's phone number, which has not been specified as a mobile, home, or business number.</p>"
-        },
-        "postalCode":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The postal code of a customer address.</p>"
-        },
-        "profileARN":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The ARN of a customer profile.</p>"
-        },
-        "profileId":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The unique identifier of a customer profile.</p>"
-        },
-        "province":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The province in which a customer lives.</p>"
-        },
-        "shippingAddress1":{
+        "billingAddress1":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The first line of a customer’s shipping address.</p>"
+          "documentation":"<p>The first line of a customer’s billing address.</p>"
         },
-        "shippingAddress2":{
+        "billingAddress2":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The second line of a customer’s shipping address.</p>"
+          "documentation":"<p>The second line of a customer’s billing address.</p>"
         },
-        "shippingAddress3":{
+        "billingAddress3":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The third line of a customer’s shipping address.</p>"
+          "documentation":"<p>The third line of a customer’s billing address.</p>"
         },
-        "shippingAddress4":{
+        "billingAddress4":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The fourth line of a customer’s shipping address.</p>"
+          "documentation":"<p>The fourth line of a customer’s billing address.</p>"
         },
-        "shippingCity":{
+        "billingCity":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The city of a customer’s shipping address.</p>"
+          "documentation":"<p>The city of a customer’s billing address.</p>"
         },
-        "shippingCountry":{
+        "billingCounty":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The country of a customer’s shipping address.</p>"
+          "documentation":"<p>The county of a customer’s billing address.</p>"
         },
-        "shippingCounty":{
+        "billingCountry":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The county of a customer’s shipping address.</p>"
+          "documentation":"<p>The country of a customer’s billing address.</p>"
         },
-        "shippingPostalCode":{
+        "billingPostalCode":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The postal code of a customer’s shipping address.</p>"
+          "documentation":"<p>The postal code of a customer’s billing address.</p>"
         },
-        "shippingProvince":{
+        "billingProvince":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The province of a customer’s shipping address.</p>"
+          "documentation":"<p>The province of a customer’s billing address.</p>"
         },
-        "shippingState":{
+        "billingState":{
           "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The state of a customer’s shipping address.</p>"
+          "documentation":"<p>The state of a customer’s billing address.</p>"
         },
-        "state":{
-          "shape":"MessageTemplateAttributeValue",
-          "documentation":"<p>The state in which a customer lives.</p>"
+        "custom":{
+          "shape":"CustomAttributes",
+          "documentation":"<p>The custom attributes in customer profile attributes.</p>"
         }
       },
       "documentation":"<p>The customer profile attributes that are used with the message template.</p>"
@@ -4353,6 +4438,22 @@
         "sourceContentData":{
           "shape":"SourceContentDataDetails",
           "documentation":"<p>Details about the content data.</p>"
+        },
+        "generativeChunkData":{
+          "shape":"GenerativeChunkDataDetails",
+          "documentation":"<p>Details about the generative chunk data.</p>"
+        },
+        "emailResponseChunkData":{
+          "shape":"EmailResponseChunkDataDetails",
+          "documentation":"<p>Streaming chunk data for email response generation containing partial response content.</p>"
+        },
+        "emailOverviewChunkData":{
+          "shape":"EmailOverviewChunkDataDetails",
+          "documentation":"<p>Streaming chunk data for email overview containing partial overview content.</p>"
+        },
+        "emailGenerativeAnswerChunkData":{
+          "shape":"EmailGenerativeAnswerChunkDataDetails",
+          "documentation":"<p>Streaming chunk data for email generative answers containing partial knowledge-based response content.</p>"
         }
       },
       "documentation":"<p>Details about the data.</p>",
@@ -4373,17 +4474,17 @@
     "DataSummary":{
       "type":"structure",
       "required":[
-        "details",
-        "reference"
+        "reference",
+        "details"
       ],
       "members":{
-        "details":{
-          "shape":"DataDetails",
-          "documentation":"<p>Details about the data.</p>"
-        },
         "reference":{
           "shape":"DataReference",
           "documentation":"<p>Reference information about the content.</p>"
+        },
+        "details":{
+          "shape":"DataDetails",
+          "documentation":"<p>Details about the data.</p>"
         }
       },
       "documentation":"<p>Summary of the data.</p>"
@@ -4443,49 +4544,48 @@
     "DeleteAIAgentRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
-        "assistantId"
+        "assistantId",
+        "aiAgentId"
       ],
       "members":{
-        "aiAgentId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"aiAgentId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiAgentId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"aiAgentId"
         }
       }
     },
     "DeleteAIAgentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAIAgentVersionRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
         "assistantId",
+        "aiAgentId",
         "versionNumber"
       ],
       "members":{
-        "aiAgentId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"aiAgentId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
+        "aiAgentId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"aiAgentId"
+        },
         "versionNumber":{
           "shape":"Version",
           "documentation":"<p>The version number of the AI Agent version.</p>",
@@ -4496,55 +4596,53 @@
     },
     "DeleteAIAgentVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAIGuardrailRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
-        "assistantId"
+        "assistantId",
+        "aiGuardrailId"
       ],
       "members":{
-        "aiGuardrailId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"aiGuardrailId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiGuardrailId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"aiGuardrailId"
         }
       }
     },
     "DeleteAIGuardrailResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAIGuardrailVersionRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
         "assistantId",
+        "aiGuardrailId",
         "versionNumber"
       ],
       "members":{
-        "aiGuardrailId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
-          "location":"uri",
-          "locationName":"aiGuardrailId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
+        "aiGuardrailId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
+          "location":"uri",
+          "locationName":"aiGuardrailId"
+        },
         "versionNumber":{
           "shape":"Version",
           "documentation":"<p>The version number of the AI Guardrail version to be deleted.</p>",
@@ -4555,55 +4653,53 @@
     },
     "DeleteAIGuardrailVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAIPromptRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
-        "assistantId"
+        "assistantId",
+        "aiPromptId"
       ],
       "members":{
-        "aiPromptId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"aiPromptId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiPromptId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"aiPromptId"
         }
       }
     },
     "DeleteAIPromptResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAIPromptVersionRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
         "assistantId",
+        "aiPromptId",
         "versionNumber"
       ],
       "members":{
-        "aiPromptId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>",
-          "location":"uri",
-          "locationName":"aiPromptId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
+        "aiPromptId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>",
+          "location":"uri",
+          "locationName":"aiPromptId"
+        },
         "versionNumber":{
           "shape":"Version",
           "documentation":"<p>The version number of the AI Prompt version to be deleted.</p>",
@@ -4614,8 +4710,7 @@
     },
     "DeleteAIPromptVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssistantAssociationRequest":{
       "type":"structure",
@@ -4640,8 +4735,7 @@
     },
     "DeleteAssistantAssociationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssistantRequest":{
       "type":"structure",
@@ -4657,22 +4751,21 @@
     },
     "DeleteAssistantResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContentAssociationRequest":{
       "type":"structure",
       "required":[
-        "contentAssociationId",
+        "knowledgeBaseId",
         "contentId",
-        "knowledgeBaseId"
+        "contentAssociationId"
       ],
       "members":{
-        "contentAssociationId":{
+        "knowledgeBaseId":{
           "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "documentation":"<p>The identifier of the knowledge base.</p>",
           "location":"uri",
-          "locationName":"contentAssociationId"
+          "locationName":"knowledgeBaseId"
         },
         "contentId":{
           "shape":"UuidOrArn",
@@ -4680,70 +4773,67 @@
           "location":"uri",
           "locationName":"contentId"
         },
-        "knowledgeBaseId":{
+        "contentAssociationId":{
           "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base.</p>",
+          "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
-          "locationName":"knowledgeBaseId"
+          "locationName":"contentAssociationId"
         }
       }
     },
     "DeleteContentAssociationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContentRequest":{
       "type":"structure",
       "required":[
-        "contentId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "contentId"
       ],
       "members":{
-        "contentId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the content. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"contentId"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
+        },
+        "contentId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the content. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"contentId"
         }
       }
     },
     "DeleteContentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImportJobRequest":{
       "type":"structure",
       "required":[
-        "importJobId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "importJobId"
       ],
       "members":{
-        "importJobId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the import job to be deleted.</p>",
-          "location":"uri",
-          "locationName":"importJobId"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
+        },
+        "importJobId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the import job to be deleted.</p>",
+          "location":"uri",
+          "locationName":"importJobId"
         }
       }
     },
     "DeleteImportJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteKnowledgeBaseRequest":{
       "type":"structure",
@@ -4759,23 +4849,16 @@
     },
     "DeleteKnowledgeBaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMessageTemplateAttachmentRequest":{
       "type":"structure",
       "required":[
-        "attachmentId",
         "knowledgeBaseId",
-        "messageTemplateId"
+        "messageTemplateId",
+        "attachmentId"
       ],
       "members":{
-        "attachmentId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the attachment file.</p>",
-          "location":"uri",
-          "locationName":"attachmentId"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
@@ -4787,13 +4870,18 @@
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN. It cannot contain any qualifier.</p>",
           "location":"uri",
           "locationName":"messageTemplateId"
+        },
+        "attachmentId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the attachment file.</p>",
+          "location":"uri",
+          "locationName":"attachmentId"
         }
       }
     },
     "DeleteMessageTemplateAttachmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMessageTemplateRequest":{
       "type":"structure",
@@ -4818,8 +4906,7 @@
     },
     "DeleteMessageTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteQuickResponseRequest":{
       "type":"structure",
@@ -4844,14 +4931,25 @@
     },
     "DeleteQuickResponseResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DependencyFailedException":{
+      "type":"structure",
       "members":{
-      }
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>An error occurred while calling a dependency. For example, calling <code>connect:DecribeContact</code> as part of <code>CreateSession</code> with a contactArn.</p>",
+      "error":{
+        "httpStatusCode":424,
+        "senderFault":true
+      },
+      "exception":true
     },
     "Description":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^[a-zA-Z0-9\\s_.,-]+"
+      "pattern":"[a-zA-Z0-9\\s_.,-]+.*"
     },
     "Document":{
       "type":"structure",
@@ -4861,13 +4959,13 @@
           "shape":"ContentReference",
           "documentation":"<p>A reference to the content resource.</p>"
         },
-        "excerpt":{
-          "shape":"DocumentText",
-          "documentation":"<p>The excerpt from the document.</p>"
-        },
         "title":{
           "shape":"DocumentText",
           "documentation":"<p>The title of the document.</p>"
+        },
+        "excerpt":{
+          "shape":"DocumentText",
+          "documentation":"<p>The excerpt from the document.</p>"
         }
       },
       "documentation":"<p>The document.</p>"
@@ -4875,17 +4973,57 @@
     "DocumentText":{
       "type":"structure",
       "members":{
-        "highlights":{
-          "shape":"Highlights",
-          "documentation":"<p>Highlights in the document text.</p>"
-        },
         "text":{
           "shape":"SensitiveString",
           "documentation":"<p>Text in the document.</p>"
+        },
+        "highlights":{
+          "shape":"Highlights",
+          "documentation":"<p>Highlights in the document text.</p>"
         }
       },
       "documentation":"<p>The text of the document.</p>"
     },
+    "EmailGenerativeAnswerAIAgentConfiguration":{
+      "type":"structure",
+      "members":{
+        "emailGenerativeAnswerAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The ID of the System AI prompt used for generating comprehensive knowledge-based answers from email queries.</p>"
+        },
+        "emailQueryReformulationAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The ID of the System AI prompt used for reformulating email queries to optimize knowledge base search results.</p>"
+        },
+        "locale":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The locale setting for language-specific email processing and response generation (for example, en_US, es_ES).</p>"
+        },
+        "associationConfigurations":{
+          "shape":"AssociationConfigurationList",
+          "documentation":"<p>Configuration settings for knowledge base associations used by the email generative answer agent.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for the EMAIL_GENERATIVE_ANSWER AI agent including prompts, locale, and knowledge base associations.</p>"
+    },
+    "EmailGenerativeAnswerChunkDataDetails":{
+      "type":"structure",
+      "members":{
+        "completion":{
+          "shape":"NonEmptySensitiveString",
+          "documentation":"<p>The partial or complete text content of the generative answer response.</p>"
+        },
+        "references":{
+          "shape":"DataSummaryList",
+          "documentation":"<p>Source references and citations from knowledge base articles used to generate the answer.</p>"
+        },
+        "nextChunkToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving the next chunk of streaming response data, if available.</p>"
+        }
+      },
+      "documentation":"<p>Details of streaming chunk data for email generative answers including completion text and references.</p>"
+    },
     "EmailHeader":{
       "type":"structure",
       "members":{
@@ -4904,13 +5042,13 @@
       "type":"string",
       "max":126,
       "min":1,
-      "pattern":"^[!-9;-@A-~]+$"
+      "pattern":"[!-9;-@A-~]+"
     },
     "EmailHeaderValue":{
       "type":"string",
       "max":870,
       "min":1,
-      "pattern":"[ -~]*",
+      "pattern":".*[ -~]*.*",
       "sensitive":true
     },
     "EmailHeaders":{
@@ -4922,6 +5060,10 @@
     "EmailMessageTemplateContent":{
       "type":"structure",
       "members":{
+        "subject":{
+          "shape":"NonEmptyUnlimitedString",
+          "documentation":"<p>The subject line, or title, to use in email messages.</p>"
+        },
         "body":{
           "shape":"EmailMessageTemplateContentBody",
           "documentation":"<p>The body to use in email messages.</p>"
@@ -4929,10 +5071,6 @@
         "headers":{
           "shape":"EmailHeaders",
           "documentation":"<p>The email headers to include in email messages.</p>"
-        },
-        "subject":{
-          "shape":"NonEmptyUnlimitedString",
-          "documentation":"<p>The subject line, or title, to use in email messages.</p>"
         }
       },
       "documentation":"<p>The content of the message template that applies to the email channel subtype.</p>"
@@ -4940,109 +5078,173 @@
     "EmailMessageTemplateContentBody":{
       "type":"structure",
       "members":{
-        "html":{
-          "shape":"MessageTemplateBodyContentProvider",
-          "documentation":"<p>The message body, in HTML format, to use in email messages that are based on the message template. We recommend using HTML format for email clients that render HTML content. You can include links, formatted text, and more in an HTML message.</p>"
-        },
         "plainText":{
           "shape":"MessageTemplateBodyContentProvider",
           "documentation":"<p>The message body, in plain text format, to use in email messages that are based on the message template. We recommend using plain text format for email clients that don't render HTML content and clients that are connected to high-latency networks, such as mobile devices.</p>"
+        },
+        "html":{
+          "shape":"MessageTemplateBodyContentProvider",
+          "documentation":"<p>The message body, in HTML format, to use in email messages that are based on the message template. We recommend using HTML format for email clients that render HTML content. You can include links, formatted text, and more in an HTML message.</p>"
         }
       },
       "documentation":"<p>The body to use in email messages.</p>"
     },
+    "EmailOverviewAIAgentConfiguration":{
+      "type":"structure",
+      "members":{
+        "emailOverviewAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The ID of the System AI prompt used for generating structured email conversation summaries.</p>"
+        },
+        "locale":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The locale setting for language-specific email overview processing (for example, en_US, es_ES).</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for the EMAIL_OVERVIEW AI agent including prompt ID and locale settings.</p>"
+    },
+    "EmailOverviewChunkDataDetails":{
+      "type":"structure",
+      "members":{
+        "completion":{
+          "shape":"NonEmptySensitiveString",
+          "documentation":"<p>The partial or complete overview text content in structured HTML format with customer issues, resolutions, and next steps.</p>"
+        },
+        "nextChunkToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving the next chunk of streaming overview data, if available.</p>"
+        }
+      },
+      "documentation":"<p>Details of streaming chunk data for email overview including completion text and pagination tokens.</p>"
+    },
+    "EmailResponseAIAgentConfiguration":{
+      "type":"structure",
+      "members":{
+        "emailResponseAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The ID of the System AI prompt used for generating professional email responses based on knowledge base content.</p>"
+        },
+        "emailQueryReformulationAIPromptId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The ID of the System AI prompt used for reformulating email queries to optimize knowledge base search for response generation.</p>"
+        },
+        "locale":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The locale setting for language-specific email response generation (for example, en_US, es_ES).</p>"
+        },
+        "associationConfigurations":{
+          "shape":"AssociationConfigurationList",
+          "documentation":"<p>Configuration settings for knowledge base associations used by the email response agent.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for the EMAIL_RESPONSE AI agent including prompts, locale, and knowledge base associations.</p>"
+    },
+    "EmailResponseChunkDataDetails":{
+      "type":"structure",
+      "members":{
+        "completion":{
+          "shape":"NonEmptySensitiveString",
+          "documentation":"<p>The partial or complete professional email response text with appropriate greetings and closings.</p>"
+        },
+        "nextChunkToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving the next chunk of streaming response data, if available.</p>"
+        }
+      },
+      "documentation":"<p>Details of streaming chunk data for email responses including completion text and pagination tokens.</p>"
+    },
     "ExtendedMessageTemplateData":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "content",
-        "createdTime",
+        "messageTemplateArn",
+        "messageTemplateId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedBy",
+        "name",
+        "channelSubtype",
+        "createdTime",
         "lastModifiedTime",
-        "messageTemplateArn",
-        "messageTemplateContentSha256",
-        "messageTemplateId",
-        "name"
+        "lastModifiedBy",
+        "content",
+        "messageTemplateContentSha256"
       ],
       "members":{
-        "attachments":{
-          "shape":"MessageTemplateAttachmentList",
-          "documentation":"<p>The message template attachments.</p>"
+        "messageTemplateArn":{
+          "shape":"ArnWithQualifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
         },
-        "attributeTypes":{
-          "shape":"MessageTemplateAttributeTypeList",
-          "documentation":"<p>The types of attributes contain the message template.</p>"
+        "messageTemplateId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the message template.</p>"
+        },
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the message template.</p>"
         },
         "channelSubtype":{
           "shape":"ChannelSubtype",
           "documentation":"<p>The channel subtype this message template applies to.</p>"
         },
-        "content":{
-          "shape":"MessageTemplateContentProvider",
-          "documentation":"<p>The content of the message template.</p>"
-        },
         "createdTime":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp when the message template was created.</p>"
         },
-        "defaultAttributes":{
-          "shape":"MessageTemplateAttributes",
-          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the message template data was last modified.</p>"
+        },
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
+        },
+        "content":{
+          "shape":"MessageTemplateContentProvider",
+          "documentation":"<p>The content of the message template.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the message template.</p>"
         },
-        "groupingConfiguration":{"shape":"GroupingConfiguration"},
-        "isActive":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the version of the message template is activated.</p>"
-        },
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
-        },
         "language":{
           "shape":"LanguageCode",
           "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
+        "groupingConfiguration":{"shape":"GroupingConfiguration"},
+        "defaultAttributes":{
+          "shape":"MessageTemplateAttributes",
+          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
         },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp when the message template data was last modified.</p>"
+        "attributeTypes":{
+          "shape":"MessageTemplateAttributeTypeList",
+          "documentation":"<p>The types of attributes contain the message template.</p>"
         },
-        "messageTemplateArn":{
-          "shape":"ArnWithQualifier",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
+        "attachments":{
+          "shape":"MessageTemplateAttachmentList",
+          "documentation":"<p>The message template attachments.</p>"
+        },
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the version of the message template is activated.</p>"
+        },
+        "versionNumber":{
+          "shape":"Version",
+          "documentation":"<p>The version number of the message template version.</p>"
         },
         "messageTemplateContentSha256":{
           "shape":"MessageTemplateContentSha256",
           "documentation":"<p>The checksum value of the message template content that is referenced by the <code>$LATEST</code> qualifier. It can be returned in <code>MessageTemplateData</code> or <code>ExtendedMessageTemplateData</code>. It’s calculated by content, language, <code>defaultAttributes</code> and <code>Attachments</code> of the message template.</p>"
         },
-        "messageTemplateId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the message template.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the message template.</p>"
-        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "versionNumber":{
-          "shape":"Version",
-          "documentation":"<p>The version number of the message template version.</p>"
         }
       },
       "documentation":"<p>The extended data of a message template.</p>"
@@ -5054,17 +5256,17 @@
     "ExternalSourceConfiguration":{
       "type":"structure",
       "required":[
-        "configuration",
-        "source"
+        "source",
+        "configuration"
       ],
       "members":{
-        "configuration":{
-          "shape":"Configuration",
-          "documentation":"<p>The configuration information of the external data source.</p>"
-        },
         "source":{
           "shape":"ExternalSource",
           "documentation":"<p>The type of the external data source.</p>"
+        },
+        "configuration":{
+          "shape":"Configuration",
+          "documentation":"<p>The configuration information of the external data source.</p>"
         }
       },
       "documentation":"<p>The configuration information of the external data source.</p>"
@@ -5137,6 +5339,24 @@
       "max":99,
       "min":1
     },
+    "GenerativeChunkDataDetails":{
+      "type":"structure",
+      "members":{
+        "completion":{
+          "shape":"SensitiveString",
+          "documentation":"<p>A chunk of the LLM response.</p>"
+        },
+        "references":{
+          "shape":"DataSummaryList",
+          "documentation":"<p>The references used to generate the LLM response.</p>"
+        },
+        "nextChunkToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of chunks. Use the value returned in the previous response in the next request to retrieve the next set of chunks.</p>"
+        }
+      },
+      "documentation":"<p>Details about the generative chunk data.</p>"
+    },
     "GenerativeContentFeedbackData":{
       "type":"structure",
       "required":["relevance"],
@@ -5152,21 +5372,21 @@
       "type":"structure",
       "required":[
         "completion",
-        "rankingData",
-        "references"
+        "references",
+        "rankingData"
       ],
       "members":{
         "completion":{
           "shape":"SensitiveString",
           "documentation":"<p>The LLM response.</p>"
         },
-        "rankingData":{
-          "shape":"RankingData",
-          "documentation":"<p>Details about the generative content ranking data.</p>"
-        },
         "references":{
           "shape":"DataSummaryList",
           "documentation":"<p>The references used to generative the LLM response.</p>"
+        },
+        "rankingData":{
+          "shape":"RankingData",
+          "documentation":"<p>Details about the generative content ranking data.</p>"
         }
       },
       "documentation":"<p>Details about generative data.</p>"
@@ -5174,13 +5394,13 @@
     "GenerativeReference":{
       "type":"structure",
       "members":{
-        "generationId":{
-          "shape":"Uuid",
-          "documentation":"<p> The identifier of the LLM model. </p>"
-        },
         "modelId":{
           "shape":"LlmModelId",
           "documentation":"<p>The identifier of the LLM model. </p>"
+        },
+        "generationId":{
+          "shape":"Uuid",
+          "documentation":"<p> The identifier of the LLM model. </p>"
         }
       },
       "documentation":"<p>Reference information about generative content.</p>"
@@ -5189,26 +5409,26 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:[a-z-]+?:[a-z-]+?:[a-z0-9-]*?:([0-9]{12})?:[a-zA-Z0-9-:/]+$"
+      "pattern":"arn:[a-z-]+?:[a-z-]+?:[a-z0-9-]*?:([0-9]{12})?:[a-zA-Z0-9-:/]+"
     },
     "GetAIAgentRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
-        "assistantId"
+        "assistantId",
+        "aiAgentId"
       ],
       "members":{
-        "aiAgentId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent (with or without a version qualifier). Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"aiAgentId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiAgentId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent (with or without a version qualifier). Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"aiAgentId"
         }
       }
     },
@@ -5228,21 +5448,21 @@
     "GetAIGuardrailRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
-        "assistantId"
+        "assistantId",
+        "aiGuardrailId"
       ],
       "members":{
-        "aiGuardrailId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
-          "location":"uri",
-          "locationName":"aiGuardrailId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiGuardrailId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
+          "location":"uri",
+          "locationName":"aiGuardrailId"
         }
       }
     },
@@ -5262,21 +5482,21 @@
     "GetAIPromptRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
-        "assistantId"
+        "assistantId",
+        "aiPromptId"
       ],
       "members":{
-        "aiPromptId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>",
-          "location":"uri",
-          "locationName":"aiPromptId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiPromptId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt.</p>",
+          "location":"uri",
+          "locationName":"aiPromptId"
         }
       }
     },
@@ -5347,16 +5567,16 @@
     "GetContentAssociationRequest":{
       "type":"structure",
       "required":[
-        "contentAssociationId",
+        "knowledgeBaseId",
         "contentId",
-        "knowledgeBaseId"
+        "contentAssociationId"
       ],
       "members":{
-        "contentAssociationId":{
+        "knowledgeBaseId":{
           "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "documentation":"<p>The identifier of the knowledge base.</p>",
           "location":"uri",
-          "locationName":"contentAssociationId"
+          "locationName":"knowledgeBaseId"
         },
         "contentId":{
           "shape":"UuidOrArn",
@@ -5364,11 +5584,11 @@
           "location":"uri",
           "locationName":"contentId"
         },
-        "knowledgeBaseId":{
+        "contentAssociationId":{
           "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base.</p>",
+          "documentation":"<p>The identifier of the content association. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
-          "locationName":"knowledgeBaseId"
+          "locationName":"contentAssociationId"
         }
       }
     },
@@ -5495,21 +5715,21 @@
     "GetMessageTemplateRequest":{
       "type":"structure",
       "required":[
-        "knowledgeBaseId",
-        "messageTemplateId"
+        "messageTemplateId",
+        "knowledgeBaseId"
       ],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
-        },
         "messageTemplateId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN.</p>",
           "location":"uri",
           "locationName":"messageTemplateId"
+        },
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -5526,8 +5746,8 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "nextMessageToken",
-        "sessionId"
+        "sessionId",
+        "nextMessageToken"
       ],
       "members":{
         "assistantId":{
@@ -5536,32 +5756,40 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "nextMessageToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next message. Use the value returned in the SendMessage or previous response in the next request to retrieve the next message.</p>",
-          "location":"querystring",
-          "locationName":"nextMessageToken"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect session.</p>",
           "location":"uri",
           "locationName":"sessionId"
+        },
+        "nextMessageToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next message. Use the value returned in the SendMessage or previous response in the next request to retrieve the next message.</p>",
+          "location":"querystring",
+          "locationName":"nextMessageToken"
         }
       }
     },
     "GetNextMessageResponse":{
       "type":"structure",
       "required":[
-        "conversationState",
-        "requestMessageId",
+        "type",
         "response",
-        "type"
+        "requestMessageId",
+        "conversationState"
       ],
       "members":{
-        "conversationSessionData":{
-          "shape":"RuntimeSessionDataList",
-          "documentation":"<p>The conversation data stored on an Amazon Q in Connect Session.</p>"
+        "type":{
+          "shape":"MessageType",
+          "documentation":"<p>The type of message response.</p>"
+        },
+        "response":{
+          "shape":"MessageOutput",
+          "documentation":"<p>The message response to the requested message.</p>"
+        },
+        "requestMessageId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the submitted message.</p>"
         },
         "conversationState":{
           "shape":"ConversationState",
@@ -5571,38 +5799,30 @@
           "shape":"NextToken",
           "documentation":"<p>The token for the next message.</p>"
         },
-        "requestMessageId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the submitted message.</p>"
-        },
-        "response":{
-          "shape":"MessageOutput",
-          "documentation":"<p>The message response to the requested message.</p>"
-        },
-        "type":{
-          "shape":"MessageType",
-          "documentation":"<p>The type of message response.</p>"
+        "conversationSessionData":{
+          "shape":"RuntimeSessionDataList",
+          "documentation":"<p>The conversation data stored on an Amazon Q in Connect Session.</p>"
         }
       }
     },
     "GetQuickResponseRequest":{
       "type":"structure",
       "required":[
-        "knowledgeBaseId",
-        "quickResponseId"
+        "quickResponseId",
+        "knowledgeBaseId"
       ],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. This should be a QUICK_RESPONSES type knowledge base.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
-        },
         "quickResponseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the quick response.</p>",
           "location":"uri",
           "locationName":"quickResponseId"
+        },
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. This should be a QUICK_RESPONSES type knowledge base.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -5628,23 +5848,29 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"sessionId"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "waitTimeSeconds":{
           "shape":"WaitTimeSeconds",
           "documentation":"<p>The duration (in seconds) for which the call waits for a recommendation to be made available before returning. If a recommendation is available, the call returns sooner than <code>WaitTimeSeconds</code>. If no messages are available and the wait time expires, the call returns successfully with an empty list.</p>",
           "location":"querystring",
           "locationName":"waitTimeSeconds"
+        },
+        "nextChunkToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of chunks. Use the value returned in the previous response in the next request to retrieve the next set of chunks.</p>",
+          "location":"querystring",
+          "locationName":"nextChunkToken"
         }
       }
     },
@@ -5725,11 +5951,15 @@
     "GuardrailContentFilterConfig":{
       "type":"structure",
       "required":[
+        "type",
         "inputStrength",
-        "outputStrength",
-        "type"
+        "outputStrength"
       ],
       "members":{
+        "type":{
+          "shape":"GuardrailContentFilterType",
+          "documentation":"<p>The harmful category that the content filter is applied to.</p>"
+        },
         "inputStrength":{
           "shape":"GuardrailFilterStrength",
           "documentation":"<p>The strength of the content filter to apply to prompts. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.</p>"
@@ -5737,10 +5967,6 @@
         "outputStrength":{
           "shape":"GuardrailFilterStrength",
           "documentation":"<p>The strength of the content filter to apply to model responses. As you increase the filter strength, the likelihood of filtering harmful content increases and the probability of seeing harmful content in your application reduces.</p>"
-        },
-        "type":{
-          "shape":"GuardrailContentFilterType",
-          "documentation":"<p>The harmful category that the content filter is applied to.</p>"
         }
       },
       "documentation":"<p>Contains filter strengths for harmful content. AI Guardrail's support the following content filters to detect and filter harmful user inputs and FM-generated outputs.</p> <ul> <li> <p> <b>Hate</b>: Describes input prompts and model responses that discriminate, criticize, insult, denounce, or dehumanize a person or group on the basis of an identity (such as race, ethnicity, gender, religion, sexual orientation, ability, and national origin).</p> </li> <li> <p> <b>Insults</b>: Describes input prompts and model responses that includes demeaning, humiliating, mocking, insulting, or belittling language. This type of language is also labeled as bullying.</p> </li> <li> <p> <b>Sexual</b>: Describes input prompts and model responses that indicates sexual interest, activity, or arousal using direct or indirect references to body parts, physical traits, or sex.</p> </li> <li> <p> <b>Violence</b>: Describes input prompts and model responses that includes glorification of, or threats to inflict physical pain, hurt, or injury toward a person, group, or thing.</p> </li> </ul> <p>Content filtering depends on the confidence classification of user inputs and FM responses across each of the four harmful categories. All input and output statements are classified into one of four confidence levels (NONE, LOW, MEDIUM, HIGH) for each harmful category. For example, if a statement is classified as <i>Hate</i> with HIGH confidence, the likelihood of the statement representing hateful content is high. A single statement can be classified across multiple categories with varying confidence levels. For example, a single statement can be classified as <i>Hate</i> with HIGH confidence, <i> Insults</i> with LOW confidence, <i>Sexual</i> with NONE confidence, and <i>Violence</i> with MEDIUM confidence.</p>"
@@ -5768,17 +5994,17 @@
     "GuardrailContextualGroundingFilterConfig":{
       "type":"structure",
       "required":[
-        "threshold",
-        "type"
+        "type",
+        "threshold"
       ],
       "members":{
-        "threshold":{
-          "shape":"GuardrailContextualGroundingFilterThreshold",
-          "documentation":"<p>The threshold details for the AI Guardrail's contextual grounding filter.</p>"
-        },
         "type":{
           "shape":"GuardrailContextualGroundingFilterType",
           "documentation":"<p>The filter type for the AI Guardrail's contextual grounding filter.</p>"
+        },
+        "threshold":{
+          "shape":"GuardrailContextualGroundingFilterThreshold",
+          "documentation":"<p>The threshold details for the AI Guardrail's contextual grounding filter.</p>"
         }
       },
       "documentation":"<p>The filter configuration details for the AI Guardrail's contextual grounding filter.</p>"
@@ -5846,17 +6072,17 @@
     "GuardrailPiiEntityConfig":{
       "type":"structure",
       "required":[
-        "action",
-        "type"
+        "type",
+        "action"
       ],
       "members":{
-        "action":{
-          "shape":"GuardrailSensitiveInformationAction",
-          "documentation":"<p>Configure AI Guardrail's action when the PII entity is detected.</p>"
-        },
         "type":{
           "shape":"GuardrailPiiEntityType",
           "documentation":"<p>Configure AI Guardrail type when the PII entity is detected.</p> <p>The following PIIs are used to block or mask sensitive information:</p> <ul> <li> <p> <b>General</b> </p> <ul> <li> <p> <b>ADDRESS</b> </p> <p>A physical address, such as \"100 Main Street, Anytown, USA\" or \"Suite #12, Building 123\". An address can include information such as the street, building, location, city, state, country, county, zip code, precinct, and neighborhood. </p> </li> <li> <p> <b>AGE</b> </p> <p>An individual's age, including the quantity and unit of time. For example, in the phrase \"I am 40 years old,\" Guarrails recognizes \"40 years\" as an age. </p> </li> <li> <p> <b>NAME</b> </p> <p>An individual's name. This entity type does not include titles, such as Dr., Mr., Mrs., or Miss. AI Guardrail doesn't apply this entity type to names that are part of organizations or addresses. For example, AI Guardrail recognizes the \"John Doe Organization\" as an organization, and it recognizes \"Jane Doe Street\" as an address. </p> </li> <li> <p> <b>EMAIL</b> </p> <p>An email address, such as <i>marymajor@email.com</i>.</p> </li> <li> <p> <b>PHONE</b> </p> <p>A phone number. This entity type also includes fax and pager numbers. </p> </li> <li> <p> <b>USERNAME</b> </p> <p>A user name that identifies an account, such as a login name, screen name, nick name, or handle. </p> </li> <li> <p> <b>PASSWORD</b> </p> <p>An alphanumeric string that is used as a password, such as \"*<i> very20special#pass*</i>\". </p> </li> <li> <p> <b>DRIVER_ID</b> </p> <p>The number assigned to a driver's license, which is an official document permitting an individual to operate one or more motorized vehicles on a public road. A driver's license number consists of alphanumeric characters. </p> </li> <li> <p> <b>LICENSE_PLATE</b> </p> <p>A license plate for a vehicle is issued by the state or country where the vehicle is registered. The format for passenger vehicles is typically five to eight digits, consisting of upper-case letters and numbers. The format varies depending on the location of the issuing state or country. </p> </li> <li> <p> <b>VEHICLE_IDENTIFICATION_NUMBER</b> </p> <p>A Vehicle Identification Number (VIN) uniquely identifies a vehicle. VIN content and format are defined in the <i>ISO 3779</i> specification. Each country has specific codes and formats for VINs. </p> </li> </ul> </li> <li> <p> <b>Finance</b> </p> <ul> <li> <p> <b>CREDIT_DEBIT_CARD_CVV</b> </p> <p>A three-digit card verification code (CVV) that is present on VISA, MasterCard, and Discover credit and debit cards. For American Express credit or debit cards, the CVV is a four-digit numeric code. </p> </li> <li> <p> <b>CREDIT_DEBIT_CARD_EXPIRY</b> </p> <p>The expiration date for a credit or debit card. This number is usually four digits long and is often formatted as <i>month/year</i> or <i>MM/YY</i>. AI Guardrail recognizes expiration dates such as <i>01/21</i>, <i>01/2021</i>, and <i>Jan 2021</i>. </p> </li> <li> <p> <b>CREDIT_DEBIT_CARD_NUMBER</b> </p> <p>The number for a credit or debit card. These numbers can vary from 13 to 16 digits in length. However, Amazon Comprehend also recognizes credit or debit card numbers when only the last four digits are present. </p> </li> <li> <p> <b>PIN</b> </p> <p>A four-digit personal identification number (PIN) with which you can access your bank account. </p> </li> <li> <p> <b>INTERNATIONAL_BANK_ACCOUNT_NUMBER</b> </p> <p>An International Bank Account Number has specific formats in each country. For more information, see <a href=\"https://www.iban.com/structure\"> www.iban.com/structure</a>.</p> </li> <li> <p> <b>SWIFT_CODE</b> </p> <p>A SWIFT code is a standard format of Bank Identifier Code (BIC) used to specify a particular bank or branch. Banks use these codes for money transfers such as international wire transfers.</p> <p>SWIFT codes consist of eight or 11 characters. The 11-digit codes refer to specific branches, while eight-digit codes (or 11-digit codes ending in 'XXX') refer to the head or primary office.</p> </li> </ul> </li> <li> <p> <b>IT</b> </p> <ul> <li> <p> <b>IP_ADDRESS</b> </p> <p>An IPv4 address, such as <i>198.51.100.0</i>. </p> </li> <li> <p> <b>MAC_ADDRESS</b> </p> <p>A <i>media access control</i> (MAC) address is a unique identifier assigned to a network interface controller (NIC). </p> </li> <li> <p> <b>URL</b> </p> <p>A web address, such as <i>www.example.com</i>. </p> </li> <li> <p> <b>AWS_ACCESS_KEY</b> </p> <p>A unique identifier that's associated with a secret access key; you use the access key ID and secret access key to sign programmatic Amazon Web Services requests cryptographically. </p> </li> <li> <p> <b>AWS_SECRET_KEY</b> </p> <p>A unique identifier that's associated with an access key. You use the access key ID and secret access key to sign programmatic Amazon Web Services requests cryptographically. </p> </li> </ul> </li> <li> <p> <b>USA specific</b> </p> <ul> <li> <p> <b>US_BANK_ACCOUNT_NUMBER</b> </p> <p>A US bank account number, which is typically 10 to 12 digits long. </p> </li> <li> <p> <b>US_BANK_ROUTING_NUMBER</b> </p> <p>A US bank account routing number. These are typically nine digits long, </p> </li> <li> <p> <b>US_INDIVIDUAL_TAX_IDENTIFICATION_NUMBER</b> </p> <p>A US Individual Taxpayer Identification Number (ITIN) is a nine-digit number that starts with a \"9\" and contain a \"7\" or \"8\" as the fourth digit. An ITIN can be formatted with a space or a dash after the third and forth digits. </p> </li> <li> <p> <b>US_PASSPORT_NUMBER</b> </p> <p>A US passport number. Passport numbers range from six to nine alphanumeric characters. </p> </li> <li> <p> <b>US_SOCIAL_SECURITY_NUMBER</b> </p> <p>A US Social Security Number (SSN) is a nine-digit number that is issued to US citizens, permanent residents, and temporary working residents. </p> </li> </ul> </li> <li> <p> <b>Canada specific</b> </p> <ul> <li> <p> <b>CA_HEALTH_NUMBER</b> </p> <p>A Canadian Health Service Number is a 10-digit unique identifier, required for individuals to access healthcare benefits. </p> </li> <li> <p> <b>CA_SOCIAL_INSURANCE_NUMBER</b> </p> <p>A Canadian Social Insurance Number (SIN) is a nine-digit unique identifier, required for individuals to access government programs and benefits.</p> <p>The SIN is formatted as three groups of three digits, such as <i> 123-456-789</i>. A SIN can be validated through a simple check-digit process called the <a href=\"https://www.wikipedia.org/wiki/Luhn_algorithm\">Luhn algorithm</a> .</p> </li> </ul> </li> <li> <p> <b>UK Specific</b> </p> <ul> <li> <p> <b>UK_NATIONAL_HEALTH_SERVICE_NUMBER</b> </p> <p>A UK National Health Service Number is a 10-17 digit number, such as <i>485 555 3456</i>. The current system formats the 10-digit number with spaces after the third and sixth digits. The final digit is an error-detecting checksum.</p> </li> <li> <p> <b>UK_NATIONAL_INSURANCE_NUMBER</b> </p> <p>A UK National Insurance Number (NINO) provides individuals with access to National Insurance (social security) benefits. It is also used for some purposes in the UK tax system.</p> <p>The number is nine digits long and starts with two letters, followed by six numbers and one letter. A NINO can be formatted with a space or a dash after the two letters and after the second, forth, and sixth digits.</p> </li> <li> <p> <b>UK_UNIQUE_TAXPAYER_REFERENCE_NUMBER</b> </p> <p>A UK Unique Taxpayer Reference (UTR) is a 10-digit number that identifies a taxpayer or a business. </p> </li> </ul> </li> <li> <p> <b>Custom</b> </p> <ul> <li> <p> <b>Regex filter</b> - You can use a regular expressions to define patterns for an AI Guardrail to recognize and act upon such as serial number, booking ID etc..</p> </li> </ul> </li> </ul>"
+        },
+        "action":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>Configure AI Guardrail's action when the PII entity is detected.</p>"
         }
       },
       "documentation":"<p>The PII entity to configure for the AI Guardrail.</p>"
@@ -5902,26 +6128,26 @@
     "GuardrailRegexConfig":{
       "type":"structure",
       "required":[
-        "action",
         "name",
-        "pattern"
+        "pattern",
+        "action"
       ],
       "members":{
-        "action":{
-          "shape":"GuardrailSensitiveInformationAction",
-          "documentation":"<p>The AI Guardrail action to configure when matching regular expression is detected.</p>"
+        "name":{
+          "shape":"GuardrailRegexName",
+          "documentation":"<p>The name of the regular expression to configure for the AI Guardrail.</p>"
         },
         "description":{
           "shape":"GuardrailRegexDescription",
           "documentation":"<p>The description of the regular expression to configure for the AI Guardrail.</p>"
         },
-        "name":{
-          "shape":"GuardrailRegexName",
-          "documentation":"<p>The name of the regular expression to configure for the AI Guardrail.</p>"
-        },
         "pattern":{
           "shape":"GuardrailRegexPattern",
           "documentation":"<p>The regular expression pattern to configure for the AI Guardrail.</p>"
+        },
+        "action":{
+          "shape":"GuardrailSensitiveInformationAction",
+          "documentation":"<p>The AI Guardrail action to configure when matching regular expression is detected.</p>"
         }
       },
       "documentation":"<p>The regular expression to configure for the AI Guardrail.</p>"
@@ -5964,11 +6190,15 @@
     "GuardrailTopicConfig":{
       "type":"structure",
       "required":[
-        "definition",
         "name",
+        "definition",
         "type"
       ],
       "members":{
+        "name":{
+          "shape":"GuardrailTopicName",
+          "documentation":"<p>The name of the topic to deny.</p>"
+        },
         "definition":{
           "shape":"GuardrailTopicDefinition",
           "documentation":"<p>A definition of the topic to deny.</p>"
@@ -5977,10 +6207,6 @@
           "shape":"GuardrailTopicExamples",
           "documentation":"<p>A list of prompts, each of which is an example of a prompt that can be categorized as belonging to the topic.</p>"
         },
-        "name":{
-          "shape":"GuardrailTopicName",
-          "documentation":"<p>The name of the topic to deny.</p>"
-        },
         "type":{
           "shape":"GuardrailTopicType",
           "documentation":"<p>Specifies to deny the topic.</p>"
@@ -6013,7 +6239,7 @@
       "documentation":"<p>Name of topic in topic policy</p>",
       "max":100,
       "min":1,
-      "pattern":"^[0-9a-zA-Z-_ !?.]+$",
+      "pattern":"[0-9a-zA-Z-_ !?.]+",
       "sensitive":true
     },
     "GuardrailTopicType":{
@@ -6124,67 +6350,67 @@
     "ImportJobData":{
       "type":"structure",
       "required":[
-        "createdTime",
         "importJobId",
-        "importJobType",
-        "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedTime",
-        "status",
         "uploadId",
+        "knowledgeBaseArn",
+        "importJobType",
+        "status",
         "url",
-        "urlExpiry"
+        "urlExpiry",
+        "createdTime",
+        "lastModifiedTime"
       ],
       "members":{
-        "createdTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the import job was created.</p>"
-        },
-        "externalSourceConfiguration":{"shape":"ExternalSourceConfiguration"},
-        "failedRecordReport":{
-          "shape":"Url",
-          "documentation":"<p>The link to download the information of resource data that failed to be imported.</p>"
-        },
         "importJobId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the import job.</p>"
         },
-        "importJobType":{
-          "shape":"ImportJobType",
-          "documentation":"<p>The type of the import job.</p>"
-        },
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the import job data was last modified.</p>"
+        "uploadId":{
+          "shape":"UploadId",
+          "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
         },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>The metadata fields of the imported Amazon Q in Connect resources.</p>"
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "importJobType":{
+          "shape":"ImportJobType",
+          "documentation":"<p>The type of the import job.</p>"
         },
         "status":{
           "shape":"ImportJobStatus",
           "documentation":"<p>The status of the import job.</p>"
         },
-        "uploadId":{
-          "shape":"UploadId",
-          "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
-        },
         "url":{
           "shape":"Url",
           "documentation":"<p>The download link to the resource file that is uploaded to the import job.</p>"
         },
+        "failedRecordReport":{
+          "shape":"Url",
+          "documentation":"<p>The link to download the information of resource data that failed to be imported.</p>"
+        },
         "urlExpiry":{
           "shape":"SyntheticTimestamp_epoch_seconds",
           "documentation":"<p>The expiration time of the URL as an epoch timestamp.</p>"
-        }
+        },
+        "createdTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the import job was created.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the import job data was last modified.</p>"
+        },
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>The metadata fields of the imported Amazon Q in Connect resources.</p>"
+        },
+        "externalSourceConfiguration":{"shape":"ExternalSourceConfiguration"}
       },
       "documentation":"<p>Summary information about the import job.</p>"
     },
@@ -6206,39 +6432,43 @@
     "ImportJobSummary":{
       "type":"structure",
       "required":[
-        "createdTime",
         "importJobId",
-        "importJobType",
-        "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedTime",
+        "uploadId",
+        "knowledgeBaseArn",
+        "importJobType",
         "status",
-        "uploadId"
+        "createdTime",
+        "lastModifiedTime"
       ],
       "members":{
-        "createdTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the import job was created.</p>"
-        },
-        "externalSourceConfiguration":{
-          "shape":"ExternalSourceConfiguration",
-          "documentation":"<p>The configuration information of the external source that the resource data are imported from.</p>"
-        },
         "importJobId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the import job.</p>"
         },
-        "importJobType":{
-          "shape":"ImportJobType",
-          "documentation":"<p>The type of import job.</p>"
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
+        },
+        "uploadId":{
+          "shape":"UploadId",
+          "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
+        "importJobType":{
+          "shape":"ImportJobType",
+          "documentation":"<p>The type of import job.</p>"
+        },
+        "status":{
+          "shape":"ImportJobStatus",
+          "documentation":"<p>The status of the import job.</p>"
+        },
+        "createdTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the import job was created.</p>"
         },
         "lastModifiedTime":{
           "shape":"SyntheticTimestamp_epoch_seconds",
@@ -6248,13 +6478,9 @@
           "shape":"ContentMetadata",
           "documentation":"<p>The metadata fields of the imported Amazon Q in Connect resources.</p>"
         },
-        "status":{
-          "shape":"ImportJobStatus",
-          "documentation":"<p>The status of the import job.</p>"
-        },
-        "uploadId":{
-          "shape":"UploadId",
-          "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
+        "externalSourceConfiguration":{
+          "shape":"ExternalSourceConfiguration",
+          "documentation":"<p>The configuration information of the external source that the resource data are imported from.</p>"
         }
       },
       "documentation":"<p>Summary information about the import job.</p>"
@@ -6314,13 +6540,13 @@
     "KnowledgeBaseAssociationData":{
       "type":"structure",
       "members":{
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
+        },
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
         }
       },
       "documentation":"<p>Association information about the knowledge base.</p>"
@@ -6328,44 +6554,44 @@
     "KnowledgeBaseData":{
       "type":"structure",
       "required":[
-        "knowledgeBaseArn",
         "knowledgeBaseId",
-        "knowledgeBaseType",
+        "knowledgeBaseArn",
         "name",
+        "knowledgeBaseType",
         "status"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description.</p>"
-        },
-        "ingestionFailureReasons":{
-          "shape":"FailureReason",
-          "documentation":"<p>List of failure reasons on ingestion per file.</p>"
-        },
-        "ingestionStatus":{
-          "shape":"SyncStatus",
-          "documentation":"<p>Status of ingestion on data source.</p>"
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the knowledge base.</p>"
         },
         "knowledgeBaseType":{
           "shape":"KnowledgeBaseType",
           "documentation":"<p>The type of knowledge base.</p>"
         },
+        "status":{
+          "shape":"KnowledgeBaseStatus",
+          "documentation":"<p>The status of the knowledge base.</p>"
+        },
         "lastContentModificationTime":{
           "shape":"SyntheticTimestamp_epoch_seconds",
           "documentation":"<p>An epoch timestamp indicating the most recent content modification inside the knowledge base. If no content exists in a knowledge base, this value is unset.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the knowledge base.</p>"
+        "vectorIngestionConfiguration":{
+          "shape":"VectorIngestionConfiguration",
+          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
+        },
+        "sourceConfiguration":{
+          "shape":"SourceConfiguration",
+          "documentation":"<p>Source configuration information about the knowledge base.</p>"
         },
         "renderingConfiguration":{
           "shape":"RenderingConfiguration",
@@ -6375,21 +6601,21 @@
           "shape":"ServerSideEncryptionConfiguration",
           "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
         },
-        "sourceConfiguration":{
-          "shape":"SourceConfiguration",
-          "documentation":"<p>Source configuration information about the knowledge base.</p>"
-        },
-        "status":{
-          "shape":"KnowledgeBaseStatus",
-          "documentation":"<p>The status of the knowledge base.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description.</p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
         },
-        "vectorIngestionConfiguration":{
-          "shape":"VectorIngestionConfiguration",
-          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
+        "ingestionStatus":{
+          "shape":"SyncStatus",
+          "documentation":"<p>Status of ingestion on data source.</p>"
+        },
+        "ingestionFailureReasons":{
+          "shape":"FailureReason",
+          "documentation":"<p>List of failure reasons on ingestion per file.</p>"
         }
       },
       "documentation":"<p>Information about the knowledge base.</p>"
@@ -6419,32 +6645,40 @@
     "KnowledgeBaseSummary":{
       "type":"structure",
       "required":[
-        "knowledgeBaseArn",
         "knowledgeBaseId",
-        "knowledgeBaseType",
+        "knowledgeBaseArn",
         "name",
+        "knowledgeBaseType",
         "status"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the knowledge base.</p>"
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
         },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the knowledge base.</p>"
         },
         "knowledgeBaseType":{
           "shape":"KnowledgeBaseType",
           "documentation":"<p>The type of knowledge base.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the knowledge base.</p>"
+        "status":{
+          "shape":"KnowledgeBaseStatus",
+          "documentation":"<p>The status of the knowledge base summary.</p>"
+        },
+        "sourceConfiguration":{
+          "shape":"SourceConfiguration",
+          "documentation":"<p>Configuration information about the external data source.</p>"
+        },
+        "vectorIngestionConfiguration":{
+          "shape":"VectorIngestionConfiguration",
+          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
         },
         "renderingConfiguration":{
           "shape":"RenderingConfiguration",
@@ -6454,21 +6688,13 @@
           "shape":"ServerSideEncryptionConfiguration",
           "documentation":"<p>The configuration information for the customer managed key used for encryption. </p> <p>This KMS key must have a policy that allows <code>kms:CreateGrant</code>, <code>kms:DescribeKey</code>, <code>kms:Decrypt</code>, and <code>kms:GenerateDataKey*</code> permissions to the IAM identity using the key to invoke Amazon Q in Connect. </p> <p>For more information about setting up a customer managed key for Amazon Q in Connect, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/enable-q.html\">Enable Amazon Q in Connect for your instance</a>.</p>"
         },
-        "sourceConfiguration":{
-          "shape":"SourceConfiguration",
-          "documentation":"<p>Configuration information about the external data source.</p>"
-        },
-        "status":{
-          "shape":"KnowledgeBaseStatus",
-          "documentation":"<p>The status of the knowledge base summary.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the knowledge base.</p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "vectorIngestionConfiguration":{
-          "shape":"VectorIngestionConfiguration",
-          "documentation":"<p>Contains details about how to ingest the documents in a data source.</p>"
         }
       },
       "documentation":"<p>Summary information about the knowledge base.</p>"
@@ -6491,27 +6717,21 @@
     "ListAIAgentVersionsRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
-        "assistantId"
+        "assistantId",
+        "aiAgentId"
       ],
       "members":{
-        "aiAgentId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent for which versions are to be listed.</p>",
-          "location":"uri",
-          "locationName":"aiAgentId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "aiAgentId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent for which versions are to be listed.</p>",
+          "location":"uri",
+          "locationName":"aiAgentId"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -6519,6 +6739,12 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Agent versions to be listed. <code>SYSTEM</code> for a default AI Agent created by Q in Connect or <code>CUSTOMER</code> for an AI Agent created by calling AI Agent creation APIs. </p>",
@@ -6551,18 +6777,18 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Agents to be listed. <code>SYSTEM</code> for a default AI Agent created by Q in Connect or <code>CUSTOMER</code> for an AI Agent created by calling AI Agent creation APIs. </p>",
@@ -6588,33 +6814,33 @@
     "ListAIGuardrailVersionsRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
-        "assistantId"
+        "assistantId",
+        "aiGuardrailId"
       ],
       "members":{
-        "aiGuardrailId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail for which versions are to be listed.</p>",
-          "location":"uri",
-          "locationName":"aiGuardrailId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "aiGuardrailId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail for which versions are to be listed.</p>",
+          "location":"uri",
+          "locationName":"aiGuardrailId"
         },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -6642,17 +6868,17 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -6673,27 +6899,21 @@
     "ListAIPromptVersionsRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
-        "assistantId"
+        "assistantId",
+        "aiPromptId"
       ],
       "members":{
-        "aiPromptId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt for which versions are to be listed.</p>",
-          "location":"uri",
-          "locationName":"aiPromptId"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "aiPromptId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI prompt for which versions are to be listed.</p>",
+          "location":"uri",
+          "locationName":"aiPromptId"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -6701,6 +6921,12 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Prompt versions to be listed. <code>SYSTEM</code> for a default AI Agent created by Q in Connect or <code>CUSTOMER</code> for an AI Agent created by calling AI Agent creation APIs. </p>",
@@ -6733,18 +6959,18 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "origin":{
           "shape":"Origin",
           "documentation":"<p>The origin of the AI Prompts to be listed. <code>SYSTEM</code> for a default AI Agent created by Q in Connect or <code>CUSTOMER</code> for an AI Agent created by calling AI Agent creation APIs. </p>",
@@ -6771,11 +6997,11 @@
       "type":"structure",
       "required":["assistantId"],
       "members":{
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -6783,11 +7009,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
         }
       }
     },
@@ -6808,17 +7034,17 @@
     "ListAssistantsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -6839,21 +7065,15 @@
     "ListContentAssociationsRequest":{
       "type":"structure",
       "required":[
-        "contentId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "contentId"
       ],
       "members":{
-        "contentId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the content.</p>",
-          "location":"uri",
-          "locationName":"contentId"
-        },
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -6861,11 +7081,17 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
+        "contentId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the content.</p>",
+          "location":"uri",
+          "locationName":"contentId"
         }
       }
     },
@@ -6887,11 +7113,11 @@
       "type":"structure",
       "required":["knowledgeBaseId"],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -6899,11 +7125,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -6925,11 +7151,11 @@
       "type":"structure",
       "required":["knowledgeBaseId"],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -6937,11 +7163,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -6962,17 +7188,17 @@
     "ListKnowledgeBasesRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"NonEmptyString",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -7003,12 +7229,6 @@
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "messageTemplateId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN. It cannot contain any qualifier.</p>",
@@ -7020,6 +7240,12 @@
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -7041,11 +7267,11 @@
       "type":"structure",
       "required":["knowledgeBaseId"],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -7053,11 +7279,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -7088,11 +7314,11 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "sessionId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect session.</p>",
+          "location":"uri",
+          "locationName":"sessionId"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -7100,11 +7326,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "sessionId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect session.</p>",
-          "location":"uri",
-          "locationName":"sessionId"
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -7126,11 +7352,11 @@
       "type":"structure",
       "required":["knowledgeBaseId"],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -7138,11 +7364,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         }
       }
     },
@@ -7150,13 +7376,13 @@
       "type":"structure",
       "required":["quickResponseSummaries"],
       "members":{
-        "nextToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
-        },
         "quickResponseSummaries":{
           "shape":"QuickResponseSummaryList",
           "documentation":"<p>Summary information about the quick responses.</p>"
+        },
+        "nextToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
         }
       }
     },
@@ -7200,21 +7426,21 @@
     "ManualSearchAIAgentConfiguration":{
       "type":"structure",
       "members":{
-        "answerGenerationAIGuardrailId":{
-          "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Guardrail identifier for the Answer Generation guardrail used by the MANUAL_SEARCH AI Agent.</p>"
-        },
         "answerGenerationAIPromptId":{
           "shape":"UuidWithQualifier",
           "documentation":"<p>The AI Prompt identifier for the Answer Generation prompt used by the MANUAL_SEARCH AI Agent.</p>"
         },
+        "answerGenerationAIGuardrailId":{
+          "shape":"UuidWithQualifier",
+          "documentation":"<p>The AI Guardrail identifier for the Answer Generation guardrail used by the MANUAL_SEARCH AI Agent.</p>"
+        },
         "associationConfigurations":{
           "shape":"AssociationConfigurationList",
           "documentation":"<p>The association configurations for overriding behavior on this AI Agent.</p>"
         },
         "locale":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The locale to which specifies the language and region settings that determine the response language for <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_QueryAssistant.html\">QueryAssistant</a>.</p>"
+          "documentation":"<p>The locale to which specifies the language and region settings that determine the response language for <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_QueryAssistant.html\">QueryAssistant</a>.</p> <note> <p>For more information on supported locales, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/supported-languages.html#qic-notes-languages\">Language support for Amazon Q in Connect</a>.</p> </note>"
         }
       },
       "documentation":"<p>The configuration for the <code>MANUAL_SEARCH</code> AI Agent type.</p>"
@@ -7225,6 +7451,16 @@
       "max":100,
       "min":1
     },
+    "MessageConfiguration":{
+      "type":"structure",
+      "members":{
+        "generateFillerMessage":{
+          "shape":"Boolean",
+          "documentation":"<p>Generates a filler response when tool selection is <code>QUESTION</code>.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_SendMessage.html\">SendMessage</a> request.</p>"
+    },
     "MessageData":{
       "type":"structure",
       "members":{
@@ -7254,12 +7490,16 @@
     "MessageOutput":{
       "type":"structure",
       "required":[
+        "value",
         "messageId",
         "participant",
-        "timestamp",
-        "value"
+        "timestamp"
       ],
       "members":{
+        "value":{
+          "shape":"MessageData",
+          "documentation":"<p>The value of a message data.</p>"
+        },
         "messageId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of a message.</p>"
@@ -7271,10 +7511,6 @@
         "timestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of a message.</p>"
-        },
-        "value":{
-          "shape":"MessageData",
-          "documentation":"<p>The value of a message data.</p>"
         }
       },
       "documentation":"<p>The message output.</p>"
@@ -7282,18 +7518,14 @@
     "MessageTemplateAttachment":{
       "type":"structure",
       "required":[
-        "attachmentId",
         "contentDisposition",
         "name",
         "uploadedTime",
         "url",
-        "urlExpiry"
+        "urlExpiry",
+        "attachmentId"
       ],
       "members":{
-        "attachmentId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the attachment file.</p>"
-        },
         "contentDisposition":{
           "shape":"ContentDisposition",
           "documentation":"<p>The presentation information for the attachment file.</p>"
@@ -7313,6 +7545,10 @@
         "urlExpiry":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The expiration time of the pre-signed Amazon S3 URL.</p>"
+        },
+        "attachmentId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the attachment file.</p>"
         }
       },
       "documentation":"<p>Information about the message template attachment.</p>"
@@ -7353,21 +7589,21 @@
     "MessageTemplateAttributes":{
       "type":"structure",
       "members":{
+        "systemAttributes":{
+          "shape":"SystemAttributes",
+          "documentation":"<p>The system attributes that are used with the message template.</p>"
+        },
         "agentAttributes":{
           "shape":"AgentAttributes",
           "documentation":"<p>The agent attributes that are used with the message template.</p>"
         },
-        "customAttributes":{
-          "shape":"CustomAttributes",
-          "documentation":"<p>The custom attributes that are used with the message template.</p>"
-        },
         "customerProfileAttributes":{
           "shape":"CustomerProfileAttributes",
           "documentation":"<p>The customer profile attributes that are used with the message template.</p>"
         },
-        "systemAttributes":{
-          "shape":"SystemAttributes",
-          "documentation":"<p>The system attributes that are used with the message template.</p>"
+        "customAttributes":{
+          "shape":"CustomAttributes",
+          "documentation":"<p>The custom attributes that are used with the message template.</p>"
         }
       },
       "documentation":"<p>The attributes that are used with the message template.</p>"
@@ -7402,85 +7638,85 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]+$"
+      "pattern":"[a-zA-Z0-9]+"
     },
     "MessageTemplateData":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "content",
-        "createdTime",
+        "messageTemplateArn",
+        "messageTemplateId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedBy",
+        "name",
+        "channelSubtype",
+        "createdTime",
         "lastModifiedTime",
-        "messageTemplateArn",
-        "messageTemplateContentSha256",
-        "messageTemplateId",
-        "name"
+        "lastModifiedBy",
+        "content",
+        "messageTemplateContentSha256"
       ],
       "members":{
-        "attributeTypes":{
-          "shape":"MessageTemplateAttributeTypeList",
-          "documentation":"<p>The types of attributes that the message template contains.</p>"
+        "messageTemplateArn":{
+          "shape":"ArnWithQualifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
+        },
+        "messageTemplateId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the message template.</p>"
+        },
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the message template.</p>"
         },
         "channelSubtype":{
           "shape":"ChannelSubtype",
           "documentation":"<p>The channel subtype this message template applies to.</p>"
         },
-        "content":{
-          "shape":"MessageTemplateContentProvider",
-          "documentation":"<p>The content of the message template.</p>"
-        },
         "createdTime":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp when the message template was created.</p>"
         },
-        "defaultAttributes":{
-          "shape":"MessageTemplateAttributes",
-          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the message template data was last modified.</p>"
+        },
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
+        },
+        "content":{
+          "shape":"MessageTemplateContentProvider",
+          "documentation":"<p>The content of the message template.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the message template.</p>"
         },
-        "groupingConfiguration":{"shape":"GroupingConfiguration"},
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base.</p>"
-        },
         "language":{
           "shape":"LanguageCode",
           "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
-        },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp when the message template data was last modified.</p>"
+        "groupingConfiguration":{"shape":"GroupingConfiguration"},
+        "defaultAttributes":{
+          "shape":"MessageTemplateAttributes",
+          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
         },
-        "messageTemplateArn":{
-          "shape":"ArnWithQualifier",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
+        "attributeTypes":{
+          "shape":"MessageTemplateAttributeTypeList",
+          "documentation":"<p>The types of attributes that the message template contains.</p>"
         },
         "messageTemplateContentSha256":{
           "shape":"MessageTemplateContentSha256",
           "documentation":"<p>The checksum value of the message template content that is referenced by the <code>$LATEST</code> qualifier. It can be returned in <code>MessageTemplateData</code> or <code>ExtendedMessageTemplateData</code>. It’s calculated by content, language, <code>defaultAttributes</code> and <code>Attachments</code> of the message template.</p>"
         },
-        "messageTemplateId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the message template.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the message template.</p>"
-        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -7495,21 +7731,21 @@
         "operator"
       ],
       "members":{
-        "includeNoExistence":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to treat null value as a match for the attribute field.</p>"
-        },
         "name":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the attribute field to filter the message templates by.</p>"
         },
+        "values":{
+          "shape":"MessageTemplateFilterValueList",
+          "documentation":"<p>The values of attribute field to filter the message template by.</p>"
+        },
         "operator":{
           "shape":"MessageTemplateFilterOperator",
           "documentation":"<p>The operator to use for filtering.</p>"
         },
-        "values":{
-          "shape":"MessageTemplateFilterValueList",
-          "documentation":"<p>The values of attribute field to filter the message template by.</p>"
+        "includeNoExistence":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to treat null value as a match for the attribute field.</p>"
         }
       },
       "documentation":"<p>The message template fields to filter the message template query results by. The following is the list of supported field names:</p> <ul> <li> <p>name</p> </li> <li> <p>description</p> </li> <li> <p>channel</p> </li> <li> <p>channelSubtype</p> </li> <li> <p>language</p> </li> <li> <p>qualifier</p> </li> <li> <p>createdTime</p> </li> <li> <p>lastModifiedTime</p> </li> <li> <p>lastModifiedBy</p> </li> <li> <p>groupingConfiguration.criteria</p> </li> <li> <p>groupingConfiguration.values</p> </li> </ul>"
@@ -7557,29 +7793,29 @@
       "type":"structure",
       "required":[
         "name",
-        "operator",
-        "values"
+        "values",
+        "operator"
       ],
       "members":{
-        "allowFuzziness":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the query expects only exact matches on the attribute field values. The results of the query will only include exact matches if this parameter is set to false.</p>"
-        },
         "name":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the attribute to query the message templates by.</p>"
         },
+        "values":{
+          "shape":"MessageTemplateQueryValueList",
+          "documentation":"<p>The values of the attribute to query the message templates by.</p>"
+        },
         "operator":{
           "shape":"MessageTemplateQueryOperator",
           "documentation":"<p>The operator to use for matching attribute field values in the query.</p>"
         },
+        "allowFuzziness":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the query expects only exact matches on the attribute field values. The results of the query will only include exact matches if this parameter is set to false.</p>"
+        },
         "priority":{
           "shape":"Priority",
           "documentation":"<p>The importance of the attribute field when calculating query result relevancy scores. The value set for this parameter affects the ordering of search results.</p>"
-        },
-        "values":{
-          "shape":"MessageTemplateQueryValueList",
-          "documentation":"<p>The values of the attribute to query the message templates by.</p>"
         }
       },
       "documentation":"<p>The message template fields to query message templates by. The following is the list of supported field names:</p> <ul> <li> <p>name</p> </li> <li> <p>description</p> </li> </ul>"
@@ -7611,6 +7847,10 @@
     "MessageTemplateSearchExpression":{
       "type":"structure",
       "members":{
+        "queries":{
+          "shape":"MessageTemplateQueryFieldList",
+          "documentation":"<p>The message template query expressions.</p>"
+        },
         "filters":{
           "shape":"MessageTemplateFilterFieldList",
           "documentation":"<p>The configuration of filtering rules applied to message template query results.</p>"
@@ -7618,10 +7858,6 @@
         "orderOnField":{
           "shape":"MessageTemplateOrderField",
           "documentation":"<p>The message template attribute fields on which the query results are ordered.</p>"
-        },
-        "queries":{
-          "shape":"MessageTemplateQueryFieldList",
-          "documentation":"<p>The message template query expressions.</p>"
         }
       },
       "documentation":"<p>The search expression of the message template.</p>"
@@ -7629,33 +7865,24 @@
     "MessageTemplateSearchResultData":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "createdTime",
+        "messageTemplateArn",
+        "messageTemplateId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedBy",
+        "name",
+        "channelSubtype",
+        "createdTime",
         "lastModifiedTime",
-        "messageTemplateArn",
-        "messageTemplateId",
-        "name"
+        "lastModifiedBy"
       ],
       "members":{
-        "channelSubtype":{
-          "shape":"ChannelSubtype",
-          "documentation":"<p>The channel subtype this message template applies to.</p>"
-        },
-        "createdTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp when the message template was created.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the message template.</p>"
+        "messageTemplateArn":{
+          "shape":"ArnWithQualifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
         },
-        "groupingConfiguration":{"shape":"GroupingConfiguration"},
-        "isActive":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the version of the message template is activated.</p>"
+        "messageTemplateId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the message template.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
@@ -7665,37 +7892,46 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "language":{
-          "shape":"LanguageCode",
-          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the message template.</p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
+        "channelSubtype":{
+          "shape":"ChannelSubtype",
+          "documentation":"<p>The channel subtype this message template applies to.</p>"
+        },
+        "createdTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the message template was created.</p>"
         },
         "lastModifiedTime":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp when the message template data was last modified.</p>"
         },
-        "messageTemplateArn":{
-          "shape":"ArnWithQualifier",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
         },
-        "messageTemplateId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the message template.</p>"
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the version of the message template is activated.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the message template.</p>"
+        "versionNumber":{
+          "shape":"Version",
+          "documentation":"<p>The version number of the message template version.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the message template.</p>"
+        },
+        "groupingConfiguration":{"shape":"GroupingConfiguration"},
+        "language":{
+          "shape":"LanguageCode",
+          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
-        },
-        "versionNumber":{
-          "shape":"Version",
-          "documentation":"<p>The version number of the message template version.</p>"
         }
       },
       "documentation":"<p>The result of message template search.</p>"
@@ -7707,32 +7943,24 @@
     "MessageTemplateSummary":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "createdTime",
+        "messageTemplateArn",
+        "messageTemplateId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedBy",
+        "name",
+        "channelSubtype",
+        "createdTime",
         "lastModifiedTime",
-        "messageTemplateArn",
-        "messageTemplateId",
-        "name"
+        "lastModifiedBy"
       ],
       "members":{
-        "activeVersionNumber":{
-          "shape":"Version",
-          "documentation":"<p>The version number of the message template version that is activated.</p>"
-        },
-        "channelSubtype":{
-          "shape":"ChannelSubtype",
-          "documentation":"<p>The channel subtype this message template applies to.</p>"
-        },
-        "createdTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The timestamp when the message template was created.</p>"
+        "messageTemplateArn":{
+          "shape":"ArnWithQualifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the message template.</p>"
+        "messageTemplateId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the message template.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
@@ -7742,25 +7970,33 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the message template.</p>"
+        },
+        "channelSubtype":{
+          "shape":"ChannelSubtype",
+          "documentation":"<p>The channel subtype this message template applies to.</p>"
+        },
+        "createdTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The timestamp when the message template was created.</p>"
         },
         "lastModifiedTime":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The timestamp when the message template data was last modified.</p>"
         },
-        "messageTemplateArn":{
-          "shape":"ArnWithQualifier",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the message template data.</p>"
         },
-        "messageTemplateId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the message template.</p>"
+        "activeVersionNumber":{
+          "shape":"Version",
+          "documentation":"<p>The version number of the message template version that is activated.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the message template.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the message template.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -7776,23 +8012,23 @@
     "MessageTemplateVersionSummary":{
       "type":"structure",
       "required":[
-        "channelSubtype",
-        "isActive",
-        "knowledgeBaseArn",
-        "knowledgeBaseId",
         "messageTemplateArn",
         "messageTemplateId",
+        "knowledgeBaseArn",
+        "knowledgeBaseId",
         "name",
+        "channelSubtype",
+        "isActive",
         "versionNumber"
       ],
       "members":{
-        "channelSubtype":{
-          "shape":"ChannelSubtype",
-          "documentation":"<p>The channel subtype this message template applies to.</p>"
+        "messageTemplateArn":{
+          "shape":"ArnWithQualifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
         },
-        "isActive":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the version of the message template is activated.</p>"
+        "messageTemplateId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the message template.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
@@ -7802,18 +8038,18 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "messageTemplateArn":{
-          "shape":"ArnWithQualifier",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the message template.</p>"
-        },
-        "messageTemplateId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the message template.</p>"
-        },
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the message template.</p>"
         },
+        "channelSubtype":{
+          "shape":"ChannelSubtype",
+          "documentation":"<p>The channel subtype this message template applies to.</p>"
+        },
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the version of the message template is activated.</p>"
+        },
         "versionNumber":{
           "shape":"Version",
           "documentation":"<p>The version number of the message template version.</p>"
@@ -7833,7 +8069,7 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^[a-zA-Z0-9\\s_.,-]+"
+      "pattern":"[a-zA-Z0-9\\s_.,-]+.*"
     },
     "NextToken":{
       "type":"string",
@@ -7859,13 +8095,13 @@
     "NotifyRecommendationsReceivedError":{
       "type":"structure",
       "members":{
-        "message":{
-          "shape":"NotifyRecommendationsReceivedErrorMessage",
-          "documentation":"<p>A recommendation is causing an error.</p>"
-        },
         "recommendationId":{
           "shape":"RecommendationId",
           "documentation":"<p>The identifier of the recommendation that is in error.</p>"
+        },
+        "message":{
+          "shape":"NotifyRecommendationsReceivedErrorMessage",
+          "documentation":"<p>A recommendation is causing an error.</p>"
         }
       },
       "documentation":"<p>An error occurred when creating a recommendation.</p>"
@@ -7879,8 +8115,8 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "recommendationIds",
-        "sessionId"
+        "sessionId",
+        "recommendationIds"
       ],
       "members":{
         "assistantId":{
@@ -7889,28 +8125,28 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "recommendationIds":{
-          "shape":"RecommendationIdList",
-          "documentation":"<p>The identifiers of the recommendations.</p>"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"sessionId"
+        },
+        "recommendationIds":{
+          "shape":"RecommendationIdList",
+          "documentation":"<p>The identifiers of the recommendations.</p>"
         }
       }
     },
     "NotifyRecommendationsReceivedResponse":{
       "type":"structure",
       "members":{
-        "errors":{
-          "shape":"NotifyRecommendationsReceivedErrorList",
-          "documentation":"<p>The identifiers of recommendations that are causing errors.</p>"
-        },
         "recommendationIds":{
           "shape":"RecommendationIdList",
           "documentation":"<p>The identifiers of the recommendations.</p>"
+        },
+        "errors":{
+          "shape":"NotifyRecommendationsReceivedErrorList",
+          "documentation":"<p>The identifiers of recommendations that are causing errors.</p>"
         }
       }
     },
@@ -7957,13 +8193,13 @@
       "type":"structure",
       "required":["parsingStrategy"],
       "members":{
-        "bedrockFoundationModelConfiguration":{
-          "shape":"BedrockFoundationModelConfigurationForParsing",
-          "documentation":"<p>Settings for a foundation model used to parse documents for a data source.</p>"
-        },
         "parsingStrategy":{
           "shape":"ParsingStrategy",
           "documentation":"<p>The parsing strategy for the data source.</p>"
+        },
+        "bedrockFoundationModelConfiguration":{
+          "shape":"BedrockFoundationModelConfigurationForParsing",
+          "documentation":"<p>Settings for a foundation model used to parse documents for a data source.</p>"
         }
       },
       "documentation":"<p>Settings for parsing document contents. By default, the service converts the contents of each document into text before splitting it into chunks. To improve processing of PDF files with tables and images, you can configure the data source to convert the pages of text into images and use a model to describe the contents of each page.</p>"
@@ -8020,9 +8256,9 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "contentFeedback",
         "targetId",
-        "targetType"
+        "targetType",
+        "contentFeedback"
       ],
       "members":{
         "assistantId":{
@@ -8031,10 +8267,6 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "contentFeedback":{
-          "shape":"ContentFeedbackData",
-          "documentation":"<p>Information about the feedback provided.</p>"
-        },
         "targetId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the feedback target.</p>"
@@ -8042,30 +8274,30 @@
         "targetType":{
           "shape":"TargetType",
           "documentation":"<p>The type of the feedback target.</p>"
+        },
+        "contentFeedback":{
+          "shape":"ContentFeedbackData",
+          "documentation":"<p>Information about the feedback provided.</p>"
         }
       }
     },
     "PutFeedbackResponse":{
       "type":"structure",
       "required":[
-        "assistantArn",
         "assistantId",
-        "contentFeedback",
+        "assistantArn",
         "targetId",
-        "targetType"
+        "targetType",
+        "contentFeedback"
       ],
       "members":{
-        "assistantArn":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
-        },
         "assistantId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
         },
-        "contentFeedback":{
-          "shape":"ContentFeedbackData",
-          "documentation":"<p>Information about the feedback provided.</p>"
+        "assistantArn":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         },
         "targetId":{
           "shape":"Uuid",
@@ -8074,6 +8306,10 @@
         "targetType":{
           "shape":"TargetType",
           "documentation":"<p>The type of the feedback target.</p>"
+        },
+        "contentFeedback":{
+          "shape":"ContentFeedbackData",
+          "documentation":"<p>Information about the feedback provided.</p>"
         }
       }
     },
@@ -8087,17 +8323,21 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>"
+        "queryText":{
+          "shape":"QueryText",
+          "documentation":"<p>The text to search for.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
           "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
         },
-        "overrideKnowledgeBaseSearchType":{
-          "shape":"KnowledgeBaseSearchType",
-          "documentation":"<p>The search type to be used against the Knowledge Base for this request. The values can be <code>SEMANTIC</code> which uses vector embeddings or <code>HYBRID</code> which use vector embeddings and raw text.</p>"
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>"
+        },
+        "sessionId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
         },
         "queryCondition":{
           "shape":"QueryConditionExpression",
@@ -8107,13 +8347,9 @@
           "shape":"QueryInputData",
           "documentation":"<p>Information about the query.</p>"
         },
-        "queryText":{
-          "shape":"QueryText",
-          "documentation":"<p>The text to search for.</p>"
-        },
-        "sessionId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        "overrideKnowledgeBaseSearchType":{
+          "shape":"KnowledgeBaseSearchType",
+          "documentation":"<p>The search type to be used against the Knowledge Base for this request. The values can be <code>SEMANTIC</code> which uses vector embeddings or <code>HYBRID</code> which use vector embeddings and raw text.</p>"
         }
       }
     },
@@ -8121,13 +8357,13 @@
       "type":"structure",
       "required":["results"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
-        },
         "results":{
           "shape":"QueryResultsList",
           "documentation":"<p>The results of the query.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
         }
       }
     },
@@ -8159,19 +8395,19 @@
     "QueryConditionItem":{
       "type":"structure",
       "required":[
-        "comparator",
         "field",
+        "comparator",
         "value"
       ],
       "members":{
-        "comparator":{
-          "shape":"QueryConditionComparisonOperator",
-          "documentation":"<p>The comparison operator for query condition to query on.</p>"
-        },
         "field":{
           "shape":"QueryConditionFieldName",
           "documentation":"<p> The name of the field for query condition to query on.</p>"
         },
+        "comparator":{
+          "shape":"QueryConditionComparisonOperator",
+          "documentation":"<p>The comparison operator for query condition to query on.</p>"
+        },
         "value":{
           "shape":"NonEmptyString",
           "documentation":"<p>The value for the query condition to query on.</p>"
@@ -8182,13 +8418,13 @@
     "QueryInputData":{
       "type":"structure",
       "members":{
-        "intentInputData":{
-          "shape":"IntentInputData",
-          "documentation":"<p>Input information for the intent.</p>"
-        },
         "queryTextInputData":{
           "shape":"QueryTextInputData",
           "documentation":"<p>Input information for the query.</p>"
+        },
+        "intentInputData":{
+          "shape":"IntentInputData",
+          "documentation":"<p>Input information for the intent.</p>"
         }
       },
       "documentation":"<p>Input information for the query.</p>",
@@ -8209,7 +8445,14 @@
       "enum":[
         "KNOWLEDGE_CONTENT",
         "INTENT_ANSWER",
-        "GENERATIVE_ANSWER"
+        "GENERATIVE_ANSWER",
+        "GENERATIVE_ANSWER_CHUNK",
+        "BLOCKED_GENERATIVE_ANSWER_CHUNK",
+        "INTENT_ANSWER_CHUNK",
+        "BLOCKED_INTENT_ANSWER_CHUNK",
+        "EMAIL_RESPONSE_CHUNK",
+        "EMAIL_OVERVIEW_CHUNK",
+        "EMAIL_GENERATIVE_ANSWER_CHUNK"
       ]
     },
     "QueryResultsList":{
@@ -8253,41 +8496,65 @@
     "QuickResponseContents":{
       "type":"structure",
       "members":{
-        "markdown":{"shape":"QuickResponseContentProvider"},
-        "plainText":{"shape":"QuickResponseContentProvider"}
+        "plainText":{"shape":"QuickResponseContentProvider"},
+        "markdown":{"shape":"QuickResponseContentProvider"}
       },
       "documentation":"<p>The content of the quick response stored in different media types.</p>"
     },
     "QuickResponseData":{
       "type":"structure",
       "required":[
-        "contentType",
-        "createdTime",
+        "quickResponseArn",
+        "quickResponseId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedTime",
         "name",
-        "quickResponseArn",
-        "quickResponseId",
-        "status"
+        "contentType",
+        "status",
+        "createdTime",
+        "lastModifiedTime"
       ],
       "members":{
-        "channels":{
-          "shape":"Channels",
-          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
+        "quickResponseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
+        },
+        "quickResponseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the quick response.</p>"
+        },
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        },
+        "name":{
+          "shape":"QuickResponseName",
+          "documentation":"<p>The name of the quick response.</p>"
         },
         "contentType":{
           "shape":"QuickResponseType",
           "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for quick response written in richtext.</p> </li> </ul>"
         },
-        "contents":{
-          "shape":"QuickResponseContents",
-          "documentation":"<p>The contents of the quick response.</p>"
+        "status":{
+          "shape":"QuickResponseStatus",
+          "documentation":"<p>The status of the quick response data.</p>"
         },
         "createdTime":{
           "shape":"SyntheticTimestamp_epoch_seconds",
           "documentation":"<p>The timestamp when the quick response was created.</p>"
         },
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the quick response data was last modified.</p>"
+        },
+        "contents":{
+          "shape":"QuickResponseContents",
+          "documentation":"<p>The contents of the quick response.</p>"
+        },
         "description":{
           "shape":"QuickResponseDescription",
           "documentation":"<p>The description of the quick response.</p>"
@@ -8296,50 +8563,26 @@
           "shape":"GroupingConfiguration",
           "documentation":"<p>The configuration information of the user groups that the quick response is accessible to.</p>"
         },
+        "shortcutKey":{
+          "shape":"ShortCutKey",
+          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
+        },
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the quick response data.</p>"
+        },
         "isActive":{
           "shape":"Boolean",
           "documentation":"<p>Whether the quick response is active.</p>"
         },
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        "channels":{
+          "shape":"Channels",
+          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
         },
         "language":{
           "shape":"LanguageCode",
           "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the quick response data.</p>"
-        },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the quick response data was last modified.</p>"
-        },
-        "name":{
-          "shape":"QuickResponseName",
-          "documentation":"<p>The name of the quick response.</p>"
-        },
-        "quickResponseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
-        },
-        "quickResponseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the quick response.</p>"
-        },
-        "shortcutKey":{
-          "shape":"ShortCutKey",
-          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
-        },
-        "status":{
-          "shape":"QuickResponseStatus",
-          "documentation":"<p>The status of the quick response data.</p>"
-        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -8370,21 +8613,21 @@
         "operator"
       ],
       "members":{
-        "includeNoExistence":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to treat null value as a match for the attribute field.</p>"
-        },
         "name":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the attribute field to filter the quick responses by.</p>"
         },
+        "values":{
+          "shape":"QuickResponseFilterValueList",
+          "documentation":"<p>The values of attribute field to filter the quick response by.</p>"
+        },
         "operator":{
           "shape":"QuickResponseFilterOperator",
           "documentation":"<p>The operator to use for filtering.</p>"
         },
-        "values":{
-          "shape":"QuickResponseFilterValueList",
-          "documentation":"<p>The values of attribute field to filter the quick response by.</p>"
+        "includeNoExistence":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to treat null value as a match for the attribute field.</p>"
         }
       },
       "documentation":"<p>The quick response fields to filter the quick response query results by.</p> <p>The following is the list of supported field names.</p> <ul> <li> <p>name</p> </li> <li> <p>description</p> </li> <li> <p>shortcutKey</p> </li> <li> <p>isActive</p> </li> <li> <p>channels</p> </li> <li> <p>language</p> </li> <li> <p>contentType</p> </li> <li> <p>createdTime</p> </li> <li> <p>lastModifiedTime</p> </li> <li> <p>lastModifiedBy</p> </li> <li> <p>groupingConfiguration.criteria</p> </li> <li> <p>groupingConfiguration.values</p> </li> </ul>"
@@ -8437,29 +8680,29 @@
       "type":"structure",
       "required":[
         "name",
-        "operator",
-        "values"
+        "values",
+        "operator"
       ],
       "members":{
-        "allowFuzziness":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the query expects only exact matches on the attribute field values. The results of the query will only include exact matches if this parameter is set to false.</p>"
-        },
         "name":{
           "shape":"NonEmptyString",
           "documentation":"<p>The name of the attribute to query the quick responses by.</p>"
         },
+        "values":{
+          "shape":"QuickResponseQueryValueList",
+          "documentation":"<p>The values of the attribute to query the quick responses by.</p>"
+        },
         "operator":{
           "shape":"QuickResponseQueryOperator",
           "documentation":"<p>The operator to use for matching attribute field values in the query.</p>"
         },
+        "allowFuzziness":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the query expects only exact matches on the attribute field values. The results of the query will only include exact matches if this parameter is set to false.</p>"
+        },
         "priority":{
           "shape":"Priority",
           "documentation":"<p>The importance of the attribute field when calculating query result relevancy scores. The value set for this parameter affects the ordering of search results.</p>"
-        },
-        "values":{
-          "shape":"QuickResponseQueryValueList",
-          "documentation":"<p>The values of the attribute to query the quick responses by.</p>"
         }
       },
       "documentation":"<p>The quick response fields to query quick responses by.</p> <p>The following is the list of supported field names.</p> <ul> <li> <p>content</p> </li> <li> <p>name</p> </li> <li> <p>description</p> </li> <li> <p>shortcutKey</p> </li> </ul>"
@@ -8491,6 +8734,10 @@
     "QuickResponseSearchExpression":{
       "type":"structure",
       "members":{
+        "queries":{
+          "shape":"QuickResponseQueryFieldList",
+          "documentation":"<p>The quick response query expressions.</p>"
+        },
         "filters":{
           "shape":"QuickResponseFilterFieldList",
           "documentation":"<p>The configuration of filtering rules applied to quick response query results.</p>"
@@ -8498,10 +8745,6 @@
         "orderOnField":{
           "shape":"QuickResponseOrderField",
           "documentation":"<p>The quick response attribute fields on which the query results are ordered.</p>"
-        },
-        "queries":{
-          "shape":"QuickResponseQueryFieldList",
-          "documentation":"<p>The quick response query expressions.</p>"
         }
       },
       "documentation":"<p>Information about the import job.</p>"
@@ -8509,35 +8752,47 @@
     "QuickResponseSearchResultData":{
       "type":"structure",
       "required":[
+        "quickResponseArn",
+        "quickResponseId",
+        "knowledgeBaseArn",
+        "knowledgeBaseId",
+        "name",
         "contentType",
+        "status",
         "contents",
         "createdTime",
-        "isActive",
-        "knowledgeBaseArn",
-        "knowledgeBaseId",
         "lastModifiedTime",
-        "name",
-        "quickResponseArn",
-        "quickResponseId",
-        "status"
+        "isActive"
       ],
       "members":{
-        "attributesInterpolated":{
-          "shape":"ContactAttributeKeys",
-          "documentation":"<p>The user defined contact attributes that are resolved when the search result is returned.</p>"
+        "quickResponseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
         },
-        "attributesNotInterpolated":{
-          "shape":"ContactAttributeKeys",
-          "documentation":"<p>The user defined contact attributes that are not resolved when the search result is returned.</p>"
+        "quickResponseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the quick response.</p>"
         },
-        "channels":{
-          "shape":"Channels",
-          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
+        "knowledgeBaseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
+        },
+        "knowledgeBaseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
+        },
+        "name":{
+          "shape":"QuickResponseName",
+          "documentation":"<p>The name of the quick response.</p>"
         },
         "contentType":{
           "shape":"QuickResponseType",
           "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for quick response written in richtext.</p> </li> </ul>"
         },
+        "status":{
+          "shape":"QuickResponseStatus",
+          "documentation":"<p>The resource status of the quick response.</p>"
+        },
         "contents":{
           "shape":"QuickResponseContents",
           "documentation":"<p>The contents of the quick response.</p>"
@@ -8546,6 +8801,14 @@
           "shape":"SyntheticTimestamp_epoch_seconds",
           "documentation":"<p>The timestamp when the quick response was created.</p>"
         },
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the quick response search result data was last modified.</p>"
+        },
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the quick response is active.</p>"
+        },
         "description":{
           "shape":"QuickResponseDescription",
           "documentation":"<p>The description of the quick response.</p>"
@@ -8554,49 +8817,29 @@
           "shape":"GroupingConfiguration",
           "documentation":"<p>The configuration information of the user groups that the quick response is accessible to.</p>"
         },
-        "isActive":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the quick response is active.</p>"
-        },
-        "knowledgeBaseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the knowledge base.</p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>"
-        },
-        "language":{
-          "shape":"LanguageCode",
-          "documentation":"<p>The language code value for the language in which the quick response is written.</p>"
+        "shortcutKey":{
+          "shape":"ShortCutKey",
+          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
         },
         "lastModifiedBy":{
           "shape":"GenericArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the quick response search result data.</p>"
         },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the quick response search result data was last modified.</p>"
-        },
-        "name":{
-          "shape":"QuickResponseName",
-          "documentation":"<p>The name of the quick response.</p>"
-        },
-        "quickResponseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
+        "channels":{
+          "shape":"Channels",
+          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
         },
-        "quickResponseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the quick response.</p>"
+        "language":{
+          "shape":"LanguageCode",
+          "documentation":"<p>The language code value for the language in which the quick response is written.</p>"
         },
-        "shortcutKey":{
-          "shape":"ShortCutKey",
-          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
+        "attributesNotInterpolated":{
+          "shape":"ContactAttributeKeys",
+          "documentation":"<p>The user defined contact attributes that are not resolved when the search result is returned.</p>"
         },
-        "status":{
-          "shape":"QuickResponseStatus",
-          "documentation":"<p>The resource status of the quick response.</p>"
+        "attributesInterpolated":{
+          "shape":"ContactAttributeKeys",
+          "documentation":"<p>The user defined contact attributes that are resolved when the search result is returned.</p>"
         },
         "tags":{
           "shape":"Tags",
@@ -8625,36 +8868,24 @@
     "QuickResponseSummary":{
       "type":"structure",
       "required":[
-        "contentType",
-        "createdTime",
+        "quickResponseArn",
+        "quickResponseId",
         "knowledgeBaseArn",
         "knowledgeBaseId",
-        "lastModifiedTime",
         "name",
-        "quickResponseArn",
-        "quickResponseId",
-        "status"
+        "contentType",
+        "status",
+        "createdTime",
+        "lastModifiedTime"
       ],
       "members":{
-        "channels":{
-          "shape":"Channels",
-          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
-        },
-        "contentType":{
-          "shape":"QuickResponseType",
-          "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for quick response written in richtext.</p> </li> </ul>"
-        },
-        "createdTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the quick response was created.</p>"
-        },
-        "description":{
-          "shape":"QuickResponseDescription",
-          "documentation":"<p>The description of the quick response.</p>"
+        "quickResponseArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
         },
-        "isActive":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether the quick response is active.</p>"
+        "quickResponseId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the quick response.</p>"
         },
         "knowledgeBaseArn":{
           "shape":"Arn",
@@ -8664,30 +8895,42 @@
           "shape":"Uuid",
           "documentation":"<p>The identifier of the knowledge base.</p>"
         },
-        "lastModifiedBy":{
-          "shape":"GenericArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the quick response data.</p>"
-        },
-        "lastModifiedTime":{
-          "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The timestamp when the quick response summary was last modified.</p>"
-        },
         "name":{
           "shape":"QuickResponseName",
           "documentation":"<p>The name of the quick response.</p>"
         },
-        "quickResponseArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the quick response.</p>"
-        },
-        "quickResponseId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the quick response.</p>"
+        "contentType":{
+          "shape":"QuickResponseType",
+          "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for quick response written in richtext.</p> </li> </ul>"
         },
         "status":{
           "shape":"QuickResponseStatus",
           "documentation":"<p>The resource status of the quick response.</p>"
         },
+        "createdTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the quick response was created.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"SyntheticTimestamp_epoch_seconds",
+          "documentation":"<p>The timestamp when the quick response summary was last modified.</p>"
+        },
+        "description":{
+          "shape":"QuickResponseDescription",
+          "documentation":"<p>The description of the quick response.</p>"
+        },
+        "lastModifiedBy":{
+          "shape":"GenericArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the user who last updated the quick response data.</p>"
+        },
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the quick response is active.</p>"
+        },
+        "channels":{
+          "shape":"Channels",
+          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
+        },
         "tags":{
           "shape":"Tags",
           "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
@@ -8701,18 +8944,18 @@
     },
     "QuickResponseType":{
       "type":"string",
-      "pattern":"^(application/x\\.quickresponse;format=(plain|markdown))$"
+      "pattern":"(application/x\\.quickresponse;format=(plain|markdown))"
     },
     "RankingData":{
       "type":"structure",
       "members":{
-        "relevanceLevel":{
-          "shape":"RelevanceLevel",
-          "documentation":"<p>The relevance score of the content.</p>"
-        },
         "relevanceScore":{
           "shape":"RelevanceScore",
           "documentation":"<p>The relevance level of the recommendation.</p>"
+        },
+        "relevanceLevel":{
+          "shape":"RelevanceLevel",
+          "documentation":"<p>The relevance score of the content.</p>"
         }
       },
       "documentation":"<p>Details about the source content ranking data.</p>"
@@ -8721,29 +8964,29 @@
       "type":"structure",
       "required":["recommendationId"],
       "members":{
-        "data":{
-          "shape":"DataSummary",
-          "documentation":"<p> Summary of the recommended content.</p>"
+        "recommendationId":{
+          "shape":"RecommendationId",
+          "documentation":"<p>The identifier of the recommendation.</p>"
         },
         "document":{
           "shape":"Document",
           "documentation":"<p>The recommended document.</p>"
         },
-        "recommendationId":{
-          "shape":"RecommendationId",
-          "documentation":"<p>The identifier of the recommendation.</p>"
+        "relevanceScore":{
+          "shape":"RelevanceScore",
+          "documentation":"<p>The relevance score of the recommendation.</p>"
         },
         "relevanceLevel":{
           "shape":"RelevanceLevel",
           "documentation":"<p>The relevance level of the recommendation.</p>"
         },
-        "relevanceScore":{
-          "shape":"RelevanceScore",
-          "documentation":"<p>The relevance score of the recommendation.</p>"
-        },
         "type":{
           "shape":"RecommendationType",
           "documentation":"<p>The type of recommendation.</p>"
+        },
+        "data":{
+          "shape":"DataSummary",
+          "documentation":"<p> Summary of the recommended content.</p>"
         }
       },
       "documentation":"<p>Information about the recommendation.</p>"
@@ -8774,32 +9017,32 @@
     "RecommendationTrigger":{
       "type":"structure",
       "required":[
-        "data",
         "id",
-        "recommendationIds",
+        "type",
         "source",
-        "type"
+        "data",
+        "recommendationIds"
       ],
       "members":{
-        "data":{
-          "shape":"RecommendationTriggerData",
-          "documentation":"<p>A union type containing information related to the trigger.</p>"
-        },
         "id":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the recommendation trigger.</p>"
         },
-        "recommendationIds":{
-          "shape":"RecommendationIdList",
-          "documentation":"<p>The identifiers of the recommendations.</p>"
+        "type":{
+          "shape":"RecommendationTriggerType",
+          "documentation":"<p>The type of recommendation trigger.</p>"
         },
         "source":{
           "shape":"RecommendationSourceType",
           "documentation":"<p>The source of the recommendation trigger.</p> <ul> <li> <p>ISSUE_DETECTION: The corresponding recommendations were triggered by a Contact Lens issue.</p> </li> <li> <p>RULE_EVALUATION: The corresponding recommendations were triggered by a Contact Lens rule.</p> </li> </ul>"
         },
-        "type":{
-          "shape":"RecommendationTriggerType",
-          "documentation":"<p>The type of recommendation trigger.</p>"
+        "data":{
+          "shape":"RecommendationTriggerData",
+          "documentation":"<p>A union type containing information related to the trigger.</p>"
+        },
+        "recommendationIds":{
+          "shape":"RecommendationIdList",
+          "documentation":"<p>The identifiers of the recommendations.</p>"
         }
       },
       "documentation":"<p>A recommendation trigger provides context on the event that produced the referenced recommendations. Recommendations are only referenced in <code>recommendationIds</code> by a single RecommendationTrigger.</p>"
@@ -8832,7 +9075,14 @@
         "KNOWLEDGE_CONTENT",
         "GENERATIVE_RESPONSE",
         "GENERATIVE_ANSWER",
-        "DETECTED_INTENT"
+        "DETECTED_INTENT",
+        "GENERATIVE_ANSWER_CHUNK",
+        "BLOCKED_GENERATIVE_ANSWER_CHUNK",
+        "INTENT_ANSWER_CHUNK",
+        "BLOCKED_INTENT_ANSWER_CHUNK",
+        "EMAIL_RESPONSE_CHUNK",
+        "EMAIL_OVERVIEW_CHUNK",
+        "EMAIL_GENERATIVE_ANSWER_CHUNK"
       ]
     },
     "ReferenceType":{
@@ -8864,28 +9114,27 @@
     "RemoveAssistantAIAgentRequest":{
       "type":"structure",
       "required":[
-        "aiAgentType",
-        "assistantId"
+        "assistantId",
+        "aiAgentType"
       ],
       "members":{
-        "aiAgentType":{
-          "shape":"AIAgentType",
-          "documentation":"<p>The type of the AI Agent being removed for use by default from the Amazon Q in Connect Assistant.</p>",
-          "location":"querystring",
-          "locationName":"aiAgentType"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
+        },
+        "aiAgentType":{
+          "shape":"AIAgentType",
+          "documentation":"<p>The type of the AI Agent being removed for use by default from the Amazon Q in Connect Assistant.</p>",
+          "location":"querystring",
+          "locationName":"aiAgentType"
         }
       }
     },
     "RemoveAssistantAIAgentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RemoveKnowledgeBaseTemplateUriRequest":{
       "type":"structure",
@@ -8901,21 +9150,16 @@
     },
     "RemoveKnowledgeBaseTemplateUriResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RenderMessageTemplateRequest":{
       "type":"structure",
       "required":[
-        "attributes",
         "knowledgeBaseId",
-        "messageTemplateId"
+        "messageTemplateId",
+        "attributes"
       ],
       "members":{
-        "attributes":{
-          "shape":"MessageTemplateAttributes",
-          "documentation":"<p>An object that specifies the values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the value for that variable.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
@@ -8927,6 +9171,10 @@
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN.</p>",
           "location":"uri",
           "locationName":"messageTemplateId"
+        },
+        "attributes":{
+          "shape":"MessageTemplateAttributes",
+          "documentation":"<p>An object that specifies the values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the value for that variable.</p>"
         }
       }
     },
@@ -8934,17 +9182,17 @@
       "type":"structure",
       "required":["content"],
       "members":{
-        "attachments":{
-          "shape":"MessageTemplateAttachmentList",
-          "documentation":"<p>The message template attachments.</p>"
+        "content":{
+          "shape":"MessageTemplateContentProvider",
+          "documentation":"<p>The content of the message template.</p>"
         },
         "attributesNotInterpolated":{
           "shape":"MessageTemplateAttributeKeyList",
           "documentation":"<p>The attribute keys that are not resolved.</p>"
         },
-        "content":{
-          "shape":"MessageTemplateContentProvider",
-          "documentation":"<p>The content of the message template.</p>"
+        "attachments":{
+          "shape":"MessageTemplateAttachmentList",
+          "documentation":"<p>The message template attachments.</p>"
         }
       }
     },
@@ -8991,9 +9239,9 @@
       "type":"structure",
       "required":["resultId"],
       "members":{
-        "data":{
-          "shape":"DataSummary",
-          "documentation":"<p> Summary of the recommended content.</p>"
+        "resultId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the result data.</p>"
         },
         "document":{
           "shape":"Document",
@@ -9003,9 +9251,9 @@
           "shape":"RelevanceScore",
           "documentation":"<p>The relevance score of the results.</p>"
         },
-        "resultId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the result data.</p>"
+        "data":{
+          "shape":"DataSummary",
+          "documentation":"<p> Summary of the recommended content.</p>"
         },
         "type":{
           "shape":"QueryResultType",
@@ -9076,11 +9324,11 @@
         "searchExpression"
       ],
       "members":{
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -9088,11 +9336,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
         },
         "searchExpression":{
           "shape":"SearchExpression",
@@ -9138,11 +9386,9 @@
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "searchExpression":{
+          "shape":"MessageTemplateSearchExpression",
+          "documentation":"<p>The search expression for querying the message template.</p>"
         },
         "nextToken":{
           "shape":"NextToken",
@@ -9150,9 +9396,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "searchExpression":{
-          "shape":"MessageTemplateSearchExpression",
-          "documentation":"<p>The search expression for querying the message template.</p>"
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -9160,13 +9408,13 @@
       "type":"structure",
       "required":["results"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
-        },
         "results":{
           "shape":"MessageTemplateSearchResultsList",
           "documentation":"<p>The results of the message template search.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
         }
       }
     },
@@ -9177,21 +9425,15 @@
         "searchExpression"
       ],
       "members":{
-        "attributes":{
-          "shape":"ContactAttributes",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/connect-attrib-list.html#user-defined-attributes\">user-defined Amazon Connect contact attributes</a> to be resolved when search results are returned.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. This should be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return per page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "searchExpression":{
+          "shape":"QuickResponseSearchExpression",
+          "documentation":"<p>The search expression for querying the quick response.</p>"
         },
         "nextToken":{
           "shape":"NonEmptyString",
@@ -9199,9 +9441,15 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "searchExpression":{
-          "shape":"QuickResponseSearchExpression",
-          "documentation":"<p>The search expression for querying the quick response.</p>"
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "attributes":{
+          "shape":"ContactAttributes",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/connect-attrib-list.html#user-defined-attributes\">user-defined Amazon Connect contact attributes</a> to be resolved when search results are returned.</p>"
         }
       }
     },
@@ -9209,13 +9457,13 @@
       "type":"structure",
       "required":["results"],
       "members":{
-        "nextToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
-        },
         "results":{
           "shape":"QuickResponseSearchResultsList",
           "documentation":"<p>The results of the quick response search.</p>"
+        },
+        "nextToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>"
         }
       }
     },
@@ -9226,11 +9474,11 @@
         "searchExpression"
       ],
       "members":{
-        "assistantId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"assistantId"
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         },
         "maxResults":{
           "shape":"MaxResults",
@@ -9238,11 +9486,11 @@
           "location":"querystring",
           "locationName":"maxResults"
         },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
+        "assistantId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"assistantId"
         },
         "searchExpression":{
           "shape":"SearchExpression",
@@ -9254,13 +9502,13 @@
       "type":"structure",
       "required":["sessionSummaries"],
       "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
-        },
         "sessionSummaries":{
           "shape":"SessionSummaries",
           "documentation":"<p>Summary information about the sessions.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If there are additional results, this is the token for the next set of results.</p>"
         }
       }
     },
@@ -9283,21 +9531,21 @@
     "SelfServiceAIAgentConfiguration":{
       "type":"structure",
       "members":{
-        "associationConfigurations":{
-          "shape":"AssociationConfigurationList",
-          "documentation":"<p>The association configurations for overriding behavior on this AI Agent.</p>"
-        },
-        "selfServiceAIGuardrailId":{
+        "selfServicePreProcessingAIPromptId":{
           "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Guardrail identifier used by the SELF_SERVICE AI Agent.</p>"
+          "documentation":"<p>The AI Prompt identifier for the Self Service Pre-Processing prompt used by the SELF_SERVICE AI Agent</p>"
         },
         "selfServiceAnswerGenerationAIPromptId":{
           "shape":"UuidWithQualifier",
           "documentation":"<p>The AI Prompt identifier for the Self Service Answer Generation prompt used by the SELF_SERVICE AI Agent</p>"
         },
-        "selfServicePreProcessingAIPromptId":{
+        "selfServiceAIGuardrailId":{
           "shape":"UuidWithQualifier",
-          "documentation":"<p>The AI Prompt identifier for the Self Service Pre-Processing prompt used by the SELF_SERVICE AI Agent</p>"
+          "documentation":"<p>The AI Guardrail identifier used by the SELF_SERVICE AI Agent.</p>"
+        },
+        "associationConfigurations":{
+          "shape":"AssociationConfigurationList",
+          "documentation":"<p>The association configurations for overriding behavior on this AI Agent.</p>"
         }
       },
       "documentation":"<p>The configuration for AI Agents of type SELF_SERVICE.</p>"
@@ -9306,20 +9554,20 @@
       "type":"structure",
       "required":["turnNumber"],
       "members":{
-        "botResponse":{
-          "shape":"SensitiveString",
-          "documentation":"<p>The bot response of the conversation history data.</p>"
+        "turnNumber":{
+          "shape":"Integer",
+          "documentation":"<p>The number of turn of the conversation history data.</p>"
         },
         "inputTranscript":{
           "shape":"SensitiveString",
           "documentation":"<p>The input transcript of the conversation history data.</p>"
         },
-        "turnNumber":{
-          "shape":"Integer",
-          "documentation":"<p>The number of turn of the conversation history data.</p>"
+        "botResponse":{
+          "shape":"SensitiveString",
+          "documentation":"<p>The bot response of the conversation history data.</p>"
         }
       },
-      "documentation":"<p>The conversation history data to included in conversation context data before the the Amazon Q in Connect session..</p>"
+      "documentation":"<p>The conversation history data to included in conversation context data before the Amazon Q in Connect session.</p>"
     },
     "SelfServiceConversationHistoryList":{
       "type":"list",
@@ -9330,22 +9578,22 @@
     "SemanticChunkingConfiguration":{
       "type":"structure",
       "required":[
-        "breakpointPercentileThreshold",
+        "maxTokens",
         "bufferSize",
-        "maxTokens"
+        "breakpointPercentileThreshold"
       ],
       "members":{
-        "breakpointPercentileThreshold":{
-          "shape":"SemanticChunkingConfigurationBreakpointPercentileThresholdInteger",
-          "documentation":"<p>The dissimilarity threshold for splitting chunks.</p>"
+        "maxTokens":{
+          "shape":"SemanticChunkingConfigurationMaxTokensInteger",
+          "documentation":"<p>The maximum number of tokens that a chunk can contain.</p>"
         },
         "bufferSize":{
           "shape":"SemanticChunkingConfigurationBufferSizeInteger",
           "documentation":"<p>The buffer size.</p>"
         },
-        "maxTokens":{
-          "shape":"SemanticChunkingConfigurationMaxTokensInteger",
-          "documentation":"<p>The maximum number of tokens that a chunk can contain.</p>"
+        "breakpointPercentileThreshold":{
+          "shape":"SemanticChunkingConfigurationBreakpointPercentileThresholdInteger",
+          "documentation":"<p>The dissimilarity threshold for splitting chunks.</p>"
         }
       },
       "documentation":"<p>Settings for semantic document chunking for a data source. Semantic chunking splits a document into smaller documents based on groups of similar content derived from the text with natural language processing.</p>"
@@ -9371,9 +9619,9 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "message",
         "sessionId",
-        "type"
+        "type",
+        "message"
       ],
       "members":{
         "assistantId":{
@@ -9382,19 +9630,6 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the AWS SDK populates this field.For more information about idempotency, see Making retries safe with idempotent APIs.</p>",
-          "idempotencyToken":true
-        },
-        "conversationContext":{
-          "shape":"ConversationContext",
-          "documentation":"<p>The conversation context before the Amazon Q in Connect session.</p>"
-        },
-        "message":{
-          "shape":"MessageInput",
-          "documentation":"<p>The message data to submit to the Amazon Q in Connect session.</p>"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect session.</p>",
@@ -9404,23 +9639,44 @@
         "type":{
           "shape":"MessageType",
           "documentation":"<p>The message type.</p>"
+        },
+        "message":{
+          "shape":"MessageInput",
+          "documentation":"<p>The message data to submit to the Amazon Q in Connect session.</p>"
+        },
+        "conversationContext":{
+          "shape":"ConversationContext",
+          "documentation":"<p>The conversation context before the Amazon Q in Connect session.</p>"
+        },
+        "configuration":{
+          "shape":"MessageConfiguration",
+          "documentation":"<p>The configuration of the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_SendMessage.html\">SendMessage</a> request.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the AWS SDK populates this field.For more information about idempotency, see Making retries safe with idempotent APIs.</p>",
+          "idempotencyToken":true
         }
       }
     },
     "SendMessageResponse":{
       "type":"structure",
       "required":[
-        "nextMessageToken",
-        "requestMessageId"
+        "requestMessageId",
+        "nextMessageToken"
       ],
       "members":{
-        "nextMessageToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next message, used by GetNextMessage.</p>"
-        },
         "requestMessageId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the submitted message.</p>"
+        },
+        "configuration":{
+          "shape":"MessageConfiguration",
+          "documentation":"<p>The configuration of the <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_SendMessage.html\">SendMessage</a> request.</p>"
+        },
+        "nextMessageToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next message, used by GetNextMessage.</p>"
         }
       }
     },
@@ -9453,42 +9709,46 @@
     "SessionData":{
       "type":"structure",
       "required":[
-        "name",
         "sessionArn",
-        "sessionId"
+        "sessionId",
+        "name"
       ],
       "members":{
-        "aiAgentConfiguration":{
-          "shape":"AIAgentConfigurationMap",
-          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
+        "sessionArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
+        },
+        "sessionId":{
+          "shape":"Uuid",
+          "documentation":"<p>The identifier of the session.</p>"
+        },
+        "name":{
+          "shape":"Name",
+          "documentation":"<p>The name of the session.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the session.</p>"
         },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        },
         "integrationConfiguration":{
           "shape":"SessionIntegrationConfiguration",
           "documentation":"<p>The configuration information for the session integration.</p>"
         },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the session.</p>"
-        },
-        "sessionArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
-        },
-        "sessionId":{
-          "shape":"Uuid",
-          "documentation":"<p>The identifier of the session.</p>"
-        },
         "tagFilter":{
           "shape":"TagFilter",
           "documentation":"<p>An object that can be used to specify Tag conditions.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>"
+        "aiAgentConfiguration":{
+          "shape":"AIAgentConfigurationMap",
+          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
+        },
+        "origin":{
+          "shape":"Origin",
+          "documentation":"<p>The origin of the Session to be listed. <code>SYSTEM</code> for a default Session created by Amazon Q in Connect or <code>CUSTOMER</code> for a Session created by calling <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_amazon-q-connect_CreateSession.html\">CreateSession</a> API.</p>"
         }
       },
       "documentation":"<p>Information about the session.</p>"
@@ -9514,27 +9774,27 @@
     "SessionSummary":{
       "type":"structure",
       "required":[
-        "assistantArn",
-        "assistantId",
+        "sessionId",
         "sessionArn",
-        "sessionId"
+        "assistantId",
+        "assistantArn"
       ],
       "members":{
-        "assistantArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
-        },
-        "assistantId":{
+        "sessionId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
+          "documentation":"<p>The identifier of the session.</p>"
         },
         "sessionArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
         },
-        "sessionId":{
+        "assistantId":{
           "shape":"Uuid",
-          "documentation":"<p>The identifier of the session.</p>"
+          "documentation":"<p>The identifier of the Amazon Q in Connect assistant.</p>"
+        },
+        "assistantArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q in Connect assistant.</p>"
         }
       },
       "documentation":"<p>Summary information about the session.</p>"
@@ -9563,30 +9823,30 @@
       "type":"structure",
       "required":[
         "id",
-        "rankingData",
+        "type",
         "textData",
-        "type"
+        "rankingData"
       ],
       "members":{
-        "citationSpan":{
-          "shape":"CitationSpan",
-          "documentation":"<p>Contains information about where the text with a citation begins and ends in the generated output.</p>"
-        },
         "id":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the source content.</p>"
         },
-        "rankingData":{
-          "shape":"RankingData",
-          "documentation":"<p>Details about the source content ranking data.</p>"
+        "type":{
+          "shape":"SourceContentType",
+          "documentation":"<p>The type of the source content.</p>"
         },
         "textData":{
           "shape":"TextData",
           "documentation":"<p> Details about the source content text data.</p>"
         },
-        "type":{
-          "shape":"SourceContentType",
-          "documentation":"<p>The type of the source content.</p>"
+        "rankingData":{
+          "shape":"RankingData",
+          "documentation":"<p>Details about the source content ranking data.</p>"
+        },
+        "citationSpan":{
+          "shape":"CitationSpan",
+          "documentation":"<p>Contains information about where the text with a citation begins and ends in the generated output.</p>"
         }
       },
       "documentation":"<p>Details about the source content data.</p>"
@@ -9598,20 +9858,20 @@
     "StartContentUploadRequest":{
       "type":"structure",
       "required":[
-        "contentType",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "contentType"
       ],
       "members":{
-        "contentType":{
-          "shape":"ContentType",
-          "documentation":"<p>The type of content to upload.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
+        "contentType":{
+          "shape":"ContentType",
+          "documentation":"<p>The type of content to upload.</p>"
+        },
         "presignedUrlTimeToLive":{
           "shape":"TimeToLive",
           "documentation":"<p>The expected expiration time of the generated presigned URL, specified in minutes.</p>"
@@ -9621,16 +9881,12 @@
     "StartContentUploadResponse":{
       "type":"structure",
       "required":[
-        "headersToInclude",
         "uploadId",
         "url",
-        "urlExpiry"
+        "urlExpiry",
+        "headersToInclude"
       ],
       "members":{
-        "headersToInclude":{
-          "shape":"Headers",
-          "documentation":"<p>The headers to include in the upload.</p>"
-        },
         "uploadId":{
           "shape":"UploadId",
           "documentation":"<p>The identifier of the upload.</p>"
@@ -9642,43 +9898,47 @@
         "urlExpiry":{
           "shape":"SyntheticTimestamp_epoch_seconds",
           "documentation":"<p>The expiration time of the URL as an epoch timestamp.</p>"
+        },
+        "headersToInclude":{
+          "shape":"Headers",
+          "documentation":"<p>The headers to include in the upload.</p>"
         }
       }
     },
     "StartImportJobRequest":{
       "type":"structure",
       "required":[
-        "importJobType",
         "knowledgeBaseId",
+        "importJobType",
         "uploadId"
       ],
       "members":{
-        "clientToken":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>",
-          "idempotencyToken":true
-        },
-        "externalSourceConfiguration":{
-          "shape":"ExternalSourceConfiguration",
-          "documentation":"<p>The configuration information of the external source that the resource data are imported from.</p>"
-        },
-        "importJobType":{
-          "shape":"ImportJobType",
-          "documentation":"<p>The type of the import job.</p> <ul> <li> <p>For importing quick response resource, set the value to <code>QUICK_RESPONSES</code>.</p> </li> </ul>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p> <ul> <li> <p>For importing Amazon Q in Connect quick responses, this should be a <code>QUICK_RESPONSES</code> type knowledge base.</p> </li> </ul>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>The metadata fields of the imported Amazon Q in Connect resources.</p>"
+        "importJobType":{
+          "shape":"ImportJobType",
+          "documentation":"<p>The type of the import job.</p> <ul> <li> <p>For importing quick response resource, set the value to <code>QUICK_RESPONSES</code>.</p> </li> </ul>"
         },
         "uploadId":{
           "shape":"UploadId",
           "documentation":"<p>A pointer to the uploaded asset. This value is returned by <a href=\"https://docs.aws.amazon.com/wisdom/latest/APIReference/API_StartContentUpload.html\">StartContentUpload</a>.</p>"
+        },
+        "clientToken":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The tags used to organize, track, or control access for this resource.</p>",
+          "idempotencyToken":true
+        },
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>The metadata fields of the imported Amazon Q in Connect resources.</p>"
+        },
+        "externalSourceConfiguration":{
+          "shape":"ExternalSourceConfiguration",
+          "documentation":"<p>The configuration information of the external source that the resource data are imported from.</p>"
         }
       }
     },
@@ -9723,14 +9983,14 @@
     "SystemAttributes":{
       "type":"structure",
       "members":{
-        "customerEndpoint":{
-          "shape":"SystemEndpointAttributes",
-          "documentation":"<p>The CustomerEndpoint attribute.</p>"
-        },
         "name":{
           "shape":"MessageTemplateAttributeValue",
           "documentation":"<p>The name of the task.</p>"
         },
+        "customerEndpoint":{
+          "shape":"SystemEndpointAttributes",
+          "documentation":"<p>The CustomerEndpoint attribute.</p>"
+        },
         "systemEndpoint":{
           "shape":"SystemEndpointAttributes",
           "documentation":"<p>The SystemEndpoint attribute.</p>"
@@ -9766,6 +10026,10 @@
     "TagFilter":{
       "type":"structure",
       "members":{
+        "tagCondition":{
+          "shape":"TagCondition",
+          "documentation":"<p>A leaf node condition which can be used to specify a tag condition.</p>"
+        },
         "andConditions":{
           "shape":"AndConditions",
           "documentation":"<p>A list of conditions which would be applied together with an <code>AND</code> condition.</p>"
@@ -9773,10 +10037,6 @@
         "orConditions":{
           "shape":"OrConditions",
           "documentation":"<p>A list of conditions which would be applied together with an <code>OR</code> condition.</p>"
-        },
-        "tagCondition":{
-          "shape":"TagCondition",
-          "documentation":"<p>A leaf node condition which can be used to specify a tag condition.</p>"
         }
       },
       "documentation":"<p>An object that can be used to specify Tag conditions.</p>",
@@ -9786,7 +10046,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^(?!aws:)[a-zA-Z+-=._:/]+$"
+      "pattern":"(?!aws:)[a-zA-Z+-=._:/]+"
     },
     "TagKeyList":{
       "type":"list",
@@ -9815,8 +10075,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -9837,15 +10096,15 @@
     },
     "TextAIPrompt":{
       "type":"string",
-      "max":200000,
+      "max":1000000,
       "min":1,
       "sensitive":true
     },
     "TextData":{
       "type":"structure",
       "members":{
-        "excerpt":{"shape":"DocumentText"},
-        "title":{"shape":"DocumentText"}
+        "title":{"shape":"DocumentText"},
+        "excerpt":{"shape":"DocumentText"}
       },
       "documentation":"<p>Details about the source content text data.</p>"
     },
@@ -9913,6 +10172,18 @@
       },
       "exception":true
     },
+    "UnauthorizedException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>You do not have permission to perform this action.</p>",
+      "error":{
+        "httpStatusCode":401,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "UntagResourceRequest":{
       "type":"structure",
       "required":[
@@ -9936,22 +10207,20 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAIAgentRequest":{
       "type":"structure",
       "required":[
-        "aiAgentId",
         "assistantId",
+        "aiAgentId",
         "visibilityStatus"
       ],
       "members":{
-        "aiAgentId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent.</p>",
-          "location":"uri",
-          "locationName":"aiAgentId"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
+          "idempotencyToken":true
         },
         "assistantId":{
           "shape":"UuidOrArn",
@@ -9959,10 +10228,15 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
-          "idempotencyToken":true
+        "aiAgentId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Agent.</p>",
+          "location":"uri",
+          "locationName":"aiAgentId"
+        },
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visbility status of the Amazon Q in Connect AI Agent.</p>"
         },
         "configuration":{
           "shape":"AIAgentConfiguration",
@@ -9971,10 +10245,6 @@
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the Amazon Q in Connect AI Agent.</p>"
-        },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visbility status of the Amazon Q in Connect AI Agent.</p>"
         }
       }
     },
@@ -9990,18 +10260,17 @@
     "UpdateAIGuardrailRequest":{
       "type":"structure",
       "required":[
-        "aiGuardrailId",
         "assistantId",
+        "aiGuardrailId",
+        "visibilityStatus",
         "blockedInputMessaging",
-        "blockedOutputsMessaging",
-        "visibilityStatus"
+        "blockedOutputsMessaging"
       ],
       "members":{
-        "aiGuardrailId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
-          "location":"uri",
-          "locationName":"aiGuardrailId"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
+          "idempotencyToken":true
         },
         "assistantId":{
           "shape":"UuidOrArn",
@@ -10009,6 +10278,16 @@
           "location":"uri",
           "locationName":"assistantId"
         },
+        "aiGuardrailId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Guardrail.</p>",
+          "location":"uri",
+          "locationName":"aiGuardrailId"
+        },
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the Amazon Q in Connect AI Guardrail.</p>"
+        },
         "blockedInputMessaging":{
           "shape":"AIGuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the AI Guardrail blocks a prompt.</p>"
@@ -10017,38 +10296,29 @@
           "shape":"AIGuardrailBlockedMessaging",
           "documentation":"<p>The message to return when the AI Guardrail blocks a model response.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
-          "idempotencyToken":true
-        },
-        "contentPolicyConfig":{
-          "shape":"AIGuardrailContentPolicyConfig",
-          "documentation":"<p>The content filter policies to configure for the AI Guardrail.</p>"
-        },
-        "contextualGroundingPolicyConfig":{
-          "shape":"AIGuardrailContextualGroundingPolicyConfig",
-          "documentation":"<p>The contextual grounding policy configuration used to create an AI Guardrail.</p>"
-        },
         "description":{
           "shape":"AIGuardrailDescription",
           "documentation":"<p>A description of the AI Guardrail.</p>"
         },
-        "sensitiveInformationPolicyConfig":{
-          "shape":"AIGuardrailSensitiveInformationPolicyConfig",
-          "documentation":"<p>The sensitive information policy to configure for the AI Guardrail.</p>"
-        },
         "topicPolicyConfig":{
           "shape":"AIGuardrailTopicPolicyConfig",
           "documentation":"<p>The topic policies to configure for the AI Guardrail.</p>"
         },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the Amazon Q in Connect AI Guardrail.</p>"
+        "contentPolicyConfig":{
+          "shape":"AIGuardrailContentPolicyConfig",
+          "documentation":"<p>The content filter policies to configure for the AI Guardrail.</p>"
         },
         "wordPolicyConfig":{
           "shape":"AIGuardrailWordPolicyConfig",
           "documentation":"<p>The word policy you configure for the AI Guardrail.</p>"
+        },
+        "sensitiveInformationPolicyConfig":{
+          "shape":"AIGuardrailSensitiveInformationPolicyConfig",
+          "documentation":"<p>The sensitive information policy to configure for the AI Guardrail.</p>"
+        },
+        "contextualGroundingPolicyConfig":{
+          "shape":"AIGuardrailContextualGroundingPolicyConfig",
+          "documentation":"<p>The contextual grounding policy configuration used to create an AI Guardrail.</p>"
         }
       }
     },
@@ -10064,16 +10334,15 @@
     "UpdateAIPromptRequest":{
       "type":"structure",
       "required":[
-        "aiPromptId",
         "assistantId",
+        "aiPromptId",
         "visibilityStatus"
       ],
       "members":{
-        "aiPromptId":{
-          "shape":"UuidOrArnOrEitherWithQualifier",
-          "documentation":"<p>The identifier of the Amazon Q in Connect AI Prompt.</p>",
-          "location":"uri",
-          "locationName":"aiPromptId"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
+          "idempotencyToken":true
         },
         "assistantId":{
           "shape":"UuidOrArn",
@@ -10081,22 +10350,27 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. For more information about idempotency, see <a href=\"http://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\">Making retries safe with idempotent APIs</a>..</p>",
-          "idempotencyToken":true
+        "aiPromptId":{
+          "shape":"UuidOrArnOrEitherWithQualifier",
+          "documentation":"<p>The identifier of the Amazon Q in Connect AI Prompt.</p>",
+          "location":"uri",
+          "locationName":"aiPromptId"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the Amazon Q in Connect AI Prompt.</p>"
+        "visibilityStatus":{
+          "shape":"VisibilityStatus",
+          "documentation":"<p>The visibility status of the Amazon Q in Connect AI prompt.</p>"
         },
         "templateConfiguration":{
           "shape":"AIPromptTemplateConfiguration",
           "documentation":"<p>The configuration of the prompt template for this AI Prompt.</p>"
         },
-        "visibilityStatus":{
-          "shape":"VisibilityStatus",
-          "documentation":"<p>The visibility status of the Amazon Q in Connect AI prompt.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the Amazon Q in Connect AI Prompt.</p>"
+        },
+        "modelId":{
+          "shape":"AIPromptModelIdentifier",
+          "documentation":"<p>The identifier of the model used for this AI Prompt.</p> <note> <p>For information about which models are supported in each Amazon Web Services Region, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/create-ai-prompts.html#cli-create-aiprompt\">Supported models for system/custom prompts</a>.</p> </note>"
         }
       }
     },
@@ -10112,21 +10386,21 @@
     "UpdateAssistantAIAgentRequest":{
       "type":"structure",
       "required":[
-        "aiAgentType",
         "assistantId",
+        "aiAgentType",
         "configuration"
       ],
       "members":{
-        "aiAgentType":{
-          "shape":"AIAgentType",
-          "documentation":"<p>The type of the AI Agent being updated for use by default on the Amazon Q in Connect Assistant.</p>"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
+        "aiAgentType":{
+          "shape":"AIAgentType",
+          "documentation":"<p>The type of the AI Agent being updated for use by default on the Amazon Q in Connect Assistant.</p>"
+        },
         "configuration":{
           "shape":"AIAgentConfigurationData",
           "documentation":"<p>The configuration of the AI Agent being updated for use by default on the Amazon Q in Connect Assistant.</p>"
@@ -10142,25 +10416,29 @@
     "UpdateContentRequest":{
       "type":"structure",
       "required":[
-        "contentId",
-        "knowledgeBaseId"
+        "knowledgeBaseId",
+        "contentId"
       ],
       "members":{
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
         "contentId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the content. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"contentId"
         },
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. This should not be a QUICK_RESPONSES type knowledge base. Can be either the ID or the ARN</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
+        "revisionId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The <code>revisionId</code> of the content resource to update, taken from an earlier call to <code>GetContent</code>, <code>GetContentSummary</code>, <code>SearchContent</code>, or <code>ListContents</code>. If included, this argument acts as an optimistic lock to ensure content was not modified since it was last read. If it has been modified, this API throws a <code>PreconditionFailedException</code>.</p>"
         },
-        "metadata":{
-          "shape":"ContentMetadata",
-          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
+        "title":{
+          "shape":"ContentTitle",
+          "documentation":"<p>The title of the content.</p>"
         },
         "overrideLinkOutUri":{
           "shape":"Uri",
@@ -10170,13 +10448,9 @@
           "shape":"Boolean",
           "documentation":"<p>Unset the existing <code>overrideLinkOutUri</code> if it exists.</p>"
         },
-        "revisionId":{
-          "shape":"NonEmptyString",
-          "documentation":"<p>The <code>revisionId</code> of the content resource to update, taken from an earlier call to <code>GetContent</code>, <code>GetContentSummary</code>, <code>SearchContent</code>, or <code>ListContents</code>. If included, this argument acts as an optimistic lock to ensure content was not modified since it was last read. If it has been modified, this API throws a <code>PreconditionFailedException</code>.</p>"
-        },
-        "title":{
-          "shape":"ContentTitle",
-          "documentation":"<p>The title of the content.</p>"
+        "metadata":{
+          "shape":"ContentMetadata",
+          "documentation":"<p>A key/value map to store attributes without affecting tagging or recommendations. For example, when synchronizing data between an external system and Amazon Q in Connect, you can store an external version identifier as metadata to utilize for determining drift.</p>"
         },
         "uploadId":{
           "shape":"UploadId",
@@ -10228,11 +10502,6 @@
         "messageTemplateId"
       ],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the message template.</p>"
-        },
-        "groupingConfiguration":{"shape":"GroupingConfiguration"},
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
@@ -10248,7 +10517,12 @@
         "name":{
           "shape":"Name",
           "documentation":"<p>The name of the message template.</p>"
-        }
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the message template.</p>"
+        },
+        "groupingConfiguration":{"shape":"GroupingConfiguration"}
       }
     },
     "UpdateMessageTemplateMetadataResponse":{
@@ -10267,29 +10541,29 @@
         "messageTemplateId"
       ],
       "members":{
-        "content":{
-          "shape":"MessageTemplateContentProvider",
-          "documentation":"<p>The content of the message template.</p>"
-        },
-        "defaultAttributes":{
-          "shape":"MessageTemplateAttributes",
-          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
-        },
         "knowledgeBaseId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"knowledgeBaseId"
         },
-        "language":{
-          "shape":"LanguageCode",
-          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
-        },
         "messageTemplateId":{
           "shape":"UuidOrArnOrEitherWithQualifier",
           "documentation":"<p>The identifier of the message template. Can be either the ID or the ARN. It cannot contain any qualifier.</p>",
           "location":"uri",
           "locationName":"messageTemplateId"
+        },
+        "content":{
+          "shape":"MessageTemplateContentProvider",
+          "documentation":"<p>The content of the message template.</p>"
+        },
+        "language":{
+          "shape":"LanguageCode",
+          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
+        },
+        "defaultAttributes":{
+          "shape":"MessageTemplateAttributes",
+          "documentation":"<p>An object that specifies the default values to use for variables in the message template. This object contains different categories of key-value pairs. Each key defines a variable or placeholder in the message template. The corresponding value defines the default value for that variable.</p>"
         }
       }
     },
@@ -10309,9 +10583,21 @@
         "quickResponseId"
       ],
       "members":{
-        "channels":{
-          "shape":"Channels",
-          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
+        "knowledgeBaseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
+          "location":"uri",
+          "locationName":"knowledgeBaseId"
+        },
+        "quickResponseId":{
+          "shape":"UuidOrArn",
+          "documentation":"<p>The identifier of the quick response.</p>",
+          "location":"uri",
+          "locationName":"quickResponseId"
+        },
+        "name":{
+          "shape":"QuickResponseName",
+          "documentation":"<p>The name of the quick response.</p>"
         },
         "content":{
           "shape":"QuickResponseDataProvider",
@@ -10321,53 +10607,41 @@
           "shape":"QuickResponseType",
           "documentation":"<p>The media type of the quick response content.</p> <ul> <li> <p>Use <code>application/x.quickresponse;format=plain</code> for quick response written in plain text.</p> </li> <li> <p>Use <code>application/x.quickresponse;format=markdown</code> for quick response written in richtext.</p> </li> </ul>"
         },
-        "description":{
-          "shape":"QuickResponseDescription",
-          "documentation":"<p>The updated description of the quick response.</p>"
-        },
         "groupingConfiguration":{
           "shape":"GroupingConfiguration",
           "documentation":"<p>The updated grouping configuration of the quick response.</p>"
         },
-        "isActive":{
+        "removeGroupingConfiguration":{
           "shape":"Boolean",
-          "documentation":"<p>Whether the quick response is active. </p>"
-        },
-        "knowledgeBaseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the knowledge base. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
-          "location":"uri",
-          "locationName":"knowledgeBaseId"
-        },
-        "language":{
-          "shape":"LanguageCode",
-          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
-        },
-        "name":{
-          "shape":"QuickResponseName",
-          "documentation":"<p>The name of the quick response.</p>"
+          "documentation":"<p>Whether to remove the grouping configuration of the quick response.</p>"
         },
-        "quickResponseId":{
-          "shape":"UuidOrArn",
-          "documentation":"<p>The identifier of the quick response.</p>",
-          "location":"uri",
-          "locationName":"quickResponseId"
+        "description":{
+          "shape":"QuickResponseDescription",
+          "documentation":"<p>The updated description of the quick response.</p>"
         },
         "removeDescription":{
           "shape":"Boolean",
           "documentation":"<p>Whether to remove the description from the quick response.</p>"
         },
-        "removeGroupingConfiguration":{
-          "shape":"Boolean",
-          "documentation":"<p>Whether to remove the grouping configuration of the quick response.</p>"
+        "shortcutKey":{
+          "shape":"ShortCutKey",
+          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
         },
         "removeShortcutKey":{
           "shape":"Boolean",
           "documentation":"<p>Whether to remove the shortcut key of the quick response.</p>"
         },
-        "shortcutKey":{
-          "shape":"ShortCutKey",
-          "documentation":"<p>The shortcut key of the quick response. The value should be unique across the knowledge base.</p>"
+        "isActive":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether the quick response is active. </p>"
+        },
+        "channels":{
+          "shape":"Channels",
+          "documentation":"<p>The Amazon Connect contact channels this quick response applies to. The supported contact channel types include <code>Chat</code>.</p>"
+        },
+        "language":{
+          "shape":"LanguageCode",
+          "documentation":"<p>The language code value for the language in which the quick response is written. The supported language codes include <code>de_DE</code>, <code>en_US</code>, <code>es_ES</code>, <code>fr_FR</code>, <code>id_ID</code>, <code>it_IT</code>, <code>ja_JP</code>, <code>ko_KR</code>, <code>pt_BR</code>, <code>zh_CN</code>, <code>zh_TW</code> </p>"
         }
       }
     },
@@ -10384,8 +10658,8 @@
       "type":"structure",
       "required":[
         "assistantId",
-        "data",
-        "sessionId"
+        "sessionId",
+        "data"
       ],
       "members":{
         "assistantId":{
@@ -10394,39 +10668,31 @@
           "location":"uri",
           "locationName":"assistantId"
         },
-        "data":{
-          "shape":"RuntimeSessionDataList",
-          "documentation":"<p>The data stored on the Amazon Q in Connect Session.</p>"
-        },
-        "namespace":{
-          "shape":"SessionDataNamespace",
-          "documentation":"<p>The namespace into which the session data is stored. Supported namespaces are: Custom</p>"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"sessionId"
+        },
+        "namespace":{
+          "shape":"SessionDataNamespace",
+          "documentation":"<p>The namespace into which the session data is stored. Supported namespaces are: Custom</p>"
+        },
+        "data":{
+          "shape":"RuntimeSessionDataList",
+          "documentation":"<p>The data stored on the Amazon Q in Connect Session.</p>"
         }
       }
     },
     "UpdateSessionDataResponse":{
       "type":"structure",
       "required":[
-        "data",
-        "namespace",
         "sessionArn",
-        "sessionId"
+        "sessionId",
+        "namespace",
+        "data"
       ],
       "members":{
-        "data":{
-          "shape":"RuntimeSessionDataList",
-          "documentation":"<p>Data stored in the session.</p>"
-        },
-        "namespace":{
-          "shape":"SessionDataNamespace",
-          "documentation":"<p>The namespace into which the session data is stored. Supported namespaces are: Custom</p>"
-        },
         "sessionArn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the session.</p>"
@@ -10434,6 +10700,14 @@
         "sessionId":{
           "shape":"Uuid",
           "documentation":"<p>The identifier of the session.</p>"
+        },
+        "namespace":{
+          "shape":"SessionDataNamespace",
+          "documentation":"<p>The namespace into which the session data is stored. Supported namespaces are: Custom</p>"
+        },
+        "data":{
+          "shape":"RuntimeSessionDataList",
+          "documentation":"<p>Data stored in the session.</p>"
         }
       }
     },
@@ -10444,29 +10718,29 @@
         "sessionId"
       ],
       "members":{
-        "aiAgentConfiguration":{
-          "shape":"AIAgentConfigurationMap",
-          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
-        },
         "assistantId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the Amazon Q in Connect assistant. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"assistantId"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description.</p>"
-        },
         "sessionId":{
           "shape":"UuidOrArn",
           "documentation":"<p>The identifier of the session. Can be either the ID or the ARN. URLs cannot contain the ARN.</p>",
           "location":"uri",
           "locationName":"sessionId"
         },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description.</p>"
+        },
         "tagFilter":{
           "shape":"TagFilter",
           "documentation":"<p>An object that can be used to specify Tag conditions.</p>"
+        },
+        "aiAgentConfiguration":{
+          "shape":"AIAgentConfigurationMap",
+          "documentation":"<p>The configuration of the AI Agents (mapped by AI Agent Type to AI Agent version) that should be used by Amazon Q in Connect for this Session.</p>"
         }
       }
     },
@@ -10517,19 +10791,19 @@
     },
     "Uuid":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
     },
     "UuidOrArn":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$|^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$|^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}"
     },
     "UuidOrArnOrEitherWithQualifier":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(:[A-Z0-9_$]+){0,1}$|^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}(:[A-Z0-9_$]+){0,1}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(:[A-Z0-9_$]+){0,1}$|^arn:[a-z-]*?:wisdom:[a-z0-9-]*?:[0-9]{12}:[a-z-]*?/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(?:/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}){0,2}(:[A-Z0-9_$]+){0,1}"
     },
     "UuidWithQualifier":{
       "type":"string",
-      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(:[A-Z0-9_$]+){0,1}$"
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}(:[A-Z0-9_$]+){0,1}"
     },
     "ValidationException":{
       "type":"structure",
@@ -10578,25 +10852,25 @@
       "type":"structure",
       "required":["urlConfiguration"],
       "members":{
+        "urlConfiguration":{
+          "shape":"UrlConfiguration",
+          "documentation":"<p>The configuration of the URL/URLs for the web content that you want to crawl. You should be authorized to crawl the URLs.</p>"
+        },
         "crawlerLimits":{
           "shape":"WebCrawlerLimits",
           "documentation":"<p>The configuration of crawl limits for the web URLs.</p>"
         },
-        "exclusionFilters":{
-          "shape":"UrlFilterList",
-          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
-        },
         "inclusionFilters":{
           "shape":"UrlFilterList",
           "documentation":"<p>A list of one or more inclusion regular expression patterns to include certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
         },
+        "exclusionFilters":{
+          "shape":"UrlFilterList",
+          "documentation":"<p>A list of one or more exclusion regular expression patterns to exclude certain URLs. If you specify an inclusion and exclusion filter/pattern and both match a URL, the exclusion filter takes precedence and the web content of the URL isn’t crawled.</p>"
+        },
         "scope":{
           "shape":"WebScopeType",
           "documentation":"<p>The scope of what is crawled for your URLs. You can choose to crawl only web pages that belong to the same host or primary domain. For example, only web pages that contain the seed URL <code>https://docs.aws.amazon.com/bedrock/latest/userguide/</code> and no other domains. You can choose to include sub domains in addition to the host or primary domain. For example, web pages that contain <code>aws.amazon.com</code> can also include sub domain <code>docs.aws.amazon.com</code>.</p>"
-        },
-        "urlConfiguration":{
-          "shape":"UrlConfiguration",
-          "documentation":"<p>The configuration of the URL/URLs for the web content that you want to crawl. You should be authorized to crawl the URLs.</p>"
         }
       },
       "documentation":"<p>The configuration details for the web data source.</p>"
@@ -10626,7 +10900,7 @@
     },
     "WebUrl":{
       "type":"string",
-      "pattern":"^https?://[A-Za-z0-9][^\\s]*$"
+      "pattern":"https?://[A-Za-z0-9][^\\s]*"
     }
   },
   "documentation":"<ul> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Operations_Amazon_Q_Connect.html\">Amazon Q actions</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/connect/latest/APIReference/API_Types_Amazon_Q_Connect.html\">Amazon Q data types</a> </p> </li> </ul> <note> <p> <b>Powered by Amazon Bedrock</b>: Amazon Web Services implements <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/abuse-detection.html\">automated abuse detection</a>. Because Amazon Q in Connect is built on Amazon Bedrock, users can take full advantage of the controls implemented in Amazon Bedrock to enforce safety, security, and the responsible use of artificial intelligence (AI).</p> </note> <p>Amazon Q in Connect is a generative AI customer service assistant. It is an LLM-enhanced evolution of Amazon Connect Wisdom that delivers real-time recommendations to help contact center agents resolve customer issues quickly and accurately.</p> <p>Amazon Q in Connect automatically detects customer intent during calls and chats using conversational analytics and natural language understanding (NLU). It then provides agents with immediate, real-time generative responses and suggested actions, and links to relevant documents and articles. Agents can also query Amazon Q in Connect directly using natural language or keywords to answer customer requests.</p> <p>Use the Amazon Q in Connect APIs to create an assistant and a knowledge base, for example, or manage content by uploading custom files.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/connect/latest/adminguide/amazon-q-connect.html\">Use Amazon Q in Connect for generative AI powered agent assistance in real-time</a> in the <i>Amazon Connect Administrator Guide</i>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/waiters-2.json 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/qconnect/2020-10-19/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qconnect/2020-10-19/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://qldb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://qldb-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://qldb.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://qldb.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/paginators-1.json 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-{
-  "pagination": {}
-}
diff -pruN 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/service-2.json 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/qldb/2019-01-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb/2019-01-02/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,1476 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2019-01-02",
-    "endpointPrefix":"qldb",
-    "jsonVersion":"1.0",
-    "protocol":"rest-json",
-    "serviceAbbreviation":"QLDB",
-    "serviceFullName":"Amazon QLDB",
-    "serviceId":"QLDB",
-    "signatureVersion":"v4",
-    "signingName":"qldb",
-    "uid":"qldb-2019-01-02"
-  },
-  "operations":{
-    "CancelJournalKinesisStream":{
-      "name":"CancelJournalKinesisStream",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/ledgers/{name}/journal-kinesis-streams/{streamId}"
-      },
-      "input":{"shape":"CancelJournalKinesisStreamRequest"},
-      "output":{"shape":"CancelJournalKinesisStreamResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Ends a given Amazon QLDB journal stream. Before a stream can be canceled, its current status must be <code>ACTIVE</code>.</p> <p>You can't restart a stream after you cancel it. Canceled QLDB stream resources are subject to a 7-day retention period, so they are automatically deleted after this limit expires.</p>"
-    },
-    "CreateLedger":{
-      "name":"CreateLedger",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers"
-      },
-      "input":{"shape":"CreateLedgerRequest"},
-      "output":{"shape":"CreateLedgerResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceAlreadyExistsException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ResourceInUseException"}
-      ],
-      "documentation":"<p>Creates a new ledger in your Amazon Web Services account in the current Region.</p>"
-    },
-    "DeleteLedger":{
-      "name":"DeleteLedger",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/ledgers/{name}"
-      },
-      "input":{"shape":"DeleteLedgerRequest"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceInUseException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Deletes a ledger and all of its contents. This action is irreversible.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-    },
-    "DescribeJournalKinesisStream":{
-      "name":"DescribeJournalKinesisStream",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers/{name}/journal-kinesis-streams/{streamId}"
-      },
-      "input":{"shape":"DescribeJournalKinesisStreamRequest"},
-      "output":{"shape":"DescribeJournalKinesisStreamResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Returns detailed information about a given Amazon QLDB journal stream. The output includes the Amazon Resource Name (ARN), stream name, current status, creation time, and the parameters of the original stream creation request.</p> <p>This action does not return any expired journal streams. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/streams.create.html#streams.create.states.expiration\">Expiration for terminal streams</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-    },
-    "DescribeJournalS3Export":{
-      "name":"DescribeJournalS3Export",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers/{name}/journal-s3-exports/{exportId}"
-      },
-      "input":{"shape":"DescribeJournalS3ExportRequest"},
-      "output":{"shape":"DescribeJournalS3ExportResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Returns information about a journal export job, including the ledger name, export ID, creation time, current status, and the parameters of the original export creation request.</p> <p>This action does not return any expired export jobs. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.request.html#export-journal.request.expiration\">Export job expiration</a> in the <i>Amazon QLDB Developer Guide</i>.</p> <p>If the export job with the given <code>ExportId</code> doesn't exist, then throws <code>ResourceNotFoundException</code>.</p> <p>If the ledger with the given <code>Name</code> doesn't exist, then throws <code>ResourceNotFoundException</code>.</p>"
-    },
-    "DescribeLedger":{
-      "name":"DescribeLedger",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers/{name}"
-      },
-      "input":{"shape":"DescribeLedgerRequest"},
-      "output":{"shape":"DescribeLedgerResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Returns information about a ledger, including its state, permissions mode, encryption at rest settings, and when it was created.</p>"
-    },
-    "ExportJournalToS3":{
-      "name":"ExportJournalToS3",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers/{name}/journal-s3-exports"
-      },
-      "input":{"shape":"ExportJournalToS3Request"},
-      "output":{"shape":"ExportJournalToS3Response"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Exports journal contents within a date and time range from a ledger into a specified Amazon Simple Storage Service (Amazon S3) bucket. A journal export job can write the data objects in either the text or binary representation of Amazon Ion format, or in <i>JSON Lines</i> text format.</p> <p>If the ledger with the given <code>Name</code> doesn't exist, then throws <code>ResourceNotFoundException</code>.</p> <p>If the ledger with the given <code>Name</code> is in <code>CREATING</code> status, then throws <code>ResourcePreconditionNotMetException</code>.</p> <p>You can initiate up to two concurrent journal export requests for each ledger. Beyond this limit, journal export requests throw <code>LimitExceededException</code>.</p>"
-    },
-    "GetBlock":{
-      "name":"GetBlock",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers/{name}/block"
-      },
-      "input":{"shape":"GetBlockRequest"},
-      "output":{"shape":"GetBlockResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Returns a block object at a specified address in a journal. Also returns a proof of the specified block for verification if <code>DigestTipAddress</code> is provided.</p> <p>For information about the data contents in a block, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/journal-contents.html\">Journal contents</a> in the <i>Amazon QLDB Developer Guide</i>.</p> <p>If the specified ledger doesn't exist or is in <code>DELETING</code> status, then throws <code>ResourceNotFoundException</code>.</p> <p>If the specified ledger is in <code>CREATING</code> status, then throws <code>ResourcePreconditionNotMetException</code>.</p> <p>If no block exists with the specified address, then throws <code>InvalidParameterException</code>.</p>"
-    },
-    "GetDigest":{
-      "name":"GetDigest",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers/{name}/digest"
-      },
-      "input":{"shape":"GetDigestRequest"},
-      "output":{"shape":"GetDigestResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Returns the digest of a ledger at the latest committed block in the journal. The response includes a 256-bit hash value and a block address.</p>"
-    },
-    "GetRevision":{
-      "name":"GetRevision",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers/{name}/revision"
-      },
-      "input":{"shape":"GetRevisionRequest"},
-      "output":{"shape":"GetRevisionResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Returns a revision data object for a specified document ID and block address. Also returns a proof of the specified revision for verification if <code>DigestTipAddress</code> is provided.</p>"
-    },
-    "ListJournalKinesisStreamsForLedger":{
-      "name":"ListJournalKinesisStreamsForLedger",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers/{name}/journal-kinesis-streams"
-      },
-      "input":{"shape":"ListJournalKinesisStreamsForLedgerRequest"},
-      "output":{"shape":"ListJournalKinesisStreamsForLedgerResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Returns all Amazon QLDB journal streams for a given ledger.</p> <p>This action does not return any expired journal streams. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/streams.create.html#streams.create.states.expiration\">Expiration for terminal streams</a> in the <i>Amazon QLDB Developer Guide</i>.</p> <p>This action returns a maximum of <code>MaxResults</code> items. It is paginated so that you can retrieve all the items by calling <code>ListJournalKinesisStreamsForLedger</code> multiple times.</p>"
-    },
-    "ListJournalS3Exports":{
-      "name":"ListJournalS3Exports",
-      "http":{
-        "method":"GET",
-        "requestUri":"/journal-s3-exports"
-      },
-      "input":{"shape":"ListJournalS3ExportsRequest"},
-      "output":{"shape":"ListJournalS3ExportsResponse"},
-      "documentation":"<p>Returns all journal export jobs for all ledgers that are associated with the current Amazon Web Services account and Region.</p> <p>This action returns a maximum of <code>MaxResults</code> items, and is paginated so that you can retrieve all the items by calling <code>ListJournalS3Exports</code> multiple times.</p> <p>This action does not return any expired export jobs. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.request.html#export-journal.request.expiration\">Export job expiration</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-    },
-    "ListJournalS3ExportsForLedger":{
-      "name":"ListJournalS3ExportsForLedger",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers/{name}/journal-s3-exports"
-      },
-      "input":{"shape":"ListJournalS3ExportsForLedgerRequest"},
-      "output":{"shape":"ListJournalS3ExportsForLedgerResponse"},
-      "documentation":"<p>Returns all journal export jobs for a specified ledger.</p> <p>This action returns a maximum of <code>MaxResults</code> items, and is paginated so that you can retrieve all the items by calling <code>ListJournalS3ExportsForLedger</code> multiple times.</p> <p>This action does not return any expired export jobs. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.request.html#export-journal.request.expiration\">Export job expiration</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-    },
-    "ListLedgers":{
-      "name":"ListLedgers",
-      "http":{
-        "method":"GET",
-        "requestUri":"/ledgers"
-      },
-      "input":{"shape":"ListLedgersRequest"},
-      "output":{"shape":"ListLedgersResponse"},
-      "documentation":"<p>Returns all ledgers that are associated with the current Amazon Web Services account and Region.</p> <p>This action returns a maximum of <code>MaxResults</code> items and is paginated so that you can retrieve all the items by calling <code>ListLedgers</code> multiple times.</p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Returns all tags for a specified Amazon QLDB resource.</p>"
-    },
-    "StreamJournalToKinesis":{
-      "name":"StreamJournalToKinesis",
-      "http":{
-        "method":"POST",
-        "requestUri":"/ledgers/{name}/journal-kinesis-streams"
-      },
-      "input":{"shape":"StreamJournalToKinesisRequest"},
-      "output":{"shape":"StreamJournalToKinesisResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourcePreconditionNotMetException"}
-      ],
-      "documentation":"<p>Creates a journal stream for a given Amazon QLDB ledger. The stream captures every document revision that is committed to the ledger's journal and delivers the data to a specified Amazon Kinesis Data Streams resource.</p>"
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Adds one or more tags to a specified Amazon QLDB resource.</p> <p>A resource can have up to 50 tags. If you try to create more than 50 tags for a resource, your request fails and returns an error.</p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Removes one or more tags from a specified Amazon QLDB resource. You can specify up to 50 tag keys to remove.</p>"
-    },
-    "UpdateLedger":{
-      "name":"UpdateLedger",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/ledgers/{name}"
-      },
-      "input":{"shape":"UpdateLedgerRequest"},
-      "output":{"shape":"UpdateLedgerResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates properties on a ledger.</p>"
-    },
-    "UpdateLedgerPermissionsMode":{
-      "name":"UpdateLedgerPermissionsMode",
-      "http":{
-        "method":"PATCH",
-        "requestUri":"/ledgers/{name}/permissions-mode"
-      },
-      "input":{"shape":"UpdateLedgerPermissionsModeRequest"},
-      "output":{"shape":"UpdateLedgerPermissionsModeResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<p>Updates the permissions mode of a ledger.</p> <important> <p>Before you switch to the <code>STANDARD</code> permissions mode, you must first create all required IAM policies and table tags to avoid disruption to your users. To learn more, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html#ledger-mgmt.basics.update-permissions.migrating\">Migrating to the standard permissions mode</a> in the <i>Amazon QLDB Developer Guide</i>.</p> </important>"
-    }
-  },
-  "shapes":{
-    "Arn":{
-      "type":"string",
-      "max":1600,
-      "min":20
-    },
-    "Boolean":{"type":"boolean"},
-    "CancelJournalKinesisStreamRequest":{
-      "type":"structure",
-      "required":[
-        "LedgerName",
-        "StreamId"
-      ],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "StreamId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the QLDB journal stream to be canceled.</p>",
-          "location":"uri",
-          "locationName":"streamId"
-        }
-      }
-    },
-    "CancelJournalKinesisStreamResponse":{
-      "type":"structure",
-      "members":{
-        "StreamId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (Base62-encoded text) of the canceled QLDB journal stream.</p>"
-        }
-      }
-    },
-    "CreateLedgerRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "PermissionsMode"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger that you want to create. The name must be unique among all of the ledgers in your Amazon Web Services account in the current Region.</p> <p>Naming constraints for ledger names are defined in <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming\">Quotas in Amazon QLDB</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-        },
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>The key-value pairs to add as tags to the ledger that you want to create. Tag keys are case sensitive. Tag values are case sensitive and can be null.</p>"
-        },
-        "PermissionsMode":{
-          "shape":"PermissionsMode",
-          "documentation":"<p>The permissions mode to assign to the ledger that you want to create. This parameter can have one of the following values:</p> <ul> <li> <p> <code>ALLOW_ALL</code>: A legacy permissions mode that enables access control with API-level granularity for ledgers.</p> <p>This mode allows users who have the <code>SendCommand</code> API permission for this ledger to run all PartiQL commands (hence, <code>ALLOW_ALL</code>) on any tables in the specified ledger. This mode disregards any table-level or command-level IAM permissions policies that you create for the ledger.</p> </li> <li> <p> <code>STANDARD</code>: (<i>Recommended</i>) A permissions mode that enables access control with finer granularity for ledgers, tables, and PartiQL commands.</p> <p>By default, this mode denies all user requests to run any PartiQL commands on any tables in this ledger. To allow PartiQL commands to run, you must create IAM permissions policies for specific table resources and PartiQL actions, in addition to the <code>SendCommand</code> API permission for the ledger. For information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started-standard-mode.html\">Getting started with the standard permissions mode</a> in the <i>Amazon QLDB Developer Guide</i>.</p> </li> </ul> <note> <p>We strongly recommend using the <code>STANDARD</code> permissions mode to maximize the security of your ledger data.</p> </note>"
-        },
-        "DeletionProtection":{
-          "shape":"DeletionProtection",
-          "documentation":"<p>Specifies whether the ledger is protected from being deleted by any user. If not defined during ledger creation, this feature is enabled (<code>true</code>) by default.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-        },
-        "KmsKey":{
-          "shape":"KmsKey",
-          "documentation":"<p>The key in Key Management Service (KMS) to use for encryption of data at rest in the ledger. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/encryption-at-rest.html\">Encryption at rest</a> in the <i>Amazon QLDB Developer Guide</i>.</p> <p>Use one of the following options to specify this parameter:</p> <ul> <li> <p> <code>AWS_OWNED_KMS_KEY</code>: Use an KMS key that is owned and managed by Amazon Web Services on your behalf.</p> </li> <li> <p> <b>Undefined</b>: By default, use an Amazon Web Services owned KMS key.</p> </li> <li> <p> <b>A valid symmetric customer managed KMS key</b>: Use the specified symmetric encryption KMS key in your account that you create, own, and manage.</p> <p>Amazon QLDB does not support asymmetric keys. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Using symmetric and asymmetric keys</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> </ul> <p>To specify a customer managed KMS key, you can use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
-        }
-      }
-    },
-    "CreateLedgerResponse":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "Arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the ledger.</p>"
-        },
-        "State":{
-          "shape":"LedgerState",
-          "documentation":"<p>The current status of the ledger.</p>"
-        },
-        "CreationDateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the ledger was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        },
-        "PermissionsMode":{
-          "shape":"PermissionsMode",
-          "documentation":"<p>The permissions mode of the ledger that you created.</p>"
-        },
-        "DeletionProtection":{
-          "shape":"DeletionProtection",
-          "documentation":"<p>Specifies whether the ledger is protected from being deleted by any user. If not defined during ledger creation, this feature is enabled (<code>true</code>) by default.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-        },
-        "KmsKeyArn":{
-          "shape":"Arn",
-          "documentation":"<p>The ARN of the customer managed KMS key that the ledger uses for encryption at rest. If this parameter is undefined, the ledger uses an Amazon Web Services owned KMS key for encryption.</p>"
-        }
-      }
-    },
-    "DeleteLedgerRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger that you want to delete.</p>",
-          "location":"uri",
-          "locationName":"name"
-        }
-      }
-    },
-    "DeletionProtection":{"type":"boolean"},
-    "DescribeJournalKinesisStreamRequest":{
-      "type":"structure",
-      "required":[
-        "LedgerName",
-        "StreamId"
-      ],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "StreamId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the QLDB journal stream to describe.</p>",
-          "location":"uri",
-          "locationName":"streamId"
-        }
-      }
-    },
-    "DescribeJournalKinesisStreamResponse":{
-      "type":"structure",
-      "members":{
-        "Stream":{
-          "shape":"JournalKinesisStreamDescription",
-          "documentation":"<p>Information about the QLDB journal stream returned by a <code>DescribeJournalS3Export</code> request.</p>"
-        }
-      }
-    },
-    "DescribeJournalS3ExportRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "ExportId"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "ExportId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the journal export job to describe.</p>",
-          "location":"uri",
-          "locationName":"exportId"
-        }
-      }
-    },
-    "DescribeJournalS3ExportResponse":{
-      "type":"structure",
-      "required":["ExportDescription"],
-      "members":{
-        "ExportDescription":{
-          "shape":"JournalS3ExportDescription",
-          "documentation":"<p>Information about the journal export job returned by a <code>DescribeJournalS3Export</code> request.</p>"
-        }
-      }
-    },
-    "DescribeLedgerRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger that you want to describe.</p>",
-          "location":"uri",
-          "locationName":"name"
-        }
-      }
-    },
-    "DescribeLedgerResponse":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "Arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the ledger.</p>"
-        },
-        "State":{
-          "shape":"LedgerState",
-          "documentation":"<p>The current status of the ledger.</p>"
-        },
-        "CreationDateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the ledger was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        },
-        "PermissionsMode":{
-          "shape":"PermissionsMode",
-          "documentation":"<p>The permissions mode of the ledger.</p>"
-        },
-        "DeletionProtection":{
-          "shape":"DeletionProtection",
-          "documentation":"<p>Specifies whether the ledger is protected from being deleted by any user. If not defined during ledger creation, this feature is enabled (<code>true</code>) by default.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-        },
-        "EncryptionDescription":{
-          "shape":"LedgerEncryptionDescription",
-          "documentation":"<p>Information about the encryption of data at rest in the ledger. This includes the current status, the KMS key, and when the key became inaccessible (in the case of an error). If this parameter is undefined, the ledger uses an Amazon Web Services owned KMS key for encryption.</p>"
-        }
-      }
-    },
-    "Digest":{
-      "type":"blob",
-      "max":32,
-      "min":32
-    },
-    "EncryptionStatus":{
-      "type":"string",
-      "enum":[
-        "ENABLED",
-        "UPDATING",
-        "KMS_KEY_INACCESSIBLE"
-      ]
-    },
-    "ErrorCause":{
-      "type":"string",
-      "enum":[
-        "KINESIS_STREAM_NOT_FOUND",
-        "IAM_PERMISSION_REVOKED"
-      ]
-    },
-    "ErrorMessage":{"type":"string"},
-    "ExportJournalToS3Request":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "InclusiveStartTime",
-        "ExclusiveEndTime",
-        "S3ExportConfiguration",
-        "RoleArn"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "InclusiveStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The inclusive start date and time for the range of journal contents to export.</p> <p>The <code>InclusiveStartTime</code> must be in <code>ISO 8601</code> date and time format and in Universal Coordinated Time (UTC). For example: <code>2019-06-13T21:36:34Z</code>.</p> <p>The <code>InclusiveStartTime</code> must be before <code>ExclusiveEndTime</code>.</p> <p>If you provide an <code>InclusiveStartTime</code> that is before the ledger's <code>CreationDateTime</code>, Amazon QLDB defaults it to the ledger's <code>CreationDateTime</code>.</p>"
-        },
-        "ExclusiveEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The exclusive end date and time for the range of journal contents to export.</p> <p>The <code>ExclusiveEndTime</code> must be in <code>ISO 8601</code> date and time format and in Universal Coordinated Time (UTC). For example: <code>2019-06-13T21:36:34Z</code>.</p> <p>The <code>ExclusiveEndTime</code> must be less than or equal to the current UTC date and time.</p>"
-        },
-        "S3ExportConfiguration":{
-          "shape":"S3ExportConfiguration",
-          "documentation":"<p>The configuration settings of the Amazon S3 bucket destination for your export request.</p>"
-        },
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal export job to do the following:</p> <ul> <li> <p>Write objects into your Amazon S3 bucket.</p> </li> <li> <p>(Optional) Use your customer managed key in Key Management Service (KMS) for server-side encryption of your exported data.</p> </li> </ul> <p>To pass a role to QLDB when requesting a journal export, you must have permissions to perform the <code>iam:PassRole</code> action on the IAM role resource. This is required for all journal export requests.</p>"
-        },
-        "OutputFormat":{
-          "shape":"OutputFormat",
-          "documentation":"<p>The output format of your exported journal data. A journal export job can write the data objects in either the text or binary representation of <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/ion.html\">Amazon Ion</a> format, or in <a href=\"https://jsonlines.org/\">JSON Lines</a> text format.</p> <p>Default: <code>ION_TEXT</code> </p> <p>In JSON Lines format, each journal block in an exported data object is a valid JSON object that is delimited by a newline. You can use this format to directly integrate JSON exports with analytics tools such as Amazon Athena and Glue because these services can parse newline-delimited JSON automatically.</p>"
-        }
-      }
-    },
-    "ExportJournalToS3Response":{
-      "type":"structure",
-      "required":["ExportId"],
-      "members":{
-        "ExportId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) that QLDB assigns to each journal export job.</p> <p>To describe your export request and check the status of the job, you can use <code>ExportId</code> to call <code>DescribeJournalS3Export</code>.</p>"
-        }
-      }
-    },
-    "ExportStatus":{
-      "type":"string",
-      "enum":[
-        "IN_PROGRESS",
-        "COMPLETED",
-        "CANCELLED"
-      ]
-    },
-    "GetBlockRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "BlockAddress"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "BlockAddress":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The location of the block that you want to request. An address is an Amazon Ion structure that has two fields: <code>strandId</code> and <code>sequenceNo</code>.</p> <p>For example: <code>{strandId:\"BlFTjlSXze9BIh1KOszcE3\",sequenceNo:14}</code>.</p>"
-        },
-        "DigestTipAddress":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The latest block location covered by the digest for which to request a proof. An address is an Amazon Ion structure that has two fields: <code>strandId</code> and <code>sequenceNo</code>.</p> <p>For example: <code>{strandId:\"BlFTjlSXze9BIh1KOszcE3\",sequenceNo:49}</code>.</p>"
-        }
-      }
-    },
-    "GetBlockResponse":{
-      "type":"structure",
-      "required":["Block"],
-      "members":{
-        "Block":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The block data object in Amazon Ion format.</p>"
-        },
-        "Proof":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The proof object in Amazon Ion format returned by a <code>GetBlock</code> request. A proof contains the list of hash values required to recalculate the specified digest using a Merkle tree, starting with the specified block.</p>"
-        }
-      }
-    },
-    "GetDigestRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        }
-      }
-    },
-    "GetDigestResponse":{
-      "type":"structure",
-      "required":[
-        "Digest",
-        "DigestTipAddress"
-      ],
-      "members":{
-        "Digest":{
-          "shape":"Digest",
-          "documentation":"<p>The 256-bit hash value representing the digest returned by a <code>GetDigest</code> request.</p>"
-        },
-        "DigestTipAddress":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The latest block location covered by the digest that you requested. An address is an Amazon Ion structure that has two fields: <code>strandId</code> and <code>sequenceNo</code>.</p>"
-        }
-      }
-    },
-    "GetRevisionRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "BlockAddress",
-        "DocumentId"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "BlockAddress":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The block location of the document revision to be verified. An address is an Amazon Ion structure that has two fields: <code>strandId</code> and <code>sequenceNo</code>.</p> <p>For example: <code>{strandId:\"BlFTjlSXze9BIh1KOszcE3\",sequenceNo:14}</code>.</p>"
-        },
-        "DocumentId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the document to be verified.</p>"
-        },
-        "DigestTipAddress":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The latest block location covered by the digest for which to request a proof. An address is an Amazon Ion structure that has two fields: <code>strandId</code> and <code>sequenceNo</code>.</p> <p>For example: <code>{strandId:\"BlFTjlSXze9BIh1KOszcE3\",sequenceNo:49}</code>.</p>"
-        }
-      }
-    },
-    "GetRevisionResponse":{
-      "type":"structure",
-      "required":["Revision"],
-      "members":{
-        "Proof":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The proof object in Amazon Ion format returned by a <code>GetRevision</code> request. A proof contains the list of hash values that are required to recalculate the specified digest using a Merkle tree, starting with the specified document revision.</p>"
-        },
-        "Revision":{
-          "shape":"ValueHolder",
-          "documentation":"<p>The document revision data object in Amazon Ion format.</p>"
-        }
-      }
-    },
-    "InvalidParameterException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ParameterName":{
-          "shape":"ParameterName",
-          "documentation":"<p>The name of the invalid parameter.</p>"
-        }
-      },
-      "documentation":"<p>One or more parameters in the request aren't valid.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "IonText":{
-      "type":"string",
-      "max":1048576,
-      "min":1,
-      "sensitive":true
-    },
-    "JournalKinesisStreamDescription":{
-      "type":"structure",
-      "required":[
-        "LedgerName",
-        "RoleArn",
-        "StreamId",
-        "Status",
-        "KinesisConfiguration",
-        "StreamName"
-      ],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "CreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the QLDB journal stream was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        },
-        "InclusiveStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The inclusive start date and time from which to start streaming journal data.</p>"
-        },
-        "ExclusiveEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The exclusive date and time that specifies when the stream ends. If this parameter is undefined, the stream runs indefinitely until you cancel it.</p>"
-        },
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.</p>"
-        },
-        "StreamId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the QLDB journal stream.</p>"
-        },
-        "Arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the QLDB journal stream.</p>"
-        },
-        "Status":{
-          "shape":"StreamStatus",
-          "documentation":"<p>The current state of the QLDB journal stream.</p>"
-        },
-        "KinesisConfiguration":{
-          "shape":"KinesisConfiguration",
-          "documentation":"<p>The configuration settings of the Amazon Kinesis Data Streams destination for a QLDB journal stream.</p>"
-        },
-        "ErrorCause":{
-          "shape":"ErrorCause",
-          "documentation":"<p>The error message that describes the reason that a stream has a status of <code>IMPAIRED</code> or <code>FAILED</code>. This is not applicable to streams that have other status values.</p>"
-        },
-        "StreamName":{
-          "shape":"StreamName",
-          "documentation":"<p>The user-defined name of the QLDB journal stream.</p>"
-        }
-      },
-      "documentation":"<p>Information about an Amazon QLDB journal stream, including the Amazon Resource Name (ARN), stream name, creation time, current status, and the parameters of the original stream creation request.</p>"
-    },
-    "JournalKinesisStreamDescriptionList":{
-      "type":"list",
-      "member":{"shape":"JournalKinesisStreamDescription"}
-    },
-    "JournalS3ExportDescription":{
-      "type":"structure",
-      "required":[
-        "LedgerName",
-        "ExportId",
-        "ExportCreationTime",
-        "Status",
-        "InclusiveStartTime",
-        "ExclusiveEndTime",
-        "S3ExportConfiguration",
-        "RoleArn"
-      ],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "ExportId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) of the journal export job.</p>"
-        },
-        "ExportCreationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the export job was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        },
-        "Status":{
-          "shape":"ExportStatus",
-          "documentation":"<p>The current state of the journal export job.</p>"
-        },
-        "InclusiveStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The inclusive start date and time for the range of journal contents that was specified in the original export request.</p>"
-        },
-        "ExclusiveEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The exclusive end date and time for the range of journal contents that was specified in the original export request.</p>"
-        },
-        "S3ExportConfiguration":{"shape":"S3ExportConfiguration"},
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal export job to do the following:</p> <ul> <li> <p>Write objects into your Amazon Simple Storage Service (Amazon S3) bucket.</p> </li> <li> <p>(Optional) Use your customer managed key in Key Management Service (KMS) for server-side encryption of your exported data.</p> </li> </ul>"
-        },
-        "OutputFormat":{
-          "shape":"OutputFormat",
-          "documentation":"<p>The output format of the exported journal data.</p>"
-        }
-      },
-      "documentation":"<p>Information about a journal export job, including the ledger name, export ID, creation time, current status, and the parameters of the original export creation request.</p>"
-    },
-    "JournalS3ExportList":{
-      "type":"list",
-      "member":{"shape":"JournalS3ExportDescription"}
-    },
-    "KinesisConfiguration":{
-      "type":"structure",
-      "required":["StreamArn"],
-      "members":{
-        "StreamArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Kinesis Data Streams resource.</p>"
-        },
-        "AggregationEnabled":{
-          "shape":"Boolean",
-          "documentation":"<p>Enables QLDB to publish multiple data records in a single Kinesis Data Streams record, increasing the number of records sent per API call.</p> <p>Default: <code>True</code> </p> <important> <p>Record aggregation has important implications for processing records and requires de-aggregation in your stream consumer. To learn more, see <a href=\"https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-concepts.html\">KPL Key Concepts</a> and <a href=\"https://docs.aws.amazon.com/streams/latest/dev/kinesis-kpl-consumer-deaggregation.html\">Consumer De-aggregation</a> in the <i>Amazon Kinesis Data Streams Developer Guide</i>.</p> </important>"
-        }
-      },
-      "documentation":"<p>The configuration settings of the Amazon Kinesis Data Streams destination for an Amazon QLDB journal stream.</p>"
-    },
-    "KmsKey":{
-      "type":"string",
-      "max":1600
-    },
-    "LedgerEncryptionDescription":{
-      "type":"structure",
-      "required":[
-        "KmsKeyArn",
-        "EncryptionStatus"
-      ],
-      "members":{
-        "KmsKeyArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the customer managed KMS key that the ledger uses for encryption at rest. If this parameter is undefined, the ledger uses an Amazon Web Services owned KMS key for encryption. It will display <code>AWS_OWNED_KMS_KEY</code> when updating the ledger's encryption configuration to the Amazon Web Services owned KMS key.</p>"
-        },
-        "EncryptionStatus":{
-          "shape":"EncryptionStatus",
-          "documentation":"<p>The current state of encryption at rest for the ledger. This can be one of the following values:</p> <ul> <li> <p> <code>ENABLED</code>: Encryption is fully enabled using the specified key.</p> </li> <li> <p> <code>UPDATING</code>: The ledger is actively processing the specified key change.</p> <p>Key changes in QLDB are asynchronous. The ledger is fully accessible without any performance impact while the key change is being processed. The amount of time it takes to update a key varies depending on the ledger size.</p> </li> <li> <p> <code>KMS_KEY_INACCESSIBLE</code>: The specified customer managed KMS key is not accessible, and the ledger is impaired. Either the key was disabled or deleted, or the grants on the key were revoked. When a ledger is impaired, it is not accessible and does not accept any read or write requests.</p> <p>An impaired ledger automatically returns to an active state after you restore the grants on the key, or re-enable the key that was disabled. However, deleting a customer managed KMS key is irreversible. After a key is deleted, you can no longer access the ledgers that are protected with that key, and the data becomes unrecoverable permanently.</p> </li> </ul>"
-        },
-        "InaccessibleKmsKeyDateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the KMS key first became inaccessible, in the case of an error. (Epoch time format is the number of seconds that have elapsed since 12:00:00 AM January 1, 1970 UTC.)</p> <p>This parameter is undefined if the KMS key is accessible.</p>"
-        }
-      },
-      "documentation":"<p>Information about the encryption of data at rest in an Amazon QLDB ledger. This includes the current status, the key in Key Management Service (KMS), and when the key became inaccessible (in the case of an error).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/encryption-at-rest.html\">Encryption at rest</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-    },
-    "LedgerList":{
-      "type":"list",
-      "member":{"shape":"LedgerSummary"}
-    },
-    "LedgerName":{
-      "type":"string",
-      "max":32,
-      "min":1,
-      "pattern":"(?!^.*--)(?!^[0-9]+$)(?!^-)(?!.*-$)^[A-Za-z0-9-]+$"
-    },
-    "LedgerState":{
-      "type":"string",
-      "enum":[
-        "CREATING",
-        "ACTIVE",
-        "DELETING",
-        "DELETED"
-      ]
-    },
-    "LedgerSummary":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "State":{
-          "shape":"LedgerState",
-          "documentation":"<p>The current status of the ledger.</p>"
-        },
-        "CreationDateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the ledger was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        }
-      },
-      "documentation":"<p>Information about a ledger, including its name, state, and when it was created.</p>"
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
-        }
-      },
-      "documentation":"<p>You have reached the limit on the maximum number of resources allowed.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ListJournalKinesisStreamsForLedgerRequest":{
-      "type":"structure",
-      "required":["LedgerName"],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single <code>ListJournalKinesisStreamsForLedger</code> request. (The actual number of results returned might be fewer.)</p>",
-          "location":"querystring",
-          "locationName":"max_results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token, indicating that you want to retrieve the next page of results. If you received a value for <code>NextToken</code> in the response from a previous <code>ListJournalKinesisStreamsForLedger</code> call, you should use that value as input here.</p>",
-          "location":"querystring",
-          "locationName":"next_token"
-        }
-      }
-    },
-    "ListJournalKinesisStreamsForLedgerResponse":{
-      "type":"structure",
-      "members":{
-        "Streams":{
-          "shape":"JournalKinesisStreamDescriptionList",
-          "documentation":"<p>The QLDB journal streams that are currently associated with the given ledger.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<ul> <li> <p>If <code>NextToken</code> is empty, the last page of results has been processed and there are no more results to be retrieved.</p> </li> <li> <p>If <code>NextToken</code> is <i>not</i> empty, more results are available. To retrieve the next page of results, use the value of <code>NextToken</code> in a subsequent <code>ListJournalKinesisStreamsForLedger</code> call.</p> </li> </ul>"
-        }
-      }
-    },
-    "ListJournalS3ExportsForLedgerRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single <code>ListJournalS3ExportsForLedger</code> request. (The actual number of results returned might be fewer.)</p>",
-          "location":"querystring",
-          "locationName":"max_results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token, indicating that you want to retrieve the next page of results. If you received a value for <code>NextToken</code> in the response from a previous <code>ListJournalS3ExportsForLedger</code> call, then you should use that value as input here.</p>",
-          "location":"querystring",
-          "locationName":"next_token"
-        }
-      }
-    },
-    "ListJournalS3ExportsForLedgerResponse":{
-      "type":"structure",
-      "members":{
-        "JournalS3Exports":{
-          "shape":"JournalS3ExportList",
-          "documentation":"<p>The journal export jobs that are currently associated with the specified ledger.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<ul> <li> <p>If <code>NextToken</code> is empty, then the last page of results has been processed and there are no more results to be retrieved.</p> </li> <li> <p>If <code>NextToken</code> is <i>not</i> empty, then there are more results available. To retrieve the next page of results, use the value of <code>NextToken</code> in a subsequent <code>ListJournalS3ExportsForLedger</code> call.</p> </li> </ul>"
-        }
-      }
-    },
-    "ListJournalS3ExportsRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single <code>ListJournalS3Exports</code> request. (The actual number of results returned might be fewer.)</p>",
-          "location":"querystring",
-          "locationName":"max_results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token, indicating that you want to retrieve the next page of results. If you received a value for <code>NextToken</code> in the response from a previous <code>ListJournalS3Exports</code> call, then you should use that value as input here.</p>",
-          "location":"querystring",
-          "locationName":"next_token"
-        }
-      }
-    },
-    "ListJournalS3ExportsResponse":{
-      "type":"structure",
-      "members":{
-        "JournalS3Exports":{
-          "shape":"JournalS3ExportList",
-          "documentation":"<p>The journal export jobs for all ledgers that are associated with the current Amazon Web Services account and Region.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<ul> <li> <p>If <code>NextToken</code> is empty, then the last page of results has been processed and there are no more results to be retrieved.</p> </li> <li> <p>If <code>NextToken</code> is <i>not</i> empty, then there are more results available. To retrieve the next page of results, use the value of <code>NextToken</code> in a subsequent <code>ListJournalS3Exports</code> call.</p> </li> </ul>"
-        }
-      }
-    },
-    "ListLedgersRequest":{
-      "type":"structure",
-      "members":{
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single <code>ListLedgers</code> request. (The actual number of results returned might be fewer.)</p>",
-          "location":"querystring",
-          "locationName":"max_results"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token, indicating that you want to retrieve the next page of results. If you received a value for <code>NextToken</code> in the response from a previous <code>ListLedgers</code> call, then you should use that value as input here.</p>",
-          "location":"querystring",
-          "locationName":"next_token"
-        }
-      }
-    },
-    "ListLedgersResponse":{
-      "type":"structure",
-      "members":{
-        "Ledgers":{
-          "shape":"LedgerList",
-          "documentation":"<p>The ledgers that are associated with the current Amazon Web Services account and Region.</p>"
-        },
-        "NextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token, indicating whether there are more results available:</p> <ul> <li> <p>If <code>NextToken</code> is empty, then the last page of results has been processed and there are no more results to be retrieved.</p> </li> <li> <p>If <code>NextToken</code> is <i>not</i> empty, then there are more results available. To retrieve the next page of results, use the value of <code>NextToken</code> in a subsequent <code>ListLedgers</code> call.</p> </li> </ul>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["ResourceArn"],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for which to list the tags. For example:</p> <p> <code>arn:aws:qldb:us-east-1:123456789012:ledger/exampleLedger</code> </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags that are currently associated with the specified Amazon QLDB resource.</p>"
-        }
-      }
-    },
-    "MaxResults":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "NextToken":{
-      "type":"string",
-      "max":1024,
-      "min":4,
-      "pattern":"^[A-Za-z-0-9+/=]+$"
-    },
-    "OutputFormat":{
-      "type":"string",
-      "enum":[
-        "ION_BINARY",
-        "ION_TEXT",
-        "JSON"
-      ]
-    },
-    "ParameterName":{"type":"string"},
-    "PermissionsMode":{
-      "type":"string",
-      "enum":[
-        "ALLOW_ALL",
-        "STANDARD"
-      ]
-    },
-    "ResourceAlreadyExistsException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
-        },
-        "ResourceName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The specified resource already exists.</p>",
-      "error":{"httpStatusCode":409},
-      "exception":true
-    },
-    "ResourceInUseException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
-        },
-        "ResourceName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The specified resource can't be modified at this time.</p>",
-      "error":{"httpStatusCode":409},
-      "exception":true
-    },
-    "ResourceName":{"type":"string"},
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
-        },
-        "ResourceName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The specified resource doesn't exist.</p>",
-      "error":{"httpStatusCode":404},
-      "exception":true
-    },
-    "ResourcePreconditionNotMetException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "ResourceType":{
-          "shape":"ResourceType",
-          "documentation":"<p>The type of resource.</p>"
-        },
-        "ResourceName":{
-          "shape":"ResourceName",
-          "documentation":"<p>The name of the resource.</p>"
-        }
-      },
-      "documentation":"<p>The operation failed because a condition wasn't satisfied in advance.</p>",
-      "error":{"httpStatusCode":412},
-      "exception":true
-    },
-    "ResourceType":{"type":"string"},
-    "S3Bucket":{
-      "type":"string",
-      "max":255,
-      "min":3,
-      "pattern":"^[A-Za-z-0-9-_.]+$"
-    },
-    "S3EncryptionConfiguration":{
-      "type":"structure",
-      "required":["ObjectEncryptionType"],
-      "members":{
-        "ObjectEncryptionType":{
-          "shape":"S3ObjectEncryptionType",
-          "documentation":"<p>The Amazon S3 object encryption type.</p> <p>To learn more about server-side encryption options in Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Protecting Data Using Server-Side Encryption</a> in the <i>Amazon S3 Developer Guide</i>.</p>"
-        },
-        "KmsKeyArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a symmetric encryption key in Key Management Service (KMS). Amazon S3 does not support asymmetric KMS keys.</p> <p>You must provide a <code>KmsKeyArn</code> if you specify <code>SSE_KMS</code> as the <code>ObjectEncryptionType</code>.</p> <p> <code>KmsKeyArn</code> is not required if you specify <code>SSE_S3</code> as the <code>ObjectEncryptionType</code>.</p>"
-        }
-      },
-      "documentation":"<p>The encryption settings that are used by a journal export job to write data in an Amazon Simple Storage Service (Amazon S3) bucket.</p>"
-    },
-    "S3ExportConfiguration":{
-      "type":"structure",
-      "required":[
-        "Bucket",
-        "Prefix",
-        "EncryptionConfiguration"
-      ],
-      "members":{
-        "Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The Amazon S3 bucket name in which a journal export job writes the journal contents.</p> <p>The bucket name must comply with the Amazon S3 bucket naming conventions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html\">Bucket Restrictions and Limitations</a> in the <i>Amazon S3 Developer Guide</i>.</p>"
-        },
-        "Prefix":{
-          "shape":"S3Prefix",
-          "documentation":"<p>The prefix for the Amazon S3 bucket in which a journal export job writes the journal contents.</p> <p>The prefix must comply with Amazon S3 key naming rules and restrictions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html\">Object Key and Metadata</a> in the <i>Amazon S3 Developer Guide</i>.</p> <p>The following are examples of valid <code>Prefix</code> values:</p> <ul> <li> <p> <code>JournalExports-ForMyLedger/Testing/</code> </p> </li> <li> <p> <code>JournalExports</code> </p> </li> <li> <p> <code>My:Tests/</code> </p> </li> </ul>"
-        },
-        "EncryptionConfiguration":{
-          "shape":"S3EncryptionConfiguration",
-          "documentation":"<p>The encryption settings that are used by a journal export job to write data in an Amazon S3 bucket.</p>"
-        }
-      },
-      "documentation":"<p>The Amazon Simple Storage Service (Amazon S3) bucket location in which a journal export job writes the journal contents.</p>"
-    },
-    "S3ObjectEncryptionType":{
-      "type":"string",
-      "enum":[
-        "SSE_KMS",
-        "SSE_S3",
-        "NO_ENCRYPTION"
-      ]
-    },
-    "S3Prefix":{
-      "type":"string",
-      "max":128,
-      "min":0
-    },
-    "StreamJournalToKinesisRequest":{
-      "type":"structure",
-      "required":[
-        "LedgerName",
-        "RoleArn",
-        "InclusiveStartTime",
-        "KinesisConfiguration",
-        "StreamName"
-      ],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "RoleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that grants QLDB permissions for a journal stream to write data records to a Kinesis Data Streams resource.</p> <p>To pass a role to QLDB when requesting a journal stream, you must have permissions to perform the <code>iam:PassRole</code> action on the IAM role resource. This is required for all journal stream requests.</p>"
-        },
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>The key-value pairs to add as tags to the stream that you want to create. Tag keys are case sensitive. Tag values are case sensitive and can be null.</p>"
-        },
-        "InclusiveStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The inclusive start date and time from which to start streaming journal data. This parameter must be in <code>ISO 8601</code> date and time format and in Universal Coordinated Time (UTC). For example: <code>2019-06-13T21:36:34Z</code>.</p> <p>The <code>InclusiveStartTime</code> cannot be in the future and must be before <code>ExclusiveEndTime</code>.</p> <p>If you provide an <code>InclusiveStartTime</code> that is before the ledger's <code>CreationDateTime</code>, QLDB effectively defaults it to the ledger's <code>CreationDateTime</code>.</p>"
-        },
-        "ExclusiveEndTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The exclusive date and time that specifies when the stream ends. If you don't define this parameter, the stream runs indefinitely until you cancel it.</p> <p>The <code>ExclusiveEndTime</code> must be in <code>ISO 8601</code> date and time format and in Universal Coordinated Time (UTC). For example: <code>2019-06-13T21:36:34Z</code>.</p>"
-        },
-        "KinesisConfiguration":{
-          "shape":"KinesisConfiguration",
-          "documentation":"<p>The configuration settings of the Kinesis Data Streams destination for your stream request.</p>"
-        },
-        "StreamName":{
-          "shape":"StreamName",
-          "documentation":"<p>The name that you want to assign to the QLDB journal stream. User-defined names can help identify and indicate the purpose of a stream.</p> <p>Your stream name must be unique among other <i>active</i> streams for a given ledger. Stream names have the same naming constraints as ledger names, as defined in <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html#limits.naming\">Quotas in Amazon QLDB</a> in the <i>Amazon QLDB Developer Guide</i>.</p>"
-        }
-      }
-    },
-    "StreamJournalToKinesisResponse":{
-      "type":"structure",
-      "members":{
-        "StreamId":{
-          "shape":"UniqueId",
-          "documentation":"<p>The UUID (represented in Base62-encoded text) that QLDB assigns to each QLDB journal stream.</p>"
-        }
-      }
-    },
-    "StreamName":{
-      "type":"string",
-      "max":32,
-      "min":1,
-      "pattern":"(?!^.*--)(?!^[0-9]+$)(?!^-)(?!.*-$)^[A-Za-z0-9-]+$"
-    },
-    "StreamStatus":{
-      "type":"string",
-      "enum":[
-        "ACTIVE",
-        "COMPLETED",
-        "CANCELED",
-        "FAILED",
-        "IMPAIRED"
-      ]
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"},
-      "max":200,
-      "min":0
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "Tags"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) to which you want to add the tags. For example:</p> <p> <code>arn:aws:qldb:us-east-1:123456789012:ledger/exampleLedger</code> </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "Tags":{
-          "shape":"Tags",
-          "documentation":"<p>The key-value pairs to add as tags to the specified QLDB resource. Tag keys are case sensitive. If you specify a key that already exists for the resource, your request fails and returns an error. Tag values are case sensitive and can be null.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0
-    },
-    "Tags":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":200,
-      "min":0
-    },
-    "Timestamp":{"type":"timestamp"},
-    "UniqueId":{
-      "type":"string",
-      "max":22,
-      "min":22,
-      "pattern":"^[A-Za-z-0-9]+$"
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "ResourceArn",
-        "TagKeys"
-      ],
-      "members":{
-        "ResourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) from which to remove the tags. For example:</p> <p> <code>arn:aws:qldb:us-east-1:123456789012:ledger/exampleLedger</code> </p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "TagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>The list of tag keys to remove.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateLedgerPermissionsModeRequest":{
-      "type":"structure",
-      "required":[
-        "Name",
-        "PermissionsMode"
-      ],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "PermissionsMode":{
-          "shape":"PermissionsMode",
-          "documentation":"<p>The permissions mode to assign to the ledger. This parameter can have one of the following values:</p> <ul> <li> <p> <code>ALLOW_ALL</code>: A legacy permissions mode that enables access control with API-level granularity for ledgers.</p> <p>This mode allows users who have the <code>SendCommand</code> API permission for this ledger to run all PartiQL commands (hence, <code>ALLOW_ALL</code>) on any tables in the specified ledger. This mode disregards any table-level or command-level IAM permissions policies that you create for the ledger.</p> </li> <li> <p> <code>STANDARD</code>: (<i>Recommended</i>) A permissions mode that enables access control with finer granularity for ledgers, tables, and PartiQL commands.</p> <p>By default, this mode denies all user requests to run any PartiQL commands on any tables in this ledger. To allow PartiQL commands to run, you must create IAM permissions policies for specific table resources and PartiQL actions, in addition to the <code>SendCommand</code> API permission for the ledger. For information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started-standard-mode.html\">Getting started with the standard permissions mode</a> in the <i>Amazon QLDB Developer Guide</i>.</p> </li> </ul> <note> <p>We strongly recommend using the <code>STANDARD</code> permissions mode to maximize the security of your ledger data.</p> </note>"
-        }
-      }
-    },
-    "UpdateLedgerPermissionsModeResponse":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "Arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the ledger.</p>"
-        },
-        "PermissionsMode":{
-          "shape":"PermissionsMode",
-          "documentation":"<p>The current permissions mode of the ledger.</p>"
-        }
-      }
-    },
-    "UpdateLedgerRequest":{
-      "type":"structure",
-      "required":["Name"],
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>",
-          "location":"uri",
-          "locationName":"name"
-        },
-        "DeletionProtection":{
-          "shape":"DeletionProtection",
-          "documentation":"<p>Specifies whether the ledger is protected from being deleted by any user. If not defined during ledger creation, this feature is enabled (<code>true</code>) by default.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-        },
-        "KmsKey":{
-          "shape":"KmsKey",
-          "documentation":"<p>The key in Key Management Service (KMS) to use for encryption of data at rest in the ledger. For more information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/encryption-at-rest.html\">Encryption at rest</a> in the <i>Amazon QLDB Developer Guide</i>.</p> <p>Use one of the following options to specify this parameter:</p> <ul> <li> <p> <code>AWS_OWNED_KMS_KEY</code>: Use an KMS key that is owned and managed by Amazon Web Services on your behalf.</p> </li> <li> <p> <b>Undefined</b>: Make no changes to the KMS key of the ledger.</p> </li> <li> <p> <b>A valid symmetric customer managed KMS key</b>: Use the specified symmetric encryption KMS key in your account that you create, own, and manage.</p> <p>Amazon QLDB does not support asymmetric keys. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Using symmetric and asymmetric keys</a> in the <i>Key Management Service Developer Guide</i>.</p> </li> </ul> <p>To specify a customer managed KMS key, you can use its key ID, Amazon Resource Name (ARN), alias name, or alias ARN. When using an alias name, prefix it with <code>\"alias/\"</code>. To specify a key in a different Amazon Web Services account, you must use the key ARN or alias ARN.</p> <p>For example:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias ARN: <code>arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id\">Key identifiers (KeyId)</a> in the <i>Key Management Service Developer Guide</i>.</p>"
-        }
-      }
-    },
-    "UpdateLedgerResponse":{
-      "type":"structure",
-      "members":{
-        "Name":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger.</p>"
-        },
-        "Arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the ledger.</p>"
-        },
-        "State":{
-          "shape":"LedgerState",
-          "documentation":"<p>The current status of the ledger.</p>"
-        },
-        "CreationDateTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time, in epoch time format, when the ledger was created. (Epoch time format is the number of seconds elapsed since 12:00:00 AM January 1, 1970 UTC.)</p>"
-        },
-        "DeletionProtection":{
-          "shape":"DeletionProtection",
-          "documentation":"<p>Specifies whether the ledger is protected from being deleted by any user. If not defined during ledger creation, this feature is enabled (<code>true</code>) by default.</p> <p>If deletion protection is enabled, you must first disable it before you can delete the ledger. You can disable it by calling the <code>UpdateLedger</code> operation to set this parameter to <code>false</code>.</p>"
-        },
-        "EncryptionDescription":{
-          "shape":"LedgerEncryptionDescription",
-          "documentation":"<p>Information about the encryption of data at rest in the ledger. This includes the current status, the KMS key, and when the key became inaccessible (in the case of an error).</p>"
-        }
-      }
-    },
-    "ValueHolder":{
-      "type":"structure",
-      "members":{
-        "IonText":{
-          "shape":"IonText",
-          "documentation":"<p>An Amazon Ion plaintext value contained in a <code>ValueHolder</code> structure.</p>"
-        }
-      },
-      "documentation":"<p>A structure that can contain a value in multiple encoding formats.</p>",
-      "sensitive":true
-    }
-  },
-  "documentation":"<p>The resource management API for Amazon QLDB</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ]
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://session.qldb-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://session.qldb-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://session.qldb.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ]
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://session.qldb.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/paginators-1.json 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-{
-  "pagination": {}
-}
diff -pruN 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/service-2.json 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/service-2.json
--- 2.23.6-1/awscli/botocore/data/qldb-session/2019-07-11/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/qldb-session/2019-07-11/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,457 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2019-07-11",
-    "endpointPrefix":"session.qldb",
-    "jsonVersion":"1.0",
-    "protocol":"json",
-    "serviceAbbreviation":"QLDB Session",
-    "serviceFullName":"Amazon QLDB Session",
-    "serviceId":"QLDB Session",
-    "signatureVersion":"v4",
-    "signingName":"qldb",
-    "targetPrefix":"QLDBSession",
-    "uid":"qldb-session-2019-07-11"
-  },
-  "operations":{
-    "SendCommand":{
-      "name":"SendCommand",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"SendCommandRequest"},
-      "output":{"shape":"SendCommandResult"},
-      "errors":[
-        {"shape":"BadRequestException"},
-        {"shape":"InvalidSessionException"},
-        {"shape":"OccConflictException"},
-        {"shape":"RateExceededException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"CapacityExceededException"}
-      ],
-      "documentation":"<p>Sends a command to an Amazon QLDB ledger.</p> <note> <p>Instead of interacting directly with this API, we recommend using the QLDB driver or the QLDB shell to execute data transactions on a ledger.</p> <ul> <li> <p>If you are working with an AWS SDK, use the QLDB driver. The driver provides a high-level abstraction layer above this <i>QLDB Session</i> data plane and manages <code>SendCommand</code> API calls for you. For information and a list of supported programming languages, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started-driver.html\">Getting started with the driver</a> in the <i>Amazon QLDB Developer Guide</i>.</p> </li> <li> <p>If you are working with the AWS Command Line Interface (AWS CLI), use the QLDB shell. The shell is a command line interface that uses the QLDB driver to interact with a ledger. For information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/data-shell.html\">Accessing Amazon QLDB using the QLDB shell</a>.</p> </li> </ul> </note>"
-    }
-  },
-  "shapes":{
-    "AbortTransactionRequest":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Contains the details of the transaction to abort.</p>"
-    },
-    "AbortTransactionResult":{
-      "type":"structure",
-      "members":{
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the aborted transaction.</p>"
-    },
-    "BadRequestException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "Code":{"shape":"ErrorCode"}
-      },
-      "documentation":"<p>Returned if the request is malformed or contains an error such as an invalid parameter value or a missing required parameter.</p>",
-      "exception":true
-    },
-    "CapacityExceededException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>Returned when the request exceeds the processing capacity of the ledger.</p>",
-      "exception":true
-    },
-    "CommitDigest":{"type":"blob"},
-    "CommitTransactionRequest":{
-      "type":"structure",
-      "required":[
-        "TransactionId",
-        "CommitDigest"
-      ],
-      "members":{
-        "TransactionId":{
-          "shape":"TransactionId",
-          "documentation":"<p>Specifies the transaction ID of the transaction to commit.</p>"
-        },
-        "CommitDigest":{
-          "shape":"CommitDigest",
-          "documentation":"<p>Specifies the commit digest for the transaction to commit. For every active transaction, the commit digest must be passed. QLDB validates <code>CommitDigest</code> and rejects the commit with an error if the digest computed on the client does not match the digest computed by QLDB.</p> <p>The purpose of the <code>CommitDigest</code> parameter is to ensure that QLDB commits a transaction if and only if the server has processed the exact set of statements sent by the client, in the same order that client sent them, and with no duplicates.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the transaction to commit.</p>"
-    },
-    "CommitTransactionResult":{
-      "type":"structure",
-      "members":{
-        "TransactionId":{
-          "shape":"TransactionId",
-          "documentation":"<p>The transaction ID of the committed transaction.</p>"
-        },
-        "CommitDigest":{
-          "shape":"CommitDigest",
-          "documentation":"<p>The commit digest of the committed transaction.</p>"
-        },
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        },
-        "ConsumedIOs":{
-          "shape":"IOUsage",
-          "documentation":"<p>Contains metrics about the number of I/O requests that were consumed.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the committed transaction.</p>"
-    },
-    "EndSessionRequest":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Specifies a request to end the session.</p>"
-    },
-    "EndSessionResult":{
-      "type":"structure",
-      "members":{
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the ended session.</p>"
-    },
-    "ErrorCode":{"type":"string"},
-    "ErrorMessage":{"type":"string"},
-    "ExecuteStatementRequest":{
-      "type":"structure",
-      "required":[
-        "TransactionId",
-        "Statement"
-      ],
-      "members":{
-        "TransactionId":{
-          "shape":"TransactionId",
-          "documentation":"<p>Specifies the transaction ID of the request.</p>"
-        },
-        "Statement":{
-          "shape":"Statement",
-          "documentation":"<p>Specifies the statement of the request.</p>"
-        },
-        "Parameters":{
-          "shape":"StatementParameters",
-          "documentation":"<p>Specifies the parameters for the parameterized statement in the request.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a request to execute a statement.</p>"
-    },
-    "ExecuteStatementResult":{
-      "type":"structure",
-      "members":{
-        "FirstPage":{
-          "shape":"Page",
-          "documentation":"<p>Contains the details of the first fetched page.</p>"
-        },
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        },
-        "ConsumedIOs":{
-          "shape":"IOUsage",
-          "documentation":"<p>Contains metrics about the number of I/O requests that were consumed.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the executed statement.</p>"
-    },
-    "FetchPageRequest":{
-      "type":"structure",
-      "required":[
-        "TransactionId",
-        "NextPageToken"
-      ],
-      "members":{
-        "TransactionId":{
-          "shape":"TransactionId",
-          "documentation":"<p>Specifies the transaction ID of the page to be fetched.</p>"
-        },
-        "NextPageToken":{
-          "shape":"PageToken",
-          "documentation":"<p>Specifies the next page token of the page to be fetched.</p>"
-        }
-      },
-      "documentation":"<p>Specifies the details of the page to be fetched.</p>"
-    },
-    "FetchPageResult":{
-      "type":"structure",
-      "members":{
-        "Page":{
-          "shape":"Page",
-          "documentation":"<p>Contains details of the fetched page.</p>"
-        },
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        },
-        "ConsumedIOs":{
-          "shape":"IOUsage",
-          "documentation":"<p>Contains metrics about the number of I/O requests that were consumed.</p>"
-        }
-      },
-      "documentation":"<p>Contains the page that was fetched.</p>"
-    },
-    "IOUsage":{
-      "type":"structure",
-      "members":{
-        "ReadIOs":{
-          "shape":"ReadIOs",
-          "documentation":"<p>The number of read I/O requests that the command made.</p>"
-        },
-        "WriteIOs":{
-          "shape":"WriteIOs",
-          "documentation":"<p>The number of write I/O requests that the command made.</p>"
-        }
-      },
-      "documentation":"<p>Contains I/O usage metrics for a command that was invoked.</p>"
-    },
-    "InvalidSessionException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"},
-        "Code":{"shape":"ErrorCode"}
-      },
-      "documentation":"<p>Returned if the session doesn't exist anymore because it timed out or expired.</p>",
-      "exception":true
-    },
-    "IonBinary":{
-      "type":"blob",
-      "max":131072,
-      "min":1
-    },
-    "IonText":{
-      "type":"string",
-      "max":1048576,
-      "min":1
-    },
-    "LedgerName":{
-      "type":"string",
-      "max":32,
-      "min":1,
-      "pattern":"(?!^.*--)(?!^[0-9]+$)(?!^-)(?!.*-$)^[A-Za-z0-9-]+$"
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>Returned if a resource limit such as number of active sessions is exceeded.</p>",
-      "exception":true
-    },
-    "OccConflictException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>Returned when a transaction cannot be written to the journal due to a failure in the verification phase of <i>optimistic concurrency control</i> (OCC).</p>",
-      "exception":true
-    },
-    "Page":{
-      "type":"structure",
-      "members":{
-        "Values":{
-          "shape":"ValueHolders",
-          "documentation":"<p>A structure that contains values in multiple encoding formats.</p>"
-        },
-        "NextPageToken":{
-          "shape":"PageToken",
-          "documentation":"<p>The token of the next page.</p>"
-        }
-      },
-      "documentation":"<p>Contains details of the fetched page.</p>"
-    },
-    "PageToken":{
-      "type":"string",
-      "max":1024,
-      "min":4,
-      "pattern":"^[A-Za-z-0-9+/=]+$"
-    },
-    "ProcessingTimeMilliseconds":{"type":"long"},
-    "RateExceededException":{
-      "type":"structure",
-      "members":{
-        "Message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>Returned when the rate of requests exceeds the allowed throughput.</p>",
-      "exception":true
-    },
-    "ReadIOs":{"type":"long"},
-    "SendCommandRequest":{
-      "type":"structure",
-      "members":{
-        "SessionToken":{
-          "shape":"SessionToken",
-          "documentation":"<p>Specifies the session token for the current command. A session token is constant throughout the life of the session.</p> <p>To obtain a session token, run the <code>StartSession</code> command. This <code>SessionToken</code> is required for every subsequent command that is issued during the current session.</p>"
-        },
-        "StartSession":{
-          "shape":"StartSessionRequest",
-          "documentation":"<p>Command to start a new session. A session token is obtained as part of the response.</p>"
-        },
-        "StartTransaction":{
-          "shape":"StartTransactionRequest",
-          "documentation":"<p>Command to start a new transaction.</p>"
-        },
-        "EndSession":{
-          "shape":"EndSessionRequest",
-          "documentation":"<p>Command to end the current session.</p>"
-        },
-        "CommitTransaction":{
-          "shape":"CommitTransactionRequest",
-          "documentation":"<p>Command to commit the specified transaction.</p>"
-        },
-        "AbortTransaction":{
-          "shape":"AbortTransactionRequest",
-          "documentation":"<p>Command to abort the current transaction.</p>"
-        },
-        "ExecuteStatement":{
-          "shape":"ExecuteStatementRequest",
-          "documentation":"<p>Command to execute a statement in the specified transaction.</p>"
-        },
-        "FetchPage":{
-          "shape":"FetchPageRequest",
-          "documentation":"<p>Command to fetch a page.</p>"
-        }
-      }
-    },
-    "SendCommandResult":{
-      "type":"structure",
-      "members":{
-        "StartSession":{
-          "shape":"StartSessionResult",
-          "documentation":"<p>Contains the details of the started session that includes a session token. This <code>SessionToken</code> is required for every subsequent command that is issued during the current session.</p>"
-        },
-        "StartTransaction":{
-          "shape":"StartTransactionResult",
-          "documentation":"<p>Contains the details of the started transaction.</p>"
-        },
-        "EndSession":{
-          "shape":"EndSessionResult",
-          "documentation":"<p>Contains the details of the ended session.</p>"
-        },
-        "CommitTransaction":{
-          "shape":"CommitTransactionResult",
-          "documentation":"<p>Contains the details of the committed transaction.</p>"
-        },
-        "AbortTransaction":{
-          "shape":"AbortTransactionResult",
-          "documentation":"<p>Contains the details of the aborted transaction.</p>"
-        },
-        "ExecuteStatement":{
-          "shape":"ExecuteStatementResult",
-          "documentation":"<p>Contains the details of the executed statement.</p>"
-        },
-        "FetchPage":{
-          "shape":"FetchPageResult",
-          "documentation":"<p>Contains the details of the fetched page.</p>"
-        }
-      }
-    },
-    "SessionToken":{
-      "type":"string",
-      "max":1024,
-      "min":4,
-      "pattern":"^[A-Za-z-0-9+/=]+$"
-    },
-    "StartSessionRequest":{
-      "type":"structure",
-      "required":["LedgerName"],
-      "members":{
-        "LedgerName":{
-          "shape":"LedgerName",
-          "documentation":"<p>The name of the ledger to start a new session against.</p>"
-        }
-      },
-      "documentation":"<p>Specifies a request to start a new session.</p>"
-    },
-    "StartSessionResult":{
-      "type":"structure",
-      "members":{
-        "SessionToken":{
-          "shape":"SessionToken",
-          "documentation":"<p>Session token of the started session. This <code>SessionToken</code> is required for every subsequent command that is issued during the current session.</p>"
-        },
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the started session.</p>"
-    },
-    "StartTransactionRequest":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>Specifies a request to start a transaction.</p>"
-    },
-    "StartTransactionResult":{
-      "type":"structure",
-      "members":{
-        "TransactionId":{
-          "shape":"TransactionId",
-          "documentation":"<p>The transaction ID of the started transaction.</p>"
-        },
-        "TimingInformation":{
-          "shape":"TimingInformation",
-          "documentation":"<p>Contains server-side performance information for the command.</p>"
-        }
-      },
-      "documentation":"<p>Contains the details of the started transaction.</p>"
-    },
-    "Statement":{
-      "type":"string",
-      "max":100000,
-      "min":1
-    },
-    "StatementParameters":{
-      "type":"list",
-      "member":{"shape":"ValueHolder"}
-    },
-    "TimingInformation":{
-      "type":"structure",
-      "members":{
-        "ProcessingTimeMilliseconds":{
-          "shape":"ProcessingTimeMilliseconds",
-          "documentation":"<p>The amount of time that QLDB spent on processing the command, measured in milliseconds.</p>"
-        }
-      },
-      "documentation":"<p>Contains server-side performance information for a command. Amazon QLDB captures timing information between the times when it receives the request and when it sends the corresponding response.</p>"
-    },
-    "TransactionId":{
-      "type":"string",
-      "max":22,
-      "min":22,
-      "pattern":"^[A-Za-z-0-9]+$"
-    },
-    "ValueHolder":{
-      "type":"structure",
-      "members":{
-        "IonBinary":{
-          "shape":"IonBinary",
-          "documentation":"<p>An Amazon Ion binary value contained in a <code>ValueHolder</code> structure.</p>"
-        },
-        "IonText":{
-          "shape":"IonText",
-          "documentation":"<p>An Amazon Ion plaintext value contained in a <code>ValueHolder</code> structure.</p>"
-        }
-      },
-      "documentation":"<p>A structure that can contain a value in multiple encoding formats.</p>"
-    },
-    "ValueHolders":{
-      "type":"list",
-      "member":{"shape":"ValueHolder"}
-    },
-    "WriteIOs":{"type":"long"}
-  },
-  "documentation":"<p>The transactional data APIs for Amazon QLDB</p> <note> <p>Instead of interacting directly with this API, we recommend using the QLDB driver or the QLDB shell to execute data transactions on a ledger.</p> <ul> <li> <p>If you are working with an AWS SDK, use the QLDB driver. The driver provides a high-level abstraction layer above this <i>QLDB Session</i> data plane and manages <code>SendCommand</code> API calls for you. For information and a list of supported programming languages, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started-driver.html\">Getting started with the driver</a> in the <i>Amazon QLDB Developer Guide</i>.</p> </li> <li> <p>If you are working with the AWS Command Line Interface (AWS CLI), use the QLDB shell. The shell is a command line interface that uses the QLDB driver to interact with a ledger. For information, see <a href=\"https://docs.aws.amazon.com/qldb/latest/developerguide/data-shell.html\">Accessing Amazon QLDB using the QLDB shell</a>.</p> </li> </ul> </note>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,6 +209,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "TopicSummaryList"
+    },
+    "ListActionConnectors": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ActionConnectorSummaries"
+    },
+    "ListFlows": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "FlowSummaryList"
+    },
+    "SearchActionConnectors": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ActionConnectorSummaries"
+    },
+    "SearchFlows": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "FlowSummaryList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,6 +209,30 @@
           "Status",
           "RequestId"
         ]
+      },
+      "ListActionConnectors": {
+        "non_aggregate_keys": [
+          "Status",
+          "RequestId"
+        ]
+      },
+      "ListFlows": {
+        "non_aggregate_keys": [
+          "Status",
+          "RequestId"
+        ]
+      },
+      "SearchActionConnectors": {
+        "non_aggregate_keys": [
+          "Status",
+          "RequestId"
+        ]
+      },
+      "SearchFlows": {
+        "non_aggregate_keys": [
+          "Status",
+          "RequestId"
+        ]
       }
     }
   }
diff -pruN 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/service-2.json 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/quicksight/2018-04-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/quicksight/2018-04-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -84,7 +84,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Creates Amazon QuickSight customizations for the current Amazon Web Services Region. Currently, you can add a custom default theme by using the <code>CreateAccountCustomization</code> or <code>UpdateAccountCustomization</code> API operation. To further customize Amazon QuickSight by removing Amazon QuickSight sample assets and videos for all new users, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-quicksight.html\">Customizing Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide.</i> </p> <p>You can create customizations for your Amazon Web Services account or, if you specify a namespace, for a QuickSight namespace instead. Customizations that apply to a namespace always override customizations that apply to an Amazon Web Services account. To find out which customizations apply, use the <code>DescribeAccountCustomization</code> API operation.</p> <p>Before you use the <code>CreateAccountCustomization</code> API operation to add a theme as the namespace default, make sure that you first share the theme with the namespace. If you don't share it with the namespace, the theme isn't visible to your users even if you make it the default theme. To check if the theme is shared, view the current permissions by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeThemePermissions.html\">DescribeThemePermissions</a> </code> API operation. To share the theme, grant permissions by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateThemePermissions.html\">UpdateThemePermissions</a> </code> API operation. </p>"
+      "documentation":"<p>Creates Amazon Quick Sight customizations. Currently, you can add a custom default theme by using the <code>CreateAccountCustomization</code> or <code>UpdateAccountCustomization</code> API operation. To further customize Amazon Quick Sight by removing Amazon Quick Sight sample assets and videos for all new users, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-quicksight.html\">Customizing Quick Sight</a> in the <i>Amazon Quick Sight User Guide.</i> </p> <p>You can create customizations for your Amazon Web Services account or, if you specify a namespace, for a Quick Sight namespace instead. Customizations that apply to a namespace always override customizations that apply to an Amazon Web Services account. To find out which customizations apply, use the <code>DescribeAccountCustomization</code> API operation.</p> <p>Before you use the <code>CreateAccountCustomization</code> API operation to add a theme as the namespace default, make sure that you first share the theme with the namespace. If you don't share it with the namespace, the theme isn't visible to your users even if you make it the default theme. To check if the theme is shared, view the current permissions by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeThemePermissions.html\">DescribeThemePermissions</a> </code> API operation. To share the theme, grant permissions by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateThemePermissions.html\">UpdateThemePermissions</a> </code> API operation. </p>"
     },
     "CreateAccountSubscription":{
       "name":"CreateAccountSubscription",
@@ -105,7 +105,27 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Creates an Amazon QuickSight account, or subscribes to Amazon QuickSight Q.</p> <p>The Amazon Web Services Region for the account is derived from what is configured in the CLI or SDK.</p> <p>Before you use this operation, make sure that you can connect to an existing Amazon Web Services account. If you don't have an Amazon Web Services account, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/setting-up-aws-sign-up.html\">Sign up for Amazon Web Services</a> in the <i>Amazon QuickSight User Guide</i>. The person who signs up for Amazon QuickSight needs to have the correct Identity and Access Management (IAM) permissions. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/iam-policy-examples.html\">IAM Policy Examples for Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>If your IAM policy includes both the <code>Subscribe</code> and <code>CreateAccountSubscription</code> actions, make sure that both actions are set to <code>Allow</code>. If either action is set to <code>Deny</code>, the <code>Deny</code> action prevails and your API call fails.</p> <p>You can't pass an existing IAM role to access other Amazon Web Services services using this API operation. To pass your existing IAM role to Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/security_iam_service-with-iam.html#security-create-iam-role\">Passing IAM roles to Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>You can't set default resource access on the new account from the Amazon QuickSight API. Instead, add default resource access from the Amazon QuickSight console. For more information about setting default resource access to Amazon Web Services services, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scoping-policies-defaults.html\">Setting default resource access to Amazon Web Services services</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>Creates an Amazon Quick Sight account, or subscribes to Amazon Quick Sight Q.</p> <p>The Amazon Web Services Region for the account is derived from what is configured in the CLI or SDK.</p> <p>Before you use this operation, make sure that you can connect to an existing Amazon Web Services account. If you don't have an Amazon Web Services account, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/setting-up-aws-sign-up.html\">Sign up for Amazon Web Services</a> in the <i>Amazon Quick Sight User Guide</i>. The person who signs up for Amazon Quick Sight needs to have the correct Identity and Access Management (IAM) permissions. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/iam-policy-examples.html\">IAM Policy Examples for Amazon Quick Sight</a> in the <i>Amazon Quick Sight User Guide</i>.</p> <p>If your IAM policy includes both the <code>Subscribe</code> and <code>CreateAccountSubscription</code> actions, make sure that both actions are set to <code>Allow</code>. If either action is set to <code>Deny</code>, the <code>Deny</code> action prevails and your API call fails.</p> <p>You can't pass an existing IAM role to access other Amazon Web Services services using this API operation. To pass your existing IAM role to Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/security_iam_service-with-iam.html#security-create-iam-role\">Passing IAM roles to Amazon Quick Sight</a> in the <i>Amazon Quick Sight User Guide</i>.</p> <p>You can't set default resource access on the new account from the Amazon Quick Sight API. Instead, add default resource access from the Amazon Quick Sight console. For more information about setting default resource access to Amazon Web Services services, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scoping-policies-defaults.html\">Setting default resource access to Amazon Web Services services</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
+    },
+    "CreateActionConnector":{
+      "name":"CreateActionConnector",
+      "http":{
+        "method":"POST",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateActionConnectorRequest"},
+      "output":{"shape":"CreateActionConnectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceExistsException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates an action connector that enables Amazon Quick Sight to connect to external services and perform actions. Action connectors support various authentication methods and can be configured with specific actions from supported connector types like Amazon S3, Salesforce, JIRA.</p>",
+      "idempotent":true
     },
     "CreateAnalysis":{
       "name":"CreateAnalysis",
@@ -125,7 +145,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Creates an analysis in Amazon QuickSight. Analyses can be created either from a template or from an <code>AnalysisDefinition</code>.</p>"
+      "documentation":"<p>Creates an analysis in Amazon Quick Sight. Analyses can be created either from a template or from an <code>AnalysisDefinition</code>.</p>"
     },
     "CreateBrand":{
       "name":"CreateBrand",
@@ -140,11 +160,11 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"LimitExceededException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates an Amazon QuickSight brand.</p>"
+      "documentation":"<p>Creates an Quick Sight brand.</p>"
     },
     "CreateCustomPermissions":{
       "name":"CreateCustomPermissions",
@@ -186,7 +206,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Creates a dashboard from either a template or directly with a <code>DashboardDefinition</code>. To first create a template, see the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation.</p> <p>A dashboard is an entity in Amazon QuickSight that identifies Amazon QuickSight reports, created from analyses. You can share Amazon QuickSight dashboards. With the right permissions, you can create scheduled email reports from them. If you have the correct permissions, you can create a dashboard from a template that exists in a different Amazon Web Services account.</p>"
+      "documentation":"<p>Creates a dashboard from either a template or directly with a <code>DashboardDefinition</code>. To first create a template, see the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation.</p> <p>A dashboard is an entity in Amazon Quick Sight that identifies Amazon Quick Sight reports, created from analyses. You can share Amazon Quick Sight dashboards. With the right permissions, you can create scheduled email reports from them. If you have the correct permissions, you can create a dashboard from a template that exists in a different Amazon Web Services account.</p>"
     },
     "CreateDataSet":{
       "name":"CreateDataSet",
@@ -205,6 +225,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"UnsupportedUserEditionException"},
+        {"shape":"InvalidDataSetParameterValueException"},
         {"shape":"InternalFailureException"}
       ],
       "documentation":"<p>Creates a dataset. This operation doesn't support datasets that include uploaded files as a source.</p>"
@@ -290,7 +311,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Use the <code>CreateGroup</code> operation to create a group in Amazon QuickSight. You can create up to 10,000 groups in a namespace. If you want to create more than 10,000 groups in a namespace, contact Amazon Web Services Support.</p> <p>The permissions resource is <code>arn:aws:quicksight:&lt;your-region&gt;:<i>&lt;relevant-aws-account-id&gt;</i>:group/default/<i>&lt;group-name&gt;</i> </code>.</p> <p>The response is a group object.</p>"
+      "documentation":"<p>Use the <code>CreateGroup</code> operation to create a group in Quick Sight. You can create up to 10,000 groups in a namespace. If you want to create more than 10,000 groups in a namespace, contact Amazon Web Services Support.</p> <p>The permissions resource is <code>arn:aws:quicksight:&lt;your-region&gt;:<i>&lt;relevant-aws-account-id&gt;</i>:group/default/<i>&lt;group-name&gt;</i> </code>.</p> <p>The response is a group object.</p>"
     },
     "CreateGroupMembership":{
       "name":"CreateGroupMembership",
@@ -309,7 +330,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Adds an Amazon QuickSight user to an Amazon QuickSight group. </p>"
+      "documentation":"<p>Adds an Amazon Quick Sight user to an Amazon Quick Sight group. </p>"
     },
     "CreateIAMPolicyAssignment":{
       "name":"CreateIAMPolicyAssignment",
@@ -328,7 +349,7 @@
         {"shape":"ConcurrentUpdatingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Creates an assignment with one specified IAM policy, identified by its Amazon Resource Name (ARN). This policy assignment is attached to the specified groups or users of Amazon QuickSight. Assignment names are unique per Amazon Web Services account. To avoid overwriting rules in other namespaces, use assignment names that are unique.</p>"
+      "documentation":"<p>Creates an assignment with one specified IAM policy, identified by its Amazon Resource Name (ARN). This policy assignment is attached to the specified groups or users of Amazon Quick Sight. Assignment names are unique per Amazon Web Services account. To avoid overwriting rules in other namespaces, use assignment names that are unique.</p>"
     },
     "CreateIngestion":{
       "name":"CreateIngestion",
@@ -369,7 +390,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>(Enterprise edition only) Creates a new namespace for you to use with Amazon QuickSight.</p> <p>A namespace allows you to isolate the Amazon QuickSight users and groups that are registered for that namespace. Users that access the namespace can share assets only with other users or groups in the same namespace. They can't see users and groups in other namespaces. You can create a namespace after your Amazon Web Services account is subscribed to Amazon QuickSight. The namespace must be unique within the Amazon Web Services account. By default, there is a limit of 100 namespaces per Amazon Web Services account. To increase your limit, create a ticket with Amazon Web Services Support. </p>"
+      "documentation":"<p>(Enterprise edition only) Creates a new namespace for you to use with Amazon Quick Sight.</p> <p>A namespace allows you to isolate the Quick Sight users and groups that are registered for that namespace. Users that access the namespace can share assets only with other users or groups in the same namespace. They can't see users and groups in other namespaces. You can create a namespace after your Amazon Web Services account is subscribed to Quick Sight. The namespace must be unique within the Amazon Web Services account. By default, there is a limit of 100 namespaces per Amazon Web Services account. To increase your limit, create a ticket with Amazon Web Services Support. </p>"
     },
     "CreateRefreshSchedule":{
       "name":"CreateRefreshSchedule",
@@ -408,7 +429,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Use <code>CreateRoleMembership</code> to add an existing Amazon QuickSight group to an existing role.</p>"
+      "documentation":"<p>Use <code>CreateRoleMembership</code> to add an existing Quick Sight group to an existing role.</p>"
     },
     "CreateTemplate":{
       "name":"CreateTemplate",
@@ -429,7 +450,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Creates a template either from a <code>TemplateDefinition</code> or from an existing Amazon QuickSight analysis or template. You can use the resulting template to create additional dashboards, templates, or analyses.</p> <p>A <i>template</i> is an entity in Amazon QuickSight that encapsulates the metadata required to create an analysis and that you can use to create s dashboard. A template adds a layer of abstraction by using placeholders to replace the dataset associated with the analysis. You can use templates to create dashboards by replacing dataset placeholders with datasets that follow the same schema that was used to create the source analysis and template.</p>"
+      "documentation":"<p>Creates a template either from a <code>TemplateDefinition</code> or from an existing Quick Sight analysis or template. You can use the resulting template to create additional dashboards, templates, or analyses.</p> <p>A <i>template</i> is an entity in Quick Sight that encapsulates the metadata required to create an analysis and that you can use to create s dashboard. A template adds a layer of abstraction by using placeholders to replace the dataset associated with the analysis. You can use templates to create dashboards by replacing dataset placeholders with datasets that follow the same schema that was used to create the source analysis and template.</p>"
     },
     "CreateTemplateAlias":{
       "name":"CreateTemplateAlias",
@@ -469,7 +490,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Creates a theme.</p> <p>A <i>theme</i> is set of configuration options for color and layout. Themes apply to analyses and dashboards. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html\">Using Themes in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>Creates a theme.</p> <p>A <i>theme</i> is set of configuration options for color and layout. Themes apply to analyses and dashboards. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html\">Using Themes in Amazon Quick Sight</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
     },
     "CreateThemeAlias":{
       "name":"CreateThemeAlias",
@@ -551,6 +572,23 @@
       ],
       "documentation":"<p>Creates a new VPC connection.</p>"
     },
+    "DeleteAccountCustomPermission":{
+      "name":"DeleteAccountCustomPermission",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/accounts/{AwsAccountId}/custom-permission"
+      },
+      "input":{"shape":"DeleteAccountCustomPermissionRequest"},
+      "output":{"shape":"DeleteAccountCustomPermissionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Unapplies a custom permissions profile from an account.</p>"
+    },
     "DeleteAccountCustomization":{
       "name":"DeleteAccountCustomization",
       "http":{
@@ -570,7 +608,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Deletes all Amazon QuickSight customizations in this Amazon Web Services Region for the specified Amazon Web Services account and Amazon QuickSight namespace.</p>"
+      "documentation":"<important> <p>This API permanently deletes all Quick Sight customizations for the specified Amazon Web Services account and namespace. When you delete account customizations:</p> <ul> <li> <p>All customizations are removed including themes, branding, and visual settings</p> </li> <li> <p>This action cannot be undone through the API</p> </li> <li> <p>Users will see default Quick Sight styling after customizations are deleted</p> </li> </ul> <p> <b>Before proceeding:</b> Ensure you have backups of any custom themes or branding elements you may want to recreate.</p> </important> <p>Deletes all Amazon Quick Sight customizations for the specified Amazon Web Services account and Quick Sight namespace.</p>"
     },
     "DeleteAccountSubscription":{
       "name":"DeleteAccountSubscription",
@@ -589,7 +627,25 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Use the <code>DeleteAccountSubscription</code> operation to delete an Amazon QuickSight account. This operation will result in an error message if you have configured your account termination protection settings to <code>True</code>. To change this setting and delete your account, call the <code>UpdateAccountSettings</code> API and set the value of the <code>TerminationProtectionEnabled</code> parameter to <code>False</code>, then make another call to the <code>DeleteAccountSubscription</code> API.</p>"
+      "documentation":"<important> <p>Deleting your Quick Sight account subscription has permanent, irreversible consequences across all Amazon Web Services regions:</p> <ul> <li> <p>Global deletion – Running this operation from any single region will delete your Quick Sight account and all data in every Amazon Web Services region where you have Quick Sight resources.</p> </li> <li> <p>Complete data loss – All dashboards, analyses, datasets, data sources, and custom visuals will be permanently deleted across all regions.</p> </li> <li> <p>Embedded content failure – All embedded dashboards and visuals in your applications will immediately stop working and display errors to end users.</p> </li> <li> <p>Shared resources removed – All shared dashboards, folders, and resources will become inaccessible to other users and external recipients.</p> </li> <li> <p>User access terminated – All Quick Sight users in your account will lose access immediately, including authors, readers, and administrators.</p> </li> <li> <p> <b>No recovery possible</b> – Once deleted, your Quick Sight account and all associated data cannot be restored.</p> </li> </ul> <p>Consider exporting critical dashboards and data before proceeding with account deletion.</p> </important> <p>Use the <code>DeleteAccountSubscription</code> operation to delete an Quick Sight account. This operation will result in an error message if you have configured your account termination protection settings to <code>True</code>. To change this setting and delete your account, call the <code>UpdateAccountSettings</code> API and set the value of the <code>TerminationProtectionEnabled</code> parameter to <code>False</code>, then make another call to the <code>DeleteAccountSubscription</code> API.</p>"
+    },
+    "DeleteActionConnector":{
+      "name":"DeleteActionConnector",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors/{ActionConnectorId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteActionConnectorRequest"},
+      "output":{"shape":"DeleteActionConnectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Hard deletes an action connector, making it unrecoverable. This operation removes the connector and all its associated configurations. Any resources currently using this action connector will no longer be able to perform actions through it.</p>"
     },
     "DeleteAnalysis":{
       "name":"DeleteAnalysis",
@@ -607,7 +663,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Deletes an analysis from Amazon QuickSight. You can optionally include a recovery window during which you can restore the analysis. If you don't specify a recovery window value, the operation defaults to 30 days. Amazon QuickSight attaches a <code>DeletionTime</code> stamp to the response that specifies the end of the recovery window. At the end of the recovery window, Amazon QuickSight deletes the analysis permanently.</p> <p>At any time before recovery window ends, you can use the <code>RestoreAnalysis</code> API operation to remove the <code>DeletionTime</code> stamp and cancel the deletion of the analysis. The analysis remains visible in the API until it's deleted, so you can describe it but you can't make a template from it.</p> <p>An analysis that's scheduled for deletion isn't accessible in the Amazon QuickSight console. To access it in the console, restore it. Deleting an analysis doesn't delete the dashboards that you publish from it.</p>"
+      "documentation":"<p>Deletes an analysis from Amazon Quick Sight. You can optionally include a recovery window during which you can restore the analysis. If you don't specify a recovery window value, the operation defaults to 30 days. Amazon Quick Sight attaches a <code>DeletionTime</code> stamp to the response that specifies the end of the recovery window. At the end of the recovery window, Amazon Quick Sight deletes the analysis permanently.</p> <p>At any time before recovery window ends, you can use the <code>RestoreAnalysis</code> API operation to remove the <code>DeletionTime</code> stamp and cancel the deletion of the analysis. The analysis remains visible in the API until it's deleted, so you can describe it but you can't make a template from it.</p> <p>An analysis that's scheduled for deletion isn't accessible in the Amazon Quick Sight console. To access it in the console, restore it. Deleting an analysis doesn't delete the dashboards that you publish from it.</p>"
     },
     "DeleteBrand":{
       "name":"DeleteBrand",
@@ -622,11 +678,11 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Deletes an Amazon QuickSight brand.</p>",
+      "documentation":"<important> <p>This API permanently deletes the specified Quick Sight brand. When you delete a brand:</p> <ul> <li> <p>The brand and all its associated branding elements are permanently removed</p> </li> <li> <p>Any applications or dashboards using this brand will revert to default styling</p> </li> <li> <p>This action cannot be undone through the API</p> </li> </ul> <p> <b>Before proceeding:</b> Verify that the brand is no longer needed and consider the impact on any applications currently using this brand.</p> </important> <p>Deletes an Quick Sight brand.</p>",
       "idempotent":true
     },
     "DeleteBrandAssignment":{
@@ -642,8 +698,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a brand assignment.</p>",
@@ -756,7 +812,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Deletes a linked Amazon Q Business application from an Amazon QuickSight account</p>"
+      "documentation":"<p>Deletes a linked Amazon Q Business application from an Quick Sight account</p>"
     },
     "DeleteFolder":{
       "name":"DeleteFolder",
@@ -813,7 +869,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Removes a user group from Amazon QuickSight. </p>"
+      "documentation":"<p>Removes a user group from Amazon Quick Sight. </p>"
     },
     "DeleteGroupMembership":{
       "name":"DeleteGroupMembership",
@@ -868,7 +924,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Deletes all access scopes and authorized targets that are associated with a service from the Amazon QuickSight IAM Identity Center application.</p> <p>This operation is only supported for Amazon QuickSight accounts that use IAM Identity Center.</p>"
+      "documentation":"<p>Deletes all access scopes and authorized targets that are associated with a service from the Quick Sight IAM Identity Center application.</p> <p>This operation is only supported for Quick Sight accounts that use IAM Identity Center.</p>"
     },
     "DeleteNamespace":{
       "name":"DeleteNamespace",
@@ -1073,7 +1129,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Deletes the Amazon QuickSight user that is associated with the identity of the IAM user or role that's making the call. The IAM user isn't deleted as a result of this call. </p>"
+      "documentation":"<p>Deletes the Amazon Quick Sight user that is associated with the identity of the IAM user or role that's making the call. The IAM user isn't deleted as a result of this call. </p>"
     },
     "DeleteUserByPrincipalId":{
       "name":"DeleteUserByPrincipalId",
@@ -1133,6 +1189,23 @@
       ],
       "documentation":"<p>Deletes a VPC connection.</p>"
     },
+    "DescribeAccountCustomPermission":{
+      "name":"DescribeAccountCustomPermission",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/custom-permission"
+      },
+      "input":{"shape":"DescribeAccountCustomPermissionRequest"},
+      "output":{"shape":"DescribeAccountCustomPermissionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Describes the custom permissions profile that is applied to an account.</p>"
+    },
     "DescribeAccountCustomization":{
       "name":"DescribeAccountCustomization",
       "http":{
@@ -1149,7 +1222,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Describes the customizations associated with the provided Amazon Web Services account and Amazon Amazon QuickSight namespace in an Amazon Web Services Region. The Amazon QuickSight console evaluates which customizations to apply by running this API operation with the <code>Resolved</code> flag included. </p> <p>To determine what customizations display when you run this command, it can help to visualize the relationship of the entities involved. </p> <ul> <li> <p> <code>Amazon Web Services account</code> - The Amazon Web Services account exists at the top of the hierarchy. It has the potential to use all of the Amazon Web Services Regions and Amazon Web Services Services. When you subscribe to Amazon QuickSight, you choose one Amazon Web Services Region to use as your home Region. That's where your free SPICE capacity is located. You can use Amazon QuickSight in any supported Amazon Web Services Region. </p> </li> <li> <p> <code>Amazon Web Services Region</code> - In each Amazon Web Services Region where you sign in to Amazon QuickSight at least once, Amazon QuickSight acts as a separate instance of the same service. If you have a user directory, it resides in us-east-1, which is the US East (N. Virginia). Generally speaking, these users have access to Amazon QuickSight in any Amazon Web Services Region, unless they are constrained to a namespace. </p> <p>To run the command in a different Amazon Web Services Region, you change your Region settings. If you're using the CLI, you can use one of the following options:</p> <ul> <li> <p>Use <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html\">command line options</a>. </p> </li> <li> <p>Use <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html\">named profiles</a>. </p> </li> <li> <p>Run <code>aws configure</code> to change your default Amazon Web Services Region. Use Enter to key the same settings for your keys. For more information, see <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html\">Configuring the CLI</a>.</p> </li> </ul> </li> <li> <p> <code>Namespace</code> - A QuickSight namespace is a partition that contains users and assets (data sources, datasets, dashboards, and so on). To access assets that are in a specific namespace, users and groups must also be part of the same namespace. People who share a namespace are completely isolated from users and assets in other namespaces, even if they are in the same Amazon Web Services account and Amazon Web Services Region.</p> </li> <li> <p> <code>Applied customizations</code> - Within an Amazon Web Services Region, a set of Amazon QuickSight customizations can apply to an Amazon Web Services account or to a namespace. Settings that you apply to a namespace override settings that you apply to an Amazon Web Services account. All settings are isolated to a single Amazon Web Services Region. To apply them in other Amazon Web Services Regions, run the <code>CreateAccountCustomization</code> command in each Amazon Web Services Region where you want to apply the same customizations. </p> </li> </ul>"
+      "documentation":"<p>Describes the customizations associated with the provided Amazon Web Services account and Amazon Quick Sight namespace. The Quick Sight console evaluates which customizations to apply by running this API operation with the <code>Resolved</code> flag included. </p> <p>To determine what customizations display when you run this command, it can help to visualize the relationship of the entities involved. </p> <ul> <li> <p> <code>Amazon Web Services account</code> - The Amazon Web Services account exists at the top of the hierarchy. It has the potential to use all of the Amazon Web Services Regions and Amazon Web Services Services. When you subscribe to Quick Sight, you choose one Amazon Web Services Region to use as your home Region. That's where your free SPICE capacity is located. You can use Quick Sight in any supported Amazon Web Services Region. </p> </li> <li> <p> <code>Amazon Web Services Region</code> - You can sign in to Quick Sight in any Amazon Web Services Region. If you have a user directory, it resides in us-east-1, which is US East (N. Virginia). Generally speaking, these users have access to Quick Sight in any Amazon Web Services Region, unless they are constrained to a namespace. </p> <p>To run the command in a different Amazon Web Services Region, you change your Region settings. If you're using the CLI, you can use one of the following options:</p> <ul> <li> <p>Use <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html\">command line options</a>. </p> </li> <li> <p>Use <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html\">named profiles</a>. </p> </li> <li> <p>Run <code>aws configure</code> to change your default Amazon Web Services Region. Use Enter to key the same settings for your keys. For more information, see <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html\">Configuring the CLI</a>.</p> </li> </ul> </li> <li> <p> <code>Namespace</code> - A Quick Sight namespace is a partition that contains users and assets (data sources, datasets, dashboards, and so on). To access assets that are in a specific namespace, users and groups must also be part of the same namespace. People who share a namespace are completely isolated from users and assets in other namespaces, even if they are in the same Amazon Web Services account and Amazon Web Services Region.</p> </li> <li> <p> <code>Applied customizations</code> - Quick Sight customizations can apply to an Amazon Web Services account or to a namespace. Settings that you apply to a namespace override settings that you apply to an Amazon Web Services account.</p> </li> </ul>"
     },
     "DescribeAccountSettings":{
       "name":"DescribeAccountSettings",
@@ -1167,7 +1240,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Describes the settings that were used when your Amazon QuickSight subscription was first created in this Amazon Web Services account.</p>"
+      "documentation":"<p>Describes the settings that were used when your Quick Sight subscription was first created in this Amazon Web Services account.</p>"
     },
     "DescribeAccountSubscription":{
       "name":"DescribeAccountSubscription",
@@ -1185,7 +1258,45 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Use the DescribeAccountSubscription operation to receive a description of an Amazon QuickSight account's subscription. A successful API call returns an <code>AccountInfo</code> object that includes an account's name, subscription status, authentication type, edition, and notification email address.</p>"
+      "documentation":"<p>Use the DescribeAccountSubscription operation to receive a description of an Quick Sight account's subscription. A successful API call returns an <code>AccountInfo</code> object that includes an account's name, subscription status, authentication type, edition, and notification email address.</p>"
+    },
+    "DescribeActionConnector":{
+      "name":"DescribeActionConnector",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors/{ActionConnectorId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeActionConnectorRequest"},
+      "output":{"shape":"DescribeActionConnectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about an action connector, including its configuration, authentication settings, enabled actions, and current status.</p>",
+      "readonly":true
+    },
+    "DescribeActionConnectorPermissions":{
+      "name":"DescribeActionConnectorPermissions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors/{ActionConnectorId}/permissions",
+        "responseCode":200
+      },
+      "input":{"shape":"DescribeActionConnectorPermissionsRequest"},
+      "output":{"shape":"DescribeActionConnectorPermissionsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the permissions configuration for an action connector, showing which users, groups, and namespaces have access and what operations they can perform.</p>",
+      "readonly":true
     },
     "DescribeAnalysis":{
       "name":"DescribeAnalysis",
@@ -1285,11 +1396,12 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes a brand.</p>"
+      "documentation":"<p>Describes a brand.</p>",
+      "readonly":true
     },
     "DescribeBrandAssignment":{
       "name":"DescribeBrandAssignment",
@@ -1304,11 +1416,12 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes a brand assignment.</p>"
+      "documentation":"<p>Describes a brand assignment.</p>",
+      "readonly":true
     },
     "DescribeBrandPublishedVersion":{
       "name":"DescribeBrandPublishedVersion",
@@ -1323,11 +1436,12 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Describes the published version of the brand.</p>"
+      "documentation":"<p>Describes the published version of the brand.</p>",
+      "readonly":true
     },
     "DescribeCustomPermissions":{
       "name":"DescribeCustomPermissions",
@@ -1559,7 +1673,7 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Describes a Amazon Q Business application that is linked to an Amazon QuickSight account.</p>"
+      "documentation":"<p>Describes a Amazon Q Business application that is linked to an Quick Sight account.</p>"
     },
     "DescribeFolder":{
       "name":"DescribeFolder",
@@ -1634,7 +1748,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Returns an Amazon QuickSight group's description and Amazon Resource Name (ARN). </p>"
+      "documentation":"<p>Returns an Amazon Quick Sight group's description and Amazon Resource Name (ARN). </p>"
     },
     "DescribeGroupMembership":{
       "name":"DescribeGroupMembership",
@@ -1722,7 +1836,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Describes all customer managed key registrations in a Amazon QuickSight account.</p>"
+      "documentation":"<p>Describes all customer managed key registrations in a Quick Sight account.</p>"
     },
     "DescribeNamespace":{
       "name":"DescribeNamespace",
@@ -1776,7 +1890,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Describes the state of a Amazon QuickSight Q Search configuration.</p>"
+      "documentation":"<p>Describes the state of a Quick Sight Q Search configuration.</p>"
     },
     "DescribeRefreshSchedule":{
       "name":"DescribeRefreshSchedule",
@@ -2070,7 +2184,7 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon QuickSight dashboard or visual in your website, without having to register any reader users. Before you use this action, make sure that you have configured the dashboards and permissions.</p> <p>The following rules apply to the generated URL:</p> <ul> <li> <p>It contains a temporary bearer token. It is valid for 5 minutes after it is generated. Once redeemed within this period, it cannot be re-used again.</p> </li> <li> <p>The URL validity period should not be confused with the actual session lifetime that can be customized using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html#QS-GenerateEmbedUrlForAnonymousUser-request-SessionLifetimeInMinutes\">SessionLifetimeInMinutes</a> </code> parameter. The resulting user session is valid for 15 minutes (minimum) to 10 hours (maximum). The default session duration is 10 hours.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Amazon QuickSight.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedded Analytics</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon QuickSight Developer Portal</a>.</p>"
+      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon Quick Suite dashboard or visual in your website, without having to register any reader users. Before you use this action, make sure that you have configured the dashboards and permissions.</p> <p>The following rules apply to the generated URL:</p> <ul> <li> <p>It contains a temporary bearer token. It is valid for 5 minutes after it is generated. Once redeemed within this period, it cannot be re-used again.</p> </li> <li> <p>The URL validity period should not be confused with the actual session lifetime that can be customized using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForAnonymousUser.html#QS-GenerateEmbedUrlForAnonymousUser-request-SessionLifetimeInMinutes\">SessionLifetimeInMinutes</a> </code> parameter. The resulting user session is valid for 15 minutes (minimum) to 10 hours (maximum). The default session duration is 10 hours.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Amazon Quick Suite.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedded Analytics</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon Quick Suite Developer Portal</a>.</p>"
     },
     "GenerateEmbedUrlForRegisteredUser":{
       "name":"GenerateEmbedUrlForRegisteredUser",
@@ -2091,7 +2205,7 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon QuickSight experience in your website. This action can be used for any type of user registered in an Amazon QuickSight account. Before you use this action, make sure that you have configured the relevant Amazon QuickSight resource and permissions.</p> <p>The following rules apply to the generated URL:</p> <ul> <li> <p>It contains a temporary bearer token. It is valid for 5 minutes after it is generated. Once redeemed within this period, it cannot be re-used again.</p> </li> <li> <p>The URL validity period should not be confused with the actual session lifetime that can be customized using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html#QS-GenerateEmbedUrlForRegisteredUser-request-SessionLifetimeInMinutes\">SessionLifetimeInMinutes</a> </code> parameter.</p> <p>The resulting user session is valid for 15 minutes (minimum) to 10 hours (maximum). The default session duration is 10 hours.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Amazon QuickSight.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedded Analytics</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon QuickSight Developer Portal</a>.</p>"
+      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon Quick Suite experience in your website. This action can be used for any type of user registered in an Amazon Quick Suite account. Before you use this action, make sure that you have configured the relevant Amazon Quick Suite resource and permissions.</p> <p>The following rules apply to the generated URL:</p> <ul> <li> <p>It contains a temporary bearer token. It is valid for 5 minutes after it is generated. Once redeemed within this period, it cannot be re-used again.</p> </li> <li> <p>The URL validity period should not be confused with the actual session lifetime that can be customized using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html#QS-GenerateEmbedUrlForRegisteredUser-request-SessionLifetimeInMinutes\">SessionLifetimeInMinutes</a> </code> parameter.</p> <p>The resulting user session is valid for 15 minutes (minimum) to 10 hours (maximum). The default session duration is 10 hours.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Amazon Quick Suite.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedded Analytics</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon Quick Suite Developer Portal</a>.</p>"
     },
     "GenerateEmbedUrlForRegisteredUserWithIdentity":{
       "name":"GenerateEmbedUrlForRegisteredUserWithIdentity",
@@ -2112,7 +2226,7 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon QuickSight experience in your website. This action can be used for any type of user that is registered in an Amazon QuickSight account that uses IAM Identity Center for authentication. This API requires <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html#types-identity-enhanced-iam-role-sessions\">identity-enhanced IAM Role sessions</a> for the authenticated user that the API call is being made for.</p> <p>This API uses <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html\">trusted identity propagation</a> to ensure that an end user is authenticated and receives the embed URL that is specific to that user. The IAM Identity Center application that the user has logged into needs to have <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-using-customermanagedapps-specify-trusted-apps.html\">trusted Identity Propagation enabled for Amazon QuickSight</a> with the scope value set to <code>quicksight:read</code>. Before you use this action, make sure that you have configured the relevant Amazon QuickSight resource and permissions.</p>"
+      "documentation":"<p>Generates an embed URL that you can use to embed an Amazon Quick Sight experience in your website. This action can be used for any type of user that is registered in an Amazon Quick Sight account that uses IAM Identity Center for authentication. This API requires <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html#types-identity-enhanced-iam-role-sessions\">identity-enhanced IAM Role sessions</a> for the authenticated user that the API call is being made for.</p> <p>This API uses <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html\">trusted identity propagation</a> to ensure that an end user is authenticated and receives the embed URL that is specific to that user. The IAM Identity Center application that the user has logged into needs to have <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-using-customermanagedapps-specify-trusted-apps.html\">trusted Identity Propagation enabled for Amazon Quick Sight</a> with the scope value set to <code>quicksight:read</code>. Before you use this action, make sure that you have configured the relevant Amazon Quick Sight resource and permissions.</p>"
     },
     "GetDashboardEmbedUrl":{
       "name":"GetDashboardEmbedUrl",
@@ -2136,7 +2250,43 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Generates a temporary session URL and authorization code(bearer token) that you can use to embed an Amazon QuickSight read-only dashboard in your website or application. Before you use this command, make sure that you have configured the dashboards and permissions. </p> <p>Currently, you can use <code>GetDashboardEmbedURL</code> only from the server, not from the user's browser. The following rules apply to the generated URL:</p> <ul> <li> <p>They must be used together.</p> </li> <li> <p>They can be used one time only.</p> </li> <li> <p>They are valid for 5 minutes after you run this command.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Amazon QuickSight.</p> </li> <li> <p>The resulting user session is valid for 15 minutes (default) up to 10 hours (maximum). You can use the optional <code>SessionLifetimeInMinutes</code> parameter to customize session duration.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html\">Embedding Analytics Using GetDashboardEmbedUrl</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon QuickSight Developer Portal</a>.</p>"
+      "documentation":"<p>Generates a temporary session URL and authorization code(bearer token) that you can use to embed an Amazon Quick Sight read-only dashboard in your website or application. Before you use this command, make sure that you have configured the dashboards and permissions. </p> <p>Currently, you can use <code>GetDashboardEmbedURL</code> only from the server, not from the user's browser. The following rules apply to the generated URL:</p> <ul> <li> <p>They must be used together.</p> </li> <li> <p>They can be used one time only.</p> </li> <li> <p>They are valid for 5 minutes after you run this command.</p> </li> <li> <p>You are charged only when the URL is used or there is interaction with Quick Suite.</p> </li> <li> <p>The resulting user session is valid for 15 minutes (default) up to 10 hours (maximum). You can use the optional <code>SessionLifetimeInMinutes</code> parameter to customize session duration.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-deprecated.html\">Embedding Analytics Using GetDashboardEmbedUrl</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon Quick Suite Developer Portal</a>.</p>"
+    },
+    "GetFlowMetadata":{
+      "name":"GetFlowMetadata",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/flows/{FlowId}/metadata",
+        "responseCode":200
+      },
+      "input":{"shape":"GetFlowMetadataInput"},
+      "output":{"shape":"GetFlowMetadataOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the metadata of a flow, not including its definition specifying the steps.</p>",
+      "readonly":true
+    },
+    "GetFlowPermissions":{
+      "name":"GetFlowPermissions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/flows/{FlowId}/permissions",
+        "responseCode":200
+      },
+      "input":{"shape":"GetFlowPermissionsInput"},
+      "output":{"shape":"GetFlowPermissionsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Get permissions for a flow.</p>",
+      "readonly":true
     },
     "GetSessionEmbedUrl":{
       "name":"GetSessionEmbedUrl",
@@ -2157,7 +2307,26 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Generates a session URL and authorization code that you can use to embed the Amazon Amazon QuickSight console in your web server code. Use <code>GetSessionEmbedUrl</code> where you want to provide an authoring portal that allows users to create data sources, datasets, analyses, and dashboards. The users who access an embedded Amazon QuickSight console need belong to the author or admin security cohort. If you want to restrict permissions to some of these features, add a custom permissions profile to the user with the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> API operation. Use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html\">RegisterUser</a> </code> API operation to add a new user with a custom permission profile attached. For more information, see the following sections in the <i>Amazon QuickSight User Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedding Analytics</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon QuickSight Console</a> </p> </li> </ul>"
+      "documentation":"<p>Generates a session URL and authorization code that you can use to embed the Amazon Amazon Quick Sight console in your web server code. Use <code>GetSessionEmbedUrl</code> where you want to provide an authoring portal that allows users to create data sources, datasets, analyses, and dashboards. The users who access an embedded Amazon Quick Sight console need belong to the author or admin security cohort. If you want to restrict permissions to some of these features, add a custom permissions profile to the user with the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> API operation. Use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html\">RegisterUser</a> </code> API operation to add a new user with a custom permission profile attached. For more information, see the following sections in the <i>Amazon Quick Suite User Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics.html\">Embedding Analytics</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon Quick Suite Console</a> </p> </li> </ul>"
+    },
+    "ListActionConnectors":{
+      "name":"ListActionConnectors",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors",
+        "responseCode":200
+      },
+      "input":{"shape":"ListActionConnectorsRequest"},
+      "output":{"shape":"ListActionConnectorsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"InvalidNextTokenException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all action connectors in the specified Amazon Web Services account. Returns summary information for each connector including its name, type, creation time, and status.</p>",
+      "readonly":true
     },
     "ListAnalyses":{
       "name":"ListAnalyses",
@@ -2173,7 +2342,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists Amazon QuickSight analyses that exist in the specified Amazon Web Services account.</p>"
+      "documentation":"<p>Lists Amazon Quick Sight analyses that exist in the specified Amazon Web Services account.</p>"
     },
     "ListAssetBundleExportJobs":{
       "name":"ListAssetBundleExportJobs",
@@ -2224,7 +2393,8 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists all brands in an Amazon QuickSight account.</p>"
+      "documentation":"<p>Lists all brands in an Quick Sight account.</p>",
+      "readonly":true
     },
     "ListCustomPermissions":{
       "name":"ListCustomPermissions",
@@ -2261,7 +2431,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists all the versions of the dashboards in the Amazon QuickSight subscription.</p>"
+      "documentation":"<p>Lists all the versions of the dashboards in the Amazon Quick Sight subscription.</p>"
     },
     "ListDashboards":{
       "name":"ListDashboards",
@@ -2313,6 +2483,24 @@
       ],
       "documentation":"<p>Lists data sources in current Amazon Web Services Region that belong to this Amazon Web Services account.</p>"
     },
+    "ListFlows":{
+      "name":"ListFlows",
+      "http":{
+        "method":"GET",
+        "requestUri":"/accounts/{AwsAccountId}/flows",
+        "responseCode":200
+      },
+      "input":{"shape":"ListFlowsInput"},
+      "output":{"shape":"ListFlowsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists flows in an Amazon Web Services account.</p>",
+      "readonly":true
+    },
     "ListFolderMembers":{
       "name":"ListFolderMembers",
       "http":{
@@ -2408,7 +2596,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Lists all user groups in Amazon QuickSight. </p>"
+      "documentation":"<p>Lists all user groups in Amazon Quick Sight. </p>"
     },
     "ListIAMPolicyAssignments":{
       "name":"ListIAMPolicyAssignments",
@@ -2426,7 +2614,7 @@
         {"shape":"InvalidNextTokenException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists the IAM policy assignments in the current Amazon QuickSight account.</p>"
+      "documentation":"<p>Lists the IAM policy assignments in the current Amazon Quick Sight account.</p>"
     },
     "ListIAMPolicyAssignmentsForUser":{
       "name":"ListIAMPolicyAssignmentsForUser",
@@ -2462,7 +2650,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists all services and authorized targets that the Amazon QuickSight IAM Identity Center application can access.</p> <p>This operation is only supported for Amazon QuickSight accounts that use IAM Identity Center.</p>"
+      "documentation":"<p>Lists all services and authorized targets that the Quick Sight IAM Identity Center application can access.</p> <p>This operation is only supported for Quick Sight accounts that use IAM Identity Center.</p>"
     },
     "ListIngestions":{
       "name":"ListIngestions",
@@ -2481,7 +2669,7 @@
         {"shape":"InvalidNextTokenException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists the history of SPICE ingestions for a dataset.</p>"
+      "documentation":"<p>Lists the history of SPICE ingestions for a dataset. Limited to 5 TPS per user and 25 TPS per account.</p>"
     },
     "ListNamespaces":{
       "name":"ListNamespaces",
@@ -2592,7 +2780,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists all the versions of the templates in the current Amazon QuickSight account.</p>"
+      "documentation":"<p>Lists all the versions of the templates in the current Amazon Quick Sight account.</p>"
     },
     "ListTemplates":{
       "name":"ListTemplates",
@@ -2610,7 +2798,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Lists all the templates in the current Amazon QuickSight account.</p>"
+      "documentation":"<p>Lists all the templates in the current Amazon Quick Sight account.</p>"
     },
     "ListThemeAliases":{
       "name":"ListThemeAliases",
@@ -2740,7 +2928,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Lists the Amazon QuickSight groups that an Amazon QuickSight user is a member of.</p>"
+      "documentation":"<p>Lists the Amazon Quick Sight groups that an Amazon Quick Sight user is a member of.</p>"
     },
     "ListUsers":{
       "name":"ListUsers",
@@ -2760,7 +2948,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Returns a list of all of the Amazon QuickSight users belonging to this account. </p>"
+      "documentation":"<p>Returns a list of all of the Amazon Quick Sight users belonging to this account. </p>"
     },
     "ListVPCConnections":{
       "name":"ListVPCConnections",
@@ -2794,7 +2982,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Predicts existing visuals or generates new visuals to answer a given query.</p>"
+      "documentation":"<p>Predicts existing visuals or generates new visuals to answer a given query.</p> <p>This API uses <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation.html\">trusted identity propagation</a> to ensure that an end user is authenticated and receives the embed URL that is specific to that user. The IAM Identity Center application that the user has logged into needs to have <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-using-customermanagedapps-specify-trusted-apps.html\">trusted Identity Propagation enabled for Quick Suite</a> with the scope value set to <code>quicksight:read</code>. Before you use this action, make sure that you have configured the relevant Quick Suite resource and permissions.</p> <p>We recommend enabling the <code>QSearchStatus</code> API to unlock the full potential of <code>PredictQnA</code>. When <code>QSearchStatus</code> is enabled, it first checks the specified dashboard for any existing visuals that match the question. If no matching visuals are found, <code>PredictQnA</code> uses generative Q&amp;A to provide an answer. To update the <code>QSearchStatus</code>, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateQuickSightQSearchConfiguration.html\">UpdateQuickSightQSearchConfiguration</a>.</p>"
     },
     "PutDataSetRefreshProperties":{
       "name":"PutDataSetRefreshProperties",
@@ -2835,7 +3023,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Creates an Amazon QuickSight user whose identity is associated with the Identity and Access Management (IAM) identity or role specified in the request. When you register a new user from the Amazon QuickSight API, Amazon QuickSight generates a registration URL. The user accesses this registration URL to create their account. Amazon QuickSight doesn't send a registration email to users who are registered from the Amazon QuickSight API. If you want new users to receive a registration email, then add those users in the Amazon QuickSight console. For more information on registering a new user in the Amazon QuickSight console, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/managing-users.html#inviting-users\"> Inviting users to access Amazon QuickSight</a>.</p>"
+      "documentation":"<p>Creates an Amazon Quick Sight user whose identity is associated with the Identity and Access Management (IAM) identity or role specified in the request. When you register a new user from the Quick Sight API, Quick Sight generates a registration URL. The user accesses this registration URL to create their account. Quick Sight doesn't send a registration email to users who are registered from the Quick Sight API. If you want new users to receive a registration email, then add those users in the Quick Sight console. For more information on registering a new user in the Quick Sight console, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/managing-users.html#inviting-users\"> Inviting users to access Quick Sight</a>.</p>"
     },
     "RestoreAnalysis":{
       "name":"RestoreAnalysis",
@@ -2857,6 +3045,24 @@
       ],
       "documentation":"<p>Restores an analysis.</p>"
     },
+    "SearchActionConnectors":{
+      "name":"SearchActionConnectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/accounts/{AwsAccountId}/search/action-connectors",
+        "responseCode":200
+      },
+      "input":{"shape":"SearchActionConnectorsRequest"},
+      "output":{"shape":"SearchActionConnectorsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InvalidNextTokenException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Searches for action connectors in the specified Amazon Web Services account using filters. You can search by connector name, type, or user permissions.</p>",
+      "readonly":true
+    },
     "SearchAnalyses":{
       "name":"SearchAnalyses",
       "http":{
@@ -2929,6 +3135,24 @@
       ],
       "documentation":"<p>Use the <code>SearchDataSources</code> operation to search for data sources that belong to an account.</p>"
     },
+    "SearchFlows":{
+      "name":"SearchFlows",
+      "http":{
+        "method":"POST",
+        "requestUri":"/accounts/{AwsAccountId}/flows/searchFlows",
+        "responseCode":200
+      },
+      "input":{"shape":"SearchFlowsInput"},
+      "output":{"shape":"SearchFlowsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Search for the flows in an Amazon Web Services account.</p>",
+      "readonly":true
+    },
     "SearchFolders":{
       "name":"SearchFolders",
       "http":{
@@ -2967,7 +3191,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Use the <code>SearchGroups</code> operation to search groups in a specified Amazon QuickSight namespace using the supplied filters.</p>"
+      "documentation":"<p>Use the <code>SearchGroups</code> operation to search groups in a specified Quick Sight namespace using the supplied filters.</p>"
     },
     "SearchTopics":{
       "name":"SearchTopics",
@@ -2985,7 +3209,7 @@
         {"shape":"InvalidNextTokenException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Searches for any Q topic that exists in an Amazon QuickSight account.</p>"
+      "documentation":"<p>Searches for any Q topic that exists in an Quick Suite account.</p>"
     },
     "StartAssetBundleExportJob":{
       "name":"StartAssetBundleExportJob",
@@ -3004,7 +3228,7 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Starts an Asset Bundle export job.</p> <p>An Asset Bundle export job exports specified Amazon QuickSight assets. You can also choose to export any asset dependencies in the same job. Export jobs run asynchronously and can be polled with a <code>DescribeAssetBundleExportJob</code> API call. When a job is successfully completed, a download URL that contains the exported assets is returned. The URL is valid for 5 minutes and can be refreshed with a <code>DescribeAssetBundleExportJob</code> API call. Each Amazon QuickSight account can run up to 5 export jobs concurrently.</p> <p>The API caller must have the necessary permissions in their IAM role to access each resource before the resources can be exported.</p>"
+      "documentation":"<p>Starts an Asset Bundle export job.</p> <p>An Asset Bundle export job exports specified Amazon Quick Sight assets. You can also choose to export any asset dependencies in the same job. Export jobs run asynchronously and can be polled with a <code>DescribeAssetBundleExportJob</code> API call. When a job is successfully completed, a download URL that contains the exported assets is returned. The URL is valid for 5 minutes and can be refreshed with a <code>DescribeAssetBundleExportJob</code> API call. Each Amazon Quick Sight account can run up to 5 export jobs concurrently.</p> <p>The API caller must have the necessary permissions in their IAM role to access each resource before the resources can be exported.</p>"
     },
     "StartAssetBundleImportJob":{
       "name":"StartAssetBundleImportJob",
@@ -3023,7 +3247,7 @@
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Starts an Asset Bundle import job.</p> <p>An Asset Bundle import job imports specified Amazon QuickSight assets into an Amazon QuickSight account. You can also choose to import a naming prefix and specified configuration overrides. The assets that are contained in the bundle file that you provide are used to create or update a new or existing asset in your Amazon QuickSight account. Each Amazon QuickSight account can run up to 5 import jobs concurrently.</p> <p>The API caller must have the necessary <code>\"create\"</code>, <code>\"describe\"</code>, and <code>\"update\"</code> permissions in their IAM role to access each resource type that is contained in the bundle file before the resources can be imported.</p>"
+      "documentation":"<p>Starts an Asset Bundle import job.</p> <p>An Asset Bundle import job imports specified Amazon Quick Sight assets into an Amazon Quick Sight account. You can also choose to import a naming prefix and specified configuration overrides. The assets that are contained in the bundle file that you provide are used to create or update a new or existing asset in your Amazon Quick Sight account. Each Amazon Quick Sight account can run up to 5 import jobs concurrently.</p> <p>The API caller must have the necessary <code>\"create\"</code>, <code>\"describe\"</code>, and <code>\"update\"</code> permissions in their IAM role to access each resource type that is contained in the bundle file before the resources can be imported.</p>"
     },
     "StartDashboardSnapshotJob":{
       "name":"StartDashboardSnapshotJob",
@@ -3044,7 +3268,7 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Starts an asynchronous job that generates a snapshot of a dashboard's output. You can request one or several of the following format configurations in each API call.</p> <ul> <li> <p>1 Paginated PDF</p> </li> <li> <p>1 Excel workbook that includes up to 5 table or pivot table visuals</p> </li> <li> <p>5 CSVs from table or pivot table visuals</p> </li> </ul> <p>The status of a submitted job can be polled with the <code>DescribeDashboardSnapshotJob</code> API. When you call the <code>DescribeDashboardSnapshotJob</code> API, check the <code>JobStatus</code> field in the response. Once the job reaches a <code>COMPLETED</code> or <code>FAILED</code> status, use the <code>DescribeDashboardSnapshotJobResult</code> API to obtain the URLs for the generated files. If the job fails, the <code>DescribeDashboardSnapshotJobResult</code> API returns detailed information about the error that occurred.</p> <p> <b>StartDashboardSnapshotJob API throttling</b> </p> <p>Amazon QuickSight utilizes API throttling to create a more consistent user experience within a time span for customers when they call the <code>StartDashboardSnapshotJob</code>. By default, 12 jobs can run simlutaneously in one Amazon Web Services account and users can submit up 10 API requests per second before an account is throttled. If an overwhelming number of API requests are made by the same user in a short period of time, Amazon QuickSight throttles the API calls to maintin an optimal experience and reliability for all Amazon QuickSight users.</p> <p> <b>Common throttling scenarios</b> </p> <p>The following list provides information about the most commin throttling scenarios that can occur.</p> <ul> <li> <p> <b>A large number of <code>SnapshotExport</code> API jobs are running simultaneously on an Amazon Web Services account.</b> When a new <code>StartDashboardSnapshotJob</code> is created and there are already 12 jobs with the <code>RUNNING</code> status, the new job request fails and returns a <code>LimitExceededException</code> error. Wait for a current job to comlpete before you resubmit the new job.</p> </li> <li> <p> <b>A large number of API requests are submitted on an Amazon Web Services account.</b> When a user makes more than 10 API calls to the Amazon QuickSight API in one second, a <code>ThrottlingException</code> is returned.</p> </li> </ul> <p>If your use case requires a higher throttling limit, contact your account admin or <a href=\"http://aws.amazon.com/contact-us/\">Amazon Web ServicesSupport</a> to explore options to tailor a more optimal expereince for your account.</p> <p> <b>Best practices to handle throttling</b> </p> <p>If your use case projects high levels of API traffic, try to reduce the degree of frequency and parallelism of API calls as much as you can to avoid throttling. You can also perform a timing test to calculate an estimate for the total processing time of your projected load that stays within the throttling limits of the Amazon QuickSight APIs. For example, if your projected traffic is 100 snapshot jobs before 12:00 PM per day, start 12 jobs in parallel and measure the amount of time it takes to proccess all 12 jobs. Once you obtain the result, multiply the duration by 9, for example <code>(12 minutes * 9 = 108 minutes)</code>. Use the new result to determine the latest time at which the jobs need to be started to meet your target deadline.</p> <p>The time that it takes to process a job can be impacted by the following factors:</p> <ul> <li> <p>The dataset type (Direct Query or SPICE).</p> </li> <li> <p>The size of the dataset.</p> </li> <li> <p>The complexity of the calculated fields that are used in the dashboard.</p> </li> <li> <p>The number of visuals that are on a sheet.</p> </li> <li> <p>The types of visuals that are on the sheet.</p> </li> <li> <p>The number of formats and snapshots that are requested in the job configuration.</p> </li> <li> <p>The size of the generated snapshots.</p> </li> </ul>"
+      "documentation":"<p>Starts an asynchronous job that generates a snapshot of a dashboard's output. You can request one or several of the following format configurations in each API call.</p> <ul> <li> <p>1 Paginated PDF</p> </li> <li> <p>1 Excel workbook that includes up to 5 table or pivot table visuals</p> </li> <li> <p>5 CSVs from table or pivot table visuals</p> </li> </ul> <p>The status of a submitted job can be polled with the <code>DescribeDashboardSnapshotJob</code> API. When you call the <code>DescribeDashboardSnapshotJob</code> API, check the <code>JobStatus</code> field in the response. Once the job reaches a <code>COMPLETED</code> or <code>FAILED</code> status, use the <code>DescribeDashboardSnapshotJobResult</code> API to obtain the URLs for the generated files. If the job fails, the <code>DescribeDashboardSnapshotJobResult</code> API returns detailed information about the error that occurred.</p> <p> <b>StartDashboardSnapshotJob API throttling</b> </p> <p>Quick Sight utilizes API throttling to create a more consistent user experience within a time span for customers when they call the <code>StartDashboardSnapshotJob</code>. By default, 12 jobs can run simlutaneously in one Amazon Web Services account and users can submit up 10 API requests per second before an account is throttled. If an overwhelming number of API requests are made by the same user in a short period of time, Quick Sight throttles the API calls to maintin an optimal experience and reliability for all Quick Sight users.</p> <p> <b>Common throttling scenarios</b> </p> <p>The following list provides information about the most commin throttling scenarios that can occur.</p> <ul> <li> <p> <b>A large number of <code>SnapshotExport</code> API jobs are running simultaneously on an Amazon Web Services account.</b> When a new <code>StartDashboardSnapshotJob</code> is created and there are already 12 jobs with the <code>RUNNING</code> status, the new job request fails and returns a <code>LimitExceededException</code> error. Wait for a current job to comlpete before you resubmit the new job.</p> </li> <li> <p> <b>A large number of API requests are submitted on an Amazon Web Services account.</b> When a user makes more than 10 API calls to the Quick Sight API in one second, a <code>ThrottlingException</code> is returned.</p> </li> </ul> <p>If your use case requires a higher throttling limit, contact your account admin or <a href=\"http://aws.amazon.com/contact-us/\">Amazon Web ServicesSupport</a> to explore options to tailor a more optimal expereince for your account.</p> <p> <b>Best practices to handle throttling</b> </p> <p>If your use case projects high levels of API traffic, try to reduce the degree of frequency and parallelism of API calls as much as you can to avoid throttling. You can also perform a timing test to calculate an estimate for the total processing time of your projected load that stays within the throttling limits of the Quick Sight APIs. For example, if your projected traffic is 100 snapshot jobs before 12:00 PM per day, start 12 jobs in parallel and measure the amount of time it takes to proccess all 12 jobs. Once you obtain the result, multiply the duration by 9, for example <code>(12 minutes * 9 = 108 minutes)</code>. Use the new result to determine the latest time at which the jobs need to be started to meet your target deadline.</p> <p>The time that it takes to process a job can be impacted by the following factors:</p> <ul> <li> <p>The dataset type (Direct Query or SPICE).</p> </li> <li> <p>The size of the dataset.</p> </li> <li> <p>The complexity of the calculated fields that are used in the dashboard.</p> </li> <li> <p>The number of visuals that are on a sheet.</p> </li> <li> <p>The types of visuals that are on the sheet.</p> </li> <li> <p>The number of formats and snapshots that are requested in the job configuration.</p> </li> <li> <p>The size of the generated snapshots.</p> </li> </ul>"
     },
     "StartDashboardSnapshotJobSchedule":{
       "name":"StartDashboardSnapshotJobSchedule",
@@ -3063,7 +3287,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Starts an asynchronous job that runs an existing dashboard schedule and sends the dashboard snapshot through email. </p> <p>Only one job can run simultaneously in a given schedule. Repeated requests are skipped with a <code>202</code> HTTP status code.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sending-reports.html\">Scheduling and sending Amazon QuickSight reports by email</a> and <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/email-reports-from-dashboard.html\">Configuring email report settings for a Amazon QuickSight dashboard</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>Starts an asynchronous job that runs an existing dashboard schedule and sends the dashboard snapshot through email. </p> <p>Only one job can run simultaneously in a given schedule. Repeated requests are skipped with a <code>202</code> HTTP status code.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sending-reports.html\">Scheduling and sending Amazon Quick Sight reports by email</a> and <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/email-reports-from-dashboard.html\">Configuring email report settings for a Amazon Quick Sight dashboard</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -3081,7 +3305,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified Amazon QuickSight resource. </p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only resources with certain tag values. You can use the <code>TagResource</code> operation with a resource that already has tags. If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag.</p> <p>You can associate as many as 50 tags with a resource. Amazon QuickSight supports tagging on data set, data source, dashboard, template, topic, and user. </p> <p>Tagging for Amazon QuickSight works in a similar way to tagging for other Amazon Web Services services, except for the following:</p> <ul> <li> <p>Tags are used to track costs for users in Amazon QuickSight. You can't tag other resources that Amazon QuickSight costs are based on, such as storage capacoty (SPICE), session usage, alert consumption, or reporting units.</p> </li> <li> <p>Amazon QuickSight doesn't currently support the tag editor for Resource Groups.</p> </li> </ul>"
+      "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified Amazon Quick Sight resource. </p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only resources with certain tag values. You can use the <code>TagResource</code> operation with a resource that already has tags. If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag.</p> <p>You can associate as many as 50 tags with a resource. Amazon Quick Sight supports tagging on data set, data source, dashboard, template, topic, and user. </p> <p>Tagging for Amazon Quick Sight works in a similar way to tagging for other Amazon Web Services services, except for the following:</p> <ul> <li> <p>Tags are used to track costs for users in Amazon Quick Sight. You can't tag other resources that Amazon Quick Sight costs are based on, such as storage capacoty (SPICE), session usage, alert consumption, or reporting units.</p> </li> <li> <p>Amazon Quick Sight doesn't currently support the tag editor for Resource Groups.</p> </li> </ul>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -3100,6 +3324,23 @@
       ],
       "documentation":"<p>Removes a tag or tags from a resource.</p>"
     },
+    "UpdateAccountCustomPermission":{
+      "name":"UpdateAccountCustomPermission",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/accounts/{AwsAccountId}/custom-permission"
+      },
+      "input":{"shape":"UpdateAccountCustomPermissionRequest"},
+      "output":{"shape":"UpdateAccountCustomPermissionResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalFailureException"}
+      ],
+      "documentation":"<p>Applies a custom permissions profile to an account.</p>"
+    },
     "UpdateAccountCustomization":{
       "name":"UpdateAccountCustomization",
       "http":{
@@ -3117,7 +3358,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Updates Amazon QuickSight customizations for the current Amazon Web Services Region. Currently, the only customization that you can use is a theme.</p> <p>You can use customizations for your Amazon Web Services account or, if you specify a namespace, for a Amazon QuickSight namespace instead. Customizations that apply to a namespace override customizations that apply to an Amazon Web Services account. To find out which customizations apply, use the <code>DescribeAccountCustomization</code> API operation. </p>"
+      "documentation":"<p>Updates Amazon Quick Sight customizations. Currently, the only customization that you can use is a theme.</p> <p>You can use customizations for your Amazon Web Services account or, if you specify a namespace, for a Quick Sight namespace instead. Customizations that apply to a namespace override customizations that apply to an Amazon Web Services account. To find out which customizations apply, use the <code>DescribeAccountCustomization</code> API operation. </p>"
     },
     "UpdateAccountSettings":{
       "name":"UpdateAccountSettings",
@@ -3135,7 +3376,48 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Updates the Amazon QuickSight settings in your Amazon Web Services account.</p>"
+      "documentation":"<p>Updates the Amazon Quick Sight settings in your Amazon Web Services account.</p>"
+    },
+    "UpdateActionConnector":{
+      "name":"UpdateActionConnector",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors/{ActionConnectorId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateActionConnectorRequest"},
+      "output":{"shape":"UpdateActionConnectorResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Updates an existing action connector with new configuration details, authentication settings, or enabled actions. You can modify the connector's name, description, authentication configuration, and which actions are enabled. For more information, <a href=\"https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-action-auth.html\">https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-action-auth.html</a>.</p>",
+      "idempotent":true
+    },
+    "UpdateActionConnectorPermissions":{
+      "name":"UpdateActionConnectorPermissions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/accounts/{AwsAccountId}/action-connectors/{ActionConnectorId}/permissions",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateActionConnectorPermissionsRequest"},
+      "output":{"shape":"UpdateActionConnectorPermissionsResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"UnsupportedUserEditionException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Updates the permissions for an action connector by granting or revoking access for specific users and groups. You can control who can view, use, or manage the action connector.</p>"
     },
     "UpdateAnalysis":{
       "name":"UpdateAnalysis",
@@ -3154,7 +3436,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates an analysis in Amazon QuickSight</p>"
+      "documentation":"<p>Updates an analysis in Amazon Quick Sight</p>"
     },
     "UpdateAnalysisPermissions":{
       "name":"UpdateAnalysisPermissions",
@@ -3192,7 +3474,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates an Amazon QuickSight application with a token exchange grant. This operation only supports Amazon QuickSight applications that are registered with IAM Identity Center.</p>"
+      "documentation":"<p>Updates an Quick Suite application with a token exchange grant. This operation only supports Quick Suite applications that are registered with IAM Identity Center.</p>"
     },
     "UpdateBrand":{
       "name":"UpdateBrand",
@@ -3207,8 +3489,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates a brand.</p>",
@@ -3227,8 +3509,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates a brand assignment.</p>",
@@ -3247,8 +3529,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InvalidRequestException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the published version of a brand.</p>",
@@ -3383,6 +3665,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"UnsupportedUserEditionException"},
+        {"shape":"InvalidDataSetParameterValueException"},
         {"shape":"InternalFailureException"}
       ],
       "documentation":"<p>Updates a dataset. This operation doesn't support datasets that include uploaded files as a source. Partial updates are not supported by this operation.</p>"
@@ -3458,7 +3741,25 @@
         {"shape":"InvalidParameterValueException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates a Amazon Q Business application that is linked to a Amazon QuickSight account.</p>"
+      "documentation":"<p>Updates a Amazon Q Business application that is linked to a Quick Sight account.</p>"
+    },
+    "UpdateFlowPermissions":{
+      "name":"UpdateFlowPermissions",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/accounts/{AwsAccountId}/flows/{FlowId}/permissions",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateFlowPermissionsInput"},
+      "output":{"shape":"UpdateFlowPermissionsOutput"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InvalidParameterValueException"},
+        {"shape":"InternalFailureException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates permissions against principals on a flow.</p>",
+      "idempotent":true
     },
     "UpdateFolder":{
       "name":"UpdateFolder",
@@ -3552,7 +3853,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Adds or updates services and authorized targets to configure what the Amazon QuickSight IAM Identity Center application can access.</p> <p>This operation is only supported for Amazon QuickSight accounts using IAM Identity Center</p>"
+      "documentation":"<p>Adds or updates services and authorized targets to configure what the Quick Sight IAM Identity Center application can access.</p> <p>This operation is only supported for Quick Sight accounts using IAM Identity Center</p>"
     },
     "UpdateIpRestriction":{
       "name":"UpdateIpRestriction",
@@ -3586,7 +3887,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates a customer managed key in a Amazon QuickSight account.</p>"
+      "documentation":"<p>Updates a customer managed key in a Quick Sight account.</p>"
     },
     "UpdatePublicSharingSettings":{
       "name":"UpdatePublicSharingSettings",
@@ -3604,7 +3905,7 @@
         {"shape":"UnsupportedPricingPlanException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Use the <code>UpdatePublicSharingSettings</code> operation to turn on or turn off the public sharing settings of an Amazon QuickSight dashboard.</p> <p>To use this operation, turn on session capacity pricing for your Amazon QuickSight account.</p> <p>Before you can turn on public sharing on your account, make sure to give public sharing permissions to an administrative user in the Identity and Access Management (IAM) console. For more information on using IAM with Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/security_iam_service-with-iam.html\">Using Amazon QuickSight with IAM</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<important> <p>This API controls public sharing settings for your entire Quick Sight account, affecting data security and access. When you enable public sharing:</p> <ul> <li> <p>Dashboards can be shared publicly</p> </li> <li> <p>This setting affects your entire Amazon Web Services account and all Quick Sight users</p> </li> </ul> <p> <b>Before proceeding:</b> Ensure you understand the security implications and have proper IAM permissions configured.</p> </important> <p>Use the <code>UpdatePublicSharingSettings</code> operation to turn on or turn off the public sharing settings of an Amazon Quick Sight dashboard.</p> <p>To use this operation, turn on session capacity pricing for your Amazon Quick Sight account.</p> <p>Before you can turn on public sharing on your account, make sure to give public sharing permissions to an administrative user in the Identity and Access Management (IAM) console. For more information on using IAM with Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/security_iam_service-with-iam.html\">Using Quick Suite with IAM</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
     },
     "UpdateQPersonalizationConfiguration":{
       "name":"UpdateQPersonalizationConfiguration",
@@ -3641,7 +3942,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates the state of a Amazon QuickSight Q Search configuration.</p>"
+      "documentation":"<p>Updates the state of a Quick Sight Q Search configuration.</p>"
     },
     "UpdateRefreshSchedule":{
       "name":"UpdateRefreshSchedule",
@@ -3696,7 +3997,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates the SPICE capacity configuration for a Amazon QuickSight account.</p>"
+      "documentation":"<p>Updates the SPICE capacity configuration for a Quick Sight account.</p>"
     },
     "UpdateTemplate":{
       "name":"UpdateTemplate",
@@ -3716,7 +4017,7 @@
         {"shape":"UnsupportedUserEditionException"},
         {"shape":"InternalFailureException"}
       ],
-      "documentation":"<p>Updates a template from an existing Amazon QuickSight analysis or another template.</p>"
+      "documentation":"<p>Updates a template from an existing Amazon Quick Sight analysis or another template.</p>"
     },
     "UpdateTemplateAlias":{
       "name":"UpdateTemplateAlias",
@@ -3890,7 +4191,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ResourceUnavailableException"}
       ],
-      "documentation":"<p>Updates an Amazon QuickSight user.</p>"
+      "documentation":"<p>Updates an Amazon Quick Sight user.</p>"
     },
     "UpdateUserCustomPermission":{
       "name":"UpdateUserCustomPermission",
@@ -3934,6 +4235,32 @@
     }
   },
   "shapes":{
+    "APIKey":{
+      "type":"string",
+      "sensitive":true
+    },
+    "APIKeyConnectionMetadata":{
+      "type":"structure",
+      "required":[
+        "BaseEndpoint",
+        "ApiKey"
+      ],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base URL endpoint for the external service.</p>"
+        },
+        "ApiKey":{
+          "shape":"APIKey",
+          "documentation":"<p>The API key used for authentication.</p>"
+        },
+        "Email":{
+          "shape":"Email",
+          "documentation":"<p>The email address associated with the API key, if required.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for API key-based authentication to external services.</p>"
+    },
     "AccessDeniedException":{
       "type":"structure",
       "members":{
@@ -3943,7 +4270,7 @@
           "documentation":"<p>The Amazon Web Services request ID for this request.</p>"
         }
       },
-      "documentation":"<p>You don't have access to this item. The provided credentials couldn't be validated. You might not be authorized to carry out the request. Make sure that your account is authorized to use the Amazon QuickSight service, that your policies have the correct permissions, and that you are using the correct credentials.</p>",
+      "documentation":"<p>You don't have access to this item. The provided credentials couldn't be validated. You might not be authorized to carry out the request. Make sure that your account is authorized to use the Amazon Quick Sight service, that your policies have the correct permissions, and that you are using the correct credentials.</p>",
       "error":{"httpStatusCode":401},
       "exception":true
     },
@@ -3952,33 +4279,39 @@
       "members":{
         "DefaultTheme":{
           "shape":"Arn",
-          "documentation":"<p>The default theme for this Amazon QuickSight subscription.</p>"
+          "documentation":"<p>The default theme for this Quick Sight subscription.</p>"
         },
         "DefaultEmailCustomizationTemplate":{
           "shape":"Arn",
           "documentation":"<p>The default email customization template.</p>"
         }
       },
-      "documentation":"<p>The Amazon QuickSight customizations associated with your Amazon Web Services account or a QuickSight namespace in a specific Amazon Web Services Region.</p>"
+      "documentation":"<p>The Quick Sight customizations associated with your Amazon Web Services account or a Quick Sight namespace in a specific Amazon Web Services Region.</p>"
+    },
+    "AccountId":{
+      "type":"string",
+      "max":12,
+      "min":12,
+      "pattern":"[0-9]{12}"
     },
     "AccountInfo":{
       "type":"structure",
       "members":{
         "AccountName":{
           "shape":"String",
-          "documentation":"<p>The account name that you provided for the Amazon QuickSight subscription in your Amazon Web Services account. You create this name when you sign up for Amazon QuickSight. It's unique over all of Amazon Web Services, and it appears only when users sign in.</p>"
+          "documentation":"<p>The account name that you provided for the Amazon Quick Sight subscription in your Amazon Web Services account. You create this name when you sign up for Quick Suite. It's unique over all of Amazon Web Services, and it appears only when users sign in.</p>"
         },
         "Edition":{
           "shape":"Edition",
-          "documentation":"<p>The edition of your Amazon QuickSight account.</p>"
+          "documentation":"<p>The edition of your Quick Sight account.</p>"
         },
         "NotificationEmail":{
           "shape":"String",
-          "documentation":"<p>The email address that will be used for Amazon QuickSight to send notifications regarding your Amazon Web Services account or Amazon QuickSight subscription.</p>"
+          "documentation":"<p>The email address that will be used for Quick Sight to send notifications regarding your Amazon Web Services account or Quick Sight subscription.</p>"
         },
         "AuthenticationType":{
           "shape":"String",
-          "documentation":"<p>The way that your Amazon QuickSight account is authenticated.</p>"
+          "documentation":"<p>The way that your Amazon Quick Sight account is authenticated.</p>"
         },
         "AccountSubscriptionStatus":{
           "shape":"String",
@@ -3989,7 +4322,7 @@
           "documentation":"<p>The Amazon Resource Name (ARN) for the IAM Identity Center instance.</p>"
         }
       },
-      "documentation":"<p>A structure that contains the following account information elements:</p> <ul> <li> <p>Your Amazon QuickSight account name.</p> </li> <li> <p>The edition of Amazon QuickSight that your account is using.</p> </li> <li> <p>The notification email address that is associated with the Amazon QuickSight account. </p> </li> <li> <p>The authentication type of the Amazon QuickSight account.</p> </li> <li> <p>The status of the Amazon QuickSight account's subscription.</p> </li> </ul>"
+      "documentation":"<p>A structure that contains the following account information elements: </p> <ul> <li> <p>Your Quick Sight account name.</p> </li> <li> <p>The edition of Quick Sight that your account is using.</p> </li> <li> <p>The notification email address that is associated with the Quick Sight account. </p> </li> <li> <p>The authentication type of the Quick Sight account.</p> </li> <li> <p>The status of the Quick Sight account's subscription.</p> </li> </ul>"
     },
     "AccountName":{
       "type":"string",
@@ -4002,30 +4335,256 @@
       "members":{
         "AccountName":{
           "shape":"String",
-          "documentation":"<p>The \"account name\" you provided for the Amazon QuickSight subscription in your Amazon Web Services account. You create this name when you sign up for Amazon QuickSight. It is unique in all of Amazon Web Services and it appears only when users sign in.</p>"
+          "documentation":"<p>The \"account name\" you provided for the Quick Sight subscription in your Amazon Web Services account. You create this name when you sign up for Quick Sight. It is unique in all of Amazon Web Services and it appears only when users sign in.</p>"
         },
         "Edition":{
           "shape":"Edition",
-          "documentation":"<p>The edition of Amazon QuickSight that you're currently subscribed to: Enterprise edition or Standard edition.</p>"
+          "documentation":"<p>The edition of Quick Sight that you're currently subscribed to: Enterprise edition or Standard edition.</p>"
         },
         "DefaultNamespace":{
           "shape":"Namespace",
-          "documentation":"<p>The default Amazon QuickSight namespace for your Amazon Web Services account. </p>"
+          "documentation":"<p>The default Quick Sight namespace for your Amazon Web Services account. </p>"
         },
         "NotificationEmail":{
           "shape":"String",
-          "documentation":"<p>The main notification email for your Amazon QuickSight subscription.</p>"
+          "documentation":"<p>The main notification email for your Quick Sight subscription.</p>"
         },
         "PublicSharingEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>A Boolean value that indicates whether public sharing is turned on for an Amazon QuickSight account. For more information about turning on public sharing, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdatePublicSharingSettings.html\">UpdatePublicSharingSettings</a>.</p>"
+          "documentation":"<p>A Boolean value that indicates whether public sharing is turned on for an Quick Suite account. For more information about turning on public sharing, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdatePublicSharingSettings.html\">UpdatePublicSharingSettings</a>.</p>"
         },
         "TerminationProtectionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>A boolean value that determines whether or not an Amazon QuickSight account can be deleted. A <code>True</code> value doesn't allow the account to be deleted and results in an error message if a user tries to make a <code>DeleteAccountSubsctiption</code> request. A <code>False</code> value will allow the ccount to be deleted. </p>"
+          "documentation":"<p>A boolean value that determines whether or not an Quick Sight account can be deleted. A <code>True</code> value doesn't allow the account to be deleted and results in an error message if a user tries to make a <code>DeleteAccountSubsctiption</code> request. A <code>False</code> value will allow the ccount to be deleted. </p>"
         }
       },
-      "documentation":"<p>The Amazon QuickSight settings associated with your Amazon Web Services account.</p>"
+      "documentation":"<p>The Quick Sight settings associated with your Amazon Web Services account.</p>"
+    },
+    "ActionConnector":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "ActionConnectorId",
+        "Type",
+        "Name",
+        "LastUpdatedTime"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector.</p>"
+        },
+        "Type":{
+          "shape":"ActionConnectorType",
+          "documentation":"<p>The type of action connector.</p>"
+        },
+        "Name":{
+          "shape":"ActionConnectorName",
+          "documentation":"<p>The name of the action connector.</p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the action connector was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the action connector was last updated.</p>"
+        },
+        "Status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the action connector.</p>"
+        },
+        "Error":{
+          "shape":"ActionConnectorError",
+          "documentation":"<p>Error information if the action connector is in an error state.</p>"
+        },
+        "Description":{
+          "shape":"ActionConnectorDescription",
+          "documentation":"<p>The description of the action connector.</p>"
+        },
+        "AuthenticationConfig":{
+          "shape":"ReadAuthConfig",
+          "documentation":"<p>The authentication configuration used to connect to the external service.</p>"
+        },
+        "EnabledActions":{
+          "shape":"ActionIdList",
+          "documentation":"<p>The list of actions that are enabled for this connector.</p>"
+        },
+        "VpcConnectionArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the VPC connection used for secure connectivity to the external service.</p>"
+        }
+      },
+      "documentation":"<p>Contains detailed information about an action connector, including its configuration, status, and enabled actions.</p>"
+    },
+    "ActionConnectorDescription":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"[A-Za-z0-9 _.,!?-]*",
+      "sensitive":true
+    },
+    "ActionConnectorError":{
+      "type":"structure",
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>The error message describing what went wrong with the action connector.</p>"
+        },
+        "Type":{
+          "shape":"ActionConnectorErrorType",
+          "documentation":"<p>The type or category of the error.</p>"
+        }
+      },
+      "documentation":"<p>Contains error information for an action connector that is in an error state.</p>"
+    },
+    "ActionConnectorErrorType":{
+      "type":"string",
+      "enum":["INTERNAL_FAILURE"]
+    },
+    "ActionConnectorName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[A-Za-z0-9](?:[\\w- ]*[A-Za-z0-9])?",
+      "sensitive":true
+    },
+    "ActionConnectorSearchFilter":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Operator",
+        "Value"
+      ],
+      "members":{
+        "Name":{
+          "shape":"ActionConnectorSearchFilterNameEnum",
+          "documentation":"<p>The name of the filter attribute (e.g., ACTION_CONNECTOR_NAME, ACTION_CONNECTOR_TYPE, QUICKSIGHT_VIEWER_OR_OWNER).</p>"
+        },
+        "Operator":{
+          "shape":"FilterOperator",
+          "documentation":"<p>The comparison operator to use for the filter (e.g., StringEquals, StringLike).</p>"
+        },
+        "Value":{
+          "shape":"String",
+          "documentation":"<p>The value to compare against using the specified operator.</p>"
+        }
+      },
+      "documentation":"<p>A filter used to search for action connectors based on specific criteria.</p>"
+    },
+    "ActionConnectorSearchFilterList":{
+      "type":"list",
+      "member":{"shape":"ActionConnectorSearchFilter"},
+      "max":1,
+      "min":0
+    },
+    "ActionConnectorSearchFilterNameEnum":{
+      "type":"string",
+      "enum":[
+        "ACTION_CONNECTOR_NAME",
+        "ACTION_CONNECTOR_TYPE",
+        "QUICKSIGHT_OWNER",
+        "QUICKSIGHT_VIEWER_OR_OWNER",
+        "DIRECT_QUICKSIGHT_SOLE_OWNER",
+        "DIRECT_QUICKSIGHT_OWNER",
+        "DIRECT_QUICKSIGHT_VIEWER_OR_OWNER"
+      ],
+      "min":1
+    },
+    "ActionConnectorSummary":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "ActionConnectorId",
+        "Type",
+        "Name",
+        "LastUpdatedTime"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector.</p>"
+        },
+        "Type":{
+          "shape":"ActionConnectorType",
+          "documentation":"<p>The type of action connector (e.g., SALESFORCE, JIRA, CUSTOM, BEDROCK).</p>"
+        },
+        "Name":{
+          "shape":"ActionConnectorName",
+          "documentation":"<p>The name of the action connector.</p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the action connector was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the action connector was last updated.</p>"
+        },
+        "Status":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The current status of the action connector.</p>"
+        },
+        "Error":{
+          "shape":"ActionConnectorError",
+          "documentation":"<p>Error information if the action connector is in an error state.</p>"
+        }
+      },
+      "documentation":"<p>Contains summary information about an action connector, used in list and search operations.</p>"
+    },
+    "ActionConnectorSummaryList":{
+      "type":"list",
+      "member":{"shape":"ActionConnectorSummary"}
+    },
+    "ActionConnectorType":{
+      "type":"string",
+      "enum":[
+        "GENERIC_HTTP",
+        "SERVICENOW_NOW_PLATFORM",
+        "SALESFORCE_CRM",
+        "MICROSOFT_OUTLOOK",
+        "PAGERDUTY_ADVANCE",
+        "JIRA_CLOUD",
+        "ATLASSIAN_CONFLUENCE",
+        "AMAZON_S3",
+        "AMAZON_BEDROCK_AGENT_RUNTIME",
+        "AMAZON_BEDROCK_RUNTIME",
+        "AMAZON_BEDROCK_DATA_AUTOMATION_RUNTIME",
+        "AMAZON_TEXTRACT",
+        "AMAZON_COMPREHEND",
+        "AMAZON_COMPREHEND_MEDICAL",
+        "MICROSOFT_ONEDRIVE",
+        "MICROSOFT_SHAREPOINT",
+        "MICROSOFT_TEAMS",
+        "SAP_BUSINESSPARTNER",
+        "SAP_PRODUCTMASTERDATA",
+        "SAP_PHYSICALINVENTORY",
+        "SAP_BILLOFMATERIALS",
+        "SAP_MATERIALSTOCK",
+        "ZENDESK_SUITE",
+        "SMARTSHEET",
+        "SLACK",
+        "ASANA",
+        "BAMBOO_HR"
+      ]
+    },
+    "ActionId":{
+      "type":"string",
+      "pattern":"[\\w@:_.,!?+-/]+"
+    },
+    "ActionIdList":{
+      "type":"list",
+      "member":{"shape":"ActionId"},
+      "max":100,
+      "min":0
     },
     "ActionList":{
       "type":"list",
@@ -4033,6 +4592,23 @@
       "max":20,
       "min":1
     },
+    "ActionPassword":{
+      "type":"string",
+      "sensitive":true
+    },
+    "ActionUserName":{
+      "type":"string",
+      "sensitive":true
+    },
+    "ActionsList":{
+      "type":"list",
+      "member":{"shape":"ActionsListMemberString"}
+    },
+    "ActionsListMemberString":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
     "ActiveIAMPolicyAssignment":{
       "type":"structure",
       "members":{
@@ -4128,6 +4704,56 @@
         "CUSTOM"
       ]
     },
+    "AggregateOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "Aggregations"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for the aggregation.</p>"
+        },
+        "GroupByColumnNames":{
+          "shape":"GroupByColumnNameList",
+          "documentation":"<p>The list of column names to group by when performing the aggregation. Rows with the same values in these columns will be grouped together.</p>"
+        },
+        "Aggregations":{
+          "shape":"AggregationList",
+          "documentation":"<p>The list of aggregation functions to apply to the grouped data, such as <code>SUM</code>, <code>COUNT</code>, or <code>AVERAGE</code>.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that groups rows by specified columns and applies aggregation functions to calculate summary values.</p>"
+    },
+    "Aggregation":{
+      "type":"structure",
+      "required":[
+        "AggregationFunction",
+        "NewColumnName",
+        "NewColumnId"
+      ],
+      "members":{
+        "AggregationFunction":{
+          "shape":"DataPrepAggregationFunction",
+          "documentation":"<p>The aggregation function to apply, such as <code>SUM</code>, <code>COUNT</code>, <code>AVERAGE</code>, <code>MIN</code>, <code>MAX</code> </p>"
+        },
+        "NewColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name for the new column that will contain the aggregated values.</p>"
+        },
+        "NewColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the new column that will contain the aggregated values.</p>"
+        }
+      },
+      "documentation":"<p>Defines an aggregation function to be applied to grouped data, creating a new column with the calculated result.</p>"
+    },
     "AggregationFunction":{
       "type":"structure",
       "members":{
@@ -4155,6 +4781,12 @@
       "key":{"shape":"LimitedString"},
       "value":{"shape":"LimitedString"}
     },
+    "AggregationList":{
+      "type":"list",
+      "member":{"shape":"Aggregation"},
+      "max":128,
+      "min":0
+    },
     "AggregationPartitionBy":{
       "type":"structure",
       "members":{
@@ -4209,8 +4841,7 @@
     },
     "AllSheetsFilterScopeConfiguration":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty object that represents that the <code>AllSheets</code> option is the chosen value for the <code>FilterScopeConfiguration</code> parameter. This structure applies the filter to all visuals on all sheets of an Analysis, Dashboard, or Template.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
     },
     "AltText":{
@@ -4241,6 +4872,38 @@
       },
       "documentation":"<p>The parameters for OpenSearch.</p>"
     },
+    "AmazonQInQuickSightConsoleConfigurations":{
+      "type":"structure",
+      "members":{
+        "DataQnA":{
+          "shape":"DataQnAConfigurations",
+          "documentation":"<p>Adds generative Q&amp;A capabilitiees to an embedded Quick Sight console.</p>"
+        },
+        "GenerativeAuthoring":{
+          "shape":"GenerativeAuthoringConfigurations",
+          "documentation":"<p>Adds the generative BI authoring experience to an embedded Quick Sight console.</p>"
+        },
+        "ExecutiveSummary":{
+          "shape":"ExecutiveSummaryConfigurations",
+          "documentation":"<p>Adds the executive summaries feature to an embedded Quick Sight console.</p>"
+        },
+        "DataStories":{
+          "shape":"DataStoriesConfigurations",
+          "documentation":"<p>Adds the data stories feature to an embedded Quick Sight console.</p>"
+        }
+      },
+      "documentation":"<p>A collection of Amazon Q feature configurations in an embedded Quick Sight console.</p>"
+    },
+    "AmazonQInQuickSightDashboardConfigurations":{
+      "type":"structure",
+      "members":{
+        "ExecutiveSummary":{
+          "shape":"ExecutiveSummaryConfigurations",
+          "documentation":"<p>A generated executive summary of an embedded Quick Sight dashboard.</p>"
+        }
+      },
+      "documentation":"<p>A collection of Amazon Q feature configurations in an embedded Quick Sight dashboard.</p>"
+    },
     "Analysis":{
       "type":"structure",
       "members":{
@@ -4285,7 +4948,7 @@
           "documentation":"<p>A list of the associated sheets with the unique identifier and name of each sheet.</p>"
         }
       },
-      "documentation":"<p>Metadata structure for an analysis in Amazon QuickSight</p>"
+      "documentation":"<p>Metadata structure for an analysis in Quick Sight</p>"
     },
     "AnalysisDefaults":{
       "type":"structure",
@@ -4316,11 +4979,11 @@
         },
         "ParameterDeclarations":{
           "shape":"ParameterDeclarationList",
-          "documentation":"<p>An array of parameter declarations for an analysis.</p> <p>Parameters are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>An array of parameter declarations for an analysis.</p> <p>Parameters are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "FilterGroups":{
           "shape":"FilterGroupList",
-          "documentation":"<p>Filter definitions for an analysis.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html\">Filtering Data in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>Filter definitions for an analysis.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html\">Filtering Data in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "ColumnConfigurations":{
           "shape":"ColumnConfigurationList",
@@ -4459,7 +5122,7 @@
         },
         "Name":{
           "shape":"AnalysisName",
-          "documentation":"<p>The name of the analysis. This name is displayed in the Amazon QuickSight console. </p>"
+          "documentation":"<p>The name of the analysis. This name is displayed in the Quick Sight console. </p>"
         },
         "Status":{
           "shape":"ResourceStatus",
@@ -4527,7 +5190,7 @@
       "members":{
         "InitialDashboardId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The dashboard ID for the dashboard that you want the user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders this dashboard.</p> <p>The Amazon Resource Name (ARN) of this dashboard must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
+          "documentation":"<p>The dashboard ID for the dashboard that you want the user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon Quick Sight renders this dashboard.</p> <p>The Amazon Resource Name (ARN) of this dashboard must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
         },
         "EnabledFeatures":{
           "shape":"AnonymousUserDashboardEmbeddingConfigurationEnabledFeatures",
@@ -4576,7 +5239,7 @@
       "members":{
         "InitialDashboardVisualId":{
           "shape":"DashboardVisualId",
-          "documentation":"<p>The visual ID for the visual that you want the user to see. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders this visual.</p> <p>The Amazon Resource Name (ARN) of the dashboard that the visual belongs to must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
+          "documentation":"<p>The visual ID for the visual that you want the user to see. This ID is included in the output URL. When the URL in response is accessed, Amazon Quick Sight renders this visual.</p> <p>The Amazon Resource Name (ARN) of the dashboard that the visual belongs to must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
         }
       },
       "documentation":"<p>The experience that you are embedding. You can use this object to generate a url that embeds a visual into your application.</p>"
@@ -4586,11 +5249,11 @@
       "members":{
         "Dashboard":{
           "shape":"AnonymousUserDashboardEmbeddingConfiguration",
-          "documentation":"<p>The type of embedding experience. In this case, Amazon QuickSight dashboards.</p>"
+          "documentation":"<p>The type of embedding experience. In this case, Amazon Quick Sight dashboards.</p>"
         },
         "DashboardVisual":{
           "shape":"AnonymousUserDashboardVisualEmbeddingConfiguration",
-          "documentation":"<p>The type of embedding experience. In this case, Amazon QuickSight visuals.</p>"
+          "documentation":"<p>The type of embedding experience. In this case, Amazon Quick Sight visuals.</p>"
         },
         "QSearchBar":{
           "shape":"AnonymousUserQSearchBarEmbeddingConfiguration",
@@ -4601,7 +5264,7 @@
           "documentation":"<p>The Generative Q&amp;A experience that you want to use for anonymous user embedding.</p>"
         }
       },
-      "documentation":"<p>The type of experience you want to embed. For anonymous users, you can embed Amazon QuickSight dashboards.</p>"
+      "documentation":"<p>The type of experience you want to embed. For anonymous users, you can embed Quick Suite dashboards.</p>"
     },
     "AnonymousUserGenerativeQnAEmbeddingConfiguration":{
       "type":"structure",
@@ -4609,7 +5272,7 @@
       "members":{
         "InitialTopicId":{
           "shape":"RestrictiveResourceId",
-          "documentation":"<p>The Amazon QuickSight Q topic ID of the new reader experience topic that you want the anonymous user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders the Generative Q&amp;A experience with this new reader experience topic pre selected.</p> <p>The Amazon Resource Name (ARN) of this Q new reader experience topic must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request fails with an <code>InvalidParameterValueException</code> error.</p>"
+          "documentation":"<p>The Quick Sight Q topic ID of the new reader experience topic that you want the anonymous user to see first. This ID is included in the output URL. When the URL in response is accessed, Quick Sight renders the Generative Q&amp;A experience with this new reader experience topic pre selected.</p> <p>The Amazon Resource Name (ARN) of this Q new reader experience topic must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request fails with an <code>InvalidParameterValueException</code> error.</p>"
         }
       },
       "documentation":"<p>The settings that you want to use for the Generative Q&amp;A experience.</p>"
@@ -4620,7 +5283,7 @@
       "members":{
         "InitialTopicId":{
           "shape":"RestrictiveResourceId",
-          "documentation":"<p>The Amazon QuickSight Q topic ID of the legacy topic that you want the anonymous user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders the Q search bar with this legacy topic pre-selected.</p> <p>The Amazon Resource Name (ARN) of this Q legacy topic must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request fails with an <code>InvalidParameterValueException</code> error.</p>"
+          "documentation":"<p>The Quick Sight Q topic ID of the legacy topic that you want the anonymous user to see first. This ID is included in the output URL. When the URL in response is accessed, Quick Sight renders the Q search bar with this legacy topic pre-selected.</p> <p>The Amazon Resource Name (ARN) of this Q legacy topic must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request fails with an <code>InvalidParameterValueException</code> error.</p>"
         }
       },
       "documentation":"<p>The settings that you want to use with the Q search bar.</p>"
@@ -4648,6 +5311,62 @@
       "type":"list",
       "member":{"shape":"AnswerId"}
     },
+    "AppendOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "AppendedColumns"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "FirstSource":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The first data source to be included in the append operation.</p>"
+        },
+        "SecondSource":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The second data source to be appended to the first source.</p>"
+        },
+        "AppendedColumns":{
+          "shape":"AppendedColumnList",
+          "documentation":"<p>The list of columns to include in the appended result, mapping columns from both sources.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that combines rows from two data sources by stacking them vertically (union operation).</p>"
+    },
+    "AppendedColumn":{
+      "type":"structure",
+      "required":[
+        "ColumnName",
+        "NewColumnId"
+      ],
+      "members":{
+        "ColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the column to include in the appended result.</p>"
+        },
+        "NewColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the column in the appended result.</p>"
+        }
+      },
+      "documentation":"<p>Represents a column that will be included in the result of an append operation, combining data from multiple sources.</p>"
+    },
+    "AppendedColumnList":{
+      "type":"list",
+      "member":{"shape":"AppendedColumn"},
+      "max":2048,
+      "min":0
+    },
+    "ApplicationArn":{
+      "type":"string",
+      "max":1284,
+      "min":1,
+      "pattern":"^arn:[-a-z0-9]*:qbusiness:[-a-z0-9]*:[0-9]{12}:application/.+"
+    },
     "ApplicationTheme":{
       "type":"structure",
       "members":{
@@ -4655,6 +5374,10 @@
           "shape":"BrandColorPalette",
           "documentation":"<p>The color palette.</p>"
         },
+        "ContextualAccentPalette":{
+          "shape":"ContextualAccentPalette",
+          "documentation":"<p>The contextual accent palette.</p>"
+        },
         "BrandElementStyle":{
           "shape":"BrandElementStyle",
           "documentation":"<p>The element style.</p>"
@@ -4882,7 +5605,10 @@
     },
     "AssetBundleExportJobDataSetPropertyToOverride":{
       "type":"string",
-      "enum":["Name"]
+      "enum":[
+        "Name",
+        "RefreshFailureEmailAlertStatus"
+      ]
     },
     "AssetBundleExportJobDataSetPropertyToOverrideList":{
       "type":"list",
@@ -5360,7 +6086,8 @@
         "Name":{
           "shape":"ResourceName",
           "documentation":"<p>A new name for the dataset.</p>"
-        }
+        },
+        "DataSetRefreshProperties":{"shape":"DataSetRefreshProperties"}
       },
       "documentation":"<p>The override parameters for a single dataset that is being imported.</p>"
     },
@@ -6008,7 +6735,7 @@
           "documentation":"<p>A list of link sharing permissions for the dashboards that you want to apply overrides to.</p>"
         }
       },
-      "documentation":"<p>A structure that contains the configuration of a shared link to an Amazon QuickSight dashboard.</p>"
+      "documentation":"<p>A structure that contains the configuration of a shared link to an Amazon Quick Sight dashboard.</p>"
     },
     "AssetBundleResourcePermissions":{
       "type":"structure",
@@ -6048,6 +6775,18 @@
         "WeekStart":{
           "shape":"DayOfTheWeek",
           "documentation":"<p>Determines the week start day for an analysis.</p>"
+        },
+        "QBusinessInsightsStatus":{
+          "shape":"QBusinessInsightsStatus",
+          "documentation":"<p>Determines whether insight summaries from Amazon Q Business are allowed in Dashboard Q&amp;A.</p>"
+        },
+        "ExcludedDataSetArns":{
+          "shape":"DataSetArnsList",
+          "documentation":"<p>A list of dataset ARNS to exclude from Dashboard Q&amp;A.</p>"
+        },
+        "CustomActionDefaults":{
+          "shape":"VisualCustomActionDefaults",
+          "documentation":"<p>A list of visual custom actions for the analysis.</p>"
         }
       },
       "documentation":"<p>An array of analysis level configurations.</p>"
@@ -6070,6 +6809,10 @@
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>Use the <code>RoleArn</code> structure to override an account-wide role for a specific Athena data source. For example, say an account administrator has turned off all Athena access with an account-wide role. The administrator can then use <code>RoleArn</code> to bypass the account-wide role and allow Athena access for the single Athena data source that is specified in the structure, even if the account-wide role forbidding Athena access is still active.</p>"
+        },
+        "IdentityCenterConfiguration":{
+          "shape":"IdentityCenterConfiguration",
+          "documentation":"<p>An optional parameter that configures IAM Identity Center authentication to grant Quick Sight access to your workgroup.</p> <p>This parameter can only be specified if your Quick Sight account is configured with IAM Identity Center.</p>"
         }
       },
       "documentation":"<p>Parameters for Amazon Athena.</p>"
@@ -6134,6 +6877,55 @@
       },
       "documentation":"<p>Parameters for Amazon Aurora PostgreSQL-Compatible Edition.</p>"
     },
+    "AuthConfig":{
+      "type":"structure",
+      "required":[
+        "AuthenticationType",
+        "AuthenticationMetadata"
+      ],
+      "members":{
+        "AuthenticationType":{
+          "shape":"ConnectionAuthType",
+          "documentation":"<p>The type of authentication method.</p>"
+        },
+        "AuthenticationMetadata":{
+          "shape":"AuthenticationMetadata",
+          "documentation":"<p>The authentication metadata containing the specific configuration for the chosen authentication type.</p>"
+        }
+      },
+      "documentation":"<p>Authentication configuration for connecting to external services.</p>"
+    },
+    "AuthenticationMetadata":{
+      "type":"structure",
+      "members":{
+        "AuthorizationCodeGrantMetadata":{
+          "shape":"AuthorizationCodeGrantMetadata",
+          "documentation":"<p>OAuth 2.0 authorization code grant authentication metadata.</p>"
+        },
+        "ClientCredentialsGrantMetadata":{
+          "shape":"ClientCredentialsGrantMetadata",
+          "documentation":"<p>OAuth 2.0 client credentials grant authentication metadata.</p>"
+        },
+        "BasicAuthConnectionMetadata":{
+          "shape":"BasicAuthConnectionMetadata",
+          "documentation":"<p>Basic authentication metadata using username and password.</p>"
+        },
+        "ApiKeyConnectionMetadata":{
+          "shape":"APIKeyConnectionMetadata",
+          "documentation":"<p>API key authentication metadata.</p>"
+        },
+        "NoneConnectionMetadata":{
+          "shape":"NoneConnectionMetadata",
+          "documentation":"<p>No authentication metadata for services that don't require authentication.</p>"
+        },
+        "IamConnectionMetadata":{
+          "shape":"IAMConnectionMetadata",
+          "documentation":"<p>IAM role-based authentication metadata for Amazon Web Services services.</p>"
+        }
+      },
+      "documentation":"<p>Union type containing authentication metadata for different authentication methods.</p>",
+      "union":true
+    },
     "AuthenticationMethodOption":{
       "type":"string",
       "enum":[
@@ -6172,6 +6964,75 @@
       "type":"list",
       "member":{"shape":"AuthorSpecifiedAggregation"}
     },
+    "AuthorizationCodeGrantCredentialsDetails":{
+      "type":"structure",
+      "members":{
+        "AuthorizationCodeGrantDetails":{
+          "shape":"AuthorizationCodeGrantDetails",
+          "documentation":"<p>The authorization code grant configuration details.</p>"
+        }
+      },
+      "documentation":"<p>Details for OAuth 2.0 authorization code grant credentials.</p>",
+      "union":true
+    },
+    "AuthorizationCodeGrantCredentialsSource":{
+      "type":"string",
+      "enum":["PLAIN_CREDENTIALS"]
+    },
+    "AuthorizationCodeGrantDetails":{
+      "type":"structure",
+      "required":[
+        "ClientId",
+        "ClientSecret",
+        "TokenEndpoint",
+        "AuthorizationEndpoint"
+      ],
+      "members":{
+        "ClientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The client ID for the OAuth application.</p>"
+        },
+        "ClientSecret":{
+          "shape":"ClientSecret",
+          "documentation":"<p>The client secret for the OAuth application.</p>"
+        },
+        "TokenEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The token endpoint URL for obtaining access tokens.</p>"
+        },
+        "AuthorizationEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The authorization endpoint URL for the OAuth flow.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for OAuth 2.0 authorization code grant flow.</p>"
+    },
+    "AuthorizationCodeGrantMetadata":{
+      "type":"structure",
+      "required":[
+        "BaseEndpoint",
+        "RedirectUrl"
+      ],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base URL endpoint for the external service.</p>"
+        },
+        "RedirectUrl":{
+          "shape":"Endpoint",
+          "documentation":"<p>The redirect URL for the OAuth authorization flow.</p>"
+        },
+        "AuthorizationCodeGrantCredentialsSource":{
+          "shape":"AuthorizationCodeGrantCredentialsSource",
+          "documentation":"<p>The source of the authorization code grant credentials.</p>"
+        },
+        "AuthorizationCodeGrantCredentialsDetails":{
+          "shape":"AuthorizationCodeGrantCredentialsDetails",
+          "documentation":"<p>The detailed credentials configuration for authorization code grant.</p>"
+        }
+      },
+      "documentation":"<p>Metadata for OAuth 2.0 authorization code grant authentication.</p>"
+    },
     "AuthorizedTargetsByService":{
       "type":"structure",
       "members":{
@@ -6238,8 +7099,7 @@
     },
     "AxisDisplayDataDrivenRange":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The options that are saved for future extension.</p>"
     },
     "AxisDisplayMinMaxRange":{
@@ -6575,7 +7435,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A bar chart.</p> <p>The <code>BarChartVisual</code> structure describes a visual that is a member of the bar chart family. The following charts can be described using this structure:</p> <ul> <li> <p>Horizontal bar chart</p> </li> <li> <p>Vertical bar chart</p> </li> <li> <p>Horizontal stacked bar chart</p> </li> <li> <p>Vertical stacked bar chart</p> </li> <li> <p>Horizontal stacked 100% bar chart</p> </li> <li> <p>Vertical stacked 100% bar chart</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/bar-charts.html\">Using bar charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A bar chart.</p> <p>The <code>BarChartVisual</code> structure describes a visual that is a member of the bar chart family. The following charts can be described using this structure:</p> <ul> <li> <p>Horizontal bar chart</p> </li> <li> <p>Vertical bar chart</p> </li> <li> <p>Horizontal stacked bar chart</p> </li> <li> <p>Vertical stacked bar chart</p> </li> <li> <p>Horizontal stacked 100% bar chart</p> </li> <li> <p>Vertical stacked 100% bar chart</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/bar-charts.html\">Using bar charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "BarsArrangement":{
       "type":"string",
@@ -6594,6 +7454,29 @@
         "IMAGERY"
       ]
     },
+    "BasicAuthConnectionMetadata":{
+      "type":"structure",
+      "required":[
+        "BaseEndpoint",
+        "Username",
+        "Password"
+      ],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base URL endpoint for the external service.</p>"
+        },
+        "Username":{
+          "shape":"ActionUserName",
+          "documentation":"<p>The username for basic authentication.</p>"
+        },
+        "Password":{
+          "shape":"ActionPassword",
+          "documentation":"<p>The password for basic authentication.</p>"
+        }
+      },
+      "documentation":"<p>Metadata for basic authentication using username and password.</p>"
+    },
     "BatchCreateTopicReviewedAnswerRequest":{
       "type":"structure",
       "required":[
@@ -7081,7 +7964,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A box plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/box-plots.html\">Using box plots</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A box plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/box-plots.html\">Using box plots</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "BrandColorPalette":{
       "type":"structure",
@@ -7154,7 +8037,7 @@
       "members":{
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>"
+          "documentation":"<p>The ID of the Quick Suite brand.</p>"
         },
         "Arn":{
           "shape":"Arn",
@@ -7220,7 +8103,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>"
+          "documentation":"<p>The ID of the Quick Suite brand.</p>"
         },
         "BrandName":{
           "shape":"Name",
@@ -7275,7 +8158,7 @@
         },
         "ColumnId":{
           "shape":"ColumnId",
-          "documentation":"<p>A unique ID to identify a calculated column. During a dataset update, if the column ID of a calculated column matches that of an existing calculated column, Amazon QuickSight preserves the existing calculated column.</p>"
+          "documentation":"<p>A unique ID to identify a calculated column. During a dataset update, if the column ID of a calculated column matches that of an existing calculated column, Quick Sight preserves the existing calculated column.</p>"
         },
         "Expression":{
           "shape":"DataSetCalculatedFieldExpression",
@@ -7287,8 +8170,8 @@
     "CalculatedColumnList":{
       "type":"list",
       "member":{"shape":"CalculatedColumn"},
-      "max":128,
-      "min":1
+      "max":256,
+      "min":0
     },
     "CalculatedField":{
       "type":"structure",
@@ -7327,7 +8210,7 @@
     "CalculatedFields":{
       "type":"list",
       "member":{"shape":"CalculatedField"},
-      "max":500
+      "max":2000
     },
     "CalculatedMeasureField":{
       "type":"structure",
@@ -7402,11 +8285,19 @@
       "members":{
         "ExportToCsv":{
           "shape":"CapabilityState",
-          "documentation":"<p>The ability to export to CSV files.</p>"
+          "documentation":"<p>The ability to export to CSV files from the UI.</p>"
         },
         "ExportToExcel":{
           "shape":"CapabilityState",
-          "documentation":"<p>The ability to export to Excel files.</p>"
+          "documentation":"<p>The ability to export to Excel files from the UI.</p>"
+        },
+        "ExportToPdf":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to export to PDF files from the UI.</p>"
+        },
+        "PrintReports":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to print reports.</p>"
         },
         "CreateAndUpdateThemes":{
           "shape":"CapabilityState",
@@ -7467,9 +8358,81 @@
         "CreateSPICEDataset":{
           "shape":"CapabilityState",
           "documentation":"<p>The ability to create a SPICE dataset.</p>"
+        },
+        "ExportToPdfInScheduledReports":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to export to PDF files in scheduled email reports.</p>"
+        },
+        "ExportToCsvInScheduledReports":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to export to CSV files in scheduled email reports.</p>"
+        },
+        "ExportToExcelInScheduledReports":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to export to Excel files in scheduled email reports.</p>"
+        },
+        "IncludeContentInScheduledReportsEmail":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to include content in scheduled email reports.</p>"
+        },
+        "Dashboard":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform dashboard-related actions.</p>"
+        },
+        "Analysis":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform analysis-related actions.</p>"
+        },
+        "Automate":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform automate-related actions.</p>"
+        },
+        "Flow":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform flow-related actions.</p>"
+        },
+        "PublishWithoutApproval":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to enable approvals for flow share.</p>"
+        },
+        "UseBedrockModels":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to use Bedrock models for general knowledge step in flows.</p>"
+        },
+        "PerformFlowUiTask":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to use UI Agent step to perform tasks on public websites.</p>"
+        },
+        "UseAgentWebSearch":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to use internet to enhance results in Chat Agents, Flows, and Quick Research. Web search queries will be processed securely in an Amazon Web Services region <code>us-east-1</code>.</p>"
+        },
+        "KnowledgeBase":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to use knowledge bases to specify content from external applications.</p>"
+        },
+        "Action":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform actions in external services through Action connectors. Actions allow users to interact with third-party systems.</p>"
+        },
+        "Space":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform space-related actions.</p>"
+        },
+        "ChatAgent":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform chat-related actions.</p>"
+        },
+        "CreateChatAgents":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to create chat agents.</p>"
+        },
+        "Research":{
+          "shape":"CapabilityState",
+          "documentation":"<p>The ability to perform research-related actions.</p>"
         }
       },
-      "documentation":"<p>A set of actions that correspond to Amazon QuickSight permissions.</p>"
+      "documentation":"<p>A set of actions that correspond to Amazon Quick Sight permissions.</p>"
     },
     "CapabilityState":{
       "type":"string",
@@ -7525,11 +8488,40 @@
         },
         "Format":{
           "shape":"TypeCastFormat",
-          "documentation":"<p>When casting a column from string to datetime type, you can supply a string in a format supported by Amazon QuickSight to denote the source data format.</p>"
+          "documentation":"<p>When casting a column from string to datetime type, you can supply a string in a format supported by Quick Sight to denote the source data format.</p>"
         }
       },
       "documentation":"<p>A transform operation that casts a column to a different type.</p>"
     },
+    "CastColumnTypeOperationList":{
+      "type":"list",
+      "member":{"shape":"CastColumnTypeOperation"},
+      "max":2048,
+      "min":0
+    },
+    "CastColumnTypesOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "CastColumnTypeOperations"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for the type casting.</p>"
+        },
+        "CastColumnTypeOperations":{
+          "shape":"CastColumnTypeOperationList",
+          "documentation":"<p>The list of column type casting operations to perform.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that changes the data types of one or more columns in the dataset.</p>"
+    },
     "Catalog":{
       "type":"string",
       "max":128
@@ -7636,18 +8628,18 @@
           "documentation":"<p>The default configurations for the associated controls. This applies only for filters that are scoped to multiple sheets.</p>"
         }
       },
-      "documentation":"<p>A <code>CategoryFilter</code> filters text values.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-text-filter-data-prep.html\">Adding text filters</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A <code>CategoryFilter</code> filters text values.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-text-filter-data-prep.html\">Adding text filters</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "CategoryFilterConfiguration":{
       "type":"structure",
       "members":{
         "FilterListConfiguration":{
           "shape":"FilterListConfiguration",
-          "documentation":"<p>A list of filter configurations. In the Amazon QuickSight console, this filter type is called a filter list.</p>"
+          "documentation":"<p>A list of filter configurations. In the Quick Sight console, this filter type is called a filter list.</p>"
         },
         "CustomFilterListConfiguration":{
           "shape":"CustomFilterListConfiguration",
-          "documentation":"<p>A list of custom filter values. In the Amazon QuickSight console, this filter type is called a custom filter list.</p>"
+          "documentation":"<p>A list of custom filter values. In the Quick Sight console, this filter type is called a custom filter list.</p>"
         },
         "CustomFilterConfiguration":{
           "shape":"CustomFilterConfiguration",
@@ -7708,6 +8700,11 @@
       "member":{"shape":"CategoryValue"},
       "max":100000
     },
+    "CellValue":{
+      "type":"string",
+      "max":2047,
+      "min":0
+    },
     "CellValueSynonym":{
       "type":"structure",
       "members":{
@@ -7744,6 +8741,74 @@
       },
       "documentation":"<p>The label options for an axis on a chart.</p>"
     },
+    "ClientCredentialsDetails":{
+      "type":"structure",
+      "members":{
+        "ClientCredentialsGrantDetails":{
+          "shape":"ClientCredentialsGrantDetails",
+          "documentation":"<p>The OAuth2 client credentials grant configuration details for authentication.</p>"
+        }
+      },
+      "documentation":"<p>Details for OAuth 2.0 client credentials grant authentication.</p>",
+      "union":true
+    },
+    "ClientCredentialsGrantDetails":{
+      "type":"structure",
+      "required":[
+        "ClientId",
+        "ClientSecret",
+        "TokenEndpoint"
+      ],
+      "members":{
+        "ClientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The client identifier issued to the client during the registration process with the authorization server.</p>"
+        },
+        "ClientSecret":{
+          "shape":"ClientSecret",
+          "documentation":"<p>The client secret issued to the client during the registration process with the authorization server.</p>"
+        },
+        "TokenEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The authorization server endpoint used to obtain access tokens via the client credentials grant flow.</p>"
+        }
+      },
+      "documentation":"<p>Configuration details for OAuth2 client credentials grant flow, including client ID, client secret, token endpoint, and optional scopes.</p>"
+    },
+    "ClientCredentialsGrantMetadata":{
+      "type":"structure",
+      "required":["BaseEndpoint"],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for the external service.</p>"
+        },
+        "ClientCredentialsSource":{
+          "shape":"ClientCredentialsSource",
+          "documentation":"<p>The source of the client credentials configuration.</p>"
+        },
+        "ClientCredentialsDetails":{
+          "shape":"ClientCredentialsDetails",
+          "documentation":"<p>The detailed client credentials configuration including client ID, client secret, and token endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for OAuth 2.0 client credentials grant authentication, including client ID, client secret, token endpoint, and optional scopes.</p>"
+    },
+    "ClientCredentialsSource":{
+      "type":"string",
+      "enum":["PLAIN_CREDENTIALS"]
+    },
+    "ClientId":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "ClientSecret":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "sensitive":true
+    },
     "ClusterId":{
       "type":"string",
       "max":64,
@@ -7923,7 +8988,7 @@
           "documentation":"<p>Geospatial column group that denotes a hierarchy.</p>"
         }
       },
-      "documentation":"<p>Groupings of columns that work together in certain Amazon QuickSight features. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
+      "documentation":"<p>Groupings of columns that work together in certain Quick Sight features. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
     },
     "ColumnGroupColumnSchema":{
       "type":"structure",
@@ -8021,15 +9086,20 @@
       "members":{
         "Principals":{
           "shape":"PrincipalList",
-          "documentation":"<p>An array of Amazon Resource Names (ARNs) for Amazon QuickSight users or groups.</p>"
+          "documentation":"<p>An array of Amazon Resource Names (ARNs) for Quick Sight users or groups.</p>"
         },
         "ColumnNames":{
-          "shape":"ColumnNameList",
+          "shape":"ColumnLevelPermissionRuleColumnNameList",
           "documentation":"<p>An array of column names.</p>"
         }
       },
       "documentation":"<p>A rule defined to grant access on one or more restricted columns. Each dataset can have multiple rules. To create a restricted column, you add it to one or more rules. Each rule must contain at least one column and at least one user or group. To be able to see a restricted column, a user or group needs to be added to a rule for that column.</p>"
     },
+    "ColumnLevelPermissionRuleColumnNameList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "min":1
+    },
     "ColumnLevelPermissionRuleList":{
       "type":"list",
       "member":{"shape":"ColumnLevelPermissionRule"},
@@ -8046,11 +9116,6 @@
       "max":128,
       "min":1
     },
-    "ColumnNameList":{
-      "type":"list",
-      "member":{"shape":"String"},
-      "min":1
-    },
     "ColumnOrderingType":{
       "type":"string",
       "enum":[
@@ -8139,6 +9204,26 @@
       "type":"list",
       "member":{"shape":"ColumnTagName"}
     },
+    "ColumnToUnpivot":{
+      "type":"structure",
+      "members":{
+        "ColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the column to unpivot from the source data.</p>"
+        },
+        "NewValue":{
+          "shape":"CellValue",
+          "documentation":"<p>The value to assign to this column in the unpivoted result, typically the column name or a descriptive label.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a column to be unpivoted, transforming it from a column into rows with associated values.</p>"
+    },
+    "ColumnToUnpivotList":{
+      "type":"list",
+      "member":{"shape":"ColumnToUnpivot"},
+      "max":100,
+      "min":0
+    },
     "ColumnTooltipItem":{
       "type":"structure",
       "required":["Column"],
@@ -8328,7 +9413,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A combo chart.</p> <p>The <code>ComboChartVisual</code> includes stacked bar combo charts and clustered bar combo charts</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/combo-charts.html\">Using combo charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A combo chart.</p> <p>The <code>ComboChartVisual</code> includes stacked bar combo charts and clustered bar combo charts</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/combo-charts.html\">Using combo charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "CommitMode":{
       "type":"string",
@@ -8626,6 +9711,28 @@
       "error":{"httpStatusCode":409},
       "exception":true
     },
+    "ConfluenceParameters":{
+      "type":"structure",
+      "required":["ConfluenceUrl"],
+      "members":{
+        "ConfluenceUrl":{
+          "shape":"SiteBaseUrl",
+          "documentation":"<p>The URL of the Confluence site to connect to.</p>"
+        }
+      },
+      "documentation":"<p>The parameters that are required to connect to a Confluence data source</p>"
+    },
+    "ConnectionAuthType":{
+      "type":"string",
+      "enum":[
+        "BASIC",
+        "API_KEY",
+        "OAUTH2_CLIENT_CREDENTIALS",
+        "NONE",
+        "IAM",
+        "OAUTH2_AUTHORIZATION_CODE"
+      ]
+    },
     "ConstantType":{
       "type":"string",
       "enum":[
@@ -8648,6 +9755,16 @@
       },
       "documentation":"<p>The context menu options for a visual's interactions.</p>"
     },
+    "ContextualAccentPalette":{
+      "type":"structure",
+      "members":{
+        "Connection":{"shape":"Palette"},
+        "Visualization":{"shape":"Palette"},
+        "Insight":{"shape":"Palette"},
+        "Automation":{"shape":"Palette"}
+      },
+      "documentation":"<p>The contextual accent palette.</p>"
+    },
     "ContributionAnalysisDefault":{
       "type":"structure",
       "required":[
@@ -8737,19 +9854,19 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to customize Amazon QuickSight for.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to customize Quick Sight for.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that you want to add customizations to.</p>",
+          "documentation":"<p>The Quick Sight namespace that you want to add customizations to.</p>",
           "location":"querystring",
           "locationName":"namespace"
         },
         "AccountCustomization":{
           "shape":"AccountCustomization",
-          "documentation":"<p>The Amazon QuickSight customizations you're adding in the current Amazon Web Services Region. You can add these to an Amazon Web Services account and a QuickSight namespace. </p> <p>For example, you can add a default theme by setting <code>AccountCustomization</code> to the midnight theme: <code>\"AccountCustomization\": { \"DefaultTheme\": \"arn:aws:quicksight::aws:theme/MIDNIGHT\" }</code>. Or, you can add a custom theme by specifying <code>\"AccountCustomization\": { \"DefaultTheme\": \"arn:aws:quicksight:us-west-2:111122223333:theme/bdb844d0-0fe9-4d9d-b520-0fe602d93639\" }</code>. </p>"
+          "documentation":"<p>The Quick Sight customizations you're adding. You can add these to an Amazon Web Services account and a QuickSight namespace. </p> <p>For example, you can add a default theme by setting <code>AccountCustomization</code> to the midnight theme: <code>\"AccountCustomization\": { \"DefaultTheme\": \"arn:aws:quicksight::aws:theme/MIDNIGHT\" }</code>. Or, you can add a custom theme by specifying <code>\"AccountCustomization\": { \"DefaultTheme\": \"arn:aws:quicksight:us-west-2:111122223333:theme/bdb844d0-0fe9-4d9d-b520-0fe602d93639\" }</code>. </p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -8766,7 +9883,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to customize Amazon QuickSight for.</p>"
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to customize Quick Sight for.</p>"
         },
         "Namespace":{
           "shape":"Namespace",
@@ -8774,7 +9891,7 @@
         },
         "AccountCustomization":{
           "shape":"AccountCustomization",
-          "documentation":"<p>The Amazon QuickSight customizations you're adding in the current Amazon Web Services Region. </p>"
+          "documentation":"<p>The Quick Sight customizations you're adding. </p>"
         },
         "RequestId":{
           "shape":"String",
@@ -8798,77 +9915,77 @@
       "members":{
         "Edition":{
           "shape":"Edition",
-          "documentation":"<p>The edition of Amazon QuickSight that you want your account to have. Currently, you can choose from <code>ENTERPRISE</code> or <code>ENTERPRISE_AND_Q</code>.</p> <p>If you choose <code>ENTERPRISE_AND_Q</code>, the following parameters are required:</p> <ul> <li> <p> <code>FirstName</code> </p> </li> <li> <p> <code>LastName</code> </p> </li> <li> <p> <code>EmailAddress</code> </p> </li> <li> <p> <code>ContactNumber</code> </p> </li> </ul>"
+          "documentation":"<p>The edition of Amazon Quick Sight that you want your account to have. Currently, you can choose from <code>ENTERPRISE</code> or <code>ENTERPRISE_AND_Q</code>.</p> <p>If you choose <code>ENTERPRISE_AND_Q</code>, the following parameters are required:</p> <ul> <li> <p> <code>FirstName</code> </p> </li> <li> <p> <code>LastName</code> </p> </li> <li> <p> <code>EmailAddress</code> </p> </li> <li> <p> <code>ContactNumber</code> </p> </li> </ul>"
         },
         "AuthenticationMethod":{
           "shape":"AuthenticationMethodOption",
-          "documentation":"<p>The method that you want to use to authenticate your Amazon QuickSight account.</p> <p>If you choose <code>ACTIVE_DIRECTORY</code>, provide an <code>ActiveDirectoryName</code> and an <code>AdminGroup</code> associated with your Active Directory.</p> <p>If you choose <code>IAM_IDENTITY_CENTER</code>, provide an <code>AdminGroup</code> associated with your IAM Identity Center account.</p>"
+          "documentation":"<p>The method that you want to use to authenticate your Quick Sight account.</p> <p>If you choose <code>ACTIVE_DIRECTORY</code>, provide an <code>ActiveDirectoryName</code> and an <code>AdminGroup</code> associated with your Active Directory.</p> <p>If you choose <code>IAM_IDENTITY_CENTER</code>, provide an <code>AdminGroup</code> associated with your IAM Identity Center account.</p>"
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The Amazon Web Services account ID of the account that you're using to create your Amazon QuickSight account.</p>",
+          "documentation":"<p>The Amazon Web Services account ID of the account that you're using to create your Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "AccountName":{
           "shape":"AccountName",
-          "documentation":"<p>The name of your Amazon QuickSight account. This name is unique over all of Amazon Web Services, and it appears only when users sign in. You can't change <code>AccountName</code> value after the Amazon QuickSight account is created.</p>"
+          "documentation":"<p>The name of your Amazon Quick Sight account. This name is unique over all of Amazon Web Services, and it appears only when users sign in. You can't change <code>AccountName</code> value after the Amazon Quick Sight account is created.</p>"
         },
         "NotificationEmail":{
           "shape":"String",
-          "documentation":"<p>The email address that you want Amazon QuickSight to send notifications to regarding your Amazon QuickSight account or Amazon QuickSight subscription.</p>"
+          "documentation":"<p>The email address that you want Quick Sight to send notifications to regarding your Quick Sight account or Quick Sight subscription.</p>"
         },
         "ActiveDirectoryName":{
           "shape":"String",
-          "documentation":"<p>The name of your Active Directory. This field is required if <code>ACTIVE_DIRECTORY</code> is the selected authentication method of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>The name of your Active Directory. This field is required if <code>ACTIVE_DIRECTORY</code> is the selected authentication method of the new Quick Sight account.</p>"
         },
         "Realm":{
           "shape":"String",
-          "documentation":"<p>The realm of the Active Directory that is associated with your Amazon QuickSight account. This field is required if <code>ACTIVE_DIRECTORY</code> is the selected authentication method of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>The realm of the Active Directory that is associated with your Quick Sight account. This field is required if <code>ACTIVE_DIRECTORY</code> is the selected authentication method of the new Quick Sight account.</p>"
         },
         "DirectoryId":{
           "shape":"String",
-          "documentation":"<p>The ID of the Active Directory that is associated with your Amazon QuickSight account.</p>"
+          "documentation":"<p>The ID of the Active Directory that is associated with your Quick Sight account.</p>"
         },
         "AdminGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The admin group associated with your Active Directory or IAM Identity Center account. Either this field or the <code>AdminProGroup</code> field is required if <code>ACTIVE_DIRECTORY</code> or <code>IAM_IDENTITY_CENTER</code> is the selected authentication method of the new Amazon QuickSight account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The admin group associated with your Active Directory or IAM Identity Center account. Either this field or the <code>AdminProGroup</code> field is required if <code>ACTIVE_DIRECTORY</code> or <code>IAM_IDENTITY_CENTER</code> is the selected authentication method of the new Quick Sight account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "AuthorGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The author group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The author group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "ReaderGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The reader group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The reader group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "AdminProGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The admin pro group associated with your Active Directory or IAM Identity Center account. Either this field or the <code>AdminGroup</code> field is required if <code>ACTIVE_DIRECTORY</code> or <code>IAM_IDENTITY_CENTER</code> is the selected authentication method of the new Amazon QuickSight account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The admin pro group associated with your Active Directory or IAM Identity Center account. Either this field or the <code>AdminGroup</code> field is required if <code>ACTIVE_DIRECTORY</code> or <code>IAM_IDENTITY_CENTER</code> is the selected authentication method of the new Quick Sight account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "AuthorProGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The author pro group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The author pro group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "ReaderProGroup":{
           "shape":"GroupsList",
-          "documentation":"<p>The reader pro group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide. For more information about using Active Directory in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon QuickSight Enterprise Edition</a> in the Amazon QuickSight User Guide.</p>"
+          "documentation":"<p>The reader pro group associated with your Active Directory or IAM Identity Center account.</p> <p>For more information about using IAM Identity Center in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sec-identity-management-identity-center.html\">Using IAM Identity Center with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide. For more information about using Active Directory in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/aws-directory-service.html\">Using Active Directory with Amazon Quick Sight Enterprise Edition</a> in the Amazon Quick Sight User Guide.</p>"
         },
         "FirstName":{
           "shape":"String",
-          "documentation":"<p>The first name of the author of the Amazon QuickSight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>The first name of the author of the Amazon Quick Sight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon Quick Sight account.</p>"
         },
         "LastName":{
           "shape":"String",
-          "documentation":"<p>The last name of the author of the Amazon QuickSight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>The last name of the author of the Amazon Quick Sight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon Quick Sight account.</p>"
         },
         "EmailAddress":{
           "shape":"String",
-          "documentation":"<p>The email address of the author of the Amazon QuickSight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>The email address of the author of the Amazon Quick Sight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon Quick Sight account.</p>"
         },
         "ContactNumber":{
           "shape":"String",
-          "documentation":"<p>A 10-digit phone number for the author of the Amazon QuickSight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon QuickSight account.</p>"
+          "documentation":"<p>A 10-digit phone number for the author of the Amazon Quick Sight account to use for future communications. This field is required if <code>ENTERPPRISE_AND_Q</code> is the selected edition of the new Amazon Quick Sight account.</p>"
         },
         "IAMIdentityCenterInstanceArn":{
           "shape":"String",
@@ -8881,7 +9998,7 @@
       "members":{
         "SignupResponse":{
           "shape":"SignupResponse",
-          "documentation":"<p>A <code>SignupResponse</code> object that returns information about a newly created Amazon QuickSight account.</p>"
+          "documentation":"<p>A <code>SignupResponse</code> object that returns information about a newly created Quick Sight account.</p>"
         },
         "Status":{
           "shape":"StatusCode",
@@ -8894,6 +10011,82 @@
         }
       }
     },
+    "CreateActionConnectorRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId",
+        "Name",
+        "Type",
+        "AuthenticationConfig"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID associated with the action connector.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>A unique identifier for the action connector. This ID must be unique within the Amazon Web Services account. The <code>ActionConnectorId</code> must not start with the prefix <code>quicksuite-</code> </p>"
+        },
+        "Name":{
+          "shape":"ActionConnectorName",
+          "documentation":"<p>A descriptive name for the action connector.</p>"
+        },
+        "Type":{
+          "shape":"ActionConnectorType",
+          "documentation":"<p>The type of action connector.</p>"
+        },
+        "AuthenticationConfig":{
+          "shape":"AuthConfig",
+          "documentation":"<p>The authentication configuration for connecting to the external service. This includes the authentication type, base URL, and authentication metadata such as client credentials or API keys.</p>"
+        },
+        "Description":{
+          "shape":"ActionConnectorDescription",
+          "documentation":"<p>An optional description of the action connector.</p>"
+        },
+        "Permissions":{
+          "shape":"ResourcePermissionList",
+          "documentation":"<p>The permissions configuration that defines which users, groups, or namespaces can access this action connector and what operations they can perform.</p>"
+        },
+        "VpcConnectionArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the VPC connection to use for secure connectivity to the external service.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of tags to apply to the action connector for resource management and organization.</p>"
+        }
+      }
+    },
+    "CreateActionConnectorResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the created action connector.</p>"
+        },
+        "CreationStatus":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The creation status of the action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the created action connector.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "CreateAnalysisRequest":{
       "type":"structure",
       "required":[
@@ -8916,7 +10109,7 @@
         },
         "Name":{
           "shape":"AnalysisName",
-          "documentation":"<p>A descriptive name for the analysis that you're creating. This name displays for the analysis in the Amazon QuickSight console. </p>"
+          "documentation":"<p>A descriptive name for the analysis that you're creating. This name displays for the analysis in the Amazon Quick Sight console. </p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -8932,7 +10125,7 @@
         },
         "ThemeArn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN for the theme to apply to the analysis that you're creating. To see the theme in the Amazon QuickSight console, make sure that you have access to it.</p>"
+          "documentation":"<p>The ARN for the theme to apply to the analysis that you're creating. To see the theme in the Amazon Quick Sight console, make sure that you have access to it.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -8948,7 +10141,7 @@
         },
         "FolderArns":{
           "shape":"FolderArnList",
-          "documentation":"<p>When you create the analysis, Amazon QuickSight adds the analysis to these folders.</p>"
+          "documentation":"<p>When you create the analysis, Amazon Quick Sight adds the analysis to these folders.</p>"
         }
       }
     },
@@ -8993,7 +10186,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         },
@@ -9028,6 +10221,14 @@
       "type":"structure",
       "required":["Columns"],
       "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for creating new calculated columns.</p>"
+        },
         "Columns":{
           "shape":"CalculatedColumnList",
           "documentation":"<p>Calculated columns to create.</p>"
@@ -9113,7 +10314,7 @@
         },
         "SourceEntity":{
           "shape":"DashboardSourceEntity",
-          "documentation":"<p>The entity that you are using as a source when you create the dashboard. In <code>SourceEntity</code>, you specify the type of object you're using as source. You can only create a dashboard from a template, so you use a <code>SourceTemplate</code> entity. If you need to create a dashboard from an analysis, first convert the analysis to a template by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation. For <code>SourceTemplate</code>, specify the Amazon Resource Name (ARN) of the source template. The <code>SourceTemplate</code>ARN can contain any Amazon Web Services account and any Amazon QuickSight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p> <p>Either a <code>SourceEntity</code> or a <code>Definition</code> must be provided in order for the request to be valid.</p>"
+          "documentation":"<p>The entity that you are using as a source when you create the dashboard. In <code>SourceEntity</code>, you specify the type of object you're using as source. You can only create a dashboard from a template, so you use a <code>SourceTemplate</code> entity. If you need to create a dashboard from an analysis, first convert the analysis to a template by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation. For <code>SourceTemplate</code>, specify the Amazon Resource Name (ARN) of the source template. The <code>SourceTemplate</code>ARN can contain any Amazon Web Services account and any Amazon Quick Sight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p> <p>Either a <code>SourceEntity</code> or a <code>Definition</code> must be provided in order for the request to be valid.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -9125,7 +10326,7 @@
         },
         "DashboardPublishOptions":{
           "shape":"DashboardPublishOptions",
-          "documentation":"<p>Options for publishing the dashboard when you create it:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon QuickSight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> </ul>"
+          "documentation":"<p>Options for publishing the dashboard when you create it:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon Quick Sight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>QuickSuiteActionsOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. Features related to Actions in Amazon Quick Suite on dashboards are disabled when this is set to <code>DISABLED</code>. This option is <code>DISABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExecutiveSummaryOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to build an executive summary is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>DataStoriesSharingOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to share a data story is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> </ul>"
         },
         "ThemeArn":{
           "shape":"Arn",
@@ -9141,7 +10342,7 @@
         },
         "FolderArns":{
           "shape":"FolderArnList",
-          "documentation":"<p>When you create the dashboard, Amazon QuickSight adds the dashboard to these folders.</p>"
+          "documentation":"<p>When you create the dashboard, Amazon Quick Sight adds the dashboard to these folders.</p>"
         },
         "LinkSharingConfiguration":{
           "shape":"LinkSharingConfiguration",
@@ -9213,7 +10414,10 @@
         },
         "LogicalTableMap":{
           "shape":"LogicalTableMap",
-          "documentation":"<p>Configures the combination and transformation of the data from the physical tables.</p>"
+          "documentation":"<p>Configures the combination and transformation of the data from the physical tables. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "ImportMode":{
           "shape":"DataSetImportMode",
@@ -9221,7 +10425,7 @@
         },
         "ColumnGroups":{
           "shape":"ColumnGroupList",
-          "documentation":"<p>Groupings of columns that work together in certain Amazon QuickSight features. Currently, only geospatial hierarchy is supported.</p>"
+          "documentation":"<p>Groupings of columns that work together in certain Amazon Quick Sight features. Currently, only geospatial hierarchy is supported.</p>"
         },
         "FieldFolders":{
           "shape":"FieldFolderMap",
@@ -9233,11 +10437,17 @@
         },
         "RowLevelPermissionDataSet":{
           "shape":"RowLevelPermissionDataSet",
-          "documentation":"<p>The row-level security configuration for the data that you want to create.</p>"
+          "documentation":"<p>The row-level security configuration for the data that you want to create. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "RowLevelPermissionTagConfiguration":{
           "shape":"RowLevelPermissionTagConfiguration",
-          "documentation":"<p>The configuration of tags on a dataset to set row-level security. Row-level security tags are currently supported for anonymous embedding only.</p>"
+          "documentation":"<p>The configuration of tags on a dataset to set row-level security. Row-level security tags are currently supported for anonymous embedding only. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "ColumnLevelPermissionRules":{
           "shape":"ColumnLevelPermissionRuleList",
@@ -9254,11 +10464,23 @@
         },
         "FolderArns":{
           "shape":"FolderArnList",
-          "documentation":"<p>When you create the dataset, Amazon QuickSight adds the dataset to these folders.</p>"
+          "documentation":"<p>When you create the dataset, Amazon Quick Sight adds the dataset to these folders.</p>"
         },
         "PerformanceConfiguration":{
           "shape":"PerformanceConfiguration",
           "documentation":"<p>The configuration for the performance optimization of the dataset that contains a <code>UniqueKey</code> configuration.</p>"
+        },
+        "UseAs":{
+          "shape":"DataSetUseAs",
+          "documentation":"<p>The usage of the dataset. <code>RLS_RULES</code> must be specified for RLS permission datasets.</p>"
+        },
+        "DataPrepConfiguration":{
+          "shape":"DataPrepConfiguration",
+          "documentation":"<p>The data preparation configuration for the dataset. This configuration defines the source tables, transformation steps, and destination tables used to prepare the data. Required when using the new data preparation experience.</p>"
+        },
+        "SemanticModelConfiguration":{
+          "shape":"SemanticModelConfiguration",
+          "documentation":"<p>The semantic model configuration for the dataset. This configuration defines how the prepared data is structured for an analysis, including table mappings and row-level security configurations. Required when using the new data preparation experience.</p>"
         }
       }
     },
@@ -9321,11 +10543,11 @@
         },
         "DataSourceParameters":{
           "shape":"DataSourceParameters",
-          "documentation":"<p>The parameters that Amazon QuickSight uses to connect to your underlying source.</p>"
+          "documentation":"<p>The parameters that Amazon Quick Sight uses to connect to your underlying source.</p>"
         },
         "Credentials":{
           "shape":"DataSourceCredentials",
-          "documentation":"<p>The credentials Amazon QuickSight that uses to connect to your underlying source. Currently, only credentials based on user name and password are supported.</p>"
+          "documentation":"<p>The credentials Amazon Quick Sight that uses to connect to your underlying source. Currently, only credentials based on user name and password are supported.</p>"
         },
         "Permissions":{
           "shape":"ResourcePermissionList",
@@ -9333,11 +10555,11 @@
         },
         "VpcConnectionProperties":{
           "shape":"VpcConnectionProperties",
-          "documentation":"<p>Use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source.</p>"
+          "documentation":"<p>Use this parameter only when you want Amazon Quick Sight to use a VPC connection when connecting to your underlying source.</p>"
         },
         "SslProperties":{
           "shape":"SslProperties",
-          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source.</p>"
+          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon Quick Sight connects to your underlying source.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -9345,7 +10567,7 @@
         },
         "FolderArns":{
           "shape":"FolderArnList",
-          "documentation":"<p>When you create the data source, Amazon QuickSight adds the data source to these folders.</p>"
+          "documentation":"<p>When you create the data source, Amazon Quick Sight adds the data source to these folders.</p>"
         }
       }
     },
@@ -9517,7 +10739,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9565,7 +10787,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9608,7 +10830,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account where you want to assign an IAM policy to Amazon QuickSight users or groups.</p>",
+          "documentation":"<p>The ID of the Amazon Web Services account where you want to assign an IAM policy to Amazon Quick Sight users or groups.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9622,11 +10844,11 @@
         },
         "PolicyArn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN for the IAM policy to apply to the Amazon QuickSight users and groups specified in this assignment.</p>"
+          "documentation":"<p>The ARN for the IAM policy to apply to the Amazon Quick Sight users and groups specified in this assignment.</p>"
         },
         "Identities":{
           "shape":"IdentityMap",
-          "documentation":"<p>The Amazon QuickSight users, groups, or both that you want to assign the policy to.</p>"
+          "documentation":"<p>The Amazon Quick Sight users, groups, or both that you want to assign the policy to.</p>"
         },
         "Namespace":{
           "shape":"Namespace",
@@ -9653,11 +10875,11 @@
         },
         "PolicyArn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN for the IAM policy that is applied to the Amazon QuickSight users and groups specified in this assignment.</p>"
+          "documentation":"<p>The ARN for the IAM policy that is applied to the Amazon Quick Sight users and groups specified in this assignment.</p>"
         },
         "Identities":{
           "shape":"IdentityMap",
-          "documentation":"<p>The Amazon QuickSight users, groups, or both that the IAM policy is assigned to.</p>"
+          "documentation":"<p>The Amazon Quick Sight users, groups, or both that the IAM policy is assigned to.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -9738,7 +10960,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create the Amazon QuickSight namespace in.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create the Quick Sight namespace in.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9761,7 +10983,7 @@
       "members":{
         "Arn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN of the Amazon QuickSight namespace you created. </p>"
+          "documentation":"<p>The ARN of the Quick Sight namespace you created. </p>"
         },
         "Name":{
           "shape":"Namespace",
@@ -9855,7 +11077,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9910,7 +11132,7 @@
         },
         "AliasName":{
           "shape":"AliasName",
-          "documentation":"<p>The name that you want to give to the template alias that you're creating. Don't start the alias name with the <code>$</code> character. Alias names that start with <code>$</code> are reserved by Amazon QuickSight. </p>",
+          "documentation":"<p>The name that you want to give to the template alias that you're creating. Don't start the alias name with the <code>$</code> character. Alias names that start with <code>$</code> are reserved by Quick Sight. </p>",
           "location":"uri",
           "locationName":"AliasName"
         },
@@ -9947,7 +11169,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. You use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. You use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -9967,7 +11189,7 @@
         },
         "SourceEntity":{
           "shape":"TemplateSourceEntity",
-          "documentation":"<p>The entity that you are using as a source when you create the template. In <code>SourceEntity</code>, you specify the type of object you're using as source: <code>SourceTemplate</code> for a template or <code>SourceAnalysis</code> for an analysis. Both of these require an Amazon Resource Name (ARN). For <code>SourceTemplate</code>, specify the ARN of the source template. For <code>SourceAnalysis</code>, specify the ARN of the source analysis. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Amazon QuickSight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> or <code>SourceAnalysis</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p> <p>Either a <code>SourceEntity</code> or a <code>Definition</code> must be provided in order for the request to be valid.</p>"
+          "documentation":"<p>The entity that you are using as a source when you create the template. In <code>SourceEntity</code>, you specify the type of object you're using as source: <code>SourceTemplate</code> for a template or <code>SourceAnalysis</code> for an analysis. Both of these require an Amazon Resource Name (ARN). For <code>SourceTemplate</code>, specify the ARN of the source template. For <code>SourceAnalysis</code>, specify the ARN of the source analysis. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Quick Sight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> or <code>SourceAnalysis</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p> <p>Either a <code>SourceEntity</code> or a <code>Definition</code> must be provided in order for the request to be valid.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -10040,7 +11262,7 @@
         },
         "AliasName":{
           "shape":"AliasName",
-          "documentation":"<p>The name that you want to give to the theme alias that you are creating. The alias name can't begin with a <code>$</code>. Alias names that start with <code>$</code> are reserved by Amazon QuickSight. </p>",
+          "documentation":"<p>The name that you want to give to the theme alias that you are creating. The alias name can't begin with a <code>$</code>. Alias names that start with <code>$</code> are reserved by Amazon Quick Sight. </p>",
           "location":"uri",
           "locationName":"AliasName"
         },
@@ -10096,7 +11318,7 @@
         },
         "BaseThemeId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the theme that a custom theme will inherit from. All themes inherit from one of the starting themes defined by Amazon QuickSight. For a list of the starting themes, use <code>ListThemes</code> or choose <b>Themes</b> from within an analysis. </p>"
+          "documentation":"<p>The ID of the theme that a custom theme will inherit from. All themes inherit from one of the starting themes defined by Amazon Quick Sight. For a list of the starting themes, use <code>ListThemes</code> or choose <b>Themes</b> from within an analysis. </p>"
         },
         "VersionDescription":{
           "shape":"VersionDescription",
@@ -10236,6 +11458,10 @@
         "FolderArns":{
           "shape":"FolderArnList",
           "documentation":"<p>The Folder ARN of the folder that you want the topic to reside in.</p>"
+        },
+        "CustomInstructions":{
+          "shape":"CustomInstructions",
+          "documentation":"<p>Custom instructions for the topic.</p>"
         }
       }
     },
@@ -10540,6 +11766,16 @@
       "member":{"shape":"CustomColor"},
       "max":50
     },
+    "CustomConnectionParameters":{
+      "type":"structure",
+      "members":{
+        "ConnectionType":{
+          "shape":"String",
+          "documentation":"<p>The type of custom connector.</p>"
+        }
+      },
+      "documentation":"<p>The parameters that are required to connect to a custom connection data source.</p>"
+    },
     "CustomContentConfiguration":{
       "type":"structure",
       "members":{
@@ -10614,7 +11850,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A visual that contains custom content.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/custom-visual-content.html\">Using custom visual content</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A visual that contains custom content.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/custom-visual-content.html\">Using custom visual content</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "CustomFilterConfiguration":{
       "type":"structure",
@@ -10672,6 +11908,22 @@
       },
       "documentation":"<p>A list of custom filter values.</p>"
     },
+    "CustomInstructions":{
+      "type":"structure",
+      "required":["CustomInstructionsString"],
+      "members":{
+        "CustomInstructionsString":{
+          "shape":"CustomInstructionsString",
+          "documentation":"<p>A text field for providing additional guidance or context for response generation.</p>"
+        }
+      },
+      "documentation":"<p>Instructions that provide additional guidance and context for response generation.</p>"
+    },
+    "CustomInstructionsString":{
+      "type":"string",
+      "max":5000,
+      "sensitive":true
+    },
     "CustomLabel":{
       "type":"string",
       "max":2048,
@@ -10767,7 +12019,7 @@
     },
     "CustomSqlName":{
       "type":"string",
-      "max":64,
+      "max":128,
       "min":1
     },
     "CustomValuesConfiguration":{
@@ -10791,7 +12043,7 @@
           "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
         }
       },
-      "documentation":"<p>The customer managed key that is registered to your Amazon QuickSight account is unavailable.</p>",
+      "documentation":"<p>The customer managed key that is registered to your Amazon Quick Sight account is unavailable.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
@@ -10943,6 +12195,22 @@
         "DataPointTooltipOption":{
           "shape":"DataPointTooltipOption",
           "documentation":"<p>The data point tool tip options of a dashboard.</p>"
+        },
+        "DataQAEnabledOption":{
+          "shape":"DataQAEnabledOption",
+          "documentation":"<p>Adds Q&amp;A capabilities to an Quick Sight dashboard. If no topic is linked, Dashboard Q&amp;A uses the data values that are rendered on the dashboard. End users can use Dashboard Q&amp;A to ask for different slices of the data that they see on the dashboard. If a topic is linked, Topic Q&amp;A is used.</p>"
+        },
+        "QuickSuiteActionsOption":{
+          "shape":"QuickSuiteActionsOption",
+          "documentation":"<p>Determines if Actions in Amazon Quick Suite are enabled in a dashboard.</p>"
+        },
+        "ExecutiveSummaryOption":{
+          "shape":"ExecutiveSummaryOption",
+          "documentation":"<p>Executive summary option.</p>"
+        },
+        "DataStoriesSharingOption":{
+          "shape":"DataStoriesSharingOption",
+          "documentation":"<p>Data stories sharing option.</p>"
         }
       },
       "documentation":"<p>Dashboard publish options.</p>"
@@ -11110,11 +12378,11 @@
         },
         "ParameterDeclarations":{
           "shape":"ParameterDeclarationList",
-          "documentation":"<p>The parameter declarations for a dashboard. Parameters are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The parameter declarations for a dashboard. Parameters are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "FilterGroups":{
           "shape":"FilterGroupList",
-          "documentation":"<p>The filter definitions for a dashboard.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html\">Filtering Data in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The filter definitions for a dashboard.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/adding-a-filter.html\">Filtering Data in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "ColumnConfigurations":{
           "shape":"ColumnConfigurationList",
@@ -11177,18 +12445,18 @@
       "members":{
         "DashboardId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the dashboard that has the visual that you want to embed. The <code>DashboardId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon QuickSight console. You can also get the <code>DashboardId</code> with a <code>ListDashboards</code> API operation.</p>"
+          "documentation":"<p>The ID of the dashboard that has the visual that you want to embed. The <code>DashboardId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Quick Suite console. You can also get the <code>DashboardId</code> with a <code>ListDashboards</code> API operation.</p>"
         },
         "SheetId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the sheet that the has visual that you want to embed. The <code>SheetId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon QuickSight console.</p>"
+          "documentation":"<p>The ID of the sheet that the has visual that you want to embed. The <code>SheetId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Quick Suite console.</p>"
         },
         "VisualId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the visual that you want to embed. The <code>VisualID</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon QuickSight console.</p>"
+          "documentation":"<p>The ID of the visual that you want to embed. The <code>VisualID</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon Quick Sight console.</p>"
         }
       },
-      "documentation":"<p>A structure that contains the following elements:</p> <ul> <li> <p>The <code>DashboardId</code> of the dashboard that has the visual that you want to embed.</p> </li> <li> <p>The <code>SheetId</code> of the sheet that has the visual that you want to embed.</p> </li> <li> <p>The <code>VisualId</code> of the visual that you want to embed.</p> </li> </ul> <p>The <code>DashboardId</code>, <code>SheetId</code>, and <code>VisualId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon QuickSight console. You can also get the <code>DashboardId</code> with a <code>ListDashboards</code> API operation.</p>"
+      "documentation":"<p>A structure that contains the following elements:</p> <ul> <li> <p>The <code>DashboardId</code> of the dashboard that has the visual that you want to embed.</p> </li> <li> <p>The <code>SheetId</code> of the sheet that has the visual that you want to embed.</p> </li> <li> <p>The <code>VisualId</code> of the visual that you want to embed.</p> </li> </ul> <p>The <code>DashboardId</code>, <code>SheetId</code>, and <code>VisualId</code> can be found in the <code>IDs for developers</code> section of the <code>Embed visual</code> pane of the visual's on-visual menu of the Amazon Quick Sight console. You can also get the <code>DashboardId</code> with a <code>ListDashboards</code> API operation.</p>"
     },
     "DashboardVisualPublishOptions":{
       "type":"structure",
@@ -11566,6 +12834,112 @@
       },
       "documentation":"<p>The data point tooltip options.</p>"
     },
+    "DataPrepAggregationFunction":{
+      "type":"structure",
+      "members":{
+        "SimpleAggregation":{
+          "shape":"DataPrepSimpleAggregationFunction",
+          "documentation":"<p>A simple aggregation function such as <code>SUM</code>, <code>COUNT</code>, <code>AVERAGE</code>, <code>MIN</code>, <code>MAX</code>, <code>MEDIAN</code>, <code>VARIANCE</code>, or <code>STANDARD_DEVIATION</code>.</p>"
+        },
+        "ListAggregation":{
+          "shape":"DataPrepListAggregationFunction",
+          "documentation":"<p>A list aggregation function that concatenates values from multiple rows into a single delimited string.</p>"
+        }
+      },
+      "documentation":"<p>Defines the type of aggregation function to apply to data during data preparation, supporting simple and list aggregations.</p>"
+    },
+    "DataPrepConfiguration":{
+      "type":"structure",
+      "required":[
+        "SourceTableMap",
+        "TransformStepMap",
+        "DestinationTableMap"
+      ],
+      "members":{
+        "SourceTableMap":{
+          "shape":"SourceTableMap",
+          "documentation":"<p>A map of source tables that provide information about underlying sources.</p>"
+        },
+        "TransformStepMap":{
+          "shape":"TransformStepMap",
+          "documentation":"<p>A map of transformation steps that process the data.</p>"
+        },
+        "DestinationTableMap":{
+          "shape":"DestinationTableMap",
+          "documentation":"<p>A map of destination tables that receive the final prepared data.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for data preparation operations, defining the complete pipeline from source tables through transformations to destination tables.</p>"
+    },
+    "DataPrepListAggregationFunction":{
+      "type":"structure",
+      "required":[
+        "Separator",
+        "Distinct"
+      ],
+      "members":{
+        "InputColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the column containing values to be concatenated.</p>"
+        },
+        "Separator":{
+          "shape":"Separator",
+          "documentation":"<p>The string used to separate values in the concatenated result.</p>"
+        },
+        "Distinct":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include only distinct values in the concatenated result, removing duplicates.</p>"
+        }
+      },
+      "documentation":"<p>An aggregation function that concatenates values from multiple rows into a single string with a specified separator.</p>"
+    },
+    "DataPrepSimpleAggregationFunction":{
+      "type":"structure",
+      "required":["FunctionType"],
+      "members":{
+        "InputColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the column on which to perform the aggregation function.</p>"
+        },
+        "FunctionType":{
+          "shape":"DataPrepSimpleAggregationFunctionType",
+          "documentation":"<p>The type of aggregation function to perform, such as <code>COUNT</code>, <code>SUM</code>, <code>AVERAGE</code>, <code>MIN</code>, <code>MAX</code>, <code>MEDIAN</code>, <code>VARIANCE</code>, or <code>STANDARD_DEVIATION</code>.</p>"
+        }
+      },
+      "documentation":"<p>A simple aggregation function that performs standard statistical operations on a column.</p>"
+    },
+    "DataPrepSimpleAggregationFunctionType":{
+      "type":"string",
+      "enum":[
+        "COUNT",
+        "DISTINCT_COUNT",
+        "SUM",
+        "AVERAGE",
+        "MAX",
+        "MIN"
+      ]
+    },
+    "DataQAEnabledOption":{
+      "type":"structure",
+      "members":{
+        "AvailabilityStatus":{
+          "shape":"DashboardBehavior",
+          "documentation":"<p>The status of the Data Q&amp;A option on the dashboard.</p>"
+        }
+      },
+      "documentation":"<p>Adds Q&amp;A capabilities to a dashboard. If no topic is linked, Dashboard Q&amp;A uses the data values that are rendered on the dashboard. End users can use Dashboard Q&amp;A to ask for different slices of the data that they see on the dashboard. If a topic is linked, Topic Q&amp;A is enabled.</p>"
+    },
+    "DataQnAConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The generative Q&amp;A settings of an embedded Quick Sight console.</p>"
+        }
+      },
+      "documentation":"<p>The generative Q&amp;A settings of an embedded Quick Sight console.</p>"
+    },
     "DataSet":{
       "type":"structure",
       "members":{
@@ -11575,7 +12949,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID of the dataset.</p>"
+          "documentation":"<p>The ID of the dataset. Limited to 96 characters.</p>"
         },
         "Name":{
           "shape":"ResourceName",
@@ -11611,7 +12985,7 @@
         },
         "ColumnGroups":{
           "shape":"ColumnGroupList",
-          "documentation":"<p>Groupings of columns that work together in certain Amazon QuickSight features. Currently, only geospatial hierarchy is supported.</p>"
+          "documentation":"<p>Groupings of columns that work together in certain Quick Sight features. Currently, only geospatial hierarchy is supported.</p>"
         },
         "FieldFolders":{
           "shape":"FieldFolderMap",
@@ -11640,6 +13014,18 @@
         "PerformanceConfiguration":{
           "shape":"PerformanceConfiguration",
           "documentation":"<p>The performance optimization configuration of a dataset.</p>"
+        },
+        "UseAs":{
+          "shape":"DataSetUseAs",
+          "documentation":"<p>The usage of the dataset.</p>"
+        },
+        "DataPrepConfiguration":{
+          "shape":"DataPrepConfiguration",
+          "documentation":"<p>The data preparation configuration associated with this dataset.</p>"
+        },
+        "SemanticModelConfiguration":{
+          "shape":"SemanticModelConfiguration",
+          "documentation":"<p>The semantic model configuration associated with this dataset.</p>"
         }
       },
       "documentation":"<p>Dataset.</p>"
@@ -11655,6 +13041,30 @@
       "min":1,
       "sensitive":true
     },
+    "DataSetColumnIdMapping":{
+      "type":"structure",
+      "required":[
+        "SourceColumnId",
+        "TargetColumnId"
+      ],
+      "members":{
+        "SourceColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>Source column ID.</p>"
+        },
+        "TargetColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>Target column ID.</p>"
+        }
+      },
+      "documentation":"<p>Maps a source column identifier to a target column identifier during transform operations.</p>"
+    },
+    "DataSetColumnIdMappingList":{
+      "type":"list",
+      "member":{"shape":"DataSetColumnIdMapping"},
+      "max":2048,
+      "min":1
+    },
     "DataSetConfiguration":{
       "type":"structure",
       "members":{
@@ -11678,6 +13088,88 @@
       "member":{"shape":"DataSetConfiguration"},
       "max":30
     },
+    "DataSetDateComparisonFilterCondition":{
+      "type":"structure",
+      "required":["Operator"],
+      "members":{
+        "Operator":{
+          "shape":"DataSetDateComparisonFilterOperator",
+          "documentation":"<p>The comparison operator to use, such as <code>BEFORE</code>, <code>BEFORE_OR_EQUALS_TO</code>, <code>AFTER</code>, or <code>AFTER_OR_EQUALS_TO</code>.</p>"
+        },
+        "Value":{
+          "shape":"DataSetDateFilterValue",
+          "documentation":"<p>The date value to compare against.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition that compares date values using operators like <code>BEFORE</code>, <code>AFTER</code>, or their inclusive variants.</p>"
+    },
+    "DataSetDateComparisonFilterOperator":{
+      "type":"string",
+      "enum":[
+        "BEFORE",
+        "BEFORE_OR_EQUALS_TO",
+        "AFTER",
+        "AFTER_OR_EQUALS_TO"
+      ]
+    },
+    "DataSetDateFilterCondition":{
+      "type":"structure",
+      "members":{
+        "ColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the date column to filter.</p>"
+        },
+        "ComparisonFilterCondition":{
+          "shape":"DataSetDateComparisonFilterCondition",
+          "documentation":"<p>A comparison-based filter condition for the date column.</p>"
+        },
+        "RangeFilterCondition":{
+          "shape":"DataSetDateRangeFilterCondition",
+          "documentation":"<p>A range-based filter condition for the date column, filtering values between minimum and maximum dates.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition for date columns, supporting both comparison and range-based filtering.</p>"
+    },
+    "DataSetDateFilterValue":{
+      "type":"structure",
+      "members":{
+        "StaticValue":{
+          "shape":"SensitiveTimestamp",
+          "documentation":"<p>A static date value used for filtering.</p>"
+        }
+      },
+      "documentation":"<p>Represents a date value used in filter conditions.</p>"
+    },
+    "DataSetDateRangeFilterCondition":{
+      "type":"structure",
+      "members":{
+        "RangeMinimum":{
+          "shape":"DataSetDateFilterValue",
+          "documentation":"<p>The minimum date value for the range filter.</p>"
+        },
+        "RangeMaximum":{
+          "shape":"DataSetDateFilterValue",
+          "documentation":"<p>The maximum date value for the range filter.</p>"
+        },
+        "IncludeMinimum":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include the minimum value in the filter range.</p>",
+          "box":true
+        },
+        "IncludeMaximum":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include the maximum value in the filter range.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>A filter condition that filters date values within a specified range.</p>"
+    },
+    "DataSetEntityResourceId":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"[0-9a-zA-Z-]*"
+    },
     "DataSetFilterAttribute":{
       "type":"string",
       "enum":[
@@ -11730,6 +13222,85 @@
       "max":128,
       "min":1
     },
+    "DataSetNumericComparisonFilterCondition":{
+      "type":"structure",
+      "required":["Operator"],
+      "members":{
+        "Operator":{
+          "shape":"DataSetNumericComparisonFilterOperator",
+          "documentation":"<p>The comparison operator to use, such as <code>EQUALS</code>, <code>GREATER_THAN</code>, <code>LESS_THAN</code>, or their variants.</p>"
+        },
+        "Value":{
+          "shape":"DataSetNumericFilterValue",
+          "documentation":"<p>The numeric value to compare against.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition that compares numeric values using operators like <code>EQUALS</code>, <code>GREATER_THAN</code>, or <code>LESS_THAN</code>.</p>"
+    },
+    "DataSetNumericComparisonFilterOperator":{
+      "type":"string",
+      "enum":[
+        "EQUALS",
+        "DOES_NOT_EQUAL",
+        "GREATER_THAN",
+        "GREATER_THAN_OR_EQUALS_TO",
+        "LESS_THAN",
+        "LESS_THAN_OR_EQUALS_TO"
+      ]
+    },
+    "DataSetNumericFilterCondition":{
+      "type":"structure",
+      "members":{
+        "ColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the numeric column to filter.</p>"
+        },
+        "ComparisonFilterCondition":{
+          "shape":"DataSetNumericComparisonFilterCondition",
+          "documentation":"<p>A comparison-based filter condition for the numeric column.</p>"
+        },
+        "RangeFilterCondition":{
+          "shape":"DataSetNumericRangeFilterCondition",
+          "documentation":"<p>A range-based filter condition for the numeric column, filtering values between minimum and maximum numbers.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition for numeric columns, supporting both comparison and range-based filtering.</p>"
+    },
+    "DataSetNumericFilterValue":{
+      "type":"structure",
+      "members":{
+        "StaticValue":{
+          "shape":"SensitiveDouble",
+          "documentation":"<p>A static numeric value used for filtering.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Represents a numeric value used in filter conditions.</p>"
+    },
+    "DataSetNumericRangeFilterCondition":{
+      "type":"structure",
+      "members":{
+        "RangeMinimum":{
+          "shape":"DataSetNumericFilterValue",
+          "documentation":"<p>The minimum numeric value for the range filter.</p>"
+        },
+        "RangeMaximum":{
+          "shape":"DataSetNumericFilterValue",
+          "documentation":"<p>The maximum numeric value for the range filter.</p>"
+        },
+        "IncludeMinimum":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include the minimum value in the filter range.</p>",
+          "box":true
+        },
+        "IncludeMaximum":{
+          "shape":"Boolean",
+          "documentation":"<p>Whether to include the maximum value in the filter range.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>A filter condition that filters numeric values within a specified range.</p>"
+    },
     "DataSetReference":{
       "type":"structure",
       "required":[
@@ -11755,11 +13326,14 @@
     },
     "DataSetRefreshProperties":{
       "type":"structure",
-      "required":["RefreshConfiguration"],
       "members":{
         "RefreshConfiguration":{
           "shape":"RefreshConfiguration",
           "documentation":"<p>The refresh configuration for a dataset.</p>"
+        },
+        "FailureConfiguration":{
+          "shape":"RefreshFailureConfiguration",
+          "documentation":"<p>The failure configuration for a dataset.</p>"
         }
       },
       "documentation":"<p>The refresh properties of a dataset.</p>"
@@ -11808,6 +13382,102 @@
       "max":1,
       "min":1
     },
+    "DataSetStringComparisonFilterCondition":{
+      "type":"structure",
+      "required":["Operator"],
+      "members":{
+        "Operator":{
+          "shape":"DataSetStringComparisonFilterOperator",
+          "documentation":"<p>The comparison operator to use, such as <code>EQUALS</code>, <code>CONTAINS</code>, <code>STARTS_WITH</code>, <code>ENDS_WITH</code>, or their negations.</p>"
+        },
+        "Value":{
+          "shape":"DataSetStringFilterValue",
+          "documentation":"<p>The string value to compare against.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition that compares string values using operators like <code>EQUALS</code>, <code>CONTAINS</code>, or <code>STARTS_WITH</code>.</p>"
+    },
+    "DataSetStringComparisonFilterOperator":{
+      "type":"string",
+      "enum":[
+        "EQUALS",
+        "DOES_NOT_EQUAL",
+        "CONTAINS",
+        "DOES_NOT_CONTAIN",
+        "STARTS_WITH",
+        "ENDS_WITH"
+      ]
+    },
+    "DataSetStringFilterCondition":{
+      "type":"structure",
+      "members":{
+        "ColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the string column to filter.</p>"
+        },
+        "ComparisonFilterCondition":{
+          "shape":"DataSetStringComparisonFilterCondition",
+          "documentation":"<p>A comparison-based filter condition for the string column.</p>"
+        },
+        "ListFilterCondition":{
+          "shape":"DataSetStringListFilterCondition",
+          "documentation":"<p>A list-based filter condition that includes or excludes values from a specified list.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition for string columns, supporting both comparison and list-based filtering.</p>"
+    },
+    "DataSetStringFilterStaticValue":{
+      "type":"string",
+      "max":512,
+      "sensitive":true
+    },
+    "DataSetStringFilterStaticValueList":{
+      "type":"list",
+      "member":{"shape":"DataSetStringFilterStaticValue"},
+      "max":1000
+    },
+    "DataSetStringFilterValue":{
+      "type":"structure",
+      "members":{
+        "StaticValue":{
+          "shape":"DataSetStringFilterStaticValue",
+          "documentation":"<p>A static string value used for filtering.</p>"
+        }
+      },
+      "documentation":"<p>Represents a string value used in filter conditions.</p>"
+    },
+    "DataSetStringListFilterCondition":{
+      "type":"structure",
+      "required":["Operator"],
+      "members":{
+        "Operator":{
+          "shape":"DataSetStringListFilterOperator",
+          "documentation":"<p>The list operator to use, either <code>INCLUDE</code> to match values in the list or <code>EXCLUDE</code> to filter out values in the list.</p>"
+        },
+        "Values":{
+          "shape":"DataSetStringListFilterValue",
+          "documentation":"<p>The list of string values to include or exclude in the filter.</p>"
+        }
+      },
+      "documentation":"<p>A filter condition that includes or excludes string values from a specified list.</p>"
+    },
+    "DataSetStringListFilterOperator":{
+      "type":"string",
+      "enum":[
+        "INCLUDE",
+        "EXCLUDE"
+      ]
+    },
+    "DataSetStringListFilterValue":{
+      "type":"structure",
+      "members":{
+        "StaticValues":{
+          "shape":"DataSetStringFilterStaticValueList",
+          "documentation":"<p>A list of static string values used for filtering.</p>"
+        }
+      },
+      "documentation":"<p>Represents a list of string values used in filter conditions.</p>"
+    },
     "DataSetSummary":{
       "type":"structure",
       "members":{
@@ -11837,7 +13507,11 @@
         },
         "RowLevelPermissionDataSet":{
           "shape":"RowLevelPermissionDataSet",
-          "documentation":"<p>The row-level security configuration for the dataset.</p>"
+          "documentation":"<p>The row-level security configuration for the dataset in the legacy data preparation experience.</p>"
+        },
+        "RowLevelPermissionDataSetMap":{
+          "shape":"RowLevelPermissionDataSetMap",
+          "documentation":"<p>The row-level security configuration for the dataset in the new data preparation experience.</p>"
         },
         "RowLevelPermissionTagConfigurationApplied":{
           "shape":"Boolean",
@@ -11846,6 +13520,10 @@
         "ColumnLevelPermissionRulesApplied":{
           "shape":"Boolean",
           "documentation":"<p>A value that indicates if the dataset has column level permission configured.</p>"
+        },
+        "UseAs":{
+          "shape":"DataSetUseAs",
+          "documentation":"<p>The usage of the dataset.</p>"
         }
       },
       "documentation":"<p>Dataset summary.</p>"
@@ -11863,11 +13541,15 @@
         },
         "DisableUseAsImportedSource":{
           "shape":"Boolean",
-          "documentation":"<p>An option that controls whether a child dataset that's stored in QuickSight can use this dataset as a source.</p>"
+          "documentation":"<p>An option that controls whether a child dataset that's stored in Quick Sight can use this dataset as a source.</p>"
         }
       },
       "documentation":"<p>The usage configuration to apply to child datasets that reference this dataset as a source.</p>"
     },
+    "DataSetUseAs":{
+      "type":"string",
+      "enum":["RLS_RULES"]
+    },
     "DataSource":{
       "type":"structure",
       "members":{
@@ -11901,7 +13583,7 @@
         },
         "DataSourceParameters":{
           "shape":"DataSourceParameters",
-          "documentation":"<p>The parameters that Amazon QuickSight uses to connect to your underlying source. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
+          "documentation":"<p>The parameters that Quick Sight uses to connect to your underlying source. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
         },
         "AlternateDataSourceParameters":{
           "shape":"DataSourceParametersList",
@@ -11909,11 +13591,11 @@
         },
         "VpcConnectionProperties":{
           "shape":"VpcConnectionProperties",
-          "documentation":"<p>The VPC connection information. You need to use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source.</p>"
+          "documentation":"<p>The VPC connection information. You need to use this parameter only when you want Quick Sight to use a VPC connection when connecting to your underlying source.</p>"
         },
         "SslProperties":{
           "shape":"SslProperties",
-          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source.</p>"
+          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Quick Sight connects to your underlying source.</p>"
         },
         "ErrorInfo":{
           "shape":"DataSourceErrorInfo",
@@ -11940,6 +13622,10 @@
         "SecretArn":{
           "shape":"SecretArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the secret associated with the data source in Amazon Secrets Manager.</p>"
+        },
+        "WebProxyCredentials":{
+          "shape":"WebProxyCredentials",
+          "documentation":"<p>The credentials for connecting through a web proxy server.</p>"
         }
       },
       "documentation":"<p>Data source credentials. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>",
@@ -12044,6 +13730,10 @@
           "shape":"S3Parameters",
           "documentation":"<p>The parameters for S3.</p>"
         },
+        "S3KnowledgeBaseParameters":{
+          "shape":"S3KnowledgeBaseParameters",
+          "documentation":"<p>The parameters for S3 Knowledge Base.</p>"
+        },
         "ServiceNowParameters":{
           "shape":"ServiceNowParameters",
           "documentation":"<p>The parameters for ServiceNow.</p>"
@@ -12091,9 +13781,29 @@
         "BigQueryParameters":{
           "shape":"BigQueryParameters",
           "documentation":"<p>The parameters that are required to connect to a Google BigQuery data source.</p>"
+        },
+        "ImpalaParameters":{
+          "shape":"ImpalaParameters",
+          "documentation":"<p>The parameters for Impala.</p>"
+        },
+        "CustomConnectionParameters":{
+          "shape":"CustomConnectionParameters",
+          "documentation":"<p>The parameters for custom connectors.</p>"
+        },
+        "WebCrawlerParameters":{
+          "shape":"WebCrawlerParameters",
+          "documentation":"<p>The parameters for Web Crawler.</p>"
+        },
+        "ConfluenceParameters":{
+          "shape":"ConfluenceParameters",
+          "documentation":"<p>The parameters for Confluence.</p>"
+        },
+        "QBusinessParameters":{
+          "shape":"QBusinessParameters",
+          "documentation":"<p>The parameters for Amazon Q Business.</p>"
         }
       },
-      "documentation":"<p>The parameters that Amazon QuickSight uses to connect to your underlying data source. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
+      "documentation":"<p>The parameters that Quick Sight uses to connect to your underlying data source. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
     },
     "DataSourceParametersList":{
       "type":"list",
@@ -12195,9 +13905,38 @@
         "DATABRICKS",
         "STARBURST",
         "TRINO",
-        "BIGQUERY"
+        "BIGQUERY",
+        "GOOGLESHEETS",
+        "GOOGLE_DRIVE",
+        "CONFLUENCE",
+        "SHAREPOINT",
+        "ONE_DRIVE",
+        "WEB_CRAWLER",
+        "S3_KNOWLEDGE_BASE",
+        "QBUSINESS"
       ]
     },
+    "DataStoriesConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The data story settings of an embedded Quick Sight console.</p>"
+        }
+      },
+      "documentation":"<p>The data story settings of an embedded Quick Sight console.</p>"
+    },
+    "DataStoriesSharingOption":{
+      "type":"structure",
+      "members":{
+        "AvailabilityStatus":{
+          "shape":"DashboardBehavior",
+          "documentation":"<p>Availability status.</p>"
+        }
+      },
+      "documentation":"<p>Executive summary option.</p>"
+    },
     "Database":{
       "type":"string",
       "max":128,
@@ -13077,19 +14816,44 @@
       },
       "documentation":"<p>The default options that correspond to the <code>TextField</code> filter control type.</p>"
     },
+    "DeleteAccountCustomPermissionRequest":{
+      "type":"structure",
+      "required":["AwsAccountId"],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account from which you want to unapply the custom permissions profile.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        }
+      }
+    },
+    "DeleteAccountCustomPermissionResponse":{
+      "type":"structure",
+      "members":{
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>"
+        }
+      }
+    },
     "DeleteAccountCustomizationRequest":{
       "type":"structure",
       "required":["AwsAccountId"],
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to delete Amazon QuickSight customizations from in this Amazon Web Services Region.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to delete Quick Sight customizations from.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that you're deleting the customizations from.</p>",
+          "documentation":"<p>The Quick Sight namespace that you're deleting the customizations from.</p>",
           "location":"querystring",
           "locationName":"namespace"
         }
@@ -13135,6 +14899,49 @@
         }
       }
     },
+    "DeleteActionConnectorRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that contains the action connector to delete.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector to delete.</p>",
+          "location":"uri",
+          "locationName":"ActionConnectorId"
+        }
+      }
+    },
+    "DeleteActionConnectorResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the deleted action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the deleted action connector.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "DeleteAnalysisRequest":{
       "type":"structure",
       "required":[
@@ -13156,7 +14963,7 @@
         },
         "RecoveryWindowInDays":{
           "shape":"RecoveryWindowInDays",
-          "documentation":"<p>A value that specifies the number of days that Amazon QuickSight waits before it deletes the analysis. You can't use this parameter with the <code>ForceDeleteWithoutRecovery</code> option in the same API call. The default value is 30.</p>",
+          "documentation":"<p>A value that specifies the number of days that Amazon Quick Sight waits before it deletes the analysis. You can't use this parameter with the <code>ForceDeleteWithoutRecovery</code> option in the same API call. The default value is 30.</p>",
           "location":"querystring",
           "locationName":"recovery-window-in-days"
         },
@@ -13230,7 +15037,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         }
@@ -13382,7 +15189,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
+          "documentation":"<p>The ID for the dataset that you want to delete. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         }
@@ -13397,7 +15204,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
+          "documentation":"<p>The ID for the dataset that you want to delete. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -13459,13 +15266,13 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon QuickSight account that you want to disconnect from a Amazon Q Business application.</p>",
+          "documentation":"<p>The ID of the Quick Sight account that you want to disconnect from a Amazon Q Business application.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that you want to delete a linked Amazon Q Business application from. If this field is left blank, the Amazon Q Business application is deleted from the default namespace. Currently, the default namespace is the only valid value for this parameter.</p>",
+          "documentation":"<p>The Quick Sight namespace that you want to delete a linked Amazon Q Business application from. If this field is left blank, the Amazon Q Business application is deleted from the default namespace. Currently, the default namespace is the only valid value for this parameter.</p>",
           "location":"querystring",
           "locationName":"namespace"
         }
@@ -13599,7 +15406,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -13641,7 +15448,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -13757,7 +15564,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to delete the Amazon QuickSight namespace from.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to delete the Quick Sight namespace from.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -13849,7 +15656,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -13897,7 +15704,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -14242,7 +16049,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -14327,7 +16134,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -14409,25 +16216,54 @@
       "max":1,
       "min":1
     },
+    "DescribeAccountCustomPermissionRequest":{
+      "type":"structure",
+      "required":["AwsAccountId"],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account for which you want to describe the applied custom permissions profile.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        }
+      }
+    },
+    "DescribeAccountCustomPermissionResponse":{
+      "type":"structure",
+      "members":{
+        "CustomPermissionsName":{
+          "shape":"CustomPermissionsName",
+          "documentation":"<p>The name of the custom permissions profile.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>"
+        }
+      }
+    },
     "DescribeAccountCustomizationRequest":{
       "type":"structure",
       "required":["AwsAccountId"],
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to describe Amazon QuickSight customizations for.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to describe Quick Sight customizations for.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that you want to describe Amazon QuickSight customizations for.</p>",
+          "documentation":"<p>The Quick Sight namespace that you want to describe Quick Sight customizations for.</p>",
           "location":"querystring",
           "locationName":"namespace"
         },
         "Resolved":{
           "shape":"boolean",
-          "documentation":"<p>The <code>Resolved</code> flag works with the other parameters to determine which view of Amazon QuickSight customizations is returned. You can add this flag to your command to use the same view that Amazon QuickSight uses to identify which customizations to apply to the console. Omit this flag, or set it to <code>no-resolved</code>, to reveal customizations that are configured at different levels. </p>",
+          "documentation":"<p>The <code>Resolved</code> flag works with the other parameters to determine which view of Quick Sight customizations is returned. You can add this flag to your command to use the same view that Quick Sight uses to identify which customizations to apply to the console. Omit this flag, or set it to <code>no-resolved</code>, to reveal customizations that are configured at different levels. </p>",
           "location":"querystring",
           "locationName":"resolved"
         }
@@ -14446,11 +16282,11 @@
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that you're describing. </p>"
+          "documentation":"<p>The Quick Sight namespace that you're describing. </p>"
         },
         "AccountCustomization":{
           "shape":"AccountCustomization",
-          "documentation":"<p>The Amazon QuickSight customizations that exist in the current Amazon Web Services Region. </p>"
+          "documentation":"<p>The Quick Sight customizations that exist. </p>"
         },
         "RequestId":{
           "shape":"String",
@@ -14480,7 +16316,7 @@
       "members":{
         "AccountSettings":{
           "shape":"AccountSettings",
-          "documentation":"<p>The Amazon QuickSight settings for this Amazon Web Services account. This information includes the edition of Amazon Amazon QuickSight that you subscribed to (Standard or Enterprise) and the notification email for the Amazon QuickSight subscription. </p> <p>In the QuickSight console, the Amazon QuickSight subscription is sometimes referred to as a QuickSight \"account\" even though it's technically not an account by itself. Instead, it's a subscription to the Amazon QuickSight service for your Amazon Web Services account. The edition that you subscribe to applies to Amazon QuickSight in every Amazon Web Services Region where you use it.</p>"
+          "documentation":"<p>The Amazon Quick Sight settings for this Amazon Web Services account. This information includes the edition of Amazon Quick Sight that you subscribed to (Standard or Enterprise) and the notification email for the Amazon Quick Sight subscription. </p> <p>In the Quick Sight console, the Amazon Quick Sight subscription is sometimes referred to as a Quick Sight \"account\" even though it's technically not an account by itself. Instead, it's a subscription to the Amazon Quick Sight service for your Amazon Web Services account. The edition that you subscribe to applies to Quick Suite in every Amazon Web Services Region where you use it.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -14499,7 +16335,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The Amazon Web Services account ID associated with your Amazon QuickSight account.</p>",
+          "documentation":"<p>The Amazon Web Services account ID associated with your Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         }
@@ -14510,7 +16346,7 @@
       "members":{
         "AccountInfo":{
           "shape":"AccountInfo",
-          "documentation":"<p>A structure that contains the following elements:</p> <ul> <li> <p>Your Amazon QuickSight account name.</p> </li> <li> <p>The edition of Amazon QuickSight that your account is using.</p> </li> <li> <p>The notification email address that is associated with the Amazon QuickSight account. </p> </li> <li> <p>The authentication type of the Amazon QuickSight account.</p> </li> <li> <p>The status of the Amazon QuickSight account's subscription.</p> </li> </ul>"
+          "documentation":"<p>A structure that contains the following elements:</p> <ul> <li> <p>Your Quick Sight account name.</p> </li> <li> <p>The edition of Quick Sight that your account is using.</p> </li> <li> <p>The notification email address that is associated with the Amazon Quick Sight account. </p> </li> <li> <p>The authentication type of the Quick Sight account.</p> </li> <li> <p>The status of the Quick Sight account's subscription.</p> </li> </ul>"
         },
         "Status":{
           "shape":"StatusCode",
@@ -14523,6 +16359,92 @@
         }
       }
     },
+    "DescribeActionConnectorPermissionsRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that contains the action connector.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector whose permissions you want to describe.</p>",
+          "location":"uri",
+          "locationName":"ActionConnectorId"
+        }
+      }
+    },
+    "DescribeActionConnectorPermissionsResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector.</p>"
+        },
+        "Permissions":{
+          "shape":"ResourcePermissionList",
+          "documentation":"<p>The list of permissions associated with the action connector, including the principals and their allowed actions.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
+    "DescribeActionConnectorRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that contains the action connector.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector to describe.</p>",
+          "location":"uri",
+          "locationName":"ActionConnectorId"
+        }
+      }
+    },
+    "DescribeActionConnectorResponse":{
+      "type":"structure",
+      "members":{
+        "ActionConnector":{
+          "shape":"ActionConnector",
+          "documentation":"<p>The detailed information about the action connector, including its configuration and current state.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "DescribeAnalysisDefinitionRequest":{
       "type":"structure",
       "required":[
@@ -14902,7 +16824,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         }
@@ -14940,7 +16862,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         },
@@ -15078,7 +17000,7 @@
         },
         "DashboardPublishOptions":{
           "shape":"DashboardPublishOptions",
-          "documentation":"<p>Options for publishing the dashboard:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon QuickSight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> </ul>"
+          "documentation":"<p>Options for publishing the dashboard:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon Quick Sight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>QuickSuiteActionsOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. Features related to Actions in Amazon Quick Suite on dashboards are disabled when this is set to <code>DISABLED</code>. This option is <code>DISABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExecutiveSummaryOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to build an executive summary is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>DataStoriesSharingOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to share a data story is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> </ul>"
         }
       }
     },
@@ -15372,7 +17294,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
+          "documentation":"<p>The ID for the dataset that you want to describe. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         }
@@ -15387,7 +17309,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
+          "documentation":"<p>The ID for the dataset that you want to describe. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
         },
         "Permissions":{
           "shape":"ResourcePermissionList",
@@ -15458,7 +17380,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
+          "documentation":"<p>The ID for the dataset that you want to describe. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>",
           "location":"uri",
           "locationName":"DataSetId"
         }
@@ -15574,13 +17496,13 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon QuickSight account that is linked to the Amazon Q Business application that you want described.</p>",
+          "documentation":"<p>The ID of the Quick Sight account that is linked to the Amazon Q Business application that you want described.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that contains the linked Amazon Q Business application. If this field is left blank, the default namespace is used. Currently, the default namespace is the only valid value for this parameter.</p>",
+          "documentation":"<p>The Quick Sight namespace that contains the linked Amazon Q Business application. If this field is left blank, the default namespace is used. Currently, the default namespace is the only valid value for this parameter.</p>",
           "location":"querystring",
           "locationName":"namespace"
         }
@@ -15600,7 +17522,7 @@
         },
         "ApplicationId":{
           "shape":"String",
-          "documentation":"<p>The ID of the Amazon Q Business application that is linked to the Amazon QuickSight account.</p>"
+          "documentation":"<p>The ID of the Amazon Q Business application that is linked to the Quick Sight account.</p>"
         }
       }
     },
@@ -15806,7 +17728,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -15849,7 +17771,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -16044,7 +17966,11 @@
         },
         "KeyRegistration":{
           "shape":"KeyRegistration",
-          "documentation":"<p>A list of <code>RegisteredCustomerManagedKey</code> objects in a Amazon QuickSight account.</p>"
+          "documentation":"<p>A list of <code>RegisteredCustomerManagedKey</code> objects in a Quick Sight account.</p>"
+        },
+        "QDataKey":{
+          "shape":"QDataKey",
+          "documentation":"<p>A list of <code>QDataKey</code> objects in a Quick Sight account.</p>"
         },
         "RequestId":{
           "shape":"NonEmptyString",
@@ -16065,7 +17991,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that contains the Amazon QuickSight namespace that you want to describe.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that contains the Quick Sight namespace that you want to describe.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -16131,7 +18057,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account that contains the Amazon QuickSight Q Search configuration that the user wants described.</p>",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the Quick Sight Q Search configuration that the user wants described.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         }
@@ -16142,7 +18068,7 @@
       "members":{
         "QSearchStatus":{
           "shape":"QSearchStatus",
-          "documentation":"<p>The status of Amazon QuickSight Q Search configuration.</p>"
+          "documentation":"<p>The status of Quick Sight Q Search configuration.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -16221,7 +18147,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -16804,6 +18730,10 @@
           "shape":"StatusCode",
           "documentation":"<p>The HTTP status of the request.</p>",
           "location":"statusCode"
+        },
+        "CustomInstructions":{
+          "shape":"CustomInstructions",
+          "documentation":"<p>Custom instructions for the topic.</p>"
         }
       }
     },
@@ -16823,7 +18753,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -16920,6 +18850,47 @@
       },
       "documentation":"<p>The configuration of destination parameter values.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
     },
+    "DestinationTable":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"DestinationTableAlias",
+          "documentation":"<p>Alias for the destination table.</p>"
+        },
+        "Source":{
+          "shape":"DestinationTableSource",
+          "documentation":"<p>The source configuration that specifies which transform operation provides data to this destination table.</p>"
+        }
+      },
+      "documentation":"<p>Defines a destination table in data preparation that receives the final transformed data.</p>"
+    },
+    "DestinationTableAlias":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "DestinationTableMap":{
+      "type":"map",
+      "key":{"shape":"DataSetEntityResourceId"},
+      "value":{"shape":"DestinationTable"},
+      "max":1,
+      "min":1
+    },
+    "DestinationTableSource":{
+      "type":"structure",
+      "required":["TransformOperationId"],
+      "members":{
+        "TransformOperationId":{
+          "shape":"DataSetEntityResourceId",
+          "documentation":"<p>The identifier of the transform operation that provides data to the destination table.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the source of data for a destination table, including the transform operation and column mappings.</p>"
+    },
     "DigitGroupingStyle":{
       "type":"string",
       "enum":[
@@ -17034,7 +19005,7 @@
           "documentation":"<p>The Amazon Web Services request ID for this request.</p>"
         }
       },
-      "documentation":"<p>The domain specified isn't on the allow list. All domains for embedded dashboards must be added to the approved list by an Amazon QuickSight admin.</p>",
+      "documentation":"<p>The domain specified isn't on the allow list. All domains for embedded dashboards must be added to the approved list by an Amazon Quick Suite admin.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
     },
@@ -17043,7 +19014,7 @@
       "members":{
         "LabelVisibility":{
           "shape":"Visibility",
-          "documentation":"<p>Determines the visibility of the label in a donut chart. In the Amazon QuickSight console, this option is called <code>'Show total'</code>.</p>"
+          "documentation":"<p>Determines the visibility of the label in a donut chart. In the Quick Sight console, this option is called <code>'Show total'</code>.</p>"
         }
       },
       "documentation":"<p>The label options of the label that is displayed in the center of a donut chart. This option isn't available for pie charts.</p>"
@@ -17131,6 +19102,11 @@
         "ENTERPRISE_AND_Q"
       ]
     },
+    "Email":{
+      "type":"string",
+      "pattern":"[\\w.%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}",
+      "sensitive":true
+    },
     "EmbeddingIdentityType":{
       "type":"string",
       "enum":[
@@ -17163,7 +19139,13 @@
           "documentation":"<p>The list of custom actions that are configured for a visual.</p>"
         }
       },
-      "documentation":"<p>An empty visual.</p> <p>Empty visuals are used in layouts but have not been configured to show any data. A new visual created in the Amazon QuickSight console is considered an <code>EmptyVisual</code> until a visual type is selected.</p>"
+      "documentation":"<p>An empty visual.</p> <p>Empty visuals are used in layouts but have not been configured to show any data. A new visual created in the Quick Sight console is considered an <code>EmptyVisual</code> until a visual type is selected.</p>"
+    },
+    "Endpoint":{
+      "type":"string",
+      "max":8192,
+      "min":1,
+      "pattern":"https://.*"
     },
     "Entity":{
       "type":"structure",
@@ -17264,6 +19246,27 @@
       },
       "documentation":"<p>The exclude period of <code>TimeRangeFilter</code> or <code>RelativeDatesFilter</code>.</p>"
     },
+    "ExecutiveSummaryConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The executive summary settings of an embedded Quick Sight console or dashboard.</p>"
+        }
+      },
+      "documentation":"<p>The executive summary settings of an embedded Quick Sight console or dashboard.</p>"
+    },
+    "ExecutiveSummaryOption":{
+      "type":"structure",
+      "members":{
+        "AvailabilityStatus":{
+          "shape":"DashboardBehavior",
+          "documentation":"<p>Availability status.</p>"
+        }
+      },
+      "documentation":"<p>Data stories sharing option.</p>"
+    },
     "ExplicitHierarchy":{
       "type":"structure",
       "required":[
@@ -17357,7 +19360,7 @@
           "documentation":"<p>A boolean that indicates whether a <code>FailedKeyRegistrationEntry</code> resulted from user error. If the value of this property is <code>True</code>, the error was caused by user error. If the value of this property is <code>False</code>, the error occurred on the backend. If your job continues fail and with a <code>False</code> <code>SenderFault</code> value, contact Amazon Web Services Support.</p>"
         }
       },
-      "documentation":"<p>An entry that appears when a <code>KeyRegistration</code> update to Amazon QuickSight fails.</p>"
+      "documentation":"<p>An entry that appears when a <code>KeyRegistration</code> update to Quick Sight fails.</p>"
     },
     "FieldBasedTooltip":{
       "type":"structure",
@@ -17424,6 +19427,16 @@
       },
       "documentation":"<p>The field label type.</p>"
     },
+    "FieldName":{
+      "type":"string",
+      "enum":[
+        "assetName",
+        "assetDescription",
+        "DIRECT_QUICKSIGHT_OWNER",
+        "DIRECT_QUICKSIGHT_VIEWER_OR_OWNER",
+        "DIRECT_QUICKSIGHT_SOLE_OWNER"
+      ]
+    },
     "FieldOrderList":{
       "type":"list",
       "member":{"shape":"FieldId"},
@@ -17684,14 +19697,14 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A filled map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filled-maps.html\">Creating filled maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A filled map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filled-maps.html\">Creating filled maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "Filter":{
       "type":"structure",
       "members":{
         "CategoryFilter":{
           "shape":"CategoryFilter",
-          "documentation":"<p>A <code>CategoryFilter</code> filters text values.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-text-filter-data-prep.html\">Adding text filters</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A <code>CategoryFilter</code> filters text values.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-text-filter-data-prep.html\">Adding text filters</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "NumericRangeFilter":{
           "shape":"NumericRangeFilter",
@@ -17928,7 +19941,7 @@
           "documentation":"<p>The filter new feature which can apply filter group to all data sets. Choose one of the following options:</p> <ul> <li> <p> <code>ALL_DATASETS</code> </p> </li> <li> <p> <code>SINGLE_DATASET</code> </p> </li> </ul>"
         }
       },
-      "documentation":"<p>A grouping of individual filters. Filter groups are applied to the same group of visuals.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-compound-filter.html\">Adding filter conditions (group filters) with AND and OR operators</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A grouping of individual filters. Filter groups are applied to the same group of visuals.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/add-a-compound-filter.html\">Adding filter conditions (group filters) with AND and OR operators</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "FilterGroupList":{
       "type":"list",
@@ -18012,15 +20025,32 @@
     },
     "FilterOperation":{
       "type":"structure",
-      "required":["ConditionExpression"],
       "members":{
         "ConditionExpression":{
           "shape":"Expression",
           "documentation":"<p>An expression that must evaluate to a Boolean value. Rows for which the expression evaluates to true are kept in the dataset.</p>"
+        },
+        "StringFilterCondition":{
+          "shape":"DataSetStringFilterCondition",
+          "documentation":"<p>A string-based filter condition within a filter operation.</p>"
+        },
+        "NumericFilterCondition":{
+          "shape":"DataSetNumericFilterCondition",
+          "documentation":"<p>A numeric-based filter condition within a filter operation.</p>"
+        },
+        "DateFilterCondition":{
+          "shape":"DataSetDateFilterCondition",
+          "documentation":"<p>A date-based filter condition within a filter operation.</p>"
         }
       },
       "documentation":"<p>A transform operation that filters rows based on a condition.</p>"
     },
+    "FilterOperationList":{
+      "type":"list",
+      "member":{"shape":"FilterOperation"},
+      "max":128,
+      "min":0
+    },
     "FilterOperationSelectedFieldsConfiguration":{
       "type":"structure",
       "members":{
@@ -18227,6 +20257,120 @@
       "member":{"shape":"ShortRestrictiveResourceId"},
       "max":50
     },
+    "FiltersOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "FilterOperations"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for filtering.</p>"
+        },
+        "FilterOperations":{
+          "shape":"FilterOperationList",
+          "documentation":"<p>The list of filter operations to apply.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that applies one or more filter conditions.</p>"
+    },
+    "FlowDescription":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "FlowId":{
+      "type":"string",
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
+    "FlowMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "FlowPublishState":{
+      "type":"string",
+      "enum":[
+        "PUBLISHED",
+        "DRAFT",
+        "PENDING_APPROVAL"
+      ]
+    },
+    "FlowSummary":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "FlowId",
+        "Name",
+        "CreatedTime"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow.</p>"
+        },
+        "Name":{
+          "shape":"Title",
+          "documentation":"<p>The display name of the flow.</p>"
+        },
+        "Description":{
+          "shape":"FlowDescription",
+          "documentation":"<p>The description of the flow.</p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time this flow was created.</p>"
+        },
+        "CreatedBy":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the principal who created the flow.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last time this flow was modified.</p>"
+        },
+        "LastUpdatedBy":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the last principal who updated the flow.</p>"
+        },
+        "PublishState":{
+          "shape":"FlowPublishState",
+          "documentation":"<p>The publish state for the flow. The valid values are <code>DRAFT</code>, <code>PUBLISHED</code>, or <code>PENDING_APPROVAL</code>.</p>"
+        },
+        "RunCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of runs done for the flow.</p>"
+        },
+        "UserCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of users who have used the flow.</p>"
+        },
+        "LastPublishedBy":{
+          "shape":"String",
+          "documentation":"<p>The identifier of the last principal who published the flow.</p>"
+        },
+        "LastPublishedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last time this flow was published.</p>"
+        }
+      },
+      "documentation":"<p>The basic information of the flow exluding its definition specifying the steps.</p>"
+    },
+    "FlowSummaryList":{
+      "type":"list",
+      "member":{"shape":"FlowSummary"}
+    },
     "Folder":{
       "type":"structure",
       "members":{
@@ -18263,7 +20407,7 @@
           "documentation":"<p>The sharing scope of the folder.</p>"
         }
       },
-      "documentation":"<p>A folder in Amazon QuickSight.</p>"
+      "documentation":"<p>A folder in Quick Sight.</p>"
     },
     "FolderArnList":{
       "type":"list",
@@ -18299,7 +20443,7 @@
           "documentation":"<p>The type of asset that it is.</p>"
         }
       },
-      "documentation":"<p>An asset in a Amazon QuickSight folder, such as a dashboard, analysis, or dataset.</p>"
+      "documentation":"<p>An asset in a Quick Sight folder, such as a dashboard, analysis, or dataset.</p>"
     },
     "FolderMemberList":{
       "type":"list",
@@ -18327,7 +20471,7 @@
           "documentation":"<p>The value of the named item (in this example, <code>PARENT_FOLDER_ARN</code>), that you want to use as a filter. For example, <code>\"Value\": \"arn:aws:quicksight:us-east-1:1:folder/folderId\"</code>.</p>"
         }
       },
-      "documentation":"<p>A filter to use to search an Amazon QuickSight folder.</p>"
+      "documentation":"<p>A filter to use to search an Quick Sight folder.</p>"
     },
     "FolderSearchFilterList":{
       "type":"list",
@@ -18366,7 +20510,7 @@
           "documentation":"<p>The sharing scope of the folder.</p>"
         }
       },
-      "documentation":"<p>A summary of information about an existing Amazon QuickSight folder. </p>"
+      "documentation":"<p>A summary of information about an existing Quick Sight folder. </p>"
     },
     "FolderSummaryList":{
       "type":"list",
@@ -18895,7 +21039,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A funnel chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/funnel-visual-content.html\">Using funnel charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A funnel chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/funnel-visual-content.html\">Using funnel charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "GaugeChartArcConditionalFormatting":{
       "type":"structure",
@@ -19071,7 +21215,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A gauge chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/gauge-chart.html\">Using gauge charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A gauge chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/gauge-chart.html\">Using gauge charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "GenerateEmbedUrlForAnonymousUserRequest":{
       "type":"structure",
@@ -19094,15 +21238,15 @@
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that the anonymous user virtually belongs to. If you are not using an Amazon QuickSight custom namespace, set this to <code>default</code>.</p>"
+          "documentation":"<p>The Amazon Quick Sight namespace that the anonymous user virtually belongs to. If you are not using an Amazon Quick Suite custom namespace, set this to <code>default</code>.</p>"
         },
         "SessionTags":{
           "shape":"SessionTagList",
-          "documentation":"<p>The session tags used for row-level security. Before you use this parameter, make sure that you have configured the relevant datasets using the <code>DataSet$RowLevelPermissionTagConfiguration</code> parameter so that session tags can be used to provide row-level security.</p> <p>These are not the tags used for the Amazon Web Services resource tagging feature. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-rls-tags.html\">Using Row-Level Security (RLS) with Tags</a>in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The session tags used for row-level security. Before you use this parameter, make sure that you have configured the relevant datasets using the <code>DataSet$RowLevelPermissionTagConfiguration</code> parameter so that session tags can be used to provide row-level security.</p> <p>These are not the tags used for the Amazon Web Services resource tagging feature. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-rls-tags.html\">Using Row-Level Security (RLS) with Tags</a>in the <i>Amazon Quick Sight User Guide</i>.</p>"
         },
         "AuthorizedResourceArns":{
           "shape":"ArnList",
-          "documentation":"<p>The Amazon Resource Names (ARNs) for the Amazon QuickSight resources that the user is authorized to access during the lifetime of the session.</p> <p>If you choose <code>Dashboard</code> embedding experience, pass the list of dashboard ARNs in the account that you want the user to be able to view.</p> <p>If you want to make changes to the theme of your embedded content, pass a list of theme ARNs that the anonymous users need access to.</p> <p>Currently, you can pass up to 25 theme ARNs in each API call.</p>"
+          "documentation":"<p>The Amazon Resource Names (ARNs) for the Quick Sight resources that the user is authorized to access during the lifetime of the session.</p> <p>If you choose <code>Dashboard</code> embedding experience, pass the list of dashboard ARNs in the account that you want the user to be able to view.</p> <p>If you want to make changes to the theme of your embedded content, pass a list of theme ARNs that the anonymous users need access to.</p> <p>Currently, you can pass up to 25 theme ARNs in each API call.</p>"
         },
         "ExperienceConfiguration":{
           "shape":"AnonymousUserEmbeddingExperienceConfiguration",
@@ -19110,7 +21254,7 @@
         },
         "AllowedDomains":{
           "shape":"StringList",
-          "documentation":"<p>The domains that you want to add to the allow list for access to the generated URL that is then embedded. This optional parameter overrides the static domains that are configured in the Manage QuickSight menu in the Amazon QuickSight console. Instead, it allows only the domains that you include in this parameter. You can list up to three domains or subdomains in each API call.</p> <p>To include all subdomains under a specific domain to the allow list, use <code>*</code>. For example, <code>https://*.sapp.amazon.com</code> includes all subdomains under <code>https://sapp.amazon.com</code>.</p>"
+          "documentation":"<p>The domains that you want to add to the allow list for access to the generated URL that is then embedded. This optional parameter overrides the static domains that are configured in the Manage Quick Sight menu in the Amazon Quick Sight console. Instead, it allows only the domains that you include in this parameter. You can list up to three domains or subdomains in each API call.</p> <p>To include all subdomains under a specific domain to the allow list, use <code>*</code>. For example, <code>https://*.sapp.amazon.com</code> includes all subdomains under <code>https://sapp.amazon.com</code>.</p>"
         }
       }
     },
@@ -19138,7 +21282,7 @@
         },
         "AnonymousUserArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) to use for the anonymous Amazon QuickSight user.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) to use for the anonymous Amazon Quick Suite user.</p>"
         }
       }
     },
@@ -19166,11 +21310,11 @@
         },
         "ExperienceConfiguration":{
           "shape":"RegisteredUserEmbeddingExperienceConfiguration",
-          "documentation":"<p>The experience that you want to embed. For registered users, you can embed Amazon QuickSight dashboards, Amazon QuickSight visuals, the Amazon QuickSight Q search bar, the Amazon QuickSight Generative Q&amp;A experience, or the entire Amazon QuickSight console.</p>"
+          "documentation":"<p>The experience that you want to embed. For registered users, you can embed Quick Suite dashboards, Amazon Quick Sight visuals, the Amazon Quick Sight Q search bar, the Amazon Quick Sight Generative Q&amp;A experience, or the entire Amazon Quick Sight console.</p>"
         },
         "AllowedDomains":{
           "shape":"StringList",
-          "documentation":"<p>The domains that you want to add to the allow list for access to the generated URL that is then embedded. This optional parameter overrides the static domains that are configured in the Manage QuickSight menu in the Amazon QuickSight console. Instead, it allows only the domains that you include in this parameter. You can list up to three domains or subdomains in each API call.</p> <p>To include all subdomains under a specific domain to the allow list, use <code>*</code>. For example, <code>https://*.sapp.amazon.com</code> includes all subdomains under <code>https://sapp.amazon.com</code>.</p>"
+          "documentation":"<p>The domains that you want to add to the allow list for access to the generated URL that is then embedded. This optional parameter overrides the static domains that are configured in the Manage Quick Sight menu in the Amazon Quick Sight console. Instead, it allows only the domains that you include in this parameter. You can list up to three domains or subdomains in each API call.</p> <p>To include all subdomains under a specific domain to the allow list, use <code>*</code>. For example, <code>https://*.sapp.amazon.com</code> includes all subdomains under <code>https://sapp.amazon.com</code>.</p>"
         }
       }
     },
@@ -19184,7 +21328,7 @@
       "members":{
         "EmbedUrl":{
           "shape":"EmbeddingUrl",
-          "documentation":"<p>The embed URL for the Amazon QuickSight dashboard, visual, Q search bar, Generative Q&amp;A experience, or console.</p>"
+          "documentation":"<p>The embed URL for the Amazon Quick Sight dashboard, visual, Q search bar, Generative Q&amp;A experience, or console.</p>"
         },
         "Status":{
           "shape":"StatusCode",
@@ -19290,6 +21434,17 @@
         "ANSWER_DOWNGRADE"
       ]
     },
+    "GenerativeAuthoringConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The generative BI authoring settings of an embedded Quick Sight console.</p>"
+        }
+      },
+      "documentation":"<p>The generative BI authoring settings of an embedded Quick Sight console.</p>"
+    },
     "GeoSpatialColumnGroup":{
       "type":"structure",
       "required":[
@@ -19868,7 +22023,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A geospatial map or a points on map visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/point-maps.html\">Creating point maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A geospatial map or a points on map visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/point-maps.html\">Creating point maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "GeospatialNullDataSettings":{
       "type":"structure",
@@ -20079,25 +22234,25 @@
         },
         "StatePersistenceEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Adds persistence of state for the user session in an embedded dashboard. Persistence applies to the sheet and the parameter settings. These are control settings that the dashboard subscriber (Amazon QuickSight reader) chooses while viewing the dashboard. If this is set to <code>TRUE</code>, the settings are the same when the subscriber reopens the same dashboard URL. The state is stored in Amazon QuickSight, not in a browser cookie. If this is set to FALSE, the state of the user session is not persisted. The default is <code>FALSE</code>.</p>",
+          "documentation":"<p>Adds persistence of state for the user session in an embedded dashboard. Persistence applies to the sheet and the parameter settings. These are control settings that the dashboard subscriber (Amazon Quick Sight reader) chooses while viewing the dashboard. If this is set to <code>TRUE</code>, the settings are the same when the subscriber reopens the same dashboard URL. The state is stored in Amazon Quick Sight, not in a browser cookie. If this is set to FALSE, the state of the user session is not persisted. The default is <code>FALSE</code>.</p>",
           "location":"querystring",
           "locationName":"state-persistence-enabled"
         },
         "UserArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon QuickSight user's Amazon Resource Name (ARN), for use with <code>QUICKSIGHT</code> identity type. You can use this for any Amazon QuickSight users in your account (readers, authors, or admins) authenticated as one of the following:</p> <ul> <li> <p>Active Directory (AD) users or group members</p> </li> <li> <p>Invited nonfederated users</p> </li> <li> <p>IAM users and IAM role-based sessions authenticated through Federated Single Sign-On using SAML, OpenID Connect, or IAM federation.</p> </li> </ul> <p>Omit this parameter for users in the third group – IAM users and IAM role-based sessions.</p>",
+          "documentation":"<p>The Amazon Quick Suite user's Amazon Resource Name (ARN), for use with <code>QUICKSIGHT</code> identity type. You can use this for any Amazon Quick Suite users in your account (readers, authors, or admins) authenticated as one of the following:</p> <ul> <li> <p>Active Directory (AD) users or group members</p> </li> <li> <p>Invited nonfederated users</p> </li> <li> <p>IAM users and IAM role-based sessions authenticated through Federated Single Sign-On using SAML, OpenID Connect, or IAM federation.</p> </li> </ul> <p>Omit this parameter for users in the third group – IAM users and IAM role-based sessions.</p>",
           "location":"querystring",
           "locationName":"user-arn"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that contains the dashboard IDs in this request. If you're not using a custom namespace, set <code>Namespace = default</code>.</p>",
+          "documentation":"<p>The Amazon Quick Sight namespace that contains the dashboard IDs in this request. If you're not using a custom namespace, set <code>Namespace = default</code>.</p>",
           "location":"querystring",
           "locationName":"namespace"
         },
         "AdditionalDashboardIds":{
           "shape":"AdditionalDashboardIdList",
-          "documentation":"<p>A list of one or more dashboard IDs that you want anonymous users to have tempporary access to. Currently, the <code>IdentityType</code> parameter must be set to <code>ANONYMOUS</code> because other identity types authenticate as Amazon QuickSight or IAM users. For example, if you set \"<code>--dashboard-id dash_id1 --dashboard-id dash_id2 dash_id3 identity-type ANONYMOUS</code>\", the session can access all three dashboards.</p>",
+          "documentation":"<p>A list of one or more dashboard IDs that you want anonymous users to have tempporary access to. Currently, the <code>IdentityType</code> parameter must be set to <code>ANONYMOUS</code> because other identity types authenticate as Quick Suite or IAM users. For example, if you set \"<code>--dashboard-id dash_id1 --dashboard-id dash_id2 dash_id3 identity-type ANONYMOUS</code>\", the session can access all three dashboards.</p>",
           "location":"querystring",
           "locationName":"additional-dashboard-ids"
         }
@@ -20122,19 +22277,148 @@
       },
       "documentation":"<p>Output returned from the <code>GetDashboardEmbedUrl</code> operation.</p>"
     },
+    "GetFlowMetadataInput":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "FlowId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the flow that you are getting metadata for.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow.</p>",
+          "location":"uri",
+          "locationName":"FlowId"
+        }
+      }
+    },
+    "GetFlowMetadataOutput":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "FlowId",
+        "Name",
+        "CreatedTime"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow.</p>"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow.</p>"
+        },
+        "Name":{
+          "shape":"Title",
+          "documentation":"<p>A display name for the flow.</p>"
+        },
+        "Description":{
+          "shape":"FlowDescription",
+          "documentation":"<p>The description for the flow.</p>"
+        },
+        "PublishState":{
+          "shape":"FlowPublishState",
+          "documentation":"<p>The publish state for the flow. Valid values are <code>DRAFT</code>, <code>PUBLISHED</code>, or <code>PENDING_APPROVAL</code>.</p>"
+        },
+        "UserCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of users who have used the flow.</p>"
+        },
+        "RunCount":{
+          "shape":"Integer",
+          "documentation":"<p>The number of runs done for the flow.</p>"
+        },
+        "CreatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time this flow was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last time this flow was modified.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
+    "GetFlowPermissionsInput":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "FlowId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the flow that you are getting permissions for.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow to get permissions from.</p>",
+          "location":"uri",
+          "locationName":"FlowId"
+        }
+      }
+    },
+    "GetFlowPermissionsOutput":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "FlowId",
+        "Permissions"
+      ],
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow you are getting permissions against.</p>"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow with permissions.</p>"
+        },
+        "Permissions":{
+          "shape":"PermissionsList",
+          "documentation":"<p>A structure that contains the permissions for the flow.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "GetSessionEmbedUrlRequest":{
       "type":"structure",
       "required":["AwsAccountId"],
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account associated with your Amazon QuickSight subscription.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account associated with your Amazon Quick Sight subscription.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "EntryPoint":{
           "shape":"EntryPoint",
-          "documentation":"<p>The URL you use to access the embedded session. The entry point URL is constrained to the following paths:</p> <ul> <li> <p> <code>/start</code> </p> </li> <li> <p> <code>/start/analyses</code> </p> </li> <li> <p> <code>/start/dashboards</code> </p> </li> <li> <p> <code>/start/favorites</code> </p> </li> <li> <p> <code>/dashboards/<i>DashboardId</i> </code> - where <code>DashboardId</code> is the actual ID key from the Amazon QuickSight console URL of the dashboard</p> </li> <li> <p> <code>/analyses/<i>AnalysisId</i> </code> - where <code>AnalysisId</code> is the actual ID key from the Amazon QuickSight console URL of the analysis</p> </li> </ul>",
+          "documentation":"<p>The URL you use to access the embedded session. The entry point URL is constrained to the following paths:</p> <ul> <li> <p> <code>/start</code> </p> </li> <li> <p> <code>/start/analyses</code> </p> </li> <li> <p> <code>/start/dashboards</code> </p> </li> <li> <p> <code>/start/favorites</code> </p> </li> <li> <p> <code>/dashboards/<i>DashboardId</i> </code> - where <code>DashboardId</code> is the actual ID key from the Amazon Quick Sight console URL of the dashboard</p> </li> <li> <p> <code>/analyses/<i>AnalysisId</i> </code> - where <code>AnalysisId</code> is the actual ID key from the Amazon Quick Sight console URL of the analysis</p> </li> </ul>",
           "location":"querystring",
           "locationName":"entry-point"
         },
@@ -20146,7 +22430,7 @@
         },
         "UserArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon QuickSight user's Amazon Resource Name (ARN), for use with <code>QUICKSIGHT</code> identity type. You can use this for any type of Amazon QuickSight users in your account (readers, authors, or admins). They need to be authenticated as one of the following:</p> <ol> <li> <p>Active Directory (AD) users or group members</p> </li> <li> <p>Invited nonfederated users</p> </li> <li> <p>IAM users and IAM role-based sessions authenticated through Federated Single Sign-On using SAML, OpenID Connect, or IAM federation</p> </li> </ol> <p>Omit this parameter for users in the third group, IAM users and IAM role-based sessions.</p>",
+          "documentation":"<p>The Amazon Quick Suite user's Amazon Resource Name (ARN), for use with <code>QUICKSIGHT</code> identity type. You can use this for any type of Amazon Quick Suite users in your account (readers, authors, or admins). They need to be authenticated as one of the following:</p> <ol> <li> <p>Active Directory (AD) users or group members</p> </li> <li> <p>Invited nonfederated users</p> </li> <li> <p>IAM users and IAM role-based sessions authenticated through Federated Single Sign-On using SAML, OpenID Connect, or IAM federation</p> </li> </ol> <p>Omit this parameter for users in the third group, IAM users and IAM role-based sessions.</p>",
           "location":"querystring",
           "locationName":"user-arn"
         }
@@ -20157,7 +22441,7 @@
       "members":{
         "EmbedUrl":{
           "shape":"EmbeddingUrl",
-          "documentation":"<p>A single-use URL that you can put into your server-side web page to embed your Amazon QuickSight session. This URL is valid for 5 minutes. The API operation provides the URL with an <code>auth_code</code> value that enables one (and only one) sign-on to a user session that is valid for 10 hours. </p>"
+          "documentation":"<p>A single-use URL that you can put into your server-side web page to embed your Quick Suite session. This URL is valid for 5 minutes. The API operation provides the URL with an <code>auth_code</code> value that enables one (and only one) sign-on to a user session that is valid for 10 hours. </p>"
         },
         "Status":{
           "shape":"StatusCode",
@@ -20308,7 +22592,7 @@
       "members":{
         "ResizeOption":{
           "shape":"ResizeOption",
-          "documentation":"<p>This value determines the layout behavior when the viewport is resized.</p> <ul> <li> <p> <code>FIXED</code>: A fixed width will be used when optimizing the layout. In the Amazon QuickSight console, this option is called <code>Classic</code>.</p> </li> <li> <p> <code>RESPONSIVE</code>: The width of the canvas will be responsive and optimized to the view port. In the Amazon QuickSight console, this option is called <code>Tiled</code>.</p> </li> </ul>"
+          "documentation":"<p>This value determines the layout behavior when the viewport is resized.</p> <ul> <li> <p> <code>FIXED</code>: A fixed width will be used when optimizing the layout. In the Quick Sight console, this option is called <code>Classic</code>.</p> </li> <li> <p> <code>RESPONSIVE</code>: The width of the canvas will be responsive and optimized to the view port. In the Quick Sight console, this option is called <code>Tiled</code>.</p> </li> </ul>"
         },
         "OptimizedViewPortWidth":{
           "shape":"PixelLength",
@@ -20338,7 +22622,13 @@
           "documentation":"<p>The principal ID of the group.</p>"
         }
       },
-      "documentation":"<p>A <i>group</i> in Amazon QuickSight consists of a set of users. You can use groups to make it easier to manage access and security. </p>"
+      "documentation":"<p>A <i>group</i> in Quick Sight consists of a set of users. You can use groups to make it easier to manage access and security. </p>"
+    },
+    "GroupByColumnNameList":{
+      "type":"list",
+      "member":{"shape":"ColumnName"},
+      "max":128,
+      "min":0
     },
     "GroupDescription":{
       "type":"string",
@@ -20369,7 +22659,7 @@
           "documentation":"<p>The name of the group member (user).</p>"
         }
       },
-      "documentation":"<p>A member of an Amazon QuickSight group. Currently, group members must be users. Groups can't be members of another group. .</p>"
+      "documentation":"<p>A member of an Quick Sight group. Currently, group members must be users. Groups can't be members of another group. .</p>"
     },
     "GroupMemberList":{
       "type":"list",
@@ -20518,10 +22808,18 @@
           "shape":"HeatMapSortConfiguration",
           "documentation":"<p>The sort configuration of a heat map.</p>"
         },
+        "RowAxisDisplayOptions":{
+          "shape":"AxisDisplayOptions",
+          "documentation":"<p>The options that determine the presentation of the row axis label.</p>"
+        },
         "RowLabelOptions":{
           "shape":"ChartAxisLabelOptions",
           "documentation":"<p>The label options of the row that is displayed in a <code>heat map</code>.</p>"
         },
+        "ColumnAxisDisplayOptions":{
+          "shape":"AxisDisplayOptions",
+          "documentation":"<p>The options that determine the presentation of the row axis label.</p>"
+        },
         "ColumnLabelOptions":{
           "shape":"ChartAxisLabelOptions",
           "documentation":"<p>The label options of the column that is displayed in a heat map.</p>"
@@ -20624,7 +22922,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A heat map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/heat-map.html\">Using heat maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A heat map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/heat-map.html\">Using heat maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "HexColor":{
       "type":"string",
@@ -20765,7 +23063,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A histogram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/histogram-charts.html\">Using histograms</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A histogram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/histogram-charts.html\">Using histograms</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "HorizontalTextAlignment":{
       "type":"string",
@@ -20781,6 +23079,17 @@
       "max":256,
       "min":1
     },
+    "IAMConnectionMetadata":{
+      "type":"structure",
+      "required":["RoleArn"],
+      "members":{
+        "RoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assume for authentication with Amazon Web Services services. This IAM role should be in the same account as Quick Sight.</p>"
+        }
+      },
+      "documentation":"<p>Authentication metadata for IAM-based connections, used for first-party Amazon Web Services service integrations.</p>"
+    },
     "IAMPolicyAssignment":{
       "type":"structure",
       "members":{
@@ -21105,6 +23414,66 @@
       },
       "documentation":"<p>A static file that contains an image.</p>"
     },
+    "ImpalaParameters":{
+      "type":"structure",
+      "required":[
+        "Host",
+        "Port",
+        "SqlEndpointPath"
+      ],
+      "members":{
+        "Host":{
+          "shape":"Host",
+          "documentation":"<p>The host name of the Impala data source.</p>"
+        },
+        "Port":{
+          "shape":"Port",
+          "documentation":"<p>The port of the Impala data source.</p>"
+        },
+        "Database":{
+          "shape":"Database",
+          "documentation":"<p>The database of the Impala data source.</p>"
+        },
+        "SqlEndpointPath":{
+          "shape":"SqlEndpointPath",
+          "documentation":"<p>The HTTP path of the Impala data source.</p>"
+        }
+      },
+      "documentation":"<p>The parameters that are required to connect to a Impala data source.</p>"
+    },
+    "ImportTableOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"ImportTableOperationSource",
+          "documentation":"<p>The source configuration that specifies which source table to import and any column mappings.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that imports data from a source table.</p>"
+    },
+    "ImportTableOperationSource":{
+      "type":"structure",
+      "required":["SourceTableId"],
+      "members":{
+        "SourceTableId":{
+          "shape":"DataSetEntityResourceId",
+          "documentation":"<p>The identifier of the source table to import data from.</p>"
+        },
+        "ColumnIdMappings":{
+          "shape":"DataSetColumnIdMappingList",
+          "documentation":"<p>The mappings between source column identifiers and target column identifiers during the import.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the source table and column mappings for an import table operation.</p>"
+    },
     "IncludeFolderMembers":{
       "type":"string",
       "enum":[
@@ -21311,6 +23680,10 @@
           "shape":"ColumnName",
           "documentation":"<p>The name of this column in the underlying data source.</p>"
         },
+        "Id":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the input column.</p>"
+        },
         "Type":{
           "shape":"InputColumnDataType",
           "documentation":"<p>The data type of the column.</p>"
@@ -21338,7 +23711,7 @@
       "type":"list",
       "member":{"shape":"InputColumn"},
       "max":2048,
-      "min":1
+      "min":0
     },
     "InsightConfiguration":{
       "type":"structure",
@@ -21394,7 +23767,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>An insight visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/computational-insights.html\">Working with insights</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>An insight visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/computational-insights.html\">Working with insights</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "InstanceId":{
       "type":"string",
@@ -21558,6 +23931,19 @@
       "exception":true,
       "fault":true
     },
+    "InvalidDataSetParameterValueException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"},
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this request.</p>"
+        }
+      },
+      "documentation":"<p>An exception thrown when an invalid parameter value is provided for dataset operations.</p>",
+      "error":{"httpStatusCode":400},
+      "exception":true
+    },
     "InvalidNextTokenException":{
       "type":"structure",
       "members":{
@@ -21692,12 +24078,79 @@
       "members":{
         "UniqueKey":{
           "shape":"Boolean",
-          "documentation":"<p>A value that indicates that a row in a table is uniquely identified by the columns in a join key. This is used by Amazon QuickSight to optimize query performance.</p>",
+          "documentation":"<p>A value that indicates that a row in a table is uniquely identified by the columns in a join key. This is used by Quick Sight to optimize query performance.</p>",
           "box":true
         }
       },
       "documentation":"<p>Properties associated with the columns participating in a join.</p>"
     },
+    "JoinOperandProperties":{
+      "type":"structure",
+      "required":["OutputColumnNameOverrides"],
+      "members":{
+        "OutputColumnNameOverrides":{
+          "shape":"OutputColumnNameOverrideList",
+          "documentation":"<p>A list of column name overrides to apply to the join operand's output columns.</p>"
+        }
+      },
+      "documentation":"<p>Properties that control how columns are handled for a join operand, including column name overrides.</p>"
+    },
+    "JoinOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "LeftOperand",
+        "RightOperand",
+        "Type",
+        "OnClause"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "LeftOperand":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The left operand for the join operation.</p>"
+        },
+        "RightOperand":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The right operand for the join operation.</p>"
+        },
+        "Type":{
+          "shape":"JoinOperationType",
+          "documentation":"<p>The type of join to perform, such as <code>INNER</code>, <code>LEFT</code>, <code>RIGHT</code>, or <code>OUTER</code>.</p>"
+        },
+        "OnClause":{
+          "shape":"JoinOperationOnClause",
+          "documentation":"<p>The join condition that specifies how to match rows between the left and right operands.</p>"
+        },
+        "LeftOperandProperties":{
+          "shape":"JoinOperandProperties",
+          "documentation":"<p>Properties that control how the left operand's columns are handled in the join result.</p>"
+        },
+        "RightOperandProperties":{
+          "shape":"JoinOperandProperties",
+          "documentation":"<p>Properties that control how the right operand's columns are handled in the join result.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that combines data from two sources based on specified join conditions.</p>"
+    },
+    "JoinOperationOnClause":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "sensitive":true
+    },
+    "JoinOperationType":{
+      "type":"string",
+      "enum":[
+        "INNER",
+        "OUTER",
+        "LEFT",
+        "RIGHT"
+      ]
+    },
     "JoinType":{
       "type":"string",
       "enum":[
@@ -21955,7 +24408,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A key performance indicator (KPI).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/kpi.html\">Using KPIs</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A key performance indicator (KPI).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/kpi.html\">Using KPIs</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "KPIVisualLayoutOptions":{
       "type":"structure",
@@ -22114,7 +24567,7 @@
           "documentation":"<p>The configuration that determines what the type of layout for a sheet.</p>"
         }
       },
-      "documentation":"<p>A <code>Layout</code> defines the placement of elements within a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/types-of-layout.html\">Types of layout</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
+      "documentation":"<p>A <code>Layout</code> defines the placement of elements within a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/types-of-layout.html\">Types of layout</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
     },
     "LayoutConfiguration":{
       "type":"structure",
@@ -22491,7 +24944,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A line chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/line-charts.html\">Using line charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A line chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/line-charts.html\">Using line charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "LineInterpolation":{
       "type":"string",
@@ -22536,6 +24989,53 @@
       },
       "documentation":"<p>A structure that contains the configuration of a shareable link to the dashboard.</p>"
     },
+    "ListActionConnectorsRequest":{
+      "type":"structure",
+      "required":["AwsAccountId"],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID for which to list action connectors.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of action connectors to return in a single response. Valid range is 1 to 100.</p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token to retrieve the next set of results. Use the token returned from a previous call to continue listing action connectors.</p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        }
+      }
+    },
+    "ListActionConnectorsResponse":{
+      "type":"structure",
+      "required":["ActionConnectorSummaries"],
+      "members":{
+        "ActionConnectorSummaries":{
+          "shape":"ActionConnectorSummaryList",
+          "documentation":"<p>A list of action connector summaries containing basic information about each connector.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token to retrieve the next set of results. If null, there are no more results to retrieve.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "ListAnalysesRequest":{
       "type":"structure",
       "required":["AwsAccountId"],
@@ -23001,6 +25501,52 @@
         }
       }
     },
+    "ListFlowsInput":{
+      "type":"structure",
+      "required":["AwsAccountId"],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the flow list that you are getting.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to request the next set of results, or null if you want to retrieve the first set.</p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        },
+        "MaxResults":{
+          "shape":"FlowMaxResults",
+          "documentation":"<p>The maximum number of results to be returned per request.</p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        }
+      }
+    },
+    "ListFlowsOutput":{
+      "type":"structure",
+      "members":{
+        "FlowSummaryList":{
+          "shape":"FlowSummaryList",
+          "documentation":"<p>A structure that contains all of the flows in your Amazon Web Services account. This structure provides basic information about the flows.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of results, or null if there are no more results.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "ListFolderMembersRequest":{
       "type":"structure",
       "required":[
@@ -23189,7 +25735,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -23232,7 +25778,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -23434,7 +25980,7 @@
       "members":{
         "Services":{
           "shape":"AuthorizedTargetsByServices",
-          "documentation":"<p>A list of services and their authorized targets that the Amazon QuickSight IAM Identity Center application can access.</p>"
+          "documentation":"<p>A list of services and their authorized targets that the Quick Sight IAM Identity Center application can access.</p>"
         },
         "NextToken":{
           "shape":"String",
@@ -23518,7 +26064,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that contains the Amazon QuickSight namespaces that you want to list.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that contains the Quick Sight namespaces that you want to list.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -23627,7 +26173,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -23987,7 +26533,7 @@
         },
         "Type":{
           "shape":"ThemeType",
-          "documentation":"<p>The type of themes that you want to list. Valid options include the following:</p> <ul> <li> <p> <code>ALL (default)</code>- Display all existing themes.</p> </li> <li> <p> <code>CUSTOM</code> - Display only the themes created by people using Amazon QuickSight.</p> </li> <li> <p> <code>QUICKSIGHT</code> - Display only the starting themes defined by Amazon QuickSight.</p> </li> </ul>",
+          "documentation":"<p>The type of themes that you want to list. Valid options include the following:</p> <ul> <li> <p> <code>ALL (default)</code>- Display all existing themes.</p> </li> <li> <p> <code>CUSTOM</code> - Display only the themes created by people using Amazon Quick Sight.</p> </li> <li> <p> <code>QUICKSIGHT</code> - Display only the starting themes defined by Quick Sight.</p> </li> </ul>",
           "location":"querystring",
           "locationName":"type"
         }
@@ -24166,13 +26712,13 @@
       "members":{
         "UserName":{
           "shape":"UserName",
-          "documentation":"<p>The Amazon QuickSight user name that you want to list group memberships for.</p>",
+          "documentation":"<p>The Amazon Quick Sight user name that you want to list group memberships for.</p>",
           "location":"uri",
           "locationName":"UserName"
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The Amazon Web Services account ID that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The Amazon Web Services account ID that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -24228,7 +26774,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -24721,6 +27267,11 @@
         "TOPIC"
       ]
     },
+    "MetadataFilesLocation":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "MetricComparisonComputation":{
       "type":"structure",
       "required":["ComputationId"],
@@ -24906,7 +27457,8 @@
         "NUMERIC_EQUALITY_FILTER",
         "NUMERIC_RANGE_FILTER",
         "DATE_RANGE_FILTER",
-        "RELATIVE_DATE_FILTER"
+        "RELATIVE_DATE_FILTER",
+        "NULL_FILTER"
       ]
     },
     "Namespace":{
@@ -25146,6 +27698,17 @@
       "member":{"shape":"ShortRestrictiveResourceId"},
       "max":20
     },
+    "NoneConnectionMetadata":{
+      "type":"structure",
+      "required":["BaseEndpoint"],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for connections that do not require authentication.</p>"
+        }
+      },
+      "documentation":"<p>Authentication metadata for connections that do not require authentication credentials.</p>"
+    },
     "NullFilterOption":{
       "type":"string",
       "enum":[
@@ -25154,6 +27717,14 @@
         "NULLS_ONLY"
       ]
     },
+    "NullFilterType":{
+      "type":"string",
+      "enum":[
+        "ALL_VALUES",
+        "NON_NULLS_ONLY",
+        "NULLS_ONLY"
+      ]
+    },
     "NullString":{
       "type":"string",
       "max":128,
@@ -25561,6 +28132,10 @@
         "Database":{
           "shape":"Database",
           "documentation":"<p>The database.</p>"
+        },
+        "UseServiceName":{
+          "shape":"Boolean",
+          "documentation":"<p>A Boolean value that indicates whether the <code>Database</code> uses a service name or an SID. If this value is left blank, the default value is <code>SID</code>. If this value is set to <code>false</code>, the value is <code>SID</code>.</p>"
         }
       },
       "documentation":"<p>The parameters for Oracle.</p>"
@@ -25579,6 +28154,10 @@
           "shape":"ColumnName",
           "documentation":"<p>The display name of the column..</p>"
         },
+        "Id":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the output column.</p>"
+        },
         "Description":{
           "shape":"ColumnDescriptiveText",
           "documentation":"<p>A description for a column.</p>"
@@ -25598,6 +28177,27 @@
       "type":"list",
       "member":{"shape":"OutputColumn"}
     },
+    "OutputColumnNameOverride":{
+      "type":"structure",
+      "required":["OutputColumnName"],
+      "members":{
+        "SourceColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The original name of the column from the source transform operation.</p>"
+        },
+        "OutputColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The new name to assign to the column in the output.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a mapping to override the name of an output column from a transform operation.</p>"
+    },
+    "OutputColumnNameOverrideList":{
+      "type":"list",
+      "member":{"shape":"OutputColumnNameOverride"},
+      "max":2048,
+      "min":1
+    },
     "OverrideDatasetParameterOperation":{
       "type":"structure",
       "required":["ParameterName"],
@@ -25824,7 +28424,7 @@
           "documentation":"<p>A parameter declaration for the <code>DateTime</code> data type.</p>"
         }
       },
-      "documentation":"<p>The declaration definition of a parameter.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
+      "documentation":"<p>The declaration definition of a parameter.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
     },
     "ParameterDeclarationList":{
       "type":"list",
@@ -26065,7 +28665,25 @@
           "documentation":"<p>The parameters that have a data type of date-time.</p>"
         }
       },
-      "documentation":"<p>A list of Amazon QuickSight parameters and the list's override values.</p>"
+      "documentation":"<p>A list of Quick Sight parameters and the list's override values.</p>"
+    },
+    "ParentDataSet":{
+      "type":"structure",
+      "required":[
+        "DataSetArn",
+        "InputColumns"
+      ],
+      "members":{
+        "DataSetArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the parent dataset.</p>"
+        },
+        "InputColumns":{
+          "shape":"InputColumnList",
+          "documentation":"<p>The list of input columns available from the parent dataset.</p>"
+        }
+      },
+      "documentation":"<p>References a parent dataset that serves as a data source, including its columns and metadata.</p>"
     },
     "Password":{
       "type":"string",
@@ -26214,6 +28832,33 @@
       "max":1000,
       "min":1
     },
+    "Permission":{
+      "type":"structure",
+      "required":[
+        "Actions",
+        "Principal"
+      ],
+      "members":{
+        "Actions":{
+          "shape":"ActionsList",
+          "documentation":"<p>A list of actions that the principal can perform against the flow.</p> <p>The following are the list of values to set a principal as a flow owner:</p> <ul> <li> <p>quicksight:PublishFlow</p> </li> <li> <p>quicksight:GetFlow</p> </li> <li> <p>quicksight:UpdateFlowPermissions</p> </li> <li> <p>quicksight:GetFlowSession</p> </li> <li> <p>quicksight:StartFlowSession</p> </li> <li> <p>quicksight:StopFlowSession</p> </li> <li> <p>quicksight:UpdateFlowSession</p> </li> <li> <p>quicksight:UnpublishFlow</p> </li> <li> <p>quicksight:GetFlowStages</p> </li> <li> <p>quicksight:DeleteFlow</p> </li> <li> <p>quicksight:DescribeFlowPermissions</p> </li> <li> <p>quicksight:UpdateFlow</p> </li> <li> <p>quicksight:CreatePresignedUrl</p> </li> </ul> <p>The following are the list of values to set a principal as a flow viewer:</p> <ul> <li> <p>quicksight:GetFlow</p> </li> <li> <p>quicksight:UpdateFlowSession</p> </li> <li> <p>quicksight:StartFlowSession</p> </li> <li> <p>quicksight:StopFlowSession</p> </li> <li> <p>quicksight:GetFlowSession</p> </li> <li> <p>quicksight:CreatePresignedUrl</p> </li> <li> <p>quicksight:GetFlowStages</p> </li> </ul>"
+        },
+        "Principal":{
+          "shape":"PermissionPrincipalString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the principal. This can be an Amazon Quick Suite user, group or namespace associated with the flow. Namespace principal can only be set as a viewer and will grant everyone in the same namespace viewer permissions.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains the permission information for one principal against one flow.</p>"
+    },
+    "PermissionPrincipalString":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "PermissionsList":{
+      "type":"list",
+      "member":{"shape":"Permission"}
+    },
     "PersonalizationMode":{
       "type":"string",
       "enum":[
@@ -26235,6 +28880,10 @@
         "S3Source":{
           "shape":"S3Source",
           "documentation":"<p>A physical table type for as S3 data source.</p>"
+        },
+        "SaaSTable":{
+          "shape":"SaaSTable",
+          "documentation":"<p>A physical table type for Software-as-a-Service (SaaS) sources.</p>"
         }
       },
       "documentation":"<p>A view of a data source that contains information about the shape of the data in the underlying source. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
@@ -26389,7 +29038,22 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A pie or donut chart.</p> <p>The <code>PieChartVisual</code> structure describes a visual that is a member of the pie chart family.</p> <p>The following charts can be described by using this structure:</p> <ul> <li> <p>Pie charts</p> </li> <li> <p>Donut charts</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pie-chart.html\">Using pie charts</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/donut-chart.html\">Using donut charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A pie or donut chart.</p> <p>The <code>PieChartVisual</code> structure describes a visual that is a member of the pie chart family.</p> <p>The following charts can be described by using this structure:</p> <ul> <li> <p>Pie charts</p> </li> <li> <p>Donut charts</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pie-chart.html\">Using pie charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/donut-chart.html\">Using donut charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
+    },
+    "PivotConfiguration":{
+      "type":"structure",
+      "required":["PivotedLabels"],
+      "members":{
+        "LabelColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name of the column that contains the labels to be pivoted into separate columns.</p>"
+        },
+        "PivotedLabels":{
+          "shape":"PivotedLabelList",
+          "documentation":"<p>The list of specific label values to pivot into separate columns.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for a pivot operation, specifying which column contains labels and how to pivot them.</p>"
     },
     "PivotFieldSortOptions":{
       "type":"structure",
@@ -26414,11 +29078,49 @@
       "member":{"shape":"PivotFieldSortOptions"},
       "max":200
     },
+    "PivotGroupByColumnNameList":{
+      "type":"list",
+      "member":{"shape":"ColumnName"},
+      "max":128,
+      "min":0
+    },
     "PivotMeasureFieldList":{
       "type":"list",
       "member":{"shape":"MeasureField"},
       "max":40
     },
+    "PivotOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "ValueColumnConfiguration",
+        "PivotConfiguration"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for pivoting.</p>"
+        },
+        "GroupByColumnNames":{
+          "shape":"PivotGroupByColumnNameList",
+          "documentation":"<p>The list of column names to group by when performing the pivot operation.</p>"
+        },
+        "ValueColumnConfiguration":{
+          "shape":"ValueColumnConfiguration",
+          "documentation":"<p>Configuration for how to aggregate values when multiple rows map to the same pivoted column.</p>"
+        },
+        "PivotConfiguration":{
+          "shape":"PivotConfiguration",
+          "documentation":"<p>Configuration that specifies which labels to pivot and how to structure the resulting columns.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that pivots data by converting row values into columns.</p>"
+    },
     "PivotTableAggregatedFieldWells":{
       "type":"structure",
       "members":{
@@ -26879,7 +29581,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A pivot table.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pivot-table.html\">Using pivot tables</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A pivot table.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pivot-table.html\">Using pivot tables</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "PivotTotalOptions":{
       "type":"structure",
@@ -26919,6 +29621,35 @@
       },
       "documentation":"<p>The optional configuration of totals cells in a <code>PivotTableVisual</code>.</p>"
     },
+    "PivotedLabel":{
+      "type":"structure",
+      "required":[
+        "LabelName",
+        "NewColumnName",
+        "NewColumnId"
+      ],
+      "members":{
+        "LabelName":{
+          "shape":"CellValue",
+          "documentation":"<p>The label value from the source data to be pivoted.</p>"
+        },
+        "NewColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name for the new column created from this pivoted label.</p>"
+        },
+        "NewColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the new column created from this pivoted label.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a label value to be pivoted into a separate column, including the new column name and identifier.</p>"
+    },
+    "PivotedLabelList":{
+      "type":"list",
+      "member":{"shape":"PivotedLabel"},
+      "max":100,
+      "min":0
+    },
     "PixelLength":{
       "type":"string",
       "documentation":"String based length that is composed of value and unit in px"
@@ -26944,12 +29675,16 @@
           "shape":"PluginVisualConfiguration",
           "documentation":"<p> A description of the plugin field wells and their persisted properties. </p>"
         },
+        "Actions":{
+          "shape":"VisualCustomActionList",
+          "documentation":"<p>The list of custom actions that are configured for a visual.</p>"
+        },
         "VisualContentAltText":{
           "shape":"LongPlainText",
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A flexible visualization type that allows engineers to create new custom charts in Amazon QuickSight.</p>"
+      "documentation":"<p>A flexible visualization type that allows engineers to create new custom charts in Quick Sight.</p>"
     },
     "PluginVisualAxisName":{
       "type":"string",
@@ -27268,18 +30003,26 @@
       "type":"structure",
       "required":["ProjectedColumns"],
       "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for column projection.</p>"
+        },
         "ProjectedColumns":{
-          "shape":"ProjectedColumnList",
+          "shape":"ProjectedColumnNameList",
           "documentation":"<p>Projected columns.</p>"
         }
       },
       "documentation":"<p>A transform operation that projects columns. Operations that come after a projection can only refer to projected columns.</p>"
     },
-    "ProjectedColumnList":{
+    "ProjectedColumnNameList":{
       "type":"list",
       "member":{"shape":"String"},
-      "max":2000,
-      "min":1
+      "max":2048,
+      "min":0
     },
     "PropertyRole":{
       "type":"string",
@@ -27380,6 +30123,45 @@
       "member":{"shape":"QAResult"}
     },
     "QAUrl":{"type":"string"},
+    "QBusinessInsightsStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "QBusinessParameters":{
+      "type":"structure",
+      "required":["ApplicationArn"],
+      "members":{
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Q Business application.</p>"
+        }
+      },
+      "documentation":"<p>The parameters that are required to connect to an Amazon Q Business data source.</p>"
+    },
+    "QDataKey":{
+      "type":"structure",
+      "members":{
+        "QDataKeyArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the KMS key that is registered to a Quick Sight account for encryption and decryption use as a <code>QDataKey</code>.</p>"
+        },
+        "QDataKeyType":{
+          "shape":"QDataKeyType",
+          "documentation":"<p>The type of <code>QDataKey</code>.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains information about the <code>QDataKey</code>.</p>"
+    },
+    "QDataKeyType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED",
+        "CMK"
+      ]
+    },
     "QSearchStatus":{
       "type":"string",
       "enum":[
@@ -27445,6 +30227,16 @@
       "error":{"httpStatusCode":404},
       "exception":true
     },
+    "QuickSuiteActionsOption":{
+      "type":"structure",
+      "members":{
+        "AvailabilityStatus":{
+          "shape":"DashboardBehavior",
+          "documentation":"<p>Availability status.</p>"
+        }
+      },
+      "documentation":"<p>Determines if Actions in Amazon Quick Suite are enabled in a dashboard..</p>"
+    },
     "RadarChartAggregatedFieldWells":{
       "type":"structure",
       "members":{
@@ -27697,6 +30489,236 @@
       },
       "documentation":"<p>The parameters for Amazon RDS.</p>"
     },
+    "ReadAPIKeyConnectionMetadata":{
+      "type":"structure",
+      "required":["BaseEndpoint"],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for API key authentication.</p>"
+        },
+        "Email":{
+          "shape":"Email",
+          "documentation":"<p>The email address associated with the API key authentication.</p>"
+        }
+      },
+      "documentation":"<p>Read-only authentication metadata for API key-based connections, containing non-sensitive configuration details.</p>"
+    },
+    "ReadAuthConfig":{
+      "type":"structure",
+      "required":[
+        "AuthenticationType",
+        "AuthenticationMetadata"
+      ],
+      "members":{
+        "AuthenticationType":{
+          "shape":"ConnectionAuthType",
+          "documentation":"<p>The type of authentication being used (BASIC, API_KEY, OAUTH2_CLIENT_CREDENTIALS, or OAUTH2_AUTHORIZATION_CODE).</p>"
+        },
+        "AuthenticationMetadata":{
+          "shape":"ReadAuthenticationMetadata",
+          "documentation":"<p>The authentication metadata containing configuration details specific to the authentication type.</p>"
+        }
+      },
+      "documentation":"<p>Read-only authentication configuration containing non-sensitive authentication details for action connectors.</p>"
+    },
+    "ReadAuthenticationMetadata":{
+      "type":"structure",
+      "members":{
+        "AuthorizationCodeGrantMetadata":{
+          "shape":"ReadAuthorizationCodeGrantMetadata",
+          "documentation":"<p>Read-only metadata for OAuth2 authorization code grant flow configuration.</p>"
+        },
+        "ClientCredentialsGrantMetadata":{
+          "shape":"ReadClientCredentialsGrantMetadata",
+          "documentation":"<p>Read-only metadata for OAuth2 client credentials grant flow configuration.</p>"
+        },
+        "BasicAuthConnectionMetadata":{
+          "shape":"ReadBasicAuthConnectionMetadata",
+          "documentation":"<p>Read-only metadata for basic authentication configuration.</p>"
+        },
+        "ApiKeyConnectionMetadata":{
+          "shape":"ReadAPIKeyConnectionMetadata",
+          "documentation":"<p>Read-only metadata for API key authentication configuration.</p>"
+        },
+        "NoneConnectionMetadata":{
+          "shape":"ReadNoneConnectionMetadata",
+          "documentation":"<p>Read-only metadata for connections that do not require authentication.</p>"
+        },
+        "IamConnectionMetadata":{
+          "shape":"ReadIamConnectionMetadata",
+          "documentation":"<p>Read-only metadata for IAM-based authentication configuration.</p>"
+        }
+      },
+      "documentation":"<p>Read-only authentication metadata union containing non-sensitive configuration details for different authentication types.</p>",
+      "union":true
+    },
+    "ReadAuthorizationCodeGrantCredentialsDetails":{
+      "type":"structure",
+      "members":{
+        "ReadAuthorizationCodeGrantDetails":{
+          "shape":"ReadAuthorizationCodeGrantDetails",
+          "documentation":"<p>The read-only authorization code grant configuration details.</p>"
+        }
+      },
+      "documentation":"<p>Read-only credentials details for OAuth2 authorization code grant flow, containing non-sensitive configuration information.</p>",
+      "union":true
+    },
+    "ReadAuthorizationCodeGrantDetails":{
+      "type":"structure",
+      "required":[
+        "ClientId",
+        "TokenEndpoint",
+        "AuthorizationEndpoint"
+      ],
+      "members":{
+        "ClientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The client identifier for the OAuth2 authorization code grant flow.</p>"
+        },
+        "TokenEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The authorization server endpoint used to obtain access tokens via the authorization code grant flow.</p>"
+        },
+        "AuthorizationEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The authorization server endpoint used to obtain authorization codes from the resource owner.</p>"
+        }
+      },
+      "documentation":"<p>Read-only configuration details for OAuth2 authorization code grant flow, including endpoints and client information.</p>"
+    },
+    "ReadAuthorizationCodeGrantMetadata":{
+      "type":"structure",
+      "required":[
+        "BaseEndpoint",
+        "RedirectUrl"
+      ],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for the OAuth2 authorization code grant flow.</p>"
+        },
+        "RedirectUrl":{
+          "shape":"Endpoint",
+          "documentation":"<p>The redirect URL where the authorization server will send the user after authorization.</p>"
+        },
+        "ReadAuthorizationCodeGrantCredentialsDetails":{
+          "shape":"ReadAuthorizationCodeGrantCredentialsDetails",
+          "documentation":"<p>The read-only credentials details for the authorization code grant flow.</p>"
+        },
+        "AuthorizationCodeGrantCredentialsSource":{
+          "shape":"AuthorizationCodeGrantCredentialsSource",
+          "documentation":"<p>The source of credentials for the authorization code grant flow.</p>"
+        }
+      },
+      "documentation":"<p>Read-only metadata for OAuth2 authorization code grant authentication configuration.</p>"
+    },
+    "ReadBasicAuthConnectionMetadata":{
+      "type":"structure",
+      "required":[
+        "BaseEndpoint",
+        "Username"
+      ],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for basic authentication.</p>"
+        },
+        "Username":{
+          "shape":"ActionUserName",
+          "documentation":"<p>The username used for basic authentication.</p>"
+        }
+      },
+      "documentation":"<p>Read-only metadata for basic authentication connections, containing non-sensitive configuration details.</p>"
+    },
+    "ReadClientCredentialsDetails":{
+      "type":"structure",
+      "members":{
+        "ReadClientCredentialsGrantDetails":{
+          "shape":"ReadClientCredentialsGrantDetails",
+          "documentation":"<p>The read-only client credentials grant configuration details.</p>"
+        }
+      },
+      "documentation":"<p>Read-only details for OAuth2 client credentials, containing non-sensitive configuration information.</p>",
+      "union":true
+    },
+    "ReadClientCredentialsGrantDetails":{
+      "type":"structure",
+      "required":[
+        "ClientId",
+        "TokenEndpoint"
+      ],
+      "members":{
+        "ClientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The client identifier for the OAuth2 client credentials grant flow.</p>"
+        },
+        "TokenEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The authorization server endpoint used to obtain access tokens via the client credentials grant flow.</p>"
+        }
+      },
+      "documentation":"<p>Read-only configuration details for OAuth2 client credentials grant flow, including client ID and token endpoint.</p>"
+    },
+    "ReadClientCredentialsGrantMetadata":{
+      "type":"structure",
+      "required":["BaseEndpoint"],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for the OAuth2 client credentials grant flow.</p>"
+        },
+        "ReadClientCredentialsDetails":{
+          "shape":"ReadClientCredentialsDetails",
+          "documentation":"<p>The read-only client credentials configuration details.</p>"
+        },
+        "ClientCredentialsSource":{
+          "shape":"ClientCredentialsSource",
+          "documentation":"<p>The source of client credentials for the OAuth2 client credentials grant flow.</p>"
+        }
+      },
+      "documentation":"<p>Read-only metadata for OAuth2 client credentials grant authentication configuration.</p>"
+    },
+    "ReadIamConnectionMetadata":{
+      "type":"structure",
+      "required":[
+        "RoleArn",
+        "SourceArn"
+      ],
+      "members":{
+        "RoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role to assume for authentication.</p>"
+        },
+        "SourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the source resource for IAM authentication.</p>"
+        }
+      },
+      "documentation":"<p>Read-only metadata for IAM-based connections, containing role and source ARN information.</p>"
+    },
+    "ReadNoneConnectionMetadata":{
+      "type":"structure",
+      "required":["BaseEndpoint"],
+      "members":{
+        "BaseEndpoint":{
+          "shape":"Endpoint",
+          "documentation":"<p>The base endpoint URL for connections that do not require authentication.</p>"
+        }
+      },
+      "documentation":"<p>Read-only metadata for connections that do not require authentication credentials.</p>"
+    },
+    "RecentSnapshotsConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The recent snapshots configuration for an embedded Quick Sight dashboard.</p>"
+        }
+      },
+      "documentation":"<p>The recent snapshots configuration for an embedded Quick Sight dashboard.</p>"
+    },
     "RecoveryWindowInDays":{
       "type":"long",
       "max":30,
@@ -27708,22 +30730,22 @@
       "members":{
         "RoleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>Use the <code>RoleArn</code> structure to allow Amazon QuickSight to call <code>redshift:GetClusterCredentials</code> on your cluster. The calling principal must have <code>iam:PassRole</code> access to pass the role to Amazon QuickSight. The role's trust policy must allow the Amazon QuickSight service principal to assume the role.</p>"
+          "documentation":"<p>Use the <code>RoleArn</code> structure to allow Quick Sight to call <code>redshift:GetClusterCredentials</code> on your cluster. The calling principal must have <code>iam:PassRole</code> access to pass the role to Quick Sight. The role's trust policy must allow the Quick Sight service principal to assume the role.</p>"
         },
         "DatabaseUser":{
           "shape":"DatabaseUser",
-          "documentation":"<p>The user whose permissions and group memberships will be used by Amazon QuickSight to access the cluster. If this user already exists in your database, Amazon QuickSight is granted the same permissions that the user has. If the user doesn't exist, set the value of <code>AutoCreateDatabaseUser</code> to <code>True</code> to create a new user with PUBLIC permissions.</p>"
+          "documentation":"<p>The user whose permissions and group memberships will be used by Quick Sight to access the cluster. If this user already exists in your database, Amazon Quick Sight is granted the same permissions that the user has. If the user doesn't exist, set the value of <code>AutoCreateDatabaseUser</code> to <code>True</code> to create a new user with PUBLIC permissions.</p>"
         },
         "DatabaseGroups":{
           "shape":"DatabaseGroupList",
-          "documentation":"<p>A list of groups whose permissions will be granted to Amazon QuickSight to access the cluster. These permissions are combined with the permissions granted to Amazon QuickSight by the <code>DatabaseUser</code>. If you choose to include this parameter, the <code>RoleArn</code> must grant access to <code>redshift:JoinGroup</code>.</p>"
+          "documentation":"<p>A list of groups whose permissions will be granted to Quick Sight to access the cluster. These permissions are combined with the permissions granted to Quick Sight by the <code>DatabaseUser</code>. If you choose to include this parameter, the <code>RoleArn</code> must grant access to <code>redshift:JoinGroup</code>.</p>"
         },
         "AutoCreateDatabaseUser":{
           "shape":"Boolean",
-          "documentation":"<p>Automatically creates a database user. If your database doesn't have a <code>DatabaseUser</code>, set this parameter to <code>True</code>. If there is no <code>DatabaseUser</code>, Amazon QuickSight can't connect to your cluster. The <code>RoleArn</code> that you use for this operation must grant access to <code>redshift:CreateClusterUser</code> to successfully create the user.</p>"
+          "documentation":"<p>Automatically creates a database user. If your database doesn't have a <code>DatabaseUser</code>, set this parameter to <code>True</code>. If there is no <code>DatabaseUser</code>, Quick Sight can't connect to your cluster. The <code>RoleArn</code> that you use for this operation must grant access to <code>redshift:CreateClusterUser</code> to successfully create the user.</p>"
         }
       },
-      "documentation":"<p>A structure that grants Amazon QuickSight access to your cluster and make a call to the <code>redshift:GetClusterCredentials</code> API. For more information on the <code>redshift:GetClusterCredentials</code> API, see <a href=\"https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html\"> <code>GetClusterCredentials</code> </a>.</p>"
+      "documentation":"<p>A structure that grants Quick Sight access to your cluster and make a call to the <code>redshift:GetClusterCredentials</code> API. For more information on the <code>redshift:GetClusterCredentials</code> API, see <a href=\"https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html\"> <code>GetClusterCredentials</code> </a>.</p>"
     },
     "RedshiftParameters":{
       "type":"structure",
@@ -27747,11 +30769,11 @@
         },
         "IAMParameters":{
           "shape":"RedshiftIAMParameters",
-          "documentation":"<p>An optional parameter that uses IAM authentication to grant Amazon QuickSight access to your cluster. This parameter can be used instead of <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSourceCredentials.html\">DataSourceCredentials</a>.</p>"
+          "documentation":"<p>An optional parameter that uses IAM authentication to grant Quick Sight access to your cluster. This parameter can be used instead of <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DataSourceCredentials.html\">DataSourceCredentials</a>.</p>"
         },
         "IdentityCenterConfiguration":{
           "shape":"IdentityCenterConfiguration",
-          "documentation":"<p>An optional parameter that configures IAM Identity Center authentication to grant Amazon QuickSight access to your cluster.</p> <p>This parameter can only be specified if your Amazon QuickSight account is configured with IAM Identity Center.</p>"
+          "documentation":"<p>An optional parameter that configures IAM Identity Center authentication to grant Quick Sight access to your cluster.</p> <p>This parameter can only be specified if your Quick Sight account is configured with IAM Identity Center.</p>"
         }
       },
       "documentation":"<p>The parameters for Amazon Redshift. The <code>ClusterId</code> field can be blank if <code>Host</code> and <code>Port</code> are both set. The <code>Host</code> and <code>Port</code> fields can be blank if the <code>ClusterId</code> field is set.</p>"
@@ -27956,6 +30978,33 @@
       },
       "documentation":"<p>The refresh configuration of a dataset.</p>"
     },
+    "RefreshFailureAlertStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "RefreshFailureConfiguration":{
+      "type":"structure",
+      "members":{
+        "EmailAlert":{
+          "shape":"RefreshFailureEmailAlert",
+          "documentation":"<p>The email alert configuration for a dataset refresh failure.</p>"
+        }
+      },
+      "documentation":"<p>The failure configuration of a dataset.</p>"
+    },
+    "RefreshFailureEmailAlert":{
+      "type":"structure",
+      "members":{
+        "AlertStatus":{
+          "shape":"RefreshFailureAlertStatus",
+          "documentation":"<p>The status value that determines if email alerts are sent.</p>"
+        }
+      },
+      "documentation":"<p>The configuration settings for the email alerts that are sent when a dataset refresh fails.</p>"
+    },
     "RefreshFrequency":{
       "type":"structure",
       "required":["Interval"],
@@ -28012,7 +31061,7 @@
         },
         "RefreshType":{
           "shape":"IngestionType",
-          "documentation":"<p>The type of refresh that a datset undergoes. Valid values are as follows:</p> <ul> <li> <p> <code>FULL_REFRESH</code>: A complete refresh of a dataset.</p> </li> <li> <p> <code>INCREMENTAL_REFRESH</code>: A partial refresh of some rows of a dataset, based on the time window specified.</p> </li> </ul> <p>For more information on full and incremental refreshes, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/refreshing-imported-data.html\">Refreshing SPICE data</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The type of refresh that a datset undergoes. Valid values are as follows:</p> <ul> <li> <p> <code>FULL_REFRESH</code>: A complete refresh of a dataset.</p> </li> <li> <p> <code>INCREMENTAL_REFRESH</code>: A partial refresh of some rows of a dataset, based on the time window specified.</p> </li> </ul> <p>For more information on full and incremental refreshes, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/refreshing-imported-data.html\">Refreshing SPICE data</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "Arn":{
           "shape":"Arn",
@@ -28040,7 +31089,7 @@
       "members":{
         "IdentityType":{
           "shape":"IdentityType",
-          "documentation":"<p>The identity type that your Amazon QuickSight account uses to manage the identity of users.</p>"
+          "documentation":"<p>The identity type that your Quick Sight account uses to manage the identity of users.</p>"
         },
         "Email":{
           "shape":"String",
@@ -28048,19 +31097,19 @@
         },
         "UserRole":{
           "shape":"UserRole",
-          "documentation":"<p>The Amazon QuickSight role for the user. The user role can be one of the following:</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon QuickSight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Amazon QuickSight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Amazon QuickSight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> <li> <p> <code>RESTRICTED_READER</code>: This role isn't currently available for use.</p> </li> <li> <p> <code>RESTRICTED_AUTHOR</code>: This role isn't currently available for use.</p> </li> </ul>"
+          "documentation":"<p>The Amazon Quick Sight role for the user. The user role can be one of the following:</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon Quick Sight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Quick Sight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Amazon Quick Sight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> <li> <p> <code>RESTRICTED_READER</code>: This role isn't currently available for use.</p> </li> <li> <p> <code>RESTRICTED_AUTHOR</code>: This role isn't currently available for use.</p> </li> </ul>"
         },
         "IamArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the IAM user or role that you are registering with Amazon QuickSight. </p>"
+          "documentation":"<p>The ARN of the IAM user or role that you are registering with Amazon Quick Sight. </p>"
         },
         "SessionName":{
           "shape":"RoleSessionName",
-          "documentation":"<p>You need to use this parameter only when you register one or more users using an assumed IAM role. You don't need to provide the session name for other scenarios, for example when you are registering an IAM user or an Amazon QuickSight user. You can register multiple users using the same IAM role if each user has a different session name. For more information on assuming IAM roles, see <a href=\"https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html\"> <code>assume-role</code> </a> in the <i>CLI Reference.</i> </p>"
+          "documentation":"<p>You need to use this parameter only when you register one or more users using an assumed IAM role. You don't need to provide the session name for other scenarios, for example when you are registering an IAM user or an Amazon Quick Sight user. You can register multiple users using the same IAM role if each user has a different session name. For more information on assuming IAM roles, see <a href=\"https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html\"> <code>assume-role</code> </a> in the <i>CLI Reference.</i> </p>"
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -28072,19 +31121,19 @@
         },
         "UserName":{
           "shape":"UserName",
-          "documentation":"<p>The Amazon QuickSight user name that you want to create for the user you are registering.</p>"
+          "documentation":"<p>The Amazon Quick Sight user name that you want to create for the user you are registering.</p>"
         },
         "CustomPermissionsName":{
           "shape":"RoleName",
-          "documentation":"<p>(Enterprise edition only) The name of the custom permissions profile that you want to assign to this user. Customized permissions allows you to control a user's access by restricting access the following operations:</p> <ul> <li> <p>Create and update data sources</p> </li> <li> <p>Create and update datasets</p> </li> <li> <p>Create and update email reports</p> </li> <li> <p>Subscribe to email reports</p> </li> </ul> <p>To add custom permissions to an existing user, use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> instead.</p> <p>A set of custom permissions includes any combination of these restrictions. Currently, you need to create the profile names for custom permission sets by using the Amazon QuickSight console. Then, you use the <code>RegisterUser</code> API operation to assign the named set of permissions to a Amazon QuickSight user. </p> <p>Amazon QuickSight custom permissions are applied through IAM policies. Therefore, they override the permissions typically granted by assigning Amazon QuickSight users to one of the default security cohorts in Amazon QuickSight (admin, author, reader, admin pro, author pro, reader pro).</p> <p>This feature is available only to Amazon QuickSight Enterprise edition subscriptions.</p>"
+          "documentation":"<p>(Enterprise edition only) The name of the custom permissions profile that you want to assign to this user. Customized permissions allows you to control a user's access by restricting access the following operations:</p> <ul> <li> <p>Create and update data sources</p> </li> <li> <p>Create and update datasets</p> </li> <li> <p>Create and update email reports</p> </li> <li> <p>Subscribe to email reports</p> </li> </ul> <p>To add custom permissions to an existing user, use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> instead.</p> <p>A set of custom permissions includes any combination of these restrictions. Currently, you need to create the profile names for custom permission sets by using the Quick Sight console. Then, you use the <code>RegisterUser</code> API operation to assign the named set of permissions to a Quick Sight user. </p> <p>Quick Sight custom permissions are applied through IAM policies. Therefore, they override the permissions typically granted by assigning Quick Sight users to one of the default security cohorts in Quick Sight (admin, author, reader, admin pro, author pro, reader pro).</p> <p>This feature is available only to Quick Sight Enterprise edition subscriptions.</p>"
         },
         "ExternalLoginFederationProviderType":{
           "shape":"String",
-          "documentation":"<p>The type of supported external login provider that provides identity to let a user federate into Amazon QuickSight with an associated Identity and Access Management(IAM) role. The type of supported external login provider can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com. When choosing the <code>COGNITO</code> provider type, don’t use the \"CustomFederationProviderUrl\" parameter which is only needed when the external provider is custom.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider. When choosing <code>CUSTOM_OIDC</code> type, use the <code>CustomFederationProviderUrl</code> parameter to provide the custom OIDC provider URL.</p> </li> </ul>"
+          "documentation":"<p>The type of supported external login provider that provides identity to let a user federate into Amazon Quick Sight with an associated Identity and Access Management(IAM) role. The type of supported external login provider can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com. When choosing the <code>COGNITO</code> provider type, don’t use the \"CustomFederationProviderUrl\" parameter which is only needed when the external provider is custom.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider. When choosing <code>CUSTOM_OIDC</code> type, use the <code>CustomFederationProviderUrl</code> parameter to provide the custom OIDC provider URL.</p> </li> </ul>"
         },
         "CustomFederationProviderUrl":{
           "shape":"String",
-          "documentation":"<p>The URL of the custom OpenID Connect (OIDC) provider that provides identity to let a user federate into Amazon QuickSight with an associated Identity and Access Management(IAM) role. This parameter should only be used when <code>ExternalLoginFederationProviderType</code> parameter is set to <code>CUSTOM_OIDC</code>.</p>"
+          "documentation":"<p>The URL of the custom OpenID Connect (OIDC) provider that provides identity to let a user federate into Quick Sight with an associated Identity and Access Management(IAM) role. This parameter should only be used when <code>ExternalLoginFederationProviderType</code> parameter is set to <code>CUSTOM_OIDC</code>.</p>"
         },
         "ExternalLoginId":{
           "shape":"String",
@@ -28123,28 +31172,44 @@
       "members":{
         "KeyArn":{
           "shape":"String",
-          "documentation":"<p>The ARN of the KMS key that is registered to a Amazon QuickSight account for encryption and decryption use.</p>"
+          "documentation":"<p>The ARN of the KMS key that is registered to a Quick Sight account for encryption and decryption use.</p>"
         },
         "DefaultKey":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether a <code>RegisteredCustomerManagedKey</code> is set as the default key for encryption and decryption use.</p>"
         }
       },
-      "documentation":"<p>A customer managed key structure that contains the information listed below: </p> <ul> <li> <p> <code>KeyArn</code> - The ARN of a KMS key that is registered to a Amazon QuickSight account for encryption and decryption use.</p> </li> <li> <p> <code>DefaultKey</code> - Indicates whether the current key is set as the default key for encryption and decryption use.</p> </li> </ul>"
+      "documentation":"<p>A customer managed key structure that contains the information listed below: </p> <ul> <li> <p> <code>KeyArn</code> - The ARN of a KMS key that is registered to a Quick Sight account for encryption and decryption use.</p> </li> <li> <p> <code>DefaultKey</code> - Indicates whether the current key is set as the default key for encryption and decryption use.</p> </li> </ul>"
     },
     "RegisteredUserConsoleFeatureConfigurations":{
       "type":"structure",
       "members":{
         "StatePersistence":{
           "shape":"StatePersistenceConfigurations",
-          "documentation":"<p>The state persistence configurations of an embedded Amazon QuickSight console.</p>"
+          "documentation":"<p>The state persistence configurations of an embedded Amazon Quick Sight console.</p>"
         },
         "SharedView":{
           "shape":"SharedViewConfigurations",
           "documentation":"<p>The shared view settings of an embedded dashboard.</p>"
+        },
+        "AmazonQInQuickSight":{
+          "shape":"AmazonQInQuickSightConsoleConfigurations",
+          "documentation":"<p>The Amazon Q configurations of an embedded Amazon Quick Sight console.</p>"
+        },
+        "Schedules":{
+          "shape":"SchedulesConfigurations",
+          "documentation":"<p>The schedules configuration for an embedded Quick Sight dashboard.</p>"
+        },
+        "RecentSnapshots":{
+          "shape":"RecentSnapshotsConfigurations",
+          "documentation":"<p>The recent snapshots configuration for an embedded Quick Sight dashboard.</p>"
+        },
+        "ThresholdAlerts":{
+          "shape":"ThresholdAlertsConfigurations",
+          "documentation":"<p>The threshold alerts configuration for an embedded Quick Sight dashboard.</p>"
         }
       },
-      "documentation":"<p>The feature configurations of an embedded Amazon QuickSight console.</p>"
+      "documentation":"<p>The feature configurations of an embedded Amazon Quick Sight console.</p>"
     },
     "RegisteredUserDashboardEmbeddingConfiguration":{
       "type":"structure",
@@ -28152,11 +31217,11 @@
       "members":{
         "InitialDashboardId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The dashboard ID for the dashboard that you want the user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders this dashboard if the user has permissions to view it.</p> <p>If the user does not have permission to view this dashboard, they see a permissions error message.</p>"
+          "documentation":"<p>The dashboard ID for the dashboard that you want the user to see first. This ID is included in the output URL. When the URL in response is accessed, Amazon Quick Sight renders this dashboard if the user has permissions to view it.</p> <p>If the user does not have permission to view this dashboard, they see a permissions error message.</p>"
         },
         "FeatureConfigurations":{
           "shape":"RegisteredUserDashboardFeatureConfigurations",
-          "documentation":"<p>The feature configurations of an embbedded Amazon QuickSight dashboard.</p>"
+          "documentation":"<p>The feature configurations of an embbedded Amazon Quick Sight dashboard.</p>"
         }
       },
       "documentation":"<p>Information about the dashboard you want to embed.</p>"
@@ -28174,7 +31239,23 @@
         },
         "Bookmarks":{
           "shape":"BookmarksConfigurations",
-          "documentation":"<p>The bookmarks configuration for an embedded dashboard in Amazon QuickSight.</p>"
+          "documentation":"<p>The bookmarks configuration for an embedded dashboard in Amazon Quick Sight.</p>"
+        },
+        "AmazonQInQuickSight":{
+          "shape":"AmazonQInQuickSightDashboardConfigurations",
+          "documentation":"<p>The Amazon Q configurations of an embedded Amazon Quick Sight dashboard.</p>"
+        },
+        "Schedules":{
+          "shape":"SchedulesConfigurations",
+          "documentation":"<p>The schedules configuration for an embedded Quick Sight dashboard.</p>"
+        },
+        "RecentSnapshots":{
+          "shape":"RecentSnapshotsConfigurations",
+          "documentation":"<p>The recent snapshots configuration for an Quick Sight embedded dashboard</p>"
+        },
+        "ThresholdAlerts":{
+          "shape":"ThresholdAlertsConfigurations",
+          "documentation":"<p>The threshold alerts configuration for an Quick Sight embedded dashboard.</p>"
         }
       },
       "documentation":"<p>The feature configuration for an embedded dashboard.</p>"
@@ -28185,7 +31266,7 @@
       "members":{
         "InitialDashboardVisualId":{
           "shape":"DashboardVisualId",
-          "documentation":"<p>The visual ID for the visual that you want the user to embed. This ID is included in the output URL. When the URL in response is accessed, Amazon QuickSight renders this visual.</p> <p>The Amazon Resource Name (ARN) of the dashboard that the visual belongs to must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
+          "documentation":"<p>The visual ID for the visual that you want the user to embed. This ID is included in the output URL. When the URL in response is accessed, Amazon Quick Sight renders this visual.</p> <p>The Amazon Resource Name (ARN) of the dashboard that the visual belongs to must be included in the <code>AuthorizedResourceArns</code> parameter. Otherwise, the request will fail with <code>InvalidParameterValueException</code>.</p>"
         }
       },
       "documentation":"<p>The experience that you are embedding. You can use this object to generate a url that embeds a visual into your application.</p>"
@@ -28199,29 +31280,29 @@
         },
         "QuickSightConsole":{
           "shape":"RegisteredUserQuickSightConsoleEmbeddingConfiguration",
-          "documentation":"<p>The configuration details for providing each Amazon QuickSight console embedding experience. This can be used along with custom permissions to restrict access to certain features. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon QuickSight Console</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>Use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html\">GenerateEmbedUrlForRegisteredUser</a> </code> where you want to provide an authoring portal that allows users to create data sources, datasets, analyses, and dashboards. The users who accesses an embedded Amazon QuickSight console needs to belong to the author or admin security cohort. If you want to restrict permissions to some of these features, add a custom permissions profile to the user with the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> API operation. Use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html\">RegisterUser</a> </code> API operation to add a new user with a custom permission profile attached. For more information, see the following sections in the <i>Amazon QuickSight User Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-full-console-for-authenticated-users.html\">Embedding the Full Functionality of the Amazon QuickSight Console for Authenticated Users</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon QuickSight Console</a> </p> </li> </ul> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon QuickSight Developer Portal</a>.</p>"
+          "documentation":"<p>The configuration details for providing each Amazon Quick Sight console embedding experience. This can be used along with custom permissions to restrict access to certain features. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon Quick Sight Console</a> in the <i>Amazon Quick Suite User Guide</i>.</p> <p>Use <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GenerateEmbedUrlForRegisteredUser.html\">GenerateEmbedUrlForRegisteredUser</a> </code> where you want to provide an authoring portal that allows users to create data sources, datasets, analyses, and dashboards. The users who accesses an embedded Amazon Quick Sight console needs to belong to the author or admin security cohort. If you want to restrict permissions to some of these features, add a custom permissions profile to the user with the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_UpdateUser.html\">UpdateUser</a> </code> API operation. Use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_RegisterUser.html\">RegisterUser</a> </code> API operation to add a new user with a custom permission profile attached. For more information, see the following sections in the <i>Amazon Quick Suite User Guide</i>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedded-analytics-full-console-for-authenticated-users.html\">Embedding the Full Functionality of the Amazon Quick Sight Console for Authenticated Users</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/customizing-permissions-to-the-quicksight-console.html\">Customizing Access to the Amazon Quick Suite Console</a> </p> </li> </ul> <p>For more information about the high-level steps for embedding and for an interactive demo of the ways you can customize embedding, visit the <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-portal.html\">Amazon Quick Suite Developer Portal</a>.</p>"
         },
         "QSearchBar":{
           "shape":"RegisteredUserQSearchBarEmbeddingConfiguration",
-          "documentation":"<p>The configuration details for embedding the Q search bar.</p> <p>For more information about embedding the Q search bar, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html\">Embedding Overview</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The configuration details for embedding the Q search bar.</p> <p>For more information about embedding the Q search bar, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html\">Embedding Overview</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
         },
         "DashboardVisual":{
           "shape":"RegisteredUserDashboardVisualEmbeddingConfiguration",
-          "documentation":"<p>The type of embedding experience. In this case, Amazon QuickSight visuals.</p>"
+          "documentation":"<p>The type of embedding experience. In this case, Amazon Quick Sight visuals.</p>"
         },
         "GenerativeQnA":{
           "shape":"RegisteredUserGenerativeQnAEmbeddingConfiguration",
-          "documentation":"<p>The configuration details for embedding the Generative Q&amp;A experience.</p> <p>For more information about embedding the Generative Q&amp;A experience, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html\">Embedding Overview</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The configuration details for embedding the Generative Q&amp;A experience.</p> <p>For more information about embedding the Generative Q&amp;A experience, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/embedding-overview.html\">Embedding Overview</a> in the <i>Amazon Quick Sight User Guide</i>.</p>"
         }
       },
-      "documentation":"<p>The type of experience you want to embed. For registered users, you can embed Amazon QuickSight dashboards or the Amazon QuickSight console.</p> <note> <p>Exactly one of the experience configurations is required. You can choose <code>Dashboard</code> or <code>QuickSightConsole</code>. You cannot choose more than one experience configuration.</p> </note>"
+      "documentation":"<p>The type of experience you want to embed. For registered users, you can embed Quick Suite dashboards or the Amazon Quick Sight console.</p> <note> <p>Exactly one of the experience configurations is required. You can choose <code>Dashboard</code> or <code>QuickSightConsole</code>. You cannot choose more than one experience configuration.</p> </note>"
     },
     "RegisteredUserGenerativeQnAEmbeddingConfiguration":{
       "type":"structure",
       "members":{
         "InitialTopicId":{
           "shape":"RestrictiveResourceId",
-          "documentation":"<p>The ID of the new Q reader experience topic that you want to make the starting topic in the Generative Q&amp;A experience. You can find a topic ID by navigating to the Topics pane in the Amazon QuickSight application and opening a topic. The ID is in the URL for the topic that you open.</p> <p>If you don't specify an initial topic or you specify a legacy topic, a list of all shared new reader experience topics is shown in the Generative Q&amp;A experience for your readers. When you select an initial new reader experience topic, you can specify whether or not readers are allowed to select other new reader experience topics from the available ones in the list.</p>"
+          "documentation":"<p>The ID of the new Q reader experience topic that you want to make the starting topic in the Generative Q&amp;A experience. You can find a topic ID by navigating to the Topics pane in the Quick Suite application and opening a topic. The ID is in the URL for the topic that you open.</p> <p>If you don't specify an initial topic or you specify a legacy topic, a list of all shared new reader experience topics is shown in the Generative Q&amp;A experience for your readers. When you select an initial new reader experience topic, you can specify whether or not readers are allowed to select other new reader experience topics from the available ones in the list.</p>"
         }
       },
       "documentation":"<p>An object that provides information about the configuration of a Generative Q&amp;A experience.</p>"
@@ -28231,7 +31312,7 @@
       "members":{
         "InitialTopicId":{
           "shape":"RestrictiveResourceId",
-          "documentation":"<p>The ID of the legacy Q topic that you want to use as the starting topic in the Q search bar. To locate the topic ID of the topic that you want to use, open the <a href=\"https://quicksight.aws.amazon.com/\">Amazon QuickSight console</a>, navigate to the <b>Topics</b> pane, and choose thre topic that you want to use. The <code>TopicID</code> is located in the URL of the topic that opens. When you select an initial topic, you can specify whether or not readers are allowed to select other topics from the list of available topics.</p> <p>If you don't specify an initial topic or if you specify a new reader experience topic, a list of all shared legacy topics is shown in the Q bar. </p>"
+          "documentation":"<p>The ID of the legacy Q topic that you want to use as the starting topic in the Q search bar. To locate the topic ID of the topic that you want to use, open the <a href=\"https://quicksight.aws.amazon.com/\">Quick Sight console</a>, navigate to the <b>Topics</b> pane, and choose thre topic that you want to use. The <code>TopicID</code> is located in the URL of the topic that opens. When you select an initial topic, you can specify whether or not readers are allowed to select other topics from the list of available topics.</p> <p>If you don't specify an initial topic or if you specify a new reader experience topic, a list of all shared legacy topics is shown in the Q bar. </p>"
         }
       },
       "documentation":"<p>Information about the Q search bar embedding experience.</p>"
@@ -28241,14 +31322,14 @@
       "members":{
         "InitialPath":{
           "shape":"EntryPath",
-          "documentation":"<p>The initial URL path for the Amazon QuickSight console. <code>InitialPath</code> is required.</p> <p>The entry point URL is constrained to the following paths:</p> <ul> <li> <p> <code>/start</code> </p> </li> <li> <p> <code>/start/analyses</code> </p> </li> <li> <p> <code>/start/dashboards</code> </p> </li> <li> <p> <code>/start/favorites</code> </p> </li> <li> <p> <code>/dashboards/DashboardId</code>. <i>DashboardId</i> is the actual ID key from the Amazon QuickSight console URL of the dashboard.</p> </li> <li> <p> <code>/analyses/AnalysisId</code>. <i>AnalysisId</i> is the actual ID key from the Amazon QuickSight console URL of the analysis.</p> </li> </ul>"
+          "documentation":"<p>The initial URL path for the Amazon Quick Sight console. <code>InitialPath</code> is required.</p> <p>The entry point URL is constrained to the following paths:</p> <ul> <li> <p> <code>/start</code> </p> </li> <li> <p> <code>/start/analyses</code> </p> </li> <li> <p> <code>/start/dashboards</code> </p> </li> <li> <p> <code>/start/favorites</code> </p> </li> <li> <p> <code>/dashboards/DashboardId</code>. <i>DashboardId</i> is the actual ID key from the Amazon Quick Sight console URL of the dashboard.</p> </li> <li> <p> <code>/analyses/AnalysisId</code>. <i>AnalysisId</i> is the actual ID key from the Amazon Quick Sight console URL of the analysis.</p> </li> </ul>"
         },
         "FeatureConfigurations":{
           "shape":"RegisteredUserConsoleFeatureConfigurations",
-          "documentation":"<p>The embedding configuration of an embedded Amazon QuickSight console.</p>"
+          "documentation":"<p>The embedding configuration of an embedded Amazon Quick Sight console.</p>"
         }
       },
-      "documentation":"<p>Information about the Amazon QuickSight console that you want to embed.</p>"
+      "documentation":"<p>Information about the Amazon Quick Sight console that you want to embed.</p>"
     },
     "RelationalTable":{
       "type":"structure",
@@ -28409,6 +31490,35 @@
       },
       "documentation":"<p>A transform operation that renames a column.</p>"
     },
+    "RenameColumnOperationList":{
+      "type":"list",
+      "member":{"shape":"RenameColumnOperation"},
+      "max":2048,
+      "min":0
+    },
+    "RenameColumnsOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "RenameColumnOperations"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for column renaming.</p>"
+        },
+        "RenameColumnOperations":{
+          "shape":"RenameColumnOperationList",
+          "documentation":"<p>The list of column rename operations to perform, specifying old and new column names.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that renames one or more columns in the dataset.</p>"
+    },
     "ResizeOption":{
       "type":"string",
       "enum":[
@@ -28416,6 +31526,7 @@
         "RESPONSIVE"
       ]
     },
+    "ResourceArn":{"type":"string"},
     "ResourceExistsException":{
       "type":"structure",
       "members":{
@@ -28465,7 +31576,7 @@
       "members":{
         "Principal":{
           "shape":"Principal",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the principal. This can be one of the following:</p> <ul> <li> <p>The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)</p> </li> <li> <p>The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)</p> </li> <li> <p>The ARN of an Amazon Web Services account root: This is an IAM ARN rather than a QuickSight ARN. Use this option only to share resources (templates) across Amazon Web Services accounts. (This is less common.) </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the principal. This can be one of the following:</p> <ul> <li> <p>The ARN of an Quick Sight user or group associated with a data source or dataset. (This is common.)</p> </li> <li> <p>The ARN of an Quick Sight user, group, or namespace associated with an analysis, dashboard, template, or theme. Namespace sharing is not supported for action connectors. (This is common.)</p> </li> <li> <p>The ARN of an Amazon Web Services account root: This is an IAM ARN rather than a Quick Sight ARN. Use this option only to share resources (templates) across Amazon Web Services accounts. Account root sharing is not supported for action connectors. (This is less common.) </p> </li> </ul>"
         },
         "Actions":{
           "shape":"ActionList",
@@ -28667,6 +31778,14 @@
       },
       "documentation":"<p>Information about rows for a data set SPICE ingestion.</p>"
     },
+    "RowLevelPermissionConfiguration":{
+      "type":"structure",
+      "members":{
+        "TagConfiguration":{"shape":"RowLevelPermissionTagConfiguration"},
+        "RowLevelPermissionDataSet":{"shape":"RowLevelPermissionDataSet"}
+      },
+      "documentation":"<p>Configuration for row level security.</p>"
+    },
     "RowLevelPermissionDataSet":{
       "type":"structure",
       "required":[
@@ -28695,7 +31814,12 @@
           "documentation":"<p>The status of the row-level security permission dataset. If enabled, the status is <code>ENABLED</code>. If disabled, the status is <code>DISABLED</code>.</p>"
         }
       },
-      "documentation":"<p>Information about a dataset that contains permissions for row-level security (RLS). The permissions dataset maps fields to users or groups. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/restrict-access-to-a-data-set-using-row-level-security.html\">Using Row-Level Security (RLS) to Restrict Access to a Dataset</a> in the <i>Amazon QuickSight User Guide</i>.</p> <p>The option to deny permissions by setting <code>PermissionPolicy</code> to <code>DENY_ACCESS</code> is not supported for new RLS datasets.</p>"
+      "documentation":"<p>Information about a dataset that contains permissions for row-level security (RLS). The permissions dataset maps fields to users or groups. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/restrict-access-to-a-data-set-using-row-level-security.html\">Using Row-Level Security (RLS) to Restrict Access to a Dataset</a> in the <i>Quick Sight User Guide</i>.</p> <p>The option to deny permissions by setting <code>PermissionPolicy</code> to <code>DENY_ACCESS</code> is not supported for new RLS datasets.</p>"
+    },
+    "RowLevelPermissionDataSetMap":{
+      "type":"map",
+      "key":{"shape":"DataSetEntityResourceId"},
+      "value":{"shape":"RowLevelPermissionDataSet"}
     },
     "RowLevelPermissionFormatVersion":{
       "type":"string",
@@ -28809,20 +31933,39 @@
           "documentation":"<p>The region that the Amazon S3 bucket is located in. The bucket must be located in the same region that the <code>StartDashboardSnapshotJob</code> API call is made.</p>"
         }
       },
-      "documentation":"<p>An optional structure that contains the Amazon S3 bucket configuration that the generated snapshots are stored in. If you don't provide this information, generated snapshots are stored in the default Amazon QuickSight bucket.</p>"
+      "documentation":"<p>An optional structure that contains the Amazon S3 bucket configuration that the generated snapshots are stored in. If you don't provide this information, generated snapshots are stored in the default Amazon Quick Sight bucket.</p>"
     },
     "S3Key":{
       "type":"string",
       "max":1024,
       "min":1
     },
+    "S3KnowledgeBaseParameters":{
+      "type":"structure",
+      "required":["BucketUrl"],
+      "members":{
+        "RoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>Use the <code>RoleArn</code> structure to override an account-wide role for a specific S3 Knowledge Base data source. For example, say an account administrator has turned off all S3 access with an account-wide role. The administrator can then use <code>RoleArn</code> to bypass the account-wide role and allow S3 access for the single S3 Knowledge Base data source that is specified in the structure, even if the account-wide role forbidding S3 access is still active.</p>"
+        },
+        "BucketUrl":{
+          "shape":"S3Bucket",
+          "documentation":"<p>The URL of the S3 bucket that contains the knowledge base data.</p>"
+        },
+        "MetadataFilesLocation":{
+          "shape":"MetadataFilesLocation",
+          "documentation":"<p>The location of metadata files within the S3 bucket that describe the structure and content of the knowledge base.</p>"
+        }
+      },
+      "documentation":"<p>The parameters that are required to connect to a S3 Knowledge Base data source.</p>"
+    },
     "S3Parameters":{
       "type":"structure",
       "required":["ManifestFileLocation"],
       "members":{
         "ManifestFileLocation":{
           "shape":"ManifestFileLocation",
-          "documentation":"<p>Location of the Amazon S3 manifest file. This is NULL if the manifest file was uploaded into Amazon QuickSight.</p>"
+          "documentation":"<p>Location of the Amazon S3 manifest file. This is NULL if the manifest file was uploaded into Quick Sight.</p>"
         },
         "RoleArn":{
           "shape":"RoleArn",
@@ -28857,6 +32000,29 @@
       "type":"string",
       "pattern":"^(https|s3)://([^/]+)/?(.*)$"
     },
+    "SaaSTable":{
+      "type":"structure",
+      "required":[
+        "DataSourceArn",
+        "TablePath",
+        "InputColumns"
+      ],
+      "members":{
+        "DataSourceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the SaaS data source.</p>"
+        },
+        "TablePath":{
+          "shape":"TablePathElementList",
+          "documentation":"<p>The hierarchical path to the table within the SaaS data source.</p>"
+        },
+        "InputColumns":{
+          "shape":"InputColumnList",
+          "documentation":"<p>The list of input columns available from the SaaS table.</p>"
+        }
+      },
+      "documentation":"<p>A table from a Software-as-a-Service (SaaS) data source, including connection details and column definitions.</p>"
+    },
     "SameSheetTargetVisualConfiguration":{
       "type":"structure",
       "members":{
@@ -28968,7 +32134,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A sankey diagram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sankey-diagram.html\">Using Sankey diagrams</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A sankey diagram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sankey-diagram.html\">Using Sankey diagrams</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "ScatterPlotCategoricallyAggregatedFieldWells":{
       "type":"structure",
@@ -29126,7 +32292,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A scatter plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scatter-plot.html\">Using scatter plots</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A scatter plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scatter-plot.html\">Using scatter plots</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "ScheduleRefreshOnEntity":{
       "type":"structure",
@@ -29142,6 +32308,17 @@
       },
       "documentation":"<p>The refresh on entity for weekly or monthly schedules.</p>"
     },
+    "SchedulesConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The schedules configuration for an embedded Quick Sight dashboard.</p>"
+        }
+      },
+      "documentation":"<p>The schedules configuration for an embedded Quick Sight dashboard.</p>"
+    },
     "ScrollBarOptions":{
       "type":"structure",
       "members":{
@@ -29156,6 +32333,64 @@
       },
       "documentation":"<p>The visual display options for a data zoom scroll bar.</p>"
     },
+    "SearchActionConnectorsRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "Filters"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID in which to search for action connectors.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "MaxResults":{
+          "shape":"SearchActionConnectorsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of action connectors to return in a single response. Valid range is 1 to 100.</p>",
+          "location":"querystring",
+          "locationName":"max-results"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token to retrieve the next set of results. Use the token returned from a previous call to continue searching.</p>",
+          "location":"querystring",
+          "locationName":"next-token"
+        },
+        "Filters":{
+          "shape":"ActionConnectorSearchFilterList",
+          "documentation":"<p>The search filters to apply. You can filter by connector name, type, or user permissions. Maximum of one filter is supported.</p>"
+        }
+      }
+    },
+    "SearchActionConnectorsRequestMaxResultsInteger":{
+      "type":"integer",
+      "max":100,
+      "min":0
+    },
+    "SearchActionConnectorsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>A pagination token to retrieve the next set of results. If null, there are no more results to retrieve.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        },
+        "ActionConnectorSummaries":{
+          "shape":"ActionConnectorSummaryList",
+          "documentation":"<p>A list of action connector summaries that match the search criteria.</p>"
+        }
+      }
+    },
     "SearchAnalysesRequest":{
       "type":"structure",
       "required":[
@@ -29356,6 +32591,90 @@
         }
       }
     },
+    "SearchFilterOperator":{
+      "type":"string",
+      "enum":[
+        "StringEquals",
+        "StringLike"
+      ]
+    },
+    "SearchFlowsFilter":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Operator",
+        "Value"
+      ],
+      "members":{
+        "Name":{
+          "shape":"FieldName",
+          "documentation":"<p>The name of the value that you want to use as a filter, for example <code>\"Name\": \"DIRECT_QUICKSIGHT_SOLE_OWNER\"</code>.</p> <p>Valid values are defined as follows:</p> <ul> <li> <p> <code>assetName</code>: Any flows whose names have a substring match to this value will be returned.</p> </li> <li> <p> <code>assetDescription</code>: Any flows whose descriptions have a substring match to this value will be returned.</p> </li> <li> <p> <code>DIRECT_QUICKSIGHT_SOLE_OWNER</code>: Provide an ARN of a user or group, and any analyses with that ARN listed as the only owner of the analysis are returned. Implicit permissions from folders or groups are not considered.</p> </li> <li> <p> <code>DIRECT_QUICKSIGHT_OWNER</code>: Provide an ARN of a user or group, and any analyses with that ARN listed as one of the owners of the analyses are returned. Implicit permissions from folders or groups are not considered.</p> </li> <li> <p> <code>DIRECT_QUICKSIGHT_VIEWER_OR_OWNER</code>: Provide an ARN of a user or group, and any analyses with that ARN listed as one of the owners or viewers of the analyses are returned. Implicit permissions from folders or groups are not considered. </p> </li> </ul>"
+        },
+        "Operator":{
+          "shape":"SearchFilterOperator",
+          "documentation":"<p>The comparison operator that you want to use as a filter, for example <code>\"Operator\": \"StringEquals\"</code>. Valid values are <code>\"StringEquals\"</code> and <code>\"StringLike\"</code>.</p>"
+        },
+        "Value":{
+          "shape":"String",
+          "documentation":"<p>The value of the named item, in this case <code>DIRECT_QUICKSIGHT_SOLE_OWNER</code>, that you want to use as a filter, for example <code>\"Value\"</code>. An example is <code>\"arn:aws:quicksight:us-east-1:1:user/default/UserName1\"</code>.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains the filter information when searching flows.</p>"
+    },
+    "SearchFlowsFilterList":{
+      "type":"list",
+      "member":{"shape":"SearchFlowsFilter"}
+    },
+    "SearchFlowsInput":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "Filters"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account where you are searching for flows from.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "Filters":{
+          "shape":"SearchFlowsFilterList",
+          "documentation":"<p>The filters applied to the search when searching for flows in the Amazon Web Services account.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token to request the next set of results, or null if you want to retrieve the first set.</p>"
+        },
+        "MaxResults":{
+          "shape":"FlowMaxResults",
+          "documentation":"<p>The maximum number of results to be returned per request.</p>"
+        }
+      }
+    },
+    "SearchFlowsOutput":{
+      "type":"structure",
+      "required":["FlowSummaryList"],
+      "members":{
+        "FlowSummaryList":{
+          "shape":"FlowSummaryList",
+          "documentation":"<p>The list of flows found against the search.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of results, or null if there are no more results.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "SearchFoldersRequest":{
       "type":"structure",
       "required":[
@@ -29416,7 +32735,7 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -29707,6 +33026,50 @@
       },
       "documentation":"<p>A structure that represents a semantic entity type.</p>"
     },
+    "SemanticModelConfiguration":{
+      "type":"structure",
+      "members":{
+        "TableMap":{
+          "shape":"SemanticTableMap",
+          "documentation":"<p>A map of semantic tables that define the analytical structure.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for the semantic model that defines how prepared data is structured for analysis and reporting.</p>"
+    },
+    "SemanticTable":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "DestinationTableId"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"SemanticTableAlias",
+          "documentation":"<p>Alias for the semantic table.</p>"
+        },
+        "DestinationTableId":{
+          "shape":"DataSetEntityResourceId",
+          "documentation":"<p>The identifier of the destination table from data preparation that provides data to this semantic table.</p>"
+        },
+        "RowLevelPermissionConfiguration":{
+          "shape":"RowLevelPermissionConfiguration",
+          "documentation":"<p>Configuration for row level security that control data access for this semantic table.</p>"
+        }
+      },
+      "documentation":"<p>A semantic table that represents the final analytical structure of the data.</p>"
+    },
+    "SemanticTableAlias":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "SemanticTableMap":{
+      "type":"map",
+      "key":{"shape":"DataSetEntityResourceId"},
+      "value":{"shape":"SemanticTable"},
+      "max":1,
+      "min":1
+    },
     "SemanticType":{
       "type":"structure",
       "members":{
@@ -29790,6 +33153,7 @@
       "type":"list",
       "member":{"shape":"SensitiveTimestamp"}
     },
+    "Separator":{"type":"string"},
     "SeriesItem":{
       "type":"structure",
       "members":{
@@ -29824,7 +33188,8 @@
       "type":"string",
       "enum":[
         "REDSHIFT",
-        "QBUSINESS"
+        "QBUSINESS",
+        "ATHENA"
       ]
     },
     "SessionLifetimeInMinutes":{
@@ -29945,14 +33310,14 @@
         },
         "Name":{
           "shape":"SheetName",
-          "documentation":"<p>The name of a sheet. This name is displayed on the sheet's tab in the Amazon QuickSight console.</p>"
+          "documentation":"<p>The name of a sheet. This name is displayed on the sheet's tab in the Quick Sight console.</p>"
         },
         "Images":{
           "shape":"SheetImageList",
           "documentation":"<p>A list of images on a sheet.</p>"
         }
       },
-      "documentation":"<p>A <i>sheet</i>, which is an object that contains a set of visuals that are viewed together on one page in Amazon QuickSight. Every analysis and dashboard contains at least one sheet. Each sheet contains at least one visualization widget, for example a chart, pivot table, or narrative insight. Sheets can be associated with other components, such as controls, filters, and so on.</p>"
+      "documentation":"<p>A <i>sheet</i>, which is an object that contains a set of visuals that are viewed together on one page in Quick Sight. Every analysis and dashboard contains at least one sheet. Each sheet contains at least one visualization widget, for example a chart, pivot table, or narrative insight. Sheets can be associated with other components, such as controls, filters, and so on.</p>"
     },
     "SheetContentType":{
       "type":"string",
@@ -30061,15 +33426,15 @@
         },
         "Name":{
           "shape":"SheetName",
-          "documentation":"<p>The name of the sheet. This name is displayed on the sheet's tab in the Amazon QuickSight console.</p>"
+          "documentation":"<p>The name of the sheet. This name is displayed on the sheet's tab in the Quick Suite console.</p>"
         },
         "ParameterControls":{
           "shape":"ParameterControlList",
-          "documentation":"<p>The list of parameter controls that are on a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-controls.html\">Using a Control with a Parameter in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The list of parameter controls that are on a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-controls.html\">Using a Control with a Parameter in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "FilterControls":{
           "shape":"FilterControlList",
-          "documentation":"<p>The list of filter controls that are on a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filter-controls.html\">Adding filter controls to analysis sheets</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The list of filter controls that are on a sheet.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filter-controls.html\">Adding filter controls to analysis sheets</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "Visuals":{
           "shape":"VisualList",
@@ -30085,7 +33450,7 @@
         },
         "Layouts":{
           "shape":"LayoutList",
-          "documentation":"<p>Layouts define how the components of a sheet are arranged.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/types-of-layout.html\">Types of layout</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>Layouts define how the components of a sheet are arranged.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/types-of-layout.html\">Types of layout</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "SheetControlLayouts":{
           "shape":"SheetControlLayoutList",
@@ -30094,6 +33459,10 @@
         "ContentType":{
           "shape":"SheetContentType",
           "documentation":"<p>The layout content type of the sheet. Choose one of the following options:</p> <ul> <li> <p> <code>PAGINATED</code>: Creates a sheet for a paginated report.</p> </li> <li> <p> <code>INTERACTIVE</code>: Creates a sheet for an interactive dashboard.</p> </li> </ul>"
+        },
+        "CustomActionDefaults":{
+          "shape":"VisualCustomActionDefaults",
+          "documentation":"<p>A list of visual custom actions for the sheet.</p>"
         }
       },
       "documentation":"<p>A sheet is an object that contains a set of visuals that are viewed together on one page in a paginated report. Every analysis and dashboard must contain at least one sheet.</p>"
@@ -30294,6 +33663,10 @@
         "Content":{
           "shape":"SheetTextBoxContent",
           "documentation":"<p>The content that is displayed in the text box.</p>"
+        },
+        "Interactions":{
+          "shape":"TextBoxInteractionOptions",
+          "documentation":"<p>The general textbox interactions setup for a textbox.</p>"
         }
       },
       "documentation":"<p>A text box.</p>"
@@ -30375,19 +33748,19 @@
       "members":{
         "IAMUser":{
           "shape":"Boolean",
-          "documentation":"<p>A Boolean that is <code>TRUE</code> if the Amazon QuickSight uses IAM as an authentication method.</p>"
+          "documentation":"<p>A Boolean that is <code>TRUE</code> if the Amazon Quick Sight uses IAM as an authentication method.</p>"
         },
         "userLoginName":{
           "shape":"String",
-          "documentation":"<p>The user login name for your Amazon QuickSight account.</p>"
+          "documentation":"<p>The user login name for your Amazon Quick Sight account.</p>"
         },
         "accountName":{
           "shape":"String",
-          "documentation":"<p>The name of your Amazon QuickSight account.</p>"
+          "documentation":"<p>The name of your Quick Sight account.</p>"
         },
         "directoryType":{
           "shape":"String",
-          "documentation":"<p>The type of Active Directory that is being used to authenticate the Amazon QuickSight account. Valid values are <code>SIMPLE_AD</code>, <code>AD_CONNECTOR</code>, and <code>MICROSOFT_AD</code>.</p>"
+          "documentation":"<p>The type of Active Directory that is being used to authenticate the Amazon Quick Sight account. Valid values are <code>SIMPLE_AD</code>, <code>AD_CONNECTOR</code>, and <code>MICROSOFT_AD</code>.</p>"
         }
       },
       "documentation":"<p>A <code>SignupResponse</code> object that contains a summary of a newly created account.</p>"
@@ -30548,7 +33921,7 @@
       "members":{
         "RowLevelPermissionTags":{
           "shape":"SessionTagList",
-          "documentation":"<p>The tags to be used for row-level security (RLS). Make sure that the relevant datasets have RLS tags configured before you start a snapshot export job. You can configure the RLS tags of a dataset with a <code>DataSet$RowLevelPermissionTagConfiguration</code> API call.</p> <p>These are not the tags that are used for Amazon Web Services resource tagging. For more information on row level security in Amazon QuickSight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-rls-tags.html\">Using Row-Level Security (RLS) with Tags</a>in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>The tags to be used for row-level security (RLS). Make sure that the relevant datasets have RLS tags configured before you start a snapshot export job. You can configure the RLS tags of a dataset with a <code>DataSet$RowLevelPermissionTagConfiguration</code> API call.</p> <p>These are not the tags that are used for Amazon Web Services resource tagging. For more information on row level security in Amazon Quick Sight, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-rls-tags.html\">Using Row-Level Security (RLS) with Tags</a>in the <i>Amazon Quick Suite User Guide</i>.</p>"
         }
       },
       "documentation":"<p>A structure that contains information on the anonymous user configuration.</p>"
@@ -30848,7 +34221,7 @@
         },
         "OAuthParameters":{
           "shape":"OAuthParameters",
-          "documentation":"<p>An object that contains information needed to create a data source connection between an Amazon QuickSight account and Snowflake.</p>"
+          "documentation":"<p>An object that contains information needed to create a data source connection between an Quick Sight account and Snowflake.</p>"
         }
       },
       "documentation":"<p>The parameters for Snowflake.</p>"
@@ -30860,6 +34233,27 @@
         "DESC"
       ]
     },
+    "SourceTable":{
+      "type":"structure",
+      "members":{
+        "PhysicalTableId":{
+          "shape":"DataSetEntityResourceId",
+          "documentation":"<p>The identifier of the physical table that serves as the data source.</p>"
+        },
+        "DataSet":{
+          "shape":"ParentDataSet",
+          "documentation":"<p>A parent dataset that serves as the data source instead of a physical table.</p>"
+        }
+      },
+      "documentation":"<p>A source table that provides initial data from either a physical table or parent dataset.</p>"
+    },
+    "SourceTableMap":{
+      "type":"map",
+      "key":{"shape":"DataSetEntityResourceId"},
+      "value":{"shape":"SourceTable"},
+      "max":32,
+      "min":1
+    },
     "Spacing":{
       "type":"structure",
       "members":{
@@ -30931,7 +34325,8 @@
     "SqlQuery":{
       "type":"string",
       "max":168000,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "SqlServerParameters":{
       "type":"structure",
@@ -30964,7 +34359,7 @@
           "documentation":"<p>A Boolean option to control whether SSL should be disabled.</p>"
         }
       },
-      "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying data source.</p>"
+      "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Quick Sight connects to your underlying data source.</p>"
     },
     "StarburstParameters":{
       "type":"structure",
@@ -31000,7 +34395,7 @@
         },
         "OAuthParameters":{
           "shape":"OAuthParameters",
-          "documentation":"<p>An object that contains information needed to create a data source connection between an Amazon QuickSight account and Starburst.</p>"
+          "documentation":"<p>An object that contains information needed to create a data source connection between an Quick Sight account and Starburst.</p>"
         }
       },
       "documentation":"<p>The parameters that are required to connect to a Starburst data source.</p>"
@@ -31119,7 +34514,7 @@
         },
         "FailureAction":{
           "shape":"AssetBundleImportFailureAction",
-          "documentation":"<p>The failure action for the import job.</p> <p>If you choose <code>ROLLBACK</code>, failed import jobs will attempt to undo any asset changes caused by the failed job.</p> <p>If you choose <code>DO_NOTHING</code>, failed import jobs will not attempt to roll back any asset changes caused by the failed job, possibly keeping the Amazon QuickSight account in an inconsistent state.</p>"
+          "documentation":"<p>The failure action for the import job.</p> <p>If you choose <code>ROLLBACK</code>, failed import jobs will attempt to undo any asset changes caused by the failed job.</p> <p>If you choose <code>DO_NOTHING</code>, failed import jobs will not attempt to roll back any asset changes caused by the failed job, possibly keeping the Amazon Quick Sight account in an inconsistent state.</p>"
         },
         "OverridePermissions":{
           "shape":"AssetBundleImportJobOverridePermissions",
@@ -31185,7 +34580,7 @@
         },
         "UserConfiguration":{
           "shape":"SnapshotUserConfiguration",
-          "documentation":"<p> A structure that contains information about the anonymous users that the generated snapshot is for. This API will not return information about registered Amazon QuickSight.</p>"
+          "documentation":"<p> A structure that contains information about the anonymous users that the generated snapshot is for. This API will not return information about registered Amazon Quick Sight.</p>"
         },
         "SnapshotConfiguration":{
           "shape":"SnapshotConfiguration",
@@ -31237,7 +34632,7 @@
         },
         "ScheduleId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the schedule that you want to start a snapshot job schedule for. The schedule ID can be found in the Amazon QuickSight console in the <b>Schedules</b> pane of the dashboard that the schedule is configured for.</p>",
+          "documentation":"<p>The ID of the schedule that you want to start a snapshot job schedule for. The schedule ID can be found in the Amazon Quick Sight console in the <b>Schedules</b> pane of the dashboard that the schedule is configured for.</p>",
           "location":"uri",
           "locationName":"ScheduleId"
         }
@@ -31263,7 +34658,7 @@
       "members":{
         "Enabled":{
           "shape":"Boolean",
-          "documentation":"<p>Determines if a Amazon QuickSight dashboard's state persistence settings are turned on or off.</p>"
+          "documentation":"<p>Determines if a Quick Sight dashboard's state persistence settings are turned on or off.</p>"
         }
       },
       "documentation":"<p>The state perssitence configuration of an embedded dashboard.</p>"
@@ -31587,7 +34982,7 @@
           "documentation":"<p>The HTTP status of a <code>SuccessfulKeyRegistrationEntry</code> entry.</p>"
         }
       },
-      "documentation":"<p>A success entry that occurs when a <code>KeyRegistration</code> job is successfully applied to the Amazon QuickSight account.</p>"
+      "documentation":"<p>A success entry that occurs when a <code>KeyRegistration</code> job is successfully applied to the Quick Sight account.</p>"
     },
     "Suffix":{
       "type":"string",
@@ -31903,6 +35298,10 @@
         "PinnedFieldOptions":{
           "shape":"TablePinnedFieldOptions",
           "documentation":"<p>The settings for the pinned columns of a table visual.</p>"
+        },
+        "TransposedTableOptions":{
+          "shape":"TransposedTableOptionList",
+          "documentation":"<p>The <code>TableOptions</code> of a transposed table.</p>"
         }
       },
       "documentation":"<p>The field options of a table visual.</p>"
@@ -31999,6 +35398,36 @@
       },
       "documentation":"<p>The paginated report options for a table visual.</p>"
     },
+    "TablePathElement":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"TablePathElementName",
+          "documentation":"<p>The name of the path element.</p>"
+        },
+        "Id":{
+          "shape":"TablePathElementId",
+          "documentation":"<p>The unique identifier of the path element.</p>"
+        }
+      },
+      "documentation":"<p>An element in the hierarchical path to a table within a data source, containing both name and identifier.</p>"
+    },
+    "TablePathElementId":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
+    "TablePathElementList":{
+      "type":"list",
+      "member":{"shape":"TablePathElement"},
+      "max":32,
+      "min":1
+    },
+    "TablePathElementName":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "TablePinnedFieldOptions":{
       "type":"structure",
       "members":{
@@ -32146,7 +35575,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A table visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tabular.html\">Using tables as visuals</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A table visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tabular.html\">Using tables as visuals</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "Tag":{
       "type":"structure",
@@ -32277,7 +35706,7 @@
           "documentation":"<p>Time when this was created.</p>"
         }
       },
-      "documentation":"<p>A template object. A <i>template</i> is an entity in Amazon QuickSight that encapsulates the metadata required to create an analysis and that you can use to create a dashboard. A template adds a layer of abstraction by using placeholders to replace the dataset associated with an analysis. You can use templates to create dashboards by replacing dataset placeholders with datasets that follow the same schema that was used to create the source analysis and template.</p> <p>You can share templates across Amazon Web Services accounts by allowing users in other Amazon Web Services accounts to create a template or a dashboard from an existing template.</p>"
+      "documentation":"<p>A template object. A <i>template</i> is an entity in Quick Sight that encapsulates the metadata required to create an analysis and that you can use to create a dashboard. A template adds a layer of abstraction by using placeholders to replace the dataset associated with an analysis. You can use templates to create dashboards by replacing dataset placeholders with datasets that follow the same schema that was used to create the source analysis and template.</p> <p>You can share templates across Amazon Web Services accounts by allowing users in other Amazon Web Services accounts to create a template or a dashboard from an existing template.</p>"
     },
     "TemplateAlias":{
       "type":"structure",
@@ -32477,11 +35906,11 @@
         },
         "ParameterDeclarations":{
           "shape":"ParameterDeclarationList",
-          "documentation":"<p>An array of parameter declarations for a template.</p> <p> <i>Parameters</i> are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide</i>. </p>"
+          "documentation":"<p>An array of parameter declarations for a template.</p> <p> <i>Parameters</i> are named variables that can transfer a value for use by an action or an object.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/parameters-in-quicksight.html\">Parameters in Amazon Quick Sight</a> in the <i>Amazon Quick Suite User Guide</i>. </p>"
         },
         "FilterGroups":{
           "shape":"FilterGroupList",
-          "documentation":"<p>Filter definitions for a template.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filtering-visual-data.html\">Filtering Data</a> in the <i>Amazon QuickSight User Guide</i>. </p>"
+          "documentation":"<p>Filter definitions for a template.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filtering-visual-data.html\">Filtering Data</a> in the <i>Amazon Quick Suite User Guide</i>. </p>"
         },
         "ColumnConfigurations":{
           "shape":"ColumnConfigurationList",
@@ -32577,6 +36006,26 @@
       },
       "documentation":"<p>The display options of a control.</p>"
     },
+    "TextBoxInteractionOptions":{
+      "type":"structure",
+      "members":{
+        "TextBoxMenuOption":{
+          "shape":"TextBoxMenuOption",
+          "documentation":"<p>The menu options for the textbox.</p>"
+        }
+      },
+      "documentation":"<p>The general textbox interactions setup for textbox publish options.</p>"
+    },
+    "TextBoxMenuOption":{
+      "type":"structure",
+      "members":{
+        "AvailabilityStatus":{
+          "shape":"DashboardBehavior",
+          "documentation":"<p>The availability status of the textbox menu. If the value of this property is set to <code>ENABLED</code>, dashboard readers can interact with the textbox menu.</p>"
+        }
+      },
+      "documentation":"<p>The menu options for the interactions of a textbox.</p>"
+    },
     "TextConditionalFormat":{
       "type":"structure",
       "members":{
@@ -32798,7 +36247,7 @@
         },
         "BaseThemeId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The Amazon QuickSight-defined ID of the theme that a custom theme inherits from. All themes initially inherit from a default Amazon QuickSight theme.</p>"
+          "documentation":"<p>The Quick Sight-defined ID of the theme that a custom theme inherits from. All themes initially inherit from a default Quick Sight theme.</p>"
         },
         "CreatedTime":{
           "shape":"Timestamp",
@@ -32868,6 +36317,17 @@
       },
       "documentation":"<p>The options that determine the thousands separator configuration.</p>"
     },
+    "ThresholdAlertsConfigurations":{
+      "type":"structure",
+      "required":["Enabled"],
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>The threshold alerts configuration for an embedded Quick Sight dashboard.</p>"
+        }
+      },
+      "documentation":"<p>The threshold alerts configuration for an embedded Quick Sight dashboard.</p>"
+    },
     "ThrottlingException":{
       "type":"structure",
       "members":{
@@ -33093,6 +36553,11 @@
       "documentation":"<p>The value of a time range filter.</p> <p>This is a union type structure. For this structure to be valid, only one of the attributes can be defined.</p>"
     },
     "Timestamp":{"type":"timestamp"},
+    "Title":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "TokenProviderUrl":{
       "type":"string",
       "max":2048,
@@ -33618,6 +37083,10 @@
         "RelativeDateFilter":{
           "shape":"TopicRelativeDateFilter",
           "documentation":"<p>The relative date filter.</p>"
+        },
+        "NullFilter":{
+          "shape":"TopicNullFilter",
+          "documentation":"<p>The null filter.</p>"
         }
       },
       "documentation":"<p>A structure that represents a filter used to select items for a topic.</p>"
@@ -33944,6 +37413,21 @@
       },
       "documentation":"<p>A structure that represents a named entity.</p>"
     },
+    "TopicNullFilter":{
+      "type":"structure",
+      "members":{
+        "NullFilterType":{
+          "shape":"NullFilterType",
+          "documentation":"<p>The type of the null filter. Valid values for this type are <code>NULLS_ONLY</code>, <code>NON_NULLS_ONLY</code>, and <code>ALL_VALUES</code>.</p>"
+        },
+        "Constant":{"shape":"TopicSingularFilterConstant"},
+        "Inverse":{
+          "shape":"Boolean",
+          "documentation":"<p>A Boolean value that indicates if the filter is inverse.</p>"
+        }
+      },
+      "documentation":"<p>The structure that represents a null filter.</p>"
+    },
     "TopicNumericEqualityFilter":{
       "type":"structure",
       "members":{
@@ -34431,12 +37915,121 @@
       },
       "documentation":"<p>A data transformation on a logical table. This is a variant type structure. For this structure to be valid, only one of the attributes can be non-null.</p>"
     },
+    "TransformOperationAlias":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
     "TransformOperationList":{
       "type":"list",
       "member":{"shape":"TransformOperation"},
       "max":2048,
       "min":1
     },
+    "TransformOperationSource":{
+      "type":"structure",
+      "required":["TransformOperationId"],
+      "members":{
+        "TransformOperationId":{
+          "shape":"DataSetEntityResourceId",
+          "documentation":"<p>The identifier of the transform operation that provides input data.</p>"
+        },
+        "ColumnIdMappings":{
+          "shape":"DataSetColumnIdMappingList",
+          "documentation":"<p>The mappings between source column identifiers and target column identifiers for this transformation.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the source of data for a transform operation, including the source operation and column mappings.</p>"
+    },
+    "TransformStep":{
+      "type":"structure",
+      "members":{
+        "ImportTableStep":{
+          "shape":"ImportTableOperation",
+          "documentation":"<p>A transform step that brings data from a source table.</p>"
+        },
+        "ProjectStep":{"shape":"ProjectOperation"},
+        "FiltersStep":{
+          "shape":"FiltersOperation",
+          "documentation":"<p>A transform step that applies filter conditions.</p>"
+        },
+        "CreateColumnsStep":{"shape":"CreateColumnsOperation"},
+        "RenameColumnsStep":{
+          "shape":"RenameColumnsOperation",
+          "documentation":"<p>A transform step that changes the names of one or more columns.</p>"
+        },
+        "CastColumnTypesStep":{
+          "shape":"CastColumnTypesOperation",
+          "documentation":"<p>A transform step that changes the data types of one or more columns.</p>"
+        },
+        "JoinStep":{
+          "shape":"JoinOperation",
+          "documentation":"<p>A transform step that combines data from two sources based on specified join conditions.</p>"
+        },
+        "AggregateStep":{
+          "shape":"AggregateOperation",
+          "documentation":"<p>A transform step that groups data and applies aggregation functions to calculate summary values.</p>"
+        },
+        "PivotStep":{
+          "shape":"PivotOperation",
+          "documentation":"<p>A transform step that converts row values into columns to reshape the data structure.</p>"
+        },
+        "UnpivotStep":{
+          "shape":"UnpivotOperation",
+          "documentation":"<p>A transform step that converts columns into rows to normalize the data structure.</p>"
+        },
+        "AppendStep":{
+          "shape":"AppendOperation",
+          "documentation":"<p>A transform step that combines rows from multiple sources by stacking them vertically.</p>"
+        }
+      },
+      "documentation":"<p>A step in data preparation that performs a specific operation on the data.</p>"
+    },
+    "TransformStepMap":{
+      "type":"map",
+      "key":{"shape":"DataSetEntityResourceId"},
+      "value":{"shape":"TransformStep"},
+      "max":256,
+      "min":1
+    },
+    "TransposedColumnIndex":{
+      "type":"integer",
+      "documentation":"<p>The integer value of a column index in the transposed table.</p>",
+      "max":9999,
+      "min":0
+    },
+    "TransposedColumnType":{
+      "type":"string",
+      "enum":[
+        "ROW_HEADER_COLUMN",
+        "VALUE_COLUMN"
+      ]
+    },
+    "TransposedTableOption":{
+      "type":"structure",
+      "required":["ColumnType"],
+      "members":{
+        "ColumnIndex":{
+          "shape":"TransposedColumnIndex",
+          "documentation":"<p>The index of a columns in a transposed table. The index range is 0-9999.</p>"
+        },
+        "ColumnWidth":{
+          "shape":"PixelLength",
+          "documentation":"<p>The width of a column in a transposed table.</p>"
+        },
+        "ColumnType":{
+          "shape":"TransposedColumnType",
+          "documentation":"<p>The column type of the column in a transposed table. Choose one of the following options:</p> <ul> <li> <p> <code>ROW_HEADER_COLUMN</code>: Refers to the leftmost column of the row header in the transposed table.</p> </li> <li> <p> <code>VALUE_COLUMN</code>: Refers to all value columns in the transposed table.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The column option of the transposed table.</p>"
+    },
+    "TransposedTableOptionList":{
+      "type":"list",
+      "member":{"shape":"TransposedTableOption"},
+      "documentation":"<p>A list of <code>TransposedTableOption</code> configurations.</p>",
+      "max":10001
+    },
     "TreeMapAggregatedFieldWells":{
       "type":"structure",
       "members":{
@@ -34568,7 +38161,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A tree map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tree-map.html\">Using tree maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A tree map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tree-map.html\">Using tree maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "TrendArrowOptions":{
       "type":"structure",
@@ -34708,7 +38301,7 @@
           "documentation":"<p>The foreground color that applies to any text or other elements that appear over the measure color.</p>"
         }
       },
-      "documentation":"<p>The theme colors that apply to UI and to charts, excluding data colors. The colors description is a hexadecimal color code that consists of six alphanumerical characters, prefixed with <code>#</code>, for example #37BFF5. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html\">Using Themes in Amazon QuickSight</a> in the <i>Amazon QuickSight User Guide.</i> </p>"
+      "documentation":"<p>The theme colors that apply to UI and to charts, excluding data colors. The colors description is a hexadecimal color code that consists of six alphanumerical characters, prefixed with <code>#</code>, for example #37BFF5. For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/themes-in-quicksight.html\">Using Themes in Quick Sight</a> in the <i>Quick Sight User Guide.</i> </p>"
     },
     "URLOperationTemplate":{
       "type":"string",
@@ -34807,6 +38400,49 @@
       "type":"string",
       "documentation":"String based length that is composed of value and unit in px with Integer.MAX_VALUE as maximum value"
     },
+    "UnpivotOperation":{
+      "type":"structure",
+      "required":[
+        "Alias",
+        "Source",
+        "ColumnsToUnpivot",
+        "UnpivotedLabelColumnName",
+        "UnpivotedLabelColumnId",
+        "UnpivotedValueColumnName",
+        "UnpivotedValueColumnId"
+      ],
+      "members":{
+        "Alias":{
+          "shape":"TransformOperationAlias",
+          "documentation":"<p>Alias for this operation.</p>"
+        },
+        "Source":{
+          "shape":"TransformOperationSource",
+          "documentation":"<p>The source transform operation that provides input data for unpivoting.</p>"
+        },
+        "ColumnsToUnpivot":{
+          "shape":"ColumnToUnpivotList",
+          "documentation":"<p>The list of columns to unpivot from the source data.</p>"
+        },
+        "UnpivotedLabelColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name for the new column that will contain the unpivoted column names.</p>"
+        },
+        "UnpivotedLabelColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the new column that will contain the unpivoted column names.</p>"
+        },
+        "UnpivotedValueColumnName":{
+          "shape":"ColumnName",
+          "documentation":"<p>The name for the new column that will contain the unpivoted values.</p>"
+        },
+        "UnpivotedValueColumnId":{
+          "shape":"ColumnId",
+          "documentation":"<p>A unique identifier for the new column that will contain the unpivoted values.</p>"
+        }
+      },
+      "documentation":"<p>A transform operation that converts columns into rows, normalizing the data structure.</p>"
+    },
     "UnsupportedPricingPlanException":{
       "type":"structure",
       "members":{
@@ -34816,7 +38452,7 @@
           "documentation":"<p>The Amazon Web Services request ID for this request.</p>"
         }
       },
-      "documentation":"<p>This error indicates that you are calling an embedding operation in Amazon QuickSight without the required pricing plan on your Amazon Web Services account. Before you can use embedding for anonymous users, a QuickSight administrator needs to add capacity pricing to Amazon QuickSight. You can do this on the <b>Manage Amazon QuickSight</b> page. </p> <p>After capacity pricing is added, you can use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html\">GetDashboardEmbedUrl</a> </code> API operation with the <code>--identity-type ANONYMOUS</code> option.</p>",
+      "documentation":"<p>This error indicates that you are calling an embedding operation in Amazon Quick Sight without the required pricing plan on your Amazon Web Services account. Before you can use embedding for anonymous users, a Quick Suite administrator needs to add capacity pricing to Quick Sight. You can do this on the <b>Manage Quick Suite</b> page. </p> <p>After capacity pricing is added, you can use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_GetDashboardEmbedUrl.html\">GetDashboardEmbedUrl</a> </code> API operation with the <code>--identity-type ANONYMOUS</code> option.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
     },
@@ -34829,7 +38465,7 @@
           "documentation":"<p>The Amazon Web Services request ID for this request.</p>"
         }
       },
-      "documentation":"<p>This error indicates that you are calling an operation on an Amazon QuickSight subscription where the edition doesn't include support for that operation. Amazon Amazon QuickSight currently has Standard Edition and Enterprise Edition. Not every operation and capability is available in every edition.</p>",
+      "documentation":"<p>This error indicates that you are calling an operation on an Amazon Quick Suite subscription where the edition doesn't include support for that operation. Amazon Quick Suite currently has Standard Edition and Enterprise Edition. Not every operation and capability is available in every edition.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
     },
@@ -34886,6 +38522,38 @@
         }
       }
     },
+    "UpdateAccountCustomPermissionRequest":{
+      "type":"structure",
+      "required":[
+        "CustomPermissionsName",
+        "AwsAccountId"
+      ],
+      "members":{
+        "CustomPermissionsName":{
+          "shape":"CustomPermissionsName",
+          "documentation":"<p>The name of the custom permissions profile that you want to apply to an account.</p>"
+        },
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account for which you want to apply a custom permissions profile.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        }
+      }
+    },
+    "UpdateAccountCustomPermissionResponse":{
+      "type":"structure",
+      "members":{
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>"
+        }
+      }
+    },
     "UpdateAccountCustomizationRequest":{
       "type":"structure",
       "required":[
@@ -34895,19 +38563,19 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to update Amazon QuickSight customizations for.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to update Quick Sight customizations for.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The namespace that you want to update Amazon QuickSight customizations for.</p>",
+          "documentation":"<p>The namespace that you want to update Quick Sight customizations for.</p>",
           "location":"querystring",
           "locationName":"namespace"
         },
         "AccountCustomization":{
           "shape":"AccountCustomization",
-          "documentation":"<p>The Amazon QuickSight customizations you're updating in the current Amazon Web Services Region. </p>"
+          "documentation":"<p>The Quick Sight customizations you're updating. </p>"
         }
       }
     },
@@ -34920,7 +38588,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to update Amazon QuickSight customizations for.</p>"
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to update Quick Sight customizations for.</p>"
         },
         "Namespace":{
           "shape":"Namespace",
@@ -34928,7 +38596,7 @@
         },
         "AccountCustomization":{
           "shape":"AccountCustomization",
-          "documentation":"<p>The Amazon QuickSight customizations you're updating in the current Amazon Web Services Region. </p>"
+          "documentation":"<p>The Quick Sight customizations you're updating. </p>"
         },
         "RequestId":{
           "shape":"String",
@@ -34950,21 +38618,21 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that contains the Amazon QuickSight settings that you want to list.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that contains the Quick Sight settings that you want to list.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "DefaultNamespace":{
           "shape":"Namespace",
-          "documentation":"<p>The default namespace for this Amazon Web Services account. Currently, the default is <code>default</code>. IAM users that register for the first time with Amazon QuickSight provide an email address that becomes associated with the default namespace. </p>"
+          "documentation":"<p>The default namespace for this Amazon Web Services account. Currently, the default is <code>default</code>. IAM users that register for the first time with Amazon Quick Sight provide an email address that becomes associated with the default namespace. </p>"
         },
         "NotificationEmail":{
           "shape":"String",
-          "documentation":"<p>The email address that you want Amazon QuickSight to send notifications to regarding your Amazon Web Services account or Amazon QuickSight subscription.</p>"
+          "documentation":"<p>The email address that you want Quick Sight to send notifications to regarding your Amazon Web Services account or Quick Sight subscription.</p>"
         },
         "TerminationProtectionEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>A boolean value that determines whether or not an Amazon QuickSight account can be deleted. A <code>True</code> value doesn't allow the account to be deleted and results in an error message if a user tries to make a <code>DeleteAccountSubscription</code> request. A <code>False</code> value will allow the account to be deleted.</p>"
+          "documentation":"<p>A boolean value that determines whether or not an Quick Sight account can be deleted. A <code>True</code> value doesn't allow the account to be deleted and results in an error message if a user tries to make a <code>DeleteAccountSubscription</code> request. A <code>False</code> value will allow the account to be deleted.</p>"
         }
       }
     },
@@ -34982,6 +38650,126 @@
         }
       }
     },
+    "UpdateActionConnectorPermissionsRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that contains the action connector.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector whose permissions you want to update.</p>",
+          "location":"uri",
+          "locationName":"ActionConnectorId"
+        },
+        "GrantPermissions":{
+          "shape":"ResourcePermissionList",
+          "documentation":"<p>The permissions to grant to users and groups for this action connector.</p>"
+        },
+        "RevokePermissions":{
+          "shape":"ResourcePermissionList",
+          "documentation":"<p>The permissions to revoke from users and groups for this action connector.</p>"
+        }
+      }
+    },
+    "UpdateActionConnectorPermissionsResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        },
+        "Permissions":{
+          "shape":"ResourcePermissionList",
+          "documentation":"<p>The updated permissions configuration for the action connector.</p>"
+        }
+      }
+    },
+    "UpdateActionConnectorRequest":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "ActionConnectorId",
+        "Name",
+        "AuthenticationConfig"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AwsAccountId",
+          "documentation":"<p>The Amazon Web Services account ID that contains the action connector to update.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the action connector to update.</p>",
+          "location":"uri",
+          "locationName":"ActionConnectorId"
+        },
+        "Name":{
+          "shape":"ActionConnectorName",
+          "documentation":"<p>The new name for the action connector.</p>"
+        },
+        "AuthenticationConfig":{
+          "shape":"AuthConfig",
+          "documentation":"<p>The updated authentication configuration for connecting to the external service.</p>"
+        },
+        "Description":{
+          "shape":"ActionConnectorDescription",
+          "documentation":"<p>The updated description of the action connector.</p>"
+        },
+        "VpcConnectionArn":{
+          "shape":"Arn",
+          "documentation":"<p>The updated ARN of the VPC connection to use for secure connectivity.</p>"
+        }
+      }
+    },
+    "UpdateActionConnectorResponse":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the updated action connector.</p>"
+        },
+        "ActionConnectorId":{
+          "shape":"ShortRestrictiveResourceId",
+          "documentation":"<p>The unique identifier of the updated action connector.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "UpdateStatus":{
+          "shape":"ResourceStatus",
+          "documentation":"<p>The status of the update operation.</p>"
+        },
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status code of the request.</p>",
+          "location":"statusCode"
+        }
+      }
+    },
     "UpdateAnalysisPermissionsRequest":{
       "type":"structure",
       "required":[
@@ -35059,7 +38847,7 @@
         },
         "Name":{
           "shape":"AnalysisName",
-          "documentation":"<p>A descriptive name for the analysis that you're updating. This name displays for the analysis in the Amazon QuickSight console.</p>"
+          "documentation":"<p>A descriptive name for the analysis that you're updating. This name displays for the analysis in the Amazon Quick Sight console.</p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -35071,7 +38859,7 @@
         },
         "ThemeArn":{
           "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) for the theme to apply to the analysis that you're creating. To see the theme in the Amazon QuickSight console, make sure that you have access to it.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) for the theme to apply to the analysis that you're creating. To see the theme in the Amazon Quick Sight console, make sure that you have access to it.</p>"
         },
         "Definition":{
           "shape":"AnalysisDefinition",
@@ -35124,7 +38912,7 @@
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The namespace of the Amazon QuickSight application.</p>",
+          "documentation":"<p>The namespace of the Quick Suite application.</p>",
           "location":"querystring",
           "locationName":"namespace"
         }
@@ -35192,7 +38980,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         },
@@ -35230,7 +39018,7 @@
         },
         "BrandId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The ID of the Amazon QuickSight brand.</p>",
+          "documentation":"<p>The ID of the Quick Suite brand.</p>",
           "location":"uri",
           "locationName":"BrandId"
         },
@@ -35410,7 +39198,7 @@
         },
         "LinkSharingConfiguration":{
           "shape":"LinkSharingConfiguration",
-          "documentation":"<p>Updates the permissions of a shared link to an Amazon QuickSight dashboard.</p>"
+          "documentation":"<p>Updates the permissions of a shared link to an Quick Sight dashboard.</p>"
         }
       }
     },
@@ -35490,7 +39278,7 @@
         },
         "SourceEntity":{
           "shape":"DashboardSourceEntity",
-          "documentation":"<p>The entity that you are using as a source when you update the dashboard. In <code>SourceEntity</code>, you specify the type of object you're using as source. You can only update a dashboard from a template, so you use a <code>SourceTemplate</code> entity. If you need to update a dashboard from an analysis, first convert the analysis to a template by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation. For <code>SourceTemplate</code>, specify the Amazon Resource Name (ARN) of the source template. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Amazon QuickSight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p>"
+          "documentation":"<p>The entity that you are using as a source when you update the dashboard. In <code>SourceEntity</code>, you specify the type of object you're using as source. You can only update a dashboard from a template, so you use a <code>SourceTemplate</code> entity. If you need to update a dashboard from an analysis, first convert the analysis to a template by using the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_CreateTemplate.html\">CreateTemplate</a> </code> API operation. For <code>SourceTemplate</code>, specify the Amazon Resource Name (ARN) of the source template. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Amazon Quick Sight-supported Amazon Web Services Region. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p>"
         },
         "Parameters":{
           "shape":"Parameters",
@@ -35502,7 +39290,7 @@
         },
         "DashboardPublishOptions":{
           "shape":"DashboardPublishOptions",
-          "documentation":"<p>Options for publishing the dashboard when you create it:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon QuickSight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> </ul>"
+          "documentation":"<p>Options for publishing the dashboard when you create it:</p> <ul> <li> <p> <code>AvailabilityStatus</code> for <code>AdHocFilteringOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. When this is set to <code>DISABLED</code>, Amazon Quick Sight disables the left filter pane on the published dashboard, which can be used for ad hoc (one-time) filtering. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExportToCSVOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The visual option to export data to .CSV format isn't enabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default. </p> </li> <li> <p> <code>VisibilityState</code> for <code>SheetControlsOption</code> - This visibility state can be either <code>COLLAPSED</code> or <code>EXPANDED</code>. This option is <code>COLLAPSED</code> by default. </p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>QuickSuiteActionsOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. Features related to Actions in Amazon Quick Suite on dashboards are disabled when this is set to <code>DISABLED</code>. This option is <code>DISABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>ExecutiveSummaryOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to build an executive summary is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> <li> <p> <code>AvailabilityStatus</code> for <code>DataStoriesSharingOption</code> - This status can be either <code>ENABLED</code> or <code>DISABLED</code>. The option to share a data story is disabled when this is set to <code>DISABLED</code>. This option is <code>ENABLED</code> by default.</p> </li> </ul>"
         },
         "ThemeArn":{
           "shape":"Arn",
@@ -35667,7 +39455,10 @@
         },
         "LogicalTableMap":{
           "shape":"LogicalTableMap",
-          "documentation":"<p>Configures the combination and transformation of the data from the physical tables.</p>"
+          "documentation":"<p>Configures the combination and transformation of the data from the physical tables. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "ImportMode":{
           "shape":"DataSetImportMode",
@@ -35675,7 +39466,7 @@
         },
         "ColumnGroups":{
           "shape":"ColumnGroupList",
-          "documentation":"<p>Groupings of columns that work together in certain Amazon QuickSight features. Currently, only geospatial hierarchy is supported.</p>"
+          "documentation":"<p>Groupings of columns that work together in certain Amazon Quick Sight features. Currently, only geospatial hierarchy is supported.</p>"
         },
         "FieldFolders":{
           "shape":"FieldFolderMap",
@@ -35683,11 +39474,17 @@
         },
         "RowLevelPermissionDataSet":{
           "shape":"RowLevelPermissionDataSet",
-          "documentation":"<p>The row-level security configuration for the data you want to create.</p>"
+          "documentation":"<p>The row-level security configuration for the data you want to create. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "RowLevelPermissionTagConfiguration":{
           "shape":"RowLevelPermissionTagConfiguration",
-          "documentation":"<p>The configuration of tags on a dataset to set row-level security. Row-level security tags are currently supported for anonymous embedding only.</p>"
+          "documentation":"<p>The configuration of tags on a dataset to set row-level security. Row-level security tags are currently supported for anonymous embedding only. This parameter is used with the legacy data preparation experience.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"Only used in the legacy data preparation experience.",
+          "deprecatedSince":"2025-10-23"
         },
         "ColumnLevelPermissionRules":{
           "shape":"ColumnLevelPermissionRuleList",
@@ -35701,6 +39498,14 @@
         "PerformanceConfiguration":{
           "shape":"PerformanceConfiguration",
           "documentation":"<p>The configuration for the performance optimization of the dataset that contains a <code>UniqueKey</code> configuration.</p>"
+        },
+        "DataPrepConfiguration":{
+          "shape":"DataPrepConfiguration",
+          "documentation":"<p>The data preparation configuration for the dataset. This configuration defines the source tables, transformation steps, and destination tables used to prepare the data. Required when using the new data preparation experience.</p>"
+        },
+        "SemanticModelConfiguration":{
+          "shape":"SemanticModelConfiguration",
+          "documentation":"<p>The semantic model configuration for the dataset. This configuration defines how the prepared data is structured for an analysis, including table mappings and row-level security configurations. Required when using the new data preparation experience.</p>"
         }
       }
     },
@@ -35713,7 +39518,7 @@
         },
         "DataSetId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID for the dataset that you want to create. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
+          "documentation":"<p>The ID for the dataset that you want to update. This ID is unique per Amazon Web Services Region for each Amazon Web Services account.</p>"
         },
         "IngestionArn":{
           "shape":"Arn",
@@ -35811,19 +39616,19 @@
         },
         "DataSourceParameters":{
           "shape":"DataSourceParameters",
-          "documentation":"<p>The parameters that Amazon QuickSight uses to connect to your underlying source.</p>"
+          "documentation":"<p>The parameters that Amazon Quick Sight uses to connect to your underlying source.</p>"
         },
         "Credentials":{
           "shape":"DataSourceCredentials",
-          "documentation":"<p>The credentials that Amazon QuickSight that uses to connect to your underlying source. Currently, only credentials based on user name and password are supported.</p>"
+          "documentation":"<p>The credentials that Amazon Quick Sight that uses to connect to your underlying source. Currently, only credentials based on user name and password are supported.</p>"
         },
         "VpcConnectionProperties":{
           "shape":"VpcConnectionProperties",
-          "documentation":"<p>Use this parameter only when you want Amazon QuickSight to use a VPC connection when connecting to your underlying source.</p>"
+          "documentation":"<p>Use this parameter only when you want Amazon Quick Sight to use a VPC connection when connecting to your underlying source.</p>"
         },
         "SslProperties":{
           "shape":"SslProperties",
-          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your underlying source.</p>"
+          "documentation":"<p>Secure Socket Layer (SSL) properties that apply when Amazon Quick Sight connects to your underlying source.</p>"
         }
       }
     },
@@ -35862,13 +39667,13 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon QuickSight account that is connected to the Amazon Q Business application that you want to update.</p>",
+          "documentation":"<p>The ID of the Quick Sight account that is connected to the Amazon Q Business application that you want to update.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "Namespace":{
           "shape":"Namespace",
-          "documentation":"<p>The Amazon QuickSight namespace that contains the linked Amazon Q Business application. If this field is left blank, the default namespace is used. Currently, the default namespace is the only valid value for this parameter.</p>",
+          "documentation":"<p>The Quick Sight namespace that contains the linked Amazon Q Business application. If this field is left blank, the default namespace is used. Currently, the default namespace is the only valid value for this parameter.</p>",
           "location":"querystring",
           "locationName":"namespace"
         },
@@ -35892,6 +39697,79 @@
         }
       }
     },
+    "UpdateFlowPermissionsInput":{
+      "type":"structure",
+      "required":[
+        "AwsAccountId",
+        "FlowId"
+      ],
+      "members":{
+        "AwsAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the flow you are updating permissions against.</p>",
+          "location":"uri",
+          "locationName":"AwsAccountId"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow to update permissions for.</p>",
+          "location":"uri",
+          "locationName":"FlowId"
+        },
+        "GrantPermissions":{
+          "shape":"UpdateFlowPermissionsInputGrantPermissionsList",
+          "documentation":"<p>The permissions that you want to grant on this flow.</p>"
+        },
+        "RevokePermissions":{
+          "shape":"UpdateFlowPermissionsInputRevokePermissionsList",
+          "documentation":"<p>The permissions that you want to revoke from this flow.</p>"
+        }
+      }
+    },
+    "UpdateFlowPermissionsInputGrantPermissionsList":{
+      "type":"list",
+      "member":{"shape":"Permission"},
+      "max":100,
+      "min":0
+    },
+    "UpdateFlowPermissionsInputRevokePermissionsList":{
+      "type":"list",
+      "member":{"shape":"Permission"},
+      "max":100,
+      "min":0
+    },
+    "UpdateFlowPermissionsOutput":{
+      "type":"structure",
+      "required":[
+        "Arn",
+        "Permissions",
+        "RequestId",
+        "FlowId"
+      ],
+      "members":{
+        "Status":{
+          "shape":"StatusCode",
+          "documentation":"<p>The HTTP status of the request.</p>",
+          "location":"statusCode"
+        },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the flow you are updating permissions against.</p>"
+        },
+        "Permissions":{
+          "shape":"PermissionsList",
+          "documentation":"<p>The permissions on the flow after they are updated.</p>"
+        },
+        "RequestId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services request ID for this operation.</p>"
+        },
+        "FlowId":{
+          "shape":"FlowId",
+          "documentation":"<p>The unique identifier of the flow with updated permissions.</p>"
+        }
+      }
+    },
     "UpdateFolderPermissionsRequest":{
       "type":"structure",
       "required":[
@@ -36014,7 +39892,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the group is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -36076,11 +39954,11 @@
         },
         "PolicyArn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN for the IAM policy to apply to the Amazon QuickSight users and groups specified in this assignment.</p>"
+          "documentation":"<p>The ARN for the IAM policy to apply to the Amazon Quick Sight users and groups specified in this assignment.</p>"
         },
         "Identities":{
           "shape":"IdentityMap",
-          "documentation":"<p>The Amazon QuickSight users, groups, or both that you want to assign the policy to.</p>"
+          "documentation":"<p>The Amazon Quick Sight users, groups, or both that you want to assign the policy to.</p>"
         }
       }
     },
@@ -36097,11 +39975,11 @@
         },
         "PolicyArn":{
           "shape":"Arn",
-          "documentation":"<p>The ARN for the IAM policy applied to the Amazon QuickSight users and groups specified in this assignment.</p>"
+          "documentation":"<p>The ARN for the IAM policy applied to the Amazon Quick Sight users and groups specified in this assignment.</p>"
         },
         "Identities":{
           "shape":"IdentityMap",
-          "documentation":"<p>The Amazon QuickSight users, groups, or both that the IAM policy is assigned to.</p>"
+          "documentation":"<p>The Amazon Quick Sight users, groups, or both that the IAM policy is assigned to.</p>"
         },
         "AssignmentStatus":{
           "shape":"AssignmentStatus",
@@ -36218,7 +40096,7 @@
         },
         "KeyRegistration":{
           "shape":"KeyRegistration",
-          "documentation":"<p>A list of <code>RegisteredCustomerManagedKey</code> objects to be updated to the Amazon QuickSight account.</p>"
+          "documentation":"<p>A list of <code>RegisteredCustomerManagedKey</code> objects to be updated to the Quick Sight account.</p>"
         }
       }
     },
@@ -36250,13 +40128,13 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The Amazon Web Services account ID associated with your Amazon QuickSight subscription.</p>",
+          "documentation":"<p>The Amazon Web Services account ID associated with your Amazon Quick Sight subscription.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "PublicSharingEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>A Boolean value that indicates whether public sharing is turned on for an Amazon QuickSight account.</p>"
+          "documentation":"<p>A Boolean value that indicates whether public sharing is turned on for an Quick Suite account.</p>"
         }
       }
     },
@@ -36289,7 +40167,7 @@
         },
         "PersonalizationMode":{
           "shape":"PersonalizationMode",
-          "documentation":"<p>An option to allow Amazon QuickSight to customize data stories with user specific metadata, specifically location and job information, in your IAM Identity Center instance.</p>"
+          "documentation":"<p>An option to allow Amazon Quick Sight to customize data stories with user specific metadata, specifically location and job information, in your IAM Identity Center instance.</p>"
         }
       }
     },
@@ -36320,13 +40198,13 @@
       "members":{
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID of the Amazon Web Services account that contains the Amazon QuickSight Q Search configuration that you want to update.</p>",
+          "documentation":"<p>The ID of the Amazon Web Services account that contains the Quick Sight Q Search configuration that you want to update.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
         "QSearchStatus":{
           "shape":"QSearchStatus",
-          "documentation":"<p>The status of the Amazon QuickSight Q Search configuration that the user wants to update.</p>"
+          "documentation":"<p>The status of the Quick Sight Q Search configuration that the user wants to update.</p>"
         }
       }
     },
@@ -36335,7 +40213,7 @@
       "members":{
         "QSearchStatus":{
           "shape":"QSearchStatus",
-          "documentation":"<p>The status of the Amazon QuickSight Q Search configuration.</p>"
+          "documentation":"<p>The status of the Quick Sight Q Search configuration.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -36422,7 +40300,7 @@
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that you want to create a group in. The Amazon Web Services account ID that you provide must be the same Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -36607,7 +40485,7 @@
         },
         "SourceEntity":{
           "shape":"TemplateSourceEntity",
-          "documentation":"<p>The entity that you are using as a source when you update the template. In <code>SourceEntity</code>, you specify the type of object you're using as source: <code>SourceTemplate</code> for a template or <code>SourceAnalysis</code> for an analysis. Both of these require an Amazon Resource Name (ARN). For <code>SourceTemplate</code>, specify the ARN of the source template. For <code>SourceAnalysis</code>, specify the ARN of the source analysis. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Amazon QuickSight-supported Amazon Web Services Region;. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> or <code>SourceAnalysis</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p>"
+          "documentation":"<p>The entity that you are using as a source when you update the template. In <code>SourceEntity</code>, you specify the type of object you're using as source: <code>SourceTemplate</code> for a template or <code>SourceAnalysis</code> for an analysis. Both of these require an Amazon Resource Name (ARN). For <code>SourceTemplate</code>, specify the ARN of the source template. For <code>SourceAnalysis</code>, specify the ARN of the source analysis. The <code>SourceTemplate</code> ARN can contain any Amazon Web Services account and any Quick Sight-supported Amazon Web Services Region;. </p> <p>Use the <code>DataSetReferences</code> entity within <code>SourceTemplate</code> or <code>SourceAnalysis</code> to list the replacement datasets for the placeholders listed in the original. The schema in each dataset must match its placeholder. </p>"
         },
         "VersionDescription":{
           "shape":"VersionDescription",
@@ -36789,7 +40667,7 @@
         },
         "BaseThemeId":{
           "shape":"ShortRestrictiveResourceId",
-          "documentation":"<p>The theme ID, defined by Amazon QuickSight, that a custom theme inherits from. All themes initially inherit from a default Amazon QuickSight theme.</p>"
+          "documentation":"<p>The theme ID, defined by Amazon Quick Sight, that a custom theme inherits from. All themes initially inherit from a default Quick Sight theme.</p>"
         },
         "VersionDescription":{
           "shape":"VersionDescription",
@@ -36968,6 +40846,10 @@
         "Topic":{
           "shape":"TopicDetails",
           "documentation":"<p>The definition of the topic that you want to update.</p>"
+        },
+        "CustomInstructions":{
+          "shape":"CustomInstructions",
+          "documentation":"<p>Custom instructions for the topic.</p>"
         }
       }
     },
@@ -37056,13 +40938,13 @@
       "members":{
         "UserName":{
           "shape":"UserName",
-          "documentation":"<p>The Amazon QuickSight user name that you want to update.</p>",
+          "documentation":"<p>The Amazon Quick Sight user name that you want to update.</p>",
           "location":"uri",
           "locationName":"UserName"
         },
         "AwsAccountId":{
           "shape":"AwsAccountId",
-          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon QuickSight account.</p>",
+          "documentation":"<p>The ID for the Amazon Web Services account that the user is in. Currently, you use the ID for the Amazon Web Services account that contains your Amazon Quick Sight account.</p>",
           "location":"uri",
           "locationName":"AwsAccountId"
         },
@@ -37078,11 +40960,11 @@
         },
         "Role":{
           "shape":"UserRole",
-          "documentation":"<p>The Amazon QuickSight role of the user. The role can be one of the following default security cohorts:</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon QuickSight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Amazon QuickSight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Amazon QuickSight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> </ul> <p>The name of the Amazon QuickSight role is invisible to the user except for the console screens dealing with permissions.</p>"
+          "documentation":"<p>The Amazon Quick Sight role of the user. The role can be one of the following default security cohorts:</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon Quick Sight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Quick Sight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Amazon Quick Sight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> </ul> <p>The name of the Quick Sight role is invisible to the user except for the console screens dealing with permissions.</p>"
         },
         "CustomPermissionsName":{
           "shape":"RoleName",
-          "documentation":"<p>(Enterprise edition only) The name of the custom permissions profile that you want to assign to this user. Customized permissions allows you to control a user's access by restricting access the following operations:</p> <ul> <li> <p>Create and update data sources</p> </li> <li> <p>Create and update datasets</p> </li> <li> <p>Create and update email reports</p> </li> <li> <p>Subscribe to email reports</p> </li> </ul> <p>A set of custom permissions includes any combination of these restrictions. Currently, you need to create the profile names for custom permission sets by using the Amazon QuickSight console. Then, you use the <code>RegisterUser</code> API operation to assign the named set of permissions to a Amazon QuickSight user. </p> <p>Amazon QuickSight custom permissions are applied through IAM policies. Therefore, they override the permissions typically granted by assigning Amazon QuickSight users to one of the default security cohorts in Amazon QuickSight (admin, author, reader).</p> <p>This feature is available only to Amazon QuickSight Enterprise edition subscriptions.</p>"
+          "documentation":"<p>(Enterprise edition only) The name of the custom permissions profile that you want to assign to this user. Customized permissions allows you to control a user's access by restricting access the following operations:</p> <ul> <li> <p>Create and update data sources</p> </li> <li> <p>Create and update datasets</p> </li> <li> <p>Create and update email reports</p> </li> <li> <p>Subscribe to email reports</p> </li> </ul> <p>A set of custom permissions includes any combination of these restrictions. Currently, you need to create the profile names for custom permission sets by using the Quick Sight console. Then, you use the <code>RegisterUser</code> API operation to assign the named set of permissions to a Quick Sight user. </p> <p>Quick Sight custom permissions are applied through IAM policies. Therefore, they override the permissions typically granted by assigning Quick Sight users to one of the default security cohorts in Quick Sight (admin, author, reader).</p> <p>This feature is available only to Quick Sight Enterprise edition subscriptions.</p>"
         },
         "UnapplyCustomPermissions":{
           "shape":"Boolean",
@@ -37090,11 +40972,11 @@
         },
         "ExternalLoginFederationProviderType":{
           "shape":"String",
-          "documentation":"<p>The type of supported external login provider that provides identity to let a user federate into Amazon QuickSight with an associated Identity and Access Management(IAM) role. The type of supported external login provider can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com. When choosing the <code>COGNITO</code> provider type, don’t use the \"CustomFederationProviderUrl\" parameter which is only needed when the external provider is custom.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider. When choosing <code>CUSTOM_OIDC</code> type, use the <code>CustomFederationProviderUrl</code> parameter to provide the custom OIDC provider URL.</p> </li> <li> <p> <code>NONE</code>: This clears all the previously saved external login information for a user. Use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html\">DescribeUser</a> </code> API operation to check the external login information.</p> </li> </ul>"
+          "documentation":"<p>The type of supported external login provider that provides identity to let a user federate into Quick Sight with an associated Identity and Access Management(IAM) role. The type of supported external login provider can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com. When choosing the <code>COGNITO</code> provider type, don’t use the \"CustomFederationProviderUrl\" parameter which is only needed when the external provider is custom.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider. When choosing <code>CUSTOM_OIDC</code> type, use the <code>CustomFederationProviderUrl</code> parameter to provide the custom OIDC provider URL.</p> </li> <li> <p> <code>NONE</code>: This clears all the previously saved external login information for a user. Use the <code> <a href=\"https://docs.aws.amazon.com/quicksight/latest/APIReference/API_DescribeUser.html\">DescribeUser</a> </code> API operation to check the external login information.</p> </li> </ul>"
         },
         "CustomFederationProviderUrl":{
           "shape":"String",
-          "documentation":"<p>The URL of the custom OpenID Connect (OIDC) provider that provides identity to let a user federate into Amazon QuickSight with an associated Identity and Access Management(IAM) role. This parameter should only be used when <code>ExternalLoginFederationProviderType</code> parameter is set to <code>CUSTOM_OIDC</code>.</p>"
+          "documentation":"<p>The URL of the custom OpenID Connect (OIDC) provider that provides identity to let a user federate into Quick Sight with an associated Identity and Access Management(IAM) role. This parameter should only be used when <code>ExternalLoginFederationProviderType</code> parameter is set to <code>CUSTOM_OIDC</code>.</p>"
         },
         "ExternalLoginId":{
           "shape":"String",
@@ -37107,7 +40989,7 @@
       "members":{
         "User":{
           "shape":"User",
-          "documentation":"<p>The Amazon QuickSight user.</p>"
+          "documentation":"<p>The Amazon Quick Sight user.</p>"
         },
         "RequestId":{
           "shape":"String",
@@ -37219,6 +41101,10 @@
         "Delimiter":{
           "shape":"Delimiter",
           "documentation":"<p>The delimiter between values in the file.</p>"
+        },
+        "CustomCellAddressRange":{
+          "shape":"String",
+          "documentation":"<p>A custom cell address range for Excel files, specifying which cells to import from the spreadsheet.</p>"
         }
       },
       "documentation":"<p>Information about the format for a source file or files.</p>"
@@ -37232,7 +41118,7 @@
         },
         "UserName":{
           "shape":"UserName",
-          "documentation":"<p>The user's user name. This value is required if you are registering a user that will be managed in Amazon QuickSight. In the output, the value for <code>UserName</code> is <code>N/A</code> when the value for <code>IdentityType</code> is <code>IAM</code> and the corresponding IAM user is deleted.</p>"
+          "documentation":"<p>The user's user name. This value is required if you are registering a user that will be managed in Quick Sight. In the output, the value for <code>UserName</code> is <code>N/A</code> when the value for <code>IdentityType</code> is <code>IAM</code> and the corresponding IAM user is deleted.</p>"
         },
         "Email":{
           "shape":"String",
@@ -37240,7 +41126,7 @@
         },
         "Role":{
           "shape":"UserRole",
-          "documentation":"<p>The Amazon QuickSight role for the user. The user role can be one of the following:.</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon Amazon QuickSight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Amazon QuickSight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Amazon QuickSight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> <li> <p> <code>RESTRICTED_READER</code>: This role isn't currently available for use.</p> </li> <li> <p> <code>RESTRICTED_AUTHOR</code>: This role isn't currently available for use.</p> </li> </ul>"
+          "documentation":"<p>The Quick Sight role for the user. The user role can be one of the following:.</p> <ul> <li> <p> <code>READER</code>: A user who has read-only access to dashboards.</p> </li> <li> <p> <code>AUTHOR</code>: A user who can create data sources, datasets, analyses, and dashboards.</p> </li> <li> <p> <code>ADMIN</code>: A user who is an author, who can also manage Amazon Quick Sight settings.</p> </li> <li> <p> <code>READER_PRO</code>: Reader Pro adds Generative BI capabilities to the Reader role. Reader Pros have access to Amazon Q in Quick Sight, can build stories with Amazon Q, and can generate executive summaries from dashboards.</p> </li> <li> <p> <code>AUTHOR_PRO</code>: Author Pro adds Generative BI capabilities to the Author role. Author Pros can author dashboards with natural language with Amazon Q, build stories with Amazon Q, create Topics for Q&amp;A, and generate executive summaries from dashboards.</p> </li> <li> <p> <code>ADMIN_PRO</code>: Admin Pros are Author Pros who can also manage Quick Sight administrative settings. Admin Pro users are billed at Author Pro pricing.</p> </li> <li> <p> <code>RESTRICTED_READER</code>: This role isn't currently available for use.</p> </li> <li> <p> <code>RESTRICTED_AUTHOR</code>: This role isn't currently available for use.</p> </li> </ul>"
         },
         "IdentityType":{
           "shape":"IdentityType",
@@ -37248,7 +41134,7 @@
         },
         "Active":{
           "shape":"Boolean",
-          "documentation":"<p>The active status of user. When you create an Amazon QuickSight user that's not an IAM user or an Active Directory user, that user is inactive until they sign in and provide a password.</p>"
+          "documentation":"<p>The active status of user. When you create an Quick Sight user that's not an IAM user or an Active Directory user, that user is inactive until they sign in and provide a password.</p>"
         },
         "PrincipalId":{
           "shape":"String",
@@ -37260,7 +41146,7 @@
         },
         "ExternalLoginFederationProviderType":{
           "shape":"String",
-          "documentation":"<p>The type of supported external login provider that provides identity to let the user federate into Amazon QuickSight with an associated IAM role. The type can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider.</p> </li> </ul>"
+          "documentation":"<p>The type of supported external login provider that provides identity to let the user federate into Quick Sight with an associated IAM role. The type can be one of the following.</p> <ul> <li> <p> <code>COGNITO</code>: Amazon Cognito. The provider URL is cognito-identity.amazonaws.com.</p> </li> <li> <p> <code>CUSTOM_OIDC</code>: Custom OpenID Connect (OIDC) provider.</p> </li> </ul>"
         },
         "ExternalLoginFederationProviderUrl":{
           "shape":"String",
@@ -37271,7 +41157,7 @@
           "documentation":"<p>The identity ID for the user in the external login provider.</p>"
         }
       },
-      "documentation":"<p>A registered user of Amazon QuickSight. </p>"
+      "documentation":"<p>A registered user of Quick Sight. </p>"
     },
     "UserList":{
       "type":"list",
@@ -37458,6 +41344,16 @@
         "LENIENT"
       ]
     },
+    "ValueColumnConfiguration":{
+      "type":"structure",
+      "members":{
+        "AggregationFunction":{
+          "shape":"DataPrepAggregationFunction",
+          "documentation":"<p>The aggregation function to apply when multiple values map to the same pivoted cell.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for how to handle value columns in pivot operations, including aggregation settings.</p>"
+    },
     "ValueWhenUnsetOption":{
       "type":"string",
       "enum":[
@@ -37515,47 +41411,47 @@
       "members":{
         "TableVisual":{
           "shape":"TableVisual",
-          "documentation":"<p>A table visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tabular.html\">Using tables as visuals</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A table visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tabular.html\">Using tables as visuals</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "PivotTableVisual":{
           "shape":"PivotTableVisual",
-          "documentation":"<p>A pivot table.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pivot-table.html\">Using pivot tables</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A pivot table.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pivot-table.html\">Using pivot tables</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "BarChartVisual":{
           "shape":"BarChartVisual",
-          "documentation":"<p>A bar chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/bar-charts.html\">Using bar charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A bar chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/bar-charts.html\">Using bar charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "KPIVisual":{
           "shape":"KPIVisual",
-          "documentation":"<p>A key performance indicator (KPI).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/kpi.html\">Using KPIs</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A key performance indicator (KPI).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/kpi.html\">Using KPIs</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "PieChartVisual":{
           "shape":"PieChartVisual",
-          "documentation":"<p>A pie or donut chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pie-chart.html\">Using pie charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A pie or donut chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/pie-chart.html\">Using pie charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "GaugeChartVisual":{
           "shape":"GaugeChartVisual",
-          "documentation":"<p>A gauge chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/gauge-chart.html\">Using gauge charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A gauge chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/gauge-chart.html\">Using gauge charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "LineChartVisual":{
           "shape":"LineChartVisual",
-          "documentation":"<p>A line chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/line-charts.html\">Using line charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A line chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/line-charts.html\">Using line charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "HeatMapVisual":{
           "shape":"HeatMapVisual",
-          "documentation":"<p>A heat map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/heat-map.html\">Using heat maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A heat map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/heat-map.html\">Using heat maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "TreeMapVisual":{
           "shape":"TreeMapVisual",
-          "documentation":"<p>A tree map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tree-map.html\">Using tree maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A tree map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/tree-map.html\">Using tree maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "GeospatialMapVisual":{
           "shape":"GeospatialMapVisual",
-          "documentation":"<p>A geospatial map or a points on map visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/point-maps.html\">Creating point maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A geospatial map or a points on map visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/point-maps.html\">Creating point maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "FilledMapVisual":{
           "shape":"FilledMapVisual",
-          "documentation":"<p>A filled map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filled-maps.html\">Creating filled maps</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A filled map.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/filled-maps.html\">Creating filled maps</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "LayerMapVisual":{
           "shape":"LayerMapVisual",
@@ -37563,43 +41459,43 @@
         },
         "FunnelChartVisual":{
           "shape":"FunnelChartVisual",
-          "documentation":"<p>A funnel chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/funnel-visual-content.html\">Using funnel charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A funnel chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/funnel-visual-content.html\">Using funnel charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "ScatterPlotVisual":{
           "shape":"ScatterPlotVisual",
-          "documentation":"<p>A scatter plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scatter-plot.html\">Using scatter plots</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A scatter plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/scatter-plot.html\">Using scatter plots</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "ComboChartVisual":{
           "shape":"ComboChartVisual",
-          "documentation":"<p>A combo chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/combo-charts.html\">Using combo charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A combo chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/combo-charts.html\">Using combo charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "BoxPlotVisual":{
           "shape":"BoxPlotVisual",
-          "documentation":"<p>A box plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/box-plots.html\">Using box plots</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A box plot.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/box-plots.html\">Using box plots</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "WaterfallVisual":{
           "shape":"WaterfallVisual",
-          "documentation":"<p>A waterfall chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/waterfall-chart.html\">Using waterfall charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A waterfall chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/waterfall-chart.html\">Using waterfall charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "HistogramVisual":{
           "shape":"HistogramVisual",
-          "documentation":"<p>A histogram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/histogram-charts.html\">Using histograms</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A histogram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/histogram-charts.html\">Using histograms</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "WordCloudVisual":{
           "shape":"WordCloudVisual",
-          "documentation":"<p>A word cloud.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/word-cloud.html\">Using word clouds</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A word cloud.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/word-cloud.html\">Using word clouds</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "InsightVisual":{
           "shape":"InsightVisual",
-          "documentation":"<p>An insight visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/computational-insights.html\">Working with insights</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>An insight visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/computational-insights.html\">Working with insights</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "SankeyDiagramVisual":{
           "shape":"SankeyDiagramVisual",
-          "documentation":"<p>A sankey diagram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sankey-diagram.html\">Using Sankey diagrams</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A sankey diagram.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/sankey-diagram.html\">Using Sankey diagrams</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "CustomContentVisual":{
           "shape":"CustomContentVisual",
-          "documentation":"<p>A visual that contains custom content.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/custom-visual-content.html\">Using custom visual content</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A visual that contains custom content.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/custom-visual-content.html\">Using custom visual content</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "EmptyVisual":{
           "shape":"EmptyVisual",
@@ -37607,7 +41503,7 @@
         },
         "RadarChartVisual":{
           "shape":"RadarChartVisual",
-          "documentation":"<p>A radar chart visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/radar-chart.html\">Using radar charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+          "documentation":"<p>A radar chart visual.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/radar-chart.html\">Using radar charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
         },
         "PluginVisual":{
           "shape":"PluginVisual",
@@ -37658,6 +41554,16 @@
       },
       "documentation":"<p>A custom action defined on a visual.</p>"
     },
+    "VisualCustomActionDefaults":{
+      "type":"structure",
+      "members":{
+        "highlightOperation":{
+          "shape":"VisualHighlightOperation",
+          "documentation":"<p>A list of highlight operations available for visuals in an analysis or sheet.</p>"
+        }
+      },
+      "documentation":"<p>A list of custom actions applied to visuals in an analysis or sheet.</p>"
+    },
     "VisualCustomActionList":{
       "type":"list",
       "member":{"shape":"VisualCustomAction"},
@@ -37703,6 +41609,25 @@
         "DATA_POINT_MENU"
       ]
     },
+    "VisualHighlightOperation":{
+      "type":"structure",
+      "required":["Trigger"],
+      "members":{
+        "Trigger":{
+          "shape":"VisualHighlightTrigger",
+          "documentation":"<p>Specifies whether a highlight operation is initiated by a click or hover, or whether it's disabled.</p>"
+        }
+      },
+      "documentation":"<p>Defines what initiates a highlight operation on a visual, such as a click or hover.</p>"
+    },
+    "VisualHighlightTrigger":{
+      "type":"string",
+      "enum":[
+        "DATA_POINT_CLICK",
+        "DATA_POINT_HOVER",
+        "NONE"
+      ]
+    },
     "VisualInteractionOptions":{
       "type":"structure",
       "members":{
@@ -38018,7 +41943,73 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A waterfall chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/waterfall-chart.html\">Using waterfall charts</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A waterfall chart.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/waterfall-chart.html\">Using waterfall charts</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
+    },
+    "WebCrawlerAuthType":{
+      "type":"string",
+      "enum":[
+        "NO_AUTH",
+        "BASIC_AUTH",
+        "FORM",
+        "SAML"
+      ]
+    },
+    "WebCrawlerParameters":{
+      "type":"structure",
+      "required":["WebCrawlerAuthType"],
+      "members":{
+        "WebCrawlerAuthType":{
+          "shape":"WebCrawlerAuthType",
+          "documentation":"<p>The authentication type for the web crawler. The type can be one of the following:</p> <ul> <li> <p> <code>NO_AUTH</code>: No authentication required.</p> </li> <li> <p> <code>BASIC_AUTH</code>: Basic authentication using username and password.</p> </li> <li> <p> <code>SAML</code>: SAML-based authentication.</p> </li> <li> <p> <code>FORM</code>: Form-based authentication.</p> </li> </ul>"
+        },
+        "UsernameFieldXpath":{
+          "shape":"XpathFields",
+          "documentation":"<p>The XPath expression for locating the username field on the login page.</p>"
+        },
+        "PasswordFieldXpath":{
+          "shape":"XpathFields",
+          "documentation":"<p>The XPath expression for locating the password field on the login page.</p>"
+        },
+        "UsernameButtonXpath":{
+          "shape":"XpathFields",
+          "documentation":"<p>The XPath expression for locating the username submit button on the login page.</p>"
+        },
+        "PasswordButtonXpath":{
+          "shape":"XpathFields",
+          "documentation":"<p>The XPath expression for locating the password submit button on the login page.</p>"
+        },
+        "LoginPageUrl":{
+          "shape":"SiteBaseUrl",
+          "documentation":"<p>The URL of the login page for the web crawler to authenticate.</p>"
+        },
+        "WebProxyHostName":{
+          "shape":"Host",
+          "documentation":"<p>The hostname of the web proxy server for the web crawler.</p>"
+        },
+        "WebProxyPortNumber":{
+          "shape":"OptionalPort",
+          "documentation":"<p>The port number of the web proxy server for the web crawler.</p>"
+        }
+      },
+      "documentation":"<p>The parameters for a web crawler data source.</p>"
+    },
+    "WebProxyCredentials":{
+      "type":"structure",
+      "required":[
+        "WebProxyUsername",
+        "WebProxyPassword"
+      ],
+      "members":{
+        "WebProxyUsername":{
+          "shape":"DbUsername",
+          "documentation":"<p>The username for authenticating with the web proxy server.</p>"
+        },
+        "WebProxyPassword":{
+          "shape":"Password",
+          "documentation":"<p>The password for authenticating with the web proxy server.</p>"
+        }
+      },
+      "documentation":"<p>The credentials for authenticating with a web proxy server.</p>"
     },
     "WhatIfPointScenario":{
       "type":"structure",
@@ -38217,7 +42208,7 @@
           "documentation":"<p>The alt text for the visual.</p>"
         }
       },
-      "documentation":"<p>A word cloud.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/word-cloud.html\">Using word clouds</a> in the <i>Amazon QuickSight User Guide</i>.</p>"
+      "documentation":"<p>A word cloud.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/quicksight/latest/user/word-cloud.html\">Using word clouds</a> in the <i>Amazon Quick Suite User Guide</i>.</p>"
     },
     "WordCloudWordCasing":{
       "type":"string",
@@ -38254,6 +42245,11 @@
       "max":128,
       "min":1
     },
+    "XpathFields":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
     "YAxisOptions":{
       "type":"structure",
       "required":["YAxis"],
@@ -38267,5 +42263,5 @@
     },
     "boolean":{"type":"boolean"}
   },
-  "documentation":"<fullname>Amazon QuickSight API Reference</fullname> <p>Amazon QuickSight is a fully managed, serverless business intelligence service for the Amazon Web Services Cloud that makes it easy to extend data and insights to every user in your organization. This API reference contains documentation for a programming interface that you can use to manage Amazon QuickSight. </p>"
+  "documentation":"<fullname>Amazon Quick Suite API Reference</fullname> <p>Amazon Quick Sight is a fully managed, serverless business intelligence service for the Amazon Web Services Cloud that makes it easy to extend data and insights to every user in your organization. This API reference contains documentation for a programming interface that you can use to manage Amazon Quick Sight. </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ram/2018-01-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +252,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +275,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,7 +294,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -308,14 +304,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/ram/2018-01-04/service-2.json 2.31.35-1/awscli/botocore/data/ram/2018-01-04/service-2.json
--- 2.23.6-1/awscli/botocore/data/ram/2018-01-04/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ram/2018-01-04/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"ram",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"RAM",
     "serviceFullName":"AWS Resource Access Manager",
     "serviceId":"RAM",
     "signatureVersion":"v4",
-    "uid":"ram-2018-01-04"
+    "uid":"ram-2018-01-04",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptResourceShareInvitation":{
@@ -1142,8 +1144,7 @@
     },
     "EnableSharingWithAwsOrganizationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableSharingWithAwsOrganizationResponse":{
       "type":"structure",
@@ -2719,8 +2720,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{"type":"string"},
     "TagValueList":{
@@ -2777,8 +2777,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResourceShareRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rbin/2021-06-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/rbin/2021-06-15/service-2.json 2.31.35-1/awscli/botocore/data/rbin/2021-06-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/rbin/2021-06-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rbin/2021-06-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -295,8 +295,7 @@
     },
     "DeleteRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Description":{
       "type":"string",
@@ -734,8 +733,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -852,8 +850,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRuleRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rds/2014-10-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/rds/2014-10-31/paginators-1.json 2.31.35-1/awscli/botocore/data/rds/2014-10-31/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/rds/2014-10-31/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rds/2014-10-31/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -240,6 +240,12 @@
       "limit_key": "MaxRecords",
       "output_token": "Marker",
       "result_key": "DBRecommendations"
+    },
+    "DescribeDBMajorEngineVersions": {
+      "input_token": "Marker",
+      "limit_key": "MaxRecords",
+      "output_token": "Marker",
+      "result_key": "DBMajorEngineVersions"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/rds/2014-10-31/service-2.json 2.31.35-1/awscli/botocore/data/rds/2014-10-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/rds/2014-10-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rds/2014-10-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -73,11 +73,16 @@
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"DBSnapshotNotFoundFault"},
         {"shape":"DBProxyNotFoundFault"},
+        {"shape":"DBProxyEndpointNotFoundFault"},
         {"shape":"DBProxyTargetGroupNotFoundFault"},
         {"shape":"BlueGreenDeploymentNotFoundFault"},
-        {"shape":"IntegrationNotFoundFault"},
         {"shape":"TenantDatabaseNotFoundFault"},
-        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"}
+        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"},
+        {"shape":"IntegrationNotFoundFault"},
+        {"shape":"DBShardGroupNotFoundFault"},
+        {"shape":"InvalidDBClusterStateFault"},
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"InvalidDBClusterEndpointStateFault"}
       ],
       "documentation":"<p>Adds metadata tags to an Amazon RDS resource. These tags can also be used with cost allocation reporting to track cost associated with Amazon RDS resources, or used in a Condition statement in an IAM policy for Amazon RDS.</p> <p>For an overview on tagging your relational database resources, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html\">Tagging Amazon RDS Resources</a> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html\">Tagging Amazon Aurora and Amazon RDS Resources</a>. </p>"
     },
@@ -269,6 +274,7 @@
         {"shape":"DBClusterParameterGroupNotFoundFault"},
         {"shape":"InstanceQuotaExceededFault"},
         {"shape":"DBClusterQuotaExceededFault"},
+        {"shape":"StorageQuotaExceededFault"},
         {"shape":"InvalidDBInstanceStateFault"},
         {"shape":"InvalidDBClusterStateFault"}
       ],
@@ -288,9 +294,11 @@
       "errors":[
         {"shape":"CustomDBEngineVersionAlreadyExistsFault"},
         {"shape":"CustomDBEngineVersionQuotaExceededFault"},
-        {"shape":"Ec2ImagePropertiesNotSupportedFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
-        {"shape":"CreateCustomDBEngineVersionFault"}
+        {"shape":"Ec2ImagePropertiesNotSupportedFault"},
+        {"shape":"CreateCustomDBEngineVersionFault"},
+        {"shape":"CustomDBEngineVersionNotFoundFault"},
+        {"shape":"InvalidCustomDBEngineVersionStateFault"}
       ],
       "documentation":"<p>Creates a custom DB engine version (CEV).</p>"
     },
@@ -325,7 +333,9 @@
         {"shape":"DBSubnetGroupDoesNotCoverEnoughAZs"},
         {"shape":"GlobalClusterNotFoundFault"},
         {"shape":"InvalidGlobalClusterStateFault"},
+        {"shape":"NetworkTypeNotSupported"},
         {"shape":"DomainNotFoundFault"},
+        {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"OptionGroupNotFoundFault"}
       ],
       "documentation":"<p>Creates a new Amazon Aurora DB cluster or Multi-AZ DB cluster.</p> <p>If you create an Aurora DB cluster, the request creates an empty cluster. You must explicitly create the writer instance for your DB cluster using the <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html\">CreateDBInstance</a> operation. If you create a Multi-AZ DB cluster, the request creates a writer and two reader DB instances for you, each in a different Availability Zone.</p> <p>You can use the <code>ReplicationSourceIdentifier</code> parameter to create an Amazon Aurora DB cluster as a read replica of another DB cluster or Amazon RDS for MySQL or PostgreSQL DB instance. For more information about Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\">What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>You can also use the <code>ReplicationSourceIdentifier</code> parameter to create a Multi-AZ DB cluster read replica with an RDS for MySQL or PostgreSQL DB instance as the source. For more information about Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\">Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide</i>.</p>"
@@ -418,8 +428,8 @@
         {"shape":"AuthorizationNotFoundFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
         {"shape":"DomainNotFoundFault"},
-        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"CertificateNotFoundFault"},
         {"shape":"TenantDatabaseQuotaExceededFault"}
       ],
@@ -457,12 +467,12 @@
         {"shape":"InvalidDBSubnetGroupFault"},
         {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
-        {"shape":"DomainNotFoundFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"DomainNotFoundFault"},
         {"shape":"TenantDatabaseQuotaExceededFault"},
         {"shape":"CertificateNotFoundFault"}
       ],
-      "documentation":"<p>Creates a new DB instance that acts as a read replica for an existing source DB instance or Multi-AZ DB cluster. You can create a read replica for a DB instance running Db2, MariaDB, MySQL, Oracle, PostgreSQL, or SQL Server. You can create a read replica for a Multi-AZ DB cluster running MySQL or PostgreSQL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html\">Working with read replicas</a> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html#multi-az-db-clusters-migrating-to-instance-with-read-replica\">Migrating from a Multi-AZ DB cluster to a DB instance using a read replica</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Amazon Aurora doesn't support this operation. To create a DB instance for an Aurora DB cluster, use the <code>CreateDBInstance</code> operation.</p> <p>All read replica DB instances are created with backups disabled. All other attributes (including DB security groups and DB parameter groups) are inherited from the source DB instance or cluster, except as specified.</p> <important> <p>Your source DB instance or cluster must have backup retention enabled.</p> </important>"
+      "documentation":"<p>Creates a new DB instance that acts as a read replica for an existing source DB instance or Multi-AZ DB cluster. You can create a read replica for a DB instance running Db2, MariaDB, MySQL, Oracle, PostgreSQL, or SQL Server. You can create a read replica for a Multi-AZ DB cluster running MySQL or PostgreSQL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html\">Working with read replicas</a> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html#multi-az-db-clusters-migrating-to-instance-with-read-replica\">Migrating from a Multi-AZ DB cluster to a DB instance using a read replica</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Amazon Aurora doesn't support this operation. To create a DB instance for an Aurora DB cluster, use the <code>CreateDBInstance</code> operation.</p> <p>RDS creates read replicas with backups disabled. All other attributes (including DB security groups and DB parameter groups) are inherited from the source DB instance or cluster, except as specified.</p> <important> <p>Your source DB instance or cluster must have backup retention enabled.</p> </important>"
     },
     "CreateDBParameterGroup":{
       "name":"CreateDBParameterGroup",
@@ -479,7 +489,7 @@
         {"shape":"DBParameterGroupQuotaExceededFault"},
         {"shape":"DBParameterGroupAlreadyExistsFault"}
       ],
-      "documentation":"<p>Creates a new DB parameter group.</p> <p>A DB parameter group is initially created with the default parameters for the database engine used by the DB instance. To provide custom values for any of the parameters, you must modify the group after creating it using <code>ModifyDBParameterGroup</code>. Once you've created a DB parameter group, you need to associate it with your DB instance using <code>ModifyDBInstance</code>. When you associate a new DB parameter group with a running DB instance, you need to reboot the DB instance without failover for the new DB parameter group and associated settings to take effect.</p> <p>This command doesn't apply to RDS Custom.</p> <important> <p>After you create a DB parameter group, you should wait at least 5 minutes before creating your first DB instance that uses that DB parameter group as the default parameter group. This allows Amazon RDS to fully complete the create action before the parameter group is used as the default for a new DB instance. This is especially important for parameters that are critical when creating the default database for a DB instance, such as the character set for the default database defined by the <code>character_set_database</code> parameter. You can use the <i>Parameter Groups</i> option of the <a href=\"https://console.aws.amazon.com/rds/\">Amazon RDS console</a> or the <i>DescribeDBParameters</i> command to verify that your DB parameter group has been created or modified.</p> </important>"
+      "documentation":"<p>Creates a new DB parameter group.</p> <p>A DB parameter group is initially created with the default parameters for the database engine used by the DB instance. To provide custom values for any of the parameters, you must modify the group after creating it using <code>ModifyDBParameterGroup</code>. Once you've created a DB parameter group, you need to associate it with your DB instance using <code>ModifyDBInstance</code>. When you associate a new DB parameter group with a running DB instance, you need to reboot the DB instance without failover for the new DB parameter group and associated settings to take effect.</p> <p>This command doesn't apply to RDS Custom.</p>"
     },
     "CreateDBProxy":{
       "name":"CreateDBProxy",
@@ -635,7 +645,9 @@
         {"shape":"GlobalClusterAlreadyExistsFault"},
         {"shape":"GlobalClusterQuotaExceededFault"},
         {"shape":"InvalidDBClusterStateFault"},
-        {"shape":"DBClusterNotFoundFault"}
+        {"shape":"DBClusterNotFoundFault"},
+        {"shape":"InvalidDBShardGroupStateFault"},
+        {"shape":"ResourceNotFoundFault"}
       ],
       "documentation":"<p>Creates an Aurora global database spread across multiple Amazon Web Services Regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem.</p> <p>You can create a global database that is initially empty, and then create the primary and secondary DB clusters in the global database. Or you can specify an existing Aurora cluster during the create operation, and this cluster becomes the primary cluster of the global database.</p> <note> <p>This operation applies only to Aurora DB clusters.</p> </note>"
     },
@@ -692,7 +704,8 @@
         {"shape":"DBInstanceNotFoundFault"},
         {"shape":"InvalidDBInstanceStateFault"},
         {"shape":"TenantDatabaseAlreadyExistsFault"},
-        {"shape":"TenantDatabaseQuotaExceededFault"}
+        {"shape":"TenantDatabaseQuotaExceededFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>Creates a tenant database in a DB instance that uses the multi-tenant configuration. Only RDS for Oracle container database (CDB) instances are supported.</p>"
     },
@@ -744,10 +757,12 @@
       "errors":[
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"InvalidDBClusterStateFault"},
+        {"shape":"InvalidGlobalClusterStateFault"},
         {"shape":"DBClusterSnapshotAlreadyExistsFault"},
         {"shape":"SnapshotQuotaExceededFault"},
         {"shape":"InvalidDBClusterSnapshotStateFault"},
-        {"shape":"DBClusterAutomatedBackupQuotaExceededFault"}
+        {"shape":"DBClusterAutomatedBackupQuotaExceededFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>The DeleteDBCluster action deletes a previously provisioned DB cluster. When you delete a DB cluster, all automated backups for that DB cluster are deleted and can't be recovered. Manual DB cluster snapshots of the specified DB cluster are not deleted.</p> <p>If you're deleting a Multi-AZ DB cluster with read replicas, all cluster members are terminated and read replicas are promoted to standalone instances.</p> <p>For more information on Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide</i>.</p>"
     },
@@ -833,7 +848,8 @@
         {"shape":"DBSnapshotAlreadyExistsFault"},
         {"shape":"SnapshotQuotaExceededFault"},
         {"shape":"InvalidDBClusterStateFault"},
-        {"shape":"DBInstanceAutomatedBackupQuotaExceededFault"}
+        {"shape":"DBInstanceAutomatedBackupQuotaExceededFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>Deletes a previously provisioned DB instance. When you delete a DB instance, all automated backups for that instance are deleted and can't be recovered. However, manual DB snapshots of the DB instance aren't deleted.</p> <p>If you request a final DB snapshot, the status of the Amazon RDS DB instance is <code>deleting</code> until the DB snapshot is created. This operation can't be canceled or reverted after it begins. To monitor the status of this operation, use <code>DescribeDBInstance</code>.</p> <p>When a DB instance is in a failure state and has a status of <code>failed</code>, <code>incompatible-restore</code>, or <code>incompatible-network</code>, you can only delete it when you skip creation of the final snapshot with the <code>SkipFinalSnapshot</code> parameter.</p> <p>If the specified DB instance is part of an Amazon Aurora DB cluster, you can't delete the DB instance if both of the following conditions are true:</p> <ul> <li> <p>The DB cluster is a read replica of another Amazon Aurora DB cluster.</p> </li> <li> <p>The DB instance is the only instance in the DB cluster.</p> </li> </ul> <p>To delete a DB instance in this case, first use the <code>PromoteReadReplicaDBCluster</code> operation to promote the DB cluster so that it's no longer a read replica. After the promotion completes, use the <code>DeleteDBInstance</code> operation to delete the final instance in the DB cluster.</p> <important> <p>For RDS Custom DB instances, deleting the DB instance permanently deletes the EC2 instance and the associated EBS volumes. Make sure that you don't terminate or delete these resources before you delete the DB instance. Otherwise, deleting the DB instance and creation of the final snapshot might fail.</p> </important>"
     },
@@ -1042,7 +1058,8 @@
       "errors":[
         {"shape":"DBInstanceNotFoundFault"},
         {"shape":"TenantDatabaseNotFoundFault"},
-        {"shape":"InvalidDBInstanceStateFault"}
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"DBSnapshotAlreadyExistsFault"}
       ],
       "documentation":"<p>Deletes a tenant database from your DB instance. This command only applies to RDS for Oracle container database (CDB) instances.</p> <p>You can't delete a tenant database when it is the only tenant in the DB instance.</p>"
     },
@@ -1076,6 +1093,7 @@
         "shape":"AccountAttributesMessage",
         "resultWrapper":"DescribeAccountAttributesResult"
       },
+      "errors":[],
       "documentation":"<p>Lists all of the attributes for a customer account. The attributes include Amazon RDS quotas for the account, such as the number of DB instances allowed. The description for a quota includes the quota name, current usage toward that quota, and the quota's maximum value.</p> <p>This command doesn't take any parameters.</p>"
     },
     "DescribeBlueGreenDeployments":{
@@ -1250,6 +1268,7 @@
         "shape":"DBEngineVersionMessage",
         "resultWrapper":"DescribeDBEngineVersionsResult"
       },
+      "errors":[],
       "documentation":"<p>Describes the properties of specific versions of DB engines.</p>"
     },
     "DescribeDBInstanceAutomatedBackups":{
@@ -1301,6 +1320,20 @@
       ],
       "documentation":"<p>Returns a list of DB log files for the DB instance.</p> <p>This command doesn't apply to RDS Custom.</p>"
     },
+    "DescribeDBMajorEngineVersions":{
+      "name":"DescribeDBMajorEngineVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeDBMajorEngineVersionsRequest"},
+      "output":{
+        "shape":"DescribeDBMajorEngineVersionsResponse",
+        "resultWrapper":"DescribeDBMajorEngineVersionsResult"
+      },
+      "errors":[],
+      "documentation":"<p>Describes the properties of specific major versions of DB engines.</p>"
+    },
     "DescribeDBParameterGroups":{
       "name":"DescribeDBParameterGroups",
       "http":{
@@ -1414,6 +1447,7 @@
         "shape":"DBRecommendationsMessage",
         "resultWrapper":"DescribeDBRecommendationsResult"
       },
+      "errors":[],
       "documentation":"<p>Describes the recommendations to resolve the issues for your DB instances, DB clusters, and DB parameter groups.</p>"
     },
     "DescribeDBSecurityGroups":{
@@ -1524,6 +1558,7 @@
         "shape":"DescribeEngineDefaultClusterParametersResult",
         "resultWrapper":"DescribeEngineDefaultClusterParametersResult"
       },
+      "errors":[],
       "documentation":"<p>Returns the default engine and system parameter information for the cluster database engine.</p> <p>For more information on Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p>"
     },
     "DescribeEngineDefaultParameters":{
@@ -1537,6 +1572,7 @@
         "shape":"DescribeEngineDefaultParametersResult",
         "resultWrapper":"DescribeEngineDefaultParametersResult"
       },
+      "errors":[],
       "documentation":"<p>Returns the default engine and system parameter information for the specified database engine.</p>"
     },
     "DescribeEventCategories":{
@@ -1550,6 +1586,7 @@
         "shape":"EventCategoriesMessage",
         "resultWrapper":"DescribeEventCategoriesResult"
       },
+      "errors":[],
       "documentation":"<p>Displays a list of categories for all event source types, or, if specified, for a specified source type. You can also see this list in the \"Amazon RDS event categories and event messages\" section of the <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Messages.html\"> <i>Amazon RDS User Guide</i> </a> or the <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Events.Messages.html\"> <i>Amazon Aurora User Guide</i> </a>.</p>"
     },
     "DescribeEventSubscriptions":{
@@ -1579,6 +1616,7 @@
         "shape":"EventsMessage",
         "resultWrapper":"DescribeEventsResult"
       },
+      "errors":[],
       "documentation":"<p>Returns events related to DB instances, DB clusters, DB parameter groups, DB security groups, DB snapshots, DB cluster snapshots, and RDS Proxies for the past 14 days. Events specific to a particular DB instance, DB cluster, DB parameter group, DB security group, DB snapshot, DB cluster snapshot group, or RDS Proxy can be obtained by providing the name as a parameter.</p> <p>For more information on working with events, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-events.html\">Monitoring Amazon RDS events</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/working-with-events.html\">Monitoring Amazon Aurora events</a> in the <i>Amazon Aurora User Guide</i>.</p> <note> <p>By default, RDS returns events that were generated in the past hour.</p> </note>"
     },
     "DescribeExportTasks":{
@@ -1640,6 +1678,7 @@
         "shape":"OptionGroupOptionsMessage",
         "resultWrapper":"DescribeOptionGroupOptionsResult"
       },
+      "errors":[],
       "documentation":"<p>Describes all available options for the specified engine.</p>"
     },
     "DescribeOptionGroups":{
@@ -1669,6 +1708,7 @@
         "shape":"OrderableDBInstanceOptionsMessage",
         "resultWrapper":"DescribeOrderableDBInstanceOptionsResult"
       },
+      "errors":[],
       "documentation":"<p>Describes the orderable DB instance options for a specified DB engine.</p>"
     },
     "DescribePendingMaintenanceActions":{
@@ -1730,6 +1770,7 @@
         "shape":"SourceRegionMessage",
         "resultWrapper":"DescribeSourceRegionsResult"
       },
+      "errors":[],
       "documentation":"<p>Returns a list of the source Amazon Web Services Regions where the current Amazon Web Services Region can create a read replica, copy a DB snapshot from, or replicate automated backups from.</p> <p>Use this operation to determine whether cross-Region features are supported between other Regions and your current Region. This operation supports pagination.</p> <p>To return information about the Regions that are enabled for your account, or all Regions, use the EC2 operation <code>DescribeRegions</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeRegions.html\"> DescribeRegions</a> in the <i>Amazon EC2 API Reference</i>.</p>"
     },
     "DescribeTenantDatabases":{
@@ -1798,7 +1839,7 @@
         {"shape":"DBInstanceNotReadyFault"},
         {"shape":"DBLogFileNotFoundFault"}
       ],
-      "documentation":"<p>Downloads all or a portion of the specified log file, up to 1 MB in size.</p> <p>This command doesn't apply to RDS Custom.</p>"
+      "documentation":"<p>Downloads all or a portion of the specified log file, up to 1 MB in size.</p> <p>This command doesn't apply to RDS Custom.</p> <note> <p>This operation uses resources on database instances. Because of this, we recommend publishing database logs to CloudWatch and then using the GetLogEvents operation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_GetLogEvents.html\">GetLogEvents</a> in the <i>Amazon CloudWatch Logs API Reference</i>.</p> </note>"
     },
     "EnableHttpEndpoint":{
       "name":"EnableHttpEndpoint",
@@ -1871,10 +1912,12 @@
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"DBProxyNotFoundFault"},
         {"shape":"DBProxyTargetGroupNotFoundFault"},
+        {"shape":"DBProxyEndpointNotFoundFault"},
         {"shape":"BlueGreenDeploymentNotFoundFault"},
-        {"shape":"IntegrationNotFoundFault"},
         {"shape":"TenantDatabaseNotFoundFault"},
-        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"}
+        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"},
+        {"shape":"IntegrationNotFoundFault"},
+        {"shape":"DBShardGroupNotFoundFault"}
       ],
       "documentation":"<p>Lists all tags on an Amazon RDS resource.</p> <p>For an overview on tagging an Amazon RDS resource, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html\">Tagging Amazon RDS Resources</a> in the <i>Amazon RDS User Guide</i> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html\">Tagging Amazon Aurora and Amazon RDS Resources</a> in the <i>Amazon Aurora User Guide</i>.</p>"
     },
@@ -1967,13 +2010,18 @@
         {"shape":"InvalidDBSubnetGroupStateFault"},
         {"shape":"InvalidSubnet"},
         {"shape":"DBClusterParameterGroupNotFoundFault"},
+        {"shape":"DBParameterGroupNotFoundFault"},
         {"shape":"InvalidDBSecurityGroupStateFault"},
         {"shape":"InvalidDBInstanceStateFault"},
         {"shape":"DBClusterAlreadyExistsFault"},
         {"shape":"DBInstanceAlreadyExistsFault"},
+        {"shape":"NetworkTypeNotSupported"},
         {"shape":"DomainNotFoundFault"},
+        {"shape":"InvalidGlobalClusterStateFault"},
+        {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"StorageTypeNotAvailableFault"},
-        {"shape":"OptionGroupNotFoundFault"}
+        {"shape":"OptionGroupNotFoundFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>Modifies the settings of an Amazon Aurora DB cluster or a Multi-AZ DB cluster. You can change one or more settings by specifying these parameters and the new values in the request.</p> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide</i>.</p>"
     },
@@ -2012,7 +2060,7 @@
         {"shape":"DBParameterGroupNotFoundFault"},
         {"shape":"InvalidDBParameterGroupStateFault"}
       ],
-      "documentation":"<p>Modifies the parameters of a DB cluster parameter group. To modify more than one parameter, submit a list of the following: <code>ParameterName</code>, <code>ParameterValue</code>, and <code>ApplyMethod</code>. A maximum of 20 parameters can be modified in a single request.</p> <important> <p>After you create a DB cluster parameter group, you should wait at least 5 minutes before creating your first DB cluster that uses that DB cluster parameter group as the default parameter group. This allows Amazon RDS to fully complete the create operation before the parameter group is used as the default for a new DB cluster. This is especially important for parameters that are critical when creating the default database for a DB cluster, such as the character set for the default database defined by the <code>character_set_database</code> parameter. You can use the <i>Parameter Groups</i> option of the <a href=\"https://console.aws.amazon.com/rds/\">Amazon RDS console</a> or the <code>DescribeDBClusterParameters</code> operation to verify that your DB cluster parameter group has been created or modified.</p> <p>If the modified DB cluster parameter group is used by an Aurora Serverless v1 cluster, Aurora applies the update immediately. The cluster restart might interrupt your workload. In that case, your application must reopen any connections and retry any transactions that were active when the parameter changes took effect.</p> </important> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide.</i> </p>"
+      "documentation":"<p>Modifies the parameters of a DB cluster parameter group. To modify more than one parameter, submit a list of the following: <code>ParameterName</code>, <code>ParameterValue</code>, and <code>ApplyMethod</code>. A maximum of 20 parameters can be modified in a single request.</p> <important> <p>There are two types of parameters - dynamic parameters and static parameters. Changes to dynamic parameters are applied to the DB cluster immediately without a reboot. Changes to static parameters are applied only after the DB cluster is rebooted, which can be done using <code>RebootDBCluster</code> operation. You can use the <i>Parameter Groups</i> option of the <a href=\"https://console.aws.amazon.com/rds/\">Amazon RDS console</a> or the <code>DescribeDBClusterParameters</code> operation to verify that your DB cluster parameter group has been created or modified.</p> </important> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide.</i> </p>"
     },
     "ModifyDBClusterSnapshotAttribute":{
       "name":"ModifyDBClusterSnapshotAttribute",
@@ -2062,8 +2110,8 @@
         {"shape":"DomainNotFoundFault"},
         {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
-        {"shape":"InvalidDBClusterStateFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"InvalidDBClusterStateFault"},
         {"shape":"TenantDatabaseQuotaExceededFault"}
       ],
       "documentation":"<p>Modifies settings for a DB instance. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. To learn what modifications you can make to your DB instance, call <code>DescribeValidDBInstanceModifications</code> before you call <code>ModifyDBInstance</code>.</p>"
@@ -2184,9 +2232,11 @@
         "resultWrapper":"ModifyDBSnapshotResult"
       },
       "errors":[
-        {"shape":"DBSnapshotNotFoundFault"}
+        {"shape":"DBSnapshotNotFoundFault"},
+        {"shape":"InvalidDBSnapshotStateFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
-      "documentation":"<p>Updates a manual DB snapshot with a new engine version. The snapshot can be encrypted or unencrypted, but not shared or public. </p> <p>Amazon RDS supports upgrading DB snapshots for MySQL, PostgreSQL, and Oracle. This operation doesn't apply to RDS Custom or RDS for Db2.</p>"
+      "documentation":"<p>Updates a manual DB snapshot with a new engine version. The snapshot can be encrypted or unencrypted, but not shared or public. </p> <p>Amazon RDS supports upgrading DB snapshots for MariaDB, MySQL, PostgreSQL, and Oracle. This operation doesn't apply to RDS Custom or RDS for Db2.</p>"
     },
     "ModifyDBSnapshotAttribute":{
       "name":"ModifyDBSnapshotAttribute",
@@ -2222,6 +2272,7 @@
         {"shape":"DBSubnetQuotaExceededFault"},
         {"shape":"SubnetAlreadyInUse"},
         {"shape":"DBSubnetGroupDoesNotCoverEnoughAZs"},
+        {"shape":"InvalidDBSubnetGroupStateFault"},
         {"shape":"InvalidSubnet"}
       ],
       "documentation":"<p>Modifies an existing DB subnet group. DB subnet groups must contain at least one subnet in at least two AZs in the Amazon Web Services Region.</p>"
@@ -2283,7 +2334,7 @@
         {"shape":"InvalidIntegrationStateFault"},
         {"shape":"IntegrationConflictOperationFault"}
       ],
-      "documentation":"<p>Modifies a zero-ETL integration with Amazon Redshift.</p> <note> <p>Currently, you can only modify integrations that have Aurora MySQL source DB clusters. Integrations with Aurora PostgreSQL and RDS sources currently don't support modifying the integration.</p> </note>"
+      "documentation":"<p>Modifies a zero-ETL integration with Amazon Redshift.</p>"
     },
     "ModifyOptionGroup":{
       "name":"ModifyOptionGroup",
@@ -2317,7 +2368,8 @@
         {"shape":"DBInstanceNotFoundFault"},
         {"shape":"TenantDatabaseNotFoundFault"},
         {"shape":"TenantDatabaseAlreadyExistsFault"},
-        {"shape":"InvalidDBInstanceStateFault"}
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>Modifies an existing tenant database in a DB instance. You can change the tenant database name or the master user password. This operation is supported only for RDS for Oracle CDB instances using the multi-tenant configuration.</p>"
     },
@@ -2404,7 +2456,8 @@
       },
       "errors":[
         {"shape":"InvalidDBInstanceStateFault"},
-        {"shape":"DBInstanceNotFoundFault"}
+        {"shape":"DBInstanceNotFoundFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>You might need to reboot your DB instance, usually for maintenance reasons. For example, if you make certain modifications, or if you change the DB parameter group associated with the DB instance, you must reboot the instance for the changes to take effect.</p> <p>Rebooting a DB instance restarts the database engine service. Rebooting a DB instance results in a momentary outage, during which the DB instance status is set to rebooting.</p> <p>For more information about rebooting, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RebootInstance.html\">Rebooting a DB Instance</a> in the <i>Amazon RDS User Guide.</i> </p> <p>This command doesn't apply to RDS Custom.</p> <p>If your DB instance is part of a Multi-AZ DB cluster, you can reboot the DB cluster with the <code>RebootDBCluster</code> operation.</p>"
     },
@@ -2463,6 +2516,7 @@
       "errors":[
         {"shape":"GlobalClusterNotFoundFault"},
         {"shape":"InvalidGlobalClusterStateFault"},
+        {"shape":"InvalidDBClusterStateFault"},
         {"shape":"DBClusterNotFoundFault"}
       ],
       "documentation":"<p>Detaches an Aurora secondary cluster from an Aurora global database cluster. The cluster becomes a standalone cluster with read-write capability instead of being read-only and receiving data from a primary cluster in a different Region.</p> <note> <p>This operation only applies to Aurora DB clusters.</p> </note>"
@@ -2524,11 +2578,16 @@
         {"shape":"DBSnapshotNotFoundFault"},
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"DBProxyNotFoundFault"},
+        {"shape":"DBProxyEndpointNotFoundFault"},
         {"shape":"DBProxyTargetGroupNotFoundFault"},
         {"shape":"BlueGreenDeploymentNotFoundFault"},
-        {"shape":"IntegrationNotFoundFault"},
         {"shape":"TenantDatabaseNotFoundFault"},
-        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"}
+        {"shape":"DBSnapshotTenantDatabaseNotFoundFault"},
+        {"shape":"IntegrationNotFoundFault"},
+        {"shape":"DBShardGroupNotFoundFault"},
+        {"shape":"InvalidDBClusterStateFault"},
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"InvalidDBClusterEndpointStateFault"}
       ],
       "documentation":"<p>Removes metadata tags from an Amazon RDS resource.</p> <p>For an overview on tagging an Amazon RDS resource, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html\">Tagging Amazon RDS Resources</a> in the <i>Amazon RDS User Guide</i> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.html\">Tagging Amazon Aurora and Amazon RDS Resources</a> in the <i>Amazon Aurora User Guide</i>.</p>"
     },
@@ -2590,6 +2649,7 @@
         {"shape":"DBClusterParameterGroupNotFoundFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
         {"shape":"DBClusterNotFoundFault"},
+        {"shape":"NetworkTypeNotSupported"},
         {"shape":"DomainNotFoundFault"},
         {"shape":"InsufficientStorageClusterCapacityFault"},
         {"shape":"StorageTypeNotSupportedFault"}
@@ -2626,8 +2686,10 @@
         {"shape":"InvalidSubnet"},
         {"shape":"OptionGroupNotFoundFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
+        {"shape":"NetworkTypeNotSupported"},
         {"shape":"DomainNotFoundFault"},
         {"shape":"DBClusterParameterGroupNotFoundFault"},
+        {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"InvalidDBInstanceStateFault"},
         {"shape":"InsufficientDBInstanceCapacityFault"}
       ],
@@ -2661,12 +2723,14 @@
         {"shape":"KMSKeyNotAccessibleFault"},
         {"shape":"OptionGroupNotFoundFault"},
         {"shape":"StorageQuotaExceededFault"},
+        {"shape":"NetworkTypeNotSupported"},
         {"shape":"DomainNotFoundFault"},
         {"shape":"DBClusterParameterGroupNotFoundFault"},
+        {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"DBClusterAutomatedBackupNotFoundFault"},
         {"shape":"InsufficientDBInstanceCapacityFault"}
       ],
-      "documentation":"<p>Restores a DB cluster to an arbitrary point in time. Users can restore to any point in time before <code>LatestRestorableTime</code> for up to <code>BackupRetentionPeriod</code> days. The target DB cluster is created from the source DB cluster with the same configuration as the original DB cluster, except that the new DB cluster is created with the default DB security group.</p> <note> <p>For Aurora, this operation only restores the DB cluster, not the DB instances for that DB cluster. You must invoke the <code>CreateDBInstance</code> operation to create DB instances for the restored DB cluster, specifying the identifier of the restored DB cluster in <code>DBClusterIdentifier</code>. You can create DB instances only after the <code>RestoreDBClusterToPointInTime</code> operation has completed and the DB cluster is available.</p> </note> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide.</i> </p>"
+      "documentation":"<p>Restores a DB cluster to an arbitrary point in time. Users can restore to any point in time before <code>LatestRestorableTime</code> for up to <code>BackupRetentionPeriod</code> days. The target DB cluster is created from the source DB cluster with the same configuration as the original DB cluster, except that the new DB cluster is created with the default DB security group. Unless the <code>RestoreType</code> is set to <code>copy-on-write</code>, the restore may occur in a different Availability Zone (AZ) from the original DB cluster. The AZ where RDS restores the DB cluster depends on the AZs in the specified subnet group.</p> <note> <p>For Aurora, this operation only restores the DB cluster, not the DB instances for that DB cluster. You must invoke the <code>CreateDBInstance</code> operation to create DB instances for the restored DB cluster, specifying the identifier of the restored DB cluster in <code>DBClusterIdentifier</code>. You can create DB instances only after the <code>RestoreDBClusterToPointInTime</code> operation has completed and the DB cluster is available.</p> </note> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide.</i> </p>"
     },
     "RestoreDBInstanceFromDBSnapshot":{
       "name":"RestoreDBInstanceFromDBSnapshot",
@@ -2699,8 +2763,8 @@
         {"shape":"DBSecurityGroupNotFoundFault"},
         {"shape":"DomainNotFoundFault"},
         {"shape":"DBParameterGroupNotFoundFault"},
-        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"DBClusterSnapshotNotFoundFault"},
         {"shape":"CertificateNotFoundFault"},
         {"shape":"TenantDatabaseQuotaExceededFault"}
@@ -2735,11 +2799,11 @@
         {"shape":"StorageTypeNotSupportedFault"},
         {"shape":"AuthorizationNotFoundFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
-        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"CertificateNotFoundFault"}
       ],
-      "documentation":"<p>Amazon Relational Database Service (Amazon RDS) supports importing MySQL databases by using backup files. You can create a backup of your on-premises database, store it on Amazon Simple Storage Service (Amazon S3), and then restore the backup file onto a new Amazon RDS DB instance running MySQL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html\">Importing Data into an Amazon RDS MySQL DB Instance</a> in the <i>Amazon RDS User Guide.</i> </p> <p>This operation doesn't apply to RDS Custom.</p>"
+      "documentation":"<p>Amazon Relational Database Service (Amazon RDS) supports importing MySQL databases by using backup files. You can create a backup of your on-premises database, store it on Amazon Simple Storage Service (Amazon S3), and then restore the backup file onto a new Amazon RDS DB instance running MySQL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.html\">Restoring a backup into an Amazon RDS for MySQL DB instance</a> in the <i>Amazon RDS User Guide.</i> </p> <p>This operation doesn't apply to RDS Custom.</p>"
     },
     "RestoreDBInstanceToPointInTime":{
       "name":"RestoreDBInstanceToPointInTime",
@@ -2774,8 +2838,8 @@
         {"shape":"DomainNotFoundFault"},
         {"shape":"BackupPolicyNotFoundFault"},
         {"shape":"DBParameterGroupNotFoundFault"},
-        {"shape":"DBInstanceAutomatedBackupNotFoundFault"},
         {"shape":"NetworkTypeNotSupported"},
+        {"shape":"DBInstanceAutomatedBackupNotFoundFault"},
         {"shape":"TenantDatabaseQuotaExceededFault"},
         {"shape":"CertificateNotFoundFault"}
       ],
@@ -2834,7 +2898,9 @@
       "errors":[
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"InvalidDBClusterStateFault"},
-        {"shape":"InvalidDBInstanceStateFault"}
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"InvalidDBShardGroupStateFault"},
+        {"shape":"KMSKeyNotAccessibleFault"}
       ],
       "documentation":"<p>Starts an Amazon Aurora DB cluster that was stopped using the Amazon Web Services console, the stop-db-cluster CLI command, or the <code>StopDBCluster</code> operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-cluster-stop-start.html\"> Stopping and Starting an Aurora Cluster</a> in the <i>Amazon Aurora User Guide</i>.</p> <note> <p>This operation only applies to Aurora DB clusters.</p> </note>"
     },
@@ -2879,6 +2945,7 @@
         {"shape":"DBInstanceNotFoundFault"},
         {"shape":"InvalidDBInstanceStateFault"},
         {"shape":"KMSKeyNotAccessibleFault"},
+        {"shape":"InvalidDBInstanceAutomatedBackupStateFault"},
         {"shape":"DBInstanceAutomatedBackupQuotaExceededFault"},
         {"shape":"StorageTypeNotSupportedFault"}
       ],
@@ -2907,7 +2974,7 @@
         {"shape":"KMSKeyNotAccessibleFault"},
         {"shape":"InvalidExportSourceStateFault"}
       ],
-      "documentation":"<p>Starts an export of DB snapshot or DB cluster data to Amazon S3. The provided IAM role must have access to the S3 bucket.</p> <p>You can't export snapshot data from Db2 or RDS Custom DB instances.</p> <p>For more information on exporting DB snapshot data, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html\">Exporting DB snapshot data to Amazon S3</a> in the <i>Amazon RDS User Guide</i> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-export-snapshot.html\">Exporting DB cluster snapshot data to Amazon S3</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on exporting DB cluster data, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/export-cluster-data.html\">Exporting DB cluster data to Amazon S3</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+      "documentation":"<p>Starts an export of DB snapshot or DB cluster data to Amazon S3. The provided IAM role must have access to the S3 bucket.</p> <p>You can't export snapshot data from RDS Custom DB instances. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.ExportSnapshotToS3.html\"> Supported Regions and DB engines for exporting snapshots to S3 in Amazon RDS</a>.</p> <p>For more information on exporting DB snapshot data, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html\">Exporting DB snapshot data to Amazon S3</a> in the <i>Amazon RDS User Guide</i> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-export-snapshot.html\">Exporting DB cluster snapshot data to Amazon S3</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>For more information on exporting DB cluster data, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/export-cluster-data.html\">Exporting DB cluster data to Amazon S3</a> in the <i>Amazon Aurora User Guide</i>.</p>"
     },
     "StopActivityStream":{
       "name":"StopActivityStream",
@@ -2943,7 +3010,8 @@
       "errors":[
         {"shape":"DBClusterNotFoundFault"},
         {"shape":"InvalidDBClusterStateFault"},
-        {"shape":"InvalidDBInstanceStateFault"}
+        {"shape":"InvalidDBInstanceStateFault"},
+        {"shape":"InvalidDBShardGroupStateFault"}
       ],
       "documentation":"<p>Stops an Amazon Aurora DB cluster. When you stop a DB cluster, Aurora retains the DB cluster's metadata, including its endpoints and DB parameter groups. Aurora also retains the transaction logs so you can do a point-in-time restore if necessary.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-cluster-stop-start.html\"> Stopping and Starting an Aurora Cluster</a> in the <i>Amazon Aurora User Guide</i>.</p> <note> <p>This operation only applies to Aurora DB clusters.</p> </note>"
     },
@@ -2965,7 +3033,7 @@
         {"shape":"SnapshotQuotaExceededFault"},
         {"shape":"InvalidDBClusterStateFault"}
       ],
-      "documentation":"<p>Stops an Amazon RDS DB instance. When you stop a DB instance, Amazon RDS retains the DB instance's metadata, including its endpoint, DB parameter group, and option group membership. Amazon RDS also retains the transaction logs so you can do a point-in-time restore if necessary.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_StopInstance.html\"> Stopping an Amazon RDS DB Instance Temporarily</a> in the <i>Amazon RDS User Guide.</i> </p> <note> <p>This command doesn't apply to RDS Custom, Aurora MySQL, and Aurora PostgreSQL. For Aurora clusters, use <code>StopDBCluster</code> instead.</p> </note>"
+      "documentation":"<p>Stops an Amazon RDS DB instance temporarily. When you stop a DB instance, Amazon RDS retains the DB instance's metadata, including its endpoint, DB parameter group, and option group membership. Amazon RDS also retains the transaction logs so you can do a point-in-time restore if necessary. The instance restarts automatically after 7 days.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_StopInstance.html\"> Stopping an Amazon RDS DB Instance Temporarily</a> in the <i>Amazon RDS User Guide.</i> </p> <note> <p>This command doesn't apply to RDS Custom, Aurora MySQL, and Aurora PostgreSQL. For Aurora clusters, use <code>StopDBCluster</code> instead.</p> </note>"
     },
     "StopDBInstanceAutomatedBackupsReplication":{
       "name":"StopDBInstanceAutomatedBackupsReplication",
@@ -3248,10 +3316,14 @@
       "type":"string",
       "enum":["SECRETS"]
     },
+    "AuthUserName":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
     "AuthorizationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CIDR IP range or Amazon EC2 security group is already authorized for the specified DB security group.</p>",
       "error":{
         "code":"AuthorizationAlreadyExists",
@@ -3262,8 +3334,7 @@
     },
     "AuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CIDR IP range or Amazon EC2 security group might not be authorized for the specified DB security group.</p> <p>Or, RDS might not be authorized to perform necessary actions using IAM on your behalf.</p>",
       "error":{
         "code":"AuthorizationNotFound",
@@ -3274,8 +3345,7 @@
     },
     "AuthorizationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB security group authorization quota has been reached.</p>",
       "error":{
         "code":"AuthorizationQuotaExceeded",
@@ -3408,8 +3478,7 @@
     },
     "BackupPolicyNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true,
       "deprecatedMessage":"Please avoid using this fault",
       "error":{
@@ -3468,8 +3537,7 @@
     },
     "BlueGreenDeploymentAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A blue/green deployment with the specified name already exists.</p>",
       "error":{
         "code":"BlueGreenDeploymentAlreadyExistsFault",
@@ -3492,12 +3560,11 @@
       "type":"string",
       "max":60,
       "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
     },
     "BlueGreenDeploymentNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>BlueGreenDeploymentIdentifier</code> doesn't refer to an existing blue/green deployment.</p>",
       "error":{
         "code":"BlueGreenDeploymentNotFoundFault",
@@ -3630,8 +3697,7 @@
     },
     "CertificateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>CertificateIdentifier</code> doesn't refer to an existing certificate.</p>",
       "error":{
         "code":"CertificateNotFound",
@@ -3687,7 +3753,7 @@
           "documentation":"<p>The DBClusterIdentifier value for the DB cluster.</p>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The master credentials for the DB cluster.</p>"
         },
         "IAMDatabaseAuthenticationEnabled":{
@@ -3702,6 +3768,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The number of days for which automatic DB snapshots are retained.</p>"
         },
+        "StorageType":{
+          "shape":"String",
+          "documentation":"<p>The storage type for the DB cluster.</p>"
+        },
         "AllocatedStorage":{
           "shape":"IntegerOptional",
           "documentation":"<p>The allocated storage size in gibibytes (GiB) for all database engines except Amazon Aurora. For Aurora, <code>AllocatedStorage</code> always returns 1, because Aurora DB cluster storage size isn't fixed, but instead automatically adjusts as needed.</p>"
@@ -3714,10 +3784,6 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The Provisioned IOPS (I/O operations per second) value. This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
         },
-        "StorageType":{
-          "shape":"String",
-          "documentation":"<p>The storage type for the DB cluster.</p>"
-        },
         "CertificateDetails":{"shape":"CertificateDetails"}
       },
       "documentation":"<p>This data type is used as a response element in the <code>ModifyDBCluster</code> operation and contains changes that will be applied during the next maintenance window.</p>"
@@ -3726,7 +3792,8 @@
       "type":"string",
       "enum":[
         "standard",
-        "limitless"
+        "limitless",
+        "scaleout"
       ]
     },
     "ConnectionPoolConfiguration":{
@@ -3742,7 +3809,7 @@
         },
         "ConnectionBorrowTimeout":{
           "shape":"IntegerOptional",
-          "documentation":"<p>The number of seconds for a proxy to wait for a connection to become available in the connection pool. This setting only applies when the proxy has opened its maximum number of connections and all connections are busy with client sessions.</p> <p>Default: <code>120</code> </p> <p>Constraints:</p> <ul> <li> <p>Must be between 0 and 3600.</p> </li> </ul>"
+          "documentation":"<p>The number of seconds for a proxy to wait for a connection to become available in the connection pool. This setting only applies when the proxy has opened its maximum number of connections and all connections are busy with client sessions.</p> <p>Default: <code>120</code> </p> <p>Constraints:</p> <ul> <li> <p>Must be between 0 and 300.</p> </li> </ul>"
         },
         "SessionPinningFilters":{
           "shape":"StringList",
@@ -3750,7 +3817,7 @@
         },
         "InitQuery":{
           "shape":"String",
-          "documentation":"<p>One or more SQL statements for the proxy to run when opening each new database connection. Typically used with <code>SET</code> statements to make sure that each connection has identical settings such as time zone and character set. For multiple statements, use semicolons as the separator. You can also include multiple variables in a single <code>SET</code> statement, such as <code>SET x=1, y=2</code>.</p> <p>Default: no initialization query</p>"
+          "documentation":"<p>Add an initialization query, or modify the current one. You can specify one or more SQL statements for the proxy to run when opening each new database connection. The setting is typically used with <code>SET</code> statements to make sure that each connection has identical settings. Make sure the query added here is valid. This is an optional field, so you can choose to leave it empty. For including multiple variables in a single SET statement, use a comma separator.</p> <p>For example: <code>SET variable1=value1, variable2=value2</code> </p> <p>Default: no initialization query</p> <important> <p>Since you can access initialization query as part of target group configuration, it is not protected by authentication or cryptographic methods. Anyone with access to view or manage your proxy target group configuration can view the initialization query. You should not add sensitive data, such as passwords or long-lived encryption keys, to this option.</p> </important>"
         }
       },
       "documentation":"<p>Specifies the settings that control the size and behavior of the connection pool associated with a <code>DBProxyTargetGroup</code>.</p>"
@@ -3776,7 +3843,7 @@
         },
         "InitQuery":{
           "shape":"String",
-          "documentation":"<p>One or more SQL statements for the proxy to run when opening each new database connection. Typically used with <code>SET</code> statements to make sure that each connection has identical settings such as time zone and character set. This setting is empty by default. For multiple statements, use semicolons as the separator. You can also include multiple variables in a single <code>SET</code> statement, such as <code>SET x=1, y=2</code>.</p>"
+          "documentation":"<p>One or more SQL statements for the proxy to run when opening each new database connection. The setting is typically used with <code>SET</code> statements to make sure that each connection has identical settings. The query added here must be valid. For including multiple variables in a single SET statement, use a comma separator. This is an optional field.</p> <p>For example: <code>SET variable1=value1, variable2=value2</code> </p> <important> <p>Since you can access initialization query as part of target group configuration, it is not protected by authentication or cryptographic methods. Anyone with access to view or manage your proxy target group configuration can view the initialization query. You should not add sensitive data, such as passwords or long-lived encryption keys, to this option.</p> </important>"
         }
       },
       "documentation":"<p>Displays the settings that control the size and behavior of the connection pool associated with a <code>DBProxyTarget</code>.</p>"
@@ -3837,7 +3904,7 @@
       "members":{
         "SourceDBClusterSnapshotIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the DB cluster snapshot to copy. This parameter isn't case-sensitive.</p> <p>You can't copy an encrypted, shared DB cluster snapshot from one Amazon Web Services Region to another.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid system snapshot in the \"available\" state.</p> </li> <li> <p>If the source snapshot is in the same Amazon Web Services Region as the copy, specify a valid DB snapshot identifier.</p> </li> <li> <p>If the source snapshot is in a different Amazon Web Services Region than the copy, specify a valid DB cluster snapshot ARN. For more information, go to <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_CopySnapshot.html#USER_CopySnapshot.AcrossRegions\"> Copying Snapshots Across Amazon Web Services Regions</a> in the <i>Amazon Aurora User Guide</i>.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
+          "documentation":"<p>The identifier of the DB cluster snapshot to copy. This parameter isn't case-sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid source snapshot in the \"available\" state.</p> </li> <li> <p>If the source snapshot is in the same Amazon Web Services Region as the copy, specify a valid DB snapshot identifier.</p> </li> <li> <p>If the source snapshot is in a different Amazon Web Services Region than the copy, specify a valid DB cluster snapshot ARN. You can also specify an ARN of a snapshot that is in a different account and a different Amazon Web Services Region. For more information, go to <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_CopySnapshot.html#USER_CopySnapshot.AcrossRegions\"> Copying Snapshots Across Amazon Web Services Regions</a> in the <i>Amazon Aurora User Guide</i>.</p> </li> </ul> <p>Example: <code>my-cluster-snapshot1</code> </p>"
         },
         "TargetDBClusterSnapshotIdentifier":{
           "shape":"String",
@@ -3848,7 +3915,7 @@
           "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted DB cluster snapshot. The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the Amazon Web Services KMS key.</p> <p>If you copy an encrypted DB cluster snapshot from your Amazon Web Services account, you can specify a value for <code>KmsKeyId</code> to encrypt the copy with a new KMS key. If you don't specify a value for <code>KmsKeyId</code>, then the copy of the DB cluster snapshot is encrypted with the same KMS key as the source DB cluster snapshot.</p> <p>If you copy an encrypted DB cluster snapshot that is shared from another Amazon Web Services account, then you must specify a value for <code>KmsKeyId</code>.</p> <p>To copy an encrypted DB cluster snapshot to another Amazon Web Services Region, you must set <code>KmsKeyId</code> to the Amazon Web Services KMS key identifier you want to use to encrypt the copy of the DB cluster snapshot in the destination Amazon Web Services Region. KMS keys are specific to the Amazon Web Services Region that they are created in, and you can't use KMS keys from one Amazon Web Services Region in another Amazon Web Services Region.</p> <p>If you copy an unencrypted DB cluster snapshot and specify a value for the <code>KmsKeyId</code> parameter, an error is returned.</p>"
         },
         "PreSignedUrl":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>When you are copying a DB cluster snapshot from one Amazon Web Services GovCloud (US) Region to another, the URL that contains a Signature Version 4 signed request for the <code>CopyDBClusterSnapshot</code> API operation in the Amazon Web Services Region that contains the source DB cluster snapshot to copy. Use the <code>PreSignedUrl</code> parameter when copying an encrypted DB cluster snapshot from another Amazon Web Services Region. Don't specify <code>PreSignedUrl</code> when copying an encrypted DB cluster snapshot in the same Amazon Web Services Region.</p> <p>This setting applies only to Amazon Web Services GovCloud (US) Regions. It's ignored in other Amazon Web Services Regions.</p> <p>The presigned URL must be a valid request for the <code>CopyDBClusterSnapshot</code> API operation that can run in the source Amazon Web Services Region that contains the encrypted DB cluster snapshot to copy. The presigned URL request must contain the following parameter values:</p> <ul> <li> <p> <code>KmsKeyId</code> - The KMS key identifier for the KMS key to use to encrypt the copy of the DB cluster snapshot in the destination Amazon Web Services Region. This is the same identifier for both the <code>CopyDBClusterSnapshot</code> operation that is called in the destination Amazon Web Services Region, and the operation contained in the presigned URL.</p> </li> <li> <p> <code>DestinationRegion</code> - The name of the Amazon Web Services Region that the DB cluster snapshot is to be created in.</p> </li> <li> <p> <code>SourceDBClusterSnapshotIdentifier</code> - The DB cluster snapshot identifier for the encrypted DB cluster snapshot to be copied. This identifier must be in the Amazon Resource Name (ARN) format for the source Amazon Web Services Region. For example, if you are copying an encrypted DB cluster snapshot from the us-west-2 Amazon Web Services Region, then your <code>SourceDBClusterSnapshotIdentifier</code> looks like the following example: <code>arn:aws:rds:us-west-2:123456789012:cluster-snapshot:aurora-cluster1-snapshot-20161115</code>.</p> </li> </ul> <p>To learn how to generate a Signature Version 4 signed request, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\"> Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\"> Signature Version 4 Signing Process</a>.</p> <note> <p>If you are using an Amazon Web Services SDK tool or the CLI, you can specify <code>SourceRegion</code> (or <code>--source-region</code> for the CLI) instead of specifying <code>PreSignedUrl</code> manually. Specifying <code>SourceRegion</code> autogenerates a presigned URL that is a valid request for the operation that can run in the source Amazon Web Services Region.</p> </note>"
         },
         "CopyTags":{
@@ -3904,7 +3971,7 @@
       "members":{
         "SourceDBSnapshotIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier for the source DB snapshot.</p> <p>If the source snapshot is in the same Amazon Web Services Region as the copy, specify a valid DB snapshot identifier. For example, you might specify <code>rds:mysql-instance1-snapshot-20130805</code>.</p> <p>If the source snapshot is in a different Amazon Web Services Region than the copy, specify a valid DB snapshot ARN. For example, you might specify <code>arn:aws:rds:us-west-2:123456789012:snapshot:mysql-instance1-snapshot-20130805</code>.</p> <p>If you are copying from a shared manual DB snapshot, this parameter must be the Amazon Resource Name (ARN) of the shared DB snapshot.</p> <p>If you are copying an encrypted snapshot this parameter must be in the ARN format for the source Amazon Web Services Region.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid system snapshot in the \"available\" state.</p> </li> </ul> <p>Example: <code>rds:mydb-2012-04-02-00-01</code> </p> <p>Example: <code>arn:aws:rds:us-west-2:123456789012:snapshot:mysql-instance1-snapshot-20130805</code> </p>"
+          "documentation":"<p>The identifier for the source DB snapshot.</p> <p>If the source snapshot is in the same Amazon Web Services Region as the copy, specify a valid DB snapshot identifier. For example, you might specify <code>rds:mysql-instance1-snapshot-20130805</code>.</p> <p>If you are copying from a shared manual DB snapshot, this parameter must be the Amazon Resource Name (ARN) of the shared DB snapshot.</p> <p>If the source snapshot is in a different Amazon Web Services Region than the copy, specify a valid DB snapshot ARN. You can also specify an ARN of a snapshot that is in a different account and a different Amazon Web Services Region. For example, you might specify <code>arn:aws:rds:us-west-2:123456789012:snapshot:mysql-instance1-snapshot-20130805</code>.</p> <p>Constraints:</p> <ul> <li> <p>Must specify a valid source snapshot in the \"available\" state.</p> </li> </ul> <p>Example: <code>rds:mydb-2012-04-02-00-01</code> </p> <p>Example: <code>arn:aws:rds:us-west-2:123456789012:snapshot:mysql-instance1-snapshot-20130805</code> </p>"
         },
         "TargetDBSnapshotIdentifier":{
           "shape":"String",
@@ -3920,7 +3987,7 @@
           "documentation":"<p>Specifies whether to copy all tags from the source DB snapshot to the target DB snapshot. By default, tags aren't copied.</p>"
         },
         "PreSignedUrl":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>When you are copying a snapshot from one Amazon Web Services GovCloud (US) Region to another, the URL that contains a Signature Version 4 signed request for the <code>CopyDBSnapshot</code> API operation in the source Amazon Web Services Region that contains the source DB snapshot to copy.</p> <p>This setting applies only to Amazon Web Services GovCloud (US) Regions. It's ignored in other Amazon Web Services Regions.</p> <p>You must specify this parameter when you copy an encrypted DB snapshot from another Amazon Web Services Region by using the Amazon RDS API. Don't specify <code>PreSignedUrl</code> when you are copying an encrypted DB snapshot in the same Amazon Web Services Region.</p> <p>The presigned URL must be a valid request for the <code>CopyDBClusterSnapshot</code> API operation that can run in the source Amazon Web Services Region that contains the encrypted DB cluster snapshot to copy. The presigned URL request must contain the following parameter values:</p> <ul> <li> <p> <code>DestinationRegion</code> - The Amazon Web Services Region that the encrypted DB snapshot is copied to. This Amazon Web Services Region is the same one where the <code>CopyDBSnapshot</code> operation is called that contains this presigned URL.</p> <p>For example, if you copy an encrypted DB snapshot from the us-west-2 Amazon Web Services Region to the us-east-1 Amazon Web Services Region, then you call the <code>CopyDBSnapshot</code> operation in the us-east-1 Amazon Web Services Region and provide a presigned URL that contains a call to the <code>CopyDBSnapshot</code> operation in the us-west-2 Amazon Web Services Region. For this example, the <code>DestinationRegion</code> in the presigned URL must be set to the us-east-1 Amazon Web Services Region.</p> </li> <li> <p> <code>KmsKeyId</code> - The KMS key identifier for the KMS key to use to encrypt the copy of the DB snapshot in the destination Amazon Web Services Region. This is the same identifier for both the <code>CopyDBSnapshot</code> operation that is called in the destination Amazon Web Services Region, and the operation contained in the presigned URL.</p> </li> <li> <p> <code>SourceDBSnapshotIdentifier</code> - The DB snapshot identifier for the encrypted snapshot to be copied. This identifier must be in the Amazon Resource Name (ARN) format for the source Amazon Web Services Region. For example, if you are copying an encrypted DB snapshot from the us-west-2 Amazon Web Services Region, then your <code>SourceDBSnapshotIdentifier</code> looks like the following example: <code>arn:aws:rds:us-west-2:123456789012:snapshot:mysql-instance1-snapshot-20161115</code>.</p> </li> </ul> <p>To learn how to generate a Signature Version 4 signed request, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\">Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a>.</p> <note> <p>If you are using an Amazon Web Services SDK tool or the CLI, you can specify <code>SourceRegion</code> (or <code>--source-region</code> for the CLI) instead of specifying <code>PreSignedUrl</code> manually. Specifying <code>SourceRegion</code> autogenerates a presigned URL that is a valid request for the operation that can run in the source Amazon Web Services Region.</p> </note>"
         },
         "OptionGroupName":{
@@ -3931,9 +3998,17 @@
           "shape":"String",
           "documentation":"<p>The external custom Availability Zone (CAZ) identifier for the target CAZ.</p> <p>Example: <code>rds-caz-aiqhTgQv</code>.</p>"
         },
+        "SnapshotTarget":{
+          "shape":"String",
+          "documentation":"<p>Configures the location where RDS will store copied snapshots.</p> <p>Valid Values:</p> <ul> <li> <p> <code>local</code> (Dedicated Local Zone)</p> </li> <li> <p> <code>outposts</code> (Amazon Web Services Outposts)</p> </li> <li> <p> <code>region</code> (Amazon Web Services Region)</p> </li> </ul>"
+        },
         "CopyOptionGroup":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to copy the DB option group associated with the source DB snapshot to the target Amazon Web Services account and associate with the target DB snapshot. The associated option group can be copied only with cross-account snapshot copy calls.</p>"
+        },
+        "SnapshotAvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>Specifies the name of the Availability Zone where RDS stores the DB snapshot. This value is valid only for snapshots that RDS stores on a Dedicated Local Zone.</p>"
         }
       },
       "documentation":"<p/>"
@@ -4039,8 +4114,7 @@
     },
     "CreateCustomDBEngineVersionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred while trying to create the CEV.</p>",
       "error":{
         "code":"CreateCustomDBEngineVersionFault",
@@ -4080,6 +4154,14 @@
           "shape":"KmsKeyIdOrArn",
           "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted CEV. A symmetric encryption KMS key is required for RDS Custom, but optional for Amazon RDS.</p> <p>If you have an existing symmetric encryption KMS key in your account, you can use it with RDS Custom. No further action is necessary. If you don't already have a symmetric encryption KMS key in your account, follow the instructions in <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk\"> Creating a symmetric encryption KMS key</a> in the <i>Amazon Web Services Key Management Service Developer Guide</i>.</p> <p>You can choose the same symmetric encryption key when you create a CEV and a DB instance, or choose different keys.</p>"
         },
+        "SourceCustomDbEngineVersionIdentifier":{
+          "shape":"String255",
+          "documentation":"<p>The ARN of a CEV to use as a source for creating a new CEV. You can specify a different Amazon Machine Imagine (AMI) by using either <code>Source</code> or <code>UseAwsProvidedLatestImage</code>. You can't specify a different JSON manifest when you specify <code>SourceCustomDbEngineVersionIdentifier</code>.</p>"
+        },
+        "UseAwsProvidedLatestImage":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to use the latest service-provided Amazon Machine Image (AMI) for the CEV. If you specify <code>UseAwsProvidedLatestImage</code>, you can't also specify <code>ImageId</code>.</p>"
+        },
         "Description":{
           "shape":"Description",
           "documentation":"<p>An optional description of your CEV.</p>"
@@ -4088,15 +4170,7 @@
           "shape":"CustomDBEngineVersionManifest",
           "documentation":"<p>The CEV manifest, which is a JSON document that describes the installation .zip files stored in Amazon S3. Specify the name/value pairs in a file or a quoted string. RDS Custom applies the patches in the order in which they are listed.</p> <p>The following JSON fields are valid:</p> <dl> <dt>MediaImportTemplateVersion</dt> <dd> <p>Version of the CEV manifest. The date is in the format <code>YYYY-MM-DD</code>.</p> </dd> <dt>databaseInstallationFileNames</dt> <dd> <p>Ordered list of installation files for the CEV.</p> </dd> <dt>opatchFileNames</dt> <dd> <p>Ordered list of OPatch installers used for the Oracle DB engine.</p> </dd> <dt>psuRuPatchFileNames</dt> <dd> <p>The PSU and RU patches for this CEV.</p> </dd> <dt>OtherPatchFileNames</dt> <dd> <p>The patches that are not in the list of PSU and RU patches. Amazon RDS applies these patches after applying the PSU and RU patches.</p> </dd> </dl> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.manifest\"> Creating the CEV manifest</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "Tags":{"shape":"TagList"},
-        "SourceCustomDbEngineVersionIdentifier":{
-          "shape":"String255",
-          "documentation":"<p>The ARN of a CEV to use as a source for creating a new CEV. You can specify a different Amazon Machine Imagine (AMI) by using either <code>Source</code> or <code>UseAwsProvidedLatestImage</code>. You can't specify a different JSON manifest when you specify <code>SourceCustomDbEngineVersionIdentifier</code>.</p>"
-        },
-        "UseAwsProvidedLatestImage":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to use the latest service-provided Amazon Machine Image (AMI) for the CEV. If you specify <code>UseAwsProvidedLatestImage</code>, you can't also specify <code>ImageId</code>.</p>"
-        }
+        "Tags":{"shape":"TagList"}
       }
     },
     "CreateDBClusterEndpointMessage":{
@@ -4142,7 +4216,7 @@
       "members":{
         "AvailabilityZones":{
           "shape":"AvailabilityZones",
-          "documentation":"<p>A list of Availability Zones (AZs) where you specifically want to create DB instances in the DB cluster.</p> <p>For information on AZs, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.RegionsAndAvailabilityZones.html#Concepts.RegionsAndAvailabilityZones.AvailabilityZones\">Availability Zones</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Constraints:</p> <ul> <li> <p>Can't specify more than three AZs.</p> </li> </ul>"
+          "documentation":"<p>A list of Availability Zones (AZs) where you specifically want to create DB instances in the DB cluster.</p> <p>For the first three DB instances that you create, RDS distributes each DB instance to a different AZ that you specify. For additional DB instances that you create, RDS randomly distributes them to the AZs that you specified. For example, if you create a DB cluster with one writer instance and three reader instances, RDS might distribute the writer instance to AZ 1, the first reader instance to AZ 2, the second reader instance to AZ 3, and the third reader instance to either AZ 1, AZ 2, or AZ 3. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.RegionsAndAvailabilityZones.html#Concepts.RegionsAndAvailabilityZones.AvailabilityZones\">Availability Zones</a> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Concepts.AuroraHighAvailability.Instances\">High availability for Aurora DB instances</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Constraints:</p> <ul> <li> <p>Can't specify more than three AZs.</p> </li> </ul>"
         },
         "BackupRetentionPeriod":{
           "shape":"IntegerOptional",
@@ -4189,7 +4263,7 @@
           "documentation":"<p>The name of the master user for the DB cluster.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 16 letters or numbers.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't be a reserved word for the chosen database engine.</p> </li> </ul>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the master database user.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Constraints:</p> <ul> <li> <p>Must contain from 8 to 41 characters.</p> </li> <li> <p>Can contain any printable ASCII character except \"/\", \"\"\", or \"@\".</p> </li> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> </ul>"
         },
         "OptionGroupName":{
@@ -4221,7 +4295,7 @@
           "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted DB cluster.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>When a KMS key isn't specified in <code>KmsKeyId</code>:</p> <ul> <li> <p>If <code>ReplicationSourceIdentifier</code> identifies an encrypted source, then Amazon RDS uses the KMS key used to encrypt the source. Otherwise, Amazon RDS uses your default KMS key.</p> </li> <li> <p>If the <code>StorageEncrypted</code> parameter is enabled and <code>ReplicationSourceIdentifier</code> isn't specified, then Amazon RDS uses your default KMS key.</p> </li> </ul> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p> <p>If you create a read replica of an encrypted DB cluster in another Amazon Web Services Region, make sure to set <code>KmsKeyId</code> to a KMS key identifier that is valid in the destination Amazon Web Services Region. This KMS key is used to encrypt the read replica in that Amazon Web Services Region.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "PreSignedUrl":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>When you are replicating a DB cluster from one Amazon Web Services GovCloud (US) Region to another, an URL that contains a Signature Version 4 signed request for the <code>CreateDBCluster</code> operation to be called in the source Amazon Web Services Region where the DB cluster is replicated from. Specify <code>PreSignedUrl</code> only when you are performing cross-Region replication from an encrypted DB cluster.</p> <p>The presigned URL must be a valid request for the <code>CreateDBCluster</code> API operation that can run in the source Amazon Web Services Region that contains the encrypted DB cluster to copy.</p> <p>The presigned URL request must contain the following parameter values:</p> <ul> <li> <p> <code>KmsKeyId</code> - The KMS key identifier for the KMS key to use to encrypt the copy of the DB cluster in the destination Amazon Web Services Region. This should refer to the same KMS key for both the <code>CreateDBCluster</code> operation that is called in the destination Amazon Web Services Region, and the operation contained in the presigned URL.</p> </li> <li> <p> <code>DestinationRegion</code> - The name of the Amazon Web Services Region that Aurora read replica will be created in.</p> </li> <li> <p> <code>ReplicationSourceIdentifier</code> - The DB cluster identifier for the encrypted DB cluster to be copied. This identifier must be in the Amazon Resource Name (ARN) format for the source Amazon Web Services Region. For example, if you are copying an encrypted DB cluster from the us-west-2 Amazon Web Services Region, then your <code>ReplicationSourceIdentifier</code> would look like Example: <code>arn:aws:rds:us-west-2:123456789012:cluster:aurora-cluster1</code>.</p> </li> </ul> <p>To learn how to generate a Signature Version 4 signed request, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\"> Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\"> Signature Version 4 Signing Process</a>.</p> <note> <p>If you are using an Amazon Web Services SDK tool or the CLI, you can specify <code>SourceRegion</code> (or <code>--source-region</code> for the CLI) instead of specifying <code>PreSignedUrl</code> manually. Specifying <code>SourceRegion</code> autogenerates a presigned URL that is a valid request for the operation that can run in the source Amazon Web Services Region.</p> </note> <p>Valid for Cluster Type: Aurora DB clusters only</p>"
         },
         "EnableIAMDatabaseAuthentication":{
@@ -4234,7 +4308,7 @@
         },
         "EnableCloudwatchLogsExports":{
           "shape":"LogTypeList",
-          "documentation":"<p>The list of log types that need to be enabled for exporting to CloudWatch Logs.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | slowquery</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>postgresql</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+          "documentation":"<p>The list of log types that need to be enabled for exporting to CloudWatch Logs.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | instance | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>instance | postgresql | iam-db-auth-error</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade | iam-db-auth-error</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "EngineMode":{
           "shape":"String",
@@ -4248,12 +4322,36 @@
           "shape":"RdsCustomClusterConfiguration",
           "documentation":"<p>Reserved for future use.</p>"
         },
+        "DBClusterInstanceClass":{
+          "shape":"String",
+          "documentation":"<p>The compute and memory capacity of each DB instance in the Multi-AZ DB cluster, for example <code>db.m6gd.xlarge</code>. Not all DB instance classes are available in all Amazon Web Services Regions, or for all database engines.</p> <p>For the full list of DB instance classes and availability for your engine, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html\">DB instance class</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p>"
+        },
+        "AllocatedStorage":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>This setting is required to create a Multi-AZ DB cluster.</p>"
+        },
+        "StorageType":{
+          "shape":"String",
+          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html#aurora-storage-type\">Storage configurations for Amazon Aurora DB clusters</a>. For information on storage types for Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html#create-multi-az-db-cluster-settings\">Settings for creating Multi-AZ DB clusters</a>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>When specified for a Multi-AZ DB cluster, a value for the <code>Iops</code> parameter is required.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values:</p> <ul> <li> <p>Aurora DB clusters - <code>aurora | aurora-iopt1</code> </p> </li> <li> <p>Multi-AZ DB clusters - <code>io1 | io2 | gp3</code> </p> </li> </ul> <p>Default:</p> <ul> <li> <p>Aurora DB clusters - <code>aurora</code> </p> </li> <li> <p>Multi-AZ DB clusters - <code>io1</code> </p> </li> </ul> <note> <p>When you create an Aurora DB cluster with the storage type set to <code>aurora-iopt1</code>, the storage type is returned in the response. The storage type isn't returned when you set it to <code>aurora</code>.</p> </note>"
+        },
+        "Iops":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster.</p> <p>For information about valid IOPS values, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS\">Provisioned IOPS storage</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>Constraints:</p> <ul> <li> <p>Must be a multiple between .5 and 50 of the storage amount for the DB cluster.</p> </li> </ul>"
+        },
+        "PubliclyAccessible":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether the DB cluster is publicly accessible.</p> <p>When the DB cluster is publicly accessible and you connect from outside of the DB cluster's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB cluster, the endpoint resolves to the private IP address. Access to the DB cluster is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB cluster isn't publicly accessible, it is an internal DB cluster with a DNS name that resolves to a private IP address.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>Default: The default behavior varies depending on whether <code>DBSubnetGroupName</code> is specified.</p> <p>If <code>DBSubnetGroupName</code> isn't specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the default VPC in the target Region doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the default VPC in the target Region has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul> <p>If <code>DBSubnetGroupName</code> is specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the subnets are part of a VPC that doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the subnets are part of a VPC that has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul>"
+        },
+        "AutoMinorVersionUpgrade":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB cluster.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
+        },
         "DeletionProtection":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection isn't enabled.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The global cluster ID of an Aurora cluster that becomes the primary cluster in the new global database cluster.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p>"
         },
         "EnableHttpEndpoint":{
@@ -4276,30 +4374,11 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable this DB cluster to forward write operations to the primary cluster of a global cluster (Aurora global database). By default, write operations are not allowed on Aurora DB clusters that are secondary clusters in an Aurora global database.</p> <p>You can set this value only on Aurora DB clusters that are members of an Aurora global database. With this parameter enabled, a secondary cluster can forward writes to the current primary cluster, and the resulting changes are replicated back to this cluster. For the primary DB cluster of an Aurora global database, this value is used immediately if the primary is demoted by a global cluster API operation, but it does nothing until then.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p>"
         },
-        "DBClusterInstanceClass":{
-          "shape":"String",
-          "documentation":"<p>The compute and memory capacity of each DB instance in the Multi-AZ DB cluster, for example <code>db.m6gd.xlarge</code>. Not all DB instance classes are available in all Amazon Web Services Regions, or for all database engines.</p> <p>For the full list of DB instance classes and availability for your engine, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html\">DB instance class</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p>"
-        },
-        "AllocatedStorage":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>This setting is required to create a Multi-AZ DB cluster.</p>"
-        },
-        "StorageType":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB cluster.</p> <p>For information on storage types for Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html#aurora-storage-type\">Storage configurations for Amazon Aurora DB clusters</a>. For information on storage types for Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/create-multi-az-db-cluster.html#create-multi-az-db-cluster-settings\">Settings for creating Multi-AZ DB clusters</a>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>When specified for a Multi-AZ DB cluster, a value for the <code>Iops</code> parameter is required.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values:</p> <ul> <li> <p>Aurora DB clusters - <code>aurora | aurora-iopt1</code> </p> </li> <li> <p>Multi-AZ DB clusters - <code>io1 | io2 | gp3</code> </p> </li> </ul> <p>Default:</p> <ul> <li> <p>Aurora DB clusters - <code>aurora</code> </p> </li> <li> <p>Multi-AZ DB clusters - <code>io1</code> </p> </li> </ul> <note> <p>When you create an Aurora DB cluster with the storage type set to <code>aurora-iopt1</code>, the storage type is returned in the response. The storage type isn't returned when you set it to <code>aurora</code>.</p> </note>"
-        },
-        "Iops":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster.</p> <p>For information about valid IOPS values, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS\">Provisioned IOPS storage</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required to create a Multi-AZ DB cluster.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>Constraints:</p> <ul> <li> <p>Must be a multiple between .5 and 50 of the storage amount for the DB cluster.</p> </li> </ul>"
-        },
-        "PubliclyAccessible":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether the DB cluster is publicly accessible.</p> <p>When the DB cluster is publicly accessible and you connect from outside of the DB cluster's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB cluster, the endpoint resolves to the private IP address. Access to the DB cluster is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB cluster isn't publicly accessible, it is an internal DB cluster with a DNS name that resolves to a private IP address.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>Default: The default behavior varies depending on whether <code>DBSubnetGroupName</code> is specified.</p> <p>If <code>DBSubnetGroupName</code> isn't specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the default VPC in the target Region doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the default VPC in the target Region has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul> <p>If <code>DBSubnetGroupName</code> is specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the subnets are part of a VPC that doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the subnets are part of a VPC that has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul>"
-        },
-        "AutoMinorVersionUpgrade":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB cluster</p>"
+          "documentation":"<p>The network type of the DB cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "MonitoringInterval":{
           "shape":"IntegerOptional",
           "documentation":"<p>The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB cluster. To turn off collecting Enhanced Monitoring metrics, specify <code>0</code>.</p> <p>If <code>MonitoringRoleArn</code> is specified, also set <code>MonitoringInterval</code> to a value other than <code>0</code>.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>0 | 1 | 5 | 10 | 15 | 30 | 60</code> </p> <p>Default: <code>0</code> </p>"
@@ -4310,7 +4389,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>The mode of Database Insights to enable for the DB cluster.</p> <p>If you set this value to <code>advanced</code>, you must also set the <code>PerformanceInsightsEnabled</code> parameter to <code>true</code> and the <code>PerformanceInsightsRetentionPeriod</code> parameter to 465.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p>"
+          "documentation":"<p>The mode of Database Insights to enable for the DB cluster.</p> <p>If you set this value to <code>advanced</code>, you must also set the <code>PerformanceInsightsEnabled</code> parameter to <code>true</code> and the <code>PerformanceInsightsRetentionPeriod</code> parameter to 465.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -4328,11 +4407,6 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable Aurora Limitless Database. You must enable Aurora Limitless Database to create a DB shard group.</p> <p>Valid for: Aurora DB clusters only</p> <note> <p>This setting is no longer used. Instead use the <code>ClusterScalabilityType</code> setting.</p> </note>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
-        "NetworkType":{
-          "shape":"String",
-          "documentation":"<p>The network type of the DB cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
-        },
         "ClusterScalabilityType":{
           "shape":"ClusterScalabilityType",
           "documentation":"<p>Specifies the scalability mode of the Aurora DB cluster. When set to <code>limitless</code>, the cluster operates as an Aurora Limitless Database. When set to <code>standard</code> (the default), the cluster uses normal DB instance creation.</p> <p>Valid for: Aurora DB clusters only</p> <note> <p>You can't modify this setting after you create the DB cluster.</p> </note>"
@@ -4345,21 +4419,25 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
         },
-        "MasterUserSecretKmsKeyId":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB cluster.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
-        },
         "EnableLocalWriteForwarding":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances.</p> <p>Valid for: Aurora DB clusters only</p>"
         },
+        "MasterUserSecretKmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB cluster.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
+        },
         "CACertificateIdentifier":{
           "shape":"String",
           "documentation":"<p>The CA certificate identifier to use for the DB cluster's server certificate.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html\">Using SSL/TLS to encrypt a connection to a DB instance</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters</p>"
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the DB cluster will fail if the DB major version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+        },
+        "MasterUserAuthenticationType":{
+          "shape":"MasterUserAuthenticationType",
+          "documentation":"<p>Specifies the authentication type for the master user. With IAM master user authentication, you can configure the master DB user with IAM database authentication when you create a DB cluster.</p> <p>You can specify one of the following values:</p> <ul> <li> <p> <code>password</code> - Use standard database authentication with a password.</p> </li> <li> <p> <code>iam-db-auth</code> - Use IAM database authentication for the master user.</p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>This option is only valid for RDS for PostgreSQL and Aurora PostgreSQL engines.</p>"
         }
       },
       "documentation":"<p/>"
@@ -4464,7 +4542,7 @@
           "documentation":"<p>The name for the master user.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. The name for the master user is managed by the DB cluster.</p> <p>This setting is required for RDS DB instances.</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 16 letters, numbers, or underscores.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't be a reserved word for the chosen database engine.</p> </li> </ul>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the master user.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. The password for the master user is managed by the DB cluster.</p> <p>Constraints:</p> <ul> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> <li> <p>Can include any printable ASCII character except \"/\", \"\"\", or \"@\". For RDS for Oracle, can't include the \"&amp;\" (ampersand) or the \"'\" (single quotes) character.</p> </li> </ul> <p>Length Constraints:</p> <ul> <li> <p>RDS for Db2 - Must contain from 8 to 255 characters.</p> </li> <li> <p>RDS for MariaDB - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Microsoft SQL Server - Must contain from 8 to 128 characters.</p> </li> <li> <p>RDS for MySQL - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Oracle - Must contain from 8 to 30 characters.</p> </li> <li> <p>RDS for PostgreSQL - Must contain from 8 to 128 characters.</p> </li> </ul>"
         },
         "DBSecurityGroups":{
@@ -4505,7 +4583,7 @@
         },
         "MultiAZ":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether the DB instance is a Multi-AZ deployment. You can't set the <code>AvailabilityZone</code> parameter if the DB instance is a Multi-AZ deployment.</p> <p>This setting doesn't apply to the following DB instances:</p> <ul> <li> <p>Amazon Aurora (DB instance Availability Zones (AZs) are managed by the DB cluster.)</p> </li> <li> <p>RDS Custom</p> </li> </ul>"
+          "documentation":"<p>Specifies whether the DB instance is a Multi-AZ deployment. You can't set the <code>AvailabilityZone</code> parameter if the DB instance is a Multi-AZ deployment.</p> <p>This setting doesn't apply to Amazon Aurora because the DB instance Availability Zones (AZs) are managed by the DB cluster.</p>"
         },
         "EngineVersion":{
           "shape":"String",
@@ -4513,16 +4591,20 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB instance during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>If you create an RDS Custom DB instance, you must set <code>AutoMinorVersionUpgrade</code> to <code>false</code>.</p>"
+          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB instance during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>If you create an RDS Custom DB instance, you must set <code>AutoMinorVersionUpgrade</code> to <code>false</code>.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "LicenseModel":{
           "shape":"String",
-          "documentation":"<p>The license model information for this DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The Bring Your Own License (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> <p>The default for RDS for Db2 is <code>bring-your-own-license</code>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul>"
+          "documentation":"<p>The license model information for this DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The bring your own license (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> <p>The default for RDS for Db2 is <code>bring-your-own-license</code>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul>"
         },
         "Iops":{
           "shape":"IntegerOptional",
           "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to initially allocate for the DB instance. For information about valid IOPS values, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html\">Amazon RDS DB instance storage</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. Storage is managed by the DB cluster.</p> <p>Constraints:</p> <ul> <li> <p>For RDS for Db2, MariaDB, MySQL, Oracle, and PostgreSQL - Must be a multiple between .5 and 50 of the storage amount for the DB instance.</p> </li> <li> <p>For RDS for SQL Server - Must be a multiple between 1 and 50 of the storage amount for the DB instance.</p> </li> </ul>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput value, in mebibyte per second (MiBps), for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The option group to associate the DB instance with.</p> <p>Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group. Also, that option group can't be removed from a DB instance after it is associated with a DB instance.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
@@ -4549,14 +4631,14 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB instance.</p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. Storage is managed by the DB cluster.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code>, if the <code>Iops</code> parameter is specified. Otherwise, <code>gp2</code>.</p>"
+          "documentation":"<p>The storage type to associate with the DB instance.</p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. Storage is managed by the DB cluster.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code>, if the <code>Iops</code> parameter is specified. Otherwise, <code>gp3</code>.</p>"
         },
         "TdeCredentialArn":{
           "shape":"String",
           "documentation":"<p>The ARN from the key store with which to associate the instance for TDE encryption.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
         },
         "TdeCredentialPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the given ARN from the key store in order to access the device.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "StorageEncrypted":{
@@ -4617,7 +4699,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>The mode of Database Insights to enable for the DB instance.</p> <p>This setting only applies to Amazon Aurora DB instances.</p> <note> <p>Currently, this value is inherited from the DB cluster and can't be changed.</p> </note>"
+          "documentation":"<p>The mode of Database Insights to enable for the DB instance.</p> <note> <p>Aurora DB instances inherit this value from the DB cluster, so you can't change this value.</p> </note>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -4633,7 +4715,7 @@
         },
         "EnableCloudwatchLogsExports":{
           "shape":"LogTypeList",
-          "documentation":"<p>The list of log types to enable for exporting to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting doesn't apply to the following DB instances:</p> <ul> <li> <p>Amazon Aurora (CloudWatch Logs exports are managed by the DB cluster.)</p> </li> <li> <p>RDS Custom</p> </li> </ul> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>RDS for Db2 - <code>diag.log | notify.log</code> </p> </li> <li> <p>RDS for MariaDB - <code>audit | error | general | slowquery</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>agent | error</code> </p> </li> <li> <p>RDS for MySQL - <code>audit | error | general | slowquery</code> </p> </li> <li> <p>RDS for Oracle - <code>alert | audit | listener | trace | oemagent</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade</code> </p> </li> </ul>"
+          "documentation":"<p>The list of log types to enable for exporting to CloudWatch Logs. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting doesn't apply to the following DB instances:</p> <ul> <li> <p>Amazon Aurora (CloudWatch Logs exports are managed by the DB cluster.)</p> </li> <li> <p>RDS Custom</p> </li> </ul> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>RDS for Db2 - <code>diag.log | notify.log | iam-db-auth-error</code> </p> </li> <li> <p>RDS for MariaDB - <code>audit | error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>agent | error</code> </p> </li> <li> <p>RDS for MySQL - <code>audit | error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>RDS for Oracle - <code>alert | audit | listener | trace | oemagent</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade | iam-db-auth-error</code> </p> </li> </ul>"
         },
         "ProcessorFeatures":{
           "shape":"ProcessorFeatureList",
@@ -4651,21 +4733,25 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
         },
-        "CustomIamInstanceProfile":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.</p> <p>This setting is required for RDS Custom.</p> <p>Constraints:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
         "BackupTarget":{
           "shape":"String",
-          "documentation":"<p>The location for storing automated backups and manual snapshots.</p> <p>Valid Values:</p> <ul> <li> <p> <code>outposts</code> (Amazon Web Services Outposts)</p> </li> <li> <p> <code>region</code> (Amazon Web Services Region)</p> </li> </ul> <p>Default: <code>region</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>The location for storing automated backups and manual snapshots.</p> <p>Valid Values:</p> <ul> <li> <p> <code>local</code> (Dedicated Local Zone)</p> </li> <li> <p> <code>outposts</code> (Amazon Web Services Outposts)</p> </li> <li> <p> <code>region</code> (Amazon Web Services Region)</p> </li> </ul> <p>Default: <code>region</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "NetworkType":{
+        "CustomIamInstanceProfile":{
           "shape":"String",
-          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
+          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance.</p> <p>This setting is required for RDS Custom.</p> <p>Constraints:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput value for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
+        "DBSystemId":{
+          "shape":"String",
+          "documentation":"<p>The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. In this context, the term \"Oracle database instance\" refers exclusively to the system global area (SGA) and Oracle background processes. If you don't specify a SID, the value defaults to <code>RDSCDB</code>. The Oracle SID is also the name of your CDB.</p>"
+        },
+        "CACertificateIdentifier":{
+          "shape":"String",
+          "documentation":"<p>The CA certificate identifier to use for the DB instance's server certificate.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html\">Using SSL/TLS to encrypt a connection to a DB instance</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html\"> Using SSL/TLS to encrypt a connection to a DB cluster</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
@@ -4675,25 +4761,21 @@
           "shape":"String",
           "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         },
-        "CACertificateIdentifier":{
-          "shape":"String",
-          "documentation":"<p>The CA certificate identifier to use for the DB instance's server certificate.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html\">Using SSL/TLS to encrypt a connection to a DB instance</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html\"> Using SSL/TLS to encrypt a connection to a DB cluster</a> in the <i>Amazon Aurora User Guide</i>.</p>"
-        },
-        "DBSystemId":{
-          "shape":"String",
-          "documentation":"<p>The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. In this context, the term \"Oracle database instance\" refers exclusively to the system global area (SGA) and Oracle background processes. If you don't specify a SID, the value defaults to <code>RDSCDB</code>. The Oracle SID is also the name of your CDB.</p>"
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to use the multi-tenant configuration or the single-tenant configuration (default). This parameter only applies to RDS for Oracle container database (CDB) engines.</p> <p>Note the following restrictions: </p> <ul> <li> <p>The DB engine that you specify in the request must support the multi-tenant configuration. If you attempt to enable the multi-tenant configuration on a DB engine that doesn't support it, the request fails.</p> </li> <li> <p>If you specify the multi-tenant configuration when you create your DB instance, you can't later modify this DB instance to use the single-tenant configuration.</p> </li> </ul>"
         },
         "DedicatedLogVolume":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.</p>"
         },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to use the multi-tenant configuration or the single-tenant configuration (default). This parameter only applies to RDS for Oracle container database (CDB) engines.</p> <p>Note the following restrictions: </p> <ul> <li> <p>The DB engine that you specify in the request must support the multi-tenant configuration. If you attempt to enable the multi-tenant configuration on a DB engine that doesn't support it, the request fails.</p> </li> <li> <p>If you specify the multi-tenant configuration when you create your DB instance, you can't later modify this DB instance to use the single-tenant configuration.</p> </li> </ul>"
-        },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.</p> </note> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the DB instance will fail if the DB major version is past its end of standard support date.</p> </note> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+        },
+        "MasterUserAuthenticationType":{
+          "shape":"MasterUserAuthenticationType",
+          "documentation":"<p>Specifies the authentication type for the master user. With IAM master user authentication, you can configure the master DB user with IAM database authentication when you create a DB instance.</p> <p>You can specify one of the following values:</p> <ul> <li> <p> <code>password</code> - Use standard database authentication with a password.</p> </li> <li> <p> <code>iam-db-auth</code> - Use IAM database authentication for the master user.</p> </li> </ul> <p>This option is only valid for RDS for PostgreSQL and Aurora PostgreSQL engines.</p>"
         }
       },
       "documentation":"<p/>"
@@ -4708,7 +4790,7 @@
         },
         "SourceDBInstanceIdentifier":{
           "shape":"String",
-          "documentation":"<p>The identifier of the DB instance that will act as the source for the read replica. Each DB instance can have up to 15 read replicas, with the exception of Oracle and SQL Server, which can have up to five.</p> <p>Constraints:</p> <ul> <li> <p>Must be the identifier of an existing Db2, MariaDB, MySQL, Oracle, PostgreSQL, or SQL Server DB instance.</p> </li> <li> <p>Can't be specified if the <code>SourceDBClusterIdentifier</code> parameter is also specified.</p> </li> <li> <p>For the limitations of Oracle read replicas, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.limitations.html#oracle-read-replicas.limitations.versions-and-licenses\">Version and licensing considerations for RDS for Oracle replicas</a> in the <i>Amazon RDS User Guide</i>.</p> </li> <li> <p>For the limitations of SQL Server read replicas, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.ReadReplicas.html#SQLServer.ReadReplicas.Limitations\">Read replica limitations with SQL Server</a> in the <i>Amazon RDS User Guide</i>.</p> </li> <li> <p>The specified DB instance must have automatic backups enabled, that is, its backup retention period must be greater than 0.</p> </li> <li> <p>If the source DB instance is in the same Amazon Web Services Region as the read replica, specify a valid DB instance identifier.</p> </li> <li> <p>If the source DB instance is in a different Amazon Web Services Region from the read replica, specify a valid DB instance ARN. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.ARN.html#USER_Tagging.ARN.Constructing\">Constructing an ARN for Amazon RDS</a> in the <i>Amazon RDS User Guide</i>. This doesn't apply to SQL Server or RDS Custom, which don't support cross-Region replicas.</p> </li> </ul>"
+          "documentation":"<p>The identifier of the DB instance that will act as the source for the read replica. Each DB instance can have up to 15 read replicas, except for the following engines:</p> <ul> <li> <p>Db2 - Can have up to three replicas.</p> </li> <li> <p>Oracle - Can have up to five read replicas.</p> </li> <li> <p>SQL Server - Can have up to five read replicas.</p> </li> </ul> <p>Constraints:</p> <ul> <li> <p>Must be the identifier of an existing Db2, MariaDB, MySQL, Oracle, PostgreSQL, or SQL Server DB instance.</p> </li> <li> <p>Can't be specified if the <code>SourceDBClusterIdentifier</code> parameter is also specified.</p> </li> <li> <p>For the limitations of Oracle read replicas, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.limitations.html#oracle-read-replicas.limitations.versions-and-licenses\">Version and licensing considerations for RDS for Oracle replicas</a> in the <i>Amazon RDS User Guide</i>.</p> </li> <li> <p>For the limitations of SQL Server read replicas, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.ReadReplicas.html#SQLServer.ReadReplicas.Limitations\">Read replica limitations with SQL Server</a> in the <i>Amazon RDS User Guide</i>.</p> </li> <li> <p>The specified DB instance must have automatic backups enabled, that is, its backup retention period must be greater than 0.</p> </li> <li> <p>If the source DB instance is in the same Amazon Web Services Region as the read replica, specify a valid DB instance identifier.</p> </li> <li> <p>If the source DB instance is in a different Amazon Web Services Region from the read replica, specify a valid DB instance ARN. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.ARN.html#USER_Tagging.ARN.Constructing\">Constructing an ARN for Amazon RDS</a> in the <i>Amazon RDS User Guide</i>. This doesn't apply to SQL Server or RDS Custom, which don't support cross-Region replicas.</p> </li> </ul>"
         },
         "DBInstanceClass":{
           "shape":"String",
@@ -4728,19 +4810,23 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to automatically apply minor engine upgrades to the read replica during the maintenance window.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>Default: Inherits the value from the source DB instance.</p>"
+          "documentation":"<p>Specifies whether to automatically apply minor engine upgrades to the read replica during the maintenance window.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>Default: Inherits the value from the source DB instance.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "Iops":{
           "shape":"IntegerOptional",
           "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to initially allocate for the DB instance.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Specifies the storage throughput value for the read replica.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora DB instances.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The option group to associate the DB instance with. If not specified, RDS uses the option group associated with the source DB instance or cluster.</p> <note> <p>For SQL Server, you must use the option group associated with the source.</p> </note> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "DBParameterGroupName":{
           "shape":"String",
-          "documentation":"<p>The name of the DB parameter group to associate with this read replica DB instance.</p> <p>For Single-AZ or Multi-AZ DB instance read replica instances, if you don't specify a value for <code>DBParameterGroupName</code>, then Amazon RDS uses the <code>DBParameterGroup</code> of the source DB instance for a same Region read replica, or the default <code>DBParameterGroup</code> for the specified DB engine for a cross-Region read replica.</p> <p>For Multi-AZ DB cluster same Region read replica instances, if you don't specify a value for <code>DBParameterGroupName</code>, then Amazon RDS uses the default <code>DBParameterGroup</code>.</p> <p>Specifying a parameter group for this operation is only supported for MySQL DB instances for cross-Region read replicas, for Multi-AZ DB cluster read replica instances, and for Oracle DB instances. It isn't supported for MySQL DB instances for same Region read replicas or for RDS Custom.</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 255 letters, numbers, or hyphens.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't end with a hyphen or contain two consecutive hyphens.</p> </li> </ul>"
+          "documentation":"<p>The name of the DB parameter group to associate with this read replica DB instance.</p> <p>For the Db2 DB engine, if your source DB instance uses the bring your own license (BYOL) model, then a custom parameter group must be associated with the replica. For a same Amazon Web Services Region replica, if you don't specify a custom parameter group, Amazon RDS associates the custom parameter group associated with the source DB instance. For a cross-Region replica, you must specify a custom parameter group. This custom parameter group must include your IBM Site ID and IBM Customer ID. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html#db2-prereqs-ibm-info\">IBM IDs for bring your own license (BYOL) for Db2</a>. </p> <p>For Single-AZ or Multi-AZ DB instance read replica instances, if you don't specify a value for <code>DBParameterGroupName</code>, then Amazon RDS uses the <code>DBParameterGroup</code> of the source DB instance for a same Region read replica, or the default <code>DBParameterGroup</code> for the specified DB engine for a cross-Region read replica.</p> <p>For Multi-AZ DB cluster same Region read replica instances, if you don't specify a value for <code>DBParameterGroupName</code>, then Amazon RDS uses the default <code>DBParameterGroup</code>.</p> <p>Specifying a parameter group for this operation is only supported for MySQL DB instances for cross-Region read replicas, for Multi-AZ DB cluster read replica instances, for Db2 DB instances, and for Oracle DB instances. It isn't supported for MySQL DB instances for same Region read replicas or for RDS Custom.</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 255 letters, numbers, or hyphens.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't end with a hyphen or contain two consecutive hyphens.</p> </li> </ul>"
         },
         "PubliclyAccessible":{
           "shape":"BooleanOptional",
@@ -4757,7 +4843,7 @@
         },
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the read replica.</p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code> if the <code>Iops</code> parameter is specified. Otherwise, <code>gp2</code>.</p>"
+          "documentation":"<p>The storage type to associate with the read replica.</p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code> if the <code>Iops</code> parameter is specified. Otherwise, <code>gp3</code>.</p>"
         },
         "CopyTagsToSnapshot":{
           "shape":"BooleanOptional",
@@ -4776,7 +4862,7 @@
           "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted read replica.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key.</p> <p>If you create an encrypted read replica in the same Amazon Web Services Region as the source DB instance or Multi-AZ DB cluster, don't specify a value for this parameter. A read replica in the same Amazon Web Services Region is always encrypted with the same KMS key as the source DB instance or cluster.</p> <p>If you create an encrypted read replica in a different Amazon Web Services Region, then you must specify a KMS key identifier for the destination Amazon Web Services Region. KMS keys are specific to the Amazon Web Services Region that they are created in, and you can't use KMS keys from one Amazon Web Services Region in another Amazon Web Services Region.</p> <p>You can't create an encrypted read replica from an unencrypted DB instance or Multi-AZ DB cluster.</p> <p>This setting doesn't apply to RDS Custom, which uses the same KMS key as the primary replica.</p>"
         },
         "PreSignedUrl":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>When you are creating a read replica from one Amazon Web Services GovCloud (US) Region to another or from one China Amazon Web Services Region to another, the URL that contains a Signature Version 4 signed request for the <code>CreateDBInstanceReadReplica</code> API operation in the source Amazon Web Services Region that contains the source DB instance.</p> <p>This setting applies only to Amazon Web Services GovCloud (US) Regions and China Amazon Web Services Regions. It's ignored in other Amazon Web Services Regions.</p> <p>This setting applies only when replicating from a source DB <i>instance</i>. Source DB clusters aren't supported in Amazon Web Services GovCloud (US) Regions and China Amazon Web Services Regions.</p> <p>You must specify this parameter when you create an encrypted read replica from another Amazon Web Services Region by using the Amazon RDS API. Don't specify <code>PreSignedUrl</code> when you are creating an encrypted read replica in the same Amazon Web Services Region.</p> <p>The presigned URL must be a valid request for the <code>CreateDBInstanceReadReplica</code> API operation that can run in the source Amazon Web Services Region that contains the encrypted source DB instance. The presigned URL request must contain the following parameter values:</p> <ul> <li> <p> <code>DestinationRegion</code> - The Amazon Web Services Region that the encrypted read replica is created in. This Amazon Web Services Region is the same one where the <code>CreateDBInstanceReadReplica</code> operation is called that contains this presigned URL.</p> <p>For example, if you create an encrypted DB instance in the us-west-1 Amazon Web Services Region, from a source DB instance in the us-east-2 Amazon Web Services Region, then you call the <code>CreateDBInstanceReadReplica</code> operation in the us-east-1 Amazon Web Services Region and provide a presigned URL that contains a call to the <code>CreateDBInstanceReadReplica</code> operation in the us-west-2 Amazon Web Services Region. For this example, the <code>DestinationRegion</code> in the presigned URL must be set to the us-east-1 Amazon Web Services Region.</p> </li> <li> <p> <code>KmsKeyId</code> - The KMS key identifier for the key to use to encrypt the read replica in the destination Amazon Web Services Region. This is the same identifier for both the <code>CreateDBInstanceReadReplica</code> operation that is called in the destination Amazon Web Services Region, and the operation contained in the presigned URL.</p> </li> <li> <p> <code>SourceDBInstanceIdentifier</code> - The DB instance identifier for the encrypted DB instance to be replicated. This identifier must be in the Amazon Resource Name (ARN) format for the source Amazon Web Services Region. For example, if you are creating an encrypted read replica from a DB instance in the us-west-2 Amazon Web Services Region, then your <code>SourceDBInstanceIdentifier</code> looks like the following example: <code>arn:aws:rds:us-west-2:123456789012:instance:mysql-instance1-20161115</code>.</p> </li> </ul> <p>To learn how to generate a Signature Version 4 signed request, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\">Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a>.</p> <note> <p>If you are using an Amazon Web Services SDK tool or the CLI, you can specify <code>SourceRegion</code> (or <code>--source-region</code> for the CLI) instead of specifying <code>PreSignedUrl</code> manually. Specifying <code>SourceRegion</code> autogenerates a presigned URL that is a valid request for the operation that can run in the source Amazon Web Services Region.</p> </note> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "EnableIAMDatabaseAuthentication":{
@@ -4785,7 +4871,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>The mode of Database Insights to enable for the read replica.</p> <note> <p>Currently, this setting is not supported.</p> </note>"
+          "documentation":"<p>The mode of Database Insights to enable for the read replica.</p> <note> <p>This setting isn't supported.</p> </note>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -4841,27 +4927,27 @@
         },
         "ReplicaMode":{
           "shape":"ReplicaMode",
-          "documentation":"<p>The open mode of the replica database: mounted or read-only.</p> <note> <p>This parameter is only supported for Oracle DB instances.</p> </note> <p>Mounted DB replicas are included in Oracle Database Enterprise Edition. The main use case for mounted replicas is cross-Region disaster recovery. The primary database doesn't use Active Data Guard to transmit information to the mounted replica. Because it doesn't accept user connections, a mounted replica can't serve a read-only workload.</p> <p>You can create a combination of mounted and read-only DB replicas for the same primary DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with Oracle Read Replicas for Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For RDS Custom, you must specify this parameter and set it to <code>mounted</code>. The value won't be set by default. After replica creation, you can manage the open mode manually.</p>"
-        },
-        "MaxAllocatedStorage":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance.</p> <p>For more information about this setting, including limitations that apply to it, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling\"> Managing capacity automatically with Amazon RDS storage autoscaling</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>The open mode of the replica database.</p> <p>This parameter is only supported for Db2 DB instances and Oracle DB instances.</p> <dl> <dt>Db2</dt> <dd> <p>Standby DB replicas are included in Db2 Advanced Edition (AE) and Db2 Standard Edition (SE). The main use case for standby replicas is cross-Region disaster recovery. Because it doesn't accept user connections, a standby replica can't serve a read-only workload.</p> <p>You can create a combination of standby and read-only DB replicas for the same primary DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-replication.html\">Working with replicas for Amazon RDS for Db2</a> in the <i>Amazon RDS User Guide</i>.</p> <p>To create standby DB replicas for RDS for Db2, set this parameter to <code>mounted</code>.</p> </dd> <dt>Oracle</dt> <dd> <p>Mounted DB replicas are included in Oracle Database Enterprise Edition. The main use case for mounted replicas is cross-Region disaster recovery. The primary database doesn't use Active Data Guard to transmit information to the mounted replica. Because it doesn't accept user connections, a mounted replica can't serve a read-only workload.</p> <p>You can create a combination of mounted and read-only DB replicas for the same primary DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with read replicas for Amazon RDS for Oracle</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For RDS Custom, you must specify this parameter and set it to <code>mounted</code>. The value won't be set by default. After replica creation, you can manage the open mode manually.</p> </dd> </dl>"
         },
-        "CustomIamInstanceProfile":{
-          "shape":"String",
-          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom DB instances.</p>"
+        "EnableCustomerOwnedIp":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts read replica.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the read replica from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
         },
         "NetworkType":{
           "shape":"String",
           "documentation":"<p>The network type of the DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for read replica. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
-        "StorageThroughput":{
+        "MaxAllocatedStorage":{
           "shape":"IntegerOptional",
-          "documentation":"<p>Specifies the storage throughput value for the read replica.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora DB instances.</p>"
+          "documentation":"<p>The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance.</p> <p>For more information about this setting, including limitations that apply to it, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling\"> Managing capacity automatically with Amazon RDS storage autoscaling</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "EnableCustomerOwnedIp":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts read replica.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the read replica from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
+        "BackupTarget":{
+          "shape":"String",
+          "documentation":"<p>The location where RDS stores automated backups and manual snapshots.</p> <p>Valid Values:</p> <ul> <li> <p> <code>local</code> for Dedicated Local Zones</p> </li> <li> <p> <code>region</code> for Amazon Web Services Region</p> </li> </ul>"
+        },
+        "CustomIamInstanceProfile":{
+          "shape":"String",
+          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom DB instances.</p>"
         },
         "AllocatedStorage":{
           "shape":"IntegerOptional",
@@ -4958,7 +5044,11 @@
           "shape":"DBProxyEndpointTargetRole",
           "documentation":"<p>The role of the DB proxy endpoint. The role determines whether the endpoint can be used for read/write or only read operations. The default is <code>READ_WRITE</code>. The only role that proxies for RDS for Microsoft SQL Server support is <code>READ_WRITE</code>.</p>"
         },
-        "Tags":{"shape":"TagList"}
+        "Tags":{"shape":"TagList"},
+        "EndpointNetworkType":{
+          "shape":"EndpointNetworkType",
+          "documentation":"<p>The network type of the DB proxy endpoint. The network type determines the IP version that the proxy endpoint supports.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy endpoint supports IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy endpoint supports IPv6 only.</p> </li> <li> <p> <code>DUAL</code> - The proxy endpoint supports both IPv4 and IPv6.</p> </li> </ul> <p>Default: <code>IPV4</code> </p> <p>Constraints:</p> <ul> <li> <p>If you specify <code>IPV6</code> or <code>DUAL</code>, the VPC and all subnets must have an IPv6 CIDR block.</p> </li> <li> <p>If you specify <code>IPV6</code> or <code>DUAL</code>, the VPC tenancy cannot be <code>dedicated</code>.</p> </li> </ul>"
+        }
       }
     },
     "CreateDBProxyEndpointResponse":{
@@ -4975,25 +5065,28 @@
       "required":[
         "DBProxyName",
         "EngineFamily",
-        "Auth",
         "RoleArn",
         "VpcSubnetIds"
       ],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier for the proxy. This name must be unique for all proxies owned by your Amazon Web Services account in the specified Amazon Web Services Region. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it can't end with a hyphen or contain two consecutive hyphens.</p>"
         },
         "EngineFamily":{
           "shape":"EngineFamily",
           "documentation":"<p>The kinds of databases that the proxy can connect to. This value determines which database network protocol the proxy recognizes when it interprets network traffic to and from the database. For Aurora MySQL, RDS for MariaDB, and RDS for MySQL databases, specify <code>MYSQL</code>. For Aurora PostgreSQL and RDS for PostgreSQL databases, specify <code>POSTGRESQL</code>. For RDS for Microsoft SQL Server, specify <code>SQLSERVER</code>.</p>"
         },
+        "DefaultAuthScheme":{
+          "shape":"DefaultAuthScheme",
+          "documentation":"<p>The default authentication scheme that the proxy uses for client connections to the proxy and connections from the proxy to the underlying database. Valid values are <code>NONE</code> and <code>IAM_AUTH</code>. When set to <code>IAM_AUTH</code>, the proxy uses end-to-end IAM authentication to connect to the database. If you don't specify <code>DefaultAuthScheme</code> or specify this parameter as <code>NONE</code>, you must specify the <code>Auth</code> option.</p>"
+        },
         "Auth":{
           "shape":"UserAuthConfigList",
           "documentation":"<p>The authorization mechanism that the proxy uses.</p>"
         },
         "RoleArn":{
-          "shape":"String",
+          "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that the proxy uses to access secrets in Amazon Web Services Secrets Manager.</p>"
         },
         "VpcSubnetIds":{
@@ -5014,11 +5107,19 @@
         },
         "DebugLogging":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether the proxy includes detailed information about SQL statements in its logs. This information helps you to debug issues involving SQL behavior or the performance and scalability of the proxy connections. The debug information includes the text of SQL statements that you submit through the proxy. Thus, only enable this setting when needed for debugging, and only when you have security measures in place to safeguard any sensitive information that appears in the logs.</p>"
+          "documentation":"<p>Specifies whether the proxy logs detailed connection and query information. When you enable <code>DebugLogging</code>, the proxy captures connection details and connection pool behavior from your queries. Debug logging increases CloudWatch costs and can impact proxy performance. Enable this option only when you need to troubleshoot connection or performance issues.</p>"
         },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An optional set of key-value pairs to associate arbitrary data of your choosing with the proxy.</p>"
+        },
+        "EndpointNetworkType":{
+          "shape":"EndpointNetworkType",
+          "documentation":"<p>The network type of the DB proxy endpoint. The network type determines the IP version that the proxy endpoint supports.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy endpoint supports IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy endpoint supports IPv6 only.</p> </li> <li> <p> <code>DUAL</code> - The proxy endpoint supports both IPv4 and IPv6.</p> </li> </ul> <p>Default: <code>IPV4</code> </p> <p>Constraints:</p> <ul> <li> <p>If you specify <code>IPV6</code> or <code>DUAL</code>, the VPC and all subnets must have an IPv6 CIDR block.</p> </li> <li> <p>If you specify <code>IPV6</code> or <code>DUAL</code>, the VPC tenancy cannot be <code>dedicated</code>.</p> </li> </ul>"
+        },
+        "TargetConnectionNetworkType":{
+          "shape":"TargetConnectionNetworkType",
+          "documentation":"<p>The network type that the proxy uses to connect to the target database. The network type determines the IP version that the proxy uses for connections to the database.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy connects to the database using IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy connects to the database using IPv6 only.</p> </li> </ul> <p>Default: <code>IPV4</code> </p> <p>Constraints:</p> <ul> <li> <p>If you specify <code>IPV6</code>, the database must support dual-stack mode. RDS doesn't support IPv6-only databases.</p> </li> <li> <p>All targets registered with the proxy must be compatible with the specified network type.</p> </li> </ul>"
         }
       }
     },
@@ -5077,7 +5178,7 @@
         },
         "ComputeRedundancy":{
           "shape":"IntegerOptional",
-          "documentation":"<p>Specifies whether to create standby DB shard groups for the DB shard group. Valid values are the following:</p> <ul> <li> <p>0 - Creates a DB shard group without a standby DB shard group. This is the default value.</p> </li> <li> <p>1 - Creates a DB shard group with a standby DB shard group in a different Availability Zone (AZ).</p> </li> <li> <p>2 - Creates a DB shard group with two standby DB shard groups in two different AZs.</p> </li> </ul>"
+          "documentation":"<p>Specifies whether to create standby standby DB data access shard for the DB shard group. Valid values are the following:</p> <ul> <li> <p>0 - Creates a DB shard group without a standby DB data access shard. This is the default value.</p> </li> <li> <p>1 - Creates a DB shard group with a standby DB data access shard in a different Availability Zone (AZ).</p> </li> <li> <p>2 - Creates a DB shard group with two standby DB data access shard in two different AZs.</p> </li> </ul>"
         },
         "MaxACU":{
           "shape":"DoubleOptional",
@@ -5195,9 +5296,10 @@
     },
     "CreateGlobalClusterMessage":{
       "type":"structure",
+      "required":["GlobalClusterIdentifier"],
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The cluster identifier for this global database cluster. This parameter is stored as a lowercase string.</p>"
         },
         "SourceDBClusterIdentifier":{
@@ -5214,7 +5316,7 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this global database cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your global cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the global cluster will fail if the DB major version is past its end of standard support date.</p> </note> <p>This setting only applies to Aurora PostgreSQL-based global databases.</p> <p>You can use this setting to enroll your global cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your global cluster past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this global database cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your global cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, creating the global cluster will fail if the DB major version is past its end of standard support date.</p> </note> <p>This setting only applies to Aurora PostgreSQL-based global databases.</p> <p>You can use this setting to enroll your global cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your global cluster past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
         },
         "DeletionProtection":{
           "shape":"BooleanOptional",
@@ -5271,7 +5373,7 @@
         "Tags":{"shape":"TagList"},
         "DataFilter":{
           "shape":"DataFilter",
-          "documentation":"<p>Data filtering options for the integration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html\">Data filtering for Aurora zero-ETL integrations with Amazon Redshift</a>. </p> <p>Valid for: Integrations with Aurora MySQL source DB clusters only</p>"
+          "documentation":"<p>Data filtering options for the integration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html\">Data filtering for Aurora zero-ETL integrations with Amazon Redshift</a> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/zero-etl.filtering.html\">Data filtering for Amazon RDS zero-ETL integrations with Amazon Redshift</a>. </p>"
         },
         "Description":{
           "shape":"IntegrationDescription",
@@ -5322,8 +5424,7 @@
       "required":[
         "DBInstanceIdentifier",
         "TenantDBName",
-        "MasterUsername",
-        "MasterUserPassword"
+        "MasterUsername"
       ],
       "members":{
         "DBInstanceIdentifier":{
@@ -5340,7 +5441,7 @@
         },
         "MasterUserPassword":{
           "shape":"SensitiveString",
-          "documentation":"<p>The password for the master user in your tenant database.</p> <p>Constraints:</p> <ul> <li> <p>Must be 8 to 30 characters.</p> </li> <li> <p>Can include any printable ASCII character except forward slash (<code>/</code>), double quote (<code>\"</code>), at symbol (<code>@</code>), ampersand (<code>&amp;</code>), or single quote (<code>'</code>).</p> </li> </ul>"
+          "documentation":"<p>The password for the master user in your tenant database.</p> <p>Constraints:</p> <ul> <li> <p>Must be 8 to 30 characters.</p> </li> <li> <p>Can include any printable ASCII character except forward slash (<code>/</code>), double quote (<code>\"</code>), at symbol (<code>@</code>), ampersand (<code>&amp;</code>), or single quote (<code>'</code>).</p> </li> <li> <p>Can't be specified when <code>ManageMasterUserPassword</code> is enabled.</p> </li> </ul>"
         },
         "CharacterSetName":{
           "shape":"String",
@@ -5350,6 +5451,14 @@
           "shape":"String",
           "documentation":"<p>The <code>NCHAR</code> value for the tenant database.</p>"
         },
+        "ManageMasterUserPassword":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
+        },
+        "MasterUserSecretKmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
+        },
         "Tags":{"shape":"TagList"}
       }
     },
@@ -5361,8 +5470,7 @@
     },
     "CustomAvailabilityZoneNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>CustomAvailabilityZoneId</code> doesn't refer to an existing custom Availability Zone identifier.</p>",
       "error":{
         "code":"CustomAvailabilityZoneNotFound",
@@ -5387,8 +5495,7 @@
     },
     "CustomDBEngineVersionAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A CEV with the specified name already exists.</p>",
       "error":{
         "code":"CustomDBEngineVersionAlreadyExistsFault",
@@ -5405,8 +5512,7 @@
     },
     "CustomDBEngineVersionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CEV was not found.</p>",
       "error":{
         "code":"CustomDBEngineVersionNotFoundFault",
@@ -5417,8 +5523,7 @@
     },
     "CustomDBEngineVersionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded your CEV quota.</p>",
       "error":{
         "code":"CustomDBEngineVersionQuotaExceededFault",
@@ -5452,7 +5557,7 @@
       "members":{
         "AllocatedStorage":{
           "shape":"IntegerOptional",
-          "documentation":"<p>For all database engines except Amazon Aurora, <code>AllocatedStorage</code> specifies the allocated storage size in gibibytes (GiB). For Aurora, <code>AllocatedStorage</code> always returns 1, because Aurora DB cluster storage size isn't fixed, but instead automatically adjusts as needed.</p>"
+          "documentation":"<p> <code>AllocatedStorage</code> specifies the allocated storage size in gibibytes (GiB). For Aurora, <code>AllocatedStorage</code> can vary because Aurora DB cluster storage size adjusts as needed.</p>"
         },
         "AvailabilityZones":{
           "shape":"AvailabilityZones",
@@ -5486,10 +5591,6 @@
           "shape":"String",
           "documentation":"<p>The current state of this DB cluster.</p>"
         },
-        "AutomaticRestartTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The time when a stopped DB cluster is restarted automatically.</p>"
-        },
         "PercentProgress":{
           "shape":"String",
           "documentation":"<p>The progress of the operation as a percentage.</p>"
@@ -5596,7 +5697,7 @@
         },
         "CloneGroupId":{
           "shape":"String",
-          "documentation":"<p>The ID of the clone group with which the DB cluster is associated.</p>"
+          "documentation":"<p>The ID of the clone group with which the DB cluster is associated. For newly created clusters, the ID is typically null. </p> <p>If you clone a DB cluster when the ID is null, the operation populates the ID value for the source cluster and the clone because both clusters become part of the same clone group. Even if you delete the clone cluster, the clone group ID remains for the lifetime of the source cluster to show that it was used in a cloning operation.</p> <p>For PITR, the clone group ID is inherited from the source cluster. For snapshot restore operations, the clone group ID isn't inherited from the source cluster.</p>"
         },
         "ClusterCreateTime":{
           "shape":"TStamp",
@@ -5622,6 +5723,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The current capacity of an Aurora Serverless v1 DB cluster. The capacity is <code>0</code> (zero) when the cluster is paused.</p> <p>For more information about Aurora Serverless v1, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html\">Using Amazon Aurora Serverless v1</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
+        "PendingModifiedValues":{
+          "shape":"ClusterPendingModifiedValues",
+          "documentation":"<p>Information about pending changes to the DB cluster. This information is returned only when there are pending changes. Specific changes are identified by subelements.</p>"
+        },
         "EngineMode":{
           "shape":"String",
           "documentation":"<p>The DB engine mode of the DB cluster, either <code>provisioned</code> or <code>serverless</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html\"> CreateDBCluster</a>.</p>"
@@ -5631,6 +5736,34 @@
           "shape":"RdsCustomClusterConfiguration",
           "documentation":"<p>Reserved for future use.</p>"
         },
+        "DBClusterInstanceClass":{
+          "shape":"String",
+          "documentation":"<p>The name of the compute and memory capacity class of the DB instance.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
+        "StorageType":{
+          "shape":"String",
+          "documentation":"<p>The storage type associated with the DB cluster.</p>"
+        },
+        "Iops":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The Provisioned IOPS (I/O operations per second) value.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput for the DB cluster. The throughput is automatically set based on the IOPS that you provision, and is not configurable.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
+        "IOOptimizedNextAllowedModificationTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The next time you can modify the DB cluster to use the <code>aurora-iopt1</code> storage type.</p> <p>This setting is only for Aurora DB clusters.</p>"
+        },
+        "PubliclyAccessible":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the DB cluster is publicly accessible.</p> <p>When the DB cluster is publicly accessible and you connect from outside of the DB cluster's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB cluster, the endpoint resolves to the private IP address. Access to the DB cluster is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB cluster isn't publicly accessible, it is an internal DB cluster with a DNS name that resolves to a private IP address.</p> <p>For more information, see <a>CreateDBCluster</a>.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
+        "AutoMinorVersionUpgrade":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether minor version patches are applied automatically.</p> <p>This setting is for Aurora DB clusters and Multi-AZ DB clusters.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
+        },
         "DeletionProtection":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the DB cluster has deletion protection enabled. The database can't be deleted when deletion protection is enabled.</p>"
@@ -5668,6 +5801,10 @@
           "documentation":"<p>The Active Directory Domain membership records associated with the DB cluster.</p>"
         },
         "TagList":{"shape":"TagList"},
+        "GlobalClusterIdentifier":{
+          "shape":"GlobalClusterIdentifier",
+          "documentation":"<p>Contains a user-supplied global database cluster identifier. This identifier is the unique key that identifies a global database cluster.</p>"
+        },
         "GlobalWriteForwardingStatus":{
           "shape":"WriteForwardingStatus",
           "documentation":"<p>The status of write forwarding for a secondary cluster in an Aurora global database.</p>"
@@ -5676,29 +5813,18 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether write forwarding is enabled for a secondary cluster in an Aurora global database. Because write forwarding takes time to enable, check the value of <code>GlobalWriteForwardingStatus</code> to confirm that the request has completed before using the write forwarding feature for this cluster.</p>"
         },
-        "PendingModifiedValues":{
-          "shape":"ClusterPendingModifiedValues",
-          "documentation":"<p>Information about pending changes to the DB cluster. This information is returned only when there are pending changes. Specific changes are identified by subelements.</p>"
-        },
-        "DBClusterInstanceClass":{
-          "shape":"String",
-          "documentation":"<p>The name of the compute and memory capacity class of the DB instance.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
-        },
-        "StorageType":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The storage type associated with the DB cluster.</p>"
-        },
-        "Iops":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The Provisioned IOPS (I/O operations per second) value.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>This setting is only for Aurora DB clusters.</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
-        "PubliclyAccessible":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Indicates whether the DB cluster is publicly accessible.</p> <p>When the DB cluster is publicly accessible and you connect from outside of the DB cluster's virtual private cloud (VPC), its Domain Name System (DNS) endpoint resolves to the public IP address. When you connect from within the same VPC as the DB cluster, the endpoint resolves to the private IP address. Access to the DB cluster is ultimately controlled by the security group it uses. That public access isn't permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB cluster isn't publicly accessible, it is an internal DB cluster with a DNS name that resolves to a private IP address.</p> <p>For more information, see <a>CreateDBCluster</a>.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        "AutomaticRestartTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The time when a stopped DB cluster is restarted automatically.</p>"
         },
-        "AutoMinorVersionUpgrade":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether minor version patches are applied automatically.</p> <p>This setting is for Aurora DB clusters and Multi-AZ DB clusters.</p>"
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfigurationInfo"},
+        "ServerlessV2PlatformVersion":{
+          "shape":"String",
+          "documentation":"<p>The version of the Aurora Serverless V2 platform used by the DB cluster. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html\">Using Aurora Serverless v2</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "MonitoringInterval":{
           "shape":"IntegerOptional",
@@ -5724,11 +5850,6 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The number of days to retain Performance Insights data.</p> <p>This setting is only for Aurora DB clusters and Multi-AZ DB clusters.</p> <p>Valid Values:</p> <ul> <li> <p> <code>7</code> </p> </li> <li> <p> <i>month</i> * 31, where <i>month</i> is a number of months from 1-23. Examples: <code>93</code> (3 months * 31), <code>341</code> (11 months * 31), <code>589</code> (19 months * 31)</p> </li> <li> <p> <code>731</code> </p> </li> </ul> <p>Default: <code>7</code> days</p>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfigurationInfo"},
-        "NetworkType":{
-          "shape":"String",
-          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>This setting is only for Aurora DB clusters.</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
-        },
         "DBSystemId":{
           "shape":"String",
           "documentation":"<p>Reserved for future use.</p>"
@@ -5737,10 +5858,6 @@
           "shape":"MasterUserSecret",
           "documentation":"<p>The secret managed by RDS in Amazon Web Services Secrets Manager for the master user password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon Aurora User Guide.</i> </p>"
         },
-        "IOOptimizedNextAllowedModificationTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The next time you can modify the DB cluster to use the <code>aurora-iopt1</code> storage type.</p> <p>This setting is only for Aurora DB clusters.</p>"
-        },
         "LocalWriteForwardingStatus":{
           "shape":"LocalWriteForwardingStatus",
           "documentation":"<p>Indicates whether an Aurora DB cluster has in-cluster write forwarding enabled, not enabled, requested, or is in the process of enabling it.</p>"
@@ -5753,10 +5870,6 @@
           "shape":"LimitlessDatabase",
           "documentation":"<p>The details for Aurora Limitless Database.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput for the DB cluster. The throughput is automatically set based on the IOPS that you provision, and is not configurable.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
-        },
         "ClusterScalabilityType":{
           "shape":"ClusterScalabilityType",
           "documentation":"<p>The scalability mode of the Aurora DB cluster. When set to <code>limitless</code>, the cluster operates as an Aurora Limitless Database. When set to <code>standard</code> (the default), the cluster uses normal DB instance creation.</p>"
@@ -5764,16 +5877,15 @@
         "CertificateDetails":{"shape":"CertificateDetails"},
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for the DB cluster.</p> <p>For more information, see CreateDBCluster.</p>"
+          "documentation":"<p>The lifecycle type for the DB cluster.</p> <p>For more information, see CreateDBCluster.</p>"
         }
       },
-      "documentation":"<p>Contains the details of an Amazon Aurora DB cluster or Multi-AZ DB cluster.</p> <p>For an Amazon Aurora DB cluster, this data type is used as a response element in the operations <code>CreateDBCluster</code>, <code>DeleteDBCluster</code>, <code>DescribeDBClusters</code>, <code>FailoverDBCluster</code>, <code>ModifyDBCluster</code>, <code>PromoteReadReplicaDBCluster</code>, <code>RestoreDBClusterFromS3</code>, <code>RestoreDBClusterFromSnapshot</code>, <code>RestoreDBClusterToPointInTime</code>, <code>StartDBCluster</code>, and <code>StopDBCluster</code>.</p> <p>For a Multi-AZ DB cluster, this data type is used as a response element in the operations <code>CreateDBCluster</code>, <code>DeleteDBCluster</code>, <code>DescribeDBClusters</code>, <code>FailoverDBCluster</code>, <code>ModifyDBCluster</code>, <code>RebootDBCluster</code>, <code>RestoreDBClusterFromSnapshot</code>, and <code>RestoreDBClusterToPointInTime</code>.</p> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ deployments with two readable standby DB instances</a> in the <i>Amazon RDS User Guide.</i> </p>",
+      "documentation":"<p>Contains the details of an Amazon Aurora DB cluster or Multi-AZ DB cluster. </p> <p>For an Amazon Aurora DB cluster, this data type is used as a response element in the operations <code>CreateDBCluster</code>, <code>DeleteDBCluster</code>, <code>DescribeDBClusters</code>, <code>FailoverDBCluster</code>, <code>ModifyDBCluster</code>, <code>PromoteReadReplicaDBCluster</code>, <code>RestoreDBClusterFromS3</code>, <code>RestoreDBClusterFromSnapshot</code>, <code>RestoreDBClusterToPointInTime</code>, <code>StartDBCluster</code>, and <code>StopDBCluster</code>.</p> <p>For a Multi-AZ DB cluster, this data type is used as a response element in the operations <code>CreateDBCluster</code>, <code>DeleteDBCluster</code>, <code>DescribeDBClusters</code>, <code>FailoverDBCluster</code>, <code>ModifyDBCluster</code>, <code>RebootDBCluster</code>, <code>RestoreDBClusterFromSnapshot</code>, and <code>RestoreDBClusterToPointInTime</code>.</p> <p>For more information on Amazon Aurora DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html\"> What is Amazon Aurora?</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ deployments with two readable standby DB instances</a> in the <i>Amazon RDS User Guide.</i> </p>",
       "wrapper":true
     },
     "DBClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user already has a DB cluster with the given identifier.</p>",
       "error":{
         "code":"DBClusterAlreadyExistsFault",
@@ -5874,13 +5986,13 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The IOPS (I/O operations per second) value for the automated backup.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
         },
-        "AwsBackupRecoveryPointArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p>"
-        },
         "StorageThroughput":{
           "shape":"IntegerOptional",
           "documentation":"<p>The storage throughput for the automated backup. The throughput is automatically set based on the IOPS that you provision, and is not configurable.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
+        "AwsBackupRecoveryPointArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p>"
         }
       },
       "documentation":"<p>An automated backup of a DB cluster. It consists of system backups, transaction logs, and the database cluster properties that existed at the time you deleted the source cluster.</p>",
@@ -5908,8 +6020,7 @@
     },
     "DBClusterAutomatedBackupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No automated backup for this DB cluster was found.</p>",
       "error":{
         "code":"DBClusterAutomatedBackupNotFoundFault",
@@ -5920,8 +6031,7 @@
     },
     "DBClusterAutomatedBackupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for retained automated backups was exceeded. This prevents you from retaining any additional automated backups. The retained automated backups quota is the same as your DB cluster quota.</p>",
       "error":{
         "code":"DBClusterAutomatedBackupQuotaExceededFault",
@@ -5983,8 +6093,7 @@
     },
     "DBClusterBacktrackNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>BacktrackIdentifier</code> doesn't refer to an existing backtrack.</p>",
       "error":{
         "code":"DBClusterBacktrackNotFoundFault",
@@ -6066,8 +6175,7 @@
     },
     "DBClusterEndpointAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified custom endpoint can't be created because it already exists.</p>",
       "error":{
         "code":"DBClusterEndpointAlreadyExistsFault",
@@ -6098,8 +6206,7 @@
     },
     "DBClusterEndpointNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified custom endpoint doesn't exist.</p>",
       "error":{
         "code":"DBClusterEndpointNotFoundFault",
@@ -6110,8 +6217,7 @@
     },
     "DBClusterEndpointQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster already has the maximum number of custom endpoints.</p>",
       "error":{
         "code":"DBClusterEndpointQuotaExceededFault",
@@ -6179,8 +6285,7 @@
     },
     "DBClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterIdentifier</code> doesn't refer to an existing DB cluster.</p>",
       "error":{
         "code":"DBClusterNotFoundFault",
@@ -6266,8 +6371,7 @@
     },
     "DBClusterParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterParameterGroupName</code> doesn't refer to an existing DB cluster parameter group.</p>",
       "error":{
         "code":"DBClusterParameterGroupNotFound",
@@ -6292,8 +6396,7 @@
     },
     "DBClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user attempted to create a new DB cluster and the user has already reached the maximum allowed DB cluster quota.</p>",
       "error":{
         "code":"DBClusterQuotaExceededFault",
@@ -6322,8 +6425,7 @@
     },
     "DBClusterRoleAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified IAM role Amazon Resource Name (ARN) is already associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleAlreadyExists",
@@ -6334,8 +6436,7 @@
     },
     "DBClusterRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified IAM role Amazon Resource Name (ARN) isn't associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleNotFound",
@@ -6346,8 +6447,7 @@
     },
     "DBClusterRoleQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of IAM roles that can be associated with the specified DB cluster.</p>",
       "error":{
         "code":"DBClusterRoleQuotaExceeded",
@@ -6451,21 +6551,21 @@
           "documentation":"<p>Indicates whether mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts is enabled.</p>"
         },
         "TagList":{"shape":"TagList"},
-        "DBSystemId":{
-          "shape":"String",
-          "documentation":"<p>Reserved for future use.</p>"
-        },
         "StorageType":{
           "shape":"String",
           "documentation":"<p>The storage type associated with the DB cluster snapshot.</p> <p>This setting is only for Aurora DB clusters.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput for the DB cluster snapshot. The throughput is automatically set based on the IOPS that you provision, and is not configurable.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        },
         "DbClusterResourceId":{
           "shape":"String",
           "documentation":"<p>The resource ID of the DB cluster that this DB cluster snapshot was created from.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput for the DB cluster snapshot. The throughput is automatically set based on the IOPS that you provision, and is not configurable.</p> <p>This setting is only for non-Aurora Multi-AZ DB clusters.</p>"
+        "DBSystemId":{
+          "shape":"String",
+          "documentation":"<p>Reserved for future use.</p>"
         }
       },
       "documentation":"<p>Contains the details for an Amazon RDS DB cluster snapshot</p> <p>This data type is used as a response element in the <code>DescribeDBClusterSnapshots</code> action.</p>",
@@ -6473,8 +6573,7 @@
     },
     "DBClusterSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user already has a DB cluster snapshot with the given identifier.</p>",
       "error":{
         "code":"DBClusterSnapshotAlreadyExistsFault",
@@ -6542,8 +6641,7 @@
     },
     "DBClusterSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBClusterSnapshotIdentifier</code> doesn't refer to an existing DB cluster snapshot.</p>",
       "error":{
         "code":"DBClusterSnapshotNotFoundFault",
@@ -6588,10 +6686,26 @@
           "shape":"String",
           "documentation":"<p>The name of the database engine.</p>"
         },
+        "MajorEngineVersion":{
+          "shape":"String",
+          "documentation":"<p>The major engine version of the CEV.</p>"
+        },
         "EngineVersion":{
           "shape":"String",
           "documentation":"<p>The version number of the database engine.</p>"
         },
+        "DatabaseInstallationFilesS3BucketName":{
+          "shape":"String",
+          "documentation":"<p>The name of the Amazon S3 bucket that contains your database installation files.</p>"
+        },
+        "DatabaseInstallationFilesS3Prefix":{
+          "shape":"String",
+          "documentation":"<p>The Amazon S3 directory that contains the database installation files. If not specified, then no prefix is assumed.</p>"
+        },
+        "CustomDBEngineVersionManifest":{
+          "shape":"CustomDBEngineVersionManifest",
+          "documentation":"<p>JSON string that lists the installation files and parameters that RDS Custom uses to create a custom engine version (CEV). RDS Custom applies the patches in the order in which they're listed in the manifest. You can set the Oracle home, Oracle base, and UNIX/Linux user and group using the installation parameters. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.preparing.html#custom-cev.preparing.manifest.fields\">JSON fields in the CEV manifest</a> in the <i>Amazon RDS User Guide</i>. </p>"
+        },
         "DBParameterGroupFamily":{
           "shape":"String",
           "documentation":"<p>The name of the DB parameter group family for the database engine.</p>"
@@ -6600,6 +6714,10 @@
           "shape":"String",
           "documentation":"<p>The description of the database engine.</p>"
         },
+        "DBEngineVersionArn":{
+          "shape":"String",
+          "documentation":"<p>The ARN of the custom engine version.</p>"
+        },
         "DBEngineVersionDescription":{
           "shape":"String",
           "documentation":"<p>The description of the database engine version.</p>"
@@ -6616,6 +6734,14 @@
           "shape":"String",
           "documentation":"<p>A value that indicates the source media provider of the AMI based on the usage operation. Applicable for RDS Custom for SQL Server.</p>"
         },
+        "KMSKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted CEV. This parameter is required for RDS Custom, but optional for Amazon RDS.</p>"
+        },
+        "CreateTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The creation time of the DB engine version.</p>"
+        },
         "SupportedCharacterSets":{
           "shape":"SupportedCharacterSetsList",
           "documentation":"<p>A list of the character sets supported by this engine for the <code>CharacterSetName</code> parameter of the <code>CreateDBInstance</code> operation.</p>"
@@ -6664,39 +6790,11 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether you can use Aurora global databases with a specific DB engine version.</p>"
         },
-        "MajorEngineVersion":{
-          "shape":"String",
-          "documentation":"<p>The major engine version of the CEV.</p>"
-        },
-        "DatabaseInstallationFilesS3BucketName":{
-          "shape":"String",
-          "documentation":"<p>The name of the Amazon S3 bucket that contains your database installation files.</p>"
-        },
-        "DatabaseInstallationFilesS3Prefix":{
-          "shape":"String",
-          "documentation":"<p>The Amazon S3 directory that contains the database installation files. If not specified, then no prefix is assumed.</p>"
-        },
-        "DBEngineVersionArn":{
-          "shape":"String",
-          "documentation":"<p>The ARN of the custom engine version.</p>"
-        },
-        "KMSKeyId":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services KMS key identifier for an encrypted CEV. This parameter is required for RDS Custom, but optional for Amazon RDS.</p>"
-        },
-        "CreateTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The creation time of the DB engine version.</p>"
-        },
         "TagList":{"shape":"TagList"},
         "SupportsBabelfish":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the engine version supports Babelfish for Aurora PostgreSQL.</p>"
         },
-        "CustomDBEngineVersionManifest":{
-          "shape":"CustomDBEngineVersionManifest",
-          "documentation":"<p>JSON string that lists the installation files and parameters that RDS Custom uses to create a custom engine version (CEV). RDS Custom applies the patches in the order in which they're listed in the manifest. You can set the Oracle home, Oracle base, and UNIX/Linux user and group using the installation parameters. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.preparing.html#custom-cev.preparing.manifest.fields\">JSON fields in the CEV manifest</a> in the <i>Amazon RDS User Guide</i>. </p>"
-        },
         "SupportsLimitlessDatabase":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the DB engine version supports Aurora Limitless Database.</p>"
@@ -6764,10 +6862,6 @@
           "shape":"String",
           "documentation":"<p>The current state of this database.</p> <p>For information about DB instance statuses, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/accessing-monitoring.html#Overview.DBInstance.Status\">Viewing DB instance status</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
-        "AutomaticRestartTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The time when a stopped DB instance is restarted automatically.</p>"
-        },
         "MasterUsername":{
           "shape":"String",
           "documentation":"<p>The master username for the DB instance.</p>"
@@ -6838,7 +6932,7 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether minor version patches are applied automatically.</p>"
+          "documentation":"<p>Indicates whether minor version patches are applied automatically.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "ReadReplicaSourceDBInstanceIdentifier":{
           "shape":"String",
@@ -6854,7 +6948,7 @@
         },
         "ReplicaMode":{
           "shape":"ReplicaMode",
-          "documentation":"<p>The open mode of an Oracle read replica. The default is <code>open-read-only</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with Oracle Read Replicas for Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <note> <p>This attribute is only supported in RDS for Oracle.</p> </note>"
+          "documentation":"<p>The open mode of a Db2 or an Oracle read replica. The default is <code>open-read-only</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-replication.html\">Working with replicas for Amazon RDS for Db2</a> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with read replicas for Amazon RDS for Oracle</a> in the <i>Amazon RDS User Guide</i>. </p> <note> <p>This attribute is only supported in RDS for Db2, RDS for Oracle, and RDS Custom for Oracle.</p> </note>"
         },
         "LicenseModel":{
           "shape":"String",
@@ -6864,6 +6958,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The Provisioned IOPS (I/O operations per second) value for the DB instance.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p>"
+        },
         "OptionGroupMemberships":{
           "shape":"OptionGroupMembershipList",
           "documentation":"<p>The list of option group memberships for this DB instance.</p>"
@@ -6997,17 +7095,21 @@
           "documentation":"<p>The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance.</p>"
         },
         "TagList":{"shape":"TagList"},
-        "DBInstanceAutomatedBackupsReplications":{
-          "shape":"DBInstanceAutomatedBackupsReplicationList",
-          "documentation":"<p>The list of replicated automated backups associated with the DB instance.</p>"
+        "AutomationMode":{
+          "shape":"AutomationMode",
+          "documentation":"<p>The automation mode of the RDS Custom DB instance: <code>full</code> or <code>all paused</code>. If <code>full</code>, the DB instance automates monitoring and instance recovery. If <code>all paused</code>, the instance pauses automation for the duration set by <code>--resume-full-automation-mode-minutes</code>.</p>"
+        },
+        "ResumeFullAutomationModeTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The number of minutes to pause the automation. When the time period ends, RDS Custom resumes full automation. The minimum value is 60 (default). The maximum value is 1,440.</p>"
         },
         "CustomerOwnedIpEnabled":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether a customer-owned IP address (CoIP) is enabled for an RDS on Outposts DB instance.</p> <p>A <i>CoIP </i>provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
         },
-        "AwsBackupRecoveryPointArn":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p>"
+          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
         "ActivityStreamStatus":{
           "shape":"ActivityStreamStatus",
@@ -7029,33 +7131,33 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether engine-native audit fields are included in the database activity stream.</p>"
         },
-        "AutomationMode":{
-          "shape":"AutomationMode",
-          "documentation":"<p>The automation mode of the RDS Custom DB instance: <code>full</code> or <code>all paused</code>. If <code>full</code>, the DB instance automates monitoring and instance recovery. If <code>all paused</code>, the instance pauses automation for the duration set by <code>--resume-full-automation-mode-minutes</code>.</p>"
-        },
-        "ResumeFullAutomationModeTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The number of minutes to pause the automation. When the time period ends, RDS Custom resumes full automation. The minimum value is 60 (default). The maximum value is 1,440.</p>"
-        },
-        "CustomIamInstanceProfile":{
+        "AwsBackupRecoveryPointArn":{
           "shape":"String",
-          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p>"
+        },
+        "DBInstanceAutomatedBackupsReplications":{
+          "shape":"DBInstanceAutomatedBackupsReplicationList",
+          "documentation":"<p>The list of replicated automated backups associated with the DB instance.</p>"
         },
         "BackupTarget":{
           "shape":"String",
-          "documentation":"<p>The location where automated backups and manual snapshots are stored: Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
+          "documentation":"<p>The location where automated backups and manual snapshots are stored: Dedicated Local Zones, Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
         },
-        "NetworkType":{
+        "AutomaticRestartTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The time when a stopped DB instance is restarted automatically.</p>"
+        },
+        "CustomIamInstanceProfile":{
           "shape":"String",
-          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
+          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
         "ActivityStreamPolicyStatus":{
           "shape":"ActivityStreamPolicyStatus",
           "documentation":"<p>The status of the policy state of the activity stream.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p>"
+        "CertificateDetails":{
+          "shape":"CertificateDetails",
+          "documentation":"<p>The details of the DB instance's server certificate.</p>"
         },
         "DBSystemId":{
           "shape":"String",
@@ -7065,10 +7167,6 @@
           "shape":"MasterUserSecret",
           "documentation":"<p>The secret managed by RDS in Amazon Web Services Secrets Manager for the master user password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
-        "CertificateDetails":{
-          "shape":"CertificateDetails",
-          "documentation":"<p>The details of the DB instance's server certificate.</p>"
-        },
         "ReadReplicaSourceDBClusterIdentifier":{
           "shape":"String",
           "documentation":"<p>The identifier of the source DB cluster if this DB instance is a read replica.</p>"
@@ -7077,6 +7175,10 @@
           "shape":"String",
           "documentation":"<p>The progress of the storage optimization operation as a percentage.</p>"
         },
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether the DB instance is in the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE).</p>"
+        },
         "DedicatedLogVolume":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.</p>"
@@ -7085,13 +7187,9 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether an upgrade is recommended for the storage file system configuration on the DB instance. To migrate to the preferred configuration, you can either create a blue/green deployment, or create a read replica from the DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.UpgradeFileSystem\">Upgrading the storage file system for a DB instance</a>.</p>"
         },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether the DB instance is in the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE).</p>"
-        },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for the DB instance.</p> <p>For more information, see CreateDBInstance.</p>"
+          "documentation":"<p>The lifecycle type for the DB instance.</p> <p>For more information, see CreateDBInstance.</p>"
         }
       },
       "documentation":"<p>Contains the details of an Amazon RDS DB instance.</p> <p>This data type is used as a response element in the operations <code>CreateDBInstance</code>, <code>CreateDBInstanceReadReplica</code>, <code>DeleteDBInstance</code>, <code>DescribeDBInstances</code>, <code>ModifyDBInstance</code>, <code>PromoteReadReplica</code>, <code>RebootDBInstance</code>, <code>RestoreDBInstanceFromDBSnapshot</code>, <code>RestoreDBInstanceFromS3</code>, <code>RestoreDBInstanceToPointInTime</code>, <code>StartDBInstance</code>, and <code>StopDBInstance</code>.</p>",
@@ -7099,8 +7197,7 @@
     },
     "DBInstanceAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The user already has a DB instance with the given identifier.</p>",
       "error":{
         "code":"DBInstanceAlreadyExists",
@@ -7176,6 +7273,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The IOPS (I/O operations per second) value for the automated backup.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput for the automated backup.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The option group the automated backup is associated with. If omitted, the default option group for the engine specified is used.</p>"
@@ -7218,11 +7319,11 @@
         },
         "BackupTarget":{
           "shape":"String",
-          "documentation":"<p>The location where automated backups are stored: Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
+          "documentation":"<p>The location where automated backups are stored: Dedicated Local Zones, Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput for the automated backup.</p>"
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether the automatic backup is for a DB instance in the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE). </p>"
         },
         "AwsBackupRecoveryPointArn":{
           "shape":"String",
@@ -7231,10 +7332,6 @@
         "DedicatedLogVolume":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.</p>"
-        },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether the automatic backup is for a DB instance in the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE). </p>"
         }
       },
       "documentation":"<p>An automated backup of a DB instance. It consists of system backups, transaction logs, and the database instance properties that existed at the time you deleted the source instance.</p>",
@@ -7263,8 +7360,7 @@
     },
     "DBInstanceAutomatedBackupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>No automated backup for this DB instance was found.</p>",
       "error":{
         "code":"DBInstanceAutomatedBackupNotFound",
@@ -7275,8 +7371,7 @@
     },
     "DBInstanceAutomatedBackupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for retained automated backups was exceeded. This prevents you from retaining any additional automated backups. The retained automated backups quota is the same as your DB instance quota.</p>",
       "error":{
         "code":"DBInstanceAutomatedBackupQuotaExceeded",
@@ -7325,8 +7420,7 @@
     },
     "DBInstanceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBInstanceIdentifier</code> doesn't refer to an existing DB instance.</p>",
       "error":{
         "code":"DBInstanceNotFound",
@@ -7337,12 +7431,12 @@
     },
     "DBInstanceNotReadyFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An attempt to download or examine log files didn't succeed because an Aurora Serverless v2 instance was paused.</p>",
       "error":{
         "code":"DBInstanceNotReady",
-        "httpStatusCode":503
+        "httpStatusCode":400,
+        "senderFault":true
       },
       "exception":true
     },
@@ -7366,8 +7460,7 @@
     },
     "DBInstanceRoleAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified <code>RoleArn</code> or <code>FeatureName</code> value is already associated with the DB instance.</p>",
       "error":{
         "code":"DBInstanceRoleAlreadyExists",
@@ -7378,8 +7471,7 @@
     },
     "DBInstanceRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified <code>RoleArn</code> value doesn't match the specified feature for the DB instance.</p>",
       "error":{
         "code":"DBInstanceRoleNotFound",
@@ -7390,8 +7482,7 @@
     },
     "DBInstanceRoleQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't associate any more Amazon Web Services Identity and Access Management (IAM) roles with the DB instance because the quota has been reached.</p>",
       "error":{
         "code":"DBInstanceRoleQuotaExceeded",
@@ -7438,8 +7529,7 @@
     },
     "DBLogFileNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>LogFileName</code> doesn't refer to an existing DB log file.</p>",
       "error":{
         "code":"DBLogFileNotFoundFault",
@@ -7448,6 +7538,31 @@
       },
       "exception":true
     },
+    "DBMajorEngineVersion":{
+      "type":"structure",
+      "members":{
+        "Engine":{
+          "shape":"String",
+          "documentation":"<p>The name of the database engine.</p>"
+        },
+        "MajorEngineVersion":{
+          "shape":"String",
+          "documentation":"<p>The major version number of the database engine.</p>"
+        },
+        "SupportedEngineLifecycles":{
+          "shape":"SupportedEngineLifecycleList",
+          "documentation":"<p>A list of the lifecycles supported by this engine for the <code>DescribeDBMajorEngineVersions</code> operation.</p>"
+        }
+      },
+      "documentation":"<p>This data type is used as a response element in the operation <code>DescribeDBMajorEngineVersions</code>.</p>"
+    },
+    "DBMajorEngineVersionsList":{
+      "type":"list",
+      "member":{
+        "shape":"DBMajorEngineVersion",
+        "locationName":"DBMajorEngineVersion"
+      }
+    },
     "DBParameterGroup":{
       "type":"structure",
       "members":{
@@ -7473,8 +7588,7 @@
     },
     "DBParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A DB parameter group with the same name exists.</p>",
       "error":{
         "code":"DBParameterGroupAlreadyExists",
@@ -7516,8 +7630,7 @@
     },
     "DBParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBParameterGroupName</code> doesn't refer to an existing DB parameter group.</p>",
       "error":{
         "code":"DBParameterGroupNotFound",
@@ -7528,8 +7641,7 @@
     },
     "DBParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of DB parameter groups.</p>",
       "error":{
         "code":"DBParameterGroupQuotaExceeded",
@@ -7604,6 +7716,10 @@
           "shape":"StringList",
           "documentation":"<p>The EC2 subnet IDs for the proxy.</p>"
         },
+        "DefaultAuthScheme":{
+          "shape":"String",
+          "documentation":"<p>The default authentication scheme that the proxy uses for client connections to the proxy and connections from the proxy to the underlying database. Valid values are <code>NONE</code> and <code>IAM_AUTH</code>. When set to <code>IAM_AUTH</code>, the proxy uses end-to-end IAM authentication to connect to the database. </p>"
+        },
         "Auth":{
           "shape":"UserAuthConfigInfoList",
           "documentation":"<p>One or more data structures specifying the authorization mechanism to connect to the associated RDS DB instance or Aurora DB cluster.</p>"
@@ -7626,7 +7742,7 @@
         },
         "DebugLogging":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the proxy includes detailed information about SQL statements in its logs. This information helps you to debug issues involving SQL behavior or the performance and scalability of the proxy connections. The debug information includes the text of SQL statements that you submit through the proxy. Thus, only enable this setting when needed for debugging, and only when you have security measures in place to safeguard any sensitive information that appears in the logs.</p>"
+          "documentation":"<p>Specifies whether the proxy logs detailed connection and query information. When you enable <code>DebugLogging</code>, the proxy captures connection details and connection pool behavior from your queries. Debug logging increases CloudWatch costs and can impact proxy performance. Enable this option only when you need to troubleshoot connection or performance issues.</p>"
         },
         "CreatedDate":{
           "shape":"TStamp",
@@ -7635,14 +7751,21 @@
         "UpdatedDate":{
           "shape":"TStamp",
           "documentation":"<p>The date and time when the proxy was last updated.</p>"
+        },
+        "EndpointNetworkType":{
+          "shape":"EndpointNetworkType",
+          "documentation":"<p>The network type of the DB proxy endpoint. The network type determines the IP version that the proxy endpoint supports.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy endpoint supports IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy endpoint supports IPv6 only.</p> </li> <li> <p> <code>DUAL</code> - The proxy endpoint supports both IPv4 and IPv6.</p> </li> </ul>"
+        },
+        "TargetConnectionNetworkType":{
+          "shape":"TargetConnectionNetworkType",
+          "documentation":"<p>The network type that the proxy uses to connect to the target database. The network type determines the IP version that the proxy uses for connections to the database.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy connects to the database using IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy connects to the database using IPv6 only.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The data structure representing a proxy managed by the RDS Proxy.</p> <p>This data type is used as a response element in the <code>DescribeDBProxies</code> action.</p>"
     },
     "DBProxyAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified proxy name must be unique for all proxies owned by your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyAlreadyExistsFault",
@@ -7697,14 +7820,17 @@
         "IsDefault":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether this endpoint is the default endpoint for the associated DB proxy. Default DB proxy endpoints always have read/write capability. Other endpoints that you associate with the DB proxy can be either read/write or read-only.</p>"
+        },
+        "EndpointNetworkType":{
+          "shape":"EndpointNetworkType",
+          "documentation":"<p>The network type of the DB proxy endpoint. The network type determines the IP version that the proxy endpoint supports.</p> <p>Valid values:</p> <ul> <li> <p> <code>IPV4</code> - The proxy endpoint supports IPv4 only.</p> </li> <li> <p> <code>IPV6</code> - The proxy endpoint supports IPv6 only.</p> </li> <li> <p> <code>DUAL</code> - The proxy endpoint supports both IPv4 and IPv6.</p> </li> </ul>"
         }
       },
       "documentation":"<p>The data structure representing an endpoint associated with a DB proxy. RDS automatically creates one endpoint for each DB proxy. For Aurora DB clusters, you can associate additional endpoints with the same DB proxy. These endpoints can be read/write or read-only. They can also reside in different VPCs than the associated DB proxy.</p> <p>This data type is used as a response element in the <code>DescribeDBProxyEndpoints</code> operation.</p>"
     },
     "DBProxyEndpointAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB proxy endpoint name must be unique for all DB proxy endpoints owned by your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyEndpointAlreadyExistsFault",
@@ -7721,12 +7847,11 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
     },
     "DBProxyEndpointNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB proxy endpoint doesn't exist.</p>",
       "error":{
         "code":"DBProxyEndpointNotFoundFault",
@@ -7737,8 +7862,7 @@
     },
     "DBProxyEndpointQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB proxy already has the maximum number of endpoints.</p>",
       "error":{
         "code":"DBProxyEndpointQuotaExceededFault",
@@ -7773,12 +7897,11 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
     },
     "DBProxyNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified proxy name doesn't correspond to a proxy owned by your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyNotFoundFault",
@@ -7789,8 +7912,7 @@
     },
     "DBProxyQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Your Amazon Web Services account already has the maximum number of proxies in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyQuotaExceededFault",
@@ -7853,8 +7975,7 @@
     },
     "DBProxyTargetAlreadyRegisteredFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The proxy is already associated with the specified RDS DB instance or Aurora DB cluster.</p>",
       "error":{
         "code":"DBProxyTargetAlreadyRegisteredFault",
@@ -7901,10 +8022,15 @@
       },
       "documentation":"<p>Represents a set of RDS DB instances, Aurora DB clusters, or both that a proxy can connect to. Currently, each target group is associated with exactly one RDS DB instance or Aurora DB cluster.</p> <p>This data type is used as a response element in the <code>DescribeDBProxyTargetGroups</code> action.</p>"
     },
+    "DBProxyTargetGroupName":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
+    },
     "DBProxyTargetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified target group isn't available for a proxy owned by your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyTargetGroupNotFoundFault",
@@ -7915,8 +8041,7 @@
     },
     "DBProxyTargetNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified RDS DB instance or Aurora DB cluster isn't available for a proxy owned by your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBProxyTargetNotFoundFault",
@@ -8071,8 +8196,7 @@
     },
     "DBSecurityGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A DB security group with the name specified in <code>DBSecurityGroupName</code> already exists.</p>",
       "error":{
         "code":"DBSecurityGroupAlreadyExists",
@@ -8125,8 +8249,7 @@
     },
     "DBSecurityGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSecurityGroupName</code> doesn't refer to an existing DB security group.</p>",
       "error":{
         "code":"DBSecurityGroupNotFound",
@@ -8137,8 +8260,7 @@
     },
     "DBSecurityGroupNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A DB security group isn't allowed for this action.</p>",
       "error":{
         "code":"DBSecurityGroupNotSupported",
@@ -8149,8 +8271,7 @@
     },
     "DBSecurityGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of DB security groups.</p>",
       "error":{
         "code":"QuotaExceeded.DBSecurityGroup",
@@ -8215,8 +8336,7 @@
     },
     "DBShardGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB shard group name must be unique in your Amazon Web Services account in the specified Amazon Web Services Region.</p>",
       "error":{
         "code":"DBShardGroupAlreadyExists",
@@ -8229,12 +8349,11 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
     },
     "DBShardGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB shard group name wasn't found.</p>",
       "error":{
         "code":"DBShardGroupNotFound",
@@ -8313,6 +8432,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>Specifies the Provisioned IOPS (I/O operations per second) value of the DB instance at the time of the snapshot.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Specifies the storage throughput for the DB snapshot.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>Provides the option group name for the DB snapshot.</p>"
@@ -8366,6 +8489,10 @@
           "documentation":"<p>The identifier for the source DB instance, which can't be changed and which is unique to an Amazon Web Services Region.</p>"
         },
         "TagList":{"shape":"TagList"},
+        "SnapshotTarget":{
+          "shape":"String",
+          "documentation":"<p>Specifies where manual snapshots are stored: Dedicated Local Zones, Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
+        },
         "OriginalSnapshotCreateTime":{
           "shape":"TStamp",
           "documentation":"<p>Specifies the time of the CreateDBSnapshot operation in Coordinated Universal Time (UTC). Doesn't change when the snapshot is copied.</p>"
@@ -8374,25 +8501,21 @@
           "shape":"TStamp",
           "documentation":"<p>The timestamp of the most recent transaction applied to the database that you're backing up. Thus, if you restore a snapshot, SnapshotDatabaseTime is the most recent transaction in the restored DB instance. In contrast, originalSnapshotCreateTime specifies the system time that the snapshot completed.</p> <p>If you back up a read replica, you can determine the replica lag by comparing SnapshotDatabaseTime with originalSnapshotCreateTime. For example, if originalSnapshotCreateTime is two hours later than SnapshotDatabaseTime, then the replica lag is two hours.</p>"
         },
-        "SnapshotTarget":{
-          "shape":"String",
-          "documentation":"<p>Specifies where manual snapshots are stored: Amazon Web Services Outposts or the Amazon Web Services Region.</p>"
-        },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>Specifies the storage throughput for the DB snapshot.</p>"
-        },
         "DBSystemId":{
           "shape":"String",
           "documentation":"<p>The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. The Oracle SID is also the name of your CDB.</p>"
         },
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the snapshot is of a DB instance using the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE).</p>"
+        },
         "DedicatedLogVolume":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.</p>"
         },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Indicates whether the snapshot is of a DB instance using the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE).</p>"
+        "SnapshotAvailabilityZone":{
+          "shape":"String",
+          "documentation":"<p>Specifies the name of the Availability Zone where RDS stores the DB snapshot. This value is valid only for snapshots that RDS stores on a Dedicated Local Zone.</p>"
         }
       },
       "documentation":"<p>Contains the details of an Amazon RDS DB snapshot.</p> <p>This data type is used as a response element in the <code>DescribeDBSnapshots</code> action.</p>",
@@ -8400,8 +8523,7 @@
     },
     "DBSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSnapshotIdentifier</code> is already used by an existing snapshot.</p>",
       "error":{
         "code":"DBSnapshotAlreadyExists",
@@ -8470,8 +8592,7 @@
     },
     "DBSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSnapshotIdentifier</code> doesn't refer to an existing DB snapshot.</p>",
       "error":{
         "code":"DBSnapshotNotFound",
@@ -8538,8 +8659,7 @@
     },
     "DBSnapshotTenantDatabaseNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified snapshot tenant database wasn't found.</p>",
       "error":{
         "code":"DBSnapshotTenantDatabaseNotFoundFault",
@@ -8589,7 +8709,7 @@
         },
         "Subnets":{
           "shape":"SubnetList",
-          "documentation":"<p>Contains a list of <code>Subnet</code> elements.</p>"
+          "documentation":"<p>Contains a list of <code>Subnet</code> elements. The list of subnets shown here might not reflect the current state of your VPC. For the most up-to-date information, we recommend checking your VPC configuration directly.</p>"
         },
         "DBSubnetGroupArn":{
           "shape":"String",
@@ -8605,8 +8725,7 @@
     },
     "DBSubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSubnetGroupName</code> is already used by an existing DB subnet group.</p>",
       "error":{
         "code":"DBSubnetGroupAlreadyExists",
@@ -8617,8 +8736,7 @@
     },
     "DBSubnetGroupDoesNotCoverEnoughAZs":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Subnets in the DB subnet group should cover at least two Availability Zones unless there is only one Availability Zone.</p>",
       "error":{
         "code":"DBSubnetGroupDoesNotCoverEnoughAZs",
@@ -8643,8 +8761,7 @@
     },
     "DBSubnetGroupNotAllowedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DBSubnetGroup shouldn't be specified while creating read replicas that lie in the same region as the source instance.</p>",
       "error":{
         "code":"DBSubnetGroupNotAllowedFault",
@@ -8655,8 +8772,7 @@
     },
     "DBSubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>DBSubnetGroupName</code> doesn't refer to an existing DB subnet group.</p>",
       "error":{
         "code":"DBSubnetGroupNotFoundFault",
@@ -8667,8 +8783,7 @@
     },
     "DBSubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of DB subnet groups.</p>",
       "error":{
         "code":"DBSubnetGroupQuotaExceeded",
@@ -8686,8 +8801,7 @@
     },
     "DBSubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of subnets in a DB subnet groups.</p>",
       "error":{
         "code":"DBSubnetQuotaExceededFault",
@@ -8698,8 +8812,7 @@
     },
     "DBUpgradeDependencyFailureFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB upgrade failed because a resource the DB depends on can't be modified.</p>",
       "error":{
         "code":"DBUpgradeDependencyFailure",
@@ -8727,6 +8840,13 @@
         "advanced"
       ]
     },
+    "DefaultAuthScheme":{
+      "type":"string",
+      "enum":[
+        "IAM_AUTH",
+        "NONE"
+      ]
+    },
     "DeleteBlueGreenDeploymentRequest":{
       "type":"structure",
       "required":["BlueGreenDeploymentIdentifier"],
@@ -8808,7 +8928,7 @@
         },
         "DeleteAutomatedBackups":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to remove automated backups immediately after the DB cluster is deleted. This parameter isn't case-sensitive. The default is to remove automated backups immediately after the DB cluster is deleted.</p>"
+          "documentation":"<p>Specifies whether to remove automated backups immediately after the DB cluster is deleted. This parameter isn't case-sensitive. The default is to remove automated backups immediately after the DB cluster is deleted, unless the Amazon Web Services Backup policy specifies a point-in-time restore rule.</p>"
         }
       },
       "documentation":"<p/>"
@@ -8931,7 +9051,7 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The name of the DB proxy to delete.</p>"
         }
       }
@@ -9016,7 +9136,7 @@
       "required":["GlobalClusterIdentifier"],
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The cluster identifier of the global database cluster being deleted.</p>"
         }
       }
@@ -9084,11 +9204,11 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier of the <code>DBProxy</code> that is associated with the <code>DBProxyTargetGroup</code>.</p>"
         },
         "TargetGroupName":{
-          "shape":"String",
+          "shape":"DBProxyTargetGroupName",
           "documentation":"<p>The identifier of the <code>DBProxyTargetGroup</code>.</p>"
         },
         "DBInstanceIdentifiers":{
@@ -9103,13 +9223,11 @@
     },
     "DeregisterDBProxyTargetsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountAttributesMessage":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>"
     },
     "DescribeBlueGreenDeploymentsRequest":{
@@ -9550,6 +9668,40 @@
       },
       "documentation":"<p>The response from a call to <code>DescribeDBLogFiles</code>.</p>"
     },
+    "DescribeDBMajorEngineVersionsRequest":{
+      "type":"structure",
+      "members":{
+        "Engine":{
+          "shape":"Engine",
+          "documentation":"<p>The database engine to return major version details for.</p> <p>Valid Values:</p> <ul> <li> <p> <code>aurora-mysql</code> </p> </li> <li> <p> <code>aurora-postgresql</code> </p> </li> <li> <p> <code>custom-sqlserver-ee</code> </p> </li> <li> <p> <code>custom-sqlserver-se</code> </p> </li> <li> <p> <code>custom-sqlserver-web</code> </p> </li> <li> <p> <code>db2-ae</code> </p> </li> <li> <p> <code>db2-se</code> </p> </li> <li> <p> <code>mariadb</code> </p> </li> <li> <p> <code>mysql</code> </p> </li> <li> <p> <code>oracle-ee</code> </p> </li> <li> <p> <code>oracle-ee-cdb</code> </p> </li> <li> <p> <code>oracle-se2</code> </p> </li> <li> <p> <code>oracle-se2-cdb</code> </p> </li> <li> <p> <code>postgres</code> </p> </li> <li> <p> <code>sqlserver-ee</code> </p> </li> <li> <p> <code>sqlserver-se</code> </p> </li> <li> <p> <code>sqlserver-ex</code> </p> </li> <li> <p> <code>sqlserver-web</code> </p> </li> </ul>"
+        },
+        "MajorEngineVersion":{
+          "shape":"MajorEngineVersion",
+          "documentation":"<p>A specific database major engine version to return details for.</p> <p>Example: <code>8.4</code> </p>"
+        },
+        "Marker":{
+          "shape":"Marker",
+          "documentation":"<p>An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>.</p>"
+        },
+        "MaxRecords":{
+          "shape":"MaxRecords",
+          "documentation":"<p>The maximum number of records to include in the response. If more than the <code>MaxRecords</code> value is available, a pagination token called a marker is included in the response so you can retrieve the remaining results.</p> <p>Default: 100</p>"
+        }
+      }
+    },
+    "DescribeDBMajorEngineVersionsResponse":{
+      "type":"structure",
+      "members":{
+        "DBMajorEngineVersions":{
+          "shape":"DBMajorEngineVersionsList",
+          "documentation":"<p>A list of <code>DBMajorEngineVersion</code> elements.</p>"
+        },
+        "Marker":{
+          "shape":"String",
+          "documentation":"<p>An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by <code>MaxRecords</code>.</p>"
+        }
+      }
+    },
     "DescribeDBParameterGroupsMessage":{
       "type":"structure",
       "members":{
@@ -9602,7 +9754,7 @@
       "type":"structure",
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The name of the DB proxy. If you omit this parameter, the output includes information about all DB proxies owned by your Amazon Web Services account ID.</p>"
         },
         "Filters":{
@@ -9675,11 +9827,11 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier of the <code>DBProxy</code> associated with the target group.</p>"
         },
         "TargetGroupName":{
-          "shape":"String",
+          "shape":"DBProxyTargetGroupName",
           "documentation":"<p>The identifier of the <code>DBProxyTargetGroup</code> to describe.</p>"
         },
         "Filters":{
@@ -9714,11 +9866,11 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier of the <code>DBProxyTarget</code> to describe.</p>"
         },
         "TargetGroupName":{
-          "shape":"String",
+          "shape":"DBProxyTargetGroupName",
           "documentation":"<p>The identifier of the <code>DBProxyTargetGroup</code> to describe.</p>"
         },
         "Filters":{
@@ -10116,7 +10268,7 @@
       "type":"structure",
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The user-supplied DB cluster identifier. If this parameter is specified, information from only the specific DB cluster is returned. This parameter isn't case-sensitive.</p> <p>Constraints:</p> <ul> <li> <p>If supplied, must match an existing DBClusterIdentifier.</p> </li> </ul>"
         },
         "Filters":{
@@ -10535,8 +10687,7 @@
     },
     "DomainNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>Domain</code> doesn't refer to an existing Active Directory domain.</p>",
       "error":{
         "code":"DomainNotFoundFault",
@@ -10572,7 +10723,7 @@
       "type":"structure",
       "members":{
         "LogFileData":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>Entries from the specified log file.</p>"
         },
         "Marker":{
@@ -10643,8 +10794,7 @@
     },
     "Ec2ImagePropertiesNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The AMI configuration prerequisite has not been met.</p>",
       "error":{
         "code":"Ec2ImagePropertiesNotSupportedFault",
@@ -10699,6 +10849,19 @@
       },
       "documentation":"<p>This data type represents the information you need to connect to an Amazon RDS DB instance. This data type is used as a response element in the following actions:</p> <ul> <li> <p> <code>CreateDBInstance</code> </p> </li> <li> <p> <code>DescribeDBInstances</code> </p> </li> <li> <p> <code>DeleteDBInstance</code> </p> </li> </ul> <p>For the data structure that represents Amazon Aurora DB cluster endpoints, see <code>DBClusterEndpoint</code>.</p>"
     },
+    "EndpointNetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "IPV6",
+        "DUAL"
+      ]
+    },
+    "Engine":{
+      "type":"string",
+      "max":50,
+      "min":1
+    },
     "EngineDefaults":{
       "type":"structure",
       "members":{
@@ -10855,8 +11018,7 @@
     },
     "EventSubscriptionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have reached the maximum number of event subscriptions.</p>",
       "error":{
         "code":"EventSubscriptionQuotaExceeded",
@@ -10979,8 +11141,7 @@
     },
     "ExportTaskAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't start an export task that's already running.</p>",
       "error":{
         "code":"ExportTaskAlreadyExists",
@@ -10991,8 +11152,7 @@
     },
     "ExportTaskNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The export task doesn't exist.</p>",
       "error":{
         "code":"ExportTaskNotFound",
@@ -11144,12 +11304,12 @@
       "type":"structure",
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>Contains a user-supplied global database cluster identifier. This identifier is the unique key that identifies a global database cluster.</p>"
         },
         "GlobalClusterResourceId":{
           "shape":"String",
-          "documentation":"<p>The Amazon Web Services Region-unique, immutable identifier for the global database cluster. This identifier is found in Amazon Web Services CloudTrail log entries whenever the Amazon Web Services KMS key for the DB cluster is accessed.</p>"
+          "documentation":"<p>The Amazon Web Services <a href=\"https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?id=docs_gateway#partition\">partition</a>-unique, immutable identifier for the global database cluster. This identifier is found in Amazon Web Services CloudTrail log entries whenever the Amazon Web Services KMS key for the DB cluster is accessed.</p>"
         },
         "GlobalClusterArn":{
           "shape":"String",
@@ -11169,7 +11329,7 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for the global cluster.</p> <p>For more information, see CreateGlobalCluster.</p>"
+          "documentation":"<p>The lifecycle type for the global cluster.</p> <p>For more information, see CreateGlobalCluster.</p>"
         },
         "DatabaseName":{
           "shape":"String",
@@ -11202,8 +11362,7 @@
     },
     "GlobalClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> already exists. Specify a new global database identifier (unique name) to create a new global database cluster or to rename an existing one.</p>",
       "error":{
         "code":"GlobalClusterAlreadyExistsFault",
@@ -11268,8 +11427,7 @@
     },
     "GlobalClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>GlobalClusterIdentifier</code> doesn't refer to an existing global database cluster.</p>",
       "error":{
         "code":"GlobalClusterNotFoundFault",
@@ -11280,8 +11438,7 @@
     },
     "GlobalClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of global database clusters for this account is already at the maximum allowed.</p>",
       "error":{
         "code":"GlobalClusterQuotaExceededFault",
@@ -11334,8 +11491,7 @@
     },
     "IamRoleMissingPermissionsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The IAM role requires additional permissions to export to an Amazon S3 bucket.</p>",
       "error":{
         "code":"IamRoleMissingPermissions",
@@ -11346,8 +11502,7 @@
     },
     "IamRoleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The IAM role is missing for exporting to an Amazon S3 bucket.</p>",
       "error":{
         "code":"IamRoleNotFound",
@@ -11358,8 +11513,7 @@
     },
     "InstanceQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of DB instances.</p>",
       "error":{
         "code":"InstanceQuotaExceeded",
@@ -11370,8 +11524,7 @@
     },
     "InsufficientAvailableIPsInSubnetFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation can't be performed because there aren't enough available IP addresses in the proxy's subnets. Add more CIDR blocks to the VPC or remove IP address that aren't required from the subnets.</p>",
       "error":{
         "code":"InsufficientAvailableIPsInSubnetFault",
@@ -11382,8 +11535,7 @@
     },
     "InsufficientDBClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB cluster doesn't have enough capacity for the current operation.</p>",
       "error":{
         "code":"InsufficientDBClusterCapacityFault",
@@ -11394,8 +11546,7 @@
     },
     "InsufficientDBInstanceCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB instance class isn't available in the specified Availability Zone.</p>",
       "error":{
         "code":"InsufficientDBInstanceCapacity",
@@ -11406,8 +11557,7 @@
     },
     "InsufficientStorageClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is insufficient storage available for the current action. You might be able to resolve this error by updating your subnet group to use different Availability Zones that have more storage available.</p>",
       "error":{
         "code":"InsufficientStorageClusterCapacity",
@@ -11450,14 +11600,6 @@
           "documentation":"<p>The current status of the integration.</p>"
         },
         "Tags":{"shape":"TagList"},
-        "CreateTime":{
-          "shape":"TStamp",
-          "documentation":"<p>The time when the integration was created, in Universal Coordinated Time (UTC).</p>"
-        },
-        "Errors":{
-          "shape":"IntegrationErrorList",
-          "documentation":"<p>Any errors associated with the integration.</p>"
-        },
         "DataFilter":{
           "shape":"DataFilter",
           "documentation":"<p>Data filters for the integration. These filters determine which tables from the source database are sent to the target Amazon Redshift data warehouse. </p>"
@@ -11465,14 +11607,21 @@
         "Description":{
           "shape":"IntegrationDescription",
           "documentation":"<p>A description of the integration.</p>"
+        },
+        "CreateTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The time when the integration was created, in Universal Coordinated Time (UTC).</p>"
+        },
+        "Errors":{
+          "shape":"IntegrationErrorList",
+          "documentation":"<p>Any errors associated with the integration.</p>"
         }
       },
       "documentation":"<p>A zero-ETL integration with Amazon Redshift.</p>"
     },
     "IntegrationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The integration you are trying to create already exists.</p>",
       "error":{
         "code":"IntegrationAlreadyExistsFault",
@@ -11489,8 +11638,7 @@
     },
     "IntegrationConflictOperationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A conflicting conditional operation is currently in progress against this resource. Typically occurs when there are multiple requests being made to the same resource at the same time, and these requests conflict with each other.</p>",
       "error":{
         "code":"IntegrationConflictOperationFault",
@@ -11544,12 +11692,11 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+      "pattern":"[a-zA-Z](?:-?[a-zA-Z0-9]+)*"
     },
     "IntegrationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified integration could not be found.</p>",
       "error":{
         "code":"IntegrationNotFoundFault",
@@ -11560,8 +11707,7 @@
     },
     "IntegrationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't crate any more zero-ETL integrations because the quota has been reached.</p>",
       "error":{
         "code":"IntegrationQuotaExceededFault",
@@ -11584,8 +11730,7 @@
     },
     "InvalidBlueGreenDeploymentStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The blue/green deployment can't be switched over or deleted because there is an invalid configuration in the green environment.</p>",
       "error":{
         "code":"InvalidBlueGreenDeploymentStateFault",
@@ -11596,8 +11741,7 @@
     },
     "InvalidCustomDBEngineVersionStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't delete the CEV.</p>",
       "error":{
         "code":"InvalidCustomDBEngineVersionStateFault",
@@ -11608,8 +11752,7 @@
     },
     "InvalidDBClusterAutomatedBackupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The automated backup is in an invalid state. For example, this automated backup is associated with an active cluster.</p>",
       "error":{
         "code":"InvalidDBClusterAutomatedBackupStateFault",
@@ -11620,8 +11763,7 @@
     },
     "InvalidDBClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>Capacity</code> isn't a valid Aurora Serverless DB cluster capacity. Valid capacity values are <code>2</code>, <code>4</code>, <code>8</code>, <code>16</code>, <code>32</code>, <code>64</code>, <code>128</code>, and <code>256</code>.</p>",
       "error":{
         "code":"InvalidDBClusterCapacityFault",
@@ -11632,8 +11774,7 @@
     },
     "InvalidDBClusterEndpointStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation can't be performed on the endpoint while the endpoint is in this state.</p>",
       "error":{
         "code":"InvalidDBClusterEndpointStateFault",
@@ -11644,8 +11785,7 @@
     },
     "InvalidDBClusterSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The supplied value isn't a valid DB cluster snapshot state.</p>",
       "error":{
         "code":"InvalidDBClusterSnapshotStateFault",
@@ -11656,8 +11796,7 @@
     },
     "InvalidDBClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation can't be performed while the cluster is in this state.</p>",
       "error":{
         "code":"InvalidDBClusterStateFault",
@@ -11668,8 +11807,7 @@
     },
     "InvalidDBInstanceAutomatedBackupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The automated backup is in an invalid state. For example, this automated backup is associated with an active instance.</p>",
       "error":{
         "code":"InvalidDBInstanceAutomatedBackupState",
@@ -11680,8 +11818,7 @@
     },
     "InvalidDBInstanceStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB instance isn't in a valid state.</p>",
       "error":{
         "code":"InvalidDBInstanceState",
@@ -11692,8 +11829,7 @@
     },
     "InvalidDBParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB parameter group is in use or is in an invalid state. If you are attempting to delete the parameter group, you can't delete it when the parameter group is in this state.</p>",
       "error":{
         "code":"InvalidDBParameterGroupState",
@@ -11704,8 +11840,7 @@
     },
     "InvalidDBProxyEndpointStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't perform this operation while the DB proxy endpoint is in a particular state.</p>",
       "error":{
         "code":"InvalidDBProxyEndpointStateFault",
@@ -11716,8 +11851,7 @@
     },
     "InvalidDBProxyStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation can't be performed while the proxy is in this state.</p>",
       "error":{
         "code":"InvalidDBProxyStateFault",
@@ -11728,8 +11862,7 @@
     },
     "InvalidDBSecurityGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the DB security group doesn't allow deletion.</p>",
       "error":{
         "code":"InvalidDBSecurityGroupState",
@@ -11740,8 +11873,7 @@
     },
     "InvalidDBShardGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB shard group must be in the available state.</p>",
       "error":{
         "code":"InvalidDBShardGroupState",
@@ -11752,8 +11884,7 @@
     },
     "InvalidDBSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the DB snapshot doesn't allow deletion.</p>",
       "error":{
         "code":"InvalidDBSnapshotState",
@@ -11764,8 +11895,7 @@
     },
     "InvalidDBSubnetGroupFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DBSubnetGroup doesn't belong to the same VPC as that of an existing cross-region read replica of the same source instance.</p>",
       "error":{
         "code":"InvalidDBSubnetGroupFault",
@@ -11776,8 +11906,7 @@
     },
     "InvalidDBSubnetGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet group cannot be deleted because it's in use.</p>",
       "error":{
         "code":"InvalidDBSubnetGroupStateFault",
@@ -11788,8 +11917,7 @@
     },
     "InvalidDBSubnetStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet isn't in the <i>available</i> state.</p>",
       "error":{
         "code":"InvalidDBSubnetStateFault",
@@ -11800,8 +11928,7 @@
     },
     "InvalidEventSubscriptionStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This error can occur if someone else is modifying a subscription. You should retry the action.</p>",
       "error":{
         "code":"InvalidEventSubscriptionState",
@@ -11812,8 +11939,7 @@
     },
     "InvalidExportOnlyFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The export is invalid for exporting to an Amazon S3 bucket.</p>",
       "error":{
         "code":"InvalidExportOnly",
@@ -11824,8 +11950,7 @@
     },
     "InvalidExportSourceStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the export snapshot is invalid for exporting to an Amazon S3 bucket.</p>",
       "error":{
         "code":"InvalidExportSourceState",
@@ -11836,8 +11961,7 @@
     },
     "InvalidExportTaskStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't cancel an export task that has completed.</p>",
       "error":{
         "code":"InvalidExportTaskStateFault",
@@ -11848,8 +11972,7 @@
     },
     "InvalidGlobalClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The global cluster is in an invalid state and can't perform the requested operation.</p>",
       "error":{
         "code":"InvalidGlobalClusterStateFault",
@@ -11860,8 +11983,7 @@
     },
     "InvalidIntegrationStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The integration is in an invalid state and can't perform the requested operation.</p>",
       "error":{
         "code":"InvalidIntegrationStateFault",
@@ -11872,8 +11994,7 @@
     },
     "InvalidOptionGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The option group isn't in the <i>available</i> state.</p>",
       "error":{
         "code":"InvalidOptionGroupStateFault",
@@ -11884,8 +12005,7 @@
     },
     "InvalidResourceStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation can't be performed because another operation is in progress.</p>",
       "error":{
         "code":"InvalidResourceStateFault",
@@ -11896,8 +12016,7 @@
     },
     "InvalidRestoreFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cannot restore from VPC backup to non-VPC DB instance.</p>",
       "error":{
         "code":"InvalidRestoreFault",
@@ -11908,8 +12027,7 @@
     },
     "InvalidS3BucketFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon S3 bucket name can't be found or Amazon RDS isn't authorized to access the specified Amazon S3 bucket. Verify the <b>SourceS3BucketName</b> and <b>S3IngestionRoleArn</b> values and try again.</p>",
       "error":{
         "code":"InvalidS3BucketFault",
@@ -11920,8 +12038,7 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is invalid, or multiple subnets were requested that are not all in a common VPC.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -11932,8 +12049,7 @@
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet group doesn't cover all Availability Zones after it's created because of users' change.</p>",
       "error":{
         "code":"InvalidVPCNetworkStateFault",
@@ -11954,8 +12070,7 @@
     },
     "KMSKeyNotAccessibleFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred accessing an Amazon Web Services KMS key.</p>",
       "error":{
         "code":"KMSKeyNotAccessibleFault",
@@ -11974,6 +12089,13 @@
       "min":1,
       "pattern":"[a-zA-Z0-9_:\\-\\/]+"
     },
+    "LifecycleSupportName":{
+      "type":"string",
+      "enum":[
+        "open-source-rds-standard-support",
+        "open-source-rds-extended-support"
+      ]
+    },
     "LimitlessDatabase":{
       "type":"structure",
       "members":{
@@ -12032,11 +12154,23 @@
     },
     "Long":{"type":"long"},
     "LongOptional":{"type":"long"},
+    "MajorEngineVersion":{
+      "type":"string",
+      "max":50,
+      "min":1
+    },
     "Marker":{
       "type":"string",
       "max":340,
       "min":1
     },
+    "MasterUserAuthenticationType":{
+      "type":"string",
+      "enum":[
+        "password",
+        "iam-db-auth"
+      ]
+    },
     "MasterUserSecret":{
       "type":"structure",
       "members":{
@@ -12057,8 +12191,7 @@
     },
     "MaxDBShardGroupLimitReached":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of DB shard groups for your Amazon Web Services account in the specified Amazon Web Services Region has been reached.</p>",
       "error":{
         "code":"MaxDBShardGroupLimitReached",
@@ -12310,7 +12443,7 @@
           "documentation":"<p>The port number on which the DB cluster accepts connections.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Valid Values: <code>1150-65535</code> </p> <p>Default: The same port as the original DB cluster.</p>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The new password for the master database user.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Constraints:</p> <ul> <li> <p>Must contain from 8 to 41 characters.</p> </li> <li> <p>Can contain any printable ASCII character except \"/\", \"\"\", or \"@\".</p> </li> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> </ul>"
         },
         "OptionGroupName":{
@@ -12335,7 +12468,7 @@
         },
         "CloudwatchLogsExportConfiguration":{
           "shape":"CloudwatchLogsExportConfiguration",
-          "documentation":"<p>The configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB cluster.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | slowquery</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>postgresql</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+          "documentation":"<p>The configuration setting for the log types to be enabled for export to CloudWatch Logs for a specific DB cluster.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | instance | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>instance | postgresql | iam-db-auth-error</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade | iam-db-auth-error</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "EngineVersion":{
           "shape":"String",
@@ -12395,8 +12528,13 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
+          "documentation":"<p>Specifies whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
+        },
+        "NetworkType":{
+          "shape":"String",
+          "documentation":"<p>The network type of the DB cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "MonitoringInterval":{
           "shape":"IntegerOptional",
           "documentation":"<p>The interval, in seconds, between points when Enhanced Monitoring metrics are collected for the DB cluster. To turn off collecting Enhanced Monitoring metrics, specify <code>0</code>.</p> <p>If <code>MonitoringRoleArn</code> is specified, also set <code>MonitoringInterval</code> to a value other than <code>0</code>.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters only</p> <p>Valid Values: <code>0 | 1 | 5 | 10 | 15 | 30 | 60</code> </p> <p>Default: <code>0</code> </p>"
@@ -12407,7 +12545,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB cluster.</p> <p>If you change the value from <code>standard</code> to <code>advanced</code>, you must set the <code>PerformanceInsightsEnabled</code> parameter to <code>true</code> and the <code>PerformanceInsightsRetentionPeriod</code> parameter to 465.</p> <p>If you change the value from <code>advanced</code> to <code>standard</code>, you must set the <code>PerformanceInsightsEnabled</code> parameter to <code>false</code>.</p> <p>Valid for Cluster Type: Aurora DB clusters only</p>"
+          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB cluster.</p> <p>If you change the value from <code>standard</code> to <code>advanced</code>, you must set the <code>PerformanceInsightsEnabled</code> parameter to <code>true</code> and the <code>PerformanceInsightsRetentionPeriod</code> parameter to 465.</p> <p>If you change the value from <code>advanced</code> to <code>standard</code>, you can set the <code>PerformanceInsightsEnabled</code> parameter to <code>true</code> to collect detailed database counter and per-query metrics.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -12421,11 +12559,6 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The number of days to retain Performance Insights data.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values:</p> <ul> <li> <p> <code>7</code> </p> </li> <li> <p> <i>month</i> * 31, where <i>month</i> is a number of months from 1-23. Examples: <code>93</code> (3 months * 31), <code>341</code> (11 months * 31), <code>589</code> (19 months * 31)</p> </li> <li> <p> <code>731</code> </p> </li> </ul> <p>Default: <code>7</code> days</p> <p>If you specify a retention period that isn't valid, such as <code>94</code>, Amazon RDS issues an error.</p>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
-        "NetworkType":{
-          "shape":"String",
-          "documentation":"<p>The network type of the DB cluster.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters only</p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
-        },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>If the DB cluster doesn't manage the master user password with Amazon Web Services Secrets Manager, you can turn on this management. In this case, you can't specify <code>MasterUserPassword</code>.</p> <p>If the DB cluster already manages the master user password with Amazon Web Services Secrets Manager, and you specify that the master user password is not managed with Amazon Web Services Secrets Manager, then you must specify <code>MasterUserPassword</code>. In this case, RDS deletes the secret and uses the new password for the master user specified by <code>MasterUserPassword</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
@@ -12434,6 +12567,10 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to rotate the secret managed by Amazon Web Services Secrets Manager for the master user password.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB cluster. The secret value contains the updated password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Constraints:</p> <ul> <li> <p>You must apply the change immediately when rotating the master user password.</p> </li> </ul>"
         },
+        "EnableLocalWriteForwarding":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances.</p> <p>Valid for: Aurora DB clusters only</p>"
+        },
         "MasterUserSecretKmsKeyId":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if both of the following conditions are met:</p> <ul> <li> <p>The DB cluster doesn't manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If the DB cluster already manages the master user password in Amazon Web Services Secrets Manager, you can't change the KMS key that is used to encrypt the secret.</p> </li> <li> <p>You are turning on <code>ManageMasterUserPassword</code> to manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If you are turning on <code>ManageMasterUserPassword</code> and don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> </li> </ul> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p>"
@@ -12446,10 +12583,6 @@
           "shape":"Boolean",
           "documentation":"<p>Specifies whether engine mode changes from <code>serverless</code> to <code>provisioned</code> are allowed.</p> <p>Valid for Cluster Type: Aurora Serverless v1 DB clusters only</p> <p>Constraints:</p> <ul> <li> <p>You must allow engine mode changes when specifying a different value for the <code>EngineMode</code> parameter from the DB cluster's current engine mode.</p> </li> </ul>"
         },
-        "EnableLocalWriteForwarding":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances.</p> <p>Valid for: Aurora DB clusters only</p>"
-        },
         "AwsBackupRecoveryPointArn":{
           "shape":"AwsBackupRecoveryPointArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p>"
@@ -12461,6 +12594,10 @@
         "CACertificateIdentifier":{
           "shape":"String",
           "documentation":"<p>The CA certificate identifier to use for the DB cluster's server certificate.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html\">Using SSL/TLS to encrypt a connection to a DB instance</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Valid for Cluster Type: Multi-AZ DB clusters</p>"
+        },
+        "MasterUserAuthenticationType":{
+          "shape":"MasterUserAuthenticationType",
+          "documentation":"<p>Specifies the authentication type for the master user. With IAM master user authentication, you can change the master DB user to use IAM database authentication.</p> <p>You can specify one of the following values:</p> <ul> <li> <p> <code>password</code> - Use standard database authentication with a password.</p> </li> <li> <p> <code>iam-db-auth</code> - Use IAM database authentication for the master user.</p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>This option is only valid for RDS for PostgreSQL and Aurora PostgreSQL engines.</p>"
         }
       },
       "documentation":"<p/>"
@@ -12554,8 +12691,8 @@
           "documentation":"<p>Specifies whether the modifications in this request and any pending modifications are asynchronously applied as soon as possible, regardless of the <code>PreferredMaintenanceWindow</code> setting for the DB instance. By default, this parameter is disabled.</p> <p>If this parameter is disabled, changes to the DB instance are applied during the next maintenance window. Some parameter changes can cause an outage and are applied on the next call to <a>RebootDBInstance</a>, or the next failure reboot. Review the table of parameters in <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html\">Modifying a DB Instance</a> in the <i>Amazon RDS User Guide</i> to see the impact of enabling or disabling <code>ApplyImmediately</code> for each modified parameter and to determine when the changes are applied.</p>"
         },
         "MasterUserPassword":{
-          "shape":"String",
-          "documentation":"<p>The new password for the master user.</p> <p>Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p> <note> <p>Amazon RDS API operations never return the password, so this operation provides a way to regain access to a primary instance user if the password is lost. This includes restoring privileges that might have been accidentally revoked.</p> </note> <p>This setting doesn't apply to the following DB instances:</p> <ul> <li> <p>Amazon Aurora (The password for the master user is managed by the DB cluster. For more information, see <code>ModifyDBCluster</code>.)</p> </li> <li> <p>RDS Custom</p> </li> </ul> <p>Default: Uses existing setting</p> <p>Constraints:</p> <ul> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> <li> <p>Can include any printable ASCII character except \"/\", \"\"\", or \"@\". For RDS for Oracle, can't include the \"&amp;\" (ampersand) or the \"'\" (single quotes) character.</p> </li> </ul> <p>Length Constraints:</p> <ul> <li> <p>RDS for Db2 - Must contain from 8 to 255 characters.</p> </li> <li> <p>RDS for MariaDB - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Microsoft SQL Server - Must contain from 8 to 128 characters.</p> </li> <li> <p>RDS for MySQL - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Oracle - Must contain from 8 to 30 characters.</p> </li> <li> <p>RDS for PostgreSQL - Must contain from 8 to 128 characters.</p> </li> </ul>"
+          "shape":"SensitiveString",
+          "documentation":"<p>The new password for the master user.</p> <p>Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p> <note> <p>Amazon RDS API operations never return the password, so this operation provides a way to regain access to a primary instance user if the password is lost. This includes restoring privileges that might have been accidentally revoked.</p> </note> <p>This setting doesn't apply to the following DB instances:</p> <ul> <li> <p>Amazon Aurora</p> <p>The password for the master user is managed by the DB cluster. For more information, see <code>ModifyDBCluster</code>.</p> </li> <li> <p>RDS Custom</p> </li> <li> <p>RDS for Oracle CDBs in the multi-tenant configuration</p> <p>Specify the master password in <code>ModifyTenantDatabase</code> instead.</p> </li> </ul> <p>Default: Uses existing setting</p> <p>Constraints:</p> <ul> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> <li> <p>Can include any printable ASCII character except \"/\", \"\"\", or \"@\". For RDS for Oracle, can't include the \"&amp;\" (ampersand) or the \"'\" (single quotes) character.</p> </li> </ul> <p>Length Constraints:</p> <ul> <li> <p>RDS for Db2 - Must contain from 8 to 255 characters.</p> </li> <li> <p>RDS for MariaDB - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Microsoft SQL Server - Must contain from 8 to 128 characters.</p> </li> <li> <p>RDS for MySQL - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Oracle - Must contain from 8 to 30 characters.</p> </li> <li> <p>RDS for PostgreSQL - Must contain from 8 to 128 characters.</p> </li> </ul>"
         },
         "DBParameterGroupName":{
           "shape":"String",
@@ -12587,7 +12724,7 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether minor version upgrades are applied automatically to the DB instance during the maintenance window. An outage occurs when all the following conditions are met:</p> <ul> <li> <p>The automatic upgrade is enabled for the maintenance window.</p> </li> <li> <p>A newer minor version is available.</p> </li> <li> <p>RDS has enabled automatic patching for the engine version.</p> </li> </ul> <p>If any of the preceding conditions isn't met, Amazon RDS applies the change as soon as possible and doesn't cause an outage.</p> <p>For an RDS Custom DB instance, don't enable this setting. Otherwise, the operation returns an error.</p>"
+          "documentation":"<p>Specifies whether minor version upgrades are applied automatically to the DB instance during the maintenance window. An outage occurs when all the following conditions are met:</p> <ul> <li> <p>The automatic upgrade is enabled for the maintenance window.</p> </li> <li> <p>A newer minor version is available.</p> </li> <li> <p>RDS has enabled automatic patching for the engine version.</p> </li> </ul> <p>If any of the preceding conditions isn't met, Amazon RDS applies the change as soon as possible and doesn't cause an outage.</p> <p>For an RDS Custom DB instance, don't enable this setting. Otherwise, the operation returns an error.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "LicenseModel":{
           "shape":"String",
@@ -12597,6 +12734,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The new Provisioned IOPS (I/O operations per second) value for the RDS instance.</p> <p>Changing this setting doesn't result in an outage and the change is applied during the next maintenance window unless the <code>ApplyImmediately</code> parameter is enabled for this request. If you are migrating from Provisioned IOPS to standard storage, set this value to 0. The DB instance will require a reboot for the change in storage type to take effect.</p> <p>If you choose to migrate your DB instance from using standard storage to Provisioned IOPS (io1), or from Provisioned IOPS to standard storage, the process can take time. The duration of the migration depends on several factors such as database load, storage size, storage type (standard or Provisioned IOPS), amount of IOPS provisioned (if any), and the number of prior scale storage operations. Typical migration times are under 24 hours, but the process can take up to several days in some cases. During the migration, the DB instance is available for use, but might experience performance degradation. While the migration takes place, nightly backups for the instance are suspended. No other Amazon RDS operations can take place for the instance, including modifying the instance, rebooting the instance, deleting the instance, creating a read replica for the instance, and creating a DB snapshot of the instance.</p> <p/> <p>Constraints:</p> <ul> <li> <p>For RDS for MariaDB, RDS for MySQL, RDS for Oracle, and RDS for PostgreSQL - The value supplied must be at least 10% greater than the current value. Values that are not at least 10% greater than the existing value are rounded up so that they are 10% greater than the current value.</p> </li> <li> <p>When you increase the Provisioned IOPS, you must also specify the <code>AllocatedStorage</code> parameter. You can use the current value for <code>AllocatedStorage</code>.</p> </li> </ul> <p>Default: Uses existing setting</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput value for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The option group to associate the DB instance with.</p> <p>Changing this parameter doesn't result in an outage, with one exception. If the parameter change results in an option group that enables OEM, it can cause a brief period, lasting less than a second, during which new connections are rejected but existing connections aren't interrupted.</p> <p>The change is applied during the next maintenance window unless the <code>ApplyImmediately</code> parameter is enabled for this request.</p> <p>Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group, and that option group can't be removed from a DB instance after it is associated with a DB instance.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
@@ -12614,7 +12755,7 @@
           "documentation":"<p>The ARN from the key store with which to associate the instance for TDE encryption.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "TdeCredentialPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the given ARN from the key store in order to access the device.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "CACertificateIdentifier":{
@@ -12641,6 +12782,10 @@
           "shape":"StringList",
           "documentation":"<p>The IPv4 DNS IP addresses of your primary and secondary Active Directory domain controllers.</p> <p>Constraints:</p> <ul> <li> <p>Two IP addresses must be provided. If there isn't a secondary domain controller, use the IP address of the primary domain controller for both entries in the list.</p> </li> </ul> <p>Example: <code>123.124.125.126,234.235.236.237</code> </p>"
         },
+        "DisableDomain":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to remove the DB instance from the Active Directory domain.</p>"
+        },
         "CopyTagsToSnapshot":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to copy all tags from the DB instance to snapshots of the DB instance. By default, tags aren't copied.</p> <p>This setting doesn't apply to Amazon Aurora DB instances. Copying tags to snapshots is managed by the DB cluster. Setting this value for an Aurora DB instance has no effect on the DB cluster setting. For more information, see <code>ModifyDBCluster</code>.</p>"
@@ -12665,10 +12810,6 @@
           "shape":"String",
           "documentation":"<p>The name of the IAM role to use when making API calls to the Directory Service.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
-        "DisableDomain":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to remove the DB instance from the Active Directory domain.</p>"
-        },
         "PromotionTier":{
           "shape":"IntegerOptional",
           "documentation":"<p>The order of priority in which an Aurora Replica is promoted to the primary instance after a failure of the existing primary instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.AuroraHighAvailability.html#Aurora.Managing.FaultTolerance\"> Fault Tolerance for an Aurora DB Cluster</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>Default: <code>1</code> </p> <p>Valid Values: <code>0 - 15</code> </p>"
@@ -12679,7 +12820,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB instance.</p> <p>This setting only applies to Amazon Aurora DB instances.</p> <note> <p>Currently, this value is inherited from the DB cluster and can't be changed.</p> </note>"
+          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB instance.</p> <note> <p>Aurora DB instances inherit this value from the DB cluster, so you can't change this value.</p> </note>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -12695,7 +12836,7 @@
         },
         "CloudwatchLogsExportConfiguration":{
           "shape":"CloudwatchLogsExportConfiguration",
-          "documentation":"<p>The log types to be enabled for export to CloudWatch Logs for a specific DB instance.</p> <p>A change to the <code>CloudwatchLogsExportConfiguration</code> parameter is always applied to the DB instance immediately. Therefore, the <code>ApplyImmediately</code> parameter has no effect.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | slowquery</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>postgresql</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+          "documentation":"<p>The log types to be enabled for export to CloudWatch Logs for a specific DB instance.</p> <p>A change to the <code>CloudwatchLogsExportConfiguration</code> parameter is always applied to the DB instance immediately. Therefore, the <code>ApplyImmediately</code> parameter has no effect.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p> <p>The following values are valid for each DB engine:</p> <ul> <li> <p>Aurora MySQL - <code>audit | error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>Aurora PostgreSQL - <code>postgresql | iam-db-auth-error</code> </p> </li> <li> <p>RDS for MySQL - <code>error | general | slowquery | iam-db-auth-error</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql | upgrade | iam-db-auth-error</code> </p> </li> </ul> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\"> Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "ProcessorFeatures":{
           "shape":"ProcessorFeatureList",
@@ -12719,15 +12860,7 @@
         },
         "ReplicaMode":{
           "shape":"ReplicaMode",
-          "documentation":"<p>A value that sets the open mode of a replica database to either mounted or read-only.</p> <note> <p>Currently, this parameter is only supported for Oracle DB instances.</p> </note> <p>Mounted DB replicas are included in Oracle Enterprise Edition. The main use case for mounted replicas is cross-Region disaster recovery. The primary database doesn't use Active Data Guard to transmit information to the mounted replica. Because it doesn't accept user connections, a mounted replica can't serve a read-only workload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with Oracle Read Replicas for Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
-        },
-        "EnableCustomerOwnedIp":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
-        },
-        "AwsBackupRecoveryPointArn":{
-          "shape":"AwsBackupRecoveryPointArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
+          "documentation":"<p>The open mode of a replica database.</p> <p>This parameter is only supported for Db2 DB instances and Oracle DB instances.</p> <dl> <dt>Db2</dt> <dd> <p>Standby DB replicas are included in Db2 Advanced Edition (AE) and Db2 Standard Edition (SE). The main use case for standby replicas is cross-Region disaster recovery. Because it doesn't accept user connections, a standby replica can't serve a read-only workload.</p> <p>You can create a combination of standby and read-only DB replicas for the same primary DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-replication.html\">Working with replicas for Amazon RDS for Db2</a> in the <i>Amazon RDS User Guide</i>.</p> <p>To create standby DB replicas for RDS for Db2, set this parameter to <code>mounted</code>.</p> </dd> <dt>Oracle</dt> <dd> <p>Mounted DB replicas are included in Oracle Database Enterprise Edition. The main use case for mounted replicas is cross-Region disaster recovery. The primary database doesn't use Active Data Guard to transmit information to the mounted replica. Because it doesn't accept user connections, a mounted replica can't serve a read-only workload.</p> <p>You can create a combination of mounted and read-only DB replicas for the same primary DB instance. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-read-replicas.html\">Working with read replicas for Amazon RDS for Oracle</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For RDS Custom, you must specify this parameter and set it to <code>mounted</code>. The value won't be set by default. After replica creation, you can manage the open mode manually.</p> </dd> </dl>"
         },
         "AutomationMode":{
           "shape":"AutomationMode",
@@ -12737,37 +12870,45 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The number of minutes to pause the automation. When the time period ends, RDS Custom resumes full automation.</p> <p>Default: <code>60</code> </p> <p>Constraints:</p> <ul> <li> <p>Must be at least 60.</p> </li> <li> <p>Must be no more than 1,440.</p> </li> </ul>"
         },
+        "EnableCustomerOwnedIp":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
+        },
         "NetworkType":{
           "shape":"String",
           "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Valid Values: <code>IPV4 | DUAL</code> </p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput value for the DB instance.</p> <p>This setting applies only to the <code>gp3</code> storage type.</p> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p>"
+        "AwsBackupRecoveryPointArn":{
+          "shape":"AwsBackupRecoveryPointArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the recovery point in Amazon Web Services Backup.</p> <p>This setting doesn't apply to RDS Custom DB instances.</p>"
         },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>If the DB instance doesn't manage the master user password with Amazon Web Services Secrets Manager, you can turn on this management. In this case, you can't specify <code>MasterUserPassword</code>.</p> <p>If the DB instance already manages the master user password with Amazon Web Services Secrets Manager, and you specify that the master user password is not managed with Amazon Web Services Secrets Manager, then you must specify <code>MasterUserPassword</code>. In this case, Amazon RDS deletes the secret and uses the new password for the master user specified by <code>MasterUserPassword</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
+          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>If the DB instance doesn't manage the master user password with Amazon Web Services Secrets Manager, you can turn on this management. In this case, you can't specify <code>MasterUserPassword</code>.</p> <p>If the DB instance already manages the master user password with Amazon Web Services Secrets Manager, and you specify that the master user password is not managed with Amazon Web Services Secrets Manager, then you must specify <code>MasterUserPassword</code>. In this case, Amazon RDS deletes the secret and uses the new password for the master user specified by <code>MasterUserPassword</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> <li> <p>Can't specify for RDS for Oracle CDB instances in the multi-tenant configuration. Use <code>ModifyTenantDatabase</code> instead.</p> </li> <li> <p>Can't specify the parameters <code>ManageMasterUserPassword</code> and <code>MultiTenant</code> in the same operation.</p> </li> </ul>"
         },
         "RotateMasterUserPassword":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to rotate the secret managed by Amazon Web Services Secrets Manager for the master user password.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB cluster. The secret value contains the updated password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>You must apply the change immediately when rotating the master user password.</p> </li> </ul>"
+          "documentation":"<p>Specifies whether to rotate the secret managed by Amazon Web Services Secrets Manager for the master user password.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance. The secret value contains the updated password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>You must apply the change immediately when rotating the master user password.</p> </li> </ul>"
         },
         "MasterUserSecretKmsKeyId":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if both of the following conditions are met:</p> <ul> <li> <p>The DB instance doesn't manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If the DB instance already manages the master user password in Amazon Web Services Secrets Manager, you can't change the KMS key used to encrypt the secret.</p> </li> <li> <p>You are turning on <code>ManageMasterUserPassword</code> to manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If you are turning on <code>ManageMasterUserPassword</code> and don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> </li> </ul> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p>The target Oracle DB engine when you convert a non-CDB to a CDB. This intermediate step is necessary to upgrade an Oracle Database 19c non-CDB to an Oracle Database 21c CDB.</p> <p>Note the following requirements:</p> <ul> <li> <p>Make sure that you specify <code>oracle-ee-cdb</code> or <code>oracle-se2-cdb</code>.</p> </li> <li> <p>Make sure that your DB engine runs Oracle Database 19c with an April 2021 or later RU.</p> </li> </ul> <p>Note the following limitations:</p> <ul> <li> <p>You can't convert a CDB to a non-CDB.</p> </li> <li> <p>You can't convert a replica database.</p> </li> <li> <p>You can't convert a non-CDB to a CDB and upgrade the engine version in the same command.</p> </li> <li> <p>You can't convert the existing custom parameter or option group when it has options or parameters that are permanent or persistent. In this situation, the DB instance reverts to the default option and parameter group. To avoid reverting to the default, specify a new parameter group with <code>--db-parameter-group-name</code> and a new option group with <code>--option-group-name</code>.</p> </li> </ul>"
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether the to convert your DB instance from the single-tenant conﬁguration to the multi-tenant conﬁguration. This parameter is supported only for RDS for Oracle CDB instances.</p> <p>During the conversion, RDS creates an initial tenant database and associates the DB name, master user name, character set, and national character set metadata with this database. The tags associated with the instance also propagate to the initial tenant database. You can add more tenant databases to your DB instance by using the <code>CreateTenantDatabase</code> operation.</p> <important> <p>The conversion to the multi-tenant configuration is permanent and irreversible, so you can't later convert back to the single-tenant configuration. When you specify this parameter, you must also specify <code>ApplyImmediately</code>.</p> </important>"
         },
         "DedicatedLogVolume":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.</p>"
         },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether the to convert your DB instance from the single-tenant conﬁguration to the multi-tenant conﬁguration. This parameter is supported only for RDS for Oracle CDB instances.</p> <p>During the conversion, RDS creates an initial tenant database and associates the DB name, master user name, character set, and national character set metadata with this database. The tags associated with the instance also propagate to the initial tenant database. You can add more tenant databases to your DB instance by using the <code>CreateTenantDatabase</code> operation.</p> <important> <p>The conversion to the multi-tenant configuration is permanent and irreversible, so you can't later convert back to the single-tenant configuration. When you specify this parameter, you must also specify <code>ApplyImmediately</code>.</p> </important>"
+        "Engine":{
+          "shape":"String",
+          "documentation":"<p>The target Oracle DB engine when you convert a non-CDB to a CDB. This intermediate step is necessary to upgrade an Oracle Database 19c non-CDB to an Oracle Database 21c CDB.</p> <p>Note the following requirements:</p> <ul> <li> <p>Make sure that you specify <code>oracle-ee-cdb</code> or <code>oracle-se2-cdb</code>.</p> </li> <li> <p>Make sure that your DB engine runs Oracle Database 19c with an April 2021 or later RU.</p> </li> </ul> <p>Note the following limitations:</p> <ul> <li> <p>You can't convert a CDB to a non-CDB.</p> </li> <li> <p>You can't convert a replica database.</p> </li> <li> <p>You can't convert a non-CDB to a CDB and upgrade the engine version in the same command.</p> </li> <li> <p>You can't convert the existing custom parameter or option group when it has options or parameters that are permanent or persistent. In this situation, the DB instance reverts to the default option and parameter group. To avoid reverting to the default, specify a new parameter group with <code>--db-parameter-group-name</code> and a new option group with <code>--option-group-name</code>.</p> </li> </ul>"
+        },
+        "MasterUserAuthenticationType":{
+          "shape":"MasterUserAuthenticationType",
+          "documentation":"<p>Specifies the authentication type for the master user. With IAM master user authentication, you can change the master DB user to use IAM database authentication.</p> <p>You can specify one of the following values:</p> <ul> <li> <p> <code>password</code> - Use standard database authentication with a password.</p> </li> <li> <p> <code>iam-db-auth</code> - Use IAM database authentication for the master user.</p> </li> </ul> <p>This option is only valid for RDS for PostgreSQL and Aurora PostgreSQL engines.</p>"
         }
       },
       "documentation":"<p/>"
@@ -12828,13 +12969,17 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier for the <code>DBProxy</code> to modify.</p>"
         },
         "NewDBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The new identifier for the <code>DBProxy</code>. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it can't end with a hyphen or contain two consecutive hyphens.</p>"
         },
+        "DefaultAuthScheme":{
+          "shape":"DefaultAuthScheme",
+          "documentation":"<p>The default authentication scheme that the proxy uses for client connections to the proxy and connections from the proxy to the underlying database. Valid values are <code>NONE</code> and <code>IAM_AUTH</code>. When set to <code>IAM_AUTH</code>, the proxy uses end-to-end IAM authentication to connect to the database.</p>"
+        },
         "Auth":{
           "shape":"UserAuthConfigList",
           "documentation":"<p>The new authentication settings for the <code>DBProxy</code>.</p>"
@@ -12849,10 +12994,10 @@
         },
         "DebugLogging":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Whether the proxy includes detailed information about SQL statements in its logs. This information helps you to debug issues involving SQL behavior or the performance and scalability of the proxy connections. The debug information includes the text of SQL statements that you submit through the proxy. Thus, only enable this setting when needed for debugging, and only when you have security measures in place to safeguard any sensitive information that appears in the logs.</p>"
+          "documentation":"<p>Specifies whether the proxy logs detailed connection and query information. When you enable <code>DebugLogging</code>, the proxy captures connection details and connection pool behavior from your queries. Debug logging increases CloudWatch costs and can impact proxy performance. Enable this option only when you need to troubleshoot connection or performance issues.</p>"
         },
         "RoleArn":{
-          "shape":"String",
+          "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that the proxy uses to access secrets in Amazon Web Services Secrets Manager.</p>"
         },
         "SecurityGroups":{
@@ -12878,11 +13023,11 @@
       ],
       "members":{
         "TargetGroupName":{
-          "shape":"String",
+          "shape":"DBProxyTargetGroupName",
           "documentation":"<p>The name of the target group to modify.</p>"
         },
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The name of the proxy.</p>"
         },
         "ConnectionPoolConfig":{
@@ -12891,7 +13036,7 @@
         },
         "NewName":{
           "shape":"String",
-          "documentation":"<p>The new name for the modified <code>DBProxyTarget</code>. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it can't end with a hyphen or contain two consecutive hyphens.</p>"
+          "documentation":"<p>The new name for the modified <code>DBProxyTarget</code>. An identifier must begin with a letter and must contain only ASCII letters, digits, and hyphens; it can't end with a hyphen or contain two consecutive hyphens.</p> <p>You can't rename the <code>default</code> target group.</p>"
         }
       }
     },
@@ -12990,7 +13135,7 @@
         },
         "EngineVersion":{
           "shape":"String",
-          "documentation":"<p>The engine version to upgrade the DB snapshot to.</p> <p>The following are the database engines and engine versions that are available when you upgrade a DB snapshot.</p> <p> <b>MySQL</b> </p> <p>For the list of engine versions that are available for upgrading a DB snapshot, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-upgrade-snapshot.html\"> Upgrading a MySQL DB snapshot engine version</a> in the <i>Amazon RDS User Guide.</i> </p> <p> <b>Oracle</b> </p> <ul> <li> <p> <code>19.0.0.0.ru-2022-01.rur-2022-01.r1</code> (supported for 12.2.0.1 DB snapshots)</p> </li> <li> <p> <code>19.0.0.0.ru-2022-07.rur-2022-07.r1</code> (supported for 12.1.0.2 DB snapshots)</p> </li> <li> <p> <code>12.1.0.2.v8</code> (supported for 12.1.0.1 DB snapshots)</p> </li> <li> <p> <code>11.2.0.4.v12</code> (supported for 11.2.0.2 DB snapshots)</p> </li> <li> <p> <code>11.2.0.4.v11</code> (supported for 11.2.0.3 DB snapshots)</p> </li> </ul> <p> <b>PostgreSQL</b> </p> <p>For the list of engine versions that are available for upgrading a DB snapshot, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBSnapshot.PostgreSQL.html\"> Upgrading a PostgreSQL DB snapshot engine version</a> in the <i>Amazon RDS User Guide.</i> </p>"
+          "documentation":"<p>The engine version to upgrade the DB snapshot to.</p> <p>The following are the database engines and engine versions that are available when you upgrade a DB snapshot.</p> <p> <b>MariaDB</b> </p> <p>For the list of engine versions that are available for upgrading a DB snapshot, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mariadb-upgrade-snapshot.html\"> Upgrading a MariaDB DB snapshot engine version</a> in the <i>Amazon RDS User Guide.</i> </p> <p> <b>MySQL</b> </p> <p>For the list of engine versions that are available for upgrading a DB snapshot, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql-upgrade-snapshot.html\"> Upgrading a MySQL DB snapshot engine version</a> in the <i>Amazon RDS User Guide.</i> </p> <p> <b>Oracle</b> </p> <ul> <li> <p> <code>21.0.0.0.ru-2025-04.rur-2025-04.r1</code> (supported for 21.0.0.0.ru-2022-01.rur-2022-01.r1, 21.0.0.0.ru-2022-04.rur-2022-04.r1, 21.0.0.0.ru-2022-07.rur-2022-07.r1, 21.0.0.0.ru-2022-10.rur-2022-10.r1, 21.0.0.0.ru-2023-01.rur-2023-01.r1 and 21.0.0.0.ru-2023-01.rur-2023-01.r2 DB snapshots)</p> </li> <li> <p> <code>19.0.0.0.ru-2025-04.rur-2025-04.r1</code> (supported for 19.0.0.0.ru-2019-07.rur-2019-07.r1, 19.0.0.0.ru-2019-10.rur-2019-10.r1 and 0.0.0.ru-2020-01.rur-2020-01.r1 DB snapshots)</p> </li> <li> <p> <code>19.0.0.0.ru-2022-01.rur-2022-01.r1</code> (supported for 12.2.0.1 DB snapshots)</p> </li> <li> <p> <code>19.0.0.0.ru-2022-07.rur-2022-07.r1</code> (supported for 12.1.0.2 DB snapshots)</p> </li> <li> <p> <code>12.1.0.2.v8</code> (supported for 12.1.0.1 DB snapshots)</p> </li> <li> <p> <code>11.2.0.4.v12</code> (supported for 11.2.0.2 DB snapshots)</p> </li> <li> <p> <code>11.2.0.4.v11</code> (supported for 11.2.0.3 DB snapshots)</p> </li> </ul> <p> <b>PostgreSQL</b> </p> <p>For the list of engine versions that are available for upgrading a DB snapshot, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBSnapshot.PostgreSQL.html\"> Upgrading a PostgreSQL DB snapshot engine version</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
         "OptionGroupName":{
           "shape":"String",
@@ -13067,13 +13212,14 @@
     },
     "ModifyGlobalClusterMessage":{
       "type":"structure",
+      "required":["GlobalClusterIdentifier"],
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The cluster identifier for the global cluster to modify. This parameter isn't case-sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Must match the identifier of an existing global database cluster.</p> </li> </ul>"
         },
         "NewGlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The new cluster identifier for the global database cluster. This value is stored as a lowercase string.</p> <p>Constraints:</p> <ul> <li> <p>Must contain from 1 to 63 letters, numbers, or hyphens.</p> </li> <li> <p>The first character must be a letter.</p> </li> <li> <p>Can't end with a hyphen or contain two consecutive hyphens.</p> </li> </ul> <p>Example: <code>my-cluster2</code> </p>"
         },
         "DeletionProtection":{
@@ -13110,7 +13256,7 @@
         },
         "DataFilter":{
           "shape":"DataFilter",
-          "documentation":"<p>A new data filter for the integration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Zero_ETL_Filtering.html\">Data filtering for Aurora zero-ETL integrations with Amazon Redshift</a>.</p>"
+          "documentation":"<p>A new data filter for the integration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Zero_ETL_Filtering.html\">Data filtering for Aurora zero-ETL integrations with Amazon Redshift</a> or <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/zero-etl.filtering.html\">Data filtering for Amazon RDS zero-ETL integrations with Amazon Redshift</a>.</p>"
         },
         "Description":{
           "shape":"IntegrationDescription",
@@ -13169,6 +13315,18 @@
         "NewTenantDBName":{
           "shape":"String",
           "documentation":"<p>The new name of the tenant database when renaming a tenant database. This parameter isn’t case-sensitive.</p> <p>Constraints:</p> <ul> <li> <p>Can't be the string null or any other reserved word.</p> </li> <li> <p>Can't be longer than 8 characters.</p> </li> </ul>"
+        },
+        "ManageMasterUserPassword":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>If the tenant database doesn't manage the master user password with Amazon Web Services Secrets Manager, you can turn on this management. In this case, you can't specify <code>MasterUserPassword</code>.</p> <p>If the tenant database already manages the master user password with Amazon Web Services Secrets Manager, and you specify that the master user password is not managed with Amazon Web Services Secrets Manager, then you must specify <code>MasterUserPassword</code>. In this case, Amazon RDS deletes the secret and uses the new password for the master user specified by <code>MasterUserPassword</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
+        },
+        "RotateMasterUserPassword":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to rotate the secret managed by Amazon Web Services Secrets Manager for the master user password.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance. The secret value contains the updated password.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>You must apply the change immediately when rotating the master user password.</p> </li> </ul>"
+        },
+        "MasterUserSecretKmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if both of the following conditions are met:</p> <ul> <li> <p>The tenant database doesn't manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If the tenant database already manages the master user password in Amazon Web Services Secrets Manager, you can't change the KMS key used to encrypt the secret.</p> </li> <li> <p>You're turning on <code>ManageMasterUserPassword</code> to manage the master user password in Amazon Web Services Secrets Manager.</p> <p>If you're turning on <code>ManageMasterUserPassword</code> and don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a self-managed KMS key.</p> </li> </ul> <p>The Amazon Web Services KMS key identifier is any of the following:</p> <ul> <li> <p>Key ARN</p> </li> <li> <p>Key ID</p> </li> <li> <p>Alias ARN</p> </li> <li> <p>Alias name for the KMS key</p> </li> </ul> <p>To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>A default KMS key exists for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         }
       }
     },
@@ -13180,8 +13338,7 @@
     },
     "NetworkTypeNotSupported":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The network type is invalid for the DB instance. Valid nework type values are <code>IPV4</code> and <code>DUAL</code>.</p>",
       "error":{
         "code":"NetworkTypeNotSupported",
@@ -13323,8 +13480,7 @@
     },
     "OptionGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The option group you are trying to create already exists.</p>",
       "error":{
         "code":"OptionGroupAlreadyExistsFault",
@@ -13356,8 +13512,7 @@
     },
     "OptionGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified option group could not be found.</p>",
       "error":{
         "code":"OptionGroupNotFoundFault",
@@ -13513,8 +13668,7 @@
     },
     "OptionGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota of 20 option groups was exceeded for this Amazon Web Services account.</p>",
       "error":{
         "code":"OptionGroupQuotaExceededFault",
@@ -13556,7 +13710,7 @@
           "documentation":"<p>The name of the option that has settings that you can set.</p>"
         },
         "Value":{
-          "shape":"String",
+          "shape":"PotentiallySensitiveOptionSettingValue",
           "documentation":"<p>The current value of the option setting.</p>"
         },
         "DefaultValue":{
@@ -13690,6 +13844,10 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether a DB instance supports provisioned IOPS.</p>"
         },
+        "SupportsStorageThroughput":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether a DB instance supports storage throughput.</p>"
+        },
         "SupportsEnhancedMonitoring":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether a DB instance supports Enhanced Monitoring at intervals from 1 to 60 seconds.</p>"
@@ -13726,6 +13884,22 @@
           "shape":"DoubleOptional",
           "documentation":"<p>Maximum provisioned IOPS per GiB for a DB instance.</p>"
         },
+        "MinStorageThroughputPerDbInstance":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Minimum storage throughput for a DB instance.</p>"
+        },
+        "MaxStorageThroughputPerDbInstance":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Maximum storage throughput for a DB instance.</p>"
+        },
+        "MinStorageThroughputPerIops":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>Minimum storage throughput to provisioned IOPS ratio for a DB instance.</p>"
+        },
+        "MaxStorageThroughputPerIops":{
+          "shape":"DoubleOptional",
+          "documentation":"<p>Maximum storage throughput to provisioned IOPS ratio for a DB instance.</p>"
+        },
         "AvailableProcessorFeatures":{
           "shape":"AvailableProcessorFeatureList",
           "documentation":"<p>A list of the available processor features for the DB instance class of a DB instance.</p>"
@@ -13754,37 +13928,21 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether you can use Aurora global databases with a specific combination of other DB engine attributes.</p>"
         },
-        "SupportsClusters":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether DB instances can be configured as a Multi-AZ DB cluster.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ deployments with two readable standby DB instances</a> in the <i>Amazon RDS User Guide.</i> </p>"
-        },
         "SupportedNetworkTypes":{
           "shape":"StringList",
           "documentation":"<p>The network types supported by the DB instance (<code>IPV4</code> or <code>DUAL</code>).</p> <p>A DB instance can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
-        "SupportsStorageThroughput":{
+        "SupportsClusters":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether a DB instance supports storage throughput.</p>"
-        },
-        "MinStorageThroughputPerDbInstance":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>Minimum storage throughput for a DB instance.</p>"
-        },
-        "MaxStorageThroughputPerDbInstance":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>Maximum storage throughput for a DB instance.</p>"
-        },
-        "MinStorageThroughputPerIops":{
-          "shape":"DoubleOptional",
-          "documentation":"<p>Minimum storage throughput to provisioned IOPS ratio for a DB instance.</p>"
-        },
-        "MaxStorageThroughputPerIops":{
-          "shape":"DoubleOptional",
-          "documentation":"<p>Maximum storage throughput to provisioned IOPS ratio for a DB instance.</p>"
+          "documentation":"<p>Indicates whether DB instances can be configured as a Multi-AZ DB cluster.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ deployments with two readable standby DB instances</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
         "SupportsDedicatedLogVolume":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether a DB instance supports using a dedicated log volume (DLV).</p>"
+        },
+        "SupportsHttpEndpoint":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether a DB instance supports HTTP endpoints.</p>"
         }
       },
       "documentation":"<p>Contains a list of available options for a DB instance.</p> <p>This data type is used as a response element in the <code>DescribeOrderableDBInstanceOptions</code> action.</p>",
@@ -13829,7 +13987,7 @@
           "documentation":"<p>The name of the parameter.</p>"
         },
         "ParameterValue":{
-          "shape":"String",
+          "shape":"PotentiallySensitiveParameterValue",
           "documentation":"<p>The value of the parameter.</p>"
         },
         "Description":{
@@ -13962,7 +14120,7 @@
           "documentation":"<p>The allocated storage size for the DB instance specified in gibibytes (GiB).</p>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The master credentials for the DB instance.</p>"
         },
         "Port":{
@@ -13989,6 +14147,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The Provisioned IOPS value for the DB instance.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput of the DB instance.</p>"
+        },
         "DBInstanceIdentifier":{
           "shape":"String",
           "documentation":"<p>The database identifier for the DB instance.</p>"
@@ -14010,10 +14172,6 @@
           "shape":"ProcessorFeatureList",
           "documentation":"<p>The number of CPU cores and the number of threads per core for the DB instance class of the DB instance.</p>"
         },
-        "IAMDatabaseAuthenticationEnabled":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Indicates whether mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts is enabled.</p>"
-        },
         "AutomationMode":{
           "shape":"AutomationMode",
           "documentation":"<p>The automation mode of the RDS Custom DB instance: <code>full</code> or <code>all-paused</code>. If <code>full</code>, the DB instance automates monitoring and instance recovery. If <code>all-paused</code>, the instance pauses automation for the duration set by <code>--resume-full-automation-mode-minutes</code>.</p>"
@@ -14022,21 +14180,21 @@
           "shape":"TStamp",
           "documentation":"<p>The number of minutes to pause the automation. When the time period ends, RDS Custom resumes full automation. The minimum value is 60 (default). The maximum value is 1,440.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput of the DB instance.</p>"
+        "MultiTenant":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether the DB instance will change to the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE). </p>"
         },
-        "Engine":{
-          "shape":"String",
-          "documentation":"<p>The database engine of the DB instance.</p>"
+        "IAMDatabaseAuthenticationEnabled":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Indicates whether mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts is enabled.</p>"
         },
         "DedicatedLogVolume":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether the DB instance has a dedicated log volume (DLV) enabled.&gt;</p>"
         },
-        "MultiTenant":{
-          "shape":"BooleanOptional",
-          "documentation":"<p>Indicates whether the DB instance will change to the multi-tenant configuration (TRUE) or the single-tenant configuration (FALSE). </p>"
+        "Engine":{
+          "shape":"String",
+          "documentation":"<p>The database engine of the DB instance.</p>"
         }
       },
       "documentation":"<p>This data type is used as a response element in the <code>ModifyDBInstance</code> operation and contains changes that will be applied during the next maintenance window.</p>"
@@ -14097,8 +14255,7 @@
     },
     "PointInTimeRestoreNotEnabledFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> <code>SourceDBInstanceIdentifier</code> refers to a DB instance with <code>BackupRetentionPeriod</code> equal to 0.</p>",
       "error":{
         "code":"PointInTimeRestoreNotEnabled",
@@ -14107,6 +14264,11 @@
       },
       "exception":true
     },
+    "PotentiallySensitiveOptionSettingValue":{
+      "type":"string",
+      "sensitive":true
+    },
+    "PotentiallySensitiveParameterValue":{"type":"string"},
     "ProcessorFeature":{
       "type":"structure",
       "members":{
@@ -14172,8 +14334,7 @@
     },
     "ProvisionedIopsNotAvailableInAZFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Provisioned IOPS not available in the specified Availability Zone.</p>",
       "error":{
         "code":"ProvisionedIopsNotAvailableInAZFault",
@@ -14446,11 +14607,11 @@
       "required":["DBProxyName"],
       "members":{
         "DBProxyName":{
-          "shape":"String",
+          "shape":"DBProxyName",
           "documentation":"<p>The identifier of the <code>DBProxy</code> that is associated with the <code>DBProxyTargetGroup</code>.</p>"
         },
         "TargetGroupName":{
-          "shape":"String",
+          "shape":"DBProxyTargetGroupName",
           "documentation":"<p>The identifier of the <code>DBProxyTargetGroup</code>.</p>"
         },
         "DBInstanceIdentifiers":{
@@ -14474,9 +14635,13 @@
     },
     "RemoveFromGlobalClusterMessage":{
       "type":"structure",
+      "required":[
+        "GlobalClusterIdentifier",
+        "DbClusterIdentifier"
+      ],
       "members":{
         "GlobalClusterIdentifier":{
-          "shape":"String",
+          "shape":"GlobalClusterIdentifier",
           "documentation":"<p>The cluster identifier to detach from the Aurora global database cluster.</p>"
         },
         "DbClusterIdentifier":{
@@ -14656,8 +14821,7 @@
     },
     "ReservedDBInstanceAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User already has a reservation with the given identifier.</p>",
       "error":{
         "code":"ReservedDBInstanceAlreadyExists",
@@ -14689,8 +14853,7 @@
     },
     "ReservedDBInstanceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reserved DB Instance not found.</p>",
       "error":{
         "code":"ReservedDBInstanceNotFound",
@@ -14701,8 +14864,7 @@
     },
     "ReservedDBInstanceQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would exceed the user's DB Instance quota.</p>",
       "error":{
         "code":"ReservedDBInstanceQuotaExceeded",
@@ -14781,8 +14943,7 @@
     },
     "ReservedDBInstancesOfferingNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specified offering does not exist.</p>",
       "error":{
         "code":"ReservedDBInstancesOfferingNotFound",
@@ -14831,8 +14992,7 @@
     },
     "ResourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource ID was not found.</p>",
       "error":{
         "code":"ResourceNotFoundFault",
@@ -14917,7 +15077,7 @@
           "documentation":"<p>The name of the master user for the restored DB cluster.</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 16 letters or numbers.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't be a reserved word for the chosen database engine.</p> </li> </ul>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the master database user. This password can contain any printable ASCII character except \"/\", \"\"\", or \"@\".</p> <p>Constraints:</p> <ul> <li> <p>Must contain from 8 to 41 characters.</p> </li> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> </ul>"
         },
         "OptionGroupName":{
@@ -14971,7 +15131,7 @@
         },
         "EnableCloudwatchLogsExports":{
           "shape":"LogTypeList",
-          "documentation":"<p>The list of logs that the restored DB cluster is to export to CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, and <code>slowquery</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+          "documentation":"<p>The list of logs that the restored DB cluster is to export to CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, <code>instance</code>, <code>slowquery</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>Aurora PostgreSQL</b> </p> <p>Possible value are <code>instance</code>, <code>postgresql</code>, and <code>iam-db-auth-error</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p>"
         },
         "DeletionProtection":{
           "shape":"BooleanOptional",
@@ -14989,11 +15149,15 @@
           "shape":"String",
           "documentation":"<p>Specify the name of the IAM role to be used when making API calls to the Directory Service.</p>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
+        "StorageType":{
+          "shape":"String",
+          "documentation":"<p>Specifies the storage type to be associated with the DB cluster.</p> <p>Valid Values: <code>aurora</code>, <code>aurora-iopt1</code> </p> <p>Default: <code>aurora</code> </p> <p>Valid for: Aurora DB clusters only</p>"
+        },
         "NetworkType":{
           "shape":"String",
           "documentation":"<p>The network type of the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p>"
         },
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
@@ -15002,13 +15166,9 @@
           "shape":"String",
           "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB cluster.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         },
-        "StorageType":{
-          "shape":"String",
-          "documentation":"<p>Specifies the storage type to be associated with the DB cluster.</p> <p>Valid Values: <code>aurora</code>, <code>aurora-iopt1</code> </p> <p>Default: <code>aurora</code> </p> <p>Valid for: Aurora DB clusters only</p>"
-        },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
         }
       }
     },
@@ -15084,7 +15244,7 @@
         },
         "EnableCloudwatchLogsExports":{
           "shape":"LogTypeList",
-          "documentation":"<p>The list of logs that the restored DB cluster is to export to Amazon CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>RDS for MySQL</b> </p> <p>Possible values are <code>error</code>, <code>general</code>, and <code>slowquery</code>.</p> <p> <b>RDS for PostgreSQL</b> </p> <p>Possible values are <code>postgresql</code> and <code>upgrade</code>.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, and <code>slowquery</code>.</p> <p> <b>Aurora PostgreSQL</b> </p> <p>Possible value is <code>postgresql</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for: Aurora DB clusters and Multi-AZ DB clusters</p>"
+          "documentation":"<p>The list of logs that the restored DB cluster is to export to Amazon CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>RDS for MySQL</b> </p> <p>Possible values are <code>error</code>, <code>general</code>, <code>slowquery</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>RDS for PostgreSQL</b> </p> <p>Possible values are <code>postgresql</code>, <code>upgrade</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, <code>instance</code>, <code>slowquery</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>Aurora PostgreSQL</b> </p> <p>Possible value are <code>instance</code>, <code>postgresql</code>, and <code>iam-db-auth-error</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "EngineMode":{
           "shape":"String",
@@ -15130,11 +15290,11 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether the DB cluster is publicly accessible.</p> <p>When the DB cluster is publicly accessible, its Domain Name System (DNS) endpoint resolves to the private IP address from within the DB cluster's virtual private cloud (VPC). It resolves to the public IP address from outside of the DB cluster's VPC. Access to the DB cluster is ultimately controlled by the security group it uses. That public access is not permitted if the security group assigned to the DB cluster doesn't permit it.</p> <p>When the DB cluster isn't publicly accessible, it is an internal DB cluster with a DNS name that resolves to a private IP address.</p> <p>Default: The default behavior varies depending on whether <code>DBSubnetGroupName</code> is specified.</p> <p>If <code>DBSubnetGroupName</code> isn't specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the default VPC in the target Region doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the default VPC in the target Region has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul> <p>If <code>DBSubnetGroupName</code> is specified, and <code>PubliclyAccessible</code> isn't specified, the following applies:</p> <ul> <li> <p>If the subnets are part of a VPC that doesn’t have an internet gateway attached to it, the DB cluster is private.</p> </li> <li> <p>If the subnets are part of a VPC that has an internet gateway attached to it, the DB cluster is public.</p> </li> </ul> <p>Valid for: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "NetworkType":{
           "shape":"String",
           "documentation":"<p>The network type of the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for: Aurora DB clusters only</p>"
         },
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "RdsCustomClusterConfiguration":{
           "shape":"RdsCustomClusterConfiguration",
           "documentation":"<p>Reserved for future use.</p>"
@@ -15161,7 +15321,7 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
         }
       },
       "documentation":"<p/>"
@@ -15227,7 +15387,7 @@
         },
         "EnableCloudwatchLogsExports":{
           "shape":"LogTypeList",
-          "documentation":"<p>The list of logs that the restored DB cluster is to export to CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>RDS for MySQL</b> </p> <p>Possible values are <code>error</code>, <code>general</code>, and <code>slowquery</code>.</p> <p> <b>RDS for PostgreSQL</b> </p> <p>Possible values are <code>postgresql</code> and <code>upgrade</code>.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, and <code>slowquery</code>.</p> <p> <b>Aurora PostgreSQL</b> </p> <p>Possible value is <code>postgresql</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for: Aurora DB clusters and Multi-AZ DB clusters</p>"
+          "documentation":"<p>The list of logs that the restored DB cluster is to export to CloudWatch Logs. The values in the list depend on the DB engine being used.</p> <p> <b>RDS for MySQL</b> </p> <p>Possible values are <code>error</code>, <code>general</code>, <code>slowquery</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>RDS for PostgreSQL</b> </p> <p>Possible values are <code>postgresql</code>, <code>upgrade</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>Aurora MySQL</b> </p> <p>Possible values are <code>audit</code>, <code>error</code>, <code>general</code>, <code>instance</code>, <code>slowquery</code>, and <code>iam-db-auth-error</code>.</p> <p> <b>Aurora PostgreSQL</b> </p> <p>Possible value are <code>instance</code>, <code>postgresql</code>, and <code>iam-db-auth-error</code>.</p> <p>For more information about exporting CloudWatch Logs for Amazon RDS, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about exporting CloudWatch Logs for Amazon Aurora, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.html#USER_LogAccess.Procedural.UploadtoCloudWatch\">Publishing Database Logs to Amazon CloudWatch Logs</a> in the <i>Amazon Aurora User Guide</i>.</p> <p>Valid for: Aurora DB clusters and Multi-AZ DB clusters</p>"
         },
         "DBClusterParameterGroupName":{
           "shape":"String",
@@ -15249,14 +15409,6 @@
           "shape":"String",
           "documentation":"<p>The name of the IAM role to be used when making API calls to the Directory Service.</p> <p>Valid for: Aurora DB clusters only</p>"
         },
-        "ScalingConfiguration":{
-          "shape":"ScalingConfiguration",
-          "documentation":"<p>For DB clusters in <code>serverless</code> DB engine mode, the scaling properties of the DB cluster.</p> <p>Valid for: Aurora DB clusters only</p>"
-        },
-        "EngineMode":{
-          "shape":"String",
-          "documentation":"<p>The engine mode of the new cluster. Specify <code>provisioned</code> or <code>serverless</code>, depending on the type of the cluster you are creating. You can create an Aurora Serverless v1 clone from a provisioned cluster, or a provisioned clone from an Aurora Serverless v1 cluster. To create a clone that is an Aurora Serverless v1 cluster, the original cluster must be an Aurora Serverless v1 cluster or an encrypted provisioned cluster. To create a full copy that is an Aurora Serverless v1 cluster, specify the engine mode <code>serverless</code>.</p> <p>Valid for: Aurora DB clusters only</p>"
-        },
         "DBClusterInstanceClass":{
           "shape":"String",
           "documentation":"<p>The compute and memory capacity of the each DB instance in the Multi-AZ DB cluster, for example db.m6gd.xlarge. Not all DB instance classes are available in all Amazon Web Services Regions, or for all database engines.</p> <p>For the full list of DB instance classes, and availability for your engine, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html\">DB instance class</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Valid for: Multi-AZ DB clusters only</p>"
@@ -15273,7 +15425,6 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster.</p> <p>For information about valid IOPS values, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS\">Amazon RDS Provisioned IOPS storage</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Constraints: Must be a multiple between .5 and 50 of the storage amount for the DB instance.</p> <p>Valid for: Multi-AZ DB clusters only</p>"
         },
-        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
         "NetworkType":{
           "shape":"String",
           "documentation":"<p>The network type of the DB cluster.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB cluster. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon Aurora User Guide.</i> </p> <p>Valid for: Aurora DB clusters only</p>"
@@ -15282,6 +15433,15 @@
           "shape":"String",
           "documentation":"<p>The resource ID of the source DB cluster from which to restore.</p>"
         },
+        "ServerlessV2ScalingConfiguration":{"shape":"ServerlessV2ScalingConfiguration"},
+        "ScalingConfiguration":{
+          "shape":"ScalingConfiguration",
+          "documentation":"<p>For DB clusters in <code>serverless</code> DB engine mode, the scaling properties of the DB cluster.</p> <p>Valid for: Aurora DB clusters only</p>"
+        },
+        "EngineMode":{
+          "shape":"String",
+          "documentation":"<p>The engine mode of the new cluster. Specify <code>provisioned</code> or <code>serverless</code>, depending on the type of the cluster you are creating. You can create an Aurora Serverless v1 clone from a provisioned cluster, or a provisioned clone from an Aurora Serverless v1 cluster. To create a clone that is an Aurora Serverless v1 cluster, the original cluster must be an Aurora Serverless v1 cluster or an encrypted provisioned cluster. To create a full copy that is an Aurora Serverless v1 cluster, specify the engine mode <code>serverless</code>.</p> <p>Valid for: Aurora DB clusters only</p>"
+        },
         "RdsCustomClusterConfiguration":{
           "shape":"RdsCustomClusterConfiguration",
           "documentation":"<p>Reserved for future use.</p>"
@@ -15308,7 +15468,7 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB cluster.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB cluster into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB cluster to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB cluster into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB cluster past the end of standard support for that engine version. For more information, see the following sections:</p> <ul> <li> <p>Amazon Aurora - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i> </p> </li> <li> <p>Amazon RDS - <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i> </p> </li> </ul> <p>Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
         }
       },
       "documentation":"<p/>"
@@ -15357,11 +15517,11 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to automatically apply minor version upgrades to the DB instance during the maintenance window.</p> <p>If you restore an RDS Custom DB instance, you must disable this parameter.</p>"
+          "documentation":"<p>Specifies whether to automatically apply minor version upgrades to the DB instance during the maintenance window.</p> <p>If you restore an RDS Custom DB instance, you must disable this parameter.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "LicenseModel":{
           "shape":"String",
-          "documentation":"<p>License model information for the restored DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The Bring Your Own License (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul> <p>Default: Same as the source.</p>"
+          "documentation":"<p>License model information for the restored DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The bring your own license (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul> <p>Default: Same as the source.</p>"
         },
         "DBName":{
           "shape":"String",
@@ -15375,6 +15535,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>Specifies the amount of provisioned IOPS for the DB instance, expressed in I/O operations per second. If this parameter isn't specified, the IOPS value is taken from the backup. If this parameter is set to 0, the new instance is converted to a non-PIOPS instance. The conversion takes additional time, though your DB instance is available for connections before the conversion starts.</p> <p>The provisioned IOPS value must follow the requirements for your database engine. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS\">Amazon RDS Provisioned IOPS storage</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints: Must be an integer greater than 1000.</p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Specifies the storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The name of the option group to be used for the restored DB instance.</p> <p>Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group, and that option group can't be removed from a DB instance after it is associated with a DB instance.</p> <p>This setting doesn't apply to RDS Custom.</p>"
@@ -15382,14 +15546,14 @@
         "Tags":{"shape":"TagList"},
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>Specifies the storage type to be associated with the DB instance.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>Default: <code>io1</code> if the <code>Iops</code> parameter is specified, otherwise <code>gp2</code> </p>"
+          "documentation":"<p>Specifies the storage type to be associated with the DB instance.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> <p>Default: <code>io1</code> if the <code>Iops</code> parameter is specified, otherwise <code>gp3</code> </p>"
         },
         "TdeCredentialArn":{
           "shape":"String",
           "documentation":"<p>The ARN from the key store with which to associate the instance for TDE encryption.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
         "TdeCredentialPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the given ARN from the key store in order to access the device.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
         "VpcSecurityGroupIds":{
@@ -15452,30 +15616,26 @@
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>This setting doesn't apply to RDS Custom.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
         },
-        "CustomIamInstanceProfile":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom.</p>"
+          "documentation":"<p>The network type of the DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
         "BackupTarget":{
           "shape":"String",
-          "documentation":"<p>Specifies where automated backups and manual snapshots are stored for the restored DB instance.</p> <p>Possible values are <code>outposts</code> (Amazon Web Services Outposts) and <code>region</code> (Amazon Web Services Region). The default is <code>region</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>Specifies where automated backups and manual snapshots are stored for the restored DB instance.</p> <p>Possible values are <code>local</code> (Dedicated Local Zone), <code>outposts</code> (Amazon Web Services Outposts), and <code>region</code> (Amazon Web Services Region). The default is <code>region</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "NetworkType":{
+        "CustomIamInstanceProfile":{
           "shape":"String",
-          "documentation":"<p>The network type of the DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p>"
+          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom.</p>"
         },
-        "StorageThroughput":{
+        "AllocatedStorage":{
           "shape":"IntegerOptional",
-          "documentation":"<p>Specifies the storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
+          "documentation":"<p>The amount of storage (in gibibytes) to allocate initially for the DB instance. Follow the allocation rules specified in CreateDBInstance.</p> <p>This setting isn't valid for RDS for SQL Server.</p> <note> <p>Be sure to allocate enough storage for your new DB instance so that the restore operation can succeed. You can also allocate additional storage for future growth.</p> </note>"
         },
         "DBClusterSnapshotIdentifier":{
           "shape":"String",
           "documentation":"<p>The identifier for the Multi-AZ DB cluster snapshot to restore from.</p> <p>For more information on Multi-AZ DB clusters, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html\"> Multi-AZ DB cluster deployments</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Constraints:</p> <ul> <li> <p>Must match the identifier of an existing Multi-AZ DB cluster snapshot.</p> </li> <li> <p>Can't be specified when <code>DBSnapshotIdentifier</code> is specified.</p> </li> <li> <p>Must be specified when <code>DBSnapshotIdentifier</code> isn't specified.</p> </li> <li> <p>If you are restoring from a shared manual Multi-AZ DB cluster snapshot, the <code>DBClusterSnapshotIdentifier</code> must be the ARN of the shared snapshot.</p> </li> <li> <p>Can't be the identifier of an Aurora DB cluster snapshot.</p> </li> </ul>"
         },
-        "AllocatedStorage":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The amount of storage (in gibibytes) to allocate initially for the DB instance. Follow the allocation rules specified in CreateDBInstance.</p> <p>This setting isn't valid for RDS for SQL Server.</p> <note> <p>Be sure to allocate enough storage for your new DB instance so that the restore operation can succeed. You can also allocate additional storage for future growth.</p> </note>"
-        },
         "DedicatedLogVolume":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable a dedicated log volume (DLV) for the DB instance.</p>"
@@ -15486,7 +15646,15 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+        },
+        "ManageMasterUserPassword":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager in the restored DB instance.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Constraints:</p> <ul> <li> <p>Applies to RDS for Oracle only.</p> </li> </ul>"
+        },
+        "MasterUserSecretKmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         }
       },
       "documentation":"<p/>"
@@ -15534,7 +15702,7 @@
           "documentation":"<p>The name for the master user.</p> <p>Constraints:</p> <ul> <li> <p>Must be 1 to 16 letters or numbers.</p> </li> <li> <p>First character must be a letter.</p> </li> <li> <p>Can't be a reserved word for the chosen database engine.</p> </li> </ul>"
         },
         "MasterUserPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the master user.</p> <p>Constraints:</p> <ul> <li> <p>Can't be specified if <code>ManageMasterUserPassword</code> is turned on.</p> </li> <li> <p>Can include any printable ASCII character except \"/\", \"\"\", or \"@\". For RDS for Oracle, can't include the \"&amp;\" (ampersand) or the \"'\" (single quotes) character.</p> </li> </ul> <p>Length Constraints:</p> <ul> <li> <p>RDS for Db2 - Must contain from 8 to 128 characters.</p> </li> <li> <p>RDS for MariaDB - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Microsoft SQL Server - Must contain from 8 to 128 characters.</p> </li> <li> <p>RDS for MySQL - Must contain from 8 to 41 characters.</p> </li> <li> <p>RDS for Oracle - Must contain from 8 to 30 characters.</p> </li> <li> <p>RDS for PostgreSQL - Must contain from 8 to 128 characters.</p> </li> </ul>"
         },
         "DBSecurityGroups":{
@@ -15583,7 +15751,7 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether to automatically apply minor engine upgrades to the DB instance during the maintenance window. By default, minor engine upgrades are not applied automatically.</p>"
+          "documentation":"<p>Specifies whether to automatically apply minor engine upgrades to the DB instance during the maintenance window. By default, minor engine upgrades are not applied automatically.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "LicenseModel":{
           "shape":"String",
@@ -15593,6 +15761,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to allocate initially for the DB instance. For information about valid IOPS values, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS\">Amazon RDS Provisioned IOPS storage</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>Specifies the storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The name of the option group to associate with this DB instance. If this argument is omitted, the default option group for the specified engine is used.</p>"
@@ -15655,7 +15827,7 @@
         },
         "DatabaseInsightsMode":{
           "shape":"DatabaseInsightsMode",
-          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB instance.</p> <p>This setting only applies to Amazon Aurora DB instances.</p> <note> <p>Currently, this value is inherited from the DB cluster and can't be changed.</p> </note>"
+          "documentation":"<p>Specifies the mode of Database Insights to enable for the DB instance.</p> <note> <p>Aurora DB instances inherit this value from the DB cluster, so you can't change this value.</p> </note>"
         },
         "EnablePerformanceInsights":{
           "shape":"BooleanOptional",
@@ -15693,10 +15865,6 @@
           "shape":"String",
           "documentation":"<p>The network type of the DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>Specifies the storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
-        },
         "ManageMasterUserPassword":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Constraints:</p> <ul> <li> <p>Can't manage the master user password with Amazon Web Services Secrets Manager if <code>MasterUserPassword</code> is specified.</p> </li> </ul>"
@@ -15715,7 +15883,7 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
         }
       }
     },
@@ -15771,11 +15939,11 @@
         },
         "AutoMinorVersionUpgrade":{
           "shape":"BooleanOptional",
-          "documentation":"<p>Specifies whether minor version upgrades are applied automatically to the DB instance during the maintenance window.</p> <p>This setting doesn't apply to RDS Custom.</p>"
+          "documentation":"<p>Specifies whether minor version upgrades are applied automatically to the DB instance during the maintenance window.</p> <p>This setting doesn't apply to RDS Custom.</p> <p>For more information about automatic minor version upgrades, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Upgrading.html#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades\">Automatically upgrading the minor engine version</a>.</p>"
         },
         "LicenseModel":{
           "shape":"String",
-          "documentation":"<p>The license model information for the restored DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The Bring Your Own License (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul> <p>Default: Same as the source.</p>"
+          "documentation":"<p>The license model information for the restored DB instance.</p> <note> <p>License models for RDS for Db2 require additional configuration. The bring your own license (BYOL) model requires a custom parameter group and an Amazon Web Services License Manager self-managed license. The Db2 license through Amazon Web Services Marketplace model requires an Amazon Web Services Marketplace subscription. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-licensing.html\">Amazon RDS for Db2 licensing options</a> in the <i>Amazon RDS User Guide</i>.</p> </note> <p>This setting doesn't apply to Amazon Aurora or RDS Custom DB instances.</p> <p>Valid Values:</p> <ul> <li> <p>RDS for Db2 - <code>bring-your-own-license | marketplace-license</code> </p> </li> <li> <p>RDS for MariaDB - <code>general-public-license</code> </p> </li> <li> <p>RDS for Microsoft SQL Server - <code>license-included</code> </p> </li> <li> <p>RDS for MySQL - <code>general-public-license</code> </p> </li> <li> <p>RDS for Oracle - <code>bring-your-own-license | license-included</code> </p> </li> <li> <p>RDS for PostgreSQL - <code>postgresql-license</code> </p> </li> </ul> <p>Default: Same as the source.</p>"
         },
         "DBName":{
           "shape":"String",
@@ -15789,6 +15957,10 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The amount of Provisioned IOPS (input/output operations per second) to initially allocate for the DB instance.</p> <p>This setting doesn't apply to SQL Server.</p> <p>Constraints:</p> <ul> <li> <p>Must be an integer greater than 1000.</p> </li> </ul>"
         },
+        "StorageThroughput":{
+          "shape":"IntegerOptional",
+          "documentation":"<p>The storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
+        },
         "OptionGroupName":{
           "shape":"String",
           "documentation":"<p>The name of the option group to use for the restored DB instance.</p> <p>Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group, and that option group can't be removed from a DB instance after it is associated with a DB instance</p> <p>This setting doesn't apply to RDS Custom.</p>"
@@ -15800,14 +15972,14 @@
         "Tags":{"shape":"TagList"},
         "StorageType":{
           "shape":"String",
-          "documentation":"<p>The storage type to associate with the DB instance.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code>, if the <code>Iops</code> parameter is specified. Otherwise, <code>gp2</code>.</p> <p>Constraints:</p> <ul> <li> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> </li> </ul>"
+          "documentation":"<p>The storage type to associate with the DB instance.</p> <p>Valid Values: <code>gp2 | gp3 | io1 | io2 | standard</code> </p> <p>Default: <code>io1</code>, if the <code>Iops</code> parameter is specified. Otherwise, <code>gp3</code>.</p> <p>Constraints:</p> <ul> <li> <p>If you specify <code>io1</code>, <code>io2</code>, or <code>gp3</code>, you must also include a value for the <code>Iops</code> parameter.</p> </li> </ul>"
         },
         "TdeCredentialArn":{
           "shape":"String",
           "documentation":"<p>The ARN from the key store with which to associate the instance for TDE encryption.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
         "TdeCredentialPassword":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>The password for the given ARN from the key store in order to access the device.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
         "VpcSecurityGroupIds":{
@@ -15870,29 +16042,25 @@
           "shape":"IntegerOptional",
           "documentation":"<p>The upper limit in gibibytes (GiB) to which Amazon RDS can automatically scale the storage of the DB instance.</p> <p>For more information about this setting, including limitations that apply to it, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html#USER_PIOPS.Autoscaling\"> Managing capacity automatically with Amazon RDS storage autoscaling</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
-        "SourceDBInstanceAutomatedBackupsArn":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the replicated automated backups from which to restore, for example, <code>arn:aws:rds:us-east-1:123456789012:auto-backup:ab-L2IJCEXJP7XQ7HOJ4SIEXAMPLE</code>.</p> <p>This setting doesn't apply to RDS Custom.</p>"
-        },
         "EnableCustomerOwnedIp":{
           "shape":"BooleanOptional",
           "documentation":"<p>Specifies whether to enable a customer-owned IP address (CoIP) for an RDS on Outposts DB instance.</p> <p>A <i>CoIP</i> provides local or external connectivity to resources in your Outpost subnets through your on-premises network. For some use cases, a CoIP can provide lower latency for connections to the DB instance from outside of its virtual private cloud (VPC) on your local network.</p> <p>This setting doesn't apply to RDS Custom.</p> <p>For more information about RDS on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p> <p>For more information about CoIPs, see <a href=\"https://docs.aws.amazon.com/outposts/latest/userguide/routing.html#ip-addressing\">Customer-owned IP addresses</a> in the <i>Amazon Web Services Outposts User Guide</i>.</p>"
         },
-        "CustomIamInstanceProfile":{
+        "NetworkType":{
           "shape":"String",
-          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom.</p>"
+          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul>"
         },
-        "BackupTarget":{
+        "SourceDBInstanceAutomatedBackupsArn":{
           "shape":"String",
-          "documentation":"<p>The location for storing automated backups and manual snapshots for the restored DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>outposts</code> (Amazon Web Services Outposts)</p> </li> <li> <p> <code>region</code> (Amazon Web Services Region)</p> </li> </ul> <p>Default: <code>region</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the replicated automated backups from which to restore, for example, <code>arn:aws:rds:us-east-1:123456789012:auto-backup:ab-L2IJCEXJP7XQ7HOJ4SIEXAMPLE</code>.</p> <p>This setting doesn't apply to RDS Custom.</p>"
         },
-        "NetworkType":{
+        "BackupTarget":{
           "shape":"String",
-          "documentation":"<p>The network type of the DB instance.</p> <p>The network type is determined by the <code>DBSubnetGroup</code> specified for the DB instance. A <code>DBSubnetGroup</code> can support only the IPv4 protocol or the IPv4 and the IPv6 protocols (<code>DUAL</code>).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html\"> Working with a DB instance in a VPC</a> in the <i>Amazon RDS User Guide.</i> </p> <p>Valid Values:</p> <ul> <li> <p> <code>IPV4</code> </p> </li> <li> <p> <code>DUAL</code> </p> </li> </ul>"
+          "documentation":"<p>The location for storing automated backups and manual snapshots for the restored DB instance.</p> <p>Valid Values:</p> <ul> <li> <p> <code>local</code> (Dedicated Local Zone)</p> </li> <li> <p> <code>outposts</code> (Amazon Web Services Outposts)</p> </li> <li> <p> <code>region</code> (Amazon Web Services Region)</p> </li> </ul> <p>Default: <code>region</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-on-outposts.html\">Working with Amazon RDS on Amazon Web Services Outposts</a> in the <i>Amazon RDS User Guide</i>.</p>"
         },
-        "StorageThroughput":{
-          "shape":"IntegerOptional",
-          "documentation":"<p>The storage throughput value for the DB instance.</p> <p>This setting doesn't apply to RDS Custom or Amazon Aurora.</p>"
+        "CustomIamInstanceProfile":{
+          "shape":"String",
+          "documentation":"<p>The instance profile associated with the underlying Amazon EC2 instance of an RDS Custom DB instance. The instance profile must meet the following requirements:</p> <ul> <li> <p>The profile must exist in your account.</p> </li> <li> <p>The profile must have an IAM role that Amazon EC2 has permissions to assume.</p> </li> <li> <p>The instance profile name and the associated IAM role name must start with the prefix <code>AWSRDSCustom</code>.</p> </li> </ul> <p>For the list of permissions required for the IAM role, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.iam-vpc\"> Configure IAM and your VPC</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting is required for RDS Custom.</p>"
         },
         "AllocatedStorage":{
           "shape":"IntegerOptional",
@@ -15908,7 +16076,15 @@
         },
         "EngineLifecycleSupport":{
           "shape":"String",
-          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Using Amazon RDS Extended Support</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+          "documentation":"<p>The life cycle type for this DB instance.</p> <note> <p>By default, this value is set to <code>open-source-rds-extended-support</code>, which enrolls your DB instance into Amazon RDS Extended Support. At the end of standard support, you can avoid charges for Extended Support by setting the value to <code>open-source-rds-extended-support-disabled</code>. In this case, RDS automatically upgrades your restored DB instance to a higher engine version, if the major engine version is past its end of standard support date.</p> </note> <p>You can use this setting to enroll your DB instance into Amazon RDS Extended Support. With RDS Extended Support, you can run the selected major engine version on your DB instance past the end of standard support for that engine version. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i>.</p> <p>This setting applies only to RDS for MySQL and RDS for PostgreSQL. For Amazon Aurora DB instances, the life cycle type is managed by the DB cluster.</p> <p>Valid Values: <code>open-source-rds-extended-support | open-source-rds-extended-support-disabled</code> </p> <p>Default: <code>open-source-rds-extended-support</code> </p>"
+        },
+        "ManageMasterUserPassword":{
+          "shape":"BooleanOptional",
+          "documentation":"<p>Specifies whether to manage the master user password with Amazon Web Services Secrets Manager in the restored DB instance.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html\">Password management with Amazon Web Services Secrets Manager</a> in the <i>Amazon RDS User Guide</i>.</p> <p>Constraints:</p> <ul> <li> <p>Applies to RDS for Oracle only.</p> </li> </ul>"
+        },
+        "MasterUserSecretKmsKeyId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services KMS key identifier to encrypt a secret that is automatically generated and managed in Amazon Web Services Secrets Manager.</p> <p>This setting is valid only if the master user password is managed by RDS in Amazon Web Services Secrets Manager for the DB instance.</p> <p>The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.</p> <p>If you don't specify <code>MasterUserSecretKmsKeyId</code>, then the <code>aws/secretsmanager</code> KMS key is used to encrypt the secret. If the secret is in a different Amazon Web Services account, then you can't use the <code>aws/secretsmanager</code> KMS key to encrypt the secret, and you must use a customer managed KMS key.</p> <p>There is a default KMS key for your Amazon Web Services account. Your Amazon Web Services account has a different default KMS key for each Amazon Web Services Region.</p>"
         }
       },
       "documentation":"<p/>"
@@ -15968,8 +16144,7 @@
     },
     "SNSInvalidTopicFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>SNS has responded that there is a problem with the SNS topic specified.</p>",
       "error":{
         "code":"SNSInvalidTopic",
@@ -15980,8 +16155,7 @@
     },
     "SNSNoAuthorizationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You do not have permission to publish to the SNS topic ARN.</p>",
       "error":{
         "code":"SNSNoAuthorization",
@@ -15992,8 +16166,7 @@
     },
     "SNSTopicArnNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The SNS topic ARN does not exist.</p>",
       "error":{
         "code":"SNSTopicArnNotFound",
@@ -16081,14 +16254,14 @@
       "members":{
         "MinCapacity":{
           "shape":"DoubleOptional",
-          "documentation":"<p>If the minimum capacity is 0 ACUs, the engine version supports the automatic pause/resume feature of Aurora Serverless v2.</p>"
+          "documentation":"<p>If the minimum capacity is 0 ACUs, the engine version or platform version supports the automatic pause/resume feature of Aurora Serverless v2.</p>"
         },
         "MaxCapacity":{
           "shape":"DoubleOptional",
-          "documentation":"<p> Specifies the upper Aurora Serverless v2 capacity limit for a particular engine version. Depending on the engine version, the maximum capacity for an Aurora Serverless v2 cluster might be <code>256</code> or <code>128</code>. </p>"
+          "documentation":"<p> Specifies the upper Aurora Serverless v2 capacity limit for a particular engine version or platform version. Depending on the engine version, the maximum capacity for an Aurora Serverless v2 cluster might be <code>256</code> or <code>128</code>. </p>"
         }
       },
-      "documentation":"<p>Specifies any Aurora Serverless v2 properties or limits that differ between Aurora engine versions. You can test the values of this attribute when deciding which Aurora version to use in a new or upgraded DB cluster. You can also retrieve the version of an existing DB cluster and check whether that version supports certain Aurora Serverless v2 features before you attempt to use those features. </p>"
+      "documentation":"<p>Specifies any Aurora Serverless v2 properties or limits that differ between Aurora engine versions and platform versions. You can test the values of this attribute when deciding which Aurora version to use in a new or upgraded DB cluster. You can also retrieve the version of an existing DB cluster and check whether that version supports certain Aurora Serverless v2 features before you attempt to use those features. </p>"
     },
     "ServerlessV2ScalingConfiguration":{
       "type":"structure",
@@ -16099,7 +16272,7 @@
         },
         "MaxCapacity":{
           "shape":"DoubleOptional",
-          "documentation":"<p>The maximum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 32, 32.5, 33, and so on. The largest value that you can use is 256 for recent Aurora versions, or 128 for older versions.</p>"
+          "documentation":"<p>The maximum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 32, 32.5, 33, and so on. The largest value that you can use is 256 for recent Aurora versions, or 128 for older versions. You can check the attributes of your engine version or platform version to determine the specific maximum capacity supported.</p>"
         },
         "SecondsUntilAutoPause":{
           "shape":"IntegerOptional",
@@ -16117,7 +16290,7 @@
         },
         "MaxCapacity":{
           "shape":"DoubleOptional",
-          "documentation":"<p>The maximum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 32, 32.5, 33, and so on. The largest value that you can use is 256 for recent Aurora versions, or 128 for older versions.</p>"
+          "documentation":"<p>The maximum number of Aurora capacity units (ACUs) for a DB instance in an Aurora Serverless v2 cluster. You can specify ACU values in half-step increments, such as 32, 32.5, 33, and so on. The largest value that you can use is 256 for recent Aurora versions, or 128 for older versions. You can check the attributes of your engine version or platform version to determine the specific maximum capacity supported.</p>"
         },
         "SecondsUntilAutoPause":{
           "shape":"IntegerOptional",
@@ -16128,8 +16301,7 @@
     },
     "SharedSnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the maximum number of accounts that you can share a manual DB snapshot with.</p>",
       "error":{
         "code":"SharedSnapshotQuotaExceeded",
@@ -16140,8 +16312,7 @@
     },
     "SnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of DB snapshots.</p>",
       "error":{
         "code":"SnapshotQuotaExceeded",
@@ -16158,8 +16329,7 @@
     },
     "SourceClusterNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source DB cluster isn't supported for a blue/green deployment.</p>",
       "error":{
         "code":"SourceClusterNotSupportedFault",
@@ -16170,8 +16340,7 @@
     },
     "SourceDatabaseNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source DB instance isn't supported for a blue/green deployment.</p>",
       "error":{
         "code":"SourceDatabaseNotSupportedFault",
@@ -16189,8 +16358,7 @@
     },
     "SourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested source could not be found.</p>",
       "error":{
         "code":"SourceNotFound",
@@ -16253,7 +16421,9 @@
         "db-cluster-snapshot",
         "custom-engine-version",
         "db-proxy",
-        "blue-green-deployment"
+        "blue-green-deployment",
+        "db-shard-group",
+        "zero-etl"
       ]
     },
     "StartActivityStreamRequest":{
@@ -16305,13 +16475,13 @@
           "shape":"ActivityStreamMode",
           "documentation":"<p>The mode of the database activity stream.</p>"
         },
-        "ApplyImmediately":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether or not the database activity stream will start as soon as possible, regardless of the maintenance window for the database.</p>"
-        },
         "EngineNativeAuditFieldsIncluded":{
           "shape":"BooleanOptional",
           "documentation":"<p>Indicates whether engine-native audit fields are included in the database activity stream.</p>"
+        },
+        "ApplyImmediately":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether or not the database activity stream will start as soon as possible, regardless of the maintenance window for the database.</p>"
         }
       }
     },
@@ -16348,7 +16518,7 @@
           "documentation":"<p>The Amazon Web Services KMS key identifier for encryption of the replicated automated backups. The KMS key ID is the Amazon Resource Name (ARN) for the KMS encryption key in the destination Amazon Web Services Region, for example, <code>arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE</code>.</p>"
         },
         "PreSignedUrl":{
-          "shape":"String",
+          "shape":"SensitiveString",
           "documentation":"<p>In an Amazon Web Services GovCloud (US) Region, an URL that contains a Signature Version 4 signed request for the <code>StartDBInstanceAutomatedBackupsReplication</code> operation to call in the Amazon Web Services Region of the source DB instance. The presigned URL must be a valid request for the <code>StartDBInstanceAutomatedBackupsReplication</code> API operation that can run in the Amazon Web Services Region that contains the source DB instance.</p> <p>This setting applies only to Amazon Web Services GovCloud (US) Regions. It's ignored in other Amazon Web Services Regions.</p> <p>To learn how to generate a Signature Version 4 signed request, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html\"> Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\"> Signature Version 4 Signing Process</a>.</p> <note> <p>If you are using an Amazon Web Services SDK tool or the CLI, you can specify <code>SourceRegion</code> (or <code>--source-region</code> for the CLI) instead of specifying <code>PreSignedUrl</code> manually. Specifying <code>SourceRegion</code> autogenerates a presigned URL that is a valid request for the operation that can run in the source Amazon Web Services Region.</p> </note>"
         }
       }
@@ -16403,7 +16573,7 @@
         },
         "KmsKeyId":{
           "shape":"String",
-          "documentation":"<p>The ID of the Amazon Web Services KMS key to use to encrypt the data exported to Amazon S3. The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. The caller of this operation must be authorized to run the following operations. These can be set in the Amazon Web Services KMS key policy:</p> <ul> <li> <p>kms:Encrypt</p> </li> <li> <p>kms:Decrypt</p> </li> <li> <p>kms:GenerateDataKey</p> </li> <li> <p>kms:GenerateDataKeyWithoutPlaintext</p> </li> <li> <p>kms:ReEncryptFrom</p> </li> <li> <p>kms:ReEncryptTo</p> </li> <li> <p>kms:CreateGrant</p> </li> <li> <p>kms:DescribeKey</p> </li> <li> <p>kms:RetireGrant</p> </li> </ul>"
+          "documentation":"<p>The ID of the Amazon Web Services KMS key to use to encrypt the data exported to Amazon S3. The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. The caller of this operation must be authorized to run the following operations. These can be set in the Amazon Web Services KMS key policy:</p> <ul> <li> <p>kms:CreateGrant</p> </li> <li> <p>kms:DescribeKey</p> </li> </ul>"
         },
         "S3Prefix":{
           "shape":"String",
@@ -16500,8 +16670,7 @@
     },
     "StorageQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed amount of storage available across all DB instances.</p>",
       "error":{
         "code":"StorageQuotaExceeded",
@@ -16512,8 +16681,7 @@
     },
     "StorageTypeNotAvailableFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>aurora-iopt1</code> storage type isn't available, because you modified the DB cluster to use this storage type less than one month ago.</p>",
       "error":{
         "code":"StorageTypeNotAvailableFault",
@@ -16524,8 +16692,7 @@
     },
     "StorageTypeNotSupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified <code>StorageType</code> can't be associated with the DB instance.</p>",
       "error":{
         "code":"StorageTypeNotSupported",
@@ -16566,8 +16733,7 @@
     },
     "SubnetAlreadyInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The DB subnet is already in use in the Availability Zone.</p>",
       "error":{
         "code":"SubnetAlreadyInUse",
@@ -16592,8 +16758,7 @@
     },
     "SubscriptionAlreadyExistFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The supplied subscription name already exists.</p>",
       "error":{
         "code":"SubscriptionAlreadyExist",
@@ -16604,8 +16769,7 @@
     },
     "SubscriptionCategoryNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The supplied category does not exist.</p>",
       "error":{
         "code":"SubscriptionCategoryNotFound",
@@ -16616,8 +16780,7 @@
     },
     "SubscriptionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subscription name does not exist.</p>",
       "error":{
         "code":"SubscriptionNotFound",
@@ -16633,6 +16796,36 @@
         "locationName":"CharacterSet"
       }
     },
+    "SupportedEngineLifecycle":{
+      "type":"structure",
+      "required":[
+        "LifecycleSupportName",
+        "LifecycleSupportStartDate",
+        "LifecycleSupportEndDate"
+      ],
+      "members":{
+        "LifecycleSupportName":{
+          "shape":"LifecycleSupportName",
+          "documentation":"<p>The type of lifecycle support that the engine version is in.</p> <p>This parameter returns the following values:</p> <ul> <li> <p> <code>open-source-rds-standard-support</code> - Indicates RDS standard support or Aurora standard support.</p> </li> <li> <p> <code>open-source-rds-extended-support</code> - Indicates Amazon RDS Extended Support.</p> </li> </ul> <p>For Amazon RDS for MySQL, Amazon RDS for PostgreSQL, Aurora MySQL, and Aurora PostgreSQL, this parameter returns both <code>open-source-rds-standard-support</code> and <code>open-source-rds-extended-support</code>.</p> <p>For Amazon RDS for MariaDB, this parameter only returns the value <code>open-source-rds-standard-support</code>.</p> <p>For information about Amazon RDS Extended Support, see <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon RDS</a> in the <i>Amazon RDS User Guide</i> and <a href=\"https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/extended-support.html\">Amazon RDS Extended Support with Amazon Aurora</a> in the <i>Amazon Aurora User Guide</i>.</p>"
+        },
+        "LifecycleSupportStartDate":{
+          "shape":"TStamp",
+          "documentation":"<p>The start date for the type of support returned by <code>LifecycleSupportName</code>.</p>"
+        },
+        "LifecycleSupportEndDate":{
+          "shape":"TStamp",
+          "documentation":"<p>The end date for the type of support returned by <code>LifecycleSupportName</code>.</p>"
+        }
+      },
+      "documentation":"<p>This data type is used as a response element in the operation <code>DescribeDBMajorEngineVersions</code>.</p> <p>You can use the information that this data type returns to plan for upgrades.</p> <p>This data type only returns information for the open source engines Amazon RDS for MariaDB, Amazon RDS for MySQL, Amazon RDS for PostgreSQL, Aurora MySQL, and Aurora PostgreSQL.</p>"
+    },
+    "SupportedEngineLifecycleList":{
+      "type":"list",
+      "member":{
+        "shape":"SupportedEngineLifecycle",
+        "locationName":"SupportedEngineLifecycle"
+      }
+    },
     "SupportedTimezonesList":{
       "type":"list",
       "member":{
@@ -16759,6 +16952,13 @@
       },
       "documentation":"<p/>"
     },
+    "TargetConnectionNetworkType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "IPV6"
+      ]
+    },
     "TargetDBClusterParameterGroupName":{
       "type":"string",
       "max":255,
@@ -16812,7 +17012,8 @@
         "CONNECTION_FAILED",
         "AUTH_FAILURE",
         "PENDING_PROXY_CAPACITY",
-        "INVALID_REPLICATION_STATE"
+        "INVALID_REPLICATION_STATE",
+        "PROMOTED"
       ]
     },
     "TargetList":{
@@ -16832,7 +17033,8 @@
       "enum":[
         "REGISTERING",
         "AVAILABLE",
-        "UNAVAILABLE"
+        "UNAVAILABLE",
+        "UNUSED"
       ]
     },
     "TargetStorageType":{"type":"string"},
@@ -16895,6 +17097,7 @@
           "shape":"TenantDatabasePendingModifiedValues",
           "documentation":"<p>Information about pending changes for a tenant database.</p>"
         },
+        "MasterUserSecret":{"shape":"MasterUserSecret"},
         "TagList":{"shape":"TagList"}
       },
       "documentation":"<p>A tenant database in the DB instance. This data type is an element in the response to the <code>DescribeTenantDatabases</code> action.</p>",
@@ -16902,8 +17105,7 @@
     },
     "TenantDatabaseAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You attempted to either create a tenant database that already exists or modify a tenant database to use the name of an existing tenant database.</p>",
       "error":{
         "code":"TenantDatabaseAlreadyExists",
@@ -16914,8 +17116,7 @@
     },
     "TenantDatabaseNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified tenant database wasn't found in the DB instance.</p>",
       "error":{
         "code":"TenantDatabaseNotFound",
@@ -16940,8 +17141,7 @@
     },
     "TenantDatabaseQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You attempted to create more tenant databases than are permitted in your Amazon Web Services account.</p>",
       "error":{
         "code":"TenantDatabaseQuotaExceeded",
@@ -16982,8 +17182,7 @@
     },
     "UnsupportedDBEngineVersionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified DB engine version isn't supported for Aurora Limitless Database.</p>",
       "error":{
         "code":"UnsupportedDBEngineVersion",
@@ -17050,11 +17249,11 @@
       "type":"structure",
       "members":{
         "Description":{
-          "shape":"String",
+          "shape":"Description",
           "documentation":"<p>A user-specified description about the authentication used by a proxy to log in as a specific database user.</p>"
         },
         "UserName":{
-          "shape":"String",
+          "shape":"AuthUserName",
           "documentation":"<p>The name of the database user to which the proxy connects.</p>"
         },
         "AuthScheme":{
@@ -17062,7 +17261,7 @@
           "documentation":"<p>The type of authentication that the proxy uses for connections from the proxy to the underlying database.</p>"
         },
         "SecretArn":{
-          "shape":"String",
+          "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) representing the secret that the proxy uses to authenticate to the RDS DB instance or Aurora DB cluster. These secrets are stored within Amazon Secrets Manager.</p>"
         },
         "IAMAuth":{
@@ -17071,7 +17270,7 @@
         },
         "ClientPasswordAuthType":{
           "shape":"ClientPasswordAuthType",
-          "documentation":"<p>The type of authentication the proxy uses for connections from clients.</p>"
+          "documentation":"<p>The type of authentication the proxy uses for connections from clients. The following values are defaults for the corresponding engines:</p> <ul> <li> <p>RDS for MySQL: <code>MYSQL_CACHING_SHA2_PASSWORD</code> </p> </li> <li> <p>RDS for SQL Server: <code>SQL_SERVER_AUTHENTICATION</code> </p> </li> <li> <p>RDS for PostgreSQL: <code>POSTGRES_SCRAM_SHA2_256</code> </p> </li> </ul>"
         }
       },
       "documentation":"<p>Specifies the details of authentication used by a proxy to log in as a specific database user.</p>"
@@ -17097,7 +17296,7 @@
         },
         "IAMAuth":{
           "shape":"IAMAuthMode",
-          "documentation":"<p>Whether to require or disallow Amazon Web Services Identity and Access Management (IAM) authentication for connections to the proxy. The <code>ENABLED</code> value is valid only for proxies with RDS for Microsoft SQL Server.</p>"
+          "documentation":"<p>Whether to require or disallow Amazon Web Services Identity and Access Management (IAM) authentication for connections to the proxy. </p>"
         },
         "ClientPasswordAuthType":{
           "shape":"ClientPasswordAuthType",
@@ -17112,7 +17311,9 @@
     },
     "UserAuthConfigList":{
       "type":"list",
-      "member":{"shape":"UserAuthConfig"}
+      "member":{"shape":"UserAuthConfig"},
+      "max":200,
+      "min":0
     },
     "ValidDBInstanceModificationsMessage":{
       "type":"structure",
@@ -17152,10 +17353,6 @@
           "shape":"DoubleRangeList",
           "documentation":"<p>The valid range of Provisioned IOPS to gibibytes of storage multiplier. For example, 3-10, which means that provisioned IOPS can be between 3 and 10 times storage.</p>"
         },
-        "SupportsStorageAutoscaling":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether or not Amazon RDS can automatically scale storage for DB instances that use the new instance class.</p>"
-        },
         "ProvisionedStorageThroughput":{
           "shape":"RangeList",
           "documentation":"<p>The valid range of provisioned storage throughput. For example, 500-4,000 mebibytes per second (MiBps).</p>"
@@ -17163,6 +17360,10 @@
         "StorageThroughputToIopsRatio":{
           "shape":"DoubleRangeList",
           "documentation":"<p>The valid range of storage throughput to provisioned IOPS ratios. For example, 0-0.25.</p>"
+        },
+        "SupportsStorageAutoscaling":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether or not Amazon RDS can automatically scale storage for DB instances that use the new instance class.</p>"
         }
       },
       "documentation":"<p>Information about valid modifications that you can make to your DB instance. Contains the result of a successful call to the <code>DescribeValidDBInstanceModifications</code> action.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rds-data/2018-08-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/rds-data/2018-08-01/service-2.json 2.31.35-1/awscli/botocore/data/rds-data/2018-08-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/rds-data/2018-08-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rds-data/2018-08-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,6 +30,7 @@
         {"shape":"DatabaseUnavailableException"},
         {"shape":"TransactionNotFoundException"},
         {"shape":"InvalidSecretException"},
+        {"shape":"InvalidResourceStateException"},
         {"shape":"ServiceUnavailableError"},
         {"shape":"ForbiddenException"},
         {"shape":"DatabaseNotFoundException"},
@@ -57,6 +58,7 @@
         {"shape":"DatabaseUnavailableException"},
         {"shape":"TransactionNotFoundException"},
         {"shape":"InvalidSecretException"},
+        {"shape":"InvalidResourceStateException"},
         {"shape":"ServiceUnavailableError"},
         {"shape":"ForbiddenException"},
         {"shape":"DatabaseNotFoundException"},
@@ -83,6 +85,7 @@
         {"shape":"DatabaseUnavailableException"},
         {"shape":"TransactionNotFoundException"},
         {"shape":"InvalidSecretException"},
+        {"shape":"InvalidResourceStateException"},
         {"shape":"ServiceUnavailableError"},
         {"shape":"ForbiddenException"},
         {"shape":"DatabaseNotFoundException"},
@@ -132,6 +135,7 @@
         {"shape":"DatabaseUnavailableException"},
         {"shape":"TransactionNotFoundException"},
         {"shape":"InvalidSecretException"},
+        {"shape":"InvalidResourceStateException"},
         {"shape":"ServiceUnavailableError"},
         {"shape":"ForbiddenException"},
         {"shape":"DatabaseNotFoundException"},
@@ -159,6 +163,7 @@
         {"shape":"DatabaseUnavailableException"},
         {"shape":"TransactionNotFoundException"},
         {"shape":"InvalidSecretException"},
+        {"shape":"InvalidResourceStateException"},
         {"shape":"ServiceUnavailableError"},
         {"shape":"ForbiddenException"},
         {"shape":"DatabaseNotFoundException"},
@@ -476,7 +481,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>A request was canceled because the Aurora Serverless v2 DB instance was in a paused state. The Data API request automatically causes the DB instance to begin resuming. Wait a few seconds and try again.</p>",
+      "documentation":"<p>A request was cancelled because the Aurora Serverless v2 DB instance was paused. The Data API request automatically resumes the DB instance. Wait a few seconds and try again.</p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -714,6 +719,18 @@
       "exception":true,
       "fault":true
     },
+    "InvalidResourceStateException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The resource is in an invalid state.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "InvalidSecretException":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift/2012-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/redshift/2012-12-01/service-2.json 2.31.35-1/awscli/botocore/data/redshift/2012-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/redshift/2012-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift/2012-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -510,7 +510,9 @@
         {"shape":"DependentServiceUnavailableFault"},
         {"shape":"UnsupportedOperationFault"},
         {"shape":"DependentServiceAccessDeniedFault"},
-        {"shape":"RedshiftIdcApplicationQuotaExceededFault"}
+        {"shape":"RedshiftIdcApplicationQuotaExceededFault"},
+        {"shape":"TagLimitExceededFault"},
+        {"shape":"InvalidTagFault"}
       ],
       "documentation":"<p>Creates an Amazon Redshift application for use with IAM Identity Center.</p>"
     },
@@ -1778,6 +1780,25 @@
       ],
       "documentation":"<p>Returns a database user name and temporary password with temporary authorization to log in to an Amazon Redshift database. The database user is mapped 1:1 to the source Identity and Access Management (IAM) identity. For more information about IAM identities, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html\">IAM Identities (users, user groups, and roles)</a> in the Amazon Web Services Identity and Access Management User Guide.</p> <p>The Identity and Access Management (IAM) identity that runs this operation must have an IAM policy attached that allows access to all necessary actions and resources. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html\">Using identity-based policies (IAM policies)</a> in the Amazon Redshift Cluster Management Guide. </p>"
     },
+    "GetIdentityCenterAuthToken":{
+      "name":"GetIdentityCenterAuthToken",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetIdentityCenterAuthTokenRequest"},
+      "output":{
+        "shape":"GetIdentityCenterAuthTokenResponse",
+        "resultWrapper":"GetIdentityCenterAuthTokenResult"
+      },
+      "errors":[
+        {"shape":"ClusterNotFoundFault"},
+        {"shape":"InvalidClusterStateFault"},
+        {"shape":"UnsupportedOperationFault"},
+        {"shape":"RedshiftInvalidParameterFault"}
+      ],
+      "documentation":"<p>Generates an encrypted authentication token that propagates the caller's Amazon Web Services IAM Identity Center identity to Amazon Redshift clusters. This API extracts the Amazon Web Services IAM Identity Center identity from enhanced credentials and creates a secure token that Amazon Redshift drivers can use for authentication.</p> <p>The token is encrypted using Key Management Service (KMS) and can only be decrypted by the specified Amazon Redshift clusters. The token contains the caller's Amazon Web Services IAM Identity Center identity information and is valid for a limited time period.</p> <p>This API is exclusively for use with Amazon Web Services IAM Identity Center enhanced credentials. If the caller is not using enhanced credentials with embedded Amazon Web Services IAM Identity Center identity, the API will return an error.</p>"
+    },
     "GetReservedNodeExchangeConfigurationOptions":{
       "name":"GetReservedNodeExchangeConfigurationOptions",
       "http":{
@@ -2604,8 +2625,7 @@
     },
     "AccessToClusterDeniedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You are not authorized to access the cluster.</p>",
       "error":{
         "code":"AccessToClusterDenied",
@@ -2616,8 +2636,7 @@
     },
     "AccessToSnapshotDeniedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The owner of the specified snapshot has not authorized your account to access the snapshot.</p>",
       "error":{
         "code":"AccessToSnapshotDenied",
@@ -2814,8 +2833,7 @@
     },
     "AuthenticationProfileAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authentication profile already exists.</p>",
       "error":{
         "code":"AuthenticationProfileAlreadyExistsFault",
@@ -2835,8 +2853,7 @@
     },
     "AuthenticationProfileNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authentication profile can't be found.</p>",
       "error":{
         "code":"AuthenticationProfileNotFoundFault",
@@ -2847,8 +2864,7 @@
     },
     "AuthenticationProfileQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The size or number of authentication profiles has exceeded the quota. The maximum length of the JSON string and maximum number of authentication profiles is determined by a quota for your account.</p>",
       "error":{
         "code":"AuthenticationProfileQuotaExceededFault",
@@ -2859,8 +2875,7 @@
     },
     "AuthorizationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CIDR block or EC2 security group is already authorized for the specified cluster security group.</p>",
       "error":{
         "code":"AuthorizationAlreadyExists",
@@ -2871,8 +2886,7 @@
     },
     "AuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified CIDR IP range or EC2 security group is not authorized for the specified cluster security group.</p>",
       "error":{
         "code":"AuthorizationNotFound",
@@ -2883,8 +2897,7 @@
     },
     "AuthorizationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authorization quota for the cluster security group has been reached.</p>",
       "error":{
         "code":"AuthorizationQuotaExceeded",
@@ -3066,8 +3079,7 @@
     },
     "BatchDeleteRequestSizeExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number for a batch delete of snapshots has been reached. The limit is 100. </p>",
       "error":{
         "code":"BatchDeleteRequestSizeExceeded",
@@ -3078,8 +3090,7 @@
     },
     "BatchModifyClusterSnapshotsLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number for snapshot identifiers has been reached. The limit is 100. </p>",
       "error":{
         "code":"BatchModifyClusterSnapshotsLimitExceededFault",
@@ -3137,8 +3148,7 @@
     "BooleanOptional":{"type":"boolean"},
     "BucketNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Could not find the specified S3 bucket.</p>",
       "error":{
         "code":"BucketNotFoundFault",
@@ -3427,8 +3437,7 @@
     },
     "ClusterAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The account already has a cluster with the given identifier.</p>",
       "error":{
         "code":"ClusterAlreadyExists",
@@ -3553,6 +3562,13 @@
         "locationName":"ClusterIamRole"
       }
     },
+    "ClusterIdentifierList":{
+      "type":"list",
+      "member":{
+        "shape":"String",
+        "locationName":"ClusterIdentifier"
+      }
+    },
     "ClusterList":{
       "type":"list",
       "member":{
@@ -3584,8 +3600,7 @@
     },
     "ClusterNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>ClusterIdentifier</code> parameter does not refer to an existing cluster. </p>",
       "error":{
         "code":"ClusterNotFound",
@@ -3596,8 +3611,7 @@
     },
     "ClusterOnLatestRevisionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cluster is already on the latest database revision.</p>",
       "error":{
         "code":"ClusterOnLatestRevision",
@@ -3631,8 +3645,7 @@
     },
     "ClusterParameterGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A cluster parameter group with the same name already exists.</p>",
       "error":{
         "code":"ClusterParameterGroupAlreadyExists",
@@ -3671,8 +3684,7 @@
     },
     "ClusterParameterGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The parameter group name does not refer to an existing parameter group.</p>",
       "error":{
         "code":"ClusterParameterGroupNotFound",
@@ -3683,8 +3695,7 @@
     },
     "ClusterParameterGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of cluster parameter groups. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"ClusterParameterGroupQuotaExceeded",
@@ -3756,8 +3767,7 @@
     },
     "ClusterQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would exceed the allowed number of cluster instances for this account. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"ClusterQuotaExceeded",
@@ -3795,8 +3805,7 @@
     },
     "ClusterSecurityGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A cluster security group with the same name already exists.</p>",
       "error":{
         "code":"ClusterSecurityGroupAlreadyExists",
@@ -3849,8 +3858,7 @@
     },
     "ClusterSecurityGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster security group name does not refer to an existing cluster security group.</p>",
       "error":{
         "code":"ClusterSecurityGroupNotFound",
@@ -3861,8 +3869,7 @@
     },
     "ClusterSecurityGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of cluster security groups. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"QuotaExceeded.ClusterSecurityGroup",
@@ -3880,8 +3887,7 @@
     },
     "ClusterSnapshotAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value specified as a snapshot identifier is already used by an existing snapshot.</p>",
       "error":{
         "code":"ClusterSnapshotAlreadyExists",
@@ -3914,8 +3920,7 @@
     },
     "ClusterSnapshotNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The snapshot identifier does not refer to an existing cluster snapshot.</p>",
       "error":{
         "code":"ClusterSnapshotNotFound",
@@ -3926,8 +3931,7 @@
     },
     "ClusterSnapshotQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in the user exceeding the allowed number of cluster snapshots.</p>",
       "error":{
         "code":"ClusterSnapshotQuotaExceeded",
@@ -3973,8 +3977,7 @@
     },
     "ClusterSubnetGroupAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A <i>ClusterSubnetGroupName</i> is already used by an existing cluster subnet group. </p>",
       "error":{
         "code":"ClusterSubnetGroupAlreadyExists",
@@ -3999,8 +4002,7 @@
     },
     "ClusterSubnetGroupNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster subnet group name does not refer to an existing cluster subnet group.</p>",
       "error":{
         "code":"ClusterSubnetGroupNotFoundFault",
@@ -4011,8 +4013,7 @@
     },
     "ClusterSubnetGroupQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in user exceeding the allowed number of cluster subnet groups. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"ClusterSubnetGroupQuotaExceeded",
@@ -4030,8 +4031,7 @@
     },
     "ClusterSubnetQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would result in user exceeding the allowed number of subnets in a cluster subnet groups. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"ClusterSubnetQuotaExceededFault",
@@ -4095,8 +4095,7 @@
     },
     "ConflictPolicyUpdateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is a conflict while updating the resource policy.</p>",
       "error":{
         "code":"ConflictPolicyUpdateFault",
@@ -4145,8 +4144,7 @@
     },
     "CopyToRegionDisabledFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cross-region snapshot copy was temporarily disabled. Try your request again.</p>",
       "error":{
         "code":"CopyToRegionDisabledFault",
@@ -4747,6 +4745,14 @@
         "ServiceIntegrations":{
           "shape":"ServiceIntegrationList",
           "documentation":"<p>A collection of service integrations for the Redshift IAM Identity Center application.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of tags.</p>"
+        },
+        "SsoTagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of tags keys that Redshift Identity Center applications copy to IAM Identity Center. For each input key, the tag corresponding to the key-value pair is propagated.</p>"
         }
       }
     },
@@ -4912,8 +4918,7 @@
     },
     "CustomCnameAssociationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred when an attempt was made to change the custom domain association.</p>",
       "error":{
         "code":"CustomCnameAssociationFault",
@@ -4924,8 +4929,7 @@
     },
     "CustomDomainAssociationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An error occurred. The custom domain name couldn't be found.</p>",
       "error":{
         "code":"CustomDomainAssociationNotFoundFault",
@@ -5433,8 +5437,7 @@
     },
     "DependentServiceAccessDeniedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A dependent service denied access for the integration.</p>",
       "error":{
         "code":"DependentServiceAccessDenied",
@@ -5445,8 +5448,7 @@
     },
     "DependentServiceRequestThrottlingFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request cannot be completed because a dependent service is throttling requests made by Amazon Redshift on your behalf. Wait and retry the request.</p>",
       "error":{
         "code":"DependentServiceRequestThrottlingFault",
@@ -5457,8 +5459,7 @@
     },
     "DependentServiceUnavailableFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Your request cannot be completed because a dependent internal service is temporarily unavailable. Wait 30 to 60 seconds and try again.</p>",
       "error":{
         "code":"DependentServiceUnavailableFault",
@@ -6827,8 +6828,7 @@
     },
     "EndpointAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The account already has a Redshift-managed VPC endpoint with the given identifier.</p>",
       "error":{
         "code":"EndpointAlreadyExists",
@@ -6881,8 +6881,7 @@
     },
     "EndpointAuthorizationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authorization already exists for this endpoint.</p>",
       "error":{
         "code":"EndpointAuthorizationAlreadyExists",
@@ -6906,8 +6905,7 @@
     },
     "EndpointAuthorizationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authorization for this endpoint can't be found.</p>",
       "error":{
         "code":"EndpointAuthorizationNotFound",
@@ -6922,8 +6920,7 @@
     },
     "EndpointAuthorizationsPerClusterLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of endpoint authorizations per cluster has exceeded its limit.</p>",
       "error":{
         "code":"EndpointAuthorizationsPerClusterLimitExceeded",
@@ -6934,8 +6931,7 @@
     },
     "EndpointNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The endpoint name doesn't refer to an existing endpoint.</p>",
       "error":{
         "code":"EndpointNotFound",
@@ -6946,8 +6942,7 @@
     },
     "EndpointsPerAuthorizationLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of Redshift-managed VPC endpoints per authorization has exceeded its limit.</p>",
       "error":{
         "code":"EndpointsPerAuthorizationLimitExceeded",
@@ -6958,8 +6953,7 @@
     },
     "EndpointsPerClusterLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of Redshift-managed VPC endpoints per cluster has exceeded its limit.</p>",
       "error":{
         "code":"EndpointsPerClusterLimitExceeded",
@@ -7131,8 +7125,7 @@
     },
     "EventSubscriptionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request would exceed the allowed number of event subscriptions for this account. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"EventSubscriptionQuotaExceeded",
@@ -7248,6 +7241,31 @@
         }
       }
     },
+    "GetIdentityCenterAuthTokenRequest":{
+      "type":"structure",
+      "required":["ClusterIds"],
+      "members":{
+        "ClusterIds":{
+          "shape":"ClusterIdentifierList",
+          "documentation":"<p>A list of cluster identifiers that the generated token can be used with. The token will be scoped to only allow authentication to the specified clusters.</p> <p>Constraints:</p> <ul> <li> <p> <code>ClusterIds</code> must contain at least 1 cluster identifier.</p> </li> <li> <p> <code>ClusterIds</code> can hold a maximum of 20 cluster identifiers.</p> </li> <li> <p>Cluster identifiers must be 1 to 63 characters in length.</p> </li> <li> <p>The characters accepted for cluster identifiers are the following:</p> <ul> <li> <p>Alphanumeric characters</p> </li> <li> <p>Hyphens</p> </li> </ul> </li> <li> <p>Cluster identifiers must start with a letter.</p> </li> <li> <p>Cluster identifiers can't end with a hyphen or contain two consecutive hyphens.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The request parameters for <code>GetIdentityCenterAuthToken</code>.</p>"
+    },
+    "GetIdentityCenterAuthTokenResponse":{
+      "type":"structure",
+      "members":{
+        "Token":{
+          "shape":"SensitiveString",
+          "documentation":"<p>The encrypted authentication token containing the caller's Amazon Web Services IAM Identity Center identity information. This token is encrypted using Key Management Service and can only be decrypted by the specified Amazon Redshift clusters. Use this token with Amazon Redshift drivers to authenticate using your Amazon Web Services IAM Identity Center identity.</p>"
+        },
+        "ExpirationTime":{
+          "shape":"TStamp",
+          "documentation":"<p>The time (UTC) when the token expires. After this timestamp, the token will no longer be valid for authentication.</p>"
+        }
+      },
+      "documentation":"<p>The response from GetIdentityCenterAuthToken containing the encrypted authentication token and expiration time.</p>"
+    },
     "GetReservedNodeExchangeConfigurationOptionsInputMessage":{
       "type":"structure",
       "required":["ActionType"],
@@ -7359,8 +7377,7 @@
     },
     "HsmClientCertificateAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is already an existing Amazon Redshift HSM client certificate with the specified identifier.</p>",
       "error":{
         "code":"HsmClientCertificateAlreadyExistsFault",
@@ -7392,8 +7409,7 @@
     },
     "HsmClientCertificateNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is no Amazon Redshift HSM client certificate with the specified identifier.</p>",
       "error":{
         "code":"HsmClientCertificateNotFoundFault",
@@ -7404,8 +7420,7 @@
     },
     "HsmClientCertificateQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for HSM client certificates has been reached. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"HsmClientCertificateQuotaExceededFault",
@@ -7443,8 +7458,7 @@
     },
     "HsmConfigurationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is already an existing Amazon Redshift HSM configuration with the specified identifier.</p>",
       "error":{
         "code":"HsmConfigurationAlreadyExistsFault",
@@ -7476,8 +7490,7 @@
     },
     "HsmConfigurationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is no Amazon Redshift HSM configuration with the specified identifier.</p>",
       "error":{
         "code":"HsmConfigurationNotFoundFault",
@@ -7488,8 +7501,7 @@
     },
     "HsmConfigurationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for HSM configurations has been reached. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"HsmConfigurationQuotaExceededFault",
@@ -7582,8 +7594,7 @@
     },
     "InProgressTableRestoreQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the allowed number of table restore requests. Wait for your current table restore requests to complete before making a new request.</p>",
       "error":{
         "code":"InProgressTableRestoreQuotaExceededFault",
@@ -7650,8 +7661,7 @@
     },
     "IncompatibleOrderableOptions":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified options are incompatible.</p>",
       "error":{
         "code":"IncompatibleOrderableOptions",
@@ -7662,8 +7672,7 @@
     },
     "InsufficientClusterCapacityFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of nodes specified exceeds the allotted capacity of the cluster.</p>",
       "error":{
         "code":"InsufficientClusterCapacity",
@@ -7674,8 +7683,7 @@
     },
     "InsufficientS3BucketPolicyFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster does not have read bucket or put object permissions on the S3 bucket specified when enabling logging.</p>",
       "error":{
         "code":"InsufficientS3BucketPolicyFault",
@@ -7737,8 +7745,7 @@
     },
     "IntegrationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The integration you are trying to create already exists.</p>",
       "error":{
         "code":"IntegrationAlreadyExistsFault",
@@ -7755,8 +7762,7 @@
     },
     "IntegrationConflictOperationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A conflicting conditional operation is currently in progress against this resource. This typically occurs when there are multiple requests being made to the same resource at the same time, and these requests conflict with each other.</p>",
       "error":{
         "code":"IntegrationConflictOperationFault",
@@ -7767,8 +7773,7 @@
     },
     "IntegrationConflictStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The integration is in an invalid state and can't perform the requested operation.</p>",
       "error":{
         "code":"IntegrationConflictStateFault",
@@ -7820,8 +7825,7 @@
     },
     "IntegrationNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The integration can't be found.</p>",
       "error":{
         "code":"IntegrationNotFoundFault",
@@ -7832,8 +7836,7 @@
     },
     "IntegrationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't create any more zero-ETL or S3 event integrations because the quota has been reached.</p>",
       "error":{
         "code":"IntegrationQuotaExceededFault",
@@ -7844,8 +7847,7 @@
     },
     "IntegrationSourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified integration source can't be found.</p>",
       "error":{
         "code":"IntegrationSourceNotFoundFault",
@@ -7856,8 +7858,7 @@
     },
     "IntegrationTargetNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified integration target can't be found.</p>",
       "error":{
         "code":"IntegrationTargetNotFoundFault",
@@ -7881,8 +7882,7 @@
     },
     "InvalidAuthenticationProfileRequestFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The authentication profile request is not valid. The profile name can't be null or empty. The authentication profile API operation must be available in the Amazon Web Services Region.</p>",
       "error":{
         "code":"InvalidAuthenticationProfileRequestFault",
@@ -7893,8 +7893,7 @@
     },
     "InvalidAuthorizationStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The status of the authorization is not valid.</p>",
       "error":{
         "code":"InvalidAuthorizationState",
@@ -7905,8 +7904,7 @@
     },
     "InvalidClusterParameterGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster parameter group action can not be completed because another task is in progress that involves the parameter group. Wait a few moments and try the operation again.</p>",
       "error":{
         "code":"InvalidClusterParameterGroupState",
@@ -7917,8 +7915,7 @@
     },
     "InvalidClusterSecurityGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the cluster security group is not <code>available</code>. </p>",
       "error":{
         "code":"InvalidClusterSecurityGroupState",
@@ -7929,8 +7926,7 @@
     },
     "InvalidClusterSnapshotScheduleStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster snapshot schedule state is not valid.</p>",
       "error":{
         "code":"InvalidClusterSnapshotScheduleState",
@@ -7941,8 +7937,7 @@
     },
     "InvalidClusterSnapshotStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified cluster snapshot is not in the <code>available</code> state, or other accounts are authorized to access the snapshot. </p>",
       "error":{
         "code":"InvalidClusterSnapshotState",
@@ -7953,8 +7948,7 @@
     },
     "InvalidClusterStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified cluster is not in the <code>available</code> state. </p>",
       "error":{
         "code":"InvalidClusterState",
@@ -7965,8 +7959,7 @@
     },
     "InvalidClusterSubnetGroupStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster subnet group cannot be deleted because it is in use.</p>",
       "error":{
         "code":"InvalidClusterSubnetGroupStateFault",
@@ -7977,8 +7970,7 @@
     },
     "InvalidClusterSubnetStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The state of the subnet is invalid.</p>",
       "error":{
         "code":"InvalidClusterSubnetStateFault",
@@ -7989,8 +7981,7 @@
     },
     "InvalidClusterTrackFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided cluster track name is not valid.</p>",
       "error":{
         "code":"InvalidClusterTrack",
@@ -8001,8 +7992,7 @@
     },
     "InvalidDataShareFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is an error with the datashare.</p>",
       "error":{
         "code":"InvalidDataShareFault",
@@ -8013,8 +8003,7 @@
     },
     "InvalidElasticIpFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Elastic IP (EIP) is invalid or cannot be found.</p>",
       "error":{
         "code":"InvalidElasticIpFault",
@@ -8025,8 +8014,7 @@
     },
     "InvalidEndpointStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The status of the endpoint is not valid.</p>",
       "error":{
         "code":"InvalidEndpointState",
@@ -8037,8 +8025,7 @@
     },
     "InvalidHsmClientCertificateStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified HSM client certificate is not in the <code>available</code> state, or it is still in use by one or more Amazon Redshift clusters.</p>",
       "error":{
         "code":"InvalidHsmClientCertificateStateFault",
@@ -8049,8 +8036,7 @@
     },
     "InvalidHsmConfigurationStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified HSM configuration is not in the <code>available</code> state, or it is still in use by one or more Amazon Redshift clusters.</p>",
       "error":{
         "code":"InvalidHsmConfigurationStateFault",
@@ -8061,8 +8047,7 @@
     },
     "InvalidNamespaceFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The namespace isn't valid because the namespace doesn't exist. Provide a valid namespace.</p>",
       "error":{
         "code":"InvalidNamespaceFault",
@@ -8073,8 +8058,7 @@
     },
     "InvalidPolicyFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource policy isn't valid.</p>",
       "error":{
         "code":"InvalidPolicyFault",
@@ -8085,8 +8069,7 @@
     },
     "InvalidReservedNodeStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the Reserved Node being exchanged is not in an active state.</p>",
       "error":{
         "code":"InvalidReservedNodeState",
@@ -8097,8 +8080,7 @@
     },
     "InvalidRestoreFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The restore is invalid.</p>",
       "error":{
         "code":"InvalidRestore",
@@ -8109,8 +8091,7 @@
     },
     "InvalidRetentionPeriodFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The retention period specified is either in the past or is not a valid value.</p> <p>The value must be either -1 or an integer between 1 and 3,653.</p>",
       "error":{
         "code":"InvalidRetentionPeriodFault",
@@ -8121,8 +8102,7 @@
     },
     "InvalidS3BucketNameFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The S3 bucket name is invalid. For more information about naming rules, go to <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html\">Bucket Restrictions and Limitations</a> in the Amazon Simple Storage Service (S3) Developer Guide.</p>",
       "error":{
         "code":"InvalidS3BucketNameFault",
@@ -8133,8 +8113,7 @@
     },
     "InvalidS3KeyPrefixFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The string specified for the logging S3 key prefix does not comply with the documented constraints.</p>",
       "error":{
         "code":"InvalidS3KeyPrefixFault",
@@ -8145,8 +8124,7 @@
     },
     "InvalidScheduleFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The schedule you submitted isn't valid.</p>",
       "error":{
         "code":"InvalidSchedule",
@@ -8157,8 +8135,7 @@
     },
     "InvalidScheduledActionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The scheduled action is not valid. </p>",
       "error":{
         "code":"InvalidScheduledAction",
@@ -8169,8 +8146,7 @@
     },
     "InvalidSnapshotCopyGrantStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The snapshot copy grant can't be deleted because it is used by one or more clusters.</p>",
       "error":{
         "code":"InvalidSnapshotCopyGrantStateFault",
@@ -8181,8 +8157,7 @@
     },
     "InvalidSubnet":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested subnet is not valid, or not all of the subnets are in the same VPC.</p>",
       "error":{
         "code":"InvalidSubnet",
@@ -8193,8 +8168,7 @@
     },
     "InvalidSubscriptionStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The subscription request is invalid because it is a duplicate request. This subscription request is already in progress.</p>",
       "error":{
         "code":"InvalidSubscriptionStateFault",
@@ -8205,8 +8179,7 @@
     },
     "InvalidTableRestoreArgumentFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value specified for the <code>sourceDatabaseName</code>, <code>sourceSchemaName</code>, or <code>sourceTableName</code> parameter, or a combination of these, doesn't exist in the snapshot.</p>",
       "error":{
         "code":"InvalidTableRestoreArgument",
@@ -8217,8 +8190,7 @@
     },
     "InvalidTagFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The tag is invalid.</p>",
       "error":{
         "code":"InvalidTagFault",
@@ -8229,8 +8201,7 @@
     },
     "InvalidUsageLimitFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The usage limit is not valid.</p>",
       "error":{
         "code":"InvalidUsageLimit",
@@ -8241,8 +8212,7 @@
     },
     "InvalidVPCNetworkStateFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster subnet group does not cover all Availability Zones.</p>",
       "error":{
         "code":"InvalidVPCNetworkStateFault",
@@ -8253,8 +8223,7 @@
     },
     "Ipv6CidrBlockNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There are no subnets in your VPC with associated IPv6 CIDR blocks. To use dual-stack mode, associate an IPv6 CIDR block with each subnet in your VPC.</p>",
       "error":{
         "code":"Ipv6CidrBlockNotFoundFault",
@@ -8291,8 +8260,7 @@
     },
     "LimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The encryption key has exceeded its grant limit in Amazon Web Services KMS.</p>",
       "error":{
         "code":"LimitExceededFault",
@@ -9156,8 +9124,7 @@
     },
     "NumberOfNodesPerClusterLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation would exceed the number of nodes allowed for a cluster.</p>",
       "error":{
         "code":"NumberOfNodesPerClusterLimitExceeded",
@@ -9168,8 +9135,7 @@
     },
     "NumberOfNodesQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation would exceed the number of nodes allotted to the account. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"NumberOfNodesQuotaExceeded",
@@ -9411,8 +9377,7 @@
     },
     "PartnerNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The name of the partner was not found.</p>",
       "error":{
         "code":"PartnerNotFound",
@@ -9739,6 +9704,14 @@
         "ServiceIntegrations":{
           "shape":"ServiceIntegrationList",
           "documentation":"<p>A list of service integrations for the Redshift IAM Identity Center application.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>A list of tags.</p>"
+        },
+        "SsoTagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>A list of tags keys that Redshift Identity Center applications copy to IAM Identity Center. For each input key, the tag corresponding to the key-value pair is propagated.</p>"
         }
       },
       "documentation":"<p>Contains properties for the Redshift IDC application.</p>",
@@ -9746,8 +9719,7 @@
     },
     "RedshiftIdcApplicationAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The application you attempted to add already exists.</p>",
       "error":{
         "code":"RedshiftIdcApplicationAlreadyExists",
@@ -9768,8 +9740,7 @@
     },
     "RedshiftIdcApplicationNotExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The application you attempted to find doesn't exist.</p>",
       "error":{
         "code":"RedshiftIdcApplicationNotExists",
@@ -9780,8 +9751,7 @@
     },
     "RedshiftIdcApplicationQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The maximum number of Redshift IAM Identity Center applications was exceeded.</p>",
       "error":{
         "code":"RedshiftIdcApplicationQuotaExceeded",
@@ -9790,6 +9760,17 @@
       },
       "exception":true
     },
+    "RedshiftInvalidParameterFault":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>The request contains one or more invalid parameters. This error occurs when required parameters are missing, parameter values are outside acceptable ranges, or parameter formats are incorrect.</p>",
+      "error":{
+        "code":"RedshiftInvalidParameter",
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "ReferenceLink":{
       "type":"structure",
       "members":{
@@ -9908,8 +9889,7 @@
     },
     "ReservedNodeAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>User already has a reservation with the given identifier.</p>",
       "error":{
         "code":"ReservedNodeAlreadyExists",
@@ -9920,8 +9900,7 @@
     },
     "ReservedNodeAlreadyMigratedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the reserved node has already been exchanged.</p>",
       "error":{
         "code":"ReservedNodeAlreadyMigrated",
@@ -9959,8 +9938,7 @@
     },
     "ReservedNodeExchangeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The reserved-node exchange status wasn't found.</p>",
       "error":{
         "code":"ReservedNodeExchangeNotFond",
@@ -10039,8 +10017,7 @@
     },
     "ReservedNodeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified reserved compute node not found.</p>",
       "error":{
         "code":"ReservedNodeNotFound",
@@ -10101,8 +10078,7 @@
     },
     "ReservedNodeOfferingNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specified offering does not exist.</p>",
       "error":{
         "code":"ReservedNodeOfferingNotFound",
@@ -10134,8 +10110,7 @@
     },
     "ReservedNodeQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request would exceed the user's compute node quota. For information about increasing your quota, go to <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html\">Limits in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>. </p>",
       "error":{
         "code":"ReservedNodeQuotaExceeded",
@@ -10234,8 +10209,7 @@
     },
     "ResizeNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A resize operation for the specified cluster is not found.</p>",
       "error":{
         "code":"ResizeNotFound",
@@ -10316,8 +10290,7 @@
     },
     "ResourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource could not be found.</p>",
       "error":{
         "code":"ResourceNotFoundFault",
@@ -10753,8 +10726,7 @@
     },
     "SNSInvalidTopicFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon SNS has responded that there is a problem with the specified Amazon SNS topic.</p>",
       "error":{
         "code":"SNSInvalidTopic",
@@ -10765,8 +10737,7 @@
     },
     "SNSNoAuthorizationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You do not have permission to publish to the specified Amazon SNS topic.</p>",
       "error":{
         "code":"SNSNoAuthorization",
@@ -10777,8 +10748,7 @@
     },
     "SNSTopicArnNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon SNS topic with the specified Amazon Resource Name (ARN) does not exist.</p>",
       "error":{
         "code":"SNSTopicArnNotFound",
@@ -10796,8 +10766,7 @@
     },
     "ScheduleDefinitionTypeUnsupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The definition you submitted is not supported.</p>",
       "error":{
         "code":"ScheduleDefinitionTypeUnsupported",
@@ -10858,8 +10827,7 @@
     },
     "ScheduledActionAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The scheduled action already exists. </p>",
       "error":{
         "code":"ScheduledActionAlreadyExists",
@@ -10909,8 +10877,7 @@
     },
     "ScheduledActionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The scheduled action cannot be found. </p>",
       "error":{
         "code":"ScheduledActionNotFound",
@@ -10921,8 +10888,7 @@
     },
     "ScheduledActionQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The quota for scheduled actions exceeded. </p>",
       "error":{
         "code":"ScheduledActionQuotaExceeded",
@@ -10965,8 +10931,7 @@
     },
     "ScheduledActionTypeUnsupportedFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The action type specified for a scheduled action is not supported. </p>",
       "error":{
         "code":"ScheduledActionTypeUnsupported",
@@ -11230,8 +11195,7 @@
     },
     "SnapshotCopyAlreadyDisabledFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster already has cross-region snapshot copy disabled.</p>",
       "error":{
         "code":"SnapshotCopyAlreadyDisabledFault",
@@ -11242,8 +11206,7 @@
     },
     "SnapshotCopyAlreadyEnabledFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The cluster already has cross-region snapshot copy enabled.</p>",
       "error":{
         "code":"SnapshotCopyAlreadyEnabledFault",
@@ -11254,8 +11217,7 @@
     },
     "SnapshotCopyDisabledFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Cross-region snapshot copy was temporarily disabled. Try your request again.</p>",
       "error":{
         "code":"SnapshotCopyDisabledFault",
@@ -11285,8 +11247,7 @@
     },
     "SnapshotCopyGrantAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The snapshot copy grant can't be created because a grant with the same name already exists.</p>",
       "error":{
         "code":"SnapshotCopyGrantAlreadyExistsFault",
@@ -11318,8 +11279,7 @@
     },
     "SnapshotCopyGrantNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified snapshot copy grant can't be found. Make sure that the name is typed correctly and that the grant exists in the destination region.</p>",
       "error":{
         "code":"SnapshotCopyGrantNotFoundFault",
@@ -11330,8 +11290,7 @@
     },
     "SnapshotCopyGrantQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Amazon Web Services account has exceeded the maximum number of snapshot copy grants in this region.</p>",
       "error":{
         "code":"SnapshotCopyGrantQuotaExceededFault",
@@ -11426,8 +11385,7 @@
     },
     "SnapshotScheduleAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified snapshot schedule already exists. </p>",
       "error":{
         "code":"SnapshotScheduleAlreadyExists",
@@ -11445,8 +11403,7 @@
     },
     "SnapshotScheduleNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>We could not find the specified snapshot schedule. </p>",
       "error":{
         "code":"SnapshotScheduleNotFound",
@@ -11457,8 +11414,7 @@
     },
     "SnapshotScheduleQuotaExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the quota of snapshot schedules. </p>",
       "error":{
         "code":"SnapshotScheduleQuotaExceeded",
@@ -11469,8 +11425,7 @@
     },
     "SnapshotScheduleUpdateInProgressFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified snapshot schedule is already being updated.</p>",
       "error":{
         "code":"SnapshotScheduleUpdateInProgress",
@@ -11523,8 +11478,7 @@
     },
     "SourceNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified Amazon Redshift event source could not be found.</p>",
       "error":{
         "code":"SourceNotFound",
@@ -11567,8 +11521,7 @@
     },
     "SubnetAlreadyInUse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A specified subnet is already in use by another cluster.</p>",
       "error":{
         "code":"SubnetAlreadyInUse",
@@ -11593,8 +11546,7 @@
     },
     "SubscriptionAlreadyExistFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There is already an existing event notification subscription with the specified name.</p>",
       "error":{
         "code":"SubscriptionAlreadyExist",
@@ -11605,8 +11557,7 @@
     },
     "SubscriptionCategoryNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value specified for the event category was not one of the allowed values, or it specified a category that does not apply to the specified source type. The allowed values are Configuration, Management, Monitoring, and Security.</p>",
       "error":{
         "code":"SubscriptionCategoryNotFound",
@@ -11617,8 +11568,7 @@
     },
     "SubscriptionEventIdNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon Redshift event with the specified event ID does not exist.</p>",
       "error":{
         "code":"SubscriptionEventIdNotFound",
@@ -11629,8 +11579,7 @@
     },
     "SubscriptionNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon Redshift event notification subscription with the specified name does not exist.</p>",
       "error":{
         "code":"SubscriptionNotFound",
@@ -11641,8 +11590,7 @@
     },
     "SubscriptionSeverityNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The value specified for the event severity was not one of the allowed values, or it specified a severity that does not apply to the specified source type. The allowed values are ERROR and INFO.</p>",
       "error":{
         "code":"SubscriptionSeverityNotFound",
@@ -11689,8 +11637,7 @@
     "TStamp":{"type":"timestamp"},
     "TableLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of tables in the cluster exceeds the limit for the requested new cluster node type. </p>",
       "error":{
         "code":"TableLimitExceeded",
@@ -11701,8 +11648,7 @@
     },
     "TableRestoreNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified <code>TableRestoreRequestId</code> value was not found.</p>",
       "error":{
         "code":"TableRestoreNotFoundFault",
@@ -11828,8 +11774,7 @@
     },
     "TagLimitExceededFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You have exceeded the number of tags allowed.</p>",
       "error":{
         "code":"TagLimitExceededFault",
@@ -11919,8 +11864,7 @@
     },
     "UnauthorizedOperation":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Your account is not authorized to perform the requested operation.</p>",
       "error":{
         "code":"UnauthorizedOperation",
@@ -11931,8 +11875,7 @@
     },
     "UnauthorizedPartnerIntegrationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The partner integration is not authorized.</p>",
       "error":{
         "code":"UnauthorizedPartnerIntegration",
@@ -11943,8 +11886,7 @@
     },
     "UnknownSnapshotCopyRegionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified region is incorrect or does not exist.</p>",
       "error":{
         "code":"UnknownSnapshotCopyRegionFault",
@@ -11955,8 +11897,7 @@
     },
     "UnsupportedOperationFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested operation isn't supported.</p>",
       "error":{
         "code":"UnsupportedOperation",
@@ -11967,8 +11908,7 @@
     },
     "UnsupportedOptionFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request option was specified that is not supported.</p>",
       "error":{
         "code":"UnsupportedOptionFault",
@@ -12071,8 +12011,7 @@
     },
     "UsageLimitAlreadyExistsFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The usage limit already exists. </p>",
       "error":{
         "code":"UsageLimitAlreadyExists",
@@ -12119,8 +12058,7 @@
     },
     "UsageLimitNotFoundFault":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The usage limit identifier can't be found.</p>",
       "error":{
         "code":"UsageLimitNotFound",
diff -pruN 2.23.6-1/awscli/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift-data/2019-12-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/redshift-data/2019-12-20/service-2.json 2.31.35-1/awscli/botocore/data/redshift-data/2019-12-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/redshift-data/2019-12-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift-data/2019-12-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,7 +170,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>List of SQL statements. By default, only finished statements are shown. A token is returned to page through the statement list. </p> <p>For more information about the Amazon Redshift Data API and CLI usage examples, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/data-api.html\">Using the Amazon Redshift Data API</a> in the <i>Amazon Redshift Management Guide</i>. </p>"
+      "documentation":"<p>List of SQL statements. By default, only finished statements are shown. A token is returned to page through the statement list. </p> <p>When you use identity-enhanced role sessions to list statements, you must provide either the <code>cluster-identifier</code> or <code>workgroup-name</code> parameter. This ensures that the IdC user can only access the Amazon Redshift IdC applications they are assigned. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html\"> Trusted identity propagation overview</a>.</p> <p>For more information about the Amazon Redshift Data API and CLI usage examples, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/data-api.html\">Using the Amazon Redshift Data API</a> in the <i>Amazon Redshift Management Guide</i>. </p>"
     },
     "ListTables":{
       "name":"ListTables",
@@ -971,6 +971,14 @@
     "ListStatementsRequest":{
       "type":"structure",
       "members":{
+        "ClusterIdentifier":{
+          "shape":"ClusterIdentifierString",
+          "documentation":"<p>The cluster identifier. Only statements that ran on this cluster are returned. When providing <code>ClusterIdentifier</code>, then <code>WorkgroupName</code> can't be specified.</p>"
+        },
+        "Database":{
+          "shape":"String",
+          "documentation":"<p>The name of the database when listing statements run against a <code>ClusterIdentifier</code> or <code>WorkgroupName</code>. </p>"
+        },
         "MaxResults":{
           "shape":"ListStatementsLimit",
           "documentation":"<p>The maximum number of SQL statements to return in the response. If more SQL statements exist than fit in one response, then <code>NextToken</code> is returned to page through the results. </p>"
@@ -990,6 +998,10 @@
         "Status":{
           "shape":"StatusString",
           "documentation":"<p>The status of the SQL statement to list. Status values are defined as follows: </p> <ul> <li> <p>ABORTED - The query run was stopped by the user. </p> </li> <li> <p>ALL - A status value that includes all query statuses. This value can be used to filter results. </p> </li> <li> <p>FAILED - The query run failed. </p> </li> <li> <p>FINISHED - The query has finished running. </p> </li> <li> <p>PICKED - The query has been chosen to be run. </p> </li> <li> <p>STARTED - The query run has started. </p> </li> <li> <p>SUBMITTED - The query was submitted, but not yet processed. </p> </li> </ul>"
+        },
+        "WorkgroupName":{
+          "shape":"WorkgroupNameString",
+          "documentation":"<p>The serverless workgroup name or Amazon Resource Name (ARN). Only statements that ran on this workgroup are returned. When providing <code>WorkgroupName</code>, then <code>ClusterIdentifier</code> can't be specified.</p>"
         }
       }
     },
@@ -1359,7 +1371,7 @@
       "type":"string",
       "max":128,
       "min":3,
-      "pattern":"^(([a-z0-9-]+)|(arn:(aws(-[a-z]+)*):redshift-serverless:[a-z]{2}(-gov)?-[a-z]+-\\d{1}:\\d{12}:workgroup/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))$"
+      "pattern":"^(([a-z0-9-]+)|(arn:(aws(-[a-z]+)*):redshift-serverless:[a-z]{2}(-gov|(-iso[a-z]?))?-[a-z]+-\\d{1}:\\d{12}:workgroup/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))$"
     },
     "bool":{"type":"boolean"}
   },
diff -pruN 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/paginators-1.json 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -65,6 +65,24 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "managedWorkgroups"
+    },
+    "ListTracks": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "tracks"
+    },
+    "ListReservationOfferings": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "reservationOfferingsList"
+    },
+    "ListReservations": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "reservationsList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/service-2.json 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/service-2.json
--- 2.23.6-1/awscli/botocore/data/redshift-serverless/2021-04-21/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/redshift-serverless/2021-04-21/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -31,7 +31,7 @@
         {"shape":"TooManyTagsException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Converts a recovery point to a snapshot. For more information about recovery points and snapshots, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-snapshots-recovery.html\">Working with snapshots and recovery points</a>.</p>"
+      "documentation":"<p>Converts a recovery point to a snapshot. For more information about recovery points and snapshots, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-snapshots-recovery-points.html\">Working with snapshots and recovery points</a>.</p>"
     },
     "CreateCustomDomainAssociation":{
       "name":"CreateCustomDomainAssociation",
@@ -87,6 +87,26 @@
       "documentation":"<p>Creates a namespace in Amazon Redshift Serverless.</p>",
       "idempotent":true
     },
+    "CreateReservation":{
+      "name":"CreateReservation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateReservationRequest"},
+      "output":{"shape":"CreateReservationResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates an Amazon Redshift Serverless reservation, which gives you the option to commit to a specified number of Redshift Processing Units (RPUs) for a year at a discount from Serverless on-demand (OD) rates.</p>",
+      "idempotent":true
+    },
     "CreateScheduledAction":{
       "name":"CreateScheduledAction",
       "http":{
@@ -120,7 +140,7 @@
         {"shape":"TooManyTagsException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Creates a snapshot of all databases in a namespace. For more information about snapshots, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-snapshots-recovery.html\"> Working with snapshots and recovery points</a>.</p>",
+      "documentation":"<p>Creates a snapshot of all databases in a namespace. For more information about snapshots, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-snapshots-recovery-points.html\"> Working with snapshots and recovery points</a>.</p>",
       "idempotent":true
     },
     "CreateSnapshotCopyConfiguration":{
@@ -412,6 +432,38 @@
       ],
       "documentation":"<p>Returns information about a recovery point.</p>"
     },
+    "GetReservation":{
+      "name":"GetReservation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetReservationRequest"},
+      "output":{"shape":"GetReservationResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Gets an Amazon Redshift Serverless reservation. A reservation gives you the option to commit to a specified number of Redshift Processing Units (RPUs) for a year at a discount from Serverless on-demand (OD) rates.</p>"
+    },
+    "GetReservationOffering":{
+      "name":"GetReservationOffering",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetReservationOfferingRequest"},
+      "output":{"shape":"GetReservationOfferingResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the reservation offering. The offering determines the payment schedule for the reservation.</p>"
+    },
     "GetResourcePolicy":{
       "name":"GetResourcePolicy",
       "http":{
@@ -471,6 +523,24 @@
       ],
       "documentation":"<p>Returns information about a <code>TableRestoreStatus</code> object.</p>"
     },
+    "GetTrack":{
+      "name":"GetTrack",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetTrackRequest"},
+      "output":{"shape":"GetTrackResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Get the Redshift Serverless version for a specified track.</p>"
+    },
     "GetUsageLimit":{
       "name":"GetUsageLimit",
       "http":{
@@ -577,6 +647,36 @@
       ],
       "documentation":"<p>Returns an array of recovery points.</p>"
     },
+    "ListReservationOfferings":{
+      "name":"ListReservationOfferings",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListReservationOfferingsRequest"},
+      "output":{"shape":"ListReservationOfferingsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns the current reservation offerings in your account.</p>"
+    },
+    "ListReservations":{
+      "name":"ListReservations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListReservationsRequest"},
+      "output":{"shape":"ListReservationsResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of Reservation objects.</p>"
+    },
     "ListScheduledActions":{
       "name":"ListScheduledActions",
       "http":{
@@ -656,6 +756,23 @@
       ],
       "documentation":"<p>Lists the tags assigned to a resource.</p>"
     },
+    "ListTracks":{
+      "name":"ListTracks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTracksRequest"},
+      "output":{"shape":"ListTracksResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"InvalidPaginationException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>List the Amazon Redshift Serverless versions.</p>"
+    },
     "ListUsageLimits":{
       "name":"ListUsageLimits",
       "http":{
@@ -988,6 +1105,8 @@
       "type":"boolean",
       "box":true
     },
+    "Capacity":{"type":"integer"},
+    "Charge":{"type":"double"},
     "ConfigParameter":{
       "type":"structure",
       "members":{
@@ -1194,6 +1313,42 @@
         }
       }
     },
+    "CreateReservationRequest":{
+      "type":"structure",
+      "required":[
+        "capacity",
+        "offeringId"
+      ],
+      "members":{
+        "capacity":{
+          "shape":"Capacity",
+          "documentation":"<p>The number of Redshift Processing Units (RPUs) to reserve.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If not provided, the Amazon Web Services SDK populates this field. This token must be a valid UUIDv4 value. For more information about idempotency, see <a href=\"https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/\"> Making retries safe with idempotent APIs </a>.</p>",
+          "idempotencyToken":true
+        },
+        "offeringId":{
+          "shape":"CreateReservationRequestOfferingIdString",
+          "documentation":"<p>The ID of the offering associated with the reservation. The offering determines the payment schedule for the reservation.</p>"
+        }
+      }
+    },
+    "CreateReservationRequestOfferingIdString":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "CreateReservationResponse":{
+      "type":"structure",
+      "members":{
+        "reservation":{
+          "shape":"Reservation",
+          "documentation":"<p>The reservation object that the <code>CreateReservation</code> action created.</p>"
+        }
+      }
+    },
     "CreateScheduledActionRequest":{
       "type":"structure",
       "required":[
@@ -1437,6 +1592,10 @@
           "shape":"TagList",
           "documentation":"<p>A array of tag instances.</p>"
         },
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>An optional parameter for the name of the track for the workgroup. If you don't provide a track name, the workgroup is assigned to the <code>current</code> track.</p>"
+        },
         "workgroupName":{
           "shape":"WorkgroupName",
           "documentation":"<p>The name of the created workgroup.</p>"
@@ -1452,6 +1611,7 @@
         }
       }
     },
+    "CurrencyCode":{"type":"string"},
     "CustomDomainCertificateArnString":{
       "type":"string",
       "max":2048,
@@ -1658,6 +1818,7 @@
       "type":"double",
       "box":true
     },
+    "Duration":{"type":"integer"},
     "Endpoint":{
       "type":"structure",
       "members":{
@@ -1864,6 +2025,56 @@
         }
       }
     },
+    "GetReservationOfferingRequest":{
+      "type":"structure",
+      "required":["offeringId"],
+      "members":{
+        "offeringId":{
+          "shape":"GetReservationOfferingRequestOfferingIdString",
+          "documentation":"<p>The identifier for the offering..</p>"
+        }
+      }
+    },
+    "GetReservationOfferingRequestOfferingIdString":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "GetReservationOfferingResponse":{
+      "type":"structure",
+      "required":["reservationOffering"],
+      "members":{
+        "reservationOffering":{
+          "shape":"ReservationOffering",
+          "documentation":"<p>The returned reservation offering. The offering determines the payment schedule for the reservation.</p>"
+        }
+      }
+    },
+    "GetReservationRequest":{
+      "type":"structure",
+      "required":["reservationId"],
+      "members":{
+        "reservationId":{
+          "shape":"GetReservationRequestReservationIdString",
+          "documentation":"<p>The ID of the reservation to retrieve.</p>"
+        }
+      }
+    },
+    "GetReservationRequestReservationIdString":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "GetReservationResponse":{
+      "type":"structure",
+      "required":["reservation"],
+      "members":{
+        "reservation":{
+          "shape":"Reservation",
+          "documentation":"<p>The returned reservation object.</p>"
+        }
+      }
+    },
     "GetResourcePolicyRequest":{
       "type":"structure",
       "required":["resourceArn"],
@@ -1947,6 +2158,25 @@
         }
       }
     },
+    "GetTrackRequest":{
+      "type":"structure",
+      "required":["trackName"],
+      "members":{
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>The name of the track of which its version is fetched.</p>"
+        }
+      }
+    },
+    "GetTrackResponse":{
+      "type":"structure",
+      "members":{
+        "track":{
+          "shape":"ServerlessTrack",
+          "documentation":"<p>The version of the specified track.</p>"
+        }
+      }
+    },
     "GetUsageLimitRequest":{
       "type":"structure",
       "required":["usageLimitId"],
@@ -2241,6 +2471,72 @@
         }
       }
     },
+    "ListReservationOfferingsRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListReservationOfferingsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of items to return. (You received this token from a previous call.)</p>"
+        }
+      }
+    },
+    "ListReservationOfferingsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListReservationOfferingsResponse":{
+      "type":"structure",
+      "required":["reservationOfferingsList"],
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use when requesting the next set of items.</p>"
+        },
+        "reservationOfferingsList":{
+          "shape":"ReservationOfferingsList",
+          "documentation":"<p>The returned list of reservation offerings.</p>"
+        }
+      }
+    },
+    "ListReservationsRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListReservationsRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token for the next set of items to return. (You received this token from a previous call.)</p>"
+        }
+      }
+    },
+    "ListReservationsRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListReservationsResponse":{
+      "type":"structure",
+      "required":["reservationsList"],
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The token to use when requesting the next set of items.</p>"
+        },
+        "reservationsList":{
+          "shape":"ReservationsList",
+          "documentation":"<p>The serverless reservations returned by the request.</p>"
+        }
+      }
+    },
     "ListScheduledActionsRequest":{
       "type":"structure",
       "members":{
@@ -2425,6 +2721,38 @@
         }
       }
     },
+    "ListTracksRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListTracksRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of response records to return in each call. If the number of remaining response records exceeds the specified MaxRecords value, a value is returned in a marker field of the response. You can retrieve the next set of records by retrying the command with the returned marker value.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>If your initial <code>ListTracksRequest</code> operation returns a <code>nextToken</code>, you can include the returned <code>nextToken</code> in following <code>ListTracksRequest</code> operations, which returns results in the next page.</p>"
+        }
+      }
+    },
+    "ListTracksRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListTracksResponse":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>When <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page.</p>"
+        },
+        "tracks":{
+          "shape":"TrackList",
+          "documentation":"<p>The returned tracks.</p>"
+        }
+      }
+    },
     "ListUsageLimitsRequest":{
       "type":"structure",
       "members":{
@@ -2676,6 +3004,18 @@
       "type":"list",
       "member":{"shape":"Timestamp"}
     },
+    "OfferingId":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "OfferingType":{
+      "type":"string",
+      "enum":[
+        "ALL_UPFRONT",
+        "NO_UPFRONT"
+      ]
+    },
     "OwnerAccount":{
       "type":"string",
       "max":12,
@@ -2781,6 +3121,88 @@
       "max":1024,
       "min":1
     },
+    "Reservation":{
+      "type":"structure",
+      "members":{
+        "capacity":{
+          "shape":"Capacity",
+          "documentation":"<p>The number of Redshift Processing Units (RPUs) to reserve.</p>"
+        },
+        "endDate":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The end date for the serverless reservation. This date is one year after the start date that you specify.</p>"
+        },
+        "offering":{
+          "shape":"ReservationOffering",
+          "documentation":"<p>The type of offering for the reservation. The offering class determines the payment schedule for the reservation.</p>"
+        },
+        "reservationArn":{
+          "shape":"ReservationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the serverless reservation.</p>"
+        },
+        "reservationId":{
+          "shape":"ReservationId",
+          "documentation":"<p>The identifier that uniquely identifies the serverless reservation.</p>"
+        },
+        "startDate":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The start date for the serverless reservation. This is the date you specified for the reservation to start when you created the reservation.</p>"
+        },
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the reservation. Possible values include the following:</p> <ul> <li> <p> <code>payment-pending</code> </p> </li> <li> <p> <code>active</code> </p> </li> <li> <p> <code>payment-failed</code> </p> </li> <li> <p> <code>retired</code> </p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Represents an Amazon Redshift Serverless reservation, which gives you the option to commit to a specified number of Redshift Processing Units (RPUs) for a year at a discount from Serverless on-demand (OD) rates.</p>"
+    },
+    "ReservationArn":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "ReservationId":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "ReservationOffering":{
+      "type":"structure",
+      "members":{
+        "currencyCode":{
+          "shape":"CurrencyCode",
+          "documentation":"<p>The currency code for the offering.</p>"
+        },
+        "duration":{
+          "shape":"Duration",
+          "documentation":"<p>The duration, in seconds, for which the reservation reserves the RPUs.</p>"
+        },
+        "hourlyCharge":{
+          "shape":"Charge",
+          "documentation":"<p>The rate you are charged for each hour the reservation is active.</p>"
+        },
+        "offeringId":{
+          "shape":"OfferingId",
+          "documentation":"<p>The offering identifier.</p>"
+        },
+        "offeringType":{
+          "shape":"OfferingType",
+          "documentation":"<p>Determines the payment schedule for the reservation.</p>"
+        },
+        "upfrontCharge":{
+          "shape":"Charge",
+          "documentation":"<p>The up-front price you are charged for the reservation.</p>"
+        }
+      },
+      "documentation":"<p>The class of offering for the reservation. The offering class determines the payment schedule for the reservation.</p>"
+    },
+    "ReservationOfferingsList":{
+      "type":"list",
+      "member":{"shape":"ReservationOffering"}
+    },
+    "ReservationsList":{
+      "type":"list",
+      "member":{"shape":"Reservation"}
+    },
     "ResourceNotFoundException":{
       "type":"structure",
       "required":["message"],
@@ -2868,7 +3290,7 @@
         },
         "snapshotArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the snapshot to restore from. Required if restoring from Amazon Redshift Serverless to a provisioned cluster. Must not be specified at the same time as <code>snapshotName</code>.</p> <p>The format of the ARN is arn:aws:redshift:&lt;region&gt;:&lt;account_id&gt;:snapshot:&lt;cluster_identifier&gt;/&lt;snapshot_identifier&gt;.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the snapshot to restore from. Required if restoring from a provisioned cluster to Amazon Redshift Serverless. Must not be specified at the same time as <code>snapshotName</code>.</p> <p>The format of the ARN is arn:aws:redshift:&lt;region&gt;:&lt;account_id&gt;:snapshot:&lt;cluster_identifier&gt;/&lt;snapshot_identifier&gt;.</p>"
         },
         "snapshotName":{
           "shape":"String",
@@ -3106,6 +3528,24 @@
       "type":"list",
       "member":{"shape":"SecurityGroupId"}
     },
+    "ServerlessTrack":{
+      "type":"structure",
+      "members":{
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>The name of the track. Valid values are <code>current</code> and <code>trailing</code>.</p>"
+        },
+        "updateTargets":{
+          "shape":"UpdateTargetsList",
+          "documentation":"<p>An array of <code>UpdateTarget</code> objects to update with the track.</p>"
+        },
+        "workgroupVersion":{
+          "shape":"String",
+          "documentation":"<p>The workgroup version number for the workgroup release.</p>"
+        }
+      },
+      "documentation":"<p>Defines a track that determines which Amazon Redshift version to apply after a new version is released. If the value for <code>ServerlessTrack</code> is <code>current</code>, the workgroup is updated to the most recently certified release. If the value is <code>trailing</code>, the workgroup is updated to the previously certified release.</p>"
+    },
     "ServiceQuotaExceededException":{
       "type":"structure",
       "required":["message"],
@@ -3276,6 +3716,11 @@
         "DISABLED"
       ]
     },
+    "Status":{
+      "type":"string",
+      "max":16,
+      "min":1
+    },
     "String":{"type":"string"},
     "SubnetId":{"type":"string"},
     "SubnetIdList":{
@@ -3453,6 +3898,16 @@
       "documentation":"<p>The request exceeded the number of tags allowed for a resource.</p>",
       "exception":true
     },
+    "TrackList":{
+      "type":"list",
+      "member":{"shape":"ServerlessTrack"}
+    },
+    "TrackName":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"^[a-zA-Z0-9_]+$"
+    },
     "UntagResourceRequest":{
       "type":"structure",
       "required":[
@@ -3684,6 +4139,24 @@
         }
       }
     },
+    "UpdateTarget":{
+      "type":"structure",
+      "members":{
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>The name of the new track.</p>"
+        },
+        "workgroupVersion":{
+          "shape":"String",
+          "documentation":"<p>The workgroup version for the new track.</p>"
+        }
+      },
+      "documentation":"<p>A track that you can switch the current track to.</p>"
+    },
+    "UpdateTargetsList":{
+      "type":"list",
+      "member":{"shape":"UpdateTarget"}
+    },
     "UpdateUsageLimitRequest":{
       "type":"structure",
       "required":["usageLimitId"],
@@ -3755,6 +4228,10 @@
           "shape":"SubnetIdList",
           "documentation":"<p>An array of VPC subnet IDs to associate with the workgroup.</p>"
         },
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>An optional parameter for the name of the track for the workgroup. If you don't provide a track name, the workgroup is assigned to the <code>current</code> track.</p>"
+        },
         "workgroupName":{
           "shape":"WorkgroupName",
           "documentation":"<p>The name of the workgroup to update. You can't update the name of a workgroup once it is created.</p>"
@@ -3947,6 +4424,10 @@
           "shape":"String",
           "documentation":"<p>The patch version of your Amazon Redshift Serverless workgroup. For more information about patch versions, see <a href=\"https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html\">Cluster versions for Amazon Redshift</a>.</p>"
         },
+        "pendingTrackName":{
+          "shape":"TrackName",
+          "documentation":"<p>The name for the track that you want to assign to the workgroup. When the track changes, the workgroup is switched to the latest workgroup release available for the track. At this point, the track name is applied.</p>"
+        },
         "port":{
           "shape":"Integer",
           "documentation":"<p>The custom port to use when connecting to a workgroup. Valid port ranges are 5431-5455 and 8191-8215. The default is 5439.</p>"
@@ -3971,6 +4452,10 @@
           "shape":"SubnetIdList",
           "documentation":"<p>An array of subnet IDs the workgroup is associated with.</p>"
         },
+        "trackName":{
+          "shape":"TrackName",
+          "documentation":"<p>The name of the track for the workgroup.</p>"
+        },
         "workgroupArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) that links to the workgroup.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rekognition/2016-06-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/rekognition/2016-06-27/service-2.json 2.31.35-1/awscli/botocore/data/rekognition/2016-06-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/rekognition/2016-06-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rekognition/2016-06-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -33,7 +33,7 @@
         {"shape":"ConflictException"},
         {"shape":"ServiceQuotaExceededException"}
       ],
-      "documentation":"<p>Associates one or more faces with an existing UserID. Takes an array of <code>FaceIds</code>. Each <code>FaceId</code> that are present in the <code>FaceIds</code> list is associated with the provided UserID. The maximum number of total <code>FaceIds</code> per UserID is 100. </p> <p>The <code>UserMatchThreshold</code> parameter specifies the minimum user match confidence required for the face to be associated with a UserID that has at least one <code>FaceID</code> already associated. This ensures that the <code>FaceIds</code> are associated with the right UserID. The value ranges from 0-100 and default value is 75. </p> <p>If successful, an array of <code>AssociatedFace</code> objects containing the associated <code>FaceIds</code> is returned. If a given face is already associated with the given <code>UserID</code>, it will be ignored and will not be returned in the response. If a given face is already associated to a different <code>UserID</code>, isn't found in the collection, doesn’t meet the <code>UserMatchThreshold</code>, or there are already 100 faces associated with the <code>UserID</code>, it will be returned as part of an array of <code>UnsuccessfulFaceAssociations.</code> </p> <p>The <code>UserStatus</code> reflects the status of an operation which updates a UserID representation with a list of given faces. The <code>UserStatus</code> can be: </p> <ul> <li> <p>ACTIVE - All associations or disassociations of FaceID(s) for a UserID are complete.</p> </li> <li> <p>CREATED - A UserID has been created, but has no FaceID(s) associated with it.</p> </li> <li> <p>UPDATING - A UserID is being updated and there are current associations or disassociations of FaceID(s) taking place.</p> </li> </ul>"
+      "documentation":"<p>Associates one or more faces with an existing UserID. Takes an array of <code>FaceIds</code>. Each <code>FaceId</code> that are present in the <code>FaceIds</code> list is associated with the provided UserID. The number of FaceIds that can be used as input in a single request is limited to 100.</p> <p>Note that the total number of faces that can be associated with a single <code>UserID</code> is also limited to 100. Once a <code>UserID</code> has 100 faces associated with it, no additional faces can be added. If more API calls are made after the limit is reached, a <code>ServiceQuotaExceededException</code> will result.</p> <p>The <code>UserMatchThreshold</code> parameter specifies the minimum user match confidence required for the face to be associated with a UserID that has at least one <code>FaceID</code> already associated. This ensures that the <code>FaceIds</code> are associated with the right UserID. The value ranges from 0-100 and default value is 75. </p> <p>If successful, an array of <code>AssociatedFace</code> objects containing the associated <code>FaceIds</code> is returned. If a given face is already associated with the given <code>UserID</code>, it will be ignored and will not be returned in the response. If a given face is already associated to a different <code>UserID</code>, isn't found in the collection, doesn’t meet the <code>UserMatchThreshold</code>, or there are already 100 faces associated with the <code>UserID</code>, it will be returned as part of an array of <code>UnsuccessfulFaceAssociations.</code> </p> <p>The <code>UserStatus</code> reflects the status of an operation which updates a UserID representation with a list of given faces. The <code>UserStatus</code> can be: </p> <ul> <li> <p>ACTIVE - All associations or disassociations of FaceID(s) for a UserID are complete.</p> </li> <li> <p>CREATED - A UserID has been created, but has no FaceID(s) associated with it.</p> </li> <li> <p>UPDATING - A UserID is being updated and there are current associations or disassociations of FaceID(s) taking place.</p> </li> </ul>"
     },
     "CompareFaces":{
       "name":"CompareFaces",
@@ -479,7 +479,7 @@
         {"shape":"ProvisionedThroughputExceededException"},
         {"shape":"InvalidImageFormatException"}
       ],
-      "documentation":"<note> <p>This operation applies only to Amazon Rekognition Custom Labels.</p> </note> <p>Detects custom labels in a supplied image by using an Amazon Rekognition Custom Labels model. </p> <p>You specify which version of a model version to use by using the <code>ProjectVersionArn</code> input parameter. </p> <p>You pass the input image as base64-encoded image bytes or as a reference to an image in an Amazon S3 bucket. If you use the AWS CLI to call Amazon Rekognition operations, passing image bytes is not supported. The image must be either a PNG or JPEG formatted file. </p> <p> For each object that the model version detects on an image, the API returns a (<code>CustomLabel</code>) object in an array (<code>CustomLabels</code>). Each <code>CustomLabel</code> object provides the label name (<code>Name</code>), the level of confidence that the image contains the object (<code>Confidence</code>), and object location information, if it exists, for the label on the image (<code>Geometry</code>). Note that for the <code>DetectCustomLabelsLabels</code> operation, <code>Polygons</code> are not returned in the <code>Geometry</code> section of the response.</p> <p>To filter labels that are returned, specify a value for <code>MinConfidence</code>. <code>DetectCustomLabelsLabels</code> only returns labels with a confidence that's higher than the specified value. The value of <code>MinConfidence</code> maps to the assumed threshold values created during training. For more information, see <i>Assumed threshold</i> in the Amazon Rekognition Custom Labels Developer Guide. Amazon Rekognition Custom Labels metrics expresses an assumed threshold as a floating point value between 0-1. The range of <code>MinConfidence</code> normalizes the threshold value to a percentage value (0-100). Confidence responses from <code>DetectCustomLabels</code> are also returned as a percentage. You can use <code>MinConfidence</code> to change the precision and recall or your model. For more information, see <i>Analyzing an image</i> in the Amazon Rekognition Custom Labels Developer Guide. </p> <p>If you don't specify a value for <code>MinConfidence</code>, <code>DetectCustomLabels</code> returns labels based on the assumed threshold of each label.</p> <p>This is a stateless API operation. That is, the operation does not persist any data.</p> <p>This operation requires permissions to perform the <code>rekognition:DetectCustomLabels</code> action. </p> <p>For more information, see <i>Analyzing an image</i> in the Amazon Rekognition Custom Labels Developer Guide. </p>"
+      "documentation":"<note> <p>This operation applies only to Amazon Rekognition Custom Labels.</p> </note> <p>Detects custom labels in a supplied image by using an Amazon Rekognition Custom Labels model. </p> <p>You specify which version of a model version to use by using the <code>ProjectVersionArn</code> input parameter. </p> <p>You pass the input image as base64-encoded image bytes or as a reference to an image in an Amazon S3 bucket. If you use the AWS CLI to call Amazon Rekognition operations, passing image bytes is not supported. The image must be either a PNG or JPEG formatted file. </p> <p> For each object that the model version detects on an image, the API returns a (<code>CustomLabel</code>) object in an array (<code>CustomLabels</code>). Each <code>CustomLabel</code> object provides the label name (<code>Name</code>), the level of confidence that the image contains the object (<code>Confidence</code>), and object location information, if it exists, for the label on the image (<code>Geometry</code>). </p> <p>To filter labels that are returned, specify a value for <code>MinConfidence</code>. <code>DetectCustomLabelsLabels</code> only returns labels with a confidence that's higher than the specified value. The value of <code>MinConfidence</code> maps to the assumed threshold values created during training. For more information, see <i>Assumed threshold</i> in the Amazon Rekognition Custom Labels Developer Guide. Amazon Rekognition Custom Labels metrics expresses an assumed threshold as a floating point value between 0-1. The range of <code>MinConfidence</code> normalizes the threshold value to a percentage value (0-100). Confidence responses from <code>DetectCustomLabels</code> are also returned as a percentage. You can use <code>MinConfidence</code> to change the precision and recall or your model. For more information, see <i>Analyzing an image</i> in the Amazon Rekognition Custom Labels Developer Guide. </p> <p>If you don't specify a value for <code>MinConfidence</code>, <code>DetectCustomLabels</code> returns labels based on the assumed threshold of each label.</p> <p>This is a stateless API operation. That is, the operation does not persist any data.</p> <p>This operation requires permissions to perform the <code>rekognition:DetectCustomLabels</code> action. </p> <p>For more information, see <i>Analyzing an image</i> in the Amazon Rekognition Custom Labels Developer Guide. </p>"
     },
     "DetectFaces":{
       "name":"DetectFaces",
@@ -789,7 +789,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Gets the path tracking results of a Amazon Rekognition Video analysis started by <a>StartPersonTracking</a>.</p> <p>The person path tracking operation is started by a call to <code>StartPersonTracking</code> which returns a job identifier (<code>JobId</code>). When the operation finishes, Amazon Rekognition Video publishes a completion status to the Amazon Simple Notification Service topic registered in the initial call to <code>StartPersonTracking</code>.</p> <p>To get the results of the person path tracking operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetPersonTracking</a> and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartPersonTracking</code>.</p> <p> <code>GetPersonTracking</code> returns an array, <code>Persons</code>, of tracked persons and the time(s) their paths were tracked in the video. </p> <note> <p> <code>GetPersonTracking</code> only returns the default facial attributes (<code>BoundingBox</code>, <code>Confidence</code>, <code>Landmarks</code>, <code>Pose</code>, and <code>Quality</code>). The other facial attributes listed in the <code>Face</code> object of the following response syntax are not returned. </p> <p>For more information, see FaceDetail in the Amazon Rekognition Developer Guide.</p> </note> <p>By default, the array is sorted by the time(s) a person's path is tracked in the video. You can sort by tracked persons by specifying <code>INDEX</code> for the <code>SortBy</code> input parameter.</p> <p>Use the <code>MaxResults</code> parameter to limit the number of items returned. If there are more results than specified in <code>MaxResults</code>, the value of <code>NextToken</code> in the operation response contains a pagination token for getting the next set of results. To get the next page of results, call <code>GetPersonTracking</code> and populate the <code>NextToken</code> request parameter with the token value returned from the previous call to <code>GetPersonTracking</code>.</p>"
+      "documentation":"<note> <p> <i>End of support notice:</i> On October 31, 2025, AWS will discontinue support for Amazon Rekognition People Pathing. After October 31, 2025, you will no longer be able to use the Rekognition People Pathing capability. For more information, visit this <a href=\"https://aws.amazon.com/blogs/machine-learning/transitioning-from-amazon-rekognition-people-pathing-exploring-other-alternatives/\">blog post</a>.</p> </note> <p>Gets the path tracking results of a Amazon Rekognition Video analysis started by <a>StartPersonTracking</a>.</p> <p>The person path tracking operation is started by a call to <code>StartPersonTracking</code> which returns a job identifier (<code>JobId</code>). When the operation finishes, Amazon Rekognition Video publishes a completion status to the Amazon Simple Notification Service topic registered in the initial call to <code>StartPersonTracking</code>.</p> <p>To get the results of the person path tracking operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetPersonTracking</a> and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartPersonTracking</code>.</p> <p> <code>GetPersonTracking</code> returns an array, <code>Persons</code>, of tracked persons and the time(s) their paths were tracked in the video. </p> <note> <p> <code>GetPersonTracking</code> only returns the default facial attributes (<code>BoundingBox</code>, <code>Confidence</code>, <code>Landmarks</code>, <code>Pose</code>, and <code>Quality</code>). The other facial attributes listed in the <code>Face</code> object of the following response syntax are not returned. </p> <p>For more information, see FaceDetail in the Amazon Rekognition Developer Guide.</p> </note> <p>By default, the array is sorted by the time(s) a person's path is tracked in the video. You can sort by tracked persons by specifying <code>INDEX</code> for the <code>SortBy</code> input parameter.</p> <p>Use the <code>MaxResults</code> parameter to limit the number of items returned. If there are more results than specified in <code>MaxResults</code>, the value of <code>NextToken</code> in the operation response contains a pagination token for getting the next set of results. To get the next page of results, call <code>GetPersonTracking</code> and populate the <code>NextToken</code> request parameter with the token value returned from the previous call to <code>GetPersonTracking</code>.</p>"
     },
     "GetSegmentDetection":{
       "name":"GetSegmentDetection",
@@ -1299,7 +1299,7 @@
         {"shape":"LimitExceededException"},
         {"shape":"ThrottlingException"}
       ],
-      "documentation":"<p>Starts the asynchronous tracking of a person's path in a stored video.</p> <p>Amazon Rekognition Video can track the path of people in a video stored in an Amazon S3 bucket. Use <a>Video</a> to specify the bucket name and the filename of the video. <code>StartPersonTracking</code> returns a job identifier (<code>JobId</code>) which you use to get the results of the operation. When label detection is finished, Amazon Rekognition publishes a completion status to the Amazon Simple Notification Service topic that you specify in <code>NotificationChannel</code>. </p> <p>To get the results of the person detection operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetPersonTracking</a> and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartPersonTracking</code>.</p>",
+      "documentation":"<note> <p> <i>End of support notice:</i> On October 31, 2025, AWS will discontinue support for Amazon Rekognition People Pathing. After October 31, 2025, you will no longer be able to use the Rekognition People Pathing capability. For more information, visit this <a href=\"https://aws.amazon.com/blogs/machine-learning/transitioning-from-amazon-rekognition-people-pathing-exploring-other-alternatives/\">blog post</a>.</p> </note> <p>Starts the asynchronous tracking of a person's path in a stored video.</p> <p>Amazon Rekognition Video can track the path of people in a video stored in an Amazon S3 bucket. Use <a>Video</a> to specify the bucket name and the filename of the video. <code>StartPersonTracking</code> returns a job identifier (<code>JobId</code>) which you use to get the results of the operation. When label detection is finished, Amazon Rekognition publishes a completion status to the Amazon Simple Notification Service topic that you specify in <code>NotificationChannel</code>. </p> <p>To get the results of the person detection operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetPersonTracking</a> and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartPersonTracking</code>.</p>",
       "idempotent":true
     },
     "StartProjectVersion":{
@@ -1503,8 +1503,7 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You are not authorized to perform the action.</p>",
       "exception":true
     },
@@ -1831,6 +1830,50 @@
       "type":"list",
       "member":{"shape":"CelebrityRecognition"}
     },
+    "Challenge":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Version"
+      ],
+      "members":{
+        "Type":{
+          "shape":"ChallengeType",
+          "documentation":"<p>The type of the challenge being used for the Face Liveness session.</p>"
+        },
+        "Version":{
+          "shape":"Version",
+          "documentation":"<p>The version of the challenge being used for the Face Liveness session.</p>"
+        }
+      },
+      "documentation":"<p>Describes the type and version of the challenge being used for the Face Liveness session.</p>"
+    },
+    "ChallengePreference":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"ChallengeType",
+          "documentation":"<p>The types of challenges that have been selected for the Face Liveness session.</p>"
+        },
+        "Versions":{
+          "shape":"Versions",
+          "documentation":"<p>The version of the challenges that have been selected for the Face Liveness session.</p>"
+        }
+      },
+      "documentation":"<p>An ordered list of preferred challenge type and versions.</p>"
+    },
+    "ChallengePreferences":{
+      "type":"list",
+      "member":{"shape":"ChallengePreference"}
+    },
+    "ChallengeType":{
+      "type":"string",
+      "enum":[
+        "FaceMovementAndLightChallenge",
+        "FaceMovementChallenge"
+      ]
+    },
     "ClientRequestToken":{
       "type":"string",
       "max":64,
@@ -1973,8 +2016,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> A User with the same Id already exists within the collection, or the update or deletion of the User caused an inconsistent state. ** </p>",
       "exception":true
     },
@@ -2249,6 +2291,10 @@
         "AuditImagesLimit":{
           "shape":"AuditImagesLimit",
           "documentation":"<p>Number of audit images to be returned back. Takes an integer between 0-4. Any integer less than 0 will return 0, any integer above 4 will return 4 images in the response. By default, it is set to 0. The limit is best effort and is based on the actual duration of the selfie-video.</p>"
+        },
+        "ChallengePreferences":{
+          "shape":"ChallengePreferences",
+          "documentation":"<p>Indicates preferred challenge types and versions for the Face Liveness session to be created.</p>"
         }
       },
       "documentation":"<p>A session settings object. It contains settings for the operation to be performed. It accepts arguments for OutputConfig and AuditImagesLimit.</p>"
@@ -2431,8 +2477,7 @@
     },
     "CreateUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomLabel":{
       "type":"structure",
@@ -2721,8 +2766,7 @@
     },
     "DeleteDatasetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFacesRequest":{
       "type":"structure",
@@ -2777,8 +2821,7 @@
     },
     "DeleteProjectPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProjectRequest":{
       "type":"structure",
@@ -2830,8 +2873,7 @@
     },
     "DeleteStreamProcessorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserRequest":{
       "type":"structure",
@@ -2857,8 +2899,7 @@
     },
     "DeleteUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeCollectionRequest":{
       "type":"structure",
@@ -3483,8 +3524,7 @@
     },
     "DistributeDatasetEntriesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DistributeDatasetMetadataList":{
       "type":"list",
@@ -3542,7 +3582,7 @@
           "documentation":"<p>Level of confidence in the determination.</p>"
         }
       },
-      "documentation":"<p>The emotions that appear to be expressed on the face, and the confidence level in the determination. The API is only making a determination of the physical appearance of a person's face. It is not a determination of the person’s internal emotional state and should not be used in such a way. For example, a person pretending to have a sad face might not be sad emotionally.</p>"
+      "documentation":"<p>The API returns a prediction of an emotion based on a person's facial expressions, along with the confidence level for the predicted emotion. It is not a determination of the person’s internal emotional state and should not be used in such a way. For example, a person pretending to have a sad face might not be sad emotionally. The API is not intended to be used, and you may not use it, in a manner that violates the EU Artificial Intelligence Act or any other applicable law.</p>"
     },
     "EmotionName":{
       "type":"string",
@@ -4211,6 +4251,10 @@
         "AuditImages":{
           "shape":"AuditImages",
           "documentation":"<p>A set of images from the Face Liveness video that can be used for audit purposes. It includes a bounding box of the face and the Base64-encoded bytes that return an image. If the CreateFaceLivenessSession request included an OutputConfig argument, the image will be uploaded to an S3Object specified in the output configuration. If no Amazon S3 bucket is defined, raw bytes are sent instead.</p>"
+        },
+        "Challenge":{
+          "shape":"Challenge",
+          "documentation":"<p>Contains information regarding the challenge type used for the Face Liveness check.</p>"
         }
       }
     },
@@ -4697,8 +4741,7 @@
     },
     "IdempotentParameterMismatchException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A <code>ClientRequestToken</code> input parameter was reused with an operation, but at least one of the other input parameters is different from the previous call to the operation.</p>",
       "exception":true
     },
@@ -4741,8 +4784,7 @@
     },
     "ImageTooLargeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The input image size exceeds the allowed limit. If you are calling DetectProtectiveEquipment, the image size or resolution exceeds the allowed limit. For more information, see Guidelines and quotas in Amazon Rekognition in the Amazon Rekognition Developer Guide. </p>",
       "exception":true
     },
@@ -4832,51 +4874,44 @@
     },
     "InternalServerError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Rekognition experienced a service issue. Try your call again.</p>",
       "exception":true,
       "fault":true
     },
     "InvalidImageFormatException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The provided image format is not supported. </p>",
       "exception":true
     },
     "InvalidManifestException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that a provided manifest file is empty or larger than the allowed limit.</p>",
       "exception":true
     },
     "InvalidPaginationTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Pagination token in the request is not valid.</p>",
       "exception":true
     },
     "InvalidParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Input parameter violated a constraint. Validate your parameter before calling the API operation again.</p>",
       "exception":true
     },
     "InvalidPolicyRevisionIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The supplied revision id for the project policy is invalid.</p>",
       "exception":true
     },
     "InvalidS3ObjectException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Rekognition is unable to access the S3 object specified in the request.</p>",
       "exception":true
     },
@@ -5149,8 +5184,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon Rekognition service limit was exceeded. For example, if you start too many jobs concurrently, subsequent calls to start operations (ex: <code>StartLabelDetection</code>) will raise a <code>LimitExceededException</code> exception (HTTP status code: 400) until the number of concurrently running jobs is below the Amazon Rekognition service limit. </p>",
       "exception":true
     },
@@ -5503,8 +5537,7 @@
     },
     "MalformedPolicyDocumentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The format of the project policy document that you supplied to <code>PutProjectPolicy</code> is incorrect. </p>",
       "exception":true
     },
@@ -6319,8 +6352,7 @@
     },
     "ProvisionedThroughputExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of requests exceeded your throughput limit. If you want to increase this limit, contact Amazon Rekognition.</p>",
       "exception":true
     },
@@ -6444,8 +6476,7 @@
     },
     "ResourceAlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A resource with the specified ID already exists.</p>",
       "exception":true
     },
@@ -6456,22 +6487,19 @@
     },
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource is already being used.</p>",
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource specified in the request cannot be found.</p>",
       "exception":true
     },
     "ResourceNotReadyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested resource isn't ready. For example, this exception occurs when you call <code>DetectCustomLabels</code> with a model version that isn't deployed. </p>",
       "exception":true
     },
@@ -6843,15 +6871,13 @@
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/> <p>The size of the collection exceeds the allowed limit. For more information, see Guidelines and quotas in Amazon Rekognition in the Amazon Rekognition Developer Guide. </p>",
       "exception":true
     },
     "SessionNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Occurs when a given sessionId is not found.</p>",
       "exception":true
     },
@@ -7355,8 +7381,7 @@
     },
     "StopStreamProcessorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StreamProcessingStartSelector":{
       "type":"structure",
@@ -7555,8 +7580,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -7683,8 +7707,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Rekognition is temporarily unable to process the request. Try your call again.</p>",
       "exception":true,
       "fault":true
@@ -7906,8 +7929,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatasetEntriesRequest":{
       "type":"structure",
@@ -7928,8 +7950,7 @@
     },
     "UpdateDatasetEntriesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStreamProcessorRequest":{
       "type":"structure",
@@ -7959,8 +7980,7 @@
     },
     "UpdateStreamProcessorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Url":{"type":"string"},
     "Urls":{
@@ -8038,6 +8058,12 @@
       },
       "documentation":"<p>Contains the Amazon S3 bucket location of the validation data for a model training job. </p> <p>The validation data includes error information for individual JSON Lines in the dataset. For more information, see <i>Debugging a Failed Model Training</i> in the Amazon Rekognition Custom Labels Developer Guide. </p> <p>You get the <code>ValidationData</code> object for the training dataset (<a>TrainingDataResult</a>) and the test dataset (<a>TestingDataResult</a>) by calling <a>DescribeProjectVersions</a>. </p> <p>The assets array contains a single <a>Asset</a> object. The <a>GroundTruthManifest</a> field of the Asset object contains the S3 bucket location of the validation data. </p>"
     },
+    "Version":{
+      "type":"string",
+      "max":11,
+      "min":5,
+      "pattern":"^(0|[1-9]\\d{0,2})\\.(0|[1-9]\\d{0,2})\\.(0|[1-9]\\d{0,2})$"
+    },
     "VersionDescription":{
       "type":"string",
       "max":255,
@@ -8056,6 +8082,20 @@
       "max":10,
       "min":1
     },
+    "Versions":{
+      "type":"structure",
+      "members":{
+        "Minimum":{
+          "shape":"Version",
+          "documentation":"<p>The desired minimum version for the challenge.</p>"
+        },
+        "Maximum":{
+          "shape":"Version",
+          "documentation":"<p>The desired maximum version for the challenge.</p>"
+        }
+      },
+      "documentation":"<p>Object specifying the acceptable range of challenge versions.</p>"
+    },
     "Video":{
       "type":"structure",
       "members":{
@@ -8121,8 +8161,7 @@
     },
     "VideoTooLargeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The file size or duration of the supplied media is too large. The maximum file size is 10GB. The maximum duration is 6 hours. </p>",
       "exception":true
     }
diff -pruN 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/paginators-1.json 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "spaces"
+    },
+    "ListChannels": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "channels"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/service-2.json 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,18 +2,36 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-05-13",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"repostspace",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS re:Post Private",
     "serviceId":"repostspace",
     "signatureVersion":"v4",
     "signingName":"repostspace",
-    "uid":"repostspace-2022-05-13",
-    "auth":["aws.auth#sigv4"]
+    "uid":"repostspace-2022-05-13"
   },
   "operations":{
+    "BatchAddChannelRoleToAccessors":{
+      "name":"BatchAddChannelRoleToAccessors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/spaces/{spaceId}/channels/{channelId}/roles",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchAddChannelRoleToAccessorsInput"},
+      "output":{"shape":"BatchAddChannelRoleToAccessorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Add role to multiple users or groups in a private re:Post channel.</p>",
+      "idempotent":true
+    },
     "BatchAddRole":{
       "name":"BatchAddRole",
       "http":{
@@ -24,13 +42,32 @@
       "input":{"shape":"BatchAddRoleInput"},
       "output":{"shape":"BatchAddRoleOutput"},
       "errors":[
+        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Add a role to multiple users or groups in a private re:Post.</p>",
+      "idempotent":true
+    },
+    "BatchRemoveChannelRoleFromAccessors":{
+      "name":"BatchRemoveChannelRoleFromAccessors",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/spaces/{spaceId}/channels/{channelId}/roles",
+        "responseCode":200
+      },
+      "input":{"shape":"BatchRemoveChannelRoleFromAccessorsInput"},
+      "output":{"shape":"BatchRemoveChannelRoleFromAccessorsOutput"},
+      "errors":[
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Add role to multiple users or groups in a private re:Post.</p>",
+      "documentation":"<p>Remove a role from multiple users or groups in a private re:Post channel.</p>",
       "idempotent":true
     },
     "BatchRemoveRole":{
@@ -43,13 +80,34 @@
       "input":{"shape":"BatchRemoveRoleInput"},
       "output":{"shape":"BatchRemoveRoleOutput"},
       "errors":[
+        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Remove a role from multiple users or groups in a private re:Post.</p>",
+      "idempotent":true
+    },
+    "CreateChannel":{
+      "name":"CreateChannel",
+      "http":{
+        "method":"POST",
+        "requestUri":"/spaces/{spaceId}/channels",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateChannelInput"},
+      "output":{"shape":"CreateChannelOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Remove role from multiple users or groups in a private re:Post.</p>",
+      "documentation":"<p>Creates a channel in an AWS re:Post Private private re:Post.</p>",
       "idempotent":true
     },
     "CreateSpace":{
@@ -63,9 +121,9 @@
       "output":{"shape":"CreateSpaceOutput"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -82,8 +140,8 @@
       },
       "input":{"shape":"DeleteSpaceInput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -100,8 +158,8 @@
       },
       "input":{"shape":"DeregisterAdminInput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -109,6 +167,24 @@
       "documentation":"<p>Removes the user or group from the list of administrators of the private re:Post.</p>",
       "idempotent":true
     },
+    "GetChannel":{
+      "name":"GetChannel",
+      "http":{
+        "method":"GET",
+        "requestUri":"/spaces/{spaceId}/channels/{channelId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetChannelInput"},
+      "output":{"shape":"GetChannelOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Displays information about a channel in a private re:Post.</p>"
+    },
     "GetSpace":{
       "name":"GetSpace",
       "http":{
@@ -119,14 +195,31 @@
       "input":{"shape":"GetSpaceInput"},
       "output":{"shape":"GetSpaceOutput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Displays information about the AWS re:Post Private private re:Post.</p>"
     },
+    "ListChannels":{
+      "name":"ListChannels",
+      "http":{
+        "method":"GET",
+        "requestUri":"/spaces/{spaceId}/channels",
+        "responseCode":200
+      },
+      "input":{"shape":"ListChannelsInput"},
+      "output":{"shape":"ListChannelsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns the list of channel within a private re:Post with some information about each channel.</p>"
+    },
     "ListSpaces":{
       "name":"ListSpaces",
       "http":{
@@ -137,8 +230,8 @@
       "input":{"shape":"ListSpacesInput"},
       "output":{"shape":"ListSpacesOutput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
@@ -154,8 +247,8 @@
       "input":{"shape":"ListTagsForResourceRequest"},
       "output":{"shape":"ListTagsForResourceResponse"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -171,8 +264,8 @@
       },
       "input":{"shape":"RegisterAdminInput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -189,10 +282,10 @@
       },
       "input":{"shape":"SendInvitesInput"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
-        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Sends an invitation email to selected users and groups.</p>",
@@ -208,8 +301,8 @@
       "input":{"shape":"TagResourceRequest"},
       "output":{"shape":"TagResourceResponse"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -227,8 +320,8 @@
       "input":{"shape":"UntagResourceRequest"},
       "output":{"shape":"UntagResourceResponse"},
       "errors":[
-        {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -236,6 +329,26 @@
       "documentation":"<p>Removes the association of the tag with the AWS re:Post Private resource.</p>",
       "idempotent":true
     },
+    "UpdateChannel":{
+      "name":"UpdateChannel",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/spaces/{spaceId}/channels/{channelId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateChannelInput"},
+      "output":{"shape":"UpdateChannelOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Modifies an existing channel.</p>",
+      "idempotent":true
+    },
     "UpdateSpace":{
       "name":"UpdateSpace",
       "http":{
@@ -245,9 +358,9 @@
       },
       "input":{"shape":"UpdateSpaceInput"},
       "errors":[
+        {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ConflictException"},
-        {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -278,32 +391,86 @@
       "min":0
     },
     "AdminId":{"type":"string"},
+    "AllowedDomainsList":{
+      "type":"list",
+      "member":{"shape":"EmailDomain"},
+      "max":10,
+      "min":1
+    },
     "Arn":{
       "type":"string",
       "max":2048,
       "min":20
     },
-    "BatchAddRoleInput":{
+    "BatchAddChannelRoleToAccessorsInput":{
       "type":"structure",
       "required":[
+        "spaceId",
+        "channelId",
         "accessorIds",
-        "role",
-        "spaceId"
+        "channelRole"
       ],
       "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
+        },
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>",
+          "location":"uri",
+          "locationName":"channelId"
+        },
         "accessorIds":{
           "shape":"AccessorIdList",
-          "documentation":"<p>The user or group accessor identifiers to add the role to.</p>"
+          "documentation":"<p>The user or group identifiers to add the role to.</p>"
         },
-        "role":{
-          "shape":"Role",
-          "documentation":"<p>The role to add to the users or groups.</p>"
+        "channelRole":{
+          "shape":"ChannelRole",
+          "documentation":"<p>The channel role to add to the users or groups.</p>"
+        }
+      }
+    },
+    "BatchAddChannelRoleToAccessorsOutput":{
+      "type":"structure",
+      "required":[
+        "addedAccessorIds",
+        "errors"
+      ],
+      "members":{
+        "addedAccessorIds":{
+          "shape":"AccessorIdList",
+          "documentation":"<p>An array of successfully updated identifiers.</p>"
         },
+        "errors":{
+          "shape":"BatchErrorList",
+          "documentation":"<p>An array of errors that occurred when roles were added.</p>"
+        }
+      }
+    },
+    "BatchAddRoleInput":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "accessorIds",
+        "role"
+      ],
+      "members":{
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The unique ID of the private re:Post.</p>",
           "location":"uri",
           "locationName":"spaceId"
+        },
+        "accessorIds":{
+          "shape":"AccessorIdList",
+          "documentation":"<p>The user or group accessor identifiers to add the role to.</p>"
+        },
+        "role":{
+          "shape":"Role",
+          "documentation":"<p>The role to add to the users or groups.</p>"
         }
       }
     },
@@ -351,47 +518,196 @@
       "type":"list",
       "member":{"shape":"BatchError"}
     },
-    "BatchRemoveRoleInput":{
+    "BatchRemoveChannelRoleFromAccessorsInput":{
       "type":"structure",
       "required":[
+        "spaceId",
+        "channelId",
         "accessorIds",
-        "role",
-        "spaceId"
+        "channelRole"
       ],
       "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
+        },
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>",
+          "location":"uri",
+          "locationName":"channelId"
+        },
         "accessorIds":{
           "shape":"AccessorIdList",
-          "documentation":"<p>The user or group accessor identifiers to remove the role from.</p>"
+          "documentation":"<p>The users or groups identifiers to remove the role from.</p>"
         },
-        "role":{
-          "shape":"Role",
-          "documentation":"<p>The role to remove from the users or groups.</p>"
+        "channelRole":{
+          "shape":"ChannelRole",
+          "documentation":"<p>The channel role to remove from the users or groups.</p>"
+        }
+      }
+    },
+    "BatchRemoveChannelRoleFromAccessorsOutput":{
+      "type":"structure",
+      "required":[
+        "removedAccessorIds",
+        "errors"
+      ],
+      "members":{
+        "removedAccessorIds":{
+          "shape":"AccessorIdList",
+          "documentation":"<p>An array of successfully updated identifiers.</p>"
         },
+        "errors":{
+          "shape":"BatchErrorList",
+          "documentation":"<p>An array of errors that occurred when roles were removed.</p>"
+        }
+      }
+    },
+    "BatchRemoveRoleInput":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "accessorIds",
+        "role"
+      ],
+      "members":{
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The unique ID of the private re:Post.</p>",
           "location":"uri",
           "locationName":"spaceId"
+        },
+        "accessorIds":{
+          "shape":"AccessorIdList",
+          "documentation":"<p>The user or group accessor identifiers to remove the role from.</p>"
+        },
+        "role":{
+          "shape":"Role",
+          "documentation":"<p>The role to remove from the users or groups.</p>"
         }
       }
     },
     "BatchRemoveRoleOutput":{
       "type":"structure",
       "required":[
-        "errors",
-        "removedAccessorIds"
+        "removedAccessorIds",
+        "errors"
       ],
       "members":{
-        "errors":{
-          "shape":"BatchErrorList",
-          "documentation":"<p>An array of errors that occurred when roles were removed.</p>"
-        },
         "removedAccessorIds":{
           "shape":"AccessorIdList",
           "documentation":"<p>An array of successfully updated accessor identifiers.</p>"
+        },
+        "errors":{
+          "shape":"BatchErrorList",
+          "documentation":"<p>An array of errors that occurred when roles were removed.</p>"
         }
       }
     },
+    "ChannelData":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "channelId",
+        "channelName",
+        "createDateTime",
+        "channelStatus",
+        "userCount",
+        "groupCount"
+      ],
+      "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>"
+        },
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>"
+        },
+        "channelName":{
+          "shape":"ChannelName",
+          "documentation":"<p>The name for the channel. This must be unique per private re:Post.</p>"
+        },
+        "channelDescription":{
+          "shape":"ChannelDescription",
+          "documentation":"<p>A description for the channel. This is used only to help you identify this channel.</p>"
+        },
+        "createDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the channel was created.</p>"
+        },
+        "deleteDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the channel was deleted.</p>"
+        },
+        "channelStatus":{
+          "shape":"ChannelStatus",
+          "documentation":"<p>The status pf the channel.</p>"
+        },
+        "userCount":{
+          "shape":"UserCount",
+          "documentation":"<p>The number of users that are part of the channel.</p>"
+        },
+        "groupCount":{
+          "shape":"GroupCount",
+          "documentation":"<p>The number of groups that are part of the channel.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains some information about a channel in a private re:Post.</p>"
+    },
+    "ChannelDescription":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "sensitive":true
+    },
+    "ChannelId":{
+      "type":"string",
+      "max":24,
+      "min":24
+    },
+    "ChannelName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "sensitive":true
+    },
+    "ChannelRole":{
+      "type":"string",
+      "enum":[
+        "ASKER",
+        "EXPERT",
+        "MODERATOR",
+        "SUPPORTREQUESTOR"
+      ]
+    },
+    "ChannelRoleList":{
+      "type":"list",
+      "member":{"shape":"ChannelRole"}
+    },
+    "ChannelRoles":{
+      "type":"map",
+      "key":{"shape":"AccessorId"},
+      "value":{"shape":"ChannelRoleList"}
+    },
+    "ChannelStatus":{
+      "type":"string",
+      "enum":[
+        "CREATED",
+        "CREATING",
+        "CREATE_FAILED",
+        "DELETED",
+        "DELETING",
+        "DELETE_FAILED"
+      ]
+    },
+    "ChannelsList":{
+      "type":"list",
+      "member":{"shape":"ChannelData"}
+    },
     "ClientId":{"type":"string"},
     "ConfigurationStatus":{
       "type":"string",
@@ -429,6 +745,39 @@
       "type":"long",
       "box":true
     },
+    "CreateChannelInput":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "channelName"
+      ],
+      "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
+        },
+        "channelName":{
+          "shape":"ChannelName",
+          "documentation":"<p>The name for the channel. This must be unique per private re:Post.</p>"
+        },
+        "channelDescription":{
+          "shape":"ChannelDescription",
+          "documentation":"<p>A description for the channel. This is used only to help you identify this channel.</p>"
+        }
+      }
+    },
+    "CreateChannelOutput":{
+      "type":"structure",
+      "required":["channelId"],
+      "members":{
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>"
+        }
+      }
+    },
     "CreateSpaceInput":{
       "type":"structure",
       "required":[
@@ -437,33 +786,37 @@
         "tier"
       ],
       "members":{
-        "description":{
-          "shape":"SpaceDescription",
-          "documentation":"<p>A description for the private re:Post. This is used only to help you identify this private re:Post.</p>"
-        },
         "name":{
           "shape":"SpaceName",
           "documentation":"<p>The name for the private re:Post. This must be unique in your account.</p>"
         },
-        "roleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
-        },
         "subdomain":{
           "shape":"SpaceSubdomain",
           "documentation":"<p>The subdomain that you use to access your AWS re:Post Private private re:Post. All custom subdomains must be approved by AWS before use. In addition to your custom subdomain, all private re:Posts are issued an AWS generated subdomain for immediate use.</p>"
         },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The list of tags associated with the private re:Post.</p>"
-        },
         "tier":{
           "shape":"TierLevel",
           "documentation":"<p>The pricing tier for the private re:Post.</p>"
         },
+        "description":{
+          "shape":"SpaceDescription",
+          "documentation":"<p>A description for the private re:Post. This is used only to help you identify this private re:Post.</p>"
+        },
         "userKMSKey":{
           "shape":"KMSKey",
           "documentation":"<p>The AWS KMS key ARN that’s used for the AWS KMS encryption. If you don't provide a key, your data is encrypted by default with a key that AWS owns and manages for you.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The list of tags associated with the private re:Post.</p>"
+        },
+        "roleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
+        },
+        "supportedEmailDomains":{
+          "shape":"SupportedEmailDomainsParameters",
+          "documentation":"<p/>"
         }
       }
     },
@@ -492,29 +845,115 @@
     "DeregisterAdminInput":{
       "type":"structure",
       "required":[
-        "adminId",
-        "spaceId"
+        "spaceId",
+        "adminId"
       ],
       "members":{
-        "adminId":{
-          "shape":"AdminId",
-          "documentation":"<p>The ID of the admin to remove.</p>",
-          "location":"uri",
-          "locationName":"adminId"
-        },
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The ID of the private re:Post to remove the admin from.</p>",
           "location":"uri",
           "locationName":"spaceId"
+        },
+        "adminId":{
+          "shape":"AdminId",
+          "documentation":"<p>The ID of the admin to remove.</p>",
+          "location":"uri",
+          "locationName":"adminId"
         }
       }
     },
+    "EmailDomain":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "sensitive":true
+    },
     "ErrorCode":{
       "type":"integer",
       "box":true
     },
     "ErrorMessage":{"type":"string"},
+    "FeatureEnableParameter":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "FeatureEnableStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED",
+        "NOT_ALLOWED"
+      ]
+    },
+    "GetChannelInput":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "channelId"
+      ],
+      "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
+        },
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>",
+          "location":"uri",
+          "locationName":"channelId"
+        }
+      }
+    },
+    "GetChannelOutput":{
+      "type":"structure",
+      "required":[
+        "spaceId",
+        "channelId",
+        "channelName",
+        "createDateTime",
+        "channelStatus"
+      ],
+      "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>"
+        },
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>"
+        },
+        "channelName":{
+          "shape":"ChannelName",
+          "documentation":"<p>The name for the channel. This must be unique per private re:Post.</p>"
+        },
+        "channelDescription":{
+          "shape":"ChannelDescription",
+          "documentation":"<p>A description for the channel. This is used only to help you identify this channel.</p>"
+        },
+        "createDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the channel was created.</p>"
+        },
+        "deleteDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the channel was deleted.</p>"
+        },
+        "channelRoles":{
+          "shape":"ChannelRoles",
+          "documentation":"<p>The channel roles associated to the users and groups of the channel.</p>"
+        },
+        "channelStatus":{
+          "shape":"ChannelStatus",
+          "documentation":"<p>The status pf the channel.</p>"
+        }
+      }
+    },
     "GetSpaceInput":{
       "type":"structure",
       "required":["spaceId"],
@@ -530,107 +969,119 @@
     "GetSpaceOutput":{
       "type":"structure",
       "required":[
+        "spaceId",
         "arn",
-        "clientId",
-        "configurationStatus",
-        "createDateTime",
         "name",
-        "randomDomain",
-        "spaceId",
         "status",
-        "storageLimit",
-        "tier",
+        "configurationStatus",
+        "clientId",
+        "vanityDomainStatus",
         "vanityDomain",
-        "vanityDomainStatus"
+        "randomDomain",
+        "createDateTime",
+        "tier",
+        "storageLimit"
       ],
       "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>"
+        },
         "arn":{
           "shape":"Arn",
           "documentation":"<p>The ARN of the private re:Post.</p>"
         },
-        "clientId":{
-          "shape":"ClientId",
-          "documentation":"<p>The Identity Center identifier for the Application Instance.</p>"
+        "name":{
+          "shape":"SpaceName",
+          "documentation":"<p>The name of the private re:Post.</p>"
+        },
+        "status":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>The creation or deletion status of the private re:Post.</p>"
         },
         "configurationStatus":{
           "shape":"ConfigurationStatus",
           "documentation":"<p>The configuration status of the private re:Post.</p>"
         },
-        "contentSize":{
-          "shape":"ContentSize",
-          "documentation":"<p>The content size of the private re:Post.</p>"
+        "clientId":{
+          "shape":"ClientId",
+          "documentation":"<p>The Identity Center identifier for the Application Instance.</p>"
         },
-        "createDateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date when the private re:Post was created.</p>"
+        "identityStoreId":{
+          "shape":"IdentityStoreId",
+          "documentation":"<p/>"
         },
-        "customerRoleArn":{
+        "applicationArn":{
           "shape":"Arn",
-          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
-        },
-        "deleteDateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date when the private re:Post was deleted.</p>"
+          "documentation":"<p/>"
         },
         "description":{
           "shape":"SpaceDescription",
           "documentation":"<p>The description of the private re:Post.</p>"
         },
-        "groupAdmins":{
-          "shape":"GroupAdmins",
-          "documentation":"<p>The list of groups that are administrators of the private re:Post.</p>",
-          "deprecated":true,
-          "deprecatedMessage":"This property has been depracted and will be replaced by the roles property."
+        "vanityDomainStatus":{
+          "shape":"VanityDomainStatus",
+          "documentation":"<p>The approval status of the custom subdomain.</p>"
         },
-        "name":{
-          "shape":"SpaceName",
-          "documentation":"<p>The name of the private re:Post.</p>"
+        "vanityDomain":{
+          "shape":"Url",
+          "documentation":"<p>The custom subdomain that you use to access your private re:Post. All custom subdomains must be approved by AWS before use.</p>"
         },
         "randomDomain":{
           "shape":"Url",
           "documentation":"<p>The AWS generated subdomain of the private re:Post</p>"
         },
-        "roles":{
-          "shape":"Roles",
-          "documentation":"<p>A map of accessor identifiers and their roles.</p>"
-        },
-        "spaceId":{
-          "shape":"SpaceId",
-          "documentation":"<p>The unique ID of the private re:Post.</p>"
+        "customerRoleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
         },
-        "status":{
-          "shape":"ProvisioningStatus",
-          "documentation":"<p>The creation or deletion status of the private re:Post.</p>"
+        "createDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the private re:Post was created.</p>"
         },
-        "storageLimit":{
-          "shape":"StorageLimit",
-          "documentation":"<p>The storage limit of the private re:Post.</p>"
+        "deleteDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the private re:Post was deleted.</p>"
         },
         "tier":{
           "shape":"TierLevel",
           "documentation":"<p>The pricing tier of the private re:Post.</p>"
         },
+        "storageLimit":{
+          "shape":"StorageLimit",
+          "documentation":"<p>The storage limit of the private re:Post.</p>"
+        },
         "userAdmins":{
           "shape":"UserAdmins",
           "documentation":"<p>The list of users that are administrators of the private re:Post.</p>",
           "deprecated":true,
           "deprecatedMessage":"This property has been depracted and will be replaced by the roles property."
         },
-        "userCount":{
-          "shape":"UserCount",
-          "documentation":"<p>The number of users that have onboarded to the private re:Post.</p>"
+        "groupAdmins":{
+          "shape":"GroupAdmins",
+          "documentation":"<p>The list of groups that are administrators of the private re:Post.</p>",
+          "deprecated":true,
+          "deprecatedMessage":"This property has been depracted and will be replaced by the roles property."
+        },
+        "roles":{
+          "shape":"Roles",
+          "documentation":"<p>A map of accessor identifiers and their roles.</p>"
         },
         "userKMSKey":{
           "shape":"KMSKey",
           "documentation":"<p>The custom AWS KMS key ARN that’s used for the AWS KMS encryption.</p>"
         },
-        "vanityDomain":{
-          "shape":"Url",
-          "documentation":"<p>The custom subdomain that you use to access your private re:Post. All custom subdomains must be approved by AWS before use.</p>"
+        "userCount":{
+          "shape":"UserCount",
+          "documentation":"<p>The number of users that have onboarded to the private re:Post.</p>"
         },
-        "vanityDomainStatus":{
-          "shape":"VanityDomainStatus",
-          "documentation":"<p>The approval status of the custom subdomain.</p>"
+        "contentSize":{
+          "shape":"ContentSize",
+          "documentation":"<p>The content size of the private re:Post.</p>"
+        },
+        "supportedEmailDomains":{
+          "shape":"SupportedEmailDomainsStatus",
+          "documentation":"<p/>"
         }
       }
     },
@@ -638,6 +1089,11 @@
       "type":"list",
       "member":{"shape":"AdminId"}
     },
+    "GroupCount":{
+      "type":"integer",
+      "box":true
+    },
+    "IdentityStoreId":{"type":"string"},
     "Integer":{
       "type":"integer",
       "box":true
@@ -673,20 +1129,64 @@
       "sensitive":true
     },
     "KMSKey":{"type":"string"},
-    "ListSpacesInput":{
+    "ListChannelsInput":{
       "type":"structure",
+      "required":["spaceId"],
       "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token for the next set of channel to return. You receive this token from a previous ListChannels operation.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
         "maxResults":{
-          "shape":"ListSpacesLimit",
-          "documentation":"<p>The maximum number of private re:Posts to include in the results.</p>",
+          "shape":"ListChannelsLimit",
+          "documentation":"<p>The maximum number of channels to include in the results.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        }
+      }
+    },
+    "ListChannelsLimit":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListChannelsOutput":{
+      "type":"structure",
+      "required":["channels"],
+      "members":{
+        "channels":{
+          "shape":"ChannelsList",
+          "documentation":"<p>An array of structures that contain some information about the channels in the private re:Post.</p>"
         },
         "nextToken":{
           "shape":"String",
+          "documentation":"<p>The token that you use when you request the next set of channels.</p>"
+        }
+      }
+    },
+    "ListSpacesInput":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"String",
           "documentation":"<p>The token for the next set of private re:Posts to return. You receive this token from a previous ListSpaces operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"ListSpacesLimit",
+          "documentation":"<p>The maximum number of private re:Posts to include in the results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -700,13 +1200,13 @@
       "type":"structure",
       "required":["spaces"],
       "members":{
-        "nextToken":{
-          "shape":"String",
-          "documentation":"<p>The token that you use when you request the next set of private re:Posts.</p>"
-        },
         "spaces":{
           "shape":"SpacesList",
           "documentation":"<p>An array of structures that contain some information about the private re:Posts in the account.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>The token that you use when you request the next set of private re:Posts.</p>"
         }
       }
     },
@@ -739,21 +1239,21 @@
     "RegisterAdminInput":{
       "type":"structure",
       "required":[
-        "adminId",
-        "spaceId"
+        "spaceId",
+        "adminId"
       ],
       "members":{
-        "adminId":{
-          "shape":"AdminId",
-          "documentation":"<p>The ID of the administrator.</p>",
-          "location":"uri",
-          "locationName":"adminId"
-        },
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The ID of the private re:Post.</p>",
           "location":"uri",
           "locationName":"spaceId"
+        },
+        "adminId":{
+          "shape":"AdminId",
+          "documentation":"<p>The ID of the administrator.</p>",
+          "location":"uri",
+          "locationName":"adminId"
         }
       }
     },
@@ -803,29 +1303,29 @@
     "SendInvitesInput":{
       "type":"structure",
       "required":[
-        "accessorIds",
-        "body",
         "spaceId",
-        "title"
+        "accessorIds",
+        "title",
+        "body"
       ],
       "members":{
-        "accessorIds":{
-          "shape":"AccessorIdList",
-          "documentation":"<p>The array of identifiers for the users and groups.</p>"
-        },
-        "body":{
-          "shape":"InviteBody",
-          "documentation":"<p>The body of the invite.</p>"
-        },
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The ID of the private re:Post.</p>",
           "location":"uri",
           "locationName":"spaceId"
         },
+        "accessorIds":{
+          "shape":"AccessorIdList",
+          "documentation":"<p>The array of identifiers for the users and groups.</p>"
+        },
         "title":{
           "shape":"InviteTitle",
           "documentation":"<p>The title of the invite.</p>"
+        },
+        "body":{
+          "shape":"InviteBody",
+          "documentation":"<p>The body of the invite.</p>"
         }
       }
     },
@@ -833,17 +1333,13 @@
       "type":"structure",
       "required":[
         "message",
-        "quotaCode",
         "resourceId",
         "resourceType",
-        "serviceCode"
+        "serviceCode",
+        "quotaCode"
       ],
       "members":{
         "message":{"shape":"String"},
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>The code to identify the quota.</p>"
-        },
         "resourceId":{
           "shape":"String",
           "documentation":"<p>The id of the resource.</p>"
@@ -855,6 +1351,10 @@
         "serviceCode":{
           "shape":"String",
           "documentation":"<p>The code to identify the service.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>The code to identify the quota.</p>"
         }
       },
       "documentation":"<p>Request would cause a service quota to be exceeded.</p>",
@@ -867,82 +1367,86 @@
     "SpaceData":{
       "type":"structure",
       "required":[
+        "spaceId",
         "arn",
-        "configurationStatus",
-        "createDateTime",
         "name",
-        "randomDomain",
-        "spaceId",
         "status",
-        "storageLimit",
-        "tier",
+        "configurationStatus",
+        "vanityDomainStatus",
         "vanityDomain",
-        "vanityDomainStatus"
+        "randomDomain",
+        "tier",
+        "storageLimit",
+        "createDateTime"
       ],
       "members":{
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>"
+        },
         "arn":{
           "shape":"Arn",
           "documentation":"<p>The ARN of the private re:Post.</p>"
         },
-        "configurationStatus":{
-          "shape":"ConfigurationStatus",
-          "documentation":"<p>The configuration status of the private re:Post.</p>"
-        },
-        "contentSize":{
-          "shape":"ContentSize",
-          "documentation":"<p>The content size of the private re:Post.</p>"
-        },
-        "createDateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date when the private re:Post was created.</p>"
-        },
-        "deleteDateTime":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date when the private re:Post was deleted.</p>"
+        "name":{
+          "shape":"SpaceName",
+          "documentation":"<p>The name for the private re:Post.</p>"
         },
         "description":{
           "shape":"SpaceDescription",
           "documentation":"<p>The description for the private re:Post. This is used only to help you identify this private re:Post.</p>"
         },
-        "name":{
-          "shape":"SpaceName",
-          "documentation":"<p>The name for the private re:Post.</p>"
+        "status":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>The creation/deletion status of the private re:Post.</p>"
+        },
+        "configurationStatus":{
+          "shape":"ConfigurationStatus",
+          "documentation":"<p>The configuration status of the private re:Post.</p>"
+        },
+        "vanityDomainStatus":{
+          "shape":"VanityDomainStatus",
+          "documentation":"<p>This approval status of the custom subdomain.</p>"
+        },
+        "vanityDomain":{
+          "shape":"Url",
+          "documentation":"<p>This custom subdomain that you use to access your private re:Post. All custom subdomains must be approved by AWS before use.</p>"
         },
         "randomDomain":{
           "shape":"Url",
           "documentation":"<p>The AWS generated subdomain of the private re:Post.</p>"
         },
-        "spaceId":{
-          "shape":"SpaceId",
-          "documentation":"<p>The unique ID of the private re:Post.</p>"
-        },
-        "status":{
-          "shape":"ProvisioningStatus",
-          "documentation":"<p>The creation/deletion status of the private re:Post.</p>"
+        "tier":{
+          "shape":"TierLevel",
+          "documentation":"<p>The pricing tier of the private re:Post.</p>"
         },
         "storageLimit":{
           "shape":"StorageLimit",
           "documentation":"<p>The storage limit of the private re:Post.</p>"
         },
-        "tier":{
-          "shape":"TierLevel",
-          "documentation":"<p>The pricing tier of the private re:Post.</p>"
+        "createDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the private re:Post was created.</p>"
         },
-        "userCount":{
-          "shape":"UserCount",
-          "documentation":"<p>The number of onboarded users to the private re:Post.</p>"
+        "deleteDateTime":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date when the private re:Post was deleted.</p>"
         },
         "userKMSKey":{
           "shape":"KMSKey",
           "documentation":"<p>The custom AWS KMS key ARN that’s used for the AWS KMS encryption.</p>"
         },
-        "vanityDomain":{
-          "shape":"Url",
-          "documentation":"<p>This custom subdomain that you use to access your private re:Post. All custom subdomains must be approved by AWS before use.</p>"
+        "userCount":{
+          "shape":"UserCount",
+          "documentation":"<p>The number of onboarded users to the private re:Post.</p>"
         },
-        "vanityDomainStatus":{
-          "shape":"VanityDomainStatus",
-          "documentation":"<p>This approval status of the custom subdomain.</p>"
+        "contentSize":{
+          "shape":"ContentSize",
+          "documentation":"<p>The content size of the private re:Post.</p>"
+        },
+        "supportedEmailDomains":{
+          "shape":"SupportedEmailDomainsStatus",
+          "documentation":"<p/>"
         }
       },
       "documentation":"<p>A structure that contains some information about a private re:Post in the account.</p>"
@@ -974,6 +1478,34 @@
       "box":true
     },
     "String":{"type":"string"},
+    "SupportedEmailDomainsParameters":{
+      "type":"structure",
+      "members":{
+        "enabled":{
+          "shape":"FeatureEnableParameter",
+          "documentation":"<p/>"
+        },
+        "allowedDomains":{
+          "shape":"AllowedDomainsList",
+          "documentation":"<p/>"
+        }
+      },
+      "documentation":"<p/>"
+    },
+    "SupportedEmailDomainsStatus":{
+      "type":"structure",
+      "members":{
+        "enabled":{
+          "shape":"FeatureEnableStatus",
+          "documentation":"<p/>"
+        },
+        "allowedDomains":{
+          "shape":"AllowedDomainsList",
+          "documentation":"<p/>"
+        }
+      },
+      "documentation":"<p/>"
+    },
     "SyntheticTimestamp_date_time":{
       "type":"timestamp",
       "timestampFormat":"iso8601"
@@ -982,7 +1514,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^(?!aws:)[a-zA-Z+-=._:/]+$"
+      "pattern":"(?!aws:)[a-zA-Z+-=._:/]+"
     },
     "TagKeyList":{
       "type":"list",
@@ -1030,6 +1562,10 @@
       "required":["message"],
       "members":{
         "message":{"shape":"String"},
+        "serviceCode":{
+          "shape":"String",
+          "documentation":"<p>The code to identify the service.</p>"
+        },
         "quotaCode":{
           "shape":"String",
           "documentation":"<p>The code to identify the quota.</p>"
@@ -1039,10 +1575,6 @@
           "documentation":"<p> Advice to clients on when the call can be safely retried.</p>",
           "location":"header",
           "locationName":"Retry-After"
-        },
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>The code to identify the service.</p>"
         }
       },
       "documentation":"<p>Request was denied due to request throttling.</p>",
@@ -1086,27 +1618,66 @@
       "members":{
       }
     },
-    "UpdateSpaceInput":{
+    "UpdateChannelInput":{
       "type":"structure",
-      "required":["spaceId"],
+      "required":[
+        "spaceId",
+        "channelId",
+        "channelName"
+      ],
       "members":{
-        "description":{
-          "shape":"SpaceDescription",
-          "documentation":"<p>A description for the private re:Post. This is used only to help you identify this private re:Post.</p>"
+        "spaceId":{
+          "shape":"SpaceId",
+          "documentation":"<p>The unique ID of the private re:Post.</p>",
+          "location":"uri",
+          "locationName":"spaceId"
         },
-        "roleArn":{
-          "shape":"Arn",
-          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
+        "channelId":{
+          "shape":"ChannelId",
+          "documentation":"<p>The unique ID of the private re:Post channel.</p>",
+          "location":"uri",
+          "locationName":"channelId"
+        },
+        "channelName":{
+          "shape":"ChannelName",
+          "documentation":"<p>The name for the channel. This must be unique per private re:Post.</p>"
         },
+        "channelDescription":{
+          "shape":"ChannelDescription",
+          "documentation":"<p>A description for the channel. This is used only to help you identify this channel.</p>"
+        }
+      }
+    },
+    "UpdateChannelOutput":{
+      "type":"structure",
+      "members":{
+      }
+    },
+    "UpdateSpaceInput":{
+      "type":"structure",
+      "required":["spaceId"],
+      "members":{
         "spaceId":{
           "shape":"SpaceId",
           "documentation":"<p>The unique ID of this private re:Post.</p>",
           "location":"uri",
           "locationName":"spaceId"
         },
+        "description":{
+          "shape":"SpaceDescription",
+          "documentation":"<p>A description for the private re:Post. This is used only to help you identify this private re:Post.</p>"
+        },
         "tier":{
           "shape":"TierLevel",
           "documentation":"<p>The pricing tier of this private re:Post.</p>"
+        },
+        "roleArn":{
+          "shape":"Arn",
+          "documentation":"<p>The IAM role that grants permissions to the private re:Post to convert unanswered questions into AWS support tickets.</p>"
+        },
+        "supportedEmailDomains":{
+          "shape":"SupportedEmailDomainsParameters",
+          "documentation":"<p/>"
         }
       }
     },
@@ -1126,14 +1697,14 @@
         "reason"
       ],
       "members":{
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The field that caused the error, if applicable.</p>"
-        },
         "message":{"shape":"String"},
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>The reason why the request failed validation.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>The field that caused the error, if applicable.</p>"
         }
       },
       "documentation":"<p>The input fails to satisfy the constraints specified by an AWS service.</p>",
@@ -1146,17 +1717,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>The name of the field.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>Message describing why the field failed validation.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The name of the field.</p>"
         }
       },
       "documentation":"<p>Stores information about a field that’s passed inside a request that resulted in an exception.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/waiters-2.json 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/repostspace/2022-05-13/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/repostspace/2022-05-13/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,97 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "ChannelCreated" : {
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetChannel",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "success",
+        "expected" : "CREATED"
+      }, {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "failure",
+        "expected" : "CREATE_FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "retry",
+        "expected" : "CREATING"
+      } ]
+    },
+    "ChannelDeleted" : {
+      "delay" : 2,
+      "maxAttempts" : 60,
+      "operation" : "GetChannel",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "success",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "failure",
+        "expected" : "DELETE_FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "channelStatus",
+        "state" : "retry",
+        "expected" : "DELETING"
+      } ]
+    },
+    "SpaceCreated" : {
+      "delay" : 300,
+      "maxAttempts" : 24,
+      "operation" : "GetSpace",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "CREATED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "CREATE_FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "retry",
+        "expected" : "CREATING"
+      } ]
+    },
+    "SpaceDeleted" : {
+      "delay" : 300,
+      "maxAttempts" : 24,
+      "operation" : "GetSpace",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETE_FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "retry",
+        "expected" : "DELETING"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resiliencehub/2020-04-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -41,6 +41,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "ManagedViews"
+    },
+    "GetResourceExplorerSetup": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Regions"
+    },
+    "ListServiceIndexes": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Indexes"
+    },
+    "ListServiceViews": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ServiceViews"
+    },
+    "ListStreamingAccessForServices": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "StreamingAccessForServices"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/service-2.json 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-07-28",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"resource-explorer-2",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"AWS Resource Explorer",
     "serviceId":"Resource Explorer 2",
     "signatureVersion":"v4",
     "signingName":"resource-explorer-2",
-    "uid":"resource-explorer-2-2022-07-28",
-    "auth":["aws.auth#sigv4"]
+    "uid":"resource-explorer-2-2022-07-28"
   },
   "operations":{
     "AssociateDefaultView":{
@@ -49,7 +48,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves details about a list of views.</p>"
+      "documentation":"<p>Retrieves details about a list of views.</p>",
+      "readonly":true
     },
     "CreateIndex":{
       "name":"CreateIndex",
@@ -70,6 +70,25 @@
       "documentation":"<p>Turns on Amazon Web Services Resource Explorer in the Amazon Web Services Region in which you called this operation by creating an index. Resource Explorer begins discovering the resources in this Region and stores the details about the resources in the index so that they can be queried by using the <a>Search</a> operation. You can create only one index in a Region.</p> <note> <p>This operation creates only a <i>local</i> index. To promote the local index in one Amazon Web Services Region into the aggregator index for the Amazon Web Services account, use the <a>UpdateIndexType</a> operation. For more information, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-aggregator-region.html\">Turning on cross-Region search by creating an aggregator index</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> </note> <p>For more details about what happens when you turn on Resource Explorer in an Amazon Web Services Region, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-service-activate.html\">Turn on Resource Explorer to index your resources in an Amazon Web Services Region</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <p>If this is the first Amazon Web Services Region in which you've created an index for Resource Explorer, then this operation also <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/security_iam_service-linked-roles.html\">creates a service-linked role</a> in your Amazon Web Services account that allows Resource Explorer to enumerate your resources to populate the index.</p> <ul> <li> <p> <b>Action</b>: <code>resource-explorer-2:CreateIndex</code> </p> <p> <b>Resource</b>: The ARN of the index (as it will exist after the operation completes) in the Amazon Web Services Region and account in which you're trying to create the index. Use the wildcard character (<code>*</code>) at the end of the string to match the eventual UUID. For example, the following <code>Resource</code> element restricts the role or user to creating an index in only the <code>us-east-2</code> Region of the specified account.</p> <p> <code>\"Resource\": \"arn:aws:resource-explorer-2:us-west-2:<i>&lt;account-id&gt;</i>:index/*\"</code> </p> <p>Alternatively, you can use <code>\"Resource\": \"*\"</code> to allow the role or user to create an index in any Region.</p> </li> <li> <p> <b>Action</b>: <code>iam:CreateServiceLinkedRole</code> </p> <p> <b>Resource</b>: No specific resource (*). </p> <p>This permission is required only the first time you create an index to turn on Resource Explorer in the account. Resource Explorer uses this to create the <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/security_iam_service-linked-roles.html\">service-linked role needed to index the resources in your account</a>. Resource Explorer uses the same service-linked role for all additional indexes you create afterwards.</p> </li> </ul>",
       "idempotent":true
     },
+    "CreateResourceExplorerSetup":{
+      "name":"CreateResourceExplorerSetup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateResourceExplorerSetup",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateResourceExplorerSetupInput"},
+      "output":{"shape":"CreateResourceExplorerSetupOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Creates a Resource Explorer setup configuration across multiple Amazon Web Services Regions. This operation sets up indexes and views in the specified Regions. This operation can also be used to set an aggregator Region for cross-Region resource search.</p>",
+      "idempotent":true
+    },
     "CreateView":{
       "name":"CreateView",
       "http":{
@@ -109,6 +128,25 @@
       "documentation":"<p>Deletes the specified index and turns off Amazon Web Services Resource Explorer in the specified Amazon Web Services Region. When you delete an index, Resource Explorer stops discovering and indexing resources in that Region. Resource Explorer also deletes all views in that Region. These actions occur as asynchronous background tasks. You can check to see when the actions are complete by using the <a>GetIndex</a> operation and checking the <code>Status</code> response value.</p> <note> <p>If the index you delete is the aggregator index for the Amazon Web Services account, you must wait 24 hours before you can promote another local index to be the aggregator index for the account. Users can't perform account-wide searches using Resource Explorer until another aggregator index is configured.</p> </note>",
       "idempotent":true
     },
+    "DeleteResourceExplorerSetup":{
+      "name":"DeleteResourceExplorerSetup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteResourceExplorerSetup",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteResourceExplorerSetupInput"},
+      "output":{"shape":"DeleteResourceExplorerSetupOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes a Resource Explorer setup configuration. This operation removes indexes and views from the specified Regions or all Regions where Resource Explorer is configured.</p>",
+      "idempotent":true
+    },
     "DeleteView":{
       "name":"DeleteView",
       "http":{
@@ -160,7 +198,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves the status of your account's Amazon Web Services service access, and validates the service linked role required to access the multi-account search feature. Only the management account can invoke this API call. </p>"
+      "documentation":"<p>Retrieves the status of your account's Amazon Web Services service access, and validates the service linked role required to access the multi-account search feature. Only the management account can invoke this API call. </p>",
+      "readonly":true
     },
     "GetDefaultView":{
       "name":"GetDefaultView",
@@ -177,7 +216,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves the Amazon Resource Name (ARN) of the view that is the default for the Amazon Web Services Region in which you call this operation. You can then call <a>GetView</a> to retrieve the details of that view.</p>"
+      "documentation":"<p>Retrieves the Amazon Resource Name (ARN) of the view that is the default for the Amazon Web Services Region in which you call this operation. You can then call <a>GetView</a> to retrieve the details of that view.</p>",
+      "readonly":true
     },
     "GetIndex":{
       "name":"GetIndex",
@@ -213,7 +253,64 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves details of the specified <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/aws-managed-views.html\">Amazon Web Services-managed view</a>. </p>"
+      "documentation":"<p>Retrieves details of the specified <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/aws-managed-views.html\">Amazon Web Services-managed view</a>. </p>",
+      "readonly":true
+    },
+    "GetResourceExplorerSetup":{
+      "name":"GetResourceExplorerSetup",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetResourceExplorerSetup",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResourceExplorerSetupInput"},
+      "output":{"shape":"GetResourceExplorerSetupOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves the status and details of a Resource Explorer setup operation. This operation returns information about the progress of creating or deleting Resource Explorer configurations across Regions.</p>",
+      "readonly":true
+    },
+    "GetServiceIndex":{
+      "name":"GetServiceIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetServiceIndex",
+        "responseCode":200
+      },
+      "output":{"shape":"GetServiceIndexOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves information about the Resource Explorer index in the current Amazon Web Services Region. This operation returns the ARN and type of the index if one exists.</p>",
+      "readonly":true
+    },
+    "GetServiceView":{
+      "name":"GetServiceView",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetServiceView",
+        "responseCode":200
+      },
+      "input":{"shape":"GetServiceViewInput"},
+      "output":{"shape":"GetServiceViewOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Retrieves details about a specific Resource Explorer service view. This operation returns the configuration and properties of the specified view.</p>",
+      "readonly":true
     },
     "GetView":{
       "name":"GetView",
@@ -232,7 +329,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves details of the specified view.</p>"
+      "documentation":"<p>Retrieves details of the specified view.</p>",
+      "readonly":true
     },
     "ListIndexes":{
       "name":"ListIndexes",
@@ -249,7 +347,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of all of the indexes in Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer.</p>"
+      "documentation":"<p>Retrieves a list of all of the indexes in Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer.</p>",
+      "readonly":true
     },
     "ListIndexesForMembers":{
       "name":"ListIndexesForMembers",
@@ -266,7 +365,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of a member's indexes in all Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer. Only the management account or a delegated administrator with service access enabled can invoke this API call. </p>"
+      "documentation":"<p>Retrieves a list of a member's indexes in all Amazon Web Services Regions that are currently collecting resource information for Amazon Web Services Resource Explorer. Only the management account or a delegated administrator with service access enabled can invoke this API call. </p>",
+      "readonly":true
     },
     "ListManagedViews":{
       "name":"ListManagedViews",
@@ -303,7 +403,60 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Returns a list of resources and their details that match the specified criteria. This query must use a view. If you don’t explicitly specify a view, then Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. </p>"
+      "documentation":"<p>Returns a list of resources and their details that match the specified criteria. This query must use a view. If you don’t explicitly specify a view, then Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. </p>",
+      "readonly":true
+    },
+    "ListServiceIndexes":{
+      "name":"ListServiceIndexes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListServiceIndexes",
+        "responseCode":200
+      },
+      "input":{"shape":"ListServiceIndexesInput"},
+      "output":{"shape":"ListServiceIndexesOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all Resource Explorer indexes across the specified Amazon Web Services Regions. This operation returns information about indexes including their ARNs, types, and Regions.</p>",
+      "readonly":true
+    },
+    "ListServiceViews":{
+      "name":"ListServiceViews",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListServiceViews",
+        "responseCode":200
+      },
+      "input":{"shape":"ListServiceViewsInput"},
+      "output":{"shape":"ListServiceViewsOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Lists all Resource Explorer service views available in the current Amazon Web Services account. This operation returns the ARNs of available service views.</p>",
+      "readonly":true
+    },
+    "ListStreamingAccessForServices":{
+      "name":"ListStreamingAccessForServices",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListStreamingAccessForServices",
+        "responseCode":200
+      },
+      "input":{"shape":"ListStreamingAccessForServicesInput"},
+      "output":{"shape":"ListStreamingAccessForServicesOutput"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Returns a list of Amazon Web Services services that have been granted streaming access to your Resource Explorer data. Streaming access allows Amazon Web Services services to receive real-time updates about your resources as they are indexed by Resource Explorer.</p>"
     },
     "ListSupportedResourceTypes":{
       "name":"ListSupportedResourceTypes",
@@ -320,7 +473,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Retrieves a list of all resource types currently supported by Amazon Web Services Resource Explorer.</p>"
+      "documentation":"<p>Retrieves a list of all resource types currently supported by Amazon Web Services Resource Explorer.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -339,7 +493,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists the tags that are attached to the specified resource.</p>"
+      "documentation":"<p>Lists the tags that are attached to the specified resource.</p>",
+      "readonly":true
     },
     "ListViews":{
       "name":"ListViews",
@@ -356,7 +511,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Lists the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource names (ARNs)</a> of the views available in the Amazon Web Services Region in which you call this operation.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a paginated operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note>"
+      "documentation":"<p>Lists the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource names (ARNs)</a> of the views available in the Amazon Web Services Region in which you call this operation.</p> <note> <p>Always check the <code>NextToken</code> response parameter for a <code>null</code> value when calling a paginated operation. These operations can occasionally return an empty set of results even when there are more results available. The <code>NextToken</code> response parameter value is <code>null</code> <i>only</i> when there are no more results to display.</p> </note>",
+      "readonly":true
     },
     "Search":{
       "name":"Search",
@@ -375,7 +531,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Searches for resources and displays details about all resources that match the specified criteria. You must specify a query string.</p> <p>All search queries must use a view. If you don't explicitly specify a view, then Amazon Web Services Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. The results are the logical intersection of the results that match both the <code>QueryString</code> parameter supplied to this operation and the <code>SearchFilter</code> parameter attached to the view.</p> <p>For the complete syntax supported by the <code>QueryString</code> parameter, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/APIReference/about-query-syntax.html\">Search query syntax reference for Resource Explorer</a>.</p> <p>If your search results are empty, or are missing results that you think should be there, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/troubleshooting_search.html\">Troubleshooting Resource Explorer search</a>.</p>"
+      "documentation":"<p>Searches for resources and displays details about all resources that match the specified criteria. You must specify a query string.</p> <p>All search queries must use a view. If you don't explicitly specify a view, then Amazon Web Services Resource Explorer uses the default view for the Amazon Web Services Region in which you call this operation. The results are the logical intersection of the results that match both the <code>QueryString</code> parameter supplied to this operation and the <code>SearchFilter</code> parameter attached to the view.</p> <p>For the complete syntax supported by the <code>QueryString</code> parameter, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/APIReference/about-query-syntax.html\">Search query syntax reference for Resource Explorer</a>.</p> <p>If your search results are empty, or are missing results that you think should be there, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/troubleshooting_search.html\">Troubleshooting Resource Explorer search</a>.</p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -508,17 +665,17 @@
     "BatchGetViewError":{
       "type":"structure",
       "required":[
-        "ErrorMessage",
-        "ViewArn"
+        "ViewArn",
+        "ErrorMessage"
       ],
       "members":{
-        "ErrorMessage":{
-          "shape":"String",
-          "documentation":"<p>The description of the error for the specified view.</p>"
-        },
         "ViewArn":{
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view for which Resource Explorer failed to retrieve details.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"String",
+          "documentation":"<p>The description of the error for the specified view.</p>"
         }
       },
       "documentation":"<p>A collection of error messages for any views that Amazon Web Services Resource Explorer couldn't retrieve details.</p>"
@@ -545,13 +702,13 @@
     "BatchGetViewOutput":{
       "type":"structure",
       "members":{
-        "Errors":{
-          "shape":"BatchGetViewErrors",
-          "documentation":"<p>If any of the specified ARNs result in an error, then this structure describes the error.</p>"
-        },
         "Views":{
           "shape":"ViewList",
           "documentation":"<p>A structure with a list of objects with details for each of the specified views.</p>"
+        },
+        "Errors":{
+          "shape":"BatchGetViewErrors",
+          "documentation":"<p>If any of the specified ARNs result in an error, then this structure describes the error.</p>"
         }
       }
     },
@@ -593,16 +750,74 @@
           "shape":"String",
           "documentation":"<p>The ARN of the new local index for the Region. You can reference this ARN in IAM permission policies to authorize the following operations: <a>DeleteIndex</a> | <a>GetIndex</a> | <a>UpdateIndexType</a> | <a>CreateView</a> </p>"
         },
+        "State":{
+          "shape":"IndexState",
+          "documentation":"<p>Indicates the current state of the index. You can check for changes to the state for asynchronous operations by calling the <a>GetIndex</a> operation.</p> <note> <p>The state can remain in the <code>CREATING</code> or <code>UPDATING</code> state for several hours as Resource Explorer discovers the information about your resources and populates the index.</p> </note>"
+        },
         "CreatedAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and timestamp when the index was created.</p>"
+        }
+      }
+    },
+    "CreateResourceExplorerSetupInput":{
+      "type":"structure",
+      "required":[
+        "RegionList",
+        "ViewName"
+      ],
+      "members":{
+        "RegionList":{
+          "shape":"CreateResourceExplorerSetupInputRegionListList",
+          "documentation":"<p>A list of Amazon Web Services Regions where Resource Explorer should be configured. Each Region in the list will have a user-owned index created.</p>"
         },
-        "State":{
-          "shape":"IndexState",
-          "documentation":"<p>Indicates the current state of the index. You can check for changes to the state for asynchronous operations by calling the <a>GetIndex</a> operation.</p> <note> <p>The state can remain in the <code>CREATING</code> or <code>UPDATING</code> state for several hours as Resource Explorer discovers the information about your resources and populates the index.</p> </note>"
+        "AggregatorRegions":{
+          "shape":"CreateResourceExplorerSetupInputAggregatorRegionsList",
+          "documentation":"<p>A list of Amazon Web Services Regions that should be configured as aggregator Regions. Aggregator Regions receive replicated index information from all other Regions where there is a user-owned index.</p>"
+        },
+        "ViewName":{
+          "shape":"CreateResourceExplorerSetupInputViewNameString",
+          "documentation":"<p>The name for the view to be created as part of the Resource Explorer setup. The view name must be unique within the Amazon Web Services account and Region.</p>"
         }
       }
     },
+    "CreateResourceExplorerSetupInputAggregatorRegionsList":{
+      "type":"list",
+      "member":{"shape":"CreateResourceExplorerSetupInputAggregatorRegionsListMemberString"},
+      "max":1,
+      "min":0
+    },
+    "CreateResourceExplorerSetupInputAggregatorRegionsListMemberString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
+    },
+    "CreateResourceExplorerSetupInputRegionListList":{
+      "type":"list",
+      "member":{"shape":"CreateResourceExplorerSetupInputRegionListListMemberString"},
+      "min":1
+    },
+    "CreateResourceExplorerSetupInputRegionListListMemberString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
+    },
+    "CreateResourceExplorerSetupInputViewNameString":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9-]{1,64}"
+    },
+    "CreateResourceExplorerSetupOutput":{
+      "type":"structure",
+      "required":["TaskId"],
+      "members":{
+        "TaskId":{
+          "shape":"CreateResourceExplorerSetupOutputTaskIdString",
+          "documentation":"<p>The unique identifier for the setup task. Use this ID with <code>GetResourceExplorerSetup</code> to monitor the progress of the configuration operation.</p>"
+        }
+      }
+    },
+    "CreateResourceExplorerSetupOutputTaskIdString":{
+      "type":"string",
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
     "CreateViewInput":{
       "type":"structure",
       "required":["ViewName"],
@@ -612,9 +827,9 @@
           "documentation":"<p>This value helps ensure idempotency. Resource Explorer uses this value to prevent the accidental creation of duplicate versions. We recommend that you generate a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID-type value</a> to ensure the uniqueness of your views.</p>",
           "idempotencyToken":true
         },
-        "Filters":{
-          "shape":"SearchFilter",
-          "documentation":"<p>An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a <a>Search</a> operation, the filter string is combined with the search's <code>QueryString</code> parameter using a logical <code>AND</code> operator.</p> <p>For information about the supported syntax, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query reference for Resource Explorer</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <important> <p>This query string in the context of this operation supports only <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-filters\">filter prefixes</a> with optional <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-operators\">operators</a>. It doesn't support free-form text. For example, the string <code>region:us* service:ec2 -tag:stage=prod</code> includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters <code>us</code> and is <i>not</i> tagged with a key <code>Stage</code> that has the value <code>prod</code>.</p> </important>"
+        "ViewName":{
+          "shape":"ViewName",
+          "documentation":"<p>The name of the new view. This name appears in the list of views in Resource Explorer.</p> <p>The name must be no more than 64 characters long, and can include letters, digits, and the dash (-) character. The name must be unique within its Amazon Web Services Region.</p>"
         },
         "IncludedProperties":{
           "shape":"IncludedPropertyList",
@@ -624,13 +839,13 @@
           "shape":"CreateViewInputScopeString",
           "documentation":"<p>The root ARN of the account, an organizational unit (OU), or an organization ARN. If left empty, the default is account.</p>"
         },
+        "Filters":{
+          "shape":"SearchFilter",
+          "documentation":"<p>An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a <a>Search</a> operation, the filter string is combined with the search's <code>QueryString</code> parameter using a logical <code>AND</code> operator.</p> <p>For information about the supported syntax, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query reference for Resource Explorer</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <important> <p>This query string in the context of this operation supports only <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-filters\">filter prefixes</a> with optional <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-operators\">operators</a>. It doesn't support free-form text. For example, the string <code>region:us* service:ec2 -tag:stage=prod</code> includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters <code>us</code> and is <i>not</i> tagged with a key <code>Stage</code> that has the value <code>prod</code>.</p> </important>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>Tag key and value pairs that are attached to the view.</p>"
-        },
-        "ViewName":{
-          "shape":"ViewName",
-          "documentation":"<p>The name of the new view. This name appears in the list of views in Resource Explorer.</p> <p>The name must be no more than 64 characters long, and can include letters, digits, and the dash (-) character. The name must be unique within its Amazon Web Services Region.</p>"
         }
       }
     },
@@ -670,16 +885,43 @@
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index that you successfully started the deletion process.</p> <note> <p>This operation is asynchronous. To check its status, call the <a>GetIndex</a> operation.</p> </note>"
         },
+        "State":{
+          "shape":"IndexState",
+          "documentation":"<p>Indicates the current state of the index. </p>"
+        },
         "LastUpdatedAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time when you last updated this index.</p>"
+        }
+      }
+    },
+    "DeleteResourceExplorerSetupInput":{
+      "type":"structure",
+      "members":{
+        "RegionList":{
+          "shape":"RegionList",
+          "documentation":"<p>A list of Amazon Web Services Regions from which to delete the Resource Explorer configuration. If not specified, the operation uses the <code>DeleteInAllRegions</code> parameter to determine scope.</p>"
         },
-        "State":{
-          "shape":"IndexState",
-          "documentation":"<p>Indicates the current state of the index. </p>"
+        "DeleteInAllRegions":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to delete Resource Explorer configuration from all Regions where it is currently enabled. If this parameter is set to <code>true</code>, a value for <code>RegionList</code> must not be provided. Otherwise, the operation fails with a <code>ValidationException</code> error.</p>"
         }
       }
     },
+    "DeleteResourceExplorerSetupOutput":{
+      "type":"structure",
+      "required":["TaskId"],
+      "members":{
+        "TaskId":{
+          "shape":"DeleteResourceExplorerSetupOutputTaskIdString",
+          "documentation":"<p>The unique identifier for the deletion task. Use this ID with <code>GetResourceExplorerSetup</code> to monitor the progress of the deletion operation.</p>"
+        }
+      }
+    },
+    "DeleteResourceExplorerSetupOutputTaskIdString":{
+      "type":"string",
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
     "DeleteViewInput":{
       "type":"structure",
       "required":["ViewArn"],
@@ -706,9 +948,22 @@
     },
     "Document":{
       "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "ErrorDetails":{
+      "type":"structure",
       "members":{
+        "Code":{
+          "shape":"String",
+          "documentation":"<p>The error code that identifies the type of error that occurred.</p>"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>A human-readable description of the error that occurred.</p>"
+        }
       },
-      "document":true
+      "documentation":"<p>Contains information about an error that occurred during a Resource Explorer setup operation.</p>"
     },
     "GetAccountLevelServiceConfigurationOutput":{
       "type":"structure",
@@ -735,13 +990,13 @@
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index.</p>"
         },
-        "CreatedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time when the index was originally created.</p>"
+        "Type":{
+          "shape":"IndexType",
+          "documentation":"<p>The type of the index in this Region. For information about the aggregator index and how it differs from a local index, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-aggregator-region.html\">Turning on cross-Region search by creating an aggregator index</a>.</p>"
         },
-        "LastUpdatedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time when the index was last updated.</p>"
+        "State":{
+          "shape":"IndexState",
+          "documentation":"<p>The current state of the index in this Amazon Web Services Region.</p>"
         },
         "ReplicatingFrom":{
           "shape":"RegionList",
@@ -751,17 +1006,17 @@
           "shape":"RegionList",
           "documentation":"<p>This response value is present only if this index is <code>Type=LOCAL</code>.</p> <p>The Amazon Web Services Region that contains the aggregator index, if one exists. If an aggregator index does exist then the Region in which you called this operation replicates its index information to the Region specified in this response value. </p>"
         },
-        "State":{
-          "shape":"IndexState",
-          "documentation":"<p>The current state of the index in this Amazon Web Services Region.</p>"
+        "CreatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the index was originally created.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when the index was last updated.</p>"
         },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>Tag key and value pairs that are attached to the index.</p>"
-        },
-        "Type":{
-          "shape":"IndexType",
-          "documentation":"<p>The type of the index in this Region. For information about the aggregator index and how it differs from a local index, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-aggregator-region.html\">Turning on cross-Region search by creating an aggregator index</a>.</p>"
         }
       }
     },
@@ -789,6 +1044,95 @@
         }
       }
     },
+    "GetResourceExplorerSetupInput":{
+      "type":"structure",
+      "required":["TaskId"],
+      "members":{
+        "TaskId":{
+          "shape":"GetResourceExplorerSetupInputTaskIdString",
+          "documentation":"<p>The unique identifier of the setup task to retrieve status information for. This ID is returned by <code>CreateResourceExplorerSetup</code> or <code>DeleteResourceExplorerSetup</code> operations.</p>"
+        },
+        "MaxResults":{
+          "shape":"GetResourceExplorerSetupInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of Region status results to return in a single response. Valid values are between <code>1</code> and <code>100</code>.</p>"
+        },
+        "NextToken":{
+          "shape":"GetResourceExplorerSetupInputNextTokenString",
+          "documentation":"<p>The pagination token from a previous <code>GetResourceExplorerSetup</code> response. Use this token to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "GetResourceExplorerSetupInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "GetResourceExplorerSetupInputNextTokenString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "GetResourceExplorerSetupInputTaskIdString":{
+      "type":"string",
+      "pattern":"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
+    },
+    "GetResourceExplorerSetupOutput":{
+      "type":"structure",
+      "members":{
+        "Regions":{
+          "shape":"RegionStatusList",
+          "documentation":"<p>A list of Region status objects that describe the current state of Resource Explorer configuration in each Region.</p>"
+        },
+        "NextToken":{
+          "shape":"GetResourceExplorerSetupOutputNextTokenString",
+          "documentation":"<p>The pagination token to use in a subsequent <code>GetResourceExplorerSetup</code> request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "GetResourceExplorerSetupOutputNextTokenString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "GetServiceIndexOutput":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Resource Explorer index in the current Region.</p>"
+        },
+        "Type":{
+          "shape":"IndexType",
+          "documentation":"<p>The type of the index. Valid values are <code>LOCAL</code> (contains resources from the current Region only) or <code>AGGREGATOR</code> (contains replicated resource information from all Regions).</p>"
+        }
+      }
+    },
+    "GetServiceViewInput":{
+      "type":"structure",
+      "required":["ServiceViewArn"],
+      "members":{
+        "ServiceViewArn":{
+          "shape":"GetServiceViewInputServiceViewArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service view to retrieve details for.</p>"
+        }
+      }
+    },
+    "GetServiceViewInputServiceViewArnString":{
+      "type":"string",
+      "max":1011,
+      "min":1
+    },
+    "GetServiceViewOutput":{
+      "type":"structure",
+      "required":["View"],
+      "members":{
+        "View":{
+          "shape":"ServiceView",
+          "documentation":"<p>A <code>ServiceView</code> object that contains the details and configuration of the requested service view.</p>"
+        }
+      }
+    },
     "GetViewInput":{
       "type":"structure",
       "required":["ViewArn"],
@@ -807,13 +1151,13 @@
     "GetViewOutput":{
       "type":"structure",
       "members":{
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>Tag key and value pairs that are attached to the view.</p>"
-        },
         "View":{
           "shape":"View",
           "documentation":"<p>A structure that contains the details for the requested view.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>Tag key and value pairs that are attached to the view.</p>"
         }
       }
     },
@@ -823,7 +1167,7 @@
       "members":{
         "Name":{
           "shape":"IncludedPropertyNameString",
-          "documentation":"<p>The name of the property that is included in this view.</p> <p>You can specify the following property names for this field:</p> <ul> <li> <p> <code>Tags</code> </p> </li> </ul>"
+          "documentation":"<p>The name of the property that is included in this view.</p> <p>You can specify the following property names for this field:</p> <ul> <li> <p> <code>tags</code> </p> </li> </ul>"
         }
       },
       "documentation":"<p>Information about an additional property that describes a resource, that you can optionally include in the view. This lets you view that property in search results, and filter your search results based on the value of the property.</p>"
@@ -840,14 +1184,14 @@
     "Index":{
       "type":"structure",
       "members":{
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index.</p>"
-        },
         "Region":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services Region in which the index exists.</p>"
         },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index.</p>"
+        },
         "Type":{
           "shape":"IndexType",
           "documentation":"<p>The type of index. It can be one of the following values:</p> <ul> <li> <p> <code>LOCAL</code> – The index contains information about resources from only the same Amazon Web Services Region.</p> </li> <li> <p> <code>AGGREGATOR</code> – Resource Explorer replicates copies of the indexed information about resources in all other Amazon Web Services Regions to the aggregator index. This lets search results in the Region with the aggregator index to include resources from all Regions in the account where Resource Explorer is turned on.</p> </li> </ul>"
@@ -869,6 +1213,21 @@
         "UPDATING"
       ]
     },
+    "IndexStatus":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"OperationStatus",
+          "documentation":"<p>The current status of the index operation. Valid values are <code>SUCCEEDED</code>, <code>FAILED</code>, <code>IN_PROGRESS</code>, or <code>SKIPPED</code>.</p>"
+        },
+        "Index":{"shape":"Index"},
+        "ErrorDetails":{
+          "shape":"ErrorDetails",
+          "documentation":"<p>Details about any error that occurred during the index operation.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the status of a Resource Explorer index operation in a specific Region.</p>"
+    },
     "IndexType":{
       "type":"string",
       "enum":[
@@ -937,6 +1296,14 @@
     "ListIndexesInput":{
       "type":"structure",
       "members":{
+        "Type":{
+          "shape":"IndexType",
+          "documentation":"<p>If specified, limits the output to only indexes of the specified Type, either <code>LOCAL</code> or <code>AGGREGATOR</code>.</p> <p>Use this option to discover the aggregator index for your account.</p>"
+        },
+        "Regions":{
+          "shape":"ListIndexesInputRegionsList",
+          "documentation":"<p>If specified, limits the response to only information about the index in the specified list of Amazon Web Services Regions.</p>"
+        },
         "MaxResults":{
           "shape":"ListIndexesInputMaxResultsInteger",
           "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
@@ -944,14 +1311,6 @@
         "NextToken":{
           "shape":"ListIndexesInputNextTokenString",
           "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
-        },
-        "Regions":{
-          "shape":"ListIndexesInputRegionsList",
-          "documentation":"<p>If specified, limits the response to only information about the index in the specified list of Amazon Web Services Regions.</p>"
-        },
-        "Type":{
-          "shape":"IndexType",
-          "documentation":"<p>If specified, limits the output to only indexes of the specified Type, either <code>LOCAL</code> or <code>AGGREGATOR</code>.</p> <p>Use this option to discover the aggregator index for your account.</p>"
         }
       }
     },
@@ -968,10 +1327,14 @@
     },
     "ListIndexesInputRegionsList":{
       "type":"list",
-      "member":{"shape":"String"},
+      "member":{"shape":"ListIndexesInputRegionsListMemberString"},
       "max":20,
       "min":0
     },
+    "ListIndexesInputRegionsListMemberString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
+    },
     "ListIndexesOutput":{
       "type":"structure",
       "members":{
@@ -1021,31 +1384,34 @@
     "ListManagedViewsOutput":{
       "type":"structure",
       "members":{
-        "ManagedViews":{
-          "shape":"ManagedViewArnList",
-          "documentation":"<p>The list of managed views available in the Amazon Web Services Region in which you called this operation. </p>"
-        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
+        },
+        "ManagedViews":{
+          "shape":"ManagedViewArnList",
+          "documentation":"<p>The list of managed views available in the Amazon Web Services Region in which you called this operation. </p>"
         }
       }
     },
     "ListResourcesInput":{
       "type":"structure",
       "members":{
-        "Filters":{"shape":"SearchFilter"},
+        "Filters":{
+          "shape":"SearchFilter",
+          "documentation":"<p>An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a <a>Search</a> operation, the filter string is combined with the search's <code>QueryString</code> parameter using a logical <code>AND</code> operator.</p> <p>For information about the supported syntax, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query reference for Resource Explorer</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <important> <p>This query string in the context of this operation supports only <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-filters\">filter prefixes</a> with optional <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-operators\">operators</a>. It doesn't support free-form text. For example, the string <code>region:us* service:ec2 -tag:stage=prod</code> includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters <code>us</code> and is <i>not</i> tagged with a key <code>Stage</code> that has the value <code>prod</code>.</p> </important>"
+        },
         "MaxResults":{
           "shape":"ListResourcesInputMaxResultsInteger",
           "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
         },
-        "NextToken":{
-          "shape":"ListResourcesInputNextTokenString",
-          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
-        },
         "ViewArn":{
           "shape":"ListResourcesInputViewArnString",
           "documentation":"<p>Specifies the Amazon resource name (ARN) of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a 401 Unauthorized exception.</p>"
+        },
+        "NextToken":{
+          "shape":"ListResourcesInputNextTokenString",
+          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p> <note> <p>The <code>ListResources</code> operation does not generate a <code>NextToken</code> if you set <code>MaxResults</code> to 1000. </p> </note>"
         }
       }
     },
@@ -1068,14 +1434,14 @@
     "ListResourcesOutput":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"ListResourcesOutputNextTokenString",
-          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
-        },
         "Resources":{
           "shape":"ResourceList",
           "documentation":"<p>The list of structures that describe the resources that match the query. </p>"
         },
+        "NextToken":{
+          "shape":"ListResourcesOutputNextTokenString",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
+        },
         "ViewArn":{
           "shape":"ListResourcesOutputViewArnString",
           "documentation":"<p>The Amazon resource name (ARN) of the view that this operation used to perform the search. </p>"
@@ -1092,12 +1458,95 @@
       "max":1011,
       "min":1
     },
-    "ListSupportedResourceTypesInput":{
+    "ListServiceIndexesInput":{
+      "type":"structure",
+      "members":{
+        "Regions":{
+          "shape":"ListServiceIndexesInputRegionsList",
+          "documentation":"<p>A list of Amazon Web Services Regions to include in the search for indexes. If not specified, indexes from all Regions are returned.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListServiceIndexesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of index results to return in a single response. Valid values are between <code>1</code> and <code>100</code>.</p>"
+        },
+        "NextToken":{
+          "shape":"ListServiceIndexesInputNextTokenString",
+          "documentation":"<p>The pagination token from a previous <code>ListServiceIndexes</code> response. Use this token to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListServiceIndexesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ListServiceIndexesInputNextTokenString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "ListServiceIndexesInputRegionsList":{
+      "type":"list",
+      "member":{"shape":"ListServiceIndexesInputRegionsListMemberString"},
+      "max":20,
+      "min":0
+    },
+    "ListServiceIndexesInputRegionsListMemberString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
+    },
+    "ListServiceIndexesOutput":{
+      "type":"structure",
+      "members":{
+        "Indexes":{
+          "shape":"IndexList",
+          "documentation":"<p>A list of <code>Index</code> objects that describe the Resource Explorer indexes found in the specified Regions.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token to use in a subsequent <code>ListServiceIndexes</code> request to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListServiceViewsInput":{
       "type":"structure",
       "members":{
         "MaxResults":{
-          "shape":"ListSupportedResourceTypesInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
+          "shape":"ListServiceViewsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of service view results to return in a single response. Valid values are between <code>1</code> and <code>50</code>.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token from a previous <code>ListServiceViews</code> response. Use this token to retrieve the next set of results.</p>"
+        }
+      }
+    },
+    "ListServiceViewsInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":1
+    },
+    "ListServiceViewsOutput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The pagination token to use in a subsequent <code>ListServiceViews</code> request to retrieve the next set of results.</p>"
+        },
+        "ServiceViews":{
+          "shape":"ServiceViewArnList",
+          "documentation":"<p>A list of Amazon Resource Names (ARNs) for the service views available in the current Amazon Web Services account.</p>"
+        }
+      }
+    },
+    "ListStreamingAccessForServicesInput":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"ListStreamingAccessForServicesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of streaming access entries to return in the response. If there are more results available, the response includes a NextToken value that you can use in a subsequent call to get the next set of results. The value must be between 1 and 50. If you don't specify a value, the default is 50.</p>"
         },
         "NextToken":{
           "shape":"String",
@@ -1105,22 +1554,55 @@
         }
       }
     },
-    "ListSupportedResourceTypesInputMaxResultsInteger":{
+    "ListStreamingAccessForServicesInputMaxResultsInteger":{
       "type":"integer",
       "box":true,
-      "max":1000,
+      "max":50,
       "min":1
     },
-    "ListSupportedResourceTypesOutput":{
+    "ListStreamingAccessForServicesOutput":{
       "type":"structure",
+      "required":["StreamingAccessForServices"],
       "members":{
+        "StreamingAccessForServices":{
+          "shape":"StreamingAccessDetailsList",
+          "documentation":"<p>A list of Amazon Web Services services that have streaming access to your Resource Explorer data, including details about when the access was granted.</p>"
+        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
+        }
+      }
+    },
+    "ListSupportedResourceTypesInput":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
         },
+        "MaxResults":{
+          "shape":"ListSupportedResourceTypesInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
+        }
+      }
+    },
+    "ListSupportedResourceTypesInputMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListSupportedResourceTypesOutput":{
+      "type":"structure",
+      "members":{
         "ResourceTypes":{
           "shape":"ResourceTypeList",
           "documentation":"<p>The list of resource types supported by Resource Explorer.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
         }
       }
     },
@@ -1148,13 +1630,13 @@
     "ListViewsInput":{
       "type":"structure",
       "members":{
-        "MaxResults":{
-          "shape":"ListViewsInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
-        },
         "NextToken":{
           "shape":"String",
           "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
+        },
+        "MaxResults":{
+          "shape":"ListViewsInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
         }
       }
     },
@@ -1167,13 +1649,13 @@
     "ListViewsOutput":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"String",
-          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
-        },
         "Views":{
           "shape":"ViewArnList",
           "documentation":"<p>The list of views available in the Amazon Web Services Region in which you called this operation.</p>"
+        },
+        "NextToken":{
+          "shape":"String",
+          "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
         }
       }
     },
@@ -1184,15 +1666,6 @@
     "ManagedView":{
       "type":"structure",
       "members":{
-        "Filters":{"shape":"SearchFilter"},
-        "IncludedProperties":{
-          "shape":"IncludedPropertyList",
-          "documentation":"<p>A structure that contains additional information about the managed view.</p>"
-        },
-        "LastUpdatedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time when this managed view was last modified.</p>"
-        },
         "ManagedViewArn":{
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the managed view.</p>"
@@ -1201,21 +1674,30 @@
           "shape":"String",
           "documentation":"<p>The name of the managed view. </p>"
         },
-        "Owner":{
+        "TrustedService":{
           "shape":"String",
-          "documentation":"<p>The Amazon Web Services account that owns this managed view.</p>"
+          "documentation":"<p>The service principal of the Amazon Web Services service that created and manages the managed view. </p>"
         },
-        "ResourcePolicy":{
+        "LastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when this managed view was last modified.</p>"
+        },
+        "Owner":{
           "shape":"String",
-          "documentation":"<p>The resource policy that defines access to the managed view. To learn more about this policy, review <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/aws-managed-views.html\">Managed views</a>.</p>"
+          "documentation":"<p>The Amazon Web Services account that owns this managed view.</p>"
         },
         "Scope":{
           "shape":"String",
           "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of an Amazon Web Services account or organization that specifies whether this managed view includes resources from only the specified Amazon Web Services account or all accounts in the specified organization. </p>"
         },
-        "TrustedService":{
+        "IncludedProperties":{
+          "shape":"IncludedPropertyList",
+          "documentation":"<p>A structure that contains additional information about the managed view.</p>"
+        },
+        "Filters":{"shape":"SearchFilter"},
+        "ResourcePolicy":{
           "shape":"String",
-          "documentation":"<p>The service principal of the Amazon Web Services service that created and manages the managed view. </p>"
+          "documentation":"<p>The resource policy that defines access to the managed view. To learn more about this policy, review <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/aws-managed-views.html\">Managed views</a>.</p>"
         },
         "Version":{
           "shape":"String",
@@ -1235,14 +1717,14 @@
           "shape":"String",
           "documentation":"<p>The account ID for the index.</p>"
         },
-        "Arn":{
-          "shape":"String",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index.</p>"
-        },
         "Region":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services Region in which the index exists.</p>"
         },
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index.</p>"
+        },
         "Type":{
           "shape":"IndexType",
           "documentation":"<p>The type of index. It can be one of the following values: </p> <ul> <li> <p> <code>LOCAL</code> – The index contains information about resources from only the same Amazon Web Services Region.</p> </li> <li> <p> <code>AGGREGATOR</code> – Resource Explorer replicates copies of the indexed information about resources in all other Amazon Web Services Regions to the aggregator index. This lets search results in the Region with the aggregator index to include resources from all Regions in the account where Resource Explorer is turned on.</p> </li> </ul>"
@@ -1254,6 +1736,15 @@
       "type":"list",
       "member":{"shape":"MemberIndex"}
     },
+    "OperationStatus":{
+      "type":"string",
+      "enum":[
+        "SUCCEEDED",
+        "FAILED",
+        "IN_PROGRESS",
+        "SKIPPED"
+      ]
+    },
     "OrgConfiguration":{
       "type":"structure",
       "required":["AWSServiceAccessStatus"],
@@ -1277,7 +1768,37 @@
     },
     "RegionList":{
       "type":"list",
-      "member":{"shape":"String"}
+      "member":{"shape":"RegionListMemberString"}
+    },
+    "RegionListMemberString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
+    },
+    "RegionStatus":{
+      "type":"structure",
+      "members":{
+        "Region":{
+          "shape":"RegionStatusRegionString",
+          "documentation":"<p>The Amazon Web Services Region for which this status information applies.</p>"
+        },
+        "Index":{
+          "shape":"IndexStatus",
+          "documentation":"<p>The status information for the Resource Explorer index in this Region.</p>"
+        },
+        "View":{
+          "shape":"ViewStatus",
+          "documentation":"<p>The status information for the Resource Explorer view in this Region.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the status of Resource Explorer configuration in a specific Amazon Web Services Region.</p>"
+    },
+    "RegionStatusList":{
+      "type":"list",
+      "member":{"shape":"RegionStatus"}
+    },
+    "RegionStatusRegionString":{
+      "type":"string",
+      "pattern":"[a-z-]+-[a-z]+-[0-9]"
     },
     "Resource":{
       "type":"structure",
@@ -1286,18 +1807,10 @@
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the resource.</p>"
         },
-        "LastReportedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and time that Resource Explorer last queried this resource and updated the index with the latest information about the resource.</p>"
-        },
         "OwningAccountId":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services account that owns the resource.</p>"
         },
-        "Properties":{
-          "shape":"ResourcePropertyList",
-          "documentation":"<p>A structure with additional type-specific details about the resource. These properties can be added by turning on integration between Resource Explorer and other Amazon Web Services services.</p>"
-        },
         "Region":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services Region in which the resource was created and exists.</p>"
@@ -1309,6 +1822,14 @@
         "Service":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services service that owns the resource and is responsible for creating and updating it.</p>"
+        },
+        "LastReportedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time that Resource Explorer last queried this resource and updated the index with the latest information about the resource.</p>"
+        },
+        "Properties":{
+          "shape":"ResourcePropertyList",
+          "documentation":"<p>A structure with additional type-specific details about the resource. These properties can be added by turning on integration between Resource Explorer and other Amazon Web Services services.</p>"
         }
       },
       "documentation":"<p>A resource in Amazon Web Services that Amazon Web Services Resource Explorer has discovered, and for which it has stored information in the index of the Amazon Web Services Region that contains the resource.</p>"
@@ -1316,13 +1837,13 @@
     "ResourceCount":{
       "type":"structure",
       "members":{
-        "Complete":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the <code>TotalResources</code> value represents an exhaustive count of search results.</p> <ul> <li> <p>If <code>True</code>, it indicates that the search was exhaustive. Every resource that matches the query was counted.</p> </li> <li> <p>If <code>False</code>, then the search reached the limit of 1,000 matching results, and stopped counting.</p> </li> </ul>"
-        },
         "TotalResources":{
           "shape":"Long",
           "documentation":"<p>The number of resources that match the search query. This value can't exceed 1,000. If there are more than 1,000 resources that match the query, then only 1,000 are counted and the <code>Complete</code> field is set to false. We recommend that you refine your query to return a smaller number of results.</p>"
+        },
+        "Complete":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the <code>TotalResources</code> value represents an exhaustive count of search results.</p> <ul> <li> <p>If <code>True</code>, it indicates that the search was exhaustive. Every resource that matches the query was counted.</p> </li> <li> <p>If <code>False</code>, then the search reached the limit of 1,000 matching results, and stopped counting.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Information about the number of results that match the query. At this time, Amazon Web Services Resource Explorer doesn't count more than 1,000 matches for any query. This structure provides information about whether the query exceeded this limit.</p> <p>This field is included in every page when you paginate the results.</p>"
@@ -1346,17 +1867,17 @@
     "ResourceProperty":{
       "type":"structure",
       "members":{
-        "Data":{
-          "shape":"Document",
-          "documentation":"<p>Details about this property. The content of this field is a JSON object that varies based on the resource type.</p>"
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of this property of the resource.</p>"
         },
         "LastReportedAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time that the information about this resource property was last updated.</p>"
         },
-        "Name":{
-          "shape":"String",
-          "documentation":"<p>The name of this property of the resource.</p>"
+        "Data":{
+          "shape":"Document",
+          "documentation":"<p>Details about this property. The content of this field is a JSON object that varies based on the resource type.</p>"
         }
       },
       "documentation":"<p>A structure that describes a property of a resource.</p>"
@@ -1390,21 +1911,21 @@
       "type":"structure",
       "required":["QueryString"],
       "members":{
-        "MaxResults":{
-          "shape":"SearchInputMaxResultsInteger",
-          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
-        },
-        "NextToken":{
-          "shape":"SearchInputNextTokenString",
-          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
-        },
         "QueryString":{
           "shape":"QueryString",
           "documentation":"<p>A string that includes keywords and filters that specify the resources that you want to include in the results.</p> <p>For the complete syntax supported by the <code>QueryString</code> parameter, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query syntax reference for Resource Explorer</a>.</p> <p>The search is completely case insensitive. You can specify an empty string to return all results up to the limit of 1,000 total results.</p> <note> <p>The operation can return only the first 1,000 results. If the resource you want is not included, then use a different value for <code>QueryString</code> to refine the results.</p> </note>"
         },
+        "MaxResults":{
+          "shape":"SearchInputMaxResultsInteger",
+          "documentation":"<p>The maximum number of results that you want included on each page of the response. If you do not include this parameter, it defaults to a value appropriate to the operation. If additional items exist beyond those included in the current response, the <code>NextToken</code> response element is present and has a value (is not null). Include that value as the <code>NextToken</code> request parameter in the next call to the operation to get the next part of the results.</p> <note> <p>An API operation can return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p> </note>"
+        },
         "ViewArn":{
           "shape":"SearchInputViewArnString",
           "documentation":"<p>Specifies the <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view to use for the query. If you don't specify a value for this parameter, then the operation automatically uses the default view for the Amazon Web Services Region in which you called this operation. If the Region either doesn't have a default view or if you don't have permission to use the default view, then the operation fails with a <code>401 Unauthorized</code> exception.</p>"
+        },
+        "NextToken":{
+          "shape":"SearchInputNextTokenString",
+          "documentation":"<p>The parameter for receiving additional results if you receive a <code>NextToken</code> response in a previous request. A <code>NextToken</code> response indicates that more output is available. Set this parameter to the value of the previous call's <code>NextToken</code> response to indicate where the output should continue from. The pagination tokens expire after 24 hours.</p>"
         }
       }
     },
@@ -1427,21 +1948,21 @@
     "SearchOutput":{
       "type":"structure",
       "members":{
-        "Count":{
-          "shape":"ResourceCount",
-          "documentation":"<p>The number of resources that match the query.</p>"
+        "Resources":{
+          "shape":"ResourceList",
+          "documentation":"<p>The list of structures that describe the resources that match the query.</p>"
         },
         "NextToken":{
           "shape":"SearchOutputNextTokenString",
           "documentation":"<p>If present, indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. The pagination tokens expire after 24 hours.</p>"
         },
-        "Resources":{
-          "shape":"ResourceList",
-          "documentation":"<p>The list of structures that describe the resources that match the query.</p>"
-        },
         "ViewArn":{
           "shape":"SearchOutputViewArnString",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view that this operation used to perform the search.</p>"
+        },
+        "Count":{
+          "shape":"ResourceCount",
+          "documentation":"<p>The number of resources that match the query.</p>"
         }
       }
     },
@@ -1480,6 +2001,56 @@
       },
       "exception":true
     },
+    "ServiceView":{
+      "type":"structure",
+      "required":["ServiceViewArn"],
+      "members":{
+        "ServiceViewArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service view.</p>"
+        },
+        "Filters":{"shape":"SearchFilter"},
+        "IncludedProperties":{
+          "shape":"IncludedPropertyList",
+          "documentation":"<p>A list of additional resource properties that are included in this view for search and filtering purposes.</p>"
+        },
+        "StreamingAccessForService":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services service that has streaming access to this view's data.</p>"
+        },
+        "ScopeType":{
+          "shape":"String",
+          "documentation":"<p>The scope type of the service view, which determines what resources are included.</p>"
+        }
+      },
+      "documentation":"<p>Contains the configuration and properties of a Resource Explorer service view.</p>"
+    },
+    "ServiceViewArnList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "StreamingAccessDetails":{
+      "type":"structure",
+      "required":[
+        "ServicePrincipal",
+        "CreatedAt"
+      ],
+      "members":{
+        "ServicePrincipal":{
+          "shape":"String",
+          "documentation":"<p>The service principal of the Amazon Web Services service that has streaming access to your Resource Explorer data. A service principal is a unique identifier for an Amazon Web Services service.</p>"
+        },
+        "CreatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and time when streaming access was granted to the Amazon Web Services service, in ISO 8601 format.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about an Amazon Web Services service that has been granted streaming access to your Resource Explorer data.</p>"
+    },
+    "StreamingAccessDetailsList":{
+      "type":"list",
+      "member":{"shape":"StreamingAccessDetails"}
+    },
     "String":{"type":"string"},
     "StringList":{
       "type":"list",
@@ -1489,13 +2060,13 @@
     "SupportedResourceType":{
       "type":"structure",
       "members":{
-        "ResourceType":{
-          "shape":"String",
-          "documentation":"<p>The unique identifier of the resource type.</p>"
-        },
         "Service":{
           "shape":"String",
           "documentation":"<p>The Amazon Web Services service that is associated with the resource type. This is the primary service that lets you create and interact with resources of this type.</p>"
+        },
+        "ResourceType":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the resource type.</p>"
         }
       },
       "documentation":"<p>A structure that describes a resource type supported by Amazon Web Services Resource Explorer.</p>"
@@ -1514,22 +2085,21 @@
       "type":"structure",
       "required":["resourceArn"],
       "members":{
-        "Tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A list of tag key and value pairs that you want to attach to the specified view or index.</p>"
-        },
         "resourceArn":{
           "shape":"String",
           "documentation":"<p>The Amazon Resource Name (ARN) of the view or index that you want to attach tags to.</p>",
           "location":"uri",
           "locationName":"resourceArn"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>A list of tag key and value pairs that you want to attach to the specified view or index.</p>"
         }
       }
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ThrottlingException":{
       "type":"structure",
@@ -1578,8 +2148,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateIndexTypeInput":{
       "type":"structure",
@@ -1605,17 +2174,17 @@
           "shape":"String",
           "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the index that you updated.</p>"
         },
-        "LastUpdatedAt":{
-          "shape":"SyntheticTimestamp_date_time",
-          "documentation":"<p>The date and timestamp when the index was last updated.</p>"
+        "Type":{
+          "shape":"IndexType",
+          "documentation":"<p>Specifies the type of the specified index after the operation completes.</p>"
         },
         "State":{
           "shape":"IndexState",
           "documentation":"<p>Indicates the state of the request to update the index. This operation is asynchronous. Call the <a>GetIndex</a> operation to check for changes.</p>"
         },
-        "Type":{
-          "shape":"IndexType",
-          "documentation":"<p>Specifies the type of the specified index after the operation completes.</p>"
+        "LastUpdatedAt":{
+          "shape":"SyntheticTimestamp_date_time",
+          "documentation":"<p>The date and timestamp when the index was last updated.</p>"
         }
       }
     },
@@ -1623,17 +2192,17 @@
       "type":"structure",
       "required":["ViewArn"],
       "members":{
-        "Filters":{
-          "shape":"SearchFilter",
-          "documentation":"<p>An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a <a>Search</a> operation, the filter string is combined with the search's <code>QueryString</code> parameter using a logical <code>AND</code> operator.</p> <p>For information about the supported syntax, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query reference for Resource Explorer</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <important> <p>This query string in the context of this operation supports only <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-filters\">filter prefixes</a> with optional <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-operators\">operators</a>. It doesn't support free-form text. For example, the string <code>region:us* service:ec2 -tag:stage=prod</code> includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters <code>us</code> and is <i>not</i> tagged with a key <code>Stage</code> that has the value <code>prod</code>.</p> </important>"
+        "ViewArn":{
+          "shape":"UpdateViewInputViewArnString",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view that you want to modify.</p>"
         },
         "IncludedProperties":{
           "shape":"IncludedPropertyList",
           "documentation":"<p>Specifies optional fields that you want included in search results from this view. It is a list of objects that each describe a field to include.</p> <p>The default is an empty list, with no optional fields included in the results.</p>"
         },
-        "ViewArn":{
-          "shape":"UpdateViewInputViewArnString",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view that you want to modify.</p>"
+        "Filters":{
+          "shape":"SearchFilter",
+          "documentation":"<p>An array of strings that specify which resources are included in the results of queries made using this view. When you use this view in a <a>Search</a> operation, the filter string is combined with the search's <code>QueryString</code> parameter using a logical <code>AND</code> operator.</p> <p>For information about the supported syntax, see <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html\">Search query reference for Resource Explorer</a> in the <i>Amazon Web Services Resource Explorer User Guide</i>.</p> <important> <p>This query string in the context of this operation supports only <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-filters\">filter prefixes</a> with optional <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html#query-syntax-operators\">operators</a>. It doesn't support free-form text. For example, the string <code>region:us* service:ec2 -tag:stage=prod</code> includes all Amazon EC2 resources in any Amazon Web Services Region that begins with the letters <code>us</code> and is <i>not</i> tagged with a key <code>Stage</code> that has the value <code>prod</code>.</p> </important>"
         }
       }
     },
@@ -1655,11 +2224,11 @@
       "type":"structure",
       "required":["Message"],
       "members":{
+        "Message":{"shape":"String"},
         "FieldList":{
           "shape":"ValidationExceptionFieldList",
           "documentation":"<p>An array of the request fields that had validation errors.</p>"
-        },
-        "Message":{"shape":"String"}
+        }
       },
       "documentation":"<p>You provided an invalid value for one of the operation's parameters. Check the syntax for the operation, and try again.</p>",
       "error":{
@@ -1693,29 +2262,29 @@
     "View":{
       "type":"structure",
       "members":{
-        "Filters":{
-          "shape":"SearchFilter",
-          "documentation":"<p>An array of <a>SearchFilter</a> objects that specify which resources can be included in the results of queries made using this view.</p>"
+        "ViewArn":{
+          "shape":"String",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view.</p>"
         },
-        "IncludedProperties":{
-          "shape":"IncludedPropertyList",
-          "documentation":"<p>A structure that contains additional information about the view.</p>"
+        "Owner":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Web Services account that owns this view.</p>"
         },
         "LastUpdatedAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time when this view was last modified.</p>"
         },
-        "Owner":{
-          "shape":"String",
-          "documentation":"<p>The Amazon Web Services account that owns this view.</p>"
-        },
         "Scope":{
           "shape":"String",
           "documentation":"<p>An <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of an Amazon Web Services account, an organization, or an organizational unit (OU) that specifies whether this view includes resources from only the specified Amazon Web Services account, all accounts in the specified organization, or all accounts in the specified OU.</p> <p>If not specified, the value defaults to the Amazon Web Services account used to call this operation.</p>"
         },
-        "ViewArn":{
-          "shape":"String",
-          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">Amazon resource name (ARN)</a> of the view.</p>"
+        "IncludedProperties":{
+          "shape":"IncludedPropertyList",
+          "documentation":"<p>A structure that contains additional information about the view.</p>"
+        },
+        "Filters":{
+          "shape":"SearchFilter",
+          "documentation":"<p>An array of <a>SearchFilter</a> objects that specify which resources can be included in the results of queries made using this view.</p>"
         }
       },
       "documentation":"<p>A view is a structure that defines a set of filters that provide a view into the information in the Amazon Web Services Resource Explorer index. The filters specify which information from the index is visible to the users of the view. For example, you can specify filters that include only resources that are tagged with the key \"ENV\" and the value \"DEVELOPMENT\" in the results returned by this view. You could also create a second view that includes only resources that are tagged with \"ENV\" and \"PRODUCTION\".</p>"
@@ -1730,7 +2299,22 @@
     },
     "ViewName":{
       "type":"string",
-      "pattern":"^[a-zA-Z0-9\\-]{1,64}$"
+      "pattern":"[a-zA-Z0-9\\-]{1,64}"
+    },
+    "ViewStatus":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"OperationStatus",
+          "documentation":"<p>The current status of the view operation. Valid values are <code>SUCCEEDED</code>, <code>FAILED</code>, <code>IN_PROGRESS</code>, or <code>SKIPPED</code>.</p>"
+        },
+        "View":{"shape":"View"},
+        "ErrorDetails":{
+          "shape":"ErrorDetails",
+          "documentation":"<p>Details about any error that occurred during the view operation.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the status of a Resource Explorer view operation in a specific Region.</p>"
     }
   },
   "documentation":"<p>Amazon Web Services Resource Explorer is a resource search and discovery service. By using Resource Explorer, you can explore your resources using an internet search engine-like experience. Examples of resources include Amazon Relational Database Service (Amazon RDS) instances, Amazon Simple Storage Service (Amazon S3) buckets, or Amazon DynamoDB tables. You can search for your resources using resource metadata like names, tags, and IDs. Resource Explorer can search across all of the Amazon Web Services Regions in your account in which you turn the service on, to simplify your cross-Region workloads.</p> <p>Resource Explorer scans the resources in each of the Amazon Web Services Regions in your Amazon Web Services account in which you turn on Resource Explorer. Resource Explorer <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/getting-started-terms-and-concepts.html#term-index\">creates and maintains an index</a> in each Region, with the details of that Region's resources.</p> <p>You can <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-aggregator-region.html\">search across all of the indexed Regions in your account</a> by designating one of your Amazon Web Services Regions to contain the aggregator index for the account. When you <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/manage-aggregator-region-turn-on.html\">promote a local index in a Region to become the aggregator index for the account</a>, Resource Explorer automatically replicates the index information from all local indexes in the other Regions to the aggregator index. Therefore, the Region with the aggregator index has a copy of all resource information for all Regions in the account where you turned on Resource Explorer. As a result, views in the aggregator index Region include resources from all of the indexed Regions in your account.</p> <p>For more information about Amazon Web Services Resource Explorer, including how to enable and configure the service, see the <a href=\"https://docs.aws.amazon.com/resource-explorer/latest/userguide/\">Amazon Web Services Resource Explorer User Guide</a>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/waiters-2.json 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/resource-explorer-2/2022-07-28/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-explorer-2/2022-07-28/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-groups/2017-11-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/resource-groups/2017-11-27/service-2.json 2.31.35-1/awscli/botocore/data/resource-groups/2017-11-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/resource-groups/2017-11-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resource-groups/2017-11-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -316,7 +316,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"InternalServerErrorException"}
       ],
-      "documentation":"<p>Creates a new tag-sync task to onboard and sync resources tagged with a specific tag key-value pair to an application. </p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you must have the following permissions:</p> <ul> <li> <p> <code>resource-groups:StartTagSyncTask</code> on the application group</p> </li> <li> <p> <code>resource-groups:CreateGroup</code> </p> </li> <li> <p> <code>iam:PassRole</code> on the role provided in the request </p> </li> </ul>"
+      "documentation":"<p>Creates a new tag-sync task to onboard and sync resources tagged with a specific tag key-value pair to an application. To start a tag-sync task, you need a <a href=\"https://docs.aws.amazon.com/servicecatalog/latest/arguide/app-tag-sync.html#tag-sync-role\">resource tagging role</a>. The resource tagging role grants permissions to tag and untag applications resources and must include a trust policy that allows Resource Groups to assume the role and perform resource tagging tasks on your behalf. </p> <p>For instructions on creating a tag-sync task, see <a href=\"https://docs.aws.amazon.com/servicecatalog/latest/arguide/app-tag-sync.html#create-tag-sync\">Create a tag-sync using the Resource Groups API</a> in the <i>Amazon Web Services Service Catalog AppRegistry Administrator Guide</i>. </p> <p> <b>Minimum permissions</b> </p> <p>To run this command, you must have the following permissions:</p> <ul> <li> <p> <code>resource-groups:StartTagSyncTask</code> on the application group</p> </li> <li> <p> <code>resource-groups:CreateGroup</code> </p> </li> <li> <p> <code>iam:PassRole</code> on the role provided in the request </p> </li> </ul>"
     },
     "Tag":{
       "name":"Tag",
@@ -733,6 +733,7 @@
           "shape":"TagValue",
           "documentation":"<p>The tag value. </p>"
         },
+        "ResourceQuery":{"shape":"ResourceQuery"},
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The Amazon resource name (ARN) of the role assumed by Resource Groups to tag and untag resources on your behalf. </p> <p>For more information about this role, review <a href=\"https://docs.aws.amazon.com/servicecatalog/latest/arguide/app-tag-sync.html#tag-sync-role\">Tag-sync required permissions</a>. </p>"
@@ -1297,7 +1298,7 @@
       "members":{
         "Filters":{
           "shape":"GroupFilterList",
-          "documentation":"<p>Filters, formatted as <a>GroupFilter</a> objects, that you want to apply to a <code>ListGroups</code> operation.</p> <ul> <li> <p> <code>resource-type</code> - Filter the results to include only those resource groups that have the specified resource type in their <code>ResourceTypeFilter</code>. For example, <code>AWS::EC2::Instance</code> would return any resource group with a <code>ResourceTypeFilter</code> that includes <code>AWS::EC2::Instance</code>.</p> </li> <li> <p> <code>configuration-type</code> - Filter the results to include only those groups that have the specified configuration types attached. The current supported values are:</p> <ul> <li> <p> <code>AWS::ResourceGroups::ApplicationGroup</code> </p> </li> <li> <p> <code>AWS::AppRegistry::Application</code> </p> </li> <li> <p> <code>AWS::AppRegistry::ApplicationResourceGroups</code> </p> </li> <li> <p> <code>AWS::CloudFormation::Stack</code> </p> </li> <li> <p> <code>AWS::EC2::CapacityReservationPool</code> </p> </li> <li> <p> <code>AWS::EC2::HostManagement</code> </p> </li> <li> <p> <code>AWS::NetworkFirewall::RuleGroup</code> </p> </li> </ul> </li> </ul>"
+          "documentation":"<p>Filters, formatted as <a>GroupFilter</a> objects, that you want to apply to a <code>ListGroups</code> operation.</p> <ul> <li> <p> <code>resource-type</code> - Filter the results to include only those resource groups that have the specified resource type in their <code>ResourceTypeFilter</code>. For example, <code>AWS::EC2::Instance</code> would return any resource group with a <code>ResourceTypeFilter</code> that includes <code>AWS::EC2::Instance</code>.</p> </li> <li> <p> <code>configuration-type</code> - Filter the results to include only those groups that have the specified configuration types attached. The current supported values are:</p> <ul> <li> <p> <code>AWS::ResourceGroups::ApplicationGroup</code> </p> </li> <li> <p> <code>AWS::AppRegistry::Application</code> </p> </li> <li> <p> <code>AWS::AppRegistry::ApplicationResourceGroup</code> </p> </li> <li> <p> <code>AWS::CloudFormation::Stack</code> </p> </li> <li> <p> <code>AWS::EC2::CapacityReservationPool</code> </p> </li> <li> <p> <code>AWS::EC2::HostManagement</code> </p> </li> <li> <p> <code>AWS::NetworkFirewall::RuleGroup</code> </p> </li> </ul> </li> </ul>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -1444,8 +1445,7 @@
     },
     "PutGroupConfigurationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Query":{
       "type":"string",
@@ -1637,8 +1637,6 @@
       "type":"structure",
       "required":[
         "Group",
-        "TagKey",
-        "TagValue",
         "RoleArn"
       ],
       "members":{
@@ -1648,11 +1646,15 @@
         },
         "TagKey":{
           "shape":"TagKey",
-          "documentation":"<p>The tag key. Resources tagged with this tag key-value pair will be added to the application. If a resource with this tag is later untagged, the tag-sync task removes the resource from the application. </p>"
+          "documentation":"<p>The tag key. Resources tagged with this tag key-value pair will be added to the application. If a resource with this tag is later untagged, the tag-sync task removes the resource from the application. </p> <p>When using the <code>TagKey</code> parameter, you must also specify the <code>TagValue</code> parameter. If you specify a tag key-value pair, you can't use the <code>ResourceQuery</code> parameter. </p>"
         },
         "TagValue":{
           "shape":"TagValue",
-          "documentation":"<p>The tag value. Resources tagged with this tag key-value pair will be added to the application. If a resource with this tag is later untagged, the tag-sync task removes the resource from the application. </p>"
+          "documentation":"<p>The tag value. Resources tagged with this tag key-value pair will be added to the application. If a resource with this tag is later untagged, the tag-sync task removes the resource from the application. </p> <p>When using the <code>TagValue</code> parameter, you must also specify the <code>TagKey</code> parameter. If you specify a tag key-value pair, you can't use the <code>ResourceQuery</code> parameter. </p>"
+        },
+        "ResourceQuery":{
+          "shape":"ResourceQuery",
+          "documentation":"<p>The query you can use to create the tag-sync task. With this method, all resources matching the query are added to the specified application group. A <code>ResourceQuery</code> specifies both a query <code>Type</code> and a <code>Query</code> string as JSON string objects. For more information on defining a resource query for a tag-sync task, see the tag-based query type in <a href=\"https://docs.aws.amazon.com/ARG/latest/userguide/gettingstarted-query.html#getting_started-query_types\"> Types of resource group queries</a> in <i>Resource Groups User Guide</i>. </p> <p>When using the <code>ResourceQuery</code> parameter, you cannot use the <code>TagKey</code> and <code>TagValue</code> parameters. </p> <p>When you combine all of the elements together into a single string, any double quotes that are embedded inside another double quote pair must be escaped by preceding the embedded double quote with a backslash character (\\). For example, a complete <code>ResourceQuery</code> parameter must be formatted like the following CLI parameter example:</p> <p> <code>--resource-query '{\"Type\":\"TAG_FILTERS_1_0\",\"Query\":\"{\\\"ResourceTypeFilters\\\":[\\\"AWS::AllSupported\\\"],\\\"TagFilters\\\":[{\\\"Key\\\":\\\"Stage\\\",\\\"Values\\\":[\\\"Test\\\"]}]}\"}'</code> </p> <p>In the preceding example, all of the double quote characters in the value part of the <code>Query</code> element must be escaped because the value itself is surrounded by double quotes. For more information, see <a href=\"https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html\">Quoting strings</a> in the <i>Command Line Interface User Guide</i>.</p> <p>For the complete list of resource types that you can use in the array value for <code>ResourceTypeFilters</code>, see <a href=\"https://docs.aws.amazon.com/ARG/latest/userguide/supported-resources.html\">Resources you can use with Resource Groups and Tag Editor</a> in the <i>Resource Groups User Guide</i>. For example:</p> <p> <code>\"ResourceTypeFilters\":[\"AWS::S3::Bucket\", \"AWS::EC2::Instance\"]</code> </p>"
         },
         "RoleArn":{
           "shape":"RoleArn",
@@ -1683,6 +1685,7 @@
           "shape":"TagValue",
           "documentation":"<p>The tag value of the tag-sync task. </p>"
         },
+        "ResourceQuery":{"shape":"ResourceQuery"},
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The Amazon resource name (ARN) of the role assumed by the service to tag and untag resources on your behalf.</p>"
@@ -1760,6 +1763,7 @@
           "shape":"TagValue",
           "documentation":"<p>The tag value. </p>"
         },
+        "ResourceQuery":{"shape":"ResourceQuery"},
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The Amazon resource name (ARN) of the role assumed by the service to tag and untag resources on your behalf.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json 2.31.35-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/resourcegroupstaggingapi/2017-01-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"tagging",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Resource Groups Tagging API",
     "serviceId":"Resource Groups Tagging API",
     "signatureVersion":"v4",
     "targetPrefix":"ResourceGroupsTaggingAPI_20170126",
-    "uid":"resourcegroupstaggingapi-2017-01-26"
+    "uid":"resourcegroupstaggingapi-2017-01-26",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DescribeReportCreation":{
@@ -184,8 +186,7 @@
     },
     "DescribeReportCreationInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeReportCreationOutput":{
       "type":"structure",
@@ -513,8 +514,7 @@
     },
     "StartReportCreationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Status":{"type":"string"},
     "StatusCode":{"type":"integer"},
diff -pruN 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseDualStack"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "aws.partition",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ],
-                            "assign": "PartitionResult"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://robomaker-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://robomaker-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                true,
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsDualStack"
-                                                    ]
-                                                }
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://robomaker.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://robomaker.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ],
-                    "type": "tree"
-                }
-            ],
-            "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/paginators-1.json 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-{
-  "pagination": {
-    "ListDeploymentJobs": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "deploymentJobs"
-    },
-    "ListFleets": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "fleetDetails"
-    },
-    "ListRobotApplications": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "robotApplicationSummaries"
-    },
-    "ListRobots": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "robots"
-    },
-    "ListSimulationApplications": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "simulationApplicationSummaries"
-    },
-    "ListSimulationJobs": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "simulationJobSummaries"
-    },
-    "ListSimulationJobBatches": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "simulationJobBatchSummaries"
-    },
-    "ListWorldExportJobs": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "worldExportJobSummaries"
-    },
-    "ListWorldGenerationJobs": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "worldGenerationJobSummaries"
-    },
-    "ListWorldTemplates": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "templateSummaries"
-    },
-    "ListWorlds": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "worldSummaries"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/service-2.json 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/robomaker/2018-06-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/robomaker/2018-06-29/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,5493 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2018-06-29",
-    "endpointPrefix":"robomaker",
-    "jsonVersion":"1.1",
-    "protocol":"rest-json",
-    "protocols":["rest-json"],
-    "serviceAbbreviation":"RoboMaker",
-    "serviceFullName":"AWS RoboMaker",
-    "serviceId":"RoboMaker",
-    "signatureVersion":"v4",
-    "signingName":"robomaker",
-    "uid":"robomaker-2018-06-29",
-    "auth":["aws.auth#sigv4"]
-  },
-  "operations":{
-    "BatchDeleteWorlds":{
-      "name":"BatchDeleteWorlds",
-      "http":{
-        "method":"POST",
-        "requestUri":"/batchDeleteWorlds"
-      },
-      "input":{"shape":"BatchDeleteWorldsRequest"},
-      "output":{"shape":"BatchDeleteWorldsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Deletes one or more worlds in a batch operation.</p>"
-    },
-    "BatchDescribeSimulationJob":{
-      "name":"BatchDescribeSimulationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/batchDescribeSimulationJob"
-      },
-      "input":{"shape":"BatchDescribeSimulationJobRequest"},
-      "output":{"shape":"BatchDescribeSimulationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes one or more simulation jobs.</p>"
-    },
-    "CancelDeploymentJob":{
-      "name":"CancelDeploymentJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/cancelDeploymentJob"
-      },
-      "input":{"shape":"CancelDeploymentJobRequest"},
-      "output":{"shape":"CancelDeploymentJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Cancels the specified deployment job.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CancelSimulationJob":{
-      "name":"CancelSimulationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/cancelSimulationJob"
-      },
-      "input":{"shape":"CancelSimulationJobRequest"},
-      "output":{"shape":"CancelSimulationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Cancels the specified simulation job.</p>"
-    },
-    "CancelSimulationJobBatch":{
-      "name":"CancelSimulationJobBatch",
-      "http":{
-        "method":"POST",
-        "requestUri":"/cancelSimulationJobBatch"
-      },
-      "input":{"shape":"CancelSimulationJobBatchRequest"},
-      "output":{"shape":"CancelSimulationJobBatchResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Cancels a simulation job batch. When you cancel a simulation job batch, you are also cancelling all of the active simulation jobs created as part of the batch. </p>"
-    },
-    "CancelWorldExportJob":{
-      "name":"CancelWorldExportJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/cancelWorldExportJob"
-      },
-      "input":{"shape":"CancelWorldExportJobRequest"},
-      "output":{"shape":"CancelWorldExportJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Cancels the specified export job.</p>"
-    },
-    "CancelWorldGenerationJob":{
-      "name":"CancelWorldGenerationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/cancelWorldGenerationJob"
-      },
-      "input":{"shape":"CancelWorldGenerationJobRequest"},
-      "output":{"shape":"CancelWorldGenerationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Cancels the specified world generator job.</p>"
-    },
-    "CreateDeploymentJob":{
-      "name":"CreateDeploymentJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createDeploymentJob"
-      },
-      "input":{"shape":"CreateDeploymentJobRequest"},
-      "output":{"shape":"CreateDeploymentJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ConcurrentDeploymentException"},
-        {"shape":"IdempotentParameterMismatchException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported and will throw an error if used. For more information, see the January 31, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-january2022\">Support policy</a> page.</p> </important> <p>Deploys a specific version of a robot application to robots in a fleet.</p> <p>The robot application must have a numbered <code>applicationVersion</code> for consistency reasons. To create a new version, use <code>CreateRobotApplicationVersion</code> or see <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/create-robot-application-version.html\">Creating a Robot Application Version</a>. </p> <note> <p>After 90 days, deployment jobs expire and will be deleted. They will no longer be accessible. </p> </note>",
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateFleet":{
-      "name":"CreateFleet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createFleet"
-      },
-      "input":{"shape":"CreateFleetRequest"},
-      "output":{"shape":"CreateFleetResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported and will throw an error if used. For more information, see the January 31, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-january2022\">Support policy</a> page.</p> </important> <p>Creates a fleet, a logical group of robots running the same robot application.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateRobot":{
-      "name":"CreateRobot",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createRobot"
-      },
-      "input":{"shape":"CreateRobotRequest"},
-      "output":{"shape":"CreateRobotResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ResourceAlreadyExistsException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported and will throw an error if used. For more information, see the January 31, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-january2022\">Support policy</a> page.</p> </important> <p>Creates a robot.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateRobotApplication":{
-      "name":"CreateRobotApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createRobotApplication"
-      },
-      "input":{"shape":"CreateRobotApplicationRequest"},
-      "output":{"shape":"CreateRobotApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceAlreadyExistsException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"IdempotentParameterMismatchException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a robot application. </p>"
-    },
-    "CreateRobotApplicationVersion":{
-      "name":"CreateRobotApplicationVersion",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createRobotApplicationVersion"
-      },
-      "input":{"shape":"CreateRobotApplicationVersionRequest"},
-      "output":{"shape":"CreateRobotApplicationVersionResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a version of a robot application.</p>"
-    },
-    "CreateSimulationApplication":{
-      "name":"CreateSimulationApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createSimulationApplication"
-      },
-      "input":{"shape":"CreateSimulationApplicationRequest"},
-      "output":{"shape":"CreateSimulationApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceAlreadyExistsException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
-        {"shape":"IdempotentParameterMismatchException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a simulation application.</p>"
-    },
-    "CreateSimulationApplicationVersion":{
-      "name":"CreateSimulationApplicationVersion",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createSimulationApplicationVersion"
-      },
-      "input":{"shape":"CreateSimulationApplicationVersionRequest"},
-      "output":{"shape":"CreateSimulationApplicationVersionResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a simulation application with a specific revision id.</p>"
-    },
-    "CreateSimulationJob":{
-      "name":"CreateSimulationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createSimulationJob"
-      },
-      "input":{"shape":"CreateSimulationJobRequest"},
-      "output":{"shape":"CreateSimulationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"ServiceUnavailableException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a simulation job.</p> <note> <p>After 90 days, simulation jobs expire and will be deleted. They will no longer be accessible. </p> </note>"
-    },
-    "CreateWorldExportJob":{
-      "name":"CreateWorldExportJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createWorldExportJob"
-      },
-      "input":{"shape":"CreateWorldExportJobRequest"},
-      "output":{"shape":"CreateWorldExportJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"ServiceUnavailableException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a world export job.</p>"
-    },
-    "CreateWorldGenerationJob":{
-      "name":"CreateWorldGenerationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createWorldGenerationJob"
-      },
-      "input":{"shape":"CreateWorldGenerationJobRequest"},
-      "output":{"shape":"CreateWorldGenerationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"ServiceUnavailableException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates worlds using the specified template.</p>"
-    },
-    "CreateWorldTemplate":{
-      "name":"CreateWorldTemplate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/createWorldTemplate"
-      },
-      "input":{"shape":"CreateWorldTemplateRequest"},
-      "output":{"shape":"CreateWorldTemplateResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceAlreadyExistsException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Creates a world template.</p>"
-    },
-    "DeleteFleet":{
-      "name":"DeleteFleet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deleteFleet"
-      },
-      "input":{"shape":"DeleteFleetRequest"},
-      "output":{"shape":"DeleteFleetResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Deletes a fleet.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteRobot":{
-      "name":"DeleteRobot",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deleteRobot"
-      },
-      "input":{"shape":"DeleteRobotRequest"},
-      "output":{"shape":"DeleteRobotResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Deletes a robot.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteRobotApplication":{
-      "name":"DeleteRobotApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deleteRobotApplication"
-      },
-      "input":{"shape":"DeleteRobotApplicationRequest"},
-      "output":{"shape":"DeleteRobotApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Deletes a robot application.</p>"
-    },
-    "DeleteSimulationApplication":{
-      "name":"DeleteSimulationApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deleteSimulationApplication"
-      },
-      "input":{"shape":"DeleteSimulationApplicationRequest"},
-      "output":{"shape":"DeleteSimulationApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Deletes a simulation application.</p>"
-    },
-    "DeleteWorldTemplate":{
-      "name":"DeleteWorldTemplate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deleteWorldTemplate"
-      },
-      "input":{"shape":"DeleteWorldTemplateRequest"},
-      "output":{"shape":"DeleteWorldTemplateResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Deletes a world template.</p>"
-    },
-    "DeregisterRobot":{
-      "name":"DeregisterRobot",
-      "http":{
-        "method":"POST",
-        "requestUri":"/deregisterRobot"
-      },
-      "input":{"shape":"DeregisterRobotRequest"},
-      "output":{"shape":"DeregisterRobotResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Deregisters a robot.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeDeploymentJob":{
-      "name":"DescribeDeploymentJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeDeploymentJob"
-      },
-      "input":{"shape":"DescribeDeploymentJobRequest"},
-      "output":{"shape":"DescribeDeploymentJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Describes a deployment job.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeFleet":{
-      "name":"DescribeFleet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeFleet"
-      },
-      "input":{"shape":"DescribeFleetRequest"},
-      "output":{"shape":"DescribeFleetResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Describes a fleet.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeRobot":{
-      "name":"DescribeRobot",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeRobot"
-      },
-      "input":{"shape":"DescribeRobotRequest"},
-      "output":{"shape":"DescribeRobotResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p>Describes a robot.</p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeRobotApplication":{
-      "name":"DescribeRobotApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeRobotApplication"
-      },
-      "input":{"shape":"DescribeRobotApplicationRequest"},
-      "output":{"shape":"DescribeRobotApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a robot application.</p>"
-    },
-    "DescribeSimulationApplication":{
-      "name":"DescribeSimulationApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeSimulationApplication"
-      },
-      "input":{"shape":"DescribeSimulationApplicationRequest"},
-      "output":{"shape":"DescribeSimulationApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a simulation application.</p>"
-    },
-    "DescribeSimulationJob":{
-      "name":"DescribeSimulationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeSimulationJob"
-      },
-      "input":{"shape":"DescribeSimulationJobRequest"},
-      "output":{"shape":"DescribeSimulationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a simulation job.</p>"
-    },
-    "DescribeSimulationJobBatch":{
-      "name":"DescribeSimulationJobBatch",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeSimulationJobBatch"
-      },
-      "input":{"shape":"DescribeSimulationJobBatchRequest"},
-      "output":{"shape":"DescribeSimulationJobBatchResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a simulation job batch.</p>"
-    },
-    "DescribeWorld":{
-      "name":"DescribeWorld",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeWorld"
-      },
-      "input":{"shape":"DescribeWorldRequest"},
-      "output":{"shape":"DescribeWorldResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a world.</p>"
-    },
-    "DescribeWorldExportJob":{
-      "name":"DescribeWorldExportJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeWorldExportJob"
-      },
-      "input":{"shape":"DescribeWorldExportJobRequest"},
-      "output":{"shape":"DescribeWorldExportJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a world export job.</p>"
-    },
-    "DescribeWorldGenerationJob":{
-      "name":"DescribeWorldGenerationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeWorldGenerationJob"
-      },
-      "input":{"shape":"DescribeWorldGenerationJobRequest"},
-      "output":{"shape":"DescribeWorldGenerationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a world generation job.</p>"
-    },
-    "DescribeWorldTemplate":{
-      "name":"DescribeWorldTemplate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/describeWorldTemplate"
-      },
-      "input":{"shape":"DescribeWorldTemplateRequest"},
-      "output":{"shape":"DescribeWorldTemplateResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Describes a world template.</p>"
-    },
-    "GetWorldTemplateBody":{
-      "name":"GetWorldTemplateBody",
-      "http":{
-        "method":"POST",
-        "requestUri":"/getWorldTemplateBody"
-      },
-      "input":{"shape":"GetWorldTemplateBodyRequest"},
-      "output":{"shape":"GetWorldTemplateBodyResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Gets the world template body.</p>"
-    },
-    "ListDeploymentJobs":{
-      "name":"ListDeploymentJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listDeploymentJobs"
-      },
-      "input":{"shape":"ListDeploymentJobsRequest"},
-      "output":{"shape":"ListDeploymentJobsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p> Returns a list of deployment jobs for a fleet. You can optionally provide filters to retrieve specific deployment jobs. </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListFleets":{
-      "name":"ListFleets",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listFleets"
-      },
-      "input":{"shape":"ListFleetsRequest"},
-      "output":{"shape":"ListFleetsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p> Returns a list of fleets. You can optionally provide filters to retrieve specific fleets. </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListRobotApplications":{
-      "name":"ListRobotApplications",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listRobotApplications"
-      },
-      "input":{"shape":"ListRobotApplicationsRequest"},
-      "output":{"shape":"ListRobotApplicationsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Returns a list of robot application. You can optionally provide filters to retrieve specific robot applications.</p>"
-    },
-    "ListRobots":{
-      "name":"ListRobots",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listRobots"
-      },
-      "input":{"shape":"ListRobotsRequest"},
-      "output":{"shape":"ListRobotsResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p> Returns a list of robots. You can optionally provide filters to retrieve specific robots. </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListSimulationApplications":{
-      "name":"ListSimulationApplications",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listSimulationApplications"
-      },
-      "input":{"shape":"ListSimulationApplicationsRequest"},
-      "output":{"shape":"ListSimulationApplicationsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Returns a list of simulation applications. You can optionally provide filters to retrieve specific simulation applications. </p>"
-    },
-    "ListSimulationJobBatches":{
-      "name":"ListSimulationJobBatches",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listSimulationJobBatches"
-      },
-      "input":{"shape":"ListSimulationJobBatchesRequest"},
-      "output":{"shape":"ListSimulationJobBatchesResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Returns a list simulation job batches. You can optionally provide filters to retrieve specific simulation batch jobs. </p>"
-    },
-    "ListSimulationJobs":{
-      "name":"ListSimulationJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listSimulationJobs"
-      },
-      "input":{"shape":"ListSimulationJobsRequest"},
-      "output":{"shape":"ListSimulationJobsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Returns a list of simulation jobs. You can optionally provide filters to retrieve specific simulation jobs. </p>"
-    },
-    "ListTagsForResource":{
-      "name":"ListTagsForResource",
-      "http":{
-        "method":"GET",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"ListTagsForResourceRequest"},
-      "output":{"shape":"ListTagsForResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Lists all tags on a AWS RoboMaker resource.</p>"
-    },
-    "ListWorldExportJobs":{
-      "name":"ListWorldExportJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listWorldExportJobs"
-      },
-      "input":{"shape":"ListWorldExportJobsRequest"},
-      "output":{"shape":"ListWorldExportJobsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Lists world export jobs.</p>"
-    },
-    "ListWorldGenerationJobs":{
-      "name":"ListWorldGenerationJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listWorldGenerationJobs"
-      },
-      "input":{"shape":"ListWorldGenerationJobsRequest"},
-      "output":{"shape":"ListWorldGenerationJobsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Lists world generator jobs.</p>"
-    },
-    "ListWorldTemplates":{
-      "name":"ListWorldTemplates",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listWorldTemplates"
-      },
-      "input":{"shape":"ListWorldTemplatesRequest"},
-      "output":{"shape":"ListWorldTemplatesResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Lists world templates.</p>"
-    },
-    "ListWorlds":{
-      "name":"ListWorlds",
-      "http":{
-        "method":"POST",
-        "requestUri":"/listWorlds"
-      },
-      "input":{"shape":"ListWorldsRequest"},
-      "output":{"shape":"ListWorldsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Lists worlds.</p>"
-    },
-    "RegisterRobot":{
-      "name":"RegisterRobot",
-      "http":{
-        "method":"POST",
-        "requestUri":"/registerRobot"
-      },
-      "input":{"shape":"RegisterRobotRequest"},
-      "output":{"shape":"RegisterRobotResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ResourceNotFoundException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Registers a robot with a fleet.</p> <important> <p>This API is no longer supported and will throw an error if used. For more information, see the January 31, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-january2022\">Support policy</a> page.</p> </important>",
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "RestartSimulationJob":{
-      "name":"RestartSimulationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/restartSimulationJob"
-      },
-      "input":{"shape":"RestartSimulationJobRequest"},
-      "output":{"shape":"RestartSimulationJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Restarts a running simulation job.</p>"
-    },
-    "StartSimulationJobBatch":{
-      "name":"StartSimulationJobBatch",
-      "http":{
-        "method":"POST",
-        "requestUri":"/startSimulationJobBatch"
-      },
-      "input":{"shape":"StartSimulationJobBatchRequest"},
-      "output":{"shape":"StartSimulationJobBatchResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"IdempotentParameterMismatchException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Starts a new simulation job batch. The batch is defined using one or more <code>SimulationJobRequest</code> objects. </p>"
-    },
-    "SyncDeploymentJob":{
-      "name":"SyncDeploymentJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/syncDeploymentJob"
-      },
-      "input":{"shape":"SyncDeploymentJobRequest"},
-      "output":{"shape":"SyncDeploymentJobResponse"},
-      "errors":[
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"InternalServerException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ConcurrentDeploymentException"},
-        {"shape":"IdempotentParameterMismatchException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <important> <p>This API is no longer supported. For more information, see the May 2, 2022 update in the <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/chapter-support-policy.html#software-support-policy-may2022\">Support policy</a> page.</p> </important> <p> Syncrhonizes robots in a fleet to the latest deployment. This is helpful if robots were added after a deployment. </p>",
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "TagResource":{
-      "name":"TagResource",
-      "http":{
-        "method":"POST",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"TagResourceRequest"},
-      "output":{"shape":"TagResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Adds or edits tags for a AWS RoboMaker resource.</p> <p>Each tag consists of a tag key and a tag value. Tag keys and tag values are both required, but tag values can be empty strings. </p> <p>For information about the rules that apply to tag keys and tag values, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html\">User-Defined Tag Restrictions</a> in the <i>AWS Billing and Cost Management User Guide</i>. </p>"
-    },
-    "UntagResource":{
-      "name":"UntagResource",
-      "http":{
-        "method":"DELETE",
-        "requestUri":"/tags/{resourceArn}"
-      },
-      "input":{"shape":"UntagResourceRequest"},
-      "output":{"shape":"UntagResourceResponse"},
-      "errors":[
-        {"shape":"InternalServerException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"ThrottlingException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Removes the specified tags from the specified AWS RoboMaker resource.</p> <p>To remove a tag, specify the tag key. To change the tag value of an existing tag key, use <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/API_TagResource.html\"> <code>TagResource</code> </a>. </p>"
-    },
-    "UpdateRobotApplication":{
-      "name":"UpdateRobotApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/updateRobotApplication"
-      },
-      "input":{"shape":"UpdateRobotApplicationRequest"},
-      "output":{"shape":"UpdateRobotApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Updates a robot application.</p>"
-    },
-    "UpdateSimulationApplication":{
-      "name":"UpdateSimulationApplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/updateSimulationApplication"
-      },
-      "input":{"shape":"UpdateSimulationApplicationRequest"},
-      "output":{"shape":"UpdateSimulationApplicationResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"LimitExceededException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Updates a simulation application.</p>"
-    },
-    "UpdateWorldTemplate":{
-      "name":"UpdateWorldTemplate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/updateWorldTemplate"
-      },
-      "input":{"shape":"UpdateWorldTemplateRequest"},
-      "output":{"shape":"UpdateWorldTemplateResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"}
-      ],
-      "documentation":"<important> <p>End of support notice: On September 10, 2025, Amazon Web Services will discontinue support for Amazon Web Services RoboMaker. After September 10, 2025, you will no longer be able to access the Amazon Web Services RoboMaker console or Amazon Web Services RoboMaker resources. For more information on transitioning to Batch to help run containerized simulations, visit <a href=\"https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/\">https://aws.amazon.com/blogs/hpc/run-simulations-using-multiple-containers-in-a-single-aws-batch-job/</a>. </p> </important> <p>Updates a world template.</p>"
-    }
-  },
-  "shapes":{
-    "Architecture":{
-      "type":"string",
-      "enum":[
-        "X86_64",
-        "ARM64",
-        "ARMHF"
-      ]
-    },
-    "Arn":{
-      "type":"string",
-      "max":1224,
-      "min":1,
-      "pattern":"arn:.*"
-    },
-    "Arns":{
-      "type":"list",
-      "member":{"shape":"Arn"},
-      "max":100,
-      "min":1
-    },
-    "BatchDeleteWorldsRequest":{
-      "type":"structure",
-      "required":["worlds"],
-      "members":{
-        "worlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of Amazon Resource Names (arns) that correspond to worlds to delete.</p>"
-        }
-      }
-    },
-    "BatchDeleteWorldsResponse":{
-      "type":"structure",
-      "members":{
-        "unprocessedWorlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of unprocessed worlds associated with the call. These worlds were not deleted.</p>"
-        }
-      }
-    },
-    "BatchDescribeSimulationJobRequest":{
-      "type":"structure",
-      "required":["jobs"],
-      "members":{
-        "jobs":{
-          "shape":"Arns",
-          "documentation":"<p>A list of Amazon Resource Names (ARNs) of simulation jobs to describe.</p>"
-        }
-      }
-    },
-    "BatchDescribeSimulationJobResponse":{
-      "type":"structure",
-      "members":{
-        "jobs":{
-          "shape":"SimulationJobs",
-          "documentation":"<p>A list of simulation jobs.</p>"
-        },
-        "unprocessedJobs":{
-          "shape":"Arns",
-          "documentation":"<p>A list of unprocessed simulation job Amazon Resource Names (ARNs).</p>"
-        }
-      }
-    },
-    "BatchPolicy":{
-      "type":"structure",
-      "members":{
-        "timeoutInSeconds":{
-          "shape":"BatchTimeoutInSeconds",
-          "documentation":"<p>The amount of time, in seconds, to wait for the batch to complete. </p> <p>If a batch times out, and there are pending requests that were failing due to an internal failure (like <code>InternalServiceError</code>), they will be moved to the failed list and the batch status will be <code>Failed</code>. If the pending requests were failing for any other reason, the failed pending requests will be moved to the failed list and the batch status will be <code>TimedOut</code>. </p>"
-        },
-        "maxConcurrency":{
-          "shape":"MaxConcurrency",
-          "documentation":"<p>The number of active simulation jobs create as part of the batch that can be in an active state at the same time. </p> <p>Active states include: <code>Pending</code>,<code>Preparing</code>, <code>Running</code>, <code>Restarting</code>, <code>RunningFailed</code> and <code>Terminating</code>. All other states are terminal states. </p>"
-        }
-      },
-      "documentation":"<p>Information about the batch policy.</p>"
-    },
-    "BatchTimeoutInSeconds":{"type":"long"},
-    "Boolean":{"type":"boolean"},
-    "BoxedBoolean":{"type":"boolean"},
-    "CancelDeploymentJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The deployment job ARN to cancel.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CancelDeploymentJobResponse":{
-      "type":"structure",
-      "members":{
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CancelSimulationJobBatchRequest":{
-      "type":"structure",
-      "required":["batch"],
-      "members":{
-        "batch":{
-          "shape":"Arn",
-          "documentation":"<p>The id of the batch to cancel.</p>"
-        }
-      }
-    },
-    "CancelSimulationJobBatchResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "CancelSimulationJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The simulation job ARN to cancel.</p>"
-        }
-      }
-    },
-    "CancelSimulationJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "CancelWorldExportJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world export job to cancel.</p>"
-        }
-      }
-    },
-    "CancelWorldExportJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "CancelWorldGenerationJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world generator job to cancel.</p>"
-        }
-      }
-    },
-    "CancelWorldGenerationJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ClientRequestToken":{
-      "type":"string",
-      "max":64,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_\\-=]*"
-    },
-    "Command":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_.\\-]*"
-    },
-    "CommandList":{
-      "type":"list",
-      "member":{"shape":"NonEmptyString"}
-    },
-    "Compute":{
-      "type":"structure",
-      "members":{
-        "simulationUnitLimit":{
-          "shape":"SimulationUnit",
-          "documentation":"<p>The simulation unit limit. Your simulation is allocated CPU and memory proportional to the supplied simulation unit limit. A simulation unit is 1 vcpu and 2GB of memory. You are only billed for the SU utilization you consume up to the maximum value provided. The default is 15. </p>"
-        },
-        "computeType":{
-          "shape":"ComputeType",
-          "documentation":"<p>Compute type information for the simulation job.</p>"
-        },
-        "gpuUnitLimit":{
-          "shape":"GPUUnit",
-          "documentation":"<p>Compute GPU unit limit for the simulation job. It is the same as the number of GPUs allocated to the SimulationJob.</p>"
-        }
-      },
-      "documentation":"<p>Compute information for the simulation job.</p>"
-    },
-    "ComputeResponse":{
-      "type":"structure",
-      "members":{
-        "simulationUnitLimit":{
-          "shape":"SimulationUnit",
-          "documentation":"<p>The simulation unit limit. Your simulation is allocated CPU and memory proportional to the supplied simulation unit limit. A simulation unit is 1 vcpu and 2GB of memory. You are only billed for the SU utilization you consume up to the maximum value provided. The default is 15. </p>"
-        },
-        "computeType":{
-          "shape":"ComputeType",
-          "documentation":"<p>Compute type response information for the simulation job.</p>"
-        },
-        "gpuUnitLimit":{
-          "shape":"GPUUnit",
-          "documentation":"<p>Compute GPU unit limit for the simulation job. It is the same as the number of GPUs allocated to the SimulationJob.</p>"
-        }
-      },
-      "documentation":"<p>Compute information for the simulation job</p>"
-    },
-    "ComputeType":{
-      "type":"string",
-      "enum":[
-        "CPU",
-        "GPU_AND_CPU"
-      ]
-    },
-    "ConcurrentDeploymentException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The failure percentage threshold percentage was met.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "CreateDeploymentJobRequest":{
-      "type":"structure",
-      "required":[
-        "clientRequestToken",
-        "fleet",
-        "deploymentApplicationConfigs"
-      ],
-      "members":{
-        "deploymentConfig":{
-          "shape":"DeploymentConfig",
-          "documentation":"<p>The requested deployment configuration.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet to deploy.</p>"
-        },
-        "deploymentApplicationConfigs":{
-          "shape":"DeploymentApplicationConfigs",
-          "documentation":"<p>The deployment application configuration.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the deployment job.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateDeploymentJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the deployment job.</p>"
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The target fleet for the deployment job.</p>"
-        },
-        "status":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the deployment job.</p>"
-        },
-        "deploymentApplicationConfigs":{
-          "shape":"DeploymentApplicationConfigs",
-          "documentation":"<p>The deployment application configuration.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The failure reason of the deployment job if it failed.</p>"
-        },
-        "failureCode":{
-          "shape":"DeploymentJobErrorCode",
-          "documentation":"<p>The failure code of the simulation job if it failed:</p> <dl> <dt>BadPermissionError</dt> <dd> <p>AWS Greengrass requires a service-level role permission to access other services. The role must include the <a href=\"https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy$jsonEditor\"> <code>AWSGreengrassResourceAccessRolePolicy</code> managed policy</a>. </p> </dd> <dt>ExtractingBundleFailure</dt> <dd> <p>The robot application could not be extracted from the bundle.</p> </dd> <dt>FailureThresholdBreached</dt> <dd> <p>The percentage of robots that could not be updated exceeded the percentage set for the deployment.</p> </dd> <dt>GreengrassDeploymentFailed</dt> <dd> <p>The robot application could not be deployed to the robot.</p> </dd> <dt>GreengrassGroupVersionDoesNotExist</dt> <dd> <p>The AWS Greengrass group or version associated with a robot is missing.</p> </dd> <dt>InternalServerError</dt> <dd> <p>An internal error has occurred. Retry your request, but if the problem persists, contact us with details.</p> </dd> <dt>MissingRobotApplicationArchitecture</dt> <dd> <p>The robot application does not have a source that matches the architecture of the robot.</p> </dd> <dt>MissingRobotDeploymentResource</dt> <dd> <p>One or more of the resources specified for the robot application are missing. For example, does the robot application have the correct launch package and launch file?</p> </dd> <dt>PostLaunchFileFailure</dt> <dd> <p>The post-launch script failed.</p> </dd> <dt>PreLaunchFileFailure</dt> <dd> <p>The pre-launch script failed.</p> </dd> <dt>ResourceNotFound</dt> <dd> <p>One or more deployment resources are missing. For example, do robot application source bundles still exist? </p> </dd> <dt>RobotDeploymentNoResponse</dt> <dd> <p>There is no response from the robot. It might not be powered on or connected to the internet.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the fleet was created.</p>"
-        },
-        "deploymentConfig":{
-          "shape":"DeploymentConfig",
-          "documentation":"<p>The deployment configuration.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the deployment job.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateFleetRequest":{
-      "type":"structure",
-      "required":["name"],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the fleet.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the fleet.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateFleetResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the fleet.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the fleet was created.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the fleet.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateRobotApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "robotSoftwareSuite"
-      ],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"SourceConfigs",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains that URI of the Docker image that you use for your robot application.</p>"
-        }
-      }
-    },
-    "CreateRobotApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the robot application.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>An object that contains the Docker image URI used to a create your robot application.</p>"
-        }
-      }
-    },
-    "CreateRobotApplicationVersionRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the robot application.</p>"
-        },
-        "currentRevisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The current revision id for the robot application. If you provide a value and it matches the latest revision ID, a new version will be created.</p>"
-        },
-        "s3Etags":{
-          "shape":"S3Etags",
-          "documentation":"<p>The Amazon S3 identifier for the zip file bundle that you use for your robot application.</p>"
-        },
-        "imageDigest":{
-          "shape":"ImageDigest",
-          "documentation":"<p>A SHA256 identifier for the Docker image that you use for your robot application.</p>"
-        }
-      }
-    },
-    "CreateRobotApplicationVersionResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used to create your robot application.</p>"
-        }
-      }
-    },
-    "CreateRobotRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "architecture",
-        "greengrassGroupId"
-      ],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name for the robot.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The target architecture of the robot.</p>"
-        },
-        "greengrassGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The Greengrass group id.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateRobotResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot was created.</p>"
-        },
-        "greengrassGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Greengrass group associated with the robot.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The target architecture of the robot.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "CreateSimulationApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "name",
-        "simulationSoftwareSuite",
-        "robotSoftwareSuite"
-      ],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "sources":{
-          "shape":"SourceConfigs",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the simulation application.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the simulation application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used to create your simulation application.</p>"
-        }
-      }
-    },
-    "CreateSimulationApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about the robot software suite.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the simulation application.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the simulation application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI that you used to create your simulation application.</p>"
-        }
-      }
-    },
-    "CreateSimulationApplicationVersionRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the simulation application.</p>"
-        },
-        "currentRevisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The current revision id for the simulation application. If you provide a value and it matches the latest revision ID, a new version will be created.</p>"
-        },
-        "s3Etags":{
-          "shape":"S3Etags",
-          "documentation":"<p>The Amazon S3 eTag identifier for the zip file bundle that you use to create the simulation application.</p>"
-        },
-        "imageDigest":{
-          "shape":"ImageDigest",
-          "documentation":"<p>The SHA256 digest used to identify the Docker image URI used to created the simulation application.</p>"
-        }
-      }
-    },
-    "CreateSimulationApplicationVersionResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about the robot software suite.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision ID of the simulation application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used to create the simulation application.</p>"
-        }
-      }
-    },
-    "CreateSimulationJobRequest":{
-      "type":"structure",
-      "required":[
-        "maxJobDurationInSeconds",
-        "iamRole"
-      ],
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "outputLocation":{
-          "shape":"OutputLocation",
-          "documentation":"<p>Location for output files generated by the simulation job.</p>"
-        },
-        "loggingConfig":{
-          "shape":"LoggingConfig",
-          "documentation":"<p>The logging configuration.</p>"
-        },
-        "maxJobDurationInSeconds":{
-          "shape":"JobDuration",
-          "documentation":"<p>The maximum simulation job duration in seconds (up to 14 days or 1,209,600 seconds. When <code>maxJobDurationInSeconds</code> is reached, the simulation job will status will transition to <code>Completed</code>.</p>"
-        },
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role name that allows the simulation instance to call the AWS APIs that are specified in its associated policies on your behalf. This is how credentials are passed in to your simulation job. </p>"
-        },
-        "failureBehavior":{
-          "shape":"FailureBehavior",
-          "documentation":"<p>The failure behavior the simulation job.</p> <dl> <dt>Continue</dt> <dd> <p>Leaves the instance running for its maximum timeout duration after a <code>4XX</code> error code.</p> </dd> <dt>Fail</dt> <dd> <p>Stop the simulation job and terminate the instance.</p> </dd> </dl>"
-        },
-        "robotApplications":{
-          "shape":"RobotApplicationConfigs",
-          "documentation":"<p>The robot application to use in the simulation job.</p>"
-        },
-        "simulationApplications":{
-          "shape":"SimulationApplicationConfigs",
-          "documentation":"<p>The simulation application to use in the simulation job.</p>"
-        },
-        "dataSources":{
-          "shape":"DataSourceConfigs",
-          "documentation":"<p>Specify data sources to mount read-only files from S3 into your simulation. These files are available under <code>/opt/robomaker/datasources/data_source_name</code>. </p> <note> <p>There is a limit of 100 files and a combined size of 25GB for all <code>DataSourceConfig</code> objects. </p> </note>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the simulation job.</p>"
-        },
-        "vpcConfig":{
-          "shape":"VPCConfig",
-          "documentation":"<p>If your simulation job accesses resources in a VPC, you provide this parameter identifying the list of security group IDs and subnet IDs. These must belong to the same VPC. You must provide at least one security group and one subnet ID. </p>"
-        },
-        "compute":{
-          "shape":"Compute",
-          "documentation":"<p>Compute information for the simulation job.</p>"
-        }
-      }
-    },
-    "CreateSimulationJobRequests":{
-      "type":"list",
-      "member":{"shape":"SimulationJobRequest"},
-      "max":1000,
-      "min":1
-    },
-    "CreateSimulationJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobStatus",
-          "documentation":"<p>The status of the simulation job.</p>"
-        },
-        "lastStartedAt":{
-          "shape":"LastStartedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last started.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last updated.</p>"
-        },
-        "failureBehavior":{
-          "shape":"FailureBehavior",
-          "documentation":"<p>the failure behavior for the simulation job.</p>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobErrorCode",
-          "documentation":"<p>The failure code of the simulation job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>RobotApplicationCrash</dt> <dd> <p>Robot application exited abnormally.</p> </dd> <dt>SimulationApplicationCrash</dt> <dd> <p> Simulation application exited abnormally.</p> </dd> <dt>BadPermissionsRobotApplication</dt> <dd> <p>Robot application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsSimulationApplication</dt> <dd> <p>Simulation application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsS3Output</dt> <dd> <p>Unable to publish outputs to customer-provided S3 bucket.</p> </dd> <dt>BadPermissionsCloudwatchLogs</dt> <dd> <p>Unable to publish logs to customer-provided CloudWatch Logs resource.</p> </dd> <dt>SubnetIpLimitExceeded</dt> <dd> <p>Subnet IP limit exceeded.</p> </dd> <dt>ENILimitExceeded</dt> <dd> <p>ENI limit exceeded.</p> </dd> <dt>BadPermissionsUserCredentials</dt> <dd> <p>Unable to use the Role provided.</p> </dd> <dt>InvalidBundleRobotApplication</dt> <dd> <p>Robot bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>InvalidBundleSimulationApplication</dt> <dd> <p>Simulation bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>RobotApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for RobotApplication does not match value during version creation.</p> </dd> <dt>SimulationApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for SimulationApplication does not match value during version creation.</p> </dd> </dl>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "outputLocation":{
-          "shape":"OutputLocation",
-          "documentation":"<p>Simulation job output files location.</p>"
-        },
-        "loggingConfig":{
-          "shape":"LoggingConfig",
-          "documentation":"<p>The logging configuration.</p>"
-        },
-        "maxJobDurationInSeconds":{
-          "shape":"JobDuration",
-          "documentation":"<p>The maximum simulation job duration in seconds. </p>"
-        },
-        "simulationTimeMillis":{
-          "shape":"SimulationTimeMillis",
-          "documentation":"<p>The simulation job execution duration in milliseconds.</p>"
-        },
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that allows the simulation job to call the AWS APIs that are specified in its associated policies on your behalf.</p>"
-        },
-        "robotApplications":{
-          "shape":"RobotApplicationConfigs",
-          "documentation":"<p>The robot application used by the simulation job.</p>"
-        },
-        "simulationApplications":{
-          "shape":"SimulationApplicationConfigs",
-          "documentation":"<p>The simulation application used by the simulation job.</p>"
-        },
-        "dataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The data sources for the simulation job.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the simulation job.</p>"
-        },
-        "vpcConfig":{
-          "shape":"VPCConfigResponse",
-          "documentation":"<p>Information about the vpc configuration.</p>"
-        },
-        "compute":{
-          "shape":"ComputeResponse",
-          "documentation":"<p>Compute information for the simulation job.</p>"
-        }
-      }
-    },
-    "CreateWorldExportJobRequest":{
-      "type":"structure",
-      "required":[
-        "worlds",
-        "outputLocation",
-        "iamRole"
-      ],
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "worlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of Amazon Resource Names (arns) that correspond to worlds to export.</p>"
-        },
-        "outputLocation":{"shape":"OutputLocation"},
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that the world export process uses to access the Amazon S3 bucket and put the export.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world export job.</p>"
-        }
-      }
-    },
-    "CreateWorldExportJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world export job.</p>"
-        },
-        "status":{
-          "shape":"WorldExportJobStatus",
-          "documentation":"<p>The status of the world export job.</p> <dl> <dt>Pending</dt> <dd> <p>The world export job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world export job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world export job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world export job failed. See <code>failureCode</code> for more information. </p> </dd> <dt>Canceled</dt> <dd> <p>The world export job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world export job is being cancelled.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world export job was created.</p>"
-        },
-        "failureCode":{
-          "shape":"WorldExportJobErrorCode",
-          "documentation":"<p>The failure code of the world export job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>LimitExceeded</dt> <dd> <p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p> </dd> <dt>ResourceNotFound</dt> <dd> <p>The specified resource could not be found. </p> </dd> <dt>RequestThrottled</dt> <dd> <p>The request was throttled.</p> </dd> <dt>InvalidInput</dt> <dd> <p>An input parameter in the request is not valid.</p> </dd> <dt>AllWorldGenerationFailed</dt> <dd> <p>All of the worlds in the world generation job failed. This can happen if your <code>worldCount</code> is greater than 50 or less than 1. </p> </dd> </dl> <p>For more information about troubleshooting WorldForge, see <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting-worldforge.html\">Troubleshooting Simulation WorldForge</a>. </p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "outputLocation":{"shape":"OutputLocation"},
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that the world export process uses to access the Amazon S3 bucket and put the export. </p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world export job.</p>"
-        }
-      }
-    },
-    "CreateWorldGenerationJobRequest":{
-      "type":"structure",
-      "required":[
-        "template",
-        "worldCount"
-      ],
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template describing the worlds you want to create.</p>"
-        },
-        "worldCount":{
-          "shape":"WorldCount",
-          "documentation":"<p>Information about the world count.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world generator job.</p>"
-        },
-        "worldTags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the generated worlds.</p>"
-        }
-      }
-    },
-    "CreateWorldGenerationJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world generator job.</p>"
-        },
-        "status":{
-          "shape":"WorldGenerationJobStatus",
-          "documentation":"<p>The status of the world generator job.</p> <dl> <dt>Pending</dt> <dd> <p>The world generator job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world generator job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world generator job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world generator job failed. See <code>failureCode</code> for more information. </p> </dd> <dt>PartialFailed</dt> <dd> <p>Some worlds did not generate.</p> </dd> <dt>Canceled</dt> <dd> <p>The world generator job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world generator job is being cancelled.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world generator job was created.</p>"
-        },
-        "failureCode":{
-          "shape":"WorldGenerationJobErrorCode",
-          "documentation":"<p>The failure code of the world generator job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>LimitExceeded</dt> <dd> <p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p> </dd> <dt>ResourceNotFound</dt> <dd> <p>The specified resource could not be found. </p> </dd> <dt>RequestThrottled</dt> <dd> <p>The request was throttled.</p> </dd> <dt>InvalidInput</dt> <dd> <p>An input parameter in the request is not valid.</p> </dd> </dl>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        },
-        "worldCount":{
-          "shape":"WorldCount",
-          "documentation":"<p>Information about the world count. </p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world generator job.</p>"
-        },
-        "worldTags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the generated worlds.</p>"
-        }
-      }
-    },
-    "CreateWorldTemplateRequest":{
-      "type":"structure",
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the world template.</p>"
-        },
-        "templateBody":{
-          "shape":"Json",
-          "documentation":"<p>The world template body.</p>"
-        },
-        "templateLocation":{
-          "shape":"TemplateLocation",
-          "documentation":"<p>The location of the world template.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world template.</p>"
-        }
-      }
-    },
-    "CreateWorldTemplateResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world template.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world template was created.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the world template.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world template.</p>"
-        }
-      }
-    },
-    "CreatedAt":{"type":"timestamp"},
-    "DataSource":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the data source.</p>"
-        },
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The S3 bucket where the data files are located.</p>"
-        },
-        "s3Keys":{
-          "shape":"S3KeyOutputs",
-          "documentation":"<p>The list of S3 keys identifying the data source files.</p>"
-        },
-        "type":{
-          "shape":"DataSourceType",
-          "documentation":"<p>The data type for the data source that you're using for your container image or simulation job. You can use this field to specify whether your data source is an Archive, an Amazon S3 prefix, or a file.</p> <p>If you don't specify a field, the default value is <code>File</code>.</p>"
-        },
-        "destination":{
-          "shape":"Path",
-          "documentation":"<p>The location where your files are mounted in the container image.</p> <p>If you've specified the <code>type</code> of the data source as an <code>Archive</code>, you must provide an Amazon S3 object key to your archive. The object key must point to either a <code>.zip</code> or <code>.tar.gz</code> file.</p> <p>If you've specified the <code>type</code> of the data source as a <code>Prefix</code>, you provide the Amazon S3 prefix that points to the files that you are using for your data source.</p> <p>If you've specified the <code>type</code> of the data source as a <code>File</code>, you provide the Amazon S3 path to the file that you're using as your data source.</p>"
-        }
-      },
-      "documentation":"<p>Information about a data source.</p>"
-    },
-    "DataSourceConfig":{
-      "type":"structure",
-      "required":[
-        "name",
-        "s3Bucket",
-        "s3Keys"
-      ],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the data source.</p>"
-        },
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The S3 bucket where the data files are located.</p>"
-        },
-        "s3Keys":{
-          "shape":"S3KeysOrPrefixes",
-          "documentation":"<p>The list of S3 keys identifying the data source files.</p>"
-        },
-        "type":{
-          "shape":"DataSourceType",
-          "documentation":"<p>The data type for the data source that you're using for your container image or simulation job. You can use this field to specify whether your data source is an Archive, an Amazon S3 prefix, or a file.</p> <p>If you don't specify a field, the default value is <code>File</code>.</p>"
-        },
-        "destination":{
-          "shape":"Path",
-          "documentation":"<p>The location where your files are mounted in the container image.</p> <p>If you've specified the <code>type</code> of the data source as an <code>Archive</code>, you must provide an Amazon S3 object key to your archive. The object key must point to either a <code>.zip</code> or <code>.tar.gz</code> file.</p> <p>If you've specified the <code>type</code> of the data source as a <code>Prefix</code>, you provide the Amazon S3 prefix that points to the files that you are using for your data source.</p> <p>If you've specified the <code>type</code> of the data source as a <code>File</code>, you provide the Amazon S3 path to the file that you're using as your data source.</p>"
-        }
-      },
-      "documentation":"<p>Information about a data source.</p>"
-    },
-    "DataSourceConfigs":{
-      "type":"list",
-      "member":{"shape":"DataSourceConfig"},
-      "max":6,
-      "min":1
-    },
-    "DataSourceNames":{
-      "type":"list",
-      "member":{"shape":"Name"}
-    },
-    "DataSourceType":{
-      "type":"string",
-      "enum":[
-        "Prefix",
-        "Archive",
-        "File"
-      ]
-    },
-    "DataSources":{
-      "type":"list",
-      "member":{"shape":"DataSource"}
-    },
-    "DeleteFleetRequest":{
-      "type":"structure",
-      "required":["fleet"],
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteFleetResponse":{
-      "type":"structure",
-      "members":{
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteRobotApplicationRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the the robot application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application to delete.</p>"
-        }
-      }
-    },
-    "DeleteRobotApplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteRobotRequest":{
-      "type":"structure",
-      "required":["robot"],
-      "members":{
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteRobotResponse":{
-      "type":"structure",
-      "members":{
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeleteSimulationApplicationRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the simulation application to delete.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application to delete.</p>"
-        }
-      }
-    },
-    "DeleteSimulationApplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteWorldTemplateRequest":{
-      "type":"structure",
-      "required":["template"],
-      "members":{
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template you want to delete.</p>"
-        }
-      }
-    },
-    "DeleteWorldTemplateResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeploymentApplicationConfig":{
-      "type":"structure",
-      "required":[
-        "application",
-        "applicationVersion",
-        "launchConfig"
-      ],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"DeploymentVersion",
-          "documentation":"<p>The version of the application.</p>"
-        },
-        "launchConfig":{
-          "shape":"DeploymentLaunchConfig",
-          "documentation":"<p>The launch configuration.</p>"
-        }
-      },
-      "documentation":"<p>Information about a deployment application configuration.</p>"
-    },
-    "DeploymentApplicationConfigs":{
-      "type":"list",
-      "member":{"shape":"DeploymentApplicationConfig"},
-      "max":1,
-      "min":1
-    },
-    "DeploymentConfig":{
-      "type":"structure",
-      "members":{
-        "concurrentDeploymentPercentage":{
-          "shape":"Percentage",
-          "documentation":"<p>The percentage of robots receiving the deployment at the same time.</p>"
-        },
-        "failureThresholdPercentage":{
-          "shape":"Percentage",
-          "documentation":"<p>The percentage of deployments that need to fail before stopping deployment.</p>"
-        },
-        "robotDeploymentTimeoutInSeconds":{
-          "shape":"DeploymentTimeout",
-          "documentation":"<p>The amount of time, in seconds, to wait for deployment to a single robot to complete. Choose a time between 1 minute and 7 days. The default is 5 hours.</p>"
-        },
-        "downloadConditionFile":{
-          "shape":"S3Object",
-          "documentation":"<p>The download condition file.</p>"
-        }
-      },
-      "documentation":"<p>Information about a deployment configuration.</p>"
-    },
-    "DeploymentJob":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the deployment job.</p>"
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "status":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the deployment job.</p>"
-        },
-        "deploymentApplicationConfigs":{
-          "shape":"DeploymentApplicationConfigs",
-          "documentation":"<p>The deployment application configuration.</p>"
-        },
-        "deploymentConfig":{
-          "shape":"DeploymentConfig",
-          "documentation":"<p>The deployment configuration.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>A short description of the reason why the deployment job failed.</p>"
-        },
-        "failureCode":{
-          "shape":"DeploymentJobErrorCode",
-          "documentation":"<p>The deployment job failure code.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the deployment job was created.</p>"
-        }
-      },
-      "documentation":"<p>Information about a deployment job.</p>"
-    },
-    "DeploymentJobErrorCode":{
-      "type":"string",
-      "enum":[
-        "ResourceNotFound",
-        "EnvironmentSetupError",
-        "EtagMismatch",
-        "FailureThresholdBreached",
-        "RobotDeploymentAborted",
-        "RobotDeploymentNoResponse",
-        "RobotAgentConnectionTimeout",
-        "GreengrassDeploymentFailed",
-        "InvalidGreengrassGroup",
-        "MissingRobotArchitecture",
-        "MissingRobotApplicationArchitecture",
-        "MissingRobotDeploymentResource",
-        "GreengrassGroupVersionDoesNotExist",
-        "LambdaDeleted",
-        "ExtractingBundleFailure",
-        "PreLaunchFileFailure",
-        "PostLaunchFileFailure",
-        "BadPermissionError",
-        "DownloadConditionFailed",
-        "BadLambdaAssociated",
-        "InternalServerError",
-        "RobotApplicationDoesNotExist",
-        "DeploymentFleetDoesNotExist",
-        "FleetDeploymentTimeout"
-      ]
-    },
-    "DeploymentJobs":{
-      "type":"list",
-      "member":{"shape":"DeploymentJob"},
-      "max":200,
-      "min":0
-    },
-    "DeploymentLaunchConfig":{
-      "type":"structure",
-      "required":[
-        "packageName",
-        "launchFile"
-      ],
-      "members":{
-        "packageName":{
-          "shape":"Command",
-          "documentation":"<p>The package name.</p>"
-        },
-        "preLaunchFile":{
-          "shape":"Path",
-          "documentation":"<p>The deployment pre-launch file. This file will be executed prior to the launch file.</p>"
-        },
-        "launchFile":{
-          "shape":"Command",
-          "documentation":"<p>The launch file name.</p>"
-        },
-        "postLaunchFile":{
-          "shape":"Path",
-          "documentation":"<p>The deployment post-launch file. This file will be executed after the launch file.</p>"
-        },
-        "environmentVariables":{
-          "shape":"EnvironmentVariableMap",
-          "documentation":"<p>An array of key/value pairs specifying environment variables for the robot application</p>"
-        }
-      },
-      "documentation":"<p>Configuration information for a deployment launch.</p>"
-    },
-    "DeploymentStatus":{
-      "type":"string",
-      "enum":[
-        "Pending",
-        "Preparing",
-        "InProgress",
-        "Failed",
-        "Succeeded",
-        "Canceled"
-      ]
-    },
-    "DeploymentTimeout":{"type":"long"},
-    "DeploymentVersion":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[0-9]*"
-    },
-    "DeregisterRobotRequest":{
-      "type":"structure",
-      "required":[
-        "fleet",
-        "robot"
-      ],
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DeregisterRobotResponse":{
-      "type":"structure",
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeDeploymentJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the deployment job.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeDeploymentJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the deployment job.</p>"
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "status":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the deployment job.</p>"
-        },
-        "deploymentConfig":{
-          "shape":"DeploymentConfig",
-          "documentation":"<p>The deployment configuration.</p>"
-        },
-        "deploymentApplicationConfigs":{
-          "shape":"DeploymentApplicationConfigs",
-          "documentation":"<p>The deployment application configuration.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>A short description of the reason why the deployment job failed.</p>"
-        },
-        "failureCode":{
-          "shape":"DeploymentJobErrorCode",
-          "documentation":"<p>The deployment job failure code.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the deployment job was created.</p>"
-        },
-        "robotDeploymentSummary":{
-          "shape":"RobotDeploymentSummary",
-          "documentation":"<p>A list of robot deployment summaries.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified deployment job.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeFleetRequest":{
-      "type":"structure",
-      "required":["fleet"],
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeFleetResponse":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the fleet.</p>"
-        },
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "robots":{
-          "shape":"Robots",
-          "documentation":"<p>A list of robots.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the fleet was created.</p>"
-        },
-        "lastDeploymentStatus":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the last deployment.</p>"
-        },
-        "lastDeploymentJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the last deployment job.</p>"
-        },
-        "lastDeploymentTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time of the last deployment.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified fleet.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeRobotApplicationRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application to describe.</p>"
-        }
-      }
-    },
-    "DescribeRobotApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the robot application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot application was last updated.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used to create the robot application.</p>"
-        },
-        "imageDigest":{
-          "shape":"ImageDigest",
-          "documentation":"<p>A SHA256 identifier for the Docker image that you use for your robot application.</p>"
-        }
-      }
-    },
-    "DescribeRobotRequest":{
-      "type":"structure",
-      "required":["robot"],
-      "members":{
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot to be described.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeRobotResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot.</p>"
-        },
-        "fleetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "status":{
-          "shape":"RobotStatus",
-          "documentation":"<p>The status of the fleet.</p>"
-        },
-        "greengrassGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The Greengrass group id.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot was created.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The target architecture of the robot application.</p>"
-        },
-        "lastDeploymentJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the last deployment job.</p>"
-        },
-        "lastDeploymentTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time of the last deployment job.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "DescribeSimulationApplicationRequest":{
-      "type":"structure",
-      "required":["application"],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the simulation application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application to describe.</p>"
-        }
-      }
-    },
-    "DescribeSimulationApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot simulation application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about the robot software suite.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the simulation application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation application was last updated.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified simulation application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used to create the simulation application.</p>"
-        },
-        "imageDigest":{
-          "shape":"ImageDigest",
-          "documentation":"<p>A SHA256 identifier for the Docker image that you use for your simulation application.</p>"
-        }
-      }
-    },
-    "DescribeSimulationJobBatchRequest":{
-      "type":"structure",
-      "required":["batch"],
-      "members":{
-        "batch":{
-          "shape":"Arn",
-          "documentation":"<p>The id of the batch to describe.</p>"
-        }
-      }
-    },
-    "DescribeSimulationJobBatchResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the batch.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobBatchStatus",
-          "documentation":"<p>The status of the batch.</p> <dl> <dt>Pending</dt> <dd> <p>The simulation job batch request is pending.</p> </dd> <dt>InProgress</dt> <dd> <p>The simulation job batch is in progress. </p> </dd> <dt>Failed</dt> <dd> <p>The simulation job batch failed. One or more simulation job requests could not be completed due to an internal failure (like <code>InternalServiceError</code>). See <code>failureCode</code> and <code>failureReason</code> for more information.</p> </dd> <dt>Completed</dt> <dd> <p>The simulation batch job completed. A batch is complete when (1) there are no pending simulation job requests in the batch and none of the failed simulation job requests are due to <code>InternalServiceError</code> and (2) when all created simulation jobs have reached a terminal state (for example, <code>Completed</code> or <code>Failed</code>). </p> </dd> <dt>Canceled</dt> <dd> <p>The simulation batch job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The simulation batch job is being cancelled.</p> </dd> <dt>Completing</dt> <dd> <p>The simulation batch job is completing.</p> </dd> <dt>TimingOut</dt> <dd> <p>The simulation job batch is timing out.</p> <p>If a batch timing out, and there are pending requests that were failing due to an internal failure (like <code>InternalServiceError</code>), the batch status will be <code>Failed</code>. If there are no such failing request, the batch status will be <code>TimedOut</code>. </p> </dd> <dt>TimedOut</dt> <dd> <p>The simulation batch job timed out.</p> </dd> </dl>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch was last updated.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch was created.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "batchPolicy":{
-          "shape":"BatchPolicy",
-          "documentation":"<p>The batch policy.</p>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobBatchErrorCode",
-          "documentation":"<p>The failure code of the simulation job batch.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The reason the simulation job batch failed.</p>"
-        },
-        "failedRequests":{
-          "shape":"FailedCreateSimulationJobRequests",
-          "documentation":"<p>A list of failed create simulation job requests. The request failed to be created into a simulation job. Failed requests do not have a simulation job ID. </p>"
-        },
-        "pendingRequests":{
-          "shape":"CreateSimulationJobRequests",
-          "documentation":"<p>A list of pending simulation job requests. These requests have not yet been created into simulation jobs.</p>"
-        },
-        "createdRequests":{
-          "shape":"SimulationJobSummaries",
-          "documentation":"<p>A list of created simulation job summaries.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the simulation job batch.</p>"
-        }
-      }
-    },
-    "DescribeSimulationJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job to be described.</p>"
-        }
-      }
-    },
-    "DescribeSimulationJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation job.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobStatus",
-          "documentation":"<p>The status of the simulation job.</p>"
-        },
-        "lastStartedAt":{
-          "shape":"LastStartedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last started.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last updated.</p>"
-        },
-        "failureBehavior":{
-          "shape":"FailureBehavior",
-          "documentation":"<p>The failure behavior for the simulation job.</p>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobErrorCode",
-          "documentation":"<p>The failure code of the simulation job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>RobotApplicationCrash</dt> <dd> <p>Robot application exited abnormally.</p> </dd> <dt>SimulationApplicationCrash</dt> <dd> <p> Simulation application exited abnormally.</p> </dd> <dt>BadPermissionsRobotApplication</dt> <dd> <p>Robot application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsSimulationApplication</dt> <dd> <p>Simulation application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsS3Output</dt> <dd> <p>Unable to publish outputs to customer-provided S3 bucket.</p> </dd> <dt>BadPermissionsCloudwatchLogs</dt> <dd> <p>Unable to publish logs to customer-provided CloudWatch Logs resource.</p> </dd> <dt>SubnetIpLimitExceeded</dt> <dd> <p>Subnet IP limit exceeded.</p> </dd> <dt>ENILimitExceeded</dt> <dd> <p>ENI limit exceeded.</p> </dd> <dt>BadPermissionsUserCredentials</dt> <dd> <p>Unable to use the Role provided.</p> </dd> <dt>InvalidBundleRobotApplication</dt> <dd> <p>Robot bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>InvalidBundleSimulationApplication</dt> <dd> <p>Simulation bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>RobotApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for RobotApplication does not match value during version creation.</p> </dd> <dt>SimulationApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for SimulationApplication does not match value during version creation.</p> </dd> </dl>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>Details about why the simulation job failed. For more information about troubleshooting, see <a href=\"https://docs.aws.amazon.com/robomaker/latest/dg/troubleshooting.html\">Troubleshooting</a>.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "outputLocation":{
-          "shape":"OutputLocation",
-          "documentation":"<p>Location for output files generated by the simulation job.</p>"
-        },
-        "loggingConfig":{
-          "shape":"LoggingConfig",
-          "documentation":"<p>The logging configuration.</p>"
-        },
-        "maxJobDurationInSeconds":{
-          "shape":"JobDuration",
-          "documentation":"<p>The maximum job duration in seconds. The value must be 8 days (691,200 seconds) or less.</p>"
-        },
-        "simulationTimeMillis":{
-          "shape":"SimulationTimeMillis",
-          "documentation":"<p>The simulation job execution duration in milliseconds.</p>"
-        },
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that allows the simulation instance to call the AWS APIs that are specified in its associated policies on your behalf.</p>"
-        },
-        "robotApplications":{
-          "shape":"RobotApplicationConfigs",
-          "documentation":"<p>A list of robot applications.</p>"
-        },
-        "simulationApplications":{
-          "shape":"SimulationApplicationConfigs",
-          "documentation":"<p>A list of simulation applications.</p>"
-        },
-        "dataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The data sources for the simulation job.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified simulation job.</p>"
-        },
-        "vpcConfig":{
-          "shape":"VPCConfigResponse",
-          "documentation":"<p>The VPC configuration.</p>"
-        },
-        "networkInterface":{
-          "shape":"NetworkInterface",
-          "documentation":"<p>The network interface information for the simulation job.</p>"
-        },
-        "compute":{
-          "shape":"ComputeResponse",
-          "documentation":"<p>Compute information for the simulation job.</p>"
-        }
-      }
-    },
-    "DescribeWorldExportJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world export job to describe.</p>"
-        }
-      }
-    },
-    "DescribeWorldExportJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world export job.</p>"
-        },
-        "status":{
-          "shape":"WorldExportJobStatus",
-          "documentation":"<p>The status of the world export job.</p> <dl> <dt>Pending</dt> <dd> <p>The world export job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world export job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world export job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world export job failed. See <code>failureCode</code> and <code>failureReason</code> for more information. </p> </dd> <dt>Canceled</dt> <dd> <p>The world export job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world export job is being cancelled.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world export job was created.</p>"
-        },
-        "failureCode":{
-          "shape":"WorldExportJobErrorCode",
-          "documentation":"<p>The failure code of the world export job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>LimitExceeded</dt> <dd> <p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p> </dd> <dt>ResourceNotFound</dt> <dd> <p>The specified resource could not be found. </p> </dd> <dt>RequestThrottled</dt> <dd> <p>The request was throttled.</p> </dd> <dt>InvalidInput</dt> <dd> <p>An input parameter in the request is not valid.</p> </dd> </dl>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The reason why the world export job failed.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "worlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of Amazon Resource Names (arns) that correspond to worlds to be exported.</p>"
-        },
-        "outputLocation":{"shape":"OutputLocation"},
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that the world export process uses to access the Amazon S3 bucket and put the export.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world export job.</p>"
-        }
-      }
-    },
-    "DescribeWorldGenerationJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world generation job to describe.</p>"
-        }
-      }
-    },
-    "DescribeWorldGenerationJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world generation job.</p>"
-        },
-        "status":{
-          "shape":"WorldGenerationJobStatus",
-          "documentation":"<p>The status of the world generation job:</p> <dl> <dt>Pending</dt> <dd> <p>The world generation job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world generation job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world generation job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world generation job failed. See <code>failureCode</code> for more information. </p> </dd> <dt>PartialFailed</dt> <dd> <p>Some worlds did not generate.</p> </dd> <dt>Canceled</dt> <dd> <p>The world generation job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world generation job is being cancelled.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world generation job was created.</p>"
-        },
-        "failureCode":{
-          "shape":"WorldGenerationJobErrorCode",
-          "documentation":"<p>The failure code of the world generation job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>LimitExceeded</dt> <dd> <p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p> </dd> <dt>ResourceNotFound</dt> <dd> <p>The specified resource could not be found. </p> </dd> <dt>RequestThrottled</dt> <dd> <p>The request was throttled.</p> </dd> <dt>InvalidInput</dt> <dd> <p>An input parameter in the request is not valid.</p> </dd> </dl>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The reason why the world generation job failed.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        },
-        "worldCount":{
-          "shape":"WorldCount",
-          "documentation":"<p>Information about the world count.</p>"
-        },
-        "finishedWorldsSummary":{
-          "shape":"FinishedWorldsSummary",
-          "documentation":"<p>Summary information about finished worlds.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world generation job.</p>"
-        },
-        "worldTags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the generated worlds.</p>"
-        }
-      }
-    },
-    "DescribeWorldRequest":{
-      "type":"structure",
-      "required":["world"],
-      "members":{
-        "world":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world you want to describe.</p>"
-        }
-      }
-    },
-    "DescribeWorldResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world.</p>"
-        },
-        "generationJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world generation job that generated the world.</p>"
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The world template.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world was created.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world.</p>"
-        },
-        "worldDescriptionBody":{
-          "shape":"Json",
-          "documentation":"<p>Returns the JSON formatted string that describes the contents of your world.</p>"
-        }
-      }
-    },
-    "DescribeWorldTemplateRequest":{
-      "type":"structure",
-      "required":["template"],
-      "members":{
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template you want to describe.</p>"
-        }
-      }
-    },
-    "DescribeWorldTemplateResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world template.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the world template.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world template was created.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world template was last updated.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the world template.</p>"
-        },
-        "version":{
-          "shape":"GenericString",
-          "documentation":"<p>The version of the world template that you're using.</p>"
-        }
-      }
-    },
-    "Environment":{
-      "type":"structure",
-      "members":{
-        "uri":{
-          "shape":"RepositoryUrl",
-          "documentation":"<p>The Docker image URI for either your robot or simulation applications.</p>"
-        }
-      },
-      "documentation":"<p>The object that contains the Docker image URI for either your robot or simulation applications.</p>"
-    },
-    "EnvironmentVariableKey":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":"[A-Z_][A-Z0-9_]*"
-    },
-    "EnvironmentVariableMap":{
-      "type":"map",
-      "key":{"shape":"EnvironmentVariableKey"},
-      "value":{"shape":"EnvironmentVariableValue"},
-      "max":20,
-      "min":0
-    },
-    "EnvironmentVariableValue":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".*"
-    },
-    "ExitBehavior":{
-      "type":"string",
-      "enum":[
-        "FAIL",
-        "RESTART"
-      ]
-    },
-    "FailedAt":{"type":"timestamp"},
-    "FailedCreateSimulationJobRequest":{
-      "type":"structure",
-      "members":{
-        "request":{
-          "shape":"SimulationJobRequest",
-          "documentation":"<p>The simulation job request.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The failure reason of the simulation job request.</p>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobErrorCode",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failedAt":{
-          "shape":"FailedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch failed.</p>"
-        }
-      },
-      "documentation":"<p>Information about a failed create simulation job request.</p>"
-    },
-    "FailedCreateSimulationJobRequests":{
-      "type":"list",
-      "member":{"shape":"FailedCreateSimulationJobRequest"}
-    },
-    "FailureBehavior":{
-      "type":"string",
-      "enum":[
-        "Fail",
-        "Continue"
-      ]
-    },
-    "FailureSummary":{
-      "type":"structure",
-      "members":{
-        "totalFailureCount":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of failures.</p>"
-        },
-        "failures":{
-          "shape":"WorldFailures",
-          "documentation":"<p>The worlds that failed.</p>"
-        }
-      },
-      "documentation":"<p>Information about worlds that failed.</p>"
-    },
-    "Filter":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the filter.</p>"
-        },
-        "values":{
-          "shape":"FilterValues",
-          "documentation":"<p>A list of values.</p>"
-        }
-      },
-      "documentation":"<p>Information about a filter.</p>"
-    },
-    "FilterValues":{
-      "type":"list",
-      "member":{"shape":"Name"},
-      "max":1,
-      "min":1
-    },
-    "Filters":{
-      "type":"list",
-      "member":{"shape":"Filter"},
-      "max":1,
-      "min":1
-    },
-    "FinishedWorldsSummary":{
-      "type":"structure",
-      "members":{
-        "finishedCount":{
-          "shape":"Integer",
-          "documentation":"<p>The total number of finished worlds.</p>"
-        },
-        "succeededWorlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of worlds that succeeded.</p>"
-        },
-        "failureSummary":{
-          "shape":"FailureSummary",
-          "documentation":"<p>Information about worlds that failed.</p>"
-        }
-      },
-      "documentation":"<p>Information about worlds that finished.</p>"
-    },
-    "Fleet":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the fleet.</p>"
-        },
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the fleet was created.</p>"
-        },
-        "lastDeploymentStatus":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the last fleet deployment.</p>"
-        },
-        "lastDeploymentJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the last deployment job.</p>"
-        },
-        "lastDeploymentTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time of the last deployment.</p>"
-        }
-      },
-      "documentation":"<p>Information about a fleet.</p>"
-    },
-    "Fleets":{
-      "type":"list",
-      "member":{"shape":"Fleet"},
-      "max":200,
-      "min":0
-    },
-    "FloorplanCount":{"type":"integer"},
-    "GPUUnit":{
-      "type":"integer",
-      "max":1,
-      "min":0
-    },
-    "GenericInteger":{"type":"integer"},
-    "GenericString":{
-      "type":"string",
-      "max":1024,
-      "min":0,
-      "pattern":".*"
-    },
-    "GetWorldTemplateBodyRequest":{
-      "type":"structure",
-      "members":{
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        },
-        "generationJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world generator job.</p>"
-        }
-      }
-    },
-    "GetWorldTemplateBodyResponse":{
-      "type":"structure",
-      "members":{
-        "templateBody":{
-          "shape":"Json",
-          "documentation":"<p>The world template body.</p>"
-        }
-      }
-    },
-    "IamRole":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"arn:aws:iam::\\w+:role/.*"
-    },
-    "Id":{
-      "type":"string",
-      "max":1224,
-      "min":1,
-      "pattern":".*"
-    },
-    "IdempotentParameterMismatchException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The request uses the same client token as a previous, but non-identical request. Do not reuse a client token with different requests, unless the requests are identical. </p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ImageDigest":{
-      "type":"string",
-      "max":72,
-      "min":0,
-      "pattern":"[Ss][Hh][Aa]256:[0-9a-fA-F]{64}"
-    },
-    "Integer":{"type":"integer"},
-    "InteriorCountPerFloorplan":{"type":"integer"},
-    "InternalServerException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>AWS RoboMaker experienced a service issue. Try your call again.</p>",
-      "error":{"httpStatusCode":500},
-      "exception":true
-    },
-    "InvalidParameterException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>A parameter specified in a request is not valid, is unsupported, or cannot be used. The returned message provides an explanation of the error value.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "JobDuration":{"type":"long"},
-    "Json":{
-      "type":"string",
-      "max":262144,
-      "min":1,
-      "pattern":"[\\S\\s]+"
-    },
-    "LastStartedAt":{"type":"timestamp"},
-    "LastUpdatedAt":{"type":"timestamp"},
-    "LaunchConfig":{
-      "type":"structure",
-      "members":{
-        "packageName":{
-          "shape":"Command",
-          "documentation":"<p>The package name.</p>"
-        },
-        "launchFile":{
-          "shape":"Command",
-          "documentation":"<p>The launch file name.</p>"
-        },
-        "environmentVariables":{
-          "shape":"EnvironmentVariableMap",
-          "documentation":"<p>The environment variables for the application launch.</p>"
-        },
-        "portForwardingConfig":{
-          "shape":"PortForwardingConfig",
-          "documentation":"<p>The port forwarding configuration.</p>"
-        },
-        "streamUI":{
-          "shape":"Boolean",
-          "documentation":"<p>Boolean indicating whether a streaming session will be configured for the application. If <code>True</code>, AWS RoboMaker will configure a connection so you can interact with your application as it is running in the simulation. You must configure and launch the component. It must have a graphical user interface. </p>"
-        },
-        "command":{
-          "shape":"CommandList",
-          "documentation":"<p>If you've specified <code>General</code> as the value for your <code>RobotSoftwareSuite</code>, you can use this field to specify a list of commands for your container image.</p> <p>If you've specified <code>SimulationRuntime</code> as the value for your <code>SimulationSoftwareSuite</code>, you can use this field to specify a list of commands for your container image.</p>"
-        }
-      },
-      "documentation":"<p>Information about a launch configuration.</p>"
-    },
-    "LimitExceededException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ListDeploymentJobsRequest":{
-      "type":"structure",
-      "members":{
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p> <p>The filter names <code>status</code> and <code>fleetName</code> are supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters, but they must be for the same named item. For example, if you are looking for items with the status <code>InProgress</code> or the status <code>Pending</code>.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListDeploymentJobs</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListDeploymentJobs</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListDeploymentJobs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 200. If this parameter is not used, then <code>ListDeploymentJobs</code> returns up to 200 results and a <code>nextToken</code> value if applicable. </p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListDeploymentJobsResponse":{
-      "type":"structure",
-      "members":{
-        "deploymentJobs":{
-          "shape":"DeploymentJobs",
-          "documentation":"<p>A list of deployment jobs that meet the criteria of the request.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListDeploymentJobs</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListFleetsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListFleets</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p> <note> <p>This token should be treated as an opaque identifier that is only used to retrieve the next items in a list and not for other programmatic purposes.</p> </note>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListFleets</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListFleets</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 200. If this parameter is not used, then <code>ListFleets</code> returns up to 200 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p> <p>The filter name <code>name</code> is supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListFleetsResponse":{
-      "type":"structure",
-      "members":{
-        "fleetDetails":{
-          "shape":"Fleets",
-          "documentation":"<p>A list of fleet details meeting the request criteria.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListFleets</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListRobotApplicationsRequest":{
-      "type":"structure",
-      "members":{
-        "versionQualifier":{
-          "shape":"VersionQualifier",
-          "documentation":"<p>The version qualifier of the robot application.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListRobotApplications</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListRobotApplications</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListRobotApplications</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListRobotApplications</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p> <p>The filter name <code>name</code> is supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters.</p>"
-        }
-      }
-    },
-    "ListRobotApplicationsResponse":{
-      "type":"structure",
-      "members":{
-        "robotApplicationSummaries":{
-          "shape":"RobotApplicationSummaries",
-          "documentation":"<p>A list of robot application summaries that meet the criteria of the request.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListRobotApplications</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListRobotsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListRobots</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListRobots</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListRobots</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 200. If this parameter is not used, then <code>ListRobots</code> returns up to 200 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p> <p>The filter names <code>status</code> and <code>fleetName</code> are supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters, but they must be for the same named item. For example, if you are looking for items with the status <code>Registered</code> or the status <code>Available</code>.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListRobotsResponse":{
-      "type":"structure",
-      "members":{
-        "robots":{
-          "shape":"Robots",
-          "documentation":"<p>A list of robots that meet the criteria of the request.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListRobots</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "ListSimulationApplicationsRequest":{
-      "type":"structure",
-      "members":{
-        "versionQualifier":{
-          "shape":"VersionQualifier",
-          "documentation":"<p>The version qualifier of the simulation application.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationApplications</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListSimulationApplications</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListSimulationApplications</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListSimulationApplications</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional list of filters to limit results.</p> <p>The filter name <code>name</code> is supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters.</p>"
-        }
-      }
-    },
-    "ListSimulationApplicationsResponse":{
-      "type":"structure",
-      "members":{
-        "simulationApplicationSummaries":{
-          "shape":"SimulationApplicationSummaries",
-          "documentation":"<p>A list of simulation application summaries that meet the criteria of the request.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationApplications</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListSimulationJobBatchesRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationJobBatches</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListSimulationJobBatches</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListSimulationJobBatches</code> request with the returned <code>nextToken</code> value. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p>"
-        }
-      }
-    },
-    "ListSimulationJobBatchesResponse":{
-      "type":"structure",
-      "members":{
-        "simulationJobBatchSummaries":{
-          "shape":"SimulationJobBatchSummaries",
-          "documentation":"<p>A list of simulation job batch summaries.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationJobBatches</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListSimulationJobsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationJobs</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListSimulationJobs</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListSimulationJobs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 1000. If this parameter is not used, then <code>ListSimulationJobs</code> returns up to 1000 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results.</p> <p>The filter names <code>status</code> and <code>simulationApplicationName</code> and <code>robotApplicationName</code> are supported. When filtering, you must use the complete value of the filtered item. You can use up to three filters, but they must be for the same named item. For example, if you are looking for items with the status <code>Preparing</code> or the status <code>Running</code>.</p>"
-        }
-      }
-    },
-    "ListSimulationJobsResponse":{
-      "type":"structure",
-      "required":["simulationJobSummaries"],
-      "members":{
-        "simulationJobSummaries":{
-          "shape":"SimulationJobSummaries",
-          "documentation":"<p>A list of simulation job summaries that meet the criteria of the request.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListSimulationJobs</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListTagsForResourceRequest":{
-      "type":"structure",
-      "required":["resourceArn"],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The AWS RoboMaker Amazon Resource Name (ARN) with tags to be listed.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        }
-      }
-    },
-    "ListTagsForResourceResponse":{
-      "type":"structure",
-      "members":{
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>The list of all tags added to the specified resource.</p>"
-        }
-      }
-    },
-    "ListWorldExportJobsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldExportJobs</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListWorldExportJobs</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListWorldExportJobs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListWorldExportJobs</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results. You can use <code>generationJobId</code> and <code>templateId</code>.</p>"
-        }
-      }
-    },
-    "ListWorldExportJobsResponse":{
-      "type":"structure",
-      "required":["worldExportJobSummaries"],
-      "members":{
-        "worldExportJobSummaries":{
-          "shape":"WorldExportJobSummaries",
-          "documentation":"<p>Summary information for world export jobs.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldExportJobsRequest</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListWorldGenerationJobsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldGenerationJobsRequest</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListWorldGeneratorJobs</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListWorldGeneratorJobs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListWorldGeneratorJobs</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results. You can use <code>status</code> and <code>templateId</code>.</p>"
-        }
-      }
-    },
-    "ListWorldGenerationJobsResponse":{
-      "type":"structure",
-      "required":["worldGenerationJobSummaries"],
-      "members":{
-        "worldGenerationJobSummaries":{
-          "shape":"WorldGenerationJobSummaries",
-          "documentation":"<p>Summary information for world generator jobs.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldGeneratorJobsRequest</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListWorldTemplatesRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldTemplates</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListWorldTemplates</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListWorldTemplates</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListWorldTemplates</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        }
-      }
-    },
-    "ListWorldTemplatesResponse":{
-      "type":"structure",
-      "members":{
-        "templateSummaries":{
-          "shape":"TemplateSummaries",
-          "documentation":"<p>Summary information for templates.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorldTemplates</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "ListWorldsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorlds</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>When this parameter is used, <code>ListWorlds</code> only returns <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. The remaining results of the initial request can be seen by sending another <code>ListWorlds</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If this parameter is not used, then <code>ListWorlds</code> returns up to 100 results and a <code>nextToken</code> value if applicable. </p>"
-        },
-        "filters":{
-          "shape":"Filters",
-          "documentation":"<p>Optional filters to limit results. You can use <code>status</code>.</p>"
-        }
-      }
-    },
-    "ListWorldsResponse":{
-      "type":"structure",
-      "members":{
-        "worldSummaries":{
-          "shape":"WorldSummaries",
-          "documentation":"<p>Summary information for worlds.</p>"
-        },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>If the previous paginated request did not return all of the remaining results, the response object's <code>nextToken</code> parameter value is set to a token. To retrieve the next set of results, call <code>ListWorlds</code> again and assign that token to the request object's <code>nextToken</code> parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. </p>"
-        }
-      }
-    },
-    "LoggingConfig":{
-      "type":"structure",
-      "members":{
-        "recordAllRosTopics":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A boolean indicating whether to record all ROS topics.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>",
-          "deprecated":true,
-          "deprecatedMessage":"AWS RoboMaker is ending support for ROS software suite. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/software-support-policy.html."
-        }
-      },
-      "documentation":"<p>The logging configuration.</p>"
-    },
-    "MaxConcurrency":{"type":"integer"},
-    "MaxResults":{"type":"integer"},
-    "Name":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_\\-]*"
-    },
-    "NetworkInterface":{
-      "type":"structure",
-      "members":{
-        "networkInterfaceId":{
-          "shape":"GenericString",
-          "documentation":"<p>The ID of the network interface.</p>"
-        },
-        "privateIpAddress":{
-          "shape":"GenericString",
-          "documentation":"<p>The IPv4 address of the network interface within the subnet.</p>"
-        },
-        "publicIpAddress":{
-          "shape":"GenericString",
-          "documentation":"<p>The IPv4 public address of the network interface.</p>"
-        }
-      },
-      "documentation":"<p>Describes a network interface.</p>"
-    },
-    "NonEmptyString":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":".+"
-    },
-    "NonSystemPort":{
-      "type":"integer",
-      "max":65535,
-      "min":1024
-    },
-    "OutputLocation":{
-      "type":"structure",
-      "members":{
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The S3 bucket for output.</p>"
-        },
-        "s3Prefix":{
-          "shape":"S3Key",
-          "documentation":"<p>The S3 folder in the <code>s3Bucket</code> where output files will be placed.</p>"
-        }
-      },
-      "documentation":"<p>The output location.</p>"
-    },
-    "PaginationToken":{
-      "type":"string",
-      "max":2048,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_.\\-\\/+=]*"
-    },
-    "Path":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".*"
-    },
-    "PercentDone":{
-      "type":"float",
-      "max":100.0,
-      "min":0.0
-    },
-    "Percentage":{
-      "type":"integer",
-      "max":100,
-      "min":1
-    },
-    "Port":{
-      "type":"integer",
-      "max":65535,
-      "min":1
-    },
-    "PortForwardingConfig":{
-      "type":"structure",
-      "members":{
-        "portMappings":{
-          "shape":"PortMappingList",
-          "documentation":"<p>The port mappings for the configuration.</p>"
-        }
-      },
-      "documentation":"<p>Configuration information for port forwarding.</p>"
-    },
-    "PortMapping":{
-      "type":"structure",
-      "required":[
-        "jobPort",
-        "applicationPort"
-      ],
-      "members":{
-        "jobPort":{
-          "shape":"Port",
-          "documentation":"<p>The port number on the simulation job instance to use as a remote connection point. </p>"
-        },
-        "applicationPort":{
-          "shape":"NonSystemPort",
-          "documentation":"<p>The port number on the application.</p>"
-        },
-        "enableOnPublicIp":{
-          "shape":"Boolean",
-          "documentation":"<p>A Boolean indicating whether to enable this port mapping on public IP.</p>"
-        }
-      },
-      "documentation":"<p>An object representing a port mapping.</p>"
-    },
-    "PortMappingList":{
-      "type":"list",
-      "member":{"shape":"PortMapping"},
-      "max":10,
-      "min":0
-    },
-    "ProgressDetail":{
-      "type":"structure",
-      "members":{
-        "currentProgress":{
-          "shape":"RobotDeploymentStep",
-          "documentation":"<p>The current progress status.</p> <dl> <dt>Validating</dt> <dd> <p>Validating the deployment.</p> </dd> <dt>DownloadingExtracting</dt> <dd> <p>Downloading and extracting the bundle on the robot.</p> </dd> <dt>ExecutingPreLaunch</dt> <dd> <p>Executing pre-launch script(s) if provided.</p> </dd> <dt>Launching</dt> <dd> <p>Launching the robot application.</p> </dd> <dt>ExecutingPostLaunch</dt> <dd> <p>Executing post-launch script(s) if provided.</p> </dd> <dt>Finished</dt> <dd> <p>Deployment is complete.</p> </dd> </dl>"
-        },
-        "percentDone":{
-          "shape":"PercentDone",
-          "documentation":"<p>Precentage of the step that is done. This currently only applies to the <code>Downloading/Extracting</code> step of the deployment. It is empty for other steps.</p>"
-        },
-        "estimatedTimeRemainingSeconds":{
-          "shape":"GenericInteger",
-          "documentation":"<p>Estimated amount of time in seconds remaining in the step. This currently only applies to the <code>Downloading/Extracting</code> step of the deployment. It is empty for other steps.</p>"
-        },
-        "targetResource":{
-          "shape":"GenericString",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the deployment job.</p>"
-        }
-      },
-      "documentation":"<p>Information about the progress of a deployment job.</p>"
-    },
-    "RegisterRobotRequest":{
-      "type":"structure",
-      "required":[
-        "fleet",
-        "robot"
-      ],
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "RegisterRobotResponse":{
-      "type":"structure",
-      "members":{
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet that the robot will join.</p>"
-        },
-        "robot":{
-          "shape":"Arn",
-          "documentation":"<p>Information about the robot registration.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"AWS RoboMaker is unable to process this request as the support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "RenderingEngine":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"RenderingEngineType",
-          "documentation":"<p>The name of the rendering engine.</p>"
-        },
-        "version":{
-          "shape":"RenderingEngineVersionType",
-          "documentation":"<p>The version of the rendering engine.</p>"
-        }
-      },
-      "documentation":"<p>Information about a rendering engine.</p>"
-    },
-    "RenderingEngineType":{
-      "type":"string",
-      "enum":["OGRE"]
-    },
-    "RenderingEngineVersionType":{
-      "type":"string",
-      "max":4,
-      "min":1,
-      "pattern":"1.x"
-    },
-    "RepositoryUrl":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".+"
-    },
-    "ResourceAlreadyExistsException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The specified resource already exists.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "ResourceNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The specified resource does not exist.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "RestartSimulationJobRequest":{
-      "type":"structure",
-      "required":["job"],
-      "members":{
-        "job":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job.</p>"
-        }
-      }
-    },
-    "RestartSimulationJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "RevisionId":{
-      "type":"string",
-      "max":40,
-      "min":1,
-      "pattern":"[a-zA-Z0-9_.\\-]*"
-    },
-    "Robot":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot.</p>"
-        },
-        "fleetArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "status":{
-          "shape":"RobotStatus",
-          "documentation":"<p>The status of the robot.</p>"
-        },
-        "greenGrassGroupId":{
-          "shape":"Id",
-          "documentation":"<p>The Greengrass group associated with the robot.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot was created.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The architecture of the robot.</p>"
-        },
-        "lastDeploymentJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the last deployment job.</p>"
-        },
-        "lastDeploymentTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time of the last deployment.</p>"
-        }
-      },
-      "documentation":"<p>Information about a robot.</p>"
-    },
-    "RobotApplicationConfig":{
-      "type":"structure",
-      "required":[
-        "application",
-        "launchConfig"
-      ],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the robot application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "launchConfig":{
-          "shape":"LaunchConfig",
-          "documentation":"<p>The launch configuration for the robot application.</p>"
-        },
-        "uploadConfigurations":{
-          "shape":"UploadConfigurations",
-          "documentation":"<p>The upload configurations for the robot application.</p>"
-        },
-        "useDefaultUploadConfigurations":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A Boolean indicating whether to use default upload configurations. By default, <code>.ros</code> and <code>.gazebo</code> files are uploaded when the application terminates and all ROS topics will be recorded.</p> <p>If you set this value, you must specify an <code>outputLocation</code>.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>",
-          "deprecated":true,
-          "deprecatedMessage":"AWS RoboMaker is ending support for ROS software suite. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/software-support-policy.html."
-        },
-        "tools":{
-          "shape":"Tools",
-          "documentation":"<p>Information about tools configured for the robot application.</p>"
-        },
-        "useDefaultTools":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A Boolean indicating whether to use default robot application tools. The default tools are rviz, rqt, terminal and rosbag record. The default is <code>False</code>.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>",
-          "deprecated":true,
-          "deprecatedMessage":"AWS RoboMaker is ending support for ROS software suite. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/software-support-policy.html."
-        }
-      },
-      "documentation":"<p>Application configuration information for a robot.</p>"
-    },
-    "RobotApplicationConfigs":{
-      "type":"list",
-      "member":{"shape":"RobotApplicationConfig"},
-      "max":1,
-      "min":1
-    },
-    "RobotApplicationNames":{
-      "type":"list",
-      "member":{"shape":"Name"}
-    },
-    "RobotApplicationSummaries":{
-      "type":"list",
-      "member":{"shape":"RobotApplicationSummary"},
-      "max":100,
-      "min":0
-    },
-    "RobotApplicationSummary":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the robot.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot application was last updated.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about a robot software suite.</p>"
-        }
-      },
-      "documentation":"<p>Summary information for a robot application.</p>"
-    },
-    "RobotDeployment":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The robot deployment Amazon Resource Name (ARN).</p>"
-        },
-        "deploymentStartTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the deployment was started.</p>"
-        },
-        "deploymentFinishTime":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the deployment finished.</p>"
-        },
-        "status":{
-          "shape":"RobotStatus",
-          "documentation":"<p>The status of the robot deployment.</p>"
-        },
-        "progressDetail":{
-          "shape":"ProgressDetail",
-          "documentation":"<p>Information about how the deployment is progressing.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>A short description of the reason why the robot deployment failed.</p>"
-        },
-        "failureCode":{
-          "shape":"DeploymentJobErrorCode",
-          "documentation":"<p>The robot deployment failure code.</p>"
-        }
-      },
-      "documentation":"<p>Information about a robot deployment.</p>"
-    },
-    "RobotDeploymentStep":{
-      "type":"string",
-      "enum":[
-        "Validating",
-        "DownloadingExtracting",
-        "ExecutingDownloadCondition",
-        "ExecutingPreLaunch",
-        "Launching",
-        "ExecutingPostLaunch",
-        "Finished"
-      ]
-    },
-    "RobotDeploymentSummary":{
-      "type":"list",
-      "member":{"shape":"RobotDeployment"}
-    },
-    "RobotSoftwareSuite":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"RobotSoftwareSuiteType",
-          "documentation":"<p>The name of the robot software suite. <code>General</code> is the only supported value.</p>"
-        },
-        "version":{
-          "shape":"RobotSoftwareSuiteVersionType",
-          "documentation":"<p>The version of the robot software suite. Not applicable for General software suite.</p>"
-        }
-      },
-      "documentation":"<p>Information about a robot software suite.</p>"
-    },
-    "RobotSoftwareSuiteType":{
-      "type":"string",
-      "enum":[
-        "ROS",
-        "ROS2",
-        "General"
-      ]
-    },
-    "RobotSoftwareSuiteVersionType":{
-      "type":"string",
-      "enum":[
-        "Kinetic",
-        "Melodic",
-        "Dashing",
-        "Foxy"
-      ]
-    },
-    "RobotStatus":{
-      "type":"string",
-      "enum":[
-        "Available",
-        "Registered",
-        "PendingNewDeployment",
-        "Deploying",
-        "Failed",
-        "InSync",
-        "NoResponse"
-      ]
-    },
-    "Robots":{
-      "type":"list",
-      "member":{"shape":"Robot"},
-      "max":1000,
-      "min":0
-    },
-    "S3Bucket":{
-      "type":"string",
-      "max":63,
-      "min":3,
-      "pattern":"[a-z0-9][a-z0-9.\\-]*[a-z0-9]"
-    },
-    "S3Etag":{"type":"string"},
-    "S3Etags":{
-      "type":"list",
-      "member":{"shape":"S3Etag"}
-    },
-    "S3Key":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".*"
-    },
-    "S3KeyOrPrefix":{
-      "type":"string",
-      "max":1024,
-      "min":0,
-      "pattern":".*"
-    },
-    "S3KeyOutput":{
-      "type":"structure",
-      "members":{
-        "s3Key":{
-          "shape":"S3KeyOrPrefix",
-          "documentation":"<p>The S3 key.</p>"
-        },
-        "etag":{
-          "shape":"S3Etag",
-          "documentation":"<p>The etag for the object.</p>"
-        }
-      },
-      "documentation":"<p>Information about S3 keys.</p>"
-    },
-    "S3KeyOutputs":{
-      "type":"list",
-      "member":{"shape":"S3KeyOutput"}
-    },
-    "S3KeysOrPrefixes":{
-      "type":"list",
-      "member":{"shape":"S3KeyOrPrefix"},
-      "max":100,
-      "min":1
-    },
-    "S3Object":{
-      "type":"structure",
-      "required":[
-        "bucket",
-        "key"
-      ],
-      "members":{
-        "bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The bucket containing the object.</p>"
-        },
-        "key":{
-          "shape":"S3Key",
-          "documentation":"<p>The key of the object.</p>"
-        },
-        "etag":{
-          "shape":"S3Etag",
-          "documentation":"<p>The etag of the object.</p>"
-        }
-      },
-      "documentation":"<p>Information about an S3 object.</p>"
-    },
-    "SecurityGroups":{
-      "type":"list",
-      "member":{"shape":"NonEmptyString"},
-      "max":5,
-      "min":1
-    },
-    "ServiceUnavailableException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>The request has failed due to a temporary failure of the server.</p>",
-      "error":{"httpStatusCode":503},
-      "exception":true
-    },
-    "SimulationApplicationConfig":{
-      "type":"structure",
-      "required":[
-        "application",
-        "launchConfig"
-      ],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the simulation application.</p>"
-        },
-        "applicationVersion":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application.</p>"
-        },
-        "launchConfig":{
-          "shape":"LaunchConfig",
-          "documentation":"<p>The launch configuration for the simulation application.</p>"
-        },
-        "uploadConfigurations":{
-          "shape":"UploadConfigurations",
-          "documentation":"<p>Information about upload configurations for the simulation application.</p>"
-        },
-        "worldConfigs":{
-          "shape":"WorldConfigs",
-          "documentation":"<p>A list of world configurations.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>"
-        },
-        "useDefaultUploadConfigurations":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A Boolean indicating whether to use default upload configurations. By default, <code>.ros</code> and <code>.gazebo</code> files are uploaded when the application terminates and all ROS topics will be recorded.</p> <p>If you set this value, you must specify an <code>outputLocation</code>.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>",
-          "deprecated":true,
-          "deprecatedMessage":"AWS RoboMaker is ending support for ROS software suite. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/software-support-policy.html."
-        },
-        "tools":{
-          "shape":"Tools",
-          "documentation":"<p>Information about tools configured for the simulation application.</p>"
-        },
-        "useDefaultTools":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A Boolean indicating whether to use default simulation application tools. The default tools are rviz, rqt, terminal and rosbag record. The default is <code>False</code>.</p> <important> <p>This API is no longer supported and will throw an error if used.</p> </important>",
-          "deprecated":true,
-          "deprecatedMessage":"AWS RoboMaker is ending support for ROS software suite. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/software-support-policy.html."
-        }
-      },
-      "documentation":"<p>Information about a simulation application configuration.</p>"
-    },
-    "SimulationApplicationConfigs":{
-      "type":"list",
-      "member":{"shape":"SimulationApplicationConfig"},
-      "max":1,
-      "min":1
-    },
-    "SimulationApplicationNames":{
-      "type":"list",
-      "member":{"shape":"Name"}
-    },
-    "SimulationApplicationSummaries":{
-      "type":"list",
-      "member":{"shape":"SimulationApplicationSummary"},
-      "max":100,
-      "min":0
-    },
-    "SimulationApplicationSummary":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the simulation application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation application was last updated.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about a robot software suite.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>Information about a simulation software suite.</p>"
-        }
-      },
-      "documentation":"<p>Summary information for a simulation application.</p>"
-    },
-    "SimulationJob":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation job.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobStatus",
-          "documentation":"<p>Status of the simulation job.</p>"
-        },
-        "lastStartedAt":{
-          "shape":"LastStartedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last started.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last updated.</p>"
-        },
-        "failureBehavior":{
-          "shape":"FailureBehavior",
-          "documentation":"<p>The failure behavior the simulation job.</p> <dl> <dt>Continue</dt> <dd> <p>Leaves the host running for its maximum timeout duration after a <code>4XX</code> error code.</p> </dd> <dt>Fail</dt> <dd> <p>Stop the simulation job and terminate the instance.</p> </dd> </dl>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobErrorCode",
-          "documentation":"<p>The failure code of the simulation job if it failed.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The reason why the simulation job failed.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>A unique identifier for this <code>SimulationJob</code> request.</p>"
-        },
-        "outputLocation":{
-          "shape":"OutputLocation",
-          "documentation":"<p>Location for output files generated by the simulation job.</p>"
-        },
-        "loggingConfig":{
-          "shape":"LoggingConfig",
-          "documentation":"<p>The logging configuration.</p>"
-        },
-        "maxJobDurationInSeconds":{
-          "shape":"JobDuration",
-          "documentation":"<p>The maximum simulation job duration in seconds. The value must be 8 days (691,200 seconds) or less.</p>"
-        },
-        "simulationTimeMillis":{
-          "shape":"SimulationTimeMillis",
-          "documentation":"<p>The simulation job execution duration in milliseconds.</p>"
-        },
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role that allows the simulation instance to call the AWS APIs that are specified in its associated policies on your behalf. This is how credentials are passed in to your simulation job. </p>"
-        },
-        "robotApplications":{
-          "shape":"RobotApplicationConfigs",
-          "documentation":"<p>A list of robot applications.</p>"
-        },
-        "simulationApplications":{
-          "shape":"SimulationApplicationConfigs",
-          "documentation":"<p>A list of simulation applications.</p>"
-        },
-        "dataSources":{
-          "shape":"DataSources",
-          "documentation":"<p>The data sources for the simulation job.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the simulation job.</p>"
-        },
-        "vpcConfig":{
-          "shape":"VPCConfigResponse",
-          "documentation":"<p>VPC configuration information.</p>"
-        },
-        "networkInterface":{
-          "shape":"NetworkInterface",
-          "documentation":"<p>Information about a network interface.</p>"
-        },
-        "compute":{
-          "shape":"ComputeResponse",
-          "documentation":"<p>Compute information for the simulation job</p>"
-        }
-      },
-      "documentation":"<p>Information about a simulation job.</p>"
-    },
-    "SimulationJobBatchErrorCode":{
-      "type":"string",
-      "enum":["InternalServiceError"]
-    },
-    "SimulationJobBatchStatus":{
-      "type":"string",
-      "enum":[
-        "Pending",
-        "InProgress",
-        "Failed",
-        "Completed",
-        "Canceled",
-        "Canceling",
-        "Completing",
-        "TimingOut",
-        "TimedOut"
-      ]
-    },
-    "SimulationJobBatchSummaries":{
-      "type":"list",
-      "member":{"shape":"SimulationJobBatchSummary"}
-    },
-    "SimulationJobBatchSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the batch.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch was last updated. </p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch was created.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobBatchStatus",
-          "documentation":"<p>The status of the simulation job batch.</p> <dl> <dt>Pending</dt> <dd> <p>The simulation job batch request is pending.</p> </dd> <dt>InProgress</dt> <dd> <p>The simulation job batch is in progress. </p> </dd> <dt>Failed</dt> <dd> <p>The simulation job batch failed. One or more simulation job requests could not be completed due to an internal failure (like <code>InternalServiceError</code>). See <code>failureCode</code> and <code>failureReason</code> for more information.</p> </dd> <dt>Completed</dt> <dd> <p>The simulation batch job completed. A batch is complete when (1) there are no pending simulation job requests in the batch and none of the failed simulation job requests are due to <code>InternalServiceError</code> and (2) when all created simulation jobs have reached a terminal state (for example, <code>Completed</code> or <code>Failed</code>). </p> </dd> <dt>Canceled</dt> <dd> <p>The simulation batch job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The simulation batch job is being cancelled.</p> </dd> <dt>Completing</dt> <dd> <p>The simulation batch job is completing.</p> </dd> <dt>TimingOut</dt> <dd> <p>The simulation job batch is timing out.</p> <p>If a batch timing out, and there are pending requests that were failing due to an internal failure (like <code>InternalServiceError</code>), the batch status will be <code>Failed</code>. If there are no such failing request, the batch status will be <code>TimedOut</code>. </p> </dd> <dt>TimedOut</dt> <dd> <p>The simulation batch job timed out.</p> </dd> </dl>"
-        },
-        "failedRequestCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of failed simulation job requests.</p>"
-        },
-        "pendingRequestCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of pending simulation job requests.</p>"
-        },
-        "createdRequestCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of created simulation job requests.</p>"
-        }
-      },
-      "documentation":"<p>Information about a simulation job batch.</p>"
-    },
-    "SimulationJobErrorCode":{
-      "type":"string",
-      "enum":[
-        "InternalServiceError",
-        "RobotApplicationCrash",
-        "SimulationApplicationCrash",
-        "RobotApplicationHealthCheckFailure",
-        "SimulationApplicationHealthCheckFailure",
-        "BadPermissionsRobotApplication",
-        "BadPermissionsSimulationApplication",
-        "BadPermissionsS3Object",
-        "BadPermissionsS3Output",
-        "BadPermissionsCloudwatchLogs",
-        "SubnetIpLimitExceeded",
-        "ENILimitExceeded",
-        "BadPermissionsUserCredentials",
-        "InvalidBundleRobotApplication",
-        "InvalidBundleSimulationApplication",
-        "InvalidS3Resource",
-        "ThrottlingError",
-        "LimitExceeded",
-        "MismatchedEtag",
-        "RobotApplicationVersionMismatchedEtag",
-        "SimulationApplicationVersionMismatchedEtag",
-        "ResourceNotFound",
-        "RequestThrottled",
-        "BatchTimedOut",
-        "BatchCanceled",
-        "InvalidInput",
-        "WrongRegionS3Bucket",
-        "WrongRegionS3Output",
-        "WrongRegionRobotApplication",
-        "WrongRegionSimulationApplication",
-        "UploadContentMismatchError"
-      ]
-    },
-    "SimulationJobRequest":{
-      "type":"structure",
-      "required":["maxJobDurationInSeconds"],
-      "members":{
-        "outputLocation":{"shape":"OutputLocation"},
-        "loggingConfig":{"shape":"LoggingConfig"},
-        "maxJobDurationInSeconds":{
-          "shape":"JobDuration",
-          "documentation":"<p>The maximum simulation job duration in seconds. The value must be 8 days (691,200 seconds) or less.</p>"
-        },
-        "iamRole":{
-          "shape":"IamRole",
-          "documentation":"<p>The IAM role name that allows the simulation instance to call the AWS APIs that are specified in its associated policies on your behalf. This is how credentials are passed in to your simulation job. </p>"
-        },
-        "failureBehavior":{
-          "shape":"FailureBehavior",
-          "documentation":"<p>The failure behavior the simulation job.</p> <dl> <dt>Continue</dt> <dd> <p>Leaves the host running for its maximum timeout duration after a <code>4XX</code> error code.</p> </dd> <dt>Fail</dt> <dd> <p>Stop the simulation job and terminate the instance.</p> </dd> </dl>"
-        },
-        "useDefaultApplications":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>A Boolean indicating whether to use default applications in the simulation job. Default applications include Gazebo, rqt, rviz and terminal access. </p>"
-        },
-        "robotApplications":{
-          "shape":"RobotApplicationConfigs",
-          "documentation":"<p>The robot applications to use in the simulation job.</p>"
-        },
-        "simulationApplications":{
-          "shape":"SimulationApplicationConfigs",
-          "documentation":"<p>The simulation applications to use in the simulation job.</p>"
-        },
-        "dataSources":{
-          "shape":"DataSourceConfigs",
-          "documentation":"<p>Specify data sources to mount read-only files from S3 into your simulation. These files are available under <code>/opt/robomaker/datasources/data_source_name</code>. </p> <note> <p>There is a limit of 100 files and a combined size of 25GB for all <code>DataSourceConfig</code> objects. </p> </note>"
-        },
-        "vpcConfig":{"shape":"VPCConfig"},
-        "compute":{
-          "shape":"Compute",
-          "documentation":"<p>Compute information for the simulation job</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the simulation job request.</p>"
-        }
-      },
-      "documentation":"<p>Information about a simulation job request.</p>"
-    },
-    "SimulationJobStatus":{
-      "type":"string",
-      "enum":[
-        "Pending",
-        "Preparing",
-        "Running",
-        "Restarting",
-        "Completed",
-        "Failed",
-        "RunningFailed",
-        "Terminating",
-        "Terminated",
-        "Canceled"
-      ]
-    },
-    "SimulationJobSummaries":{
-      "type":"list",
-      "member":{"shape":"SimulationJobSummary"},
-      "max":100,
-      "min":0
-    },
-    "SimulationJobSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the simulation job.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job was last updated.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation job.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobStatus",
-          "documentation":"<p>The status of the simulation job.</p>"
-        },
-        "simulationApplicationNames":{
-          "shape":"SimulationApplicationNames",
-          "documentation":"<p>A list of simulation job simulation application names.</p>"
-        },
-        "robotApplicationNames":{
-          "shape":"RobotApplicationNames",
-          "documentation":"<p>A list of simulation job robot application names.</p>"
-        },
-        "dataSourceNames":{
-          "shape":"DataSourceNames",
-          "documentation":"<p>The names of the data sources.</p>"
-        },
-        "computeType":{
-          "shape":"ComputeType",
-          "documentation":"<p>The compute type for the simulation job summary.</p>"
-        }
-      },
-      "documentation":"<p>Summary information for a simulation job.</p>"
-    },
-    "SimulationJobs":{
-      "type":"list",
-      "member":{"shape":"SimulationJob"}
-    },
-    "SimulationSoftwareSuite":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"SimulationSoftwareSuiteType",
-          "documentation":"<p>The name of the simulation software suite. <code>SimulationRuntime</code> is the only supported value.</p>"
-        },
-        "version":{
-          "shape":"SimulationSoftwareSuiteVersionType",
-          "documentation":"<p>The version of the simulation software suite. Not applicable for <code>SimulationRuntime</code>.</p>"
-        }
-      },
-      "documentation":"<p>Information about a simulation software suite.</p>"
-    },
-    "SimulationSoftwareSuiteType":{
-      "type":"string",
-      "enum":[
-        "Gazebo",
-        "RosbagPlay",
-        "SimulationRuntime"
-      ]
-    },
-    "SimulationSoftwareSuiteVersionType":{
-      "type":"string",
-      "max":1024,
-      "min":0,
-      "pattern":"7|9|11|Kinetic|Melodic|Dashing|Foxy"
-    },
-    "SimulationTimeMillis":{"type":"long"},
-    "SimulationUnit":{
-      "type":"integer",
-      "max":15,
-      "min":1
-    },
-    "Source":{
-      "type":"structure",
-      "members":{
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The s3 bucket name.</p>"
-        },
-        "s3Key":{
-          "shape":"S3Key",
-          "documentation":"<p>The s3 object key.</p>"
-        },
-        "etag":{
-          "shape":"S3Etag",
-          "documentation":"<p>A hash of the object specified by <code>s3Bucket</code> and <code>s3Key</code>.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The taget processor architecture for the application.</p>"
-        }
-      },
-      "documentation":"<p>Information about a source.</p>"
-    },
-    "SourceConfig":{
-      "type":"structure",
-      "members":{
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The Amazon S3 bucket name.</p>"
-        },
-        "s3Key":{
-          "shape":"S3Key",
-          "documentation":"<p>The s3 object key.</p>"
-        },
-        "architecture":{
-          "shape":"Architecture",
-          "documentation":"<p>The target processor architecture for the application.</p>"
-        }
-      },
-      "documentation":"<p>Information about a source configuration.</p>"
-    },
-    "SourceConfigs":{
-      "type":"list",
-      "member":{"shape":"SourceConfig"}
-    },
-    "Sources":{
-      "type":"list",
-      "member":{"shape":"Source"}
-    },
-    "StartSimulationJobBatchRequest":{
-      "type":"structure",
-      "required":["createSimulationJobRequests"],
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "batchPolicy":{
-          "shape":"BatchPolicy",
-          "documentation":"<p>The batch policy.</p>"
-        },
-        "createSimulationJobRequests":{
-          "shape":"CreateSimulationJobRequests",
-          "documentation":"<p>A list of simulation job requests to create in the batch.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the deployment job batch.</p>"
-        }
-      }
-    },
-    "StartSimulationJobBatchResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the batch.</p>"
-        },
-        "status":{
-          "shape":"SimulationJobBatchStatus",
-          "documentation":"<p>The status of the simulation job batch.</p> <dl> <dt>Pending</dt> <dd> <p>The simulation job batch request is pending.</p> </dd> <dt>InProgress</dt> <dd> <p>The simulation job batch is in progress. </p> </dd> <dt>Failed</dt> <dd> <p>The simulation job batch failed. One or more simulation job requests could not be completed due to an internal failure (like <code>InternalServiceError</code>). See <code>failureCode</code> and <code>failureReason</code> for more information.</p> </dd> <dt>Completed</dt> <dd> <p>The simulation batch job completed. A batch is complete when (1) there are no pending simulation job requests in the batch and none of the failed simulation job requests are due to <code>InternalServiceError</code> and (2) when all created simulation jobs have reached a terminal state (for example, <code>Completed</code> or <code>Failed</code>). </p> </dd> <dt>Canceled</dt> <dd> <p>The simulation batch job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The simulation batch job is being cancelled.</p> </dd> <dt>Completing</dt> <dd> <p>The simulation batch job is completing.</p> </dd> <dt>TimingOut</dt> <dd> <p>The simulation job batch is timing out.</p> <p>If a batch timing out, and there are pending requests that were failing due to an internal failure (like <code>InternalServiceError</code>), the batch status will be <code>Failed</code>. If there are no such failing request, the batch status will be <code>TimedOut</code>. </p> </dd> <dt>TimedOut</dt> <dd> <p>The simulation batch job timed out.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation job batch was created.</p>"
-        },
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>"
-        },
-        "batchPolicy":{
-          "shape":"BatchPolicy",
-          "documentation":"<p>The batch policy.</p>"
-        },
-        "failureCode":{
-          "shape":"SimulationJobBatchErrorCode",
-          "documentation":"<p>The failure code if the simulation job batch failed.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The reason the simulation job batch failed.</p>"
-        },
-        "failedRequests":{
-          "shape":"FailedCreateSimulationJobRequests",
-          "documentation":"<p>A list of failed simulation job requests. The request failed to be created into a simulation job. Failed requests do not have a simulation job ID. </p>"
-        },
-        "pendingRequests":{
-          "shape":"CreateSimulationJobRequests",
-          "documentation":"<p>A list of pending simulation job requests. These requests have not yet been created into simulation jobs.</p>"
-        },
-        "createdRequests":{
-          "shape":"SimulationJobSummaries",
-          "documentation":"<p>A list of created simulation job request summaries.</p>"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the deployment job batch.</p>"
-        }
-      }
-    },
-    "Subnets":{
-      "type":"list",
-      "member":{"shape":"NonEmptyString"},
-      "max":16,
-      "min":1
-    },
-    "SyncDeploymentJobRequest":{
-      "type":"structure",
-      "required":[
-        "clientRequestToken",
-        "fleet"
-      ],
-      "members":{
-        "clientRequestToken":{
-          "shape":"ClientRequestToken",
-          "documentation":"<p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>",
-          "idempotencyToken":true
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The target fleet for the synchronization.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "SyncDeploymentJobResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the synchronization request.</p>"
-        },
-        "fleet":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the fleet.</p>"
-        },
-        "status":{
-          "shape":"DeploymentStatus",
-          "documentation":"<p>The status of the synchronization job.</p>"
-        },
-        "deploymentConfig":{
-          "shape":"DeploymentConfig",
-          "documentation":"<p>Information about the deployment configuration.</p>"
-        },
-        "deploymentApplicationConfigs":{
-          "shape":"DeploymentApplicationConfigs",
-          "documentation":"<p>Information about the deployment application configurations.</p>"
-        },
-        "failureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The failure reason if the job fails.</p>"
-        },
-        "failureCode":{
-          "shape":"DeploymentJobErrorCode",
-          "documentation":"<p>The failure code if the job fails:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>RobotApplicationCrash</dt> <dd> <p>Robot application exited abnormally.</p> </dd> <dt>SimulationApplicationCrash</dt> <dd> <p> Simulation application exited abnormally.</p> </dd> <dt>BadPermissionsRobotApplication</dt> <dd> <p>Robot application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsSimulationApplication</dt> <dd> <p>Simulation application bundle could not be downloaded.</p> </dd> <dt>BadPermissionsS3Output</dt> <dd> <p>Unable to publish outputs to customer-provided S3 bucket.</p> </dd> <dt>BadPermissionsCloudwatchLogs</dt> <dd> <p>Unable to publish logs to customer-provided CloudWatch Logs resource.</p> </dd> <dt>SubnetIpLimitExceeded</dt> <dd> <p>Subnet IP limit exceeded.</p> </dd> <dt>ENILimitExceeded</dt> <dd> <p>ENI limit exceeded.</p> </dd> <dt>BadPermissionsUserCredentials</dt> <dd> <p>Unable to use the Role provided.</p> </dd> <dt>InvalidBundleRobotApplication</dt> <dd> <p>Robot bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>InvalidBundleSimulationApplication</dt> <dd> <p>Simulation bundle cannot be extracted (invalid format, bundling error, or other issue).</p> </dd> <dt>RobotApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for RobotApplication does not match value during version creation.</p> </dd> <dt>SimulationApplicationVersionMismatchedEtag</dt> <dd> <p>Etag for SimulationApplication does not match value during version creation.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the fleet was created.</p>"
-        }
-      },
-      "deprecated":true,
-      "deprecatedMessage":"Support for the AWS RoboMaker application deployment feature has ended. For additional information, see https://docs.aws.amazon.com/robomaker/latest/dg/fleets.html."
-    },
-    "TagKey":{
-      "type":"string",
-      "max":128,
-      "min":1,
-      "pattern":"[a-zA-Z0-9 _.\\-\\/+=:]*"
-    },
-    "TagKeyList":{
-      "type":"list",
-      "member":{"shape":"TagKey"}
-    },
-    "TagMap":{
-      "type":"map",
-      "key":{"shape":"TagKey"},
-      "value":{"shape":"TagValue"},
-      "max":50,
-      "min":0
-    },
-    "TagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tags"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are tagging.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tags":{
-          "shape":"TagMap",
-          "documentation":"<p>A map that contains tag keys and tag values that are attached to the resource.</p>"
-        }
-      }
-    },
-    "TagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "TagValue":{
-      "type":"string",
-      "max":256,
-      "min":0,
-      "pattern":"[a-zA-Z0-9 _.\\-\\/+=:]*"
-    },
-    "TemplateLocation":{
-      "type":"structure",
-      "required":[
-        "s3Bucket",
-        "s3Key"
-      ],
-      "members":{
-        "s3Bucket":{
-          "shape":"S3Bucket",
-          "documentation":"<p>The Amazon S3 bucket name.</p>"
-        },
-        "s3Key":{
-          "shape":"S3Key",
-          "documentation":"<p>The list of S3 keys identifying the data source files.</p>"
-        }
-      },
-      "documentation":"<p>Information about a template location.</p>"
-    },
-    "TemplateName":{
-      "type":"string",
-      "max":255,
-      "min":0,
-      "pattern":".*"
-    },
-    "TemplateSummaries":{
-      "type":"list",
-      "member":{"shape":"TemplateSummary"}
-    },
-    "TemplateSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the template.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the template was created.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the template was last updated.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the template.</p>"
-        },
-        "version":{
-          "shape":"GenericString",
-          "documentation":"<p>The version of the template that you're using.</p>"
-        }
-      },
-      "documentation":"<p>Summary information for a template.</p>"
-    },
-    "ThrottlingException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"errorMessage"}
-      },
-      "documentation":"<p>AWS RoboMaker is temporarily unable to process the request. Try your call again.</p>",
-      "error":{"httpStatusCode":400},
-      "exception":true
-    },
-    "Tool":{
-      "type":"structure",
-      "required":[
-        "name",
-        "command"
-      ],
-      "members":{
-        "streamUI":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>Boolean indicating whether a streaming session will be configured for the tool. If <code>True</code>, AWS RoboMaker will configure a connection so you can interact with the tool as it is running in the simulation. It must have a graphical user interface. The default is <code>False</code>. </p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the tool.</p>"
-        },
-        "command":{
-          "shape":"UnrestrictedCommand",
-          "documentation":"<p>Command-line arguments for the tool. It must include the tool executable name.</p>"
-        },
-        "streamOutputToCloudWatch":{
-          "shape":"BoxedBoolean",
-          "documentation":"<p>Boolean indicating whether logs will be recorded in CloudWatch for the tool. The default is <code>False</code>. </p>"
-        },
-        "exitBehavior":{
-          "shape":"ExitBehavior",
-          "documentation":"<p>Exit behavior determines what happens when your tool quits running. <code>RESTART</code> will cause your tool to be restarted. <code>FAIL</code> will cause your job to exit. The default is <code>RESTART</code>. </p>"
-        }
-      },
-      "documentation":"<p>Information about a tool. Tools are used in a simulation job.</p>"
-    },
-    "Tools":{
-      "type":"list",
-      "member":{"shape":"Tool"},
-      "max":10,
-      "min":0
-    },
-    "UnrestrictedCommand":{
-      "type":"string",
-      "max":1024,
-      "min":1,
-      "pattern":".*"
-    },
-    "UntagResourceRequest":{
-      "type":"structure",
-      "required":[
-        "resourceArn",
-        "tagKeys"
-      ],
-      "members":{
-        "resourceArn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the AWS RoboMaker resource you are removing tags.</p>",
-          "location":"uri",
-          "locationName":"resourceArn"
-        },
-        "tagKeys":{
-          "shape":"TagKeyList",
-          "documentation":"<p>A map that contains tag keys and tag values that will be unattached from the resource.</p>",
-          "location":"querystring",
-          "locationName":"tagKeys"
-        }
-      }
-    },
-    "UntagResourceResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UpdateRobotApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "application",
-        "robotSoftwareSuite"
-      ],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the robot application.</p>"
-        },
-        "sources":{
-          "shape":"SourceConfigs",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "currentRevisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id for the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI for your robot application.</p>"
-        }
-      }
-    },
-    "UpdateRobotApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the updated robot application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the robot application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the robot application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>The robot software suite used by the robot application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the robot application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI for your robot application.</p>"
-        }
-      }
-    },
-    "UpdateSimulationApplicationRequest":{
-      "type":"structure",
-      "required":[
-        "application",
-        "simulationSoftwareSuite",
-        "robotSoftwareSuite"
-      ],
-      "members":{
-        "application":{
-          "shape":"Arn",
-          "documentation":"<p>The application information for the simulation application.</p>"
-        },
-        "sources":{
-          "shape":"SourceConfigs",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about the robot software suite.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "currentRevisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id for the robot application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI for your simulation application.</p>"
-        }
-      }
-    },
-    "UpdateSimulationApplicationResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the updated simulation application.</p>"
-        },
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>The name of the simulation application.</p>"
-        },
-        "version":{
-          "shape":"Version",
-          "documentation":"<p>The version of the robot application.</p>"
-        },
-        "sources":{
-          "shape":"Sources",
-          "documentation":"<p>The sources of the simulation application.</p>"
-        },
-        "simulationSoftwareSuite":{
-          "shape":"SimulationSoftwareSuite",
-          "documentation":"<p>The simulation software suite used by the simulation application.</p>"
-        },
-        "robotSoftwareSuite":{
-          "shape":"RobotSoftwareSuite",
-          "documentation":"<p>Information about the robot software suite.</p>"
-        },
-        "renderingEngine":{
-          "shape":"RenderingEngine",
-          "documentation":"<p>The rendering engine for the simulation application.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the simulation application was last updated.</p>"
-        },
-        "revisionId":{
-          "shape":"RevisionId",
-          "documentation":"<p>The revision id of the simulation application.</p>"
-        },
-        "environment":{
-          "shape":"Environment",
-          "documentation":"<p>The object that contains the Docker image URI used for your simulation application.</p>"
-        }
-      }
-    },
-    "UpdateWorldTemplateRequest":{
-      "type":"structure",
-      "required":["template"],
-      "members":{
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template to update.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the template.</p>"
-        },
-        "templateBody":{
-          "shape":"Json",
-          "documentation":"<p>The world template body.</p>"
-        },
-        "templateLocation":{
-          "shape":"TemplateLocation",
-          "documentation":"<p>The location of the world template.</p>"
-        }
-      }
-    },
-    "UpdateWorldTemplateResponse":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        },
-        "name":{
-          "shape":"TemplateName",
-          "documentation":"<p>The name of the world template.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world template was created.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"LastUpdatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world template was last updated.</p>"
-        }
-      }
-    },
-    "UploadBehavior":{
-      "type":"string",
-      "enum":[
-        "UPLOAD_ON_TERMINATE",
-        "UPLOAD_ROLLING_AUTO_REMOVE"
-      ]
-    },
-    "UploadConfiguration":{
-      "type":"structure",
-      "required":[
-        "name",
-        "path",
-        "uploadBehavior"
-      ],
-      "members":{
-        "name":{
-          "shape":"Name",
-          "documentation":"<p>A prefix that specifies where files will be uploaded in Amazon S3. It is appended to the simulation output location to determine the final path. </p> <p> For example, if your simulation output location is <code>s3://amzn-s3-demo-bucket</code> and your upload configuration name is <code>robot-test</code>, your files will be uploaded to <code>s3://amzn-s3-demo-bucket/&lt;simid&gt;/&lt;runid&gt;/robot-test</code>. </p>"
-        },
-        "path":{
-          "shape":"Path",
-          "documentation":"<p> Specifies the path of the file(s) to upload. Standard Unix glob matching rules are accepted, with the addition of <code>**</code> as a <i>super asterisk</i>. For example, specifying <code>/var/log/**.log</code> causes all .log files in the <code>/var/log</code> directory tree to be collected. For more examples, see <a href=\"https://github.com/gobwas/glob\">Glob Library</a>. </p>"
-        },
-        "uploadBehavior":{
-          "shape":"UploadBehavior",
-          "documentation":"<p>Specifies when to upload the files:</p> <dl> <dt>UPLOAD_ON_TERMINATE</dt> <dd> <p>Matching files are uploaded once the simulation enters the <code>TERMINATING</code> state. Matching files are not uploaded until all of your code (including tools) have stopped. </p> <p>If there is a problem uploading a file, the upload is retried. If problems persist, no further upload attempts will be made.</p> </dd> <dt>UPLOAD_ROLLING_AUTO_REMOVE</dt> <dd> <p>Matching files are uploaded as they are created. They are deleted after they are uploaded. The specified path is checked every 5 seconds. A final check is made when all of your code (including tools) have stopped. </p> </dd> </dl>"
-        }
-      },
-      "documentation":"<p>Provides upload configuration information. Files are uploaded from the simulation job to a location you specify. </p>"
-    },
-    "UploadConfigurations":{
-      "type":"list",
-      "member":{"shape":"UploadConfiguration"},
-      "max":10,
-      "min":0
-    },
-    "VPCConfig":{
-      "type":"structure",
-      "required":["subnets"],
-      "members":{
-        "subnets":{
-          "shape":"Subnets",
-          "documentation":"<p>A list of one or more subnet IDs in your VPC.</p>"
-        },
-        "securityGroups":{
-          "shape":"SecurityGroups",
-          "documentation":"<p>A list of one or more security groups IDs in your VPC.</p>"
-        },
-        "assignPublicIp":{
-          "shape":"Boolean",
-          "documentation":"<p>A boolean indicating whether to assign a public IP address.</p>"
-        }
-      },
-      "documentation":"<p>If your simulation job accesses resources in a VPC, you provide this parameter identifying the list of security group IDs and subnet IDs. These must belong to the same VPC. You must provide at least one security group and two subnet IDs.</p>"
-    },
-    "VPCConfigResponse":{
-      "type":"structure",
-      "members":{
-        "subnets":{
-          "shape":"Subnets",
-          "documentation":"<p>A list of subnet IDs associated with the simulation job.</p>"
-        },
-        "securityGroups":{
-          "shape":"SecurityGroups",
-          "documentation":"<p>A list of security group IDs associated with the simulation job.</p>"
-        },
-        "vpcId":{
-          "shape":"GenericString",
-          "documentation":"<p>The VPC ID associated with your simulation job.</p>"
-        },
-        "assignPublicIp":{
-          "shape":"Boolean",
-          "documentation":"<p>A boolean indicating if a public IP was assigned.</p>"
-        }
-      },
-      "documentation":"<p>VPC configuration associated with your simulation job.</p>"
-    },
-    "Version":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"(\\$LATEST)|[0-9]*"
-    },
-    "VersionQualifier":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"ALL"
-    },
-    "WorldConfig":{
-      "type":"structure",
-      "members":{
-        "world":{
-          "shape":"Arn",
-          "documentation":"<p>The world generated by Simulation WorldForge.</p>"
-        }
-      },
-      "documentation":"<p>Configuration information for a world.</p>"
-    },
-    "WorldConfigs":{
-      "type":"list",
-      "member":{"shape":"WorldConfig"},
-      "max":1,
-      "min":0
-    },
-    "WorldCount":{
-      "type":"structure",
-      "members":{
-        "floorplanCount":{
-          "shape":"FloorplanCount",
-          "documentation":"<p>The number of unique floorplans.</p>"
-        },
-        "interiorCountPerFloorplan":{
-          "shape":"InteriorCountPerFloorplan",
-          "documentation":"<p>The number of unique interiors per floorplan.</p>"
-        }
-      },
-      "documentation":"<p>The number of worlds that will be created. You can configure the number of unique floorplans and the number of unique interiors for each floor plan. For example, if you want 1 world with 20 unique interiors, you set <code>floorplanCount = 1</code> and <code>interiorCountPerFloorplan = 20</code>. This will result in 20 worlds (<code>floorplanCount</code> * <code>interiorCountPerFloorplan)</code>. </p> <p>If you set <code>floorplanCount = 4</code> and <code>interiorCountPerFloorplan = 5</code>, there will be 20 worlds with 5 unique floor plans. </p>"
-    },
-    "WorldExportJobErrorCode":{
-      "type":"string",
-      "enum":[
-        "InternalServiceError",
-        "LimitExceeded",
-        "ResourceNotFound",
-        "RequestThrottled",
-        "InvalidInput",
-        "AccessDenied"
-      ]
-    },
-    "WorldExportJobStatus":{
-      "type":"string",
-      "enum":[
-        "Pending",
-        "Running",
-        "Completed",
-        "Failed",
-        "Canceling",
-        "Canceled"
-      ]
-    },
-    "WorldExportJobSummaries":{
-      "type":"list",
-      "member":{"shape":"WorldExportJobSummary"},
-      "max":100,
-      "min":0
-    },
-    "WorldExportJobSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world export job.</p>"
-        },
-        "status":{
-          "shape":"WorldExportJobStatus",
-          "documentation":"<p>The status of the world export job.</p> <dl> <dt>Pending</dt> <dd> <p>The world export job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world export job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world export job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world export job failed. See <code>failureCode</code> for more information. </p> </dd> <dt>Canceled</dt> <dd> <p>The world export job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world export job is being cancelled.</p> </dd> </dl>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world export job was created.</p>"
-        },
-        "worlds":{
-          "shape":"Arns",
-          "documentation":"<p>A list of worlds.</p>"
-        },
-        "outputLocation":{"shape":"OutputLocation"}
-      },
-      "documentation":"<p>Information about a world export job.</p>"
-    },
-    "WorldFailure":{
-      "type":"structure",
-      "members":{
-        "failureCode":{
-          "shape":"WorldGenerationJobErrorCode",
-          "documentation":"<p>The failure code of the world export job if it failed:</p> <dl> <dt>InternalServiceError</dt> <dd> <p>Internal service error.</p> </dd> <dt>LimitExceeded</dt> <dd> <p>The requested resource exceeds the maximum number allowed, or the number of concurrent stream requests exceeds the maximum number allowed. </p> </dd> <dt>ResourceNotFound</dt> <dd> <p>The specified resource could not be found. </p> </dd> <dt>RequestThrottled</dt> <dd> <p>The request was throttled.</p> </dd> <dt>InvalidInput</dt> <dd> <p>An input parameter in the request is not valid.</p> </dd> </dl>"
-        },
-        "sampleFailureReason":{
-          "shape":"GenericString",
-          "documentation":"<p>The sample reason why the world failed. World errors are aggregated. A sample is used as the <code>sampleFailureReason</code>. </p>"
-        },
-        "failureCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of failed worlds.</p>"
-        }
-      },
-      "documentation":"<p>Information about a failed world.</p>"
-    },
-    "WorldFailures":{
-      "type":"list",
-      "member":{"shape":"WorldFailure"},
-      "max":100,
-      "min":0
-    },
-    "WorldGenerationJobErrorCode":{
-      "type":"string",
-      "enum":[
-        "InternalServiceError",
-        "LimitExceeded",
-        "ResourceNotFound",
-        "RequestThrottled",
-        "InvalidInput",
-        "AllWorldGenerationFailed"
-      ]
-    },
-    "WorldGenerationJobStatus":{
-      "type":"string",
-      "enum":[
-        "Pending",
-        "Running",
-        "Completed",
-        "Failed",
-        "PartialFailed",
-        "Canceling",
-        "Canceled"
-      ]
-    },
-    "WorldGenerationJobSummaries":{
-      "type":"list",
-      "member":{"shape":"WorldGenerationJobSummary"},
-      "max":100,
-      "min":0
-    },
-    "WorldGenerationJobSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world generator job.</p>"
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world generator job was created.</p>"
-        },
-        "status":{
-          "shape":"WorldGenerationJobStatus",
-          "documentation":"<p>The status of the world generator job:</p> <dl> <dt>Pending</dt> <dd> <p>The world generator job request is pending.</p> </dd> <dt>Running</dt> <dd> <p>The world generator job is running. </p> </dd> <dt>Completed</dt> <dd> <p>The world generator job completed. </p> </dd> <dt>Failed</dt> <dd> <p>The world generator job failed. See <code>failureCode</code> for more information. </p> </dd> <dt>PartialFailed</dt> <dd> <p>Some worlds did not generate.</p> </dd> <dt>Canceled</dt> <dd> <p>The world generator job was cancelled.</p> </dd> <dt>Canceling</dt> <dd> <p>The world generator job is being cancelled.</p> </dd> </dl>"
-        },
-        "worldCount":{
-          "shape":"WorldCount",
-          "documentation":"<p>Information about the world count.</p>"
-        },
-        "succeededWorldCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of worlds that were generated.</p>"
-        },
-        "failedWorldCount":{
-          "shape":"Integer",
-          "documentation":"<p>The number of worlds that failed.</p>"
-        }
-      },
-      "documentation":"<p>Information about a world generator job.</p>"
-    },
-    "WorldSummaries":{
-      "type":"list",
-      "member":{"shape":"WorldSummary"}
-    },
-    "WorldSummary":{
-      "type":"structure",
-      "members":{
-        "arn":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the world.</p>"
-        },
-        "createdAt":{
-          "shape":"CreatedAt",
-          "documentation":"<p>The time, in milliseconds since the epoch, when the world was created.</p>"
-        },
-        "generationJob":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world generation job.</p>"
-        },
-        "template":{
-          "shape":"Arn",
-          "documentation":"<p>The Amazon Resource Name (arn) of the world template.</p>"
-        }
-      },
-      "documentation":"<p>Information about a world.</p>"
-    },
-    "errorMessage":{"type":"string"}
-  },
-  "documentation":"<p>This section provides documentation for the AWS RoboMaker API operations.</p>"
-}
diff -pruN 2.23.6-1/awscli/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rolesanywhere/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53/2013-04-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -565,6 +565,57 @@
                                         }
                                     ]
                                 },
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "name"
+                                            ]
+                                        },
+                                        "aws-eusc"
+                                    ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseFIPS"
+                                        },
+                                        false
+                                    ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        false
+                                    ]
+                                }
+                            ],
+                            "endpoint": {
+                                "url": "https://route53.amazonaws.eu",
+                                "properties": {
+                                    "authSchemes": [
+                                        {
+                                            "name": "sigv4",
+                                            "signingName": "route53",
+                                            "signingRegion": "eusc-de-east-1"
+                                        }
+                                    ]
+                                },
                                 "headers": {}
                             },
                             "type": "endpoint"
diff -pruN 2.23.6-1/awscli/botocore/data/route53/2013-04-01/service-2.json 2.31.35-1/awscli/botocore/data/route53/2013-04-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53/2013-04-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53/2013-04-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -412,7 +412,7 @@
         {"shape":"InvalidInput"},
         {"shape":"InvalidDomainName"}
       ],
-      "documentation":"<p>Deletes a hosted zone.</p> <p>If the hosted zone was created by another service, such as Cloud Map, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DeleteHostedZone.html#delete-public-hosted-zone-created-by-another-service\">Deleting Public Hosted Zones That Were Created by Another Service</a> in the <i>Amazon Route 53 Developer Guide</i> for information about how to delete it. (The process is the same for public and private hosted zones that were created by another service.)</p> <p>If you want to keep your domain registration but you want to stop routing internet traffic to your website or web application, we recommend that you delete resource record sets in the hosted zone instead of deleting the hosted zone.</p> <important> <p>If you delete a hosted zone, you can't undelete it. You must create a new hosted zone and update the name servers for your domain registration, which can require up to 48 hours to take effect. (If you delegated responsibility for a subdomain to a hosted zone and you delete the child hosted zone, you must update the name servers in the parent hosted zone.) In addition, if you delete a hosted zone, someone could hijack the domain and route traffic to their own resources using your domain name.</p> </important> <p>If you want to avoid the monthly charge for the hosted zone, you can transfer DNS service for the domain to a free DNS service. When you transfer DNS service, you have to update the name servers for the domain registration. If the domain is registered with Route 53, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_domains_UpdateDomainNameservers.html\">UpdateDomainNameservers</a> for information about how to replace Route 53 name servers with name servers for the new DNS service. If the domain is registered with another registrar, use the method provided by the registrar to update name servers for the domain registration. For more information, perform an internet search on \"free DNS service.\"</p> <p>You can delete a hosted zone only if it contains only the default SOA record and NS resource record sets. If the hosted zone contains other resource record sets, you must delete them before you can delete the hosted zone. If you try to delete a hosted zone that contains other resource record sets, the request fails, and Route 53 returns a <code>HostedZoneNotEmpty</code> error. For information about deleting records from your hosted zone, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html\">ChangeResourceRecordSets</a>.</p> <p>To verify that the hosted zone has been deleted, do one of the following:</p> <ul> <li> <p>Use the <code>GetHostedZone</code> action to request information about the hosted zone.</p> </li> <li> <p>Use the <code>ListHostedZones</code> action to get a list of the hosted zones associated with the current Amazon Web Services account.</p> </li> </ul>"
+      "documentation":"<p>Deletes a hosted zone.</p> <p>If the hosted zone was created by another service, such as Cloud Map, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DeleteHostedZone.html#delete-public-hosted-zone-created-by-another-service\">Deleting Public Hosted Zones That Were Created by Another Service</a> in the <i>Amazon Route 53 Developer Guide</i> for information about how to delete it. (The process is the same for public and private hosted zones that were created by another service.)</p> <p>If you want to keep your domain registration but you want to stop routing internet traffic to your website or web application, we recommend that you delete resource record sets in the hosted zone instead of deleting the hosted zone.</p> <important> <p>If you delete a hosted zone, you can't undelete it. You must create a new hosted zone and update the name servers for your domain registration, which can require up to 48 hours to take effect. (If you delegated responsibility for a subdomain to a hosted zone and you delete the child hosted zone, you must update the name servers in the parent hosted zone.) In addition, if you delete a hosted zone, someone could hijack the domain and route traffic to their own resources using your domain name.</p> </important> <p>If you want to avoid the monthly charge for the hosted zone, you can transfer DNS service for the domain to a free DNS service. When you transfer DNS service, you have to update the name servers for the domain registration. If the domain is registered with Route 53, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_domains_UpdateDomainNameservers.html\">UpdateDomainNameservers</a> for information about how to replace Route 53 name servers with name servers for the new DNS service. If the domain is registered with another registrar, use the method provided by the registrar to update name servers for the domain registration. For more information, perform an internet search on \"free DNS service.\"</p> <p>You can delete a hosted zone only if it contains only the default SOA and NS records and has DNSSEC signing disabled. If the hosted zone contains other records or has DNSSEC enabled, you must delete the records and disable DNSSEC before deletion. Attempting to delete a hosted zone with additional records or DNSSEC enabled returns a <code>HostedZoneNotEmpty</code> error. For information about deleting records, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html\">ChangeResourceRecordSets</a>. </p> <p>To verify that the hosted zone has been deleted, do one of the following:</p> <ul> <li> <p>Use the <code>GetHostedZone</code> action to request information about the hosted zone.</p> </li> <li> <p>Use the <code>ListHostedZones</code> action to get a list of the hosted zones associated with the current Amazon Web Services account.</p> </li> </ul>"
     },
     "DeleteKeySigningKey":{
       "name":"DeleteKeySigningKey",
@@ -958,7 +958,7 @@
         {"shape":"NoSuchHostedZone"},
         {"shape":"InvalidInput"}
       ],
-      "documentation":"<p>Lists the resource record sets in a specified hosted zone.</p> <p> <code>ListResourceRecordSets</code> returns up to 300 resource record sets at a time in ASCII order, beginning at a position specified by the <code>name</code> and <code>type</code> elements.</p> <p> <b>Sort order</b> </p> <p> <code>ListResourceRecordSets</code> sorts results first by DNS name with the labels reversed, for example:</p> <p> <code>com.example.www.</code> </p> <p>Note the trailing dot, which can change the sort order when the record name contains characters that appear before <code>.</code> (decimal 46) in the ASCII table. These characters include the following: <code>! \" # $ % &amp; ' ( ) * + , -</code> </p> <p>When multiple records have the same DNS name, <code>ListResourceRecordSets</code> sorts results by the record type.</p> <p> <b>Specifying where to start listing records</b> </p> <p>You can use the name and type elements to specify the resource record set that the list begins with:</p> <dl> <dt>If you do not specify Name or Type</dt> <dd> <p>The results begin with the first resource record set that the hosted zone contains.</p> </dd> <dt>If you specify Name but not Type</dt> <dd> <p>The results begin with the first resource record set in the list whose name is greater than or equal to <code>Name</code>.</p> </dd> <dt>If you specify Type but not Name</dt> <dd> <p>Amazon Route 53 returns the <code>InvalidInput</code> error.</p> </dd> <dt>If you specify both Name and Type</dt> <dd> <p>The results begin with the first resource record set in the list whose name is greater than or equal to <code>Name</code>, and whose type is greater than or equal to <code>Type</code>.</p> </dd> </dl> <p> <b>Resource record sets that are PENDING</b> </p> <p>This action returns the most current version of the records. This includes records that are <code>PENDING</code>, and that are not yet available on all Route 53 DNS servers.</p> <p> <b>Changing resource record sets</b> </p> <p>To ensure that you get an accurate listing of the resource record sets for a hosted zone at a point in time, do not submit a <code>ChangeResourceRecordSets</code> request while you're paging through the results of a <code>ListResourceRecordSets</code> request. If you do, some pages may display results without the latest changes while other pages display results with the latest changes.</p> <p> <b>Displaying the next page of results</b> </p> <p>If a <code>ListResourceRecordSets</code> command returns more than one page of results, the value of <code>IsTruncated</code> is <code>true</code>. To display the next page of results, get the values of <code>NextRecordName</code>, <code>NextRecordType</code>, and <code>NextRecordIdentifier</code> (if any) from the response. Then submit another <code>ListResourceRecordSets</code> request, and specify those values for <code>StartRecordName</code>, <code>StartRecordType</code>, and <code>StartRecordIdentifier</code>.</p>"
+      "documentation":"<p>Lists the resource record sets in a specified hosted zone.</p> <p> <code>ListResourceRecordSets</code> returns up to 300 resource record sets at a time in ASCII order, beginning at a position specified by the <code>name</code> and <code>type</code> elements.</p> <p> <b>Sort order</b> </p> <p> <code>ListResourceRecordSets</code> sorts results first by DNS name with the labels reversed, for example:</p> <p> <code>com.example.www.</code> </p> <p>Note the trailing dot, which can change the sort order when the record name contains characters that appear before <code>.</code> (decimal 46) in the ASCII table. These characters include the following: <code>! \" # $ % &amp; ' ( ) * + , -</code> </p> <p>When multiple records have the same DNS name, <code>ListResourceRecordSets</code> sorts results by the record type.</p> <p> <b>Specifying where to start listing records</b> </p> <p>You can use the name and type elements to specify the resource record set that the list begins with:</p> <dl> <dt>If you do not specify Name or Type</dt> <dd> <p>The results begin with the first resource record set that the hosted zone contains.</p> </dd> <dt>If you specify Name but not Type</dt> <dd> <p>The results begin with the first resource record set in the list whose name is greater than or equal to <code>Name</code>.</p> </dd> <dt>If you specify Type but not Name</dt> <dd> <p>Amazon Route 53 returns the <code>InvalidInput</code> error.</p> </dd> <dt>If you specify both Name and Type</dt> <dd> <p>The results begin with the first resource record set in the list whose name is greater than or equal to <code>Name</code>, and whose type is greater than or equal to <code>Type</code>.</p> <note> <p>Type is only used to sort between records with the same record Name.</p> </note> </dd> </dl> <p> <b>Resource record sets that are PENDING</b> </p> <p>This action returns the most current version of the records. This includes records that are <code>PENDING</code>, and that are not yet available on all Route 53 DNS servers.</p> <p> <b>Changing resource record sets</b> </p> <p>To ensure that you get an accurate listing of the resource record sets for a hosted zone at a point in time, do not submit a <code>ChangeResourceRecordSets</code> request while you're paging through the results of a <code>ListResourceRecordSets</code> request. If you do, some pages may display results without the latest changes while other pages display results with the latest changes.</p> <p> <b>Displaying the next page of results</b> </p> <p>If a <code>ListResourceRecordSets</code> command returns more than one page of results, the value of <code>IsTruncated</code> is <code>true</code>. To display the next page of results, get the values of <code>NextRecordName</code>, <code>NextRecordType</code>, and <code>NextRecordIdentifier</code> (if any) from the response. Then submit another <code>ListResourceRecordSets</code> request, and specify those values for <code>StartRecordName</code>, <code>StartRecordType</code>, and <code>StartRecordIdentifier</code>.</p>"
     },
     "ListReusableDelegationSets":{
       "name":"ListReusableDelegationSets",
@@ -1301,7 +1301,7 @@
         },
         "EvaluateTargetHealth":{
           "shape":"AliasHealthEnabled",
-          "documentation":"<p> <i>Applies only to alias, failover alias, geolocation alias, latency alias, and weighted alias resource record sets:</i> When <code>EvaluateTargetHealth</code> is <code>true</code>, an alias resource record set inherits the health of the referenced Amazon Web Services resource, such as an ELB load balancer or another resource record set in the hosted zone.</p> <p>Note the following:</p> <dl> <dt>CloudFront distributions</dt> <dd> <p>You can't set <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is a CloudFront distribution.</p> </dd> <dt>Elastic Beanstalk environments that have regionalized subdomains</dt> <dd> <p>If you specify an Elastic Beanstalk environment in <code>DNSName</code> and the environment contains an ELB load balancer, Elastic Load Balancing routes queries only to the healthy Amazon EC2 instances that are registered with the load balancer. (An environment automatically contains an ELB load balancer if it includes more than one Amazon EC2 instance.) If you set <code>EvaluateTargetHealth</code> to <code>true</code> and either no Amazon EC2 instances are healthy or the load balancer itself is unhealthy, Route 53 routes queries to other available resources that are healthy, if any. </p> <p>If the environment contains a single Amazon EC2 instance, there are no special requirements.</p> </dd> <dt>ELB load balancers</dt> <dd> <p>Health checking behavior depends on the type of load balancer:</p> <ul> <li> <p> <b>Classic Load Balancers</b>: If you specify an ELB Classic Load Balancer in <code>DNSName</code>, Elastic Load Balancing routes queries only to the healthy Amazon EC2 instances that are registered with the load balancer. If you set <code>EvaluateTargetHealth</code> to <code>true</code> and either no EC2 instances are healthy or the load balancer itself is unhealthy, Route 53 routes queries to other resources.</p> </li> <li> <p> <b>Application and Network Load Balancers</b>: If you specify an ELB Application or Network Load Balancer and you set <code>EvaluateTargetHealth</code> to <code>true</code>, Route 53 routes queries to the load balancer based on the health of the target groups that are associated with the load balancer:</p> <ul> <li> <p>For an Application or Network Load Balancer to be considered healthy, every target group that contains targets must contain at least one healthy target. If any target group contains only unhealthy targets, the load balancer is considered unhealthy, and Route 53 routes queries to other resources.</p> </li> <li> <p>A target group that has no registered targets is considered unhealthy.</p> </li> </ul> </li> </ul> <note> <p>When you create a load balancer, you configure settings for Elastic Load Balancing health checks; they're not Route 53 health checks, but they perform a similar function. Do not create Route 53 health checks for the EC2 instances that you register with an ELB load balancer. </p> </note> </dd> <dt>S3 buckets</dt> <dd> <p>There are no special requirements for setting <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is an S3 bucket.</p> </dd> <dt>Other records in the same hosted zone</dt> <dd> <p>If the Amazon Web Services resource that you specify in <code>DNSName</code> is a record or a group of records (for example, a group of weighted records) but is not another alias record, we recommend that you associate a health check with all of the records in the alias target. For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting\">What Happens When You Omit Health Checks?</a> in the <i>Amazon Route 53 Developer Guide</i>.</p> </dd> </dl> <p>For more information and examples, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Amazon Route 53 Health Checks and DNS Failover</a> in the <i>Amazon Route 53 Developer Guide</i>.</p>"
+          "documentation":"<p> <i>Applies only to alias, failover alias, geolocation alias, latency alias, and weighted alias resource record sets:</i> When <code>EvaluateTargetHealth</code> is <code>true</code>, an alias resource record set inherits the health of the referenced Amazon Web Services resource, such as an ELB load balancer or another resource record set in the hosted zone.</p> <p>Note the following:</p> <dl> <dt>CloudFront distributions</dt> <dd> <p>You can't set <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is a CloudFront distribution.</p> </dd> <dt>Elastic Beanstalk environments that have regionalized subdomains</dt> <dd> <p>If you specify an Elastic Beanstalk environment in <code>DNSName</code> and the environment contains an ELB load balancer, Elastic Load Balancing routes queries only to the healthy Amazon EC2 instances that are registered with the load balancer. (An environment automatically contains an ELB load balancer if it includes more than one Amazon EC2 instance.) If you set <code>EvaluateTargetHealth</code> to <code>true</code> and either no Amazon EC2 instances are healthy or the load balancer itself is unhealthy, Route 53 routes queries to other available resources that are healthy, if any. </p> <p>If the environment contains a single Amazon EC2 instance, there are no special requirements.</p> </dd> <dt>ELB load balancers</dt> <dd> <p>Health checking behavior depends on the type of load balancer:</p> <ul> <li> <p> <b>Classic Load Balancers</b>: If you specify an ELB Classic Load Balancer in <code>DNSName</code>, Elastic Load Balancing routes queries only to the healthy Amazon EC2 instances that are registered with the load balancer. If you set <code>EvaluateTargetHealth</code> to <code>true</code> and either no EC2 instances are healthy or the load balancer itself is unhealthy, Route 53 routes queries to other resources.</p> </li> <li> <p> <b>Application and Network Load Balancers</b>: If you specify an ELB Application or Network Load Balancer and you set <code>EvaluateTargetHealth</code> to <code>true</code>, Route 53 routes queries to the load balancer based on the health of the target groups that are associated with the load balancer:</p> <ul> <li> <p>For an Application or Network Load Balancer to be considered healthy, every target group that contains targets must contain at least one healthy target. If any target group contains only unhealthy targets, the load balancer is considered unhealthy, and Route 53 routes queries to other resources.</p> </li> <li> <p>A target group that has no registered targets is considered unhealthy.</p> </li> </ul> </li> </ul> <note> <p>When you create a load balancer, you configure settings for Elastic Load Balancing health checks; they're not Route 53 health checks, but they perform a similar function. Do not create Route 53 health checks for the EC2 instances that you register with an ELB load balancer. </p> </note> </dd> <dt>API Gateway APIs</dt> <dd> <p>There are no special requirements for setting <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is an API Gateway API. However, because API Gateway is highly available by design, <code>EvaluateTargetHealth</code> provides no operational benefit and <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Route 53 health checks</a> are recommended instead for failover scenarios.</p> </dd> <dt>S3 buckets</dt> <dd> <p>There are no special requirements for setting <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is an S3 bucket. However, because S3 buckets are highly available by design, <code>EvaluateTargetHealth</code> provides no operational benefit and <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Route 53 health checks</a> are recommended instead for failover scenarios.</p> </dd> <dt>VPC interface endpoints</dt> <dd> <p>There are no special requirements for setting <code>EvaluateTargetHealth</code> to <code>true</code> when the alias target is a VPC interface endpoint. However, because VPC interface endpoints are highly available by design, <code>EvaluateTargetHealth</code> provides no operational benefit and <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Route 53 health checks</a> are recommended instead for failover scenarios.</p> </dd> <dt>Other records in the same hosted zone</dt> <dd> <p>If the Amazon Web Services resource that you specify in <code>DNSName</code> is a record or a group of records (for example, a group of weighted records) but is not another alias record, we recommend that you associate a health check with all of the records in the alias target. For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-complex-configs.html#dns-failover-complex-configs-hc-omitting\">What Happens When You Omit Health Checks?</a> in the <i>Amazon Route 53 Developer Guide</i>.</p> </dd> </dl> <note> <p>While <code>EvaluateTargetHealth</code> can be set to <code>true</code> for highly available Amazon Web Services services (such as S3 buckets, VPC interface endpoints, and API Gateway), these services are designed for high availability and rarely experience outages that would be detected by this feature. For failover scenarios with these services, consider using <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Route 53 health checks</a> that monitor your application's ability to access the service instead.</p> </note> <p>For more information and examples, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html\">Amazon Route 53 Health Checks and DNS Failover</a> in the <i>Amazon Route 53 Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p> <i>Alias resource record sets only:</i> Information about the Amazon Web Services resource, such as a CloudFront distribution or an Amazon S3 bucket, that you want to route traffic to.</p> <p>When creating resource record sets for a private hosted zone, note the following:</p> <ul> <li> <p>For information about creating failover resource record sets in a private hosted zone, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-private-hosted-zones.html\">Configuring Failover in a Private Hosted Zone</a>.</p> </li> </ul>"
@@ -1523,8 +1523,7 @@
     },
     "ChangeTagsForResourceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Empty response for the request.</p>"
     },
     "Changes":{
@@ -1798,7 +1797,13 @@
         "ca-west-1",
         "ap-southeast-5",
         "mx-central-1",
-        "ap-southeast-7"
+        "us-isof-south-1",
+        "us-isof-east-1",
+        "ap-southeast-7",
+        "ap-east-2",
+        "eu-isoe-west-1",
+        "ap-southeast-6",
+        "us-isob-west-1"
       ],
       "max":64,
       "min":1
@@ -1939,7 +1944,7 @@
       "members":{
         "CallerReference":{
           "shape":"HealthCheckNonce",
-          "documentation":"<p>A unique string that identifies the request and that allows you to retry a failed <code>CreateHealthCheck</code> request without the risk of creating two identical health checks:</p> <ul> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> and settings as a previous request, and if the health check doesn't exist, Amazon Route 53 creates the health check. If the health check does exist, Route 53 returns the settings for the existing health check.</p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> as a deleted health check, regardless of the settings, Route 53 returns a <code>HealthCheckAlreadyExists</code> error.</p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> as an existing health check but with different settings, Route 53 returns a <code>HealthCheckAlreadyExists</code> error.</p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with a unique <code>CallerReference</code> but settings identical to an existing health check, Route 53 creates the health check.</p> </li> </ul> <p> Route 53 does not store the <code>CallerReference</code> for a deleted health check indefinitely. The <code>CallerReference</code> for a deleted health check will be deleted after a number of days.</p>"
+          "documentation":"<p>A unique string that identifies the request and that allows you to retry a failed <code>CreateHealthCheck</code> request without the risk of creating two identical health checks:</p> <ul> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> and settings as a previous request, and if the health check doesn't exist, Amazon Route 53 creates the health check. If the health check does exist, Route 53 returns the health check configuration in the response. </p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> as a deleted health check, regardless of the settings, Route 53 returns a <code>HealthCheckAlreadyExists</code> error.</p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with the same <code>CallerReference</code> as an existing health check but with different settings, Route 53 returns a <code>HealthCheckAlreadyExists</code> error.</p> </li> <li> <p>If you send a <code>CreateHealthCheck</code> request with a unique <code>CallerReference</code> but settings identical to an existing health check, Route 53 creates the health check.</p> </li> </ul> <p> Route 53 does not store the <code>CallerReference</code> for a deleted health check indefinitely. The <code>CallerReference</code> for a deleted health check will be deleted after a number of days.</p>"
         },
         "HealthCheckConfig":{
           "shape":"HealthCheckConfig",
@@ -2490,8 +2495,7 @@
     },
     "DeleteCidrCollectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteHealthCheckRequest":{
       "type":"structure",
@@ -2508,8 +2512,7 @@
     },
     "DeleteHealthCheckResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element.</p>"
     },
     "DeleteHostedZoneRequest":{
@@ -2578,8 +2581,7 @@
     },
     "DeleteQueryLoggingConfigResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteReusableDelegationSetRequest":{
       "type":"structure",
@@ -2596,8 +2598,7 @@
     },
     "DeleteReusableDelegationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element.</p>"
     },
     "DeleteTrafficPolicyInstanceRequest":{
@@ -2615,8 +2616,7 @@
     },
     "DeleteTrafficPolicyInstanceResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element.</p>"
     },
     "DeleteTrafficPolicyRequest":{
@@ -2643,8 +2643,7 @@
     },
     "DeleteTrafficPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element.</p>"
     },
     "DeleteVPCAssociationAuthorizationRequest":{
@@ -2669,8 +2668,7 @@
     },
     "DeleteVPCAssociationAuthorizationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Empty response for the request.</p>"
     },
     "Dimension":{
@@ -2965,8 +2963,7 @@
     },
     "GetCheckerIpRangesRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Empty request.</p>"
     },
     "GetCheckerIpRangesResponse":{
@@ -3046,8 +3043,7 @@
     },
     "GetHealthCheckCountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request for the number of health checks that are associated with the current Amazon Web Services account.</p>"
     },
     "GetHealthCheckCountResponse":{
@@ -3135,8 +3131,7 @@
     },
     "GetHostedZoneCountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request to retrieve a count of all the hosted zones that are associated with the current Amazon Web Services account.</p>"
     },
     "GetHostedZoneCountResponse":{
@@ -3310,8 +3305,7 @@
     },
     "GetTrafficPolicyInstanceCountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Request to get the number of traffic policy instances that are associated with the current Amazon Web Services account.</p>"
     },
     "GetTrafficPolicyInstanceCountResponse":{
@@ -5566,7 +5560,11 @@
         "ca-west-1",
         "ap-southeast-5",
         "mx-central-1",
-        "ap-southeast-7"
+        "ap-southeast-7",
+        "us-gov-east-1",
+        "us-gov-west-1",
+        "ap-east-2",
+        "ap-southeast-6"
       ],
       "max":64,
       "min":1
@@ -6211,7 +6209,7 @@
         },
         "Disabled":{
           "shape":"Disabled",
-          "documentation":"<p>Stops Route 53 from performing health checks. When you disable a health check, here's what happens:</p> <ul> <li> <p> <b>Health checks that check the health of endpoints:</b> Route 53 stops submitting requests to your application, server, or other resource.</p> </li> <li> <p> <b>Calculated health checks:</b> Route 53 stops aggregating the status of the referenced health checks.</p> </li> <li> <p> <b>Health checks that monitor CloudWatch alarms:</b> Route 53 stops monitoring the corresponding CloudWatch metrics.</p> </li> </ul> <p>After you disable a health check, Route 53 considers the status of the health check to always be healthy. If you configured DNS failover, Route 53 continues to route traffic to the corresponding resources. If you want to stop routing traffic to a resource, change the value of <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHealthCheck.html#Route53-UpdateHealthCheck-request-Inverted\">Inverted</a>. </p> <p>Charges for a health check still apply when the health check is disabled. For more information, see <a href=\"http://aws.amazon.com/route53/pricing/\">Amazon Route 53 Pricing</a>.</p>"
+          "documentation":"<p>Stops Route 53 from performing health checks. When you disable a health check, here's what happens:</p> <ul> <li> <p> <b>Health checks that check the health of endpoints:</b> Route 53 stops submitting requests to your application, server, or other resource.</p> </li> <li> <p> <b>Calculated health checks:</b> Route 53 stops aggregating the status of the referenced health checks.</p> </li> <li> <p> <b>Health checks that monitor CloudWatch alarms:</b> Route 53 stops monitoring the corresponding CloudWatch metrics.</p> </li> </ul> <p>After you disable a health check, Route 53 considers the status of the health check to always be healthy. If you configured DNS failover, Route 53 continues to route traffic to the corresponding resources. Additionally, in disabled state, you can also invert the status of the health check to route traffic differently. For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_UpdateHealthCheck.html#Route53-UpdateHealthCheck-request-Inverted\">Inverted</a>. </p> <p>Charges for a health check still apply when the health check is disabled. For more information, see <a href=\"http://aws.amazon.com/route53/pricing/\">Amazon Route 53 Pricing</a>.</p>"
         },
         "HealthThreshold":{
           "shape":"HealthThreshold",
@@ -6447,7 +6445,13 @@
         "ca-west-1",
         "ap-southeast-5",
         "mx-central-1",
-        "ap-southeast-7"
+        "us-isof-south-1",
+        "us-isof-east-1",
+        "ap-southeast-7",
+        "ap-east-2",
+        "eu-isoe-west-1",
+        "ap-southeast-6",
+        "us-isob-west-1"
       ],
       "max":64,
       "min":1
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json 2.31.35-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-cluster/2019-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"route53-recovery-cluster",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Route53 Recovery Cluster",
     "serviceId":"Route53 Recovery Cluster",
     "signatureVersion":"v4",
     "signingName":"route53-recovery-cluster",
     "targetPrefix":"ToggleCustomerAPI",
-    "uid":"route53-recovery-cluster-2019-12-02"
+    "uid":"route53-recovery-cluster-2019-12-02",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetRoutingControlState":{
@@ -395,8 +397,7 @@
     },
     "UpdateRoutingControlStateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRoutingControlStatesRequest":{
       "type":"structure",
@@ -414,8 +415,7 @@
     },
     "UpdateRoutingControlStatesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,161 +57,184 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://route53-recovery-control-config.us-west-2.amazonaws.com",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://arc-recovery-control-config.us-west-2.api.aws",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "us-west-2"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
+                                                    "ref": "UseDualStack"
                                                 },
                                                 true
                                             ]
@@ -219,123 +242,231 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://route53-recovery-control-config-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://route53-recovery-control-config-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://route53-recovery-control-config-fips.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://route53-recovery-control-config.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "name": "sigv4",
+                                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://route53-recovery-control-config.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "stringEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "Region"
+                                    "endpoint": {
+                                        "url": "https://route53-recovery-control-config.{PartitionResult#implicitGlobalRegion}.{PartitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "name": "sigv4",
+                                                    "signingRegion": "{PartitionResult#implicitGlobalRegion}"
+                                                }
+                                            ]
                                         },
-                                        "aws-global"
-                                    ]
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
-                            "endpoint": {
-                                "url": "https://route53-recovery-control-config.us-west-2.amazonaws.com",
-                                "properties": {
-                                    "authSchemes": [
-                                        {
-                                            "name": "sigv4",
-                                            "signingName": "route53-recovery-control-config",
-                                            "signingRegion": "us-west-2"
-                                        }
-                                    ]
-                                },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://route53-recovery-control-config.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                            "type": "tree"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json 2.31.35-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-control-config/2020-11-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -8,7 +8,10 @@
     "protocol": "rest-json",
     "jsonVersion": "1.1",
     "uid": "route53-recovery-control-config-2020-11-02",
-    "signatureVersion": "v4"
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
   "operations": {
     "CreateCluster": {
@@ -781,6 +784,48 @@
       ],
       "documentation": "<p>Removes a tag from a resource.</p>"
     },
+    "UpdateCluster": {
+      "name": "UpdateCluster",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/cluster",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateClusterRequest"
+      },
+      "output": {
+        "shape": "UpdateClusterResponse",
+        "documentation": "<p>200 response - Success.</p>"
+      },
+      "errors": [
+        {
+          "shape": "ValidationException",
+          "documentation": "<p>400 response - Multiple causes. For example, you might have a malformed query string and input parameter might be out of range, or you used parameters together incorrectly.</p>"
+        },
+        {
+          "shape": "InternalServerException",
+          "documentation": "<p>500 response - InternalServiceError. Temporary service error. Retry the request.</p>"
+        },
+        {
+          "shape": "AccessDeniedException",
+          "documentation": "<p>403 response - AccessDeniedException. You do not have sufficient access to perform this action.</p>"
+        },
+        {
+          "shape": "ResourceNotFoundException",
+          "documentation": "<p>404 response - MalformedQueryString. The query string contains a syntax error or resource not found.</p>"
+        },
+        {
+          "shape": "ThrottlingException",
+          "documentation": "<p>429 response - LimitExceededException or TooManyRequestsException.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>409 response - ConflictException. You might be using a predefined variable.</p>"
+        }
+      ],
+      "documentation": "<p>Updates an existing cluster. You can only update the network type of a cluster.</p>"
+    },
     "UpdateControlPanel": {
       "name": "UpdateControlPanel",
       "http": {
@@ -1006,6 +1051,10 @@
         "Owner": {
           "shape": "__stringMin12Max12PatternD12",
           "documentation": "<p>The Amazon Web Services account ID of the cluster owner.</p>"
+        },
+        "NetworkType": {
+          "shape": "NetworkType",
+          "documentation": "<p>The network type of the cluster. NetworkType can be one of the following: IPV4, DUALSTACK.</p>"
         }
       },
       "documentation": "<p>A set of five redundant Regional endpoints against which you can execute API calls to update or get the state of routing controls. You can host multiple control panels and routing controls on one cluster.</p>"
@@ -1090,6 +1139,10 @@
         "Tags": {
           "shape": "__mapOf__stringMin0Max256PatternS",
           "documentation": "<p>The tags associated with the cluster.</p>"
+        },
+        "NetworkType": {
+          "shape": "NetworkType",
+          "documentation": "<p>The network type of the cluster. NetworkType can be one of the following: IPV4, DUALSTACK.</p>"
         }
       },
       "documentation": "<p>Creates a cluster.</p>",
@@ -1708,6 +1761,14 @@
       "min": 1,
       "max": 1000
     },
+    "NetworkType": {
+      "type": "string",
+      "documentation": "<p>The network type of a cluster. NetworkType can be one of the following:</p> <p>IPV4: Cluster endpoints support IPv4 only.</p> <p>DUALSTACK: Cluster endpoints support both IPv4 and IPv6.</p>",
+      "enum": [
+        "IPV4",
+        "DUALSTACK"
+      ]
+    },
     "NewAssertionRule": {
       "type": "structure",
       "members": {
@@ -1960,6 +2021,33 @@
       "type": "structure",
       "members": {}
     },
+    "UpdateClusterRequest": {
+      "type": "structure",
+      "members": {
+        "ClusterArn": {
+          "shape": "__stringMin1Max256PatternAZaZ09",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the cluster.</p>"
+        },
+        "NetworkType": {
+          "shape": "NetworkType",
+          "documentation": "<p>The network type of the cluster. NetworkType can be one of the following: IPV4, DUALSTACK.</p>"
+        }
+      },
+      "documentation": "<p>The details of the cluster that you're updating.</p>",
+      "required": [
+        "ClusterArn",
+        "NetworkType"
+      ]
+    },
+    "UpdateClusterResponse": {
+      "type": "structure",
+      "members": {
+        "Cluster": {
+          "shape": "Cluster",
+          "documentation": "<p>The cluster that was updated.</p>"
+        }
+      }
+    },
     "UpdateControlPanelRequest": {
       "type": "structure",
       "members": {
@@ -2193,4 +2281,4 @@
     }
   },
   "documentation": "<p>Recovery Control Configuration API Reference for Amazon Route 53 Application Recovery Controller</p>"
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json 2.31.35-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53-recovery-readiness/2019-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -8,7 +8,10 @@
     "protocol": "rest-json",
     "jsonVersion": "1.1",
     "uid": "route53-recovery-readiness-2019-12-02",
-    "signatureVersion": "v4"
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
   "operations": {
     "CreateCell": {
@@ -2914,4 +2917,4 @@
     }
   },
   "documentation": "<p>Recovery readiness</p>"
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53domains/2014-05-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/route53domains/2014-05-15/service-2.json 2.31.35-1/awscli/botocore/data/route53domains/2014-05-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53domains/2014-05-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53domains/2014-05-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1113,8 +1113,7 @@
     },
     "DeleteTagsForDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableDomainAutoRenewRequest":{
       "type":"structure",
@@ -1128,8 +1127,7 @@
     },
     "DisableDomainAutoRenewResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableDomainTransferLockRequest":{
       "type":"structure",
@@ -1413,8 +1411,7 @@
     },
     "EnableDomainAutoRenewResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableDomainTransferLockRequest":{
       "type":"structure",
@@ -1493,7 +1490,10 @@
         "UK_CONTACT_TYPE",
         "UK_COMPANY_NUMBER",
         "EU_COUNTRY_OF_CITIZENSHIP",
-        "AU_PRIORITY_TOKEN"
+        "AU_PRIORITY_TOKEN",
+        "AU_ELIGIBILITY_TYPE",
+        "AU_POLICY_REASON",
+        "AU_REGISTRANT_NAME"
       ]
     },
     "ExtraParamValue":{
@@ -2663,8 +2663,7 @@
     },
     "UpdateTagsForDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Value":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/route53profiles/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53profiles/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53profiles/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53profiles/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53resolver/2018-04-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/route53resolver/2018-04-01/service-2.json 2.31.35-1/awscli/botocore/data/route53resolver/2018-04-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/route53resolver/2018-04-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/route53resolver/2018-04-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1648,7 +1648,7 @@
         },
         "Direction":{
           "shape":"ResolverEndpointDirection",
-          "documentation":"<p>Specify the applicable value:</p> <ul> <li> <p> <code>INBOUND</code>: Resolver forwards DNS queries to the DNS service for a VPC from your network</p> </li> <li> <p> <code>OUTBOUND</code>: Resolver forwards DNS queries from the DNS service for a VPC to your network</p> </li> </ul>"
+          "documentation":"<p>Specify the applicable value:</p> <ul> <li> <p> <code>INBOUND</code>: Resolver forwards DNS queries to the DNS service for a VPC from your network.</p> </li> <li> <p> <code>OUTBOUND</code>: Resolver forwards DNS queries from the DNS service for a VPC to your network.</p> </li> <li> <p> <code>INBOUND_DELEGATION</code>: Resolver delegates queries to Route 53 private hosted zones from your network.</p> </li> </ul>"
         },
         "IpAddresses":{
           "shape":"IpAddressesRequest",
@@ -1676,7 +1676,7 @@
         },
         "Protocols":{
           "shape":"ProtocolList",
-          "documentation":"<p> The protocols you want to use for the endpoint. DoH-FIPS is applicable for inbound endpoints only. </p> <p>For an inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul>",
+          "documentation":"<p> The protocols you want to use for the endpoint. DoH-FIPS is applicable for default inbound endpoints only. </p> <p>For a default inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For a delegation inbound endpoint you can use Do53 only.</p> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul>",
           "box":true
         }
       }
@@ -1744,7 +1744,7 @@
         },
         "RuleType":{
           "shape":"RuleTypeOption",
-          "documentation":"<p>When you want to forward DNS queries for specified domain name to resolvers on your network, specify <code>FORWARD</code>.</p> <p>When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify <code>SYSTEM</code>.</p> <p>For example, to forward DNS queries for example.com to resolvers on your network, you create a rule and specify <code>FORWARD</code> for <code>RuleType</code>. To then have Resolver process queries for apex.example.com, you create a rule and specify <code>SYSTEM</code> for <code>RuleType</code>.</p> <p>Currently, only Resolver can create rules that have a value of <code>RECURSIVE</code> for <code>RuleType</code>.</p>"
+          "documentation":"<p>When you want to forward DNS queries for specified domain name to resolvers on your network, specify <code>FORWARD</code> or <code>DELEGATE</code>.</p> <p>When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify <code>SYSTEM</code>.</p> <p>For example, to forward DNS queries for example.com to resolvers on your network, you create a rule and specify <code>FORWARD</code> for <code>RuleType</code>. To then have Resolver process queries for apex.example.com, you create a rule and specify <code>SYSTEM</code> for <code>RuleType</code>.</p> <p>Currently, only Resolver can create rules that have a value of <code>RECURSIVE</code> for <code>RuleType</code>.</p>"
         },
         "DomainName":{
           "shape":"DomainName",
@@ -1765,6 +1765,11 @@
           "shape":"TagList",
           "documentation":"<p>A list of the tag keys and values that you want to associate with the endpoint.</p>",
           "box":true
+        },
+        "DelegationRecord":{
+          "shape":"DelegationRecord",
+          "documentation":"<p> DNS queries with the delegation records that match this domain name are forwarded to the resolvers on your network. </p>",
+          "box":true
         }
       }
     },
@@ -1782,6 +1787,11 @@
       "max":255,
       "min":1
     },
+    "DelegationRecord":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "DeleteFirewallDomainListRequest":{
       "type":"structure",
       "required":["FirewallDomainListId"],
@@ -2934,7 +2944,8 @@
         "DELETING",
         "DELETE_FAILED_FAS_EXPIRED",
         "UPDATING",
-        "UPDATE_FAILED"
+        "UPDATE_FAILED",
+        "ISOLATED"
       ]
     },
     "IpAddressUpdate":{
@@ -3812,7 +3823,7 @@
         },
         "ResourceId":{
           "shape":"ResourceId",
-          "documentation":"<p>The ID of the Amazon Virtual Private Cloud VPC that you're configuring Resolver for.</p>"
+          "documentation":"<p>The ID of the Amazon Virtual Private Cloud VPC or a Route 53 Profile that you're configuring Resolver for.</p>"
         },
         "OwnerId":{
           "shape":"AccountId",
@@ -3891,7 +3902,7 @@
         },
         "Direction":{
           "shape":"ResolverEndpointDirection",
-          "documentation":"<p>Indicates whether the Resolver endpoint allows inbound or outbound DNS queries:</p> <ul> <li> <p> <code>INBOUND</code>: allows DNS queries to your VPC from your network</p> </li> <li> <p> <code>OUTBOUND</code>: allows DNS queries from your VPC to your network</p> </li> </ul>"
+          "documentation":"<p>Indicates whether the Resolver endpoint allows inbound or outbound DNS queries:</p> <ul> <li> <p> <code>INBOUND</code>: allows DNS queries to your VPC from your network</p> </li> <li> <p> <code>OUTBOUND</code>: allows DNS queries from your VPC to your network</p> </li> <li> <p> <code>INBOUND_DELEGATION</code>: Resolver delegates queries to Route 53 private hosted zones from your network.</p> </li> </ul>"
         },
         "IpAddressCount":{
           "shape":"IpAddressCount",
@@ -3931,7 +3942,7 @@
         },
         "Protocols":{
           "shape":"ProtocolList",
-          "documentation":"<p> Protocols used for the endpoint. DoH-FIPS is applicable for inbound endpoints only. </p> <p>For an inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul>"
+          "documentation":"<p> Protocols used for the endpoint. DoH-FIPS is applicable for a default inbound endpoints only. </p> <p>For an inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For a delegation inbound endpoint you can use Do53 only.</p> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul>"
         }
       },
       "documentation":"<p>In the response to a <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_CreateResolverEndpoint.html\">CreateResolverEndpoint</a>, <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_DeleteResolverEndpoint.html\">DeleteResolverEndpoint</a>, <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_GetResolverEndpoint.html\">GetResolverEndpoint</a>, Updates the name, or ResolverEndpointType for an endpoint, or <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_UpdateResolverEndpoint.html\">UpdateResolverEndpoint</a> request, a complex type that contains settings for an existing inbound or outbound Resolver endpoint.</p>"
@@ -3940,7 +3951,8 @@
       "type":"string",
       "enum":[
         "INBOUND",
-        "OUTBOUND"
+        "OUTBOUND",
+        "INBOUND_DELEGATION"
       ]
     },
     "ResolverEndpointStatus":{
@@ -4122,7 +4134,7 @@
         },
         "RuleType":{
           "shape":"RuleTypeOption",
-          "documentation":"<p>When you want to forward DNS queries for specified domain name to resolvers on your network, specify <code>FORWARD</code>.</p> <p>When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify <code>SYSTEM</code>.</p> <p>For example, to forward DNS queries for example.com to resolvers on your network, you create a rule and specify <code>FORWARD</code> for <code>RuleType</code>. To then have Resolver process queries for apex.example.com, you create a rule and specify <code>SYSTEM</code> for <code>RuleType</code>.</p> <p>Currently, only Resolver can create rules that have a value of <code>RECURSIVE</code> for <code>RuleType</code>.</p>"
+          "documentation":"<p>When you want to forward DNS queries for specified domain name to resolvers on your network, specify <code>FORWARD</code> or <code>DELEGATE</code>. If a query matches multiple Resolver rules (example.com and www.example.com), outbound DNS queries are routed using the Resolver rule that contains the most specific domain name (www.example.com).</p> <p>When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify <code>SYSTEM</code>.</p> <p>For example, to forward DNS queries for example.com to resolvers on your network, you create a rule and specify <code>FORWARD</code> for <code>RuleType</code>. To then have Resolver process queries for apex.example.com, you create a rule and specify <code>SYSTEM</code> for <code>RuleType</code>.</p> <p>Currently, only Resolver can create rules that have a value of <code>RECURSIVE</code> for <code>RuleType</code>.</p>"
         },
         "Name":{
           "shape":"Name",
@@ -4151,6 +4163,10 @@
         "ModificationTime":{
           "shape":"Rfc3339TimeString",
           "documentation":"<p>The date and time that the Resolver rule was last updated, in Unix time format and Coordinated Universal Time (UTC).</p>"
+        },
+        "DelegationRecord":{
+          "shape":"DelegationRecord",
+          "documentation":"<p> DNS queries with delegation records that point to this domain name are forwarded to resolvers on your network. </p>"
         }
       },
       "documentation":"<p>For queries that originate in your VPC, detailed information about a Resolver rule, which specifies how to route DNS queries out of the VPC. The <code>ResolverRule</code> parameter appears in the response to a <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_CreateResolverRule.html\">CreateResolverRule</a>, <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_DeleteResolverRule.html\">DeleteResolverRule</a>, <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_GetResolverRule.html\">GetResolverRule</a>, <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_ListResolverRules.html\">ListResolverRules</a>, or <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_UpdateResolverRule.html\">UpdateResolverRule</a> request.</p>"
@@ -4297,7 +4313,8 @@
       "enum":[
         "FORWARD",
         "SYSTEM",
-        "RECURSIVE"
+        "RECURSIVE",
+        "DELEGATE"
       ]
     },
     "SecurityGroupIds":{
@@ -4404,8 +4421,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4484,8 +4500,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateFirewallConfigRequest":{
       "type":"structure",
@@ -4740,7 +4755,7 @@
       "members":{
         "ResourceId":{
           "shape":"ResourceId",
-          "documentation":"<p>Resource ID of the Amazon VPC that you want to update the Resolver configuration for.</p>"
+          "documentation":"<p>The ID of the Amazon Virtual Private Cloud VPC or a Route 53 Profile that you're configuring Resolver for.</p>"
         },
         "AutodefinedReverseFlag":{
           "shape":"AutodefinedReverseFlag",
@@ -4808,7 +4823,7 @@
         },
         "Protocols":{
           "shape":"ProtocolList",
-          "documentation":"<p> The protocols you want to use for the endpoint. DoH-FIPS is applicable for inbound endpoints only. </p> <p>For an inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <important> <p> You can't change the protocol of an inbound endpoint directly from only Do53 to only DoH, or DoH-FIPS. This is to prevent a sudden disruption to incoming traffic that relies on Do53. To change the protocol from Do53 to DoH, or DoH-FIPS, you must first enable both Do53 and DoH, or Do53 and DoH-FIPS, to make sure that all incoming traffic has transferred to using the DoH protocol, or DoH-FIPS, and then remove the Do53.</p> </important>",
+          "documentation":"<p> The protocols you want to use for the endpoint. DoH-FIPS is applicable for default inbound endpoints only. </p> <p>For a default inbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 and DoH-FIPS in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>DoH-FIPS alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <p>For a delegation inbound endpoint you can use Do53 only.</p> <p>For an outbound endpoint you can apply the protocols as follows:</p> <ul> <li> <p> Do53 and DoH in combination.</p> </li> <li> <p>Do53 alone.</p> </li> <li> <p>DoH alone.</p> </li> <li> <p>None, which is treated as Do53.</p> </li> </ul> <important> <p> You can't change the protocol of an inbound endpoint directly from only Do53 to only DoH, or DoH-FIPS. This is to prevent a sudden disruption to incoming traffic that relies on Do53. To change the protocol from Do53 to DoH, or DoH-FIPS, you must first enable both Do53 and DoH, or Do53 and DoH-FIPS, to make sure that all incoming traffic has transferred to using the DoH protocol, or DoH-FIPS, and then remove the Do53.</p> </important>",
           "box":true
         }
       }
diff -pruN 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,344 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://rtbfabric-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://rtbfabric-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://rtbfabric.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://rtbfabric.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/paginators-1.json 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+{
+  "pagination": {
+    "ListLinks": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "links"
+    },
+    "ListRequesterGateways": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "gatewayIds"
+    },
+    "ListResponderGateways": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "gatewayIds"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/service-2.json 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,2843 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2023-05-15",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"rtbfabric",
+    "jsonVersion":"1.1",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceAbbreviation":"RTBFabric",
+    "serviceFullName":"RTBFabric",
+    "serviceId":"RTBFabric",
+    "signatureVersion":"v4",
+    "signingName":"rtbfabric",
+    "uid":"rtbfabric-2023-05-15"
+  },
+  "operations":{
+    "AcceptLink":{
+      "name":"AcceptLink",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}/accept",
+        "responseCode":200
+      },
+      "input":{"shape":"AcceptLinkRequest"},
+      "output":{"shape":"AcceptLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Accepts a link request between gateways.</p> <p>When a requester gateway requests to link with a responder gateway, the responder can use this operation to accept the link request and establish the connection.</p>",
+      "idempotent":true
+    },
+    "CreateInboundExternalLink":{
+      "name":"CreateInboundExternalLink",
+      "http":{
+        "method":"POST",
+        "requestUri":"/responder-gateway/{gatewayId}/inbound-external-link",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateInboundExternalLinkRequest"},
+      "output":{"shape":"CreateInboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates an inbound external link.</p>",
+      "idempotent":true
+    },
+    "CreateLink":{
+      "name":"CreateLink",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateway/{gatewayId}/create-link",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateLinkRequest"},
+      "output":{"shape":"CreateLinkResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates a new link between gateways.</p> <p>Establishes a connection that allows gateways to communicate and exchange bid requests and responses.</p>",
+      "idempotent":true
+    },
+    "CreateOutboundExternalLink":{
+      "name":"CreateOutboundExternalLink",
+      "http":{
+        "method":"POST",
+        "requestUri":"/requester-gateway/{gatewayId}/outbound-external-link",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateOutboundExternalLinkRequest"},
+      "output":{"shape":"CreateOutboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates an outbound external link.</p>",
+      "idempotent":true
+    },
+    "CreateRequesterGateway":{
+      "name":"CreateRequesterGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/requester-gateway",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateRequesterGatewayRequest"},
+      "output":{"shape":"CreateRequesterGatewayResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates a requester gateway.</p>",
+      "idempotent":true
+    },
+    "CreateResponderGateway":{
+      "name":"CreateResponderGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/responder-gateway",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateResponderGatewayRequest"},
+      "output":{"shape":"CreateResponderGatewayResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Creates a responder gateway.</p> <important> <p>A domain name or managed endpoint is required.</p> </important>",
+      "idempotent":true
+    },
+    "DeleteInboundExternalLink":{
+      "name":"DeleteInboundExternalLink",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/responder-gateway/{gatewayId}/inbound-external-link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteInboundExternalLinkRequest"},
+      "output":{"shape":"DeleteInboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes an inbound external link.</p>",
+      "idempotent":true
+    },
+    "DeleteLink":{
+      "name":"DeleteLink",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteLinkRequest"},
+      "output":{"shape":"DeleteLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes a link between gateways.</p> <p>Permanently removes the connection between gateways. This action cannot be undone.</p>",
+      "idempotent":true
+    },
+    "DeleteOutboundExternalLink":{
+      "name":"DeleteOutboundExternalLink",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/requester-gateway/{gatewayId}/outbound-external-link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteOutboundExternalLinkRequest"},
+      "output":{"shape":"DeleteOutboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes an outbound external link.</p>",
+      "idempotent":true
+    },
+    "DeleteRequesterGateway":{
+      "name":"DeleteRequesterGateway",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/requester-gateway/{gatewayId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteRequesterGatewayRequest"},
+      "output":{"shape":"DeleteRequesterGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes a requester gateway.</p>",
+      "idempotent":true
+    },
+    "DeleteResponderGateway":{
+      "name":"DeleteResponderGateway",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/responder-gateway/{gatewayId}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteResponderGatewayRequest"},
+      "output":{"shape":"DeleteResponderGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Deletes a responder gateway.</p>",
+      "idempotent":true
+    },
+    "GetInboundExternalLink":{
+      "name":"GetInboundExternalLink",
+      "http":{
+        "method":"GET",
+        "requestUri":"/responder-gateway/{gatewayId}/inbound-external-link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetInboundExternalLinkRequest"},
+      "output":{"shape":"GetInboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about an inbound external link.</p>",
+      "readonly":true
+    },
+    "GetLink":{
+      "name":"GetLink",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetLinkRequest"},
+      "output":{"shape":"GetLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about a link between gateways.</p> <p>Returns detailed information about the link configuration, status, and associated gateways.</p>",
+      "readonly":true
+    },
+    "GetOutboundExternalLink":{
+      "name":"GetOutboundExternalLink",
+      "http":{
+        "method":"GET",
+        "requestUri":"/requester-gateway/{gatewayId}/outbound-external-link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetOutboundExternalLinkRequest"},
+      "output":{"shape":"GetOutboundExternalLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about an outbound external link.</p>",
+      "readonly":true
+    },
+    "GetRequesterGateway":{
+      "name":"GetRequesterGateway",
+      "http":{
+        "method":"GET",
+        "requestUri":"/requester-gateway/{gatewayId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetRequesterGatewayRequest"},
+      "output":{"shape":"GetRequesterGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about a requester gateway.</p>",
+      "readonly":true
+    },
+    "GetResponderGateway":{
+      "name":"GetResponderGateway",
+      "http":{
+        "method":"GET",
+        "requestUri":"/responder-gateway/{gatewayId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResponderGatewayRequest"},
+      "output":{"shape":"GetResponderGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves information about a responder gateway.</p>",
+      "readonly":true
+    },
+    "ListLinks":{
+      "name":"ListLinks",
+      "http":{
+        "method":"GET",
+        "requestUri":"/gateway/{gatewayId}/links/",
+        "responseCode":200
+      },
+      "input":{"shape":"ListLinksRequest"},
+      "output":{"shape":"ListLinksResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists links associated with gateways.</p> <p>Returns a list of all links for the specified gateways, including their status and configuration details.</p>",
+      "readonly":true
+    },
+    "ListRequesterGateways":{
+      "name":"ListRequesterGateways",
+      "http":{
+        "method":"GET",
+        "requestUri":"/requester-gateways",
+        "responseCode":200
+      },
+      "input":{"shape":"ListRequesterGatewaysRequest"},
+      "output":{"shape":"ListRequesterGatewaysResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists requester gateways.</p>",
+      "readonly":true
+    },
+    "ListResponderGateways":{
+      "name":"ListResponderGateways",
+      "http":{
+        "method":"GET",
+        "requestUri":"/responder-gateways",
+        "responseCode":200
+      },
+      "input":{"shape":"ListResponderGatewaysRequest"},
+      "output":{"shape":"ListResponderGatewaysResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists reponder gateways.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists tags for a resource.</p>",
+      "readonly":true
+    },
+    "RejectLink":{
+      "name":"RejectLink",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}/reject",
+        "responseCode":200
+      },
+      "input":{"shape":"RejectLinkRequest"},
+      "output":{"shape":"RejectLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Rejects a link request between gateways.</p> <p>When a requester gateway requests to link with a responder gateway, the responder can use this operation to decline the link request.</p>",
+      "idempotent":true
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified resource.</p>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tags/{resourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Removes a tag or tags from a resource.</p>",
+      "idempotent":true
+    },
+    "UpdateLink":{
+      "name":"UpdateLink",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateLinkRequest"},
+      "output":{"shape":"UpdateLinkResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates the configuration of a link between gateways.</p> <p>Allows you to modify settings and parameters for an existing link.</p>",
+      "idempotent":true
+    },
+    "UpdateLinkModuleFlow":{
+      "name":"UpdateLinkModuleFlow",
+      "http":{
+        "method":"POST",
+        "requestUri":"/gateway/{gatewayId}/link/{linkId}/module-flow",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateLinkModuleFlowRequest"},
+      "output":{"shape":"UpdateLinkModuleFlowResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates a link module flow.</p>",
+      "idempotent":true
+    },
+    "UpdateRequesterGateway":{
+      "name":"UpdateRequesterGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/requester-gateway/{gatewayId}/update",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateRequesterGatewayRequest"},
+      "output":{"shape":"UpdateRequesterGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates a requester gateway.</p>",
+      "idempotent":true
+    },
+    "UpdateResponderGateway":{
+      "name":"UpdateResponderGateway",
+      "http":{
+        "method":"POST",
+        "requestUri":"/responder-gateway/{gatewayId}/update",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateResponderGatewayRequest"},
+      "output":{"shape":"UpdateResponderGatewayResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates a responder gateway.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AcceptLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "logSettings"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "logSettings":{
+          "shape":"LinkLogSettings",
+          "documentation":"<p>Settings for the application logs.</p>"
+        }
+      }
+    },
+    "AcceptLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was updated.</p>"
+        },
+        "direction":{
+          "shape":"LinkDirection",
+          "documentation":"<p>The direction of the link.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        }
+      }
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because you do not have sufficient access to perform this action.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Action":{
+      "type":"structure",
+      "members":{
+        "noBid":{
+          "shape":"NoBidAction",
+          "documentation":"<p>Describes a no bid action.</p>"
+        },
+        "headerTag":{
+          "shape":"HeaderTagAction",
+          "documentation":"<p>Describes the header tag for a bid action.</p>"
+        }
+      },
+      "documentation":"<p>Describes a bid action.</p>",
+      "union":true
+    },
+    "AutoScalingGroupName":{"type":"string"},
+    "AutoScalingGroupNameList":{
+      "type":"list",
+      "member":{"shape":"AutoScalingGroupName"}
+    },
+    "AutoScalingGroupsConfiguration":{
+      "type":"structure",
+      "required":[
+        "autoScalingGroupNames",
+        "roleArn"
+      ],
+      "members":{
+        "autoScalingGroupNames":{
+          "shape":"AutoScalingGroupNameList",
+          "documentation":"<p>The names of the auto scaling group.</p>"
+        },
+        "roleArn":{
+          "shape":"String",
+          "documentation":"<p>The role ARN of the auto scaling group.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of an auto scaling group.</p>"
+    },
+    "Base64EncodedCertificateChain":{
+      "type":"string",
+      "max":2097152,
+      "min":1,
+      "sensitive":true
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CertificateAuthorityCertificates":{
+      "type":"list",
+      "member":{"shape":"Base64EncodedCertificateChain"},
+      "max":2,
+      "min":0
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because of a conflict in the current state of the resource.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateInboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "clientToken",
+        "gatewayId",
+        "logSettings"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "logSettings":{"shape":"LinkLogSettings"},
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      }
+    },
+    "CreateInboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "status",
+        "domainName"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name.</p>"
+        }
+      }
+    },
+    "CreateLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "logSettings"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "httpResponderAllowed":{
+          "shape":"Boolean",
+          "documentation":"<p>Boolean to specify if an HTTP responder is allowed.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        },
+        "logSettings":{
+          "shape":"LinkLogSettings",
+          "documentation":"<p>Settings for the application logs.</p>"
+        }
+      }
+    },
+    "CreateLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was updated.</p>"
+        },
+        "direction":{
+          "shape":"LinkDirection",
+          "documentation":"<p>The direction of the link.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "customerProvidedId":{
+          "shape":"CreateLinkResponseCustomerProvidedIdString",
+          "documentation":"<p>The customer-provided unique identifier of the link.</p>"
+        }
+      }
+    },
+    "CreateLinkResponseCustomerProvidedIdString":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9_-]{5,50}"
+    },
+    "CreateOutboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "clientToken",
+        "gatewayId",
+        "publicEndpoint",
+        "logSettings"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "attributes":{"shape":"LinkAttributes"},
+        "publicEndpoint":{
+          "shape":"URL",
+          "documentation":"<p>The public endpoint of the link.</p>"
+        },
+        "logSettings":{"shape":"LinkLogSettings"},
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      }
+    },
+    "CreateOutboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "CreateRequesterGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "vpcId",
+        "subnetIds",
+        "securityGroupIds",
+        "clientToken"
+      ],
+      "members":{
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the Virtual Private Cloud (VPC).</p>"
+        },
+        "subnetIds":{
+          "shape":"CreateRequesterGatewayRequestSubnetIdsList",
+          "documentation":"<p>The unique identifiers of the subnets.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"CreateRequesterGatewayRequestSecurityGroupIdsList",
+          "documentation":"<p>The unique identifiers of the security groups.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "description":{
+          "shape":"CreateRequesterGatewayRequestDescriptionString",
+          "documentation":"<p>An optional description for the requester gateway.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      }
+    },
+    "CreateRequesterGatewayRequestDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "CreateRequesterGatewayRequestSecurityGroupIdsList":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "min":1
+    },
+    "CreateRequesterGatewayRequestSubnetIdsList":{
+      "type":"list",
+      "member":{"shape":"SubnetId"},
+      "min":1
+    },
+    "CreateRequesterGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "domainName",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name of the requester gateway.</p>"
+        },
+        "status":{
+          "shape":"RequesterGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "CreateResponderGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "vpcId",
+        "subnetIds",
+        "securityGroupIds",
+        "port",
+        "protocol",
+        "clientToken"
+      ],
+      "members":{
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the Virtual Private Cloud (VPC).</p>"
+        },
+        "subnetIds":{
+          "shape":"CreateResponderGatewayRequestSubnetIdsList",
+          "documentation":"<p>The unique identifiers of the subnets.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"CreateResponderGatewayRequestSecurityGroupIdsList",
+          "documentation":"<p>The unique identifiers of the security groups.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name for the responder gateway.</p>"
+        },
+        "port":{
+          "shape":"CreateResponderGatewayRequestPortInteger",
+          "documentation":"<p>The networking port to use.</p>"
+        },
+        "protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The networking protocol to use.</p>"
+        },
+        "trustStoreConfiguration":{
+          "shape":"TrustStoreConfiguration",
+          "documentation":"<p>The configuration of the trust store.</p>"
+        },
+        "managedEndpointConfiguration":{
+          "shape":"ManagedEndpointConfiguration",
+          "documentation":"<p>The configuration for the managed endpoint.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "description":{
+          "shape":"CreateResponderGatewayRequestDescriptionString",
+          "documentation":"<p>An optional description for the responder gateway.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      }
+    },
+    "CreateResponderGatewayRequestDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "CreateResponderGatewayRequestPortInteger":{
+      "type":"integer",
+      "box":true,
+      "max":65535,
+      "min":1
+    },
+    "CreateResponderGatewayRequestSecurityGroupIdsList":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "min":1
+    },
+    "CreateResponderGatewayRequestSubnetIdsList":{
+      "type":"list",
+      "member":{"shape":"SubnetId"},
+      "min":1
+    },
+    "CreateResponderGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "status":{
+          "shape":"ResponderGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "CustomerProvidedId":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"[a-zA-Z0-9_-]+"
+    },
+    "DeleteInboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "DeleteInboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "DeleteLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "DeleteLinkResponse":{
+      "type":"structure",
+      "required":[
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the link.</p>"
+        }
+      }
+    },
+    "DeleteOutboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "DeleteOutboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "DeleteRequesterGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayId"],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        }
+      }
+    },
+    "DeleteRequesterGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "status":{
+          "shape":"RequesterGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "DeleteResponderGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayId"],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        }
+      }
+    },
+    "DeleteResponderGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "status":{
+          "shape":"ResponderGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "DomainName":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":"(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)(?:\\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?))+"
+    },
+    "EksEndpointsConfiguration":{
+      "type":"structure",
+      "required":[
+        "endpointsResourceName",
+        "endpointsResourceNamespace",
+        "clusterApiServerEndpointUri",
+        "clusterApiServerCaCertificateChain",
+        "clusterName",
+        "roleArn"
+      ],
+      "members":{
+        "endpointsResourceName":{
+          "shape":"KubernetesEndpointsResourceName",
+          "documentation":"<p>The name of the endpoint resource.</p>"
+        },
+        "endpointsResourceNamespace":{
+          "shape":"KubernetesNamespace",
+          "documentation":"<p>The namespace of the endpoint resource.</p>"
+        },
+        "clusterApiServerEndpointUri":{
+          "shape":"URI",
+          "documentation":"<p>The URI of the cluster API server endpoint.</p>"
+        },
+        "clusterApiServerCaCertificateChain":{
+          "shape":"Base64EncodedCertificateChain",
+          "documentation":"<p>The CA certificate chain of the cluster API server.</p>"
+        },
+        "clusterName":{
+          "shape":"KubernetesClusterName",
+          "documentation":"<p>The name of the cluster.</p>"
+        },
+        "roleArn":{
+          "shape":"String",
+          "documentation":"<p>The role ARN for the cluster.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of an Amazon Elastic Kubernetes Service endpoint.</p>"
+    },
+    "Filter":{
+      "type":"structure",
+      "required":["criteria"],
+      "members":{
+        "criteria":{
+          "shape":"FilterCriteria",
+          "documentation":"<p>Describes the criteria for a filter.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of a filter.</p>"
+    },
+    "FilterConfiguration":{
+      "type":"list",
+      "member":{"shape":"Filter"}
+    },
+    "FilterCriteria":{
+      "type":"list",
+      "member":{"shape":"FilterCriterion"}
+    },
+    "FilterCriterion":{
+      "type":"structure",
+      "required":[
+        "path",
+        "values"
+      ],
+      "members":{
+        "path":{
+          "shape":"String",
+          "documentation":"<p>The path to filter.</p>"
+        },
+        "values":{
+          "shape":"FilterCriterionValuesList",
+          "documentation":"<p>The value to filter.</p>"
+        }
+      },
+      "documentation":"<p>Describes the criteria for a filter.</p>"
+    },
+    "FilterCriterionValuesList":{
+      "type":"list",
+      "member":{"shape":"String"},
+      "min":1
+    },
+    "FilterType":{
+      "type":"string",
+      "enum":[
+        "INCLUDE",
+        "EXCLUDE"
+      ]
+    },
+    "Float":{
+      "type":"float",
+      "box":true
+    },
+    "FlowModuleName":{
+      "type":"string",
+      "max":255,
+      "min":0,
+      "pattern":"[A-Za-z0-9 -]+"
+    },
+    "FlowModuleNameList":{
+      "type":"list",
+      "member":{"shape":"FlowModuleName"}
+    },
+    "GatewayId":{
+      "type":"string",
+      "pattern":"rtb-gw-[a-z0-9-]{1,25}"
+    },
+    "GatewayIdList":{
+      "type":"list",
+      "member":{"shape":"GatewayId"}
+    },
+    "GetInboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "GetInboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "status",
+        "domainName"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the inbound external link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the inbound external link was updated.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        },
+        "logSettings":{"shape":"LinkLogSettings"}
+      }
+    },
+    "GetLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "GetLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was updated.</p>"
+        },
+        "direction":{
+          "shape":"LinkDirection",
+          "documentation":"<p>The direction of the link.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        },
+        "logSettings":{
+          "shape":"LinkLogSettings",
+          "documentation":"<p>Settings for the application logs.</p>"
+        }
+      }
+    },
+    "GetOutboundExternalLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "GetOutboundExternalLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "status",
+        "publicEndpoint"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "publicEndpoint":{
+          "shape":"URL",
+          "documentation":"<p>The public endpoint for the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the outbound external link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the outbound external link was updated.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        },
+        "logSettings":{"shape":"LinkLogSettings"}
+      }
+    },
+    "GetRequesterGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayId"],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        }
+      }
+    },
+    "GetRequesterGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "status",
+        "domainName",
+        "vpcId",
+        "subnetIds",
+        "securityGroupIds",
+        "gatewayId"
+      ],
+      "members":{
+        "status":{
+          "shape":"RequesterGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name of the requester gateway.</p>"
+        },
+        "description":{
+          "shape":"GetRequesterGatewayResponseDescriptionString",
+          "documentation":"<p>The description of the requester gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the requester gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the requester gateway was updated.</p>"
+        },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the Virtual Private Cloud (VPC).</p>"
+        },
+        "subnetIds":{
+          "shape":"GetRequesterGatewayResponseSubnetIdsList",
+          "documentation":"<p>The unique identifiers of the subnets.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"GetRequesterGatewayResponseSecurityGroupIdsList",
+          "documentation":"<p>The unique identifiers of the security groups.</p>"
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        },
+        "activeLinksCount":{
+          "shape":"Integer",
+          "documentation":"<p>The count of active links for the requester gateway.</p>"
+        },
+        "totalLinksCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total count of links for the requester gateway.</p>"
+        }
+      }
+    },
+    "GetRequesterGatewayResponseDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "GetRequesterGatewayResponseSecurityGroupIdsList":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "min":1
+    },
+    "GetRequesterGatewayResponseSubnetIdsList":{
+      "type":"list",
+      "member":{"shape":"SubnetId"},
+      "min":1
+    },
+    "GetResponderGatewayRequest":{
+      "type":"structure",
+      "required":["gatewayId"],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        }
+      }
+    },
+    "GetResponderGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "vpcId",
+        "subnetIds",
+        "securityGroupIds",
+        "status",
+        "port",
+        "protocol",
+        "gatewayId"
+      ],
+      "members":{
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The unique identifier of the Virtual Private Cloud (VPC).</p>"
+        },
+        "subnetIds":{
+          "shape":"GetResponderGatewayResponseSubnetIdsList",
+          "documentation":"<p>The unique identifiers of the subnets.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"GetResponderGatewayResponseSecurityGroupIdsList",
+          "documentation":"<p>The unique identifiers of the security groups.</p>"
+        },
+        "status":{
+          "shape":"ResponderGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        },
+        "description":{
+          "shape":"GetResponderGatewayResponseDescriptionString",
+          "documentation":"<p>The description of the responder gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the responder gateway was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the responder gateway was updated.</p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name of the responder gateway.</p>"
+        },
+        "port":{
+          "shape":"GetResponderGatewayResponsePortInteger",
+          "documentation":"<p>The networking port.</p>"
+        },
+        "protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The networking protocol.</p>"
+        },
+        "trustStoreConfiguration":{
+          "shape":"TrustStoreConfiguration",
+          "documentation":"<p>The configuration of the trust store.</p>"
+        },
+        "managedEndpointConfiguration":{
+          "shape":"ManagedEndpointConfiguration",
+          "documentation":"<p>The configuration of the managed endpoint.</p>"
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        },
+        "activeLinksCount":{
+          "shape":"Integer",
+          "documentation":"<p>The count of active links for the responder gateway.</p>"
+        },
+        "totalLinksCount":{
+          "shape":"Integer",
+          "documentation":"<p>The total count of links for the responder gateway.</p>"
+        },
+        "inboundLinksCount":{
+          "shape":"Integer",
+          "documentation":"<p>The count of inbound links for the responder gateway.</p>"
+        }
+      }
+    },
+    "GetResponderGatewayResponseDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "GetResponderGatewayResponsePortInteger":{
+      "type":"integer",
+      "box":true,
+      "max":65535,
+      "min":1
+    },
+    "GetResponderGatewayResponseSecurityGroupIdsList":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"},
+      "min":1
+    },
+    "GetResponderGatewayResponseSubnetIdsList":{
+      "type":"list",
+      "member":{"shape":"SubnetId"},
+      "min":1
+    },
+    "HeaderTagAction":{
+      "type":"structure",
+      "required":[
+        "name",
+        "value"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the bid action.</p>"
+        },
+        "value":{
+          "shape":"String",
+          "documentation":"<p>The value of the bid action.</p>"
+        }
+      },
+      "documentation":"<p>Describes the header tag for a bid action.</p>"
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because of an internal server error. Try your call again.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "KubernetesClusterName":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]"
+    },
+    "KubernetesEndpointsResourceName":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]"
+    },
+    "KubernetesNamespace":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]"
+    },
+    "LinkApplicationLogConfiguration":{
+      "type":"structure",
+      "required":["sampling"],
+      "members":{
+        "sampling":{
+          "shape":"LinkApplicationLogSampling",
+          "documentation":"<p>Describes a link application log sample.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of a link application log.</p>"
+    },
+    "LinkApplicationLogSampling":{
+      "type":"structure",
+      "required":[
+        "errorLog",
+        "filterLog"
+      ],
+      "members":{
+        "errorLog":{
+          "shape":"LinkApplicationLogSamplingErrorLogDouble",
+          "documentation":"<p>An error log entry.</p>"
+        },
+        "filterLog":{
+          "shape":"LinkApplicationLogSamplingFilterLogDouble",
+          "documentation":"<p>A filter log entry.</p>"
+        }
+      },
+      "documentation":"<p>Describes a link application log sample.</p>"
+    },
+    "LinkApplicationLogSamplingErrorLogDouble":{
+      "type":"double",
+      "box":true,
+      "max":100.0,
+      "min":0.0
+    },
+    "LinkApplicationLogSamplingFilterLogDouble":{
+      "type":"double",
+      "box":true,
+      "max":100.0,
+      "min":0.0
+    },
+    "LinkAttributes":{
+      "type":"structure",
+      "members":{
+        "responderErrorMasking":{
+          "shape":"ResponderErrorMasking",
+          "documentation":"<p>Describes the masking for HTTP error codes.</p>"
+        },
+        "customerProvidedId":{
+          "shape":"CustomerProvidedId",
+          "documentation":"<p>The customer-provided unique identifier of the link.</p>"
+        }
+      },
+      "documentation":"<p>Describes the attributes of a link.</p>"
+    },
+    "LinkDirection":{
+      "type":"string",
+      "enum":[
+        "RESPONSE",
+        "REQUEST"
+      ]
+    },
+    "LinkId":{
+      "type":"string",
+      "pattern":"link-[a-z0-9-]{1,25}"
+    },
+    "LinkList":{
+      "type":"list",
+      "member":{"shape":"ListLinksResponseStructure"}
+    },
+    "LinkLogSettings":{
+      "type":"structure",
+      "required":["applicationLogs"],
+      "members":{
+        "applicationLogs":{
+          "shape":"LinkApplicationLogConfiguration",
+          "documentation":"<p>Describes the configuration of a link application log.</p>"
+        }
+      },
+      "documentation":"<p>Describes the settings for a link log.</p>"
+    },
+    "LinkStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING_CREATION",
+        "PENDING_REQUEST",
+        "REQUESTED",
+        "ACCEPTED",
+        "ACTIVE",
+        "REJECTED",
+        "FAILED",
+        "PENDING_DELETION",
+        "DELETED",
+        "PENDING_UPDATE",
+        "PENDING_ISOLATION",
+        "ISOLATED",
+        "PENDING_RESTORATION"
+      ]
+    },
+    "ListLinksRequest":{
+      "type":"structure",
+      "required":["gatewayId"],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"Integer",
+          "documentation":"<p>The maximum number of results that are returned per call. You can use <code>nextToken</code> to obtain further pages of results.</p> <p>This is only an upper limit. The actual number of results returned per call might be fewer than the specified maximum.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListLinksResponse":{
+      "type":"structure",
+      "members":{
+        "links":{
+          "shape":"LinkList",
+          "documentation":"<p>Information about created links.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>"
+        }
+      }
+    },
+    "ListLinksResponseStructure":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was updated.</p>"
+        },
+        "direction":{
+          "shape":"LinkDirection",
+          "documentation":"<p>The direction of the link.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>Describes the configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>Describes the configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Describes attributes of a link.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      },
+      "documentation":"<p>Describes a link.</p>"
+    },
+    "ListRequesterGatewaysRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListRequesterGatewaysRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results that are returned per call. You can use <code>nextToken</code> to obtain further pages of results.</p> <p>This is only an upper limit. The actual number of results returned per call might be fewer than the specified maximum.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListRequesterGatewaysRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "ListRequesterGatewaysResponse":{
+      "type":"structure",
+      "members":{
+        "gatewayIds":{
+          "shape":"GatewayIdList",
+          "documentation":"<p>The unique identifier of the gateways.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>"
+        }
+      }
+    },
+    "ListResponderGatewaysRequest":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListResponderGatewaysRequestMaxResultsInteger",
+          "documentation":"<p>The maximum number of results that are returned per call. You can use <code>nextToken</code> to obtain further pages of results.</p> <p>This is only an upper limit. The actual number of results returned per call might be fewer than the specified maximum.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        }
+      }
+    },
+    "ListResponderGatewaysRequestMaxResultsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":1
+    },
+    "ListResponderGatewaysResponse":{
+      "type":"structure",
+      "members":{
+        "gatewayIds":{
+          "shape":"GatewayIdList",
+          "documentation":"<p>The unique identifier of the gateways.</p>"
+        },
+        "nextToken":{
+          "shape":"String",
+          "documentation":"<p>If <code>nextToken</code> is returned, there are more results available. The value of <code>nextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. Using an expired pagination token will return an <i>HTTP 400 InvalidToken error</i>.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"RtbTaggableResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource for which you want to retrieve tags.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs for the tag or tags assigned to the specified resource.</p>"
+        }
+      }
+    },
+    "ManagedEndpointConfiguration":{
+      "type":"structure",
+      "members":{
+        "autoScalingGroups":{
+          "shape":"AutoScalingGroupsConfiguration",
+          "documentation":"<p>Describes the configuration of an auto scaling group.</p>"
+        },
+        "eksEndpoints":{
+          "shape":"EksEndpointsConfiguration",
+          "documentation":"<p>Describes the configuration of an Amazon Elastic Kubernetes Service endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of a managed endpoint.</p>",
+      "union":true
+    },
+    "ModuleConfiguration":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "version":{
+          "shape":"Version",
+          "documentation":"<p>The version of the module.</p>"
+        },
+        "name":{
+          "shape":"FlowModuleName",
+          "documentation":"<p>The name of the module.</p>"
+        },
+        "dependsOn":{
+          "shape":"FlowModuleNameList",
+          "documentation":"<p>The dependencies of the module.</p>"
+        },
+        "moduleParameters":{
+          "shape":"ModuleParameters",
+          "documentation":"<p>Describes the parameters of a module.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of a module.</p>"
+    },
+    "ModuleConfigurationList":{
+      "type":"list",
+      "member":{"shape":"ModuleConfiguration"}
+    },
+    "ModuleParameters":{
+      "type":"structure",
+      "members":{
+        "noBid":{
+          "shape":"NoBidModuleParameters",
+          "documentation":"<p>Describes the parameters of a no bid module.</p>"
+        },
+        "openRtbAttribute":{
+          "shape":"OpenRtbAttributeModuleParameters",
+          "documentation":"<p>Describes the parameters of an open RTB attribute module.</p>"
+        },
+        "rateLimiter":{
+          "shape":"RateLimiterModuleParameters",
+          "documentation":"<p>Describes the parameters of a rate limit.</p>"
+        }
+      },
+      "documentation":"<p>Describes the parameters of a module.</p>",
+      "union":true
+    },
+    "NoBidAction":{
+      "type":"structure",
+      "members":{
+        "noBidReasonCode":{
+          "shape":"NoBidActionNoBidReasonCodeInteger",
+          "documentation":"<p>The reason code for the no bid action.</p>"
+        }
+      },
+      "documentation":"<p>Describes a no bid action.</p>"
+    },
+    "NoBidActionNoBidReasonCodeInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "NoBidModuleParameters":{
+      "type":"structure",
+      "members":{
+        "reason":{
+          "shape":"NoBidModuleParametersReasonString",
+          "documentation":"<p>The reason description.</p>"
+        },
+        "reasonCode":{
+          "shape":"NoBidModuleParametersReasonCodeInteger",
+          "documentation":"<p>The reason code.</p>"
+        },
+        "passThroughPercentage":{
+          "shape":"NoBidModuleParametersPassThroughPercentageFloat",
+          "documentation":"<p>The pass through percentage.</p>"
+        }
+      },
+      "documentation":"<p>Describes the parameters of a no bid module.</p>"
+    },
+    "NoBidModuleParametersPassThroughPercentageFloat":{
+      "type":"float",
+      "box":true,
+      "max":100,
+      "min":0
+    },
+    "NoBidModuleParametersReasonCodeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":0
+    },
+    "NoBidModuleParametersReasonString":{
+      "type":"string",
+      "max":50,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]*"
+    },
+    "OpenRtbAttributeModuleParameters":{
+      "type":"structure",
+      "required":[
+        "filterType",
+        "filterConfiguration",
+        "action",
+        "holdbackPercentage"
+      ],
+      "members":{
+        "filterType":{
+          "shape":"FilterType",
+          "documentation":"<p>The filter type.</p>"
+        },
+        "filterConfiguration":{
+          "shape":"FilterConfiguration",
+          "documentation":"<p>Describes the configuration of a filter.</p>"
+        },
+        "action":{
+          "shape":"Action",
+          "documentation":"<p>Describes a bid action.</p>"
+        },
+        "holdbackPercentage":{
+          "shape":"OpenRtbAttributeModuleParametersHoldbackPercentageFloat",
+          "documentation":"<p>The hold back percentage.</p>"
+        }
+      },
+      "documentation":"<p>Describes the parameters of an open RTB attribute module.</p>"
+    },
+    "OpenRtbAttributeModuleParametersHoldbackPercentageFloat":{
+      "type":"float",
+      "box":true,
+      "max":100,
+      "min":0
+    },
+    "Protocol":{
+      "type":"string",
+      "enum":[
+        "HTTP",
+        "HTTPS"
+      ]
+    },
+    "RateLimiterModuleParameters":{
+      "type":"structure",
+      "members":{
+        "tps":{
+          "shape":"Float",
+          "documentation":"<p>The transactions per second rate limit.</p>"
+        }
+      },
+      "documentation":"<p>Describes the parameters of a rate limit.</p>"
+    },
+    "RejectLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        }
+      }
+    },
+    "RejectLinkResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "peerGatewayId",
+        "status",
+        "createdAt",
+        "updatedAt",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "peerGatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the peer gateway.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the link.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was created.</p>"
+        },
+        "updatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp of when the link was updated.</p>"
+        },
+        "direction":{
+          "shape":"LinkDirection",
+          "documentation":"<p>The direction of the link.</p>"
+        },
+        "flowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of flow modules.</p>"
+        },
+        "pendingFlowModules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of pending flow modules.</p>"
+        },
+        "attributes":{
+          "shape":"LinkAttributes",
+          "documentation":"<p>Attributes of the link.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        }
+      }
+    },
+    "RequesterGatewayStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING_CREATION",
+        "ACTIVE",
+        "PENDING_DELETION",
+        "DELETED",
+        "ERROR",
+        "PENDING_UPDATE",
+        "ISOLATED",
+        "PENDING_ISOLATION",
+        "PENDING_RESTORATION"
+      ]
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because the resource does not exist.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ResponderErrorMasking":{
+      "type":"list",
+      "member":{"shape":"ResponderErrorMaskingForHttpCode"},
+      "max":200,
+      "min":1
+    },
+    "ResponderErrorMaskingAction":{
+      "type":"string",
+      "enum":[
+        "NO_BID",
+        "PASSTHROUGH"
+      ]
+    },
+    "ResponderErrorMaskingForHttpCode":{
+      "type":"structure",
+      "required":[
+        "httpCode",
+        "action",
+        "loggingTypes"
+      ],
+      "members":{
+        "httpCode":{
+          "shape":"ResponderErrorMaskingForHttpCodeHttpCodeString",
+          "documentation":"<p>The HTTP error code.</p>"
+        },
+        "action":{
+          "shape":"ResponderErrorMaskingAction",
+          "documentation":"<p>The action for the error..</p>"
+        },
+        "loggingTypes":{
+          "shape":"ResponderErrorMaskingLoggingTypes",
+          "documentation":"<p>The error log type.</p>"
+        },
+        "responseLoggingPercentage":{
+          "shape":"ResponderErrorMaskingForHttpCodeResponseLoggingPercentageFloat",
+          "documentation":"<p>The percentage of response logging.</p>"
+        }
+      },
+      "documentation":"<p>Describes the masking for HTTP error codes.</p>"
+    },
+    "ResponderErrorMaskingForHttpCodeHttpCodeString":{
+      "type":"string",
+      "max":7,
+      "min":3,
+      "pattern":"DEFAULT|4XX|5XX|\\d{3}"
+    },
+    "ResponderErrorMaskingForHttpCodeResponseLoggingPercentageFloat":{
+      "type":"float",
+      "box":true,
+      "max":100,
+      "min":0
+    },
+    "ResponderErrorMaskingLoggingType":{
+      "type":"string",
+      "enum":[
+        "NONE",
+        "METRIC",
+        "RESPONSE"
+      ]
+    },
+    "ResponderErrorMaskingLoggingTypes":{
+      "type":"list",
+      "member":{"shape":"ResponderErrorMaskingLoggingType"},
+      "max":2,
+      "min":1
+    },
+    "ResponderGatewayStatus":{
+      "type":"string",
+      "enum":[
+        "PENDING_CREATION",
+        "ACTIVE",
+        "PENDING_DELETION",
+        "DELETED",
+        "ERROR",
+        "PENDING_UPDATE",
+        "ISOLATED",
+        "PENDING_ISOLATION",
+        "PENDING_RESTORATION"
+      ]
+    },
+    "RtbTaggableResourceArn":{
+      "type":"string",
+      "max":1600,
+      "min":1,
+      "pattern":"arn:aws:rtbfabric:[a-zA-Z0-9_-]+:[0-9]{12}:gateway/[a-zA-Z0-9-]+(/link/[a-zA-Z0-9-]+)?"
+    },
+    "SecurityGroupId":{
+      "type":"string",
+      "pattern":"sg-[0-9a-f]{8,40}"
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because you exceeded a service quota.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "String":{"type":"string"},
+    "SubnetId":{
+      "type":"string",
+      "pattern":"subnet-\\w{8,17}"
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"(resourceArn|internalId|(?!aws:)[a-zA-Z0-9+\\-=._:/@]+)"
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":50,
+      "min":1
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"RtbTaggableResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to tag.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tags":{
+          "shape":"TagsMap",
+          "documentation":"<p>A map of the key-value pairs of the tag or tags to assign to the resource.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":1600,
+      "min":0
+    },
+    "TagsMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"}
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "Timestamp":{"type":"timestamp"},
+    "TrustStoreConfiguration":{
+      "type":"structure",
+      "required":["certificateAuthorityCertificates"],
+      "members":{
+        "certificateAuthorityCertificates":{
+          "shape":"CertificateAuthorityCertificates",
+          "documentation":"<p>The certificate authority certificate.</p>"
+        }
+      },
+      "documentation":"<p>Describes the configuration of a trust store.</p>"
+    },
+    "URI":{
+      "type":"string",
+      "max":255,
+      "min":0,
+      "pattern":"(https|http)://(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)(?:\\.(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?))+"
+    },
+    "URL":{
+      "type":"string",
+      "max":255,
+      "min":0,
+      "pattern":"(https|http)://.+"
+    },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"RtbTaggableResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource that you want to untag.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>The keys of the key-value pairs for the tag or tags you want to remove from the specified resource.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "UpdateLinkModuleFlowRequest":{
+      "type":"structure",
+      "required":[
+        "clientToken",
+        "gatewayId",
+        "linkId",
+        "modules"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        },
+        "modules":{
+          "shape":"ModuleConfigurationList",
+          "documentation":"<p>The configuration of a module.</p>"
+        }
+      }
+    },
+    "UpdateLinkModuleFlowResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "UpdateLinkRequest":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "linkId"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>",
+          "location":"uri",
+          "locationName":"linkId"
+        },
+        "logSettings":{
+          "shape":"LinkLogSettings",
+          "documentation":"<p>Settings for the application logs.</p>"
+        }
+      }
+    },
+    "UpdateLinkResponse":{
+      "type":"structure",
+      "required":[
+        "linkId",
+        "status"
+      ],
+      "members":{
+        "linkId":{
+          "shape":"LinkId",
+          "documentation":"<p>The unique identifier of the link.</p>"
+        },
+        "status":{
+          "shape":"LinkStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "UpdateRequesterGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "clientToken",
+        "gatewayId"
+      ],
+      "members":{
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "description":{
+          "shape":"UpdateRequesterGatewayRequestDescriptionString",
+          "documentation":"<p>An optional description for the requester gateway.</p>"
+        }
+      }
+    },
+    "UpdateRequesterGatewayRequestDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "UpdateRequesterGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "status":{
+          "shape":"RequesterGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "UpdateResponderGatewayRequest":{
+      "type":"structure",
+      "required":[
+        "port",
+        "protocol",
+        "clientToken",
+        "gatewayId"
+      ],
+      "members":{
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The domain name for the responder gateway.</p>"
+        },
+        "port":{
+          "shape":"UpdateResponderGatewayRequestPortInteger",
+          "documentation":"<p>The networking port to use.</p>"
+        },
+        "protocol":{
+          "shape":"Protocol",
+          "documentation":"<p>The networking protocol to use.</p>"
+        },
+        "trustStoreConfiguration":{
+          "shape":"TrustStoreConfiguration",
+          "documentation":"<p>The configuration of the trust store.</p>"
+        },
+        "managedEndpointConfiguration":{
+          "shape":"ManagedEndpointConfiguration",
+          "documentation":"<p>The configuration for the managed endpoint.</p>"
+        },
+        "clientToken":{
+          "shape":"String",
+          "documentation":"<p>The unique client token.</p>",
+          "idempotencyToken":true
+        },
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>",
+          "location":"uri",
+          "locationName":"gatewayId"
+        },
+        "description":{
+          "shape":"UpdateResponderGatewayRequestDescriptionString",
+          "documentation":"<p>An optional description for the responder gateway.</p>"
+        }
+      }
+    },
+    "UpdateResponderGatewayRequestDescriptionString":{
+      "type":"string",
+      "pattern":"[A-Za-z0-9 ]+"
+    },
+    "UpdateResponderGatewayRequestPortInteger":{
+      "type":"integer",
+      "box":true,
+      "max":65535,
+      "min":1
+    },
+    "UpdateResponderGatewayResponse":{
+      "type":"structure",
+      "required":[
+        "gatewayId",
+        "status"
+      ],
+      "members":{
+        "gatewayId":{
+          "shape":"GatewayId",
+          "documentation":"<p>The unique identifier of the gateway.</p>"
+        },
+        "status":{
+          "shape":"ResponderGatewayStatus",
+          "documentation":"<p>The status of the request.</p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The request could not be completed because it fails satisfy the constraints specified by the service.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Version":{
+      "type":"string",
+      "pattern":"[a-z0-9-]{1,25}"
+    },
+    "VpcId":{
+      "type":"string",
+      "pattern":"vpc-[a-f0-9]{8,17}"
+    }
+  },
+  "documentation":"<p>Amazon Web Services RTB Fabric provides secure, low-latency infrastructure for connecting real-time bidding (RTB) applications. Rather than hosting applications directly, RTB Fabric acts as the connecting fabric that enables your applications to communicate efficiently over private networks instead of the public internet. You maintain complete control over your applications, data, and bidding decisions, while RTB Fabric provides the underlying infrastructure for secure, reliable connectivity.</p> <p>You can use these APIs to complete RTB Fabric tasks, such as setting up audit log ingestions or viewing user access. For more information about RTB Fabric, including the required permissions to use the service, see the <a href=\"https://docs.aws.amazon.com/rtb-fabric/latest/userguide/\">Amazon Web Services RTB Fabric User Guide</a>.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/waiters-2.json 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/rtbfabric/2023-05-15/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rtbfabric/2023-05-15/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,193 @@
+{
+  "version" : 2,
+  "waiters" : {
+    "InboundExternalLinkActive" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetInboundExternalLink",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "REJECTED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ISOLATED"
+      } ]
+    },
+    "LinkAccepted" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetLink",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACCEPTED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "REJECTED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      } ]
+    },
+    "LinkActive" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetLink",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "REJECTED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      } ]
+    },
+    "OutboundExternalLinkActive" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetOutboundExternalLink",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "REJECTED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "FAILED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ISOLATED"
+      } ]
+    },
+    "RequesterGatewayActive" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetRequesterGateway",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    },
+    "RequesterGatewayDeleted" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetRequesterGateway",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    },
+    "ResponderGatewayActive" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetResponderGateway",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "ACTIVE"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    },
+    "ResponderGatewayDeleted" : {
+      "delay" : 30,
+      "maxAttempts" : 5,
+      "operation" : "GetResponderGateway",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "success",
+        "expected" : "DELETED"
+      }, {
+        "matcher" : "path",
+        "argument" : "status",
+        "state" : "failure",
+        "expected" : "ERROR"
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rum/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/rum/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/rum/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/rum/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/rum/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"rum",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"CloudWatch RUM",
     "serviceId":"RUM",
     "signatureVersion":"v4",
     "signingName":"rum",
-    "uid":"rum-2018-05-10"
+    "uid":"rum-2018-05-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchCreateRumMetricDefinitions":{
@@ -111,6 +113,28 @@
       "documentation":"<p>Deletes an existing app monitor. This immediately stops the collection of data.</p>",
       "idempotent":true
     },
+    "DeleteResourcePolicy":{
+      "name":"DeleteResourcePolicy",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/appmonitor/{Name}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteResourcePolicyRequest"},
+      "output":{"shape":"DeleteResourcePolicyResponse"},
+      "errors":[
+        {"shape":"InvalidPolicyRevisionIdException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"PolicyNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Removes the association of a resource-based policy from an app monitor.</p>",
+      "idempotent":true
+    },
     "DeleteRumMetricsDestination":{
       "name":"DeleteRumMetricsDestination",
       "http":{
@@ -167,6 +191,26 @@
       ],
       "documentation":"<p>Retrieves the raw performance events that RUM has collected from your web application, so that you can do your own processing or analysis of this data.</p>"
     },
+    "GetResourcePolicy":{
+      "name":"GetResourcePolicy",
+      "http":{
+        "method":"GET",
+        "requestUri":"/appmonitor/{Name}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"GetResourcePolicyRequest"},
+      "output":{"shape":"GetResourcePolicyResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"PolicyNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Use this operation to retrieve information about a resource-based policy that is attached to an app monitor.</p>"
+    },
     "ListAppMonitors":{
       "name":"ListAppMonitors",
       "http":{
@@ -217,6 +261,29 @@
       ],
       "documentation":"<p>Displays the tags associated with a CloudWatch RUM resource.</p>"
     },
+    "PutResourcePolicy":{
+      "name":"PutResourcePolicy",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/appmonitor/{Name}/policy",
+        "responseCode":200
+      },
+      "input":{"shape":"PutResourcePolicyRequest"},
+      "output":{"shape":"PutResourcePolicyResponse"},
+      "errors":[
+        {"shape":"PolicySizeLimitExceededException"},
+        {"shape":"InvalidPolicyRevisionIdException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"MalformedPolicyDocumentException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Use this operation to assign a resource-based policy to a CloudWatch RUM app monitor to control access to it. Each app monitor can have one resource-based policy. The maximum size of the policy is 4 KB. To learn more about using resource policies with RUM, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-resource-policies.html\">Using resource-based policies with CloudWatch RUM</a>.</p>",
+      "idempotent":true
+    },
     "PutRumEvents":{
       "name":"PutRumEvents",
       "http":{
@@ -345,6 +412,11 @@
       },
       "exception":true
     },
+    "Alias":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
     "AppMonitor":{
       "type":"structure",
       "members":{
@@ -364,10 +436,18 @@
           "shape":"DataStorage",
           "documentation":"<p>A structure that contains information about whether this app monitor stores a copy of the telemetry data that RUM collects using CloudWatch Logs.</p>"
         },
+        "DeobfuscationConfiguration":{
+          "shape":"DeobfuscationConfiguration",
+          "documentation":"<p> A structure that contains the configuration for how an app monitor can deobfuscate stack traces. </p>"
+        },
         "Domain":{
           "shape":"AppMonitorDomain",
           "documentation":"<p>The top-level internet domain name for which your application has administrative authority.</p>"
         },
+        "DomainList":{
+          "shape":"AppMonitorDomainList",
+          "documentation":"<p> List the domain names for which your application has administrative authority. </p>"
+        },
         "Id":{
           "shape":"AppMonitorId",
           "documentation":"<p>The unique ID of this app monitor.</p>"
@@ -455,7 +535,13 @@
       "type":"string",
       "max":253,
       "min":1,
-      "pattern":"^(localhost)|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))|^(\\*\\.)(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))"
+      "pattern":"^(localhost)$|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|(?=^[a-zA-Z0-9\\.\\*-]{4,253}$)(?!.*\\.-)(?!.*-\\.)(?!.*\\.\\.)(?!.*[^\\.]{64,})^(\\*\\.)?(?![-\\.\\*])[^\\*]{1,}\\.(\\*|(?!.*--)(?=.*[a-zA-Z])[^\\*]{1,}[^\\*-])$"
+    },
+    "AppMonitorDomainList":{
+      "type":"list",
+      "member":{"shape":"AppMonitorDomain"},
+      "max":5,
+      "min":1
     },
     "AppMonitorId":{
       "type":"string",
@@ -729,10 +815,7 @@
     },
     "CreateAppMonitorRequest":{
       "type":"structure",
-      "required":[
-        "Domain",
-        "Name"
-      ],
+      "required":["Name"],
       "members":{
         "AppMonitorConfiguration":{
           "shape":"AppMonitorConfiguration",
@@ -746,10 +829,18 @@
           "shape":"Boolean",
           "documentation":"<p>Data collected by RUM is kept by RUM for 30 days and then deleted. This parameter specifies whether RUM sends a copy of this telemetry data to Amazon CloudWatch Logs in your account. This enables you to keep the telemetry data for more than 30 days, but it does incur Amazon CloudWatch Logs charges.</p> <p>If you omit this parameter, the default is <code>false</code>.</p>"
         },
+        "DeobfuscationConfiguration":{
+          "shape":"DeobfuscationConfiguration",
+          "documentation":"<p> A structure that contains the configuration for how an app monitor can deobfuscate stack traces. </p>"
+        },
         "Domain":{
           "shape":"AppMonitorDomain",
           "documentation":"<p>The top-level internet domain name for which your application has administrative authority.</p>"
         },
+        "DomainList":{
+          "shape":"AppMonitorDomainList",
+          "documentation":"<p> List the domain names for which your application has administrative authority. The <code>CreateAppMonitor</code> requires either the domain or the domain list. </p>"
+        },
         "Name":{
           "shape":"AppMonitorName",
           "documentation":"<p>A name for the app monitor.</p>"
@@ -827,6 +918,33 @@
       "members":{
       }
     },
+    "DeleteResourcePolicyRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"AppMonitorName",
+          "documentation":"<p>The app monitor that you want to remove the resource policy from.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        },
+        "PolicyRevisionId":{
+          "shape":"PolicyRevisionId",
+          "documentation":"<p>Specifies a specific policy revision to delete. Provide a <code>PolicyRevisionId</code> to ensure an atomic delete operation. If the revision ID that you provide doesn't match the latest policy revision ID, the request will be rejected with an <code>InvalidPolicyRevisionIdException</code> error.</p>",
+          "location":"querystring",
+          "locationName":"policyRevisionId"
+        }
+      }
+    },
+    "DeleteResourcePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "PolicyRevisionId":{
+          "shape":"PolicyRevisionId",
+          "documentation":"<p>The revision ID of the policy that was removed, if it had one.</p>"
+        }
+      }
+    },
     "DeleteRumMetricsDestinationRequest":{
       "type":"structure",
       "required":[
@@ -859,6 +977,29 @@
       "members":{
       }
     },
+    "DeobfuscationConfiguration":{
+      "type":"structure",
+      "members":{
+        "JavaScriptSourceMaps":{
+          "shape":"JavaScriptSourceMaps",
+          "documentation":"<p> A structure that contains the configuration for how an app monitor can unminify JavaScript error stack traces using source maps. </p>"
+        }
+      },
+      "documentation":"<p> A structure that contains the configuration for how an app monitor can deobfuscate stack traces. </p>"
+    },
+    "DeobfuscationS3Uri":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$"
+    },
+    "DeobfuscationStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "DestinationArn":{
       "type":"string",
       "max":2048,
@@ -964,6 +1105,31 @@
         }
       }
     },
+    "GetResourcePolicyRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"AppMonitorName",
+          "documentation":"<p>The name of the app monitor that is associated with the resource-based policy that you want to view.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        }
+      }
+    },
+    "GetResourcePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "PolicyDocument":{
+          "shape":"String",
+          "documentation":"<p>The JSON policy document that you requested.</p>"
+        },
+        "PolicyRevisionId":{
+          "shape":"PolicyRevisionId",
+          "documentation":"<p>The revision ID information for this version of the policy document that you requested.</p>"
+        }
+      }
+    },
     "ISOTimestampString":{
       "type":"string",
       "max":19,
@@ -1001,6 +1167,34 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "InvalidPolicyRevisionIdException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The policy revision ID that you provided doeesn't match the latest policy revision ID.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "JavaScriptSourceMaps":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "S3Uri":{
+          "shape":"DeobfuscationS3Uri",
+          "documentation":"<p> The S3Uri of the bucket or folder that stores the source map files. It is required if status is ENABLED. </p>"
+        },
+        "Status":{
+          "shape":"DeobfuscationStatus",
+          "documentation":"<p> Specifies whether JavaScript error stack traces should be unminified for this app monitor. The default is for JavaScript error stack trace unminification to be <code>DISABLED</code>. </p>"
+        }
+      },
+      "documentation":"<p> A structure that contains the configuration for how an app monitor can unminify JavaScript error stack traces using source maps. </p>"
+    },
     "JsonValue":{"type":"string"},
     "ListAppMonitorsRequest":{
       "type":"structure",
@@ -1098,6 +1292,19 @@
         }
       }
     },
+    "MalformedPolicyDocumentException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The policy document that you specified is not formatted correctly.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "MaxQueryResults":{
       "type":"integer",
       "max":100,
@@ -1241,6 +1448,73 @@
       "max":50,
       "min":0
     },
+    "PolicyNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The resource-based policy doesn't exist on this app monitor.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "PolicyRevisionId":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "PolicySizeLimitExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The policy document is too large. The limit is 4 KB.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "PutResourcePolicyRequest":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "PolicyDocument"
+      ],
+      "members":{
+        "Name":{
+          "shape":"AppMonitorName",
+          "documentation":"<p>The name of the app monitor that you want to apply this resource-based policy to. To find the names of your app monitors, you can use the <a href=\"https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_ListAppMonitors.html\">ListAppMonitors</a> operation.</p>",
+          "location":"uri",
+          "locationName":"Name"
+        },
+        "PolicyDocument":{
+          "shape":"String",
+          "documentation":"<p>The JSON to use as the resource policy. The document can be up to 4 KB in size. For more information about the contents and syntax for this policy, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-resource-policies.html\">Using resource-based policies with CloudWatch RUM</a>.</p>"
+        },
+        "PolicyRevisionId":{
+          "shape":"PolicyRevisionId",
+          "documentation":"<p>A string value that you can use to conditionally update your policy. You can provide the revision ID of your existing policy to make mutating requests against that policy.</p> <p>When you assign a policy revision ID, then later requests about that policy will be rejected with an <code>InvalidPolicyRevisionIdException</code> error if they don't provide the correct current revision ID.</p>"
+        }
+      }
+    },
+    "PutResourcePolicyResponse":{
+      "type":"structure",
+      "members":{
+        "PolicyDocument":{
+          "shape":"String",
+          "documentation":"<p>The JSON policy document that you specified.</p>"
+        },
+        "PolicyRevisionId":{
+          "shape":"PolicyRevisionId",
+          "documentation":"<p>The policy revision ID information that you specified.</p>"
+        }
+      }
+    },
     "PutRumEventsRequest":{
       "type":"structure",
       "required":[
@@ -1251,6 +1525,10 @@
         "UserDetails"
       ],
       "members":{
+        "Alias":{
+          "shape":"Alias",
+          "documentation":"<p>If the app monitor uses a resource-based policy that requires <code>PutRumEvents</code> requests to specify a certain alias, specify that alias here. This alias will be compared to the <code>rum:alias</code> context key in the resource-based policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-resource-policies.html\">Using resource-based policies with CloudWatch RUM</a>.</p>"
+        },
         "AppMonitorDetails":{
           "shape":"AppMonitorDetails",
           "documentation":"<p>A structure that contains information about the app monitor that collected this telemetry information.</p>"
@@ -1594,10 +1872,18 @@
           "shape":"Boolean",
           "documentation":"<p>Data collected by RUM is kept by RUM for 30 days and then deleted. This parameter specifies whether RUM sends a copy of this telemetry data to Amazon CloudWatch Logs in your account. This enables you to keep the telemetry data for more than 30 days, but it does incur Amazon CloudWatch Logs charges.</p>"
         },
+        "DeobfuscationConfiguration":{
+          "shape":"DeobfuscationConfiguration",
+          "documentation":"<p> A structure that contains the configuration for how an app monitor can deobfuscate stack traces. </p>"
+        },
         "Domain":{
           "shape":"AppMonitorDomain",
           "documentation":"<p>The top-level internet domain name for which your application has administrative authority.</p>"
         },
+        "DomainList":{
+          "shape":"AppMonitorDomainList",
+          "documentation":"<p> List the domain names for which your application has administrative authority. The <code>UpdateAppMonitor</code> allows either the domain or the domain list. </p>"
+        },
         "Name":{
           "shape":"AppMonitorName",
           "documentation":"<p>The name of the app monitor to update.</p>",
diff -pruN 2.23.6-1/awscli/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,102 +4,102 @@
         "Bucket": {
             "required": false,
             "documentation": "The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "ForcePathStyle": {
             "builtIn": "AWS::S3::ForcePathStyle",
             "required": true,
             "default": false,
             "documentation": "When true, force a path-style endpoint to be used where the bucket name is part of the path.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Accelerate": {
             "builtIn": "AWS::S3::Accelerate",
             "required": true,
             "default": false,
             "documentation": "When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseGlobalEndpoint": {
             "builtIn": "AWS::S3::UseGlobalEndpoint",
             "required": true,
             "default": false,
             "documentation": "Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseObjectLambdaEndpoint": {
             "required": false,
             "documentation": "Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Key": {
             "required": false,
             "documentation": "The S3 Key used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Key.",
-            "type": "String"
+            "type": "string"
         },
         "Prefix": {
             "required": false,
             "documentation": "The S3 Prefix used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 Prefix.",
-            "type": "String"
+            "type": "string"
         },
         "CopySource": {
             "required": false,
             "documentation": "The Copy Source used for Copy Object request. This is an optional parameter that will be set automatically for operations that are scoped to Copy Source.",
-            "type": "String"
+            "type": "string"
         },
         "DisableAccessPoints": {
             "required": false,
             "documentation": "Internal parameter to disable Access Point Buckets",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "DisableMultiRegionAccessPoints": {
             "builtIn": "AWS::S3::DisableMultiRegionAccessPoints",
             "required": true,
             "default": false,
             "documentation": "Whether multi-region access points (MRAP) should be disabled.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseArnRegion": {
             "builtIn": "AWS::S3::UseArnRegion",
             "required": false,
             "documentation": "When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN's region when constructing the endpoint instead of the client's configured region.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseS3ExpressControlEndpoint": {
             "required": false,
             "documentation": "Internal parameter to indicate whether S3Express operation should use control plane, (ex. CreateBucket)",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "DisableS3ExpressSessionAuth": {
             "required": false,
             "documentation": "Parameter to indicate whether S3Express session auth should be disabled",
-            "type": "Boolean"
+            "type": "boolean"
         }
     },
     "rules": [
@@ -286,21 +286,6 @@
                                     "fn": "booleanEquals",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "error": "S3Express does not support Dual-stack.",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
                                             "ref": "Accelerate"
                                         },
                                         true
@@ -576,76 +561,196 @@
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "uriEncode",
+                                            "fn": "aws.partition",
                                             "argv": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "ref": "Region"
                                                 }
                                             ],
-                                            "assign": "uri_encoded_bucket"
-                                        },
-                                        {
-                                            "fn": "not",
-                                            "argv": [
-                                                {
-                                                    "fn": "isSet",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "Endpoint"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
+                                            "assign": "partitionResult"
                                         }
                                     ],
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "uriEncode",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
-                                                        },
-                                                        true
+                                                            "ref": "Bucket"
+                                                        }
+                                                    ],
+                                                    "assign": "uri_encoded_bucket"
+                                                },
+                                                {
+                                                    "fn": "not",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "isSet",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Endpoint"
+                                                                }
+                                                            ]
+                                                        }
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://s3express-control-fips.{Region}.amazonaws.com/{uri_encoded_bucket}",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "rules": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://s3express-control.{Region}.amazonaws.com/{uri_encoded_bucket}",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         }
                                     ],
                                     "type": "tree"
@@ -669,27 +774,1008 @@
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "isSet",
+                                            "fn": "aws.partition",
                                             "argv": [
                                                 {
-                                                    "ref": "DisableS3ExpressSessionAuth"
+                                                    "ref": "Region"
                                                 }
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "DisableS3ExpressSessionAuth"
-                                                },
-                                                true
-                                            ]
+                                            ],
+                                            "assign": "partitionResult"
                                         }
                                     ],
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "DisableS3ExpressSessionAuth"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "DisableS3ExpressSessionAuth"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                6,
+                                                                14,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                14,
+                                                                16,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                6,
+                                                                15,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                15,
+                                                                17,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                6,
+                                                                19,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                19,
+                                                                21,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                6,
+                                                                20,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                20,
+                                                                22,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                6,
+                                                                26,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                26,
+                                                                28,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Unrecognized S3Express bucket name format.",
+                                                    "type": "error"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
                                                     "fn": "substring",
                                                     "argv": [
                                                         {
@@ -734,16 +1820,25 @@
                                                                 },
                                                                 true
                                                             ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
                                                     ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -754,15 +1849,110 @@
                                                     "type": "endpoint"
                                                 },
                                                 {
-                                                    "conditions": [],
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -822,16 +2012,25 @@
                                                                 },
                                                                 true
                                                             ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
                                                     ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -842,15 +2041,110 @@
                                                     "type": "endpoint"
                                                 },
                                                 {
-                                                    "conditions": [],
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -910,16 +2204,25 @@
                                                                 },
                                                                 true
                                                             ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
                                                     ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -930,15 +2233,110 @@
                                                     "type": "endpoint"
                                                 },
                                                 {
-                                                    "conditions": [],
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -998,16 +2396,25 @@
                                                                 },
                                                                 true
                                                             ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
                                                     ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -1018,15 +2425,110 @@
                                                     "type": "endpoint"
                                                 },
                                                 {
-                                                    "conditions": [],
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -1086,16 +2588,63 @@
                                                                 },
                                                                 true
                                                             ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
                                                         }
                                                     ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -1106,15 +2655,72 @@
                                                     "type": "endpoint"
                                                 },
                                                 {
-                                                    "conditions": [],
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
                                                     "endpoint": {
-                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
                                                         "properties": {
                                                             "backend": "S3Express",
                                                             "authSchemes": [
                                                                 {
                                                                     "disableDoubleEncoding": true,
-                                                                    "name": "sigv4",
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
                                                                     "signingName": "s3express",
                                                                     "signingRegion": "{Region}"
                                                                 }
@@ -1134,40 +2740,104 @@
                                         }
                                     ],
                                     "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [],
+                            "error": "S3Express bucket name is not a valid virtual hostable name.",
+                            "type": "error"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Bucket"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "substring",
+                            "argv": [
+                                {
+                                    "ref": "Bucket"
                                 },
+                                0,
+                                7,
+                                true
+                            ],
+                            "assign": "accessPointSuffix"
+                        },
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
                                 {
-                                    "conditions": [
+                                    "ref": "accessPointSuffix"
+                                },
+                                "--xa-s3"
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
                                         {
-                                            "fn": "substring",
-                                            "argv": [
-                                                {
-                                                    "ref": "Bucket"
-                                                },
-                                                6,
-                                                14,
-                                                true
-                                            ],
-                                            "assign": "s3expressAvailabilityZoneId"
+                                            "ref": "Accelerate"
                                         },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "S3Express does not support S3 Accelerate.",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
                                         {
-                                            "fn": "substring",
+                                            "ref": "Endpoint"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "fn": "parseURL",
+                                    "argv": [
+                                        {
+                                            "ref": "Endpoint"
+                                        }
+                                    ],
+                                    "assign": "url"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isSet",
                                             "argv": [
                                                 {
-                                                    "ref": "Bucket"
-                                                },
-                                                14,
-                                                16,
-                                                true
-                                            ],
-                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                    "ref": "DisableS3ExpressSessionAuth"
+                                                }
+                                            ]
                                         },
                                         {
-                                            "fn": "stringEquals",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                    "ref": "DisableS3ExpressSessionAuth"
                                                 },
-                                                "--"
+                                                true
                                             ]
                                         }
                                     ],
@@ -1178,47 +2848,96 @@
                                                     "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "url"
+                                                                },
+                                                                "isIp"
+                                                            ]
                                                         },
                                                         true
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "rules": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "uriEncode",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                }
+                                                            ],
+                                                            "assign": "uri_encoded_bucket"
                                                         }
-                                                    ]
-                                                },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "conditions": [
+                                                {
+                                                    "fn": "aws.isVirtualHostableS3Bucket",
+                                                    "argv": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
-                                                        }
+                                                            "ref": "Bucket"
+                                                        },
+                                                        false
                                                     ]
-                                                },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "{url#scheme}://{Bucket}.{url#authority}{url#path}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "S3Express bucket name is not a valid virtual hostable name.",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
@@ -1226,36 +2945,18 @@
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "substring",
-                                            "argv": [
-                                                {
-                                                    "ref": "Bucket"
-                                                },
-                                                6,
-                                                15,
-                                                true
-                                            ],
-                                            "assign": "s3expressAvailabilityZoneId"
-                                        },
-                                        {
-                                            "fn": "substring",
+                                            "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "url"
+                                                        },
+                                                        "isIp"
+                                                    ]
                                                 },
-                                                15,
-                                                17,
                                                 true
-                                            ],
-                                            "assign": "s3expressAvailabilityZoneDelim"
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "s3expressAvailabilityZoneDelim"
-                                                },
-                                                "--"
                                             ]
                                         }
                                     ],
@@ -1263,36 +2964,58 @@
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "uriEncode",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
+                                                            "ref": "Bucket"
+                                                        }
+                                                    ],
+                                                    "assign": "uri_encoded_bucket"
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
                                                         },
-                                                        true
-                                                    ]
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
-                                                        {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
-                                                        }
-                                                    ]
+                                            "type": "tree"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "aws.isVirtualHostableS3Bucket",
+                                            "argv": [
+                                                {
+                                                    "ref": "Bucket"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
                                         {
                                             "conditions": [],
                                             "endpoint": {
-                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
+                                                "url": "{url#scheme}://{Bucket}.{url#authority}{url#path}",
                                                 "properties": {
                                                     "backend": "S3Express",
                                                     "authSchemes": [
@@ -1312,273 +3035,1995 @@
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [
+                                    "conditions": [],
+                                    "error": "S3Express bucket name is not a valid virtual hostable name.",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.isVirtualHostableS3Bucket",
+                                    "argv": [
                                         {
-                                            "fn": "substring",
-                                            "argv": [
-                                                {
-                                                    "ref": "Bucket"
-                                                },
-                                                6,
-                                                19,
-                                                true
-                                            ],
-                                            "assign": "s3expressAvailabilityZoneId"
+                                            "ref": "Bucket"
                                         },
+                                        false
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
                                         {
-                                            "fn": "substring",
+                                            "fn": "aws.partition",
                                             "argv": [
                                                 {
-                                                    "ref": "Bucket"
-                                                },
-                                                19,
-                                                21,
-                                                true
+                                                    "ref": "Region"
+                                                }
                                             ],
-                                            "assign": "s3expressAvailabilityZoneDelim"
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "s3expressAvailabilityZoneDelim"
-                                                },
-                                                "--"
-                                            ]
+                                            "assign": "partitionResult"
                                         }
                                     ],
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
+                                                    "fn": "isSet",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "DisableS3ExpressSessionAuth"
+                                                        }
+                                                    ]
+                                                },
+                                                {
                                                     "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
+                                                            "ref": "DisableS3ExpressSessionAuth"
                                                         },
                                                         true
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "rules": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                7,
+                                                                15,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                15,
+                                                                17,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                7,
+                                                                16,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                16,
+                                                                18,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "substring",
-                                            "argv": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                7,
+                                                                20,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                20,
+                                                                22,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
                                                 },
-                                                6,
-                                                20,
-                                                true
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                7,
+                                                                21,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                21,
+                                                                23,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                7,
+                                                                27,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneId"
+                                                        },
+                                                        {
+                                                            "fn": "substring",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Bucket"
+                                                                },
+                                                                27,
+                                                                29,
+                                                                true
+                                                            ],
+                                                            "assign": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        {
+                                                            "fn": "stringEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                                },
+                                                                "--"
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        true
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        },
+                                                        {
+                                                            "conditions": [
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseFIPS"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                },
+                                                                {
+                                                                    "fn": "booleanEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "ref": "UseDualStack"
+                                                                        },
+                                                                        false
+                                                                    ]
+                                                                }
+                                                            ],
+                                                            "endpoint": {
+                                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                                "properties": {
+                                                                    "backend": "S3Express",
+                                                                    "authSchemes": [
+                                                                        {
+                                                                            "disableDoubleEncoding": true,
+                                                                            "name": "sigv4",
+                                                                            "signingName": "s3express",
+                                                                            "signingRegion": "{Region}"
+                                                                        }
+                                                                    ]
+                                                                },
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                },
+                                                {
+                                                    "conditions": [],
+                                                    "error": "Unrecognized S3Express bucket name format.",
+                                                    "type": "error"
+                                                }
                                             ],
-                                            "assign": "s3expressAvailabilityZoneId"
+                                            "type": "tree"
                                         },
                                         {
-                                            "fn": "substring",
-                                            "argv": [
+                                            "conditions": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        7,
+                                                        15,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneId"
                                                 },
-                                                20,
-                                                22,
-                                                true
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        15,
+                                                        17,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        "--"
+                                                    ]
+                                                }
                                             ],
-                                            "assign": "s3expressAvailabilityZoneDelim"
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
+                                            "rules": [
                                                 {
-                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "--"
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "substring",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
+                                                            "ref": "Bucket"
                                                         },
+                                                        7,
+                                                        16,
                                                         true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneId"
+                                                },
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        16,
+                                                        18,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        "--"
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "rules": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "substring",
-                                            "argv": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                6,
-                                                26,
-                                                true
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
                                             ],
-                                            "assign": "s3expressAvailabilityZoneId"
+                                            "type": "tree"
                                         },
                                         {
-                                            "fn": "substring",
-                                            "argv": [
+                                            "conditions": [
                                                 {
-                                                    "ref": "Bucket"
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        7,
+                                                        20,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneId"
                                                 },
-                                                26,
-                                                28,
-                                                true
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        20,
+                                                        22,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        "--"
+                                                    ]
+                                                }
                                             ],
-                                            "assign": "s3expressAvailabilityZoneDelim"
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
+                                            "rules": [
                                                 {
-                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "--"
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "substring",
                                                     "argv": [
                                                         {
-                                                            "ref": "UseFIPS"
+                                                            "ref": "Bucket"
                                                         },
+                                                        7,
+                                                        21,
                                                         true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneId"
+                                                },
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        21,
+                                                        23,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        "--"
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "rules": [
+                                                {
+                                                    "conditions": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
                                                         }
-                                                    ]
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.amazonaws.com",
-                                                "properties": {
-                                                    "backend": "S3Express",
-                                                    "authSchemes": [
+                                            "conditions": [
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
                                                         {
-                                                            "disableDoubleEncoding": true,
-                                                            "name": "sigv4-s3express",
-                                                            "signingName": "s3express",
-                                                            "signingRegion": "{Region}"
-                                                        }
+                                                            "ref": "Bucket"
+                                                        },
+                                                        7,
+                                                        27,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneId"
+                                                },
+                                                {
+                                                    "fn": "substring",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "Bucket"
+                                                        },
+                                                        27,
+                                                        29,
+                                                        true
+                                                    ],
+                                                    "assign": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "s3expressAvailabilityZoneDelim"
+                                                        },
+                                                        "--"
                                                     ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
                                                 },
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                false
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "backend": "S3Express",
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4-s3express",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "Unrecognized S3Express bucket name format.",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
-                                    "error": "Unrecognized S3Express bucket name format.",
-                                    "type": "error"
                                 }
                             ],
                             "type": "tree"
@@ -1628,87 +5073,207 @@
                         {
                             "conditions": [
                                 {
-                                    "fn": "isSet",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "Endpoint"
+                                            "ref": "Region"
                                         }
-                                    ]
-                                },
+                                    ],
+                                    "assign": "partitionResult"
+                                }
+                            ],
+                            "rules": [
                                 {
-                                    "fn": "parseURL",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "Endpoint"
+                                            "fn": "isSet",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "parseURL",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ],
+                                            "assign": "url"
                                         }
                                     ],
-                                    "assign": "url"
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "{url#scheme}://{url#authority}{url#path}",
-                                "properties": {
-                                    "backend": "S3Express",
-                                    "authSchemes": [
-                                        {
-                                            "disableDoubleEncoding": true,
-                                            "name": "sigv4",
-                                            "signingName": "s3express",
-                                            "signingRegion": "{Region}"
+                                    "endpoint": {
+                                        "url": "{url#scheme}://{url#authority}{url#path}",
+                                        "properties": {
+                                            "backend": "S3Express",
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "backend": "S3Express",
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "endpoint": {
-                                "url": "https://s3express-control-fips.{Region}.amazonaws.com",
-                                "properties": {
-                                    "backend": "S3Express",
-                                    "authSchemes": [
-                                        {
-                                            "disableDoubleEncoding": true,
-                                            "name": "sigv4",
-                                            "signingName": "s3express",
-                                            "signingRegion": "{Region}"
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "backend": "S3Express",
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://s3express-control.{Region}.amazonaws.com",
-                                "properties": {
-                                    "backend": "S3Express",
-                                    "authSchemes": [
-                                        {
-                                            "disableDoubleEncoding": true,
-                                            "name": "sigv4",
-                                            "signingName": "s3express",
-                                            "signingRegion": "{Region}"
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
-                                    ]
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "backend": "S3Express",
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "backend": "S3Express",
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
                         }
                     ],
                     "type": "tree"
diff -pruN 2.23.6-1/awscli/botocore/data/s3/2006-03-01/service-2.json 2.31.35-1/awscli/botocore/data/s3/2006-03-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/s3/2006-03-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3/2006-03-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -27,8 +27,7 @@
       "errors":[
         {"shape":"NoSuchUpload"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadAbort.html",
-      "documentation":"<p>This operation aborts a multipart upload. After a multipart upload is aborted, no additional parts can be uploaded using that upload ID. The storage consumed by any previously uploaded parts will be freed. However, if any part uploads are currently in progress, those part uploads might or might not succeed. As a result, it might be necessary to abort a given multipart upload multiple times in order to completely free all storage consumed by all parts. </p> <p>To verify that all parts have been removed and prevent getting charged for the part storage, you should call the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> API operation and ensure that the parts list is empty.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed. To delete these in-progress multipart uploads, use the <code>ListMultipartUploads</code> operation to list the in-progress multipart uploads in the bucket and use the <code>AbortMultipartUpload</code> operation to abort all the in-progress multipart uploads. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>AbortMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>"
+      "documentation":"<p>This operation aborts a multipart upload. After a multipart upload is aborted, no additional parts can be uploaded using that upload ID. The storage consumed by any previously uploaded parts will be freed. However, if any part uploads are currently in progress, those part uploads might or might not succeed. As a result, it might be necessary to abort a given multipart upload multiple times in order to completely free all storage consumed by all parts. </p> <p>To verify that all parts have been removed and prevent getting charged for the part storage, you should call the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> API operation and ensure that the parts list is empty.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed. To delete these in-progress multipart uploads, use the <code>ListMultipartUploads</code> operation to list the in-progress multipart uploads in the bucket and use the <code>AbortMultipartUpload</code> operation to abort all the in-progress multipart uploads. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>AbortMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "CompleteMultipartUpload":{
       "name":"CompleteMultipartUpload",
@@ -38,8 +37,7 @@
       },
       "input":{"shape":"CompleteMultipartUploadRequest"},
       "output":{"shape":"CompleteMultipartUploadOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadComplete.html",
-      "documentation":"<p>Completes a multipart upload by assembling previously uploaded parts.</p> <p>You first initiate the multipart upload and then upload all parts using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> operation or the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> operation. After successfully uploading all relevant parts of an upload, you call this <code>CompleteMultipartUpload</code> operation to complete the upload. Upon receiving this request, Amazon S3 concatenates all the parts in ascending order by part number to create a new object. In the CompleteMultipartUpload request, you must provide the parts list and ensure that the parts list is complete. The CompleteMultipartUpload API operation concatenates the parts that you provide in the list. For each part in the list, you must provide the <code>PartNumber</code> value and the <code>ETag</code> value that are returned after that part was uploaded.</p> <p>The processing of a CompleteMultipartUpload request could take several minutes to finalize. After Amazon S3 begins processing the request, it sends an HTTP response header that specifies a <code>200 OK</code> response. While processing is in progress, Amazon S3 periodically sends white space characters to keep the connection from timing out. A request could fail after the initial <code>200 OK</code> response has been sent. This means that a <code>200 OK</code> response can contain either a success or an error. The error response might be embedded in the <code>200 OK</code> response. If you call this API operation directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs that don't use exceptions, they return an error). </p> <p>Note that if <code>CompleteMultipartUpload</code> fails, applications should be prepared to retry any failed requests (including 500 error responses). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html\">Amazon S3 Error Best Practices</a>.</p> <important> <p>You can't use <code>Content-Type: application/x-www-form-urlencoded</code> for the CompleteMultipartUpload requests. Also, if you don't provide a <code>Content-Type</code> header, <code>CompleteMultipartUpload</code> can still return a <code>200 OK</code> response.</p> </important> <p>For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html\">additional checksum value</a> in your <code>MultipartUpload</code> requests and the object is encrypted with Key Management Service, you must have permission to use the <code>kms:Decrypt</code> action for the <code>CompleteMultipartUpload</code> request to succeed.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>EntityTooSmall</code> </p> <ul> <li> <p>Description: Your proposed upload is smaller than the minimum allowed object size. Each part must be at least 5 MB in size, except the last part.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidPart</code> </p> <ul> <li> <p>Description: One or more of the specified parts could not be found. The part might not have been uploaded, or the specified ETag might not have matched the uploaded part's ETag.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidPartOrder</code> </p> <ul> <li> <p>Description: The list of parts was not in ascending order. The parts list must be specified in order by part number.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CompleteMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>"
+      "documentation":"<p>Completes a multipart upload by assembling previously uploaded parts.</p> <p>You first initiate the multipart upload and then upload all parts using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> operation or the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> operation. After successfully uploading all relevant parts of an upload, you call this <code>CompleteMultipartUpload</code> operation to complete the upload. Upon receiving this request, Amazon S3 concatenates all the parts in ascending order by part number to create a new object. In the CompleteMultipartUpload request, you must provide the parts list and ensure that the parts list is complete. The CompleteMultipartUpload API operation concatenates the parts that you provide in the list. For each part in the list, you must provide the <code>PartNumber</code> value and the <code>ETag</code> value that are returned after that part was uploaded.</p> <p>The processing of a CompleteMultipartUpload request could take several minutes to finalize. After Amazon S3 begins processing the request, it sends an HTTP response header that specifies a <code>200 OK</code> response. While processing is in progress, Amazon S3 periodically sends white space characters to keep the connection from timing out. A request could fail after the initial <code>200 OK</code> response has been sent. This means that a <code>200 OK</code> response can contain either a success or an error. The error response might be embedded in the <code>200 OK</code> response. If you call this API operation directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs that don't use exceptions, they return an error). </p> <p>Note that if <code>CompleteMultipartUpload</code> fails, applications should be prepared to retry any failed requests (including 500 error responses). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html\">Amazon S3 Error Best Practices</a>.</p> <important> <p>You can't use <code>Content-Type: application/x-www-form-urlencoded</code> for the CompleteMultipartUpload requests. Also, if you don't provide a <code>Content-Type</code> header, <code>CompleteMultipartUpload</code> can still return a <code>200 OK</code> response.</p> </important> <p>For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html\">additional checksum value</a> in your <code>MultipartUpload</code> requests and the object is encrypted with Key Management Service, you must have permission to use the <code>kms:Decrypt</code> action for the <code>CompleteMultipartUpload</code> request to succeed.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>EntityTooSmall</code> </p> <ul> <li> <p>Description: Your proposed upload is smaller than the minimum allowed object size. Each part must be at least 5 MB in size, except the last part.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidPart</code> </p> <ul> <li> <p>Description: One or more of the specified parts could not be found. The part might not have been uploaded, or the specified ETag might not have matched the uploaded part's ETag.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidPartOrder</code> </p> <ul> <li> <p>Description: The list of parts was not in ascending order. The parts list must be specified in order by part number.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CompleteMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "CopyObject":{
       "name":"CopyObject",
@@ -52,9 +50,7 @@
       "errors":[
         {"shape":"ObjectNotInActiveTierError"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html",
-      "documentation":"<p>Creates a copy of an object that is already stored in Amazon S3.</p> <note> <p>You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html\">Copy Object Using the REST Multipart Upload API</a>.</p> </note> <p>You can copy individual objects between general purpose buckets, between directory buckets, and between general purpose buckets and directory buckets.</p> <note> <ul> <li> <p>Amazon S3 supports copy operations using Multi-Region Access Points only as a destination when using the Multi-Region Access Point ARN. </p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>VPC endpoints don't support cross-Region requests (including copies). If you're using VPC endpoints, your source and destination buckets should be in the same Amazon Web Services Region as your VPC endpoint.</p> </li> </ul> </note> <p>Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. For more information about how to enable a Region for your account, see <a href=\"https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html#manage-acct-regions-enable-standalone\">Enable or disable a Region for standalone accounts</a> in the <i>Amazon Web Services Account Management Guide</i>.</p> <important> <p>Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a <code>400 Bad Request</code> error. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a>.</p> </important> <dl> <dt>Authentication and authorization</dt> <dd> <p>All <code>CopyObject</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use the IAM credentials to authenticate and authorize your access to the <code>CopyObject</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p>You must have <i>read</i> access to the source object and <i>write</i> access to the destination bucket.</p> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have permissions in an IAM policy based on the source and destination bucket types in a <code>CopyObject</code> operation.</p> <ul> <li> <p>If the source object is in a general purpose bucket, you must have <b> <code>s3:GetObject</code> </b> permission to read the source object that is being copied. </p> </li> <li> <p>If the destination bucket is a general purpose bucket, you must have <b> <code>s3:PutObject</code> </b> permission to write the object copy to the destination bucket. </p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have permissions in a bucket policy or an IAM identity-based policy based on the source and destination bucket types in a <code>CopyObject</code> operation.</p> <ul> <li> <p>If the source object that you want to copy is in a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to read the object. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the copy source bucket.</p> </li> <li> <p>If the copy destination is a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to write the object to the destination. The <code>s3express:SessionMode</code> condition key can't be set to <code>ReadOnly</code> on the copy destination bucket. </p> </li> </ul> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> <p>For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Response and special errors</dt> <dd> <p>When the request is an HTTP 1.1 request, the response is chunk encoded. When the request is not an HTTP 1.1 request, the response would not contain the <code>Content-Length</code>. You always need to read the entire response body to check if the copy succeeds. </p> <ul> <li> <p>If the copy is successful, you receive a response with information about the copied object.</p> </li> <li> <p>A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. A <code>200 OK</code> response can contain either a success or an error.</p> <ul> <li> <p>If the error occurs before the copy action starts, you receive a standard Amazon S3 error.</p> </li> <li> <p>If the error occurs during the copy operation, the error response is embedded in the <code>200 OK</code> response. For example, in a cross-region copy, you may encounter throttling and receive a <code>200 OK</code> response. For more information, see <a href=\"https://repost.aws/knowledge-center/s3-resolve-200-internalerror\">Resolve the Error 200 response when copying objects to Amazon S3</a>. The <code>200 OK</code> status code means the copy was accepted, but it doesn't mean the copy is complete. Another example is when you disconnect from Amazon S3 before the copy is complete, Amazon S3 might cancel the copy and you may receive a <code>200 OK</code> response. You must stay connected to Amazon S3 until the entire response is successfully received and processed.</p> <p>If you call this API operation directly, make sure to design your application to parse the content of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs that don't use exceptions, they return an error).</p> </li> </ul> </li> </ul> </dd> <dt>Charge</dt> <dd> <p>The copy request charge is based on the storage class and Region that you specify for the destination object. The request can also result in a data retrieval charge for the source if the source storage class bills for data retrieval. If the copy source is in a different region, the data transfer is billed to the copy source account. For pricing information, see <a href=\"http://aws.amazon.com/s3/pricing/\">Amazon S3 pricing</a>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CopyObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul>",
-      "alias":"PutObjectCopy",
+      "documentation":"<p>Creates a copy of an object that is already stored in Amazon S3.</p> <important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <note> <p>You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html\">Copy Object Using the REST Multipart Upload API</a>.</p> </note> <p>You can copy individual objects between general purpose buckets, between directory buckets, and between general purpose buckets and directory buckets.</p> <note> <ul> <li> <p>Amazon S3 supports copy operations using Multi-Region Access Points only as a destination when using the Multi-Region Access Point ARN. </p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>VPC endpoints don't support cross-Region requests (including copies). If you're using VPC endpoints, your source and destination buckets should be in the same Amazon Web Services Region as your VPC endpoint.</p> </li> </ul> </note> <p>Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. For more information about how to enable a Region for your account, see <a href=\"https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html#manage-acct-regions-enable-standalone\">Enable or disable a Region for standalone accounts</a> in the <i>Amazon Web Services Account Management Guide</i>.</p> <important> <p>Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a <code>400 Bad Request</code> error. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a>.</p> </important> <dl> <dt>Authentication and authorization</dt> <dd> <p>All <code>CopyObject</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use the IAM credentials to authenticate and authorize your access to the <code>CopyObject</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p>You must have <i>read</i> access to the source object and <i>write</i> access to the destination bucket.</p> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have permissions in an IAM policy based on the source and destination bucket types in a <code>CopyObject</code> operation.</p> <ul> <li> <p>If the source object is in a general purpose bucket, you must have <b> <code>s3:GetObject</code> </b> permission to read the source object that is being copied. </p> </li> <li> <p>If the destination bucket is a general purpose bucket, you must have <b> <code>s3:PutObject</code> </b> permission to write the object copy to the destination bucket. </p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have permissions in a bucket policy or an IAM identity-based policy based on the source and destination bucket types in a <code>CopyObject</code> operation.</p> <ul> <li> <p>If the source object that you want to copy is in a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to read the object. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the copy source bucket.</p> </li> <li> <p>If the copy destination is a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to write the object to the destination. The <code>s3express:SessionMode</code> condition key can't be set to <code>ReadOnly</code> on the copy destination bucket. </p> </li> </ul> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> <p>For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Response and special errors</dt> <dd> <p>When the request is an HTTP 1.1 request, the response is chunk encoded. When the request is not an HTTP 1.1 request, the response would not contain the <code>Content-Length</code>. You always need to read the entire response body to check if the copy succeeds. </p> <ul> <li> <p>If the copy is successful, you receive a response with information about the copied object.</p> </li> <li> <p>A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. A <code>200 OK</code> response can contain either a success or an error.</p> <ul> <li> <p>If the error occurs before the copy action starts, you receive a standard Amazon S3 error.</p> </li> <li> <p>If the error occurs during the copy operation, the error response is embedded in the <code>200 OK</code> response. For example, in a cross-region copy, you may encounter throttling and receive a <code>200 OK</code> response. For more information, see <a href=\"https://repost.aws/knowledge-center/s3-resolve-200-internalerror\">Resolve the Error 200 response when copying objects to Amazon S3</a>. The <code>200 OK</code> status code means the copy was accepted, but it doesn't mean the copy is complete. Another example is when you disconnect from Amazon S3 before the copy is complete, Amazon S3 might cancel the copy and you may receive a <code>200 OK</code> response. You must stay connected to Amazon S3 until the entire response is successfully received and processed.</p> <p>If you call this API operation directly, make sure to design your application to parse the content of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throw an exception (or, for the SDKs that don't use exceptions, they return an error).</p> </li> </ul> </li> </ul> </dd> <dt>Charge</dt> <dd> <p>The copy request charge is based on the storage class and Region that you specify for the destination object. The request can also result in a data retrieval charge for the source if the source storage class bills for data retrieval. If the copy source is in a different region, the data transfer is billed to the copy source account. For pricing information, see <a href=\"http://aws.amazon.com/s3/pricing/\">Amazon S3 pricing</a>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <ul> <li> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </li> <li> <p> <b>Amazon S3 on Outposts</b> - When you use this action with S3 on Outposts through the REST API, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. The hostname isn't required when you use the Amazon Web Services CLI or SDKs.</p> </li> </ul> </dd> </dl> <p>The following operations are related to <code>CopyObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "DisableS3ExpressSessionAuth":{"value":true}
       }
@@ -71,14 +67,28 @@
         {"shape":"BucketAlreadyExists"},
         {"shape":"BucketAlreadyOwnedByYou"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUT.html",
-      "documentation":"<note> <p>This action creates an Amazon S3 bucket. To create an Amazon S3 on Outposts bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html\"> <code>CreateBucket</code> </a>.</p> </note> <p>Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and have a valid Amazon Web Services Access Key ID to authenticate requests. Anonymous requests are never allowed to create buckets. By creating the bucket, you become the bucket owner.</p> <p>There are two types of buckets: general purpose buckets and directory buckets. For more information about these bucket types, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html\">Creating, configuring, and working with Amazon S3 buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - If you send your <code>CreateBucket</code> request to the <code>s3.amazonaws.com</code> global endpoint, the request goes to the <code>us-east-1</code> Region. So the signature calculations in Signature Version 4 must use <code>us-east-1</code> as the Region, even if the location constraint in the request specifies another Region where the bucket is to be created. If you create a bucket in a Region other than US East (N. Virginia), your application must be able to handle 307 redirect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html\">Virtual hosting of buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - In addition to the <code>s3:CreateBucket</code> permission, the following permissions are required in a policy when your <code>CreateBucket</code> request includes specific headers: </p> <ul> <li> <p> <b>Access control lists (ACLs)</b> - In your <code>CreateBucket</code> request, if you specify an access control list (ACL) and set it to <code>public-read</code>, <code>public-read-write</code>, <code>authenticated-read</code>, or if you explicitly specify any other custom ACLs, both <code>s3:CreateBucket</code> and <code>s3:PutBucketAcl</code> permissions are required. In your <code>CreateBucket</code> request, if you set the ACL to <code>private</code>, or if you don't specify any ACLs, only the <code>s3:CreateBucket</code> permission is required. </p> </li> <li> <p> <b>Object Lock</b> - In your <code>CreateBucket</code> request, if you set <code>x-amz-bucket-object-lock-enabled</code> to true, the <code>s3:PutBucketObjectLockConfiguration</code> and <code>s3:PutBucketVersioning</code> permissions are required.</p> </li> <li> <p> <b>S3 Object Ownership</b> - If your <code>CreateBucket</code> request includes the <code>x-amz-object-ownership</code> header, then the <code>s3:PutBucketOwnershipControls</code> permission is required.</p> <important> <p> To set an ACL on a bucket as part of a <code>CreateBucket</code> request, you must explicitly set S3 Object Ownership for the bucket to a different value than the default, <code>BucketOwnerEnforced</code>. Additionally, if your desired bucket ACL grants public access, you must first create the bucket (without the bucket ACL) and then explicitly disable Block Public Access on the bucket before using <code>PutBucketAcl</code> to set the ACL. If you try to create a bucket with a public ACL, the request will fail. </p> <p> For the majority of modern use cases in S3, we recommend that you keep all Block Public Access settings enabled and keep ACLs disabled. If you would like to share data with users outside of your account, you can use bucket policies as needed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling ownership of objects and disabling ACLs for your bucket </a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html\">Blocking public access to your Amazon S3 storage </a> in the <i>Amazon S3 User Guide</i>. </p> </important> </li> <li> <p> <b>S3 Block Public Access</b> - If your specific use case requires granting public access to your S3 resources, you can disable Block Public Access. Specifically, you can create a new bucket with Block Public Access enabled, then separately call the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\"> <code>DeletePublicAccessBlock</code> </a> API. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about S3 Block Public Access, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html\">Blocking public access to your Amazon S3 storage </a> in the <i>Amazon S3 User Guide</i>. </p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:CreateBucket</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>The permissions for ACLs, Object Lock, S3 Object Ownership, and S3 Block Public Access are not supported for directory buckets. For directory buckets, all Block Public Access settings are enabled at the bucket level and S3 Object Ownership is set to Bucket owner enforced (ACLs disabled). These settings can't be modified. </p> <p>For more information about permissions for creating and working with directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Directory buckets</a> in the <i>Amazon S3 User Guide</i>. For more information about supported S3 features for directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html#s3-express-features\">Features of S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </important> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CreateBucket</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul>",
-      "alias":"PutBucket",
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <note> <p>This action creates an Amazon S3 bucket. To create an Amazon S3 on Outposts bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html\"> <code>CreateBucket</code> </a>.</p> </note> <p>Creates a new S3 bucket. To create a bucket, you must set up Amazon S3 and have a valid Amazon Web Services Access Key ID to authenticate requests. Anonymous requests are never allowed to create buckets. By creating the bucket, you become the bucket owner.</p> <p>There are two types of buckets: general purpose buckets and directory buckets. For more information about these bucket types, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html\">Creating, configuring, and working with Amazon S3 buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - If you send your <code>CreateBucket</code> request to the <code>s3.amazonaws.com</code> global endpoint, the request goes to the <code>us-east-1</code> Region. So the signature calculations in Signature Version 4 must use <code>us-east-1</code> as the Region, even if the location constraint in the request specifies another Region where the bucket is to be created. If you create a bucket in a Region other than US East (N. Virginia), your application must be able to handle 307 redirect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html\">Virtual hosting of buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - In addition to the <code>s3:CreateBucket</code> permission, the following permissions are required in a policy when your <code>CreateBucket</code> request includes specific headers: </p> <ul> <li> <p> <b>Access control lists (ACLs)</b> - In your <code>CreateBucket</code> request, if you specify an access control list (ACL) and set it to <code>public-read</code>, <code>public-read-write</code>, <code>authenticated-read</code>, or if you explicitly specify any other custom ACLs, both <code>s3:CreateBucket</code> and <code>s3:PutBucketAcl</code> permissions are required. In your <code>CreateBucket</code> request, if you set the ACL to <code>private</code>, or if you don't specify any ACLs, only the <code>s3:CreateBucket</code> permission is required. </p> </li> <li> <p> <b>Object Lock</b> - In your <code>CreateBucket</code> request, if you set <code>x-amz-bucket-object-lock-enabled</code> to true, the <code>s3:PutBucketObjectLockConfiguration</code> and <code>s3:PutBucketVersioning</code> permissions are required.</p> </li> <li> <p> <b>S3 Object Ownership</b> - If your <code>CreateBucket</code> request includes the <code>x-amz-object-ownership</code> header, then the <code>s3:PutBucketOwnershipControls</code> permission is required.</p> <important> <p> To set an ACL on a bucket as part of a <code>CreateBucket</code> request, you must explicitly set S3 Object Ownership for the bucket to a different value than the default, <code>BucketOwnerEnforced</code>. Additionally, if your desired bucket ACL grants public access, you must first create the bucket (without the bucket ACL) and then explicitly disable Block Public Access on the bucket before using <code>PutBucketAcl</code> to set the ACL. If you try to create a bucket with a public ACL, the request will fail. </p> <p> For the majority of modern use cases in S3, we recommend that you keep all Block Public Access settings enabled and keep ACLs disabled. If you would like to share data with users outside of your account, you can use bucket policies as needed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling ownership of objects and disabling ACLs for your bucket </a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html\">Blocking public access to your Amazon S3 storage </a> in the <i>Amazon S3 User Guide</i>. </p> </important> </li> <li> <p> <b>S3 Block Public Access</b> - If your specific use case requires granting public access to your S3 resources, you can disable Block Public Access. Specifically, you can create a new bucket with Block Public Access enabled, then separately call the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\"> <code>DeletePublicAccessBlock</code> </a> API. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about S3 Block Public Access, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html\">Blocking public access to your Amazon S3 storage </a> in the <i>Amazon S3 User Guide</i>. </p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:CreateBucket</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>The permissions for ACLs, Object Lock, S3 Object Ownership, and S3 Block Public Access are not supported for directory buckets. For directory buckets, all Block Public Access settings are enabled at the bucket level and S3 Object Ownership is set to Bucket owner enforced (ACLs disabled). These settings can't be modified. </p> <p>For more information about permissions for creating and working with directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Directory buckets</a> in the <i>Amazon S3 User Guide</i>. For more information about supported S3 features for directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html#s3-express-features\">Features of S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </important> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CreateBucket</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "DisableAccessPoints":{"value":true},
         "UseS3ExpressControlEndpoint":{"value":true}
       }
     },
+    "CreateBucketMetadataConfiguration":{
+      "name":"CreateBucketMetadataConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/{Bucket}?metadataConfiguration"
+      },
+      "input":{"shape":"CreateBucketMetadataConfigurationRequest"},
+      "documentation":"<p>Creates an S3 Metadata V2 metadata configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the following permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you want to encrypt your metadata tables with server-side encryption with Key Management Service (KMS) keys (SSE-KMS), you need additional permissions in your KMS key policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\"> Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you also want to integrate your table bucket with Amazon Web Services analytics services so that you can query your metadata table, you need additional permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html\"> Integrating Amazon S3 Tables with Amazon Web Services analytics services</a> in the <i>Amazon S3 User Guide</i>.</p> <p>To query your metadata tables, you need additional permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-bucket-query-permissions.html\"> Permissions for querying metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p> <code>s3:CreateBucketMetadataTableConfiguration</code> </p> <note> <p>The IAM policy action name is the same for the V1 and V2 API operations.</p> </note> </li> <li> <p> <code>s3tables:CreateTableBucket</code> </p> </li> <li> <p> <code>s3tables:CreateNamespace</code> </p> </li> <li> <p> <code>s3tables:GetTable</code> </p> </li> <li> <p> <code>s3tables:CreateTable</code> </p> </li> <li> <p> <code>s3tables:PutTablePolicy</code> </p> </li> <li> <p> <code>s3tables:PutTableEncryption</code> </p> </li> <li> <p> <code>kms:DescribeKey</code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to <code>CreateBucketMetadataConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataConfiguration.html\">DeleteBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataConfiguration.html\">GetBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html\">UpdateBucketMetadataInventoryTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html\">UpdateBucketMetadataJournalTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "httpChecksum":{
+        "requestAlgorithmMember":"ChecksumAlgorithm",
+        "requestChecksumRequired":true
+      },
+      "staticContextParams":{
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
     "CreateBucketMetadataTableConfiguration":{
       "name":"CreateBucketMetadataTableConfiguration",
       "http":{
@@ -86,7 +96,7 @@
         "requestUri":"/{Bucket}?metadataTable"
       },
       "input":{"shape":"CreateBucketMetadataTableConfigurationRequest"},
-      "documentation":"<p>Creates a metadata table configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the following permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you also want to integrate your table bucket with Amazon Web Services analytics services so that you can query your metadata table, you need additional permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html\"> Integrating Amazon S3 Tables with Amazon Web Services analytics services</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p> <code>s3:CreateBucketMetadataTableConfiguration</code> </p> </li> <li> <p> <code>s3tables:CreateNamespace</code> </p> </li> <li> <p> <code>s3tables:GetTable</code> </p> </li> <li> <p> <code>s3tables:CreateTable</code> </p> </li> <li> <p> <code>s3tables:PutTablePolicy</code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to <code>CreateBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html\">DeleteBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html\">GetBucketMetadataTableConfiguration</a> </p> </li> </ul>",
+      "documentation":"<important> <p> We recommend that you create your S3 Metadata configurations by using the V2 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> API operation. We no longer recommend using the V1 <code>CreateBucketMetadataTableConfiguration</code> API operation. </p> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </important> <p>Creates a V1 S3 Metadata configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the following permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you want to encrypt your metadata tables with server-side encryption with Key Management Service (KMS) keys (SSE-KMS), you need additional permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\"> Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you also want to integrate your table bucket with Amazon Web Services analytics services so that you can query your metadata table, you need additional permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html\"> Integrating Amazon S3 Tables with Amazon Web Services analytics services</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p> <code>s3:CreateBucketMetadataTableConfiguration</code> </p> </li> <li> <p> <code>s3tables:CreateNamespace</code> </p> </li> <li> <p> <code>s3tables:GetTable</code> </p> </li> <li> <p> <code>s3tables:CreateTable</code> </p> </li> <li> <p> <code>s3tables:PutTablePolicy</code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to <code>CreateBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html\">DeleteBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html\">GetBucketMetadataTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -103,9 +113,7 @@
       },
       "input":{"shape":"CreateMultipartUploadRequest"},
       "output":{"shape":"CreateMultipartUploadOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadInitiate.html",
-      "documentation":"<p>This action initiates a multipart upload and returns an upload ID. This upload ID is used to associate all of the parts in the specific multipart upload. You specify this upload ID in each of your subsequent upload part requests (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a>). You also include this upload ID in the final request to either complete or abort the multipart upload request. For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>After you initiate a multipart upload and upload one or more parts, to stop being charged for storing the uploaded parts, you must either complete or abort the multipart upload. Amazon S3 frees up the space used to store the parts and stops charging you for storing them only after you either complete or abort a multipart upload. </p> </note> <p>If you have configured a lifecycle rule to abort incomplete multipart uploads, the created multipart upload must be completed within the number of days specified in the bucket lifecycle configuration. Otherwise, the incomplete multipart upload becomes eligible for an abort action and Amazon S3 aborts the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config\">Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration</a>.</p> <note> <ul> <li> <p> <b>Directory buckets </b> - S3 Lifecycle is not supported by directory buckets.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Request signing</dt> <dd> <p>For request signing, multipart upload is just a series of regular requests. You initiate a multipart upload, send one or more requests to upload parts, and then complete the multipart upload process. You sign each request individually. There is nothing special about signing multipart upload requests. For more information about signing, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To perform a multipart upload with encryption using an Key Management Service (KMS) KMS key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with Amazon Web Services KMS</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose buckets</b> - Server-side encryption is for data encryption at rest. Amazon S3 encrypts your data as it writes it to disks in its data centers and decrypts it when you access it. Amazon S3 automatically encrypts all new objects that are uploaded to an S3 bucket. When doing a multipart upload, if you don't specify encryption information in your request, the encryption setting of the uploaded parts is set to the default encryption configuration of the destination bucket. By default, all buckets have a base level of encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket has a default encryption configuration that uses server-side encryption with an Key Management Service (KMS) key (SSE-KMS), or a customer-provided encryption key (SSE-C), Amazon S3 uses the corresponding KMS key, or a customer-provided key to encrypt the uploaded parts. When you perform a CreateMultipartUpload operation, if you want to use a different type of encryption setting for the uploaded parts, you can request that Amazon S3 encrypts the object with a different encryption key (such as an Amazon S3 managed key, a KMS key, or a customer-provided key). When the encryption setting in your request is different from the default encryption configuration of the destination bucket, the encryption setting in your request takes precedence. If you choose to provide your own encryption key, the request headers you provide in <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> requests must match the headers you used in the <code>CreateMultipartUpload</code> request.</p> <ul> <li> <p>Use KMS keys (SSE-KMS) that include the Amazon Web Services managed key (<code>aws/s3</code>) and KMS customer managed keys stored in Key Management Service (KMS) – If you want Amazon Web Services to manage the keys used to encrypt data, specify the following headers in the request.</p> <ul> <li> <p> <code>x-amz-server-side-encryption</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-aws-kms-key-id</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-context</code> </p> </li> </ul> <note> <ul> <li> <p>If you specify <code>x-amz-server-side-encryption:aws:kms</code>, but don't provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code> key) in KMS to protect the data.</p> </li> <li> <p>To perform a multipart upload with encryption by using an Amazon Web Services KMS key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey*</code> actions on the key. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with Amazon Web Services KMS</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>If your Identity and Access Management (IAM) user or role is in the same Amazon Web Services account as the KMS key, then you must have these permissions on the key policy. If your IAM user or role is in a different account from the key, then you must have the permissions on both the key policy and your IAM user or role.</p> </li> <li> <p>All <code>GET</code> and <code>PUT</code> requests for an object protected by KMS fail if you don't make them by using Secure Sockets Layer (SSL), Transport Layer Security (TLS), or Signature Version 4. For information about configuring any of the officially supported Amazon Web Services SDKs and Amazon Web Services CLI, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\">Specifying the Signature Version in Request Authentication</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>For more information about server-side encryption with KMS keys (SSE-KMS), see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting Data Using Server-Side Encryption with KMS keys</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>Use customer-provided encryption keys (SSE-C) – If you want to manage your own encryption keys, provide all the following headers in the request.</p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about server-side encryption with customer-provided encryption keys (SSE-C), see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html\"> Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> <note> <p>For directory buckets, when you perform a <code>CreateMultipartUpload</code> operation and an <code>UploadPartCopy</code> operation, the request headers you provide in the <code>CreateMultipartUpload</code> request must match the default encryption configuration of the destination bucket. </p> </note> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CreateMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>",
-      "alias":"InitiateMultipartUpload"
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <p>This action initiates a multipart upload and returns an upload ID. This upload ID is used to associate all of the parts in the specific multipart upload. You specify this upload ID in each of your subsequent upload part requests (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a>). You also include this upload ID in the final request to either complete or abort the multipart upload request. For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>After you initiate a multipart upload and upload one or more parts, to stop being charged for storing the uploaded parts, you must either complete or abort the multipart upload. Amazon S3 frees up the space used to store the parts and stops charging you for storing them only after you either complete or abort a multipart upload. </p> </note> <p>If you have configured a lifecycle rule to abort incomplete multipart uploads, the created multipart upload must be completed within the number of days specified in the bucket lifecycle configuration. Otherwise, the incomplete multipart upload becomes eligible for an abort action and Amazon S3 aborts the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config\">Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Configuration</a>.</p> <note> <ul> <li> <p> <b>Directory buckets </b> - S3 Lifecycle is not supported by directory buckets.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Request signing</dt> <dd> <p>For request signing, multipart upload is just a series of regular requests. You initiate a multipart upload, send one or more requests to upload parts, and then complete the multipart upload process. You sign each request individually. There is nothing special about signing multipart upload requests. For more information about signing, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To perform a multipart upload with encryption using an Key Management Service (KMS) KMS key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with Amazon Web Services KMS</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose buckets</b> - Server-side encryption is for data encryption at rest. Amazon S3 encrypts your data as it writes it to disks in its data centers and decrypts it when you access it. Amazon S3 automatically encrypts all new objects that are uploaded to an S3 bucket. When doing a multipart upload, if you don't specify encryption information in your request, the encryption setting of the uploaded parts is set to the default encryption configuration of the destination bucket. By default, all buckets have a base level of encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket has a default encryption configuration that uses server-side encryption with an Key Management Service (KMS) key (SSE-KMS), or a customer-provided encryption key (SSE-C), Amazon S3 uses the corresponding KMS key, or a customer-provided key to encrypt the uploaded parts. When you perform a CreateMultipartUpload operation, if you want to use a different type of encryption setting for the uploaded parts, you can request that Amazon S3 encrypts the object with a different encryption key (such as an Amazon S3 managed key, a KMS key, or a customer-provided key). When the encryption setting in your request is different from the default encryption configuration of the destination bucket, the encryption setting in your request takes precedence. If you choose to provide your own encryption key, the request headers you provide in <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> requests must match the headers you used in the <code>CreateMultipartUpload</code> request.</p> <ul> <li> <p>Use KMS keys (SSE-KMS) that include the Amazon Web Services managed key (<code>aws/s3</code>) and KMS customer managed keys stored in Key Management Service (KMS) – If you want Amazon Web Services to manage the keys used to encrypt data, specify the following headers in the request.</p> <ul> <li> <p> <code>x-amz-server-side-encryption</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-aws-kms-key-id</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-context</code> </p> </li> </ul> <note> <ul> <li> <p>If you specify <code>x-amz-server-side-encryption:aws:kms</code>, but don't provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code> key) in KMS to protect the data.</p> </li> <li> <p>To perform a multipart upload with encryption by using an Amazon Web Services KMS key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey*</code> actions on the key. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with Amazon Web Services KMS</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>If your Identity and Access Management (IAM) user or role is in the same Amazon Web Services account as the KMS key, then you must have these permissions on the key policy. If your IAM user or role is in a different account from the key, then you must have the permissions on both the key policy and your IAM user or role.</p> </li> <li> <p>All <code>GET</code> and <code>PUT</code> requests for an object protected by KMS fail if you don't make them by using Secure Sockets Layer (SSL), Transport Layer Security (TLS), or Signature Version 4. For information about configuring any of the officially supported Amazon Web Services SDKs and Amazon Web Services CLI, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\">Specifying the Signature Version in Request Authentication</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>For more information about server-side encryption with KMS keys (SSE-KMS), see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting Data Using Server-Side Encryption with KMS keys</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p>Use customer-provided encryption keys (SSE-C) – If you want to manage your own encryption keys, provide all the following headers in the request.</p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about server-side encryption with customer-provided encryption keys (SSE-C), see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html\"> Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> <note> <p>For directory buckets, when you perform a <code>CreateMultipartUpload</code> operation and an <code>UploadPartCopy</code> operation, the request headers you provide in the <code>CreateMultipartUpload</code> request must match the default encryption configuration of the destination bucket. </p> </note> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>CreateMultipartUpload</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "CreateSession":{
       "name":"CreateSession",
@@ -118,7 +126,7 @@
       "errors":[
         {"shape":"NoSuchBucket"}
       ],
-      "documentation":"<p>Creates a session that establishes temporary security credentials to support fast authentication and authorization for the Zonal endpoint API operations on directory buckets. For more information about Zonal endpoint API operations that include the Availability Zone in the request endpoint, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-APIs.html\">S3 Express One Zone APIs</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To make Zonal endpoint API requests on a directory bucket, use the <code>CreateSession</code> API operation. Specifically, you grant <code>s3express:CreateSession</code> permission to a bucket in a bucket policy or an IAM identity-based policy. Then, you use IAM credentials to make the <code>CreateSession</code> API request on the bucket, which returns temporary security credentials that include the access key ID, secret access key, session token, and expiration. These credentials have associated permissions to access the Zonal endpoint API operations. After the session is created, you don’t need to use other policies to grant permissions to each Zonal endpoint API individually. Instead, in your Zonal endpoint API requests, you sign your requests by applying the temporary security credentials of the session to the request headers and following the SigV4 protocol for authentication. You also apply the session token to the <code>x-amz-s3session-token</code> request header for authorization. Temporary security credentials are scoped to the bucket and expire after 5 minutes. After the expiration time, any calls that you make with those credentials will fail. You must use IAM credentials again to make a <code>CreateSession</code> API request that generates a new set of temporary credentials for use. Temporary credentials cannot be extended or refreshed beyond the original specified interval.</p> <p>If you use Amazon Web Services SDKs, SDKs handle the session token refreshes automatically to avoid service interruptions when a session expires. We recommend that you use the Amazon Web Services SDKs to initiate and manage requests to the CreateSession API. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-optimizing-performance-guidelines-design-patterns.html#s3-express-optimizing-performance-session-authentication\">Performance guidelines and design patterns</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>You must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b> <code>CopyObject</code> API operation</b> - Unlike other Zonal endpoint API operations, the <code>CopyObject</code> API operation doesn't use the temporary security credentials returned from the <code>CreateSession</code> API operation for authentication and authorization. For information about authentication and authorization of the <code>CopyObject</code> API operation on directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a>.</p> </li> <li> <p> <b> <code>HeadBucket</code> API operation</b> - Unlike other Zonal endpoint API operations, the <code>HeadBucket</code> API operation doesn't use the temporary security credentials returned from the <code>CreateSession</code> API operation for authentication and authorization. For information about authentication and authorization of the <code>HeadBucket</code> API operation on directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html\">HeadBucket</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>To obtain temporary security credentials, you must create a bucket policy or an IAM identity-based policy that grants <code>s3express:CreateSession</code> permission to the bucket. In a policy, you can have the <code>s3express:SessionMode</code> condition key to control who can create a <code>ReadWrite</code> or <code>ReadOnly</code> session. For more information about <code>ReadWrite</code> or <code>ReadOnly</code> sessions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestParameters\"> <code>x-amz-create-session-mode</code> </a>. For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To grant cross-account access to Zonal endpoint API operations, the bucket policy should also grant both accounts the <code>s3express:CreateSession</code> permission.</p> <p>If you want to encrypt objects with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and the <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the target KMS key.</p> </dd> <dt>Encryption</dt> <dd> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> <p>For <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-differences.html#s3-express-differences-api-operations\">Zonal endpoint (object-level) API operations</a> except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>, you authenticate and authorize requests through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\">CreateSession</a> for low latency. To encrypt new objects in a directory bucket with SSE-KMS, you must specify SSE-KMS as the directory bucket's default encryption configuration with a KMS key (specifically, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>). Then, when a session is created for Zonal endpoint API operations, new objects are automatically encrypted and decrypted with SSE-KMS and S3 Bucket Keys during the session.</p> <note> <p> Only 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> is supported per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. After you specify SSE-KMS as your bucket's default encryption configuration with a customer managed key, you can't change the customer managed key for the bucket's SSE-KMS configuration. </p> </note> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, you can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) from the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. Also, in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), it's not supported to override the values of the encryption settings from the <code>CreateSession</code> request. </p> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl>",
+      "documentation":"<p>Creates a session that establishes temporary security credentials to support fast authentication and authorization for the Zonal endpoint API operations on directory buckets. For more information about Zonal endpoint API operations that include the Availability Zone in the request endpoint, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-APIs.html\">S3 Express One Zone APIs</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To make Zonal endpoint API requests on a directory bucket, use the <code>CreateSession</code> API operation. Specifically, you grant <code>s3express:CreateSession</code> permission to a bucket in a bucket policy or an IAM identity-based policy. Then, you use IAM credentials to make the <code>CreateSession</code> API request on the bucket, which returns temporary security credentials that include the access key ID, secret access key, session token, and expiration. These credentials have associated permissions to access the Zonal endpoint API operations. After the session is created, you don’t need to use other policies to grant permissions to each Zonal endpoint API individually. Instead, in your Zonal endpoint API requests, you sign your requests by applying the temporary security credentials of the session to the request headers and following the SigV4 protocol for authentication. You also apply the session token to the <code>x-amz-s3session-token</code> request header for authorization. Temporary security credentials are scoped to the bucket and expire after 5 minutes. After the expiration time, any calls that you make with those credentials will fail. You must use IAM credentials again to make a <code>CreateSession</code> API request that generates a new set of temporary credentials for use. Temporary credentials cannot be extended or refreshed beyond the original specified interval.</p> <p>If you use Amazon Web Services SDKs, SDKs handle the session token refreshes automatically to avoid service interruptions when a session expires. We recommend that you use the Amazon Web Services SDKs to initiate and manage requests to the CreateSession API. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-optimizing-performance-guidelines-design-patterns.html#s3-express-optimizing-performance-session-authentication\">Performance guidelines and design patterns</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>You must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b> <code>CopyObject</code> API operation</b> - Unlike other Zonal endpoint API operations, the <code>CopyObject</code> API operation doesn't use the temporary security credentials returned from the <code>CreateSession</code> API operation for authentication and authorization. For information about authentication and authorization of the <code>CopyObject</code> API operation on directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a>.</p> </li> <li> <p> <b> <code>HeadBucket</code> API operation</b> - Unlike other Zonal endpoint API operations, the <code>HeadBucket</code> API operation doesn't use the temporary security credentials returned from the <code>CreateSession</code> API operation for authentication and authorization. For information about authentication and authorization of the <code>HeadBucket</code> API operation on directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html\">HeadBucket</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>To obtain temporary security credentials, you must create a bucket policy or an IAM identity-based policy that grants <code>s3express:CreateSession</code> permission to the bucket. In a policy, you can have the <code>s3express:SessionMode</code> condition key to control who can create a <code>ReadWrite</code> or <code>ReadOnly</code> session. For more information about <code>ReadWrite</code> or <code>ReadOnly</code> sessions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestParameters\"> <code>x-amz-create-session-mode</code> </a>. For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To grant cross-account access to Zonal endpoint API operations, the bucket policy should also grant both accounts the <code>s3express:CreateSession</code> permission.</p> <p>If you want to encrypt objects with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and the <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the target KMS key.</p> </dd> <dt>Encryption</dt> <dd> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> <p>For <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-differences.html#s3-express-differences-api-operations\">Zonal endpoint (object-level) API operations</a> except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>, you authenticate and authorize requests through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\">CreateSession</a> for low latency. To encrypt new objects in a directory bucket with SSE-KMS, you must specify SSE-KMS as the directory bucket's default encryption configuration with a KMS key (specifically, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>). Then, when a session is created for Zonal endpoint API operations, new objects are automatically encrypted and decrypted with SSE-KMS and S3 Bucket Keys during the session.</p> <note> <p> Only 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> is supported per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. After you specify SSE-KMS as your bucket's default encryption configuration with a customer managed key, you can't change the customer managed key for the bucket's SSE-KMS configuration. </p> </note> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, you can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) from the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. Also, in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), it's not supported to override the values of the encryption settings from the <code>CreateSession</code> request. </p> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "DisableS3ExpressSessionAuth":{"value":true}
       }
@@ -131,8 +139,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETE.html",
-      "documentation":"<p>Deletes the S3 bucket. All objects (including all object versions and delete markers) in the bucket must be deleted before the bucket itself can be deleted.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the <code>s3:DeleteBucket</code> permission on the specified bucket in a policy.</p> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:DeleteBucket</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucket</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul>",
+      "documentation":"<p>Deletes the S3 bucket. All objects (including all object versions and delete markers) in the bucket must be deleted before the bucket itself can be deleted.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the <code>s3:DeleteBucket</code> permission on the specified bucket in a policy.</p> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:DeleteBucket</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucket</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -145,7 +152,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketAnalyticsConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes an analytics configuration for the bucket (specified by the analytics configuration ID).</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are related to <code>DeleteBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes an analytics configuration for the bucket (specified by the analytics configuration ID).</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are related to <code>DeleteBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -158,8 +165,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketCorsRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEcors.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the <code>cors</code> configuration information set for the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutBucketCORS</code> action. The bucket owner has this permission by default and can grant this permission to others. </p> <p>For information about <code>cors</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\">Enabling Cross-Origin Resource Sharing</a> in the <i>Amazon S3 User Guide</i>.</p> <p class=\"title\"> <b>Related Resources</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html\">PutBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html\">RESTOPTIONSobject</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the <code>cors</code> configuration information set for the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutBucketCORS</code> action. The bucket owner has this permission by default and can grant this permission to others. </p> <p>For information about <code>cors</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\">Enabling Cross-Origin Resource Sharing</a> in the <i>Amazon S3 User Guide</i>.</p> <p class=\"title\"> <b>Related Resources</b> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html\">PutBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html\">RESTOPTIONSobject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -172,7 +178,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketEncryptionRequest"},
-      "documentation":"<p>This implementation of the DELETE action resets the default encryption for the bucket as server-side encryption with Amazon S3 managed keys (SSE-S3).</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. For information about the default encryption configuration in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html\">Setting default server-side encryption behavior for directory buckets</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html\">PutBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html\">GetBucketEncryption</a> </p> </li> </ul>",
+      "documentation":"<p>This implementation of the DELETE action resets the default encryption for the bucket as server-side encryption with Amazon S3 managed keys (SSE-S3).</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. For information about the default encryption configuration in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html\">Setting default server-side encryption behavior for directory buckets</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html\">PutBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html\">GetBucketEncryption</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -185,7 +191,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketIntelligentTieringConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>DeleteBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>DeleteBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -198,7 +204,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketInventoryConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes an inventory configuration (identified by the inventory ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a>.</p> <p>Operations related to <code>DeleteBucketInventoryConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes an S3 Inventory configuration (identified by the inventory ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a>.</p> <p>Operations related to <code>DeleteBucketInventoryConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -211,8 +217,20 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketLifecycleRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETElifecycle.html",
-      "documentation":"<p>Deletes the lifecycle configuration from the specified bucket. Amazon S3 removes all the lifecycle configuration rules in the lifecycle subresource associated with the bucket. Your objects never expire, and Amazon S3 no longer automatically deletes any objects on the basis of rules contained in the deleted lifecycle configuration.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:PutLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> </dl> <dl> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For more information about the object expiration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions\">Elements to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul>",
+      "documentation":"<p>Deletes the lifecycle configuration from the specified bucket. Amazon S3 removes all the lifecycle configuration rules in the lifecycle subresource associated with the bucket. Your objects never expire, and Amazon S3 no longer automatically deletes any objects on the basis of rules contained in the deleted lifecycle configuration.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:PutLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> </dl> <dl> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For more information about the object expiration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions\">Elements to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
+    "DeleteBucketMetadataConfiguration":{
+      "name":"DeleteBucketMetadataConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/{Bucket}?metadataConfiguration",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteBucketMetadataConfigurationRequest"},
+      "documentation":"<p> Deletes an S3 Metadata configuration from a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>You can use the V2 <code>DeleteBucketMetadataConfiguration</code> API operation with V1 or V2 metadata configurations. However, if you try to use the V1 <code>DeleteBucketMetadataTableConfiguration</code> API operation with V2 configurations, you will receive an HTTP <code>405 Method Not Allowed</code> error.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:DeleteBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>The IAM policy action name is the same for the V1 and V2 API operations.</p> </note> </dd> </dl> <p>The following operations are related to <code>DeleteBucketMetadataConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataConfiguration.html\">GetBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html\">UpdateBucketMetadataInventoryTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html\">UpdateBucketMetadataJournalTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -225,7 +243,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketMetadataTableConfigurationRequest"},
-      "documentation":"<p> Deletes a metadata table configuration from a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:DeleteBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html\">CreateBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html\">GetBucketMetadataTableConfiguration</a> </p> </li> </ul>",
+      "documentation":"<important> <p> We recommend that you delete your S3 Metadata configurations by using the V2 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html\">DeleteBucketMetadataTableConfiguration</a> API operation. We no longer recommend using the V1 <code>DeleteBucketMetadataTableConfiguration</code> API operation. </p> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </important> <p> Deletes a V1 S3 Metadata configuration from a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>You can use the V2 <code>DeleteBucketMetadataConfiguration</code> API operation with V1 or V2 metadata table configurations. However, if you try to use the V1 <code>DeleteBucketMetadataTableConfiguration</code> API operation with V2 configurations, you will receive an HTTP <code>405 Method Not Allowed</code> error.</p> <p>Make sure that you update your processes to use the new V2 API operations (<code>CreateBucketMetadataConfiguration</code>, <code>GetBucketMetadataConfiguration</code>, and <code>DeleteBucketMetadataConfiguration</code>) instead of the V1 API operations. </p> </note> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:DeleteBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html\">CreateBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html\">GetBucketMetadataTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -238,7 +256,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketMetricsConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes a metrics configuration for the Amazon CloudWatch request metrics (specified by the metrics configuration ID) from the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To use this operation, you must have permissions to perform the <code>s3:PutMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>. </p> <p>The following operations are related to <code>DeleteBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes a metrics configuration for the Amazon CloudWatch request metrics (specified by the metrics configuration ID) from the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To use this operation, you must have permissions to perform the <code>s3:PutMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>. </p> <p>The following operations are related to <code>DeleteBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -251,7 +269,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketOwnershipControlsRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html\">Using Object Ownership</a>. </p> <p>The following operations are related to <code>DeleteBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>GetBucketOwnershipControls</a> </p> </li> <li> <p> <a>PutBucketOwnershipControls</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/about-object-ownership.html\">Using Object Ownership</a>. </p> <p>The following operations are related to <code>DeleteBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>GetBucketOwnershipControls</a> </p> </li> <li> <p> <a>PutBucketOwnershipControls</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -264,8 +282,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketPolicyRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEpolicy.html",
-      "documentation":"<p>Deletes the policy of a specified bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>DeleteBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:DeleteBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:DeleteBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketPolicy</code> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul>",
+      "documentation":"<p>Deletes the policy of a specified bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>DeleteBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:DeleteBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:DeleteBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteBucketPolicy</code> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -278,7 +295,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketReplicationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> Deletes the replication configuration from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutReplicationConfiguration</code> action. The bucket owner has these permissions by default and can grant it to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>. </p> <note> <p>It can take a while for the deletion of a replication configuration to fully propagate.</p> </note> <p> For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> Deletes the replication configuration from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutReplicationConfiguration</code> action. The bucket owner has these permissions by default and can grant it to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>. </p> <note> <p>It can take a while for the deletion of a replication configuration to fully propagate.</p> </note> <p> For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -291,8 +308,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketTaggingRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEtagging.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the tags from the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others. </p> <p>The following operations are related to <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Deletes the tags from the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others. </p> <p>The following operations are related to <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -305,8 +321,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketWebsiteRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This action removes the website configuration for a bucket. Amazon S3 returns a <code>200 OK</code> response upon successfully deleting a website configuration on the specified bucket. You will get a <code>200 OK</code> response if the website configuration you are trying to delete does not exist on the bucket. Amazon S3 returns a <code>404</code> response if the bucket specified in the request does not exist.</p> <p>This DELETE action requires the <code>S3:DeleteBucketWebsite</code> permission. By default, only the bucket owner can delete the website configuration attached to a bucket. However, bucket owners can grant other users permission to delete the website configuration by writing a bucket policy granting them the <code>S3:DeleteBucketWebsite</code> permission. </p> <p>For more information about hosting websites, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>. </p> <p>The following operations are related to <code>DeleteBucketWebsite</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html\">GetBucketWebsite</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html\">PutBucketWebsite</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This action removes the website configuration for a bucket. Amazon S3 returns a <code>200 OK</code> response upon successfully deleting a website configuration on the specified bucket. You will get a <code>200 OK</code> response if the website configuration you are trying to delete does not exist on the bucket. Amazon S3 returns a <code>404</code> response if the bucket specified in the request does not exist.</p> <p>This DELETE action requires the <code>S3:DeleteBucketWebsite</code> permission. By default, only the bucket owner can delete the website configuration attached to a bucket. However, bucket owners can grant other users permission to delete the website configuration by writing a bucket policy granting them the <code>S3:DeleteBucketWebsite</code> permission. </p> <p>For more information about hosting websites, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>. </p> <p>The following operations are related to <code>DeleteBucketWebsite</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketWebsite.html\">GetBucketWebsite</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html\">PutBucketWebsite</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -320,8 +335,7 @@
       },
       "input":{"shape":"DeleteObjectRequest"},
       "output":{"shape":"DeleteObjectOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectDELETE.html",
-      "documentation":"<p>Removes an object from a bucket. The behavior depends on the bucket's versioning state: </p> <ul> <li> <p>If bucket versioning is not enabled, the operation permanently deletes the object.</p> </li> <li> <p>If bucket versioning is enabled, the operation inserts a delete marker, which becomes the current version of the object. To permanently delete an object in a versioned bucket, you must include the object’s <code>versionId</code> in the request. For more information about versioning-enabled buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html\">Deleting object versions from a versioning-enabled bucket</a>.</p> </li> <li> <p>If bucket versioning is suspended, the operation removes the object that has a null <code>versionId</code>, if there is one, and inserts a delete marker that becomes the current version of the object. If there isn't an object with a null <code>versionId</code>, and all versions of the object have a <code>versionId</code>, Amazon S3 does not remove the object and only inserts a delete marker. To permanently delete an object that has a <code>versionId</code>, you must include the object’s <code>versionId</code> in the request. For more information about versioning-suspended buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectsfromVersioningSuspendedBuckets.html\">Deleting objects from versioning-suspended buckets</a>.</p> </li> </ul> <note> <ul> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>To remove a specific version, you must use the <code>versionId</code> query parameter. Using this query parameter permanently deletes the version. If the object deleted is a delete marker, Amazon S3 sets the response header <code>x-amz-delete-marker</code> to true. </p> <p>If the object you want to delete is in a bucket where the bucket versioning configuration is MFA Delete enabled, you must include the <code>x-amz-mfa</code> request header in the DELETE <code>versionId</code> request. Requests that include <code>x-amz-mfa</code> must use HTTPS. For more information about MFA Delete, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html\">Using MFA Delete</a> in the <i>Amazon S3 User Guide</i>. To see sample requests that use versioning, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete\">Sample Request</a>. </p> <note> <p> <b>Directory buckets</b> - MFA delete is not supported by directory buckets.</p> </note> <p>You can delete objects by explicitly calling DELETE Object or calling (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>) to enable Amazon S3 to remove them for you. If you want to block users or accounts from removing or deleting objects from your bucket, you must deny them the <code>s3:DeleteObject</code>, <code>s3:DeleteObjectVersion</code>, and <code>s3:PutLifeCycleConfiguration</code> actions. </p> <note> <p> <b>Directory buckets</b> - S3 Lifecycle is not supported by directory buckets.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>DeleteObjects</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:DeleteObject</code> </b> - To delete an object from a bucket, you must always have the <code>s3:DeleteObject</code> permission.</p> </li> <li> <p> <b> <code>s3:DeleteObjectVersion</code> </b> - To delete a specific version of an object from a versioning-enabled bucket, you must have the <code>s3:DeleteObjectVersion</code> permission.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following action is related to <code>DeleteObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> </ul>"
+      "documentation":"<p>Removes an object from a bucket. The behavior depends on the bucket's versioning state: </p> <ul> <li> <p>If bucket versioning is not enabled, the operation permanently deletes the object.</p> </li> <li> <p>If bucket versioning is enabled, the operation inserts a delete marker, which becomes the current version of the object. To permanently delete an object in a versioned bucket, you must include the object’s <code>versionId</code> in the request. For more information about versioning-enabled buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html\">Deleting object versions from a versioning-enabled bucket</a>.</p> </li> <li> <p>If bucket versioning is suspended, the operation removes the object that has a null <code>versionId</code>, if there is one, and inserts a delete marker that becomes the current version of the object. If there isn't an object with a null <code>versionId</code>, and all versions of the object have a <code>versionId</code>, Amazon S3 does not remove the object and only inserts a delete marker. To permanently delete an object that has a <code>versionId</code>, you must include the object’s <code>versionId</code> in the request. For more information about versioning-suspended buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectsfromVersioningSuspendedBuckets.html\">Deleting objects from versioning-suspended buckets</a>.</p> </li> </ul> <note> <ul> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>To remove a specific version, you must use the <code>versionId</code> query parameter. Using this query parameter permanently deletes the version. If the object deleted is a delete marker, Amazon S3 sets the response header <code>x-amz-delete-marker</code> to true. </p> <p>If the object you want to delete is in a bucket where the bucket versioning configuration is MFA Delete enabled, you must include the <code>x-amz-mfa</code> request header in the DELETE <code>versionId</code> request. Requests that include <code>x-amz-mfa</code> must use HTTPS. For more information about MFA Delete, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html\">Using MFA Delete</a> in the <i>Amazon S3 User Guide</i>. To see sample requests that use versioning, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete\">Sample Request</a>. </p> <note> <p> <b>Directory buckets</b> - MFA delete is not supported by directory buckets.</p> </note> <p>You can delete objects by explicitly calling DELETE Object or calling (<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>) to enable Amazon S3 to remove them for you. If you want to block users or accounts from removing or deleting objects from your bucket, you must deny them the <code>s3:DeleteObject</code>, <code>s3:DeleteObjectVersion</code>, and <code>s3:PutLifeCycleConfiguration</code> actions. </p> <note> <p> <b>Directory buckets</b> - S3 Lifecycle is not supported by directory buckets.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>DeleteObjects</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:DeleteObject</code> </b> - To delete an object from a bucket, you must always have the <code>s3:DeleteObject</code> permission.</p> </li> <li> <p> <b> <code>s3:DeleteObjectVersion</code> </b> - To delete a specific version of an object from a versioning-enabled bucket, you must have the <code>s3:DeleteObjectVersion</code> permission.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following action is related to <code>DeleteObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important> <note> <p>The <code>If-Match</code> header is supported for both general purpose and directory buckets. <code>IfMatchLastModifiedTime</code> and <code>IfMatchSize</code> is only supported for directory buckets. </p> </note>"
     },
     "DeleteObjectTagging":{
       "name":"DeleteObjectTagging",
@@ -332,7 +346,7 @@
       },
       "input":{"shape":"DeleteObjectTaggingRequest"},
       "output":{"shape":"DeleteObjectTaggingOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes the entire tag set from the specified object. For more information about managing object tags, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html\"> Object Tagging</a>.</p> <p>To use this operation, you must have permission to perform the <code>s3:DeleteObjectTagging</code> action.</p> <p>To delete tags of a specific object version, add the <code>versionId</code> query parameter in the request. You will need permission for the <code>s3:DeleteObjectVersionTagging</code> action.</p> <p>The following operations are related to <code>DeleteObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html\">PutObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes the entire tag set from the specified object. For more information about managing object tags, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html\"> Object Tagging</a>.</p> <p>To use this operation, you must have permission to perform the <code>s3:DeleteObjectTagging</code> action.</p> <p>To delete tags of a specific object version, add the <code>versionId</code> query parameter in the request. You will need permission for the <code>s3:DeleteObjectVersionTagging</code> action.</p> <p>The following operations are related to <code>DeleteObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html\">PutObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "DeleteObjects":{
       "name":"DeleteObjects",
@@ -342,9 +356,7 @@
       },
       "input":{"shape":"DeleteObjectsRequest"},
       "output":{"shape":"DeleteObjectsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/multiobjectdeleteapi.html",
-      "documentation":"<p>This operation enables you to delete multiple objects from a bucket using a single HTTP request. If you know the object keys that you want to delete, then this operation provides a suitable alternative to sending individual delete requests, reducing per-request overhead.</p> <p>The request can contain a list of up to 1000 keys that you want to delete. In the XML, you provide the object key names, and optionally, version IDs if you want to delete a specific version of the object from a versioning-enabled bucket. For each key, Amazon S3 performs a delete operation and returns the result of that delete, success or failure, in the response. Note that if the object specified in the request is not found, Amazon S3 returns the result as deleted.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>The operation supports two modes for the response: verbose and quiet. By default, the operation uses verbose mode in which the response includes the result of deletion of each key in your request. In quiet mode the response includes only keys where the delete operation encountered an error. For a successful deletion in a quiet mode, the operation does not return any information about the delete in the response body.</p> <p>When performing this action on an MFA Delete enabled bucket, that attempts to delete any versioned objects, you must include an MFA token. If you do not provide one, the entire request will fail, even if there are non-versioned objects you are trying to delete. If you provide an invalid token, whether there are versioned keys in the request or not, the entire Multi-Object Delete request will fail. For information about MFA Delete, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete\">MFA Delete</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - MFA delete is not supported by directory buckets.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>DeleteObjects</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:DeleteObject</code> </b> - To delete an object from a bucket, you must always specify the <code>s3:DeleteObject</code> permission.</p> </li> <li> <p> <b> <code>s3:DeleteObjectVersion</code> </b> - To delete a specific version of an object from a versioning-enabled bucket, you must specify the <code>s3:DeleteObjectVersion</code> permission.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Content-MD5 request header</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - The Content-MD5 request header is required for all Multi-Object Delete requests. Amazon S3 uses the header value to ensure that your request body has not been altered in transit.</p> </li> <li> <p> <b>Directory bucket</b> - The Content-MD5 request header or a additional checksum request header (including <code>x-amz-checksum-crc32</code>, <code>x-amz-checksum-crc32c</code>, <code>x-amz-checksum-sha1</code>, or <code>x-amz-checksum-sha256</code>) is required for all Multi-Object Delete requests.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteObjects</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> </ul>",
-      "alias":"DeleteMultipleObjects",
+      "documentation":"<p>This operation enables you to delete multiple objects from a bucket using a single HTTP request. If you know the object keys that you want to delete, then this operation provides a suitable alternative to sending individual delete requests, reducing per-request overhead.</p> <p>The request can contain a list of up to 1,000 keys that you want to delete. In the XML, you provide the object key names, and optionally, version IDs if you want to delete a specific version of the object from a versioning-enabled bucket. For each key, Amazon S3 performs a delete operation and returns the result of that delete, success or failure, in the response. If the object specified in the request isn't found, Amazon S3 confirms the deletion by returning the result as deleted.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>The operation supports two modes for the response: verbose and quiet. By default, the operation uses verbose mode in which the response includes the result of deletion of each key in your request. In quiet mode the response includes only keys where the delete operation encountered an error. For a successful deletion in a quiet mode, the operation does not return any information about the delete in the response body.</p> <p>When performing this action on an MFA Delete enabled bucket, that attempts to delete any versioned objects, you must include an MFA token. If you do not provide one, the entire request will fail, even if there are non-versioned objects you are trying to delete. If you provide an invalid token, whether there are versioned keys in the request or not, the entire Multi-Object Delete request will fail. For information about MFA Delete, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete\">MFA Delete</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - MFA delete is not supported by directory buckets.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>DeleteObjects</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:DeleteObject</code> </b> - To delete an object from a bucket, you must always specify the <code>s3:DeleteObject</code> permission.</p> </li> <li> <p> <b> <code>s3:DeleteObjectVersion</code> </b> - To delete a specific version of an object from a versioning-enabled bucket, you must specify the <code>s3:DeleteObjectVersion</code> permission.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Content-MD5 request header</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - The Content-MD5 request header is required for all Multi-Object Delete requests. Amazon S3 uses the header value to ensure that your request body has not been altered in transit.</p> </li> <li> <p> <b>Directory bucket</b> - The Content-MD5 request header or a additional checksum request header (including <code>x-amz-checksum-crc32</code>, <code>x-amz-checksum-crc32c</code>, <code>x-amz-checksum-sha1</code>, or <code>x-amz-checksum-sha256</code>) is required for all Multi-Object Delete requests.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>DeleteObjects</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -358,7 +370,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeletePublicAccessBlockRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following operations are related to <code>DeletePublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html\">GetBucketPolicyStatus</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>The following operations are related to <code>DeletePublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html\">GetBucketPolicyStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -371,7 +383,7 @@
       },
       "input":{"shape":"GetBucketAccelerateConfigurationRequest"},
       "output":{"shape":"GetBucketAccelerateConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the GET action uses the <code>accelerate</code> subresource to return the Transfer Acceleration state of a bucket, which is either <code>Enabled</code> or <code>Suspended</code>. Amazon S3 Transfer Acceleration is a bucket-level feature that enables you to perform faster data transfers to and from Amazon S3.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetAccelerateConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> <p>You set the Transfer Acceleration state of an existing bucket to <code>Enabled</code> or <code>Suspended</code> by using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html\">PutBucketAccelerateConfiguration</a> operation. </p> <p>A GET <code>accelerate</code> request does not return a state value for a bucket that has no transfer acceleration state. A bucket has no Transfer Acceleration state if a state has never been set on the bucket. </p> <p>For more information about transfer acceleration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a> in the Amazon S3 User Guide.</p> <p>The following operations are related to <code>GetBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html\">PutBucketAccelerateConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the GET action uses the <code>accelerate</code> subresource to return the Transfer Acceleration state of a bucket, which is either <code>Enabled</code> or <code>Suspended</code>. Amazon S3 Transfer Acceleration is a bucket-level feature that enables you to perform faster data transfers to and from Amazon S3.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetAccelerateConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> <p>You set the Transfer Acceleration state of an existing bucket to <code>Enabled</code> or <code>Suspended</code> by using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html\">PutBucketAccelerateConfiguration</a> operation. </p> <p>A GET <code>accelerate</code> request does not return a state value for a bucket that has no transfer acceleration state. A bucket has no Transfer Acceleration state if a state has never been set on the bucket. </p> <p>For more information about transfer acceleration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a> in the Amazon S3 User Guide.</p> <p>The following operations are related to <code>GetBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAccelerateConfiguration.html\">PutBucketAccelerateConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -384,8 +396,7 @@
       },
       "input":{"shape":"GetBucketAclRequest"},
       "output":{"shape":"GetBucketAclOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETacl.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the <code>GET</code> action uses the <code>acl</code> subresource to return the access control list (ACL) of a bucket. To use <code>GET</code> to return the ACL of the bucket, you must have the <code>READ_ACP</code> access to the bucket. If <code>READ_ACP</code> permission is granted to the anonymous user, you can return the ACL of the bucket without using an authorization header.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, requests to read ACLs are still supported and return the <code>bucket-owner-full-control</code> ACL with the owner being the account that created the bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\"> Controlling object ownership and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>The following operations are related to <code>GetBucketAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the <code>GET</code> action uses the <code>acl</code> subresource to return the access control list (ACL) of a bucket. To use <code>GET</code> to return the ACL of the bucket, you must have the <code>READ_ACP</code> access to the bucket. If <code>READ_ACP</code> permission is granted to the anonymous user, you can return the ACL of the bucket without using an authorization header.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, requests to read ACLs are still supported and return the <code>bucket-owner-full-control</code> ACL with the owner being the account that created the bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\"> Controlling object ownership and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important> <p>The following operations are related to <code>GetBucketAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a> </p> </li> </ul>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -398,7 +409,7 @@
       },
       "input":{"shape":"GetBucketAnalyticsConfigurationRequest"},
       "output":{"shape":"GetBucketAnalyticsConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the GET action returns an analytics configuration (identified by the analytics configuration ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\"> Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>. </p> <p>For information about Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>GetBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the GET action returns an analytics configuration (identified by the analytics configuration ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\"> Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>. </p> <p>For information about Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>GetBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -411,8 +422,7 @@
       },
       "input":{"shape":"GetBucketCorsRequest"},
       "output":{"shape":"GetBucketCorsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETcors.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the Cross-Origin Resource Sharing (CORS) configuration information set for the bucket.</p> <p> To use this operation, you must have permission to perform the <code>s3:GetBucketCORS</code> action. By default, the bucket owner has this permission and can grant it to others.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <p> For more information about CORS, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\"> Enabling Cross-Origin Resource Sharing</a>.</p> <p>The following operations are related to <code>GetBucketCors</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html\">PutBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html\">DeleteBucketCors</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the Cross-Origin Resource Sharing (CORS) configuration information set for the bucket.</p> <p> To use this operation, you must have permission to perform the <code>s3:GetBucketCORS</code> action. By default, the bucket owner has this permission and can grant it to others.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <p> For more information about CORS, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\"> Enabling Cross-Origin Resource Sharing</a>.</p> <p>The following operations are related to <code>GetBucketCors</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html\">PutBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html\">DeleteBucketCors</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -425,7 +435,7 @@
       },
       "input":{"shape":"GetBucketEncryptionRequest"},
       "output":{"shape":"GetBucketEncryptionOutput"},
-      "documentation":"<p>Returns the default encryption configuration for an Amazon S3 bucket. By default, all buckets have a default encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). </p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. For information about the default encryption configuration in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html\">Setting default server-side encryption behavior for directory buckets</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:GetEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:GetEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>GetBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html\">PutBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html\">DeleteBucketEncryption</a> </p> </li> </ul>",
+      "documentation":"<p>Returns the default encryption configuration for an Amazon S3 bucket. By default, all buckets have a default encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). </p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. For information about the default encryption configuration in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-bucket-encryption.html\">Setting default server-side encryption behavior for directory buckets</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:GetEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:GetEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>GetBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html\">PutBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html\">DeleteBucketEncryption</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -438,7 +448,7 @@
       },
       "input":{"shape":"GetBucketIntelligentTieringConfigurationRequest"},
       "output":{"shape":"GetBucketIntelligentTieringConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>GetBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>GetBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -451,7 +461,7 @@
       },
       "input":{"shape":"GetBucketInventoryConfigurationRequest"},
       "output":{"shape":"GetBucketInventoryConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns an inventory configuration (identified by the inventory configuration ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a>.</p> <p>The following operations are related to <code>GetBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns an S3 Inventory configuration (identified by the inventory configuration ID) from the bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a>.</p> <p>The following operations are related to <code>GetBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -464,8 +474,7 @@
       },
       "input":{"shape":"GetBucketLifecycleRequest"},
       "output":{"shape":"GetBucketLifecycleOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlifecycle.html",
-      "documentation":"<important> <p>For an updated version of this API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a>. If you configured a bucket lifecycle using the <code>filter</code> element, you should see the updated version of this topic. This topic is provided for backward compatibility.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the lifecycle configuration information set on the bucket. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a>.</p> <p> To use this operation, you must have permission to perform the <code>s3:GetLifecycleConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>GetBucketLifecycle</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketLifecycle</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul>",
+      "documentation":"<important> <p>For an updated version of this API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a>. If you configured a bucket lifecycle using the <code>filter</code> element, you should see the updated version of this topic. This topic is provided for backward compatibility.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the lifecycle configuration information set on the bucket. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a>.</p> <p> To use this operation, you must have permission to perform the <code>s3:GetLifecycleConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>GetBucketLifecycle</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketLifecycle</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "deprecated":true,
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
@@ -479,7 +488,7 @@
       },
       "input":{"shape":"GetBucketLifecycleConfigurationRequest"},
       "output":{"shape":"GetBucketLifecycleConfigurationOutput"},
-      "documentation":"<p>Returns the lifecycle configuration information set on the bucket. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a>.</p> <p>Bucket lifecycle configuration now supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API, which is compatible with the new functionality. The previous version of the API supported filtering based only on an object key name prefix, which is supported for general purpose buckets for backward compatibility. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a>.</p> <note> <p>Lifecyle configurations for directory buckets only support expiring objects and cancelling multipart uploads. Expiring of versioned objects, transitions and tag filters are not supported.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:GetLifecycleConfiguration</code> permission.</p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:GetLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p> <code>GetBucketLifecycleConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul>",
+      "documentation":"<p>Returns the lifecycle configuration information set on the bucket. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a>.</p> <p>Bucket lifecycle configuration now supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API, which is compatible with the new functionality. The previous version of the API supported filtering based only on an object key name prefix, which is supported for general purpose buckets for backward compatibility. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a>.</p> <note> <p>Lifecyle configurations for directory buckets only support expiring objects and cancelling multipart uploads. Expiring of versioned objects, transitions and tag filters are not supported.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:GetLifecycleConfiguration</code> permission.</p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:GetLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p> <code>GetBucketLifecycleConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -492,8 +501,7 @@
       },
       "input":{"shape":"GetBucketLocationRequest"},
       "output":{"shape":"GetBucketLocationOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlocation.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the Region the bucket resides in. You set the bucket's Region using the <code>LocationConstraint</code> request parameter in a <code>CreateBucket</code> request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a>.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>We recommend that you use <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html\">HeadBucket</a> to return the Region that a bucket resides in. For backward compatibility, Amazon S3 continues to support GetBucketLocation.</p> </note> <p>The following operations are related to <code>GetBucketLocation</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul>",
+      "documentation":"<important> <p>Using the <code>GetBucketLocation</code> operation is no longer a best practice. To return the Region that a bucket resides in, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html\">HeadBucket</a> operation instead. For backward compatibility, Amazon S3 continues to support the <code>GetBucketLocation</code> operation.</p> </important> <p>Returns the Region the bucket resides in. You set the bucket's Region using the <code>LocationConstraint</code> request parameter in a <code>CreateBucket</code> request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a>.</p> <note> <p>In a bucket's home Region, calls to the <code>GetBucketLocation</code> operation are governed by the bucket's policy. In other Regions, the bucket policy doesn't apply, which means that cross-account access won't be authorized. However, calls to the <code>HeadBucket</code> operation always return the bucket’s location through an HTTP response header, whether access to the bucket is authorized or not. Therefore, we recommend using the <code>HeadBucket</code> operation for bucket Region discovery and to avoid using the <code>GetBucketLocation</code> operation.</p> </note> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>The following operations are related to <code>GetBucketLocation</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -506,8 +514,20 @@
       },
       "input":{"shape":"GetBucketLoggingRequest"},
       "output":{"shape":"GetBucketLoggingOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlogging.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the logging status of a bucket and the permissions users have to view and modify that status.</p> <p>The following operations are related to <code>GetBucketLogging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html\">PutBucketLogging</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the logging status of a bucket and the permissions users have to view and modify that status.</p> <p>The following operations are related to <code>GetBucketLogging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLogging.html\">PutBucketLogging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
+    "GetBucketMetadataConfiguration":{
+      "name":"GetBucketMetadataConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/{Bucket}?metadataConfiguration"
+      },
+      "input":{"shape":"GetBucketMetadataConfigurationRequest"},
+      "output":{"shape":"GetBucketMetadataConfigurationOutput"},
+      "documentation":"<p>Retrieves the S3 Metadata configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>You can use the V2 <code>GetBucketMetadataConfiguration</code> API operation with V1 or V2 metadata configurations. However, if you try to use the V1 <code>GetBucketMetadataTableConfiguration</code> API operation with V2 configurations, you will receive an HTTP <code>405 Method Not Allowed</code> error.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:GetBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>The IAM policy action name is the same for the V1 and V2 API operations.</p> </note> </dd> </dl> <p>The following operations are related to <code>GetBucketMetadataConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataConfiguration.html\">DeleteBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html\">UpdateBucketMetadataInventoryTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html\">UpdateBucketMetadataJournalTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -520,7 +540,7 @@
       },
       "input":{"shape":"GetBucketMetadataTableConfigurationRequest"},
       "output":{"shape":"GetBucketMetadataTableConfigurationOutput"},
-      "documentation":"<p> Retrieves the metadata table configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:GetBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> </dl> <p>The following operations are related to <code>GetBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html\">CreateBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html\">DeleteBucketMetadataTableConfiguration</a> </p> </li> </ul>",
+      "documentation":"<important> <p> We recommend that you retrieve your S3 Metadata configurations by using the V2 <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataTableConfiguration.html\">GetBucketMetadataTableConfiguration</a> API operation. We no longer recommend using the V1 <code>GetBucketMetadataTableConfiguration</code> API operation. </p> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </important> <p> Retrieves the V1 S3 Metadata configuration for a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>You can use the V2 <code>GetBucketMetadataConfiguration</code> API operation with V1 or V2 metadata table configurations. However, if you try to use the V1 <code>GetBucketMetadataTableConfiguration</code> API operation with V2 configurations, you will receive an HTTP <code>405 Method Not Allowed</code> error.</p> <p>Make sure that you update your processes to use the new V2 API operations (<code>CreateBucketMetadataConfiguration</code>, <code>GetBucketMetadataConfiguration</code>, and <code>DeleteBucketMetadataConfiguration</code>) instead of the V1 API operations. </p> </note> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:GetBucketMetadataTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> </dl> <p>The following operations are related to <code>GetBucketMetadataTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataTableConfiguration.html\">CreateBucketMetadataTableConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataTableConfiguration.html\">DeleteBucketMetadataTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -533,7 +553,7 @@
       },
       "input":{"shape":"GetBucketMetricsConfigurationRequest"},
       "output":{"shape":"GetBucketMetricsConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets a metrics configuration (specified by the metrics configuration ID) from the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To use this operation, you must have permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>GetBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets a metrics configuration (specified by the metrics configuration ID) from the bucket. Note that this doesn't include the daily storage metrics.</p> <p> To use this operation, you must have permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>GetBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -546,7 +566,6 @@
       },
       "input":{"shape":"GetBucketNotificationConfigurationRequest"},
       "output":{"shape":"NotificationConfigurationDeprecated"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETnotification.html",
       "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> No longer used, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html\">GetBucketNotificationConfiguration</a>.</p>",
       "deprecated":true,
       "staticContextParams":{
@@ -561,7 +580,7 @@
       },
       "input":{"shape":"GetBucketNotificationConfigurationRequest"},
       "output":{"shape":"NotificationConfiguration"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the notification configuration of a bucket.</p> <p>If notifications are not enabled on the bucket, the action returns an empty <code>NotificationConfiguration</code> element.</p> <p>By default, you must be the bucket owner to read the notification configuration of a bucket. However, the bucket owner can use a bucket policy to grant permission to other users to read this configuration with the <code>s3:GetBucketNotification</code> permission.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <p>For more information about setting and reading the notification configuration on a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Setting Up Notification of Bucket Events</a>. For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies</a>.</p> <p>The following action is related to <code>GetBucketNotification</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html\">PutBucketNotification</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the notification configuration of a bucket.</p> <p>If notifications are not enabled on the bucket, the action returns an empty <code>NotificationConfiguration</code> element.</p> <p>By default, you must be the bucket owner to read the notification configuration of a bucket. However, the bucket owner can use a bucket policy to grant permission to other users to read this configuration with the <code>s3:GetBucketNotification</code> permission.</p> <p>When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p>When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <p>For more information about setting and reading the notification configuration on a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Setting Up Notification of Bucket Events</a>. For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies</a>.</p> <p>The following action is related to <code>GetBucketNotification</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotification.html\">PutBucketNotification</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -574,7 +593,7 @@
       },
       "input":{"shape":"GetBucketOwnershipControlsRequest"},
       "output":{"shape":"GetBucketOwnershipControlsOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:GetBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html\">Specifying permissions in a policy</a>. </p> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Using Object Ownership</a>. </p> <p>The following operations are related to <code>GetBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>PutBucketOwnershipControls</a> </p> </li> <li> <p> <a>DeleteBucketOwnershipControls</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:GetBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html\">Specifying permissions in a policy</a>. </p> <note> <p>A bucket doesn't have <code>OwnershipControls</code> settings in the following cases:</p> <ul> <li> <p>The bucket was created before the <code>BucketOwnerEnforced</code> ownership setting was introduced and you've never explicitly applied this value</p> </li> <li> <p>You've manually deleted the bucket ownership control value using the <code>DeleteBucketOwnershipControls</code> API operation.</p> </li> </ul> <p>By default, Amazon S3 sets <code>OwnershipControls</code> for all newly created buckets.</p> </note> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Using Object Ownership</a>. </p> <p>The following operations are related to <code>GetBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>PutBucketOwnershipControls</a> </p> </li> <li> <p> <a>DeleteBucketOwnershipControls</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -587,8 +606,7 @@
       },
       "input":{"shape":"GetBucketPolicyRequest"},
       "output":{"shape":"GetBucketPolicyOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETpolicy.html",
-      "documentation":"<p>Returns the policy of a specified bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>GetBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>GetBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:GetBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:GetBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Example bucket policies</dt> <dd> <p> <b>General purpose buckets example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html\">Bucket policy examples</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory bucket example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following action is related to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul>",
+      "documentation":"<p>Returns the policy of a specified bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>GetBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>GetBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:GetBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:GetBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Example bucket policies</dt> <dd> <p> <b>General purpose buckets example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html\">Bucket policy examples</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory bucket example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following action is related to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -601,7 +619,7 @@
       },
       "input":{"shape":"GetBucketPolicyStatusRequest"},
       "output":{"shape":"GetBucketPolicyStatusOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves the policy status for an Amazon S3 bucket, indicating whether the bucket is public. In order to use this operation, you must have the <code>s3:GetBucketPolicyStatus</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <p> For more information about when Amazon S3 considers a bucket public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>. </p> <p>The following operations are related to <code>GetBucketPolicyStatus</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves the policy status for an Amazon S3 bucket, indicating whether the bucket is public. In order to use this operation, you must have the <code>s3:GetBucketPolicyStatus</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <p> For more information about when Amazon S3 considers a bucket public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>. </p> <p>The following operations are related to <code>GetBucketPolicyStatus</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -614,7 +632,7 @@
       },
       "input":{"shape":"GetBucketReplicationRequest"},
       "output":{"shape":"GetBucketReplicationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the replication configuration of a bucket.</p> <note> <p> It can take a while to propagate the put or delete a replication configuration to all Amazon S3 systems. Therefore, a get request soon after put or delete can return a wrong result. </p> </note> <p> For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This action requires permissions for the <code>s3:GetReplicationConfiguration</code> action. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>.</p> <p>If you include the <code>Filter</code> element in a replication configuration, you must also include the <code>DeleteMarkerReplication</code> and <code>Priority</code> elements. The response also returns those elements.</p> <p>For information about <code>GetBucketReplication</code> errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList\">List of replication-related error codes</a> </p> <p>The following operations are related to <code>GetBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the replication configuration of a bucket.</p> <note> <p> It can take a while to propagate the put or delete a replication configuration to all Amazon S3 systems. Therefore, a get request soon after put or delete can return a wrong result. </p> </note> <p> For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This action requires permissions for the <code>s3:GetReplicationConfiguration</code> action. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>.</p> <p>If you include the <code>Filter</code> element in a replication configuration, you must also include the <code>DeleteMarkerReplication</code> and <code>Priority</code> elements. The response also returns those elements.</p> <p>For information about <code>GetBucketReplication</code> errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList\">List of replication-related error codes</a> </p> <p>The following operations are related to <code>GetBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -627,8 +645,7 @@
       },
       "input":{"shape":"GetBucketRequestPaymentRequest"},
       "output":{"shape":"GetBucketRequestPaymentOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentGET.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the request payment configuration of a bucket. To use this version of the operation, you must be the bucket owner. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html\">Requester Pays Buckets</a>.</p> <p>The following operations are related to <code>GetBucketRequestPayment</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the request payment configuration of a bucket. To use this version of the operation, you must be the bucket owner. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html\">Requester Pays Buckets</a>.</p> <p>The following operations are related to <code>GetBucketRequestPayment</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -641,8 +658,7 @@
       },
       "input":{"shape":"GetBucketTaggingRequest"},
       "output":{"shape":"GetBucketTaggingOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETtagging.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the tag set associated with the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others.</p> <p> <code>GetBucketTagging</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchTagSet</code> </p> <ul> <li> <p>Description: There is no tag set associated with the bucket.</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the tag set associated with the bucket.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others.</p> <p> <code>GetBucketTagging</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchTagSet</code> </p> <ul> <li> <p>Description: There is no tag set associated with the bucket.</p> </li> </ul> </li> </ul> <p>The following operations are related to <code>GetBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -655,8 +671,7 @@
       },
       "input":{"shape":"GetBucketVersioningRequest"},
       "output":{"shape":"GetBucketVersioningOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETversioningStatus.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the versioning state of a bucket.</p> <p>To retrieve the versioning state of a bucket, you must be the bucket owner.</p> <p>This implementation also returns the MFA Delete status of the versioning state. If the MFA Delete status is <code>enabled</code>, the bucket owner must use an authentication device to change the versioning state of the bucket.</p> <p>The following operations are related to <code>GetBucketVersioning</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the versioning state of a bucket.</p> <p>To retrieve the versioning state of a bucket, you must be the bucket owner.</p> <p>This implementation also returns the MFA Delete status of the versioning state. If the MFA Delete status is <code>enabled</code>, the bucket owner must use an authentication device to change the versioning state of the bucket.</p> <p>The following operations are related to <code>GetBucketVersioning</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -669,8 +684,7 @@
       },
       "input":{"shape":"GetBucketWebsiteRequest"},
       "output":{"shape":"GetBucketWebsiteOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETwebsite.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the website configuration for a bucket. To host website on Amazon S3, you can configure a bucket as website by adding a website configuration. For more information about hosting websites, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>. </p> <p>This GET action requires the <code>S3:GetBucketWebsite</code> permission. By default, only the bucket owner can read the bucket website configuration. However, bucket owners can allow other users to read the website configuration by writing a bucket policy granting them the <code>S3:GetBucketWebsite</code> permission.</p> <p>The following operations are related to <code>GetBucketWebsite</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html\">DeleteBucketWebsite</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html\">PutBucketWebsite</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the website configuration for a bucket. To host website on Amazon S3, you can configure a bucket as website by adding a website configuration. For more information about hosting websites, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>. </p> <p>This GET action requires the <code>S3:GetBucketWebsite</code> permission. By default, only the bucket owner can read the bucket website configuration. However, bucket owners can allow other users to read the website configuration by writing a bucket policy granting them the <code>S3:GetBucketWebsite</code> permission.</p> <p>The following operations are related to <code>GetBucketWebsite</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketWebsite.html\">DeleteBucketWebsite</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html\">PutBucketWebsite</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -687,8 +701,7 @@
         {"shape":"NoSuchKey"},
         {"shape":"InvalidObjectState"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html",
-      "documentation":"<p>Retrieves an object from Amazon S3.</p> <p>In the <code>GetObject</code> request, specify the full key name for the object.</p> <p> <b>General purpose buckets</b> - Both the virtual-hosted-style requests and the path-style requests are supported. For a virtual hosted-style request example, if you have the object <code>photos/2006/February/sample.jpg</code>, specify the object key name as <code>/photos/2006/February/sample.jpg</code>. For a path-style request example, if you have the object <code>photos/2006/February/sample.jpg</code> in the bucket named <code>examplebucket</code>, specify the object key name as <code>/examplebucket/photos/2006/February/sample.jpg</code>. For more information about request types, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket\">HTTP Host Header Bucket Specification</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets</b> - Only virtual-hosted-style requests are supported. For a virtual hosted-style request example, if you have the object <code>photos/2006/February/sample.jpg</code> in the bucket named <code>examplebucket--use1-az5--x-s3</code>, specify the object key name as <code>/photos/2006/February/sample.jpg</code>. Also, when you make requests to this API operation, your requests are sent to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the required permissions in a policy. To use <code>GetObject</code>, you must have the <code>READ</code> access to the object (or version). If you grant <code>READ</code> access to the anonymous user, the <code>GetObject</code> operation returns the object without using an authorization header. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying permissions in a policy</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you include a <code>versionId</code> in your request header, you must have the <code>s3:GetObjectVersion</code> permission to access a specific version of an object. The <code>s3:GetObject</code> permission is not required in this scenario.</p> <p>If you request the current version of an object without a specific <code>versionId</code> in the request header, only the <code>s3:GetObject</code> permission is required. The <code>s3:GetObjectVersion</code> permission is not required in this scenario. </p> <p>If the object that you request doesn’t exist, the error that Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Access Denied</code> error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted using SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Storage classes</dt> <dd> <p>If the object you are retrieving is stored in the S3 Glacier Flexible Retrieval storage class, the S3 Glacier Deep Archive storage class, the S3 Intelligent-Tiering Archive Access tier, or the S3 Intelligent-Tiering Deep Archive Access tier, before you can retrieve the object you must first restore a copy using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a>. Otherwise, this operation returns an <code>InvalidObjectState</code> error. For information about restoring archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html\">Restoring Archived Objects</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets </b> - For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects. Unsupported storage class values won't write a destination object and will respond with the HTTP status code <code>400 Bad Request</code>.</p> </dd> <dt>Encryption</dt> <dd> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for the <code>GetObject</code> requests, if your object uses server-side encryption with Amazon S3 managed encryption keys (SSE-S3), server-side encryption with Key Management Service (KMS) keys (SSE-KMS), or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). If you include the header in your <code>GetObject</code> requests for the object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error.</p> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Overriding response header values through the request</dt> <dd> <p>There are times when you want to override certain response header values of a <code>GetObject</code> response. For example, you might override the <code>Content-Disposition</code> response header value through your <code>GetObject</code> request.</p> <p>You can override values for a set of response headers. These modified response header values are included only in a successful response, that is, when the HTTP status code <code>200 OK</code> is returned. The headers you can override using the following query parameters in the request are a subset of the headers that Amazon S3 accepts when you create an object. </p> <p>The response headers that you can override for the <code>GetObject</code> response are <code>Cache-Control</code>, <code>Content-Disposition</code>, <code>Content-Encoding</code>, <code>Content-Language</code>, <code>Content-Type</code>, and <code>Expires</code>.</p> <p>To override values for a set of response headers in the <code>GetObject</code> response, you can use the following query parameters in the request.</p> <ul> <li> <p> <code>response-cache-control</code> </p> </li> <li> <p> <code>response-content-disposition</code> </p> </li> <li> <p> <code>response-content-encoding</code> </p> </li> <li> <p> <code>response-content-language</code> </p> </li> <li> <p> <code>response-content-type</code> </p> </li> <li> <p> <code>response-expires</code> </p> </li> </ul> <note> <p>When you use these parameters, you must sign the request by using either an Authorization header or a presigned URL. These parameters cannot be used with an unsigned (anonymous) request.</p> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>GetObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> </ul>",
+      "documentation":"<p>Retrieves an object from Amazon S3.</p> <p>In the <code>GetObject</code> request, specify the full key name for the object.</p> <p> <b>General purpose buckets</b> - Both the virtual-hosted-style requests and the path-style requests are supported. For a virtual hosted-style request example, if you have the object <code>photos/2006/February/sample.jpg</code>, specify the object key name as <code>/photos/2006/February/sample.jpg</code>. For a path-style request example, if you have the object <code>photos/2006/February/sample.jpg</code> in the bucket named <code>examplebucket</code>, specify the object key name as <code>/examplebucket/photos/2006/February/sample.jpg</code>. For more information about request types, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket\">HTTP Host Header Bucket Specification</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets</b> - Only virtual-hosted-style requests are supported. For a virtual hosted-style request example, if you have the object <code>photos/2006/February/sample.jpg</code> in the bucket named <code>amzn-s3-demo-bucket--usw2-az1--x-s3</code>, specify the object key name as <code>/photos/2006/February/sample.jpg</code>. Also, when you make requests to this API operation, your requests are sent to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the required permissions in a policy. To use <code>GetObject</code>, you must have the <code>READ</code> access to the object (or version). If you grant <code>READ</code> access to the anonymous user, the <code>GetObject</code> operation returns the object without using an authorization header. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying permissions in a policy</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you include a <code>versionId</code> in your request header, you must have the <code>s3:GetObjectVersion</code> permission to access a specific version of an object. The <code>s3:GetObject</code> permission is not required in this scenario.</p> <p>If you request the current version of an object without a specific <code>versionId</code> in the request header, only the <code>s3:GetObject</code> permission is required. The <code>s3:GetObjectVersion</code> permission is not required in this scenario. </p> <p>If the object that you request doesn’t exist, the error that Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Access Denied</code> error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted using SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Storage classes</dt> <dd> <p>If the object you are retrieving is stored in the S3 Glacier Flexible Retrieval storage class, the S3 Glacier Deep Archive storage class, the S3 Intelligent-Tiering Archive Access tier, or the S3 Intelligent-Tiering Deep Archive Access tier, before you can retrieve the object you must first restore a copy using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a>. Otherwise, this operation returns an <code>InvalidObjectState</code> error. For information about restoring archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html\">Restoring Archived Objects</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets </b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones. Unsupported storage class values won't write a destination object and will respond with the HTTP status code <code>400 Bad Request</code>.</p> </dd> <dt>Encryption</dt> <dd> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for the <code>GetObject</code> requests, if your object uses server-side encryption with Amazon S3 managed encryption keys (SSE-S3), server-side encryption with Key Management Service (KMS) keys (SSE-KMS), or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). If you include the header in your <code>GetObject</code> requests for the object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error.</p> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Overriding response header values through the request</dt> <dd> <p>There are times when you want to override certain response header values of a <code>GetObject</code> response. For example, you might override the <code>Content-Disposition</code> response header value through your <code>GetObject</code> request.</p> <p>You can override values for a set of response headers. These modified response header values are included only in a successful response, that is, when the HTTP status code <code>200 OK</code> is returned. The headers you can override using the following query parameters in the request are a subset of the headers that Amazon S3 accepts when you create an object. </p> <p>The response headers that you can override for the <code>GetObject</code> response are <code>Cache-Control</code>, <code>Content-Disposition</code>, <code>Content-Encoding</code>, <code>Content-Language</code>, <code>Content-Type</code>, and <code>Expires</code>.</p> <p>To override values for a set of response headers in the <code>GetObject</code> response, you can use the following query parameters in the request.</p> <ul> <li> <p> <code>response-cache-control</code> </p> </li> <li> <p> <code>response-content-disposition</code> </p> </li> <li> <p> <code>response-content-encoding</code> </p> </li> <li> <p> <code>response-content-language</code> </p> </li> <li> <p> <code>response-content-type</code> </p> </li> <li> <p> <code>response-expires</code> </p> </li> </ul> <note> <p>When you use these parameters, you must sign the request by using either an Authorization header or a presigned URL. These parameters cannot be used with an unsigned (anonymous) request.</p> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>GetObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestValidationModeMember":"ChecksumMode",
         "responseAlgorithms":[
@@ -711,8 +724,7 @@
       "errors":[
         {"shape":"NoSuchKey"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGETacl.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the access control list (ACL) of an object. To use this operation, you must have <code>s3:GetObjectAcl</code> permissions or <code>READ_ACP</code> access to the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#acl-access-policy-permission-mapping\">Mapping of ACL permissions and access policy permissions</a> in the <i>Amazon S3 User Guide</i> </p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>By default, GET returns ACL information about the current version of an object. To return ACL information about a different version, use the versionId subresource.</p> <note> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, requests to read ACLs are still supported and return the <code>bucket-owner-full-control</code> ACL with the owner being the account that created the bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\"> Controlling object ownership and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>The following operations are related to <code>GetObjectAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> </ul>"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the access control list (ACL) of an object. To use this operation, you must have <code>s3:GetObjectAcl</code> permissions or <code>READ_ACP</code> access to the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#acl-access-policy-permission-mapping\">Mapping of ACL permissions and access policy permissions</a> in the <i>Amazon S3 User Guide</i> </p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>By default, GET returns ACL information about the current version of an object. To return ACL information about a different version, use the versionId subresource.</p> <note> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, requests to read ACLs are still supported and return the <code>bucket-owner-full-control</code> ACL with the owner being the account that created the bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\"> Controlling object ownership and disabling ACLs</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>The following operations are related to <code>GetObjectAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectAttributes":{
       "name":"GetObjectAttributes",
@@ -725,7 +737,7 @@
       "errors":[
         {"shape":"NoSuchKey"}
       ],
-      "documentation":"<p>Retrieves all the metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata. </p> <p> <code>GetObjectAttributes</code> combines the functionality of <code>HeadObject</code> and <code>ListParts</code>. All of the data returned with each of those individual calls can be returned with a single call to <code>GetObjectAttributes</code>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use <code>GetObjectAttributes</code>, you must have READ access to the object. The permissions that you need to use this operation depend on whether the bucket is versioned. If the bucket is versioned, you need both the <code>s3:GetObjectVersion</code> and <code>s3:GetObjectVersionAttributes</code> permissions for this operation. If the bucket is not versioned, you need the <code>s3:GetObject</code> and <code>s3:GetObjectAttributes</code> permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> in the <i>Amazon S3 User Guide</i>. If the object that you request does not exist, the error Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> (\"no such key\") error.</p> </li> <li> <p>If you don't have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Forbidden</code> (\"access denied\") error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <note> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for <code>HEAD</code> requests if your object uses server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with Amazon S3 managed encryption keys (SSE-S3). The <code>x-amz-server-side-encryption</code> header is used when you <code>PUT</code> an object to S3 and want to specify the encryption method. If you include this header in a <code>GET</code> request for an object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error. It's because the encryption method can't be changed when you retrieve the object.</p> </note> <p>If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you retrieve the metadata from the object, you must use the following headers to provide the encryption key for the server to be able to retrieve the object's metadata. The headers are: </p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory bucket permissions</b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </note> </dd> <dt>Versioning</dt> <dd> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </dd> <dt>Conditional request headers</dt> <dd> <p>Consider the following when using request headers:</p> <ul> <li> <p>If both of the <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present in the request as follows, then Amazon S3 returns the HTTP status code <code>200 OK</code> and the data requested:</p> <ul> <li> <p> <code>If-Match</code> condition evaluates to <code>true</code>.</p> </li> <li> <p> <code>If-Unmodified-Since</code> condition evaluates to <code>false</code>.</p> </li> </ul> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p> </li> <li> <p>If both of the <code>If-None-Match</code> and <code>If-Modified-Since</code> headers are present in the request as follows, then Amazon S3 returns the HTTP status code <code>304 Not Modified</code>:</p> <ul> <li> <p> <code>If-None-Match</code> condition evaluates to <code>false</code>.</p> </li> <li> <p> <code>If-Modified-Since</code> condition evaluates to <code>true</code>.</p> </li> </ul> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following actions are related to <code>GetObjectAttributes</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html\">GetObjectLegalHold</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html\">GetObjectLockConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html\">GetObjectRetention</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html\">HeadObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> </ul>"
+      "documentation":"<p>Retrieves all of the metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata. </p> <p> <code>GetObjectAttributes</code> combines the functionality of <code>HeadObject</code> and <code>ListParts</code>. All of the data returned with both of those individual calls can be returned with a single call to <code>GetObjectAttributes</code>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use <code>GetObjectAttributes</code>, you must have READ access to the object.</p> <p>The other permissions that you need to use this operation depend on whether the bucket is versioned and if a version ID is passed in the <code>GetObjectAttributes</code> request. </p> <ul> <li> <p>If you pass a version ID in your request, you need both the <code>s3:GetObjectVersion</code> and <code>s3:GetObjectVersionAttributes</code> permissions.</p> </li> <li> <p>If you do not pass a version ID in your request, you need the <code>s3:GetObject</code> and <code>s3:GetObjectAttributes</code> permissions. </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the object that you request does not exist, the error Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> (\"no such key\") error.</p> </li> <li> <p>If you don't have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Forbidden</code> (\"access denied\") error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <note> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for <code>HEAD</code> requests if your object uses server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with Amazon S3 managed encryption keys (SSE-S3). The <code>x-amz-server-side-encryption</code> header is used when you <code>PUT</code> an object to S3 and want to specify the encryption method. If you include this header in a <code>GET</code> request for an object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error. It's because the encryption method can't be changed when you retrieve the object.</p> </note> <p>If you encrypted an object when you stored the object in Amazon S3 by using server-side encryption with customer-provided encryption keys (SSE-C), then when you retrieve the metadata from the object, you must use the following headers. These headers provide the server with the encryption key required to retrieve the object's metadata. The headers are: </p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory bucket permissions</b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </note> </dd> <dt>Versioning</dt> <dd> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </dd> <dt>Conditional request headers</dt> <dd> <p>Consider the following when using request headers:</p> <ul> <li> <p>If both of the <code>If-Match</code> and <code>If-Unmodified-Since</code> headers are present in the request as follows, then Amazon S3 returns the HTTP status code <code>200 OK</code> and the data requested:</p> <ul> <li> <p> <code>If-Match</code> condition evaluates to <code>true</code>.</p> </li> <li> <p> <code>If-Unmodified-Since</code> condition evaluates to <code>false</code>.</p> </li> </ul> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p> </li> <li> <p>If both of the <code>If-None-Match</code> and <code>If-Modified-Since</code> headers are present in the request as follows, then Amazon S3 returns the HTTP status code <code>304 Not Modified</code>:</p> <ul> <li> <p> <code>If-None-Match</code> condition evaluates to <code>false</code>.</p> </li> <li> <p> <code>If-Modified-Since</code> condition evaluates to <code>true</code>.</p> </li> </ul> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following actions are related to <code>GetObjectAttributes</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLegalHold.html\">GetObjectLegalHold</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectLockConfiguration.html\">GetObjectLockConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectRetention.html\">GetObjectRetention</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html\">HeadObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectLegalHold":{
       "name":"GetObjectLegalHold",
@@ -735,7 +747,7 @@
       },
       "input":{"shape":"GetObjectLegalHoldRequest"},
       "output":{"shape":"GetObjectLegalHoldOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets an object's current legal hold status. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectLegalHold</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets an object's current legal hold status. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectLegalHold</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectLockConfiguration":{
       "name":"GetObjectLockConfiguration",
@@ -745,7 +757,7 @@
       },
       "input":{"shape":"GetObjectLockConfigurationRequest"},
       "output":{"shape":"GetObjectLockConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets the Object Lock configuration for a bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>The following action is related to <code>GetObjectLockConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Gets the Object Lock configuration for a bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>The following action is related to <code>GetObjectLockConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectRetention":{
       "name":"GetObjectRetention",
@@ -755,7 +767,7 @@
       },
       "input":{"shape":"GetObjectRetentionRequest"},
       "output":{"shape":"GetObjectRetentionOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves an object's retention settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectRetention</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves an object's retention settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectRetention</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectTagging":{
       "name":"GetObjectTagging",
@@ -765,7 +777,7 @@
       },
       "input":{"shape":"GetObjectTaggingRequest"},
       "output":{"shape":"GetObjectTaggingOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the tag-set of an object. You send the GET request against the tagging subresource associated with the object.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetObjectTagging</code> action. By default, the GET action returns information about current version of an object. For a versioned bucket, you can have multiple versions of an object in your bucket. To retrieve tags of any other version, use the versionId query parameter. You also need permission for the <code>s3:GetObjectVersionTagging</code> action.</p> <p> By default, the bucket owner has this permission and can grant this permission to others.</p> <p> For information about the Amazon S3 object tagging feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html\">Object Tagging</a>.</p> <p>The following actions are related to <code>GetObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html\">DeleteObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html\">PutObjectTagging</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns the tag-set of an object. You send the GET request against the tagging subresource associated with the object.</p> <p>To use this operation, you must have permission to perform the <code>s3:GetObjectTagging</code> action. By default, the GET action returns information about current version of an object. For a versioned bucket, you can have multiple versions of an object in your bucket. To retrieve tags of any other version, use the versionId query parameter. You also need permission for the <code>s3:GetObjectVersionTagging</code> action.</p> <p> By default, the bucket owner has this permission and can grant this permission to others.</p> <p> For information about the Amazon S3 object tagging feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html\">Object Tagging</a>.</p> <p>The following actions are related to <code>GetObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html\">DeleteObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html\">PutObjectTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetObjectTorrent":{
       "name":"GetObjectTorrent",
@@ -775,8 +787,7 @@
       },
       "input":{"shape":"GetObjectTorrentRequest"},
       "output":{"shape":"GetObjectTorrentOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGETtorrent.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns torrent files from a bucket. BitTorrent can save you bandwidth when you're distributing large files.</p> <note> <p>You can get torrent only for objects that are less than 5 GB in size, and that are not encrypted using server-side encryption with a customer-provided encryption key.</p> </note> <p>To use GET, you must have READ access to the object.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectTorrent</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns torrent files from a bucket. BitTorrent can save you bandwidth when you're distributing large files.</p> <note> <p>You can get torrent only for objects that are less than 5 GB in size, and that are not encrypted using server-side encryption with a customer-provided encryption key.</p> </note> <p>To use GET, you must have READ access to the object.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>The following action is related to <code>GetObjectTorrent</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "GetPublicAccessBlock":{
       "name":"GetPublicAccessBlock",
@@ -786,7 +797,7 @@
       },
       "input":{"shape":"GetPublicAccessBlockRequest"},
       "output":{"shape":"GetPublicAccessBlockOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:GetBucketPublicAccessBlock</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <important> <p>When Amazon S3 evaluates the <code>PublicAccessBlock</code> configuration for a bucket or an object, it checks the <code>PublicAccessBlock</code> configuration for both the bucket (or the bucket that contains the object) and the bucket owner's account. If the <code>PublicAccessBlock</code> settings are different between the bucket and the account, Amazon S3 uses the most restrictive combination of the bucket-level and account-level settings.</p> </important> <p>For more information about when Amazon S3 considers a bucket or an object public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>.</p> <p>The following operations are related to <code>GetPublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:GetBucketPublicAccessBlock</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <important> <p>When Amazon S3 evaluates the <code>PublicAccessBlock</code> configuration for a bucket or an object, it checks the <code>PublicAccessBlock</code> configuration for both the bucket (or the bucket that contains the object) and the bucket owner's account. If the <code>PublicAccessBlock</code> settings are different between the bucket and the account, Amazon S3 uses the most restrictive combination of the bucket-level and account-level settings.</p> </important> <p>For more information about when Amazon S3 considers a bucket or an object public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>.</p> <p>The following operations are related to <code>GetPublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -802,8 +813,7 @@
       "errors":[
         {"shape":"NoSuchBucket"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketHEAD.html",
-      "documentation":"<p>You can use this operation to determine if a bucket exists and if you have permission to access it. The action returns a <code>200 OK</code> if the bucket exists and you have permission to access it.</p> <note> <p>If the bucket does not exist or you do not have permission to access it, the <code>HEAD</code> request returns a generic <code>400 Bad Request</code>, <code>403 Forbidden</code> or <code>404 Not Found</code> code. A message body is not included, so you cannot determine the exception beyond these HTTP response codes.</p> </note> <dl> <dt>Authentication and authorization</dt> <dd> <p> <b>General purpose buckets</b> - Request to public buckets that grant the s3:ListBucket permission publicly do not need to be signed. All other <code>HeadBucket</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use IAM credentials to authenticate and authorize your access to the <code>HeadBucket</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p/> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use this operation, you must have permissions to perform the <code>s3:ListBucket</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing access permissions to your Amazon S3 resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the bucket.</p> <p>For more information about example bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> <note> <p>You must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </dd> </dl>"
+      "documentation":"<p>You can use this operation to determine if a bucket exists and if you have permission to access it. The action returns a <code>200 OK</code> HTTP status code if the bucket exists and you have permission to access it. You can make a <code>HeadBucket</code> call on any bucket name to any Region in the partition, and regardless of the permissions on the bucket, you will receive a response header with the correct bucket location so that you can then make a proper, signed request to the appropriate Regional endpoint.</p> <note> <p>If the bucket doesn't exist or you don't have permission to access it, the <code>HEAD</code> request returns a generic <code>400 Bad Request</code>, <code>403 Forbidden</code>, or <code>404 Not Found</code> HTTP status code. A message body isn't included, so you can't determine the exception beyond these HTTP response codes.</p> </note> <dl> <dt>Authentication and authorization</dt> <dd> <p> <b>General purpose buckets</b> - Request to public buckets that grant the s3:ListBucket permission publicly do not need to be signed. All other <code>HeadBucket</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use IAM credentials to authenticate and authorize your access to the <code>HeadBucket</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p/> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use this operation, you must have permissions to perform the <code>s3:ListBucket</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing access permissions to your Amazon S3 resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - You must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the bucket.</p> <p>For more information about example bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> <note> <p>You must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "HeadObject":{
       "name":"HeadObject",
@@ -816,8 +826,7 @@
       "errors":[
         {"shape":"NoSuchKey"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectHEAD.html",
-      "documentation":"<p>The <code>HEAD</code> operation retrieves metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata.</p> <note> <p>A <code>HEAD</code> request has the same options as a <code>GET</code> operation on an object. The response is identical to the <code>GET</code> response except that there is no response body. Because of this, if the <code>HEAD</code> request generates an error, it returns a generic code, such as <code>400 Bad Request</code>, <code>403 Forbidden</code>, <code>404 Not Found</code>, <code>405 Method Not Allowed</code>, <code>412 Precondition Failed</code>, or <code>304 Not Modified</code>. It's not possible to retrieve the exact exception of these error codes.</p> </note> <p>Request headers are limited to 8 KB in size. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html\">Common Request Headers</a>.</p> <dl> <dt>Permissions</dt> <dd> <p/> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use <code>HEAD</code>, you must have the <code>s3:GetObject</code> permission. You need the relevant read object (or version) permission for this operation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html\">Actions, resources, and condition keys for Amazon S3</a> in the <i>Amazon S3 User Guide</i>. For more information about the permissions to S3 API operations by S3 resource types, see <a href=\"/AmazonS3/latest/userguide/using-with-s3-policy-actions.html\">Required permissions for Amazon S3 API operations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the object you request doesn't exist, the error that Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Forbidden</code> error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If you enable <code>x-amz-checksum-mode</code> in the request and the object is encrypted with Amazon Web Services Key Management Service (Amazon Web Services KMS), you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key to retrieve the checksum of the object.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <note> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for <code>HEAD</code> requests if your object uses server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with Amazon S3 managed encryption keys (SSE-S3). The <code>x-amz-server-side-encryption</code> header is used when you <code>PUT</code> an object to S3 and want to specify the encryption method. If you include this header in a <code>HEAD</code> request for an object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error. It's because the encryption method can't be changed when you retrieve the object.</p> </note> <p>If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you retrieve the metadata from the object, you must use the following headers to provide the encryption key for the server to be able to retrieve the object's metadata. The headers are: </p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory bucket </b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. </p> </note> </dd> <dt>Versioning</dt> <dd> <ul> <li> <p>If the current version of the object is a delete marker, Amazon S3 behaves as if the object was deleted and includes <code>x-amz-delete-marker: true</code> in the response.</p> </li> <li> <p>If the specified version is a delete marker, the response returns a <code>405 Method Not Allowed</code> error and the <code>Last-Modified: timestamp</code> response header.</p> </li> </ul> <note> <ul> <li> <p> <b>Directory buckets</b> - Delete marker is not supported for directory buckets.</p> </li> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </li> </ul> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> <note> <p>For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </dd> </dl> <p>The following actions are related to <code>HeadObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul>"
+      "documentation":"<p>The <code>HEAD</code> operation retrieves metadata from an object without returning the object itself. This operation is useful if you're interested only in an object's metadata.</p> <note> <p>A <code>HEAD</code> request has the same options as a <code>GET</code> operation on an object. The response is identical to the <code>GET</code> response except that there is no response body. Because of this, if the <code>HEAD</code> request generates an error, it returns a generic code, such as <code>400 Bad Request</code>, <code>403 Forbidden</code>, <code>404 Not Found</code>, <code>405 Method Not Allowed</code>, <code>412 Precondition Failed</code>, or <code>304 Not Modified</code>. It's not possible to retrieve the exact exception of these error codes.</p> </note> <p>Request headers are limited to 8 KB in size. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html\">Common Request Headers</a>.</p> <dl> <dt>Permissions</dt> <dd> <p/> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use <code>HEAD</code>, you must have the <code>s3:GetObject</code> permission. You need the relevant read object (or version) permission for this operation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html\">Actions, resources, and condition keys for Amazon S3</a> in the <i>Amazon S3 User Guide</i>. For more information about the permissions to S3 API operations by S3 resource types, see <a href=\"/AmazonS3/latest/userguide/using-with-s3-policy-actions.html\">Required permissions for Amazon S3 API operations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the object you request doesn't exist, the error that Amazon S3 returns depends on whether you also have the <code>s3:ListBucket</code> permission.</p> <ul> <li> <p>If you have the <code>s3:ListBucket</code> permission on the bucket, Amazon S3 returns an HTTP status code <code>404 Not Found</code> error.</p> </li> <li> <p>If you don’t have the <code>s3:ListBucket</code> permission, Amazon S3 returns an HTTP status code <code>403 Forbidden</code> error.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If you enable <code>x-amz-checksum-mode</code> in the request and the object is encrypted with Amazon Web Services Key Management Service (Amazon Web Services KMS), you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key to retrieve the checksum of the object.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <note> <p>Encryption request headers, like <code>x-amz-server-side-encryption</code>, should not be sent for <code>HEAD</code> requests if your object uses server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), or server-side encryption with Amazon S3 managed encryption keys (SSE-S3). The <code>x-amz-server-side-encryption</code> header is used when you <code>PUT</code> an object to S3 and want to specify the encryption method. If you include this header in a <code>HEAD</code> request for an object that uses these types of keys, you’ll get an HTTP <code>400 Bad Request</code> error. It's because the encryption method can't be changed when you retrieve the object.</p> </note> <p>If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you retrieve the metadata from the object, you must use the following headers to provide the encryption key for the server to be able to retrieve the object's metadata. The headers are: </p> <ul> <li> <p> <code>x-amz-server-side-encryption-customer-algorithm</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key</code> </p> </li> <li> <p> <code>x-amz-server-side-encryption-customer-key-MD5</code> </p> </li> </ul> <p>For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory bucket </b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS. SSE-C isn't supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. </p> </note> </dd> <dt>Versioning</dt> <dd> <ul> <li> <p>If the current version of the object is a delete marker, Amazon S3 behaves as if the object was deleted and includes <code>x-amz-delete-marker: true</code> in the response.</p> </li> <li> <p>If the specified version is a delete marker, the response returns a <code>405 Method Not Allowed</code> error and the <code>Last-Modified: timestamp</code> response header.</p> </li> </ul> <note> <ul> <li> <p> <b>Directory buckets</b> - Delete marker is not supported for directory buckets.</p> </li> <li> <p> <b>Directory buckets</b> - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the <code>null</code> value of the version ID is supported by directory buckets. You can only specify <code>null</code> to the <code>versionId</code> query parameter in the request.</p> </li> </ul> </note> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> <note> <p>For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </dd> </dl> <p>The following actions are related to <code>HeadObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListBucketAnalyticsConfigurations":{
       "name":"ListBucketAnalyticsConfigurations",
@@ -827,7 +836,7 @@
       },
       "input":{"shape":"ListBucketAnalyticsConfigurationsRequest"},
       "output":{"shape":"ListBucketAnalyticsConfigurationsOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the analytics configurations for the bucket. You can have up to 1,000 analytics configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. You should always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there will be a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in continuation-token in the request to <code>GET</code> the next page.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are related to <code>ListBucketAnalyticsConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the analytics configurations for the bucket. You can have up to 1,000 analytics configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. You should always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there will be a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in continuation-token in the request to <code>GET</code> the next page.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about Amazon S3 analytics feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <p>The following operations are related to <code>ListBucketAnalyticsConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketAnalyticsConfiguration.html\">PutBucketAnalyticsConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -840,7 +849,7 @@
       },
       "input":{"shape":"ListBucketIntelligentTieringConfigurationsRequest"},
       "output":{"shape":"ListBucketIntelligentTieringConfigurationsOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>ListBucketIntelligentTieringConfigurations</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the S3 Intelligent-Tiering configuration from the specified bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>ListBucketIntelligentTieringConfigurations</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketIntelligentTieringConfiguration.html\">PutBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -853,7 +862,7 @@
       },
       "input":{"shape":"ListBucketInventoryConfigurationsRequest"},
       "output":{"shape":"ListBucketInventoryConfigurationsOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns a list of inventory configurations for the bucket. You can have up to 1,000 analytics configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. Always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there is a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in continuation-token in the request to <code>GET</code> the next page.</p> <p> To use this operation, you must have permissions to perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a> </p> <p>The following operations are related to <code>ListBucketInventoryConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns a list of S3 Inventory configurations for the bucket. You can have up to 1,000 inventory configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. Always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there is a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in continuation-token in the request to <code>GET</code> the next page.</p> <p> To use this operation, you must have permissions to perform the <code>s3:GetInventoryConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about the Amazon S3 inventory feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a> </p> <p>The following operations are related to <code>ListBucketInventoryConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html\">PutBucketInventoryConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -866,7 +875,7 @@
       },
       "input":{"shape":"ListBucketMetricsConfigurationsRequest"},
       "output":{"shape":"ListBucketMetricsConfigurationsOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the metrics configurations for the bucket. The metrics configurations are only for the request metrics of the bucket and do not provide information on daily storage metrics. You can have up to 1,000 configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. Always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there is a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in <code>continuation-token</code> in the request to <code>GET</code> the next page.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For more information about metrics configurations and CloudWatch request metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>ListBucketMetricsConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Lists the metrics configurations for the bucket. The metrics configurations are only for the request metrics of the bucket and do not provide information on daily storage metrics. You can have up to 1,000 configurations per bucket.</p> <p>This action supports list pagination and does not return more than 100 configurations at a time. Always check the <code>IsTruncated</code> element in the response. If there are no more configurations to list, <code>IsTruncated</code> is set to false. If there are more configurations to list, <code>IsTruncated</code> is set to true, and there is a value in <code>NextContinuationToken</code>. You use the <code>NextContinuationToken</code> value to continue the pagination of the list by passing the value in <code>continuation-token</code> in the request to <code>GET</code> the next page.</p> <p>To use this operation, you must have permissions to perform the <code>s3:GetMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For more information about metrics configurations and CloudWatch request metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>ListBucketMetricsConfigurations</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketMetricsConfiguration.html\">PutBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListBuckets":{
       "name":"ListBuckets",
@@ -876,9 +885,7 @@
       },
       "input":{"shape":"ListBucketsRequest"},
       "output":{"shape":"ListBucketsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns a list of all buckets owned by the authenticated sender of the request. To grant IAM permission to use this operation, you must add the <code>s3:ListAllMyBuckets</code> policy action. </p> <p>For information about Amazon S3 buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html\">Creating, configuring, and working with Amazon S3 buckets</a>.</p> <important> <p>We strongly recommend using only paginated <code>ListBuckets</code> requests. Unpaginated <code>ListBuckets</code> requests are only supported for Amazon Web Services accounts set to the default general purpose bucket quota of 10,000. If you have an approved general purpose bucket quota above 10,000, you must send paginated <code>ListBuckets</code> requests to list your account’s buckets. All unpaginated <code>ListBuckets</code> requests will be rejected for Amazon Web Services accounts with a general purpose bucket quota greater than 10,000. </p> </important>",
-      "alias":"GetService"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns a list of all buckets owned by the authenticated sender of the request. To grant IAM permission to use this operation, you must add the <code>s3:ListAllMyBuckets</code> policy action. </p> <p>For information about Amazon S3 buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html\">Creating, configuring, and working with Amazon S3 buckets</a>.</p> <important> <p>We strongly recommend using only paginated <code>ListBuckets</code> requests. Unpaginated <code>ListBuckets</code> requests are only supported for Amazon Web Services accounts set to the default general purpose bucket quota of 10,000. If you have an approved general purpose bucket quota above 10,000, you must send paginated <code>ListBuckets</code> requests to list your account’s buckets. All unpaginated <code>ListBuckets</code> requests will be rejected for Amazon Web Services accounts with a general purpose bucket quota greater than 10,000. </p> </important> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListDirectoryBuckets":{
       "name":"ListDirectoryBuckets",
@@ -888,7 +895,7 @@
       },
       "input":{"shape":"ListDirectoryBucketsRequest"},
       "output":{"shape":"ListDirectoryBucketsOutput"},
-      "documentation":"<p>Returns a list of all Amazon S3 directory buckets owned by the authenticated sender of the request. For more information about directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3express:ListAllMyDirectoryBuckets</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <note> <p> The <code>BucketRegion</code> response element is not part of the <code>ListDirectoryBuckets</code> Response Syntax.</p> </note>",
+      "documentation":"<p>Returns a list of all Amazon S3 directory buckets owned by the authenticated sender of the request. For more information about directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3express:ListAllMyDirectoryBuckets</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <note> <p> The <code>BucketRegion</code> response element is not part of the <code>ListDirectoryBuckets</code> Response Syntax.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -901,8 +908,7 @@
       },
       "input":{"shape":"ListMultipartUploadsRequest"},
       "output":{"shape":"ListMultipartUploadsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListMPUpload.html",
-      "documentation":"<p>This operation lists in-progress multipart uploads in a bucket. An in-progress multipart upload is a multipart upload that has been initiated by the <code>CreateMultipartUpload</code> request, but has not yet been completed or aborted.</p> <note> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed. To delete these in-progress multipart uploads, use the <code>ListMultipartUploads</code> operation to list the in-progress multipart uploads in the bucket and use the <code>AbortMultipartUpload</code> operation to abort all the in-progress multipart uploads. </p> </note> <p>The <code>ListMultipartUploads</code> operation returns a maximum of 1,000 multipart uploads in the response. The limit of 1,000 multipart uploads is also the default value. You can further limit the number of uploads in a response by specifying the <code>max-uploads</code> request parameter. If there are more than 1,000 multipart uploads that satisfy your <code>ListMultipartUploads</code> request, the response returns an <code>IsTruncated</code> element with the value of <code>true</code>, a <code>NextKeyMarker</code> element, and a <code>NextUploadIdMarker</code> element. To list the remaining multipart uploads, you need to make subsequent <code>ListMultipartUploads</code> requests. In these requests, include two query parameters: <code>key-marker</code> and <code>upload-id-marker</code>. Set the value of <code>key-marker</code> to the <code>NextKeyMarker</code> value from the previous response. Similarly, set the value of <code>upload-id-marker</code> to the <code>NextUploadIdMarker</code> value from the previous response.</p> <note> <p> <b>Directory buckets</b> - The <code>upload-id-marker</code> element and the <code>NextUploadIdMarker</code> element aren't supported by directory buckets. To list the additional multipart uploads, you only need to set the value of <code>key-marker</code> to the <code>NextKeyMarker</code> value from the previous response. </p> </note> <p>For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Sorting of multipart uploads in response</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - In the <code>ListMultipartUploads</code> response, the multipart uploads are sorted based on two criteria:</p> <ul> <li> <p>Key-based sorting - Multipart uploads are initially sorted in ascending order based on their object keys.</p> </li> <li> <p>Time-based sorting - For uploads that share the same object key, they are further sorted in ascending order based on the upload initiation time. Among uploads with the same key, the one that was initiated first will appear before the ones that were initiated later.</p> </li> </ul> </li> <li> <p> <b>Directory bucket</b> - In the <code>ListMultipartUploads</code> response, the multipart uploads aren't sorted lexicographically based on the object keys. </p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>ListMultipartUploads</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> </ul>"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <p>This operation lists in-progress multipart uploads in a bucket. An in-progress multipart upload is a multipart upload that has been initiated by the <code>CreateMultipartUpload</code> request, but has not yet been completed or aborted.</p> <note> <p> <b>Directory buckets</b> - If multipart uploads in a directory bucket are in progress, you can't delete the bucket until all the in-progress multipart uploads are aborted or completed. To delete these in-progress multipart uploads, use the <code>ListMultipartUploads</code> operation to list the in-progress multipart uploads in the bucket and use the <code>AbortMultipartUpload</code> operation to abort all the in-progress multipart uploads. </p> </note> <p>The <code>ListMultipartUploads</code> operation returns a maximum of 1,000 multipart uploads in the response. The limit of 1,000 multipart uploads is also the default value. You can further limit the number of uploads in a response by specifying the <code>max-uploads</code> request parameter. If there are more than 1,000 multipart uploads that satisfy your <code>ListMultipartUploads</code> request, the response returns an <code>IsTruncated</code> element with the value of <code>true</code>, a <code>NextKeyMarker</code> element, and a <code>NextUploadIdMarker</code> element. To list the remaining multipart uploads, you need to make subsequent <code>ListMultipartUploads</code> requests. In these requests, include two query parameters: <code>key-marker</code> and <code>upload-id-marker</code>. Set the value of <code>key-marker</code> to the <code>NextKeyMarker</code> value from the previous response. Similarly, set the value of <code>upload-id-marker</code> to the <code>NextUploadIdMarker</code> value from the previous response.</p> <note> <p> <b>Directory buckets</b> - The <code>upload-id-marker</code> element and the <code>NextUploadIdMarker</code> element aren't supported by directory buckets. To list the additional multipart uploads, you only need to set the value of <code>key-marker</code> to the <code>NextKeyMarker</code> value from the previous response. </p> </note> <p>For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Sorting of multipart uploads in response</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - In the <code>ListMultipartUploads</code> response, the multipart uploads are sorted based on two criteria:</p> <ul> <li> <p>Key-based sorting - Multipart uploads are initially sorted in ascending order based on their object keys.</p> </li> <li> <p>Time-based sorting - For uploads that share the same object key, they are further sorted in ascending order based on the upload initiation time. Among uploads with the same key, the one that was initiated first will appear before the ones that were initiated later.</p> </li> </ul> </li> <li> <p> <b>Directory bucket</b> - In the <code>ListMultipartUploads</code> response, the multipart uploads aren't sorted lexicographically based on the object keys. </p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>ListMultipartUploads</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListObjectVersions":{
       "name":"ListObjectVersions",
@@ -912,9 +918,7 @@
       },
       "input":{"shape":"ListObjectVersionsRequest"},
       "output":{"shape":"ListObjectVersionsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETVersion.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns metadata about all versions of the objects in a bucket. You can also use request parameters as selection criteria to return metadata about a subset of all the object versions.</p> <important> <p> To use this operation, you must have permission to perform the <code>s3:ListBucketVersions</code> action. Be aware of the name difference. </p> </important> <note> <p> A <code>200 OK</code> response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately.</p> </note> <p>To use this operation, you must have READ access to the bucket.</p> <p>The following operations are related to <code>ListObjectVersions</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul>",
-      "alias":"GetBucketObjectVersions"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns metadata about all versions of the objects in a bucket. You can also use request parameters as selection criteria to return metadata about a subset of all the object versions.</p> <important> <p> To use this operation, you must have permission to perform the <code>s3:ListBucketVersions</code> action. Be aware of the name difference. </p> </important> <note> <p> A <code>200 OK</code> response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately.</p> </note> <p>To use this operation, you must have READ access to the bucket.</p> <p>The following operations are related to <code>ListObjectVersions</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListObjects":{
       "name":"ListObjects",
@@ -927,9 +931,7 @@
       "errors":[
         {"shape":"NoSuchBucket"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A 200 OK response can contain valid or invalid XML. Be sure to design your application to parse the contents of the response and handle it appropriately.</p> <important> <p>This action has been revised. We recommend that you use the newer version, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a>, when developing applications. For backward compatibility, Amazon S3 continues to support <code>ListObjects</code>.</p> </important> <p>The following operations are related to <code>ListObjects</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a> </p> </li> </ul>",
-      "alias":"GetBucket"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Returns some or all (up to 1,000) of the objects in a bucket. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A 200 OK response can contain valid or invalid XML. Be sure to design your application to parse the contents of the response and handle it appropriately.</p> <important> <p>This action has been revised. We recommend that you use the newer version, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a>, when developing applications. For backward compatibility, Amazon S3 continues to support <code>ListObjects</code>.</p> </important> <p>The following operations are related to <code>ListObjects</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html\">ListObjectsV2</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListObjectsV2":{
       "name":"ListObjectsV2",
@@ -942,7 +944,7 @@
       "errors":[
         {"shape":"NoSuchBucket"}
       ],
-      "documentation":"<p>Returns some or all (up to 1,000) of the objects in a bucket with each request. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A <code>200 OK</code> response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately. For more information about listing objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html\">Listing object keys programmatically</a> in the <i>Amazon S3 User Guide</i>. To get a list of your buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a>.</p> <note> <ul> <li> <p> <b>General purpose bucket</b> - For general purpose buckets, <code>ListObjectsV2</code> doesn't return prefixes that are related only to in-progress multipart uploads.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, <code>ListObjectsV2</code> response includes the prefixes that are related only to in-progress multipart uploads. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use this operation, you must have READ access to the bucket. You must have permission to perform the <code>s3:ListBucket</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Sorting order of returned objects</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - For general purpose buckets, <code>ListObjectsV2</code> returns objects in lexicographical order based on their key names.</p> </li> <li> <p> <b>Directory bucket</b> - For directory buckets, <code>ListObjectsV2</code> does not return objects in lexicographical order.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <important> <p>This section describes the latest revision of this action. We recommend that you use this revised API operation for application development. For backward compatibility, Amazon S3 continues to support the prior version of this API operation, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a>.</p> </important> <p>The following operations are related to <code>ListObjectsV2</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul>"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <p>Returns some or all (up to 1,000) of the objects in a bucket with each request. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. A <code>200 OK</code> response can contain valid or invalid XML. Make sure to design your application to parse the contents of the response and handle it appropriately. For more information about listing objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html\">Listing object keys programmatically</a> in the <i>Amazon S3 User Guide</i>. To get a list of your buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html\">ListBuckets</a>.</p> <note> <ul> <li> <p> <b>General purpose bucket</b> - For general purpose buckets, <code>ListObjectsV2</code> doesn't return prefixes that are related only to in-progress multipart uploads.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, <code>ListObjectsV2</code> response includes the prefixes that are related only to in-progress multipart uploads. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To use this operation, you must have READ access to the bucket. You must have permission to perform the <code>s3:ListBucket</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>Sorting order of returned objects</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - For general purpose buckets, <code>ListObjectsV2</code> returns objects in lexicographical order based on their key names.</p> </li> <li> <p> <b>Directory bucket</b> - For directory buckets, <code>ListObjectsV2</code> does not return objects in lexicographical order.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <important> <p>This section describes the latest revision of this action. We recommend that you use this revised API operation for application development. For backward compatibility, Amazon S3 continues to support the prior version of this API operation, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html\">ListObjects</a>.</p> </important> <p>The following operations are related to <code>ListObjectsV2</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "ListParts":{
       "name":"ListParts",
@@ -952,8 +954,7 @@
       },
       "input":{"shape":"ListPartsRequest"},
       "output":{"shape":"ListPartsOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListParts.html",
-      "documentation":"<p>Lists the parts that have been uploaded for a specific multipart upload.</p> <p>To use this operation, you must provide the <code>upload ID</code> in the request. You obtain this uploadID by sending the initiate multipart upload request through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>.</p> <p>The <code>ListParts</code> request returns a maximum of 1,000 uploaded parts. The limit of 1,000 parts is also the default value. You can restrict the number of parts in a response by specifying the <code>max-parts</code> request parameter. If your multipart upload consists of more than 1,000 parts, the response returns an <code>IsTruncated</code> field with the value of <code>true</code>, and a <code>NextPartNumberMarker</code> element. To list remaining uploaded parts, in subsequent <code>ListParts</code> requests, include the <code>part-number-marker</code> query string parameter and set its value to the <code>NextPartNumberMarker</code> field value from the previous response.</p> <p>For more information on multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the upload was created using server-side encryption with Key Management Service (KMS) keys (SSE-KMS) or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), you must have permission to the <code>kms:Decrypt</code> action for the <code>ListParts</code> request to succeed.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>ListParts</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <p>Lists the parts that have been uploaded for a specific multipart upload.</p> <p>To use this operation, you must provide the <code>upload ID</code> in the request. You obtain this uploadID by sending the initiate multipart upload request through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>.</p> <p>The <code>ListParts</code> request returns a maximum of 1,000 uploaded parts. The limit of 1,000 parts is also the default value. You can restrict the number of parts in a response by specifying the <code>max-parts</code> request parameter. If your multipart upload consists of more than 1,000 parts, the response returns an <code>IsTruncated</code> field with the value of <code>true</code>, and a <code>NextPartNumberMarker</code> element. To list remaining uploaded parts, in subsequent <code>ListParts</code> requests, include the <code>part-number-marker</code> query string parameter and set its value to the <code>NextPartNumberMarker</code> field value from the previous response.</p> <p>For more information on multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - For information about permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart Upload and Permissions</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the upload was created using server-side encryption with Key Management Service (KMS) keys (SSE-KMS) or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), you must have permission to the <code>kms:Decrypt</code> action for the <code>ListParts</code> request to succeed.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>ListParts</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html\">GetObjectAttributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
     },
     "PutBucketAccelerateConfiguration":{
       "name":"PutBucketAccelerateConfiguration",
@@ -962,7 +963,7 @@
         "requestUri":"/{Bucket}?accelerate"
       },
       "input":{"shape":"PutBucketAccelerateConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer Acceleration is a bucket-level feature that enables you to perform faster data transfers to Amazon S3.</p> <p> To use this operation, you must have permission to perform the <code>s3:PutAccelerateConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> The Transfer Acceleration state of a bucket can be set to one of the following two values:</p> <ul> <li> <p> Enabled – Enables accelerated data transfers to the bucket.</p> </li> <li> <p> Suspended – Disables accelerated data transfers to the bucket.</p> </li> </ul> <p>The <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html\">GetBucketAccelerateConfiguration</a> action returns the transfer acceleration state of a bucket.</p> <p>After setting the Transfer Acceleration state of a bucket to Enabled, it might take up to thirty minutes before the data transfer rates to the bucket increase.</p> <p> The name of the bucket used for Transfer Acceleration must be DNS-compliant and must not contain periods (\".\").</p> <p> For more information about transfer acceleration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a>.</p> <p>The following operations are related to <code>PutBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html\">GetBucketAccelerateConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer Acceleration is a bucket-level feature that enables you to perform faster data transfers to Amazon S3.</p> <p> To use this operation, you must have permission to perform the <code>s3:PutAccelerateConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> The Transfer Acceleration state of a bucket can be set to one of the following two values:</p> <ul> <li> <p> Enabled – Enables accelerated data transfers to the bucket.</p> </li> <li> <p> Suspended – Disables accelerated data transfers to the bucket.</p> </li> </ul> <p>The <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html\">GetBucketAccelerateConfiguration</a> action returns the transfer acceleration state of a bucket.</p> <p>After setting the Transfer Acceleration state of a bucket to Enabled, it might take up to thirty minutes before the data transfer rates to the bucket increase.</p> <p> The name of the bucket used for Transfer Acceleration must be DNS-compliant and must not contain periods (\".\").</p> <p> For more information about transfer acceleration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html\">Transfer Acceleration</a>.</p> <p>The following operations are related to <code>PutBucketAccelerateConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAccelerateConfiguration.html\">GetBucketAccelerateConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":false
@@ -978,8 +979,7 @@
         "requestUri":"/{Bucket}?acl"
       },
       "input":{"shape":"PutBucketAclRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTacl.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the permissions on an existing bucket using access control lists (ACL). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html\">Using ACLs</a>. To set the ACL of a bucket, you must have the <code>WRITE_ACP</code> permission.</p> <p>You can use one of the following two ways to set a bucket's permissions:</p> <ul> <li> <p>Specify the ACL in the request body</p> </li> <li> <p>Specify permissions using request headers</p> </li> </ul> <note> <p>You cannot specify access permission using both the body and the request headers.</p> </note> <p>Depending on your application needs, you may choose to set the ACL on a bucket using either the request body or the headers. For example, if you have an existing application that updates a bucket ACL using the request body, then you can continue to use that approach.</p> <important> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. You must use policies to grant access to your bucket and the objects in it. Requests to set ACLs or update ACLs fail and return the <code>AccessControlListNotSupported</code> error code. Requests to read ACLs are still supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling object ownership</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>You can set access permissions by using one of the following methods:</p> <ul> <li> <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined ACLs, known as <i>canned ACLs</i>. Each canned ACL has a predefined set of grantees and permissions. Specify the canned ACL name as the value of <code>x-amz-acl</code>. If you use this header, you cannot use other access control-specific headers in your request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL\">Canned ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code> headers. When using these headers, you specify explicit access permissions and grantees (Amazon Web Services accounts or Amazon S3 groups) who will receive the permission. If you use these ACL-specific headers, you cannot use the <code>x-amz-acl</code> header to set a canned ACL. These parameters map to the set of permissions that Amazon S3 supports in an ACL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code> – if the value specified is the canonical user ID of an Amazon Web Services account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is the email address of an Amazon Web Services account</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> <p>For example, the following <code>x-amz-grant-write</code> header grants create, overwrite, and delete objects permission to LogDelivery group predefined by Amazon S3 and two Amazon Web Services accounts identified by their email addresses.</p> <p> <code>x-amz-grant-write: uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\", id=\"111122223333\", id=\"555566667777\" </code> </p> </li> </ul> <p>You can use either a canned ACL or specify access permissions explicitly. You cannot do both.</p> </dd> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (using request elements) in the following ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the request</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&amp;&lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET Object acl request, appears as the CanonicalUser. </p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> </dd> </dl> <p>The following operations are related to <code>PutBucketAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the permissions on an existing bucket using access control lists (ACL). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html\">Using ACLs</a>. To set the ACL of a bucket, you must have the <code>WRITE_ACP</code> permission.</p> <p>You can use one of the following two ways to set a bucket's permissions:</p> <ul> <li> <p>Specify the ACL in the request body</p> </li> <li> <p>Specify permissions using request headers</p> </li> </ul> <note> <p>You cannot specify access permission using both the body and the request headers.</p> </note> <p>Depending on your application needs, you may choose to set the ACL on a bucket using either the request body or the headers. For example, if you have an existing application that updates a bucket ACL using the request body, then you can continue to use that approach.</p> <important> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. You must use policies to grant access to your bucket and the objects in it. Requests to set ACLs or update ACLs fail and return the <code>AccessControlListNotSupported</code> error code. Requests to read ACLs are still supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling object ownership</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>You can set access permissions by using one of the following methods:</p> <ul> <li> <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined ACLs, known as <i>canned ACLs</i>. Each canned ACL has a predefined set of grantees and permissions. Specify the canned ACL name as the value of <code>x-amz-acl</code>. If you use this header, you cannot use other access control-specific headers in your request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL\">Canned ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code> headers. When using these headers, you specify explicit access permissions and grantees (Amazon Web Services accounts or Amazon S3 groups) who will receive the permission. If you use these ACL-specific headers, you cannot use the <code>x-amz-acl</code> header to set a canned ACL. These parameters map to the set of permissions that Amazon S3 supports in an ACL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code> – if the value specified is the canonical user ID of an Amazon Web Services account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is the email address of an Amazon Web Services account</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> <p>For example, the following <code>x-amz-grant-write</code> header grants create, overwrite, and delete objects permission to LogDelivery group predefined by Amazon S3 and two Amazon Web Services accounts identified by their email addresses.</p> <p> <code>x-amz-grant-write: uri=\"http://acs.amazonaws.com/groups/s3/LogDelivery\", id=\"111122223333\", id=\"555566667777\" </code> </p> </li> </ul> <p>You can use either a canned ACL or specify access permissions explicitly. You cannot do both.</p> </dd> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (using request elements) in the following ways. For examples of how to specify these grantee values in JSON format, see the Amazon Web Services CLI example in <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html\"> Enabling Amazon S3 server access logging</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the request</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&amp;&lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET Object acl request, appears as the CanonicalUser. </p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> </dd> </dl> <p>The following operations are related to <code>PutBucketAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAcl.html\">GetObjectAcl</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -995,7 +995,7 @@
         "requestUri":"/{Bucket}?analytics"
       },
       "input":{"shape":"PutBucketAnalyticsConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets an analytics configuration for the bucket (specified by the analytics configuration ID). You can have up to 1,000 analytics configurations per bucket.</p> <p>You can choose to have storage class analysis export analysis reports sent to a comma-separated values (CSV) flat file. See the <code>DataExport</code> request element. Reports are updated daily and are based on the object filters that you configure. When selecting data export, you specify a destination bucket and an optional destination prefix where the file is written. You can export the data to a destination bucket in a different account. However, the destination bucket must be in the same Region as the bucket that you are making the PUT analytics configuration to. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <important> <p>You must create a bucket policy on the destination bucket where the exported file is written to grant permissions to Amazon S3 to write objects to the bucket. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9\">Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p> </important> <p>To use this operation, you must have permissions to perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>PutBucketAnalyticsConfiguration</code> has the following special errors:</p> <ul> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code: InvalidArgument</i> </p> </li> <li> <p> <i>Cause: Invalid argument.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code: TooManyConfigurations</i> </p> </li> <li> <p> <i>Cause: You are attempting to create a new configuration but have already reached the 1,000-configuration limit.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 403 Forbidden</i> </p> </li> <li> <p> <i>Code: AccessDenied</i> </p> </li> <li> <p> <i>Cause: You are not the owner of the specified bucket, or you do not have the s3:PutAnalyticsConfiguration bucket permission to set the configuration on the bucket.</i> </p> </li> </ul> </li> </ul> <p>The following operations are related to <code>PutBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets an analytics configuration for the bucket (specified by the analytics configuration ID). You can have up to 1,000 analytics configurations per bucket.</p> <p>You can choose to have storage class analysis export analysis reports sent to a comma-separated values (CSV) flat file. See the <code>DataExport</code> request element. Reports are updated daily and are based on the object filters that you configure. When selecting data export, you specify a destination bucket and an optional destination prefix where the file is written. You can export the data to a destination bucket in a different account. However, the destination bucket must be in the same Region as the bucket that you are making the PUT analytics configuration to. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html\">Amazon S3 Analytics – Storage Class Analysis</a>. </p> <important> <p>You must create a bucket policy on the destination bucket where the exported file is written to grant permissions to Amazon S3 to write objects to the bucket. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9\">Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p> </important> <p>To use this operation, you must have permissions to perform the <code>s3:PutAnalyticsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>PutBucketAnalyticsConfiguration</code> has the following special errors:</p> <ul> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code: InvalidArgument</i> </p> </li> <li> <p> <i>Cause: Invalid argument.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 400 Bad Request</i> </p> </li> <li> <p> <i>Code: TooManyConfigurations</i> </p> </li> <li> <p> <i>Cause: You are attempting to create a new configuration but have already reached the 1,000-configuration limit.</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>HTTP Error: HTTP 403 Forbidden</i> </p> </li> <li> <p> <i>Code: AccessDenied</i> </p> </li> <li> <p> <i>Cause: You are not the owner of the specified bucket, or you do not have the s3:PutAnalyticsConfiguration bucket permission to set the configuration on the bucket.</i> </p> </li> </ul> </li> </ul> <p>The following operations are related to <code>PutBucketAnalyticsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketAnalyticsConfiguration.html\">GetBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketAnalyticsConfiguration.html\">DeleteBucketAnalyticsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketAnalyticsConfigurations.html\">ListBucketAnalyticsConfigurations</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1007,8 +1007,7 @@
         "requestUri":"/{Bucket}?cors"
       },
       "input":{"shape":"PutBucketCorsRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTcors.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the <code>cors</code> configuration for your bucket. If the configuration exists, Amazon S3 replaces it.</p> <p>To use this operation, you must be allowed to perform the <code>s3:PutBucketCORS</code> action. By default, the bucket owner has this permission and can grant it to others.</p> <p>You set this configuration on a bucket so that the bucket can service cross-origin requests. For example, you might want to enable a request whose origin is <code>http://www.example.com</code> to access your Amazon S3 bucket at <code>my.example.bucket.com</code> by using the browser's <code>XMLHttpRequest</code> capability.</p> <p>To enable cross-origin resource sharing (CORS) on a bucket, you add the <code>cors</code> subresource to the bucket. The <code>cors</code> subresource is an XML document in which you configure rules that identify origins and the HTTP methods that can be executed on your bucket. The document is limited to 64 KB in size. </p> <p>When Amazon S3 receives a cross-origin request (or a pre-flight OPTIONS request) against a bucket, it evaluates the <code>cors</code> configuration on the bucket and uses the first <code>CORSRule</code> rule that matches the incoming browser request to enable a cross-origin request. For a rule to match, the following conditions must be met:</p> <ul> <li> <p>The request's <code>Origin</code> header must match <code>AllowedOrigin</code> elements.</p> </li> <li> <p>The request method (for example, GET, PUT, HEAD, and so on) or the <code>Access-Control-Request-Method</code> header in case of a pre-flight <code>OPTIONS</code> request must be one of the <code>AllowedMethod</code> elements. </p> </li> <li> <p>Every header specified in the <code>Access-Control-Request-Headers</code> request header of a pre-flight request must match an <code>AllowedHeader</code> element. </p> </li> </ul> <p> For more information about CORS, go to <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\">Enabling Cross-Origin Resource Sharing</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>PutBucketCors</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html\">GetBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html\">DeleteBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html\">RESTOPTIONSobject</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the <code>cors</code> configuration for your bucket. If the configuration exists, Amazon S3 replaces it.</p> <p>To use this operation, you must be allowed to perform the <code>s3:PutBucketCORS</code> action. By default, the bucket owner has this permission and can grant it to others.</p> <p>You set this configuration on a bucket so that the bucket can service cross-origin requests. For example, you might want to enable a request whose origin is <code>http://www.example.com</code> to access your Amazon S3 bucket at <code>my.example.bucket.com</code> by using the browser's <code>XMLHttpRequest</code> capability.</p> <p>To enable cross-origin resource sharing (CORS) on a bucket, you add the <code>cors</code> subresource to the bucket. The <code>cors</code> subresource is an XML document in which you configure rules that identify origins and the HTTP methods that can be executed on your bucket. The document is limited to 64 KB in size. </p> <p>When Amazon S3 receives a cross-origin request (or a pre-flight OPTIONS request) against a bucket, it evaluates the <code>cors</code> configuration on the bucket and uses the first <code>CORSRule</code> rule that matches the incoming browser request to enable a cross-origin request. For a rule to match, the following conditions must be met:</p> <ul> <li> <p>The request's <code>Origin</code> header must match <code>AllowedOrigin</code> elements.</p> </li> <li> <p>The request method (for example, GET, PUT, HEAD, and so on) or the <code>Access-Control-Request-Method</code> header in case of a pre-flight <code>OPTIONS</code> request must be one of the <code>AllowedMethod</code> elements. </p> </li> <li> <p>Every header specified in the <code>Access-Control-Request-Headers</code> request header of a pre-flight request must match an <code>AllowedHeader</code> element. </p> </li> </ul> <p> For more information about CORS, go to <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html\">Enabling Cross-Origin Resource Sharing</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>PutBucketCors</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html\">GetBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html\">DeleteBucketCors</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html\">RESTOPTIONSobject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1024,7 +1023,7 @@
         "requestUri":"/{Bucket}?encryption"
       },
       "input":{"shape":"PutBucketEncryptionRequest"},
-      "documentation":"<p>This operation configures default encryption and Amazon S3 Bucket Keys for an existing bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>By default, all buckets have a default encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3).</p> <note> <ul> <li> <p> <b>General purpose buckets</b> </p> <ul> <li> <p>You can optionally configure default encryption for a bucket by using server-side encryption with Key Management Service (KMS) keys (SSE-KMS) or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). If you specify default encryption by using SSE-KMS, you can also configure <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html\">Amazon S3 Bucket Keys</a>. For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>. </p> </li> <li> <p>If you use PutBucketEncryption to set your <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">default bucket encryption</a> to SSE-KMS, you should verify that your KMS key ID is correct. Amazon S3 doesn't validate the KMS key ID provided in PutBucketEncryption requests.</p> </li> </ul> </li> <li> <p> <b>Directory buckets </b> - You can optionally configure default encryption for a bucket by using server-side encryption with Key Management Service (KMS) keys (SSE-KMS).</p> <ul> <li> <p>We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </li> <li> <p>Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p> </li> <li> <p>S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a>, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops\">the Copy operation in Batch Operations</a>, or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job\">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p> </li> <li> <p>When you specify an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">KMS customer managed key</a> for encryption in your directory bucket, only use the key ID or key ARN. The key alias format of the KMS key isn't supported.</p> </li> <li> <p>For directory buckets, if you use PutBucketEncryption to set your <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">default bucket encryption</a> to SSE-KMS, Amazon S3 validates the KMS key ID provided in PutBucketEncryption requests.</p> </li> </ul> </li> </ul> </note> <important> <p>If you're specifying a customer managed KMS key, we recommend using a fully qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the key within the requester’s account. This behavior can result in data that's encrypted with a KMS key that belongs to the requester, and not the bucket owner.</p> <p>Also, this action requires Amazon Web Services Signature Version 4. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\"> Authenticating Requests (Amazon Web Services Signature Version 4)</a>. </p> </important> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> <p>To set a directory bucket default encryption with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and the <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the target KMS key.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>PutBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html\">GetBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html\">DeleteBucketEncryption</a> </p> </li> </ul>",
+      "documentation":"<p>This operation configures default encryption and Amazon S3 Bucket Keys for an existing bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>By default, all buckets have a default encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3).</p> <note> <ul> <li> <p> <b>General purpose buckets</b> </p> <ul> <li> <p>You can optionally configure default encryption for a bucket by using server-side encryption with Key Management Service (KMS) keys (SSE-KMS) or dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS). If you specify default encryption by using SSE-KMS, you can also configure <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-key.html\">Amazon S3 Bucket Keys</a>. For information about the bucket default encryption feature, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">Amazon S3 Bucket Default Encryption</a> in the <i>Amazon S3 User Guide</i>. </p> </li> <li> <p>If you use PutBucketEncryption to set your <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">default bucket encryption</a> to SSE-KMS, you should verify that your KMS key ID is correct. Amazon S3 doesn't validate the KMS key ID provided in PutBucketEncryption requests.</p> </li> </ul> </li> <li> <p> <b>Directory buckets </b> - You can optionally configure default encryption for a bucket by using server-side encryption with Key Management Service (KMS) keys (SSE-KMS).</p> <ul> <li> <p>We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </li> <li> <p>Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p> </li> <li> <p>S3 Bucket Keys are always enabled for <code>GET</code> and <code>PUT</code> operations in a directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a>, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops\">the Copy operation in Batch Operations</a>, or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job\">the import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p> </li> <li> <p>When you specify an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">KMS customer managed key</a> for encryption in your directory bucket, only use the key ID or key ARN. The key alias format of the KMS key isn't supported.</p> </li> <li> <p>For directory buckets, if you use PutBucketEncryption to set your <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html\">default bucket encryption</a> to SSE-KMS, Amazon S3 validates the KMS key ID provided in PutBucketEncryption requests.</p> </li> </ul> </li> </ul> </note> <important> <p>If you're specifying a customer managed KMS key, we recommend using a fully qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the key within the requester’s account. This behavior can result in data that's encrypted with a KMS key that belongs to the requester, and not the bucket owner.</p> <p>Also, this action requires Amazon Web Services Signature Version 4. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\"> Authenticating Requests (Amazon Web Services Signature Version 4)</a>. </p> </important> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutEncryptionConfiguration</code> permission is required in a policy. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutEncryptionConfiguration</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> <p>To set a directory bucket default encryption with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and the <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the target KMS key.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>PutBucketEncryption</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html\">GetBucketEncryption</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketEncryption.html\">DeleteBucketEncryption</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1040,7 +1039,7 @@
         "requestUri":"/{Bucket}?intelligent-tiering"
       },
       "input":{"shape":"PutBucketIntelligentTieringConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Puts a S3 Intelligent-Tiering configuration to the specified bucket. You can have up to 1,000 S3 Intelligent-Tiering configurations per bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>PutBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul> <note> <p>You only need S3 Intelligent-Tiering enabled on a bucket if you want to automatically move objects stored in the S3 Intelligent-Tiering storage class to the Archive Access or Deep Archive Access tier.</p> </note> <p> <code>PutBucketIntelligentTieringConfiguration</code> has the following special errors:</p> <dl> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> InvalidArgument</p> <p> <i>Cause:</i> Invalid Argument</p> </dd> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> TooManyConfigurations</p> <p> <i>Cause:</i> You are attempting to create a new configuration but have already reached the 1,000-configuration limit. </p> </dd> <dt>HTTP 403 Forbidden Error</dt> <dd> <p> <i>Cause:</i> You are not the owner of the specified bucket, or you do not have the <code>s3:PutIntelligentTieringConfiguration</code> bucket permission to set the configuration on the bucket. </p> </dd> </dl>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Puts a S3 Intelligent-Tiering configuration to the specified bucket. You can have up to 1,000 S3 Intelligent-Tiering configurations per bucket.</p> <p>The S3 Intelligent-Tiering storage class is designed to optimize storage costs by automatically moving data to the most cost-effective storage access tier, without performance impact or operational overhead. S3 Intelligent-Tiering delivers automatic cost savings in three low latency and high throughput access tiers. To get the lowest storage cost on data that can be accessed in minutes to hours, you can choose to activate additional archiving capabilities.</p> <p>The S3 Intelligent-Tiering storage class is the ideal storage class for data with unknown, changing, or unpredictable access patterns, independent of object size or retention period. If the size of an object is less than 128 KB, it is not monitored and not eligible for auto-tiering. Smaller objects can be stored, but they are always charged at the Frequent Access tier rates in the S3 Intelligent-Tiering storage class.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html#sc-dynamic-data-access\">Storage class for automatically optimizing frequently and infrequently accessed objects</a>.</p> <p>Operations related to <code>PutBucketIntelligentTieringConfiguration</code> include: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketIntelligentTieringConfiguration.html\">DeleteBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketIntelligentTieringConfiguration.html\">GetBucketIntelligentTieringConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketIntelligentTieringConfigurations.html\">ListBucketIntelligentTieringConfigurations</a> </p> </li> </ul> <note> <p>You only need S3 Intelligent-Tiering enabled on a bucket if you want to automatically move objects stored in the S3 Intelligent-Tiering storage class to the Archive Access or Deep Archive Access tier.</p> </note> <p> <code>PutBucketIntelligentTieringConfiguration</code> has the following special errors:</p> <dl> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> InvalidArgument</p> <p> <i>Cause:</i> Invalid Argument</p> </dd> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> TooManyConfigurations</p> <p> <i>Cause:</i> You are attempting to create a new configuration but have already reached the 1,000-configuration limit. </p> </dd> <dt>HTTP 403 Forbidden Error</dt> <dd> <p> <i>Cause:</i> You are not the owner of the specified bucket, or you do not have the <code>s3:PutIntelligentTieringConfiguration</code> bucket permission to set the configuration on the bucket. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1052,7 +1051,7 @@
         "requestUri":"/{Bucket}?inventory"
       },
       "input":{"shape":"PutBucketInventoryConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the <code>PUT</code> action adds an inventory configuration (identified by the inventory ID) to the bucket. You can have up to 1,000 inventory configurations per bucket. </p> <p>Amazon S3 inventory generates inventories of the objects in the bucket on a daily or weekly basis, and the results are published to a flat file. The bucket that is inventoried is called the <i>source</i> bucket, and the bucket where the inventory flat file is stored is called the <i>destination</i> bucket. The <i>destination</i> bucket must be in the same Amazon Web Services Region as the <i>source</i> bucket. </p> <p>When you configure an inventory for a <i>source</i> bucket, you specify the <i>destination</i> bucket where you want the inventory to be stored, and whether to generate the inventory daily or weekly. You can also configure what object metadata to include and whether to inventory all object versions or only current versions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a> in the Amazon S3 User Guide.</p> <important> <p>You must create a bucket policy on the <i>destination</i> bucket to grant permissions to Amazon S3 to write objects to the bucket in the defined location. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9\"> Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have permission to perform the <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this permission by default and can grant this permission to others. </p> <p>The <code>s3:PutInventoryConfiguration</code> permission allows a user to create an <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html\">S3 Inventory</a> report that includes all object metadata fields available and to specify the destination bucket to store the inventory. A user with read access to objects in the destination bucket can also access all object metadata fields that are available in the inventory report. </p> <p>To restrict access to an inventory report, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-10\">Restricting access to an Amazon S3 Inventory report</a> in the <i>Amazon S3 User Guide</i>. For more information about the metadata fields available in S3 Inventory, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html#storage-inventory-contents\">Amazon S3 Inventory lists</a> in the <i>Amazon S3 User Guide</i>. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions related to bucket subresource operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Identity and access management in Amazon S3</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p> <code>PutBucketInventoryConfiguration</code> has the following special errors:</p> <dl> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> InvalidArgument</p> <p> <i>Cause:</i> Invalid Argument</p> </dd> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> TooManyConfigurations</p> <p> <i>Cause:</i> You are attempting to create a new configuration but have already reached the 1,000-configuration limit. </p> </dd> <dt>HTTP 403 Forbidden Error</dt> <dd> <p> <i>Cause:</i> You are not the owner of the specified bucket, or you do not have the <code>s3:PutInventoryConfiguration</code> bucket permission to set the configuration on the bucket. </p> </dd> </dl> <p>The following operations are related to <code>PutBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This implementation of the <code>PUT</code> action adds an S3 Inventory configuration (identified by the inventory ID) to the bucket. You can have up to 1,000 inventory configurations per bucket. </p> <p>Amazon S3 inventory generates inventories of the objects in the bucket on a daily or weekly basis, and the results are published to a flat file. The bucket that is inventoried is called the <i>source</i> bucket, and the bucket where the inventory flat file is stored is called the <i>destination</i> bucket. The <i>destination</i> bucket must be in the same Amazon Web Services Region as the <i>source</i> bucket. </p> <p>When you configure an inventory for a <i>source</i> bucket, you specify the <i>destination</i> bucket where you want the inventory to be stored, and whether to generate the inventory daily or weekly. You can also configure what object metadata to include and whether to inventory all object versions or only current versions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html\">Amazon S3 Inventory</a> in the Amazon S3 User Guide.</p> <important> <p>You must create a bucket policy on the <i>destination</i> bucket to grant permissions to Amazon S3 to write objects to the bucket in the defined location. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9\"> Granting Permissions for Amazon S3 Inventory and Storage Class Analysis</a>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have permission to perform the <code>s3:PutInventoryConfiguration</code> action. The bucket owner has this permission by default and can grant this permission to others. </p> <p>The <code>s3:PutInventoryConfiguration</code> permission allows a user to create an <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html\">S3 Inventory</a> report that includes all object metadata fields available and to specify the destination bucket to store the inventory. A user with read access to objects in the destination bucket can also access all object metadata fields that are available in the inventory report. </p> <p>To restrict access to an inventory report, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-10\">Restricting access to an Amazon S3 Inventory report</a> in the <i>Amazon S3 User Guide</i>. For more information about the metadata fields available in S3 Inventory, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html#storage-inventory-contents\">Amazon S3 Inventory lists</a> in the <i>Amazon S3 User Guide</i>. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions related to bucket subresource operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Identity and access management in Amazon S3</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p> <code>PutBucketInventoryConfiguration</code> has the following special errors:</p> <dl> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> InvalidArgument</p> <p> <i>Cause:</i> Invalid Argument</p> </dd> <dt>HTTP 400 Bad Request Error</dt> <dd> <p> <i>Code:</i> TooManyConfigurations</p> <p> <i>Cause:</i> You are attempting to create a new configuration but have already reached the 1,000-configuration limit. </p> </dd> <dt>HTTP 403 Forbidden Error</dt> <dd> <p> <i>Cause:</i> You are not the owner of the specified bucket, or you do not have the <code>s3:PutInventoryConfiguration</code> bucket permission to set the configuration on the bucket. </p> </dd> </dl> <p>The following operations are related to <code>PutBucketInventoryConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketInventoryConfiguration.html\">GetBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketInventoryConfiguration.html\">DeleteBucketInventoryConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketInventoryConfigurations.html\">ListBucketInventoryConfigurations</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1064,8 +1063,7 @@
         "requestUri":"/{Bucket}?lifecycle"
       },
       "input":{"shape":"PutBucketLifecycleRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <important> <p>For an updated version of this API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a>. This version has been deprecated. Existing lifecycle configurations will work. For new lifecycle configurations, use the updated API. </p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> in the <i>Amazon S3 User Guide</i>. </p> <p>By default, all Amazon S3 resources, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration) are private. Only the resource owner, the Amazon Web Services account that created the resource, can access it. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, users must get the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>You can also explicitly deny permissions. Explicit denial also supersedes any other permissions. If you want to prevent users or accounts from removing or deleting objects from your bucket, you must deny them permissions for the following actions: </p> <ul> <li> <p> <code>s3:DeleteObject</code> </p> </li> <li> <p> <code>s3:DeleteObjectVersion</code> </p> </li> <li> <p> <code>s3:PutLifecycleConfiguration</code> </p> </li> </ul> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For more examples of transitioning objects to storage classes such as STANDARD_IA or ONEZONE_IA, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#lifecycle-configuration-examples\">Examples of Lifecycle Configuration</a>.</p> <p>The following operations are related to <code>PutBucketLifecycle</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a>(Deprecated)</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> </p> </li> <li> <p>By default, a resource owner—in this case, a bucket owner, which is the Amazon Web Services account that created the bucket—can perform any of the operations. A resource owner can also grant others permission to perform the operation. For more information, see the following topics in the Amazon S3 User Guide: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> </p> </li> </ul> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <important> <p>For an updated version of this API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a>. This version has been deprecated. Existing lifecycle configurations will work. For new lifecycle configurations, use the updated API. </p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> in the <i>Amazon S3 User Guide</i>. </p> <p>By default, all Amazon S3 resources, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration) are private. Only the resource owner, the Amazon Web Services account that created the resource, can access it. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, users must get the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>You can also explicitly deny permissions. Explicit denial also supersedes any other permissions. If you want to prevent users or accounts from removing or deleting objects from your bucket, you must deny them permissions for the following actions: </p> <ul> <li> <p> <code>s3:DeleteObject</code> </p> </li> <li> <p> <code>s3:DeleteObjectVersion</code> </p> </li> <li> <p> <code>s3:PutLifecycleConfiguration</code> </p> </li> </ul> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For more examples of transitioning objects to storage classes such as STANDARD_IA or ONEZONE_IA, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#lifecycle-configuration-examples\">Examples of Lifecycle Configuration</a>.</p> <p>The following operations are related to <code>PutBucketLifecycle</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycle.html\">GetBucketLifecycle</a>(Deprecated)</p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> </p> </li> <li> <p>By default, a resource owner—in this case, a bucket owner, which is the Amazon Web Services account that created the bucket—can perform any of the operations. A resource owner can also grant others permission to perform the operation. For more information, see the following topics in the Amazon S3 User Guide: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to your Amazon S3 Resources</a> </p> </li> </ul> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "deprecated":true,
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
@@ -1083,7 +1081,7 @@
       },
       "input":{"shape":"PutBucketLifecycleConfigurationRequest"},
       "output":{"shape":"PutBucketLifecycleConfigurationOutput"},
-      "documentation":"<p>Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration. Keep in mind that this will overwrite an existing lifecycle configuration, so if you want to retain any configuration details, they must be included in the new lifecycle configuration. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html\">Managing your storage lifecycle</a>.</p> <note> <p>Bucket lifecycle configuration now supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API. The previous version of the API supported filtering based only on an object key name prefix, which is supported for backward compatibility. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>.</p> </note> <dl> <dt>Rules</dt> <dt>Permissions</dt> <dt>HTTP Host header syntax</dt> <dd> <p>You specify the lifecycle configuration in your request body. The lifecycle configuration is specified as XML consisting of one or more rules. An Amazon S3 Lifecycle configuration can have up to 1,000 rules. This limit is not adjustable.</p> <p>Bucket lifecycle configuration supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API. The previous version of the API supported filtering based only on an object key name prefix, which is supported for backward compatibility for general purpose buckets. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>. </p> <note> <p>Lifecyle configurations for directory buckets only support expiring objects and cancelling multipart uploads. Expiring of versioned objects,transitions and tag filters are not supported.</p> </note> <p>A lifecycle rule consists of the following:</p> <ul> <li> <p>A filter identifying a subset of objects to which the rule applies. The filter can be based on a key name prefix, object tags, object size, or any combination of these.</p> </li> <li> <p>A status indicating whether the rule is in effect.</p> </li> <li> <p>One or more lifecycle transition and expiration actions that you want Amazon S3 to perform on the objects identified by the filter. If the state of your bucket is versioning-enabled or versioning-suspended, you can have many versions of the same object (one current version and zero or more noncurrent versions). Amazon S3 provides predefined actions that you can specify for current and noncurrent object versions.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html\">Lifecycle Configuration Elements</a>.</p> </dd> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>You can also explicitly deny permissions. An explicit deny also supersedes any other permissions. If you want to block users or accounts from removing or deleting objects from your bucket, you must deny them permissions for the following actions:</p> <ul> <li> <p> <code>s3:DeleteObject</code> </p> </li> <li> <p> <code>s3:DeleteObjectVersion</code> </p> </li> <li> <p> <code>s3:PutLifecycleConfiguration</code> </p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:PutLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> <p>The following operations are related to <code>PutBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul> </dd> </dl>",
+      "documentation":"<p>Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration. Keep in mind that this will overwrite an existing lifecycle configuration, so if you want to retain any configuration details, they must be included in the new lifecycle configuration. For information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html\">Managing your storage lifecycle</a>.</p> <note> <p>Bucket lifecycle configuration now supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API. The previous version of the API supported filtering based only on an object key name prefix, which is supported for backward compatibility. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>.</p> </note> <dl> <dt>Rules</dt> <dt>Permissions</dt> <dt>HTTP Host header syntax</dt> <dd> <p>You specify the lifecycle configuration in your request body. The lifecycle configuration is specified as XML consisting of one or more rules. An Amazon S3 Lifecycle configuration can have up to 1,000 rules. This limit is not adjustable.</p> <p>Bucket lifecycle configuration supports specifying a lifecycle rule using an object key name prefix, one or more object tags, object size, or any combination of these. Accordingly, this section describes the latest API. The previous version of the API supported filtering based only on an object key name prefix, which is supported for backward compatibility for general purpose buckets. For the related API description, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html\">PutBucketLifecycle</a>. </p> <note> <p>Lifecyle configurations for directory buckets only support expiring objects and cancelling multipart uploads. Expiring of versioned objects,transitions and tag filters are not supported.</p> </note> <p>A lifecycle rule consists of the following:</p> <ul> <li> <p>A filter identifying a subset of objects to which the rule applies. The filter can be based on a key name prefix, object tags, object size, or any combination of these.</p> </li> <li> <p>A status indicating whether the rule is in effect.</p> </li> <li> <p>One or more lifecycle transition and expiration actions that you want Amazon S3 to perform on the objects identified by the filter. If the state of your bucket is versioning-enabled or versioning-suspended, you can have many versions of the same object (one current version and zero or more noncurrent versions). Amazon S3 provides predefined actions that you can specify for current and noncurrent object versions.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html\">Lifecycle Configuration Elements</a>.</p> </dd> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - By default, all Amazon S3 resources are private, including buckets, objects, and related subresources (for example, lifecycle configuration and website configuration). Only the resource owner (that is, the Amazon Web Services account that created it) can access the resource. The resource owner can optionally grant access permissions to others by writing an access policy. For this operation, a user must have the <code>s3:PutLifecycleConfiguration</code> permission.</p> <p>You can also explicitly deny permissions. An explicit deny also supersedes any other permissions. If you want to block users or accounts from removing or deleting objects from your bucket, you must deny them permissions for the following actions:</p> <ul> <li> <p> <code>s3:DeleteObject</code> </p> </li> <li> <p> <code>s3:DeleteObjectVersion</code> </p> </li> <li> <p> <code>s3:PutLifecycleConfiguration</code> </p> <p>For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> </li> </ul> </li> </ul> <ul> <li> <p> <b>Directory bucket permissions</b> - You must have the <code>s3express:PutLifecycleConfiguration</code> permission in an IAM identity-based policy to use this operation. Cross-account access to this API operation isn't supported. The resource owner can optionally grant access permissions to others by creating a role or user for them as long as they are within the same account as the owner and resource.</p> <p>For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Authorizing Regional endpoint APIs with IAM</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> </li> </ul> </dd> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> <p>The following operations are related to <code>PutBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> </p> </li> </ul> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1099,8 +1097,7 @@
         "requestUri":"/{Bucket}?logging"
       },
       "input":{"shape":"PutBucketLoggingRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTlogging.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Set the logging parameters for a bucket and to specify permissions for who can view and modify the logging parameters. All logs are saved to buckets in the same Amazon Web Services Region as the source bucket. To set the logging status of a bucket, you must be the bucket owner.</p> <p>The bucket owner is automatically granted FULL_CONTROL to all logs. You use the <code>Grantee</code> request element to grant access to other people. The <code>Permissions</code> request element specifies the kind of access the grantee has to the logs.</p> <important> <p>If the target bucket for log delivery uses the bucket owner enforced setting for S3 Object Ownership, you can't use the <code>Grantee</code> request element to grant access to others. Permissions can only be granted using policies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html#grant-log-delivery-permissions-general\">Permissions for server access log delivery</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (by using request elements) in the following ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p> <code>DisplayName</code> is optional and ignored in the request.</p> </li> <li> <p>By Email address:</p> <p> <code> &lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the <code>CanonicalUser</code> and, in a response to a <code>GETObjectAcl</code> request, appears as the CanonicalUser.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> </ul> </dd> </dl> <p>To enable logging, you use <code>LoggingEnabled</code> and its children request elements. To disable logging, you use an empty <code>BucketLoggingStatus</code> request element:</p> <p> <code>&lt;BucketLoggingStatus xmlns=\"http://doc.s3.amazonaws.com/2006-03-01\" /&gt;</code> </p> <p>For more information about server access logging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html\">Server Access Logging</a> in the <i>Amazon S3 User Guide</i>. </p> <p>For more information about creating a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a>. For more information about returning the logging status of a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html\">GetBucketLogging</a>.</p> <p>The following operations are related to <code>PutBucketLogging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html\">GetBucketLogging</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Set the logging parameters for a bucket and to specify permissions for who can view and modify the logging parameters. All logs are saved to buckets in the same Amazon Web Services Region as the source bucket. To set the logging status of a bucket, you must be the bucket owner.</p> <p>The bucket owner is automatically granted FULL_CONTROL to all logs. You use the <code>Grantee</code> request element to grant access to other people. The <code>Permissions</code> request element specifies the kind of access the grantee has to the logs.</p> <important> <p>If the target bucket for log delivery uses the bucket owner enforced setting for S3 Object Ownership, you can't use the <code>Grantee</code> request element to grant access to others. Permissions can only be granted using policies. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html#grant-log-delivery-permissions-general\">Permissions for server access log delivery</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (by using request elements) in the following ways. For examples of how to specify these grantee values in JSON format, see the Amazon Web Services CLI example in <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html\"> Enabling Amazon S3 server access logging</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p> <code>DisplayName</code> is optional and ignored in the request.</p> </li> <li> <p>By Email address:</p> <p> <code> &lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;&lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the <code>CanonicalUser</code> and, in a response to a <code>GETObjectAcl</code> request, appears as the CanonicalUser.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> </ul> </dd> </dl> <p>To enable logging, you use <code>LoggingEnabled</code> and its children request elements. To disable logging, you use an empty <code>BucketLoggingStatus</code> request element:</p> <p> <code>&lt;BucketLoggingStatus xmlns=\"http://doc.s3.amazonaws.com/2006-03-01\" /&gt;</code> </p> <p>For more information about server access logging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html\">Server Access Logging</a> in the <i>Amazon S3 User Guide</i>. </p> <p>For more information about creating a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a>. For more information about returning the logging status of a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html\">GetBucketLogging</a>.</p> <p>The following operations are related to <code>PutBucketLogging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLogging.html\">GetBucketLogging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1116,7 +1113,7 @@
         "requestUri":"/{Bucket}?metrics"
       },
       "input":{"shape":"PutBucketMetricsConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets a metrics configuration (specified by the metrics configuration ID) for the bucket. You can have up to 1,000 metrics configurations per bucket. If you're updating an existing metrics configuration, note that this is a full replacement of the existing metrics configuration. If you don't include the elements you want to keep, they are erased.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>PutBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> </ul> <p> <code>PutBucketMetricsConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>TooManyConfigurations</code> </p> <ul> <li> <p>Description: You are attempting to create a new configuration but have already reached the 1,000-configuration limit.</p> </li> <li> <p>HTTP Status Code: HTTP 400 Bad Request</p> </li> </ul> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets a metrics configuration (specified by the metrics configuration ID) for the bucket. You can have up to 1,000 metrics configurations per bucket. If you're updating an existing metrics configuration, note that this is a full replacement of the existing metrics configuration. If you don't include the elements you want to keep, they are erased.</p> <p>To use this operation, you must have permissions to perform the <code>s3:PutMetricsConfiguration</code> action. The bucket owner has this permission by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>For information about CloudWatch request metrics for Amazon S3, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html\">Monitoring Metrics with Amazon CloudWatch</a>.</p> <p>The following operations are related to <code>PutBucketMetricsConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetricsConfiguration.html\">DeleteBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetricsConfiguration.html\">GetBucketMetricsConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBucketMetricsConfigurations.html\">ListBucketMetricsConfigurations</a> </p> </li> </ul> <p> <code>PutBucketMetricsConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>TooManyConfigurations</code> </p> <ul> <li> <p>Description: You are attempting to create a new configuration but have already reached the 1,000-configuration limit.</p> </li> <li> <p>HTTP Status Code: HTTP 400 Bad Request</p> </li> </ul> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1128,7 +1125,6 @@
         "requestUri":"/{Bucket}?notification"
       },
       "input":{"shape":"PutBucketNotificationRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTnotification.html",
       "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> No longer used, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketNotificationConfiguration.html\">PutBucketNotificationConfiguration</a> operation.</p>",
       "deprecated":true,
       "httpChecksum":{
@@ -1146,7 +1142,7 @@
         "requestUri":"/{Bucket}?notification"
       },
       "input":{"shape":"PutBucketNotificationConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Enables notifications of specified events for a bucket. For more information about event notifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Event Notifications</a>.</p> <p>Using this API, you can replace an existing notification configuration. The configuration is an XML file that defines the event types that you want Amazon S3 to publish and the destination where you want Amazon S3 to publish an event notification when it detects an event of the specified type.</p> <p>By default, your bucket has no event notifications configured. That is, the notification configuration will be an empty <code>NotificationConfiguration</code>.</p> <p> <code>&lt;NotificationConfiguration&gt;</code> </p> <p> <code>&lt;/NotificationConfiguration&gt;</code> </p> <p>This action replaces the existing notification configuration with the configuration you include in the request body.</p> <p>After Amazon S3 receives this request, it first verifies that any Amazon Simple Notification Service (Amazon SNS) or Amazon Simple Queue Service (Amazon SQS) destination exists, and that the bucket owner has permission to publish to it by sending a test notification. In the case of Lambda destinations, Amazon S3 verifies that the Lambda function permissions grant Amazon S3 permission to invoke the function from the Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Notifications for Amazon S3 Events</a>.</p> <p>You can disable notifications by adding the empty NotificationConfiguration element.</p> <p>For more information about the number of event notification configurations that you can create per bucket, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/s3.html#limits_s3\">Amazon S3 service quotas</a> in <i>Amazon Web Services General Reference</i>.</p> <p>By default, only the bucket owner can configure notifications on a bucket. However, bucket owners can use a bucket policy to grant permission to other users to set this configuration with the required <code>s3:PutBucketNotification</code> permission.</p> <note> <p>The PUT notification is an atomic operation. For example, suppose your notification configuration includes SNS topic, SQS queue, and Lambda function configurations. When you send a PUT request with this configuration, Amazon S3 sends test messages to your SNS topic. If the message fails, the entire PUT action will fail, and Amazon S3 will not add the configuration to your bucket.</p> </note> <p>If the configuration in the request body includes only one <code>TopicConfiguration</code> specifying only the <code>s3:ReducedRedundancyLostObject</code> event type, the response will also include the <code>x-amz-sns-test-message-id</code> header containing the message ID of the test notification sent to the topic.</p> <p>The following action is related to <code>PutBucketNotificationConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html\">GetBucketNotificationConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Enables notifications of specified events for a bucket. For more information about event notifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Event Notifications</a>.</p> <p>Using this API, you can replace an existing notification configuration. The configuration is an XML file that defines the event types that you want Amazon S3 to publish and the destination where you want Amazon S3 to publish an event notification when it detects an event of the specified type.</p> <p>By default, your bucket has no event notifications configured. That is, the notification configuration will be an empty <code>NotificationConfiguration</code>.</p> <p> <code>&lt;NotificationConfiguration&gt;</code> </p> <p> <code>&lt;/NotificationConfiguration&gt;</code> </p> <p>This action replaces the existing notification configuration with the configuration you include in the request body.</p> <p>After Amazon S3 receives this request, it first verifies that any Amazon Simple Notification Service (Amazon SNS) or Amazon Simple Queue Service (Amazon SQS) destination exists, and that the bucket owner has permission to publish to it by sending a test notification. In the case of Lambda destinations, Amazon S3 verifies that the Lambda function permissions grant Amazon S3 permission to invoke the function from the Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Notifications for Amazon S3 Events</a>.</p> <p>You can disable notifications by adding the empty NotificationConfiguration element.</p> <p>For more information about the number of event notification configurations that you can create per bucket, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/s3.html#limits_s3\">Amazon S3 service quotas</a> in <i>Amazon Web Services General Reference</i>.</p> <p>By default, only the bucket owner can configure notifications on a bucket. However, bucket owners can use a bucket policy to grant permission to other users to set this configuration with the required <code>s3:PutBucketNotification</code> permission.</p> <note> <p>The PUT notification is an atomic operation. For example, suppose your notification configuration includes SNS topic, SQS queue, and Lambda function configurations. When you send a PUT request with this configuration, Amazon S3 sends test messages to your SNS topic. If the message fails, the entire PUT action will fail, and Amazon S3 will not add the configuration to your bucket.</p> </note> <p>If the configuration in the request body includes only one <code>TopicConfiguration</code> specifying only the <code>s3:ReducedRedundancyLostObject</code> event type, the response will also include the <code>x-amz-sns-test-message-id</code> header containing the message ID of the test notification sent to the topic.</p> <p>The following action is related to <code>PutBucketNotificationConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html\">GetBucketNotificationConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1158,8 +1154,11 @@
         "requestUri":"/{Bucket}?ownershipControls"
       },
       "input":{"shape":"PutBucketOwnershipControlsRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates or modifies <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-with-s3-actions.html\">Specifying permissions in a policy</a>. </p> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/user-guide/about-object-ownership.html\">Using object ownership</a>. </p> <p>The following operations are related to <code>PutBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>GetBucketOwnershipControls</a> </p> </li> <li> <p> <a>DeleteBucketOwnershipControls</a> </p> </li> </ul>",
-      "httpChecksum":{"requestChecksumRequired":true},
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates or modifies <code>OwnershipControls</code> for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketOwnershipControls</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-with-s3-actions.html\">Specifying permissions in a policy</a>. </p> <p>For information about Amazon S3 Object Ownership, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/user-guide/about-object-ownership.html\">Using object ownership</a>. </p> <p>The following operations are related to <code>PutBucketOwnershipControls</code>:</p> <ul> <li> <p> <a>GetBucketOwnershipControls</a> </p> </li> <li> <p> <a>DeleteBucketOwnershipControls</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "httpChecksum":{
+        "requestAlgorithmMember":"ChecksumAlgorithm",
+        "requestChecksumRequired":true
+      },
       "staticContextParams":{
         "UseS3ExpressControlEndpoint":{"value":true}
       }
@@ -1171,8 +1170,7 @@
         "requestUri":"/{Bucket}?policy"
       },
       "input":{"shape":"PutBucketPolicyRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTpolicy.html",
-      "documentation":"<p>Applies an Amazon S3 bucket policy to an Amazon S3 bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>PutBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>PutBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Example bucket policies</dt> <dd> <p> <b>General purpose buckets example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html\">Bucket policy examples</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory bucket example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>PutBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul>",
+      "documentation":"<p>Applies an Amazon S3 bucket policy to an Amazon S3 bucket.</p> <note> <p> <b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Regional endpoint. These endpoints support path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must both have the <code>PutBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this operation.</p> <p>If you don't have <code>PutBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error.</p> <important> <p>To ensure that bucket owners don't inadvertently lock themselves out of their own buckets, the root principal in a bucket owner's Amazon Web Services account can perform the <code>GetBucketPolicy</code>, <code>PutBucketPolicy</code>, and <code>DeleteBucketPolicy</code> API actions, even if their bucket policy explicitly denies the root principal's access. Bucket owner root principals can only be blocked from performing these API actions by VPC endpoint policies and Amazon Web Services Organizations policies.</p> </important> <ul> <li> <p> <b>General purpose bucket permissions</b> - The <code>s3:PutBucketPolicy</code> permission is required in a policy. For more information about general purpose buckets bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation, you must have the <code>s3express:PutBucketPolicy</code> permission in an IAM identity-based policy instead of a bucket policy. Cross-account access to this API operation isn't supported. This operation can only be performed by the Amazon Web Services account that owns the resource. For more information about directory bucket policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam.html\">Amazon Web Services Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Example bucket policies</dt> <dd> <p> <b>General purpose buckets example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html\">Bucket policy examples</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory bucket example bucket policies</b> - See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>PutBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1188,7 +1186,7 @@
         "requestUri":"/{Bucket}?replication"
       },
       "input":{"shape":"PutBucketReplicationRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> Creates a replication configuration or replaces an existing one. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>. </p> <p>Specify the replication configuration in the request body. In the replication configuration, you provide the name of the destination bucket or buckets where you want Amazon S3 to replicate objects, the IAM role that Amazon S3 can assume to replicate objects on your behalf, and other relevant information. You can invoke this request for a specific Amazon Web Services Region by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion\"> <code>aws:RequestedRegion</code> </a> condition key.</p> <p>A replication configuration must include at least one rule, and can contain a maximum of 1,000. Each rule identifies a subset of objects to replicate by filtering the objects in the source bucket. To choose additional subsets of objects to replicate, add a rule for each subset.</p> <p>To specify a subset of the objects in the source bucket to apply a replication rule to, add the Filter element as a child of the Rule element. You can filter objects based on an object key prefix, one or more object tags, or both. When you add the Filter element in the configuration, you must also add the following elements: <code>DeleteMarkerReplication</code>, <code>Status</code>, and <code>Priority</code>.</p> <note> <p>If you are using an earlier version of the replication configuration, Amazon S3 handles replication of delete markers differently. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations\">Backward Compatibility</a>.</p> </note> <p>For information about enabling versioning on a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html\">Using Versioning</a>.</p> <dl> <dt>Handling Replication of Encrypted Objects</dt> <dd> <p>By default, Amazon S3 doesn't replicate objects that are stored at rest using server-side encryption with KMS keys. To replicate Amazon Web Services KMS-encrypted objects, add the following: <code>SourceSelectionCriteria</code>, <code>SseKmsEncryptedObjects</code>, <code>Status</code>, <code>EncryptionConfiguration</code>, and <code>ReplicaKmsKeyID</code>. For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html\">Replicating Objects Created with SSE Using KMS keys</a>.</p> <p>For information on <code>PutBucketReplication</code> errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList\">List of replication-related error codes</a> </p> </dd> <dt>Permissions</dt> <dd> <p>To create a <code>PutBucketReplication</code> request, you must have <code>s3:PutReplicationConfiguration</code> permissions for the bucket. </p> <p>By default, a resource owner, in this case the Amazon Web Services account that created the bucket, can perform this operation. The resource owner can also grant others permissions to perform the operation. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <note> <p>To perform this operation, the user or role performing the action must have the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html\">iam:PassRole</a> permission.</p> </note> </dd> </dl> <p>The following operations are related to <code>PutBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p> Creates a replication configuration or replaces an existing one. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html\">Replication</a> in the <i>Amazon S3 User Guide</i>. </p> <p>Specify the replication configuration in the request body. In the replication configuration, you provide the name of the destination bucket or buckets where you want Amazon S3 to replicate objects, the IAM role that Amazon S3 can assume to replicate objects on your behalf, and other relevant information. You can invoke this request for a specific Amazon Web Services Region by using the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion\"> <code>aws:RequestedRegion</code> </a> condition key.</p> <p>A replication configuration must include at least one rule, and can contain a maximum of 1,000. Each rule identifies a subset of objects to replicate by filtering the objects in the source bucket. To choose additional subsets of objects to replicate, add a rule for each subset.</p> <p>To specify a subset of the objects in the source bucket to apply a replication rule to, add the Filter element as a child of the Rule element. You can filter objects based on an object key prefix, one or more object tags, or both. When you add the Filter element in the configuration, you must also add the following elements: <code>DeleteMarkerReplication</code>, <code>Status</code>, and <code>Priority</code>.</p> <note> <p>If you are using an earlier version of the replication configuration, Amazon S3 handles replication of delete markers differently. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations\">Backward Compatibility</a>.</p> </note> <p>For information about enabling versioning on a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html\">Using Versioning</a>.</p> <dl> <dt>Handling Replication of Encrypted Objects</dt> <dd> <p>By default, Amazon S3 doesn't replicate objects that are stored at rest using server-side encryption with KMS keys. To replicate Amazon Web Services KMS-encrypted objects, add the following: <code>SourceSelectionCriteria</code>, <code>SseKmsEncryptedObjects</code>, <code>Status</code>, <code>EncryptionConfiguration</code>, and <code>ReplicaKmsKeyID</code>. For information about replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html\">Replicating Objects Created with SSE Using KMS keys</a>.</p> <p>For information on <code>PutBucketReplication</code> errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ReplicationErrorCodeList\">List of replication-related error codes</a> </p> </dd> <dt>Permissions</dt> <dd> <p>To create a <code>PutBucketReplication</code> request, you must have <code>s3:PutReplicationConfiguration</code> permissions for the bucket. </p> <p>By default, a resource owner, in this case the Amazon Web Services account that created the bucket, can perform this operation. The resource owner can also grant others permissions to perform the operation. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <note> <p>To perform this operation, the user or role performing the action must have the <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html\">iam:PassRole</a> permission.</p> </note> </dd> </dl> <p>The following operations are related to <code>PutBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1204,8 +1202,7 @@
         "requestUri":"/{Bucket}?requestPayment"
       },
       "input":{"shape":"PutBucketRequestPaymentRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentPUT.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the request payment configuration for a bucket. By default, the bucket owner pays for downloads from the bucket. This configuration parameter enables the bucket owner (only) to specify that the person requesting the download will be charged for the download. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html\">Requester Pays Buckets</a>.</p> <p>The following operations are related to <code>PutBucketRequestPayment</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html\">GetBucketRequestPayment</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the request payment configuration for a bucket. By default, the bucket owner pays for downloads from the bucket. This configuration parameter enables the bucket owner (only) to specify that the person requesting the download will be charged for the download. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html\">Requester Pays Buckets</a>.</p> <p>The following operations are related to <code>PutBucketRequestPayment</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketRequestPayment.html\">GetBucketRequestPayment</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1221,8 +1218,7 @@
         "requestUri":"/{Bucket}?tagging"
       },
       "input":{"shape":"PutBucketTaggingRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTtagging.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the tags for a bucket.</p> <p>Use tags to organize your Amazon Web Services bill to reflect your own cost structure. To do this, sign up to get your Amazon Web Services account bill with tag key values included. Then, to see the cost of combined resources, organize your billing information according to resources with the same tag key values. For example, you can tag several resources with a specific application name, and then organize your billing information to see the total cost of that application across several services. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html\">Cost Allocation and Tagging</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html\">Using Cost Allocation in Amazon S3 Bucket Tags</a>.</p> <note> <p> When this operation sets the tags for a bucket, it will overwrite any current tags the bucket already has. You cannot use this operation to add tags to an existing list of tags.</p> </note> <p>To use this operation, you must have permissions to perform the <code>s3:PutBucketTagging</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>PutBucketTagging</code> has the following special errors. For more Amazon S3 errors see, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html\">Error Responses</a>.</p> <ul> <li> <p> <code>InvalidTag</code> - The tag provided was not a valid tag. This error can occur if the tag did not pass input validation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html\">Using Cost Allocation in Amazon S3 Bucket Tags</a>.</p> </li> <li> <p> <code>MalformedXML</code> - The XML provided does not match the schema.</p> </li> <li> <p> <code>OperationAborted</code> - A conflicting conditional action is currently in progress against this resource. Please try again.</p> </li> <li> <p> <code>InternalError</code> - The service was unable to apply the provided tag to the bucket.</p> </li> </ul> <p>The following operations are related to <code>PutBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the tags for a bucket.</p> <p>Use tags to organize your Amazon Web Services bill to reflect your own cost structure. To do this, sign up to get your Amazon Web Services account bill with tag key values included. Then, to see the cost of combined resources, organize your billing information according to resources with the same tag key values. For example, you can tag several resources with a specific application name, and then organize your billing information to see the total cost of that application across several services. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html\">Cost Allocation and Tagging</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html\">Using Cost Allocation in Amazon S3 Bucket Tags</a>.</p> <note> <p> When this operation sets the tags for a bucket, it will overwrite any current tags the bucket already has. You cannot use this operation to add tags to an existing list of tags.</p> </note> <p>To use this operation, you must have permissions to perform the <code>s3:PutBucketTagging</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p> <code>PutBucketTagging</code> has the following special errors. For more Amazon S3 errors see, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html\">Error Responses</a>.</p> <ul> <li> <p> <code>InvalidTag</code> - The tag provided was not a valid tag. This error can occur if the tag did not pass input validation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CostAllocTagging.html\">Using Cost Allocation in Amazon S3 Bucket Tags</a>.</p> </li> <li> <p> <code>MalformedXML</code> - The XML provided does not match the schema.</p> </li> <li> <p> <code>OperationAborted</code> - A conflicting conditional action is currently in progress against this resource. Please try again.</p> </li> <li> <p> <code>InternalError</code> - The service was unable to apply the provided tag to the bucket.</p> </li> </ul> <p>The following operations are related to <code>PutBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1238,8 +1234,7 @@
         "requestUri":"/{Bucket}?versioning"
       },
       "input":{"shape":"PutBucketVersioningRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <note> <p>When you enable versioning on a bucket for the first time, it might take a short amount of time for the change to be fully propagated. While this change is propagating, you might encounter intermittent <code>HTTP 404 NoSuchKey</code> errors for requests to objects created or updated after enabling versioning. We recommend that you wait for 15 minutes after enabling versioning before issuing write operations (<code>PUT</code> or <code>DELETE</code>) on objects in the bucket. </p> </note> <p>Sets the versioning state of an existing bucket.</p> <p>You can set the versioning state with one of the following values:</p> <p> <b>Enabled</b>—Enables versioning for the objects in the bucket. All objects added to the bucket receive a unique version ID.</p> <p> <b>Suspended</b>—Disables versioning for the objects in the bucket. All objects added to the bucket receive the version ID null.</p> <p>If the versioning state has never been set on a bucket, it has no versioning state; a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a> request does not return a versioning state value.</p> <p>In order to enable MFA Delete, you must be the bucket owner. If you are the bucket owner and want to enable MFA Delete in the bucket versioning configuration, you must include the <code>x-amz-mfa request</code> header and the <code>Status</code> and the <code>MfaDelete</code> request elements in a request to set the versioning state of the bucket.</p> <important> <p>If you have an object expiration lifecycle configuration in your non-versioned bucket and you want to maintain the same permanent delete behavior when you enable versioning, you must add a noncurrent expiration policy. The noncurrent expiration lifecycle configuration will manage the deletes of the noncurrent object versions in the version-enabled bucket. (A version-enabled bucket maintains one current and zero or more noncurrent object versions.) For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config\">Lifecycle and Versioning</a>.</p> </important> <p>The following operations are related to <code>PutBucketVersioning</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <note> <p>When you enable versioning on a bucket for the first time, it might take a short amount of time for the change to be fully propagated. While this change is propagating, you might encounter intermittent <code>HTTP 404 NoSuchKey</code> errors for requests to objects created or updated after enabling versioning. We recommend that you wait for 15 minutes after enabling versioning before issuing write operations (<code>PUT</code> or <code>DELETE</code>) on objects in the bucket. </p> </note> <p>Sets the versioning state of an existing bucket.</p> <p>You can set the versioning state with one of the following values:</p> <p> <b>Enabled</b>—Enables versioning for the objects in the bucket. All objects added to the bucket receive a unique version ID.</p> <p> <b>Suspended</b>—Disables versioning for the objects in the bucket. All objects added to the bucket receive the version ID null.</p> <p>If the versioning state has never been set on a bucket, it has no versioning state; a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a> request does not return a versioning state value.</p> <p>In order to enable MFA Delete, you must be the bucket owner. If you are the bucket owner and want to enable MFA Delete in the bucket versioning configuration, you must include the <code>x-amz-mfa request</code> header and the <code>Status</code> and the <code>MfaDelete</code> request elements in a request to set the versioning state of the bucket.</p> <important> <p>If you have an object expiration lifecycle configuration in your non-versioned bucket and you want to maintain the same permanent delete behavior when you enable versioning, you must add a noncurrent expiration policy. The noncurrent expiration lifecycle configuration will manage the deletes of the noncurrent object versions in the version-enabled bucket. (A version-enabled bucket maintains one current and zero or more noncurrent object versions.) For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config\">Lifecycle and Versioning</a>.</p> </important> <p>The following operations are related to <code>PutBucketVersioning</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucket.html\">DeleteBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1255,8 +1250,7 @@
         "requestUri":"/{Bucket}?website"
       },
       "input":{"shape":"PutBucketWebsiteRequest"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the configuration of the website that is specified in the <code>website</code> subresource. To configure a bucket as a website, you can add this subresource on the bucket with website configuration information such as the file name of the index document and any redirect rules. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>.</p> <p>This PUT action requires the <code>S3:PutBucketWebsite</code> permission. By default, only the bucket owner can configure the website attached to a bucket; however, bucket owners can allow other users to set the website configuration by writing a bucket policy that grants them the <code>S3:PutBucketWebsite</code> permission.</p> <p>To redirect all website requests sent to the bucket's website endpoint, you add a website configuration with the following elements. Because all requests are sent to another website, you don't need to provide index document name for the bucket.</p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p> <code>RedirectAllRequestsTo</code> </p> </li> <li> <p> <code>HostName</code> </p> </li> <li> <p> <code>Protocol</code> </p> </li> </ul> <p>If you want granular control over redirects, you can use the following elements to add routing rules that describe conditions for redirecting requests and information about the redirect destination. In this case, the website configuration must provide an index document for the bucket, because some requests might not be redirected. </p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p> <code>IndexDocument</code> </p> </li> <li> <p> <code>Suffix</code> </p> </li> <li> <p> <code>ErrorDocument</code> </p> </li> <li> <p> <code>Key</code> </p> </li> <li> <p> <code>RoutingRules</code> </p> </li> <li> <p> <code>RoutingRule</code> </p> </li> <li> <p> <code>Condition</code> </p> </li> <li> <p> <code>HttpErrorCodeReturnedEquals</code> </p> </li> <li> <p> <code>KeyPrefixEquals</code> </p> </li> <li> <p> <code>Redirect</code> </p> </li> <li> <p> <code>Protocol</code> </p> </li> <li> <p> <code>HostName</code> </p> </li> <li> <p> <code>ReplaceKeyPrefixWith</code> </p> </li> <li> <p> <code>ReplaceKeyWith</code> </p> </li> <li> <p> <code>HttpRedirectCode</code> </p> </li> </ul> <p>Amazon S3 has a limitation of 50 routing rules per website configuration. If you require more than 50 routing rules, you can use object redirect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html\">Configuring an Object Redirect</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The maximum request length is limited to 128 KB.</p>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the configuration of the website that is specified in the <code>website</code> subresource. To configure a bucket as a website, you can add this subresource on the bucket with website configuration information such as the file name of the index document and any redirect rules. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html\">Hosting Websites on Amazon S3</a>.</p> <p>This PUT action requires the <code>S3:PutBucketWebsite</code> permission. By default, only the bucket owner can configure the website attached to a bucket; however, bucket owners can allow other users to set the website configuration by writing a bucket policy that grants them the <code>S3:PutBucketWebsite</code> permission.</p> <p>To redirect all website requests sent to the bucket's website endpoint, you add a website configuration with the following elements. Because all requests are sent to another website, you don't need to provide index document name for the bucket.</p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p> <code>RedirectAllRequestsTo</code> </p> </li> <li> <p> <code>HostName</code> </p> </li> <li> <p> <code>Protocol</code> </p> </li> </ul> <p>If you want granular control over redirects, you can use the following elements to add routing rules that describe conditions for redirecting requests and information about the redirect destination. In this case, the website configuration must provide an index document for the bucket, because some requests might not be redirected. </p> <ul> <li> <p> <code>WebsiteConfiguration</code> </p> </li> <li> <p> <code>IndexDocument</code> </p> </li> <li> <p> <code>Suffix</code> </p> </li> <li> <p> <code>ErrorDocument</code> </p> </li> <li> <p> <code>Key</code> </p> </li> <li> <p> <code>RoutingRules</code> </p> </li> <li> <p> <code>RoutingRule</code> </p> </li> <li> <p> <code>Condition</code> </p> </li> <li> <p> <code>HttpErrorCodeReturnedEquals</code> </p> </li> <li> <p> <code>KeyPrefixEquals</code> </p> </li> <li> <p> <code>Redirect</code> </p> </li> <li> <p> <code>Protocol</code> </p> </li> <li> <p> <code>HostName</code> </p> </li> <li> <p> <code>ReplaceKeyPrefixWith</code> </p> </li> <li> <p> <code>ReplaceKeyWith</code> </p> </li> <li> <p> <code>HttpRedirectCode</code> </p> </li> </ul> <p>Amazon S3 has a limitation of 50 routing rules per website configuration. If you require more than 50 routing rules, you can use object redirect. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html\">Configuring an Object Redirect</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The maximum request length is limited to 128 KB.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1279,8 +1273,7 @@
         {"shape":"TooManyParts"},
         {"shape":"EncryptionTypeMismatch"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html",
-      "documentation":"<p>Adds an object to a bucket.</p> <note> <ul> <li> <p>Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket. You cannot use <code>PutObject</code> to only update a single piece of metadata for an existing object. You must put the entire object with updated metadata if you want to update some values.</p> </li> <li> <p>If your bucket uses the bucket owner enforced setting for Object Ownership, ACLs are disabled and no longer affect permissions. All objects written to the bucket by any account will be owned by the bucket owner.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. However, Amazon S3 provides features that can modify this behavior:</p> <ul> <li> <p> <b>S3 Object Lock</b> - To prevent objects from being deleted or overwritten, you can use <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html\">Amazon S3 Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note> </li> <li> <p> <b>S3 Versioning</b> - When you enable versioning for a bucket, if Amazon S3 receives multiple write requests for the same object simultaneously, it stores all versions of the objects. For each write request that is made to the same object, Amazon S3 automatically generates a unique version ID of that object being stored in Amazon S3. You can retrieve, replace, or delete any version of the object. For more information about versioning, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/AddingObjectstoVersioningEnabledBuckets.html\">Adding Objects to Versioning-Enabled Buckets</a> in the <i>Amazon S3 User Guide</i>. For information about returning the versioning state of a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a>. </p> <note> <p>This functionality is not supported for directory buckets.</p> </note> </li> </ul> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>PutObject</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:PutObject</code> </b> - To successfully complete the <code>PutObject</code> request, you must always have the <code>s3:PutObject</code> permission on a bucket to add an object to it.</p> </li> <li> <p> <b> <code>s3:PutObjectAcl</code> </b> - To successfully change the objects ACL of your <code>PutObject</code> request, you must have the <code>s3:PutObjectAcl</code>.</p> </li> <li> <p> <b> <code>s3:PutObjectTagging</code> </b> - To successfully set the tag-set with your <code>PutObject</code> request, you must have the <code>s3:PutObjectTagging</code>.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Data integrity with Content-MD5</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - To ensure that data is not corrupted traversing the network, use the <code>Content-MD5</code> header. When you use this header, Amazon S3 checks the object against the provided MD5 value and, if they do not match, Amazon S3 returns an error. Alternatively, when the object's ETag is its MD5 digest, you can calculate the MD5 while putting the object to Amazon S3 and compare the returned ETag to the calculated MD5 value.</p> </li> <li> <p> <b>Directory bucket</b> - This functionality is not supported for directory buckets.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For more information about related Amazon S3 APIs, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <p>Adds an object to a bucket.</p> <note> <ul> <li> <p>Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket. You cannot use <code>PutObject</code> to only update a single piece of metadata for an existing object. You must put the entire object with updated metadata if you want to update some values.</p> </li> <li> <p>If your bucket uses the bucket owner enforced setting for Object Ownership, ACLs are disabled and no longer affect permissions. All objects written to the bucket by any account will be owned by the bucket owner.</p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note> <p>Amazon S3 is a distributed system. If it receives multiple write requests for the same object simultaneously, it overwrites all but the last object written. However, Amazon S3 provides features that can modify this behavior:</p> <ul> <li> <p> <b>S3 Object Lock</b> - To prevent objects from being deleted or overwritten, you can use <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html\">Amazon S3 Object Lock</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note> </li> <li> <p> <b>If-None-Match</b> - Uploads the object only if the object key name does not already exist in the specified bucket. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a conflicting operation occurs during the upload, S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure, retry the upload.</p> <p>Expects the * character (asterisk).</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/conditional-requests.html\">Add preconditions to S3 operations with conditional requests</a> in the <i>Amazon S3 User Guide</i> or <a href=\"https://datatracker.ietf.org/doc/rfc7232/\">RFC 7232</a>. </p> <note> <p>This functionality is not supported for S3 on Outposts.</p> </note> </li> <li> <p> <b>S3 Versioning</b> - When you enable versioning for a bucket, if Amazon S3 receives multiple write requests for the same object simultaneously, it stores all versions of the objects. For each write request that is made to the same object, Amazon S3 automatically generates a unique version ID of that object being stored in Amazon S3. You can retrieve, replace, or delete any version of the object. For more information about versioning, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/AddingObjectstoVersioningEnabledBuckets.html\">Adding Objects to Versioning-Enabled Buckets</a> in the <i>Amazon S3 User Guide</i>. For information about returning the versioning state of a bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html\">GetBucketVersioning</a>. </p> <note> <p>This functionality is not supported for directory buckets.</p> </note> </li> </ul> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - The following permissions are required in your policies when your <code>PutObject</code> request includes specific headers.</p> <ul> <li> <p> <b> <code>s3:PutObject</code> </b> - To successfully complete the <code>PutObject</code> request, you must always have the <code>s3:PutObject</code> permission on a bucket to add an object to it.</p> </li> <li> <p> <b> <code>s3:PutObjectAcl</code> </b> - To successfully change the objects ACL of your <code>PutObject</code> request, you must have the <code>s3:PutObjectAcl</code>.</p> </li> <li> <p> <b> <code>s3:PutObjectTagging</code> </b> - To successfully set the tag-set with your <code>PutObject</code> request, you must have the <code>s3:PutObjectTagging</code>.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Data integrity with Content-MD5</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - To ensure that data is not corrupted traversing the network, use the <code>Content-MD5</code> header. When you use this header, Amazon S3 checks the object against the provided MD5 value and, if they do not match, Amazon S3 returns an error. Alternatively, when the object's ETag is its MD5 digest, you can calculate the MD5 while putting the object to Amazon S3 and compare the returned ETag to the calculated MD5 value.</p> </li> <li> <p> <b>Directory bucket</b> - This functionality is not supported for directory buckets.</p> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For more information about related Amazon S3 APIs, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html\">DeleteObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":false
@@ -1297,8 +1290,7 @@
       "errors":[
         {"shape":"NoSuchKey"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUTacl.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Uses the <code>acl</code> subresource to set the access control list (ACL) permissions for a new or existing object in an S3 bucket. You must have the <code>WRITE_ACP</code> permission to set the ACL of an object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions\">What permissions can I grant?</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>Depending on your application needs, you can choose to set the ACL on an object using either the request body or the headers. For example, if you have an existing application that updates a bucket ACL using the request body, you can continue to use that approach. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. You must use policies to grant access to your bucket and the objects in it. Requests to set ACLs or update ACLs fail and return the <code>AccessControlListNotSupported</code> error code. Requests to read ACLs are still supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling object ownership</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>You can set access permissions using one of the following methods:</p> <ul> <li> <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and permissions. Specify the canned ACL name as the value of <code>x-amz-ac</code>l. If you use this header, you cannot use other access control-specific headers in your request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL\">Canned ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code> headers. When using these headers, you specify explicit access permissions and grantees (Amazon Web Services accounts or Amazon S3 groups) who will receive the permission. If you use these ACL-specific headers, you cannot use <code>x-amz-acl</code> header to set a canned ACL. These parameters map to the set of permissions that Amazon S3 supports in an ACL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code> – if the value specified is the canonical user ID of an Amazon Web Services account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is the email address of an Amazon Web Services account</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> <p>For example, the following <code>x-amz-grant-read</code> header grants list objects permission to the two Amazon Web Services accounts identified by their email addresses.</p> <p> <code>x-amz-grant-read: emailAddress=\"xyz@amazon.com\", emailAddress=\"abc@amazon.com\" </code> </p> </li> </ul> <p>You can use either a canned ACL or specify access permissions explicitly. You cannot do both.</p> </dd> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (using request elements) in the following ways:</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the request.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET Object acl request, appears as the CanonicalUser.</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> </dd> <dt>Versioning</dt> <dd> <p>The ACL of an object is set at the object version level. By default, PUT sets the ACL of the current version of an object. To set the ACL of a different version, use the <code>versionId</code> subresource.</p> </dd> </dl> <p>The following operations are related to <code>PutObjectAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul>",
+      "documentation":"<important> <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p> </important> <note> <p>This operation is not supported for directory buckets.</p> </note> <p>Uses the <code>acl</code> subresource to set the access control list (ACL) permissions for a new or existing object in an S3 bucket. You must have the <code>WRITE_ACP</code> permission to set the ACL of an object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#permissions\">What permissions can I grant?</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>Depending on your application needs, you can choose to set the ACL on an object using either the request body or the headers. For example, if you have an existing application that updates a bucket ACL using the request body, you can continue to use that approach. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>If your bucket uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. You must use policies to grant access to your bucket and the objects in it. Requests to set ACLs or update ACLs fail and return the <code>AccessControlListNotSupported</code> error code. Requests to read ACLs are still supported. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html\">Controlling object ownership</a> in the <i>Amazon S3 User Guide</i>.</p> </important> <dl> <dt>Permissions</dt> <dd> <p>You can set access permissions using one of the following methods:</p> <ul> <li> <p>Specify a canned ACL with the <code>x-amz-acl</code> request header. Amazon S3 supports a set of predefined ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and permissions. Specify the canned ACL name as the value of <code>x-amz-ac</code>l. If you use this header, you cannot use other access control-specific headers in your request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL\">Canned ACL</a>.</p> </li> <li> <p>Specify access permissions explicitly with the <code>x-amz-grant-read</code>, <code>x-amz-grant-read-acp</code>, <code>x-amz-grant-write-acp</code>, and <code>x-amz-grant-full-control</code> headers. When using these headers, you specify explicit access permissions and grantees (Amazon Web Services accounts or Amazon S3 groups) who will receive the permission. If you use these ACL-specific headers, you cannot use <code>x-amz-acl</code> header to set a canned ACL. These parameters map to the set of permissions that Amazon S3 supports in an ACL. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html\">Access Control List (ACL) Overview</a>.</p> <p>You specify each grantee as a type=value pair, where the type is one of the following:</p> <ul> <li> <p> <code>id</code> – if the value specified is the canonical user ID of an Amazon Web Services account</p> </li> <li> <p> <code>uri</code> – if you are granting permissions to a predefined group</p> </li> <li> <p> <code>emailAddress</code> – if the value specified is the email address of an Amazon Web Services account</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> <p>For example, the following <code>x-amz-grant-read</code> header grants list objects permission to the two Amazon Web Services accounts identified by their email addresses.</p> <p> <code>x-amz-grant-read: emailAddress=\"xyz@amazon.com\", emailAddress=\"abc@amazon.com\" </code> </p> </li> </ul> <p>You can use either a canned ACL or specify access permissions explicitly. You cannot do both.</p> </dd> <dt>Grantee Values</dt> <dd> <p>You can specify the person (grantee) to whom you're assigning access rights (using request elements) in the following ways. For examples of how to specify these grantee values in JSON format, see the Amazon Web Services CLI example in <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html\"> Enabling Amazon S3 server access logging</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p>By the person's ID:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"&gt;&lt;ID&gt;&lt;&gt;ID&lt;&gt;&lt;/ID&gt;&lt;DisplayName&gt;&lt;&gt;GranteesEmail&lt;&gt;&lt;/DisplayName&gt; &lt;/Grantee&gt;</code> </p> <p>DisplayName is optional and ignored in the request.</p> </li> <li> <p>By URI:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"Group\"&gt;&lt;URI&gt;&lt;&gt;http://acs.amazonaws.com/groups/global/AuthenticatedUsers&lt;&gt;&lt;/URI&gt;&lt;/Grantee&gt;</code> </p> </li> <li> <p>By Email address:</p> <p> <code>&lt;Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"AmazonCustomerByEmail\"&gt;&lt;EmailAddress&gt;&lt;&gt;Grantees@email.com&lt;&gt;&lt;/EmailAddress&gt;lt;/Grantee&gt;</code> </p> <p>The grantee is resolved to the CanonicalUser and, in a response to a GET Object acl request, appears as the CanonicalUser.</p> <note> <p>Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions: </p> <ul> <li> <p>US East (N. Virginia)</p> </li> <li> <p>US West (N. California)</p> </li> <li> <p> US West (Oregon)</p> </li> <li> <p> Asia Pacific (Singapore)</p> </li> <li> <p>Asia Pacific (Sydney)</p> </li> <li> <p>Asia Pacific (Tokyo)</p> </li> <li> <p>Europe (Ireland)</p> </li> <li> <p>South America (São Paulo)</p> </li> </ul> <p>For a list of all the Amazon S3 supported Regions and endpoints, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a> in the Amazon Web Services General Reference.</p> </note> </li> </ul> </dd> <dt>Versioning</dt> <dd> <p>The ACL of an object is set at the object version level. By default, PUT sets the ACL of the current version of an object. To set the ACL of a different version, use the <code>versionId</code> subresource.</p> </dd> </dl> <p>The following operations are related to <code>PutObjectAcl</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1312,7 +1304,7 @@
       },
       "input":{"shape":"PutObjectLegalHoldRequest"},
       "output":{"shape":"PutObjectLegalHoldOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Applies a legal hold configuration to the specified object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Applies a legal hold configuration to the specified object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1326,7 +1318,7 @@
       },
       "input":{"shape":"PutObjectLockConfigurationRequest"},
       "output":{"shape":"PutObjectLockConfigurationOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Places an Object Lock configuration on the specified bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>. </p> <note> <ul> <li> <p>The <code>DefaultRetention</code> settings require both a mode and a period.</p> </li> <li> <p>The <code>DefaultRetention</code> period can be either <code>Days</code> or <code>Years</code> but you must select one. You cannot specify <code>Days</code> and <code>Years</code> at the same time.</p> </li> <li> <p>You can enable Object Lock for new or existing buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html\">Configuring Object Lock</a>.</p> </li> </ul> </note>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Places an Object Lock configuration on the specified bucket. The rule specified in the Object Lock configuration will be applied by default to every new object placed in the specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>. </p> <note> <ul> <li> <p>The <code>DefaultRetention</code> settings require both a mode and a period.</p> </li> <li> <p>The <code>DefaultRetention</code> period can be either <code>Days</code> or <code>Years</code> but you must select one. You cannot specify <code>Days</code> and <code>Years</code> at the same time.</p> </li> <li> <p>You can enable Object Lock for new or existing buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-configure.html\">Configuring Object Lock</a>.</p> </li> </ul> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1340,7 +1332,7 @@
       },
       "input":{"shape":"PutObjectRetentionRequest"},
       "output":{"shape":"PutObjectRetentionOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Places an Object Retention configuration on an object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>. Users or accounts require the <code>s3:PutObjectRetention</code> permission in order to place an Object Retention configuration on objects. Bypassing a Governance Retention configuration requires the <code>s3:BypassGovernanceRetention</code> permission. </p> <p>This functionality is not supported for Amazon S3 on Outposts.</p>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Places an Object Retention configuration on an object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Locking Objects</a>. Users or accounts require the <code>s3:PutObjectRetention</code> permission in order to place an Object Retention configuration on objects. Bypassing a Governance Retention configuration requires the <code>s3:BypassGovernanceRetention</code> permission. </p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1354,7 +1346,7 @@
       },
       "input":{"shape":"PutObjectTaggingRequest"},
       "output":{"shape":"PutObjectTaggingOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the supplied tag-set to an object that already exists in a bucket. A tag is a key-value pair. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html\">Object Tagging</a>.</p> <p>You can associate tags with an object by sending a PUT request against the tagging subresource that is associated with the object. You can retrieve tags by sending a GET request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a>.</p> <p>For tagging-related restrictions related to characters and encodings, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html\">Tag Restrictions</a>. Note that Amazon S3 limits the maximum number of tags to 10 tags per object.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutObjectTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others.</p> <p>To put tags of any other version, use the <code>versionId</code> query parameter. You also need permission for the <code>s3:PutObjectVersionTagging</code> action.</p> <p> <code>PutObjectTagging</code> has the following special errors. For more Amazon S3 errors see, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html\">Error Responses</a>.</p> <ul> <li> <p> <code>InvalidTag</code> - The tag provided was not a valid tag. This error can occur if the tag did not pass input validation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html\">Object Tagging</a>.</p> </li> <li> <p> <code>MalformedXML</code> - The XML provided does not match the schema.</p> </li> <li> <p> <code>OperationAborted</code> - A conflicting conditional action is currently in progress against this resource. Please try again.</p> </li> <li> <p> <code>InternalError</code> - The service was unable to apply the provided tag to the object.</p> </li> </ul> <p>The following operations are related to <code>PutObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html\">DeleteObjectTagging</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Sets the supplied tag-set to an object that already exists in a bucket. A tag is a key-value pair. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html\">Object Tagging</a>.</p> <p>You can associate tags with an object by sending a PUT request against the tagging subresource that is associated with the object. You can retrieve tags by sending a GET request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a>.</p> <p>For tagging-related restrictions related to characters and encodings, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html\">Tag Restrictions</a>. Note that Amazon S3 limits the maximum number of tags to 10 tags per object.</p> <p>To use this operation, you must have permission to perform the <code>s3:PutObjectTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others.</p> <p>To put tags of any other version, use the <code>versionId</code> query parameter. You also need permission for the <code>s3:PutObjectVersionTagging</code> action.</p> <p> <code>PutObjectTagging</code> has the following special errors. For more Amazon S3 errors see, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html\">Error Responses</a>.</p> <ul> <li> <p> <code>InvalidTag</code> - The tag provided was not a valid tag. This error can occur if the tag did not pass input validation. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html\">Object Tagging</a>.</p> </li> <li> <p> <code>MalformedXML</code> - The XML provided does not match the schema.</p> </li> <li> <p> <code>OperationAborted</code> - A conflicting conditional action is currently in progress against this resource. Please try again.</p> </li> <li> <p> <code>InternalError</code> - The service was unable to apply the provided tag to the object.</p> </li> </ul> <p>The following operations are related to <code>PutObjectTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html\">DeleteObjectTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1367,7 +1359,7 @@
         "requestUri":"/{Bucket}?publicAccessBlock"
       },
       "input":{"shape":"PutPublicAccessBlockRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <important> <p>When Amazon S3 evaluates the <code>PublicAccessBlock</code> configuration for a bucket or an object, it checks the <code>PublicAccessBlock</code> configuration for both the bucket (or the bucket that contains the object) and the bucket owner's account. If the <code>PublicAccessBlock</code> configurations are different between the bucket and the account, Amazon S3 uses the most restrictive combination of the bucket-level and account-level settings.</p> </important> <p>For more information about when Amazon S3 considers a bucket or an object public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>.</p> <p>The following operations are related to <code>PutPublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html\">GetBucketPolicyStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an Amazon S3 bucket. To use this operation, you must have the <code>s3:PutBucketPublicAccessBlock</code> permission. For more information about Amazon S3 permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a>.</p> <important> <p>When Amazon S3 evaluates the <code>PublicAccessBlock</code> configuration for a bucket or an object, it checks the <code>PublicAccessBlock</code> configuration for both the bucket (or the bucket that contains the object) and the bucket owner's account. If the <code>PublicAccessBlock</code> configurations are different between the bucket and the account, Amazon S3 uses the most restrictive combination of the bucket-level and account-level settings.</p> </important> <p>For more information about when Amazon S3 considers a bucket or an object public, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status\">The Meaning of \"Public\"</a>.</p> <p>The following operations are related to <code>PutPublicAccessBlock</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicyStatus.html\">GetBucketPolicyStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\">Using Amazon S3 Block Public Access</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":true
@@ -1376,6 +1368,19 @@
         "UseS3ExpressControlEndpoint":{"value":true}
       }
     },
+    "RenameObject":{
+      "name":"RenameObject",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/{Bucket}/{Key+}?renameObject"
+      },
+      "input":{"shape":"RenameObjectRequest"},
+      "output":{"shape":"RenameObjectOutput"},
+      "errors":[
+        {"shape":"IdempotencyParameterMismatch"}
+      ],
+      "documentation":"<p>Renames an existing object in a directory bucket that uses the S3 Express One Zone storage class. You can use <code>RenameObject</code> by specifying an existing object’s name as the source and the new name of the object as the destination within the same directory bucket.</p> <note> <p> <code>RenameObject</code> is only supported for objects stored in the S3 Express One Zone storage class.</p> </note> <p> To prevent overwriting an object, you can use the <code>If-None-Match</code> conditional header.</p> <ul> <li> <p> <b>If-None-Match</b> - Renames the object only if an object with the specified name does not already exist in the directory bucket. If you don't want to overwrite an existing object, you can add the <code>If-None-Match</code> conditional header with the value <code>‘*’</code> in the <code>RenameObject</code> request. Amazon S3 then returns a <code>412 Precondition Failed</code> error if the object with the specified name already exists. For more information, see <a href=\"https://datatracker.ietf.org/doc/rfc7232/\">RFC 7232</a>.</p> </li> </ul> <dl> <dt>Permissions</dt> <dd> <p> To grant access to the <code>RenameObject</code> operation on a directory bucket, we recommend that you use the <code>CreateSession</code> operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the directory bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. The Amazon Web Services CLI and SDKs will create and manage your session including refreshing the session token automatically to avoid service interruptions when a session expires. In your bucket policy, you can specify the <code>s3express:SessionMode</code> condition key to control who can create a <code>ReadWrite</code> or <code>ReadOnly</code> session. A <code>ReadWrite</code> session is required for executing all the Zonal endpoint API operations, including <code>RenameObject</code>. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>. To learn more about Zonal endpoint API operations, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-create-session.html\">Authorizing Zonal endpoint API operations with CreateSession</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
+    },
     "RestoreObject":{
       "name":"RestoreObject",
       "http":{
@@ -1387,9 +1392,7 @@
       "errors":[
         {"shape":"ObjectAlreadyInActiveTierError"}
       ],
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectRestore.html",
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Restores an archived copy of an object back into Amazon S3</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>This action performs the following types of requests: </p> <ul> <li> <p> <code>restore an archive</code> - Restore an archived object</p> </li> </ul> <p>For more information about the <code>S3</code> structure in the request body, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html\">Managing Access with ACLs</a> in the <i>Amazon S3 User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Protecting Data Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i> </p> </li> </ul> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have permissions to perform the <code>s3:RestoreObject</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Restoring objects</dt> <dd> <p>Objects that you archive to the S3 Glacier Flexible Retrieval Flexible Retrieval or S3 Glacier Deep Archive storage class, and S3 Intelligent-Tiering Archive or S3 Intelligent-Tiering Deep Archive tiers, are not accessible in real time. For objects in the S3 Glacier Flexible Retrieval Flexible Retrieval or S3 Glacier Deep Archive storage classes, you must first initiate a restore request, and then wait until a temporary copy of the object is available. If you want a permanent copy of the object, create a copy of it in the Amazon S3 Standard storage class in your S3 bucket. To access an archived object, you must restore the object for the duration (number of days) that you specify. For objects in the Archive Access or Deep Archive Access tiers of S3 Intelligent-Tiering, you must first initiate a restore request, and then wait until the object is moved into the Frequent Access tier.</p> <p>To restore a specific object version, you can provide a version ID. If you don't provide a version ID, Amazon S3 restores the current version.</p> <p>When restoring an archived object, you can specify one of the following data access tier options in the <code>Tier</code> element of the request body: </p> <ul> <li> <p> <code>Expedited</code> - Expedited retrievals allow you to quickly access your data stored in the S3 Glacier Flexible Retrieval Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier when occasional urgent requests for restoring archives are required. For all but the largest archived objects (250 MB+), data accessed using Expedited retrievals is typically made available within 1–5 minutes. Provisioned capacity ensures that retrieval capacity for Expedited retrievals is available when you need it. Expedited retrievals and provisioned capacity are not available for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier.</p> </li> <li> <p> <code>Standard</code> - Standard retrievals allow you to access any of your archived objects within several hours. This is the default option for retrieval requests that do not specify the retrieval option. Standard retrievals typically finish within 3–5 hours for objects stored in the S3 Glacier Flexible Retrieval Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier. They typically finish within 12 hours for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Standard retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li> <li> <p> <code>Bulk</code> - Bulk retrievals free for objects stored in the S3 Glacier Flexible Retrieval and S3 Intelligent-Tiering storage classes, enabling you to retrieve large amounts, even petabytes, of data at no cost. Bulk retrievals typically finish within 5–12 hours for objects stored in the S3 Glacier Flexible Retrieval Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier. Bulk retrievals are also the lowest-cost retrieval option when restoring objects from S3 Glacier Deep Archive. They typically finish within 48 hours for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. </p> </li> </ul> <p>For more information about archive retrieval options and provisioned capacity for <code>Expedited</code> data access, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html\">Restoring Archived Objects</a> in the <i>Amazon S3 User Guide</i>. </p> <p>You can use Amazon S3 restore speed upgrade to change the restore speed to a faster speed while it is in progress. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html\"> Upgrading the speed of an in-progress restore</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To get the status of object restoration, you can send a <code>HEAD</code> request. Operations return the <code>x-amz-restore</code> header, which provides information about the restoration status, in the response. You can use Amazon S3 event notifications to notify you when a restore is initiated or completed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Amazon S3 Event Notifications</a> in the <i>Amazon S3 User Guide</i>.</p> <p>After restoring an archived object, you can update the restoration period by reissuing the request with a new period. Amazon S3 updates the restoration period relative to the current time and charges only for the request-there are no data transfer charges. You cannot update the restoration period when Amazon S3 is actively processing your current restore request for the object.</p> <p>If your bucket has a lifecycle configuration with a rule that includes an expiration action, the object expiration overrides the life span that you specify in a restore request. For example, if you restore an object copy for 10 days, but the object is scheduled to expire in 3 days, Amazon S3 deletes the object in 3 days. For more information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> in <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Responses</dt> <dd> <p>A successful action returns either the <code>200 OK</code> or <code>202 Accepted</code> status code. </p> <ul> <li> <p>If the object is not previously restored, then Amazon S3 returns <code>202 Accepted</code> in the response. </p> </li> <li> <p>If the object is previously restored, Amazon S3 returns <code>200 OK</code> in the response. </p> </li> </ul> <ul> <li> <p>Special errors:</p> <ul> <li> <p> <i>Code: RestoreAlreadyInProgress</i> </p> </li> <li> <p> <i>Cause: Object restore is already in progress.</i> </p> </li> <li> <p> <i>HTTP Status Code: 409 Conflict</i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code: GlacierExpeditedRetrievalNotAvailable</i> </p> </li> <li> <p> <i>Cause: expedited retrievals are currently not available. Try again later. (Returned if there is insufficient capacity to process the Expedited request. This error applies only to Expedited retrievals and not to S3 Standard or Bulk retrievals.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 503</i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: N/A</i> </p> </li> </ul> </li> </ul> </dd> </dl> <p>The following operations are related to <code>RestoreObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html\">GetBucketNotificationConfiguration</a> </p> </li> </ul>",
-      "alias":"PostObjectRestore",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Restores an archived copy of an object back into Amazon S3</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>This action performs the following types of requests: </p> <ul> <li> <p> <code>restore an archive</code> - Restore an archived object</p> </li> </ul> <p>For more information about the <code>S3</code> structure in the request body, see the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html\">Managing Access with ACLs</a> in the <i>Amazon S3 User Guide</i> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Protecting Data Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i> </p> </li> </ul> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have permissions to perform the <code>s3:RestoreObject</code> action. The bucket owner has this permission by default and can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Restoring objects</dt> <dd> <p>Objects that you archive to the S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage class, and S3 Intelligent-Tiering Archive or S3 Intelligent-Tiering Deep Archive tiers, are not accessible in real time. For objects in the S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive storage classes, you must first initiate a restore request, and then wait until a temporary copy of the object is available. If you want a permanent copy of the object, create a copy of it in the Amazon S3 Standard storage class in your S3 bucket. To access an archived object, you must restore the object for the duration (number of days) that you specify. For objects in the Archive Access or Deep Archive Access tiers of S3 Intelligent-Tiering, you must first initiate a restore request, and then wait until the object is moved into the Frequent Access tier.</p> <p>To restore a specific object version, you can provide a version ID. If you don't provide a version ID, Amazon S3 restores the current version.</p> <p>When restoring an archived object, you can specify one of the following data access tier options in the <code>Tier</code> element of the request body: </p> <ul> <li> <p> <code>Expedited</code> - Expedited retrievals allow you to quickly access your data stored in the S3 Glacier Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier when occasional urgent requests for restoring archives are required. For all but the largest archived objects (250 MB+), data accessed using Expedited retrievals is typically made available within 1–5 minutes. Provisioned capacity ensures that retrieval capacity for Expedited retrievals is available when you need it. Expedited retrievals and provisioned capacity are not available for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier.</p> </li> <li> <p> <code>Standard</code> - Standard retrievals allow you to access any of your archived objects within several hours. This is the default option for retrieval requests that do not specify the retrieval option. Standard retrievals typically finish within 3–5 hours for objects stored in the S3 Glacier Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier. They typically finish within 12 hours for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. Standard retrievals are free for objects stored in S3 Intelligent-Tiering.</p> </li> <li> <p> <code>Bulk</code> - Bulk retrievals free for objects stored in the S3 Glacier Flexible Retrieval and S3 Intelligent-Tiering storage classes, enabling you to retrieve large amounts, even petabytes, of data at no cost. Bulk retrievals typically finish within 5–12 hours for objects stored in the S3 Glacier Flexible Retrieval storage class or S3 Intelligent-Tiering Archive tier. Bulk retrievals are also the lowest-cost retrieval option when restoring objects from S3 Glacier Deep Archive. They typically finish within 48 hours for objects stored in the S3 Glacier Deep Archive storage class or S3 Intelligent-Tiering Deep Archive tier. </p> </li> </ul> <p>For more information about archive retrieval options and provisioned capacity for <code>Expedited</code> data access, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html\">Restoring Archived Objects</a> in the <i>Amazon S3 User Guide</i>. </p> <p>You can use Amazon S3 restore speed upgrade to change the restore speed to a faster speed while it is in progress. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html\"> Upgrading the speed of an in-progress restore</a> in the <i>Amazon S3 User Guide</i>. </p> <p>To get the status of object restoration, you can send a <code>HEAD</code> request. Operations return the <code>x-amz-restore</code> header, which provides information about the restoration status, in the response. You can use Amazon S3 event notifications to notify you when a restore is initiated or completed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html\">Configuring Amazon S3 Event Notifications</a> in the <i>Amazon S3 User Guide</i>.</p> <p>After restoring an archived object, you can update the restoration period by reissuing the request with a new period. Amazon S3 updates the restoration period relative to the current time and charges only for the request-there are no data transfer charges. You cannot update the restoration period when Amazon S3 is actively processing your current restore request for the object.</p> <p>If your bucket has a lifecycle configuration with a rule that includes an expiration action, the object expiration overrides the life span that you specify in a restore request. For example, if you restore an object copy for 10 days, but the object is scheduled to expire in 3 days, Amazon S3 deletes the object in 3 days. For more information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\">Object Lifecycle Management</a> in <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Responses</dt> <dd> <p>A successful action returns either the <code>200 OK</code> or <code>202 Accepted</code> status code. </p> <ul> <li> <p>If the object is not previously restored, then Amazon S3 returns <code>202 Accepted</code> in the response. </p> </li> <li> <p>If the object is previously restored, Amazon S3 returns <code>200 OK</code> in the response. </p> </li> </ul> <ul> <li> <p>Special errors:</p> <ul> <li> <p> <i>Code: RestoreAlreadyInProgress</i> </p> </li> <li> <p> <i>Cause: Object restore is already in progress.</i> </p> </li> <li> <p> <i>HTTP Status Code: 409 Conflict</i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: Client</i> </p> </li> </ul> </li> <li> <ul> <li> <p> <i>Code: GlacierExpeditedRetrievalNotAvailable</i> </p> </li> <li> <p> <i>Cause: expedited retrievals are currently not available. Try again later. (Returned if there is insufficient capacity to process the Expedited request. This error applies only to Expedited retrievals and not to S3 Standard or Bulk retrievals.)</i> </p> </li> <li> <p> <i>HTTP Status Code: 503</i> </p> </li> <li> <p> <i>SOAP Fault Code Prefix: N/A</i> </p> </li> </ul> </li> </ul> </dd> </dl> <p>The following operations are related to <code>RestoreObject</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketNotificationConfiguration.html\">GetBucketNotificationConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":false
@@ -1407,7 +1410,39 @@
         "xmlNamespace":{"uri":"http://s3.amazonaws.com/doc/2006-03-01/"}
       },
       "output":{"shape":"SelectObjectContentOutput"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This action filters the contents of an Amazon S3 object based on a simple structured query language (SQL) statement. In the request, along with the SQL expression, you must also specify a data serialization format (JSON, CSV, or Apache Parquet) of the object. Amazon S3 uses this format to parse object data into records, and returns only records that match the specified SQL expression. You must also specify the data serialization format for the response.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>For more information about Amazon S3 Select, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html\">Selecting Content from Objects</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-select.html\">SELECT Command</a> in the <i>Amazon S3 User Guide</i>.</p> <p/> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetObject</code> permission for this operation. Amazon S3 Select does not support anonymous access. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Object Data Formats</dt> <dd> <p>You can use Amazon S3 Select to query objects that have the following format properties:</p> <ul> <li> <p> <i>CSV, JSON, and Parquet</i> - Objects must be in CSV, JSON, or Parquet format.</p> </li> <li> <p> <i>UTF-8</i> - UTF-8 is the only encoding type Amazon S3 Select supports.</p> </li> <li> <p> <i>GZIP or BZIP2</i> - CSV and JSON files can be compressed using GZIP or BZIP2. GZIP and BZIP2 are the only compression formats that Amazon S3 Select supports for CSV and JSON files. Amazon S3 Select supports columnar compression for Parquet using GZIP or Snappy. Amazon S3 Select does not support whole-object compression for Parquet objects.</p> </li> <li> <p> <i>Server-side encryption</i> - Amazon S3 Select supports querying objects that are protected with server-side encryption.</p> <p>For objects that are encrypted with customer-provided encryption keys (SSE-C), you must use HTTPS, and you must use the headers that are documented in the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>. For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For objects that are encrypted with Amazon S3 managed keys (SSE-S3) and Amazon Web Services KMS keys (SSE-KMS), server-side encryption is handled transparently, so you don't need to specify anything. For more information about server-side encryption, including SSE-S3 and SSE-KMS, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Protecting Data Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Working with the Response Body</dt> <dd> <p>Given the response size is unknown, Amazon S3 Select streams the response as a series of messages and includes a <code>Transfer-Encoding</code> header with <code>chunked</code> as its value in the response. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html\">Appendix: SelectObjectContent Response</a>.</p> </dd> <dt>GetObject Support</dt> <dd> <p>The <code>SelectObjectContent</code> action does not support the following <code>GetObject</code> functionality. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>.</p> <ul> <li> <p> <code>Range</code>: Although you can specify a scan range for an Amazon S3 Select request (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange\">SelectObjectContentRequest - ScanRange</a> in the request parameters), you cannot specify the range of bytes of an object to return. </p> </li> <li> <p>The <code>GLACIER</code>, <code>DEEP_ARCHIVE</code>, and <code>REDUCED_REDUNDANCY</code> storage classes, or the <code>ARCHIVE_ACCESS</code> and <code>DEEP_ARCHIVE_ACCESS</code> access tiers of the <code>INTELLIGENT_TIERING</code> storage class: You cannot query objects in the <code>GLACIER</code>, <code>DEEP_ARCHIVE</code>, or <code>REDUCED_REDUNDANCY</code> storage classes, nor objects in the <code>ARCHIVE_ACCESS</code> or <code>DEEP_ARCHIVE_ACCESS</code> access tiers of the <code>INTELLIGENT_TIERING</code> storage class. For more information about storage classes, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html\">Using Amazon S3 storage classes</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Special Errors</dt> <dd> <p>For a list of special errors for this operation, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList\">List of SELECT Object Content Error Codes</a> </p> </dd> </dl> <p>The following operations are related to <code>SelectObjectContent</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> </ul>"
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>This action filters the contents of an Amazon S3 object based on a simple structured query language (SQL) statement. In the request, along with the SQL expression, you must also specify a data serialization format (JSON, CSV, or Apache Parquet) of the object. Amazon S3 uses this format to parse object data into records, and returns only records that match the specified SQL expression. You must also specify the data serialization format for the response.</p> <p>This functionality is not supported for Amazon S3 on Outposts.</p> <p>For more information about Amazon S3 Select, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html\">Selecting Content from Objects</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-select.html\">SELECT Command</a> in the <i>Amazon S3 User Guide</i>.</p> <p/> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetObject</code> permission for this operation. Amazon S3 Select does not support anonymous access. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html\">Specifying Permissions in a Policy</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>Object Data Formats</dt> <dd> <p>You can use Amazon S3 Select to query objects that have the following format properties:</p> <ul> <li> <p> <i>CSV, JSON, and Parquet</i> - Objects must be in CSV, JSON, or Parquet format.</p> </li> <li> <p> <i>UTF-8</i> - UTF-8 is the only encoding type Amazon S3 Select supports.</p> </li> <li> <p> <i>GZIP or BZIP2</i> - CSV and JSON files can be compressed using GZIP or BZIP2. GZIP and BZIP2 are the only compression formats that Amazon S3 Select supports for CSV and JSON files. Amazon S3 Select supports columnar compression for Parquet using GZIP or Snappy. Amazon S3 Select does not support whole-object compression for Parquet objects.</p> </li> <li> <p> <i>Server-side encryption</i> - Amazon S3 Select supports querying objects that are protected with server-side encryption.</p> <p>For objects that are encrypted with customer-provided encryption keys (SSE-C), you must use HTTPS, and you must use the headers that are documented in the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>. For more information about SSE-C, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html\">Server-Side Encryption (Using Customer-Provided Encryption Keys)</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For objects that are encrypted with Amazon S3 managed keys (SSE-S3) and Amazon Web Services KMS keys (SSE-KMS), server-side encryption is handled transparently, so you don't need to specify anything. For more information about server-side encryption, including SSE-S3 and SSE-KMS, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Protecting Data Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Working with the Response Body</dt> <dd> <p>Given the response size is unknown, Amazon S3 Select streams the response as a series of messages and includes a <code>Transfer-Encoding</code> header with <code>chunked</code> as its value in the response. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTSelectObjectAppendix.html\">Appendix: SelectObjectContent Response</a>.</p> </dd> <dt>GetObject Support</dt> <dd> <p>The <code>SelectObjectContent</code> action does not support the following <code>GetObject</code> functionality. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>.</p> <ul> <li> <p> <code>Range</code>: Although you can specify a scan range for an Amazon S3 Select request (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html#AmazonS3-SelectObjectContent-request-ScanRange\">SelectObjectContentRequest - ScanRange</a> in the request parameters), you cannot specify the range of bytes of an object to return. </p> </li> <li> <p>The <code>GLACIER</code>, <code>DEEP_ARCHIVE</code>, and <code>REDUCED_REDUNDANCY</code> storage classes, or the <code>ARCHIVE_ACCESS</code> and <code>DEEP_ARCHIVE_ACCESS</code> access tiers of the <code>INTELLIGENT_TIERING</code> storage class: You cannot query objects in the <code>GLACIER</code>, <code>DEEP_ARCHIVE</code>, or <code>REDUCED_REDUNDANCY</code> storage classes, nor objects in the <code>ARCHIVE_ACCESS</code> or <code>DEEP_ARCHIVE_ACCESS</code> access tiers of the <code>INTELLIGENT_TIERING</code> storage class. For more information about storage classes, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html\">Using Amazon S3 storage classes</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Special Errors</dt> <dd> <p>For a list of special errors for this operation, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#SelectObjectContentErrorCodeList\">List of SELECT Object Content Error Codes</a> </p> </dd> </dl> <p>The following operations are related to <code>SelectObjectContent</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>"
+    },
+    "UpdateBucketMetadataInventoryTableConfiguration":{
+      "name":"UpdateBucketMetadataInventoryTableConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/{Bucket}?metadataInventoryTable"
+      },
+      "input":{"shape":"UpdateBucketMetadataInventoryTableConfigurationRequest"},
+      "documentation":"<p>Enables or disables a live inventory table for an S3 Metadata configuration on a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the following permissions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you want to encrypt your inventory table with server-side encryption with Key Management Service (KMS) keys (SSE-KMS), you need additional permissions in your KMS key policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\"> Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>.</p> <ul> <li> <p> <code>s3:UpdateBucketMetadataInventoryTableConfiguration</code> </p> </li> <li> <p> <code>s3tables:CreateTableBucket</code> </p> </li> <li> <p> <code>s3tables:CreateNamespace</code> </p> </li> <li> <p> <code>s3tables:GetTable</code> </p> </li> <li> <p> <code>s3tables:CreateTable</code> </p> </li> <li> <p> <code>s3tables:PutTablePolicy</code> </p> </li> <li> <p> <code>s3tables:PutTableEncryption</code> </p> </li> <li> <p> <code>kms:DescribeKey</code> </p> </li> </ul> </dd> </dl> <p>The following operations are related to <code>UpdateBucketMetadataInventoryTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataConfiguration.html\">DeleteBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataConfiguration.html\">GetBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataJournalTableConfiguration.html\">UpdateBucketMetadataJournalTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "httpChecksum":{
+        "requestAlgorithmMember":"ChecksumAlgorithm",
+        "requestChecksumRequired":true
+      },
+      "staticContextParams":{
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
+    "UpdateBucketMetadataJournalTableConfiguration":{
+      "name":"UpdateBucketMetadataJournalTableConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/{Bucket}?metadataJournalTable"
+      },
+      "input":{"shape":"UpdateBucketMetadataJournalTableConfigurationRequest"},
+      "documentation":"<p>Enables or disables journal table record expiration for an S3 Metadata configuration on a general purpose bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-overview.html\">Accelerating data discovery with S3 Metadata</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use this operation, you must have the <code>s3:UpdateBucketMetadataJournalTableConfiguration</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/metadata-tables-permissions.html\">Setting up permissions for configuring metadata tables</a> in the <i>Amazon S3 User Guide</i>. </p> </dd> </dl> <p>The following operations are related to <code>UpdateBucketMetadataJournalTableConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketMetadataConfiguration.html\">DeleteBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketMetadataConfiguration.html\">GetBucketMetadataConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UpdateBucketMetadataInventoryTableConfiguration.html\">UpdateBucketMetadataInventoryTableConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "httpChecksum":{
+        "requestAlgorithmMember":"ChecksumAlgorithm",
+        "requestChecksumRequired":true
+      },
+      "staticContextParams":{
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
     },
     "UploadPart":{
       "name":"UploadPart",
@@ -1417,8 +1452,7 @@
       },
       "input":{"shape":"UploadPartRequest"},
       "output":{"shape":"UploadPartOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html",
-      "documentation":"<p>Uploads a part in a multipart upload.</p> <note> <p>In this operation, you provide new data as a part of an object in your request. However, you have an option to specify your existing Amazon S3 object as a data source for the part you are uploading. To upload a part from an existing object, you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> operation. </p> </note> <p>You must initiate a multipart upload (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>) before you can upload any part. In response to your initiate request, Amazon S3 returns an upload ID, a unique identifier that you must include in your upload part request.</p> <p>Part numbers can be any number from 1 to 10,000, inclusive. A part number uniquely identifies a part and also defines its position within the object being created. If you upload a new part using the same part number that was used with a previous part, the previously uploaded part is overwritten.</p> <p>For information about maximum and minimum part sizes and other multipart upload specifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html\">Multipart upload limits</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>After you initiate multipart upload and upload one or more parts, you must either complete or abort multipart upload in order to stop getting charged for storage of the uploaded parts. Only after you either complete or abort multipart upload, Amazon S3 frees up the parts storage and stops charging you for the parts storage.</p> </note> <p>For more information on multipart uploads, go to <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide </i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To perform a multipart upload with encryption using an Key Management Service key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs.</p> <p>These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information about KMS permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with KMS</a> in the <i>Amazon S3 User Guide</i>. For information about the permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart upload and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Data integrity</dt> <dd> <p> <b>General purpose bucket</b> - To ensure that data is not corrupted traversing the network, specify the <code>Content-MD5</code> header in the upload part request. Amazon S3 checks the part data against the provided MD5 value. If they do not match, Amazon S3 returns an error. If the upload request is signed with Signature Version 4, then Amazon Web Services S3 uses the <code>x-amz-content-sha256</code> header as a checksum instead of <code>Content-MD5</code>. For more information see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html\">Authenticating Requests: Using the Authorization Header (Amazon Web Services Signature Version 4)</a>. </p> <note> <p> <b>Directory buckets</b> - MD5 is not supported by directory buckets. You can use checksum algorithms to check object integrity.</p> </note> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - Server-side encryption is for data encryption at rest. Amazon S3 encrypts your data as it writes it to disks in its data centers and decrypts it when you access it. You have mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS), and Customer-Provided Keys (SSE-C). Amazon S3 encrypts data with server-side encryption using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest using server-side encryption with other key options. The option you use depends on whether you want to use KMS keys (SSE-KMS) or provide your own encryption key (SSE-C).</p> <p>Server-side encryption is supported by the S3 Multipart Upload operations. Unless you are using a customer-provided encryption key (SSE-C), you don't need to specify the encryption parameters in each UploadPart request. Instead, you only need to specify the server-side encryption parameters in the initial Initiate Multipart request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>.</p> <p>If you request server-side encryption using a customer-provided encryption key (SSE-C) in your initiate multipart upload request, you must provide identical encryption information in each part upload using the following request headers.</p> <ul> <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li> <p>x-amz-server-side-encryption-customer-key</p> </li> <li> <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>).</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found </p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>UploadPart</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>",
+      "documentation":"<p>Uploads a part in a multipart upload.</p> <note> <p>In this operation, you provide new data as a part of an object in your request. However, you have an option to specify your existing Amazon S3 object as a data source for the part you are uploading. To upload a part from an existing object, you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a> operation. </p> </note> <p>You must initiate a multipart upload (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>) before you can upload any part. In response to your initiate request, Amazon S3 returns an upload ID, a unique identifier that you must include in your upload part request.</p> <p>Part numbers can be any number from 1 to 10,000, inclusive. A part number uniquely identifies a part and also defines its position within the object being created. If you upload a new part using the same part number that was used with a previous part, the previously uploaded part is overwritten.</p> <p>For information about maximum and minimum part sizes and other multipart upload specifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html\">Multipart upload limits</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>After you initiate multipart upload and upload one or more parts, you must either complete or abort multipart upload in order to stop getting charged for storage of the uploaded parts. Only after you either complete or abort multipart upload, Amazon S3 frees up the parts storage and stops charging you for the parts storage.</p> </note> <p>For more information on multipart uploads, go to <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide </i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p> <b>General purpose bucket permissions</b> - To perform a multipart upload with encryption using an Key Management Service key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs.</p> <p>These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information about KMS permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with KMS</a> in the <i>Amazon S3 User Guide</i>. For information about the permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart upload and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory bucket permissions</b> - To grant access to this API operation on a directory bucket, we recommend that you use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a> API operation for session-based authorization. Specifically, you grant the <code>s3express:CreateSession</code> permission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make the <code>CreateSession</code> API call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make another <code>CreateSession</code> API call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html\"> <code>CreateSession</code> </a>.</p> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> </li> </ul> </dd> <dt>Data integrity</dt> <dd> <p> <b>General purpose bucket</b> - To ensure that data is not corrupted traversing the network, specify the <code>Content-MD5</code> header in the upload part request. Amazon S3 checks the part data against the provided MD5 value. If they do not match, Amazon S3 returns an error. If the upload request is signed with Signature Version 4, then Amazon Web Services S3 uses the <code>x-amz-content-sha256</code> header as a checksum instead of <code>Content-MD5</code>. For more information see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html\">Authenticating Requests: Using the Authorization Header (Amazon Web Services Signature Version 4)</a>. </p> <note> <p> <b>Directory buckets</b> - MD5 is not supported by directory buckets. You can use checksum algorithms to check object integrity.</p> </note> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose bucket</b> - Server-side encryption is for data encryption at rest. Amazon S3 encrypts your data as it writes it to disks in its data centers and decrypts it when you access it. You have mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS), and Customer-Provided Keys (SSE-C). Amazon S3 encrypts data with server-side encryption using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest using server-side encryption with other key options. The option you use depends on whether you want to use KMS keys (SSE-KMS) or provide your own encryption key (SSE-C).</p> <p>Server-side encryption is supported by the S3 Multipart Upload operations. Unless you are using a customer-provided encryption key (SSE-C), you don't need to specify the encryption parameters in each UploadPart request. Instead, you only need to specify the server-side encryption parameters in the initial Initiate Multipart request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a>.</p> <p>If you request server-side encryption using a customer-provided encryption key (SSE-C) in your initiate multipart upload request, you must provide identical encryption information in each part upload using the following request headers.</p> <ul> <li> <p>x-amz-server-side-encryption-customer-algorithm</p> </li> <li> <p>x-amz-server-side-encryption-customer-key</p> </li> <li> <p>x-amz-server-side-encryption-customer-key-MD5</p> </li> </ul> <p> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>).</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found </p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>UploadPart</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "httpChecksum":{
         "requestAlgorithmMember":"ChecksumAlgorithm",
         "requestChecksumRequired":false
@@ -1432,8 +1466,7 @@
       },
       "input":{"shape":"UploadPartCopyRequest"},
       "output":{"shape":"UploadPartCopyOutput"},
-      "documentationUrl":"http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html",
-      "documentation":"<p>Uploads a part by copying data from an existing object as data source. To specify the data source, you add the request header <code>x-amz-copy-source</code> in your request. To specify a byte range, you add the request header <code>x-amz-copy-source-range</code> in your request. </p> <p>For information about maximum and minimum part sizes and other multipart upload specifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html\">Multipart upload limits</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>Instead of copying data from an existing object as part data, you might use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> action to upload new data as a part of an object in your request.</p> </note> <p>You must initiate a multipart upload before you can upload any part. In response to your initiate request, Amazon S3 returns the upload ID, a unique identifier that you must include in your upload part request.</p> <p>For conceptual information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>. For information about copying objects using a single atomic action vs. a multipart upload, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html\">Operations on Objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Regions-and-Zones.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Available Local Zone for directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Authentication and authorization</dt> <dd> <p>All <code>UploadPartCopy</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use IAM credentials to authenticate and authorize your access to the <code>UploadPartCopy</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p>You must have <code>READ</code> access to the source object and <code>WRITE</code> access to the destination bucket.</p> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the permissions in a policy based on the bucket types of your source bucket and destination bucket in an <code>UploadPartCopy</code> operation.</p> <ul> <li> <p>If the source object is in a general purpose bucket, you must have the <b> <code>s3:GetObject</code> </b> permission to read the source object that is being copied. </p> </li> <li> <p>If the destination bucket is a general purpose bucket, you must have the <b> <code>s3:PutObject</code> </b> permission to write the object copy to the destination bucket. </p> </li> <li> <p>To perform a multipart upload with encryption using an Key Management Service key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information about KMS permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with KMS</a> in the <i>Amazon S3 User Guide</i>. For information about the permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart upload and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have permissions in a bucket policy or an IAM identity-based policy based on the source and destination bucket types in an <code>UploadPartCopy</code> operation.</p> <ul> <li> <p>If the source object that you want to copy is in a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to read the object. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the copy source bucket.</p> </li> <li> <p>If the copy destination is a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to write the object to the destination. The <code>s3express:SessionMode</code> condition key cannot be set to <code>ReadOnly</code> on the copy destination. </p> </li> </ul> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> <p>For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose buckets </b> - For information about using server-side encryption with customer-provided encryption keys with the <code>UploadPartCopy</code> operation, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a>. </p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>For directory buckets, when you perform a <code>CreateMultipartUpload</code> operation and an <code>UploadPartCopy</code> operation, the request headers you provide in the <code>CreateMultipartUpload</code> request must match the default encryption configuration of the destination bucket. </p> </note> <p>S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidRequest</code> </p> <ul> <li> <p>Description: The specified copy source is not supported as a byte-range copy source.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>UploadPartCopy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul>",
+      "documentation":"<p>Uploads a part by copying data from an existing object as data source. To specify the data source, you add the request header <code>x-amz-copy-source</code> in your request. To specify a byte range, you add the request header <code>x-amz-copy-source-range</code> in your request. </p> <p>For information about maximum and minimum part sizes and other multipart upload specifications, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html\">Multipart upload limits</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>Instead of copying data from an existing object as part data, you might use the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> action to upload new data as a part of an object in your request.</p> </note> <p>You must initiate a multipart upload before you can upload any part. In response to your initiate request, Amazon S3 returns the upload ID, a unique identifier that you must include in your upload part request.</p> <p>For conceptual information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html\">Uploading Objects Using Multipart Upload</a> in the <i>Amazon S3 User Guide</i>. For information about copying objects using a single atomic action vs. a multipart upload, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html\">Operations on Objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html\">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html\">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <dl> <dt>Authentication and authorization</dt> <dd> <p>All <code>UploadPartCopy</code> requests must be authenticated and signed by using IAM credentials (access key ID and secret access key for the IAM identities). All headers with the <code>x-amz-</code> prefix, including <code>x-amz-copy-source</code>, must be signed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html\">REST Authentication</a>.</p> <p> <b>Directory buckets</b> - You must use IAM credentials to authenticate and authorize your access to the <code>UploadPartCopy</code> API operation, instead of using the temporary security credentials through the <code>CreateSession</code> API operation.</p> <p>Amazon Web Services CLI or SDKs handles authentication and authorization on your behalf.</p> </dd> <dt>Permissions</dt> <dd> <p>You must have <code>READ</code> access to the source object and <code>WRITE</code> access to the destination bucket.</p> <ul> <li> <p> <b>General purpose bucket permissions</b> - You must have the permissions in a policy based on the bucket types of your source bucket and destination bucket in an <code>UploadPartCopy</code> operation.</p> <ul> <li> <p>If the source object is in a general purpose bucket, you must have the <b> <code>s3:GetObject</code> </b> permission to read the source object that is being copied. </p> </li> <li> <p>If the destination bucket is a general purpose bucket, you must have the <b> <code>s3:PutObject</code> </b> permission to write the object copy to the destination bucket. </p> </li> <li> <p>To perform a multipart upload with encryption using an Key Management Service key, the requester must have permission to the <code>kms:Decrypt</code> and <code>kms:GenerateDataKey</code> actions on the key. The requester must also have permissions for the <code>kms:GenerateDataKey</code> action for the <code>CreateMultipartUpload</code> API. Then, the requester needs permissions for the <code>kms:Decrypt</code> action on the <code>UploadPart</code> and <code>UploadPartCopy</code> APIs. These permissions are required because Amazon S3 must decrypt and read data from the encrypted file parts before it completes the multipart upload. For more information about KMS permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html\">Protecting data using server-side encryption with KMS</a> in the <i>Amazon S3 User Guide</i>. For information about the permissions required to use the multipart upload API, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html\">Multipart upload and permissions</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpuAndPermissions\">Multipart upload API and permissions</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </li> <li> <p> <b>Directory bucket permissions</b> - You must have permissions in a bucket policy or an IAM identity-based policy based on the source and destination bucket types in an <code>UploadPartCopy</code> operation.</p> <ul> <li> <p>If the source object that you want to copy is in a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to read the object. By default, the session is in the <code>ReadWrite</code> mode. If you want to restrict the access, you can explicitly set the <code>s3express:SessionMode</code> condition key to <code>ReadOnly</code> on the copy source bucket.</p> </li> <li> <p>If the copy destination is a directory bucket, you must have the <b> <code>s3express:CreateSession</code> </b> permission in the <code>Action</code> element of a policy to write the object to the destination. The <code>s3express:SessionMode</code> condition key cannot be set to <code>ReadOnly</code> on the copy destination. </p> </li> </ul> <p>If the object is encrypted with SSE-KMS, you must also have the <code>kms:GenerateDataKey</code> and <code>kms:Decrypt</code> permissions in IAM identity-based policies and KMS key policies for the KMS key.</p> <p>For example policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-example-bucket-policies.html\">Example bucket policies for S3 Express One Zone</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-security-iam-identity-policies.html\">Amazon Web Services Identity and Access Management (IAM) identity-based policies for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </dd> <dt>Encryption</dt> <dd> <ul> <li> <p> <b>General purpose buckets </b> - For information about using server-side encryption with customer-provided encryption keys with the <code>UploadPartCopy</code> operation, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a>. </p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>For directory buckets, when you perform a <code>CreateMultipartUpload</code> operation and an <code>UploadPartCopy</code> operation, the request headers you provide in the <code>CreateMultipartUpload</code> request must match the default encryption configuration of the destination bucket. </p> </note> <p>S3 Bucket Keys aren't supported, when you copy SSE-KMS encrypted objects from general purpose buckets to directory buckets, from directory buckets to general purpose buckets, or between directory buckets, through <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>. In this case, Amazon S3 makes a call to KMS every time a copy request is made for a KMS-encrypted object.</p> </li> </ul> </dd> <dt>Special errors</dt> <dd> <ul> <li> <p>Error Code: <code>NoSuchUpload</code> </p> <ul> <li> <p>Description: The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> </ul> </li> <li> <p>Error Code: <code>InvalidRequest</code> </p> <ul> <li> <p>Description: The specified copy source is not supported as a byte-range copy source.</p> </li> <li> <p>HTTP Status Code: 400 Bad Request</p> </li> </ul> </li> </ul> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>.</p> </dd> </dl> <p>The following operations are related to <code>UploadPartCopy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html\">CreateMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html\">UploadPart</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html\">CompleteMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html\">AbortMultipartUpload</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html\">ListParts</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html\">ListMultipartUploads</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "staticContextParams":{
         "DisableS3ExpressSessionAuth":{"value":true}
       }
@@ -1445,7 +1478,7 @@
         "requestUri":"/WriteGetObjectResponse"
       },
       "input":{"shape":"WriteGetObjectResponseRequest"},
-      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Passes transformed objects to a <code>GetObject</code> operation when using Object Lambda access points. For information about Object Lambda access points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html\">Transforming objects with Object Lambda access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This operation supports metadata that can be returned by <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>, in addition to <code>RequestRoute</code>, <code>RequestToken</code>, <code>StatusCode</code>, <code>ErrorCode</code>, and <code>ErrorMessage</code>. The <code>GetObject</code> response metadata is supported so that the <code>WriteGetObjectResponse</code> caller, typically an Lambda function, can provide the same metadata when it internally invokes <code>GetObject</code>. When <code>WriteGetObjectResponse</code> is called by a customer-owned Lambda function, the metadata returned to the end user <code>GetObject</code> call might differ from what Amazon S3 would normally return.</p> <p>You can include any number of metadata headers. When including a metadata header, it should be prefaced with <code>x-amz-meta</code>. For example, <code>x-amz-meta-my-custom-header: MyCustomValue</code>. The primary use case for this is to forward <code>GetObject</code> metadata.</p> <p>Amazon Web Services provides some prebuilt Lambda functions that you can use with S3 Object Lambda to detect and redact personally identifiable information (PII) and decompress S3 objects. These Lambda functions are available in the Amazon Web Services Serverless Application Repository, and can be selected through the Amazon Web Services Management Console when you create your Object Lambda access point.</p> <p>Example 1: PII Access Control - This Lambda function uses Amazon Comprehend, a natural language processing (NLP) service using machine learning to find insights and relationships in text. It automatically detects personally identifiable information (PII) such as names, addresses, dates, credit card numbers, and social security numbers from documents in your Amazon S3 bucket. </p> <p>Example 2: PII Redaction - This Lambda function uses Amazon Comprehend, a natural language processing (NLP) service using machine learning to find insights and relationships in text. It automatically redacts personally identifiable information (PII) such as names, addresses, dates, credit card numbers, and social security numbers from documents in your Amazon S3 bucket. </p> <p>Example 3: Decompression - The Lambda function S3ObjectLambdaDecompression, is equipped to decompress objects stored in S3 in one of six compressed file formats including bzip2, gzip, snappy, zlib, zstandard and ZIP. </p> <p>For information on how to view and use these functions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-examples.html\">Using Amazon Web Services built Lambda functions</a> in the <i>Amazon S3 User Guide</i>.</p>",
+      "documentation":"<note> <p>This operation is not supported for directory buckets.</p> </note> <p>Passes transformed objects to a <code>GetObject</code> operation when using Object Lambda access points. For information about Object Lambda access points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html\">Transforming objects with Object Lambda access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This operation supports metadata that can be returned by <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a>, in addition to <code>RequestRoute</code>, <code>RequestToken</code>, <code>StatusCode</code>, <code>ErrorCode</code>, and <code>ErrorMessage</code>. The <code>GetObject</code> response metadata is supported so that the <code>WriteGetObjectResponse</code> caller, typically an Lambda function, can provide the same metadata when it internally invokes <code>GetObject</code>. When <code>WriteGetObjectResponse</code> is called by a customer-owned Lambda function, the metadata returned to the end user <code>GetObject</code> call might differ from what Amazon S3 would normally return.</p> <p>You can include any number of metadata headers. When including a metadata header, it should be prefaced with <code>x-amz-meta</code>. For example, <code>x-amz-meta-my-custom-header: MyCustomValue</code>. The primary use case for this is to forward <code>GetObject</code> metadata.</p> <p>Amazon Web Services provides some prebuilt Lambda functions that you can use with S3 Object Lambda to detect and redact personally identifiable information (PII) and decompress S3 objects. These Lambda functions are available in the Amazon Web Services Serverless Application Repository, and can be selected through the Amazon Web Services Management Console when you create your Object Lambda access point.</p> <p>Example 1: PII Access Control - This Lambda function uses Amazon Comprehend, a natural language processing (NLP) service using machine learning to find insights and relationships in text. It automatically detects personally identifiable information (PII) such as names, addresses, dates, credit card numbers, and social security numbers from documents in your Amazon S3 bucket. </p> <p>Example 2: PII Redaction - This Lambda function uses Amazon Comprehend, a natural language processing (NLP) service using machine learning to find insights and relationships in text. It automatically redacts personally identifiable information (PII) such as names, addresses, dates, credit card numbers, and social security numbers from documents in your Amazon S3 bucket. </p> <p>Example 3: Decompression - The Lambda function S3ObjectLambdaDecompression, is equipped to decompress objects stored in S3 in one of six compressed file formats including bzip2, gzip, snappy, zlib, zstandard and ZIP. </p> <p>For information on how to view and use these functions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-examples.html\">Using Amazon Web Services built Lambda functions</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "authtype":"v4-unsigned-body",
       "endpoint":{
         "hostPrefix":"{RequestRoute}."
@@ -1488,7 +1521,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name to which the upload was taking place. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name to which the upload was taking place. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -1717,6 +1750,10 @@
         "BucketRegion":{
           "shape":"BucketRegion",
           "documentation":"<p> <code>BucketRegion</code> indicates the Amazon Web Services region where the bucket is located. If the request contains at least one valid parameter, it is included in the response.</p>"
+        },
+        "BucketArn":{
+          "shape":"S3RegionalOrS3ExpressBucketArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 bucket. ARNs uniquely identify Amazon Web Services resources across all of Amazon Web Services.</p> <note> <p>This parameter is only supported for S3 directory buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Using tags with directory buckets</a>.</p> </note>"
         }
       },
       "documentation":"<p> In terms of implementation, a Bucket is a resource. </p>"
@@ -1730,16 +1767,14 @@
     },
     "BucketAlreadyExists":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested bucket name is not available. The bucket namespace is shared by all users of the system. Select a different name and try again.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
     },
     "BucketAlreadyOwnedByYou":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The bucket you tried to create already exists, and you own it. Amazon S3 returns this error in all Amazon Web Services Regions except in the North Virginia Region. For legacy compatibility, if you re-create an existing bucket that you already own in the North Virginia Region, Amazon S3 returns 200 OK and resets the bucket access control lists (ACLs).</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -1796,17 +1831,22 @@
         "ap-southeast-1",
         "ap-southeast-2",
         "ap-southeast-3",
+        "ap-southeast-4",
+        "ap-southeast-5",
         "ca-central-1",
         "cn-north-1",
         "cn-northwest-1",
         "EU",
         "eu-central-1",
+        "eu-central-2",
         "eu-north-1",
         "eu-south-1",
         "eu-south-2",
         "eu-west-1",
         "eu-west-2",
         "eu-west-3",
+        "il-central-1",
+        "me-central-1",
         "me-south-1",
         "sa-east-1",
         "us-east-2",
@@ -1989,23 +2029,23 @@
       "members":{
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. This checksum is present if the object was uploaded with the <code>CRC-64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC-64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. This checksum is present if the object was uploaded with the <code>CRC64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumType":{
           "shape":"ChecksumType",
@@ -2045,6 +2085,7 @@
         "FULL_OBJECT"
       ]
     },
+    "ClientToken":{"type":"string"},
     "CloudFunction":{"type":"string"},
     "CloudFunctionConfiguration":{
       "type":"structure",
@@ -2115,23 +2156,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. The <code>CRC-64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>. </p>"
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>. </p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumType":{
           "shape":"ChecksumType",
@@ -2139,7 +2180,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when storing this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when storing this object in Amazon S3.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note> <p/>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -2178,7 +2219,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>Name of the bucket to which the multipart upload was initiated.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>Name of the bucket to which the multipart upload was initiated.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -2204,31 +2245,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. The <code>CRC-64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -2308,23 +2349,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-64NVME</code> checksum algorithm to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC64NVME</code> checksum algorithm to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA-1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA-256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "PartNumber":{
           "shape":"PartNumber",
@@ -2373,8 +2414,7 @@
     "ContentType":{"type":"string"},
     "ContinuationEvent":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p/>",
       "event":true
     },
@@ -2405,7 +2445,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -2463,7 +2503,7 @@
         },
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the destination bucket.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Copying objects across different Amazon Web Services Regions isn't supported when the source or destination bucket is in Amazon Web Services Local Zones. The source and destination buckets must have the same parent Amazon Web Services Region. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>InvalidRequest</code>.</p> </note> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the destination bucket.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Copying objects across different Amazon Web Services Regions isn't supported when the source or destination bucket is in Amazon Web Services Local Zones. The source and destination buckets must have the same parent Amazon Web Services Region. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>InvalidRequest</code>.</p> </note> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must use the Outpost bucket access point ARN or the access point alias for the destination bucket. You can only copy objects within the same Outpost bucket. It's not supported to copy objects across different Amazon Web Services Outposts, between buckets on the same Outposts, or between Outposts buckets and any other bucket types. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>S3 on Outposts guide</i>. When you use this action with S3 on Outposts through the REST API, you must direct requests to the S3 on Outposts hostname, in the format <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. The hostname isn't required when you use the Amazon Web Services CLI or SDKs. </p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -2565,6 +2605,18 @@
           "location":"header",
           "locationName":"x-amz-grant-write-acp"
         },
+        "IfMatch":{
+          "shape":"IfMatch",
+          "documentation":"<p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p> <p>Expects the ETag value as a string.</p> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        },
+        "IfNoneMatch":{
+          "shape":"IfNoneMatch",
+          "documentation":"<p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p> <p>Expects the '*' (asterisk) character.</p> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p>",
+          "location":"header",
+          "locationName":"If-None-Match"
+        },
         "Key":{
           "shape":"ObjectKey",
           "documentation":"<p>The key of the destination object.</p>",
@@ -2592,13 +2644,13 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when storing this object in Amazon S3. Unrecognized or unsupported values won’t write a destination object and will receive a <code>400 Bad Request</code> response. </p> <p>Amazon S3 automatically encrypts all new objects that are copied to an S3 bucket. When copying an object, if you don't specify encryption information in your copy request, the encryption setting of the target object is set to the default encryption configuration of the destination bucket. By default, all buckets have a base level of encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket has a different default encryption configuration, Amazon S3 uses the corresponding encryption key to encrypt the target object copy.</p> <p>With server-side encryption, Amazon S3 encrypts your data as it writes your data to disks in its data centers and decrypts the data when you access it. For more information about server-side encryption, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>General purpose buckets </b> </p> <ul> <li> <p>For general purpose buckets, there are the following supported options for server-side encryption: server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), and server-side encryption with customer-provided encryption keys (SSE-C). Amazon S3 uses the corresponding KMS key, or a customer-provided key to encrypt the target object copy.</p> </li> <li> <p>When you perform a <code>CopyObject</code> operation, if you want to use a different type of encryption setting for the target object, you can specify appropriate encryption-related headers to encrypt the target object with an Amazon S3 managed key, a KMS key, or a customer-provided key. If the encryption setting in your request is different from the default encryption configuration of the destination bucket, the encryption setting in your request takes precedence. </p> </li> </ul> <p> <b>Directory buckets </b> </p> <ul> <li> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </li> <li> <p>To encrypt new object copies to a directory bucket with SSE-KMS, we recommend you specify SSE-KMS as the directory bucket's default encryption configuration with a KMS key (specifically, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>). The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. After you specify a customer managed key for SSE-KMS, you can't override the customer managed key for the bucket's SSE-KMS configuration. Then, when you perform a <code>CopyObject</code> operation and want to specify server-side encryption settings for new object copies with SSE-KMS in the encryption-related request headers, you must ensure the encryption key is the same customer managed key that you specified for the directory bucket's default encryption configuration. </p> </li> </ul>",
+          "documentation":"<p>The server-side encryption algorithm used when storing this object in Amazon S3. Unrecognized or unsupported values won’t write a destination object and will receive a <code>400 Bad Request</code> response. </p> <p>Amazon S3 automatically encrypts all new objects that are copied to an S3 bucket. When copying an object, if you don't specify encryption information in your copy request, the encryption setting of the target object is set to the default encryption configuration of the destination bucket. By default, all buckets have a base level of encryption configuration that uses server-side encryption with Amazon S3 managed keys (SSE-S3). If the destination bucket has a different default encryption configuration, Amazon S3 uses the corresponding encryption key to encrypt the target object copy.</p> <p>With server-side encryption, Amazon S3 encrypts your data as it writes your data to disks in its data centers and decrypts the data when you access it. For more information about server-side encryption, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>General purpose buckets </b> </p> <ul> <li> <p>For general purpose buckets, there are the following supported options for server-side encryption: server-side encryption with Key Management Service (KMS) keys (SSE-KMS), dual-layer server-side encryption with Amazon Web Services KMS keys (DSSE-KMS), and server-side encryption with customer-provided encryption keys (SSE-C). Amazon S3 uses the corresponding KMS key, or a customer-provided key to encrypt the target object copy.</p> </li> <li> <p>When you perform a <code>CopyObject</code> operation, if you want to use a different type of encryption setting for the target object, you can specify appropriate encryption-related headers to encrypt the target object with an Amazon S3 managed key, a KMS key, or a customer-provided key. If the encryption setting in your request is different from the default encryption configuration of the destination bucket, the encryption setting in your request takes precedence. </p> </li> </ul> <p> <b>Directory buckets </b> </p> <ul> <li> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>.</p> </li> <li> <p>To encrypt new object copies to a directory bucket with SSE-KMS, we recommend you specify SSE-KMS as the directory bucket's default encryption configuration with a KMS key (specifically, a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a>). The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. After you specify a customer managed key for SSE-KMS, you can't override the customer managed key for the bucket's SSE-KMS configuration. Then, when you perform a <code>CopyObject</code> operation and want to specify server-side encryption settings for new object copies with SSE-KMS in the encryption-related request headers, you must ensure the encryption key is the same customer managed key that you specified for the directory bucket's default encryption configuration. </p> </li> <li> <p> <b>S3 access points for Amazon FSx </b> - When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>. All Amazon FSx file systems have encryption configured by default and are encrypted at rest. Data is automatically encrypted before being written to the file system, and automatically decrypted as it is read. These processes are handled transparently by Amazon FSx.</p> </li> </ul>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>If the <code>x-amz-storage-class</code> header is not used, the copied object will be stored in the <code>STANDARD</code> Storage Class by default. The <code>STANDARD</code> storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. </p> <note> <ul> <li> <p> <b>Directory buckets </b> - For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects. Unsupported storage class values won't write a destination object and will respond with the HTTP status code <code>400 Bad Request</code>.</p> </li> <li> <p> <b>Amazon S3 on Outposts </b> - S3 on Outposts only uses the <code>OUTPOSTS</code> Storage Class.</p> </li> </ul> </note> <p>You can use the <code>CopyObject</code> action to change the storage class of an object that is already stored in Amazon S3 by using the <code>x-amz-storage-class</code> header. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Before using an object as a source object for the copy operation, you must restore a copy of it if it meets any of the following conditions:</p> <ul> <li> <p>The storage class of the source object is <code>GLACIER</code> or <code>DEEP_ARCHIVE</code>.</p> </li> <li> <p>The storage class of the source object is <code>INTELLIGENT_TIERING</code> and it's <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-overview.html#intel-tiering-tier-definition\">S3 Intelligent-Tiering access tier</a> is <code>Archive Access</code> or <code>Deep Archive Access</code>.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html\">Copying Objects</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>If the <code>x-amz-storage-class</code> header is not used, the copied object will be stored in the <code>STANDARD</code> Storage Class by default. The <code>STANDARD</code> storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. </p> <note> <ul> <li> <p> <b>Directory buckets </b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones. Unsupported storage class values won't write a destination object and will respond with the HTTP status code <code>400 Bad Request</code>.</p> </li> <li> <p> <b>Amazon S3 on Outposts </b> - S3 on Outposts only uses the <code>OUTPOSTS</code> Storage Class.</p> </li> </ul> </note> <p>You can use the <code>CopyObject</code> action to change the storage class of an object that is already stored in Amazon S3 by using the <code>x-amz-storage-class</code> header. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Before using an object as a source object for the copy operation, you must restore a copy of it if it meets any of the following conditions:</p> <ul> <li> <p>The storage class of the source object is <code>GLACIER</code> or <code>DEEP_ARCHIVE</code>.</p> </li> <li> <p>The storage class of the source object is <code>INTELLIGENT_TIERING</code> and it's <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-overview.html#intel-tiering-tier-definition\">S3 Intelligent-Tiering access tier</a> is <code>Archive Access</code> or <code>Deep Archive Access</code>.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html\">Copying Objects</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-storage-class"
         },
@@ -2628,7 +2680,7 @@
         },
         "SSEKMSKeyId":{
           "shape":"SSEKMSKeyId",
-          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. All GET and PUT requests for an object protected by KMS will fail if they're not made via SSL or using SigV4. For information about configuring any of the officially supported Amazon Web Services SDKs and Amazon Web Services CLI, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\">Specifying the Signature Version in Request Authentication</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code>, the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header is implicitly assigned the ID of the KMS symmetric encryption customer managed key that's configured for your directory bucket's default encryption setting. If you want to specify the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header explicitly, you can only specify it with the ID (Key ID or Key ARN) of the KMS customer managed key that's configured for your directory bucket's default encryption setting. Otherwise, you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>",
+          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. All GET and PUT requests for an object protected by KMS will fail if they're not made via SSL or using SigV4. For information about configuring any of the officially supported Amazon Web Services SDKs and Amazon Web Services CLI, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\">Specifying the Signature Version in Request Authentication</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error. </p>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption-aws-kms-key-id"
         },
@@ -2722,23 +2774,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object. This checksum is only present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. This checksum is only present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. This checksum is present if the object being copied was uploaded with the <code>CRC-64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC-64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. This checksum is present if the object being copied was uploaded with the <code>CRC64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Container for all response elements.</p>"
@@ -2756,23 +2808,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-64NVME</code> checksum algorithm to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC64NVME</code> checksum algorithm to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA-1</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA-256</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Container for all response elements.</p>"
@@ -2798,19 +2850,64 @@
       "members":{
         "LocationConstraint":{
           "shape":"BucketLocationConstraint",
-          "documentation":"<p>Specifies the Region where the bucket will be created. You might choose a Region to optimize latency, minimize costs, or address regulatory requirements. For example, if you reside in Europe, you will probably find it advantageous to create buckets in the Europe (Ireland) Region. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro\">Accessing a bucket</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you don't specify a Region, the bucket is created in the US East (N. Virginia) Region (us-east-1) by default.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>"
+          "documentation":"<p>Specifies the Region where the bucket will be created. You might choose a Region to optimize latency, minimize costs, or address regulatory requirements. For example, if you reside in Europe, you will probably find it advantageous to create buckets in the Europe (Ireland) Region.</p> <p>If you don't specify a Region, the bucket is created in the US East (N. Virginia) Region (us-east-1) by default. Configurations using the value <code>EU</code> will create a bucket in <code>eu-west-1</code>.</p> <p>For a list of the valid values for all of the Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>"
         },
         "Location":{
           "shape":"LocationInfo",
-          "documentation":"<p>Specifies the location where the bucket will be created.</p> <p> <b>Directory buckets </b> - The location type is Availability Zone or Local Zone. When the location type is Local Zone, your Local Zone must be in opt-in status. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>Access denied</code>. To learn more about opt-in Local Zones, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/opt-in-directory-bucket-lz.html\">Opt-in Dedicated Local Zones</a>in the <i>Amazon S3 User Guide</i>. </p> <note> <p>This functionality is only supported by directory buckets.</p> </note>"
+          "documentation":"<p>Specifies the location where the bucket will be created.</p> <p> <b>Directory buckets </b> - The location type is Availability Zone or Local Zone. To use the Local Zone location type, your account must be enabled for Local Zones. Otherwise, you get an HTTP <code>403 Forbidden</code> error with the error code <code>AccessDenied</code>. To learn more, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/opt-in-directory-bucket-lz.html\">Enable accounts for Local Zones</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <p>This functionality is only supported by directory buckets.</p> </note>"
         },
         "Bucket":{
           "shape":"BucketInfo",
           "documentation":"<p>Specifies the information about the bucket that will be created.</p> <note> <p>This functionality is only supported by directory buckets.</p> </note>"
+        },
+        "Tags":{
+          "shape":"TagSet",
+          "documentation":"<p>An array of tags that you can apply to the bucket that you're creating. Tags are key-value pairs of metadata used to categorize and organize your buckets, track costs, and control access. </p> <note> <ul> <li> <p>This parameter is only supported for S3 directory buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Using tags with directory buckets</a>.</p> </li> <li> <p>You must have the <code>s3express:TagResource</code> permission to create a directory bucket with tags.</p> </li> </ul> </note>"
         }
       },
       "documentation":"<p>The configuration information for the bucket.</p>"
     },
+    "CreateBucketMetadataConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "Bucket",
+        "MetadataConfiguration"
+      ],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p> The general purpose bucket that you want to create the metadata configuration for. </p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "ContentMD5":{
+          "shape":"ContentMD5",
+          "documentation":"<p> The <code>Content-MD5</code> header for the metadata configuration. </p>",
+          "location":"header",
+          "locationName":"Content-MD5"
+        },
+        "ChecksumAlgorithm":{
+          "shape":"ChecksumAlgorithm",
+          "documentation":"<p> The checksum algorithm to use with your metadata configuration. </p>",
+          "location":"header",
+          "locationName":"x-amz-sdk-checksum-algorithm"
+        },
+        "MetadataConfiguration":{
+          "shape":"MetadataConfiguration",
+          "documentation":"<p> The contents of your metadata configuration. </p>",
+          "locationName":"MetadataConfiguration",
+          "xmlNamespace":{"uri":"http://s3.amazonaws.com/doc/2006-03-01/"}
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p> The expected owner of the general purpose bucket that corresponds to your metadata configuration. </p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        }
+      },
+      "payload":"MetadataConfiguration"
+    },
     "CreateBucketMetadataTableConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -2820,7 +2917,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p> The general purpose bucket that you want to create the metadata table configuration in. </p>",
+          "documentation":"<p> The general purpose bucket that you want to create the metadata table configuration for. </p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -2845,7 +2942,7 @@
         },
         "ExpectedBucketOwner":{
           "shape":"AccountId",
-          "documentation":"<p> The expected owner of the general purpose bucket that contains your metadata table configuration. </p>",
+          "documentation":"<p> The expected owner of the general purpose bucket that corresponds to your metadata table configuration. </p>",
           "location":"header",
           "locationName":"x-amz-expected-bucket-owner"
         }
@@ -2860,6 +2957,12 @@
           "documentation":"<p>A forward slash followed by the name of the bucket.</p>",
           "location":"header",
           "locationName":"Location"
+        },
+        "BucketArn":{
+          "shape":"S3RegionalOrS3ExpressBucketArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 bucket. ARNs uniquely identify Amazon Web Services resources across all of Amazon Web Services.</p> <note> <p>This parameter is only supported for S3 directory buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Using tags with directory buckets</a>.</p> </note>",
+          "location":"header",
+          "locationName":"x-amz-bucket-arn"
         }
       }
     },
@@ -2960,7 +3063,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -3028,7 +3131,7 @@
         },
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket where the multipart upload is initiated and where the object is uploaded.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket where the multipart upload is initiated and where the object is uploaded.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -3108,13 +3211,13 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>).</p> <ul> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>. </p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> </li> </ul>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <ul> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>. </p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> </li> <li> <p> <b>S3 access points for Amazon FSx </b> - When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>. All Amazon FSx file systems have encryption configured by default and are encrypted at rest. Data is automatically encrypted before being written to the file system, and automatically decrypted as it is read. These processes are handled transparently by Amazon FSx.</p> </li> </ul>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p> </li> <li> <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p> </li> </ul> </note>",
+          "documentation":"<p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </li> <li> <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p> </li> </ul> </note>",
           "location":"header",
           "locationName":"x-amz-storage-class"
         },
@@ -3144,7 +3247,7 @@
         },
         "SSEKMSKeyId":{
           "shape":"SSEKMSKeyId",
-          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p> <p> <b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p> <p> <b>Directory buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code>, the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header is implicitly assigned the ID of the KMS symmetric encryption customer managed key that's configured for your directory bucket's default encryption setting. If you want to specify the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header explicitly, you can only specify it with the ID (Key ID or Key ARN) of the KMS customer managed key that's configured for your directory bucket's default encryption setting. Otherwise, you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>",
+          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p> <p> <b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p> <p> <b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error. </p>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption-aws-kms-key-id"
         },
@@ -3215,7 +3318,7 @@
       "members":{
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store objects in the directory bucket.</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store objects in the directory bucket.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -3263,13 +3366,13 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm to use when you store objects in the directory bucket.</p> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). By default, Amazon S3 encrypts data with SSE-S3. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The server-side encryption algorithm to use when you store objects in the directory bucket.</p> <p>For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). By default, Amazon S3 encrypts data with SSE-S3. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 access points for Amazon FSx </b> - When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>. All Amazon FSx file systems have encryption configured by default and are encrypted at rest. Data is automatically encrypted before being written to the file system, and automatically decrypted as it is read. These processes are handled transparently by Amazon FSx.</p>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
         "SSEKMSKeyId":{
           "shape":"SSEKMSKeyId",
-          "documentation":"<p>If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code>, you must specify the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header with the ID (Key ID or Key ARN) of the KMS symmetric encryption customer managed key to use. Otherwise, you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key ARN. The key alias format of the KMS key isn't supported. Also, if the KMS key doesn't exist in the same account that't issuing the command, you must use the full Key ARN not the Key ID. </p> <p>Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>",
+          "documentation":"<p>If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code>, you must specify the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header with the ID (Key ID or Key ARN) of the KMS symmetric encryption customer managed key to use. Otherwise, you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key ARN. The key alias format of the KMS key isn't supported. Also, if the KMS key doesn't exist in the same account that't issuing the command, you must use the full Key ARN not the Key ID. </p> <p>Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption-aws-kms-key-id"
         },
@@ -3426,6 +3529,12 @@
           "documentation":"<p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>",
           "location":"querystring",
           "locationName":"id"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
         }
       }
     },
@@ -3476,6 +3585,25 @@
         }
       }
     },
+    "DeleteBucketMetadataConfigurationRequest":{
+      "type":"structure",
+      "required":["Bucket"],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p> The general purpose bucket that you want to remove the metadata configuration from. </p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p> The expected bucket owner of the general purpose bucket that you want to remove the metadata table configuration from. </p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        }
+      }
+    },
     "DeleteBucketMetadataTableConfigurationRequest":{
       "type":"structure",
       "required":["Bucket"],
@@ -3643,7 +3771,7 @@
       "members":{
         "Owner":{
           "shape":"Owner",
-          "documentation":"<p>The account that created the delete marker.&gt;</p>"
+          "documentation":"<p>The account that created the delete marker. </p>"
         },
         "Key":{
           "shape":"ObjectKey",
@@ -3655,7 +3783,7 @@
         },
         "IsLatest":{
           "shape":"IsLatest",
-          "documentation":"<p>Specifies whether the object is (true) or is not (false) the latest version of an object.</p>"
+          "documentation":"<p>Specifies whether the object is (true) or is not (false) the latest version of an object. </p>"
         },
         "LastModified":{
           "shape":"LastModified",
@@ -3692,7 +3820,7 @@
       "members":{
         "DeleteMarker":{
           "shape":"DeleteMarker",
-          "documentation":"<p>Indicates whether the specified object version that was permanently deleted was (true) or was not (false) a delete marker before deletion. In a simple DELETE, this header indicates whether (true) or not (false) the current version of the object is a delete marker.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
+          "documentation":"<p>Indicates whether the specified object version that was permanently deleted was (true) or was not (false) a delete marker before deletion. In a simple DELETE, this header indicates whether (true) or not (false) the current version of the object is a delete marker. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
           "location":"header",
           "locationName":"x-amz-delete-marker"
         },
@@ -3718,7 +3846,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name of the bucket containing the object. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name of the bucket containing the object. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -3761,7 +3889,7 @@
         },
         "IfMatch":{
           "shape":"IfMatch",
-          "documentation":"<p>The <code>If-Match</code> header field makes the request method conditional on ETags. If the ETag value does not match, the operation returns a <code>412 Precondition Failed</code> error. If the ETag matches or if the object doesn't exist, the operation will return a <code>204 Success (No Content) response</code>.</p> <p>For more information about conditional requests, see <a href=\"https://docs.aws.amazon.com/https:/tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p> <note> <p>This functionality is only supported for directory buckets.</p> </note>",
+          "documentation":"<p>Deletes the object if the ETag (entity tag) value provided during the delete operation matches the ETag of the object in S3. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p> <p>Expects the ETag value as a string. <code>If-Match</code> does accept a string value of an '*' (asterisk) character to denote a match of any ETag.</p> <p>For more information about conditional requests, see <a href=\"https://tools.ietf.org/html/rfc7232\">RFC 7232</a>.</p>",
           "location":"header",
           "locationName":"If-Match"
         },
@@ -3799,7 +3927,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the objects from which to remove the tags. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the objects from which to remove the tags. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -3852,7 +3980,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the objects to delete. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the objects to delete. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -3888,7 +4016,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC-32</code> </p> </li> <li> <p> <code>CRC-32C</code> </p> </li> <li> <p> <code>CRC-64NVME</code> </p> </li> <li> <p> <code>SHA-1</code> </p> </li> <li> <p> <code>SHA-256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC32</code> </p> </li> <li> <p> <code>CRC32C</code> </p> </li> <li> <p> <code>CRC64NVME</code> </p> </li> <li> <p> <code>SHA1</code> </p> </li> <li> <p> <code>SHA256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         }
@@ -3927,7 +4055,7 @@
         },
         "DeleteMarker":{
           "shape":"DeleteMarker",
-          "documentation":"<p>Indicates whether the specified object version that was permanently deleted was (true) or was not (false) a delete marker before deletion. In a simple DELETE, this header indicates whether (true) or not (false) the current version of the object is a delete marker.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>"
+          "documentation":"<p>Indicates whether the specified object version that was permanently deleted was (true) or was not (false) a delete marker before deletion. In a simple DELETE, this header indicates whether (true) or not (false) the current version of the object is a delete marker. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>"
         },
         "DeleteMarkerVersionId":{
           "shape":"DeleteMarkerVersionId",
@@ -3957,7 +4085,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p> The storage class to use when replicating objects, such as S3 Standard or reduced redundancy. By default, Amazon S3 uses the storage class of the source object to create the object replica. </p> <p>For valid values, see the <code>StorageClass</code> element of the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html\">PUT Bucket replication</a> action in the <i>Amazon S3 API Reference</i>.</p>"
+          "documentation":"<p> The storage class to use when replicating objects, such as S3 Standard or reduced redundancy. By default, Amazon S3 uses the storage class of the source object to create the object replica. </p> <p>For valid values, see the <code>StorageClass</code> element of the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html\">PUT Bucket replication</a> action in the <i>Amazon S3 API Reference</i>.</p> <p> <code>FSX_OPENZFS</code> is not an accepted value when replicating objects.</p>"
         },
         "AccessControlTranslation":{
           "shape":"AccessControlTranslation",
@@ -3978,6 +4106,24 @@
       },
       "documentation":"<p>Specifies information about where to publish analysis or configuration results for an Amazon S3 bucket and S3 Replication Time Control (S3 RTC).</p>"
     },
+    "DestinationResult":{
+      "type":"structure",
+      "members":{
+        "TableBucketType":{
+          "shape":"S3TablesBucketType",
+          "documentation":"<p> The type of the table bucket where the metadata configuration is stored. The <code>aws</code> value indicates an Amazon Web Services managed table bucket, and the <code>customer</code> value indicates a customer-managed table bucket. V2 metadata configurations are stored in Amazon Web Services managed table buckets, and V1 metadata configurations are stored in customer-managed table buckets. </p>"
+        },
+        "TableBucketArn":{
+          "shape":"S3TablesBucketArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the table bucket where the metadata configuration is stored. </p>"
+        },
+        "TableNamespace":{
+          "shape":"S3TablesNamespace",
+          "documentation":"<p> The namespace in the table bucket where the metadata tables for a metadata configuration are stored. </p>"
+        }
+      },
+      "documentation":"<p> The destination information for the S3 Metadata configuration. </p>"
+    },
     "DirectoryBucketToken":{
       "type":"string",
       "max":1024,
@@ -4026,8 +4172,7 @@
     },
     "EncryptionTypeMismatch":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The existing object was created with a different encryption type. Subsequent write requests must include the appropriate encryption parameters in the request or while creating the session. </p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -4038,8 +4183,7 @@
     },
     "EndEvent":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A message that indicates the request is complete and no more messages will be sent. You should not assume that the request is complete until the client receives an <code>EndEvent</code>.</p>",
       "event":true
     },
@@ -4071,14 +4215,14 @@
       "members":{
         "ErrorCode":{
           "shape":"ErrorCode",
-          "documentation":"<p> If the <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code> and <code>s3tables:PutTablePolicy</code> permissions, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableAlreadyExists</code> - The table that you specified already exists in the table bucket's namespace. Specify a different table name. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableBucketNotFound</code> - The table bucket that you specified doesn't exist in this Amazon Web Services Region and account. Create or choose a different table bucket. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> </ul>"
+          "documentation":"<p> If the V1 <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code> and <code>s3tables:PutTablePolicy</code> permissions, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableAlreadyExists</code> - The table that you specified already exists in the table bucket's namespace. Specify a different table name. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableBucketNotFound</code> - The table bucket that you specified doesn't exist in this Amazon Web Services Region and account. Create or choose a different table bucket. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> </ul> <p> If the V2 <code>CreateBucketMetadataConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateTableBucket</code>, <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code>, <code>s3tables:PutTablePolicy</code>, <code>kms:DescribeKey</code>, and <code>s3tables:PutTableEncryption</code> permissions. Additionally, ensure that the KMS key used to encrypt the table still exists, is active and has a resource policy granting access to the S3 service principals '<code>maintenance.s3tables.amazonaws.com</code>' and '<code>metadata.s3.amazonaws.com</code>'. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>JournalTableAlreadyExists</code> - A journal table already exists in the Amazon Web Services managed table bucket's namespace. Delete the journal table, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>InventoryTableAlreadyExists</code> - An inventory table already exists in the Amazon Web Services managed table bucket's namespace. Delete the inventory table, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>JournalTableNotAvailable</code> - The journal table that the inventory table relies on has a <code>FAILED</code> status. An inventory table requires a journal table with an <code>ACTIVE</code> status. To create a new journal or inventory table, you must delete the metadata configuration for this bucket, along with any journal or inventory tables, and then create a new metadata configuration.</p> </li> <li> <p> <code>NoSuchBucket</code> - The specified general purpose bucket does not exist.</p> </li> </ul>"
         },
         "ErrorMessage":{
           "shape":"ErrorMessage",
-          "documentation":"<p> If the <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error message. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code> and <code>s3tables:PutTablePolicy</code> permissions, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableAlreadyExists</code> - The table that you specified already exists in the table bucket's namespace. Specify a different table name. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableBucketNotFound</code> - The table bucket that you specified doesn't exist in this Amazon Web Services Region and account. Create or choose a different table bucket. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> </ul>"
+          "documentation":"<p> If the V1 <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error message. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code> and <code>s3tables:PutTablePolicy</code> permissions, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableAlreadyExists</code> - The table that you specified already exists in the table bucket's namespace. Specify a different table name. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>TableBucketNotFound</code> - The table bucket that you specified doesn't exist in this Amazon Web Services Region and account. Create or choose a different table bucket. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> </ul> <p> If the V2 <code>CreateBucketMetadataConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code. The possible error codes and error messages are as follows: </p> <ul> <li> <p> <code>AccessDeniedCreatingResources</code> - You don't have sufficient permissions to create the required resources. Make sure that you have <code>s3tables:CreateTableBucket</code>, <code>s3tables:CreateNamespace</code>, <code>s3tables:CreateTable</code>, <code>s3tables:GetTable</code>, <code>s3tables:PutTablePolicy</code>, <code>kms:DescribeKey</code>, and <code>s3tables:PutTableEncryption</code> permissions. Additionally, ensure that the KMS key used to encrypt the table still exists, is active and has a resource policy granting access to the S3 service principals '<code>maintenance.s3tables.amazonaws.com</code>' and '<code>metadata.s3.amazonaws.com</code>'. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration. </p> </li> <li> <p> <code>AccessDeniedWritingToTable</code> - Unable to write to the metadata table because of missing resource permissions. To fix the resource policy, Amazon S3 needs to create a new metadata table. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>DestinationTableNotFound</code> - The destination table doesn't exist. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>ServerInternalError</code> - An internal error has occurred. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>JournalTableAlreadyExists</code> - A journal table already exists in the Amazon Web Services managed table bucket's namespace. Delete the journal table, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>InventoryTableAlreadyExists</code> - An inventory table already exists in the Amazon Web Services managed table bucket's namespace. Delete the inventory table, and then try again. To create a new metadata table, you must delete the metadata configuration for this bucket, and then create a new metadata configuration.</p> </li> <li> <p> <code>JournalTableNotAvailable</code> - The journal table that the inventory table relies on has a <code>FAILED</code> status. An inventory table requires a journal table with an <code>ACTIVE</code> status. To create a new journal or inventory table, you must delete the metadata configuration for this bucket, along with any journal or inventory tables, and then create a new metadata configuration.</p> </li> <li> <p> <code>NoSuchBucket</code> - The specified general purpose bucket does not exist.</p> </li> </ul>"
         }
       },
-      "documentation":"<p> If the <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code and error message. </p>"
+      "documentation":"<p> If an S3 Metadata V1 <code>CreateBucketMetadataTableConfiguration</code> or V2 <code>CreateBucketMetadataConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code and error message. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
     },
     "ErrorDocument":{
       "type":"structure",
@@ -4132,8 +4276,7 @@
     },
     "EventBridgeConfiguration":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A container for specifying the configuration for Amazon EventBridge.</p>"
     },
     "EventList":{
@@ -4160,6 +4303,13 @@
       ]
     },
     "Expiration":{"type":"string"},
+    "ExpirationState":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "ExpirationStatus":{
       "type":"string",
       "enum":[
@@ -4171,7 +4321,7 @@
       "type":"boolean",
       "box":true
     },
-    "Expires":{"type":"timestamp"},
+    "Expires":{"type":"string"},
     "ExposeHeader":{"type":"string"},
     "ExposeHeaders":{
       "type":"list",
@@ -4417,6 +4567,12 @@
           "documentation":"<p>The ID used to identify the S3 Intelligent-Tiering configuration.</p>",
           "location":"querystring",
           "locationName":"id"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
         }
       }
     },
@@ -4527,7 +4683,7 @@
       "members":{
         "LocationConstraint":{
           "shape":"BucketLocationConstraint",
-          "documentation":"<p>Specifies the Region where the bucket resides. For a list of all the Amazon S3 supported location constraints by Region, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a>. Buckets in Region <code>us-east-1</code> have a LocationConstraint of <code>null</code>.</p>"
+          "documentation":"<p>Specifies the Region where the bucket resides. For a list of all the Amazon S3 supported location constraints by Region, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region\">Regions and Endpoints</a>.</p> <p>Buckets in Region <code>us-east-1</code> have a LocationConstraint of <code>null</code>. Buckets with a LocationConstraint of <code>EU</code> reside in <code>eu-west-1</code>.</p>"
         }
       }
     },
@@ -4575,6 +4731,46 @@
         }
       }
     },
+    "GetBucketMetadataConfigurationOutput":{
+      "type":"structure",
+      "members":{
+        "GetBucketMetadataConfigurationResult":{
+          "shape":"GetBucketMetadataConfigurationResult",
+          "documentation":"<p> The metadata configuration for the general purpose bucket. </p>"
+        }
+      },
+      "payload":"GetBucketMetadataConfigurationResult"
+    },
+    "GetBucketMetadataConfigurationRequest":{
+      "type":"structure",
+      "required":["Bucket"],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p> The general purpose bucket that corresponds to the metadata configuration that you want to retrieve. </p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p> The expected owner of the general purpose bucket that you want to retrieve the metadata table configuration for. </p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        }
+      }
+    },
+    "GetBucketMetadataConfigurationResult":{
+      "type":"structure",
+      "required":["MetadataConfigurationResult"],
+      "members":{
+        "MetadataConfigurationResult":{
+          "shape":"MetadataConfigurationResult",
+          "documentation":"<p> The metadata configuration for a general purpose bucket. </p>"
+        }
+      },
+      "documentation":"<p> The S3 Metadata configuration for a general purpose bucket. </p>"
+    },
     "GetBucketMetadataTableConfigurationOutput":{
       "type":"structure",
       "members":{
@@ -4591,14 +4787,14 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p> The general purpose bucket that contains the metadata table configuration that you want to retrieve. </p>",
+          "documentation":"<p> The general purpose bucket that corresponds to the metadata table configuration that you want to retrieve. </p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
         },
         "ExpectedBucketOwner":{
           "shape":"AccountId",
-          "documentation":"<p> The expected owner of the general purpose bucket that you want to retrieve the metadata table configuration from. </p>",
+          "documentation":"<p> The expected owner of the general purpose bucket that you want to retrieve the metadata table configuration for. </p>",
           "location":"header",
           "locationName":"x-amz-expected-bucket-owner"
         }
@@ -4613,18 +4809,18 @@
       "members":{
         "MetadataTableConfigurationResult":{
           "shape":"MetadataTableConfigurationResult",
-          "documentation":"<p> The metadata table configuration for a general purpose bucket. </p>"
+          "documentation":"<p> The V1 S3 Metadata configuration for a general purpose bucket. </p>"
         },
         "Status":{
           "shape":"MetadataTableStatus",
-          "documentation":"<p> The status of the metadata table. The status values are: </p> <ul> <li> <p> <code>CREATING</code> - The metadata table is in the process of being created in the specified table bucket.</p> </li> <li> <p> <code>ACTIVE</code> - The metadata table has been created successfully and records are being delivered to the table. </p> </li> <li> <p> <code>FAILED</code> - Amazon S3 is unable to create the metadata table, or Amazon S3 is unable to deliver records. See <code>ErrorDetails</code> for details.</p> </li> </ul>"
+          "documentation":"<p> The status of the metadata table. The status values are: </p> <ul> <li> <p> <code>CREATING</code> - The metadata table is in the process of being created in the specified table bucket.</p> </li> <li> <p> <code>ACTIVE</code> - The metadata table has been created successfully, and records are being delivered to the table. </p> </li> <li> <p> <code>FAILED</code> - Amazon S3 is unable to create the metadata table, or Amazon S3 is unable to deliver records. See <code>ErrorDetails</code> for details.</p> </li> </ul>"
         },
         "Error":{
           "shape":"ErrorDetails",
           "documentation":"<p> If the <code>CreateBucketMetadataTableConfiguration</code> request succeeds, but S3 Metadata was unable to create the table, this structure contains the error code and error message. </p>"
         }
       },
-      "documentation":"<p> The metadata table configuration for a general purpose bucket. </p>"
+      "documentation":"<p> The V1 S3 Metadata configuration for a general purpose bucket. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
     },
     "GetBucketMetricsConfigurationOutput":{
       "type":"structure",
@@ -4728,7 +4924,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name to get the bucket policy for.</p> <p> <b>Directory buckets </b> - When you use this operation with a directory bucket, you must use path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must also follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i> </p> <p> <b>Access points</b> - When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p> <b>Object Lambda access points</b> - When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note>",
+          "documentation":"<p>The bucket name to get the bucket policy for.</p> <p> <b>Directory buckets </b> - When you use this operation with a directory bucket, you must use path-style requests in the format <code>https://s3express-control.<i>region-code</i>.amazonaws.com/<i>bucket-name</i> </code>. Virtual-hosted-style requests aren't supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must also follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i> </p> <p> <b>Access points</b> - When you use this API operation with an access point, provide the alias of the access point in place of the bucket name.</p> <p> <b>Object Lambda access points</b> - When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -4954,7 +5150,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name that contains the object for which to get the ACL information. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name that contains the object for which to get the ACL information. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -4990,7 +5186,7 @@
       "members":{
         "DeleteMarker":{
           "shape":"DeleteMarker",
-          "documentation":"<p>Specifies whether the object retrieved was (<code>true</code>) or was not (<code>false</code>) a delete marker. If <code>false</code>, this response header does not appear in the response.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
+          "documentation":"<p>Specifies whether the object retrieved was (<code>true</code>) or was not (<code>false</code>) a delete marker. If <code>false</code>, this response header does not appear in the response. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
           "location":"header",
           "locationName":"x-amz-delete-marker"
         },
@@ -5025,7 +5221,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>Provides the storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a>.</p> <note> <p> <b>Directory buckets</b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+          "documentation":"<p>Provides the storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a>.</p> <note> <p> <b>Directory buckets</b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
         },
         "ObjectSize":{
           "shape":"ObjectSize",
@@ -5059,7 +5255,7 @@
         },
         "Parts":{
           "shape":"PartsList",
-          "documentation":"<p>A container for elements related to a particular part. A response can contain zero or more <code>Parts</code> elements.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For <code>GetObjectAttributes</code>, if a additional checksum (including <code>x-amz-checksum-crc32</code>, <code>x-amz-checksum-crc32c</code>, <code>x-amz-checksum-sha1</code>, or <code>x-amz-checksum-sha256</code>) isn't applied to the object specified in the request, the response doesn't return <code>Part</code>.</p> </li> <li> <p> <b>Directory buckets</b> - For <code>GetObjectAttributes</code>, no matter whether a additional checksum is applied to the object specified in the request, the response returns <code>Part</code>.</p> </li> </ul> </note>",
+          "documentation":"<p>A container for elements related to a particular part. A response can contain zero or more <code>Parts</code> elements.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - For <code>GetObjectAttributes</code>, if an additional checksum (including <code>x-amz-checksum-crc32</code>, <code>x-amz-checksum-crc32c</code>, <code>x-amz-checksum-sha1</code>, or <code>x-amz-checksum-sha256</code>) isn't applied to the object specified in the request, the response doesn't return the <code>Part</code> element.</p> </li> <li> <p> <b>Directory buckets</b> - For <code>GetObjectAttributes</code>, regardless of whether an additional checksum is applied to the object specified in the request, the response returns the <code>Part</code> element.</p> </li> </ul> </note>",
           "locationName":"Part"
         }
       },
@@ -5075,7 +5271,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket that contains the object.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket that contains the object.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5094,13 +5290,13 @@
         },
         "MaxParts":{
           "shape":"MaxParts",
-          "documentation":"<p>Sets the maximum number of parts to return.</p>",
+          "documentation":"<p>Sets the maximum number of parts to return. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html\">Uploading and copying objects using multipart upload in Amazon S3 </a> in the <i>Amazon Simple Storage Service user guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-max-parts"
         },
         "PartNumberMarker":{
           "shape":"PartNumberMarker",
-          "documentation":"<p>Specifies the part after which listing should begin. Only parts with higher part numbers will be listed.</p>",
+          "documentation":"<p>Specifies the part after which listing should begin. Only parts with higher part numbers will be listed. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html\">Uploading and copying objects using multipart upload in Amazon S3 </a> in the <i>Amazon Simple Storage Service user guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-part-number-marker"
         },
@@ -5161,7 +5357,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object whose legal hold status you want to retrieve. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object whose legal hold status you want to retrieve. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5207,7 +5403,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket whose Object Lock configuration you want to retrieve.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket whose Object Lock configuration you want to retrieve.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5248,7 +5444,7 @@
         },
         "Restore":{
           "shape":"Restore",
-          "documentation":"<p>Provides information about object restoration action and expiration time of the restored object copy.</p> <note> <p>This functionality is not supported for directory buckets. Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>",
+          "documentation":"<p>Provides information about object restoration action and expiration time of the restored object copy.</p> <note> <p>This functionality is not supported for directory buckets. Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>",
           "location":"header",
           "locationName":"x-amz-restore"
         },
@@ -5272,31 +5468,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object. This checksum is only present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. This checksum is only present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -5368,7 +5564,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3.</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -5404,7 +5600,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>Provides storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <note> <p> <b>Directory buckets </b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>",
+          "documentation":"<p>Provides storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <note> <p> <b>Directory buckets </b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>",
           "location":"header",
           "locationName":"x-amz-storage-class"
         },
@@ -5461,7 +5657,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Object Lambda access points</b> - When you use this action with an Object Lambda access point, you must direct requests to the Object Lambda access point hostname. The Object Lambda access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-object-lambda.<i>Region</i>.amazonaws.com.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Object Lambda access points</b> - When you use this action with an Object Lambda access point, you must direct requests to the Object Lambda access point hostname. The Object Lambda access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-object-lambda.<i>Region</i>.amazonaws.com.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5582,7 +5778,7 @@
         },
         "ChecksumMode":{
           "shape":"ChecksumMode",
-          "documentation":"<p>To retrieve the checksum, this mode must be enabled.</p> <p> <b>General purpose buckets</b> - In addition, if you enable checksum mode and the object is uploaded with a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html\">checksum</a> and encrypted with an Key Management Service (KMS) key, you must have permission to use the <code>kms:Decrypt</code> action to retrieve the checksum.</p>",
+          "documentation":"<p>To retrieve the checksum, this mode must be enabled.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-mode"
         }
@@ -5612,7 +5808,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object whose retention settings you want to retrieve. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object whose retention settings you want to retrieve. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5667,7 +5863,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object for which to get the tagging information. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object for which to get the tagging information. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5832,7 +6028,7 @@
           "documentation":"<p>URI of the grantee group.</p>"
         }
       },
-      "documentation":"<p>Container for the person being granted permissions.</p>",
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <p>Container for the person being granted permissions.</p>",
       "xmlNamespace":{
         "prefix":"xsi",
         "uri":"http://www.w3.org/2001/XMLSchema-instance"
@@ -5848,6 +6044,12 @@
     "HeadBucketOutput":{
       "type":"structure",
       "members":{
+        "BucketArn":{
+          "shape":"S3RegionalOrS3ExpressBucketArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 bucket. ARNs uniquely identify Amazon Web Services resources across all of Amazon Web Services.</p> <note> <p>This parameter is only supported for S3 directory buckets. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Using tags with directory buckets</a>.</p> </note>",
+          "location":"header",
+          "locationName":"x-amz-bucket-arn"
+        },
         "BucketLocationType":{
           "shape":"LocationType",
           "documentation":"<p>The type of location where the bucket is created.</p> <note> <p>This functionality is only supported by directory buckets.</p> </note>",
@@ -5880,7 +6082,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Object Lambda access points</b> - When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Object Lambda access points</b> - When you use this API operation with an Object Lambda access point, provide the alias of the Object Lambda access point in place of the bucket name. If the Object Lambda access point alias in a request is not valid, the error code <code>InvalidAccessPointAliasError</code> is returned. For more information about <code>InvalidAccessPointAliasError</code>, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">List of Error Codes</a>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -5916,7 +6118,7 @@
         },
         "Restore":{
           "shape":"Restore",
-          "documentation":"<p>If the object is an archived object (an object whose storage class is GLACIER), the response includes this header if either the archive restoration is in progress (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> or an archive copy is already restored.</p> <p> If an archive copy is already restored, the header value indicates when Amazon S3 is scheduled to delete the object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request=\"false\", expiry-date=\"Fri, 21 Dec 2012 00:00:00 GMT\"</code> </p> <p>If the object restoration is in progress, the header returns the value <code>ongoing-request=\"true\"</code>.</p> <p>For more information about archiving objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations\">Transitioning Objects: General Considerations</a>.</p> <note> <p>This functionality is not supported for directory buckets. Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>",
+          "documentation":"<p>If the object is an archived object (an object whose storage class is GLACIER), the response includes this header if either the archive restoration is in progress (see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_RestoreObject.html\">RestoreObject</a> or an archive copy is already restored.</p> <p> If an archive copy is already restored, the header value indicates when Amazon S3 is scheduled to delete the object copy. For example:</p> <p> <code>x-amz-restore: ongoing-request=\"false\", expiry-date=\"Fri, 21 Dec 2012 00:00:00 GMT\"</code> </p> <p>If the object restoration is in progress, the header returns the value <code>ongoing-request=\"true\"</code>.</p> <p>For more information about archiving objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations\">Transitioning Objects: General Considerations</a>.</p> <note> <p>This functionality is not supported for directory buckets. Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>",
           "location":"header",
           "locationName":"x-amz-restore"
         },
@@ -5940,31 +6142,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -6022,6 +6224,12 @@
           "location":"header",
           "locationName":"Content-Type"
         },
+        "ContentRange":{
+          "shape":"ContentRange",
+          "documentation":"<p>The portion of the object returned in the response for a <code>GET</code> request.</p>",
+          "location":"header",
+          "locationName":"Content-Range"
+        },
         "Expires":{
           "shape":"Expires",
           "documentation":"<p>The date and time at which the object is no longer cacheable.</p>",
@@ -6036,7 +6244,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -6072,7 +6280,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>Provides storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a>.</p> <note> <p> <b>Directory buckets </b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>",
+          "documentation":"<p>Provides storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a>.</p> <note> <p> <b>Directory buckets </b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>",
           "location":"header",
           "locationName":"x-amz-storage-class"
         },
@@ -6093,6 +6301,12 @@
           "location":"header",
           "locationName":"x-amz-mp-parts-count"
         },
+        "TagCount":{
+          "shape":"TagCount",
+          "documentation":"<p>The number of tags, if any, on the object, when you have the relevant permission to read object tags.</p> <p>You can use <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html\">GetObjectTagging</a> to retrieve the tag set associated with an object.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
+          "location":"header",
+          "locationName":"x-amz-tagging-count"
+        },
         "ObjectLockMode":{
           "shape":"ObjectLockMode",
           "documentation":"<p>The Object Lock mode, if any, that's in effect for this object. This header is only returned if the requester has the <code>s3:GetObjectRetention</code> permission. For more information about S3 Object Lock, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html\">Object Lock</a>. </p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
@@ -6122,7 +6336,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket that contains the object.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket that contains the object.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -6253,6 +6467,13 @@
     "HttpErrorCodeReturnedEquals":{"type":"string"},
     "HttpRedirectCode":{"type":"string"},
     "ID":{"type":"string"},
+    "IdempotencyParameterMismatch":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Parameters on this idempotent request are inconsistent with parameters used in previous request(s). </p> <p>For a list of error codes and more information on Amazon S3 errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\">Error codes</a>.</p> <note> <p>Idempotency ensures that an API request completes no more than one time. With an idempotent request, if the original request completes successfully, any subsequent retries complete successfully without performing any further actions.</p> </note>",
+      "error":{"httpStatusCode":400},
+      "exception":true
+    },
     "IfMatch":{"type":"string"},
     "IfMatchInitiatedTime":{
       "type":"timestamp",
@@ -6412,16 +6633,14 @@
     },
     "InvalidRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You may receive this error in multiple cases. Depending on the reason for the error, you may receive one of the messages below:</p> <ul> <li> <p>Cannot specify both a write offset value and user-defined object metadata for existing objects.</p> </li> <li> <p>Checksum Type mismatch occurred, expected checksum Type: sha1, actual checksum Type: crc32c.</p> </li> <li> <p>Request body cannot be empty when 'write offset' is specified.</p> </li> </ul>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
     "InvalidWriteOffset":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> The write offset value that you specified does not match the current object size. </p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -6465,13 +6684,20 @@
           "documentation":"<p>Specifies the schedule for generating inventory results.</p>"
         }
       },
-      "documentation":"<p>Specifies the inventory configuration for an Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html\">GET Bucket inventory</a> in the <i>Amazon S3 API Reference</i>. </p>"
+      "documentation":"<p>Specifies the S3 Inventory configuration for an Amazon S3 bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html\">GET Bucket inventory</a> in the <i>Amazon S3 API Reference</i>. </p>"
     },
     "InventoryConfigurationList":{
       "type":"list",
       "member":{"shape":"InventoryConfiguration"},
       "flattened":true
     },
+    "InventoryConfigurationState":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "InventoryDestination":{
       "type":"structure",
       "required":["S3BucketDestination"],
@@ -6481,7 +6707,7 @@
           "documentation":"<p>Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.</p>"
         }
       },
-      "documentation":"<p>Specifies the inventory configuration for an Amazon S3 bucket.</p>"
+      "documentation":"<p>Specifies the S3 Inventory configuration for an Amazon S3 bucket.</p>"
     },
     "InventoryEncryption":{
       "type":"structure",
@@ -6497,7 +6723,7 @@
           "locationName":"SSE-KMS"
         }
       },
-      "documentation":"<p>Contains the type of server-side encryption used to encrypt the inventory results.</p>"
+      "documentation":"<p>Contains the type of server-side encryption used to encrypt the S3 Inventory results.</p>"
     },
     "InventoryFilter":{
       "type":"structure",
@@ -6508,7 +6734,7 @@
           "documentation":"<p>The prefix that an object must have to be included in the inventory results.</p>"
         }
       },
-      "documentation":"<p>Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.</p>"
+      "documentation":"<p>Specifies an S3 Inventory filter. The inventory only includes objects that meet the filter's criteria.</p>"
     },
     "InventoryFormat":{
       "type":"string",
@@ -6588,7 +6814,7 @@
           "documentation":"<p>Contains the type of server-side encryption used to encrypt the inventory results.</p>"
         }
       },
-      "documentation":"<p>Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.</p>"
+      "documentation":"<p>Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where S3 Inventory results are published.</p>"
     },
     "InventorySchedule":{
       "type":"structure",
@@ -6599,7 +6825,61 @@
           "documentation":"<p>Specifies how frequently inventory results are produced.</p>"
         }
       },
-      "documentation":"<p>Specifies the schedule for generating inventory results.</p>"
+      "documentation":"<p>Specifies the schedule for generating S3 Inventory results.</p>"
+    },
+    "InventoryTableConfiguration":{
+      "type":"structure",
+      "required":["ConfigurationState"],
+      "members":{
+        "ConfigurationState":{
+          "shape":"InventoryConfigurationState",
+          "documentation":"<p> The configuration state of the inventory table, indicating whether the inventory table is enabled or disabled. </p>"
+        },
+        "EncryptionConfiguration":{
+          "shape":"MetadataTableEncryptionConfiguration",
+          "documentation":"<p> The encryption configuration for the inventory table. </p>"
+        }
+      },
+      "documentation":"<p> The inventory table configuration for an S3 Metadata configuration. </p>"
+    },
+    "InventoryTableConfigurationResult":{
+      "type":"structure",
+      "required":["ConfigurationState"],
+      "members":{
+        "ConfigurationState":{
+          "shape":"InventoryConfigurationState",
+          "documentation":"<p> The configuration state of the inventory table, indicating whether the inventory table is enabled or disabled. </p>"
+        },
+        "TableStatus":{
+          "shape":"MetadataTableStatus",
+          "documentation":"<p> The status of the inventory table. The status values are: </p> <ul> <li> <p> <code>CREATING</code> - The inventory table is in the process of being created in the specified Amazon Web Services managed table bucket.</p> </li> <li> <p> <code>BACKFILLING</code> - The inventory table is in the process of being backfilled. When you enable the inventory table for your metadata configuration, the table goes through a process known as backfilling, during which Amazon S3 scans your general purpose bucket to retrieve the initial metadata for all objects in the bucket. Depending on the number of objects in your bucket, this process can take several hours. When the backfilling process is finished, the status of your inventory table changes from <code>BACKFILLING</code> to <code>ACTIVE</code>. After backfilling is completed, updates to your objects are reflected in the inventory table within one hour.</p> </li> <li> <p> <code>ACTIVE</code> - The inventory table has been created successfully, and records are being delivered to the table. </p> </li> <li> <p> <code>FAILED</code> - Amazon S3 is unable to create the inventory table, or Amazon S3 is unable to deliver records.</p> </li> </ul>"
+        },
+        "Error":{"shape":"ErrorDetails"},
+        "TableName":{
+          "shape":"S3TablesName",
+          "documentation":"<p> The name of the inventory table. </p>"
+        },
+        "TableArn":{
+          "shape":"S3TablesArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) for the inventory table. </p>"
+        }
+      },
+      "documentation":"<p> The inventory table configuration for an S3 Metadata configuration. </p>"
+    },
+    "InventoryTableConfigurationUpdates":{
+      "type":"structure",
+      "required":["ConfigurationState"],
+      "members":{
+        "ConfigurationState":{
+          "shape":"InventoryConfigurationState",
+          "documentation":"<p> The configuration state of the inventory table, indicating whether the inventory table is enabled or disabled. </p>"
+        },
+        "EncryptionConfiguration":{
+          "shape":"MetadataTableEncryptionConfiguration",
+          "documentation":"<p> The encryption configuration for the inventory table. </p>"
+        }
+      },
+      "documentation":"<p> The specified updates to the S3 Metadata inventory table configuration. </p>"
     },
     "IsEnabled":{
       "type":"boolean",
@@ -6648,10 +6928,65 @@
         "LINES"
       ]
     },
+    "JournalTableConfiguration":{
+      "type":"structure",
+      "required":["RecordExpiration"],
+      "members":{
+        "RecordExpiration":{
+          "shape":"RecordExpiration",
+          "documentation":"<p> The journal table record expiration settings for the journal table. </p>"
+        },
+        "EncryptionConfiguration":{
+          "shape":"MetadataTableEncryptionConfiguration",
+          "documentation":"<p> The encryption configuration for the journal table. </p>"
+        }
+      },
+      "documentation":"<p> The journal table configuration for an S3 Metadata configuration. </p>"
+    },
+    "JournalTableConfigurationResult":{
+      "type":"structure",
+      "required":[
+        "TableStatus",
+        "TableName",
+        "RecordExpiration"
+      ],
+      "members":{
+        "TableStatus":{
+          "shape":"MetadataTableStatus",
+          "documentation":"<p> The status of the journal table. The status values are: </p> <ul> <li> <p> <code>CREATING</code> - The journal table is in the process of being created in the specified table bucket.</p> </li> <li> <p> <code>ACTIVE</code> - The journal table has been created successfully, and records are being delivered to the table. </p> </li> <li> <p> <code>FAILED</code> - Amazon S3 is unable to create the journal table, or Amazon S3 is unable to deliver records.</p> </li> </ul>"
+        },
+        "Error":{"shape":"ErrorDetails"},
+        "TableName":{
+          "shape":"S3TablesName",
+          "documentation":"<p> The name of the journal table. </p>"
+        },
+        "TableArn":{
+          "shape":"S3TablesArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) for the journal table. </p>"
+        },
+        "RecordExpiration":{
+          "shape":"RecordExpiration",
+          "documentation":"<p> The journal table record expiration settings for the journal table. </p>"
+        }
+      },
+      "documentation":"<p> The journal table configuration for the S3 Metadata configuration. </p>"
+    },
+    "JournalTableConfigurationUpdates":{
+      "type":"structure",
+      "required":["RecordExpiration"],
+      "members":{
+        "RecordExpiration":{
+          "shape":"RecordExpiration",
+          "documentation":"<p> The journal table record expiration settings for the journal table. </p>"
+        }
+      },
+      "documentation":"<p> The specified updates to the S3 Metadata journal table configuration. </p>"
+    },
     "KMSContext":{"type":"string"},
     "KeyCount":{"type":"integer"},
     "KeyMarker":{"type":"string"},
     "KeyPrefixEquals":{"type":"string"},
+    "KmsKeyArn":{"type":"string"},
     "LambdaFunctionArn":{"type":"string"},
     "LambdaFunctionConfiguration":{
       "type":"structure",
@@ -6729,12 +7064,12 @@
         },
         "Prefix":{
           "shape":"Prefix",
-          "documentation":"<p>Prefix identifying one or more objects to which the rule applies. This is no longer used; use <code>Filter</code> instead.</p> <important> <p>Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints\"> XML related object key constraints</a>.</p> </important>",
+          "documentation":"<p> The general purpose bucket prefix that identifies one or more objects to which the rule applies. We recommend using <code>Filter</code> instead of <code>Prefix</code> for new PUTs. Previous configurations where a prefix is defined will continue to operate as before.</p> <important> <p>Replacement must be made for object keys containing special characters (such as carriage returns) when using XML requests. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-xml-related-constraints\"> XML related object key constraints</a>.</p> </important>",
           "deprecated":true
         },
         "Filter":{
           "shape":"LifecycleRuleFilter",
-          "documentation":"<p>The <code>Filter</code> is used to identify objects that a Lifecycle Rule applies to. A <code>Filter</code> must have exactly one of <code>Prefix</code>, <code>Tag</code>, or <code>And</code> specified. <code>Filter</code> is required if the <code>LifecycleRule</code> does not contain a <code>Prefix</code> element.</p> <note> <p> <code>Tag</code> filters are not supported for directory buckets.</p> </note>"
+          "documentation":"<p>The <code>Filter</code> is used to identify objects that a Lifecycle Rule applies to. A <code>Filter</code> must have exactly one of <code>Prefix</code>, <code>Tag</code>, <code>ObjectSizeGreaterThan</code>, <code>ObjectSizeLessThan</code>, or <code>And</code> specified. <code>Filter</code> is required if the <code>LifecycleRule</code> does not contain a <code>Prefix</code> element.</p> <p>For more information about <code>Tag</code> filters, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-filters.html\">Adding filters to Lifecycle rules</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p> <code>Tag</code> filters are not supported for directory buckets.</p> </note>"
         },
         "Status":{
           "shape":"ExpirationStatus",
@@ -6892,6 +7227,12 @@
           "documentation":"<p>The <code>ContinuationToken</code> that represents a placeholder from where this request should begin.</p>",
           "location":"querystring",
           "locationName":"continuation-token"
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
         }
       }
     },
@@ -7134,14 +7475,14 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket to which the multipart upload was initiated. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket to which the multipart upload was initiated. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
         },
         "Delimiter":{
           "shape":"Delimiter",
-          "documentation":"<p>Character you use to group keys.</p> <p>All keys that contain the same string between the prefix, if specified, and the first occurrence of the delimiter after the prefix are grouped under a single result element, <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the substring starts at the beginning of the key. The keys that are grouped under <code>CommonPrefixes</code> result element are not returned elsewhere in the response.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, <code>/</code> is the only supported delimiter.</p> </note>",
+          "documentation":"<p>Character you use to group keys.</p> <p>All keys that contain the same string between the prefix, if specified, and the first occurrence of the delimiter after the prefix are grouped under a single result element, <code>CommonPrefixes</code>. If you don't specify the prefix parameter, then the substring starts at the beginning of the key. The keys that are grouped under <code>CommonPrefixes</code> result element are not returned elsewhere in the response.</p> <p> <code>CommonPrefixes</code> is filtered out from results if it is not lexicographically greater than the key-marker.</p> <note> <p> <b>Directory buckets</b> - For directory buckets, <code>/</code> is the only supported delimiter.</p> </note>",
           "location":"querystring",
           "locationName":"delimiter"
         },
@@ -7218,7 +7559,7 @@
         },
         "DeleteMarkers":{
           "shape":"DeleteMarkers",
-          "documentation":"<p>Container for an object that is a delete marker.</p>",
+          "documentation":"<p>Container for an object that is a delete marker. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p>",
           "locationName":"DeleteMarker"
         },
         "Name":{
@@ -7265,7 +7606,7 @@
         },
         "Delimiter":{
           "shape":"Delimiter",
-          "documentation":"<p>A delimiter is a character that you specify to group keys. All keys that contain the same string between the <code>prefix</code> and the first occurrence of the delimiter are grouped under a single result element in <code>CommonPrefixes</code>. These groups are counted as one result against the <code>max-keys</code> limitation. These keys are not returned elsewhere in the response.</p>",
+          "documentation":"<p>A delimiter is a character that you specify to group keys. All keys that contain the same string between the <code>prefix</code> and the first occurrence of the delimiter are grouped under a single result element in <code>CommonPrefixes</code>. These groups are counted as one result against the <code>max-keys</code> limitation. These keys are not returned elsewhere in the response.</p> <p> <code>CommonPrefixes</code> is filtered out from results if it is not lexicographically greater than the key-marker.</p>",
           "location":"querystring",
           "locationName":"delimiter"
         },
@@ -7374,14 +7715,14 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket containing the objects.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket containing the objects.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
         },
         "Delimiter":{
           "shape":"Delimiter",
-          "documentation":"<p>A delimiter is a character that you use to group keys.</p>",
+          "documentation":"<p>A delimiter is a character that you use to group keys.</p> <p> <code>CommonPrefixes</code> is filtered out from results if it is not lexicographically greater than the key-marker.</p>",
           "location":"querystring",
           "locationName":"delimiter"
         },
@@ -7470,7 +7811,7 @@
         },
         "ContinuationToken":{
           "shape":"Token",
-          "documentation":"<p> If <code>ContinuationToken</code> was sent with the request, it is included in the response. You can use the returned <code>ContinuationToken</code> for pagination of the list response. You can use this <code>ContinuationToken</code> for pagination of the list results. </p>"
+          "documentation":"<p> If <code>ContinuationToken</code> was sent with the request, it is included in the response. You can use the returned <code>ContinuationToken</code> for pagination of the list response.</p>"
         },
         "NextContinuationToken":{
           "shape":"NextToken",
@@ -7493,14 +7834,14 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
         },
         "Delimiter":{
           "shape":"Delimiter",
-          "documentation":"<p>A delimiter is a character that you use to group keys.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - For directory buckets, <code>/</code> is the only supported delimiter.</p> </li> <li> <p> <b>Directory buckets </b> - When you query <code>ListObjectsV2</code> with a delimiter during in-progress multipart uploads, the <code>CommonPrefixes</code> response parameter contains the prefixes that are associated with the in-progress multipart uploads. For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note>",
+          "documentation":"<p>A delimiter is a character that you use to group keys.</p> <p> <code>CommonPrefixes</code> is filtered out from results if it is not lexicographically greater than the <code>StartAfter</code> value.</p> <note> <ul> <li> <p> <b>Directory buckets</b> - For directory buckets, <code>/</code> is the only supported delimiter.</p> </li> <li> <p> <b>Directory buckets </b> - When you query <code>ListObjectsV2</code> with a delimiter during in-progress multipart uploads, the <code>CommonPrefixes</code> response parameter contains the prefixes that are associated with the in-progress multipart uploads. For more information about multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html\">Multipart Upload Overview</a> in the <i>Amazon S3 User Guide</i>.</p> </li> </ul> </note>",
           "location":"querystring",
           "locationName":"delimiter"
         },
@@ -7619,7 +7960,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>The class of storage used to store the uploaded object.</p> <note> <p> <b>Directory buckets</b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+          "documentation":"<p>The class of storage used to store the uploaded object.</p> <note> <p> <b>Directory buckets</b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
         },
         "RequestCharged":{
           "shape":"RequestCharged",
@@ -7646,7 +7987,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket to which the parts are being uploaded. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket to which the parts are being uploaded. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -7720,7 +8061,7 @@
           "documentation":"<p>The name of the location where the bucket will be created.</p> <p>For directory buckets, the name of the location is the Zone ID of the Availability Zone (AZ) or Local Zone (LZ) where the bucket will be created. An example AZ ID value is <code>usw2-az1</code>.</p>"
         }
       },
-      "documentation":"<p>Specifies the location where the bucket will be created.</p> <p>For directory buckets, the location type is Availability Zone or Local Zone. For more information about directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is only supported by directory buckets.</p> </note>"
+      "documentation":"<p>Specifies the location where the bucket will be created.</p> <p>For directory buckets, the location type is Availability Zone or Local Zone. For more information about directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html\">Working with directory buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is only supported by directory buckets.</p> </note>"
     },
     "LocationNameAsString":{"type":"string"},
     "LocationPrefix":{"type":"string"},
@@ -7798,6 +8139,40 @@
       "key":{"shape":"MetadataKey"},
       "value":{"shape":"MetadataValue"}
     },
+    "MetadataConfiguration":{
+      "type":"structure",
+      "required":["JournalTableConfiguration"],
+      "members":{
+        "JournalTableConfiguration":{
+          "shape":"JournalTableConfiguration",
+          "documentation":"<p> The journal table configuration for a metadata configuration. </p>"
+        },
+        "InventoryTableConfiguration":{
+          "shape":"InventoryTableConfiguration",
+          "documentation":"<p> The inventory table configuration for a metadata configuration. </p>"
+        }
+      },
+      "documentation":"<p> The S3 Metadata configuration for a general purpose bucket. </p>"
+    },
+    "MetadataConfigurationResult":{
+      "type":"structure",
+      "required":["DestinationResult"],
+      "members":{
+        "DestinationResult":{
+          "shape":"DestinationResult",
+          "documentation":"<p> The destination settings for a metadata configuration. </p>"
+        },
+        "JournalTableConfigurationResult":{
+          "shape":"JournalTableConfigurationResult",
+          "documentation":"<p> The journal table configuration for a metadata configuration. </p>"
+        },
+        "InventoryTableConfigurationResult":{
+          "shape":"InventoryTableConfigurationResult",
+          "documentation":"<p> The inventory table configuration for a metadata configuration. </p>"
+        }
+      },
+      "documentation":"<p> The S3 Metadata configuration for a general purpose bucket. </p>"
+    },
     "MetadataDirective":{
       "type":"string",
       "enum":[
@@ -7829,7 +8204,7 @@
           "documentation":"<p> The destination information for the metadata table configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
         }
       },
-      "documentation":"<p> The metadata table configuration for a general purpose bucket. </p>"
+      "documentation":"<p> The V1 S3 Metadata configuration for a general purpose bucket. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
     },
     "MetadataTableConfigurationResult":{
       "type":"structure",
@@ -7840,7 +8215,22 @@
           "documentation":"<p> The destination information for the metadata table configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
         }
       },
-      "documentation":"<p> The metadata table configuration for a general purpose bucket. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
+      "documentation":"<p> The V1 S3 Metadata configuration for a general purpose bucket. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
+    },
+    "MetadataTableEncryptionConfiguration":{
+      "type":"structure",
+      "required":["SseAlgorithm"],
+      "members":{
+        "SseAlgorithm":{
+          "shape":"TableSseAlgorithm",
+          "documentation":"<p> The encryption type specified for a metadata table. To specify server-side encryption with Key Management Service (KMS) keys (SSE-KMS), use the <code>aws:kms</code> value. To specify server-side encryption with Amazon S3 managed keys (SSE-S3), use the <code>AES256</code> value. </p>"
+        },
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p> If server-side encryption with Key Management Service (KMS) keys (SSE-KMS) is specified, you must also specify the KMS key Amazon Resource Name (ARN). You must specify a customer-managed KMS key that's located in the same Region as the general purpose bucket that corresponds to the metadata table configuration. </p>"
+        }
+      },
+      "documentation":"<p> The encryption settings for an S3 Metadata journal table or inventory table configuration. </p>"
     },
     "MetadataTableStatus":{"type":"string"},
     "MetadataValue":{"type":"string"},
@@ -7934,7 +8324,7 @@
       "box":true
     },
     "MissingMeta":{"type":"integer"},
-    "MpuObjectSize":{"type":"integer"},
+    "MpuObjectSize":{"type":"long"},
     "MultipartUpload":{
       "type":"structure",
       "members":{
@@ -7952,7 +8342,7 @@
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>The class of storage used to store the object.</p> <note> <p> <b>Directory buckets</b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+          "documentation":"<p>The class of storage used to store the object.</p> <note> <p> <b>Directory buckets</b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
         },
         "Owner":{
           "shape":"Owner",
@@ -7990,24 +8380,21 @@
     "NextVersionIdMarker":{"type":"string"},
     "NoSuchBucket":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified bucket does not exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
     },
     "NoSuchKey":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified key does not exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
     },
     "NoSuchUpload":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified multipart upload does not exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
@@ -8134,7 +8521,7 @@
         },
         "StorageClass":{
           "shape":"ObjectStorageClass",
-          "documentation":"<p>The class of storage used to store the object.</p> <note> <p> <b>Directory buckets</b> - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+          "documentation":"<p>The class of storage used to store the object.</p> <note> <p> <b>Directory buckets</b> - Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
         },
         "Owner":{
           "shape":"Owner",
@@ -8142,15 +8529,14 @@
         },
         "RestoreStatus":{
           "shape":"RestoreStatus",
-          "documentation":"<p>Specifies the restoration status of an object. Objects in certain storage classes must be restored before they can be retrieved. For more information about these storage classes and how to work with archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html\"> Working with archived objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets. Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+          "documentation":"<p>Specifies the restoration status of an object. Objects in certain storage classes must be restored before they can be retrieved. For more information about these storage classes and how to work with archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html\"> Working with archived objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets. Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
         }
       },
       "documentation":"<p>An object consists of data and its descriptive metadata.</p>"
     },
     "ObjectAlreadyInActiveTierError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>This action is not allowed against this storage tier.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -8306,8 +8692,7 @@
     "ObjectLockToken":{"type":"string"},
     "ObjectNotInActiveTierError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The source object of the COPY action is not in the active tier and is only stored in Amazon S3 Glacier.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
@@ -8334,23 +8719,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC-64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA-1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA-256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>SHA256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         }
       },
       "documentation":"<p>A container for elements related to an individual part.</p>"
@@ -8380,7 +8765,8 @@
         "OUTPOSTS",
         "GLACIER_IR",
         "SNOW",
-        "EXPRESS_ONEZONE"
+        "EXPRESS_ONEZONE",
+        "FSX_OPENZFS"
       ]
     },
     "ObjectVersion":{
@@ -8487,7 +8873,7 @@
           "documentation":"<p>Container for the ID of the owner.</p>"
         }
       },
-      "documentation":"<p>Container for the owner's display name and ID.</p>"
+      "documentation":"<important> <p>End of support notice: Beginning November 21, 2025, Amazon S3 will stop returning <code>DisplayName</code>. Update your applications to use canonical IDs (unique identifier for Amazon Web Services accounts), Amazon Web Services account ID (12 digit identifier) or IAM ARNs (full resource naming) as a direct replacement of <code>DisplayName</code>. </p> <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p> </important> <p>Container for the owner's display name and ID.</p>"
     },
     "OwnerOverride":{
       "type":"string",
@@ -8520,8 +8906,7 @@
     },
     "ParquetInput":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Container for Parquet.</p>"
     },
     "Part":{
@@ -8545,23 +8930,23 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32</code> checksum of the part. This checksum is present if the object was uploaded with the <code>CRC-32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32</code> checksum of the part. This checksum is present if the object was uploaded with the <code>CRC32</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the part. This checksum is present if the object was uploaded with the <code>CRC-32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the part. This checksum is present if the object was uploaded with the <code>CRC32C</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC-64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC-64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. This checksum is present if the multipart upload request was created with the <code>CRC64NVME</code> checksum algorithm, or if the object was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC64NVME</code>, to the uploaded object). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> checksum of the part. This checksum is present if the object was uploaded with the <code>SHA-1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> checksum of the part. This checksum is present if the object was uploaded with the <code>SHA1</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> checksum of the part. This checksum is present if the object was uploaded with the <code>SHA-256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> checksum of the part. This checksum is present if the object was uploaded with the <code>SHA256</code> checksum algorithm. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
         }
       },
       "documentation":"<p>Container for elements related to a part.</p>"
@@ -8725,7 +9110,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         }
@@ -8763,7 +9148,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -8870,7 +9255,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -8905,7 +9290,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p> <note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p> </note>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p> <note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p> </note>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -8944,6 +9329,12 @@
           "location":"querystring",
           "locationName":"id"
         },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code <code>403 Forbidden</code> (access denied).</p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        },
         "IntelligentTieringConfiguration":{
           "shape":"IntelligentTieringConfiguration",
           "documentation":"<p>Container for S3 Intelligent-Tiering configuration.</p>",
@@ -9013,7 +9404,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9057,7 +9448,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9104,7 +9495,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9209,7 +9600,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9259,6 +9650,12 @@
           "documentation":"<p>The <code>OwnershipControls</code> (BucketOwnerEnforced, BucketOwnerPreferred, or ObjectWriter) that you want to apply to this Amazon S3 bucket.</p>",
           "locationName":"OwnershipControls",
           "xmlNamespace":{"uri":"http://s3.amazonaws.com/doc/2006-03-01/"}
+        },
+        "ChecksumAlgorithm":{
+          "shape":"ChecksumAlgorithm",
+          "documentation":"<p> Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter. </p>",
+          "location":"header",
+          "locationName":"x-amz-sdk-checksum-algorithm"
         }
       },
       "payload":"OwnershipControls"
@@ -9285,7 +9682,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC-32</code> </p> </li> <li> <p> <code>CRC-32C</code> </p> </li> <li> <p> <code>CRC-64NVME</code> </p> </li> <li> <p> <code>SHA-1</code> </p> </li> <li> <p> <code>SHA-256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p> </note>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC32</code> </p> </li> <li> <p> <code>CRC32C</code> </p> </li> <li> <p> <code>CRC64NVME</code> </p> </li> <li> <p> <code>SHA1</code> </p> </li> <li> <p> <code>SHA256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p> </note>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9330,7 +9727,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9376,7 +9773,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9417,7 +9814,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9458,13 +9855,13 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
         "MFA":{
           "shape":"MFA",
-          "documentation":"<p>The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.</p>",
+          "documentation":"<p>The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device. The serial number is the number that uniquely identifies the MFA device. For physical MFA devices, this is the unique serial number that's provided with the device. For virtual MFA devices, the serial number is the device ARN. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html\">Enabling versioning on buckets</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiFactorAuthenticationDelete.html\">Configuring MFA delete</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-mfa"
         },
@@ -9505,7 +9902,7 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the request when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum</code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you provide an individual checksum, Amazon S3 ignores any provided <code>ChecksumAlgorithm</code> parameter.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
@@ -9555,7 +9952,7 @@
         },
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name that contains the object to which you want to attach the ACL. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name that contains the object to which you want to attach the ACL. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -9648,7 +10045,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object that you want to place a legal hold on. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object that you want to place a legal hold on. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -9773,31 +10170,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. This header is present if the object was uploaded with the <code>CRC-64NVME</code> checksum algorithm, or if it was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC-64NVME</code>, to the uploaded object). For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
+          "documentation":"<p>The Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. This header is present if the object was uploaded with the <code>CRC64NVME</code> checksum algorithm, or if it was uploaded without a checksum (and Amazon S3 added the default checksum, <code>CRC64NVME</code>, to the uploaded object). For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -9809,7 +10206,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3.</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -9882,7 +10279,7 @@
         },
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name to which the PUT action was initiated. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name to which the PUT action was initiated. </p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -9931,37 +10328,37 @@
         },
         "ChecksumAlgorithm":{
           "shape":"ChecksumAlgorithm",
-          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC-32</code> </p> </li> <li> <p> <code>CRC-32C</code> </p> </li> <li> <p> <code>CRC-64NVME</code> </p> </li> <li> <p> <code>SHA-1</code> </p> </li> <li> <p> <code>SHA-256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <note> <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object\">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>",
+          "documentation":"<p>Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding <code>x-amz-checksum-<i>algorithm</i> </code> or <code>x-amz-trailer</code> header sent. Otherwise, Amazon S3 fails the request with the HTTP status code <code>400 Bad Request</code>.</p> <p>For the <code>x-amz-checksum-<i>algorithm</i> </code> header, replace <code> <i>algorithm</i> </code> with the supported algorithm from the following list: </p> <ul> <li> <p> <code>CRC32</code> </p> </li> <li> <p> <code>CRC32C</code> </p> </li> <li> <p> <code>CRC64NVME</code> </p> </li> <li> <p> <code>SHA1</code> </p> </li> <li> <p> <code>SHA256</code> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If the individual checksum value you provide through <code>x-amz-checksum-<i>algorithm</i> </code> doesn't match the checksum algorithm you set through <code>x-amz-sdk-checksum-algorithm</code>, Amazon S3 fails the request with a <code>BadDigest</code> error.</p> <note> <p>The <code>Content-MD5</code> or <code>x-amz-sdk-checksum-algorithm</code> header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-put-object\">Uploading objects to an Object Lock enabled bucket </a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>For directory buckets, when you use Amazon Web Services SDKs, <code>CRC32</code> is the default checksum algorithm that's used for performance.</p>",
           "location":"header",
           "locationName":"x-amz-sdk-checksum-algorithm"
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the object. The <code>CRC-64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity in the Amazon S3 User Guide</a>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -10028,13 +10425,13 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>, <code>aws:kms:dsse</code>).</p> <ul> <li> <p> <b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>. </p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> </li> </ul>",
+          "documentation":"<p>The server-side encryption algorithm that was used when you store this object in Amazon S3 or Amazon FSx.</p> <ul> <li> <p> <b>General purpose buckets </b> - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html\">Using Server-Side Encryption</a> in the <i>Amazon S3 User Guide</i>.</p> </li> <li> <p> <b>Directory buckets </b> - For directory buckets, there are only two supported options for server-side encryption: server-side encryption with Amazon S3 managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS keys (SSE-KMS) (<code>aws:kms</code>). We recommend that the bucket's default encryption uses the desired encryption configuration and you don't override the bucket default encryption in your <code>CreateSession</code> requests or <code>PUT</code> object requests. Then, new objects are automatically encrypted with the desired encryption settings. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-serv-side-encryption.html\">Protecting data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>. For more information about the encryption overriding behaviors in directory buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html\">Specifying server-side encryption with KMS for new object uploads</a>. </p> <p>In the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>) using the REST API, the encryption request headers must match the encryption settings that are specified in the <code>CreateSession</code> request. You can't override the values of the encryption settings (<code>x-amz-server-side-encryption</code>, <code>x-amz-server-side-encryption-aws-kms-key-id</code>, <code>x-amz-server-side-encryption-context</code>, and <code>x-amz-server-side-encryption-bucket-key-enabled</code>) that are specified in the <code>CreateSession</code> request. You don't need to explicitly specify these encryption settings values in Zonal endpoint API calls, and Amazon S3 will use the encryption settings values from the <code>CreateSession</code> request to protect new objects in the directory bucket. </p> <note> <p>When you use the CLI or the Amazon Web Services SDKs, for <code>CreateSession</code>, the session token refreshes automatically to avoid service interruptions when a session expires. The CLI or the Amazon Web Services SDKs use the bucket's default encryption configuration for the <code>CreateSession</code> request. It's not supported to override the encryption settings values in the <code>CreateSession</code> request. So in the Zonal endpoint API calls (except <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html\">CopyObject</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html\">UploadPartCopy</a>), the encryption request headers must match the default encryption configuration of the directory bucket. </p> </note> </li> <li> <p> <b>S3 access points for Amazon FSx </b> - When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>. All Amazon FSx file systems have encryption configured by default and are encrypted at rest. Data is automatically encrypted before being written to the file system, and automatically decrypted as it is read. These processes are handled transparently by Amazon FSx.</p> </li> </ul>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
         "StorageClass":{
           "shape":"StorageClass",
-          "documentation":"<p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.</p> </li> <li> <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p> </li> </ul> </note>",
+          "documentation":"<p>By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html\">Storage Classes</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <ul> <li> <p>Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </li> <li> <p>Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.</p> </li> </ul> </note>",
           "location":"header",
           "locationName":"x-amz-storage-class"
         },
@@ -10064,7 +10461,7 @@
         },
         "SSEKMSKeyId":{
           "shape":"SSEKMSKeyId",
-          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p> <p> <b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p> <p> <b>Directory buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code>, the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header is implicitly assigned the ID of the KMS symmetric encryption customer managed key that's configured for your directory bucket's default encryption setting. If you want to specify the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header explicitly, you can only specify it with the ID (Key ID or Key ARN) of the KMS customer managed key that's configured for your directory bucket's default encryption setting. Otherwise, you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key ARN. The key alias format of the KMS key isn't supported. Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>",
+          "documentation":"<p>Specifies the KMS key ID (Key ID, Key ARN, or Key Alias) to use for object encryption. If the KMS key doesn't exist in the same account that's issuing the command, you must use the full Key ARN not the Key ID.</p> <p> <b>General purpose buckets</b> - If you specify <code>x-amz-server-side-encryption</code> with <code>aws:kms</code> or <code>aws:kms:dsse</code>, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the KMS key to use. If you specify <code>x-amz-server-side-encryption:aws:kms</code> or <code>x-amz-server-side-encryption:aws:kms:dsse</code>, but do not provide <code>x-amz-server-side-encryption-aws-kms-key-id</code>, Amazon S3 uses the Amazon Web Services managed key (<code>aws/s3</code>) to protect the data.</p> <p> <b>Directory buckets</b> - To encrypt data using SSE-KMS, it's recommended to specify the <code>x-amz-server-side-encryption</code> header to <code>aws:kms</code>. Then, the <code>x-amz-server-side-encryption-aws-kms-key-id</code> header implicitly uses the bucket's default KMS customer managed key ID. If you want to explicitly set the <code> x-amz-server-side-encryption-aws-kms-key-id</code> header, it must match the bucket's default customer managed key (using key ID or ARN, not alias). Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. Incorrect key specification results in an HTTP <code>400 Bad Request</code> error. </p>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption-aws-kms-key-id"
         },
@@ -10137,7 +10534,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name that contains the object you want to apply this Object Retention configuration to. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name that contains the object you want to apply this Object Retention configuration to. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -10213,7 +10610,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -10256,6 +10653,7 @@
         },
         "RequestPayer":{
           "shape":"RequestPayer",
+          "documentation":"<p>Confirms that the requester knows that she or he will be charged for the tagging object request. Bucket owners need not specify this parameter in their requests.</p>",
           "location":"header",
           "locationName":"x-amz-request-payer"
         }
@@ -10366,12 +10764,29 @@
     },
     "Range":{"type":"string"},
     "RecordDelimiter":{"type":"string"},
+    "RecordExpiration":{
+      "type":"structure",
+      "required":["Expiration"],
+      "members":{
+        "Expiration":{
+          "shape":"ExpirationState",
+          "documentation":"<p> Specifies whether journal table record expiration is enabled or disabled. </p>"
+        },
+        "Days":{
+          "shape":"RecordExpirationDays",
+          "documentation":"<p> If you enable journal table record expiration, you can set the number of days to retain your journal table records. Journal table records must be retained for a minimum of 7 days. To set this value, specify any whole number from <code>7</code> to <code>2147483647</code>. For example, to retain your journal table records for one year, set this value to <code>365</code>. </p>",
+          "box":true
+        }
+      },
+      "documentation":"<p> The journal table record expiration settings for a journal table in an S3 Metadata configuration. </p>"
+    },
+    "RecordExpirationDays":{"type":"integer"},
     "RecordsEvent":{
       "type":"structure",
       "members":{
         "Payload":{
           "shape":"Body",
-          "documentation":"<p>The byte array of partial, one or more result records. S3 Select doesn't guarantee that a record will be self-contained in one record frame. To ensure continuous streaming of data, S3 Select might split the same record across multiple record frames instead of aggregating the results in memory. Some S3 clients (for example, the SDK for Java) handle this behavior by creating a <code>ByteStream</code> out of the response by default. Other clients might not handle this behavior by default. In those cases, you must aggregate the results on the client side and parse the response.</p>",
+          "documentation":"<p>The byte array of partial, one or more result records. S3 Select doesn't guarantee that a record will be self-contained in one record frame. To ensure continuous streaming of data, S3 Select might split the same record across multiple record frames instead of aggregating the results in memory. Some S3 clients (for example, the SDKforJava) handle this behavior by creating a <code>ByteStream</code> out of the response by default. Other clients might not handle this behavior by default. In those cases, you must aggregate the results on the client side and parse the response.</p>",
           "eventpayload":true
         }
       },
@@ -10424,6 +10839,109 @@
       "max":20,
       "min":0
     },
+    "RenameObjectOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "RenameObjectRequest":{
+      "type":"structure",
+      "required":[
+        "Bucket",
+        "Key",
+        "RenameSource"
+      ],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p>The bucket name of the directory bucket containing the object.</p> <p> You must use virtual-hosted-style requests in the format <code>Bucket-name.s3express-zone-id.region-code.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Availability Zone. Bucket names must follow the format <code>bucket-base-name--zone-id--x-s3 </code> (for example, <code>amzn-s3-demo-bucket--usw2-az1--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "Key":{
+          "shape":"ObjectKey",
+          "documentation":"<p>Key name of the object to rename.</p>",
+          "contextParam":{"name":"Key"},
+          "location":"uri",
+          "locationName":"Key"
+        },
+        "RenameSource":{
+          "shape":"RenameSource",
+          "documentation":"<p>Specifies the source for the rename operation. The value must be URL encoded.</p>",
+          "location":"header",
+          "locationName":"x-amz-rename-source"
+        },
+        "DestinationIfMatch":{
+          "shape":"IfMatch",
+          "documentation":"<p>Renames the object only if the ETag (entity tag) value provided during the operation matches the ETag of the object in S3. The <code>If-Match</code> header field makes the request method conditional on ETags. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error.</p> <p>Expects the ETag value as a string.</p>",
+          "location":"header",
+          "locationName":"If-Match"
+        },
+        "DestinationIfNoneMatch":{
+          "shape":"IfNoneMatch",
+          "documentation":"<p> Renames the object only if the destination does not already exist in the specified directory bucket. If the object does exist when you send a request with <code>If-None-Match:*</code>, the S3 API will return a <code>412 Precondition Failed</code> error, preventing an overwrite. The <code>If-None-Match</code> header prevents overwrites of existing data by validating that there's not an object with the same key name already in your directory bucket.</p> <p> Expects the <code>*</code> character (asterisk).</p>",
+          "location":"header",
+          "locationName":"If-None-Match"
+        },
+        "DestinationIfModifiedSince":{
+          "shape":"IfModifiedSince",
+          "documentation":"<p>Renames the object if the destination exists and if it has been modified since the specified time.</p>",
+          "location":"header",
+          "locationName":"If-Modified-Since"
+        },
+        "DestinationIfUnmodifiedSince":{
+          "shape":"IfUnmodifiedSince",
+          "documentation":"<p>Renames the object if it hasn't been modified since the specified time.</p>",
+          "location":"header",
+          "locationName":"If-Unmodified-Since"
+        },
+        "SourceIfMatch":{
+          "shape":"RenameSourceIfMatch",
+          "documentation":"<p>Renames the object if the source exists and if its entity tag (ETag) matches the specified ETag. </p>",
+          "location":"header",
+          "locationName":"x-amz-rename-source-if-match"
+        },
+        "SourceIfNoneMatch":{
+          "shape":"RenameSourceIfNoneMatch",
+          "documentation":"<p>Renames the object if the source exists and if its entity tag (ETag) is different than the specified ETag. If an asterisk (<code>*</code>) character is provided, the operation will fail and return a <code>412 Precondition Failed</code> error. </p>",
+          "location":"header",
+          "locationName":"x-amz-rename-source-if-none-match"
+        },
+        "SourceIfModifiedSince":{
+          "shape":"RenameSourceIfModifiedSince",
+          "documentation":"<p>Renames the object if the source exists and if it has been modified since the specified time.</p>",
+          "location":"header",
+          "locationName":"x-amz-rename-source-if-modified-since"
+        },
+        "SourceIfUnmodifiedSince":{
+          "shape":"RenameSourceIfUnmodifiedSince",
+          "documentation":"<p>Renames the object if the source exists and hasn't been modified since the specified time.</p>",
+          "location":"header",
+          "locationName":"x-amz-rename-source-if-unmodified-since"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique string with a max of 64 ASCII characters in the ASCII range of 33 - 126.</p> <note> <p> <code>RenameObject</code> supports idempotency using a client token. To make an idempotent API request using <code>RenameObject</code>, specify a client token in the request. You should not reuse the same client token for other API requests. If you retry a request that completed successfully using the same client token and the same parameters, the retry succeeds without performing any further actions. If you retry a successful request using the same client token, but one or more of the parameters are different, the retry fails and an <code>IdempotentParameterMismatch</code> error is returned. </p> </note>",
+          "idempotencyToken":true,
+          "location":"header",
+          "locationName":"x-amz-client-token"
+        }
+      }
+    },
+    "RenameSource":{
+      "type":"string",
+      "pattern":"\\/?.+\\/.+"
+    },
+    "RenameSourceIfMatch":{"type":"string"},
+    "RenameSourceIfModifiedSince":{
+      "type":"timestamp",
+      "timestampFormat":"rfc822"
+    },
+    "RenameSourceIfNoneMatch":{"type":"string"},
+    "RenameSourceIfUnmodifiedSince":{
+      "type":"timestamp",
+      "timestampFormat":"rfc822"
+    },
     "ReplaceKeyPrefixWith":{"type":"string"},
     "ReplaceKeyWith":{"type":"string"},
     "ReplicaKmsKeyID":{"type":"string"},
@@ -10598,7 +11116,7 @@
     },
     "RequestCharged":{
       "type":"string",
-      "documentation":"<p>If present, indicates that the requester was successfully charged for the request.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
+      "documentation":"<p>If present, indicates that the requester was successfully charged for the request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html\">Using Requester Pays buckets for storage transfers and usage</a> in the <i>Amazon Simple Storage Service user guide</i>.</p> <note> <p>This functionality is not supported for directory buckets.</p> </note>",
       "enum":["requester"]
     },
     "RequestPayer":{
@@ -10665,7 +11183,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name containing the object to restore. </p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name containing the object to restore. </p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -10758,7 +11276,7 @@
           "documentation":"<p>Indicates when the restored copy will expire. This value is populated only if the object has already been restored. For example:</p> <p> <code>x-amz-optional-object-attributes: IsRestoreInProgress=\"false\", RestoreExpiryDate=\"2012-12-21T00:00:00.000Z\"</code> </p>"
         }
       },
-      "documentation":"<p>Specifies the restoration status of an object. Objects in certain storage classes must be restored before they can be retrieved. For more information about these storage classes and how to work with archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html\"> Working with archived objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets. Only the S3 Express One Zone storage class is supported by directory buckets to store objects.</p> </note>"
+      "documentation":"<p>Specifies the restoration status of an object. Objects in certain storage classes must be restored before they can be retrieved. For more information about these storage classes and how to work with archived objects, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/archived-objects.html\"> Working with archived objects</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>This functionality is not supported for directory buckets. Directory buckets only support <code>EXPRESS_ONEZONE</code> (the S3 Express One Zone storage class) in Availability Zones and <code>ONEZONE_IA</code> (the S3 One Zone-Infrequent Access storage class) in Dedicated Local Zones.</p> </note>"
     },
     "Role":{"type":"string"},
     "RoutingRule":{
@@ -10870,8 +11388,21 @@
       },
       "documentation":"<p>Describes an Amazon S3 location that will receive the results of the restore request.</p>"
     },
+    "S3RegionalOrS3ExpressBucketArnString":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"arn:[^:]+:(s3|s3express):.*"
+    },
     "S3TablesArn":{"type":"string"},
     "S3TablesBucketArn":{"type":"string"},
+    "S3TablesBucketType":{
+      "type":"string",
+      "enum":[
+        "aws",
+        "customer"
+      ]
+    },
     "S3TablesDestination":{
       "type":"structure",
       "required":[
@@ -10888,7 +11419,7 @@
           "documentation":"<p> The name for the metadata table in your metadata table configuration. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
         }
       },
-      "documentation":"<p> The destination information for the metadata table configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
+      "documentation":"<p> The destination information for a V1 S3 Metadata configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
     },
     "S3TablesDestinationResult":{
       "type":"structure",
@@ -10916,7 +11447,7 @@
           "documentation":"<p> The table bucket namespace for the metadata table in your metadata table configuration. This value is always <code>aws_s3_metadata</code>. </p>"
         }
       },
-      "documentation":"<p> The destination information for the metadata table configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p>"
+      "documentation":"<p> The destination information for a V1 S3 Metadata configuration. The destination table bucket must be in the same Region and Amazon Web Services account as the general purpose bucket. The specified metadata table name must be unique within the <code>aws_s3_metadata</code> namespace in the destination table bucket. </p> <note> <p>If you created your S3 Metadata configuration before July 15, 2025, we recommend that you delete and re-create your configuration by using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html\">CreateBucketMetadataConfiguration</a> so that you can expire journal table records and create a live inventory table.</p> </note>"
     },
     "S3TablesName":{"type":"string"},
     "S3TablesNamespace":{"type":"string"},
@@ -10948,8 +11479,7 @@
     },
     "SSES3":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies the use of SSE-S3 to encrypt delivered inventory reports.</p>",
       "locationName":"SSE-S3"
     },
@@ -11111,6 +11641,7 @@
       "type":"string",
       "enum":[
         "AES256",
+        "aws:fsx",
         "aws:kms",
         "aws:kms:dsse"
       ]
@@ -11128,7 +11659,7 @@
           "documentation":"<p>Amazon Web Services Key Management Service (KMS) customer managed key ID to use for the default encryption. </p> <note> <ul> <li> <p> <b>General purpose buckets</b> - This parameter is allowed if and only if <code>SSEAlgorithm</code> is set to <code>aws:kms</code> or <code>aws:kms:dsse</code>.</p> </li> <li> <p> <b>Directory buckets</b> - This parameter is allowed if and only if <code>SSEAlgorithm</code> is set to <code>aws:kms</code>.</p> </li> </ul> </note> <p>You can specify the key ID, key alias, or the Amazon Resource Name (ARN) of the KMS key.</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key Alias: <code>alias/alias-name</code> </p> </li> </ul> <p>If you are using encryption with cross-account or Amazon Web Services service operations, you must use a fully qualified KMS key ARN. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html#bucket-encryption-update-bucket-policy\">Using encryption for cross-account operations</a>.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - If you're specifying a customer managed KMS key, we recommend using a fully qualified KMS key ARN. If you use a KMS key alias instead, then KMS resolves the key within the requester’s account. This behavior can result in data that's encrypted with a KMS key that belongs to the requester, and not the bucket owner. Also, if you use a key ID, you can run into a LogDestination undeliverable error when creating a VPC flow log. </p> </li> <li> <p> <b>Directory buckets</b> - When you specify an <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">KMS customer managed key</a> for encryption in your directory bucket, only use the key ID or key ARN. The key alias format of the KMS key isn't supported.</p> </li> </ul> </note> <important> <p>Amazon S3 only supports symmetric encryption KMS keys. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html\">Asymmetric keys in Amazon Web Services KMS</a> in the <i>Amazon Web Services Key Management Service Developer Guide</i>.</p> </important>"
         }
       },
-      "documentation":"<p>Describes the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html\">PutBucketEncryption</a>.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - If you don't specify a customer managed key at configuration, Amazon S3 automatically creates an Amazon Web Services KMS key (<code>aws/s3</code>) in your Amazon Web Services account the first time that you add an object encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS key for SSE-KMS. </p> </li> <li> <p> <b>Directory buckets</b> - Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket for the lifetime of the bucket. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS.</p> </li> </ul> </note>"
+      "documentation":"<p>Describes the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html\">PutBucketEncryption</a>.</p> <note> <ul> <li> <p> <b>General purpose buckets</b> - If you don't specify a customer managed key at configuration, Amazon S3 automatically creates an Amazon Web Services KMS key (<code>aws/s3</code>) in your Amazon Web Services account the first time that you add an object encrypted with SSE-KMS to a bucket. By default, Amazon S3 uses this KMS key for SSE-KMS. </p> </li> <li> <p> <b>Directory buckets</b> - Your SSE-KMS configuration can only support 1 <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk\">customer managed key</a> per directory bucket's lifetime. The <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk\">Amazon Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p> </li> <li> <p> <b>Directory buckets</b> - For directory buckets, there are only two supported options for server-side encryption: SSE-S3 and SSE-KMS.</p> </li> </ul> </note>"
     },
     "ServerSideEncryptionConfiguration":{
       "type":"structure",
@@ -11211,8 +11742,7 @@
     },
     "SimplePrefix":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>To use simple format for S3 keys for log objects, set SimplePrefix to an empty object.</p> <p> <code>[DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString]</code> </p>",
       "locationName":"SimplePrefix"
     },
@@ -11304,7 +11834,8 @@
         "OUTPOSTS",
         "GLACIER_IR",
         "SNOW",
-        "EXPRESS_ONEZONE"
+        "EXPRESS_ONEZONE",
+        "FSX_OPENZFS"
       ]
     },
     "StorageClassAnalysis":{
@@ -11340,6 +11871,13 @@
       "enum":["V_1"]
     },
     "Suffix":{"type":"string"},
+    "TableSseAlgorithm":{
+      "type":"string",
+      "enum":[
+        "aws:kms",
+        "AES256"
+      ]
+    },
     "Tag":{
       "type":"structure",
       "required":[
@@ -11461,8 +11999,7 @@
     "Token":{"type":"string"},
     "TooManyParts":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> You have attempted to add more parts than the maximum of 10000 that are allowed for this object. You can use the CopyObject operation to copy this object to another and then add more data to the newly copied object. </p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -11525,7 +12062,7 @@
         },
         "Days":{
           "shape":"Days",
-          "documentation":"<p>Indicates the number of days after creation when objects are transitioned to the specified storage class. The value must be a positive integer.</p>"
+          "documentation":"<p>Indicates the number of days after creation when objects are transitioned to the specified storage class. If the specified storage class is <code>INTELLIGENT_TIERING</code>, <code>GLACIER_IR</code>, <code>GLACIER</code>, or <code>DEEP_ARCHIVE</code>, valid values are <code>0</code> or positive integers. If the specified storage class is <code>STANDARD_IA</code> or <code>ONEZONE_IA</code>, valid values are positive integers greater than <code>30</code>. Be aware that some storage classes have a minimum storage duration and that you're charged for transitioning objects before their minimum storage duration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#lifecycle-configuration-constraints\"> Constraints and considerations for transitions</a> in the <i>Amazon S3 User Guide</i>.</p>"
         },
         "StorageClass":{
           "shape":"TransitionStorageClass",
@@ -11566,6 +12103,88 @@
       ]
     },
     "URI":{"type":"string"},
+    "UpdateBucketMetadataInventoryTableConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "Bucket",
+        "InventoryTableConfiguration"
+      ],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p> The general purpose bucket that corresponds to the metadata configuration that you want to enable or disable an inventory table for. </p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "ContentMD5":{
+          "shape":"ContentMD5",
+          "documentation":"<p> The <code>Content-MD5</code> header for the inventory table configuration. </p>",
+          "location":"header",
+          "locationName":"Content-MD5"
+        },
+        "ChecksumAlgorithm":{
+          "shape":"ChecksumAlgorithm",
+          "documentation":"<p> The checksum algorithm to use with your inventory table configuration. </p>",
+          "location":"header",
+          "locationName":"x-amz-sdk-checksum-algorithm"
+        },
+        "InventoryTableConfiguration":{
+          "shape":"InventoryTableConfigurationUpdates",
+          "documentation":"<p> The contents of your inventory table configuration. </p>",
+          "locationName":"InventoryTableConfiguration",
+          "xmlNamespace":{"uri":"http://s3.amazonaws.com/doc/2006-03-01/"}
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p> The expected owner of the general purpose bucket that corresponds to the metadata table configuration that you want to enable or disable an inventory table for. </p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        }
+      },
+      "payload":"InventoryTableConfiguration"
+    },
+    "UpdateBucketMetadataJournalTableConfigurationRequest":{
+      "type":"structure",
+      "required":[
+        "Bucket",
+        "JournalTableConfiguration"
+      ],
+      "members":{
+        "Bucket":{
+          "shape":"BucketName",
+          "documentation":"<p> The general purpose bucket that corresponds to the metadata configuration that you want to enable or disable journal table record expiration for. </p>",
+          "contextParam":{"name":"Bucket"},
+          "location":"uri",
+          "locationName":"Bucket"
+        },
+        "ContentMD5":{
+          "shape":"ContentMD5",
+          "documentation":"<p> The <code>Content-MD5</code> header for the journal table configuration. </p>",
+          "location":"header",
+          "locationName":"Content-MD5"
+        },
+        "ChecksumAlgorithm":{
+          "shape":"ChecksumAlgorithm",
+          "documentation":"<p> The checksum algorithm to use with your journal table configuration. </p>",
+          "location":"header",
+          "locationName":"x-amz-sdk-checksum-algorithm"
+        },
+        "JournalTableConfiguration":{
+          "shape":"JournalTableConfigurationUpdates",
+          "documentation":"<p> The contents of your journal table configuration. </p>",
+          "locationName":"JournalTableConfiguration",
+          "xmlNamespace":{"uri":"http://s3.amazonaws.com/doc/2006-03-01/"}
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p> The expected owner of the general purpose bucket that corresponds to the metadata table configuration that you want to enable or disable journal table record expiration for. </p>",
+          "location":"header",
+          "locationName":"x-amz-expected-bucket-owner"
+        }
+      },
+      "payload":"JournalTableConfiguration"
+    },
     "UploadIdMarker":{"type":"string"},
     "UploadPartCopyOutput":{
       "type":"structure",
@@ -11582,7 +12201,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -11630,7 +12249,7 @@
       "members":{
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The bucket name.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Copying objects across different Amazon Web Services Regions isn't supported when the source or destination bucket is in Amazon Web Services Local Zones. The source and destination buckets must have the same parent Amazon Web Services Region. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>InvalidRequest</code>.</p> </note> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The bucket name.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Copying objects across different Amazon Web Services Regions isn't supported when the source or destination bucket is in Amazon Web Services Local Zones. The source and destination buckets must have the same parent Amazon Web Services Region. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>InvalidRequest</code>.</p> </note> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -11749,7 +12368,7 @@
       "members":{
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 (for example, <code>AES256</code>, <code>aws:kms</code>).</p>",
+          "documentation":"<p>The server-side encryption algorithm used when you store this object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-server-side-encryption"
         },
@@ -11761,31 +12380,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums\"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -11836,7 +12455,7 @@
         },
         "Bucket":{
           "shape":"BucketName",
-          "documentation":"<p>The name of the bucket to which the multipart upload was initiated.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>DOC-EXAMPLE-BUCKET</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Access points and Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with Amazon S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts through the Amazon Web Services SDKs, you provide the Outposts access point ARN in place of the bucket name. For more information about S3 on Outposts ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>The name of the bucket to which the multipart upload was initiated.</p> <p> <b>Directory buckets</b> - When you use this operation with a directory bucket, you must use virtual-hosted-style requests in the format <code> <i>Bucket-name</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com</code>. Path-style requests are not supported. Directory bucket names must be unique in the chosen Zone (Availability Zone or Local Zone). Bucket names must follow the format <code> <i>bucket-base-name</i>--<i>zone-id</i>--x-s3</code> (for example, <code> <i>amzn-s3-demo-bucket</i>--<i>usw2-az1</i>--x-s3</code>). For information about bucket naming restrictions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-naming-rules.html\">Directory bucket naming rules</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Access points</b> - When you use this action with an access point for general purpose buckets, you must provide the alias of the access point in place of the bucket name or specify the access point ARN. When you use this action with an access point for directory buckets, you must provide the access point name in place of the bucket name. When using the access point ARN, you must direct requests to the access point hostname. The access point hostname takes the form <i>AccessPointName</i>-<i>AccountId</i>.s3-accesspoint.<i>Region</i>.amazonaws.com. When using this action with an access point through the Amazon Web Services SDKs, you provide the access point ARN in place of the bucket name. For more information about access point ARNs, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html\">Using access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Object Lambda access points are not supported by directory buckets.</p> </note> <p> <b>S3 on Outposts</b> - When you use this action with S3 on Outposts, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. When you use this action with S3 on Outposts, the destination bucket must be the Outposts access point ARN or the access point alias. For more information about S3 on Outposts, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">What is S3 on Outposts?</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "contextParam":{"name":"Bucket"},
           "location":"uri",
           "locationName":"Bucket"
@@ -11861,31 +12480,31 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA-1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA-256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-checksum-sha256"
         },
@@ -12084,37 +12703,37 @@
         },
         "ChecksumCRC32":{
           "shape":"ChecksumCRC32",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 32-bit <code>CRC-32</code> checksum of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p> <p/>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 32-bit <code>CRC32</code> checksum of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p> <p/>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-checksum-crc32"
         },
         "ChecksumCRC32C":{
           "shape":"ChecksumCRC32C",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 32-bit <code>CRC-32C</code> checksum of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-checksum-crc32c"
         },
         "ChecksumCRC64NVME":{
           "shape":"ChecksumCRC64NVME",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC-64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the part. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-checksum-crc64nvme"
         },
         "ChecksumSHA1":{
           "shape":"ChecksumSHA1",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 160-bit <code>SHA-1</code> digest of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 160-bit <code>SHA1</code> digest of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-checksum-sha1"
         },
         "ChecksumSHA256":{
           "shape":"ChecksumSHA256",
-          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 256-bit <code>SHA-256</code> digest of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
+          "documentation":"<p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This specifies the Base64 encoded, 256-bit <code>SHA256</code> digest of the object returned by the Object Lambda function. This may not match the checksum for the object stored in Amazon S3. Amazon S3 will perform validation of the checksum values only when the original <code>GetObject</code> request required checksum validation. For more information about checksums, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p> <p>Only one checksum header can be specified at a time. If you supply multiple checksum headers, this request will fail.</p>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-checksum-sha256"
         },
         "DeleteMarker":{
           "shape":"DeleteMarker",
-          "documentation":"<p>Specifies whether an object stored in Amazon S3 is (<code>true</code>) or is not (<code>false</code>) a delete marker. </p>",
+          "documentation":"<p>Specifies whether an object stored in Amazon S3 is (<code>true</code>) or is not (<code>false</code>) a delete marker. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-delete-marker"
         },
@@ -12197,7 +12816,7 @@
         },
         "ServerSideEncryption":{
           "shape":"ServerSideEncryption",
-          "documentation":"<p> The server-side encryption algorithm used when storing requested object in Amazon S3 (for example, AES256, <code>aws:kms</code>).</p>",
+          "documentation":"<p> The server-side encryption algorithm used when storing requested object in Amazon S3 or Amazon FSx.</p> <note> <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p> </note>",
           "location":"header",
           "locationName":"x-amz-fwd-header-x-amz-server-side-encryption"
         },
diff -pruN 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,58 +5,68 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "AccountId": {
             "required": false,
             "documentation": "The Account ID used to send the request. This is an optional parameter that will be set automatically for operations that require it.",
-            "type": "String"
+            "type": "string"
         },
         "RequiresAccountId": {
             "required": false,
             "documentation": "Internal parameter for operations that require account id host prefix.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "OutpostId": {
             "required": false,
             "documentation": "The Outpost ID.  Some operations have an optional OutpostId which should be used in endpoint construction.",
-            "type": "String"
+            "type": "string"
         },
         "Bucket": {
             "required": false,
             "documentation": "The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.",
-            "type": "String"
+            "type": "string"
         },
         "AccessPointName": {
             "required": false,
             "documentation": "The S3 AccessPointName used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 AccessPoint.",
-            "type": "String"
+            "type": "string"
         },
         "UseArnRegion": {
             "builtIn": "AWS::S3Control::UseArnRegion",
             "required": false,
             "documentation": "When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN's region when constructing the endpoint instead of the client's configured region.",
-            "type": "Boolean"
+            "type": "boolean"
+        },
+        "ResourceArn": {
+            "required": false,
+            "documentation": "The resource ARN included in the request.  Only set on TagResource, UntagResourceand ListTagsForResource",
+            "type": "string"
+        },
+        "UseS3ExpressControlEndpoint": {
+            "required": false,
+            "documentation": "Internal parameter to indicate whether S3Express operation should use control plane, (ex. ListDirectoryAccessPoints)",
+            "type": "boolean"
         }
     },
     "rules": [
@@ -75,99 +85,41 @@
                 {
                     "conditions": [
                         {
-                            "fn": "stringEquals",
+                            "fn": "booleanEquals",
                             "argv": [
                                 {
-                                    "ref": "Region"
+                                    "ref": "UseFIPS"
                                 },
-                                "snow"
+                                true
                             ]
                         },
                         {
-                            "fn": "isSet",
+                            "fn": "aws.partition",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
+                                    "ref": "Region"
                                 }
-                            ]
+                            ],
+                            "assign": "partitionResult"
                         },
                         {
-                            "fn": "parseURL",
+                            "fn": "stringEquals",
                             "argv": [
                                 {
-                                    "ref": "Endpoint"
-                                }
-                            ],
-                            "assign": "url"
-                        }
-                    ],
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "aws.partition",
+                                    "fn": "getAttr",
                                     "argv": [
                                         {
-                                            "ref": "Region"
-                                        }
-                                    ],
-                                    "assign": "partitionResult"
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "error": "S3 Snow does not support DualStack",
-                                    "type": "error"
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "error": "S3 Snow does not support FIPS",
-                                    "type": "error"
-                                },
-                                {
-                                    "conditions": [],
-                                    "endpoint": {
-                                        "url": "{url#scheme}://{url#authority}",
-                                        "properties": {
-                                            "authSchemes": [
-                                                {
-                                                    "disableDoubleEncoding": true,
-                                                    "name": "sigv4",
-                                                    "signingName": "s3",
-                                                    "signingRegion": "{Region}"
-                                                }
-                                            ]
+                                            "ref": "partitionResult"
                                         },
-                                        "headers": {}
-                                    },
-                                    "type": "endpoint"
-                                }
-                            ],
-                            "type": "tree"
+                                        "name"
+                                    ]
+                                },
+                                "aws-cn"
+                            ]
                         }
                     ],
-                    "type": "tree"
+                    "error": "Partition does not support FIPS",
+                    "type": "error"
                 },
                 {
                     "conditions": [
@@ -197,36 +149,6 @@
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "partitionResult"
-                                                        },
-                                                        "name"
-                                                    ]
-                                                },
-                                                "aws-cn"
-                                            ]
-                                        }
-                                    ],
-                                    "error": "Partition does not support FIPS",
-                                    "type": "error"
-                                },
-                                {
-                                    "conditions": [
-                                        {
                                             "fn": "isSet",
                                             "argv": [
                                                 {
@@ -511,6 +433,1099 @@
                             "fn": "isSet",
                             "argv": [
                                 {
+                                    "ref": "ResourceArn"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "aws.parseArn",
+                            "argv": [
+                                {
+                                    "ref": "ResourceArn"
+                                }
+                            ],
+                            "assign": "resourceArn"
+                        },
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
+                                {
+                                    "fn": "getAttr",
+                                    "argv": [
+                                        {
+                                            "ref": "resourceArn"
+                                        },
+                                        "service"
+                                    ]
+                                },
+                                "s3express"
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "partitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "aws.partition",
+                                            "argv": [
+                                                {
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "resourceArn"
+                                                        },
+                                                        "region"
+                                                    ]
+                                                }
+                                            ],
+                                            "assign": "arnPartition"
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "arnPartition"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "partitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "isSet",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseArnRegion"
+                                                                }
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseArnRegion"
+                                                                },
+                                                                false
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "not",
+                                                            "argv": [
+                                                                {
+                                                                    "fn": "stringEquals",
+                                                                    "argv": [
+                                                                        {
+                                                                            "fn": "getAttr",
+                                                                            "argv": [
+                                                                                {
+                                                                                    "ref": "resourceArn"
+                                                                                },
+                                                                                "region"
+                                                                            ]
+                                                                        },
+                                                                        "{Region}"
+                                                                    ]
+                                                                }
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "error": "Invalid configuration: region from ARN `{resourceArn#region}` does not match client region `{Region}` and UseArnRegion is `false`",
+                                                    "type": "error"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "isSet",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Endpoint"
+                                                                }
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "error": "Invalid Configuration: DualStack and custom endpoint are not supported",
+                                                    "type": "error"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseDualStack"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "error": "S3Express does not support Dual-stack.",
+                                                    "type": "error"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "isSet",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Endpoint"
+                                                                }
+                                                            ]
+                                                        },
+                                                        {
+                                                            "fn": "parseURL",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "Endpoint"
+                                                                }
+                                                            ],
+                                                            "assign": "url"
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "{url#scheme}://{url#authority}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [
+                                                        {
+                                                            "fn": "booleanEquals",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "UseFIPS"
+                                                                },
+                                                                true
+                                                            ]
+                                                        }
+                                                    ],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                },
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                        "properties": {
+                                                            "authSchemes": [
+                                                                {
+                                                                    "disableDoubleEncoding": true,
+                                                                    "name": "sigv4",
+                                                                    "signingName": "s3express",
+                                                                    "signingRegion": "{Region}"
+                                                                }
+                                                            ]
+                                                        },
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "Client was configured for partition `{partitionResult#name}` but ARN has `{arnPartition#name}`",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "AccessPointName"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "substring",
+                            "argv": [
+                                {
+                                    "ref": "AccessPointName"
+                                },
+                                0,
+                                7,
+                                true
+                            ],
+                            "assign": "accessPointSuffix"
+                        },
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
+                                {
+                                    "ref": "accessPointSuffix"
+                                },
+                                "--xa-s3"
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "partitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isSet",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "Invalid Configuration: DualStack and custom endpoint are not supported",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "S3Express does not support Dual-stack.",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isSet",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "parseURL",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ],
+                                            "assign": "url"
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "{url#scheme}://{url#authority}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                7,
+                                                15,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneId"
+                                        },
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                15,
+                                                17,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneDelim"
+                                        },
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                "--"
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                7,
+                                                16,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneId"
+                                        },
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                16,
+                                                18,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneDelim"
+                                        },
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                "--"
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                7,
+                                                20,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneId"
+                                        },
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                20,
+                                                22,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneDelim"
+                                        },
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                "--"
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                7,
+                                                21,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneId"
+                                        },
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                21,
+                                                23,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneDelim"
+                                        },
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                "--"
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                7,
+                                                27,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneId"
+                                        },
+                                        {
+                                            "fn": "substring",
+                                            "argv": [
+                                                {
+                                                    "ref": "AccessPointName"
+                                                },
+                                                27,
+                                                29,
+                                                true
+                                            ],
+                                            "assign": "s3expressAvailabilityZoneDelim"
+                                        },
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "s3expressAvailabilityZoneDelim"
+                                                },
+                                                "--"
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "UseFIPS"
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                                "properties": {
+                                                    "authSchemes": [
+                                                        {
+                                                            "disableDoubleEncoding": true,
+                                                            "name": "sigv4",
+                                                            "signingName": "s3express",
+                                                            "signingRegion": "{Region}"
+                                                        }
+                                                    ]
+                                                },
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "Unrecognized S3Express Access Point name format.",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "UseS3ExpressControlEndpoint"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseS3ExpressControlEndpoint"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "partitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isSet",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "Invalid Configuration: DualStack and custom endpoint are not supported",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "S3Express does not support Dual-stack.",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "isSet",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ]
+                                        },
+                                        {
+                                            "fn": "parseURL",
+                                            "argv": [
+                                                {
+                                                    "ref": "Endpoint"
+                                                }
+                                            ],
+                                            "assign": "url"
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "{url#scheme}://{url#authority}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://s3express-control.{Region}.{partitionResult#dnsSuffix}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3express",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "stringEquals",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                },
+                                "snow"
+                            ]
+                        },
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "parseURL",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ],
+                            "assign": "url"
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "partitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "S3 Snow does not support DualStack",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "error": "S3 Snow does not support FIPS",
+                                    "type": "error"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "{url#scheme}://{url#authority}",
+                                        "properties": {
+                                            "authSchemes": [
+                                                {
+                                                    "disableDoubleEncoding": true,
+                                                    "name": "sigv4",
+                                                    "signingName": "s3",
+                                                    "signingRegion": "{Region}"
+                                                }
+                                            ]
+                                        },
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
                                     "ref": "AccessPointName"
                                 }
                             ]
@@ -1784,36 +2799,6 @@
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        },
-                                        {
-                                            "fn": "stringEquals",
-                                            "argv": [
-                                                {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "partitionResult"
-                                                        },
-                                                        "name"
-                                                    ]
-                                                },
-                                                "aws-cn"
-                                            ]
-                                        }
-                                    ],
-                                    "error": "Partition does not support FIPS",
-                                    "type": "error"
-                                },
-                                {
-                                    "conditions": [
-                                        {
                                             "fn": "isSet",
                                             "argv": [
                                                 {
diff -pruN 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/paginators-1.json 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,12 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "CallerAccessGrantsList"
+    },
+    "ListAccessPointsForDirectoryBuckets": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "AccessPointList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/service-2.json 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/s3control/2018-08-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3control/2018-08-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,7 @@
         "locationName":"AssociateAccessGrantsIdentityCenterRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<p>Associate your S3 Access Grants instance with an Amazon Web Services IAM Identity Center instance. Use this action if you want to create access grants for users or groups from your corporate identity directory. First, you must add your corporate identity directory to Amazon Web Services IAM Identity Center. Then, you can associate this IAM Identity Center instance with your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:AssociateAccessGrantsIdentityCenter</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permissions: <code>sso:CreateApplication</code>, <code>sso:PutApplicationGrant</code>, and <code>sso:PutApplicationAuthenticationMethod</code>. </p> </dd> </dl>",
+      "documentation":"<p>Associate your S3 Access Grants instance with an Amazon Web Services IAM Identity Center instance. Use this action if you want to create access grants for users or groups from your corporate identity directory. First, you must add your corporate identity directory to Amazon Web Services IAM Identity Center. Then, you can associate this IAM Identity Center instance with your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:AssociateAccessGrantsIdentityCenter</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permissions: <code>sso:CreateApplication</code>, <code>sso:PutApplicationGrant</code>, and <code>sso:PutApplicationAuthenticationMethod</code>. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -45,7 +45,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateAccessGrantResult"},
-      "documentation":"<p>Creates an access grant that gives a grantee access to your S3 data. The grantee can be an IAM user or role or a directory user, or group. Before you can create a grant, you must have an S3 Access Grants instance in the same Region as the S3 data. You can create an S3 Access Grants instance using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsInstance.html\">CreateAccessGrantsInstance</a>. You must also have registered at least one S3 data location in your S3 Access Grants instance using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsLocation.html\">CreateAccessGrantsLocation</a>. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrant</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>For any directory identity - <code>sso:DescribeInstance</code> and <code>sso:DescribeApplication</code> </p> <p>For directory users - <code>identitystore:DescribeUser</code> </p> <p>For directory groups - <code>identitystore:DescribeGroup</code> </p> </dd> </dl>",
+      "documentation":"<p>Creates an access grant that gives a grantee access to your S3 data. The grantee can be an IAM user or role or a directory user, or group. Before you can create a grant, you must have an S3 Access Grants instance in the same Region as the S3 data. You can create an S3 Access Grants instance using the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsInstance.html\">CreateAccessGrantsInstance</a>. You must also have registered at least one S3 data location in your S3 Access Grants instance using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsLocation.html\">CreateAccessGrantsLocation</a>. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrant</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>For any directory identity - <code>sso:DescribeInstance</code> and <code>sso:DescribeApplication</code> </p> <p>For directory users - <code>identitystore:DescribeUser</code> </p> <p>For directory groups - <code>identitystore:DescribeGroup</code> </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -66,7 +66,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateAccessGrantsInstanceResult"},
-      "documentation":"<p>Creates an S3 Access Grants instance, which serves as a logical grouping for access grants. You can create one S3 Access Grants instance per Region per account. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrantsInstance</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>To associate an IAM Identity Center instance with your S3 Access Grants instance, you must also have the <code>sso:DescribeInstance</code>, <code>sso:CreateApplication</code>, <code>sso:PutApplicationGrant</code>, and <code>sso:PutApplicationAuthenticationMethod</code> permissions. </p> </dd> </dl>",
+      "documentation":"<p>Creates an S3 Access Grants instance, which serves as a logical grouping for access grants. You can create one S3 Access Grants instance per Region per account. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrantsInstance</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>To associate an IAM Identity Center instance with your S3 Access Grants instance, you must also have the <code>sso:DescribeInstance</code>, <code>sso:CreateApplication</code>, <code>sso:PutApplicationGrant</code>, and <code>sso:PutApplicationAuthenticationMethod</code> permissions. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -87,7 +87,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateAccessGrantsLocationResult"},
-      "documentation":"<p>The S3 data location that you would like to register in your S3 Access Grants instance. Your S3 data must be in the same Region as your S3 Access Grants instance. The location can be one of the following: </p> <ul> <li> <p>The default S3 location <code>s3://</code> </p> </li> <li> <p>A bucket - <code>S3://&lt;bucket-name&gt;</code> </p> </li> <li> <p>A bucket and prefix - <code>S3://&lt;bucket-name&gt;/&lt;prefix&gt;</code> </p> </li> </ul> <p>When you register a location, you must include the IAM role that has permission to manage the S3 location that you are registering. Give S3 Access Grants permission to assume this role <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-location.html\">using a policy</a>. S3 Access Grants assumes this role to manage access to the location and to vend temporary credentials to grantees or client applications. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrantsLocation</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permission for the specified IAM role: <code>iam:PassRole</code> </p> </dd> </dl>",
+      "documentation":"<p>The S3 data location that you would like to register in your S3 Access Grants instance. Your S3 data must be in the same Region as your S3 Access Grants instance. The location can be one of the following: </p> <ul> <li> <p>The default S3 location <code>s3://</code> </p> </li> <li> <p>A bucket - <code>S3://&lt;bucket-name&gt;</code> </p> </li> <li> <p>A bucket and prefix - <code>S3://&lt;bucket-name&gt;/&lt;prefix&gt;</code> </p> </li> </ul> <p>When you register a location, you must include the IAM role that has permission to manage the S3 location that you are registering. Give S3 Access Grants permission to assume this role <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-location.html\">using a policy</a>. S3 Access Grants assumes this role to manage access to the location and to vend temporary credentials to grantees or client applications. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:CreateAccessGrantsLocation</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permission for the specified IAM role: <code>iam:PassRole</code> </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -108,7 +108,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateAccessPointResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates an access point and associates it with the specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing Data Access with Amazon S3 Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p/> <note> <p>S3 on Outposts only supports VPC-style access points. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\"> Accessing Amazon S3 on Outposts using virtual private cloud (VPC) only access points</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html#API_control_CreateAccessPoint_Examples\">Examples</a> section.</p> <p/> <p>The following actions are related to <code>CreateAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<p>Creates an access point and associates it to a specified bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing access to shared datasets with access points</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets.html\">Managing access to shared datasets in directory buckets with access points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>To create an access point and attach it to a volume on an Amazon FSx file system, see <a href=\"https://docs.aws.amazon.com/fsx/latest/APIReference/API_CreateAndAttachS3AccessPoint.html\">CreateAndAttachS3AccessPoint</a> in the <i>Amazon FSx API Reference</i>.</p> <p/> <note> <p>S3 on Outposts only supports VPC-style access points. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\"> Accessing Amazon S3 on Outposts using virtual private cloud (VPC) only access points</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html#API_control_CreateAccessPoint_Examples\">Examples</a> section.</p> <p/> <p>The following actions are related to <code>CreateAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForDirectoryBuckets.html\">ListAccessPointsForDirectoryBuckets</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -128,7 +128,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateAccessPointForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates an Object Lambda Access Point. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html\">Transforming objects with Object Lambda Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>CreateAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates an Object Lambda Access Point. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html\">Transforming objects with Object Lambda Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>CreateAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -169,7 +169,7 @@
         {"shape":"IdempotencyException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>This operation creates an S3 Batch Operations job.</p> <p>You can use S3 Batch Operations to perform large-scale batch actions on Amazon S3 objects. Batch Operations can run a single action on lists of Amazon S3 objects that you specify. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>For information about permissions required to use the Batch Operations, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html\">Granting permissions for S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p/> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobOperation.html\">JobOperation</a> </p> </li> </ul>",
+      "documentation":"<p>This operation creates an S3 Batch Operations job.</p> <p>You can use S3 Batch Operations to perform large-scale batch actions on Amazon S3 objects. Batch Operations can run a single action on lists of Amazon S3 objects that you specify. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>For information about permissions required to use the Batch Operations, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-iam-role-policies.html\">Granting permissions for S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p/> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_JobOperation.html\">JobOperation</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -189,7 +189,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"CreateMultiRegionAccessPointResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates a Multi-Region Access Point and associates it with the specified buckets. For more information about creating Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingMultiRegionAccessPoints.html\">Creating Multi-Region Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This request is asynchronous, meaning that you might receive a response before the command has completed. When this request provides a response, it provides a token that you can use to monitor the status of the request with <code>DescribeMultiRegionAccessPointOperation</code>.</p> <p>The following actions are related to <code>CreateMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates a Multi-Region Access Point and associates it with the specified buckets. For more information about creating Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingMultiRegionAccessPoints.html\">Creating Multi-Region Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This request is asynchronous, meaning that you might receive a response before the command has completed. When this request provides a response, it provides a token that you can use to monitor the status of the request with <code>DescribeMultiRegionAccessPointOperation</code>.</p> <p>The following actions are related to <code>CreateMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -210,7 +210,7 @@
         "locationName":"CreateStorageLensGroupRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<p> Creates a new S3 Storage Lens group and associates it with the specified Amazon Web Services account ID. An S3 Storage Lens group is a custom grouping of objects based on prefix, suffix, object tags, object size, object age, or a combination of these filters. For each Storage Lens group that you’ve created, you can also optionally add Amazon Web Services resource tags. For more information about S3 Storage Lens groups, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups-overview.html\">Working with S3 Storage Lens groups</a>.</p> <p>To use this operation, you must have the permission to perform the <code>s3:CreateStorageLensGroup</code> action. If you’re trying to create a Storage Lens group with Amazon Web Services resource tags, you must also have permission to perform the <code>s3:TagResource</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p>",
+      "documentation":"<p> Creates a new S3 Storage Lens group and associates it with the specified Amazon Web Services account ID. An S3 Storage Lens group is a custom grouping of objects based on prefix, suffix, object tags, object size, object age, or a combination of these filters. For each Storage Lens group that you’ve created, you can also optionally add Amazon Web Services resource tags. For more information about S3 Storage Lens groups, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups-overview.html\">Working with S3 Storage Lens groups</a>.</p> <p>To use this operation, you must have the permission to perform the <code>s3:CreateStorageLensGroup</code> action. If you’re trying to create a Storage Lens group with Amazon Web Services resource tags, you must also have permission to perform the <code>s3:TagResource</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -225,7 +225,7 @@
         "requestUri":"/v20180820/accessgrantsinstance/grant/{id}"
       },
       "input":{"shape":"DeleteAccessGrantRequest"},
-      "documentation":"<p>Deletes the access grant from the S3 Access Grants instance. You cannot undo an access grant deletion and the grantee will no longer have access to the S3 data.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrant</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Deletes the access grant from the S3 Access Grants instance. You cannot undo an access grant deletion and the grantee will no longer have access to the S3 data.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrant</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -241,7 +241,7 @@
         "requestUri":"/v20180820/accessgrantsinstance"
       },
       "input":{"shape":"DeleteAccessGrantsInstanceRequest"},
-      "documentation":"<p>Deletes your S3 Access Grants instance. You must first delete the access grants and locations before S3 Access Grants can delete the instance. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html\">DeleteAccessGrant</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html\">DeleteAccessGrantsLocation</a>. If you have associated an IAM Identity Center instance with your S3 Access Grants instance, you must first dissassociate the Identity Center instance from the S3 Access Grants instance before you can delete the S3 Access Grants instance. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_AssociateAccessGrantsIdentityCenter.html\">AssociateAccessGrantsIdentityCenter</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DissociateAccessGrantsIdentityCenter.html\">DissociateAccessGrantsIdentityCenter</a>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsInstance</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Deletes your S3 Access Grants instance. You must first delete the access grants and locations before S3 Access Grants can delete the instance. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html\">DeleteAccessGrant</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html\">DeleteAccessGrantsLocation</a>. If you have associated an IAM Identity Center instance with your S3 Access Grants instance, you must first dissassociate the Identity Center instance from the S3 Access Grants instance before you can delete the S3 Access Grants instance. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_AssociateAccessGrantsIdentityCenter.html\">AssociateAccessGrantsIdentityCenter</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DissociateAccessGrantsIdentityCenter.html\">DissociateAccessGrantsIdentityCenter</a>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsInstance</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -257,7 +257,7 @@
         "requestUri":"/v20180820/accessgrantsinstance/resourcepolicy"
       },
       "input":{"shape":"DeleteAccessGrantsInstanceResourcePolicyRequest"},
-      "documentation":"<p>Deletes the resource policy of the S3 Access Grants instance. The resource policy is used to manage cross-account access to your S3 Access Grants instance. By deleting the resource policy, you delete any cross-account permissions to your S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Deletes the resource policy of the S3 Access Grants instance. The resource policy is used to manage cross-account access to your S3 Access Grants instance. By deleting the resource policy, you delete any cross-account permissions to your S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -273,7 +273,7 @@
         "requestUri":"/v20180820/accessgrantsinstance/location/{id}"
       },
       "input":{"shape":"DeleteAccessGrantsLocationRequest"},
-      "documentation":"<p>Deregisters a location from your S3 Access Grants instance. You can only delete a location registration from an S3 Access Grants instance if there are no grants associated with this location. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html\">Delete a grant</a> for information on how to delete grants. You need to have at least one registered location in your S3 Access Grants instance in order to create access grants. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsLocation</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Deregisters a location from your S3 Access Grants instance. You can only delete a location registration from an S3 Access Grants instance if there are no grants associated with this location. See <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html\">Delete a grant</a> for information on how to delete grants. You need to have at least one registered location in your S3 Access Grants instance in order to create access grants. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DeleteAccessGrantsLocation</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -289,7 +289,7 @@
         "requestUri":"/v20180820/accesspoint/{name}"
       },
       "input":{"shape":"DeleteAccessPointRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the specified access point.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html#API_control_DeleteAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<p>Deletes the specified access point.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html#API_control_DeleteAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -304,7 +304,7 @@
         "requestUri":"/v20180820/accesspointforobjectlambda/{name}"
       },
       "input":{"shape":"DeleteAccessPointForObjectLambdaRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the specified Object Lambda Access Point.</p> <p>The following actions are related to <code>DeleteAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the specified Object Lambda Access Point.</p> <p>The following actions are related to <code>DeleteAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -319,7 +319,7 @@
         "requestUri":"/v20180820/accesspoint/{name}/policy"
       },
       "input":{"shape":"DeleteAccessPointPolicyRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the access point policy for the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html#API_control_DeleteAccessPointPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html\">PutAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html\">GetAccessPointPolicy</a> </p> </li> </ul>",
+      "documentation":"<p>Deletes the access point policy for the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html#API_control_DeleteAccessPointPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html\">PutAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html\">GetAccessPointPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -334,7 +334,7 @@
         "requestUri":"/v20180820/accesspointforobjectlambda/{name}/policy"
       },
       "input":{"shape":"DeleteAccessPointPolicyForObjectLambdaRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Removes the resource policy for an Object Lambda Access Point.</p> <p>The following actions are related to <code>DeleteAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyForObjectLambda.html\">GetAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicyForObjectLambda.html\">PutAccessPointPolicyForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Removes the resource policy for an Object Lambda Access Point.</p> <p>The following actions are related to <code>DeleteAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyForObjectLambda.html\">GetAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicyForObjectLambda.html\">PutAccessPointPolicyForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -342,6 +342,19 @@
         "RequiresAccountId":{"value":true}
       }
     },
+    "DeleteAccessPointScope":{
+      "name":"DeleteAccessPointScope",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v20180820/accesspoint/{name}/scope"
+      },
+      "input":{"shape":"DeleteAccessPointScopeRequest"},
+      "documentation":"<p> Deletes an existing access point scope for a directory bucket.</p> <note> <p>When you delete the scope of an access point, all prefixes and permissions are deleted.</p> </note> <p>To use this operation, you must have the permission to perform the <code>s3express:DeleteAccessPointScope</code> action.</p> <p>For information about REST API errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses\">REST error responses</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "RequiresAccountId":{"value":true},
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
     "DeleteBucket":{
       "name":"DeleteBucket",
       "http":{
@@ -364,7 +377,7 @@
         "requestUri":"/v20180820/bucket/{name}/lifecycleconfiguration"
       },
       "input":{"shape":"DeleteBucketLifecycleConfigurationRequest"},
-      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket's lifecycle configuration. To delete an S3 bucket's lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the lifecycle configuration from the specified Outposts bucket. Amazon S3 on Outposts removes all the lifecycle configuration rules in the lifecycle subresource associated with the bucket. Your objects never expire, and Amazon S3 on Outposts no longer automatically deletes any objects on the basis of rules contained in the deleted lifecycle configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this operation, you must have permission to perform the <code>s3-outposts:PutLifecycleConfiguration</code> action. By default, the bucket owner has this permission and the Outposts bucket owner can grant this permission to others.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html#API_control_DeleteBucketLifecycleConfiguration_Examples\">Examples</a> section.</p> <p>For more information about object expiration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions\">Elements to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket's lifecycle configuration. To delete an S3 bucket's lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html\">DeleteBucketLifecycle</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the lifecycle configuration from the specified Outposts bucket. Amazon S3 on Outposts removes all the lifecycle configuration rules in the lifecycle subresource associated with the bucket. Your objects never expire, and Amazon S3 on Outposts no longer automatically deletes any objects on the basis of rules contained in the deleted lifecycle configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this operation, you must have permission to perform the <code>s3-outposts:PutLifecycleConfiguration</code> action. By default, the bucket owner has this permission and the Outposts bucket owner can grant this permission to others.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html#API_control_DeleteBucketLifecycleConfiguration_Examples\">Examples</a> section.</p> <p>For more information about object expiration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions\">Elements to Describe Lifecycle Actions</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -379,7 +392,7 @@
         "requestUri":"/v20180820/bucket/{name}/policy"
       },
       "input":{"shape":"DeleteBucketPolicyRequest"},
-      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket policy. To delete an S3 bucket policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html\">DeleteBucketPolicy</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>This implementation of the DELETE action uses the policy subresource to delete the policy of a specified Amazon S3 on Outposts bucket. If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must have the <code>s3-outposts:DeleteBucketPolicy</code> permissions on the specified Outposts bucket and belong to the bucket owner's account to use this action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>If you don't have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error. </p> <important> <p>As a security precaution, the root user of the Amazon Web Services account that owns a bucket can always use this action, even if the policy explicitly denies the root user the ability to perform this action.</p> </important> <p>For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>. </p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html#API_control_DeleteBucketPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html\">GetBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html\">PutBucketPolicy</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket policy. To delete an S3 bucket policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketPolicy.html\">DeleteBucketPolicy</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>This implementation of the DELETE action uses the policy subresource to delete the policy of a specified Amazon S3 on Outposts bucket. If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must have the <code>s3-outposts:DeleteBucketPolicy</code> permissions on the specified Outposts bucket and belong to the bucket owner's account to use this action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>If you don't have <code>DeleteBucketPolicy</code> permissions, Amazon S3 returns a <code>403 Access Denied</code> error. If you have the correct permissions, but you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>405 Method Not Allowed</code> error. </p> <important> <p>As a security precaution, the root user of the Amazon Web Services account that owns a bucket can always use this action, even if the policy explicitly denies the root user the ability to perform this action.</p> </important> <p>For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>. </p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html#API_control_DeleteBucketPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html\">GetBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html\">PutBucketPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -394,7 +407,7 @@
         "requestUri":"/v20180820/bucket/{name}/replication"
       },
       "input":{"shape":"DeleteBucketReplicationRequest"},
-      "documentation":"<note> <p>This operation deletes an Amazon S3 on Outposts bucket's replication configuration. To delete an S3 bucket's replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the replication configuration from the specified S3 on Outposts bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3-outposts:PutReplicationConfiguration</code> action. The Outposts bucket owner has this permission by default and can grant it to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsIAM.html\">Setting up IAM with S3 on Outposts</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsBucketPolicy.html\">Managing access to S3 on Outposts buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>It can take a while to propagate <code>PUT</code> or <code>DELETE</code> requests for a replication configuration to all S3 on Outposts systems. Therefore, the replication configuration that's returned by a <code>GET</code> request soon after a <code>PUT</code> or <code>DELETE</code> request might return a more recent result than what's on the Outpost. If an Outpost is offline, the delay in updating the replication configuration on that Outpost can be significant.</p> </note> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html#API_control_DeleteBucketReplication_Examples\">Examples</a> section.</p> <p>For information about S3 replication on Outposts configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsReplication.html\">Replicating objects for S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation deletes an Amazon S3 on Outposts bucket's replication configuration. To delete an S3 bucket's replication configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html\">DeleteBucketReplication</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the replication configuration from the specified S3 on Outposts bucket.</p> <p>To use this operation, you must have permissions to perform the <code>s3-outposts:PutReplicationConfiguration</code> action. The Outposts bucket owner has this permission by default and can grant it to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsIAM.html\">Setting up IAM with S3 on Outposts</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsBucketPolicy.html\">Managing access to S3 on Outposts buckets</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>It can take a while to propagate <code>PUT</code> or <code>DELETE</code> requests for a replication configuration to all S3 on Outposts systems. Therefore, the replication configuration that's returned by a <code>GET</code> request soon after a <code>PUT</code> or <code>DELETE</code> request might return a more recent result than what's on the Outpost. If an Outpost is offline, the delay in updating the replication configuration on that Outpost can be significant.</p> </note> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html#API_control_DeleteBucketReplication_Examples\">Examples</a> section.</p> <p>For information about S3 replication on Outposts configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsReplication.html\">Replicating objects for S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following operations are related to <code>DeleteBucketReplication</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html\">PutBucketReplication</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html\">GetBucketReplication</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -410,7 +423,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteBucketTaggingRequest"},
-      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket's tags. To delete an S3 bucket tags, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the tags from the Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this action, you must have permission to perform the <code>PutBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others. </p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketTagging.html#API_control_DeleteBucketTagging_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This action deletes an Amazon S3 on Outposts bucket's tags. To delete an S3 bucket tags, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketTagging.html\">DeleteBucketTagging</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Deletes the tags from the Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this action, you must have permission to perform the <code>PutBucketTagging</code> action. By default, the bucket owner has this permission and can grant this permission to others. </p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketTagging.html#API_control_DeleteBucketTagging_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>DeleteBucketTagging</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketTagging.html\">GetBucketTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketTagging.html\">PutBucketTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -431,7 +444,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Removes the entire tag set from the specified S3 Batch Operations job.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>DeleteJobTagging</code> operation, you must have permission to perform the <code>s3:DeleteJobTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html\">PutJobTagging</a> </p> </li> </ul>",
+      "documentation":"<p>Removes the entire tag set from the specified S3 Batch Operations job.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>DeleteJobTagging</code> operation, you must have permission to perform the <code>s3:DeleteJobTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html\">PutJobTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -451,7 +464,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"DeleteMultiRegionAccessPointResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes a Multi-Region Access Point. This action does not delete the buckets associated with the Multi-Region Access Point, only the Multi-Region Access Point itself.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This request is asynchronous, meaning that you might receive a response before the command has completed. When this request provides a response, it provides a token that you can use to monitor the status of the request with <code>DescribeMultiRegionAccessPointOperation</code>.</p> <p>The following actions are related to <code>DeleteMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes a Multi-Region Access Point. This action does not delete the buckets associated with the Multi-Region Access Point, only the Multi-Region Access Point itself.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>This request is asynchronous, meaning that you might receive a response before the command has completed. When this request provides a response, it provides a token that you can use to monitor the status of the request with <code>DescribeMultiRegionAccessPointOperation</code>.</p> <p>The following actions are related to <code>DeleteMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -467,7 +480,7 @@
         "requestUri":"/v20180820/configuration/publicAccessBlock"
       },
       "input":{"shape":"DeletePublicAccessBlockRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Removes the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -482,7 +495,7 @@
         "requestUri":"/v20180820/storagelens/{storagelensid}"
       },
       "input":{"shape":"DeleteStorageLensConfigurationRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:DeleteStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:DeleteStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -498,7 +511,7 @@
       },
       "input":{"shape":"DeleteStorageLensConfigurationTaggingRequest"},
       "output":{"shape":"DeleteStorageLensConfigurationTaggingResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the Amazon S3 Storage Lens configuration tags. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:DeleteStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Deletes the Amazon S3 Storage Lens configuration tags. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:DeleteStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -514,7 +527,7 @@
         "responseCode":204
       },
       "input":{"shape":"DeleteStorageLensGroupRequest"},
-      "documentation":"<p> Deletes an existing S3 Storage Lens group.</p> <p>To use this operation, you must have the permission to perform the <code>s3:DeleteStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p>",
+      "documentation":"<p> Deletes an existing S3 Storage Lens group.</p> <p>To use this operation, you must have the permission to perform the <code>s3:DeleteStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -536,7 +549,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Retrieves the configuration parameters and status for a Batch Operations job. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>DescribeJob</code> operation, you must have permission to perform the <code>s3:DescribeJob</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul>",
+      "documentation":"<p>Retrieves the configuration parameters and status for a Batch Operations job. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>DescribeJob</code> operation, you must have permission to perform the <code>s3:DescribeJob</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -552,7 +565,7 @@
       },
       "input":{"shape":"DescribeMultiRegionAccessPointOperationRequest"},
       "output":{"shape":"DescribeMultiRegionAccessPointOperationResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Retrieves the status of an asynchronous request to manage a Multi-Region Access Point. For more information about managing Multi-Region Access Points and how asynchronous requests work, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MrapOperations.html\">Using Multi-Region Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Retrieves the status of an asynchronous request to manage a Multi-Region Access Point. For more information about managing Multi-Region Access Points and how asynchronous requests work, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MrapOperations.html\">Using Multi-Region Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -568,7 +581,7 @@
         "requestUri":"/v20180820/accessgrantsinstance/identitycenter"
       },
       "input":{"shape":"DissociateAccessGrantsIdentityCenterRequest"},
-      "documentation":"<p>Dissociates the Amazon Web Services IAM Identity Center instance from the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DissociateAccessGrantsIdentityCenter</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must have the <code>sso:DeleteApplication</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Dissociates the Amazon Web Services IAM Identity Center instance from the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:DissociateAccessGrantsIdentityCenter</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must have the <code>sso:DeleteApplication</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -585,7 +598,7 @@
       },
       "input":{"shape":"GetAccessGrantRequest"},
       "output":{"shape":"GetAccessGrantResult"},
-      "documentation":"<p>Get the details of an access grant from your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrant</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Get the details of an access grant from your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrant</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -602,7 +615,7 @@
       },
       "input":{"shape":"GetAccessGrantsInstanceRequest"},
       "output":{"shape":"GetAccessGrantsInstanceResult"},
-      "documentation":"<p>Retrieves the S3 Access Grants instance for a Region in your account. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstance</code> permission to use this operation. </p> </dd> </dl> <note> <p> <code>GetAccessGrantsInstance</code> is not supported for cross-account access. You can only call the API from the account that owns the S3 Access Grants instance.</p> </note>",
+      "documentation":"<p>Retrieves the S3 Access Grants instance for a Region in your account. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstance</code> permission to use this operation. </p> </dd> </dl> <note> <p> <code>GetAccessGrantsInstance</code> is not supported for cross-account access. You can only call the API from the account that owns the S3 Access Grants instance.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -619,7 +632,7 @@
       },
       "input":{"shape":"GetAccessGrantsInstanceForPrefixRequest"},
       "output":{"shape":"GetAccessGrantsInstanceForPrefixResult"},
-      "documentation":"<p>Retrieve the S3 Access Grants instance that contains a particular prefix. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstanceForPrefix</code> permission for the caller account to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>The prefix owner account must grant you the following permissions to their S3 Access Grants instance: <code>s3:GetAccessGrantsInstanceForPrefix</code>. </p> </dd> </dl>",
+      "documentation":"<p>Retrieve the S3 Access Grants instance that contains a particular prefix. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstanceForPrefix</code> permission for the caller account to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>The prefix owner account must grant you the following permissions to their S3 Access Grants instance: <code>s3:GetAccessGrantsInstanceForPrefix</code>. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -636,7 +649,7 @@
       },
       "input":{"shape":"GetAccessGrantsInstanceResourcePolicyRequest"},
       "output":{"shape":"GetAccessGrantsInstanceResourcePolicyResult"},
-      "documentation":"<p>Returns the resource policy of the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Returns the resource policy of the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -653,7 +666,7 @@
       },
       "input":{"shape":"GetAccessGrantsLocationRequest"},
       "output":{"shape":"GetAccessGrantsLocationResult"},
-      "documentation":"<p>Retrieves the details of a particular location registered in your S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsLocation</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Retrieves the details of a particular location registered in your S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetAccessGrantsLocation</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -670,7 +683,7 @@
       },
       "input":{"shape":"GetAccessPointRequest"},
       "output":{"shape":"GetAccessPointResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration information about the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html#API_control_GetAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>GetAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<p>Returns configuration information about the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html#API_control_GetAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>GetAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -686,7 +699,7 @@
       },
       "input":{"shape":"GetAccessPointConfigurationForObjectLambdaRequest"},
       "output":{"shape":"GetAccessPointConfigurationForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration for an Object Lambda Access Point.</p> <p>The following actions are related to <code>GetAccessPointConfigurationForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointConfigurationForObjectLambda.html\">PutAccessPointConfigurationForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration for an Object Lambda Access Point.</p> <p>The following actions are related to <code>GetAccessPointConfigurationForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointConfigurationForObjectLambda.html\">PutAccessPointConfigurationForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -702,7 +715,7 @@
       },
       "input":{"shape":"GetAccessPointForObjectLambdaRequest"},
       "output":{"shape":"GetAccessPointForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration information about the specified Object Lambda Access Point</p> <p>The following actions are related to <code>GetAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration information about the specified Object Lambda Access Point</p> <p>The following actions are related to <code>GetAccessPointForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPointsForObjectLambda.html\">ListAccessPointsForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -718,7 +731,7 @@
       },
       "input":{"shape":"GetAccessPointPolicyRequest"},
       "output":{"shape":"GetAccessPointPolicyResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the access point policy associated with the specified access point.</p> <p>The following actions are related to <code>GetAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html\">PutAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html\">DeleteAccessPointPolicy</a> </p> </li> </ul>",
+      "documentation":"<p>Returns the access point policy associated with the specified access point.</p> <p>The following actions are related to <code>GetAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html\">PutAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html\">DeleteAccessPointPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -734,7 +747,7 @@
       },
       "input":{"shape":"GetAccessPointPolicyForObjectLambdaRequest"},
       "output":{"shape":"GetAccessPointPolicyForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the resource policy for an Object Lambda Access Point.</p> <p>The following actions are related to <code>GetAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html\">DeleteAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicyForObjectLambda.html\">PutAccessPointPolicyForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the resource policy for an Object Lambda Access Point.</p> <p>The following actions are related to <code>GetAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html\">DeleteAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicyForObjectLambda.html\">PutAccessPointPolicyForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -750,7 +763,7 @@
       },
       "input":{"shape":"GetAccessPointPolicyStatusRequest"},
       "output":{"shape":"GetAccessPointPolicyStatusResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Indicates whether the specified access point currently has a policy that allows public access. For more information about public access through access points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing Data Access with Amazon S3 access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Indicates whether the specified access point currently has a policy that allows public access. For more information about public access through access points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing Data Access with Amazon S3 access points</a> in the <i>Amazon S3 User Guide</i>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -766,7 +779,7 @@
       },
       "input":{"shape":"GetAccessPointPolicyStatusForObjectLambdaRequest"},
       "output":{"shape":"GetAccessPointPolicyStatusForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the status of the resource policy associated with an Object Lambda Access Point.</p>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the status of the resource policy associated with an Object Lambda Access Point.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -774,6 +787,20 @@
         "RequiresAccountId":{"value":true}
       }
     },
+    "GetAccessPointScope":{
+      "name":"GetAccessPointScope",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v20180820/accesspoint/{name}/scope"
+      },
+      "input":{"shape":"GetAccessPointScopeRequest"},
+      "output":{"shape":"GetAccessPointScopeResult"},
+      "documentation":"<p> Returns the access point scope for a directory bucket.</p> <p>To use this operation, you must have the permission to perform the <code>s3express:GetAccessPointScope</code> action.</p> <p>For information about REST API errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses\">REST error responses</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "RequiresAccountId":{"value":true},
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
     "GetBucket":{
       "name":"GetBucket",
       "http":{
@@ -782,7 +809,7 @@
       },
       "input":{"shape":"GetBucketRequest"},
       "output":{"shape":"GetBucketResult"},
-      "documentation":"<p>Gets an Amazon S3 on Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\"> Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the Outposts bucket, the calling identity must have the <code>s3-outposts:GetBucket</code> permissions on the specified Outposts bucket and belong to the Outposts bucket owner's account in order to use this action. Only users from Outposts bucket owner account with the right permissions can perform actions on an Outposts bucket. </p> <p>If you don't have <code>s3-outposts:GetBucket</code> permissions or you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>403 Access Denied</code> error.</p> <p>The following actions are related to <code>GetBucket</code> for Amazon S3 on Outposts:</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucket.html#API_control_GetBucket_Examples\">Examples</a> section.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul>",
+      "documentation":"<p>Gets an Amazon S3 on Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\"> Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the Outposts bucket, the calling identity must have the <code>s3-outposts:GetBucket</code> permissions on the specified Outposts bucket and belong to the Outposts bucket owner's account in order to use this action. Only users from Outposts bucket owner account with the right permissions can perform actions on an Outposts bucket. </p> <p>If you don't have <code>s3-outposts:GetBucket</code> permissions or you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>403 Access Denied</code> error.</p> <p>The following actions are related to <code>GetBucket</code> for Amazon S3 on Outposts:</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucket.html#API_control_GetBucket_Examples\">Examples</a> section.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html\">PutObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html\">CreateBucket</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucket.html\">DeleteBucket</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -798,7 +825,7 @@
       },
       "input":{"shape":"GetBucketLifecycleConfigurationRequest"},
       "output":{"shape":"GetBucketLifecycleConfigurationResult"},
-      "documentation":"<note> <p>This action gets an Amazon S3 on Outposts bucket's lifecycle configuration. To get an S3 bucket's lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Returns the lifecycle configuration information set on the Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> and for information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\"> Object Lifecycle Management</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this action, you must have permission to perform the <code>s3-outposts:GetLifecycleConfiguration</code> action. The Outposts bucket owner has this permission, by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html#API_control_GetBucketLifecycleConfiguration_Examples\">Examples</a> section.</p> <p> <code>GetBucketLifecycleConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following actions are related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html\">DeleteBucketLifecycleConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This action gets an Amazon S3 on Outposts bucket's lifecycle configuration. To get an S3 bucket's lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Returns the lifecycle configuration information set on the Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> and for information about lifecycle configuration, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html\"> Object Lifecycle Management</a> in <i>Amazon S3 User Guide</i>.</p> <p>To use this action, you must have permission to perform the <code>s3-outposts:GetLifecycleConfiguration</code> action. The Outposts bucket owner has this permission, by default. The bucket owner can grant this permission to others. For more information about permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources\">Permissions Related to Bucket Subresource Operations</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html\">Managing Access Permissions to Your Amazon S3 Resources</a>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html#API_control_GetBucketLifecycleConfiguration_Examples\">Examples</a> section.</p> <p> <code>GetBucketLifecycleConfiguration</code> has the following special error:</p> <ul> <li> <p>Error code: <code>NoSuchLifecycleConfiguration</code> </p> <ul> <li> <p>Description: The lifecycle configuration does not exist.</p> </li> <li> <p>HTTP Status Code: 404 Not Found</p> </li> <li> <p>SOAP Fault Code Prefix: Client</p> </li> </ul> </li> </ul> <p>The following actions are related to <code>GetBucketLifecycleConfiguration</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html\">DeleteBucketLifecycleConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -814,7 +841,7 @@
       },
       "input":{"shape":"GetBucketPolicyRequest"},
       "output":{"shape":"GetBucketPolicyResult"},
-      "documentation":"<note> <p>This action gets a bucket policy for an Amazon S3 on Outposts bucket. To get a policy for an S3 bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html\">GetBucketPolicy</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Returns the policy of a specified Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must have the <code>GetBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this action.</p> <p>Only users from Outposts bucket owner account with the right permissions can perform actions on an Outposts bucket. If you don't have <code>s3-outposts:GetBucketPolicy</code> permissions or you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>403 Access Denied</code> error.</p> <important> <p>As a security precaution, the root user of the Amazon Web Services account that owns a bucket can always use this action, even if the policy explicitly denies the root user the ability to perform this action.</p> </important> <p>For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html#API_control_GetBucketPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html\">PutBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html\">DeleteBucketPolicy</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This action gets a bucket policy for an Amazon S3 on Outposts bucket. To get a policy for an S3 bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketPolicy.html\">GetBucketPolicy</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Returns the policy of a specified Outposts bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you are using an identity other than the root user of the Amazon Web Services account that owns the bucket, the calling identity must have the <code>GetBucketPolicy</code> permissions on the specified bucket and belong to the bucket owner's account in order to use this action.</p> <p>Only users from Outposts bucket owner account with the right permissions can perform actions on an Outposts bucket. If you don't have <code>s3-outposts:GetBucketPolicy</code> permissions or you're not using an identity that belongs to the bucket owner's account, Amazon S3 returns a <code>403 Access Denied</code> error.</p> <important> <p>As a security precaution, the root user of the Amazon Web Services account that owns a bucket can always use this action, even if the policy explicitly denies the root user the ability to perform this action.</p> </important> <p>For more information about bucket policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html\">Using Bucket Policies and User Policies</a>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html#API_control_GetBucketPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>GetBucketPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html\">GetObject</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html\">PutBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html\">DeleteBucketPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -878,7 +905,7 @@
       },
       "input":{"shape":"GetDataAccessRequest"},
       "output":{"shape":"GetDataAccessResult"},
-      "documentation":"<p>Returns a temporary access credential from S3 Access Grants to the grantee or client application. The <a href=\"https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html\">temporary credential</a> is an Amazon Web Services STS token that grants them access to the S3 data. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetDataAccess</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>The IAM role that S3 Access Grants assumes must have the following permissions specified in the trust policy when registering the location: <code>sts:AssumeRole</code>, for directory users or groups <code>sts:SetContext</code>, and for IAM users or roles <code>sts:SetSourceIdentity</code>. </p> </dd> </dl>",
+      "documentation":"<p>Returns a temporary access credential from S3 Access Grants to the grantee or client application. The <a href=\"https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html\">temporary credential</a> is an Amazon Web Services STS token that grants them access to the S3 data. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:GetDataAccess</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>The IAM role that S3 Access Grants assumes must have the following permissions specified in the trust policy when registering the location: <code>sts:AssumeRole</code>, for directory users or groups <code>sts:SetContext</code>, and for IAM users or roles <code>sts:SetSourceIdentity</code>. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -900,7 +927,7 @@
         {"shape":"TooManyRequestsException"},
         {"shape":"NotFoundException"}
       ],
-      "documentation":"<p>Returns the tags on an S3 Batch Operations job. </p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>GetJobTagging</code> operation, you must have permission to perform the <code>s3:GetJobTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html\">PutJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> </p> </li> </ul>",
+      "documentation":"<p>Returns the tags on an S3 Batch Operations job. </p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>GetJobTagging</code> operation, you must have permission to perform the <code>s3:GetJobTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutJobTagging.html\">PutJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -916,7 +943,7 @@
       },
       "input":{"shape":"GetMultiRegionAccessPointRequest"},
       "output":{"shape":"GetMultiRegionAccessPointResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration information about the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns configuration information about the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListMultiRegionAccessPoints.html\">ListMultiRegionAccessPoints</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -933,7 +960,7 @@
       },
       "input":{"shape":"GetMultiRegionAccessPointPolicyRequest"},
       "output":{"shape":"GetMultiRegionAccessPointPolicyResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the access control policy of the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html\">GetMultiRegionAccessPointPolicyStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html\">PutMultiRegionAccessPointPolicy</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the access control policy of the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html\">GetMultiRegionAccessPointPolicyStatus</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html\">PutMultiRegionAccessPointPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -950,7 +977,7 @@
       },
       "input":{"shape":"GetMultiRegionAccessPointPolicyStatusRequest"},
       "output":{"shape":"GetMultiRegionAccessPointPolicyStatusResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Indicates whether the specified Multi-Region Access Point has an access control policy that allows public access.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPointPolicyStatus</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html\">GetMultiRegionAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html\">PutMultiRegionAccessPointPolicy</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Indicates whether the specified Multi-Region Access Point has an access control policy that allows public access.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>GetMultiRegionAccessPointPolicyStatus</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html\">GetMultiRegionAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutMultiRegionAccessPointPolicy.html\">PutMultiRegionAccessPointPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -967,7 +994,7 @@
       },
       "input":{"shape":"GetMultiRegionAccessPointRoutesRequest"},
       "output":{"shape":"GetMultiRegionAccessPointRoutesResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the routing configuration for a Multi-Region Access Point, indicating which Regions are active or passive.</p> <p>To obtain routing control changes and failover requests, use the Amazon S3 failover control infrastructure endpoints in these five Amazon Web Services Regions:</p> <ul> <li> <p> <code>us-east-1</code> </p> </li> <li> <p> <code>us-west-2</code> </p> </li> <li> <p> <code>ap-southeast-2</code> </p> </li> <li> <p> <code>ap-northeast-1</code> </p> </li> <li> <p> <code>eu-west-1</code> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns the routing configuration for a Multi-Region Access Point, indicating which Regions are active or passive.</p> <p>To obtain routing control changes and failover requests, use the Amazon S3 failover control infrastructure endpoints in these five Amazon Web Services Regions:</p> <ul> <li> <p> <code>us-east-1</code> </p> </li> <li> <p> <code>us-west-2</code> </p> </li> <li> <p> <code>ap-southeast-2</code> </p> </li> <li> <p> <code>ap-northeast-1</code> </p> </li> <li> <p> <code>eu-west-1</code> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -987,7 +1014,7 @@
       "errors":[
         {"shape":"NoSuchPublicAccessBlockConfiguration"}
       ],
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Retrieves the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutPublicAccessBlock.html\">PutPublicAccessBlock</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1003,7 +1030,7 @@
       },
       "input":{"shape":"GetStorageLensConfigurationRequest"},
       "output":{"shape":"GetStorageLensConfigurationResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets the Amazon S3 Storage Lens configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>. For a complete list of S3 Storage Lens metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html\">S3 Storage Lens metrics glossary</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:GetStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets the Amazon S3 Storage Lens configuration. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>. For a complete list of S3 Storage Lens metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html\">S3 Storage Lens metrics glossary</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:GetStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1019,7 +1046,7 @@
       },
       "input":{"shape":"GetStorageLensConfigurationTaggingRequest"},
       "output":{"shape":"GetStorageLensConfigurationTaggingResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets the tags of Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:GetStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets the tags of Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:GetStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1035,7 +1062,7 @@
       },
       "input":{"shape":"GetStorageLensGroupRequest"},
       "output":{"shape":"GetStorageLensGroupResult"},
-      "documentation":"<p> Retrieves the Storage Lens group configuration details.</p> <p>To use this operation, you must have the permission to perform the <code>s3:GetStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p>",
+      "documentation":"<p> Retrieves the Storage Lens group configuration details.</p> <p>To use this operation, you must have the permission to perform the <code>s3:GetStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1051,7 +1078,7 @@
       },
       "input":{"shape":"ListAccessGrantsRequest"},
       "output":{"shape":"ListAccessGrantsResult"},
-      "documentation":"<p>Returns the list of access grants in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrants</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Returns the list of access grants in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrants</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1068,7 +1095,7 @@
       },
       "input":{"shape":"ListAccessGrantsInstancesRequest"},
       "output":{"shape":"ListAccessGrantsInstancesResult"},
-      "documentation":"<p>Returns a list of S3 Access Grants instances. An S3 Access Grants instance serves as a logical grouping for your individual access grants. You can only have one S3 Access Grants instance per Region per account.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrantsInstances</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Returns a list of S3 Access Grants instances. An S3 Access Grants instance serves as a logical grouping for your individual access grants. You can only have one S3 Access Grants instance per Region per account.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrantsInstances</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1085,7 +1112,7 @@
       },
       "input":{"shape":"ListAccessGrantsLocationsRequest"},
       "output":{"shape":"ListAccessGrantsLocationsResult"},
-      "documentation":"<p>Returns a list of the locations registered in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrantsLocations</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Returns a list of the locations registered in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListAccessGrantsLocations</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1102,7 +1129,7 @@
       },
       "input":{"shape":"ListAccessPointsRequest"},
       "output":{"shape":"ListAccessPointsResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of the access points that are owned by the current account that's associated with the specified bucket. You can retrieve up to 1000 access points per call. If the specified bucket has more than 1,000 access points (or the number specified in <code>maxResults</code>, whichever is less), the response will include a continuation token that you can use to list the additional access points.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html#API_control_GetAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>ListAccessPoints</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of the access points. You can retrieve up to 1,000 access points per call. If the call returns more than 1,000 access points (or the number specified in <code>maxResults</code>, whichever is less), the response will include a continuation token that you can use to list the additional access points.</p> <p>Returns only access points attached to S3 buckets by default. To return all access points specify <code>DataSourceType</code> as <code>ALL</code>.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html#API_control_GetAccessPoint_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>ListAccessPoints</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html\">CreateAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html\">DeleteAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html\">GetAccessPoint</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1110,6 +1137,20 @@
         "RequiresAccountId":{"value":true}
       }
     },
+    "ListAccessPointsForDirectoryBuckets":{
+      "name":"ListAccessPointsForDirectoryBuckets",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v20180820/accesspointfordirectory"
+      },
+      "input":{"shape":"ListAccessPointsForDirectoryBucketsRequest"},
+      "output":{"shape":"ListAccessPointsForDirectoryBucketsResult"},
+      "documentation":"<p>Returns a list of the access points that are owned by the Amazon Web Services account and that are associated with the specified directory bucket.</p> <p>To list access points for general purpose buckets, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html\">ListAccesspoints</a>.</p> <p>To use this operation, you must have the permission to perform the <code>s3express:ListAccessPointsForDirectoryBuckets</code> action.</p> <p>For information about REST API errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses\">REST error responses</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "RequiresAccountId":{"value":true},
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
     "ListAccessPointsForObjectLambda":{
       "name":"ListAccessPointsForObjectLambda",
       "http":{
@@ -1118,7 +1159,7 @@
       },
       "input":{"shape":"ListAccessPointsForObjectLambdaRequest"},
       "output":{"shape":"ListAccessPointsForObjectLambdaResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns some or all (up to 1,000) access points associated with the Object Lambda Access Point per call. If there are more access points than what can be returned in one call, the response will include a continuation token that you can use to list the additional access points.</p> <p>The following actions are related to <code>ListAccessPointsForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns some or all (up to 1,000) access points associated with the Object Lambda Access Point per call. If there are more access points than what can be returned in one call, the response will include a continuation token that you can use to list the additional access points.</p> <p>The following actions are related to <code>ListAccessPointsForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPointForObjectLambda.html\">CreateAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointForObjectLambda.html\">DeleteAccessPointForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointForObjectLambda.html\">GetAccessPointForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1134,7 +1175,7 @@
       },
       "input":{"shape":"ListCallerAccessGrantsRequest"},
       "output":{"shape":"ListCallerAccessGrantsResult"},
-      "documentation":"<p>Use this API to list the access grants that grant the caller access to Amazon S3 data through S3 Access Grants. The caller (grantee) can be an Identity and Access Management (IAM) identity or Amazon Web Services Identity Center corporate directory identity. You must pass the Amazon Web Services account of the S3 data owner (grantor) in the request. You can, optionally, narrow the results by <code>GrantScope</code>, using a fragment of the data's S3 path, and S3 Access Grants will return only the grants with a path that contains the path fragment. You can also pass the <code>AllowedByApplication</code> filter in the request, which returns only the grants authorized for applications, whether the application is the caller's Identity Center application or any other application (<code>ALL</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-list-grants.html\">List the caller's access grants</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListCallerAccessGrants</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Use this API to list the access grants that grant the caller access to Amazon S3 data through S3 Access Grants. The caller (grantee) can be an Identity and Access Management (IAM) identity or Amazon Web Services Identity Center corporate directory identity. You must pass the Amazon Web Services account of the S3 data owner (grantor) in the request. You can, optionally, narrow the results by <code>GrantScope</code>, using a fragment of the data's S3 path, and S3 Access Grants will return only the grants with a path that contains the path fragment. You can also pass the <code>AllowedByApplication</code> filter in the request, which returns only the grants authorized for applications, whether the application is the caller's Identity Center application or any other application (<code>ALL</code>). For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-list-grants.html\">List the caller's access grants</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListCallerAccessGrants</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1156,7 +1197,7 @@
         {"shape":"InternalServiceException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists current S3 Batch Operations jobs as well as the jobs that have ended within the last 90 days for the Amazon Web Services account making the request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>ListJobs</code> operation, you must have permission to perform the <code>s3:ListJobs</code> action.</p> </dd> </dl> <p>Related actions include:</p> <p/> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul>",
+      "documentation":"<p>Lists current S3 Batch Operations jobs as well as the jobs that have ended within the last 90 days for the Amazon Web Services account making the request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>ListJobs</code> operation, you must have permission to perform the <code>s3:ListJobs</code> action.</p> </dd> </dl> <p>Related actions include:</p> <p/> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobPriority.html\">UpdateJobPriority</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1172,7 +1213,7 @@
       },
       "input":{"shape":"ListMultiRegionAccessPointsRequest"},
       "output":{"shape":"ListMultiRegionAccessPointsResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of the Multi-Region Access Points currently associated with the specified Amazon Web Services account. Each call can return up to 100 Multi-Region Access Points, the maximum number of Multi-Region Access Points that can be associated with a single account.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>ListMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of the Multi-Region Access Points currently associated with the specified Amazon Web Services account. Each call can return up to 100 Multi-Region Access Points, the maximum number of Multi-Region Access Points that can be associated with a single account.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>ListMultiRegionAccessPoint</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateMultiRegionAccessPoint.html\">CreateMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteMultiRegionAccessPoint.html\">DeleteMultiRegionAccessPoint</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeMultiRegionAccessPointOperation.html\">DescribeMultiRegionAccessPointOperation</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPoint.html\">GetMultiRegionAccessPoint</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1189,7 +1230,7 @@
       },
       "input":{"shape":"ListRegionalBucketsRequest"},
       "output":{"shape":"ListRegionalBucketsResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of all Outposts buckets in an Outpost that are owned by the authenticated sender of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and <code>x-amz-outpost-id</code> in your request, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListRegionalBuckets.html#API_control_ListRegionalBuckets_Examples\">Examples</a> section.</p>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Returns a list of all Outposts buckets in an Outpost that are owned by the authenticated sender of the request. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3onOutposts.html\">Using Amazon S3 on Outposts</a> in the <i>Amazon S3 User Guide</i>.</p> <p>For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and <code>x-amz-outpost-id</code> in your request, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListRegionalBuckets.html#API_control_ListRegionalBuckets_Examples\">Examples</a> section.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1205,7 +1246,7 @@
       },
       "input":{"shape":"ListStorageLensConfigurationsRequest"},
       "output":{"shape":"ListStorageLensConfigurationsResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets a list of Amazon S3 Storage Lens configurations. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:ListStorageLensConfigurations</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Gets a list of Amazon S3 Storage Lens configurations. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:ListStorageLensConfigurations</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1221,7 +1262,7 @@
       },
       "input":{"shape":"ListStorageLensGroupsRequest"},
       "output":{"shape":"ListStorageLensGroupsResult"},
-      "documentation":"<p> Lists all the Storage Lens groups in the specified home Region. </p> <p>To use this operation, you must have the permission to perform the <code>s3:ListStorageLensGroups</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p>",
+      "documentation":"<p> Lists all the Storage Lens groups in the specified home Region. </p> <p>To use this operation, you must have the permission to perform the <code>s3:ListStorageLensGroups</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1237,7 +1278,7 @@
       },
       "input":{"shape":"ListTagsForResourceRequest"},
       "output":{"shape":"ListTagsForResourceResult"},
-      "documentation":"<p>This operation allows you to list all the Amazon Web Services resource tags for a specified resource. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:ListTagsForResource</code> permission to use this operation. </p> </dd> </dl> <note> <p>This operation is only supported for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> and for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants</a>. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p> </note> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p>",
+      "documentation":"<p>This operation allows you to list all of the tags for a specified resource. Each tag is a label consisting of a key and value. Tags can help you organize, track costs for, and control access to resources. </p> <note> <p>This operation is only supported for the following Amazon S3 resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-db-tagging.html\">Access Points for directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-tagging.html\">Access Points for general purpose buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">Storage Lens groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants instances, registered locations, and grants</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>For Storage Lens groups and S3 Access Grants, you must have the <code>s3:ListTagsForResource</code> permission to use this operation. </p> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> </dd> <dt>Directory bucket permissions</dt> <dd> <p>For directory buckets and access points for directory buckets, you must have the <code>s3express:ListTagsForResource</code> permission to use this operation. For more information about directory buckets policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-permissions.html\">Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1257,7 +1298,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"PutAccessGrantsInstanceResourcePolicyResult"},
-      "documentation":"<p>Updates the resource policy of the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:PutAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl>",
+      "documentation":"<p>Updates the resource policy of the S3 Access Grants instance. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:PutAccessGrantsInstanceResourcePolicy</code> permission to use this operation. </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1277,7 +1318,7 @@
         "locationName":"PutAccessPointConfigurationForObjectLambdaRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Replaces configuration for an Object Lambda Access Point.</p> <p>The following actions are related to <code>PutAccessPointConfigurationForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointConfigurationForObjectLambda.html\">GetAccessPointConfigurationForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Replaces configuration for an Object Lambda Access Point.</p> <p>The following actions are related to <code>PutAccessPointConfigurationForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointConfigurationForObjectLambda.html\">GetAccessPointConfigurationForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1296,7 +1337,7 @@
         "locationName":"PutAccessPointPolicyRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Associates an access policy with the specified access point. Each access point can have only one policy, so a request made to this API replaces any existing policy associated with the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html#API_control_PutAccessPointPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>PutAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html\">GetAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html\">DeleteAccessPointPolicy</a> </p> </li> </ul>",
+      "documentation":"<p>Associates an access policy with the specified access point. Each access point can have only one policy, so a request made to this API replaces any existing policy associated with the specified access point.</p> <p/> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html#API_control_PutAccessPointPolicy_Examples\">Examples</a> section.</p> <p>The following actions are related to <code>PutAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html\">GetAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html\">DeleteAccessPointPolicy</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1315,7 +1356,7 @@
         "locationName":"PutAccessPointPolicyForObjectLambdaRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates or replaces resource policy for an Object Lambda Access Point. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-create.html#olap-create-cli\">Creating Object Lambda Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>PutAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html\">DeleteAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyForObjectLambda.html\">GetAccessPointPolicyForObjectLambda</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates or replaces resource policy for an Object Lambda Access Point. For an example policy, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/olap-create.html#olap-create-cli\">Creating Object Lambda Access Points</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>PutAccessPointPolicyForObjectLambda</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicyForObjectLambda.html\">DeleteAccessPointPolicyForObjectLambda</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicyForObjectLambda.html\">GetAccessPointPolicyForObjectLambda</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1323,6 +1364,23 @@
         "RequiresAccountId":{"value":true}
       }
     },
+    "PutAccessPointScope":{
+      "name":"PutAccessPointScope",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v20180820/accesspoint/{name}/scope"
+      },
+      "input":{
+        "shape":"PutAccessPointScopeRequest",
+        "locationName":"PutAccessPointScopeRequest",
+        "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
+      },
+      "documentation":"<p>Creates or replaces the access point scope for a directory bucket. You can use the access point scope to restrict access to specific prefixes, API operations, or a combination of both.</p> <note> <p>You can specify any amount of prefixes, but the total length of characters of all prefixes must be less than 256 bytes in size.</p> </note> <p>To use this operation, you must have the permission to perform the <code>s3express:PutAccessPointScope</code> action.</p> <p>For information about REST API errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses\">REST error responses</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
+      "staticContextParams":{
+        "RequiresAccountId":{"value":true},
+        "UseS3ExpressControlEndpoint":{"value":true}
+      }
+    },
     "PutBucketLifecycleConfiguration":{
       "name":"PutBucketLifecycleConfiguration",
       "http":{
@@ -1398,7 +1456,7 @@
         "requestUri":"/v20180820/bucket/{name}/versioning"
       },
       "input":{"shape":"PutBucketVersioningRequest"},
-      "documentation":"<note> <p>This operation sets the versioning state for S3 on Outposts buckets only. To set the versioning state for an S3 bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html\">PutBucketVersioning</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Sets the versioning state for an S3 on Outposts bucket. With S3 Versioning, you can save multiple distinct copies of your objects and recover from unintended user actions and application failures.</p> <p>You can set the versioning state to one of the following:</p> <ul> <li> <p> <b>Enabled</b> - Enables versioning for the objects in the bucket. All objects added to the bucket receive a unique version ID.</p> </li> <li> <p> <b>Suspended</b> - Suspends versioning for the objects in the bucket. All objects added to the bucket receive the version ID <code>null</code>.</p> </li> </ul> <p>If you've never set versioning on your bucket, it has no versioning state. In that case, a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html\"> GetBucketVersioning</a> request does not return a versioning state value.</p> <p>When you enable S3 Versioning, for each object in your bucket, you have a current version and zero or more noncurrent versions. You can configure your bucket S3 Lifecycle rules to expire noncurrent versions after a specified time period. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsLifecycleManaging.html\"> Creating and managing a lifecycle configuration for your S3 on Outposts bucket</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you have an object expiration lifecycle configuration in your non-versioned bucket and you want to maintain the same permanent delete behavior when you enable versioning, you must add a noncurrent expiration policy. The noncurrent expiration lifecycle configuration will manage the deletes of the noncurrent object versions in the version-enabled bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html\">Versioning</a> in the <i>Amazon S3 User Guide</i>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketVersioning.html#API_control_PutBucketVersioning_Examples\">Examples</a> section.</p> <p>The following operations are related to <code>PutBucketVersioning</code> for S3 on Outposts.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html\">GetBucketVersioning</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation sets the versioning state for S3 on Outposts buckets only. To set the versioning state for an S3 bucket, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html\">PutBucketVersioning</a> in the <i>Amazon S3 API Reference</i>. </p> </note> <p>Sets the versioning state for an S3 on Outposts bucket. With S3 Versioning, you can save multiple distinct copies of your objects and recover from unintended user actions and application failures.</p> <p>You can set the versioning state to one of the following:</p> <ul> <li> <p> <b>Enabled</b> - Enables versioning for the objects in the bucket. All objects added to the bucket receive a unique version ID.</p> </li> <li> <p> <b>Suspended</b> - Suspends versioning for the objects in the bucket. All objects added to the bucket receive the version ID <code>null</code>.</p> </li> </ul> <p>If you've never set versioning on your bucket, it has no versioning state. In that case, a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html\"> GetBucketVersioning</a> request does not return a versioning state value.</p> <p>When you enable S3 Versioning, for each object in your bucket, you have a current version and zero or more noncurrent versions. You can configure your bucket S3 Lifecycle rules to expire noncurrent versions after a specified time period. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsLifecycleManaging.html\"> Creating and managing a lifecycle configuration for your S3 on Outposts bucket</a> in the <i>Amazon S3 User Guide</i>.</p> <p>If you have an object expiration lifecycle configuration in your non-versioned bucket and you want to maintain the same permanent delete behavior when you enable versioning, you must add a noncurrent expiration policy. The noncurrent expiration lifecycle configuration will manage the deletes of the noncurrent object versions in the version-enabled bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html\">Versioning</a> in the <i>Amazon S3 User Guide</i>.</p> <p>All Amazon S3 on Outposts REST API requests for this action require an additional parameter of <code>x-amz-outpost-id</code> to be passed with the request. In addition, you must use an S3 on Outposts endpoint hostname prefix instead of <code>s3-control</code>. For an example of the request syntax for Amazon S3 on Outposts that uses the S3 on Outposts endpoint hostname prefix and the <code>x-amz-outpost-id</code> derived by using the access point ARN, see the <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketVersioning.html#API_control_PutBucketVersioning_Examples\">Examples</a> section.</p> <p>The following operations are related to <code>PutBucketVersioning</code> for S3 on Outposts.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html\">GetBucketVersioning</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html\">PutBucketLifecycleConfiguration</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html\">GetBucketLifecycleConfiguration</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1425,7 +1483,7 @@
         {"shape":"NotFoundException"},
         {"shape":"TooManyTagsException"}
       ],
-      "documentation":"<p>Sets the supplied tag-set on an S3 Batch Operations job.</p> <p>A tag is a key-value pair. You can associate S3 Batch Operations tags with any job by sending a PUT request against the tagging subresource that is associated with the job. To modify the existing tag set, you can either replace the existing tag set entirely, or make changes within the existing tag set by retrieving the existing tag set using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a>, modify that tag set, and use this operation to replace the tag set with the one you modified. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <ul> <li> <p>If you send this request with an empty tag set, Amazon S3 deletes the existing tag set on the Batch Operations job. If you use this method, you are charged for a Tier 1 Request (PUT). For more information, see <a href=\"http://aws.amazon.com/s3/pricing/\">Amazon S3 pricing</a>.</p> </li> <li> <p>For deleting existing tags for your Batch Operations job, a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> request is preferred because it achieves the same result without incurring charges.</p> </li> <li> <p>A few things to consider about using tags:</p> <ul> <li> <p>Amazon S3 limits the maximum number of tags to 50 tags per job.</p> </li> <li> <p>You can associate up to 50 tags with a job as long as they have unique tag keys.</p> </li> <li> <p>A tag key can be up to 128 Unicode characters in length, and tag values can be up to 256 Unicode characters in length.</p> </li> <li> <p>The key and values are case sensitive.</p> </li> <li> <p>For tagging-related restrictions related to characters and encodings, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html\">User-Defined Tag Restrictions</a> in the <i>Billing and Cost Management User Guide</i>.</p> </li> </ul> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>PutJobTagging</code> operation, you must have permission to perform the <code>s3:PutJobTagging</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> </p> </li> </ul>",
+      "documentation":"<p>Sets the supplied tag-set on an S3 Batch Operations job.</p> <p>A tag is a key-value pair. You can associate S3 Batch Operations tags with any job by sending a PUT request against the tagging subresource that is associated with the job. To modify the existing tag set, you can either replace the existing tag set entirely, or make changes within the existing tag set by retrieving the existing tag set using <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a>, modify that tag set, and use this operation to replace the tag set with the one you modified. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-managing-jobs.html#batch-ops-job-tags\">Controlling access and labeling jobs using tags</a> in the <i>Amazon S3 User Guide</i>. </p> <note> <ul> <li> <p>If you send this request with an empty tag set, Amazon S3 deletes the existing tag set on the Batch Operations job. If you use this method, you are charged for a Tier 1 Request (PUT). For more information, see <a href=\"http://aws.amazon.com/s3/pricing/\">Amazon S3 pricing</a>.</p> </li> <li> <p>For deleting existing tags for your Batch Operations job, a <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> request is preferred because it achieves the same result without incurring charges.</p> </li> <li> <p>A few things to consider about using tags:</p> <ul> <li> <p>Amazon S3 limits the maximum number of tags to 50 tags per job.</p> </li> <li> <p>You can associate up to 50 tags with a job as long as they have unique tag keys.</p> </li> <li> <p>A tag key can be up to 128 Unicode characters in length, and tag values can be up to 256 Unicode characters in length.</p> </li> <li> <p>The key and values are case sensitive.</p> </li> <li> <p>For tagging-related restrictions related to characters and encodings, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html\">User-Defined Tag Restrictions</a> in the <i>Billing and Cost Management User Guide</i>.</p> </li> </ul> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>PutJobTagging</code> operation, you must have permission to perform the <code>s3:PutJobTagging</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetJobTagging.html\">GetJobTagging</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteJobTagging.html\">DeleteJobTagging</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1445,7 +1503,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"PutMultiRegionAccessPointPolicyResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Associates an access control policy with the specified Multi-Region Access Point. Each Multi-Region Access Point can have only one policy, so a request made to this action replaces any existing policy that is associated with the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>PutMultiRegionAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html\">GetMultiRegionAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html\">GetMultiRegionAccessPointPolicyStatus</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Associates an access control policy with the specified Multi-Region Access Point. Each Multi-Region Access Point can have only one policy, so a request made to this action replaces any existing policy that is associated with the specified Multi-Region Access Point.</p> <p>This action will always be routed to the US West (Oregon) Region. For more information about the restrictions around working with Multi-Region Access Points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPointRestrictions.html\">Multi-Region Access Point restrictions and limitations</a> in the <i>Amazon S3 User Guide</i>.</p> <p>The following actions are related to <code>PutMultiRegionAccessPointPolicy</code>:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicy.html\">GetMultiRegionAccessPointPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetMultiRegionAccessPointPolicyStatus.html\">GetMultiRegionAccessPointPolicyStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1461,7 +1519,7 @@
         "requestUri":"/v20180820/configuration/publicAccessBlock"
       },
       "input":{"shape":"PutPublicAccessBlockRequest"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For this operation, users must have the <code>s3:PutAccountPublicAccessBlock</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Creates or modifies the <code>PublicAccessBlock</code> configuration for an Amazon Web Services account. For this operation, users must have the <code>s3:PutAccountPublicAccessBlock</code> permission. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html\"> Using Amazon S3 block public access</a>.</p> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetPublicAccessBlock.html\">GetPublicAccessBlock</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeletePublicAccessBlock.html\">DeletePublicAccessBlock</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1480,7 +1538,7 @@
         "locationName":"PutStorageLensConfigurationRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Puts an Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Working with Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>. For a complete list of S3 Storage Lens metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html\">S3 Storage Lens metrics glossary</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:PutStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Puts an Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Working with Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>. For a complete list of S3 Storage Lens metrics, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html\">S3 Storage Lens metrics glossary</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:PutStorageLensConfiguration</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1500,7 +1558,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"PutStorageLensConfigurationTaggingResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Put or replace tags on an existing Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:PutStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Put or replace tags on an existing Amazon S3 Storage Lens configuration. For more information about S3 Storage Lens, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html\">Assessing your storage activity and usage with Amazon S3 Storage Lens </a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>To use this action, you must have permission to perform the <code>s3:PutStorageLensConfigurationTagging</code> action. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens_iam_permissions.html\">Setting permissions to use Amazon S3 Storage Lens</a> in the <i>Amazon S3 User Guide</i>.</p> </note> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1520,7 +1578,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"SubmitMultiRegionAccessPointRoutesResult"},
-      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Submits an updated route configuration for a Multi-Region Access Point. This API operation updates the routing status for the specified Regions from active to passive, or from passive to active. A value of <code>0</code> indicates a passive status, which means that traffic won't be routed to the specified Region. A value of <code>100</code> indicates an active status, which means that traffic will be routed to the specified Region. At least one Region must be active at all times.</p> <p>When the routing configuration is changed, any in-progress operations (uploads, copies, deletes, and so on) to formerly active Regions will continue to run to their final completion state (success or failure). The routing configurations of any Regions that aren’t specified remain unchanged.</p> <note> <p>Updated routing configurations might not be immediately applied. It can take up to 2 minutes for your changes to take effect.</p> </note> <p>To submit routing control changes and failover requests, use the Amazon S3 failover control infrastructure endpoints in these five Amazon Web Services Regions:</p> <ul> <li> <p> <code>us-east-1</code> </p> </li> <li> <p> <code>us-west-2</code> </p> </li> <li> <p> <code>ap-southeast-2</code> </p> </li> <li> <p> <code>ap-northeast-1</code> </p> </li> <li> <p> <code>eu-west-1</code> </p> </li> </ul>",
+      "documentation":"<note> <p>This operation is not supported by directory buckets.</p> </note> <p>Submits an updated route configuration for a Multi-Region Access Point. This API operation updates the routing status for the specified Regions from active to passive, or from passive to active. A value of <code>0</code> indicates a passive status, which means that traffic won't be routed to the specified Region. A value of <code>100</code> indicates an active status, which means that traffic will be routed to the specified Region. At least one Region must be active at all times.</p> <p>When the routing configuration is changed, any in-progress operations (uploads, copies, deletes, and so on) to formerly active Regions will continue to run to their final completion state (success or failure). The routing configurations of any Regions that aren’t specified remain unchanged.</p> <note> <p>Updated routing configurations might not be immediately applied. It can take up to 2 minutes for your changes to take effect.</p> </note> <p>To submit routing control changes and failover requests, use the Amazon S3 failover control infrastructure endpoints in these five Amazon Web Services Regions:</p> <ul> <li> <p> <code>us-east-1</code> </p> </li> <li> <p> <code>us-west-2</code> </p> </li> <li> <p> <code>ap-southeast-2</code> </p> </li> <li> <p> <code>ap-northeast-1</code> </p> </li> <li> <p> <code>eu-west-1</code> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1542,7 +1600,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"TagResourceResult"},
-      "documentation":"<p> Creates a new Amazon Web Services resource tag or updates an existing resource tag. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources. You can add up to 50 Amazon Web Services resource tags for each S3 resource. </p> <note> <p>This operation is only supported for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> and for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants</a>. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p> </note> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:TagResource</code> permission to use this operation. </p> </dd> </dl> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p>",
+      "documentation":"<p> Creates a new user-defined tag or updates an existing tag. Each tag is a label consisting of a key and value that is applied to your resource. Tags can help you organize, track costs for, and control access to your resources. You can add up to 50 Amazon Web Services resource tags for each S3 resource. </p> <note> <p>This operation is only supported for the following Amazon S3 resource:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-db-tagging.html\">Access Points for directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-tagging.html\">Access Points for general purpose buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants instances, registered locations, or grants</a>.</p> </li> </ul> </note> <note> <p>This operation is only supported for the following Amazon S3 resource:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants instances, registered locations, or grants</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>For Storage Lens groups and S3 Access Grants, you must have the <code>s3:TagResource</code> permission to use this operation. </p> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> </dd> <dt>Directory bucket permissions</dt> <dd> <p>For directory buckets and access points for directory buckets, you must have the <code>s3express:TagResource</code> permission to use this operation. For more information about directory buckets policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-permissions.html\">Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1559,7 +1617,7 @@
       },
       "input":{"shape":"UntagResourceRequest"},
       "output":{"shape":"UntagResourceResult"},
-      "documentation":"<p> This operation removes the specified Amazon Web Services resource tags from an S3 resource. Each tag is a label consisting of a user-defined key and value. Tags can help you manage, identify, organize, search for, and filter resources. </p> <note> <p>This operation is only supported for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> and for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants</a>. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p> </note> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:UntagResource</code> permission to use this operation. </p> </dd> </dl> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p>",
+      "documentation":"<p>This operation removes the specified user-defined tags from an S3 resource. You can pass one or more tag keys. </p> <note> <p>This operation is only supported for the following Amazon S3 resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-db-tagging.html\">Access Points for directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-tagging.html\">Access Points for general purpose buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-tagging.html\">Directory buckets</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">Storage Lens groups</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants instances, registered locations, and grants</a>.</p> </li> </ul> </note> <dl> <dt>Permissions</dt> <dd> <p>For Storage Lens groups and S3 Access Grants, you must have the <code>s3:UntagResource</code> permission to use this operation. </p> <p>For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> </dd> <dt>Directory bucket permissions</dt> <dd> <p>For directory buckets and access points for directory buckets, you must have the <code>s3express:UntagResource</code> permission to use this operation. For more information about directory buckets policies and permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-permissions.html\">Identity and Access Management (IAM) for S3 Express One Zone</a> in the <i>Amazon S3 User Guide</i>.</p> </dd> <dt>HTTP Host header syntax</dt> <dd> <p> <b>Directory buckets </b> - The HTTP Host header syntax is <code>s3express-control.<i>region</i>.amazonaws.com</code>.</p> </dd> </dl> <p>For information about S3 Tagging errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3TaggingErrorCodeList\">List of Amazon S3 Tagging error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1579,7 +1637,7 @@
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
       "output":{"shape":"UpdateAccessGrantsLocationResult"},
-      "documentation":"<p>Updates the IAM role of a registered location in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:UpdateAccessGrantsLocation</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permission: <code>iam:PassRole</code> </p> </dd> </dl>",
+      "documentation":"<p>Updates the IAM role of a registered location in your S3 Access Grants instance.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3:UpdateAccessGrantsLocation</code> permission to use this operation. </p> </dd> <dt>Additional Permissions</dt> <dd> <p>You must also have the following permission: <code>iam:PassRole</code> </p> </dd> </dl> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1602,7 +1660,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates an existing S3 Batch Operations job's priority. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>UpdateJobPriority</code> operation, you must have permission to perform the <code>s3:UpdateJobPriority</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul>",
+      "documentation":"<p>Updates an existing S3 Batch Operations job's priority. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>UpdateJobPriority</code> operation, you must have permission to perform the <code>s3:UpdateJobPriority</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1625,7 +1683,7 @@
         {"shape":"JobStatusException"},
         {"shape":"InternalServiceException"}
       ],
-      "documentation":"<p>Updates the status for the specified job. Use this operation to confirm that you want to run a job or to cancel an existing job. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>UpdateJobStatus</code> operation, you must have permission to perform the <code>s3:UpdateJobStatus</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul>",
+      "documentation":"<p>Updates the status for the specified job. Use this operation to confirm that you want to run a job or to cancel an existing job. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html\">S3 Batch Operations</a> in the <i>Amazon S3 User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>To use the <code>UpdateJobStatus</code> operation, you must have permission to perform the <code>s3:UpdateJobStatus</code> action.</p> </dd> </dl> <p>Related actions include:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html\">CreateJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListJobs.html\">ListJobs</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html\">DescribeJob</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateJobStatus.html\">UpdateJobStatus</a> </p> </li> </ul> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1645,7 +1703,7 @@
         "locationName":"UpdateStorageLensGroupRequest",
         "xmlNamespace":{"uri":"http://awss3control.amazonaws.com/doc/2018-08-20/"}
       },
-      "documentation":"<p> Updates the existing Storage Lens group.</p> <p>To use this operation, you must have the permission to perform the <code>s3:UpdateStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p>",
+      "documentation":"<p> Updates the existing Storage Lens group.</p> <p>To use this operation, you must have the permission to perform the <code>s3:UpdateStorageLensGroup</code> action. For more information about the required Storage Lens Groups permissions, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_iam_permissions.html#storage_lens_groups_permissions\">Setting account permissions to use S3 Storage Lens groups</a>.</p> <p>For information about Storage Lens groups errors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#S3LensErrorCodeList\">List of Amazon S3 Storage Lens error codes</a>.</p> <important> <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p> </important>",
       "endpoint":{
         "hostPrefix":"{AccountId}."
       },
@@ -1768,7 +1826,7 @@
           "documentation":"<p>The virtual private cloud (VPC) configuration for this access point, if one exists.</p> <note> <p>This element is empty if this access point is an Amazon S3 on Outposts access point that is used by other Amazon Web Services services.</p> </note>"
         },
         "Bucket":{
-          "shape":"BucketName",
+          "shape":"AccessPointBucketName",
           "documentation":"<p>The name of the bucket associated with this access point.</p>"
         },
         "AccessPointArn":{
@@ -1782,10 +1840,22 @@
         "BucketAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID associated with the S3 bucket associated with this access point.</p>"
+        },
+        "DataSourceId":{
+          "shape":"DataSourceId",
+          "documentation":"<p>A unique identifier for the data source of the access point.</p>"
+        },
+        "DataSourceType":{
+          "shape":"DataSourceType",
+          "documentation":"<p>The type of the data source that the access point is attached to.</p>"
         }
       },
       "documentation":"<p>An access point used to access a bucket.</p>"
     },
+    "AccessPointBucketName":{
+      "type":"string",
+      "max":255
+    },
     "AccessPointList":{
       "type":"list",
       "member":{
@@ -2023,15 +2093,13 @@
     "Boolean":{"type":"boolean"},
     "BucketAlreadyExists":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The requested Outposts bucket name is not available. The bucket namespace is shared by all users of the Outposts in this Region. Select a different name and try again.</p>",
       "exception":true
     },
     "BucketAlreadyOwnedByYou":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The Outposts bucket you tried to create already exists, and you own it. </p>",
       "exception":true
     },
@@ -2124,6 +2192,24 @@
       },
       "documentation":"<p>A container for enabling Amazon CloudWatch publishing for S3 Storage Lens metrics.</p> <p>For more information about publishing S3 Storage Lens metrics to CloudWatch, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_view_metrics_cloudwatch.html\">Monitor S3 Storage Lens metrics in CloudWatch</a> in the <i>Amazon S3 User Guide</i>.</p>"
     },
+    "ComputeObjectChecksumAlgorithm":{
+      "type":"string",
+      "enum":[
+        "CRC32",
+        "CRC32C",
+        "CRC64NVME",
+        "MD5",
+        "SHA1",
+        "SHA256"
+      ]
+    },
+    "ComputeObjectChecksumType":{
+      "type":"string",
+      "enum":[
+        "FULL_OBJECT",
+        "COMPOSITE"
+      ]
+    },
     "ConfigId":{
       "type":"string",
       "max":64,
@@ -2388,7 +2474,8 @@
         },
         "Name":{
           "shape":"AccessPointName",
-          "documentation":"<p>The name you want to assign to this access point.</p>",
+          "documentation":"<p>The name you want to assign to this access point.</p> <p>For directory buckets, the access point name must consist of a base name that you provide and suffix that includes the <code>ZoneID</code> (Amazon Web Services Availability Zone or Local Zone) of your bucket location, followed by <code>--xa-s3</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets.html\">Managing access to shared datasets in directory buckets with access points</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "contextParam":{"name":"AccessPointName"},
           "location":"uri",
           "locationName":"name"
         },
@@ -2408,6 +2495,14 @@
         "BucketAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID associated with the S3 bucket associated with this access point.</p> <p>For same account access point when your bucket and access point belong to the same account owner, the <code>BucketAccountId</code> is not required. For cross-account access point when your bucket and access point are not in the same account, the <code>BucketAccountId</code> is required. </p>"
+        },
+        "Scope":{
+          "shape":"Scope",
+          "documentation":"<p>For directory buckets, you can filter access control to specific prefixes, API operations, or a combination of both. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets.html\">Managing access to shared datasets in directory buckets with access points</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>Scope is only supported for access points attached to directory buckets.</p> </note>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of tags that you can apply to an access point. Tags are key-value pairs of metadata used to control access to your access points. For more information about tags, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Using tags with Amazon S3</a>. For information about tagging access points, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#using-tags-for-abac\">Using tags for attribute-based access control (ABAC)</a>.</p> <note> <ul> <li> <p>You must have the <code>s3:TagResource</code> permission to create an access point with tags for a general purpose bucket. </p> </li> <li> <p>You must have the <code>s3express:TagResource</code> permission to create an access point with tags for a directory bucket.</p> </li> </ul> </note>"
         }
       }
     },
@@ -2696,6 +2791,22 @@
       "documentation":"<p>The Amazon Web Services Security Token Service temporary credential that S3 Access Grants vends to grantees and client applications. </p>",
       "sensitive":true
     },
+    "DSSEKMSFilter":{
+      "type":"structure",
+      "members":{
+        "KmsKeyArn":{
+          "shape":"NonEmptyKmsKeyArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer managed KMS key to use for the filter to return objects that are encrypted by the specified key. For best performance, we recommend using the <code>KMSKeyArn</code> filter in conjunction with other object metadata filters, like <code>MatchAnyPrefix</code>, <code>CreatedAfter</code>, or <code>MatchAnyStorageClass</code>.</p> <note> <p>You must provide the full KMS Key ARN. You can't use an alias name or alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS keys</a> in the <i>Amazon Web Services Key Management Service Developer Guide</i>.</p> </note>",
+          "box":true
+        }
+      },
+      "documentation":"<p>A filter that returns objects that are encrypted by dual-layer server-side encryption with Amazon Web Services Key Management Service (KMS) keys (DSSE-KMS). You can further refine your filtering by optionally providing a KMS Key ARN to create an object list of DSSE-KMS objects with that specific KMS Key ARN.</p>"
+    },
+    "DataSourceId":{
+      "type":"string",
+      "max":191
+    },
+    "DataSourceType":{"type":"string"},
     "Date":{"type":"timestamp"},
     "Days":{"type":"integer"},
     "DaysAfterInitiation":{"type":"integer"},
@@ -2867,6 +2978,30 @@
         }
       }
     },
+    "DeleteAccessPointScopeRequest":{
+      "type":"structure",
+      "required":[
+        "AccountId",
+        "Name"
+      ],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The Amazon Web Services account ID that owns the access point with the scope that you want to delete. </p>",
+          "contextParam":{"name":"AccountId"},
+          "hostLabel":true,
+          "location":"header",
+          "locationName":"x-amz-account-id"
+        },
+        "Name":{
+          "shape":"AccessPointName",
+          "documentation":"<p> The name of the access point with the scope that you want to delete. </p>",
+          "contextParam":{"name":"AccessPointName"},
+          "location":"uri",
+          "locationName":"name"
+        }
+      }
+    },
     "DeleteBucketLifecycleConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -3012,8 +3147,7 @@
     },
     "DeleteJobTaggingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMarkerReplication":{
       "type":"structure",
@@ -3142,8 +3276,7 @@
     },
     "DeleteStorageLensConfigurationTaggingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStorageLensGroupRequest":{
       "type":"structure",
@@ -3380,7 +3513,7 @@
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
+      "pattern":"(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}:)?(\\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\\$LATEST|[a-zA-Z0-9-_]+))?"
     },
     "GeneratedManifestEncryption":{
       "type":"structure",
@@ -3861,7 +3994,7 @@
           "documentation":"<p>The name of the specified access point.</p>"
         },
         "Bucket":{
-          "shape":"BucketName",
+          "shape":"AccessPointBucketName",
           "documentation":"<p>The name of the bucket associated with the specified access point.</p>"
         },
         "NetworkOrigin":{
@@ -3892,6 +4025,47 @@
         "BucketAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The Amazon Web Services account ID associated with the S3 bucket associated with this access point.</p>"
+        },
+        "DataSourceId":{
+          "shape":"DataSourceId",
+          "documentation":"<p>The unique identifier for the data source of the access point.</p>"
+        },
+        "DataSourceType":{
+          "shape":"DataSourceType",
+          "documentation":"<p>The type of the data source that the access point is attached to.</p>"
+        }
+      }
+    },
+    "GetAccessPointScopeRequest":{
+      "type":"structure",
+      "required":[
+        "AccountId",
+        "Name"
+      ],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The Amazon Web Services account ID that owns the access point with the scope that you want to retrieve. </p>",
+          "contextParam":{"name":"AccountId"},
+          "hostLabel":true,
+          "location":"header",
+          "locationName":"x-amz-account-id"
+        },
+        "Name":{
+          "shape":"AccessPointName",
+          "documentation":"<p>The name of the access point with the scope you want to retrieve.</p>",
+          "contextParam":{"name":"AccessPointName"},
+          "location":"uri",
+          "locationName":"name"
+        }
+      }
+    },
+    "GetAccessPointScopeResult":{
+      "type":"structure",
+      "members":{
+        "Scope":{
+          "shape":"Scope",
+          "documentation":"<p>The contents of the access point scope.</p>"
         }
       }
     },
@@ -4165,6 +4339,10 @@
         "MatchedGrantTarget":{
           "shape":"S3Prefix",
           "documentation":"<p>The S3 URI path of the data to which you are being granted temporary access credentials. </p>"
+        },
+        "Grantee":{
+          "shape":"Grantee",
+          "documentation":"<p>The user, group, or role that was granted access to the S3 location scope. For directory identities, this API also returns the grants of the IAM role used for the identity-aware request. For more information on identity-aware sessions, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_sts-setcontext.html\">Granting permissions to use identity-aware console sessions</a>. </p>"
         }
       }
     },
@@ -4811,6 +4989,10 @@
         "MatchAnyStorageClass":{
           "shape":"StorageClassList",
           "documentation":"<p>If provided, the generated manifest includes only source bucket objects that are stored with the specified storage class.</p>"
+        },
+        "MatchAnyObjectEncryption":{
+          "shape":"ObjectEncryptionFilterList",
+          "documentation":"<p>If provided, the generated object list includes only source bucket objects with the indicated server-side encryption type (SSE-S3, SSE-KMS, DSSE-KMS, SSE-C, or NOT-SSE). If you select SSE-KMS or DSSE-KMS, you can optionally further filter your results by specifying a specific KMS Key ARN. If you select SSE-KMS, you can also optionally further filter your results by Bucket Key enabled status.</p>"
         }
       },
       "documentation":"<p>The filter used to describe a set of objects for the job's manifest.</p>"
@@ -4907,6 +5089,11 @@
           "shape":"S3ReplicateObjectOperation",
           "documentation":"<p>Directs the specified job to invoke <code>ReplicateObject</code> on every object in the job's manifest.</p> <note> <p>This functionality is not supported by directory buckets.</p> </note>",
           "box":true
+        },
+        "S3ComputeObjectChecksum":{
+          "shape":"S3ComputeObjectChecksumOperation",
+          "documentation":"<p>Directs the specified job to compute checksum values for every object in the manifest.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The operation that you want this job to perform on every object listed in the manifest. For more information about the available operations, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/batch-ops-operations.html\">Operations</a> in the <i>Amazon S3 User Guide</i>.</p>"
@@ -4968,6 +5155,11 @@
           "shape":"JobReportScope",
           "documentation":"<p>Indicates whether the job-completion report will include details of all tasks or only failed tasks.</p>",
           "box":true
+        },
+        "ExpectedBucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>Lists the Amazon Web Services account ID that owns the target bucket, where the completion report is received.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Contains the configuration parameters for a job-completion report.</p>"
@@ -5102,7 +5294,7 @@
         },
         "ExpiredObjectDeleteMarker":{
           "shape":"ExpiredObjectDeleteMarker",
-          "documentation":"<p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired. If set to false, the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.</p>"
+          "documentation":"<p>Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired. If set to false, the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy. To learn more about delete markers, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeleteMarker.html\">Working with delete markers</a>.</p>"
         }
       },
       "documentation":"<p>The container of the Outposts bucket lifecycle expiration.</p>"
@@ -5133,7 +5325,7 @@
         },
         "NoncurrentVersionTransitions":{
           "shape":"NoncurrentVersionTransitionList",
-          "documentation":"<p> Specifies the transition rule for the lifecycle rule that describes when noncurrent objects transition to a specific storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to a specific storage class at a set period in the object's lifetime. </p> <note> <p>This is not supported by Amazon S3 on Outposts buckets.</p> </note>"
+          "documentation":"<p> Specifies the transition rule for the lifecycle rule that describes when non-current objects transition to a specific storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to a specific storage class at a set period in the object's lifetime. </p> <note> <p>This is not supported by Amazon S3 on Outposts buckets.</p> </note>"
         },
         "NoncurrentVersionExpiration":{
           "shape":"NoncurrentVersionExpiration",
@@ -5455,6 +5647,51 @@
         }
       }
     },
+    "ListAccessPointsForDirectoryBucketsRequest":{
+      "type":"structure",
+      "required":["AccountId"],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID that owns the access points.</p>",
+          "contextParam":{"name":"AccountId"},
+          "hostLabel":true,
+          "location":"header",
+          "locationName":"x-amz-account-id"
+        },
+        "DirectoryBucket":{
+          "shape":"BucketName",
+          "documentation":"<p>The name of the directory bucket associated with the access points you want to list.</p>",
+          "location":"querystring",
+          "locationName":"directoryBucket"
+        },
+        "NextToken":{
+          "shape":"NonEmptyMaxLength1024String",
+          "documentation":"<p> If <code>NextToken</code> is returned, there are more access points available than requested in the <code>maxResults</code> value. The value of <code>NextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. </p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of access points that you would like returned in the <code>ListAccessPointsForDirectoryBuckets</code> response. If the directory bucket is associated with more than this number of access points, the results include the pagination token <code>NextToken</code>. Make another call using the <code>NextToken</code> to retrieve more results.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListAccessPointsForDirectoryBucketsResult":{
+      "type":"structure",
+      "members":{
+        "AccessPointList":{
+          "shape":"AccessPointList",
+          "documentation":"<p>Contains identification and configuration information for one or more access points associated with the directory bucket.</p>"
+        },
+        "NextToken":{
+          "shape":"NonEmptyMaxLength1024String",
+          "documentation":"<p> If <code>NextToken</code> is returned, there are more access points available than requested in the <code>maxResults</code> value. The value of <code>NextToken</code> is a unique pagination token for each page. Make the call again using the returned token to retrieve the next page. Keep all other arguments unchanged. Each pagination token expires after 24 hours. </p>"
+        }
+      }
+    },
     "ListAccessPointsForObjectLambdaRequest":{
       "type":"structure",
       "required":["AccountId"],
@@ -5524,6 +5761,18 @@
           "documentation":"<p>The maximum number of access points that you want to include in the list. If the specified bucket has more than this number of access points, then the response will include a continuation token in the <code>NextToken</code> field that you can use to retrieve the next page of access points.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        },
+        "DataSourceId":{
+          "shape":"DataSourceId",
+          "documentation":"<p>The unique identifier for the data source of the access point.</p>",
+          "location":"querystring",
+          "locationName":"dataSourceId"
+        },
+        "DataSourceType":{
+          "shape":"DataSourceType",
+          "documentation":"<p>The type of the data source that the access point is attached to. Returns only access points attached to S3 buckets by default. To return all access points specify <code>DataSourceType</code> as <code>ALL</code>.</p>",
+          "location":"querystring",
+          "locationName":"dataSourceType"
         }
       }
     },
@@ -5876,7 +6125,8 @@
         },
         "ResourceArn":{
           "shape":"S3ResourceArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) of the S3 resource that you want to list the tags for. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p>",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the S3 resource that you want to list tags for. The tagged resource can be a directory bucket, S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p>",
+          "contextParam":{"name":"ResourceArn"},
           "location":"uri",
           "locationName":"resourceArn"
         }
@@ -6144,6 +6394,12 @@
       "exception":true
     },
     "NoSuchPublicAccessBlockConfigurationMessage":{"type":"string"},
+    "NonEmptyKmsKeyArnString":{
+      "type":"string",
+      "max":2000,
+      "min":1,
+      "pattern":"arn:aws[a-zA-Z0-9-]*:kms:[a-z0-9-]+:[0-9]{12}:key/[a-zA-Z0-9-]+"
+    },
     "NonEmptyMaxLength1024String":{
       "type":"string",
       "max":1024,
@@ -6213,8 +6469,54 @@
       "documentation":"<p/>",
       "exception":true
     },
+    "NotSSEFilter":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>A filter that returns objects that aren't server-side encrypted.</p>"
+    },
     "ObjectAgeValue":{"type":"integer"},
     "ObjectCreationTime":{"type":"timestamp"},
+    "ObjectEncryptionFilter":{
+      "type":"structure",
+      "members":{
+        "SSES3":{
+          "shape":"SSES3Filter",
+          "documentation":"<p>Filters for objects that are encrypted by server-side encryption with Amazon S3 managed keys (SSE-S3).</p>",
+          "locationName":"SSE-S3"
+        },
+        "SSEKMS":{
+          "shape":"SSEKMSFilter",
+          "documentation":"<p>Filters for objects that are encrypted by server-side encryption with Amazon Web Services Key Management Service (KMS) keys (SSE-KMS).</p>",
+          "locationName":"SSE-KMS"
+        },
+        "DSSEKMS":{
+          "shape":"DSSEKMSFilter",
+          "documentation":"<p>Filters for objects that are encrypted by dual-layer server-side encryption with Amazon Web Services Key Management Service (KMS) keys (DSSE-KMS).</p>",
+          "locationName":"DSSE-KMS"
+        },
+        "SSEC":{
+          "shape":"SSECFilter",
+          "documentation":"<p>Filters for objects that are encrypted by server-side encryption with customer-provided keys (SSE-C).</p>",
+          "locationName":"SSE-C"
+        },
+        "NOTSSE":{
+          "shape":"NotSSEFilter",
+          "documentation":"<p>Filters for objects that are not encrypted by server-side encryption. </p>",
+          "locationName":"NOT-SSE"
+        }
+      },
+      "documentation":"<p>An optional filter for the <code>S3JobManifestGenerator</code> that identifies the subset of objects by encryption type. This filter is used to create an object list for S3 Batch Operations jobs. If provided, this filter will generate an object list that only includes objects with the specified encryption type.</p>",
+      "union":true
+    },
+    "ObjectEncryptionFilterList":{
+      "type":"list",
+      "member":{
+        "shape":"ObjectEncryptionFilter",
+        "locationName":"ObjectEncryption"
+      },
+      "max":1,
+      "min":1
+    },
     "ObjectLambdaAccessPoint":{
       "type":"structure",
       "required":["Name"],
@@ -6398,7 +6700,8 @@
         "S3InitiateRestoreObject",
         "S3PutObjectLegalHold",
         "S3PutObjectRetention",
-        "S3ReplicateObject"
+        "S3ReplicateObject",
+        "S3ComputeObjectChecksum"
       ]
     },
     "Organization":{
@@ -6463,6 +6766,13 @@
       },
       "documentation":"<p>A container for the prefix-level storage metrics for S3 Storage Lens.</p>"
     },
+    "PrefixesList":{
+      "type":"list",
+      "member":{
+        "shape":"Prefix",
+        "locationName":"Prefix"
+      }
+    },
     "Priority":{"type":"integer"},
     "Privilege":{
       "type":"string",
@@ -6631,7 +6941,36 @@
         },
         "Policy":{
           "shape":"Policy",
-          "documentation":"<p>The policy that you want to apply to the specified access point. For more information about access point policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing data access with Amazon S3 access points</a> in the <i>Amazon S3 User Guide</i>.</p>"
+          "documentation":"<p>The policy that you want to apply to the specified access point. For more information about access point policies, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html\">Managing data access with Amazon S3 access points</a> or <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets.html\">Managing access to shared datasets in directory buckets with access points</a> in the <i>Amazon S3 User Guide</i>.</p>"
+        }
+      }
+    },
+    "PutAccessPointScopeRequest":{
+      "type":"structure",
+      "required":[
+        "AccountId",
+        "Name",
+        "Scope"
+      ],
+      "members":{
+        "AccountId":{
+          "shape":"AccountId",
+          "documentation":"<p> The Amazon Web Services account ID that owns the access point with scope that you want to create or replace. </p>",
+          "contextParam":{"name":"AccountId"},
+          "hostLabel":true,
+          "location":"header",
+          "locationName":"x-amz-account-id"
+        },
+        "Name":{
+          "shape":"AccessPointName",
+          "documentation":"<p>The name of the access point with the scope that you want to create or replace.</p>",
+          "contextParam":{"name":"AccessPointName"},
+          "location":"uri",
+          "locationName":"name"
+        },
+        "Scope":{
+          "shape":"Scope",
+          "documentation":"<p>Object prefixes, API operations, or a combination of both.</p>"
         }
       }
     },
@@ -6833,8 +7172,7 @@
     },
     "PutJobTaggingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutMultiRegionAccessPointPolicyInput":{
       "type":"structure",
@@ -6976,8 +7314,7 @@
     },
     "PutStorageLensConfigurationTaggingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Region":{
       "type":"structure",
@@ -7399,6 +7736,20 @@
         "CRC64NVME"
       ]
     },
+    "S3ComputeObjectChecksumOperation":{
+      "type":"structure",
+      "members":{
+        "ChecksumAlgorithm":{
+          "shape":"ComputeObjectChecksumAlgorithm",
+          "documentation":"<p>Indicates the algorithm that you want Amazon S3 to use to create the checksum. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+        },
+        "ChecksumType":{
+          "shape":"ComputeObjectChecksumType",
+          "documentation":"<p>Indicates the checksum type that you want Amazon S3 to use to calculate the object’s checksum value. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html\">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>"
+        }
+      },
+      "documentation":"<p>Directs the specified job to invoke the <code>ComputeObjectChecksum</code> operation on every object listed in the job's manifest.</p>"
+    },
     "S3ContentLength":{
       "type":"long",
       "min":0
@@ -7408,7 +7759,7 @@
       "members":{
         "TargetResource":{
           "shape":"S3RegionalOrS3ExpressBucketArnString",
-          "documentation":"<p>Specifies the destination bucket Amazon Resource Name (ARN) for the batch copy operation.</p> <ul> <li> <p> <b>General purpose buckets</b> - For example, to copy objects to a general purpose bucket named <code>destinationBucket</code>, set the <code>TargetResource</code> property to <code>arn:aws:s3:::destinationBucket</code>.</p> </li> <li> <p> <b>Directory buckets</b> - For example, to copy objects to a directory bucket named <code>destinationBucket</code> in the Availability Zone; identified by the AZ ID <code>usw2-az1</code>, set the <code>TargetResource</code> property to <code>arn:aws:s3express:<i>region</i>:<i>account_id</i>:/bucket/<i>destination_bucket_base_name</i>--<i>usw2-az1</i>--x-s3</code>.</p> </li> </ul>"
+          "documentation":"<p>Specifies the destination bucket Amazon Resource Name (ARN) for the batch copy operation.</p> <ul> <li> <p> <b>General purpose buckets</b> - For example, to copy objects to a general purpose bucket named <code>destinationBucket</code>, set the <code>TargetResource</code> property to <code>arn:aws:s3:::destinationBucket</code>.</p> </li> <li> <p> <b>Directory buckets</b> - For example, to copy objects to a directory bucket named <code>destinationBucket</code> in the Availability Zone identified by the AZ ID <code>usw2-az1</code>, set the <code>TargetResource</code> property to <code>arn:aws:s3express:<i>region</i>:<i>account_id</i>:/bucket/<i>destination_bucket_base_name</i>--<i>usw2-az1</i>--x-s3</code>. A directory bucket as a destination bucket can be in Availability Zone or Local Zone. </p> <note> <p>Copying objects across different Amazon Web Services Regions isn't supported when the source or destination bucket is in Amazon Web Services Local Zones. The source and destination buckets must have the same parent Amazon Web Services Region. Otherwise, you get an HTTP <code>400 Bad Request</code> error with the error code <code>InvalidRequest</code>.</p> </note> </li> </ul>"
         },
         "CannedAccessControlList":{
           "shape":"S3CannedAccessControlList",
@@ -7485,8 +7836,7 @@
     },
     "S3DeleteObjectTaggingOperation":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Contains no configuration parameters because the DELETE Object tagging (<code>DeleteObjectTagging</code>) API operation accepts only the bucket name and key name as parameters, which are defined in the job's manifest.</p>"
     },
     "S3ExpirationInDays":{
@@ -7779,14 +8129,13 @@
     },
     "S3ReplicateObjectOperation":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Directs the specified job to invoke <code>ReplicateObject</code> on every object in the job's manifest.</p>"
     },
     "S3ResourceArn":{
       "type":"string",
       "max":1011,
-      "pattern":"arn:[^:]+:s3:[^:].*"
+      "pattern":"arn:[^:]+:s3(express)?:[^:].*"
     },
     "S3Retention":{
       "type":"structure",
@@ -7896,6 +8245,11 @@
       "value":{"shape":"MaxLength1024String"},
       "max":8192
     },
+    "SSECFilter":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>A filter that returns objects that are encrypted by server-side encryption with customer-provided keys (SSE-C).</p>"
+    },
     "SSEKMS":{
       "type":"structure",
       "required":["KeyId"],
@@ -7920,21 +8274,76 @@
       "documentation":"<p>Configuration for the use of SSE-KMS to encrypt generated manifest objects.</p>",
       "locationName":"SSE-KMS"
     },
-    "SSEKMSKeyId":{"type":"string"},
-    "SSES3":{
+    "SSEKMSFilter":{
       "type":"structure",
       "members":{
+        "KmsKeyArn":{
+          "shape":"NonEmptyKmsKeyArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the customer managed KMS key to use for the filter to return objects that are encrypted by the specified key. For best performance, we recommend using the <code>KMSKeyArn</code> filter in conjunction with other object metadata filters, like <code>MatchAnyPrefix</code>, <code>CreatedAfter</code>, or <code>MatchAnyStorageClass</code>.</p> <note> <p>You must provide the full KMS Key ARN. You can't use an alias name or alias ARN. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS keys</a> in the <i>Amazon Web Services Key Management Service Developer Guide</i>.</p> </note>",
+          "box":true
+        },
+        "BucketKeyEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Amazon Web Services Key Management Service (Amazon Web Services KMS) keys (SSE-KMS). If specified, will filter SSE-KMS encrypted objects by S3 Bucket Key status. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html\">Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys</a> in the <i>Amazon S3 User Guide</i>.</p>",
+          "box":true
+        }
       },
+      "documentation":"<p>A filter that returns objects that are encrypted by server-side encryption with Amazon Web Services KMS (SSE-KMS).</p>"
+    },
+    "SSEKMSKeyId":{"type":"string"},
+    "SSES3":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p/>",
       "locationName":"SSE-S3"
     },
     "SSES3Encryption":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Configuration for the use of SSE-S3 to encrypt generated manifest objects.</p>",
       "locationName":"SSE-S3"
     },
+    "SSES3Filter":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>A filter that returns objects that are encrypted by server-side encryption with Amazon S3 managed keys (SSE-S3).</p>"
+    },
+    "Scope":{
+      "type":"structure",
+      "members":{
+        "Prefixes":{
+          "shape":"PrefixesList",
+          "documentation":"<p>You can specify any amount of prefixes, but the total length of characters of all prefixes must be less than 256 bytes in size.</p>",
+          "locationName":"Prefixes"
+        },
+        "Permissions":{
+          "shape":"ScopePermissionList",
+          "documentation":"<p>You can include one or more API operations as permissions.</p>",
+          "locationName":"Permissions"
+        }
+      },
+      "documentation":"<p>You can use the access point scope to restrict access to specific prefixes, API operations, or a combination of both.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-directory-buckets-manage-scope.html\">Manage the scope of your access points for directory buckets</a>.</p>"
+    },
+    "ScopePermission":{
+      "type":"string",
+      "enum":[
+        "GetObject",
+        "GetObjectAttributes",
+        "ListMultipartUploadParts",
+        "ListBucket",
+        "ListBucketMultipartUploads",
+        "PutObject",
+        "DeleteObject",
+        "AbortMultipartUpload"
+      ]
+    },
+    "ScopePermissionList":{
+      "type":"list",
+      "member":{
+        "shape":"ScopePermission",
+        "locationName":"Permission"
+      }
+    },
     "SecretAccessKey":{
       "type":"string",
       "sensitive":true
@@ -8332,8 +8741,7 @@
     },
     "SubmitMultiRegionAccessPointRoutesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Suffix":{"type":"string"},
     "SuspendedCause":{
@@ -8358,7 +8766,7 @@
           "documentation":"<p> The value of the key-value pair of a tag added to your Amazon Web Services resource. A tag value can be up to 256 Unicode characters in length and is case-sensitive. </p>"
         }
       },
-      "documentation":"<p> An Amazon Web Services resource tag that's associated with your S3 resource. You can add tags to new objects when you upload them, or you can add object tags to existing objects. </p> <note> <p>This operation is only supported for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-groups.html\">S3 Storage Lens groups</a> and for <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-tagging.html\">S3 Access Grants</a>. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant. </p> </note>"
+      "documentation":"<p> A key-value pair that you use to label your resources. You can add tags to new resources when you create them, or you can add tags to existing resources. Tags can help you organize, track costs for, and control access to resources. </p>"
     },
     "TagKeyList":{
       "type":"list",
@@ -8399,7 +8807,8 @@
         },
         "ResourceArn":{
           "shape":"S3ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 resource that you're trying to add tags to. The tagged resource can be an S3 Storage Lens group or S3 Access Grants instance, registered location, or grant.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 resource that you're applying tags to. The tagged resource can be a directory bucket, S3 Storage Lens group or S3 Access Grants instance, registered location, or grant.</p>",
+          "contextParam":{"name":"ResourceArn"},
           "location":"uri",
           "locationName":"resourceArn"
         },
@@ -8411,8 +8820,7 @@
     },
     "TagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValueString":{
       "type":"string",
@@ -8506,7 +8914,8 @@
         },
         "ResourceArn":{
           "shape":"S3ResourceArn",
-          "documentation":"<p> The Amazon Resource Name (ARN) of the S3 resource that you're trying to remove the tags from. </p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the S3 resource that you're removing tags from. The tagged resource can be a directory bucket, S3 Storage Lens group or S3 Access Grants instance, registered location, or grant.</p>",
+          "contextParam":{"name":"ResourceArn"},
           "location":"uri",
           "locationName":"resourceArn"
         },
@@ -8520,8 +8929,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccessGrantsLocationRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3outposts/2017-07-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/s3outposts/2017-07-25/service-2.json 2.31.35-1/awscli/botocore/data/s3outposts/2017-07-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/s3outposts/2017-07-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3outposts/2017-07-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"s3-outposts",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Amazon S3 Outposts",
     "serviceFullName":"Amazon S3 on Outposts",
     "serviceId":"S3Outposts",
     "signatureVersion":"v4",
     "signingName":"s3-outposts",
-    "uid":"s3outposts-2017-07-25"
+    "uid":"s3outposts-2017-07-25",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateEndpoint":{
diff -pruN 2.23.6-1/awscli/botocore/data/s3tables/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/s3tables/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/s3tables/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3tables/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/s3tables/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/s3tables/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/s3tables/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3tables/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a namespace. A namespace is a logical grouping of tables within your table bucket, which you can use to organize tables. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-namespace.html\">Table namespaces</a>. </p>"
+      "documentation":"<p>Creates a namespace. A namespace is a logical grouping of tables within your table bucket, which you can use to organize tables. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-namespace-create.html\">Create a namespace</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:CreateNamespace</code> permission to use this operation. </p> </dd> </dl>"
     },
     "CreateTable":{
       "name":"CreateTable",
@@ -49,7 +49,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a new table associated with the given namespace in a table bucket.</p>"
+      "documentation":"<p>Creates a new table associated with the given namespace in a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-create.html\">Creating an Amazon S3 table</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p>You must have the <code>s3tables:CreateTable</code> permission to use this operation. </p> </li> <li> <p>If you use this operation with the optional <code>metadata</code> request parameter you must have the <code>s3tables:PutTableData</code> permission. </p> </li> <li> <p>If you use this operation with the optional <code>encryptionConfiguration</code> request parameter you must have the <code>s3tables:PutTableEncryption</code> permission. </p> </li> <li> <p>You must have the <code>s3tables:TagResource</code> permission in addition to <code>s3tables:CreateTable</code> permission to create a table with tags.</p> </li> </ul> <note> <p>Additionally, If you choose SSE-KMS encryption you must grant the S3 Tables maintenance principal access to your KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-kms-permissions.html\">Permissions requirements for S3 Tables SSE-KMS encryption</a>. </p> </note> </dd> </dl>"
     },
     "CreateTableBucket":{
       "name":"CreateTableBucket",
@@ -68,7 +68,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a table bucket.</p>"
+      "documentation":"<p>Creates a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html\">Creating a table bucket</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p>You must have the <code>s3tables:CreateTableBucket</code> permission to use this operation. </p> </li> <li> <p>If you use this operation with the optional <code>encryptionConfiguration</code> parameter you must have the <code>s3tables:PutTableBucketEncryption</code> permission.</p> </li> <li> <p>You must have the <code>s3tables:TagResource</code> permission in addition to <code>s3tables:CreateTableBucket</code> permission to create a table bucket with tags.</p> </li> </ul> </dd> </dl>"
     },
     "DeleteNamespace":{
       "name":"DeleteNamespace",
@@ -86,7 +86,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Deletes a namespace.</p>",
+      "documentation":"<p>Deletes a namespace. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-namespace-delete.html\">Delete a namespace</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteNamespace</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "DeleteTable":{
@@ -105,7 +105,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Deletes a table.</p>",
+      "documentation":"<p>Deletes a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html\">Deleting an Amazon S3 table</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTable</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "DeleteTableBucket":{
@@ -124,7 +124,45 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Deletes a table bucket.</p>",
+      "documentation":"<p>Deletes a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-delete.html\">Deleting a table bucket</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTableBucket</code> permission to use this operation. </p> </dd> </dl>",
+      "idempotent":true
+    },
+    "DeleteTableBucketEncryption":{
+      "name":"DeleteTableBucketEncryption",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/buckets/{tableBucketARN}/encryption",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteTableBucketEncryptionRequest"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Deletes the encryption configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTableBucketEncryption</code> permission to use this operation.</p> </dd> </dl>",
+      "idempotent":true
+    },
+    "DeleteTableBucketMetricsConfiguration":{
+      "name":"DeleteTableBucketMetricsConfiguration",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/buckets/{tableBucketARN}/metrics",
+        "responseCode":204
+      },
+      "input":{"shape":"DeleteTableBucketMetricsConfigurationRequest"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Deletes the metrics configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTableBucketMetricsConfiguration</code> permission to use this operation.</p> </dd> </dl>",
       "idempotent":true
     },
     "DeleteTableBucketPolicy":{
@@ -143,7 +181,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Deletes a table bucket policy.</p>",
+      "documentation":"<p>Deletes a table bucket policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-bucket-policy.html#table-bucket-policy-delete\">Deleting a table bucket policy</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTableBucketPolicy</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "DeleteTablePolicy":{
@@ -162,7 +200,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Deletes a table policy.</p>",
+      "documentation":"<p>Deletes a table policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-table-policy.html#table-policy-delete\">Deleting a table policy</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:DeleteTablePolicy</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "GetNamespace":{
@@ -183,13 +221,14 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about a namespace.</p>"
+      "documentation":"<p>Gets details about a namespace. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-namespace.html\">Table namespaces</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetNamespace</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "GetTable":{
       "name":"GetTable",
       "http":{
         "method":"GET",
-        "requestUri":"/tables/{tableBucketARN}/{namespace}/{name}",
+        "requestUri":"/get-table",
         "responseCode":200
       },
       "input":{"shape":"GetTableRequest"},
@@ -203,7 +242,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about a table.</p>"
+      "documentation":"<p>Gets details about a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-tables.html\">S3 Tables</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTable</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "GetTableBucket":{
       "name":"GetTableBucket",
@@ -223,7 +263,28 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details on a table bucket.</p>"
+      "documentation":"<p>Gets details on a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-details.html\">Viewing details about an Amazon S3 table bucket</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableBucket</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
+    },
+    "GetTableBucketEncryption":{
+      "name":"GetTableBucketEncryption",
+      "http":{
+        "method":"GET",
+        "requestUri":"/buckets/{tableBucketARN}/encryption",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTableBucketEncryptionRequest"},
+      "output":{"shape":"GetTableBucketEncryptionResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Gets the encryption configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableBucketEncryption</code> permission to use this operation.</p> </dd> </dl>",
+      "readonly":true
     },
     "GetTableBucketMaintenanceConfiguration":{
       "name":"GetTableBucketMaintenanceConfiguration",
@@ -242,7 +303,28 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about a maintenance configuration for a given table bucket.</p>"
+      "documentation":"<p>Gets details about a maintenance configuration for a given table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html\">Amazon S3 table bucket maintenance</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableBucketMaintenanceConfiguration</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
+    },
+    "GetTableBucketMetricsConfiguration":{
+      "name":"GetTableBucketMetricsConfiguration",
+      "http":{
+        "method":"GET",
+        "requestUri":"/buckets/{tableBucketARN}/metrics",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTableBucketMetricsConfigurationRequest"},
+      "output":{"shape":"GetTableBucketMetricsConfigurationResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Gets the metrics configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableBucketMetricsConfiguration</code> permission to use this operation.</p> </dd> </dl>",
+      "readonly":true
     },
     "GetTableBucketPolicy":{
       "name":"GetTableBucketPolicy",
@@ -261,7 +343,28 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about a table bucket policy.</p>"
+      "documentation":"<p>Gets details about a table bucket policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-bucket-policy.html#table-bucket-policy-get\">Viewing a table bucket policy</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableBucketPolicy</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
+    },
+    "GetTableEncryption":{
+      "name":"GetTableEncryption",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tables/{tableBucketARN}/{namespace}/{name}/encryption",
+        "responseCode":200
+      },
+      "input":{"shape":"GetTableEncryptionRequest"},
+      "output":{"shape":"GetTableEncryptionResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Gets the encryption configuration for a table.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableEncryption</code> permission to use this operation.</p> </dd> </dl>",
+      "readonly":true
     },
     "GetTableMaintenanceConfiguration":{
       "name":"GetTableMaintenanceConfiguration",
@@ -280,7 +383,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about the maintenance configuration of a table.</p>"
+      "documentation":"<p>Gets details about the maintenance configuration of a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html\">S3 Tables maintenance</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <ul> <li> <p>You must have the <code>s3tables:GetTableMaintenanceConfiguration</code> permission to use this operation. </p> </li> <li> <p>You must have the <code>s3tables:GetTableData</code> permission to use set the compaction strategy to <code>sort</code> or <code>zorder</code>.</p> </li> </ul> </dd> </dl>",
+      "readonly":true
     },
     "GetTableMaintenanceJobStatus":{
       "name":"GetTableMaintenanceJobStatus",
@@ -299,7 +403,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets the status of a maintenance job for a table.</p>"
+      "documentation":"<p>Gets the status of a maintenance job for a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html\">S3 Tables maintenance</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableMaintenanceJobStatus</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "GetTableMetadataLocation":{
       "name":"GetTableMetadataLocation",
@@ -318,7 +423,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets the location of the table metadata.</p>"
+      "documentation":"<p>Gets the location of the table metadata.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTableMetadataLocation</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "GetTablePolicy":{
       "name":"GetTablePolicy",
@@ -337,7 +443,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Gets details about a table policy.</p>"
+      "documentation":"<p>Gets details about a table policy. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-table-policy.html#table-policy-get\">Viewing a table policy</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:GetTablePolicy</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "ListNamespaces":{
       "name":"ListNamespaces",
@@ -357,7 +464,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Lists the namespaces within a table bucket.</p>"
+      "documentation":"<p>Lists the namespaces within a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-namespace.html\">Table namespaces</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:ListNamespaces</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "ListTableBuckets":{
       "name":"ListTableBuckets",
@@ -377,7 +485,8 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Lists table buckets for your account.</p>"
+      "documentation":"<p>Lists table buckets for your account. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html\">S3 Table buckets</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:ListTableBuckets</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
     },
     "ListTables":{
       "name":"ListTables",
@@ -396,7 +505,47 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>List tables in the given table bucket.</p>"
+      "documentation":"<p>List tables in the given table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-tables.html\">S3 Tables</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:ListTables</code> permission to use this operation. </p> </dd> </dl>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"GET",
+        "requestUri":"/tag/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Lists all of the tags applied to a specified Amazon S3 Tables resource. Each tag is a label consisting of a key and value pair. Tags can help you organize, track costs for, and control access to resources. </p> <note> <p>For a list of S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>For tables and table buckets, you must have the <code>s3tables:ListTagsForResource</code> permission to use this operation.</p> </dd> </dl>",
+      "idempotent":true
+    },
+    "PutTableBucketEncryption":{
+      "name":"PutTableBucketEncryption",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/buckets/{tableBucketARN}/encryption",
+        "responseCode":200
+      },
+      "input":{"shape":"PutTableBucketEncryptionRequest"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Sets the encryption configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTableBucketEncryption</code> permission to use this operation.</p> <note> <p>If you choose SSE-KMS encryption you must grant the S3 Tables maintenance principal access to your KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-kms-permissions.html\">Permissions requirements for S3 Tables SSE-KMS encryption</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> </note> </dd> </dl>",
+      "idempotent":true
     },
     "PutTableBucketMaintenanceConfiguration":{
       "name":"PutTableBucketMaintenanceConfiguration",
@@ -414,7 +563,26 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a new maintenance configuration or replaces an existing maintenance configuration for a table bucket.</p>"
+      "documentation":"<p>Creates a new maintenance configuration or replaces an existing maintenance configuration for a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-table-buckets-maintenance.html\">Amazon S3 table bucket maintenance</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTableBucketMaintenanceConfiguration</code> permission to use this operation. </p> </dd> </dl>"
+    },
+    "PutTableBucketMetricsConfiguration":{
+      "name":"PutTableBucketMetricsConfiguration",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/buckets/{tableBucketARN}/metrics",
+        "responseCode":204
+      },
+      "input":{"shape":"PutTableBucketMetricsConfigurationRequest"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Sets the metrics configuration for a table bucket.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTableBucketMetricsConfiguration</code> permission to use this operation.</p> </dd> </dl>",
+      "idempotent":true
     },
     "PutTableBucketPolicy":{
       "name":"PutTableBucketPolicy",
@@ -432,7 +600,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a new maintenance configuration or replaces an existing table bucket policy for a table bucket. </p>",
+      "documentation":"<p>Creates a new table bucket policy or replaces an existing table bucket policy for a table bucket. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-bucket-policy.html#table-bucket-policy-add\">Adding a table bucket policy</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTableBucketPolicy</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "PutTableMaintenanceConfiguration":{
@@ -451,7 +619,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a new maintenance configuration or replaces an existing maintenance configuration for a table.</p>"
+      "documentation":"<p>Creates a new maintenance configuration or replaces an existing maintenance configuration for a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html\">S3 Tables maintenance</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTableMaintenanceConfiguration</code> permission to use this operation. </p> </dd> </dl>"
     },
     "PutTablePolicy":{
       "name":"PutTablePolicy",
@@ -469,7 +637,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Creates a new maintenance configuration or replaces an existing table policy for a table. </p>",
+      "documentation":"<p>Creates a new table policy or replaces an existing table policy for a table. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-table-policy.html#table-policy-add\">Adding a table policy</a> in the <i>Amazon Simple Storage Service User Guide</i>. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:PutTablePolicy</code> permission to use this operation. </p> </dd> </dl>",
       "idempotent":true
     },
     "RenameTable":{
@@ -488,7 +656,47 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Renames a table or a namespace.</p>"
+      "documentation":"<p>Renames a table or a namespace. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-tables.html\">S3 Tables</a> in the <i>Amazon Simple Storage Service User Guide</i>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:RenameTable</code> permission to use this operation. </p> </dd> </dl>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/tag/{resourceArn}",
+        "responseCode":200
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Applies one or more user-defined tags to an Amazon S3 Tables resource or updates existing tags. Each tag is a label consisting of a key and value pair. Tags can help you organize, track costs for, and control access to your resources. You can add up to 50 tags for each S3 resource. </p> <note> <p>For a list of S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>For tables and table buckets, you must have the <code>s3tables:TagResource</code> permission to use this operation.</p> </dd> </dl>",
+      "idempotent":true
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/tag/{resourceArn}",
+        "responseCode":204
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"InternalServerErrorException"},
+        {"shape":"ForbiddenException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ConflictException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Removes the specified user-defined tags from an Amazon S3 Tables resource. You can pass one or more tag keys. </p> <note> <p>For a list of S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>For tables and table buckets, you must have the <code>s3tables:UntagResource</code> permission to use this operation.</p> </dd> </dl>",
+      "idempotent":true
     },
     "UpdateTableMetadataLocation":{
       "name":"UpdateTableMetadataLocation",
@@ -507,7 +715,7 @@
         {"shape":"ConflictException"},
         {"shape":"BadRequestException"}
       ],
-      "documentation":"<p>Updates the metadata location for a table.</p>"
+      "documentation":"<p>Updates the metadata location for a table. The metadata location of a table must be an S3 URI that begins with the table's warehouse location. The metadata location for an Apache Iceberg table must end with <code>.metadata.json</code>, or if the metadata file is Gzip-compressed, <code>.metadata.json.gz</code>.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3tables:UpdateTableMetadataLocation</code> permission to use this operation. </p> </dd> </dl>"
     }
   },
   "shapes":{
@@ -541,6 +749,10 @@
       },
       "exception":true
     },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -602,6 +814,14 @@
         "name":{
           "shape":"TableBucketName",
           "documentation":"<p>The name for the table bucket.</p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration to use for the table bucket. This configuration specifies the default encryption settings that will be applied to all tables created in this bucket unless overridden at the table level. The configuration includes the encryption algorithm and, if using SSE-KMS, the KMS key to use.</p>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A map of user-defined tags that you would like to apply to the table bucket that you are creating. A tag is a key-value pair that you apply to your resources. Tags can help you organize and control access to resources. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Tagging for cost allocation or attribute-based access control (ABAC)</a>.</p> <note> <p>You must have the <code>s3tables:TagResource</code> permission in addition to <code>s3tables:CreateTableBucket</code> permisson to create a table bucket with tags.</p> </note>"
         }
       }
     },
@@ -643,6 +863,18 @@
         "format":{
           "shape":"OpenTableFormat",
           "documentation":"<p>The format for the table.</p>"
+        },
+        "metadata":{
+          "shape":"TableMetadata",
+          "documentation":"<p>The metadata for the table.</p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration to use for the table. This configuration specifies the encryption algorithm and, if using SSE-KMS, the KMS key to use for encrypting the table. </p> <note> <p>If you choose SSE-KMS encryption you must grant the S3 Tables maintenance principal access to your KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-kms-permissions.html\">Permissions requirements for S3 Tables SSE-KMS encryption</a>.</p> </note>"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>A map of user-defined tags that you would like to apply to the table that you are creating. A tag is a key-value pair that you apply to your resources. Tags can help you organize, track costs for, and control access to resources. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Tagging for cost allocation or attribute-based access control (ABAC)</a>.</p> <note> <p>You must have the <code>s3tables:TagResource</code> permission in addition to <code>s3tables:CreateTable</code> permission to create a table with tags.</p> </note>"
         }
       }
     },
@@ -684,13 +916,37 @@
         }
       }
     },
+    "DeleteTableBucketEncryptionRequest":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        }
+      }
+    },
+    "DeleteTableBucketMetricsConfigurationRequest":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        }
+      }
+    },
     "DeleteTableBucketPolicyRequest":{
       "type":"structure",
       "required":["tableBucketARN"],
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         }
@@ -718,7 +974,7 @@
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket that contains the table.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket that contains the table.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         },
@@ -770,6 +1026,27 @@
         }
       }
     },
+    "EncryptionConfiguration":{
+      "type":"structure",
+      "required":["sseAlgorithm"],
+      "members":{
+        "sseAlgorithm":{
+          "shape":"SSEAlgorithm",
+          "documentation":"<p>The server-side encryption algorithm to use. Valid values are <code>AES256</code> for S3-managed encryption keys, or <code>aws:kms</code> for Amazon Web Services KMS-managed encryption keys. If you choose SSE-KMS encryption you must grant the S3 Tables maintenance principal access to your KMS key. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-kms-permissions.html\">Permissions requirements for S3 Tables SSE-KMS encryption</a>.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"EncryptionConfigurationKmsKeyArnString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the KMS key to use for encryption. This field is required only when <code>sseAlgorithm</code> is set to <code>aws:kms</code>.</p>"
+        }
+      },
+      "documentation":"<p>Configuration specifying how data should be encrypted. This structure defines the encryption algorithm and optional KMS key to be used for server-side encryption.</p>"
+    },
+    "EncryptionConfigurationKmsKeyArnString":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws[-a-z0-9]*:kms:[-a-z0-9]*:[0-9]{12}:key/.+)"
+    },
     "ErrorMessage":{"type":"string"},
     "ForbiddenException":{
       "type":"structure",
@@ -828,6 +1105,36 @@
         "ownerAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The ID of the account that owns the namespcace.</p>"
+        },
+        "namespaceId":{
+          "shape":"NamespaceId",
+          "documentation":"<p>The unique identifier of the namespace.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The unique identifier of the table bucket containing this namespace.</p>"
+        }
+      }
+    },
+    "GetTableBucketEncryptionRequest":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        }
+      }
+    },
+    "GetTableBucketEncryptionResponse":{
+      "type":"structure",
+      "required":["encryptionConfiguration"],
+      "members":{
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration for the table bucket.</p>"
         }
       }
     },
@@ -860,13 +1167,39 @@
         }
       }
     },
+    "GetTableBucketMetricsConfigurationRequest":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        }
+      }
+    },
+    "GetTableBucketMetricsConfigurationResponse":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>"
+        },
+        "id":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the metrics configuration.</p>"
+        }
+      }
+    },
     "GetTableBucketPolicyRequest":{
       "type":"structure",
       "required":["tableBucketARN"],
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         }
@@ -878,7 +1211,7 @@
       "members":{
         "resourcePolicy":{
           "shape":"ResourcePolicy",
-          "documentation":"<p>The name of the resource policy.</p>"
+          "documentation":"<p>The <code>JSON</code> that defines the policy.</p>"
         }
       }
     },
@@ -918,6 +1251,52 @@
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time the table bucket was created.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The unique identifier of the table bucket.</p>"
+        },
+        "type":{
+          "shape":"TableBucketType",
+          "documentation":"<p>The type of the table bucket.</p>"
+        }
+      }
+    },
+    "GetTableEncryptionRequest":{
+      "type":"structure",
+      "required":[
+        "tableBucketARN",
+        "namespace",
+        "name"
+      ],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket containing the table.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        },
+        "namespace":{
+          "shape":"NamespaceName",
+          "documentation":"<p>The namespace associated with the table.</p>",
+          "location":"uri",
+          "locationName":"namespace"
+        },
+        "name":{
+          "shape":"TableName",
+          "documentation":"<p>The name of the table.</p>",
+          "location":"uri",
+          "locationName":"name"
+        }
+      }
+    },
+    "GetTableEncryptionResponse":{
+      "type":"structure",
+      "required":["encryptionConfiguration"],
+      "members":{
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration for the table.</p>"
         }
       }
     },
@@ -982,13 +1361,13 @@
         },
         "namespace":{
           "shape":"NamespaceName",
-          "documentation":"<p>The name of the namespace the table is associated with. <pre><code>&lt;/p&gt; </code></pre>",
+          "documentation":"<p>The name of the namespace the table is associated with. </p>",
           "location":"uri",
           "locationName":"namespace"
         },
         "name":{
           "shape":"TableName",
-          "documentation":"<p>The name of the maintenance job.</p>",
+          "documentation":"<p>The name of the table containing the maintenance job status you want to check.</p>",
           "location":"uri",
           "locationName":"name"
         }
@@ -1070,7 +1449,7 @@
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket that contains the table.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket that contains the table.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         },
@@ -1094,35 +1473,36 @@
       "members":{
         "resourcePolicy":{
           "shape":"ResourcePolicy",
-          "documentation":"<p>The name of the resource policy.</p>"
+          "documentation":"<p>The <code>JSON</code> that defines the policy.</p>"
         }
       }
     },
     "GetTableRequest":{
       "type":"structure",
-      "required":[
-        "tableBucketARN",
-        "namespace",
-        "name"
-      ],
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
           "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket associated with the table.</p>",
-          "location":"uri",
+          "location":"querystring",
           "locationName":"tableBucketARN"
         },
         "namespace":{
           "shape":"NamespaceName",
           "documentation":"<p>The name of the namespace the table is associated with.</p>",
-          "location":"uri",
+          "location":"querystring",
           "locationName":"namespace"
         },
         "name":{
           "shape":"TableName",
           "documentation":"<p>The name of the table.</p>",
-          "location":"uri",
+          "location":"querystring",
           "locationName":"name"
+        },
+        "tableArn":{
+          "shape":"TableARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table.</p>",
+          "location":"querystring",
+          "locationName":"tableArn"
         }
       }
     },
@@ -1159,6 +1539,10 @@
           "shape":"NamespaceList",
           "documentation":"<p>The namespace associated with the table.</p>"
         },
+        "namespaceId":{
+          "shape":"NamespaceId",
+          "documentation":"<p>The unique identifier of the namespace containing this table.</p>"
+        },
         "versionToken":{
           "shape":"VersionToken",
           "documentation":"<p>The version token of the table.</p>"
@@ -1198,6 +1582,10 @@
         "format":{
           "shape":"OpenTableFormat",
           "documentation":"<p>The format of the table.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The unique identifier of the table bucket containing this table.</p>"
         }
       }
     },
@@ -1207,9 +1595,44 @@
         "targetFileSizeMB":{
           "shape":"PositiveInteger",
           "documentation":"<p>The target file size for the table in MB.</p>"
+        },
+        "strategy":{
+          "shape":"IcebergCompactionStrategy",
+          "documentation":"<p>The compaction strategy to use for the table. This determines how files are selected and combined during compaction operations.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the compaction settings for an Iceberg table.</p>"
+    },
+    "IcebergCompactionStrategy":{
+      "type":"string",
+      "enum":[
+        "auto",
+        "binpack",
+        "sort",
+        "z-order"
+      ]
+    },
+    "IcebergMetadata":{
+      "type":"structure",
+      "required":["schema"],
+      "members":{
+        "schema":{
+          "shape":"IcebergSchema",
+          "documentation":"<p>The schema for an Iceberg table.</p>"
         }
       },
-      "documentation":"<p>Contains details about the compaction settings for an Iceberg table. </p>"
+      "documentation":"<p>Contains details about the metadata for an Iceberg table.</p>"
+    },
+    "IcebergSchema":{
+      "type":"structure",
+      "required":["fields"],
+      "members":{
+        "fields":{
+          "shape":"SchemaFieldList",
+          "documentation":"<p>The schema fields for the table</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the schema for an Iceberg table.</p>"
     },
     "IcebergSnapshotManagementSettings":{
       "type":"structure",
@@ -1223,21 +1646,21 @@
           "documentation":"<p>The maximum age of a snapshot before it can be expired.</p>"
         }
       },
-      "documentation":"<p>Contains details about the snapshot management settings for an Iceberg table. The oldest snapshot expires when its age exceeds the <code>maxSnapshotAgeHours</code> and the total number of snapshots exceeds the value for the minimum number of snapshots to keep <code>minSnapshotsToKeep</code>. </p>"
+      "documentation":"<p>Contains details about the snapshot management settings for an Iceberg table. The oldest snapshot expires when its age exceeds the <code>maxSnapshotAgeHours</code> and the total number of snapshots exceeds the value for the minimum number of snapshots to keep <code>minSnapshotsToKeep</code>.</p>"
     },
     "IcebergUnreferencedFileRemovalSettings":{
       "type":"structure",
       "members":{
         "unreferencedDays":{
           "shape":"PositiveInteger",
-          "documentation":"<p>The number of days an object has to be unreferenced before it is marked as non-current. <pre><code> &lt;/p&gt; </code></pre>"
+          "documentation":"<p>The number of days an object has to be unreferenced before it is marked as non-current.</p>"
         },
         "nonCurrentDays":{
           "shape":"PositiveInteger",
-          "documentation":"<p>The number of days an object has to be non-current before it is deleted. <pre><code>&lt;/p&gt; </code></pre>"
+          "documentation":"<p>The number of days an object has to be non-current before it is deleted.</p>"
         }
       },
-      "documentation":"<p>Contains details about the unreferenced file removal settings for an Iceberg table bucket. </p>"
+      "documentation":"<p>Contains details about the unreferenced file removal settings for an Iceberg table bucket.</p>"
     },
     "InternalServerErrorException":{
       "type":"structure",
@@ -1339,6 +1762,12 @@
           "documentation":"<p>The maximum number of table buckets to return in the list.</p>",
           "location":"querystring",
           "locationName":"maxBuckets"
+        },
+        "type":{
+          "shape":"TableBucketType",
+          "documentation":"<p>The type of table buckets to filter by in the list.</p>",
+          "location":"querystring",
+          "locationName":"type"
         }
       }
     },
@@ -1373,7 +1802,7 @@
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon resource Number (ARN) of the table bucket.</p>",
+          "documentation":"<p>The Amazon resource Name (ARN) of the table bucket.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         },
@@ -1422,6 +1851,27 @@
         }
       }
     },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon S3 Tables resource that you want to list tags for. The tagged resource can be a table bucket or a table. For a list of all S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        }
+      }
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The user-defined tags that are applied to the resource. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Tagging for cost allocation or attribute-based access control (ABAC)</a>.</p>"
+        }
+      }
+    },
     "MaintenanceStatus":{
       "type":"string",
       "enum":[
@@ -1434,6 +1884,7 @@
       "max":2048,
       "min":1
     },
+    "NamespaceId":{"type":"string"},
     "NamespaceList":{
       "type":"list",
       "member":{"shape":"NamespaceName"}
@@ -1468,6 +1919,14 @@
         "ownerAccountId":{
           "shape":"AccountId",
           "documentation":"<p>The ID of the account that owns the namespace.</p>"
+        },
+        "namespaceId":{
+          "shape":"NamespaceId",
+          "documentation":"<p>The system-assigned unique identifier for the namespace.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The system-assigned unique identifier for the table bucket that contains this namespace.</p>"
         }
       },
       "documentation":"<p>Contains details about a namespace.</p>"
@@ -1503,6 +1962,25 @@
       "max":2147483647,
       "min":1
     },
+    "PutTableBucketEncryptionRequest":{
+      "type":"structure",
+      "required":[
+        "tableBucketARN",
+        "encryptionConfiguration"
+      ],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration to apply to the table bucket.</p>"
+        }
+      }
+    },
     "PutTableBucketMaintenanceConfigurationRequest":{
       "type":"structure",
       "required":[
@@ -1529,6 +2007,18 @@
         }
       }
     },
+    "PutTableBucketMetricsConfigurationRequest":{
+      "type":"structure",
+      "required":["tableBucketARN"],
+      "members":{
+        "tableBucketARN":{
+          "shape":"TableBucketARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
+          "location":"uri",
+          "locationName":"tableBucketARN"
+        }
+      }
+    },
     "PutTableBucketPolicyRequest":{
       "type":"structure",
       "required":[
@@ -1538,13 +2028,13 @@
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         },
         "resourcePolicy":{
           "shape":"ResourcePolicy",
-          "documentation":"<p>The name of the resource policy.</p>"
+          "documentation":"<p>The <code>JSON</code> that defines the policy.</p>"
         }
       }
     },
@@ -1572,7 +2062,7 @@
         },
         "name":{
           "shape":"TableName",
-          "documentation":"<p>The name of the maintenance configuration.</p>",
+          "documentation":"<p>The name of the table.</p>",
           "location":"uri",
           "locationName":"name"
         },
@@ -1599,7 +2089,7 @@
       "members":{
         "tableBucketARN":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket that contains the table.</p>",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket that contains the table.</p>",
           "location":"uri",
           "locationName":"tableBucketARN"
         },
@@ -1617,7 +2107,7 @@
         },
         "resourcePolicy":{
           "shape":"ResourcePolicy",
-          "documentation":"<p>The name of the resource policy.</p>"
+          "documentation":"<p>The <code>JSON</code> that defines the policy.</p>"
         }
       }
     },
@@ -1661,11 +2151,50 @@
         }
       }
     },
+    "ResourceArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:bucket/.+"
+    },
     "ResourcePolicy":{
       "type":"string",
       "max":20480,
       "min":1
     },
+    "SSEAlgorithm":{
+      "type":"string",
+      "enum":[
+        "AES256",
+        "aws:kms"
+      ]
+    },
+    "SchemaField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "type"
+      ],
+      "members":{
+        "name":{
+          "shape":"String",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "type":{
+          "shape":"String",
+          "documentation":"<p>The field type. S3 Tables supports all Apache Iceberg primitive types. For more information, see the <a href=\"https://iceberg.apache.org/spec/#primitive-types\">Apache Iceberg documentation</a>.</p>"
+        },
+        "required":{
+          "shape":"Boolean",
+          "documentation":"<p>A Boolean value that specifies whether values are required for each row in this field. By default, this is <code>false</code> and null values are allowed in the field. If this is <code>true</code> the field does not allow null values.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about a schema field.</p>"
+    },
+    "SchemaFieldList":{
+      "type":"list",
+      "member":{"shape":"SchemaField"}
+    },
     "String":{"type":"string"},
     "SyntheticTimestamp_date_time":{
       "type":"timestamp",
@@ -1681,6 +2210,7 @@
       "type":"string",
       "pattern":"(arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:bucket/[a-z0-9_-]{3,63})"
     },
+    "TableBucketId":{"type":"string"},
     "TableBucketMaintenanceConfiguration":{
       "type":"map",
       "key":{"shape":"TableBucketMaintenanceType"},
@@ -1732,7 +2262,7 @@
       "members":{
         "arn":{
           "shape":"TableBucketARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table bucket.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table bucket.</p>"
         },
         "name":{
           "shape":"TableBucketName",
@@ -1745,6 +2275,14 @@
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time the table bucket was created at.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The system-assigned unique identifier for the table bucket.</p>"
+        },
+        "type":{
+          "shape":"TableBucketType",
+          "documentation":"<p>The type of the table bucket.</p>"
         }
       },
       "documentation":"<p>Contains details about a table bucket.</p>"
@@ -1753,6 +2291,13 @@
       "type":"list",
       "member":{"shape":"TableBucketSummary"}
     },
+    "TableBucketType":{
+      "type":"string",
+      "enum":[
+        "customer",
+        "aws"
+      ]
+    },
     "TableMaintenanceConfiguration":{
       "type":"map",
       "key":{"shape":"TableMaintenanceType"},
@@ -1826,6 +2371,17 @@
         "icebergSnapshotManagement"
       ]
     },
+    "TableMetadata":{
+      "type":"structure",
+      "members":{
+        "iceberg":{
+          "shape":"IcebergMetadata",
+          "documentation":"<p>Contains details about the metadata of an Iceberg table.</p>"
+        }
+      },
+      "documentation":"<p>Contains details about the table metadata.</p>",
+      "union":true
+    },
     "TableName":{
       "type":"string",
       "max":255,
@@ -1857,7 +2413,7 @@
         },
         "tableARN":{
           "shape":"TableARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table.</p>"
         },
         "createdAt":{
           "shape":"SyntheticTimestamp_date_time",
@@ -1866,6 +2422,14 @@
         "modifiedAt":{
           "shape":"SyntheticTimestamp_date_time",
           "documentation":"<p>The date and time the table was last modified at.</p>"
+        },
+        "namespaceId":{
+          "shape":"NamespaceId",
+          "documentation":"<p>The unique identifier for the namespace that contains this table.</p>"
+        },
+        "tableBucketId":{
+          "shape":"TableBucketId",
+          "documentation":"<p>The unique identifier for the table bucket that contains this table.</p>"
         }
       },
       "documentation":"<p>Contains details about a table.</p>"
@@ -1881,6 +2445,48 @@
         "aws"
       ]
     },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"}
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon S3 Tables resource that you're applying tags to. The tagged resource can be a table bucket or a table. For a list of all S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tags":{
+          "shape":"Tags",
+          "documentation":"<p>The user-defined tag that you want to add to the specified S3 Tables resource. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Tagging for cost allocation or attribute-based access control (ABAC)</a>.</p>"
+        }
+      }
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
+    "Tags":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"}
+    },
     "TooManyRequestsException":{
       "type":"structure",
       "members":{
@@ -1893,6 +2499,31 @@
       },
       "exception":true
     },
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon S3 Tables resource that you're removing tags from. The tagged resource can be a table bucket or a table. For a list of all S3 resources that support tagging, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#manage-tags\">Managing tags for Amazon S3 resources</a>.</p>",
+          "location":"uri",
+          "locationName":"resourceArn"
+        },
+        "tagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>The array of tag keys that you're removing from the S3 Tables resource. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html\">Tagging for cost allocation or attribute-based access control (ABAC)</a>.</p>",
+          "location":"querystring",
+          "locationName":"tagKeys"
+        }
+      }
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateTableMetadataLocationRequest":{
       "type":"structure",
       "required":[
@@ -1947,7 +2578,7 @@
         },
         "tableARN":{
           "shape":"TableARN",
-          "documentation":"<p>The Amazon Resource Number (ARN) of the table.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the table.</p>"
         },
         "namespace":{
           "shape":"NamespaceList",
@@ -1974,5 +2605,5 @@
       "min":1
     }
   },
-  "documentation":"<p>An Amazon S3 table represents a structured dataset consisting of tabular data in <a href=\"https://parquet.apache.org/docs/\">Apache Parquet</a> format and related metadata. This data is stored inside an S3 table as a subresource. All tables in a table bucket are stored in the <a href=\"https://iceberg.apache.org/docs/latest/\">Apache Iceberg</a> table format. Through integration with the <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html\">AWS Glue Data Catalog</a> you can interact with your tables using AWS analytics services, such as <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/athena/\">Amazon Athena</a> and <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/redshift/\">Amazon Redshift</a>. Amazon S3 manages maintenance of your tables through automatic file compaction and snapshot management. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html\">Amazon S3 table buckets</a>.</p>"
+  "documentation":"<p>An Amazon S3 table represents a structured dataset consisting of tabular data in <a href=\"https://parquet.apache.org/docs/\">Apache Parquet</a> format and related metadata. This data is stored inside an S3 table as a subresource. All tables in a table bucket are stored in the <a href=\"https://iceberg.apache.org/docs/latest/\">Apache Iceberg</a> table format. Through integration with the <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html\">Amazon Web Services Glue Data Catalog</a> you can interact with your tables using Amazon Web Services analytics services, such as <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/athena/\">Amazon Athena</a> and <a href=\"https://docs.aws.amazon.com/https:/docs.aws.amazon.com/redshift/\">Amazon Redshift</a>. Amazon S3 manages maintenance of your tables through automatic file compaction and snapshot management. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets.html\">Amazon S3 table buckets</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://s3vectors-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://s3vectors.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/paginators-1.json 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+{
+  "pagination": {
+    "ListIndexes": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "indexes"
+    },
+    "ListVectorBuckets": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "vectorBuckets"
+    },
+    "ListVectors": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "vectors"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/service-2.json 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1488 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2025-07-15",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"s3vectors",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"Amazon S3 Vectors",
+    "serviceId":"S3Vectors",
+    "signatureVersion":"v4",
+    "signingName":"s3vectors",
+    "uid":"s3vectors-2025-07-15"
+  },
+  "operations":{
+    "CreateIndex":{
+      "name":"CreateIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateIndex",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateIndexInput"},
+      "output":{"shape":"CreateIndexOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"ConflictException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Creates a vector index within a vector bucket. To specify the vector bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN).</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:CreateIndex</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "CreateVectorBucket":{
+      "name":"CreateVectorBucket",
+      "http":{
+        "method":"POST",
+        "requestUri":"/CreateVectorBucket",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateVectorBucketInput"},
+      "output":{"shape":"CreateVectorBucketOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"ConflictException"},
+        {"shape":"ServiceQuotaExceededException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Creates a vector bucket in the Amazon Web Services Region that you want your bucket to be in. </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:CreateVectorBucket</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "DeleteIndex":{
+      "name":"DeleteIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteIndex",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteIndexInput"},
+      "output":{"shape":"DeleteIndexOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Deletes a vector index. To specify the vector index, you can either use both the vector bucket name and vector index name, or use the vector index Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:DeleteIndex</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "DeleteVectorBucket":{
+      "name":"DeleteVectorBucket",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteVectorBucket",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteVectorBucketInput"},
+      "output":{"shape":"DeleteVectorBucketOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Deletes a vector bucket. All vector indexes in the vector bucket must be deleted before the vector bucket can be deleted. To perform this operation, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:DeleteVectorBucket</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "DeleteVectorBucketPolicy":{
+      "name":"DeleteVectorBucketPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteVectorBucketPolicy",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteVectorBucketPolicyInput"},
+      "output":{"shape":"DeleteVectorBucketPolicyOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Deletes a vector bucket policy. To specify the bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN).</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:DeleteVectorBucketPolicy</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "DeleteVectors":{
+      "name":"DeleteVectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteVectors",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteVectorsInput"},
+      "output":{"shape":"DeleteVectorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"KmsInvalidKeyUsageException"},
+        {"shape":"InternalServerException"},
+        {"shape":"KmsInvalidStateException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"KmsNotFoundException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"},
+        {"shape":"KmsDisabledException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Deletes one or more vectors in a vector index. To specify the vector index, you can either use both the vector bucket name and vector index name, or use the vector index Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:DeleteVectors</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "GetIndex":{
+      "name":"GetIndex",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetIndex",
+        "responseCode":200
+      },
+      "input":{"shape":"GetIndexInput"},
+      "output":{"shape":"GetIndexOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Returns vector index attributes. To specify the vector index, you can either use both the vector bucket name and the vector index name, or use the vector index Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:GetIndex</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "GetVectorBucket":{
+      "name":"GetVectorBucket",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetVectorBucket",
+        "responseCode":200
+      },
+      "input":{"shape":"GetVectorBucketInput"},
+      "output":{"shape":"GetVectorBucketOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Returns vector bucket attributes. To specify the bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:GetVectorBucket</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "GetVectorBucketPolicy":{
+      "name":"GetVectorBucketPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetVectorBucketPolicy",
+        "responseCode":200
+      },
+      "input":{"shape":"GetVectorBucketPolicyInput"},
+      "output":{"shape":"GetVectorBucketPolicyOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Gets details about a vector bucket policy. To specify the bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:GetVectorBucketPolicy</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "GetVectors":{
+      "name":"GetVectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetVectors",
+        "responseCode":200
+      },
+      "input":{"shape":"GetVectorsInput"},
+      "output":{"shape":"GetVectorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"KmsInvalidKeyUsageException"},
+        {"shape":"InternalServerException"},
+        {"shape":"KmsInvalidStateException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"KmsNotFoundException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"},
+        {"shape":"KmsDisabledException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Returns vector attributes. To specify the vector index, you can either use both the vector bucket name and the vector index name, or use the vector index Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:GetVectors</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "ListIndexes":{
+      "name":"ListIndexes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListIndexes",
+        "responseCode":200
+      },
+      "input":{"shape":"ListIndexesInput"},
+      "output":{"shape":"ListIndexesOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Returns a list of all the vector indexes within the specified vector bucket. To specify the bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:ListIndexes</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "ListVectorBuckets":{
+      "name":"ListVectorBuckets",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListVectorBuckets",
+        "responseCode":200
+      },
+      "input":{"shape":"ListVectorBucketsInput"},
+      "output":{"shape":"ListVectorBucketsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Returns a list of all the vector buckets that are owned by the authenticated sender of the request.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:ListVectorBuckets</code> permission to use this operation. </p> </dd> </dl></p>",
+      "readonly":true
+    },
+    "ListVectors":{
+      "name":"ListVectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ListVectors",
+        "responseCode":200
+      },
+      "input":{"shape":"ListVectorsInput"},
+      "output":{"shape":"ListVectorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>List vectors in the specified vector index. To specify the vector index, you can either use both the vector bucket name and the vector index name, or use the vector index Amazon Resource Name (ARN). </p> <p> <code>ListVectors</code> operations proceed sequentially; however, for faster performance on a large number of vectors in a vector index, applications can request a parallel <code>ListVectors</code> operation by providing the <code>segmentCount</code> and <code>segmentIndex</code> parameters.</p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:ListVectors</code> permission to use this operation. Additional permissions are required based on the request parameters you specify:</p> <ul> <li> <p>With only <code>s3vectors:ListVectors</code> permission, you can list vector keys when <code>returnData</code> and <code>returnMetadata</code> are both set to false or not specified..</p> </li> <li> <p>If you set <code>returnData</code> or <code>returnMetadata</code> to true, you must have both <code>s3vectors:ListVectors</code> and <code>s3vectors:GetVectors</code> permissions. The request fails with a <code>403 Forbidden</code> error if you request vector data or metadata without the <code>s3vectors:GetVectors</code> permission.</p> </li> </ul> </dd> </dl></p>",
+      "readonly":true
+    },
+    "PutVectorBucketPolicy":{
+      "name":"PutVectorBucketPolicy",
+      "http":{
+        "method":"POST",
+        "requestUri":"/PutVectorBucketPolicy",
+        "responseCode":200
+      },
+      "input":{"shape":"PutVectorBucketPolicyInput"},
+      "output":{"shape":"PutVectorBucketPolicyOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Creates a bucket policy for a vector bucket. To specify the bucket, you must use either the vector bucket name or the vector bucket Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:PutVectorBucketPolicy</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "PutVectors":{
+      "name":"PutVectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/PutVectors",
+        "responseCode":200
+      },
+      "input":{"shape":"PutVectorsInput"},
+      "output":{"shape":"PutVectorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"KmsInvalidKeyUsageException"},
+        {"shape":"InternalServerException"},
+        {"shape":"KmsInvalidStateException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"KmsNotFoundException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"KmsDisabledException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Adds one or more vectors to a vector index. To specify the vector index, you can either use both the vector bucket name and the vector index name, or use the vector index Amazon Resource Name (ARN). </p> <p>For more information about limits, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-limitations.html\">Limitations and restrictions</a> in the <i>Amazon S3 User Guide</i>.</p> <note> <p>When inserting vector data into your vector index, you must provide the vector data as <code>float32</code> (32-bit floating point) values. If you pass higher-precision values to an Amazon Web Services SDK, S3 Vectors converts the values to 32-bit floating point before storing them, and <code>GetVectors</code>, <code>ListVectors</code>, and <code>QueryVectors</code> operations return the float32 values. Different Amazon Web Services SDKs may have different default numeric types, so ensure your vectors are properly formatted as <code>float32</code> values regardless of which SDK you're using. For example, in Python, use <code>numpy.float32</code> or explicitly cast your values.</p> </note> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:PutVectors</code> permission to use this operation. </p> </dd> </dl></p>",
+      "idempotent":true
+    },
+    "QueryVectors":{
+      "name":"QueryVectors",
+      "http":{
+        "method":"POST",
+        "requestUri":"/QueryVectors",
+        "responseCode":200
+      },
+      "input":{"shape":"QueryVectorsInput"},
+      "output":{"shape":"QueryVectorsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"ServiceUnavailableException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"KmsInvalidKeyUsageException"},
+        {"shape":"InternalServerException"},
+        {"shape":"KmsInvalidStateException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"KmsNotFoundException"},
+        {"shape":"RequestTimeoutException"},
+        {"shape":"NotFoundException"},
+        {"shape":"KmsDisabledException"}
+      ],
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Performs an approximate nearest neighbor search query in a vector index using a query vector. By default, it returns the keys of approximate nearest neighbors. You can optionally include the computed distance (between the query vector and each vector in the response), the vector data, and metadata of each vector in the response. </p> <p>To specify the vector index, you can either use both the vector bucket name and the vector index name, or use the vector index Amazon Resource Name (ARN). </p> <dl> <dt>Permissions</dt> <dd> <p>You must have the <code>s3vectors:QueryVectors</code> permission to use this operation. Additional permissions are required based on the request parameters you specify:</p> <ul> <li> <p>With only <code>s3vectors:QueryVectors</code> permission, you can retrieve vector keys of approximate nearest neighbors and computed distances between these vectors. This permission is sufficient only when you don't set any metadata filters and don't request vector data or metadata (by keeping the <code>returnMetadata</code> parameter set to <code>false</code> or not specified).</p> </li> <li> <p>If you specify a metadata filter or set <code>returnMetadata</code> to true, you must have both <code>s3vectors:QueryVectors</code> and <code>s3vectors:GetVectors</code> permissions. The request fails with a <code>403 Forbidden error</code> if you request metadata filtering, vector data, or metadata without the <code>s3vectors:GetVectors</code> permission.</p> </li> </ul> </dd> </dl></p>",
+      "readonly":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>Access denied.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request failed because a vector bucket name or a vector index name already exists. Vector bucket names must be unique within your Amazon Web Services account for each Amazon Web Services Region. Vector index names must be unique within your vector bucket. Choose a different vector bucket name or vector index name, and try again.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "CreateIndexInput":{
+      "type":"structure",
+      "required":[
+        "indexName",
+        "dataType",
+        "dimension",
+        "distanceMetric"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket to create the vector index in. </p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector bucket to create the vector index in.</p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index to create. </p>"
+        },
+        "dataType":{
+          "shape":"DataType",
+          "documentation":"<p>The data type of the vectors to be inserted into the vector index. </p>"
+        },
+        "dimension":{
+          "shape":"Dimension",
+          "documentation":"<p>The dimensions of the vectors to be inserted into the vector index. </p>"
+        },
+        "distanceMetric":{
+          "shape":"DistanceMetric",
+          "documentation":"<p>The distance metric to be used for similarity search. </p>"
+        },
+        "metadataConfiguration":{
+          "shape":"MetadataConfiguration",
+          "documentation":"<p>The metadata configuration for the vector index. </p>"
+        }
+      }
+    },
+    "CreateIndexOutput":{
+      "type":"structure",
+      "required":["indexArn"],
+      "members":{
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created vector index.</p>"
+        }
+      }
+    },
+    "CreateVectorBucketInput":{
+      "type":"structure",
+      "required":["vectorBucketName"],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket to create. </p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration for the vector bucket. By default, if you don't specify, all new vectors in Amazon S3 vector buckets use server-side encryption with Amazon S3 managed keys (SSE-S3), specifically <code>AES256</code>. </p>"
+        }
+      }
+    },
+    "CreateVectorBucketOutput":{
+      "type":"structure",
+      "required":["vectorBucketArn"],
+      "members":{
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the newly created vector bucket.</p>"
+        }
+      }
+    },
+    "DataType":{
+      "type":"string",
+      "enum":["float32"]
+    },
+    "DeleteIndexInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index to delete. </p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index to delete.</p>"
+        }
+      }
+    },
+    "DeleteIndexOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteVectorBucketInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket to delete.</p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The ARN of the vector bucket to delete.</p>"
+        }
+      }
+    },
+    "DeleteVectorBucketOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteVectorBucketPolicyInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket to delete the policy from.</p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The ARN of the vector bucket to delete the policy from.</p>"
+        }
+      }
+    },
+    "DeleteVectorBucketPolicyOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteVectorsInput":{
+      "type":"structure",
+      "required":["keys"],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index that contains a vector you want to delete.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index that contains a vector you want to delete.</p>"
+        },
+        "keys":{
+          "shape":"DeleteVectorsInputList",
+          "documentation":"<p>The keys of the vectors to delete. </p>"
+        }
+      }
+    },
+    "DeleteVectorsInputList":{
+      "type":"list",
+      "member":{"shape":"VectorKey"},
+      "max":500,
+      "min":1
+    },
+    "DeleteVectorsOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "Dimension":{
+      "type":"integer",
+      "box":true,
+      "max":4096,
+      "min":1
+    },
+    "DistanceMetric":{
+      "type":"string",
+      "enum":[
+        "euclidean",
+        "cosine"
+      ]
+    },
+    "Document":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "EncryptionConfiguration":{
+      "type":"structure",
+      "members":{
+        "sseType":{
+          "shape":"SseType",
+          "documentation":"<p>The server-side encryption type to use for the encryption configuration of the vector bucket. By default, if you don't specify, all new vectors in Amazon S3 vector buckets use server-side encryption with Amazon S3 managed keys (SSE-S3), specifically <code>AES256</code>.</p>"
+        },
+        "kmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>Amazon Web Services Key Management Service (KMS) customer managed key ID to use for the encryption configuration. This parameter is allowed if and only if <code>sseType</code> is set to <code>aws:kms</code>.</p> <p>To specify the KMS key, you must use the format of the KMS key Amazon Resource Name (ARN).</p> <p>For example, specify Key ARN in the following format: <code>arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The encryption configuration for a vector bucket. By default, if you don't specify, all new vectors in Amazon S3 vector buckets use server-side encryption with Amazon S3 managed keys (SSE-S3), specifically <code>AES256</code>.</p></p>"
+    },
+    "ExceptionMessage":{"type":"string"},
+    "Float":{
+      "type":"float",
+      "box":true
+    },
+    "Float32VectorData":{
+      "type":"list",
+      "member":{"shape":"Float"}
+    },
+    "GetIndexInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index.</p>"
+        }
+      }
+    },
+    "GetIndexOutput":{
+      "type":"structure",
+      "required":["index"],
+      "members":{
+        "index":{
+          "shape":"Index",
+          "documentation":"<p>The attributes of the vector index.</p>"
+        }
+      }
+    },
+    "GetOutputVector":{
+      "type":"structure",
+      "required":["key"],
+      "members":{
+        "key":{
+          "shape":"VectorKey",
+          "documentation":"<p>The name of the vector. </p>"
+        },
+        "data":{
+          "shape":"VectorData",
+          "documentation":"<p>The vector data of the vector. </p>"
+        },
+        "metadata":{
+          "shape":"VectorMetadata",
+          "documentation":"<p>Metadata about the vector. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector returned by the <code>GetVectors</code> operation.</p></p>"
+    },
+    "GetVectorBucketInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket to retrieve information about.</p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The ARN of the vector bucket to retrieve information about.</p>"
+        }
+      }
+    },
+    "GetVectorBucketOutput":{
+      "type":"structure",
+      "required":["vectorBucket"],
+      "members":{
+        "vectorBucket":{
+          "shape":"VectorBucket",
+          "documentation":"<p>The attributes of the vector bucket.</p>"
+        }
+      }
+    },
+    "GetVectorBucketPolicyInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket.</p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The ARN of the vector bucket.</p>"
+        }
+      }
+    },
+    "GetVectorBucketPolicyOutput":{
+      "type":"structure",
+      "members":{
+        "policy":{
+          "shape":"VectorBucketPolicy",
+          "documentation":"<p>The <code>JSON</code> that defines the policy.</p>"
+        }
+      }
+    },
+    "GetVectorsInput":{
+      "type":"structure",
+      "required":["keys"],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index.</p>"
+        },
+        "keys":{
+          "shape":"GetVectorsInputList",
+          "documentation":"<p>The names of the vectors you want to return attributes for. </p>"
+        },
+        "returnData":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to include the vector data in the response. The default value is <code>false</code>.</p>"
+        },
+        "returnMetadata":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to include metadata in the response. The default value is <code>false</code>.</p>"
+        }
+      }
+    },
+    "GetVectorsInputList":{
+      "type":"list",
+      "member":{"shape":"VectorKey"},
+      "max":100,
+      "min":1
+    },
+    "GetVectorsOutput":{
+      "type":"structure",
+      "required":["vectors"],
+      "members":{
+        "vectors":{
+          "shape":"GetVectorsOutputList",
+          "documentation":"<p>The attributes of the vectors.</p>"
+        }
+      }
+    },
+    "GetVectorsOutputList":{
+      "type":"list",
+      "member":{"shape":"GetOutputVector"}
+    },
+    "Index":{
+      "type":"structure",
+      "required":[
+        "vectorBucketName",
+        "indexName",
+        "indexArn",
+        "creationTime",
+        "dataType",
+        "dimension",
+        "distanceMetric"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector index.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Date and time when the vector index was created. </p>"
+        },
+        "dataType":{
+          "shape":"DataType",
+          "documentation":"<p>The data type of the vectors inserted into the vector index. </p>"
+        },
+        "dimension":{
+          "shape":"Dimension",
+          "documentation":"<p>The number of values in the vectors that are inserted into the vector index. </p>"
+        },
+        "distanceMetric":{
+          "shape":"DistanceMetric",
+          "documentation":"<p>The distance metric to be used for similarity search. </p>"
+        },
+        "metadataConfiguration":{
+          "shape":"MetadataConfiguration",
+          "documentation":"<p>The metadata configuration for the vector index. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector index.</p></p>"
+    },
+    "IndexArn":{"type":"string"},
+    "IndexName":{
+      "type":"string",
+      "max":63,
+      "min":3
+    },
+    "IndexSummary":{
+      "type":"structure",
+      "required":[
+        "vectorBucketName",
+        "indexName",
+        "indexArn",
+        "creationTime"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector index.</p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Date and time when the vector index was created. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Summary information about a vector index.</p></p>"
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request failed due to an internal server error.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "KmsDisabledException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The specified Amazon Web Services KMS key isn't enabled.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "KmsInvalidKeyUsageException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request was rejected for one of the following reasons: </p> <ul> <li> <p>The <code>KeyUsage</code> value of the KMS key is incompatible with the API operation.</p> </li> <li> <p>The encryption algorithm or signing algorithm specified for the operation is incompatible with the type of key material in the KMS key (<code>KeySpec</code>).</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html#API_Encrypt_Errors\">InvalidKeyUsageException</a> in the <i>Amazon Web Services Key Management Service API Reference</i>.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "KmsInvalidStateException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The key state of the KMS key isn't compatible with the operation.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html#API_Encrypt_Errors\">KMSInvalidStateException</a> in the <i>Amazon Web Services Key Management Service API Reference</i>.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"(arn:aws[-a-z0-9]*:kms:[-a-z0-9]*:[0-9]{12}:key/.+)"
+    },
+    "KmsNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The KMS key can't be found.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ListIndexesInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector indexes. </p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The ARN of the vector bucket that contains the vector indexes.</p>"
+        },
+        "maxResults":{
+          "shape":"ListIndexesMaxResults",
+          "documentation":"<p>The maximum number of items to be returned in the response. </p>"
+        },
+        "nextToken":{
+          "shape":"ListIndexesNextToken",
+          "documentation":"<p>The previous pagination token. </p>"
+        },
+        "prefix":{
+          "shape":"ListIndexesPrefix",
+          "documentation":"<p>Limits the response to vector indexes that begin with the specified prefix.</p>"
+        }
+      }
+    },
+    "ListIndexesMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":500,
+      "min":1
+    },
+    "ListIndexesNextToken":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
+    "ListIndexesOutput":{
+      "type":"structure",
+      "required":["indexes"],
+      "members":{
+        "nextToken":{
+          "shape":"ListIndexesNextToken",
+          "documentation":"<p>The next pagination token.</p>"
+        },
+        "indexes":{
+          "shape":"ListIndexesOutputList",
+          "documentation":"<p>The attributes of the vector indexes</p>"
+        }
+      }
+    },
+    "ListIndexesOutputList":{
+      "type":"list",
+      "member":{"shape":"IndexSummary"}
+    },
+    "ListIndexesPrefix":{
+      "type":"string",
+      "max":63,
+      "min":1
+    },
+    "ListOutputVector":{
+      "type":"structure",
+      "required":["key"],
+      "members":{
+        "key":{
+          "shape":"VectorKey",
+          "documentation":"<p>The name of the vector. </p>"
+        },
+        "data":{
+          "shape":"VectorData",
+          "documentation":"<p>The vector data of the vector. </p>"
+        },
+        "metadata":{
+          "shape":"VectorMetadata",
+          "documentation":"<p>Metadata about the vector. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector returned by the <code>ListVectors</code> operation.</p></p>"
+    },
+    "ListVectorBucketsInput":{
+      "type":"structure",
+      "members":{
+        "maxResults":{
+          "shape":"ListVectorBucketsMaxResults",
+          "documentation":"<p>The maximum number of vector buckets to be returned in the response. </p>"
+        },
+        "nextToken":{
+          "shape":"ListVectorBucketsNextToken",
+          "documentation":"<p>The previous pagination token. </p>"
+        },
+        "prefix":{
+          "shape":"ListVectorBucketsPrefix",
+          "documentation":"<p>Limits the response to vector buckets that begin with the specified prefix.</p>"
+        }
+      }
+    },
+    "ListVectorBucketsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":500,
+      "min":1
+    },
+    "ListVectorBucketsNextToken":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
+    "ListVectorBucketsOutput":{
+      "type":"structure",
+      "required":["vectorBuckets"],
+      "members":{
+        "nextToken":{
+          "shape":"ListVectorBucketsNextToken",
+          "documentation":"<p>The element is included in the response when there are more buckets to be listed with pagination. </p>"
+        },
+        "vectorBuckets":{
+          "shape":"ListVectorBucketsOutputList",
+          "documentation":"<p>The list of vector buckets owned by the requester. </p>"
+        }
+      }
+    },
+    "ListVectorBucketsOutputList":{
+      "type":"list",
+      "member":{"shape":"VectorBucketSummary"}
+    },
+    "ListVectorBucketsPrefix":{
+      "type":"string",
+      "max":63,
+      "min":1
+    },
+    "ListVectorsInput":{
+      "type":"structure",
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index.</p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The Amazon resource Name (ARN) of the vector index.</p>"
+        },
+        "maxResults":{
+          "shape":"ListVectorsMaxResults",
+          "documentation":"<p>The maximum number of vectors to return on a page.</p> <p>If you don't specify <code>maxResults</code>, the <code>ListVectors</code> operation uses a default value of 500.</p> <p>If the processed dataset size exceeds 1 MB before reaching the <code>maxResults</code> value, the operation stops and returns the vectors that are retrieved up to that point, along with a <code>nextToken</code> that you can use in a subsequent request to retrieve the next set of results.</p>"
+        },
+        "nextToken":{
+          "shape":"ListVectorsNextToken",
+          "documentation":"<p>Pagination token from a previous request. The value of this field is empty for an initial request.</p>"
+        },
+        "segmentCount":{
+          "shape":"ListVectorsSegmentCount",
+          "documentation":"<p>For a parallel <code>ListVectors</code> request, <code>segmentCount</code> represents the total number of vector segments into which the <code>ListVectors</code> operation will be divided. The value of <code>segmentCount</code> corresponds to the number of application workers that will perform the parallel <code>ListVectors</code> operation. For example, if you want to use four application threads to list vectors in a vector index, specify a <code>segmentCount</code> value of 4. </p> <p>If you specify a <code>segmentCount</code> value of 1, the <code>ListVectors</code> operation will be sequential rather than parallel.</p> <p>If you specify <code>segmentCount</code>, you must also specify <code>segmentIndex</code>.</p>"
+        },
+        "segmentIndex":{
+          "shape":"ListVectorsSegmentIndex",
+          "documentation":"<p>For a parallel <code>ListVectors</code> request, <code>segmentIndex</code> is the index of the segment from which to list vectors in the current request. It identifies an individual segment to be listed by an application worker. </p> <p>Segment IDs are zero-based, so the first segment is always 0. For example, if you want to use four application threads to list vectors in a vector index, then the first thread specifies a <code>segmentIndex</code> value of 0, the second thread specifies 1, and so on. </p> <p>The value of <code>segmentIndex</code> must be less than the value provided for <code>segmentCount</code>. </p> <p>If you provide <code>segmentIndex</code>, you must also provide <code>segmentCount</code>.</p>"
+        },
+        "returnData":{
+          "shape":"Boolean",
+          "documentation":"<p>If true, the vector data of each vector will be included in the response. The default value is <code>false</code>.</p>"
+        },
+        "returnMetadata":{
+          "shape":"Boolean",
+          "documentation":"<p>If true, the metadata associated with each vector will be included in the response. The default value is <code>false</code>.</p>"
+        }
+      }
+    },
+    "ListVectorsMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "ListVectorsNextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "ListVectorsOutput":{
+      "type":"structure",
+      "required":["vectors"],
+      "members":{
+        "nextToken":{
+          "shape":"ListVectorsNextToken",
+          "documentation":"<p>Pagination token to be used in the subsequent request. The field is empty if no further pagination is required.</p>"
+        },
+        "vectors":{
+          "shape":"ListVectorsOutputList",
+          "documentation":"<p>Vectors in the current segment.</p>"
+        }
+      }
+    },
+    "ListVectorsOutputList":{
+      "type":"list",
+      "member":{"shape":"ListOutputVector"}
+    },
+    "ListVectorsSegmentCount":{
+      "type":"integer",
+      "box":true,
+      "max":16,
+      "min":1
+    },
+    "ListVectorsSegmentIndex":{
+      "type":"integer",
+      "box":true,
+      "max":15,
+      "min":0
+    },
+    "MetadataConfiguration":{
+      "type":"structure",
+      "required":["nonFilterableMetadataKeys"],
+      "members":{
+        "nonFilterableMetadataKeys":{
+          "shape":"NonFilterableMetadataKeys",
+          "documentation":"<p>Non-filterable metadata keys allow you to enrich vectors with additional context during storage and retrieval. Unlike default metadata keys, these keys can’t be used as query filters. Non-filterable metadata keys can be retrieved but can’t be searched, queried, or filtered. You can access non-filterable metadata keys of your vectors after finding the vectors. For more information about non-filterable metadata keys, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-vectors.html\">Vectors</a> and <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-limitations.html\">Limitations and restrictions</a> in the <i>Amazon S3 User Guide</i>. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The metadata configuration for a vector index.</p></p>"
+    },
+    "MetadataKey":{
+      "type":"string",
+      "max":63,
+      "min":1
+    },
+    "NonFilterableMetadataKeys":{
+      "type":"list",
+      "member":{"shape":"MetadataKey"},
+      "max":10,
+      "min":1
+    },
+    "NotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request was rejected because the specified resource can't be found.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "PutInputVector":{
+      "type":"structure",
+      "required":[
+        "key",
+        "data"
+      ],
+      "members":{
+        "key":{
+          "shape":"VectorKey",
+          "documentation":"<p>The name of the vector. The key uniquely identifies the vector in a vector index. </p>"
+        },
+        "data":{
+          "shape":"VectorData",
+          "documentation":"<p>The vector data of the vector. </p> <p>Vector dimensions must match the dimension count that's configured for the vector index.</p> <ul> <li> <p>For the <code>cosine</code> distance metric, zero vectors (vectors containing all zeros) aren't allowed.</p> </li> <li> <p>For both <code>cosine</code> and <code>euclidean</code> distance metrics, vector data must contain only valid floating-point values. Invalid values such as NaN (Not a Number) or Infinity aren't allowed.</p> </li> </ul>"
+        },
+        "metadata":{
+          "shape":"VectorMetadata",
+          "documentation":"<p>Metadata about the vector. All metadata entries undergo validation to ensure they meet the format requirements for size and data types.</p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector to add to a vector index.</p></p>"
+    },
+    "PutVectorBucketPolicyInput":{
+      "type":"structure",
+      "required":["policy"],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket.</p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector bucket.</p>"
+        },
+        "policy":{
+          "shape":"VectorBucketPolicy",
+          "documentation":"<p>The <code>JSON</code> that defines the policy. For more information about bucket policies for S3 Vectors, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-bucket-policy.html\">Managing vector bucket policies</a> in the <i>Amazon S3 User Guide</i>.</p>"
+        }
+      }
+    },
+    "PutVectorBucketPolicyOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "PutVectorsInput":{
+      "type":"structure",
+      "required":["vectors"],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index where you want to write vectors. </p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index where you want to write vectors.</p>"
+        },
+        "vectors":{
+          "shape":"PutVectorsInputList",
+          "documentation":"<p>The vectors to add to a vector index. The number of vectors in a single request must not exceed the resource capacity, otherwise the request will be rejected with the error <code>ServiceUnavailableException</code> with the error message \"Currently unable to handle the request\".</p>"
+        }
+      }
+    },
+    "PutVectorsInputList":{
+      "type":"list",
+      "member":{"shape":"PutInputVector"},
+      "max":500,
+      "min":1
+    },
+    "PutVectorsOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "QueryOutputVector":{
+      "type":"structure",
+      "required":["key"],
+      "members":{
+        "key":{
+          "shape":"VectorKey",
+          "documentation":"<p>The key of the vector in the approximate nearest neighbor search.</p>"
+        },
+        "data":{
+          "shape":"VectorData",
+          "documentation":"<p>The vector data associated with the vector, if requested. </p>"
+        },
+        "metadata":{
+          "shape":"VectorMetadata",
+          "documentation":"<p>The metadata associated with the vector, if requested.</p>"
+        },
+        "distance":{
+          "shape":"Float",
+          "documentation":"<p>The measure of similarity between the vector in the response and the query vector.</p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector in the approximate nearest neighbor search.</p></p>"
+    },
+    "QueryVectorsInput":{
+      "type":"structure",
+      "required":[
+        "topK",
+        "queryVector"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket that contains the vector index. </p>"
+        },
+        "indexName":{
+          "shape":"IndexName",
+          "documentation":"<p>The name of the vector index that you want to query. </p>"
+        },
+        "indexArn":{
+          "shape":"IndexArn",
+          "documentation":"<p>The ARN of the vector index that you want to query.</p>"
+        },
+        "topK":{
+          "shape":"TopK",
+          "documentation":"<p>The number of results to return for each query.</p>"
+        },
+        "queryVector":{
+          "shape":"VectorData",
+          "documentation":"<p>The query vector. Ensure that the query vector has the same dimension as the dimension of the vector index that's being queried. For example, if your vector index contains vectors with 384 dimensions, your query vector must also have 384 dimensions. </p>"
+        },
+        "filter":{
+          "shape":"Document",
+          "documentation":"<p>Metadata filter to apply during the query. For more information about metadata keys, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-metadata-filtering.html\">Metadata filtering</a> in the <i>Amazon S3 User Guide</i>. </p>"
+        },
+        "returnMetadata":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to include metadata in the response. The default value is <code>false</code>.</p>"
+        },
+        "returnDistance":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to include the computed distance in the response. The default value is <code>false</code>.</p>"
+        }
+      }
+    },
+    "QueryVectorsOutput":{
+      "type":"structure",
+      "required":[
+        "vectors",
+        "distanceMetric"
+      ],
+      "members":{
+        "vectors":{
+          "shape":"QueryVectorsOutputList",
+          "documentation":"<p>The vectors in the approximate nearest neighbor search.</p>"
+        },
+        "distanceMetric":{
+          "shape":"DistanceMetric",
+          "documentation":"<p>The distance metric that was used for the similarity search calculation. This is the same distance metric that was configured for the vector index when it was created.</p>"
+        }
+      }
+    },
+    "QueryVectorsOutputList":{
+      "type":"list",
+      "member":{"shape":"QueryOutputVector"}
+    },
+    "RequestTimeoutException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request timed out. Retry your request.</p>",
+      "error":{
+        "httpStatusCode":408,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":false}
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>Your request exceeds a service quota. </p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ServiceUnavailableException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The service is unavailable. Wait briefly and retry your request. If it continues to fail, increase your waiting time between retries.</p>",
+      "error":{"httpStatusCode":503},
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "SseType":{
+      "type":"string",
+      "enum":[
+        "AES256",
+        "aws:kms"
+      ]
+    },
+    "String":{"type":"string"},
+    "Timestamp":{"type":"timestamp"},
+    "TooManyRequestsException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ExceptionMessage"}
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true,
+      "retryable":{"throttling":true}
+    },
+    "TopK":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"},
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>A list of specific validation failures that are encountered during input processing. Each entry in the list contains a path to the field that failed validation and a detailed message that explains why the validation failed. To satisfy multiple constraints, a field can appear multiple times in this list if it failed. You can use the information to identify and fix the specific validation issues in your request.</p>"
+        }
+      },
+      "documentation":"<p>The requested action isn't valid.</p>",
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "path",
+        "message"
+      ],
+      "members":{
+        "path":{
+          "shape":"String",
+          "documentation":"<p>A path about the validation exception.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>A message about the validation exception.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about a validation exception.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "VectorBucket":{
+      "type":"structure",
+      "required":[
+        "vectorBucketName",
+        "vectorBucketArn",
+        "creationTime"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket. </p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector bucket. </p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Date and time when the vector bucket was created. </p>"
+        },
+        "encryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>The encryption configuration for the vector bucket.</p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The attributes of a vector bucket. </p></p>"
+    },
+    "VectorBucketArn":{"type":"string"},
+    "VectorBucketName":{
+      "type":"string",
+      "max":63,
+      "min":3
+    },
+    "VectorBucketPolicy":{"type":"string"},
+    "VectorBucketSummary":{
+      "type":"structure",
+      "required":[
+        "vectorBucketName",
+        "vectorBucketArn",
+        "creationTime"
+      ],
+      "members":{
+        "vectorBucketName":{
+          "shape":"VectorBucketName",
+          "documentation":"<p>The name of the vector bucket. </p>"
+        },
+        "vectorBucketArn":{
+          "shape":"VectorBucketArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the vector bucket. </p>"
+        },
+        "creationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>Date and time when the vector bucket was created. </p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>Summary information about a vector bucket.</p></p>"
+    },
+    "VectorData":{
+      "type":"structure",
+      "members":{
+        "float32":{
+          "shape":"Float32VectorData",
+          "documentation":"<p>The vector data as 32-bit floating point numbers. The number of elements in this array must exactly match the dimension of the vector index where the operation is being performed.</p>"
+        }
+      },
+      "documentation":"<p><note> <p>Amazon S3 Vectors is in preview release for Amazon S3 and is subject to change.</p> </note> <p>The vector data in different formats.</p></p>",
+      "union":true
+    },
+    "VectorKey":{
+      "type":"string",
+      "max":1024,
+      "min":1
+    },
+    "VectorMetadata":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    }
+  },
+  "documentation":"<p>Amazon S3 vector buckets are a bucket type to store and search vectors with sub-second search times. They are designed to provide dedicated API operations for you to interact with vectors to do similarity search. Within a vector bucket, you use a vector index to organize and logically group your vector data. When you make a write or read request, you direct it to a single vector index. You store your vector data as vectors. A vector contains a key (a name that you assign), a multi-dimensional vector, and, optionally, metadata that describes a vector. The key uniquely identifies the vector in a vector index.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/waiters-2.json 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/s3vectors/2025-07-15/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/s3vectors/2025-07-15/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -262,7 +262,7 @@
                                                 }
                                             ],
                                             "endpoint": {
-                                                "url": "https://api.sagemaker.{Region}.amazonaws.com",
+                                                "url": "https://api-fips.sagemaker.{Region}.amazonaws.com",
                                                 "properties": {},
                                                 "headers": {}
                                             },
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.json 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -467,6 +467,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "TrainingPlanSummaries"
+    },
+    "CreateHubContentPresignedUrls": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "AuthorizedUrlConfigs"
+    },
+    "ListPipelineVersions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "PipelineVersionSummaries"
+    },
+    "ListClusterEvents": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Events"
+    },
+    "ListUltraServersByReservedCapacity": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "UltraServers"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+      "Search": {
+        "non_aggregate_keys": [
+          "TotalHits"
+        ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/service-2.json 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2017-07-24",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"api.sagemaker",
     "jsonVersion":"1.1",
     "protocol":"json",
@@ -12,8 +13,7 @@
     "signatureVersion":"v4",
     "signingName":"sagemaker",
     "targetPrefix":"SageMaker",
-    "uid":"sagemaker-2017-07-24",
-    "auth":["aws.auth#sigv4"]
+    "uid":"sagemaker-2017-07-24"
   },
   "operations":{
     "AddAssociation":{
@@ -54,6 +54,33 @@
       ],
       "documentation":"<p>Associates a trial component with a trial. A trial component can be associated with multiple trials. To disassociate a trial component from a trial, call the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DisassociateTrialComponent.html\">DisassociateTrialComponent</a> API.</p>"
     },
+    "AttachClusterNodeVolume":{
+      "name":"AttachClusterNodeVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AttachClusterNodeVolumeRequest"},
+      "output":{"shape":"AttachClusterNodeVolumeResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p> Attaches your Amazon Elastic Block Store (Amazon EBS) volume to a node in your EKS orchestrated HyperPod cluster. </p> <p> This API works with the Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI) driver to manage the lifecycle of persistent storage in your HyperPod EKS clusters. </p>"
+    },
+    "BatchAddClusterNodes":{
+      "name":"BatchAddClusterNodes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"BatchAddClusterNodesRequest"},
+      "output":{"shape":"BatchAddClusterNodesResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceLimitExceeded"}
+      ],
+      "documentation":"<p>Adds nodes to a HyperPod cluster by incrementing the target count for one or more instance groups. This operation returns a unique <code>NodeLogicalId</code> for each node being added, which can be used to track the provisioning status of the node. This API provides a safer alternative to <code>UpdateCluster</code> for scaling operations by avoiding unintended configuration changes.</p> <note> <p>This API is only supported for clusters using <code>Continuous</code> as the <code>NodeProvisioningMode</code>.</p> </note>"
+    },
     "BatchDeleteClusterNodes":{
       "name":"BatchDeleteClusterNodes",
       "http":{
@@ -109,8 +136,8 @@
       "input":{"shape":"CreateAppRequest"},
       "output":{"shape":"CreateAppResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a running app for the specified UserProfile. This operation is automatically invoked by Amazon SageMaker AI upon access to the associated Domain, and when new kernel configurations are selected by the user. A user may have multiple Apps active simultaneously.</p>"
     },
@@ -177,8 +204,8 @@
       "input":{"shape":"CreateClusterRequest"},
       "output":{"shape":"CreateClusterResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a SageMaker HyperPod cluster. SageMaker HyperPod is a capability of SageMaker for creating and managing persistent clusters for developing large machine learning models, such as large language models (LLMs) and diffusion models. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod.html\">Amazon SageMaker HyperPod</a> in the <i>Amazon SageMaker Developer Guide</i>.</p>"
     },
@@ -191,8 +218,8 @@
       "input":{"shape":"CreateClusterSchedulerConfigRequest"},
       "output":{"shape":"CreateClusterSchedulerConfigResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Create cluster policy configuration. This policy is used for task prioritization and fair-share allocation of idle compute. This helps prioritize critical workloads and distributes idle compute across entities.</p>"
     },
@@ -229,8 +256,8 @@
       "input":{"shape":"CreateComputeQuotaRequest"},
       "output":{"shape":"CreateComputeQuotaResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Create compute allocation definition. This defines how compute is allocated, shared, and borrowed for specified entities. Specifically, how to lend and borrow idle compute and assign a fair-share weight to the specified entities.</p>"
     },
@@ -256,8 +283,8 @@
       "input":{"shape":"CreateDataQualityJobDefinitionRequest"},
       "output":{"shape":"CreateDataQualityJobDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a definition for a job that monitors data quality and drift. For information about model monitor, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html\">Amazon SageMaker AI Model Monitor</a>.</p>"
     },
@@ -283,8 +310,8 @@
       "input":{"shape":"CreateDomainRequest"},
       "output":{"shape":"CreateDomainResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a <code>Domain</code>. A domain consists of an associated Amazon Elastic File System volume, a list of authorized users, and a variety of security, application, policy, and Amazon Virtual Private Cloud (VPC) configurations. Users within a domain can share notebook files and other artifacts with each other.</p> <p> <b>EFS storage</b> </p> <p>When a domain is created, an EFS volume is created for use by all of the users within the domain. Each user receives a private home directory within the EFS volume for notebooks, Git repositories, and data files.</p> <p>SageMaker AI uses the Amazon Web Services Key Management Service (Amazon Web Services KMS) to encrypt the EFS volume attached to the domain with an Amazon Web Services managed key by default. For more control, you can specify a customer managed key. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/encryption-at-rest.html\">Protect Data at Rest Using Encryption</a>.</p> <p> <b>VPC configuration</b> </p> <p>All traffic between the domain and the Amazon EFS volume is through the specified VPC and subnets. For other traffic, you can specify the <code>AppNetworkAccessType</code> parameter. <code>AppNetworkAccessType</code> corresponds to the network access type that you choose when you onboard to the domain. The following options are available:</p> <ul> <li> <p> <code>PublicInternetOnly</code> - Non-EFS traffic goes through a VPC managed by Amazon SageMaker AI, which allows internet access. This is the default value.</p> </li> <li> <p> <code>VpcOnly</code> - All traffic is through the specified VPC and subnets. Internet access is disabled by default. To allow internet access, you must specify a NAT gateway.</p> <p>When internet access is disabled, you won't be able to run a Amazon SageMaker AI Studio notebook or to train or host models unless your VPC has an interface endpoint to the SageMaker AI API and runtime or a NAT gateway and your security groups allow outbound connections.</p> </li> </ul> <important> <p>NFS traffic over TCP on port 2049 needs to be allowed in both inbound and outbound rules in order to launch a Amazon SageMaker AI Studio app successfully.</p> </important> <p>For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html\">Connect Amazon SageMaker AI Studio Notebooks to Resources in a VPC</a>.</p>"
     },
@@ -387,8 +414,8 @@
       "input":{"shape":"CreateFlowDefinitionRequest"},
       "output":{"shape":"CreateFlowDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a flow definition.</p>"
     },
@@ -406,6 +433,16 @@
       ],
       "documentation":"<p>Create a hub.</p>"
     },
+    "CreateHubContentPresignedUrls":{
+      "name":"CreateHubContentPresignedUrls",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateHubContentPresignedUrlsRequest"},
+      "output":{"shape":"CreateHubContentPresignedUrlsResponse"},
+      "documentation":"<p>Creates presigned URLs for accessing hub content artifacts. This operation generates time-limited, secure URLs that allow direct download of model artifacts and associated files from Amazon SageMaker hub content, including gated models that require end-user license agreement acceptance.</p>"
+    },
     "CreateHubContentReference":{
       "name":"CreateHubContentReference",
       "http":{
@@ -430,8 +467,8 @@
       "input":{"shape":"CreateHumanTaskUiRequest"},
       "output":{"shape":"CreateHumanTaskUiResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Defines the settings you will use for the human review workflow user interface. Reviewers will see a three-panel interface with an instruction area, the item to review, and an input area.</p>"
     },
@@ -447,7 +484,7 @@
         {"shape":"ResourceInUse"},
         {"shape":"ResourceLimitExceeded"}
       ],
-      "documentation":"<p>Starts a hyperparameter tuning job. A hyperparameter tuning job finds the best version of a model by running many training jobs on your dataset using the algorithm you choose and values for hyperparameters within ranges that you specify. It then chooses the hyperparameter values that result in a model that performs the best, as measured by an objective metric that you choose.</p> <p>A hyperparameter tuning job automatically creates Amazon SageMaker experiments, trials, and trial components for each training job that it runs. You can view these entities in Amazon SageMaker Studio. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/experiments-view-compare.html#experiments-view\">View Experiments, Trials, and Trial Components</a>.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets or tokens in any hyperparameter field. If the use of security-sensitive credentials are detected, SageMaker will reject your training job request and return an exception error.</p> </important>"
+      "documentation":"<p>Starts a hyperparameter tuning job. A hyperparameter tuning job finds the best version of a model by running many training jobs on your dataset using the algorithm you choose and values for hyperparameters within ranges that you specify. It then chooses the hyperparameter values that result in a model that performs the best, as measured by an objective metric that you choose.</p> <p>A hyperparameter tuning job automatically creates Amazon SageMaker experiments, trials, and trial components for each training job that it runs. You can view these entities in Amazon SageMaker Studio. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/experiments-view-compare.html#experiments-view\">View Experiments, Trials, and Trial Components</a>.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any hyperparameter fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by any security-sensitive information included in the request hyperparameter variable or plain text fields..</p> </important>"
     },
     "CreateImage":{
       "name":"CreateImage",
@@ -472,9 +509,9 @@
       "input":{"shape":"CreateImageVersionRequest"},
       "output":{"shape":"CreateImageVersionResponse"},
       "errors":[
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a version of the SageMaker AI image specified by <code>ImageName</code>. The version represents the Amazon ECR container image specified by <code>BaseImage</code>.</p>"
     },
@@ -568,8 +605,8 @@
       "input":{"shape":"CreateModelBiasJobDefinitionRequest"},
       "output":{"shape":"CreateModelBiasJobDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates the definition for a model bias job.</p>"
     },
@@ -582,8 +619,8 @@
       "input":{"shape":"CreateModelCardRequest"},
       "output":{"shape":"CreateModelCardResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates an Amazon SageMaker Model Card.</p> <p>For information about how to use model cards, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html\">Amazon SageMaker Model Card</a>.</p>"
     },
@@ -596,9 +633,9 @@
       "input":{"shape":"CreateModelCardExportJobRequest"},
       "output":{"shape":"CreateModelCardExportJobResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates an Amazon SageMaker Model Card export job.</p>"
     },
@@ -611,8 +648,8 @@
       "input":{"shape":"CreateModelExplainabilityJobDefinitionRequest"},
       "output":{"shape":"CreateModelExplainabilityJobDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates the definition for a model explainability job.</p>"
     },
@@ -652,8 +689,8 @@
       "input":{"shape":"CreateModelQualityJobDefinitionRequest"},
       "output":{"shape":"CreateModelQualityJobDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a definition for a job that monitors model quality and drift. For information about model monitor, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html\">Amazon SageMaker AI Model Monitor</a>.</p>"
     },
@@ -666,8 +703,8 @@
       "input":{"shape":"CreateMonitoringScheduleRequest"},
       "output":{"shape":"CreateMonitoringScheduleResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a schedule that regularly starts Amazon SageMaker AI Processing Jobs to monitor the data captured for an Amazon SageMaker AI Endpoint.</p>"
     },
@@ -720,8 +757,8 @@
       "input":{"shape":"CreatePartnerAppRequest"},
       "output":{"shape":"CreatePartnerAppResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates an Amazon SageMaker Partner AI App.</p>"
     },
@@ -747,9 +784,9 @@
       "input":{"shape":"CreatePipelineRequest"},
       "output":{"shape":"CreatePipelineResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a pipeline using a JSON pipeline definition.</p>"
     },
@@ -798,9 +835,9 @@
       "input":{"shape":"CreateProcessingJobRequest"},
       "output":{"shape":"CreateProcessingJobResponse"},
       "errors":[
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a processing job.</p>"
     },
@@ -826,8 +863,8 @@
       "input":{"shape":"CreateSpaceRequest"},
       "output":{"shape":"CreateSpaceResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a private space or a space used for real time collaboration in a domain.</p>"
     },
@@ -853,11 +890,11 @@
       "input":{"shape":"CreateTrainingJobRequest"},
       "output":{"shape":"CreateTrainingJobResponse"},
       "errors":[
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
-      "documentation":"<p>Starts a model training job. After training completes, SageMaker saves the resulting model artifacts to an Amazon S3 location that you specify. </p> <p>If you choose to host your model using SageMaker hosting services, you can use the resulting model artifacts as part of the model. You can also use the artifacts in a machine learning service other than SageMaker, provided that you know how to use them for inference. </p> <p>In the request body, you provide the following: </p> <ul> <li> <p> <code>AlgorithmSpecification</code> - Identifies the training algorithm to use. </p> </li> <li> <p> <code>HyperParameters</code> - Specify these algorithm-specific parameters to enable the estimation of model parameters during training. Hyperparameters can be tuned to optimize this learning process. For a list of hyperparameters for each training algorithm provided by SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html\">Algorithms</a>. </p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets or tokens in any hyperparameter field. If the use of security-sensitive credentials are detected, SageMaker will reject your training job request and return an exception error.</p> </important> </li> <li> <p> <code>InputDataConfig</code> - Describes the input required by the training job and the Amazon S3, EFS, or FSx location where it is stored.</p> </li> <li> <p> <code>OutputDataConfig</code> - Identifies the Amazon S3 bucket where you want SageMaker to save the results of model training. </p> </li> <li> <p> <code>ResourceConfig</code> - Identifies the resources, ML compute instances, and ML storage volumes to deploy for model training. In distributed training, you specify more than one instance. </p> </li> <li> <p> <code>EnableManagedSpotTraining</code> - Optimize the cost of training machine learning models by up to 80% by using Amazon EC2 Spot instances. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html\">Managed Spot Training</a>. </p> </li> <li> <p> <code>RoleArn</code> - The Amazon Resource Name (ARN) that SageMaker assumes to perform tasks on your behalf during model training. You must grant this role the necessary permissions so that SageMaker can successfully complete model training. </p> </li> <li> <p> <code>StoppingCondition</code> - To help cap training costs, use <code>MaxRuntimeInSeconds</code> to set a time limit for training. Use <code>MaxWaitTimeInSeconds</code> to specify how long a managed spot training job has to complete. </p> </li> <li> <p> <code>Environment</code> - The environment variables to set in the Docker container.</p> </li> <li> <p> <code>RetryStrategy</code> - The number of times to retry the job when the job fails due to an <code>InternalServerError</code>.</p> </li> </ul> <p> For more information about SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works.html\">How It Works</a>. </p>"
+      "documentation":"<p>Starts a model training job. After training completes, SageMaker saves the resulting model artifacts to an Amazon S3 location that you specify. </p> <p>If you choose to host your model using SageMaker hosting services, you can use the resulting model artifacts as part of the model. You can also use the artifacts in a machine learning service other than SageMaker, provided that you know how to use them for inference. </p> <p>In the request body, you provide the following: </p> <ul> <li> <p> <code>AlgorithmSpecification</code> - Identifies the training algorithm to use. </p> </li> <li> <p> <code>HyperParameters</code> - Specify these algorithm-specific parameters to enable the estimation of model parameters during training. Hyperparameters can be tuned to optimize this learning process. For a list of hyperparameters for each training algorithm provided by SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html\">Algorithms</a>. </p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any hyperparameter fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request hyperparameter variable or plain text fields.</p> </important> </li> <li> <p> <code>InputDataConfig</code> - Describes the input required by the training job and the Amazon S3, EFS, or FSx location where it is stored.</p> </li> <li> <p> <code>OutputDataConfig</code> - Identifies the Amazon S3 bucket where you want SageMaker to save the results of model training. </p> </li> <li> <p> <code>ResourceConfig</code> - Identifies the resources, ML compute instances, and ML storage volumes to deploy for model training. In distributed training, you specify more than one instance. </p> </li> <li> <p> <code>EnableManagedSpotTraining</code> - Optimize the cost of training machine learning models by up to 80% by using Amazon EC2 Spot instances. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html\">Managed Spot Training</a>. </p> </li> <li> <p> <code>RoleArn</code> - The Amazon Resource Name (ARN) that SageMaker assumes to perform tasks on your behalf during model training. You must grant this role the necessary permissions so that SageMaker can successfully complete model training. </p> </li> <li> <p> <code>StoppingCondition</code> - To help cap training costs, use <code>MaxRuntimeInSeconds</code> to set a time limit for training. Use <code>MaxWaitTimeInSeconds</code> to specify how long a managed spot training job has to complete. </p> </li> <li> <p> <code>Environment</code> - The environment variables to set in the Docker container.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any environment fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request environment variable or plain text fields.</p> </important> </li> <li> <p> <code>RetryStrategy</code> - The number of times to retry the job when the job fails due to an <code>InternalServerError</code>.</p> </li> </ul> <p> For more information about SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works.html\">How It Works</a>. </p>"
     },
     "CreateTrainingPlan":{
       "name":"CreateTrainingPlan",
@@ -868,9 +905,9 @@
       "input":{"shape":"CreateTrainingPlanRequest"},
       "output":{"shape":"CreateTrainingPlanResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a new training plan in SageMaker to reserve compute capacity.</p> <p>Amazon SageMaker Training Plan is a capability within SageMaker that allows customers to reserve and manage GPU capacity for large-scale AI model training. It provides a way to secure predictable access to computational resources within specific timelines and budgets, without the need to manage underlying infrastructure. </p> <p> <b>How it works</b> </p> <p>Plans can be created for specific resources such as SageMaker Training Jobs or SageMaker HyperPod clusters, automatically provisioning resources, setting up infrastructure, executing workloads, and handling infrastructure failures.</p> <p> <b>Plan creation workflow</b> </p> <ul> <li> <p>Users search for available plan offerings based on their requirements (e.g., instance type, count, start time, duration) using the <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_SearchTrainingPlanOfferings.html\">SearchTrainingPlanOfferings</a> </code> API operation.</p> </li> <li> <p>They create a plan that best matches their needs using the ID of the plan offering they want to use. </p> </li> <li> <p>After successful upfront payment, the plan's status becomes <code>Scheduled</code>. </p> </li> <li> <p>The plan can be used to:</p> <ul> <li> <p>Queue training jobs.</p> </li> <li> <p>Allocate to an instance group of a SageMaker HyperPod cluster. </p> </li> </ul> </li> <li> <p>When the plan start date arrives, it becomes <code>Active</code>. Based on available reserved capacity:</p> <ul> <li> <p>Training jobs are launched.</p> </li> <li> <p>Instance groups are provisioned.</p> </li> </ul> </li> </ul> <p> <b>Plan composition</b> </p> <p>A plan can consist of one or more Reserved Capacities, each defined by a specific instance type, quantity, Availability Zone, duration, and start and end times. For more information about Reserved Capacity, see <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ReservedCapacitySummary.html\">ReservedCapacitySummary</a> </code>.</p>"
     },
@@ -883,11 +920,11 @@
       "input":{"shape":"CreateTransformJobRequest"},
       "output":{"shape":"CreateTransformJobResponse"},
       "errors":[
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
-      "documentation":"<p>Starts a transform job. A transform job uses a trained model to get inferences on a dataset and saves these results to an Amazon S3 location that you specify.</p> <p>To perform batch transformations, you create a transform job and use the data that you have readily available.</p> <p>In the request body, you provide the following:</p> <ul> <li> <p> <code>TransformJobName</code> - Identifies the transform job. The name must be unique within an Amazon Web Services Region in an Amazon Web Services account.</p> </li> <li> <p> <code>ModelName</code> - Identifies the model to use. <code>ModelName</code> must be the name of an existing Amazon SageMaker model in the same Amazon Web Services Region and Amazon Web Services account. For information on creating a model, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html\">CreateModel</a>.</p> </li> <li> <p> <code>TransformInput</code> - Describes the dataset to be transformed and the Amazon S3 location where it is stored.</p> </li> <li> <p> <code>TransformOutput</code> - Identifies the Amazon S3 location where you want Amazon SageMaker to save the results from the transform job.</p> </li> <li> <p> <code>TransformResources</code> - Identifies the ML compute instances for the transform job.</p> </li> </ul> <p>For more information about how batch transformation works, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html\">Batch Transform</a>.</p>"
+      "documentation":"<p>Starts a transform job. A transform job uses a trained model to get inferences on a dataset and saves these results to an Amazon S3 location that you specify.</p> <p>To perform batch transformations, you create a transform job and use the data that you have readily available.</p> <p>In the request body, you provide the following:</p> <ul> <li> <p> <code>TransformJobName</code> - Identifies the transform job. The name must be unique within an Amazon Web Services Region in an Amazon Web Services account.</p> </li> <li> <p> <code>ModelName</code> - Identifies the model to use. <code>ModelName</code> must be the name of an existing Amazon SageMaker model in the same Amazon Web Services Region and Amazon Web Services account. For information on creating a model, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html\">CreateModel</a>.</p> </li> <li> <p> <code>TransformInput</code> - Describes the dataset to be transformed and the Amazon S3 location where it is stored.</p> </li> <li> <p> <code>TransformOutput</code> - Identifies the Amazon S3 location where you want Amazon SageMaker to save the results from the transform job.</p> </li> <li> <p> <code>TransformResources</code> - Identifies the ML compute instances and AMI image versions for the transform job.</p> </li> </ul> <p>For more information about how batch transformation works, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html\">Batch Transform</a>.</p>"
     },
     "CreateTrial":{
       "name":"CreateTrial",
@@ -925,8 +962,8 @@
       "input":{"shape":"CreateUserProfileRequest"},
       "output":{"shape":"CreateUserProfileResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceInUse"}
+        {"shape":"ResourceInUse"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Creates a user profile. A user profile represents a single user within a domain, and is the main way to reference a \"person\" for the purposes of sharing, reporting, and other user-oriented features. This entity is created when a user onboards to a domain. If an administrator invites a person by email or imports them from IAM Identity Center, a user profile is automatically created. A user profile is the primary holder of settings for an individual user and has a reference to the user's private Amazon Elastic File System home directory. </p>"
     },
@@ -987,8 +1024,8 @@
       },
       "input":{"shape":"DeleteAppRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Used to stop and delete an app.</p>"
     },
@@ -1039,8 +1076,8 @@
       "input":{"shape":"DeleteClusterRequest"},
       "output":{"shape":"DeleteClusterResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Delete a SageMaker HyperPod cluster.</p>"
     },
@@ -1134,8 +1171,8 @@
       },
       "input":{"shape":"DeleteDomainRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Used to delete a domain. If you onboarded with IAM mode, you will need to delete your domain to onboard again using IAM Identity Center. Use with caution. All of the members of the domain will lose access to their EFS volume, including data, notebooks, and other artifacts. </p>"
     },
@@ -1215,8 +1252,8 @@
       "input":{"shape":"DeleteFlowDefinitionRequest"},
       "output":{"shape":"DeleteFlowDefinitionResponse"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Deletes the specified flow definition.</p>"
     },
@@ -1228,8 +1265,8 @@
       },
       "input":{"shape":"DeleteHubRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Delete a hub.</p>"
     },
@@ -1241,8 +1278,8 @@
       },
       "input":{"shape":"DeleteHubContentRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Delete the contents of a hub.</p>"
     },
@@ -1289,8 +1326,8 @@
       "input":{"shape":"DeleteImageRequest"},
       "output":{"shape":"DeleteImageResponse"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Deletes a SageMaker AI image and all versions of the image. The container images aren't deleted.</p>"
     },
@@ -1303,8 +1340,8 @@
       "input":{"shape":"DeleteImageVersionRequest"},
       "output":{"shape":"DeleteImageVersionResponse"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Deletes a version of a SageMaker AI image. The container image the version represents isn't deleted.</p>"
     },
@@ -1373,8 +1410,8 @@
       },
       "input":{"shape":"DeleteModelCardRequest"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Deletes an Amazon SageMaker Model Card.</p>"
     },
@@ -1486,8 +1523,8 @@
       "input":{"shape":"DeletePartnerAppRequest"},
       "output":{"shape":"DeletePartnerAppResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Deletes a SageMaker Partner AI App.</p>"
     },
@@ -1500,11 +1537,24 @@
       "input":{"shape":"DeletePipelineRequest"},
       "output":{"shape":"DeletePipelineResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Deletes a pipeline if there are no running instances of the pipeline. To delete a pipeline, you must stop all running instances of the pipeline using the <code>StopPipelineExecution</code> API. When you delete a pipeline, all instances of the pipeline are deleted.</p>"
     },
+    "DeleteProcessingJob":{
+      "name":"DeleteProcessingJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteProcessingJobRequest"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
+      ],
+      "documentation":"<p>Deletes a processing job. After Amazon SageMaker deletes a processing job, all of the metadata for the processing job is lost. You can delete only processing jobs that are in a terminal state (<code>Stopped</code>, <code>Failed</code>, or <code>Completed</code>). You cannot delete a job that is in the <code>InProgress</code> or <code>Stopping</code> state. After deleting the job, you can reuse its name to create another processing job.</p>"
+    },
     "DeleteProject":{
       "name":"DeleteProject",
       "http":{
@@ -1525,8 +1575,8 @@
       },
       "input":{"shape":"DeleteSpaceRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Used to delete a space.</p>"
     },
@@ -1553,6 +1603,19 @@
       "output":{"shape":"DeleteTagsOutput"},
       "documentation":"<p>Deletes the specified tags from an SageMaker resource.</p> <p>To list a resource's tags, use the <code>ListTags</code> API. </p> <note> <p>When you call this API to delete tags from a hyperparameter tuning job, the deleted tags are not removed from training jobs that the hyperparameter tuning job launched before you called this API.</p> </note> <note> <p>When you call this API to delete tags from a SageMaker Domain or User Profile, the deleted tags are not removed from Apps that the SageMaker Domain or User Profile launched before you called this API.</p> </note>"
     },
+    "DeleteTrainingJob":{
+      "name":"DeleteTrainingJob",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteTrainingJobRequest"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
+      ],
+      "documentation":"<p>Deletes a training job. After SageMaker deletes a training job, all of the metadata for the training job is lost. You can delete only training jobs that are in a terminal state (<code>Stopped</code>, <code>Failed</code>, or <code>Completed</code>) and don't retain an <code>Available</code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/train-warm-pools.html\">managed warm pool</a>. You cannot delete a job that is in the <code>InProgress</code> or <code>Stopping</code> state. After deleting the job, you can reuse its name to create another training job.</p>"
+    },
     "DeleteTrial":{
       "name":"DeleteTrial",
       "http":{
@@ -1587,8 +1650,8 @@
       },
       "input":{"shape":"DeleteUserProfileRequest"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Deletes a user profile. When a user profile is deleted, the user loses access to their EFS volume, including data, notebooks, and other artifacts.</p>"
     },
@@ -1725,6 +1788,19 @@
       ],
       "documentation":"<p>Retrieves information of a SageMaker HyperPod cluster.</p>"
     },
+    "DescribeClusterEvent":{
+      "name":"DescribeClusterEvent",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeClusterEventRequest"},
+      "output":{"shape":"DescribeClusterEventResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific event for a given HyperPod cluster. This functionality is only supported when the <code>NodeProvisioningMode</code> is set to <code>Continuous</code>.</p>"
+    },
     "DescribeClusterNode":{
       "name":"DescribeClusterNode",
       "http":{
@@ -2319,6 +2395,19 @@
       "output":{"shape":"DescribeProjectOutput"},
       "documentation":"<p>Describes the details of a project.</p>"
     },
+    "DescribeReservedCapacity":{
+      "name":"DescribeReservedCapacity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeReservedCapacityRequest"},
+      "output":{"shape":"DescribeReservedCapacityResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Retrieves details about a reserved capacity.</p>"
+    },
     "DescribeSpace":{
       "name":"DescribeSpace",
       "http":{
@@ -2454,6 +2543,19 @@
       "output":{"shape":"DescribeWorkteamResponse"},
       "documentation":"<p>Gets information about a specific work team. You can see information such as the creation date, the last updated date, membership information, and the work team's Amazon Resource Name (ARN).</p>"
     },
+    "DetachClusterNodeVolume":{
+      "name":"DetachClusterNodeVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DetachClusterNodeVolumeRequest"},
+      "output":{"shape":"DetachClusterNodeVolumeResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p> Detaches your Amazon Elastic Block Store (Amazon EBS) volume from a node in your EKS orchestrated SageMaker HyperPod cluster.</p> <p> This API works with the Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI) driver to manage the lifecycle of persistent storage in your HyperPod EKS clusters. </p>"
+    },
     "DisableSagemakerServicecatalogPortfolio":{
       "name":"DisableSagemakerServicecatalogPortfolio",
       "http":{
@@ -2562,9 +2664,9 @@
       "input":{"shape":"ImportHubContentRequest"},
       "output":{"shape":"ImportHubContentResponse"},
       "errors":[
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Import hub content.</p>"
     },
@@ -2673,6 +2775,19 @@
       ],
       "documentation":"<p>List the candidates created for the job.</p>"
     },
+    "ListClusterEvents":{
+      "name":"ListClusterEvents",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListClusterEventsRequest"},
+      "output":{"shape":"ListClusterEventsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Retrieves a list of event summaries for a specified HyperPod cluster. The operation supports filtering, sorting, and pagination of results. This functionality is only supported when the <code>NodeProvisioningMode</code> is set to <code>Continuous</code>.</p>"
+    },
     "ListClusterNodes":{
       "name":"ListClusterNodes",
       "http":{
@@ -3252,6 +3367,19 @@
       ],
       "documentation":"<p>Gets a list of parameters for a pipeline execution.</p>"
     },
+    "ListPipelineVersions":{
+      "name":"ListPipelineVersions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListPipelineVersionsRequest"},
+      "output":{"shape":"ListPipelineVersionsResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Gets a list of all versions of the pipeline.</p>"
+    },
     "ListPipelines":{
       "name":"ListPipelines",
       "http":{
@@ -3414,6 +3542,19 @@
       ],
       "documentation":"<p>Lists the trials in your account. Specify an experiment name to limit the list to the trials that are part of that experiment. Specify a trial component name to limit the list to the trials that associated with that trial component. The list can be filtered to show only trials that were created in a specific time range. The list can be sorted by trial name or creation time.</p>"
     },
+    "ListUltraServersByReservedCapacity":{
+      "name":"ListUltraServersByReservedCapacity",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListUltraServersByReservedCapacityRequest"},
+      "output":{"shape":"ListUltraServersByReservedCapacityResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Lists all UltraServers that are part of a specified reserved capacity.</p>"
+    },
     "ListUserProfiles":{
       "name":"ListUserProfiles",
       "http":{
@@ -3504,9 +3645,9 @@
       "input":{"shape":"RetryPipelineExecutionRequest"},
       "output":{"shape":"RetryPipelineExecutionResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Retry the execution of the pipeline.</p>"
     },
@@ -3542,9 +3683,9 @@
       "input":{"shape":"SendPipelineExecutionStepFailureRequest"},
       "output":{"shape":"SendPipelineExecutionStepFailureResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Notifies the pipeline that the execution of a callback step failed, along with a message describing why. When a callback step is run, the pipeline generates a callback token and includes the token in a message sent to Amazon Simple Queue Service (Amazon SQS).</p>"
     },
@@ -3557,9 +3698,9 @@
       "input":{"shape":"SendPipelineExecutionStepSuccessRequest"},
       "output":{"shape":"SendPipelineExecutionStepSuccessResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Notifies the pipeline that the execution of a callback step succeeded and provides a list of the step's output parameters. When a callback step is run, the pipeline generates a callback token and includes the token in a message sent to Amazon Simple Queue Service (Amazon SQS).</p>"
     },
@@ -3595,8 +3736,8 @@
       "input":{"shape":"StartMlflowTrackingServerRequest"},
       "output":{"shape":"StartMlflowTrackingServerResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Programmatically start an MLflow Tracking Server.</p>"
     },
@@ -3633,12 +3774,26 @@
       "input":{"shape":"StartPipelineExecutionRequest"},
       "output":{"shape":"StartPipelineExecutionResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Starts a pipeline execution.</p>"
     },
+    "StartSession":{
+      "name":"StartSession",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartSessionRequest"},
+      "output":{"shape":"StartSessionResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceLimitExceeded"}
+      ],
+      "documentation":"<p>Initiates a remote connection session between a local integrated development environments (IDEs) and a remote SageMaker space.</p>"
+    },
     "StopAutoMLJob":{
       "name":"StopAutoMLJob",
       "http":{
@@ -3740,8 +3895,8 @@
       "input":{"shape":"StopMlflowTrackingServerRequest"},
       "output":{"shape":"StopMlflowTrackingServerResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Programmatically stop an MLflow Tracking Server.</p>"
     },
@@ -3787,8 +3942,8 @@
       "input":{"shape":"StopPipelineExecutionRequest"},
       "output":{"shape":"StopPipelineExecutionResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Stops a pipeline execution.</p> <p> <b>Callback Step</b> </p> <p>A pipeline execution won't stop while a callback step is running. When you call <code>StopPipelineExecution</code> on a pipeline execution with a running callback step, SageMaker Pipelines sends an additional Amazon SQS message to the specified SQS queue. The body of the SQS message contains a \"Status\" field which is set to \"Stopping\".</p> <p>You should add logic to your Amazon SQS message consumer to take any needed action (for example, resource cleanup) upon receipt of the message followed by a call to <code>SendPipelineExecutionStepSuccess</code> or <code>SendPipelineExecutionStepFailure</code>.</p> <p>Only when SageMaker Pipelines receives one of these calls will it stop the pipeline execution.</p> <p> <b>Lambda Step</b> </p> <p>A pipeline execution can't be stopped while a lambda step is running because the Lambda function invoked by the lambda step can't be stopped. If you attempt to stop the execution while the Lambda function is running, the pipeline waits for the Lambda function to finish or until the timeout is hit, whichever occurs first, and then stops. If the Lambda function finishes, the pipeline execution status is <code>Stopped</code>. If the timeout is hit the pipeline execution status is <code>Failed</code>.</p>"
     },
@@ -3878,9 +4033,9 @@
       "input":{"shape":"UpdateClusterRequest"},
       "output":{"shape":"UpdateClusterResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates a SageMaker HyperPod cluster.</p>"
     },
@@ -3893,9 +4048,9 @@
       "input":{"shape":"UpdateClusterSchedulerConfigRequest"},
       "output":{"shape":"UpdateClusterSchedulerConfigResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Update the cluster policy configuration.</p>"
     },
@@ -3908,8 +4063,8 @@
       "input":{"shape":"UpdateClusterSoftwareRequest"},
       "output":{"shape":"UpdateClusterSoftwareResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Updates the platform software of a SageMaker HyperPod cluster for security patching. To learn how to use this API, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-operate.html#sagemaker-hyperpod-operate-cli-command-update-cluster-software\">Update the SageMaker HyperPod platform software of a cluster</a>.</p> <important> <p>The <code>UpgradeClusterSoftware</code> API call may impact your SageMaker HyperPod cluster uptime and availability. Plan accordingly to mitigate potential disruptions to your workloads.</p> </important>"
     },
@@ -3935,9 +4090,9 @@
       "input":{"shape":"UpdateComputeQuotaRequest"},
       "output":{"shape":"UpdateComputeQuotaResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Update the compute allocation definition.</p>"
     },
@@ -3985,9 +4140,9 @@
       "input":{"shape":"UpdateDomainRequest"},
       "output":{"shape":"UpdateDomainResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates the default settings for new user profiles in the domain.</p>"
     },
@@ -4070,6 +4225,34 @@
       ],
       "documentation":"<p>Update a hub.</p>"
     },
+    "UpdateHubContent":{
+      "name":"UpdateHubContent",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateHubContentRequest"},
+      "output":{"shape":"UpdateHubContentResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
+      ],
+      "documentation":"<p>Updates SageMaker hub content (either a <code>Model</code> or <code>Notebook</code> resource).</p> <p>You can update the metadata that describes the resource. In addition to the required request fields, specify at least one of the following fields to update:</p> <ul> <li> <p> <code>HubContentDescription</code> </p> </li> <li> <p> <code>HubContentDisplayName</code> </p> </li> <li> <p> <code>HubContentMarkdown</code> </p> </li> <li> <p> <code>HubContentSearchKeywords</code> </p> </li> <li> <p> <code>SupportStatus</code> </p> </li> </ul> <p>For more information about hubs, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-curated-hubs.html\">Private curated hubs for foundation model access control in JumpStart</a>.</p> <note> <p>If you want to update a <code>ModelReference</code> resource in your hub, use the <code>UpdateHubContentResource</code> API instead.</p> </note>"
+    },
+    "UpdateHubContentReference":{
+      "name":"UpdateHubContentReference",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateHubContentReferenceRequest"},
+      "output":{"shape":"UpdateHubContentReferenceResponse"},
+      "errors":[
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
+      ],
+      "documentation":"<p>Updates the contents of a SageMaker hub for a <code>ModelReference</code> resource. A <code>ModelReference</code> allows you to access public SageMaker JumpStart models from within your private hub.</p> <p>When using this API, you can update the <code>MinVersion</code> field for additional flexibility in the model version. You shouldn't update any additional fields when using this API, because the metadata in your private hub should match the public JumpStart model's metadata.</p> <note> <p>If you want to update a <code>Model</code> or <code>Notebook</code> resource in your hub, use the <code>UpdateHubContent</code> API instead.</p> </note> <p>For more information about adding model references to your hub, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-curated-hubs-admin-guide-add-models.html\"> Add models to a private hub</a>.</p>"
+    },
     "UpdateImage":{
       "name":"UpdateImage",
       "http":{
@@ -4079,8 +4262,8 @@
       "input":{"shape":"UpdateImageRequest"},
       "output":{"shape":"UpdateImageResponse"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Updates the properties of a SageMaker AI image. To change the image's tags, use the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AddTags.html\">AddTags</a> and <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteTags.html\">DeleteTags</a> APIs.</p>"
     },
@@ -4093,8 +4276,8 @@
       "input":{"shape":"UpdateImageVersionRequest"},
       "output":{"shape":"UpdateImageVersionResponse"},
       "errors":[
-        {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceInUse"}
       ],
       "documentation":"<p>Updates the properties of a SageMaker AI image version.</p>"
     },
@@ -4147,9 +4330,9 @@
       "input":{"shape":"UpdateMlflowTrackingServerRequest"},
       "output":{"shape":"UpdateMlflowTrackingServerResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates properties of an existing MLflow Tracking Server.</p>"
     },
@@ -4162,9 +4345,9 @@
       "input":{"shape":"UpdateModelCardRequest"},
       "output":{"shape":"UpdateModelCardResponse"},
       "errors":[
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFound"},
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ConflictException"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Update an Amazon SageMaker Model Card.</p> <important> <p>You cannot update both model card content and model card status in a single call.</p> </important>"
     },
@@ -4190,8 +4373,8 @@
       "input":{"shape":"UpdateMonitoringAlertRequest"},
       "output":{"shape":"UpdateMonitoringAlertResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Update the parameters of a model monitor alert.</p>"
     },
@@ -4204,8 +4387,8 @@
       "input":{"shape":"UpdateMonitoringScheduleRequest"},
       "output":{"shape":"UpdateMonitoringScheduleResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceNotFound"},
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates a previously created schedule.</p>"
     },
@@ -4244,8 +4427,8 @@
       "input":{"shape":"UpdatePartnerAppRequest"},
       "output":{"shape":"UpdatePartnerAppResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Updates all of the SageMaker Partner AI Apps in an account.</p>"
     },
@@ -4258,8 +4441,8 @@
       "input":{"shape":"UpdatePipelineRequest"},
       "output":{"shape":"UpdatePipelineResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Updates a pipeline.</p>"
     },
@@ -4272,11 +4455,25 @@
       "input":{"shape":"UpdatePipelineExecutionRequest"},
       "output":{"shape":"UpdatePipelineExecutionResponse"},
       "errors":[
-        {"shape":"ResourceNotFound"},
-        {"shape":"ConflictException"}
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
       ],
       "documentation":"<p>Updates a pipeline execution.</p>"
     },
+    "UpdatePipelineVersion":{
+      "name":"UpdatePipelineVersion",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdatePipelineVersionRequest"},
+      "output":{"shape":"UpdatePipelineVersionResponse"},
+      "errors":[
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFound"}
+      ],
+      "documentation":"<p>Updates a pipeline version.</p>"
+    },
     "UpdateProject":{
       "name":"UpdateProject",
       "http":{
@@ -4299,9 +4496,9 @@
       "input":{"shape":"UpdateSpaceRequest"},
       "output":{"shape":"UpdateSpaceResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates the settings of a space.</p> <note> <p>You can't edit the app type of a space in the <code>SpaceSettings</code>.</p> </note>"
     },
@@ -4356,9 +4553,9 @@
       "input":{"shape":"UpdateUserProfileRequest"},
       "output":{"shape":"UpdateUserProfileResponse"},
       "errors":[
-        {"shape":"ResourceLimitExceeded"},
+        {"shape":"ResourceNotFound"},
         {"shape":"ResourceInUse"},
-        {"shape":"ResourceNotFound"}
+        {"shape":"ResourceLimitExceeded"}
       ],
       "documentation":"<p>Updates a user profile.</p>"
     },
@@ -4373,7 +4570,7 @@
       "errors":[
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Use this operation to update your workforce. You can use this operation to require that workers use specific IP addresses to work on tasks and to update your OpenID Connect (OIDC) Identity Provider (IdP) workforce configuration.</p> <p>The worker portal is now supported in VPC and public internet.</p> <p> Use <code>SourceIpConfig</code> to restrict worker access to tasks to a specific range of IP addresses. You specify allowed IP addresses by creating a list of up to ten <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html\">CIDRs</a>. By default, a workforce isn't restricted to specific IP addresses. If you specify a range of IP addresses, workers who attempt to access tasks using any IP address outside the specified range are denied and get a <code>Not Found</code> error message on the worker portal.</p> <p>To restrict access to all the workers in public internet, add the <code>SourceIpConfig</code> CIDR value as \"10.0.0.0/16\".</p> <important> <p>Amazon SageMaker does not support Source Ip restriction for worker portals in VPC.</p> </important> <p>Use <code>OidcConfig</code> to update the configuration of a workforce created using your own OIDC IdP. </p> <important> <p>You can only update your OIDC IdP configuration when there are no work teams associated with your workforce. You can delete work teams using the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteWorkteam.html\">DeleteWorkteam</a> operation.</p> </important> <p>After restricting access to a range of IP addresses or updating your OIDC IdP configuration with this operation, you can view details about your update workforce using the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeWorkforce.html\">DescribeWorkforce</a> operation.</p> <important> <p>This operation only applies to private workforces.</p> </important>"
+      "documentation":"<p>Use this operation to update your workforce. You can use this operation to require that workers use specific IP addresses to work on tasks and to update your OpenID Connect (OIDC) Identity Provider (IdP) workforce configuration.</p> <p>The worker portal is now supported in VPC and public internet.</p> <p> Use <code>SourceIpConfig</code> to restrict worker access to tasks to a specific range of IP addresses. You specify allowed IP addresses by creating a list of up to ten <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html\">CIDRs</a>. By default, a workforce isn't restricted to specific IP addresses. If you specify a range of IP addresses, workers who attempt to access tasks using any IP address outside the specified range are denied and get a <code>Not Found</code> error message on the worker portal.</p> <p>To restrict public internet access for all workers, configure the <code>SourceIpConfig</code> CIDR value. For example, when using <code>SourceIpConfig</code> with an <code>IpAddressType</code> of <code>IPv4</code>, you can restrict access to the IPv4 CIDR block \"10.0.0.0/16\". When using an <code>IpAddressType</code> of <code>dualstack</code>, you can specify both the IPv4 and IPv6 CIDR blocks, such as \"10.0.0.0/16\" for IPv4 only, \"2001:db8:1234:1a00::/56\" for IPv6 only, or \"10.0.0.0/16\" and \"2001:db8:1234:1a00::/56\" for dual stack.</p> <important> <p>Amazon SageMaker does not support Source Ip restriction for worker portals in VPC.</p> </important> <p>Use <code>OidcConfig</code> to update the configuration of a workforce created using your own OIDC IdP. </p> <important> <p>You can only update your OIDC IdP configuration when there are no work teams associated with your workforce. You can delete work teams using the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteWorkteam.html\">DeleteWorkteam</a> operation.</p> </important> <p>After restricting access to a range of IP addresses or updating your OIDC IdP configuration with this operation, you can view details about your update workforce using the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeWorkforce.html\">DescribeWorkforce</a> operation.</p> <important> <p>This operation only applies to private workforces.</p> </important>"
     },
     "UpdateWorkteam":{
       "name":"UpdateWorkteam",
@@ -4390,9 +4587,16 @@
     }
   },
   "shapes":{
+    "AcceleratorsAmount":{
+      "type":"integer",
+      "box":true,
+      "max":10000000,
+      "min":0
+    },
     "Accept":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "AcceptEula":{"type":"boolean"},
@@ -4400,11 +4604,12 @@
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^\\d+$"
+      "pattern":"\\d+"
     },
     "ActionArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:action/.*"
     },
     "ActionSource":{
@@ -4516,6 +4721,36 @@
         }
       }
     },
+    "AddClusterNodeSpecification":{
+      "type":"structure",
+      "required":[
+        "InstanceGroupName",
+        "IncrementTargetCountBy"
+      ],
+      "members":{
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group to which you want to add nodes.</p>"
+        },
+        "IncrementTargetCountBy":{
+          "shape":"AddClusterNodeSpecificationIncrementTargetCountByInteger",
+          "documentation":"<p>The number of nodes to add to the specified instance group. The total number of nodes across all instance groups in a single request cannot exceed 50.</p>"
+        }
+      },
+      "documentation":"<p>Specifies an instance group and the number of nodes to add to it.</p>"
+    },
+    "AddClusterNodeSpecificationIncrementTargetCountByInteger":{
+      "type":"integer",
+      "box":true,
+      "max":50,
+      "min":1
+    },
+    "AddClusterNodeSpecificationList":{
+      "type":"list",
+      "member":{"shape":"AddClusterNodeSpecification"},
+      "max":5,
+      "min":1
+    },
     "AddTagsInput":{
       "type":"structure",
       "required":[
@@ -4545,7 +4780,18 @@
     "AdditionalCodeRepositoryNamesOrUrls":{
       "type":"list",
       "member":{"shape":"CodeRepositoryNameOrUrl"},
-      "max":3
+      "max":3,
+      "min":0
+    },
+    "AdditionalEnis":{
+      "type":"structure",
+      "members":{
+        "EfaEnis":{
+          "shape":"EfaEnis",
+          "documentation":"<p>A list of Elastic Fabric Adapter (EFA) ENIs associated with the instance.</p>"
+        }
+      },
+      "documentation":"<p>Information about additional Elastic Network Interfaces (ENIs) associated with an instance.</p>"
     },
     "AdditionalInferenceSpecificationDefinition":{
       "type":"structure",
@@ -4664,7 +4910,8 @@
         },
         "AgentCount":{
           "shape":"Long",
-          "documentation":"<p>The number of Edge Manager agents.</p>"
+          "documentation":"<p>The number of Edge Manager agents.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Edge Manager agent version.</p>"
@@ -4700,6 +4947,17 @@
       },
       "documentation":"<p>An Amazon CloudWatch alarm configured to monitor metrics on an endpoint.</p>"
     },
+    "AlarmDetails":{
+      "type":"structure",
+      "required":["AlarmName"],
+      "members":{
+        "AlarmName":{
+          "shape":"AlarmName",
+          "documentation":"<p>The name of the alarm.</p>"
+        }
+      },
+      "documentation":"<p>The details of the alarm to monitor during the AMI update.</p>"
+    },
     "AlarmList":{
       "type":"list",
       "member":{"shape":"Alarm"},
@@ -4710,17 +4968,18 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^(?!\\s*$).+"
+      "pattern":"(?!\\s*$).+"
     },
     "AlgorithmArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso-f)?:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:algorithm/[\\S]{1,2048}$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:algorithm/[\\S]{1,2048}"
     },
     "AlgorithmImage":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "AlgorithmSortBy":{
@@ -4749,7 +5008,8 @@
         },
         "EnableSageMakerMetricsTimeSeries":{
           "shape":"Boolean",
-          "documentation":"<p>To generate and save time-series metrics during training, set to <code>true</code>. The default is <code>false</code> and time-series metrics aren't generated except in the following cases:</p> <ul> <li> <p>You use one of the SageMaker built-in algorithms</p> </li> <li> <p>You use one of the following <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-frameworks-deep-learning.html\">Prebuilt SageMaker Docker Images</a>:</p> <ul> <li> <p>Tensorflow (version &gt;= 1.15)</p> </li> <li> <p>MXNet (version &gt;= 1.6)</p> </li> <li> <p>PyTorch (version &gt;= 1.3)</p> </li> </ul> </li> <li> <p>You specify at least one <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MetricDefinition.html\">MetricDefinition</a> </p> </li> </ul>"
+          "documentation":"<p>To generate and save time-series metrics during training, set to <code>true</code>. The default is <code>false</code> and time-series metrics aren't generated except in the following cases:</p> <ul> <li> <p>You use one of the SageMaker built-in algorithms</p> </li> <li> <p>You use one of the following <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-frameworks-deep-learning.html\">Prebuilt SageMaker Docker Images</a>:</p> <ul> <li> <p>Tensorflow (version &gt;= 1.15)</p> </li> <li> <p>MXNet (version &gt;= 1.6)</p> </li> <li> <p>PyTorch (version &gt;= 1.3)</p> </li> </ul> </li> <li> <p>You specify at least one <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_MetricDefinition.html\">MetricDefinition</a> </p> </li> </ul>",
+          "box":true
         },
         "ContainerEntrypoint":{
           "shape":"TrainingContainerEntrypoint",
@@ -4918,7 +5178,7 @@
       "members":{
         "AnnotationConsolidationLambdaArn":{
           "shape":"LambdaFunctionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a Lambda function implements the logic for <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-annotation-consolidation.html\">annotation consolidation</a> and to process output data.</p> <p>For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a>, use one of the following Amazon SageMaker Ground Truth Lambda function ARNs for <code>AnnotationConsolidationLambdaArn</code>. For custom labeling workflows, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html#sms-custom-templates-step3-postlambda\">Post-annotation Lambda</a>.</p> <p> <b>Bounding box</b> - Finds the most similar boxes from different workers based on the Jaccard index of the boxes.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-BoundingBox</code> </p> </li> </ul> <p> <b>Image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-ImageMultiClass</code> </p> </li> </ul> <p> <b>Multi-label image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Semantic segmentation</b> - Treats each pixel in an image as a multi-class classification and treats pixel annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-SemanticSegmentation</code> </p> </li> </ul> <p> <b>Text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-TextMultiClass</code> </p> </li> </ul> <p> <b>Multi-label text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-TextMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Named entity recognition</b> - Groups similar selections and calculates aggregate boundaries, resolving to most-assigned label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-NamedEntityRecognition</code> </p> </li> </ul> <p> <b>Video Classification</b> - Use this task type when you need workers to classify videos using predefined labels that you specify. Workers are shown videos and are asked to choose one label for each video.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoMultiClass</code> </p> </li> </ul> <p> <b>Video Frame Object Detection</b> - Use this task type to have workers identify and locate objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to identify and localize various objects in a series of video frames, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking</b> - Use this task type to have workers track the movement of objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to track the movement of objects, such as cars, bikes, and pedestrians. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Detection</b> - Use this task type when you want workers to classify objects in a 3D point cloud by drawing 3D cuboids around objects. For example, you can use this task type to ask workers to identify different types of objects in a point cloud, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking</b> - Use this task type when you want workers to draw 3D cuboids around objects that appear in a sequence of 3D point cloud frames. For example, you can use this task type to ask workers to track the movement of vehicles across multiple point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation</b> - Use this task type when you want workers to create a point-level semantic segmentation masks by painting objects in a 3D point cloud using different colors where each color is assigned to one of the classes you specify.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Use the following ARNs for Label Verification and Adjustment Jobs</b> </p> <p>Use label verification and adjustment jobs to review and adjust labels. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels </a>.</p> <p> <b>Semantic Segmentation Adjustment</b> - Treats each pixel in an image as a multi-class classification and treats pixel adjusted annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> </ul> <p> <b>Semantic Segmentation Verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgment for semantic segmentation labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VerificationSemanticSegmentation</code> </p> </li> </ul> <p> <b>Bounding Box Adjustment</b> - Finds the most similar boxes from different workers based on the Jaccard index of the adjusted annotations.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentBoundingBox</code> </p> </li> </ul> <p> <b>Bounding Box Verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgement for bounding box labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VerificationBoundingBox</code> </p> </li> </ul> <p> <b>Video Frame Object Detection Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to classify and localize objects in a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to track object movement across a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Detection Adjustment</b> - Use this task type when you want workers to adjust 3D cuboids around objects in a 3D point cloud. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking Adjustment</b> - Use this task type when you want workers to adjust 3D cuboids around objects that appear in a sequence of 3D point cloud frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation Adjustment</b> - Use this task type when you want workers to adjust a point-level semantic segmentation masks using a paint tool.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a Lambda function implements the logic for <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-annotation-consolidation.html\">annotation consolidation</a> and to process output data.</p> <p>For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a>, use one of the following Amazon SageMaker Ground Truth Lambda function ARNs for <code>AnnotationConsolidationLambdaArn</code>. For custom labeling workflows, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html#sms-custom-templates-step3-postlambda\">Post-annotation Lambda</a>.</p> <p> <b>Bounding box</b> - Finds the most similar boxes from different workers based on the Jaccard index of the boxes.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-BoundingBox</code> </p> </li> </ul> <p> <b>Image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-ImageMultiClass</code> </p> </li> </ul> <p> <b>Multi-label image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-ImageMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Semantic segmentation</b> - Treats each pixel in an image as a multi-class classification and treats pixel annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-SemanticSegmentation</code> </p> </li> </ul> <p> <b>Text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-TextMultiClass</code> </p> </li> </ul> <p> <b>Multi-label text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-TextMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Named entity recognition</b> - Groups similar selections and calculates aggregate boundaries, resolving to most-assigned label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-NamedEntityRecognition</code> </p> </li> </ul> <p> <b>Video Classification</b> - Use this task type when you need workers to classify videos using predefined labels that you specify. Workers are shown videos and are asked to choose one label for each video.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoMultiClass</code> </p> </li> </ul> <p> <b>Video Frame Object Detection</b> - Use this task type to have workers identify and locate objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to identify and localize various objects in a series of video frames, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking</b> - Use this task type to have workers track the movement of objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to track the movement of objects, such as cars, bikes, and pedestrians. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Detection</b> - Use this task type when you want workers to classify objects in a 3D point cloud by drawing 3D cuboids around objects. For example, you can use this task type to ask workers to identify different types of objects in a point cloud, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking</b> - Use this task type when you want workers to draw 3D cuboids around objects that appear in a sequence of 3D point cloud frames. For example, you can use this task type to ask workers to track the movement of vehicles across multiple point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation</b> - Use this task type when you want workers to create a point-level semantic segmentation masks by painting objects in a 3D point cloud using different colors where each color is assigned to one of the classes you specify.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Use the following ARNs for Label Verification and Adjustment Jobs</b> </p> <p>Use label verification and adjustment jobs to review and adjust labels. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels </a>.</p> <p> <b>Semantic Segmentation Adjustment</b> - Treats each pixel in an image as a multi-class classification and treats pixel adjusted annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentSemanticSegmentation</code> </p> </li> </ul> <p> <b>Semantic Segmentation Verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgment for semantic segmentation labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VerificationSemanticSegmentation</code> </p> </li> </ul> <p> <b>Bounding Box Adjustment</b> - Finds the most similar boxes from different workers based on the Jaccard index of the adjusted annotations.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentBoundingBox</code> </p> </li> </ul> <p> <b>Bounding Box Verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgement for bounding box labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-VerificationBoundingBox</code> </p> </li> </ul> <p> <b>Video Frame Object Detection Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to classify and localize objects in a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentVideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to track object movement across a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-AdjustmentVideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Detection Adjustment</b> - Use this task type when you want workers to adjust 3D cuboids around objects in a 3D point cloud. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking Adjustment</b> - Use this task type when you want workers to adjust 3D cuboids around objects that appear in a sequence of 3D point cloud frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation Adjustment</b> - Use this task type when you want workers to adjust a point-level semantic segmentation masks using a paint tool.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Generative AI/Custom</b> - Direct passthrough of output data without any transformation.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:ACS-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:ACS-PassThrough</code> </p> </li> </ul>"
         }
       },
       "documentation":"<p>Configures how labels are consolidated across human workers and processes output data.</p>"
@@ -4926,6 +5186,7 @@
     "AppArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app/.*"
     },
     "AppDetails":{
@@ -4966,6 +5227,7 @@
     "AppImageConfigArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app-image-config/.*"
     },
     "AppImageConfigDetails":{
@@ -5009,7 +5271,8 @@
     "AppImageConfigName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "AppImageConfigSortKey":{
       "type":"string",
@@ -5102,6 +5365,8 @@
         "ml.trn1.32xlarge",
         "ml.trn1n.32xlarge",
         "ml.p5.48xlarge",
+        "ml.p5en.48xlarge",
+        "ml.p6-b200.48xlarge",
         "ml.m6i.large",
         "ml.m6i.xlarge",
         "ml.m6i.2xlarge",
@@ -5203,7 +5468,8 @@
     "AppName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "AppNetworkAccessType":{
       "type":"string",
@@ -5269,32 +5535,36 @@
     "ApprovalDescription":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "ArnOrName":{
       "type":"string",
       "max":170,
       "min":1,
-      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z\\-]*\\/)?([a-zA-Z0-9]([a-zA-Z0-9-]){0,62})(?<!-)$"
+      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z\\-]*\\/)?([a-zA-Z0-9]([a-zA-Z0-9-]){0,62})(?<!-)"
     },
     "ArtifactArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:artifact/.*"
     },
     "ArtifactDigest":{
       "type":"string",
-      "pattern":"^[\\w:]+$"
+      "pattern":"[\\w:]+"
     },
     "ArtifactProperties":{
       "type":"map",
       "key":{"shape":"StringParameterValue"},
       "value":{"shape":"ArtifactPropertyValue"},
-      "max":30
+      "max":30,
+      "min":0
     },
     "ArtifactPropertyValue":{
       "type":"string",
       "max":4096,
+      "min":0,
       "pattern":".*"
     },
     "ArtifactSource":{
@@ -5427,6 +5697,7 @@
     "AssociationEntityArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:(experiment|experiment-trial-component|artifact|action|context)/.*"
     },
     "AssociationSummaries":{
@@ -5475,7 +5746,8 @@
     "AssumableRoleArns":{
       "type":"list",
       "member":{"shape":"RoleArn"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "AsyncInferenceClientConfig":{
       "type":"structure",
@@ -5630,6 +5902,65 @@
       "min":1,
       "pattern":"[a-zA-Z0-9._-]+"
     },
+    "AttachClusterNodeVolumeRequest":{
+      "type":"structure",
+      "required":[
+        "ClusterArn",
+        "NodeId",
+        "VolumeId"
+      ],
+      "members":{
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of your SageMaker HyperPod cluster containing the target node. Your cluster must use EKS as the orchestration and be in the <code>InService</code> state. </p>"
+        },
+        "NodeId":{
+          "shape":"ClusterNodeId",
+          "documentation":"<p> The unique identifier of the cluster node to which you want to attach the volume. The node must belong to your specified HyperPod cluster and cannot be part of a Restricted Instance Group (RIG). </p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p> The unique identifier of your EBS volume to attach. The volume must be in the <code>available</code> state. </p>"
+        }
+      }
+    },
+    "AttachClusterNodeVolumeResponse":{
+      "type":"structure",
+      "required":[
+        "ClusterArn",
+        "NodeId",
+        "VolumeId",
+        "AttachTime",
+        "Status",
+        "DeviceName"
+      ],
+      "members":{
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of your SageMaker HyperPod cluster where the volume attachment operation was performed. </p>"
+        },
+        "NodeId":{
+          "shape":"ClusterNodeId",
+          "documentation":"<p> The unique identifier of the cluster node where your volume was attached. </p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p> The unique identifier of your EBS volume that was attached. </p>"
+        },
+        "AttachTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> The timestamp when the volume attachment operation was initiated by the SageMaker HyperPod service. </p>"
+        },
+        "Status":{
+          "shape":"VolumeAttachmentStatus",
+          "documentation":"<p> The current status of your volume attachment operation. </p>"
+        },
+        "DeviceName":{
+          "shape":"VolumeDeviceName",
+          "documentation":"<p> The device name assigned to your attached volume on the target instance. </p>"
+        }
+      }
+    },
     "AttributeName":{
       "type":"string",
       "max":256,
@@ -5639,7 +5970,8 @@
     "AttributeNames":{
       "type":"list",
       "member":{"shape":"AttributeName"},
-      "max":16
+      "max":16,
+      "min":0
     },
     "AuthMode":{
       "type":"string",
@@ -5652,18 +5984,39 @@
       "type":"map",
       "key":{"shape":"AuthenticationRequestExtraParamsKey"},
       "value":{"shape":"AuthenticationRequestExtraParamsValue"},
-      "max":10
+      "max":10,
+      "min":0
     },
     "AuthenticationRequestExtraParamsKey":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":".*"
     },
     "AuthenticationRequestExtraParamsValue":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":".*"
     },
+    "AuthorizedUrl":{
+      "type":"structure",
+      "members":{
+        "Url":{
+          "shape":"LongS3Uri",
+          "documentation":"<p>The presigned S3 URL that provides temporary, secure access to download the file. URLs expire within 15 minutes for security purposes.</p>"
+        },
+        "LocalPath":{
+          "shape":"LocalPath",
+          "documentation":"<p>The recommended local file path where the downloaded file should be stored to maintain proper directory structure and file organization.</p>"
+        }
+      },
+      "documentation":"<p>Contains a presigned URL and its associated local file path for downloading hub content artifacts.</p>"
+    },
+    "AuthorizedUrlConfigs":{
+      "type":"list",
+      "member":{"shape":"AuthorizedUrl"}
+    },
     "AutoGenerateEndpointName":{"type":"boolean"},
     "AutoMLAlgorithm":{
       "type":"string",
@@ -5699,12 +6052,14 @@
     "AutoMLAlgorithms":{
       "type":"list",
       "member":{"shape":"AutoMLAlgorithm"},
-      "max":11
+      "max":11,
+      "min":0
     },
     "AutoMLAlgorithmsConfig":{
       "type":"list",
       "member":{"shape":"AutoMLAlgorithmConfig"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "AutoMLCandidate":{
       "type":"structure",
@@ -5852,7 +6207,7 @@
           "documentation":"<p>The configuration for using <a href=\"https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/emr-serverless.html\"> EMR Serverless</a> to run the AutoML job V2.</p> <p>To allow your AutoML job V2 to automatically initiate a remote job on EMR Serverless when additional compute resources are needed to process large datasets, you need to provide an <code>EmrServerlessComputeConfig</code> object, which includes an <code>ExecutionRoleARN</code> attribute, to the <code>AutoMLComputeConfig</code> of the AutoML job V2 input request.</p> <p>By seamlessly transitioning to EMR Serverless when required, the AutoML job can handle datasets that would otherwise exceed the initially provisioned resources, without any manual intervention from you. </p> <p>EMR Serverless is available for the tabular and time series problem types. We recommend setting up this option for tabular datasets larger than 5 GB and time series datasets larger than 30 GB.</p>"
         }
       },
-      "documentation":"<note> <p>This data type is intended for use exclusively by SageMaker Canvas and cannot be used in other contexts at the moment.</p> </note> <p>Specifies the compute configuration for an AutoML job V2.</p>"
+      "documentation":"<p><note> <p>This data type is intended for use exclusively by SageMaker Canvas and cannot be used in other contexts at the moment.</p> </note> <p>Specifies the compute configuration for an AutoML job V2.</p></p>"
     },
     "AutoMLContainerDefinition":{
       "type":"structure",
@@ -5879,7 +6234,8 @@
     "AutoMLContainerDefinitions":{
       "type":"list",
       "member":{"shape":"AutoMLContainerDefinition"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "AutoMLDataSource":{
       "type":"structure",
@@ -5904,7 +6260,8 @@
     },
     "AutoMLFailureReason":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "AutoMLInferenceContainerDefinitions":{
       "type":"map",
@@ -5917,7 +6274,8 @@
         "documentation":"<p>Information about the recommended inference container definitions.</p>"
       },
       "documentation":"<p>The mapping of all supported processing unit (CPU, GPU, etc...) to inference container definitions for the candidate. This field is populated for the V2 API only (for example, for jobs created by calling <code>CreateAutoMLJobV2</code>).</p>",
-      "max":2
+      "max":2,
+      "min":0
     },
     "AutoMLInputDataConfig":{
       "type":"list",
@@ -6021,7 +6379,7 @@
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
     },
     "AutoMLJobObjective":{
       "type":"structure",
@@ -6213,6 +6571,7 @@
     "AutoMLNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9\\-]+"
     },
     "AutoMLOutputDataConfig":{
@@ -6352,7 +6711,8 @@
         },
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to use traffic encryption between the container layers.</p>"
+          "documentation":"<p>Whether to use traffic encryption between the container layers.</p>",
+          "box":true
         },
         "VpcConfig":{
           "shape":"VpcConfig",
@@ -6408,6 +6768,12 @@
       "max":100,
       "min":0
     },
+    "AutoRollbackAlarms":{
+      "type":"list",
+      "member":{"shape":"AlarmDetails"},
+      "max":10,
+      "min":1
+    },
     "AutoRollbackConfig":{
       "type":"structure",
       "members":{
@@ -6441,6 +6807,12 @@
     },
     "AvailableInstanceCount":{
       "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "AvailableSpareInstanceCount":{
+      "type":"integer",
+      "box":true,
       "min":0
     },
     "AwsManagedHumanLoopRequestSource":{
@@ -6458,7 +6830,95 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+    },
+    "BatchAddClusterNodesError":{
+      "type":"structure",
+      "required":[
+        "InstanceGroupName",
+        "ErrorCode",
+        "FailedCount"
+      ],
+      "members":{
+        "InstanceGroupName":{
+          "shape":"InstanceGroupName",
+          "documentation":"<p>The name of the instance group for which the error occurred.</p>"
+        },
+        "ErrorCode":{
+          "shape":"BatchAddClusterNodesErrorCode",
+          "documentation":"<p>The error code associated with the failure. Possible values include <code>InstanceGroupNotFound</code> and <code>InvalidInstanceGroupState</code>.</p>"
+        },
+        "FailedCount":{
+          "shape":"BatchAddFailureCount",
+          "documentation":"<p>The number of nodes that failed to be added to the specified instance group.</p>"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>A descriptive message providing additional details about the error.</p>"
+        }
+      },
+      "documentation":"<p>Information about an error that occurred during the node addition operation.</p>"
+    },
+    "BatchAddClusterNodesErrorCode":{
+      "type":"string",
+      "enum":[
+        "InstanceGroupNotFound",
+        "InvalidInstanceGroupStatus"
+      ]
+    },
+    "BatchAddClusterNodesErrorList":{
+      "type":"list",
+      "member":{"shape":"BatchAddClusterNodesError"}
+    },
+    "BatchAddClusterNodesRequest":{
+      "type":"structure",
+      "required":[
+        "ClusterName",
+        "NodesToAdd"
+      ],
+      "members":{
+        "ClusterName":{
+          "shape":"ClusterNameOrArn",
+          "documentation":"<p>The name of the HyperPod cluster to which you want to add nodes.</p>"
+        },
+        "ClientToken":{
+          "shape":"BatchAddClusterNodesRequestClientTokenString",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. This token is valid for 8 hours. If you retry the request with the same client token within this timeframe and the same parameters, the API returns the same set of <code>NodeLogicalIds</code> with their latest status.</p>",
+          "idempotencyToken":true
+        },
+        "NodesToAdd":{
+          "shape":"AddClusterNodeSpecificationList",
+          "documentation":"<p>A list of instance groups and the number of nodes to add to each. You can specify up to 5 instance groups in a single request, with a maximum of 50 nodes total across all instance groups.</p>"
+        }
+      }
+    },
+    "BatchAddClusterNodesRequestClientTokenString":{
+      "type":"string",
+      "max":64,
+      "min":0,
+      "pattern":"[\\x21-\\x7E]+"
+    },
+    "BatchAddClusterNodesResponse":{
+      "type":"structure",
+      "required":[
+        "Successful",
+        "Failed"
+      ],
+      "members":{
+        "Successful":{
+          "shape":"NodeAdditionResultList",
+          "documentation":"<p>A list of <code>NodeLogicalIDs</code> that were successfully added to the cluster. The <code>NodeLogicalID</code> is unique per cluster and does not change between instance replacements. Each entry includes a <code>NodeLogicalId</code> that can be used to track the node's provisioning status (with <code>DescribeClusterNode</code>), the instance group name, and the current status of the node.</p>"
+        },
+        "Failed":{
+          "shape":"BatchAddClusterNodesErrorList",
+          "documentation":"<p>A list of errors that occurred during the node addition operation. Each entry includes the instance group name, error code, number of failed additions, and an error message.</p>"
+        }
+      }
+    },
+    "BatchAddFailureCount":{
+      "type":"integer",
+      "box":true,
+      "min":1
     },
     "BatchDataCaptureConfig":{
       "type":"structure",
@@ -6474,11 +6934,41 @@
         },
         "GenerateInferenceId":{
           "shape":"Boolean",
-          "documentation":"<p>Flag that indicates whether to append inference id to the output.</p>"
+          "documentation":"<p>Flag that indicates whether to append inference id to the output.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Configuration to control how SageMaker captures inference data for batch transform jobs.</p>"
     },
+    "BatchDeleteClusterNodeLogicalIdsError":{
+      "type":"structure",
+      "required":[
+        "Code",
+        "Message",
+        "NodeLogicalId"
+      ],
+      "members":{
+        "Code":{
+          "shape":"BatchDeleteClusterNodesErrorCode",
+          "documentation":"<p>The error code associated with the failure. Possible values include <code>NodeLogicalIdNotFound</code>, <code>InvalidNodeStatus</code>, and <code>InternalError</code>.</p>"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>A descriptive message providing additional details about the error.</p>"
+        },
+        "NodeLogicalId":{
+          "shape":"ClusterNodeLogicalId",
+          "documentation":"<p>The <code>NodeLogicalId</code> of the node that could not be deleted.</p>"
+        }
+      },
+      "documentation":"<p>Information about an error that occurred when attempting to delete a node identified by its <code>NodeLogicalId</code>.</p>"
+    },
+    "BatchDeleteClusterNodeLogicalIdsErrorList":{
+      "type":"list",
+      "member":{"shape":"BatchDeleteClusterNodeLogicalIdsError"},
+      "max":99,
+      "min":1
+    },
     "BatchDeleteClusterNodesError":{
       "type":"structure",
       "required":[
@@ -6513,15 +7003,12 @@
     "BatchDeleteClusterNodesErrorList":{
       "type":"list",
       "member":{"shape":"BatchDeleteClusterNodesError"},
-      "max":99,
+      "max":3000,
       "min":1
     },
     "BatchDeleteClusterNodesRequest":{
       "type":"structure",
-      "required":[
-        "ClusterName",
-        "NodeIds"
-      ],
+      "required":["ClusterName"],
       "members":{
         "ClusterName":{
           "shape":"ClusterNameOrArn",
@@ -6529,7 +7016,11 @@
         },
         "NodeIds":{
           "shape":"ClusterNodeIds",
-          "documentation":"<p>A list of node IDs to be deleted from the specified cluster.</p> <note> <p>For SageMaker HyperPod clusters using the Slurm workload manager, you cannot remove instances that are configured as Slurm controller nodes.</p> </note>"
+          "documentation":"<p>A list of node IDs to be deleted from the specified cluster.</p> <note> <ul> <li> <p>For SageMaker HyperPod clusters using the Slurm workload manager, you cannot remove instances that are configured as Slurm controller nodes.</p> </li> <li> <p>If you need to delete more than 99 instances, contact <a href=\"http://aws.amazon.com/contact-us/\">Support</a> for assistance.</p> </li> </ul> </note>"
+        },
+        "NodeLogicalIds":{
+          "shape":"ClusterNodeLogicalIdList",
+          "documentation":"<p>A list of <code>NodeLogicalIds</code> identifying the nodes to be deleted. You can specify up to 50 <code>NodeLogicalIds</code>. You must specify either <code>NodeLogicalIds</code>, <code>InstanceIds</code>, or both, with a combined maximum of 50 identifiers.</p>"
         }
       }
     },
@@ -6543,6 +7034,14 @@
         "Successful":{
           "shape":"ClusterNodeIds",
           "documentation":"<p>A list of node IDs that were successfully deleted from the specified cluster.</p>"
+        },
+        "FailedNodeLogicalIds":{
+          "shape":"BatchDeleteClusterNodeLogicalIdsErrorList",
+          "documentation":"<p>A list of <code>NodeLogicalIds</code> that could not be deleted, along with error information explaining why the deletion failed.</p>"
+        },
+        "SuccessfulNodeLogicalIds":{
+          "shape":"ClusterNodeLogicalIdList",
+          "documentation":"<p>A list of <code>NodeLogicalIds</code> that were successfully deleted from the cluster.</p>"
         }
       }
     },
@@ -6730,11 +7229,13 @@
     },
     "BillableTimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "BlockedReason":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "BlueGreenUpdatePolicy":{
       "type":"structure",
@@ -6765,8 +7266,9 @@
     },
     "BorrowLimit":{
       "type":"integer",
+      "box":true,
       "max":500,
-      "min":1
+      "min":0
     },
     "Branch":{
       "type":"string",
@@ -6812,7 +7314,7 @@
       "type":"string",
       "max":10,
       "min":10,
-      "pattern":"^[a-zA-Z0-9]+$"
+      "pattern":"[a-zA-Z0-9]+"
     },
     "CandidateArtifactLocations":{
       "type":"structure",
@@ -6945,6 +7447,31 @@
       },
       "documentation":"<p>The SageMaker Canvas application settings.</p>"
     },
+    "CapacityReservation":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Capacity Reservation.</p>"
+        },
+        "Type":{
+          "shape":"CapacityReservationType",
+          "documentation":"<p>The type of Capacity Reservation. Valid values are <code>ODCR</code> (On-Demand Capacity Reservation) or <code>CRG</code> (Capacity Reservation Group).</p>"
+        }
+      },
+      "documentation":"<p>Information about the Capacity Reservation used by an instance or instance group.</p>"
+    },
+    "CapacityReservationPreference":{
+      "type":"string",
+      "enum":["capacity-reservations-only"]
+    },
+    "CapacityReservationType":{
+      "type":"string",
+      "enum":[
+        "ODCR",
+        "CRG"
+      ]
+    },
     "CapacitySize":{
       "type":"structure",
       "required":[
@@ -6963,6 +7490,24 @@
       },
       "documentation":"<p>Specifies the type and size of the endpoint capacity to activate for a blue/green deployment, a rolling deployment, or a rollback strategy. You can specify your batches as either instance count or the overall percentage or your fleet.</p> <p>For a rollback strategy, if you don't specify the fields in this object, or if you set the <code>Value</code> to 100%, then SageMaker uses a blue/green rollback strategy and rolls all traffic back to the blue fleet.</p>"
     },
+    "CapacitySizeConfig":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Value"
+      ],
+      "members":{
+        "Type":{
+          "shape":"NodeUnavailabilityType",
+          "documentation":"<p>Specifies whether SageMaker should process the update by amount or percentage of instances.</p>"
+        },
+        "Value":{
+          "shape":"NodeUnavailabilityValue",
+          "documentation":"<p>Specifies the amount or percentage of instances SageMaker updates at a time.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of the size measurements of the AMI update. Using this configuration, you can specify whether SageMaker should update your instance group by an amount or percentage of instances.</p>"
+    },
     "CapacitySizeType":{
       "type":"string",
       "enum":[
@@ -6972,10 +7517,12 @@
     },
     "CapacitySizeValue":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "CapacityUnit":{
       "type":"integer",
+      "box":true,
       "max":10000000,
       "min":0
     },
@@ -7102,6 +7649,208 @@
       "min":0
     },
     "CertifyForMarketplace":{"type":"boolean"},
+    "CfnCreateTemplateProvider":{
+      "type":"structure",
+      "required":[
+        "TemplateName",
+        "TemplateURL"
+      ],
+      "members":{
+        "TemplateName":{
+          "shape":"CfnTemplateName",
+          "documentation":"<p> A unique identifier for the template within the project. </p>"
+        },
+        "TemplateURL":{
+          "shape":"CfnTemplateURL",
+          "documentation":"<p> The Amazon S3 URL of the CloudFormation template. </p>"
+        },
+        "RoleARN":{
+          "shape":"RoleArn",
+          "documentation":"<p> The IAM role that CloudFormation assumes when creating the stack. </p>"
+        },
+        "Parameters":{
+          "shape":"CfnStackCreateParameters",
+          "documentation":"<p> An array of CloudFormation stack parameters.</p>"
+        }
+      },
+      "documentation":"<p> The CloudFormation template provider configuration for creating infrastructure resources. </p>"
+    },
+    "CfnStackCreateParameter":{
+      "type":"structure",
+      "required":["Key"],
+      "members":{
+        "Key":{
+          "shape":"CfnStackParameterKey",
+          "documentation":"<p> The name of the CloudFormation parameter. </p>"
+        },
+        "Value":{
+          "shape":"CfnStackParameterValue",
+          "documentation":"<p> The value of the CloudFormation parameter. </p>"
+        }
+      },
+      "documentation":"<p> A key-value pair that represents a parameter for the CloudFormation stack. </p>"
+    },
+    "CfnStackCreateParameters":{
+      "type":"list",
+      "member":{"shape":"CfnStackCreateParameter"},
+      "max":180,
+      "min":0
+    },
+    "CfnStackDetail":{
+      "type":"structure",
+      "required":["StatusMessage"],
+      "members":{
+        "Name":{
+          "shape":"CfnStackName",
+          "documentation":"<p> The name of the CloudFormation stack. </p>"
+        },
+        "Id":{
+          "shape":"CfnStackId",
+          "documentation":"<p> The unique identifier of the CloudFormation stack. </p>"
+        },
+        "StatusMessage":{
+          "shape":"CfnStackStatusMessage",
+          "documentation":"<p> A human-readable message about the stack's current status. </p>"
+        }
+      },
+      "documentation":"<p> Details about the CloudFormation stack. </p>"
+    },
+    "CfnStackId":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"(?=.{1,256}$)arn:aws[a-z\\-]*:cloudformation:[a-z0-9\\-]*:[0-9]{12}:stack/[a-zA-Z][a-zA-Z0-9-]{0,127}/.*"
+    },
+    "CfnStackName":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z][A-Za-z0-9-]{0,127}"
+    },
+    "CfnStackParameter":{
+      "type":"structure",
+      "required":["Key"],
+      "members":{
+        "Key":{
+          "shape":"CfnStackParameterKey",
+          "documentation":"<p> The name of the CloudFormation parameter. </p>"
+        },
+        "Value":{
+          "shape":"CfnStackParameterValue",
+          "documentation":"<p> The value of the CloudFormation parameter. </p>"
+        }
+      },
+      "documentation":"<p> A key-value pair representing a parameter used in the CloudFormation stack. </p>"
+    },
+    "CfnStackParameterKey":{
+      "type":"string",
+      "max":255,
+      "min":1,
+      "pattern":".{1,255}"
+    },
+    "CfnStackParameterValue":{
+      "type":"string",
+      "max":4096,
+      "min":0,
+      "pattern":".{0,4096}"
+    },
+    "CfnStackParameters":{
+      "type":"list",
+      "member":{"shape":"CfnStackParameter"},
+      "max":180,
+      "min":0
+    },
+    "CfnStackStatusMessage":{
+      "type":"string",
+      "max":4096,
+      "min":1,
+      "pattern":".{1,4096}"
+    },
+    "CfnStackUpdateParameter":{
+      "type":"structure",
+      "required":["Key"],
+      "members":{
+        "Key":{
+          "shape":"CfnStackParameterKey",
+          "documentation":"<p> The name of the CloudFormation parameter. </p>"
+        },
+        "Value":{
+          "shape":"CfnStackParameterValue",
+          "documentation":"<p> The value of the CloudFormation parameter. </p>"
+        }
+      },
+      "documentation":"<p> A key-value pair representing a parameter used in the CloudFormation stack. </p>"
+    },
+    "CfnStackUpdateParameters":{
+      "type":"list",
+      "member":{"shape":"CfnStackUpdateParameter"},
+      "max":180,
+      "min":0
+    },
+    "CfnTemplateName":{
+      "type":"string",
+      "max":32,
+      "min":1,
+      "pattern":"(?=.{1,32}$)[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+    },
+    "CfnTemplateProviderDetail":{
+      "type":"structure",
+      "required":[
+        "TemplateName",
+        "TemplateURL"
+      ],
+      "members":{
+        "TemplateName":{
+          "shape":"CfnTemplateName",
+          "documentation":"<p> The unique identifier of the template within the project. </p>"
+        },
+        "TemplateURL":{
+          "shape":"CfnTemplateURL",
+          "documentation":"<p> The Amazon S3 URL of the CloudFormation template. </p>"
+        },
+        "RoleARN":{
+          "shape":"RoleArn",
+          "documentation":"<p> The IAM role used by CloudFormation to create the stack. </p>"
+        },
+        "Parameters":{
+          "shape":"CfnStackParameters",
+          "documentation":"<p> An array of CloudFormation stack parameters.</p>"
+        },
+        "StackDetail":{
+          "shape":"CfnStackDetail",
+          "documentation":"<p> Information about the CloudFormation stack created by the template provider. </p>"
+        }
+      },
+      "documentation":"<p> Details about a CloudFormation template provider configuration and associated provisioning information. </p>"
+    },
+    "CfnTemplateURL":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"(?=.{1,1024}$)(https)://([^/]+)/(.+)"
+    },
+    "CfnUpdateTemplateProvider":{
+      "type":"structure",
+      "required":[
+        "TemplateName",
+        "TemplateURL"
+      ],
+      "members":{
+        "TemplateName":{
+          "shape":"CfnTemplateName",
+          "documentation":"<p> The unique identifier of the template to update within the project. </p>"
+        },
+        "TemplateURL":{
+          "shape":"CfnTemplateURL",
+          "documentation":"<p> The Amazon S3 URL of the CloudFormation template.</p>"
+        },
+        "Parameters":{
+          "shape":"CfnStackUpdateParameters",
+          "documentation":"<p> An array of CloudFormation stack parameters. </p>"
+        }
+      },
+      "documentation":"<p> Contains configuration details for updating an existing CloudFormation template provider in the project. </p>"
+    },
     "Channel":{
       "type":"structure",
       "required":[
@@ -7164,7 +7913,8 @@
         },
         "IsRequired":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the channel is required by the algorithm.</p>"
+          "documentation":"<p>Indicates whether the channel is required by the algorithm.</p>",
+          "box":true
         },
         "SupportedContentTypes":{
           "shape":"ContentTypes",
@@ -7241,11 +7991,13 @@
         },
         "SkipCheck":{
           "shape":"Boolean",
-          "documentation":"<p>This flag indicates if the drift check against the previous baseline will be skipped or not. If it is set to <code>False</code>, the previous baseline of the configured check type must be available.</p>"
+          "documentation":"<p>This flag indicates if the drift check against the previous baseline will be skipped or not. If it is set to <code>False</code>, the previous baseline of the configured check type must be available.</p>",
+          "box":true
         },
         "RegisterNewBaseline":{
           "shape":"Boolean",
-          "documentation":"<p>This flag indicates if a newly calculated baseline can be accessed through step properties <code>BaselineUsedForDriftCheckConstraints</code> and <code>BaselineUsedForDriftCheckStatistics</code>. If it is set to <code>False</code>, the previous baseline of the configured check type must also be available. These can be accessed through the <code>BaselineUsedForDriftCheckConstraints</code> property. </p>"
+          "documentation":"<p>This flag indicates if a newly calculated baseline can be accessed through step properties <code>BaselineUsedForDriftCheckConstraints</code> and <code>BaselineUsedForDriftCheckStatistics</code>. If it is set to <code>False</code>, the previous baseline of the configured check type must also be available. These can be accessed through the <code>BaselineUsedForDriftCheckConstraints</code> property. </p>",
+          "box":true
         }
       },
       "documentation":"<p>The container for the metadata for the ClarifyCheck step. For more information, see the topic on <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-clarify-check\">ClarifyCheck step</a> in the <i>Amazon SageMaker Developer Guide</i>. </p>"
@@ -7377,21 +8129,25 @@
     },
     "ClarifyLabelIndex":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ClarifyMaxPayloadInMB":{
       "type":"integer",
+      "box":true,
       "max":25,
       "min":1
     },
     "ClarifyMaxRecordCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "ClarifyMimeType":{
       "type":"string",
       "max":255,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9+.])*"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9+.])*"
     },
     "ClarifyProbabilityAttribute":{
       "type":"string",
@@ -7401,6 +8157,7 @@
     },
     "ClarifyProbabilityIndex":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ClarifyShapBaseline":{
@@ -7456,10 +8213,17 @@
     },
     "ClarifyShapNumberOfSamples":{
       "type":"integer",
+      "box":true,
       "min":1
     },
-    "ClarifyShapSeed":{"type":"integer"},
-    "ClarifyShapUseLogit":{"type":"boolean"},
+    "ClarifyShapSeed":{
+      "type":"integer",
+      "box":true
+    },
+    "ClarifyShapUseLogit":{
+      "type":"boolean",
+      "box":true
+    },
     "ClarifyTextConfig":{
       "type":"structure",
       "required":[
@@ -7568,39 +8332,232 @@
       "type":"string",
       "max":36,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-]+$"
+      "pattern":"[a-zA-Z0-9-]+"
     },
     "ClusterArn":{
       "type":"string",
       "max":256,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:cluster/[a-z0-9]{12}$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:cluster/[a-z0-9]{12}"
+    },
+    "ClusterAutoScalerType":{
+      "type":"string",
+      "enum":["Karpenter"]
+    },
+    "ClusterAutoScalingConfig":{
+      "type":"structure",
+      "required":["Mode"],
+      "members":{
+        "Mode":{
+          "shape":"ClusterAutoScalingMode",
+          "documentation":"<p>Describes whether autoscaling is enabled or disabled for the cluster. Valid values are <code>Enable</code> and <code>Disable</code>.</p>"
+        },
+        "AutoScalerType":{
+          "shape":"ClusterAutoScalerType",
+          "documentation":"<p>The type of autoscaler to use. Currently supported value is <code>Karpenter</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the autoscaling configuration for a HyperPod cluster.</p>"
+    },
+    "ClusterAutoScalingConfigOutput":{
+      "type":"structure",
+      "required":[
+        "Mode",
+        "Status"
+      ],
+      "members":{
+        "Mode":{
+          "shape":"ClusterAutoScalingMode",
+          "documentation":"<p>Describes whether autoscaling is enabled or disabled for the cluster.</p>"
+        },
+        "AutoScalerType":{
+          "shape":"ClusterAutoScalerType",
+          "documentation":"<p>The type of autoscaler configured for the cluster.</p>"
+        },
+        "Status":{
+          "shape":"ClusterAutoScalingStatus",
+          "documentation":"<p>The current status of the autoscaling configuration. Valid values are <code>InService</code>, <code>Failed</code>, <code>Creating</code>, and <code>Deleting</code>.</p>"
+        },
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>If the autoscaling status is <code>Failed</code>, this field contains a message describing the failure.</p>"
+        }
+      },
+      "documentation":"<p>The autoscaling configuration and status information for a HyperPod cluster.</p>"
+    },
+    "ClusterAutoScalingMode":{
+      "type":"string",
+      "enum":[
+        "Enable",
+        "Disable"
+      ]
+    },
+    "ClusterAutoScalingStatus":{
+      "type":"string",
+      "enum":[
+        "InService",
+        "Failed",
+        "Creating",
+        "Deleting"
+      ]
     },
     "ClusterAvailabilityZone":{
       "type":"string",
-      "pattern":"^[a-z]{2}-[a-z]+-\\d[a-z]$"
+      "pattern":"[a-z]{2}-[a-z]+-\\d[a-z]"
     },
     "ClusterAvailabilityZoneId":{
       "type":"string",
-      "pattern":"^[a-z]{3}\\d-az\\d$"
+      "pattern":"[a-z]{3}\\d-az\\d"
+    },
+    "ClusterConfigMode":{
+      "type":"string",
+      "enum":[
+        "Enable",
+        "Disable"
+      ]
     },
     "ClusterEbsVolumeConfig":{
       "type":"structure",
-      "required":["VolumeSizeInGB"],
       "members":{
         "VolumeSizeInGB":{
           "shape":"ClusterEbsVolumeSizeInGB",
           "documentation":"<p>The size in gigabytes (GB) of the additional EBS volume to be attached to the instances in the SageMaker HyperPod cluster instance group. The additional EBS volume is attached to each instance within the SageMaker HyperPod cluster instance group and mounted to <code>/opt/sagemaker</code>.</p>"
+        },
+        "VolumeKmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>The ID of a KMS key to encrypt the Amazon EBS volume.</p>"
+        },
+        "RootVolume":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the configuration is for the cluster's root or secondary Amazon EBS volume. You can specify two <code>ClusterEbsVolumeConfig</code> fields to configure both the root and secondary volumes. Set the value to <code>True</code> if you'd like to provide your own customer managed Amazon Web Services KMS key to encrypt the root volume. When <code>True</code>:</p> <ul> <li> <p>The configuration is applied to the root volume.</p> </li> <li> <p>You can't specify the <code>VolumeSizeInGB</code> field. The size of the root volume is determined for you.</p> </li> <li> <p>You must specify a KMS key ID for <code>VolumeKmsKeyId</code> to encrypt the root volume with your own KMS key instead of an Amazon Web Services owned KMS key.</p> </li> </ul> <p>Otherwise, by default, the value is <code>False</code>, and the following applies:</p> <ul> <li> <p>The configuration is applied to the secondary volume, while the root volume is encrypted with an Amazon Web Services owned key.</p> </li> <li> <p>You must specify the <code>VolumeSizeInGB</code> field.</p> </li> <li> <p>You can optionally specify the <code>VolumeKmsKeyId</code> to encrypt the secondary volume with your own KMS key instead of an Amazon Web Services owned KMS key.</p> </li> </ul>",
+          "box":true
         }
       },
       "documentation":"<p>Defines the configuration for attaching an additional Amazon Elastic Block Store (EBS) volume to each instance of the SageMaker HyperPod cluster instance group. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-release-notes.html#sagemaker-hyperpod-release-notes-20240620\">SageMaker HyperPod release notes: June 20, 2024</a>.</p>"
     },
     "ClusterEbsVolumeSizeInGB":{
       "type":"integer",
+      "box":true,
       "max":16384,
       "min":1
     },
+    "ClusterEventDetail":{
+      "type":"structure",
+      "required":[
+        "EventId",
+        "ClusterArn",
+        "ClusterName",
+        "ResourceType",
+        "EventTime"
+      ],
+      "members":{
+        "EventId":{
+          "shape":"EventId",
+          "documentation":"<p>The unique identifier (UUID) of the event.</p>"
+        },
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the HyperPod cluster associated with the event.</p>"
+        },
+        "ClusterName":{
+          "shape":"ClusterName",
+          "documentation":"<p>The name of the HyperPod cluster associated with the event.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group associated with the event, if applicable.</p>"
+        },
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The EC2 instance ID associated with the event, if applicable.</p>"
+        },
+        "ResourceType":{
+          "shape":"ClusterEventResourceType",
+          "documentation":"<p>The type of resource associated with the event. Valid values are <code>Cluster</code>, <code>InstanceGroup</code>, or <code>Instance</code>.</p>"
+        },
+        "EventTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the event occurred.</p>"
+        },
+        "EventDetails":{
+          "shape":"EventDetails",
+          "documentation":"<p>Additional details about the event, including event-specific metadata.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A human-readable description of the event.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about a specific event in a HyperPod cluster.</p>"
+    },
+    "ClusterEventMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "ClusterEventResourceType":{
+      "type":"string",
+      "enum":[
+        "Cluster",
+        "InstanceGroup",
+        "Instance"
+      ]
+    },
+    "ClusterEventSummaries":{
+      "type":"list",
+      "member":{"shape":"ClusterEventSummary"},
+      "max":100,
+      "min":0
+    },
+    "ClusterEventSummary":{
+      "type":"structure",
+      "required":[
+        "EventId",
+        "ClusterArn",
+        "ClusterName",
+        "ResourceType",
+        "EventTime"
+      ],
+      "members":{
+        "EventId":{
+          "shape":"EventId",
+          "documentation":"<p>The unique identifier (UUID) of the event.</p>"
+        },
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the HyperPod cluster associated with the event.</p>"
+        },
+        "ClusterName":{
+          "shape":"ClusterName",
+          "documentation":"<p>The name of the HyperPod cluster associated with the event.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group associated with the event, if applicable.</p>"
+        },
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Elastic Compute Cloud (EC2) instance ID associated with the event, if applicable.</p>"
+        },
+        "ResourceType":{
+          "shape":"ClusterEventResourceType",
+          "documentation":"<p>The type of resource associated with the event. Valid values are <code>Cluster</code>, <code>InstanceGroup</code>, or <code>Instance</code>.</p>"
+        },
+        "EventTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the event occurred.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A brief, human-readable description of the event.</p>"
+        }
+      },
+      "documentation":"<p>A summary of an event in a HyperPod cluster.</p>"
+    },
     "ClusterInstanceCount":{
       "type":"integer",
+      "box":true,
       "max":6758,
       "min":0
     },
@@ -7655,7 +8612,31 @@
           "shape":"InstanceGroupTrainingPlanStatus",
           "documentation":"<p>The current status of the training plan associated with this cluster instance group.</p>"
         },
-        "OverrideVpcConfig":{"shape":"VpcConfig"}
+        "OverrideVpcConfig":{
+          "shape":"VpcConfig",
+          "documentation":"<p>The customized Amazon VPC configuration at the instance group level that overrides the default Amazon VPC configuration of the SageMaker HyperPod cluster.</p>"
+        },
+        "ScheduledUpdateConfig":{
+          "shape":"ScheduledUpdateConfig",
+          "documentation":"<p>The configuration object of the schedule that SageMaker follows when updating the AMI.</p>"
+        },
+        "CurrentImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) currently in use by the instance group.</p>"
+        },
+        "DesiredImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) desired for the instance group.</p>"
+        },
+        "TargetStateCount":{
+          "shape":"ClusterInstanceCount",
+          "documentation":"<p>The number of nodes running a specific image ID since the last software update request.</p>"
+        },
+        "SoftwareUpdateStatus":{
+          "shape":"SoftwareUpdateStatus",
+          "documentation":"<p>Status of the last software udpate request.</p>"
+        },
+        "ActiveSoftwareUpdateConfig":{"shape":"DeploymentConfiguration"}
       },
       "documentation":"<p>Details of an instance group in a SageMaker HyperPod cluster.</p>"
     },
@@ -7667,7 +8648,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "ClusterInstanceGroupSpecification":{
       "type":"structure",
@@ -7715,7 +8696,18 @@
           "shape":"TrainingPlanArn",
           "documentation":"<p>The Amazon Resource Name (ARN); of the training plan to use for this cluster instance group.</p> <p>For more information about how to reserve GPU capacity for your SageMaker HyperPod clusters using Amazon SageMaker Training Plan, see <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingPlan.html\">CreateTrainingPlan</a> </code>.</p>"
         },
-        "OverrideVpcConfig":{"shape":"VpcConfig"}
+        "OverrideVpcConfig":{
+          "shape":"VpcConfig",
+          "documentation":"<p>To configure multi-AZ deployments, customize the Amazon VPC configuration at the instance group level. You can specify different subnets and security groups across different AZs in the instance group specification to override a SageMaker HyperPod cluster's default Amazon VPC configuration. For more information about deploying a cluster in multiple AZs, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-prerequisites.html#sagemaker-hyperpod-prerequisites-multiple-availability-zones\">Setting up SageMaker HyperPod clusters across multiple AZs</a>.</p> <note> <p>When your Amazon VPC and subnets support IPv6, network communications differ based on the cluster orchestration platform:</p> <ul> <li> <p>Slurm-orchestrated clusters automatically configure nodes with dual IPv6 and IPv4 addresses, allowing immediate IPv6 network communications.</p> </li> <li> <p>In Amazon EKS-orchestrated clusters, nodes receive dual-stack addressing, but pods can only use IPv6 when the Amazon EKS cluster is explicitly IPv6-enabled. For information about deploying an IPv6 Amazon EKS cluster, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/deploy-ipv6-cluster.html#_deploy_an_ipv6_cluster_with_eksctl\">Amazon EKS IPv6 Cluster Deployment</a>.</p> </li> </ul> <p>Additional resources for IPv6 configuration:</p> <ul> <li> <p>For information about adding IPv6 support to your VPC, see to <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html\">IPv6 Support for VPC</a>.</p> </li> <li> <p>For information about creating a new IPv6-compatible VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html\">Amazon VPC Creation Guide</a>.</p> </li> <li> <p>To configure SageMaker HyperPod with a custom Amazon VPC, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-prerequisites.html#sagemaker-hyperpod-prerequisites-optional-vpc\">Custom Amazon VPC Setup for SageMaker HyperPod</a>.</p> </li> </ul> </note>"
+        },
+        "ScheduledUpdateConfig":{
+          "shape":"ScheduledUpdateConfig",
+          "documentation":"<p>The configuration object of the schedule that SageMaker uses to update the AMI.</p>"
+        },
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>When configuring your HyperPod cluster, you can specify an image ID using one of the following options:</p> <ul> <li> <p> <code>HyperPodPublicAmiId</code>: Use a HyperPod public AMI</p> </li> <li> <p> <code>CustomAmiId</code>: Use your custom AMI</p> </li> <li> <p> <code>default</code>: Use the default latest system image</p> </li> </ul> <p>If you choose to use a custom AMI (<code>CustomAmiId</code>), ensure it meets the following requirements:</p> <ul> <li> <p>Encryption: The custom AMI must be unencrypted.</p> </li> <li> <p>Ownership: The custom AMI must be owned by the same Amazon Web Services account that is creating the HyperPod cluster.</p> </li> <li> <p>Volume support: Only the primary AMI snapshot volume is supported; additional AMI volumes are not supported.</p> </li> </ul> <p>When updating the instance group's AMI through the <code>UpdateClusterSoftware</code> operation, if an instance group uses a custom AMI, you must provide an <code>ImageId</code> or use the default as input. Note that if you don't specify an instance group in your <code>UpdateClusterSoftware</code> request, then all of the instance groups are patched with the specified image.</p>"
+        }
       },
       "documentation":"<p>The specifications of an instance group that you need to define.</p>"
     },
@@ -7725,6 +8717,18 @@
       "max":100,
       "min":1
     },
+    "ClusterInstanceGroupsToDelete":{
+      "type":"list",
+      "member":{"shape":"ClusterInstanceGroupName"},
+      "max":100,
+      "min":0
+    },
+    "ClusterInstanceMemoryAllocationPercentage":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":0
+    },
     "ClusterInstancePlacement":{
       "type":"structure",
       "members":{
@@ -7747,7 +8751,8 @@
         "Pending",
         "ShuttingDown",
         "SystemUpdating",
-        "DeepHealthCheckInProgress"
+        "DeepHealthCheckInProgress",
+        "NotFound"
       ]
     },
     "ClusterInstanceStatusDetails":{
@@ -7779,7 +8784,8 @@
     "ClusterInstanceStorageConfigs":{
       "type":"list",
       "member":{"shape":"ClusterInstanceStorageConfig"},
-      "max":1
+      "max":2,
+      "min":0
     },
     "ClusterInstanceType":{
       "type":"string",
@@ -7787,6 +8793,7 @@
         "ml.p4d.24xlarge",
         "ml.p4de.24xlarge",
         "ml.p5.48xlarge",
+        "ml.p6e-gb200.36xlarge",
         "ml.trn1.32xlarge",
         "ml.trn1n.32xlarge",
         "ml.g5.xlarge",
@@ -7842,6 +8849,8 @@
         "ml.g6e.48xlarge",
         "ml.p5e.48xlarge",
         "ml.p5en.48xlarge",
+        "ml.p6-b200.48xlarge",
+        "ml.trn2.3xlarge",
         "ml.trn2.48xlarge",
         "ml.c6i.large",
         "ml.c6i.xlarge",
@@ -7869,7 +8878,32 @@
         "ml.r6i.12xlarge",
         "ml.r6i.16xlarge",
         "ml.r6i.24xlarge",
-        "ml.r6i.32xlarge"
+        "ml.r6i.32xlarge",
+        "ml.i3en.large",
+        "ml.i3en.xlarge",
+        "ml.i3en.2xlarge",
+        "ml.i3en.3xlarge",
+        "ml.i3en.6xlarge",
+        "ml.i3en.12xlarge",
+        "ml.i3en.24xlarge",
+        "ml.m7i.large",
+        "ml.m7i.xlarge",
+        "ml.m7i.2xlarge",
+        "ml.m7i.4xlarge",
+        "ml.m7i.8xlarge",
+        "ml.m7i.12xlarge",
+        "ml.m7i.16xlarge",
+        "ml.m7i.24xlarge",
+        "ml.m7i.48xlarge",
+        "ml.r7i.large",
+        "ml.r7i.xlarge",
+        "ml.r7i.2xlarge",
+        "ml.r7i.4xlarge",
+        "ml.r7i.8xlarge",
+        "ml.r7i.12xlarge",
+        "ml.r7i.16xlarge",
+        "ml.r7i.24xlarge",
+        "ml.r7i.48xlarge"
       ]
     },
     "ClusterLifeCycleConfig":{
@@ -7894,18 +8928,37 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\S\\s]+$"
+      "pattern":"[\\S\\s]+"
+    },
+    "ClusterMetadata":{
+      "type":"structure",
+      "members":{
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>An error message describing why the cluster level operation (such as creating, updating, or deleting) failed.</p>"
+        },
+        "EksRoleAccessEntries":{
+          "shape":"EksRoleAccessEntries",
+          "documentation":"<p>A list of Amazon EKS IAM role ARNs associated with the cluster. This is created by HyperPod on your behalf and only applies for EKS orchestrated clusters.</p>"
+        },
+        "SlrAccessEntry":{
+          "shape":"String",
+          "documentation":"<p>The Service-Linked Role (SLR) associated with the cluster. This is created by HyperPod on your behalf and only applies for EKS orchestrated clusters.</p>"
+        }
+      },
+      "documentation":"<p>Metadata information about a HyperPod cluster showing information about the cluster level operations, such as creating, updating, and deleting.</p>"
     },
     "ClusterName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "ClusterNameOrArn":{
       "type":"string",
       "max":256,
-      "pattern":"^(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:cluster/[a-z0-9]{12})|([a-zA-Z0-9](-*[a-zA-Z0-9]){0,62})$"
+      "min":0,
+      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:cluster/[a-z0-9]{12})|([a-zA-Z0-9](-*[a-zA-Z0-9]){0,62})"
     },
     "ClusterNodeDetails":{
       "type":"structure",
@@ -7918,6 +8971,10 @@
           "shape":"String",
           "documentation":"<p>The ID of the instance.</p>"
         },
+        "NodeLogicalId":{
+          "shape":"ClusterNodeLogicalId",
+          "documentation":"<p>A unique identifier for the node that persists throughout its lifecycle, from provisioning request to termination. This identifier can be used to track the node even before it has an assigned <code>InstanceId</code>.</p>"
+        },
         "InstanceStatus":{
           "shape":"ClusterInstanceStatusDetails",
           "documentation":"<p>The status of the instance.</p>"
@@ -7930,11 +8987,18 @@
           "shape":"Timestamp",
           "documentation":"<p>The time when the instance is launched.</p>"
         },
+        "LastSoftwareUpdateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the cluster was last updated.</p>"
+        },
         "LifeCycleConfig":{
           "shape":"ClusterLifeCycleConfig",
           "documentation":"<p>The LifeCycle configuration applied to the instance.</p>"
         },
-        "OverrideVpcConfig":{"shape":"VpcConfig"},
+        "OverrideVpcConfig":{
+          "shape":"VpcConfig",
+          "documentation":"<p>The customized Amazon VPC configuration at the instance group level that overrides the default Amazon VPC configuration of the SageMaker HyperPod cluster.</p>"
+        },
         "ThreadsPerCore":{
           "shape":"ClusterThreadsPerCore",
           "documentation":"<p>The number of threads per CPU core you specified under <code>CreateCluster</code>.</p>"
@@ -7949,7 +9013,7 @@
         },
         "PrivatePrimaryIpv6":{
           "shape":"ClusterPrivatePrimaryIpv6",
-          "documentation":"<p>The private primary IPv6 address of the SageMaker HyperPod cluster node.</p>"
+          "documentation":"<p>The private primary IPv6 address of the SageMaker HyperPod cluster node when configured with an Amazon VPC that supports IPv6 and includes subnets with IPv6 addressing enabled in either the cluster Amazon VPC configuration or the instance group Amazon VPC configuration.</p>"
         },
         "PrivateDnsHostname":{
           "shape":"ClusterPrivateDnsHostname",
@@ -7958,6 +9022,18 @@
         "Placement":{
           "shape":"ClusterInstancePlacement",
           "documentation":"<p>The placement details of the SageMaker HyperPod cluster node.</p>"
+        },
+        "CurrentImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) currently in use by the node.</p>"
+        },
+        "DesiredImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>The ID of the Amazon Machine Image (AMI) desired for the node.</p>"
+        },
+        "UltraServerInfo":{
+          "shape":"UltraServerInfo",
+          "documentation":"<p>Contains information about the UltraServer.</p>"
         }
       },
       "documentation":"<p>Details of an instance (also called a <i>node</i> interchangeably) in a SageMaker HyperPod cluster.</p>"
@@ -7966,14 +9042,30 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^i-[a-f0-9]{8}(?:[a-f0-9]{9})?$"
+      "pattern":"i-[a-f0-9]{8}(?:[a-f0-9]{9})?"
     },
     "ClusterNodeIds":{
       "type":"list",
       "member":{"shape":"ClusterNodeId"},
+      "max":3000,
+      "min":1
+    },
+    "ClusterNodeLogicalId":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]"
+    },
+    "ClusterNodeLogicalIdList":{
+      "type":"list",
+      "member":{"shape":"ClusterNodeLogicalId"},
       "max":99,
       "min":1
     },
+    "ClusterNodeProvisioningMode":{
+      "type":"string",
+      "enum":["Continuous"]
+    },
     "ClusterNodeRecovery":{
       "type":"string",
       "enum":[
@@ -8003,6 +9095,10 @@
           "shape":"String",
           "documentation":"<p>The ID of the instance.</p>"
         },
+        "NodeLogicalId":{
+          "shape":"String",
+          "documentation":"<p>A unique identifier for the node that persists throughout its lifecycle, from provisioning request to termination. This identifier can be used to track the node even before it has an assigned <code>InstanceId</code>. This field is only included when <code>IncludeNodeLogicalIds</code> is set to <code>True</code> in the <code>ListClusterNodes</code> request.</p>"
+        },
         "InstanceType":{
           "shape":"ClusterInstanceType",
           "documentation":"<p>The type of the instance.</p>"
@@ -8011,15 +9107,24 @@
           "shape":"Timestamp",
           "documentation":"<p>The time when the instance is launched.</p>"
         },
+        "LastSoftwareUpdateTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when SageMaker last updated the software of the instances in the cluster.</p>"
+        },
         "InstanceStatus":{
           "shape":"ClusterInstanceStatusDetails",
           "documentation":"<p>The status of the instance.</p>"
+        },
+        "UltraServerInfo":{
+          "shape":"UltraServerInfo",
+          "documentation":"<p>Contains information about the UltraServer.</p>"
         }
       },
       "documentation":"<p>Lists a summary of the properties of an instance (also called a <i>node</i> interchangeably) of a SageMaker HyperPod cluster.</p>"
     },
     "ClusterNonNegativeInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ClusterOrchestrator":{
@@ -8046,22 +9151,141 @@
     },
     "ClusterPrivateDnsHostname":{
       "type":"string",
-      "pattern":"^ip-((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)-?\\b){4}\\..*$"
+      "pattern":"ip-((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)-?\\b){4}\\..*"
     },
     "ClusterPrivatePrimaryIp":{
       "type":"string",
-      "pattern":"^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$"
+      "pattern":"((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}"
     },
     "ClusterPrivatePrimaryIpv6":{"type":"string"},
+    "ClusterRestrictedInstanceGroupDetails":{
+      "type":"structure",
+      "members":{
+        "CurrentCount":{
+          "shape":"ClusterNonNegativeInstanceCount",
+          "documentation":"<p>The number of instances that are currently in the restricted instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "TargetCount":{
+          "shape":"ClusterInstanceCount",
+          "documentation":"<p>The number of instances you specified to add to the restricted instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the restricted instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "InstanceType":{
+          "shape":"ClusterInstanceType",
+          "documentation":"<p>The instance type of the restricted instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "ExecutionRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>The execution role for the restricted instance group to assume.</p>"
+        },
+        "ThreadsPerCore":{
+          "shape":"ClusterThreadsPerCore",
+          "documentation":"<p>The number you specified to <code>TreadsPerCore</code> in <code>CreateCluster</code> for enabling or disabling multithreading. For instance types that support multithreading, you can specify 1 for disabling multithreading and 2 for enabling multithreading. For more information, see the reference table of <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html\">CPU cores and threads per CPU core per instance type</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+        },
+        "InstanceStorageConfigs":{
+          "shape":"ClusterInstanceStorageConfigs",
+          "documentation":"<p>The additional storage configurations for the instances in the SageMaker HyperPod cluster restricted instance group.</p>"
+        },
+        "OnStartDeepHealthChecks":{
+          "shape":"OnStartDeepHealthChecks",
+          "documentation":"<p>A flag indicating whether deep health checks should be performed when the cluster's restricted instance group is created or updated.</p>"
+        },
+        "Status":{
+          "shape":"InstanceGroupStatus",
+          "documentation":"<p>The current status of the cluster's restricted instance group.</p> <ul> <li> <p> <code>InService</code>: The restricted instance group is active and healthy.</p> </li> <li> <p> <code>Creating</code>: The restricted instance group is being provisioned.</p> </li> <li> <p> <code>Updating</code>: The restricted instance group is being updated.</p> </li> <li> <p> <code>Failed</code>: The restricted instance group has failed to provision or is no longer healthy.</p> </li> <li> <p> <code>Degraded</code>: The restricted instance group is degraded, meaning that some instances have failed to provision or are no longer healthy.</p> </li> <li> <p> <code>Deleting</code>: The restricted instance group is being deleted.</p> </li> </ul>"
+        },
+        "TrainingPlanArn":{
+          "shape":"TrainingPlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the training plan to filter clusters by. For more information about reserving GPU capacity for your SageMaker HyperPod clusters using Amazon SageMaker Training Plan, see <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingPlan.html\">CreateTrainingPlan</a> </code>.</p>"
+        },
+        "TrainingPlanStatus":{
+          "shape":"InstanceGroupTrainingPlanStatus",
+          "documentation":"<p>The current status of the training plan associated with this cluster restricted instance group.</p>"
+        },
+        "OverrideVpcConfig":{"shape":"VpcConfig"},
+        "ScheduledUpdateConfig":{"shape":"ScheduledUpdateConfig"},
+        "EnvironmentConfig":{
+          "shape":"EnvironmentConfigDetails",
+          "documentation":"<p>The configuration for the restricted instance groups (RIG) environment.</p>"
+        }
+      },
+      "documentation":"<p>The instance group details of the restricted instance group (RIG).</p>"
+    },
+    "ClusterRestrictedInstanceGroupDetailsList":{
+      "type":"list",
+      "member":{"shape":"ClusterRestrictedInstanceGroupDetails"}
+    },
+    "ClusterRestrictedInstanceGroupSpecification":{
+      "type":"structure",
+      "required":[
+        "InstanceCount",
+        "InstanceGroupName",
+        "InstanceType",
+        "ExecutionRole",
+        "EnvironmentConfig"
+      ],
+      "members":{
+        "InstanceCount":{
+          "shape":"ClusterInstanceCount",
+          "documentation":"<p>Specifies the number of instances to add to the restricted instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>Specifies the name of the restricted instance group.</p>"
+        },
+        "InstanceType":{
+          "shape":"ClusterInstanceType",
+          "documentation":"<p>Specifies the instance type of the restricted instance group.</p>"
+        },
+        "ExecutionRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>Specifies an IAM execution role to be assumed by the restricted instance group.</p>"
+        },
+        "ThreadsPerCore":{
+          "shape":"ClusterThreadsPerCore",
+          "documentation":"<p>The number you specified to <code>TreadsPerCore</code> in <code>CreateCluster</code> for enabling or disabling multithreading. For instance types that support multithreading, you can specify 1 for disabling multithreading and 2 for enabling multithreading. For more information, see the reference table of <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html\">CPU cores and threads per CPU core per instance type</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+        },
+        "InstanceStorageConfigs":{
+          "shape":"ClusterInstanceStorageConfigs",
+          "documentation":"<p>Specifies the additional storage configurations for the instances in the SageMaker HyperPod cluster restricted instance group.</p>"
+        },
+        "OnStartDeepHealthChecks":{
+          "shape":"OnStartDeepHealthChecks",
+          "documentation":"<p>A flag indicating whether deep health checks should be performed when the cluster restricted instance group is created or updated.</p>"
+        },
+        "TrainingPlanArn":{
+          "shape":"TrainingPlanArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the training plan to filter clusters by. For more information about reserving GPU capacity for your SageMaker HyperPod clusters using Amazon SageMaker Training Plan, see <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingPlan.html\">CreateTrainingPlan</a> </code>.</p>"
+        },
+        "OverrideVpcConfig":{"shape":"VpcConfig"},
+        "ScheduledUpdateConfig":{"shape":"ScheduledUpdateConfig"},
+        "EnvironmentConfig":{
+          "shape":"EnvironmentConfig",
+          "documentation":"<p>The configuration for the restricted instance groups (RIG) environment.</p>"
+        }
+      },
+      "documentation":"<p>The specifications of a restricted instance group that you need to define.</p>"
+    },
+    "ClusterRestrictedInstanceGroupSpecifications":{
+      "type":"list",
+      "member":{"shape":"ClusterRestrictedInstanceGroupSpecification"},
+      "max":100,
+      "min":1
+    },
     "ClusterSchedulerConfigArn":{
       "type":"string",
       "max":256,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:cluster-scheduler-config/[a-z0-9]{12}$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:cluster-scheduler-config/[a-z0-9]{12}"
     },
     "ClusterSchedulerConfigId":{
       "type":"string",
       "max":12,
-      "pattern":"^[a-z0-9]{12}$"
+      "min":0,
+      "pattern":"[a-z0-9]{12}"
     },
     "ClusterSchedulerConfigSummary":{
       "type":"structure",
@@ -8083,7 +9307,8 @@
         },
         "ClusterSchedulerConfigVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the cluster policy.</p>"
+          "documentation":"<p>Version of the cluster policy.</p>",
+          "box":true
         },
         "Name":{
           "shape":"EntityName",
@@ -8116,7 +9341,7 @@
     },
     "ClusterSchedulerPriorityClassName":{
       "type":"string",
-      "pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9]){0,39}?$"
+      "pattern":"[a-z0-9]([-a-z0-9]*[a-z0-9]){0,39}?"
     },
     "ClusterSortBy":{
       "type":"string",
@@ -8175,9 +9400,25 @@
     },
     "ClusterThreadsPerCore":{
       "type":"integer",
+      "box":true,
       "max":2,
       "min":1
     },
+    "ClusterTieredStorageConfig":{
+      "type":"structure",
+      "required":["Mode"],
+      "members":{
+        "Mode":{
+          "shape":"ClusterConfigMode",
+          "documentation":"<p>Specifies whether managed tier checkpointing is enabled or disabled for the HyperPod cluster. When set to <code>Enable</code>, the system installs a memory management daemon that provides disaggregated memory as a service for checkpoint storage. When set to <code>Disable</code>, the feature is turned off and the memory management daemon is removed from the cluster.</p>"
+        },
+        "InstanceMemoryAllocationPercentage":{
+          "shape":"ClusterInstanceMemoryAllocationPercentage",
+          "documentation":"<p>The percentage (int) of cluster memory to allocate for checkpointing.</p>"
+        }
+      },
+      "documentation":"<p>Defines the configuration for managed tier checkpointing in a HyperPod cluster. Managed tier checkpointing uses multiple storage tiers, including cluster CPU memory, to provide faster checkpoint operations and improved fault tolerance for large-scale model training. The system automatically saves checkpoints at high frequency to memory and periodically persists them to durable storage, like Amazon S3.</p>"
+    },
     "CodeEditorAppImageConfig":{
       "type":"structure",
       "members":{
@@ -8212,7 +9453,8 @@
     "CodeRepositories":{
       "type":"list",
       "member":{"shape":"CodeRepository"},
-      "max":10
+      "max":10,
+      "min":0
     },
     "CodeRepository":{
       "type":"structure",
@@ -8229,23 +9471,25 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso-f)?:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:code-repository/[\\S]{1,2048}$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:code-repository/[\\S]{1,2048}"
     },
     "CodeRepositoryContains":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "CodeRepositoryNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "CodeRepositoryNameOrUrl":{
       "type":"string",
       "max":1024,
       "min":1,
-      "pattern":"^https://([^/]+)/?(.*)$|^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "pattern":"https://([^/]+)/?(.*)$|^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "CodeRepositorySortBy":{
       "type":"string",
@@ -8406,6 +9650,7 @@
     "CompilationJobArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:compilation-job/.*"
     },
     "CompilationJobStatus":{
@@ -8506,7 +9751,8 @@
     "ComputeQuotaArn":{
       "type":"string",
       "max":2048,
-      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:compute-quota/[a-z0-9]{12}$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:compute-quota/[a-z0-9]{12}"
     },
     "ComputeQuotaConfig":{
       "type":"structure",
@@ -8528,14 +9774,11 @@
     },
     "ComputeQuotaId":{
       "type":"string",
-      "pattern":"^[a-z0-9]{12}$"
+      "pattern":"[a-z0-9]{12}"
     },
     "ComputeQuotaResourceConfig":{
       "type":"structure",
-      "required":[
-        "InstanceType",
-        "Count"
-      ],
+      "required":["InstanceType"],
       "members":{
         "InstanceType":{
           "shape":"ClusterInstanceType",
@@ -8544,6 +9787,18 @@
         "Count":{
           "shape":"InstanceCount",
           "documentation":"<p>The number of instances to add to the instance group of a SageMaker HyperPod cluster.</p>"
+        },
+        "Accelerators":{
+          "shape":"AcceleratorsAmount",
+          "documentation":"<p>The number of accelerators to allocate. If you don't specify a value for vCPU and MemoryInGiB, SageMaker AI automatically allocates ratio-based values for those parameters based on the number of accelerators you provide. For example, if you allocate 16 out of 32 total accelerators, SageMaker AI uses the ratio of 0.5 and allocates values to vCPU and MemoryInGiB.</p>"
+        },
+        "VCpu":{
+          "shape":"VCpuAmount",
+          "documentation":"<p>The number of vCPU to allocate. If you specify a value only for vCPU, SageMaker AI automatically allocates ratio-based values for MemoryInGiB based on this vCPU parameter. For example, if you allocate 20 out of 40 total vCPU, SageMaker AI uses the ratio of 0.5 and allocates values to MemoryInGiB. Accelerators are set to 0.</p>"
+        },
+        "MemoryInGiB":{
+          "shape":"MemoryInGiBAmount",
+          "documentation":"<p>The amount of memory in GiB to allocate. If you specify a value only for this parameter, SageMaker AI automatically allocates a ratio-based value for vCPU based on this memory that you provide. For example, if you allocate 200 out of 400 total memory in GiB, SageMaker AI uses the ratio of 0.5 and allocates values to vCPU. Accelerators are set to 0.</p>"
         }
       },
       "documentation":"<p>Configuration of the resources used for the compute allocation definition.</p>"
@@ -8579,7 +9834,8 @@
         },
         "ComputeQuotaVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the compute allocation definition.</p>"
+          "documentation":"<p>Version of the compute allocation definition.</p>",
+          "box":true
         },
         "Status":{
           "shape":"SchedulerResourceStatus",
@@ -8635,7 +9891,7 @@
     },
     "ComputeQuotaTargetTeamName":{
       "type":"string",
-      "pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9]){0,39}?$"
+      "pattern":"[a-z0-9]([-a-z0-9]*[a-z0-9]){0,39}?"
     },
     "ConditionOutcome":{
       "type":"string",
@@ -8663,8 +9919,14 @@
     "ConfigValue":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
+    "ConfiguredSpareInstanceCount":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -8676,6 +9938,7 @@
     "ContainerArgument":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ContainerArguments":{
@@ -8755,7 +10018,8 @@
     "ContainerDefinitionList":{
       "type":"list",
       "member":{"shape":"ContainerDefinition"},
-      "max":15
+      "max":15,
+      "min":0
     },
     "ContainerEntrypoint":{
       "type":"list",
@@ -8766,16 +10030,19 @@
     "ContainerEntrypointString":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ContainerHostname":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "ContainerImage":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":"[\\S]+"
     },
     "ContainerMode":{
@@ -8795,7 +10062,8 @@
     "ContentClassifiers":{
       "type":"list",
       "member":{"shape":"ContentClassifier"},
-      "max":256
+      "max":256,
+      "min":0
     },
     "ContentColumn":{
       "type":"string",
@@ -8805,11 +10073,13 @@
     "ContentDigest":{
       "type":"string",
       "max":72,
-      "pattern":"^[Ss][Hh][Aa]256:[0-9a-fA-F]{64}$"
+      "min":0,
+      "pattern":"[Ss][Hh][Aa]256:[0-9a-fA-F]{64}"
     },
     "ContentType":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ContentTypes":{
@@ -8819,13 +10089,14 @@
     "ContextArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:context/.*"
     },
     "ContextName":{
       "type":"string",
       "max":120,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,119}"
+      "pattern":"[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,119}"
     },
     "ContextNameOrArn":{
       "type":"string",
@@ -9030,7 +10301,8 @@
         },
         "CertifyForMarketplace":{
           "shape":"CertifyForMarketplace",
-          "documentation":"<p>Whether to certify the algorithm so that it can be listed in Amazon Web Services Marketplace.</p>"
+          "documentation":"<p>Whether to certify the algorithm so that it can be listed in Amazon Web Services Marketplace.</p>",
+          "box":true
         },
         "Tags":{
           "shape":"TagList",
@@ -9118,6 +10390,11 @@
         "ResourceSpec":{
           "shape":"ResourceSpec",
           "documentation":"<p>The instance type and the Amazon Resource Name (ARN) of the SageMaker AI image created on the instance.</p> <note> <p>The value of <code>InstanceType</code> passed as part of the <code>ResourceSpec</code> in the <code>CreateApp</code> call overrides the value passed as part of the <code>ResourceSpec</code> configured for the user profile or the domain. If <code>InstanceType</code> is not specified in any of those three <code>ResourceSpec</code> values for a <code>KernelGateway</code> app, the <code>CreateApp</code> call fails with a request validation error.</p> </note>"
+        },
+        "RecoveryMode":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates whether the application is launched in recovery mode. </p>",
+          "box":true
         }
       }
     },
@@ -9208,7 +10485,8 @@
         },
         "GenerateCandidateDefinitionsOnly":{
           "shape":"GenerateCandidateDefinitionsOnly",
-          "documentation":"<p>Generates possible candidates without training the models. A candidate is a combination of data preprocessors, algorithms, and algorithm parameter settings.</p>"
+          "documentation":"<p>Generates possible candidates without training the models. A candidate is a combination of data preprocessors, algorithms, and algorithm parameter settings.</p>",
+          "box":true
         },
         "Tags":{
           "shape":"TagList",
@@ -9298,10 +10576,7 @@
     },
     "CreateClusterRequest":{
       "type":"structure",
-      "required":[
-        "ClusterName",
-        "InstanceGroups"
-      ],
+      "required":["ClusterName"],
       "members":{
         "ClusterName":{
           "shape":"ClusterName",
@@ -9311,18 +10586,41 @@
           "shape":"ClusterInstanceGroupSpecifications",
           "documentation":"<p>The instance groups to be created in the SageMaker HyperPod cluster.</p>"
         },
-        "VpcConfig":{"shape":"VpcConfig"},
+        "RestrictedInstanceGroups":{
+          "shape":"ClusterRestrictedInstanceGroupSpecifications",
+          "documentation":"<p>The specialized instance groups for training models like Amazon Nova to be created in the SageMaker HyperPod cluster.</p>"
+        },
+        "VpcConfig":{
+          "shape":"VpcConfig",
+          "documentation":"<p>Specifies the Amazon Virtual Private Cloud (VPC) that is associated with the Amazon SageMaker HyperPod cluster. You can control access to and from your resources by configuring your VPC. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html\">Give SageMaker access to resources in your Amazon VPC</a>.</p> <note> <p>When your Amazon VPC and subnets support IPv6, network communications differ based on the cluster orchestration platform:</p> <ul> <li> <p>Slurm-orchestrated clusters automatically configure nodes with dual IPv6 and IPv4 addresses, allowing immediate IPv6 network communications.</p> </li> <li> <p>In Amazon EKS-orchestrated clusters, nodes receive dual-stack addressing, but pods can only use IPv6 when the Amazon EKS cluster is explicitly IPv6-enabled. For information about deploying an IPv6 Amazon EKS cluster, see <a href=\"https://docs.aws.amazon.com/eks/latest/userguide/deploy-ipv6-cluster.html#_deploy_an_ipv6_cluster_with_eksctl\">Amazon EKS IPv6 Cluster Deployment</a>.</p> </li> </ul> <p>Additional resources for IPv6 configuration:</p> <ul> <li> <p>For information about adding IPv6 support to your VPC, see to <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html\">IPv6 Support for VPC</a>.</p> </li> <li> <p>For information about creating a new IPv6-compatible VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html\">Amazon VPC Creation Guide</a>.</p> </li> <li> <p>To configure SageMaker HyperPod with a custom Amazon VPC, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-prerequisites.html#sagemaker-hyperpod-prerequisites-optional-vpc\">Custom Amazon VPC Setup for SageMaker HyperPod</a>.</p> </li> </ul> </note>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>Custom tags for managing the SageMaker HyperPod cluster as an Amazon Web Services resource. You can add tags to your cluster in the same way you add them in other Amazon Web Services services that support tagging. To learn more about tagging Amazon Web Services resources in general, see <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\">Tagging Amazon Web Services Resources User Guide</a>.</p>"
         },
         "Orchestrator":{
           "shape":"ClusterOrchestrator",
-          "documentation":"<p>The type of orchestrator to use for the SageMaker HyperPod cluster. Currently, the only supported value is <code>\"eks\"</code>, which is to use an Amazon Elastic Kubernetes Service (EKS) cluster as the orchestrator.</p>"
+          "documentation":"<p>The type of orchestrator to use for the SageMaker HyperPod cluster. Currently, the only supported value is <code>\"eks\"</code>, which is to use an Amazon Elastic Kubernetes Service cluster as the orchestrator.</p>"
         },
         "NodeRecovery":{
           "shape":"ClusterNodeRecovery",
           "documentation":"<p>The node recovery mode for the SageMaker HyperPod cluster. When set to <code>Automatic</code>, SageMaker HyperPod will automatically reboot or replace faulty nodes when issues are detected. When set to <code>None</code>, cluster administrators will need to manually manage any faulty cluster instances.</p>"
+        },
+        "TieredStorageConfig":{
+          "shape":"ClusterTieredStorageConfig",
+          "documentation":"<p>The configuration for managed tier checkpointing on the HyperPod cluster. When enabled, this feature uses a multi-tier storage approach for storing model checkpoints, providing faster checkpoint operations and improved fault tolerance across cluster nodes.</p>"
+        },
+        "NodeProvisioningMode":{
+          "shape":"ClusterNodeProvisioningMode",
+          "documentation":"<p>The mode for provisioning nodes in the cluster. You can specify the following modes:</p> <ul> <li> <p> <b>Continuous</b>: Scaling behavior that enables 1) concurrent operation execution within instance groups, 2) continuous retry mechanisms for failed operations, 3) enhanced customer visibility into cluster events through detailed event streams, 4) partial provisioning capabilities. Your clusters and instance groups remain <code>InService</code> while scaling. This mode is only supported for EKS orchestrated clusters.</p> </li> </ul>"
+        },
+        "ClusterRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that HyperPod assumes to perform cluster autoscaling operations. This role must have permissions for <code>sagemaker:BatchAddClusterNodes</code> and <code>sagemaker:BatchDeleteClusterNodes</code>. This is only required when autoscaling is enabled and when HyperPod is performing autoscaling operations.</p>"
+        },
+        "AutoScaling":{
+          "shape":"ClusterAutoScalingConfig",
+          "documentation":"<p>The autoscaling configuration for the cluster. Enables automatic scaling of cluster nodes based on workload demand using a Karpenter-based system.</p>"
         }
       }
     },
@@ -9658,9 +10956,7 @@
       "required":[
         "DomainName",
         "AuthMode",
-        "DefaultUserSettings",
-        "SubnetIds",
-        "VpcId"
+        "DefaultUserSettings"
       ],
       "members":{
         "DomainName":{
@@ -9681,11 +10977,11 @@
         },
         "SubnetIds":{
           "shape":"Subnets",
-          "documentation":"<p>The VPC subnets that the domain uses for communication.</p>"
+          "documentation":"<p>The VPC subnets that the domain uses for communication.</p> <p>The field is optional when the <code>AppNetworkAccessType</code> parameter is set to <code>PublicInternetOnly</code> for domains created from Amazon SageMaker Unified Studio.</p>"
         },
         "VpcId":{
           "shape":"VpcId",
-          "documentation":"<p>The ID of the Amazon Virtual Private Cloud (VPC) that the domain uses for communication.</p>"
+          "documentation":"<p>The ID of the Amazon Virtual Private Cloud (VPC) that the domain uses for communication.</p> <p>The field is optional when the <code>AppNetworkAccessType</code> parameter is set to <code>PublicInternetOnly</code> for domains created from Amazon SageMaker Unified Studio.</p>"
         },
         "Tags":{
           "shape":"TagList",
@@ -9726,6 +11022,10 @@
           "shape":"DomainArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the created domain.</p>"
         },
+        "DomainId":{
+          "shape":"DomainId",
+          "documentation":"<p>The ID of the created domain.</p>"
+        },
         "Url":{
           "shape":"String1024",
           "documentation":"<p>The URL to the created domain.</p>"
@@ -9877,7 +11177,8 @@
         "VpcConfig":{"shape":"VpcConfig"},
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Sets whether all model containers deployed to the endpoint are isolated. If they are, no inbound or outbound network calls can be made to or from the model containers.</p>"
+          "documentation":"<p>Sets whether all model containers deployed to the endpoint are isolated. If they are, no inbound or outbound network calls can be made to or from the model containers.</p>",
+          "box":true
         }
       }
     },
@@ -10060,6 +11361,58 @@
         }
       }
     },
+    "CreateHubContentPresignedUrlsRequest":{
+      "type":"structure",
+      "required":[
+        "HubName",
+        "HubContentType",
+        "HubContentName"
+      ],
+      "members":{
+        "HubName":{
+          "shape":"HubNameOrArn",
+          "documentation":"<p>The name or Amazon Resource Name (ARN) of the hub that contains the content. For public content, use <code>SageMakerPublicHub</code>.</p>"
+        },
+        "HubContentType":{
+          "shape":"HubContentType",
+          "documentation":"<p>The type of hub content to access. Valid values include <code>Model</code>, <code>Notebook</code>, and <code>ModelReference</code>.</p>"
+        },
+        "HubContentName":{
+          "shape":"HubContentName",
+          "documentation":"<p>The name of the hub content for which to generate presigned URLs. This identifies the specific model or content within the hub.</p>"
+        },
+        "HubContentVersion":{
+          "shape":"HubContentVersion",
+          "documentation":"<p>The version of the hub content. If not specified, the latest version is used.</p>"
+        },
+        "AccessConfig":{
+          "shape":"PresignedUrlAccessConfig",
+          "documentation":"<p>Configuration settings for accessing the hub content, including end-user license agreement acceptance for gated models and expected S3 URL validation.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of presigned URLs to return in the response. Default value is 100. Large models may contain hundreds of files, requiring pagination to retrieve all URLs.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> A token for pagination. Use this token to retrieve the next set of presigned URLs when the response is truncated.</p>"
+        }
+      }
+    },
+    "CreateHubContentPresignedUrlsResponse":{
+      "type":"structure",
+      "required":["AuthorizedUrlConfigs"],
+      "members":{
+        "AuthorizedUrlConfigs":{
+          "shape":"AuthorizedUrlConfigs",
+          "documentation":"<p>An array of authorized URL configurations, each containing a presigned URL and its corresponding local file path for proper file organization during download.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token for pagination. If present, indicates that more presigned URLs are available. Use this token in a subsequent request to retrieve additional URLs.</p>"
+        }
+      }
+    },
     "CreateHubContentReferenceRequest":{
       "type":"structure",
       "required":[
@@ -10309,7 +11662,8 @@
         },
         "Horovod":{
           "shape":"Horovod",
-          "documentation":"<p>Indicates Horovod compatibility.</p>"
+          "documentation":"<p>Indicates Horovod compatibility.</p>",
+          "box":true
         },
         "ReleaseNotes":{
           "shape":"ReleaseNotes",
@@ -10507,7 +11861,7 @@
         },
         "LabelAttributeName":{
           "shape":"LabelAttributeName",
-          "documentation":"<p>The attribute name to use for the label in the output manifest file. This is the key for the key/value pair formed with the label that a worker assigns to the object. The <code>LabelAttributeName</code> must meet the following requirements.</p> <ul> <li> <p>The name can't end with \"-metadata\". </p> </li> <li> <p>If you are using one of the following <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a>, the attribute name <i>must</i> end with \"-ref\". If the task type you are using is not listed below, the attribute name <i>must not</i> end with \"-ref\".</p> <ul> <li> <p>Image semantic segmentation (<code>SemanticSegmentation)</code>, and adjustment (<code>AdjustmentSemanticSegmentation</code>) and verification (<code>VerificationSemanticSegmentation</code>) labeling jobs for this task type.</p> </li> <li> <p>Video frame object detection (<code>VideoObjectDetection</code>), and adjustment and verification (<code>AdjustmentVideoObjectDetection</code>) labeling jobs for this task type.</p> </li> <li> <p>Video frame object tracking (<code>VideoObjectTracking</code>), and adjustment and verification (<code>AdjustmentVideoObjectTracking</code>) labeling jobs for this task type.</p> </li> <li> <p>3D point cloud semantic segmentation (<code>3DPointCloudSemanticSegmentation</code>), and adjustment and verification (<code>Adjustment3DPointCloudSemanticSegmentation</code>) labeling jobs for this task type. </p> </li> <li> <p>3D point cloud object tracking (<code>3DPointCloudObjectTracking</code>), and adjustment and verification (<code>Adjustment3DPointCloudObjectTracking</code>) labeling jobs for this task type. </p> </li> </ul> </li> </ul> <p/> <important> <p>If you are creating an adjustment or verification labeling job, you must use a <i>different</i> <code>LabelAttributeName</code> than the one used in the original labeling job. The original labeling job is the Ground Truth labeling job that produced the labels that you want verified or adjusted. To learn more about adjustment and verification labeling jobs, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels</a>.</p> </important>"
+          "documentation":"<p>The attribute name to use for the label in the output manifest file. This is the key for the key/value pair formed with the label that a worker assigns to the object. The <code>LabelAttributeName</code> must meet the following requirements.</p> <ul> <li> <p>The name can't end with \"-metadata\". </p> </li> <li> <p>If you are using one of the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a> or one of the following, the attribute name <i>must</i> end with \"-ref\".</p> <ul> <li> <p>Image semantic segmentation (<code>SemanticSegmentation)</code> and adjustment (<code>AdjustmentSemanticSegmentation</code>) labeling jobs for this task type. One exception is that verification (<code>VerificationSemanticSegmentation</code>) <i>must not</i> end with -\"ref\".</p> </li> <li> <p>Video frame object detection (<code>VideoObjectDetection</code>), and adjustment and verification (<code>AdjustmentVideoObjectDetection</code>) labeling jobs for this task type.</p> </li> <li> <p>Video frame object tracking (<code>VideoObjectTracking</code>), and adjustment and verification (<code>AdjustmentVideoObjectTracking</code>) labeling jobs for this task type.</p> </li> <li> <p>3D point cloud semantic segmentation (<code>3DPointCloudSemanticSegmentation</code>), and adjustment and verification (<code>Adjustment3DPointCloudSemanticSegmentation</code>) labeling jobs for this task type. </p> </li> <li> <p>3D point cloud object tracking (<code>3DPointCloudObjectTracking</code>), and adjustment and verification (<code>Adjustment3DPointCloudObjectTracking</code>) labeling jobs for this task type. </p> </li> </ul> </li> </ul> <p/> <important> <p>If you are creating an adjustment or verification labeling job, you must use a <i>different</i> <code>LabelAttributeName</code> than the one used in the original labeling job. The original labeling job is the Ground Truth labeling job that produced the labels that you want verified or adjusted. To learn more about adjustment and verification labeling jobs, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels</a>.</p> </important>"
         },
         "InputConfig":{
           "shape":"LabelingJobInputConfig",
@@ -10583,7 +11937,8 @@
         },
         "AutomaticModelRegistration":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to enable or disable automatic registration of new MLflow models to the SageMaker Model Registry. To enable automatic model registration, set this value to <code>True</code>. To disable automatic model registration, set this value to <code>False</code>. If not specified, <code>AutomaticModelRegistration</code> defaults to <code>False</code>.</p>"
+          "documentation":"<p>Whether to enable or disable automatic registration of new MLflow models to the SageMaker Model Registry. To enable automatic model registration, set this value to <code>True</code>. To disable automatic model registration, set this value to <code>False</code>. If not specified, <code>AutomaticModelRegistration</code> defaults to <code>False</code>.</p>",
+          "box":true
         },
         "WeeklyMaintenanceWindowStart":{
           "shape":"WeeklyMaintenanceWindowStart",
@@ -10672,7 +12027,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card to export. If a version is not provided, then the latest version of the model card is exported.</p>"
+          "documentation":"<p>The version of the model card to export. If a version is not provided, then the latest version of the model card is exported.</p>",
+          "box":true
         },
         "ModelCardExportJobName":{
           "shape":"EntityName",
@@ -10822,7 +12178,8 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Isolates the model container. No inbound or outbound network calls can be made to or from the model container.</p>"
+          "documentation":"<p>Isolates the model container. No inbound or outbound network calls can be made to or from the model container.</p>",
+          "box":true
         }
       }
     },
@@ -10893,7 +12250,8 @@
         },
         "CertifyForMarketplace":{
           "shape":"CertifyForMarketplace",
-          "documentation":"<p>Whether to certify the model package for listing on Amazon Web Services Marketplace.</p> <p>This parameter is optional for unversioned models, and does not apply to versioned models.</p>"
+          "documentation":"<p>Whether to certify the model package for listing on Amazon Web Services Marketplace.</p> <p>This parameter is optional for unversioned models, and does not apply to versioned models.</p>",
+          "box":true
         },
         "Tags":{
           "shape":"TagList",
@@ -11078,6 +12436,10 @@
           "shape":"SecurityGroupIds",
           "documentation":"<p>The VPC security group IDs, in the form sg-xxxxxxxx. The security groups must be for the same VPC as specified in the subnet. </p>"
         },
+        "IpAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type for the notebook instance. Specify <code>ipv4</code> for IPv4-only connectivity or <code>dualstack</code> for both IPv4 and IPv6 connectivity. When you specify <code>dualstack</code>, the subnet must support IPv6 CIDR blocks. If not specified, defaults to <code>ipv4</code>.</p>"
+        },
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p> When you send any requests to Amazon Web Services resources from the notebook instance, SageMaker AI assumes this role to perform tasks on your behalf. You must grant this role necessary permissions so SageMaker AI can perform these tasks. The policy must allow the SageMaker AI service principal (sagemaker.amazonaws.com) permissions to assume this role. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html\">SageMaker AI Roles</a>. </p> <note> <p>To be able to pass this role to SageMaker AI, the caller of this API must have the <code>iam:PassRole</code> permission.</p> </note>"
@@ -11120,7 +12482,7 @@
         },
         "PlatformIdentifier":{
           "shape":"PlatformIdentifier",
-          "documentation":"<p>The platform identifier of the notebook instance runtime environment.</p>"
+          "documentation":"<p>The platform identifier of the notebook instance runtime environment. The default value is <code>notebook-al2-v2</code>.</p>"
         },
         "InstanceMetadataServiceConfiguration":{
           "shape":"InstanceMetadataServiceConfiguration",
@@ -11143,6 +12505,10 @@
         "OnStart":{
           "shape":"NotebookInstanceLifecycleConfigList",
           "documentation":"<p>A shell script that runs every time you start a notebook instance, including when you create the notebook instance. The shell script must be a base64-encoded string.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\">Tagging Amazon Web Services Resources</a>.</p>"
         }
       }
     },
@@ -11274,6 +12640,10 @@
           "shape":"RoleArn",
           "documentation":"<p>The ARN of the IAM role that the partner application uses.</p>"
         },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>SageMaker Partner AI Apps uses Amazon Web Services KMS to encrypt data at rest using an Amazon Web Services managed key by default. For more control, specify a customer managed key.</p>"
+        },
         "MaintenanceConfig":{
           "shape":"PartnerAppMaintenanceConfig",
           "documentation":"<p>Maintenance configuration settings for the SageMaker Partner AI App.</p>"
@@ -11292,7 +12662,8 @@
         },
         "EnableIamSessionBasedIdentity":{
           "shape":"Boolean",
-          "documentation":"<p>When set to <code>TRUE</code>, the SageMaker Partner AI App sets the Amazon Web Services IAM session name or the authenticated IAM user as the identity of the SageMaker Partner AI App user.</p>"
+          "documentation":"<p>When set to <code>TRUE</code>, the SageMaker Partner AI App sets the Amazon Web Services IAM session name or the authenticated IAM user as the identity of the SageMaker Partner AI App user.</p>",
+          "box":true
         },
         "ClientToken":{
           "shape":"ClientToken",
@@ -11497,7 +12868,7 @@
         },
         "Environment":{
           "shape":"ProcessingEnvironmentMap",
-          "documentation":"<p>The environment variables to set in the Docker container. Up to 100 key and values entries in the map are supported.</p>"
+          "documentation":"<p>The environment variables to set in the Docker container. Up to 100 key and values entries in the map are supported.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any environment fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request environment variable or plain text fields.</p> </important>"
         },
         "NetworkConfig":{
           "shape":"NetworkConfig",
@@ -11509,7 +12880,7 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>(Optional) An array of key-value pairs. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-whatURL\">Using Cost Allocation Tags</a> in the <i>Amazon Web Services Billing and Cost Management User Guide</i>.</p>"
+          "documentation":"<p>(Optional) An array of key-value pairs. For more information, see <a href=\"https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-whatURL\">Using Cost Allocation Tags</a> in the <i>Amazon Web Services Billing and Cost Management User Guide</i>.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any tags. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request tag variable or plain text fields.</p> </important>"
         },
         "ExperimentConfig":{"shape":"ExperimentConfig"}
       }
@@ -11526,10 +12897,7 @@
     },
     "CreateProjectInput":{
       "type":"structure",
-      "required":[
-        "ProjectName",
-        "ServiceCatalogProvisioningDetails"
-      ],
+      "required":["ProjectName"],
       "members":{
         "ProjectName":{
           "shape":"ProjectEntityName",
@@ -11546,6 +12914,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key-value pairs that you want to use to organize and track your Amazon Web Services resource costs. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference Guide</i>.</p>"
+        },
+        "TemplateProviders":{
+          "shape":"CreateTemplateProviderList",
+          "documentation":"<p> An array of template provider configurations for creating infrastructure resources for the project. </p>"
         }
       }
     },
@@ -11647,15 +13019,28 @@
         }
       }
     },
+    "CreateTemplateProvider":{
+      "type":"structure",
+      "members":{
+        "CfnTemplateProvider":{
+          "shape":"CfnCreateTemplateProvider",
+          "documentation":"<p> The CloudFormation template provider configuration for creating infrastructure resources. </p>"
+        }
+      },
+      "documentation":"<p> Contains configuration details for a template provider. Only one type of template provider can be specified. </p>"
+    },
+    "CreateTemplateProviderList":{
+      "type":"list",
+      "member":{"shape":"CreateTemplateProvider"},
+      "max":1,
+      "min":1
+    },
     "CreateTrainingJobRequest":{
       "type":"structure",
       "required":[
         "TrainingJobName",
-        "AlgorithmSpecification",
         "RoleArn",
-        "OutputDataConfig",
-        "ResourceConfig",
-        "StoppingCondition"
+        "OutputDataConfig"
       ],
       "members":{
         "TrainingJobName":{
@@ -11664,7 +13049,7 @@
         },
         "HyperParameters":{
           "shape":"HyperParameters",
-          "documentation":"<p>Algorithm-specific parameters that influence the quality of the model. You set hyperparameters before you start the learning process. For a list of hyperparameters for each training algorithm provided by SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html\">Algorithms</a>. </p> <p>You can specify a maximum of 100 hyperparameters. Each hyperparameter is a key-value pair. Each key and value is limited to 256 characters, as specified by the <code>Length Constraint</code>. </p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets or tokens in any hyperparameter field. If the use of security-sensitive credentials are detected, SageMaker will reject your training job request and return an exception error.</p> </important>"
+          "documentation":"<p>Algorithm-specific parameters that influence the quality of the model. You set hyperparameters before you start the learning process. For a list of hyperparameters for each training algorithm provided by SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html\">Algorithms</a>. </p> <p>You can specify a maximum of 100 hyperparameters. Each hyperparameter is a key-value pair. Each key and value is limited to 256 characters, as specified by the <code>Length Constraint</code>. </p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any hyperparameter fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by any security-sensitive information included in the request hyperparameter variable or plain text fields.</p> </important>"
         },
         "AlgorithmSpecification":{
           "shape":"AlgorithmSpecification",
@@ -11696,19 +13081,22 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a>.</p>"
+          "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a>.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any tags. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by any security-sensitive information included in the request tag variable or plain text fields.</p> </important>"
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Isolates the training container. No inbound or outbound network calls can be made, except for calls between peers within a training cluster for distributed training. If you enable network isolation for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>"
+          "documentation":"<p>Isolates the training container. No inbound or outbound network calls can be made, except for calls between peers within a training cluster for distributed training. If you enable network isolation for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>",
+          "box":true
         },
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/train-encrypt.html\">Protect Communications Between ML Compute Instances in a Distributed Training Job</a>.</p>"
+          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/train-encrypt.html\">Protect Communications Between ML Compute Instances in a Distributed Training Job</a>.</p>",
+          "box":true
         },
         "EnableManagedSpotTraining":{
           "shape":"Boolean",
-          "documentation":"<p>To train models using managed spot training, choose <code>True</code>. Managed spot training provides a fully managed and scalable infrastructure for training machine learning models. this option is useful when training jobs can be interrupted and when there is flexibility when the training job is run. </p> <p>The complete and intermediate results of jobs are stored in an Amazon S3 bucket, and can be used as a starting point to train models incrementally. Amazon SageMaker provides metrics and logs in CloudWatch. They can be used to see when managed spot training jobs are running, interrupted, resumed, or completed. </p>"
+          "documentation":"<p>To train models using managed spot training, choose <code>True</code>. Managed spot training provides a fully managed and scalable infrastructure for training machine learning models. this option is useful when training jobs can be interrupted and when there is flexibility when the training job is run. </p> <p>The complete and intermediate results of jobs are stored in an Amazon S3 bucket, and can be used as a starting point to train models incrementally. Amazon SageMaker provides metrics and logs in CloudWatch. They can be used to see when managed spot training jobs are running, interrupted, resumed, or completed. </p>",
+          "box":true
         },
         "CheckpointConfig":{
           "shape":"CheckpointConfig",
@@ -11728,7 +13116,7 @@
         },
         "Environment":{
           "shape":"TrainingEnvironmentMap",
-          "documentation":"<p>The environment variables to set in the Docker container.</p>"
+          "documentation":"<p>The environment variables to set in the Docker container.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any environment fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request environment variable or plain text fields.</p> </important>"
         },
         "RetryStrategy":{
           "shape":"RetryStrategy",
@@ -11773,6 +13161,10 @@
           "shape":"TrainingPlanOfferingId",
           "documentation":"<p>The unique identifier of the training plan offering to use for creating this plan.</p>"
         },
+        "SpareInstanceCountPerUltraServer":{
+          "shape":"SpareInstanceCountPerUltraServer",
+          "documentation":"<p>Number of spare instances to reserve per UltraServer for enhanced resiliency. Default is 1.</p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key-value pairs to apply to this training plan.</p>"
@@ -12017,6 +13409,10 @@
         "WorkforceVpcConfig":{
           "shape":"WorkforceVpcConfigRequest",
           "documentation":"<p>Use this parameter to configure a workforce using VPC.</p>"
+        },
+        "IpAddressType":{
+          "shape":"WorkforceIpAddressType",
+          "documentation":"<p>Use this parameter to specify whether you want <code>IPv4</code> only or <code>dualstack</code> (<code>IPv4</code> and <code>IPv6</code>) to support your labeling workforce.</p>"
         }
       }
     },
@@ -12078,6 +13474,11 @@
       }
     },
     "CreationTime":{"type":"timestamp"},
+    "CronScheduleExpression":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "CrossAccountFilterOption":{
       "type":"string",
       "enum":[
@@ -12089,7 +13490,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9.])*"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9.])*"
     },
     "CsvContentTypes":{
       "type":"list",
@@ -12108,6 +13509,10 @@
         "FSxLustreFileSystem":{
           "shape":"FSxLustreFileSystem",
           "documentation":"<p>A custom file system in Amazon FSx for Lustre.</p>"
+        },
+        "S3FileSystem":{
+          "shape":"S3FileSystem",
+          "documentation":"<p>A custom file system in Amazon S3. This is only supported in Amazon SageMaker Unified Studio.</p>"
         }
       },
       "documentation":"<p>A file system, created by you, that you assign to a user profile or space for an Amazon SageMaker AI Domain. Permitted users can access this file system in Amazon SageMaker AI Studio.</p>",
@@ -12123,6 +13528,10 @@
         "FSxLustreFileSystemConfig":{
           "shape":"FSxLustreFileSystemConfig",
           "documentation":"<p>The settings for a custom Amazon FSx for Lustre file system.</p>"
+        },
+        "S3FileSystemConfig":{
+          "shape":"S3FileSystemConfig",
+          "documentation":"<p>Configuration settings for a custom Amazon S3 file system.</p>"
         }
       },
       "documentation":"<p>The settings for assigning a custom file system to a user profile or space for an Amazon SageMaker AI Domain. Permitted users can access this file system in Amazon SageMaker AI Studio.</p>",
@@ -12131,12 +13540,14 @@
     "CustomFileSystemConfigs":{
       "type":"list",
       "member":{"shape":"CustomFileSystemConfig"},
-      "max":10
+      "max":10,
+      "min":0
     },
     "CustomFileSystems":{
       "type":"list",
       "member":{"shape":"CustomFileSystem"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "CustomImage":{
       "type":"structure",
@@ -12151,8 +13562,7 @@
         },
         "ImageVersionNumber":{
           "shape":"ImageVersionNumber",
-          "documentation":"<p>The version number of the CustomImage.</p>",
-          "box":true
+          "documentation":"<p>The version number of the CustomImage.</p>"
         },
         "AppImageConfigName":{
           "shape":"AppImageConfigName",
@@ -12164,23 +13574,27 @@
     "CustomImageContainerArguments":{
       "type":"list",
       "member":{"shape":"NonEmptyString64"},
-      "max":50
+      "max":50,
+      "min":0
     },
     "CustomImageContainerEntrypoint":{
       "type":"list",
       "member":{"shape":"NonEmptyString256"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "CustomImageContainerEnvironmentVariables":{
       "type":"map",
       "key":{"shape":"NonEmptyString256"},
       "value":{"shape":"String256"},
-      "max":25
+      "max":25,
+      "min":0
     },
     "CustomImages":{
       "type":"list",
       "member":{"shape":"CustomImage"},
-      "max":200
+      "max":200,
+      "min":0
     },
     "CustomPosixUserConfig":{
       "type":"structure",
@@ -12204,7 +13618,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,128}"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,128}"
     },
     "CustomerMetadataKeyList":{
       "type":"list",
@@ -12221,7 +13635,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,256}"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*)${1,256}"
     },
     "CustomizedMetricSpecification":{
       "type":"structure",
@@ -12251,7 +13665,8 @@
       "members":{
         "EnableCapture":{
           "shape":"EnableCapture",
-          "documentation":"<p>Whether data capture should be enabled or disabled (defaults to enabled).</p>"
+          "documentation":"<p>Whether data capture should be enabled or disabled (defaults to enabled).</p>",
+          "box":true
         },
         "InitialSamplingPercentage":{
           "shape":"SamplingPercentage",
@@ -12288,7 +13703,8 @@
       "members":{
         "EnableCapture":{
           "shape":"EnableCapture",
-          "documentation":"<p>Whether data capture is enabled or disabled.</p>"
+          "documentation":"<p>Whether data capture is enabled or disabled.</p>",
+          "box":true
         },
         "CaptureStatus":{
           "shape":"CaptureStatus",
@@ -12520,7 +13936,8 @@
         },
         "VolumeSizeInGB":{
           "shape":"OptionalVolumeSizeInGB",
-          "documentation":"<p>The size, in GB, of the ML storage volume attached to the processing instance.</p>"
+          "documentation":"<p>The size, in GB, of the ML storage volume attached to the processing instance.</p>",
+          "box":true
         },
         "RuleParameters":{
           "shape":"RuleParameters",
@@ -12957,8 +14374,7 @@
     },
     "DeleteFlowDefinitionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteHubContentReferenceRequest":{
       "type":"structure",
@@ -13031,8 +14447,7 @@
     },
     "DeleteHumanTaskUiResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteHyperParameterTuningJobRequest":{
       "type":"structure",
@@ -13056,8 +14471,7 @@
     },
     "DeleteImageResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImageVersionRequest":{
       "type":"structure",
@@ -13079,8 +14493,7 @@
     },
     "DeleteImageVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInferenceComponentInput":{
       "type":"structure",
@@ -13302,6 +14715,16 @@
         }
       }
     },
+    "DeleteProcessingJobRequest":{
+      "type":"structure",
+      "required":["ProcessingJobName"],
+      "members":{
+        "ProcessingJobName":{
+          "shape":"ProcessingJobName",
+          "documentation":"<p>The name of the processing job to delete.</p>"
+        }
+      }
+    },
     "DeleteProjectInput":{
       "type":"structure",
       "required":["ProjectName"],
@@ -13358,7 +14781,16 @@
     },
     "DeleteTagsOutput":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteTrainingJobRequest":{
+      "type":"structure",
+      "required":["TrainingJobName"],
       "members":{
+        "TrainingJobName":{
+          "shape":"TrainingJobName",
+          "documentation":"<p>The name of the training job to delete.</p>"
+        }
       }
     },
     "DeleteTrialComponentRequest":{
@@ -13428,8 +14860,7 @@
     },
     "DeleteWorkforceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkteamRequest":{
       "type":"structure",
@@ -13447,18 +14878,21 @@
       "members":{
         "Success":{
           "shape":"Success",
-          "documentation":"<p>Returns <code>true</code> if the work team was successfully deleted; otherwise, returns <code>false</code>.</p>"
+          "documentation":"<p>Returns <code>true</code> if the work team was successfully deleted; otherwise, returns <code>false</code>.</p>",
+          "box":true
         }
       }
     },
     "DependencyCopyPath":{
       "type":"string",
       "max":1023,
+      "min":0,
       "pattern":".*"
     },
     "DependencyOriginPath":{
       "type":"string",
       "max":1023,
+      "min":0,
       "pattern":".*"
     },
     "DeployedImage":{
@@ -13501,6 +14935,24 @@
       },
       "documentation":"<p>The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.</p>"
     },
+    "DeploymentConfiguration":{
+      "type":"structure",
+      "members":{
+        "RollingUpdatePolicy":{
+          "shape":"RollingDeploymentPolicy",
+          "documentation":"<p>The policy that SageMaker uses when updating the AMI versions of the cluster. </p>"
+        },
+        "WaitIntervalInSeconds":{
+          "shape":"WaitTimeIntervalInSeconds",
+          "documentation":"<p>The duration in seconds that SageMaker waits before updating more instances in the cluster.</p>"
+        },
+        "AutoRollbackConfiguration":{
+          "shape":"AutoRollbackAlarms",
+          "documentation":"<p>An array that contains the alarms that SageMaker monitors to know whether to roll back the AMI update.</p>"
+        }
+      },
+      "documentation":"<p>The configuration to use when updating the AMI versions.</p>"
+    },
     "DeploymentRecommendation":{
       "type":"structure",
       "required":["RecommendationStatus"],
@@ -13726,7 +15178,8 @@
         },
         "CertifyForMarketplace":{
           "shape":"CertifyForMarketplace",
-          "documentation":"<p>Whether the algorithm is certified to be listed in Amazon Web Services Marketplace.</p>"
+          "documentation":"<p>Whether the algorithm is certified to be listed in Amazon Web Services Marketplace.</p>",
+          "box":true
         }
       }
     },
@@ -13834,6 +15287,15 @@
           "shape":"AppStatus",
           "documentation":"<p>The status.</p>"
         },
+        "EffectiveTrustedIdentityPropagationStatus":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>The effective status of Trusted Identity Propagation (TIP) for this application. When enabled, user identities from IAM Identity Center are being propagated through the application to TIP enabled Amazon Web Services services. When disabled, standard IAM role-based access is used. </p>"
+        },
+        "RecoveryMode":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates whether the application is launched in recovery mode. </p>",
+          "box":true
+        },
         "LastHealthCheckTimestamp":{
           "shape":"Timestamp",
           "documentation":"<p>The timestamp of the last health check.</p>"
@@ -14000,7 +15462,8 @@
         },
         "GenerateCandidateDefinitionsOnly":{
           "shape":"GenerateCandidateDefinitionsOnly",
-          "documentation":"<p>Indicates whether the output for an AutoML job generates candidate definitions only.</p>"
+          "documentation":"<p>Indicates whether the output for an AutoML job generates candidate definitions only.</p>",
+          "box":true
         },
         "AutoMLJobArtifacts":{
           "shape":"AutoMLJobArtifacts",
@@ -14135,13 +15598,36 @@
         }
       }
     },
-    "DescribeClusterNodeRequest":{
+    "DescribeClusterEventRequest":{
       "type":"structure",
       "required":[
-        "ClusterName",
-        "NodeId"
+        "EventId",
+        "ClusterName"
       ],
       "members":{
+        "EventId":{
+          "shape":"EventId",
+          "documentation":"<p>The unique identifier (UUID) of the event to describe. This ID can be obtained from the <code>ListClusterEvents</code> operation.</p>"
+        },
+        "ClusterName":{
+          "shape":"ClusterNameOrArn",
+          "documentation":"<p>The name or Amazon Resource Name (ARN) of the HyperPod cluster associated with the event.</p>"
+        }
+      }
+    },
+    "DescribeClusterEventResponse":{
+      "type":"structure",
+      "members":{
+        "EventDetails":{
+          "shape":"ClusterEventDetail",
+          "documentation":"<p>Detailed information about the requested cluster event, including event metadata for various resource types such as <code>Cluster</code>, <code>InstanceGroup</code>, <code>Instance</code>, and their associated attributes.</p>"
+        }
+      }
+    },
+    "DescribeClusterNodeRequest":{
+      "type":"structure",
+      "required":["ClusterName"],
+      "members":{
         "ClusterName":{
           "shape":"ClusterNameOrArn",
           "documentation":"<p>The string name or the Amazon Resource Name (ARN) of the SageMaker HyperPod cluster in which the node is.</p>"
@@ -14149,6 +15635,10 @@
         "NodeId":{
           "shape":"ClusterNodeId",
           "documentation":"<p>The ID of the SageMaker HyperPod cluster node.</p>"
+        },
+        "NodeLogicalId":{
+          "shape":"ClusterNodeLogicalId",
+          "documentation":"<p>The logical identifier of the node to describe. You can specify either <code>NodeLogicalId</code> or <code>InstanceId</code>, but not both. <code>NodeLogicalId</code> can be used to describe nodes that are still being provisioned and don't yet have an <code>InstanceId</code> assigned.</p>"
         }
       }
     },
@@ -14204,14 +15694,34 @@
           "shape":"ClusterInstanceGroupDetailsList",
           "documentation":"<p>The instance groups of the SageMaker HyperPod cluster.</p>"
         },
+        "RestrictedInstanceGroups":{
+          "shape":"ClusterRestrictedInstanceGroupDetailsList",
+          "documentation":"<p>The specialized instance groups for training models like Amazon Nova to be created in the SageMaker HyperPod cluster.</p>"
+        },
         "VpcConfig":{"shape":"VpcConfig"},
         "Orchestrator":{
           "shape":"ClusterOrchestrator",
           "documentation":"<p>The type of orchestrator used for the SageMaker HyperPod cluster. </p>"
         },
+        "TieredStorageConfig":{
+          "shape":"ClusterTieredStorageConfig",
+          "documentation":"<p>The current configuration for managed tier checkpointing on the HyperPod cluster. For example, this shows whether the feature is enabled and the percentage of cluster memory allocated for checkpoint storage.</p>"
+        },
         "NodeRecovery":{
           "shape":"ClusterNodeRecovery",
           "documentation":"<p>The node recovery mode configured for the SageMaker HyperPod cluster.</p>"
+        },
+        "NodeProvisioningMode":{
+          "shape":"ClusterNodeProvisioningMode",
+          "documentation":"<p>The mode used for provisioning nodes in the cluster.</p>"
+        },
+        "ClusterRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that HyperPod uses for cluster autoscaling operations.</p>"
+        },
+        "AutoScaling":{
+          "shape":"ClusterAutoScalingConfigOutput",
+          "documentation":"<p>The current autoscaling configuration and status for the autoscaler.</p>"
         }
       }
     },
@@ -14225,7 +15735,8 @@
         },
         "ClusterSchedulerConfigVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the cluster policy.</p>"
+          "documentation":"<p>Version of the cluster policy.</p>",
+          "box":true
         }
       }
     },
@@ -14254,7 +15765,8 @@
         },
         "ClusterSchedulerConfigVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the cluster policy.</p>"
+          "documentation":"<p>Version of the cluster policy.</p>",
+          "box":true
         },
         "Status":{
           "shape":"SchedulerResourceStatus",
@@ -14439,7 +15951,8 @@
         },
         "ComputeQuotaVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the compute allocation definition.</p>"
+          "documentation":"<p>Version of the compute allocation definition.</p>",
+          "box":true
         }
       }
     },
@@ -14473,7 +15986,8 @@
         },
         "ComputeQuotaVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the compute allocation definition.</p>"
+          "documentation":"<p>Version of the compute allocation definition.</p>",
+          "box":true
         },
         "Status":{
           "shape":"SchedulerResourceStatus",
@@ -14741,7 +16255,8 @@
         },
         "MaxModels":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of models.</p>"
+          "documentation":"<p>The maximum number of models.</p>",
+          "box":true
         },
         "NextToken":{
           "shape":"NextToken",
@@ -14876,7 +16391,8 @@
         },
         "MaxResults":{
           "shape":"DeploymentStageMaxResults",
-          "documentation":"<p>The maximum number of results to select (50 by default).</p>"
+          "documentation":"<p>The maximum number of results to select (50 by default).</p>",
+          "box":true
         }
       }
     },
@@ -14908,15 +16424,18 @@
         },
         "EdgeDeploymentSuccess":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices with the successful deployment.</p>"
+          "documentation":"<p>The number of edge devices with the successful deployment.</p>",
+          "box":true
         },
         "EdgeDeploymentPending":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices yet to pick up deployment, or in progress.</p>"
+          "documentation":"<p>The number of edge devices yet to pick up deployment, or in progress.</p>",
+          "box":true
         },
         "EdgeDeploymentFailed":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices that failed the deployment.</p>"
+          "documentation":"<p>The number of edge devices that failed the deployment.</p>",
+          "box":true
         },
         "Stages":{
           "shape":"DeploymentStageStatusSummaries",
@@ -15075,7 +16594,8 @@
         "VpcConfig":{"shape":"VpcConfig"},
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether all model containers deployed to the endpoint are isolated. If they are, no inbound or outbound network calls can be made to or from the model containers.</p>"
+          "documentation":"<p>Indicates whether all model containers deployed to the endpoint are isolated. If they are, no inbound or outbound network calls can be made to or from the model containers.</p>",
+          "box":true
         }
       }
     },
@@ -15543,6 +17063,10 @@
         "CreationTime":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that hub content was created.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last modified time of the hub content.</p>"
         }
       }
     },
@@ -15869,7 +17393,8 @@
         },
         "Horovod":{
           "shape":"Horovod",
-          "documentation":"<p>Indicates Horovod compatibility.</p>"
+          "documentation":"<p>Indicates Horovod compatibility.</p>",
+          "box":true
         },
         "ReleaseNotes":{
           "shape":"ReleaseNotes",
@@ -15941,6 +17466,10 @@
         "InferenceComponentStatus":{
           "shape":"InferenceComponentStatus",
           "documentation":"<p>The status of the inference component.</p>"
+        },
+        "LastDeploymentConfig":{
+          "shape":"InferenceComponentDeploymentConfig",
+          "documentation":"<p>The deployment and rollback settings that you assigned to the inference component.</p>"
         }
       }
     },
@@ -16294,6 +17823,10 @@
           "shape":"TrackingServerStatus",
           "documentation":"<p>The current creation status of the described MLflow Tracking Server.</p>"
         },
+        "TrackingServerMaintenanceStatus":{
+          "shape":"TrackingServerMaintenanceStatus",
+          "documentation":"<p> The current maintenance status of the described MLflow Tracking Server. </p>"
+        },
         "IsActive":{
           "shape":"IsTrackingServerActive",
           "documentation":"<p>Whether the described MLflow Tracking Server is currently active.</p>"
@@ -16308,7 +17841,8 @@
         },
         "AutomaticModelRegistration":{
           "shape":"Boolean",
-          "documentation":"<p>Whether automatic registration of new MLflow models to the SageMaker Model Registry is enabled.</p>"
+          "documentation":"<p>Whether automatic registration of new MLflow models to the SageMaker Model Registry is enabled.</p>",
+          "box":true
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -16423,7 +17957,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card that the model export job exports.</p>"
+          "documentation":"<p>The version of the model card that the model export job exports.</p>",
+          "box":true
         },
         "OutputConfig":{
           "shape":"ModelCardExportOutputConfig",
@@ -16457,7 +17992,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card to describe. If a version is not provided, then the latest version of the model card is described.</p>"
+          "documentation":"<p>The version of the model card to describe. If a version is not provided, then the latest version of the model card is described.</p>",
+          "box":true
         }
       }
     },
@@ -16483,7 +18019,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card.</p>"
+          "documentation":"<p>The version of the model card.</p>",
+          "box":true
         },
         "Content":{
           "shape":"ModelCardContent",
@@ -16625,7 +18162,8 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>If <code>True</code>, no inbound or outbound network calls can be made to or from the model container.</p>"
+          "documentation":"<p>If <code>True</code>, no inbound or outbound network calls can be made to or from the model container.</p>",
+          "box":true
         },
         "DeploymentRecommendation":{
           "shape":"DeploymentRecommendation",
@@ -16742,7 +18280,8 @@
         },
         "CertifyForMarketplace":{
           "shape":"CertifyForMarketplace",
-          "documentation":"<p>Whether the model package is certified for listing on Amazon Web Services Marketplace.</p>"
+          "documentation":"<p>Whether the model package is certified for listing on Amazon Web Services Marketplace.</p>",
+          "box":true
         },
         "ModelApprovalStatus":{
           "shape":"ModelApprovalStatus",
@@ -17008,6 +18547,10 @@
           "shape":"InstanceType",
           "documentation":"<p>The type of ML compute instance running on the notebook instance.</p>"
         },
+        "IpAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type configured for the notebook instance. Returns <code>ipv4</code> for IPv4-only connectivity or <code>dualstack</code> for both IPv4 and IPv6 connectivity.</p>"
+        },
         "SubnetId":{
           "shape":"SubnetId",
           "documentation":"<p>The ID of the VPC subnet.</p>"
@@ -17194,16 +18737,24 @@
         },
         "Status":{
           "shape":"PartnerAppStatus",
-          "documentation":"<p>The status of the SageMaker Partner AI App.</p>"
+          "documentation":"<p>The status of the SageMaker Partner AI App.</p> <ul> <li> <p>Creating: SageMaker AI is creating the partner AI app. The partner AI app is not available during creation.</p> </li> <li> <p>Updating: SageMaker AI is updating the partner AI app. The partner AI app is not available when updating.</p> </li> <li> <p>Deleting: SageMaker AI is deleting the partner AI app. The partner AI app is not available during deletion.</p> </li> <li> <p>Available: The partner AI app is provisioned and accessible.</p> </li> <li> <p>Failed: The partner AI app is in a failed state and isn't available. SageMaker AI is investigating the issue. For further guidance, contact Amazon Web Services Support.</p> </li> <li> <p>UpdateFailed: The partner AI app couldn't be updated but is available.</p> </li> <li> <p>Deleted: The partner AI app is permanently deleted and not available.</p> </li> </ul>"
         },
         "CreationTime":{
           "shape":"Timestamp",
           "documentation":"<p>The time that the SageMaker Partner AI App was created.</p>"
         },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time that the SageMaker Partner AI App was last modified.</p>"
+        },
         "ExecutionRoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The ARN of the IAM role associated with the SageMaker Partner AI App.</p>"
         },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>The Amazon Web Services KMS customer managed key used to encrypt the data at rest associated with SageMaker Partner AI Apps.</p>"
+        },
         "BaseUrl":{
           "shape":"String2048",
           "documentation":"<p>The URL of the SageMaker Partner AI App that the Application SDK uses to support in-app calls for the user.</p>"
@@ -17230,7 +18781,8 @@
         },
         "EnableIamSessionBasedIdentity":{
           "shape":"Boolean",
-          "documentation":"<p>When set to <code>TRUE</code>, the SageMaker Partner AI App sets the Amazon Web Services IAM session name or the authenticated IAM user as the identity of the SageMaker Partner AI App user.</p>"
+          "documentation":"<p>When set to <code>TRUE</code>, the SageMaker Partner AI App sets the Amazon Web Services IAM session name or the authenticated IAM user as the identity of the SageMaker Partner AI App user.</p>",
+          "box":true
         },
         "Error":{
           "shape":"ErrorInfo",
@@ -17316,6 +18868,10 @@
         "SelectiveExecutionConfig":{
           "shape":"SelectiveExecutionConfig",
           "documentation":"<p>The selective execution configuration applied to the pipeline run.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version.</p>"
         }
       }
     },
@@ -17326,6 +18882,10 @@
         "PipelineName":{
           "shape":"PipelineNameOrArn",
           "documentation":"<p>The name or Amazon Resource Name (ARN) of the pipeline to describe.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version to describe.</p>"
         }
       }
     },
@@ -17377,6 +18937,14 @@
         "ParallelismConfiguration":{
           "shape":"ParallelismConfiguration",
           "documentation":"<p>Lists the parallelism configuration applied to the pipeline.</p>"
+        },
+        "PipelineVersionDisplayName":{
+          "shape":"PipelineVersionName",
+          "documentation":"<p>The display name of the pipeline version.</p>"
+        },
+        "PipelineVersionDescription":{
+          "shape":"PipelineVersionDescription",
+          "documentation":"<p>The description of the pipeline version.</p>"
         }
       }
     },
@@ -17503,7 +19071,6 @@
         "ProjectArn",
         "ProjectName",
         "ProjectId",
-        "ServiceCatalogProvisioningDetails",
         "ProjectStatus",
         "CreationTime"
       ],
@@ -17536,6 +19103,10 @@
           "shape":"ProjectStatus",
           "documentation":"<p>The status of the project.</p>"
         },
+        "TemplateProviderDetails":{
+          "shape":"TemplateProviderDetailList",
+          "documentation":"<p> An array of template providers associated with the project. </p>"
+        },
         "CreatedBy":{"shape":"UserContext"},
         "CreationTime":{
           "shape":"Timestamp",
@@ -17548,6 +19119,78 @@
         "LastModifiedBy":{"shape":"UserContext"}
       }
     },
+    "DescribeReservedCapacityRequest":{
+      "type":"structure",
+      "required":["ReservedCapacityArn"],
+      "members":{
+        "ReservedCapacityArn":{
+          "shape":"ReservedCapacityArn",
+          "documentation":"<p>ARN of the reserved capacity to describe.</p>"
+        }
+      }
+    },
+    "DescribeReservedCapacityResponse":{
+      "type":"structure",
+      "required":[
+        "ReservedCapacityArn",
+        "InstanceType",
+        "TotalInstanceCount"
+      ],
+      "members":{
+        "ReservedCapacityArn":{
+          "shape":"ReservedCapacityArn",
+          "documentation":"<p>ARN of the reserved capacity.</p>"
+        },
+        "ReservedCapacityType":{
+          "shape":"ReservedCapacityType",
+          "documentation":"<p>The type of reserved capacity.</p>"
+        },
+        "Status":{
+          "shape":"ReservedCapacityStatus",
+          "documentation":"<p>The current status of the reserved capacity.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The Availability Zone where the reserved capacity is provisioned.</p>"
+        },
+        "DurationHours":{
+          "shape":"ReservedCapacityDurationHours",
+          "documentation":"<p>The total duration of the reserved capacity in hours.</p>"
+        },
+        "DurationMinutes":{
+          "shape":"ReservedCapacityDurationMinutes",
+          "documentation":"<p>The number of minutes for the duration of the reserved capacity. For example, if a reserved capacity starts at 08:55 and ends at 11:30, the minutes field would be 35.</p>"
+        },
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the reserved capacity becomes active.</p>"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the reserved capacity expires.</p>"
+        },
+        "InstanceType":{
+          "shape":"ReservedCapacityInstanceType",
+          "documentation":"<p>The Amazon EC2 instance type used in the reserved capacity.</p>"
+        },
+        "TotalInstanceCount":{
+          "shape":"TotalInstanceCount",
+          "documentation":"<p>The total number of instances allocated to this reserved capacity.</p>"
+        },
+        "AvailableInstanceCount":{
+          "shape":"AvailableInstanceCount",
+          "documentation":"<p>The number of instances currently available for use in this reserved capacity.</p>"
+        },
+        "InUseInstanceCount":{
+          "shape":"InUseInstanceCount",
+          "documentation":"<p>The number of instances currently in use from this reserved capacity.</p>"
+        },
+        "UltraServerSummary":{
+          "shape":"UltraServerSummary",
+          "documentation":"<p>A summary of the UltraServer associated with this reserved capacity.</p>"
+        }
+      }
+    },
     "DescribeSpaceRequest":{
       "type":"structure",
       "required":[
@@ -17699,8 +19342,6 @@
         "ModelArtifacts",
         "TrainingJobStatus",
         "SecondaryStatus",
-        "AlgorithmSpecification",
-        "ResourceConfig",
         "StoppingCondition",
         "CreationTime"
       ],
@@ -17803,15 +19444,18 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>If you want to allow inbound or outbound network calls, except for calls between peers within a training cluster for distributed training, choose <code>True</code>. If you enable network isolation for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>"
+          "documentation":"<p>If you want to allow inbound or outbound network calls, except for calls between peers within a training cluster for distributed training, choose <code>True</code>. If you enable network isolation for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>",
+          "box":true
         },
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithms in distributed training.</p>"
+          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithms in distributed training.</p>",
+          "box":true
         },
         "EnableManagedSpotTraining":{
           "shape":"Boolean",
-          "documentation":"<p>A Boolean indicating whether managed spot training is enabled (<code>True</code>) or not (<code>False</code>).</p>"
+          "documentation":"<p>A Boolean indicating whether managed spot training is enabled (<code>True</code>) or not (<code>False</code>).</p>",
+          "box":true
         },
         "CheckpointConfig":{"shape":"CheckpointConfig"},
         "TrainingTimeInSeconds":{
@@ -17848,7 +19492,7 @@
         },
         "Environment":{
           "shape":"TrainingEnvironmentMap",
-          "documentation":"<p>The environment variables to set in the Docker container.</p>"
+          "documentation":"<p>The environment variables to set in the Docker container.</p> <important> <p>Do not include any security-sensitive information including account access IDs, secrets, or tokens in any environment fields. As part of the shared responsibility model, you are responsible for any potential exposure, unauthorized access, or compromise of your sensitive data if caused by security-sensitive information included in the request environment variable or plain text fields.</p> </important>"
         },
         "RetryStrategy":{
           "shape":"RetryStrategy",
@@ -17934,6 +19578,18 @@
           "shape":"InUseInstanceCount",
           "documentation":"<p>The number of instances currently in use from this training plan.</p>"
         },
+        "UnhealthyInstanceCount":{
+          "shape":"UnhealthyInstanceCount",
+          "documentation":"<p>The number of instances in the training plan that are currently in an unhealthy state.</p>"
+        },
+        "AvailableSpareInstanceCount":{
+          "shape":"AvailableSpareInstanceCount",
+          "documentation":"<p>The number of available spare instances in the training plan.</p>"
+        },
+        "TotalUltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The total number of UltraServers reserved to this training plan.</p>"
+        },
         "TargetResources":{
           "shape":"SageMakerResourceNames",
           "documentation":"<p>The target resources (e.g., SageMaker Training Jobs, SageMaker HyperPod) that can use this training plan.</p> <p>Training plans are specific to their target resource.</p> <ul> <li> <p>A training plan designed for SageMaker training jobs can only be used to schedule and run training jobs.</p> </li> <li> <p>A training plan for HyperPod clusters can be used exclusively to provide compute resources to a cluster's instance group.</p> </li> </ul>"
@@ -18290,7 +19946,8 @@
     },
     "Description":{
       "type":"string",
-      "max":128
+      "max":128,
+      "min":0
     },
     "DesiredWeightAndCapacity":{
       "type":"structure",
@@ -18323,7 +19980,67 @@
     "DestinationS3Uri":{
       "type":"string",
       "max":512,
-      "pattern":"^(https|s3)://([^/])/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/])/?(.*)"
+    },
+    "DetachClusterNodeVolumeRequest":{
+      "type":"structure",
+      "required":[
+        "ClusterArn",
+        "NodeId",
+        "VolumeId"
+      ],
+      "members":{
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of your SageMaker HyperPod cluster containing the target node. Your cluster must use EKS as the orchestration and be in the <code>InService</code> state. </p>"
+        },
+        "NodeId":{
+          "shape":"ClusterNodeId",
+          "documentation":"<p> The unique identifier of the cluster node from which you want to detach the volume. </p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p> The unique identifier of your EBS volume that you want to detach. Your volume must be currently attached to the specified node. </p>"
+        }
+      }
+    },
+    "DetachClusterNodeVolumeResponse":{
+      "type":"structure",
+      "required":[
+        "ClusterArn",
+        "NodeId",
+        "VolumeId",
+        "AttachTime",
+        "Status",
+        "DeviceName"
+      ],
+      "members":{
+        "ClusterArn":{
+          "shape":"ClusterArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of your SageMaker HyperPod cluster where the volume detachment operation was performed. </p>"
+        },
+        "NodeId":{
+          "shape":"ClusterNodeId",
+          "documentation":"<p> The unique identifier of the cluster node from which your volume was detached. </p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p> The unique identifier of your EBS volume that was detached. </p>"
+        },
+        "AttachTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> The original timestamp when your volume was initially attached to the node. </p>"
+        },
+        "Status":{
+          "shape":"VolumeAttachmentStatus",
+          "documentation":"<p> The current status of your volume detachment operation. </p>"
+        },
+        "DeviceName":{
+          "shape":"VolumeDeviceName",
+          "documentation":"<p> The device name assigned to your attached volume on the target instance. </p>"
+        }
+      }
     },
     "DetailedAlgorithmStatus":{
       "type":"string",
@@ -18366,7 +20083,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[a-z\\-]*:[a-z\\-]*:[a-z\\-]*:\\d{12}:[a-z\\-]*/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:[a-z\\-]*:[a-z\\-]*:\\d{12}:[a-z\\-]*/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "DeviceDeploymentStatus":{
       "type":"string",
@@ -18444,17 +20161,17 @@
       "type":"string",
       "max":40,
       "min":1,
-      "pattern":"^[-a-zA-Z0-9_.,;:! ]*$"
+      "pattern":"[-a-zA-Z0-9_.,;:! ]*"
     },
     "DeviceFleetArn":{
       "type":"string",
-      "pattern":"^arn:aws[a-z\\-]*:iam::\\d{12}:device-fleet/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:iam::\\d{12}:device-fleet/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "DeviceFleetDescription":{
       "type":"string",
       "max":800,
       "min":1,
-      "pattern":"^[-a-zA-Z0-9_.,;:! ]*$"
+      "pattern":"[-a-zA-Z0-9_.,;:! ]*"
     },
     "DeviceFleetSummaries":{
       "type":"list",
@@ -18490,7 +20207,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "DeviceNames":{
       "type":"list",
@@ -18506,7 +20223,8 @@
         },
         "Percentage":{
           "shape":"Percentage",
-          "documentation":"<p>Percentage of devices in the fleet to deploy to the current stage.</p>"
+          "documentation":"<p>Percentage of devices in the fleet to deploy to the current stage.</p>",
+          "box":true
         },
         "DeviceNames":{
           "shape":"DeviceNames",
@@ -18528,11 +20246,13 @@
       "members":{
         "ConnectedDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of devices connected with a heartbeat.</p>"
+          "documentation":"<p>The number of devices connected with a heartbeat.</p>",
+          "box":true
         },
         "RegisteredDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of registered devices.</p>"
+          "documentation":"<p>The number of registered devices.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Status of devices.</p>"
@@ -18601,6 +20321,7 @@
     },
     "Dimension":{
       "type":"integer",
+      "box":true,
       "max":8192,
       "min":1
     },
@@ -18632,18 +20353,17 @@
     "DirectoryPath":{
       "type":"string",
       "max":4096,
+      "min":0,
       "pattern":".*"
     },
     "DisableProfiler":{"type":"boolean"},
     "DisableSagemakerServicecatalogPortfolioInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableSagemakerServicecatalogPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateAdditionalCodeRepositories":{"type":"boolean"},
     "DisassociateDefaultCodeRepository":{"type":"boolean"},
@@ -18689,6 +20409,10 @@
         "VpcOnlyTrustedAccounts":{
           "shape":"VpcOnlyTrustedAccounts",
           "documentation":"<p>The list of Amazon Web Services accounts that are trusted when the domain is created in VPC-only mode.</p>"
+        },
+        "RootlessDocker":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>Indicates whether to use rootless Docker.</p>"
         }
       },
       "documentation":"<p>A collection of settings that configure the domain's Docker interaction.</p>"
@@ -18697,7 +20421,7 @@
       "type":"string",
       "max":14,
       "min":5,
-      "pattern":"^\\d{1,4}.\\d{1,4}.\\d{1,4}$"
+      "pattern":"\\d{1,4}.\\d{1,4}.\\d{1,4}"
     },
     "Dollars":{
       "type":"integer",
@@ -18707,6 +20431,7 @@
     "DomainArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:domain/.*"
     },
     "DomainDetails":{
@@ -18746,7 +20471,8 @@
     "DomainId":{
       "type":"string",
       "max":63,
-      "pattern":"^d-(-*[a-z0-9]){1,61}"
+      "min":0,
+      "pattern":"d-(-*[a-z0-9]){1,61}"
     },
     "DomainList":{
       "type":"list",
@@ -18755,12 +20481,14 @@
     "DomainName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "DomainSecurityGroupIds":{
       "type":"list",
       "member":{"shape":"SecurityGroupId"},
-      "max":3
+      "max":3,
+      "min":0
     },
     "DomainSettings":{
       "type":"structure",
@@ -18777,6 +20505,10 @@
           "shape":"ExecutionRoleIdentityConfig",
           "documentation":"<p>The configuration for attaching a SageMaker AI user profile name to the execution role as a <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_monitor.html\">sts:SourceIdentity key</a>.</p>"
         },
+        "TrustedIdentityPropagationSettings":{
+          "shape":"TrustedIdentityPropagationSettings",
+          "documentation":"<p>The Trusted Identity Propagation (TIP) settings for the SageMaker domain. These settings determine how user identities from IAM Identity Center are propagated through the domain to TIP enabled Amazon Web Services services.</p>"
+        },
         "DockerSettings":{
           "shape":"DockerSettings",
           "documentation":"<p>A collection of settings that configure the domain's Docker interaction.</p>"
@@ -18784,6 +20516,14 @@
         "AmazonQSettings":{
           "shape":"AmazonQSettings",
           "documentation":"<p>A collection of settings that configure the Amazon Q experience within the domain. The <code>AuthMode</code> that you use to create the domain must be <code>SSO</code>.</p>"
+        },
+        "UnifiedStudioSettings":{
+          "shape":"UnifiedStudioSettings",
+          "documentation":"<p>The settings that apply to an SageMaker AI domain when you use it in Amazon SageMaker Unified Studio.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type for the domain. Specify <code>ipv4</code> for IPv4-only connectivity or <code>dualstack</code> for both IPv4 and IPv6 connectivity. When you specify <code>dualstack</code>, the subnet must support IPv6 CIDR blocks. If not specified, defaults to <code>ipv4</code>.</p>"
         }
       },
       "documentation":"<p>A collection of settings that apply to the <code>SageMaker Domain</code>. These settings are specified through the <code>CreateDomain</code> API call.</p>"
@@ -18803,6 +20543,10 @@
           "shape":"DomainSecurityGroupIds",
           "documentation":"<p>The security groups for the Amazon Virtual Private Cloud that the <code>Domain</code> uses for communication between Domain-level apps and user apps.</p>"
         },
+        "TrustedIdentityPropagationSettings":{
+          "shape":"TrustedIdentityPropagationSettings",
+          "documentation":"<p>The Trusted Identity Propagation (TIP) settings for the SageMaker domain. These settings determine how user identities from IAM Identity Center are propagated through the domain to TIP enabled Amazon Web Services services.</p>"
+        },
         "DockerSettings":{
           "shape":"DockerSettings",
           "documentation":"<p>A collection of settings that configure the domain's Docker interaction.</p>"
@@ -18810,6 +20554,14 @@
         "AmazonQSettings":{
           "shape":"AmazonQSettings",
           "documentation":"<p>A collection of settings that configure the Amazon Q experience within the domain.</p>"
+        },
+        "UnifiedStudioSettings":{
+          "shape":"UnifiedStudioSettings",
+          "documentation":"<p>The settings that apply to an SageMaker AI domain when you use it in Amazon SageMaker Unified Studio.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type for the domain. Specify <code>ipv4</code> for IPv4-only connectivity or <code>dualstack</code> for both IPv4 and IPv6 connectivity. When you specify <code>dualstack</code>, the subnet must support IPv6 CIDR blocks.</p>"
         }
       },
       "documentation":"<p>A collection of <code>Domain</code> configuration settings to update.</p>"
@@ -18827,7 +20579,10 @@
       ]
     },
     "Double":{"type":"double"},
-    "DoubleParameterValue":{"type":"double"},
+    "DoubleParameterValue":{
+      "type":"double",
+      "box":true
+    },
     "DriftCheckBaselines":{
       "type":"structure",
       "members":{
@@ -18915,19 +20670,23 @@
       "members":{
         "MinCapacity":{
           "shape":"Integer",
-          "documentation":"<p>The recommended minimum capacity to specify for your autoscaling policy.</p>"
+          "documentation":"<p>The recommended minimum capacity to specify for your autoscaling policy.</p>",
+          "box":true
         },
         "MaxCapacity":{
           "shape":"Integer",
-          "documentation":"<p>The recommended maximum capacity to specify for your autoscaling policy.</p>"
+          "documentation":"<p>The recommended maximum capacity to specify for your autoscaling policy.</p>",
+          "box":true
         },
         "ScaleInCooldown":{
           "shape":"Integer",
-          "documentation":"<p>The recommended scale in cooldown time for your autoscaling policy.</p>"
+          "documentation":"<p>The recommended scale in cooldown time for your autoscaling policy.</p>",
+          "box":true
         },
         "ScaleOutCooldown":{
           "shape":"Integer",
-          "documentation":"<p>The recommended scale out cooldown time for your autoscaling policy.</p>"
+          "documentation":"<p>The recommended scale out cooldown time for your autoscaling policy.</p>",
+          "box":true
         },
         "ScalingPolicies":{
           "shape":"ScalingPolicies",
@@ -18995,6 +20754,33 @@
       },
       "documentation":"<p>A collection of EBS storage settings that apply to both private and shared spaces.</p>"
     },
+    "Ec2CapacityReservation":{
+      "type":"structure",
+      "members":{
+        "Ec2CapacityReservationId":{
+          "shape":"Ec2CapacityReservationId",
+          "documentation":"<p>The unique identifier for an EC2 capacity reservation that's part of the ML capacity reservation.</p>"
+        },
+        "TotalInstanceCount":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances that you allocated to the EC2 capacity reservation.</p>"
+        },
+        "AvailableInstanceCount":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances that are currently available in the EC2 capacity reservation.</p>"
+        },
+        "UsedByCurrentEndpoint":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances from the EC2 capacity reservation that are being used by the endpoint.</p>"
+        }
+      },
+      "documentation":"<p>The EC2 capacity reservations that are shared to an ML capacity reservation.</p>"
+    },
+    "Ec2CapacityReservationId":{"type":"string"},
+    "Ec2CapacityReservationsList":{
+      "type":"list",
+      "member":{"shape":"Ec2CapacityReservation"}
+    },
     "Edge":{
       "type":"structure",
       "members":{
@@ -19050,7 +20836,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z\\-]*:\\d{12}:edge-deployment/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z\\-]*:\\d{12}:edge-deployment/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "EdgeDeploymentPlanSummaries":{
       "type":"list",
@@ -19081,15 +20867,18 @@
         },
         "EdgeDeploymentSuccess":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices with the successful deployment.</p>"
+          "documentation":"<p>The number of edge devices with the successful deployment.</p>",
+          "box":true
         },
         "EdgeDeploymentPending":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices yet to pick up the deployment, or in progress.</p>"
+          "documentation":"<p>The number of edge devices yet to pick up the deployment, or in progress.</p>",
+          "box":true
         },
         "EdgeDeploymentFailed":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices that failed the deployment.</p>"
+          "documentation":"<p>The number of edge devices that failed the deployment.</p>",
+          "box":true
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -19117,15 +20906,18 @@
         },
         "EdgeDeploymentSuccessInStage":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices with the successful deployment in the current stage.</p>"
+          "documentation":"<p>The number of edge devices with the successful deployment in the current stage.</p>",
+          "box":true
         },
         "EdgeDeploymentPendingInStage":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices yet to pick up the deployment in current stage, or in progress.</p>"
+          "documentation":"<p>The number of edge devices yet to pick up the deployment in current stage, or in progress.</p>",
+          "box":true
         },
         "EdgeDeploymentFailedInStage":{
           "shape":"Integer",
-          "documentation":"<p>The number of edge devices that failed the deployment in current stage.</p>"
+          "documentation":"<p>The number of edge devices that failed the deployment in current stage.</p>",
+          "box":true
         },
         "EdgeDeploymentStatusMessage":{
           "shape":"String",
@@ -19185,19 +20977,23 @@
         },
         "OfflineDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of devices that have this model version and do not have a heart beat.</p>"
+          "documentation":"<p>The number of devices that have this model version and do not have a heart beat.</p>",
+          "box":true
         },
         "ConnectedDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of devices that have this model version and have a heart beat. </p>"
+          "documentation":"<p>The number of devices that have this model version and have a heart beat. </p>",
+          "box":true
         },
         "ActiveDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of devices that have this model version, a heart beat, and are currently running.</p>"
+          "documentation":"<p>The number of devices that have this model version, a heart beat, and are currently running.</p>",
+          "box":true
         },
         "SamplingDeviceCount":{
           "shape":"Long",
-          "documentation":"<p>The number of devices with this model version and are producing sample data.</p>"
+          "documentation":"<p>The number of devices with this model version and are producing sample data.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Status of edge devices with this model.</p>"
@@ -19259,7 +21055,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z\\-]*:\\d{12}:edge-packaging-job/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z\\-]*:\\d{12}:edge-packaging-job/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "EdgePackagingJobStatus":{
       "type":"string",
@@ -19368,16 +21164,25 @@
       "type":"list",
       "member":{"shape":"Edge"}
     },
+    "EfaEnis":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
     "EfsUid":{
       "type":"string",
       "max":10,
+      "min":0,
       "pattern":"\\d+"
     },
     "EksClusterArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[a-z\\-]*:eks:[a-z0-9\\-]*:[0-9]{12}:cluster\\/[0-9A-Za-z][A-Za-z0-9\\-_]{0,99}$"
+      "pattern":"arn:aws[a-z\\-]*:eks:[a-z0-9\\-]*:[0-9]{12}:cluster\\/[0-9A-Za-z][A-Za-z0-9\\-_]{0,99}"
+    },
+    "EksRoleAccessEntries":{
+      "type":"list",
+      "member":{"shape":"String"}
     },
     "EmrServerlessComputeConfig":{
       "type":"structure",
@@ -19388,7 +21193,7 @@
           "documentation":"<p>The ARN of the IAM role granting the AutoML job V2 the necessary permissions access policies to list, connect to, or manage EMR Serverless jobs. For detailed information about the required permissions of this role, see \"How to configure AutoML to initiate a remote job on EMR Serverless for large datasets\" in <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-automate-model-development-create-experiment.html\">Create a regression or classification job for tabular data using the AutoML API</a> or <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-create-experiment-timeseries-forecasting.html#timeseries-forecasting-api-optional-params\">Create an AutoML job for time-series forecasting using the API</a>.</p>"
         }
       },
-      "documentation":"<note> <p>This data type is intended for use exclusively by SageMaker Canvas and cannot be used in other contexts at the moment.</p> </note> <p>Specifies the compute configuration for the EMR Serverless job.</p>"
+      "documentation":"<p><note> <p>This data type is intended for use exclusively by SageMaker Canvas and cannot be used in other contexts at the moment.</p> </note> <p>Specifies the compute configuration for the EMR Serverless job.</p></p>"
     },
     "EmrServerlessSettings":{
       "type":"structure",
@@ -19418,21 +21223,32 @@
       },
       "documentation":"<p>The configuration parameters that specify the IAM roles assumed by the execution role of SageMaker (assumable roles) and the cluster instances or job execution environments (execution roles or runtime roles) to manage and access resources required for running Amazon EMR clusters or Amazon EMR Serverless applications.</p>"
     },
+    "EnableCaching":{"type":"boolean"},
     "EnableCapture":{"type":"boolean"},
-    "EnableInfraCheck":{"type":"boolean"},
-    "EnableIotRoleAlias":{"type":"boolean"},
-    "EnableRemoteDebug":{"type":"boolean"},
+    "EnableInfraCheck":{
+      "type":"boolean",
+      "box":true
+    },
+    "EnableIotRoleAlias":{
+      "type":"boolean",
+      "box":true
+    },
+    "EnableRemoteDebug":{
+      "type":"boolean",
+      "box":true
+    },
     "EnableSagemakerServicecatalogPortfolioInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableSagemakerServicecatalogPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "EnableSessionTagChaining":{
+      "type":"boolean",
+      "box":true
     },
-    "EnableSessionTagChaining":{"type":"boolean"},
     "EnabledOrDisabled":{
       "type":"string",
       "enum":[
@@ -19514,11 +21330,13 @@
     "EndpointConfigName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "EndpointConfigNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "EndpointConfigSortKey":{
@@ -19680,11 +21498,13 @@
     "EndpointName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "EndpointNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "EndpointOutputConfiguration":{
@@ -19732,7 +21552,8 @@
     "EndpointPerformances":{
       "type":"list",
       "member":{"shape":"EndpointPerformance"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "EndpointSortKey":{
       "type":"string",
@@ -19806,29 +21627,57 @@
     "Endpoints":{
       "type":"list",
       "member":{"shape":"EndpointInfo"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "EntityDescription":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*"
     },
     "EntityName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+    },
+    "EnvironmentConfig":{
+      "type":"structure",
+      "members":{
+        "FSxLustreConfig":{
+          "shape":"FSxLustreConfig",
+          "documentation":"<p>Configuration settings for an Amazon FSx for Lustre file system to be used with the cluster.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for the restricted instance groups (RIG) environment.</p>"
+    },
+    "EnvironmentConfigDetails":{
+      "type":"structure",
+      "members":{
+        "FSxLustreConfig":{
+          "shape":"FSxLustreConfig",
+          "documentation":"<p>Configuration settings for an Amazon FSx for Lustre file system to be used with the cluster.</p>"
+        },
+        "S3OutputPath":{
+          "shape":"S3Uri",
+          "documentation":"<p>The Amazon S3 path where output data from the restricted instance group (RIG) environment will be stored.</p>"
+        }
+      },
+      "documentation":"<p>The configuration details for the restricted instance groups (RIG) environment.</p>"
     },
     "EnvironmentKey":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[a-zA-Z_][a-zA-Z0-9_]*"
     },
     "EnvironmentMap":{
       "type":"map",
       "key":{"shape":"EnvironmentKey"},
       "value":{"shape":"EnvironmentValue"},
-      "max":100
+      "max":100,
+      "min":0
     },
     "EnvironmentParameter":{
       "type":"structure",
@@ -19872,6 +21721,7 @@
     "EnvironmentValue":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "ErrorInfo":{
@@ -19888,14 +21738,57 @@
       },
       "documentation":"<p>This is an error field object that contains the error code and the reason for an operation failure.</p>"
     },
+    "EventDetails":{
+      "type":"structure",
+      "members":{
+        "EventMetadata":{
+          "shape":"EventMetadata",
+          "documentation":"<p>Metadata specific to the event, which may include information about the cluster, instance group, or instance involved.</p>"
+        }
+      },
+      "documentation":"<p>Detailed information about a specific event, including event metadata.</p>"
+    },
+    "EventId":{
+      "type":"string",
+      "pattern":"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
+    },
+    "EventMetadata":{
+      "type":"structure",
+      "members":{
+        "Cluster":{
+          "shape":"ClusterMetadata",
+          "documentation":"<p>Metadata specific to cluster-level events.</p>"
+        },
+        "InstanceGroup":{
+          "shape":"InstanceGroupMetadata",
+          "documentation":"<p>Metadata specific to instance group-level events.</p>"
+        },
+        "InstanceGroupScaling":{
+          "shape":"InstanceGroupScalingMetadata",
+          "documentation":"<p>Metadata related to instance group scaling events.</p>"
+        },
+        "Instance":{
+          "shape":"InstanceMetadata",
+          "documentation":"<p>Metadata specific to instance-level events.</p>"
+        }
+      },
+      "documentation":"<p>Metadata associated with a cluster event, which may include details about various resource types.</p>",
+      "union":true
+    },
+    "EventSortBy":{
+      "type":"string",
+      "enum":["EventTime"]
+    },
     "ExcludeFeaturesAttribute":{
       "type":"string",
-      "max":100
+      "max":100,
+      "min":0
     },
     "ExecutionRoleArns":{
       "type":"list",
       "member":{"shape":"RoleArn"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "ExecutionRoleIdentityConfig":{
       "type":"string",
@@ -19919,6 +21812,7 @@
     "ExitMessage":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "Experiment":{
@@ -19959,11 +21853,12 @@
           "documentation":"<p>The list of tags that are associated with the experiment. You can use <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html\">Search</a> API to search on the tags.</p>"
         }
       },
-      "documentation":"<p>The properties of an experiment as returned by the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html\">Search</a> API.</p>"
+      "documentation":"<p>The properties of an experiment as returned by the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Search.html\">Search</a> API. For information about experiments, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateExperiment.html\">CreateExperiment</a> API.</p>"
     },
     "ExperimentArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:experiment/.*"
     },
     "ExperimentConfig":{
@@ -19991,13 +21886,14 @@
     "ExperimentDescription":{
       "type":"string",
       "max":3072,
+      "min":0,
       "pattern":".*"
     },
     "ExperimentEntityName":{
       "type":"string",
       "max":120,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"
     },
     "ExperimentEntityNameOrArn":{
       "type":"string",
@@ -20023,6 +21919,7 @@
     "ExperimentSourceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:.*"
     },
     "ExperimentSummaries":{
@@ -20058,6 +21955,7 @@
     },
     "ExpiresInSeconds":{
       "type":"integer",
+      "box":true,
       "max":300,
       "min":5
     },
@@ -20085,6 +21983,24 @@
       },
       "documentation":"<p>A parameter to activate explainers.</p>"
     },
+    "FSxLustreConfig":{
+      "type":"structure",
+      "required":[
+        "SizeInGiB",
+        "PerUnitStorageThroughput"
+      ],
+      "members":{
+        "SizeInGiB":{
+          "shape":"FSxLustreSizeInGiB",
+          "documentation":"<p>The storage capacity of the Amazon FSx for Lustre file system, specified in gibibytes (GiB).</p>"
+        },
+        "PerUnitStorageThroughput":{
+          "shape":"FSxLustrePerUnitStorageThroughput",
+          "documentation":"<p>The throughput capacity of the Amazon FSx for Lustre file system, measured in MB/s per TiB of storage.</p>"
+        }
+      },
+      "documentation":"<p>Configuration settings for an Amazon FSx for Lustre file system to be used with the cluster.</p>"
+    },
     "FSxLustreFileSystem":{
       "type":"structure",
       "required":["FileSystemId"],
@@ -20111,6 +22027,18 @@
       },
       "documentation":"<p>The settings for assigning a custom Amazon FSx for Lustre file system to a user profile or space for an Amazon SageMaker Domain.</p>"
     },
+    "FSxLustrePerUnitStorageThroughput":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":125
+    },
+    "FSxLustreSizeInGiB":{
+      "type":"integer",
+      "box":true,
+      "max":100800,
+      "min":1200
+    },
     "FailStepMetadata":{
       "type":"structure",
       "members":{
@@ -20130,7 +22058,8 @@
     },
     "FailureReason":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "FairShare":{
       "type":"string",
@@ -20141,6 +22070,7 @@
     },
     "FairShareWeight":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":0
     },
@@ -20252,10 +22182,12 @@
     "FeatureGroupArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:feature-group/.*"
     },
     "FeatureGroupMaxResults":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
@@ -20263,7 +22195,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]([_-]*[a-zA-Z0-9]){0,63}"
+      "pattern":"[a-zA-Z0-9]([_-]*[a-zA-Z0-9]){0,63}"
     },
     "FeatureGroupNameContains":{
       "type":"string",
@@ -20379,7 +22311,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63}"
+      "pattern":"[a-zA-Z0-9]([-_]*[a-zA-Z0-9]){0,63}"
     },
     "FeatureParameter":{
       "type":"structure",
@@ -20398,24 +22330,26 @@
     "FeatureParameterAdditions":{
       "type":"list",
       "member":{"shape":"FeatureParameter"},
-      "max":25
+      "max":25,
+      "min":0
     },
     "FeatureParameterKey":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)"
     },
     "FeatureParameterRemovals":{
       "type":"list",
       "member":{"shape":"FeatureParameterKey"},
-      "max":25
+      "max":25,
+      "min":0
     },
     "FeatureParameterValue":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)"
     },
     "FeatureParameters":{
       "type":"list",
@@ -20516,13 +22450,13 @@
       "type":"string",
       "max":21,
       "min":11,
-      "pattern":"^(fs-[0-9a-f]{8,})$"
+      "pattern":"(fs-[0-9a-f]{8,})"
     },
     "FileSystemPath":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^\\/\\S*$"
+      "pattern":"\\/\\S*"
     },
     "FileSystemType":{
       "type":"string",
@@ -20542,7 +22476,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9\\_\\-]+$"
+      "pattern":"[a-zA-Z0-9\\_\\-]+"
     },
     "FillingTransformations":{
       "type":"map",
@@ -20612,7 +22546,8 @@
         },
         "Value":{
           "shape":"MetricValue",
-          "documentation":"<p>The value of the metric with the best result.</p>"
+          "documentation":"<p>The value of the metric with the best result.</p>",
+          "box":true
         },
         "StandardMetricName":{
           "shape":"AutoMLMetricEnum",
@@ -20638,7 +22573,8 @@
         },
         "Value":{
           "shape":"MetricValue",
-          "documentation":"<p>The value of the objective metric.</p>"
+          "documentation":"<p>The value of the objective metric.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Shows the latest objective metric emitted by a training job that was launched by a hyperparameter tuning job. You define the objective metric in the <code>HyperParameterTuningJobObjective</code> parameter of <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html\">HyperParameterTuningJobConfig</a>.</p>"
@@ -20660,13 +22596,14 @@
     "FlowDefinitionArn":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]+:[0-9]{12}:flow-definition/.*"
     },
     "FlowDefinitionName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-z0-9](-*[a-z0-9]){0,62}"
+      "pattern":"[a-z0-9](-*[a-z0-9]){0,62}"
     },
     "FlowDefinitionOutputConfig":{
       "type":"structure",
@@ -20730,10 +22667,12 @@
     },
     "FlowDefinitionTaskAvailabilityLifetimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "FlowDefinitionTaskCount":{
       "type":"integer",
+      "box":true,
       "max":3,
       "min":1
     },
@@ -20747,7 +22686,7 @@
       "type":"string",
       "max":30,
       "min":1,
-      "pattern":"^[A-Za-z0-9]+( [A-Za-z0-9]+)*$"
+      "pattern":"[A-Za-z0-9]+( [A-Za-z0-9]+)*"
     },
     "FlowDefinitionTaskKeywords":{
       "type":"list",
@@ -20757,22 +22696,24 @@
     },
     "FlowDefinitionTaskTimeLimitInSeconds":{
       "type":"integer",
+      "box":true,
       "min":30
     },
     "FlowDefinitionTaskTitle":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD]*$"
+      "pattern":"[\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD]*"
     },
     "ForecastFrequency":{
       "type":"string",
       "max":5,
       "min":1,
-      "pattern":"^1Y|Y|([1-9]|1[0-1])M|M|[1-4]W|W|[1-6]D|D|([1-9]|1[0-9]|2[0-3])H|H|([1-9]|[1-5][0-9])min$"
+      "pattern":"1Y|Y|([1-9]|1[0-1])M|M|[1-4]W|W|[1-6]D|D|([1-9]|1[0-9]|2[0-3])H|H|([1-9]|[1-5][0-9])min"
     },
     "ForecastHorizon":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "ForecastQuantile":{
@@ -20914,8 +22855,7 @@
     },
     "GetSagemakerServicecatalogPortfolioStatusInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetSagemakerServicecatalogPortfolioStatusOutput":{
       "type":"structure",
@@ -21010,6 +22950,7 @@
     },
     "Gid":{
       "type":"long",
+      "box":true,
       "max":4000000,
       "min":1001
     },
@@ -21046,7 +22987,7 @@
       "type":"string",
       "max":1024,
       "min":11,
-      "pattern":"^https://([^/]+)/?.{3,1016}$"
+      "pattern":"https://([^/]+)/?.{3,1016}"
     },
     "Group":{
       "type":"string",
@@ -21100,7 +23041,8 @@
     "HiddenSageMakerImageVersionAliasesList":{
       "type":"list",
       "member":{"shape":"HiddenSageMakerImage"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "HolidayConfig":{
       "type":"list",
@@ -21126,14 +23068,27 @@
       "min":0
     },
     "Horovod":{"type":"boolean"},
+    "HubAccessConfig":{
+      "type":"structure",
+      "required":["HubContentArn"],
+      "members":{
+        "HubContentArn":{
+          "shape":"HubContentArn",
+          "documentation":"<p>The ARN of your private model hub content. This should be a <code>ModelReference</code> resource type that points to a SageMaker JumpStart public hub model.</p>"
+        }
+      },
+      "documentation":"<p>The configuration for a private hub model reference that points to a public SageMaker JumpStart model.</p> <p>For more information about private hubs, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-curated-hubs.html\">Private curated hubs for foundation model access control in JumpStart</a>.</p>"
+    },
     "HubArn":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "HubContentArn":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "HubContentDependency":{
@@ -21153,21 +23108,25 @@
     "HubContentDependencyList":{
       "type":"list",
       "member":{"shape":"HubContentDependency"},
-      "max":50
+      "max":50,
+      "min":0
     },
     "HubContentDescription":{
       "type":"string",
       "max":1023,
+      "min":0,
       "pattern":".*"
     },
     "HubContentDisplayName":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "HubContentDocument":{
       "type":"string",
       "max":65535,
+      "min":0,
       "pattern":".*"
     },
     "HubContentInfo":{
@@ -21243,17 +23202,20 @@
     },
     "HubContentMarkdown":{
       "type":"string",
-      "max":65535
+      "max":65535,
+      "min":0
     },
     "HubContentName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "HubContentSearchKeywordList":{
       "type":"list",
       "member":{"shape":"HubSearchKeyword"},
-      "max":50
+      "max":50,
+      "min":0
     },
     "HubContentSortBy":{
       "type":"string",
@@ -21277,7 +23239,8 @@
       "type":"string",
       "enum":[
         "Supported",
-        "Deprecated"
+        "Deprecated",
+        "Restricted"
       ]
     },
     "HubContentType":{
@@ -21292,16 +23255,18 @@
       "type":"string",
       "max":14,
       "min":5,
-      "pattern":"^\\d{1,4}.\\d{1,4}.\\d{1,4}$"
+      "pattern":"\\d{1,4}.\\d{1,4}.\\d{1,4}"
     },
     "HubDescription":{
       "type":"string",
       "max":1023,
+      "min":0,
       "pattern":".*"
     },
     "HubDisplayName":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "HubInfo":{
@@ -21356,11 +23321,12 @@
     "HubName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "HubNameOrArn":{
       "type":"string",
-      "pattern":"^(arn:[a-z0-9-\\.]{1,63}:sagemaker:\\w+(?:-\\w+)+:(\\d{12}|aws):hub\\/)?[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"(arn:[a-z0-9-\\.]{1,63}:sagemaker:\\w+(?:-\\w+)+:(\\d{12}|aws):hub\\/)?[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "HubS3StorageConfig":{
       "type":"structure",
@@ -21375,12 +23341,14 @@
     "HubSearchKeyword":{
       "type":"string",
       "max":255,
-      "pattern":"^[^A-Z]*$"
+      "min":0,
+      "pattern":"[^A-Z]*"
     },
     "HubSearchKeywordList":{
       "type":"list",
       "member":{"shape":"HubSearchKeyword"},
-      "max":50
+      "max":50,
+      "min":0
     },
     "HubSortBy":{
       "type":"string",
@@ -21405,7 +23373,8 @@
     },
     "HumanLoopActivationConditions":{
       "type":"string",
-      "max":10240
+      "max":10240,
+      "min":0
     },
     "HumanLoopActivationConditionsConfig":{
       "type":"structure",
@@ -21508,7 +23477,7 @@
         },
         "PreHumanTaskLambdaArn":{
           "shape":"LambdaFunctionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of a Lambda function that is run before a data object is sent to a human worker. Use this function to provide input to a custom labeling job.</p> <p>For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a>, use one of the following Amazon SageMaker Ground Truth Lambda function ARNs for <code>PreHumanTaskLambdaArn</code>. For custom labeling workflows, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html#sms-custom-templates-step3-prelambda\">Pre-annotation Lambda</a>. </p> <p> <b>Bounding box</b> - Finds the most similar boxes from different workers based on the Jaccard index of the boxes.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-BoundingBox</code> </p> </li> </ul> <p> <b>Image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-ImageMultiClass</code> </p> </li> </ul> <p> <b>Multi-label image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Semantic segmentation</b> - Treats each pixel in an image as a multi-class classification and treats pixel annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-SemanticSegmentation</code> </p> </li> </ul> <p> <b>Text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-TextMultiClass</code> </p> </li> </ul> <p> <b>Multi-label text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-TextMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Named entity recognition</b> - Groups similar selections and calculates aggregate boundaries, resolving to most-assigned label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-NamedEntityRecognition</code> </p> </li> </ul> <p> <b>Video Classification</b> - Use this task type when you need workers to classify videos using predefined labels that you specify. Workers are shown videos and are asked to choose one label for each video.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoMultiClass</code> </p> </li> </ul> <p> <b>Video Frame Object Detection</b> - Use this task type to have workers identify and locate objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to identify and localize various objects in a series of video frames, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking</b> - Use this task type to have workers track the movement of objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to track the movement of objects, such as cars, bikes, and pedestrians. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Modalities</b> </p> <p>Use the following pre-annotation lambdas for 3D point cloud labeling modality tasks. See <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-point-cloud-task-types.html\">3D Point Cloud Task types </a> to learn more. </p> <p> <b>3D Point Cloud Object Detection</b> - Use this task type when you want workers to classify objects in a 3D point cloud by drawing 3D cuboids around objects. For example, you can use this task type to ask workers to identify different types of objects in a point cloud, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking</b> - Use this task type when you want workers to draw 3D cuboids around objects that appear in a sequence of 3D point cloud frames. For example, you can use this task type to ask workers to track the movement of vehicles across multiple point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation</b> - Use this task type when you want workers to create a point-level semantic segmentation masks by painting objects in a 3D point cloud using different colors where each color is assigned to one of the classes you specify.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Use the following ARNs for Label Verification and Adjustment Jobs</b> </p> <p>Use label verification and adjustment jobs to review and adjust labels. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels </a>.</p> <p> <b>Bounding box verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgement for bounding box labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VerificationBoundingBox</code> </p> </li> </ul> <p> <b>Bounding box adjustment</b> - Finds the most similar boxes from different workers based on the Jaccard index of the adjusted annotations.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentBoundingBox</code> </p> </li> </ul> <p> <b>Semantic segmentation verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgment for semantic segmentation labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VerificationSemanticSegmentation</code> </p> </li> </ul> <p> <b>Semantic segmentation adjustment</b> - Treats each pixel in an image as a multi-class classification and treats pixel adjusted annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> </ul> <p> <b>Video Frame Object Detection Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to classify and localize objects in a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to track object movement across a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> </ul> <p> <b>3D point cloud object detection adjustment</b> - Adjust 3D cuboids in a point cloud frame. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D point cloud object tracking adjustment</b> - Adjust 3D cuboids across a sequence of point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D point cloud semantic segmentation adjustment</b> - Adjust semantic segmentation masks in a 3D point cloud. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a Lambda function that is run before a data object is sent to a human worker. Use this function to provide input to a custom labeling job.</p> <p>For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-task-types.html\">built-in task types</a>, use one of the following Amazon SageMaker Ground Truth Lambda function ARNs for <code>PreHumanTaskLambdaArn</code>. For custom labeling workflows, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html#sms-custom-templates-step3-prelambda\">Pre-annotation Lambda</a>. </p> <p> <b>Bounding box</b> - Finds the most similar boxes from different workers based on the Jaccard index of the boxes.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-BoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-BoundingBox</code> </p> </li> </ul> <p> <b>Image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-ImageMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-ImageMultiClass</code> </p> </li> </ul> <p> <b>Multi-label image classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of an image based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-ImageMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Semantic segmentation</b> - Treats each pixel in an image as a multi-class classification and treats pixel annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-SemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-SemanticSegmentation</code> </p> </li> </ul> <p> <b>Text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-TextMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-TextMultiClass</code> </p> </li> </ul> <p> <b>Multi-label text classification</b> - Uses a variant of the Expectation Maximization approach to estimate the true classes of text based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-TextMultiClassMultiLabel</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-TextMultiClassMultiLabel</code> </p> </li> </ul> <p> <b>Named entity recognition</b> - Groups similar selections and calculates aggregate boundaries, resolving to most-assigned label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-NamedEntityRecognition</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-NamedEntityRecognition</code> </p> </li> </ul> <p> <b>Video Classification</b> - Use this task type when you need workers to classify videos using predefined labels that you specify. Workers are shown videos and are asked to choose one label for each video.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoMultiClass</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoMultiClass</code> </p> </li> </ul> <p> <b>Video Frame Object Detection</b> - Use this task type to have workers identify and locate objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to identify and localize various objects in a series of video frames, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking</b> - Use this task type to have workers track the movement of objects in a sequence of video frames (images extracted from a video) using bounding boxes. For example, you can use this task to ask workers to track the movement of objects, such as cars, bikes, and pedestrians. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VideoObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Modalities</b> </p> <p>Use the following pre-annotation lambdas for 3D point cloud labeling modality tasks. See <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-point-cloud-task-types.html\">3D Point Cloud Task types </a> to learn more. </p> <p> <b>3D Point Cloud Object Detection</b> - Use this task type when you want workers to classify objects in a 3D point cloud by drawing 3D cuboids around objects. For example, you can use this task type to ask workers to identify different types of objects in a point cloud, such as cars, bikes, and pedestrians.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D Point Cloud Object Tracking</b> - Use this task type when you want workers to draw 3D cuboids around objects that appear in a sequence of 3D point cloud frames. For example, you can use this task type to ask workers to track the movement of vehicles across multiple point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D Point Cloud Semantic Segmentation</b> - Use this task type when you want workers to create a point-level semantic segmentation masks by painting objects in a 3D point cloud using different colors where each color is assigned to one of the classes you specify.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Use the following ARNs for Label Verification and Adjustment Jobs</b> </p> <p>Use label verification and adjustment jobs to review and adjust labels. To learn more, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-verification-data.html\">Verify and Adjust Labels </a>.</p> <p> <b>Bounding box verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgement for bounding box labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VerificationBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VerificationBoundingBox</code> </p> </li> </ul> <p> <b>Bounding box adjustment</b> - Finds the most similar boxes from different workers based on the Jaccard index of the adjusted annotations.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentBoundingBox</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentBoundingBox</code> </p> </li> </ul> <p> <b>Semantic segmentation verification</b> - Uses a variant of the Expectation Maximization approach to estimate the true class of verification judgment for semantic segmentation labels based on annotations from individual workers.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-VerificationSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-VerificationSemanticSegmentation</code> </p> </li> </ul> <p> <b>Semantic segmentation adjustment</b> - Treats each pixel in an image as a multi-class classification and treats pixel adjusted annotations from workers as \"votes\" for the correct label.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentSemanticSegmentation</code> </p> </li> </ul> <p> <b>Video Frame Object Detection Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to classify and localize objects in a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentVideoObjectDetection</code> </p> </li> </ul> <p> <b>Video Frame Object Tracking Adjustment</b> - Use this task type when you want workers to adjust bounding boxes that workers have added to video frames to track object movement across a sequence of video frames.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-AdjustmentVideoObjectTracking</code> </p> </li> </ul> <p> <b>3D point cloud object detection adjustment</b> - Adjust 3D cuboids in a point cloud frame. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudObjectDetection</code> </p> </li> </ul> <p> <b>3D point cloud object tracking adjustment</b> - Adjust 3D cuboids across a sequence of point cloud frames. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudObjectTracking</code> </p> </li> </ul> <p> <b>3D point cloud semantic segmentation adjustment</b> - Adjust semantic segmentation masks in a 3D point cloud. </p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-Adjustment3DPointCloudSemanticSegmentation</code> </p> </li> </ul> <p> <b>Generative AI/Custom</b> - Direct passthrough of input data without any transformation.</p> <ul> <li> <p> <code>arn:aws:lambda:us-east-1:432418664414:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-east-2:266458841044:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:us-west-2:081040173940:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ca-central-1:918755190332:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-1:568282634449:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-west-2:487402164563:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:eu-central-1:203001061592:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-1:477331159723:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-northeast-2:845288260483:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-south-1:565803892007:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-1:377565633583:function:PRE-PassThrough</code> </p> </li> <li> <p> <code>arn:aws:lambda:ap-southeast-2:454466003867:function:PRE-PassThrough</code> </p> </li> </ul>"
         },
         "TaskKeywords":{
           "shape":"TaskKeywords",
@@ -21552,13 +23521,14 @@
     "HumanTaskUiArn":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]+:[0-9]{12}:human-task-ui/.*"
     },
     "HumanTaskUiName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-z0-9](-*[a-z0-9])*"
+      "pattern":"[a-z0-9](-*[a-z0-9])*"
     },
     "HumanTaskUiStatus":{
       "type":"string",
@@ -21617,6 +23587,7 @@
     "HyperParameterKey":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "HyperParameterScalingType":{
@@ -21653,11 +23624,13 @@
         },
         "IsTunable":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether this hyperparameter is tunable in a hyperparameter tuning job.</p>"
+          "documentation":"<p>Indicates whether this hyperparameter is tunable in a hyperparameter tuning job.</p>",
+          "box":true
         },
         "IsRequired":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether this hyperparameter is required.</p>"
+          "documentation":"<p>Indicates whether this hyperparameter is required.</p>",
+          "box":true
         },
         "DefaultValue":{
           "shape":"HyperParameterValue",
@@ -21725,15 +23698,18 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Isolates the training container. No inbound or outbound network calls can be made, except for calls between peers within a training cluster for distributed training. If network isolation is used for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>"
+          "documentation":"<p>Isolates the training container. No inbound or outbound network calls can be made, except for calls between peers within a training cluster for distributed training. If network isolation is used for training jobs that are configured to use a VPC, SageMaker downloads and uploads customer data and model artifacts through the specified VPC, but the training container does not have network access.</p>",
+          "box":true
         },
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training.</p>"
+          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training.</p>",
+          "box":true
         },
         "EnableManagedSpotTraining":{
           "shape":"Boolean",
-          "documentation":"<p>A Boolean indicating whether managed spot training is enabled (<code>True</code>) or not (<code>False</code>).</p>"
+          "documentation":"<p>A Boolean indicating whether managed spot training is enabled (<code>True</code>) or not (<code>False</code>).</p>",
+          "box":true
         },
         "CheckpointConfig":{"shape":"CheckpointConfig"},
         "RetryStrategy":{
@@ -21751,7 +23727,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
     },
     "HyperParameterTrainingJobDefinitions":{
       "type":"list",
@@ -21762,17 +23738,20 @@
     "HyperParameterTrainingJobEnvironmentKey":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":"[a-zA-Z_][a-zA-Z0-9_]*"
     },
     "HyperParameterTrainingJobEnvironmentMap":{
       "type":"map",
       "key":{"shape":"HyperParameterTrainingJobEnvironmentKey"},
       "value":{"shape":"HyperParameterTrainingJobEnvironmentValue"},
-      "max":48
+      "max":48,
+      "min":0
     },
     "HyperParameterTrainingJobEnvironmentValue":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "HyperParameterTrainingJobSummaries":{
@@ -21858,11 +23837,13 @@
         },
         "InstanceCount":{
           "shape":"TrainingInstanceCount",
-          "documentation":"<p>The number of instances of the type specified by <code>InstanceType</code>. Choose an instance count larger than 1 for distributed training algorithms. See <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html\">Step 2: Launch a SageMaker Distributed Training Job Using the SageMaker Python SDK</a> for more information.</p>"
+          "documentation":"<p>The number of instances of the type specified by <code>InstanceType</code>. Choose an instance count larger than 1 for distributed training algorithms. See <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html\">Step 2: Launch a SageMaker Distributed Training Job Using the SageMaker Python SDK</a> for more information.</p>",
+          "box":true
         },
         "VolumeSizeInGB":{
           "shape":"VolumeSizeInGB",
-          "documentation":"<p>The volume size in GB of the data to be processed for hyperparameter optimization (optional).</p>"
+          "documentation":"<p>The volume size in GB of the data to be processed for hyperparameter optimization (optional).</p>",
+          "box":true
         }
       },
       "documentation":"<p>The configuration for hyperparameter tuning resources for use in training jobs launched by the tuning job. These resources include compute instances and storage volumes. Specify one or more compute instance configurations and allocation strategies to select resources (optional).</p>"
@@ -21876,6 +23857,7 @@
     "HyperParameterTuningJobArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:hyper-parameter-tuning-job/.*"
     },
     "HyperParameterTuningJobCompletionDetails":{
@@ -21883,7 +23865,8 @@
       "members":{
         "NumberOfTrainingJobsObjectiveNotImproving":{
           "shape":"Integer",
-          "documentation":"<p>The number of training jobs launched by a tuning job that are not improving (1% or less) as measured by model performance evaluated against an objective function.</p>"
+          "documentation":"<p>The number of training jobs launched by a tuning job that are not improving (1% or less) as measured by model performance evaluated against an objective function.</p>",
+          "box":true
         },
         "ConvergenceDetectedTime":{
           "shape":"Timestamp",
@@ -21939,7 +23922,8 @@
       "members":{
         "RuntimeInSeconds":{
           "shape":"Integer",
-          "documentation":"<p>The wall clock runtime in seconds used by your hyperparameter tuning job.</p>"
+          "documentation":"<p>The wall clock runtime in seconds used by your hyperparameter tuning job.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The total resources consumed by your hyperparameter tuning job.</p>"
@@ -21948,7 +23932,7 @@
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
     },
     "HyperParameterTuningJobObjective":{
       "type":"structure",
@@ -22162,6 +24146,7 @@
     },
     "HyperParameterTuningMaxRuntimeInSeconds":{
       "type":"integer",
+      "box":true,
       "max":15768000,
       "min":120
     },
@@ -22174,11 +24159,13 @@
         },
         "InstanceCount":{
           "shape":"TrainingInstanceCount",
-          "documentation":"<p>The number of compute instances of type <code>InstanceType</code> to use. For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html\">distributed training</a>, select a value greater than 1.</p>"
+          "documentation":"<p>The number of compute instances of type <code>InstanceType</code> to use. For <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-use-api.html\">distributed training</a>, select a value greater than 1.</p>",
+          "box":true
         },
         "VolumeSizeInGB":{
           "shape":"OptionalVolumeSizeInGB",
-          "documentation":"<p>The volume size in GB for the storage volume to be used in processing hyperparameter optimization jobs (optional). These volumes store model artifacts, incremental states and optionally, scratch space for training algorithms. Do not provide a value for this parameter if a value for <code>InstanceConfigs</code> is also specified.</p> <p>Some instance types have a fixed total local storage size. If you select one of these instances for training, <code>VolumeSizeInGB</code> cannot be greater than this total size. For a list of instance types with local instance storage and their sizes, see <a href=\"http://aws.amazon.com/releasenotes/host-instance-storage-volumes-table/\">instance store volumes</a>.</p> <note> <p>SageMaker supports only the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html\">General Purpose SSD (gp2)</a> storage volume type.</p> </note>"
+          "documentation":"<p>The volume size in GB for the storage volume to be used in processing hyperparameter optimization jobs (optional). These volumes store model artifacts, incremental states and optionally, scratch space for training algorithms. Do not provide a value for this parameter if a value for <code>InstanceConfigs</code> is also specified.</p> <p>Some instance types have a fixed total local storage size. If you select one of these instances for training, <code>VolumeSizeInGB</code> cannot be greater than this total size. For a list of instance types with local instance storage and their sizes, see <a href=\"http://aws.amazon.com/releasenotes/host-instance-storage-volumes-table/\">instance store volumes</a>.</p> <note> <p>SageMaker supports only the <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html\">General Purpose SSD (gp2)</a> storage volume type.</p> </note>",
+          "box":true
         },
         "VolumeKmsKeyId":{
           "shape":"KmsKeyId",
@@ -22198,6 +24185,7 @@
     "HyperParameterValue":{
       "type":"string",
       "max":2500,
+      "min":0,
       "pattern":".*"
     },
     "HyperParameters":{
@@ -22223,12 +24211,21 @@
     },
     "HyperbandStrategyMaxResource":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "HyperbandStrategyMinResource":{
       "type":"integer",
+      "box":true,
       "min":1
     },
+    "IPAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "dualstack"
+      ]
+    },
     "IamIdentity":{
       "type":"structure",
       "members":{
@@ -22287,7 +24284,8 @@
     "IdentityProviderOAuthSettings":{
       "type":"list",
       "member":{"shape":"IdentityProviderOAuthSetting"},
-      "max":20
+      "max":20,
+      "min":0
     },
     "IdleSettings":{
       "type":"structure",
@@ -22313,6 +24311,7 @@
     },
     "IdleTimeoutInMinutes":{
       "type":"integer",
+      "box":true,
       "max":525600,
       "min":60
     },
@@ -22364,7 +24363,8 @@
     "ImageArn":{
       "type":"string",
       "max":256,
-      "pattern":"^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$"
+      "min":0,
+      "pattern":"arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*"
     },
     "ImageBaseImage":{
       "type":"string",
@@ -22411,7 +24411,8 @@
     "ImageDeletePropertyList":{
       "type":"list",
       "member":{"shape":"ImageDeleteProperty"},
-      "max":2
+      "max":2,
+      "min":0
     },
     "ImageDescription":{
       "type":"string",
@@ -22422,24 +24423,32 @@
     "ImageDigest":{
       "type":"string",
       "max":72,
-      "pattern":"^[Ss][Hh][Aa]256:[0-9a-fA-F]{64}$"
+      "min":0,
+      "pattern":"[Ss][Hh][Aa]256:[0-9a-fA-F]{64}"
     },
     "ImageDisplayName":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^\\S(.*\\S)?$"
+      "pattern":"\\S(.*\\S)?"
+    },
+    "ImageId":{
+      "type":"string",
+      "max":21,
+      "min":7,
+      "pattern":"ami-[0-9a-fA-F]{8,17}|default"
     },
     "ImageName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}"
     },
     "ImageNameContains":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9\\-.]+$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9\\-.]+"
     },
     "ImageSortBy":{
       "type":"string",
@@ -22471,6 +24480,7 @@
     "ImageUri":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":".*"
     },
     "ImageVersion":{
@@ -22525,15 +24535,17 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
+      "pattern":"(0|[1-9]\\d*)\\.(0|[1-9]\\d*)"
     },
     "ImageVersionArn":{
       "type":"string",
       "max":256,
-      "pattern":"^(arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+|None)$"
+      "min":0,
+      "pattern":"(arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+|None)"
     },
     "ImageVersionNumber":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ImageVersionSortBy":{
@@ -22615,6 +24627,10 @@
           "shape":"HubContentDocument",
           "documentation":"<p>The hub content document that describes information about the hub content such as type, associated containers, scripts, and more.</p>"
         },
+        "SupportStatus":{
+          "shape":"HubContentSupportStatus",
+          "documentation":"<p>The status of the hub content resource.</p>"
+        },
         "HubContentSearchKeywords":{
           "shape":"HubContentSearchKeywordList",
           "documentation":"<p>The searchable keywords of the hub content.</p>"
@@ -22644,13 +24660,43 @@
     },
     "InUseInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
+    "IncludeNodeLogicalIdsBoolean":{
+      "type":"boolean",
+      "box":true
+    },
     "InferenceComponentArn":{
       "type":"string",
       "max":2048,
       "min":20
     },
+    "InferenceComponentCapacitySize":{
+      "type":"structure",
+      "required":[
+        "Type",
+        "Value"
+      ],
+      "members":{
+        "Type":{
+          "shape":"InferenceComponentCapacitySizeType",
+          "documentation":"<p>Specifies the endpoint capacity type.</p> <dl> <dt>COPY_COUNT</dt> <dd> <p>The endpoint activates based on the number of inference component copies.</p> </dd> <dt>CAPACITY_PERCENT</dt> <dd> <p>The endpoint activates based on the specified percentage of capacity.</p> </dd> </dl>"
+        },
+        "Value":{
+          "shape":"CapacitySizeValue",
+          "documentation":"<p>Defines the capacity size, either as a number of inference component copies or a capacity percentage.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the type and size of the endpoint capacity to activate for a rolling deployment or a rollback strategy. You can specify your batches as either of the following:</p> <ul> <li> <p>A count of inference component copies </p> </li> <li> <p>The overall percentage or your fleet </p> </li> </ul> <p>For a rollback strategy, if you don't specify the fields in this object, or if you set the <code>Value</code> parameter to 100%, then SageMaker AI uses a blue/green rollback strategy and rolls all traffic back to the blue fleet.</p>"
+    },
+    "InferenceComponentCapacitySizeType":{
+      "type":"string",
+      "enum":[
+        "COPY_COUNT",
+        "CAPACITY_PERCENT"
+      ]
+    },
     "InferenceComponentComputeResourceRequirements":{
       "type":"structure",
       "required":["MinMemoryRequiredInMb"],
@@ -22709,18 +24755,83 @@
     },
     "InferenceComponentCopyCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
+    "InferenceComponentDataCacheConfig":{
+      "type":"structure",
+      "required":["EnableCaching"],
+      "members":{
+        "EnableCaching":{
+          "shape":"EnableCaching",
+          "documentation":"<p>Sets whether the endpoint that hosts the inference component caches the model artifacts and container image.</p> <p>With caching enabled, the endpoint caches this data in each instance that it provisions for the inference component. That way, the inference component deploys faster during the auto scaling process. If caching isn't enabled, the inference component takes longer to deploy because of the time it spends downloading the data.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Settings that affect how the inference component caches data.</p>"
+    },
+    "InferenceComponentDataCacheConfigSummary":{
+      "type":"structure",
+      "required":["EnableCaching"],
+      "members":{
+        "EnableCaching":{
+          "shape":"EnableCaching",
+          "documentation":"<p>Indicates whether the inference component caches model artifacts as part of the auto scaling process.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Settings that affect how the inference component caches data.</p>"
+    },
+    "InferenceComponentDeploymentConfig":{
+      "type":"structure",
+      "required":["RollingUpdatePolicy"],
+      "members":{
+        "RollingUpdatePolicy":{
+          "shape":"InferenceComponentRollingUpdatePolicy",
+          "documentation":"<p>Specifies a rolling deployment strategy for updating a SageMaker AI endpoint.</p>"
+        },
+        "AutoRollbackConfiguration":{"shape":"AutoRollbackConfig"}
+      },
+      "documentation":"<p>The deployment configuration for an endpoint that hosts inference components. The configuration includes the desired deployment strategy and rollback settings.</p>"
+    },
     "InferenceComponentName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?"
     },
     "InferenceComponentNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
+    "InferenceComponentRollingUpdatePolicy":{
+      "type":"structure",
+      "required":[
+        "MaximumBatchSize",
+        "WaitIntervalInSeconds"
+      ],
+      "members":{
+        "MaximumBatchSize":{
+          "shape":"InferenceComponentCapacitySize",
+          "documentation":"<p>The batch size for each rolling step in the deployment process. For each step, SageMaker AI provisions capacity on the new endpoint fleet, routes traffic to that fleet, and terminates capacity on the old endpoint fleet. The value must be between 5% to 50% of the copy count of the inference component.</p>"
+        },
+        "WaitIntervalInSeconds":{
+          "shape":"WaitIntervalInSeconds",
+          "documentation":"<p>The length of the baking period, during which SageMaker AI monitors alarms for each batch on the new fleet.</p>"
+        },
+        "MaximumExecutionTimeoutInSeconds":{
+          "shape":"MaximumExecutionTimeoutInSeconds",
+          "documentation":"<p>The time limit for the total deployment. Exceeding this limit causes a timeout.</p>"
+        },
+        "RollbackMaximumBatchSize":{
+          "shape":"InferenceComponentCapacitySize",
+          "documentation":"<p>The batch size for a rollback to the old endpoint fleet. If this field is absent, the value is set to the default, which is 100% of the total capacity. When the default is used, SageMaker AI provisions the entire capacity of the old fleet at once during rollback.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a rolling deployment strategy for updating a SageMaker AI inference component.</p>"
+    },
     "InferenceComponentRuntimeConfig":{
       "type":"structure",
       "required":["CopyCount"],
@@ -22776,6 +24887,10 @@
         "BaseInferenceComponentName":{
           "shape":"InferenceComponentName",
           "documentation":"<p>The name of an existing inference component that is to contain the inference component that you're creating with your request.</p> <p>Specify this parameter only if your request is meant to create an adapter inference component. An adapter inference component contains the path to an adapter model. The purpose of the adapter model is to tailor the inference output of a base foundation model, which is hosted by the base inference component. The adapter inference component uses the compute resources that you assigned to the base inference component.</p> <p>When you create an adapter inference component, use the <code>Container</code> parameter to specify the location of the adapter artifacts. In the parameter value, use the <code>ArtifactUrl</code> parameter of the <code>InferenceComponentContainerSpecification</code> data type.</p> <p>Before you can create an adapter inference component, you must have an existing inference component that contains the foundation model that you want to adapt.</p>"
+        },
+        "DataCacheConfig":{
+          "shape":"InferenceComponentDataCacheConfig",
+          "documentation":"<p>Settings that affect how the inference component caches data.</p>"
         }
       },
       "documentation":"<p>Details about the resources to deploy with this inference component, including the model, container, and compute resources.</p>"
@@ -22802,6 +24917,10 @@
         "BaseInferenceComponentName":{
           "shape":"InferenceComponentName",
           "documentation":"<p>The name of the base inference component that contains this inference component.</p>"
+        },
+        "DataCacheConfig":{
+          "shape":"InferenceComponentDataCacheConfigSummary",
+          "documentation":"<p>Settings that affect how the inference component caches data.</p>"
         }
       },
       "documentation":"<p>Details about the resources that are deployed with this inference component.</p>"
@@ -22902,6 +25021,7 @@
     "InferenceExperimentArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:inference-experiment/.*"
     },
     "InferenceExperimentDataStorageConfig":{
@@ -22923,6 +25043,7 @@
     "InferenceExperimentDescription":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "InferenceExperimentList":{
@@ -22933,7 +25054,7 @@
       "type":"string",
       "max":120,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}"
     },
     "InferenceExperimentSchedule":{
       "type":"structure",
@@ -22965,6 +25086,7 @@
     "InferenceExperimentStatusReason":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "InferenceExperimentStopDesiredState":{
@@ -23044,7 +25166,8 @@
     },
     "InferenceImage":{
       "type":"string",
-      "max":256
+      "max":256,
+      "min":0
     },
     "InferenceMetrics":{
       "type":"structure",
@@ -23055,11 +25178,13 @@
       "members":{
         "MaxInvocations":{
           "shape":"Integer",
-          "documentation":"<p>The expected maximum number of requests per minute for the instance.</p>"
+          "documentation":"<p>The expected maximum number of requests per minute for the instance.</p>",
+          "box":true
         },
         "ModelLatency":{
           "shape":"Integer",
-          "documentation":"<p>The expected model latency at maximum invocations per minute for the instance.</p>"
+          "documentation":"<p>The expected model latency at maximum invocations per minute for the instance.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The metrics for an existing endpoint compared in an Inference Recommender job.</p>"
@@ -23238,7 +25363,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "InfraCheckConfig":{
       "type":"structure",
@@ -23252,14 +25377,17 @@
     },
     "InitialInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "InitialNumberOfUsers":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "InitialTaskCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "InputConfig":{
@@ -23308,7 +25436,9 @@
     },
     "InstanceCount":{
       "type":"integer",
-      "min":1
+      "box":true,
+      "max":10000000,
+      "min":0
     },
     "InstanceGroup":{
       "type":"structure",
@@ -23324,7 +25454,8 @@
         },
         "InstanceCount":{
           "shape":"TrainingInstanceCount",
-          "documentation":"<p>Specifies the number of instances of the instance group.</p>"
+          "documentation":"<p>Specifies the number of instances of the instance group.</p>",
+          "box":true
         },
         "InstanceGroupName":{
           "shape":"InstanceGroupName",
@@ -23333,6 +25464,36 @@
       },
       "documentation":"<p>Defines an instance group for heterogeneous cluster training. When requesting a training job using the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html\">CreateTrainingJob</a> API, you can configure multiple instance groups .</p>"
     },
+    "InstanceGroupMetadata":{
+      "type":"structure",
+      "members":{
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>An error message describing why the instance group level operation (such as creating, scaling, or deleting) failed.</p>"
+        },
+        "AvailabilityZoneId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the Availability Zone where the instance group is located.</p>"
+        },
+        "CapacityReservation":{
+          "shape":"CapacityReservation",
+          "documentation":"<p>Information about the Capacity Reservation used by the instance group.</p>"
+        },
+        "SubnetId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the subnet where the instance group is located.</p>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>A list of security group IDs associated with the instance group.</p>"
+        },
+        "AmiOverride":{
+          "shape":"String",
+          "documentation":"<p>If you use a custom Amazon Machine Image (AMI) for the instance group, this field shows the ID of the custom AMI.</p>"
+        }
+      },
+      "documentation":"<p>Metadata information about an instance group in a HyperPod cluster.</p>"
+    },
     "InstanceGroupName":{
       "type":"string",
       "max":64,
@@ -23342,7 +25503,26 @@
     "InstanceGroupNames":{
       "type":"list",
       "member":{"shape":"InstanceGroupName"},
-      "max":5
+      "max":5,
+      "min":0
+    },
+    "InstanceGroupScalingMetadata":{
+      "type":"structure",
+      "members":{
+        "InstanceCount":{
+          "shape":"InstanceCount",
+          "documentation":"<p>The current number of instances in the group.</p>"
+        },
+        "TargetCount":{
+          "shape":"TargetCount",
+          "documentation":"<p>The desired number of instances for the group after scaling.</p>"
+        },
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>An error message describing why the scaling operation failed, if applicable.</p>"
+        }
+      },
+      "documentation":"<p>Metadata information about scaling operations for an instance group.</p>"
     },
     "InstanceGroupStatus":{
       "type":"string",
@@ -23364,7 +25544,38 @@
     "InstanceGroups":{
       "type":"list",
       "member":{"shape":"InstanceGroup"},
-      "max":5
+      "max":5,
+      "min":0
+    },
+    "InstanceMetadata":{
+      "type":"structure",
+      "members":{
+        "CustomerEni":{
+          "shape":"String",
+          "documentation":"<p>The ID of the customer-managed Elastic Network Interface (ENI) associated with the instance.</p>"
+        },
+        "AdditionalEnis":{
+          "shape":"AdditionalEnis",
+          "documentation":"<p>Information about additional Elastic Network Interfaces (ENIs) associated with the instance.</p>"
+        },
+        "CapacityReservation":{
+          "shape":"CapacityReservation",
+          "documentation":"<p>Information about the Capacity Reservation used by the instance.</p>"
+        },
+        "FailureMessage":{
+          "shape":"String",
+          "documentation":"<p>An error message describing why the instance creation or update failed, if applicable.</p>"
+        },
+        "LcsExecutionState":{
+          "shape":"String",
+          "documentation":"<p>The execution state of the Lifecycle Script (LCS) for the instance.</p>"
+        },
+        "NodeLogicalId":{
+          "shape":"ClusterNodeLogicalId",
+          "documentation":"<p>The unique logical identifier of the node within the cluster. The ID used here is the same object as in the <code>BatchAddClusterNodes</code> API.</p>"
+        }
+      },
+      "documentation":"<p>Metadata information about an instance in a HyperPod cluster.</p>"
     },
     "InstanceMetadataServiceConfiguration":{
       "type":"structure",
@@ -23377,6 +25588,21 @@
       },
       "documentation":"<p>Information on the IMDS configuration of the notebook instance</p>"
     },
+    "InstancePlacementConfig":{
+      "type":"structure",
+      "members":{
+        "EnableMultipleJobs":{
+          "shape":"Boolean",
+          "documentation":"<p>If set to true, allows multiple jobs to share the same UltraServer instances. If set to false, ensures this job's instances are placed on an UltraServer exclusively, with no other jobs sharing the same UltraServer. Default is false.</p>",
+          "box":true
+        },
+        "PlacementSpecifications":{
+          "shape":"PlacementSpecifications",
+          "documentation":"<p>A list of specifications for how instances should be placed on specific UltraServers. Maximum of 10 items is supported.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for how instances are placed and allocated within UltraServers. This is only applicable for UltraServer capacity.</p>"
+    },
     "InstanceType":{
       "type":"string",
       "enum":[
@@ -23463,6 +25689,7 @@
         "ml.p4d.24xlarge",
         "ml.p4de.24xlarge",
         "ml.p5.48xlarge",
+        "ml.p6-b200.48xlarge",
         "ml.m6i.large",
         "ml.m6i.xlarge",
         "ml.m6i.2xlarge",
@@ -23610,17 +25837,19 @@
     "InvocationStartTime":{"type":"timestamp"},
     "InvocationsMaxRetries":{
       "type":"integer",
+      "box":true,
       "max":3,
       "min":0
     },
     "InvocationsTimeoutInSeconds":{
       "type":"integer",
+      "box":true,
       "max":3600,
       "min":1
     },
     "IotRoleAlias":{
       "type":"string",
-      "pattern":"^arn:aws[a-z\\-]*:iam::\\d{12}:rolealias/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:iam::\\d{12}:rolealias/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
     "IsTrackingServerActive":{
       "type":"string",
@@ -23636,6 +25865,7 @@
     },
     "JobDurationInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "JobReferenceCode":{
@@ -23668,7 +25898,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9.])*"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*\\/[a-zA-Z0-9](-*[a-zA-Z0-9.])*"
     },
     "JsonContentTypes":{
       "type":"list",
@@ -23740,7 +25970,8 @@
     },
     "KeepAlivePeriodInSeconds":{
       "type":"integer",
-      "documentation":"Optional. Customer requested period in seconds for which the Training cluster is kept alive after the job is finished.",
+      "documentation":"<p>Optional. Customer requested period in seconds for which the Training cluster is kept alive after the job is finished.</p>",
+      "box":true,
       "max":3600,
       "min":0
     },
@@ -23756,7 +25987,8 @@
     },
     "KernelDisplayName":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "KernelGatewayAppSettings":{
       "type":"structure",
@@ -23767,7 +25999,7 @@
         },
         "CustomImages":{
           "shape":"CustomImages",
-          "documentation":"<p>A list of custom SageMaker AI images that are configured to run as a KernelGateway app.</p>"
+          "documentation":"<p>A list of custom SageMaker AI images that are configured to run as a KernelGateway app.</p> <p>The maximum number of custom images are as follows.</p> <ul> <li> <p>On a domain level: 200</p> </li> <li> <p>On a space level: 5</p> </li> <li> <p>On a user profile level: 5</p> </li> </ul>"
         },
         "LifecycleConfigArns":{
           "shape":"LifecycleConfigArns",
@@ -23793,7 +26025,8 @@
     },
     "KernelName":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "KernelSpec":{
       "type":"structure",
@@ -23825,13 +26058,14 @@
     "KmsKeyId":{
       "type":"string",
       "max":2048,
-      "pattern":"^[a-zA-Z0-9:/_-]*$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9:/_-]*"
     },
     "LabelAttributeName":{
       "type":"string",
       "max":127,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,126}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,126}"
     },
     "LabelCounter":{
       "type":"integer",
@@ -23842,23 +26076,28 @@
       "members":{
         "TotalLabeled":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of objects labeled.</p>"
+          "documentation":"<p>The total number of objects labeled.</p>",
+          "box":true
         },
         "HumanLabeled":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of objects labeled by a human worker.</p>"
+          "documentation":"<p>The total number of objects labeled by a human worker.</p>",
+          "box":true
         },
         "MachineLabeled":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of objects labeled by automated data labeling.</p>"
+          "documentation":"<p>The total number of objects labeled by automated data labeling.</p>",
+          "box":true
         },
         "FailedNonRetryableError":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of objects that could not be labeled due to an error.</p>"
+          "documentation":"<p>The total number of objects that could not be labeled due to an error.</p>",
+          "box":true
         },
         "Unlabeled":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of objects not yet labeled.</p>"
+          "documentation":"<p>The total number of objects not yet labeled.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Provides a breakdown of the number of objects labeled.</p>"
@@ -23868,15 +26107,18 @@
       "members":{
         "HumanLabeled":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of data objects labeled by a human worker.</p>"
+          "documentation":"<p>The total number of data objects labeled by a human worker.</p>",
+          "box":true
         },
         "PendingHuman":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of data objects that need to be labeled by a human worker.</p>"
+          "documentation":"<p>The total number of data objects that need to be labeled by a human worker.</p>",
+          "box":true
         },
         "Total":{
           "shape":"LabelCounter",
-          "documentation":"<p>The total number of tasks in the labeling job.</p>"
+          "documentation":"<p>The total number of tasks in the labeling job.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Provides counts for human-labeled tasks in the labeling job.</p>"
@@ -23884,6 +26126,7 @@
     "LabelingJobAlgorithmSpecificationArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:.*"
     },
     "LabelingJobAlgorithmsConfig":{
@@ -23908,6 +26151,7 @@
     "LabelingJobArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:labeling-job/.*"
     },
     "LabelingJobDataAttributes":{
@@ -23992,7 +26236,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "LabelingJobOutput":{
       "type":"structure",
@@ -24156,6 +26400,7 @@
     "LambdaFunctionArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:lambda:[a-z0-9\\-]*:[0-9]{12}:function:.*"
     },
     "LambdaStepMetadata":{
@@ -24174,7 +26419,8 @@
     },
     "LandingUri":{
       "type":"string",
-      "max":1023
+      "max":1023,
+      "min":0
     },
     "LastModifiedTime":{"type":"timestamp"},
     "LastUpdateStatus":{
@@ -24215,11 +26461,13 @@
       "type":"map",
       "key":{"shape":"StringParameterValue"},
       "value":{"shape":"StringParameterValue"},
-      "max":30
+      "max":30,
+      "min":0
     },
     "LineageGroupArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:lineage-group/.*"
     },
     "LineageGroupNameOrArn":{
@@ -24724,6 +26972,65 @@
         }
       }
     },
+    "ListClusterEventsRequest":{
+      "type":"structure",
+      "required":["ClusterName"],
+      "members":{
+        "ClusterName":{
+          "shape":"ClusterNameOrArn",
+          "documentation":"<p>The name or Amazon Resource Name (ARN) of the HyperPod cluster for which to list events.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group to filter events. If specified, only events related to this instance group are returned.</p>"
+        },
+        "NodeId":{
+          "shape":"ClusterNodeId",
+          "documentation":"<p>The EC2 instance ID to filter events. If specified, only events related to this instance are returned.</p>"
+        },
+        "EventTimeAfter":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start of the time range for filtering events. Only events that occurred after this time are included in the results.</p>"
+        },
+        "EventTimeBefore":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end of the time range for filtering events. Only events that occurred before this time are included in the results.</p>"
+        },
+        "SortBy":{
+          "shape":"EventSortBy",
+          "documentation":"<p>The field to use for sorting the event list. Currently, the only supported value is <code>EventTime</code>.</p>"
+        },
+        "SortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The order in which to sort the results. Valid values are <code>Ascending</code> or <code>Descending</code> (the default is <code>Descending</code>).</p>"
+        },
+        "ResourceType":{
+          "shape":"ClusterEventResourceType",
+          "documentation":"<p>The type of resource for which to filter events. Valid values are <code>Cluster</code>, <code>InstanceGroup</code>, or <code>Instance</code>.</p>"
+        },
+        "MaxResults":{
+          "shape":"ClusterEventMaxResults",
+          "documentation":"<p>The maximum number of events to return in the response. Valid range is 1 to 100.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. This token is obtained from the output of a previous <code>ListClusterEvents</code> call.</p>"
+        }
+      }
+    },
+    "ListClusterEventsResponse":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token to retrieve the next set of results. Include this token in subsequent <code>ListClusterEvents</code> calls to fetch more events.</p>"
+        },
+        "Events":{
+          "shape":"ClusterEventSummaries",
+          "documentation":"<p>A list of event summaries matching the specified criteria.</p>"
+        }
+      }
+    },
     "ListClusterNodesRequest":{
       "type":"structure",
       "required":["ClusterName"],
@@ -24759,15 +27066,16 @@
         "SortOrder":{
           "shape":"SortOrder",
           "documentation":"<p>The sort order for results. The default value is <code>Ascending</code>.</p>"
+        },
+        "IncludeNodeLogicalIds":{
+          "shape":"IncludeNodeLogicalIdsBoolean",
+          "documentation":"<p>Specifies whether to include nodes that are still being provisioned in the response. When set to true, the response includes all nodes regardless of their provisioning status. When set to <code>False</code> (default), only nodes with assigned <code>InstanceIds</code> are returned.</p>"
         }
       }
     },
     "ListClusterNodesResponse":{
       "type":"structure",
-      "required":[
-        "NextToken",
-        "ClusterNodeSummaries"
-      ],
+      "required":["ClusterNodeSummaries"],
       "members":{
         "NextToken":{
           "shape":"NextToken",
@@ -24846,7 +27154,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>Set the maximum number of SageMaker HyperPod clusters to list.</p>"
+          "documentation":"<p>Specifies the maximum number of clusters to evaluate for the operation (not necessarily the number of matching items). After SageMaker processes the number of clusters up to <code>MaxResults</code>, it stops the operation and returns the matching clusters up to that point. If all the matching clusters are desired, SageMaker will go through all the clusters until <code>NextToken</code> is empty.</p>"
         },
         "NameContains":{
           "shape":"NameContains",
@@ -24872,10 +27180,7 @@
     },
     "ListClustersResponse":{
       "type":"structure",
-      "required":[
-        "NextToken",
-        "ClusterSummaries"
-      ],
+      "required":["ClusterSummaries"],
       "members":{
         "NextToken":{
           "shape":"NextToken",
@@ -24951,8 +27256,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of model compilation jobs to return in the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of model compilation jobs to return in the response.</p>"
         },
         "CreationTimeAfter":{
           "shape":"CreationTime",
@@ -25662,8 +27966,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The total number of items to return. If the total number of available items is more than the value specified in <code>MaxResults</code>, then a <code>NextToken</code> will be provided in the output that you can use to resume pagination.</p>",
-          "box":true
+          "documentation":"<p>The total number of items to return. If the total number of available items is more than the value specified in <code>MaxResults</code>, then a <code>NextToken</code> will be provided in the output that you can use to resume pagination.</p>"
         }
       }
     },
@@ -25888,8 +28191,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The total number of items to return. If the total number of available items is more than the value specified in <code>MaxResults</code>, then a <code>NextToken</code> will be provided in the output that you can use to resume pagination.</p>",
-          "box":true
+          "documentation":"<p>The total number of items to return. If the total number of available items is more than the value specified in <code>MaxResults</code>, then a <code>NextToken</code> will be provided in the output that you can use to resume pagination.</p>"
         }
       }
     },
@@ -25916,8 +28218,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of tuning jobs to return. The default value is 10.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of tuning jobs to return. The default value is 10.</p>"
         },
         "SortBy":{
           "shape":"HyperParameterTuningJobSortByOptions",
@@ -26594,7 +28895,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>List export jobs for the model card with the specified version.</p>"
+          "documentation":"<p>List export jobs for the model card with the specified version.</p>",
+          "box":true
         },
         "CreationTimeAfter":{
           "shape":"Timestamp",
@@ -27405,8 +29707,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of optimization jobs to return in the response. The default is 50.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of optimization jobs to return in the response. The default is 50.</p>"
         },
         "CreationTimeAfter":{
           "shape":"CreationTime",
@@ -27606,6 +29907,49 @@
         }
       }
     },
+    "ListPipelineVersionsRequest":{
+      "type":"structure",
+      "required":["PipelineName"],
+      "members":{
+        "PipelineName":{
+          "shape":"PipelineNameOrArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline.</p>"
+        },
+        "CreatedAfter":{
+          "shape":"Timestamp",
+          "documentation":"<p>A filter that returns the pipeline versions that were created after a specified time.</p>"
+        },
+        "CreatedBefore":{
+          "shape":"Timestamp",
+          "documentation":"<p>A filter that returns the pipeline versions that were created before a specified time.</p>"
+        },
+        "SortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>The sort order for the results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the result of the previous <code>ListPipelineVersions</code> request was truncated, the response includes a <code>NextToken</code>. To retrieve the next set of pipeline versions, use this token in your next request.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of pipeline versions to return in the response.</p>"
+        }
+      }
+    },
+    "ListPipelineVersionsResponse":{
+      "type":"structure",
+      "members":{
+        "PipelineVersionSummaries":{
+          "shape":"PipelineVersionSummaryList",
+          "documentation":"<p>Contains a sorted list of pipeline version summary objects matching the specified filters. Each version summary includes the pipeline version ID, the creation date, and the last pipeline execution created from that version. This list can be empty.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the result of the previous <code>ListPipelineVersions</code> request was truncated, the response includes a <code>NextToken</code>. To retrieve the next set of pipeline versions, use this token in your next request.</p>"
+        }
+      }
+    },
     "ListPipelinesRequest":{
       "type":"structure",
       "members":{
@@ -27693,8 +30037,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of processing jobs to return in the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of processing jobs to return in the response.</p>"
         }
       }
     },
@@ -27869,7 +30212,8 @@
         },
         "ExcludeDevicesDeployedInOtherStage":{
           "shape":"Boolean",
-          "documentation":"<p>Toggle for excluding devices deployed in other stages.</p>"
+          "documentation":"<p>Toggle for excluding devices deployed in other stages.</p>",
+          "box":true
         },
         "StageName":{
           "shape":"EntityName",
@@ -27962,8 +30306,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of work teams to return in each page of the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of work teams to return in each page of the response.</p>"
         }
       }
     },
@@ -28001,6 +30344,7 @@
     },
     "ListTagsMaxResults":{
       "type":"integer",
+      "box":true,
       "min":50
     },
     "ListTagsOutput":{
@@ -28069,8 +30413,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of training jobs to return in the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of training jobs to return in the response.</p>"
         },
         "CreationTimeAfter":{
           "shape":"Timestamp",
@@ -28137,8 +30480,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of results to return in the response.</p>"
         },
         "StartTimeAfter":{
           "shape":"Timestamp",
@@ -28217,8 +30559,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of transform jobs to return in the response. The default value is <code>10</code>.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of transform jobs to return in the response. The default value is <code>10</code>.</p>"
         }
       }
     },
@@ -28344,6 +30685,38 @@
         }
       }
     },
+    "ListUltraServersByReservedCapacityRequest":{
+      "type":"structure",
+      "required":["ReservedCapacityArn"],
+      "members":{
+        "ReservedCapacityArn":{
+          "shape":"ReservedCapacityArn",
+          "documentation":"<p>The ARN of the reserved capacity to list UltraServers for.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of UltraServers to return in the response. The default value is 10.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the previous response was truncated, you receive this token. Use it in your next request to receive the next set of results.</p>"
+        }
+      }
+    },
+    "ListUltraServersByReservedCapacityResponse":{
+      "type":"structure",
+      "required":["UltraServers"],
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>If the response is truncated, SageMaker returns this token. Use it in the next request to retrieve the next set of UltraServers.</p>"
+        },
+        "UltraServers":{
+          "shape":"UltraServers",
+          "documentation":"<p>A list of UltraServers that are part of the specified reserved capacity.</p>"
+        }
+      }
+    },
     "ListUserProfilesRequest":{
       "type":"structure",
       "members":{
@@ -28407,8 +30780,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of workforces returned in the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of workforces returned in the response.</p>"
         }
       }
     },
@@ -28454,8 +30826,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of work teams to return in each page of the response.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of work teams to return in each page of the response.</p>"
         }
       }
     },
@@ -28480,19 +30851,33 @@
         "CreateDate"
       ]
     },
+    "LocalPath":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"\\/.*"
+    },
     "Long":{"type":"long"},
+    "LongS3Uri":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
+    },
     "MLFramework":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?$"
+      "pattern":"[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?"
     },
     "ManagedInstanceScalingMaxInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "ManagedInstanceScalingMinInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ManagedInstanceScalingStatus":{
@@ -28504,41 +30889,50 @@
     },
     "MaxAutoMLJobRuntimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxCandidates":{
       "type":"integer",
+      "box":true,
       "max":750,
       "min":1
     },
     "MaxConcurrentInvocationsPerInstance":{
       "type":"integer",
+      "box":true,
       "max":1000,
       "min":1
     },
     "MaxConcurrentTaskCount":{
       "type":"integer",
+      "box":true,
       "max":5000,
       "min":1
     },
     "MaxConcurrentTransforms":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "MaxHumanLabeledObjectCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxNumberOfTests":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxNumberOfTrainingJobs":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxNumberOfTrainingJobsNotImproving":{
       "type":"integer",
+      "box":true,
       "min":3
     },
     "MaxParallelExecutionSteps":{
@@ -28547,6 +30941,7 @@
     },
     "MaxParallelOfTests":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxParallelTrainingJobs":{
@@ -28555,21 +30950,25 @@
     },
     "MaxPayloadInMB":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "MaxPendingTimeInSeconds":{
       "type":"integer",
-      "documentation":"Maximum job scheduler pending time in seconds.",
+      "documentation":"<p>Maximum job scheduler pending time in seconds.</p>",
+      "box":true,
       "max":2419200,
       "min":7200
     },
     "MaxPercentageOfInputDatasetLabeled":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
     "MaxResults":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
@@ -28579,14 +30978,17 @@
     },
     "MaxRuntimePerTrainingJobInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaxWaitTimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "MaximumExecutionTimeoutInSeconds":{
       "type":"integer",
+      "box":true,
       "max":28800,
       "min":600
     },
@@ -28598,7 +31000,8 @@
     "MediaType":{
       "type":"string",
       "max":64,
-      "pattern":"^[-\\w]+\\/[-\\w+]+$"
+      "min":0,
+      "pattern":"[-\\w]+\\/[-\\w+]+"
     },
     "MemberDefinition":{
       "type":"structure",
@@ -28620,8 +31023,15 @@
       "max":10,
       "min":1
     },
+    "MemoryInGiBAmount":{
+      "type":"float",
+      "box":true,
+      "max":10000000,
+      "min":0
+    },
     "MemoryInMb":{
       "type":"integer",
+      "box":true,
       "min":128
     },
     "MetadataProperties":{
@@ -28649,6 +31059,7 @@
     "MetadataPropertyValue":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "MetricData":{
@@ -28660,7 +31071,8 @@
         },
         "Value":{
           "shape":"Float",
-          "documentation":"<p>The value of the metric.</p>"
+          "documentation":"<p>The value of the metric.</p>",
+          "box":true
         },
         "Timestamp":{
           "shape":"Timestamp",
@@ -28682,17 +31094,18 @@
           "shape":"AutoMLMetricEnum",
           "documentation":"<p>The name of the metric.</p>"
         },
+        "StandardMetricName":{
+          "shape":"AutoMLMetricExtendedEnum",
+          "documentation":"<p>The name of the standard metric. </p> <note> <p>For definitions of the standard metrics, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-metrics\"> <code>Autopilot candidate metrics</code> </a>.</p> </note>"
+        },
         "Value":{
           "shape":"Float",
-          "documentation":"<p>The value of the metric.</p>"
+          "documentation":"<p>The value of the metric.</p>",
+          "box":true
         },
         "Set":{
           "shape":"MetricSetSource",
           "documentation":"<p>The dataset split from which the AutoML job produced the metric.</p>"
-        },
-        "StandardMetricName":{
-          "shape":"AutoMLMetricExtendedEnum",
-          "documentation":"<p>The name of the standard metric. </p> <note> <p>For definitions of the standard metrics, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-metrics\"> <code>Autopilot candidate metrics</code> </a>.</p> </note>"
         }
       },
       "documentation":"<p>Information about the metric for a candidate produced by an AutoML job.</p>"
@@ -28782,8 +31195,15 @@
     "MinimumInstanceMetadataServiceVersion":{
       "type":"string",
       "max":1,
+      "min":0,
       "pattern":"1|2"
     },
+    "MlReservationArn":{
+      "type":"string",
+      "max":258,
+      "min":20,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z0-9\\-]{1,14}/.*"
+    },
     "MlTools":{
       "type":"string",
       "enum":[
@@ -28812,7 +31232,8 @@
     "MlflowVersion":{
       "type":"string",
       "max":16,
-      "pattern":"^[0-9]*.[0-9]*.[0-9]*"
+      "min":0,
+      "pattern":"[0-9]*.[0-9]*.[0-9]*"
     },
     "Model":{
       "type":"structure",
@@ -28842,7 +31263,8 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Isolates the model container. No inbound or outbound network calls can be made to or from the model container.</p>"
+          "documentation":"<p>Isolates the model container. No inbound or outbound network calls can be made to or from the model container.</p>",
+          "box":true
         },
         "Tags":{
           "shape":"TagList",
@@ -28861,7 +31283,8 @@
       "members":{
         "AcceptEula":{
           "shape":"AcceptEula",
-          "documentation":"<p>Specifies agreement to the model end-user license agreement (EULA). The <code>AcceptEula</code> value must be explicitly defined as <code>True</code> in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.</p>"
+          "documentation":"<p>Specifies agreement to the model end-user license agreement (EULA). The <code>AcceptEula</code> value must be explicitly defined as <code>True</code> in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The access configuration file to control access to the ML model. You can explicitly accept the model end-user license agreement (EULA) within the <code>ModelAccessConfig</code>.</p> <ul> <li> <p>If you are a Jumpstart user, see the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-choose.html#jumpstart-foundation-models-choose-eula\">End-user license agreements</a> section for more details on accepting the EULA.</p> </li> <li> <p>If you are an AutoML user, see the <i>Optional Parameters</i> section of <i>Create an AutoML job to fine-tune text generation models using the API</i> for details on <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-create-experiment-finetune-llms.html#autopilot-llms-finetuning-api-optional-params\">How to set the EULA acceptance when fine-tuning a model using the AutoML API</a>.</p> </li> </ul>"
@@ -28960,7 +31383,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card.</p>"
+          "documentation":"<p>The version of the model card.</p>",
+          "box":true
         },
         "Content":{
           "shape":"ModelCardContent",
@@ -29006,7 +31430,8 @@
     "ModelCardArn":{
       "type":"string",
       "max":256,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-card/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-card/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "ModelCardContent":{
       "type":"string",
@@ -29029,11 +31454,12 @@
     "ModelCardExportJobArn":{
       "type":"string",
       "max":256,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-card/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}/export-job/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-card/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}/export-job/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "ModelCardExportJobSortBy":{
       "type":"string",
-      "documentation":"Attribute by which to sort returned export jobs.",
+      "documentation":"<p>Attribute by which to sort returned export jobs.</p>",
       "enum":[
         "Name",
         "CreationTime",
@@ -29085,7 +31511,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The version of the model card that the export job exports.</p>"
+          "documentation":"<p>The version of the model card that the export job exports.</p>",
+          "box":true
         },
         "CreatedAt":{
           "shape":"Timestamp",
@@ -29227,7 +31654,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>A version of the model card.</p>"
+          "documentation":"<p>A version of the model card.</p>",
+          "box":true
         },
         "CreationTime":{
           "shape":"Timestamp",
@@ -29339,7 +31767,8 @@
       "members":{
         "Enabled":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the alert action is turned on.</p>"
+          "documentation":"<p>Indicates whether the alert action is turned on.</p>",
+          "box":true
         }
       },
       "documentation":"<p>An alert action taken to light up an icon on the Amazon SageMaker Model Dashboard when an alert goes into <code>InAlert</code> status.</p>"
@@ -29380,7 +31809,8 @@
         },
         "ModelCardVersion":{
           "shape":"Integer",
-          "documentation":"<p>The model card version.</p>"
+          "documentation":"<p>The model card version.</p>",
+          "box":true
         },
         "ModelCardStatus":{
           "shape":"ModelCardStatus",
@@ -29493,7 +31923,8 @@
       "members":{
         "AutoGenerateEndpointName":{
           "shape":"AutoGenerateEndpointName",
-          "documentation":"<p>Set to <code>True</code> to automatically generate an endpoint name for a one-click Autopilot model deployment; set to <code>False</code> otherwise. The default value is <code>False</code>.</p> <note> <p>If you set <code>AutoGenerateEndpointName</code> to <code>True</code>, do not specify the <code>EndpointName</code>; otherwise a 400 error is thrown.</p> </note>"
+          "documentation":"<p>Set to <code>True</code> to automatically generate an endpoint name for a one-click Autopilot model deployment; set to <code>False</code> otherwise. The default value is <code>False</code>.</p> <note> <p>If you set <code>AutoGenerateEndpointName</code> to <code>True</code>, do not specify the <code>EndpointName</code>; otherwise a 400 error is thrown.</p> </note>",
+          "box":true
         },
         "EndpointName":{
           "shape":"EndpointName",
@@ -29612,7 +32043,8 @@
         },
         "ValueInMilliseconds":{
           "shape":"Integer",
-          "documentation":"<p>The model latency percentile value in milliseconds.</p>"
+          "documentation":"<p>The model latency percentile value in milliseconds.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The model latency threshold.</p>"
@@ -29750,11 +32182,13 @@
     "ModelName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?"
+      "min":0,
+      "pattern":"[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?"
     },
     "ModelNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "ModelPackage":{
@@ -29762,7 +32196,7 @@
       "members":{
         "ModelPackageName":{
           "shape":"EntityName",
-          "documentation":"<p>The name of the model.</p>"
+          "documentation":"<p>The name of the model package. The name can be as follows:</p> <ul> <li> <p>For a versioned model, the name is automatically generated by SageMaker Model Registry and follows the format '<code>ModelPackageGroupName/ModelPackageVersion</code>'.</p> </li> <li> <p>For an unversioned model, you must provide the name.</p> </li> </ul>"
         },
         "ModelPackageGroupName":{
           "shape":"EntityName",
@@ -29806,7 +32240,8 @@
         },
         "CertifyForMarketplace":{
           "shape":"CertifyForMarketplace",
-          "documentation":"<p>Whether the model package is to be certified to be listed on Amazon Web Services Marketplace. For information about listing model packages on Amazon Web Services Marketplace, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-list.html\">List Your Algorithm or Model Package on Amazon Web Services Marketplace</a>.</p>"
+          "documentation":"<p>Whether the model package is to be certified to be listed on Amazon Web Services Marketplace. For information about listing model packages on Amazon Web Services Marketplace, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-list.html\">List Your Algorithm or Model Package on Amazon Web Services Marketplace</a>.</p>",
+          "box":true
         },
         "ModelApprovalStatus":{
           "shape":"ModelApprovalStatus",
@@ -29879,13 +32314,13 @@
           "documentation":"<p>Indicates if you want to skip model validation.</p>"
         }
       },
-      "documentation":"<p>A versioned model that can be deployed for SageMaker inference.</p>"
+      "documentation":"<p>A container for your trained model that can be deployed for SageMaker inference. This can include inference code, artifacts, and metadata. The model package type can be one of the following.</p> <ul> <li> <p>Versioned model: A part of a model package group in Model Registry.</p> </li> <li> <p>Unversioned model: Not part of a model package group and used in Amazon Web Services Marketplace.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html\"> <code>CreateModelPackage</code> </a>.</p>"
     },
     "ModelPackageArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso-f)?:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-package/[\\S]{1,2048}$"
+      "pattern":"arn:arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-package/[\\S]{1,2048}"
     },
     "ModelPackageArnList":{
       "type":"list",
@@ -29895,7 +32330,6 @@
     },
     "ModelPackageContainerDefinition":{
       "type":"structure",
-      "required":["Image"],
       "members":{
         "ContainerHostname":{
           "shape":"ContainerHostname",
@@ -29993,13 +32427,13 @@
           "documentation":"<p>A list of the tags associated with the model group. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services resources</a> in the <i>Amazon Web Services General Reference Guide</i>.</p>"
         }
       },
-      "documentation":"<p>A group of versioned models in the model registry.</p>"
+      "documentation":"<p>A group of versioned models in the Model Registry.</p>"
     },
     "ModelPackageGroupArn":{
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso-f)?:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-package-group/[\\S]{1,2048}$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:model-package-group/[\\S]{1,2048}"
     },
     "ModelPackageGroupSortBy":{
       "type":"string",
@@ -30188,7 +32622,8 @@
         "ModelApprovalStatus":{
           "shape":"ModelApprovalStatus",
           "documentation":"<p>The approval status of the model. This can be one of the following values.</p> <ul> <li> <p> <code>APPROVED</code> - The model is approved</p> </li> <li> <p> <code>REJECTED</code> - The model is rejected.</p> </li> <li> <p> <code>PENDING_MANUAL_APPROVAL</code> - The model is waiting for manual approval.</p> </li> </ul>"
-        }
+        },
+        "ModelLifeCycle":{"shape":"ModelLifeCycle"}
       },
       "documentation":"<p>Provides summary information about a model package.</p>"
     },
@@ -30248,6 +32683,7 @@
     },
     "ModelPackageVersion":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "ModelQuality":{
@@ -30356,6 +32792,7 @@
     },
     "ModelSetupTime":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "ModelShardingConfig":{
@@ -30495,7 +32932,8 @@
     "ModelVariantName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?"
+      "min":0,
+      "pattern":"[a-zA-Z0-9]([\\-a-zA-Z0-9]*[a-zA-Z0-9])?"
     },
     "ModelVariantStatus":{
       "type":"string",
@@ -30560,7 +32998,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "MonitoringAlertStatus":{
       "type":"string",
@@ -30711,13 +33149,15 @@
       "members":{
         "Header":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates if the CSV data has a header.</p>"
+          "documentation":"<p>Indicates if the CSV data has a header.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Represents the CSV dataset format used when running a monitoring job.</p>"
     },
     "MonitoringDatapointsToAlert":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
@@ -30743,10 +33183,12 @@
       "type":"map",
       "key":{"shape":"ProcessingEnvironmentKey"},
       "value":{"shape":"ProcessingEnvironmentValue"},
-      "max":50
+      "max":50,
+      "min":0
     },
     "MonitoringEvaluationPeriod":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
@@ -30897,13 +33339,14 @@
     "MonitoringJobDefinitionArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "MonitoringJobDefinitionName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "MonitoringJobDefinitionSortKey":{
       "type":"string",
@@ -30949,7 +33392,8 @@
       "members":{
         "Line":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates if the file should be read as a JSON object per line. </p>"
+          "documentation":"<p>Indicates if the file should be read as a JSON object per line. </p>",
+          "box":true
         }
       },
       "documentation":"<p>Represents the JSON dataset format used when running a monitoring job.</p>"
@@ -30964,11 +33408,13 @@
       "members":{
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to encrypt all communications between the instances used for the monitoring jobs. Choose <code>True</code> to encrypt communications. Encryption provides greater security for distributed jobs, but the processing might take longer.</p>"
+          "documentation":"<p>Whether to encrypt all communications between the instances used for the monitoring jobs. Choose <code>True</code> to encrypt communications. Encryption provides greater security for distributed jobs, but the processing might take longer.</p>",
+          "box":true
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to allow inbound and outbound network calls to and from the containers used for the monitoring job.</p>"
+          "documentation":"<p>Whether to allow inbound and outbound network calls to and from the containers used for the monitoring job.</p>",
+          "box":true
         },
         "VpcConfig":{"shape":"VpcConfig"}
       },
@@ -31008,8 +33454,7 @@
     },
     "MonitoringParquetDatasetFormat":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents the Parquet dataset format used when running a monitoring job.</p>"
     },
     "MonitoringProblemType":{
@@ -31056,7 +33501,8 @@
     "MonitoringS3Uri":{
       "type":"string",
       "max":512,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "MonitoringSchedule":{
       "type":"structure",
@@ -31105,6 +33551,7 @@
     "MonitoringScheduleArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "MonitoringScheduleConfig":{
@@ -31137,7 +33584,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "MonitoringScheduleSortKey":{
       "type":"string",
@@ -31212,7 +33659,8 @@
       "members":{
         "MaxRuntimeInSeconds":{
           "shape":"MonitoringMaxRuntimeInSeconds",
-          "documentation":"<p>The maximum runtime allowed in seconds.</p> <note> <p>The <code>MaxRuntimeInSeconds</code> cannot exceed the frequency of the job. For data quality and model explainability, this can be up to 3600 seconds for an hourly schedule. For model bias and model quality hourly schedules, this can be up to 1800 seconds.</p> </note>"
+          "documentation":"<p>The maximum runtime allowed in seconds.</p> <note> <p>The <code>MaxRuntimeInSeconds</code> cannot exceed the frequency of the job. For data quality and model explainability, this can be up to 3600 seconds for an hourly schedule. For model bias and model quality hourly schedules, this can be up to 1800 seconds.</p> </note>",
+          "box":true
         }
       },
       "documentation":"<p>A time limit for how long the monitoring job is allowed to run before stopping.</p>"
@@ -31221,7 +33669,7 @@
       "type":"string",
       "max":15,
       "min":1,
-      "pattern":"^.?P.*"
+      "pattern":".?P.*"
     },
     "MonitoringType":{
       "type":"string",
@@ -31235,7 +33683,8 @@
     "MountPath":{
       "type":"string",
       "max":1024,
-      "pattern":"^\\/.*"
+      "min":0,
+      "pattern":"\\/.*"
     },
     "MultiModelConfig":{
       "type":"structure",
@@ -31250,6 +33699,7 @@
     "NameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9\\-]+"
     },
     "NeoVpcConfig":{
@@ -31273,6 +33723,7 @@
     "NeoVpcSecurityGroupId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "NeoVpcSecurityGroupIds":{
@@ -31284,6 +33735,7 @@
     "NeoVpcSubnetId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "NeoVpcSubnets":{
@@ -31321,11 +33773,13 @@
       "members":{
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to encrypt all communications between distributed processing jobs. Choose <code>True</code> to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.</p>"
+          "documentation":"<p>Whether to encrypt all communications between distributed processing jobs. Choose <code>True</code> to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.</p>",
+          "box":true
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to allow inbound and outbound network calls to and from the containers used for the processing job.</p>"
+          "documentation":"<p>Whether to allow inbound and outbound network calls to and from the containers used for the processing job.</p>",
+          "box":true
         },
         "VpcConfig":{"shape":"VpcConfig"}
       },
@@ -31335,17 +33789,59 @@
     "NextToken":{
       "type":"string",
       "max":8192,
+      "min":0,
       "pattern":".*"
     },
+    "NodeAdditionResult":{
+      "type":"structure",
+      "required":[
+        "NodeLogicalId",
+        "InstanceGroupName",
+        "Status"
+      ],
+      "members":{
+        "NodeLogicalId":{
+          "shape":"ClusterNodeLogicalId",
+          "documentation":"<p>A unique identifier assigned to the node that can be used to track its provisioning status through the <code>DescribeClusterNode</code> operation.</p>"
+        },
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group to which the node was added.</p>"
+        },
+        "Status":{
+          "shape":"ClusterInstanceStatus",
+          "documentation":"<p>The current status of the node. Possible values include <code>Pending</code>, <code>Running</code>, <code>Failed</code>, <code>ShuttingDown</code>, <code>SystemUpdating</code>, <code>DeepHealthCheckInProgress</code>, and <code>NotFound</code>.</p>"
+        }
+      },
+      "documentation":"<p>Information about a node that was successfully added to the cluster.</p>"
+    },
+    "NodeAdditionResultList":{
+      "type":"list",
+      "member":{"shape":"NodeAdditionResult"}
+    },
+    "NodeUnavailabilityType":{
+      "type":"string",
+      "enum":[
+        "INSTANCE_COUNT",
+        "CAPACITY_PERCENTAGE"
+      ]
+    },
+    "NodeUnavailabilityValue":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
     "NonEmptyString256":{
       "type":"string",
       "max":256,
-      "pattern":"^(?!\\s*$).+"
+      "min":0,
+      "pattern":"(?!\\s*$).+"
     },
     "NonEmptyString64":{
       "type":"string",
       "max":64,
-      "pattern":"^(?!\\s*$).+"
+      "min":0,
+      "pattern":"(?!\\s*$).+"
     },
     "NotebookInstanceAcceleratorType":{
       "type":"string",
@@ -31364,11 +33860,13 @@
     },
     "NotebookInstanceArn":{
       "type":"string",
-      "max":256
+      "max":256,
+      "min":0
     },
     "NotebookInstanceLifecycleConfigArn":{
       "type":"string",
-      "max":256
+      "max":256,
+      "min":0
     },
     "NotebookInstanceLifecycleConfigContent":{
       "type":"string",
@@ -31379,16 +33877,19 @@
     "NotebookInstanceLifecycleConfigList":{
       "type":"list",
       "member":{"shape":"NotebookInstanceLifecycleHook"},
-      "max":1
+      "max":1,
+      "min":0
     },
     "NotebookInstanceLifecycleConfigName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "NotebookInstanceLifecycleConfigNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "NotebookInstanceLifecycleConfigSortKey":{
@@ -31449,11 +33950,13 @@
     "NotebookInstanceName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "NotebookInstanceNameContains":{
       "type":"string",
       "max":63,
+      "min":0,
       "pattern":"[a-zA-Z0-9-]+"
     },
     "NotebookInstanceSortKey":{
@@ -31540,6 +34043,7 @@
     "NotebookInstanceUrl":{"type":"string"},
     "NotebookInstanceVolumeSizeInGB":{
       "type":"integer",
+      "box":true,
       "max":16384,
       "min":5
     },
@@ -31566,19 +34070,23 @@
     },
     "NumberOfAcceleratorDevices":{
       "type":"float",
+      "box":true,
       "min":1
     },
     "NumberOfCpuCores":{
       "type":"float",
+      "box":true,
       "min":0.25
     },
     "NumberOfHumanWorkersPerDataObject":{
       "type":"integer",
+      "box":true,
       "max":9,
       "min":1
     },
     "NumberOfSteps":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "ObjectiveStatus":{
@@ -31598,15 +34106,18 @@
       "members":{
         "Succeeded":{
           "shape":"ObjectiveStatusCounter",
-          "documentation":"<p>The number of training jobs whose final objective metric was evaluated by the hyperparameter tuning job and used in the hyperparameter tuning process.</p>"
+          "documentation":"<p>The number of training jobs whose final objective metric was evaluated by the hyperparameter tuning job and used in the hyperparameter tuning process.</p>",
+          "box":true
         },
         "Pending":{
           "shape":"ObjectiveStatusCounter",
-          "documentation":"<p>The number of training jobs that are in progress and pending evaluation of their final objective metric.</p>"
+          "documentation":"<p>The number of training jobs that are in progress and pending evaluation of their final objective metric.</p>",
+          "box":true
         },
         "Failed":{
           "shape":"ObjectiveStatusCounter",
-          "documentation":"<p>The number of training jobs whose final objective metric was not evaluated and used in the hyperparameter tuning process. This typically occurs when the training job failed or did not emit an objective metric.</p>"
+          "documentation":"<p>The number of training jobs whose final objective metric was not evaluated and used in the hyperparameter tuning process. This typically occurs when the training job failed or did not emit an objective metric.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Specifies the number of training jobs that this hyperparameter tuning job launched, categorized by the status of their objective metric. The objective metric status shows whether the final objective metric for the training job has been evaluated by the tuning job and used in the hyperparameter tuning process.</p>"
@@ -31621,7 +34132,8 @@
         },
         "DisableGlueTableCreation":{
           "shape":"Boolean",
-          "documentation":"<p>Set to <code>True</code> to disable the automatic creation of an Amazon Web Services Glue table when configuring an <code>OfflineStore</code>. If set to <code>False</code>, Feature Store will name the <code>OfflineStore</code> Glue table following <a href=\"https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html\">Athena's naming recommendations</a>.</p> <p>The default value is <code>False</code>.</p>"
+          "documentation":"<p>Set to <code>True</code> to disable the automatic creation of an Amazon Web Services Glue table when configuring an <code>OfflineStore</code>. If set to <code>False</code>, Feature Store will name the <code>OfflineStore</code> Glue table following <a href=\"https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html\">Athena's naming recommendations</a>.</p> <p>The default value is <code>False</code>.</p>",
+          "box":true
         },
         "DataCatalogConfig":{
           "shape":"DataCatalogConfig",
@@ -31758,6 +34270,7 @@
     "OidcEndpoint":{
       "type":"string",
       "max":500,
+      "min":0,
       "pattern":"https://\\S+"
     },
     "OidcMemberDefinition":{
@@ -31785,7 +34298,8 @@
         },
         "EnableOnlineStore":{
           "shape":"Boolean",
-          "documentation":"<p>Turn <code>OnlineStore</code> off by specifying <code>False</code> for the <code>EnableOnlineStore</code> flag. Turn <code>OnlineStore</code> on by specifying <code>True</code> for the <code>EnableOnlineStore</code> flag. </p> <p>The default value is <code>False</code>.</p>"
+          "documentation":"<p>Turn <code>OnlineStore</code> off by specifying <code>False</code> for the <code>EnableOnlineStore</code> flag. Turn <code>OnlineStore</code> on by specifying <code>True</code> for the <code>EnableOnlineStore</code> flag. </p> <p>The default value is <code>False</code>.</p>",
+          "box":true
         },
         "TtlDuration":{
           "shape":"TtlDuration",
@@ -31818,7 +34332,10 @@
       },
       "documentation":"<p>The security configuration for <code>OnlineStore</code>.</p>"
     },
-    "OnlineStoreTotalSizeBytes":{"type":"long"},
+    "OnlineStoreTotalSizeBytes":{
+      "type":"long",
+      "box":true
+    },
     "Operator":{
       "type":"string",
       "enum":[
@@ -31856,16 +34373,19 @@
     "OptimizationConfigs":{
       "type":"list",
       "member":{"shape":"OptimizationConfig"},
-      "max":10
+      "max":10,
+      "min":0
     },
     "OptimizationContainerImage":{
       "type":"string",
       "max":255,
+      "min":0,
       "pattern":"[\\S]+"
     },
     "OptimizationJobArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:optimization-job/.*"
     },
     "OptimizationJobDeploymentInstanceType":{
@@ -31890,6 +34410,14 @@
         "ml.g6.16xlarge",
         "ml.g6.24xlarge",
         "ml.g6.48xlarge",
+        "ml.g6e.xlarge",
+        "ml.g6e.2xlarge",
+        "ml.g6e.4xlarge",
+        "ml.g6e.8xlarge",
+        "ml.g6e.12xlarge",
+        "ml.g6e.16xlarge",
+        "ml.g6e.24xlarge",
+        "ml.g6e.48xlarge",
         "ml.inf2.xlarge",
         "ml.inf2.8xlarge",
         "ml.inf2.24xlarge",
@@ -31903,7 +34431,8 @@
       "type":"map",
       "key":{"shape":"NonEmptyString256"},
       "value":{"shape":"String256"},
-      "max":25
+      "max":25,
+      "min":0
     },
     "OptimizationJobModelSource":{
       "type":"structure",
@@ -32016,7 +34545,8 @@
       "members":{
         "AcceptEula":{
           "shape":"OptimizationModelAcceptEula",
-          "documentation":"<p>Specifies agreement to the model end-user license agreement (EULA). The <code>AcceptEula</code> value must be explicitly defined as <code>True</code> in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.</p>"
+          "documentation":"<p>Specifies agreement to the model end-user license agreement (EULA). The <code>AcceptEula</code> value must be explicitly defined as <code>True</code> in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The access configuration settings for the source ML model for an optimization job, where you can accept the model end-user license agreement (EULA).</p>"
@@ -32057,6 +34587,7 @@
     "OptimizationVpcSecurityGroupId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "OptimizationVpcSecurityGroupIds":{
@@ -32068,6 +34599,7 @@
     "OptimizationVpcSubnetId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "OptimizationVpcSubnets":{
@@ -32076,8 +34608,14 @@
       "max":16,
       "min":1
     },
-    "OptionalDouble":{"type":"double"},
-    "OptionalInteger":{"type":"integer"},
+    "OptionalDouble":{
+      "type":"double",
+      "box":true
+    },
+    "OptionalInteger":{
+      "type":"integer",
+      "box":true
+    },
     "OptionalVolumeSizeInGB":{
       "type":"integer",
       "min":0
@@ -32190,6 +34728,7 @@
     "PaginationToken":{
       "type":"string",
       "max":8192,
+      "min":0,
       "pattern":".*"
     },
     "ParallelismConfiguration":{
@@ -32198,7 +34737,8 @@
       "members":{
         "MaxParallelExecutionSteps":{
           "shape":"MaxParallelExecutionSteps",
-          "documentation":"<p>The max number of steps that can be executed in parallel. </p>"
+          "documentation":"<p>The max number of steps that can be executed in parallel. </p>",
+          "box":true
         }
       },
       "documentation":"<p>Configuration that controls the parallelism of the pipeline. By default, the parallelism configuration specified applies to all executions of the pipeline unless overridden.</p>"
@@ -32224,6 +34764,7 @@
     "ParameterKey":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ParameterList":{
@@ -32235,6 +34776,7 @@
     "ParameterName":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*"
     },
     "ParameterRange":{
@@ -32289,6 +34831,7 @@
     "ParameterValue":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ParameterValues":{
@@ -32348,7 +34891,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:partner-app\\/app-[A-Z0-9]{12}$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:partner-app\\/app-[A-Z0-9]{12}"
     },
     "PartnerAppAuthType":{
       "type":"string",
@@ -32382,7 +34925,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]+"
+      "pattern":"[a-zA-Z0-9]+"
     },
     "PartnerAppStatus":{
       "type":"string",
@@ -32604,6 +35147,7 @@
     "PipelineArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:pipeline/.*"
     },
     "PipelineDefinition":{
@@ -32689,6 +35233,14 @@
         "PipelineParameters":{
           "shape":"ParameterList",
           "documentation":"<p>Contains a list of pipeline parameters. This list can be empty. </p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version that started this execution.</p>"
+        },
+        "PipelineVersionDisplayName":{
+          "shape":"PipelineVersionName",
+          "documentation":"<p>The display name of the pipeline version that started this execution.</p>"
         }
       },
       "documentation":"<p>An execution of a pipeline.</p>"
@@ -32696,7 +35248,8 @@
     "PipelineExecutionArn":{
       "type":"string",
       "max":2048,
-      "pattern":"^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:pipeline\\/.*\\/execution\\/.*$"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:pipeline\\/.*\\/execution\\/.*"
     },
     "PipelineExecutionDescription":{
       "type":"string",
@@ -32707,13 +35260,14 @@
     "PipelineExecutionFailureReason":{
       "type":"string",
       "max":1300,
+      "min":0,
       "pattern":".*"
     },
     "PipelineExecutionName":{
       "type":"string",
       "max":82,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,81}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,81}"
     },
     "PipelineExecutionStatus":{
       "type":"string",
@@ -32766,7 +35320,8 @@
         },
         "AttemptCount":{
           "shape":"Integer",
-          "documentation":"<p>The current attempt of the execution step. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-retry-policy.html\">Retry Policy for SageMaker Pipelines steps</a>.</p>"
+          "documentation":"<p>The current attempt of the execution step. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-retry-policy.html\">Retry Policy for SageMaker Pipelines steps</a>.</p>",
+          "box":true
         },
         "SelectiveExecutionResult":{
           "shape":"SelectiveExecutionResult",
@@ -32905,7 +35460,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,255}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,255}"
     },
     "PipelineNameOrArn":{
       "type":"string",
@@ -32917,7 +35472,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[A-Za-z0-9\\-_]*$"
+      "pattern":"[A-Za-z0-9\\-_]*"
     },
     "PipelineStatus":{
       "type":"string",
@@ -32970,10 +35525,130 @@
       "max":100,
       "min":0
     },
+    "PipelineVersion":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version.</p>"
+        },
+        "PipelineVersionDisplayName":{
+          "shape":"PipelineVersionName",
+          "documentation":"<p>The display name of the pipeline version.</p>"
+        },
+        "PipelineVersionDescription":{
+          "shape":"PipelineVersionDescription",
+          "documentation":"<p>The description of the pipeline version.</p>"
+        },
+        "CreationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation time of the pipeline version.</p>"
+        },
+        "LastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time when the pipeline version was last modified.</p>"
+        },
+        "CreatedBy":{"shape":"UserContext"},
+        "LastModifiedBy":{"shape":"UserContext"},
+        "LastExecutedPipelineExecutionArn":{
+          "shape":"PipelineExecutionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the most recent pipeline execution created from this pipeline version.</p>"
+        },
+        "LastExecutedPipelineExecutionDisplayName":{
+          "shape":"PipelineExecutionName",
+          "documentation":"<p>The display name of the most recent pipeline execution created from this pipeline version.</p>"
+        },
+        "LastExecutedPipelineExecutionStatus":{
+          "shape":"PipelineExecutionStatus",
+          "documentation":"<p>The status of the most recent pipeline execution created from this pipeline version.</p>"
+        }
+      },
+      "documentation":"<p>The version of the pipeline.</p>"
+    },
+    "PipelineVersionDescription":{
+      "type":"string",
+      "max":3072,
+      "min":0,
+      "pattern":".*"
+    },
+    "PipelineVersionId":{
+      "type":"long",
+      "box":true,
+      "min":1
+    },
+    "PipelineVersionName":{
+      "type":"string",
+      "max":82,
+      "min":1,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,81}"
+    },
+    "PipelineVersionSummary":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version.</p>"
+        },
+        "CreationTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation time of the pipeline version.</p>"
+        },
+        "PipelineVersionDescription":{
+          "shape":"PipelineVersionDescription",
+          "documentation":"<p>The description of the pipeline version.</p>"
+        },
+        "PipelineVersionDisplayName":{
+          "shape":"PipelineVersionName",
+          "documentation":"<p>The display name of the pipeline version.</p>"
+        },
+        "LastExecutionPipelineExecutionArn":{
+          "shape":"PipelineExecutionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the most recent pipeline execution created from this pipeline version.</p>"
+        }
+      },
+      "documentation":"<p>The summary of the pipeline version.</p>"
+    },
+    "PipelineVersionSummaryList":{
+      "type":"list",
+      "member":{"shape":"PipelineVersionSummary"},
+      "max":100,
+      "min":0
+    },
+    "PlacementSpecification":{
+      "type":"structure",
+      "required":["InstanceCount"],
+      "members":{
+        "UltraServerId":{
+          "shape":"String256",
+          "documentation":"<p>The unique identifier of the UltraServer where instances should be placed.</p>"
+        },
+        "InstanceCount":{
+          "shape":"TrainingInstanceCount",
+          "documentation":"<p>The number of ML compute instances required to be placed together on the same UltraServer. Minimum value of 1.</p>",
+          "box":true
+        }
+      },
+      "documentation":"<p>Specifies how instances should be placed on a specific UltraServer.</p>"
+    },
+    "PlacementSpecifications":{
+      "type":"list",
+      "member":{"shape":"PlacementSpecification"},
+      "max":10,
+      "min":0
+    },
     "PlatformIdentifier":{
       "type":"string",
-      "max":15,
-      "pattern":"^(notebook-al1-v1|notebook-al2-v1|notebook-al2-v2|notebook-al2-v3)$"
+      "max":20,
+      "min":0,
+      "pattern":"(notebook-al1-v1|notebook-al2-v1|notebook-al2-v2|notebook-al2-v3|notebook-al2023-v1)"
     },
     "PolicyString":{
       "type":"string",
@@ -32999,6 +35674,21 @@
       ]
     },
     "PresignedDomainUrl":{"type":"string"},
+    "PresignedUrlAccessConfig":{
+      "type":"structure",
+      "members":{
+        "AcceptEula":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates acceptance of the End User License Agreement (EULA) for gated models. Set to true to acknowledge acceptance of the license terms required for accessing gated content.</p>",
+          "box":true
+        },
+        "ExpectedS3Url":{
+          "shape":"S3ModelUri",
+          "documentation":"<p>The expected S3 URL prefix for validation purposes. This parameter helps ensure consistency between the resolved S3 URIs and the deployment configuration, reducing potential compatibility issues.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for accessing hub content through presigned URLs, including license agreement acceptance and URL validation settings.</p>"
+    },
     "PriorityClass":{
       "type":"structure",
       "required":[
@@ -33025,10 +35715,14 @@
     },
     "PriorityWeight":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":0
     },
-    "ProbabilityThresholdAttribute":{"type":"double"},
+    "ProbabilityThresholdAttribute":{
+      "type":"double",
+      "box":true
+    },
     "ProblemType":{
       "type":"string",
       "enum":[
@@ -33067,17 +35761,20 @@
     "ProcessingEnvironmentKey":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"[a-zA-Z_][a-zA-Z0-9_]*"
     },
     "ProcessingEnvironmentMap":{
       "type":"map",
       "key":{"shape":"ProcessingEnvironmentKey"},
       "value":{"shape":"ProcessingEnvironmentValue"},
-      "max":100
+      "max":100,
+      "min":0
     },
     "ProcessingEnvironmentValue":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "ProcessingFeatureStoreOutput":{
@@ -33101,7 +35798,8 @@
         },
         "AppManaged":{
           "shape":"AppManaged",
-          "documentation":"<p>When <code>True</code>, input operations such as data download are managed natively by the processing job application. When <code>False</code> (default), input operations are managed by Amazon SageMaker.</p>"
+          "documentation":"<p>When <code>True</code>, input operations such as data download are managed natively by the processing job application. When <code>False</code> (default), input operations are managed by Amazon SageMaker.</p>",
+          "box":true
         },
         "S3Input":{
           "shape":"ProcessingS3Input",
@@ -33122,6 +35820,7 @@
     },
     "ProcessingInstanceCount":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
@@ -33187,7 +35886,68 @@
         "ml.r5d.8xlarge",
         "ml.r5d.12xlarge",
         "ml.r5d.16xlarge",
-        "ml.r5d.24xlarge"
+        "ml.r5d.24xlarge",
+        "ml.g6.xlarge",
+        "ml.g6.2xlarge",
+        "ml.g6.4xlarge",
+        "ml.g6.8xlarge",
+        "ml.g6.12xlarge",
+        "ml.g6.16xlarge",
+        "ml.g6.24xlarge",
+        "ml.g6.48xlarge",
+        "ml.g6e.xlarge",
+        "ml.g6e.2xlarge",
+        "ml.g6e.4xlarge",
+        "ml.g6e.8xlarge",
+        "ml.g6e.12xlarge",
+        "ml.g6e.16xlarge",
+        "ml.g6e.24xlarge",
+        "ml.g6e.48xlarge",
+        "ml.m6i.large",
+        "ml.m6i.xlarge",
+        "ml.m6i.2xlarge",
+        "ml.m6i.4xlarge",
+        "ml.m6i.8xlarge",
+        "ml.m6i.12xlarge",
+        "ml.m6i.16xlarge",
+        "ml.m6i.24xlarge",
+        "ml.m6i.32xlarge",
+        "ml.c6i.xlarge",
+        "ml.c6i.2xlarge",
+        "ml.c6i.4xlarge",
+        "ml.c6i.8xlarge",
+        "ml.c6i.12xlarge",
+        "ml.c6i.16xlarge",
+        "ml.c6i.24xlarge",
+        "ml.c6i.32xlarge",
+        "ml.m7i.large",
+        "ml.m7i.xlarge",
+        "ml.m7i.2xlarge",
+        "ml.m7i.4xlarge",
+        "ml.m7i.8xlarge",
+        "ml.m7i.12xlarge",
+        "ml.m7i.16xlarge",
+        "ml.m7i.24xlarge",
+        "ml.m7i.48xlarge",
+        "ml.c7i.large",
+        "ml.c7i.xlarge",
+        "ml.c7i.2xlarge",
+        "ml.c7i.4xlarge",
+        "ml.c7i.8xlarge",
+        "ml.c7i.12xlarge",
+        "ml.c7i.16xlarge",
+        "ml.c7i.24xlarge",
+        "ml.c7i.48xlarge",
+        "ml.r7i.large",
+        "ml.r7i.xlarge",
+        "ml.r7i.2xlarge",
+        "ml.r7i.4xlarge",
+        "ml.r7i.8xlarge",
+        "ml.r7i.12xlarge",
+        "ml.r7i.16xlarge",
+        "ml.r7i.24xlarge",
+        "ml.r7i.48xlarge",
+        "ml.p5.4xlarge"
       ]
     },
     "ProcessingJob":{
@@ -33269,13 +36029,14 @@
     "ProcessingJobArn":{
       "type":"string",
       "max":256,
-      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:processing-job/.*"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:processing-job/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "ProcessingJobName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "ProcessingJobStatus":{
       "type":"string",
@@ -33348,6 +36109,7 @@
     "ProcessingLocalPath":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "ProcessingMaxRuntimeInSeconds":{
@@ -33373,7 +36135,8 @@
         },
         "AppManaged":{
           "shape":"AppManaged",
-          "documentation":"<p>When <code>True</code>, output operations such as data upload are managed natively by the processing job application. When <code>False</code> (default), output operations are managed by Amazon SageMaker.</p>"
+          "documentation":"<p>When <code>True</code>, output operations such as data upload are managed natively by the processing job application. When <code>False</code> (default), output operations are managed by Amazon SageMaker.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Describes the results of a processing job. The processing output must specify exactly one of either <code>S3Output</code> or <code>FeatureStoreOutput</code> types.</p>"
@@ -33388,7 +36151,7 @@
         },
         "KmsKeyId":{
           "shape":"KmsKeyId",
-          "documentation":"<p>The Amazon Web Services Key Management Service (Amazon Web Services KMS) key that Amazon SageMaker uses to encrypt the processing job output. <code>KmsKeyId</code> can be an ID of a KMS key, ARN of a KMS key, alias of a KMS key, or alias of a KMS key. The <code>KmsKeyId</code> is applied to all outputs.</p>"
+          "documentation":"<p>The Amazon Web Services Key Management Service (Amazon Web Services KMS) key that Amazon SageMaker uses to encrypt the processing job output. <code>KmsKeyId</code> can be an ID of a KMS key, ARN of a KMS key, or alias of a KMS key. The <code>KmsKeyId</code> is applied to all outputs.</p>"
         }
       },
       "documentation":"<p>Configuration for uploading output from the processing container.</p>"
@@ -33456,7 +36219,7 @@
         },
         "S3DataDistributionType":{
           "shape":"ProcessingS3DataDistributionType",
-          "documentation":"<p>Whether to distribute the data from Amazon S3 to all processing instances with <code>FullyReplicated</code>, or whether the data from Amazon S3 is shared by Amazon S3 key, downloading one shard of data to each processing instance.</p>"
+          "documentation":"<p>Whether to distribute the data from Amazon S3 to all processing instances with <code>FullyReplicated</code>, or whether the data from Amazon S3 is sharded by Amazon S3 key, downloading one shard of data to each processing instance.</p>"
         },
         "S3CompressionType":{
           "shape":"ProcessingS3CompressionType",
@@ -33507,13 +36270,15 @@
       "members":{
         "MaxRuntimeInSeconds":{
           "shape":"ProcessingMaxRuntimeInSeconds",
-          "documentation":"<p>Specifies the maximum runtime in seconds.</p>"
+          "documentation":"<p>Specifies the maximum runtime in seconds.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Configures conditions under which the processing job should be stopped, such as how long the processing job has been running. After the condition is met, the processing job is stopped.</p>"
     },
     "ProcessingVolumeSizeInGB":{
       "type":"integer",
+      "box":true,
       "max":16384,
       "min":1
     },
@@ -33527,7 +36292,8 @@
     "ProductId":{
       "type":"string",
       "max":256,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "ProductListings":{
       "type":"list",
@@ -33595,7 +36361,11 @@
         },
         "InferenceAmiVersion":{
           "shape":"ProductionVariantInferenceAmiVersion",
-          "documentation":"<p>Specifies an option from a collection of preconfigured Amazon Machine Image (AMI) images. Each image is configured by Amazon Web Services with a set of software and driver versions. Amazon Web Services optimizes these configurations for different machine learning workloads.</p> <p>By selecting an AMI version, you can ensure that your inference environment is compatible with specific software requirements, such as CUDA driver versions, Linux kernel versions, or Amazon Web Services Neuron driver versions.</p> <p>The AMI version names, and their configurations, are the following:</p> <dl> <dt>al2-ami-sagemaker-inference-gpu-2</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 535.54.03</p> </li> <li> <p>CUDA driver version: 12.2</p> </li> <li> <p>Supported instance types: ml.g4dn.*, ml.g5.*, ml.g6.*, ml.p3.*, ml.p4d.*, ml.p4de.*, ml.p5.*</p> </li> </ul> </dd> </dl>"
+          "documentation":"<p>Specifies an option from a collection of preconfigured Amazon Machine Image (AMI) images. Each image is configured by Amazon Web Services with a set of software and driver versions. Amazon Web Services optimizes these configurations for different machine learning workloads.</p> <p>By selecting an AMI version, you can ensure that your inference environment is compatible with specific software requirements, such as CUDA driver versions, Linux kernel versions, or Amazon Web Services Neuron driver versions.</p> <p>The AMI version names, and their configurations, are the following:</p> <dl> <dt>al2-ami-sagemaker-inference-gpu-2</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 535</p> </li> <li> <p>CUDA version: 12.2</p> </li> </ul> </dd> <dt>al2-ami-sagemaker-inference-gpu-2-1</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 535</p> </li> <li> <p>CUDA version: 12.2</p> </li> <li> <p>NVIDIA Container Toolkit with disabled CUDA-compat mounting</p> </li> </ul> </dd> <dt>al2-ami-sagemaker-inference-gpu-3-1</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 550</p> </li> <li> <p>CUDA version: 12.4</p> </li> <li> <p>NVIDIA Container Toolkit with disabled CUDA-compat mounting</p> </li> </ul> </dd> <dt>al2-ami-sagemaker-inference-neuron-2</dt> <dd> <ul> <li> <p>Accelerator: Inferentia2 and Trainium</p> </li> <li> <p>Neuron driver version: 2.19</p> </li> </ul> </dd> </dl>"
+        },
+        "CapacityReservationConfig":{
+          "shape":"ProductionVariantCapacityReservationConfig",
+          "documentation":"<p>Settings for the capacity reservation for the compute instances that SageMaker AI reserves for an endpoint. </p>"
         }
       },
       "documentation":"<p> Identifies a model that you want to host and the resources chosen to deploy for hosting it. If you are deploying multiple models, tell SageMaker how to distribute traffic among the models by specifying variant weights. For more information on production variants, check <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-ab-testing.html\"> Production variants</a>. </p>"
@@ -33611,8 +36381,53 @@
         "ml.eia2.xlarge"
       ]
     },
+    "ProductionVariantCapacityReservationConfig":{
+      "type":"structure",
+      "members":{
+        "CapacityReservationPreference":{
+          "shape":"CapacityReservationPreference",
+          "documentation":"<p>Options that you can choose for the capacity reservation. SageMaker AI supports the following options:</p> <dl> <dt>capacity-reservations-only</dt> <dd> <p>SageMaker AI launches instances only into an ML capacity reservation. If no capacity is available, the instances fail to launch.</p> </dd> </dl>"
+        },
+        "MlReservationArn":{
+          "shape":"MlReservationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the ML capacity reservation that SageMaker AI applies when it deploys the endpoint.</p>"
+        }
+      },
+      "documentation":"<p>Settings for the capacity reservation for the compute instances that SageMaker AI reserves for an endpoint. </p>"
+    },
+    "ProductionVariantCapacityReservationSummary":{
+      "type":"structure",
+      "members":{
+        "MlReservationArn":{
+          "shape":"MlReservationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) that uniquely identifies the ML capacity reservation that SageMaker AI applies when it deploys the endpoint.</p>"
+        },
+        "CapacityReservationPreference":{
+          "shape":"CapacityReservationPreference",
+          "documentation":"<p>The option that you chose for the capacity reservation. SageMaker AI supports the following options:</p> <dl> <dt>capacity-reservations-only</dt> <dd> <p>SageMaker AI launches instances only into an ML capacity reservation. If no capacity is available, the instances fail to launch.</p> </dd> </dl>"
+        },
+        "TotalInstanceCount":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances that you allocated to the ML capacity reservation.</p>"
+        },
+        "AvailableInstanceCount":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances that are currently available in the ML capacity reservation.</p>"
+        },
+        "UsedByCurrentEndpoint":{
+          "shape":"TaskCount",
+          "documentation":"<p>The number of instances from the ML capacity reservation that are being used by the endpoint.</p>"
+        },
+        "Ec2CapacityReservations":{
+          "shape":"Ec2CapacityReservationsList",
+          "documentation":"<p>The EC2 capacity reservations that are shared to this ML capacity reservation, if any.</p>"
+        }
+      },
+      "documentation":"<p>Details about an ML capacity reservation.</p>"
+    },
     "ProductionVariantContainerStartupHealthCheckTimeoutInSeconds":{
       "type":"integer",
+      "box":true,
       "max":3600,
       "min":60
     },
@@ -33633,7 +36448,12 @@
     },
     "ProductionVariantInferenceAmiVersion":{
       "type":"string",
-      "enum":["al2-ami-sagemaker-inference-gpu-2"]
+      "enum":[
+        "al2-ami-sagemaker-inference-gpu-2",
+        "al2-ami-sagemaker-inference-gpu-2-1",
+        "al2-ami-sagemaker-inference-gpu-3-1",
+        "al2-ami-sagemaker-inference-neuron-2"
+      ]
     },
     "ProductionVariantInstanceType":{
       "type":"string",
@@ -33748,6 +36568,16 @@
         "ml.g6.16xlarge",
         "ml.g6.24xlarge",
         "ml.g6.48xlarge",
+        "ml.r8g.medium",
+        "ml.r8g.large",
+        "ml.r8g.xlarge",
+        "ml.r8g.2xlarge",
+        "ml.r8g.4xlarge",
+        "ml.r8g.8xlarge",
+        "ml.r8g.12xlarge",
+        "ml.r8g.16xlarge",
+        "ml.r8g.24xlarge",
+        "ml.r8g.48xlarge",
         "ml.g6e.xlarge",
         "ml.g6e.2xlarge",
         "ml.g6e.4xlarge",
@@ -33824,6 +36654,7 @@
         "ml.inf2.48xlarge",
         "ml.p5.48xlarge",
         "ml.p5e.48xlarge",
+        "ml.p5en.48xlarge",
         "ml.m7i.large",
         "ml.m7i.xlarge",
         "ml.m7i.2xlarge",
@@ -33850,7 +36681,47 @@
         "ml.r7i.12xlarge",
         "ml.r7i.16xlarge",
         "ml.r7i.24xlarge",
-        "ml.r7i.48xlarge"
+        "ml.r7i.48xlarge",
+        "ml.c8g.medium",
+        "ml.c8g.large",
+        "ml.c8g.xlarge",
+        "ml.c8g.2xlarge",
+        "ml.c8g.4xlarge",
+        "ml.c8g.8xlarge",
+        "ml.c8g.12xlarge",
+        "ml.c8g.16xlarge",
+        "ml.c8g.24xlarge",
+        "ml.c8g.48xlarge",
+        "ml.r7gd.medium",
+        "ml.r7gd.large",
+        "ml.r7gd.xlarge",
+        "ml.r7gd.2xlarge",
+        "ml.r7gd.4xlarge",
+        "ml.r7gd.8xlarge",
+        "ml.r7gd.12xlarge",
+        "ml.r7gd.16xlarge",
+        "ml.m8g.medium",
+        "ml.m8g.large",
+        "ml.m8g.xlarge",
+        "ml.m8g.2xlarge",
+        "ml.m8g.4xlarge",
+        "ml.m8g.8xlarge",
+        "ml.m8g.12xlarge",
+        "ml.m8g.16xlarge",
+        "ml.m8g.24xlarge",
+        "ml.m8g.48xlarge",
+        "ml.c6in.large",
+        "ml.c6in.xlarge",
+        "ml.c6in.2xlarge",
+        "ml.c6in.4xlarge",
+        "ml.c6in.8xlarge",
+        "ml.c6in.12xlarge",
+        "ml.c6in.16xlarge",
+        "ml.c6in.24xlarge",
+        "ml.c6in.32xlarge",
+        "ml.p6-b200.48xlarge",
+        "ml.p6e-gb200.36xlarge",
+        "ml.p5.4xlarge"
       ]
     },
     "ProductionVariantList":{
@@ -33879,6 +36750,7 @@
     },
     "ProductionVariantModelDataDownloadTimeoutInSeconds":{
       "type":"integer",
+      "box":true,
       "max":3600,
       "min":60
     },
@@ -33893,7 +36765,10 @@
       },
       "documentation":"<p>Settings that control how the endpoint routes incoming traffic to the instances that the endpoint hosts.</p>"
     },
-    "ProductionVariantSSMAccess":{"type":"boolean"},
+    "ProductionVariantSSMAccess":{
+      "type":"boolean",
+      "box":true
+    },
     "ProductionVariantServerlessConfig":{
       "type":"structure",
       "required":[
@@ -34002,6 +36877,10 @@
         "RoutingConfig":{
           "shape":"ProductionVariantRoutingConfig",
           "documentation":"<p>Settings that control how the endpoint routes incoming traffic to the instances that the endpoint hosts.</p>"
+        },
+        "CapacityReservationConfig":{
+          "shape":"ProductionVariantCapacityReservationSummary",
+          "documentation":"<p>Settings for the capacity reservation for the compute instances that SageMaker AI reserves for an endpoint. </p>"
         }
       },
       "documentation":"<p>Describes weight and capacities for a production variant associated with an endpoint. If you sent a request to the <code>UpdateEndpointWeightsAndCapacities</code> API and the endpoint status is <code>Updating</code>, you get different desired and current values. </p>"
@@ -34013,6 +36892,7 @@
     },
     "ProductionVariantVolumeSizeInGB":{
       "type":"integer",
+      "box":true,
       "max":512,
       "min":1
     },
@@ -34033,7 +36913,8 @@
         },
         "DisableProfiler":{
           "shape":"DisableProfiler",
-          "documentation":"<p>Configuration to turn off Amazon SageMaker Debugger's system monitoring and profiling functionality. To turn it off, set to <code>True</code>.</p>"
+          "documentation":"<p>Configuration to turn off Amazon SageMaker Debugger's system monitoring and profiling functionality. To turn it off, set to <code>True</code>.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Configuration information for Amazon SageMaker Debugger system monitoring, framework profiling, and storage paths.</p>"
@@ -34055,7 +36936,8 @@
         },
         "DisableProfiler":{
           "shape":"DisableProfiler",
-          "documentation":"<p>To turn off Amazon SageMaker Debugger monitoring and profiling while a training job is in progress, set to <code>True</code>.</p>"
+          "documentation":"<p>To turn off Amazon SageMaker Debugger monitoring and profiling while a training job is in progress, set to <code>True</code>.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Configuration information for updating the Amazon SageMaker Debugger profile parameters, system and framework metrics configurations, and storage paths.</p>"
@@ -34089,7 +36971,8 @@
         },
         "VolumeSizeInGB":{
           "shape":"OptionalVolumeSizeInGB",
-          "documentation":"<p>The size, in GB, of the ML storage volume attached to the processing instance.</p>"
+          "documentation":"<p>The size, in GB, of the ML storage volume attached to the processing instance.</p>",
+          "box":true
         },
         "RuleParameters":{
           "shape":"RuleParameters",
@@ -34136,7 +37019,10 @@
       "max":20,
       "min":0
     },
-    "ProfilingIntervalInMilliseconds":{"type":"long"},
+    "ProfilingIntervalInMilliseconds":{
+      "type":"long",
+      "box":true
+    },
     "ProfilingParameters":{
       "type":"map",
       "key":{"shape":"ConfigKey"},
@@ -34155,7 +37041,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?$"
+      "pattern":"[a-zA-Z]+ ?\\d+\\.\\d+(\\.\\d+)?"
     },
     "Project":{
       "type":"structure",
@@ -34190,6 +37076,10 @@
           "shape":"Timestamp",
           "documentation":"<p>A timestamp specifying when the project was created.</p>"
         },
+        "TemplateProviderDetails":{
+          "shape":"TemplateProviderDetailList",
+          "documentation":"<p> An array of template providers associated with the project. </p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a>.</p>"
@@ -34206,19 +37096,19 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^arn:aws(-cn|-us-gov|-iso-f)?:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:project/[\\S]{1,2048}$"
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]{9,16}:[0-9]{12}:project/[\\S]{1,2048}"
     },
     "ProjectEntityName":{
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,31}"
     },
     "ProjectId":{
       "type":"string",
       "max":20,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9])*"
     },
     "ProjectSortBy":{
       "type":"string",
@@ -34348,6 +37238,7 @@
     "ProvisioningParameterValue":{
       "type":"string",
       "max":4096,
+      "min":0,
       "pattern":".*"
     },
     "ProvisioningParameters":{
@@ -34393,7 +37284,7 @@
     },
     "QProfileArn":{
       "type":"string",
-      "pattern":"^arn:[-.a-z0-9]{1,63}:codewhisperer:([-.a-z0-9]{0,63}:){2}([a-zA-Z0-9-_:/]){1,1023}$"
+      "pattern":"arn:[-.a-z0-9]{1,63}:codewhisperer:([-.a-z0-9]{0,63}:){2}([a-zA-Z0-9-_:/]){1,1023}"
     },
     "QualityCheckStepMetadata":{
       "type":"structure",
@@ -34432,11 +37323,13 @@
         },
         "SkipCheck":{
           "shape":"Boolean",
-          "documentation":"<p>This flag indicates if the drift check against the previous baseline will be skipped or not. If it is set to <code>False</code>, the previous baseline of the configured check type must be available.</p>"
+          "documentation":"<p>This flag indicates if the drift check against the previous baseline will be skipped or not. If it is set to <code>False</code>, the previous baseline of the configured check type must be available.</p>",
+          "box":true
         },
         "RegisterNewBaseline":{
           "shape":"Boolean",
-          "documentation":"<p>This flag indicates if a newly calculated baseline can be accessed through step properties <code>BaselineUsedForDriftCheckConstraints</code> and <code>BaselineUsedForDriftCheckStatistics</code>. If it is set to <code>False</code>, the previous baseline of the configured check type must also be available. These can be accessed through the <code>BaselineUsedForDriftCheckConstraints</code> and <code> BaselineUsedForDriftCheckStatistics</code> properties. </p>"
+          "documentation":"<p>This flag indicates if a newly calculated baseline can be accessed through step properties <code>BaselineUsedForDriftCheckConstraints</code> and <code>BaselineUsedForDriftCheckStatistics</code>. If it is set to <code>False</code>, the previous baseline of the configured check type must also be available. These can be accessed through the <code>BaselineUsedForDriftCheckConstraints</code> and <code> BaselineUsedForDriftCheckStatistics</code> properties. </p>",
+          "box":true
         }
       },
       "documentation":"<p>Container for the metadata for a Quality check step. For more information, see the topic on <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/build-and-manage-steps.html#step-type-quality-check\">QualityCheck step</a> in the <i>Amazon SageMaker Developer Guide</i>. </p>"
@@ -34477,10 +37370,12 @@
     },
     "QueryLineageMaxDepth":{
       "type":"integer",
+      "box":true,
       "max":10
     },
     "QueryLineageMaxResults":{
       "type":"integer",
+      "box":true,
       "max":50
     },
     "QueryLineageRequest":{
@@ -34496,7 +37391,8 @@
         },
         "IncludeEdges":{
           "shape":"Boolean",
-          "documentation":"<p> Setting this value to <code>True</code> retrieves not only the entities of interest but also the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/lineage-tracking-entities.html\">Associations</a> and lineage entities on the path. Set to <code>False</code> to only return lineage entities that match your query.</p>"
+          "documentation":"<p> Setting this value to <code>True</code> retrieves not only the entities of interest but also the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/lineage-tracking-entities.html\">Associations</a> and lineage entities on the path. Set to <code>False</code> to only return lineage entities that match your query.</p>",
+          "box":true
         },
         "Filters":{
           "shape":"QueryFilters",
@@ -34542,18 +37438,21 @@
     "QueryLineageTypes":{
       "type":"list",
       "member":{"shape":"LineageType"},
-      "max":4
+      "max":4,
+      "min":0
     },
     "QueryProperties":{
       "type":"map",
       "key":{"shape":"String256"},
       "value":{"shape":"String256"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "QueryTypes":{
       "type":"list",
       "member":{"shape":"String40"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "RSessionAppSettings":{
       "type":"structure",
@@ -34636,6 +37535,7 @@
     },
     "RandomSeed":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "RealTimeInferenceConfig":{
@@ -34692,13 +37592,14 @@
     "RecommendationJobArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:inference-recommendations-job/.*"
     },
     "RecommendationJobCompilationJobName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}$"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "RecommendationJobCompiledOutputConfig":{
       "type":"structure",
@@ -34764,7 +37665,8 @@
     },
     "RecommendationJobDescription":{
       "type":"string",
-      "max":128
+      "max":128,
+      "min":0
     },
     "RecommendationJobFrameworkVersion":{
       "type":"string",
@@ -34845,7 +37747,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
     },
     "RecommendationJobOutputConfig":{
       "type":"structure",
@@ -34907,7 +37809,8 @@
       "members":{
         "MaxInvocations":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of requests per minute expected for the endpoint.</p>"
+          "documentation":"<p>The maximum number of requests per minute expected for the endpoint.</p>",
+          "box":true
         },
         "ModelLatencyThresholds":{
           "shape":"ModelLatencyThresholds",
@@ -34923,6 +37826,7 @@
     "RecommendationJobSupportedContentType":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "RecommendationJobSupportedContentTypes":{
@@ -34943,7 +37847,8 @@
     "RecommendationJobSupportedResponseMIMEType":{
       "type":"string",
       "max":1024,
-      "pattern":"^[-\\w]+\\/.+$"
+      "min":0,
+      "pattern":"[-\\w]+\\/.+"
     },
     "RecommendationJobSupportedResponseMIMETypes":{
       "type":"list",
@@ -34977,6 +37882,7 @@
     "RecommendationJobVpcSecurityGroupId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "RecommendationJobVpcSecurityGroupIds":{
@@ -34988,6 +37894,7 @@
     "RecommendationJobVpcSubnetId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "RecommendationJobVpcSubnets":{
@@ -35001,19 +37908,23 @@
       "members":{
         "CostPerHour":{
           "shape":"Float",
-          "documentation":"<p>Defines the cost per hour for the instance. </p>"
+          "documentation":"<p>Defines the cost per hour for the instance. </p>",
+          "box":true
         },
         "CostPerInference":{
           "shape":"Float",
-          "documentation":"<p>Defines the cost per inference for the instance .</p>"
+          "documentation":"<p>Defines the cost per inference for the instance .</p>",
+          "box":true
         },
         "MaxInvocations":{
           "shape":"Integer",
-          "documentation":"<p>The expected maximum number of requests per minute for the instance.</p>"
+          "documentation":"<p>The expected maximum number of requests per minute for the instance.</p>",
+          "box":true
         },
         "ModelLatency":{
           "shape":"Integer",
-          "documentation":"<p>The expected model latency at maximum invocation per minute for the instance.</p>"
+          "documentation":"<p>The expected model latency at maximum invocation per minute for the instance.</p>",
+          "box":true
         },
         "CpuUtilization":{
           "shape":"UtilizationMetric",
@@ -35134,7 +38045,12 @@
       "type":"string",
       "max":14,
       "min":5,
-      "pattern":"^\\d{1,4}.\\d{1,4}.\\d{1,4}$"
+      "pattern":"\\d{1,4}.\\d{1,4}.\\d{1,4}"
+    },
+    "RegionName":{
+      "type":"string",
+      "max":24,
+      "min":1
     },
     "RegisterDevicesRequest":{
       "type":"structure",
@@ -35167,6 +38083,13 @@
       },
       "documentation":"<p>Metadata for a register model job step.</p>"
     },
+    "Relation":{
+      "type":"string",
+      "enum":[
+        "EqualTo",
+        "GreaterThanOrEqualTo"
+      ]
+    },
     "ReleaseNotes":{
       "type":"string",
       "max":255,
@@ -35295,7 +38218,8 @@
     "RepositoryUrl":{
       "type":"string",
       "max":1024,
-      "pattern":"^https://([.\\-_a-zA-Z0-9]+/?){3,1016}$"
+      "min":0,
+      "pattern":"https://([.\\-_a-zA-Z0-9]+/?){3,1016}"
     },
     "ReservedCapacityArn":{
       "type":"string",
@@ -35305,18 +38229,20 @@
     },
     "ReservedCapacityDurationHours":{
       "type":"long",
+      "box":true,
       "max":87600,
       "min":0
     },
     "ReservedCapacityDurationMinutes":{
       "type":"long",
+      "box":true,
       "max":59,
       "min":0
     },
     "ReservedCapacityInstanceCount":{
       "type":"integer",
       "max":256,
-      "min":1
+      "min":0
     },
     "ReservedCapacityInstanceType":{
       "type":"string",
@@ -35326,7 +38252,11 @@
         "ml.p5e.48xlarge",
         "ml.p5en.48xlarge",
         "ml.trn1.32xlarge",
-        "ml.trn2.48xlarge"
+        "ml.trn2.48xlarge",
+        "ml.p6-b200.48xlarge",
+        "ml.p4de.24xlarge",
+        "ml.p6e-gb200.36xlarge",
+        "ml.p5.4xlarge"
       ]
     },
     "ReservedCapacityOffering":{
@@ -35336,13 +38266,26 @@
         "InstanceCount"
       ],
       "members":{
+        "ReservedCapacityType":{
+          "shape":"ReservedCapacityType",
+          "documentation":"<p>The type of reserved capacity offering.</p>"
+        },
+        "UltraServerType":{
+          "shape":"UltraServerType",
+          "documentation":"<p>The type of UltraServer included in this reserved capacity offering, such as ml.u-p6e-gb200x72.</p>"
+        },
+        "UltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The number of UltraServers included in this reserved capacity offering.</p>"
+        },
         "InstanceType":{
           "shape":"ReservedCapacityInstanceType",
           "documentation":"<p>The instance type for the reserved capacity offering.</p>"
         },
         "InstanceCount":{
           "shape":"ReservedCapacityInstanceCount",
-          "documentation":"<p>The number of instances in the reserved capacity offering.</p>"
+          "documentation":"<p>The number of instances in the reserved capacity offering.</p>",
+          "box":true
         },
         "AvailabilityZone":{
           "shape":"AvailabilityZone",
@@ -35402,6 +38345,18 @@
           "shape":"ReservedCapacityArn",
           "documentation":"<p>The Amazon Resource Name (ARN); of the reserved capacity.</p>"
         },
+        "ReservedCapacityType":{
+          "shape":"ReservedCapacityType",
+          "documentation":"<p>The type of reserved capacity.</p>"
+        },
+        "UltraServerType":{
+          "shape":"UltraServerType",
+          "documentation":"<p>The type of UltraServer included in this reserved capacity, such as ml.u-p6e-gb200x72.</p>"
+        },
+        "UltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The number of UltraServers included in this reserved capacity.</p>"
+        },
         "InstanceType":{
           "shape":"ReservedCapacityInstanceType",
           "documentation":"<p>The instance type for the reserved capacity.</p>"
@@ -35437,6 +38392,13 @@
       },
       "documentation":"<p>Details of a reserved capacity for the training plan.</p> <p>For more information about how to reserve GPU capacity for your SageMaker HyperPod clusters using Amazon SageMaker Training Plan, see <code> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingPlan.html\">CreateTrainingPlan</a> </code>.</p>"
     },
+    "ReservedCapacityType":{
+      "type":"string",
+      "enum":[
+        "UltraServer",
+        "Instance"
+      ]
+    },
     "ResolvedAttributes":{
       "type":"structure",
       "members":{
@@ -35452,6 +38414,7 @@
     "ResourceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z-]*:sagemaker:[a-z0-9-]*:[0-9]{12}:.+"
     },
     "ResourceCatalog":{
@@ -35485,11 +38448,13 @@
     "ResourceCatalogArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:sagemaker-catalog/.*"
     },
     "ResourceCatalogDescription":{
       "type":"string",
-      "max":256
+      "max":256,
+      "min":0
     },
     "ResourceCatalogList":{
       "type":"list",
@@ -35517,15 +38482,17 @@
       "members":{
         "InstanceType":{
           "shape":"TrainingInstanceType",
-          "documentation":"<p>The ML compute instance type. </p> <note> <p>SageMaker Training on Amazon Elastic Compute Cloud (EC2) P4de instances is in preview release starting December 9th, 2022. </p> <p> <a href=\"http://aws.amazon.com/ec2/instance-types/p4/\">Amazon EC2 P4de instances</a> (currently in preview) are powered by 8 NVIDIA A100 GPUs with 80GB high-performance HBM2e GPU memory, which accelerate the speed of training ML models that need to be trained on large datasets of high-resolution data. In this preview release, Amazon SageMaker supports ML training jobs on P4de instances (<code>ml.p4de.24xlarge</code>) to reduce model training time. The <code>ml.p4de.24xlarge</code> instances are available in the following Amazon Web Services Regions. </p> <ul> <li> <p>US East (N. Virginia) (us-east-1)</p> </li> <li> <p>US West (Oregon) (us-west-2)</p> </li> </ul> <p>To request quota limit increase and start using P4de instances, contact the SageMaker Training service team through your account team.</p> </note>"
+          "documentation":"<p>The ML compute instance type. </p>"
         },
         "InstanceCount":{
           "shape":"TrainingInstanceCount",
-          "documentation":"<p>The number of ML compute instances to use. For distributed training, provide a value greater than 1. </p>"
+          "documentation":"<p>The number of ML compute instances to use. For distributed training, provide a value greater than 1. </p>",
+          "box":true
         },
         "VolumeSizeInGB":{
           "shape":"VolumeSizeInGB",
-          "documentation":"<p>The size of the ML storage volume that you want to provision. </p> <p>ML storage volumes store model artifacts and incremental states. Training algorithms might also use the ML storage volume for scratch space. If you want to store the training data in the ML storage volume, choose <code>File</code> as the <code>TrainingInputMode</code> in the algorithm specification. </p> <p>When using an ML instance with <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#nvme-ssd-volumes\">NVMe SSD volumes</a>, SageMaker doesn't provision Amazon EBS General Purpose SSD (gp2) storage. Available storage is fixed to the NVMe-type instance's storage capacity. SageMaker configures storage paths for training datasets, checkpoints, model artifacts, and outputs to use the entire capacity of the instance storage. For example, ML instance families with the NVMe-type instance storage include <code>ml.p4d</code>, <code>ml.g4dn</code>, and <code>ml.g5</code>. </p> <p>When using an ML instance with the EBS-only storage option and without instance storage, you must define the size of EBS volume through <code>VolumeSizeInGB</code> in the <code>ResourceConfig</code> API. For example, ML instance families that use EBS volumes include <code>ml.c5</code> and <code>ml.p2</code>. </p> <p>To look up instance types and their instance storage types and volumes, see <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>.</p> <p>To find the default local paths defined by the SageMaker training platform, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-train-storage.html\">Amazon SageMaker Training Storage Folders for Training Datasets, Checkpoints, Model Artifacts, and Outputs</a>.</p>"
+          "documentation":"<p>The size of the ML storage volume that you want to provision. </p> <p>ML storage volumes store model artifacts and incremental states. Training algorithms might also use the ML storage volume for scratch space. If you want to store the training data in the ML storage volume, choose <code>File</code> as the <code>TrainingInputMode</code> in the algorithm specification. </p> <p>When using an ML instance with <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#nvme-ssd-volumes\">NVMe SSD volumes</a>, SageMaker doesn't provision Amazon EBS General Purpose SSD (gp2) storage. Available storage is fixed to the NVMe-type instance's storage capacity. SageMaker configures storage paths for training datasets, checkpoints, model artifacts, and outputs to use the entire capacity of the instance storage. For example, ML instance families with the NVMe-type instance storage include <code>ml.p4d</code>, <code>ml.g4dn</code>, and <code>ml.g5</code>. </p> <p>When using an ML instance with the EBS-only storage option and without instance storage, you must define the size of EBS volume through <code>VolumeSizeInGB</code> in the <code>ResourceConfig</code> API. For example, ML instance families that use EBS volumes include <code>ml.c5</code> and <code>ml.p2</code>. </p> <p>To look up instance types and their instance storage types and volumes, see <a href=\"http://aws.amazon.com/ec2/instance-types/\">Amazon EC2 Instance Types</a>.</p> <p>To find the default local paths defined by the SageMaker training platform, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-train-storage.html\">Amazon SageMaker Training Storage Folders for Training Datasets, Checkpoints, Model Artifacts, and Outputs</a>.</p>",
+          "box":true
         },
         "VolumeKmsKeyId":{
           "shape":"KmsKeyId",
@@ -35542,6 +38509,10 @@
         "TrainingPlanArn":{
           "shape":"TrainingPlanArn",
           "documentation":"<p>The Amazon Resource Name (ARN); of the training plan to use for this resource configuration.</p>"
+        },
+        "InstancePlacementConfig":{
+          "shape":"InstancePlacementConfig",
+          "documentation":"<p>Configuration for how training job instances are placed and allocated within UltraServers. Only applicable for UltraServer capacity.</p>"
         }
       },
       "documentation":"<p>Describes the resources, including machine learning (ML) compute instances and ML storage volumes, to use for model training. </p>"
@@ -35559,7 +38530,14 @@
     },
     "ResourceId":{
       "type":"string",
-      "max":32
+      "max":32,
+      "min":0
+    },
+    "ResourceIdentifier":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:.*\\/.*"
     },
     "ResourceInUse":{
       "type":"structure",
@@ -35587,7 +38565,8 @@
         },
         "MaxParallelTrainingJobs":{
           "shape":"MaxParallelTrainingJobs",
-          "documentation":"<p>The maximum number of concurrent training jobs that a hyperparameter tuning job can launch.</p>"
+          "documentation":"<p>The maximum number of concurrent training jobs that a hyperparameter tuning job can launch.</p>",
+          "box":true
         },
         "MaxRuntimeInSeconds":{
           "shape":"HyperParameterTuningMaxRuntimeInSeconds",
@@ -35607,6 +38586,7 @@
     "ResourcePolicyString":{
       "type":"string",
       "max":20480,
+      "min":0,
       "pattern":".*(?:[ \\r\\n\\t].*)*"
     },
     "ResourcePropertyName":{
@@ -35617,7 +38597,8 @@
     },
     "ResourceRetainedBillableTimeInSeconds":{
       "type":"integer",
-      "documentation":"Optional. Indicates how many seconds the resource stayed in ResourceRetained state. Populated only after resource reaches ResourceReused or ResourceReleased state.",
+      "documentation":"<p>Optional. Indicates how many seconds the resource stayed in ResourceRetained state. Populated only after resource reaches ResourceReused or ResourceReleased state.</p>",
+      "box":true,
       "min":0
     },
     "ResourceSharingConfig":{
@@ -35652,7 +38633,7 @@
         },
         "SageMakerImageVersionArn":{
           "shape":"ImageVersionArn",
-          "documentation":"<p>The ARN of the image version created on the instance.</p>"
+          "documentation":"<p>The ARN of the image version created on the instance. To clear the value set for <code>SageMakerImageVersionArn</code>, pass <code>None</code> as the value.</p>"
         },
         "SageMakerImageVersionAlias":{
           "shape":"ImageVersionAlias",
@@ -35667,7 +38648,7 @@
           "documentation":"<p> The Amazon Resource Name (ARN) of the Lifecycle Configuration attached to the Resource.</p>"
         }
       },
-      "documentation":"<p>Specifies the ARN's of a SageMaker AI image and SageMaker AI image version, and the instance type that the version runs on.</p>"
+      "documentation":"<p>Specifies the ARN's of a SageMaker AI image and SageMaker AI image version, and the instance type that the version runs on.</p> <note> <p>When both <code>SageMakerImageVersionArn</code> and <code>SageMakerImageArn</code> are passed, <code>SageMakerImageVersionArn</code> is used. Any updates to <code>SageMakerImageArn</code> will not take effect if <code>SageMakerImageVersionArn</code> already exists in the <code>ResourceSpec</code> because <code>SageMakerImageVersionArn</code> always takes precedence. To clear the value set for <code>SageMakerImageVersionArn</code>, pass <code>None</code> as the value.</p> </note>"
     },
     "ResourceType":{
       "type":"string",
@@ -35688,13 +38669,15 @@
         "ImageVersion",
         "Project",
         "HyperParameterTuningJob",
-        "ModelCard"
+        "ModelCard",
+        "PipelineVersion"
       ]
     },
     "ResponseMIMEType":{
       "type":"string",
       "max":1024,
-      "pattern":"^[-\\w]+\\/.+$"
+      "min":0,
+      "pattern":"[-\\w]+\\/.+"
     },
     "ResponseMIMETypes":{
       "type":"list",
@@ -35754,7 +38737,8 @@
       "members":{
         "MaximumRetryAttempts":{
           "shape":"MaximumRetryAttempts",
-          "documentation":"<p>The number of times to retry the job. When the job is retried, it's <code>SecondaryStatus</code> is changed to <code>STARTING</code>.</p>"
+          "documentation":"<p>The number of times to retry the job. When the job is retried, it's <code>SecondaryStatus</code> is changed to <code>STARTING</code>.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The retry strategy to use when a training job fails due to an <code>InternalServerError</code>. <code>RetryStrategy</code> is specified as part of the <code>CreateTrainingJob</code> and <code>CreateHyperParameterTuningJob</code> requests. You can add the <code>StoppingCondition</code> parameter to the request to limit the training time for the complete job.</p>"
@@ -35763,7 +38747,22 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+      "pattern":"arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
+    },
+    "RollingDeploymentPolicy":{
+      "type":"structure",
+      "required":["MaximumBatchSize"],
+      "members":{
+        "MaximumBatchSize":{
+          "shape":"CapacitySizeConfig",
+          "documentation":"<p>The maximum amount of instances in the cluster that SageMaker can update at a time.</p>"
+        },
+        "RollbackMaximumBatchSize":{
+          "shape":"CapacitySizeConfig",
+          "documentation":"<p>The maximum amount of instances in the cluster that SageMaker can roll back at a time.</p>"
+        }
+      },
+      "documentation":"<p>The configurations that SageMaker uses when updating the AMI versions.</p>"
     },
     "RollingUpdatePolicy":{
       "type":"structure",
@@ -35845,7 +38844,7 @@
       "members":{
         "S3DataType":{
           "shape":"S3DataType",
-          "documentation":"<p>If you choose <code>S3Prefix</code>, <code>S3Uri</code> identifies a key name prefix. SageMaker uses all objects that match the specified key name prefix for model training. </p> <p>If you choose <code>ManifestFile</code>, <code>S3Uri</code> identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training. </p> <p>If you choose <code>AugmentedManifestFile</code>, <code>S3Uri</code> identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. <code>AugmentedManifestFile</code> can only be used if the Channel's input mode is <code>Pipe</code>.</p>"
+          "documentation":"<p>If you choose <code>S3Prefix</code>, <code>S3Uri</code> identifies a key name prefix. SageMaker uses all objects that match the specified key name prefix for model training. </p> <p>If you choose <code>ManifestFile</code>, <code>S3Uri</code> identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training. </p> <p>If you choose <code>AugmentedManifestFile</code>, <code>S3Uri</code> identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. <code>AugmentedManifestFile</code> can only be used if the Channel's input mode is <code>Pipe</code>.</p> <p>If you choose <code>Converse</code>, <code>S3Uri</code> identifies an Amazon S3 location that contains data formatted according to Converse format. This format structures conversational messages with specific roles and content types used for training and fine-tuning foundational models.</p>"
         },
         "S3Uri":{
           "shape":"S3Uri",
@@ -35862,6 +38861,11 @@
         "InstanceGroupNames":{
           "shape":"InstanceGroupNames",
           "documentation":"<p>A list of names of instance groups that get data from the S3 data source.</p>"
+        },
+        "ModelAccessConfig":{"shape":"ModelAccessConfig"},
+        "HubAccessConfig":{
+          "shape":"HubAccessConfig",
+          "documentation":"<p>The configuration for a private hub model reference that points to a SageMaker JumpStart public hub model.</p>"
         }
       },
       "documentation":"<p>Describes the S3 data source.</p> <p>Your input bucket must be in the same Amazon Web Services region as your training job.</p>"
@@ -35871,9 +38875,36 @@
       "enum":[
         "ManifestFile",
         "S3Prefix",
-        "AugmentedManifestFile"
+        "AugmentedManifestFile",
+        "Converse"
       ]
     },
+    "S3FileSystem":{
+      "type":"structure",
+      "required":["S3Uri"],
+      "members":{
+        "S3Uri":{
+          "shape":"S3SchemaUri",
+          "documentation":"<p>The Amazon S3 URI that specifies the location in S3 where files are stored, which is mounted within the Studio environment. For example: <code>s3://&lt;bucket-name&gt;/&lt;prefix&gt;/</code>.</p>"
+        }
+      },
+      "documentation":"<p>A custom file system in Amazon S3. This is only supported in Amazon SageMaker Unified Studio.</p>"
+    },
+    "S3FileSystemConfig":{
+      "type":"structure",
+      "required":["S3Uri"],
+      "members":{
+        "MountPath":{
+          "shape":"String1024",
+          "documentation":"<p>The file system path where the Amazon S3 storage location will be mounted within the Amazon SageMaker Studio environment.</p>"
+        },
+        "S3Uri":{
+          "shape":"S3SchemaUri",
+          "documentation":"<p>The Amazon S3 URI of the S3 file system configuration.</p>"
+        }
+      },
+      "documentation":"<p>Configuration for the custom Amazon S3 file system.</p>"
+    },
     "S3ModelDataSource":{
       "type":"structure",
       "required":[
@@ -35927,12 +38958,14 @@
     "S3ModelUri":{
       "type":"string",
       "max":1024,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "S3OutputPath":{
       "type":"string",
       "max":1024,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "S3Presign":{
       "type":"structure",
@@ -35944,6 +38977,12 @@
       },
       "documentation":"<p>This object defines the access restrictions to Amazon S3 resources that are included in custom worker task templates using the Liquid filter, <code>grant_read_access</code>.</p> <p>To learn more about how custom templates are created, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/a2i-custom-templates.html\">Create custom worker task templates</a>.</p>"
     },
+    "S3SchemaUri":{
+      "type":"string",
+      "max":1024,
+      "min":0,
+      "pattern":"(s3)://([^/]+)/?(.*)"
+    },
     "S3StorageConfig":{
       "type":"structure",
       "required":["S3Uri"],
@@ -35966,7 +39005,8 @@
     "S3Uri":{
       "type":"string",
       "max":1024,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "SageMakerImageName":{
       "type":"string",
@@ -35976,7 +39016,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"(?!^[.-])^([a-zA-Z0-9-_.]+)$"
+      "pattern":"(?!^[.-])^([a-zA-Z0-9-_.]+)"
     },
     "SageMakerImageVersionAliases":{
       "type":"list",
@@ -35985,7 +39025,8 @@
     "SageMakerPublicHubContentArn":{
       "type":"string",
       "max":255,
-      "pattern":"^arn:[a-z0-9-\\.]{1,63}:sagemaker:\\w+(?:-\\w+)+:aws:hub-content\\/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}\\/Model\\/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}$"
+      "min":0,
+      "pattern":"arn:[a-z0-9-\\.]{1,63}:sagemaker:\\w+(?:-\\w+)+:aws:hub-content\\/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}\\/Model\\/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
     },
     "SageMakerResourceName":{
       "type":"string",
@@ -36010,10 +39051,11 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9_-]+$"
+      "pattern":"[a-zA-Z0-9_-]+"
     },
     "SamplingPercentage":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":0
     },
@@ -36037,11 +39079,13 @@
       "members":{
         "InvocationsPerInstance":{
           "shape":"Integer",
-          "documentation":"<p>The number of invocations sent to a model, normalized by <code>InstanceCount</code> in each ProductionVariant. <code>1/numberOfInstances</code> is sent as the value on each request, where <code>numberOfInstances</code> is the number of active instances for the ProductionVariant behind the endpoint at the time of the request.</p>"
+          "documentation":"<p>The number of invocations sent to a model, normalized by <code>InstanceCount</code> in each ProductionVariant. <code>1/numberOfInstances</code> is sent as the value on each request, where <code>numberOfInstances</code> is the number of active instances for the ProductionVariant behind the endpoint at the time of the request.</p>",
+          "box":true
         },
         "ModelLatency":{
           "shape":"Integer",
-          "documentation":"<p>The interval of time taken by a model to respond as viewed from SageMaker. This interval includes the local communication times taken to send the request and to fetch the response from the container of a model and the time taken to complete the inference in the container.</p>"
+          "documentation":"<p>The interval of time taken by a model to respond as viewed from SageMaker. This interval includes the local communication times taken to send the request and to fetch the response from the container of a model and the time taken to complete the inference in the container.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The metric for a scaling policy.</p>"
@@ -36051,11 +39095,13 @@
       "members":{
         "MinInvocationsPerMinute":{
           "shape":"Integer",
-          "documentation":"<p>The minimum number of expected requests to your endpoint per minute.</p>"
+          "documentation":"<p>The minimum number of expected requests to your endpoint per minute.</p>",
+          "box":true
         },
         "MaxInvocationsPerMinute":{
           "shape":"Integer",
-          "documentation":"<p>The maximum number of expected requests to your endpoint per minute.</p>"
+          "documentation":"<p>The maximum number of expected requests to your endpoint per minute.</p>",
+          "box":true
         }
       },
       "documentation":"<p>An object where you specify the anticipated traffic pattern for an endpoint.</p>"
@@ -36093,6 +39139,21 @@
         "Stopped"
       ]
     },
+    "ScheduledUpdateConfig":{
+      "type":"structure",
+      "required":["ScheduleExpression"],
+      "members":{
+        "ScheduleExpression":{
+          "shape":"CronScheduleExpression",
+          "documentation":"<p>A cron expression that specifies the schedule that SageMaker follows when updating the AMI.</p>"
+        },
+        "DeploymentConfig":{
+          "shape":"DeploymentConfiguration",
+          "documentation":"<p>The configuration to use when updating the AMI versions.</p>"
+        }
+      },
+      "documentation":"<p>The configuration object of the schedule that SageMaker follows when updating the AMI.</p>"
+    },
     "SchedulerConfig":{
       "type":"structure",
       "members":{
@@ -36127,7 +39188,8 @@
     "Scope":{
       "type":"string",
       "max":1024,
-      "pattern":"^[!#-\\[\\]-~]+( [!#-\\[\\]-~]+)*$"
+      "min":0,
+      "pattern":"[!#-\\[\\]-~]+( [!#-\\[\\]-~]+)*"
     },
     "SearchExpression":{
       "type":"structure",
@@ -36181,6 +39243,10 @@
         "ModelPackageGroup":{"shape":"ModelPackageGroup"},
         "Pipeline":{"shape":"Pipeline"},
         "PipelineExecution":{"shape":"PipelineExecution"},
+        "PipelineVersion":{
+          "shape":"PipelineVersion",
+          "documentation":"<p>The version of the pipeline.</p>"
+        },
         "FeatureGroup":{"shape":"FeatureGroup"},
         "FeatureMetadata":{
           "shape":"FeatureMetadata",
@@ -36228,8 +39294,7 @@
         },
         "MaxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "box":true
+          "documentation":"<p>The maximum number of results to return.</p>"
         },
         "CrossAccountFilterOption":{
           "shape":"CrossAccountFilterOption",
@@ -36251,6 +39316,10 @@
         "NextToken":{
           "shape":"NextToken",
           "documentation":"<p>If the result of the previous <code>Search</code> request was truncated, the response includes a NextToken. To retrieve the next set of results, use the token in the next request.</p>"
+        },
+        "TotalHits":{
+          "shape":"TotalHits",
+          "documentation":"<p>The total number of matching results.</p>"
         }
       }
     },
@@ -36268,8 +39337,7 @@
     "SearchTrainingPlanOfferingsRequest":{
       "type":"structure",
       "required":[
-        "InstanceType",
-        "InstanceCount",
+        "DurationHours",
         "TargetResources"
       ],
       "members":{
@@ -36279,7 +39347,16 @@
         },
         "InstanceCount":{
           "shape":"ReservedCapacityInstanceCount",
-          "documentation":"<p>The number of instances you want to reserve in the training plan offerings. This allows you to specify the quantity of compute resources needed for your SageMaker training jobs or SageMaker HyperPod clusters, helping you find reserved capacity offerings that match your requirements.</p>"
+          "documentation":"<p>The number of instances you want to reserve in the training plan offerings. This allows you to specify the quantity of compute resources needed for your SageMaker training jobs or SageMaker HyperPod clusters, helping you find reserved capacity offerings that match your requirements.</p>",
+          "box":true
+        },
+        "UltraServerType":{
+          "shape":"UltraServerType",
+          "documentation":"<p>The type of UltraServer to search for, such as ml.u-p6e-gb200x72.</p>"
+        },
+        "UltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The number of UltraServers to search for.</p>"
         },
         "StartTimeAfter":{
           "shape":"Timestamp",
@@ -36370,12 +39447,14 @@
     "SecurityGroupId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "SecurityGroupIds":{
       "type":"list",
       "member":{"shape":"SecurityGroupId"},
-      "max":5
+      "max":5,
+      "min":0
     },
     "Seed":{"type":"long"},
     "SelectedStep":{
@@ -36478,16 +39557,19 @@
     },
     "ServerlessMaxConcurrency":{
       "type":"integer",
+      "box":true,
       "max":200,
       "min":1
     },
     "ServerlessMemorySizeInMB":{
       "type":"integer",
+      "box":true,
       "max":6144,
       "min":1024
     },
     "ServerlessProvisionedConcurrency":{
       "type":"integer",
+      "box":true,
       "max":200,
       "min":1
     },
@@ -36495,7 +39577,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^[a-zA-Z0-9_\\-]*"
+      "pattern":"[a-zA-Z0-9_\\-]*"
     },
     "ServiceCatalogProvisionedProductDetails":{
       "type":"structure",
@@ -36560,9 +39642,15 @@
     },
     "SessionExpirationDurationInSeconds":{
       "type":"integer",
+      "box":true,
       "max":43200,
       "min":1800
     },
+    "SessionId":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "ShadowModeConfig":{
       "type":"structure",
       "required":[
@@ -36594,7 +39682,8 @@
         },
         "SamplingPercentage":{
           "shape":"Percentage",
-          "documentation":"<p> The percentage of inference requests that Amazon SageMaker replicates from the production variant to the shadow variant. </p>"
+          "documentation":"<p> The percentage of inference requests that Amazon SageMaker replicates from the production variant to the shadow variant. </p>",
+          "box":true
         }
       },
       "documentation":"<p>The name and sampling percentage of a shadow variant.</p>"
@@ -36636,14 +39725,15 @@
       "members":{
         "Seed":{
           "shape":"Seed",
-          "documentation":"<p>Determines the shuffling order in <code>ShuffleConfig</code> value.</p>"
+          "documentation":"<p>Determines the shuffling order in <code>ShuffleConfig</code> value.</p>",
+          "box":true
         }
       },
       "documentation":"<p>A configuration for a shuffle option for input data in a channel. If you use <code>S3Prefix</code> for <code>S3DataType</code>, the results of the S3 key prefix matches are shuffled. If you use <code>ManifestFile</code>, the order of the S3 object references in the <code>ManifestFile</code> is shuffled. If you use <code>AugmentedManifestFile</code>, the order of the JSON lines in the <code>AugmentedManifestFile</code> is shuffled. The shuffling order is determined using the <code>Seed</code> value.</p> <p>For Pipe input mode, when <code>ShuffleConfig</code> is specified shuffling is done at the start of every epoch. With large datasets, this ensures that the order of the training data is different for each epoch, and it helps reduce bias and possible overfitting. In a multi-node training job when <code>ShuffleConfig</code> is combined with <code>S3DataDistributionType</code> of <code>ShardedByS3Key</code>, the data is shuffled across nodes so that the content sent to a particular node on the first epoch might be sent to a different node on the second epoch.</p>"
     },
     "SingleSignOnApplicationArn":{
       "type":"string",
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::[0-9]+:application\\/[a-zA-Z0-9-_.]+\\/apl-[a-zA-Z0-9]+$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::[0-9]+:application\\/[a-zA-Z0-9-_.]+\\/apl-[a-zA-Z0-9]+"
     },
     "SingleSignOnUserIdentifier":{
       "type":"string",
@@ -36659,8 +39749,20 @@
     "SnsTopicArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sns:[a-z0-9\\-]*:[0-9]{12}:[a-zA-Z0-9_.-]+"
     },
+    "SoftwareUpdateStatus":{
+      "type":"string",
+      "enum":[
+        "Pending",
+        "InProgress",
+        "Succeeded",
+        "Failed",
+        "RollbackInProgress",
+        "RollbackComplete"
+      ]
+    },
     "SortActionsBy":{
       "type":"string",
       "enum":[
@@ -36832,7 +39934,8 @@
     },
     "SourceType":{
       "type":"string",
-      "max":128
+      "max":128,
+      "min":0
     },
     "SourceUri":{
       "type":"string",
@@ -36853,6 +39956,7 @@
     "SpaceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:space/.*"
     },
     "SpaceCodeEditorAppSettings":{
@@ -36910,6 +40014,7 @@
     },
     "SpaceEbsVolumeSizeInGb":{
       "type":"integer",
+      "box":true,
       "max":16384,
       "min":5
     },
@@ -36945,7 +40050,8 @@
     "SpaceName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "SpaceSettings":{
       "type":"structure",
@@ -36968,9 +40074,17 @@
           "shape":"SpaceStorageSettings",
           "documentation":"<p>The storage settings for a space.</p>"
         },
+        "SpaceManagedResources":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>If you enable this option, SageMaker AI creates the following resources on your behalf when you create the space:</p> <ul> <li> <p>The user profile that possesses the space.</p> </li> <li> <p>The app that the space contains.</p> </li> </ul>"
+        },
         "CustomFileSystems":{
           "shape":"CustomFileSystems",
           "documentation":"<p>A file system, created by you, that you assign to a space for an Amazon SageMaker AI Domain. Permitted users can access this file system in Amazon SageMaker AI Studio.</p>"
+        },
+        "RemoteAccess":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>A setting that enables or disables remote access for a SageMaker space. When enabled, this allows you to connect to the remote space from your local IDE.</p>"
         }
       },
       "documentation":"<p>A collection of space settings.</p>"
@@ -36982,6 +40096,10 @@
           "shape":"AppType",
           "documentation":"<p>The type of app created within the space.</p>"
         },
+        "RemoteAccess":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>A setting that enables or disables remote access for a SageMaker space. When enabled, this allows you to connect to the remote space from your local IDE.</p>"
+        },
         "SpaceStorageSettings":{
           "shape":"SpaceStorageSettings",
           "documentation":"<p>The storage settings for a space.</p>"
@@ -37039,8 +40157,14 @@
       },
       "documentation":"<p>The storage settings for a space.</p>"
     },
+    "SpareInstanceCountPerUltraServer":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "SpawnRate":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "SplitType":{
@@ -37056,7 +40180,7 @@
       "type":"string",
       "max":1024,
       "min":0,
-      "pattern":"^.{0,1024}$"
+      "pattern":".{0,1024}"
     },
     "StageStatus":{
       "type":"string",
@@ -37200,6 +40324,10 @@
         "SelectiveExecutionConfig":{
           "shape":"SelectiveExecutionConfig",
           "documentation":"<p>The selective execution configuration applied to the pipeline run.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version to start execution from.</p>"
         }
       }
     },
@@ -37212,6 +40340,33 @@
         }
       }
     },
+    "StartSessionRequest":{
+      "type":"structure",
+      "required":["ResourceIdentifier"],
+      "members":{
+        "ResourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to which the remote connection will be established. For example, this identifies the specific ARN space application you want to connect to from your local IDE.</p>"
+        }
+      }
+    },
+    "StartSessionResponse":{
+      "type":"structure",
+      "members":{
+        "SessionId":{
+          "shape":"SessionId",
+          "documentation":"<p>A unique identifier for the established remote connection session.</p>"
+        },
+        "StreamUrl":{
+          "shape":"StreamUrl",
+          "documentation":"<p>A WebSocket URL used to establish a SSH connection between the local IDE and remote SageMaker space.</p>"
+        },
+        "TokenValue":{
+          "shape":"TokenValue",
+          "documentation":"<p>An encrypted token value containing session and caller information. </p>"
+        }
+      }
+    },
     "Statistic":{
       "type":"string",
       "enum":[
@@ -37225,6 +40380,7 @@
     "StatusDetails":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "StatusMessage":{"type":"string"},
@@ -37243,7 +40399,8 @@
     "StepName":{
       "type":"string",
       "max":64,
-      "pattern":"^[A-Za-z0-9\\-_]*$"
+      "min":0,
+      "pattern":"[A-Za-z0-9\\-_]*"
     },
     "StepStatus":{
       "type":"string",
@@ -37483,7 +40640,8 @@
       "members":{
         "MaxRuntimeInSeconds":{
           "shape":"MaxRuntimeInSeconds",
-          "documentation":"<p>The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.</p> <p>For compilation jobs, if the job does not complete during this time, a <code>TimeOut</code> error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.</p> <p>For all other jobs, if the job does not complete during this time, SageMaker ends the job. When <code>RetryStrategy</code> is specified in the job request, <code>MaxRuntimeInSeconds</code> specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.</p> <p>The maximum time that a <code>TrainingJob</code> can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.</p>"
+          "documentation":"<p>The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.</p> <p>For compilation jobs, if the job does not complete during this time, a <code>TimeOut</code> error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.</p> <p>For all other jobs, if the job does not complete during this time, SageMaker ends the job. When <code>RetryStrategy</code> is specified in the job request, <code>MaxRuntimeInSeconds</code> specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.</p> <p>The maximum time that a <code>TrainingJob</code> can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.</p>",
+          "box":true
         },
         "MaxWaitTimeInSeconds":{
           "shape":"MaxWaitTimeInSeconds",
@@ -37491,7 +40649,7 @@
         },
         "MaxPendingTimeInSeconds":{
           "shape":"MaxPendingTimeInSeconds",
-          "documentation":"<p>The maximum length of time, in seconds, that a training or compilation job can be pending before it is stopped.</p>"
+          "documentation":"<p>The maximum length of time, in seconds, that a training or compilation job can be pending before it is stopped.</p> <note> <p>When working with training jobs that use capacity from <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html\">training plans</a>, not all <code>Pending</code> job states count against the <code>MaxPendingTimeInSeconds</code> limit. The following scenarios do not increment the <code>MaxPendingTimeInSeconds</code> counter:</p> <ul> <li> <p>The plan is in a <code>Scheduled</code> state: Jobs queued (in <code>Pending</code> status) before a plan's start date (waiting for scheduled start time)</p> </li> <li> <p>Between capacity reservations: Jobs temporarily back to <code>Pending</code> status between two capacity reservation periods</p> </li> </ul> <p> <code>MaxPendingTimeInSeconds</code> only increments when jobs are actively waiting for capacity in an <code>Active</code> plan.</p> </note>"
         }
       },
       "documentation":"<p>Specifies a limit to how long a job can run. When the job reaches the time limit, SageMaker ends the job. Use this API to cap costs.</p> <p>To stop a training job, SageMaker sends the algorithm the <code>SIGTERM</code> signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost. </p> <p>The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with <code>CreateModel</code>.</p> <note> <p>The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.</p> </note>"
@@ -37503,14 +40661,17 @@
         "InMemory"
       ]
     },
+    "StreamUrl":{"type":"string"},
     "String":{"type":"string"},
     "String1024":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "String128":{
       "type":"string",
-      "max":128
+      "max":128,
+      "min":0
     },
     "String200":{
       "type":"string",
@@ -37520,31 +40681,38 @@
     },
     "String2048":{
       "type":"string",
-      "max":2048
+      "max":2048,
+      "min":0
     },
     "String256":{
       "type":"string",
-      "max":256
+      "max":256,
+      "min":0
     },
     "String3072":{
       "type":"string",
-      "max":3072
+      "max":3072,
+      "min":0
     },
     "String40":{
       "type":"string",
-      "max":40
+      "max":40,
+      "min":0
     },
     "String64":{
       "type":"string",
-      "max":64
+      "max":64,
+      "min":0
     },
     "String8192":{
       "type":"string",
-      "max":8192
+      "max":8192,
+      "min":0
     },
     "StringParameterValue":{
       "type":"string",
       "max":2500,
+      "min":0,
       "pattern":".*"
     },
     "StudioLifecycleConfigAppType":{
@@ -37559,7 +40727,8 @@
     "StudioLifecycleConfigArn":{
       "type":"string",
       "max":256,
-      "pattern":"^(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:studio-lifecycle-config/.*|None)$"
+      "min":0,
+      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:studio-lifecycle-config/.*|None)"
     },
     "StudioLifecycleConfigContent":{
       "type":"string",
@@ -37596,7 +40765,8 @@
     "StudioLifecycleConfigName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "StudioLifecycleConfigSortKey":{
       "type":"string",
@@ -37642,6 +40812,7 @@
     "SubnetId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "Subnets":{
@@ -37725,7 +40896,8 @@
         },
         "GenerateCandidateDefinitionsOnly":{
           "shape":"GenerateCandidateDefinitionsOnly",
-          "documentation":"<p>Generates possible candidates without training the models. A model candidate is a combination of data preprocessors, algorithms, and algorithm parameter settings.</p>"
+          "documentation":"<p>Generates possible candidates without training the models. A model candidate is a combination of data preprocessors, algorithms, and algorithm parameter settings.</p>",
+          "box":true
         },
         "ProblemType":{
           "shape":"ProblemType",
@@ -37774,7 +40946,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TagKeyList":{
       "type":"list",
@@ -37799,12 +40971,17 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TargetAttributeName":{
       "type":"string",
       "min":1
     },
+    "TargetCount":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
     "TargetDevice":{
       "type":"string",
       "enum":[
@@ -37852,7 +41029,10 @@
       "max":256,
       "min":1
     },
-    "TargetObjectiveMetricValue":{"type":"float"},
+    "TargetObjectiveMetricValue":{
+      "type":"float",
+      "box":true
+    },
     "TargetPlatform":{
       "type":"structure",
       "required":[
@@ -37910,17 +41090,20 @@
         },
         "TargetValue":{
           "shape":"Double",
-          "documentation":"<p>The recommended target value to specify for the metric when creating a scaling policy.</p>"
+          "documentation":"<p>The recommended target value to specify for the metric when creating a scaling policy.</p>",
+          "box":true
         }
       },
       "documentation":"<p>A target tracking scaling policy. Includes support for predefined or customized metrics.</p> <p>When using the <a href=\"https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html\">PutScalingPolicy</a> API, this parameter is required when you are creating a policy with the policy type <code>TargetTrackingScaling</code>.</p>"
     },
     "TaskAvailabilityLifetimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":60
     },
     "TaskCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "TaskDescription":{
@@ -37939,7 +41122,7 @@
       "type":"string",
       "max":30,
       "min":1,
-      "pattern":"^[A-Za-z0-9]+( [A-Za-z0-9]+)*$"
+      "pattern":"[A-Za-z0-9]+( [A-Za-z0-9]+)*"
     },
     "TaskKeywords":{
       "type":"list",
@@ -37949,13 +41132,14 @@
     },
     "TaskTimeLimitInSeconds":{
       "type":"integer",
+      "box":true,
       "min":30
     },
     "TaskTitle":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD]*$"
+      "pattern":"[\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD]*"
     },
     "TemplateContent":{
       "type":"string",
@@ -37968,6 +41152,22 @@
       "max":128000,
       "min":1
     },
+    "TemplateProviderDetail":{
+      "type":"structure",
+      "members":{
+        "CfnTemplateProviderDetail":{
+          "shape":"CfnTemplateProviderDetail",
+          "documentation":"<p> Details about a CloudFormation template provider configuration and associated provisioning information. </p>"
+        }
+      },
+      "documentation":"<p> Details about a template provider configuration and associated provisioning information. </p>"
+    },
+    "TemplateProviderDetailList":{
+      "type":"list",
+      "member":{"shape":"TemplateProviderDetail"},
+      "max":1,
+      "min":1
+    },
     "TemplateUrl":{
       "type":"string",
       "max":2048,
@@ -38005,6 +41205,7 @@
     },
     "TerminationWaitInSeconds":{
       "type":"integer",
+      "box":true,
       "max":3600,
       "min":0
     },
@@ -38033,12 +41234,14 @@
     "TextGenerationHyperParameterKey":{
       "type":"string",
       "max":32,
-      "pattern":"^[a-zA-Z0-9._-]+$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9._-]+"
     },
     "TextGenerationHyperParameterValue":{
       "type":"string",
       "max":16,
-      "pattern":"^[a-zA-Z0-9._-]+$"
+      "min":0,
+      "pattern":"[a-zA-Z0-9._-]+"
     },
     "TextGenerationHyperParameters":{
       "type":"map",
@@ -38079,6 +41282,7 @@
     "ThingName":{
       "type":"string",
       "max":128,
+      "min":0,
       "pattern":"[a-zA-Z0-9:_-]+"
     },
     "ThroughputConfig":{
@@ -38246,20 +41450,50 @@
       "max":256,
       "min":1
     },
+    "TokenValue":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "TotalHits":{
+      "type":"structure",
+      "members":{
+        "Value":{
+          "shape":"Long",
+          "documentation":"<p>The total number of matching results. This value may be exact or an estimate, depending on the <code>Relation</code> field.</p>",
+          "box":true
+        },
+        "Relation":{
+          "shape":"Relation",
+          "documentation":"<p>Indicates the relationship between the returned <code>Value</code> and the actual total number of matching results. Possible values are:</p> <ul> <li> <p> <code>EqualTo</code>: The <code>Value</code> is the exact count of matching results.</p> </li> <li> <p> <code>GreaterThanOrEqualTo</code>: The <code>Value</code> is a lower bound of the actual count of matching results.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Represents the total number of matching results and indicates how accurate that count is.</p> <p>The <code>Value</code> field provides the count, which may be exact or estimated. The <code>Relation</code> field indicates whether it's an exact figure or a lower bound. This helps understand the full scope of search results, especially when dealing with large result sets.</p>"
+    },
     "TotalInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":0
     },
     "TrackingServerArn":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:mlflow-tracking-server/.*"
     },
+    "TrackingServerMaintenanceStatus":{
+      "type":"string",
+      "enum":[
+        "MaintenanceInProgress",
+        "MaintenanceComplete",
+        "MaintenanceFailed"
+      ]
+    },
     "TrackingServerName":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,255}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,255}"
     },
     "TrackingServerSize":{
       "type":"string",
@@ -38333,10 +41567,12 @@
     },
     "TrackingServerUrl":{
       "type":"string",
-      "max":2048
+      "max":2048,
+      "min":0
     },
     "TrafficDurationInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "TrafficPattern":{
@@ -38401,6 +41637,7 @@
     "TrainingContainerArgument":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "TrainingContainerArguments":{
@@ -38418,22 +41655,26 @@
     "TrainingContainerEntrypointString":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "TrainingEnvironmentKey":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":"[a-zA-Z_][a-zA-Z0-9_]*"
     },
     "TrainingEnvironmentMap":{
       "type":"map",
       "key":{"shape":"TrainingEnvironmentKey"},
       "value":{"shape":"TrainingEnvironmentValue"},
-      "max":100
+      "max":100,
+      "min":0
     },
     "TrainingEnvironmentValue":{
       "type":"string",
       "max":512,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "TrainingImageConfig":{
@@ -38574,7 +41815,37 @@
         "ml.r5.8xlarge",
         "ml.r5.12xlarge",
         "ml.r5.16xlarge",
-        "ml.r5.24xlarge"
+        "ml.r5.24xlarge",
+        "ml.p6-b200.48xlarge",
+        "ml.m7i.large",
+        "ml.m7i.xlarge",
+        "ml.m7i.2xlarge",
+        "ml.m7i.4xlarge",
+        "ml.m7i.8xlarge",
+        "ml.m7i.12xlarge",
+        "ml.m7i.16xlarge",
+        "ml.m7i.24xlarge",
+        "ml.m7i.48xlarge",
+        "ml.c7i.large",
+        "ml.c7i.xlarge",
+        "ml.c7i.2xlarge",
+        "ml.c7i.4xlarge",
+        "ml.c7i.8xlarge",
+        "ml.c7i.12xlarge",
+        "ml.c7i.16xlarge",
+        "ml.c7i.24xlarge",
+        "ml.c7i.48xlarge",
+        "ml.r7i.large",
+        "ml.r7i.xlarge",
+        "ml.r7i.2xlarge",
+        "ml.r7i.4xlarge",
+        "ml.r7i.8xlarge",
+        "ml.r7i.12xlarge",
+        "ml.r7i.16xlarge",
+        "ml.r7i.24xlarge",
+        "ml.r7i.48xlarge",
+        "ml.p6e-gb200.36xlarge",
+        "ml.p5.4xlarge"
       ]
     },
     "TrainingInstanceTypes":{
@@ -38678,15 +41949,18 @@
         },
         "EnableNetworkIsolation":{
           "shape":"Boolean",
-          "documentation":"<p>If the <code>TrainingJob</code> was created with network isolation, the value is set to <code>true</code>. If network isolation is enabled, nodes can't communicate beyond the VPC they run in.</p>"
+          "documentation":"<p>If the <code>TrainingJob</code> was created with network isolation, the value is set to <code>true</code>. If network isolation is enabled, nodes can't communicate beyond the VPC they run in.</p>",
+          "box":true
         },
         "EnableInterContainerTrafficEncryption":{
           "shape":"Boolean",
-          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training.</p>"
+          "documentation":"<p>To encrypt all communications between ML compute instances in distributed training, choose <code>True</code>. Encryption provides greater security for distributed training, but training might take longer. How long it takes depends on the amount of communication between compute instances, especially if you use a deep learning algorithm in distributed training.</p>",
+          "box":true
         },
         "EnableManagedSpotTraining":{
           "shape":"Boolean",
-          "documentation":"<p>When true, enables managed spot training using Amazon EC2 Spot instances to run training jobs instead of on-demand instances. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html\">Managed Spot Training</a>.</p>"
+          "documentation":"<p>When true, enables managed spot training using Amazon EC2 Spot instances to run training jobs instead of on-demand instances. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html\">Managed Spot Training</a>.</p>",
+          "box":true
         },
         "CheckpointConfig":{"shape":"CheckpointConfig"},
         "TrainingTimeInSeconds":{
@@ -38727,7 +42001,8 @@
     "TrainingJobArn":{
       "type":"string",
       "max":256,
-      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:training-job/.*"
+      "min":0,
+      "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:training-job/[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "TrainingJobDefinition":{
       "type":"structure",
@@ -38774,7 +42049,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "TrainingJobSortByOptions":{
       "type":"string",
@@ -38792,7 +42067,8 @@
         "Completed",
         "Failed",
         "Stopping",
-        "Stopped"
+        "Stopped",
+        "Deleting"
       ]
     },
     "TrainingJobStatusCounter":{
@@ -38804,23 +42080,28 @@
       "members":{
         "Completed":{
           "shape":"TrainingJobStatusCounter",
-          "documentation":"<p>The number of completed training jobs launched by the hyperparameter tuning job.</p>"
+          "documentation":"<p>The number of completed training jobs launched by the hyperparameter tuning job.</p>",
+          "box":true
         },
         "InProgress":{
           "shape":"TrainingJobStatusCounter",
-          "documentation":"<p>The number of in-progress training jobs launched by a hyperparameter tuning job.</p>"
+          "documentation":"<p>The number of in-progress training jobs launched by a hyperparameter tuning job.</p>",
+          "box":true
         },
         "RetryableError":{
           "shape":"TrainingJobStatusCounter",
-          "documentation":"<p>The number of training jobs that failed, but can be retried. A failed training job can be retried only if it failed because an internal service error occurred.</p>"
+          "documentation":"<p>The number of training jobs that failed, but can be retried. A failed training job can be retried only if it failed because an internal service error occurred.</p>",
+          "box":true
         },
         "NonRetryableError":{
           "shape":"TrainingJobStatusCounter",
-          "documentation":"<p>The number of training jobs that failed and can't be retried. A failed training job can't be retried if it failed because a client error occurred.</p>"
+          "documentation":"<p>The number of training jobs that failed and can't be retried. A failed training job can't be retried if it failed because a client error occurred.</p>",
+          "box":true
         },
         "Stopped":{
           "shape":"TrainingJobStatusCounter",
-          "documentation":"<p>The number of training jobs launched by a hyperparameter tuning job that were manually stopped.</p>"
+          "documentation":"<p>The number of training jobs launched by a hyperparameter tuning job that were manually stopped.</p>",
+          "box":true
         }
       },
       "documentation":"<p>The numbers of training jobs launched by a hyperparameter tuning job, categorized by status.</p>"
@@ -38899,16 +42180,19 @@
     },
     "TrainingPlanDurationHours":{
       "type":"long",
+      "box":true,
       "max":87600,
       "min":0
     },
     "TrainingPlanDurationHoursInput":{
       "type":"long",
+      "box":true,
       "max":87600,
       "min":1
     },
     "TrainingPlanDurationMinutes":{
       "type":"long",
+      "box":true,
       "max":59,
       "min":0
     },
@@ -38944,7 +42228,7 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,63}"
     },
     "TrainingPlanOffering":{
       "type":"structure",
@@ -38996,7 +42280,7 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[a-z0-9\\-]+$"
+      "pattern":"[a-z0-9\\-]+"
     },
     "TrainingPlanOfferings":{
       "type":"list",
@@ -39097,6 +42381,10 @@
           "shape":"InUseInstanceCount",
           "documentation":"<p>The number of instances currently in use from this training plan.</p>"
         },
+        "TotalUltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The total number of UltraServers allocated to this training plan.</p>"
+        },
         "TargetResources":{
           "shape":"SageMakerResourceNames",
           "documentation":"<p>The target resources (e.g., training jobs, HyperPod clusters) that can use this training plan.</p> <p>Training plans are specific to their target resource.</p> <ul> <li> <p>A training plan designed for SageMaker training jobs can only be used to schedule and run training jobs.</p> </li> <li> <p>A training plan for HyperPod clusters can be used exclusively to provide compute resources to a cluster's instance group.</p> </li> </ul>"
@@ -39158,7 +42446,8 @@
         },
         "SupportsDistributedTraining":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether the algorithm supports distributed training. If set to false, buyers can't request more than one instance during training.</p>"
+          "documentation":"<p>Indicates whether the algorithm supports distributed training. If set to false, buyers can't request more than one instance during training.</p>",
+          "box":true
         },
         "MetricDefinitions":{
           "shape":"MetricDefinitionList",
@@ -39181,8 +42470,15 @@
     },
     "TrainingTimeInSeconds":{
       "type":"integer",
+      "box":true,
       "min":1
     },
+    "TransformAmiVersion":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*"
+    },
     "TransformDataSource":{
       "type":"structure",
       "required":["S3DataSource"],
@@ -39197,17 +42493,20 @@
     "TransformEnvironmentKey":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":"[a-zA-Z_][a-zA-Z0-9_]{0,1023}"
     },
     "TransformEnvironmentMap":{
       "type":"map",
       "key":{"shape":"TransformEnvironmentKey"},
       "value":{"shape":"TransformEnvironmentValue"},
-      "max":16
+      "max":16,
+      "min":0
     },
     "TransformEnvironmentValue":{
       "type":"string",
       "max":10240,
+      "min":0,
       "pattern":"[\\S\\s]*"
     },
     "TransformInput":{
@@ -39235,6 +42534,7 @@
     },
     "TransformInstanceCount":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "TransformInstanceType":{
@@ -39339,7 +42639,15 @@
         "ml.inf2.xlarge",
         "ml.inf2.8xlarge",
         "ml.inf2.24xlarge",
-        "ml.inf2.48xlarge"
+        "ml.inf2.48xlarge",
+        "ml.g6.xlarge",
+        "ml.g6.2xlarge",
+        "ml.g6.4xlarge",
+        "ml.g6.8xlarge",
+        "ml.g6.12xlarge",
+        "ml.g6.16xlarge",
+        "ml.g6.24xlarge",
+        "ml.g6.48xlarge"
       ]
     },
     "TransformInstanceTypes":{
@@ -39423,6 +42731,7 @@
     "TransformJobArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:transform-job/.*"
     },
     "TransformJobDefinition":{
@@ -39468,7 +42777,7 @@
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "TransformJobStatus":{
       "type":"string",
@@ -39575,6 +42884,10 @@
         "VolumeKmsKeyId":{
           "shape":"KmsKeyId",
           "documentation":"<p>The Amazon Web Services Key Management Service (Amazon Web Services KMS) key that Amazon SageMaker uses to encrypt model data on the storage volume attached to the ML compute instance(s) that run the batch transform job.</p> <note> <p>Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a <code>VolumeKmsKeyId</code> when using an instance type with local storage.</p> <p>For a list of instance types that support local instance storage, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes\">Instance Store Volumes</a>.</p> <p>For more information about local instance storage encryption, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html\">SSD Instance Store Volumes</a>.</p> </note> <p> The <code>VolumeKmsKeyId</code> can be any of the following formats:</p> <ul> <li> <p>Key ID: <code>1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Key ARN: <code>arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code> </p> </li> <li> <p>Alias name: <code>alias/ExampleAlias</code> </p> </li> <li> <p>Alias name ARN: <code>arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias</code> </p> </li> </ul>"
+        },
+        "TransformAmiVersion":{
+          "shape":"TransformAmiVersion",
+          "documentation":"<p>Specifies an option from a collection of preconfigured Amazon Machine Image (AMI) images. Each image is configured by Amazon Web Services with a set of software and driver versions.</p> <dl> <dt>al2-ami-sagemaker-batch-gpu-470</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 470</p> </li> </ul> </dd> <dt>al2-ami-sagemaker-batch-gpu-535</dt> <dd> <ul> <li> <p>Accelerator: GPU</p> </li> <li> <p>NVIDIA driver version: 535</p> </li> </ul> </dd> </dl>"
         }
       },
       "documentation":"<p>Describes the resources, including ML instance types and ML instance count, to use for transform job.</p>"
@@ -39650,6 +42963,7 @@
     "TrialArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:experiment-trial/.*"
     },
     "TrialComponent":{
@@ -39736,6 +43050,7 @@
     "TrialComponentArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:experiment-trial-component/.*"
     },
     "TrialComponentArtifact":{
@@ -39756,27 +43071,32 @@
     "TrialComponentArtifactValue":{
       "type":"string",
       "max":2048,
+      "min":0,
       "pattern":".*"
     },
     "TrialComponentArtifacts":{
       "type":"map",
       "key":{"shape":"TrialComponentKey128"},
       "value":{"shape":"TrialComponentArtifact"},
-      "max":60
+      "max":60,
+      "min":0
     },
     "TrialComponentKey128":{
       "type":"string",
       "max":128,
+      "min":0,
       "pattern":".*"
     },
     "TrialComponentKey256":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":".*"
     },
     "TrialComponentKey320":{
       "type":"string",
       "max":320,
+      "min":0,
       "pattern":".*"
     },
     "TrialComponentMetricSummaries":{
@@ -39843,7 +43163,8 @@
       "type":"map",
       "key":{"shape":"TrialComponentKey320"},
       "value":{"shape":"TrialComponentParameterValue"},
-      "max":300
+      "max":300,
+      "min":0
     },
     "TrialComponentPrimaryStatus":{
       "type":"string",
@@ -39897,6 +43218,7 @@
     "TrialComponentSourceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:.*"
     },
     "TrialComponentSourceDetail":{
@@ -39942,6 +43264,7 @@
     "TrialComponentStatusMessage":{
       "type":"string",
       "max":1024,
+      "min":0,
       "pattern":".*"
     },
     "TrialComponentSummaries":{
@@ -40013,6 +43336,7 @@
     "TrialSourceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:.*"
     },
     "TrialSummaries":{
@@ -40046,6 +43370,17 @@
       },
       "documentation":"<p>A summary of the properties of a trial. To get the complete set of properties, call the <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrial.html\">DescribeTrial</a> API and provide the <code>TrialName</code>.</p>"
     },
+    "TrustedIdentityPropagationSettings":{
+      "type":"structure",
+      "required":["Status"],
+      "members":{
+        "Status":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>The status of Trusted Identity Propagation (TIP) at the SageMaker domain level. </p> <p>When disabled, standard IAM role-based access is used. </p> <p>When enabled:</p> <ul> <li> <p>User identities from IAM Identity Center are propagated through the application to TIP enabled Amazon Web Services services.</p> </li> <li> <p>New applications or existing applications that are automatically patched, will use the domain level configuration.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The Trusted Identity Propagation (TIP) settings for the SageMaker domain. These settings determine how user identities from IAM Identity Center are propagated through the domain to TIP enabled Amazon Web Services services.</p>"
+    },
     "TtlDuration":{
       "type":"structure",
       "members":{
@@ -40072,6 +43407,7 @@
     },
     "TtlDurationValue":{
       "type":"integer",
+      "box":true,
       "min":1
     },
     "TuningJobCompletionCriteria":{
@@ -40107,15 +43443,18 @@
       "members":{
         "Dollars":{
           "shape":"Dollars",
-          "documentation":"<p>The whole number of dollars in the amount.</p>"
+          "documentation":"<p>The whole number of dollars in the amount.</p>",
+          "box":true
         },
         "Cents":{
           "shape":"Cents",
-          "documentation":"<p>The fractional portion, in cents, of the amount. </p>"
+          "documentation":"<p>The fractional portion, in cents, of the amount. </p>",
+          "box":true
         },
         "TenthFractionsOfACent":{
           "shape":"TenthFractionsOfACent",
-          "documentation":"<p>Fractions of a cent, in tenths.</p>"
+          "documentation":"<p>Fractions of a cent, in tenths.</p>",
+          "box":true
         }
       },
       "documentation":"<p>Represents an amount of money in United States dollars.</p>"
@@ -40161,9 +43500,187 @@
     },
     "Uid":{
       "type":"long",
+      "box":true,
       "max":4000000,
       "min":10000
     },
+    "UltraServer":{
+      "type":"structure",
+      "required":[
+        "UltraServerId",
+        "UltraServerType",
+        "AvailabilityZone",
+        "InstanceType",
+        "TotalInstanceCount"
+      ],
+      "members":{
+        "UltraServerId":{
+          "shape":"NonEmptyString256",
+          "documentation":"<p>The unique identifier for the UltraServer.</p>"
+        },
+        "UltraServerType":{
+          "shape":"UltraServerType",
+          "documentation":"<p>The type of UltraServer, such as ml.u-p6e-gb200x72.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>The name of the Availability Zone where the UltraServer is provisioned.</p>"
+        },
+        "InstanceType":{
+          "shape":"ReservedCapacityInstanceType",
+          "documentation":"<p>The Amazon EC2 instance type used in the UltraServer.</p>"
+        },
+        "TotalInstanceCount":{
+          "shape":"TotalInstanceCount",
+          "documentation":"<p>The total number of instances in this UltraServer.</p>"
+        },
+        "ConfiguredSpareInstanceCount":{
+          "shape":"ConfiguredSpareInstanceCount",
+          "documentation":"<p>The number of spare instances configured for this UltraServer to provide enhanced resiliency.</p>"
+        },
+        "AvailableInstanceCount":{
+          "shape":"AvailableInstanceCount",
+          "documentation":"<p>The number of instances currently available for use in this UltraServer.</p>"
+        },
+        "InUseInstanceCount":{
+          "shape":"InUseInstanceCount",
+          "documentation":"<p>The number of instances currently in use in this UltraServer.</p>"
+        },
+        "AvailableSpareInstanceCount":{
+          "shape":"AvailableSpareInstanceCount",
+          "documentation":"<p>The number of available spare instances in the UltraServer.</p>"
+        },
+        "UnhealthyInstanceCount":{
+          "shape":"UnhealthyInstanceCount",
+          "documentation":"<p>The number of instances in this UltraServer that are currently in an unhealthy state.</p>"
+        },
+        "HealthStatus":{
+          "shape":"UltraServerHealthStatus",
+          "documentation":"<p>The overall health status of the UltraServer.</p>"
+        }
+      },
+      "documentation":"<p>Represents a high-performance compute server used for distributed training in SageMaker AI. An UltraServer consists of multiple instances within a shared NVLink interconnect domain.</p>"
+    },
+    "UltraServerCount":{
+      "type":"integer",
+      "box":true,
+      "min":1
+    },
+    "UltraServerHealthStatus":{
+      "type":"string",
+      "enum":[
+        "OK",
+        "Impaired",
+        "Insufficient-Data"
+      ]
+    },
+    "UltraServerInfo":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"String",
+          "documentation":"<p>The unique identifier of the UltraServer.</p>"
+        }
+      },
+      "documentation":"<p>Contains information about the UltraServer object.</p>"
+    },
+    "UltraServerSummary":{
+      "type":"structure",
+      "required":[
+        "UltraServerType",
+        "InstanceType"
+      ],
+      "members":{
+        "UltraServerType":{
+          "shape":"UltraServerType",
+          "documentation":"<p>The type of UltraServer, such as ml.u-p6e-gb200x72.</p>"
+        },
+        "InstanceType":{
+          "shape":"ReservedCapacityInstanceType",
+          "documentation":"<p>The Amazon EC2 instance type used in the UltraServer.</p>"
+        },
+        "UltraServerCount":{
+          "shape":"UltraServerCount",
+          "documentation":"<p>The number of UltraServers of this type.</p>"
+        },
+        "AvailableSpareInstanceCount":{
+          "shape":"AvailableSpareInstanceCount",
+          "documentation":"<p>The number of available spare instances in the UltraServers.</p>"
+        },
+        "UnhealthyInstanceCount":{
+          "shape":"UnhealthyInstanceCount",
+          "documentation":"<p>The total number of instances across all UltraServers of this type that are currently in an unhealthy state.</p>"
+        }
+      },
+      "documentation":"<p>A summary of UltraServer resources and their current status.</p>"
+    },
+    "UltraServerType":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"ml.[a-z0-9\\-.]+"
+    },
+    "UltraServers":{
+      "type":"list",
+      "member":{"shape":"UltraServer"},
+      "max":100,
+      "min":0
+    },
+    "UnhealthyInstanceCount":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "UnifiedStudioDomainId":{
+      "type":"string",
+      "pattern":"dzd[-_][a-zA-Z0-9_-]{1,36}"
+    },
+    "UnifiedStudioEnvironmentId":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9_-]{1,36}"
+    },
+    "UnifiedStudioProjectId":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9_-]{1,36}"
+    },
+    "UnifiedStudioSettings":{
+      "type":"structure",
+      "members":{
+        "StudioWebPortalAccess":{
+          "shape":"FeatureStatus",
+          "documentation":"<p>Sets whether you can access the domain in Amazon SageMaker Studio:</p> <dl> <dt>ENABLED</dt> <dd> <p>You can access the domain in Amazon SageMaker Studio. If you migrate the domain to Amazon SageMaker Unified Studio, you can access it in both studio interfaces.</p> </dd> <dt>DISABLED</dt> <dd> <p>You can't access the domain in Amazon SageMaker Studio. If you migrate the domain to Amazon SageMaker Unified Studio, you can access it only in that studio interface.</p> </dd> </dl> <p>To migrate a domain to Amazon SageMaker Unified Studio, you specify the UnifiedStudioSettings data type when you use the UpdateDomain action.</p>"
+        },
+        "DomainAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that has the Amazon SageMaker Unified Studio domain. The default value, if you don't specify an ID, is the ID of the account that has the Amazon SageMaker AI domain.</p>"
+        },
+        "DomainRegion":{
+          "shape":"RegionName",
+          "documentation":"<p>The Amazon Web Services Region where the domain is located in Amazon SageMaker Unified Studio. The default value, if you don't specify a Region, is the Region where the Amazon SageMaker AI domain is located.</p>"
+        },
+        "DomainId":{
+          "shape":"UnifiedStudioDomainId",
+          "documentation":"<p>The ID of the Amazon SageMaker Unified Studio domain associated with this domain.</p>"
+        },
+        "ProjectId":{
+          "shape":"UnifiedStudioProjectId",
+          "documentation":"<p>The ID of the Amazon SageMaker Unified Studio project that corresponds to the domain.</p>"
+        },
+        "EnvironmentId":{
+          "shape":"UnifiedStudioEnvironmentId",
+          "documentation":"<p>The ID of the environment that Amazon SageMaker Unified Studio associates with the domain.</p>"
+        },
+        "ProjectS3Path":{
+          "shape":"S3Uri",
+          "documentation":"<p>The location where Amazon S3 stores temporary execution data and other artifacts for the project that corresponds to the domain.</p>"
+        },
+        "SingleSignOnApplicationArn":{
+          "shape":"SingleSignOnApplicationArn",
+          "documentation":"<p>The ARN of the Amazon DataZone application managed by Amazon SageMaker Unified Studio in the Amazon Web Services IAM Identity Center.</p>"
+        }
+      },
+      "documentation":"<p>The settings that apply to an Amazon SageMaker AI domain when you use it in Amazon SageMaker Unified Studio.</p>"
+    },
     "UpdateActionRequest":{
       "type":"structure",
       "required":["ActionName"],
@@ -40263,10 +43780,7 @@
     },
     "UpdateClusterRequest":{
       "type":"structure",
-      "required":[
-        "ClusterName",
-        "InstanceGroups"
-      ],
+      "required":["ClusterName"],
       "members":{
         "ClusterName":{
           "shape":"ClusterNameOrArn",
@@ -40276,9 +43790,33 @@
           "shape":"ClusterInstanceGroupSpecifications",
           "documentation":"<p>Specify the instance groups to update.</p>"
         },
+        "RestrictedInstanceGroups":{
+          "shape":"ClusterRestrictedInstanceGroupSpecifications",
+          "documentation":"<p>The specialized instance groups for training models like Amazon Nova to be created in the SageMaker HyperPod cluster.</p>"
+        },
+        "TieredStorageConfig":{
+          "shape":"ClusterTieredStorageConfig",
+          "documentation":"<p>Updates the configuration for managed tier checkpointing on the HyperPod cluster. For example, you can enable or disable the feature and modify the percentage of cluster memory allocated for checkpoint storage.</p>"
+        },
         "NodeRecovery":{
           "shape":"ClusterNodeRecovery",
           "documentation":"<p>The node recovery mode to be applied to the SageMaker HyperPod cluster.</p>"
+        },
+        "InstanceGroupsToDelete":{
+          "shape":"ClusterInstanceGroupsToDelete",
+          "documentation":"<p>Specify the names of the instance groups to delete. Use a single <code>,</code> as the separator between multiple names.</p>"
+        },
+        "NodeProvisioningMode":{
+          "shape":"ClusterNodeProvisioningMode",
+          "documentation":"<p>Determines how instance provisioning is handled during cluster operations. In <code>Continuous</code> mode, the cluster provisions available instances incrementally and retries until the target count is reached. The cluster becomes operational once cluster-level resources are ready. Use <code>CurrentCount</code> and <code>TargetCount</code> in <code>DescribeCluster</code> to track provisioning progress.</p>"
+        },
+        "ClusterRole":{
+          "shape":"RoleArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that HyperPod assumes for cluster autoscaling operations. Cannot be updated while autoscaling is enabled.</p>"
+        },
+        "AutoScaling":{
+          "shape":"ClusterAutoScalingConfig",
+          "documentation":"<p>Updates the autoscaling configuration for the cluster. Use to enable or disable automatic node scaling.</p>"
         }
       }
     },
@@ -40305,7 +43843,8 @@
         },
         "TargetVersion":{
           "shape":"Integer",
-          "documentation":"<p>Target version.</p>"
+          "documentation":"<p>Target version.</p>",
+          "box":true
         },
         "SchedulerConfig":{
           "shape":"SchedulerConfig",
@@ -40330,10 +43869,28 @@
         },
         "ClusterSchedulerConfigVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the cluster policy.</p>"
+          "documentation":"<p>Version of the cluster policy.</p>",
+          "box":true
         }
       }
     },
+    "UpdateClusterSoftwareInstanceGroupSpecification":{
+      "type":"structure",
+      "required":["InstanceGroupName"],
+      "members":{
+        "InstanceGroupName":{
+          "shape":"ClusterInstanceGroupName",
+          "documentation":"<p>The name of the instance group to update.</p>"
+        }
+      },
+      "documentation":"<p>The configuration that describes specifications of the instance groups to update.</p>"
+    },
+    "UpdateClusterSoftwareInstanceGroups":{
+      "type":"list",
+      "member":{"shape":"UpdateClusterSoftwareInstanceGroupSpecification"},
+      "max":100,
+      "min":1
+    },
     "UpdateClusterSoftwareRequest":{
       "type":"structure",
       "required":["ClusterName"],
@@ -40341,6 +43898,18 @@
         "ClusterName":{
           "shape":"ClusterNameOrArn",
           "documentation":"<p>Specify the name or the Amazon Resource Name (ARN) of the SageMaker HyperPod cluster you want to update for security patching.</p>"
+        },
+        "InstanceGroups":{
+          "shape":"UpdateClusterSoftwareInstanceGroups",
+          "documentation":"<p>The array of instance groups for which to update AMI versions.</p>"
+        },
+        "DeploymentConfig":{
+          "shape":"DeploymentConfiguration",
+          "documentation":"<p>The configuration to use when updating the AMI versions.</p>"
+        },
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>When configuring your HyperPod cluster, you can specify an image ID using one of the following options:</p> <ul> <li> <p> <code>HyperPodPublicAmiId</code>: Use a HyperPod public AMI</p> </li> <li> <p> <code>CustomAmiId</code>: Use your custom AMI</p> </li> <li> <p> <code>default</code>: Use the default latest system image</p> </li> </ul> <p>If you choose to use a custom AMI (<code>CustomAmiId</code>), ensure it meets the following requirements:</p> <ul> <li> <p>Encryption: The custom AMI must be unencrypted.</p> </li> <li> <p>Ownership: The custom AMI must be owned by the same Amazon Web Services account that is creating the HyperPod cluster.</p> </li> <li> <p>Volume support: Only the primary AMI snapshot volume is supported; additional AMI volumes are not supported.</p> </li> </ul> <p>When updating the instance group's AMI through the <code>UpdateClusterSoftware</code> operation, if an instance group uses a custom AMI, you must provide an <code>ImageId</code> or use the default as input. Note that if you don't specify an instance group in your <code>UpdateClusterSoftware</code> request, then all of the instance groups are patched with the specified image.</p>"
         }
       }
     },
@@ -40391,7 +43960,8 @@
         },
         "TargetVersion":{
           "shape":"Integer",
-          "documentation":"<p>Target version.</p>"
+          "documentation":"<p>Target version.</p>",
+          "box":true
         },
         "ComputeQuotaConfig":{
           "shape":"ComputeQuotaConfig",
@@ -40424,7 +43994,8 @@
         },
         "ComputeQuotaVersion":{
           "shape":"Integer",
-          "documentation":"<p>Version of the compute allocation definition.</p>"
+          "documentation":"<p>Version of the compute allocation definition.</p>",
+          "box":true
         }
       }
     },
@@ -40540,6 +44111,10 @@
         "TagPropagation":{
           "shape":"TagPropagation",
           "documentation":"<p>Indicates whether custom tag propagation is supported for the domain. Defaults to <code>DISABLED</code>.</p>"
+        },
+        "VpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The identifier for the VPC used by the domain for network communication. Use this field only when adding VPC configuration to a SageMaker AI domain used in Amazon SageMaker Unified Studio that was created without VPC settings. SageMaker AI doesn't automatically apply VPC updates to existing applications. Stop and restart your applications to apply the changes.</p>"
         }
       }
     },
@@ -40569,7 +44144,8 @@
         },
         "RetainAllVariantProperties":{
           "shape":"Boolean",
-          "documentation":"<p>When updating endpoint resources, enables or disables the retention of <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VariantProperty.html\">variant properties</a>, such as the instance count or the variant weight. To retain the variant properties of an endpoint when updating it, set <code>RetainAllVariantProperties</code> to <code>true</code>. To use the variant properties specified in a new <code>EndpointConfig</code> call when updating an endpoint, set <code>RetainAllVariantProperties</code> to <code>false</code>. The default is <code>false</code>.</p>"
+          "documentation":"<p>When updating endpoint resources, enables or disables the retention of <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VariantProperty.html\">variant properties</a>, such as the instance count or the variant weight. To retain the variant properties of an endpoint when updating it, set <code>RetainAllVariantProperties</code> to <code>true</code>. To use the variant properties specified in a new <code>EndpointConfig</code> call when updating an endpoint, set <code>RetainAllVariantProperties</code> to <code>false</code>. The default is <code>false</code>.</p>",
+          "box":true
         },
         "ExcludeRetainedVariantProperties":{
           "shape":"VariantPropertyList",
@@ -40581,7 +44157,8 @@
         },
         "RetainDeploymentConfig":{
           "shape":"Boolean",
-          "documentation":"<p>Specifies whether to reuse the last deployment configuration. The default value is false (the configuration is not reused).</p>"
+          "documentation":"<p>Specifies whether to reuse the last deployment configuration. The default value is false (the configuration is not reused).</p>",
+          "box":true
         }
       }
     },
@@ -40707,6 +44284,113 @@
         }
       }
     },
+    "UpdateHubContentReferenceRequest":{
+      "type":"structure",
+      "required":[
+        "HubName",
+        "HubContentName",
+        "HubContentType"
+      ],
+      "members":{
+        "HubName":{
+          "shape":"HubNameOrArn",
+          "documentation":"<p>The name of the SageMaker hub that contains the hub content you want to update. You can optionally use the hub ARN instead.</p>"
+        },
+        "HubContentName":{
+          "shape":"HubContentName",
+          "documentation":"<p>The name of the hub content resource that you want to update.</p>"
+        },
+        "HubContentType":{
+          "shape":"HubContentType",
+          "documentation":"<p>The content type of the resource that you want to update. Only specify a <code>ModelReference</code> resource for this API. To update a <code>Model</code> or <code>Notebook</code> resource, use the <code>UpdateHubContent</code> API instead.</p>"
+        },
+        "MinVersion":{
+          "shape":"HubContentVersion",
+          "documentation":"<p>The minimum hub content version of the referenced model that you want to use. The minimum version must be older than the latest available version of the referenced model. To support all versions of a model, set the value to <code>1.0.0</code>.</p>"
+        }
+      }
+    },
+    "UpdateHubContentReferenceResponse":{
+      "type":"structure",
+      "required":[
+        "HubArn",
+        "HubContentArn"
+      ],
+      "members":{
+        "HubArn":{
+          "shape":"HubArn",
+          "documentation":"<p>The ARN of the private model hub that contains the updated hub content.</p>"
+        },
+        "HubContentArn":{
+          "shape":"HubContentArn",
+          "documentation":"<p>The ARN of the hub content resource that was updated.</p>"
+        }
+      }
+    },
+    "UpdateHubContentRequest":{
+      "type":"structure",
+      "required":[
+        "HubName",
+        "HubContentName",
+        "HubContentType",
+        "HubContentVersion"
+      ],
+      "members":{
+        "HubName":{
+          "shape":"HubNameOrArn",
+          "documentation":"<p>The name of the SageMaker hub that contains the hub content you want to update. You can optionally use the hub ARN instead.</p>"
+        },
+        "HubContentName":{
+          "shape":"HubContentName",
+          "documentation":"<p>The name of the hub content resource that you want to update.</p>"
+        },
+        "HubContentType":{
+          "shape":"HubContentType",
+          "documentation":"<p>The content type of the resource that you want to update. Only specify a <code>Model</code> or <code>Notebook</code> resource for this API. To update a <code>ModelReference</code>, use the <code>UpdateHubContentReference</code> API instead.</p>"
+        },
+        "HubContentVersion":{
+          "shape":"HubContentVersion",
+          "documentation":"<p>The hub content version that you want to update. For example, if you have two versions of a resource in your hub, you can update the second version.</p>"
+        },
+        "HubContentDisplayName":{
+          "shape":"HubContentDisplayName",
+          "documentation":"<p>The display name of the hub content.</p>"
+        },
+        "HubContentDescription":{
+          "shape":"HubContentDescription",
+          "documentation":"<p>The description of the hub content.</p>"
+        },
+        "HubContentMarkdown":{
+          "shape":"HubContentMarkdown",
+          "documentation":"<p>A string that provides a description of the hub content. This string can include links, tables, and standard markdown formatting.</p>"
+        },
+        "HubContentSearchKeywords":{
+          "shape":"HubContentSearchKeywordList",
+          "documentation":"<p>The searchable keywords of the hub content.</p>"
+        },
+        "SupportStatus":{
+          "shape":"HubContentSupportStatus",
+          "documentation":"<p>Indicates the current status of the hub content resource.</p>"
+        }
+      }
+    },
+    "UpdateHubContentResponse":{
+      "type":"structure",
+      "required":[
+        "HubArn",
+        "HubContentArn"
+      ],
+      "members":{
+        "HubArn":{
+          "shape":"HubArn",
+          "documentation":"<p>The ARN of the private model hub that contains the updated hub content.</p>"
+        },
+        "HubContentArn":{
+          "shape":"HubContentArn",
+          "documentation":"<p>The ARN of the hub content resource that was updated.</p>"
+        }
+      }
+    },
     "UpdateHubRequest":{
       "type":"structure",
       "required":["HubName"],
@@ -40820,7 +44504,8 @@
         },
         "Horovod":{
           "shape":"Horovod",
-          "documentation":"<p>Indicates Horovod compatibility.</p>"
+          "documentation":"<p>Indicates Horovod compatibility.</p>",
+          "box":true
         },
         "ReleaseNotes":{
           "shape":"ReleaseNotes",
@@ -40852,6 +44537,10 @@
         "RuntimeConfig":{
           "shape":"InferenceComponentRuntimeConfig",
           "documentation":"<p>Runtime settings for a model that is deployed with an inference component.</p>"
+        },
+        "DeploymentConfig":{
+          "shape":"InferenceComponentDeploymentConfig",
+          "documentation":"<p>The deployment configuration for the inference component. The configuration contains the desired deployment strategy and rollback settings.</p>"
         }
       }
     },
@@ -40950,7 +44639,8 @@
         },
         "AutomaticModelRegistration":{
           "shape":"Boolean",
-          "documentation":"<p>Whether to enable or disable automatic registration of new MLflow models to the SageMaker Model Registry. To enable automatic model registration, set this value to <code>True</code>. To disable automatic model registration, set this value to <code>False</code>. If not specified, <code>AutomaticModelRegistration</code> defaults to <code>False</code> </p>"
+          "documentation":"<p>Whether to enable or disable automatic registration of new MLflow models to the SageMaker Model Registry. To enable automatic model registration, set this value to <code>True</code>. To disable automatic model registration, set this value to <code>False</code>. If not specified, <code>AutomaticModelRegistration</code> defaults to <code>False</code> </p>",
+          "box":true
         },
         "WeeklyMaintenanceWindowStart":{
           "shape":"WeeklyMaintenanceWindowStart",
@@ -41135,6 +44825,14 @@
           "shape":"InstanceType",
           "documentation":"<p>The Amazon ML compute instance type.</p>"
         },
+        "IpAddressType":{
+          "shape":"IPAddressType",
+          "documentation":"<p>The IP address type for the notebook instance. Specify <code>ipv4</code> for IPv4-only connectivity or <code>dualstack</code> for both IPv4 and IPv6 connectivity. The notebook instance must be stopped before updating this setting. When you specify <code>dualstack</code>, the subnet must support IPv6 addressing.</p>"
+        },
+        "PlatformIdentifier":{
+          "shape":"PlatformIdentifier",
+          "documentation":"<p>The platform identifier of the notebook instance runtime environment.</p>"
+        },
         "RoleArn":{
           "shape":"RoleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the IAM role that SageMaker AI can assume to access the notebook instance. For more information, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html\">SageMaker AI Roles</a>. </p> <note> <p>To be able to pass this role to SageMaker AI, the caller of this API must have the <code>iam:PassRole</code> permission.</p> </note>"
@@ -41145,7 +44843,8 @@
         },
         "DisassociateLifecycleConfig":{
           "shape":"DisassociateNotebookInstanceLifecycleConfig",
-          "documentation":"<p>Set to <code>true</code> to remove the notebook instance lifecycle configuration currently associated with the notebook instance. This operation is idempotent. If you specify a lifecycle configuration that is not associated with the notebook instance when you call this method, it does not throw an error.</p>"
+          "documentation":"<p>Set to <code>true</code> to remove the notebook instance lifecycle configuration currently associated with the notebook instance. This operation is idempotent. If you specify a lifecycle configuration that is not associated with the notebook instance when you call this method, it does not throw an error.</p>",
+          "box":true
         },
         "VolumeSizeInGB":{
           "shape":"NotebookInstanceVolumeSizeInGB",
@@ -41165,15 +44864,18 @@
         },
         "DisassociateAcceleratorTypes":{
           "shape":"DisassociateNotebookInstanceAcceleratorTypes",
-          "documentation":"<p>This parameter is no longer supported. Elastic Inference (EI) is no longer available.</p> <p>This parameter was used to specify a list of the EI instance types to remove from this notebook instance.</p>"
+          "documentation":"<p>This parameter is no longer supported. Elastic Inference (EI) is no longer available.</p> <p>This parameter was used to specify a list of the EI instance types to remove from this notebook instance.</p>",
+          "box":true
         },
         "DisassociateDefaultCodeRepository":{
           "shape":"DisassociateDefaultCodeRepository",
-          "documentation":"<p>The name or URL of the default Git repository to remove from this notebook instance. This operation is idempotent. If you specify a Git repository that is not associated with the notebook instance when you call this method, it does not throw an error.</p>"
+          "documentation":"<p>The name or URL of the default Git repository to remove from this notebook instance. This operation is idempotent. If you specify a Git repository that is not associated with the notebook instance when you call this method, it does not throw an error.</p>",
+          "box":true
         },
         "DisassociateAdditionalCodeRepositories":{
           "shape":"DisassociateAdditionalCodeRepositories",
-          "documentation":"<p>A list of names or URLs of the default Git repositories to remove from this notebook instance. This operation is idempotent. If you specify a Git repository that is not associated with the notebook instance when you call this method, it does not throw an error.</p>"
+          "documentation":"<p>A list of names or URLs of the default Git repositories to remove from this notebook instance. This operation is idempotent. If you specify a Git repository that is not associated with the notebook instance when you call this method, it does not throw an error.</p>",
+          "box":true
         },
         "RootAccess":{
           "shape":"RootAccess",
@@ -41205,13 +44907,11 @@
     },
     "UpdateNotebookInstanceLifecycleConfigOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateNotebookInstanceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePartnerAppRequest":{
       "type":"structure",
@@ -41329,6 +45029,48 @@
         "PipelineArn":{
           "shape":"PipelineArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the updated pipeline.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version.</p>"
+        }
+      }
+    },
+    "UpdatePipelineVersionRequest":{
+      "type":"structure",
+      "required":[
+        "PipelineArn",
+        "PipelineVersionId"
+      ],
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The pipeline version ID to update.</p>"
+        },
+        "PipelineVersionDisplayName":{
+          "shape":"PipelineVersionName",
+          "documentation":"<p>The display name of the pipeline version.</p>"
+        },
+        "PipelineVersionDescription":{
+          "shape":"PipelineVersionDescription",
+          "documentation":"<p>The description of the pipeline version.</p>"
+        }
+      }
+    },
+    "UpdatePipelineVersionResponse":{
+      "type":"structure",
+      "members":{
+        "PipelineArn":{
+          "shape":"PipelineArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the pipeline.</p>"
+        },
+        "PipelineVersionId":{
+          "shape":"PipelineVersionId",
+          "documentation":"<p>The ID of the pipeline version.</p>"
         }
       }
     },
@@ -41351,6 +45093,10 @@
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key-value pairs. You can use tags to categorize your Amazon Web Services resources in different ways, for example, by purpose, owner, or environment. For more information, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging Amazon Web Services Resources</a>. In addition, the project must have tag update constraints set in order to include this parameter in the request. For more information, see <a href=\"https://docs.aws.amazon.com/servicecatalog/latest/adminguide/constraints-resourceupdate.html\">Amazon Web Services Service Catalog Tag Update Constraints</a>.</p>"
+        },
+        "TemplateProvidersToUpdate":{
+          "shape":"UpdateTemplateProviderList",
+          "documentation":"<p> The template providers to update in the project. </p>"
         }
       }
     },
@@ -41398,6 +45144,22 @@
         }
       }
     },
+    "UpdateTemplateProvider":{
+      "type":"structure",
+      "members":{
+        "CfnTemplateProvider":{
+          "shape":"CfnUpdateTemplateProvider",
+          "documentation":"<p> The CloudFormation template provider configuration to update. </p>"
+        }
+      },
+      "documentation":"<p> Contains configuration details for updating an existing template provider in the project. </p>"
+    },
+    "UpdateTemplateProviderList":{
+      "type":"list",
+      "member":{"shape":"UpdateTemplateProvider"},
+      "max":1,
+      "min":1
+    },
     "UpdateTrainingJobRequest":{
       "type":"structure",
       "required":["TrainingJobName"],
@@ -41565,6 +45327,10 @@
         "WorkforceVpcConfig":{
           "shape":"WorkforceVpcConfigRequest",
           "documentation":"<p>Use this parameter to update your VPC configuration for a workforce.</p>"
+        },
+        "IpAddressType":{
+          "shape":"WorkforceIpAddressType",
+          "documentation":"<p>Use this parameter to specify whether you want <code>IPv4</code> only or <code>dualstack</code> (<code>IPv4</code> and <code>IPv6</code>) to support your labeling workforce.</p>"
         }
       }
     },
@@ -41617,7 +45383,8 @@
     "Url":{
       "type":"string",
       "max":1024,
-      "pattern":"^(https|s3)://([^/]+)/?(.*)$"
+      "min":0,
+      "pattern":"(https|s3)://([^/]+)/?(.*)"
     },
     "UserContext":{
       "type":"structure",
@@ -41639,11 +45406,12 @@
           "documentation":"<p>The IAM Identity details associated with the user. These details are associated with model package groups, model packages, and project entities only.</p>"
         }
       },
-      "documentation":"<p>Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.</p>"
+      "documentation":"<p>Information about the user who created or modified a SageMaker resource.</p>"
     },
     "UserProfileArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:user-profile/.*"
     },
     "UserProfileDetails":{
@@ -41679,7 +45447,8 @@
     "UserProfileName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "UserProfileSortKey":{
       "type":"string",
@@ -41780,27 +45549,38 @@
     },
     "UsersPerStep":{
       "type":"integer",
+      "box":true,
       "max":3,
       "min":1
     },
     "UtilizationMetric":{
       "type":"float",
+      "box":true,
       "min":0.0
     },
     "UtilizationPercentagePerCore":{
       "type":"integer",
+      "box":true,
       "max":100,
       "min":1
     },
+    "VCpuAmount":{
+      "type":"float",
+      "box":true,
+      "max":10000000,
+      "min":0
+    },
     "ValidationFraction":{
       "type":"float",
+      "box":true,
       "max":1,
       "min":0
     },
     "VariantName":{
       "type":"string",
       "max":63,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "min":0,
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "VariantProperty":{
       "type":"structure",
@@ -41839,10 +45619,12 @@
     },
     "VariantStatusMessage":{
       "type":"string",
-      "max":1024
+      "max":1024,
+      "min":0
     },
     "VariantWeight":{
       "type":"float",
+      "box":true,
       "min":0
     },
     "VectorConfig":{
@@ -41868,7 +45650,8 @@
     "VersionAliasesList":{
       "type":"list",
       "member":{"shape":"ImageVersionAliasPattern"},
-      "max":20
+      "max":20,
+      "min":0
     },
     "VersionId":{
       "type":"string",
@@ -41880,7 +45663,7 @@
       "type":"string",
       "max":176,
       "min":1,
-      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z\\-]*\\/)?([a-zA-Z0-9]([a-zA-Z0-9-]){0,62})(?<!-)(\\/[0-9]{1,9})?$"
+      "pattern":"(arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:[a-z\\-]*\\/)?([a-zA-Z0-9]([a-zA-Z0-9-]){0,62})(?<!-)(\\/[0-9]{1,9})?"
     },
     "Vertex":{
       "type":"structure",
@@ -41922,7 +45705,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "VisibilityConditionsList":{
       "type":"list",
@@ -41934,7 +45717,29 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
+    },
+    "VolumeAttachmentStatus":{
+      "type":"string",
+      "enum":[
+        "attaching",
+        "attached",
+        "detaching",
+        "detached",
+        "busy"
+      ]
+    },
+    "VolumeDeviceName":{
+      "type":"string",
+      "max":32,
+      "min":1,
+      "pattern":"/dev/(xvd[a-z]|sd[b-z]|sd[f-p][1-6])"
+    },
+    "VolumeId":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"vol-[a-f0-9]{8}(?:[a-f0-9]{9})?"
     },
     "VolumeSizeInGB":{
       "type":"integer",
@@ -41961,12 +45766,14 @@
     "VpcId":{
       "type":"string",
       "max":32,
+      "min":0,
       "pattern":"[-0-9a-zA-Z]+"
     },
     "VpcOnlyTrustedAccounts":{
       "type":"list",
       "member":{"shape":"AccountId"},
-      "max":20
+      "max":20,
+      "min":0
     },
     "VpcSecurityGroupIds":{
       "type":"list",
@@ -41976,6 +45783,13 @@
     },
     "WaitIntervalInSeconds":{
       "type":"integer",
+      "box":true,
+      "max":3600,
+      "min":0
+    },
+    "WaitTimeIntervalInSeconds":{
+      "type":"integer",
+      "box":true,
       "max":3600,
       "min":0
     },
@@ -42010,11 +45824,13 @@
     "WeeklyMaintenanceWindowStart":{
       "type":"string",
       "max":9,
+      "min":0,
       "pattern":"(Mon|Tue|Wed|Thu|Fri|Sat|Sun):([01]\\d|2[0-3]):([0-5]\\d)"
     },
     "WeeklyScheduleTimeFormat":{
       "type":"string",
       "max":9,
+      "min":0,
       "pattern":"(Mon|Tue|Wed|Thu|Fri|Sat|Sun):([01]\\d|2[0-3]):([0-5]\\d)"
     },
     "WorkerAccessConfiguration":{
@@ -42077,6 +45893,10 @@
         "FailureReason":{
           "shape":"WorkforceFailureReason",
           "documentation":"<p>The reason your workforce failed.</p>"
+        },
+        "IpAddressType":{
+          "shape":"WorkforceIpAddressType",
+          "documentation":"<p>The IP address type you specify - either <code>IPv4</code> only or <code>dualstack</code> (<code>IPv4</code> and <code>IPv6</code>) - to support your labeling workforce.</p>"
         }
       },
       "documentation":"<p>A single private workforce, which is automatically created when you create your first private work team. You can create one private work force in each Amazon Web Services Region. By default, any workforce-related API operation used in a specific region will apply to the workforce created in that region. To learn how to create a private workforce, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/sms-workforce-create-private.html\">Create a Private Workforce</a>.</p>"
@@ -42084,6 +45904,7 @@
     "WorkforceArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:workforce/.*"
     },
     "WorkforceFailureReason":{
@@ -42092,16 +45913,24 @@
       "min":1,
       "pattern":".+"
     },
+    "WorkforceIpAddressType":{
+      "type":"string",
+      "enum":[
+        "ipv4",
+        "dualstack"
+      ]
+    },
     "WorkforceName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]([a-zA-Z0-9\\-]){0,62}$"
+      "pattern":"[a-zA-Z0-9]([a-zA-Z0-9\\-]){0,62}"
     },
     "WorkforceSecurityGroupId":{
       "type":"string",
       "max":32,
-      "pattern":"^sg-[0-9a-z]*$"
+      "min":0,
+      "pattern":"sg-[0-9a-z]*"
     },
     "WorkforceSecurityGroupIds":{
       "type":"list",
@@ -42122,7 +45951,8 @@
     "WorkforceSubnetId":{
       "type":"string",
       "max":32,
-      "pattern":"^subnet-[0-9a-z]*$"
+      "min":0,
+      "pattern":"subnet-[0-9a-z]*"
     },
     "WorkforceSubnets":{
       "type":"list",
@@ -42179,12 +46009,13 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^vpce-[0-9a-z]*$"
+      "pattern":"vpce-[0-9a-z]*"
     },
     "WorkforceVpcId":{
       "type":"string",
       "max":32,
-      "pattern":"^vpc-[0-9a-z]*$"
+      "min":0,
+      "pattern":"vpc-[0-9a-z]*"
     },
     "Workforces":{
       "type":"list",
@@ -42263,13 +46094,14 @@
     "WorkteamArn":{
       "type":"string",
       "max":256,
+      "min":0,
       "pattern":"arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:workteam/.*"
     },
     "WorkteamName":{
       "type":"string",
       "max":63,
       "min":1,
-      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+      "pattern":"[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
     },
     "Workteams":{
       "type":"list",
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/waiters-2.json 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker/2017-07-24/waiters-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker/2017-07-24/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,311 +1,260 @@
 {
-  "version": 2,
-  "waiters": {
-    "NotebookInstanceInService": {
-      "delay": 30,
-      "maxAttempts": 60,
-      "operation": "DescribeNotebookInstance",
-      "acceptors": [
-        {
-          "expected": "InService",
-          "matcher": "path",
-          "state": "success",
-          "argument": "NotebookInstanceStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "NotebookInstanceStatus"
-        }
-      ]
-    },
-    "NotebookInstanceStopped": {
-      "delay": 30,     
-      "operation": "DescribeNotebookInstance",
-      "maxAttempts": 60,
-      "acceptors": [
-        {
-          "expected": "Stopped",
-          "matcher": "path",
-          "state": "success",
-          "argument": "NotebookInstanceStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "NotebookInstanceStatus"
-        }
-      ]
-    }, 
-    "NotebookInstanceDeleted": {
-      "delay": 30,
-      "maxAttempts": 60,
-      "operation": "DescribeNotebookInstance",
-      "acceptors": [
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "success"
-        },    
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "NotebookInstanceStatus"
-        }
-      ]
-    },
-    "TrainingJobCompletedOrStopped": {
-      "delay": 120,
-      "maxAttempts": 180,
-      "operation": "DescribeTrainingJob",
-      "acceptors": [
-        {
-          "expected": "Completed",
-          "matcher": "path",
-          "state": "success",
-          "argument": "TrainingJobStatus"
-        },
-        {
-          "expected": "Stopped",
-          "matcher": "path",
-          "state": "success",
-          "argument": "TrainingJobStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "TrainingJobStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "EndpointInService": {
-      "delay": 30,
-      "maxAttempts": 120,
-      "operation": "DescribeEndpoint",
-      "acceptors": [
-        {
-          "expected": "InService",
-          "matcher": "path",
-          "state": "success",
-          "argument": "EndpointStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "EndpointStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "EndpointDeleted": {
-      "delay": 30,
-      "maxAttempts": 60,
-      "operation": "DescribeEndpoint",
-      "acceptors": [
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "success"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "EndpointStatus"
-        }
-      ]
-    },
-    "TransformJobCompletedOrStopped": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeTransformJob",
-      "acceptors": [
-        {
-          "expected": "Completed",
-          "matcher": "path",
-          "state": "success",
-          "argument": "TransformJobStatus"
-        },
-        {
-          "expected": "Stopped",
-          "matcher": "path",
-          "state": "success",
-          "argument": "TransformJobStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "TransformJobStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ProcessingJobCompletedOrStopped": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeProcessingJob",
-      "acceptors": [
-        {
-          "expected": "Completed",
-          "matcher": "path",
-          "state": "success",
-          "argument": "ProcessingJobStatus"
-        },
-        {
-          "expected": "Stopped",
-          "matcher": "path",
-          "state": "success",
-          "argument": "ProcessingJobStatus"
-        },
-        {
-          "expected": "Failed",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ProcessingJobStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ImageCreated": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeImage",
-      "acceptors": [
-        {
-          "expected": "CREATED",
-          "matcher": "path",
-          "state": "success",
-          "argument": "ImageStatus"
-        },
-        {
-          "expected": "CREATE_FAILED",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ImageStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ImageUpdated": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeImage",
-      "acceptors": [
-        {
-          "expected": "CREATED",
-          "matcher": "path",
-          "state": "success",
-          "argument": "ImageStatus"
-        },
-        {
-          "expected": "UPDATE_FAILED",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ImageStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ImageDeleted": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeImage",
-      "acceptors": [
-        {
-          "expected": "ResourceNotFoundException",
-          "matcher": "error",
-          "state": "success"
-        },
-        {
-          "expected": "DELETE_FAILED",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ImageStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ImageVersionCreated": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeImageVersion",
-      "acceptors": [
-        {
-          "expected": "CREATED",
-          "matcher": "path",
-          "state": "success",
-          "argument": "ImageVersionStatus"
-        },
-        {
-          "expected": "CREATE_FAILED",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ImageVersionStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
-    },
-    "ImageVersionDeleted": {
-      "delay": 60,
-      "maxAttempts": 60,
-      "operation": "DescribeImageVersion",
-      "acceptors": [
-        {
-          "expected": "ResourceNotFoundException",
-          "matcher": "error",
-          "state": "success"
-        },
-        {
-          "expected": "DELETE_FAILED",
-          "matcher": "path",
-          "state": "failure",
-          "argument": "ImageVersionStatus"
-        },
-        {
-          "expected": "ValidationException",
-          "matcher": "error",
-          "state": "failure"
-        }
-      ]
+  "version" : 2,
+  "waiters" : {
+    "EndpointDeleted" : {
+      "delay" : 30,
+      "maxAttempts" : 60,
+      "operation" : "DescribeEndpoint",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ValidationException"
+      }, {
+        "matcher" : "path",
+        "argument" : "EndpointStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      } ]
+    },
+    "EndpointInService" : {
+      "delay" : 30,
+      "maxAttempts" : 120,
+      "operation" : "DescribeEndpoint",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "EndpointStatus",
+        "state" : "success",
+        "expected" : "InService"
+      }, {
+        "matcher" : "path",
+        "argument" : "EndpointStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "ImageCreated" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeImage",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "ImageStatus",
+        "state" : "success",
+        "expected" : "CREATED"
+      }, {
+        "matcher" : "path",
+        "argument" : "ImageStatus",
+        "state" : "failure",
+        "expected" : "CREATE_FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "ImageDeleted" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeImage",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "ImageStatus",
+        "state" : "failure",
+        "expected" : "DELETE_FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "ImageUpdated" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeImage",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "ImageStatus",
+        "state" : "success",
+        "expected" : "CREATED"
+      }, {
+        "matcher" : "path",
+        "argument" : "ImageStatus",
+        "state" : "failure",
+        "expected" : "UPDATE_FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "ImageVersionCreated" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeImageVersion",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "ImageVersionStatus",
+        "state" : "success",
+        "expected" : "CREATED"
+      }, {
+        "matcher" : "path",
+        "argument" : "ImageVersionStatus",
+        "state" : "failure",
+        "expected" : "CREATE_FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "ImageVersionDeleted" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeImageVersion",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ResourceNotFoundException"
+      }, {
+        "matcher" : "path",
+        "argument" : "ImageVersionStatus",
+        "state" : "failure",
+        "expected" : "DELETE_FAILED"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "NotebookInstanceDeleted" : {
+      "delay" : 30,
+      "maxAttempts" : 60,
+      "operation" : "DescribeNotebookInstance",
+      "acceptors" : [ {
+        "matcher" : "error",
+        "state" : "success",
+        "expected" : "ValidationException"
+      }, {
+        "matcher" : "path",
+        "argument" : "NotebookInstanceStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      } ]
+    },
+    "NotebookInstanceInService" : {
+      "delay" : 30,
+      "maxAttempts" : 60,
+      "operation" : "DescribeNotebookInstance",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "NotebookInstanceStatus",
+        "state" : "success",
+        "expected" : "InService"
+      }, {
+        "matcher" : "path",
+        "argument" : "NotebookInstanceStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      } ]
+    },
+    "NotebookInstanceStopped" : {
+      "delay" : 30,
+      "maxAttempts" : 60,
+      "operation" : "DescribeNotebookInstance",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "NotebookInstanceStatus",
+        "state" : "success",
+        "expected" : "Stopped"
+      }, {
+        "matcher" : "path",
+        "argument" : "NotebookInstanceStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      } ]
+    },
+    "ProcessingJobCompletedOrStopped" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeProcessingJob",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "ProcessingJobStatus",
+        "state" : "success",
+        "expected" : "Completed"
+      }, {
+        "matcher" : "path",
+        "argument" : "ProcessingJobStatus",
+        "state" : "success",
+        "expected" : "Stopped"
+      }, {
+        "matcher" : "path",
+        "argument" : "ProcessingJobStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "TrainingJobCompletedOrStopped" : {
+      "delay" : 120,
+      "maxAttempts" : 180,
+      "operation" : "DescribeTrainingJob",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "TrainingJobStatus",
+        "state" : "success",
+        "expected" : "Completed"
+      }, {
+        "matcher" : "path",
+        "argument" : "TrainingJobStatus",
+        "state" : "success",
+        "expected" : "Stopped"
+      }, {
+        "matcher" : "path",
+        "argument" : "TrainingJobStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
+    },
+    "TransformJobCompletedOrStopped" : {
+      "delay" : 60,
+      "maxAttempts" : 60,
+      "operation" : "DescribeTransformJob",
+      "acceptors" : [ {
+        "matcher" : "path",
+        "argument" : "TransformJobStatus",
+        "state" : "success",
+        "expected" : "Completed"
+      }, {
+        "matcher" : "path",
+        "argument" : "TransformJobStatus",
+        "state" : "success",
+        "expected" : "Stopped"
+      }, {
+        "matcher" : "path",
+        "argument" : "TransformJobStatus",
+        "state" : "failure",
+        "expected" : "Failed"
+      }, {
+        "matcher" : "error",
+        "state" : "failure",
+        "expected" : "ValidationException"
+      } ]
     }
   }
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json 2.31.35-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-a2i-runtime/2019-11-07/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,11 +4,13 @@
     "apiVersion":"2019-11-07",
     "endpointPrefix":"a2i-runtime.sagemaker",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Augmented AI Runtime",
     "serviceId":"SageMaker A2I Runtime",
     "signatureVersion":"v4",
     "signingName":"sagemaker",
-    "uid":"sagemaker-a2i-runtime-2019-11-07"
+    "uid":"sagemaker-a2i-runtime-2019-11-07",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "DeleteHumanLoop":{
@@ -129,8 +131,7 @@
     },
     "DeleteHumanLoopResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeHumanLoopRequest":{
       "type":"structure",
@@ -433,8 +434,7 @@
     },
     "StopHumanLoopResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{"type":"string"},
     "ThrottlingException":{
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-edge/2020-09-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-edge/2020-09-23/service-2.json 2.31.35-1/awscli/botocore/data/sagemaker-edge/2020-09-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-edge/2020-09-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-edge/2020-09-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"edge.sagemaker",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon Sagemaker Edge Manager",
     "serviceId":"Sagemaker Edge",
     "signatureVersion":"v4",
     "signingName":"sagemaker",
-    "uid":"sagemaker-edge-2020-09-23"
+    "uid":"sagemaker-edge-2020-09-23",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetDeployments":{
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json 2.31.35-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-featurestore-runtime/2020-07-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"featurestore-runtime.sagemaker",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon SageMaker Feature Store Runtime",
     "serviceId":"SageMaker FeatureStore Runtime",
     "signatureVersion":"v4",
     "signingName":"sagemaker",
-    "uid":"sagemaker-featurestore-runtime-2020-07-01"
+    "uid":"sagemaker-featurestore-runtime-2020-07-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "BatchGetRecord":{
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-geospatial/2020-05-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-metrics/2022-09-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -57,65 +57,78 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [],
-                    "rules": [
+                    "conditions": [
                         {
-                            "conditions": [
+                            "fn": "booleanEquals",
+                            "argv": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": {
-                                    "ref": "Endpoint"
+                                    "ref": "UseDualStack"
                                 },
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
+                                true
+                            ]
                         }
                     ],
-                    "type": "tree"
+                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [],
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Region"
+                        }
+                    ]
+                }
+            ],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "isSet",
+                            "fn": "aws.partition",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ]
+                            ],
+                            "assign": "PartitionResult"
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "aws.partition",
+                                    "fn": "booleanEquals",
                                     "argv": [
                                         {
-                                            "ref": "Region"
-                                        }
-                                    ],
-                                    "assign": "PartitionResult"
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
+                                    ]
+                                },
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
                                 }
                             ],
                             "rules": [
@@ -124,90 +137,81 @@
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
+                                                }
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
                                                         {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
                                                     ]
                                                 }
-                                            ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://metrics.sagemaker-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
-                                        },
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
                                         {
                                             "conditions": [],
-                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                            "type": "error"
+                                            "endpoint": {
+                                                "url": "https://metrics.sagemaker-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
+                                    "conditions": [],
+                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseFIPS"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "ref": "UseFIPS"
+                                                    "fn": "getAttr",
+                                                    "argv": [
+                                                        {
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsFIPS"
+                                                    ]
                                                 },
                                                 true
                                             ]
@@ -217,7 +221,7 @@
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "stringEquals",
                                                     "argv": [
                                                         {
                                                             "fn": "getAttr",
@@ -225,105 +229,76 @@
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "supportsFIPS"
+                                                                "name"
                                                             ]
                                                         },
-                                                        true
+                                                        "aws"
                                                     ]
                                                 }
                                             ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://metrics.sagemaker-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
+                                            "endpoint": {
+                                                "url": "https://metrics-fips.sagemaker.{Region}.amazonaws.com",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         },
                                         {
                                             "conditions": [],
-                                            "error": "FIPS is enabled but this partition does not support FIPS",
-                                            "type": "error"
+                                            "endpoint": {
+                                                "url": "https://metrics.sagemaker-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
+                                    "conditions": [],
+                                    "error": "FIPS is enabled but this partition does not support FIPS",
+                                    "type": "error"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
+                                                true,
                                                 {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
+                                                    "fn": "getAttr",
                                                     "argv": [
-                                                        true,
                                                         {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
+                                                            "ref": "PartitionResult"
+                                                        },
+                                                        "supportsDualStack"
                                                     ]
                                                 }
-                                            ],
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://metrics.sagemaker.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ],
-                                                    "type": "tree"
-                                                }
-                                            ],
-                                            "type": "tree"
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "DualStack is enabled but this partition does not support DualStack",
-                                            "type": "error"
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
-                                },
-                                {
-                                    "conditions": [],
                                     "rules": [
                                         {
                                             "conditions": [],
                                             "endpoint": {
-                                                "url": "https://metrics.sagemaker.{Region}.{PartitionResult#dnsSuffix}",
+                                                "url": "https://metrics.sagemaker.{Region}.{PartitionResult#dualStackDnsSuffix}",
                                                 "properties": {},
                                                 "headers": {}
                                             },
@@ -331,20 +306,34 @@
                                         }
                                     ],
                                     "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "error": "DualStack is enabled but this partition does not support DualStack",
+                                    "type": "error"
                                 }
                             ],
                             "type": "tree"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": "https://metrics.sagemaker.{Region}.{PartitionResult#dnsSuffix}",
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
-                },
-                {
-                    "conditions": [],
-                    "error": "Invalid Configuration: Missing Region",
-                    "type": "error"
                 }
             ],
             "type": "tree"
+        },
+        {
+            "conditions": [],
+            "error": "Invalid Configuration: Missing Region",
+            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/service-2.json 2.31.35-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/service-2.json
--- 2.23.6-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sagemaker-runtime/2017-05-13/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@
         {"shape":"InternalDependencyException"},
         {"shape":"ModelNotReadyException"}
       ],
-      "documentation":"<p>After you deploy a model into production using Amazon SageMaker hosting services, your client applications use this API to get inferences from the model hosted at the specified endpoint. </p> <p>For an overview of Amazon SageMaker, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works.html\">How It Works</a>. </p> <p>Amazon SageMaker strips all POST headers except those supported by the API. Amazon SageMaker might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpoint</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p> <p>A customer's model containers must respond to requests within 60 seconds. The model itself can have a maximum processing time of 60 seconds before responding to invocations. If your model is going to take 50-60 seconds of processing time, the SDK socket timeout should be set to be 70 seconds.</p> <note> <p>Endpoints are scoped to an individual account, and are not public. The URL does not contain the account ID, but Amazon SageMaker determines the account ID from the authentication token that is supplied by the caller.</p> </note>"
+      "documentation":"<p>After you deploy a model into production using Amazon SageMaker AI hosting services, your client applications use this API to get inferences from the model hosted at the specified endpoint. </p> <p>For an overview of Amazon SageMaker AI, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works.html\">How It Works</a>. </p> <p>Amazon SageMaker AI strips all POST headers except those supported by the API. Amazon SageMaker AI might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpoint</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p> <p>A customer's model containers must respond to requests within 60 seconds. The model itself can have a maximum processing time of 60 seconds before responding to invocations. If your model is going to take 50-60 seconds of processing time, the SDK socket timeout should be set to be 70 seconds.</p> <note> <p>Endpoints are scoped to an individual account, and are not public. The URL does not contain the account ID, but Amazon SageMaker AI determines the account ID from the authentication token that is supplied by the caller.</p> </note>"
     },
     "InvokeEndpointAsync":{
       "name":"InvokeEndpointAsync",
@@ -46,7 +46,7 @@
         {"shape":"ServiceUnavailable"},
         {"shape":"ValidationError"}
       ],
-      "documentation":"<p>After you deploy a model into production using Amazon SageMaker hosting services, your client applications use this API to get inferences from the model hosted at the specified endpoint in an asynchronous manner.</p> <p>Inference requests sent to this API are enqueued for asynchronous processing. The processing of the inference request may or may not complete before you receive a response from this API. The response from this API will not contain the result of the inference request but contain information about where you can locate it.</p> <p>Amazon SageMaker strips all POST headers except those supported by the API. Amazon SageMaker might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpointAsync</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p>"
+      "documentation":"<p>After you deploy a model into production using Amazon SageMaker AI hosting services, your client applications use this API to get inferences from the model hosted at the specified endpoint in an asynchronous manner.</p> <p>Inference requests sent to this API are enqueued for asynchronous processing. The processing of the inference request may or may not complete before you receive a response from this API. The response from this API will not contain the result of the inference request but contain information about where you can locate it.</p> <p>Amazon SageMaker AI strips all POST headers except those supported by the API. Amazon SageMaker AI might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpointAsync</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p>"
     },
     "InvokeEndpointWithResponseStream":{
       "name":"InvokeEndpointWithResponseStream",
@@ -64,7 +64,7 @@
         {"shape":"ModelStreamError"},
         {"shape":"InternalStreamFailure"}
       ],
-      "documentation":"<p>Invokes a model at the specified endpoint to return the inference response as a stream. The inference stream provides the response payload incrementally as a series of parts. Before you can get an inference stream, you must have access to a model that's deployed using Amazon SageMaker hosting services, and the container for that model must support inference streaming.</p> <p>For more information that can help you use this API, see the following sections in the <i>Amazon SageMaker Developer Guide</i>:</p> <ul> <li> <p>For information about how to add streaming support to a model, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-code-how-containe-serves-requests\">How Containers Serve Requests</a>.</p> </li> <li> <p>For information about how to process the streaming response, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-test-endpoints.html\">Invoke real-time endpoints</a>.</p> </li> </ul> <p>Before you can use this operation, your IAM permissions must allow the <code>sagemaker:InvokeEndpoint</code> action. For more information about Amazon SageMaker actions for IAM policies, see <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html\">Actions, resources, and condition keys for Amazon SageMaker</a> in the <i>IAM Service Authorization Reference</i>.</p> <p>Amazon SageMaker strips all POST headers except those supported by the API. Amazon SageMaker might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpointWithResponseStream</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p>"
+      "documentation":"<p>Invokes a model at the specified endpoint to return the inference response as a stream. The inference stream provides the response payload incrementally as a series of parts. Before you can get an inference stream, you must have access to a model that's deployed using Amazon SageMaker AI hosting services, and the container for that model must support inference streaming.</p> <p>For more information that can help you use this API, see the following sections in the <i>Amazon SageMaker AI Developer Guide</i>:</p> <ul> <li> <p>For information about how to add streaming support to a model, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-code-how-containe-serves-requests\">How Containers Serve Requests</a>.</p> </li> <li> <p>For information about how to process the streaming response, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-test-endpoints.html\">Invoke real-time endpoints</a>.</p> </li> </ul> <p>Before you can use this operation, your IAM permissions must allow the <code>sagemaker:InvokeEndpoint</code> action. For more information about Amazon SageMaker AI actions for IAM policies, see <a href=\"https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsagemaker.html\">Actions, resources, and condition keys for Amazon SageMaker AI</a> in the <i>IAM Service Authorization Reference</i>.</p> <p>Amazon SageMaker AI strips all POST headers except those supported by the API. Amazon SageMaker AI might add additional headers. You should not rely on the behavior of headers outside those enumerated in the request syntax. </p> <p>Calls to <code>InvokeEndpointWithResponseStream</code> are authenticated by using Amazon Web Services Signature Version 4. For information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\">Authenticating Requests (Amazon Web Services Signature Version 4)</a> in the <i>Amazon S3 API Reference</i>.</p>"
     }
   },
   "shapes":{
@@ -177,13 +177,13 @@
         },
         "CustomAttributes":{
           "shape":"CustomAttributesHeader",
-          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker Python SDK. </p>",
+          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker AI endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker AI Python SDK. </p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Custom-Attributes"
         },
         "InferenceId":{
           "shape":"InferenceId",
-          "documentation":"<p>The identifier for the inference request. Amazon SageMaker will generate an identifier for you if none is specified. </p>",
+          "documentation":"<p>The identifier for the inference request. Amazon SageMaker AI will generate an identifier for you if none is specified. </p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Inference-Id"
         },
@@ -212,7 +212,7 @@
       "members":{
         "InferenceId":{
           "shape":"Header",
-          "documentation":"<p>Identifier for an inference request. This will be the same as the <code>InferenceId</code> specified in the input. Amazon SageMaker will generate an identifier for you if you do not specify one.</p>"
+          "documentation":"<p>Identifier for an inference request. This will be the same as the <code>InferenceId</code> specified in the input. Amazon SageMaker AI will generate an identifier for you if you do not specify one.</p>"
         },
         "OutputLocation":{
           "shape":"Header",
@@ -243,7 +243,7 @@
         },
         "Body":{
           "shape":"BodyBlob",
-          "documentation":"<p>Provides input data, in the format specified in the <code>ContentType</code> request header. Amazon SageMaker passes all of the data in the body to the model. </p> <p>For information about the format of the request body, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html\">Common Data Formats-Inference</a>.</p>"
+          "documentation":"<p>Provides input data, in the format specified in the <code>ContentType</code> request header. Amazon SageMaker AI passes all of the data in the body to the model. </p> <p>For information about the format of the request body, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html\">Common Data Formats-Inference</a>.</p>"
         },
         "ContentType":{
           "shape":"Header",
@@ -259,7 +259,7 @@
         },
         "CustomAttributes":{
           "shape":"CustomAttributesHeader",
-          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker Python SDK. </p>",
+          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker AI endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker AI Python SDK. </p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Custom-Attributes"
         },
@@ -301,7 +301,7 @@
         },
         "SessionId":{
           "shape":"SessionIdOrNewSessionConstantHeader",
-          "documentation":"<p>Creates a stateful session or identifies an existing one. You can do one of the following:</p> <ul> <li> <p>Create a stateful session by specifying the value <code>NEW_SESSION</code>.</p> </li> <li> <p>Send your request to an existing stateful session by specifying the ID of that session.</p> </li> </ul> <p>With a stateful session, you can send multiple requests to a stateful model. When you create a session with a stateful model, the model must create the session ID and set the expiration time. The model must also provide that information in the response to your request. You can get the ID and timestamp from the <code>NewSessionId</code> response parameter. For any subsequent request where you specify that session ID, SageMaker routes the request to the same instance that supports the session.</p>",
+          "documentation":"<p>Creates a stateful session or identifies an existing one. You can do one of the following:</p> <ul> <li> <p>Create a stateful session by specifying the value <code>NEW_SESSION</code>.</p> </li> <li> <p>Send your request to an existing stateful session by specifying the ID of that session.</p> </li> </ul> <p>With a stateful session, you can send multiple requests to a stateful model. When you create a session with a stateful model, the model must create the session ID and set the expiration time. The model must also provide that information in the response to your request. You can get the ID and timestamp from the <code>NewSessionId</code> response parameter. For any subsequent request where you specify that session ID, SageMaker AI routes the request to the same instance that supports the session.</p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Session-Id"
         }
@@ -330,7 +330,7 @@
         },
         "CustomAttributes":{
           "shape":"CustomAttributesHeader",
-          "documentation":"<p>Provides additional information in the response about the inference returned by a model hosted at an Amazon SageMaker endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to return an ID received in the <code>CustomAttributes</code> header of a request or other metadata that a service endpoint was programmed to produce. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://tools.ietf.org/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). If the customer wants the custom attribute returned, the model must set the custom attribute to be included on the way back. </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function.</p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker Python SDK.</p>",
+          "documentation":"<p>Provides additional information in the response about the inference returned by a model hosted at an Amazon SageMaker AI endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to return an ID received in the <code>CustomAttributes</code> header of a request or other metadata that a service endpoint was programmed to produce. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://tools.ietf.org/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). If the customer wants the custom attribute returned, the model must set the custom attribute to be included on the way back. </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function.</p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker AI Python SDK.</p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Custom-Attributes"
         },
@@ -364,7 +364,7 @@
         },
         "Body":{
           "shape":"BodyBlob",
-          "documentation":"<p>Provides input data, in the format specified in the <code>ContentType</code> request header. Amazon SageMaker passes all of the data in the body to the model. </p> <p>For information about the format of the request body, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html\">Common Data Formats-Inference</a>.</p>"
+          "documentation":"<p>Provides input data, in the format specified in the <code>ContentType</code> request header. Amazon SageMaker AI passes all of the data in the body to the model. </p> <p>For information about the format of the request body, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html\">Common Data Formats-Inference</a>.</p>"
         },
         "ContentType":{
           "shape":"Header",
@@ -380,7 +380,7 @@
         },
         "CustomAttributes":{
           "shape":"CustomAttributesHeader",
-          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker Python SDK. </p>",
+          "documentation":"<p>Provides additional information about a request for an inference submitted to a model hosted at an Amazon SageMaker AI endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to provide an ID that you can use to track a request or to provide other metadata that a service endpoint was programmed to process. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function. </p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker AI Python SDK. </p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Custom-Attributes"
         },
@@ -436,7 +436,7 @@
         },
         "CustomAttributes":{
           "shape":"CustomAttributesHeader",
-          "documentation":"<p>Provides additional information in the response about the inference returned by a model hosted at an Amazon SageMaker endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to return an ID received in the <code>CustomAttributes</code> header of a request or other metadata that a service endpoint was programmed to produce. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://tools.ietf.org/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). If the customer wants the custom attribute returned, the model must set the custom attribute to be included on the way back. </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function.</p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker Python SDK.</p>",
+          "documentation":"<p>Provides additional information in the response about the inference returned by a model hosted at an Amazon SageMaker AI endpoint. The information is an opaque value that is forwarded verbatim. You could use this value, for example, to return an ID received in the <code>CustomAttributes</code> header of a request or other metadata that a service endpoint was programmed to produce. The value must consist of no more than 1024 visible US-ASCII characters as specified in <a href=\"https://tools.ietf.org/html/rfc7230#section-3.2.6\">Section 3.3.6. Field Value Components</a> of the Hypertext Transfer Protocol (HTTP/1.1). If the customer wants the custom attribute returned, the model must set the custom attribute to be included on the way back. </p> <p>The code in your model is responsible for setting or updating any custom attributes in the response. If your code does not set this value in the response, an empty value is returned. For example, if a custom attribute represents the trace ID, your model can prepend the custom attribute with <code>Trace ID:</code> in your post-processing function.</p> <p>This feature is currently supported in the Amazon Web Services SDKs but not in the Amazon SageMaker AI Python SDK.</p>",
           "location":"header",
           "locationName":"X-Amzn-SageMaker-Custom-Attributes"
         }
@@ -485,10 +485,10 @@
         "Message":{"shape":"Message"},
         "ErrorCode":{
           "shape":"ErrorCode",
-          "documentation":"<p>This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>"
+          "documentation":"<p>This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker AI.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>"
         }
       },
-      "documentation":"<p> An error occurred while streaming the response body. This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>",
+      "documentation":"<p> An error occurred while streaming the response body. This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker AI.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>",
       "exception":true,
       "synthetic":true
     },
@@ -527,7 +527,7 @@
         },
         "ModelStreamError":{
           "shape":"ModelStreamError",
-          "documentation":"<p> An error occurred while streaming the response body. This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>"
+          "documentation":"<p> An error occurred while streaming the response body. This error can have the following error codes:</p> <dl> <dt>ModelInvocationTimeExceeded</dt> <dd> <p>The model failed to finish sending the response within the timeout period allowed by Amazon SageMaker AI.</p> </dd> <dt>StreamBroken</dt> <dd> <p>The Transmission Control Protocol (TCP) connection between the client and the model was reset or closed.</p> </dd> </dl>"
         },
         "InternalStreamFailure":{
           "shape":"InternalStreamFailure",
@@ -586,5 +586,5 @@
       "synthetic":true
     }
   },
-  "documentation":"<p> The Amazon SageMaker runtime API. </p>"
+  "documentation":"<p> The Amazon SageMaker AI runtime API. </p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/savingsplans/2019-06-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,33 +5,195 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
         {
             "conditions": [
                 {
+                    "fn": "not",
+                    "argv": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Endpoint"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseFIPS"
+                        },
+                        false
+                    ]
+                },
+                {
+                    "fn": "booleanEquals",
+                    "argv": [
+                        {
+                            "ref": "UseDualStack"
+                        },
+                        true
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        },
+                        {
+                            "fn": "aws.partition",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ],
+                            "assign": "PartitionResult"
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "stringEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "name"
+                                            ]
+                                        },
+                                        "aws"
+                                    ]
+                                }
+                            ],
+                            "endpoint": {
+                                "url": "https://savingsplans.global.api.aws",
+                                "properties": {
+                                    "authSchemes": [
+                                        {
+                                            "name": "sigv4",
+                                            "signingName": "savingsplans",
+                                            "signingRegion": "us-east-1"
+                                        }
+                                    ]
+                                },
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        },
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "fn": "getAttr",
+                                            "argv": [
+                                                {
+                                                    "ref": "PartitionResult"
+                                                },
+                                                "supportsDualStack"
+                                            ]
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://savingsplans.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        },
+                        {
+                            "conditions": [],
+                            "error": "DualStack is enabled but this partition does not support DualStack",
+                            "type": "error"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [
+                        {
+                            "fn": "not",
+                            "argv": [
+                                {
+                                    "fn": "isSet",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ],
+                    "endpoint": {
+                        "url": "https://savingsplans.global.api.aws",
+                        "properties": {
+                            "authSchemes": [
+                                {
+                                    "name": "sigv4",
+                                    "signingName": "savingsplans",
+                                    "signingRegion": "us-east-1"
+                                }
+                            ]
+                        },
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [
+                {
                     "fn": "isSet",
                     "argv": [
                         {
diff -pruN 2.23.6-1/awscli/botocore/data/savingsplans/2019-06-28/service-2.json 2.31.35-1/awscli/botocore/data/savingsplans/2019-06-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/savingsplans/2019-06-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/savingsplans/2019-06-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,11 +6,13 @@
     "globalEndpoint":"savingsplans.amazonaws.com",
     "jsonVersion":"1.0",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"AWSSavingsPlans",
     "serviceFullName":"AWS Savings Plans",
     "serviceId":"savingsplans",
     "signatureVersion":"v4",
-    "uid":"savingsplans-2019-06-28"
+    "uid":"savingsplans-2019-06-28",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateSavingsPlan":{
@@ -234,8 +236,7 @@
     },
     "DeleteQueuedSavingsPlanResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeSavingsPlanRatesRequest":{
       "type":"structure",
@@ -1173,8 +1174,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{"type":"string"},
     "TermDurationInSeconds":{"type":"long"},
@@ -1205,8 +1205,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/scheduler/2021-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/schemas/2019-12-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/schemas/2019-12-02/service-2.json 2.31.35-1/awscli/botocore/data/schemas/2019-12-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/schemas/2019-12-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/schemas/2019-12-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -8,7 +8,10 @@
     "protocol": "rest-json",
     "jsonVersion": "1.1",
     "uid": "schemas-2019-12-02",
-    "signatureVersion": "v4"
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
   "operations": {
     "CreateDiscoverer": {
@@ -3442,4 +3445,4 @@
     }
   },
   "documentation": "<p>Amazon EventBridge Schema Registry</p>"
-}
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/secretsmanager/2017-10-17/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/security-ir/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/security-ir/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/security-ir/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/security-ir/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,19 +6,19 @@
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/security-ir/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/security-ir/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/security-ir/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/security-ir/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,12 +28,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to view an existing membership.</p>"
+      "documentation":"<p>Provides information on whether the supplied account IDs are associated with a membership.</p> <note> <p> AWS account ID's may appear less than 12 characters and need to be zero-prepended. An example would be <code>123123123</code> which is nine digits, and with zero-prepend would be <code>000123123123</code>. Not zero-prepending to 12 digits could result in errors. </p> </note>",
+      "readonly":true
     },
     "CancelMembership":{
       "name":"CancelMembership",
@@ -50,12 +51,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permissions to cancel an existing membership.</p>",
+      "documentation":"<p>Cancels an existing membership.</p>",
       "idempotent":true
     },
     "CloseCase":{
@@ -73,12 +74,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to close an existing case.</p>"
+      "documentation":"<p>Closes an existing case.</p>"
     },
     "CreateCase":{
       "name":"CreateCase",
@@ -95,12 +96,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to create a new case.</p>",
+      "documentation":"<p>Creates a new case.</p>",
       "idempotent":true
     },
     "CreateCaseComment":{
@@ -118,12 +119,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to add a comment to an existing case.</p>",
+      "documentation":"<p>Adds a comment to an existing case.</p>",
       "idempotent":true
     },
     "CreateMembership":{
@@ -141,12 +142,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permissions to create a new membership.</p>",
+      "documentation":"<p>Creates a new membership.</p>",
       "idempotent":true
     },
     "GetCase":{
@@ -164,12 +165,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grant permission to view a designated case.</p>"
+      "documentation":"<p>Returns the attributes of a case.</p>",
+      "readonly":true
     },
     "GetCaseAttachmentDownloadUrl":{
       "name":"GetCaseAttachmentDownloadUrl",
@@ -186,12 +188,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to obtain an Amazon S3 presigned URL to download an attachment.</p>"
+      "documentation":"<p>Returns a Pre-Signed URL for uploading attachments into a case.</p>",
+      "readonly":true
     },
     "GetCaseAttachmentUploadUrl":{
       "name":"GetCaseAttachmentUploadUrl",
@@ -208,12 +211,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to upload an attachment to a case.</p>",
+      "documentation":"<p>Uploads an attachment to a case.</p>",
       "idempotent":true
     },
     "GetMembership":{
@@ -231,12 +234,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to get details of a designated service membership.</p>"
+      "documentation":"<p>Returns the attributes of a membership.</p>",
+      "readonly":true
     },
     "ListCaseEdits":{
       "name":"ListCaseEdits",
@@ -253,12 +257,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permissions to view the aidt log for edits made to a designated case.</p>"
+      "documentation":"<p>Views the case history for edits made to a designated case.</p>",
+      "readonly":true
     },
     "ListCases":{
       "name":"ListCases",
@@ -275,12 +280,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to list all cases the requester has access to.</p>"
+      "documentation":"<p>Lists all cases the requester has access to.</p>",
+      "readonly":true
     },
     "ListComments":{
       "name":"ListComments",
@@ -297,12 +303,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permissions to list and view comments for a designated case.</p>"
+      "documentation":"<p>Returns comments for a designated case.</p>",
+      "readonly":true
     },
     "ListMemberships":{
       "name":"ListMemberships",
@@ -319,12 +326,13 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to query the memberships a principal has access to.</p>"
+      "documentation":"<p>Returns the memberships that the calling principal can access.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -342,11 +350,12 @@
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to view currently configured tags on a resource.</p>"
+      "documentation":"<p>Returns currently configured tags on a resource.</p>",
+      "readonly":true
     },
     "TagResource":{
       "name":"TagResource",
@@ -364,11 +373,11 @@
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to add a tag(s) to a designated resource.</p>"
+      "documentation":"<p>Adds a tag(s) to a designated resource.</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -386,11 +395,11 @@
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ConflictException"},
         {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to remove a tag(s) from a designate resource.</p>",
+      "documentation":"<p>Removes a tag(s) from a designate resource.</p>",
       "idempotent":true
     },
     "UpdateCase":{
@@ -408,12 +417,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to update an existing case.</p>"
+      "documentation":"<p>Updates an existing case.</p>"
     },
     "UpdateCaseComment":{
       "name":"UpdateCaseComment",
@@ -430,12 +439,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to update an existing case comment.</p>",
+      "documentation":"<p>Updates an existing case comment.</p>",
       "idempotent":true
     },
     "UpdateCaseStatus":{
@@ -453,12 +462,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to update the status for a designated cases. Options include <code>Submitted | Detection and Analysis | Eradication, Containment and Recovery | Post-Incident Activities | Closed</code>. </p>"
+      "documentation":"<p>Updates the state transitions for a designated cases.</p> <p> <b>Self-managed</b>: the following states are available for self-managed cases. </p> <ul> <li> <p>Submitted → Detection and Analysis</p> </li> <li> <p>Detection and Analysis → Containment, Eradication, and Recovery</p> </li> <li> <p>Detection and Analysis → Post-incident Activities</p> </li> <li> <p>Containment, Eradication, and Recovery → Detection and Analysis</p> </li> <li> <p>Containment, Eradication, and Recovery → Post-incident Activities</p> </li> <li> <p>Post-incident Activities → Containment, Eradication, and Recovery</p> </li> <li> <p>Post-incident Activities → Detection and Analysis</p> </li> <li> <p>Any → Closed</p> </li> </ul> <p> <b>AWS supported</b>: You must use the <code>CloseCase</code> API to close. </p>"
     },
     "UpdateMembership":{
       "name":"UpdateMembership",
@@ -475,12 +484,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants access to UpdateMembership to change membership configuration.</p>",
+      "documentation":"<p>Updates membership configuration.</p>",
       "idempotent":true
     },
     "UpdateResolverType":{
@@ -498,12 +507,12 @@
         {"shape":"ValidationException"},
         {"shape":"SecurityIncidentResponseNotActiveException"},
         {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ThrottlingException"},
         {"shape":"InvalidTokenException"}
       ],
-      "documentation":"<p>Grants permission to update the resolver type for a case.</p> <important> <p>This is a one-way action and cannot be reversed.</p> </important> <p>Options include self-supported &gt; AWS-supported.</p>"
+      "documentation":"<p>Updates the resolver type for a case.</p> <important> <p>This is a one-way action and cannot be reversed.</p> </important>"
     }
   },
   "shapes":{
@@ -523,7 +532,10 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The ID of the resource which lead to the access denial.</p>"
+        }
       },
       "documentation":"<p/>",
       "error":{
@@ -547,6 +559,7 @@
       "enum":[
         "af-south-1",
         "ap-east-1",
+        "ap-east-2",
         "ap-northeast-1",
         "ap-northeast-2",
         "ap-northeast-3",
@@ -557,6 +570,8 @@
         "ap-southeast-3",
         "ap-southeast-4",
         "ap-southeast-5",
+        "ap-southeast-6",
+        "ap-southeast-7",
         "ca-central-1",
         "ca-west-1",
         "cn-north-1",
@@ -572,6 +587,7 @@
         "il-central-1",
         "me-central-1",
         "me-south-1",
+        "mx-central-1",
         "sa-east-1",
         "us-east-1",
         "us-east-2",
@@ -582,7 +598,7 @@
     "AwsService":{
       "type":"string",
       "max":50,
-      "min":3,
+      "min":2,
       "pattern":"[a-zA-Z0-9 -.():]+"
     },
     "BatchGetMemberAccountDetailsRequest":{
@@ -600,7 +616,7 @@
         },
         "accountIds":{
           "shape":"AWSAccountIds",
-          "documentation":"<p>Optional element to query the membership relationship status to a provided list of account IDs.</p>"
+          "documentation":"<p>Optional element to query the membership relationship status to a provided list of account IDs.</p> <note> <p> AWS account ID's may appear less than 12 characters and need to be zero-prepended. An example would be <code>123123123</code> which is nine digits, and with zero-prepend would be <code>000123123123</code>. Not zero-prepending to 12 digits could result in errors. </p> </note>"
         }
       }
     },
@@ -613,7 +629,7 @@
         },
         "errors":{
           "shape":"GetMembershipAccountDetailErrors",
-          "documentation":"<p>The response element providing errors messages for requests to GetMembershipAccountDetails.</p>"
+          "documentation":"<p>The response element providing error messages for requests to GetMembershipAccountDetails.</p>"
         }
       }
     },
@@ -779,11 +795,11 @@
       "members":{
         "caseStatus":{
           "shape":"CaseStatus",
-          "documentation":"<p>A response element providing responses for requests to CloseCase. This element responds with the case status following the action. </p>"
+          "documentation":"<p>A response element providing responses for requests to CloseCase. This element responds <code>Closed </code> if successful. </p>"
         },
         "closedDate":{
           "shape":"Timestamp",
-          "documentation":"<p>A response element providing responses for requests to CloseCase. This element responds with the case closure date following the action. </p>"
+          "documentation":"<p>A response element providing responses for requests to CloseCase. This element responds with the ISO-8601 formatted timestamp of the moment when the case was closed. </p>"
         }
       }
     },
@@ -808,6 +824,31 @@
       "min":6,
       "pattern":"\\d{6}"
     },
+    "CommunicationPreferences":{
+      "type":"list",
+      "member":{"shape":"CommunicationType"}
+    },
+    "CommunicationType":{
+      "type":"string",
+      "enum":[
+        "Case Created",
+        "Case Updated",
+        "Case Acknowledged",
+        "Case Closed",
+        "Case Updated To Service Managed",
+        "Case Status Updated",
+        "Case Pending Customer Action Reminder",
+        "Case Attachment Url Uploaded",
+        "Case Comment Added",
+        "Case Comment Updated",
+        "Membership Created",
+        "Membership Updated",
+        "Membership Cancelled",
+        "Register Delegated Administrator",
+        "Deregister Delegated Administrator",
+        "Disable AWS Service Access"
+      ]
+    },
     "ConflictException":{
       "type":"structure",
       "required":[
@@ -816,14 +857,17 @@
         "resourceType"
       ],
       "members":{
-        "message":{"shape":"String"},
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        },
         "resourceId":{
           "shape":"String",
-          "documentation":"<p>Element providing the ID of the resource affected.</p>"
+          "documentation":"<p>The ID of the conflicting resource.</p>"
         },
         "resourceType":{
           "shape":"String",
-          "documentation":"<p>Element providing the type of the resource affected.</p>"
+          "documentation":"<p>The type of the conflicting resource.</p>"
         }
       },
       "documentation":"<p/>",
@@ -854,7 +898,7 @@
         },
         "clientToken":{
           "shape":"CreateCaseCommentRequestClientTokenString",
-          "documentation":"<p>An optional element used in combination with CreateCaseComment.</p>",
+          "documentation":"<p><note> <p>The <code>clientToken</code> field is an idempotency key used to ensure that repeated attempts for a single action will be ignored by the server during retries. A caller supplied unique ID (typically a UUID) should be provided. </p> </note></p>",
           "idempotencyToken":true
         },
         "body":{
@@ -892,12 +936,12 @@
       "members":{
         "clientToken":{
           "shape":"CreateCaseRequestClientTokenString",
-          "documentation":"<p>Required element used in combination with CreateCase.</p>",
+          "documentation":"<p><note> <p>The <code>clientToken</code> field is an idempotency key used to ensure that repeated attempts for a single action will be ignored by the server during retries. A caller supplied unique ID (typically a UUID) should be provided. </p> </note></p>",
           "idempotencyToken":true
         },
         "resolverType":{
           "shape":"ResolverType",
-          "documentation":"<p>Required element used in combination with CreateCase to identify the resolver type. Available resolvers include self-supported | aws-supported. </p>"
+          "documentation":"<p>Required element used in combination with CreateCase to identify the resolver type.</p>"
         },
         "title":{
           "shape":"CaseTitle",
@@ -905,7 +949,7 @@
         },
         "description":{
           "shape":"CaseDescription",
-          "documentation":"<p>Required element used in combination with CreateCase to provide a description for the new case.</p>"
+          "documentation":"<p>Required element used in combination with CreateCase</p> <p>to provide a description for the new case.</p>"
         },
         "engagementType":{
           "shape":"EngagementType",
@@ -917,7 +961,7 @@
         },
         "impactedAccounts":{
           "shape":"ImpactedAccounts",
-          "documentation":"<p>Required element used in combination with CreateCase to provide a list of impacted accounts.</p>"
+          "documentation":"<p>Required element used in combination with CreateCase to provide a list of impacted accounts.</p> <note> <p> AWS account ID's may appear less than 12 characters and need to be zero-prepended. An example would be <code>123123123</code> which is nine digits, and with zero-prepend would be <code>000123123123</code>. Not zero-prepending to 12 digits could result in errors. </p> </note>"
         },
         "watchers":{
           "shape":"Watchers",
@@ -965,16 +1009,16 @@
       "members":{
         "clientToken":{
           "shape":"CreateMembershipRequestClientTokenString",
-          "documentation":"<p>An optional element used in combination with CreateMembership.</p>",
+          "documentation":"<p><note> <p>The <code>clientToken</code> field is an idempotency key used to ensure that repeated attempts for a single action will be ignored by the server during retries. A caller supplied unique ID (typically a UUID) should be provided. </p> </note></p>",
           "idempotencyToken":true
         },
         "membershipName":{
           "shape":"MembershipName",
-          "documentation":"<p>Required element use in combination with CreateMembership to create a name for the membership.</p>"
+          "documentation":"<p>Required element used in combination with CreateMembership to create a name for the membership.</p>"
         },
         "incidentResponseTeam":{
           "shape":"IncidentResponseTeam",
-          "documentation":"<p>Required element use in combination with CreateMembership to add customer incident response team members and trusted partners to the membership. </p>"
+          "documentation":"<p>Required element used in combination with CreateMembership to add customer incident response team members and trusted partners to the membership. </p>"
         },
         "optInFeatures":{
           "shape":"OptInFeatures",
@@ -983,6 +1027,10 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>Optional element for customer configured tags.</p>"
+        },
+        "coverEntireOrganization":{
+          "shape":"Boolean",
+          "documentation":"<p>The <code>coverEntireOrganization</code> parameter is a boolean flag that determines whether the membership should be applied to the entire Amazon Web Services Organization. When set to true, the membership will be created for all accounts within the organization. When set to false, the membership will only be created for specified accounts. </p> <p>This parameter is optional. If not specified, the default value is false.</p> <ul> <li> <p>If set to <i>true</i>: The membership will automatically include all existing and future accounts in the Amazon Web Services Organization. </p> </li> <li> <p>If set to <i>false</i>: The membership will only apply to explicitly specified accounts. </p> </li> </ul>"
         }
       }
     },
@@ -1070,7 +1118,7 @@
       "members":{
         "caseId":{
           "shape":"CaseId",
-          "documentation":"<p>Required element for GetCaseAttachmentUploadUrl to identify the case ID for uploading an attachment to. </p>",
+          "documentation":"<p>Required element for GetCaseAttachmentUploadUrl to identify the case ID for uploading an attachment. </p>",
           "location":"uri",
           "locationName":"caseId"
         },
@@ -1080,11 +1128,11 @@
         },
         "contentLength":{
           "shape":"ContentLength",
-          "documentation":"<p>Required element for GetCaseAttachmentUploadUrl to identify the size od the file attachment.</p>"
+          "documentation":"<p>Required element for GetCaseAttachmentUploadUrl to identify the size of the file attachment.</p>"
         },
         "clientToken":{
           "shape":"GetCaseAttachmentUploadUrlRequestClientTokenString",
-          "documentation":"<p>Optional element for customer provided token.</p>",
+          "documentation":"<p><note> <p>The <code>clientToken</code> field is an idempotency key used to ensure that repeated attempts for a single action will be ignored by the server during retries. A caller supplied unique ID (typically a UUID) should be provided. </p> </note></p>",
           "idempotencyToken":true
         }
       }
@@ -1100,7 +1148,7 @@
       "members":{
         "attachmentPresignedUrl":{
           "shape":"Url",
-          "documentation":"<p>Response element providing the Amazon S3 presigned UTL to upload the attachment.</p>"
+          "documentation":"<p>Response element providing the Amazon S3 presigned URL to upload the attachment.</p>"
         }
       }
     },
@@ -1157,7 +1205,7 @@
         },
         "pendingAction":{
           "shape":"PendingAction",
-          "documentation":"<p>Response element for GetCase that provides identifies the case is waiting on customer input.</p>"
+          "documentation":"<p>Response element for GetCase that identifies the case is waiting on customer input.</p>"
         },
         "impactedAccounts":{
           "shape":"ImpactedAccounts",
@@ -1181,7 +1229,7 @@
         },
         "resolverType":{
           "shape":"ResolverType",
-          "documentation":"<p>Response element for GetCase that provides the current resolver types. Options include <code> self-supported | AWS-supported</code>. </p>"
+          "documentation":"<p>Response element for GetCase that provides the current resolver types.</p>"
         },
         "impactedServices":{
           "shape":"ImpactedServicesList",
@@ -1272,11 +1320,11 @@
         },
         "accountId":{
           "shape":"AWSAccountId",
-          "documentation":"<p>Response element for GetMembership that provides the configured account for managing the membership. </p>"
+          "documentation":"<p>Response element for GetMembership that provides the account configured to manage the membership.</p>"
         },
         "region":{
           "shape":"AwsRegion",
-          "documentation":"<p>Response element for GetMembership that provides the configured region for managing the membership.</p>"
+          "documentation":"<p>Response element for GetMembership that provides the region configured to manage the membership.</p>"
         },
         "membershipName":{
           "shape":"MembershipName",
@@ -1313,6 +1361,10 @@
         "optInFeatures":{
           "shape":"OptInFeatures",
           "documentation":"<p>Response element for GetMembership that provides the if opt-in features have been enabled.</p>"
+        },
+        "membershipAccountsConfigurations":{
+          "shape":"MembershipAccountsConfigurations",
+          "documentation":"<p>The <code>membershipAccountsConfigurations</code> field contains the configuration details for member accounts within the Amazon Web Services Organizations membership structure. </p> <p>This field returns a structure containing information about:</p> <ul> <li> <p>Account configurations for member accounts</p> </li> <li> <p>Membership settings and preferences</p> </li> <li> <p>Account-level permissions and roles</p> </li> </ul>"
         }
       }
     },
@@ -1369,6 +1421,10 @@
         "email":{
           "shape":"EmailAddress",
           "documentation":"<p/>"
+        },
+        "communicationPreferences":{
+          "shape":"CommunicationPreferences",
+          "documentation":"<p/>"
         }
       },
       "documentation":"<p/>"
@@ -1393,10 +1449,13 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"},
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        },
         "retryAfterSeconds":{
           "shape":"Integer",
-          "documentation":"<p>Element providing advice to clients on when the call can be safely retried.</p>",
+          "documentation":"<p>The number of seconds after which to retry the request.</p>",
           "location":"header",
           "locationName":"Retry-After"
         }
@@ -1411,7 +1470,10 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        }
       },
       "documentation":"<p/>",
       "error":{
@@ -1433,7 +1495,7 @@
       "members":{
         "nextToken":{
           "shape":"ListCaseEditsRequestNextTokenString",
-          "documentation":"<p>Optional element for a customer provided token.</p>"
+          "documentation":"<p>An optional string that, if supplied, must be copied from the output of a previous call to ListCaseEdits. When provided in this manner, the API fetches the next page of results. </p>"
         },
         "maxResults":{
           "shape":"ListCaseEditsRequestMaxResultsInteger",
@@ -1463,11 +1525,11 @@
       "members":{
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied on subsequent calls to ListCaseEdits, allows the API to fetch the next page of results. </p>"
         },
         "items":{
           "shape":"CaseEditItems",
-          "documentation":"<p>Response element for ListCaseEdits that includes the action, eventtimestamp, message, and principal for the response. </p>"
+          "documentation":"<p>Response element for ListCaseEdits that includes the action, event timestamp, message, and principal for the response. </p>"
         },
         "total":{
           "shape":"Integer",
@@ -1531,7 +1593,7 @@
       "members":{
         "nextToken":{
           "shape":"ListCasesRequestNextTokenString",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied, must be copied from the output of a previous call to ListCases. When provided in this manner, the API fetches the next page of results. </p>"
         },
         "maxResults":{
           "shape":"ListCasesRequestMaxResultsInteger",
@@ -1555,7 +1617,7 @@
       "members":{
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied on subsequent calls to ListCases, allows the API to fetch the next page of results. </p>"
         },
         "items":{
           "shape":"ListCasesItems",
@@ -1608,7 +1670,7 @@
       "members":{
         "nextToken":{
           "shape":"ListCommentsRequestNextTokenString",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied, must be copied from the output of a previous call to ListComments. When provided in this manner, the API fetches the next page of results. </p>"
         },
         "maxResults":{
           "shape":"ListCommentsRequestMaxResultsInteger",
@@ -1638,7 +1700,7 @@
       "members":{
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Optional request elements.</p>"
+          "documentation":"<p>An optional string that, if supplied on subsequent calls to ListComments, allows the API to fetch the next page of results. </p>"
         },
         "items":{
           "shape":"ListCommentsItems",
@@ -1686,7 +1748,7 @@
       "members":{
         "nextToken":{
           "shape":"ListMembershipsRequestNextTokenString",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied, must be copied from the output of a previous call to ListMemberships. When provided in this manner, the API fetches the next page of results. </p>"
         },
         "maxResults":{
           "shape":"ListMembershipsRequestMaxResultsInteger",
@@ -1710,7 +1772,7 @@
       "members":{
         "nextToken":{
           "shape":"String",
-          "documentation":"<p>Optional element.</p>"
+          "documentation":"<p>An optional string that, if supplied on subsequent calls to ListMemberships, allows the API to fetch the next page of results. </p>"
         },
         "items":{
           "shape":"ListMembershipItems",
@@ -1748,12 +1810,60 @@
       "type":"string",
       "enum":[
         "Associated",
-        "Disassociated"
+        "Disassociated",
+        "Unassociated"
       ]
     },
     "MembershipAccountRelationshipType":{
       "type":"string",
-      "enum":["Organization"]
+      "enum":[
+        "Organization",
+        "Unrelated"
+      ]
+    },
+    "MembershipAccountsConfigurations":{
+      "type":"structure",
+      "members":{
+        "coverEntireOrganization":{
+          "shape":"Boolean",
+          "documentation":"<p>The <code>coverEntireOrganization</code> field is a boolean value that determines whether the membership configuration applies to all accounts within an Amazon Web Services Organization. </p> <p>When set to <code>true</code>, the configuration will be applied across all accounts in the organization. When set to <code>false</code>, the configuration will only apply to specifically designated accounts under the AWS Organizational Units specificied. </p>"
+        },
+        "organizationalUnits":{
+          "shape":"OrganizationalUnits",
+          "documentation":"<p>A list of organizational unit IDs that follow the pattern <code>ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}</code>. These IDs represent the organizational units within an Amazon Web Services Organizations structure that are covered by the membership. </p> <p>Each organizational unit ID in the list must:</p> <ul> <li> <p>Begin with the prefix 'ou-'</p> </li> <li> <p>Contain between 4 and 32 alphanumeric characters in the first segment</p> </li> <li> <p>Contain between 8 and 32 alphanumeric characters in the second segment</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The <code>MembershipAccountsConfigurations</code> structure defines the configuration settings for managing membership accounts withinAmazon Web Services. </p> <p>This structure contains settings that determine how member accounts are configured and managed within your organization, including: </p> <ul> <li> <p>Account configuration preferences</p> </li> <li> <p>Membership validation rules</p> </li> <li> <p>Account access settings</p> </li> </ul> <p>You can use this structure to define and maintain standardized configurations across multiple member accounts in your organization. </p>"
+    },
+    "MembershipAccountsConfigurationsUpdate":{
+      "type":"structure",
+      "members":{
+        "coverEntireOrganization":{
+          "shape":"Boolean",
+          "documentation":"<p>The <code>coverEntireOrganization</code> field is a boolean value that determines whether the membership configuration should be applied across the entire Amazon Web Services Organization. </p> <p>When set to <code>true</code>, the configuration will be applied to all accounts within the organization. When set to <code>false</code>, the configuration will only apply to specifically designated accounts. </p>"
+        },
+        "organizationalUnitsToAdd":{
+          "shape":"MembershipAccountsConfigurationsUpdateOrganizationalUnitsToAddList",
+          "documentation":"<p>A list of organizational unit IDs to add to the membership configuration. Each organizational unit ID must match the pattern <code>ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}</code>. </p> <p>The list must contain between 1 and 5 organizational unit IDs.</p>"
+        },
+        "organizationalUnitsToRemove":{
+          "shape":"MembershipAccountsConfigurationsUpdateOrganizationalUnitsToRemoveList",
+          "documentation":"<p>A list of organizational unit IDs to remove from the membership configuration. Each organizational unit ID must match the pattern <code>ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}</code>. </p> <p>The list must contain between 1 and 5 organizational unit IDs per invocation of the API request.</p>"
+        }
+      },
+      "documentation":"<p>The <code>MembershipAccountsConfigurationsUpdate</code>structure represents the configuration updates for member accounts within an Amazon Web Services organization. </p> <p>This structure is used to modify existing account configurations and settings for members in the organization. When applying updates, ensure all required fields are properly specified to maintain account consistency. </p> <p>Key considerations when using this structure:</p> <ul> <li> <p>All configuration changes are validated before being applied</p> </li> <li> <p>Updates are processed asynchronously in the background</p> </li> <li> <p>Configuration changes may take several minutes to propagate across all affected accounts</p> </li> </ul>"
+    },
+    "MembershipAccountsConfigurationsUpdateOrganizationalUnitsToAddList":{
+      "type":"list",
+      "member":{"shape":"OrganizationalUnitId"},
+      "max":5,
+      "min":1
+    },
+    "MembershipAccountsConfigurationsUpdateOrganizationalUnitsToRemoveList":{
+      "type":"list",
+      "member":{"shape":"OrganizationalUnitId"},
+      "max":5,
+      "min":1
     },
     "MembershipArn":{
       "type":"string",
@@ -1809,6 +1919,14 @@
       "max":2,
       "min":1
     },
+    "OrganizationalUnitId":{
+      "type":"string",
+      "pattern":"ou-[0-9a-z]{4,32}-[a-z0-9]{8,32}"
+    },
+    "OrganizationalUnits":{
+      "type":"list",
+      "member":{"shape":"OrganizationalUnitId"}
+    },
     "PendingAction":{
       "type":"string",
       "enum":[
@@ -1824,7 +1942,7 @@
     },
     "PrincipalId":{
       "type":"string",
-      "pattern":".*(^internal:midway:([a-z]{3,8}|svc-mw-[0-9]{12}[a-zA-Z0-9-]{5,20})$)|(^external:aws:\\d{12}$).*"
+      "pattern":".*((^AWS Responder)|(^\\d{12}$)|(^arn:([^:]*aws[^:]*):(?:(?:iam)::\\d{12}:(?:user|role|group|root)(?:(?:/[^/]+)+)?|(?:sts)::\\d{12}:assumed-role/[^/]+/[^/]+)$)|(^security-ir.amazonaws.com)).*"
     },
     "ResolverType":{
       "type":"string",
@@ -1837,7 +1955,10 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        }
       },
       "documentation":"<p/>",
       "error":{
@@ -1850,7 +1971,10 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"}
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        }
       },
       "documentation":"<p/>",
       "error":{
@@ -1878,22 +2002,25 @@
         "quotaCode"
       ],
       "members":{
-        "message":{"shape":"String"},
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        },
         "resourceId":{
           "shape":"String",
-          "documentation":"<p>Element that provides the ID of the resource affected.</p>"
+          "documentation":"<p>The ID of the requested resource which lead to the service quota exception.</p>"
         },
         "resourceType":{
           "shape":"String",
-          "documentation":"<p>Element that provides the type of the resource affected.</p>"
+          "documentation":"<p>The type of the requested resource which lead to the service quota exception.</p>"
         },
         "serviceCode":{
           "shape":"String",
-          "documentation":"<p>Element that provides the originating service who made the call.</p>"
+          "documentation":"<p>The service code of the quota.</p>"
         },
         "quotaCode":{
           "shape":"String",
-          "documentation":"<p>Element that provides the quota that was exceeded.</p>"
+          "documentation":"<p>The code of the quota.</p>"
         }
       },
       "documentation":"<p/>",
@@ -1941,8 +2068,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1974,18 +2100,21 @@
       "type":"structure",
       "required":["message"],
       "members":{
-        "message":{"shape":"String"},
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        },
         "serviceCode":{
           "shape":"String",
-          "documentation":"<p>Element providing the service code of the originating service.</p>"
+          "documentation":"<p>The service code of the exception.</p>"
         },
         "quotaCode":{
           "shape":"String",
-          "documentation":"<p>Element providing the quota of the originating service.</p>"
+          "documentation":"<p>The quota code of the exception.</p>"
         },
         "retryAfterSeconds":{
           "shape":"Integer",
-          "documentation":"<p>Element providing advice to clients on when the call can be safely retried.</p>",
+          "documentation":"<p>The number of seconds after which to retry the request.</p>",
           "location":"header",
           "locationName":"Retry-After"
         }
@@ -2022,8 +2151,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCaseCommentRequest":{
       "type":"structure",
@@ -2129,18 +2257,17 @@
         },
         "impactedAccountsToAdd":{
           "shape":"ImpactedAccounts",
-          "documentation":"<p>Optional element for UpdateCase to provide content to add accounts impacted.</p>"
+          "documentation":"<p>Optional element for UpdateCase to provide content to add accounts impacted.</p> <note> <p> AWS account ID's may appear less than 12 characters and need to be zero-prepended. An example would be <code>123123123</code> which is nine digits, and with zero-prepend would be <code>000123123123</code>. Not zero-prepending to 12 digits could result in errors. </p> </note>"
         },
         "impactedAccountsToDelete":{
           "shape":"ImpactedAccounts",
-          "documentation":"<p>Optional element for UpdateCase to provide content to add accounts impacted.</p>"
+          "documentation":"<p>Optional element for UpdateCase to provide content to add accounts impacted.</p> <note> <p> AWS account ID's may appear less than 12 characters and need to be zero-prepended. An example would be <code>123123123</code> which is nine digits, and with zero-prepend would be <code>000123123123</code>. Not zero-prepending to 12 digits could result in errors. </p> </note>"
         }
       }
     },
     "UpdateCaseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCaseStatusRequest":{
       "type":"structure",
@@ -2191,13 +2318,20 @@
         "optInFeatures":{
           "shape":"OptInFeatures",
           "documentation":"<p>Optional element for UpdateMembership to enable or disable opt-in features for the service.</p>"
+        },
+        "membershipAccountsConfigurationsUpdate":{
+          "shape":"MembershipAccountsConfigurationsUpdate",
+          "documentation":"<p>The <code>membershipAccountsConfigurationsUpdate</code> field in the <code>UpdateMembershipRequest</code> structure allows you to update the configuration settings for accounts within a membership. </p> <p>This field is optional and contains a structure of type <code>MembershipAccountsConfigurationsUpdate </code> that specifies the updated account configurations for the membership. </p>"
+        },
+        "undoMembershipCancellation":{
+          "shape":"Boolean",
+          "documentation":"<p>The <code>undoMembershipCancellation</code> parameter is a boolean flag that indicates whether to reverse a previously requested membership cancellation. When set to true, this will revoke the cancellation request and maintain the membership status. </p> <p>This parameter is optional and can be used in scenarios where you need to restore a membership that was marked for cancellation but hasn't been fully terminated yet. </p> <ul> <li> <p>If set to <code>true</code>, the cancellation request will be revoked </p> </li> <li> <p>If set to <code>false</code> the service will throw a ValidationException. </p> </li> </ul>"
         }
       }
     },
     "UpdateMembershipResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResolverTypeRequest":{
       "type":"structure",
@@ -2253,14 +2387,17 @@
         "reason"
       ],
       "members":{
-        "message":{"shape":"String"},
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The exception message.</p>"
+        },
         "reason":{
           "shape":"ValidationExceptionReason",
-          "documentation":"<p>Element that provides the reason the request failed validation.</p>"
+          "documentation":"<p>The reason for the exception.</p>"
         },
         "fieldList":{
           "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>Element that provides the list of field(s) that caused the error, if applicable.</p>"
+          "documentation":"<p>The fields which lead to the exception.</p>"
         }
       },
       "documentation":"<p/>",
@@ -2327,5 +2464,5 @@
       "min":0
     }
   },
-  "documentation":"<p>This guide provides documents the action and response elements for customer use of the service.</p>"
+  "documentation":"<p>This guide documents the action and response elements for use of the service.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.json 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -101,6 +101,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "ConfigurationPolicyAssociationSummaries"
+    },
+    "DescribeProductsV2": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ProductsV2"
+    },
+    "GetFindingsV2": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Findings"
+    },
+    "GetResourcesV2": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Resources"
+    },
+    "ListAggregatorsV2": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "AggregatorsV2"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+{
+  "version": 1.0,
+  "merge": {
+    "pagination": {
+        "ListOrganizationAdminAccounts": {
+            "non_aggregate_keys": [
+                "Feature"
+            ]
+        }
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/service-2.json 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/securityhub/2018-10-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/securityhub/2018-10-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -167,7 +167,7 @@
         {"shape":"InvalidAccessException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p> For a batch of security controls and standards, identifies whether each control is currently enabled or disabled in a standard. </p>"
+      "documentation":"<p> For a batch of security controls and standards, identifies whether each control is currently enabled or disabled in a standard. </p> <p> Calls to this operation return a <code>RESOURCE_NOT_FOUND_EXCEPTION</code> error when the standard subscription for the association has a <code>NOT_READY_FOR_UPDATES</code> value for <code>StandardsControlsUpdatable</code>. </p>"
     },
     "BatchImportFindings":{
       "name":"BatchImportFindings",
@@ -216,7 +216,24 @@
         {"shape":"LimitExceededException"},
         {"shape":"InvalidAccessException"}
       ],
-      "documentation":"<p>Used by Security Hub customers to update information about their investigation into a finding. Requested by administrator accounts or member accounts. Administrator accounts can update findings for their account and their member accounts. Member accounts can update findings for their account.</p> <p>Updates from <code>BatchUpdateFindings</code> don't affect the value of <code>UpdatedAt</code> for a finding.</p> <p>Administrator and member accounts can use <code>BatchUpdateFindings</code> to update the following finding fields and objects.</p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul> <p>You can configure IAM policies to restrict access to fields and field values. For example, you might not want member accounts to be able to suppress findings or change the finding severity. See <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/finding-update-batchupdatefindings.html#batchupdatefindings-configure-access\">Configuring access to BatchUpdateFindings</a> in the <i>Security Hub User Guide</i>.</p>"
+      "documentation":"<p> Used by Security Hub customers to update information about their investigation into one or more findings. Requested by administrator accounts or member accounts. Administrator accounts can update findings for their account and their member accounts. A member account can update findings only for their own account. Administrator and member accounts can use this operation to update the following fields and objects for one or more findings: </p> <ul> <li> <p> <code>Confidence</code> </p> </li> <li> <p> <code>Criticality</code> </p> </li> <li> <p> <code>Note</code> </p> </li> <li> <p> <code>RelatedFindings</code> </p> </li> <li> <p> <code>Severity</code> </p> </li> <li> <p> <code>Types</code> </p> </li> <li> <p> <code>UserDefinedFields</code> </p> </li> <li> <p> <code>VerificationState</code> </p> </li> <li> <p> <code>Workflow</code> </p> </li> </ul> <p> If you use this operation to update a finding, your updates don’t affect the value for the <code>UpdatedAt</code> field of the finding. Also note that it can take several minutes for Security Hub to process your request and update each finding specified in the request. </p> <p> You can configure IAM policies to restrict access to fields and field values. For example, you might not want member accounts to be able to suppress findings or change the finding severity. For more information see <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/finding-update-batchupdatefindings.html#batchupdatefindings-configure-access\">Configuring access to BatchUpdateFindings</a> in the <i>Security Hub User Guide</i>. </p>"
+    },
+    "BatchUpdateFindingsV2":{
+      "name":"BatchUpdateFindingsV2",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/findingsv2/batchupdatev2"
+      },
+      "input":{"shape":"BatchUpdateFindingsV2Request"},
+      "output":{"shape":"BatchUpdateFindingsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Used by customers to update information about their investigation into a finding. Requested by delegated administrator accounts or member accounts. Delegated administrator accounts can update findings for their account and their member accounts. Member accounts can update findings for their account. <code>BatchUpdateFindings</code> and <code>BatchUpdateFindingV2</code> both use <code>securityhub:BatchUpdateFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>securityhub:BatchUpdateFindings</code> action. Updates from <code>BatchUpdateFindingsV2</code> don't affect the value of f<code>inding_info.modified_time</code>, <code>finding_info.modified_time_dt</code>, <code>time</code>, <code>time_dt for a finding</code>. This API is in public preview and subject to change.</p>"
     },
     "BatchUpdateStandardsControlAssociations":{
       "name":"BatchUpdateStandardsControlAssociations",
@@ -235,6 +252,24 @@
       ],
       "documentation":"<p> For a batch of security controls and standards, this operation updates the enablement status of a control in a standard. </p>"
     },
+    "ConnectorRegistrationsV2":{
+      "name":"ConnectorRegistrationsV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/connectorsv2/registrations"
+      },
+      "input":{"shape":"ConnectorRegistrationsV2Request"},
+      "output":{"shape":"ConnectorRegistrationsV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to complete the authorization based on input parameters. This API is in preview release and subject to change.</p>"
+    },
     "CreateActionTarget":{
       "name":"CreateActionTarget",
       "http":{
@@ -252,6 +287,24 @@
       ],
       "documentation":"<p>Creates a custom action target in Security Hub.</p> <p>You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.</p>"
     },
+    "CreateAggregatorV2":{
+      "name":"CreateAggregatorV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/aggregatorv2/create"
+      },
+      "input":{"shape":"CreateAggregatorV2Request"},
+      "output":{"shape":"CreateAggregatorV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables aggregation across Amazon Web Services Regions. This API is in public preview and subject to change.</p>"
+    },
     "CreateAutomationRule":{
       "name":"CreateAutomationRule",
       "http":{
@@ -269,6 +322,23 @@
       ],
       "documentation":"<p> Creates an automation rule based on input parameters. </p>"
     },
+    "CreateAutomationRuleV2":{
+      "name":"CreateAutomationRuleV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/automationrulesv2/create"
+      },
+      "input":{"shape":"CreateAutomationRuleV2Request"},
+      "output":{"shape":"CreateAutomationRuleV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates a V2 automation rule. This API is in public preview and subject to change.</p>"
+    },
     "CreateConfigurationPolicy":{
       "name":"CreateConfigurationPolicy",
       "http":{
@@ -287,6 +357,24 @@
       ],
       "documentation":"<p> Creates a configuration policy with the defined configuration. Only the Security Hub delegated administrator can invoke this operation from the home Region. </p>"
     },
+    "CreateConnectorV2":{
+      "name":"CreateConnectorV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/connectorsv2"
+      },
+      "input":{"shape":"CreateConnectorV2Request"},
+      "output":{"shape":"CreateConnectorV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to create a connectorV2 based on input parameters. This API is in preview release and subject to change.</p>"
+    },
     "CreateFindingAggregator":{
       "name":"CreateFindingAggregator",
       "http":{
@@ -339,6 +427,24 @@
       ],
       "documentation":"<p>Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the administrator account. If you are integrated with Organizations, then the administrator account is designated by the organization management account.</p> <p> <code>CreateMembers</code> is always used to add accounts that are not organization members.</p> <p>For accounts that are managed using Organizations, <code>CreateMembers</code> is only used in the following cases:</p> <ul> <li> <p>Security Hub is not configured to automatically add new organization accounts.</p> </li> <li> <p>The account was disassociated or deleted in Security Hub.</p> </li> </ul> <p>This action can only be used by an account that has Security Hub enabled. To enable Security Hub, you can use the <code>EnableSecurityHub</code> operation.</p> <p>For accounts that are not organization members, you create the account association and then send an invitation to the member account. To send the invitation, you use the <code>InviteMembers</code> operation. If the account owner accepts the invitation, the account becomes a member account in Security Hub.</p> <p>Accounts that are managed using Organizations don't receive an invitation. They automatically become a member account in Security Hub.</p> <ul> <li> <p>If the organization account does not have Security Hub enabled, then Security Hub and the default standards are automatically enabled. Note that Security Hub cannot be enabled automatically for the organization management account. The organization management account must enable Security Hub before the administrator account enables it as a member account.</p> </li> <li> <p>For organization accounts that already have Security Hub enabled, Security Hub does not make any other changes to those accounts. It does not change their enabled standards or controls.</p> </li> </ul> <p>A permissions policy is added that permits the administrator account to view the findings generated in the member account.</p> <p>To remove the association between the administrator and member accounts, use the <code>DisassociateFromMasterAccount</code> or <code>DisassociateMembers</code> operation.</p>"
     },
+    "CreateTicketV2":{
+      "name":"CreateTicketV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/ticketsv2"
+      },
+      "input":{"shape":"CreateTicketV2Request"},
+      "output":{"shape":"CreateTicketV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to create a ticket in the chosen ITSM based on finding information for the provided finding metadata UID. This API is in preview release and subject to change.</p>"
+    },
     "DeclineInvitations":{
       "name":"DeclineInvitations",
       "http":{
@@ -371,6 +477,42 @@
       ],
       "documentation":"<p>Deletes a custom action target from Security Hub.</p> <p>Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.</p>"
     },
+    "DeleteAggregatorV2":{
+      "name":"DeleteAggregatorV2",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/aggregatorv2/delete/{AggregatorV2Arn+}"
+      },
+      "input":{"shape":"DeleteAggregatorV2Request"},
+      "output":{"shape":"DeleteAggregatorV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes the Aggregator V2. This API is in public preview and subject to change.</p>"
+    },
+    "DeleteAutomationRuleV2":{
+      "name":"DeleteAutomationRuleV2",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/automationrulesv2/{Identifier}"
+      },
+      "input":{"shape":"DeleteAutomationRuleV2Request"},
+      "output":{"shape":"DeleteAutomationRuleV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes a V2 automation rule. This API is in public preview and subject to change.</p>"
+    },
     "DeleteConfigurationPolicy":{
       "name":"DeleteConfigurationPolicy",
       "http":{
@@ -390,6 +532,24 @@
       ],
       "documentation":"<p> Deletes a configuration policy. Only the Security Hub delegated administrator can invoke this operation from the home Region. For the deletion to succeed, you must first disassociate a configuration policy from target accounts, organizational units, or the root by invoking the <code>StartConfigurationPolicyDisassociation</code> operation. </p>"
     },
+    "DeleteConnectorV2":{
+      "name":"DeleteConnectorV2",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/connectorsv2/{ConnectorId+}"
+      },
+      "input":{"shape":"DeleteConnectorV2Request"},
+      "output":{"shape":"DeleteConnectorV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to delete a connectorV2. This API is in preview release and subject to change.</p>"
+    },
     "DeleteFindingAggregator":{
       "name":"DeleteFindingAggregator",
       "http":{
@@ -524,6 +684,39 @@
       ],
       "documentation":"<p>Returns information about product integrations in Security Hub.</p> <p>You can optionally provide an integration ARN. If you provide an integration ARN, then the results only include that integration.</p> <p>If you don't provide an integration ARN, then the results include all of the available product integrations. </p>"
     },
+    "DescribeProductsV2":{
+      "name":"DescribeProductsV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/productsV2"
+      },
+      "input":{"shape":"DescribeProductsV2Request"},
+      "output":{"shape":"DescribeProductsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Gets information about the product integration. This API is in public preview and subject to change.</p>"
+    },
+    "DescribeSecurityHubV2":{
+      "name":"DescribeSecurityHubV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/hubv2"
+      },
+      "input":{"shape":"DescribeSecurityHubV2Request"},
+      "output":{"shape":"DescribeSecurityHubV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Returns details about the service resource in your account. This API is in public preview and subject to change.</p>"
+    },
     "DescribeStandards":{
       "name":"DescribeStandards",
       "http":{
@@ -553,7 +746,7 @@
         {"shape":"InvalidAccessException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p>Returns a list of security standards controls.</p> <p>For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information.</p>"
+      "documentation":"<p>Returns a list of security standards controls.</p> <p>For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information.</p> <p>This operation returns an empty list for standard subscriptions where <code>StandardsControlsUpdatable</code> has value <code>NOT_READY_FOR_UPDATES</code>.</p>"
     },
     "DisableImportFindingsForProduct":{
       "name":"DisableImportFindingsForProduct",
@@ -606,6 +799,22 @@
       ],
       "documentation":"<p>Disables Security Hub in your account only in the current Amazon Web Services Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub.</p> <p>You can't disable Security Hub in an account that is currently the Security Hub administrator.</p> <p>When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your administrator and member account associations are removed.</p> <p>If you want to save your existing findings, you must export them before you disable Security Hub.</p>"
     },
+    "DisableSecurityHubV2":{
+      "name":"DisableSecurityHubV2",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/hubv2"
+      },
+      "input":{"shape":"DisableSecurityHubV2Request"},
+      "output":{"shape":"DisableSecurityHubV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Disable the service for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in public preview and subject to change.</p>"
+    },
     "DisassociateFromAdministratorAccount":{
       "name":"DisassociateFromAdministratorAccount",
       "http":{
@@ -711,6 +920,22 @@
       ],
       "documentation":"<p>Enables Security Hub for your account in the current Region or the Region you specify in the request.</p> <p>When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub.</p> <p>When you use the <code>EnableSecurityHub</code> operation to enable Security Hub, you also automatically enable the following standards:</p> <ul> <li> <p>Center for Internet Security (CIS) Amazon Web Services Foundations Benchmark v1.2.0</p> </li> <li> <p>Amazon Web Services Foundational Security Best Practices</p> </li> </ul> <p>Other standards are not automatically enabled. </p> <p>To opt out of automatically enabled standards, set <code>EnableDefaultStandards</code> to <code>false</code>.</p> <p>After you enable Security Hub, to enable a standard, use the <code>BatchEnableStandards</code> operation. To disable a standard, use the <code>BatchDisableStandards</code> operation.</p> <p>To learn more, see the <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html\">setup information</a> in the <i>Security Hub User Guide</i>.</p>"
     },
+    "EnableSecurityHubV2":{
+      "name":"EnableSecurityHubV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/hubv2"
+      },
+      "input":{"shape":"EnableSecurityHubV2Request"},
+      "output":{"shape":"EnableSecurityHubV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Enables the service in account for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in public preview and subject to change.</p>"
+    },
     "GetAdministratorAccount":{
       "name":"GetAdministratorAccount",
       "http":{
@@ -728,6 +953,42 @@
       ],
       "documentation":"<p>Provides the details for the Security Hub administrator account for the current member account.</p> <p>Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.</p>"
     },
+    "GetAggregatorV2":{
+      "name":"GetAggregatorV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/aggregatorv2/get/{AggregatorV2Arn+}"
+      },
+      "input":{"shape":"GetAggregatorV2Request"},
+      "output":{"shape":"GetAggregatorV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns the configuration of the specified Aggregator V2. This API is in public preview and subject to change.</p>"
+    },
+    "GetAutomationRuleV2":{
+      "name":"GetAutomationRuleV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automationrulesv2/{Identifier}"
+      },
+      "input":{"shape":"GetAutomationRuleV2Request"},
+      "output":{"shape":"GetAutomationRuleV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns an automation rule for the V2 service. This API is in public preview and subject to change.</p>"
+    },
     "GetConfigurationPolicy":{
       "name":"GetConfigurationPolicy",
       "http":{
@@ -764,6 +1025,24 @@
       ],
       "documentation":"<p> Returns the association between a configuration and a target account, organizational unit, or the root. The configuration can be a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region. </p>"
     },
+    "GetConnectorV2":{
+      "name":"GetConnectorV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/connectorsv2/{ConnectorId+}"
+      },
+      "input":{"shape":"GetConnectorV2Request"},
+      "output":{"shape":"GetConnectorV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to retrieve details for a connectorV2 based on connector id. This API is in preview release and subject to change.</p>"
+    },
     "GetEnabledStandards":{
       "name":"GetEnabledStandards",
       "http":{
@@ -812,7 +1091,24 @@
         {"shape":"InvalidAccessException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p> Returns history for a Security Hub finding in the last 90 days. The history includes changes made to any fields in the Amazon Web Services Security Finding Format (ASFF). </p>"
+      "documentation":"<p> Returns the history of a Security Hub finding. The history includes changes made to any fields in the Amazon Web Services Security Finding Format (ASFF) except top-level timestamp fields, such as the <code>CreatedAt</code> and <code>UpdatedAt</code> fields. </p> <p>This operation might return fewer results than the maximum number of results (<code>MaxResults</code>) specified in a request, even when more results are available. If this occurs, the response includes a <code>NextToken</code> value, which you should use to retrieve the next set of results in the response. The presence of a <code>NextToken</code> value in a response doesn't necessarily indicate that the results are incomplete. However, you should continue to specify a <code>NextToken</code> value until you receive a response that doesn't include this value.</p>"
+    },
+    "GetFindingStatisticsV2":{
+      "name":"GetFindingStatisticsV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/findingsv2/statistics"
+      },
+      "input":{"shape":"GetFindingStatisticsV2Request"},
+      "output":{"shape":"GetFindingStatisticsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns aggregated statistical data about findings. <code>GetFindingStatisticsV2</code> use <code>securityhub:GetAdhocInsightResults</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>s</code> action. This API is in public preview and subject to change.</p>"
     },
     "GetFindings":{
       "name":"GetFindings",
@@ -830,6 +1126,23 @@
       ],
       "documentation":"<p>Returns a list of findings that match the specified criteria.</p> <p>If cross-Region aggregation is enabled, then when you call <code>GetFindings</code> from the home Region, the results include all of the matching findings from both the home Region and linked Regions.</p>"
     },
+    "GetFindingsV2":{
+      "name":"GetFindingsV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/findingsv2"
+      },
+      "input":{"shape":"GetFindingsV2Request"},
+      "output":{"shape":"GetFindingsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Return a list of findings that match the specified criteria. <code>GetFindings</code> and <code>GetFindingsV2</code> both use <code>securityhub:GetFindings</code> in the <code>Action</code> element of an IAM policy statement. You must have permission to perform the <code>securityhub:GetFindings</code> action. This API is in public preview and subject to change.</p>"
+    },
     "GetInsightResults":{
       "name":"GetInsightResults",
       "http":{
@@ -916,6 +1229,42 @@
       ],
       "documentation":"<p>Returns the details for the Security Hub member accounts for the specified account IDs.</p> <p>An administrator account can be either the delegated Security Hub administrator account for an organization or an administrator account that enabled Security Hub manually.</p> <p>The results include both member accounts that are managed using Organizations and accounts that were invited manually.</p>"
     },
+    "GetResourcesStatisticsV2":{
+      "name":"GetResourcesStatisticsV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/resourcesv2/statistics"
+      },
+      "input":{"shape":"GetResourcesStatisticsV2Request"},
+      "output":{"shape":"GetResourcesStatisticsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves statistical information about Amazon Web Services resources and their associated security findings. This API is in public preview and subject to change.</p>"
+    },
+    "GetResourcesV2":{
+      "name":"GetResourcesV2",
+      "http":{
+        "method":"POST",
+        "requestUri":"/resourcesv2"
+      },
+      "input":{"shape":"GetResourcesV2Request"},
+      "output":{"shape":"GetResourcesV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Returns a list of resources. This API is in public preview and subject to change.</p>"
+    },
     "GetSecurityControlDefinition":{
       "name":"GetSecurityControlDefinition",
       "http":{
@@ -950,6 +1299,24 @@
       ],
       "documentation":"<note> <p>We recommend using Organizations instead of Security Hub invitations to manage your member accounts. For information, see <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-accounts-orgs.html\">Managing Security Hub administrator and member accounts with Organizations</a> in the <i>Security Hub User Guide</i>.</p> </note> <p>Invites other Amazon Web Services accounts to become member accounts for the Security Hub administrator account that the invitation is sent from.</p> <p>This operation is only used to invite accounts that don't belong to an Amazon Web Services organization. Organization accounts don't receive invitations.</p> <p>Before you can use this action to invite a member, you must first use the <code>CreateMembers</code> action to create the member account in Security Hub.</p> <p>When the account owner enables Security Hub and accepts the invitation to become a member account, the administrator account can view the findings generated in the member account.</p>"
     },
+    "ListAggregatorsV2":{
+      "name":"ListAggregatorsV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/aggregatorv2/list"
+      },
+      "input":{"shape":"ListAggregatorsV2Request"},
+      "output":{"shape":"ListAggregatorsV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Retrieves a list of V2 aggregators. This API is in public preview and subject to change.</p>"
+    },
     "ListAutomationRules":{
       "name":"ListAutomationRules",
       "http":{
@@ -967,6 +1334,23 @@
       ],
       "documentation":"<p> A list of automation rules and their metadata for the calling account. </p>"
     },
+    "ListAutomationRulesV2":{
+      "name":"ListAutomationRulesV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/automationrulesv2/list"
+      },
+      "input":{"shape":"ListAutomationRulesV2Request"},
+      "output":{"shape":"ListAutomationRulesV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Returns a list of automation rules and metadata for the calling account. This API is in public preview and subject to change.</p>"
+    },
     "ListConfigurationPolicies":{
       "name":"ListConfigurationPolicies",
       "http":{
@@ -1002,6 +1386,24 @@
       ],
       "documentation":"<p> Provides information about the associations for your configuration policies and self-managed behavior. Only the Security Hub delegated administrator can invoke this operation from the home Region. </p>"
     },
+    "ListConnectorsV2":{
+      "name":"ListConnectorsV2",
+      "http":{
+        "method":"GET",
+        "requestUri":"/connectorsv2"
+      },
+      "input":{"shape":"ListConnectorsV2Request"},
+      "output":{"shape":"ListConnectorsV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to retrieve a list of connectorsV2 and their metadata for the calling account. This API is in preview release and subject to change.</p>"
+    },
     "ListEnabledProductsForImport":{
       "name":"ListEnabledProductsForImport",
       "http":{
@@ -1112,7 +1514,7 @@
         {"shape":"InvalidAccessException"},
         {"shape":"InvalidInputException"}
       ],
-      "documentation":"<p> Specifies whether a control is currently enabled or disabled in each enabled standard in the calling account. </p>"
+      "documentation":"<p> Specifies whether a control is currently enabled or disabled in each enabled standard in the calling account. </p> <p>This operation omits standards control associations for standard subscriptions where <code>StandardsControlsUpdatable</code> has value <code>NOT_READY_FOR_UPDATES</code>.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1212,6 +1614,42 @@
       ],
       "documentation":"<p>Updates the name and description of a custom action target in Security Hub.</p>"
     },
+    "UpdateAggregatorV2":{
+      "name":"UpdateAggregatorV2",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/aggregatorv2/update/{AggregatorV2Arn+}"
+      },
+      "input":{"shape":"UpdateAggregatorV2Request"},
+      "output":{"shape":"UpdateAggregatorV2Response"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Udpates the configuration for the Aggregator V2. This API is in public preview and subject to change.</p>"
+    },
+    "UpdateAutomationRuleV2":{
+      "name":"UpdateAutomationRuleV2",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/automationrulesv2/{Identifier}"
+      },
+      "input":{"shape":"UpdateAutomationRuleV2Request"},
+      "output":{"shape":"UpdateAutomationRuleV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates a V2 automation rule. This API is in public preview and subject to change.</p>"
+    },
     "UpdateConfigurationPolicy":{
       "name":"UpdateConfigurationPolicy",
       "http":{
@@ -1231,6 +1669,24 @@
       ],
       "documentation":"<p> Updates a configuration policy. Only the Security Hub delegated administrator can invoke this operation from the home Region. </p>"
     },
+    "UpdateConnectorV2":{
+      "name":"UpdateConnectorV2",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/connectorsv2/{ConnectorId+}"
+      },
+      "input":{"shape":"UpdateConnectorV2Request"},
+      "output":{"shape":"UpdateConnectorV2Response"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Grants permission to update a connectorV2 based on its id and input parameters. This API is in preview release and subject to change.</p>"
+    },
     "UpdateFindingAggregator":{
       "name":"UpdateFindingAggregator",
       "http":{
@@ -1356,7 +1812,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Used to control whether an individual security standard control is enabled or disabled.</p>"
+      "documentation":"<p>Used to control whether an individual security standard control is enabled or disabled.</p> <p>Calls to this operation return a <code>RESOURCE_NOT_FOUND_EXCEPTION</code> error when the standard subscription for the control has <code>StandardsControlsUpdatable</code> value <code>NOT_READY_FOR_UPDATES</code>.</p>"
     }
   },
   "shapes":{
@@ -1379,8 +1835,7 @@
     },
     "AcceptAdministratorInvitationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AcceptInvitationRequest":{
       "type":"structure",
@@ -1401,8 +1856,7 @@
     },
     "AcceptInvitationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AccessDeniedException":{
       "type":"structure",
@@ -1690,6 +2144,27 @@
       "max":10,
       "min":1
     },
+    "AggregatorV2":{
+      "type":"structure",
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the aggregatorV2.</p>"
+        }
+      },
+      "documentation":"<p>Specifies a cross-Region data aggregation configuration, including the aggregation Region and any linked Regions.</p>"
+    },
+    "AggregatorV2List":{
+      "type":"list",
+      "member":{"shape":"AggregatorV2"}
+    },
+    "AllowedOperators":{
+      "type":"string",
+      "enum":[
+        "AND",
+        "OR"
+      ]
+    },
     "AlphaNumericNonEmptyString":{
       "type":"string",
       "pattern":"^([^\\u0000-\\u007F]|[-_ a-zA-Z0-9])+$"
@@ -1813,10 +2288,56 @@
       },
       "documentation":"<p> One or more actions that Security Hub takes when a finding matches the defined criteria of a rule. </p>"
     },
+    "AutomationRulesActionListV2":{
+      "type":"list",
+      "member":{"shape":"AutomationRulesActionV2"},
+      "max":1,
+      "min":1
+    },
     "AutomationRulesActionType":{
       "type":"string",
       "enum":["FINDING_FIELDS_UPDATE"]
     },
+    "AutomationRulesActionTypeListV2":{
+      "type":"list",
+      "member":{"shape":"AutomationRulesActionTypeObjectV2"}
+    },
+    "AutomationRulesActionTypeObjectV2":{
+      "type":"structure",
+      "members":{
+        "Type":{
+          "shape":"AutomationRulesActionTypeV2",
+          "documentation":"<p>The category of action to be executed by the automation rule.</p>"
+        }
+      },
+      "documentation":"<p>Allows you to customize security response workflows.</p>"
+    },
+    "AutomationRulesActionTypeV2":{
+      "type":"string",
+      "enum":[
+        "FINDING_FIELDS_UPDATE",
+        "EXTERNAL_INTEGRATION"
+      ]
+    },
+    "AutomationRulesActionV2":{
+      "type":"structure",
+      "required":["Type"],
+      "members":{
+        "Type":{
+          "shape":"AutomationRulesActionTypeV2",
+          "documentation":"<p>The category of action to be executed by the automation rule.</p>"
+        },
+        "FindingFieldsUpdate":{
+          "shape":"AutomationRulesFindingFieldsUpdateV2",
+          "documentation":"<p>The changes to be applied to fields in a security finding when an automation rule is triggered.</p>"
+        },
+        "ExternalIntegrationConfiguration":{
+          "shape":"ExternalIntegrationConfiguration",
+          "documentation":"<p>The settings for integrating automation rule actions with external systems or service.</p>"
+        }
+      },
+      "documentation":"<p>Allows you to configure automated responses.</p>"
+    },
     "AutomationRulesArnsList":{
       "type":"list",
       "member":{"shape":"NonEmptyString"},
@@ -1910,6 +2431,24 @@
       },
       "documentation":"<p> Identifies the finding fields that the automation rule action updates when a finding matches the defined criteria. </p>"
     },
+    "AutomationRulesFindingFieldsUpdateV2":{
+      "type":"structure",
+      "members":{
+        "SeverityId":{
+          "shape":"Integer",
+          "documentation":"<p>The severity level to be assigned to findings that match the automation rule criteria.</p>"
+        },
+        "Comment":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Notes or contextual information for findings that are modified by the automation rule.</p>"
+        },
+        "StatusId":{
+          "shape":"Integer",
+          "documentation":"<p>The status to be applied to findings that match automation rule criteria.</p>"
+        }
+      },
+      "documentation":"<p>Allows you to define the structure for modifying specific fields in security findings.</p>"
+    },
     "AutomationRulesFindingFilters":{
       "type":"structure",
       "members":{
@@ -2114,6 +2653,52 @@
       "type":"list",
       "member":{"shape":"AutomationRulesMetadata"}
     },
+    "AutomationRulesMetadataListV2":{
+      "type":"list",
+      "member":{"shape":"AutomationRulesMetadataV2"}
+    },
+    "AutomationRulesMetadataV2":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the automation rule.</p>"
+        },
+        "RuleId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the automation rule.</p>"
+        },
+        "RuleOrder":{
+          "shape":"RuleOrderValueV2",
+          "documentation":"<p>The value for the rule priority.</p>"
+        },
+        "RuleName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the automation rule.</p>"
+        },
+        "RuleStatus":{
+          "shape":"RuleStatusV2",
+          "documentation":"<p>The status of the automation rule.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>An explanation for the purpose and funcitonality of the automation rule.</p>"
+        },
+        "Actions":{
+          "shape":"AutomationRulesActionTypeListV2",
+          "documentation":"<p>The list of action to be performed when the rule criteria is met.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp for when the automation rule was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp for the most recent modification to the automation rule.</p>"
+        }
+      },
+      "documentation":"<p>Includes essential metadata information about automation rules.</p>"
+    },
     "AvailabilityZone":{
       "type":"structure",
       "members":{
@@ -15733,13 +16318,108 @@
       "type":"list",
       "member":{"shape":"BatchUpdateFindingsUnprocessedFinding"}
     },
+    "BatchUpdateFindingsV2ProcessedFinding":{
+      "type":"structure",
+      "members":{
+        "FindingIdentifier":{
+          "shape":"OcsfFindingIdentifier",
+          "documentation":"<p>The finding identifier of a processed finding.</p>"
+        },
+        "MetadataUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The metadata.uid of a processed finding.</p>"
+        }
+      },
+      "documentation":"<p>The list of findings that were updated.</p>"
+    },
+    "BatchUpdateFindingsV2ProcessedFindingsList":{
+      "type":"list",
+      "member":{"shape":"BatchUpdateFindingsV2ProcessedFinding"}
+    },
+    "BatchUpdateFindingsV2Request":{
+      "type":"structure",
+      "members":{
+        "MetadataUids":{
+          "shape":"MetadataUidList",
+          "documentation":"<p>The list of finding <code>metadata.uid</code> to indicate findings to update. Finding <code>metadata.uid</code> is a globally unique identifier associated with the finding. Customers cannot use <code>MetadataUids</code> together with <code>FindingIdentifiers</code>.</p>"
+        },
+        "FindingIdentifiers":{
+          "shape":"OcsfFindingIdentifierList",
+          "documentation":"<p>Provides information to identify a specific V2 finding.</p>"
+        },
+        "Comment":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The updated value for a user provided comment about the finding. Minimum character length 1. Maximum character length 512.</p>"
+        },
+        "SeverityId":{
+          "shape":"Integer",
+          "documentation":"<p>The updated value for the normalized severity identifier. The severity ID is an integer with the allowed enum values [0, 1, 2, 3, 4, 5, 99]. When customer provides the updated severity ID, the string sibling severity will automatically be updated in the finding.</p>"
+        },
+        "StatusId":{
+          "shape":"Integer",
+          "documentation":"<p>The updated value for the normalized status identifier. The status ID is an integer with the allowed enum values [0, 1, 2, 3, 4, 5, 6, 99]. When customer provides the updated status ID, the string sibling status will automatically be updated in the finding.</p>"
+        }
+      }
+    },
+    "BatchUpdateFindingsV2Response":{
+      "type":"structure",
+      "required":[
+        "ProcessedFindings",
+        "UnprocessedFindings"
+      ],
+      "members":{
+        "ProcessedFindings":{
+          "shape":"BatchUpdateFindingsV2ProcessedFindingsList",
+          "documentation":"<p>The list of findings that were updated successfully.</p>"
+        },
+        "UnprocessedFindings":{
+          "shape":"BatchUpdateFindingsV2UnprocessedFindingsList",
+          "documentation":"<p>The list of V2 findings that were not updated.</p>"
+        }
+      }
+    },
+    "BatchUpdateFindingsV2UnprocessedFinding":{
+      "type":"structure",
+      "members":{
+        "FindingIdentifier":{
+          "shape":"OcsfFindingIdentifier",
+          "documentation":"<p>The finding identifier of an unprocessed finding.</p>"
+        },
+        "MetadataUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The metadata.uid of an unprocessed finding.</p>"
+        },
+        "ErrorCode":{
+          "shape":"BatchUpdateFindingsV2UnprocessedFindingErrorCode",
+          "documentation":"<p>Indicates the specific type of error preventing successful processing of a finding during a batch update operation.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A detailed description of why a finding could not be processed during a batch update operation.</p>"
+        }
+      },
+      "documentation":"<p>The list of findings that were not updated.</p>"
+    },
+    "BatchUpdateFindingsV2UnprocessedFindingErrorCode":{
+      "type":"string",
+      "enum":[
+        "ResourceNotFoundException",
+        "ValidationException",
+        "InternalServerException",
+        "ConflictException"
+      ]
+    },
+    "BatchUpdateFindingsV2UnprocessedFindingsList":{
+      "type":"list",
+      "member":{"shape":"BatchUpdateFindingsV2UnprocessedFinding"}
+    },
     "BatchUpdateStandardsControlAssociationsRequest":{
       "type":"structure",
       "required":["StandardsControlAssociationUpdates"],
       "members":{
         "StandardsControlAssociationUpdates":{
           "shape":"StandardsControlAssociationUpdates",
-          "documentation":"<p> Updates the enablement status of a security control in a specified standard. </p>"
+          "documentation":"<p> Updates the enablement status of a security control in a specified standard. </p> <p> Calls to this operation return a <code>RESOURCE_NOT_FOUND_EXCEPTION</code> error when the standard subscription for the control has <code>StandardsControlsUpdatable</code> value <code>NOT_READY_FOR_UPDATES</code>. </p>"
         }
       }
     },
@@ -15883,6 +16563,12 @@
       },
       "documentation":"<p>Provides details about the current status of the sensitive data detection.</p>"
     },
+    "ClientToken":{
+      "type":"string",
+      "max":63,
+      "min":1,
+      "pattern":"^[\\x21-\\x7E]{1,64}$"
+    },
     "CloudWatchLogsLogGroupArnConfigDetails":{
       "type":"structure",
       "members":{
@@ -15901,6 +16587,24 @@
       },
       "documentation":"<p> The Amazon Resource Name (ARN) and other details of the Amazon CloudWatch Logs log group that Amazon Route 53 is publishing logs to.</p>"
     },
+    "CodeRepositoryDetails":{
+      "type":"structure",
+      "members":{
+        "ProviderType":{
+          "shape":"NonEmptyString",
+          "documentation":"<p> The type of repository provider. </p>"
+        },
+        "ProjectName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p> The name of the project in the code repository. </p>"
+        },
+        "CodeSecurityIntegrationArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the code security integration associated with the repository. </p>"
+        }
+      },
+      "documentation":"<p> Details about an external code repository with which you can connect your Amazon Web Services resources. The connection is established through Amazon Inspector. </p>"
+    },
     "CodeVulnerabilitiesFilePath":{
       "type":"structure",
       "members":{
@@ -15962,6 +16666,48 @@
         "NOT_AVAILABLE"
       ]
     },
+    "CompositeFilter":{
+      "type":"structure",
+      "members":{
+        "StringFilters":{
+          "shape":"OcsfStringFilterList",
+          "documentation":"<p>Enables filtering based on string field values.</p>"
+        },
+        "DateFilters":{
+          "shape":"OcsfDateFilterList",
+          "documentation":"<p>Enables filtering based on date and timestamp fields.</p>"
+        },
+        "BooleanFilters":{
+          "shape":"OcsfBooleanFilterList",
+          "documentation":"<p>Enables filtering based on boolean field values.</p>"
+        },
+        "NumberFilters":{
+          "shape":"OcsfNumberFilterList",
+          "documentation":"<p>Enables filtering based on numerical field values.</p>"
+        },
+        "MapFilters":{
+          "shape":"OcsfMapFilterList",
+          "documentation":"<p>Enables filtering based on map field values.</p>"
+        },
+        "IpFilters":{
+          "shape":"OcsfIpFilterList",
+          "documentation":"<p>A list of IP address filters that allowing you to filter findings based on IP address properties.</p>"
+        },
+        "NestedCompositeFilters":{
+          "shape":"CompositeFilterList",
+          "documentation":"<p> Provides an additional level of filtering, creating a three-layer nested structure. The first layer is a <code>CompositeFilters</code> array with a <code>CompositeOperator</code> (<code>AND</code>/<code>OR</code>). The second layer is a <code>CompositeFilter</code> object that contains direct filters and <code>NestedCompositeFilters</code>. The third layer is <code>NestedCompositeFilters</code>, which contains additional filter conditions. </p>"
+        },
+        "Operator":{
+          "shape":"AllowedOperators",
+          "documentation":"<p>The logical operator used to combine multiple filter conditions.</p>"
+        }
+      },
+      "documentation":"<p>Enables the creation of filtering criteria for security findings.</p>"
+    },
+    "CompositeFilterList":{
+      "type":"list",
+      "member":{"shape":"CompositeFilter"}
+    },
     "ConfigurationOptions":{
       "type":"structure",
       "members":{
@@ -16099,6 +16845,16 @@
       "type":"list",
       "member":{"shape":"ConfigurationPolicySummary"}
     },
+    "ConflictException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"NonEmptyString"},
+        "Code":{"shape":"NonEmptyString"}
+      },
+      "documentation":"<p>The request causes conflict with the current state of the service resource.</p>",
+      "error":{"httpStatusCode":409},
+      "exception":true
+    },
     "ConnectionDirection":{
       "type":"string",
       "enum":[
@@ -16106,6 +16862,100 @@
         "OUTBOUND"
       ]
     },
+    "ConnectorAuthStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "FAILED"
+      ]
+    },
+    "ConnectorProviderName":{
+      "type":"string",
+      "enum":[
+        "JIRA_CLOUD",
+        "SERVICENOW"
+      ]
+    },
+    "ConnectorRegistrationsV2Request":{
+      "type":"structure",
+      "required":[
+        "AuthCode",
+        "AuthState"
+      ],
+      "members":{
+        "AuthCode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The authCode retrieved from authUrl to complete the OAuth 2.0 authorization code flow.</p>"
+        },
+        "AuthState":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The authState retrieved from authUrl to complete the OAuth 2.0 authorization code flow.</p>"
+        }
+      }
+    },
+    "ConnectorRegistrationsV2Response":{
+      "type":"structure",
+      "required":["ConnectorId"],
+      "members":{
+        "ConnectorArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connectorV2.</p>"
+        },
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>"
+        }
+      }
+    },
+    "ConnectorStatus":{
+      "type":"string",
+      "enum":[
+        "CONNECTED",
+        "FAILED_TO_CONNECT",
+        "PENDING_CONFIGURATION",
+        "PENDING_AUTHORIZATION"
+      ]
+    },
+    "ConnectorSummary":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "Name",
+        "ProviderSummary",
+        "CreatedAt"
+      ],
+      "members":{
+        "ConnectorArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connectorV2.</p>"
+        },
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>"
+        },
+        "Name":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Name field contains the user-defined name assigned to the integration connector. This helps identify and manage multiple connectors within Security Hub.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The description of the connectorV2.</p>"
+        },
+        "ProviderSummary":{
+          "shape":"ProviderSummary",
+          "documentation":"<p>The connectorV2 third party provider configuration summary.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>ISO 8601 UTC timestamp for the time create the connectorV2.</p>"
+        }
+      },
+      "documentation":"<p>A condensed overview of the connectorV2..</p>"
+    },
+    "ConnectorSummaryList":{
+      "type":"list",
+      "member":{"shape":"ConnectorSummary"}
+    },
     "ContainerDetails":{
       "type":"structure",
       "members":{
@@ -16200,6 +17050,50 @@
         }
       }
     },
+    "CreateAggregatorV2Request":{
+      "type":"structure",
+      "required":["RegionLinkingMode"],
+      "members":{
+        "RegionLinkingMode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Determines how Regions are linked to an Aggregator V2.</p>"
+        },
+        "LinkedRegions":{
+          "shape":"StringList",
+          "documentation":"<p>The list of Regions that are linked to the aggregation Region.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>A list of key-value pairs to be applied to the AggregatorV2.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique identifier used to ensure idempotency.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateAggregatorV2Response":{
+      "type":"structure",
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the AggregatorV2.</p>"
+        },
+        "AggregationRegion":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services Region where data is aggregated.</p>"
+        },
+        "RegionLinkingMode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Determines how Regions are linked to an Aggregator V2.</p>"
+        },
+        "LinkedRegions":{
+          "shape":"StringList",
+          "documentation":"<p>The list of Regions that are linked to the aggregation Region.</p>"
+        }
+      }
+    },
     "CreateAutomationRuleRequest":{
       "type":"structure",
       "required":[
@@ -16253,6 +17147,64 @@
         }
       }
     },
+    "CreateAutomationRuleV2Request":{
+      "type":"structure",
+      "required":[
+        "RuleName",
+        "Description",
+        "RuleOrder",
+        "Criteria",
+        "Actions"
+      ],
+      "members":{
+        "RuleName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the V2 automation rule.</p>"
+        },
+        "RuleStatus":{
+          "shape":"RuleStatusV2",
+          "documentation":"<p>The status of the V2 automation rule.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A description of the V2 automation rule.</p>"
+        },
+        "RuleOrder":{
+          "shape":"RuleOrderValueV2",
+          "documentation":"<p>The value for the rule priority.</p>"
+        },
+        "Criteria":{
+          "shape":"Criteria",
+          "documentation":"<p>The filtering type and configuration of the automation rule.</p>"
+        },
+        "Actions":{
+          "shape":"AutomationRulesActionListV2",
+          "documentation":"<p>A list of actions to be performed when the rule criteria is met.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>A list of key-value pairs associated with the V2 automation rule.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique identifier used to ensure idempotency.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateAutomationRuleV2Response":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the V2 automation rule.</p>"
+        },
+        "RuleId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the V2 automation rule.</p>"
+        }
+      }
+    },
     "CreateConfigurationPolicyRequest":{
       "type":"structure",
       "required":[
@@ -16311,6 +17263,58 @@
         }
       }
     },
+    "CreateConnectorV2Request":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Provider"
+      ],
+      "members":{
+        "Name":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The unique name of the connectorV2.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The description of the connectorV2.</p>"
+        },
+        "Provider":{
+          "shape":"ProviderConfiguration",
+          "documentation":"<p>The third-party provider’s service configuration.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of KMS key used to encrypt secrets for the connectorV2.</p>"
+        },
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to add to the connectorV2 when you create.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique identifier used to ensure idempotency.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateConnectorV2Response":{
+      "type":"structure",
+      "required":["ConnectorId"],
+      "members":{
+        "ConnectorArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connectorV2.</p>"
+        },
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>"
+        },
+        "AuthUrl":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Url provide to customers for OAuth auth code flow.</p>"
+        }
+      }
+    },
     "CreateFindingAggregatorRequest":{
       "type":"structure",
       "required":["RegionLinkingMode"],
@@ -16397,6 +17401,53 @@
         }
       }
     },
+    "CreateTicketV2Request":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "FindingMetadataUid"
+      ],
+      "members":{
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>"
+        },
+        "FindingMetadataUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The the unique ID for the finding.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>The client idempotency token.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateTicketV2Response":{
+      "type":"structure",
+      "required":["TicketId"],
+      "members":{
+        "TicketId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID for the ticketv2.</p>"
+        },
+        "TicketSrcUrl":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The url to the created ticket.</p>"
+        }
+      }
+    },
+    "Criteria":{
+      "type":"structure",
+      "members":{
+        "OcsfFindingCriteria":{
+          "shape":"OcsfFindingFilters",
+          "documentation":"<p>The filtering conditions that align with OCSF standards.</p>"
+        }
+      },
+      "documentation":"<p>Defines the parameters and conditions used to evaluate and filter security findings.</p>",
+      "union":true
+    },
     "CrossAccountMaxResults":{
       "type":"integer",
       "max":50,
@@ -16571,6 +17622,38 @@
         }
       }
     },
+    "DeleteAggregatorV2Request":{
+      "type":"structure",
+      "required":["AggregatorV2Arn"],
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the Aggregator V2.</p>",
+          "location":"uri",
+          "locationName":"AggregatorV2Arn"
+        }
+      }
+    },
+    "DeleteAggregatorV2Response":{
+      "type":"structure",
+      "members":{}
+    },
+    "DeleteAutomationRuleV2Request":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the V2 automation rule.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "DeleteAutomationRuleV2Response":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteConfigurationPolicyRequest":{
       "type":"structure",
       "required":["Identifier"],
@@ -16585,9 +17668,24 @@
     },
     "DeleteConfigurationPolicyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteConnectorV2Request":{
+      "type":"structure",
+      "required":["ConnectorId"],
       "members":{
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>",
+          "location":"uri",
+          "locationName":"ConnectorId"
+        }
       }
     },
+    "DeleteConnectorV2Response":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteFindingAggregatorRequest":{
       "type":"structure",
       "required":["FindingAggregatorArn"],
@@ -16602,8 +17700,7 @@
     },
     "DeleteFindingAggregatorResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInsightRequest":{
       "type":"structure",
@@ -16730,8 +17827,7 @@
     },
     "DescribeOrganizationConfigurationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeOrganizationConfigurationResponse":{
       "type":"structure",
@@ -16788,6 +17884,54 @@
         }
       }
     },
+    "DescribeProductsV2Request":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token required for pagination. On your first call, set the value of this parameter to <code>NULL</code>. For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "DescribeProductsV2Response":{
+      "type":"structure",
+      "required":["ProductsV2"],
+      "members":{
+        "ProductsV2":{
+          "shape":"ProductsV2List",
+          "documentation":"<p>Gets information about the product integration.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        }
+      }
+    },
+    "DescribeSecurityHubV2Request":{
+      "type":"structure",
+      "members":{}
+    },
+    "DescribeSecurityHubV2Response":{
+      "type":"structure",
+      "members":{
+        "HubV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the service resource.</p>"
+        },
+        "SubscribedAt":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The date and time when the service was enabled in the account.</p>"
+        }
+      }
+    },
     "DescribeStandardsControlsRequest":{
       "type":"structure",
       "required":["StandardsSubscriptionArn"],
@@ -16879,8 +18023,7 @@
     },
     "DisableImportFindingsForProductResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableOrganizationAdminAccountRequest":{
       "type":"structure",
@@ -16889,23 +18032,32 @@
         "AdminAccountId":{
           "shape":"NonEmptyString",
           "documentation":"<p>The Amazon Web Services account identifier of the Security Hub administrator account.</p>"
+        },
+        "Feature":{
+          "shape":"SecurityHubFeature",
+          "documentation":"<p>The feature for which the delegated admin account is disabled. Defaults to Security Hub if not specified.</p>"
         }
       }
     },
     "DisableOrganizationAdminAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableSecurityHubRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableSecurityHubResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "DisableSecurityHubV2Request":{
+      "type":"structure",
+      "members":{}
+    },
+    "DisableSecurityHubV2Response":{
+      "type":"structure",
+      "members":{}
     },
     "DisabledSecurityControlIdentifierList":{
       "type":"list",
@@ -16913,23 +18065,19 @@
     },
     "DisassociateFromAdministratorAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFromAdministratorAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFromMasterAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateFromMasterAccountResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateMembersRequest":{
       "type":"structure",
@@ -16943,8 +18091,7 @@
     },
     "DisassociateMembersResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DnsRequestAction":{
       "type":"structure",
@@ -17009,12 +18156,24 @@
         "AdminAccountId":{
           "shape":"NonEmptyString",
           "documentation":"<p>The Amazon Web Services account identifier of the account to designate as the Security Hub administrator account.</p>"
+        },
+        "Feature":{
+          "shape":"SecurityHubFeature",
+          "documentation":"<p>The feature for which the delegated admin account is enabled. Defaults to Security Hub if not specified.</p>"
         }
       }
     },
     "EnableOrganizationAdminAccountResponse":{
       "type":"structure",
       "members":{
+        "AdminAccountId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services account identifier of the account to designate as the Security Hub administrator account.</p>"
+        },
+        "Feature":{
+          "shape":"SecurityHubFeature",
+          "documentation":"<p>The feature where the delegated administrator is enabled. The default is Security Hub CSPM if no delegated administrator is specified in the request.</p>"
+        }
       }
     },
     "EnableSecurityHubRequest":{
@@ -17036,7 +18195,24 @@
     },
     "EnableSecurityHubResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "EnableSecurityHubV2Request":{
+      "type":"structure",
       "members":{
+        "Tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags to add to the hub V2 resource when you enable Security Hub.</p>"
+        }
+      }
+    },
+    "EnableSecurityHubV2Response":{
+      "type":"structure",
+      "members":{
+        "HubV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the V2 resource that was created.</p>"
+        }
       }
     },
     "EnabledSecurityControlIdentifierList":{
@@ -17079,6 +18255,16 @@
       },
       "documentation":"<p> The options for customizing a security control parameter that is a list of enums. </p>"
     },
+    "ExternalIntegrationConfiguration":{
+      "type":"structure",
+      "members":{
+        "ConnectorArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the connector that establishes the integration.</p>"
+        }
+      },
+      "documentation":"<p>Defines the settings and parameters required for integrating external security tools and services.</p>"
+    },
     "FieldMap":{
       "type":"map",
       "key":{"shape":"NonEmptyString"},
@@ -17348,8 +18534,7 @@
     },
     "GetAdministratorAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAdministratorAccountResponse":{
       "type":"structure",
@@ -17357,6 +18542,96 @@
         "Administrator":{"shape":"Invitation"}
       }
     },
+    "GetAggregatorV2Request":{
+      "type":"structure",
+      "required":["AggregatorV2Arn"],
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the Aggregator V2.</p>",
+          "location":"uri",
+          "locationName":"AggregatorV2Arn"
+        }
+      }
+    },
+    "GetAggregatorV2Response":{
+      "type":"structure",
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the Aggregator V2.</p>"
+        },
+        "AggregationRegion":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services Region where data is aggregated.</p>"
+        },
+        "RegionLinkingMode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Determines how Regions are linked to an Aggregator V2.</p>"
+        },
+        "LinkedRegions":{
+          "shape":"StringList",
+          "documentation":"<p>The list of Regions that are linked to the aggregation Region.</p>"
+        }
+      }
+    },
+    "GetAutomationRuleV2Request":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the V2 automation rule.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        }
+      }
+    },
+    "GetAutomationRuleV2Response":{
+      "type":"structure",
+      "members":{
+        "RuleArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the V2 automation rule.</p>"
+        },
+        "RuleId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ID of the V2 automation rule.</p>"
+        },
+        "RuleOrder":{
+          "shape":"RuleOrderValueV2",
+          "documentation":"<p>The value for the rule priority.</p>"
+        },
+        "RuleName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the V2 automation rule.</p>"
+        },
+        "RuleStatus":{
+          "shape":"RuleStatusV2",
+          "documentation":"<p>The status of the V2 automation automation rule.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A description of the automation rule.</p>"
+        },
+        "Criteria":{
+          "shape":"Criteria",
+          "documentation":"<p>The filtering type and configuration of the V2 automation rule.</p>"
+        },
+        "Actions":{
+          "shape":"AutomationRulesActionListV2",
+          "documentation":"<p>A list of actions performed when the rule criteria is met.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the V2 automation rule was created.</p>"
+        },
+        "UpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the V2 automation rule was updated.</p>"
+        }
+      }
+    },
     "GetConfigurationPolicyAssociationRequest":{
       "type":"structure",
       "required":["Target"],
@@ -17445,6 +18720,67 @@
         }
       }
     },
+    "GetConnectorV2Request":{
+      "type":"structure",
+      "required":["ConnectorId"],
+      "members":{
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>",
+          "location":"uri",
+          "locationName":"ConnectorId"
+        }
+      }
+    },
+    "GetConnectorV2Response":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "Name",
+        "CreatedAt",
+        "LastUpdatedAt",
+        "Health",
+        "ProviderDetail"
+      ],
+      "members":{
+        "ConnectorArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the connectorV2.</p>"
+        },
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>"
+        },
+        "Name":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the connectorV2.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The description of the connectorV2.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Resource Name (ARN) of KMS key used for the connectorV2.</p>"
+        },
+        "CreatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>ISO 8601 UTC timestamp for the time create the connectorV2.</p>"
+        },
+        "LastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>ISO 8601 UTC timestamp for the time update the connectorV2 connectorStatus.</p>"
+        },
+        "Health":{
+          "shape":"HealthCheck",
+          "documentation":"<p>The current health status for connectorV2</p>"
+        },
+        "ProviderDetail":{
+          "shape":"ProviderDetail",
+          "documentation":"<p>The third-party provider detail for a service configuration.</p>"
+        }
+      }
+    },
     "GetEnabledStandardsRequest":{
       "type":"structure",
       "members":{
@@ -17515,11 +18851,11 @@
         "FindingIdentifier":{"shape":"AwsSecurityFindingIdentifier"},
         "StartTime":{
           "shape":"Timestamp",
-          "documentation":"<p>A timestamp that indicates the start time of the requested finding history.</p> <p>If you provide values for both <code>StartTime</code> and <code>EndTime</code>, Security Hub returns finding history for the specified time period. If you provide a value for <code>StartTime</code> but not for <code>EndTime</code>, Security Hub returns finding history from the <code>StartTime</code> to the time at which the API is called. If you provide a value for <code>EndTime</code> but not for <code>StartTime</code>, Security Hub returns finding history from the <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_AwsSecurityFindingFilters.html#securityhub-Type-AwsSecurityFindingFilters-CreatedAt\">CreatedAt</a> timestamp of the finding to the <code>EndTime</code>. If you provide neither <code>StartTime</code> nor <code>EndTime</code>, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results, and the maximum time period is limited to 90 days.</p> <p>For more information about the validation and formatting of timestamp fields in Security Hub, see <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/Welcome.html#timestamps\">Timestamps</a>.</p>"
+          "documentation":"<p>A timestamp that indicates the start time of the requested finding history.</p> <p>If you provide values for both <code>StartTime</code> and <code>EndTime</code>, Security Hub returns finding history for the specified time period. If you provide a value for <code>StartTime</code> but not for <code>EndTime</code>, Security Hub returns finding history from the <code>StartTime</code> to the time at which the API is called. If you provide a value for <code>EndTime</code> but not for <code>StartTime</code>, Security Hub returns finding history from the <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_AwsSecurityFindingFilters.html#securityhub-Type-AwsSecurityFindingFilters-CreatedAt\">CreatedAt</a> timestamp of the finding to the <code>EndTime</code>. If you provide neither <code>StartTime</code> nor <code>EndTime</code>, Security Hub returns finding history from the <code>CreatedAt</code> timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results.</p> <p>For more information about the validation and formatting of timestamp fields in Security Hub, see <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/Welcome.html#timestamps\">Timestamps</a>.</p>"
         },
         "EndTime":{
           "shape":"Timestamp",
-          "documentation":"<p> An ISO 8601-formatted timestamp that indicates the end time of the requested finding history.</p> <p>If you provide values for both <code>StartTime</code> and <code>EndTime</code>, Security Hub returns finding history for the specified time period. If you provide a value for <code>StartTime</code> but not for <code>EndTime</code>, Security Hub returns finding history from the <code>StartTime</code> to the time at which the API is called. If you provide a value for <code>EndTime</code> but not for <code>StartTime</code>, Security Hub returns finding history from the <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_AwsSecurityFindingFilters.html#securityhub-Type-AwsSecurityFindingFilters-CreatedAt\">CreatedAt</a> timestamp of the finding to the <code>EndTime</code>. If you provide neither <code>StartTime</code> nor <code>EndTime</code>, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results, and the maximum time period is limited to 90 days.</p> <p>For more information about the validation and formatting of timestamp fields in Security Hub, see <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/Welcome.html#timestamps\">Timestamps</a>.</p>"
+          "documentation":"<p> An ISO 8601-formatted timestamp that indicates the end time of the requested finding history.</p> <p>If you provide values for both <code>StartTime</code> and <code>EndTime</code>, Security Hub returns finding history for the specified time period. If you provide a value for <code>StartTime</code> but not for <code>EndTime</code>, Security Hub returns finding history from the <code>StartTime</code> to the time at which the API is called. If you provide a value for <code>EndTime</code> but not for <code>StartTime</code>, Security Hub returns finding history from the <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/API_AwsSecurityFindingFilters.html#securityhub-Type-AwsSecurityFindingFilters-CreatedAt\">CreatedAt</a> timestamp of the finding to the <code>EndTime</code>. If you provide neither <code>StartTime</code> nor <code>EndTime</code>, Security Hub returns finding history from the <code>CreatedAt</code> timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results.</p> <p>For more information about the validation and formatting of timestamp fields in Security Hub, see <a href=\"https://docs.aws.amazon.com/securityhub/1.0/APIReference/Welcome.html#timestamps\">Timestamps</a>.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -17544,6 +18880,33 @@
         }
       }
     },
+    "GetFindingStatisticsV2Request":{
+      "type":"structure",
+      "required":["GroupByRules"],
+      "members":{
+        "GroupByRules":{
+          "shape":"GroupByRules",
+          "documentation":"<p>Specifies how security findings should be aggregated and organized in the statistical analysis. It can accept up to 5 <code>groupBy</code> fields in a single call.</p>"
+        },
+        "SortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>Orders the aggregation count in descending or ascending order. Descending order is the default.</p>"
+        },
+        "MaxStatisticResults":{
+          "shape":"MaxStatisticResults",
+          "documentation":"<p>The maximum number of results to be returned.</p>"
+        }
+      }
+    },
+    "GetFindingStatisticsV2Response":{
+      "type":"structure",
+      "members":{
+        "GroupByResults":{
+          "shape":"GroupByResults",
+          "documentation":"<p>Aggregated statistics about security findings based on specified grouping criteria.</p>"
+        }
+      }
+    },
     "GetFindingsRequest":{
       "type":"structure",
       "members":{
@@ -17579,6 +18942,40 @@
         }
       }
     },
+    "GetFindingsV2Request":{
+      "type":"structure",
+      "members":{
+        "Filters":{
+          "shape":"OcsfFindingFilters",
+          "documentation":"<p>The finding attributes used to define a condition to filter the returned OCSF findings. You can filter up to 10 composite filters. For each filter type inside of a composite filter, you can provide up to 20 filters.</p>"
+        },
+        "SortCriteria":{
+          "shape":"SortCriteria",
+          "documentation":"<p>The finding attributes used to sort the list of returned findings.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> The token required for pagination. On your first call, set the value of this parameter to <code>NULL</code>. For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>"
+        }
+      }
+    },
+    "GetFindingsV2Response":{
+      "type":"structure",
+      "members":{
+        "Findings":{
+          "shape":"OcsfFindingsList",
+          "documentation":"<p>An array of security findings returned by the operation.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        }
+      }
+    },
     "GetInsightResultsRequest":{
       "type":"structure",
       "required":["InsightArn"],
@@ -17634,8 +19031,7 @@
     },
     "GetInvitationsCountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetInvitationsCountResponse":{
       "type":"structure",
@@ -17648,8 +19044,7 @@
     },
     "GetMasterAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetMasterAccountResponse":{
       "type":"structure",
@@ -17683,6 +19078,69 @@
         }
       }
     },
+    "GetResourcesStatisticsV2Request":{
+      "type":"structure",
+      "required":["GroupByRules"],
+      "members":{
+        "GroupByRules":{
+          "shape":"ResourceGroupByRules",
+          "documentation":"<p>How resource statistics should be aggregated and organized in the response.</p>"
+        },
+        "SortOrder":{
+          "shape":"SortOrder",
+          "documentation":"<p>Sorts aggregated statistics.</p>"
+        },
+        "MaxStatisticResults":{
+          "shape":"MaxStatisticResults",
+          "documentation":"<p>The maximum number of results to be returned.</p>"
+        }
+      }
+    },
+    "GetResourcesStatisticsV2Response":{
+      "type":"structure",
+      "required":["GroupByResults"],
+      "members":{
+        "GroupByResults":{
+          "shape":"GroupByResults",
+          "documentation":"<p>The aggregated statistics about resources based on the specified grouping rule.</p>"
+        }
+      }
+    },
+    "GetResourcesV2Request":{
+      "type":"structure",
+      "members":{
+        "Filters":{
+          "shape":"ResourcesFilters",
+          "documentation":"<p>Filters resources based on a set of criteria.</p>"
+        },
+        "SortCriteria":{
+          "shape":"SortCriteria",
+          "documentation":"<p>The finding attributes used to sort the list of returned findings.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token required for pagination. On your first call, set the value of this parameter to <code>NULL</code>. For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>"
+        }
+      }
+    },
+    "GetResourcesV2Response":{
+      "type":"structure",
+      "required":["Resources"],
+      "members":{
+        "Resources":{
+          "shape":"Resources",
+          "documentation":"<p>Filters resources based on a set of criteria.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        }
+      }
+    },
     "GetSecurityControlDefinitionRequest":{
       "type":"structure",
       "required":["SecurityControlId"],
@@ -17702,6 +19160,109 @@
         "SecurityControlDefinition":{"shape":"SecurityControlDefinition"}
       }
     },
+    "GroupByField":{
+      "type":"string",
+      "enum":[
+        "activity_name",
+        "cloud.account.uid",
+        "cloud.provider",
+        "cloud.region",
+        "compliance.assessments.name",
+        "compliance.status",
+        "compliance.control",
+        "finding_info.title",
+        "finding_info.types",
+        "metadata.product.name",
+        "metadata.product.uid",
+        "resources.type",
+        "resources.uid",
+        "severity",
+        "status",
+        "vulnerabilities.fix_coverage",
+        "class_name",
+        "vulnerabilities.affected_packages.name",
+        "finding_info.analytic.name",
+        "compliance.standards",
+        "cloud.account.name"
+      ]
+    },
+    "GroupByResult":{
+      "type":"structure",
+      "members":{
+        "GroupByField":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The attribute by which filtered security findings should be grouped.</p>"
+        },
+        "GroupByValues":{
+          "shape":"GroupByValues",
+          "documentation":"<p>An array of grouped values and their respective counts for each <code>GroupByField</code>.</p>"
+        }
+      },
+      "documentation":"<p>Represents finding statistics grouped by <code>GroupedByField</code>.</p>"
+    },
+    "GroupByResults":{
+      "type":"list",
+      "member":{"shape":"GroupByResult"}
+    },
+    "GroupByRule":{
+      "type":"structure",
+      "required":["GroupByField"],
+      "members":{
+        "Filters":{
+          "shape":"OcsfFindingFilters",
+          "documentation":"<p>The criteria used to select which security findings should be included in the grouping operation.</p>"
+        },
+        "GroupByField":{
+          "shape":"GroupByField",
+          "documentation":"<p>The attribute by which filtered findings should be grouped.</p>"
+        }
+      },
+      "documentation":"<p>Defines the how the finding attribute should be grouped.</p>"
+    },
+    "GroupByRules":{
+      "type":"list",
+      "member":{"shape":"GroupByRule"}
+    },
+    "GroupByValue":{
+      "type":"structure",
+      "members":{
+        "FieldValue":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The value of the field by which findings are grouped.</p>"
+        },
+        "Count":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings for a specific <code>FieldValue</code> and <code>GroupByField</code>.</p>"
+        }
+      },
+      "documentation":"<p>Represents individual aggregated results when grouping security findings for each <code>GroupByField</code>.</p>"
+    },
+    "GroupByValues":{
+      "type":"list",
+      "member":{"shape":"GroupByValue"}
+    },
+    "HealthCheck":{
+      "type":"structure",
+      "required":[
+        "ConnectorStatus",
+        "LastCheckedAt"
+      ],
+      "members":{
+        "ConnectorStatus":{
+          "shape":"ConnectorStatus",
+          "documentation":"<p>The status of the connectorV2.</p>"
+        },
+        "Message":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The message for the reason of connectorStatus change.</p>"
+        },
+        "LastCheckedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>ISO 8601 UTC timestamp for the time check the health status of the connectorV2.</p>"
+        }
+      },
+      "documentation":"<p>Information about the operational status and health of a connectorV2.</p>"
+    },
     "IcmpTypeCode":{
       "type":"structure",
       "members":{
@@ -17905,6 +19466,18 @@
       "type":"list",
       "member":{"shape":"IntegrationType"}
     },
+    "IntegrationV2Type":{
+      "type":"string",
+      "enum":[
+        "SEND_FINDINGS_TO_SECURITY_HUB",
+        "RECEIVE_FINDINGS_FROM_SECURITY_HUB",
+        "UPDATE_FINDINGS_IN_SECURITY_HUB"
+      ]
+    },
+    "IntegrationV2TypeList":{
+      "type":"list",
+      "member":{"shape":"IntegrationV2Type"}
+    },
     "InternalException":{
       "type":"structure",
       "members":{
@@ -17915,6 +19488,16 @@
       "error":{"httpStatusCode":500},
       "exception":true
     },
+    "InternalServerException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"NonEmptyString"},
+        "Code":{"shape":"NonEmptyString"}
+      },
+      "documentation":"<p> The request has failed due to an internal failure of the service. </p>",
+      "error":{"httpStatusCode":500},
+      "exception":true
+    },
     "InvalidAccessException":{
       "type":"structure",
       "members":{
@@ -18038,6 +19621,53 @@
       "type":"list",
       "member":{"shape":"Ipv6CidrBlockAssociation"}
     },
+    "JiraCloudDetail":{
+      "type":"structure",
+      "members":{
+        "CloudId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The cloud id of the Jira Cloud.</p>"
+        },
+        "ProjectKey":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The projectKey of Jira Cloud.</p>"
+        },
+        "Domain":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The URL domain of your Jira Cloud instance.</p>"
+        },
+        "AuthUrl":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The URL to provide to customers for OAuth auth code flow.</p>"
+        },
+        "AuthStatus":{
+          "shape":"ConnectorAuthStatus",
+          "documentation":"<p>The status of the authorization between Jira Cloud and the service.</p>"
+        }
+      },
+      "documentation":"<p>Information about the configuration and status of a Jira Cloud integration.</p>"
+    },
+    "JiraCloudProviderConfiguration":{
+      "type":"structure",
+      "members":{
+        "ProjectKey":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The project key for a JiraCloud instance.</p>"
+        }
+      },
+      "documentation":"<p>The initial configuration settings required to establish an integration between Security Hub and Jira Cloud.</p>"
+    },
+    "JiraCloudUpdateConfiguration":{
+      "type":"structure",
+      "required":["ProjectKey"],
+      "members":{
+        "ProjectKey":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The project key for a JiraCloud instance.</p>"
+        }
+      },
+      "documentation":"<p>The parameters used to modify an existing Jira Cloud integration.</p>"
+    },
     "KeywordFilter":{
       "type":"structure",
       "members":{
@@ -18062,6 +19692,36 @@
       "error":{"httpStatusCode":429},
       "exception":true
     },
+    "ListAggregatorsV2Request":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token required for pagination. On your first call, set the value of this parameter to <code>NULL</code>. For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListAggregatorsV2Response":{
+      "type":"structure",
+      "members":{
+        "AggregatorsV2":{
+          "shape":"AggregatorV2List",
+          "documentation":"<p>An array of aggregators.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        }
+      }
+    },
     "ListAutomationRulesRequest":{
       "type":"structure",
       "members":{
@@ -18092,6 +19752,36 @@
         }
       }
     },
+    "ListAutomationRulesV2Request":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token required for pagination. On your first call, set the value of this parameter to <code>NULL</code>. For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        }
+      }
+    },
+    "ListAutomationRulesV2Response":{
+      "type":"structure",
+      "members":{
+        "Rules":{
+          "shape":"AutomationRulesMetadataListV2",
+          "documentation":"<p>An array of automation rules.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        }
+      }
+    },
     "ListConfigurationPoliciesRequest":{
       "type":"structure",
       "members":{
@@ -18152,6 +19842,49 @@
         }
       }
     },
+    "ListConnectorsV2Request":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token per the Amazon Web Services Pagination standard</p>",
+          "location":"querystring",
+          "locationName":"NextToken"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be returned.</p>",
+          "location":"querystring",
+          "locationName":"MaxResults"
+        },
+        "ProviderName":{
+          "shape":"ConnectorProviderName",
+          "documentation":"<p>The name of the third-party provider.</p>",
+          "location":"querystring",
+          "locationName":"ProviderName"
+        },
+        "ConnectorStatus":{
+          "shape":"ConnectorStatus",
+          "documentation":"<p>The status for the connectorV2.</p>",
+          "location":"querystring",
+          "locationName":"ConnectorStatus"
+        }
+      }
+    },
+    "ListConnectorsV2Response":{
+      "type":"structure",
+      "required":["Connectors"],
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token to use to request the next page of results. Otherwise, this parameter is null.</p>"
+        },
+        "Connectors":{
+          "shape":"ConnectorSummaryList",
+          "documentation":"<p>An array of connectorV2 summaries.</p>"
+        }
+      }
+    },
     "ListEnabledProductsForImportRequest":{
       "type":"structure",
       "members":{
@@ -18292,6 +20025,12 @@
           "documentation":"<p>The token that is required for pagination. On your first call to the <code>ListOrganizationAdminAccounts</code> operation, set the value of this parameter to <code>NULL</code>. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response. </p>",
           "location":"querystring",
           "locationName":"NextToken"
+        },
+        "Feature":{
+          "shape":"SecurityHubFeature",
+          "documentation":"<p>The feature where the delegated administrator account is listed. Defaults to Security Hub if not specified.</p>",
+          "location":"querystring",
+          "locationName":"Feature"
         }
       }
     },
@@ -18305,6 +20044,10 @@
         "NextToken":{
           "shape":"NextToken",
           "documentation":"<p>The pagination token to use to request the next page of results.</p>"
+        },
+        "Feature":{
+          "shape":"SecurityHubFeature",
+          "documentation":"<p>The feature where the delegated administrator account is listed. Defaults to Security Hub CSPM if not specified.</p>"
         }
       }
     },
@@ -18510,6 +20253,11 @@
       "max":100,
       "min":1
     },
+    "MaxStatisticResults":{
+      "type":"integer",
+      "max":400,
+      "min":1
+    },
     "Member":{
       "type":"structure",
       "members":{
@@ -18550,6 +20298,12 @@
       "type":"list",
       "member":{"shape":"Member"}
     },
+    "MetadataUidList":{
+      "type":"list",
+      "member":{"shape":"NonEmptyString"},
+      "max":100,
+      "min":0
+    },
     "Network":{
       "type":"structure",
       "members":{
@@ -18891,6 +20645,275 @@
       },
       "documentation":"<p>The detected occurrences of sensitive data.</p>"
     },
+    "OcsfBooleanField":{
+      "type":"string",
+      "enum":[
+        "compliance.assessments.meets_criteria",
+        "vulnerabilities.is_exploit_available",
+        "vulnerabilities.is_fix_available"
+      ]
+    },
+    "OcsfBooleanFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfBooleanField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"BooleanFilter"}
+      },
+      "documentation":"<p>Enables filtering of security findings based on boolean field values in OCSF.</p>"
+    },
+    "OcsfBooleanFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfBooleanFilter"}
+    },
+    "OcsfDateField":{
+      "type":"string",
+      "enum":[
+        "finding_info.created_time_dt",
+        "finding_info.first_seen_time_dt",
+        "finding_info.last_seen_time_dt",
+        "finding_info.modified_time_dt",
+        "resources.image.created_time_dt",
+        "resources.image.last_used_time_dt",
+        "resources.modified_time_dt"
+      ]
+    },
+    "OcsfDateFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfDateField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"DateFilter"}
+      },
+      "documentation":"<p>Enables filtering of security findings based on date and timestamp fields in OCSF.</p>"
+    },
+    "OcsfDateFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfDateFilter"}
+    },
+    "OcsfFinding":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
+    "OcsfFindingFilters":{
+      "type":"structure",
+      "members":{
+        "CompositeFilters":{
+          "shape":"CompositeFilterList",
+          "documentation":"<p>Enables the creation of complex filtering conditions by combining filter criteria.</p>"
+        },
+        "CompositeOperator":{
+          "shape":"AllowedOperators",
+          "documentation":"<p>The logical operators used to combine the filtering on multiple <code>CompositeFilters</code>.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the filtering criteria for security findings using OCSF.</p>"
+    },
+    "OcsfFindingIdentifier":{
+      "type":"structure",
+      "required":[
+        "CloudAccountUid",
+        "FindingInfoUid",
+        "MetadataProductUid"
+      ],
+      "members":{
+        "CloudAccountUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Finding cloud.account.uid, which is a unique identifier in the Amazon Web Services account..</p>"
+        },
+        "FindingInfoUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Finding finding_info.uid, which is a unique identifier for the finding from the finding provider.</p>"
+        },
+        "MetadataProductUid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Finding metadata.product.uid, which is a unique identifier for the product.</p>"
+        }
+      },
+      "documentation":"<p>Provides a standard to identify security findings using OCSF.</p>"
+    },
+    "OcsfFindingIdentifierList":{
+      "type":"list",
+      "member":{"shape":"OcsfFindingIdentifier"},
+      "max":100,
+      "min":0
+    },
+    "OcsfFindingsList":{
+      "type":"list",
+      "member":{"shape":"OcsfFinding"}
+    },
+    "OcsfIpField":{
+      "type":"string",
+      "enum":[
+        "evidences.dst_endpoint.ip",
+        "evidences.src_endpoint.ip"
+      ]
+    },
+    "OcsfIpFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfIpField",
+          "documentation":"<p>The name of the IP address field to filter on.</p>"
+        },
+        "Filter":{"shape":"IpFilter"}
+      },
+      "documentation":"<p>The structure for filtering findings based on IP address attributes.</p>"
+    },
+    "OcsfIpFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfIpFilter"}
+    },
+    "OcsfMapField":{
+      "type":"string",
+      "enum":[
+        "resources.tags",
+        "compliance.control_parameters",
+        "databucket.tags",
+        "finding_info.tags"
+      ]
+    },
+    "OcsfMapFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfMapField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"MapFilter"}
+      },
+      "documentation":"<p>Enables filtering of security findings based on map field values in OCSF.</p>"
+    },
+    "OcsfMapFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfMapFilter"}
+    },
+    "OcsfNumberField":{
+      "type":"string",
+      "enum":[
+        "activity_id",
+        "compliance.status_id",
+        "confidence_score",
+        "severity_id",
+        "status_id",
+        "finding_info.related_events_count",
+        "evidences.api.response.code",
+        "evidences.dst_endpoint.autonomous_system.number",
+        "evidences.dst_endpoint.port",
+        "evidences.src_endpoint.autonomous_system.number",
+        "evidences.src_endpoint.port",
+        "resources.image.in_use_count"
+      ]
+    },
+    "OcsfNumberFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfNumberField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"NumberFilter"}
+      },
+      "documentation":"<p>Enables filtering of security findings based on numerical field values in OCSF.</p>"
+    },
+    "OcsfNumberFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfNumberFilter"}
+    },
+    "OcsfStringField":{
+      "type":"string",
+      "enum":[
+        "metadata.uid",
+        "activity_name",
+        "cloud.account.uid",
+        "cloud.provider",
+        "cloud.region",
+        "compliance.assessments.category",
+        "compliance.assessments.name",
+        "compliance.control",
+        "compliance.status",
+        "compliance.standards",
+        "finding_info.desc",
+        "finding_info.src_url",
+        "finding_info.title",
+        "finding_info.types",
+        "finding_info.uid",
+        "finding_info.related_events.uid",
+        "finding_info.related_events.product.uid",
+        "finding_info.related_events.title",
+        "metadata.product.name",
+        "metadata.product.uid",
+        "metadata.product.vendor_name",
+        "remediation.desc",
+        "remediation.references",
+        "resources.cloud_partition",
+        "resources.region",
+        "resources.type",
+        "resources.uid",
+        "severity",
+        "status",
+        "comment",
+        "vulnerabilities.fix_coverage",
+        "class_name",
+        "databucket.encryption_details.algorithm",
+        "databucket.encryption_details.key_uid",
+        "databucket.file.data_classifications.classifier_details.type",
+        "evidences.actor.user.account.uid",
+        "evidences.api.operation",
+        "evidences.api.response.error_message",
+        "evidences.api.service.name",
+        "evidences.connection_info.direction",
+        "evidences.connection_info.protocol_name",
+        "evidences.dst_endpoint.autonomous_system.name",
+        "evidences.dst_endpoint.location.city",
+        "evidences.dst_endpoint.location.country",
+        "evidences.src_endpoint.autonomous_system.name",
+        "evidences.src_endpoint.hostname",
+        "evidences.src_endpoint.location.city",
+        "evidences.src_endpoint.location.country",
+        "finding_info.analytic.name",
+        "malware.name",
+        "malware_scan_info.uid",
+        "malware.severity",
+        "resources.cloud_function.layers.uid_alt",
+        "resources.cloud_function.runtime",
+        "resources.cloud_function.user.uid",
+        "resources.device.encryption_details.key_uid",
+        "resources.device.image.uid",
+        "resources.image.architecture",
+        "resources.image.registry_uid",
+        "resources.image.repository_name",
+        "resources.image.uid",
+        "resources.subnet_info.uid",
+        "resources.vpc_uid",
+        "vulnerabilities.affected_code.file.path",
+        "vulnerabilities.affected_packages.name",
+        "vulnerabilities.cve.epss.score",
+        "vulnerabilities.cve.uid",
+        "vulnerabilities.related_vulnerabilities",
+        "cloud.account.name"
+      ]
+    },
+    "OcsfStringFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"OcsfStringField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"StringFilter"}
+      },
+      "documentation":"<p>Enables filtering of security findings based on string field values in OCSF.</p>"
+    },
+    "OcsfStringFilterList":{
+      "type":"list",
+      "member":{"shape":"OcsfStringFilter"}
+    },
     "OrganizationConfiguration":{
       "type":"structure",
       "members":{
@@ -19250,10 +21273,48 @@
       "type":"list",
       "member":{"shape":"NonEmptyString"}
     },
+    "ProductV2":{
+      "type":"structure",
+      "members":{
+        "ProductV2Name":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the productV2.</p>"
+        },
+        "CompanyName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the organization or vendor that provides the productV2.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Detailed information about the productV2.</p>"
+        },
+        "Categories":{
+          "shape":"CategoryList",
+          "documentation":"<p>The domains or functional areas the productV2 addresses.</p>"
+        },
+        "IntegrationV2Types":{
+          "shape":"IntegrationV2TypeList",
+          "documentation":"<p>The type of integration.</p>"
+        },
+        "MarketplaceUrl":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The console URL where you can purchase or subscribe to products.</p>"
+        },
+        "ActivationUrl":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The URL to the serviceV@ or productV2 documentation about the integration, which includes how to activate the integration.</p>"
+        }
+      },
+      "documentation":"<p>Defines the structure for the productV2.</p>"
+    },
     "ProductsList":{
       "type":"list",
       "member":{"shape":"Product"}
     },
+    "ProductsV2List":{
+      "type":"list",
+      "member":{"shape":"ProductV2"}
+    },
     "PropagatingVgwSetDetails":{
       "type":"structure",
       "members":{
@@ -19268,6 +21329,61 @@
       "type":"list",
       "member":{"shape":"PropagatingVgwSetDetails"}
     },
+    "ProviderConfiguration":{
+      "type":"structure",
+      "members":{
+        "JiraCloud":{
+          "shape":"JiraCloudProviderConfiguration",
+          "documentation":"<p>The configuration settings required to establish an integration with Jira Cloud.</p>"
+        },
+        "ServiceNow":{
+          "shape":"ServiceNowProviderConfiguration",
+          "documentation":"<p>The configuration settings required to establish an integration with ServiceNow ITSM.</p>"
+        }
+      },
+      "documentation":"<p>The initial configuration settings required to establish an integration between Security Hub and third-party provider.</p>",
+      "union":true
+    },
+    "ProviderDetail":{
+      "type":"structure",
+      "members":{
+        "JiraCloud":{
+          "shape":"JiraCloudDetail",
+          "documentation":"<p>Details about a Jira Cloud integration.</p>"
+        },
+        "ServiceNow":{
+          "shape":"ServiceNowDetail",
+          "documentation":"<p>Details about a ServiceNow ITSM integration.</p>"
+        }
+      },
+      "documentation":"<p>The third-party provider detail for a service configuration.</p>",
+      "union":true
+    },
+    "ProviderSummary":{
+      "type":"structure",
+      "members":{
+        "ProviderName":{
+          "shape":"ConnectorProviderName",
+          "documentation":"<p>The name of the provider.</p>"
+        },
+        "ConnectorStatus":{
+          "shape":"ConnectorStatus",
+          "documentation":"<p>The status for the connectorV2.</p>"
+        }
+      },
+      "documentation":"<p>The connectorV2 third-party provider configuration summary.</p>"
+    },
+    "ProviderUpdateConfiguration":{
+      "type":"structure",
+      "members":{
+        "JiraCloud":{
+          "shape":"JiraCloudUpdateConfiguration",
+          "documentation":"<p>The parameters required to update the configuration for a Jira Cloud integration.</p>"
+        }
+      },
+      "documentation":"<p>The parameters required to update the configuration of an integration provider.</p>",
+      "union":true
+    },
     "Range":{
       "type":"structure",
       "members":{
@@ -19431,6 +21547,24 @@
       "type":"string",
       "pattern":"^arn:aws:securityhub:.*"
     },
+    "ResourceCategory":{
+      "type":"string",
+      "enum":[
+        "Compute",
+        "Database",
+        "Storage",
+        "Code",
+        "AI/ML",
+        "Identity",
+        "Network",
+        "Other"
+      ]
+    },
+    "ResourceConfig":{
+      "type":"structure",
+      "members":{},
+      "document":true
+    },
     "ResourceConflictException":{
       "type":"structure",
       "members":{
@@ -19827,10 +21961,75 @@
         "AwsEc2ClientVpnEndpoint":{
           "shape":"AwsEc2ClientVpnEndpointDetails",
           "documentation":"<p> Provides details about an Client VPN endpoint. A Client VPN endpoint is the resource that you create and configure to enable and manage client VPN sessions. It's the termination point for all client VPN sessions. </p>"
+        },
+        "CodeRepository":{
+          "shape":"CodeRepositoryDetails",
+          "documentation":"<p> Details about an external code repository with which you can connect your Amazon Web Services resources. The connection is established through Amazon Inspector. </p>"
         }
       },
       "documentation":"<p>Additional details about a resource related to a finding.</p> <p>To provide the details, use the object that corresponds to the resource type. For example, if the resource type is <code>AwsEc2Instance</code>, then you use the <code>AwsEc2Instance</code> object to provide the details.</p> <p>If the type-specific object does not contain all of the fields you want to populate, then you use the <code>Other</code> object to populate those additional fields.</p> <p>You also use the <code>Other</code> object to populate the details when the selected type does not have a corresponding object.</p>"
     },
+    "ResourceFindingsSummary":{
+      "type":"structure",
+      "required":[
+        "FindingType",
+        "ProductName",
+        "TotalFindings"
+      ],
+      "members":{
+        "FindingType":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The category or classification of the security finding.</p>"
+        },
+        "ProductName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the product associated with the security finding.</p>"
+        },
+        "TotalFindings":{
+          "shape":"Integer",
+          "documentation":"<p>The total count of security findings.</p>"
+        },
+        "Severities":{
+          "shape":"ResourceSeverityBreakdown",
+          "documentation":"<p>A breakdown of security findings by their severity levels.</p>"
+        }
+      },
+      "documentation":"<p>A list of summaries for all finding types on a resource.</p>"
+    },
+    "ResourceFindingsSummaryList":{
+      "type":"list",
+      "member":{"shape":"ResourceFindingsSummary"}
+    },
+    "ResourceGroupByField":{
+      "type":"string",
+      "enum":[
+        "AccountId",
+        "Region",
+        "ResourceCategory",
+        "ResourceType",
+        "ResourceName",
+        "FindingsSummary.FindingType"
+      ]
+    },
+    "ResourceGroupByRule":{
+      "type":"structure",
+      "required":["GroupByField"],
+      "members":{
+        "GroupByField":{
+          "shape":"ResourceGroupByField",
+          "documentation":"<p>Specifies the attribute that resources should be grouped by.</p>"
+        },
+        "Filters":{
+          "shape":"ResourcesFilters",
+          "documentation":"<p>The criteria used to select resources and associated security findings.</p>"
+        }
+      },
+      "documentation":"<p>Defines the configuration for organizing and categorizing Amazon Web Services resources based on associated security findings.</p>"
+    },
+    "ResourceGroupByRules":{
+      "type":"list",
+      "member":{"shape":"ResourceGroupByRule"}
+    },
     "ResourceInUseException":{
       "type":"structure",
       "members":{
@@ -19855,6 +22054,278 @@
       "error":{"httpStatusCode":404},
       "exception":true
     },
+    "ResourceResult":{
+      "type":"structure",
+      "required":[
+        "ResourceId",
+        "AccountId",
+        "Region",
+        "ResourceDetailCaptureTimeDt",
+        "ResourceConfig"
+      ],
+      "members":{
+        "ResourceGuid":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The global identifier used to identify a resource.</p>"
+        },
+        "ResourceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The unique identifier for a resource.</p>"
+        },
+        "AccountId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services account that owns the resource.</p>"
+        },
+        "Region":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services Region where the resource is located.</p>"
+        },
+        "ResourceCategory":{
+          "shape":"ResourceCategory",
+          "documentation":"<p>The grouping where the resource belongs.</p>"
+        },
+        "ResourceType":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The type of resource.</p>"
+        },
+        "ResourceName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the resource.</p>"
+        },
+        "ResourceCreationTimeDt":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The time when the resource was created.</p>"
+        },
+        "ResourceDetailCaptureTimeDt":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The timestamp when information about the resource was captured.</p>"
+        },
+        "FindingsSummary":{
+          "shape":"ResourceFindingsSummaryList",
+          "documentation":"<p>An aggregated view of security findings associated with a resource.</p>"
+        },
+        "ResourceTags":{
+          "shape":"ResourceTagList",
+          "documentation":"<p>The key-value pairs associated with a resource.</p>"
+        },
+        "ResourceConfig":{
+          "shape":"ResourceConfig",
+          "documentation":"<p>The configuration details of a resource.</p>"
+        }
+      },
+      "documentation":"<p>Provides comprehensive details about an Amazon Web Services resource and its associated security findings.</p>"
+    },
+    "ResourceSeverityBreakdown":{
+      "type":"structure",
+      "members":{
+        "Other":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings not in any of the severity categories.</p>"
+        },
+        "Fatal":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level of fatal.</p>"
+        },
+        "Critical":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level of critical.</p>"
+        },
+        "High":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level of high.</p>"
+        },
+        "Medium":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level of medium.</p>"
+        },
+        "Low":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level of low.</p>"
+        },
+        "Informational":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings that provide security-related information.</p>"
+        },
+        "Unknown":{
+          "shape":"Integer",
+          "documentation":"<p>The number of findings with a severity level cannot be determined.</p>"
+        }
+      },
+      "documentation":"<p>A comprehensive distribution of security findings by severity level for Amazon Web Services resources.</p>"
+    },
+    "ResourceTag":{
+      "type":"structure",
+      "required":[
+        "Key",
+        "Value"
+      ],
+      "members":{
+        "Key":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The identifier or name of the tag.</p>"
+        },
+        "Value":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The data associated with the tag key.</p>"
+        }
+      },
+      "documentation":"<p>Represents tag information associated with Amazon Web Services resources.</p>"
+    },
+    "ResourceTagList":{
+      "type":"list",
+      "member":{"shape":"ResourceTag"}
+    },
+    "Resources":{
+      "type":"list",
+      "member":{"shape":"ResourceResult"}
+    },
+    "ResourcesCompositeFilter":{
+      "type":"structure",
+      "members":{
+        "StringFilters":{
+          "shape":"ResourcesStringFilterList",
+          "documentation":"<p>Enables filtering based on string field values.</p>"
+        },
+        "DateFilters":{
+          "shape":"ResourcesDateFilterList",
+          "documentation":"<p>Enables filtering based on date and timestamp field values.</p>"
+        },
+        "NumberFilters":{
+          "shape":"ResourcesNumberFilterList",
+          "documentation":"<p>Enables filtering based on numerical field values.</p>"
+        },
+        "MapFilters":{
+          "shape":"ResourcesMapFilterList",
+          "documentation":"<p>Enables filtering based on map-based field values.</p>"
+        },
+        "NestedCompositeFilters":{
+          "shape":"ResourcesCompositeFilterList",
+          "documentation":"<p> Provides an additional level of filtering, creating a three-layer nested structure. The first layer is a <code>CompositeFilters</code> array with a <code>CompositeOperator</code> (<code>AND</code>/<code>OR</code>). The second layer is a <code>CompositeFilter</code> object that contains direct filters and <code>NestedCompositeFilters</code>. The third layer is <code>NestedCompositeFilters</code>, which contains additional filter conditions. </p>"
+        },
+        "Operator":{
+          "shape":"AllowedOperators",
+          "documentation":"<p>The logical operator used to combine multiple filter conditions.</p>"
+        }
+      },
+      "documentation":"<p>Enables the creation of criteria for Amazon Web Services resources in Security Hub.</p>"
+    },
+    "ResourcesCompositeFilterList":{
+      "type":"list",
+      "member":{"shape":"ResourcesCompositeFilter"}
+    },
+    "ResourcesDateField":{
+      "type":"string",
+      "enum":[
+        "ResourceDetailCaptureTime",
+        "ResourceCreationTime"
+      ]
+    },
+    "ResourcesDateFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"ResourcesDateField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"DateFilter"}
+      },
+      "documentation":"<p>Enables the filtering of Amazon Web Services resources based on date and timestamp attributes.</p>"
+    },
+    "ResourcesDateFilterList":{
+      "type":"list",
+      "member":{"shape":"ResourcesDateFilter"}
+    },
+    "ResourcesFilters":{
+      "type":"structure",
+      "members":{
+        "CompositeFilters":{
+          "shape":"ResourcesCompositeFilterList",
+          "documentation":"<p>A collection of complex filtering conditions that can be applied to Amazon Web Services resources.</p>"
+        },
+        "CompositeOperator":{
+          "shape":"AllowedOperators",
+          "documentation":"<p>The logical operator used to combine multiple filter conditions in the structure.</p>"
+        }
+      },
+      "documentation":"<p>Enables filtering of Amazon Web Services resources based on data.</p>"
+    },
+    "ResourcesMapField":{
+      "type":"string",
+      "enum":["ResourceTags"]
+    },
+    "ResourcesMapFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"ResourcesMapField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"MapFilter"}
+      },
+      "documentation":"<p>Enables filtering of Amazon Web Services resources based on key-value map attributes.</p>"
+    },
+    "ResourcesMapFilterList":{
+      "type":"list",
+      "member":{"shape":"ResourcesMapFilter"}
+    },
+    "ResourcesNumberField":{
+      "type":"string",
+      "enum":[
+        "FindingsSummary.TotalFindings",
+        "FindingsSummary.Severities.Other",
+        "FindingsSummary.Severities.Fatal",
+        "FindingsSummary.Severities.Critical",
+        "FindingsSummary.Severities.High",
+        "FindingsSummary.Severities.Medium",
+        "FindingsSummary.Severities.Low",
+        "FindingsSummary.Severities.Informational",
+        "FindingsSummary.Severities.Unknown"
+      ]
+    },
+    "ResourcesNumberFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"ResourcesNumberField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"NumberFilter"}
+      },
+      "documentation":"<p>Enables filtering of Amazon Web Services resources based on numerical values.</p>"
+    },
+    "ResourcesNumberFilterList":{
+      "type":"list",
+      "member":{"shape":"ResourcesNumberFilter"}
+    },
+    "ResourcesStringField":{
+      "type":"string",
+      "enum":[
+        "ResourceGuid",
+        "ResourceId",
+        "AccountId",
+        "Region",
+        "ResourceCategory",
+        "ResourceType",
+        "ResourceName",
+        "FindingsSummary.FindingType",
+        "FindingsSummary.ProductName"
+      ]
+    },
+    "ResourcesStringFilter":{
+      "type":"structure",
+      "members":{
+        "FieldName":{
+          "shape":"ResourcesStringField",
+          "documentation":"<p>The name of the field.</p>"
+        },
+        "Filter":{"shape":"StringFilter"}
+      },
+      "documentation":"<p>Enables filtering of Amazon Web Services resources based on string field values.</p>"
+    },
+    "ResourcesStringFilterList":{
+      "type":"list",
+      "member":{"shape":"ResourcesStringFilter"}
+    },
     "Result":{
       "type":"structure",
       "members":{
@@ -20294,6 +22765,11 @@
       "max":1000,
       "min":1
     },
+    "RuleOrderValueV2":{
+      "type":"float",
+      "max":1000.0,
+      "min":1.0
+    },
     "RuleStatus":{
       "type":"string",
       "enum":[
@@ -20301,6 +22777,13 @@
         "DISABLED"
       ]
     },
+    "RuleStatusV2":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "SecurityControl":{
       "type":"structure",
       "required":[
@@ -20472,6 +22955,13 @@
       "type":"list",
       "member":{"shape":"NonEmptyString"}
     },
+    "SecurityHubFeature":{
+      "type":"string",
+      "enum":[
+        "SecurityHub",
+        "SecurityHubV2"
+      ]
+    },
     "SecurityHubPolicy":{
       "type":"structure",
       "members":{
@@ -20534,6 +23024,11 @@
       "type":"list",
       "member":{"shape":"SensitiveDataResult"}
     },
+    "SensitiveNonEmptyString":{
+      "type":"string",
+      "pattern":".*\\S.*",
+      "sensitive":true
+    },
     "Sequence":{
       "type":"structure",
       "members":{
@@ -20560,6 +23055,48 @@
       },
       "documentation":"<p> Contains information about an Amazon GuardDuty Extended Threat Detection attack sequence finding. GuardDuty generates an attack sequence finding when multiple events align to a potentially suspicious activity. To receive GuardDuty attack sequence findings in Security Hub, you must have GuardDuty enabled. For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-extended-threat-detection.html\">GuardDuty Extended Threat Detection </a> in the <i>Amazon GuardDuty User Guide</i>. </p>"
     },
+    "ServiceNowDetail":{
+      "type":"structure",
+      "required":["AuthStatus"],
+      "members":{
+        "InstanceName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The instanceName of ServiceNow ITSM.</p>"
+        },
+        "ClientId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The clientId of ServiceNow ITSM.</p>"
+        },
+        "AuthStatus":{
+          "shape":"ConnectorAuthStatus",
+          "documentation":"<p>The status of the authorization between Jira Cloud and the service.</p>"
+        }
+      },
+      "documentation":"<p>Information about a ServiceNow ITSM integration.</p>"
+    },
+    "ServiceNowProviderConfiguration":{
+      "type":"structure",
+      "required":[
+        "InstanceName",
+        "ClientId",
+        "ClientSecret"
+      ],
+      "members":{
+        "InstanceName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The instance name of ServiceNow ITSM.</p>"
+        },
+        "ClientId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The client ID of ServiceNow ITSM.</p>"
+        },
+        "ClientSecret":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The client secret of ServiceNow ITSM.</p>"
+        }
+      },
+      "documentation":"<p>The initial configuration settings required to establish an integration between Security Hub and ServiceNow ITSM.</p>"
+    },
     "Severity":{
       "type":"structure",
       "members":{
@@ -20776,7 +23313,7 @@
       "members":{
         "StandardsArn":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ARN of a standard.</p>"
+          "documentation":"<p>The ARN of the standard.</p>"
         },
         "Name":{
           "shape":"NonEmptyString",
@@ -21016,6 +23553,13 @@
       "type":"list",
       "member":{"shape":"StandardsControl"}
     },
+    "StandardsControlsUpdatable":{
+      "type":"string",
+      "enum":[
+        "READY_FOR_UPDATES",
+        "NOT_READY_FOR_UPDATES"
+      ]
+    },
     "StandardsInputParameterMap":{
       "type":"map",
       "key":{"shape":"NonEmptyString"},
@@ -21054,7 +23598,7 @@
           "documentation":"<p>The reason code that represents the reason for the current status of a standard subscription.</p>"
         }
       },
-      "documentation":"<p>The reason for the current status of a standard subscription.</p>"
+      "documentation":"<p>The reason for the current status of your subscription to the standard.</p>"
     },
     "StandardsSubscription":{
       "type":"structure",
@@ -21067,11 +23611,11 @@
       "members":{
         "StandardsSubscriptionArn":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ARN of a resource that represents your subscription to a supported standard.</p>"
+          "documentation":"<p>The ARN of the resource that represents your subscription to the standard.</p>"
         },
         "StandardsArn":{
           "shape":"NonEmptyString",
-          "documentation":"<p>The ARN of a standard.</p>"
+          "documentation":"<p>The ARN of the standard.</p>"
         },
         "StandardsInput":{
           "shape":"StandardsInputParameterMap",
@@ -21079,7 +23623,11 @@
         },
         "StandardsStatus":{
           "shape":"StandardsStatus",
-          "documentation":"<p>The status of the standard subscription.</p> <p>The status values are as follows:</p> <ul> <li> <p> <code>PENDING</code> - Standard is in the process of being enabled.</p> </li> <li> <p> <code>READY</code> - Standard is enabled.</p> </li> <li> <p> <code>INCOMPLETE</code> - Standard could not be enabled completely. Some controls may not be available.</p> </li> <li> <p> <code>DELETING</code> - Standard is in the process of being disabled.</p> </li> <li> <p> <code>FAILED</code> - Standard could not be disabled.</p> </li> </ul>"
+          "documentation":"<p>The status of your subscription to the standard. Possible values are:</p> <ul> <li> <p> <code>PENDING</code> - The standard is in the process of being enabled. Or the standard is already enabled and Security Hub is adding new controls to the standard.</p> </li> <li> <p> <code>READY</code> - The standard is enabled.</p> </li> <li> <p> <code>INCOMPLETE</code> - The standard could not be enabled completely. One or more errors (<code>StandardsStatusReason</code>) occurred when Security Hub attempted to enable the standard.</p> </li> <li> <p> <code>DELETING</code> - The standard is in the process of being disabled.</p> </li> <li> <p> <code>FAILED</code> - The standard could not be disabled. One or more errors (<code>StandardsStatusReason</code>) occurred when Security Hub attempted to disable the standard.</p> </li> </ul>"
+        },
+        "StandardsControlsUpdatable":{
+          "shape":"StandardsControlsUpdatable",
+          "documentation":"<p>Specifies whether you can retrieve information about and configure individual controls that apply to the standard. Possible values are:</p> <ul> <li> <p> <code>READY_FOR_UPDATES</code> - Controls in the standard can be retrieved and configured.</p> </li> <li> <p> <code>NOT_READY_FOR_UPDATES</code> - Controls in the standard cannot be retrieved or configured.</p> </li> </ul>"
         },
         "StandardsStatusReason":{
           "shape":"StandardsStatusReason",
@@ -21185,8 +23733,7 @@
     },
     "StartConfigurationPolicyDisassociationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StatelessCustomActionDefinition":{
       "type":"structure",
@@ -21241,6 +23788,7 @@
       "type":"string",
       "enum":[
         "NO_AVAILABLE_CONFIGURATION_RECORDER",
+        "MAXIMUM_NUMBER_OF_CONFIG_RULES_EXCEEDED",
         "INTERNAL_ERROR"
       ]
     },
@@ -21275,7 +23823,7 @@
         },
         "Comparison":{
           "shape":"StringFilterComparison",
-          "documentation":"<p>The condition to apply to a string value when filtering Security Hub findings.</p> <p>To search for values that have the filter value, use one of the following comparison operators:</p> <ul> <li> <p>To search for values that include the filter value, use <code>CONTAINS</code>. For example, the filter <code>Title CONTAINS CloudFront</code> matches findings that have a <code>Title</code> that includes the string CloudFront.</p> </li> <li> <p>To search for values that exactly match the filter value, use <code>EQUALS</code>. For example, the filter <code>AwsAccountId EQUALS 123456789012</code> only matches findings that have an account ID of <code>123456789012</code>.</p> </li> <li> <p>To search for values that start with the filter value, use <code>PREFIX</code>. For example, the filter <code>ResourceRegion PREFIX us</code> matches findings that have a <code>ResourceRegion</code> that starts with <code>us</code>. A <code>ResourceRegion</code> that starts with a different value, such as <code>af</code>, <code>ap</code>, or <code>ca</code>, doesn't match.</p> </li> </ul> <p> <code>CONTAINS</code>, <code>EQUALS</code>, and <code>PREFIX</code> filters on the same field are joined by <code>OR</code>. A finding matches if it matches any one of those filters. For example, the filters <code>Title CONTAINS CloudFront OR Title CONTAINS CloudWatch</code> match a finding that includes either <code>CloudFront</code>, <code>CloudWatch</code>, or both strings in the title.</p> <p>To search for values that don’t have the filter value, use one of the following comparison operators:</p> <ul> <li> <p>To search for values that exclude the filter value, use <code>NOT_CONTAINS</code>. For example, the filter <code>Title NOT_CONTAINS CloudFront</code> matches findings that have a <code>Title</code> that excludes the string CloudFront.</p> </li> <li> <p>To search for values other than the filter value, use <code>NOT_EQUALS</code>. For example, the filter <code>AwsAccountId NOT_EQUALS 123456789012</code> only matches findings that have an account ID other than <code>123456789012</code>.</p> </li> <li> <p>To search for values that don't start with the filter value, use <code>PREFIX_NOT_EQUALS</code>. For example, the filter <code>ResourceRegion PREFIX_NOT_EQUALS us</code> matches findings with a <code>ResourceRegion</code> that starts with a value other than <code>us</code>.</p> </li> </ul> <p> <code>NOT_CONTAINS</code>, <code>NOT_EQUALS</code>, and <code>PREFIX_NOT_EQUALS</code> filters on the same field are joined by <code>AND</code>. A finding matches only if it matches all of those filters. For example, the filters <code>Title NOT_CONTAINS CloudFront AND Title NOT_CONTAINS CloudWatch</code> match a finding that excludes both <code>CloudFront</code> and <code>CloudWatch</code> in the title.</p> <p>You can’t have both a <code>CONTAINS</code> filter and a <code>NOT_CONTAINS</code> filter on the same field. Similarly, you can't provide both an <code>EQUALS</code> filter and a <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filter on the same field. Combining filters in this way returns an error. <code>CONTAINS</code> filters can only be used with other <code>CONTAINS</code> filters. <code>NOT_CONTAINS</code> filters can only be used with other <code>NOT_CONTAINS</code> filters. </p> <p>You can combine <code>PREFIX</code> filters with <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filters for the same field. Security Hub first processes the <code>PREFIX</code> filters, and then the <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filters.</p> <p>For example, for the following filters, Security Hub first identifies findings that have resource types that start with either <code>AwsIam</code> or <code>AwsEc2</code>. It then excludes findings that have a resource type of <code>AwsIamPolicy</code> and findings that have a resource type of <code>AwsEc2NetworkInterface</code>.</p> <ul> <li> <p> <code>ResourceType PREFIX AwsIam</code> </p> </li> <li> <p> <code>ResourceType PREFIX AwsEc2</code> </p> </li> <li> <p> <code>ResourceType NOT_EQUALS AwsIamPolicy</code> </p> </li> <li> <p> <code>ResourceType NOT_EQUALS AwsEc2NetworkInterface</code> </p> </li> </ul> <p> <code>CONTAINS</code> and <code>NOT_CONTAINS</code> operators can be used only with automation rules. For more information, see <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/automation-rules.html\">Automation rules</a> in the <i>Security Hub User Guide</i>.</p>"
+          "documentation":"<p>The condition to apply to a string value when filtering Security Hub findings.</p> <p>To search for values that have the filter value, use one of the following comparison operators:</p> <ul> <li> <p>To search for values that include the filter value, use <code>CONTAINS</code>. For example, the filter <code>Title CONTAINS CloudFront</code> matches findings that have a <code>Title</code> that includes the string CloudFront.</p> </li> <li> <p>To search for values that exactly match the filter value, use <code>EQUALS</code>. For example, the filter <code>AwsAccountId EQUALS 123456789012</code> only matches findings that have an account ID of <code>123456789012</code>.</p> </li> <li> <p>To search for values that start with the filter value, use <code>PREFIX</code>. For example, the filter <code>ResourceRegion PREFIX us</code> matches findings that have a <code>ResourceRegion</code> that starts with <code>us</code>. A <code>ResourceRegion</code> that starts with a different value, such as <code>af</code>, <code>ap</code>, or <code>ca</code>, doesn't match.</p> </li> </ul> <p> <code>CONTAINS</code>, <code>EQUALS</code>, and <code>PREFIX</code> filters on the same field are joined by <code>OR</code>. A finding matches if it matches any one of those filters. For example, the filters <code>Title CONTAINS CloudFront OR Title CONTAINS CloudWatch</code> match a finding that includes either <code>CloudFront</code>, <code>CloudWatch</code>, or both strings in the title.</p> <p>To search for values that don’t have the filter value, use one of the following comparison operators:</p> <ul> <li> <p>To search for values that exclude the filter value, use <code>NOT_CONTAINS</code>. For example, the filter <code>Title NOT_CONTAINS CloudFront</code> matches findings that have a <code>Title</code> that excludes the string CloudFront.</p> </li> <li> <p>To search for values other than the filter value, use <code>NOT_EQUALS</code>. For example, the filter <code>AwsAccountId NOT_EQUALS 123456789012</code> only matches findings that have an account ID other than <code>123456789012</code>.</p> </li> <li> <p>To search for values that don't start with the filter value, use <code>PREFIX_NOT_EQUALS</code>. For example, the filter <code>ResourceRegion PREFIX_NOT_EQUALS us</code> matches findings with a <code>ResourceRegion</code> that starts with a value other than <code>us</code>.</p> </li> </ul> <p> <code>NOT_CONTAINS</code>, <code>NOT_EQUALS</code>, and <code>PREFIX_NOT_EQUALS</code> filters on the same field are joined by <code>AND</code>. A finding matches only if it matches all of those filters. For example, the filters <code>Title NOT_CONTAINS CloudFront AND Title NOT_CONTAINS CloudWatch</code> match a finding that excludes both <code>CloudFront</code> and <code>CloudWatch</code> in the title.</p> <p>You can’t have both a <code>CONTAINS</code> filter and a <code>NOT_CONTAINS</code> filter on the same field. Similarly, you can't provide both an <code>EQUALS</code> filter and a <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filter on the same field. Combining filters in this way returns an error. <code>CONTAINS</code> filters can only be used with other <code>CONTAINS</code> filters. <code>NOT_CONTAINS</code> filters can only be used with other <code>NOT_CONTAINS</code> filters. </p> <p>You can combine <code>PREFIX</code> filters with <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filters for the same field. Security Hub first processes the <code>PREFIX</code> filters, and then the <code>NOT_EQUALS</code> or <code>PREFIX_NOT_EQUALS</code> filters.</p> <p>For example, for the following filters, Security Hub first identifies findings that have resource types that start with either <code>AwsIam</code> or <code>AwsEc2</code>. It then excludes findings that have a resource type of <code>AwsIamPolicy</code> and findings that have a resource type of <code>AwsEc2NetworkInterface</code>.</p> <ul> <li> <p> <code>ResourceType PREFIX AwsIam</code> </p> </li> <li> <p> <code>ResourceType PREFIX AwsEc2</code> </p> </li> <li> <p> <code>ResourceType NOT_EQUALS AwsIamPolicy</code> </p> </li> <li> <p> <code>ResourceType NOT_EQUALS AwsEc2NetworkInterface</code> </p> </li> </ul> <p> <code>CONTAINS</code> and <code>NOT_CONTAINS</code> operators can be used only with automation rules V1. <code>CONTAINS_WORD</code> operator is only supported in <code>GetFindingsV2</code>, <code>GetFindingStatisticsV2</code>, <code>GetResourcesV2</code>, and <code>GetResourceStatisticsV2</code> APIs. For more information, see <a href=\"https://docs.aws.amazon.com/securityhub/latest/userguide/automation-rules.html\">Automation rules</a> in the <i>Security Hub User Guide</i>.</p>"
         }
       },
       "documentation":"<p>A string filter for filtering Security Hub findings.</p>"
@@ -21288,7 +23836,8 @@
         "NOT_EQUALS",
         "PREFIX_NOT_EQUALS",
         "CONTAINS",
-        "NOT_CONTAINS"
+        "NOT_CONTAINS",
+        "CONTAINS_WORD"
       ]
     },
     "StringFilterList":{
@@ -21361,8 +23910,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -21482,6 +24030,16 @@
       "type":"list",
       "member":{"shape":"Threat"}
     },
+    "ThrottlingException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"NonEmptyString"},
+        "Code":{"shape":"NonEmptyString"}
+      },
+      "documentation":"<p> The limit on the number of requests per second was exceeded. </p>",
+      "error":{"httpStatusCode":429},
+      "exception":true
+    },
     "Timestamp":{
       "type":"timestamp",
       "timestampFormat":"iso8601"
@@ -21540,6 +24098,7 @@
         "INVALID_INPUT",
         "ACCESS_DENIED",
         "NOT_FOUND",
+        "RESOURCE_NOT_FOUND",
         "LIMIT_EXCEEDED"
       ]
     },
@@ -21556,7 +24115,7 @@
         },
         "ErrorCode":{
           "shape":"UnprocessedErrorCode",
-          "documentation":"<p> The error code for the unprocessed security control. </p>"
+          "documentation":"<p> The error code for the unprocessed security control. The <code>NOT_FOUND</code> value has been deprecated and replaced by the <code>RESOURCE_NOT_FOUND</code> value. </p>"
         },
         "ErrorReason":{
           "shape":"NonEmptyString",
@@ -21582,7 +24141,7 @@
         },
         "ErrorCode":{
           "shape":"UnprocessedErrorCode",
-          "documentation":"<p>The error code for the unprocessed standard and control association. </p>"
+          "documentation":"<p>The error code for the unprocessed standard and control association. The <code>NOT_FOUND</code> value has been deprecated and replaced by the <code>RESOURCE_NOT_FOUND</code> value. </p>"
         },
         "ErrorReason":{
           "shape":"NonEmptyString",
@@ -21604,7 +24163,7 @@
         },
         "ErrorCode":{
           "shape":"UnprocessedErrorCode",
-          "documentation":"<p>The error code for the unprocessed update of the control's enablement status in the specified standard.</p>"
+          "documentation":"<p>The error code for the unprocessed update of the control's enablement status in the specified standard. The <code>NOT_FOUND</code> value has been deprecated and replaced by the <code>RESOURCE_NOT_FOUND</code> value.</p>"
         },
         "ErrorReason":{
           "shape":"NonEmptyString",
@@ -21644,8 +24203,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateActionTargetRequest":{
       "type":"structure",
@@ -21669,9 +24227,92 @@
     },
     "UpdateActionTargetResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateAggregatorV2Request":{
+      "type":"structure",
+      "required":[
+        "AggregatorV2Arn",
+        "RegionLinkingMode"
+      ],
       "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the Aggregator V2.</p>",
+          "location":"uri",
+          "locationName":"AggregatorV2Arn"
+        },
+        "RegionLinkingMode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Determines how Amazon Web Services Regions should be linked to the Aggregator V2.</p>"
+        },
+        "LinkedRegions":{
+          "shape":"StringList",
+          "documentation":"<p>A list of Amazon Web Services Regions linked to the aggegation Region.</p>"
+        }
+      }
+    },
+    "UpdateAggregatorV2Response":{
+      "type":"structure",
+      "members":{
+        "AggregatorV2Arn":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the Aggregator V2.</p>"
+        },
+        "AggregationRegion":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The Amazon Web Services Region where data is aggregated.</p>"
+        },
+        "RegionLinkingMode":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>Determines how Amazon Web Services Regions should be linked to the Aggregator V2.</p>"
+        },
+        "LinkedRegions":{
+          "shape":"StringList",
+          "documentation":"<p>A list of Amazon Web Services Regions linked to the aggegation Region.</p>"
+        }
       }
     },
+    "UpdateAutomationRuleV2Request":{
+      "type":"structure",
+      "required":["Identifier"],
+      "members":{
+        "Identifier":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The ARN of the automation rule.</p>",
+          "location":"uri",
+          "locationName":"Identifier"
+        },
+        "RuleStatus":{
+          "shape":"RuleStatusV2",
+          "documentation":"<p>The status of the automation rule.</p>"
+        },
+        "RuleOrder":{
+          "shape":"RuleOrderValueV2",
+          "documentation":"<p>Represents a value for the rule priority.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>A description of the automation rule.</p>"
+        },
+        "RuleName":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The name of the automation rule.</p>"
+        },
+        "Criteria":{
+          "shape":"Criteria",
+          "documentation":"<p>The filtering type and configuration of the automation rule.</p>"
+        },
+        "Actions":{
+          "shape":"AutomationRulesActionListV2",
+          "documentation":"<p>A list of actions to be performed when the rule criteria is met.</p>"
+        }
+      }
+    },
+    "UpdateAutomationRuleV2Response":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateAutomationRulesRequestItem":{
       "type":"structure",
       "required":["RuleArn"],
@@ -21778,6 +24419,34 @@
         }
       }
     },
+    "UpdateConnectorV2Request":{
+      "type":"structure",
+      "required":["ConnectorId"],
+      "members":{
+        "ConnectorId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The UUID of the connectorV2 to identify connectorV2 resource.</p>",
+          "location":"uri",
+          "locationName":"ConnectorId"
+        },
+        "ClientSecret":{
+          "shape":"SensitiveNonEmptyString",
+          "documentation":"<p>The clientSecret of ServiceNow.</p>"
+        },
+        "Description":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The description of the connectorV2.</p>"
+        },
+        "Provider":{
+          "shape":"ProviderUpdateConfiguration",
+          "documentation":"<p>The third-party provider’s service configuration.</p>"
+        }
+      }
+    },
+    "UpdateConnectorV2Response":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateFindingAggregatorRequest":{
       "type":"structure",
       "required":[
@@ -21840,8 +24509,7 @@
     },
     "UpdateFindingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateInsightRequest":{
       "type":"structure",
@@ -21869,8 +24537,7 @@
     },
     "UpdateInsightResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOrganizationConfigurationRequest":{
       "type":"structure",
@@ -21889,8 +24556,7 @@
     },
     "UpdateOrganizationConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSecurityControlRequest":{
       "type":"structure",
@@ -21915,8 +24581,7 @@
     },
     "UpdateSecurityControlResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSecurityHubConfigurationRequest":{
       "type":"structure",
@@ -21933,8 +24598,7 @@
     },
     "UpdateSecurityHubConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStandardsControlRequest":{
       "type":"structure",
@@ -21958,8 +24622,7 @@
     },
     "UpdateStandardsControlResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStatus":{
       "type":"string",
@@ -21982,6 +24645,16 @@
       },
       "documentation":"<p> Provides Amazon Web Services account information of the user involved in an Amazon GuardDuty Extended Threat Detection attack sequence. GuardDuty generates an attack sequence finding when multiple events align to a potentially suspicious activity. To receive GuardDuty attack sequence findings in Security Hub, you must have GuardDuty enabled. For more information, see <a href=\"https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-extended-threat-detection.html\">GuardDuty Extended Threat Detection </a> in the <i>Amazon GuardDuty User Guide</i>. </p>"
     },
+    "ValidationException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"NonEmptyString"},
+        "Code":{"shape":"NonEmptyString"}
+      },
+      "documentation":"<p>The request has failed validation because it's missing required fields or has invalid inputs.</p>",
+      "error":{"httpStatusCode":400},
+      "exception":true
+    },
     "VerificationState":{
       "type":"string",
       "enum":[
diff -pruN 2.23.6-1/awscli/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/securitylake/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/serverlessrepo/2017-09-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +252,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +275,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,7 +294,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -308,14 +304,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/serverlessrepo/2017-09-08/service-2.json 2.31.35-1/awscli/botocore/data/serverlessrepo/2017-09-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/serverlessrepo/2017-09-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/serverlessrepo/2017-09-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,2248 +1,2446 @@
 {
-  "metadata" : {
-    "apiVersion" : "2017-09-08",
-    "endpointPrefix" : "serverlessrepo",
-    "signingName" : "serverlessrepo",
-    "serviceFullName" : "AWSServerlessApplicationRepository",
-    "serviceId" : "ServerlessApplicationRepository",
-    "protocol" : "rest-json",
-    "jsonVersion" : "1.1",
-    "uid" : "serverlessrepo-2017-09-08",
-    "signatureVersion" : "v4"
+  "metadata": {
+    "apiVersion": "2017-09-08",
+    "endpointPrefix": "serverlessrepo",
+    "signingName": "serverlessrepo",
+    "serviceFullName": "AWSServerlessApplicationRepository",
+    "serviceId": "ServerlessApplicationRepository",
+    "protocol": "rest-json",
+    "jsonVersion": "1.1",
+    "uid": "serverlessrepo-2017-09-08",
+    "signatureVersion": "v4",
+    "auth": [
+      "aws.auth#sigv4"
+    ]
   },
-  "operations" : {
-    "CreateApplication" : {
-      "name" : "CreateApplication",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/applications",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateApplicationRequest"
-      },
-      "output" : {
-        "shape" : "CreateApplicationResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Creates an application, optionally including an AWS SAM file to create the first application version in the same call.</p>"
-    },
-    "CreateApplicationVersion" : {
-      "name" : "CreateApplicationVersion",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/applications/{applicationId}/versions/{semanticVersion}",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateApplicationVersionRequest"
-      },
-      "output" : {
-        "shape" : "CreateApplicationVersionResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Creates an application version.</p>"
-    },
-    "CreateCloudFormationChangeSet" : {
-      "name" : "CreateCloudFormationChangeSet",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/applications/{applicationId}/changesets",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateCloudFormationChangeSetRequest"
-      },
-      "output" : {
-        "shape" : "CreateCloudFormationChangeSetResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Creates an AWS CloudFormation change set for the given application.</p>"
-    },
-    "CreateCloudFormationTemplate" : {
-      "name" : "CreateCloudFormationTemplate",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/applications/{applicationId}/templates",
-        "responseCode" : 201
-      },
-      "input" : {
-        "shape" : "CreateCloudFormationTemplateRequest"
-      },
-      "output" : {
-        "shape" : "CreateCloudFormationTemplateResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Creates an AWS CloudFormation template.</p>"
-    },
-    "DeleteApplication" : {
-      "name" : "DeleteApplication",
-      "http" : {
-        "method" : "DELETE",
-        "requestUri" : "/applications/{applicationId}",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "DeleteApplicationRequest"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      }, {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Deletes the specified application.</p>"
-    },
-    "GetApplication" : {
-      "name" : "GetApplication",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications/{applicationId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApplicationRequest"
-      },
-      "output" : {
-        "shape" : "GetApplicationResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Gets the specified application.</p>"
-    },
-    "GetApplicationPolicy" : {
-      "name" : "GetApplicationPolicy",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications/{applicationId}/policy",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetApplicationPolicyRequest"
-      },
-      "output" : {
-        "shape" : "GetApplicationPolicyResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Retrieves the policy for the application.</p>"
-    },
-    "GetCloudFormationTemplate" : {
-      "name" : "GetCloudFormationTemplate",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications/{applicationId}/templates/{templateId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "GetCloudFormationTemplateRequest"
-      },
-      "output" : {
-        "shape" : "GetCloudFormationTemplateResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Gets the specified AWS CloudFormation template.</p>"
-    },
-    "ListApplicationDependencies" : {
-      "name" : "ListApplicationDependencies",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications/{applicationId}/dependencies",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListApplicationDependenciesRequest"
-      },
-      "output" : {
-        "shape" : "ListApplicationDependenciesResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Retrieves the list of applications nested in the containing application.</p>"
-    },
-    "ListApplicationVersions" : {
-      "name" : "ListApplicationVersions",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications/{applicationId}/versions",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListApplicationVersionsRequest"
-      },
-      "output" : {
-        "shape" : "ListApplicationVersionsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Lists versions for the specified application.</p>"
-    },
-    "ListApplications" : {
-      "name" : "ListApplications",
-      "http" : {
-        "method" : "GET",
-        "requestUri" : "/applications",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "ListApplicationsRequest"
-      },
-      "output" : {
-        "shape" : "ListApplicationsResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Lists applications owned by the requester.</p>"
-    },
-    "PutApplicationPolicy" : {
-      "name" : "PutApplicationPolicy",
-      "http" : {
-        "method" : "PUT",
-        "requestUri" : "/applications/{applicationId}/policy",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "PutApplicationPolicyRequest"
-      },
-      "output" : {
-        "shape" : "PutApplicationPolicyResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Sets the permission policy for an application. For the list of actions supported for this operation, see\n <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>\n .</p>"
-    },
-    "UnshareApplication" : {
-      "name" : "UnshareApplication",
-      "http" : {
-        "method" : "POST",
-        "requestUri" : "/applications/{applicationId}/unshare",
-        "responseCode" : 204
-      },
-      "input" : {
-        "shape" : "UnshareApplicationRequest"
-      },
-      "errors" : [ {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      } ],
-      "documentation" : "<p>Unshares an application from an AWS Organization.</p><p>This operation can be called only from the organization's master account.</p>"
-    },
-    "UpdateApplication" : {
-      "name" : "UpdateApplication",
-      "http" : {
-        "method" : "PATCH",
-        "requestUri" : "/applications/{applicationId}",
-        "responseCode" : 200
-      },
-      "input" : {
-        "shape" : "UpdateApplicationRequest"
-      },
-      "output" : {
-        "shape" : "UpdateApplicationResponse",
-        "documentation" : "<p>Success</p>"
-      },
-      "errors" : [ {
-        "shape" : "BadRequestException",
-        "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-      }, {
-        "shape" : "InternalServerErrorException",
-        "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-      }, {
-        "shape" : "ForbiddenException",
-        "documentation" : "<p>The client is not authenticated.</p>"
-      }, {
-        "shape" : "NotFoundException",
-        "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-      }, {
-        "shape" : "TooManyRequestsException",
-        "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-      }, {
-        "shape" : "ConflictException",
-        "documentation" : "<p>The resource already exists.</p>"
-      } ],
-      "documentation" : "<p>Updates the specified application.</p>"
+  "operations": {
+    "CreateApplication": {
+      "name": "CreateApplication",
+      "http": {
+        "method": "POST",
+        "requestUri": "/applications",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateApplicationRequest"
+      },
+      "output": {
+        "shape": "CreateApplicationResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an application, optionally including an AWS SAM file to create the first application version in the same call.</p>"
+    },
+    "CreateApplicationVersion": {
+      "name": "CreateApplicationVersion",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/applications/{applicationId}/versions/{semanticVersion}",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateApplicationVersionRequest"
+      },
+      "output": {
+        "shape": "CreateApplicationVersionResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an application version.</p>"
+    },
+    "CreateCloudFormationChangeSet": {
+      "name": "CreateCloudFormationChangeSet",
+      "http": {
+        "method": "POST",
+        "requestUri": "/applications/{applicationId}/changesets",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateCloudFormationChangeSetRequest"
+      },
+      "output": {
+        "shape": "CreateCloudFormationChangeSetResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an AWS CloudFormation change set for the given application.</p>"
+    },
+    "CreateCloudFormationTemplate": {
+      "name": "CreateCloudFormationTemplate",
+      "http": {
+        "method": "POST",
+        "requestUri": "/applications/{applicationId}/templates",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateCloudFormationTemplateRequest"
+      },
+      "output": {
+        "shape": "CreateCloudFormationTemplateResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Creates an AWS CloudFormation template.</p>"
+    },
+    "DeleteApplication": {
+      "name": "DeleteApplication",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/applications/{applicationId}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteApplicationRequest"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Deletes the specified application.</p>"
+    },
+    "GetApplication": {
+      "name": "GetApplication",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications/{applicationId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApplicationRequest"
+      },
+      "output": {
+        "shape": "GetApplicationResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the specified application.</p>"
+    },
+    "GetApplicationPolicy": {
+      "name": "GetApplicationPolicy",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications/{applicationId}/policy",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetApplicationPolicyRequest"
+      },
+      "output": {
+        "shape": "GetApplicationPolicyResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Retrieves the policy for the application.</p>"
+    },
+    "GetCloudFormationTemplate": {
+      "name": "GetCloudFormationTemplate",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications/{applicationId}/templates/{templateId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "GetCloudFormationTemplateRequest"
+      },
+      "output": {
+        "shape": "GetCloudFormationTemplateResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Gets the specified AWS CloudFormation template.</p>"
+    },
+    "ListApplicationDependencies": {
+      "name": "ListApplicationDependencies",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications/{applicationId}/dependencies",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListApplicationDependenciesRequest"
+      },
+      "output": {
+        "shape": "ListApplicationDependenciesResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Retrieves the list of applications nested in the containing application.</p>"
+    },
+    "ListApplicationVersions": {
+      "name": "ListApplicationVersions",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications/{applicationId}/versions",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListApplicationVersionsRequest"
+      },
+      "output": {
+        "shape": "ListApplicationVersionsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Lists versions for the specified application.</p>"
+    },
+    "ListApplications": {
+      "name": "ListApplications",
+      "http": {
+        "method": "GET",
+        "requestUri": "/applications",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "ListApplicationsRequest"
+      },
+      "output": {
+        "shape": "ListApplicationsResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Lists applications owned by the requester.</p>"
+    },
+    "PutApplicationPolicy": {
+      "name": "PutApplicationPolicy",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/applications/{applicationId}/policy",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "PutApplicationPolicyRequest"
+      },
+      "output": {
+        "shape": "PutApplicationPolicyResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Sets the permission policy for an application. For the list of actions supported for this operation, see\n <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>\n .</p>"
+    },
+    "UnshareApplication": {
+      "name": "UnshareApplication",
+      "http": {
+        "method": "POST",
+        "requestUri": "/applications/{applicationId}/unshare",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "UnshareApplicationRequest"
+      },
+      "errors": [
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      ],
+      "documentation": "<p>Unshares an application from an AWS Organization.</p><p>This operation can be called only from the organization's master account.</p>"
+    },
+    "UpdateApplication": {
+      "name": "UpdateApplication",
+      "http": {
+        "method": "PATCH",
+        "requestUri": "/applications/{applicationId}",
+        "responseCode": 200
+      },
+      "input": {
+        "shape": "UpdateApplicationRequest"
+      },
+      "output": {
+        "shape": "UpdateApplicationResponse",
+        "documentation": "<p>Success</p>"
+      },
+      "errors": [
+        {
+          "shape": "BadRequestException",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        },
+        {
+          "shape": "InternalServerErrorException",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        },
+        {
+          "shape": "ForbiddenException",
+          "documentation": "<p>The client is not authenticated.</p>"
+        },
+        {
+          "shape": "NotFoundException",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        },
+        {
+          "shape": "TooManyRequestsException",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        },
+        {
+          "shape": "ConflictException",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      ],
+      "documentation": "<p>Updates the specified application.</p>"
     }
   },
-  "shapes" : {
-    "Application" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "IsVerifiedAuthor" : {
-          "shape" : "__boolean",
-          "locationName" : "isVerifiedAuthor",
-          "documentation" : "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from https://spdx.org/licenses/.</p>"
-        },
-        "VerifiedAuthorUrl" : {
-          "shape" : "__string",
-          "locationName" : "verifiedAuthorUrl",
-          "documentation" : "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
-        },
-        "Version" : {
-          "shape" : "Version",
-          "locationName" : "version",
-          "documentation" : "<p>Version information about the application.</p>"
-        }
-      },
-      "documentation" : "<p>Details about the application.</p>",
-      "required" : [ "Description", "Author", "ApplicationId", "Name" ]
-    },
-    "ApplicationDependencyPage" : {
-      "type" : "structure",
-      "members" : {
-        "Dependencies" : {
-          "shape" : "__listOfApplicationDependencySummary",
-          "locationName" : "dependencies",
-          "documentation" : "<p>An array of application summaries nested in the application.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        }
-      },
-      "documentation" : "<p>A list of application summaries nested in the application.</p>",
-      "required" : [ "Dependencies" ]
-    },
-    "ApplicationDependencySummary" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the nested application.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the nested application.</p>"
-        }
-      },
-      "documentation" : "<p>A nested application summary.</p>",
-      "required" : [ "ApplicationId", "SemanticVersion" ]
-    },
-    "ApplicationPage" : {
-      "type" : "structure",
-      "members" : {
-        "Applications" : {
-          "shape" : "__listOfApplicationSummary",
-          "locationName" : "applications",
-          "documentation" : "<p>An array of application summaries.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        }
-      },
-      "documentation" : "<p>A list of application details.</p>",
-      "required" : [ "Applications" ]
-    },
-    "ApplicationPolicy" : {
-      "type" : "structure",
-      "members" : {
-        "Statements" : {
-          "shape" : "__listOfApplicationPolicyStatement",
-          "locationName" : "statements",
-          "documentation" : "<p>An array of policy statements applied to the application.</p>"
-        }
-      },
-      "documentation" : "<p>Policy statements applied to the application.</p>",
-      "required" : [ "Statements" ]
-    },
-    "ApplicationPolicyStatement" : {
-      "type" : "structure",
-      "members" : {
-        "Actions" : {
-          "shape" : "__listOf__string",
-          "locationName" : "actions",
-          "documentation" : "<p>For the list of actions supported for this operation, see <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>.</p>"
-        },
-        "PrincipalOrgIDs" : {
-          "shape" : "__listOf__string",
-          "locationName" : "principalOrgIDs",
-          "documentation" : "<p>An array of PrinciplalOrgIDs, which corresponds to AWS IAM <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#principal-org-id\">aws:PrincipalOrgID</a> global condition key.</p>"
-        },
-        "Principals" : {
-          "shape" : "__listOf__string",
-          "locationName" : "principals",
-          "documentation" : "<p>An array of AWS account IDs, or * to make the application public.</p>"
-        },
-        "StatementId" : {
-          "shape" : "__string",
-          "locationName" : "statementId",
-          "documentation" : "<p>A unique ID for the statement.</p>"
-        }
-      },
-      "documentation" : "<p>Policy statement applied to the application.</p>",
-      "required" : [ "Principals", "Actions" ]
-    },
-    "ApplicationSummary" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
-        }
-      },
-      "documentation" : "<p>Summary of details about the application.</p>",
-      "required" : [ "Description", "Author", "ApplicationId", "Name" ]
-    },
-    "ApplicationVersionPage" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionSummary",
-          "locationName" : "versions",
-          "documentation" : "<p>An array of version summaries for the application.</p>"
-        }
-      },
-      "documentation" : "<p>A list of version summaries for the application.</p>",
-      "required" : [ "Versions" ]
-    },
-    "BadRequestException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>400</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>One of the parameters in the request is invalid.</p>"
-        }
-      },
-      "documentation" : "<p>One of the parameters in the request is invalid.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 400
-      }
-    },
-    "Capability" : {
-      "type" : "string",
-      "documentation" : "<p>Values that must be specified in order to deploy some applications.</p>",
-      "enum" : [ "CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND", "CAPABILITY_RESOURCE_POLICY" ]
-    },
-    "ChangeSetDetails" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "ChangeSetId" : {
-          "shape" : "__string",
-          "locationName" : "changeSetId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the change set.</p><p>Length constraints: Minimum length of 1.</p><p>Pattern: ARN:[-a-zA-Z0-9:/]*</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "StackId" : {
-          "shape" : "__string",
-          "locationName" : "stackId",
-          "documentation" : "<p>The unique ID of the stack.</p>"
-        }
-      },
-      "documentation" : "<p>Details of the change set.</p>",
-      "required" : [ "ChangeSetId", "ApplicationId", "StackId", "SemanticVersion" ]
-    },
-    "ConflictException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>409</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>The resource already exists.</p>"
-        }
-      },
-      "documentation" : "<p>The resource already exists.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 409
-      }
-    },
-    "CreateApplicationInput" : {
-      "type" : "structure",
-      "members" : {
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseBody" : {
-          "shape" : "__string",
-          "locationName" : "licenseBody",
-          "documentation" : "<p>A local text file that contains the license of the app that matches the spdxLicenseID value of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application that you want to publish.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeBody" : {
-          "shape" : "__string",
-          "locationName" : "readmeBody",
-          "documentation" : "<p>A local text readme file in Markdown language that contains a more detailed description of the application and how it works.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
-        },
-        "TemplateBody" : {
-          "shape" : "__string",
-          "locationName" : "templateBody",
-          "documentation" : "<p>The local raw packaged AWS SAM template file of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the S3 object containing the packaged AWS SAM template of your application.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
-        }
-      },
-      "documentation" : "<p>Create an application request.</p>",
-      "required" : [ "Description", "Name", "Author" ]
-    },
-    "CreateApplicationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseBody" : {
-          "shape" : "__string",
-          "locationName" : "licenseBody",
-          "documentation" : "<p>A local text file that contains the license of the app that matches the spdxLicenseID value of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application that you want to publish.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeBody" : {
-          "shape" : "__string",
-          "locationName" : "readmeBody",
-          "documentation" : "<p>A local text readme file in Markdown language that contains a more detailed description of the application and how it works.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
-        },
-        "TemplateBody" : {
-          "shape" : "__string",
-          "locationName" : "templateBody",
-          "documentation" : "<p>The local raw packaged AWS SAM template file of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the S3 object containing the packaged AWS SAM template of your application.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
-        }
-      },
-      "required" : [ "Description", "Name", "Author" ]
-    },
-    "CreateApplicationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "IsVerifiedAuthor" : {
-          "shape" : "__boolean",
-          "locationName" : "isVerifiedAuthor",
-          "documentation" : "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from https://spdx.org/licenses/.</p>"
-        },
-        "VerifiedAuthorUrl" : {
-          "shape" : "__string",
-          "locationName" : "verifiedAuthorUrl",
-          "documentation" : "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
-        },
-        "Version" : {
-          "shape" : "Version",
-          "locationName" : "version",
-          "documentation" : "<p>Version information about the application.</p>"
-        }
-      }
-    },
-    "CreateApplicationVersionInput" : {
-      "type" : "structure",
-      "members" : {
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "TemplateBody" : {
-          "shape" : "__string",
-          "locationName" : "templateBody",
-          "documentation" : "<p>The raw packaged AWS SAM template of your application.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the packaged AWS SAM template of your application.</p>"
-        }
-      },
-      "documentation" : "<p>Create a version request.</p>"
-    },
-    "CreateApplicationVersionRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the new version.</p>"
-        },
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "TemplateBody" : {
-          "shape" : "__string",
-          "locationName" : "templateBody",
-          "documentation" : "<p>The raw packaged AWS SAM template of your application.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the packaged AWS SAM template of your application.</p>"
-        }
-      },
-      "required" : [ "ApplicationId", "SemanticVersion" ]
-    },
-    "CreateApplicationVersionResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "ParameterDefinitions" : {
-          "shape" : "__listOfParameterDefinition",
-          "locationName" : "parameterDefinitions",
-          "documentation" : "<p>An array of parameter types supported by the application.</p>"
-        },
-        "RequiredCapabilities" : {
-          "shape" : "__listOfCapability",
-          "locationName" : "requiredCapabilities",
-          "documentation" : "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS::TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
-        },
-        "ResourcesSupported" : {
-          "shape" : "__boolean",
-          "locationName" : "resourcesSupported",
-          "documentation" : "<p>Whether all of the AWS resources contained in this application are supported in the region\n in which it is being retrieved.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the packaged AWS SAM template of your application.</p>"
-        }
-      }
-    },
-    "CreateCloudFormationChangeSetInput" : {
-      "type" : "structure",
-      "members" : {
-        "Capabilities" : {
-          "shape" : "__listOf__string",
-          "locationName" : "capabilities",
-          "documentation" : "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS:TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
-        },
-        "ChangeSetName" : {
-          "shape" : "__string",
-          "locationName" : "changeSetName",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "ClientToken" : {
-          "shape" : "__string",
-          "locationName" : "clientToken",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "NotificationArns" : {
-          "shape" : "__listOf__string",
-          "locationName" : "notificationArns",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "ParameterOverrides" : {
-          "shape" : "__listOfParameterValue",
-          "locationName" : "parameterOverrides",
-          "documentation" : "<p>A list of parameter values for the parameters of the application.</p>"
-        },
-        "ResourceTypes" : {
-          "shape" : "__listOf__string",
-          "locationName" : "resourceTypes",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "RollbackConfiguration" : {
-          "shape" : "RollbackConfiguration",
-          "locationName" : "rollbackConfiguration",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "StackName" : {
-          "shape" : "__string",
-          "locationName" : "stackName",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "Tags" : {
-          "shape" : "__listOfTag",
-          "locationName" : "tags",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        }
-      },
-      "documentation" : "<p>Create an application change set request.</p>",
-      "required" : [ "StackName" ]
-    },
-    "CreateCloudFormationChangeSetRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "Capabilities" : {
-          "shape" : "__listOf__string",
-          "locationName" : "capabilities",
-          "documentation" : "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS:TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
-        },
-        "ChangeSetName" : {
-          "shape" : "__string",
-          "locationName" : "changeSetName",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "ClientToken" : {
-          "shape" : "__string",
-          "locationName" : "clientToken",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "NotificationArns" : {
-          "shape" : "__listOf__string",
-          "locationName" : "notificationArns",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "ParameterOverrides" : {
-          "shape" : "__listOfParameterValue",
-          "locationName" : "parameterOverrides",
-          "documentation" : "<p>A list of parameter values for the parameters of the application.</p>"
-        },
-        "ResourceTypes" : {
-          "shape" : "__listOf__string",
-          "locationName" : "resourceTypes",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "RollbackConfiguration" : {
-          "shape" : "RollbackConfiguration",
-          "locationName" : "rollbackConfiguration",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "StackName" : {
-          "shape" : "__string",
-          "locationName" : "stackName",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "Tags" : {
-          "shape" : "__listOfTag",
-          "locationName" : "tags",
-          "documentation" : "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        }
-      },
-      "required" : [ "ApplicationId", "StackName" ]
-    },
-    "CreateCloudFormationChangeSetResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "ChangeSetId" : {
-          "shape" : "__string",
-          "locationName" : "changeSetId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the change set.</p><p>Length constraints: Minimum length of 1.</p><p>Pattern: ARN:[-a-zA-Z0-9:/]*</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "StackId" : {
-          "shape" : "__string",
-          "locationName" : "stackId",
-          "documentation" : "<p>The unique ID of the stack.</p>"
-        }
-      }
-    },
-    "CreateCloudFormationTemplateRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "CreateCloudFormationTemplateResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "ExpirationTime" : {
-          "shape" : "__string",
-          "locationName" : "expirationTime",
-          "documentation" : "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "Status" : {
-          "shape" : "Status",
-          "locationName" : "status",
-          "documentation" : "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
-        }
-      }
-    },
-    "DeleteApplicationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "ForbiddenException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>403</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>The client is not authenticated.</p>"
-        }
-      },
-      "documentation" : "<p>The client is not authenticated.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 403
-      }
-    },
-    "GetApplicationPolicyRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "GetApplicationPolicyResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Statements" : {
-          "shape" : "__listOfApplicationPolicyStatement",
-          "locationName" : "statements",
-          "documentation" : "<p>An array of policy statements applied to the application.</p>"
-        }
-      }
-    },
-    "GetApplicationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application to get.</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "GetApplicationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "IsVerifiedAuthor" : {
-          "shape" : "__boolean",
-          "locationName" : "isVerifiedAuthor",
-          "documentation" : "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from https://spdx.org/licenses/.</p>"
-        },
-        "VerifiedAuthorUrl" : {
-          "shape" : "__string",
-          "locationName" : "verifiedAuthorUrl",
-          "documentation" : "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
-        },
-        "Version" : {
-          "shape" : "Version",
-          "locationName" : "version",
-          "documentation" : "<p>Version information about the application.</p>"
-        }
-      }
-    },
-    "GetCloudFormationTemplateRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        }
-      },
-      "required" : [ "ApplicationId", "TemplateId" ]
-    },
-    "GetCloudFormationTemplateResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "ExpirationTime" : {
-          "shape" : "__string",
-          "locationName" : "expirationTime",
-          "documentation" : "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "Status" : {
-          "shape" : "Status",
-          "locationName" : "status",
-          "documentation" : "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
-        }
-      }
-    },
-    "InternalServerErrorException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>500</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
-        }
-      },
-      "documentation" : "<p>The AWS Serverless Application Repository service encountered an internal error.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 500
-      }
-    },
-    "ListApplicationDependenciesRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "MaxItems" : {
-          "shape" : "MaxItems",
-          "location" : "querystring",
-          "locationName" : "maxItems",
-          "documentation" : "<p>The total number of items to return.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>A token to specify where to start paginating.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application to get.</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "ListApplicationDependenciesResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Dependencies" : {
-          "shape" : "__listOfApplicationDependencySummary",
-          "locationName" : "dependencies",
-          "documentation" : "<p>An array of application summaries nested in the application.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        }
-      }
-    },
-    "ListApplicationVersionsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "MaxItems" : {
-          "shape" : "MaxItems",
-          "location" : "querystring",
-          "locationName" : "maxItems",
-          "documentation" : "<p>The total number of items to return.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>A token to specify where to start paginating.</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "ListApplicationVersionsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        },
-        "Versions" : {
-          "shape" : "__listOfVersionSummary",
-          "locationName" : "versions",
-          "documentation" : "<p>An array of version summaries for the application.</p>"
-        }
-      }
-    },
-    "ListApplicationsRequest" : {
-      "type" : "structure",
-      "members" : {
-        "MaxItems" : {
-          "shape" : "MaxItems",
-          "location" : "querystring",
-          "locationName" : "maxItems",
-          "documentation" : "<p>The total number of items to return.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "location" : "querystring",
-          "locationName" : "nextToken",
-          "documentation" : "<p>A token to specify where to start paginating.</p>"
-        }
-      }
-    },
-    "ListApplicationsResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Applications" : {
-          "shape" : "__listOfApplicationSummary",
-          "locationName" : "applications",
-          "documentation" : "<p>An array of application summaries.</p>"
-        },
-        "NextToken" : {
-          "shape" : "__string",
-          "locationName" : "nextToken",
-          "documentation" : "<p>The token to request the next page of results.</p>"
-        }
-      }
-    },
-    "MaxItems" : {
-      "type" : "integer",
-      "min" : 1,
-      "max" : 100
-    },
-    "NotFoundException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>404</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
-        }
-      },
-      "documentation" : "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 404
-      }
-    },
-    "ParameterDefinition" : {
-      "type" : "structure",
-      "members" : {
-        "AllowedPattern" : {
-          "shape" : "__string",
-          "locationName" : "allowedPattern",
-          "documentation" : "<p>A regular expression that represents the patterns to allow for String types.</p>"
-        },
-        "AllowedValues" : {
-          "shape" : "__listOf__string",
-          "locationName" : "allowedValues",
-          "documentation" : "<p>An array containing the list of values allowed for the parameter.</p>"
-        },
-        "ConstraintDescription" : {
-          "shape" : "__string",
-          "locationName" : "constraintDescription",
-          "documentation" : "<p>A string that explains a constraint when the constraint is violated. For example, without a constraint description,\n a parameter that has an allowed pattern of [A-Za-z0-9]+ displays the following error message when the user\n specifies an invalid value:</p><p>\n Malformed input-Parameter MyParameter must match pattern [A-Za-z0-9]+\n </p><p>By adding a constraint description, such as \"must contain only uppercase and lowercase letters and numbers,\" you can display\n the following customized error message:</p><p>\n Malformed input-Parameter MyParameter must contain only uppercase and lowercase letters and numbers.\n </p>"
-        },
-        "DefaultValue" : {
-          "shape" : "__string",
-          "locationName" : "defaultValue",
-          "documentation" : "<p>A value of the appropriate type for the template to use if no value is specified when a stack is created.\n If you define constraints for the parameter, you must specify a value that adheres to those constraints.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>A string of up to 4,000 characters that describes the parameter.</p>"
-        },
-        "MaxLength" : {
-          "shape" : "__integer",
-          "locationName" : "maxLength",
-          "documentation" : "<p>An integer value that determines the largest number of characters that you want to allow for String types.</p>"
-        },
-        "MaxValue" : {
-          "shape" : "__integer",
-          "locationName" : "maxValue",
-          "documentation" : "<p>A numeric value that determines the largest numeric value that you want to allow for Number types.</p>"
-        },
-        "MinLength" : {
-          "shape" : "__integer",
-          "locationName" : "minLength",
-          "documentation" : "<p>An integer value that determines the smallest number of characters that you want to allow for String types.</p>"
-        },
-        "MinValue" : {
-          "shape" : "__integer",
-          "locationName" : "minValue",
-          "documentation" : "<p>A numeric value that determines the smallest numeric value that you want to allow for Number types.</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the parameter.</p>"
-        },
-        "NoEcho" : {
-          "shape" : "__boolean",
-          "locationName" : "noEcho",
-          "documentation" : "<p>Whether to mask the parameter value whenever anyone makes a call that describes the stack. If you set the\n value to true, the parameter value is masked with asterisks (*****).</p>"
-        },
-        "ReferencedByResources" : {
-          "shape" : "__listOf__string",
-          "locationName" : "referencedByResources",
-          "documentation" : "<p>A list of AWS SAM resources that use this parameter.</p>"
-        },
-        "Type" : {
-          "shape" : "__string",
-          "locationName" : "type",
-          "documentation" : "<p>The type of the parameter.</p><p>Valid values: String | Number | List&lt;Number> | CommaDelimitedList\n </p><p>\n String: A literal string.</p><p>For example, users can specify \"MyUserName\".</p><p>\n Number: An integer or float. AWS CloudFormation validates the parameter value as a number. However, when you use the\n parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a string.</p><p>For example, users might specify \"8888\".</p><p>\n List&lt;Number>: An array of integers or floats that are separated by commas. AWS CloudFormation validates the parameter value as numbers. However, when\n you use the parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a list of strings.</p><p>For example, users might specify \"80,20\", and then Ref results in [\"80\",\"20\"].</p><p>\n CommaDelimitedList: An array of literal strings that are separated by commas. The total number of strings should be one more than the total number of commas.\n Also, each member string is space-trimmed.</p><p>For example, users might specify \"test,dev,prod\", and then Ref results in [\"test\",\"dev\",\"prod\"].</p>"
-        }
-      },
-      "documentation" : "<p>Parameters supported by the application.</p>",
-      "required" : [ "ReferencedByResources", "Name" ]
-    },
-    "ParameterValue" : {
-      "type" : "structure",
-      "members" : {
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The key associated with the parameter. If you don't specify a key and value for a particular parameter, AWS CloudFormation\n uses the default value that is specified in your template.</p>"
-        },
-        "Value" : {
-          "shape" : "__string",
-          "locationName" : "value",
-          "documentation" : "<p>The input value associated with the parameter.</p>"
-        }
-      },
-      "documentation" : "<p>Parameter value of the application.</p>",
-      "required" : [ "Value", "Name" ]
-    },
-    "PutApplicationPolicyRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "Statements" : {
-          "shape" : "__listOfApplicationPolicyStatement",
-          "locationName" : "statements",
-          "documentation" : "<p>An array of policy statements applied to the application.</p>"
-        }
-      },
-      "required" : [ "ApplicationId", "Statements" ]
-    },
-    "PutApplicationPolicyResponse" : {
-      "type" : "structure",
-      "members" : {
-        "Statements" : {
-          "shape" : "__listOfApplicationPolicyStatement",
-          "locationName" : "statements",
-          "documentation" : "<p>An array of policy statements applied to the application.</p>"
-        }
-      }
-    },
-    "RollbackConfiguration" : {
-      "type" : "structure",
-      "members" : {
-        "MonitoringTimeInMinutes" : {
-          "shape" : "__integer",
-          "locationName" : "monitoringTimeInMinutes",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
-        },
-        "RollbackTriggers" : {
-          "shape" : "__listOfRollbackTrigger",
-          "locationName" : "rollbackTriggers",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
-        }
-      },
-      "documentation" : "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
-    },
-    "RollbackTrigger" : {
-      "type" : "structure",
-      "members" : {
-        "Arn" : {
-          "shape" : "__string",
-          "locationName" : "arn",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>"
-        },
-        "Type" : {
-          "shape" : "__string",
-          "locationName" : "type",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>"
-        }
-      },
-      "documentation" : "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>",
-      "required" : [ "Type", "Arn" ]
-    },
-    "Status" : {
-      "type" : "string",
-      "enum" : [ "PREPARING", "ACTIVE", "EXPIRED" ]
-    },
-    "Tag" : {
-      "type" : "structure",
-      "members" : {
-        "Key" : {
-          "shape" : "__string",
-          "locationName" : "key",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">Tag</a>\n </i> Data Type.</p>"
-        },
-        "Value" : {
-          "shape" : "__string",
-          "locationName" : "value",
-          "documentation" : "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">\n Tag</a>\n </i>\n Data Type.</p>"
-        }
-      },
-      "documentation" : "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">Tag</a>\n </i> Data Type.</p>",
-      "required" : [ "Value", "Key" ]
-    },
-    "TemplateDetails" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "ExpirationTime" : {
-          "shape" : "__string",
-          "locationName" : "expirationTime",
-          "documentation" : "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "Status" : {
-          "shape" : "Status",
-          "locationName" : "status",
-          "documentation" : "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
-        },
-        "TemplateId" : {
-          "shape" : "__string",
-          "locationName" : "templateId",
-          "documentation" : "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
-        }
-      },
-      "documentation" : "<p>Details of the template.</p>",
-      "required" : [ "Status", "TemplateUrl", "CreationTime", "ExpirationTime", "ApplicationId", "TemplateId", "SemanticVersion" ]
-    },
-    "TooManyRequestsException" : {
-      "type" : "structure",
-      "members" : {
-        "ErrorCode" : {
-          "shape" : "__string",
-          "locationName" : "errorCode",
-          "documentation" : "<p>429</p>"
-        },
-        "Message" : {
-          "shape" : "__string",
-          "locationName" : "message",
-          "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
-        }
-      },
-      "documentation" : "<p>The client is sending more than the allowed number of requests per unit of time.</p>",
-      "exception" : true,
-      "error" : {
-        "httpStatusCode" : 429
-      }
-    },
-    "UnshareApplicationInput" : {
-      "type" : "structure",
-      "members" : {
-        "OrganizationId" : {
-          "shape" : "__string",
-          "locationName" : "organizationId",
-          "documentation" : "<p>The AWS Organization ID to unshare the application from.</p>"
-        }
-      },
-      "required" : [ "OrganizationId" ],
-      "documentation":"<p>Unshare application request.</p>"
-    },
-    "UnshareApplicationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "OrganizationId" : {
-          "shape" : "__string",
-          "locationName" : "organizationId",
-          "documentation" : "<p>The AWS Organization ID to unshare the application from.</p>"
-        }
-      },
-      "required" : [ "ApplicationId", "OrganizationId" ]
-    },
-    "UpdateApplicationInput" : {
-      "type" : "structure",
-      "members" : {
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "ReadmeBody" : {
-          "shape" : "__string",
-          "locationName" : "readmeBody",
-          "documentation" : "<p>A text readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        }
-      },
-      "documentation" : "<p>Update the application request.</p>"
-    },
-    "UpdateApplicationRequest" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "location" : "uri",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The Amazon Resource Name (ARN) of the application.</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "ReadmeBody" : {
-          "shape" : "__string",
-          "locationName" : "readmeBody",
-          "documentation" : "<p>A text readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        }
-      },
-      "required" : [ "ApplicationId" ]
-    },
-    "UpdateApplicationResponse" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "Author" : {
-          "shape" : "__string",
-          "locationName" : "author",
-          "documentation" : "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "Description" : {
-          "shape" : "__string",
-          "locationName" : "description",
-          "documentation" : "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
-        },
-        "HomePageUrl" : {
-          "shape" : "__string",
-          "locationName" : "homePageUrl",
-          "documentation" : "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
-        },
-        "IsVerifiedAuthor" : {
-          "shape" : "__boolean",
-          "locationName" : "isVerifiedAuthor",
-          "documentation" : "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
-        },
-        "Labels" : {
-          "shape" : "__listOf__string",
-          "locationName" : "labels",
-          "documentation" : "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
-        },
-        "LicenseUrl" : {
-          "shape" : "__string",
-          "locationName" : "licenseUrl",
-          "documentation" : "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
-        },
-        "Name" : {
-          "shape" : "__string",
-          "locationName" : "name",
-          "documentation" : "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
-        },
-        "ReadmeUrl" : {
-          "shape" : "__string",
-          "locationName" : "readmeUrl",
-          "documentation" : "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
-        },
-        "SpdxLicenseId" : {
-          "shape" : "__string",
-          "locationName" : "spdxLicenseId",
-          "documentation" : "<p>A valid identifier from https://spdx.org/licenses/.</p>"
-        },
-        "VerifiedAuthorUrl" : {
-          "shape" : "__string",
-          "locationName" : "verifiedAuthorUrl",
-          "documentation" : "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
-        },
-        "Version" : {
-          "shape" : "Version",
-          "locationName" : "version",
-          "documentation" : "<p>Version information about the application.</p>"
-        }
-      }
-    },
-    "Version" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "ParameterDefinitions" : {
-          "shape" : "__listOfParameterDefinition",
-          "locationName" : "parameterDefinitions",
-          "documentation" : "<p>An array of parameter types supported by the application.</p>"
-        },
-        "RequiredCapabilities" : {
-          "shape" : "__listOfCapability",
-          "locationName" : "requiredCapabilities",
-          "documentation" : "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS::TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
-        },
-        "ResourcesSupported" : {
-          "shape" : "__boolean",
-          "locationName" : "resourcesSupported",
-          "documentation" : "<p>Whether all of the AWS resources contained in this application are supported in the region\n in which it is being retrieved.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "SourceCodeArchiveUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeArchiveUrl",
-          "documentation" : "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        },
-        "TemplateUrl" : {
-          "shape" : "__string",
-          "locationName" : "templateUrl",
-          "documentation" : "<p>A link to the packaged AWS SAM template of your application.</p>"
-        }
-      },
-      "documentation" : "<p>Application version details.</p>",
-      "required" : [ "TemplateUrl", "ParameterDefinitions", "ResourcesSupported", "CreationTime", "RequiredCapabilities", "ApplicationId", "SemanticVersion" ]
-    },
-    "VersionSummary" : {
-      "type" : "structure",
-      "members" : {
-        "ApplicationId" : {
-          "shape" : "__string",
-          "locationName" : "applicationId",
-          "documentation" : "<p>The application Amazon Resource Name (ARN).</p>"
-        },
-        "CreationTime" : {
-          "shape" : "__string",
-          "locationName" : "creationTime",
-          "documentation" : "<p>The date and time this resource was created.</p>"
-        },
-        "SemanticVersion" : {
-          "shape" : "__string",
-          "locationName" : "semanticVersion",
-          "documentation" : "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
-        },
-        "SourceCodeUrl" : {
-          "shape" : "__string",
-          "locationName" : "sourceCodeUrl",
-          "documentation" : "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
-        }
-      },
-      "documentation" : "<p>An application version summary.</p>",
-      "required" : [ "CreationTime", "ApplicationId", "SemanticVersion" ]
-    },
-    "__boolean" : {
-      "type" : "boolean"
-    },
-    "__double" : {
-      "type" : "double"
-    },
-    "__integer" : {
-      "type" : "integer"
-    },
-    "__listOfApplicationDependencySummary" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ApplicationDependencySummary"
-      }
-    },
-    "__listOfApplicationPolicyStatement" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ApplicationPolicyStatement"
-      }
-    },
-    "__listOfApplicationSummary" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ApplicationSummary"
-      }
-    },
-    "__listOfCapability" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Capability"
-      }
-    },
-    "__listOfParameterDefinition" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ParameterDefinition"
-      }
-    },
-    "__listOfParameterValue" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "ParameterValue"
-      }
-    },
-    "__listOfRollbackTrigger" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "RollbackTrigger"
-      }
-    },
-    "__listOfTag" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "Tag"
-      }
-    },
-    "__listOfVersionSummary" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "VersionSummary"
-      }
-    },
-    "__listOf__string" : {
-      "type" : "list",
-      "member" : {
-        "shape" : "__string"
+  "shapes": {
+    "Application": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "IsVerifiedAuthor": {
+          "shape": "__boolean",
+          "locationName": "isVerifiedAuthor",
+          "documentation": "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from https://spdx.org/licenses/.</p>"
+        },
+        "VerifiedAuthorUrl": {
+          "shape": "__string",
+          "locationName": "verifiedAuthorUrl",
+          "documentation": "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
+        },
+        "Version": {
+          "shape": "Version",
+          "locationName": "version",
+          "documentation": "<p>Version information about the application.</p>"
+        }
+      },
+      "documentation": "<p>Details about the application.</p>",
+      "required": [
+        "Description",
+        "Author",
+        "ApplicationId",
+        "Name"
+      ]
+    },
+    "ApplicationDependencyPage": {
+      "type": "structure",
+      "members": {
+        "Dependencies": {
+          "shape": "__listOfApplicationDependencySummary",
+          "locationName": "dependencies",
+          "documentation": "<p>An array of application summaries nested in the application.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        }
+      },
+      "documentation": "<p>A list of application summaries nested in the application.</p>",
+      "required": [
+        "Dependencies"
+      ]
+    },
+    "ApplicationDependencySummary": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the nested application.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the nested application.</p>"
+        }
+      },
+      "documentation": "<p>A nested application summary.</p>",
+      "required": [
+        "ApplicationId",
+        "SemanticVersion"
+      ]
+    },
+    "ApplicationPage": {
+      "type": "structure",
+      "members": {
+        "Applications": {
+          "shape": "__listOfApplicationSummary",
+          "locationName": "applications",
+          "documentation": "<p>An array of application summaries.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        }
+      },
+      "documentation": "<p>A list of application details.</p>",
+      "required": [
+        "Applications"
+      ]
+    },
+    "ApplicationPolicy": {
+      "type": "structure",
+      "members": {
+        "Statements": {
+          "shape": "__listOfApplicationPolicyStatement",
+          "locationName": "statements",
+          "documentation": "<p>An array of policy statements applied to the application.</p>"
+        }
+      },
+      "documentation": "<p>Policy statements applied to the application.</p>",
+      "required": [
+        "Statements"
+      ]
+    },
+    "ApplicationPolicyStatement": {
+      "type": "structure",
+      "members": {
+        "Actions": {
+          "shape": "__listOf__string",
+          "locationName": "actions",
+          "documentation": "<p>For the list of actions supported for this operation, see <a href=\"https://docs.aws.amazon.com/serverlessrepo/latest/devguide/access-control-resource-based.html#application-permissions\">Application \n Permissions</a>.</p>"
+        },
+        "PrincipalOrgIDs": {
+          "shape": "__listOf__string",
+          "locationName": "principalOrgIDs",
+          "documentation": "<p>An array of PrinciplalOrgIDs, which corresponds to AWS IAM <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#principal-org-id\">aws:PrincipalOrgID</a> global condition key.</p>"
+        },
+        "Principals": {
+          "shape": "__listOf__string",
+          "locationName": "principals",
+          "documentation": "<p>An array of AWS account IDs, or * to make the application public.</p>"
+        },
+        "StatementId": {
+          "shape": "__string",
+          "locationName": "statementId",
+          "documentation": "<p>A unique ID for the statement.</p>"
+        }
+      },
+      "documentation": "<p>Policy statement applied to the application.</p>",
+      "required": [
+        "Principals",
+        "Actions"
+      ]
+    },
+    "ApplicationSummary": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
+        }
+      },
+      "documentation": "<p>Summary of details about the application.</p>",
+      "required": [
+        "Description",
+        "Author",
+        "ApplicationId",
+        "Name"
+      ]
+    },
+    "ApplicationVersionPage": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        },
+        "Versions": {
+          "shape": "__listOfVersionSummary",
+          "locationName": "versions",
+          "documentation": "<p>An array of version summaries for the application.</p>"
+        }
+      },
+      "documentation": "<p>A list of version summaries for the application.</p>",
+      "required": [
+        "Versions"
+      ]
+    },
+    "BadRequestException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>400</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>One of the parameters in the request is invalid.</p>"
+        }
+      },
+      "documentation": "<p>One of the parameters in the request is invalid.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 400
+      }
+    },
+    "Capability": {
+      "type": "string",
+      "documentation": "<p>Values that must be specified in order to deploy some applications.</p>",
+      "enum": [
+        "CAPABILITY_IAM",
+        "CAPABILITY_NAMED_IAM",
+        "CAPABILITY_AUTO_EXPAND",
+        "CAPABILITY_RESOURCE_POLICY"
+      ]
+    },
+    "ChangeSetDetails": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "ChangeSetId": {
+          "shape": "__string",
+          "locationName": "changeSetId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the change set.</p><p>Length constraints: Minimum length of 1.</p><p>Pattern: ARN:[-a-zA-Z0-9:/]*</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "StackId": {
+          "shape": "__string",
+          "locationName": "stackId",
+          "documentation": "<p>The unique ID of the stack.</p>"
+        }
+      },
+      "documentation": "<p>Details of the change set.</p>",
+      "required": [
+        "ChangeSetId",
+        "ApplicationId",
+        "StackId",
+        "SemanticVersion"
+      ]
+    },
+    "ConflictException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>409</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>The resource already exists.</p>"
+        }
+      },
+      "documentation": "<p>The resource already exists.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 409
+      }
+    },
+    "CreateApplicationInput": {
+      "type": "structure",
+      "members": {
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseBody": {
+          "shape": "__string",
+          "locationName": "licenseBody",
+          "documentation": "<p>A local text file that contains the license of the app that matches the spdxLicenseID value of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application that you want to publish.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeBody": {
+          "shape": "__string",
+          "locationName": "readmeBody",
+          "documentation": "<p>A local text readme file in Markdown language that contains a more detailed description of the application and how it works.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
+        },
+        "TemplateBody": {
+          "shape": "__string",
+          "locationName": "templateBody",
+          "documentation": "<p>The local raw packaged AWS SAM template file of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the S3 object containing the packaged AWS SAM template of your application.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
+        }
+      },
+      "documentation": "<p>Create an application request.</p>",
+      "required": [
+        "Description",
+        "Name",
+        "Author"
+      ]
+    },
+    "CreateApplicationRequest": {
+      "type": "structure",
+      "members": {
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseBody": {
+          "shape": "__string",
+          "locationName": "licenseBody",
+          "documentation": "<p>A local text file that contains the license of the app that matches the spdxLicenseID value of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application that you want to publish.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeBody": {
+          "shape": "__string",
+          "locationName": "readmeBody",
+          "documentation": "<p>A local text readme file in Markdown language that contains a more detailed description of the application and how it works.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from <a href=\"https://spdx.org/licenses/\">https://spdx.org/licenses/</a>.</p>"
+        },
+        "TemplateBody": {
+          "shape": "__string",
+          "locationName": "templateBody",
+          "documentation": "<p>The local raw packaged AWS SAM template file of your application.\n The file has the format file://&lt;path>/&lt;filename>.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the S3 object containing the packaged AWS SAM template of your application.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>"
+        }
+      },
+      "required": [
+        "Description",
+        "Name",
+        "Author"
+      ]
+    },
+    "CreateApplicationResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "IsVerifiedAuthor": {
+          "shape": "__boolean",
+          "locationName": "isVerifiedAuthor",
+          "documentation": "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from https://spdx.org/licenses/.</p>"
+        },
+        "VerifiedAuthorUrl": {
+          "shape": "__string",
+          "locationName": "verifiedAuthorUrl",
+          "documentation": "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
+        },
+        "Version": {
+          "shape": "Version",
+          "locationName": "version",
+          "documentation": "<p>Version information about the application.</p>"
+        }
+      }
+    },
+    "CreateApplicationVersionInput": {
+      "type": "structure",
+      "members": {
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "TemplateBody": {
+          "shape": "__string",
+          "locationName": "templateBody",
+          "documentation": "<p>The raw packaged AWS SAM template of your application.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the packaged AWS SAM template of your application.</p>"
+        }
+      },
+      "documentation": "<p>Create a version request.</p>"
+    },
+    "CreateApplicationVersionRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the new version.</p>"
+        },
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "TemplateBody": {
+          "shape": "__string",
+          "locationName": "templateBody",
+          "documentation": "<p>The raw packaged AWS SAM template of your application.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the packaged AWS SAM template of your application.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId",
+        "SemanticVersion"
+      ]
+    },
+    "CreateApplicationVersionResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "ParameterDefinitions": {
+          "shape": "__listOfParameterDefinition",
+          "locationName": "parameterDefinitions",
+          "documentation": "<p>An array of parameter types supported by the application.</p>"
+        },
+        "RequiredCapabilities": {
+          "shape": "__listOfCapability",
+          "locationName": "requiredCapabilities",
+          "documentation": "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS::TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
+        },
+        "ResourcesSupported": {
+          "shape": "__boolean",
+          "locationName": "resourcesSupported",
+          "documentation": "<p>Whether all of the AWS resources contained in this application are supported in the region\n in which it is being retrieved.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the packaged AWS SAM template of your application.</p>"
+        }
+      }
+    },
+    "CreateCloudFormationChangeSetInput": {
+      "type": "structure",
+      "members": {
+        "Capabilities": {
+          "shape": "__listOf__string",
+          "locationName": "capabilities",
+          "documentation": "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS:TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
+        },
+        "ChangeSetName": {
+          "shape": "__string",
+          "locationName": "changeSetName",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "ClientToken": {
+          "shape": "__string",
+          "locationName": "clientToken",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "NotificationArns": {
+          "shape": "__listOf__string",
+          "locationName": "notificationArns",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "ParameterOverrides": {
+          "shape": "__listOfParameterValue",
+          "locationName": "parameterOverrides",
+          "documentation": "<p>A list of parameter values for the parameters of the application.</p>"
+        },
+        "ResourceTypes": {
+          "shape": "__listOf__string",
+          "locationName": "resourceTypes",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "RollbackConfiguration": {
+          "shape": "RollbackConfiguration",
+          "locationName": "rollbackConfiguration",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "StackName": {
+          "shape": "__string",
+          "locationName": "stackName",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "Tags": {
+          "shape": "__listOfTag",
+          "locationName": "tags",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        }
+      },
+      "documentation": "<p>Create an application change set request.</p>",
+      "required": [
+        "StackName"
+      ]
+    },
+    "CreateCloudFormationChangeSetRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "Capabilities": {
+          "shape": "__listOf__string",
+          "locationName": "capabilities",
+          "documentation": "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS:TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
+        },
+        "ChangeSetName": {
+          "shape": "__string",
+          "locationName": "changeSetName",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "ClientToken": {
+          "shape": "__string",
+          "locationName": "clientToken",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "NotificationArns": {
+          "shape": "__listOf__string",
+          "locationName": "notificationArns",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "ParameterOverrides": {
+          "shape": "__listOfParameterValue",
+          "locationName": "parameterOverrides",
+          "documentation": "<p>A list of parameter values for the parameters of the application.</p>"
+        },
+        "ResourceTypes": {
+          "shape": "__listOf__string",
+          "locationName": "resourceTypes",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "RollbackConfiguration": {
+          "shape": "RollbackConfiguration",
+          "locationName": "rollbackConfiguration",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "StackName": {
+          "shape": "__string",
+          "locationName": "stackName",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "Tags": {
+          "shape": "__listOfTag",
+          "locationName": "tags",
+          "documentation": "<p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet\">CreateChangeSet</a>\n </i> API.</p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        }
+      },
+      "required": [
+        "ApplicationId",
+        "StackName"
+      ]
+    },
+    "CreateCloudFormationChangeSetResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "ChangeSetId": {
+          "shape": "__string",
+          "locationName": "changeSetId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the change set.</p><p>Length constraints: Minimum length of 1.</p><p>Pattern: ARN:[-a-zA-Z0-9:/]*</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "StackId": {
+          "shape": "__string",
+          "locationName": "stackId",
+          "documentation": "<p>The unique ID of the stack.</p>"
+        }
+      }
+    },
+    "CreateCloudFormationTemplateRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "CreateCloudFormationTemplateResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "ExpirationTime": {
+          "shape": "__string",
+          "locationName": "expirationTime",
+          "documentation": "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "Status": {
+          "shape": "Status",
+          "locationName": "status",
+          "documentation": "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
+        }
+      }
+    },
+    "DeleteApplicationRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "ForbiddenException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>403</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>The client is not authenticated.</p>"
+        }
+      },
+      "documentation": "<p>The client is not authenticated.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 403
+      }
+    },
+    "GetApplicationPolicyRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "GetApplicationPolicyResponse": {
+      "type": "structure",
+      "members": {
+        "Statements": {
+          "shape": "__listOfApplicationPolicyStatement",
+          "locationName": "statements",
+          "documentation": "<p>An array of policy statements applied to the application.</p>"
+        }
+      }
+    },
+    "GetApplicationRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application to get.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "GetApplicationResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "IsVerifiedAuthor": {
+          "shape": "__boolean",
+          "locationName": "isVerifiedAuthor",
+          "documentation": "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from https://spdx.org/licenses/.</p>"
+        },
+        "VerifiedAuthorUrl": {
+          "shape": "__string",
+          "locationName": "verifiedAuthorUrl",
+          "documentation": "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
+        },
+        "Version": {
+          "shape": "Version",
+          "locationName": "version",
+          "documentation": "<p>Version information about the application.</p>"
+        }
+      }
+    },
+    "GetCloudFormationTemplateRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        }
+      },
+      "required": [
+        "ApplicationId",
+        "TemplateId"
+      ]
+    },
+    "GetCloudFormationTemplateResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "ExpirationTime": {
+          "shape": "__string",
+          "locationName": "expirationTime",
+          "documentation": "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "Status": {
+          "shape": "Status",
+          "locationName": "status",
+          "documentation": "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
+        }
+      }
+    },
+    "InternalServerErrorException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>500</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>"
+        }
+      },
+      "documentation": "<p>The AWS Serverless Application Repository service encountered an internal error.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 500
+      }
+    },
+    "ListApplicationDependenciesRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "MaxItems": {
+          "shape": "MaxItems",
+          "location": "querystring",
+          "locationName": "maxItems",
+          "documentation": "<p>The total number of items to return.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>A token to specify where to start paginating.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application to get.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "ListApplicationDependenciesResponse": {
+      "type": "structure",
+      "members": {
+        "Dependencies": {
+          "shape": "__listOfApplicationDependencySummary",
+          "locationName": "dependencies",
+          "documentation": "<p>An array of application summaries nested in the application.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        }
+      }
+    },
+    "ListApplicationVersionsRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "MaxItems": {
+          "shape": "MaxItems",
+          "location": "querystring",
+          "locationName": "maxItems",
+          "documentation": "<p>The total number of items to return.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>A token to specify where to start paginating.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "ListApplicationVersionsResponse": {
+      "type": "structure",
+      "members": {
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        },
+        "Versions": {
+          "shape": "__listOfVersionSummary",
+          "locationName": "versions",
+          "documentation": "<p>An array of version summaries for the application.</p>"
+        }
+      }
+    },
+    "ListApplicationsRequest": {
+      "type": "structure",
+      "members": {
+        "MaxItems": {
+          "shape": "MaxItems",
+          "location": "querystring",
+          "locationName": "maxItems",
+          "documentation": "<p>The total number of items to return.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "location": "querystring",
+          "locationName": "nextToken",
+          "documentation": "<p>A token to specify where to start paginating.</p>"
+        }
+      }
+    },
+    "ListApplicationsResponse": {
+      "type": "structure",
+      "members": {
+        "Applications": {
+          "shape": "__listOfApplicationSummary",
+          "locationName": "applications",
+          "documentation": "<p>An array of application summaries.</p>"
+        },
+        "NextToken": {
+          "shape": "__string",
+          "locationName": "nextToken",
+          "documentation": "<p>The token to request the next page of results.</p>"
+        }
+      }
+    },
+    "MaxItems": {
+      "type": "integer",
+      "min": 1,
+      "max": 100
+    },
+    "NotFoundException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>404</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>"
+        }
+      },
+      "documentation": "<p>The resource (for example, an access policy statement) specified in the request doesn't exist.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 404
+      }
+    },
+    "ParameterDefinition": {
+      "type": "structure",
+      "members": {
+        "AllowedPattern": {
+          "shape": "__string",
+          "locationName": "allowedPattern",
+          "documentation": "<p>A regular expression that represents the patterns to allow for String types.</p>"
+        },
+        "AllowedValues": {
+          "shape": "__listOf__string",
+          "locationName": "allowedValues",
+          "documentation": "<p>An array containing the list of values allowed for the parameter.</p>"
+        },
+        "ConstraintDescription": {
+          "shape": "__string",
+          "locationName": "constraintDescription",
+          "documentation": "<p>A string that explains a constraint when the constraint is violated. For example, without a constraint description,\n a parameter that has an allowed pattern of [A-Za-z0-9]+ displays the following error message when the user\n specifies an invalid value:</p><p>\n Malformed input-Parameter MyParameter must match pattern [A-Za-z0-9]+\n </p><p>By adding a constraint description, such as \"must contain only uppercase and lowercase letters and numbers,\" you can display\n the following customized error message:</p><p>\n Malformed input-Parameter MyParameter must contain only uppercase and lowercase letters and numbers.\n </p>"
+        },
+        "DefaultValue": {
+          "shape": "__string",
+          "locationName": "defaultValue",
+          "documentation": "<p>A value of the appropriate type for the template to use if no value is specified when a stack is created.\n If you define constraints for the parameter, you must specify a value that adheres to those constraints.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>A string of up to 4,000 characters that describes the parameter.</p>"
+        },
+        "MaxLength": {
+          "shape": "__integer",
+          "locationName": "maxLength",
+          "documentation": "<p>An integer value that determines the largest number of characters that you want to allow for String types.</p>"
+        },
+        "MaxValue": {
+          "shape": "__integer",
+          "locationName": "maxValue",
+          "documentation": "<p>A numeric value that determines the largest numeric value that you want to allow for Number types.</p>"
+        },
+        "MinLength": {
+          "shape": "__integer",
+          "locationName": "minLength",
+          "documentation": "<p>An integer value that determines the smallest number of characters that you want to allow for String types.</p>"
+        },
+        "MinValue": {
+          "shape": "__integer",
+          "locationName": "minValue",
+          "documentation": "<p>A numeric value that determines the smallest numeric value that you want to allow for Number types.</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the parameter.</p>"
+        },
+        "NoEcho": {
+          "shape": "__boolean",
+          "locationName": "noEcho",
+          "documentation": "<p>Whether to mask the parameter value whenever anyone makes a call that describes the stack. If you set the\n value to true, the parameter value is masked with asterisks (*****).</p>"
+        },
+        "ReferencedByResources": {
+          "shape": "__listOf__string",
+          "locationName": "referencedByResources",
+          "documentation": "<p>A list of AWS SAM resources that use this parameter.</p>"
+        },
+        "Type": {
+          "shape": "__string",
+          "locationName": "type",
+          "documentation": "<p>The type of the parameter.</p><p>Valid values: String | Number | List&lt;Number> | CommaDelimitedList\n </p><p>\n String: A literal string.</p><p>For example, users can specify \"MyUserName\".</p><p>\n Number: An integer or float. AWS CloudFormation validates the parameter value as a number. However, when you use the\n parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a string.</p><p>For example, users might specify \"8888\".</p><p>\n List&lt;Number>: An array of integers or floats that are separated by commas. AWS CloudFormation validates the parameter value as numbers. However, when\n you use the parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a list of strings.</p><p>For example, users might specify \"80,20\", and then Ref results in [\"80\",\"20\"].</p><p>\n CommaDelimitedList: An array of literal strings that are separated by commas. The total number of strings should be one more than the total number of commas.\n Also, each member string is space-trimmed.</p><p>For example, users might specify \"test,dev,prod\", and then Ref results in [\"test\",\"dev\",\"prod\"].</p>"
+        }
+      },
+      "documentation": "<p>Parameters supported by the application.</p>",
+      "required": [
+        "ReferencedByResources",
+        "Name"
+      ]
+    },
+    "ParameterValue": {
+      "type": "structure",
+      "members": {
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The key associated with the parameter. If you don't specify a key and value for a particular parameter, AWS CloudFormation\n uses the default value that is specified in your template.</p>"
+        },
+        "Value": {
+          "shape": "__string",
+          "locationName": "value",
+          "documentation": "<p>The input value associated with the parameter.</p>"
+        }
+      },
+      "documentation": "<p>Parameter value of the application.</p>",
+      "required": [
+        "Value",
+        "Name"
+      ]
+    },
+    "PutApplicationPolicyRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "Statements": {
+          "shape": "__listOfApplicationPolicyStatement",
+          "locationName": "statements",
+          "documentation": "<p>An array of policy statements applied to the application.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId",
+        "Statements"
+      ]
+    },
+    "PutApplicationPolicyResponse": {
+      "type": "structure",
+      "members": {
+        "Statements": {
+          "shape": "__listOfApplicationPolicyStatement",
+          "locationName": "statements",
+          "documentation": "<p>An array of policy statements applied to the application.</p>"
+        }
+      }
+    },
+    "RollbackConfiguration": {
+      "type": "structure",
+      "members": {
+        "MonitoringTimeInMinutes": {
+          "shape": "__integer",
+          "locationName": "monitoringTimeInMinutes",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
+        },
+        "RollbackTriggers": {
+          "shape": "__listOfRollbackTrigger",
+          "locationName": "rollbackTriggers",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
+        }
+      },
+      "documentation": "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackConfiguration\">RollbackConfiguration</a>\n </i> Data Type.</p>"
+    },
+    "RollbackTrigger": {
+      "type": "structure",
+      "members": {
+        "Arn": {
+          "shape": "__string",
+          "locationName": "arn",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>"
+        },
+        "Type": {
+          "shape": "__string",
+          "locationName": "type",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>"
+        }
+      },
+      "documentation": "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/RollbackTrigger\">RollbackTrigger</a>\n </i> Data Type.</p>",
+      "required": [
+        "Type",
+        "Arn"
+      ]
+    },
+    "Status": {
+      "type": "string",
+      "enum": [
+        "PREPARING",
+        "ACTIVE",
+        "EXPIRED"
+      ]
+    },
+    "Tag": {
+      "type": "structure",
+      "members": {
+        "Key": {
+          "shape": "__string",
+          "locationName": "key",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">Tag</a>\n </i> Data Type.</p>"
+        },
+        "Value": {
+          "shape": "__string",
+          "locationName": "value",
+          "documentation": "<p>This property corresponds to the content of the same name for the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">\n Tag</a>\n </i>\n Data Type.</p>"
+        }
+      },
+      "documentation": "<p>This property corresponds to the <i>AWS CloudFormation <a href=\"https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/Tag\">Tag</a>\n </i> Data Type.</p>",
+      "required": [
+        "Value",
+        "Key"
+      ]
+    },
+    "TemplateDetails": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "ExpirationTime": {
+          "shape": "__string",
+          "locationName": "expirationTime",
+          "documentation": "<p>The date and time this template expires. Templates\n expire 1 hour after creation.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "Status": {
+          "shape": "Status",
+          "locationName": "status",
+          "documentation": "<p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n </p>"
+        },
+        "TemplateId": {
+          "shape": "__string",
+          "locationName": "templateId",
+          "documentation": "<p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the template that can be used to deploy the application using\n AWS CloudFormation.</p>"
+        }
+      },
+      "documentation": "<p>Details of the template.</p>",
+      "required": [
+        "Status",
+        "TemplateUrl",
+        "CreationTime",
+        "ExpirationTime",
+        "ApplicationId",
+        "TemplateId",
+        "SemanticVersion"
+      ]
+    },
+    "TooManyRequestsException": {
+      "type": "structure",
+      "members": {
+        "ErrorCode": {
+          "shape": "__string",
+          "locationName": "errorCode",
+          "documentation": "<p>429</p>"
+        },
+        "Message": {
+          "shape": "__string",
+          "locationName": "message",
+          "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>"
+        }
+      },
+      "documentation": "<p>The client is sending more than the allowed number of requests per unit of time.</p>",
+      "exception": true,
+      "error": {
+        "httpStatusCode": 429
+      }
+    },
+    "UnshareApplicationInput": {
+      "type": "structure",
+      "members": {
+        "OrganizationId": {
+          "shape": "__string",
+          "locationName": "organizationId",
+          "documentation": "<p>The AWS Organization ID to unshare the application from.</p>"
+        }
+      },
+      "required": [
+        "OrganizationId"
+      ],
+      "documentation": "<p>Unshare application request.</p>"
+    },
+    "UnshareApplicationRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "OrganizationId": {
+          "shape": "__string",
+          "locationName": "organizationId",
+          "documentation": "<p>The AWS Organization ID to unshare the application from.</p>"
+        }
+      },
+      "required": [
+        "ApplicationId",
+        "OrganizationId"
+      ]
+    },
+    "UpdateApplicationInput": {
+      "type": "structure",
+      "members": {
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "ReadmeBody": {
+          "shape": "__string",
+          "locationName": "readmeBody",
+          "documentation": "<p>A text readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        }
+      },
+      "documentation": "<p>Update the application request.</p>"
+    },
+    "UpdateApplicationRequest": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "location": "uri",
+          "locationName": "applicationId",
+          "documentation": "<p>The Amazon Resource Name (ARN) of the application.</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "ReadmeBody": {
+          "shape": "__string",
+          "locationName": "readmeBody",
+          "documentation": "<p>A text readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        }
+      },
+      "required": [
+        "ApplicationId"
+      ]
+    },
+    "UpdateApplicationResponse": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "Author": {
+          "shape": "__string",
+          "locationName": "author",
+          "documentation": "<p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern \"^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$\";</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "Description": {
+          "shape": "__string",
+          "locationName": "description",
+          "documentation": "<p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>"
+        },
+        "HomePageUrl": {
+          "shape": "__string",
+          "locationName": "homePageUrl",
+          "documentation": "<p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>"
+        },
+        "IsVerifiedAuthor": {
+          "shape": "__boolean",
+          "locationName": "isVerifiedAuthor",
+          "documentation": "<p>Whether the author of this application has been verified. This means means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed.</p>"
+        },
+        "Labels": {
+          "shape": "__listOf__string",
+          "locationName": "labels",
+          "documentation": "<p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: \"^[a-zA-Z0-9+\\\\-_:\\\\/@]+$\";</p>"
+        },
+        "LicenseUrl": {
+          "shape": "__string",
+          "locationName": "licenseUrl",
+          "documentation": "<p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>"
+        },
+        "Name": {
+          "shape": "__string",
+          "locationName": "name",
+          "documentation": "<p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: \"[a-zA-Z0-9\\\\-]+\";</p>"
+        },
+        "ReadmeUrl": {
+          "shape": "__string",
+          "locationName": "readmeUrl",
+          "documentation": "<p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>"
+        },
+        "SpdxLicenseId": {
+          "shape": "__string",
+          "locationName": "spdxLicenseId",
+          "documentation": "<p>A valid identifier from https://spdx.org/licenses/.</p>"
+        },
+        "VerifiedAuthorUrl": {
+          "shape": "__string",
+          "locationName": "verifiedAuthorUrl",
+          "documentation": "<p>The URL to the public profile of a verified author. This URL is submitted by the author.</p>"
+        },
+        "Version": {
+          "shape": "Version",
+          "locationName": "version",
+          "documentation": "<p>Version information about the application.</p>"
+        }
+      }
+    },
+    "Version": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "ParameterDefinitions": {
+          "shape": "__listOfParameterDefinition",
+          "locationName": "parameterDefinitions",
+          "documentation": "<p>An array of parameter types supported by the application.</p>"
+        },
+        "RequiredCapabilities": {
+          "shape": "__listOfCapability",
+          "locationName": "requiredCapabilities",
+          "documentation": "<p>A list of values that you must specify before you can deploy certain applications.\n Some applications might include resources that can affect permissions in your AWS\n account, for example, by creating new AWS Identity and Access Management (IAM) users.\n For those applications, you must explicitly acknowledge their capabilities by\n specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n CAPABILITY_NAMED_IAM:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html\">AWS::IAM::Group</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html\">AWS::IAM::InstanceProfile</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM::Policy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html\">AWS::IAM::Role</a>.\n If the application contains IAM resources, you can specify either CAPABILITY_IAM\n or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html\">AWS::Lambda::Permission</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html\">AWS::IAM:Policy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html\">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html\">AWS::S3::BucketPolicy</a>,\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html\">AWS::SQS::QueuePolicy</a>, and\n <a href=\"https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html\">AWS::SNS::TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n all permissions associated with the application before deploying. If you don't specify\n this parameter for an application that requires capabilities, the call will fail.</p>"
+        },
+        "ResourcesSupported": {
+          "shape": "__boolean",
+          "locationName": "resourcesSupported",
+          "documentation": "<p>Whether all of the AWS resources contained in this application are supported in the region\n in which it is being retrieved.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "SourceCodeArchiveUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeArchiveUrl",
+          "documentation": "<p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        },
+        "TemplateUrl": {
+          "shape": "__string",
+          "locationName": "templateUrl",
+          "documentation": "<p>A link to the packaged AWS SAM template of your application.</p>"
+        }
+      },
+      "documentation": "<p>Application version details.</p>",
+      "required": [
+        "TemplateUrl",
+        "ParameterDefinitions",
+        "ResourcesSupported",
+        "CreationTime",
+        "RequiredCapabilities",
+        "ApplicationId",
+        "SemanticVersion"
+      ]
+    },
+    "VersionSummary": {
+      "type": "structure",
+      "members": {
+        "ApplicationId": {
+          "shape": "__string",
+          "locationName": "applicationId",
+          "documentation": "<p>The application Amazon Resource Name (ARN).</p>"
+        },
+        "CreationTime": {
+          "shape": "__string",
+          "locationName": "creationTime",
+          "documentation": "<p>The date and time this resource was created.</p>"
+        },
+        "SemanticVersion": {
+          "shape": "__string",
+          "locationName": "semanticVersion",
+          "documentation": "<p>The semantic version of the application:</p><p>\n <a href=\"https://semver.org/\">https://semver.org/</a>\n </p>"
+        },
+        "SourceCodeUrl": {
+          "shape": "__string",
+          "locationName": "sourceCodeUrl",
+          "documentation": "<p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>"
+        }
+      },
+      "documentation": "<p>An application version summary.</p>",
+      "required": [
+        "CreationTime",
+        "ApplicationId",
+        "SemanticVersion"
+      ]
+    },
+    "__boolean": {
+      "type": "boolean"
+    },
+    "__double": {
+      "type": "double"
+    },
+    "__integer": {
+      "type": "integer"
+    },
+    "__listOfApplicationDependencySummary": {
+      "type": "list",
+      "member": {
+        "shape": "ApplicationDependencySummary"
+      }
+    },
+    "__listOfApplicationPolicyStatement": {
+      "type": "list",
+      "member": {
+        "shape": "ApplicationPolicyStatement"
+      }
+    },
+    "__listOfApplicationSummary": {
+      "type": "list",
+      "member": {
+        "shape": "ApplicationSummary"
+      }
+    },
+    "__listOfCapability": {
+      "type": "list",
+      "member": {
+        "shape": "Capability"
+      }
+    },
+    "__listOfParameterDefinition": {
+      "type": "list",
+      "member": {
+        "shape": "ParameterDefinition"
+      }
+    },
+    "__listOfParameterValue": {
+      "type": "list",
+      "member": {
+        "shape": "ParameterValue"
+      }
+    },
+    "__listOfRollbackTrigger": {
+      "type": "list",
+      "member": {
+        "shape": "RollbackTrigger"
+      }
+    },
+    "__listOfTag": {
+      "type": "list",
+      "member": {
+        "shape": "Tag"
+      }
+    },
+    "__listOfVersionSummary": {
+      "type": "list",
+      "member": {
+        "shape": "VersionSummary"
+      }
+    },
+    "__listOf__string": {
+      "type": "list",
+      "member": {
+        "shape": "__string"
       }
     },
-    "__long" : {
-      "type" : "long"
+    "__long": {
+      "type": "long"
     },
-    "__string" : {
-      "type" : "string"
+    "__string": {
+      "type": "string"
     }
   },
-  "documentation" : "<p>The AWS Serverless Application Repository makes it easy for developers and enterprises to quickly find\n and deploy serverless applications in the AWS Cloud. For more information about serverless applications,\n see Serverless Computing and Applications on the AWS website.</p><p>The AWS Serverless Application Repository is deeply integrated with the AWS Lambda console, so that developers of \n all levels can get started with serverless computing without needing to learn anything new. You can use category \n keywords to browse for applications such as web and mobile backends, data processing applications, or chatbots. \n You can also search for applications by name, publisher, or event source. To use an application, you simply choose it, \n configure any required fields, and deploy it with a few clicks. </p><p>You can also easily publish applications, sharing them publicly with the community at large, or privately\n within your team or across your organization. To publish a serverless application (or app), you can use the\n AWS Management Console, AWS Command Line Interface (AWS CLI), or AWS SDKs to upload the code. Along with the\n code, you upload a simple manifest file, also known as the AWS Serverless Application Model (AWS SAM) template.\n For more information about AWS SAM, see AWS Serverless Application Model (AWS SAM) on the AWS Labs\n GitHub repository.</p><p>The AWS Serverless Application Repository Developer Guide contains more information about the two developer\n experiences available:</p><ul>\n <li>\n <p>Consuming Applications – Browse for applications and view information about them, including\n source code and readme files. Also install, configure, and deploy applications of your choosing. </p>\n <p>Publishing Applications – Configure and upload applications to make them available to other\n developers, and publish new versions of applications. </p>\n </li>\n </ul>"
-}
+  "documentation": "<p>The AWS Serverless Application Repository makes it easy for developers and enterprises to quickly find\n and deploy serverless applications in the AWS Cloud. For more information about serverless applications,\n see Serverless Computing and Applications on the AWS website.</p><p>The AWS Serverless Application Repository is deeply integrated with the AWS Lambda console, so that developers of \n all levels can get started with serverless computing without needing to learn anything new. You can use category \n keywords to browse for applications such as web and mobile backends, data processing applications, or chatbots. \n You can also search for applications by name, publisher, or event source. To use an application, you simply choose it, \n configure any required fields, and deploy it with a few clicks. </p><p>You can also easily publish applications, sharing them publicly with the community at large, or privately\n within your team or across your organization. To publish a serverless application (or app), you can use the\n AWS Management Console, AWS Command Line Interface (AWS CLI), or AWS SDKs to upload the code. Along with the\n code, you upload a simple manifest file, also known as the AWS Serverless Application Model (AWS SAM) template.\n For more information about AWS SAM, see AWS Serverless Application Model (AWS SAM) on the AWS Labs\n GitHub repository.</p><p>The AWS Serverless Application Repository Developer Guide contains more information about the two developer\n experiences available:</p><ul>\n <li>\n <p>Consuming Applications – Browse for applications and view information about them, including\n source code and readme files. Also install, configure, and deploy applications of your choosing. </p>\n <p>Publishing Applications – Configure and upload applications to make them available to other\n developers, and publish new versions of applications. </p>\n </li>\n </ul>"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/service-quotas/2019-06-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +252,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +275,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,7 +294,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -308,14 +304,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/service-quotas/2019-06-24/service-2.json 2.31.35-1/awscli/botocore/data/service-quotas/2019-06-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/service-quotas/2019-06-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/service-quotas/2019-06-24/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"servicequotas",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Service Quotas",
     "serviceId":"Service Quotas",
     "signatureVersion":"v4",
     "targetPrefix":"ServiceQuotasV20190624",
-    "uid":"service-quotas-2019-06-24"
+    "uid":"service-quotas-2019-06-24",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateServiceQuotaTemplate":{
@@ -32,6 +34,26 @@
       ],
       "documentation":"<p>Associates your quota request template with your organization. When a new Amazon Web Services account is created in your organization, the quota increase requests in the template are automatically applied to the account. You can add a quota increase request for any adjustable quota to your template.</p>"
     },
+    "CreateSupportCase":{
+      "name":"CreateSupportCase",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateSupportCaseRequest"},
+      "output":{"shape":"CreateSupportCaseResponse"},
+      "errors":[
+        {"shape":"DependencyAccessDeniedException"},
+        {"shape":"ResourceAlreadyExistsException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"NoSuchResourceException"},
+        {"shape":"IllegalArgumentException"},
+        {"shape":"InvalidResourceStateException"},
+        {"shape":"ServiceException"},
+        {"shape":"TooManyRequestsException"}
+      ],
+      "documentation":"<p>Creates a Support case for an existing quota increase request. This call only creates a Support case if the request has a <code>Pending</code> status. </p>"
+    },
     "DeleteServiceQuotaIncreaseRequestFromTemplate":{
       "name":"DeleteServiceQuotaIncreaseRequestFromTemplate",
       "http":{
@@ -110,6 +132,23 @@
       ],
       "documentation":"<p>Retrieves the status of the association for the quota request template.</p>"
     },
+    "GetAutoManagementConfiguration":{
+      "name":"GetAutoManagementConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAutoManagementConfigurationRequest"},
+      "output":{"shape":"GetAutoManagementConfigurationResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"NoSuchResourceException"},
+        {"shape":"IllegalArgumentException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Retrieves information about your <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/automatic-management.html\">Service Quotas Automatic Management</a> configuration. Automatic Management monitors your Service Quotas utilization and notifies you before you run out of your allocated quotas.</p>"
+    },
     "GetRequestedServiceQuotaChange":{
       "name":"GetRequestedServiceQuotaChange",
       "http":{
@@ -142,7 +181,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves the applied quota value for the specified quota. For some quotas, only the default values are available. If the applied quota value is not available for a quota, the quota is not retrieved.</p>"
+      "documentation":"<p>Retrieves the applied quota value for the specified account-level or resource-level quota. For some quotas, only the default values are available. If the applied quota value is not available for a quota, the quota is not retrieved.</p>"
     },
     "GetServiceQuotaIncreaseRequestFromTemplate":{
       "name":"GetServiceQuotaIncreaseRequestFromTemplate",
@@ -181,7 +220,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the default values for the quotas for the specified Amazon Web Service. A default value does not reflect any quota increases.</p>"
+      "documentation":"<p>Lists the default values for the quotas for the specified Amazon Web Services service. A default value does not reflect any quota increases.</p>"
     },
     "ListRequestedServiceQuotaChangeHistory":{
       "name":"ListRequestedServiceQuotaChangeHistory",
@@ -199,7 +238,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves the quota increase requests for the specified Amazon Web Service.</p>"
+      "documentation":"<p>Retrieves the quota increase requests for the specified Amazon Web Services service. Filter responses to return quota requests at either the account level, resource level, or all levels. Responses include any open or closed requests within 90 days.</p>"
     },
     "ListRequestedServiceQuotaChangeHistoryByQuota":{
       "name":"ListRequestedServiceQuotaChangeHistoryByQuota",
@@ -217,7 +256,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Retrieves the quota increase requests for the specified quota.</p>"
+      "documentation":"<p>Retrieves the quota increase requests for the specified quota. Filter responses to return quota requests at either the account level, resource level, or all levels.</p>"
     },
     "ListServiceQuotaIncreaseRequestsInTemplate":{
       "name":"ListServiceQuotaIncreaseRequestsInTemplate",
@@ -255,7 +294,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the applied quota values for the specified Amazon Web Service. For some quotas, only the default values are available. If the applied quota value is not available for a quota, the quota is not retrieved.</p>"
+      "documentation":"<p>Lists the applied quota values for the specified Amazon Web Services service. For some quotas, only the default values are available. If the applied quota value is not available for a quota, the quota is not retrieved. Filter responses to return applied quota values at either the account level, resource level, or all levels.</p>"
     },
     "ListServices":{
       "name":"ListServices",
@@ -272,7 +311,7 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists the names and codes for the Amazon Web Services integrated with Service Quotas.</p>"
+      "documentation":"<p>Lists the names and codes for the Amazon Web Services services integrated with Service Quotas.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -332,7 +371,41 @@
         {"shape":"ServiceException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Submits a quota increase request for the specified quota.</p>"
+      "documentation":"<p>Submits a quota increase request for the specified quota at the account or resource level.</p>"
+    },
+    "StartAutoManagement":{
+      "name":"StartAutoManagement",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartAutoManagementRequest"},
+      "output":{"shape":"StartAutoManagementResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"NoSuchResourceException"},
+        {"shape":"IllegalArgumentException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Starts <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/automatic-management.html\">Service Quotas Automatic Management</a> for an Amazon Web Services account, including notification preferences and excluded quotas configurations. Automatic Management monitors your Service Quotas utilization and notifies you before you run out of your allocated quotas.</p>"
+    },
+    "StopAutoManagement":{
+      "name":"StopAutoManagement",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StopAutoManagementRequest"},
+      "output":{"shape":"StopAutoManagementResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"NoSuchResourceException"},
+        {"shape":"IllegalArgumentException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Stops <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/automatic-management.html\">Service Quotas Automatic Management</a> for an Amazon Web Services account and removes all associated configurations. Automatic Management monitors your Service Quotas utilization and notifies you before you run out of your allocated quotas.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -369,6 +442,23 @@
         {"shape":"ServiceException"}
       ],
       "documentation":"<p>Removes tags from the specified applied quota. You can specify one or more tags to remove.</p>"
+    },
+    "UpdateAutoManagement":{
+      "name":"UpdateAutoManagement",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateAutoManagementRequest"},
+      "output":{"shape":"UpdateAutoManagementResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"NoSuchResourceException"},
+        {"shape":"IllegalArgumentException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"ServiceException"}
+      ],
+      "documentation":"<p>Updates your <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/automatic-management.html\">Service Quotas Automatic Management</a> configuration, including notification preferences and excluded quotas. Automatic Management monitors your Service Quotas utilization and notifies you before you run out of your allocated quotas.</p>"
     }
   },
   "shapes":{
@@ -404,13 +494,11 @@
     },
     "AssociateServiceQuotaTemplateRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateServiceQuotaTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AwsRegion":{
       "type":"string",
@@ -418,6 +506,20 @@
       "min":1,
       "pattern":"[a-zA-Z][a-zA-Z0-9-]{1,128}"
     },
+    "CreateSupportCaseRequest":{
+      "type":"structure",
+      "required":["RequestId"],
+      "members":{
+        "RequestId":{
+          "shape":"RequestId",
+          "documentation":"<p>The ID of the pending quota increase request for which you want to open a Support case. </p>"
+        }
+      }
+    },
+    "CreateSupportCaseResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "CustomerServiceEngagementId":{"type":"string"},
     "DateTime":{"type":"timestamp"},
     "DeleteServiceQuotaIncreaseRequestFromTemplateRequest":{
@@ -444,8 +546,7 @@
     },
     "DeleteServiceQuotaIncreaseRequestFromTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DependencyAccessDeniedException":{
       "type":"structure",
@@ -457,13 +558,11 @@
     },
     "DisassociateServiceQuotaTemplateRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateServiceQuotaTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ErrorCode":{
       "type":"string",
@@ -480,7 +579,7 @@
       "members":{
         "ErrorCode":{
           "shape":"ErrorCode",
-          "documentation":"<p>Service Quotas returns the following error values:</p> <ul> <li> <p> <code>DEPENDENCY_ACCESS_DENIED_ERROR</code> - The caller does not have the required permissions to complete the action. To resolve the error, you must have permission to access the Amazon Web Service or quota.</p> </li> <li> <p> <code>DEPENDENCY_THROTTLING_ERROR</code> - The Amazon Web Service is throttling Service Quotas. </p> </li> <li> <p> <code>DEPENDENCY_SERVICE_ERROR</code> - The Amazon Web Service is not available.</p> </li> <li> <p> <code>SERVICE_QUOTA_NOT_AVAILABLE_ERROR</code> - There was an error in Service Quotas.</p> </li> </ul>"
+          "documentation":"<p>Service Quotas returns the following error values:</p> <ul> <li> <p> <code>DEPENDENCY_ACCESS_DENIED_ERROR</code> - The caller does not have the required permissions to complete the action. To resolve the error, you must have permission to access the Amazon Web Services service or quota.</p> </li> <li> <p> <code>DEPENDENCY_THROTTLING_ERROR</code> - The Amazon Web Services service is throttling Service Quotas. </p> </li> <li> <p> <code>DEPENDENCY_SERVICE_ERROR</code> - The Amazon Web Services service is not available.</p> </li> <li> <p> <code>SERVICE_QUOTA_NOT_AVAILABLE_ERROR</code> - There was an error in Service Quotas.</p> </li> </ul>"
         },
         "ErrorMessage":{
           "shape":"ErrorMessage",
@@ -490,6 +589,32 @@
       "documentation":"<p>An error that explains why an action did not succeed.</p>"
     },
     "ExceptionMessage":{"type":"string"},
+    "ExcludedLimit":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ /]{1,128}"
+    },
+    "ExcludedQuotaList":{
+      "type":"list",
+      "member":{"shape":"ExcludedLimit"}
+    },
+    "ExcludedService":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[A-Za-z0-9-_ /]{1,128}"
+    },
+    "ExclusionList":{
+      "type":"map",
+      "key":{"shape":"ExcludedService"},
+      "value":{"shape":"ExcludedQuotaList"}
+    },
+    "ExclusionQuotaList":{
+      "type":"map",
+      "key":{"shape":"ExcludedService"},
+      "value":{"shape":"QuotaInfoList"}
+    },
     "GetAWSDefaultServiceQuotaRequest":{
       "type":"structure",
       "required":[
@@ -518,8 +643,7 @@
     },
     "GetAssociationForServiceQuotaTemplateRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAssociationForServiceQuotaTemplateResponse":{
       "type":"structure",
@@ -530,6 +654,35 @@
         }
       }
     },
+    "GetAutoManagementConfigurationRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "GetAutoManagementConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "OptInLevel":{
+          "shape":"OptInLevel",
+          "documentation":"<p>Information on the opt-in level for Automatic Management. Only Amazon Web Services account level is supported.</p>"
+        },
+        "OptInType":{
+          "shape":"OptInType",
+          "documentation":"<p>Information on the opt-in type for Automatic Management. There are two modes: Notify only and Notify and Auto-Adjust. Currently, only NotifyOnly is available.</p>"
+        },
+        "NotificationArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/resource-level-permissions.html#rlp-table\">User Notifications</a> Amazon Resource Name (ARN) for Automatic Management notifications.</p>"
+        },
+        "OptInStatus":{
+          "shape":"OptInStatus",
+          "documentation":"<p>Status on whether Automatic Management is started or stopped.</p>"
+        },
+        "ExclusionList":{
+          "shape":"ExclusionQuotaList",
+          "documentation":"<p>List of Amazon Web Services services excluded from Automatic Management. You won't be notified of Service Quotas utilization for Amazon Web Services services added to the Automatic Management exclusion list. </p>"
+        }
+      }
+    },
     "GetRequestedServiceQuotaChangeRequest":{
       "type":"structure",
       "required":["RequestId"],
@@ -597,7 +750,7 @@
         },
         "ContextId":{
           "shape":"QuotaContextId",
-          "documentation":"<p>Specifies the Amazon Web Services account or resource to which the quota applies. The value in this field depends on the context scope associated with the specified service quota.</p>"
+          "documentation":"<p>Specifies the resource with an Amazon Resource Name (ARN).</p>"
         }
       }
     },
@@ -704,7 +857,7 @@
         },
         "QuotaRequestedAtLevel":{
           "shape":"AppliedLevelEnum",
-          "documentation":"<p>Specifies at which level within the Amazon Web Services account the quota request applies to.</p>"
+          "documentation":"<p>Filters the response to return quota requests for the <code>ACCOUNT</code>, <code>RESOURCE</code>, or <code>ALL</code> levels. <code>ACCOUNT</code> is the default.</p>"
         }
       }
     },
@@ -742,7 +895,7 @@
         },
         "QuotaRequestedAtLevel":{
           "shape":"AppliedLevelEnum",
-          "documentation":"<p>Specifies at which level within the Amazon Web Services account the quota request applies to.</p>"
+          "documentation":"<p>Filters the response to return quota requests for the <code>ACCOUNT</code>, <code>RESOURCE</code>, or <code>ALL</code> levels. <code>ACCOUNT</code> is the default.</p>"
         }
       }
     },
@@ -815,7 +968,7 @@
         },
         "QuotaAppliedAtLevel":{
           "shape":"AppliedLevelEnum",
-          "documentation":"<p>Specifies at which level of granularity that the quota value is applied.</p>"
+          "documentation":"<p>Filters the response to return applied quota values for the <code>ACCOUNT</code>, <code>RESOURCE</code>, or <code>ALL</code> levels. <code>ACCOUNT</code> is the default.</p>"
         }
       }
     },
@@ -854,7 +1007,7 @@
         },
         "Services":{
           "shape":"ServiceInfoListDefinition",
-          "documentation":"<p>The list of the Amazon Web Service names and service codes.</p>"
+          "documentation":"<p>The list of the Amazon Web Services service names and service codes.</p>"
         }
       }
     },
@@ -933,6 +1086,24 @@
       "documentation":"<p>The specified resource does not exist.</p>",
       "exception":true
     },
+    "OptInLevel":{
+      "type":"string",
+      "enum":["ACCOUNT"]
+    },
+    "OptInStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
+    "OptInType":{
+      "type":"string",
+      "enum":[
+        "NotifyOnly",
+        "NotifyAndAdjust"
+      ]
+    },
     "OrganizationNotInAllFeaturesModeException":{
       "type":"structure",
       "members":{
@@ -1009,18 +1180,18 @@
       "members":{
         "ContextScope":{
           "shape":"QuotaContextScope",
-          "documentation":"<p>Specifies whether the quota applies to an Amazon Web Services account, or to a resource.</p>"
+          "documentation":"<p>Specifies the scope to which the quota value is applied. If the scope is <code>RESOURCE</code>, the quota value is applied to each resource in the Amazon Web Services account. If the scope is <code>ACCOUNT</code>, the quota value is applied to the Amazon Web Services account.</p>"
         },
         "ContextScopeType":{
           "shape":"QuotaContextScopeType",
-          "documentation":"<p>When the <code>ContextScope</code> is <code>RESOURCE</code>, then this specifies the resource type of the specified resource.</p>"
+          "documentation":"<p>Specifies the resource type to which the quota can be applied.</p>"
         },
         "ContextId":{
           "shape":"QuotaContextId",
-          "documentation":"<p>Specifies the Amazon Web Services account or resource to which the quota applies. The value in this field depends on the context scope associated with the specified service quota.</p>"
+          "documentation":"<p>Specifies the resource, or resources, to which the quota applies. The value for this field is either an Amazon Resource Name (ARN) or *. If the value is an ARN, the quota value applies to that resource. If the value is *, then the quota value applies to all resources listed in the <code>ContextScopeType</code> field. The quota value applies to all resources for which you haven’t previously applied a quota value, and any new resources you create in your Amazon Web Services account.</p>"
         }
       },
-      "documentation":"<p>A structure that describes the context for a service quota. The context identifies what the quota applies to.</p>"
+      "documentation":"<p>A structure that describes the context for a resource-level quota. For resource-level quotas, such as <code>Instances per OpenSearch Service Domain</code>, you can apply the quota value at the resource-level for each OpenSearch Service Domain in your Amazon Web Services account. Together the attributes of this structure help you understand how the quota is implemented by Amazon Web Services and how you can manage it. For quotas such as <code>Amazon OpenSearch Service Domains</code> which can be managed at the account-level for each Amazon Web Services Region, the <code>QuotaContext</code> field is absent. See the attribute descriptions below to further understand how to use them.</p>"
     },
     "QuotaContextScope":{
       "type":"string",
@@ -1030,6 +1201,12 @@
       ]
     },
     "QuotaContextScopeType":{"type":"string"},
+    "QuotaDescription":{
+      "type":"string",
+      "max":350,
+      "min":0,
+      "pattern":"^.{0,350}$"
+    },
     "QuotaExceededException":{
       "type":"structure",
       "members":{
@@ -1038,6 +1215,24 @@
       "documentation":"<p>You have exceeded your service quota. To perform the requested action, remove some of the relevant resources, or use Service Quotas to request a service quota increase.</p>",
       "exception":true
     },
+    "QuotaInfo":{
+      "type":"structure",
+      "members":{
+        "QuotaCode":{
+          "shape":"QuotaCode",
+          "documentation":"<p>The Service Quotas code for the Amazon Web Services service monitored with Automatic Management.</p>"
+        },
+        "QuotaName":{
+          "shape":"QuotaName",
+          "documentation":"<p>The Service Quotas name for the Amazon Web Services service monitored with Automatic Management.</p>"
+        }
+      },
+      "documentation":"<p>Information on your Service Quotas for <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/automatic-management.html\">Service Quotas Automatic Management</a>. Automatic Management monitors your Service Quotas utilization and notifies you before you run out of your allocated quotas.</p>"
+    },
+    "QuotaInfoList":{
+      "type":"list",
+      "member":{"shape":"QuotaInfo"}
+    },
     "QuotaMetricName":{"type":"string"},
     "QuotaMetricNamespace":{"type":"string"},
     "QuotaName":{"type":"string"},
@@ -1089,7 +1284,11 @@
         },
         "ContextId":{
           "shape":"QuotaContextId",
-          "documentation":"<p>Specifies the Amazon Web Services account or resource to which the quota applies. The value in this field depends on the context scope associated with the specified service quota.</p>"
+          "documentation":"<p>Specifies the resource with an Amazon Resource Name (ARN).</p>"
+        },
+        "SupportCaseAllowed":{
+          "shape":"SupportCaseAllowed",
+          "documentation":"<p>Specifies if an Amazon Web Services Support case can be opened for the quota increase request. This parameter is optional. </p> <p>By default, this flag is set to <code>True</code> and Amazon Web Services may create a support case for some quota increase requests. You can set this flag to <code>False</code> if you do not want a support case created when you request a quota increase. If you set the flag to <code>False</code>, Amazon Web Services does not open a support case and updates the request status to <code>Not approved</code>. </p>"
         }
       }
     },
@@ -1147,7 +1346,7 @@
         },
         "Status":{
           "shape":"RequestStatus",
-          "documentation":"<p>The state of the quota increase request.</p>"
+          "documentation":"<p>The state of the quota increase request.</p> <ul> <li> <p> <code>PENDING</code>: The quota increase request is under review by Amazon Web Services. </p> </li> <li> <p> <code>CASE_OPENED</code>: Service Quotas opened a support case to process the quota increase request. Follow-up on the support case for more information.</p> </li> <li> <p> <code>APPROVED</code>: The quota increase request is approved. </p> </li> <li> <p> <code>DENIED</code>: The quota increase request can't be approved by Service Quotas. Contact Amazon Web Services Support for more details.</p> </li> <li> <p> <code>NOT APPROVED</code>: The quota increase request can't be approved by Service Quotas. Contact Amazon Web Services Support for more details.</p> </li> <li> <p> <code>CASE_CLOSED</code>: The support case associated with this quota increase request was closed. Check the support case correspondence for the outcome of your quota request.</p> </li> <li> <p> <code>INVALID_REQUEST</code>: Service Quotas couldn't process your resource-level quota increase request because the Amazon Resource Name (ARN) specified as part of the <code>ContextId</code> is invalid.</p> </li> </ul>"
         },
         "Created":{
           "shape":"DateTime",
@@ -1175,7 +1374,7 @@
         },
         "QuotaRequestedAtLevel":{
           "shape":"AppliedLevelEnum",
-          "documentation":"<p>Specifies at which level within the Amazon Web Services account the quota request applies to.</p>"
+          "documentation":"<p>Filters the response to return quota requests for the <code>ACCOUNT</code>, <code>RESOURCE</code>, or <code>ALL</code> levels. <code>ACCOUNT</code> is the default.</p>"
         },
         "QuotaContext":{
           "shape":"QuotaContextInfo",
@@ -1224,7 +1423,7 @@
           "documentation":"<p>Specifies the service name.</p>"
         }
       },
-      "documentation":"<p>Information about an Amazon Web Service.</p>"
+      "documentation":"<p>Information about an Amazon Web Services service.</p>"
     },
     "ServiceInfoListDefinition":{
       "type":"list",
@@ -1284,11 +1483,15 @@
         },
         "QuotaAppliedAtLevel":{
           "shape":"AppliedLevelEnum",
-          "documentation":"<p>Specifies at which level of granularity that the quota value is applied.</p>"
+          "documentation":"<p>Filters the response to return applied quota values for the <code>ACCOUNT</code>, <code>RESOURCE</code>, or <code>ALL</code> levels. <code>ACCOUNT</code> is the default.</p>"
         },
         "QuotaContext":{
           "shape":"QuotaContextInfo",
           "documentation":"<p>The context for this service quota.</p>"
+        },
+        "Description":{
+          "shape":"QuotaDescription",
+          "documentation":"<p>The quota description. </p>"
         }
       },
       "documentation":"<p>Information about a quota.</p>"
@@ -1354,12 +1557,50 @@
       "documentation":"<p>The quota request template is not associated with your organization.</p>",
       "exception":true
     },
+    "StartAutoManagementRequest":{
+      "type":"structure",
+      "required":[
+        "OptInLevel",
+        "OptInType"
+      ],
+      "members":{
+        "OptInLevel":{
+          "shape":"OptInLevel",
+          "documentation":"<p>Sets the opt-in level for Automatic Management. Only Amazon Web Services account level is supported.</p>"
+        },
+        "OptInType":{
+          "shape":"OptInType",
+          "documentation":"<p>Sets the opt-in type for Automatic Management. There are two modes: Notify only and Notify and Auto-Adjust. Currently, only NotifyOnly is available.</p>"
+        },
+        "NotificationArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/resource-level-permissions.html#rlp-table\">User Notifications</a> Amazon Resource Name (ARN) for Automatic Management notifications.</p>"
+        },
+        "ExclusionList":{
+          "shape":"ExclusionList",
+          "documentation":"<p>List of Amazon Web Services services excluded from Automatic Management. You won't be notified of Service Quotas utilization for Amazon Web Services services added to the Automatic Management exclusion list. </p>"
+        }
+      }
+    },
+    "StartAutoManagementResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "Statistic":{
       "type":"string",
       "max":256,
       "min":1,
       "pattern":"(Sum|Maximum)"
     },
+    "StopAutoManagementRequest":{
+      "type":"structure",
+      "members":{}
+    },
+    "StopAutoManagementResponse":{
+      "type":"structure",
+      "members":{}
+    },
+    "SupportCaseAllowed":{"type":"boolean"},
     "Tag":{
       "type":"structure",
       "required":[
@@ -1411,8 +1652,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1463,9 +1703,29 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "UpdateAutoManagementRequest":{
+      "type":"structure",
       "members":{
+        "OptInType":{
+          "shape":"OptInType",
+          "documentation":"<p>Information on the opt-in type for your Automatic Management configuration. There are two modes: Notify only and Notify and Auto-Adjust. Currently, only NotifyOnly is available.</p>"
+        },
+        "NotificationArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The <a href=\"https://docs.aws.amazon.com/notifications/latest/userguide/resource-level-permissions.html#rlp-table\">User Notifications</a> Amazon Resource Name (ARN) for Automatic Management notifications you want to update.</p>"
+        },
+        "ExclusionList":{
+          "shape":"ExclusionList",
+          "documentation":"<p>List of Amazon Web Services services you want to exclude from Automatic Management. You won't be notified of Service Quotas utilization for Amazon Web Services services added to the Automatic Management exclusion list. </p>"
+        }
       }
+    },
+    "UpdateAutoManagementResponse":{
+      "type":"structure",
+      "members":{}
     }
   },
-  "documentation":"<p>With Service Quotas, you can view and manage your quotas easily as your Amazon Web Services workloads grow. Quotas, also referred to as limits, are the maximum number of resources that you can create in your Amazon Web Services account. For more information, see the <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/\">Service Quotas User Guide</a>.</p>"
+  "documentation":"<p>With Service Quotas, you can view and manage your quotas easily as your Amazon Web Services workloads grow. Quotas, also referred to as limits, are the maximum number of resources that you can create in your Amazon Web Services account. For more information, see the <a href=\"https://docs.aws.amazon.com/servicequotas/latest/userguide/\">Service Quotas User Guide</a>.</p> <p>You need Amazon Web Services CLI version 2.13.20 or higher to view and manage resource-level quotas such as <code>Instances per domain</code> for Amazon OpenSearch Service.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicecatalog/2015-12-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/servicecatalog/2015-12-10/service-2.json 2.31.35-1/awscli/botocore/data/servicecatalog/2015-12-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/servicecatalog/2015-12-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicecatalog/2015-12-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"servicecatalog",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"AWS Service Catalog",
     "serviceId":"Service Catalog",
     "signatureVersion":"v4",
     "targetPrefix":"AWS242ServiceCatalogService",
-    "uid":"servicecatalog-2015-12-10"
+    "uid":"servicecatalog-2015-12-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptPortfolioShare":{
@@ -370,7 +372,8 @@
       "output":{"shape":"DeleteServiceActionOutput"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ResourceInUseException"}
+        {"shape":"ResourceInUseException"},
+        {"shape":"InvalidParametersException"}
       ],
       "documentation":"<p>Deletes a self-service action.</p>"
     },
@@ -675,7 +678,8 @@
       "input":{"shape":"DisassociateServiceActionFromProvisioningArtifactInput"},
       "output":{"shape":"DisassociateServiceActionFromProvisioningArtifactOutput"},
       "errors":[
-        {"shape":"ResourceNotFoundException"}
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"}
       ],
       "documentation":"<p>Disassociates the specified self-service action association from the specified provisioning artifact.</p>"
     },
@@ -1329,8 +1333,7 @@
     },
     "AcceptPortfolioShareOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AccessLevelFilter":{
       "type":"structure",
@@ -1400,8 +1403,7 @@
     },
     "AssociateBudgetWithResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociatePrincipalWithPortfolioInput":{
       "type":"structure",
@@ -1431,8 +1433,7 @@
     },
     "AssociatePrincipalWithPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateProductWithPortfolioInput":{
       "type":"structure",
@@ -1461,8 +1462,7 @@
     },
     "AssociateProductWithPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateServiceActionWithProvisioningArtifactInput":{
       "type":"structure",
@@ -1497,8 +1497,7 @@
     },
     "AssociateServiceActionWithProvisioningArtifactOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateTagOptionWithResourceInput":{
       "type":"structure",
@@ -1519,8 +1518,7 @@
     },
     "AssociateTagOptionWithResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttributeValue":{"type":"string"},
     "BatchAssociateServiceActionWithProvisioningArtifactInput":{
@@ -2215,8 +2213,7 @@
     },
     "DeleteConstraintOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePortfolioInput":{
       "type":"structure",
@@ -2234,8 +2231,7 @@
     },
     "DeletePortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePortfolioShareInput":{
       "type":"structure",
@@ -2284,8 +2280,7 @@
     },
     "DeleteProductOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProvisionedProductPlanInput":{
       "type":"structure",
@@ -2307,8 +2302,7 @@
     },
     "DeleteProvisionedProductPlanOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProvisioningArtifactInput":{
       "type":"structure",
@@ -2333,8 +2327,7 @@
     },
     "DeleteProvisioningArtifactOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteServiceActionInput":{
       "type":"structure",
@@ -2357,8 +2350,7 @@
     },
     "DeleteServiceActionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTagOptionInput":{
       "type":"structure",
@@ -2372,8 +2364,7 @@
     },
     "DeleteTagOptionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeConstraintInput":{
       "type":"structure",
@@ -2971,13 +2962,11 @@
     "Description":{"type":"string"},
     "DisableAWSOrganizationsAccessInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableAWSOrganizationsAccessOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableTemplateValidation":{"type":"boolean"},
     "DisassociateBudgetFromResourceInput":{
@@ -2999,8 +2988,7 @@
     },
     "DisassociateBudgetFromResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociatePrincipalFromPortfolioInput":{
       "type":"structure",
@@ -3029,8 +3017,7 @@
     },
     "DisassociatePrincipalFromPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateProductFromPortfolioInput":{
       "type":"structure",
@@ -3055,8 +3042,7 @@
     },
     "DisassociateProductFromPortfolioOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateServiceActionFromProvisioningArtifactInput":{
       "type":"structure",
@@ -3091,8 +3077,7 @@
     },
     "DisassociateServiceActionFromProvisioningArtifactOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateTagOptionFromResourceInput":{
       "type":"structure",
@@ -3113,25 +3098,21 @@
     },
     "DisassociateTagOptionFromResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DuplicateResourceException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource is a duplicate.</p>",
       "exception":true
     },
     "EnableAWSOrganizationsAccessInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableAWSOrganizationsAccessOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EngineWorkflowFailureReason":{
       "type":"string",
@@ -3326,8 +3307,7 @@
     },
     "GetAWSOrganizationsAccessStatusInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetAWSOrganizationsAccessStatusOutput":{
       "type":"structure",
@@ -3441,15 +3421,13 @@
     "InstructionValue":{"type":"string"},
     "InvalidParametersException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>One or more parameters provided to the operation are not valid.</p>",
       "exception":true
     },
     "InvalidStateException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An attempt was made to modify a resource that is in a state that is not valid. Check your resources to ensure that they are in valid states before retrying the operation.</p>",
       "exception":true
     },
@@ -3536,8 +3514,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The current limits of the service would have been exceeded by this operation. Decrease your resource use or increase your service limits and retry the operation.</p>",
       "exception":true
     },
@@ -4267,8 +4244,7 @@
     },
     "NotifyProvisionProductEngineWorkflowResultOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NotifyTerminateProvisionedProductEngineWorkflowResultInput":{
       "type":"structure",
@@ -4304,8 +4280,7 @@
     },
     "NotifyTerminateProvisionedProductEngineWorkflowResultOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NotifyUpdateProvisionedProductEngineWorkflowResultInput":{
       "type":"structure",
@@ -4345,8 +4320,7 @@
     },
     "NotifyUpdateProvisionedProductEngineWorkflowResultOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NullableBoolean":{
       "type":"boolean",
@@ -4354,8 +4328,7 @@
     },
     "OperationNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation is not supported.</p>",
       "exception":true
     },
@@ -5631,8 +5604,7 @@
     },
     "RejectPortfolioShareOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Replacement":{
       "type":"string",
@@ -5779,15 +5751,13 @@
     "ResourceId":{"type":"string"},
     "ResourceInUseException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A resource that is currently in use. Ensure that the resource is not in use and retry the operation.</p>",
       "exception":true
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified resource was not found.</p>",
       "exception":true
     },
@@ -5962,7 +5932,7 @@
         },
         "AccessLevelFilter":{
           "shape":"AccessLevelFilter",
-          "documentation":"<p>The access level to use to obtain results. The default is <code>User</code>.</p>"
+          "documentation":"<p>The access level to use to obtain results. The default is <code>Account</code>.</p>"
         },
         "Filters":{
           "shape":"ProvisionedProductFilters",
@@ -6409,8 +6379,7 @@
     },
     "TagOptionNotMigratedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An operation requiring TagOptions failed because the TagOptions migration process has not been performed for this account. Use the Amazon Web Services Management Console to perform the migration process before retrying the operation.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json 2.31.35-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicecatalog-appregistry/2020-06-24/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"servicecatalog-appregistry",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"AppRegistry",
     "serviceFullName":"AWS Service Catalog App Registry",
     "serviceId":"Service Catalog AppRegistry",
     "signatureVersion":"v4",
     "signingName":"servicecatalog",
-    "uid":"AWS242AppRegistry-2020-06-24"
+    "uid":"AWS242AppRegistry-2020-06-24",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateAttributeGroup":{
@@ -1676,8 +1678,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1735,8 +1736,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/paginators-1.sdk-extras.json 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/paginators-1.sdk-extras.json
--- 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/paginators-1.sdk-extras.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/paginators-1.sdk-extras.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+ {
+   "version": 1.0,
+   "merge": {
+     "pagination": {
+       "ListInstances": {
+         "non_aggregate_keys": [
+           "ResourceOwner"
+         ]
+       }
+     }
+   }
+ }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/service-2.json 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/service-2.json
--- 2.23.6-1/awscli/botocore/data/servicediscovery/2017-03-14/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/servicediscovery/2017-03-14/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -290,7 +290,7 @@
       "errors":[
         {"shape":"InvalidInput"}
       ],
-      "documentation":"<p>Lists summary information about the namespaces that were created by the current Amazon Web Services account.</p>"
+      "documentation":"<p>Lists summary information about the namespaces that were created by the current Amazon Web Services account and shared with the current Amazon Web Services account.</p>"
     },
     "ListOperations":{
       "name":"ListOperations",
@@ -454,7 +454,7 @@
         {"shape":"InvalidInput"},
         {"shape":"ServiceNotFound"}
       ],
-      "documentation":"<p>Submits a request to perform the following operations:</p> <ul> <li> <p>Update the TTL setting for existing <code>DnsRecords</code> configurations</p> </li> <li> <p>Add, update, or delete <code>HealthCheckConfig</code> for a specified service</p> <note> <p>You can't add, update, or delete a <code>HealthCheckCustomConfig</code> configuration.</p> </note> </li> </ul> <p>For public and private DNS namespaces, note the following:</p> <ul> <li> <p>If you omit any existing <code>DnsRecords</code> or <code>HealthCheckConfig</code> configurations from an <code>UpdateService</code> request, the configurations are deleted from the service.</p> </li> <li> <p>If you omit an existing <code>HealthCheckCustomConfig</code> configuration from an <code>UpdateService</code> request, the configuration isn't deleted from the service.</p> </li> </ul> <p>When you update settings for a service, Cloud Map also updates the corresponding settings in all the records and health checks that were created by using the specified service.</p>"
+      "documentation":"<p>Submits a request to perform the following operations:</p> <ul> <li> <p>Update the TTL setting for existing <code>DnsRecords</code> configurations</p> </li> <li> <p>Add, update, or delete <code>HealthCheckConfig</code> for a specified service</p> <note> <p>You can't add, update, or delete a <code>HealthCheckCustomConfig</code> configuration.</p> </note> </li> </ul> <p>For public and private DNS namespaces, note the following:</p> <ul> <li> <p>If you omit any existing <code>DnsRecords</code> or <code>HealthCheckConfig</code> configurations from an <code>UpdateService</code> request, the configurations are deleted from the service.</p> </li> <li> <p>If you omit an existing <code>HealthCheckCustomConfig</code> configuration from an <code>UpdateService</code> request, the configuration isn't deleted from the service.</p> </li> </ul> <note> <p>You can't call <code>UpdateService</code> and update settings in the following scenarios:</p> <ul> <li> <p>When the service is associated with an HTTP namespace</p> </li> <li> <p>When the service is associated with a shared namespace and contains instances that were registered by Amazon Web Services accounts other than the account making the <code>UpdateService</code> call</p> </li> </ul> </note> <p>When you update settings for a service, Cloud Map also updates the corresponding settings in all the records and health checks that were created by using the specified service.</p>"
     },
     "UpdateServiceAttributes":{
       "name":"UpdateServiceAttributes",
@@ -473,6 +473,11 @@
     }
   },
   "shapes":{
+    "AWSAccountId":{
+      "type":"string",
+      "max":12,
+      "min":12
+    },
     "AmazonResourceName":{
       "type":"string",
       "max":1011,
@@ -618,8 +623,8 @@
           "documentation":"<p>The name that you want to assign to the service.</p> <note> <p>Do not include sensitive information in the name if the namespace is discoverable by public DNS queries.</p> </note> <p>If you want Cloud Map to create an <code>SRV</code> record when you register an instance and you're using a system that requires a specific <code>SRV</code> format, such as <a href=\"http://www.haproxy.org/\">HAProxy</a>, specify the following for <code>Name</code>:</p> <ul> <li> <p>Start the name with an underscore (_), such as <code>_exampleservice</code>.</p> </li> <li> <p>End the name with <i>._protocol</i>, such as <code>._tcp</code>.</p> </li> </ul> <p>When you register an instance, Cloud Map creates an <code>SRV</code> record and assigns a name to the record by concatenating the service name and the namespace name (for example,</p> <p> <code>_exampleservice._tcp.example.com</code>).</p> <note> <p>For services that are accessible by DNS queries, you can't create multiple services with names that differ only by case (such as EXAMPLE and example). Otherwise, these services have the same DNS name and can't be distinguished. However, if you use a namespace that's only accessible by API calls, then you can create services that with names that differ only by case.</p> </note>"
         },
         "NamespaceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace that you want to use to create the service. The namespace ID must be specified, but it can be specified either here or in the <code>DnsConfig</code> object.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace that you want to use to create the service. For namespaces shared with your Amazon Web Services account, specify the namespace ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "CreatorRequestId":{
           "shape":"ResourceId",
@@ -681,8 +686,8 @@
       "required":["Id"],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace that you want to delete.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace that you want to delete.</p>"
         }
       }
     },
@@ -703,8 +708,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service from which the attributes will be deleted.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service from which the attributes will be deleted. For services created in a namespace shared with your Amazon Web Services account, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "Attributes":{
           "shape":"ServiceAttributeKeyList",
@@ -714,23 +719,21 @@
     },
     "DeleteServiceAttributesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteServiceRequest":{
       "type":"structure",
       "required":["Id"],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to delete.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to delete. If the namespace associated with the service is shared with your Amazon Web Services account, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a>.</p>"
         }
       }
     },
     "DeleteServiceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterInstanceRequest":{
       "type":"structure",
@@ -740,8 +743,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that the instance is associated with.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that the instance is associated with. If the namespace associated with the service is shared with your account, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "InstanceId":{
           "shape":"ResourceId",
@@ -767,7 +770,7 @@
       "members":{
         "NamespaceName":{
           "shape":"NamespaceName",
-          "documentation":"<p>The <code>HttpName</code> name of the namespace. It's found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace. In most cases, <code>Name</code> and <code>HttpName</code> match. However, if you reuse <code>Name</code> for namespace creation, a generated hash is added to <code>HttpName</code> to distinguish the two.</p>"
+          "documentation":"<p>The <code>HttpName</code> name of the namespace. The <code>HttpName</code> is found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace. In most cases, <code>Name</code> and <code>HttpName</code> match. However, if you reuse <code>Name</code> for namespace creation, a generated hash is added to <code>HttpName</code> to distinguish the two.</p>"
         },
         "ServiceName":{
           "shape":"ServiceName",
@@ -788,6 +791,10 @@
         "HealthStatus":{
           "shape":"HealthStatusFilter",
           "documentation":"<p>The health status of the instances that you want to discover. This parameter is ignored for services that don't have a health check configured, and all instances are returned.</p> <dl> <dt>HEALTHY</dt> <dd> <p>Returns healthy instances.</p> </dd> <dt>UNHEALTHY</dt> <dd> <p>Returns unhealthy instances.</p> </dd> <dt>ALL</dt> <dd> <p>Returns all instances.</p> </dd> <dt>HEALTHY_OR_ELSE_ALL</dt> <dd> <p>Returns healthy instances, unless none are reporting a healthy state. In that case, return all instances. This is also called failing open.</p> </dd> </dl>"
+        },
+        "OwnerAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the namespace associated with the instance, as specified in the namespace <code>ResourceOwner</code> field. For instances associated with namespaces that are shared with your account, you must specify an <code>OwnerAccount</code>.</p>"
         }
       }
     },
@@ -813,11 +820,15 @@
       "members":{
         "NamespaceName":{
           "shape":"NamespaceName",
-          "documentation":"<p>The <code>HttpName</code> name of the namespace. It's found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace.</p>"
+          "documentation":"<p>The <code>HttpName</code> name of the namespace. The <code>HttpName</code> is found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace.</p>"
         },
         "ServiceName":{
           "shape":"ServiceName",
           "documentation":"<p>The name of the service that you specified when you registered the instance.</p>"
+        },
+        "OwnerAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the namespace associated with the instance, as specified in the namespace <code>ResourceOwner</code> field. For instances associated with namespaces that are shared with your account, you must specify an <code>OwnerAccount</code>. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       }
     },
@@ -908,7 +919,7 @@
       "members":{
         "Message":{"shape":"ErrorMessage"},
         "DuplicateOperationId":{
-          "shape":"ResourceId",
+          "shape":"OperationId",
           "documentation":"<p>The ID of the operation that's already in progress.</p>"
         }
       },
@@ -947,8 +958,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that the instance is associated with.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that the instance is associated with. For services created in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "InstanceId":{
           "shape":"ResourceId",
@@ -959,6 +970,10 @@
     "GetInstanceResponse":{
       "type":"structure",
       "members":{
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace that contains the service that the instance is associated with. If this isn't your account ID, it's the ID of the account that shared the namespace with your account.</p>"
+        },
         "Instance":{
           "shape":"Instance",
           "documentation":"<p>A complex type that contains information about a specified instance.</p>"
@@ -970,8 +985,8 @@
       "required":["ServiceId"],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that the instance is associated with.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that the instance is associated with. For services created in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "Instances":{
           "shape":"InstanceIdList",
@@ -1005,8 +1020,8 @@
       "required":["Id"],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace that you want to get information about.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace that you want to get information about. For namespaces shared with your Amazon Web Services account, specify the namespace ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i> </p>"
         }
       }
     },
@@ -1024,8 +1039,12 @@
       "required":["OperationId"],
       "members":{
         "OperationId":{
-          "shape":"ResourceId",
+          "shape":"OperationId",
           "documentation":"<p>The ID of the operation that you want to get more information about.</p>"
+        },
+        "OwnerAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the namespace associated with the operation, as specified in the namespace <code>ResourceOwner</code> field. For operations associated with namespaces that are shared with your account, you must specify an <code>OwnerAccount</code>.</p>"
         }
       }
     },
@@ -1043,8 +1062,8 @@
       "required":["ServiceId"],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to get attributes for.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to get attributes for. For services created in a namespace shared with your Amazon Web Services account, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       }
     },
@@ -1062,8 +1081,8 @@
       "required":["Id"],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to get settings for.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to get settings for. For services created by consumers in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       }
     },
@@ -1141,7 +1160,7 @@
         },
         "NamespaceName":{
           "shape":"NamespaceNameHttp",
-          "documentation":"<p> <code/> <code/> <code/> </p> <p>The <code>HttpName</code> name of the namespace. It's found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace.</p>"
+          "documentation":"<p>The <code>HttpName</code> name of the namespace. It's found in the <code>HttpProperties</code> member of the <code>Properties</code> member of the namespace.</p>"
         },
         "ServiceName":{
           "shape":"ServiceName",
@@ -1198,6 +1217,10 @@
         "Attributes":{
           "shape":"Attributes",
           "documentation":"<p>A string map that contains the following information for the service that you specify in <code>ServiceId</code>:</p> <ul> <li> <p>The attributes that apply to the records that are defined in the service. </p> </li> <li> <p>For each attribute, the applicable value.</p> </li> </ul> <note> <p>Do not include sensitive information in the attributes if the namespace is discoverable by public DNS queries.</p> </note> <p>Supported attribute keys include the following:</p> <dl> <dt>AWS_ALIAS_DNS_NAME</dt> <dd> <p>If you want Cloud Map to create a Route 53 alias record that routes traffic to an Elastic Load Balancing load balancer, specify the DNS name that's associated with the load balancer. For information about how to get the DNS name, see <a href=\"https://docs.aws.amazon.com/Route53/latest/APIReference/API_AliasTarget.html#Route53-Type-AliasTarget-DNSName\">AliasTarget-&gt;DNSName</a> in the <i>Route 53 API Reference</i>.</p> <p>Note the following:</p> <ul> <li> <p>The configuration for the service that's specified by <code>ServiceId</code> must include settings for an <code>A</code> record, an <code>AAAA</code> record, or both.</p> </li> <li> <p>In the service that's specified by <code>ServiceId</code>, the value of <code>RoutingPolicy</code> must be <code>WEIGHTED</code>.</p> </li> <li> <p>If the service that's specified by <code>ServiceId</code> includes <code>HealthCheckConfig</code> settings, Cloud Map creates the health check, but it won't associate the health check with the alias record.</p> </li> <li> <p>Auto naming currently doesn't support creating alias records that route traffic to Amazon Web Services resources other than ELB load balancers.</p> </li> <li> <p>If you specify a value for <code>AWS_ALIAS_DNS_NAME</code>, don't specify values for any of the <code>AWS_INSTANCE</code> attributes.</p> </li> </ul> </dd> <dt>AWS_EC2_INSTANCE_ID</dt> <dd> <p> <i>HTTP namespaces only.</i> The Amazon EC2 instance ID for the instance. The <code>AWS_INSTANCE_IPV4</code> attribute contains the primary private IPv4 address.</p> </dd> <dt>AWS_INIT_HEALTH_STATUS</dt> <dd> <p>If the service configuration includes <code>HealthCheckCustomConfig</code>, you can optionally use <code>AWS_INIT_HEALTH_STATUS</code> to specify the initial status of the custom health check, <code>HEALTHY</code> or <code>UNHEALTHY</code>. If you don't specify a value for <code>AWS_INIT_HEALTH_STATUS</code>, the initial status is <code>HEALTHY</code>.</p> </dd> <dt>AWS_INSTANCE_CNAME</dt> <dd> <p>If the service configuration includes a <code>CNAME</code> record, the domain name that you want Route 53 to return in response to DNS queries (for example, <code>example.com</code>).</p> <p>This value is required if the service specified by <code>ServiceId</code> includes settings for an <code>CNAME</code> record.</p> </dd> <dt>AWS_INSTANCE_IPV4</dt> <dd> <p>If the service configuration includes an <code>A</code> record, the IPv4 address that you want Route 53 to return in response to DNS queries (for example, <code>192.0.2.44</code>).</p> <p>This value is required if the service specified by <code>ServiceId</code> includes settings for an <code>A</code> record. If the service includes settings for an <code>SRV</code> record, you must specify a value for <code>AWS_INSTANCE_IPV4</code>, <code>AWS_INSTANCE_IPV6</code>, or both.</p> </dd> <dt>AWS_INSTANCE_IPV6</dt> <dd> <p>If the service configuration includes an <code>AAAA</code> record, the IPv6 address that you want Route 53 to return in response to DNS queries (for example, <code>2001:0db8:85a3:0000:0000:abcd:0001:2345</code>).</p> <p>This value is required if the service specified by <code>ServiceId</code> includes settings for an <code>AAAA</code> record. If the service includes settings for an <code>SRV</code> record, you must specify a value for <code>AWS_INSTANCE_IPV4</code>, <code>AWS_INSTANCE_IPV6</code>, or both.</p> </dd> <dt>AWS_INSTANCE_PORT</dt> <dd> <p>If the service includes an <code>SRV</code> record, the value that you want Route 53 to return for the port.</p> <p>If the service includes <code>HealthCheckConfig</code>, the port on the endpoint that you want Route 53 to send requests to. </p> <p>This value is required if you specified settings for an <code>SRV</code> record or a Route 53 health check when you created the service.</p> </dd> </dl>"
+        },
+        "CreatedByAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that registered the instance. If this isn't your account ID, it's the ID of the account that shared the namespace with your account or the ID of another account with which the namespace has been shared. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>A complex type that contains information about an instance that Cloud Map creates when you submit a <code>RegisterInstance</code> request.</p>"
@@ -1235,6 +1258,10 @@
         "Attributes":{
           "shape":"Attributes",
           "documentation":"<p>A string map that contains the following information:</p> <ul> <li> <p>The attributes that are associated with the instance. </p> </li> <li> <p>For each attribute, the applicable value.</p> </li> </ul> <p>Supported attribute keys include the following:</p> <dl> <dt>AWS_ALIAS_DNS_NAME</dt> <dd> <p>For an alias record that routes traffic to an Elastic Load Balancing load balancer, the DNS name that's associated with the load balancer. </p> </dd> <dt>AWS_EC2_INSTANCE_ID (HTTP namespaces only)</dt> <dd> <p>The Amazon EC2 instance ID for the instance. When the <code>AWS_EC2_INSTANCE_ID</code> attribute is specified, then the <code>AWS_INSTANCE_IPV4</code> attribute contains the primary private IPv4 address.</p> </dd> <dt>AWS_INIT_HEALTH_STATUS</dt> <dd> <p>If the service configuration includes <code>HealthCheckCustomConfig</code>, you can optionally use <code>AWS_INIT_HEALTH_STATUS</code> to specify the initial status of the custom health check, <code>HEALTHY</code> or <code>UNHEALTHY</code>. If you don't specify a value for <code>AWS_INIT_HEALTH_STATUS</code>, the initial status is <code>HEALTHY</code>.</p> </dd> <dt>AWS_INSTANCE_CNAME</dt> <dd> <p>For a <code>CNAME</code> record, the domain name that Route 53 returns in response to DNS queries (for example, <code>example.com</code>).</p> </dd> <dt>AWS_INSTANCE_IPV4</dt> <dd> <p>For an <code>A</code> record, the IPv4 address that Route 53 returns in response to DNS queries (for example, <code>192.0.2.44</code>).</p> </dd> <dt>AWS_INSTANCE_IPV6</dt> <dd> <p>For an <code>AAAA</code> record, the IPv6 address that Route 53 returns in response to DNS queries (for example, <code>2001:0db8:85a3:0000:0000:abcd:0001:2345</code>).</p> </dd> <dt>AWS_INSTANCE_PORT</dt> <dd> <p>For an <code>SRV</code> record, the value that Route 53 returns for the port. In addition, if the service includes <code>HealthCheckConfig</code>, the port on the endpoint that Route 53 sends requests to.</p> </dd> </dl>"
+        },
+        "CreatedByAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that registered the instance. If this isn't your account ID, it's the ID of the account that shared the namespace with your account or the ID of another account with which the namespace has been shared. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>A complex type that contains information about the instances that you registered by using a specified service.</p>"
@@ -1256,8 +1283,8 @@
       "required":["ServiceId"],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to list instances for.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to list instances for. For services created in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "NextToken":{
           "shape":"NextToken",
@@ -1272,6 +1299,10 @@
     "ListInstancesResponse":{
       "type":"structure",
       "members":{
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace that contains the specified service. If this isn't your account ID, it's the ID of the account that shared the namespace with your account.</p>"
+        },
         "Instances":{
           "shape":"InstanceSummaryList",
           "documentation":"<p>Summary information about the instances that are associated with the specified service.</p>"
@@ -1408,6 +1439,10 @@
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that Cloud Map assigns to the namespace when you create it.</p>"
         },
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace. If this isn't your account ID, it's the ID of the account that shared the namespace with your account. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+        },
         "Name":{
           "shape":"NamespaceName",
           "documentation":"<p>The name of the namespace, such as <code>example.com</code>.</p>"
@@ -1464,15 +1499,15 @@
       "members":{
         "Name":{
           "shape":"NamespaceFilterName",
-          "documentation":"<p>Specify the namespaces that you want to get using one of the following.</p> <ul> <li> <p> <code>TYPE</code>: Gets the namespaces of the specified type.</p> </li> <li> <p> <code>NAME</code>: Gets the namespaces with the specified name.</p> </li> <li> <p> <code>HTTP_NAME</code>: Gets the namespaces with the specified HTTP name.</p> </li> </ul>"
+          "documentation":"<p>Specify the namespaces that you want to get using one of the following.</p> <ul> <li> <p> <code>TYPE</code>: Gets the namespaces of the specified type.</p> </li> <li> <p> <code>NAME</code>: Gets the namespaces with the specified name.</p> </li> <li> <p> <code>HTTP_NAME</code>: Gets the namespaces with the specified HTTP name.</p> </li> <li> <p> <code>RESOURCE_OWNER</code>: Gets the namespaces created by your Amazon Web Services account or by other accounts. This can be used to filter for shared namespaces. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p> </li> </ul>"
         },
         "Values":{
           "shape":"FilterValues",
-          "documentation":"<p>Specify the values that are applicable to the value that you specify for <code>Name</code>.</p> <ul> <li> <p> <code>TYPE</code>: Specify <code>HTTP</code>, <code>DNS_PUBLIC</code>, or <code>DNS_PRIVATE</code>.</p> </li> <li> <p> <code>NAME</code>: Specify the name of the namespace, which is found in <code>Namespace.Name</code>.</p> </li> <li> <p> <code>HTTP_NAME</code>: Specify the HTTP name of the namespace, which is found in <code>Namespace.Properties.HttpProperties.HttpName</code>.</p> </li> </ul>"
+          "documentation":"<p>Specify the values that are applicable to the value that you specify for <code>Name</code>.</p> <ul> <li> <p> <code>TYPE</code>: Specify <code>HTTP</code>, <code>DNS_PUBLIC</code>, or <code>DNS_PRIVATE</code>.</p> </li> <li> <p> <code>NAME</code>: Specify the name of the namespace, which is found in <code>Namespace.Name</code>.</p> </li> <li> <p> <code>HTTP_NAME</code>: Specify the HTTP name of the namespace, which is found in <code>Namespace.Properties.HttpProperties.HttpName</code>.</p> </li> <li> <p> <code>RESOURCE_OWNER</code>: Specify one of <code>SELF</code> or <code>OTHER_ACCOUNTS</code>. <code>SELF</code> can be used to filter namespaces created by you and <code>OTHER_ACCOUNTS</code> can be used to filter namespaces shared with you that were created by other accounts.</p> </li> </ul>"
         },
         "Condition":{
           "shape":"FilterCondition",
-          "documentation":"<p>Specify the operator that you want to use to determine whether a namespace matches the specified value. Valid values for <code>Condition</code> are one of the following.</p> <ul> <li> <p> <code>EQ</code>: When you specify <code>EQ</code> for <code>Condition</code>, you can specify only one value. <code>EQ</code> is supported for <code>TYPE</code>, <code>NAME</code>, and <code>HTTP_NAME</code>. <code>EQ</code> is the default condition and can be omitted.</p> </li> <li> <p> <code>BEGINS_WITH</code>: When you specify <code>BEGINS_WITH</code> for <code>Condition</code>, you can specify only one value. <code>BEGINS_WITH</code> is supported for <code>TYPE</code>, <code>NAME</code>, and <code>HTTP_NAME</code>.</p> </li> </ul>"
+          "documentation":"<p>Specify the operator that you want to use to determine whether a namespace matches the specified value. Valid values for <code>Condition</code> are one of the following.</p> <ul> <li> <p> <code>EQ</code>: When you specify <code>EQ</code> for <code>Condition</code>, you can specify only one value. <code>EQ</code> is supported for <code>TYPE</code>, <code>NAME</code>, <code>RESOURCE_OWNER</code> and <code>HTTP_NAME</code>. <code>EQ</code> is the default condition and can be omitted.</p> </li> <li> <p> <code>BEGINS_WITH</code>: When you specify <code>BEGINS_WITH</code> for <code>Condition</code>, you can specify only one value. <code>BEGINS_WITH</code> is supported for <code>TYPE</code>, <code>NAME</code>, and <code>HTTP_NAME</code>.</p> </li> </ul>"
         }
       },
       "documentation":"<p>A complex type that identifies the namespaces that you want to list. You can choose to list public or private namespaces.</p>"
@@ -1482,7 +1517,8 @@
       "enum":[
         "TYPE",
         "NAME",
-        "HTTP_NAME"
+        "HTTP_NAME",
+        "RESOURCE_OWNER"
       ]
     },
     "NamespaceFilters":{
@@ -1497,12 +1533,12 @@
     "NamespaceNameHttp":{
       "type":"string",
       "max":1024,
-      "pattern":"^[!-~]{1,1024}$"
+      "pattern":"^(?!arn:)[!-~]{1,1024}$"
     },
     "NamespaceNamePrivate":{
       "type":"string",
       "max":253,
-      "pattern":"^[!-~]{1,253}$"
+      "pattern":"^(?!arn:)[!-~]{1,253}$"
     },
     "NamespaceNamePublic":{
       "type":"string",
@@ -1546,6 +1582,10 @@
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that Cloud Map assigns to the namespace when you create it.</p>"
         },
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace. If this isn't your account ID, it's the ID of the account that shared the namespace with your account. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+        },
         "Name":{
           "shape":"NamespaceName",
           "documentation":"<p>The name of the namespace. When you create a namespace, Cloud Map automatically creates a Route 53 hosted zone that has the same name as the namespace.</p>"
@@ -1592,6 +1632,10 @@
           "shape":"OperationId",
           "documentation":"<p>The ID of the operation that you want to get information about.</p>"
         },
+        "OwnerAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that owns the namespace associated with the operation.</p>"
+        },
         "Type":{
           "shape":"OperationType",
           "documentation":"<p>The name of the operation that's associated with the specified ID.</p>"
@@ -1861,8 +1905,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to use for settings for the instance.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to use for settings for the instance. For services created in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "InstanceId":{
           "shape":"InstanceId",
@@ -1974,6 +2018,10 @@
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that Cloud Map assigns to the service when you create it.</p>"
         },
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace with which the service is associated. If this isn't your account ID, it is the ID of the account that shared the namespace with your account. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+        },
         "Name":{
           "shape":"ServiceName",
           "documentation":"<p>The name of the service.</p>"
@@ -2013,6 +2061,10 @@
         "CreatorRequestId":{
           "shape":"ResourceId",
           "documentation":"<p>A unique string that identifies the request and that allows failed requests to be retried without the risk of running the operation twice. <code>CreatorRequestId</code> can be any unique string (for example, a date/timestamp).</p>"
+        },
+        "CreatedByAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the service. If this isn't your account ID, it is the ID of account of the namespace owner or of another account with which the namespace has been shared. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>A complex type that contains information about the specified service.</p>"
@@ -2028,6 +2080,10 @@
         "ServiceId":{
           "shape":"ResourceId",
           "documentation":"<p>The ID of the existing service.</p>"
+        },
+        "ServiceArn":{
+          "shape":"Arn",
+          "documentation":"<p>The ARN of the existing service.</p>"
         }
       },
       "documentation":"<p>The service can't be created because a service with the same name already exists.</p>",
@@ -2054,6 +2110,10 @@
           "shape":"Arn",
           "documentation":"<p>The ARN of the service that the attributes are associated with.</p>"
         },
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace with which the service is associated. If this isn't your account ID, it is the ID of the account that shared the namespace with your account. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+        },
         "Attributes":{
           "shape":"ServiceAttributesMap",
           "documentation":"<p>A string map that contains the following information for the service that you specify in <code>ServiceArn</code>:</p> <ul> <li> <p>The attributes that apply to the service. </p> </li> <li> <p>For each attribute, the applicable value.</p> </li> </ul> <p>You can specify a total of 30 attributes.</p>"
@@ -2103,22 +2163,25 @@
       "members":{
         "Name":{
           "shape":"ServiceFilterName",
-          "documentation":"<p>Specify <code>NAMESPACE_ID</code>.</p>"
+          "documentation":"<p>Specify the services that you want to get using one of the following.</p> <ul> <li> <p> <code>NAMESPACE_ID</code>: Gets the services associated with the specified namespace.</p> </li> <li> <p> <code>RESOURCE_OWNER</code>: Gets the services associated with the namespaces created by your Amazon Web Services account or by other accounts. This can be used to filter for services created in a shared namespace. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p> </li> </ul>"
         },
         "Values":{
           "shape":"FilterValues",
-          "documentation":"<p>The values that are applicable to the value that you specify for <code>Condition</code> to filter the list of services.</p>"
+          "documentation":"<p>The values that are applicable to the value that you specify for <code>Condition</code> to filter the list of services.</p> <ul> <li> <p> <b>NAMESPACE_ID</b>: Specify one namespace ID or ARN. Specify the namespace ARN for namespaces that are shared with your Amazon Web Services account.</p> </li> <li> <p> <b>RESOURCE_OWNER</b>: Specify one of <code>SELF</code> or <code>OTHER_ACCOUNTS</code>. <code>SELF</code> can be used to filter services associated with namespaces created by you and <code>OTHER_ACCOUNTS</code> can be used to filter services associated with namespaces that were shared with you.</p> </li> </ul>"
         },
         "Condition":{
           "shape":"FilterCondition",
-          "documentation":"<p>The operator that you want to use to determine whether a service is returned by <code>ListServices</code>. Valid values for <code>Condition</code> include the following:</p> <ul> <li> <p> <code>EQ</code>: When you specify <code>EQ</code>, specify one namespace ID for <code>Values</code>. <code>EQ</code> is the default condition and can be omitted.</p> </li> </ul>"
+          "documentation":"<p>The operator that you want to use to determine whether a service is returned by <code>ListServices</code>. Valid values for <code>Condition</code> include the following:</p> <ul> <li> <p> <code>EQ</code>: When you specify <code>EQ</code>, specify one value. <code>EQ</code> is the default condition and can be omitted.</p> </li> </ul>"
         }
       },
       "documentation":"<p>A complex type that lets you specify the namespaces that you want to list services for.</p>"
     },
     "ServiceFilterName":{
       "type":"string",
-      "enum":["NAMESPACE_ID"]
+      "enum":[
+        "NAMESPACE_ID",
+        "RESOURCE_OWNER"
+      ]
     },
     "ServiceFilters":{
       "type":"list",
@@ -2151,6 +2214,10 @@
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) that Cloud Map assigns to the service when you create it.</p>"
         },
+        "ResourceOwner":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the namespace with which the service is associated. If this isn't your account ID, it is the ID of the account that shared the namespace with your account. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
+        },
         "Name":{
           "shape":"ServiceName",
           "documentation":"<p>The name of the service.</p>"
@@ -2182,6 +2249,10 @@
         "CreateDate":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service was created.</p>"
+        },
+        "CreatedByAccount":{
+          "shape":"AWSAccountId",
+          "documentation":"<p>The ID of the Amazon Web Services account that created the service. If this isn't your account ID, it is the account ID of the namespace owner or of another account with which the namespace has been shared. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>A complex type that contains information about a specified service.</p>"
@@ -2252,8 +2323,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2292,8 +2362,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateHttpNamespaceRequest":{
       "type":"structure",
@@ -2303,8 +2372,8 @@
       ],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace that you want to update.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace that you want to update.</p>"
         },
         "UpdaterRequestId":{
           "shape":"ResourceId",
@@ -2335,8 +2404,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that includes the configuration for the custom health check that you want to change the status for.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that includes the configuration for the custom health check that you want to change the status for. For services created in a shared namespace, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i>.</p>"
         },
         "InstanceId":{
           "shape":"ResourceId",
@@ -2356,8 +2425,8 @@
       ],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace that you want to update.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace that you want to update.</p>"
         },
         "UpdaterRequestId":{
           "shape":"ResourceId",
@@ -2387,8 +2456,8 @@
       ],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the namespace being updated.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the namespace being updated.</p>"
         },
         "UpdaterRequestId":{
           "shape":"ResourceId",
@@ -2418,8 +2487,8 @@
       ],
       "members":{
         "ServiceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to update.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to update. For services created in a namespace shared with your Amazon Web Services account, specify the service ARN.</p>"
         },
         "Attributes":{
           "shape":"ServiceAttributesMap",
@@ -2429,8 +2498,7 @@
     },
     "UpdateServiceAttributesResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateServiceRequest":{
       "type":"structure",
@@ -2440,8 +2508,8 @@
       ],
       "members":{
         "Id":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service that you want to update.</p>"
+          "shape":"Arn",
+          "documentation":"<p>The ID or Amazon Resource Name (ARN) of the service that you want to update. If the namespace associated with the service is shared with your Amazon Web Services account, specify the service ARN. For more information about shared namespaces, see <a href=\"https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html\">Cross-account Cloud Map namespace sharing</a> in the <i>Cloud Map Developer Guide</i> </p>"
         },
         "Service":{
           "shape":"ServiceChange",
diff -pruN 2.23.6-1/awscli/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ses/2010-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ses/2010-12-01/service-2.json 2.31.35-1/awscli/botocore/data/ses/2010-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/ses/2010-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ses/2010-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1088,8 +1088,7 @@
   "shapes":{
     "AccountSendingPausedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that email sending is disabled for your entire Amazon SES account.</p> <p>You can enable or disable email sending for your Amazon SES account using <a>UpdateAccountSendingEnabled</a>.</p>",
       "error":{
         "code":"AccountSendingPausedException",
@@ -1331,8 +1330,7 @@
     },
     "CloneReceiptRuleSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CloudWatchDestination":{
@@ -1508,8 +1506,7 @@
     },
     "CreateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateConfigurationSetRequest":{
@@ -1525,8 +1522,7 @@
     },
     "CreateConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateConfigurationSetTrackingOptionsRequest":{
@@ -1546,8 +1542,7 @@
     },
     "CreateConfigurationSetTrackingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateCustomVerificationEmailTemplateRequest":{
@@ -1601,8 +1596,7 @@
     },
     "CreateReceiptFilterResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateReceiptRuleRequest":{
@@ -1629,8 +1623,7 @@
     },
     "CreateReceiptRuleResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateReceiptRuleSetRequest":{
@@ -1646,8 +1639,7 @@
     },
     "CreateReceiptRuleSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "CreateTemplateRequest":{
@@ -1663,8 +1655,7 @@
     },
     "CreateTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CustomMailFromStatus":{
       "type":"string",
@@ -1678,8 +1669,7 @@
     "CustomRedirectDomain":{"type":"string"},
     "CustomVerificationEmailInvalidContentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that custom verification email template provided content is invalid.</p>",
       "error":{
         "code":"CustomVerificationEmailInvalidContent",
@@ -1771,8 +1761,7 @@
     },
     "DeleteConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteConfigurationSetRequest":{
@@ -1788,8 +1777,7 @@
     },
     "DeleteConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteConfigurationSetTrackingOptionsRequest":{
@@ -1805,8 +1793,7 @@
     },
     "DeleteConfigurationSetTrackingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteCustomVerificationEmailTemplateRequest":{
@@ -1840,8 +1827,7 @@
     },
     "DeleteIdentityPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteIdentityRequest":{
@@ -1857,8 +1843,7 @@
     },
     "DeleteIdentityResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteReceiptFilterRequest":{
@@ -1874,8 +1859,7 @@
     },
     "DeleteReceiptFilterResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteReceiptRuleRequest":{
@@ -1898,8 +1882,7 @@
     },
     "DeleteReceiptRuleResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteReceiptRuleSetRequest":{
@@ -1915,8 +1898,7 @@
     },
     "DeleteReceiptRuleSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "DeleteTemplateRequest":{
@@ -1932,8 +1914,7 @@
     },
     "DeleteTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteVerifiedEmailAddressRequest":{
       "type":"structure",
@@ -1958,8 +1939,7 @@
     },
     "DescribeActiveReceiptRuleSetRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents a request to return the metadata and receipt rules for the receipt rule set that is currently active. You use receipt rule sets to receive email with Amazon SES. For more information, see the <a href=\"https://docs.aws.amazon.com/ses/latest/dg/receiving-email-concepts.html\">Amazon SES Developer Guide</a>.</p>"
     },
     "DescribeActiveReceiptRuleSetResponse":{
@@ -2608,8 +2588,7 @@
     },
     "InvalidConfigurationSetException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the configuration set is invalid. See the error message for details.</p>",
       "error":{
         "code":"InvalidConfigurationSet",
@@ -2620,8 +2599,7 @@
     },
     "InvalidDeliveryOptionsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that provided delivery option is invalid.</p>",
       "error":{
         "code":"InvalidDeliveryOptions",
@@ -2668,8 +2646,7 @@
     },
     "InvalidPolicyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the provided policy is invalid. Check the error stack for more information about what caused the error.</p>",
       "error":{
         "code":"InvalidPolicy",
@@ -2758,8 +2735,7 @@
     },
     "InvalidTrackingOptionsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the custom domain to be used for open and click tracking redirects is invalid. This error appears most often in the following situations:</p> <ul> <li> <p>When the tracking domain you specified is not verified in Amazon SES.</p> </li> <li> <p>When the tracking domain you specified is not a valid domain or subdomain.</p> </li> </ul>",
       "error":{
         "code":"InvalidTrackingOptions",
@@ -2816,8 +2792,7 @@
     "LastFreshStart":{"type":"timestamp"},
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that a resource could not be created because of service limits. For a list of Amazon SES limits, see the <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/limits.html\">Amazon SES Developer Guide</a>.</p>",
       "error":{
         "code":"LimitExceeded",
@@ -2939,8 +2914,7 @@
     },
     "ListReceiptFiltersRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Represents a request to list the IP address filters that exist under your Amazon Web Services account. You use IP address filters when you receive email with Amazon SES. For more information, see the <a href=\"https://docs.aws.amazon.com/ses/latest/dg/receiving-email-concepts.html\">Amazon SES Developer Guide</a>.</p>"
     },
     "ListReceiptFiltersResponse":{
@@ -3021,8 +2995,7 @@
     "MailFromDomainName":{"type":"string"},
     "MailFromDomainNotVerifiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Indicates that the message could not be sent because Amazon SES could not read the MX record required to use the specified MAIL FROM domain. For information about editing the custom MAIL FROM domain settings for an identity, see the <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/mail-from-edit.html\">Amazon SES Developer Guide</a>.</p>",
       "error":{
         "code":"MailFromDomainNotVerifiedException",
@@ -3081,8 +3054,7 @@
     "MessageId":{"type":"string"},
     "MessageRejected":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the action failed, and the message could not be sent. Check the error stack for more information about what caused the error.</p>",
       "error":{
         "code":"MessageRejected",
@@ -3163,8 +3135,7 @@
     },
     "ProductionAccessNotGrantedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Indicates that the account has not been granted production access.</p>",
       "error":{
         "code":"ProductionAccessNotGranted",
@@ -3190,8 +3161,7 @@
     },
     "PutConfigurationSetDeliveryOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutIdentityPolicyRequest":{
@@ -3219,8 +3189,7 @@
     },
     "PutIdentityPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "RawMessage":{
@@ -3449,8 +3418,7 @@
     },
     "ReorderReceiptRuleSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "ReportingMta":{"type":"string"},
@@ -3927,8 +3895,7 @@
     },
     "SetActiveReceiptRuleSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetIdentityDkimEnabledRequest":{
@@ -3951,8 +3918,7 @@
     },
     "SetIdentityDkimEnabledResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetIdentityFeedbackForwardingEnabledRequest":{
@@ -3975,8 +3941,7 @@
     },
     "SetIdentityFeedbackForwardingEnabledResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetIdentityHeadersInNotificationsEnabledRequest":{
@@ -4004,8 +3969,7 @@
     },
     "SetIdentityHeadersInNotificationsEnabledResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetIdentityMailFromDomainRequest":{
@@ -4029,8 +3993,7 @@
     },
     "SetIdentityMailFromDomainResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetIdentityNotificationTopicRequest":{
@@ -4057,8 +4020,7 @@
     },
     "SetIdentityNotificationTopicResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "SetReceiptRulePositionRequest":{
@@ -4085,8 +4047,7 @@
     },
     "SetReceiptRulePositionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "StopAction":{
@@ -4278,8 +4239,7 @@
     },
     "UpdateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "UpdateConfigurationSetReputationMetricsEnabledRequest":{
@@ -4335,8 +4295,7 @@
     },
     "UpdateConfigurationSetTrackingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "UpdateCustomVerificationEmailTemplateRequest":{
@@ -4390,8 +4349,7 @@
     },
     "UpdateReceiptRuleResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "UpdateTemplateRequest":{
@@ -4403,8 +4361,7 @@
     },
     "UpdateTemplateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "VerificationAttributes":{
       "type":"map",
@@ -4494,8 +4451,7 @@
     },
     "VerifyEmailIdentityResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An empty element returned on a successful request.</p>"
     },
     "WorkmailAction":{
diff -pruN 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,32 +5,32 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "EndpointId": {
             "required": false,
             "documentation": "Operation parameter for EndpointId",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -154,7 +154,7 @@
                                                 {
                                                     "conditions": [],
                                                     "endpoint": {
-                                                        "url": "https://{EndpointId}.endpoints.email.{PartitionResult#dualStackDnsSuffix}",
+                                                        "url": "https://{EndpointId}.endpoints.email.global.{PartitionResult#dualStackDnsSuffix}",
                                                         "properties": {
                                                             "authSchemes": [
                                                                 {
diff -pruN 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/paginators-1.json 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,30 @@
       "output_token": "NextToken",
       "limit_key": "PageSize",
       "result_key": "MultiRegionEndpoints"
+    },
+    "ListReputationEntities": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "ReputationEntities"
+    },
+    "ListResourceTenants": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "ResourceTenants"
+    },
+    "ListTenantResources": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "TenantResources"
+    },
+    "ListTenants": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "PageSize",
+      "result_key": "Tenants"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/service-2.json 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/sesv2/2019-09-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sesv2/2019-09-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -266,6 +266,38 @@
       ],
       "documentation":"<p>Creates a multi-region endpoint (global-endpoint).</p> <p>The primary region is going to be the AWS-Region where the operation is executed. The secondary region has to be provided in request's parameters. From the data flow standpoint there is no difference between primary and secondary regions - sending traffic will be split equally between the two. The primary region is the region where the resource has been created and where it can be managed. </p>"
     },
+    "CreateTenant":{
+      "name":"CreateTenant",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants"
+      },
+      "input":{"shape":"CreateTenantRequest"},
+      "output":{"shape":"CreateTenantResponse"},
+      "errors":[
+        {"shape":"AlreadyExistsException"},
+        {"shape":"LimitExceededException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Create a tenant.</p> <p> <i>Tenants</i> are logical containers that group related SES resources together. Each tenant can have its own set of resources like email identities, configuration sets, and templates, along with reputation metrics and sending status. This helps isolate and manage email sending for different customers or business units within your Amazon SES API v2 account.</p>"
+    },
+    "CreateTenantResourceAssociation":{
+      "name":"CreateTenantResourceAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/resources"
+      },
+      "input":{"shape":"CreateTenantResourceAssociationRequest"},
+      "output":{"shape":"CreateTenantResourceAssociationResponse"},
+      "errors":[
+        {"shape":"AlreadyExistsException"},
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Associate a resource with a tenant.</p> <p> <i>Resources</i> can be email identities, configuration sets, or email templates. When you associate a resource with a tenant, you can use that resource when sending emails on behalf of that tenant.</p> <p>A single resource can be associated with multiple tenants, allowing for resource sharing across different tenants while maintaining isolation in email sending operations.</p>"
+    },
     "DeleteConfigurationSet":{
       "name":"DeleteConfigurationSet",
       "http":{
@@ -436,6 +468,36 @@
       ],
       "documentation":"<p>Removes an email address from the suppression list for your account.</p>"
     },
+    "DeleteTenant":{
+      "name":"DeleteTenant",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/delete"
+      },
+      "input":{"shape":"DeleteTenantRequest"},
+      "output":{"shape":"DeleteTenantResponse"},
+      "errors":[
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Delete an existing tenant.</p> <p>When you delete a tenant, its associations with resources are removed, but the resources themselves are not deleted.</p>"
+    },
+    "DeleteTenantResourceAssociation":{
+      "name":"DeleteTenantResourceAssociation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/resources/delete"
+      },
+      "input":{"shape":"DeleteTenantResourceAssociationRequest"},
+      "output":{"shape":"DeleteTenantResourceAssociationResponse"},
+      "errors":[
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Delete an association between a tenant and a resource.</p> <p>When you delete a tenant-resource association, the resource itself is not deleted, only its association with the specific tenant is removed. After removal, the resource will no longer be available for use with that tenant's email sending operations.</p>"
+    },
     "GetAccount":{
       "name":"GetAccount",
       "http":{
@@ -750,6 +812,21 @@
       ],
       "documentation":"<p>Displays the multi-region endpoint (global-endpoint) configuration.</p> <p>Only multi-region endpoints (global-endpoints) whose primary region is the AWS-Region where operation is executed can be displayed.</p>"
     },
+    "GetReputationEntity":{
+      "name":"GetReputationEntity",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v2/email/reputation/entities/{ReputationEntityType}/{ReputationEntityReference}"
+      },
+      "input":{"shape":"GetReputationEntityRequest"},
+      "output":{"shape":"GetReputationEntityResponse"},
+      "errors":[
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Retrieve information about a specific reputation entity, including its reputation management policy, customer-managed status, Amazon Web Services Amazon SES-managed status, and aggregate sending status.</p> <p> <i>Reputation entities</i> represent resources in your Amazon SES account that have reputation tracking and management capabilities. The reputation impact reflects the highest impact reputation finding for the entity. Reputation findings can be retrieved using the <code>ListRecommendations</code> operation.</p>"
+    },
     "GetSuppressedDestination":{
       "name":"GetSuppressedDestination",
       "http":{
@@ -765,6 +842,21 @@
       ],
       "documentation":"<p>Retrieves information about a specific email address that's on the suppression list for your account.</p>"
     },
+    "GetTenant":{
+      "name":"GetTenant",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/get"
+      },
+      "input":{"shape":"GetTenantRequest"},
+      "output":{"shape":"GetTenantResponse"},
+      "errors":[
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Get information about a specific tenant, including the tenant's name, ID, ARN, creation timestamp, tags, and sending status.</p>"
+    },
     "ListConfigurationSets":{
       "name":"ListConfigurationSets",
       "http":{
@@ -791,7 +883,7 @@
         {"shape":"BadRequestException"},
         {"shape":"TooManyRequestsException"}
       ],
-      "documentation":"<p>Lists all of the contact lists available.</p>"
+      "documentation":"<p>Lists all of the contact lists available.</p> <p>If your output includes a \"NextToken\" field with a string value, this indicates there may be additional contacts on the filtered list - regardless of the number of contacts returned.</p>"
     },
     "ListContacts":{
       "name":"ListContacts",
@@ -951,6 +1043,35 @@
       ],
       "documentation":"<p>Lists the recommendations present in your Amazon SES account in the current Amazon Web Services Region.</p> <p>You can execute this operation no more than once per second.</p>"
     },
+    "ListReputationEntities":{
+      "name":"ListReputationEntities",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/reputation/entities"
+      },
+      "input":{"shape":"ListReputationEntitiesRequest"},
+      "output":{"shape":"ListReputationEntitiesResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>List reputation entities in your Amazon SES account in the current Amazon Web Services Region. You can filter the results by entity type, reputation impact, sending status, or entity reference prefix.</p> <p> <i>Reputation entities</i> represent resources in your account that have reputation tracking and management capabilities. Use this operation to get an overview of all entities and their current reputation status.</p>"
+    },
+    "ListResourceTenants":{
+      "name":"ListResourceTenants",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/resources/tenants/list"
+      },
+      "input":{"shape":"ListResourceTenantsRequest"},
+      "output":{"shape":"ListResourceTenantsResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotFoundException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>List all tenants associated with a specific resource.</p> <p>This operation returns a list of tenants that are associated with the specified resource. This is useful for understanding which tenants are currently using a particular resource such as an email identity, configuration set, or email template.</p>"
+    },
     "ListSuppressedDestinations":{
       "name":"ListSuppressedDestinations",
       "http":{
@@ -981,6 +1102,35 @@
       ],
       "documentation":"<p>Retrieve a list of the tags (keys and values) that are associated with a specified resource. A <i>tag</i> is a label that you optionally define and associate with a resource. Each tag consists of a required <i>tag key</i> and an optional associated <i>tag value</i>. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key.</p>"
     },
+    "ListTenantResources":{
+      "name":"ListTenantResources",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/resources/list"
+      },
+      "input":{"shape":"ListTenantResourcesRequest"},
+      "output":{"shape":"ListTenantResourcesResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"NotFoundException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>List all resources associated with a specific tenant.</p> <p>This operation returns a list of resources (email identities, configuration sets, or email templates) that are associated with the specified tenant. You can optionally filter the results by resource type.</p>"
+    },
+    "ListTenants":{
+      "name":"ListTenants",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v2/email/tenants/list"
+      },
+      "input":{"shape":"ListTenantsRequest"},
+      "output":{"shape":"ListTenantsResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>List all tenants associated with your account in the current Amazon Web Services Region.</p> <p>This operation returns basic information about each tenant, such as tenant name, ID, ARN, and creation timestamp.</p>"
+    },
     "PutAccountDedicatedIpWarmupAttributes":{
       "name":"PutAccountDedicatedIpWarmupAttributes",
       "http":{
@@ -1052,6 +1202,22 @@
       ],
       "documentation":"<p>Update your Amazon SES account VDM attributes.</p> <p>You can execute this operation no more than once per second.</p>"
     },
+    "PutConfigurationSetArchivingOptions":{
+      "name":"PutConfigurationSetArchivingOptions",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v2/email/configuration-sets/{ConfigurationSetName}/archiving-options"
+      },
+      "input":{"shape":"PutConfigurationSetArchivingOptionsRequest"},
+      "output":{"shape":"PutConfigurationSetArchivingOptionsResponse"},
+      "errors":[
+        {"shape":"NotFoundException"},
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"}
+      ],
+      "documentation":"<p>Associate the configuration set with a MailManager archive. When you send email using the <code>SendEmail</code> or <code>SendBulkEmail</code> operations the message as it will be given to the receiving SMTP server will be archived, along with the recipient information.</p>",
+      "idempotent":true
+    },
     "PutConfigurationSetDeliveryOptions":{
       "name":"PutConfigurationSetDeliveryOptions",
       "http":{
@@ -1492,6 +1658,36 @@
         {"shape":"BadRequestException"}
       ],
       "documentation":"<p>Updates an email template. Email templates enable you to send personalized email to one or more destinations in a single API operation. For more information, see the <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html\">Amazon SES Developer Guide</a>.</p> <p>You can execute this operation no more than once per second.</p>"
+    },
+    "UpdateReputationEntityCustomerManagedStatus":{
+      "name":"UpdateReputationEntityCustomerManagedStatus",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v2/email/reputation/entities/{ReputationEntityType}/{ReputationEntityReference}/customer-managed-status"
+      },
+      "input":{"shape":"UpdateReputationEntityCustomerManagedStatusRequest"},
+      "output":{"shape":"UpdateReputationEntityCustomerManagedStatusResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Update the customer-managed sending status for a reputation entity. This allows you to enable, disable, or reinstate sending for the entity.</p> <p>The customer-managed status works in conjunction with the Amazon Web Services Amazon SES-managed status to determine the overall sending capability. When you update the customer-managed status, the Amazon Web Services Amazon SES-managed status remains unchanged. If Amazon Web Services Amazon SES has disabled the entity, it will not be allowed to send regardless of the customer-managed status setting. When you reinstate an entity through the customer-managed status, it can continue sending only if the Amazon Web Services Amazon SES-managed status also permits sending, even if there are active reputation findings, until the findings are resolved or new violations occur.</p>"
+    },
+    "UpdateReputationEntityPolicy":{
+      "name":"UpdateReputationEntityPolicy",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/v2/email/reputation/entities/{ReputationEntityType}/{ReputationEntityReference}/policy"
+      },
+      "input":{"shape":"UpdateReputationEntityPolicyRequest"},
+      "output":{"shape":"UpdateReputationEntityPolicyResponse"},
+      "errors":[
+        {"shape":"TooManyRequestsException"},
+        {"shape":"BadRequestException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Update the reputation management policy for a reputation entity. The policy determines how the entity responds to reputation findings, such as automatically pausing sending when certain thresholds are exceeded.</p> <p>Reputation management policies are Amazon Web Services Amazon SES-managed (predefined policies). You can select from none, standard, and strict policies.</p>"
     }
   },
   "shapes":{
@@ -1527,8 +1723,7 @@
     },
     "AccountSuspendedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the account's ability to send email has been permanently restricted.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -1550,18 +1745,110 @@
     "AdminEmail":{"type":"string"},
     "AlreadyExistsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource specified in your request already exists.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
     },
-    "AmazonResourceName":{"type":"string"},
-    "AttributesData":{"type":"string"},
-    "BadRequestException":{
+    "AmazonResourceName":{
+      "type":"string",
+      "min":1
+    },
+    "ArchiveArn":{
+      "type":"string",
+      "max":1011,
+      "min":20,
+      "pattern":"arn:(aws|aws-[a-z-]+):ses:[a-z]{2}-[a-z-]+-[0-9]:[0-9]{1,20}:mailmanager-archive/a-[a-z0-9]{24,62}"
+    },
+    "ArchivingOptions":{
+      "type":"structure",
+      "members":{
+        "ArchiveArn":{
+          "shape":"ArchiveArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the MailManager archive where the Amazon SES API v2 will archive sent emails.</p>"
+        }
+      },
+      "documentation":"<p>Used to associate a configuration set with a MailManager archive.</p>"
+    },
+    "Attachment":{
       "type":"structure",
+      "required":[
+        "RawContent",
+        "FileName"
+      ],
       "members":{
+        "RawContent":{
+          "shape":"RawAttachmentData",
+          "documentation":"<p> The raw data of the attachment. It needs to be base64-encoded if you are accessing Amazon SES directly through the HTTPS interface. If you are accessing Amazon SES using an Amazon Web Services SDK, the SDK takes care of the base 64-encoding for you.</p>"
+        },
+        "ContentDisposition":{
+          "shape":"AttachmentContentDisposition",
+          "documentation":"<p> A standard descriptor indicating how the attachment should be rendered in the email. Supported values: <code>ATTACHMENT</code> or <code>INLINE</code>.</p>"
+        },
+        "FileName":{
+          "shape":"AttachmentFileName",
+          "documentation":"<p>The file name for the attachment as it will appear in the email. Amazon SES restricts certain file extensions. To ensure attachments are accepted, check the <a href=\"https://docs.aws.amazon.com/ses/latest/dg/mime-types.html\">Unsupported attachment types</a> in the Amazon SES Developer Guide.</p>"
+        },
+        "ContentDescription":{
+          "shape":"AttachmentContentDescription",
+          "documentation":"<p> A brief description of the attachment content.</p>"
+        },
+        "ContentId":{
+          "shape":"AttachmentContentId",
+          "documentation":"<p> Unique identifier for the attachment, used for referencing attachments with INLINE disposition in HTML content.</p>"
+        },
+        "ContentTransferEncoding":{
+          "shape":"AttachmentContentTransferEncoding",
+          "documentation":"<p> Specifies how the attachment is encoded. Supported values: <code>BASE64</code>, <code>QUOTED_PRINTABLE</code>, <code>SEVEN_BIT</code>.</p>"
+        },
+        "ContentType":{
+          "shape":"AttachmentContentType",
+          "documentation":"<p> The MIME type of the attachment.</p> <note> <p>Example: <code>application/pdf</code>, <code>image/jpeg</code> </p> </note>"
+        }
       },
+      "documentation":"<p> Contains metadata and attachment raw content.</p>"
+    },
+    "AttachmentContentDescription":{
+      "type":"string",
+      "max":1000
+    },
+    "AttachmentContentDisposition":{
+      "type":"string",
+      "enum":[
+        "ATTACHMENT",
+        "INLINE"
+      ]
+    },
+    "AttachmentContentId":{
+      "type":"string",
+      "max":78,
+      "min":1
+    },
+    "AttachmentContentTransferEncoding":{
+      "type":"string",
+      "enum":[
+        "BASE64",
+        "QUOTED_PRINTABLE",
+        "SEVEN_BIT"
+      ]
+    },
+    "AttachmentContentType":{
+      "type":"string",
+      "max":78,
+      "min":1
+    },
+    "AttachmentFileName":{
+      "type":"string",
+      "max":255
+    },
+    "AttachmentList":{
+      "type":"list",
+      "member":{"shape":"Attachment"}
+    },
+    "AttributesData":{"type":"string"},
+    "BadRequestException":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>The input you provided is invalid.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -1817,8 +2104,7 @@
     },
     "CancelExportJobResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CaseId":{"type":"string"},
@@ -1879,8 +2165,7 @@
     "ComplaintSubType":{"type":"string"},
     "ConcurrentModificationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource is being modified by another operation or thread.</p>",
       "error":{"httpStatusCode":500},
       "exception":true,
@@ -1896,8 +2181,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If there is already an ongoing account details update under review.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -2018,8 +2302,7 @@
     },
     "CreateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateConfigurationSetRequest":{
@@ -2054,14 +2337,17 @@
         "VdmOptions":{
           "shape":"VdmOptions",
           "documentation":"<p>An object that defines the VDM options for emails that you send using the configuration set.</p>"
+        },
+        "ArchivingOptions":{
+          "shape":"ArchivingOptions",
+          "documentation":"<p>An object that defines the MailManager archiving options for emails that you send using the configuration set.</p>"
         }
       },
       "documentation":"<p>A request to create a configuration set.</p>"
     },
     "CreateConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateContactListRequest":{
@@ -2088,8 +2374,7 @@
     },
     "CreateContactListResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateContactRequest":{
       "type":"structure",
@@ -2124,8 +2409,7 @@
     },
     "CreateContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateCustomVerificationEmailTemplateRequest":{
       "type":"structure",
@@ -2167,8 +2451,7 @@
     },
     "CreateCustomVerificationEmailTemplateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "CreateDedicatedIpPoolRequest":{
@@ -2192,8 +2475,7 @@
     },
     "CreateDedicatedIpPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateDeliverabilityTestReportRequest":{
@@ -2269,8 +2551,7 @@
     },
     "CreateEmailIdentityPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "CreateEmailIdentityRequest":{
@@ -2334,8 +2615,7 @@
     },
     "CreateEmailTemplateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "CreateExportJobRequest":{
@@ -2430,6 +2710,74 @@
       },
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
+    "CreateTenantRequest":{
+      "type":"structure",
+      "required":["TenantName"],
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to create. The name can contain up to 64 alphanumeric characters, including letters, numbers, hyphens (-) and underscores (_) only.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of objects that define the tags (keys and values) to associate with the tenant</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to create a tenant.</p> <p> <i>Tenants</i> are logical containers that group related SES resources together. Each tenant can have its own set of resources like email identities, configuration sets, and templates, along with reputation metrics and sending status. This helps isolate and manage email sending for different customers or business units within your Amazon SES API v2 account.</p>"
+    },
+    "CreateTenantResourceAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "TenantName",
+        "ResourceArn"
+      ],
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to associate the resource with.</p>"
+        },
+        "ResourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to associate with the tenant.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to associate a resource with a tenant.</p> <p>Resources can be email identities, configuration sets, or email templates. When you associate a resource with a tenant, you can use that resource when sending emails on behalf of that tenant.</p>"
+    },
+    "CreateTenantResourceAssociationResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
+    },
+    "CreateTenantResponse":{
+      "type":"structure",
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant.</p>"
+        },
+        "TenantId":{
+          "shape":"TenantId",
+          "documentation":"<p>A unique identifier for the tenant.</p>"
+        },
+        "TenantArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the tenant.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the tenant was created.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of objects that define the tags (keys and values) associated with the tenant.</p>"
+        },
+        "SendingStatus":{
+          "shape":"SendingStatus",
+          "documentation":"<p>The status of email sending capability for the tenant.</p>"
+        }
+      },
+      "documentation":"<p>Information about a newly created tenant.</p>"
+    },
     "CustomRedirectDomain":{
       "type":"string",
       "documentation":"<p>The domain to use for tracking open and click events.</p>"
@@ -2529,11 +2877,11 @@
         },
         "WarmupStatus":{
           "shape":"WarmupStatus",
-          "documentation":"<p>The warm-up status of a dedicated IP address. The status can have one of the following values:</p> <ul> <li> <p> <code>IN_PROGRESS</code> – The IP address isn't ready to use because the dedicated IP warm-up process is ongoing.</p> </li> <li> <p> <code>DONE</code> – The dedicated IP warm-up process is complete, and the IP address is ready to use.</p> </li> </ul>"
+          "documentation":"<p>The warm-up status of a dedicated IP address. The status can have one of the following values:</p> <ul> <li> <p> <code>IN_PROGRESS</code> – The IP address isn't ready to use because the dedicated IP warm-up process is ongoing.</p> </li> <li> <p> <code>DONE</code> – The dedicated IP warm-up process is complete, and the IP address is ready to use.</p> </li> <li> <p> <code>NOT_APPLICABLE</code> – The warm-up status doesn't apply to this IP address. This status is used for IP addresses in managed dedicated IP pools, where Amazon SES automatically handles the warm-up process.</p> </li> </ul>"
         },
         "WarmupPercentage":{
           "shape":"Percentage100Wrapper",
-          "documentation":"<p>Indicates how complete the dedicated IP warm-up process is. When this value equals 1, the address has completed the warm-up process and is ready for use.</p>"
+          "documentation":"<p>Indicates the progress of your dedicated IP warm-up:</p> <ul> <li> <p> <code>0-100</code> – For standard dedicated IP addresses, this shows the warm-up completion percentage. A value of 100 means the IP address is fully warmed up and ready for use.</p> </li> <li> <p> <code>-1</code> – Appears for IP addresses in managed dedicated pools where Amazon SES automatically handles the warm-up process, making the percentage not applicable.</p> </li> </ul>"
         },
         "PoolName":{
           "shape":"PoolName",
@@ -2593,8 +2941,7 @@
     },
     "DeleteConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteConfigurationSetRequest":{
@@ -2612,8 +2959,7 @@
     },
     "DeleteConfigurationSetResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteContactListRequest":{
@@ -2630,8 +2976,7 @@
     },
     "DeleteContactListResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContactRequest":{
       "type":"structure",
@@ -2656,8 +3001,7 @@
     },
     "DeleteContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCustomVerificationEmailTemplateRequest":{
       "type":"structure",
@@ -2674,8 +3018,7 @@
     },
     "DeleteCustomVerificationEmailTemplateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "DeleteDedicatedIpPoolRequest":{
@@ -2693,8 +3036,7 @@
     },
     "DeleteDedicatedIpPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteEmailIdentityPolicyRequest":{
@@ -2721,8 +3063,7 @@
     },
     "DeleteEmailIdentityPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteEmailIdentityRequest":{
@@ -2740,8 +3081,7 @@
     },
     "DeleteEmailIdentityResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "DeleteEmailTemplateRequest":{
@@ -2759,8 +3099,7 @@
     },
     "DeleteEmailTemplateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "DeleteMultiRegionEndpointRequest":{
@@ -2801,9 +3140,47 @@
     },
     "DeleteSuppressedDestinationResponse":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
+    },
+    "DeleteTenantRequest":{
+      "type":"structure",
+      "required":["TenantName"],
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to delete.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to delete a tenant.</p>"
+    },
+    "DeleteTenantResourceAssociationRequest":{
+      "type":"structure",
+      "required":[
+        "TenantName",
+        "ResourceArn"
+      ],
       "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to remove the resource association from.</p>"
+        },
+        "ResourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to remove from the tenant association.</p>"
+        }
       },
-      "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
+      "documentation":"<p>Represents a request to delete an association between a tenant and a resource.</p>"
+    },
+    "DeleteTenantResourceAssociationResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
+    },
+    "DeleteTenantResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "DeliverabilityDashboardAccountStatus":{
       "type":"string",
@@ -2959,7 +3336,7 @@
         },
         "SigningAttributesOrigin":{
           "shape":"DkimSigningAttributesOrigin",
-          "documentation":"<p>A string that indicates how DKIM was configured for the identity. These are the possible values:</p> <ul> <li> <p> <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html\">Easy DKIM</a>.</p> </li> <li> <p> <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM (BYODKIM).</p> </li> <li> <p> <code>AWS_SES_AF_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Africa (Cape Town) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_NORTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Stockholm) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Mumbai) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Paris) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (London) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Milan) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Ireland) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Osaka) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Seoul) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Middle East (Bahrain) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Tokyo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_IL_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Israel (Tel Aviv) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_SA_EAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in South America (São Paulo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_CA_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Canada (Central) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Singapore) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Sydney) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Jakarta) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Frankfurt) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US East (N. Virginia) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US East (Ohio) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US West (N. California) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US West (Oregon) region using Deterministic Easy-DKIM (DEED). </p> </li> </ul>"
+          "documentation":"<p>A string that indicates how DKIM was configured for the identity. These are the possible values:</p> <ul> <li> <p> <code>AWS_SES</code> – Indicates that DKIM was configured for the identity by using <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html\">Easy DKIM</a>.</p> </li> <li> <p> <code>EXTERNAL</code> – Indicates that DKIM was configured for the identity by using Bring Your Own DKIM (BYODKIM).</p> </li> <li> <p> <code>AWS_SES_AF_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Africa (Cape Town) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_NORTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Stockholm) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Mumbai) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Hyderabad) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Paris) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (London) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Milan) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Ireland) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Osaka) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Seoul) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Middle East (UAE) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_SOUTH_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Middle East (Bahrain) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Tokyo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_IL_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Israel (Tel Aviv) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_SA_EAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in South America (São Paulo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_CA_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Canada (Central) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Singapore) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Sydney) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_3</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Asia Pacific (Jakarta) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Frankfurt) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in Europe (Zurich) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US East (N. Virginia) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US East (Ohio) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_1</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US West (N. California) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_2</code> – Indicates that DKIM was configured for the identity by replicating signing attributes from a parent identity in US West (Oregon) region using Deterministic Easy-DKIM (DEED). </p> </li> </ul>"
         },
         "NextSigningKeyLength":{
           "shape":"DkimSigningKeyLength",
@@ -2993,7 +3370,7 @@
         },
         "DomainSigningAttributesOrigin":{
           "shape":"DkimSigningAttributesOrigin",
-          "documentation":"<p>The attribute to use for configuring DKIM for the identity depends on the operation: </p> <ol> <li> <p>For <code>PutEmailIdentityDkimSigningAttributes</code>: </p> <ul> <li> <p>None of the values are allowed - use the <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_PutEmailIdentityDkimSigningAttributes.html#SES-PutEmailIdentityDkimSigningAttributes-request-SigningAttributesOrigin\"> <code>SigningAttributesOrigin</code> </a> parameter instead </p> </li> </ul> </li> <li> <p>For <code>CreateEmailIdentity</code> when replicating a parent identity's DKIM configuration: </p> <ul> <li> <p>Allowed values: All values except <code>AWS_SES</code> and <code>EXTERNAL</code> </p> </li> </ul> </li> </ol> <ul> <li> <p> <code>AWS_SES</code> – Configure DKIM for the identity by using Easy DKIM. </p> </li> <li> <p> <code>EXTERNAL</code> – Configure DKIM for the identity by using Bring Your Own DKIM (BYODKIM). </p> </li> <li> <p> <code>AWS_SES_AF_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Africa (Cape Town) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_NORTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Stockholm) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Mumbai) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Paris) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (London) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Milan) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Ireland) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Osaka) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Seoul) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Middle East (Bahrain) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Tokyo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_IL_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Israel (Tel Aviv) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_SA_EAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in South America (São Paulo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_CA_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Canada (Central) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Singapore) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Sydney) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Jakarta) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Frankfurt) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in US East (N. Virginia) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in US East (Ohio) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_1</code> – Configure DKIM for the identity by replicating from a parent identity in US West (N. California) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_2</code> – Configure DKIM for the identity by replicating from a parent identity in US West (Oregon) region using Deterministic Easy-DKIM (DEED). </p> </li> </ul>"
+          "documentation":"<p>The attribute to use for configuring DKIM for the identity depends on the operation: </p> <ol> <li> <p>For <code>PutEmailIdentityDkimSigningAttributes</code>: </p> <ul> <li> <p>None of the values are allowed - use the <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_PutEmailIdentityDkimSigningAttributes.html#SES-PutEmailIdentityDkimSigningAttributes-request-SigningAttributesOrigin\"> <code>SigningAttributesOrigin</code> </a> parameter instead </p> </li> </ul> </li> <li> <p>For <code>CreateEmailIdentity</code> when replicating a parent identity's DKIM configuration: </p> <ul> <li> <p>Allowed values: All values except <code>AWS_SES</code> and <code>EXTERNAL</code> </p> </li> </ul> </li> </ol> <ul> <li> <p> <code>AWS_SES</code> – Configure DKIM for the identity by using Easy DKIM. </p> </li> <li> <p> <code>EXTERNAL</code> – Configure DKIM for the identity by using Bring Your Own DKIM (BYODKIM). </p> </li> <li> <p> <code>AWS_SES_AF_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Africa (Cape Town) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_NORTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Stockholm) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Mumbai) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTH_2</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Hyderabad) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Paris) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (London) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Milan) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_WEST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Ireland) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Osaka) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Seoul) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Middle East (UAE) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_ME_SOUTH_1</code> – Configure DKIM for the identity by replicating from a parent identity in Middle East (Bahrain) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_NORTHEAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Tokyo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_IL_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Israel (Tel Aviv) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_SA_EAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in South America (São Paulo) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_CA_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Canada (Central) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Singapore) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Sydney) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_AP_SOUTHEAST_3</code> – Configure DKIM for the identity by replicating from a parent identity in Asia Pacific (Jakarta) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_1</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Frankfurt) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_EU_CENTRAL_2</code> – Configure DKIM for the identity by replicating from a parent identity in Europe (Zurich) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_1</code> – Configure DKIM for the identity by replicating from a parent identity in US East (N. Virginia) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_EAST_2</code> – Configure DKIM for the identity by replicating from a parent identity in US East (Ohio) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_1</code> – Configure DKIM for the identity by replicating from a parent identity in US West (N. California) region using Deterministic Easy-DKIM (DEED). </p> </li> <li> <p> <code>AWS_SES_US_WEST_2</code> – Configure DKIM for the identity by replicating from a parent identity in US West (Oregon) region using Deterministic Easy-DKIM (DEED). </p> </li> </ul>"
         }
       },
       "documentation":"<p>An object that contains configuration for Bring Your Own DKIM (BYODKIM), or, for Easy DKIM</p>"
@@ -3024,7 +3401,10 @@
         "AWS_SES_US_EAST_1",
         "AWS_SES_US_EAST_2",
         "AWS_SES_US_WEST_1",
-        "AWS_SES_US_WEST_2"
+        "AWS_SES_US_WEST_2",
+        "AWS_SES_ME_CENTRAL_1",
+        "AWS_SES_AP_SOUTH_2",
+        "AWS_SES_EU_CENTRAL_2"
       ]
     },
     "DkimSigningKeyLength":{
@@ -3186,7 +3566,7 @@
       "members":{
         "Simple":{
           "shape":"Message",
-          "documentation":"<p>The simple email message. The message consists of a subject and a message body.</p>"
+          "documentation":"<p>The simple email message. The message consists of a subject, message body and attachments list.</p>"
         },
         "Raw":{
           "shape":"RawMessage",
@@ -3197,7 +3577,7 @@
           "documentation":"<p>The template to use for the email message.</p>"
         }
       },
-      "documentation":"<p>An object that defines the entire content of the email, including the message headers and the body content. You can create a simple email message, in which you specify the subject and the text and HTML versions of the message body. You can also create raw messages, in which you specify a complete MIME-formatted message. Raw messages can include attachments and custom headers.</p>"
+      "documentation":"<p>An object that defines the entire content of the email, including the message headers, body content, and attachments. For a simple email message, you specify the subject and provide both text and HTML versions of the message body. You can also add attachments to simple and templated messages. For a raw message, you provide a complete MIME-formatted message, which can include custom headers and attachments.</p>"
     },
     "EmailInsights":{
       "type":"structure",
@@ -3280,7 +3660,7 @@
     },
     "EmailTemplateName":{
       "type":"string",
-      "documentation":"<p>The name of the template. You will refer to this name when you send email using the <code>SendTemplatedEmail</code> or <code>SendBulkTemplatedEmail</code> operations.</p>",
+      "documentation":"<p>The name of the template. You will refer to this name when you send email using the <code>SendEmail</code> or <code>SendBulkEmail</code> operations.</p>",
       "min":1
     },
     "EmailTemplateSubject":{
@@ -3346,7 +3726,7 @@
         },
         "MatchingEventTypes":{
           "shape":"EventTypes",
-          "documentation":"<p>The types of events that Amazon SES sends to the specified event destinations.</p> <ul> <li> <p> <code>SEND</code> - The send request was successful and SES will attempt to deliver the message to the recipient’s mail server. (If account-level or global suppression is being used, SES will still count it as a send, but delivery is suppressed.)</p> </li> <li> <p> <code>REJECT</code> - SES accepted the email, but determined that it contained a virus and didn’t attempt to deliver it to the recipient’s mail server.</p> </li> <li> <p> <code>BOUNCE</code> - (<i>Hard bounce</i>) The recipient's mail server permanently rejected the email. (<i>Soft bounces</i> are only included when SES fails to deliver the email after retrying for a period of time.)</p> </li> <li> <p> <code>COMPLAINT</code> - The email was successfully delivered to the recipient’s mail server, but the recipient marked it as spam.</p> </li> <li> <p> <code>DELIVERY</code> - SES successfully delivered the email to the recipient's mail server.</p> </li> <li> <p> <code>OPEN</code> - The recipient received the message and opened it in their email client.</p> </li> <li> <p> <code>CLICK</code> - The recipient clicked one or more links in the email.</p> </li> <li> <p> <code>RENDERING_FAILURE</code> - The email wasn't sent because of a template rendering issue. This event type can occur when template data is missing, or when there is a mismatch between template parameters and data. (This event type only occurs when you send email using the <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference/API_SendTemplatedEmail.html\"> <code>SendTemplatedEmail</code> </a> or <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference/API_SendBulkTemplatedEmail.html\"> <code>SendBulkTemplatedEmail</code> </a> API operations.) </p> </li> <li> <p> <code>DELIVERY_DELAY</code> - The email couldn't be delivered to the recipient’s mail server because a temporary issue occurred. Delivery delays can occur, for example, when the recipient's inbox is full, or when the receiving email server experiences a transient issue.</p> </li> <li> <p> <code>SUBSCRIPTION</code> - The email was successfully delivered, but the recipient updated their subscription preferences by clicking on an <i>unsubscribe</i> link as part of your <a href=\"https://docs.aws.amazon.com/ses/latest/dg/sending-email-subscription-management.html\">subscription management</a>.</p> </li> </ul>"
+          "documentation":"<p>The types of events that Amazon SES sends to the specified event destinations.</p> <ul> <li> <p> <code>SEND</code> - The send request was successful and SES will attempt to deliver the message to the recipient’s mail server. (If account-level or global suppression is being used, SES will still count it as a send, but delivery is suppressed.)</p> </li> <li> <p> <code>REJECT</code> - SES accepted the email, but determined that it contained a virus and didn’t attempt to deliver it to the recipient’s mail server.</p> </li> <li> <p> <code>BOUNCE</code> - (<i>Hard bounce</i>) The recipient's mail server permanently rejected the email. (<i>Soft bounces</i> are only included when SES fails to deliver the email after retrying for a period of time.)</p> </li> <li> <p> <code>COMPLAINT</code> - The email was successfully delivered to the recipient’s mail server, but the recipient marked it as spam.</p> </li> <li> <p> <code>DELIVERY</code> - SES successfully delivered the email to the recipient's mail server.</p> </li> <li> <p> <code>OPEN</code> - The recipient received the message and opened it in their email client.</p> </li> <li> <p> <code>CLICK</code> - The recipient clicked one or more links in the email.</p> </li> <li> <p> <code>RENDERING_FAILURE</code> - The email wasn't sent because of a template rendering issue. This event type can occur when template data is missing, or when there is a mismatch between template parameters and data. (This event type only occurs when you send email using the <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html\"> <code>SendEmail</code> </a> or <a href=\"https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html\"> <code>SendBulkEmail</code> </a> API operations.) </p> </li> <li> <p> <code>DELIVERY_DELAY</code> - The email couldn't be delivered to the recipient’s mail server because a temporary issue occurred. Delivery delays can occur, for example, when the recipient's inbox is full, or when the receiving email server experiences a transient issue.</p> </li> <li> <p> <code>SUBSCRIPTION</code> - The email was successfully delivered, but the recipient updated their subscription preferences by clicking on an <i>unsubscribe</i> link as part of your <a href=\"https://docs.aws.amazon.com/ses/latest/dg/sending-email-subscription-management.html\">subscription management</a>.</p> </li> </ul>"
         },
         "KinesisFirehoseDestination":{
           "shape":"KinesisFirehoseDestination",
@@ -3582,8 +3962,7 @@
     "GeneralEnforcementStatus":{"type":"string"},
     "GetAccountRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A request to obtain information about the email-sending capabilities of your Amazon SES account.</p>"
     },
     "GetAccountResponse":{
@@ -3718,6 +4097,10 @@
         "VdmOptions":{
           "shape":"VdmOptions",
           "documentation":"<p>An object that contains information about the VDM preferences for your configuration set.</p>"
+        },
+        "ArchivingOptions":{
+          "shape":"ArchivingOptions",
+          "documentation":"<p>An object that defines the MailManager archive where sent emails are archived that you send using the configuration set.</p>"
         }
       },
       "documentation":"<p>Information about a configuration set.</p>"
@@ -3950,8 +4333,7 @@
     },
     "GetDeliverabilityDashboardOptionsRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Retrieve information about the status of the Deliverability dashboard for your Amazon Web Services account. When the Deliverability dashboard is enabled, you gain access to reputation, deliverability, and other metrics for your domains. You also gain the ability to perform predictive inbox placement tests.</p> <p>When you use the Deliverability dashboard, you pay a monthly subscription charge, in addition to any other fees that you accrue by using Amazon SES and other Amazon Web Services services. For more information about the features and cost of a Deliverability dashboard subscription, see <a href=\"http://aws.amazon.com/pinpoint/pricing/\">Amazon Pinpoint Pricing</a>.</p>"
     },
     "GetDeliverabilityDashboardOptionsResponse":{
@@ -4401,6 +4783,38 @@
       },
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
+    "GetReputationEntityRequest":{
+      "type":"structure",
+      "required":[
+        "ReputationEntityReference",
+        "ReputationEntityType"
+      ],
+      "members":{
+        "ReputationEntityReference":{
+          "shape":"ReputationEntityReference",
+          "documentation":"<p>The unique identifier for the reputation entity. For resource-type entities, this is the Amazon Resource Name (ARN) of the resource.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityReference"
+        },
+        "ReputationEntityType":{
+          "shape":"ReputationEntityType",
+          "documentation":"<p>The type of reputation entity. Currently, only <code>RESOURCE</code> type entities are supported.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityType"
+        }
+      },
+      "documentation":"<p>Represents a request to retrieve information about a specific reputation entity.</p>"
+    },
+    "GetReputationEntityResponse":{
+      "type":"structure",
+      "members":{
+        "ReputationEntity":{
+          "shape":"ReputationEntity",
+          "documentation":"<p>The reputation entity information, including status records, policy configuration, and reputation impact.</p>"
+        }
+      },
+      "documentation":"<p>Information about the requested reputation entity.</p>"
+    },
     "GetSuppressedDestinationRequest":{
       "type":"structure",
       "required":["EmailAddress"],
@@ -4425,6 +4839,27 @@
       },
       "documentation":"<p>Information about the suppressed email address.</p>"
     },
+    "GetTenantRequest":{
+      "type":"structure",
+      "required":["TenantName"],
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to retrieve information about.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to get information about a specific tenant.</p>"
+    },
+    "GetTenantResponse":{
+      "type":"structure",
+      "members":{
+        "Tenant":{
+          "shape":"Tenant",
+          "documentation":"<p>A structure that contains details about the tenant.</p>"
+        }
+      },
+      "documentation":"<p>Information about a specific tenant.</p>"
+    },
     "GuardianAttributes":{
       "type":"structure",
       "members":{
@@ -4603,8 +5038,7 @@
     },
     "InternalServiceErrorException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The request couldn't be processed because an error occurred with the Amazon SES API v2.</p>",
       "error":{"httpStatusCode":500},
       "exception":true,
@@ -4612,8 +5046,7 @@
     },
     "InvalidNextTokenException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified request includes an invalid or expired token.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -4708,8 +5141,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>There are too many instances of the specified resource type.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -5187,7 +5619,7 @@
     },
     "ListRecommendationsFilterKey":{
       "type":"string",
-      "documentation":"<p>The <code>ListRecommendations</code> filter type. This can be one of the following:</p> <ul> <li> <p> <code>TYPE</code> – The recommendation type, with values like <code>DKIM</code>, <code>SPF</code>, <code>DMARC</code> or <code>BIMI</code>.</p> </li> <li> <p> <code>IMPACT</code> – The recommendation impact, with values like <code>HIGH</code> or <code>LOW</code>.</p> </li> <li> <p> <code>STATUS</code> – The recommendation status, with values like <code>OPEN</code> or <code>FIXED</code>.</p> </li> <li> <p> <code>RESOURCE_ARN</code> – The resource affected by the recommendation, with values like <code>arn:aws:ses:us-east-1:123456789012:identity/example.com</code>.</p> </li> </ul>",
+      "documentation":"<p>The <code>ListRecommendations</code> filter type. This can be one of the following:</p> <ul> <li> <p> <code>TYPE</code> – The recommendation type, with values like <code>DKIM</code>, <code>SPF</code>, <code>DMARC</code>, <code>BIMI</code>, or <code>COMPLAINT</code>.</p> </li> <li> <p> <code>IMPACT</code> – The recommendation impact, with values like <code>HIGH</code> or <code>LOW</code>.</p> </li> <li> <p> <code>STATUS</code> – The recommendation status, with values like <code>OPEN</code> or <code>FIXED</code>.</p> </li> <li> <p> <code>RESOURCE_ARN</code> – The resource affected by the recommendation, with values like <code>arn:aws:ses:us-east-1:123456789012:identity/example.com</code>.</p> </li> </ul>",
       "enum":[
         "TYPE",
         "IMPACT",
@@ -5227,6 +5659,71 @@
       },
       "documentation":"<p>Contains the response to your request to retrieve the list of recommendations for your account.</p>"
     },
+    "ListReputationEntitiesRequest":{
+      "type":"structure",
+      "members":{
+        "Filter":{
+          "shape":"ReputationEntityFilter",
+          "documentation":"<p>An object that contains filters to apply when listing reputation entities. You can filter by entity type, reputation impact, sending status, or entity reference prefix.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token returned from a previous call to <code>ListReputationEntities</code> to indicate the position in the list of reputation entities.</p>"
+        },
+        "PageSize":{
+          "shape":"MaxItems",
+          "documentation":"<p>The number of results to show in a single call to <code>ListReputationEntities</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to list reputation entities with optional filtering.</p>"
+    },
+    "ListReputationEntitiesResponse":{
+      "type":"structure",
+      "members":{
+        "ReputationEntities":{
+          "shape":"ReputationEntitiesList",
+          "documentation":"<p>An array that contains information about the reputation entities in your account.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that indicates that there are additional reputation entities to list. To view additional reputation entities, issue another request to <code>ListReputationEntities</code>, and pass this token in the <code>NextToken</code> parameter.</p>"
+        }
+      },
+      "documentation":"<p>A list of reputation entities in your account.</p>"
+    },
+    "ListResourceTenantsRequest":{
+      "type":"structure",
+      "required":["ResourceArn"],
+      "members":{
+        "ResourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to list associated tenants for.</p>"
+        },
+        "PageSize":{
+          "shape":"MaxItems",
+          "documentation":"<p>The number of results to show in a single call to <code>ListResourceTenants</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token returned from a previous call to <code>ListResourceTenants</code> to indicate the position in the list of resource tenants.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to list tenants associated with a specific resource.</p>"
+    },
+    "ListResourceTenantsResponse":{
+      "type":"structure",
+      "members":{
+        "ResourceTenants":{
+          "shape":"ResourceTenantMetadataList",
+          "documentation":"<p>An array that contains information about each tenant associated with the resource.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that indicates that there are additional tenants to list. To view additional tenants, issue another request to <code>ListResourceTenants</code>, and pass this token in the <code>NextToken</code> parameter.</p>"
+        }
+      },
+      "documentation":"<p>Information about tenants associated with a specific resource.</p>"
+    },
     "ListSuppressedDestinationsRequest":{
       "type":"structure",
       "members":{
@@ -5299,6 +5796,88 @@
         }
       }
     },
+    "ListTenantResourcesFilter":{
+      "type":"map",
+      "key":{"shape":"ListTenantResourcesFilterKey"},
+      "value":{"shape":"ListTenantResourcesFilterValue"},
+      "documentation":"<p>An object that contains mapping between <code>ListTenantResourcesFilterKey</code> and <code>ListTenantResourcesFilterValue</code> to filter by.</p>"
+    },
+    "ListTenantResourcesFilterKey":{
+      "type":"string",
+      "documentation":"<p>The key used to filter tenant resources. Currently, the only supported filter key is <code>RESOURCE_TYPE</code>.</p>",
+      "enum":["RESOURCE_TYPE"]
+    },
+    "ListTenantResourcesFilterValue":{
+      "type":"string",
+      "documentation":"<p>The value used to filter tenant resources. When filtering by <code>RESOURCE_TYPE</code>, valid values are <code>EMAIL_IDENTITY</code>, <code>CONFIGURATION_SET</code>, or <code>EMAIL_TEMPLATE</code>.</p>",
+      "max":512,
+      "min":1
+    },
+    "ListTenantResourcesRequest":{
+      "type":"structure",
+      "required":["TenantName"],
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant to list resources for.</p>"
+        },
+        "Filter":{
+          "shape":"ListTenantResourcesFilter",
+          "documentation":"<p>A map of filter keys and values for filtering the list of tenant resources. Currently, the only supported filter key is <code>RESOURCE_TYPE</code>.</p>"
+        },
+        "PageSize":{
+          "shape":"MaxItems",
+          "documentation":"<p>The number of results to show in a single call to <code>ListTenantResources</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token returned from a previous call to <code>ListTenantResources</code> to indicate the position in the list of tenant resources.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to list resources associated with a specific tenant.</p>"
+    },
+    "ListTenantResourcesResponse":{
+      "type":"structure",
+      "members":{
+        "TenantResources":{
+          "shape":"TenantResourceList",
+          "documentation":"<p>An array that contains information about each resource associated with the tenant.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that indicates that there are additional resources to list. To view additional resources, issue another request to <code>ListTenantResources</code>, and pass this token in the <code>NextToken</code> parameter.</p>"
+        }
+      },
+      "documentation":"<p>Information about resources associated with a specific tenant.</p>"
+    },
+    "ListTenantsRequest":{
+      "type":"structure",
+      "members":{
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token returned from a previous call to <code>ListTenants</code> to indicate the position in the list of tenants.</p>"
+        },
+        "PageSize":{
+          "shape":"MaxItems",
+          "documentation":"<p>The number of results to show in a single call to <code>ListTenants</code>. If the number of results is larger than the number you specified in this parameter, then the response includes a <code>NextToken</code> element, which you can use to obtain additional results.</p>"
+        }
+      },
+      "documentation":"<p>Represents a request to list all tenants associated with your account in the current Amazon Web Services Region.</p>"
+    },
+    "ListTenantsResponse":{
+      "type":"structure",
+      "members":{
+        "Tenants":{
+          "shape":"TenantInfoList",
+          "documentation":"<p>An array that contains basic information about each tenant.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A token that indicates that there are additional tenants to list. To view additional tenants, issue another request to <code>ListTenants</code>, and pass this token in the <code>NextToken</code> parameter.</p>"
+        }
+      },
+      "documentation":"<p>Information about tenants associated with your account.</p>"
+    },
     "MailFromAttributes":{
       "type":"structure",
       "required":[
@@ -5328,8 +5907,7 @@
     },
     "MailFromDomainNotVerifiedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the sending domain isn't verified.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -5377,6 +5955,10 @@
         "Headers":{
           "shape":"MessageHeaderList",
           "documentation":"<p>The list of message headers that will be added to the email message.</p>"
+        },
+        "Attachments":{
+          "shape":"AttachmentList",
+          "documentation":"<p> The List of attachments to include in your email. All recipients will receive the same attachments.</p>"
         }
       },
       "documentation":"<p>Represents the email message that you're sending. The <code>Message</code> object consists of a subject line and a message body.</p>"
@@ -5492,8 +6074,7 @@
     },
     "MessageRejected":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because it contains invalid content.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -5694,8 +6275,7 @@
     },
     "NotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource you attempted to access doesn't exist.</p>",
       "error":{"httpStatusCode":404},
       "exception":true
@@ -5807,8 +6387,7 @@
     },
     "PutAccountDedicatedIpWarmupAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutAccountDetailsRequest":{
@@ -5847,8 +6426,7 @@
     },
     "PutAccountDetailsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutAccountSendingAttributesRequest":{
@@ -5863,8 +6441,7 @@
     },
     "PutAccountSendingAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutAccountSuppressionAttributesRequest":{
@@ -5879,8 +6456,7 @@
     },
     "PutAccountSuppressionAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutAccountVdmAttributesRequest":{
@@ -5896,8 +6472,29 @@
     },
     "PutAccountVdmAttributesResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "PutConfigurationSetArchivingOptionsRequest":{
+      "type":"structure",
+      "required":["ConfigurationSetName"],
       "members":{
-      }
+        "ConfigurationSetName":{
+          "shape":"ConfigurationSetName",
+          "documentation":"<p>The name of the configuration set to associate with a MailManager archive.</p>",
+          "location":"uri",
+          "locationName":"ConfigurationSetName"
+        },
+        "ArchiveArn":{
+          "shape":"ArchiveArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the MailManager archive that the Amazon SES API v2 sends email to.</p>"
+        }
+      },
+      "documentation":"<p>A request to associate a configuration set with a MailManager archive.</p>"
+    },
+    "PutConfigurationSetArchivingOptionsResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetDeliveryOptionsRequest":{
       "type":"structure",
@@ -5926,8 +6523,7 @@
     },
     "PutConfigurationSetDeliveryOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetReputationOptionsRequest":{
@@ -5949,8 +6545,7 @@
     },
     "PutConfigurationSetReputationOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetSendingOptionsRequest":{
@@ -5972,8 +6567,7 @@
     },
     "PutConfigurationSetSendingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetSuppressionOptionsRequest":{
@@ -5995,8 +6589,7 @@
     },
     "PutConfigurationSetSuppressionOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetTrackingOptionsRequest":{
@@ -6019,8 +6612,7 @@
     },
     "PutConfigurationSetTrackingOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutConfigurationSetVdmOptionsRequest":{
@@ -6042,8 +6634,7 @@
     },
     "PutConfigurationSetVdmOptionsResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDedicatedIpInPoolRequest":{
@@ -6068,8 +6659,7 @@
     },
     "PutDedicatedIpInPoolResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDedicatedIpPoolScalingAttributesRequest":{
@@ -6094,8 +6684,7 @@
     },
     "PutDedicatedIpPoolScalingAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDedicatedIpWarmupAttributesRequest":{
@@ -6120,8 +6709,7 @@
     },
     "PutDedicatedIpWarmupAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutDeliverabilityDashboardOptionRequest":{
@@ -6141,8 +6729,7 @@
     },
     "PutDeliverabilityDashboardOptionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A response that indicates whether the Deliverability dashboard is enabled.</p>"
     },
     "PutEmailIdentityConfigurationSetAttributesRequest":{
@@ -6164,8 +6751,7 @@
     },
     "PutEmailIdentityConfigurationSetAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "PutEmailIdentityDkimAttributesRequest":{
@@ -6187,8 +6773,7 @@
     },
     "PutEmailIdentityDkimAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutEmailIdentityDkimSigningAttributesRequest":{
@@ -6248,8 +6833,7 @@
     },
     "PutEmailIdentityFeedbackAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutEmailIdentityMailFromAttributesRequest":{
@@ -6275,8 +6859,7 @@
     },
     "PutEmailIdentityMailFromAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "PutSuppressedDestinationRequest":{
@@ -6299,8 +6882,7 @@
     },
     "PutSuppressedDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "QueryErrorCode":{
@@ -6316,6 +6898,7 @@
       "max":255,
       "min":1
     },
+    "RawAttachmentData":{"type":"blob"},
     "RawMessage":{
       "type":"structure",
       "required":["Data"],
@@ -6344,7 +6927,7 @@
         },
         "Type":{
           "shape":"RecommendationType",
-          "documentation":"<p>The recommendation type, with values like <code>DKIM</code>, <code>SPF</code>, <code>DMARC</code> or <code>BIMI</code>.</p>"
+          "documentation":"<p>The recommendation type, with values like <code>DKIM</code>, <code>SPF</code>, <code>DMARC</code>, <code>BIMI</code>, or <code>COMPLAINT</code>.</p>"
         },
         "Description":{
           "shape":"RecommendationDescription",
@@ -6391,7 +6974,10 @@
         "DMARC",
         "SPF",
         "BIMI",
-        "COMPLAINT"
+        "COMPLAINT",
+        "BOUNCE",
+        "FEEDBACK_3P",
+        "IP_LISTING"
       ]
     },
     "RecommendationsList":{
@@ -6438,6 +7024,77 @@
       "type":"string",
       "documentation":"<p>A name that helps you identify a report generated by the Deliverability dashboard.</p>"
     },
+    "ReputationEntitiesList":{
+      "type":"list",
+      "member":{"shape":"ReputationEntity"},
+      "documentation":"<p>A list of reputation entities.</p>"
+    },
+    "ReputationEntity":{
+      "type":"structure",
+      "members":{
+        "ReputationEntityReference":{
+          "shape":"ReputationEntityReference",
+          "documentation":"<p>The unique identifier for the reputation entity. For resource-type entities, this is the Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "ReputationEntityType":{
+          "shape":"ReputationEntityType",
+          "documentation":"<p>The type of reputation entity. Currently, only <code>RESOURCE</code> type entities are supported.</p>"
+        },
+        "ReputationManagementPolicy":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the reputation management policy applied to this entity. This is an Amazon Web Services Amazon SES-managed policy.</p>"
+        },
+        "CustomerManagedStatus":{
+          "shape":"StatusRecord",
+          "documentation":"<p>The customer-managed status record for this reputation entity, including the current status, cause description, and last updated timestamp.</p>"
+        },
+        "AwsSesManagedStatus":{
+          "shape":"StatusRecord",
+          "documentation":"<p>The Amazon Web Services Amazon SES-managed status record for this reputation entity, including the current status, cause description, and last updated timestamp.</p>"
+        },
+        "SendingStatusAggregate":{
+          "shape":"SendingStatus",
+          "documentation":"<p>The aggregate sending status that determines whether the entity is allowed to send emails. This status is derived from both the customer-managed and Amazon Web Services Amazon SES-managed statuses. If either the customer-managed status or the Amazon Web Services Amazon SES-managed status is <code>DISABLED</code>, the aggregate status will be <code>DISABLED</code> and the entity will not be allowed to send emails. When the customer-managed status is set to <code>REINSTATED</code>, the entity can continue sending even if there are active reputation findings, provided the Amazon Web Services Amazon SES-managed status also permits sending. The entity can only send emails when both statuses permit sending.</p>"
+        },
+        "ReputationImpact":{
+          "shape":"RecommendationImpact",
+          "documentation":"<p>The reputation impact level for this entity, representing the highest impact reputation finding currently active. Reputation findings can be retrieved using the <code>ListRecommendations</code> operation.</p>"
+        }
+      },
+      "documentation":"<p>An object that contains information about a reputation entity, including its reference, type, policy, status records, and reputation impact.</p>"
+    },
+    "ReputationEntityFilter":{
+      "type":"map",
+      "key":{"shape":"ReputationEntityFilterKey"},
+      "value":{"shape":"ReputationEntityFilterValue"},
+      "documentation":"<p>An object that contains filters to apply when listing reputation entities.</p>"
+    },
+    "ReputationEntityFilterKey":{
+      "type":"string",
+      "documentation":"<p>The filter key to use when listing reputation entities. This can be one of the following:</p> <ul> <li> <p> <code>ENTITY_TYPE</code> – Filter by entity type.</p> </li> <li> <p> <code>REPUTATION_IMPACT</code> – Filter by reputation impact level.</p> </li> <li> <p> <code>SENDING_STATUS</code> – Filter by aggregate sending status.</p> </li> <li> <p> <code>ENTITY_REFERENCE_PREFIX</code> – Filter by entity reference prefix.</p> </li> </ul>",
+      "enum":[
+        "ENTITY_TYPE",
+        "REPUTATION_IMPACT",
+        "SENDING_STATUS",
+        "ENTITY_REFERENCE_PREFIX"
+      ]
+    },
+    "ReputationEntityFilterValue":{
+      "type":"string",
+      "documentation":"<p>The filter value to match against the specified filter key.</p>",
+      "max":512,
+      "min":1
+    },
+    "ReputationEntityReference":{
+      "type":"string",
+      "documentation":"<p>The unique identifier for a reputation entity. For resource-type entities, this is the Amazon Resource Name (ARN) of the resource.</p>",
+      "min":1
+    },
+    "ReputationEntityType":{
+      "type":"string",
+      "documentation":"<p>The type of reputation entity. Currently, only <code>RESOURCE</code> type entities are supported, which represent resources in your Amazon SES account that have reputation tracking capabilities.</p>",
+      "enum":["RESOURCE"]
+    },
     "ReputationOptions":{
       "type":"structure",
       "members":{
@@ -6452,6 +7109,42 @@
       },
       "documentation":"<p>Enable or disable collection of reputation metrics for emails that you send using this configuration set in the current Amazon Web Services Region. </p>"
     },
+    "ResourceTenantMetadata":{
+      "type":"structure",
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant associated with the resource.</p>"
+        },
+        "TenantId":{
+          "shape":"TenantId",
+          "documentation":"<p>A unique identifier for the tenant associated with the resource.</p>"
+        },
+        "ResourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
+        },
+        "AssociatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the resource was associated with the tenant.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains information about a tenant associated with a resource.</p>"
+    },
+    "ResourceTenantMetadataList":{
+      "type":"list",
+      "member":{"shape":"ResourceTenantMetadata"},
+      "documentation":"<p>A list of tenant metadata objects associated with a resource.</p>"
+    },
+    "ResourceType":{
+      "type":"string",
+      "documentation":"<p>The type of resource that can be associated with a tenant. Can be one of the following:</p> <ul> <li> <p> <code>EMAIL_IDENTITY</code> - An email address or domain that you use to send email.</p> </li> <li> <p> <code>CONFIGURATION_SET</code> - A set of rules that you can apply to emails you send.</p> </li> <li> <p> <code>EMAIL_TEMPLATE</code> - A template that defines the content of an email message.</p> </li> </ul>",
+      "enum":[
+        "EMAIL_IDENTITY",
+        "CONFIGURATION_SET",
+        "EMAIL_TEMPLATE"
+      ]
+    },
     "ReviewDetails":{
       "type":"structure",
       "members":{
@@ -6590,6 +7283,10 @@
           "shape":"EndpointId",
           "documentation":"<p>The ID of the multi-region endpoint (global-endpoint).</p>",
           "contextParam":{"name":"EndpointId"}
+        },
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant through which this bulk email will be sent.</p> <note> <p> The email sending operation will only succeed if all referenced resources (identities, configuration sets, and templates) are associated with this tenant. </p> </note>"
         }
       },
       "documentation":"<p>Represents a request to send email messages to multiple destinations using Amazon SES. For more information, see the <a href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-personalized-email-api.html\">Amazon SES Developer Guide</a>.</p>"
@@ -6682,6 +7379,10 @@
           "documentation":"<p>The ID of the multi-region endpoint (global-endpoint).</p>",
           "contextParam":{"name":"EndpointId"}
         },
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant through which this email will be sent.</p> <note> <p>The email sending operation will only succeed if all referenced resources (identities, configuration sets, and templates) are associated with this tenant. </p> </note>"
+        },
         "ListManagementOptions":{
           "shape":"ListManagementOptions",
           "documentation":"<p>An object used to specify a list or topic to which an email belongs, which will be used when a contact chooses to unsubscribe.</p>"
@@ -6729,8 +7430,7 @@
     },
     "SendingPausedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The message can't be sent because the account's ability to send email is currently paused.</p>",
       "error":{"httpStatusCode":400},
       "exception":true
@@ -6739,6 +7439,15 @@
       "type":"string",
       "documentation":"<p>The name of the dedicated IP pool to associate with the configuration set.</p>"
     },
+    "SendingStatus":{
+      "type":"string",
+      "documentation":"<p>The sending status for a reputation entity. This can be one of the following:</p> <ul> <li> <p> <code>ENABLED</code> – Sending is allowed for this entity.</p> </li> <li> <p> <code>DISABLED</code> – Sending is prevented for this entity.</p> </li> <li> <p> <code>REINSTATED</code> – Sending is allowed even if there are active reputation findings.</p> </li> </ul>",
+      "enum":[
+        "ENABLED",
+        "REINSTATED",
+        "DISABLED"
+      ]
+    },
     "SentLast24Hours":{"type":"double"},
     "SerialNumber":{"type":"long"},
     "SnsDestination":{
@@ -6762,6 +7471,30 @@
         "DELETING"
       ]
     },
+    "StatusCause":{
+      "type":"string",
+      "documentation":"<p>A description of the reason for a status change, such as automated actions taken due to reputation findings or manual status updates.</p>",
+      "max":512,
+      "min":1
+    },
+    "StatusRecord":{
+      "type":"structure",
+      "members":{
+        "Status":{
+          "shape":"SendingStatus",
+          "documentation":"<p>The current sending status. This can be one of the following:</p> <ul> <li> <p> <code>ENABLED</code> – Sending is allowed.</p> </li> <li> <p> <code>DISABLED</code> – Sending is prevented.</p> </li> <li> <p> <code>REINSTATED</code> – Sending is allowed even with active reputation findings.</p> </li> </ul>"
+        },
+        "Cause":{
+          "shape":"StatusCause",
+          "documentation":"<p>A description of the reason for the current status, or null if no specific cause is available.</p>"
+        },
+        "LastUpdatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when this status was last updated.</p>"
+        }
+      },
+      "documentation":"<p>An object that contains status information for a reputation entity, including the current status, cause description, and timestamp.</p>"
+    },
     "Subject":{"type":"string"},
     "SubscriptionStatus":{
       "type":"string",
@@ -6939,8 +7672,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{"type":"string"},
     "Template":{
@@ -6948,7 +7680,7 @@
       "members":{
         "TemplateName":{
           "shape":"EmailTemplateName",
-          "documentation":"<p>The name of the template. You will refer to this name when you send email using the <code>SendTemplatedEmail</code> or <code>SendBulkTemplatedEmail</code> operations. </p>"
+          "documentation":"<p>The name of the template. You will refer to this name when you send email using the <code>SendEmail</code> or <code>SendBulkEmail</code> operations. </p>"
         },
         "TemplateArn":{
           "shape":"AmazonResourceName",
@@ -6965,6 +7697,10 @@
         "Headers":{
           "shape":"MessageHeaderList",
           "documentation":"<p>The list of message headers that will be added to the email message.</p>"
+        },
+        "Attachments":{
+          "shape":"AttachmentList",
+          "documentation":"<p> The List of attachments to include in your email. All recipients will receive the same attachments.</p>"
         }
       },
       "documentation":"<p>An object that defines the email template to use for an email message, and the values to use for any message variables in that template. An <i>email template</i> is a type of message template that contains content that you want to reuse in email messages that you send. You can specifiy the email template by providing the name or ARN of an <i>email template</i> previously saved in your Amazon SES account or by providing the full template content.</p>"
@@ -6973,6 +7709,88 @@
       "type":"string",
       "documentation":"<p>The content of the custom verification email template.</p>"
     },
+    "Tenant":{
+      "type":"structure",
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant.</p>"
+        },
+        "TenantId":{
+          "shape":"TenantId",
+          "documentation":"<p>A unique identifier for the tenant.</p>"
+        },
+        "TenantArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the tenant.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the tenant was created.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>An array of objects that define the tags (keys and values) associated with the tenant.</p>"
+        },
+        "SendingStatus":{
+          "shape":"SendingStatus",
+          "documentation":"<p>The status of sending capability for the tenant.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains details about a tenant.</p>"
+    },
+    "TenantId":{"type":"string"},
+    "TenantInfo":{
+      "type":"structure",
+      "members":{
+        "TenantName":{
+          "shape":"TenantName",
+          "documentation":"<p>The name of the tenant.</p>"
+        },
+        "TenantId":{
+          "shape":"TenantId",
+          "documentation":"<p>A unique identifier for the tenant.</p>"
+        },
+        "TenantArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the tenant.</p>"
+        },
+        "CreatedTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time when the tenant was created.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains basic information about a tenant.</p>"
+    },
+    "TenantInfoList":{
+      "type":"list",
+      "member":{"shape":"TenantInfo"},
+      "documentation":"<p>A list of tenant information objects.</p>"
+    },
+    "TenantName":{
+      "type":"string",
+      "documentation":"<p>The name of a tenant. The name can contain up to 64 alphanumeric characters, including letters, numbers, hyphens (-) and underscores (_) only.</p>",
+      "min":1
+    },
+    "TenantResource":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ResourceType",
+          "documentation":"<p>The type of resource associated with the tenant. Valid values are <code>EMAIL_IDENTITY</code>, <code>CONFIGURATION_SET</code>, or <code>EMAIL_TEMPLATE</code>.</p>"
+        },
+        "ResourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource associated with the tenant.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains information about a resource associated with a tenant.</p>"
+    },
+    "TenantResourceList":{
+      "type":"list",
+      "member":{"shape":"TenantResource"},
+      "documentation":"<p>A list of resources associated with a tenant.</p>"
+    },
     "TestRenderEmailTemplateRequest":{
       "type":"structure",
       "required":[
@@ -7019,8 +7837,7 @@
     },
     "TooManyRequestsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Too many requests have been made to the operation.</p>",
       "error":{"httpStatusCode":429},
       "exception":true
@@ -7132,8 +7949,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConfigurationSetEventDestinationRequest":{
       "type":"structure",
@@ -7164,8 +7980,7 @@
     },
     "UpdateConfigurationSetEventDestinationResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "UpdateContactListRequest":{
@@ -7190,8 +8005,7 @@
     },
     "UpdateContactListResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactRequest":{
       "type":"structure",
@@ -7228,8 +8042,7 @@
     },
     "UpdateContactResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCustomVerificationEmailTemplateRequest":{
       "type":"structure",
@@ -7273,8 +8086,7 @@
     },
     "UpdateCustomVerificationEmailTemplateResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "UpdateEmailIdentityPolicyRequest":{
@@ -7306,8 +8118,7 @@
     },
     "UpdateEmailIdentityPolicyResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An HTTP 200 response if the request succeeds, or an error message if the request fails.</p>"
     },
     "UpdateEmailTemplateRequest":{
@@ -7332,8 +8143,71 @@
     },
     "UpdateEmailTemplateResponse":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
+    },
+    "UpdateReputationEntityCustomerManagedStatusRequest":{
+      "type":"structure",
+      "required":[
+        "ReputationEntityType",
+        "ReputationEntityReference",
+        "SendingStatus"
+      ],
+      "members":{
+        "ReputationEntityType":{
+          "shape":"ReputationEntityType",
+          "documentation":"<p>The type of reputation entity. Currently, only <code>RESOURCE</code> type entities are supported.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityType"
+        },
+        "ReputationEntityReference":{
+          "shape":"ReputationEntityReference",
+          "documentation":"<p>The unique identifier for the reputation entity. For resource-type entities, this is the Amazon Resource Name (ARN) of the resource.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityReference"
+        },
+        "SendingStatus":{
+          "shape":"SendingStatus",
+          "documentation":"<p>The new customer-managed sending status for the reputation entity. This can be one of the following:</p> <ul> <li> <p> <code>ENABLED</code> – Allow sending for this entity.</p> </li> <li> <p> <code>DISABLED</code> – Prevent sending for this entity.</p> </li> <li> <p> <code>REINSTATED</code> – Allow sending even if there are active reputation findings.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Represents a request to update the customer-managed sending status for a reputation entity.</p>"
+    },
+    "UpdateReputationEntityCustomerManagedStatusResponse":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
+    },
+    "UpdateReputationEntityPolicyRequest":{
+      "type":"structure",
+      "required":[
+        "ReputationEntityType",
+        "ReputationEntityReference",
+        "ReputationEntityPolicy"
+      ],
       "members":{
+        "ReputationEntityType":{
+          "shape":"ReputationEntityType",
+          "documentation":"<p>The type of reputation entity. Currently, only <code>RESOURCE</code> type entities are supported.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityType"
+        },
+        "ReputationEntityReference":{
+          "shape":"ReputationEntityReference",
+          "documentation":"<p>The unique identifier for the reputation entity. For resource-type entities, this is the Amazon Resource Name (ARN) of the resource.</p>",
+          "location":"uri",
+          "locationName":"ReputationEntityReference"
+        },
+        "ReputationEntityPolicy":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the reputation management policy to apply to this entity. This is an Amazon Web Services Amazon SES-managed policy.</p>"
+        }
       },
+      "documentation":"<p>Represents a request to update the reputation management policy for a reputation entity.</p>"
+    },
+    "UpdateReputationEntityPolicyResponse":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>If the action is successful, the service sends back an HTTP 200 response with an empty HTTP body.</p>"
     },
     "UseCaseDescription":{
@@ -7405,7 +8279,7 @@
         },
         "ErrorType":{
           "shape":"VerificationError",
-          "documentation":"<p>Provides the reason for the failure describing why Amazon SES was not able to successfully verify the identity. Below are the possible values: </p> <ul> <li> <p> <code>INVALID_VALUE</code> – Amazon SES was able to find the record, but the value contained within the record was invalid. Ensure you have published the correct values for the record.</p> </li> <li> <p> <code>TYPE_NOT_FOUND</code> – The queried hostname exists but does not have the requested type of DNS record. Ensure that you have published the correct type of DNS record.</p> </li> <li> <p> <code>HOST_NOT_FOUND</code> – The queried hostname does not exist or was not reachable at the time of the request. Ensure that you have published the required DNS record(s). </p> </li> <li> <p> <code>SERVICE_ERROR</code> – A temporary issue is preventing Amazon SES from determining the verification status of the domain.</p> </li> <li> <p> <code>DNS_SERVER_ERROR</code> – The DNS server encountered an issue and was unable to complete the request.</p> </li> <li> <p> <code>REPLICATION_ACCESS_DENIED</code> – The verification failed because the user does not have the required permissions to replicate the DKIM key from the primary region. Ensure you have the necessary permissions in both primary and replica regions. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_NOT_FOUND</code> – The verification failed because no corresponding identity was found in the specified primary region. Ensure the identity exists in the primary region before attempting replication. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_BYO_DKIM_NOT_SUPPORTED</code> – The verification failed because the identity in the primary region is configured with Bring Your Own DKIM (BYODKIM). DKIM key replication is only supported for identities using Easy DKIM. </p> </li> <li> <p> <code>REPLICATION_REPLICA_AS_PRIMARY_NOT_SUPPORTED</code> – The verification failed because the specified primary identity is a replica of another identity, and multi-level replication is not supported; the primary identity must be a non-replica identity. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_INVALID_REGION</code> – The verification failed due to an invalid primary region specified. Ensure you provide a valid AWS region where Amazon SES is available and different from the replica region. </p> </li> </ul>"
+          "documentation":"<p>Provides the reason for the failure describing why Amazon SES was not able to successfully verify the identity. Below are the possible values: </p> <ul> <li> <p> <code>INVALID_VALUE</code> – Amazon SES was able to find the record, but the value contained within the record was invalid. Ensure you have published the correct values for the record.</p> </li> <li> <p> <code>TYPE_NOT_FOUND</code> – The queried hostname exists but does not have the requested type of DNS record. Ensure that you have published the correct type of DNS record.</p> </li> <li> <p> <code>HOST_NOT_FOUND</code> – The queried hostname does not exist or was not reachable at the time of the request. Ensure that you have published the required DNS record(s). </p> </li> <li> <p> <code>SERVICE_ERROR</code> – A temporary issue is preventing Amazon SES from determining the verification status of the domain.</p> </li> <li> <p> <code>DNS_SERVER_ERROR</code> – The DNS server encountered an issue and was unable to complete the request.</p> </li> <li> <p> <code>REPLICATION_ACCESS_DENIED</code> – The verification failed because the user does not have the required permissions to replicate the DKIM key from the primary region. Ensure you have the necessary permissions in both primary and replica regions. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_NOT_FOUND</code> – The verification failed because no corresponding identity was found in the specified primary region. Ensure the identity exists in the primary region before attempting replication. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_BYO_DKIM_NOT_SUPPORTED</code> – The verification failed because the identity in the primary region is configured with Bring Your Own DKIM (BYODKIM). DKIM key replication is only supported for identities using Easy DKIM. </p> </li> <li> <p> <code>REPLICATION_REPLICA_AS_PRIMARY_NOT_SUPPORTED</code> – The verification failed because the specified primary identity is a replica of another identity, and multi-level replication is not supported; the primary identity must be a non-replica identity. </p> </li> <li> <p> <code>REPLICATION_PRIMARY_INVALID_REGION</code> – The verification failed due to an invalid primary region specified. Ensure you provide a valid Amazon Web Services region where Amazon SES is available and different from the replica region. </p> </li> </ul>"
         },
         "SOARecord":{
           "shape":"SOARecord",
@@ -7455,7 +8329,8 @@
       "documentation":"<p>The warmup status of a dedicated IP.</p>",
       "enum":[
         "IN_PROGRESS",
-        "DONE"
+        "DONE",
+        "NOT_APPLICABLE"
       ]
     },
     "WebsiteURL":{
diff -pruN 2.23.6-1/awscli/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/shield/2016-06-02/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/shield/2016-06-02/service-2.json 2.31.35-1/awscli/botocore/data/shield/2016-06-02/service-2.json
--- 2.23.6-1/awscli/botocore/data/shield/2016-06-02/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/shield/2016-06-02/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -645,8 +645,7 @@
     },
     "AssociateDRTLogBucketResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateDRTRoleRequest":{
       "type":"structure",
@@ -660,8 +659,7 @@
     },
     "AssociateDRTRoleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateHealthCheckRequest":{
       "type":"structure",
@@ -682,8 +680,7 @@
     },
     "AssociateHealthCheckResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateProactiveEngagementDetailsRequest":{
       "type":"structure",
@@ -697,8 +694,7 @@
     },
     "AssociateProactiveEngagementDetailsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttackDetail":{
       "type":"structure",
@@ -897,8 +893,7 @@
     },
     "BlockAction":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies that Shield Advanced should configure its WAF rules with the WAF <code>Block</code> action. </p> <p>This is only used in the context of the <code>ResponseAction</code> setting. </p> <p>JSON specification: <code>\"Block\": {}</code> </p>"
     },
     "ContactNotes":{
@@ -923,8 +918,7 @@
     },
     "CountAction":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies that Shield Advanced should configure its WAF rules with the WAF <code>Count</code> action. </p> <p>This is only used in the context of the <code>ResponseAction</code> setting. </p> <p>JSON specification: <code>\"Count\": {}</code> </p>"
     },
     "CreateProtectionGroupRequest":{
@@ -963,8 +957,7 @@
     },
     "CreateProtectionGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateProtectionRequest":{
       "type":"structure",
@@ -998,13 +991,11 @@
     },
     "CreateSubscriptionRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateSubscriptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProtectionGroupRequest":{
       "type":"structure",
@@ -1018,8 +1009,7 @@
     },
     "DeleteProtectionGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteProtectionRequest":{
       "type":"structure",
@@ -1033,19 +1023,16 @@
     },
     "DeleteProtectionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSubscriptionRequest":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true
     },
     "DeleteSubscriptionResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "deprecated":true
     },
     "DescribeAttackRequest":{
@@ -1069,8 +1056,7 @@
     },
     "DescribeAttackStatisticsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAttackStatisticsResponse":{
       "type":"structure",
@@ -1091,8 +1077,7 @@
     },
     "DescribeDRTAccessRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeDRTAccessResponse":{
       "type":"structure",
@@ -1109,8 +1094,7 @@
     },
     "DescribeEmergencyContactSettingsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEmergencyContactSettingsResponse":{
       "type":"structure",
@@ -1165,8 +1149,7 @@
     },
     "DescribeSubscriptionRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeSubscriptionResponse":{
       "type":"structure",
@@ -1189,18 +1172,15 @@
     },
     "DisableApplicationLayerAutomaticResponseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableProactiveEngagementRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisableProactiveEngagementResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateDRTLogBucketRequest":{
       "type":"structure",
@@ -1214,18 +1194,15 @@
     },
     "DisassociateDRTLogBucketResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateDRTRoleRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateDRTRoleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateHealthCheckRequest":{
       "type":"structure",
@@ -1246,8 +1223,7 @@
     },
     "DisassociateHealthCheckResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Double":{"type":"double"},
     "DurationInSeconds":{
@@ -1304,23 +1280,19 @@
     },
     "EnableApplicationLayerAutomaticResponseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableProactiveEngagementRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "EnableProactiveEngagementResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetSubscriptionStateRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetSubscriptionStateResponse":{
       "type":"structure",
@@ -2161,8 +2133,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2222,8 +2193,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationLayerAutomaticResponseRequest":{
       "type":"structure",
@@ -2244,8 +2214,7 @@
     },
     "UpdateApplicationLayerAutomaticResponseResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateEmergencyContactSettingsRequest":{
       "type":"structure",
@@ -2258,8 +2227,7 @@
     },
     "UpdateEmergencyContactSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateProtectionGroupRequest":{
       "type":"structure",
@@ -2293,8 +2261,7 @@
     },
     "UpdateProtectionGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateSubscriptionRequest":{
       "type":"structure",
@@ -2307,8 +2274,7 @@
     },
     "UpdateSubscriptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationExceptionField":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/signer/2017-08-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/signer/2017-08-25/service-2.json 2.31.35-1/awscli/botocore/data/signer/2017-08-25/service-2.json
--- 2.23.6-1/awscli/botocore/data/signer/2017-08-25/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/signer/2017-08-25/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,8 @@
     "serviceId":"signer",
     "signatureVersion":"v4",
     "signingName":"signer",
-    "uid":"signer-2017-08-25"
+    "uid":"signer-2017-08-25",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AddProfilePermission":{
@@ -1798,8 +1799,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1851,8 +1851,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/simspaceweaver/2022-10-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -59,7 +58,6 @@
                 },
                 {
                     "conditions": [],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -87,13 +85,14 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -106,7 +105,6 @@
                             ]
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -120,7 +118,6 @@
                                     "assign": "PartitionResult"
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -143,7 +140,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -178,11 +174,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -193,16 +187,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -216,14 +213,12 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "booleanEquals",
                                                     "argv": [
-                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -232,15 +227,14 @@
                                                                 },
                                                                 "supportsFIPS"
                                                             ]
-                                                        }
+                                                        },
+                                                        true
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -251,16 +245,19 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "FIPS is enabled but this partition does not support FIPS",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [
@@ -274,7 +271,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
@@ -294,11 +290,9 @@
                                                     ]
                                                 }
                                             ],
-                                            "type": "tree",
                                             "rules": [
                                                 {
                                                     "conditions": [],
-                                                    "type": "tree",
                                                     "rules": [
                                                         {
                                                             "conditions": [],
@@ -309,20 +303,22 @@
                                                             },
                                                             "type": "endpoint"
                                                         }
-                                                    ]
+                                                    ],
+                                                    "type": "tree"
                                                 }
-                                            ]
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
                                             "error": "DualStack is enabled but this partition does not support DualStack",
                                             "type": "error"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -333,18 +329,22 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 },
                 {
                     "conditions": [],
                     "error": "Invalid Configuration: Missing Region",
                     "type": "error"
                 }
-            ]
+            ],
+            "type": "tree"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sms/2016-10-24/completions-1.json 2.31.35-1/awscli/botocore/data/sms/2016-10-24/completions-1.json
--- 2.23.6-1/awscli/botocore/data/sms/2016-10-24/completions-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sms/2016-10-24/completions-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-{
-  "version": "1.0",
-  "resources": {},
-  "operations": {}
-}
diff -pruN 2.23.6-1/awscli/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sms/2016-10-24/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,350 +0,0 @@
-{
-    "version": "1.0",
-    "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
-        "UseDualStack": {
-            "builtIn": "AWS::UseDualStack",
-            "required": true,
-            "default": false,
-            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
-        },
-        "UseFIPS": {
-            "builtIn": "AWS::UseFIPS",
-            "required": true,
-            "default": false,
-            "documentation": "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.",
-            "type": "Boolean"
-        },
-        "Endpoint": {
-            "builtIn": "SDK::Endpoint",
-            "required": false,
-            "documentation": "Override the endpoint used to send this request",
-            "type": "String"
-        }
-    },
-    "rules": [
-        {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Endpoint"
-                        }
-                    ]
-                }
-            ],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "booleanEquals",
-                            "argv": [
-                                {
-                                    "ref": "UseFIPS"
-                                },
-                                true
-                            ]
-                        }
-                    ],
-                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                            "type": "error"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": {
-                                    "ref": "Endpoint"
-                                },
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
-                        }
-                    ]
-                }
-            ]
-        },
-        {
-            "conditions": [],
-            "type": "tree",
-            "rules": [
-                {
-                    "conditions": [
-                        {
-                            "fn": "isSet",
-                            "argv": [
-                                {
-                                    "ref": "Region"
-                                }
-                            ]
-                        }
-                    ],
-                    "type": "tree",
-                    "rules": [
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "aws.partition",
-                                    "argv": [
-                                        {
-                                            "ref": "Region"
-                                        }
-                                    ],
-                                    "assign": "PartitionResult"
-                                }
-                            ],
-                            "type": "tree",
-                            "rules": [
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        },
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
-                                                    ]
-                                                },
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://sms-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                            "type": "error"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseFIPS"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsFIPS"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://sms-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "FIPS is enabled but this partition does not support FIPS",
-                                            "type": "error"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [
-                                        {
-                                            "fn": "booleanEquals",
-                                            "argv": [
-                                                {
-                                                    "ref": "UseDualStack"
-                                                },
-                                                true
-                                            ]
-                                        }
-                                    ],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [
-                                                {
-                                                    "fn": "booleanEquals",
-                                                    "argv": [
-                                                        true,
-                                                        {
-                                                            "fn": "getAttr",
-                                                            "argv": [
-                                                                {
-                                                                    "ref": "PartitionResult"
-                                                                },
-                                                                "supportsDualStack"
-                                                            ]
-                                                        }
-                                                    ]
-                                                }
-                                            ],
-                                            "type": "tree",
-                                            "rules": [
-                                                {
-                                                    "conditions": [],
-                                                    "type": "tree",
-                                                    "rules": [
-                                                        {
-                                                            "conditions": [],
-                                                            "endpoint": {
-                                                                "url": "https://sms.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                                "properties": {},
-                                                                "headers": {}
-                                                            },
-                                                            "type": "endpoint"
-                                                        }
-                                                    ]
-                                                }
-                                            ]
-                                        },
-                                        {
-                                            "conditions": [],
-                                            "error": "DualStack is enabled but this partition does not support DualStack",
-                                            "type": "error"
-                                        }
-                                    ]
-                                },
-                                {
-                                    "conditions": [],
-                                    "type": "tree",
-                                    "rules": [
-                                        {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://sms.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
-                                        }
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
-                },
-                {
-                    "conditions": [],
-                    "error": "Invalid Configuration: Missing Region",
-                    "type": "error"
-                }
-            ]
-        }
-    ]
-}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/sms/2016-10-24/paginators-1.json 2.31.35-1/awscli/botocore/data/sms/2016-10-24/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/sms/2016-10-24/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sms/2016-10-24/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,34 +0,0 @@
-{
-  "pagination": {
-    "GetReplicationJobs": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "replicationJobList"
-    },
-    "GetReplicationRuns": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "replicationRunList"
-    },
-    "GetConnectors": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "connectorList"
-    },
-    "GetServers": {
-      "input_token": "nextToken",
-      "output_token": "nextToken",
-      "limit_key": "maxResults",
-      "result_key": "serverList"
-    },
-    "ListApps": {
-      "input_token": "nextToken",
-      "limit_key": "maxResults",
-      "output_token": "nextToken",
-      "result_key": "apps"
-    }
-  }
-}
diff -pruN 2.23.6-1/awscli/botocore/data/sms/2016-10-24/service-2.json 2.31.35-1/awscli/botocore/data/sms/2016-10-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/sms/2016-10-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sms/2016-10-24/service-2.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,2613 +0,0 @@
-{
-  "version":"2.0",
-  "metadata":{
-    "apiVersion":"2016-10-24",
-    "endpointPrefix":"sms",
-    "jsonVersion":"1.1",
-    "protocol":"json",
-    "serviceAbbreviation":"SMS",
-    "serviceFullName":"AWS Server Migration Service",
-    "serviceId":"SMS",
-    "signatureVersion":"v4",
-    "targetPrefix":"AWSServerMigrationService_V2016_10_24",
-    "uid":"sms-2016-10-24"
-  },
-  "operations":{
-    "CreateApp":{
-      "name":"CreateApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateAppRequest"},
-      "output":{"shape":"CreateAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Creates an application. An application consists of one or more server groups. Each server group contain one or more servers.</p>"
-    },
-    "CreateReplicationJob":{
-      "name":"CreateReplicationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"CreateReplicationJobRequest"},
-      "output":{"shape":"CreateReplicationJobResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"ServerCannotBeReplicatedException"},
-        {"shape":"ReplicationJobAlreadyExistsException"},
-        {"shape":"NoConnectorsAvailableException"},
-        {"shape":"InternalError"},
-        {"shape":"TemporarilyUnavailableException"}
-      ],
-      "documentation":"<p>Creates a replication job. The replication job schedules periodic replication runs to replicate your server to Amazon Web Services. Each replication run creates an Amazon Machine Image (AMI).</p>"
-    },
-    "DeleteApp":{
-      "name":"DeleteApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteAppRequest"},
-      "output":{"shape":"DeleteAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Deletes the specified application. Optionally deletes the launched stack associated with the application and all Server Migration Service replication jobs for servers in the application.</p>"
-    },
-    "DeleteAppLaunchConfiguration":{
-      "name":"DeleteAppLaunchConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteAppLaunchConfigurationRequest"},
-      "output":{"shape":"DeleteAppLaunchConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Deletes the launch configuration for the specified application.</p>"
-    },
-    "DeleteAppReplicationConfiguration":{
-      "name":"DeleteAppReplicationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteAppReplicationConfigurationRequest"},
-      "output":{"shape":"DeleteAppReplicationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Deletes the replication configuration for the specified application.</p>"
-    },
-    "DeleteAppValidationConfiguration":{
-      "name":"DeleteAppValidationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteAppValidationConfigurationRequest"},
-      "output":{"shape":"DeleteAppValidationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Deletes the validation configuration for the specified application.</p>"
-    },
-    "DeleteReplicationJob":{
-      "name":"DeleteReplicationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteReplicationJobRequest"},
-      "output":{"shape":"DeleteReplicationJobResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"ReplicationJobNotFoundException"}
-      ],
-      "documentation":"<p>Deletes the specified replication job.</p> <p>After you delete a replication job, there are no further replication runs. Amazon Web Services deletes the contents of the Amazon S3 bucket used to store Server Migration Service artifacts. The AMIs created by the replication runs are not deleted.</p>"
-    },
-    "DeleteServerCatalog":{
-      "name":"DeleteServerCatalog",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DeleteServerCatalogRequest"},
-      "output":{"shape":"DeleteServerCatalogResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"}
-      ],
-      "documentation":"<p>Deletes all servers from your server catalog.</p>"
-    },
-    "DisassociateConnector":{
-      "name":"DisassociateConnector",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"DisassociateConnectorRequest"},
-      "output":{"shape":"DisassociateConnectorResponse"},
-      "errors":[
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"InvalidParameterException"}
-      ],
-      "documentation":"<p>Disassociates the specified connector from Server Migration Service.</p> <p>After you disassociate a connector, it is no longer available to support replication jobs.</p>"
-    },
-    "GenerateChangeSet":{
-      "name":"GenerateChangeSet",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GenerateChangeSetRequest"},
-      "output":{"shape":"GenerateChangeSetResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Generates a target change set for a currently launched stack and writes it to an Amazon S3 object in the customer’s Amazon S3 bucket.</p>"
-    },
-    "GenerateTemplate":{
-      "name":"GenerateTemplate",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GenerateTemplateRequest"},
-      "output":{"shape":"GenerateTemplateResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Generates an CloudFormation template based on the current launch configuration and writes it to an Amazon S3 object in the customer’s Amazon S3 bucket.</p>"
-    },
-    "GetApp":{
-      "name":"GetApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetAppRequest"},
-      "output":{"shape":"GetAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieve information about the specified application.</p>"
-    },
-    "GetAppLaunchConfiguration":{
-      "name":"GetAppLaunchConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetAppLaunchConfigurationRequest"},
-      "output":{"shape":"GetAppLaunchConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieves the application launch configuration associated with the specified application.</p>"
-    },
-    "GetAppReplicationConfiguration":{
-      "name":"GetAppReplicationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetAppReplicationConfigurationRequest"},
-      "output":{"shape":"GetAppReplicationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieves the application replication configuration associated with the specified application.</p>"
-    },
-    "GetAppValidationConfiguration":{
-      "name":"GetAppValidationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetAppValidationConfigurationRequest"},
-      "output":{"shape":"GetAppValidationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieves information about a configuration for validating an application.</p>"
-    },
-    "GetAppValidationOutput":{
-      "name":"GetAppValidationOutput",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetAppValidationOutputRequest"},
-      "output":{"shape":"GetAppValidationOutputResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieves output from validating an application.</p>"
-    },
-    "GetConnectors":{
-      "name":"GetConnectors",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetConnectorsRequest"},
-      "output":{"shape":"GetConnectorsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"}
-      ],
-      "documentation":"<p>Describes the connectors registered with the Server Migration Service.</p>"
-    },
-    "GetReplicationJobs":{
-      "name":"GetReplicationJobs",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetReplicationJobsRequest"},
-      "output":{"shape":"GetReplicationJobsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"}
-      ],
-      "documentation":"<p>Describes the specified replication job or all of your replication jobs.</p>"
-    },
-    "GetReplicationRuns":{
-      "name":"GetReplicationRuns",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetReplicationRunsRequest"},
-      "output":{"shape":"GetReplicationRunsResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"}
-      ],
-      "documentation":"<p>Describes the replication runs for the specified replication job.</p>"
-    },
-    "GetServers":{
-      "name":"GetServers",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"GetServersRequest"},
-      "output":{"shape":"GetServersResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"}
-      ],
-      "documentation":"<p>Describes the servers in your server catalog.</p> <p>Before you can describe your servers, you must import them using <a>ImportServerCatalog</a>.</p>"
-    },
-    "ImportAppCatalog":{
-      "name":"ImportAppCatalog",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ImportAppCatalogRequest"},
-      "output":{"shape":"ImportAppCatalogResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Allows application import from Migration Hub.</p>"
-    },
-    "ImportServerCatalog":{
-      "name":"ImportServerCatalog",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ImportServerCatalogRequest"},
-      "output":{"shape":"ImportServerCatalogResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"NoConnectorsAvailableException"}
-      ],
-      "documentation":"<p>Gathers a complete list of on-premises servers. Connectors must be installed and monitoring all servers to import.</p> <p>This call returns immediately, but might take additional time to retrieve all the servers.</p>"
-    },
-    "LaunchApp":{
-      "name":"LaunchApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"LaunchAppRequest"},
-      "output":{"shape":"LaunchAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Launches the specified application as a stack in CloudFormation.</p>"
-    },
-    "ListApps":{
-      "name":"ListApps",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"ListAppsRequest"},
-      "output":{"shape":"ListAppsResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Retrieves summaries for all applications.</p>"
-    },
-    "NotifyAppValidationOutput":{
-      "name":"NotifyAppValidationOutput",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"NotifyAppValidationOutputRequest"},
-      "output":{"shape":"NotifyAppValidationOutputResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Provides information to Server Migration Service about whether application validation is successful.</p>"
-    },
-    "PutAppLaunchConfiguration":{
-      "name":"PutAppLaunchConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"PutAppLaunchConfigurationRequest"},
-      "output":{"shape":"PutAppLaunchConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Creates or updates the launch configuration for the specified application.</p>"
-    },
-    "PutAppReplicationConfiguration":{
-      "name":"PutAppReplicationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"PutAppReplicationConfigurationRequest"},
-      "output":{"shape":"PutAppReplicationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Creates or updates the replication configuration for the specified application.</p>"
-    },
-    "PutAppValidationConfiguration":{
-      "name":"PutAppValidationConfiguration",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"PutAppValidationConfigurationRequest"},
-      "output":{"shape":"PutAppValidationConfigurationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Creates or updates a validation configuration for the specified application.</p>"
-    },
-    "StartAppReplication":{
-      "name":"StartAppReplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartAppReplicationRequest"},
-      "output":{"shape":"StartAppReplicationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Starts replicating the specified application by creating replication jobs for each server in the application.</p>"
-    },
-    "StartOnDemandAppReplication":{
-      "name":"StartOnDemandAppReplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartOnDemandAppReplicationRequest"},
-      "output":{"shape":"StartOnDemandAppReplicationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Starts an on-demand replication run for the specified application.</p>"
-    },
-    "StartOnDemandReplicationRun":{
-      "name":"StartOnDemandReplicationRun",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StartOnDemandReplicationRunRequest"},
-      "output":{"shape":"StartOnDemandReplicationRunResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"ReplicationRunLimitExceededException"},
-        {"shape":"DryRunOperationException"}
-      ],
-      "documentation":"<p>Starts an on-demand replication run for the specified replication job. This replication run starts immediately. This replication run is in addition to the ones already scheduled.</p> <p>There is a limit on the number of on-demand replications runs that you can request in a 24-hour period.</p>"
-    },
-    "StopAppReplication":{
-      "name":"StopAppReplication",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"StopAppReplicationRequest"},
-      "output":{"shape":"StopAppReplicationResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Stops replicating the specified application by deleting the replication job for each server in the application.</p>"
-    },
-    "TerminateApp":{
-      "name":"TerminateApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"TerminateAppRequest"},
-      "output":{"shape":"TerminateAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Terminates the stack for the specified application.</p>"
-    },
-    "UpdateApp":{
-      "name":"UpdateApp",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateAppRequest"},
-      "output":{"shape":"UpdateAppResponse"},
-      "errors":[
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"InternalError"},
-        {"shape":"OperationNotPermittedException"}
-      ],
-      "documentation":"<p>Updates the specified application.</p>"
-    },
-    "UpdateReplicationJob":{
-      "name":"UpdateReplicationJob",
-      "http":{
-        "method":"POST",
-        "requestUri":"/"
-      },
-      "input":{"shape":"UpdateReplicationJobRequest"},
-      "output":{"shape":"UpdateReplicationJobResponse"},
-      "errors":[
-        {"shape":"InvalidParameterException"},
-        {"shape":"MissingRequiredParameterException"},
-        {"shape":"OperationNotPermittedException"},
-        {"shape":"UnauthorizedOperationException"},
-        {"shape":"ServerCannotBeReplicatedException"},
-        {"shape":"ReplicationJobNotFoundException"},
-        {"shape":"InternalError"},
-        {"shape":"TemporarilyUnavailableException"}
-      ],
-      "documentation":"<p>Updates the specified settings for the specified replication job.</p>"
-    }
-  },
-  "shapes":{
-    "AmiId":{"type":"string"},
-    "AppDescription":{"type":"string"},
-    "AppId":{"type":"string"},
-    "AppIdWithValidation":{
-      "type":"string",
-      "pattern":"^app-[0-9a-f]{17}$"
-    },
-    "AppIds":{
-      "type":"list",
-      "member":{"shape":"AppId"}
-    },
-    "AppLaunchConfigurationStatus":{
-      "type":"string",
-      "enum":[
-        "NOT_CONFIGURED",
-        "CONFIGURED"
-      ]
-    },
-    "AppLaunchStatus":{
-      "type":"string",
-      "enum":[
-        "READY_FOR_CONFIGURATION",
-        "CONFIGURATION_IN_PROGRESS",
-        "CONFIGURATION_INVALID",
-        "READY_FOR_LAUNCH",
-        "VALIDATION_IN_PROGRESS",
-        "LAUNCH_PENDING",
-        "LAUNCH_IN_PROGRESS",
-        "LAUNCHED",
-        "PARTIALLY_LAUNCHED",
-        "DELTA_LAUNCH_IN_PROGRESS",
-        "DELTA_LAUNCH_FAILED",
-        "LAUNCH_FAILED",
-        "TERMINATE_IN_PROGRESS",
-        "TERMINATE_FAILED",
-        "TERMINATED"
-      ]
-    },
-    "AppLaunchStatusMessage":{"type":"string"},
-    "AppName":{"type":"string"},
-    "AppReplicationConfigurationStatus":{
-      "type":"string",
-      "enum":[
-        "NOT_CONFIGURED",
-        "CONFIGURED"
-      ]
-    },
-    "AppReplicationStatus":{
-      "type":"string",
-      "enum":[
-        "READY_FOR_CONFIGURATION",
-        "CONFIGURATION_IN_PROGRESS",
-        "CONFIGURATION_INVALID",
-        "READY_FOR_REPLICATION",
-        "VALIDATION_IN_PROGRESS",
-        "REPLICATION_PENDING",
-        "REPLICATION_IN_PROGRESS",
-        "REPLICATED",
-        "PARTIALLY_REPLICATED",
-        "DELTA_REPLICATION_IN_PROGRESS",
-        "DELTA_REPLICATED",
-        "DELTA_REPLICATION_FAILED",
-        "REPLICATION_FAILED",
-        "REPLICATION_STOPPING",
-        "REPLICATION_STOP_FAILED",
-        "REPLICATION_STOPPED"
-      ]
-    },
-    "AppReplicationStatusMessage":{"type":"string"},
-    "AppStatus":{
-      "type":"string",
-      "enum":[
-        "CREATING",
-        "ACTIVE",
-        "UPDATING",
-        "DELETING",
-        "DELETED",
-        "DELETE_FAILED"
-      ]
-    },
-    "AppStatusMessage":{"type":"string"},
-    "AppSummary":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The unique ID of the application.</p>"
-        },
-        "importedAppId":{
-          "shape":"ImportedAppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "name":{
-          "shape":"AppName",
-          "documentation":"<p>The name of the application.</p>"
-        },
-        "description":{
-          "shape":"AppDescription",
-          "documentation":"<p>The description of the application.</p>"
-        },
-        "status":{
-          "shape":"AppStatus",
-          "documentation":"<p>Status of the application.</p>"
-        },
-        "statusMessage":{
-          "shape":"AppStatusMessage",
-          "documentation":"<p>A message related to the status of the application</p>"
-        },
-        "replicationConfigurationStatus":{
-          "shape":"AppReplicationConfigurationStatus",
-          "documentation":"<p>Status of the replication configuration.</p>"
-        },
-        "replicationStatus":{
-          "shape":"AppReplicationStatus",
-          "documentation":"<p>The replication status of the application.</p>"
-        },
-        "replicationStatusMessage":{
-          "shape":"AppReplicationStatusMessage",
-          "documentation":"<p>A message related to the replication status of the application.</p>"
-        },
-        "latestReplicationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The timestamp of the application's most recent successful replication.</p>"
-        },
-        "launchConfigurationStatus":{
-          "shape":"AppLaunchConfigurationStatus",
-          "documentation":"<p>Status of the launch configuration.</p>"
-        },
-        "launchStatus":{
-          "shape":"AppLaunchStatus",
-          "documentation":"<p>The launch status of the application.</p>"
-        },
-        "launchStatusMessage":{
-          "shape":"AppLaunchStatusMessage",
-          "documentation":"<p>A message related to the launch status of the application.</p>"
-        },
-        "launchDetails":{
-          "shape":"LaunchDetails",
-          "documentation":"<p>Details about the latest launch of the application.</p>"
-        },
-        "creationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation time of the application.</p>"
-        },
-        "lastModified":{
-          "shape":"Timestamp",
-          "documentation":"<p>The last modified time of the application.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the service role in the customer's account used by Server Migration Service.</p>"
-        },
-        "totalServerGroups":{
-          "shape":"TotalServerGroups",
-          "documentation":"<p>The number of server groups present in the application.</p>"
-        },
-        "totalServers":{
-          "shape":"TotalServers",
-          "documentation":"<p>The number of servers present in the application.</p>"
-        }
-      },
-      "documentation":"<p>Information about the application.</p>"
-    },
-    "AppValidationConfiguration":{
-      "type":"structure",
-      "members":{
-        "validationId":{
-          "shape":"ValidationId",
-          "documentation":"<p>The ID of the validation.</p>"
-        },
-        "name":{
-          "shape":"NonEmptyStringWithMaxLen255",
-          "documentation":"<p>The name of the configuration.</p>"
-        },
-        "appValidationStrategy":{
-          "shape":"AppValidationStrategy",
-          "documentation":"<p>The validation strategy.</p>"
-        },
-        "ssmValidationParameters":{
-          "shape":"SSMValidationParameters",
-          "documentation":"<p>The validation parameters.</p>"
-        }
-      },
-      "documentation":"<p>Configuration for validating an application.</p>"
-    },
-    "AppValidationConfigurations":{
-      "type":"list",
-      "member":{"shape":"AppValidationConfiguration"}
-    },
-    "AppValidationOutput":{
-      "type":"structure",
-      "members":{
-        "ssmOutput":{
-          "shape":"SSMOutput",
-          "documentation":"<p>Output from using SSM to validate the application.</p>"
-        }
-      },
-      "documentation":"<p>Output from validating an application.</p>"
-    },
-    "AppValidationStrategy":{
-      "type":"string",
-      "enum":["SSM"]
-    },
-    "Apps":{
-      "type":"list",
-      "member":{"shape":"AppSummary"}
-    },
-    "AssociatePublicIpAddress":{"type":"boolean"},
-    "AutoLaunch":{"type":"boolean"},
-    "BucketName":{"type":"string"},
-    "ClientToken":{"type":"string"},
-    "Command":{
-      "type":"string",
-      "max":64000,
-      "min":1
-    },
-    "Connector":{
-      "type":"structure",
-      "members":{
-        "connectorId":{
-          "shape":"ConnectorId",
-          "documentation":"<p>The ID of the connector.</p>"
-        },
-        "version":{
-          "shape":"ConnectorVersion",
-          "documentation":"<p>The connector version.</p>"
-        },
-        "status":{
-          "shape":"ConnectorStatus",
-          "documentation":"<p>The status of the connector.</p>"
-        },
-        "capabilityList":{
-          "shape":"ConnectorCapabilityList",
-          "documentation":"<p>The capabilities of the connector.</p>"
-        },
-        "vmManagerName":{
-          "shape":"VmManagerName",
-          "documentation":"<p>The name of the VM manager.</p>"
-        },
-        "vmManagerType":{
-          "shape":"VmManagerType",
-          "documentation":"<p>The VM management product.</p>"
-        },
-        "vmManagerId":{
-          "shape":"VmManagerId",
-          "documentation":"<p>The ID of the VM manager.</p>"
-        },
-        "ipAddress":{
-          "shape":"IpAddress",
-          "documentation":"<p>The IP address of the connector.</p>"
-        },
-        "macAddress":{
-          "shape":"MacAddress",
-          "documentation":"<p>The MAC address of the connector.</p>"
-        },
-        "associatedOn":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time the connector was associated.</p>"
-        }
-      },
-      "documentation":"<p>Represents a connector.</p>"
-    },
-    "ConnectorCapability":{
-      "type":"string",
-      "enum":[
-        "VSPHERE",
-        "SCVMM",
-        "HYPERV-MANAGER",
-        "SNAPSHOT_BATCHING",
-        "SMS_OPTIMIZED"
-      ]
-    },
-    "ConnectorCapabilityList":{
-      "type":"list",
-      "member":{"shape":"ConnectorCapability"}
-    },
-    "ConnectorId":{"type":"string"},
-    "ConnectorList":{
-      "type":"list",
-      "member":{"shape":"Connector"}
-    },
-    "ConnectorStatus":{
-      "type":"string",
-      "enum":[
-        "HEALTHY",
-        "UNHEALTHY"
-      ]
-    },
-    "ConnectorVersion":{"type":"string"},
-    "CreateAppRequest":{
-      "type":"structure",
-      "members":{
-        "name":{
-          "shape":"AppName",
-          "documentation":"<p>The name of the new application.</p>"
-        },
-        "description":{
-          "shape":"AppDescription",
-          "documentation":"<p>The description of the new application</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the service role in the customer's account to be used by Server Migration Service.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of application creation.</p>"
-        },
-        "serverGroups":{
-          "shape":"ServerGroups",
-          "documentation":"<p>The server groups to include in the application.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags to be associated with the application.</p>"
-        }
-      }
-    },
-    "CreateAppResponse":{
-      "type":"structure",
-      "members":{
-        "appSummary":{
-          "shape":"AppSummary",
-          "documentation":"<p>A summary description of the application.</p>"
-        },
-        "serverGroups":{
-          "shape":"ServerGroups",
-          "documentation":"<p>The server groups included in the application.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags associated with the application.</p>"
-        }
-      }
-    },
-    "CreateReplicationJobRequest":{
-      "type":"structure",
-      "required":[
-        "serverId",
-        "seedReplicationTime"
-      ],
-      "members":{
-        "serverId":{
-          "shape":"ServerId",
-          "documentation":"<p>The ID of the server.</p>"
-        },
-        "seedReplicationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The seed replication time.</p>"
-        },
-        "frequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The time between consecutive replication runs, in hours.</p>"
-        },
-        "runOnce":{
-          "shape":"RunOnce",
-          "documentation":"<p>Indicates whether to run the replication job one time.</p>"
-        },
-        "licenseType":{
-          "shape":"LicenseType",
-          "documentation":"<p>The license type to be used for the AMI created by a successful replication run.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the IAM role to be used by the Server Migration Service.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication job.</p>"
-        },
-        "numberOfRecentAmisToKeep":{
-          "shape":"NumberOfRecentAmisToKeep",
-          "documentation":"<p>The maximum number of SMS-created AMIs to retain. The oldest is deleted after the maximum number is reached and a new AMI is created.</p>"
-        },
-        "encrypted":{
-          "shape":"Encrypted",
-          "documentation":"<p>Indicates whether the replication job produces encrypted AMIs.</p>"
-        },
-        "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key for replication jobs that produce encrypted AMIs. This value can be any of the following:</p> <ul> <li> <p>KMS key ID</p> </li> <li> <p>KMS key alias</p> </li> <li> <p>ARN referring to the KMS key ID</p> </li> <li> <p>ARN referring to the KMS key alias</p> </li> </ul> <p> If encrypted is <i>true</i> but a KMS key ID is not specified, the customer's default KMS key for Amazon EBS is used. </p>"
-        }
-      }
-    },
-    "CreateReplicationJobResponse":{
-      "type":"structure",
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The unique identifier of the replication job.</p>"
-        }
-      }
-    },
-    "DeleteAppLaunchConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "DeleteAppLaunchConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAppReplicationConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "DeleteAppReplicationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAppRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "forceStopAppReplication":{
-          "shape":"ForceStopAppReplication",
-          "documentation":"<p>Indicates whether to stop all replication jobs corresponding to the servers in the application while deleting the application.</p>"
-        },
-        "forceTerminateApp":{
-          "shape":"ForceTerminateApp",
-          "documentation":"<p>Indicates whether to terminate the stack corresponding to the application while deleting the application.</p>"
-        }
-      }
-    },
-    "DeleteAppResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteAppValidationConfigurationRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppIdWithValidation",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "DeleteAppValidationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteReplicationJobRequest":{
-      "type":"structure",
-      "required":["replicationJobId"],
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        }
-      }
-    },
-    "DeleteReplicationJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteServerCatalogRequest":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DeleteServerCatalogResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Description":{"type":"string"},
-    "DisassociateConnectorRequest":{
-      "type":"structure",
-      "required":["connectorId"],
-      "members":{
-        "connectorId":{
-          "shape":"ConnectorId",
-          "documentation":"<p>The ID of the connector.</p>"
-        }
-      }
-    },
-    "DisassociateConnectorResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "DryRunOperationException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>The user has the required permissions, so the request would have succeeded, but a dry run was performed.</p>",
-      "exception":true
-    },
-    "EC2KeyName":{"type":"string"},
-    "Encrypted":{"type":"boolean"},
-    "ErrorMessage":{"type":"string"},
-    "ExecutionTimeoutSeconds":{
-      "type":"integer",
-      "max":28800,
-      "min":60
-    },
-    "ForceStopAppReplication":{"type":"boolean"},
-    "ForceTerminateApp":{"type":"boolean"},
-    "Frequency":{"type":"integer"},
-    "GenerateChangeSetRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application associated with the change set.</p>"
-        },
-        "changesetFormat":{
-          "shape":"OutputFormat",
-          "documentation":"<p>The format for the change set.</p>"
-        }
-      }
-    },
-    "GenerateChangeSetResponse":{
-      "type":"structure",
-      "members":{
-        "s3Location":{
-          "shape":"S3Location",
-          "documentation":"<p>The location of the Amazon S3 object.</p>"
-        }
-      }
-    },
-    "GenerateTemplateRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application associated with the CloudFormation template.</p>"
-        },
-        "templateFormat":{
-          "shape":"OutputFormat",
-          "documentation":"<p>The format for generating the CloudFormation template.</p>"
-        }
-      }
-    },
-    "GenerateTemplateResponse":{
-      "type":"structure",
-      "members":{
-        "s3Location":{
-          "shape":"S3Location",
-          "documentation":"<p>The location of the Amazon S3 object.</p>"
-        }
-      }
-    },
-    "GetAppLaunchConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "GetAppLaunchConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the service role in the customer's account that CloudFormation uses to launch the application.</p>"
-        },
-        "autoLaunch":{
-          "shape":"AutoLaunch",
-          "documentation":"<p>Indicates whether the application is configured to launch automatically after replication is complete.</p>"
-        },
-        "serverGroupLaunchConfigurations":{
-          "shape":"ServerGroupLaunchConfigurations",
-          "documentation":"<p>The launch configurations for server groups in this application.</p>"
-        }
-      }
-    },
-    "GetAppReplicationConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "GetAppReplicationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "serverGroupReplicationConfigurations":{
-          "shape":"ServerGroupReplicationConfigurations",
-          "documentation":"<p>The replication configurations associated with server groups in this application.</p>"
-        }
-      }
-    },
-    "GetAppRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "GetAppResponse":{
-      "type":"structure",
-      "members":{
-        "appSummary":{
-          "shape":"AppSummary",
-          "documentation":"<p>Information about the application.</p>"
-        },
-        "serverGroups":{
-          "shape":"ServerGroups",
-          "documentation":"<p>The server groups that belong to the application.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags associated with the application.</p>"
-        }
-      }
-    },
-    "GetAppValidationConfigurationRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppIdWithValidation",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "GetAppValidationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-        "appValidationConfigurations":{
-          "shape":"AppValidationConfigurations",
-          "documentation":"<p>The configuration for application validation.</p>"
-        },
-        "serverGroupValidationConfigurations":{
-          "shape":"ServerGroupValidationConfigurations",
-          "documentation":"<p>The configuration for instance validation.</p>"
-        }
-      }
-    },
-    "GetAppValidationOutputRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppIdWithValidation",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "GetAppValidationOutputResponse":{
-      "type":"structure",
-      "members":{
-        "validationOutputList":{
-          "shape":"ValidationOutputList",
-          "documentation":"<p>The validation output.</p>"
-        }
-      }
-    },
-    "GetConnectorsRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results.</p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single call. The default value is 50. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>"
-        }
-      }
-    },
-    "GetConnectorsResponse":{
-      "type":"structure",
-      "members":{
-        "connectorList":{
-          "shape":"ConnectorList",
-          "documentation":"<p>Information about the registered connectors.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token required to retrieve the next set of results. This value is null when there are no more results to return.</p>"
-        }
-      }
-    },
-    "GetReplicationJobsRequest":{
-      "type":"structure",
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results.</p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single call. The default value is 50. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>"
-        }
-      }
-    },
-    "GetReplicationJobsResponse":{
-      "type":"structure",
-      "members":{
-        "replicationJobList":{
-          "shape":"ReplicationJobList",
-          "documentation":"<p>Information about the replication jobs.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token required to retrieve the next set of results. This value is null when there are no more results to return.</p>"
-        }
-      }
-    },
-    "GetReplicationRunsRequest":{
-      "type":"structure",
-      "required":["replicationJobId"],
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results.</p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single call. The default value is 50. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>"
-        }
-      }
-    },
-    "GetReplicationRunsResponse":{
-      "type":"structure",
-      "members":{
-        "replicationJob":{
-          "shape":"ReplicationJob",
-          "documentation":"<p>Information about the replication job.</p>"
-        },
-        "replicationRunList":{
-          "shape":"ReplicationRunList",
-          "documentation":"<p>Information about the replication runs.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token required to retrieve the next set of results. This value is null when there are no more results to return.</p>"
-        }
-      }
-    },
-    "GetServersRequest":{
-      "type":"structure",
-      "members":{
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results.</p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single call. The default value is 50. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value.</p>"
-        },
-        "vmServerAddressList":{
-          "shape":"VmServerAddressList",
-          "documentation":"<p>The server addresses.</p>"
-        }
-      }
-    },
-    "GetServersResponse":{
-      "type":"structure",
-      "members":{
-        "lastModifiedOn":{
-          "shape":"Timestamp",
-          "documentation":"<p>The time when the server was last modified.</p>"
-        },
-        "serverCatalogStatus":{
-          "shape":"ServerCatalogStatus",
-          "documentation":"<p>The status of the server catalog.</p>"
-        },
-        "serverList":{
-          "shape":"ServerList",
-          "documentation":"<p>Information about the servers.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token required to retrieve the next set of results. This value is null when there are no more results to return.</p>"
-        }
-      }
-    },
-    "ImportAppCatalogRequest":{
-      "type":"structure",
-      "members":{
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the service role. If you omit this parameter, we create a service-linked role for Migration Hub in your account. Otherwise, the role that you provide must have the <a href=\"https://docs.aws.amazon.com/migrationhub/latest/ug/new-customer-setup.html#sms-managed\">policy and trust policy</a> described in the <i>Migration Hub User Guide</i>.</p>"
-        }
-      }
-    },
-    "ImportAppCatalogResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ImportServerCatalogRequest":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ImportServerCatalogResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ImportedAppId":{"type":"string"},
-    "InstanceId":{
-      "type":"string",
-      "pattern":"(^i-(\\w{8}|\\w{17})$)|(^mi-\\w{17}$)"
-    },
-    "InstanceType":{"type":"string"},
-    "InternalError":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>An internal error occurred.</p>",
-      "exception":true,
-      "fault":true
-    },
-    "InvalidParameterException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>A specified parameter is not valid.</p>",
-      "exception":true
-    },
-    "IpAddress":{"type":"string"},
-    "KmsKeyId":{"type":"string"},
-    "LaunchAppRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "LaunchAppResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "LaunchDetails":{
-      "type":"structure",
-      "members":{
-        "latestLaunchTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The latest time that this application was launched successfully.</p>"
-        },
-        "stackName":{
-          "shape":"StackName",
-          "documentation":"<p>The name of the latest stack launched for this application.</p>"
-        },
-        "stackId":{
-          "shape":"StackId",
-          "documentation":"<p>The ID of the latest stack launched for this application.</p>"
-        }
-      },
-      "documentation":"<p>Details about the latest launch of an application.</p>"
-    },
-    "LaunchOrder":{"type":"integer"},
-    "LicenseType":{
-      "type":"string",
-      "enum":[
-        "AWS",
-        "BYOL"
-      ]
-    },
-    "ListAppsRequest":{
-      "type":"structure",
-      "members":{
-        "appIds":{
-          "shape":"AppIds",
-          "documentation":"<p>The unique application IDs.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token for the next set of results.</p>"
-        },
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return in a single call. The default value is 100. To retrieve the remaining results, make another call with the returned <code>NextToken</code> value. </p>"
-        }
-      }
-    },
-    "ListAppsResponse":{
-      "type":"structure",
-      "members":{
-        "apps":{
-          "shape":"Apps",
-          "documentation":"<p>The application summaries.</p>"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>The token required to retrieve the next set of results. This value is null when there are no more results to return.</p>"
-        }
-      }
-    },
-    "LogicalId":{"type":"string"},
-    "MacAddress":{"type":"string"},
-    "MaxResults":{"type":"integer"},
-    "MissingRequiredParameterException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>A required parameter is missing.</p>",
-      "exception":true
-    },
-    "NextToken":{"type":"string"},
-    "NoConnectorsAvailableException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>There are no connectors available.</p>",
-      "exception":true
-    },
-    "NonEmptyStringWithMaxLen255":{
-      "type":"string",
-      "max":255,
-      "min":1,
-      "pattern":"^[\\S]+$"
-    },
-    "NotificationContext":{
-      "type":"structure",
-      "members":{
-        "validationId":{
-          "shape":"ValidationId",
-          "documentation":"<p>The ID of the validation.</p>"
-        },
-        "status":{
-          "shape":"ValidationStatus",
-          "documentation":"<p>The status of the validation.</p>"
-        },
-        "statusMessage":{
-          "shape":"ValidationStatusMessage",
-          "documentation":"<p>The status message.</p>"
-        }
-      },
-      "documentation":"<p>Contains the status of validating an application.</p>"
-    },
-    "NotifyAppValidationOutputRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppIdWithValidation",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "notificationContext":{
-          "shape":"NotificationContext",
-          "documentation":"<p>The notification information.</p>"
-        }
-      }
-    },
-    "NotifyAppValidationOutputResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "NumberOfRecentAmisToKeep":{"type":"integer"},
-    "OperationNotPermittedException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>This operation is not allowed.</p>",
-      "exception":true
-    },
-    "OutputFormat":{
-      "type":"string",
-      "enum":[
-        "JSON",
-        "YAML"
-      ]
-    },
-    "PutAppLaunchConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of service role in the customer's account that CloudFormation uses to launch the application.</p>"
-        },
-        "autoLaunch":{
-          "shape":"AutoLaunch",
-          "documentation":"<p>Indicates whether the application is configured to launch automatically after replication is complete.</p>"
-        },
-        "serverGroupLaunchConfigurations":{
-          "shape":"ServerGroupLaunchConfigurations",
-          "documentation":"<p>Information about the launch configurations for server groups in the application.</p>"
-        }
-      }
-    },
-    "PutAppLaunchConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "PutAppReplicationConfigurationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "serverGroupReplicationConfigurations":{
-          "shape":"ServerGroupReplicationConfigurations",
-          "documentation":"<p>Information about the replication configurations for server groups in the application.</p>"
-        }
-      }
-    },
-    "PutAppReplicationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "PutAppValidationConfigurationRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppIdWithValidation",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "appValidationConfigurations":{
-          "shape":"AppValidationConfigurations",
-          "documentation":"<p>The configuration for application validation.</p>"
-        },
-        "serverGroupValidationConfigurations":{
-          "shape":"ServerGroupValidationConfigurations",
-          "documentation":"<p>The configuration for instance validation.</p>"
-        }
-      }
-    },
-    "PutAppValidationConfigurationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "ReplicationJob":{
-      "type":"structure",
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "serverId":{
-          "shape":"ServerId",
-          "documentation":"<p>The ID of the server.</p>"
-        },
-        "serverType":{
-          "shape":"ServerType",
-          "documentation":"<p>The type of server.</p>"
-        },
-        "vmServer":{
-          "shape":"VmServer",
-          "documentation":"<p>Information about the VM server.</p>"
-        },
-        "seedReplicationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The seed replication time.</p>"
-        },
-        "frequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The time between consecutive replication runs, in hours.</p>"
-        },
-        "runOnce":{
-          "shape":"RunOnce",
-          "documentation":"<p>Indicates whether to run the replication job one time.</p>"
-        },
-        "nextReplicationRunStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time of the next replication run.</p>"
-        },
-        "licenseType":{
-          "shape":"LicenseType",
-          "documentation":"<p>The license type to be used for the AMI created by a successful replication run.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the IAM role to be used by Server Migration Service.</p>"
-        },
-        "latestAmiId":{
-          "shape":"AmiId",
-          "documentation":"<p>The ID of the latest Amazon Machine Image (AMI).</p>"
-        },
-        "state":{
-          "shape":"ReplicationJobState",
-          "documentation":"<p>The state of the replication job.</p>"
-        },
-        "statusMessage":{
-          "shape":"ReplicationJobStatusMessage",
-          "documentation":"<p>The description of the current status of the replication job.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication job.</p>"
-        },
-        "numberOfRecentAmisToKeep":{
-          "shape":"NumberOfRecentAmisToKeep",
-          "documentation":"<p>The number of recent AMIs to keep in the customer's account for a replication job. By default, the value is set to zero, meaning that all AMIs are kept.</p>"
-        },
-        "encrypted":{
-          "shape":"Encrypted",
-          "documentation":"<p>Indicates whether the replication job should produce encrypted AMIs.</p>"
-        },
-        "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key for replication jobs that produce encrypted AMIs. This value can be any of the following: </p> <ul> <li> <p>KMS key ID</p> </li> <li> <p>KMS key alias</p> </li> <li> <p>ARN referring to the KMS key ID</p> </li> <li> <p>ARN referring to the KMS key alias</p> </li> </ul> <p>If encrypted is enabled but a KMS key ID is not specified, the customer's default KMS key for Amazon EBS is used.</p>"
-        },
-        "replicationRunList":{
-          "shape":"ReplicationRunList",
-          "documentation":"<p>Information about the replication runs.</p>"
-        }
-      },
-      "documentation":"<p>Represents a replication job.</p>"
-    },
-    "ReplicationJobAlreadyExistsException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>The specified replication job already exists.</p>",
-      "exception":true
-    },
-    "ReplicationJobId":{"type":"string"},
-    "ReplicationJobList":{
-      "type":"list",
-      "member":{"shape":"ReplicationJob"}
-    },
-    "ReplicationJobNotFoundException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>The specified replication job does not exist.</p>",
-      "exception":true
-    },
-    "ReplicationJobState":{
-      "type":"string",
-      "enum":[
-        "PENDING",
-        "ACTIVE",
-        "FAILED",
-        "DELETING",
-        "DELETED",
-        "COMPLETED",
-        "PAUSED_ON_FAILURE",
-        "FAILING"
-      ]
-    },
-    "ReplicationJobStatusMessage":{"type":"string"},
-    "ReplicationJobTerminated":{"type":"boolean"},
-    "ReplicationRun":{
-      "type":"structure",
-      "members":{
-        "replicationRunId":{
-          "shape":"ReplicationRunId",
-          "documentation":"<p>The ID of the replication run.</p>"
-        },
-        "state":{
-          "shape":"ReplicationRunState",
-          "documentation":"<p>The state of the replication run.</p>"
-        },
-        "type":{
-          "shape":"ReplicationRunType",
-          "documentation":"<p>The type of replication run.</p>"
-        },
-        "stageDetails":{
-          "shape":"ReplicationRunStageDetails",
-          "documentation":"<p>Details about the current stage of the replication run.</p>"
-        },
-        "statusMessage":{
-          "shape":"ReplicationRunStatusMessage",
-          "documentation":"<p>The description of the current status of the replication job.</p>"
-        },
-        "amiId":{
-          "shape":"AmiId",
-          "documentation":"<p>The ID of the Amazon Machine Image (AMI) from the replication run.</p>"
-        },
-        "scheduledStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time of the next replication run.</p>"
-        },
-        "completedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The completion time of the last replication run.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication run.</p>"
-        },
-        "encrypted":{
-          "shape":"Encrypted",
-          "documentation":"<p>Indicates whether the replication run should produce an encrypted AMI.</p>"
-        },
-        "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key for replication jobs that produce encrypted AMIs. This value can be any of the following:</p> <ul> <li> <p>KMS key ID</p> </li> <li> <p>KMS key alias</p> </li> <li> <p>ARN referring to the KMS key ID</p> </li> <li> <p>ARN referring to the KMS key alias</p> </li> </ul> <p> If encrypted is <i>true</i> but a KMS key ID is not specified, the customer's default KMS key for Amazon EBS is used. </p>"
-        }
-      },
-      "documentation":"<p>Represents a replication run.</p>"
-    },
-    "ReplicationRunId":{"type":"string"},
-    "ReplicationRunLimitExceededException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>You have exceeded the number of on-demand replication runs you can request in a 24-hour period.</p>",
-      "exception":true
-    },
-    "ReplicationRunList":{
-      "type":"list",
-      "member":{"shape":"ReplicationRun"}
-    },
-    "ReplicationRunStage":{"type":"string"},
-    "ReplicationRunStageDetails":{
-      "type":"structure",
-      "members":{
-        "stage":{
-          "shape":"ReplicationRunStage",
-          "documentation":"<p>The current stage of a replication run.</p>"
-        },
-        "stageProgress":{
-          "shape":"ReplicationRunStageProgress",
-          "documentation":"<p>The progress of the current stage of a replication run.</p>"
-        }
-      },
-      "documentation":"<p>Details of the current stage of a replication run.</p>"
-    },
-    "ReplicationRunStageProgress":{"type":"string"},
-    "ReplicationRunState":{
-      "type":"string",
-      "enum":[
-        "PENDING",
-        "MISSED",
-        "ACTIVE",
-        "FAILED",
-        "COMPLETED",
-        "DELETING",
-        "DELETED"
-      ]
-    },
-    "ReplicationRunStatusMessage":{"type":"string"},
-    "ReplicationRunType":{
-      "type":"string",
-      "enum":[
-        "ON_DEMAND",
-        "AUTOMATIC"
-      ]
-    },
-    "RoleName":{"type":"string"},
-    "RunOnce":{"type":"boolean"},
-    "S3BucketName":{
-      "type":"string",
-      "max":63,
-      "min":3
-    },
-    "S3KeyName":{
-      "type":"string",
-      "max":1024
-    },
-    "S3Location":{
-      "type":"structure",
-      "members":{
-        "bucket":{
-          "shape":"S3BucketName",
-          "documentation":"<p>The Amazon S3 bucket name.</p>"
-        },
-        "key":{
-          "shape":"S3KeyName",
-          "documentation":"<p>The Amazon S3 bucket key.</p>"
-        }
-      },
-      "documentation":"<p>Location of an Amazon S3 object.</p>"
-    },
-    "SSMOutput":{
-      "type":"structure",
-      "members":{
-        "s3Location":{"shape":"S3Location"}
-      },
-      "documentation":"<p>Contains the location of validation output.</p>"
-    },
-    "SSMValidationParameters":{
-      "type":"structure",
-      "members":{
-        "source":{
-          "shape":"Source",
-          "documentation":"<p>The location of the validation script.</p>"
-        },
-        "instanceId":{
-          "shape":"InstanceId",
-          "documentation":"<p>The ID of the instance. The instance must have the following tag: UserForSMSApplicationValidation=true.</p>"
-        },
-        "scriptType":{
-          "shape":"ScriptType",
-          "documentation":"<p>The type of validation script.</p>"
-        },
-        "command":{
-          "shape":"Command",
-          "documentation":"<p>The command to run the validation script.</p>"
-        },
-        "executionTimeoutSeconds":{
-          "shape":"ExecutionTimeoutSeconds",
-          "documentation":"<p>The timeout interval, in seconds.</p>"
-        },
-        "outputS3BucketName":{
-          "shape":"BucketName",
-          "documentation":"<p>The name of the S3 bucket for output.</p>"
-        }
-      },
-      "documentation":"<p>Contains validation parameters.</p>"
-    },
-    "ScriptType":{
-      "type":"string",
-      "enum":[
-        "SHELL_SCRIPT",
-        "POWERSHELL_SCRIPT"
-      ]
-    },
-    "SecurityGroup":{"type":"string"},
-    "Server":{
-      "type":"structure",
-      "members":{
-        "serverId":{
-          "shape":"ServerId",
-          "documentation":"<p>The ID of the server.</p>"
-        },
-        "serverType":{
-          "shape":"ServerType",
-          "documentation":"<p>The type of server.</p>"
-        },
-        "vmServer":{
-          "shape":"VmServer",
-          "documentation":"<p>Information about the VM server.</p>"
-        },
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "replicationJobTerminated":{
-          "shape":"ReplicationJobTerminated",
-          "documentation":"<p>Indicates whether the replication job is deleted or failed.</p>"
-        }
-      },
-      "documentation":"<p>Represents a server.</p>"
-    },
-    "ServerCannotBeReplicatedException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>The specified server cannot be replicated.</p>",
-      "exception":true
-    },
-    "ServerCatalogStatus":{
-      "type":"string",
-      "enum":[
-        "NOT_IMPORTED",
-        "IMPORTING",
-        "AVAILABLE",
-        "DELETED",
-        "EXPIRED"
-      ]
-    },
-    "ServerGroup":{
-      "type":"structure",
-      "members":{
-        "serverGroupId":{
-          "shape":"ServerGroupId",
-          "documentation":"<p>The ID of a server group.</p>"
-        },
-        "name":{
-          "shape":"ServerGroupName",
-          "documentation":"<p>The name of a server group.</p>"
-        },
-        "serverList":{
-          "shape":"ServerList",
-          "documentation":"<p>The servers that belong to a server group.</p>"
-        }
-      },
-      "documentation":"<p>Logical grouping of servers.</p>"
-    },
-    "ServerGroupId":{"type":"string"},
-    "ServerGroupLaunchConfiguration":{
-      "type":"structure",
-      "members":{
-        "serverGroupId":{
-          "shape":"ServerGroupId",
-          "documentation":"<p>The ID of the server group with which the launch configuration is associated.</p>"
-        },
-        "launchOrder":{
-          "shape":"LaunchOrder",
-          "documentation":"<p>The launch order of servers in the server group.</p>"
-        },
-        "serverLaunchConfigurations":{
-          "shape":"ServerLaunchConfigurations",
-          "documentation":"<p>The launch configuration for servers in the server group.</p>"
-        }
-      },
-      "documentation":"<p>Launch configuration for a server group.</p>"
-    },
-    "ServerGroupLaunchConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerGroupLaunchConfiguration"}
-    },
-    "ServerGroupName":{"type":"string"},
-    "ServerGroupReplicationConfiguration":{
-      "type":"structure",
-      "members":{
-        "serverGroupId":{
-          "shape":"ServerGroupId",
-          "documentation":"<p>The ID of the server group with which this replication configuration is associated.</p>"
-        },
-        "serverReplicationConfigurations":{
-          "shape":"ServerReplicationConfigurations",
-          "documentation":"<p>The replication configuration for servers in the server group.</p>"
-        }
-      },
-      "documentation":"<p>Replication configuration for a server group.</p>"
-    },
-    "ServerGroupReplicationConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerGroupReplicationConfiguration"}
-    },
-    "ServerGroupValidationConfiguration":{
-      "type":"structure",
-      "members":{
-        "serverGroupId":{
-          "shape":"ServerGroupId",
-          "documentation":"<p>The ID of the server group.</p>"
-        },
-        "serverValidationConfigurations":{
-          "shape":"ServerValidationConfigurations",
-          "documentation":"<p>The validation configuration.</p>"
-        }
-      },
-      "documentation":"<p>Configuration for validating an instance.</p>"
-    },
-    "ServerGroupValidationConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerGroupValidationConfiguration"}
-    },
-    "ServerGroups":{
-      "type":"list",
-      "member":{"shape":"ServerGroup"}
-    },
-    "ServerId":{"type":"string"},
-    "ServerLaunchConfiguration":{
-      "type":"structure",
-      "members":{
-        "server":{
-          "shape":"Server",
-          "documentation":"<p>The ID of the server with which the launch configuration is associated.</p>"
-        },
-        "logicalId":{
-          "shape":"LogicalId",
-          "documentation":"<p>The logical ID of the server in the CloudFormation template.</p>"
-        },
-        "vpc":{
-          "shape":"VPC",
-          "documentation":"<p>The ID of the VPC into which the server should be launched.</p>"
-        },
-        "subnet":{
-          "shape":"Subnet",
-          "documentation":"<p>The ID of the subnet the server should be launched into.</p>"
-        },
-        "securityGroup":{
-          "shape":"SecurityGroup",
-          "documentation":"<p>The ID of the security group that applies to the launched server.</p>"
-        },
-        "ec2KeyName":{
-          "shape":"EC2KeyName",
-          "documentation":"<p>The name of the Amazon EC2 SSH key to be used for connecting to the launched server.</p>"
-        },
-        "userData":{
-          "shape":"UserData",
-          "documentation":"<p>Location of the user-data script to be executed when launching the server.</p>"
-        },
-        "instanceType":{
-          "shape":"InstanceType",
-          "documentation":"<p>The instance type to use when launching the server.</p>"
-        },
-        "associatePublicIpAddress":{
-          "shape":"AssociatePublicIpAddress",
-          "documentation":"<p>Indicates whether a publicly accessible IP address is created when launching the server.</p>"
-        },
-        "iamInstanceProfileName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the IAM instance profile.</p>"
-        },
-        "configureScript":{"shape":"S3Location"},
-        "configureScriptType":{
-          "shape":"ScriptType",
-          "documentation":"<p>The type of configuration script.</p>"
-        }
-      },
-      "documentation":"<p>Launch configuration for a server.</p>"
-    },
-    "ServerLaunchConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerLaunchConfiguration"}
-    },
-    "ServerList":{
-      "type":"list",
-      "member":{"shape":"Server"}
-    },
-    "ServerReplicationConfiguration":{
-      "type":"structure",
-      "members":{
-        "server":{
-          "shape":"Server",
-          "documentation":"<p>The ID of the server with which this replication configuration is associated.</p>"
-        },
-        "serverReplicationParameters":{
-          "shape":"ServerReplicationParameters",
-          "documentation":"<p>The parameters for replicating the server.</p>"
-        }
-      },
-      "documentation":"<p>Replication configuration of a server.</p>"
-    },
-    "ServerReplicationConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerReplicationConfiguration"}
-    },
-    "ServerReplicationParameters":{
-      "type":"structure",
-      "members":{
-        "seedTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The seed time for creating a replication job for the server.</p>"
-        },
-        "frequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The frequency of creating replication jobs for the server.</p>"
-        },
-        "runOnce":{
-          "shape":"RunOnce",
-          "documentation":"<p>Indicates whether to run the replication job one time.</p>"
-        },
-        "licenseType":{
-          "shape":"LicenseType",
-          "documentation":"<p>The license type for creating a replication job for the server.</p>"
-        },
-        "numberOfRecentAmisToKeep":{
-          "shape":"NumberOfRecentAmisToKeep",
-          "documentation":"<p>The number of recent AMIs to keep when creating a replication job for this server.</p>"
-        },
-        "encrypted":{
-          "shape":"Encrypted",
-          "documentation":"<p>Indicates whether the replication job produces encrypted AMIs.</p>"
-        },
-        "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key for replication jobs that produce encrypted AMIs. This value can be any of the following:</p> <ul> <li> <p>KMS key ID</p> </li> <li> <p>KMS key alias</p> </li> <li> <p>ARN referring to the KMS key ID</p> </li> <li> <p>ARN referring to the KMS key alias</p> </li> </ul> <p>If encrypted is enabled but a KMS key ID is not specified, the customer's default KMS key for Amazon EBS is used.</p>"
-        }
-      },
-      "documentation":"<p>The replication parameters for replicating a server.</p>"
-    },
-    "ServerType":{
-      "type":"string",
-      "enum":["VIRTUAL_MACHINE"]
-    },
-    "ServerValidationConfiguration":{
-      "type":"structure",
-      "members":{
-        "server":{"shape":"Server"},
-        "validationId":{
-          "shape":"ValidationId",
-          "documentation":"<p>The ID of the validation.</p>"
-        },
-        "name":{
-          "shape":"NonEmptyStringWithMaxLen255",
-          "documentation":"<p>The name of the configuration.</p>"
-        },
-        "serverValidationStrategy":{
-          "shape":"ServerValidationStrategy",
-          "documentation":"<p>The validation strategy.</p>"
-        },
-        "userDataValidationParameters":{
-          "shape":"UserDataValidationParameters",
-          "documentation":"<p>The validation parameters.</p>"
-        }
-      },
-      "documentation":"<p>Configuration for validating an instance.</p>"
-    },
-    "ServerValidationConfigurations":{
-      "type":"list",
-      "member":{"shape":"ServerValidationConfiguration"}
-    },
-    "ServerValidationOutput":{
-      "type":"structure",
-      "members":{
-        "server":{"shape":"Server"}
-      },
-      "documentation":"<p>Contains output from validating an instance.</p>"
-    },
-    "ServerValidationStrategy":{
-      "type":"string",
-      "enum":["USERDATA"]
-    },
-    "Source":{
-      "type":"structure",
-      "members":{
-        "s3Location":{"shape":"S3Location"}
-      },
-      "documentation":"<p>Contains the location of a validation script.</p>"
-    },
-    "StackId":{"type":"string"},
-    "StackName":{"type":"string"},
-    "StartAppReplicationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "StartAppReplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "StartOnDemandAppReplicationRequest":{
-      "type":"structure",
-      "required":["appId"],
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication run.</p>"
-        }
-      }
-    },
-    "StartOnDemandAppReplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "StartOnDemandReplicationRunRequest":{
-      "type":"structure",
-      "required":["replicationJobId"],
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication run.</p>"
-        }
-      }
-    },
-    "StartOnDemandReplicationRunResponse":{
-      "type":"structure",
-      "members":{
-        "replicationRunId":{
-          "shape":"ReplicationRunId",
-          "documentation":"<p>The ID of the replication run.</p>"
-        }
-      }
-    },
-    "StopAppReplicationRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "StopAppReplicationResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Subnet":{"type":"string"},
-    "Tag":{
-      "type":"structure",
-      "members":{
-        "key":{
-          "shape":"TagKey",
-          "documentation":"<p>The tag key.</p>"
-        },
-        "value":{
-          "shape":"TagValue",
-          "documentation":"<p>The tag value.</p>"
-        }
-      },
-      "documentation":"<p>Key/value pair that can be assigned to an application.</p>"
-    },
-    "TagKey":{"type":"string"},
-    "TagValue":{"type":"string"},
-    "Tags":{
-      "type":"list",
-      "member":{"shape":"Tag"}
-    },
-    "TemporarilyUnavailableException":{
-      "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>The service is temporarily unavailable.</p>",
-      "exception":true,
-      "fault":true
-    },
-    "TerminateAppRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        }
-      }
-    },
-    "TerminateAppResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "Timestamp":{"type":"timestamp"},
-    "TotalServerGroups":{"type":"integer"},
-    "TotalServers":{"type":"integer"},
-    "UnauthorizedOperationException":{
-      "type":"structure",
-      "members":{
-        "message":{"shape":"ErrorMessage"}
-      },
-      "documentation":"<p>You lack permissions needed to perform this operation. Check your IAM policies, and ensure that you are using the correct access keys.</p>",
-      "exception":true
-    },
-    "UpdateAppRequest":{
-      "type":"structure",
-      "members":{
-        "appId":{
-          "shape":"AppId",
-          "documentation":"<p>The ID of the application.</p>"
-        },
-        "name":{
-          "shape":"AppName",
-          "documentation":"<p>The new name of the application.</p>"
-        },
-        "description":{
-          "shape":"AppDescription",
-          "documentation":"<p>The new description of the application.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the service role in the customer's account used by Server Migration Service.</p>"
-        },
-        "serverGroups":{
-          "shape":"ServerGroups",
-          "documentation":"<p>The server groups in the application to update.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags to associate with the application.</p>"
-        }
-      }
-    },
-    "UpdateAppResponse":{
-      "type":"structure",
-      "members":{
-        "appSummary":{
-          "shape":"AppSummary",
-          "documentation":"<p>A summary description of the application.</p>"
-        },
-        "serverGroups":{
-          "shape":"ServerGroups",
-          "documentation":"<p>The updated server groups in the application.</p>"
-        },
-        "tags":{
-          "shape":"Tags",
-          "documentation":"<p>The tags associated with the application.</p>"
-        }
-      }
-    },
-    "UpdateReplicationJobRequest":{
-      "type":"structure",
-      "required":["replicationJobId"],
-      "members":{
-        "replicationJobId":{
-          "shape":"ReplicationJobId",
-          "documentation":"<p>The ID of the replication job.</p>"
-        },
-        "frequency":{
-          "shape":"Frequency",
-          "documentation":"<p>The time between consecutive replication runs, in hours.</p>"
-        },
-        "nextReplicationRunStartTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time of the next replication run.</p>"
-        },
-        "licenseType":{
-          "shape":"LicenseType",
-          "documentation":"<p>The license type to be used for the AMI created by a successful replication run.</p>"
-        },
-        "roleName":{
-          "shape":"RoleName",
-          "documentation":"<p>The name of the IAM role to be used by Server Migration Service.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the replication job.</p>"
-        },
-        "numberOfRecentAmisToKeep":{
-          "shape":"NumberOfRecentAmisToKeep",
-          "documentation":"<p>The maximum number of SMS-created AMIs to retain. The oldest is deleted after the maximum number is reached and a new AMI is created.</p>"
-        },
-        "encrypted":{
-          "shape":"Encrypted",
-          "documentation":"<p>When true, the replication job produces encrypted AMIs. For more information, <code>KmsKeyId</code>.</p>"
-        },
-        "kmsKeyId":{
-          "shape":"KmsKeyId",
-          "documentation":"<p>The ID of the KMS key for replication jobs that produce encrypted AMIs. This value can be any of the following:</p> <ul> <li> <p>KMS key ID</p> </li> <li> <p>KMS key alias</p> </li> <li> <p>ARN referring to the KMS key ID</p> </li> <li> <p>ARN referring to the KMS key alias</p> </li> </ul> <p>If encrypted is enabled but a KMS key ID is not specified, the customer's default KMS key for Amazon EBS is used.</p>"
-        }
-      }
-    },
-    "UpdateReplicationJobResponse":{
-      "type":"structure",
-      "members":{
-      }
-    },
-    "UserData":{
-      "type":"structure",
-      "members":{
-        "s3Location":{
-          "shape":"S3Location",
-          "documentation":"<p>Amazon S3 location of the user-data script.</p>"
-        }
-      },
-      "documentation":"<p>A script that runs on first launch of an Amazon EC2 instance. Used for configuring the server during launch.</p>"
-    },
-    "UserDataValidationParameters":{
-      "type":"structure",
-      "members":{
-        "source":{
-          "shape":"Source",
-          "documentation":"<p>The location of the validation script.</p>"
-        },
-        "scriptType":{
-          "shape":"ScriptType",
-          "documentation":"<p>The type of validation script.</p>"
-        }
-      },
-      "documentation":"<p>Contains validation parameters.</p>"
-    },
-    "VPC":{"type":"string"},
-    "ValidationId":{
-      "type":"string",
-      "pattern":"^val-[0-9a-f]{17}$"
-    },
-    "ValidationOutput":{
-      "type":"structure",
-      "members":{
-        "validationId":{
-          "shape":"ValidationId",
-          "documentation":"<p>The ID of the validation.</p>"
-        },
-        "name":{
-          "shape":"NonEmptyStringWithMaxLen255",
-          "documentation":"<p>The name of the validation.</p>"
-        },
-        "status":{
-          "shape":"ValidationStatus",
-          "documentation":"<p>The status of the validation.</p>"
-        },
-        "statusMessage":{
-          "shape":"ValidationStatusMessage",
-          "documentation":"<p>The status message.</p>"
-        },
-        "latestValidationTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The latest time that the validation was performed.</p>"
-        },
-        "appValidationOutput":{
-          "shape":"AppValidationOutput",
-          "documentation":"<p>The output from validating an application.</p>"
-        },
-        "serverValidationOutput":{
-          "shape":"ServerValidationOutput",
-          "documentation":"<p>The output from validation an instance.</p>"
-        }
-      },
-      "documentation":"<p>Contains validation output.</p>"
-    },
-    "ValidationOutputList":{
-      "type":"list",
-      "member":{"shape":"ValidationOutput"}
-    },
-    "ValidationStatus":{
-      "type":"string",
-      "enum":[
-        "READY_FOR_VALIDATION",
-        "PENDING",
-        "IN_PROGRESS",
-        "SUCCEEDED",
-        "FAILED"
-      ]
-    },
-    "ValidationStatusMessage":{
-      "type":"string",
-      "max":2500
-    },
-    "VmId":{"type":"string"},
-    "VmManagerId":{"type":"string"},
-    "VmManagerName":{"type":"string"},
-    "VmManagerType":{
-      "type":"string",
-      "enum":[
-        "VSPHERE",
-        "SCVMM",
-        "HYPERV-MANAGER"
-      ]
-    },
-    "VmName":{"type":"string"},
-    "VmPath":{"type":"string"},
-    "VmServer":{
-      "type":"structure",
-      "members":{
-        "vmServerAddress":{
-          "shape":"VmServerAddress",
-          "documentation":"<p>The VM server location.</p>"
-        },
-        "vmName":{
-          "shape":"VmName",
-          "documentation":"<p>The name of the VM.</p>"
-        },
-        "vmManagerName":{
-          "shape":"VmManagerName",
-          "documentation":"<p>The name of the VM manager.</p>"
-        },
-        "vmManagerType":{
-          "shape":"VmManagerType",
-          "documentation":"<p>The type of VM management product.</p>"
-        },
-        "vmPath":{
-          "shape":"VmPath",
-          "documentation":"<p>The VM folder path in the vCenter Server virtual machine inventory tree.</p>"
-        }
-      },
-      "documentation":"<p>Represents a VM server.</p>"
-    },
-    "VmServerAddress":{
-      "type":"structure",
-      "members":{
-        "vmManagerId":{
-          "shape":"VmManagerId",
-          "documentation":"<p>The ID of the VM manager.</p>"
-        },
-        "vmId":{
-          "shape":"VmId",
-          "documentation":"<p>The ID of the VM.</p>"
-        }
-      },
-      "documentation":"<p>Represents a VM server location.</p>"
-    },
-    "VmServerAddressList":{
-      "type":"list",
-      "member":{"shape":"VmServerAddress"}
-    }
-  },
-  "documentation":"<important> <p> <b>Product update</b> </p> <p>We recommend <a href=\"http://aws.amazon.com/application-migration-service\">Amazon Web Services Application Migration Service</a> (Amazon Web Services MGN) as the primary migration service for lift-and-shift migrations. If Amazon Web Services MGN is unavailable in a specific Amazon Web Services Region, you can use the Server Migration Service APIs through March 2023.</p> </important> <p>Server Migration Service (Server Migration Service) makes it easier and faster for you to migrate your on-premises workloads to Amazon Web Services. To learn more about Server Migration Service, see the following resources:</p> <ul> <li> <p> <a href=\"http://aws.amazon.com/server-migration-service/\">Server Migration Service product page</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/server-migration-service/latest/userguide/\">Server Migration Service User Guide</a> </p> </li> </ul>",
-  "deprecated":true,
-  "deprecatedMessage":"AWS Server Migration Service is Deprecated."
-}
diff -pruN 2.23.6-1/awscli/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/snow-device-management/2021-08-04/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/snowball/2016-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/snowball/2016-06-30/service-2.json 2.31.35-1/awscli/botocore/data/snowball/2016-06-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/snowball/2016-06-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/snowball/2016-06-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -503,8 +503,7 @@
     },
     "CancelClusterResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CancelJobRequest":{
       "type":"structure",
@@ -518,8 +517,7 @@
     },
     "CancelJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ClusterId":{
       "type":"string",
@@ -590,7 +588,7 @@
         },
         "SnowballType":{
           "shape":"SnowballType",
-          "documentation":"<p>The type of Snowcone device to use for this cluster. </p> <note> <p>For cluster jobs, Amazon Web Services Snow Family currently supports only the <code>EDGE</code> device type.</p> </note>"
+          "documentation":"<p>The type of Snowball Edge device to use for this cluster. </p> <note> <p>For cluster jobs, Amazon Web Services Snow Family currently supports only the <code>EDGE</code> device type.</p> </note>"
         },
         "CreationDate":{
           "shape":"Timestamp",
@@ -839,7 +837,7 @@
         },
         "DeviceConfiguration":{
           "shape":"DeviceConfiguration",
-          "documentation":"<p>Defines the device configuration for an Snowcone job.</p> <p>For more information, see \"https://docs.aws.amazon.com/snowball/latest/snowcone-guide/snow-device-types.html\" (Snow Family Devices and Capacity) in the <i>Snowcone User Guide</i> or \"https://docs.aws.amazon.com/snowball/latest/developer-guide/snow-device-types.html\" (Snow Family Devices and Capacity) in the <i>Snowcone User Guide</i>.</p>"
+          "documentation":"<p>Defines the device configuration for an Snowball Edge job.</p> <p>For more information, see \"https://docs.aws.amazon.com/snowball/latest/snowcone-guide/snow-device-types.html\" (Snow Family Devices and Capacity) in the <i>Snowcone User Guide</i> or \"https://docs.aws.amazon.com/snowball/latest/developer-guide/snow-device-types.html\" (Snow Family Devices and Capacity) in the <i>Snowcone User Guide</i>.</p>"
         },
         "RemoteManagement":{
           "shape":"RemoteManagement",
@@ -1080,7 +1078,7 @@
       "members":{
         "SnowconeDeviceConfiguration":{
           "shape":"SnowconeDeviceConfiguration",
-          "documentation":"<p>Returns information about the device configuration for an Snowcone job.</p>"
+          "documentation":"<p>Returns information about the device configuration for an Snowball Edge job.</p>"
         }
       },
       "documentation":"<p>The container for <code>SnowconeDeviceConfiguration</code>. </p>"
@@ -1206,8 +1204,7 @@
     },
     "GetSnowballUsageRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetSnowballUsageResult":{
       "type":"structure",
@@ -2157,10 +2154,10 @@
       "members":{
         "WirelessConnection":{
           "shape":"WirelessConnection",
-          "documentation":"<p>Configures the wireless connection for the Snowcone device.</p>"
+          "documentation":"<p>Configures the wireless connection for the Snowball Edge device.</p>"
         }
       },
-      "documentation":"<p>Specifies the device configuration for an Snowcone job.</p>"
+      "documentation":"<p>Specifies the device configuration for an Snowball Edge job.</p>"
     },
     "SnsTopicARN":{
       "type":"string",
@@ -2281,8 +2278,7 @@
     },
     "UpdateClusterResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateJobRequest":{
       "type":"structure",
@@ -2333,8 +2329,7 @@
     },
     "UpdateJobResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateJobShipmentStateRequest":{
       "type":"structure",
@@ -2355,8 +2350,7 @@
     },
     "UpdateJobShipmentStateResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateLongTermPricingRequest":{
       "type":"structure",
@@ -2378,18 +2372,17 @@
     },
     "UpdateLongTermPricingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "WirelessConnection":{
       "type":"structure",
       "members":{
         "IsWifiEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Enables the Wi-Fi adapter on an Snowcone device.</p>"
+          "documentation":"<p>Enables the Wi-Fi adapter on an Snowball Edge device.</p>"
         }
       },
-      "documentation":"<p>Configures the wireless connection on an Snowcone device.</p>"
+      "documentation":"<p>Configures the wireless connection on an Snowball Edge device.</p>"
     }
   },
   "documentation":"<p>The Amazon Web Services Snow Family provides a petabyte-scale data transport solution that uses secure devices to transfer large amounts of data between your on-premises data centers and Amazon Simple Storage Service (Amazon S3). The Snow Family commands described here provide access to the same functionality that is available in the Amazon Web Services Snow Family Management Console, which enables you to create and manage jobs for a Snow Family device. To transfer data locally with a Snow Family device, you'll need to use the Snowball Edge client or the Amazon S3 API Interface for Snowball or OpsHub for Snow Family. For more information, see the <a href=\"https://docs.aws.amazon.com/AWSImportExport/latest/ug/api-reference.html\">User Guide</a>.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sns/2010-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sns/2010-03-31/service-2.json 2.31.35-1/awscli/botocore/data/sns/2010-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/sns/2010-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sns/2010-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -86,7 +86,7 @@
         {"shape":"InternalErrorException"},
         {"shape":"AuthorizationErrorException"}
       ],
-      "documentation":"<p>Creates a platform application object for one of the supported push notification services, such as APNS and GCM (Firebase Cloud Messaging), to which devices and mobile apps may register. You must specify <code>PlatformPrincipal</code> and <code>PlatformCredential</code> attributes when using the <code>CreatePlatformApplication</code> action.</p> <p> <code>PlatformPrincipal</code> and <code>PlatformCredential</code> are received from the notification service.</p> <ul> <li> <p>For ADM, <code>PlatformPrincipal</code> is <code>client id</code> and <code>PlatformCredential</code> is <code>client secret</code>.</p> </li> <li> <p>For APNS and <code>APNS_SANDBOX</code> using certificate credentials, <code>PlatformPrincipal</code> is <code>SSL certificate</code> and <code>PlatformCredential</code> is <code>private key</code>.</p> </li> <li> <p>For APNS and <code>APNS_SANDBOX</code> using token credentials, <code>PlatformPrincipal</code> is <code>signing key ID</code> and <code>PlatformCredential</code> is <code>signing key</code>.</p> </li> <li> <p>For Baidu, <code>PlatformPrincipal</code> is <code>API key</code> and <code>PlatformCredential</code> is <code>secret key</code>.</p> </li> <li> <p>For GCM (Firebase Cloud Messaging) using key credentials, there is no <code>PlatformPrincipal</code>. The <code>PlatformCredential</code> is <code>API key</code>.</p> </li> <li> <p>For GCM (Firebase Cloud Messaging) using token credentials, there is no <code>PlatformPrincipal</code>. The <code>PlatformCredential</code> is a JSON formatted private key file. When using the Amazon Web Services CLI, the file must be in string format and special characters must be ignored. To format the file correctly, Amazon SNS recommends using the following command: <code>SERVICE_JSON=`jq @json &lt;&lt;&lt; cat service.json`</code>.</p> </li> <li> <p>For MPNS, <code>PlatformPrincipal</code> is <code>TLS certificate</code> and <code>PlatformCredential</code> is <code>private key</code>.</p> </li> <li> <p>For WNS, <code>PlatformPrincipal</code> is <code>Package Security Identifier</code> and <code>PlatformCredential</code> is <code>secret key</code>.</p> </li> </ul> <p>You can use the returned <code>PlatformApplicationArn</code> as an attribute for the <code>CreatePlatformEndpoint</code> action.</p>"
+      "documentation":"<p>Creates a platform application object for one of the supported push notification services, such as APNS and GCM (Firebase Cloud Messaging), to which devices and mobile apps may register. You must specify <code>PlatformPrincipal</code> and <code>PlatformCredential</code> attributes when using the <code>CreatePlatformApplication</code> action.</p> <p> <code>PlatformPrincipal</code> and <code>PlatformCredential</code> are received from the notification service.</p> <ul> <li> <p>For ADM, <code>PlatformPrincipal</code> is <code>client id</code> and <code>PlatformCredential</code> is <code>client secret</code>.</p> </li> <li> <p>For APNS and <code>APNS_SANDBOX</code> using certificate credentials, <code>PlatformPrincipal</code> is <code>SSL certificate</code> and <code>PlatformCredential</code> is <code>private key</code>.</p> </li> <li> <p>For APNS and <code>APNS_SANDBOX</code> using token credentials, <code>PlatformPrincipal</code> is <code>signing key ID</code> and <code>PlatformCredential</code> is <code>signing key</code>.</p> </li> <li> <p>For Baidu, <code>PlatformPrincipal</code> is <code>API key</code> and <code>PlatformCredential</code> is <code>secret key</code>.</p> </li> <li> <p>For GCM (Firebase Cloud Messaging) using key credentials, there is no <code>PlatformPrincipal</code>. The <code>PlatformCredential</code> is <code>API key</code>.</p> </li> <li> <p>For GCM (Firebase Cloud Messaging) using token credentials, there is no <code>PlatformPrincipal</code>. The <code>PlatformCredential</code> is a JSON formatted private key file. When using the Amazon Web Services CLI or Amazon Web Services SDKs, the file must be in string format and special characters must be ignored. To format the file correctly, Amazon SNS recommends using the following command: <code>SERVICE_JSON=$(jq @json &lt; service.json)</code>.</p> </li> <li> <p>For MPNS, <code>PlatformPrincipal</code> is <code>TLS certificate</code> and <code>PlatformCredential</code> is <code>private key</code>.</p> </li> <li> <p>For WNS, <code>PlatformPrincipal</code> is <code>Package Security Identifier</code> and <code>PlatformCredential</code> is <code>secret key</code>.</p> </li> </ul> <p>You can use the returned <code>PlatformApplicationArn</code> as an attribute for the <code>CreatePlatformEndpoint</code> action.</p>"
     },
     "CreatePlatformEndpoint":{
       "name":"CreatePlatformEndpoint",
@@ -607,7 +607,7 @@
         {"shape":"InvalidSecurityException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Publishes up to ten messages to the specified topic. This is a batch version of <code>Publish</code>. For FIFO topics, multiple messages within a single batch are published in the order they are sent, and messages are deduplicated within the batch and across batches for 5 minutes.</p> <p>The result of publishing each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of <code>200</code>.</p> <p>The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 256 KB (262,144 bytes). </p> <p>Some actions take lists of parameters. These lists are specified using the <code>param.n</code> notation. Values of <code>n</code> are integers starting from 1. For example, a parameter list with two elements looks like this: </p> <p>&amp;AttributeName.1=first</p> <p>&amp;AttributeName.2=second</p> <p>If you send a batch message to a topic, Amazon SNS publishes the batch message to each endpoint that is subscribed to the topic. The format of the batch message depends on the notification protocol for each subscribed endpoint.</p> <p>When a <code>messageId</code> is returned, the batch message is saved and Amazon SNS immediately delivers the message to subscribers.</p>"
+      "documentation":"<p>Publishes up to 10 messages to the specified topic in a single batch. This is a batch version of the <code>Publish</code> API. If you try to send more than 10 messages in a single batch request, you will receive a <code>TooManyEntriesInBatchRequest</code> exception.</p> <p>For FIFO topics, multiple messages within a single batch are published in the order they are sent, and messages are deduplicated within the batch and across batches for five minutes.</p> <p>The result of publishing each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of 200.</p> <p>The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 256 KB (262,144 bytes).</p> <important> <p>The <code>PublishBatch</code> API can send up to 10 messages at a time. If you attempt to send more than 10 messages in one request, you will encounter a <code>TooManyEntriesInBatchRequest</code> exception. In such cases, split your messages into multiple requests, each containing no more than 10 messages.</p> </important> <p>Some actions take lists of parameters. These lists are specified using the <code>param.n</code> notation. Values of <code>n</code> are integers starting from <b>1</b>. For example, a parameter list with two elements looks like this:</p> <p> <code>&amp;AttributeName.1=first</code> </p> <p> <code>&amp;AttributeName.2=second</code> </p> <p>If you send a batch message to a topic, Amazon SNS publishes the batch message to each endpoint that is subscribed to the topic. The format of the batch message depends on the notification protocol for each subscribed endpoint.</p> <p>When a <code>messageId</code> is returned, the batch message is saved, and Amazon SNS immediately delivers the message to subscribers.</p>"
     },
     "PutDataProtectionPolicy":{
       "name":"PutDataProtectionPolicy",
@@ -781,7 +781,7 @@
         {"shape":"NotFoundException"},
         {"shape":"InvalidSecurityException"}
       ],
-      "documentation":"<p>Deletes a subscription. If the subscription requires authentication for deletion, only the owner of the subscription or the topic's owner can unsubscribe, and an Amazon Web Services signature is required. If the <code>Unsubscribe</code> call does not require authentication and the requester is not the subscription owner, a final cancellation message is delivered to the endpoint, so that the endpoint owner can easily resubscribe to the topic if the <code>Unsubscribe</code> request was unintended.</p> <note> <p>Amazon SQS queue subscriptions require authentication for deletion. Only the owner of the subscription, or the owner of the topic can unsubscribe using the required Amazon Web Services signature.</p> </note> <p>This action is throttled at 100 transactions per second (TPS).</p>"
+      "documentation":"<p>Deletes a subscription. If the subscription requires authentication for deletion, only the owner of the subscription or the topic's owner can unsubscribe, and an Amazon Web Services signature is required. If the <code>Unsubscribe</code> call does not require authentication and the requester is not the subscription owner, a final cancellation message is delivered to the endpoint, so that the endpoint owner can easily resubscribe to the topic if the <code>Unsubscribe</code> request was unintended.</p> <p>This action is throttled at 100 transactions per second (TPS).</p>"
     },
     "UntagResource":{
       "name":"UntagResource",
@@ -1086,8 +1086,7 @@
     },
     "CreateSMSSandboxPhoneNumberResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateTopicInput":{
       "type":"structure",
@@ -1099,7 +1098,7 @@
         },
         "Attributes":{
           "shape":"TopicAttributesMap",
-          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists names, descriptions, and values of the special request parameters that the <code>CreateTopic</code> action uses:</p> <ul> <li> <p> <code>DeliveryPolicy</code> – The policy that defines how Amazon SNS retries failed deliveries to HTTP/S endpoints.</p> </li> <li> <p> <code>DisplayName</code> – The display name to use for a topic with SMS subscriptions.</p> </li> <li> <p> <code>FifoTopic</code> – Set to true to create a FIFO topic.</p> </li> <li> <p> <code>Policy</code> – The policy that defines who can access your topic. By default, only the topic owner can publish or subscribe to the topic.</p> </li> <li> <p> <code>SignatureVersion</code> – The signature version corresponds to the hashing algorithm used while creating the signature of the notifications, subscription confirmations, or unsubscribe confirmation messages sent by Amazon SNS. By default, <code>SignatureVersion</code> is set to <code>1</code>.</p> </li> <li> <p> <code>TracingConfig</code> – Tracing mode of an Amazon SNS topic. By default <code>TracingConfig</code> is set to <code>PassThrough</code>, and the topic passes through the tracing header it receives from an Amazon SNS publisher to its subscriptions. If set to <code>Active</code>, Amazon SNS will vend X-Ray segment data to topic owner account if the sampled flag in the tracing header is true. This is only supported on standard topics.</p> </li> </ul> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html\">server-side encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SNS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms\">Key Terms</a>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\">FIFO topics</a>:</p> <ul> <li> <p> <code>ArchivePolicy</code> – The policy that sets the retention period for messages stored in the message archive of an Amazon SNS FIFO topic.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication for FIFO topics.</p> <ul> <li> <p>By default, <code>ContentBasedDeduplication</code> is set to <code>false</code>. If you create a FIFO topic and this attribute is <code>false</code>, you must specify a value for the <code>MessageDeduplicationId</code> parameter for the <a href=\"https://docs.aws.amazon.com/sns/latest/api/API_Publish.html\">Publish</a> action. </p> </li> <li> <p>When you set <code>ContentBasedDeduplication</code> to <code>true</code>, Amazon SNS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message).</p> <p>(Optional) To override the generated value, you can specify a value for the <code>MessageDeduplicationId</code> parameter for the <code>Publish</code> action.</p> </li> </ul> </li> </ul> <ul> <li> <p> <code>FifoThroughputScope</code> – Enables higher throughput for your FIFO topic by adjusting the scope of deduplication. This attribute has two possible values:</p> <ul> <li> <p> <code>Topic</code> – The scope of message deduplication is across the entire topic. This is the default value and maintains existing behavior, with a maximum throughput of 3000 messages per second or 20MB per second, whichever comes first.</p> </li> <li> <p> <code>MessageGroup</code> – The scope of deduplication is within each individual message group, which enables higher throughput per topic subject to regional quotas. For more information on quotas or to request an increase, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sns.html\">Amazon SNS service quotas</a> in the Amazon Web Services General Reference.</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists names, descriptions, and values of the special request parameters that the <code>CreateTopic</code> action uses:</p> <ul> <li> <p> <code>DeliveryPolicy</code> – The policy that defines how Amazon SNS retries failed deliveries to HTTP/S endpoints.</p> </li> <li> <p> <code>DisplayName</code> – The display name to use for a topic with SMS subscriptions.</p> </li> <li> <p> <code>Policy</code> – The policy that defines who can access your topic. By default, only the topic owner can publish or subscribe to the topic.</p> </li> <li> <p> <code>TracingConfig</code> – Tracing mode of an Amazon SNS topic. By default <code>TracingConfig</code> is set to <code>PassThrough</code>, and the topic passes through the tracing header it receives from an Amazon SNS publisher to its subscriptions. If set to <code>Active</code>, Amazon SNS will vend X-Ray segment data to topic owner account if the sampled flag in the tracing header is true. This is only supported on standard topics.</p> </li> <li> <p>HTTP</p> <ul> <li> <p> <code>HTTPSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint. </p> </li> <li> <p> <code>HTTPSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> <li> <p> <code>HTTPFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> </ul> </li> <li> <p>Amazon Data Firehose</p> <ul> <li> <p> <code>FirehoseSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint. </p> </li> </ul> </li> <li> <p>Lambda</p> <ul> <li> <p> <code>LambdaSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint. </p> </li> </ul> </li> <li> <p>Platform application endpoint</p> <ul> <li> <p> <code>ApplicationSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to a platform application endpoint.</p> </li> <li> <p> <code>ApplicationSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an platform application endpoint.</p> </li> <li> <p> <code>ApplicationFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an platform application endpoint.</p> </li> </ul> <note> <p>In addition to being able to configure topic attributes for message delivery status of notification messages sent to Amazon SNS application endpoints, you can also configure application attributes for the delivery status of push notification messages sent to push notification services.</p> <p>For example, For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html\">Using Amazon SNS Application Attributes for Message Delivery Status</a>. </p> </note> </li> <li> <p>Amazon SQS</p> <ul> <li> <p> <code>SQSSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> </ul> </li> </ul> <note> <p>The &lt;ENDPOINT&gt;SuccessFeedbackRoleArn and &lt;ENDPOINT&gt;FailureFeedbackRoleArn attributes are used to give Amazon SNS write access to use CloudWatch Logs on your behalf. The &lt;ENDPOINT&gt;SuccessFeedbackSampleRate attribute is for specifying the sample rate percentage (0-100) of successfully delivered messages. After you configure the &lt;ENDPOINT&gt;FailureFeedbackRoleArn attribute, then all failed message deliveries generate CloudWatch Logs. </p> </note> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html\">server-side encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SNS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms\">Key Terms</a>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\">FIFO topics</a>:</p> <ul> <li> <p> <code>ArchivePolicy</code> – The policy that sets the retention period for messages stored in the message archive of an Amazon SNS FIFO topic.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication for FIFO topics.</p> <ul> <li> <p>By default, <code>ContentBasedDeduplication</code> is set to <code>false</code>. If you create a FIFO topic and this attribute is <code>false</code>, you must specify a value for the <code>MessageDeduplicationId</code> parameter for the <a href=\"https://docs.aws.amazon.com/sns/latest/api/API_Publish.html\">Publish</a> action. </p> </li> <li> <p>When you set <code>ContentBasedDeduplication</code> to <code>true</code>, Amazon SNS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message).</p> <p>(Optional) To override the generated value, you can specify a value for the <code>MessageDeduplicationId</code> parameter for the <code>Publish</code> action.</p> </li> </ul> </li> </ul> <ul> <li> <p> <code>FifoThroughputScope</code> – Enables higher throughput for your FIFO topic by adjusting the scope of deduplication. This attribute has two possible values:</p> <ul> <li> <p> <code>Topic</code> – The scope of message deduplication is across the entire topic. This is the default value and maintains existing behavior, with a maximum throughput of 3000 messages per second or 20MB per second, whichever comes first.</p> </li> <li> <p> <code>MessageGroup</code> – The scope of deduplication is within each individual message group, which enables higher throughput per topic subject to regional quotas. For more information on quotas or to request an increase, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sns.html\">Amazon SNS service quotas</a> in the Amazon Web Services General Reference.</p> </li> </ul> </li> </ul>"
         },
         "Tags":{
           "shape":"TagList",
@@ -1160,8 +1159,7 @@
     },
     "DeleteSMSSandboxPhoneNumberResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTopicInput":{
       "type":"structure",
@@ -1221,7 +1219,7 @@
       "members":{
         "message":{"shape":"string"}
       },
-      "documentation":"<p>Indicates that the number of filter polices in your Amazon Web Services account exceeds the limit. To add more filter polices, submit an Amazon SNS Limit Increase case in the Amazon Web Services Support Center.</p>",
+      "documentation":"<p>Indicates that the number of filter polices in your Amazon Web Services account exceeds the limit. To add more filter polices, submit an Amazon SNS Limit Increase case in the Amazon Web ServicesSupport Center.</p>",
       "error":{
         "code":"FilterPolicyLimitExceeded",
         "httpStatusCode":403,
@@ -1312,8 +1310,7 @@
     },
     "GetSMSSandboxAccountStatusInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetSMSSandboxAccountStatusResult":{
       "type":"structure",
@@ -1880,8 +1877,7 @@
     },
     "OptInPhoneNumberResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response for the OptInPhoneNumber action.</p>"
     },
     "OptedOutException":{
@@ -2014,7 +2010,7 @@
         },
         "MessageStructure":{
           "shape":"messageStructure",
-          "documentation":"<p>Set <code>MessageStructure</code> to <code>json</code> if you want to send a different message for each protocol. For example, using one publish action, you can send a short message to your SMS subscribers and a longer message to your email subscribers. If you set <code>MessageStructure</code> to <code>json</code>, the value of the <code>Message</code> parameter must: </p> <ul> <li> <p>be a syntactically valid JSON object; and</p> </li> <li> <p>contain at least a top-level JSON key of \"default\" with a value that is a string.</p> </li> </ul> <p>You can define other top-level keys that define the message you want to send to a specific transport protocol (e.g. http). </p>"
+          "documentation":"<p>Set <code>MessageStructure</code> to <code>json</code> if you want to send a different message for each protocol. For example, using one publish action, you can send a short message to your SMS subscribers and a longer message to your email subscribers. If you set <code>MessageStructure</code> to <code>json</code>, the value of the <code>Message</code> parameter must: </p> <ul> <li> <p>be a syntactically valid JSON object; and</p> </li> <li> <p>contain at least a top-level JSON key of \"default\" with a value that is a string.</p> </li> </ul> <p>You can define other top-level keys that define the message you want to send to a specific transport protocol (for example, http). </p>"
         },
         "MessageAttributes":{
           "shape":"MessageAttributeMap",
@@ -2026,7 +2022,7 @@
         },
         "MessageGroupId":{
           "shape":"String",
-          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) topics.</p> <p>The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single topic, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the topic, but the session data of each user is processed in a FIFO fashion. </p> <p>You must associate a non-empty <code>MessageGroupId</code> with a message. If you don't provide a <code>MessageGroupId</code>, the action fails. </p> <p>The length of <code>MessageGroupId</code> is 128 characters.</p> <p> <code>MessageGroupId</code> can contain alphanumeric characters <code>(a-z, A-Z, 0-9)</code> and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <important> <p> <code>MessageGroupId</code> is required for FIFO topics. You can't use it for standard topics. </p> </important>"
+          "documentation":"<p>FIFO topics: The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single topic, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the topic, but the session data of each user is processed in a FIFO fashion. You must associate a non-empty <code>MessageGroupId</code> with a message. If you do not provide a <code>MessageGroupId</code>, the action fails. </p> <p>Standard topics: The <code>MessageGroupId</code> is optional and is forwarded only to Amazon SQS standard subscriptions to activate <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html\">fair queues</a>. The <code>MessageGroupId</code> is not used for, or sent to, any other endpoint types.</p> <p>The length of <code>MessageGroupId</code> is 128 characters.</p> <p> <code>MessageGroupId</code> can contain alphanumeric characters <code>(a-z, A-Z, 0-9)</code> and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p>"
         }
       },
       "documentation":"<p>Contains the details of a single Amazon SNS message along with an <code>Id</code> that identifies a message within the batch. </p>"
@@ -2108,7 +2104,7 @@
         },
         "MessageGroupId":{
           "shape":"String",
-          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) topics. The <code>MessageGroupId</code> can contain up to 128 alphanumeric characters <code>(a-z, A-Z, 0-9)</code> and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p>The <code>MessageGroupId</code> is a tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). Every message must include a <code>MessageGroupId</code>.</p>"
+          "documentation":"<p>The <code>MessageGroupId</code> can contain up to 128 alphanumeric characters <code>(a-z, A-Z, 0-9)</code> and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p> For FIFO topics: The <code>MessageGroupId</code> is a tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). Every message must include a <code>MessageGroupId</code>. </p> <p> For standard topics: The <code>MessageGroupId</code> is optional and is forwarded only to Amazon SQS standard subscriptions to activate <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html\">fair queues</a>. The <code>MessageGroupId</code> is not used for, or sent to, any other endpoint types. When provided, the same validation rules apply as for FIFO topics. </p>"
         }
       },
       "documentation":"<p>Input for Publish action.</p>"
@@ -2272,8 +2268,7 @@
     },
     "SetSMSAttributesResponse":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The response for the SetSMSAttributes action.</p>"
     },
     "SetSubscriptionAttributesInput":{
@@ -2311,7 +2306,7 @@
         },
         "AttributeName":{
           "shape":"attributeName",
-          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>SetTopicAttributes</code> action uses:</p> <ul> <li> <p> <code>ApplicationSuccessFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to a platform application endpoint.</p> </li> <li> <p> <code>DeliveryPolicy</code> – The policy that defines how Amazon SNS retries failed deliveries to HTTP/S endpoints.</p> </li> <li> <p> <code>DisplayName</code> – The display name to use for a topic with SMS subscriptions.</p> </li> <li> <p> <code>Policy</code> – The policy that defines who can access your topic. By default, only the topic owner can publish or subscribe to the topic.</p> </li> <li> <p> <code>TracingConfig</code> – Tracing mode of an Amazon SNS topic. By default <code>TracingConfig</code> is set to <code>PassThrough</code>, and the topic passes through the tracing header it receives from an Amazon SNS publisher to its subscriptions. If set to <code>Active</code>, Amazon SNS will vend X-Ray segment data to topic owner account if the sampled flag in the tracing header is true. This is only supported on standard topics.</p> </li> <li> <p>HTTP</p> <ul> <li> <p> <code>HTTPSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint. </p> </li> <li> <p> <code>HTTPSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> <li> <p> <code>HTTPFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> </ul> </li> <li> <p>Amazon Kinesis Data Firehose</p> <ul> <li> <p> <code>FirehoseSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon Kinesis Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon Kinesis Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon Kinesis Data Firehose endpoint. </p> </li> </ul> </li> <li> <p>Lambda</p> <ul> <li> <p> <code>LambdaSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint. </p> </li> </ul> </li> <li> <p>Platform application endpoint</p> <ul> <li> <p> <code>ApplicationSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon Web Services application endpoint.</p> </li> <li> <p> <code>ApplicationSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon Web Services application endpoint.</p> </li> <li> <p> <code>ApplicationFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon Web Services application endpoint.</p> </li> </ul> <note> <p>In addition to being able to configure topic attributes for message delivery status of notification messages sent to Amazon SNS application endpoints, you can also configure application attributes for the delivery status of push notification messages sent to push notification services.</p> <p>For example, For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html\">Using Amazon SNS Application Attributes for Message Delivery Status</a>. </p> </note> </li> <li> <p>Amazon SQS</p> <ul> <li> <p> <code>SQSSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> </ul> </li> </ul> <note> <p>The &lt;ENDPOINT&gt;SuccessFeedbackRoleArn and &lt;ENDPOINT&gt;FailureFeedbackRoleArn attributes are used to give Amazon SNS write access to use CloudWatch Logs on your behalf. The &lt;ENDPOINT&gt;SuccessFeedbackSampleRate attribute is for specifying the sample rate percentage (0-100) of successfully delivered messages. After you configure the &lt;ENDPOINT&gt;FailureFeedbackRoleArn attribute, then all failed message deliveries generate CloudWatch Logs. </p> </note> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SNS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms\">Key Terms</a>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>SignatureVersion</code> – The signature version corresponds to the hashing algorithm used while creating the signature of the notifications, subscription confirmations, or unsubscribe confirmation messages sent by Amazon SNS. By default, <code>SignatureVersion</code> is set to <code>1</code>.</p> </li> </ul> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\">FIFO topics</a>:</p> <ul> <li> <p> <code>ArchivePolicy</code> – The policy that sets the retention period for messages stored in the message archive of an Amazon SNS FIFO topic.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication for FIFO topics.</p> <ul> <li> <p>By default, <code>ContentBasedDeduplication</code> is set to <code>false</code>. If you create a FIFO topic and this attribute is <code>false</code>, you must specify a value for the <code>MessageDeduplicationId</code> parameter for the <a href=\"https://docs.aws.amazon.com/sns/latest/api/API_Publish.html\">Publish</a> action. </p> </li> <li> <p>When you set <code>ContentBasedDeduplication</code> to <code>true</code>, Amazon SNS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message).</p> <p>(Optional) To override the generated value, you can specify a value for the <code>MessageDeduplicationId</code> parameter for the <code>Publish</code> action.</p> </li> </ul> </li> </ul> <ul> <li> <p> <code>FifoThroughputScope</code> – Enables higher throughput for your FIFO topic by adjusting the scope of deduplication. This attribute has two possible values:</p> <ul> <li> <p> <code>Topic</code> – The scope of message deduplication is across the entire topic. This is the default value and maintains existing behavior, with a maximum throughput of 3000 messages per second or 20MB per second, whichever comes first.</p> </li> <li> <p> <code>MessageGroup</code> – The scope of deduplication is within each individual message group, which enables higher throughput per topic subject to regional quotas. For more information on quotas or to request an increase, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sns.html\">Amazon SNS service quotas</a> in the Amazon Web Services General Reference.</p> </li> </ul> </li> </ul>"
+          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>SetTopicAttributes</code> action uses:</p> <ul> <li> <p> <code>DeliveryPolicy</code> – The policy that defines how Amazon SNS retries failed deliveries to HTTP/S endpoints.</p> </li> <li> <p> <code>DisplayName</code> – The display name to use for a topic with SMS subscriptions.</p> </li> <li> <p> <code>Policy</code> – The policy that defines who can access your topic. By default, only the topic owner can publish or subscribe to the topic.</p> </li> <li> <p> <code>TracingConfig</code> – Tracing mode of an Amazon SNS topic. By default <code>TracingConfig</code> is set to <code>PassThrough</code>, and the topic passes through the tracing header it receives from an Amazon SNS publisher to its subscriptions. If set to <code>Active</code>, Amazon SNS will vend X-Ray segment data to topic owner account if the sampled flag in the tracing header is true. This is only supported on standard topics.</p> </li> <li> <p>HTTP</p> <ul> <li> <p> <code>HTTPSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint. </p> </li> <li> <p> <code>HTTPSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> <li> <p> <code>HTTPFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an HTTP endpoint.</p> </li> </ul> </li> <li> <p>Amazon Data Firehose</p> <ul> <li> <p> <code>FirehoseSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint.</p> </li> <li> <p> <code>FirehoseFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon Data Firehose endpoint. </p> </li> </ul> </li> <li> <p>Lambda</p> <ul> <li> <p> <code>LambdaSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Lambda endpoint.</p> </li> <li> <p> <code>LambdaFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Lambda endpoint. </p> </li> </ul> </li> <li> <p>Platform application endpoint</p> <ul> <li> <p> <code>ApplicationSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an platform application endpoint.</p> </li> <li> <p> <code>ApplicationSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an platform application endpoint.</p> </li> <li> <p> <code>ApplicationFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an platform application endpoint.</p> </li> </ul> <note> <p>In addition to being able to configure topic attributes for message delivery status of notification messages sent to Amazon SNS application endpoints, you can also configure application attributes for the delivery status of push notification messages sent to push notification services.</p> <p>For example, For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html\">Using Amazon SNS Application Attributes for Message Delivery Status</a>. </p> </note> </li> <li> <p>Amazon SQS</p> <ul> <li> <p> <code>SQSSuccessFeedbackRoleArn</code> – Indicates successful message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSSuccessFeedbackSampleRate</code> – Indicates percentage of successful messages to sample for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> <li> <p> <code>SQSFailureFeedbackRoleArn</code> – Indicates failed message delivery status for an Amazon SNS topic that is subscribed to an Amazon SQS endpoint. </p> </li> </ul> </li> </ul> <note> <p>The &lt;ENDPOINT&gt;SuccessFeedbackRoleArn and &lt;ENDPOINT&gt;FailureFeedbackRoleArn attributes are used to give Amazon SNS write access to use CloudWatch Logs on your behalf. The &lt;ENDPOINT&gt;SuccessFeedbackSampleRate attribute is for specifying the sample rate percentage (0-100) of successfully delivered messages. After you configure the &lt;ENDPOINT&gt;FailureFeedbackRoleArn attribute, then all failed message deliveries generate CloudWatch Logs. </p> </note> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SNS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms\">Key Terms</a>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>SignatureVersion</code> – The signature version corresponds to the hashing algorithm used while creating the signature of the notifications, subscription confirmations, or unsubscribe confirmation messages sent by Amazon SNS. By default, <code>SignatureVersion</code> is set to <code>1</code>.</p> </li> </ul> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\">FIFO topics</a>:</p> <ul> <li> <p> <code>ArchivePolicy</code> – The policy that sets the retention period for messages stored in the message archive of an Amazon SNS FIFO topic.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication for FIFO topics.</p> <ul> <li> <p>By default, <code>ContentBasedDeduplication</code> is set to <code>false</code>. If you create a FIFO topic and this attribute is <code>false</code>, you must specify a value for the <code>MessageDeduplicationId</code> parameter for the <a href=\"https://docs.aws.amazon.com/sns/latest/api/API_Publish.html\">Publish</a> action. </p> </li> <li> <p>When you set <code>ContentBasedDeduplication</code> to <code>true</code>, Amazon SNS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message).</p> <p>(Optional) To override the generated value, you can specify a value for the <code>MessageDeduplicationId</code> parameter for the <code>Publish</code> action.</p> </li> </ul> </li> </ul> <ul> <li> <p> <code>FifoThroughputScope</code> – Enables higher throughput for your FIFO topic by adjusting the scope of deduplication. This attribute has two possible values:</p> <ul> <li> <p> <code>Topic</code> – The scope of message deduplication is across the entire topic. This is the default value and maintains existing behavior, with a maximum throughput of 3000 messages per second or 20MB per second, whichever comes first.</p> </li> <li> <p> <code>MessageGroup</code> – The scope of deduplication is within each individual message group, which enables higher throughput per topic subject to regional quotas. For more information on quotas or to request an increase, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/sns.html\">Amazon SNS service quotas</a> in the Amazon Web Services General Reference.</p> </li> </ul> </li> </ul>"
         },
         "AttributeValue":{
           "shape":"attributeValue",
@@ -2347,11 +2342,11 @@
         },
         "Protocol":{
           "shape":"protocol",
-          "documentation":"<p>The protocol that you want to use. Supported protocols include:</p> <ul> <li> <p> <code>http</code> – delivery of JSON-encoded message via HTTP POST</p> </li> <li> <p> <code>https</code> – delivery of JSON-encoded message via HTTPS POST</p> </li> <li> <p> <code>email</code> – delivery of message via SMTP</p> </li> <li> <p> <code>email-json</code> – delivery of JSON-encoded message via SMTP</p> </li> <li> <p> <code>sms</code> – delivery of message via SMS</p> </li> <li> <p> <code>sqs</code> – delivery of JSON-encoded message to an Amazon SQS queue</p> </li> <li> <p> <code>application</code> – delivery of JSON-encoded message to an EndpointArn for a mobile app and device</p> </li> <li> <p> <code>lambda</code> – delivery of JSON-encoded message to an Lambda function</p> </li> <li> <p> <code>firehose</code> – delivery of JSON-encoded message to an Amazon Kinesis Data Firehose delivery stream.</p> </li> </ul>"
+          "documentation":"<p>The protocol that you want to use. Supported protocols include:</p> <ul> <li> <p> <code>http</code> – delivery of JSON-encoded message via HTTP POST</p> </li> <li> <p> <code>https</code> – delivery of JSON-encoded message via HTTPS POST</p> </li> <li> <p> <code>email</code> – delivery of message via SMTP</p> </li> <li> <p> <code>email-json</code> – delivery of JSON-encoded message via SMTP</p> </li> <li> <p> <code>sms</code> – delivery of message via SMS</p> </li> <li> <p> <code>sqs</code> – delivery of JSON-encoded message to an Amazon SQS queue</p> </li> <li> <p> <code>application</code> – delivery of JSON-encoded message to an EndpointArn for a mobile app and device</p> </li> <li> <p> <code>lambda</code> – delivery of JSON-encoded message to an Lambda function</p> </li> <li> <p> <code>firehose</code> – delivery of JSON-encoded message to an Amazon Data Firehose delivery stream.</p> </li> </ul>"
         },
         "Endpoint":{
           "shape":"endpoint",
-          "documentation":"<p>The endpoint that you want to receive notifications. Endpoints vary by protocol:</p> <ul> <li> <p>For the <code>http</code> protocol, the (public) endpoint is a URL beginning with <code>http://</code>.</p> </li> <li> <p>For the <code>https</code> protocol, the (public) endpoint is a URL beginning with <code>https://</code>.</p> </li> <li> <p>For the <code>email</code> protocol, the endpoint is an email address.</p> </li> <li> <p>For the <code>email-json</code> protocol, the endpoint is an email address.</p> </li> <li> <p>For the <code>sms</code> protocol, the endpoint is a phone number of an SMS-enabled device.</p> </li> <li> <p>For the <code>sqs</code> protocol, the endpoint is the ARN of an Amazon SQS queue.</p> </li> <li> <p>For the <code>application</code> protocol, the endpoint is the EndpointArn of a mobile app and device.</p> </li> <li> <p>For the <code>lambda</code> protocol, the endpoint is the ARN of an Lambda function.</p> </li> <li> <p>For the <code>firehose</code> protocol, the endpoint is the ARN of an Amazon Kinesis Data Firehose delivery stream.</p> </li> </ul>"
+          "documentation":"<p>The endpoint that you want to receive notifications. Endpoints vary by protocol:</p> <ul> <li> <p>For the <code>http</code> protocol, the (public) endpoint is a URL beginning with <code>http://</code>.</p> </li> <li> <p>For the <code>https</code> protocol, the (public) endpoint is a URL beginning with <code>https://</code>.</p> </li> <li> <p>For the <code>email</code> protocol, the endpoint is an email address.</p> </li> <li> <p>For the <code>email-json</code> protocol, the endpoint is an email address.</p> </li> <li> <p>For the <code>sms</code> protocol, the endpoint is a phone number of an SMS-enabled device.</p> </li> <li> <p>For the <code>sqs</code> protocol, the endpoint is the ARN of an Amazon SQS queue.</p> </li> <li> <p>For the <code>application</code> protocol, the endpoint is the EndpointArn of a mobile app and device.</p> </li> <li> <p>For the <code>lambda</code> protocol, the endpoint is the ARN of an Lambda function.</p> </li> <li> <p>For the <code>firehose</code> protocol, the endpoint is the ARN of an Amazon Data Firehose delivery stream.</p> </li> </ul>"
         },
         "Attributes":{
           "shape":"SubscriptionAttributesMap",
@@ -2498,8 +2493,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2528,7 +2522,7 @@
       "members":{
         "message":{"shape":"string"}
       },
-      "documentation":"<p>The batch request contains more entries than permissible.</p>",
+      "documentation":"<p> The batch request contains more entries than permissible (more than 10).</p>",
       "error":{
         "code":"TooManyEntriesInBatchRequest",
         "httpStatusCode":400,
@@ -2598,8 +2592,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UserErrorException":{
       "type":"structure",
@@ -2663,8 +2656,7 @@
     },
     "VerifySMSSandboxPhoneNumberResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The destination phone number's verification status.</p>"
     },
     "account":{"type":"string"},
diff -pruN 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/paginators-1.json 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "linkedAccounts"
+    },
+    "ListWhatsAppMessageTemplates": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "templates"
+    },
+    "ListWhatsAppTemplateLibrary": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "metaLibraryTemplates"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/service-2.json 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/socialmessaging/2024-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/socialmessaging/2024-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -24,6 +24,7 @@
       "output":{"shape":"AssociateWhatsAppBusinessAccountOutput"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"LimitExceededException"},
         {"shape":"AccessDeniedException"},
         {"shape":"InvalidParametersException"},
         {"shape":"ThrottledRequestException"},
@@ -31,6 +32,66 @@
       ],
       "documentation":"<p>This is only used through the Amazon Web Services console during sign-up to associate your WhatsApp Business Account to your Amazon Web Services account.</p>"
     },
+    "CreateWhatsAppMessageTemplate":{
+      "name":"CreateWhatsAppMessageTemplate",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/whatsapp/template/put",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateWhatsAppMessageTemplateInput"},
+      "output":{"shape":"CreateWhatsAppMessageTemplateOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Creates a new WhatsApp message template from a custom definition.</p>"
+    },
+    "CreateWhatsAppMessageTemplateFromLibrary":{
+      "name":"CreateWhatsAppMessageTemplateFromLibrary",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/whatsapp/template/create",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateWhatsAppMessageTemplateFromLibraryInput"},
+      "output":{"shape":"CreateWhatsAppMessageTemplateFromLibraryOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Creates a new WhatsApp message template using a template from Meta's template library.</p>"
+    },
+    "CreateWhatsAppMessageTemplateMedia":{
+      "name":"CreateWhatsAppMessageTemplateMedia",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/whatsapp/template/media",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateWhatsAppMessageTemplateMediaInput"},
+      "output":{"shape":"CreateWhatsAppMessageTemplateMediaOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Uploads media for use in a WhatsApp message template.</p>"
+    },
     "DeleteWhatsAppMessageMedia":{
       "name":"DeleteWhatsAppMessageMedia",
       "http":{
@@ -53,6 +114,27 @@
       "documentation":"<p>Delete a media object from the WhatsApp service. If the object is still in an Amazon S3 bucket you should delete it from there too.</p>",
       "idempotent":true
     },
+    "DeleteWhatsAppMessageTemplate":{
+      "name":"DeleteWhatsAppMessageTemplate",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/v1/whatsapp/template",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteWhatsAppMessageTemplateInput"},
+      "output":{"shape":"DeleteWhatsAppMessageTemplateOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Deletes a WhatsApp message template.</p>",
+      "idempotent":true
+    },
     "DisassociateWhatsAppBusinessAccount":{
       "name":"DisassociateWhatsAppBusinessAccount",
       "http":{
@@ -134,6 +216,26 @@
       ],
       "documentation":"<p>Get a media file from the WhatsApp service. On successful completion the media file is retrieved from Meta and stored in the specified Amazon S3 bucket. Use either <code>destinationS3File</code> or <code>destinationS3PresignedUrl</code> for the destination. If both are used then an <code>InvalidParameterException</code> is returned.</p>"
     },
+    "GetWhatsAppMessageTemplate":{
+      "name":"GetWhatsAppMessageTemplate",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/whatsapp/template",
+        "responseCode":200
+      },
+      "input":{"shape":"GetWhatsAppMessageTemplateInput"},
+      "output":{"shape":"GetWhatsAppMessageTemplateOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Retrieves a specific WhatsApp message template.</p>"
+    },
     "ListLinkedWhatsAppBusinessAccounts":{
       "name":"ListLinkedWhatsAppBusinessAccounts",
       "http":{
@@ -171,6 +273,46 @@
       ],
       "documentation":"<p>List all tags associated with a resource, such as a phone number or WABA.</p>"
     },
+    "ListWhatsAppMessageTemplates":{
+      "name":"ListWhatsAppMessageTemplates",
+      "http":{
+        "method":"GET",
+        "requestUri":"/v1/whatsapp/template/list",
+        "responseCode":200
+      },
+      "input":{"shape":"ListWhatsAppMessageTemplatesInput"},
+      "output":{"shape":"ListWhatsAppMessageTemplatesOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Lists WhatsApp message templates for a specific WhatsApp Business Account.</p>"
+    },
+    "ListWhatsAppTemplateLibrary":{
+      "name":"ListWhatsAppTemplateLibrary",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/whatsapp/template/library",
+        "responseCode":200
+      },
+      "input":{"shape":"ListWhatsAppTemplateLibraryInput"},
+      "output":{"shape":"ListWhatsAppTemplateLibraryOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Lists templates available in Meta's template library for WhatsApp messaging.</p>"
+    },
     "PostWhatsAppMessageMedia":{
       "name":"PostWhatsAppMessageMedia",
       "http":{
@@ -266,6 +408,26 @@
         {"shape":"InternalServiceException"}
       ],
       "documentation":"<p>Removes the specified tags from a resource. </p>"
+    },
+    "UpdateWhatsAppMessageTemplate":{
+      "name":"UpdateWhatsAppMessageTemplate",
+      "http":{
+        "method":"POST",
+        "requestUri":"/v1/whatsapp/template",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateWhatsAppMessageTemplateInput"},
+      "output":{"shape":"UpdateWhatsAppMessageTemplateOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidParametersException"},
+        {"shape":"ThrottledRequestException"},
+        {"shape":"InternalServiceException"},
+        {"shape":"DependencyException"}
+      ],
+      "documentation":"<p>Updates an existing WhatsApp message template.</p>"
     }
   },
   "shapes":{
@@ -293,6 +455,22 @@
       },
       "exception":true
     },
+    "AddContactNumber":{
+      "type":"boolean",
+      "box":true
+    },
+    "AddLearnMoreLink":{
+      "type":"boolean",
+      "box":true
+    },
+    "AddSecurityRecommendation":{
+      "type":"boolean",
+      "box":true
+    },
+    "AddTrackPackageLink":{
+      "type":"boolean",
+      "box":true
+    },
     "Arn":{
       "type":"string",
       "max":2048,
@@ -335,6 +513,107 @@
       "type":"boolean",
       "box":true
     },
+    "ButtonType":{
+      "type":"string",
+      "max":25,
+      "min":1
+    },
+    "CodeExpirationMinutes":{
+      "type":"integer",
+      "box":true
+    },
+    "CreateWhatsAppMessageTemplateFromLibraryInput":{
+      "type":"structure",
+      "required":[
+        "metaLibraryTemplate",
+        "id"
+      ],
+      "members":{
+        "metaLibraryTemplate":{
+          "shape":"MetaLibraryTemplate",
+          "documentation":"<p>The template configuration from Meta's library, including customizations for buttons and body text.</p>"
+        },
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account to associate with this template.</p>"
+        }
+      }
+    },
+    "CreateWhatsAppMessageTemplateFromLibraryOutput":{
+      "type":"structure",
+      "members":{
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID assigned to the template by Meta.</p>"
+        },
+        "templateStatus":{
+          "shape":"String",
+          "documentation":"<p>The status of the created template (for example, PENDING or APPROVED).</p>"
+        },
+        "category":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The category of the template (for example, UTILITY or MARKETING).</p>"
+        }
+      }
+    },
+    "CreateWhatsAppMessageTemplateInput":{
+      "type":"structure",
+      "required":[
+        "templateDefinition",
+        "id"
+      ],
+      "members":{
+        "templateDefinition":{
+          "shape":"MetaTemplateDefinition",
+          "documentation":"<p>The complete template definition as a JSON blob.</p>"
+        },
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account to associate with this template.</p>"
+        }
+      }
+    },
+    "CreateWhatsAppMessageTemplateMediaInput":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account associated with this media upload.</p>"
+        },
+        "sourceS3File":{"shape":"S3File"}
+      }
+    },
+    "CreateWhatsAppMessageTemplateMediaOutput":{
+      "type":"structure",
+      "members":{
+        "metaHeaderHandle":{
+          "shape":"String",
+          "documentation":"<p>The handle assigned to the uploaded media by Meta, used to reference the media in templates.</p>"
+        }
+      }
+    },
+    "CreateWhatsAppMessageTemplateOutput":{
+      "type":"structure",
+      "members":{
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID assigned to the template by Meta.</p>"
+        },
+        "templateStatus":{
+          "shape":"String",
+          "documentation":"<p>The status of the created template, such as PENDING or APPROVED..</p>"
+        },
+        "category":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The category of the template, such as UTILITY or MARKETING.</p>"
+        }
+      }
+    },
+    "DeleteAllLanguages":{
+      "type":"boolean",
+      "box":true
+    },
     "DeleteWhatsAppMessageMediaInput":{
       "type":"structure",
       "required":[
@@ -365,6 +644,44 @@
         }
       }
     },
+    "DeleteWhatsAppMessageTemplateInput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "templateName"
+      ],
+      "members":{
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID of the template assigned by Meta.</p>",
+          "location":"querystring",
+          "locationName":"metaTemplateId"
+        },
+        "deleteAllLanguages":{
+          "shape":"DeleteAllLanguages",
+          "documentation":"<p>If true, deletes all language versions of the template.</p>",
+          "location":"querystring",
+          "locationName":"deleteAllTemplates"
+        },
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account associated with this template.</p>",
+          "location":"querystring",
+          "locationName":"id"
+        },
+        "templateName":{
+          "shape":"MetaTemplateName",
+          "documentation":"<p>The name of the template to delete.</p>",
+          "location":"querystring",
+          "locationName":"templateName"
+        }
+      }
+    },
+    "DeleteWhatsAppMessageTemplateOutput":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DependencyException":{
       "type":"structure",
       "members":{
@@ -400,6 +717,23 @@
       "min":0,
       "pattern":"arn:.*:[a-z-]+([/:](.*))?"
     },
+    "Filter":{
+      "type":"map",
+      "key":{"shape":"FilterKeyString"},
+      "value":{"shape":"FilterValueString"},
+      "max":10,
+      "min":0
+    },
+    "FilterKeyString":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "FilterValueString":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
     "GetLinkedWhatsAppBusinessAccountInput":{
       "type":"structure",
       "required":["id"],
@@ -485,6 +819,36 @@
         }
       }
     },
+    "GetWhatsAppMessageTemplateInput":{
+      "type":"structure",
+      "required":[
+        "metaTemplateId",
+        "id"
+      ],
+      "members":{
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID of the template assigned by Meta.</p>",
+          "location":"querystring",
+          "locationName":"metaTemplateId"
+        },
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account associated with this template.</p>",
+          "location":"querystring",
+          "locationName":"id"
+        }
+      }
+    },
+    "GetWhatsAppMessageTemplateOutput":{
+      "type":"structure",
+      "members":{
+        "template":{
+          "shape":"MetaTemplate",
+          "documentation":"<p>The complete template definition as a JSON string (maximum 6000 characters).</p>"
+        }
+      }
+    },
     "Headers":{
       "type":"map",
       "key":{"shape":"String"},
@@ -521,6 +885,108 @@
       "type":"string",
       "pattern":"[A-Z]{2}"
     },
+    "LibraryTemplateBodyInputs":{
+      "type":"structure",
+      "members":{
+        "addContactNumber":{
+          "shape":"AddContactNumber",
+          "documentation":"<p>When true, includes a contact number in the template body.</p>"
+        },
+        "addLearnMoreLink":{
+          "shape":"AddLearnMoreLink",
+          "documentation":"<p>When true, includes a \"learn more\" link in the template body.</p>"
+        },
+        "addSecurityRecommendation":{
+          "shape":"AddSecurityRecommendation",
+          "documentation":"<p>When true, includes security recommendations in the template body.</p>"
+        },
+        "addTrackPackageLink":{
+          "shape":"AddTrackPackageLink",
+          "documentation":"<p>When true, includes a package tracking link in the template body.</p>"
+        },
+        "codeExpirationMinutes":{
+          "shape":"CodeExpirationMinutes",
+          "documentation":"<p>The number of minutes until a verification code or OTP expires.</p>"
+        }
+      },
+      "documentation":"<p>Configuration options for customizing the body content of a template from Meta's library.</p>"
+    },
+    "LibraryTemplateButtonInput":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"ButtonType",
+          "documentation":"<p>The type of button (for example, QUICK_REPLY, CALL, or URL).</p>"
+        },
+        "phoneNumber":{
+          "shape":"PhoneNumber",
+          "documentation":"<p>The phone number in E.164 format for CALL-type buttons.</p>"
+        },
+        "url":{
+          "shape":"MetaUrlWithSuffixExample",
+          "documentation":"<p>The URL with dynamic parameters for URL-type buttons.</p>"
+        },
+        "otpType":{
+          "shape":"OtpType",
+          "documentation":"<p>The type of one-time password for OTP buttons.</p>"
+        },
+        "zeroTapTermsAccepted":{
+          "shape":"ZeroTapTermsAccepted",
+          "documentation":"<p>When true, indicates acceptance of zero-tap terms for the button.</p>"
+        },
+        "supportedApps":{
+          "shape":"SupportedApps",
+          "documentation":"<p>List of supported applications for this button type.</p>"
+        }
+      },
+      "documentation":"<p>Configuration options for customizing buttons in a template from Meta's library.</p>"
+    },
+    "LibraryTemplateButtonList":{
+      "type":"structure",
+      "members":{
+        "type":{
+          "shape":"ButtonType",
+          "documentation":"<p>The type of button (for example, QUICK_REPLY, CALL, or URL).</p>"
+        },
+        "text":{
+          "shape":"MetaText",
+          "documentation":"<p>The text displayed on the button (maximum 40 characters).</p>"
+        },
+        "phoneNumber":{
+          "shape":"PhoneNumber",
+          "documentation":"<p>The phone number in E.164 format for CALL-type buttons.</p>"
+        },
+        "url":{
+          "shape":"MetaUrl",
+          "documentation":"<p>The URL for URL-type buttons.</p>"
+        },
+        "otpType":{
+          "shape":"OtpType",
+          "documentation":"<p>The type of one-time password for OTP buttons.</p>"
+        },
+        "zeroTapTermsAccepted":{
+          "shape":"ZeroTapTermsAccepted",
+          "documentation":"<p>When true, indicates acceptance of zero-tap terms for the button.</p>"
+        },
+        "supportedApps":{
+          "shape":"SupportedApps",
+          "documentation":"<p>List of supported applications for this button type.</p>"
+        }
+      },
+      "documentation":"<p>Defines a button in a template from Meta's library.</p>"
+    },
+    "LimitExceededException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The request was denied because it would exceed one or more service quotas or limits.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "LinkedAccountWithIncompleteSetup":{
       "type":"map",
       "key":{"shape":"WhatsAppBusinessAccountId"},
@@ -716,6 +1182,80 @@
         }
       }
     },
+    "ListWhatsAppMessageTemplatesInput":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account to list templates for.</p>",
+          "location":"querystring",
+          "locationName":"id"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page (1-100).</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      }
+    },
+    "ListWhatsAppMessageTemplatesOutput":{
+      "type":"structure",
+      "members":{
+        "templates":{
+          "shape":"TemplateSummaryList",
+          "documentation":"<p>A list of template summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to retrieve the next page of results, if any.</p>"
+        }
+      }
+    },
+    "ListWhatsAppTemplateLibraryInput":{
+      "type":"structure",
+      "required":["id"],
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return per page (1-100).</p>"
+        },
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account to list library templates for.</p>",
+          "location":"querystring",
+          "locationName":"id"
+        },
+        "filters":{
+          "shape":"Filter",
+          "documentation":"<p>Map of filters to apply (searchKey, topic, usecase, industry, language).</p>"
+        }
+      }
+    },
+    "ListWhatsAppTemplateLibraryOutput":{
+      "type":"structure",
+      "members":{
+        "metaLibraryTemplates":{
+          "shape":"MetaLibraryTemplatesList",
+          "documentation":"<p>A list of templates from Meta's library.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to retrieve the next page of results, if any.</p>"
+        }
+      }
+    },
     "Long":{
       "type":"long",
       "box":true
@@ -726,11 +1266,212 @@
       "max":100,
       "min":1
     },
+    "MetaIndustries":{
+      "type":"list",
+      "member":{"shape":"MetaIndustry"}
+    },
+    "MetaIndustry":{
+      "type":"string",
+      "max":25,
+      "min":1
+    },
+    "MetaLibraryTemplate":{
+      "type":"structure",
+      "required":[
+        "templateName",
+        "libraryTemplateName",
+        "templateCategory",
+        "templateLanguage"
+      ],
+      "members":{
+        "templateName":{
+          "shape":"MetaTemplateName",
+          "documentation":"<p>The name to assign to the template.</p>"
+        },
+        "libraryTemplateName":{
+          "shape":"MetaTemplateName",
+          "documentation":"<p>The name of the template in Meta's library.</p>"
+        },
+        "templateCategory":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The category of the template (for example, UTILITY or MARKETING).</p>"
+        },
+        "templateLanguage":{
+          "shape":"MetaTemplateLanguage",
+          "documentation":"<p>The language code for the template (for example, en_US).</p>"
+        },
+        "libraryTemplateButtonInputs":{
+          "shape":"MetaLibraryTemplateButtonInputs",
+          "documentation":"<p>Button customizations for the template.</p>"
+        },
+        "libraryTemplateBodyInputs":{
+          "shape":"LibraryTemplateBodyInputs",
+          "documentation":"<p>Body text customizations for the template.</p>"
+        }
+      },
+      "documentation":"<p>Represents a template from Meta's library with customization options.</p>"
+    },
+    "MetaLibraryTemplateButtonInputs":{
+      "type":"list",
+      "member":{"shape":"LibraryTemplateButtonInput"}
+    },
+    "MetaLibraryTemplateButtonList":{
+      "type":"list",
+      "member":{"shape":"LibraryTemplateButtonList"}
+    },
+    "MetaLibraryTemplateDefinition":{
+      "type":"structure",
+      "members":{
+        "templateName":{
+          "shape":"MetaTemplateName",
+          "documentation":"<p>The name of the template.</p>"
+        },
+        "templateLanguage":{
+          "shape":"MetaTemplateLanguage",
+          "documentation":"<p>The language code for the template (for example, en_US).</p>"
+        },
+        "templateCategory":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The category of the template (for example, UTILITY or MARKETING).</p>"
+        },
+        "templateTopic":{
+          "shape":"MetaTemplateTopic",
+          "documentation":"<p>The topic or subject matter of the template.</p>"
+        },
+        "templateUseCase":{
+          "shape":"MetaTemplateUseCase",
+          "documentation":"<p>The intended use case for the template.</p>"
+        },
+        "templateIndustry":{
+          "shape":"MetaIndustries",
+          "documentation":"<p>The industries the template is designed for.</p>"
+        },
+        "templateHeader":{
+          "shape":"MetaTemplateHeader",
+          "documentation":"<p>The header text of the template.</p>"
+        },
+        "templateBody":{
+          "shape":"MetaTemplateBody",
+          "documentation":"<p>The body text of the template.</p>"
+        },
+        "templateButtons":{
+          "shape":"MetaLibraryTemplateButtonList",
+          "documentation":"<p>The buttons included in the template.</p>"
+        },
+        "templateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The ID of the template in Meta's library.</p>"
+        }
+      },
+      "documentation":"<p>Defines the complete structure and content of a template in Meta's library.</p>"
+    },
+    "MetaLibraryTemplatesList":{
+      "type":"list",
+      "member":{"shape":"MetaLibraryTemplateDefinition"}
+    },
+    "MetaTemplate":{
+      "type":"string",
+      "max":6000,
+      "min":1
+    },
+    "MetaTemplateBody":{
+      "type":"string",
+      "max":2000,
+      "min":1
+    },
+    "MetaTemplateCategory":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "MetaTemplateComponents":{
+      "type":"blob",
+      "max":3000,
+      "min":1
+    },
+    "MetaTemplateDefinition":{
+      "type":"blob",
+      "max":6000,
+      "min":1
+    },
+    "MetaTemplateHeader":{
+      "type":"string",
+      "max":200,
+      "min":1
+    },
+    "MetaTemplateId":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[0-9]+"
+    },
+    "MetaTemplateLanguage":{
+      "type":"string",
+      "max":6,
+      "min":1
+    },
+    "MetaTemplateName":{
+      "type":"string",
+      "max":512,
+      "min":1
+    },
+    "MetaTemplateQualityScore":{
+      "type":"string",
+      "max":20,
+      "min":1
+    },
+    "MetaTemplateStatus":{
+      "type":"string",
+      "max":20,
+      "min":1
+    },
+    "MetaTemplateTopic":{
+      "type":"string",
+      "max":20,
+      "min":1
+    },
+    "MetaTemplateUseCase":{
+      "type":"string",
+      "max":30,
+      "min":1
+    },
+    "MetaText":{
+      "type":"string",
+      "max":40,
+      "min":1
+    },
+    "MetaUrl":{
+      "type":"string",
+      "max":400,
+      "min":1
+    },
+    "MetaUrlWithSuffixExample":{
+      "type":"map",
+      "key":{"shape":"MetaUrlWithSuffixExampleKeyString"},
+      "value":{"shape":"MetaUrlWithSuffixExampleValueString"},
+      "max":10,
+      "min":0
+    },
+    "MetaUrlWithSuffixExampleKeyString":{
+      "type":"string",
+      "max":30,
+      "min":1
+    },
+    "MetaUrlWithSuffixExampleValueString":{
+      "type":"string",
+      "max":400,
+      "min":1
+    },
     "NextToken":{
       "type":"string",
       "max":600,
       "min":1
     },
+    "OtpType":{
+      "type":"string",
+      "max":25,
+      "min":1
+    },
     "PhoneNumber":{
       "type":"string",
       "max":20,
@@ -899,6 +1640,27 @@
       "type":"list",
       "member":{"shape":"String"}
     },
+    "SupportedApp":{
+      "type":"map",
+      "key":{"shape":"SupportedAppKeyString"},
+      "value":{"shape":"SupportedAppValueString"},
+      "max":10,
+      "min":0
+    },
+    "SupportedAppKeyString":{
+      "type":"string",
+      "max":30,
+      "min":1
+    },
+    "SupportedAppValueString":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "SupportedApps":{
+      "type":"list",
+      "member":{"shape":"SupportedApp"}
+    },
     "Tag":{
       "type":"structure",
       "required":["key"],
@@ -954,6 +1716,40 @@
       "max":256,
       "min":0
     },
+    "TemplateSummary":{
+      "type":"structure",
+      "members":{
+        "templateName":{
+          "shape":"MetaTemplateName",
+          "documentation":"<p>The name of the template.</p>"
+        },
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID assigned to the template by Meta.</p>"
+        },
+        "templateStatus":{
+          "shape":"MetaTemplateStatus",
+          "documentation":"<p>The current status of the template (for example, APPROVED, PENDING, or REJECTED).</p>"
+        },
+        "templateQualityScore":{
+          "shape":"MetaTemplateQualityScore",
+          "documentation":"<p>The quality score assigned to the template by Meta.</p>"
+        },
+        "templateLanguage":{
+          "shape":"MetaTemplateLanguage",
+          "documentation":"<p>The language code of the template (for example, en_US).</p>"
+        },
+        "templateCategory":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The category of the template (for example, UTILITY or MARKETING).</p>"
+        }
+      },
+      "documentation":"<p>Provides a summary of a WhatsApp message template's key attributes.</p>"
+    },
+    "TemplateSummaryList":{
+      "type":"list",
+      "member":{"shape":"TemplateSummary"}
+    },
     "ThrottledRequestException":{
       "type":"structure",
       "members":{
@@ -999,6 +1795,36 @@
         }
       }
     },
+    "UpdateWhatsAppMessageTemplateInput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "metaTemplateId"
+      ],
+      "members":{
+        "id":{
+          "shape":"LinkedWhatsAppBusinessAccountId",
+          "documentation":"<p>The ID of the WhatsApp Business Account associated with this template.</p>"
+        },
+        "metaTemplateId":{
+          "shape":"MetaTemplateId",
+          "documentation":"<p>The numeric ID of the template assigned by Meta.</p>"
+        },
+        "templateCategory":{
+          "shape":"MetaTemplateCategory",
+          "documentation":"<p>The new category for the template (for example, UTILITY or MARKETING).</p>"
+        },
+        "templateComponents":{
+          "shape":"MetaTemplateComponents",
+          "documentation":"<p>The updated components of the template as a JSON blob (maximum 3000 characters).</p>"
+        }
+      }
+    },
+    "UpdateWhatsAppMessageTemplateOutput":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
@@ -1152,6 +1978,10 @@
         "qualityRating":{
           "shape":"WhatsAppPhoneNumberQualityRating",
           "documentation":"<p>The quality rating of the phone number.</p>"
+        },
+        "dataLocalizationRegion":{
+          "shape":"IsoCountryCode",
+          "documentation":"<p>The geographic region where the WhatsApp phone number's data is stored and processed.</p>"
         }
       },
       "documentation":"<p>The details of your WhatsApp phone number.</p>"
@@ -1215,6 +2045,10 @@
         "qualityRating":{
           "shape":"WhatsAppPhoneNumberQualityRating",
           "documentation":"<p>The quality rating of the phone number. This is from Meta.</p>"
+        },
+        "dataLocalizationRegion":{
+          "shape":"IsoCountryCode",
+          "documentation":"<p>The geographic region where the WhatsApp phone number's data is stored and processed.</p>"
         }
       },
       "documentation":"<p>The details of a linked phone number.</p>"
@@ -1256,6 +2090,10 @@
         "accessToken":{
           "shape":"WhatsAppSignupCallbackAccessTokenString",
           "documentation":"<p>The access token for your WhatsApp Business Account. The <code>accessToken</code> value is provided by Meta.</p>"
+        },
+        "callbackUrl":{
+          "shape":"WhatsAppSignupCallbackCallbackUrlString",
+          "documentation":"<p>The URL where WhatsApp will send callback notifications for this account.</p>"
         }
       },
       "documentation":"<p>Contains the <code>accessToken</code> provided by Meta during signup.</p>"
@@ -1265,6 +2103,11 @@
       "max":1000,
       "min":0
     },
+    "WhatsAppSignupCallbackCallbackUrlString":{
+      "type":"string",
+      "max":100,
+      "min":0
+    },
     "WhatsAppSignupCallbackResult":{
       "type":"structure",
       "members":{
@@ -1278,6 +2121,10 @@
         }
       },
       "documentation":"<p>Contains the results of WhatsAppSignupCallback.</p>"
+    },
+    "ZeroTapTermsAccepted":{
+      "type":"boolean",
+      "box":true
     }
   },
   "documentation":"<p> <i>Amazon Web Services End User Messaging Social</i>, also referred to as Social messaging, is a messaging service that enables application developers to incorporate WhatsApp into their existing workflows. The <i>Amazon Web Services End User Messaging Social API</i> provides information about the <i>Amazon Web Services End User Messaging Social API</i> resources, including supported HTTP methods, parameters, and schemas.</p> <p>The <i>Amazon Web Services End User Messaging Social API</i> provides programmatic access to options that are unique to the WhatsApp Business Platform.</p> <p>If you're new to the <i>Amazon Web Services End User Messaging Social API</i>, it's also helpful to review <a href=\"https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html\">What is Amazon Web Services End User Messaging Social</a> in the <i>Amazon Web Services End User Messaging Social User Guide</i>. The <i>Amazon Web Services End User Messaging Social User Guide</i> provides tutorials, code samples, and procedures that demonstrate how to use <i>Amazon Web Services End User Messaging Social API</i> features programmatically and how to integrate functionality into applications. The guide also provides key information, such as integration with other Amazon Web Services services, and the quotas that apply to use of the service.</p> <p> <b>Regional availability</b> </p> <p>The <i>Amazon Web Services End User Messaging Social API</i> is available across several Amazon Web Services Regions and it provides a dedicated endpoint for each of these Regions. For a list of all the Regions and endpoints where the API is currently available, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#pinpoint_region\">Amazon Web Services Service Endpoints</a> and <a href=\"https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html\">Amazon Web Services End User Messaging endpoints and quotas</a> in the Amazon Web Services General Reference. To learn more about Amazon Web Services Regions, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande-manage.html\">Managing Amazon Web Services Regions</a> in the Amazon Web Services General Reference.</p> <p>In each Region, Amazon Web Services maintains multiple Availability Zones. These Availability Zones are physically isolated from each other, but are united by private, low-latency, high-throughput, and highly redundant network connections. These Availability Zones enable us to provide very high levels of availability and redundancy, while also minimizing latency. To learn more about the number of Availability Zones that are available in each Region, see <a href=\"https://aws.amazon.com/about-aws/global-infrastructure/\">Amazon Web Services Global Infrastructure.</a> </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sqs/2012-11-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sqs/2012-11-05/service-2.json 2.31.35-1/awscli/botocore/data/sqs/2012-11-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/sqs/2012-11-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sqs/2012-11-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,8 +2,7 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2012-11-05",
-    "awsQueryCompatible":{
-    },
+    "awsQueryCompatible":{},
     "endpointPrefix":"sqs",
     "jsonVersion":"1.0",
     "protocol":"json",
@@ -108,7 +107,7 @@
         {"shape":"UnsupportedOperation"},
         {"shape":"InvalidSecurity"}
       ],
-      "documentation":"<p>Creates a new standard or FIFO queue. You can pass one or more attributes in the request. Keep the following in mind:</p> <ul> <li> <p>If you don't specify the <code>FifoQueue</code> attribute, Amazon SQS creates a standard queue.</p> <note> <p>You can't change the queue type after you create it and you can't convert an existing standard queue into a FIFO queue. You must either create a new FIFO queue for your application or delete your existing standard queue and recreate it as a FIFO queue. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html#FIFO-queues-moving\">Moving From a Standard Queue to a FIFO Queue</a> in the <i>Amazon SQS Developer Guide</i>. </p> </note> </li> <li> <p>If you don't provide a value for an attribute, the queue is created with the default value for the attribute.</p> </li> <li> <p>If you delete a queue, you must wait at least 60 seconds before creating a queue with the same name.</p> </li> </ul> <p>To successfully create a new queue, you must provide a queue name that adheres to the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/limits-queues.html\">limits related to queues</a> and is unique within the scope of your queues.</p> <note> <p>After you create a queue, you must wait at least one second after the queue is created to be able to use the queue.</p> </note> <p>To retrieve the URL of a queue, use the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html\"> <code>GetQueueUrl</code> </a> action. This action only requires the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html#API_CreateQueue_RequestSyntax\"> <code>QueueName</code> </a> parameter.</p> <p>When creating queues, keep the following points in mind:</p> <ul> <li> <p>If you specify the name of an existing queue and provide the exact same names and values for all its attributes, the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"> <code>CreateQueue</code> </a> action will return the URL of the existing queue instead of creating a new one.</p> </li> <li> <p>If you attempt to create a queue with a name that already exists but with different attribute names or values, the <code>CreateQueue</code> action will return an error. This ensures that existing queues are not inadvertently altered.</p> </li> </ul> <note> <p>Cross-account permissions don't apply to this action. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name\">Grant cross-account permissions to a role and a username</a> in the <i>Amazon SQS Developer Guide</i>.</p> </note>"
+      "documentation":"<p>Creates a new standard or FIFO queue. You can pass one or more attributes in the request. Keep the following in mind:</p> <ul> <li> <p>If you don't specify the <code>FifoQueue</code> attribute, Amazon SQS creates a standard queue.</p> <note> <p>You can't change the queue type after you create it and you can't convert an existing standard queue into a FIFO queue. You must either create a new FIFO queue for your application or delete your existing standard queue and recreate it as a FIFO queue. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html#FIFO-queues-moving\">Moving From a standard queue to a FIFO queue</a> in the <i>Amazon SQS Developer Guide</i>. </p> </note> </li> <li> <p>If you don't provide a value for an attribute, the queue is created with the default value for the attribute.</p> </li> <li> <p>If you delete a queue, you must wait at least 60 seconds before creating a queue with the same name.</p> </li> </ul> <p>To successfully create a new queue, you must provide a queue name that adheres to the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/limits-queues.html\">limits related to queues</a> and is unique within the scope of your queues.</p> <note> <p>After you create a queue, you must wait at least one second after the queue is created to be able to use the queue.</p> </note> <p>To retrieve the URL of a queue, use the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html\"> <code>GetQueueUrl</code> </a> action. This action only requires the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html#API_CreateQueue_RequestSyntax\"> <code>QueueName</code> </a> parameter.</p> <p>When creating queues, keep the following points in mind:</p> <ul> <li> <p>If you specify the name of an existing queue and provide the exact same names and values for all its attributes, the <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"> <code>CreateQueue</code> </a> action will return the URL of the existing queue instead of creating a new one.</p> </li> <li> <p>If you attempt to create a queue with a name that already exists but with different attribute names or values, the <code>CreateQueue</code> action will return an error. This ensures that existing queues are not inadvertently altered.</p> </li> </ul> <note> <p>Cross-account permissions don't apply to this action. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name\">Grant cross-account permissions to a role and a username</a> in the <i>Amazon SQS Developer Guide</i>.</p> </note>"
     },
     "DeleteMessage":{
       "name":"DeleteMessage",
@@ -348,7 +347,7 @@
         {"shape":"KmsInvalidKeyUsage"},
         {"shape":"InvalidAddress"}
       ],
-      "documentation":"<p>Delivers a message to the specified queue.</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with <code>U+FFFD</code> before storing the message in the queue, as long as the message body contains at least one valid character.</p> </important>"
+      "documentation":"<p>Delivers a message to the specified queue.</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>If a message contains characters outside the allowed set, Amazon SQS rejects the message and returns an InvalidMessageContents error. Ensure that your message body includes only valid characters to avoid this exception.</p> </important>"
     },
     "SendMessageBatch":{
       "name":"SendMessageBatch",
@@ -377,7 +376,7 @@
         {"shape":"KmsInvalidKeyUsage"},
         {"shape":"InvalidAddress"}
       ],
-      "documentation":"<p>You can use <code>SendMessageBatch</code> to send up to 10 messages to the specified queue by assigning either identical or different values to each message (or by not assigning values at all). This is a batch version of <code> <a>SendMessage</a>.</code> For a FIFO queue, multiple messages within a single batch are enqueued in the order they are sent.</p> <p>The result of sending each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of <code>200</code>.</p> <p>The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 256 KiB (262,144 bytes).</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with <code>U+FFFD</code> before storing the message in the queue, as long as the message body contains at least one valid character.</p> </important> <p>If you don't specify the <code>DelaySeconds</code> parameter for an entry, Amazon SQS uses the default value for the queue.</p>"
+      "documentation":"<p>You can use <code>SendMessageBatch</code> to send up to 10 messages to the specified queue by assigning either identical or different values to each message (or by not assigning values at all). This is a batch version of <code> <a>SendMessage</a>.</code> For a FIFO queue, multiple messages within a single batch are enqueued in the order they are sent.</p> <p>The result of sending each message is reported individually in the response. Because the batch request can result in a combination of successful and unsuccessful actions, you should check for batch errors even when the call returns an HTTP status code of <code>200</code>.</p> <p>The maximum allowed individual message size and the maximum total payload size (the sum of the individual lengths of all of the batched messages) are both 1 MiB 1,048,576 bytes.</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>If a message contains characters outside the allowed set, Amazon SQS rejects the message and returns an InvalidMessageContents error. Ensure that your message body includes only valid characters to avoid this exception.</p> </important> <p>If you don't specify the <code>DelaySeconds</code> parameter for an entry, Amazon SQS uses the default value for the queue.</p>"
     },
     "SetQueueAttributes":{
       "name":"SetQueueAttributes",
@@ -680,7 +679,7 @@
         },
         "Attributes":{
           "shape":"QueueAttributeMap",
-          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>CreateQueue</code> action uses:</p> <ul> <li> <p> <code>DelaySeconds</code> – The length of time, in seconds, for which the delivery of all messages in the queue is delayed. Valid values: An integer from 0 to 900 seconds (15 minutes). Default: 0. </p> </li> <li> <p> <code>MaximumMessageSize</code> – The limit of how many bytes a message can contain before Amazon SQS rejects it. Valid values: An integer from 1,024 bytes (1 KiB) to 262,144 bytes (256 KiB). Default: 262,144 (256 KiB). </p> </li> <li> <p> <code>MessageRetentionPeriod</code> – The length of time, in seconds, for which Amazon SQS retains a message. Valid values: An integer from 60 seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600 (4 days). When you change a queue's attributes, the change can take up to 60 seconds for most of the attributes to propagate throughout the Amazon SQS system. Changes made to the <code>MessageRetentionPeriod</code> attribute can take up to 15 minutes and will impact existing messages in the queue potentially causing them to be expired and deleted if the <code>MessageRetentionPeriod</code> is reduced below the age of existing messages.</p> </li> <li> <p> <code>Policy</code> – The queue's policy. A valid Amazon Web Services policy. For more information about policy structure, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html\">Overview of Amazon Web Services IAM Policies</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <code>ReceiveMessageWaitTimeSeconds</code> – The length of time, in seconds, for which a <code> <a>ReceiveMessage</a> </code> action waits for a message to arrive. Valid values: An integer from 0 to 20 (seconds). Default: 0. </p> </li> <li> <p> <code>VisibilityTimeout</code> – The visibility timeout for the queue, in seconds. Valid values: An integer from 0 to 43,200 (12 hours). Default: 30. For more information about the visibility timeout, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">dead-letter queues:</a> </p> <ul> <li> <p> <code>RedrivePolicy</code> – The string that includes the parameters for the dead-letter queue functionality of the source queue as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>deadLetterTargetArn</code> – The Amazon Resource Name (ARN) of the dead-letter queue to which Amazon SQS moves messages after the value of <code>maxReceiveCount</code> is exceeded.</p> </li> <li> <p> <code>maxReceiveCount</code> – The number of times a message is delivered to the source queue before being moved to the dead-letter queue. Default: 10. When the <code>ReceiveCount</code> for a message exceeds the <code>maxReceiveCount</code> for a queue, Amazon SQS moves the message to the dead-letter-queue.</p> </li> </ul> </li> <li> <p> <code>RedriveAllowPolicy</code> – The string that includes the parameters for the permissions for the dead-letter queue redrive permission and which source queues can specify dead-letter queues as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>redrivePermission</code> – The permission type that defines which source queues can specify the current queue as the dead-letter queue. Valid values are:</p> <ul> <li> <p> <code>allowAll</code> – (Default) Any source queues in this Amazon Web Services account in the same Region can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>denyAll</code> – No source queues can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>byQueue</code> – Only queues specified by the <code>sourceQueueArns</code> parameter can specify this queue as the dead-letter queue.</p> </li> </ul> </li> <li> <p> <code>sourceQueueArns</code> – The Amazon Resource Names (ARN)s of the source queues that can specify this queue as the dead-letter queue and redrive messages. You can specify this parameter only when the <code>redrivePermission</code> parameter is set to <code>byQueue</code>. You can specify up to 10 source queue ARNs. To allow more than 10 source queues to specify dead-letter queues, set the <code>redrivePermission</code> parameter to <code>allowAll</code>.</p> </li> </ul> </li> </ul> <note> <p>The dead-letter queue of a FIFO queue must also be a FIFO queue. Similarly, the dead-letter queue of a standard queue must also be a standard queue.</p> </note> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SQS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms\">Key Terms</a>. While the alias of the Amazon Web Services managed CMK for Amazon SQS is always <code>alias/aws/sqs</code>, the alias of a custom CMK can, for example, be <code>alias/<i>MyAlias</i> </code>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>KmsDataKeyReusePeriodSeconds</code> – The length of time, in seconds, for which Amazon SQS can reuse a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys\">data key</a> to encrypt or decrypt messages before calling KMS again. An integer representing seconds, between 60 seconds (1 minute) and 86,400 seconds (24 hours). Default: 300 (5 minutes). A shorter time period provides better security but results in more calls to KMS which might incur charges after Free Tier. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work\">How Does the Data Key Reuse Period Work?</a> </p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">FIFO (first-in-first-out) queues</a>:</p> <ul> <li> <p> <code>FifoQueue</code> – Designates a queue as FIFO. Valid values are <code>true</code> and <code>false</code>. If you don't specify the <code>FifoQueue</code> attribute, Amazon SQS creates a standard queue. You can provide this attribute only during queue creation. You can't change it for an existing queue. When you set this attribute, you must also provide the <code>MessageGroupId</code> for your messages explicitly.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html\">FIFO queue logic</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication. Valid values are <code>true</code> and <code>false</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html\">Exactly-once processing</a> in the <i>Amazon SQS Developer Guide</i>. Note the following: </p> <ul> <li> <p>Every message must have a unique <code>MessageDeduplicationId</code>.</p> <ul> <li> <p>You may provide a <code>MessageDeduplicationId</code> explicitly.</p> </li> <li> <p>If you aren't able to provide a <code>MessageDeduplicationId</code> and you enable <code>ContentBasedDeduplication</code> for your queue, Amazon SQS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message). </p> </li> <li> <p>If you don't provide a <code>MessageDeduplicationId</code> and the queue doesn't have <code>ContentBasedDeduplication</code> set, the action fails with an error.</p> </li> <li> <p>If the queue has <code>ContentBasedDeduplication</code> set, your <code>MessageDeduplicationId</code> overrides the generated one.</p> </li> </ul> </li> <li> <p>When <code>ContentBasedDeduplication</code> is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.</p> </li> <li> <p>If you send one message with <code>ContentBasedDeduplication</code> enabled and then another message with a <code>MessageDeduplicationId</code> that is the same as the one generated for the first <code>MessageDeduplicationId</code>, the two messages are treated as duplicates and only one copy of the message is delivered. </p> </li> </ul> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\">high throughput for FIFO queues</a>:</p> <ul> <li> <p> <code>DeduplicationScope</code> – Specifies whether message deduplication occurs at the message group or queue level. Valid values are <code>messageGroup</code> and <code>queue</code>.</p> </li> <li> <p> <code>FifoThroughputLimit</code> – Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group. Valid values are <code>perQueue</code> and <code>perMessageGroupId</code>. The <code>perMessageGroupId</code> value is allowed only when the value for <code>DeduplicationScope</code> is <code>messageGroup</code>.</p> </li> </ul> <p>To enable high throughput for FIFO queues, do the following:</p> <ul> <li> <p>Set <code>DeduplicationScope</code> to <code>messageGroup</code>.</p> </li> <li> <p>Set <code>FifoThroughputLimit</code> to <code>perMessageGroupId</code>.</p> </li> </ul> <p>If you set these attributes to anything other than the values shown for enabling high throughput, normal throughput is in effect and deduplication occurs as specified.</p> <p>For information on throughput quotas, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html\">Quotas related to messages</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
+          "documentation":"<p>A map of attributes with their corresponding values.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>CreateQueue</code> action uses:</p> <ul> <li> <p> <code>DelaySeconds</code> – The length of time, in seconds, for which the delivery of all messages in the queue is delayed. Valid values: An integer from 0 to 900 seconds (15 minutes). Default: 0. </p> </li> <li> <p> <code>MaximumMessageSize</code> – The limit of how many bytes a message can contain before Amazon SQS rejects it. Valid values: An integer from 1,024 bytes (1 KiB) to 1,048,576 bytes (1 MiB). Default: 1,048,576 bytes (1 MiB). </p> </li> <li> <p> <code>MessageRetentionPeriod</code> – The length of time, in seconds, for which Amazon SQS retains a message. Valid values: An integer from 60 seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600 (4 days). When you change a queue's attributes, the change can take up to 60 seconds for most of the attributes to propagate throughout the Amazon SQS system. Changes made to the <code>MessageRetentionPeriod</code> attribute can take up to 15 minutes and will impact existing messages in the queue potentially causing them to be expired and deleted if the <code>MessageRetentionPeriod</code> is reduced below the age of existing messages.</p> </li> <li> <p> <code>Policy</code> – The queue's policy. A valid Amazon Web Services policy. For more information about policy structure, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html\">Overview of Amazon Web Services IAM Policies</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <code>ReceiveMessageWaitTimeSeconds</code> – The length of time, in seconds, for which a <code> <a>ReceiveMessage</a> </code> action waits for a message to arrive. Valid values: An integer from 0 to 20 (seconds). Default: 0. </p> </li> <li> <p> <code>VisibilityTimeout</code> – The visibility timeout for the queue, in seconds. Valid values: An integer from 0 to 43,200 (12 hours). Default: 30. For more information about the visibility timeout, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">dead-letter queues:</a> </p> <ul> <li> <p> <code>RedrivePolicy</code> – The string that includes the parameters for the dead-letter queue functionality of the source queue as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>deadLetterTargetArn</code> – The Amazon Resource Name (ARN) of the dead-letter queue to which Amazon SQS moves messages after the value of <code>maxReceiveCount</code> is exceeded.</p> </li> <li> <p> <code>maxReceiveCount</code> – The number of times a message is delivered to the source queue before being moved to the dead-letter queue. Default: 10. When the <code>ReceiveCount</code> for a message exceeds the <code>maxReceiveCount</code> for a queue, Amazon SQS moves the message to the dead-letter-queue.</p> </li> </ul> </li> <li> <p> <code>RedriveAllowPolicy</code> – The string that includes the parameters for the permissions for the dead-letter queue redrive permission and which source queues can specify dead-letter queues as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>redrivePermission</code> – The permission type that defines which source queues can specify the current queue as the dead-letter queue. Valid values are:</p> <ul> <li> <p> <code>allowAll</code> – (Default) Any source queues in this Amazon Web Services account in the same Region can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>denyAll</code> – No source queues can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>byQueue</code> – Only queues specified by the <code>sourceQueueArns</code> parameter can specify this queue as the dead-letter queue.</p> </li> </ul> </li> <li> <p> <code>sourceQueueArns</code> – The Amazon Resource Names (ARN)s of the source queues that can specify this queue as the dead-letter queue and redrive messages. You can specify this parameter only when the <code>redrivePermission</code> parameter is set to <code>byQueue</code>. You can specify up to 10 source queue ARNs. To allow more than 10 source queues to specify dead-letter queues, set the <code>redrivePermission</code> parameter to <code>allowAll</code>.</p> </li> </ul> </li> </ul> <note> <p>The dead-letter queue of a FIFO queue must also be a FIFO queue. Similarly, the dead-letter queue of a standard queue must also be a standard queue.</p> </note> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SQS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms\">Key Terms</a>. While the alias of the Amazon Web Services managed CMK for Amazon SQS is always <code>alias/aws/sqs</code>, the alias of a custom CMK can, for example, be <code>alias/<i>MyAlias</i> </code>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>KmsDataKeyReusePeriodSeconds</code> – The length of time, in seconds, for which Amazon SQS can reuse a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys\">data key</a> to encrypt or decrypt messages before calling KMS again. An integer representing seconds, between 60 seconds (1 minute) and 86,400 seconds (24 hours). Default: 300 (5 minutes). A shorter time period provides better security but results in more calls to KMS which might incur charges after Free Tier. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work\">How Does the Data Key Reuse Period Work?</a> </p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">FIFO (first-in-first-out) queues</a>:</p> <ul> <li> <p> <code>FifoQueue</code> – Designates a queue as FIFO. Valid values are <code>true</code> and <code>false</code>. If you don't specify the <code>FifoQueue</code> attribute, Amazon SQS creates a standard queue. You can provide this attribute only during queue creation. You can't change it for an existing queue. When you set this attribute, you must also provide the <code>MessageGroupId</code> for your messages explicitly.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html\">FIFO queue logic</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication. Valid values are <code>true</code> and <code>false</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html\">Exactly-once processing</a> in the <i>Amazon SQS Developer Guide</i>. Note the following: </p> <ul> <li> <p>Every message must have a unique <code>MessageDeduplicationId</code>.</p> <ul> <li> <p>You may provide a <code>MessageDeduplicationId</code> explicitly.</p> </li> <li> <p>If you aren't able to provide a <code>MessageDeduplicationId</code> and you enable <code>ContentBasedDeduplication</code> for your queue, Amazon SQS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message). </p> </li> <li> <p>If you don't provide a <code>MessageDeduplicationId</code> and the queue doesn't have <code>ContentBasedDeduplication</code> set, the action fails with an error.</p> </li> <li> <p>If the queue has <code>ContentBasedDeduplication</code> set, your <code>MessageDeduplicationId</code> overrides the generated one.</p> </li> </ul> </li> <li> <p>When <code>ContentBasedDeduplication</code> is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.</p> </li> <li> <p>If you send one message with <code>ContentBasedDeduplication</code> enabled and then another message with a <code>MessageDeduplicationId</code> that is the same as the one generated for the first <code>MessageDeduplicationId</code>, the two messages are treated as duplicates and only one copy of the message is delivered. </p> </li> </ul> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\">high throughput for FIFO queues</a>:</p> <ul> <li> <p> <code>DeduplicationScope</code> – Specifies whether message deduplication occurs at the message group or queue level. Valid values are <code>messageGroup</code> and <code>queue</code>.</p> </li> <li> <p> <code>FifoThroughputLimit</code> – Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group. Valid values are <code>perQueue</code> and <code>perMessageGroupId</code>. The <code>perMessageGroupId</code> value is allowed only when the value for <code>DeduplicationScope</code> is <code>messageGroup</code>.</p> </li> </ul> <p>To enable high throughput for FIFO queues, do the following:</p> <ul> <li> <p>Set <code>DeduplicationScope</code> to <code>messageGroup</code>.</p> </li> <li> <p>Set <code>FifoThroughputLimit</code> to <code>perMessageGroupId</code>.</p> </li> </ul> <p>If you set these attributes to anything other than the values shown for enabling high throughput, normal throughput is in effect and deduplication occurs as specified.</p> <p>For information on throughput quotas, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html\">Quotas related to messages</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         },
         "tags":{
           "shape":"TagMap",
@@ -896,8 +895,7 @@
     },
     "InvalidIdFormat":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified receipt handle isn't valid for the current version.</p>",
       "deprecated":true,
       "deprecatedMessage":"exception has been included in ReceiptHandleIsInvalid",
@@ -1199,7 +1197,7 @@
           "documentation":"<p>Amazon SQS supports the following logical data types: <code>String</code>, <code>Number</code>, and <code>Binary</code>. For the <code>Number</code> data type, you must use <code>StringValue</code>.</p> <p>You can also append custom labels. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes\">Amazon SQS Message Attributes</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         }
       },
-      "documentation":"<p>The user-specified message attribute value. For string data types, the <code>Value</code> attribute has the same restrictions on the content as the message body. For more information, see <code> <a>SendMessage</a>.</code> </p> <p> <code>Name</code>, <code>type</code>, <code>value</code> and the message body must not be empty or null. All parts of the message attribute, including <code>Name</code>, <code>Type</code>, and <code>Value</code>, are part of the message size restriction (256 KiB or 262,144 bytes).</p>"
+      "documentation":"<p>The user-specified message attribute value. For string data types, the <code>Value</code> attribute has the same restrictions on the content as the message body. For more information, see <code> <a>SendMessage</a>.</code> </p> <p> <code>Name</code>, <code>type</code>, <code>value</code> and the message body must not be empty or null. All parts of the message attribute, including <code>Name</code>, <code>Type</code>, and <code>Value</code>, are part of the message size restriction (1 MiB or 1,048,576 bytes).</p>"
     },
     "MessageBodyAttributeMap":{
       "type":"map",
@@ -1220,8 +1218,7 @@
     },
     "MessageNotInflight":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified message isn't in flight.</p>",
       "exception":true
     },
@@ -1393,13 +1390,13 @@
         },
         "AttributeNames":{
           "shape":"AttributeNameList",
-          "documentation":"<important> <p>This parameter has been discontinued but will be supported for backward compatibility. To provide attribute names, you are encouraged to use <code>MessageSystemAttributeNames</code>. </p> </important> <p>A list of attributes that need to be returned along with each message. These attributes include:</p> <ul> <li> <p> <code>All</code> – Returns all values.</p> </li> <li> <p> <code>ApproximateFirstReceiveTimestamp</code> – Returns the time the message was first received from the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>ApproximateReceiveCount</code> – Returns the number of times a message has been received across all queues but not deleted.</p> </li> <li> <p> <code>AWSTraceHeader</code> – Returns the X-Ray trace header string. </p> </li> <li> <p> <code>SenderId</code> </p> <ul> <li> <p>For a user, returns the user ID, for example <code>ABCDEFGHI1JKLMNOPQ23R</code>.</p> </li> <li> <p>For an IAM role, returns the IAM role ID, for example <code>ABCDE1F2GH3I4JK5LMNOP:i-a123b456</code>.</p> </li> </ul> </li> <li> <p> <code>SentTimestamp</code> – Returns the time the message was sent to the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> <li> <p> <code>MessageDeduplicationId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action.</p> </li> <li> <p> <code>MessageGroupId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action. Messages with the same <code>MessageGroupId</code> are returned in sequence.</p> </li> <li> <p> <code>SequenceNumber</code> – Returns the value provided by Amazon SQS.</p> </li> </ul>",
+          "documentation":"<important> <p>This parameter has been discontinued but will be supported for backward compatibility. To provide attribute names, you are encouraged to use <code>MessageSystemAttributeNames</code>. </p> </important> <p>A list of attributes that need to be returned along with each message. These attributes include:</p> <ul> <li> <p> <code>All</code> – Returns all values.</p> </li> <li> <p> <code>ApproximateFirstReceiveTimestamp</code> – Returns the time the message was first received from the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>ApproximateReceiveCount</code> – Returns the number of times a message has been received across all queues but not deleted.</p> </li> <li> <p> <code>AWSTraceHeader</code> – Returns the X-Ray trace header string. </p> </li> <li> <p> <code>SenderId</code> </p> <ul> <li> <p>For a user, returns the user ID, for example <code>ABCDEFGHI1JKLMNOPQ23R</code>.</p> </li> <li> <p>For an IAM role, returns the IAM role ID, for example <code>ABCDE1F2GH3I4JK5LMNOP:i-a123b456</code>.</p> </li> </ul> </li> <li> <p> <code>SentTimestamp</code> – Returns the time the message was sent to the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> <li> <p> <code>MessageDeduplicationId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action.</p> </li> <li> <p> <code>MessageGroupId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action. </p> </li> <li> <p> <code>SequenceNumber</code> – Returns the value provided by Amazon SQS.</p> </li> </ul>",
           "deprecated":true,
           "deprecatedMessage":"AttributeNames has been replaced by MessageSystemAttributeNames"
         },
         "MessageSystemAttributeNames":{
           "shape":"MessageSystemAttributeList",
-          "documentation":"<p>A list of attributes that need to be returned along with each message. These attributes include:</p> <ul> <li> <p> <code>All</code> – Returns all values.</p> </li> <li> <p> <code>ApproximateFirstReceiveTimestamp</code> – Returns the time the message was first received from the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>ApproximateReceiveCount</code> – Returns the number of times a message has been received across all queues but not deleted.</p> </li> <li> <p> <code>AWSTraceHeader</code> – Returns the X-Ray trace header string. </p> </li> <li> <p> <code>SenderId</code> </p> <ul> <li> <p>For a user, returns the user ID, for example <code>ABCDEFGHI1JKLMNOPQ23R</code>.</p> </li> <li> <p>For an IAM role, returns the IAM role ID, for example <code>ABCDE1F2GH3I4JK5LMNOP:i-a123b456</code>.</p> </li> </ul> </li> <li> <p> <code>SentTimestamp</code> – Returns the time the message was sent to the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> <li> <p> <code>MessageDeduplicationId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action.</p> </li> <li> <p> <code>MessageGroupId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action. Messages with the same <code>MessageGroupId</code> are returned in sequence.</p> </li> <li> <p> <code>SequenceNumber</code> – Returns the value provided by Amazon SQS.</p> </li> </ul>"
+          "documentation":"<p>A list of attributes that need to be returned along with each message. These attributes include:</p> <ul> <li> <p> <code>All</code> – Returns all values.</p> </li> <li> <p> <code>ApproximateFirstReceiveTimestamp</code> – Returns the time the message was first received from the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>ApproximateReceiveCount</code> – Returns the number of times a message has been received across all queues but not deleted.</p> </li> <li> <p> <code>AWSTraceHeader</code> – Returns the X-Ray trace header string. </p> </li> <li> <p> <code>SenderId</code> </p> <ul> <li> <p>For a user, returns the user ID, for example <code>ABCDEFGHI1JKLMNOPQ23R</code>.</p> </li> <li> <p>For an IAM role, returns the IAM role ID, for example <code>ABCDE1F2GH3I4JK5LMNOP:i-a123b456</code>.</p> </li> </ul> </li> <li> <p> <code>SentTimestamp</code> – Returns the time the message was sent to the queue (<a href=\"http://en.wikipedia.org/wiki/Unix_time\">epoch time</a> in milliseconds).</p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> <li> <p> <code>MessageDeduplicationId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action.</p> </li> <li> <p> <code>MessageGroupId</code> – Returns the value provided by the producer that calls the <code> <a>SendMessage</a> </code> action.</p> </li> <li> <p> <code>SequenceNumber</code> – Returns the value provided by Amazon SQS.</p> </li> </ul>"
         },
         "MessageAttributeNames":{
           "shape":"MessageAttributeNameList",
@@ -1419,7 +1416,7 @@
         },
         "ReceiveRequestAttemptId":{
           "shape":"String",
-          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) queues.</p> <p>The token used for deduplication of <code>ReceiveMessage</code> calls. If a networking issue occurs after a <code>ReceiveMessage</code> action, and instead of a response you receive a generic error, it is possible to retry the same action with an identical <code>ReceiveRequestAttemptId</code> to retrieve the same set of messages, even if their visibility timeout has not yet expired.</p> <ul> <li> <p>You can use <code>ReceiveRequestAttemptId</code> only for 5 minutes after a <code>ReceiveMessage</code> action.</p> </li> <li> <p>When you set <code>FifoQueue</code>, a caller of the <code>ReceiveMessage</code> action can provide a <code>ReceiveRequestAttemptId</code> explicitly.</p> </li> <li> <p>It is possible to retry the <code>ReceiveMessage</code> action with the same <code>ReceiveRequestAttemptId</code> if none of the messages have been modified (deleted or had their visibility changes).</p> </li> <li> <p>During a visibility timeout, subsequent calls with the same <code>ReceiveRequestAttemptId</code> return the same messages and receipt handles. If a retry occurs within the deduplication interval, it resets the visibility timeout. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> <important> <p>If a caller of the <code>ReceiveMessage</code> action still processes messages when the visibility timeout expires and messages become visible, another worker consuming from the same queue can receive the same messages and therefore process duplicates. Also, if a consumer whose message processing time is longer than the visibility timeout tries to delete the processed messages, the action fails with an error.</p> <p>To mitigate this effect, ensure that your application observes a safe threshold before the visibility timeout expires and extend the visibility timeout as necessary.</p> </important> </li> <li> <p>While messages with a particular <code>MessageGroupId</code> are invisible, no more messages belonging to the same <code>MessageGroupId</code> are returned until the visibility timeout expires. You can still receive messages with another <code>MessageGroupId</code> as long as it is also visible.</p> </li> <li> <p>If a caller of <code>ReceiveMessage</code> can't track the <code>ReceiveRequestAttemptId</code>, no retries work until the original visibility timeout expires. As a result, delays might occur but the messages in the queue remain in a strict order.</p> </li> </ul> <p>The maximum length of <code>ReceiveRequestAttemptId</code> is 128 characters. <code>ReceiveRequestAttemptId</code> can contain alphanumeric characters (<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>) and punctuation (<code>!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~</code>).</p> <p>For best practices of using <code>ReceiveRequestAttemptId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-receiverequestattemptid-request-parameter.html\">Using the ReceiveRequestAttemptId Request Parameter</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
+          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) queues.</p> <p>The token used for deduplication of <code>ReceiveMessage</code> calls. If a networking issue occurs after a <code>ReceiveMessage</code> action, and instead of a response you receive a generic error, it is possible to retry the same action with an identical <code>ReceiveRequestAttemptId</code> to retrieve the same set of messages, even if their visibility timeout has not yet expired.</p> <ul> <li> <p>You can use <code>ReceiveRequestAttemptId</code> only for 5 minutes after a <code>ReceiveMessage</code> action.</p> </li> <li> <p>When you set <code>FifoQueue</code>, a caller of the <code>ReceiveMessage</code> action can provide a <code>ReceiveRequestAttemptId</code> explicitly.</p> </li> <li> <p>It is possible to retry the <code>ReceiveMessage</code> action with the same <code>ReceiveRequestAttemptId</code> if none of the messages have been modified (deleted or had their visibility changes).</p> </li> <li> <p>During a visibility timeout, subsequent calls with the same <code>ReceiveRequestAttemptId</code> return the same messages and receipt handles. If a retry occurs within the deduplication interval, it resets the visibility timeout. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> <important> <p>If a caller of the <code>ReceiveMessage</code> action still processes messages when the visibility timeout expires and messages become visible, another worker consuming from the same queue can receive the same messages and therefore process duplicates. Also, if a consumer whose message processing time is longer than the visibility timeout tries to delete the processed messages, the action fails with an error.</p> <p>To mitigate this effect, ensure that your application observes a safe threshold before the visibility timeout expires and extend the visibility timeout as necessary.</p> </important> </li> <li> <p>While messages with a particular <code>MessageGroupId</code> are invisible, no more messages belonging to the same <code>MessageGroupId</code> are returned until the visibility timeout expires. You can still receive messages with another <code>MessageGroupId</code> from your FIFO queue as long as they are visible.</p> </li> <li> <p>If a caller of <code>ReceiveMessage</code> can't track the <code>ReceiveRequestAttemptId</code>, no retries work until the original visibility timeout expires. As a result, delays might occur but the messages in the queue remain in a strict order.</p> </li> </ul> <p>The maximum length of <code>ReceiveRequestAttemptId</code> is 128 characters. <code>ReceiveRequestAttemptId</code> can contain alphanumeric characters (<code>a-z</code>, <code>A-Z</code>, <code>0-9</code>) and punctuation (<code>!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~</code>).</p> <p>For best practices of using <code>ReceiveRequestAttemptId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-receiverequestattemptid-request-parameter.html\">Using the ReceiveRequestAttemptId Request Parameter</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>Retrieves one or more messages from a specified queue.</p>"
@@ -1519,7 +1516,7 @@
         },
         "MessageGroupId":{
           "shape":"String",
-          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) queues.</p> <p>The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the queue, but the session data of each user is processed in a FIFO fashion.</p> <ul> <li> <p>You must associate a non-empty <code>MessageGroupId</code> with a message. If you don't provide a <code>MessageGroupId</code>, the action fails.</p> </li> <li> <p> <code>ReceiveMessage</code> might return messages with multiple <code>MessageGroupId</code> values. For each <code>MessageGroupId</code>, the messages are sorted by time sent. The caller can't specify a <code>MessageGroupId</code>.</p> </li> </ul> <p>The length of <code>MessageGroupId</code> is 128 characters. Valid values: alphanumeric characters and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p>For best practices of using <code>MessageGroupId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html\">Using the MessageGroupId Property</a> in the <i>Amazon SQS Developer Guide</i>.</p> <important> <p> <code>MessageGroupId</code> is required for FIFO queues. You can't use it for Standard queues.</p> </important>"
+          "documentation":"<p> <code>MessageGroupId</code> is an attribute used in Amazon SQS FIFO (First-In-First-Out) and standard queues. In FIFO queues, <code>MessageGroupId</code> organizes messages into distinct groups. Messages within the same message group are always processed one at a time, in strict order, ensuring that no two messages from the same group are processed simultaneously. In standard queues, using <code>MessageGroupId</code> enables fair queues. It is used to identify the tenant a message belongs to, helping maintain consistent message dwell time across all tenants during noisy neighbor events. Unlike FIFO queues, messages with the same <code>MessageGroupId</code> can be processed in parallel, maintaining the high throughput of standard queues.</p> <ul> <li> <p> <b>FIFO queues:</b> <code>MessageGroupId</code> acts as the tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the queue, but the session data of each user is processed in a FIFO fashion.</p> <p>If you do not provide a <code>MessageGroupId</code> when sending a message to a FIFO queue, the action fails.</p> <p> <code>ReceiveMessage</code> might return messages with multiple <code>MessageGroupId</code> values. For each <code>MessageGroupId</code>, the messages are sorted by time sent.</p> </li> <li> <p> <b>Standard queues:</b>Use <code>MessageGroupId</code> in standard queues to enable fair queues. The <code>MessageGroupId</code> identifies the tenant a message belongs to. A tenant can be any entity that shares a queue with others, such as your customer, a client application, or a request type. When one tenant sends a disproportionately large volume of messages or has messages that require longer processing time, fair queues ensure other tenants' messages maintain low dwell time. This preserves quality of service for all tenants while maintaining the scalability and throughput of standard queues. We recommend that you include a <code>MessageGroupId</code> in all messages when using fair queues.</p> </li> </ul> <p>The length of <code>MessageGroupId</code> is 128 characters. Valid values: alphanumeric characters and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p>For best practices of using <code>MessageGroupId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html\">Using the MessageGroupId Property</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p>Contains the details of a single Amazon SQS message along with an <code>Id</code>.</p>"
@@ -1600,7 +1597,7 @@
         },
         "MessageBody":{
           "shape":"String",
-          "documentation":"<p>The message to send. The minimum size is one character. The maximum size is 256 KiB.</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>Amazon SQS does not throw an exception or completely reject the message if it contains invalid characters. Instead, it replaces those invalid characters with <code>U+FFFD</code> before storing the message in the queue, as long as the message body contains at least one valid character.</p> </important>"
+          "documentation":"<p>The message to send. The minimum size is one character. The maximum size is 1 MiB or 1,048,576 bytes</p> <important> <p>A message can include only XML, JSON, and unformatted text. The following Unicode characters are allowed. For more information, see the <a href=\"http://www.w3.org/TR/REC-xml/#charsets\">W3C specification for characters</a>.</p> <p> <code>#x9</code> | <code>#xA</code> | <code>#xD</code> | <code>#x20</code> to <code>#xD7FF</code> | <code>#xE000</code> to <code>#xFFFD</code> | <code>#x10000</code> to <code>#x10FFFF</code> </p> <p>If a message contains characters outside the allowed set, Amazon SQS rejects the message and returns an InvalidMessageContents error. Ensure that your message body includes only valid characters to avoid this exception.</p> </important>"
         },
         "DelaySeconds":{
           "shape":"NullableInteger",
@@ -1620,7 +1617,7 @@
         },
         "MessageGroupId":{
           "shape":"String",
-          "documentation":"<p>This parameter applies only to FIFO (first-in-first-out) queues.</p> <p>The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the queue, but the session data of each user is processed in a FIFO fashion.</p> <ul> <li> <p>You must associate a non-empty <code>MessageGroupId</code> with a message. If you don't provide a <code>MessageGroupId</code>, the action fails.</p> </li> <li> <p> <code>ReceiveMessage</code> might return messages with multiple <code>MessageGroupId</code> values. For each <code>MessageGroupId</code>, the messages are sorted by time sent. The caller can't specify a <code>MessageGroupId</code>.</p> </li> </ul> <p>The maximum length of <code>MessageGroupId</code> is 128 characters. Valid values: alphanumeric characters and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p>For best practices of using <code>MessageGroupId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html\">Using the MessageGroupId Property</a> in the <i>Amazon SQS Developer Guide</i>.</p> <important> <p> <code>MessageGroupId</code> is required for FIFO queues. You can't use it for Standard queues.</p> </important>"
+          "documentation":"<p> <code>MessageGroupId</code> is an attribute used in Amazon SQS FIFO (First-In-First-Out) and standard queues. In FIFO queues, <code>MessageGroupId</code> organizes messages into distinct groups. Messages within the same message group are always processed one at a time, in strict order, ensuring that no two messages from the same group are processed simultaneously. In standard queues, using <code>MessageGroupId</code> enables fair queues. It is used to identify the tenant a message belongs to, helping maintain consistent message dwell time across all tenants during noisy neighbor events. Unlike FIFO queues, messages with the same <code>MessageGroupId</code> can be processed in parallel, maintaining the high throughput of standard queues.</p> <ul> <li> <p> <b>FIFO queues:</b> <code>MessageGroupId</code> acts as the tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single queue, use <code>MessageGroupId</code> values (for example, session data for multiple users). In this scenario, multiple consumers can process the queue, but the session data of each user is processed in a FIFO fashion.</p> <p>If you do not provide a <code>MessageGroupId</code> when sending a message to a FIFO queue, the action fails.</p> <p> <code>ReceiveMessage</code> might return messages with multiple <code>MessageGroupId</code> values. For each <code>MessageGroupId</code>, the messages are sorted by time sent.</p> </li> <li> <p> <b>Standard queues:</b>Use <code>MessageGroupId</code> in standard queues to enable fair queues. The <code>MessageGroupId</code> identifies the tenant a message belongs to. A tenant can be any entity that shares a queue with others, such as your customer, a client application, or a request type. When one tenant sends a disproportionately large volume of messages or has messages that require longer processing time, fair queues ensure other tenants' messages maintain low dwell time. This preserves quality of service for all tenants while maintaining the scalability and throughput of standard queues. We recommend that you include a <code>MessageGroupId</code> in all messages when using fair queues.</p> </li> </ul> <p>The length of <code>MessageGroupId</code> is 128 characters. Valid values: alphanumeric characters and punctuation <code>(!\"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~)</code>.</p> <p>For best practices of using <code>MessageGroupId</code>, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagegroupid-property.html\">Using the MessageGroupId Property</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -1664,7 +1661,7 @@
         },
         "Attributes":{
           "shape":"QueueAttributeMap",
-          "documentation":"<p>A map of attributes to set.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>SetQueueAttributes</code> action uses:</p> <ul> <li> <p> <code>DelaySeconds</code> – The length of time, in seconds, for which the delivery of all messages in the queue is delayed. Valid values: An integer from 0 to 900 (15 minutes). Default: 0. </p> </li> <li> <p> <code>MaximumMessageSize</code> – The limit of how many bytes a message can contain before Amazon SQS rejects it. Valid values: An integer from 1,024 bytes (1 KiB) up to 262,144 bytes (256 KiB). Default: 262,144 (256 KiB). </p> </li> <li> <p> <code>MessageRetentionPeriod</code> – The length of time, in seconds, for which Amazon SQS retains a message. Valid values: An integer representing seconds, from 60 (1 minute) to 1,209,600 (14 days). Default: 345,600 (4 days). When you change a queue's attributes, the change can take up to 60 seconds for most of the attributes to propagate throughout the Amazon SQS system. Changes made to the <code>MessageRetentionPeriod</code> attribute can take up to 15 minutes and will impact existing messages in the queue potentially causing them to be expired and deleted if the <code>MessageRetentionPeriod</code> is reduced below the age of existing messages.</p> </li> <li> <p> <code>Policy</code> – The queue's policy. A valid Amazon Web Services policy. For more information about policy structure, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html\">Overview of Amazon Web Services IAM Policies</a> in the <i>Identity and Access Management User Guide</i>. </p> </li> <li> <p> <code>ReceiveMessageWaitTimeSeconds</code> – The length of time, in seconds, for which a <code> <a>ReceiveMessage</a> </code> action waits for a message to arrive. Valid values: An integer from 0 to 20 (seconds). Default: 0. </p> </li> <li> <p> <code>VisibilityTimeout</code> – The visibility timeout for the queue, in seconds. Valid values: An integer from 0 to 43,200 (12 hours). Default: 30. For more information about the visibility timeout, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">dead-letter queues:</a> </p> <ul> <li> <p> <code>RedrivePolicy</code> – The string that includes the parameters for the dead-letter queue functionality of the source queue as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>deadLetterTargetArn</code> – The Amazon Resource Name (ARN) of the dead-letter queue to which Amazon SQS moves messages after the value of <code>maxReceiveCount</code> is exceeded.</p> </li> <li> <p> <code>maxReceiveCount</code> – The number of times a message is delivered to the source queue before being moved to the dead-letter queue. Default: 10. When the <code>ReceiveCount</code> for a message exceeds the <code>maxReceiveCount</code> for a queue, Amazon SQS moves the message to the dead-letter-queue.</p> </li> </ul> </li> <li> <p> <code>RedriveAllowPolicy</code> – The string that includes the parameters for the permissions for the dead-letter queue redrive permission and which source queues can specify dead-letter queues as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>redrivePermission</code> – The permission type that defines which source queues can specify the current queue as the dead-letter queue. Valid values are:</p> <ul> <li> <p> <code>allowAll</code> – (Default) Any source queues in this Amazon Web Services account in the same Region can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>denyAll</code> – No source queues can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>byQueue</code> – Only queues specified by the <code>sourceQueueArns</code> parameter can specify this queue as the dead-letter queue.</p> </li> </ul> </li> <li> <p> <code>sourceQueueArns</code> – The Amazon Resource Names (ARN)s of the source queues that can specify this queue as the dead-letter queue and redrive messages. You can specify this parameter only when the <code>redrivePermission</code> parameter is set to <code>byQueue</code>. You can specify up to 10 source queue ARNs. To allow more than 10 source queues to specify dead-letter queues, set the <code>redrivePermission</code> parameter to <code>allowAll</code>.</p> </li> </ul> </li> </ul> <note> <p>The dead-letter queue of a FIFO queue must also be a FIFO queue. Similarly, the dead-letter queue of a standard queue must also be a standard queue.</p> </note> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SQS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms\">Key Terms</a>. While the alias of the AWS-managed CMK for Amazon SQS is always <code>alias/aws/sqs</code>, the alias of a custom CMK can, for example, be <code>alias/<i>MyAlias</i> </code>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>KmsDataKeyReusePeriodSeconds</code> – The length of time, in seconds, for which Amazon SQS can reuse a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys\">data key</a> to encrypt or decrypt messages before calling KMS again. An integer representing seconds, between 60 seconds (1 minute) and 86,400 seconds (24 hours). Default: 300 (5 minutes). A shorter time period provides better security but results in more calls to KMS which might incur charges after Free Tier. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work\">How Does the Data Key Reuse Period Work?</a>. </p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> </ul> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">FIFO (first-in-first-out) queues</a>:</p> <ul> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html\">Exactly-once processing</a> in the <i>Amazon SQS Developer Guide</i>. Note the following: </p> <ul> <li> <p>Every message must have a unique <code>MessageDeduplicationId</code>.</p> <ul> <li> <p>You may provide a <code>MessageDeduplicationId</code> explicitly.</p> </li> <li> <p>If you aren't able to provide a <code>MessageDeduplicationId</code> and you enable <code>ContentBasedDeduplication</code> for your queue, Amazon SQS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message). </p> </li> <li> <p>If you don't provide a <code>MessageDeduplicationId</code> and the queue doesn't have <code>ContentBasedDeduplication</code> set, the action fails with an error.</p> </li> <li> <p>If the queue has <code>ContentBasedDeduplication</code> set, your <code>MessageDeduplicationId</code> overrides the generated one.</p> </li> </ul> </li> <li> <p>When <code>ContentBasedDeduplication</code> is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.</p> </li> <li> <p>If you send one message with <code>ContentBasedDeduplication</code> enabled and then another message with a <code>MessageDeduplicationId</code> that is the same as the one generated for the first <code>MessageDeduplicationId</code>, the two messages are treated as duplicates and only one copy of the message is delivered. </p> </li> </ul> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\">high throughput for FIFO queues</a>:</p> <ul> <li> <p> <code>DeduplicationScope</code> – Specifies whether message deduplication occurs at the message group or queue level. Valid values are <code>messageGroup</code> and <code>queue</code>.</p> </li> <li> <p> <code>FifoThroughputLimit</code> – Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group. Valid values are <code>perQueue</code> and <code>perMessageGroupId</code>. The <code>perMessageGroupId</code> value is allowed only when the value for <code>DeduplicationScope</code> is <code>messageGroup</code>.</p> </li> </ul> <p>To enable high throughput for FIFO queues, do the following:</p> <ul> <li> <p>Set <code>DeduplicationScope</code> to <code>messageGroup</code>.</p> </li> <li> <p>Set <code>FifoThroughputLimit</code> to <code>perMessageGroupId</code>.</p> </li> </ul> <p>If you set these attributes to anything other than the values shown for enabling high throughput, normal throughput is in effect and deduplication occurs as specified.</p> <p>For information on throughput quotas, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html\">Quotas related to messages</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
+          "documentation":"<p>A map of attributes to set.</p> <p>The following lists the names, descriptions, and values of the special request parameters that the <code>SetQueueAttributes</code> action uses:</p> <ul> <li> <p> <code>DelaySeconds</code> – The length of time, in seconds, for which the delivery of all messages in the queue is delayed. Valid values: An integer from 0 to 900 (15 minutes). Default: 0. </p> </li> <li> <p> <code>MaximumMessageSize</code> – The limit of how many bytes a message can contain before Amazon SQS rejects it. Valid values: An integer from 1,024 bytes (1 KiB) up to 1,048,576 bytes (1 MiB). Default: 1,048,576 bytes (1 MiB). </p> </li> <li> <p> <code>MessageRetentionPeriod</code> – The length of time, in seconds, for which Amazon SQS retains a message. Valid values: An integer representing seconds, from 60 (1 minute) to 1,209,600 (14 days). Default: 345,600 (4 days). When you change a queue's attributes, the change can take up to 60 seconds for most of the attributes to propagate throughout the Amazon SQS system. Changes made to the <code>MessageRetentionPeriod</code> attribute can take up to 15 minutes and will impact existing messages in the queue potentially causing them to be expired and deleted if the <code>MessageRetentionPeriod</code> is reduced below the age of existing messages.</p> </li> <li> <p> <code>Policy</code> – The queue's policy. A valid Amazon Web Services policy. For more information about policy structure, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html\">Overview of Amazon Web Services IAM Policies</a> in the <i>Identity and Access Management User Guide</i>. </p> </li> <li> <p> <code>ReceiveMessageWaitTimeSeconds</code> – The length of time, in seconds, for which a <code> <a>ReceiveMessage</a> </code> action waits for a message to arrive. Valid values: An integer from 0 to 20 (seconds). Default: 0. </p> </li> <li> <p> <code>VisibilityTimeout</code> – The visibility timeout for the queue, in seconds. Valid values: An integer from 0 to 43,200 (12 hours). Default: 30. For more information about the visibility timeout, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html\">Visibility Timeout</a> in the <i>Amazon SQS Developer Guide</i>.</p> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">dead-letter queues:</a> </p> <ul> <li> <p> <code>RedrivePolicy</code> – The string that includes the parameters for the dead-letter queue functionality of the source queue as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>deadLetterTargetArn</code> – The Amazon Resource Name (ARN) of the dead-letter queue to which Amazon SQS moves messages after the value of <code>maxReceiveCount</code> is exceeded.</p> </li> <li> <p> <code>maxReceiveCount</code> – The number of times a message is delivered to the source queue before being moved to the dead-letter queue. Default: 10. When the <code>ReceiveCount</code> for a message exceeds the <code>maxReceiveCount</code> for a queue, Amazon SQS moves the message to the dead-letter-queue.</p> </li> </ul> </li> <li> <p> <code>RedriveAllowPolicy</code> – The string that includes the parameters for the permissions for the dead-letter queue redrive permission and which source queues can specify dead-letter queues as a JSON object. The parameters are as follows:</p> <ul> <li> <p> <code>redrivePermission</code> – The permission type that defines which source queues can specify the current queue as the dead-letter queue. Valid values are:</p> <ul> <li> <p> <code>allowAll</code> – (Default) Any source queues in this Amazon Web Services account in the same Region can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>denyAll</code> – No source queues can specify this queue as the dead-letter queue.</p> </li> <li> <p> <code>byQueue</code> – Only queues specified by the <code>sourceQueueArns</code> parameter can specify this queue as the dead-letter queue.</p> </li> </ul> </li> <li> <p> <code>sourceQueueArns</code> – The Amazon Resource Names (ARN)s of the source queues that can specify this queue as the dead-letter queue and redrive messages. You can specify this parameter only when the <code>redrivePermission</code> parameter is set to <code>byQueue</code>. You can specify up to 10 source queue ARNs. To allow more than 10 source queues to specify dead-letter queues, set the <code>redrivePermission</code> parameter to <code>allowAll</code>.</p> </li> </ul> </li> </ul> <note> <p>The dead-letter queue of a FIFO queue must also be a FIFO queue. Similarly, the dead-letter queue of a standard queue must also be a standard queue.</p> </note> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html\">server-side-encryption</a>:</p> <ul> <li> <p> <code>KmsMasterKeyId</code> – The ID of an Amazon Web Services managed customer master key (CMK) for Amazon SQS or a custom CMK. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms\">Key Terms</a>. While the alias of the AWS-managed CMK for Amazon SQS is always <code>alias/aws/sqs</code>, the alias of a custom CMK can, for example, be <code>alias/<i>MyAlias</i> </code>. For more examples, see <a href=\"https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters\">KeyId</a> in the <i>Key Management Service API Reference</i>. </p> </li> <li> <p> <code>KmsDataKeyReusePeriodSeconds</code> – The length of time, in seconds, for which Amazon SQS can reuse a <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys\">data key</a> to encrypt or decrypt messages before calling KMS again. An integer representing seconds, between 60 seconds (1 minute) and 86,400 seconds (24 hours). Default: 300 (5 minutes). A shorter time period provides better security but results in more calls to KMS which might incur charges after Free Tier. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work\">How Does the Data Key Reuse Period Work?</a>. </p> </li> <li> <p> <code>SqsManagedSseEnabled</code> – Enables server-side queue encryption using SQS owned encryption keys. Only one server-side encryption option is supported per queue (for example, <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html\">SSE-KMS</a> or <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html\">SSE-SQS</a>).</p> </li> </ul> <p>The following attribute applies only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html\">FIFO (first-in-first-out) queues</a>:</p> <ul> <li> <p> <code>ContentBasedDeduplication</code> – Enables content-based deduplication. For more information, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html\">Exactly-once processing</a> in the <i>Amazon SQS Developer Guide</i>. Note the following: </p> <ul> <li> <p>Every message must have a unique <code>MessageDeduplicationId</code>.</p> <ul> <li> <p>You may provide a <code>MessageDeduplicationId</code> explicitly.</p> </li> <li> <p>If you aren't able to provide a <code>MessageDeduplicationId</code> and you enable <code>ContentBasedDeduplication</code> for your queue, Amazon SQS uses a SHA-256 hash to generate the <code>MessageDeduplicationId</code> using the body of the message (but not the attributes of the message). </p> </li> <li> <p>If you don't provide a <code>MessageDeduplicationId</code> and the queue doesn't have <code>ContentBasedDeduplication</code> set, the action fails with an error.</p> </li> <li> <p>If the queue has <code>ContentBasedDeduplication</code> set, your <code>MessageDeduplicationId</code> overrides the generated one.</p> </li> </ul> </li> <li> <p>When <code>ContentBasedDeduplication</code> is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.</p> </li> <li> <p>If you send one message with <code>ContentBasedDeduplication</code> enabled and then another message with a <code>MessageDeduplicationId</code> that is the same as the one generated for the first <code>MessageDeduplicationId</code>, the two messages are treated as duplicates and only one copy of the message is delivered. </p> </li> </ul> </li> </ul> <p>The following attributes apply only to <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\">high throughput for FIFO queues</a>:</p> <ul> <li> <p> <code>DeduplicationScope</code> – Specifies whether message deduplication occurs at the message group or queue level. Valid values are <code>messageGroup</code> and <code>queue</code>.</p> </li> <li> <p> <code>FifoThroughputLimit</code> – Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group. Valid values are <code>perQueue</code> and <code>perMessageGroupId</code>. The <code>perMessageGroupId</code> value is allowed only when the value for <code>DeduplicationScope</code> is <code>messageGroup</code>.</p> </li> </ul> <p>To enable high throughput for FIFO queues, do the following:</p> <ul> <li> <p>Set <code>DeduplicationScope</code> to <code>messageGroup</code>.</p> </li> <li> <p>Set <code>FifoThroughputLimit</code> to <code>perMessageGroupId</code>.</p> </li> </ul> <p>If you set these attributes to anything other than the values shown for enabling high throughput, normal throughput is in effect and deduplication occurs as specified.</p> <p>For information on throughput quotas, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html\">Quotas related to messages</a> in the <i>Amazon SQS Developer Guide</i>.</p>"
         }
       },
       "documentation":"<p/>"
@@ -1766,5 +1763,5 @@
       }
     }
   },
-  "documentation":"<p>Welcome to the <i>Amazon SQS API Reference</i>.</p> <p>Amazon SQS is a reliable, highly-scalable hosted queue for storing messages as they travel between applications or microservices. Amazon SQS moves data between distributed application components and helps you decouple these components.</p> <p>For information on the permissions you need to use this API, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-authentication-and-access-control.html\">Identity and access management</a> in the <i>Amazon SQS Developer Guide.</i> </p> <p>You can use <a href=\"http://aws.amazon.com/tools/#sdk\">Amazon Web Services SDKs</a> to access Amazon SQS using your favorite programming language. The SDKs perform tasks such as the following automatically:</p> <ul> <li> <p>Cryptographically sign your service requests</p> </li> <li> <p>Retry requests</p> </li> <li> <p>Handle error responses</p> </li> </ul> <p> <b>Additional information</b> </p> <ul> <li> <p> <a href=\"http://aws.amazon.com/sqs/\">Amazon SQS Product Page</a> </p> </li> <li> <p> <i>Amazon SQS Developer Guide</i> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-making-api-requests.html\">Making API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes\">Amazon SQS Message Attributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">Amazon SQS Dead-Letter Queues</a> </p> </li> </ul> </li> <li> <p> <a href=\"http://docs.aws.amazon.com/cli/latest/reference/sqs/index.html\">Amazon SQS in the <i>Command Line Interface</i> </a> </p> </li> <li> <p> <i>Amazon Web Services General Reference</i> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region\">Regions and Endpoints</a> </p> </li> </ul> </li> </ul>"
+  "documentation":"<p>Welcome to the <i>Amazon SQS API Reference</i>.</p> <p>Amazon SQS is a reliable, highly-scalable hosted queue for storing messages as they travel between applications or microservices. Amazon SQS moves data between distributed application components and helps you decouple these components.</p> <p>For information on the permissions you need to use this API, see <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-authentication-and-access-control.html\">Identity and access management</a> in the <i>Amazon SQS Developer Guide.</i> </p> <p>You can use <a href=\"http://aws.amazon.com/tools/#sdk\">Amazon Web Services SDKs</a> to access Amazon SQS using your favorite programming language. The SDKs perform tasks such as the following automatically:</p> <ul> <li> <p>Cryptographically sign your service requests</p> </li> <li> <p>Retry requests</p> </li> <li> <p>Handle error responses</p> </li> </ul> <p> <b>Additional information</b> </p> <ul> <li> <p> <a href=\"http://aws.amazon.com/sqs/\">Amazon SQS Product Page</a> </p> </li> <li> <p> <i>Amazon SQS Developer Guide</i> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-making-api-requests.html\">Making API Requests</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-message-attributes\">Amazon SQS Message Attributes</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\">Amazon SQS Dead-Letter Queues</a> </p> </li> </ul> </li> <li> <p> <a href=\"https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/index.html\">Amazon SQS in the Command Line Interface</a> </p> </li> <li> <p> <i>Amazon Web Services General Reference</i> </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region\">Regions and Endpoints</a> </p> </li> </ul> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm/2014-11-06/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ssm/2014-11-06/service-2.json 2.31.35-1/awscli/botocore/data/ssm/2014-11-06/service-2.json
--- 2.23.6-1/awscli/botocore/data/ssm/2014-11-06/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm/2014-11-06/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,7 +157,9 @@
         {"shape":"InternalServerError"},
         {"shape":"InvalidDocumentContent"},
         {"shape":"DocumentLimitExceeded"},
-        {"shape":"InvalidDocumentSchemaVersion"}
+        {"shape":"InvalidDocumentSchemaVersion"},
+        {"shape":"TooManyUpdates"},
+        {"shape":"NoLongerSupportedException"}
       ],
       "documentation":"<p>Creates a Amazon Web Services Systems Manager (SSM document). An SSM document defines the actions that Systems Manager performs on your managed nodes. For more information about SSM documents, including information about supported schemas, features, and syntax, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html\">Amazon Web Services Systems Manager Documents</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
     },
@@ -286,7 +288,8 @@
         {"shape":"InternalServerError"},
         {"shape":"InvalidDocument"},
         {"shape":"InvalidDocumentOperation"},
-        {"shape":"AssociatedInstances"}
+        {"shape":"AssociatedInstances"},
+        {"shape":"TooManyUpdates"}
       ],
       "documentation":"<p>Deletes the Amazon Web Services Systems Manager document (SSM document) and all managed node associations to the document.</p> <p>Before you delete the document, we recommend that you use <a>DeleteAssociation</a> to disassociate all managed nodes that are associated with the document.</p>"
     },
@@ -435,7 +438,7 @@
         {"shape":"InvalidInstanceId"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Removes the server or virtual machine from the list of registered servers. You can reregister the node again at any time. If you don't plan to use Run Command on the server, we suggest uninstalling SSM Agent first.</p>"
+      "documentation":"<p>Removes the server or virtual machine from the list of registered servers.</p> <p>If you want to reregister an on-premises server, edge device, or VM, you must use a different Activation Code and Activation ID than used to register the machine previously. The Activation Code and Activation ID must not have already been used on the maximum number of activations specified when they were created. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-manager-deregister-hybrid-nodes.html\">Deregistering managed nodes in a hybrid and multicloud environment</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
     },
     "DeregisterPatchBaselineForPatchGroup":{
       "name":"DeregisterPatchBaselineForPatchGroup",
@@ -900,7 +903,7 @@
         {"shape":"InvalidFilterValue"},
         {"shape":"InvalidNextToken"}
       ],
-      "documentation":"<p>Lists the parameters in your Amazon Web Services account or the parameters shared with you when you enable the <a href=\"https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html#systemsmanager-DescribeParameters-request-Shared\">Shared</a> option.</p> <p>Request results are returned on a best-effort basis. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of <code>MaxResults</code>. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a <code>NextToken</code>. You can specify the <code>NextToken</code> in a subsequent call to get the next set of results.</p> <important> <p>If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, <code>DescribeParameters</code> retrieves whatever the original key alias was referencing.</p> </important>"
+      "documentation":"<p>Lists the parameters in your Amazon Web Services account or the parameters shared with you when you enable the <a href=\"https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html#systemsmanager-DescribeParameters-request-Shared\">Shared</a> option.</p> <p>Request results are returned on a best-effort basis. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of <code>MaxResults</code>. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a <code>NextToken</code>. You can specify the <code>NextToken</code> in a subsequent call to get the next set of results.</p> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p> <important> <p>If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, <code>DescribeParameters</code> retrieves whatever the original key alias was referencing.</p> </important>"
     },
     "DescribePatchBaselines":{
       "name":"DescribePatchBaselines",
@@ -987,6 +990,23 @@
       ],
       "documentation":"<p>Deletes the association between an OpsItem and a related item. For example, this API operation can delete an Incident Manager incident from an OpsItem. Incident Manager is a tool in Amazon Web Services Systems Manager.</p>"
     },
+    "GetAccessToken":{
+      "name":"GetAccessToken",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetAccessTokenRequest"},
+      "output":{"shape":"GetAccessTokenResponse"},
+      "errors":[
+        {"shape":"InternalServerError"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Returns a credentials set to be used with just-in-time node access.</p>"
+    },
     "GetAutomationExecution":{
       "name":"GetAutomationExecution",
       "http":{
@@ -1270,7 +1290,7 @@
         {"shape":"ParameterNotFound"},
         {"shape":"ParameterVersionNotFound"}
       ],
-      "documentation":"<p>Get information about a single parameter by specifying the parameter name.</p> <note> <p>To get information about more than one parameter at a time, use the <a>GetParameters</a> operation.</p> </note>"
+      "documentation":"<p>Get information about a single parameter by specifying the parameter name.</p> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p> <note> <p>To get information about more than one parameter at a time, use the <a>GetParameters</a> operation.</p> </note>"
     },
     "GetParameterHistory":{
       "name":"GetParameterHistory",
@@ -1286,7 +1306,7 @@
         {"shape":"InvalidNextToken"},
         {"shape":"InvalidKeyId"}
       ],
-      "documentation":"<p>Retrieves the history of all changes to a parameter.</p> <important> <p>If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, <code>GetParameterHistory</code> retrieves whatever the original key alias was referencing.</p> </important>"
+      "documentation":"<p>Retrieves the history of all changes to a parameter.</p> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p> <important> <p>If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, <code>GetParameterHistory</code> retrieves whatever the original key alias was referencing.</p> </important>"
     },
     "GetParameters":{
       "name":"GetParameters",
@@ -1300,7 +1320,7 @@
         {"shape":"InvalidKeyId"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Get information about one or more parameters by specifying multiple parameter names.</p> <note> <p>To get information about a single parameter, you can use the <a>GetParameter</a> operation instead.</p> </note>"
+      "documentation":"<p>Get information about one or more parameters by specifying multiple parameter names.</p> <note> <p>To get information about a single parameter, you can use the <a>GetParameter</a> operation instead.</p> </note> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p>"
     },
     "GetParametersByPath":{
       "name":"GetParametersByPath",
@@ -1318,7 +1338,7 @@
         {"shape":"InvalidKeyId"},
         {"shape":"InvalidNextToken"}
       ],
-      "documentation":"<p>Retrieve information about one or more parameters under a specified level in a hierarchy. </p> <p>Request results are returned on a best-effort basis. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of <code>MaxResults</code>. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a <code>NextToken</code>. You can specify the <code>NextToken</code> in a subsequent call to get the next set of results.</p>"
+      "documentation":"<p>Retrieve information about one or more parameters under a specified level in a hierarchy. </p> <p>Request results are returned on a best-effort basis. If you specify <code>MaxResults</code> in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of <code>MaxResults</code>. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a <code>NextToken</code>. You can specify the <code>NextToken</code> in a subsequent call to get the next set of results.</p> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p>"
     },
     "GetPatchBaseline":{
       "name":"GetPatchBaseline",
@@ -1392,7 +1412,7 @@
         {"shape":"ParameterVersionNotFound"},
         {"shape":"ParameterVersionLabelLimitExceeded"}
       ],
-      "documentation":"<p>A parameter label is a user-defined alias to help you manage different versions of a parameter. When you modify a parameter, Amazon Web Services Systems Manager automatically saves a new version and increments the version number by one. A label can help you remember the purpose of a parameter when there are multiple versions. </p> <p>Parameter labels have the following requirements and restrictions.</p> <ul> <li> <p>A version of a parameter can have a maximum of 10 labels.</p> </li> <li> <p>You can't attach the same label to different versions of the same parameter. For example, if version 1 has the label Production, then you can't attach Production to version 2.</p> </li> <li> <p>You can move a label from one version of a parameter to another.</p> </li> <li> <p>You can't create a label when you create a new parameter. You must attach a label to a specific version of a parameter.</p> </li> <li> <p>If you no longer want to use a parameter label, then you can either delete it or move it to a different version of a parameter.</p> </li> <li> <p>A label can have a maximum of 100 characters.</p> </li> <li> <p>Labels can contain letters (case sensitive), numbers, periods (.), hyphens (-), or underscores (_).</p> </li> <li> <p>Labels can't begin with a number, \"<code>aws</code>\" or \"<code>ssm</code>\" (not case sensitive). If a label fails to meet these requirements, then the label isn't associated with a parameter and the system displays it in the list of InvalidLabels.</p> </li> </ul>"
+      "documentation":"<p>A parameter label is a user-defined alias to help you manage different versions of a parameter. When you modify a parameter, Amazon Web Services Systems Manager automatically saves a new version and increments the version number by one. A label can help you remember the purpose of a parameter when there are multiple versions. </p> <p>Parameter labels have the following requirements and restrictions.</p> <ul> <li> <p>A version of a parameter can have a maximum of 10 labels.</p> </li> <li> <p>You can't attach the same label to different versions of the same parameter. For example, if version 1 has the label Production, then you can't attach Production to version 2.</p> </li> <li> <p>You can move a label from one version of a parameter to another.</p> </li> <li> <p>You can't create a label when you create a new parameter. You must attach a label to a specific version of a parameter.</p> </li> <li> <p>If you no longer want to use a parameter label, then you can either delete it or move it to a different version of a parameter.</p> </li> <li> <p>A label can have a maximum of 100 characters.</p> </li> <li> <p>Labels can contain letters (case sensitive), numbers, periods (.), hyphens (-), or underscores (_).</p> </li> <li> <p>Labels can't begin with a number, \"<code>aws</code>\" or \"<code>ssm</code>\" (not case sensitive). If a label fails to meet these requirements, then the label isn't associated with a parameter and the system displays it in the list of InvalidLabels.</p> </li> <li> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p> </li> </ul>"
     },
     "ListAssociationVersions":{
       "name":"ListAssociationVersions",
@@ -1503,7 +1523,7 @@
         {"shape":"InvalidDocumentVersion"},
         {"shape":"InvalidNextToken"}
       ],
-      "documentation":"<p>Information about approval reviews for a version of a change template in Change Manager.</p>"
+      "documentation":"<important> <p>Amazon Web Services Systems Manager Change Manager will no longer be open to new customers starting November 7, 2025. If you would like to use Change Manager, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html\">Amazon Web Services Systems Manager Change Manager availability change</a>.</p> </important> <p>Information about approval reviews for a version of a change template in Change Manager.</p>"
     },
     "ListDocumentVersions":{
       "name":"ListDocumentVersions",
@@ -1710,7 +1730,7 @@
         {"shape":"InvalidResourceType"},
         {"shape":"InvalidResourceId"}
       ],
-      "documentation":"<p>Registers a compliance type and other compliance details on a designated resource. This operation lets you register custom compliance details with a resource. This call overwrites existing compliance information on the resource, so you must provide a full list of compliance items each time that you send the request.</p> <p>ComplianceType can be one of the following:</p> <ul> <li> <p>ExecutionId: The execution ID when the patch, association, or custom compliance item was applied.</p> </li> <li> <p>ExecutionType: Specify patch, association, or Custom:<code>string</code>.</p> </li> <li> <p>ExecutionTime. The time the patch, association, or custom compliance item was applied to the managed node.</p> </li> <li> <p>Id: The patch, association, or custom compliance ID.</p> </li> <li> <p>Title: A title.</p> </li> <li> <p>Status: The status of the compliance item. For example, <code>approved</code> for patches, or <code>Failed</code> for associations.</p> </li> <li> <p>Severity: A patch severity. For example, <code>Critical</code>.</p> </li> <li> <p>DocumentName: An SSM document name. For example, <code>AWS-RunPatchBaseline</code>.</p> </li> <li> <p>DocumentVersion: An SSM document version number. For example, 4.</p> </li> <li> <p>Classification: A patch classification. For example, <code>security updates</code>.</p> </li> <li> <p>PatchBaselineId: A patch baseline ID.</p> </li> <li> <p>PatchSeverity: A patch severity. For example, <code>Critical</code>.</p> </li> <li> <p>PatchState: A patch state. For example, <code>InstancesWithFailedPatches</code>.</p> </li> <li> <p>PatchGroup: The name of a patch group.</p> </li> <li> <p>InstalledTime: The time the association, patch, or custom compliance item was applied to the resource. Specify the time by using the following format: <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code> </p> </li> </ul>"
+      "documentation":"<p>Registers a compliance type and other compliance details on a designated resource. This operation lets you register custom compliance details with a resource. This call overwrites existing compliance information on the resource, so you must provide a full list of compliance items each time that you send the request.</p> <p>ComplianceType can be one of the following:</p> <ul> <li> <p>ExecutionId: The execution ID when the patch, association, or custom compliance item was applied.</p> </li> <li> <p>ExecutionType: Specify patch, association, or Custom:<code>string</code>.</p> </li> <li> <p>ExecutionTime. The time the patch, association, or custom compliance item was applied to the managed node.</p> <important> <p>For State Manager associations, this represents the time when compliance status was captured by the Systems Manager service during its internal compliance aggregation workflow, not necessarily when the association was executed on the managed node. State Manager updates compliance information for all associations on an instance whenever any association executes, which may result in multiple associations showing the same execution time.</p> </important> </li> <li> <p>Id: The patch, association, or custom compliance ID.</p> </li> <li> <p>Title: A title.</p> </li> <li> <p>Status: The status of the compliance item. For example, <code>approved</code> for patches, or <code>Failed</code> for associations.</p> </li> <li> <p>Severity: A patch severity. For example, <code>Critical</code>.</p> </li> <li> <p>DocumentName: An SSM document name. For example, <code>AWS-RunPatchBaseline</code>.</p> </li> <li> <p>DocumentVersion: An SSM document version number. For example, 4.</p> </li> <li> <p>Classification: A patch classification. For example, <code>security updates</code>.</p> </li> <li> <p>PatchBaselineId: A patch baseline ID.</p> </li> <li> <p>PatchSeverity: A patch severity. For example, <code>Critical</code>.</p> </li> <li> <p>PatchState: A patch state. For example, <code>InstancesWithFailedPatches</code>.</p> </li> <li> <p>PatchGroup: The name of a patch group.</p> </li> <li> <p>InstalledTime: The time the association, patch, or custom compliance item was applied to the resource. Specify the time by using the following format: <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code> </p> </li> </ul>"
     },
     "PutInventory":{
       "name":"PutInventory",
@@ -1761,7 +1781,7 @@
         {"shape":"InvalidPolicyAttributeException"},
         {"shape":"IncompatiblePolicyException"}
       ],
-      "documentation":"<p>Add a parameter to the system.</p>"
+      "documentation":"<p>Create or update a parameter in Parameter Store.</p>"
     },
     "PutResourcePolicy":{
       "name":"PutResourcePolicy",
@@ -1931,6 +1951,24 @@
       ],
       "documentation":"<p>Runs commands on one or more managed nodes.</p>"
     },
+    "StartAccessRequest":{
+      "name":"StartAccessRequest",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartAccessRequestRequest"},
+      "output":{"shape":"StartAccessRequestResponse"},
+      "errors":[
+        {"shape":"InternalServerError"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Starts the workflow for just-in-time node access sessions.</p>"
+    },
     "StartAssociationsOnce":{
       "name":"StartAssociationsOnce",
       "http":{
@@ -1979,9 +2017,10 @@
         {"shape":"AutomationDefinitionVersionNotFoundException"},
         {"shape":"IdempotentParameterMismatch"},
         {"shape":"InternalServerError"},
-        {"shape":"AutomationDefinitionNotApprovedException"}
+        {"shape":"AutomationDefinitionNotApprovedException"},
+        {"shape":"NoLongerSupportedException"}
       ],
-      "documentation":"<p>Creates a change request for Change Manager. The Automation runbooks specified in the change request run only after all required approvals for the change request have been received.</p>"
+      "documentation":"<important> <p>Amazon Web Services Systems Manager Change Manager will no longer be open to new customers starting November 7, 2025. If you would like to use Change Manager, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html\">Amazon Web Services Systems Manager Change Manager availability change</a>.</p> </important> <p>Creates a change request for Change Manager. The Automation runbooks specified in the change request run only after all required approvals for the change request have been received.</p>"
     },
     "StartExecutionPreview":{
       "name":"StartExecutionPreview",
@@ -2054,7 +2093,7 @@
         {"shape":"ParameterNotFound"},
         {"shape":"ParameterVersionNotFound"}
       ],
-      "documentation":"<p>Remove a label or labels from a parameter.</p>"
+      "documentation":"<p>Remove a label or labels from a parameter.</p> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p>"
     },
     "UpdateAssociation":{
       "name":"UpdateAssociation",
@@ -2149,9 +2188,10 @@
         {"shape":"InternalServerError"},
         {"shape":"InvalidDocument"},
         {"shape":"InvalidDocumentOperation"},
-        {"shape":"InvalidDocumentVersion"}
+        {"shape":"InvalidDocumentVersion"},
+        {"shape":"TooManyUpdates"}
       ],
-      "documentation":"<p>Updates information related to approval reviews for a specific version of a change template in Change Manager.</p>"
+      "documentation":"<important> <p>Amazon Web Services Systems Manager Change Manager will no longer be open to new customers starting November 7, 2025. If you would like to use Change Manager, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html\">Amazon Web Services Systems Manager Change Manager availability change</a>.</p> </important> <p>Updates information related to approval reviews for a specific version of a change template in Change Manager.</p>"
     },
     "UpdateMaintenanceWindow":{
       "name":"UpdateMaintenanceWindow",
@@ -2292,6 +2332,44 @@
     }
   },
   "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{"shape":"String"}
+      },
+      "documentation":"<p>The requester doesn't have permissions to perform the requested operation.</p>",
+      "exception":true
+    },
+    "AccessKeyIdType":{
+      "type":"string",
+      "pattern":"\\w{16,128}"
+    },
+    "AccessKeySecretType":{
+      "type":"string",
+      "sensitive":true
+    },
+    "AccessRequestId":{
+      "type":"string",
+      "pattern":"^(oi)-[0-9a-f]{12}$"
+    },
+    "AccessRequestStatus":{
+      "type":"string",
+      "enum":[
+        "Approved",
+        "Rejected",
+        "Revoked",
+        "Expired",
+        "Pending"
+      ]
+    },
+    "AccessType":{
+      "type":"string",
+      "enum":[
+        "Standard",
+        "JustInTime"
+      ]
+    },
     "Account":{"type":"string"},
     "AccountId":{
       "type":"string",
@@ -2415,8 +2493,7 @@
     },
     "AddTagsToResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AgentErrorCode":{
       "type":"string",
@@ -2555,8 +2632,7 @@
     },
     "AssociatedInstances":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You must disassociate a document from all managed nodes before you can delete it.</p>",
       "exception":true
     },
@@ -2623,8 +2699,7 @@
     },
     "AssociationAlreadyExists":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified association already exists.</p>",
       "exception":true
     },
@@ -2731,7 +2806,7 @@
         },
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a>.</p>"
+          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
         },
         "TargetLocations":{
           "shape":"TargetLocations",
@@ -3012,8 +3087,7 @@
     },
     "AssociationLimitExceeded":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can have at most 2,000 active associations.</p>",
       "exception":true
     },
@@ -3165,11 +3239,11 @@
         },
         "ApplyOnlyAtCronInterval":{
           "shape":"ApplyOnlyAtCronInterval",
-          "documentation":"<p>By default, when you create a new associations, the system runs it immediately after it is created and then according to the schedule you specified. Specify this option if you don't want an association to run immediately after you create it. This parameter isn't supported for rate expressions.</p>"
+          "documentation":"<p>By default, when you create new associations, the system runs it immediately after it is created and then according to the schedule you specified. Specify this option if you don't want an association to run immediately after you create it. This parameter isn't supported for rate expressions.</p>"
         },
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations for this version only run when that Change Calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a>.</p>"
+          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations for this version only run when that Change Calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
         },
         "TargetLocations":{
           "shape":"TargetLocations",
@@ -3811,7 +3885,10 @@
     },
     "AutomationSubtype":{
       "type":"string",
-      "enum":["ChangeRequest"]
+      "enum":[
+        "ChangeRequest",
+        "AccessRequest"
+      ]
     },
     "AutomationTargetParameterName":{
       "type":"string",
@@ -3874,6 +3951,10 @@
         "Sources":{
           "shape":"PatchSourceList",
           "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.</p>"
+        },
+        "AvailableSecurityUpdatesComplianceStatus":{
+          "shape":"PatchComplianceStatus",
+          "documentation":"<p>Indicates whether managed nodes for which there are available security-related patches that have not been approved by the baseline are being defined as <code>COMPLIANT</code> or <code>NON_COMPLIANT</code>. This option is specified when the <code>CreatePatchBaseline</code> or <code>UpdatePatchBaseline</code> commands are run.</p> <p>Applies to Windows Server managed nodes only.</p>"
         }
       },
       "documentation":"<p>Defines the basic information about a patch baseline override.</p>"
@@ -3909,8 +3990,7 @@
     },
     "CancelCommandResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Whether or not the command was successfully canceled. There is no guarantee that a request can be canceled.</p>"
     },
     "CancelMaintenanceWindowExecutionRequest":{
@@ -4337,7 +4417,7 @@
       "members":{
         "ExecutionTime":{
           "shape":"DateTime",
-          "documentation":"<p>The time the execution ran as a datetime object that is saved in the following format: <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code> </p>"
+          "documentation":"<p>The time the execution ran as a datetime object that is saved in the following format: <code>yyyy-MM-dd'T'HH:mm:ss'Z'</code> </p> <important> <p>For State Manager associations, this timestamp represents when the compliance status was captured and reported by the Systems Manager service, not when the underlying association was actually executed on the managed node. To track actual association execution times, use the <a>DescribeAssociationExecutionTargets</a> command or check the association execution history in the Systems Manager console.</p> </important>"
         },
         "ExecutionId":{
           "shape":"ComplianceExecutionId",
@@ -4388,7 +4468,7 @@
         },
         "ExecutionSummary":{
           "shape":"ComplianceExecutionSummary",
-          "documentation":"<p>A summary for the compliance item. The summary includes an execution ID, the execution type (for example, command), and the execution time.</p>"
+          "documentation":"<p>A summary for the compliance item. The summary includes an execution ID, the execution type (for example, command), and the execution time.</p> <important> <p>For State Manager associations, the <code>ExecutionTime</code> value represents when the compliance status was captured and aggregated by the Systems Manager service, not necessarily when the underlying association was executed on the managed node. State Manager updates compliance status for all associations on an instance whenever any association executes, which means multiple associations may show the same execution time even if they were executed at different times.</p> </important>"
         },
         "Details":{
           "shape":"ComplianceItemDetails",
@@ -4724,11 +4804,11 @@
         },
         "ApplyOnlyAtCronInterval":{
           "shape":"ApplyOnlyAtCronInterval",
-          "documentation":"<p>By default, when you create a new associations, the system runs it immediately after it is created and then according to the schedule you specified. Specify this option if you don't want an association to run immediately after you create it. This parameter isn't supported for rate expressions.</p>"
+          "documentation":"<p>By default, when you create a new association, the system runs it immediately after it is created and then according to the schedule you specified and when target changes are detected. Specify <code>true</code> for <code>ApplyOnlyAtCronInterval</code> if you want the association to run only according to the schedule you specified.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#state-manager-about-scheduling\">Understanding when associations are applied to resources</a> and <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#runbook-target-updates\">&gt;About target updates with Automation runbooks</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> <p>This parameter isn't supported for rate expressions.</p>"
         },
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations only run when that Change Calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a>.</p>"
+          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents your associations are gated under. The associations only run when that Change Calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
         },
         "TargetLocations":{
           "shape":"TargetLocations",
@@ -4824,15 +4904,15 @@
         },
         "ApplyOnlyAtCronInterval":{
           "shape":"ApplyOnlyAtCronInterval",
-          "documentation":"<p>By default, when you create a new association, the system runs it immediately after it is created and then according to the schedule you specified. Specify this option if you don't want an association to run immediately after you create it. This parameter isn't supported for rate expressions.</p>"
+          "documentation":"<p>By default, when you create a new association, the system runs it immediately after it is created and then according to the schedule you specified and when target changes are detected. Specify <code>true</code> for <code>ApplyOnlyAtCronInterval</code>if you want the association to run only according to the schedule you specified.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#state-manager-about-scheduling\">Understanding when associations are applied to resources</a> and <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#runbook-target-updates\">&gt;About target updates with Automation runbooks</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> <p>This parameter isn't supported for rate expressions.</p>"
         },
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a>.</p>"
+          "documentation":"<p>The names of Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
         },
         "TargetLocations":{
           "shape":"TargetLocations",
-          "documentation":"<p>A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to create an association in multiple Regions and multiple accounts.</p>"
+          "documentation":"<p>A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to create an association in multiple Regions and multiple accounts.</p> <note> <p>The <code>IncludeChildOrganizationUnits</code> parameter is not supported by State Manager.</p> </note>"
         },
         "ScheduleOffset":{
           "shape":"ScheduleOffset",
@@ -5009,7 +5089,7 @@
         },
         "OpsItemType":{
           "shape":"OpsItemType",
-          "documentation":"<p>The type of OpsItem to create. Systems Manager supports the following types of OpsItems:</p> <ul> <li> <p> <code>/aws/issue</code> </p> <p>This type of OpsItem is used for default OpsItems created by OpsCenter. </p> </li> <li> <p> <code>/aws/changerequest</code> </p> <p>This type of OpsItem is used by Change Manager for reviewing and approving or rejecting change requests. </p> </li> <li> <p> <code>/aws/insight</code> </p> <p>This type of OpsItem is used by OpsCenter for aggregating and reporting on duplicate OpsItems. </p> </li> </ul>"
+          "documentation":"<p>The type of OpsItem to create. Systems Manager supports the following types of OpsItems:</p> <ul> <li> <p> <code>/aws/issue</code> </p> <p>This type of OpsItem is used for default OpsItems created by OpsCenter. </p> </li> <li> <p> <code>/aws/insight</code> </p> <p>This type of OpsItem is used by OpsCenter for aggregating and reporting on duplicate OpsItems. </p> </li> <li> <p> <code>/aws/changerequest</code> </p> <p>This type of OpsItem is used by Change Manager for reviewing and approving or rejecting change requests. </p> <important> <p>Amazon Web Services Systems Manager Change Manager will no longer be open to new customers starting November 7, 2025. If you would like to use Change Manager, sign up prior to that date. Existing customers can continue to use the service as normal. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/change-manager-availability-change.html\">Amazon Web Services Systems Manager Change Manager availability change</a>.</p> </important> </li> </ul>"
         },
         "OperationalData":{
           "shape":"OpsItemOperationalData",
@@ -5148,7 +5228,7 @@
         },
         "RejectedPatchesAction":{
           "shape":"PatchAction",
-          "documentation":"<p>The action for Patch Manager to take on patches included in the <code>RejectedPackages</code> list.</p> <dl> <dt>ALLOW_AS_DEPENDENCY</dt> <dd> <p> <b>Linux and macOS</b>: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as <code>INSTALLED_OTHER</code>. This is the default action if no option is specified.</p> <p> <b>Windows Server</b>: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as <code>INSTALLED_OTHER</code>. Any package not already installed on the node is skipped. This is the default action if no option is specified.</p> </dd> <dt>BLOCK</dt> <dd> <p> <b>All OSs</b>: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as <code>INSTALLED_REJECTED</code>.</p> </dd> </dl>"
+          "documentation":"<p>The action for Patch Manager to take on patches included in the <code>RejectedPackages</code> list.</p> <dl> <dt>ALLOW_AS_DEPENDENCY</dt> <dd> <p> <b>Linux and macOS</b>: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as <code>INSTALLED_OTHER</code>. This is the default action if no option is specified.</p> <p> <b>Windows Server</b>: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as <code>INSTALLED_OTHER</code>. Any package not already installed on the node is skipped. This is the default action if no option is specified.</p> </dd> <dt>BLOCK</dt> <dd> <p> <b>All OSs</b>: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. </p> <p>State value assignment for patch compliance:</p> <ul> <li> <p>If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as <code>INSTALLED_REJECTED</code>.</p> </li> <li> <p>If an update attempts to install a dependency package that is now rejected by the baseline, when previous versions of the package were not rejected, the package being updated is reported as <code>MISSING</code> for <code>SCAN</code> operations and as <code>FAILED</code> for <code>INSTALL</code> operations.</p> </li> </ul> </dd> </dl>"
         },
         "Description":{
           "shape":"BaselineDescription",
@@ -5158,6 +5238,10 @@
           "shape":"PatchSourceList",
           "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.</p>"
         },
+        "AvailableSecurityUpdatesComplianceStatus":{
+          "shape":"PatchComplianceStatus",
+          "documentation":"<p>Indicates the status you want to assign to security patches that are available but not approved because they don't meet the installation criteria specified in the patch baseline.</p> <p>Example scenario: Security patches that you might want installed can be skipped if you have specified a long period to wait after a patch is released before installation. If an update to the patch is released during your specified waiting period, the waiting period for installing the patch starts over. If the waiting period is too long, multiple versions of the patch could be released but never installed.</p> <p>Supported for Windows Server managed nodes only.</p>"
+        },
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>User-provided idempotency token.</p>",
@@ -5202,10 +5286,37 @@
     },
     "CreateResourceDataSyncResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreatedDate":{"type":"timestamp"},
+    "Credentials":{
+      "type":"structure",
+      "required":[
+        "AccessKeyId",
+        "SecretAccessKey",
+        "SessionToken",
+        "ExpirationTime"
+      ],
+      "members":{
+        "AccessKeyId":{
+          "shape":"AccessKeyIdType",
+          "documentation":"<p>The access key ID that identifies the temporary security credentials.</p>"
+        },
+        "SecretAccessKey":{
+          "shape":"AccessKeySecretType",
+          "documentation":"<p>The secret access key that can be used to sign requests.</p>"
+        },
+        "SessionToken":{
+          "shape":"SessionTokenType",
+          "documentation":"<p>The token that users must pass to the service API to use the temporary credentials.</p>"
+        },
+        "ExpirationTime":{
+          "shape":"DateTime",
+          "documentation":"<p>The datetime on which the current credentials expire.</p>"
+        }
+      },
+      "documentation":"<p>The temporary security credentials, which include an access key ID, a secret access key, and a security (or session) token.</p>"
+    },
     "CustomSchemaCountLimitExceededException":{
       "type":"structure",
       "members":{
@@ -5234,8 +5345,7 @@
     },
     "DeleteActivationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAssociationRequest":{
       "type":"structure",
@@ -5256,8 +5366,7 @@
     },
     "DeleteAssociationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDocumentRequest":{
       "type":"structure",
@@ -5283,8 +5392,7 @@
     },
     "DeleteDocumentResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInventoryRequest":{
       "type":"structure",
@@ -5357,8 +5465,7 @@
     },
     "DeleteOpsItemResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOpsMetadataRequest":{
       "type":"structure",
@@ -5372,8 +5479,7 @@
     },
     "DeleteOpsMetadataResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteParameterRequest":{
       "type":"structure",
@@ -5387,8 +5493,7 @@
     },
     "DeleteParameterResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteParametersRequest":{
       "type":"structure",
@@ -5448,8 +5553,7 @@
     },
     "DeleteResourceDataSyncResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourcePolicyRequest":{
       "type":"structure",
@@ -5475,8 +5579,7 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeliveryTimedOutCount":{"type":"integer"},
     "DeregisterManagedInstanceRequest":{
@@ -5491,8 +5594,7 @@
     },
     "DeregisterManagedInstanceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterPatchBaselineForPatchGroupRequest":{
       "type":"structure",
@@ -5867,7 +5969,7 @@
       "members":{
         "Name":{
           "shape":"DocumentName",
-          "documentation":"<p>The name of the document for which you are the owner.</p>"
+          "documentation":"<p>The name of the document for which you are the owner. </p>"
         },
         "PermissionType":{
           "shape":"DocumentPermissionType",
@@ -5889,7 +5991,7 @@
       "members":{
         "AccountIds":{
           "shape":"AccountIdList",
-          "documentation":"<p>The account IDs that have permission to use this document. The ID can be either an Amazon Web Services account or <i>All</i>.</p>"
+          "documentation":"<p>The account IDs that have permission to use this document. The ID can be either an Amazon Web Services account number or <code>all</code>.</p>"
         },
         "AccountSharingInfoList":{
           "shape":"AccountSharingInfoList",
@@ -5907,7 +6009,7 @@
       "members":{
         "Name":{
           "shape":"DocumentARN",
-          "documentation":"<p>The name of the SSM document.</p>"
+          "documentation":"<p>The name of the SSM document.</p> <note> <p>If you're calling a shared SSM document from a different Amazon Web Services account, <code>Name</code> is the full Amazon Resource Name (ARN) of the document.</p> </note>"
         },
         "DocumentVersion":{
           "shape":"DocumentVersion",
@@ -6702,6 +6804,11 @@
           "shape":"InstancesCount",
           "documentation":"<p>The number of managed nodes with patches installed that are specified as other than <code>Critical</code> or <code>Security</code> but aren't compliant with the patch baseline. The status of these managed nodes is <code>NON_COMPLIANT</code>.</p>",
           "box":true
+        },
+        "InstancesWithAvailableSecurityUpdates":{
+          "shape":"Integer",
+          "documentation":"<p>The number of managed nodes for which security-related patches are available but not approved because because they didn't meet the patch baseline requirements. For example, an updated version of a patch might have been released before the specified auto-approval period was over.</p> <p>Applies to Windows Server managed nodes only.</p>",
+          "box":true
         }
       }
     },
@@ -6835,8 +6942,7 @@
     },
     "DisassociateOpsItemRelatedItemResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DocumentARN":{
       "type":"string",
@@ -7389,7 +7495,9 @@
         "ProblemAnalysisTemplate",
         "CloudFormation",
         "ConformancePackTemplate",
-        "QuickSetup"
+        "QuickSetup",
+        "ManualApprovalPolicy",
+        "AutoApprovalPolicy"
       ]
     },
     "DocumentVersion":{
@@ -7490,8 +7598,7 @@
     },
     "DuplicateInstanceId":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You can't specify a managed node ID in more than one association.</p>",
       "exception":true
     },
@@ -7651,6 +7758,29 @@
       "documentation":"<p>You attempted to register a <code>LAMBDA</code> or <code>STEP_FUNCTIONS</code> task in a region where the corresponding service isn't available. </p>",
       "exception":true
     },
+    "GetAccessTokenRequest":{
+      "type":"structure",
+      "required":["AccessRequestId"],
+      "members":{
+        "AccessRequestId":{
+          "shape":"AccessRequestId",
+          "documentation":"<p>The ID of a just-in-time node access request.</p>"
+        }
+      }
+    },
+    "GetAccessTokenResponse":{
+      "type":"structure",
+      "members":{
+        "Credentials":{
+          "shape":"Credentials",
+          "documentation":"<p>The temporary security credentials which can be used to start just-in-time node access sessions.</p>"
+        },
+        "AccessRequestStatus":{
+          "shape":"AccessRequestStatus",
+          "documentation":"<p>The status of the access request.</p>"
+        }
+      }
+    },
     "GetAutomationExecutionRequest":{
       "type":"structure",
       "required":["AutomationExecutionId"],
@@ -7676,7 +7806,7 @@
       "members":{
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Systems Manager documents (SSM documents) that represent the calendar entries for which you want to get the state.</p>"
+          "documentation":"<p>The names of Amazon Resource Names (ARNs) of the Systems Manager documents (SSM documents) that represent the calendar entries for which you want to get the state.</p>"
         },
         "AtTime":{
           "shape":"ISO8601String",
@@ -7858,6 +7988,10 @@
         "BaselineOverride":{
           "shape":"BaselineOverride",
           "documentation":"<p>Defines the basic information about a patch baseline override.</p>"
+        },
+        "UseS3DualStackEndpoint":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to use S3 dualstack endpoints for the patch snapshot download URL. Set to <code>true</code> to receive a presigned URL that supports both IPv4 and IPv6 connectivity. Set to <code>false</code> to use standard IPv4-only endpoints. Default is <code>false</code>. This parameter is required for managed nodes in IPv6-only environments. </p>"
         }
       }
     },
@@ -8787,6 +8921,10 @@
         "Sources":{
           "shape":"PatchSourceList",
           "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.</p>"
+        },
+        "AvailableSecurityUpdatesComplianceStatus":{
+          "shape":"PatchComplianceStatus",
+          "documentation":"<p>Indicates the compliance status of managed nodes for which security-related patches are available but were not approved. This preference is specified when the <code>CreatePatchBaseline</code> or <code>UpdatePatchBaseline</code> commands are run.</p> <p>Applies to Windows Server managed nodes only.</p>"
         }
       }
     },
@@ -9270,7 +9408,7 @@
       "members":{
         "Key":{
           "shape":"InstanceInformationStringFilterKey",
-          "documentation":"<p>The filter key name to describe your managed nodes.</p> <p>Valid filter key values: ActivationIds | AgentVersion | AssociationStatus | IamRole | InstanceIds | PingStatus | PlatformTypes | ResourceType | SourceIds | SourceTypes | \"tag-key\" | \"tag:<code>{keyname}</code> </p> <ul> <li> <p>Valid values for the <code>AssociationStatus</code> filter key: Success | Pending | Failed</p> </li> <li> <p>Valid values for the <code>PingStatus</code> filter key: Online | ConnectionLost | Inactive (deprecated)</p> </li> <li> <p>Valid values for the <code>PlatformType</code> filter key: Windows | Linux | MacOS</p> </li> <li> <p>Valid values for the <code>ResourceType</code> filter key: EC2Instance | ManagedInstance</p> </li> <li> <p>Valid values for the <code>SourceType</code> filter key: AWS::EC2::Instance | AWS::SSM::ManagedInstance | AWS::IoT::Thing</p> </li> <li> <p>Valid tag examples: <code>Key=tag-key,Values=Purpose</code> | <code>Key=tag:Purpose,Values=Test</code>.</p> </li> </ul>"
+          "documentation":"<p>The filter key name to describe your managed nodes.</p> <p>Valid filter key values: ActivationIds | AgentVersion | AssociationStatus | IamRole | InstanceIds | PingStatus | PlatformType | ResourceType | SourceIds | SourceTypes | \"tag-key\" | \"tag:<code>{keyname}</code> </p> <ul> <li> <p>Valid values for the <code>AssociationStatus</code> filter key: Success | Pending | Failed</p> </li> <li> <p>Valid values for the <code>PingStatus</code> filter key: Online | ConnectionLost | Inactive (deprecated)</p> </li> <li> <p>Valid values for the <code>PlatformType</code> filter key: Windows | Linux | MacOS</p> </li> <li> <p>Valid values for the <code>ResourceType</code> filter key: EC2Instance | ManagedInstance</p> </li> <li> <p>Valid values for the <code>SourceType</code> filter key: AWS::EC2::Instance | AWS::SSM::ManagedInstance | AWS::IoT::Thing</p> </li> <li> <p>Valid tag examples: <code>Key=tag-key,Values=Purpose</code> | <code>Key=tag:Purpose,Values=Test</code>.</p> </li> </ul>"
         },
         "Values":{
           "shape":"InstanceInformationFilterValueSet",
@@ -9362,6 +9500,11 @@
           "shape":"PatchNotApplicableCount",
           "documentation":"<p>The number of patches from the patch baseline that aren't applicable for the managed node and therefore aren't installed on the node. This number may be truncated if the list of patch names is very large. The number of patches beyond this limit are reported in <code>UnreportedNotApplicableCount</code>.</p>"
         },
+        "AvailableSecurityUpdateCount":{
+          "shape":"PatchAvailableSecurityUpdateCount",
+          "documentation":"<p>The number of security-related patches that are available but not approved because they didn't meet the patch baseline requirements. For example, an updated version of a patch might have been released before the specified auto-approval period was over.</p> <p>Applies to Windows Server managed nodes only.</p>",
+          "box":true
+        },
         "OperationStartTime":{
           "shape":"DateTime",
           "documentation":"<p>The time the most recent patching operation was started on the managed node.</p>"
@@ -9774,8 +9917,7 @@
     },
     "InvalidCommandId":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified command ID isn't valid. Verify the ID and try again.</p>",
       "exception":true
     },
@@ -9859,8 +10001,7 @@
     },
     "InvalidFilterKey":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified key isn't valid.</p>",
       "exception":true
     },
@@ -9974,15 +10115,13 @@
     },
     "InvalidOutputFolder":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The S3 bucket doesn't exist.</p>",
       "exception":true
     },
     "InvalidOutputLocation":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The output location isn't valid or doesn't exist.</p>",
       "exception":true
     },
@@ -10004,8 +10143,7 @@
     },
     "InvalidPluginName":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The plugin name isn't valid.</p>",
       "exception":true
     },
@@ -10027,15 +10165,13 @@
     },
     "InvalidResourceId":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource ID isn't valid. Verify that you entered the correct ID and try again.</p>",
       "exception":true
     },
     "InvalidResourceType":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The resource type isn't valid. For example, if you are attempting to tag an EC2 instance, the instance must be a registered managed node.</p>",
       "exception":true
     },
@@ -10240,14 +10376,14 @@
         },
         "Values":{
           "shape":"InventoryFilterValueList",
-          "documentation":"<p>Inventory filter values. Example: inventory filter where managed node IDs are specified as values <code>Key=AWS:InstanceInformation.InstanceId,Values= i-a12b3c4d5e6g, i-1a2b3c4d5e6,Type=Equal</code>. </p>"
+          "documentation":"<p>Inventory filter values.</p>"
         },
         "Type":{
           "shape":"InventoryQueryOperatorType",
           "documentation":"<p>The type of filter.</p> <note> <p>The <code>Exists</code> filter must be used with aggregators. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/inventory-aggregate.html\">Aggregating inventory data</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </note>"
         }
       },
-      "documentation":"<p>One or more filters. Use a filter to return a more specific list of results.</p>"
+      "documentation":"<p>One or more filters. Use a filter to return a more specific list of results.</p> <p> <b>Example formats for the <code>aws ssm get-inventory</code> command:</b> </p> <p> <code>--filters Key=AWS:InstanceInformation.AgentType,Values=amazon-ssm-agent,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.AgentVersion,Values=3.3.2299.0,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.ComputerName,Values=ip-192.0.2.0.us-east-2.compute.internal,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.InstanceId,Values=i-0a4cd6ceffEXAMPLE,i-1a2b3c4d5e6EXAMPLE,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.InstanceStatus,Values=Active,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.IpAddress,Values=198.51.100.0,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.PlatformName,Values=\"Amazon Linux\",Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.PlatformType,Values=Linux,Type=Equal</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.PlatformVersion,Values=2023,Type=BeginWith</code> </p> <p> <code>--filters Key=AWS:InstanceInformation.ResourceType,Values=EC2Instance,Type=Equal</code> </p>"
     },
     "InventoryFilterKey":{
       "type":"string",
@@ -10512,8 +10648,7 @@
     "InventoryTypeDisplayName":{"type":"string"},
     "InvocationDoesNotExist":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The command ID and managed node ID you specified didn't match any invocations. Verify the command ID and the managed node ID and try again. </p>",
       "exception":true
     },
@@ -11001,7 +11136,7 @@
       "members":{
         "SyncName":{
           "shape":"ResourceDataSyncName",
-          "documentation":"<p>The name of the resource data sync to retrieve information about. Required for cross-account/cross-Region configurations. Optional for single account/single-Region configurations.</p>"
+          "documentation":"<p>The name of the Amazon Web Services managed resource data sync to retrieve information about.</p> <p>For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is <code>AWS-QuickSetup-ManagedNode</code>.</p> <p>For single account/single-Region configurations, the parameter is not required.</p>"
         },
         "Filters":{
           "shape":"NodeFilterList",
@@ -11037,7 +11172,7 @@
       "members":{
         "SyncName":{
           "shape":"ResourceDataSyncName",
-          "documentation":"<p>The name of the resource data sync to retrieve information about. Required for cross-account/cross-Region configuration. Optional for single account/single-Region configurations.</p>"
+          "documentation":"<p>The name of the Amazon Web Services managed resource data sync to retrieve information about.</p> <p>For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is <code>AWS-QuickSetup-ManagedNode</code>.</p> <p>For single account/single-Region configurations, the parameter is not required.</p>"
         },
         "Filters":{
           "shape":"NodeFilterList",
@@ -12076,11 +12211,11 @@
         },
         "AccountIdsToAdd":{
           "shape":"AccountIdList",
-          "documentation":"<p>The Amazon Web Services users that should have access to the document. The account IDs can either be a group of account IDs or <i>All</i>.</p>"
+          "documentation":"<p>The Amazon Web Services users that should have access to the document. The account IDs can either be a group of account IDs or <i>All</i>. You must specify a value for this parameter or the <code>AccountIdsToRemove</code> parameter.</p>"
         },
         "AccountIdsToRemove":{
           "shape":"AccountIdList",
-          "documentation":"<p>The Amazon Web Services users that should no longer have access to the document. The Amazon Web Services user can either be a group of account IDs or <i>All</i>. This action has a higher priority than <code>AccountIdsToAdd</code>. If you specify an ID to add and the same ID to remove, the system removes access to the document.</p>"
+          "documentation":"<p>The Amazon Web Services users that should no longer have access to the document. The Amazon Web Services user can either be a group of account IDs or <i>All</i>. This action has a higher priority than <code>AccountIdsToAdd</code>. If you specify an ID to add and the same ID to remove, the system removes access to the document. You must specify a value for this parameter or the <code>AccountIdsToAdd</code> parameter.</p>"
         },
         "SharedDocumentVersion":{
           "shape":"SharedDocumentVersion",
@@ -12090,10 +12225,17 @@
     },
     "ModifyDocumentPermissionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NextToken":{"type":"string"},
+    "NoLongerSupportedException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"String"}
+      },
+      "documentation":"<p>The requested operation is no longer supported by Systems Manager.</p>",
+      "exception":true
+    },
     "Node":{
       "type":"structure",
       "members":{
@@ -12880,6 +13022,15 @@
         "Category",
         "Severity",
         "OpsItemType",
+        "AccessRequestByRequesterArn",
+        "AccessRequestByRequesterId",
+        "AccessRequestByApproverArn",
+        "AccessRequestByApproverId",
+        "AccessRequestBySourceAccountId",
+        "AccessRequestBySourceOpsItemId",
+        "AccessRequestBySourceRegion",
+        "AccessRequestByIsReplica",
+        "AccessRequestByTargetResourceId",
         "ChangeRequestByRequesterArn",
         "ChangeRequestByRequesterName",
         "ChangeRequestByApproverArn",
@@ -13130,6 +13281,7 @@
         "ChangeCalendarOverrideRejected",
         "PendingApproval",
         "Approved",
+        "Revoked",
         "Rejected",
         "Closed"
       ]
@@ -13656,7 +13808,7 @@
       "members":{
         "message":{"shape":"String"}
       },
-      "documentation":"<p>The parameter couldn't be found. Verify the name and try again.</p>",
+      "documentation":"<p>The parameter couldn't be found. Verify the name and try again.</p> <note> <p>For the <code>DeleteParameter</code> and <code>GetParameter</code> actions, if the specified parameter doesn't exist, the <code>ParameterNotFound</code> exception is <i>not</i> recorded in CloudTrail event logs.</p> </note>",
       "exception":true
     },
     "ParameterPatternMismatchException":{
@@ -13946,6 +14098,7 @@
       "member":{"shape":"PatchAdvisoryId"}
     },
     "PatchArch":{"type":"string"},
+    "PatchAvailableSecurityUpdateCount":{"type":"integer"},
     "PatchBaselineIdentity":{
       "type":"structure",
       "members":{
@@ -14048,7 +14201,8 @@
         "INSTALLED_REJECTED",
         "MISSING",
         "NOT_APPLICABLE",
-        "FAILED"
+        "FAILED",
+        "AVAILABLE_SECURITY_UPDATE"
       ]
     },
     "PatchComplianceLevel":{
@@ -14067,6 +14221,13 @@
       "max":100,
       "min":10
     },
+    "PatchComplianceStatus":{
+      "type":"string",
+      "enum":[
+        "COMPLIANT",
+        "NON_COMPLIANT"
+      ]
+    },
     "PatchContentUrl":{"type":"string"},
     "PatchCriticalNonCompliantCount":{"type":"integer"},
     "PatchDeploymentStatus":{
@@ -14285,12 +14446,12 @@
         },
         "ApproveAfterDays":{
           "shape":"ApproveAfterDays",
-          "documentation":"<p>The number of days after the release date of each patch matched by the rule that the patch is marked as approved in the patch baseline. For example, a value of <code>7</code> means that patches are approved seven days after they are released.</p> <p>This parameter is marked as <code>Required: No</code>, but your request must include a value for either <code>ApproveAfterDays</code> or <code>ApproveUntilDate</code>.</p> <p>Not supported for Debian Server or Ubuntu Server.</p> <important> <p>Use caution when setting this value for Windows Server patch baselines. Because patch updates that are replaced by later updates are removed, setting too broad a value for this parameter can result in crucial patches not being installed. For more information, see the <b>Windows Server</b> tab in the topic <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-selecting-patches.html\">How security patches are selected</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </important>",
+          "documentation":"<p>The number of days after the release date of each patch matched by the rule that the patch is marked as approved in the patch baseline. For example, a value of <code>7</code> means that patches are approved seven days after they are released.</p> <p>Patch Manager evaluates patch release dates using Coordinated Universal Time (UTC). If the day represented by <code>7</code> is <code>2025-11-16</code>, patches released between <code>2025-11-16T00:00:00Z</code> and <code>2025-11-16T23:59:59Z</code> will be included in the approval.</p> <p>This parameter is marked as <code>Required: No</code>, but your request must include a value for either <code>ApproveAfterDays</code> or <code>ApproveUntilDate</code>.</p> <p>Not supported for Debian Server or Ubuntu Server.</p> <important> <p>Use caution when setting this value for Windows Server patch baselines. Because patch updates that are replaced by later updates are removed, setting too broad a value for this parameter can result in crucial patches not being installed. For more information, see the <b>Windows Server</b> tab in the topic <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-selecting-patches.html\">How security patches are selected</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </important>",
           "box":true
         },
         "ApproveUntilDate":{
           "shape":"PatchStringDateTime",
-          "documentation":"<p>The cutoff date for auto approval of released patches. Any patches released on or before this date are installed automatically.</p> <p>Enter dates in the format <code>YYYY-MM-DD</code>. For example, <code>2024-12-31</code>.</p> <p>This parameter is marked as <code>Required: No</code>, but your request must include a value for either <code>ApproveUntilDate</code> or <code>ApproveAfterDays</code>.</p> <p>Not supported for Debian Server or Ubuntu Server.</p> <important> <p>Use caution when setting this value for Windows Server patch baselines. Because patch updates that are replaced by later updates are removed, setting too broad a value for this parameter can result in crucial patches not being installed. For more information, see the <b>Windows Server</b> tab in the topic <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-selecting-patches.html\">How security patches are selected</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </important>",
+          "documentation":"<p>The cutoff date for auto approval of released patches. Any patches released on or before this date are installed automatically.</p> <p>Enter dates in the format <code>YYYY-MM-DD</code>. For example, <code>2025-11-16</code>.</p> <p>Patch Manager evaluates patch release dates using Coordinated Universal Time (UTC). If you enter the date <code>2025-11-16</code>, patches released between <code>2025-11-16T00:00:00Z</code> and <code>2025-11-16T23:59:59Z</code> will be included in the approval.</p> <p>This parameter is marked as <code>Required: No</code>, but your request must include a value for either <code>ApproveUntilDate</code> or <code>ApproveAfterDays</code>.</p> <p>Not supported for Debian Server or Ubuntu Server.</p> <important> <p>Use caution when setting this value for Windows Server patch baselines. Because patch updates that are replaced by later updates are removed, setting too broad a value for this parameter can result in crucial patches not being installed. For more information, see the <b>Windows Server</b> tab in the topic <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-selecting-patches.html\">How security patches are selected</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </important>",
           "box":true
         },
         "EnableNonSecurity":{
@@ -14345,7 +14506,7 @@
         },
         "Configuration":{
           "shape":"PatchSourceConfiguration",
-          "documentation":"<p>The value of the yum repo configuration. For example:</p> <p> <code>[main]</code> </p> <p> <code>name=MyCustomRepository</code> </p> <p> <code>baseurl=https://my-custom-repository</code> </p> <p> <code>enabled=1</code> </p> <note> <p>For information about other options available for your yum repository configuration, see <a href=\"https://man7.org/linux/man-pages/man5/dnf.conf.5.html\">dnf.conf(5)</a>.</p> </note>"
+          "documentation":"<p>The value of the repo configuration.</p> <p> <b>Example for yum repositories</b> </p> <p> <code>[main]</code> </p> <p> <code>name=MyCustomRepository</code> </p> <p> <code>baseurl=https://my-custom-repository</code> </p> <p> <code>enabled=1</code> </p> <p>For information about other options available for your yum repository configuration, see <a href=\"https://man7.org/linux/man-pages/man5/dnf.conf.5.html\">dnf.conf(5)</a> on the <i>man7.org</i> website.</p> <p> <b>Examples for Ubuntu Server and Debian Server</b> </p> <p> <code>deb http://security.ubuntu.com/ubuntu jammy main</code> </p> <p> <code>deb https://site.example.com/debian distribution component1 component2 component3</code> </p> <p>Repo information for Ubuntu Server repositories must be specifed in a single line. For more examples and information, see <a href=\"https://manpages.ubuntu.com/manpages/jammy/man5/sources.list.5.html\">jammy (5) sources.list.5.gz</a> on the <i>Ubuntu Server Manuals</i> website and <a href=\"https://wiki.debian.org/SourcesList#sources.list_format\">sources.list format</a> on the <i>Debian Wiki</i>.</p>"
         }
       },
       "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repository. Applies to Linux managed nodes only.</p>"
@@ -14516,8 +14677,7 @@
     },
     "PutComplianceItemsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutInventoryMessage":{"type":"string"},
     "PutInventoryRequest":{
@@ -14555,7 +14715,7 @@
       "members":{
         "Name":{
           "shape":"PSParameterName",
-          "documentation":"<p>The fully qualified name of the parameter that you want to add to the system.</p> <note> <p>You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.</p> </note> <p>The fully qualified name includes the complete hierarchy of the parameter path and name. For parameters in a hierarchy, you must include a leading forward slash character (/) when you create or reference a parameter. For example: <code>/Dev/DBServer/MySQL/db-string13</code> </p> <p>Naming Constraints:</p> <ul> <li> <p>Parameter names are case sensitive.</p> </li> <li> <p>A parameter name must be unique within an Amazon Web Services Region</p> </li> <li> <p>A parameter name can't be prefixed with \"<code>aws</code>\" or \"<code>ssm</code>\" (case-insensitive).</p> </li> <li> <p>Parameter names can include only the following symbols and letters: <code>a-zA-Z0-9_.-</code> </p> <p>In addition, the slash character ( / ) is used to delineate hierarchies in parameter names. For example: <code>/Dev/Production/East/Project-ABC/MyParameter</code> </p> </li> <li> <p>A parameter name can't include spaces.</p> </li> <li> <p>Parameter hierarchies are limited to a maximum depth of fifteen levels.</p> </li> </ul> <p>For additional information about valid values for parameter names, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html\">Creating Systems Manager parameters</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> <note> <p>The maximum length constraint of 2048 characters listed below includes 1037 characters reserved for internal use by Systems Manager. The maximum length for a parameter name that you create is 1011 characters. This includes the characters in the ARN that precede the name you specify, such as <code>arn:aws:ssm:us-east-2:111122223333:parameter/</code>.</p> </note>"
+          "documentation":"<p>The fully qualified name of the parameter that you want to create or update.</p> <note> <p>You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.</p> </note> <p>The fully qualified name includes the complete hierarchy of the parameter path and name. For parameters in a hierarchy, you must include a leading forward slash character (/) when you create or reference a parameter. For example: <code>/Dev/DBServer/MySQL/db-string13</code> </p> <p>Naming Constraints:</p> <ul> <li> <p>Parameter names are case sensitive.</p> </li> <li> <p>A parameter name must be unique within an Amazon Web Services Region</p> </li> <li> <p>A parameter name can't be prefixed with \"<code>aws</code>\" or \"<code>ssm</code>\" (case-insensitive).</p> </li> <li> <p>Parameter names can include only the following symbols and letters: <code>a-zA-Z0-9_.-</code> </p> <p>In addition, the slash character ( / ) is used to delineate hierarchies in parameter names. For example: <code>/Dev/Production/East/Project-ABC/MyParameter</code> </p> </li> <li> <p>Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a <code>ValidationException</code> error.</p> </li> <li> <p>Parameter hierarchies are limited to a maximum depth of fifteen levels.</p> </li> </ul> <p>For additional information about valid values for parameter names, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-create.html\">Creating Systems Manager parameters</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> <note> <p>The reported maximum length of 2048 characters for a parameter name includes 1037 characters that are reserved for internal use by Systems Manager. The maximum length for a parameter name that you specify is 1011 characters.</p> <p>This count of 1011 characters includes the characters in the ARN that precede the name you specify. This ARN length will vary depending on your partition and Region. For example, the following 45 characters count toward the 1011 character maximum for a parameter created in the US East (Ohio) Region: <code>arn:aws:ssm:us-east-2:111122223333:parameter/</code>.</p> </note>"
         },
         "Description":{
           "shape":"ParameterDescription",
@@ -14567,11 +14727,11 @@
         },
         "Type":{
           "shape":"ParameterType",
-          "documentation":"<p>The type of parameter that you want to add to the system.</p> <note> <p> <code>SecureString</code> isn't currently supported for CloudFormation templates.</p> </note> <p>Items in a <code>StringList</code> must be separated by a comma (,). You can't use other punctuation or special character to escape items in the list. If you have a parameter value that requires a comma, then use the <code>String</code> data type.</p> <important> <p>Specifying a parameter type isn't required when updating a parameter. You must specify a parameter type when creating a parameter.</p> </important>"
+          "documentation":"<p>The type of parameter that you want to create.</p> <note> <p> <code>SecureString</code> isn't currently supported for CloudFormation templates.</p> </note> <p>Items in a <code>StringList</code> must be separated by a comma (,). You can't use other punctuation or special character to escape items in the list. If you have a parameter value that requires a comma, then use the <code>String</code> data type.</p> <important> <p>Specifying a parameter type isn't required when updating a parameter. You must specify a parameter type when creating a parameter.</p> </important>"
         },
         "KeyId":{
           "shape":"ParameterKeyId",
-          "documentation":"<p>The Key Management Service (KMS) ID that you want to use to encrypt a parameter. Use a custom key for better security. Required for parameters that use the <code>SecureString</code> data type.</p> <p>If you don't specify a key ID, the system uses the default key associated with your Amazon Web Services account which is not as secure as using a custom key.</p> <ul> <li> <p>To use a custom KMS key, choose the <code>SecureString</code> data type with the <code>Key ID</code> parameter.</p> </li> </ul>"
+          "documentation":"<p>The Key Management Service (KMS) ID that you want to use to encrypt a parameter. Use a custom key for better security. Required for parameters that use the <code>SecureString</code> data type.</p> <p>If you don't specify a key ID, the system uses the default key associated with your Amazon Web Services account, which is not as secure as using a custom key.</p> <ul> <li> <p>To use a custom KMS key, choose the <code>SecureString</code> data type with the <code>Key ID</code> parameter.</p> </li> </ul>"
         },
         "Overwrite":{
           "shape":"Boolean",
@@ -14941,8 +15101,7 @@
     },
     "RemoveTagsFromResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RequireType":{
       "type":"string",
@@ -15655,8 +15814,7 @@
     },
     "SendAutomationSignalResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SendCommandRequest":{
       "type":"structure",
@@ -15746,6 +15904,35 @@
         }
       }
     },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":[
+        "Message",
+        "QuotaCode",
+        "ServiceCode"
+      ],
+      "members":{
+        "Message":{"shape":"String"},
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>The unique ID of the resource referenced in the failed request.</p>"
+        },
+        "ResourceType":{
+          "shape":"String",
+          "documentation":"<p>The resource type of the resource referenced in the failed request.</p>"
+        },
+        "QuotaCode":{
+          "shape":"String",
+          "documentation":"<p>The quota code recognized by the Amazon Web Services Service Quotas service.</p>"
+        },
+        "ServiceCode":{
+          "shape":"String",
+          "documentation":"<p>The code for the Amazon Web Services service that owns the quota.</p>"
+        }
+      },
+      "documentation":"<p>The request exceeds the service quota. Service quotas, also referred to as limits, are the maximum number of service resources or operations for your Amazon Web Services account.</p>",
+      "exception":true
+    },
     "ServiceRole":{"type":"string"},
     "ServiceSetting":{
       "type":"structure",
@@ -15841,6 +16028,10 @@
         "MaxSessionDuration":{
           "shape":"MaxSessionDuration",
           "documentation":"<p>The maximum duration of a session before it terminates.</p>"
+        },
+        "AccessType":{
+          "shape":"AccessType",
+          "documentation":"<p> <code>Standard</code> access type is the default for Session Manager sessions. <code>JustInTime</code> is the access type for <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-just-in-time-node-access.html\">Just-in-time node access</a>.</p>"
         }
       },
       "documentation":"<p>Information about a Session Manager connection to a managed node.</p>"
@@ -15876,7 +16067,8 @@
         "Target",
         "Owner",
         "Status",
-        "SessionId"
+        "SessionId",
+        "AccessType"
       ]
     },
     "SessionFilterList":{
@@ -15981,6 +16173,10 @@
       "max":400,
       "min":1
     },
+    "SessionTokenType":{
+      "type":"string",
+      "sensitive":true
+    },
     "SeveritySummary":{
       "type":"structure",
       "members":{
@@ -16024,7 +16220,8 @@
         "Reject",
         "StartStep",
         "StopStep",
-        "Resume"
+        "Resume",
+        "Revoke"
       ]
     },
     "SnapshotDownloadUrl":{"type":"string"},
@@ -16056,6 +16253,36 @@
       "type":"string",
       "max":24000
     },
+    "StartAccessRequestRequest":{
+      "type":"structure",
+      "required":[
+        "Reason",
+        "Targets"
+      ],
+      "members":{
+        "Reason":{
+          "shape":"String1to256",
+          "documentation":"<p>A brief description explaining why you are requesting access to the node.</p>"
+        },
+        "Targets":{
+          "shape":"Targets",
+          "documentation":"<p>The node you are requesting access to.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Key-value pairs of metadata you want to assign to the access request.</p>"
+        }
+      }
+    },
+    "StartAccessRequestResponse":{
+      "type":"structure",
+      "members":{
+        "AccessRequestId":{
+          "shape":"AccessRequestId",
+          "documentation":"<p>The ID of the access request.</p>"
+        }
+      }
+    },
     "StartAssociationsOnceRequest":{
       "type":"structure",
       "required":["AssociationIds"],
@@ -16068,8 +16295,7 @@
     },
     "StartAssociationsOnceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartAutomationExecutionRequest":{
       "type":"structure",
@@ -16290,8 +16516,7 @@
     "StatusName":{"type":"string"},
     "StatusUnchanged":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The updated status is the same as the current status.</p>",
       "exception":true
     },
@@ -16478,8 +16703,7 @@
     },
     "StopAutomationExecutionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopType":{
       "type":"string",
@@ -16490,6 +16714,11 @@
     },
     "StreamUrl":{"type":"string"},
     "String":{"type":"string"},
+    "String1to256":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "StringDateTime":{
       "type":"string",
       "pattern":"^([\\-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d(?!:))?)?(\\17[0-5]\\d([\\.,]\\d)?)?([zZ]|([\\-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$"
@@ -16583,12 +16812,12 @@
         },
         "TargetLocationMaxConcurrency":{
           "shape":"MaxConcurrency",
-          "documentation":"<p>The maximum number of Amazon Web Services Regions and Amazon Web Services accounts allowed to run the Automation concurrently.</p>",
+          "documentation":"<p>The maximum number of Amazon Web Services Regions and Amazon Web Services accounts allowed to run the Automation concurrently. <code>TargetLocationMaxConcurrency</code> has a default value of 1.</p>",
           "box":true
         },
         "TargetLocationMaxErrors":{
           "shape":"MaxErrors",
-          "documentation":"<p>The maximum number of errors allowed before the system stops queueing additional Automation executions for the currently running Automation.</p>",
+          "documentation":"<p>The maximum number of errors allowed before the system stops queueing additional Automation executions for the currently running Automation. <code>TargetLocationMaxErrors</code> has a default value of 0.</p>",
           "box":true
         },
         "ExecutionRoleName":{
@@ -16602,7 +16831,7 @@
         },
         "IncludeChildOrganizationUnits":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether to include child organizational units (OUs) that are children of the targeted OUs. The default is <code>false</code>.</p>"
+          "documentation":"<p>Indicates whether to include child organizational units (OUs) that are children of the targeted OUs. The default is <code>false</code>.</p> <note> <p>This parameter is not supported by State Manager.</p> </note>"
         },
         "ExcludeAccounts":{
           "shape":"ExcludeAccounts",
@@ -16731,6 +16960,23 @@
         }
       }
     },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{"shape":"String"},
+        "QuotaCode":{
+          "shape":"String",
+          "documentation":"<p>The quota code recognized by the Amazon Web Services Service Quotas service.</p>"
+        },
+        "ServiceCode":{
+          "shape":"String",
+          "documentation":"<p>The code for the Amazon Web Services service that owns the quota.</p>"
+        }
+      },
+      "documentation":"<p>The request or operation couldn't be performed because the service is throttling requests.</p>",
+      "exception":true
+    },
     "TimeoutSeconds":{
       "type":"integer",
       "max":2592000,
@@ -16743,8 +16989,7 @@
     },
     "TooManyTagsError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The <code>Targets</code> parameter includes too many tags. Remove one or more tags and try the command again.</p>",
       "exception":true
     },
@@ -16932,15 +17177,15 @@
         },
         "ApplyOnlyAtCronInterval":{
           "shape":"ApplyOnlyAtCronInterval",
-          "documentation":"<p>By default, when you update an association, the system runs it immediately after it is updated and then according to the schedule you specified. Specify this option if you don't want an association to run immediately after you update it. This parameter isn't supported for rate expressions.</p> <p>If you chose this option when you created an association and later you edit that association or you make changes to the SSM document on which that association is based (by using the Documents page in the console), State Manager applies the association at the next specified cron interval. For example, if you chose the <code>Latest</code> version of an SSM document when you created an association and you edit the association by choosing a different document version on the Documents page, State Manager applies the association at the next specified cron interval if you previously selected this option. If this option wasn't selected, State Manager immediately runs the association.</p> <p>You can reset this option. To do so, specify the <code>no-apply-only-at-cron-interval</code> parameter when you update the association from the command line. This parameter forces the association to run immediately after updating it and according to the interval specified.</p>"
+          "documentation":"<p>By default, when you update an association, the system runs it immediately after it is updated and then according to the schedule you specified. Specify <code>true</code> for <code>ApplyOnlyAtCronInterval</code> if you want the association to run only according to the schedule you specified.</p> <p>If you chose this option when you created an association and later you edit that association or you make changes to the Automation runbook or SSM document on which that association is based, State Manager applies the association at the next specified cron interval. For example, if you chose the <code>Latest</code> version of an SSM document when you created an association and you edit the association by choosing a different document version on the Documents page, State Manager applies the association at the next specified cron interval if you previously set <code>ApplyOnlyAtCronInterval</code> to <code>true</code>. If this option wasn't selected, State Manager immediately runs the association.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#state-manager-about-scheduling\">Understanding when associations are applied to resources</a> and <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/state-manager-about.html#runbook-target-updates\">About target updates with Automation runbooks</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> <p>This parameter isn't supported for rate expressions.</p> <p>You can reset this parameter. To do so, specify the <code>no-apply-only-at-cron-interval</code> parameter when you update the association from the command line. This parameter forces the association to run immediately after updating it and according to the interval specified.</p>"
         },
         "CalendarNames":{
           "shape":"CalendarNameOrARNList",
-          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a>.</p>"
+          "documentation":"<p>The names or Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-change-calendar\">Amazon Web Services Systems Manager Change Calendar</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p>"
         },
         "TargetLocations":{
           "shape":"TargetLocations",
-          "documentation":"<p>A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to update an association in multiple Regions and multiple accounts.</p>"
+          "documentation":"<p>A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to update an association in multiple Regions and multiple accounts.</p> <note> <p>The <code>IncludeChildOrganizationUnits</code> parameter is not supported by State Manager.</p> </note>"
         },
         "ScheduleOffset":{
           "shape":"ScheduleOffset",
@@ -17049,8 +17294,7 @@
     },
     "UpdateDocumentMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDocumentRequest":{
       "type":"structure",
@@ -17448,8 +17692,7 @@
     },
     "UpdateManagedInstanceRoleResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOpsItemRequest":{
       "type":"structure",
@@ -17523,8 +17766,7 @@
     },
     "UpdateOpsItemResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateOpsMetadataRequest":{
       "type":"structure",
@@ -17592,7 +17834,7 @@
         },
         "RejectedPatchesAction":{
           "shape":"PatchAction",
-          "documentation":"<p>The action for Patch Manager to take on patches included in the <code>RejectedPackages</code> list.</p> <dl> <dt>ALLOW_AS_DEPENDENCY</dt> <dd> <p> <b>Linux and macOS</b>: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as <code>INSTALLED_OTHER</code>. This is the default action if no option is specified.</p> <p> <b>Windows Server</b>: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as <code>INSTALLED_OTHER</code>. Any package not already installed on the node is skipped. This is the default action if no option is specified.</p> </dd> <dt>BLOCK</dt> <dd> <p> <b>All OSs</b>: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as <code>INSTALLED_REJECTED</code>.</p> </dd> </dl>"
+          "documentation":"<p>The action for Patch Manager to take on patches included in the <code>RejectedPackages</code> list.</p> <dl> <dt>ALLOW_AS_DEPENDENCY</dt> <dd> <p> <b>Linux and macOS</b>: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as <code>INSTALLED_OTHER</code>. This is the default action if no option is specified.</p> <p> <b>Windows Server</b>: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as <code>INSTALLED_OTHER</code>. Any package not already installed on the node is skipped. This is the default action if no option is specified.</p> </dd> <dt>BLOCK</dt> <dd> <p> <b>All OSs</b>: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. </p> <p>State value assignment for patch compliance:</p> <ul> <li> <p>If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as <code>INSTALLED_REJECTED</code>.</p> </li> <li> <p>If an update attempts to install a dependency package that is now rejected by the baseline, when previous versions of the package were not rejected, the package being updated is reported as <code>MISSING</code> for <code>SCAN</code> operations and as <code>FAILED</code> for <code>INSTALL</code> operations.</p> </li> </ul> </dd> </dl>"
         },
         "Description":{
           "shape":"BaselineDescription",
@@ -17602,6 +17844,10 @@
           "shape":"PatchSourceList",
           "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.</p>"
         },
+        "AvailableSecurityUpdatesComplianceStatus":{
+          "shape":"PatchComplianceStatus",
+          "documentation":"<p>Indicates the status to be assigned to security patches that are available but not approved because they don't meet the installation criteria specified in the patch baseline.</p> <p>Example scenario: Security patches that you might want installed can be skipped if you have specified a long period to wait after a patch is released before installation. If an update to the patch is released during your specified waiting period, the waiting period for installing the patch starts over. If the waiting period is too long, multiple versions of the patch could be released but never installed.</p> <p>Supported for Windows Server managed nodes only.</p>"
+        },
         "Replace":{
           "shape":"Boolean",
           "documentation":"<p>If True, then all fields that are required by the <a>CreatePatchBaseline</a> operation are also required for this API request. Optional fields that aren't specified are set to null.</p>",
@@ -17668,6 +17914,10 @@
         "Sources":{
           "shape":"PatchSourceList",
           "documentation":"<p>Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.</p>"
+        },
+        "AvailableSecurityUpdatesComplianceStatus":{
+          "shape":"PatchComplianceStatus",
+          "documentation":"<p>Indicates the compliance status of managed nodes for which security-related patches are available but were not approved. This preference is specified when the <code>CreatePatchBaseline</code> or <code>UpdatePatchBaseline</code> commands are run.</p> <p>Applies to Windows Server managed nodes only.</p>"
         }
       }
     },
@@ -17695,8 +17945,7 @@
     },
     "UpdateResourceDataSyncResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateServiceSettingRequest":{
       "type":"structure",
@@ -17718,8 +17967,7 @@
     },
     "UpdateServiceSettingResult":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The result body of the UpdateServiceSetting API operation.</p>"
     },
     "Url":{"type":"string"},
@@ -17749,5 +17997,5 @@
       "pattern":"^[0-9]{1,6}(\\.[0-9]{1,6}){2,3}$"
     }
   },
-  "documentation":"<p>Amazon Web Services Systems Manager is the operations hub for your Amazon Web Services applications and resources and a secure end-to-end management solution for hybrid cloud environments that enables safe and secure operations at scale.</p> <p>This reference is intended to be used with the <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/\">Amazon Web Services Systems Manager User Guide</a>. To get started, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html\">Setting up Amazon Web Services Systems Manager</a>.</p> <p class=\"title\"> <b>Related resources</b> </p> <ul> <li> <p>For information about each of the tools that comprise Systems Manager, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-tools.html\">Using Systems Manager tools</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </li> <li> <p>For details about predefined runbooks for Automation, a tool in Amazon Web Services Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html\">Systems Manager Automation runbook reference</a> </i>.</p> </li> <li> <p>For information about AppConfig, a tool in Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/appconfig/latest/userguide/\">AppConfig User Guide</a> </i> and the <i> <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/\">AppConfig API Reference</a> </i>.</p> </li> <li> <p>For information about Incident Manager, a tool in Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/incident-manager/latest/userguide/\">Systems Manager Incident Manager User Guide</a> </i> and the <i> <a href=\"https://docs.aws.amazon.com/incident-manager/latest/APIReference/\">Systems Manager Incident Manager API Reference</a> </i>.</p> </li> </ul>"
+  "documentation":"<p>Amazon Web Services Systems Manager is the operations hub for your Amazon Web Services applications and resources and a secure end-to-end management solution for hybrid cloud environments that enables safe and secure operations at scale.</p> <p>This reference is intended to be used with the <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/\">Amazon Web Services Systems Manager User Guide</a>. To get started, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up-console.html\">Setting up Amazon Web Services Systems Manager</a>.</p> <p class=\"title\"> <b>Related resources</b> </p> <ul> <li> <p>For information about each of the tools that comprise Systems Manager, see <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-tools.html\">Using Systems Manager tools</a> in the <i>Amazon Web Services Systems Manager User Guide</i>.</p> </li> <li> <p>For details about predefined runbooks for Automation, a tool in Amazon Web Services Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html\">Systems Manager Automation Runbook Reference</a> </i>.</p> </li> <li> <p>For information about AppConfig, a tool in Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/appconfig/latest/userguide/\">AppConfig User Guide</a> </i> and the <i> <a href=\"https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/\">AppConfig API Reference</a> </i>.</p> </li> <li> <p>For information about Incident Manager, a tool in Systems Manager, see the <i> <a href=\"https://docs.aws.amazon.com/incident-manager/latest/userguide/\">Systems Manager Incident Manager User Guide</a> </i> and the <i> <a href=\"https://docs.aws.amazon.com/incident-manager/latest/APIReference/\">Systems Manager Incident Manager API Reference</a> </i>.</p> </li> </ul>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-contacts/2021-05-03/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-contacts/2021-05-03/service-2.json 2.31.35-1/awscli/botocore/data/ssm-contacts/2021-05-03/service-2.json
--- 2.23.6-1/awscli/botocore/data/ssm-contacts/2021-05-03/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-contacts/2021-05-03/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,13 +5,15 @@
     "endpointPrefix":"ssm-contacts",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"SSM Contacts",
     "serviceFullName":"AWS Systems Manager Incident Manager Contacts",
     "serviceId":"SSM Contacts",
     "signatureVersion":"v4",
     "signingName":"ssm-contacts",
     "targetPrefix":"SSMContacts",
-    "uid":"ssm-contacts-2021-05-03"
+    "uid":"ssm-contacts-2021-05-03",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AcceptPage":{
@@ -154,7 +156,7 @@
         {"shape":"ConflictException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>To remove a contact from Incident Manager, you can delete the contact. Deleting a contact removes them from all escalation plans and related response plans. Deleting an escalation plan removes it from all related response plans. You will have to recreate the contact and its contact channels before you can use it again.</p>"
+      "documentation":"<p>To remove a contact from Incident Manager, you can delete the contact. However, deleting a contact does not remove it from escalation plans and related response plans. Deleting an escalation plan also does not remove it from all related response plans. To modify an escalation plan, we recommend using the <a>UpdateContact</a> action to specify a different existing contact.</p>"
     },
     "DeleteContactChannel":{
       "name":"DeleteContactChannel",
@@ -171,7 +173,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>To no longer receive engagements on a contact channel, you can delete the channel from a contact. Deleting the contact channel removes it from the contact's engagement plan. If you delete the only contact channel for a contact, you won't be able to engage that contact during an incident.</p>"
+      "documentation":"<p>To stop receiving engagements on a contact channel, you can delete the channel from a contact. Deleting the contact channel does not remove it from the contact's engagement plan, but the stage that includes the channel will be ignored. If you delete the only contact channel for a contact, you'll no longer be able to engage that contact during an incident.</p>"
     },
     "DeleteRotation":{
       "name":"DeleteRotation",
@@ -532,7 +534,7 @@
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the tags of an escalation plan or contact.</p>"
+      "documentation":"<p>Lists the tags of a contact, escalation plan, rotation, or on-call schedule.</p>"
     },
     "PutContactPolicy":{
       "name":"PutContactPolicy",
@@ -748,8 +750,7 @@
     },
     "AcceptPageResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AcceptType":{
       "type":"string",
@@ -786,8 +787,7 @@
     },
     "ActivateContactChannelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ActivationCode":{
       "type":"string",
@@ -823,7 +823,7 @@
         },
         "RetryIntervalInMinutes":{
           "shape":"RetryIntervalInMinutes",
-          "documentation":"<p>The number of minutes to wait to retry sending engagement in the case the engagement initially fails.</p>"
+          "documentation":"<p>The number of minutes to wait before retrying to send engagement if the engagement initially failed.</p>"
         }
       },
       "documentation":"<p>Information about the contact channel that Incident Manager uses to engage the contact.</p>"
@@ -883,7 +883,7 @@
         },
         "Type":{
           "shape":"ContactType",
-          "documentation":"<p>Refers to the type of contact. A single contact is type <code>PERSONAL</code> and an escalation plan is type <code>ESCALATION</code>.</p>"
+          "documentation":"<p>The type of contact.</p> <ul> <li> <p> <code>PERSONAL</code>: A single, individual contact.</p> </li> <li> <p> <code>ESCALATION</code>: An escalation plan.</p> </li> <li> <p> <code>ONCALL_SCHEDULE</code>: An on-call schedule.</p> </li> </ul>"
         }
       },
       "documentation":"<p>A personal contact or escalation plan that Incident Manager engages during an incident.</p>"
@@ -1066,7 +1066,7 @@
         },
         "Type":{
           "shape":"ContactType",
-          "documentation":"<p>To create an escalation plan use <code>ESCALATION</code>. To create a contact use <code>PERSONAL</code>.</p>"
+          "documentation":"<p>The type of contact to create.</p> <ul> <li> <p> <code>PERSONAL</code>: A single, individual contact.</p> </li> <li> <p> <code>ESCALATION</code>: An escalation plan.</p> </li> <li> <p> <code>ONCALL_SCHEDULE</code>: An on-call schedule.</p> </li> </ul>"
         },
         "Plan":{
           "shape":"Plan",
@@ -1149,7 +1149,7 @@
         },
         "ContactIds":{
           "shape":"RotationContactsArnList",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the contacts to add to the rotation.</p> <p>The order that you list the contacts in is their shift order in the rotation schedule. To change the order of the contact's shifts, use the <a>UpdateRotation</a> operation.</p>"
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the contacts to add to the rotation.</p> <note> <p>Only the <code>PERSONAL</code> contact type is supported. The contact types <code>ESCALATION</code> and <code>ONCALL_SCHEDULE</code> are not supported for this operation. </p> </note> <p>The order that you list the contacts in is their shift order in the rotation schedule. To change the order of the contact's shifts, use the <a>UpdateRotation</a> operation.</p>"
         },
         "StartTime":{
           "shape":"DateTime",
@@ -1157,7 +1157,7 @@
         },
         "TimeZoneId":{
           "shape":"TimeZoneId",
-          "documentation":"<p>The time zone to base the rotation’s activity on in Internet Assigned Numbers Authority (IANA) format. For example: \"America/Los_Angeles\", \"UTC\", or \"Asia/Seoul\". For more information, see the <a href=\"https://www.iana.org/time-zones\">Time Zone Database</a> on the IANA website.</p> <note> <p>Designators for time zones that don’t support Daylight Savings Time rules, such as Pacific Standard Time (PST) and Pacific Daylight Time (PDT), are not supported.</p> </note>"
+          "documentation":"<p>The time zone to base the rotation’s activity on in Internet Assigned Numbers Authority (IANA) format. For example: \"America/Los_Angeles\", \"UTC\", or \"Asia/Seoul\". For more information, see the <a href=\"https://www.iana.org/time-zones\">Time Zone Database</a> on the IANA website.</p> <note> <p>Designators for time zones that don’t support Daylight Savings Time rules, such as Pacific Standard Time (PST), are not supported.</p> </note>"
         },
         "Recurrence":{
           "shape":"RecurrenceSettings",
@@ -1226,8 +1226,7 @@
     },
     "DeactivateContactChannelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeferActivation":{
       "type":"boolean",
@@ -1245,8 +1244,7 @@
     },
     "DeleteContactChannelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteContactRequest":{
       "type":"structure",
@@ -1260,8 +1258,7 @@
     },
     "DeleteContactResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRotationOverrideRequest":{
       "type":"structure",
@@ -1282,8 +1279,7 @@
     },
     "DeleteRotationOverrideResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRotationRequest":{
       "type":"structure",
@@ -1297,8 +1293,7 @@
     },
     "DeleteRotationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DependentEntity":{
       "type":"structure",
@@ -1596,7 +1591,7 @@
         },
         "Type":{
           "shape":"ContactType",
-          "documentation":"<p>The type of contact, either <code>PERSONAL</code> or <code>ESCALATION</code>.</p>"
+          "documentation":"<p>The type of contact.</p>"
         },
         "Plan":{
           "shape":"Plan",
@@ -1799,7 +1794,7 @@
         },
         "Type":{
           "shape":"ContactType",
-          "documentation":"<p>The type of contact. A contact is type <code>PERSONAL</code> and an escalation plan is type <code>ESCALATION</code>.</p>"
+          "documentation":"<p>The type of contact.</p>"
         }
       }
     },
@@ -2164,7 +2159,7 @@
       "members":{
         "ResourceARN":{
           "shape":"AmazonResourceName",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the contact or escalation plan.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the contact, escalation plan, rotation, or on-call schedule.</p>"
         }
       }
     },
@@ -2346,8 +2341,7 @@
     },
     "PutContactPolicyResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Receipt":{
       "type":"structure",
@@ -2421,12 +2415,12 @@
         },
         "NumberOfOnCalls":{
           "shape":"NumberOfOnCalls",
-          "documentation":"<p>The number of contacts, or shift team members designated to be on call concurrently during a shift. For example, in an on-call schedule containing ten contacts, a value of <code>2</code> designates that two of them are on call at any given time.</p>",
+          "documentation":"<p>The number of contacts, or shift team members designated to be on call concurrently during a shift. For example, in an on-call schedule that contains ten contacts, a value of <code>2</code> designates that two of them are on call at any given time.</p>",
           "box":true
         },
         "ShiftCoverages":{
           "shape":"ShiftCoveragesMap",
-          "documentation":"<p>Information about the days of the week included in on-call rotation coverage.</p>"
+          "documentation":"<p>Information about the days of the week that the on-call rotation coverage includes.</p>"
         },
         "RecurrenceMultiplier":{
           "shape":"RecurrenceMultiplier",
@@ -2642,8 +2636,7 @@
     },
     "SendActivationCodeResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Sender":{
       "type":"string",
@@ -2822,8 +2815,7 @@
     },
     "StopEngagementResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopReason":{
       "type":"string",
@@ -2882,8 +2874,7 @@
     },
     "TagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2902,11 +2893,11 @@
       "members":{
         "ChannelTargetInfo":{
           "shape":"ChannelTargetInfo",
-          "documentation":"<p>Information about the contact channel Incident Manager is engaging.</p>"
+          "documentation":"<p>Information about the contact channel that Incident Manager engages.</p>"
         },
         "ContactTargetInfo":{
           "shape":"ContactTargetInfo",
-          "documentation":"<p>Information about the contact that Incident Manager is engaging.</p>"
+          "documentation":"<p>Information about the contact that Incident Manager engages.</p>"
         }
       },
       "documentation":"<p>The contact or contact channel that's being engaged.</p>"
@@ -2975,8 +2966,7 @@
     },
     "UntagResourceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactChannelRequest":{
       "type":"structure",
@@ -2998,8 +2988,7 @@
     },
     "UpdateContactChannelResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateContactRequest":{
       "type":"structure",
@@ -3021,8 +3010,7 @@
     },
     "UpdateContactResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateRotationRequest":{
       "type":"structure",
@@ -3037,7 +3025,7 @@
         },
         "ContactIds":{
           "shape":"RotationContactsArnList",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the contacts to include in the updated rotation. </p> <p>The order in which you list the contacts is their shift order in the rotation schedule.</p>"
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the contacts to include in the updated rotation. </p> <note> <p>Only the <code>PERSONAL</code> contact type is supported. The contact types <code>ESCALATION</code> and <code>ONCALL_SCHEDULE</code> are not supported for this operation. </p> </note> <p>The order in which you list the contacts is their shift order in the rotation schedule.</p>"
         },
         "StartTime":{
           "shape":"DateTime",
@@ -3045,7 +3033,7 @@
         },
         "TimeZoneId":{
           "shape":"TimeZoneId",
-          "documentation":"<p>The time zone to base the updated rotation’s activity on, in Internet Assigned Numbers Authority (IANA) format. For example: \"America/Los_Angeles\", \"UTC\", or \"Asia/Seoul\". For more information, see the <a href=\"https://www.iana.org/time-zones\">Time Zone Database</a> on the IANA website.</p> <note> <p>Designators for time zones that don’t support Daylight Savings Time Rules, such as Pacific Standard Time (PST) and Pacific Daylight Time (PDT), aren't supported.</p> </note>"
+          "documentation":"<p>The time zone to base the updated rotation’s activity on, in Internet Assigned Numbers Authority (IANA) format. For example: \"America/Los_Angeles\", \"UTC\", or \"Asia/Seoul\". For more information, see the <a href=\"https://www.iana.org/time-zones\">Time Zone Database</a> on the IANA website.</p> <note> <p>Designators for time zones that don’t support Daylight Savings Time Rules, such as Pacific Standard Time (PST), aren't supported.</p> </note>"
         },
         "Recurrence":{
           "shape":"RecurrenceSettings",
@@ -3055,8 +3043,7 @@
     },
     "UpdateRotationResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Uuid":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,350 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        },
+        "UseDualStack": {
+            "builtIn": "AWS::UseDualStack",
+            "required": true,
+            "default": false,
+            "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
+            "type": "boolean"
+        },
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
+                                },
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
+                        }
+                    ],
+                    "type": "tree"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://ssm-guiconnect-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
+                                                        },
+                                                        true
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://ssm-guiconnect-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "rules": [
+                                                        {
+                                                            "conditions": [],
+                                                            "endpoint": {
+                                                                "url": "https://ssm-guiconnect.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                                "properties": {},
+                                                                "headers": {}
+                                                            },
+                                                            "type": "endpoint"
+                                                        }
+                                                    ],
+                                                    "type": "tree"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [],
+                                    "rules": [
+                                        {
+                                            "conditions": [],
+                                            "endpoint": {
+                                                "url": "https://ssm-guiconnect.{Region}.{PartitionResult#dnsSuffix}",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/paginators-1.json 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,3 @@
+{
+  "pagination": {}
+}
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/service-2.json 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-guiconnect/2021-05-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,303 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2021-05-01",
+    "endpointPrefix":"ssm-guiconnect",
+    "jsonVersion":"1.1",
+    "protocol":"rest-json",
+    "protocols":["rest-json"],
+    "serviceFullName":"AWS SSM-GUIConnect",
+    "serviceId":"SSM GuiConnect",
+    "signatureVersion":"v4",
+    "signingName":"ssm-guiconnect",
+    "uid":"ssm-guiconnect-2021-05-01",
+    "auth":["aws.auth#sigv4"]
+  },
+  "operations":{
+    "DeleteConnectionRecordingPreferences":{
+      "name":"DeleteConnectionRecordingPreferences",
+      "http":{
+        "method":"POST",
+        "requestUri":"/DeleteConnectionRecordingPreferences",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteConnectionRecordingPreferencesRequest"},
+      "output":{"shape":"DeleteConnectionRecordingPreferencesResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Deletes the preferences for recording RDP connections.</p>",
+      "idempotent":true
+    },
+    "GetConnectionRecordingPreferences":{
+      "name":"GetConnectionRecordingPreferences",
+      "http":{
+        "method":"POST",
+        "requestUri":"/GetConnectionRecordingPreferences",
+        "responseCode":200
+      },
+      "output":{"shape":"GetConnectionRecordingPreferencesResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Returns the preferences specified for recording RDP connections in the requesting Amazon Web Services account and Amazon Web Services Region.</p>"
+    },
+    "UpdateConnectionRecordingPreferences":{
+      "name":"UpdateConnectionRecordingPreferences",
+      "http":{
+        "method":"POST",
+        "requestUri":"/UpdateConnectionRecordingPreferences",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateConnectionRecordingPreferencesRequest"},
+      "output":{"shape":"UpdateConnectionRecordingPreferencesResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Updates the preferences for recording RDP connections.</p>",
+      "idempotent":true
+    }
+  },
+  "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
+      "error":{
+        "httpStatusCode":403,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "AccountId":{
+      "type":"string",
+      "pattern":"^[0-9]{12}$"
+    },
+    "BucketName":{
+      "type":"string",
+      "pattern":"(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)"
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>An error occurred due to a conflict.</p>",
+      "error":{
+        "httpStatusCode":409,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ConnectionRecordingPreferences":{
+      "type":"structure",
+      "required":[
+        "KMSKeyArn",
+        "RecordingDestinations"
+      ],
+      "members":{
+        "KMSKeyArn":{
+          "shape":"ConnectionRecordingPreferencesKMSKeyArnString",
+          "documentation":"<p>The ARN of a KMS key that is used to encrypt data while it is being processed by the service. This key must exist in the same Amazon Web Services Region as the node you start an RDP connection to.</p>"
+        },
+        "RecordingDestinations":{
+          "shape":"RecordingDestinations",
+          "documentation":"<p>Determines where recordings of RDP connections are stored.</p>"
+        }
+      },
+      "documentation":"<p>The set of preferences used for recording RDP connections in the requesting Amazon Web Services account and Amazon Web Services Region. This includes details such as which S3 bucket recordings are stored in.</p>"
+    },
+    "ConnectionRecordingPreferencesKMSKeyArnString":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
+    "DeleteConnectionRecordingPreferencesRequest":{
+      "type":"structure",
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>User-provided idempotency token.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "DeleteConnectionRecordingPreferencesResponse":{
+      "type":"structure",
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Service-provided idempotency token.</p>"
+        }
+      }
+    },
+    "ErrorMessage":{"type":"string"},
+    "GetConnectionRecordingPreferencesResponse":{
+      "type":"structure",
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Service-provided idempotency token.</p>"
+        },
+        "ConnectionRecordingPreferences":{
+          "shape":"ConnectionRecordingPreferences",
+          "documentation":"<p>The set of preferences used for recording RDP connections in the requesting Amazon Web Services account and Amazon Web Services Region. This includes details such as which S3 bucket recordings are stored in.</p>"
+        }
+      }
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The request processing has failed because of an unknown error, exception or failure.</p>",
+      "error":{"httpStatusCode":500},
+      "exception":true,
+      "fault":true
+    },
+    "RecordingDestinations":{
+      "type":"structure",
+      "required":["S3Buckets"],
+      "members":{
+        "S3Buckets":{
+          "shape":"S3Buckets",
+          "documentation":"<p>The S3 bucket where RDP connection recordings are stored.</p>"
+        }
+      },
+      "documentation":"<p>Determines where recordings of RDP connections are stored.</p>"
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The resource could not be found.</p>",
+      "error":{
+        "httpStatusCode":404,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "S3Bucket":{
+      "type":"structure",
+      "required":[
+        "BucketName",
+        "BucketOwner"
+      ],
+      "members":{
+        "BucketName":{
+          "shape":"BucketName",
+          "documentation":"<p>The name of the S3 bucket where RDP connection recordings are stored.</p>"
+        },
+        "BucketOwner":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account number that owns the S3 bucket.</p>"
+        }
+      },
+      "documentation":"<p>The S3 bucket where RDP connection recordings are stored.</p>"
+    },
+    "S3Buckets":{
+      "type":"list",
+      "member":{"shape":"S3Bucket"},
+      "max":1,
+      "min":1
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>Your request exceeds a service quota.</p>",
+      "error":{
+        "httpStatusCode":402,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The request was denied due to request throttling.</p>",
+      "error":{
+        "httpStatusCode":429,
+        "senderFault":true
+      },
+      "exception":true
+    },
+    "UpdateConnectionRecordingPreferencesRequest":{
+      "type":"structure",
+      "required":["ConnectionRecordingPreferences"],
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>User-provided idempotency token.</p>",
+          "idempotencyToken":true
+        },
+        "ConnectionRecordingPreferences":{
+          "shape":"ConnectionRecordingPreferences",
+          "documentation":"<p>The set of preferences used for recording RDP connections in the requesting Amazon Web Services account and Amazon Web Services Region. This includes details such as which S3 bucket recordings are stored in.</p>"
+        }
+      }
+    },
+    "UpdateConnectionRecordingPreferencesResponse":{
+      "type":"structure",
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Service-provided idempotency token.</p>"
+        },
+        "ConnectionRecordingPreferences":{
+          "shape":"ConnectionRecordingPreferences",
+          "documentation":"<p>The set of preferences used for recording RDP connections in the requesting Amazon Web Services account and Amazon Web Services Region. This includes details such as which S3 bucket recordings are stored in.</p>"
+        }
+      }
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>The input fails to satisfy the constraints specified by an AWS service.</p>",
+      "error":{
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    }
+  },
+  "documentation":"<p><fullname>AWS Systems Manager GUI Connect</fullname> <p>Systems Manager GUI Connect, a component of Fleet Manager, lets you connect to your Window Server-type Amazon Elastic Compute Cloud (Amazon EC2) instances using the Remote Desktop Protocol (RDP). GUI Connect, which is powered by <a href=\"https://docs.aws.amazon.com/dcv/latest/adminguide/what-is-dcv.html\">Amazon DCV</a>, provides you with secure connectivity to your Windows Server instances directly from the Systems Manager console. You can have up to four simultaneous connections in a single browser window. In the console, GUI Connect is also referred to as Fleet Manager Remote Desktop.</p> <p>This reference is intended to be used with the <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/\"> <i>Amazon Web Services Systems Manager User Guide</i> </a>. To get started, see the following user guide topics:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html\">Setting up Amazon Web Services Systems Manager</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-rdp.html\">Connect to a Windows Server managed instance using Remote Desktop</a> </p> </li> </ul></p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-incidents/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-quicksetup/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm-quicksetup/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-quicksetup/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-quicksetup/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/paginators-1.json 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,6 +29,30 @@
       "output_token": "NextToken",
       "limit_key": "MaxResults",
       "result_key": "OperationEvents"
+    },
+    "ListConfigurationCheckDefinitions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ConfigurationChecks"
+    },
+    "ListConfigurationCheckOperations": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "ConfigurationCheckOperations"
+    },
+    "ListSubCheckResults": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "SubCheckResults"
+    },
+    "ListSubCheckRuleResults": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "RuleResults"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/ssm-sap/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/ssm-sap/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -77,6 +77,21 @@
       ],
       "documentation":"<p>Gets the component of an application registered with AWS Systems Manager for SAP.</p>"
     },
+    "GetConfigurationCheckOperation":{
+      "name":"GetConfigurationCheckOperation",
+      "http":{
+        "method":"POST",
+        "requestUri":"/get-configuration-check-operation",
+        "responseCode":200
+      },
+      "input":{"shape":"GetConfigurationCheckOperationInput"},
+      "output":{"shape":"GetConfigurationCheckOperationOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Gets the details of a configuration check operation by specifying the operation ID.</p>"
+    },
     "GetDatabase":{
       "name":"GetDatabase",
       "http":{
@@ -156,6 +171,37 @@
       ],
       "documentation":"<p>Lists all the components registered with AWS Systems Manager for SAP.</p>"
     },
+    "ListConfigurationCheckDefinitions":{
+      "name":"ListConfigurationCheckDefinitions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/list-configuration-check-definitions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListConfigurationCheckDefinitionsInput"},
+      "output":{"shape":"ListConfigurationCheckDefinitionsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists all configuration check types supported by AWS Systems Manager for SAP.</p>"
+    },
+    "ListConfigurationCheckOperations":{
+      "name":"ListConfigurationCheckOperations",
+      "http":{
+        "method":"POST",
+        "requestUri":"/list-configuration-check-operations",
+        "responseCode":200
+      },
+      "input":{"shape":"ListConfigurationCheckOperationsInput"},
+      "output":{"shape":"ListConfigurationCheckOperationsOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the configuration check operations performed by AWS Systems Manager for SAP.</p>"
+    },
     "ListDatabases":{
       "name":"ListDatabases",
       "http":{
@@ -202,6 +248,36 @@
       ],
       "documentation":"<p>Lists the operations performed by AWS Systems Manager for SAP.</p>"
     },
+    "ListSubCheckResults":{
+      "name":"ListSubCheckResults",
+      "http":{
+        "method":"POST",
+        "requestUri":"/list-sub-check-results",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSubCheckResultsInput"},
+      "output":{"shape":"ListSubCheckResultsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the sub-check results of a specified configuration check operation.</p>"
+    },
+    "ListSubCheckRuleResults":{
+      "name":"ListSubCheckRuleResults",
+      "http":{
+        "method":"POST",
+        "requestUri":"/list-sub-check-rule-results",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSubCheckRuleResultsInput"},
+      "output":{"shape":"ListSubCheckRuleResultsOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Lists the rules of a specified sub-check belonging to a configuration check operation.</p>"
+    },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
       "http":{
@@ -262,8 +338,8 @@
       "output":{"shape":"StartApplicationOutput"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Request is an operation which starts an application.</p> <p>Parameter <code>ApplicationId</code> is required.</p>"
@@ -286,6 +362,23 @@
       ],
       "documentation":"<p>Refreshes a registered application.</p>"
     },
+    "StartConfigurationChecks":{
+      "name":"StartConfigurationChecks",
+      "http":{
+        "method":"POST",
+        "requestUri":"/start-configuration-checks",
+        "responseCode":200
+      },
+      "input":{"shape":"StartConfigurationChecksInput"},
+      "output":{"shape":"StartConfigurationChecksOutput"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Initiates configuration check operations against a specified application.</p>"
+    },
     "StopApplication":{
       "name":"StopApplication",
       "http":{
@@ -297,8 +390,8 @@
       "output":{"shape":"StopApplicationOutput"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"ValidationException"},
         {"shape":"ConflictException"},
+        {"shape":"ValidationException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Request is an operation to stop an application.</p> <p>Parameter <code>ApplicationId</code> is required. Parameters <code>StopConnectedEntity</code> and <code>IncludeEc2InstanceShutdown</code> are optional.</p>"
@@ -514,6 +607,10 @@
         "SAP_ABAP"
       ]
     },
+    "ApplicationTypeList":{
+      "type":"list",
+      "member":{"shape":"ApplicationType"}
+    },
     "Arn":{
       "type":"string",
       "pattern":"arn:(.+:){2,4}.+$|^arn:(.+:){1,3}.+\\/.+"
@@ -764,6 +861,101 @@
         "ERS"
       ]
     },
+    "ConfigurationCheckDefinition":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"ConfigurationCheckType",
+          "documentation":"<p>The unique identifier of the configuration check.</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the configuration check.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of what the configuration check validates.</p>"
+        },
+        "ApplicableApplicationTypes":{
+          "shape":"ApplicationTypeList",
+          "documentation":"<p>The list of SSMSAP application types that this configuration check can be evaluated against.</p>"
+        }
+      },
+      "documentation":"<p>Represents a configuration check definition supported by AWS Systems Manager for SAP.</p>"
+    },
+    "ConfigurationCheckDefinitionList":{
+      "type":"list",
+      "member":{"shape":"ConfigurationCheckDefinition"}
+    },
+    "ConfigurationCheckOperation":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"OperationId",
+          "documentation":"<p>The unique identifier of the configuration check operation.</p>"
+        },
+        "ApplicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The ID of the application against which the configuration check was performed.</p>"
+        },
+        "Status":{
+          "shape":"OperationStatus",
+          "documentation":"<p>The current status of the configuration check operation.</p>"
+        },
+        "StatusMessage":{
+          "shape":"String",
+          "documentation":"<p>A message providing additional details about the status of the configuration check operation.</p>"
+        },
+        "ConfigurationCheckId":{
+          "shape":"ConfigurationCheckType",
+          "documentation":"<p>The unique identifier of the configuration check that was performed.</p>"
+        },
+        "ConfigurationCheckName":{
+          "shape":"String",
+          "documentation":"<p>The name of the configuration check that was performed.</p>"
+        },
+        "ConfigurationCheckDescription":{
+          "shape":"String",
+          "documentation":"<p>A description of the configuration check that was performed.</p>"
+        },
+        "StartTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the configuration check operation started.</p>"
+        },
+        "EndTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the configuration check operation completed.</p>"
+        },
+        "RuleStatusCounts":{
+          "shape":"RuleStatusCounts",
+          "documentation":"<p>A summary of all the rule results, showing counts for each status type.</p>"
+        }
+      },
+      "documentation":"<p>Represents a configuration check operation that has been executed against an application.</p>"
+    },
+    "ConfigurationCheckOperationList":{
+      "type":"list",
+      "member":{"shape":"ConfigurationCheckOperation"}
+    },
+    "ConfigurationCheckOperationListingMode":{
+      "type":"string",
+      "enum":[
+        "ALL_OPERATIONS",
+        "LATEST_PER_CHECK"
+      ]
+    },
+    "ConfigurationCheckType":{
+      "type":"string",
+      "enum":[
+        "SAP_CHECK_01",
+        "SAP_CHECK_02",
+        "SAP_CHECK_03"
+      ]
+    },
+    "ConfigurationCheckTypeList":{
+      "type":"list",
+      "member":{"shape":"ConfigurationCheckType"}
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -969,8 +1161,7 @@
     },
     "DeregisterApplicationOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Filter":{
       "type":"structure",
@@ -1079,6 +1270,25 @@
         }
       }
     },
+    "GetConfigurationCheckOperationInput":{
+      "type":"structure",
+      "required":["OperationId"],
+      "members":{
+        "OperationId":{
+          "shape":"OperationId",
+          "documentation":"<p>The ID of the configuration check operation.</p>"
+        }
+      }
+    },
+    "GetConfigurationCheckOperationOutput":{
+      "type":"structure",
+      "members":{
+        "ConfigurationCheckOperation":{
+          "shape":"ConfigurationCheckOperation",
+          "documentation":"<p>Returns the details of a configuration check operation.</p>"
+        }
+      }
+    },
     "GetDatabaseInput":{
       "type":"structure",
       "members":{
@@ -1304,6 +1514,71 @@
         }
       }
     },
+    "ListConfigurationCheckDefinitionsInput":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned nextToken value.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "ListConfigurationCheckDefinitionsOutput":{
+      "type":"structure",
+      "members":{
+        "ConfigurationChecks":{
+          "shape":"ConfigurationCheckDefinitionList",
+          "documentation":"<p>The configuration check types supported by AWS Systems Manager for SAP.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListConfigurationCheckOperationsInput":{
+      "type":"structure",
+      "required":["ApplicationId"],
+      "members":{
+        "ApplicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The ID of the application.</p>"
+        },
+        "ListMode":{
+          "shape":"ConfigurationCheckOperationListingMode",
+          "documentation":"<p>The mode for listing configuration check operations. Defaults to \"LATEST_PER_CHECK\".</p> <ul> <li> <p>LATEST_PER_CHECK - Will list the latest configuration check operation per check type.</p> </li> <li> <p>ALL_OPERATIONS - Will list all configuration check operations performed on the application.</p> </li> </ul>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned nextToken value.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        },
+        "Filters":{
+          "shape":"FilterList",
+          "documentation":"<p>The filters of an operation.</p>"
+        }
+      }
+    },
+    "ListConfigurationCheckOperationsOutput":{
+      "type":"structure",
+      "members":{
+        "ConfigurationCheckOperations":{
+          "shape":"ConfigurationCheckOperationList",
+          "documentation":"<p>The configuration check operations performed by AWS Systems Manager for SAP.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
     "ListDatabasesInput":{
       "type":"structure",
       "members":{
@@ -1408,6 +1683,68 @@
         }
       }
     },
+    "ListSubCheckResultsInput":{
+      "type":"structure",
+      "required":["OperationId"],
+      "members":{
+        "OperationId":{
+          "shape":"OperationId",
+          "documentation":"<p>The ID of the configuration check operation.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned nextToken value.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "ListSubCheckResultsOutput":{
+      "type":"structure",
+      "members":{
+        "SubCheckResults":{
+          "shape":"SubCheckResultList",
+          "documentation":"<p>The sub-check results of a configuration check operation.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
+    "ListSubCheckRuleResultsInput":{
+      "type":"structure",
+      "required":["SubCheckResultId"],
+      "members":{
+        "SubCheckResultId":{
+          "shape":"SubCheckResultId",
+          "documentation":"<p>The ID of the sub check result.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return with a single call. To retrieve the remaining results, make another call with the returned nextToken value.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token for the next page of results.</p>"
+        }
+      }
+    },
+    "ListSubCheckRuleResultsOutput":{
+      "type":"structure",
+      "members":{
+        "RuleResults":{
+          "shape":"RuleResultList",
+          "documentation":"<p>The rule results of a sub-check belonging to a configuration check operation.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The token to use to retrieve the next page of results. This value is null when there are no more results to return.</p>"
+        }
+      }
+    },
     "ListTagsForResourceRequest":{
       "type":"structure",
       "required":["resourceArn"],
@@ -1437,7 +1774,7 @@
     },
     "NextToken":{
       "type":"string",
-      "pattern":".{16,1024}"
+      "pattern":".{16,2048}"
     },
     "Operation":{
       "type":"structure",
@@ -1733,6 +2070,93 @@
       "max":64,
       "min":1
     },
+    "RuleResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"RuleResultId",
+          "documentation":"<p>The unique identifier of the rule result.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of what the rule validates.</p>"
+        },
+        "Status":{
+          "shape":"RuleResultStatus",
+          "documentation":"<p>The status of the rule result.</p>"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>A message providing details about the rule result.</p>"
+        },
+        "Metadata":{
+          "shape":"RuleResultMetadata",
+          "documentation":"<p>Additional metadata associated with the rule result.</p>"
+        }
+      },
+      "documentation":"<p>Represents the result of a single rule within a configuration check.</p>"
+    },
+    "RuleResultId":{
+      "type":"string",
+      "pattern":"[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?"
+    },
+    "RuleResultList":{
+      "type":"list",
+      "member":{"shape":"RuleResult"}
+    },
+    "RuleResultMetadata":{
+      "type":"map",
+      "key":{"shape":"RuleResultMetadataKey"},
+      "value":{"shape":"RuleResultMetadataValue"},
+      "max":50,
+      "min":0
+    },
+    "RuleResultMetadataKey":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "RuleResultMetadataValue":{
+      "type":"string",
+      "max":1000,
+      "min":1
+    },
+    "RuleResultStatus":{
+      "type":"string",
+      "enum":[
+        "PASSED",
+        "FAILED",
+        "WARNING",
+        "INFO",
+        "UNKNOWN"
+      ]
+    },
+    "RuleStatusCounts":{
+      "type":"structure",
+      "members":{
+        "Failed":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rules that failed.</p>"
+        },
+        "Warning":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rules that returned warnings.</p>"
+        },
+        "Info":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rules that returned informational results.</p>"
+        },
+        "Passed":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rules that passed.</p>"
+        },
+        "Unknown":{
+          "shape":"Integer",
+          "documentation":"<p>The number of rules with unknown status.</p>"
+        }
+      },
+      "documentation":"<p>A summary of rule results, providing counts for each status type.</p>"
+    },
     "SAPInstanceNumber":{
       "type":"string",
       "pattern":"[0-9]{2}"
@@ -1789,6 +2213,29 @@
         }
       }
     },
+    "StartConfigurationChecksInput":{
+      "type":"structure",
+      "required":["ApplicationId"],
+      "members":{
+        "ApplicationId":{
+          "shape":"ApplicationId",
+          "documentation":"<p>The ID of the application.</p>"
+        },
+        "ConfigurationCheckIds":{
+          "shape":"ConfigurationCheckTypeList",
+          "documentation":"<p>The list of configuration checks to perform.</p>"
+        }
+      }
+    },
+    "StartConfigurationChecksOutput":{
+      "type":"structure",
+      "members":{
+        "ConfigurationCheckOperations":{
+          "shape":"ConfigurationCheckOperationList",
+          "documentation":"<p>The configuration check operations that were started.</p>"
+        }
+      }
+    },
     "StopApplicationInput":{
       "type":"structure",
       "required":["ApplicationId"],
@@ -1817,6 +2264,40 @@
       }
     },
     "String":{"type":"string"},
+    "SubCheckReferencesList":{
+      "type":"list",
+      "member":{"shape":"String"}
+    },
+    "SubCheckResult":{
+      "type":"structure",
+      "members":{
+        "Id":{
+          "shape":"SubCheckResultId",
+          "documentation":"<p>The unique identifier of the sub-check result.</p>"
+        },
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>The name of the sub-check.</p>"
+        },
+        "Description":{
+          "shape":"String",
+          "documentation":"<p>A description of what the sub-check validates.</p>"
+        },
+        "References":{
+          "shape":"SubCheckReferencesList",
+          "documentation":"<p>A list of references or documentation links related to the sub-check.</p>"
+        }
+      },
+      "documentation":"<p>Represents the result of a sub-check within a configuration check operation.</p>"
+    },
+    "SubCheckResultId":{
+      "type":"string",
+      "pattern":"[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?"
+    },
+    "SubCheckResultList":{
+      "type":"list",
+      "member":{"shape":"SubCheckResult"}
+    },
     "TagKey":{
       "type":"string",
       "pattern":"(?!aws:)[a-zA-Z+-=._:/]+"
@@ -1851,8 +2332,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1895,8 +2375,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationSettingsInput":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso/2019-06-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +212,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +231,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +252,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +275,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,7 +294,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -308,14 +304,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +324,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/sso/2019-06-10/service-2.json 2.31.35-1/awscli/botocore/data/sso/2019-06-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/sso/2019-06-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso/2019-06-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"portal.sso",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"SSO",
     "serviceFullName":"AWS Single Sign-On",
     "serviceId":"SSO",
     "signatureVersion":"v4",
     "signingName":"awsssoportal",
-    "uid":"sso-2019-06-10"
+    "uid":"sso-2019-06-10",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetRoleCredentials":{
@@ -28,7 +30,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Returns the STS short-term credentials for a given role name that is assigned to the user.</p>",
-      "authtype":"none"
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "ListAccountRoles":{
       "name":"ListAccountRoles",
@@ -45,7 +48,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists all roles that are assigned to the user for a given AWS account.</p>",
-      "authtype":"none"
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "ListAccounts":{
       "name":"ListAccounts",
@@ -62,7 +66,8 @@
         {"shape":"ResourceNotFoundException"}
       ],
       "documentation":"<p>Lists all AWS accounts assigned to the user. These AWS accounts are assigned by the administrator of the account. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/useraccess.html#assignusers\">Assign User Access</a> in the <i>IAM Identity Center User Guide</i>. This operation returns a paginated response.</p>",
-      "authtype":"none"
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "Logout":{
       "name":"Logout",
@@ -77,7 +82,8 @@
         {"shape":"TooManyRequestsException"}
       ],
       "documentation":"<p>Removes the locally stored SSO tokens from the client-side cache and sends an API call to the IAM Identity Center service to invalidate the corresponding server-side IAM Identity Center sign in session.</p> <note> <p>If a user uses IAM Identity Center to access the AWS CLI, the user’s IAM Identity Center sign in session is used to obtain an IAM session, as specified in the corresponding IAM Identity Center permission set. More specifically, IAM Identity Center assumes an IAM role in the target account on behalf of the user, and the corresponding temporary AWS credentials are returned to the client.</p> <p>After user logout, any existing IAM role sessions that were created by using IAM Identity Center permission sets continue based on the duration configured in the permission set. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/authconcept.html\">User authentications</a> in the <i>IAM Identity Center User Guide</i>.</p> </note>",
-      "authtype":"none"
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     }
   },
   "shapes":{
diff -pruN 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/service-2.json 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/service-2.json
--- 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,11 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-07-20",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"sso",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"SSO Admin",
     "serviceFullName":"AWS Single Sign-On Admin",
     "serviceId":"SSO Admin",
@@ -88,7 +90,7 @@
         {"shape":"ValidationException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Creates an application in IAM Identity Center for the given application provider.</p>"
+      "documentation":"<p>Creates an OAuth 2.0 customer managed application in IAM Identity Center for the given application provider.</p> <note> <p>This API does not support creating SAML 2.0 customer managed applications or Amazon Web Services managed applications. To learn how to create an Amazon Web Services managed application, see the application user guide. You can create a SAML 2.0 customer managed application in the Amazon Web Services Management Console only. See <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-saml2-setup.html\">Setting up customer managed SAML 2.0 applications</a>. For more information on these application types, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/awsapps.html\">Amazon Web Services managed applications</a>.</p> </note>"
     },
     "CreateApplicationAssignment":{
       "name":"CreateApplicationAssignment",
@@ -671,6 +673,23 @@
       ],
       "documentation":"<p>Retrieves details about an application grant.</p>"
     },
+    "GetApplicationSessionConfiguration":{
+      "name":"GetApplicationSessionConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetApplicationSessionConfigurationRequest"},
+      "output":{"shape":"GetApplicationSessionConfigurationResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Retrieves the session configuration for an application in IAM Identity Center.</p> <p>The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.</p>"
+    },
     "GetInlinePolicyForPermissionSet":{
       "name":"GetInlinePolicyForPermissionSet",
       "http":{
@@ -771,7 +790,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Retrieves a list of the IAM Identity Center associated Amazon Web Services accounts that the principal has access to.</p>"
+      "documentation":"<p>Retrieves a list of the IAM Identity Center associated Amazon Web Services accounts that the principal has access to. This action must be called from the management account containing your organization instance of IAM Identity Center. This action is not valid for account instances of IAM Identity Center.</p>"
     },
     "ListAccountsForProvisionedPermissionSet":{
       "name":"ListAccountsForProvisionedPermissionSet",
@@ -800,8 +819,8 @@
       "output":{"shape":"ListApplicationAccessScopesResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
@@ -839,7 +858,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists the applications to which a specified principal is assigned.</p>"
+      "documentation":"<p>Lists the applications to which a specified principal is assigned. You must provide a filter when calling this action from a member account against your organization instance of IAM Identity Center. A filter is not required when called from the management account against an organization instance of IAM Identity Center, or from a member account against an account instance of IAM Identity Center in the same account.</p>"
     },
     "ListApplicationAuthenticationMethods":{
       "name":"ListApplicationAuthenticationMethods",
@@ -851,8 +870,8 @@
       "output":{"shape":"ListApplicationAuthenticationMethodsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
@@ -868,8 +887,8 @@
       "output":{"shape":"ListApplicationGrantsResponse"},
       "errors":[
         {"shape":"ThrottlingException"},
-        {"shape":"InternalServerException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
@@ -905,7 +924,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Lists all applications associated with the instance of IAM Identity Center. When listing applications for an instance in the management account, member accounts must use the <code>applicationAccount</code> parameter to filter the list to only applications created from that account.</p>"
+      "documentation":"<p>Lists all applications associated with the instance of IAM Identity Center. When listing applications for an organization instance in the management account, member accounts must use the <code>applicationAccount</code> parameter to filter the list to only applications created from that account. When listing applications for an account instance in the same member account, a filter is not required.</p>"
     },
     "ListCustomerManagedPolicyReferencesInPermissionSet":{
       "name":"ListCustomerManagedPolicyReferencesInPermissionSet",
@@ -1129,7 +1148,26 @@
         {"shape":"ValidationException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Adds a grant to an application.</p>",
+      "documentation":"<p>Creates a configuration for an application to use grants. Conceptually grants are authorization to request actions related to tokens. This configuration will be used when parties are requesting and receiving tokens during the trusted identity propagation process. For more information on the IAM Identity Center supported grant workflows, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-saml2-oauth2.html\">SAML 2.0 and OAuth 2.0</a>.</p> <p>A grant is created between your applications and Identity Center instance which enables an application to use specified mechanisms to obtain tokens. These tokens are used by your applications to gain access to Amazon Web Services resources on behalf of users. The following elements are within these exchanges:</p> <ul> <li> <p> <b>Requester</b> - The application requesting access to Amazon Web Services resources.</p> </li> <li> <p> <b>Subject</b> - Typically the user that is requesting access to Amazon Web Services resources.</p> </li> <li> <p> <b>Grant</b> - Conceptually, a grant is authorization to access Amazon Web Services resources. These grants authorize token generation for authenticating access to the requester and for the request to make requests on behalf of the subjects. There are four types of grants:</p> <ul> <li> <p> <b>AuthorizationCode</b> - Allows an application to request authorization through a series of user-agent redirects.</p> </li> <li> <p> <b>JWT bearer </b> - Authorizes an application to exchange a JSON Web Token that came from an external identity provider. To learn more, see <a href=\"https://datatracker.ietf.org/doc/html/rfc6749\">RFC 6479</a>.</p> </li> <li> <p> <b>Refresh token</b> - Enables application to request new access tokens to replace expiring or expired access tokens.</p> </li> <li> <p> <b>Exchange token</b> - A grant that requests tokens from the authorization server by providing a ‘subject’ token with access scope authorizing trusted identity propagation to this application. To learn more, see <a href=\"https://datatracker.ietf.org/doc/html/rfc8693\">RFC 8693</a>.</p> </li> </ul> </li> <li> <p> <b>Authorization server</b> - IAM Identity Center requests tokens.</p> </li> </ul> <p>User credentials are never shared directly within these exchanges. Instead, applications use grants to request access tokens from IAM Identity Center. For more information, see <a href=\"https://datatracker.ietf.org/doc/html/rfc6749\">RFC 6479</a>.</p> <p class=\"title\"> <b>Use cases</b> </p> <ul> <li> <p>Connecting to custom applications.</p> </li> <li> <p>Configuring an Amazon Web Services service to make calls to another Amazon Web Services services using JWT tokens.</p> </li> </ul>",
+      "idempotent":true
+    },
+    "PutApplicationSessionConfiguration":{
+      "name":"PutApplicationSessionConfiguration",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"PutApplicationSessionConfigurationRequest"},
+      "output":{"shape":"PutApplicationSessionConfigurationResponse"},
+      "errors":[
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Updates the session configuration for an application in IAM Identity Center.</p> <p>The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.</p>",
       "idempotent":true
     },
     "PutInlinePolicyToPermissionSet":{
@@ -1235,6 +1273,7 @@
       "errors":[
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"ConflictException"}
@@ -1319,7 +1358,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]+$"
+      "pattern":"[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]+"
     },
     "AccessControlAttributeList":{
       "type":"list",
@@ -1342,7 +1381,7 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@\\[\\]\\{\\}\\$\\\\\"]*$"
+      "pattern":"[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@\\[\\]\\{\\}\\$\\\\\"]*"
     },
     "AccessControlAttributeValueSourceList":{
       "type":"list",
@@ -1353,12 +1392,20 @@
     "AccessDeniedException":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"AccessDeniedExceptionMessage"}
+        "Message":{"shape":"AccessDeniedExceptionMessage"},
+        "Reason":{
+          "shape":"AccessDeniedExceptionReason",
+          "documentation":"<p>The reason for the access denied exception.</p>"
+        }
       },
       "documentation":"<p>You do not have sufficient access to perform this action.</p>",
       "exception":true
     },
     "AccessDeniedExceptionMessage":{"type":"string"},
+    "AccessDeniedExceptionReason":{
+      "type":"string",
+      "enum":["KMS_AccessDeniedException"]
+    },
     "AccountAssignment":{
       "type":"structure",
       "members":{
@@ -1370,13 +1417,13 @@
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "PrincipalId":{
-          "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
-        },
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        },
+        "PrincipalId":{
+          "shape":"PrincipalId",
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         }
       },
       "documentation":"<p>The assignment that indicates a principal's limited access to a specified Amazon Web Services account with a specified permission set.</p> <note> <p>The term <i>principal</i> here refers to a user or group that is defined in IAM Identity Center.</p> </note>"
@@ -1414,41 +1461,41 @@
     "AccountAssignmentOperationStatus":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date that the permission set was created.</p>"
+        "Status":{
+          "shape":"StatusValues",
+          "documentation":"<p>The status of the permission set provisioning process.</p>"
+        },
+        "RequestId":{
+          "shape":"UUId",
+          "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
         },
         "FailureReason":{
           "shape":"Reason",
           "documentation":"<p>The message that contains an error or exception in case of an operation failure.</p>"
         },
+        "TargetId":{
+          "shape":"TargetId",
+          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
+        },
+        "TargetType":{
+          "shape":"TargetType",
+          "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "PrincipalId":{
-          "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
-        },
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>The entity type for which the assignment will be created.</p>"
         },
-        "RequestId":{
-          "shape":"UUId",
-          "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
-        },
-        "Status":{
-          "shape":"StatusValues",
-          "documentation":"<p>The status of the permission set provisioning process.</p>"
-        },
-        "TargetId":{
-          "shape":"TargetId",
-          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
+        "PrincipalId":{
+          "shape":"PrincipalId",
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         },
-        "TargetType":{
-          "shape":"TargetType",
-          "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date that the permission set was created.</p>"
         }
       },
       "documentation":"<p>The status of the creation or deletion operation of an assignment that a principal needs to access an account.</p>"
@@ -1460,17 +1507,17 @@
     "AccountAssignmentOperationStatusMetadata":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date that the permission set was created.</p>"
+        "Status":{
+          "shape":"StatusValues",
+          "documentation":"<p>The status of the permission set provisioning process.</p>"
         },
         "RequestId":{
           "shape":"UUId",
           "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
         },
-        "Status":{
-          "shape":"StatusValues",
-          "documentation":"<p>The status of the permission set provisioning process.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date that the permission set was created.</p>"
         }
       },
       "documentation":"<p>Provides information about the <a>AccountAssignment</a> creation request.</p>"
@@ -1479,7 +1526,7 @@
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^\\d{12}$"
+      "pattern":"\\d{12}"
     },
     "AccountList":{
       "type":"list",
@@ -1487,17 +1534,12 @@
     },
     "ActorPolicyDocument":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "document":true
     },
     "Application":{
       "type":"structure",
       "members":{
-        "ApplicationAccount":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID number of the application.</p>"
-        },
         "ApplicationArn":{
           "shape":"ApplicationArn",
           "documentation":"<p>The ARN of the application.</p>"
@@ -1506,29 +1548,33 @@
           "shape":"ApplicationProviderArn",
           "documentation":"<p>The ARN of the application provider for this application.</p>"
         },
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date and time when the application was originally created.</p>"
+        "Name":{
+          "shape":"ApplicationNameType",
+          "documentation":"<p>The name of the application.</p>"
         },
-        "Description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the application.</p>"
+        "ApplicationAccount":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID number of the application.</p>"
         },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the instance of IAM Identity Center that is configured with this application.</p>"
         },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>The name of the application.</p>"
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>The current status of the application in this instance of IAM Identity Center.</p>"
         },
         "PortalOptions":{
           "shape":"PortalOptions",
           "documentation":"<p>A structure that describes the options for the access portal associated with this application.</p>"
         },
-        "Status":{
-          "shape":"ApplicationStatus",
-          "documentation":"<p>The current status of the application in this instance of IAM Identity Center.</p>"
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the application.</p>"
+        },
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date and time when the application was originally created.</p>"
         }
       },
       "documentation":"<p>A structure that describes an application that uses IAM Identity Center for access management.</p>"
@@ -1537,7 +1583,7 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}"
     },
     "ApplicationAssignment":{
       "type":"structure",
@@ -1594,6 +1640,12 @@
       "max":50,
       "min":0
     },
+    "ApplicationNameType":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[\\S\\s]*"
+    },
     "ApplicationProvider":{
       "type":"structure",
       "required":["ApplicationProviderArn"],
@@ -1602,14 +1654,14 @@
           "shape":"ApplicationProviderArn",
           "documentation":"<p>The ARN of the application provider.</p>"
         },
-        "DisplayData":{
-          "shape":"DisplayData",
-          "documentation":"<p>A structure that describes how IAM Identity Center represents the application provider in the portal.</p>"
-        },
         "FederationProtocol":{
           "shape":"FederationProtocol",
           "documentation":"<p>The protocol that the application provider uses to perform federation.</p>"
         },
+        "DisplayData":{
+          "shape":"DisplayData",
+          "documentation":"<p>A structure that describes how IAM Identity Center represents the application provider in the portal.</p>"
+        },
         "ResourceServerConfig":{
           "shape":"ResourceServerConfig",
           "documentation":"<p>A structure that describes the application provider's resource server.</p>"
@@ -1621,7 +1673,7 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::aws:applicationProvider/[a-zA-Z0-9-/]+$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::aws:applicationProvider/[a-zA-Z0-9-/]+"
     },
     "ApplicationProviderList":{
       "type":"list",
@@ -1638,7 +1690,7 @@
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^http(s)?:\\/\\/[-a-zA-Z0-9+&@#\\/%?=~_|!:,.;]*[-a-zA-Z0-9+&bb@#\\/%?=~_|]$"
+      "pattern":"http(s)?:\\/\\/[-a-zA-Z0-9+&@#\\/%?=~_|!:,.;]*[-a-zA-Z0-9+&bb@#\\/%?=~_|]"
     },
     "ApplicationVisibility":{
       "type":"string",
@@ -1654,15 +1706,11 @@
     "AttachCustomerManagedPolicyReferenceToPermissionSetRequest":{
       "type":"structure",
       "required":[
-        "CustomerManagedPolicyReference",
         "InstanceArn",
-        "PermissionSetArn"
+        "PermissionSetArn",
+        "CustomerManagedPolicyReference"
       ],
       "members":{
-        "CustomerManagedPolicyReference":{
-          "shape":"CustomerManagedPolicyReference",
-          "documentation":"<p>Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. </p>"
@@ -1670,54 +1718,56 @@
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the <code>PermissionSet</code>.</p>"
+        },
+        "CustomerManagedPolicyReference":{
+          "shape":"CustomerManagedPolicyReference",
+          "documentation":"<p>Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.</p>"
         }
       }
     },
     "AttachCustomerManagedPolicyReferenceToPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachManagedPolicyToPermissionSetRequest":{
       "type":"structure",
       "required":[
         "InstanceArn",
-        "ManagedPolicyArn",
-        "PermissionSetArn"
+        "PermissionSetArn",
+        "ManagedPolicyArn"
       ],
       "members":{
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "ManagedPolicyArn":{
-          "shape":"ManagedPolicyArn",
-          "documentation":"<p>The Amazon Web Services managed policy ARN to be attached to a permission set.</p>"
-        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the <a>PermissionSet</a> that the managed policy should be attached to.</p>"
+        },
+        "ManagedPolicyArn":{
+          "shape":"ManagedPolicyArn",
+          "documentation":"<p>The Amazon Web Services managed policy ARN to be attached to a permission set.</p>"
         }
       }
     },
     "AttachManagedPolicyToPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AttachedManagedPolicy":{
       "type":"structure",
       "members":{
-        "Arn":{
-          "shape":"ManagedPolicyArn",
-          "documentation":"<p>The ARN of the Amazon Web Services managed policy. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
-        },
         "Name":{
           "shape":"Name",
           "documentation":"<p>The name of the Amazon Web Services managed policy.</p>"
+        },
+        "Arn":{
+          "shape":"ManagedPolicyArn",
+          "documentation":"<p>The ARN of the Amazon Web Services managed policy. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         }
       },
-      "documentation":"<p>A structure that stores the details of the Amazon Web Services managed policy.</p>"
+      "documentation":"<p>A structure that stores a list of managed policy ARNs that describe the associated Amazon Web Services managed policy.</p>"
     },
     "AttachedManagedPolicyList":{
       "type":"list",
@@ -1737,13 +1787,13 @@
     "AuthenticationMethodItem":{
       "type":"structure",
       "members":{
-        "AuthenticationMethod":{
-          "shape":"AuthenticationMethod",
-          "documentation":"<p>A structure that describes an authentication method. The contents of this structure is determined by the <code>AuthenticationMethodType</code>.</p>"
-        },
         "AuthenticationMethodType":{
           "shape":"AuthenticationMethodType",
           "documentation":"<p>The type of authentication that is used by this method.</p>"
+        },
+        "AuthenticationMethod":{
+          "shape":"AuthenticationMethod",
+          "documentation":"<p>A structure that describes an authentication method. The contents of this structure is determined by the <code>AuthenticationMethodType</code>.</p>"
         }
       },
       "documentation":"<p>A structure that describes an authentication method and its type.</p>"
@@ -1761,7 +1811,7 @@
       "members":{
         "RedirectUris":{
           "shape":"RedirectUris",
-          "documentation":"<p>A list of URIs that are valid locations to redirect a user's browser after the user is authorized.</p>"
+          "documentation":"<p>A list of URIs that are valid locations to redirect a user's browser after the user is authorized.</p> <note> <p>RedirectUris is required when the grant type is <code>authorization_code</code>.</p> </note>"
         }
       },
       "documentation":"<p>A structure that defines configuration settings for an application that supports the OAuth 2.0 Authorization Code Grant.</p>"
@@ -1769,13 +1819,13 @@
     "AuthorizedTokenIssuer":{
       "type":"structure",
       "members":{
-        "AuthorizedAudiences":{
-          "shape":"TokenIssuerAudiences",
-          "documentation":"<p>An array list of authorized audiences, or applications, that can consume the tokens generated by the associated trusted token issuer.</p>"
-        },
         "TrustedTokenIssuerArn":{
           "shape":"TrustedTokenIssuerArn",
           "documentation":"<p>The ARN of the trusted token issuer.</p>"
+        },
+        "AuthorizedAudiences":{
+          "shape":"TokenIssuerAudiences",
+          "documentation":"<p>An array list of authorized audiences, or applications, that can consume the tokens generated by the associated trusted token issuer.</p>"
         }
       },
       "documentation":"<p>A structure that describes a trusted token issuer and associates it with a set of authorized audiences.</p>"
@@ -1790,13 +1840,13 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^\\p{L}+(?:(\\.|\\_)\\p{L}+){0,2}$"
+      "pattern":"\\p{L}+(?:(\\.|\\_)\\p{L}+){0,2}"
     },
     "ClientToken":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[!-~]+$"
+      "pattern":"[!-~]+"
     },
     "ConflictException":{
       "type":"structure",
@@ -1811,36 +1861,36 @@
       "type":"structure",
       "required":[
         "InstanceArn",
+        "TargetId",
+        "TargetType",
         "PermissionSetArn",
-        "PrincipalId",
         "PrincipalType",
-        "TargetId",
-        "TargetType"
+        "PrincipalId"
       ],
       "members":{
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
+        "TargetId":{
+          "shape":"TargetId",
+          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
+        },
+        "TargetType":{
+          "shape":"TargetType",
+          "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set that the admin wants to grant the principal access to.</p>"
         },
-        "PrincipalId":{
-          "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
-        },
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>The entity type for which the assignment will be created.</p>"
         },
-        "TargetId":{
-          "shape":"TargetId",
-          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
-        },
-        "TargetType":{
-          "shape":"TargetType",
-          "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        "PrincipalId":{
+          "shape":"PrincipalId",
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         }
       }
     },
@@ -1863,11 +1913,11 @@
       "members":{
         "ApplicationArn":{
           "shape":"ApplicationArn",
-          "documentation":"<p>The ARN of the application provider under which the operation will run.</p>"
+          "documentation":"<p>The ARN of the application for which the assignment is created.</p>"
         },
         "PrincipalId":{
           "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         },
         "PrincipalType":{
           "shape":"PrincipalType",
@@ -1877,49 +1927,48 @@
     },
     "CreateApplicationAssignmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateApplicationRequest":{
       "type":"structure",
       "required":[
-        "ApplicationProviderArn",
         "InstanceArn",
+        "ApplicationProviderArn",
         "Name"
       ],
       "members":{
+        "InstanceArn":{
+          "shape":"InstanceArn",
+          "documentation":"<p>The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
         "ApplicationProviderArn":{
           "shape":"ApplicationProviderArn",
           "documentation":"<p>The ARN of the application provider under which the operation will run.</p>"
         },
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotentParameterMismatch</code> error.</p>",
-          "idempotencyToken":true
+        "Name":{
+          "shape":"ApplicationNameType",
+          "documentation":"<p>The name of the .</p>"
         },
         "Description":{
           "shape":"Description",
           "documentation":"<p>The description of the .</p>"
         },
-        "InstanceArn":{
-          "shape":"InstanceArn",
-          "documentation":"<p>The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
-        },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>The name of the .</p>"
-        },
         "PortalOptions":{
           "shape":"PortalOptions",
           "documentation":"<p>A structure that describes the options for the portal associated with an application.</p>"
         },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Specifies tags to be attached to the application.</p>"
+        },
         "Status":{
           "shape":"ApplicationStatus",
           "documentation":"<p>Specifies whether the application is enabled or disabled.</p>"
         },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>Specifies tags to be attached to the application.</p>"
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotentParameterMismatch</code> error.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1935,37 +1984,36 @@
     "CreateInstanceAccessControlAttributeConfigurationRequest":{
       "type":"structure",
       "required":[
-        "InstanceAccessControlAttributeConfiguration",
-        "InstanceArn"
+        "InstanceArn",
+        "InstanceAccessControlAttributeConfiguration"
       ],
       "members":{
-        "InstanceAccessControlAttributeConfiguration":{
-          "shape":"InstanceAccessControlAttributeConfiguration",
-          "documentation":"<p>Specifies the IAM Identity Center identity store attributes to add to your ABAC configuration. When using an external identity provider as an identity source, you can pass attributes through the SAML assertion. Doing so provides an alternative to configuring attributes from the IAM Identity Center identity store. If a SAML assertion passes any of these attributes, IAM Identity Center will replace the attribute value with the value from the IAM Identity Center identity store.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed.</p>"
+        },
+        "InstanceAccessControlAttributeConfiguration":{
+          "shape":"InstanceAccessControlAttributeConfiguration",
+          "documentation":"<p>Specifies the IAM Identity Center identity store attributes to add to your ABAC configuration. When using an external identity provider as an identity source, you can pass attributes through the SAML assertion. Doing so provides an alternative to configuring attributes from the IAM Identity Center identity store. If a SAML assertion passes any of these attributes, IAM Identity Center will replace the attribute value with the value from the IAM Identity Center identity store.</p>"
         }
       }
     },
     "CreateInstanceAccessControlAttributeConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateInstanceRequest":{
       "type":"structure",
       "members":{
+        "Name":{
+          "shape":"NameType",
+          "documentation":"<p>The name of the instance of IAM Identity Center.</p>"
+        },
         "ClientToken":{
           "shape":"ClientToken",
           "documentation":"<p>Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotentParameterMismatch</code> error.</p>",
           "idempotencyToken":true
         },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>The name of the instance of IAM Identity Center.</p>"
-        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>Specifies tags to be attached to the instance of IAM Identity Center.</p>"
@@ -1984,10 +2032,14 @@
     "CreatePermissionSetRequest":{
       "type":"structure",
       "required":[
-        "InstanceArn",
-        "Name"
+        "Name",
+        "InstanceArn"
       ],
       "members":{
+        "Name":{
+          "shape":"PermissionSetName",
+          "documentation":"<p>The name of the <a>PermissionSet</a>.</p>"
+        },
         "Description":{
           "shape":"PermissionSetDescription",
           "documentation":"<p>The description of the <a>PermissionSet</a>.</p>"
@@ -1996,18 +2048,14 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "Name":{
-          "shape":"PermissionSetName",
-          "documentation":"<p>The name of the <a>PermissionSet</a>.</p>"
+        "SessionDuration":{
+          "shape":"Duration",
+          "documentation":"<p>The length of time that the application user sessions are valid in the ISO-8601 standard.</p>"
         },
         "RelayState":{
           "shape":"RelayState",
           "documentation":"<p>Used to redirect users within the application during the federation authentication process.</p>"
         },
-        "SessionDuration":{
-          "shape":"Duration",
-          "documentation":"<p>The length of time that the application user sessions are valid in the ISO-8601 standard.</p>"
-        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>The tags to attach to the new <a>PermissionSet</a>.</p>"
@@ -2028,15 +2076,10 @@
       "required":[
         "InstanceArn",
         "Name",
-        "TrustedTokenIssuerConfiguration",
-        "TrustedTokenIssuerType"
+        "TrustedTokenIssuerType",
+        "TrustedTokenIssuerConfiguration"
       ],
       "members":{
-        "ClientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value.</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotentParameterMismatch</code> error.</p>",
-          "idempotencyToken":true
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>Specifies the ARN of the instance of IAM Identity Center to contain the new trusted token issuer configuration.</p>"
@@ -2045,17 +2088,22 @@
           "shape":"TrustedTokenIssuerName",
           "documentation":"<p>Specifies the name of the new trusted token issuer configuration.</p>"
         },
-        "Tags":{
-          "shape":"TagList",
-          "documentation":"<p>Specifies tags to be attached to the new trusted token issuer configuration.</p>"
+        "TrustedTokenIssuerType":{
+          "shape":"TrustedTokenIssuerType",
+          "documentation":"<p>Specifies the type of the new trusted token issuer.</p>"
         },
         "TrustedTokenIssuerConfiguration":{
           "shape":"TrustedTokenIssuerConfiguration",
           "documentation":"<p>Specifies settings that apply to the new trusted token issuer configuration. The settings that are available depend on what <code>TrustedTokenIssuerType</code> you specify.</p>"
         },
-        "TrustedTokenIssuerType":{
-          "shape":"TrustedTokenIssuerType",
-          "documentation":"<p>Specifies the type of the new trusted token issuer.</p>"
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a <a href=\"https://wikipedia.org/wiki/Universally_unique_identifier\">UUID type of value.</a>.</p> <p>If you don't provide this value, then Amazon Web Services generates a random one for you.</p> <p>If you retry the operation with the same <code>ClientToken</code>, but with different parameters, the retry fails with an <code>IdempotentParameterMismatch</code> error.</p>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Specifies tags to be attached to the new trusted token issuer configuration.</p>"
         }
       }
     },
@@ -2092,36 +2140,36 @@
       "type":"structure",
       "required":[
         "InstanceArn",
+        "TargetId",
+        "TargetType",
         "PermissionSetArn",
-        "PrincipalId",
         "PrincipalType",
-        "TargetId",
-        "TargetType"
+        "PrincipalId"
       ],
       "members":{
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
+        "TargetId":{
+          "shape":"TargetId",
+          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
+        },
+        "TargetType":{
+          "shape":"TargetType",
+          "documentation":"<p>The entity type for which the assignment will be deleted.</p>"
+        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set that will be used to remove access.</p>"
         },
-        "PrincipalId":{
-          "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
-        },
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>The entity type for which the assignment will be deleted.</p>"
         },
-        "TargetId":{
-          "shape":"TargetId",
-          "documentation":"<p>TargetID is an Amazon Web Services account identifier, (For example, 123456789012).</p>"
-        },
-        "TargetType":{
-          "shape":"TargetType",
-          "documentation":"<p>The entity type for which the assignment will be deleted.</p>"
+        "PrincipalId":{
+          "shape":"PrincipalId",
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         }
       }
     },
@@ -2165,7 +2213,7 @@
         },
         "PrincipalId":{
           "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         },
         "PrincipalType":{
           "shape":"PrincipalType",
@@ -2175,8 +2223,7 @@
     },
     "DeleteApplicationAssignmentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteApplicationAuthenticationMethodRequest":{
       "type":"structure",
@@ -2224,8 +2271,7 @@
     },
     "DeleteApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInlinePolicyFromPermissionSetRequest":{
       "type":"structure",
@@ -2246,8 +2292,7 @@
     },
     "DeleteInlinePolicyFromPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInstanceAccessControlAttributeConfigurationRequest":{
       "type":"structure",
@@ -2261,8 +2306,7 @@
     },
     "DeleteInstanceAccessControlAttributeConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteInstanceRequest":{
       "type":"structure",
@@ -2276,8 +2320,7 @@
     },
     "DeleteInstanceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePermissionSetRequest":{
       "type":"structure",
@@ -2298,8 +2341,7 @@
     },
     "DeletePermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePermissionsBoundaryFromPermissionSetRequest":{
       "type":"structure",
@@ -2320,8 +2362,7 @@
     },
     "DeletePermissionsBoundaryFromPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTrustedTokenIssuerRequest":{
       "type":"structure",
@@ -2335,23 +2376,22 @@
     },
     "DeleteTrustedTokenIssuerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountAssignmentCreationStatusRequest":{
       "type":"structure",
       "required":[
-        "AccountAssignmentCreationRequestId",
-        "InstanceArn"
+        "InstanceArn",
+        "AccountAssignmentCreationRequestId"
       ],
       "members":{
-        "AccountAssignmentCreationRequestId":{
-          "shape":"UUId",
-          "documentation":"<p>The identifier that is used to track the request operation progress.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
+        "AccountAssignmentCreationRequestId":{
+          "shape":"UUId",
+          "documentation":"<p>The identifier that is used to track the request operation progress.</p>"
         }
       }
     },
@@ -2367,17 +2407,17 @@
     "DescribeAccountAssignmentDeletionStatusRequest":{
       "type":"structure",
       "required":[
-        "AccountAssignmentDeletionRequestId",
-        "InstanceArn"
+        "InstanceArn",
+        "AccountAssignmentDeletionRequestId"
       ],
       "members":{
-        "AccountAssignmentDeletionRequestId":{
-          "shape":"UUId",
-          "documentation":"<p>The identifier that is used to track the request operation progress.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
+        "AccountAssignmentDeletionRequestId":{
+          "shape":"UUId",
+          "documentation":"<p>The identifier that is used to track the request operation progress.</p>"
         }
       }
     },
@@ -2404,7 +2444,7 @@
         },
         "PrincipalId":{
           "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         },
         "PrincipalType":{
           "shape":"PrincipalType",
@@ -2415,17 +2455,17 @@
     "DescribeApplicationAssignmentResponse":{
       "type":"structure",
       "members":{
-        "ApplicationArn":{
-          "shape":"ApplicationArn",
-          "documentation":"<p>Specifies the ARN of the application. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        "PrincipalType":{
+          "shape":"PrincipalType",
+          "documentation":"<p>The entity type for which the assignment will be created.</p>"
         },
         "PrincipalId":{
           "shape":"PrincipalId",
-          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
+          "documentation":"<p>An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">IAM Identity Center Identity Store API Reference</a>.</p>"
         },
-        "PrincipalType":{
-          "shape":"PrincipalType",
-          "documentation":"<p>The entity type for which the assignment will be created.</p>"
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>Specifies the ARN of the application. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         }
       }
     },
@@ -2447,14 +2487,14 @@
           "shape":"ApplicationProviderArn",
           "documentation":"<p>The ARN of the application provider.</p>"
         },
-        "DisplayData":{
-          "shape":"DisplayData",
-          "documentation":"<p>A structure with details about the display data for the application provider.</p>"
-        },
         "FederationProtocol":{
           "shape":"FederationProtocol",
           "documentation":"<p>The protocol used to federate to the application provider.</p>"
         },
+        "DisplayData":{
+          "shape":"DisplayData",
+          "documentation":"<p>A structure with details about the display data for the application provider.</p>"
+        },
         "ResourceServerConfig":{
           "shape":"ResourceServerConfig",
           "documentation":"<p>A structure with details about the receiving application.</p>"
@@ -2474,10 +2514,6 @@
     "DescribeApplicationResponse":{
       "type":"structure",
       "members":{
-        "ApplicationAccount":{
-          "shape":"AccountId",
-          "documentation":"<p>The account ID.</p>"
-        },
         "ApplicationArn":{
           "shape":"ApplicationArn",
           "documentation":"<p>Specifies the ARN of the application.</p>"
@@ -2486,29 +2522,33 @@
           "shape":"ApplicationProviderArn",
           "documentation":"<p>The ARN of the application provider under which the operation will run.</p>"
         },
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date the application was created.</p>"
+        "Name":{
+          "shape":"ApplicationNameType",
+          "documentation":"<p>The application name.</p>"
         },
-        "Description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the .</p>"
+        "ApplicationAccount":{
+          "shape":"AccountId",
+          "documentation":"<p>The account ID.</p>"
         },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center application under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>The application name.</p>"
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>Specifies whether the application is enabled or disabled.</p>"
         },
         "PortalOptions":{
           "shape":"PortalOptions",
           "documentation":"<p>A structure that describes the options for the portal associated with an application.</p>"
         },
-        "Status":{
-          "shape":"ApplicationStatus",
-          "documentation":"<p>Specifies whether the application is enabled or disabled.</p>"
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the .</p>"
+        },
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date the application was created.</p>"
         }
       }
     },
@@ -2525,10 +2565,6 @@
     "DescribeInstanceAccessControlAttributeConfigurationResponse":{
       "type":"structure",
       "members":{
-        "InstanceAccessControlAttributeConfiguration":{
-          "shape":"InstanceAccessControlAttributeConfiguration",
-          "documentation":"<p>Gets the list of IAM Identity Center identity store attributes that have been added to your ABAC configuration.</p>"
-        },
         "Status":{
           "shape":"InstanceAccessControlAttributeConfigurationStatus",
           "documentation":"<p>The status of the attribute configuration process.</p>"
@@ -2536,6 +2572,10 @@
         "StatusReason":{
           "shape":"InstanceAccessControlAttributeConfigurationStatusReason",
           "documentation":"<p>Provides more details about the current status of the specified attribute.</p>"
+        },
+        "InstanceAccessControlAttributeConfiguration":{
+          "shape":"InstanceAccessControlAttributeConfiguration",
+          "documentation":"<p>Gets the list of IAM Identity Center identity store attributes that have been added to your ABAC configuration.</p>"
         }
       }
     },
@@ -2552,29 +2592,37 @@
     "DescribeInstanceResponse":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date the instance was created.</p>"
+        "InstanceArn":{
+          "shape":"InstanceArn",
+          "documentation":"<p>The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
         "IdentityStoreId":{
           "shape":"Id",
           "documentation":"<p>The identifier of the identity store that is connected to the instance of IAM Identity Center.</p>"
         },
-        "InstanceArn":{
-          "shape":"InstanceArn",
-          "documentation":"<p>The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        "OwnerAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The identifier of the Amazon Web Services account for which the instance was created.</p>"
         },
         "Name":{
           "shape":"NameType",
           "documentation":"<p>Specifies the instance name.</p>"
         },
-        "OwnerAccountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The identifier of the Amazon Web Services account for which the instance was created.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date the instance was created.</p>"
         },
         "Status":{
           "shape":"InstanceStatus",
           "documentation":"<p>The status of the instance. </p>"
+        },
+        "StatusReason":{
+          "shape":"Reason",
+          "documentation":"<p>Provides additional context about the current status of the IAM Identity Center instance. This field is particularly useful when an instance is in a non-ACTIVE state, such as CREATE_FAILED. When an instance fails to create or update, this field contains information about the cause, which may include issues with KMS key configuration, permission problems with the specified KMS key, or service-related errors. </p>"
+        },
+        "EncryptionConfigurationDetails":{
+          "shape":"EncryptionConfigurationDetails",
+          "documentation":"<p>Contains the encryption configuration for your IAM Identity Center instance, including the encryption status, KMS key type, and KMS key ARN.</p>"
         }
       }
     },
@@ -2643,21 +2691,21 @@
     "DescribeTrustedTokenIssuerResponse":{
       "type":"structure",
       "members":{
-        "Name":{
-          "shape":"TrustedTokenIssuerName",
-          "documentation":"<p>The name of the trusted token issuer configuration.</p>"
-        },
         "TrustedTokenIssuerArn":{
           "shape":"TrustedTokenIssuerArn",
           "documentation":"<p>The ARN of the trusted token issuer configuration.</p>"
         },
-        "TrustedTokenIssuerConfiguration":{
-          "shape":"TrustedTokenIssuerConfiguration",
-          "documentation":"<p>A structure the describes the settings that apply of this trusted token issuer.</p>"
+        "Name":{
+          "shape":"TrustedTokenIssuerName",
+          "documentation":"<p>The name of the trusted token issuer configuration.</p>"
         },
         "TrustedTokenIssuerType":{
           "shape":"TrustedTokenIssuerType",
           "documentation":"<p>The type of the trusted token issuer.</p>"
+        },
+        "TrustedTokenIssuerConfiguration":{
+          "shape":"TrustedTokenIssuerConfiguration",
+          "documentation":"<p>A structure the describes the settings that apply of this trusted token issuer.</p>"
         }
       }
     },
@@ -2669,15 +2717,11 @@
     "DetachCustomerManagedPolicyReferenceFromPermissionSetRequest":{
       "type":"structure",
       "required":[
-        "CustomerManagedPolicyReference",
         "InstanceArn",
-        "PermissionSetArn"
+        "PermissionSetArn",
+        "CustomerManagedPolicyReference"
       ],
       "members":{
-        "CustomerManagedPolicyReference":{
-          "shape":"CustomerManagedPolicyReference",
-          "documentation":"<p>Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. </p>"
@@ -2685,48 +2729,46 @@
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the <code>PermissionSet</code>.</p>"
+        },
+        "CustomerManagedPolicyReference":{
+          "shape":"CustomerManagedPolicyReference",
+          "documentation":"<p>Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.</p>"
         }
       }
     },
     "DetachCustomerManagedPolicyReferenceFromPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetachManagedPolicyFromPermissionSetRequest":{
       "type":"structure",
       "required":[
         "InstanceArn",
-        "ManagedPolicyArn",
-        "PermissionSetArn"
+        "PermissionSetArn",
+        "ManagedPolicyArn"
       ],
       "members":{
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "ManagedPolicyArn":{
-          "shape":"ManagedPolicyArn",
-          "documentation":"<p>The Amazon Web Services managed policy ARN to be detached from a permission set.</p>"
-        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the <a>PermissionSet</a> from which the policy should be detached.</p>"
+        },
+        "ManagedPolicyArn":{
+          "shape":"ManagedPolicyArn",
+          "documentation":"<p>The Amazon Web Services managed policy ARN to be detached from a permission set.</p>"
         }
       }
     },
     "DetachManagedPolicyFromPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisplayData":{
       "type":"structure",
       "members":{
-        "Description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the application provider that appears in the portal.</p>"
-        },
         "DisplayName":{
           "shape":"Name",
           "documentation":"<p>The name of the application provider that appears in the portal.</p>"
@@ -2734,6 +2776,10 @@
         "IconUrl":{
           "shape":"IconUrl",
           "documentation":"<p>A URL that points to an icon that represents the application provider.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the application provider that appears in the portal.</p>"
         }
       },
       "documentation":"<p>A structure that describes how the portal represents an application provider.</p>"
@@ -2742,7 +2788,44 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^(-?)P(?=\\d|T\\d)(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)([DW]))?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$"
+      "pattern":"(-?)P(?=\\d|T\\d)(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)([DW]))?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?"
+    },
+    "EncryptionConfiguration":{
+      "type":"structure",
+      "required":["KeyType"],
+      "members":{
+        "KeyType":{
+          "shape":"KmsKeyType",
+          "documentation":"<p>The type of KMS key used for encryption.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ARN of the KMS key used to encrypt data. Required when KeyType is CUSTOMER_MANAGED_KEY. Cannot be specified when KeyType is AWS_OWNED_KMS_KEY.</p>"
+        }
+      },
+      "documentation":"<p> A structure that specifies the KMS key type and KMS key ARN used to encrypt data in your IAM Identity Center instance.</p>"
+    },
+    "EncryptionConfigurationDetails":{
+      "type":"structure",
+      "members":{
+        "KeyType":{
+          "shape":"KmsKeyType",
+          "documentation":"<p>The type of KMS key used for encryption.</p>"
+        },
+        "KmsKeyArn":{
+          "shape":"KmsKeyArn",
+          "documentation":"<p>The ARN of the KMS key currently used to encrypt data in your IAM Identity Center instance. </p>"
+        },
+        "EncryptionStatus":{
+          "shape":"KmsKeyStatus",
+          "documentation":"<p>The current status of encryption configuration.</p>"
+        },
+        "EncryptionStatusReason":{
+          "shape":"Reason",
+          "documentation":"<p>Provides additional context about the current encryption status. This field is particularly useful when the encryption status is UPDATE_FAILED. When encryption configuration update fails, this field contains information about the cause, which may include KMS key access issues, key not found errors, invalid key configuration, key in an invalid state, or a disabled key. </p>"
+        }
+      },
+      "documentation":"<p>The encryption configuration of your IAM Identity Center instance, including the key type, KMS key ARN, and current encryption status. </p>"
     },
     "FederationProtocol":{
       "type":"string",
@@ -2772,13 +2855,13 @@
       "type":"structure",
       "required":["Scope"],
       "members":{
-        "AuthorizedTargets":{
-          "shape":"ScopeTargets",
-          "documentation":"<p>An array of authorized targets associated with this access scope.</p>"
-        },
         "Scope":{
           "shape":"Scope",
           "documentation":"<p>The name of the access scope that can be used with the authorized targets.</p>"
+        },
+        "AuthorizedTargets":{
+          "shape":"ScopeTargets",
+          "documentation":"<p>An array of authorized targets associated with this access scope.</p>"
         }
       }
     },
@@ -2855,6 +2938,25 @@
         }
       }
     },
+    "GetApplicationSessionConfigurationRequest":{
+      "type":"structure",
+      "required":["ApplicationArn"],
+      "members":{
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the application for which to retrieve the session configuration.</p>"
+        }
+      }
+    },
+    "GetApplicationSessionConfigurationResponse":{
+      "type":"structure",
+      "members":{
+        "UserBackgroundSessionApplicationStatus":{
+          "shape":"UserBackgroundSessionApplicationStatus",
+          "documentation":"<p>The status of user background sessions for the application. </p>"
+        }
+      }
+    },
     "GetInlinePolicyForPermissionSetRequest":{
       "type":"structure",
       "required":[
@@ -2933,17 +3035,17 @@
     "GrantItem":{
       "type":"structure",
       "required":[
-        "Grant",
-        "GrantType"
+        "GrantType",
+        "Grant"
       ],
       "members":{
-        "Grant":{
-          "shape":"Grant",
-          "documentation":"<p>The configuration structure for the selected grant.</p>"
-        },
         "GrantType":{
           "shape":"GrantType",
           "documentation":"<p>The type of the selected grant.</p>"
+        },
+        "Grant":{
+          "shape":"Grant",
+          "documentation":"<p>The configuration structure for the selected grant.</p>"
         }
       },
       "documentation":"<p>A structure that defines a single grant and its configuration.</p>"
@@ -2976,13 +3078,13 @@
       "type":"string",
       "max":768,
       "min":1,
-      "pattern":"^(http|https):\\/\\/.*$"
+      "pattern":"(http|https):\\/\\/.*"
     },
     "Id":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[a-zA-Z0-9-]*$"
+      "pattern":"[a-zA-Z0-9-]*"
     },
     "InstanceAccessControlAttributeConfiguration":{
       "type":"structure",
@@ -3008,7 +3110,7 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}"
     },
     "InstanceList":{
       "type":"list",
@@ -3019,29 +3121,33 @@
     "InstanceMetadata":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date and time that the Identity Center instance was created.</p>"
+        "InstanceArn":{
+          "shape":"InstanceArn",
+          "documentation":"<p>The ARN of the Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
         "IdentityStoreId":{
           "shape":"Id",
           "documentation":"<p>The identifier of the identity store that is connected to the Identity Center instance.</p>"
         },
-        "InstanceArn":{
-          "shape":"InstanceArn",
-          "documentation":"<p>The ARN of the Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        "OwnerAccountId":{
+          "shape":"AccountId",
+          "documentation":"<p>The Amazon Web Services account ID number of the owner of the Identity Center instance.</p>"
         },
         "Name":{
           "shape":"NameType",
           "documentation":"<p>The name of the Identity Center instance.</p>"
         },
-        "OwnerAccountId":{
-          "shape":"AccountId",
-          "documentation":"<p>The Amazon Web Services account ID number of the owner of the Identity Center instance.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date and time that the Identity Center instance was created.</p>"
         },
         "Status":{
           "shape":"InstanceStatus",
           "documentation":"<p>The current status of this Identity Center instance.</p>"
+        },
+        "StatusReason":{
+          "shape":"Reason",
+          "documentation":"<p>Provides additional context about the current status of the IAM Identity Center instance. This field is particularly useful when an instance is in a non-ACTIVE state, such as CREATE_FAILED. When an instance creation fails, this field contains information about the cause, which may include issues with KMS key configuration or insufficient permissions. </p>"
         }
       },
       "documentation":"<p>Provides information about the IAM Identity Center instance.</p>"
@@ -3050,6 +3156,7 @@
       "type":"string",
       "enum":[
         "CREATE_IN_PROGRESS",
+        "CREATE_FAILED",
         "DELETE_IN_PROGRESS",
         "ACTIVE"
       ]
@@ -3068,7 +3175,7 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^\\p{L}+(?:\\.\\p{L}+){0,2}$"
+      "pattern":"\\p{L}+(?:\\.\\p{L}+){0,2}"
     },
     "JwksRetrievalOption":{
       "type":"string",
@@ -3079,19 +3186,36 @@
       "members":{
         "AuthorizedTokenIssuers":{
           "shape":"AuthorizedTokenIssuers",
-          "documentation":"<p>A list of allowed token issuers trusted by the Identity Center instances for this application.</p>"
+          "documentation":"<p>A list of allowed token issuers trusted by the Identity Center instances for this application.</p> <note> <p> <code>AuthorizedTokenIssuers</code> is required when the grant type is <code>JwtBearerGrant</code>.</p> </note>"
         }
       },
-      "documentation":"<p>A structure that defines configuration settings for an application that supports the JWT Bearer Token Authorization Grant.</p>"
+      "documentation":"<p>A structure that defines configuration settings for an application that supports the JWT Bearer Token Authorization Grant. The <code>AuthorizedAudience</code> field is the aud claim. For more information, see <a href=\"https://datatracker.ietf.org/doc/html/rfc7523\">RFC 7523</a>.</p>"
+    },
+    "KmsKeyArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-[bcd]):kms:([a-z]{2,}(-[a-z0-9]+)+){1}:[0-9]{12}:key/(mrk-[a-f0-9]{32}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"
+    },
+    "KmsKeyStatus":{
+      "type":"string",
+      "enum":[
+        "UPDATING",
+        "ENABLED",
+        "UPDATE_FAILED"
+      ]
+    },
+    "KmsKeyType":{
+      "type":"string",
+      "enum":[
+        "AWS_OWNED_KMS_KEY",
+        "CUSTOMER_MANAGED_KEY"
+      ]
     },
     "ListAccountAssignmentCreationStatusRequest":{
       "type":"structure",
       "required":["InstanceArn"],
       "members":{
-        "Filter":{
-          "shape":"OperationStatusFilter",
-          "documentation":"<p>Filters results based on the passed attribute value.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -3103,6 +3227,10 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
+        },
+        "Filter":{
+          "shape":"OperationStatusFilter",
+          "documentation":"<p>Filters results based on the passed attribute value.</p>"
         }
       }
     },
@@ -3123,10 +3251,6 @@
       "type":"structure",
       "required":["InstanceArn"],
       "members":{
-        "Filter":{
-          "shape":"OperationStatusFilter",
-          "documentation":"<p>Filters results based on the passed attribute value.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -3138,6 +3262,10 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
+        },
+        "Filter":{
+          "shape":"OperationStatusFilter",
+          "documentation":"<p>Filters results based on the passed attribute value.</p>"
         }
       }
     },
@@ -3172,22 +3300,10 @@
         "PrincipalType"
       ],
       "members":{
-        "Filter":{
-          "shape":"ListAccountAssignmentsFilter",
-          "documentation":"<p>Specifies an Amazon Web Services account ID number. Results are filtered to only those that match this ID number.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>Specifies the ARN of the instance of IAM Identity Center that contains the principal.</p>"
         },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the <code>NextToken</code> response element is returned with a value (not null). Include the specified value as the <code>NextToken</code> request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
-        },
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
-        },
         "PrincipalId":{
           "shape":"PrincipalId",
           "documentation":"<p>Specifies the principal for which you want to retrieve the list of account assignments.</p>"
@@ -3195,6 +3311,18 @@
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>Specifies the type of the principal.</p>"
+        },
+        "Filter":{
+          "shape":"ListAccountAssignmentsFilter",
+          "documentation":"<p>Specifies an Amazon Web Services account ID number. Results are filtered to only those that match this ID number.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the <code>NextToken</code> response element is returned with a value (not null). Include the specified value as the <code>NextToken</code> request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
         }
       }
     },
@@ -3214,18 +3342,22 @@
     "ListAccountAssignmentsRequest":{
       "type":"structure",
       "required":[
-        "AccountId",
         "InstanceArn",
+        "AccountId",
         "PermissionSetArn"
       ],
       "members":{
+        "InstanceArn":{
+          "shape":"InstanceArn",
+          "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
         "AccountId":{
           "shape":"TargetId",
           "documentation":"<p>The identifier of the Amazon Web Services account from which to list the assignments.</p>"
         },
-        "InstanceArn":{
-          "shape":"InstanceArn",
-          "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        "PermissionSetArn":{
+          "shape":"PermissionSetArn",
+          "documentation":"<p>The ARN of the permission set from which to list assignments.</p>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -3234,10 +3366,6 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
-        "PermissionSetArn":{
-          "shape":"PermissionSetArn",
-          "documentation":"<p>The ARN of the permission set from which to list assignments.</p>"
         }
       }
     },
@@ -3265,14 +3393,6 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to display for the <a>PermissionSet</a>.</p>"
-        },
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the <a>PermissionSet</a> from which the associated Amazon Web Services accounts will be listed.</p>"
@@ -3280,6 +3400,14 @@
         "ProvisioningStatus":{
           "shape":"ProvisioningStatus",
           "documentation":"<p>The permission set provisioning status for an Amazon Web Services account.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to display for the <a>PermissionSet</a>.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
         }
       }
     },
@@ -3324,13 +3452,13 @@
       "type":"structure",
       "required":["Scopes"],
       "members":{
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>If present, this value indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. This indicates that this is the last page of results.</p>"
-        },
         "Scopes":{
           "shape":"Scopes",
           "documentation":"<p>An array list of access scopes and their authorized targets that are associated with the application.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, this value indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. This indicates that this is the last page of results.</p>"
         }
       }
     },
@@ -3352,22 +3480,10 @@
         "PrincipalType"
       ],
       "members":{
-        "Filter":{
-          "shape":"ListApplicationAssignmentsFilter",
-          "documentation":"<p>Filters the output to include only assignments associated with the application that has the specified ARN.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>Specifies the instance of IAM Identity Center that contains principal and applications.</p>"
         },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the <code>NextToken</code> response element is returned with a value (not null). Include the specified value as the <code>NextToken</code> request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
-        },
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
-        },
         "PrincipalId":{
           "shape":"PrincipalId",
           "documentation":"<p>Specifies the unique identifier of the principal for which you want to retrieve its assignments.</p>"
@@ -3375,6 +3491,18 @@
         "PrincipalType":{
           "shape":"PrincipalType",
           "documentation":"<p>Specifies the type of the principal for which you want to retrieve its assignments.</p>"
+        },
+        "Filter":{
+          "shape":"ListApplicationAssignmentsFilter",
+          "documentation":"<p>Filters the output to include only assignments associated with the application that has the specified ARN.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the <code>NextToken</code> response element is returned with a value (not null). Include the specified value as the <code>NextToken</code> request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check <code>NextToken</code> after every operation to ensure that you receive all of the results.</p>"
         }
       }
     },
@@ -3521,10 +3649,6 @@
       "type":"structure",
       "required":["InstanceArn"],
       "members":{
-        "Filter":{
-          "shape":"ListApplicationsFilter",
-          "documentation":"<p>Filters response results. </p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center application under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -3536,6 +3660,10 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>Specifies that you want to receive the next page of results. Valid only if you received a <code>NextToken</code> response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's <code>NextToken</code> response to request the next page of results.</p>"
+        },
+        "Filter":{
+          "shape":"ListApplicationsFilter",
+          "documentation":"<p>Filters response results. </p>"
         }
       }
     },
@@ -3563,6 +3691,10 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. </p>"
         },
+        "PermissionSetArn":{
+          "shape":"PermissionSetArn",
+          "documentation":"<p>The ARN of the <code>PermissionSet</code>. </p>"
+        },
         "MaxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to display for the list call.</p>"
@@ -3570,10 +3702,6 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
-        "PermissionSetArn":{
-          "shape":"PermissionSetArn",
-          "documentation":"<p>The ARN of the <code>PermissionSet</code>. </p>"
         }
       }
     },
@@ -3627,6 +3755,10 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
+        "PermissionSetArn":{
+          "shape":"PermissionSetArn",
+          "documentation":"<p>The ARN of the <a>PermissionSet</a> whose managed policies will be listed.</p>"
+        },
         "MaxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to display for the <a>PermissionSet</a>.</p>"
@@ -3634,10 +3766,6 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
-        "PermissionSetArn":{
-          "shape":"PermissionSetArn",
-          "documentation":"<p>The ARN of the <a>PermissionSet</a> whose managed policies will be listed.</p>"
         }
       }
     },
@@ -3658,10 +3786,6 @@
       "type":"structure",
       "required":["InstanceArn"],
       "members":{
-        "Filter":{
-          "shape":"OperationStatusFilter",
-          "documentation":"<p>Filters results based on the passed attribute value.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -3673,36 +3797,44 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
+        },
+        "Filter":{
+          "shape":"OperationStatusFilter",
+          "documentation":"<p>Filters results based on the passed attribute value.</p>"
         }
       }
     },
     "ListPermissionSetProvisioningStatusResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
         "PermissionSetsProvisioningStatus":{
           "shape":"PermissionSetProvisioningStatusList",
           "documentation":"<p>The status object for the permission set provisioning operation.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
         }
       }
     },
     "ListPermissionSetsProvisionedToAccountRequest":{
       "type":"structure",
       "required":[
-        "AccountId",
-        "InstanceArn"
+        "InstanceArn",
+        "AccountId"
       ],
       "members":{
+        "InstanceArn":{
+          "shape":"InstanceArn",
+          "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        },
         "AccountId":{
           "shape":"AccountId",
           "documentation":"<p>The identifier of the Amazon Web Services account from which to list the assignments.</p>"
         },
-        "InstanceArn":{
-          "shape":"InstanceArn",
-          "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
+        "ProvisioningStatus":{
+          "shape":"ProvisioningStatus",
+          "documentation":"<p>The status object for the permission set provisioning operation.</p>"
         },
         "MaxResults":{
           "shape":"MaxResults",
@@ -3711,10 +3843,6 @@
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
-        "ProvisioningStatus":{
-          "shape":"ProvisioningStatus",
-          "documentation":"<p>The status object for the permission set provisioning operation.</p>"
         }
       }
     },
@@ -3739,26 +3867,26 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "MaxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to display for the assignment.</p>"
-        },
         "NextToken":{
           "shape":"Token",
           "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to display for the assignment.</p>"
         }
       }
     },
     "ListPermissionSetsResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
         "PermissionSets":{
           "shape":"PermissionSetList",
           "documentation":"<p>Defines the level of access on an Amazon Web Services account.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
         }
       }
     },
@@ -3770,26 +3898,26 @@
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
         "ResourceArn":{
           "shape":"TaggableResourceArn",
           "documentation":"<p>The ARN of the resource with the tags to be listed.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
         }
       }
     },
     "ListTagsForResourceResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
-        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>A set of key-value pairs that are used to manage the resource.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.</p>"
         }
       }
     },
@@ -3814,13 +3942,13 @@
     "ListTrustedTokenIssuersResponse":{
       "type":"structure",
       "members":{
-        "NextToken":{
-          "shape":"Token",
-          "documentation":"<p>If present, this value indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. This indicates that this is the last page of results.</p>"
-        },
         "TrustedTokenIssuers":{
           "shape":"TrustedTokenIssuerList",
           "documentation":"<p>An array list of the trusted token issuer configurations.</p>"
+        },
+        "NextToken":{
+          "shape":"Token",
+          "documentation":"<p>If present, this value indicates that more output is available than is included in the current response. Use this value in the <code>NextToken</code> request parameter in a subsequent call to the operation to get the next part of the output. You should repeat this until the <code>NextToken</code> response element comes back as <code>null</code>. This indicates that this is the last page of results.</p>"
         }
       }
     },
@@ -3828,19 +3956,19 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):iam::aws:policy/[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]+$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):iam::aws:policy((/[A-Za-z0-9\\.,\\+@=_-]+)*)/([A-Za-z0-9\\.,\\+=@_-]+)"
     },
     "ManagedPolicyName":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\w+=,.@-]+$"
+      "pattern":"[\\w+=,.@-]+"
     },
     "ManagedPolicyPath":{
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^((/[A-Za-z0-9\\.,\\+@=_-]+)*)/$"
+      "pattern":"((/[A-Za-z0-9\\.,\\+@=_-]+)*)/"
     },
     "MaxResults":{
       "type":"integer",
@@ -3857,17 +3985,21 @@
       "type":"string",
       "max":255,
       "min":0,
-      "pattern":"^[\\w+=,.@-]+$"
+      "pattern":"[\\w+=,.@-]+"
     },
     "OidcJwtConfiguration":{
       "type":"structure",
       "required":[
+        "IssuerUrl",
         "ClaimAttributePath",
         "IdentityStoreAttributePath",
-        "IssuerUrl",
         "JwksRetrievalOption"
       ],
       "members":{
+        "IssuerUrl":{
+          "shape":"TrustedTokenIssuerUrl",
+          "documentation":"<p>The URL that IAM Identity Center uses for OpenID Discovery. OpenID Discovery is used to obtain the information required to verify the tokens that the trusted token issuer generates.</p>"
+        },
         "ClaimAttributePath":{
           "shape":"ClaimAttributePath",
           "documentation":"<p>The path of the source attribute in the JWT from the trusted token issuer. The attribute mapped by this JMESPath expression is compared against the attribute mapped by <code>IdentityStoreAttributePath</code> when a trusted token issuer token is exchanged for an IAM Identity Center token.</p>"
@@ -3876,10 +4008,6 @@
           "shape":"JMESPath",
           "documentation":"<p>The path of the destination attribute in a JWT from IAM Identity Center. The attribute mapped by this JMESPath expression is compared against the attribute mapped by <code>ClaimAttributePath</code> when a trusted token issuer token is exchanged for an IAM Identity Center token. </p>"
         },
-        "IssuerUrl":{
-          "shape":"TrustedTokenIssuerUrl",
-          "documentation":"<p>The URL that IAM Identity Center uses for OpenID Discovery. OpenID Discovery is used to obtain the information required to verify the tokens that the trusted token issuer generates.</p>"
-        },
         "JwksRetrievalOption":{
           "shape":"JwksRetrievalOption",
           "documentation":"<p>The method that the trusted token issuer can use to retrieve the JSON Web Key Set used to verify a JWT.</p>"
@@ -3918,14 +4046,6 @@
     "PermissionSet":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date that the permission set was created.</p>"
-        },
-        "Description":{
-          "shape":"PermissionSetDescription",
-          "documentation":"<p>The description of the <a>PermissionSet</a>.</p>"
-        },
         "Name":{
           "shape":"PermissionSetName",
           "documentation":"<p>The name of the permission set.</p>"
@@ -3934,13 +4054,21 @@
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "RelayState":{
-          "shape":"RelayState",
-          "documentation":"<p>Used to redirect users within the application during the federation authentication process.</p>"
+        "Description":{
+          "shape":"PermissionSetDescription",
+          "documentation":"<p>The description of the <a>PermissionSet</a>.</p>"
+        },
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date that the permission set was created.</p>"
         },
         "SessionDuration":{
           "shape":"Duration",
           "documentation":"<p>The length of time that the application user sessions are valid for in the ISO-8601 standard.</p>"
+        },
+        "RelayState":{
+          "shape":"RelayState",
+          "documentation":"<p>Used to redirect users within the application during the federation authentication process.</p>"
         }
       },
       "documentation":"<p>An entity that contains IAM policies.</p>"
@@ -3949,13 +4077,13 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}"
     },
     "PermissionSetDescription":{
       "type":"string",
       "max":700,
       "min":1,
-      "pattern":"^[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]*$"
+      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u00A1-\\u00FF]*"
     },
     "PermissionSetList":{
       "type":"list",
@@ -3965,40 +4093,40 @@
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[\\w+=,.@-]+$"
+      "pattern":"[\\w+=,.@-]+"
     },
     "PermissionSetPolicyDocument":{
       "type":"string",
       "max":32768,
       "min":1,
-      "pattern":"^[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+$"
+      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+"
     },
     "PermissionSetProvisioningStatus":{
       "type":"structure",
       "members":{
+        "Status":{
+          "shape":"StatusValues",
+          "documentation":"<p>The status of the permission set provisioning process.</p>"
+        },
+        "RequestId":{
+          "shape":"UUId",
+          "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
+        },
         "AccountId":{
           "shape":"AccountId",
           "documentation":"<p>The identifier of the Amazon Web Services account from which to list the assignments.</p>"
         },
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date that the permission set was created.</p>"
-        },
-        "FailureReason":{
-          "shape":"Reason",
-          "documentation":"<p>The message that contains an error or exception in case of an operation failure.</p>"
-        },
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set that is being provisioned. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "RequestId":{
-          "shape":"UUId",
-          "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
+        "FailureReason":{
+          "shape":"Reason",
+          "documentation":"<p>The message that contains an error or exception in case of an operation failure.</p>"
         },
-        "Status":{
-          "shape":"StatusValues",
-          "documentation":"<p>The status of the permission set provisioning process.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date that the permission set was created.</p>"
         }
       },
       "documentation":"<p>A structure that is used to provide the status of the provisioning operation for a specified permission set.</p>"
@@ -4010,17 +4138,17 @@
     "PermissionSetProvisioningStatusMetadata":{
       "type":"structure",
       "members":{
-        "CreatedDate":{
-          "shape":"Date",
-          "documentation":"<p>The date that the permission set was created.</p>"
+        "Status":{
+          "shape":"StatusValues",
+          "documentation":"<p>The status of the permission set provisioning process.</p>"
         },
         "RequestId":{
           "shape":"UUId",
           "documentation":"<p>The identifier for tracking the request operation that is generated by the universally unique identifier (UUID) workflow.</p>"
         },
-        "Status":{
-          "shape":"StatusValues",
-          "documentation":"<p>The status of the permission set provisioning process.</p>"
+        "CreatedDate":{
+          "shape":"Date",
+          "documentation":"<p>The date that the permission set was created.</p>"
         }
       },
       "documentation":"<p>Provides information about the permission set provisioning status.</p>"
@@ -4057,7 +4185,7 @@
       "type":"string",
       "max":47,
       "min":1,
-      "pattern":"^([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$"
+      "pattern":"([0-9a-f]{10}-|)[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
     },
     "PrincipalType":{
       "type":"string",
@@ -4118,21 +4246,21 @@
     "PutApplicationAccessScopeRequest":{
       "type":"structure",
       "required":[
-        "ApplicationArn",
-        "Scope"
+        "Scope",
+        "ApplicationArn"
       ],
       "members":{
-        "ApplicationArn":{
-          "shape":"ApplicationArn",
-          "documentation":"<p>Specifies the ARN of the application with the access scope with the targets to add or update.</p>"
+        "Scope":{
+          "shape":"Scope",
+          "documentation":"<p>Specifies the name of the access scope to be associated with the specified targets.</p>"
         },
         "AuthorizedTargets":{
           "shape":"ScopeTargets",
           "documentation":"<p>Specifies an array list of ARNs that represent the authorized targets for this access scope.</p>"
         },
-        "Scope":{
-          "shape":"Scope",
-          "documentation":"<p>Specifies the name of the access scope to be associated with the specified targets.</p>"
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>Specifies the ARN of the application with the access scope with the targets to add or update.</p>"
         }
       }
     },
@@ -4155,28 +4283,27 @@
     },
     "PutApplicationAssignmentConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutApplicationAuthenticationMethodRequest":{
       "type":"structure",
       "required":[
         "ApplicationArn",
-        "AuthenticationMethod",
-        "AuthenticationMethodType"
+        "AuthenticationMethodType",
+        "AuthenticationMethod"
       ],
       "members":{
         "ApplicationArn":{
           "shape":"ApplicationArn",
           "documentation":"<p>Specifies the ARN of the application with the authentication method to add or update.</p>"
         },
-        "AuthenticationMethod":{
-          "shape":"AuthenticationMethod",
-          "documentation":"<p>Specifies a structure that describes the authentication method to add or update. The structure type you provide is determined by the <code>AuthenticationMethodType</code> parameter.</p>"
-        },
         "AuthenticationMethodType":{
           "shape":"AuthenticationMethodType",
           "documentation":"<p>Specifies the type of the authentication method that you want to add or update.</p>"
+        },
+        "AuthenticationMethod":{
+          "shape":"AuthenticationMethod",
+          "documentation":"<p>Specifies a structure that describes the authentication method to add or update. The structure type you provide is determined by the <code>AuthenticationMethodType</code> parameter.</p>"
         }
       }
     },
@@ -4184,36 +4311,50 @@
       "type":"structure",
       "required":[
         "ApplicationArn",
-        "Grant",
-        "GrantType"
+        "GrantType",
+        "Grant"
       ],
       "members":{
         "ApplicationArn":{
           "shape":"ApplicationArn",
           "documentation":"<p>Specifies the ARN of the application to update.</p>"
         },
+        "GrantType":{
+          "shape":"GrantType",
+          "documentation":"<p>Specifies the type of grant to update.</p>"
+        },
         "Grant":{
           "shape":"Grant",
           "documentation":"<p>Specifies a structure that describes the grant to update.</p>"
+        }
+      }
+    },
+    "PutApplicationSessionConfigurationRequest":{
+      "type":"structure",
+      "required":["ApplicationArn"],
+      "members":{
+        "ApplicationArn":{
+          "shape":"ApplicationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the application for which to update the session configuration.</p>"
         },
-        "GrantType":{
-          "shape":"GrantType",
-          "documentation":"<p>Specifies the type of grant to update.</p>"
+        "UserBackgroundSessionApplicationStatus":{
+          "shape":"UserBackgroundSessionApplicationStatus",
+          "documentation":"<p>The status of user background sessions for the application.</p>"
         }
       }
     },
+    "PutApplicationSessionConfigurationResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "PutInlinePolicyToPermissionSetRequest":{
       "type":"structure",
       "required":[
-        "InlinePolicy",
         "InstanceArn",
-        "PermissionSetArn"
+        "PermissionSetArn",
+        "InlinePolicy"
       ],
       "members":{
-        "InlinePolicy":{
-          "shape":"PermissionSetPolicyDocument",
-          "documentation":"<p>The inline policy to attach to a <a>PermissionSet</a>.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -4221,13 +4362,16 @@
         "PermissionSetArn":{
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set.</p>"
+        },
+        "InlinePolicy":{
+          "shape":"PermissionSetPolicyDocument",
+          "documentation":"<p>The inline policy to attach to a <a>PermissionSet</a>.</p>"
         }
       }
     },
     "PutInlinePolicyToPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutPermissionsBoundaryToPermissionSetRequest":{
       "type":"structure",
@@ -4253,12 +4397,11 @@
     },
     "PutPermissionsBoundaryToPermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Reason":{
       "type":"string",
-      "pattern":"^[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*$"
+      "pattern":"[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*"
     },
     "RedirectUris":{
       "type":"list",
@@ -4268,24 +4411,31 @@
     },
     "RefreshTokenGrant":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>A structure that defines configuration settings for an application that supports the OAuth 2.0 Refresh Token Grant.</p>"
+      "members":{},
+      "documentation":"<p>A structure that defines configuration settings for an application that supports the OAuth 2.0 Refresh Token Grant. For more, see <a href=\"https://datatracker.ietf.org/doc/html/rfc6749#section-1.5\">RFC 6749</a>.</p>"
     },
     "RelayState":{
       "type":"string",
       "max":240,
       "min":1,
-      "pattern":"^[a-zA-Z0-9&$@#\\\\\\/%?=~\\-_'\"|!:,.;*+\\[\\]\\ \\(\\)\\{\\}]+$"
+      "pattern":"[a-zA-Z0-9&$@#\\\\\\/%?=~\\-_'\"|!:,.;*+\\[\\]\\ \\(\\)\\{\\}]+"
     },
     "ResourceNotFoundException":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"ResourceNotFoundMessage"}
+        "Message":{"shape":"ResourceNotFoundMessage"},
+        "Reason":{
+          "shape":"ResourceNotFoundExceptionReason",
+          "documentation":"<p>The reason for the resource not found exception.</p>"
+        }
       },
       "documentation":"<p>Indicates that a requested resource is not found.</p>",
       "exception":true
     },
+    "ResourceNotFoundExceptionReason":{
+      "type":"string",
+      "enum":["KMS_NotFoundException"]
+    },
     "ResourceNotFoundMessage":{"type":"string"},
     "ResourceServerConfig":{
       "type":"structure",
@@ -4301,18 +4451,18 @@
       "type":"string",
       "max":80,
       "min":1,
-      "pattern":"^[^:=\\-\\.\\s][0-9a-zA-Z_:\\-\\.]+$"
+      "pattern":"[^:=\\-\\.\\s][0-9a-zA-Z_:\\-\\.]+"
     },
     "ResourceServerScopeDetails":{
       "type":"structure",
       "members":{
-        "DetailedTitle":{
-          "shape":"Description",
-          "documentation":"<p>The title of an access scope for a resource server.</p>"
-        },
         "LongDescription":{
           "shape":"Description",
           "documentation":"<p>The description of an access scope for a resource server.</p>"
+        },
+        "DetailedTitle":{
+          "shape":"Description",
+          "documentation":"<p>The title of an access scope for a resource server.</p>"
         }
       },
       "documentation":"<p>A structure that describes details for an IAM Identity Center access scope that is associated with a resource server.</p>"
@@ -4324,19 +4474,19 @@
     },
     "Scope":{
       "type":"string",
-      "pattern":"^([A-Za-z0-9_]{1,50})(:[A-Za-z0-9_]{1,50}){0,1}(:[A-Za-z0-9_]{1,50}){0,1}$"
+      "pattern":"([A-Za-z0-9_]{1,50})(:[A-Za-z0-9_]{1,50}){0,1}(:[A-Za-z0-9_]{1,50}){0,1}"
     },
     "ScopeDetails":{
       "type":"structure",
       "required":["Scope"],
       "members":{
-        "AuthorizedTargets":{
-          "shape":"ScopeTargets",
-          "documentation":"<p>An array list of ARNs of applications.</p>"
-        },
         "Scope":{
           "shape":"Scope",
           "documentation":"<p>The name of the access scope.</p>"
+        },
+        "AuthorizedTargets":{
+          "shape":"ScopeTargets",
+          "documentation":"<p>An array list of ARNs of applications.</p>"
         }
       },
       "documentation":"<p>A structure that describes an IAM Identity Center access scope and its authorized targets.</p>"
@@ -4345,7 +4495,7 @@
       "type":"string",
       "max":100,
       "min":1,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::(\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}|:instance/(sso)?ins-[a-zA-Z0-9-.]{16})$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::(\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16}|:instance/(sso)?ins-[a-zA-Z0-9-.]{16})"
     },
     "ScopeTargets":{
       "type":"list",
@@ -4372,13 +4522,13 @@
       "type":"structure",
       "required":["Origin"],
       "members":{
-        "ApplicationUrl":{
-          "shape":"ApplicationUrl",
-          "documentation":"<p>The URL that accepts authentication requests for an application. This is a required parameter if the <code>Origin</code> parameter is <code>APPLICATION</code>.</p>"
-        },
         "Origin":{
           "shape":"SignInOrigin",
           "documentation":"<p>This determines how IAM Identity Center navigates the user to the target application. It can be one of the following values:</p> <ul> <li> <p> <code>APPLICATION</code>: IAM Identity Center redirects the customer to the configured <code>ApplicationUrl</code>.</p> </li> <li> <p> <code>IDENTITY_CENTER</code>: IAM Identity Center uses SAML identity-provider initiated authentication to sign the customer directly into a SAML-based application.</p> </li> </ul>"
+        },
+        "ApplicationUrl":{
+          "shape":"ApplicationUrl",
+          "documentation":"<p>The URL that accepts authentication requests for an application. This is a required parameter if the <code>Origin</code> parameter is <code>APPLICATION</code>.</p>"
         }
       },
       "documentation":"<p>A structure that describes the sign-in options for an application portal.</p>"
@@ -4420,7 +4570,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TagKeyList":{
       "type":"list",
@@ -4457,26 +4607,25 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
     },
     "TaggableResourceArn":{
       "type":"string",
       "max":2048,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::((:instance/(sso)?ins-[a-zA-Z0-9-.]{16})|(:permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16})|(\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16})|(\\d{12}:trustedTokenIssuer/(sso)?ins-[a-zA-Z0-9-.]{16}/tti-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}))$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::((:instance/(sso)?ins-[a-zA-Z0-9-.]{16})|(:permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16})|(\\d{12}:application/(sso)?ins-[a-zA-Z0-9-.]{16}/apl-[a-zA-Z0-9]{16})|(\\d{12}:trustedTokenIssuer/(sso)?ins-[a-zA-Z0-9-.]{16}/tti-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}))"
     },
     "TargetId":{
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^\\d{12}$"
+      "pattern":"\\d{12}"
     },
     "TargetType":{
       "type":"string",
@@ -4485,23 +4634,30 @@
     "ThrottlingException":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"ThrottlingExceptionMessage"}
+        "Message":{"shape":"ThrottlingExceptionMessage"},
+        "Reason":{
+          "shape":"ThrottlingExceptionReason",
+          "documentation":"<p>The reason for the throttling exception.</p>"
+        }
       },
       "documentation":"<p>Indicates that the principal has crossed the throttling limits of the API operations.</p>",
       "exception":true
     },
     "ThrottlingExceptionMessage":{"type":"string"},
+    "ThrottlingExceptionReason":{
+      "type":"string",
+      "enum":["KMS_ThrottlingException"]
+    },
     "Token":{
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^[-a-zA-Z0-9+=/_]*$"
+      "pattern":"[-a-zA-Z0-9+=/_]*"
     },
     "TokenExchangeGrant":{
       "type":"structure",
-      "members":{
-      },
-      "documentation":"<p>A structure that defines configuration settings for an application that supports the OAuth 2.0 Token Exchange Grant.</p>"
+      "members":{},
+      "documentation":"<p>A structure that defines configuration settings for an application that supports the OAuth 2.0 Token Exchange Grant. For more information, see <a href=\"https://datatracker.ietf.org/doc/html/rfc8693\">RFC 8693</a>.</p>"
     },
     "TokenIssuerAudience":{
       "type":"string",
@@ -4518,7 +4674,7 @@
       "type":"string",
       "max":1224,
       "min":10,
-      "pattern":"^arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:trustedTokenIssuer/(sso)?ins-[a-zA-Z0-9-.]{16}/tti-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
+      "pattern":"arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso::\\d{12}:trustedTokenIssuer/(sso)?ins-[a-zA-Z0-9-.]{16}/tti-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
     },
     "TrustedTokenIssuerConfiguration":{
       "type":"structure",
@@ -4538,14 +4694,14 @@
     "TrustedTokenIssuerMetadata":{
       "type":"structure",
       "members":{
-        "Name":{
-          "shape":"TrustedTokenIssuerName",
-          "documentation":"<p>The name of the trusted token issuer configuration in the instance of IAM Identity Center.</p>"
-        },
         "TrustedTokenIssuerArn":{
           "shape":"TrustedTokenIssuerArn",
           "documentation":"<p>The ARN of the trusted token issuer configuration in the instance of IAM Identity Center.</p>"
         },
+        "Name":{
+          "shape":"TrustedTokenIssuerName",
+          "documentation":"<p>The name of the trusted token issuer configuration in the instance of IAM Identity Center.</p>"
+        },
         "TrustedTokenIssuerType":{
           "shape":"TrustedTokenIssuerType",
           "documentation":"<p>The type of trusted token issuer.</p>"
@@ -4557,7 +4713,7 @@
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^[\\w+=,.@-]+$"
+      "pattern":"[\\w+=,.@-]+"
     },
     "TrustedTokenIssuerType":{
       "type":"string",
@@ -4578,14 +4734,14 @@
       "type":"string",
       "max":512,
       "min":1,
-      "pattern":"^https?:\\/\\/[-a-zA-Z0-9+&@\\/%=~_|!:,.;]*[-a-zA-Z0-9+&@\\/%=~_|]$"
+      "pattern":"https?:\\/\\/[-a-zA-Z0-9+&@\\/%=~_|!:,.;]*[-a-zA-Z0-9+&@\\/%=~_|]"
     },
     "URI":{"type":"string"},
     "UUId":{
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b$"
+      "pattern":"\\b[0-9a-f]{8}\\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\\b[0-9a-f]{12}\\b"
     },
     "UntagResourceRequest":{
       "type":"structure",
@@ -4610,8 +4766,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateApplicationPortalOptions":{
       "type":"structure",
@@ -4628,72 +4783,70 @@
           "shape":"ApplicationArn",
           "documentation":"<p>Specifies the ARN of the application. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
+        "Name":{
+          "shape":"ApplicationNameType",
+          "documentation":"<p>Specifies the updated name for the application.</p>"
+        },
         "Description":{
           "shape":"Description",
           "documentation":"<p>The description of the .</p>"
         },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>Specifies the updated name for the application.</p>"
+        "Status":{
+          "shape":"ApplicationStatus",
+          "documentation":"<p>Specifies whether the application is enabled or disabled.</p>"
         },
         "PortalOptions":{
           "shape":"UpdateApplicationPortalOptions",
           "documentation":"<p>A structure that describes the options for the portal associated with an application.</p>"
-        },
-        "Status":{
-          "shape":"ApplicationStatus",
-          "documentation":"<p>Specifies whether the application is enabled or disabled.</p>"
         }
       }
     },
     "UpdateApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateInstanceAccessControlAttributeConfigurationRequest":{
       "type":"structure",
       "required":[
-        "InstanceAccessControlAttributeConfiguration",
-        "InstanceArn"
+        "InstanceArn",
+        "InstanceAccessControlAttributeConfiguration"
       ],
       "members":{
-        "InstanceAccessControlAttributeConfiguration":{
-          "shape":"InstanceAccessControlAttributeConfiguration",
-          "documentation":"<p>Updates the attributes for your ABAC configuration.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed.</p>"
+        },
+        "InstanceAccessControlAttributeConfiguration":{
+          "shape":"InstanceAccessControlAttributeConfiguration",
+          "documentation":"<p>Updates the attributes for your ABAC configuration.</p>"
         }
       }
     },
     "UpdateInstanceAccessControlAttributeConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateInstanceRequest":{
       "type":"structure",
-      "required":[
-        "InstanceArn",
-        "Name"
-      ],
+      "required":["InstanceArn"],
       "members":{
+        "Name":{
+          "shape":"NameType",
+          "documentation":"<p>Updates the instance name.</p>"
+        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
         },
-        "Name":{
-          "shape":"NameType",
-          "documentation":"<p>Updates the instance name.</p>"
+        "EncryptionConfiguration":{
+          "shape":"EncryptionConfiguration",
+          "documentation":"<p>Specifies the encryption configuration for your IAM Identity Center instance. You can use this to configure customer managed KMS keys (CMK) or Amazon Web Services owned KMS keys for encrypting your instance data.</p>"
         }
       }
     },
     "UpdateInstanceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePermissionSetRequest":{
       "type":"structure",
@@ -4702,10 +4855,6 @@
         "PermissionSetArn"
       ],
       "members":{
-        "Description":{
-          "shape":"PermissionSetDescription",
-          "documentation":"<p>The description of the <a>PermissionSet</a>.</p>"
-        },
         "InstanceArn":{
           "shape":"InstanceArn",
           "documentation":"<p>The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see <a href=\"/general/latest/gr/aws-arns-and-namespaces.html\">Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces</a> in the <i>Amazon Web Services General Reference</i>.</p>"
@@ -4714,33 +4863,36 @@
           "shape":"PermissionSetArn",
           "documentation":"<p>The ARN of the permission set.</p>"
         },
-        "RelayState":{
-          "shape":"RelayState",
-          "documentation":"<p>Used to redirect users within the application during the federation authentication process.</p>"
+        "Description":{
+          "shape":"PermissionSetDescription",
+          "documentation":"<p>The description of the <a>PermissionSet</a>.</p>"
         },
         "SessionDuration":{
           "shape":"Duration",
           "documentation":"<p>The length of time that the application user sessions are valid for in the ISO-8601 standard.</p>"
+        },
+        "RelayState":{
+          "shape":"RelayState",
+          "documentation":"<p>Used to redirect users within the application during the federation authentication process.</p>"
         }
       }
     },
     "UpdatePermissionSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateTrustedTokenIssuerRequest":{
       "type":"structure",
       "required":["TrustedTokenIssuerArn"],
       "members":{
-        "Name":{
-          "shape":"TrustedTokenIssuerName",
-          "documentation":"<p>Specifies the updated name to be applied to the trusted token issuer configuration.</p>"
-        },
         "TrustedTokenIssuerArn":{
           "shape":"TrustedTokenIssuerArn",
           "documentation":"<p>Specifies the ARN of the trusted token issuer configuration that you want to update.</p>"
         },
+        "Name":{
+          "shape":"TrustedTokenIssuerName",
+          "documentation":"<p>Specifies the updated name to be applied to the trusted token issuer configuration.</p>"
+        },
         "TrustedTokenIssuerConfiguration":{
           "shape":"TrustedTokenIssuerUpdateConfiguration",
           "documentation":"<p>Specifies a structure with settings to apply to the specified trusted token issuer. The settings that you can provide are determined by the type of the trusted token issuer that you are updating.</p>"
@@ -4749,18 +4901,36 @@
     },
     "UpdateTrustedTokenIssuerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "UserBackgroundSessionApplicationStatus":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
     },
     "ValidationException":{
       "type":"structure",
       "members":{
-        "Message":{"shape":"ValidationExceptionMessage"}
+        "Message":{"shape":"ValidationExceptionMessage"},
+        "Reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>The reason for the validation exception.</p>"
+        }
       },
       "documentation":"<p>The request failed because it contains a syntax error.</p>",
       "exception":true
     },
-    "ValidationExceptionMessage":{"type":"string"}
+    "ValidationExceptionMessage":{"type":"string"},
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "KMS_InvalidKeyUsageException",
+        "KMS_InvalidStateException",
+        "KMS_DisabledException"
+      ]
+    }
   },
-  "documentation":"<p>IAM Identity Center (successor to Single Sign-On) helps you securely create, or connect, your workforce identities and manage their access centrally across Amazon Web Services accounts and applications. IAM Identity Center is the recommended approach for workforce authentication and authorization in Amazon Web Services, for organizations of any size and type.</p> <note> <p>IAM Identity Center uses the <code>sso</code> and <code>identitystore</code> API namespaces.</p> </note> <p>This reference guide provides information on single sign-on operations which could be used for access management of Amazon Web Services accounts. For information about IAM Identity Center features, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\">IAM Identity Center User Guide</a>.</p> <p>Many operations in the IAM Identity Center APIs rely on identifiers for users and groups, known as principals. For more information about how to work with principals and principal IDs in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">Identity Store API Reference</a>.</p> <note> <p>Amazon Web Services provides SDKs that consist of libraries and sample code for various programming languages and platforms (Java, Ruby, .Net, iOS, Android, and more). The SDKs provide a convenient way to create programmatic access to IAM Identity Center and other Amazon Web Services services. For more information about the Amazon Web Services SDKs, including how to download and install them, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>.</p> </note>"
+  "documentation":"<p>IAM Identity Center is the Amazon Web Services solution for connecting your workforce users to Amazon Web Services managed applications and other Amazon Web Services resources. You can connect your existing identity provider and synchronize users and groups from your directory, or create and manage your users directly in IAM Identity Center. You can then use IAM Identity Center for either or both of the following:</p> <ul> <li> <p>User access to applications</p> </li> <li> <p>User access to Amazon Web Services accounts</p> </li> </ul> <p>This guide provides information about single sign-on operations that you can use for access to applications and Amazon Web Services accounts. For information about IAM Identity Center features, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\">IAM Identity Center User Guide</a>.</p> <note> <p>IAM Identity Center uses the <code>sso</code> and <code>identitystore</code> API namespaces.</p> </note> <p>Many API operations for IAM Identity Center rely on identifiers for users and groups, known as principals. For more information about how to work with principals and principal IDs in IAM Identity Center, see the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/welcome.html\">Identity Store API Reference</a>.</p> <note> <p>Amazon Web Services provides SDKs that consist of libraries and sample code for various programming languages and platforms (Java, Ruby, .Net, iOS, Android, and more). The SDKs provide a convenient way to create programmatic access to IAM Identity Center and other Amazon Web Services services. For more information about the Amazon Web Services SDKs, including how to download and install them, see <a href=\"http://aws.amazon.com/tools/\">Tools for Amazon Web Services</a>.</p> </note>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/waiters-2.json 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/sso-admin/2020-07-20/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso-admin/2020-07-20/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso-oidc/2019-06-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sso-oidc/2019-06-10/service-2.json 2.31.35-1/awscli/botocore/data/sso-oidc/2019-06-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/sso-oidc/2019-06-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sso-oidc/2019-06-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -62,7 +62,7 @@
         {"shape":"InternalServerException"},
         {"shape":"InvalidRequestRegionException"}
       ],
-      "documentation":"<p>Creates and returns access and refresh tokens for clients and applications that are authenticated using IAM entities. The access token can be used to fetch short-lived credentials for the assigned Amazon Web Services accounts or to access application APIs using <code>bearer</code> authentication.</p>"
+      "documentation":"<p>Creates and returns access and refresh tokens for authorized client applications that are authenticated using any IAM entity, such as a service role or user. These tokens might contain defined scopes that specify permissions such as <code>read:profile</code> or <code>write:data</code>. Through downscoping, you can use the scopes parameter to request tokens with reduced permissions compared to the original client application's permissions or, if applicable, the refresh token's scopes. The access token can be used to fetch short-lived credentials for the assigned Amazon Web Services accounts or to access application APIs using <code>bearer</code> authentication.</p> <note> <p>This API is used with Signature Version 4. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html\">Amazon Web Services Signature Version 4 for API Requests</a>.</p> </note>"
     },
     "RegisterClient":{
       "name":"RegisterClient",
@@ -78,7 +78,8 @@
         {"shape":"InvalidClientMetadataException"},
         {"shape":"InternalServerException"},
         {"shape":"InvalidRedirectUriException"},
-        {"shape":"UnsupportedGrantTypeException"}
+        {"shape":"UnsupportedGrantTypeException"},
+        {"shape":"SlowDownException"}
       ],
       "documentation":"<p>Registers a public client with IAM Identity Center. This allows clients to perform authorization using the authorization code grant with Proof Key for Code Exchange (PKCE) or the device code grant.</p>",
       "authtype":"none",
@@ -112,6 +113,10 @@
           "shape":"Error",
           "documentation":"<p>Single error code. For this exception the value will be <code>access_denied</code>.</p>"
         },
+        "reason":{
+          "shape":"AccessDeniedExceptionReason",
+          "documentation":"<p>A string that uniquely identifies a reason for the error.</p>"
+        },
         "error_description":{
           "shape":"ErrorDescription",
           "documentation":"<p>Human-readable text providing additional information, used to assist the client developer in understanding the error that occurred.</p>"
@@ -121,6 +126,10 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "AccessDeniedExceptionReason":{
+      "type":"string",
+      "enum":["KMS_AccessDeniedException"]
+    },
     "AccessToken":{
       "type":"string",
       "sensitive":true
@@ -147,6 +156,16 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "AwsAdditionalDetails":{
+      "type":"structure",
+      "members":{
+        "identityContext":{
+          "shape":"IdentityContext",
+          "documentation":"<p>The trusted context assertion is signed and encrypted by STS. It provides access to <code>sts:identity_context</code> claim in the <code>idToken</code> without JWT parsing</p> <p>Identity context comprises information that Amazon Web Services services use to make authorization decisions when they receive requests.</p>"
+        }
+      },
+      "documentation":"<p>This structure contains Amazon Web Services-specific parameter extensions and the <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html\">identity context</a>.</p>"
+    },
     "ClientId":{"type":"string"},
     "ClientName":{"type":"string"},
     "ClientSecret":{
@@ -192,7 +211,7 @@
         },
         "scope":{
           "shape":"Scopes",
-          "documentation":"<p>The list of scopes for which authorization is requested. The access token that is issued is limited to the scopes that are granted. If this value is not specified, IAM Identity Center authorizes all scopes that are configured for the client during the call to <a>RegisterClient</a>.</p>"
+          "documentation":"<p>The list of scopes for which authorization is requested. This parameter has no effect; the access token will always include all scopes configured during client registration.</p>"
         },
         "redirectUri":{
           "shape":"URI",
@@ -312,6 +331,10 @@
         "scope":{
           "shape":"Scopes",
           "documentation":"<p>The list of scopes for which authorization is granted. The access token that is issued is limited to the scopes that are granted.</p>"
+        },
+        "awsAdditionalDetails":{
+          "shape":"AwsAdditionalDetails",
+          "documentation":"<p>A structure containing information from IAM Identity Center managed user and group information.</p>"
         }
       }
     },
@@ -344,6 +367,7 @@
       "type":"string",
       "sensitive":true
     },
+    "IdentityContext":{"type":"string"},
     "InternalServerException":{
       "type":"structure",
       "members":{
@@ -433,6 +457,10 @@
           "shape":"Error",
           "documentation":"<p>Single error code. For this exception the value will be <code>invalid_request</code>.</p>"
         },
+        "reason":{
+          "shape":"InvalidRequestExceptionReason",
+          "documentation":"<p>A string that uniquely identifies a reason for the error.</p>"
+        },
         "error_description":{
           "shape":"ErrorDescription",
           "documentation":"<p>Human-readable text providing additional information, used to assist the client developer in understanding the error that occurred.</p>"
@@ -442,6 +470,15 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "InvalidRequestExceptionReason":{
+      "type":"string",
+      "enum":[
+        "KMS_NotFoundException",
+        "KMS_InvalidKeyUsageException",
+        "KMS_InvalidStateException",
+        "KMS_DisabledException"
+      ]
+    },
     "InvalidRequestRegionException":{
       "type":"structure",
       "members":{
@@ -672,5 +709,5 @@
     },
     "UserCode":{"type":"string"}
   },
-  "documentation":"<p>IAM Identity Center OpenID Connect (OIDC) is a web service that enables a client (such as CLI or a native application) to register with IAM Identity Center. The service also enables the client to fetch the user’s access token upon successful authentication and authorization with IAM Identity Center.</p> <p> <b>API namespaces</b> </p> <p>IAM Identity Center uses the <code>sso</code> and <code>identitystore</code> API namespaces. IAM Identity Center OpenID Connect uses the <code>sso-oidc</code> namespace.</p> <p> <b>Considerations for using this guide</b> </p> <p>Before you begin using this guide, we recommend that you first review the following important information about how the IAM Identity Center OIDC service works.</p> <ul> <li> <p>The IAM Identity Center OIDC service currently implements only the portions of the OAuth 2.0 Device Authorization Grant standard (<a href=\"https://tools.ietf.org/html/rfc8628\">https://tools.ietf.org/html/rfc8628</a>) that are necessary to enable single sign-on authentication with the CLI. </p> </li> <li> <p>With older versions of the CLI, the service only emits OIDC access tokens, so to obtain a new token, users must explicitly re-authenticate. To access the OIDC flow that supports token refresh and doesn’t require re-authentication, update to the latest CLI version (1.27.10 for CLI V1 and 2.9.0 for CLI V2) with support for OIDC token refresh and configurable IAM Identity Center session durations. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html\">Configure Amazon Web Services access portal session duration </a>. </p> </li> <li> <p>The access tokens provided by this service grant access to all Amazon Web Services account entitlements assigned to an IAM Identity Center user, not just a particular application.</p> </li> <li> <p>The documentation in this guide does not describe the mechanism to convert the access token into Amazon Web Services Auth (“sigv4”) credentials for use with IAM-protected Amazon Web Services service endpoints. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html\">GetRoleCredentials</a> in the <i>IAM Identity Center Portal API Reference Guide</i>.</p> </li> </ul> <p>For general information about IAM Identity Center, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\">What is IAM Identity Center?</a> in the <i>IAM Identity Center User Guide</i>.</p>"
+  "documentation":"<p>IAM Identity Center OpenID Connect (OIDC) is a web service that enables a client (such as CLI or a native application) to register with IAM Identity Center. The service also enables the client to fetch the user’s access token upon successful authentication and authorization with IAM Identity Center.</p> <p> <b>API namespaces</b> </p> <p>IAM Identity Center uses the <code>sso</code> and <code>identitystore</code> API namespaces. IAM Identity Center OpenID Connect uses the <code>sso-oauth</code> namespace.</p> <p> <b>Considerations for using this guide</b> </p> <p>Before you begin using this guide, we recommend that you first review the following important information about how the IAM Identity Center OIDC service works.</p> <ul> <li> <p>The IAM Identity Center OIDC service currently implements only the portions of the OAuth 2.0 Device Authorization Grant standard (<a href=\"https://tools.ietf.org/html/rfc8628\">https://tools.ietf.org/html/rfc8628</a>) that are necessary to enable single sign-on authentication with the CLI. </p> </li> <li> <p>With older versions of the CLI, the service only emits OIDC access tokens, so to obtain a new token, users must explicitly re-authenticate. To access the OIDC flow that supports token refresh and doesn’t require re-authentication, update to the latest CLI version (1.27.10 for CLI V1 and 2.9.0 for CLI V2) with support for OIDC token refresh and configurable IAM Identity Center session durations. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-user-session.html\">Configure Amazon Web Services access portal session duration </a>. </p> </li> <li> <p>The access tokens provided by this service grant access to all Amazon Web Services account entitlements assigned to an IAM Identity Center user, not just a particular application.</p> </li> <li> <p>The documentation in this guide does not describe the mechanism to convert the access token into Amazon Web Services Auth (“sigv4”) credentials for use with IAM-protected Amazon Web Services service endpoints. For more information, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/PortalAPIReference/API_GetRoleCredentials.html\">GetRoleCredentials</a> in the <i>IAM Identity Center Portal API Reference Guide</i>.</p> </li> </ul> <p>For general information about IAM Identity Center, see <a href=\"https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html\">What is IAM Identity Center?</a> in the <i>IAM Identity Center User Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/stepfunctions/2016-11-23/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/stepfunctions/2016-11-23/service-2.json 2.31.35-1/awscli/botocore/data/stepfunctions/2016-11-23/service-2.json
--- 2.23.6-1/awscli/botocore/data/stepfunctions/2016-11-23/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/stepfunctions/2016-11-23/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -557,7 +557,7 @@
         {"shape":"InvalidExecutionInput"},
         {"shape":"ValidationException"}
       ],
-      "documentation":"<p>Accepts the definition of a single state and executes it. You can test a state without creating a state machine or updating an existing state machine. Using this API, you can test the following:</p> <ul> <li> <p>A state's <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html#test-state-input-output-dataflow\">input and output processing</a> data flow</p> </li> <li> <p>An <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-services.html\">Amazon Web Services service integration</a> request and response</p> </li> <li> <p>An <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/connect-third-party-apis.html\">HTTP Task</a> request and response</p> </li> </ul> <p>You can call this API on only one state at a time. The states that you can test include the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-task-state.html#task-types\">All Task types</a> except <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-activities.html\">Activity</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-pass-state.html\">Pass</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html\">Wait</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-choice-state.html\">Choice</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-succeed-state.html\">Succeed</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-fail-state.html\">Fail</a> </p> </li> </ul> <p>The <code>TestState</code> API assumes an IAM role which must contain the required IAM permissions for the resources your state is accessing. For information about the permissions a state might need, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html#test-state-permissions\">IAM permissions to test a state</a>.</p> <p>The <code>TestState</code> API can run for up to five minutes. If the execution of a state exceeds this duration, it fails with the <code>States.Timeout</code> error.</p> <p> <code>TestState</code> doesn't support <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-activities.html\">Activity tasks</a>, <code>.sync</code> or <code>.waitForTaskToken</code> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html\">service integration patterns</a>, <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-parallel-state.html\">Parallel</a>, or <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-map-state.html\">Map</a> states.</p>",
+      "documentation":"<p>Accepts the definition of a single state and executes it. You can test a state without creating a state machine or updating an existing state machine. Using this API, you can test the following:</p> <ul> <li> <p>A state's <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html#test-state-input-output-dataflow\">input and output processing</a> data flow</p> </li> <li> <p>An <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-services.html\">Amazon Web Services service integration</a> request and response</p> </li> <li> <p>An <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/call-https-apis.html\">HTTP Task</a> request and response</p> </li> </ul> <p>You can call this API on only one state at a time. The states that you can test include the following:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-task-state.html#task-types\">All Task types</a> except <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-activities.html\">Activity</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-pass-state.html\">Pass</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html\">Wait</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-choice-state.html\">Choice</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-succeed-state.html\">Succeed</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-fail-state.html\">Fail</a> </p> </li> </ul> <p>The <code>TestState</code> API assumes an IAM role which must contain the required IAM permissions for the resources your state is accessing. For information about the permissions a state might need, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/test-state-isolation.html#test-state-permissions\">IAM permissions to test a state</a>.</p> <p>The <code>TestState</code> API can run for up to five minutes. If the execution of a state exceeds this duration, it fails with the <code>States.Timeout</code> error.</p> <p> <code>TestState</code> doesn't support <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/concepts-activities.html\">Activity tasks</a>, <code>.sync</code> or <code>.waitForTaskToken</code> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html\">service integration patterns</a>, <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-parallel-state.html\">Parallel</a>, or <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-map-state.html\">Map</a> states.</p>",
       "endpoint":{"hostPrefix":"sync-"}
     },
     "UntagResource":{
@@ -703,7 +703,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the activity.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the activity.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "creationDate":{
           "shape":"Timestamp",
@@ -900,7 +900,7 @@
       "members":{
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the activity to create. This name must be unique for your Amazon Web Services account and region for 90 days. For more information, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/limits.html#service-limits-state-machine-executions\"> Limits Related to State Machine Executions</a> in the <i>Step Functions Developer Guide</i>.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the activity to create. This name must be unique for your Amazon Web Services account and region for 90 days. For more information, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/limits.html#service-limits-state-machine-executions\"> Limits Related to State Machine Executions</a> in the <i>Step Functions Developer Guide</i>.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "tags":{
           "shape":"TagList",
@@ -977,7 +977,7 @@
       "members":{
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the state machine. </p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the state machine. </p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "definition":{
           "shape":"Definition",
@@ -1056,8 +1056,7 @@
     },
     "DeleteActivityOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStateMachineAliasInput":{
       "type":"structure",
@@ -1071,8 +1070,7 @@
     },
     "DeleteStateMachineAliasOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStateMachineInput":{
       "type":"structure",
@@ -1086,8 +1084,7 @@
     },
     "DeleteStateMachineOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteStateMachineVersionInput":{
       "type":"structure",
@@ -1101,8 +1098,7 @@
     },
     "DeleteStateMachineVersionOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeActivityInput":{
       "type":"structure",
@@ -1128,7 +1124,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the activity.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the activity.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "creationDate":{
           "shape":"Timestamp",
@@ -1173,7 +1169,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the execution.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the execution.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "status":{
           "shape":"ExecutionStatus",
@@ -1199,7 +1195,7 @@
         "outputDetails":{"shape":"CloudWatchEventsExecutionDataDetails"},
         "traceHeader":{
           "shape":"TraceHeader",
-          "documentation":"<p>The X-Ray trace header that was passed to the execution.</p>"
+          "documentation":"<p>The X-Ray trace header that was passed to the execution.</p> <note> <p> For X-Ray traces, all Amazon Web Services services use the <code>X-Amzn-Trace-Id</code> header from the HTTP request. Using the header is the preferred mechanism to identify a trace. <code>StartExecution</code> and <code>StartSyncExecution</code> API operations can also use <code>traceHeader</code> from the body of the request payload. If <b>both</b> sources are provided, Step Functions will use the <b>header value</b> (preferred) over the value in the request body. </p> </note>"
         },
         "mapRunArn":{
           "shape":"LongArn",
@@ -1407,7 +1403,7 @@
         },
         "label":{
           "shape":"MapRunLabel",
-          "documentation":"<p>A user-defined or an auto-generated string that identifies a <code>Map</code> state. This ﬁeld is returned only if the <code>executionArn</code> is a child workflow execution that was started by a Distributed Map state.</p>"
+          "documentation":"<p>A user-defined or an auto-generated string that identifies a <code>Map</code> state. This field is returned only if the <code>executionArn</code> is a child workflow execution that was started by a Distributed Map state.</p>"
         },
         "revisionId":{
           "shape":"RevisionId",
@@ -1454,7 +1450,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the state machine.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the state machine.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "status":{
           "shape":"StateMachineStatus",
@@ -1638,7 +1634,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the execution.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the execution.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "status":{
           "shape":"ExecutionStatus",
@@ -2439,7 +2435,7 @@
         },
         "statusFilter":{
           "shape":"ExecutionStatus",
-          "documentation":"<p>If specified, only list the executions whose current execution status matches the given filter.</p>"
+          "documentation":"<p>If specified, only list the executions whose current execution status matches the given filter.</p> <p>If you provide a <code>PENDING_REDRIVE</code> statusFilter, you must specify <code>mapRunArn</code>. For more information, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/redrive-map-run.html#redrive-child-workflow-behavior\">Child workflow execution redrive behaviour</a> in the <i>Step Functions Developer Guide</i>. </p> <p>If you provide a stateMachineArn and a <code>PENDING_REDRIVE</code> statusFilter, the API returns a validation exception.</p>"
         },
         "maxResults":{
           "shape":"PageSize",
@@ -3032,8 +3028,7 @@
     },
     "SendTaskFailureOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SendTaskHeartbeatInput":{
       "type":"structure",
@@ -3047,8 +3042,7 @@
     },
     "SendTaskHeartbeatOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SendTaskSuccessInput":{
       "type":"structure",
@@ -3069,8 +3063,7 @@
     },
     "SendTaskSuccessOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "SensitiveCause":{
       "type":"string",
@@ -3112,15 +3105,15 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>Optional name of the execution. This name must be unique for your Amazon Web Services account, Region, and state machine for 90 days. For more information, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/limits.html#service-limits-state-machine-executions\"> Limits Related to State Machine Executions</a> in the <i>Step Functions Developer Guide</i>.</p> <p>If you don't provide a name for the execution, Step Functions automatically generates a universally unique identifier (UUID) as the execution name.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>Optional name of the execution. This name must be unique for your Amazon Web Services account, Region, and state machine for 90 days. For more information, see <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/limits.html#service-limits-state-machine-executions\"> Limits Related to State Machine Executions</a> in the <i>Step Functions Developer Guide</i>.</p> <p>If you don't provide a name for the execution, Step Functions automatically generates a universally unique identifier (UUID) as the execution name.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "input":{
           "shape":"SensitiveData",
-          "documentation":"<p>The string that contains the JSON input data for the execution, for example:</p> <p> <code>\"input\": \"{\\\"first_name\\\" : \\\"test\\\"}\"</code> </p> <note> <p>If you don't include any JSON input data, you still must include the two braces, for example: <code>\"input\": \"{}\"</code> </p> </note> <p>Length constraints apply to the payload size, and are expressed as bytes in UTF-8 encoding.</p>"
+          "documentation":"<p>The string that contains the JSON input data for the execution, for example:</p> <p> <code>\"{\\\"first_name\\\" : \\\"Alejandro\\\"}\"</code> </p> <note> <p>If you don't include any JSON input data, you still must include the two braces, for example: <code>\"{}\"</code> </p> </note> <p>Length constraints apply to the payload size, and are expressed as bytes in UTF-8 encoding.</p>"
         },
         "traceHeader":{
           "shape":"TraceHeader",
-          "documentation":"<p>Passes the X-Ray trace header. The trace header can also be passed in the request payload.</p>"
+          "documentation":"<p>Passes the X-Ray trace header. The trace header can also be passed in the request payload.</p> <note> <p> For X-Ray traces, all Amazon Web Services services use the <code>X-Amzn-Trace-Id</code> header from the HTTP request. Using the header is the preferred mechanism to identify a trace. <code>StartExecution</code> and <code>StartSyncExecution</code> API operations can also use <code>traceHeader</code> from the body of the request payload. If <b>both</b> sources are provided, Step Functions will use the <b>header value</b> (preferred) over the value in the request body. </p> </note>"
         }
       }
     },
@@ -3155,11 +3148,11 @@
         },
         "input":{
           "shape":"SensitiveData",
-          "documentation":"<p>The string that contains the JSON input data for the execution, for example:</p> <p> <code>\"input\": \"{\\\"first_name\\\" : \\\"test\\\"}\"</code> </p> <note> <p>If you don't include any JSON input data, you still must include the two braces, for example: <code>\"input\": \"{}\"</code> </p> </note> <p>Length constraints apply to the payload size, and are expressed as bytes in UTF-8 encoding.</p>"
+          "documentation":"<p>The string that contains the JSON input data for the execution, for example:</p> <p> <code>\"{\\\"first_name\\\" : \\\"Alejandro\\\"}\"</code> </p> <note> <p>If you don't include any JSON input data, you still must include the two braces, for example: <code>\"{}\"</code> </p> </note> <p>Length constraints apply to the payload size, and are expressed as bytes in UTF-8 encoding.</p>"
         },
         "traceHeader":{
           "shape":"TraceHeader",
-          "documentation":"<p>Passes the X-Ray trace header. The trace header can also be passed in the request payload.</p>"
+          "documentation":"<p>Passes the X-Ray trace header. The trace header can also be passed in the request payload.</p> <note> <p> For X-Ray traces, all Amazon Web Services services use the <code>X-Amzn-Trace-Id</code> header from the HTTP request. Using the header is the preferred mechanism to identify a trace. <code>StartExecution</code> and <code>StartSyncExecution</code> API operations can also use <code>traceHeader</code> from the body of the request payload. If <b>both</b> sources are provided, Step Functions will use the <b>header value</b> (preferred) over the value in the request body. </p> </note>"
         },
         "includedData":{
           "shape":"IncludedData",
@@ -3220,7 +3213,7 @@
         "outputDetails":{"shape":"CloudWatchEventsExecutionDataDetails"},
         "traceHeader":{
           "shape":"TraceHeader",
-          "documentation":"<p>The X-Ray trace header that was passed to the execution.</p>"
+          "documentation":"<p>The X-Ray trace header that was passed to the execution.</p> <note> <p> For X-Ray traces, all Amazon Web Services services use the <code>X-Amzn-Trace-Id</code> header from the HTTP request. Using the header is the preferred mechanism to identify a trace. <code>StartExecution</code> and <code>StartSyncExecution</code> API operations can also use <code>traceHeader</code> from the body of the request payload. If <b>both</b> sources are provided, Step Functions will use the <b>header value</b> (preferred) over the value in the request body. </p> </note>"
         },
         "billingDetails":{
           "shape":"BillingDetails",
@@ -3253,7 +3246,7 @@
       "members":{
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the state.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the state.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "output":{
           "shape":"SensitiveData",
@@ -3347,7 +3340,7 @@
         },
         "name":{
           "shape":"Name",
-          "documentation":"<p>The name of the state machine.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
+          "documentation":"<p>The name of the state machine.</p> <p>A name must <i>not</i> contain:</p> <ul> <li> <p>white space</p> </li> <li> <p>brackets <code>&lt; &gt; { } [ ]</code> </p> </li> <li> <p>wildcard characters <code>? *</code> </p> </li> <li> <p>special characters <code>\" # % \\ ^ | ~ ` $ &amp; , ; : /</code> </p> </li> <li> <p>control characters (<code>U+0000-001F</code>, <code>U+007F-009F</code>, <code>U+FFFE-FFFF</code>)</p> </li> <li> <p>surrogates (<code>U+D800-DFFF</code>)</p> </li> <li> <p>invalid characters (<code> U+10FFFF</code>)</p> </li> </ul> <p>To enable logging with CloudWatch Logs, the name should only contain 0-9, A-Z, a-z, - and _.</p>"
         },
         "type":{
           "shape":"StateMachineType",
@@ -3491,8 +3484,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3806,7 +3798,7 @@
         },
         "nextState":{
           "shape":"StateName",
-          "documentation":"<p>The name of the next state to transition to. If you haven't defined a next state in your definition or if the execution of the state fails, this ﬁeld doesn't contain a value.</p>"
+          "documentation":"<p>The name of the next state to transition to. If you haven't defined a next state in your definition or if the execution of the state fails, this field doesn't contain a value.</p>"
         },
         "status":{
           "shape":"TestExecutionStatus",
@@ -3878,8 +3870,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMapRunInput":{
       "type":"structure",
@@ -3908,8 +3899,7 @@
     },
     "UpdateMapRunOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateStateMachineAliasInput":{
       "type":"structure",
@@ -4156,5 +4146,5 @@
     "includedDetails":{"type":"boolean"},
     "truncated":{"type":"boolean"}
   },
-  "documentation":"<fullname>Step Functions</fullname> <p>Step Functions coordinates the components of distributed applications and microservices using visual workflows.</p> <p>You can use Step Functions to build applications from individual components, each of which performs a discrete function, or <i>task</i>, allowing you to scale and change applications quickly. Step Functions provides a console that helps visualize the components of your application as a series of steps. Step Functions automatically triggers and tracks each step, and retries steps when there are errors, so your application executes predictably and in the right order every time. Step Functions logs the state of each step, so you can quickly diagnose and debug any issues.</p> <p>Step Functions manages operations and underlying infrastructure to ensure your application is available at any scale. You can run tasks on Amazon Web Services, your own servers, or any system that has access to Amazon Web Services. You can access and use Step Functions using the console, the Amazon Web Services SDKs, or an HTTP API. For more information about Step Functions, see the <i> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html\">Step Functions Developer Guide</a> </i>.</p> <important> <p>If you use the Step Functions API actions using Amazon Web Services SDK integrations, make sure the API actions are in camel case and parameter names are in Pascal case. For example, you could use Step Functions API action <code>startSyncExecution</code> and specify its parameter as <code>StateMachineArn</code>.</p> </important>"
+  "documentation":"<fullname>Step Functions</fullname> <p>With Step Functions, you can create workflows, also called <i>state machines</i>, to build distributed applications, automate processes, orchestrate microservices, and create data and machine learning pipelines.</p> <p>Through the Step Functions API, you can create, list, update, and delete state machines, activities, and other data types. You can start, stop, and redrive your state machines. Your activity workers can send task success, heartbeat, and failure responses.</p> <p>With API calls, you can also manage other aspects of your workflow, such as tags, versions, and aliases.</p> <p>For more information about developing solutions with Step Functions, see the <i> <a href=\"https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html\">Step Functions Developer Guide</a> </i>.</p> <important> <p>If you use the Step Functions API actions using Amazon Web Services SDK integrations, make sure the API actions are in camel case and parameter names are in Pascal case. For example, you might use Step Functions API action <code>startSyncExecution</code> and specify its parameter as <code>StateMachineArn</code>.</p> </important>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/paginators-1.json 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -74,6 +74,11 @@
       ],
       "output_token": "NextMarker",
       "result_key": "FileSystemAssociationSummaryList"
+    },
+    "ListCacheReports": {
+      "input_token": "Marker",
+      "output_token": "Marker",
+      "result_key": "CacheReportList"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/service-2.json 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/storagegateway/2013-06-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/storagegateway/2013-06-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -140,6 +140,20 @@
       ],
       "documentation":"<p>Cancels archiving of a virtual tape to the virtual tape shelf (VTS) after the archiving process is initiated. This operation is only supported in the tape gateway type.</p>"
     },
+    "CancelCacheReport":{
+      "name":"CancelCacheReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CancelCacheReportInput"},
+      "output":{"shape":"CancelCacheReportOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Cancels generation of a specified cache report. You can use this operation to manually cancel an IN-PROGRESS report for any reason. This action changes the report status from IN-PROGRESS to CANCELLED. You can only cancel in-progress reports. If the the report you attempt to cancel is in FAILED, ERROR, or COMPLETED state, the cancel operation returns an error.</p>"
+    },
     "CancelRetrieval":{
       "name":"CancelRetrieval",
       "http":{
@@ -310,6 +324,20 @@
       ],
       "documentation":"<p>Deletes the bandwidth rate limits of a gateway. You can delete either the upload and download bandwidth rate limit, or you can delete both. If you delete only one of the limits, the other limit remains unchanged. To specify which gateway to work with, use the Amazon Resource Name (ARN) of the gateway in your request. This operation is supported only for the stored volume, cached volume, and tape gateway types.</p>"
     },
+    "DeleteCacheReport":{
+      "name":"DeleteCacheReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteCacheReportInput"},
+      "output":{"shape":"DeleteCacheReportOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Deletes the specified cache report and any associated tags from the Storage Gateway database. You can only delete completed reports. If the status of the report you attempt to delete still IN-PROGRESS, the delete operation returns an error. You can use <code>CancelCacheReport</code> to cancel an IN-PROGRESS report.</p> <note> <p> <code>DeleteCacheReport</code> does not delete the report object from your Amazon S3 bucket.</p> </note>"
+    },
     "DeleteChapCredentials":{
       "name":"DeleteChapCredentials",
       "http":{
@@ -478,6 +506,20 @@
       ],
       "documentation":"<p>Returns information about the cache of a gateway. This operation is only supported in the cached volume, tape, and file gateway types.</p> <p>The response includes disk IDs that are configured as cache, and it includes the amount of cache allocated and used.</p>"
     },
+    "DescribeCacheReport":{
+      "name":"DescribeCacheReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCacheReportInput"},
+      "output":{"shape":"DescribeCacheReportOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Returns information about the specified cache report, including completion status and generation progress.</p>"
+    },
     "DescribeCachediSCSIVolumes":{
       "name":"DescribeCachediSCSIVolumes",
       "http":{
@@ -744,6 +786,20 @@
       ],
       "documentation":"<p>Disassociates an Amazon FSx file system from the specified gateway. After the disassociation process finishes, the gateway can no longer access the Amazon FSx file system. This operation is only supported in the FSx File Gateway type.</p>"
     },
+    "EvictFilesFailingUpload":{
+      "name":"EvictFilesFailingUpload",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"EvictFilesFailingUploadInput"},
+      "output":{"shape":"EvictFilesFailingUploadOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Starts a process that cleans the specified file share's cache of file entries that are failing upload to Amazon S3. This API operation reports success if the request is received with valid arguments, and there are no other cache clean operations currently in-progress for the specified file share. After a successful request, the cache clean operation occurs asynchronously and reports progress using CloudWatch logs and notifications.</p> <important> <p>If <code>ForceRemove</code> is set to <code>True</code>, the cache clean operation will delete file data from the gateway which might otherwise be recoverable. We recommend using this operation only after all other methods to clear files failing upload have been exhausted, and if your business need outweighs the potential data loss.</p> </important>"
+    },
     "JoinDomain":{
       "name":"JoinDomain",
       "http":{
@@ -772,6 +828,20 @@
       ],
       "documentation":"<p>Lists the automatic tape creation policies for a gateway. If there are no automatic tape creation policies for the gateway, it returns an empty list.</p> <p>This operation is only supported for tape gateways.</p>"
     },
+    "ListCacheReports":{
+      "name":"ListCacheReports",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListCacheReportsInput"},
+      "output":{"shape":"ListCacheReportsOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Returns a list of existing cache reports for all file shares associated with your Amazon Web Services account. This list includes all information provided by the <code>DescribeCacheReport</code> action, such as report name, status, completion progress, start time, end time, filters, and tags.</p>"
+    },
     "ListFileShares":{
       "name":"ListFileShares",
       "http":{
@@ -924,7 +994,7 @@
         {"shape":"InvalidGatewayRequestException"},
         {"shape":"InternalServerError"}
       ],
-      "documentation":"<p>Sends you notification through CloudWatch Events when all files written to your file share have been uploaded to Amazon S3.</p> <p>Storage Gateway can send a notification through Amazon CloudWatch Events when all files written to your file share up to that point in time have been uploaded to Amazon S3. These files include files written to the file share up to the time that you make a request for notification. When the upload is done, Storage Gateway sends you notification through an Amazon CloudWatch Event. You can configure CloudWatch Events to send the notification through event targets such as Amazon SNS or Lambda function. This operation is only supported for S3 File Gateways.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/filegateway/latest/files3/monitoring-file-gateway.html#get-notification\">Getting file upload notification</a> in the <i>Amazon S3 File Gateway User Guide</i>.</p>"
+      "documentation":"<p>Sends you notification through Amazon EventBridge when all files written to your file share have been uploaded to Amazon S3.</p> <p>Storage Gateway can send a notification through Amazon EventBridge when all files written to your file share up to that point in time have been uploaded to Amazon S3. These files include files written to the file share up to the time that you make a request for notification. When the upload is done, Storage Gateway sends you notification through EventBridge. You can configure EventBridge to send the notification through event targets such as Amazon SNS or Lambda function. This operation is only supported for S3 File Gateways.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/filegateway/latest/files3/monitoring-file-gateway.html#get-notification\">Getting file upload notification</a> in the <i>Amazon S3 File Gateway User Guide</i>.</p>"
     },
     "RefreshCache":{
       "name":"RefreshCache",
@@ -1052,6 +1122,20 @@
       ],
       "documentation":"<p>Start a test that verifies that the specified gateway is configured for High Availability monitoring in your host environment. This request only initiates the test and that a successful response only indicates that the test was started. It doesn't indicate that the test passed. For the status of the test, invoke the <code>DescribeAvailabilityMonitorTest</code> API.</p> <note> <p>Starting this test will cause your gateway to go offline for a brief period.</p> </note>"
     },
+    "StartCacheReport":{
+      "name":"StartCacheReport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartCacheReportInput"},
+      "output":{"shape":"StartCacheReportOutput"},
+      "errors":[
+        {"shape":"InvalidGatewayRequestException"},
+        {"shape":"InternalServerError"}
+      ],
+      "documentation":"<p>Starts generating a report of the file metadata currently cached by an S3 File Gateway for a specific file share. You can use this report to identify and resolve issues if you have files failing upload from your gateway to Amazon S3. The report is a CSV file containing a list of files which match the set of filter parameters you specify in the request.</p> <note> <p>The <b>Files Failing Upload</b> flag is reset every 24 hours and during gateway reboot. If this report captures the files after the reset, but before they become flagged again, they will not be reported as <b>Files Failing Upload</b>.</p> </note> <p>The following requirements must be met to successfully generate a cache report:</p> <ul> <li> <p>You must have <code>s3:PutObject</code> and <code>s3:AbortMultipartUpload</code> permissions for the Amazon S3 bucket where you want to store the cache report.</p> </li> <li> <p>No other cache reports can currently be in-progress for the specified file share.</p> </li> <li> <p>There must be fewer than 10 existing cache reports for the specified file share.</p> </li> <li> <p>The gateway must be online and connected to Amazon Web Services.</p> </li> <li> <p>The root disk must have at least 20GB of free space when report generation starts.</p> </li> <li> <p>You must specify at least one value for <code>InclusionFilters</code> or <code>ExclusionFilters</code> in the request.</p> </li> </ul>"
+    },
     "StartGateway":{
       "name":"StartGateway",
       "http":{
@@ -1343,7 +1427,8 @@
         "JOINING",
         "NETWORK_ERROR",
         "TIMEOUT",
-        "UNKNOWN_ERROR"
+        "UNKNOWN_ERROR",
+        "INSUFFICIENT_PERMISSIONS"
       ]
     },
     "AddCacheInput":{
@@ -1539,7 +1624,7 @@
         },
         "NetworkInterfaceId":{
           "shape":"NetworkInterfaceId",
-          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Only IPv4 addresses are accepted. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
+          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Accepts IPv4 and IPv6 addresses. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
         },
         "DiskId":{
           "shape":"DiskId",
@@ -1711,6 +1796,116 @@
       },
       "documentation":"<p>The refresh cache information for the file share or FSx file systems.</p>"
     },
+    "CacheReportARN":{
+      "type":"string",
+      "max":500,
+      "min":50
+    },
+    "CacheReportFilter":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Values"
+      ],
+      "members":{
+        "Name":{
+          "shape":"CacheReportFilterName",
+          "documentation":"<p>The parameter name for a filter that determines which files are included or excluded from a cache report.</p> <p> <b>Valid Names:</b> </p> <p>UploadFailureReason | UploadState</p>"
+        },
+        "Values":{
+          "shape":"CacheReportFilterValues",
+          "documentation":"<p>The parameter value for a filter that determines which files are included or excluded from a cache report.</p> <p> <b>Valid <code>UploadFailureReason</code> Values:</b> </p> <p> <code>InaccessibleStorageClass</code> | <code>InvalidObjectState</code> | <code>ObjectMissing</code> | <code>S3AccessDenied</code> </p> <p> <b>Valid <code>UploadState</code> Values:</b> </p> <p> <code>FailingUpload</code> </p>"
+        }
+      },
+      "documentation":"<p>A list of filter parameters and associated values that determine which files are included or excluded from a cache report created by a <code>StartCacheReport</code> request. Multiple instances of the same filter parameter are combined with an OR operation, while different parameters are combined with an AND operation.</p>"
+    },
+    "CacheReportFilterList":{
+      "type":"list",
+      "member":{"shape":"CacheReportFilter"}
+    },
+    "CacheReportFilterName":{
+      "type":"string",
+      "enum":[
+        "UploadState",
+        "UploadFailureReason"
+      ]
+    },
+    "CacheReportFilterValue":{
+      "type":"string",
+      "max":25,
+      "min":1
+    },
+    "CacheReportFilterValues":{
+      "type":"list",
+      "member":{"shape":"CacheReportFilterValue"}
+    },
+    "CacheReportInfo":{
+      "type":"structure",
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to describe.</p>"
+        },
+        "CacheReportStatus":{
+          "shape":"CacheReportStatus",
+          "documentation":"<p>The status of the specified cache report.</p>"
+        },
+        "ReportCompletionPercent":{
+          "shape":"ReportCompletionPercent",
+          "documentation":"<p>The percentage of the report generation process that has been completed at time of inquiry.</p>"
+        },
+        "EndTime":{
+          "shape":"Time",
+          "documentation":"<p>The time at which the gateway stopped generating the cache report.</p>"
+        },
+        "Role":{"shape":"Role"},
+        "FileShareARN":{"shape":"FileShareARN"},
+        "LocationARN":{
+          "shape":"LocationARN",
+          "documentation":"<p>The ARN of the Amazon S3 bucket location where the cache report is saved.</p>"
+        },
+        "StartTime":{
+          "shape":"Time",
+          "documentation":"<p>The time at which the gateway started generating the cache report.</p>"
+        },
+        "InclusionFilters":{
+          "shape":"CacheReportFilterList",
+          "documentation":"<p>The list of filters and parameters that determine which files are included in the report.</p>"
+        },
+        "ExclusionFilters":{
+          "shape":"CacheReportFilterList",
+          "documentation":"<p>The list of filters and parameters that determine which files are excluded from the report.</p>"
+        },
+        "ReportName":{
+          "shape":"CacheReportName",
+          "documentation":"<p>The file name of the completed cache report object stored in Amazon S3.</p>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>The list of key/value tags associated with the report.</p>"
+        }
+      },
+      "documentation":"<p>Contains all informational fields associated with a cache report. Includes name, ARN, tags, status, progress, filters, start time, and end time.</p>"
+    },
+    "CacheReportList":{
+      "type":"list",
+      "member":{"shape":"CacheReportInfo"}
+    },
+    "CacheReportName":{
+      "type":"string",
+      "max":100,
+      "min":1
+    },
+    "CacheReportStatus":{
+      "type":"string",
+      "enum":[
+        "IN_PROGRESS",
+        "COMPLETED",
+        "CANCELED",
+        "FAILED",
+        "ERROR"
+      ]
+    },
     "CacheStaleTimeoutInSeconds":{"type":"integer"},
     "CachediSCSIVolume":{
       "type":"structure",
@@ -1796,6 +1991,25 @@
       },
       "documentation":"<p>CancelArchivalOutput</p>"
     },
+    "CancelCacheReportInput":{
+      "type":"structure",
+      "required":["CacheReportARN"],
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to cancel.</p>"
+        }
+      }
+    },
+    "CancelCacheReportOutput":{
+      "type":"structure",
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to cancel.</p>"
+        }
+      }
+    },
     "CancelRetrievalInput":{
       "type":"structure",
       "required":[
@@ -1898,7 +2112,7 @@
         },
         "NetworkInterfaceId":{
           "shape":"NetworkInterfaceId",
-          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Only IPv4 addresses are accepted. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
+          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Accepts IPv4 and IPv6 addresses. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
         },
         "ClientToken":{
           "shape":"ClientToken",
@@ -1984,7 +2198,7 @@
         },
         "ClientList":{
           "shape":"FileShareClientList",
-          "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IP addresses or valid CIDR blocks.</p>"
+          "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IPv4/IPv6 addresses or valid CIDR blocks.</p>"
         },
         "Squash":{
           "shape":"Squash",
@@ -2278,7 +2492,7 @@
         },
         "NetworkInterfaceId":{
           "shape":"NetworkInterfaceId",
-          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Only IPv4 addresses are accepted. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
+          "documentation":"<p>The network interface of the gateway on which to expose the iSCSI target. Accepts IPv4 and IPv6 addresses. Use <a>DescribeGatewayInformation</a> to get a list of the network interfaces available on a gateway.</p> <p>Valid Values: A valid IP address.</p>"
         },
         "KMSEncrypted":{
           "shape":"Boolean",
@@ -2525,6 +2739,25 @@
       },
       "documentation":"<p>A JSON object containing the Amazon Resource Name (ARN) of the gateway whose bandwidth rate information was deleted.</p>"
     },
+    "DeleteCacheReportInput":{
+      "type":"structure",
+      "required":["CacheReportARN"],
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to delete.</p>"
+        }
+      }
+    },
+    "DeleteCacheReportOutput":{
+      "type":"structure",
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to delete.</p>"
+        }
+      }
+    },
     "DeleteChapCredentialsInput":{
       "type":"structure",
       "required":[
@@ -2816,6 +3049,25 @@
         }
       }
     },
+    "DescribeCacheReportInput":{
+      "type":"structure",
+      "required":["CacheReportARN"],
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report you want to describe.</p>"
+        }
+      }
+    },
+    "DescribeCacheReportOutput":{
+      "type":"structure",
+      "members":{
+        "CacheReportInfo":{
+          "shape":"CacheReportInfo",
+          "documentation":"<p>Contains all informational fields associated with a cache report. Includes name, ARN, tags, status, progress, filters, start time, and end time.</p>"
+        }
+      }
+    },
     "DescribeCachediSCSIVolumesInput":{
       "type":"structure",
       "required":["VolumeARNs"],
@@ -3073,7 +3325,7 @@
         },
         "ActiveDirectoryStatus":{
           "shape":"ActiveDirectoryStatus",
-          "documentation":"<p>Indicates the status of a gateway that is a member of the Active Directory domain.</p> <ul> <li> <p> <code>ACCESS_DENIED</code>: Indicates that the <code>JoinDomain</code> operation failed due to an authentication error.</p> </li> <li> <p> <code>DETACHED</code>: Indicates that gateway is not joined to a domain.</p> </li> <li> <p> <code>JOINED</code>: Indicates that the gateway has successfully joined a domain.</p> </li> <li> <p> <code>JOINING</code>: Indicates that a <code>JoinDomain</code> operation is in progress.</p> </li> <li> <p> <code>NETWORK_ERROR</code>: Indicates that <code>JoinDomain</code> operation failed due to a network or connectivity error.</p> </li> <li> <p> <code>TIMEOUT</code>: Indicates that the <code>JoinDomain</code> operation failed because the operation didn't complete within the allotted time.</p> </li> <li> <p> <code>UNKNOWN_ERROR</code>: Indicates that the <code>JoinDomain</code> operation failed due to another type of error.</p> </li> </ul>"
+          "documentation":"<p>Indicates the status of a gateway that is a member of the Active Directory domain.</p> <note> <p>This field is only used as part of a <code>JoinDomain</code> request. It is not affected by Active Directory connectivity changes that occur after the <code>JoinDomain</code> request succeeds.</p> </note> <ul> <li> <p> <code>ACCESS_DENIED</code>: Indicates that the <code>JoinDomain</code> operation failed due to an authentication error.</p> </li> <li> <p> <code>DETACHED</code>: Indicates that gateway is not joined to a domain.</p> </li> <li> <p> <code>JOINED</code>: Indicates that the gateway has successfully joined a domain.</p> </li> <li> <p> <code>JOINING</code>: Indicates that a <code>JoinDomain</code> operation is in progress.</p> </li> <li> <p> <code>NETWORK_ERROR</code>: Indicates that <code>JoinDomain</code> operation failed due to a network or connectivity error.</p> </li> <li> <p> <code>TIMEOUT</code>: Indicates that the <code>JoinDomain</code> operation failed because the operation didn't complete within the allotted time.</p> </li> <li> <p> <code>UNKNOWN_ERROR</code>: Indicates that the <code>JoinDomain</code> operation failed due to another type of error.</p> </li> </ul>"
         },
         "SMBGuestPasswordSet":{
           "shape":"Boolean",
@@ -3610,6 +3862,29 @@
         "VolumeNotReady"
       ]
     },
+    "EvictFilesFailingUploadInput":{
+      "type":"structure",
+      "required":["FileShareARN"],
+      "members":{
+        "FileShareARN":{
+          "shape":"FileShareARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the file share for which you want to start the cache clean operation.</p>"
+        },
+        "ForceRemove":{
+          "shape":"boolean",
+          "documentation":"<p>Specifies whether cache entries with full or partial file data currently stored on the gateway will be forcibly removed by the cache clean operation.</p> <p>Valid arguments:</p> <ul> <li> <p> <code>False</code> - The cache clean operation skips cache entries failing upload if they are associated with data currently stored on the gateway. This preserves the cached data.</p> </li> <li> <p> <code>True</code> - The cache clean operation removes cache entries failing upload even if they are associated with data currently stored on the gateway. This deletes the cached data.</p> <important> <p>If <code>ForceRemove</code> is set to <code>True</code>, the cache clean operation will delete file data from the gateway which might otherwise be recoverable.</p> </important> </li> </ul>"
+        }
+      }
+    },
+    "EvictFilesFailingUploadOutput":{
+      "type":"structure",
+      "members":{
+        "NotificationId":{
+          "shape":"string",
+          "documentation":"<p>The randomly generated ID of the CloudWatch notification associated with the cache clean operation. This ID is in UUID format.</p>"
+        }
+      }
+    },
     "FileShareARN":{
       "type":"string",
       "documentation":"<p>The Amazon Resource Name (ARN) of the file share.</p>",
@@ -3624,8 +3899,8 @@
     },
     "FileShareClientList":{
       "type":"list",
-      "member":{"shape":"IPV4AddressCIDR"},
-      "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IP addresses or valid CIDR blocks.</p>",
+      "member":{"shape":"Ipv4OrIpv6AddressCIDR"},
+      "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IPv4/IPv6 addresses or valid CIDR blocks.</p>",
       "max":100,
       "min":1
     },
@@ -3891,8 +4166,8 @@
     "Host":{
       "type":"string",
       "max":1024,
-      "min":6,
-      "pattern":"^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])(:(\\d+))?$"
+      "min":2,
+      "pattern":"^(([a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9\\-]*[A-Za-z0-9])(:(\\d+))?$|^(?:\\[(?:(?:(?:[A-Fa-f0-9]{1,4}:){6}|(?=(?:[A-Fa-f0-9]{0,4}:){0,6}(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){0,5}|:)(?:(?::[0-9A-Fa-f]{1,4}){1,5}:|:)|::(?:[A-Fa-f0-9]{1,4}:){5})(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?=(?:[A-Fa-f0-9]{0,4}:){0,7}[A-Fa-f0-9]{0,4}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){1,7}|:)(?:(:[0-9A-Fa-f]{1,4}){1,7}|:)|(?:[A-Fa-f0-9]{1,4}:){7}:|:(:[A-Fa-f0-9]{1,4}){7})\\]:\\d+$|^(?:(?:(?:[A-Fa-f0-9]{1,4}:){6}|(?=(?:[A-Fa-f0-9]{0,4}:){0,6}(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){0,5}|:)(?:(?::[0-9A-Fa-f]{1,4}){1,5}:|:)|::(?:[A-Fa-f0-9]{1,4}:){5})(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?=(?:[A-Fa-f0-9]{0,4}:){0,7}[A-Fa-f0-9]{0,4}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){1,7}|:)(?:(:[0-9A-Fa-f]{1,4}){1,7}|:)|(?:[A-Fa-f0-9]{1,4}:){7}:|:(:[A-Fa-f0-9]{1,4}){7})$)"
     },
     "HostEnvironment":{
       "type":"string",
@@ -3925,10 +4200,6 @@
       "min":7,
       "pattern":"^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}"
     },
-    "IPV4AddressCIDR":{
-      "type":"string",
-      "pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))?$"
-    },
     "Initiator":{
       "type":"string",
       "max":50,
@@ -3974,6 +4245,10 @@
       "max":1,
       "min":0
     },
+    "Ipv4OrIpv6AddressCIDR":{
+      "type":"string",
+      "pattern":"^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:\\/(?:[0-9]|[1-2][0-9]|3[0-2]))?$|^(?:(?:(?:[A-Fa-f0-9]{1,4}:){6}|(?=(?:[A-Fa-f0-9]{0,4}:){0,6}(?:[0-9]{1,3}\\.){3}[0-9]{1,3}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){0,5}|:)(?:(?::[0-9A-Fa-f]{1,4}){1,5}:|:)|::(?:[A-Fa-f0-9]{1,4}:){5})(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Fa-f0-9]{1,4}:){7}[A-Fa-f0-9]{1,4}|(?=(?:[A-Fa-f0-9]{0,4}:){0,7}[A-Fa-f0-9]{0,4}(?![:.\\w]))(?:(?:[0-9A-Fa-f]{1,4}:){1,7}|:)(?:(:[0-9A-Fa-f]{1,4}){1,7}|:)|(?:[A-Fa-f0-9]{1,4}:){7}:|:(:[A-Fa-f0-9]{1,4}){7})(?:\\/(?:12[0-8]|1[01][0-9]|[1-9]?[0-9]))?$"
+    },
     "IqnName":{
       "type":"string",
       "max":255,
@@ -4003,7 +4278,7 @@
         },
         "DomainControllers":{
           "shape":"Hosts",
-          "documentation":"<p>List of IPv4 addresses, NetBIOS names, or host names of your domain server. If you need to specify the port number include it after the colon (“:”). For example, <code>mydc.mydomain.com:389</code>.</p>"
+          "documentation":"<p>List of IP addresses, NetBIOS names, or host names of your domain server. If you need to specify the port number include it after the colon (“:”). For example, <code>mydc.mydomain.com:389</code>.</p> <note> <p>S3 File Gateway supports IPv6 addresses in addition to IPv4 and other existing formats.</p> <p>FSx File Gateway does not support IPv6.</p> </note>"
         },
         "TimeoutInSeconds":{
           "shape":"TimeoutInSeconds",
@@ -4029,7 +4304,7 @@
         },
         "ActiveDirectoryStatus":{
           "shape":"ActiveDirectoryStatus",
-          "documentation":"<p>Indicates the status of the gateway as a member of the Active Directory domain.</p> <ul> <li> <p> <code>ACCESS_DENIED</code>: Indicates that the <code>JoinDomain</code> operation failed due to an authentication error.</p> </li> <li> <p> <code>DETACHED</code>: Indicates that gateway is not joined to a domain.</p> </li> <li> <p> <code>JOINED</code>: Indicates that the gateway has successfully joined a domain.</p> </li> <li> <p> <code>JOINING</code>: Indicates that a <code>JoinDomain</code> operation is in progress.</p> </li> <li> <p> <code>NETWORK_ERROR</code>: Indicates that <code>JoinDomain</code> operation failed due to a network or connectivity error.</p> </li> <li> <p> <code>TIMEOUT</code>: Indicates that the <code>JoinDomain</code> operation failed because the operation didn't complete within the allotted time.</p> </li> <li> <p> <code>UNKNOWN_ERROR</code>: Indicates that the <code>JoinDomain</code> operation failed due to another type of error.</p> </li> </ul>"
+          "documentation":"<p>Indicates the status of the gateway as a member of the Active Directory domain.</p> <note> <p>This field is only used as part of a <code>JoinDomain</code> request. It is not affected by Active Directory connectivity changes that occur after the <code>JoinDomain</code> request succeeds.</p> </note> <ul> <li> <p> <code>ACCESS_DENIED</code>: Indicates that the <code>JoinDomain</code> operation failed due to an authentication error.</p> </li> <li> <p> <code>DETACHED</code>: Indicates that gateway is not joined to a domain.</p> </li> <li> <p> <code>JOINED</code>: Indicates that the gateway has successfully joined a domain.</p> </li> <li> <p> <code>JOINING</code>: Indicates that a <code>JoinDomain</code> operation is in progress.</p> </li> <li> <p> <code>INSUFFICIENT_PERMISSIONS</code>: Indicates that the <code>JoinDomain</code> operation failed because the specified user lacks the necessary permissions to join the domain.</p> </li> <li> <p> <code>NETWORK_ERROR</code>: Indicates that <code>JoinDomain</code> operation failed due to a network or connectivity error.</p> </li> <li> <p> <code>TIMEOUT</code>: Indicates that the <code>JoinDomain</code> operation failed because the operation didn't complete within the allotted time.</p> </li> <li> <p> <code>UNKNOWN_ERROR</code>: Indicates that the <code>JoinDomain</code> operation failed due to another type of error.</p> </li> </ul>"
         }
       },
       "documentation":"<p>JoinDomainOutput</p>"
@@ -4061,6 +4336,28 @@
         }
       }
     },
+    "ListCacheReportsInput":{
+      "type":"structure",
+      "members":{
+        "Marker":{
+          "shape":"Marker",
+          "documentation":"<p>Opaque pagination token returned from a previous <code>ListCacheReports</code> operation. If present, <code>Marker</code> specifies where to continue the list from after a previous call to <code>ListCacheReports</code>. Optional.</p>"
+        }
+      }
+    },
+    "ListCacheReportsOutput":{
+      "type":"structure",
+      "members":{
+        "CacheReportList":{
+          "shape":"CacheReportList",
+          "documentation":"<p>A list of existing cache reports for all file shares associated with your Amazon Web Services account. This list includes all information provided by the <code>DescribeCacheReport</code> action, such as report status, completion progress, start time, end time, filters, and tags.</p>"
+        },
+        "Marker":{
+          "shape":"Marker",
+          "documentation":"<p>If the request includes <code>Marker</code>, the response returns that value in this field.</p>"
+        }
+      }
+    },
     "ListFileSharesInput":{
       "type":"structure",
       "members":{
@@ -4349,7 +4646,7 @@
     },
     "Marker":{
       "type":"string",
-      "max":1000,
+      "max":2000,
       "min":1
     },
     "MediumChangerType":{
@@ -4478,16 +4775,13 @@
         },
         "Ipv6Address":{
           "shape":"string",
-          "documentation":"<p>The Internet Protocol version 6 (IPv6) address of the interface. <i>Currently not supported</i>.</p>"
+          "documentation":"<p>The Internet Protocol version 6 (IPv6) address of the interface.</p> <note> <p>This element returns IPv6 addresses for all gateway types except FSx File Gateway.</p> </note>"
         }
       },
       "documentation":"<p>Describes a gateway's network interface.</p>",
       "sensitive":true
     },
-    "NetworkInterfaceId":{
-      "type":"string",
-      "pattern":"\\A(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}\\z"
-    },
+    "NetworkInterfaceId":{"type":"string"},
     "NextUpdateAvailabilityDate":{
       "type":"string",
       "max":25,
@@ -4687,6 +4981,11 @@
       },
       "documentation":"<p>RemoveTagsFromResourceOutput</p>"
     },
+    "ReportCompletionPercent":{
+      "type":"integer",
+      "max":100,
+      "min":0
+    },
     "ResetCacheInput":{
       "type":"structure",
       "required":["GatewayARN"],
@@ -5028,6 +5327,60 @@
         "GatewayARN":{"shape":"GatewayARN"}
       }
     },
+    "StartCacheReportInput":{
+      "type":"structure",
+      "required":[
+        "FileShareARN",
+        "Role",
+        "LocationARN",
+        "BucketRegion",
+        "ClientToken"
+      ],
+      "members":{
+        "FileShareARN":{"shape":"FileShareARN"},
+        "Role":{
+          "shape":"Role",
+          "documentation":"<p>The ARN of the IAM role used when saving the cache report to Amazon S3.</p>"
+        },
+        "LocationARN":{
+          "shape":"LocationARN",
+          "documentation":"<p>The ARN of the Amazon S3 bucket where you want to save the cache report.</p> <note> <p>We do not recommend saving the cache report to the same Amazon S3 bucket for which you are generating the report.</p> <p>This field does not accept access point ARNs.</p> </note>"
+        },
+        "BucketRegion":{
+          "shape":"RegionId",
+          "documentation":"<p>The Amazon Web Services Region of the Amazon S3 bucket where you want to save the cache report.</p>"
+        },
+        "VPCEndpointDNSName":{
+          "shape":"DNSHostName",
+          "documentation":"<p>The DNS name of the VPC endpoint associated with the Amazon S3 where you want to save the cache report. Optional.</p>"
+        },
+        "InclusionFilters":{
+          "shape":"CacheReportFilterList",
+          "documentation":"<p>The list of filters and parameters that determine which files are included in the report. You must specify at least one value for <code>InclusionFilters</code> or <code>ExclusionFilters</code> in a <code>StartCacheReport</code> request.</p>"
+        },
+        "ExclusionFilters":{
+          "shape":"CacheReportFilterList",
+          "documentation":"<p>The list of filters and parameters that determine which files are excluded from the report. You must specify at least one value for <code>InclusionFilters</code> or <code>ExclusionFilters</code> in a <code>StartCacheReport</code> request.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique identifier that you use to ensure idempotent report generation if you need to retry an unsuccessful <code>StartCacheReport</code> request. If you retry a request, use the same <code>ClientToken</code> you specified in the initial request.</p>"
+        },
+        "Tags":{
+          "shape":"Tags",
+          "documentation":"<p>A list of up to 50 key/value tags that you can assign to the cache report. Using tags can help you categorize your reports and more easily locate them in search results.</p>"
+        }
+      }
+    },
+    "StartCacheReportOutput":{
+      "type":"structure",
+      "members":{
+        "CacheReportARN":{
+          "shape":"CacheReportARN",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the cache report generated by the <code>StartCacheReport</code> request.</p>"
+        }
+      }
+    },
     "StartGatewayInput":{
       "type":"structure",
       "required":["GatewayARN"],
@@ -5667,7 +6020,7 @@
         },
         "ClientList":{
           "shape":"FileShareClientList",
-          "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IP addresses or valid CIDR blocks.</p>"
+          "documentation":"<p>The list of clients that are allowed to access the S3 File Gateway. The list must contain either valid IPv4/IPv6 addresses or valid CIDR blocks.</p>"
         },
         "Squash":{
           "shape":"Squash",
diff -pruN 2.23.6-1/awscli/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sts/2011-06-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,34 +5,34 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "UseGlobalEndpoint": {
             "builtIn": "AWS::STS::UseGlobalEndpoint",
             "required": true,
             "default": false,
             "documentation": "Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.",
-            "type": "Boolean"
+            "type": "boolean"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/sts/2011-06-15/service-2.json 2.31.35-1/awscli/botocore/data/sts/2011-06-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/sts/2011-06-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/sts/2011-06-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -53,7 +53,9 @@
         {"shape":"ExpiredTokenException"},
         {"shape":"RegionDisabledException"}
       ],
-      "documentation":"<p>Returns a set of temporary security credentials for users who have been authenticated via a SAML authentication response. This operation provides a mechanism for tying an enterprise identity store or directory to role-based Amazon Web Services access without user-specific credentials or configuration. For a comparison of <code>AssumeRoleWithSAML</code> with the other API operations that produce temporary credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html\">Requesting Temporary Security Credentials</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html\">Compare STS credentials</a> in the <i>IAM User Guide</i>.</p> <p>The temporary security credentials returned by this operation consist of an access key ID, a secret access key, and a security token. Applications can use these temporary security credentials to sign calls to Amazon Web Services services.</p> <p> <b>Session Duration</b> </p> <p>By default, the temporary security credentials created by <code>AssumeRoleWithSAML</code> last for one hour. However, you can use the optional <code>DurationSeconds</code> parameter to specify the duration of your session. Your role session lasts for the duration that you specify, or until the time specified in the SAML authentication response's <code>SessionNotOnOrAfter</code> value, whichever is shorter. You can provide a <code>DurationSeconds</code> value from 900 seconds (15 minutes) up to the maximum session duration setting for the role. This setting can have a value from 1 hour to 12 hours. To learn how to view the maximum value for your role, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session\">View the Maximum Session Duration Setting for a Role</a> in the <i>IAM User Guide</i>. The maximum session duration limit applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI commands. However the limit does not apply when you use those operations to create a console URL. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html\">Using IAM Roles</a> in the <i>IAM User Guide</i>.</p> <note> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-role-chaining\">Role chaining</a> limits your CLI or Amazon Web Services API role session to a maximum of one hour. When you use the <code>AssumeRole</code> API operation to assume a role, you can specify the duration of your role session with the <code>DurationSeconds</code> parameter. You can specify a parameter value of up to 43200 seconds (12 hours), depending on the maximum session duration setting for your role. However, if you assume a role using role chaining and provide a <code>DurationSeconds</code> parameter value greater than one hour, the operation fails.</p> </note> <p> <b>Permissions</b> </p> <p>The temporary security credentials created by <code>AssumeRoleWithSAML</code> can be used to make API calls to any Amazon Web Services service with the following exception: you cannot call the STS <code>GetFederationToken</code> or <code>GetSessionToken</code> API operations.</p> <p>(Optional) You can pass inline or managed <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">session policies</a> to this operation. You can pass a single JSON policy document to use as an inline session policy. You can also specify up to 10 managed policy Amazon Resource Names (ARNs) to use as managed session policies. The plaintext that you use for both inline and managed session policies can't exceed 2,048 characters. Passing policies to this operation returns new temporary credentials. The resulting session's permissions are the intersection of the role's identity-based policy and the session policies. You can use the role's temporary credentials in subsequent Amazon Web Services API calls to access resources in the account that owns the role. You cannot use session policies to grant more permissions than those allowed by the identity-based policy of the role that is being assumed. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">Session Policies</a> in the <i>IAM User Guide</i>.</p> <p>Calling <code>AssumeRoleWithSAML</code> does not require the use of Amazon Web Services security credentials. The identity of the caller is validated by using keys in the metadata document that is uploaded for the SAML provider entity for your identity provider. </p> <important> <p>Calling <code>AssumeRoleWithSAML</code> can result in an entry in your CloudTrail logs. The entry includes the value in the <code>NameID</code> element of the SAML assertion. We recommend that you use a <code>NameIDType</code> that is not associated with any personally identifiable information (PII). For example, you could instead use the persistent identifier (<code>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</code>).</p> </important> <p> <b>Tags</b> </p> <p>(Optional) You can configure your IdP to pass attributes into your SAML assertion as session tags. Each session tag consists of a key name and an associated value. For more information about session tags, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html\">Passing Session Tags in STS</a> in the <i>IAM User Guide</i>.</p> <p>You can pass up to 50 session tags. The plaintext session tag keys can’t exceed 128 characters and the values can’t exceed 256 characters. For these and additional limits, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length\">IAM and STS Character Limits</a> in the <i>IAM User Guide</i>.</p> <note> <p>An Amazon Web Services conversion compresses the passed inline session policy, managed policy ARNs, and session tags into a packed binary format that has a separate limit. Your request can fail for this limit even if your plaintext meets the other requirements. The <code>PackedPolicySize</code> response element indicates by percentage how close the policies and tags for your request are to the upper size limit.</p> </note> <p>You can pass a session tag with the same key as a tag that is attached to the role. When you do, session tags override the role's tags with the same key.</p> <p>An administrator must grant you the permissions necessary to pass session tags. The administrator can also create granular permissions to allow you to pass only specific session tags. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html\">Tutorial: Using Tags for Attribute-Based Access Control</a> in the <i>IAM User Guide</i>.</p> <p>You can set the session tags as transitive. Transitive tags persist during role chaining. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining\">Chaining Roles with Session Tags</a> in the <i>IAM User Guide</i>.</p> <p> <b>SAML Configuration</b> </p> <p>Before your application can call <code>AssumeRoleWithSAML</code>, you must configure your SAML identity provider (IdP) to issue the claims required by Amazon Web Services. Additionally, you must use Identity and Access Management (IAM) to create a SAML provider entity in your Amazon Web Services account that represents your identity provider. You must also create an IAM role that specifies this SAML provider in its trust policy. </p> <p>For more information, see the following resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html\">About SAML 2.0-based Federation</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html\">Creating SAML Identity Providers</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html\">Configuring a Relying Party and Claims</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html\">Creating a Role for SAML 2.0 Federation</a> in the <i>IAM User Guide</i>. </p> </li> </ul>"
+      "documentation":"<p>Returns a set of temporary security credentials for users who have been authenticated via a SAML authentication response. This operation provides a mechanism for tying an enterprise identity store or directory to role-based Amazon Web Services access without user-specific credentials or configuration. For a comparison of <code>AssumeRoleWithSAML</code> with the other API operations that produce temporary credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html\">Requesting Temporary Security Credentials</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html\">Compare STS credentials</a> in the <i>IAM User Guide</i>.</p> <p>The temporary security credentials returned by this operation consist of an access key ID, a secret access key, and a security token. Applications can use these temporary security credentials to sign calls to Amazon Web Services services.</p> <note> <p>AssumeRoleWithSAML will not work on IAM Identity Center managed roles. These roles' names start with <code>AWSReservedSSO_</code>.</p> </note> <p> <b>Session Duration</b> </p> <p>By default, the temporary security credentials created by <code>AssumeRoleWithSAML</code> last for one hour. However, you can use the optional <code>DurationSeconds</code> parameter to specify the duration of your session. Your role session lasts for the duration that you specify, or until the time specified in the SAML authentication response's <code>SessionNotOnOrAfter</code> value, whichever is shorter. You can provide a <code>DurationSeconds</code> value from 900 seconds (15 minutes) up to the maximum session duration setting for the role. This setting can have a value from 1 hour to 12 hours. To learn how to view the maximum value for your role, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session\">View the Maximum Session Duration Setting for a Role</a> in the <i>IAM User Guide</i>. The maximum session duration limit applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI commands. However the limit does not apply when you use those operations to create a console URL. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html\">Using IAM Roles</a> in the <i>IAM User Guide</i>.</p> <note> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-role-chaining\">Role chaining</a> limits your CLI or Amazon Web Services API role session to a maximum of one hour. When you use the <code>AssumeRole</code> API operation to assume a role, you can specify the duration of your role session with the <code>DurationSeconds</code> parameter. You can specify a parameter value of up to 43200 seconds (12 hours), depending on the maximum session duration setting for your role. However, if you assume a role using role chaining and provide a <code>DurationSeconds</code> parameter value greater than one hour, the operation fails.</p> </note> <p> <b>Permissions</b> </p> <p>The temporary security credentials created by <code>AssumeRoleWithSAML</code> can be used to make API calls to any Amazon Web Services service with the following exception: you cannot call the STS <code>GetFederationToken</code> or <code>GetSessionToken</code> API operations.</p> <p>(Optional) You can pass inline or managed <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">session policies</a> to this operation. You can pass a single JSON policy document to use as an inline session policy. You can also specify up to 10 managed policy Amazon Resource Names (ARNs) to use as managed session policies. The plaintext that you use for both inline and managed session policies can't exceed 2,048 characters. Passing policies to this operation returns new temporary credentials. The resulting session's permissions are the intersection of the role's identity-based policy and the session policies. You can use the role's temporary credentials in subsequent Amazon Web Services API calls to access resources in the account that owns the role. You cannot use session policies to grant more permissions than those allowed by the identity-based policy of the role that is being assumed. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">Session Policies</a> in the <i>IAM User Guide</i>.</p> <p>Calling <code>AssumeRoleWithSAML</code> does not require the use of Amazon Web Services security credentials. The identity of the caller is validated by using keys in the metadata document that is uploaded for the SAML provider entity for your identity provider. </p> <important> <p>Calling <code>AssumeRoleWithSAML</code> can result in an entry in your CloudTrail logs. The entry includes the value in the <code>NameID</code> element of the SAML assertion. We recommend that you use a <code>NameIDType</code> that is not associated with any personally identifiable information (PII). For example, you could instead use the persistent identifier (<code>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</code>).</p> </important> <p> <b>Tags</b> </p> <p>(Optional) You can configure your IdP to pass attributes into your SAML assertion as session tags. Each session tag consists of a key name and an associated value. For more information about session tags, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html\">Passing Session Tags in STS</a> in the <i>IAM User Guide</i>.</p> <p>You can pass up to 50 session tags. The plaintext session tag keys can’t exceed 128 characters and the values can’t exceed 256 characters. For these and additional limits, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length\">IAM and STS Character Limits</a> in the <i>IAM User Guide</i>.</p> <note> <p>An Amazon Web Services conversion compresses the passed inline session policy, managed policy ARNs, and session tags into a packed binary format that has a separate limit. Your request can fail for this limit even if your plaintext meets the other requirements. The <code>PackedPolicySize</code> response element indicates by percentage how close the policies and tags for your request are to the upper size limit.</p> </note> <p>You can pass a session tag with the same key as a tag that is attached to the role. When you do, session tags override the role's tags with the same key.</p> <p>An administrator must grant you the permissions necessary to pass session tags. The administrator can also create granular permissions to allow you to pass only specific session tags. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html\">Tutorial: Using Tags for Attribute-Based Access Control</a> in the <i>IAM User Guide</i>.</p> <p>You can set the session tags as transitive. Transitive tags persist during role chaining. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining\">Chaining Roles with Session Tags</a> in the <i>IAM User Guide</i>.</p> <p> <b>SAML Configuration</b> </p> <p>Before your application can call <code>AssumeRoleWithSAML</code>, you must configure your SAML identity provider (IdP) to issue the claims required by Amazon Web Services. Additionally, you must use Identity and Access Management (IAM) to create a SAML provider entity in your Amazon Web Services account that represents your identity provider. You must also create an IAM role that specifies this SAML provider in its trust policy. </p> <p>For more information, see the following resources:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html\">About SAML 2.0-based Federation</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html\">Creating SAML Identity Providers</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html\">Configuring a Relying Party and Claims</a> in the <i>IAM User Guide</i>. </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html\">Creating a Role for SAML 2.0 Federation</a> in the <i>IAM User Guide</i>. </p> </li> </ul>",
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "AssumeRoleWithWebIdentity":{
       "name":"AssumeRoleWithWebIdentity",
@@ -75,7 +77,9 @@
         {"shape":"ExpiredTokenException"},
         {"shape":"RegionDisabledException"}
       ],
-      "documentation":"<p>Returns a set of temporary security credentials for users who have been authenticated in a mobile or web application with a web identity provider. Example providers include the OAuth 2.0 providers Login with Amazon and Facebook, or any OpenID Connect-compatible identity provider such as Google or <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito federated identities</a>.</p> <note> <p>For mobile applications, we recommend that you use Amazon Cognito. You can use Amazon Cognito with the <a href=\"http://aws.amazon.com/sdkforios/\">Amazon Web Services SDK for iOS Developer Guide</a> and the <a href=\"http://aws.amazon.com/sdkforandroid/\">Amazon Web Services SDK for Android Developer Guide</a> to uniquely identify a user. You can also supply the user with a consistent identity throughout the lifetime of an application.</p> <p>To learn more about Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito identity pools</a> in <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>Calling <code>AssumeRoleWithWebIdentity</code> does not require the use of Amazon Web Services security credentials. Therefore, you can distribute an application (for example, on mobile devices) that requests temporary security credentials without including long-term Amazon Web Services credentials in the application. You also don't need to deploy server-based proxy services that use long-term Amazon Web Services credentials. Instead, the identity of the caller is validated by using a token from the web identity provider. For a comparison of <code>AssumeRoleWithWebIdentity</code> with the other API operations that produce temporary credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html\">Requesting Temporary Security Credentials</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html\">Compare STS credentials</a> in the <i>IAM User Guide</i>.</p> <p>The temporary security credentials returned by this API consist of an access key ID, a secret access key, and a security token. Applications can use these temporary security credentials to sign calls to Amazon Web Services service API operations.</p> <p> <b>Session Duration</b> </p> <p>By default, the temporary security credentials created by <code>AssumeRoleWithWebIdentity</code> last for one hour. However, you can use the optional <code>DurationSeconds</code> parameter to specify the duration of your session. You can provide a value from 900 seconds (15 minutes) up to the maximum session duration setting for the role. This setting can have a value from 1 hour to 12 hours. To learn how to view the maximum value for your role, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-settings.html#id_roles_update-session-duration\">Update the maximum session duration for a role </a> in the <i>IAM User Guide</i>. The maximum session duration limit applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI commands. However the limit does not apply when you use those operations to create a console URL. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html\">Using IAM Roles</a> in the <i>IAM User Guide</i>. </p> <p> <b>Permissions</b> </p> <p>The temporary security credentials created by <code>AssumeRoleWithWebIdentity</code> can be used to make API calls to any Amazon Web Services service with the following exception: you cannot call the STS <code>GetFederationToken</code> or <code>GetSessionToken</code> API operations.</p> <p>(Optional) You can pass inline or managed <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">session policies</a> to this operation. You can pass a single JSON policy document to use as an inline session policy. You can also specify up to 10 managed policy Amazon Resource Names (ARNs) to use as managed session policies. The plaintext that you use for both inline and managed session policies can't exceed 2,048 characters. Passing policies to this operation returns new temporary credentials. The resulting session's permissions are the intersection of the role's identity-based policy and the session policies. You can use the role's temporary credentials in subsequent Amazon Web Services API calls to access resources in the account that owns the role. You cannot use session policies to grant more permissions than those allowed by the identity-based policy of the role that is being assumed. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">Session Policies</a> in the <i>IAM User Guide</i>.</p> <p> <b>Tags</b> </p> <p>(Optional) You can configure your IdP to pass attributes into your web identity token as session tags. Each session tag consists of a key name and an associated value. For more information about session tags, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html\">Passing Session Tags in STS</a> in the <i>IAM User Guide</i>.</p> <p>You can pass up to 50 session tags. The plaintext session tag keys can’t exceed 128 characters and the values can’t exceed 256 characters. For these and additional limits, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length\">IAM and STS Character Limits</a> in the <i>IAM User Guide</i>.</p> <note> <p>An Amazon Web Services conversion compresses the passed inline session policy, managed policy ARNs, and session tags into a packed binary format that has a separate limit. Your request can fail for this limit even if your plaintext meets the other requirements. The <code>PackedPolicySize</code> response element indicates by percentage how close the policies and tags for your request are to the upper size limit.</p> </note> <p>You can pass a session tag with the same key as a tag that is attached to the role. When you do, the session tag overrides the role tag with the same key.</p> <p>An administrator must grant you the permissions necessary to pass session tags. The administrator can also create granular permissions to allow you to pass only specific session tags. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html\">Tutorial: Using Tags for Attribute-Based Access Control</a> in the <i>IAM User Guide</i>.</p> <p>You can set the session tags as transitive. Transitive tags persist during role chaining. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining\">Chaining Roles with Session Tags</a> in the <i>IAM User Guide</i>.</p> <p> <b>Identities</b> </p> <p>Before your application can call <code>AssumeRoleWithWebIdentity</code>, you must have an identity token from a supported identity provider and create a role that the application can assume. The role that your application assumes must trust the identity provider that is associated with the identity token. In other words, the identity provider must be specified in the role's trust policy. </p> <important> <p>Calling <code>AssumeRoleWithWebIdentity</code> can result in an entry in your CloudTrail logs. The entry includes the <a href=\"http://openid.net/specs/openid-connect-core-1_0.html#Claims\">Subject</a> of the provided web identity token. We recommend that you avoid using any personally identifiable information (PII) in this field. For example, you could instead use a GUID or a pairwise identifier, as <a href=\"http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes\">suggested in the OIDC specification</a>.</p> </important> <p>For more information about how to use OIDC federation and the <code>AssumeRoleWithWebIdentity</code> API, see the following resources: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html\">Using Web Identity Federation API Operations for Mobile Apps</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity\">Federation Through a Web-based Identity Provider</a>. </p> </li> <li> <p> <a href=\"http://aws.amazon.com/sdkforios/\">Amazon Web Services SDK for iOS Developer Guide</a> and <a href=\"http://aws.amazon.com/sdkforandroid/\">Amazon Web Services SDK for Android Developer Guide</a>. These toolkits contain sample apps that show how to invoke the identity providers. The toolkits then show how to use the information from these providers to get and use temporary security credentials. </p> </li> </ul>"
+      "documentation":"<p>Returns a set of temporary security credentials for users who have been authenticated in a mobile or web application with a web identity provider. Example providers include the OAuth 2.0 providers Login with Amazon and Facebook, or any OpenID Connect-compatible identity provider such as Google or <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito federated identities</a>.</p> <note> <p>For mobile applications, we recommend that you use Amazon Cognito. You can use Amazon Cognito with the <a href=\"http://aws.amazon.com/sdkforios/\">Amazon Web Services SDK for iOS Developer Guide</a> and the <a href=\"http://aws.amazon.com/sdkforandroid/\">Amazon Web Services SDK for Android Developer Guide</a> to uniquely identify a user. You can also supply the user with a consistent identity throughout the lifetime of an application.</p> <p>To learn more about Amazon Cognito, see <a href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html\">Amazon Cognito identity pools</a> in <i>Amazon Cognito Developer Guide</i>.</p> </note> <p>Calling <code>AssumeRoleWithWebIdentity</code> does not require the use of Amazon Web Services security credentials. Therefore, you can distribute an application (for example, on mobile devices) that requests temporary security credentials without including long-term Amazon Web Services credentials in the application. You also don't need to deploy server-based proxy services that use long-term Amazon Web Services credentials. Instead, the identity of the caller is validated by using a token from the web identity provider. For a comparison of <code>AssumeRoleWithWebIdentity</code> with the other API operations that produce temporary credentials, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html\">Requesting Temporary Security Credentials</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html\">Compare STS credentials</a> in the <i>IAM User Guide</i>.</p> <p>The temporary security credentials returned by this API consist of an access key ID, a secret access key, and a security token. Applications can use these temporary security credentials to sign calls to Amazon Web Services service API operations.</p> <p> <b>Session Duration</b> </p> <p>By default, the temporary security credentials created by <code>AssumeRoleWithWebIdentity</code> last for one hour. However, you can use the optional <code>DurationSeconds</code> parameter to specify the duration of your session. You can provide a value from 900 seconds (15 minutes) up to the maximum session duration setting for the role. This setting can have a value from 1 hour to 12 hours. To learn how to view the maximum value for your role, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-settings.html#id_roles_update-session-duration\">Update the maximum session duration for a role </a> in the <i>IAM User Guide</i>. The maximum session duration limit applies when you use the <code>AssumeRole*</code> API operations or the <code>assume-role*</code> CLI commands. However the limit does not apply when you use those operations to create a console URL. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html\">Using IAM Roles</a> in the <i>IAM User Guide</i>. </p> <p> <b>Permissions</b> </p> <p>The temporary security credentials created by <code>AssumeRoleWithWebIdentity</code> can be used to make API calls to any Amazon Web Services service with the following exception: you cannot call the STS <code>GetFederationToken</code> or <code>GetSessionToken</code> API operations.</p> <p>(Optional) You can pass inline or managed <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">session policies</a> to this operation. You can pass a single JSON policy document to use as an inline session policy. You can also specify up to 10 managed policy Amazon Resource Names (ARNs) to use as managed session policies. The plaintext that you use for both inline and managed session policies can't exceed 2,048 characters. Passing policies to this operation returns new temporary credentials. The resulting session's permissions are the intersection of the role's identity-based policy and the session policies. You can use the role's temporary credentials in subsequent Amazon Web Services API calls to access resources in the account that owns the role. You cannot use session policies to grant more permissions than those allowed by the identity-based policy of the role that is being assumed. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session\">Session Policies</a> in the <i>IAM User Guide</i>.</p> <p> <b>Tags</b> </p> <p>(Optional) You can configure your IdP to pass attributes into your web identity token as session tags. Each session tag consists of a key name and an associated value. For more information about session tags, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_adding-assume-role-idp\">Passing session tags using AssumeRoleWithWebIdentity</a> in the <i>IAM User Guide</i>.</p> <p>You can pass up to 50 session tags. The plaintext session tag keys can’t exceed 128 characters and the values can’t exceed 256 characters. For these and additional limits, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length\">IAM and STS Character Limits</a> in the <i>IAM User Guide</i>.</p> <note> <p>An Amazon Web Services conversion compresses the passed inline session policy, managed policy ARNs, and session tags into a packed binary format that has a separate limit. Your request can fail for this limit even if your plaintext meets the other requirements. The <code>PackedPolicySize</code> response element indicates by percentage how close the policies and tags for your request are to the upper size limit.</p> </note> <p>You can pass a session tag with the same key as a tag that is attached to the role. When you do, the session tag overrides the role tag with the same key.</p> <p>An administrator must grant you the permissions necessary to pass session tags. The administrator can also create granular permissions to allow you to pass only specific session tags. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html\">Tutorial: Using Tags for Attribute-Based Access Control</a> in the <i>IAM User Guide</i>.</p> <p>You can set the session tags as transitive. Transitive tags persist during role chaining. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining\">Chaining Roles with Session Tags</a> in the <i>IAM User Guide</i>.</p> <p> <b>Identities</b> </p> <p>Before your application can call <code>AssumeRoleWithWebIdentity</code>, you must have an identity token from a supported identity provider and create a role that the application can assume. The role that your application assumes must trust the identity provider that is associated with the identity token. In other words, the identity provider must be specified in the role's trust policy. </p> <important> <p>Calling <code>AssumeRoleWithWebIdentity</code> can result in an entry in your CloudTrail logs. The entry includes the <a href=\"http://openid.net/specs/openid-connect-core-1_0.html#Claims\">Subject</a> of the provided web identity token. We recommend that you avoid using any personally identifiable information (PII) in this field. For example, you could instead use a GUID or a pairwise identifier, as <a href=\"http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes\">suggested in the OIDC specification</a>.</p> </important> <p>For more information about how to use OIDC federation and the <code>AssumeRoleWithWebIdentity</code> API, see the following resources: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html\">Using Web Identity Federation API Operations for Mobile Apps</a> and <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity\">Federation Through a Web-based Identity Provider</a>. </p> </li> <li> <p> <a href=\"http://aws.amazon.com/sdkforios/\">Amazon Web Services SDK for iOS Developer Guide</a> and <a href=\"http://aws.amazon.com/sdkforandroid/\">Amazon Web Services SDK for Android Developer Guide</a>. These toolkits contain sample apps that show how to invoke the identity providers. The toolkits then show how to use the information from these providers to get and use temporary security credentials. </p> </li> </ul>",
+      "authtype":"none",
+      "auth":["smithy.api#noAuth"]
     },
     "AssumeRoot":{
       "name":"AssumeRoot",
@@ -92,7 +96,7 @@
         {"shape":"RegionDisabledException"},
         {"shape":"ExpiredTokenException"}
       ],
-      "documentation":"<p>Returns a set of short term credentials you can use to perform privileged tasks on a member account in your organization.</p> <p>Before you can launch a privileged session, you must have centralized root access in your organization. For steps to enable this feature, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-enable-root-access.html\">Centralize root access for member accounts</a> in the <i>IAM User Guide</i>.</p> <note> <p>The STS global endpoint is not supported for AssumeRoot. You must send this request to a Regional STS endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html#sts-endpoints\">Endpoints</a>.</p> </note> <p>You can track AssumeRoot in CloudTrail logs to determine what actions were performed in a session. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-track-privileged-tasks.html\">Track privileged tasks in CloudTrail</a> in the <i>IAM User Guide</i>.</p>"
+      "documentation":"<p>Returns a set of short term credentials you can use to perform privileged tasks on a member account in your organization. You must use credentials from an Organizations management account or a delegated administrator account for IAM to call <code>AssumeRoot</code>. You cannot use root user credentials to make this call.</p> <p>Before you can launch a privileged session, you must have centralized root access in your organization. For steps to enable this feature, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-enable-root-access.html\">Centralize root access for member accounts</a> in the <i>IAM User Guide</i>.</p> <note> <p>The STS global endpoint is not supported for AssumeRoot. You must send this request to a Regional STS endpoint. For more information, see <a href=\"https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html#sts-endpoints\">Endpoints</a>.</p> </note> <p>You can track AssumeRoot in CloudTrail logs to determine what actions were performed in a session. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-track-privileged-tasks.html\">Track privileged tasks in CloudTrail</a> in the <i>IAM User Guide</i>.</p> <p>When granting access to privileged tasks you should only grant the necessary permissions required to perform that task. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html\">Security best practices in IAM</a>. In addition, you can use <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html\">service control policies</a> (SCPs) to manage and limit permissions in your organization. See <a href=\"https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples_general.html\">General examples</a> in the <i>Organizations User Guide</i> for more information on SCPs.</p>"
     },
     "DecodeAuthorizationMessage":{
       "name":"DecodeAuthorizationMessage",
@@ -136,6 +140,23 @@
       },
       "documentation":"<p>Returns details about the IAM user or role whose credentials are used to call the operation.</p> <note> <p>No permissions are required to perform this operation. If an administrator attaches a policy to your identity that explicitly denies access to the <code>sts:GetCallerIdentity</code> action, you can still perform this operation. Permissions are not required because the same information is returned when access is denied. To view an example response, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_access-denied-delete-mfa\">I Am Not Authorized to Perform: iam:DeleteVirtualMFADevice</a> in the <i>IAM User Guide</i>.</p> </note>"
     },
+    "GetDelegatedAccessToken":{
+      "name":"GetDelegatedAccessToken",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDelegatedAccessTokenRequest"},
+      "output":{
+        "shape":"GetDelegatedAccessTokenResponse",
+        "resultWrapper":"GetDelegatedAccessTokenResult"
+      },
+      "errors":[
+        {"shape":"ExpiredTradeInTokenException"},
+        {"shape":"RegionDisabledException"}
+      ],
+      "documentation":"<p>This API is currently unavailable for general use.</p>"
+    },
     "GetFederationToken":{
       "name":"GetFederationToken",
       "http":{
@@ -185,7 +206,7 @@
         },
         "RoleSessionName":{
           "shape":"roleSessionNameType",
-          "documentation":"<p>An identifier for the assumed role session.</p> <p>Use the role session name to uniquely identify a session when the same role is assumed by different principals or for different reasons. In cross-account scenarios, the role session name is visible to, and can be logged by the account that owns the role. The role session name is also used in the ARN of the assumed role principal. This means that subsequent cross-account API requests that use the temporary security credentials will expose the role session name to the external account in their CloudTrail logs.</p> <p>For security purposes, administrators can view this field in <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html#cloudtrail-integration_signin-tempcreds\">CloudTrail logs</a> to help identify who performed an action in Amazon Web Services. Your administrator might require that you specify your user name as the session name when you assume the role. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#ck_rolesessionname\"> <code>sts:RoleSessionName</code> </a>.</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@-</p>"
+          "documentation":"<p>An identifier for the assumed role session.</p> <p>Use the role session name to uniquely identify a session when the same role is assumed by different principals or for different reasons. In cross-account scenarios, the role session name is visible to, and can be logged by the account that owns the role. The role session name is also used in the ARN of the assumed role principal. This means that subsequent cross-account API requests that use the temporary security credentials will expose the role session name to the external account in their CloudTrail logs.</p> <p>For security purposes, administrators can view this field in <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html#cloudtrail-integration_signin-tempcreds\">CloudTrail logs</a> to help identify who performed an action in Amazon Web Services. Your administrator might require that you specify your user name as the session name when you assume the role. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#ck_rolesessionname\"> <code>sts:RoleSessionName</code> </a>.</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: +=,.@-</p>"
         },
         "PolicyArns":{
           "shape":"policyDescriptorListType",
@@ -209,11 +230,11 @@
         },
         "ExternalId":{
           "shape":"externalIdType",
-          "documentation":"<p>A unique identifier that might be required when you assume a role in another account. If the administrator of the account to which the role belongs provided you with an external ID, then provide that value in the <code>ExternalId</code> parameter. This value can be any string, such as a passphrase or account number. A cross-account role is usually set up to trust everyone in an account. Therefore, the administrator of the trusting account might send an external ID to the administrator of the trusted account. That way, only someone with the ID can assume the role, rather than everyone in the account. For more information about the external ID, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html\">How to Use an External ID When Granting Access to Your Amazon Web Services Resources to a Third Party</a> in the <i>IAM User Guide</i>.</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@:/-</p>"
+          "documentation":"<p>A unique identifier that might be required when you assume a role in another account. If the administrator of the account to which the role belongs provided you with an external ID, then provide that value in the <code>ExternalId</code> parameter. This value can be any string, such as a passphrase or account number. A cross-account role is usually set up to trust everyone in an account. Therefore, the administrator of the trusting account might send an external ID to the administrator of the trusted account. That way, only someone with the ID can assume the role, rather than everyone in the account. For more information about the external ID, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html\">How to Use an External ID When Granting Access to Your Amazon Web Services Resources to a Third Party</a> in the <i>IAM User Guide</i>.</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: +=,.@:\\/-</p>"
         },
         "SerialNumber":{
           "shape":"serialNumberType",
-          "documentation":"<p>The identification number of the MFA device that is associated with the user who is making the <code>AssumeRole</code> call. Specify this value if the trust policy of the role being assumed includes a condition that requires MFA authentication. The value is either the serial number for a hardware device (such as <code>GAHT12345678</code>) or an Amazon Resource Name (ARN) for a virtual device (such as <code>arn:aws:iam::123456789012:mfa/user</code>).</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@-</p>"
+          "documentation":"<p>The identification number of the MFA device that is associated with the user who is making the <code>AssumeRole</code> call. Specify this value if the trust policy of the role being assumed includes a condition that requires MFA authentication. The value is either the serial number for a hardware device (such as <code>GAHT12345678</code>) or an Amazon Resource Name (ARN) for a virtual device (such as <code>arn:aws:iam::123456789012:mfa/user</code>).</p> <p>The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: +=/:,.@-</p>"
         },
         "TokenCode":{
           "shape":"tokenCodeType",
@@ -412,7 +433,7 @@
         },
         "TaskPolicyArn":{
           "shape":"PolicyDescriptorType",
-          "documentation":"<p>The identity based policy that scopes the session to the privileged tasks that can be performed. You can use one of following Amazon Web Services managed policies to scope root session actions.</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMAuditRootUserCredentials\">IAMAuditRootUserCredentials</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMCreateRootUserPassword\">IAMCreateRootUserPassword</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMDeleteRootUserCredentials\">IAMDeleteRootUserCredentials</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-S3UnlockBucketPolicy\">S3UnlockBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-SQSUnlockQueuePolicy\">SQSUnlockQueuePolicy</a> </p> </li> </ul>"
+          "documentation":"<p>The identity based policy that scopes the session to the privileged tasks that can be performed. You must use one of following Amazon Web Services managed policies to scope root session actions:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMAuditRootUserCredentials\">IAMAuditRootUserCredentials</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMCreateRootUserPassword\">IAMCreateRootUserPassword</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-IAMDeleteRootUserCredentials\">IAMDeleteRootUserCredentials</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-S3UnlockBucketPolicy\">S3UnlockBucketPolicy</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/security-iam-awsmanpol.html#security-iam-awsmanpol-SQSUnlockQueuePolicy\">SQSUnlockQueuePolicy</a> </p> </li> </ul>"
         },
         "DurationSeconds":{
           "shape":"RootDurationSecondsType",
@@ -513,6 +534,19 @@
       },
       "exception":true
     },
+    "ExpiredTradeInTokenException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"expiredTradeInTokenExceptionMessage"}
+      },
+      "documentation":"<p/>",
+      "error":{
+        "code":"ExpiredTradeInTokenException",
+        "httpStatusCode":400,
+        "senderFault":true
+      },
+      "exception":true
+    },
     "FederatedUser":{
       "type":"structure",
       "required":[
@@ -552,8 +586,7 @@
     },
     "GetCallerIdentityRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetCallerIdentityResponse":{
       "type":"structure",
@@ -573,6 +606,30 @@
       },
       "documentation":"<p>Contains the response to a successful <a>GetCallerIdentity</a> request, including information about the entity making the request.</p>"
     },
+    "GetDelegatedAccessTokenRequest":{
+      "type":"structure",
+      "required":["TradeInToken"],
+      "members":{
+        "TradeInToken":{
+          "shape":"tradeInTokenType",
+          "documentation":"<p/>"
+        }
+      }
+    },
+    "GetDelegatedAccessTokenResponse":{
+      "type":"structure",
+      "members":{
+        "Credentials":{"shape":"Credentials"},
+        "PackedPolicySize":{
+          "shape":"nonNegativeIntegerType",
+          "documentation":"<p/>"
+        },
+        "AssumedPrincipal":{
+          "shape":"arnType",
+          "documentation":"<p/>"
+        }
+      }
+    },
     "GetFederationTokenRequest":{
       "type":"structure",
       "required":["Name"],
@@ -751,14 +808,15 @@
     "ProvidedContextsListType":{
       "type":"list",
       "member":{"shape":"ProvidedContext"},
-      "max":5
+      "max":5,
+      "min":1
     },
     "RegionDisabledException":{
       "type":"structure",
       "members":{
         "message":{"shape":"regionDisabledMessage"}
       },
-      "documentation":"<p>STS is not activated in the requested region for the account that is being asked to generate credentials. The account administrator must use the IAM console to activate STS in that region. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html\">Activating and Deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p>",
+      "documentation":"<p>STS is not activated in the requested region for the account that is being asked to generate credentials. The account administrator must use the IAM console to activate STS in that region. For more information, see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate\">Activating and Deactivating STS in an Amazon Web Services Region</a> in the <i>IAM User Guide</i>.</p>",
       "error":{
         "code":"RegionDisabledException",
         "httpStatusCode":403,
@@ -849,6 +907,7 @@
       "min":1
     },
     "expiredIdentityTokenMessage":{"type":"string"},
+    "expiredTradeInTokenExceptionMessage":{"type":"string"},
     "externalIdType":{
       "type":"string",
       "max":1224,
@@ -934,6 +993,10 @@
       "pattern":"[\\d]*"
     },
     "tokenType":{"type":"string"},
+    "tradeInTokenType":{
+      "type":"string",
+      "sensitive":true
+    },
     "unrestrictedSessionPolicyDocumentType":{
       "type":"string",
       "min":1,
diff -pruN 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/paginators-1.json 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,24 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "instances"
+    },
+    "ListDataIntegrationEvents": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "events"
+    },
+    "ListDataIntegrationFlowExecutions": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "flowExecutions"
+    },
+    "ListDataLakeNamespaces": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "namespaces"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/service-2.json 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/supplychain/2024-01-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/supplychain/2024-01-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -66,8 +66,8 @@
       "output":{"shape":"CreateDataLakeDatasetResponse"},
       "errors":[
         {"shape":"ServiceQuotaExceededException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ValidationException"},
         {"shape":"InternalServerException"},
@@ -76,6 +76,27 @@
       "documentation":"<p>Enables you to programmatically create an Amazon Web Services Supply Chain data lake dataset. Developers can create the datasets using their pre-defined or custom schema for a given instance ID, namespace, and dataset name.</p>",
       "idempotent":true
     },
+    "CreateDataLakeNamespace":{
+      "name":"CreateDataLakeNamespace",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/api/datalake/instance/{instanceId}/namespaces/{name}",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateDataLakeNamespaceRequest"},
+      "output":{"shape":"CreateDataLakeNamespaceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically create an Amazon Web Services Supply Chain data lake namespace. Developers can create the namespaces for a given instance ID.</p>",
+      "idempotent":true
+    },
     "CreateInstance":{
       "name":"CreateInstance",
       "http":{
@@ -139,6 +160,27 @@
       "documentation":"<p>Enables you to programmatically delete an Amazon Web Services Supply Chain data lake dataset. Developers can delete the existing datasets for a given instance ID, namespace, and instance name.</p>",
       "idempotent":true
     },
+    "DeleteDataLakeNamespace":{
+      "name":"DeleteDataLakeNamespace",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/api/datalake/instance/{instanceId}/namespaces/{name}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteDataLakeNamespaceRequest"},
+      "output":{"shape":"DeleteDataLakeNamespaceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically delete an Amazon Web Services Supply Chain data lake namespace and its underling datasets. Developers can delete the existing namespaces for a given instance ID and namespace name.</p>",
+      "idempotent":true
+    },
     "DeleteInstance":{
       "name":"DeleteInstance",
       "http":{
@@ -180,6 +222,26 @@
       ],
       "documentation":"<p>Get status and details of a BillOfMaterialsImportJob.</p>"
     },
+    "GetDataIntegrationEvent":{
+      "name":"GetDataIntegrationEvent",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api-data/data-integration/instance/{instanceId}/data-integration-events/{eventId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDataIntegrationEventRequest"},
+      "output":{"shape":"GetDataIntegrationEventResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically view an Amazon Web Services Supply Chain Data Integration Event. Developers can view the eventType, eventGroupId, eventTimestamp, datasetTarget, datasetLoadExecution.</p>"
+    },
     "GetDataIntegrationFlow":{
       "name":"GetDataIntegrationFlow",
       "http":{
@@ -200,6 +262,26 @@
       ],
       "documentation":"<p>Enables you to programmatically view a specific data pipeline for the provided Amazon Web Services Supply Chain instance and DataIntegrationFlow name.</p>"
     },
+    "GetDataIntegrationFlowExecution":{
+      "name":"GetDataIntegrationFlowExecution",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api-data/data-integration/instance/{instanceId}/data-integration-flows/{flowName}/executions/{executionId}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDataIntegrationFlowExecutionRequest"},
+      "output":{"shape":"GetDataIntegrationFlowExecutionResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Get the flow execution.</p>"
+    },
     "GetDataLakeDataset":{
       "name":"GetDataLakeDataset",
       "http":{
@@ -220,6 +302,26 @@
       ],
       "documentation":"<p>Enables you to programmatically view an Amazon Web Services Supply Chain data lake dataset. Developers can view the data lake dataset information such as namespace, schema, and so on for a given instance ID, namespace, and dataset name.</p>"
     },
+    "GetDataLakeNamespace":{
+      "name":"GetDataLakeNamespace",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api/datalake/instance/{instanceId}/namespaces/{name}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDataLakeNamespaceRequest"},
+      "output":{"shape":"GetDataLakeNamespaceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically view an Amazon Web Services Supply Chain data lake namespace. Developers can view the data lake namespace information such as description for a given instance ID and namespace name.</p>"
+    },
     "GetInstance":{
       "name":"GetInstance",
       "http":{
@@ -240,6 +342,46 @@
       ],
       "documentation":"<p>Enables you to programmatically retrieve the information related to an Amazon Web Services Supply Chain instance ID.</p>"
     },
+    "ListDataIntegrationEvents":{
+      "name":"ListDataIntegrationEvents",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api-data/data-integration/instance/{instanceId}/data-integration-events",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDataIntegrationEventsRequest"},
+      "output":{"shape":"ListDataIntegrationEventsResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically list all data integration events for the provided Amazon Web Services Supply Chain instance.</p>"
+    },
+    "ListDataIntegrationFlowExecutions":{
+      "name":"ListDataIntegrationFlowExecutions",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api-data/data-integration/instance/{instanceId}/data-integration-flows/{flowName}/executions",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDataIntegrationFlowExecutionsRequest"},
+      "output":{"shape":"ListDataIntegrationFlowExecutionsResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>List flow executions.</p>"
+    },
     "ListDataIntegrationFlows":{
       "name":"ListDataIntegrationFlows",
       "http":{
@@ -280,6 +422,26 @@
       ],
       "documentation":"<p>Enables you to programmatically view the list of Amazon Web Services Supply Chain data lake datasets. Developers can view the datasets and the corresponding information such as namespace, schema, and so on for a given instance ID and namespace.</p>"
     },
+    "ListDataLakeNamespaces":{
+      "name":"ListDataLakeNamespaces",
+      "http":{
+        "method":"GET",
+        "requestUri":"/api/datalake/instance/{instanceId}/namespaces",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDataLakeNamespacesRequest"},
+      "output":{"shape":"ListDataLakeNamespacesResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically view the list of Amazon Web Services Supply Chain data lake namespaces. Developers can view the namespaces and the corresponding information such as description for a given instance ID. Note that this API only return custom namespaces, instance pre-defined namespaces are not included.</p>"
+    },
     "ListInstances":{
       "name":"ListInstances",
       "http":{
@@ -338,7 +500,7 @@
         {"shape":"InternalServerException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Send the transactional data payload for the event with real-time data for analysis or monitoring. The real-time data events are stored in an Amazon Web Services service before being processed and stored in data lake. New data events are synced with data lake at 5 PM GMT everyday. The updated transactional data is available in data lake after ingestion.</p>",
+      "documentation":"<p>Send the data payload for the event with real-time data for analysis or monitoring. The real-time data events are stored in an Amazon Web Services service before being processed and stored in data lake.</p>",
       "idempotent":true
     },
     "TagResource":{
@@ -422,6 +584,26 @@
       ],
       "documentation":"<p>Enables you to programmatically update an Amazon Web Services Supply Chain data lake dataset. Developers can update the description of a data lake dataset for a given instance ID, namespace, and dataset name.</p>"
     },
+    "UpdateDataLakeNamespace":{
+      "name":"UpdateDataLakeNamespace",
+      "http":{
+        "method":"PATCH",
+        "requestUri":"/api/datalake/instance/{instanceId}/namespaces/{name}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateDataLakeNamespaceRequest"},
+      "output":{"shape":"UpdateDataLakeNamespaceResponse"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ValidationException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Enables you to programmatically update an Amazon Web Services Supply Chain data lake namespace. Developers can update the description of a data lake namespace for a given instance ID and namespace name.</p>"
+    },
     "UpdateInstance":{
       "name":"UpdateInstance",
       "http":{
@@ -646,8 +828,8 @@
           "locationName":"instanceId"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset.</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
           "location":"uri",
           "locationName":"namespace"
         },
@@ -659,12 +841,16 @@
         },
         "schema":{
           "shape":"DataLakeDatasetSchema",
-          "documentation":"<p>The custom schema of the data lake dataset and is only required when the name space is <b>default</b>.</p>"
+          "documentation":"<p>The custom schema of the data lake dataset and required for dataset in <b>default</b> and custom namespaces.</p>"
         },
         "description":{
           "shape":"DataLakeDatasetDescription",
           "documentation":"<p>The description of the dataset.</p>"
         },
+        "partitionSpec":{
+          "shape":"DataLakeDatasetPartitionSpec",
+          "documentation":"<p>The partition specification of the dataset. Partitioning can effectively improve the dataset query performance by reducing the amount of data scanned during query execution. But partitioning or not will affect how data get ingested by data ingestion methods, such as SendDataIntegrationEvent's dataset UPSERT will upsert records within partition (instead of within whole dataset). For more details, refer to those data ingestion documentations.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags of the dataset.</p>"
@@ -683,6 +869,47 @@
       },
       "documentation":"<p>The response parameters of CreateDataLakeDataset.</p>"
     },
+    "CreateDataLakeNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of the namespace. Noted you cannot create namespace with name starting with <b>asc</b>, <b>default</b>, <b>scn</b>, <b>aws</b>, <b>amazon</b>, <b>amzn</b> </p>",
+          "location":"uri",
+          "locationName":"name"
+        },
+        "description":{
+          "shape":"DataLakeNamespaceDescription",
+          "documentation":"<p>The description of the namespace.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The tags of the namespace.</p>"
+        }
+      },
+      "documentation":"<p>The request parameters for CreateDataLakeNamespace.</p>"
+    },
+    "CreateDataLakeNamespaceResponse":{
+      "type":"structure",
+      "required":["namespace"],
+      "members":{
+        "namespace":{
+          "shape":"DataLakeNamespace",
+          "documentation":"<p>The detail of created namespace.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of CreateDataLakeNamespace.</p>"
+    },
     "CreateInstanceRequest":{
       "type":"structure",
       "members":{
@@ -725,17 +952,147 @@
       },
       "documentation":"<p>The response parameters for CreateInstance.</p>"
     },
+    "DataIntegrationDatasetArn":{
+      "type":"string",
+      "max":1011,
+      "min":20,
+      "pattern":"arn:aws:scn:([a-z0-9-]+):([0-9]+):instance/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/namespaces/[^/]+/datasets/[^/]+"
+    },
+    "DataIntegrationEvent":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "eventId",
+        "eventType",
+        "eventGroupId",
+        "eventTimestamp"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The AWS Supply Chain instance identifier.</p>"
+        },
+        "eventId":{
+          "shape":"UUID",
+          "documentation":"<p>The unique event identifier.</p>"
+        },
+        "eventType":{
+          "shape":"DataIntegrationEventType",
+          "documentation":"<p>The data event type.</p>"
+        },
+        "eventGroupId":{
+          "shape":"DataIntegrationEventGroupId",
+          "documentation":"<p>Event identifier (for example, orderId for InboundOrder) used for data sharding or partitioning.</p>"
+        },
+        "eventTimestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The event timestamp (in epoch seconds).</p>"
+        },
+        "datasetTargetDetails":{
+          "shape":"DataIntegrationEventDatasetTargetDetails",
+          "documentation":"<p>The target dataset details for a DATASET event type.</p>"
+        }
+      },
+      "documentation":"<p>The data integration event details.</p>"
+    },
     "DataIntegrationEventData":{
       "type":"string",
       "max":1048576,
       "min":1,
       "sensitive":true
     },
+    "DataIntegrationEventDatasetLoadExecutionDetails":{
+      "type":"structure",
+      "required":["status"],
+      "members":{
+        "status":{
+          "shape":"DataIntegrationEventDatasetLoadStatus",
+          "documentation":"<p>The event load execution status to target dataset.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The failure message (if any) of failed event load execution to dataset.</p>"
+        }
+      },
+      "documentation":"<p>The target dataset load execution details.</p>"
+    },
+    "DataIntegrationEventDatasetLoadStatus":{
+      "type":"string",
+      "enum":[
+        "SUCCEEDED",
+        "IN_PROGRESS",
+        "FAILED"
+      ]
+    },
+    "DataIntegrationEventDatasetOperationType":{
+      "type":"string",
+      "enum":[
+        "APPEND",
+        "UPSERT",
+        "DELETE"
+      ]
+    },
+    "DataIntegrationEventDatasetTargetConfiguration":{
+      "type":"structure",
+      "required":[
+        "datasetIdentifier",
+        "operationType"
+      ],
+      "members":{
+        "datasetIdentifier":{
+          "shape":"DataIntegrationDatasetArn",
+          "documentation":"<p>The datalake dataset ARN identifier.</p>"
+        },
+        "operationType":{
+          "shape":"DataIntegrationEventDatasetOperationType",
+          "documentation":"<p>The target dataset load operation type.</p>"
+        }
+      },
+      "documentation":"<p>The target dataset configuration for a DATASET event type.</p>"
+    },
+    "DataIntegrationEventDatasetTargetDetails":{
+      "type":"structure",
+      "required":[
+        "datasetIdentifier",
+        "operationType",
+        "datasetLoadExecution"
+      ],
+      "members":{
+        "datasetIdentifier":{
+          "shape":"DataIntegrationDatasetArn",
+          "documentation":"<p>The datalake dataset ARN identifier.</p>"
+        },
+        "operationType":{
+          "shape":"DataIntegrationEventDatasetOperationType",
+          "documentation":"<p>The target dataset load operation type. The available options are:</p> <ul> <li> <p> <b>APPEND</b> - Add new records to the dataset. Noted that this operation type will just try to append records as-is without any primary key or partition constraints.</p> </li> <li> <p> <b>UPSERT</b> - Modify existing records in the dataset with primary key configured, events for datasets without primary keys are not allowed. If event data contains primary keys that match records in the dataset within same partition, then those existing records (in that partition) will be updated. If primary keys do not match, new records will be added. Note that if dataset contain records with duplicate primary key values in the same partition, those duplicate records will be deduped into one updated record.</p> </li> <li> <p> <b>DELETE</b> - Remove existing records in the dataset with primary key configured, events for datasets without primary keys are not allowed. If event data contains primary keys that match records in the dataset within same partition, then those existing records (in that partition) will be deleted. If primary keys do not match, no actions will be done. Note that if dataset contain records with duplicate primary key values in the same partition, all those duplicates will be removed.</p> </li> </ul>"
+        },
+        "datasetLoadExecution":{
+          "shape":"DataIntegrationEventDatasetLoadExecutionDetails",
+          "documentation":"<p>The target dataset load execution.</p>"
+        }
+      },
+      "documentation":"<p>The target dataset details for a DATASET event type.</p>"
+    },
     "DataIntegrationEventGroupId":{
       "type":"string",
       "max":255,
       "min":1
     },
+    "DataIntegrationEventList":{
+      "type":"list",
+      "member":{"shape":"DataIntegrationEvent"}
+    },
+    "DataIntegrationEventMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "DataIntegrationEventNextToken":{
+      "type":"string",
+      "max":65535,
+      "min":1
+    },
     "DataIntegrationEventType":{
       "type":"string",
       "enum":[
@@ -753,7 +1110,8 @@
         "scn.data.shipment",
         "scn.data.shipmentstop",
         "scn.data.shipmentstoporder",
-        "scn.data.supplyplan"
+        "scn.data.supplyplan",
+        "scn.data.dataset"
       ]
     },
     "DataIntegrationFlow":{
@@ -804,15 +1162,30 @@
       "members":{
         "loadType":{
           "shape":"DataIntegrationFlowLoadType",
-          "documentation":"<p>The dataset data load type in dataset options.</p>"
+          "documentation":"<p>The target dataset's data load type. This only affects how source S3 files are selected in the S3-to-dataset flow.</p> <ul> <li> <p> <b>REPLACE</b> - Target dataset will get replaced with the new file added under the source s3 prefix.</p> </li> <li> <p> <b>INCREMENTAL</b> - Target dataset will get updated with the up-to-date content under S3 prefix incorporating any file additions or removals there.</p> </li> </ul>"
         },
         "dedupeRecords":{
           "shape":"Boolean",
-          "documentation":"<p>The dataset load option to remove duplicates.</p>"
+          "documentation":"<p>The option to perform deduplication on data records sharing same primary key values. If disabled, transformed data with duplicate primary key values will ingest into dataset, for datasets within <b>asc</b> namespace, such duplicates will cause ingestion fail. If enabled without dedupeStrategy, deduplication is done by retaining a random data record among those sharing the same primary key values. If enabled with dedupeStragtegy, the deduplication is done following the strategy.</p> <p>Note that target dataset may have partition configured, when dedupe is enabled, it only dedupe against primary keys and retain only one record out of those duplicates regardless of its partition status.</p>"
+        },
+        "dedupeStrategy":{
+          "shape":"DataIntegrationFlowDedupeStrategy",
+          "documentation":"<p>The deduplication strategy to dedupe the data records sharing same primary key values of the target dataset. This strategy only applies to target dataset with primary keys and with dedupeRecords option enabled. If transformed data still got duplicates after the dedupeStrategy evaluation, a random data record is chosen to be retained.</p>"
         }
       },
       "documentation":"<p>The dataset options used in dataset source and target configurations.</p>"
     },
+    "DataIntegrationFlowDatasetSource":{
+      "type":"structure",
+      "required":["datasetIdentifier"],
+      "members":{
+        "datasetIdentifier":{
+          "shape":"DataIntegrationDatasetArn",
+          "documentation":"<p>The ARN of the dataset source.</p>"
+        }
+      },
+      "documentation":"<p>The details of a flow execution with dataset source.</p>"
+    },
     "DataIntegrationFlowDatasetSourceConfiguration":{
       "type":"structure",
       "required":["datasetIdentifier"],
@@ -843,6 +1216,176 @@
       },
       "documentation":"<p>The dataset DataIntegrationFlow target configuration parameters.</p>"
     },
+    "DataIntegrationFlowDedupeStrategy":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"DataIntegrationFlowDedupeStrategyType",
+          "documentation":"<p>The type of the deduplication strategy.</p> <ul> <li> <p> <b>FIELD_PRIORITY</b> - Field priority configuration for the deduplication strategy specifies an ordered list of fields used to tie-break the data records sharing the same primary key values. Fields earlier in the list have higher priority for evaluation. For each field, the sort order determines whether to retain data record with larger or smaller field value.</p> </li> </ul>"
+        },
+        "fieldPriority":{
+          "shape":"DataIntegrationFlowFieldPriorityDedupeStrategyConfiguration",
+          "documentation":"<p>The field priority deduplication strategy.</p>"
+        }
+      },
+      "documentation":"<p>The deduplication strategy details.</p>"
+    },
+    "DataIntegrationFlowDedupeStrategyType":{
+      "type":"string",
+      "enum":["FIELD_PRIORITY"]
+    },
+    "DataIntegrationFlowExecution":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "flowName",
+        "executionId"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The flow execution's instanceId.</p>"
+        },
+        "flowName":{
+          "shape":"DataIntegrationFlowName",
+          "documentation":"<p>The flow execution's flowName.</p>"
+        },
+        "executionId":{
+          "shape":"UUID",
+          "documentation":"<p>The flow executionId.</p>"
+        },
+        "status":{
+          "shape":"DataIntegrationFlowExecutionStatus",
+          "documentation":"<p>The status of flow execution.</p>"
+        },
+        "sourceInfo":{
+          "shape":"DataIntegrationFlowExecutionSourceInfo",
+          "documentation":"<p>The source information for a flow execution.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>The failure message (if any) of failed flow execution.</p>"
+        },
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The flow execution start timestamp.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The flow execution end timestamp.</p>"
+        },
+        "outputMetadata":{
+          "shape":"DataIntegrationFlowExecutionOutputMetadata",
+          "documentation":"<p>The flow execution output metadata.</p>"
+        }
+      },
+      "documentation":"<p>The flow execution details.</p>"
+    },
+    "DataIntegrationFlowExecutionDiagnosticReportsRootS3URI":{
+      "type":"string",
+      "pattern":"s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/.{1,1024}"
+    },
+    "DataIntegrationFlowExecutionList":{
+      "type":"list",
+      "member":{"shape":"DataIntegrationFlowExecution"}
+    },
+    "DataIntegrationFlowExecutionMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "DataIntegrationFlowExecutionNextToken":{
+      "type":"string",
+      "max":65535,
+      "min":1
+    },
+    "DataIntegrationFlowExecutionOutputMetadata":{
+      "type":"structure",
+      "members":{
+        "diagnosticReportsRootS3URI":{
+          "shape":"DataIntegrationFlowExecutionDiagnosticReportsRootS3URI",
+          "documentation":"<p>The S3 URI under which all diagnostic files (such as deduped records if any) are stored.</p>"
+        }
+      },
+      "documentation":"<p>The output metadata of the flow execution.</p>"
+    },
+    "DataIntegrationFlowExecutionSourceInfo":{
+      "type":"structure",
+      "required":["sourceType"],
+      "members":{
+        "sourceType":{
+          "shape":"DataIntegrationFlowSourceType",
+          "documentation":"<p>The data integration flow execution source type.</p>"
+        },
+        "s3Source":{
+          "shape":"DataIntegrationFlowS3Source",
+          "documentation":"<p>The source details of a flow execution with S3 source.</p>"
+        },
+        "datasetSource":{
+          "shape":"DataIntegrationFlowDatasetSource",
+          "documentation":"<p>The source details of a flow execution with dataset source.</p>"
+        }
+      },
+      "documentation":"<p>The source information of a flow execution.</p>"
+    },
+    "DataIntegrationFlowExecutionStatus":{
+      "type":"string",
+      "enum":[
+        "SUCCEEDED",
+        "IN_PROGRESS",
+        "FAILED"
+      ]
+    },
+    "DataIntegrationFlowFieldPriorityDedupeField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "sortOrder"
+      ],
+      "members":{
+        "name":{
+          "shape":"DataIntegrationFlowFieldPriorityDedupeFieldName",
+          "documentation":"<p>The name of the deduplication field. Must exist in the dataset and not be a primary key.</p>"
+        },
+        "sortOrder":{
+          "shape":"DataIntegrationFlowFieldPriorityDedupeSortOrder",
+          "documentation":"<p>The sort order for the deduplication field.</p>"
+        }
+      },
+      "documentation":"<p>The field used in the field priority deduplication strategy.</p>"
+    },
+    "DataIntegrationFlowFieldPriorityDedupeFieldList":{
+      "type":"list",
+      "member":{"shape":"DataIntegrationFlowFieldPriorityDedupeField"},
+      "max":10,
+      "min":1
+    },
+    "DataIntegrationFlowFieldPriorityDedupeFieldName":{
+      "type":"string",
+      "max":100,
+      "min":1,
+      "pattern":"[a-z0-9_]+"
+    },
+    "DataIntegrationFlowFieldPriorityDedupeSortOrder":{
+      "type":"string",
+      "enum":[
+        "ASC",
+        "DESC"
+      ]
+    },
+    "DataIntegrationFlowFieldPriorityDedupeStrategyConfiguration":{
+      "type":"structure",
+      "required":["fields"],
+      "members":{
+        "fields":{
+          "shape":"DataIntegrationFlowFieldPriorityDedupeFieldList",
+          "documentation":"<p>The list of field names and their sort order for deduplication, arranged in descending priority from highest to lowest.</p>"
+        }
+      },
+      "documentation":"<p>The field priority deduplication strategy details.</p>"
+    },
     "DataIntegrationFlowFileType":{
       "type":"string",
       "enum":[
@@ -895,6 +1438,24 @@
       "min":0,
       "pattern":"[/A-Za-z0-9._-]+"
     },
+    "DataIntegrationFlowS3Source":{
+      "type":"structure",
+      "required":[
+        "bucketName",
+        "key"
+      ],
+      "members":{
+        "bucketName":{
+          "shape":"S3BucketName",
+          "documentation":"<p>The S3 bucket name of the S3 source.</p>"
+        },
+        "key":{
+          "shape":"DataIntegrationS3ObjectKey",
+          "documentation":"<p>The S3 object key of the S3 source.</p>"
+        }
+      },
+      "documentation":"<p>The details of a flow execution with S3 source.</p>"
+    },
     "DataIntegrationFlowS3SourceConfiguration":{
       "type":"structure",
       "required":[
@@ -908,7 +1469,7 @@
         },
         "prefix":{
           "shape":"DataIntegrationFlowS3Prefix",
-          "documentation":"<p>The prefix of the S3 source objects.</p>"
+          "documentation":"<p>The prefix of the S3 source objects. To trigger data ingestion, S3 files need to be put under <code>s3://<i>bucketName</i>/<i>prefix</i>/</code>.</p>"
         },
         "options":{
           "shape":"DataIntegrationFlowS3Options",
@@ -942,7 +1503,8 @@
     "DataIntegrationFlowSQLQuery":{
       "type":"string",
       "max":65535,
-      "min":1
+      "min":1,
+      "sensitive":true
     },
     "DataIntegrationFlowSQLTransformationConfiguration":{
       "type":"structure",
@@ -1014,7 +1576,7 @@
         },
         "datasetTarget":{
           "shape":"DataIntegrationFlowDatasetTargetConfiguration",
-          "documentation":"<p>The dataset DataIntegrationFlow target.</p>"
+          "documentation":"<p>The dataset DataIntegrationFlow target. Note that for AWS Supply Chain dataset under <b>asc</b> namespace, it has a connection_id internal field that is not allowed to be provided by client directly, they will be auto populated.</p>"
         }
       },
       "documentation":"<p>The DataIntegrationFlow target parameters.</p>"
@@ -1048,6 +1610,12 @@
         "NONE"
       ]
     },
+    "DataIntegrationS3ObjectKey":{
+      "type":"string",
+      "max":1024,
+      "min":1,
+      "pattern":"[/A-Za-z0-9._:*()'!=?&+;@-]+"
+    },
     "DataLakeDataset":{
       "type":"structure",
       "required":[
@@ -1065,12 +1633,12 @@
           "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset. The available values are:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>"
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>"
         },
         "name":{
           "shape":"DataLakeDatasetName",
-          "documentation":"<p>The name of the dataset. For <b>asc</b> name space, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>"
+          "documentation":"<p>The name of the dataset. For <b>asc</b> namespace, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>"
         },
         "arn":{
           "shape":"AscResourceArn",
@@ -1084,6 +1652,7 @@
           "shape":"DataLakeDatasetDescription",
           "documentation":"<p>The description of the dataset.</p>"
         },
+        "partitionSpec":{"shape":"DataLakeDatasetPartitionSpec"},
         "createdTime":{
           "shape":"Timestamp",
           "documentation":"<p>The creation time of the dataset.</p>"
@@ -1104,7 +1673,7 @@
       "type":"list",
       "member":{"shape":"DataLakeDataset"},
       "max":20,
-      "min":1
+      "min":0
     },
     "DataLakeDatasetMaxResults":{
       "type":"integer",
@@ -1118,17 +1687,84 @@
       "min":1,
       "pattern":"[a-z0-9_]+"
     },
-    "DataLakeDatasetNamespace":{
-      "type":"string",
-      "max":50,
-      "min":1,
-      "pattern":"[a-z]+"
-    },
     "DataLakeDatasetNextToken":{
       "type":"string",
       "max":65535,
       "min":1
     },
+    "DataLakeDatasetPartitionField":{
+      "type":"structure",
+      "required":[
+        "name",
+        "transform"
+      ],
+      "members":{
+        "name":{
+          "shape":"DataLakeDatasetSchemaFieldName",
+          "documentation":"<p>The name of the partition field.</p>"
+        },
+        "transform":{
+          "shape":"DataLakeDatasetPartitionFieldTransform",
+          "documentation":"<p>The transformation of the partition field. A transformation specifies how to partition on a given field. For example, with timestamp you can specify that you'd like to partition fields by day, e.g. data record with value 2025-01-03T00:00:00Z in partition field is in 2025-01-03 partition. Also noted that data record without any value in optional partition field is in NULL partition.</p>"
+        }
+      },
+      "documentation":"<p>The detail of the partition field.</p>"
+    },
+    "DataLakeDatasetPartitionFieldList":{
+      "type":"list",
+      "member":{"shape":"DataLakeDatasetPartitionField"},
+      "max":10,
+      "min":1
+    },
+    "DataLakeDatasetPartitionFieldTransform":{
+      "type":"structure",
+      "required":["type"],
+      "members":{
+        "type":{
+          "shape":"DataLakeDatasetPartitionTransformType",
+          "documentation":"<p>The type of partitioning transformation for this field. The available options are:</p> <ul> <li> <p> <b>IDENTITY</b> - Partitions data on a given field by its exact values.</p> </li> <li> <p> <b>YEAR</b> - Partitions data on a timestamp field using year granularity.</p> </li> <li> <p> <b>MONTH</b> - Partitions data on a timestamp field using month granularity.</p> </li> <li> <p> <b>DAY</b> - Partitions data on a timestamp field using day granularity.</p> </li> <li> <p> <b>HOUR</b> - Partitions data on a timestamp field using hour granularity.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The detail of the partition field transformation.</p>"
+    },
+    "DataLakeDatasetPartitionSpec":{
+      "type":"structure",
+      "required":["fields"],
+      "members":{
+        "fields":{
+          "shape":"DataLakeDatasetPartitionFieldList",
+          "documentation":"<p>The fields on which to partition a dataset. The partitions will be applied hierarchically based on the order of this list.</p>"
+        }
+      },
+      "documentation":"<p>The partition specification for a dataset.</p>"
+    },
+    "DataLakeDatasetPartitionTransformType":{
+      "type":"string",
+      "enum":[
+        "YEAR",
+        "MONTH",
+        "DAY",
+        "HOUR",
+        "IDENTITY"
+      ]
+    },
+    "DataLakeDatasetPrimaryKeyField":{
+      "type":"structure",
+      "required":["name"],
+      "members":{
+        "name":{
+          "shape":"DataLakeDatasetSchemaFieldName",
+          "documentation":"<p>The name of the primary key field.</p>"
+        }
+      },
+      "documentation":"<p>The detail of the primary key field.</p>"
+    },
+    "DataLakeDatasetPrimaryKeyFieldList":{
+      "type":"list",
+      "member":{"shape":"DataLakeDatasetPrimaryKeyField"},
+      "max":20,
+      "min":1
+    },
     "DataLakeDatasetSchema":{
       "type":"structure",
       "required":[
@@ -1143,9 +1779,13 @@
         "fields":{
           "shape":"DataLakeDatasetSchemaFieldList",
           "documentation":"<p>The list of field details of the dataset schema.</p>"
+        },
+        "primaryKeys":{
+          "shape":"DataLakeDatasetPrimaryKeyFieldList",
+          "documentation":"<p>The list of primary key fields for the dataset. Primary keys defined can help data ingestion methods to ensure data uniqueness: CreateDataIntegrationFlow's dedupe strategy will leverage primary keys to perform records deduplication before write to dataset; SendDataIntegrationEvent's UPSERT and DELETE can only work with dataset with primary keys. For more details, refer to those data ingestion documentations.</p> <p>Note that defining primary keys does not necessarily mean the dataset cannot have duplicate records, duplicate records can still be ingested if CreateDataIntegrationFlow's dedupe disabled or through SendDataIntegrationEvent's APPEND operation.</p>"
         }
       },
-      "documentation":"<p>The schema details of the dataset.</p>"
+      "documentation":"<p>The schema details of the dataset. Note that for AWS Supply Chain dataset under <b>asc</b> namespace, it may have internal fields like connection_id that will be auto populated by data ingestion methods.</p>"
     },
     "DataLakeDatasetSchemaField":{
       "type":"structure",
@@ -1188,7 +1828,8 @@
         "INT",
         "DOUBLE",
         "STRING",
-        "TIMESTAMP"
+        "TIMESTAMP",
+        "LONG"
       ]
     },
     "DataLakeDatasetSchemaName":{
@@ -1197,6 +1838,71 @@
       "min":1,
       "pattern":"[A-Za-z0-9]+"
     },
+    "DataLakeNamespace":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name",
+        "arn",
+        "createdTime",
+        "lastModifiedTime"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of the namespace.</p>"
+        },
+        "arn":{
+          "shape":"AscResourceArn",
+          "documentation":"<p>The arn of the namespace.</p>"
+        },
+        "description":{
+          "shape":"DataLakeNamespaceDescription",
+          "documentation":"<p>The description of the namespace.</p>"
+        },
+        "createdTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation time of the namespace.</p>"
+        },
+        "lastModifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The last modified time of the namespace.</p>"
+        }
+      },
+      "documentation":"<p>The data lake namespace details.</p>"
+    },
+    "DataLakeNamespaceDescription":{
+      "type":"string",
+      "max":500,
+      "min":1
+    },
+    "DataLakeNamespaceList":{
+      "type":"list",
+      "member":{"shape":"DataLakeNamespace"},
+      "max":20,
+      "min":1
+    },
+    "DataLakeNamespaceMaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":20,
+      "min":1
+    },
+    "DataLakeNamespaceName":{
+      "type":"string",
+      "max":50,
+      "min":1,
+      "pattern":"[a-z0-9_]+"
+    },
+    "DataLakeNamespaceNextToken":{
+      "type":"string",
+      "max":65535,
+      "min":1
+    },
     "DatasetIdentifier":{
       "type":"string",
       "max":1011,
@@ -1258,14 +1964,14 @@
           "locationName":"instanceId"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset. The available values are:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
           "location":"uri",
           "locationName":"namespace"
         },
         "name":{
           "shape":"DataLakeDatasetName",
-          "documentation":"<p>The name of the dataset. For <b>asc</b> name space, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
+          "documentation":"<p>The name of the dataset. For <b>asc</b> namespace, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
           "location":"uri",
           "locationName":"name"
         }
@@ -1285,8 +1991,8 @@
           "documentation":"<p>The AWS Supply Chain instance identifier.</p>"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of deleted dataset.</p>"
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of deleted dataset.</p>"
         },
         "name":{
           "shape":"DataLakeDatasetName",
@@ -1295,6 +2001,46 @@
       },
       "documentation":"<p>The response parameters of DeleteDataLakeDataset.</p>"
     },
+    "DeleteDataLakeNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The AWS Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of the namespace. Noted you cannot delete pre-defined namespace like <b>asc</b>, <b>default</b> which are only deleted through instance deletion.</p>",
+          "location":"uri",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p>The request parameters of DeleteDataLakeNamespace.</p>"
+    },
+    "DeleteDataLakeNamespaceResponse":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The AWS Supply Chain instance identifier.</p>"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of deleted namespace.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of DeleteDataLakeNamespace.</p>"
+    },
     "DeleteInstanceRequest":{
       "type":"structure",
       "required":["instanceId"],
@@ -1356,6 +2102,79 @@
       },
       "documentation":"<p>The response parameters for GetBillOfMaterialsImportJob.</p>"
     },
+    "GetDataIntegrationEventRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "eventId"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "eventId":{
+          "shape":"UUID",
+          "documentation":"<p>The unique event identifier.</p>",
+          "location":"uri",
+          "locationName":"eventId"
+        }
+      },
+      "documentation":"<p>The request parameters for GetDataIntegrationEvent.</p>"
+    },
+    "GetDataIntegrationEventResponse":{
+      "type":"structure",
+      "required":["event"],
+      "members":{
+        "event":{
+          "shape":"DataIntegrationEvent",
+          "documentation":"<p>The details of the DataIntegrationEvent returned.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters for GetDataIntegrationEvent.</p>"
+    },
+    "GetDataIntegrationFlowExecutionRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "flowName",
+        "executionId"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The AWS Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "flowName":{
+          "shape":"DataIntegrationFlowName",
+          "documentation":"<p>The flow name.</p>",
+          "location":"uri",
+          "locationName":"flowName"
+        },
+        "executionId":{
+          "shape":"UUID",
+          "documentation":"<p>The flow execution identifier.</p>",
+          "location":"uri",
+          "locationName":"executionId"
+        }
+      },
+      "documentation":"<p>The request parameters of GetFlowExecution.</p>"
+    },
+    "GetDataIntegrationFlowExecutionResponse":{
+      "type":"structure",
+      "required":["flowExecution"],
+      "members":{
+        "flowExecution":{
+          "shape":"DataIntegrationFlowExecution",
+          "documentation":"<p>The flow execution details.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of GetFlowExecution.</p>"
+    },
     "GetDataIntegrationFlowRequest":{
       "type":"structure",
       "required":[
@@ -1404,14 +2223,14 @@
           "locationName":"instanceId"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset. The available values are:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
           "location":"uri",
           "locationName":"namespace"
         },
         "name":{
           "shape":"DataLakeDatasetName",
-          "documentation":"<p>The name of the dataset. For <b>asc</b> name space, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
+          "documentation":"<p>The name of the dataset. For <b>asc</b> namespace, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
           "location":"uri",
           "locationName":"name"
         }
@@ -1427,7 +2246,40 @@
           "documentation":"<p>The fetched dataset details.</p>"
         }
       },
-      "documentation":"<p>The response parameters for UpdateDataLakeDataset.</p>"
+      "documentation":"<p>The response parameters for GetDataLakeDataset.</p>"
+    },
+    "GetDataLakeNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of the namespace. Besides the namespaces user created, you can also specify the pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - Pre-defined namespace containing Amazon Web Services Supply Chain supported datasets, see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - Pre-defined namespace containing datasets with custom user-defined schemas.</p> </li> </ul>",
+          "location":"uri",
+          "locationName":"name"
+        }
+      },
+      "documentation":"<p>The request parameters for GetDataLakeNamespace.</p>"
+    },
+    "GetDataLakeNamespaceResponse":{
+      "type":"structure",
+      "required":["namespace"],
+      "members":{
+        "namespace":{
+          "shape":"DataLakeNamespace",
+          "documentation":"<p>The fetched namespace details.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters for GetDataLakeNamespace.</p>"
     },
     "GetInstanceRequest":{
       "type":"structure",
@@ -1579,6 +2431,101 @@
       "min":0,
       "pattern":"arn:[a-z0-9][-.a-z0-9]{0,62}:kms:([a-z0-9][-.a-z0-9]{0,62})?:([a-z0-9][-.a-z0-9]{0,62})?:key/.{0,1019}"
     },
+    "ListDataIntegrationEventsRequest":{
+      "type":"structure",
+      "required":["instanceId"],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "eventType":{
+          "shape":"DataIntegrationEventType",
+          "documentation":"<p>List data integration events for the specified eventType.</p>",
+          "location":"querystring",
+          "locationName":"eventType"
+        },
+        "nextToken":{
+          "shape":"DataIntegrationEventNextToken",
+          "documentation":"<p>The pagination token to fetch the next page of the data integration events.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"DataIntegrationEventMaxResults",
+          "documentation":"<p>Specify the maximum number of data integration events to fetch in one paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      },
+      "documentation":"<p>The request parameters for ListDataIntegrationEvents.</p>"
+    },
+    "ListDataIntegrationEventsResponse":{
+      "type":"structure",
+      "required":["events"],
+      "members":{
+        "events":{
+          "shape":"DataIntegrationEventList",
+          "documentation":"<p>The list of data integration events.</p>"
+        },
+        "nextToken":{
+          "shape":"DataIntegrationEventNextToken",
+          "documentation":"<p>The pagination token to fetch the next page of the ListDataIntegrationEvents.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters for ListDataIntegrationEvents.</p>"
+    },
+    "ListDataIntegrationFlowExecutionsRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "flowName"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The AWS Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "flowName":{
+          "shape":"DataIntegrationFlowName",
+          "documentation":"<p>The flow name.</p>",
+          "location":"uri",
+          "locationName":"flowName"
+        },
+        "nextToken":{
+          "shape":"DataIntegrationFlowExecutionNextToken",
+          "documentation":"<p>The pagination token to fetch next page of flow executions.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"DataIntegrationFlowExecutionMaxResults",
+          "documentation":"<p>The number to specify the max number of flow executions to fetch in this paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      },
+      "documentation":"<p>The request parameters of ListFlowExecutions.</p>"
+    },
+    "ListDataIntegrationFlowExecutionsResponse":{
+      "type":"structure",
+      "required":["flowExecutions"],
+      "members":{
+        "flowExecutions":{
+          "shape":"DataIntegrationFlowExecutionList",
+          "documentation":"<p>The list of flow executions.</p>"
+        },
+        "nextToken":{
+          "shape":"DataIntegrationFlowExecutionNextToken",
+          "documentation":"<p>The pagination token to fetch next page of flow executions.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of ListFlowExecutions.</p>"
+    },
     "ListDataIntegrationFlowsRequest":{
       "type":"structure",
       "required":["instanceId"],
@@ -1633,8 +2580,8 @@
           "locationName":"instanceId"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset. The available values are:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
           "location":"uri",
           "locationName":"namespace"
         },
@@ -1668,6 +2615,46 @@
       },
       "documentation":"<p>The response parameters of ListDataLakeDatasets.</p>"
     },
+    "ListDataLakeNamespacesRequest":{
+      "type":"structure",
+      "required":["instanceId"],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Supply Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "nextToken":{
+          "shape":"DataLakeNamespaceNextToken",
+          "documentation":"<p>The pagination token to fetch next page of namespaces.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"DataLakeNamespaceMaxResults",
+          "documentation":"<p>The max number of namespaces to fetch in this paginated request.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        }
+      },
+      "documentation":"<p>The request parameters of ListDataLakeNamespaces.</p>"
+    },
+    "ListDataLakeNamespacesResponse":{
+      "type":"structure",
+      "required":["namespaces"],
+      "members":{
+        "namespaces":{
+          "shape":"DataLakeNamespaceList",
+          "documentation":"<p>The list of fetched namespace details. Noted it only contains custom namespaces, pre-defined namespaces are not included.</p>"
+        },
+        "nextToken":{
+          "shape":"DataLakeNamespaceNextToken",
+          "documentation":"<p>The pagination token to fetch next page of namespaces.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of ListDataLakeNamespaces.</p>"
+    },
     "ListInstancesRequest":{
       "type":"structure",
       "members":{
@@ -1772,24 +2759,28 @@
         },
         "eventType":{
           "shape":"DataIntegrationEventType",
-          "documentation":"<p>The data event type.</p>"
+          "documentation":"<p>The data event type.</p> <ul> <li> <p> <b>scn.data.dataset</b> - Send data directly to any specified dataset.</p> </li> <li> <p> <b>scn.data.supplyplan</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/supply-plan-entity.html\">supply_plan</a> dataset.</p> </li> <li> <p> <b>scn.data.shipmentstoporder</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-shipment-stop-order-entity.html\">shipment_stop_order</a> dataset.</p> </li> <li> <p> <b>scn.data.shipmentstop</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-shipment-stop-entity.html\">shipment_stop</a> dataset.</p> </li> <li> <p> <b>scn.data.shipment</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-shipment-entity.html\">shipment</a> dataset.</p> </li> <li> <p> <b>scn.data.reservation</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/planning-reservation-entity.html\">reservation</a> dataset.</p> </li> <li> <p> <b>scn.data.processproduct</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/operation-process-product-entity.html\">process_product</a> dataset.</p> </li> <li> <p> <b>scn.data.processoperation</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/operation-process-operation-entity.html\">process_operation</a> dataset.</p> </li> <li> <p> <b>scn.data.processheader</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/operation-process-header-entity.html\">process_header</a> dataset.</p> </li> <li> <p> <b>scn.data.forecast</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/forecast-forecast-entity.html\">forecast</a> dataset.</p> </li> <li> <p> <b>scn.data.inventorylevel</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/inventory_mgmnt-inv-level-entity.html\">inv_level</a> dataset.</p> </li> <li> <p> <b>scn.data.inboundorder</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-inbound-order-entity.html\">inbound_order</a> dataset.</p> </li> <li> <p> <b>scn.data.inboundorderline</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-inbound-order-line-entity.html\">inbound_order_line</a> dataset.</p> </li> <li> <p> <b>scn.data.inboundorderlineschedule</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/replenishment-inbound-order-line-schedule-entity.html\">inbound_order_line_schedule</a> dataset.</p> </li> <li> <p> <b>scn.data.outboundorderline</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/outbound-fulfillment-order-line-entity.html\">outbound_order_line</a> dataset.</p> </li> <li> <p> <b>scn.data.outboundshipment</b> - Send data to <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/outbound-fulfillment-shipment-entity.html\">outbound_shipment</a> dataset.</p> </li> </ul>"
         },
         "data":{
           "shape":"DataIntegrationEventData",
-          "documentation":"<p>The data payload of the event. For more information on the data schema to use, see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">Data entities supported in AWS Supply Chain</a>.</p>"
+          "documentation":"<p>The data payload of the event, should follow the data schema of the target dataset, or see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">Data entities supported in AWS Supply Chain</a>. To send single data record, use JsonObject format; to send multiple data records, use JsonArray format.</p> <p>Note that for AWS Supply Chain dataset under <b>asc</b> namespace, it has a connection_id internal field that is not allowed to be provided by client directly, they will be auto populated.</p>"
         },
         "eventGroupId":{
           "shape":"DataIntegrationEventGroupId",
-          "documentation":"<p>Event identifier (for example, orderId for InboundOrder) used for data sharing or partitioning.</p>"
+          "documentation":"<p>Event identifier (for example, orderId for InboundOrder) used for data sharding or partitioning. Noted under one eventGroupId of same eventType and instanceId, events are processed sequentially in the order they are received by the server.</p>"
         },
         "eventTimestamp":{
           "shape":"SyntheticTimestamp_epoch_seconds",
-          "documentation":"<p>The event timestamp (in epoch seconds).</p>"
+          "documentation":"<p>The timestamp (in epoch seconds) associated with the event. If not provided, it will be assigned with current timestamp.</p>"
         },
         "clientToken":{
           "shape":"ClientToken",
-          "documentation":"<p>The idempotent client token.</p>",
+          "documentation":"<p>The idempotent client token. The token is active for 8 hours, and within its lifetime, it ensures the request completes only once upon retry with same client token. If omitted, the AWS SDK generates a unique value so that AWS SDK can safely retry the request upon network errors.</p>",
           "idempotencyToken":true
+        },
+        "datasetTarget":{
+          "shape":"DataIntegrationEventDatasetTargetConfiguration",
+          "documentation":"<p>The target dataset configuration for <b>scn.data.dataset</b> event type.</p>"
         }
       },
       "documentation":"<p>The request parameters for SendDataIntegrationEvent.</p>"
@@ -1979,14 +2970,14 @@
           "locationName":"instanceId"
         },
         "namespace":{
-          "shape":"DataLakeDatasetNamespace",
-          "documentation":"<p>The name space of the dataset. The available values are:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The namespace of the dataset, besides the custom defined namespace, every instance comes with below pre-defined namespaces:</p> <ul> <li> <p> <b>asc</b> - For information on the Amazon Web Services Supply Chain supported datasets see <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p> </li> <li> <p> <b>default</b> - For datasets with custom user-defined schemas.</p> </li> </ul>",
           "location":"uri",
           "locationName":"namespace"
         },
         "name":{
           "shape":"DataLakeDatasetName",
-          "documentation":"<p>The name of the dataset. For <b>asc</b> name space, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
+          "documentation":"<p>The name of the dataset. For <b>asc</b> namespace, the name must be one of the supported data entities under <a href=\"https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html\">https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/data-model-asc.html</a>.</p>",
           "location":"uri",
           "locationName":"name"
         },
@@ -2008,6 +2999,43 @@
       },
       "documentation":"<p>The response parameters of UpdateDataLakeDataset.</p>"
     },
+    "UpdateDataLakeNamespaceRequest":{
+      "type":"structure",
+      "required":[
+        "instanceId",
+        "name"
+      ],
+      "members":{
+        "instanceId":{
+          "shape":"UUID",
+          "documentation":"<p>The Amazon Web Services Chain instance identifier.</p>",
+          "location":"uri",
+          "locationName":"instanceId"
+        },
+        "name":{
+          "shape":"DataLakeNamespaceName",
+          "documentation":"<p>The name of the namespace. Noted you cannot update namespace with name starting with <b>asc</b>, <b>default</b>, <b>scn</b>, <b>aws</b>, <b>amazon</b>, <b>amzn</b> </p>",
+          "location":"uri",
+          "locationName":"name"
+        },
+        "description":{
+          "shape":"DataLakeNamespaceDescription",
+          "documentation":"<p>The updated description of the data lake namespace.</p>"
+        }
+      },
+      "documentation":"<p>The request parameters of UpdateDataLakeNamespace.</p>"
+    },
+    "UpdateDataLakeNamespaceResponse":{
+      "type":"structure",
+      "required":["namespace"],
+      "members":{
+        "namespace":{
+          "shape":"DataLakeNamespace",
+          "documentation":"<p>The updated namespace details.</p>"
+        }
+      },
+      "documentation":"<p>The response parameters of UpdateDataLakeNamespace.</p>"
+    },
     "UpdateInstanceRequest":{
       "type":"structure",
       "required":["instanceId"],
diff -pruN 2.23.6-1/awscli/botocore/data/support/2013-04-15/service-2.json 2.31.35-1/awscli/botocore/data/support/2013-04-15/service-2.json
--- 2.23.6-1/awscli/botocore/data/support/2013-04-15/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/support/2013-04-15/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1440,5 +1440,5 @@
       "min":0
     }
   },
-  "documentation":"<fullname>Amazon Web Services Support</fullname> <p>The <i>Amazon Web Services Support API Reference</i> is intended for programmers who need detailed information about the Amazon Web Services Support operations and data types. You can use the API to manage your support cases programmatically. The Amazon Web Services Support API uses HTTP methods that return results in JSON format.</p> <note> <ul> <li> <p>You must have a Business, Enterprise On-Ramp, or Enterprise Support plan to use the Amazon Web Services Support API. </p> </li> <li> <p>If you call the Amazon Web Services Support API from an account that doesn't have a Business, Enterprise On-Ramp, or Enterprise Support plan, the <code>SubscriptionRequiredException</code> error message appears. For information about changing your support plan, see <a href=\"http://aws.amazon.com/premiumsupport/\">Amazon Web Services Support</a>.</p> </li> </ul> </note> <p>You can also use the Amazon Web Services Support API to access features for <a href=\"http://aws.amazon.com/premiumsupport/trustedadvisor/\">Trusted Advisor</a>. You can return a list of checks and their descriptions, get check results, specify checks to refresh, and get the refresh status of checks.</p> <p>You can manage your support cases with the following Amazon Web Services Support API operations:</p> <ul> <li> <p>The <a>CreateCase</a>, <a>DescribeCases</a>, <a>DescribeAttachment</a>, and <a>ResolveCase</a> operations create Amazon Web Services Support cases, retrieve information about cases, and resolve cases.</p> </li> <li> <p>The <a>DescribeCommunications</a>, <a>AddCommunicationToCase</a>, and <a>AddAttachmentsToSet</a> operations retrieve and add communications and attachments to Amazon Web Services Support cases.</p> </li> <li> <p>The <a>DescribeServices</a> and <a>DescribeSeverityLevels</a> operations return Amazon Web Service names, service codes, service categories, and problem severity levels. You use these values when you call the <a>CreateCase</a> operation.</p> </li> </ul> <p>You can also use the Amazon Web Services Support API to call the Trusted Advisor operations. For more information, see <a href=\"https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor.html\">Trusted Advisor</a> in the <i>Amazon Web Services Support User Guide</i>.</p> <p>For authentication of requests, Amazon Web Services Support uses <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a>.</p> <p>For more information about this service and the endpoints to use, see <a href=\"https://docs.aws.amazon.com/awssupport/latest/user/about-support-api.html\">About the Amazon Web Services Support API</a> in the <i>Amazon Web Services Support User Guide</i>.</p>"
+  "documentation":"<fullname>Amazon Web Services Support</fullname> <p>The <i>Amazon Web Services Support API Reference</i> is intended for programmers who need detailed information about the Amazon Web Services Support operations and data types. You can use the API to manage your support cases programmatically. The Amazon Web Services Support API uses HTTP methods that return results in JSON format.</p> <note> <ul> <li> <p>You must have a Business, Enterprise On-Ramp, or Enterprise Support plan to use the Amazon Web Services Support API. </p> </li> <li> <p>If you call the Amazon Web Services Support API from an account that doesn't have a Business, Enterprise On-Ramp, or Enterprise Support plan, the <code>SubscriptionRequiredException</code> error message appears. For information about changing your support plan, see <a href=\"http://aws.amazon.com/premiumsupport/\">Amazon Web Services Support</a>.</p> </li> </ul> </note> <p>You can also use the Amazon Web Services Support API to access features for <a href=\"http://aws.amazon.com/premiumsupport/trustedadvisor/\">Trusted Advisor</a>. You can return a list of checks and their descriptions, get check results, specify checks to refresh, and get the refresh status of checks.</p> <p>You can manage your support cases with the following Amazon Web Services Support API operations:</p> <ul> <li> <p>The <a>CreateCase</a>, <a>DescribeCases</a>, <a>DescribeAttachment</a>, and <a>ResolveCase</a> operations create Amazon Web Services Support cases, retrieve information about cases, and resolve cases.</p> </li> <li> <p>The <a>DescribeCommunications</a>, <a>AddCommunicationToCase</a>, and <a>AddAttachmentsToSet</a> operations retrieve and add communications and attachments to Amazon Web Services Support cases.</p> </li> <li> <p>The <a>DescribeServices</a> and <a>DescribeSeverityLevels</a> operations return Amazon Web Services service names, service codes, service categories, and problem severity levels. You use these values when you call the <a>CreateCase</a> operation.</p> </li> </ul> <p>You can also use the Amazon Web Services Support API to call the Trusted Advisor operations. For more information, see <a href=\"https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor.html\">Trusted Advisor</a> in the <i>Amazon Web Services Support User Guide</i>.</p> <p>For authentication of requests, Amazon Web Services Support uses <a href=\"https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html\">Signature Version 4 Signing Process</a>.</p> <p>For more information about this service and the endpoints to use, see <a href=\"https://docs.aws.amazon.com/awssupport/latest/user/about-support-api.html\">About the Amazon Web Services Support API</a> in the <i>Amazon Web Services Support User Guide</i>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/support-app/2021-08-20/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/swf/2012-01-25/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,31 @@
 {
     "version": "1.0",
     "parameters": {
-        "Region": {
-            "builtIn": "AWS::Region",
-            "required": false,
-            "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
-        },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
         }
     },
     "rules": [
@@ -57,161 +57,170 @@
                     "type": "error"
                 },
                 {
-                    "conditions": [
+                    "conditions": [],
+                    "rules": [
                         {
-                            "fn": "booleanEquals",
-                            "argv": [
+                            "conditions": [
                                 {
-                                    "ref": "UseDualStack"
+                                    "fn": "booleanEquals",
+                                    "argv": [
+                                        {
+                                            "ref": "UseDualStack"
+                                        },
+                                        true
+                                    ]
+                                }
+                            ],
+                            "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
+                            "type": "error"
+                        },
+                        {
+                            "conditions": [],
+                            "endpoint": {
+                                "url": {
+                                    "ref": "Endpoint"
                                 },
-                                true
-                            ]
+                                "properties": {},
+                                "headers": {}
+                            },
+                            "type": "endpoint"
                         }
                     ],
-                    "error": "Invalid Configuration: Dualstack and custom endpoint are not supported",
-                    "type": "error"
-                },
-                {
-                    "conditions": [],
-                    "endpoint": {
-                        "url": {
-                            "ref": "Endpoint"
-                        },
-                        "properties": {},
-                        "headers": {}
-                    },
-                    "type": "endpoint"
+                    "type": "tree"
                 }
             ],
             "type": "tree"
         },
         {
-            "conditions": [
-                {
-                    "fn": "isSet",
-                    "argv": [
-                        {
-                            "ref": "Region"
-                        }
-                    ]
-                }
-            ],
+            "conditions": [],
             "rules": [
                 {
                     "conditions": [
                         {
-                            "fn": "aws.partition",
+                            "fn": "isSet",
                             "argv": [
                                 {
                                     "ref": "Region"
                                 }
-                            ],
-                            "assign": "PartitionResult"
+                            ]
                         }
                     ],
                     "rules": [
                         {
                             "conditions": [
                                 {
-                                    "fn": "booleanEquals",
-                                    "argv": [
-                                        {
-                                            "ref": "UseFIPS"
-                                        },
-                                        true
-                                    ]
-                                },
-                                {
-                                    "fn": "booleanEquals",
+                                    "fn": "aws.partition",
                                     "argv": [
                                         {
-                                            "ref": "UseDualStack"
-                                        },
-                                        true
-                                    ]
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
                                 }
                             ],
                             "rules": [
                                 {
                                     "conditions": [
                                         {
-                                            "fn": "booleanEquals",
+                                            "fn": "stringEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsFIPS"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
                                             ]
                                         },
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://swf.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "stringEquals",
+                                            "argv": [
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
                                                         {
                                                             "ref": "PartitionResult"
                                                         },
-                                                        "supportsDualStack"
+                                                        "name"
                                                     ]
-                                                }
+                                                },
+                                                "aws-us-gov"
                                             ]
-                                        }
-                                    ],
-                                    "rules": [
+                                        },
                                         {
-                                            "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://swf-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
+                                            ]
                                         }
                                     ],
-                                    "type": "tree"
+                                    "endpoint": {
+                                        "url": "https://swf-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseFIPS"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
                                                 {
-                                                    "fn": "getAttr",
-                                                    "argv": [
-                                                        {
-                                                            "ref": "PartitionResult"
-                                                        },
-                                                        "supportsFIPS"
-                                                    ]
+                                                    "ref": "UseDualStack"
                                                 },
                                                 true
                                             ]
@@ -221,119 +230,201 @@
                                         {
                                             "conditions": [
                                                 {
-                                                    "fn": "stringEquals",
+                                                    "fn": "booleanEquals",
                                                     "argv": [
+                                                        true,
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
                                                                 {
                                                                     "ref": "PartitionResult"
                                                                 },
-                                                                "name"
+                                                                "supportsFIPS"
                                                             ]
-                                                        },
-                                                        "aws-us-gov"
+                                                        }
+                                                    ]
+                                                },
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
                                                     ]
                                                 }
                                             ],
-                                            "endpoint": {
-                                                "url": "https://swf.{Region}.amazonaws.com",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://swf-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
                                         },
                                         {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://swf-fips.{Region}.{PartitionResult#dnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
-                                    "conditions": [],
-                                    "error": "FIPS is enabled but this partition does not support FIPS",
-                                    "type": "error"
-                                }
-                            ],
-                            "type": "tree"
-                        },
-                        {
-                            "conditions": [
-                                {
-                                    "fn": "booleanEquals",
-                                    "argv": [
+                                    "conditions": [
                                         {
-                                            "ref": "UseDualStack"
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
                                         },
-                                        true
-                                    ]
-                                }
-                            ],
-                            "rules": [
-                                {
-                                    "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
-                                                    "fn": "getAttr",
+                                                    "ref": "UseDualStack"
+                                                },
+                                                false
+                                            ]
+                                        }
+                                    ],
+                                    "rules": [
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
                                                     "argv": [
                                                         {
-                                                            "ref": "PartitionResult"
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsFIPS"
+                                                            ]
                                                         },
-                                                        "supportsDualStack"
+                                                        true
                                                     ]
                                                 }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://swf-fips.{Region}.{PartitionResult#dnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
+                                            "conditions": [],
+                                            "error": "FIPS is enabled but this partition does not support FIPS",
+                                            "type": "error"
+                                        }
+                                    ],
+                                    "type": "tree"
+                                },
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                false
+                                            ]
+                                        },
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseDualStack"
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "booleanEquals",
+                                                    "argv": [
+                                                        true,
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "supportsDualStack"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "rules": [
+                                                {
+                                                    "conditions": [],
+                                                    "endpoint": {
+                                                        "url": "https://swf.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                                        "properties": {},
+                                                        "headers": {}
+                                                    },
+                                                    "type": "endpoint"
+                                                }
+                                            ],
+                                            "type": "tree"
+                                        },
+                                        {
                                             "conditions": [],
-                                            "endpoint": {
-                                                "url": "https://swf.{Region}.{PartitionResult#dualStackDnsSuffix}",
-                                                "properties": {},
-                                                "headers": {}
-                                            },
-                                            "type": "endpoint"
+                                            "error": "DualStack is enabled but this partition does not support DualStack",
+                                            "type": "error"
                                         }
                                     ],
                                     "type": "tree"
                                 },
                                 {
                                     "conditions": [],
-                                    "error": "DualStack is enabled but this partition does not support DualStack",
-                                    "type": "error"
+                                    "endpoint": {
+                                        "url": "https://swf.{Region}.{PartitionResult#dnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
                                 }
                             ],
                             "type": "tree"
-                        },
-                        {
-                            "conditions": [],
-                            "endpoint": {
-                                "url": "https://swf.{Region}.{PartitionResult#dnsSuffix}",
-                                "properties": {},
-                                "headers": {}
-                            },
-                            "type": "endpoint"
                         }
                     ],
                     "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
                 }
             ],
             "type": "tree"
-        },
-        {
-            "conditions": [],
-            "error": "Invalid Configuration: Missing Region",
-            "type": "error"
         }
     ]
 }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/synthetics/2017-10-11/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/synthetics/2017-10-11/service-2.json 2.31.35-1/awscli/botocore/data/synthetics/2017-10-11/service-2.json
--- 2.23.6-1/awscli/botocore/data/synthetics/2017-10-11/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/synthetics/2017-10-11/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -276,6 +276,23 @@
       ],
       "documentation":"<p>Use this operation to run a canary that has already been created. The frequency of the canary runs is determined by the value of the canary's <code>Schedule</code>. To see a canary's schedule, use <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanary.html\">GetCanary</a>.</p>"
     },
+    "StartCanaryDryRun":{
+      "name":"StartCanaryDryRun",
+      "http":{
+        "method":"POST",
+        "requestUri":"/canary/{name}/dry-run/start"
+      },
+      "input":{"shape":"StartCanaryDryRunRequest"},
+      "output":{"shape":"StartCanaryDryRunResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ValidationException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ConflictException"},
+        {"shape":"AccessDeniedException"}
+      ],
+      "documentation":"<p>Use this operation to start a dry run for a canary that has already been created</p>"
+    },
     "StopCanary":{
       "name":"StopCanary",
       "http":{
@@ -339,12 +356,22 @@
         {"shape":"ValidationException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
-        {"shape":"RequestEntityTooLargeException"}
+        {"shape":"RequestEntityTooLargeException"},
+        {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Updates the configuration of a canary that has already been created.</p> <p>You can't use this operation to update the tags of an existing canary. To change the tags of an existing canary, use <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_TagResource.html\">TagResource</a>.</p>"
+      "documentation":"<p>Updates the configuration of a canary that has already been created.</p> <p>For multibrowser canaries, you can add or remove browsers by updating the browserConfig list in the update call. For example:</p> <ul> <li> <p>To add Firefox to a canary that currently uses Chrome, specify browserConfigs as [CHROME, FIREFOX]</p> </li> <li> <p>To remove Firefox and keep only Chrome, specify browserConfigs as [CHROME]</p> </li> </ul> <p>You can't use this operation to update the tags of an existing canary. To change the tags of an existing canary, use <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_TagResource.html\">TagResource</a>.</p> <note> <p>When you use the <code>dryRunId</code> field when updating a canary, the only other field you can provide is the <code>Schedule</code>. Adding any other field will thrown an exception.</p> </note>"
     }
   },
   "shapes":{
+    "AccessDeniedException":{
+      "type":"structure",
+      "members":{
+        "Message":{"shape":"ErrorMessage"}
+      },
+      "documentation":"<p>You don't have permission to perform this operation on this resource.</p>",
+      "error":{"httpStatusCode":403},
+      "exception":true
+    },
     "ArtifactConfigInput":{
       "type":"structure",
       "members":{
@@ -386,8 +413,7 @@
     },
     "AssociateResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "BadRequestException":{
       "type":"structure",
@@ -432,6 +458,41 @@
       "max":10000000,
       "min":1
     },
+    "BlueprintType":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"[0-9a-zA-Z_\\-\\.]+"
+    },
+    "BlueprintTypes":{
+      "type":"list",
+      "member":{"shape":"BlueprintType"},
+      "max":1,
+      "min":0
+    },
+    "BrowserConfig":{
+      "type":"structure",
+      "members":{
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The browser type associated with this browser configuration.</p>"
+        }
+      },
+      "documentation":"<p>A structure that specifies the browser type to use for a canary run.</p>"
+    },
+    "BrowserConfigs":{
+      "type":"list",
+      "member":{"shape":"BrowserConfig"},
+      "max":2,
+      "min":1
+    },
+    "BrowserType":{
+      "type":"string",
+      "enum":[
+        "CHROME",
+        "FIREFOX"
+      ]
+    },
     "Canaries":{
       "type":"list",
       "member":{"shape":"Canary"}
@@ -463,11 +524,11 @@
         "RunConfig":{"shape":"CanaryRunConfigOutput"},
         "SuccessRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about successful runs of this canary.</p>"
+          "documentation":"<p>The number of days to retain data about successful runs of this canary.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "FailureRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about failed runs of this canary.</p>"
+          "documentation":"<p>The number of days to retain data about failed runs of this canary.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "Status":{
           "shape":"CanaryStatus",
@@ -498,6 +559,18 @@
           "shape":"ProvisionedResourceCleanupSetting",
           "documentation":"<p>Specifies whether to also delete the Lambda functions and layers used by this canary when the canary is deleted. If it is <code>AUTOMATIC</code>, the Lambda functions and layers will be deleted when the canary is deleted.</p> <p>If the value of this parameter is <code>OFF</code>, then the value of the <code>DeleteLambda</code> parameter of the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DeleteCanary.html\">DeleteCanary</a> operation determines whether the Lambda functions and layers will be deleted.</p>"
         },
+        "BrowserConfigs":{
+          "shape":"BrowserConfigs",
+          "documentation":"<p>A structure that specifies the browser type to use for a canary run. CloudWatch Synthetics supports running canaries on both <code>CHROME</code> and <code>FIREFOX</code> browsers.</p> <note> <p>If not specified, <code>browserConfigs</code> defaults to Chrome.</p> </note>"
+        },
+        "EngineConfigs":{
+          "shape":"EngineConfigs",
+          "documentation":"<p>A list of engine configurations for the canary, one for each browser type that the canary is configured to run on.</p> <p>All runtime versions <code>syn-nodejs-puppeteer-11.0</code> and above, and <code>syn-nodejs-playwright-3.0</code> and above, use <code>engineConfigs</code> only. You can no longer use <code>engineArn</code> in these versions.</p> <p>Runtime versions older than <code>syn-nodejs-puppeteer-11.0</code> and <code>syn-nodejs-playwright-3.0</code> continue to support <code>engineArn</code> to ensure backward compatibility.</p>"
+        },
+        "VisualReferences":{
+          "shape":"VisualReferencesOutput",
+          "documentation":"<p>A list of visual reference configurations for the canary, one for each browser type that the canary is configured to run on. Visual references are used for visual monitoring comparisons.</p> <p> <code>syn-nodejs-puppeteer-11.0</code> and above, and <code>syn-nodejs-playwright-3.0</code> and above, only supports <code>visualReferences</code>. <code>visualReference</code> field is not supported.</p> <p>Versions older than <code>syn-nodejs-puppeteer-11.0</code> supports both <code>visualReference</code> and <code>visualReferences</code> for backward compatibility. It is recommended to use <code>visualReferences</code> for consistency and future compatibility.</p>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>The list of key-value pairs that are associated with the canary.</p>"
@@ -505,6 +578,10 @@
         "ArtifactConfig":{
           "shape":"ArtifactConfigOutput",
           "documentation":"<p>A structure that contains the configuration for canary artifacts, including the encryption-at-rest settings for artifacts that the canary uploads to Amazon S3.</p>"
+        },
+        "DryRunConfig":{
+          "shape":"DryRunConfigOutput",
+          "documentation":"<p>Returns the dry run configurations for a canary.</p>"
         }
       },
       "documentation":"<p>This structure contains all information about one canary in your account.</p>"
@@ -517,30 +594,37 @@
     },
     "CanaryCodeInput":{
       "type":"structure",
-      "required":["Handler"],
       "members":{
         "S3Bucket":{
           "shape":"String",
-          "documentation":"<p>If your canary script is located in S3, specify the bucket name here. Do not include <code>s3://</code> as the start of the bucket name.</p>"
+          "documentation":"<p>If your canary script is located in Amazon S3, specify the bucket name here. Do not include <code>s3://</code> as the start of the bucket name.</p>"
         },
         "S3Key":{
           "shape":"String",
-          "documentation":"<p>The S3 key of your script. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html\">Working with Amazon S3 Objects</a>.</p>"
+          "documentation":"<p>The Amazon S3 key of your script. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingObjects.html\">Working with Amazon S3 Objects</a>.</p>"
         },
         "S3Version":{
           "shape":"String",
-          "documentation":"<p>The S3 version ID of your script.</p>"
+          "documentation":"<p>The Amazon S3 version ID of your script.</p>"
         },
         "ZipFile":{
           "shape":"Blob",
-          "documentation":"<p>If you input your canary script directly into the canary instead of referring to an S3 location, the value of this parameter is the base64-encoded contents of the .zip file that contains the script. It must be smaller than 225 Kb.</p> <p>For large canary scripts, we recommend that you use an S3 location instead of inputting it directly with this parameter.</p>"
+          "documentation":"<p>If you input your canary script directly into the canary instead of referring to an Amazon S3 location, the value of this parameter is the base64-encoded contents of the .zip file that contains the script. It must be smaller than 225 Kb.</p> <p>For large canary scripts, we recommend that you use an Amazon S3 location instead of inputting it directly with this parameter.</p>"
         },
         "Handler":{
           "shape":"CodeHandler",
-          "documentation":"<p>The entry point to use for the source code when running the canary. For canaries that use the <code>syn-python-selenium-1.0</code> runtime or a <code>syn-nodejs.puppeteer</code> runtime earlier than <code>syn-nodejs.puppeteer-3.4</code>, the handler must be specified as <code> <i>fileName</i>.handler</code>. For <code>syn-python-selenium-1.1</code>, <code>syn-nodejs.puppeteer-3.4</code>, and later runtimes, the handler can be specified as <code> <i>fileName</i>.<i>functionName</i> </code>, or you can specify a folder where canary scripts reside as <code> <i>folder</i>/<i>fileName</i>.<i>functionName</i> </code>.</p>"
+          "documentation":"<p>The entry point to use for the source code when running the canary. For canaries that use the <code>syn-python-selenium-1.0</code> runtime or a <code>syn-nodejs.puppeteer</code> runtime earlier than <code>syn-nodejs.puppeteer-3.4</code>, the handler must be specified as <code> <i>fileName</i>.handler</code>. For <code>syn-python-selenium-1.1</code>, <code>syn-nodejs.puppeteer-3.4</code>, and later runtimes, the handler can be specified as <code> <i>fileName</i>.<i>functionName</i> </code>, or you can specify a folder where canary scripts reside as <code> <i>folder</i>/<i>fileName</i>.<i>functionName</i> </code>.</p> <p>This field is required when you don't specify <code>BlueprintTypes</code> and is not allowed when you specify <code>BlueprintTypes</code>.</p>"
+        },
+        "BlueprintTypes":{
+          "shape":"BlueprintTypes",
+          "documentation":"<p> <code>BlueprintTypes</code> is a list of templates that enable simplified canary creation. You can create canaries for common monitoring scenarios by providing only a JSON configuration file instead of writing custom scripts. The only supported value is <code>multi-checks</code>.</p> <p>Multi-checks monitors HTTP/DNS/SSL/TCP endpoints with built-in authentication schemes (Basic, API Key, OAuth, SigV4) and assertion capabilities. When you specify <code>BlueprintTypes</code>, the Handler field cannot be specified since the blueprint provides a pre-defined entry point.</p> <p> <code>BlueprintTypes</code> is supported only on canaries for syn-nodejs-3.0 runtime or later.</p>"
+        },
+        "Dependencies":{
+          "shape":"Dependencies",
+          "documentation":"<p>A list of dependencies that should be used for running this canary. Specify the dependencies as a key-value pair, where the key is the type of dependency and the value is the dependency reference.</p>"
         }
       },
-      "documentation":"<p>Use this structure to input your script code for the canary. This structure contains the Lambda handler with the location where the canary should start running the script. If the script is stored in an S3 bucket, the bucket name, key, and version are also included. If the script was passed into the canary directly, the script code is contained in the value of <code>Zipfile</code>. </p> <p>If you are uploading your canary scripts with an Amazon S3 bucket, your zip file should include your script in a certain folder structure.</p> <ul> <li> <p>For Node.js canaries, the folder structure must be <code>nodejs/node_modules/<i>myCanaryFilename.js</i> </code> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs.html#CloudWatch_Synthetics_Canaries_package\">Packaging your Node.js canary files</a> </p> </li> <li> <p>For Python canaries, the folder structure must be <code>python/<i>myCanaryFilename.p</i> </code> or <code>python/<i>myFolder/myCanaryFilename.py</i> </code> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary_Python.html#CloudWatch_Synthetics_Canaries_WritingCanary_Python_package\">Packaging your Python canary files</a> </p> </li> </ul>"
+      "documentation":"<p>Use this structure to input your script code for the canary. This structure contains the Lambda handler with the location where the canary should start running the script. If the script is stored in an Amazon S3 bucket, the bucket name, key, and version are also included. If the script was passed into the canary directly, the script code is contained in the value of <code>Zipfile</code>. </p> <p>If you are uploading your canary scripts with an Amazon S3 bucket, your zip file should include your script in a certain folder structure.</p> <ul> <li> <p>For Node.js canaries, the folder structure must be <code>nodejs/node_modules/<i>myCanaryFilename.js</i> </code> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs.html#CloudWatch_Synthetics_Canaries_package\">Packaging your Node.js canary files</a> </p> </li> <li> <p>For Python canaries, the folder structure must be <code>python/<i>myCanaryFilename.py</i> </code> or <code>python/<i>myFolder/myCanaryFilename.py</i> </code> For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary_Python.html#CloudWatch_Synthetics_Canaries_WritingCanary_Python_package\">Packaging your Python canary files</a> </p> </li> </ul>"
     },
     "CanaryCodeOutput":{
       "type":"structure",
@@ -551,11 +635,29 @@
         },
         "Handler":{
           "shape":"String",
-          "documentation":"<p>The entry point to use for the source code when running the canary.</p>"
+          "documentation":"<p>The entry point to use for the source code when running the canary.</p> <p>This field is required when you don't specify <code>BlueprintTypes</code> and is not allowed when you specify <code>BlueprintTypes</code>.</p>"
+        },
+        "BlueprintTypes":{
+          "shape":"BlueprintTypes",
+          "documentation":"<p> <code>BlueprintTypes</code> is a list of templates that enable simplified canary creation. You can create canaries for common monitoring scenarios by providing only a JSON configuration file instead of writing custom scripts. The only supported value is <code>multi-checks</code>.</p> <p>Multi-checks monitors HTTP/DNS/SSL/TCP endpoints with built-in authentication schemes (Basic, API Key, OAuth, SigV4) and assertion capabilities. When you specify <code>BlueprintTypes</code>, the Handler field cannot be specified since the blueprint provides a pre-defined entry point.</p> <p> <code>BlueprintTypes</code> is supported only on canaries for syn-nodejs-3.0 runtime or later.</p>"
+        },
+        "Dependencies":{
+          "shape":"Dependencies",
+          "documentation":"<p>A list of dependencies that are used for running this canary. The dependencies are specified as a key-value pair, where the key is the type of dependency and the value is the dependency reference.</p>"
         }
       },
       "documentation":"<p>This structure contains information about the canary's Lambda handler and where its code is stored by CloudWatch Synthetics.</p>"
     },
+    "CanaryDryRunConfigOutput":{
+      "type":"structure",
+      "members":{
+        "DryRunId":{
+          "shape":"UUID",
+          "documentation":"<p>The DryRunId associated with an existing canary’s dry run. You can use this DryRunId to retrieve information about the dry run.</p>"
+        }
+      },
+      "documentation":"<p>Returns the dry run configurations set for a canary.</p>"
+    },
     "CanaryLastRun":{
       "type":"structure",
       "members":{
@@ -583,6 +685,14 @@
           "shape":"UUID",
           "documentation":"<p>A unique ID that identifies this canary run.</p>"
         },
+        "ScheduledRunId":{
+          "shape":"UUID",
+          "documentation":"<p>The ID of the scheduled canary run.</p>"
+        },
+        "RetryAttempt":{
+          "shape":"RetryAttempt",
+          "documentation":"<p>The count in number of the retry attempt.</p>"
+        },
         "Name":{
           "shape":"CanaryName",
           "documentation":"<p>The name of the canary.</p>"
@@ -598,6 +708,14 @@
         "ArtifactS3Location":{
           "shape":"String",
           "documentation":"<p>The location where the canary stored artifacts from the run. Artifacts include the log file, screenshots, and HAR files.</p>"
+        },
+        "DryRunConfig":{
+          "shape":"CanaryDryRunConfigOutput",
+          "documentation":"<p>Returns the dry run configurations for a canary.</p>"
+        },
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The browser type associated with this canary run.</p>"
         }
       },
       "documentation":"<p>This structure contains the details about one run of one canary.</p>"
@@ -619,7 +737,11 @@
         },
         "EnvironmentVariables":{
           "shape":"EnvironmentVariablesMap",
-          "documentation":"<p>Specifies the keys and values to use for any environment variables used in the canary script. Use the following format:</p> <p>{ \"key1\" : \"value1\", \"key2\" : \"value2\", ...}</p> <p>Keys must start with a letter and be at least two characters. The total size of your environment variables cannot exceed 4 KB. You can't specify any Lambda reserved environment variables as the keys for your environment variables. For more information about reserved keys, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime\"> Runtime environment variables</a>.</p> <important> <p>The environment variables keys and values are not encrypted. Do not store sensitive information in this field.</p> </important>"
+          "documentation":"<p>Specifies the keys and values to use for any environment variables used in the canary script. Use the following format:</p> <p>{ \"key1\" : \"value1\", \"key2\" : \"value2\", ...}</p> <p>Keys must start with a letter and be at least two characters. The total size of your environment variables cannot exceed 4 KB. You can't specify any Lambda reserved environment variables as the keys for your environment variables. For more information about reserved keys, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime\"> Runtime environment variables</a>.</p> <important> <p>Environment variable keys and values are encrypted at rest using Amazon Web Services owned KMS keys. However, the environment variables are not encrypted on the client side. Do not store sensitive information in them.</p> </important>"
+        },
+        "EphemeralStorage":{
+          "shape":"EphemeralStorageSize",
+          "documentation":"<p>Specifies the amount of ephemeral storage (in MB) to allocate for the canary run during execution. This temporary storage is used for storing canary run artifacts (which are uploaded to an Amazon S3 bucket at the end of the run), and any canary browser operations. This temporary storage is cleared after the run is completed. Default storage value is 1024 MB.</p>"
         }
       },
       "documentation":"<p>A structure that contains input information for a canary run.</p>"
@@ -638,6 +760,10 @@
         "ActiveTracing":{
           "shape":"NullableBoolean",
           "documentation":"<p>Displays whether this canary run used active X-Ray tracing. </p>"
+        },
+        "EphemeralStorage":{
+          "shape":"EphemeralStorageSize",
+          "documentation":"<p>Specifies the amount of ephemeral storage (in MB) to allocate for the canary run during execution. This temporary storage is used for storing canary run artifacts (which are uploaded to an Amazon S3 bucket at the end of the run), and any canary browser operations. This temporary storage is cleared after the run is completed. Default storage value is 1024 MB.</p>"
         }
       },
       "documentation":"<p>A structure that contains information about a canary run.</p>"
@@ -670,11 +796,23 @@
         },
         "StateReasonCode":{
           "shape":"CanaryRunStateReasonCode",
-          "documentation":"<p>If this value is <code>CANARY_FAILURE</code>, an exception occurred in the canary code. If this value is <code>EXECUTION_FAILURE</code>, an exception occurred in CloudWatch Synthetics.</p>"
+          "documentation":"<p>If this value is <code>CANARY_FAILURE</code>, either the canary script failed or Synthetics ran into a fatal error when running the canary. For example, a canary timeout misconfiguration setting can cause the canary to timeout before Synthetics can evaluate its status. </p> <p> If this value is <code>EXECUTION_FAILURE</code>, a non-critical failure occurred such as failing to save generated debug artifacts (for example, screenshots or har files).</p> <p>If both types of failures occurred, the <code>CANARY_FAILURE</code> takes precedence. To understand the exact error, use the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CanaryRunStatus.html\">StateReason</a> API.</p>"
+        },
+        "TestResult":{
+          "shape":"CanaryRunTestResult",
+          "documentation":"<p>Specifies the status of canary script for this run. When Synthetics tries to determine the status but fails, the result is marked as <code>UNKNOWN</code>. For the overall status of canary run, see <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CanaryRunStatus.html\">State</a>.</p>"
         }
       },
       "documentation":"<p>This structure contains the status information about a canary run.</p>"
     },
+    "CanaryRunTestResult":{
+      "type":"string",
+      "enum":[
+        "PASSED",
+        "FAILED",
+        "UNKNOWN"
+      ]
+    },
     "CanaryRunTimeline":{
       "type":"structure",
       "members":{
@@ -685,6 +823,10 @@
         "Completed":{
           "shape":"Timestamp",
           "documentation":"<p>The end time of the run.</p>"
+        },
+        "MetricTimestampForRunAndRetries":{
+          "shape":"Timestamp",
+          "documentation":"<p>The time at which the metrics will be generated for this run or retries.</p>"
         }
       },
       "documentation":"<p>This structure contains the start and end times of a single canary run.</p>"
@@ -704,6 +846,10 @@
         "DurationInSeconds":{
           "shape":"MaxOneYearInSeconds",
           "documentation":"<p>How long, in seconds, for the canary to continue making regular runs according to the schedule in the <code>Expression</code> value. If you specify 0, the canary continues making runs until you stop it. If you omit this field, the default of 0 is used.</p>"
+        },
+        "RetryConfig":{
+          "shape":"RetryConfigInput",
+          "documentation":"<p>A structure that contains the retry configuration for a canary</p>"
         }
       },
       "documentation":"<p>This structure specifies how often a canary is to make runs and the date and time when it should stop making runs.</p>"
@@ -718,6 +864,10 @@
         "DurationInSeconds":{
           "shape":"MaxOneYearInSeconds",
           "documentation":"<p>How long, in seconds, for the canary to continue making regular runs after it was created. The runs are performed according to the schedule in the <code>Expression</code> value.</p>"
+        },
+        "RetryConfig":{
+          "shape":"RetryConfigOutput",
+          "documentation":"<p>A structure that contains the retry configuration for a canary</p>"
         }
       },
       "documentation":"<p>How long, in seconds, for the canary to continue making regular runs according to the schedule in the <code>Expression</code> value.</p>"
@@ -762,11 +912,11 @@
         },
         "StateReason":{
           "shape":"String",
-          "documentation":"<p>If the canary has insufficient permissions to run, this field provides more details.</p>"
+          "documentation":"<p>If the canary creation or update failed, this field provides details on the failure.</p>"
         },
         "StateReasonCode":{
           "shape":"CanaryStateReasonCode",
-          "documentation":"<p>If the canary cannot run or has failed, this field displays the reason.</p>"
+          "documentation":"<p>If the canary creation or update failed, this field displays the reason code.</p>"
         }
       },
       "documentation":"<p>A structure that contains the current state of the canary.</p>"
@@ -796,8 +946,8 @@
     "CodeHandler":{
       "type":"string",
       "max":128,
-      "min":1,
-      "pattern":"^([0-9a-zA-Z_-]+\\/)*[0-9A-Za-z_\\\\-]+\\.[A-Za-z_][A-Za-z0-9_]*$"
+      "min":0,
+      "pattern":"^(([0-9a-zA-Z_-]+(\\/|\\.))*[0-9A-Za-z_\\\\-]+(\\.|::)[A-Za-z_][A-Za-z0-9_]*)?$"
     },
     "ConflictException":{
       "type":"structure",
@@ -825,11 +975,11 @@
         },
         "Code":{
           "shape":"CanaryCodeInput",
-          "documentation":"<p>A structure that includes the entry point from which the canary should start running your script. If the script is stored in an S3 bucket, the bucket name, key, and version are also included. </p>"
+          "documentation":"<p>A structure that includes the entry point from which the canary should start running your script. If the script is stored in an Amazon S3 bucket, the bucket name, key, and version are also included. </p>"
         },
         "ArtifactS3Location":{
           "shape":"String",
-          "documentation":"<p>The location in Amazon S3 where Synthetics stores artifacts from the test runs of this canary. Artifacts include the log file, screenshots, and HAR files. The name of the S3 bucket can't include a period (.).</p>"
+          "documentation":"<p>The location in Amazon S3 where Synthetics stores artifacts from the test runs of this canary. Artifacts include the log file, screenshots, and HAR files. The name of the Amazon S3 bucket can't include a period (.).</p>"
         },
         "ExecutionRoleArn":{
           "shape":"RoleArn",
@@ -841,15 +991,15 @@
         },
         "RunConfig":{
           "shape":"CanaryRunConfigInput",
-          "documentation":"<p>A structure that contains the configuration for individual canary runs, such as timeout value and environment variables.</p> <important> <p>The environment variables keys and values are not encrypted. Do not store sensitive information in this field.</p> </important>"
+          "documentation":"<p>A structure that contains the configuration for individual canary runs, such as timeout value and environment variables.</p> <important> <p>Environment variable keys and values are encrypted at rest using Amazon Web Services owned KMS keys. However, the environment variables are not encrypted on the client side. Do not store sensitive information in them.</p> </important>"
         },
         "SuccessRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about successful runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p>"
+          "documentation":"<p>The number of days to retain data about successful runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "FailureRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about failed runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p>"
+          "documentation":"<p>The number of days to retain data about failed runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "RuntimeVersion":{
           "shape":"String",
@@ -867,6 +1017,10 @@
           "shape":"ProvisionedResourceCleanupSetting",
           "documentation":"<p>Specifies whether to also delete the Lambda functions and layers used by this canary when the canary is deleted. If you omit this parameter, the default of <code>AUTOMATIC</code> is used, which means that the Lambda functions and layers will be deleted when the canary is deleted.</p> <p>If the value of this parameter is <code>OFF</code>, then the value of the <code>DeleteLambda</code> parameter of the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DeleteCanary.html\">DeleteCanary</a> operation determines whether the Lambda functions and layers will be deleted.</p>"
         },
+        "BrowserConfigs":{
+          "shape":"BrowserConfigs",
+          "documentation":"<p>CloudWatch Synthetics now supports multibrowser canaries for <code>syn-nodejs-puppeteer-11.0</code> and <code>syn-nodejs-playwright-3.0</code> runtimes. This feature allows you to run your canaries on both Firefox and Chrome browsers. To create a multibrowser canary, you need to specify the BrowserConfigs with a list of browsers you want to use.</p> <note> <p>If not specified, <code>browserConfigs</code> defaults to Chrome.</p> </note>"
+        },
         "Tags":{
           "shape":"TagMap",
           "documentation":"<p>A list of key-value pairs to associate with the canary. You can associate as many as 50 tags with a canary.</p> <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only the resources that have certain tag values.</p> <p>To have the tags that you apply to this canary also be applied to the Lambda function that the canary uses, specify this parameter with the value <code>lambda-function</code>.</p>"
@@ -929,8 +1083,7 @@
     },
     "DeleteCanaryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGroupRequest":{
       "type":"structure",
@@ -946,8 +1099,32 @@
     },
     "DeleteGroupResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "Dependencies":{
+      "type":"list",
+      "member":{"shape":"Dependency"},
+      "max":1,
+      "min":0
+    },
+    "Dependency":{
+      "type":"structure",
+      "required":["Reference"],
       "members":{
-      }
+        "Type":{
+          "shape":"DependencyType",
+          "documentation":"<p>The type of dependency. Valid value is <code>LambdaLayer</code>.</p>"
+        },
+        "Reference":{
+          "shape":"String",
+          "documentation":"<p>The dependency reference. For Lambda layers, this is the ARN of the Lambda layer. For more information about Lambda ARN format, see <a href=\"https://docs.aws.amazon.com/lambda/latest/api/API_Layer.html\">Lambda</a>.</p>"
+        }
+      },
+      "documentation":"<p>A structure that contains information about a dependency for a canary.</p>"
+    },
+    "DependencyType":{
+      "type":"string",
+      "enum":["LambdaLayer"]
     },
     "DescribeCanariesLastRunNameFilter":{
       "type":"list",
@@ -969,6 +1146,10 @@
         "Names":{
           "shape":"DescribeCanariesLastRunNameFilter",
           "documentation":"<p>Use this parameter to return only canaries that match the names that you specify here. You can specify as many as five canary names.</p> <p>If you specify this parameter, the operation is successful only if you have authorization to view all the canaries that you specify in your request. If you do not have permission to view any of the canaries, the request fails with a 403 response.</p> <p>You are required to use the <code>Names</code> parameter if you are logged on to a user or role that has an IAM policy that restricts which canaries that you are allowed to view. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Restricted.html\"> Limiting a user to viewing specific canaries</a>.</p>"
+        },
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The type of browser to use for the canary run.</p>"
         }
       }
     },
@@ -1068,8 +1249,21 @@
     },
     "DisassociateResourceResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DryRunConfigOutput":{
+      "type":"structure",
       "members":{
-      }
+        "DryRunId":{
+          "shape":"UUID",
+          "documentation":"<p>The DryRunId associated with an existing canary’s dry run. You can use this DryRunId to retrieve information about the dry run.</p>"
+        },
+        "LastDryRunExecutionStatus":{
+          "shape":"String",
+          "documentation":"<p>Returns the last execution status for a canary's dry run.</p>"
+        }
+      },
+      "documentation":"<p>Returns the dry run configurations set for a canary.</p>"
     },
     "EncryptionMode":{
       "type":"string",
@@ -1078,6 +1272,24 @@
         "SSE_KMS"
       ]
     },
+    "EngineConfig":{
+      "type":"structure",
+      "members":{
+        "EngineArn":{
+          "shape":"FunctionArn",
+          "documentation":"<p>Each engine configuration contains the ARN of the Lambda function that is used as the canary's engine for a specific browser type. </p>"
+        },
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The browser type associated with this engine configuration.</p>"
+        }
+      },
+      "documentation":"<p>A structure of engine configurations for the canary, one for each browser type that the canary is configured to run on.</p>"
+    },
+    "EngineConfigs":{
+      "type":"list",
+      "member":{"shape":"EngineConfig"}
+    },
     "EnvironmentVariableName":{
       "type":"string",
       "pattern":"[a-zA-Z]([a-zA-Z0-9_])+"
@@ -1088,6 +1300,11 @@
       "key":{"shape":"EnvironmentVariableName"},
       "value":{"shape":"EnvironmentVariableValue"}
     },
+    "EphemeralStorageSize":{
+      "type":"integer",
+      "max":10240,
+      "min":1024
+    },
     "ErrorMessage":{"type":"string"},
     "FunctionArn":{
       "type":"string",
@@ -1104,6 +1321,12 @@
           "documentation":"<p>The name of the canary that you want details for.</p>",
           "location":"uri",
           "locationName":"name"
+        },
+        "DryRunId":{
+          "shape":"UUID",
+          "documentation":"<p>The DryRunId associated with an existing canary’s dry run. You can use this DryRunId to retrieve information about the dry run.</p>",
+          "location":"querystring",
+          "locationName":"dryRunId"
         }
       }
     },
@@ -1128,11 +1351,19 @@
         },
         "NextToken":{
           "shape":"Token",
-          "documentation":"<p>A token that indicates that there is more data available. You can use this token in a subsequent <code>GetCanaryRuns</code> operation to retrieve the next set of results.</p>"
+          "documentation":"<p>A token that indicates that there is more data available. You can use this token in a subsequent <code>GetCanaryRuns</code> operation to retrieve the next set of results.</p> <note> <p>When auto retry is enabled for the canary, the first subsequent retry is suffixed with *1 indicating its the first retry and the next subsequent try is suffixed with *2.</p> </note>"
         },
         "MaxResults":{
           "shape":"MaxSize100",
           "documentation":"<p>Specify this parameter to limit how many runs are returned each time you use the <code>GetCanaryRuns</code> operation. If you omit this parameter, the default of 100 is used.</p>"
+        },
+        "DryRunId":{
+          "shape":"UUID",
+          "documentation":"<p>The DryRunId associated with an existing canary’s dry run. You can use this DryRunId to retrieve information about the dry run.</p>"
+        },
+        "RunType":{
+          "shape":"RunType",
+          "documentation":"<ul> <li> <p>When you provide <code>RunType=CANARY_RUN</code> and <code>dryRunId</code>, you will get an exception </p> </li> <li> <p>When a value is not provided for <code>RunType</code>, the default value is <code>CANARY_RUN</code> </p> </li> <li> <p>When <code>CANARY_RUN</code> is provided, all canary runs excluding dry runs are returned</p> </li> <li> <p>When <code>DRY_RUN</code> is provided, all dry runs excluding canary runs are returned</p> </li> </ul>"
         }
       }
     },
@@ -1395,6 +1626,11 @@
       "max":31622400,
       "min":0
     },
+    "MaxRetries":{
+      "type":"integer",
+      "max":2,
+      "min":0
+    },
     "MaxSize100":{
       "type":"integer",
       "max":100,
@@ -1467,12 +1703,45 @@
       "type":"string",
       "enum":["lambda-function"]
     },
+    "RetryAttempt":{
+      "type":"integer",
+      "max":2,
+      "min":1
+    },
+    "RetryConfigInput":{
+      "type":"structure",
+      "required":["MaxRetries"],
+      "members":{
+        "MaxRetries":{
+          "shape":"MaxRetries",
+          "documentation":"<p>The maximum number of retries. The value must be less than or equal to 2.</p>"
+        }
+      },
+      "documentation":"<p>This structure contains information about the canary's retry configuration.</p> <note> <p>The default account level concurrent execution limit from Lambda is 1000. When you have more than 1000 canaries, it's possible there are more than 1000 Lambda invocations due to retries and the console might hang. For more information on the Lambda execution limit, see <a href=\"https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#:~:text=As%20your%20functions%20receive%20more,functions%20in%20an%20AWS%20Region\">Understanding Lambda function scaling</a>.</p> </note> <note> <p>For canary with <code>MaxRetries = 2</code>, you need to set the <code>CanaryRunConfigInput.TimeoutInSeconds</code> to less than 600 seconds to avoid validation errors.</p> </note>"
+    },
+    "RetryConfigOutput":{
+      "type":"structure",
+      "members":{
+        "MaxRetries":{
+          "shape":"MaxRetries",
+          "documentation":"<p>The maximum number of retries. The value must be less than or equal to 2.</p>"
+        }
+      },
+      "documentation":"<p>This structure contains information about the canary's retry configuration.</p>"
+    },
     "RoleArn":{
       "type":"string",
       "max":2048,
       "min":1,
       "pattern":"arn:(aws[a-zA-Z-]*)?:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+"
     },
+    "RunType":{
+      "type":"string",
+      "enum":[
+        "CANARY_RUN",
+        "DRY_RUN"
+      ]
+    },
     "RuntimeVersion":{
       "type":"structure",
       "members":{
@@ -1529,6 +1798,64 @@
       "error":{"httpStatusCode":402},
       "exception":true
     },
+    "StartCanaryDryRunRequest":{
+      "type":"structure",
+      "required":["Name"],
+      "members":{
+        "Name":{
+          "shape":"CanaryName",
+          "documentation":"<p>The name of the canary that you want to dry run. To find canary names, use <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DescribeCanaries.html\">DescribeCanaries</a>.</p>",
+          "location":"uri",
+          "locationName":"name"
+        },
+        "Code":{"shape":"CanaryCodeInput"},
+        "RuntimeVersion":{
+          "shape":"String",
+          "documentation":"<p>Specifies the runtime version to use for the canary. For a list of valid runtime versions and for more information about runtime versions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html\"> Canary Runtime Versions</a>.</p>"
+        },
+        "RunConfig":{"shape":"CanaryRunConfigInput"},
+        "VpcConfig":{"shape":"VpcConfigInput"},
+        "ExecutionRoleArn":{
+          "shape":"RoleArn",
+          "documentation":"<p>The ARN of the IAM role to be used to run the canary. This role must already exist, and must include <code>lambda.amazonaws.com</code> as a principal in the trust policy. The role must also have the following permissions:</p>"
+        },
+        "SuccessRetentionPeriodInDays":{
+          "shape":"MaxSize1024",
+          "documentation":"<p>The number of days to retain data about successful runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
+        },
+        "FailureRetentionPeriodInDays":{
+          "shape":"MaxSize1024",
+          "documentation":"<p>The number of days to retain data about failed runs of this canary. If you omit this field, the default of 31 days is used. The valid range is 1 to 455 days.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
+        },
+        "VisualReference":{"shape":"VisualReferenceInput"},
+        "ArtifactS3Location":{
+          "shape":"String",
+          "documentation":"<p>The location in Amazon S3 where Synthetics stores artifacts from the test runs of this canary. Artifacts include the log file, screenshots, and HAR files. The name of the Amazon S3 bucket can't include a period (.).</p>"
+        },
+        "ArtifactConfig":{"shape":"ArtifactConfigInput"},
+        "ProvisionedResourceCleanup":{
+          "shape":"ProvisionedResourceCleanupSetting",
+          "documentation":"<p>Specifies whether to also delete the Lambda functions and layers used by this canary when the canary is deleted. If you omit this parameter, the default of <code>AUTOMATIC</code> is used, which means that the Lambda functions and layers will be deleted when the canary is deleted.</p> <p>If the value of this parameter is <code>OFF</code>, then the value of the <code>DeleteLambda</code> parameter of the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DeleteCanary.html\">DeleteCanary</a> operation determines whether the Lambda functions and layers will be deleted.</p>"
+        },
+        "BrowserConfigs":{
+          "shape":"BrowserConfigs",
+          "documentation":"<p>A structure that specifies the browser type to use for a canary run. CloudWatch Synthetics supports running canaries on both <code>CHROME</code> and <code>FIREFOX</code> browsers.</p> <note> <p>If not specified, <code>browserConfigs</code> defaults to Chrome.</p> </note>"
+        },
+        "VisualReferences":{
+          "shape":"VisualReferences",
+          "documentation":"<p>A list of visual reference configurations for the canary, one for each browser type that the canary is configured to run on. Visual references are used for visual monitoring comparisons.</p> <p> <code>syn-nodejs-puppeteer-11.0</code> and above, and <code>syn-nodejs-playwright-3.0</code> and above, only supports <code>visualReferences</code>. <code>visualReference</code> field is not supported.</p> <p>Versions older than <code>syn-nodejs-puppeteer-11.0</code> supports both <code>visualReference</code> and <code>visualReferences</code> for backward compatibility. It is recommended to use <code>visualReferences</code> for consistency and future compatibility.</p>"
+        }
+      }
+    },
+    "StartCanaryDryRunResponse":{
+      "type":"structure",
+      "members":{
+        "DryRunConfig":{
+          "shape":"DryRunConfigOutput",
+          "documentation":"<p>Returns the dry run configurations for a canary.</p>"
+        }
+      }
+    },
     "StartCanaryRequest":{
       "type":"structure",
       "required":["Name"],
@@ -1543,8 +1870,7 @@
     },
     "StartCanaryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopCanaryRequest":{
       "type":"structure",
@@ -1560,8 +1886,7 @@
     },
     "StopCanaryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "String":{
       "type":"string",
@@ -1619,8 +1944,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1668,8 +1992,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCanaryRequest":{
       "type":"structure",
@@ -1683,7 +2006,7 @@
         },
         "Code":{
           "shape":"CanaryCodeInput",
-          "documentation":"<p>A structure that includes the entry point from which the canary should start running your script. If the script is stored in an S3 bucket, the bucket name, key, and version are also included. </p>"
+          "documentation":"<p>A structure that includes the entry point from which the canary should start running your script. If the script is stored in an Amazon S3 bucket, the bucket name, key, and version are also included. </p>"
         },
         "ExecutionRoleArn":{
           "shape":"RoleArn",
@@ -1699,15 +2022,15 @@
         },
         "RunConfig":{
           "shape":"CanaryRunConfigInput",
-          "documentation":"<p>A structure that contains the timeout value that is used for each individual run of the canary.</p> <important> <p>The environment variables keys and values are not encrypted. Do not store sensitive information in this field.</p> </important>"
+          "documentation":"<p>A structure that contains the timeout value that is used for each individual run of the canary.</p> <important> <p>Environment variable keys and values are encrypted at rest using Amazon Web Services owned KMS keys. However, the environment variables are not encrypted on the client side. Do not store sensitive information in them.</p> </important>"
         },
         "SuccessRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about successful runs of this canary.</p>"
+          "documentation":"<p>The number of days to retain data about successful runs of this canary.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "FailureRetentionPeriodInDays":{
           "shape":"MaxSize1024",
-          "documentation":"<p>The number of days to retain data about failed runs of this canary.</p>"
+          "documentation":"<p>The number of days to retain data about failed runs of this canary.</p> <p>This setting affects the range of information returned by <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html\">GetCanaryRuns</a>, as well as the range of information displayed in the Synthetics console. </p>"
         },
         "VpcConfig":{
           "shape":"VpcConfigInput",
@@ -1719,7 +2042,7 @@
         },
         "ArtifactS3Location":{
           "shape":"String",
-          "documentation":"<p>The location in Amazon S3 where Synthetics stores artifacts from the test runs of this canary. Artifacts include the log file, screenshots, and HAR files. The name of the S3 bucket can't include a period (.).</p>"
+          "documentation":"<p>The location in Amazon S3 where Synthetics stores artifacts from the test runs of this canary. Artifacts include the log file, screenshots, and HAR files. The name of the Amazon S3 bucket can't include a period (.).</p>"
         },
         "ArtifactConfig":{
           "shape":"ArtifactConfigInput",
@@ -1728,13 +2051,24 @@
         "ProvisionedResourceCleanup":{
           "shape":"ProvisionedResourceCleanupSetting",
           "documentation":"<p>Specifies whether to also delete the Lambda functions and layers used by this canary when the canary is deleted.</p> <p>If the value of this parameter is <code>OFF</code>, then the value of the <code>DeleteLambda</code> parameter of the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DeleteCanary.html\">DeleteCanary</a> operation determines whether the Lambda functions and layers will be deleted.</p>"
+        },
+        "DryRunId":{
+          "shape":"UUID",
+          "documentation":"<p>Update the existing canary using the updated configurations from the DryRun associated with the DryRunId.</p> <note> <p>When you use the <code>dryRunId</code> field when updating a canary, the only other field you can provide is the <code>Schedule</code>. Adding any other field will thrown an exception.</p> </note>"
+        },
+        "VisualReferences":{
+          "shape":"VisualReferences",
+          "documentation":"<p>A list of visual reference configurations for the canary, one for each browser type that the canary is configured to run on. Visual references are used for visual monitoring comparisons.</p> <p> <code>syn-nodejs-puppeteer-11.0</code> and above, and <code>syn-nodejs-playwright-3.0</code> and above, only supports <code>visualReferences</code>. <code>visualReference</code> field is not supported.</p> <p>Versions older than <code>syn-nodejs-puppeteer-11.0</code> supports both <code>visualReference</code> and <code>visualReferences</code> for backward compatibility. It is recommended to use <code>visualReferences</code> for consistency and future compatibility.</p> <p>For multibrowser visual monitoring, you can update the baseline for all configured browsers in a single update call by specifying a list of VisualReference objects, one per browser. Each VisualReference object maps to a specific browser configuration, allowing you to manage visual baselines for multiple browsers simultaneously.</p> <p>For single configuration canaries using Chrome browser (default browser), use visualReferences for <code>syn-nodejs-puppeteer-11.0</code> and above, and <code>syn-nodejs-playwright-3.0</code> and above canaries. The browserType in the visualReference object is not mandatory.</p>"
+        },
+        "BrowserConfigs":{
+          "shape":"BrowserConfigs",
+          "documentation":"<p>A structure that specifies the browser type to use for a canary run. CloudWatch Synthetics supports running canaries on both <code>CHROME</code> and <code>FIREFOX</code> browsers.</p> <note> <p>If not specified, <code>browserConfigs</code> defaults to Chrome.</p> </note>"
         }
       }
     },
     "UpdateCanaryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ValidationException":{
       "type":"structure",
@@ -1756,6 +2090,10 @@
         "BaseCanaryRunId":{
           "shape":"String",
           "documentation":"<p>Specifies which canary run to use the screenshots from as the baseline for future visual monitoring with this canary. Valid values are <code>nextrun</code> to use the screenshots from the next run after this update is made, <code>lastrun</code> to use the screenshots from the most recent run before this update was made, or the value of <code>Id</code> in the <a href=\"https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CanaryRun.html\"> CanaryRun</a> from a run of this a canary in the past 31 days. If you specify the <code>Id</code> of a canary run older than 31 days, the operation returns a 400 validation exception error..</p>"
+        },
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The browser type associated with this visual reference.</p>"
         }
       },
       "documentation":"<p>An object that specifies what screenshots to use as a baseline for visual monitoring by this canary. It can optionally also specify parts of the screenshots to ignore during the visual monitoring comparison.</p> <p>Visual monitoring is supported only on canaries running the <b>syn-puppeteer-node-3.2</b> runtime or later. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting.html\"> Visual monitoring</a> and <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting.html\"> Visual monitoring blueprint</a> </p>"
@@ -1770,10 +2108,26 @@
         "BaseCanaryRunId":{
           "shape":"String",
           "documentation":"<p>The ID of the canary run that produced the baseline screenshots that are used for visual monitoring comparisons by this canary.</p>"
+        },
+        "BrowserType":{
+          "shape":"BrowserType",
+          "documentation":"<p>The browser type associated with this visual reference.</p>"
         }
       },
       "documentation":"<p>If this canary performs visual monitoring by comparing screenshots, this structure contains the ID of the canary run that is used as the baseline for screenshots, and the coordinates of any parts of those screenshots that are ignored during visual monitoring comparison.</p> <p>Visual monitoring is supported only on canaries running the <b>syn-puppeteer-node-3.2</b> runtime or later.</p>"
     },
+    "VisualReferences":{
+      "type":"list",
+      "member":{"shape":"VisualReferenceInput"},
+      "max":2,
+      "min":1
+    },
+    "VisualReferencesOutput":{
+      "type":"list",
+      "member":{"shape":"VisualReferenceOutput"},
+      "max":2,
+      "min":1
+    },
     "VpcConfigInput":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/taxsettings/2018-05-10/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/taxsettings/2018-05-10/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/taxsettings/2018-05-10/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/taxsettings/2018-05-10/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,26 +6,26 @@
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         },
         "Region": {
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/taxsettings/2018-05-10/service-2.json 2.31.35-1/awscli/botocore/data/taxsettings/2018-05-10/service-2.json
--- 2.23.6-1/awscli/botocore/data/taxsettings/2018-05-10/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/taxsettings/2018-05-10/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -44,7 +44,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get the active tax exemptions for a given list of accounts. </p>"
+      "documentation":"<p>Get the active tax exemptions for a given list of accounts. The IAM action is <code>tax:GetExemptions</code>. </p>"
     },
     "BatchPutTaxRegistration":{
       "name":"BatchPutTaxRegistration",
@@ -60,7 +60,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Adds or updates tax registration for multiple accounts in batch. This can be used to add or update tax registrations for up to five accounts in one batch. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.</p> <p>To call this API operation for specific countries, see the following country-specific requirements.</p> <p> <b>Bangladesh</b> </p> <ul> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Brazil</b> </p> <ul> <li> <p>You must complete the tax registration process in the <a href=\"https://console.aws.amazon.com/billing/home#/paymentpreferences/paymentmethods\">Payment preferences</a> page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.</p> </li> <li> <p>For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.</p> </li> </ul> <p> <b>Georgia</b> </p> <ul> <li> <p>The valid <code>personType</code> values are <code>Physical Person</code> and <code>Business</code>.</p> </li> </ul> <p> <b>Kenya</b> </p> <ul> <li> <p>You must specify the <code>personType</code> in the <code>kenyaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>personType</code> is <code>Physical Person</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Malaysia</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> <li> <p> <code>RegistrationType</code> valid values are <code>NRIC</code> for individual, and TIN and sales and service tax (SST) for Business.</p> </li> <li> <p>For individual, you can specify the <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with NRIC type, and a valid <code>MyKad</code> or NRIC number.</p> </li> <li> <p>For business, you must specify a <code>businessRegistrationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a TIN type and tax identification number.</p> </li> <li> <p>For business resellers, you must specify a <code>businessRegistrationNumber</code> and <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a sales and service tax (SST) type and a valid SST number.</p> </li> <li> <p>For business resellers with service codes, you must specify <code>businessRegistrationNumber</code>, <code>taxInformationNumber</code>, and distinct <code>serviceTaxCodes</code> in <code>MalaysiaAdditionalInfo</code> with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.</p> </li> <li> <p>Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.</p> </li> <li> <p>Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.</p> <p>Taxable service and service tax codes:</p> <p>Consultancy - 9907061674</p> <p>Training or coaching service - 9907071685</p> <p>IT service - 9907101676</p> <p>Digital services and electronic medium - 9907121690</p> </li> </ul> <p> <b>Nepal</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul> <p> <b>Saudi Arabia</b> </p> <ul> <li> <p>For <code>address</code>, you must specify <code>addressLine3</code>.</p> </li> </ul> <p> <b>South Korea</b> </p> <ul> <li> <p>You must specify the <code>certifiedEmailId</code> and <code>legalName</code> in the <code>TaxRegistrationEntry</code> object. Use Korean characters for <code>legalName</code>.</p> </li> <li> <p>You must specify the <code>businessRepresentativeName</code>, <code>itemOfBusiness</code>, and <code>lineOfBusiness</code> in the <code>southKoreaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. Use Korean characters for these fields.</p> </li> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> <li> <p>For the <code>address</code> object, use Korean characters for <code>addressLine1</code>, <code>addressLine2</code> <code>city</code>, <code>postalCode</code>, and <code>stateOrRegion</code>.</p> </li> </ul> <p> <b>Spain</b> </p> <ul> <li> <p>You must specify the <code>registrationType</code> in the <code>spainAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>registrationType</code> is <code>Local</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Turkey</b> </p> <ul> <li> <p>You must specify the <code>sector</code> in the <code>taxRegistrationEntry</code> object.</p> </li> <li> <p>If your <code>sector</code> is <code>Business</code>, <code>Individual</code>, or <code>Government</code>:</p> <ul> <li> <p>Specify the <code>taxOffice</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p>(Optional) Specify the <code>kepEmailId</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p> <b>Note:</b> In the <b>Tax Settings</b> page of the Billing console, <code>Government</code> appears as <b>Public institutions</b> </p> </li> </ul> </li> <li> <p>If your <code>sector</code> is <code>Business</code> and you're subject to KDV tax, you must specify your industry in the <code>industries</code> field.</p> </li> <li> <p>For <code>address</code>, you must specify <code>districtOrCounty</code>.</p> </li> </ul> <p> <b>Ukraine</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul>"
+      "documentation":"<p>Adds or updates tax registration for multiple accounts in batch. This can be used to add or update tax registrations for up to five accounts in one batch. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.</p> <p>To call this API operation for specific countries, see the following country-specific requirements.</p> <p> <b>Bangladesh</b> </p> <ul> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Brazil</b> </p> <ul> <li> <p>You must complete the tax registration process in the <a href=\"https://console.aws.amazon.com/billing/home#/paymentpreferences/paymentmethods\">Payment preferences</a> page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.</p> </li> <li> <p>For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.</p> </li> </ul> <p> <b>Georgia</b> </p> <ul> <li> <p>The valid <code>personType</code> values are <code>Physical Person</code> and <code>Business</code>.</p> </li> </ul> <p> <b>Indonesia</b> </p> <ul> <li> <p> <code>PutTaxRegistration</code>: The use of this operation to submit tax information is subject to the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services service terms</a>. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.</p> </li> <li> <p> <code>BatchPutTaxRegistration</code>: The use of this operation to submit tax information is subject to the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services service terms</a>. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).</p> </li> <li> <p>You must specify the <code>taxRegistrationNumberType</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If you specify <code>decisionNumber</code>, you must specify the <code>ppnExceptionDesignationCode</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. If the <code>taxRegistrationNumberType</code> is set to NPWP or NITKU, valid values for <code>ppnExceptionDesignationCode</code> are either <code>01</code>, <code>02</code>, <code>03</code>, <code>07</code>, or <code>08</code>.</p> <p>For other <code>taxRegistrationNumberType</code> values, <code>ppnExceptionDesignationCode</code> must be either <code>01</code>, <code>07</code>, or <code>08</code>.</p> </li> <li> <p>If <code>ppnExceptionDesignationCode</code> is <code>07</code>, you must specify the <code>decisionNumber</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> </ul> <p> <b>Kenya</b> </p> <ul> <li> <p>You must specify the <code>personType</code> in the <code>kenyaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>personType</code> is <code>Physical Person</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Malaysia</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> <li> <p> <code>RegistrationType</code> valid values are <code>NRIC</code> for individual, and TIN and sales and service tax (SST) for Business.</p> </li> <li> <p>For individual, you can specify the <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with NRIC type, and a valid <code>MyKad</code> or NRIC number.</p> </li> <li> <p>For business, you must specify a <code>businessRegistrationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a TIN type and tax identification number.</p> </li> <li> <p>For business resellers, you must specify a <code>businessRegistrationNumber</code> and <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a sales and service tax (SST) type and a valid SST number.</p> </li> <li> <p>For business resellers with service codes, you must specify <code>businessRegistrationNumber</code>, <code>taxInformationNumber</code>, and distinct <code>serviceTaxCodes</code> in <code>MalaysiaAdditionalInfo</code> with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.</p> </li> <li> <p>Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.</p> </li> <li> <p>Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.</p> <p>Taxable service and service tax codes:</p> <p>Consultancy - 9907061674</p> <p>Training or coaching service - 9907071685</p> <p>IT service - 9907101676</p> <p>Digital services and electronic medium - 9907121690</p> </li> </ul> <p> <b>Nepal</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul> <p> <b>Saudi Arabia</b> </p> <ul> <li> <p>For <code>address</code>, you must specify <code>addressLine3</code>.</p> </li> </ul> <p> <b>South Korea</b> </p> <ul> <li> <p>You must specify the <code>certifiedEmailId</code> and <code>legalName</code> in the <code>TaxRegistrationEntry</code> object. Use Korean characters for <code>legalName</code>.</p> </li> <li> <p>You must specify the <code>businessRepresentativeName</code>, <code>itemOfBusiness</code>, and <code>lineOfBusiness</code> in the <code>southKoreaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. Use Korean characters for these fields.</p> </li> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> <li> <p>For the <code>address</code> object, use Korean characters for <code>addressLine1</code>, <code>addressLine2</code> <code>city</code>, <code>postalCode</code>, and <code>stateOrRegion</code>.</p> </li> </ul> <p> <b>Spain</b> </p> <ul> <li> <p>You must specify the <code>registrationType</code> in the <code>spainAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>registrationType</code> is <code>Local</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Turkey</b> </p> <ul> <li> <p>You must specify the <code>sector</code> in the <code>taxRegistrationEntry</code> object.</p> </li> <li> <p>If your <code>sector</code> is <code>Business</code>, <code>Individual</code>, or <code>Government</code>:</p> <ul> <li> <p>Specify the <code>taxOffice</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p>(Optional) Specify the <code>kepEmailId</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p> <b>Note:</b> In the <b>Tax Settings</b> page of the Billing console, <code>Government</code> appears as <b>Public institutions</b> </p> </li> </ul> </li> <li> <p>If your <code>sector</code> is <code>Business</code> and you're subject to KDV tax, you must specify your industry in the <code>industries</code> field.</p> </li> <li> <p>For <code>address</code>, you must specify <code>districtOrCounty</code>.</p> </li> </ul> <p> <b>Ukraine</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul>"
     },
     "DeleteSupplementalTaxRegistration":{
       "name":"DeleteSupplementalTaxRegistration",
@@ -110,7 +110,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Get supported tax exemption types. </p>"
+      "documentation":"<p>Get supported tax exemption types. The IAM action is <code>tax:GetExemptions</code>. </p>"
     },
     "GetTaxInheritance":{
       "name":"GetTaxInheritance",
@@ -189,7 +189,7 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves the tax exemption of accounts listed in a consolidated billing family. </p>"
+      "documentation":"<p>Retrieves the tax exemption of accounts listed in a consolidated billing family. The IAM action is <code>tax:GetExemptions</code>.</p>"
     },
     "ListTaxRegistrations":{
       "name":"ListTaxRegistrations",
@@ -240,7 +240,7 @@
         {"shape":"AttachmentUploadException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Adds the tax exemption for a single account or all accounts listed in a consolidated billing family. </p>"
+      "documentation":"<p>Adds the tax exemption for a single account or all accounts listed in a consolidated billing family. The IAM action is <code>tax:UpdateExemptions</code>. </p>"
     },
     "PutTaxInheritance":{
       "name":"PutTaxInheritance",
@@ -273,7 +273,7 @@
         {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Adds or updates tax registration for a single account. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.</p> <p>To call this API operation for specific countries, see the following country-specific requirements.</p> <p> <b>Bangladesh</b> </p> <ul> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Brazil</b> </p> <ul> <li> <p>You must complete the tax registration process in the <a href=\"https://console.aws.amazon.com/billing/home#/paymentpreferences/paymentmethods\">Payment preferences</a> page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.</p> </li> <li> <p>For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.</p> </li> </ul> <p> <b>Georgia</b> </p> <ul> <li> <p>The valid <code>personType</code> values are <code>Physical Person</code> and <code>Business</code>.</p> </li> </ul> <p> <b>Kenya</b> </p> <ul> <li> <p>You must specify the <code>personType</code> in the <code>kenyaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>personType</code> is <code>Physical Person</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Malaysia</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> <li> <p> <code>RegistrationType</code> valid values are <code>NRIC</code> for individual, and TIN and sales and service tax (SST) for Business.</p> </li> <li> <p>For individual, you can specify the <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with NRIC type, and a valid <code>MyKad</code> or NRIC number.</p> </li> <li> <p>For business, you must specify a <code>businessRegistrationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a TIN type and tax identification number.</p> </li> <li> <p>For business resellers, you must specify a <code>businessRegistrationNumber</code> and <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a sales and service tax (SST) type and a valid SST number.</p> </li> <li> <p>For business resellers with service codes, you must specify <code>businessRegistrationNumber</code>, <code>taxInformationNumber</code>, and distinct <code>serviceTaxCodes</code> in <code>MalaysiaAdditionalInfo</code> with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.</p> </li> <li> <p>Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.</p> </li> <li> <p>Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.</p> <p>Taxable service and service tax codes:</p> <p>Consultancy - 9907061674</p> <p>Training or coaching service - 9907071685</p> <p>IT service - 9907101676</p> <p>Digital services and electronic medium - 9907121690</p> </li> </ul> <p> <b>Nepal</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul> <p> <b>Saudi Arabia</b> </p> <ul> <li> <p>For <code>address</code>, you must specify <code>addressLine3</code>.</p> </li> </ul> <p> <b>South Korea</b> </p> <ul> <li> <p>You must specify the <code>certifiedEmailId</code> and <code>legalName</code> in the <code>TaxRegistrationEntry</code> object. Use Korean characters for <code>legalName</code>.</p> </li> <li> <p>You must specify the <code>businessRepresentativeName</code>, <code>itemOfBusiness</code>, and <code>lineOfBusiness</code> in the <code>southKoreaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. Use Korean characters for these fields.</p> </li> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> <li> <p>For the <code>address</code> object, use Korean characters for <code>addressLine1</code>, <code>addressLine2</code> <code>city</code>, <code>postalCode</code>, and <code>stateOrRegion</code>.</p> </li> </ul> <p> <b>Spain</b> </p> <ul> <li> <p>You must specify the <code>registrationType</code> in the <code>spainAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>registrationType</code> is <code>Local</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Turkey</b> </p> <ul> <li> <p>You must specify the <code>sector</code> in the <code>taxRegistrationEntry</code> object.</p> </li> <li> <p>If your <code>sector</code> is <code>Business</code>, <code>Individual</code>, or <code>Government</code>:</p> <ul> <li> <p>Specify the <code>taxOffice</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p>(Optional) Specify the <code>kepEmailId</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p> <b>Note:</b> In the <b>Tax Settings</b> page of the Billing console, <code>Government</code> appears as <b>Public institutions</b> </p> </li> </ul> </li> <li> <p>If your <code>sector</code> is <code>Business</code> and you're subject to KDV tax, you must specify your industry in the <code>industries</code> field.</p> </li> <li> <p>For <code>address</code>, you must specify <code>districtOrCounty</code>.</p> </li> </ul> <p> <b>Ukraine</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul>"
+      "documentation":"<p>Adds or updates tax registration for a single account. You can't set a TRN if there's a pending TRN. You'll need to delete the pending TRN first.</p> <p>To call this API operation for specific countries, see the following country-specific requirements.</p> <p> <b>Bangladesh</b> </p> <ul> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Brazil</b> </p> <ul> <li> <p>You must complete the tax registration process in the <a href=\"https://console.aws.amazon.com/billing/home#/paymentpreferences/paymentmethods\">Payment preferences</a> page in the Billing and Cost Management console. After your TRN and billing address are verified, you can call this API operation.</p> </li> <li> <p>For Amazon Web Services accounts created through Organizations, you can call this API operation when you don't have a billing address.</p> </li> </ul> <p> <b>Georgia</b> </p> <ul> <li> <p>The valid <code>personType</code> values are <code>Physical Person</code> and <code>Business</code>.</p> </li> </ul> <p> <b>Indonesia</b> </p> <ul> <li> <p> <code>PutTaxRegistration</code>: The use of this operation to submit tax information is subject to the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services service terms</a>. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022.</p> </li> <li> <p> <code>BatchPutTaxRegistration</code>: The use of this operation to submit tax information is subject to the <a href=\"http://aws.amazon.com/service-terms/\">Amazon Web Services service terms</a>. By submitting, you’re providing consent for Amazon Web Services to validate NIK, NPWP, and NITKU data, provided by you with the Directorate General of Taxes of Indonesia in accordance with the Minister of Finance Regulation (PMK) Number 112/PMK.03/2022, through our third-party partner PT Achilles Advanced Management (OnlinePajak).</p> </li> <li> <p>You must specify the <code>taxRegistrationNumberType</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If you specify <code>decisionNumber</code>, you must specify the <code>ppnExceptionDesignationCode</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. If the <code>taxRegistrationNumberType</code> is set to NPWP or NITKU, valid values for <code>ppnExceptionDesignationCode</code> are either <code>01</code>, <code>02</code>, <code>03</code>, <code>07</code>, or <code>08</code>.</p> <p>For other <code>taxRegistrationNumberType</code> values, <code>ppnExceptionDesignationCode</code> must be either <code>01</code>, <code>07</code>, or <code>08</code>.</p> </li> <li> <p>If <code>ppnExceptionDesignationCode</code> is <code>07</code>, you must specify the <code>decisionNumber</code> in the <code>indonesiaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> </ul> <p> <b>Kenya</b> </p> <ul> <li> <p>You must specify the <code>personType</code> in the <code>kenyaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>personType</code> is <code>Physical Person</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Malaysia</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> <li> <p> <code>RegistrationType</code> valid values are <code>NRIC</code> for individual, and TIN and sales and service tax (SST) for Business.</p> </li> <li> <p>For individual, you can specify the <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with NRIC type, and a valid <code>MyKad</code> or NRIC number.</p> </li> <li> <p>For business, you must specify a <code>businessRegistrationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a TIN type and tax identification number.</p> </li> <li> <p>For business resellers, you must specify a <code>businessRegistrationNumber</code> and <code>taxInformationNumber</code> in <code>MalaysiaAdditionalInfo</code> with a sales and service tax (SST) type and a valid SST number.</p> </li> <li> <p>For business resellers with service codes, you must specify <code>businessRegistrationNumber</code>, <code>taxInformationNumber</code>, and distinct <code>serviceTaxCodes</code> in <code>MalaysiaAdditionalInfo</code> with a SST type and valid sales and service tax (SST) number. By using this API operation, Amazon Web Services registers your self-declaration that you’re an authorized business reseller registered with the Royal Malaysia Customs Department (RMCD), and have a valid SST number.</p> </li> <li> <p>Amazon Web Services reserves the right to seek additional information and/or take other actions to support your self-declaration as appropriate.</p> </li> <li> <p>Amazon Web Services is currently registered under the following service tax codes. You must include at least one of the service tax codes in the service tax code strings to declare yourself as an authorized registered business reseller.</p> <p>Taxable service and service tax codes:</p> <p>Consultancy - 9907061674</p> <p>Training or coaching service - 9907071685</p> <p>IT service - 9907101676</p> <p>Digital services and electronic medium - 9907121690</p> </li> </ul> <p> <b>Nepal</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul> <p> <b>Saudi Arabia</b> </p> <ul> <li> <p>For <code>address</code>, you must specify <code>addressLine3</code>.</p> </li> </ul> <p> <b>South Korea</b> </p> <ul> <li> <p>You must specify the <code>certifiedEmailId</code> and <code>legalName</code> in the <code>TaxRegistrationEntry</code> object. Use Korean characters for <code>legalName</code>.</p> </li> <li> <p>You must specify the <code>businessRepresentativeName</code>, <code>itemOfBusiness</code>, and <code>lineOfBusiness</code> in the <code>southKoreaAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object. Use Korean characters for these fields.</p> </li> <li> <p>You must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> <li> <p>For the <code>address</code> object, use Korean characters for <code>addressLine1</code>, <code>addressLine2</code> <code>city</code>, <code>postalCode</code>, and <code>stateOrRegion</code>.</p> </li> </ul> <p> <b>Spain</b> </p> <ul> <li> <p>You must specify the <code>registrationType</code> in the <code>spainAdditionalInfo</code> field of the <code>additionalTaxInformation</code> object.</p> </li> <li> <p>If the <code>registrationType</code> is <code>Local</code>, you must specify the tax registration certificate document in the <code>taxRegistrationDocuments</code> field of the <code>VerificationDetails</code> object.</p> </li> </ul> <p> <b>Turkey</b> </p> <ul> <li> <p>You must specify the <code>sector</code> in the <code>taxRegistrationEntry</code> object.</p> </li> <li> <p>If your <code>sector</code> is <code>Business</code>, <code>Individual</code>, or <code>Government</code>:</p> <ul> <li> <p>Specify the <code>taxOffice</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p>(Optional) Specify the <code>kepEmailId</code>. If your <code>sector</code> is <code>Individual</code>, don't enter this value.</p> </li> <li> <p> <b>Note:</b> In the <b>Tax Settings</b> page of the Billing console, <code>Government</code> appears as <b>Public institutions</b> </p> </li> </ul> </li> <li> <p>If your <code>sector</code> is <code>Business</code> and you're subject to KDV tax, you must specify your industry in the <code>industries</code> field.</p> </li> <li> <p>For <code>address</code>, you must specify <code>districtOrCounty</code>.</p> </li> </ul> <p> <b>Ukraine</b> </p> <ul> <li> <p>The sector valid values are <code>Business</code> and <code>Individual</code>.</p> </li> </ul>"
     }
   },
   "shapes":{
@@ -283,7 +283,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>The access is denied for the Amazon Web Services Support API. </p>",
+      "documentation":"<p>The access is denied for the Amazon Web ServicesSupport API. </p>",
       "error":{
         "httpStatusCode":401,
         "senderFault":true
@@ -325,9 +325,7 @@
     },
     "AccountIds":{
       "type":"list",
-      "member":{"shape":"AccountId"},
-      "max":5,
-      "min":1
+      "member":{"shape":"AccountId"}
     },
     "AccountMetaData":{
       "type":"structure",
@@ -364,6 +362,10 @@
           "shape":"CanadaAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Canada.</p>"
         },
+        "egyptAdditionalInfo":{
+          "shape":"EgyptAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Egypt. </p>"
+        },
         "estoniaAdditionalInfo":{
           "shape":"EstoniaAdditionalInfo",
           "documentation":"<p> Additional tax information to specify for a TRN in Estonia.</p>"
@@ -372,6 +374,14 @@
           "shape":"GeorgiaAdditionalInfo",
           "documentation":"<p> Additional tax information to specify for a TRN in Georgia. </p>"
         },
+        "greeceAdditionalInfo":{
+          "shape":"GreeceAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Greece.</p>"
+        },
+        "indonesiaAdditionalInfo":{
+          "shape":"IndonesiaAdditionalInfo",
+          "documentation":"<p> </p>"
+        },
         "israelAdditionalInfo":{
           "shape":"IsraelAdditionalInfo",
           "documentation":"<p> Additional tax information to specify for a TRN in Israel.</p>"
@@ -415,6 +425,14 @@
         "ukraineAdditionalInfo":{
           "shape":"UkraineAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Ukraine. </p>"
+        },
+        "uzbekistanAdditionalInfo":{
+          "shape":"UzbekistanAdditionalInfo",
+          "documentation":"<p> Additional tax information to specify for a TRN in Uzbekistan. </p>"
+        },
+        "vietnamAdditionalInfo":{
+          "shape":"VietnamAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Vietnam. </p>"
         }
       },
       "documentation":"<p>Additional tax information associated with your tax registration number (TRN). Depending on the TRN for a specific country, you might need to specify this information when you set your TRN. </p> <p>You can only specify one of the following parameters and the value can't be empty. </p> <note> <p>The parameter that you specify must match the country for the TRN, if available. For example, if you set a TRN in Canada for specific provinces, you must also specify the <code>canadaAdditionalInfo</code> parameter.</p> </note>"
@@ -430,6 +448,10 @@
           "shape":"CanadaAdditionalInfo",
           "documentation":"<p>Additional tax information associated with your TRN in Canada. </p>"
         },
+        "egyptAdditionalInfo":{
+          "shape":"EgyptAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Egypt. </p>"
+        },
         "estoniaAdditionalInfo":{
           "shape":"EstoniaAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Estonia. </p>"
@@ -438,10 +460,18 @@
           "shape":"GeorgiaAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Georgia. </p>"
         },
+        "greeceAdditionalInfo":{
+          "shape":"GreeceAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Greece. </p>"
+        },
         "indiaAdditionalInfo":{
           "shape":"IndiaAdditionalInfo",
           "documentation":"<p> Additional tax information in India. </p>"
         },
+        "indonesiaAdditionalInfo":{
+          "shape":"IndonesiaAdditionalInfo",
+          "documentation":"<p>Additional tax information associated with your TRN in Indonesia.</p>"
+        },
         "israelAdditionalInfo":{
           "shape":"IsraelAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Israel.</p>"
@@ -485,6 +515,14 @@
         "ukraineAdditionalInfo":{
           "shape":"UkraineAdditionalInfo",
           "documentation":"<p> Additional tax information associated with your TRN in Ukraine. </p>"
+        },
+        "uzbekistanAdditionalInfo":{
+          "shape":"UzbekistanAdditionalInfo",
+          "documentation":"<p> Additional tax information associated with your TRN in Uzbekistan. </p>"
+        },
+        "vietnamAdditionalInfo":{
+          "shape":"VietnamAdditionalInfo",
+          "documentation":"<p>Additional tax information to specify for a TRN in Vietnam. </p>"
         }
       },
       "documentation":"<p> Additional tax information associated with your TRN. The Tax Settings API returns country-specific information in the response when any additional information is present with your TRN for the following countries.</p>"
@@ -570,7 +608,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>Failed to upload the tax exemption document to Amazon Web Services Support case. </p>",
+      "documentation":"<p>Failed to upload the tax exemption document to Amazon Web ServicesSupport case. </p>",
       "error":{
         "httpStatusCode":400,
         "senderFault":true
@@ -627,11 +665,17 @@
       "required":["accountIds"],
       "members":{
         "accountIds":{
-          "shape":"AccountIds",
+          "shape":"BatchDeleteTaxRegistrationRequestAccountIdsList",
           "documentation":"<p>List of unique account identifiers. </p>"
         }
       }
     },
+    "BatchDeleteTaxRegistrationRequestAccountIdsList":{
+      "type":"list",
+      "member":{"shape":"AccountId"},
+      "max":5,
+      "min":1
+    },
     "BatchDeleteTaxRegistrationResponse":{
       "type":"structure",
       "required":["errors"],
@@ -647,11 +691,17 @@
       "required":["accountIds"],
       "members":{
         "accountIds":{
-          "shape":"AccountIds",
+          "shape":"BatchGetTaxExemptionsRequestAccountIdsList",
           "documentation":"<p> List of unique account identifiers. </p>"
         }
       }
     },
+    "BatchGetTaxExemptionsRequestAccountIdsList":{
+      "type":"list",
+      "member":{"shape":"AccountId"},
+      "max":5,
+      "min":1
+    },
     "BatchGetTaxExemptionsResponse":{
       "type":"structure",
       "members":{
@@ -699,7 +749,7 @@
       ],
       "members":{
         "accountIds":{
-          "shape":"AccountIds",
+          "shape":"BatchPutTaxRegistrationRequestAccountIdsList",
           "documentation":"<p> List of unique account identifiers.</p>"
         },
         "taxRegistrationEntry":{
@@ -708,6 +758,12 @@
         }
       }
     },
+    "BatchPutTaxRegistrationRequestAccountIdsList":{
+      "type":"list",
+      "member":{"shape":"AccountId"},
+      "max":550,
+      "min":1
+    },
     "BatchPutTaxRegistrationResponse":{
       "type":"structure",
       "required":["errors"],
@@ -792,7 +848,7 @@
       "members":{
         "message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>You've exceeded the Amazon Web Services Support case creation limit for your account. </p>",
+      "documentation":"<p>You've exceeded the Amazon Web ServicesSupport case creation limit for your account. </p>",
       "error":{
         "httpStatusCode":413,
         "senderFault":true
@@ -839,6 +895,10 @@
       },
       "exception":true
     },
+    "ContractingAuthorityCode":{
+      "type":"string",
+      "pattern":"^\\d{4}\\.[A-Z]\\d{5}\\.\\d{4}$"
+    },
     "CountryCode":{
       "type":"string",
       "max":2,
@@ -855,6 +915,14 @@
       "min":10,
       "pattern":"^(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))$"
     },
+    "DateString":{
+      "type":"string",
+      "pattern":"^(\\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1]))$"
+    },
+    "DecisionNumber":{
+      "type":"string",
+      "pattern":"^([a-zA-Z0-9/.\\-]{0,200})$"
+    },
     "DeleteSupplementalTaxRegistrationRequest":{
       "type":"structure",
       "required":["authorityId"],
@@ -915,6 +983,28 @@
       "min":1,
       "pattern":"^(?!\\s*$)[\\s\\S]+$"
     },
+    "EgyptAdditionalInfo":{
+      "type":"structure",
+      "members":{
+        "uniqueIdentificationNumber":{
+          "shape":"UniqueIdentificationNumber",
+          "documentation":"<p>The unique identification number provided by the Egypt Tax Authority.</p>"
+        },
+        "uniqueIdentificationNumberExpirationDate":{
+          "shape":"DateString",
+          "documentation":"<p>The expiration date of the unique identification number provided by the Egypt Tax Authority.</p>"
+        }
+      },
+      "documentation":"<p>Additional tax information to specify for a TRN in Egypt.</p>"
+    },
+    "ElectronicTransactionCodeNumber":{
+      "type":"string",
+      "pattern":"^\\d{17}$"
+    },
+    "EnterpriseIdentificationNumber":{
+      "type":"string",
+      "pattern":"^(\\d{10}|(\\d{10}-\\d{3}))$"
+    },
     "EntityExemptionAccountStatus":{
       "type":"string",
       "enum":[
@@ -1076,6 +1166,16 @@
         }
       }
     },
+    "GreeceAdditionalInfo":{
+      "type":"structure",
+      "members":{
+        "contractingAuthorityCode":{
+          "shape":"ContractingAuthorityCode",
+          "documentation":"<p>The code of contracting authority for e-invoicing.</p>"
+        }
+      },
+      "documentation":"<p>Additional tax information to specify for a TRN in Greece. </p>"
+    },
     "HeritageStatus":{
       "type":"string",
       "enum":[
@@ -1097,6 +1197,33 @@
       "type":"string",
       "pattern":"^([0-9]{10})$"
     },
+    "IndonesiaAdditionalInfo":{
+      "type":"structure",
+      "members":{
+        "decisionNumber":{
+          "shape":"DecisionNumber",
+          "documentation":"<p>VAT-exempt customers have a Directorate General of Taxation (DGT) exemption letter or certificate (Surat Keterangan Bebas) decision number. Non-collected VAT have a DGT letter or certificate (Surat Keterangan Tidak Dipungut).</p>"
+        },
+        "ppnExceptionDesignationCode":{
+          "shape":"PpnExceptionDesignationCode",
+          "documentation":"<p>Exception code if you are designated by Directorate General of Taxation (DGT) as a VAT collector, non-collected VAT, or VAT-exempt customer.</p>"
+        },
+        "taxRegistrationNumberType":{
+          "shape":"IndonesiaTaxRegistrationNumberType",
+          "documentation":"<p>The tax registration number type.</p>"
+        }
+      },
+      "documentation":"<p>Additional tax information associated with your TRN in Indonesia.</p>"
+    },
+    "IndonesiaTaxRegistrationNumberType":{
+      "type":"string",
+      "enum":[
+        "NIK",
+        "PassportNumber",
+        "NPWP",
+        "NITKU"
+      ]
+    },
     "Industries":{
       "type":"string",
       "enum":[
@@ -1367,6 +1494,10 @@
       "type":"string",
       "pattern":"^[A-Z]{5}[0-9]{4}[A-Z]{1}$"
     },
+    "PaymentVoucherNumber":{
+      "type":"string",
+      "pattern":"^(\\d{17}|[A-Za-z]{3}\\d{13})$"
+    },
     "PersonType":{
       "type":"string",
       "enum":[
@@ -1395,6 +1526,10 @@
       "min":1,
       "pattern":"^(?!\\s*$)[\\s\\S]+$"
     },
+    "PpnExceptionDesignationCode":{
+      "type":"string",
+      "pattern":"^(01|02|03|07|08)$"
+    },
     "PutSupplementalTaxRegistrationRequest":{
       "type":"structure",
       "required":["taxRegistrationEntry"],
@@ -1432,17 +1567,23 @@
       ],
       "members":{
         "accountIds":{
-          "shape":"AccountIds",
+          "shape":"PutTaxExemptionRequestAccountIdsList",
           "documentation":"<p> The list of unique account identifiers. </p>"
         },
         "authority":{"shape":"Authority"},
         "exemptionCertificate":{"shape":"ExemptionCertificate"},
         "exemptionType":{
           "shape":"GenericString",
-          "documentation":"<p>The exemption type. </p>"
+          "documentation":"<p>The exemption type. Use the supported tax exemption type description. </p>"
         }
       }
     },
+    "PutTaxExemptionRequestAccountIdsList":{
+      "type":"list",
+      "member":{"shape":"AccountId"},
+      "max":550,
+      "min":1
+    },
     "PutTaxExemptionResponse":{
       "type":"structure",
       "members":{
@@ -1900,7 +2041,7 @@
         },
         "registrationType":{
           "shape":"TaxRegistrationType",
-          "documentation":"<p>Type of your tax registration. This can be either <code>VAT</code> or <code>GST</code>. </p>"
+          "documentation":"<p>Type of your tax registration. </p>"
         },
         "sector":{
           "shape":"Sector",
@@ -2118,12 +2259,37 @@
         "Individual"
       ]
     },
+    "UniqueIdentificationNumber":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9]{39}$"
+    },
     "Url":{
       "type":"string",
       "max":200,
       "min":1,
       "pattern":"^https.*\\S.*$"
     },
+    "UzbekistanAdditionalInfo":{
+      "type":"structure",
+      "members":{
+        "taxRegistrationNumberType":{
+          "shape":"UzbekistanTaxRegistrationNumberType",
+          "documentation":"<p> The tax registration number type. The tax registration number type valid values are <code>Business</code> and <code>Individual</code>. </p>"
+        },
+        "vatRegistrationNumber":{
+          "shape":"VatRegistrationNumber",
+          "documentation":"<p> The unique 12-digit number issued to identify VAT-registered identities in Uzbekistan. </p>"
+        }
+      },
+      "documentation":"<p> Additional tax information to specify for a TRN in Uzbekistan. </p>"
+    },
+    "UzbekistanTaxRegistrationNumberType":{
+      "type":"string",
+      "enum":[
+        "Business",
+        "Individual"
+      ]
+    },
     "ValidationException":{
       "type":"structure",
       "required":[
@@ -2173,6 +2339,10 @@
       "type":"list",
       "member":{"shape":"ValidationExceptionField"}
     },
+    "VatRegistrationNumber":{
+      "type":"string",
+      "pattern":"^[0-9]{12}$"
+    },
     "VerificationDetails":{
       "type":"structure",
       "members":{
@@ -2186,6 +2356,28 @@
         }
       },
       "documentation":"<p>Required information to verify your TRN.</p>"
+    },
+    "VietnamAdditionalInfo":{
+      "type":"structure",
+      "members":{
+        "electronicTransactionCodeNumber":{
+          "shape":"ElectronicTransactionCodeNumber",
+          "documentation":"<p>The electronic transaction code number on the tax return document. This field must be provided for successful API operation.</p>"
+        },
+        "enterpriseIdentificationNumber":{
+          "shape":"EnterpriseIdentificationNumber",
+          "documentation":"<p>The enterprise identification number for tax registration. This field must be provided for successful API operation.</p>"
+        },
+        "paymentVoucherNumber":{
+          "shape":"PaymentVoucherNumber",
+          "documentation":"<p>The payment voucher number on the tax return payment document. This field must be provided for successful API operation.</p>"
+        },
+        "paymentVoucherNumberDate":{
+          "shape":"DateString",
+          "documentation":"<p>The date on the tax return payment document. This field must be provided for successful API operation.</p>"
+        }
+      },
+      "documentation":"<p>Additional tax information to specify for a TRN in Vietnam.</p>"
     }
   },
   "documentation":"<p>You can use the tax setting API to programmatically set, modify, and delete the tax registration number (TRN), associated business legal name, and address (Collectively referred to as \"TRN information\"). You can also programmatically view TRN information and tax addresses (\"Tax profiles\"). </p> <p>You can use this API to automate your TRN information settings instead of manually using the console.</p> <p>Service Endpoint</p> <ul> <li> <p>https://tax.us-east-1.amazonaws.com</p> </li> </ul>"
diff -pruN 2.23.6-1/awscli/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/textract/2018-06-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/textract/2018-06-27/service-2.json 2.31.35-1/awscli/botocore/data/textract/2018-06-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/textract/2018-06-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/textract/2018-06-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,11 +5,13 @@
     "endpointPrefix":"textract",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Textract",
     "serviceId":"Textract",
     "signatureVersion":"v4",
     "targetPrefix":"Textract",
-    "uid":"textract-2018-06-27"
+    "uid":"textract-2018-06-27",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AnalyzeDocument":{
@@ -428,7 +430,7 @@
         {"shape":"ThrottlingException"},
         {"shape":"LimitExceededException"}
       ],
-      "documentation":"<p>Starts the asynchronous detection of text in a document. Amazon Textract can detect lines of text and the words that make up a line of text.</p> <p> <code>StartDocumentTextDetection</code> can analyze text in documents that are in JPEG, PNG, TIFF, and PDF format. The documents are stored in an Amazon S3 bucket. Use <a>DocumentLocation</a> to specify the bucket name and file name of the document. </p> <p> <code>StartTextDetection</code> returns a job identifier (<code>JobId</code>) that you use to get the results of the operation. When text detection is finished, Amazon Textract publishes a completion status to the Amazon Simple Notification Service (Amazon SNS) topic that you specify in <code>NotificationChannel</code>. To get the results of the text detection operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetDocumentTextDetection</a>, and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartDocumentTextDetection</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/textract/latest/dg/how-it-works-detecting.html\">Document Text Detection</a>.</p>"
+      "documentation":"<p>Starts the asynchronous detection of text in a document. Amazon Textract can detect lines of text and the words that make up a line of text.</p> <p> <code>StartDocumentTextDetection</code> can analyze text in documents that are in JPEG, PNG, TIFF, and PDF format. The documents are stored in an Amazon S3 bucket. Use <a>DocumentLocation</a> to specify the bucket name and file name of the document. </p> <p> <code>StartDocumentTextDetection</code> returns a job identifier (<code>JobId</code>) that you use to get the results of the operation. When text detection is finished, Amazon Textract publishes a completion status to the Amazon Simple Notification Service (Amazon SNS) topic that you specify in <code>NotificationChannel</code>. To get the results of the text detection operation, first check that the status value published to the Amazon SNS topic is <code>SUCCEEDED</code>. If so, call <a>GetDocumentTextDetection</a>, and pass the job identifier (<code>JobId</code>) from the initial call to <code>StartDocumentTextDetection</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/textract/latest/dg/how-it-works-detecting.html\">Document Text Detection</a>.</p>"
     },
     "StartExpenseAnalysis":{
       "name":"StartExpenseAnalysis",
@@ -541,8 +543,7 @@
   "shapes":{
     "AccessDeniedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>You aren't authorized to perform the action. Use the Amazon Resource Name (ARN) of an authorized user or IAM role to perform the operation.</p>",
       "exception":true
     },
@@ -838,6 +839,7 @@
         }
       }
     },
+    "Angle":{"type":"float"},
     "AutoUpdate":{
       "type":"string",
       "enum":[
@@ -847,8 +849,7 @@
     },
     "BadDocumentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Textract isn't able to read the document. For more information on the document limits in Amazon Textract, see <a>limits</a>.</p>",
       "exception":true
     },
@@ -857,7 +858,7 @@
       "members":{
         "BlockType":{
           "shape":"BlockType",
-          "documentation":"<p>The type of text item that's recognized. In operations for text detection, the following types are returned:</p> <ul> <li> <p> <i>PAGE</i> - Contains a list of the LINE <code>Block</code> objects that are detected on a document page.</p> </li> <li> <p> <i>WORD</i> - A word detected on a document page. A word is one or more ISO basic Latin script characters that aren't separated by spaces.</p> </li> <li> <p> <i>LINE</i> - A string of tab-delimited, contiguous words that are detected on a document page.</p> </li> </ul> <p>In text analysis operations, the following types are returned:</p> <ul> <li> <p> <i>PAGE</i> - Contains a list of child <code>Block</code> objects that are detected on a document page.</p> </li> <li> <p> <i>KEY_VALUE_SET</i> - Stores the KEY and VALUE <code>Block</code> objects for linked text that's detected on a document page. Use the <code>EntityType</code> field to determine if a KEY_VALUE_SET object is a KEY <code>Block</code> object or a VALUE <code>Block</code> object. </p> </li> <li> <p> <i>WORD</i> - A word that's detected on a document page. A word is one or more ISO basic Latin script characters that aren't separated by spaces.</p> </li> <li> <p> <i>LINE</i> - A string of tab-delimited, contiguous words that are detected on a document page.</p> </li> <li> <p> <i>TABLE</i> - A table that's detected on a document page. A table is grid-based information with two or more rows or columns, with a cell span of one row and one column each. </p> </li> <li> <p> <i>TABLE_TITLE</i> - The title of a table. A title is typically a line of text above or below a table, or embedded as the first row of a table. </p> </li> <li> <p> <i>TABLE_FOOTER</i> - The footer associated with a table. A footer is typically a line or lines of text below a table or embedded as the last row of a table. </p> </li> <li> <p> <i>CELL</i> - A cell within a detected table. The cell is the parent of the block that contains the text in the cell.</p> </li> <li> <p> <i>MERGED_CELL</i> - A cell in a table whose content spans more than one row or column. The <code>Relationships</code> array for this cell contain data from individual cells.</p> </li> <li> <p> <i>SELECTION_ELEMENT</i> - A selection element such as an option button (radio button) or a check box that's detected on a document page. Use the value of <code>SelectionStatus</code> to determine the status of the selection element.</p> </li> <li> <p> <i>SIGNATURE</i> - The location and confidence score of a signature detected on a document page. Can be returned as part of a Key-Value pair or a detected cell.</p> </li> <li> <p> <i>QUERY</i> - A question asked during the call of AnalyzeDocument. Contains an alias and an ID that attaches it to its answer.</p> </li> <li> <p> <i>QUERY_RESULT</i> - A response to a question asked during the call of analyze document. Comes with an alias and ID for ease of locating in a response. Also contains location and confidence score.</p> </li> </ul> <p>The following BlockTypes are only returned for Amazon Textract Layout.</p> <ul> <li> <p> <code>LAYOUT_TITLE</code> - The main title of the document.</p> </li> <li> <p> <code>LAYOUT_HEADER</code> - Text located in the top margin of the document.</p> </li> <li> <p> <code>LAYOUT_FOOTER</code> - Text located in the bottom margin of the document.</p> </li> <li> <p> <code>LAYOUT_SECTION_HEADER</code> - The titles of sections within a document.</p> </li> <li> <p> <code>LAYOUT_PAGE_NUMBER</code> - The page number of the documents.</p> </li> <li> <p> <code>LAYOUT_LIST</code> - Any information grouped together in list form. </p> </li> <li> <p> <code>LAYOUT_FIGURE</code> - Indicates the location of an image in a document.</p> </li> <li> <p> <code>LAYOUT_TABLE</code> - Indicates the location of a table in the document.</p> </li> <li> <p> <code>LAYOUT_KEY_VALUE</code> - Indicates the location of form key-values in a document.</p> </li> <li> <p> <code>LAYOUT_TEXT</code> - Text that is present typically as a part of paragraphs in documents.</p> </li> </ul>"
+          "documentation":"<p>The type of text item that's recognized. In operations for text detection, the following types are returned:</p> <ul> <li> <p> <i>PAGE</i> - Contains a list of the LINE <code>Block</code> objects that are detected on a document page.</p> </li> <li> <p> <i>WORD</i> - A word detected on a document page. A word is one or more ISO basic Latin script characters that aren't separated by spaces.</p> </li> <li> <p> <i>LINE</i> - A string of space-delimited, contiguous words that are detected on a document page.</p> </li> </ul> <p>In text analysis operations, the following types are returned:</p> <ul> <li> <p> <i>PAGE</i> - Contains a list of child <code>Block</code> objects that are detected on a document page.</p> </li> <li> <p> <i>KEY_VALUE_SET</i> - Stores the KEY and VALUE <code>Block</code> objects for linked text that's detected on a document page. Use the <code>EntityType</code> field to determine if a KEY_VALUE_SET object is a KEY <code>Block</code> object or a VALUE <code>Block</code> object. </p> </li> <li> <p> <i>WORD</i> - A word that's detected on a document page. A word is one or more ISO basic Latin script characters that aren't separated by spaces.</p> </li> <li> <p> <i>LINE</i> - A string of tab-delimited, contiguous words that are detected on a document page.</p> </li> <li> <p> <i>TABLE</i> - A table that's detected on a document page. A table is grid-based information with two or more rows or columns, with a cell span of one row and one column each. </p> </li> <li> <p> <i>TABLE_TITLE</i> - The title of a table. A title is typically a line of text above or below a table, or embedded as the first row of a table. </p> </li> <li> <p> <i>TABLE_FOOTER</i> - The footer associated with a table. A footer is typically a line or lines of text below a table or embedded as the last row of a table. </p> </li> <li> <p> <i>CELL</i> - A cell within a detected table. The cell is the parent of the block that contains the text in the cell.</p> </li> <li> <p> <i>MERGED_CELL</i> - A cell in a table whose content spans more than one row or column. The <code>Relationships</code> array for this cell contain data from individual cells.</p> </li> <li> <p> <i>SELECTION_ELEMENT</i> - A selection element such as an option button (radio button) or a check box that's detected on a document page. Use the value of <code>SelectionStatus</code> to determine the status of the selection element.</p> </li> <li> <p> <i>SIGNATURE</i> - The location and confidence score of a signature detected on a document page. Can be returned as part of a Key-Value pair or a detected cell.</p> </li> <li> <p> <i>QUERY</i> - A question asked during the call of AnalyzeDocument. Contains an alias and an ID that attaches it to its answer.</p> </li> <li> <p> <i>QUERY_RESULT</i> - A response to a question asked during the call of analyze document. Comes with an alias and ID for ease of locating in a response. Also contains location and confidence score.</p> </li> </ul> <p>The following BlockTypes are only returned for Amazon Textract Layout.</p> <ul> <li> <p> <code>LAYOUT_TITLE</code> - The main title of the document.</p> </li> <li> <p> <code>LAYOUT_HEADER</code> - Text located in the top margin of the document.</p> </li> <li> <p> <code>LAYOUT_FOOTER</code> - Text located in the bottom margin of the document.</p> </li> <li> <p> <code>LAYOUT_SECTION_HEADER</code> - The titles of sections within a document.</p> </li> <li> <p> <code>LAYOUT_PAGE_NUMBER</code> - The page number of the documents.</p> </li> <li> <p> <code>LAYOUT_LIST</code> - Any information grouped together in list form. </p> </li> <li> <p> <code>LAYOUT_FIGURE</code> - Indicates the location of an image in a document.</p> </li> <li> <p> <code>LAYOUT_TABLE</code> - Indicates the location of a table in the document.</p> </li> <li> <p> <code>LAYOUT_KEY_VALUE</code> - Indicates the location of form key-values in a document.</p> </li> <li> <p> <code>LAYOUT_TEXT</code> - Text that is present typically as a part of paragraphs in documents.</p> </li> </ul>"
         },
         "Confidence":{
           "shape":"Percent",
@@ -981,8 +982,7 @@
     },
     "ConflictException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Updating or deleting a resource can cause an inconsistent state.</p>",
       "exception":true
     },
@@ -1099,8 +1099,7 @@
     },
     "DeleteAdapterResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAdapterVersionRequest":{
       "type":"structure",
@@ -1121,8 +1120,7 @@
     },
     "DeleteAdapterVersionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DetectDocumentTextRequest":{
       "type":"structure",
@@ -1233,8 +1231,7 @@
     },
     "DocumentTooLargeException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The document can't be processed because it's too large. The maximum document size for synchronous operations 10 MB. The maximum document size for asynchronous operations is 500 MB for PDF files.</p>",
       "exception":true
     },
@@ -1441,6 +1438,10 @@
         "Polygon":{
           "shape":"Polygon",
           "documentation":"<p>Within the bounding box, a fine-grained polygon around the recognized item.</p>"
+        },
+        "RotationAngle":{
+          "shape":"Angle",
+          "documentation":"<p>Provides a numerical value corresponding to the rotation of the text.</p>"
         }
       },
       "documentation":"<p>Information about where the following items are located on a document page: detected page, text, key-value pairs, tables, table cells, and selection elements.</p>"
@@ -1884,8 +1885,7 @@
     },
     "IdempotentParameterMismatchException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>A <code>ClientRequestToken</code> input parameter was reused with an operation, but at least one of the other input parameters is different from the previous call to the operation. </p>",
       "exception":true
     },
@@ -1930,37 +1930,32 @@
     },
     "InternalServerError":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Textract experienced a service issue. Try your call again.</p>",
       "exception":true,
       "fault":true
     },
     "InvalidJobIdException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An invalid job identifier was passed to an asynchronous analysis operation.</p>",
       "exception":true
     },
     "InvalidKMSKeyException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Indicates you do not have decrypt permissions with the KMS key entered, or the KMS key was entered incorrectly. </p>",
       "exception":true
     },
     "InvalidParameterException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An input parameter violated a constraint. For example, in synchronous operations, an <code>InvalidParameterException</code> exception occurs when neither of the <code>S3Object</code> or <code>Bytes</code> values are supplied in the <code>Document</code> request parameter. Validate your parameter before calling the API operation again.</p>",
       "exception":true
     },
     "InvalidS3ObjectException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Textract is unable to access the S3 object that's specified in the request. for more information, <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html\">Configure Access to Amazon S3</a> For troubleshooting information, see <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/dev/troubleshooting.html\">Troubleshooting Amazon S3</a> </p>",
       "exception":true
     },
@@ -2085,8 +2080,7 @@
     },
     "LimitExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>An Amazon Textract service limit was exceeded. For example, if you start too many asynchronous jobs concurrently, calls to start operations (<code>StartDocumentTextDetection</code>, for example) raise a LimitExceededException exception (HTTP status code: 400) until the number of concurrently running jobs is below the Amazon Textract service limit. </p>",
       "exception":true
     },
@@ -2343,8 +2337,7 @@
     },
     "ProvisionedThroughputExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The number of requests exceeded your throughput limit. If you want to increase this limit, contact Amazon Textract.</p>",
       "exception":true
     },
@@ -2434,8 +2427,7 @@
     },
     "ResourceNotFoundException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Returned when an operation tried to access a nonexistent resource. </p>",
       "exception":true
     },
@@ -2460,7 +2452,7 @@
         },
         "Name":{
           "shape":"S3ObjectName",
-          "documentation":"<p>The file name of the input document. Synchronous operations can use image files that are in JPEG or PNG format. Asynchronous operations also support PDF and TIFF format files.</p>"
+          "documentation":"<p>The file name of the input document. Image files may be in PDF, TIFF, JPEG, or PNG format.</p>"
         },
         "Version":{
           "shape":"S3ObjectVersion",
@@ -2496,8 +2488,7 @@
     },
     "ServiceQuotaExceededException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Returned when a request cannot be completed as it would exceed a maximum service quota.</p>",
       "exception":true
     },
@@ -2737,8 +2728,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -2755,8 +2745,7 @@
     },
     "ThrottlingException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Amazon Textract is temporarily unable to process the request. Try your call again.</p>",
       "exception":true,
       "fault":true
@@ -2785,8 +2774,7 @@
     },
     "UnsupportedDocumentException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The format of the input document isn't supported. Documents for operations can be in PNG, JPEG, PDF, or TIFF format.</p>",
       "exception":true
     },
@@ -2809,8 +2797,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAdapterRequest":{
       "type":"structure",
@@ -2865,8 +2852,7 @@
     },
     "ValidationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p> Indicates that a request was not valid. Check request for proper formatting. </p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/paginators-1.json 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,18 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "items"
+    },
+    "ListDbClusters": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
+    },
+    "ListDbInstancesForCluster": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/service-2.json 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/service-2.json
--- 2.23.6-1/awscli/botocore/data/timestream-influxdb/2023-01-27/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-influxdb/2023-01-27/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,26 @@
     "uid":"timestream-influxdb-2023-01-27"
   },
   "operations":{
+    "CreateDbCluster":{
+      "name":"CreateDbCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateDbClusterInput"},
+      "output":{"shape":"CreateDbClusterOutput"},
+      "errors":[
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Creates a new Timestream for InfluxDB cluster.</p>",
+      "idempotent":true
+    },
     "CreateDbInstance":{
       "name":"CreateDbInstance",
       "http":{
@@ -55,6 +75,25 @@
       "documentation":"<p>Creates a new Timestream for InfluxDB DB parameter group to associate with DB instances.</p>",
       "idempotent":true
     },
+    "DeleteDbCluster":{
+      "name":"DeleteDbCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteDbClusterInput"},
+      "output":{"shape":"DeleteDbClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Deletes a Timestream for InfluxDB cluster.</p>",
+      "idempotent":true
+    },
     "DeleteDbInstance":{
       "name":"DeleteDbInstance",
       "http":{
@@ -74,6 +113,23 @@
       "documentation":"<p>Deletes a Timestream for InfluxDB DB instance.</p>",
       "idempotent":true
     },
+    "GetDbCluster":{
+      "name":"GetDbCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetDbClusterInput"},
+      "output":{"shape":"GetDbClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Retrieves information about a Timestream for InfluxDB cluster.</p>"
+    },
     "GetDbInstance":{
       "name":"GetDbInstance",
       "http":{
@@ -108,6 +164,23 @@
       ],
       "documentation":"<p>Returns a Timestream for InfluxDB DB parameter group.</p>"
     },
+    "ListDbClusters":{
+      "name":"ListDbClusters",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDbClustersInput"},
+      "output":{"shape":"ListDbClustersOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of Timestream for InfluxDB DB clusters.</p>"
+    },
     "ListDbInstances":{
       "name":"ListDbInstances",
       "http":{
@@ -125,6 +198,23 @@
       ],
       "documentation":"<p>Returns a list of Timestream for InfluxDB DB instances.</p>"
     },
+    "ListDbInstancesForCluster":{
+      "name":"ListDbInstancesForCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListDbInstancesForClusterInput"},
+      "output":{"shape":"ListDbInstancesForClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Returns a list of Timestream for InfluxDB clusters.</p>"
+    },
     "ListDbParameterGroups":{
       "name":"ListDbParameterGroups",
       "http":{
@@ -182,6 +272,25 @@
       "documentation":"<p>Removes the tag from the specified resource.</p>",
       "idempotent":true
     },
+    "UpdateDbCluster":{
+      "name":"UpdateDbCluster",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UpdateDbClusterInput"},
+      "output":{"shape":"UpdateDbClusterOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"}
+      ],
+      "documentation":"<p>Updates a Timestream for InfluxDB cluster.</p>",
+      "idempotent":true
+    },
     "UpdateDbInstance":{
       "name":"UpdateDbInstance",
       "http":{
@@ -215,14 +324,14 @@
     "AllocatedStorage":{
       "type":"integer",
       "box":true,
-      "max":16384,
+      "max":15360,
       "min":20
     },
     "Arn":{
       "type":"string",
       "max":1011,
       "min":1,
-      "pattern":"arn:aws[a-z\\-]*:timestream\\-influxdb:[a-z0-9\\-]+:[0-9]{12}:(db\\-instance|db\\-parameter\\-group)/[a-zA-Z0-9]{3,64}"
+      "pattern":"arn:aws[a-z\\-]*:timestream\\-influxdb:[a-z0-9\\-]+:[0-9]{12}:(db\\-instance|db\\-cluster|db\\-parameter\\-group)/[a-zA-Z0-9]{3,64}"
     },
     "Boolean":{
       "type":"boolean",
@@ -234,6 +343,22 @@
       "min":2,
       "pattern":"[^_\"][^\"]*"
     },
+    "ClusterDeploymentType":{
+      "type":"string",
+      "enum":["MULTI_NODE_READ_REPLICAS"]
+    },
+    "ClusterStatus":{
+      "type":"string",
+      "enum":[
+        "CREATING",
+        "UPDATING",
+        "DELETING",
+        "AVAILABLE",
+        "FAILED",
+        "DELETED",
+        "MAINTENANCE"
+      ]
+    },
     "ConflictException":{
       "type":"structure",
       "required":[
@@ -255,6 +380,102 @@
       "documentation":"<p>The request conflicts with an existing resource in Timestream for InfluxDB.</p>",
       "exception":true
     },
+    "CreateDbClusterInput":{
+      "type":"structure",
+      "required":[
+        "name",
+        "dbInstanceType",
+        "vpcSubnetIds",
+        "vpcSecurityGroupIds"
+      ],
+      "members":{
+        "name":{
+          "shape":"DbClusterName",
+          "documentation":"<p>The name that uniquely identifies the DB cluster when interacting with the Amazon Timestream for InfluxDB API and CLI commands. This name will also be a prefix included in the endpoint. DB cluster names must be unique per customer and per region.</p>"
+        },
+        "username":{
+          "shape":"Username",
+          "documentation":"<p>The username of the initial admin user created in InfluxDB. Must start with a letter and can't end with a hyphen or contain two consecutive hyphens. For example, my-user1. This username will allow you to access the InfluxDB UI to perform various administrative tasks and also use the InfluxDB CLI to create an operator token. These attributes will be stored in a secret created in Secrets Manager in your account.</p>"
+        },
+        "password":{
+          "shape":"Password",
+          "documentation":"<p>The password of the initial admin user created in InfluxDB. This password will allow you to access the InfluxDB UI to perform various administrative tasks and also use the InfluxDB CLI to create an operator token. These attributes will be stored in a secret created in Secrets Manager in your account.</p>"
+        },
+        "organization":{
+          "shape":"Organization",
+          "documentation":"<p>The name of the initial organization for the initial admin user in InfluxDB. An InfluxDB organization is a workspace for a group of users.</p>"
+        },
+        "bucket":{
+          "shape":"Bucket",
+          "documentation":"<p>The name of the initial InfluxDB bucket. All InfluxDB data is stored in a bucket. A bucket combines the concept of a database and a retention period (the duration of time that each data point persists). A bucket belongs to an organization.</p>"
+        },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The port number on which InfluxDB accepts connections.</p> <p>Valid Values: 1024-65535</p> <p>Default: 8086 for InfluxDB v2, 8181 for InfluxDB v3</p> <p>Constraints: The value can't be 2375-2376, 7788-7799, 8090, or 51678-51680</p>"
+        },
+        "dbParameterGroupIdentifier":{
+          "shape":"DbParameterGroupIdentifier",
+          "documentation":"<p>The ID of the DB parameter group to assign to your DB cluster. DB parameter groups specify how the database is configured. For example, DB parameter groups can specify the limit for query concurrency.</p>"
+        },
+        "dbInstanceType":{
+          "shape":"DbInstanceType",
+          "documentation":"<p>The Timestream for InfluxDB DB instance type to run InfluxDB on.</p>"
+        },
+        "dbStorageType":{
+          "shape":"DbStorageType",
+          "documentation":"<p>The Timestream for InfluxDB DB storage type to read and write InfluxDB data.</p> <p>You can choose between three different types of provisioned Influx IOPS Included storage according to your workload requirements:</p> <ul> <li> <p>Influx I/O Included 3000 IOPS</p> </li> <li> <p>Influx I/O Included 12000 IOPS</p> </li> <li> <p>Influx I/O Included 16000 IOPS</p> </li> </ul>"
+        },
+        "allocatedStorage":{
+          "shape":"AllocatedStorage",
+          "documentation":"<p>The amount of storage to allocate for your DB storage type in GiB (gibibytes).</p>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies whether the network type of the Timestream for InfluxDB cluster is IPv4, which can communicate over IPv4 protocol only, or DUAL, which can communicate over both IPv4 and IPv6 protocols.</p>"
+        },
+        "publiclyAccessible":{
+          "shape":"Boolean",
+          "documentation":"<p>Configures the Timestream for InfluxDB cluster with a public IP to facilitate access from outside the VPC.</p>"
+        },
+        "vpcSubnetIds":{
+          "shape":"VpcSubnetIdList",
+          "documentation":"<p>A list of VPC subnet IDs to associate with the DB cluster. Provide at least two VPC subnet IDs in different Availability Zones when deploying with a Multi-AZ standby.</p>"
+        },
+        "vpcSecurityGroupIds":{
+          "shape":"VpcSecurityGroupIdList",
+          "documentation":"<p>A list of VPC security group IDs to associate with the Timestream for InfluxDB cluster.</p>"
+        },
+        "deploymentType":{
+          "shape":"ClusterDeploymentType",
+          "documentation":"<p>Specifies the type of cluster to create.</p>"
+        },
+        "failoverMode":{
+          "shape":"FailoverMode",
+          "documentation":"<p>Specifies the behavior of failure recovery when the primary node of the cluster fails.</p>"
+        },
+        "logDeliveryConfiguration":{
+          "shape":"LogDeliveryConfiguration",
+          "documentation":"<p>Configuration for sending InfluxDB engine logs to a specified S3 bucket.</p>"
+        },
+        "tags":{
+          "shape":"RequestTagMap",
+          "documentation":"<p>A list of key-value pairs to associate with the DB instance.</p>"
+        }
+      }
+    },
+    "CreateDbClusterOutput":{
+      "type":"structure",
+      "members":{
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>A service-generated unique identifier.</p>"
+        },
+        "dbClusterStatus":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The status of the DB cluster.</p>"
+        }
+      }
+    },
     "CreateDbInstanceInput":{
       "type":"structure",
       "required":[
@@ -276,7 +497,7 @@
         },
         "password":{
           "shape":"Password",
-          "documentation":"<p>The password of the initial admin user created in InfluxDB. This password will allow you to access the InfluxDB UI to perform various administrative tasks and also use the InfluxDB CLI to create an operator token. These attributes will be stored in a Secret created in Amazon Web Services SecretManager in your account.</p>"
+          "documentation":"<p>The password of the initial admin user created in InfluxDB v2. This password will allow you to access the InfluxDB UI to perform various administrative tasks and also use the InfluxDB CLI to create an operator token. These attributes will be stored in a Secret created in Secrets Manager in your account.</p>"
         },
         "organization":{
           "shape":"Organization",
@@ -419,7 +640,19 @@
         },
         "influxAuthParametersSecretArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+        },
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Specifies the DbCluster to which this DbInstance belongs to.</p>"
+        },
+        "instanceMode":{
+          "shape":"InstanceMode",
+          "documentation":"<p>Specifies the DbInstance's role in the cluster.</p>"
+        },
+        "instanceModes":{
+          "shape":"InstanceModeList",
+          "documentation":"<p>Specifies the DbInstance's roles in the cluster.</p>"
         }
       }
     },
@@ -480,6 +713,159 @@
         }
       }
     },
+    "DataFusionRuntimeType":{
+      "type":"string",
+      "enum":[
+        "multi-thread",
+        "multi-thread-alt"
+      ]
+    },
+    "DbClusterId":{
+      "type":"string",
+      "max":64,
+      "min":3,
+      "pattern":"[a-zA-Z0-9]+"
+    },
+    "DbClusterName":{
+      "type":"string",
+      "max":40,
+      "min":3,
+      "pattern":"[a-zA-z][a-zA-Z0-9]*(-[a-zA-Z0-9]+)*"
+    },
+    "DbClusterSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "arn"
+      ],
+      "members":{
+        "id":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster to retrieve.</p>"
+        },
+        "name":{
+          "shape":"DbClusterName",
+          "documentation":"<p>Customer supplied name of the Timestream for InfluxDB cluster.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DB cluster.</p>"
+        },
+        "status":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The status of the DB cluster.</p>"
+        },
+        "endpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint used to connect to the Timestream for InfluxDB cluster for write and read operations.</p>"
+        },
+        "readerEndpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint used to connect to the Timestream for InfluxDB cluster for read-only operations.</p>"
+        },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The port number on which InfluxDB accepts connections.</p>"
+        },
+        "deploymentType":{
+          "shape":"ClusterDeploymentType",
+          "documentation":"<p>Deployment type of the DB cluster</p>"
+        },
+        "dbInstanceType":{
+          "shape":"DbInstanceType",
+          "documentation":"<p>The Timestream for InfluxDB DB instance type that InfluxDB runs on.</p>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies whether the network type of the Timestream for InfluxDB Cluster is IPv4, which can communicate over IPv4 protocol only, or DUAL, which can communicate over both IPv4 and IPv6 protocols.</p>"
+        },
+        "dbStorageType":{
+          "shape":"DbStorageType",
+          "documentation":"<p>The Timestream for InfluxDB DB storage type that InfluxDB stores data on.</p>"
+        },
+        "allocatedStorage":{
+          "shape":"AllocatedStorage",
+          "documentation":"<p>The amount of storage allocated for your DB storage type (in gibibytes).</p>"
+        },
+        "engineType":{
+          "shape":"EngineType",
+          "documentation":"<p>The engine type of your DB cluster.</p>"
+        }
+      },
+      "documentation":"<p>Describes a summary of a Timestream for InfluxDB cluster.</p>"
+    },
+    "DbClusterSummaryList":{
+      "type":"list",
+      "member":{"shape":"DbClusterSummary"}
+    },
+    "DbInstanceForClusterSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "arn"
+      ],
+      "members":{
+        "id":{
+          "shape":"DbInstanceId",
+          "documentation":"<p>The service-generated unique identifier of the DB instance.</p>"
+        },
+        "name":{
+          "shape":"DbInstanceName",
+          "documentation":"<p>A service-generated name for the DB instance based on the customer-supplied name for the DB cluster.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DB instance.</p>"
+        },
+        "status":{
+          "shape":"Status",
+          "documentation":"<p>The status of the DB instance.</p>"
+        },
+        "endpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint used to connect to InfluxDB. The default InfluxDB port is 8086.</p>"
+        },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The port number on which InfluxDB accepts connections.</p>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies whether the network type of the Timestream for InfluxDB instance is IPv4, which can communicate over IPv4 protocol only, or DUAL, which can communicate over both IPv4 and IPv6 protocols.</p>"
+        },
+        "dbInstanceType":{
+          "shape":"DbInstanceType",
+          "documentation":"<p>The Timestream for InfluxDB instance type to run InfluxDB on.</p>"
+        },
+        "dbStorageType":{
+          "shape":"DbStorageType",
+          "documentation":"<p>The storage type for your DB instance.</p>"
+        },
+        "allocatedStorage":{
+          "shape":"AllocatedStorage",
+          "documentation":"<p>The amount of storage allocated for your DB storage type in GiB (gibibytes).</p>"
+        },
+        "deploymentType":{
+          "shape":"DeploymentType",
+          "documentation":"<p>Specifies the deployment type if applicable.</p>"
+        },
+        "instanceMode":{
+          "shape":"InstanceMode",
+          "documentation":"<p>Specifies the DB instance's role in the cluster.</p>"
+        },
+        "instanceModes":{
+          "shape":"InstanceModeList",
+          "documentation":"<p>Specifies the DB instance's roles in the cluster.</p>"
+        }
+      },
+      "documentation":"<p>Contains a summary of a DB instance belonging to a DB cluster.</p>"
+    },
+    "DbInstanceForClusterSummaryList":{
+      "type":"list",
+      "member":{"shape":"DbInstanceForClusterSummary"}
+    },
     "DbInstanceId":{
       "type":"string",
       "max":64,
@@ -512,7 +898,7 @@
         },
         "name":{
           "shape":"DbInstanceName",
-          "documentation":"<p>This customer-supplied name uniquely identifies the DB instance when interacting with the Amazon Timestream for InfluxDB API and Amazon Web Services CLI commands.</p>"
+          "documentation":"<p>This customer-supplied name uniquely identifies the DB instance when interacting with the Amazon Timestream for InfluxDB API and CLI commands.</p>"
         },
         "arn":{
           "shape":"Arn",
@@ -567,7 +953,8 @@
         "db.influx.4xlarge",
         "db.influx.8xlarge",
         "db.influx.12xlarge",
-        "db.influx.16xlarge"
+        "db.influx.16xlarge",
+        "db.influx.24xlarge"
       ]
     },
     "DbParameterGroupId":{
@@ -627,6 +1014,25 @@
         "InfluxIOIncludedT3"
       ]
     },
+    "DeleteDbClusterInput":{
+      "type":"structure",
+      "required":["dbClusterId"],
+      "members":{
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster.</p>"
+        }
+      }
+    },
+    "DeleteDbClusterOutput":{
+      "type":"structure",
+      "members":{
+        "dbClusterStatus":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The status of the DB cluster.</p>"
+        }
+      }
+    },
     "DeleteDbInstanceInput":{
       "type":"structure",
       "required":["identifier"],
@@ -720,7 +1126,19 @@
         },
         "influxAuthParametersSecretArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+        },
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Specifies the DbCluster to which this DbInstance belongs to.</p>"
+        },
+        "instanceMode":{
+          "shape":"InstanceMode",
+          "documentation":"<p>Specifies the DbInstance's role in the cluster.</p>"
+        },
+        "instanceModes":{
+          "shape":"InstanceModeList",
+          "documentation":"<p>Specifies the DbInstance's roles in the cluster.</p>"
         }
       }
     },
@@ -755,7 +1173,8 @@
         "hours",
         "minutes",
         "seconds",
-        "milliseconds"
+        "milliseconds",
+        "days"
       ]
     },
     "DurationValueLong":{
@@ -763,6 +1182,121 @@
       "box":true,
       "min":0
     },
+    "EngineType":{
+      "type":"string",
+      "enum":[
+        "INFLUXDB_V2",
+        "INFLUXDB_V3_CORE",
+        "INFLUXDB_V3_ENTERPRISE"
+      ]
+    },
+    "FailoverMode":{
+      "type":"string",
+      "enum":[
+        "AUTOMATIC",
+        "NO_FAILOVER"
+      ]
+    },
+    "GetDbClusterInput":{
+      "type":"structure",
+      "required":["dbClusterId"],
+      "members":{
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster to retrieve.</p>"
+        }
+      }
+    },
+    "GetDbClusterOutput":{
+      "type":"structure",
+      "required":[
+        "id",
+        "name",
+        "arn"
+      ],
+      "members":{
+        "id":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster to retrieve.</p>"
+        },
+        "name":{
+          "shape":"DbClusterName",
+          "documentation":"<p>Customer-supplied name of the Timestream for InfluxDB cluster.</p>"
+        },
+        "arn":{
+          "shape":"Arn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the DB cluster.</p>"
+        },
+        "status":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The status of the DB cluster.</p>"
+        },
+        "endpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint used to connect to the Timestream for InfluxDB cluster for write and read operations.</p>"
+        },
+        "readerEndpoint":{
+          "shape":"String",
+          "documentation":"<p>The endpoint used to connect to the Timestream for InfluxDB cluster for read-only operations.</p>"
+        },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The port number on which InfluxDB accepts connections.</p>"
+        },
+        "deploymentType":{
+          "shape":"ClusterDeploymentType",
+          "documentation":"<p>Deployment type of the DB cluster.</p>"
+        },
+        "dbInstanceType":{
+          "shape":"DbInstanceType",
+          "documentation":"<p>The Timestream for InfluxDB instance type that InfluxDB runs on.</p>"
+        },
+        "networkType":{
+          "shape":"NetworkType",
+          "documentation":"<p>Specifies whether the network type of the Timestream for InfluxDB cluster is IPv4, which can communicate over IPv4 protocol only, or DUAL, which can communicate over both IPv4 and IPv6 protocols.</p>"
+        },
+        "dbStorageType":{
+          "shape":"DbStorageType",
+          "documentation":"<p>The Timestream for InfluxDB DB storage type that InfluxDB stores data on.</p>"
+        },
+        "allocatedStorage":{
+          "shape":"AllocatedStorage",
+          "documentation":"<p>The amount of storage allocated for your DB storage type (in gibibytes).</p>"
+        },
+        "engineType":{
+          "shape":"EngineType",
+          "documentation":"<p>The engine type of your DB cluster.</p>"
+        },
+        "publiclyAccessible":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if the DB cluster has a public IP to facilitate access from outside the VPC.</p>"
+        },
+        "dbParameterGroupIdentifier":{
+          "shape":"DbParameterGroupIdentifier",
+          "documentation":"<p>The ID of the DB parameter group assigned to your DB cluster.</p>"
+        },
+        "logDeliveryConfiguration":{
+          "shape":"LogDeliveryConfiguration",
+          "documentation":"<p>Configuration for sending InfluxDB engine logs to send to specified S3 bucket.</p>"
+        },
+        "influxAuthParametersSecretArn":{
+          "shape":"String",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+        },
+        "vpcSubnetIds":{
+          "shape":"VpcSubnetIdList",
+          "documentation":"<p>A list of VPC subnet IDs associated with the DB cluster.</p>"
+        },
+        "vpcSecurityGroupIds":{
+          "shape":"VpcSecurityGroupIdList",
+          "documentation":"<p>A list of VPC security group IDs associated with the DB cluster.</p>"
+        },
+        "failoverMode":{
+          "shape":"FailoverMode",
+          "documentation":"<p>The configured failover mode for the DB cluster.</p>"
+        }
+      }
+    },
     "GetDbInstanceInput":{
       "type":"structure",
       "required":["identifier"],
@@ -856,7 +1390,19 @@
         },
         "influxAuthParametersSecretArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+        },
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Specifies the DbCluster to which this DbInstance belongs to.</p>"
+        },
+        "instanceMode":{
+          "shape":"InstanceMode",
+          "documentation":"<p>Specifies the DbInstance's role in the cluster.</p>"
+        },
+        "instanceModes":{
+          "shape":"InstanceModeList",
+          "documentation":"<p>Specifies the DbInstance's roles in the cluster.</p>"
         }
       }
     },
@@ -961,7 +1507,7 @@
         },
         "pprofDisabled":{
           "shape":"Boolean",
-          "documentation":"<p>Disable the /debug/pprof HTTP endpoint. This endpoint provides runtime profiling data and can be helpful when debugging.</p> <p>Default: false</p>"
+          "documentation":"<p>Disable the /debug/pprof HTTP endpoint. This endpoint provides runtime profiling data and can be helpful when debugging.</p> <p>Default: true</p>"
         },
         "queryInitialMemoryBytes":{
           "shape":"InfluxDBv2ParametersQueryInitialMemoryBytesLong",
@@ -1144,6 +1690,655 @@
       "max":256,
       "min":0
     },
+    "InfluxDBv3CoreParameters":{
+      "type":"structure",
+      "members":{
+        "queryFileLimit":{
+          "shape":"InfluxDBv3CoreParametersQueryFileLimitInteger",
+          "documentation":"<p>Limits the number of Parquet files a query can access. If a query attempts to read more than this limit, InfluxDB 3 returns an error.</p> <p>Default: 432</p>"
+        },
+        "queryLogSize":{
+          "shape":"InfluxDBv3CoreParametersQueryLogSizeInteger",
+          "documentation":"<p>Defines the size of the query log. Up to this many queries remain in the log before older queries are evicted to make room for new ones.</p> <p>Default: 1000</p>"
+        },
+        "logFilter":{
+          "shape":"InfluxDBv3CoreParametersLogFilterString",
+          "documentation":"<p>Sets the filter directive for logs.</p>"
+        },
+        "logFormat":{
+          "shape":"LogFormats",
+          "documentation":"<p>Defines the message format for logs.</p> <p>Default: full</p>"
+        },
+        "dataFusionNumThreads":{
+          "shape":"InfluxDBv3CoreParametersDataFusionNumThreadsInteger",
+          "documentation":"<p>Sets the maximum number of DataFusion runtime threads to use.</p>"
+        },
+        "dataFusionRuntimeType":{
+          "shape":"DataFusionRuntimeType",
+          "documentation":"<p>Specifies the DataFusion tokio runtime type.</p> <p>Default: multi-thread</p>"
+        },
+        "dataFusionRuntimeDisableLifoSlot":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables the LIFO slot of the DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeEventInterval":{
+          "shape":"InfluxDBv3CoreParametersDataFusionRuntimeEventIntervalInteger",
+          "documentation":"<p>Sets the number of scheduler ticks after which the scheduler of the DataFusion tokio runtime polls for external events–for example: timers, I/O.</p>"
+        },
+        "dataFusionRuntimeGlobalQueueInterval":{
+          "shape":"InfluxDBv3CoreParametersDataFusionRuntimeGlobalQueueIntervalInteger",
+          "documentation":"<p>Sets the number of scheduler ticks after which the scheduler of the DataFusion runtime polls the global task queue.</p>"
+        },
+        "dataFusionRuntimeMaxBlockingThreads":{
+          "shape":"InfluxDBv3CoreParametersDataFusionRuntimeMaxBlockingThreadsInteger",
+          "documentation":"<p>Specifies the limit for additional threads spawned by the DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeMaxIoEventsPerTick":{
+          "shape":"InfluxDBv3CoreParametersDataFusionRuntimeMaxIoEventsPerTickInteger",
+          "documentation":"<p>Configures the maximum number of events processed per tick by the tokio DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeThreadKeepAlive":{
+          "shape":"Duration",
+          "documentation":"<p>Sets a custom timeout for a thread in the blocking pool of the tokio DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeThreadPriority":{
+          "shape":"InfluxDBv3CoreParametersDataFusionRuntimeThreadPriorityInteger",
+          "documentation":"<p>Sets the thread priority for tokio DataFusion runtime workers.</p> <p>Default: 10</p>"
+        },
+        "dataFusionMaxParquetFanout":{
+          "shape":"InfluxDBv3CoreParametersDataFusionMaxParquetFanoutInteger",
+          "documentation":"<p>When multiple parquet files are required in a sorted way (deduplication for example), specifies the maximum fanout.</p> <p>Default: 1000</p>"
+        },
+        "dataFusionUseCachedParquetLoader":{
+          "shape":"Boolean",
+          "documentation":"<p>Uses a cached parquet loader when reading parquet files from the object store.</p>"
+        },
+        "dataFusionConfig":{
+          "shape":"InfluxDBv3CoreParametersDataFusionConfigString",
+          "documentation":"<p>Provides custom configuration to DataFusion as a comma-separated list of key:value pairs.</p>"
+        },
+        "maxHttpRequestSize":{
+          "shape":"InfluxDBv3CoreParametersMaxHttpRequestSizeLong",
+          "documentation":"<p>Specifies the maximum size of HTTP requests.</p> <p>Default: 10485760</p>"
+        },
+        "forceSnapshotMemThreshold":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the threshold for the internal memory buffer. Supports either a percentage (portion of available memory) or absolute value in MB–for example: 70% or 100</p> <p>Default: 70%</p>"
+        },
+        "walSnapshotSize":{
+          "shape":"InfluxDBv3CoreParametersWalSnapshotSizeInteger",
+          "documentation":"<p>Defines the number of WAL files to attempt to remove in a snapshot. This, multiplied by the interval, determines how often snapshots are taken.</p> <p>Default: 600</p>"
+        },
+        "walMaxWriteBufferSize":{
+          "shape":"InfluxDBv3CoreParametersWalMaxWriteBufferSizeInteger",
+          "documentation":"<p>Specifies the maximum number of write requests that can be buffered before a flush must be executed and succeed.</p> <p>Default: 100000</p>"
+        },
+        "snapshottedWalFilesToKeep":{
+          "shape":"InfluxDBv3CoreParametersSnapshottedWalFilesToKeepInteger",
+          "documentation":"<p>Specifies the number of snapshotted WAL files to retain in the object store. Flushing the WAL files does not clear the WAL files immediately; they are deleted when the number of snapshotted WAL files exceeds this number.</p> <p>Default: 300</p>"
+        },
+        "preemptiveCacheAge":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to prefetch into the Parquet cache during compaction.</p> <p>Default: 3d</p>"
+        },
+        "parquetMemCachePrunePercentage":{
+          "shape":"InfluxDBv3CoreParametersParquetMemCachePrunePercentageFloat",
+          "documentation":"<p>Specifies the percentage of entries to prune during a prune operation on the in-memory Parquet cache.</p> <p>Default: 0.1</p>"
+        },
+        "parquetMemCachePruneInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Sets the interval to check if the in-memory Parquet cache needs to be pruned.</p> <p>Default: 1s</p>"
+        },
+        "disableParquetMemCache":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables the in-memory Parquet cache. By default, the cache is enabled.</p>"
+        },
+        "parquetMemCacheQueryPathDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the time window for caching recent Parquet files in memory.</p> <p>Default: 5h</p>"
+        },
+        "lastCacheEvictionInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to evict expired entries from the Last-N-Value cache, expressed as a human-readable duration–for example: 20s, 1m, 1h.</p> <p>Default: 10s</p>"
+        },
+        "distinctCacheEvictionInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to evict expired entries from the distinct value cache, expressed as a human-readable duration–for example: 20s, 1m, 1h.</p> <p>Default: 10s</p>"
+        },
+        "gen1Duration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the duration that Parquet files are arranged into. Data timestamps land each row into a file of this duration. Supported durations are 1m, 5m, and 10m. These files are known as “generation 1” files that the compactor in InfluxDB 3 Enterprise can merge into larger generations.</p> <p>Default: 10m</p>"
+        },
+        "execMemPoolBytes":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the size of memory pool used during query execution. Can be given as absolute value in bytes or as a percentage of the total available memory–for example: 8000000000 or 10%.</p> <p>Default: 20%</p>"
+        },
+        "parquetMemCacheSize":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the size of the in-memory Parquet cache in megabytes or percentage of total available memory.</p> <p>Default: 20%</p>"
+        },
+        "walReplayFailOnError":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether WAL replay should fail when encountering errors.</p> <p>Default: false</p>"
+        },
+        "walReplayConcurrencyLimit":{
+          "shape":"InfluxDBv3CoreParametersWalReplayConcurrencyLimitInteger",
+          "documentation":"<p>Concurrency limit during WAL replay. Setting this number too high can lead to OOM. The default is dynamically determined.</p> <p>Default: max(num_cpus, 10)</p>"
+        },
+        "tableIndexCacheMaxEntries":{
+          "shape":"InfluxDBv3CoreParametersTableIndexCacheMaxEntriesInteger",
+          "documentation":"<p>Specifies the maximum number of entries in the table index cache.</p> <p>Default: 1000</p>"
+        },
+        "tableIndexCacheConcurrencyLimit":{
+          "shape":"InfluxDBv3CoreParametersTableIndexCacheConcurrencyLimitInteger",
+          "documentation":"<p>Limits the concurrency level for table index cache operations.</p> <p>Default: 8</p>"
+        },
+        "gen1LookbackDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies how far back to look when creating generation 1 Parquet files.</p> <p>Default: 24h</p>"
+        },
+        "retentionCheckInterval":{
+          "shape":"Duration",
+          "documentation":"<p>The interval at which retention policies are checked and enforced. Enter as a human-readable time–for example: 30m or 1h.</p> <p>Default: 30m</p>"
+        },
+        "deleteGracePeriod":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the grace period before permanently deleting data.</p> <p>Default: 24h</p>"
+        },
+        "hardDeleteDefaultDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Sets the default duration for hard deletion of data.</p> <p>Default: 90d</p>"
+        }
+      },
+      "documentation":"<p>All the customer-modifiable InfluxDB v3 Core parameters in Timestream for InfluxDB.</p>"
+    },
+    "InfluxDBv3CoreParametersDataFusionConfigString":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9_]+=[^,\\s]+(?:,[a-zA-Z0-9_]+=[^,\\s]+)*"
+    },
+    "InfluxDBv3CoreParametersDataFusionMaxParquetFanoutInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionNumThreadsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":2048,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionRuntimeEventIntervalInteger":{
+      "type":"integer",
+      "box":true,
+      "max":128,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionRuntimeGlobalQueueIntervalInteger":{
+      "type":"integer",
+      "box":true,
+      "max":128,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionRuntimeMaxBlockingThreadsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionRuntimeMaxIoEventsPerTickInteger":{
+      "type":"integer",
+      "box":true,
+      "max":4096,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersDataFusionRuntimeThreadPriorityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":19,
+      "min":-20
+    },
+    "InfluxDBv3CoreParametersLogFilterString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "InfluxDBv3CoreParametersMaxHttpRequestSizeLong":{
+      "type":"long",
+      "box":true,
+      "max":16777216,
+      "min":1024
+    },
+    "InfluxDBv3CoreParametersParquetMemCachePrunePercentageFloat":{
+      "type":"float",
+      "box":true,
+      "max":1,
+      "min":0
+    },
+    "InfluxDBv3CoreParametersQueryFileLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":0
+    },
+    "InfluxDBv3CoreParametersQueryLogSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersSnapshottedWalFilesToKeepInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":0
+    },
+    "InfluxDBv3CoreParametersTableIndexCacheConcurrencyLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersTableIndexCacheMaxEntriesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersWalMaxWriteBufferSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersWalReplayConcurrencyLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "InfluxDBv3CoreParametersWalSnapshotSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParameters":{
+      "type":"structure",
+      "required":[
+        "ingestQueryInstances",
+        "queryOnlyInstances",
+        "dedicatedCompactor"
+      ],
+      "members":{
+        "queryFileLimit":{
+          "shape":"InfluxDBv3EnterpriseParametersQueryFileLimitInteger",
+          "documentation":"<p>Limits the number of Parquet files a query can access. If a query attempts to read more than this limit, InfluxDB 3 returns an error.</p> <p>Default: 432</p>"
+        },
+        "queryLogSize":{
+          "shape":"InfluxDBv3EnterpriseParametersQueryLogSizeInteger",
+          "documentation":"<p>Defines the size of the query log. Up to this many queries remain in the log before older queries are evicted to make room for new ones.</p> <p>Default: 1000</p>"
+        },
+        "logFilter":{
+          "shape":"InfluxDBv3EnterpriseParametersLogFilterString",
+          "documentation":"<p>Sets the filter directive for logs.</p>"
+        },
+        "logFormat":{
+          "shape":"LogFormats",
+          "documentation":"<p>Defines the message format for logs.</p> <p>Default: full</p>"
+        },
+        "dataFusionNumThreads":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionNumThreadsInteger",
+          "documentation":"<p>Sets the maximum number of DataFusion runtime threads to use.</p>"
+        },
+        "dataFusionRuntimeType":{
+          "shape":"DataFusionRuntimeType",
+          "documentation":"<p>Specifies the DataFusion tokio runtime type.</p> <p>Default: multi-thread</p>"
+        },
+        "dataFusionRuntimeDisableLifoSlot":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables the LIFO slot of the DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeEventInterval":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionRuntimeEventIntervalInteger",
+          "documentation":"<p>Sets the number of scheduler ticks after which the scheduler of the DataFusion tokio runtime polls for external events–for example: timers, I/O.</p>"
+        },
+        "dataFusionRuntimeGlobalQueueInterval":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionRuntimeGlobalQueueIntervalInteger",
+          "documentation":"<p>Sets the number of scheduler ticks after which the scheduler of the DataFusion runtime polls the global task queue.</p>"
+        },
+        "dataFusionRuntimeMaxBlockingThreads":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionRuntimeMaxBlockingThreadsInteger",
+          "documentation":"<p>Specifies the limit for additional threads spawned by the DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeMaxIoEventsPerTick":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionRuntimeMaxIoEventsPerTickInteger",
+          "documentation":"<p>Configures the maximum number of events processed per tick by the tokio DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeThreadKeepAlive":{
+          "shape":"Duration",
+          "documentation":"<p>Sets a custom timeout for a thread in the blocking pool of the tokio DataFusion runtime.</p>"
+        },
+        "dataFusionRuntimeThreadPriority":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionRuntimeThreadPriorityInteger",
+          "documentation":"<p>Sets the thread priority for tokio DataFusion runtime workers.</p> <p>Default: 10</p>"
+        },
+        "dataFusionMaxParquetFanout":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionMaxParquetFanoutInteger",
+          "documentation":"<p>When multiple parquet files are required in a sorted way (deduplication for example), specifies the maximum fanout.</p> <p>Default: 1000</p>"
+        },
+        "dataFusionUseCachedParquetLoader":{
+          "shape":"Boolean",
+          "documentation":"<p>Uses a cached parquet loader when reading parquet files from the object store.</p>"
+        },
+        "dataFusionConfig":{
+          "shape":"InfluxDBv3EnterpriseParametersDataFusionConfigString",
+          "documentation":"<p>Provides custom configuration to DataFusion as a comma-separated list of key:value pairs.</p>"
+        },
+        "maxHttpRequestSize":{
+          "shape":"InfluxDBv3EnterpriseParametersMaxHttpRequestSizeLong",
+          "documentation":"<p>Specifies the maximum size of HTTP requests.</p> <p>Default: 10485760</p>"
+        },
+        "forceSnapshotMemThreshold":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the threshold for the internal memory buffer. Supports either a percentage (portion of available memory) or absolute value in MB–for example: 70% or 100</p> <p>Default: 70%</p>"
+        },
+        "walSnapshotSize":{
+          "shape":"InfluxDBv3EnterpriseParametersWalSnapshotSizeInteger",
+          "documentation":"<p>Defines the number of WAL files to attempt to remove in a snapshot. This, multiplied by the interval, determines how often snapshots are taken.</p> <p>Default: 600</p>"
+        },
+        "walMaxWriteBufferSize":{
+          "shape":"InfluxDBv3EnterpriseParametersWalMaxWriteBufferSizeInteger",
+          "documentation":"<p>Specifies the maximum number of write requests that can be buffered before a flush must be executed and succeed.</p> <p>Default: 100000</p>"
+        },
+        "snapshottedWalFilesToKeep":{
+          "shape":"InfluxDBv3EnterpriseParametersSnapshottedWalFilesToKeepInteger",
+          "documentation":"<p>Specifies the number of snapshotted WAL files to retain in the object store. Flushing the WAL files does not clear the WAL files immediately; they are deleted when the number of snapshotted WAL files exceeds this number.</p> <p>Default: 300</p>"
+        },
+        "preemptiveCacheAge":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to prefetch into the Parquet cache during compaction.</p> <p>Default: 3d</p>"
+        },
+        "parquetMemCachePrunePercentage":{
+          "shape":"InfluxDBv3EnterpriseParametersParquetMemCachePrunePercentageFloat",
+          "documentation":"<p>Specifies the percentage of entries to prune during a prune operation on the in-memory Parquet cache.</p> <p>Default: 0.1</p>"
+        },
+        "parquetMemCachePruneInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Sets the interval to check if the in-memory Parquet cache needs to be pruned.</p> <p>Default: 1s</p>"
+        },
+        "disableParquetMemCache":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables the in-memory Parquet cache. By default, the cache is enabled.</p>"
+        },
+        "parquetMemCacheQueryPathDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the time window for caching recent Parquet files in memory.</p> <p>Default: 5h</p>"
+        },
+        "lastCacheEvictionInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to evict expired entries from the Last-N-Value cache, expressed as a human-readable duration–for example: 20s, 1m, 1h.</p> <p>Default: 10s</p>"
+        },
+        "distinctCacheEvictionInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval to evict expired entries from the distinct value cache, expressed as a human-readable duration–for example: 20s, 1m, 1h.</p> <p>Default: 10s</p>"
+        },
+        "gen1Duration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the duration that Parquet files are arranged into. Data timestamps land each row into a file of this duration. Supported durations are 1m, 5m, and 10m. These files are known as “generation 1” files, which the compactor can merge into larger generations.</p> <p>Default: 10m</p>"
+        },
+        "execMemPoolBytes":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the size of memory pool used during query execution. Can be given as absolute value in bytes or as a percentage of the total available memory–for example: 8000000000 or 10%.</p> <p>Default: 20%</p>"
+        },
+        "parquetMemCacheSize":{
+          "shape":"PercentOrAbsoluteLong",
+          "documentation":"<p>Specifies the size of the in-memory Parquet cache in megabytes or percentage of total available memory.</p> <p>Default: 20%</p>"
+        },
+        "walReplayFailOnError":{
+          "shape":"Boolean",
+          "documentation":"<p>Determines whether WAL replay should fail when encountering errors.</p> <p>Default: false</p>"
+        },
+        "walReplayConcurrencyLimit":{
+          "shape":"InfluxDBv3EnterpriseParametersWalReplayConcurrencyLimitInteger",
+          "documentation":"<p>Concurrency limit during WAL replay. Setting this number too high can lead to OOM. The default is dynamically determined.</p> <p>Default: max(num_cpus, 10)</p>"
+        },
+        "tableIndexCacheMaxEntries":{
+          "shape":"InfluxDBv3EnterpriseParametersTableIndexCacheMaxEntriesInteger",
+          "documentation":"<p>Specifies the maximum number of entries in the table index cache.</p> <p>Default: 1000</p>"
+        },
+        "tableIndexCacheConcurrencyLimit":{
+          "shape":"InfluxDBv3EnterpriseParametersTableIndexCacheConcurrencyLimitInteger",
+          "documentation":"<p>Limits the concurrency level for table index cache operations.</p> <p>Default: 8</p>"
+        },
+        "gen1LookbackDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies how far back to look when creating generation 1 Parquet files.</p> <p>Default: 24h</p>"
+        },
+        "retentionCheckInterval":{
+          "shape":"Duration",
+          "documentation":"<p>The interval at which retention policies are checked and enforced. Enter as a human-readable time–for example: 30m or 1h.</p> <p>Default: 30m</p>"
+        },
+        "deleteGracePeriod":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the grace period before permanently deleting data.</p> <p>Default: 24h</p>"
+        },
+        "hardDeleteDefaultDuration":{
+          "shape":"Duration",
+          "documentation":"<p>Sets the default duration for hard deletion of data.</p> <p>Default: 90d</p>"
+        },
+        "ingestQueryInstances":{
+          "shape":"InfluxDBv3EnterpriseParametersIngestQueryInstancesInteger",
+          "documentation":"<p>Specifies number of instances in the DbCluster which can both ingest and query.</p>"
+        },
+        "queryOnlyInstances":{
+          "shape":"InfluxDBv3EnterpriseParametersQueryOnlyInstancesInteger",
+          "documentation":"<p>Specifies number of instances in the DbCluster which can only query.</p>"
+        },
+        "dedicatedCompactor":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies if the compactor instance should be a standalone instance or not.</p>"
+        },
+        "compactionRowLimit":{
+          "shape":"InfluxDBv3EnterpriseParametersCompactionRowLimitInteger",
+          "documentation":"<p>Specifies the soft limit for the number of rows per file that the compactor writes. The compactor may write more rows than this limit.</p> <p>Default: 1000000</p>"
+        },
+        "compactionMaxNumFilesPerPlan":{
+          "shape":"InfluxDBv3EnterpriseParametersCompactionMaxNumFilesPerPlanInteger",
+          "documentation":"<p>Sets the maximum number of files included in any compaction plan.</p> <p>Default: 500</p>"
+        },
+        "compactionGen2Duration":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the duration of the first level of compaction (gen2). Later levels of compaction are multiples of this duration. This value should be equal to or greater than the gen1 duration.</p> <p>Default: 20m</p>"
+        },
+        "compactionMultipliers":{
+          "shape":"InfluxDBv3EnterpriseParametersCompactionMultipliersString",
+          "documentation":"<p>Specifies a comma-separated list of multiples defining the duration of each level of compaction. The number of elements in the list determines the number of compaction levels. The first element specifies the duration of the first level (gen3); subsequent levels are multiples of the previous level.</p> <p>Default: 3,4,6,5</p>"
+        },
+        "compactionCleanupWait":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the amount of time that the compactor waits after finishing a compaction run to delete files marked as needing deletion during that compaction run.</p> <p>Default: 10m</p>"
+        },
+        "compactionCheckInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies how often the compactor checks for new compaction work to perform.</p> <p>Default: 10s</p>"
+        },
+        "lastValueCacheDisableFromHistory":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables populating the last-N-value cache from historical data. If disabled, the cache is still populated with data from the write-ahead log (WAL).</p>"
+        },
+        "distinctValueCacheDisableFromHistory":{
+          "shape":"Boolean",
+          "documentation":"<p>Disables populating the distinct value cache from historical data. If disabled, the cache is still populated with data from the write-ahead log (WAL).</p>"
+        },
+        "replicationInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Specifies the interval at which data replication occurs between cluster nodes.</p> <p>Default: 250ms</p>"
+        },
+        "catalogSyncInterval":{
+          "shape":"Duration",
+          "documentation":"<p>Defines how often the catalog synchronizes across cluster nodes.</p> <p>Default: 10s</p>"
+        }
+      },
+      "documentation":"<p>All the customer-modifiable InfluxDB v3 Enterprise parameters in Timestream for InfluxDB.</p>"
+    },
+    "InfluxDBv3EnterpriseParametersCompactionMaxNumFilesPerPlanInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersCompactionMultipliersString":{
+      "type":"string",
+      "max":16,
+      "min":7,
+      "pattern":"\\d+,\\d+,\\d+,\\d+"
+    },
+    "InfluxDBv3EnterpriseParametersCompactionRowLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100000000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionConfigString":{
+      "type":"string",
+      "pattern":"[a-zA-Z0-9_]+=[^,\\s]+(?:,[a-zA-Z0-9_]+=[^,\\s]+)*"
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionMaxParquetFanoutInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionNumThreadsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":2048,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionRuntimeEventIntervalInteger":{
+      "type":"integer",
+      "box":true,
+      "max":128,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionRuntimeGlobalQueueIntervalInteger":{
+      "type":"integer",
+      "box":true,
+      "max":128,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionRuntimeMaxBlockingThreadsInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionRuntimeMaxIoEventsPerTickInteger":{
+      "type":"integer",
+      "box":true,
+      "max":4096,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersDataFusionRuntimeThreadPriorityInteger":{
+      "type":"integer",
+      "box":true,
+      "max":19,
+      "min":-20
+    },
+    "InfluxDBv3EnterpriseParametersIngestQueryInstancesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":4,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersLogFilterString":{
+      "type":"string",
+      "max":1024,
+      "min":0
+    },
+    "InfluxDBv3EnterpriseParametersMaxHttpRequestSizeLong":{
+      "type":"long",
+      "box":true,
+      "max":16777216,
+      "min":1024
+    },
+    "InfluxDBv3EnterpriseParametersParquetMemCachePrunePercentageFloat":{
+      "type":"float",
+      "box":true,
+      "max":1,
+      "min":0
+    },
+    "InfluxDBv3EnterpriseParametersQueryFileLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1024,
+      "min":0
+    },
+    "InfluxDBv3EnterpriseParametersQueryLogSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersQueryOnlyInstancesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10,
+      "min":0
+    },
+    "InfluxDBv3EnterpriseParametersSnapshottedWalFilesToKeepInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":0
+    },
+    "InfluxDBv3EnterpriseParametersTableIndexCacheConcurrencyLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersTableIndexCacheMaxEntriesInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersWalMaxWriteBufferSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":1000000,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersWalReplayConcurrencyLimitInteger":{
+      "type":"integer",
+      "box":true,
+      "max":100,
+      "min":1
+    },
+    "InfluxDBv3EnterpriseParametersWalSnapshotSizeInteger":{
+      "type":"integer",
+      "box":true,
+      "max":10000,
+      "min":1
+    },
+    "InstanceMode":{
+      "type":"string",
+      "enum":[
+        "PRIMARY",
+        "STANDBY",
+        "REPLICA",
+        "INGEST",
+        "QUERY",
+        "COMPACT",
+        "PROCESS"
+      ]
+    },
+    "InstanceModeList":{
+      "type":"list",
+      "member":{"shape":"InstanceMode"}
+    },
     "Integer":{
       "type":"integer",
       "box":true
@@ -1159,6 +2354,65 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "ListDbClustersInput":{
+      "type":"structure",
+      "members":{
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token. To resume pagination, provide the nextToken value as an argument of a subsequent API invocation.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the output. If the total number of items available is more than the value specified, a nextToken is provided in the output. To resume pagination, provide the nextToken value as an argument of a subsequent API invocation.</p>"
+        }
+      }
+    },
+    "ListDbClustersOutput":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"DbClusterSummaryList",
+          "documentation":"<p>A list of Timestream for InfluxDB cluster summaries.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token from a previous call of the operation. When this value is provided, the service returns results from where the previous response left off.</p>"
+        }
+      }
+    },
+    "ListDbInstancesForClusterInput":{
+      "type":"structure",
+      "required":["dbClusterId"],
+      "members":{
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>The pagination token. To resume pagination, provide the nextToken value as an argument of a subsequent API invocation.</p>"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of items to return in the output. If the total number of items available is more than the value specified, a nextToken is provided in the output. To resume pagination, provide the nextToken value as an argument of a subsequent API invocation.</p>"
+        }
+      }
+    },
+    "ListDbInstancesForClusterOutput":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"DbInstanceForClusterSummaryList",
+          "documentation":"<p>A list of Timestream for InfluxDB instance summaries belonging to the cluster.</p>"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token from a previous call of the operation. When this value is provided, the service returns results from where the previous response left off.</p>"
+        }
+      }
+    },
     "ListDbInstancesInput":{
       "type":"structure",
       "members":{
@@ -1243,6 +2497,10 @@
       },
       "documentation":"<p>Configuration for sending InfluxDB engine logs to send to specified S3 bucket.</p>"
     },
+    "LogFormats":{
+      "type":"string",
+      "enum":["full"]
+    },
     "LogLevel":{
       "type":"string",
       "enum":[
@@ -1279,6 +2537,14 @@
         "InfluxDBv2":{
           "shape":"InfluxDBv2Parameters",
           "documentation":"<p>All the customer-modifiable InfluxDB v2 parameters in Timestream for InfluxDB.</p>"
+        },
+        "InfluxDBv3Core":{
+          "shape":"InfluxDBv3CoreParameters",
+          "documentation":"<p>All the customer-modifiable InfluxDB v3 Core parameters in Timestream for InfluxDB.</p>"
+        },
+        "InfluxDBv3Enterprise":{
+          "shape":"InfluxDBv3EnterpriseParameters",
+          "documentation":"<p>All the customer-modifiable InfluxDB v3 Enterprise parameters in Timestream for InfluxDB.</p>"
         }
       },
       "documentation":"<p>The parameters that comprise the parameter group.</p>",
@@ -1291,6 +2557,33 @@
       "pattern":"[a-zA-Z0-9]+",
       "sensitive":true
     },
+    "PercentOrAbsoluteLong":{
+      "type":"structure",
+      "members":{
+        "percent":{
+          "shape":"PercentOrAbsoluteLongPercentString",
+          "documentation":"<p>Percent for InfluxDB parameters.</p>"
+        },
+        "absolute":{
+          "shape":"PercentOrAbsoluteLongAbsoluteLong",
+          "documentation":"<p>Absolute long for InfluxDB parameters.</p>"
+        }
+      },
+      "documentation":"<p>Percent or Absolute Long for InfluxDB parameters</p>",
+      "union":true
+    },
+    "PercentOrAbsoluteLongAbsoluteLong":{
+      "type":"long",
+      "box":true,
+      "max":1610612736000,
+      "min":0
+    },
+    "PercentOrAbsoluteLongPercentString":{
+      "type":"string",
+      "max":4,
+      "min":2,
+      "pattern":"(?:100|[1-9]?[0-9])%"
+    },
     "Port":{
       "type":"integer",
       "box":true,
@@ -1376,7 +2669,8 @@
         "DELETED",
         "FAILED",
         "UPDATING_DEPLOYMENT_TYPE",
-        "UPDATING_INSTANCE_TYPE"
+        "UPDATING_INSTANCE_TYPE",
+        "MAINTENANCE"
       ]
     },
     "String":{"type":"string"},
@@ -1431,7 +2725,8 @@
       "type":"string",
       "enum":[
         "log",
-        "jaeger"
+        "jaeger",
+        "disabled"
       ]
     },
     "UntagResourceRequest":{
@@ -1451,6 +2746,45 @@
         }
       }
     },
+    "UpdateDbClusterInput":{
+      "type":"structure",
+      "required":["dbClusterId"],
+      "members":{
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Service-generated unique identifier of the DB cluster to update.</p>"
+        },
+        "logDeliveryConfiguration":{
+          "shape":"LogDeliveryConfiguration",
+          "documentation":"<p>The log delivery configuration to apply to the DB cluster.</p>"
+        },
+        "dbParameterGroupIdentifier":{
+          "shape":"DbParameterGroupIdentifier",
+          "documentation":"<p>Update the DB cluster to use the specified DB parameter group.</p>"
+        },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>Update the DB cluster to use the specified port.</p>"
+        },
+        "dbInstanceType":{
+          "shape":"DbInstanceType",
+          "documentation":"<p>Update the DB cluster to use the specified DB instance Type.</p>"
+        },
+        "failoverMode":{
+          "shape":"FailoverMode",
+          "documentation":"<p>Update the DB cluster's failover behavior.</p>"
+        }
+      }
+    },
+    "UpdateDbClusterOutput":{
+      "type":"structure",
+      "members":{
+        "dbClusterStatus":{
+          "shape":"ClusterStatus",
+          "documentation":"<p>The status of the DB cluster.</p>"
+        }
+      }
+    },
     "UpdateDbInstanceInput":{
       "type":"structure",
       "required":["identifier"],
@@ -1478,6 +2812,14 @@
         "deploymentType":{
           "shape":"DeploymentType",
           "documentation":"<p>Specifies whether the DB instance will be deployed as a standalone instance or with a Multi-AZ standby for high availability.</p>"
+        },
+        "dbStorageType":{
+          "shape":"DbStorageType",
+          "documentation":"<p>The Timestream for InfluxDB DB storage type that InfluxDB stores data on.</p>"
+        },
+        "allocatedStorage":{
+          "shape":"AllocatedStorage",
+          "documentation":"<p>The amount of storage to allocate for your DB storage type (in gibibytes).</p>"
         }
       }
     },
@@ -1496,7 +2838,7 @@
         },
         "name":{
           "shape":"DbInstanceName",
-          "documentation":"<p>This customer-supplied name uniquely identifies the DB instance when interacting with the Amazon Timestream for InfluxDB API and Amazon Web Services CLI commands.</p>"
+          "documentation":"<p>This customer-supplied name uniquely identifies the DB instance when interacting with the Amazon Timestream for InfluxDB API and CLI commands.</p>"
         },
         "arn":{
           "shape":"Arn",
@@ -1564,7 +2906,19 @@
         },
         "influxAuthParametersSecretArn":{
           "shape":"String",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Amazon Web Services Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Secrets Manager secret containing the initial InfluxDB authorization parameters. The secret value is a JSON formatted key-value pair holding InfluxDB authorization values: organization, bucket, username, and password.</p>"
+        },
+        "dbClusterId":{
+          "shape":"DbClusterId",
+          "documentation":"<p>Specifies the DbCluster to which this DbInstance belongs to.</p>"
+        },
+        "instanceMode":{
+          "shape":"InstanceMode",
+          "documentation":"<p>Specifies the DbInstance's role in the cluster.</p>"
+        },
+        "instanceModes":{
+          "shape":"InstanceModeList",
+          "documentation":"<p>Specifies the DbInstance's roles in the cluster.</p>"
         }
       }
     },
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-query/2018-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -167,6 +167,56 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-query-fips.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-query.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://query.timestream-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
@@ -219,6 +269,31 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        },
+                                                        "aws-us-gov"
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://query.timestream.{Region}.amazonaws.com",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://query.timestream-fips.{Region}.{PartitionResult#dnsSuffix}",
@@ -271,6 +346,56 @@
                                     ],
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-query.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-query.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://query.timestream.{Region}.{PartitionResult#dualStackDnsSuffix}",
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-query/2018-11-01/service-2.json 2.31.35-1/awscli/botocore/data/timestream-query/2018-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/timestream-query/2018-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-query/2018-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -492,8 +492,7 @@
     },
     "DescribeAccountSettingsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountSettingsResponse":{
       "type":"structure",
@@ -514,8 +513,7 @@
     },
     "DescribeEndpointsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEndpointsResponse":{
       "type":"structure",
@@ -1707,8 +1705,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1863,8 +1860,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccountSettingsRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-write/2018-11-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,9 +165,58 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-ingest-fips.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-ingest.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://ingest.timestream-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
@@ -179,14 +225,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +248,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,18 +262,17 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [
                                                 {
                                                     "fn": "stringEquals",
                                                     "argv": [
-                                                        "aws-us-gov",
                                                         {
                                                             "fn": "getAttr",
                                                             "argv": [
@@ -236,7 +281,8 @@
                                                                 },
                                                                 "name"
                                                             ]
-                                                        }
+                                                        },
+                                                        "aws-us-gov"
                                                     ]
                                                 }
                                             ],
@@ -256,14 +302,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -277,7 +325,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -297,9 +344,58 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-ingest.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
+                                            "conditions": [
+                                                {
+                                                    "fn": "stringEquals",
+                                                    "argv": [
+                                                        "aws-us-gov",
+                                                        {
+                                                            "fn": "getAttr",
+                                                            "argv": [
+                                                                {
+                                                                    "ref": "PartitionResult"
+                                                                },
+                                                                "name"
+                                                            ]
+                                                        }
+                                                    ]
+                                                }
+                                            ],
+                                            "endpoint": {
+                                                "url": "https://timestream-ingest.{Region}.api.aws",
+                                                "properties": {},
+                                                "headers": {}
+                                            },
+                                            "type": "endpoint"
+                                        },
+                                        {
                                             "conditions": [],
                                             "endpoint": {
                                                 "url": "https://ingest.timestream.{Region}.{PartitionResult#dualStackDnsSuffix}",
@@ -308,14 +404,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -326,9 +424,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/timestream-write/2018-11-01/service-2.json 2.31.35-1/awscli/botocore/data/timestream-write/2018-11-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/timestream-write/2018-11-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/timestream-write/2018-11-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,13 +5,15 @@
     "endpointPrefix":"ingest.timestream",
     "jsonVersion":"1.0",
     "protocol":"json",
+    "protocols":["json"],
     "serviceAbbreviation":"Timestream Write",
     "serviceFullName":"Amazon Timestream Write",
     "serviceId":"Timestream Write",
     "signatureVersion":"v4",
     "signingName":"timestream",
     "targetPrefix":"Timestream_20181101",
-    "uid":"timestream-write-2018-11-01"
+    "uid":"timestream-write-2018-11-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateBatchLoadTask":{
@@ -887,8 +889,7 @@
     },
     "DescribeEndpointsRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEndpointsResponse":{
       "type":"structure",
@@ -1476,8 +1477,7 @@
     },
     "ResumeBatchLoadTaskResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RetentionProperties":{
       "type":"structure",
@@ -1701,8 +1701,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1746,8 +1745,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDatabaseRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/tnb/2008-10-21/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/transcribe/2017-10-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/transcribe/2017-10-26/service-2.json 2.31.35-1/awscli/botocore/data/transcribe/2017-10-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/transcribe/2017-10-26/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/transcribe/2017-10-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -536,7 +536,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Transcribes the audio from a customer service call and applies any additional Request Parameters you choose to include in your request.</p> <p>In addition to many standard transcription features, Call Analytics provides you with call characteristics, call summarization, speaker sentiment, and optional redaction of your text transcript and your audio file. You can also apply custom categories to flag specified conditions. To learn more about these features and insights, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics.html\">Analyzing call center audio with Call Analytics</a>.</p> <p>If you want to apply categories to your Call Analytics job, you must create them before submitting your job request. Categories cannot be retroactively applied to a job. To create a new category, use the operation. To learn more about Call Analytics categories, see <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tca-categories-batch.html\">Creating categories for post-call transcriptions</a> and <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tca-categories-stream.html\">Creating categories for real-time transcriptions</a>.</p> <p>To make a <code>StartCallAnalyticsJob</code> request, you must first upload your media file into an Amazon S3 bucket; you can then specify the Amazon S3 location of the file using the <code>Media</code> parameter.</p> <p>Note that job queuing is enabled by default for Call Analytics jobs.</p> <p>You must include the following parameters in your <code>StartCallAnalyticsJob</code> request:</p> <ul> <li> <p> <code>region</code>: The Amazon Web Services Region where you are making your request. For a list of Amazon Web Services Regions supported with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/general/latest/gr/transcribe.html\">Amazon Transcribe endpoints and quotas</a>.</p> </li> <li> <p> <code>CallAnalyticsJobName</code>: A custom name that you create for your transcription job that's unique within your Amazon Web Services account.</p> </li> <li> <p> <code>DataAccessRoleArn</code>: The Amazon Resource Name (ARN) of an IAM role that has permissions to access the Amazon S3 bucket that contains your input files.</p> </li> <li> <p> <code>Media</code> (<code>MediaFileUri</code> or <code>RedactedMediaFileUri</code>): The Amazon S3 location of your media file.</p> </li> </ul> <note> <p>With Call Analytics, you can redact the audio contained in your media file by including <code>RedactedMediaFileUri</code>, instead of <code>MediaFileUri</code>, to specify the location of your input audio. If you choose to redact your audio, you can find your redacted media at the location specified in the <code>RedactedMediaFileUri</code> field of your response.</p> </note>"
+      "documentation":"<p>Transcribes the audio from a customer service call and applies any additional Request Parameters you choose to include in your request.</p> <p>In addition to many standard transcription features, Call Analytics provides you with call characteristics, call summarization, speaker sentiment, and optional redaction of your text transcript and your audio file. You can also apply custom categories to flag specified conditions. To learn more about these features and insights, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics.html\">Analyzing call center audio with Call Analytics</a>.</p> <p>If you want to apply categories to your Call Analytics job, you must create them before submitting your job request. Categories cannot be retroactively applied to a job. To create a new category, use the operation. To learn more about Call Analytics categories, see <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tca-categories-batch.html\">Creating categories for post-call transcriptions</a> and <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tca-categories-stream.html\">Creating categories for real-time transcriptions</a>.</p> <p>To make a <code>StartCallAnalyticsJob</code> request, you must first upload your media file into an Amazon S3 bucket; you can then specify the Amazon S3 location of the file using the <code>Media</code> parameter.</p> <p>Job queuing is available for Call Analytics jobs. If you pass a <code>DataAccessRoleArn</code> in your request and you exceed your Concurrent Job Limit, your job will automatically be added to a queue to be processed once your concurrent job count is below the limit.</p> <p>You must include the following parameters in your <code>StartCallAnalyticsJob</code> request:</p> <ul> <li> <p> <code>region</code>: The Amazon Web Services Region where you are making your request. For a list of Amazon Web Services Regions supported with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/general/latest/gr/transcribe.html\">Amazon Transcribe endpoints and quotas</a>.</p> </li> <li> <p> <code>CallAnalyticsJobName</code>: A custom name that you create for your transcription job that's unique within your Amazon Web Services account.</p> </li> <li> <p> <code>Media</code> (<code>MediaFileUri</code> or <code>RedactedMediaFileUri</code>): The Amazon S3 location of your media file.</p> </li> </ul> <note> <p>With Call Analytics, you can redact the audio contained in your media file by including <code>RedactedMediaFileUri</code>, instead of <code>MediaFileUri</code>, to specify the location of your input audio. If you choose to redact your audio, you can find your redacted media at the location specified in the <code>RedactedMediaFileUri</code> field of your response.</p> </note>"
     },
     "StartMedicalScribeJob":{
       "name":"StartMedicalScribeJob",
@@ -552,7 +552,7 @@
         {"shape":"InternalFailureException"},
         {"shape":"ConflictException"}
       ],
-      "documentation":"<p>Transcribes patient-clinician conversations and generates clinical notes. </p> <p>Amazon Web Services HealthScribe automatically provides rich conversation transcripts, identifies speaker roles, classifies dialogues, extracts medical terms, and generates preliminary clinical notes. To learn more about these features, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/health-scribe.html\">Amazon Web Services HealthScribe</a>.</p> <p>To make a <code>StartMedicalScribeJob</code> request, you must first upload your media file into an Amazon S3 bucket; you can then specify the Amazon S3 location of the file using the <code>Media</code> parameter.</p> <p>You must include the following parameters in your <code>StartMedicalTranscriptionJob</code> request:</p> <ul> <li> <p> <code>DataAccessRoleArn</code>: The ARN of an IAM role with the these minimum permissions: read permission on input file Amazon S3 bucket specified in <code>Media</code>, write permission on the Amazon S3 bucket specified in <code>OutputBucketName</code>, and full permissions on the KMS key specified in <code>OutputEncryptionKMSKeyId</code> (if set). The role should also allow <code>transcribe.amazonaws.com</code> to assume it. </p> </li> <li> <p> <code>Media</code> (<code>MediaFileUri</code>): The Amazon S3 location of your media file.</p> </li> <li> <p> <code>MedicalScribeJobName</code>: A custom name you create for your MedicalScribe job that is unique within your Amazon Web Services account.</p> </li> <li> <p> <code>OutputBucketName</code>: The Amazon S3 bucket where you want your output files stored.</p> </li> <li> <p> <code>Settings</code>: A <code>MedicalScribeSettings</code> obect that must set exactly one of <code>ShowSpeakerLabels</code> or <code>ChannelIdentification</code> to true. If <code>ShowSpeakerLabels</code> is true, <code>MaxSpeakerLabels</code> must also be set. </p> </li> <li> <p> <code>ChannelDefinitions</code>: A <code>MedicalScribeChannelDefinitions</code> array should be set if and only if the <code>ChannelIdentification</code> value of <code>Settings</code> is set to true. </p> </li> </ul>"
+      "documentation":"<p>Transcribes patient-clinician conversations and generates clinical notes. </p> <p>Amazon Web Services HealthScribe automatically provides rich conversation transcripts, identifies speaker roles, classifies dialogues, extracts medical terms, and generates preliminary clinical notes. To learn more about these features, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/health-scribe.html\">Amazon Web Services HealthScribe</a>.</p> <p>To make a <code>StartMedicalScribeJob</code> request, you must first upload your media file into an Amazon S3 bucket; you can then specify the Amazon S3 location of the file using the <code>Media</code> parameter.</p> <p>You must include the following parameters in your <code>StartMedicalTranscriptionJob</code> request:</p> <ul> <li> <p> <code>DataAccessRoleArn</code>: The ARN of an IAM role with the these minimum permissions: read permission on input file Amazon S3 bucket specified in <code>Media</code>, write permission on the Amazon S3 bucket specified in <code>OutputBucketName</code>, and full permissions on the KMS key specified in <code>OutputEncryptionKMSKeyId</code> (if set). The role should also allow <code>transcribe.amazonaws.com</code> to assume it. </p> </li> <li> <p> <code>Media</code> (<code>MediaFileUri</code>): The Amazon S3 location of your media file.</p> </li> <li> <p> <code>MedicalScribeJobName</code>: A custom name you create for your MedicalScribe job that is unique within your Amazon Web Services account.</p> </li> <li> <p> <code>OutputBucketName</code>: The Amazon S3 bucket where you want your output files stored.</p> </li> <li> <p> <code>Settings</code>: A <code>MedicalScribeSettings</code> object that must set exactly one of <code>ShowSpeakerLabels</code> or <code>ChannelIdentification</code> to true. If <code>ShowSpeakerLabels</code> is true, <code>MaxSpeakerLabels</code> must also be set. </p> </li> <li> <p> <code>ChannelDefinitions</code>: A <code>MedicalScribeChannelDefinitions</code> array should be set if and only if the <code>ChannelIdentification</code> value of <code>Settings</code> is set to true. </p> </li> </ul>"
     },
     "StartMedicalTranscriptionJob":{
       "name":"StartMedicalTranscriptionJob",
@@ -852,7 +852,7 @@
         "ContentRedaction":{"shape":"ContentRedaction"},
         "LanguageOptions":{
           "shape":"LanguageOptions",
-          "documentation":"<p>You can specify two or more language codes that represent the languages you think may be present in your media. Including more than five is not recommended. If you're unsure what languages are present, do not include this parameter.</p> <p>Including language options can improve the accuracy of language identification.</p> <p>For a list of languages supported with Call Analytics, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a> table.</p> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>), your media file must be encoded at a sample rate of 16,000 Hz or higher.</p>"
+          "documentation":"<p>You can specify two or more language codes that represent the languages you think may be present in your media. Including more than five is not recommended. If you're unsure what languages are present, do not include this parameter.</p> <p>Including language options can improve the accuracy of language identification.</p> <p>For a list of languages supported with Call Analytics, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a> table.</p> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>) in Amazon Web Services GovCloud (US) (US-West, us-gov-west-1), Amazon Web Services GovCloud (US) (US-East, us-gov-east-1), Canada (Calgary) ca-west-1 and Africa (Cape Town) af-south-1, your media file must be encoded at a sample rate of 16,000 Hz or higher.</p>"
         },
         "LanguageIdSettings":{
           "shape":"LanguageIdSettingsMap",
@@ -1010,6 +1010,16 @@
       "max":1,
       "min":0
     },
+    "ClinicalNoteGenerationSettings":{
+      "type":"structure",
+      "members":{
+        "NoteTemplate":{
+          "shape":"MedicalScribeNoteTemplate",
+          "documentation":"<p>Specify one of the following templates to use for the clinical note summary. The default is <code>HISTORY_AND_PHYSICAL</code>.</p> <ul> <li> <p>HISTORY_AND_PHYSICAL: Provides summaries for key sections of the clinical documentation. Examples of sections include Chief Complaint, History of Present Illness, Review of Systems, Past Medical History, Assessment, and Plan. </p> </li> <li> <p>GIRPP: Provides summaries based on the patients progress toward goals. Examples of sections include Goal, Intervention, Response, Progress, and Plan.</p> </li> <li> <p>BIRP: Focuses on the patient's behavioral patterns and responses. Examples of sections include Behavior, Intervention, Response, and Plan.</p> </li> <li> <p>SIRP: Emphasizes the situational context of therapy. Examples of sections include Situation, Intervention, Response, and Plan.</p> </li> <li> <p>DAP: Provides a simplified format for clinical documentation. Examples of sections include Data, Assessment, and Plan.</p> </li> <li> <p>BEHAVIORAL_SOAP: Behavioral health focused documentation format. Examples of sections include Subjective, Objective, Assessment, and Plan.</p> </li> <li> <p>PHYSICAL_SOAP: Physical health focused documentation format. Examples of sections include Subjective, Objective, Assessment, and Plan.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>The output configuration for clinical note generation.</p>"
+    },
     "ConflictException":{
       "type":"structure",
       "members":{
@@ -1308,8 +1318,7 @@
     },
     "DeleteCallAnalyticsCategoryResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteCallAnalyticsJobRequest":{
       "type":"structure",
@@ -1323,8 +1332,7 @@
     },
     "DeleteCallAnalyticsJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLanguageModelRequest":{
       "type":"structure",
@@ -1769,6 +1777,7 @@
         "cs-CZ",
         "cy-WL",
         "el-GR",
+        "et-EE",
         "et-ET",
         "eu-ES",
         "fi-FI",
@@ -1818,6 +1827,7 @@
         "uk-UA",
         "uz-UZ",
         "wo-SN",
+        "zh-HK",
         "zu-ZA"
       ]
     },
@@ -2345,6 +2355,16 @@
       "max":1,
       "min":0
     },
+    "MedicalScribeContext":{
+      "type":"structure",
+      "members":{
+        "PatientContext":{
+          "shape":"MedicalScribePatientContext",
+          "documentation":"<p>Contains patient-specific information.</p>"
+        }
+      },
+      "documentation":"<p>The <code>MedicalScribeContext</code> object that contains contextual information used to generate customized clinical notes.</p>"
+    },
     "MedicalScribeJob":{
       "type":"structure",
       "members":{
@@ -2393,9 +2413,13 @@
           "shape":"MedicalScribeChannelDefinitions",
           "documentation":"<p>Makes it possible to specify which speaker is on which channel. For example, if the clinician is the first participant to speak, you would set <code>ChannelId</code> of the first <code>ChannelDefinition</code> in the list to <code>0</code> (to indicate the first channel) and <code>ParticipantRole</code> to <code>CLINICIAN</code> (to indicate that it's the clinician speaking). Then you would set the <code>ChannelId</code> of the second <code>ChannelDefinition</code> in the list to <code>1</code> (to indicate the second channel) and <code>ParticipantRole</code> to <code>PATIENT</code> (to indicate that it's the patient speaking). </p>"
         },
+        "MedicalScribeContextProvided":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the <code>MedicalScribeContext</code> object was provided when the Medical Scribe job was started.</p>"
+        },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>Adds one or more custom tags, each in the form of a key:value pair, to the Medica Scribe job.</p> <p>To learn more about using tags with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tagging.html\">Tagging resources</a>.</p>"
+          "documentation":"<p>Adds one or more custom tags, each in the form of a key:value pair, to the Medical Scribe job.</p> <p>To learn more about using tags with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tagging.html\">Tagging resources</a>.</p>"
         }
       },
       "documentation":"<p>Provides detailed information about a Medical Scribe job.</p> <p>To view the status of the specified Medical Scribe job, check the <code>MedicalScribeJobStatus</code> field. If the status is <code>COMPLETED</code>, the job is finished and you can find the results at the locations specified in <code>MedicalScribeOutput</code>. If the status is <code>FAILED</code>, <code>FailureReason</code> provides details on why your Medical Scribe job failed.</p>"
@@ -2451,6 +2475,18 @@
       "type":"string",
       "enum":["en-US"]
     },
+    "MedicalScribeNoteTemplate":{
+      "type":"string",
+      "enum":[
+        "HISTORY_AND_PHYSICAL",
+        "GIRPP",
+        "BIRP",
+        "SIRP",
+        "DAP",
+        "BEHAVIORAL_SOAP",
+        "PHYSICAL_SOAP"
+      ]
+    },
     "MedicalScribeOutput":{
       "type":"structure",
       "required":[
@@ -2476,6 +2512,16 @@
         "CLINICIAN"
       ]
     },
+    "MedicalScribePatientContext":{
+      "type":"structure",
+      "members":{
+        "Pronouns":{
+          "shape":"Pronouns",
+          "documentation":"<p>The patient's preferred pronouns that the user wants to provide as a context for clinical note generation.</p>"
+        }
+      },
+      "documentation":"<p>Contains patient-specific information used to customize the clinical note generation.</p>"
+    },
     "MedicalScribeSettings":{
       "type":"structure",
       "members":{
@@ -2502,6 +2548,10 @@
         "VocabularyFilterMethod":{
           "shape":"VocabularyFilterMethod",
           "documentation":"<p>Specify how you want your custom vocabulary filter applied to your transcript.</p> <p>To replace words with <code>***</code>, choose <code>mask</code>.</p> <p>To delete words, choose <code>remove</code>.</p> <p>To flag words without changing them, choose <code>tag</code>.</p>"
+        },
+        "ClinicalNoteGenerationSettings":{
+          "shape":"ClinicalNoteGenerationSettings",
+          "documentation":"<p>Specify settings for the clinical note generation.</p>"
         }
       },
       "documentation":"<p>Makes it possible to control how your Medical Scribe job is processed using a <code>MedicalScribeSettings</code> object. Specify <code>ChannelIdentification</code> if <code>ChannelDefinitions</code> are set. Enabled <code>ShowSpeakerLabels</code> if <code>ChannelIdentification</code> and <code>ChannelDefinitions</code> are not set. One and only one of <code>ChannelIdentification</code> and <code>ShowSpeakerLabels</code> must be set. If <code>ShowSpeakerLabels</code> is set, <code>MaxSpeakerLabels</code> must also be set. Use <code>Settings</code> to specify a vocabulary or vocabulary filter or both using <code>VocabularyName</code>, <code>VocabularyFilterName</code>. <code>VocabularyFilterMethod</code> must be specified if <code>VocabularyFilterName</code> is set. </p>"
@@ -2799,6 +2849,15 @@
       "max":11,
       "min":0
     },
+    "Pronouns":{
+      "type":"string",
+      "enum":[
+        "HE_HIM",
+        "SHE_HER",
+        "THEY_THEM"
+      ],
+      "sensitive":true
+    },
     "RedactionOutput":{
       "type":"string",
       "enum":[
@@ -2966,7 +3025,7 @@
         },
         "OutputEncryptionKMSKeyId":{
           "shape":"KMSKeyId",
-          "documentation":"<p>The KMS key you want to use to encrypt your Call Analytics output.</p> <p>If using a key located in the <b>current</b> Amazon Web Services account, you can specify your KMS key in one of four ways:</p> <ol> <li> <p>Use the KMS key ID itself. For example, <code>1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use an alias for the KMS key ID. For example, <code>alias/ExampleAlias</code>.</p> </li> <li> <p>Use the Amazon Resource Name (ARN) for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If using a key located in a <b>different</b> Amazon Web Services account than the current Amazon Web Services account, you can specify your KMS key in one of two ways:</p> <ol> <li> <p>Use the ARN for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>If you specify a KMS key to encrypt your output, you must also specify an output location using the <code>OutputLocation</code> parameter.</p> <p>Note that the role making the request must have permission to use the specified KMS key.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a KMS key that you want to use to encrypt your Call Analytics output.</p> <p>KMS key ARNs have the format <code>arn:partition:kms:region:account:key/key-id</code>. For example: <code>arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS key ARNs</a>.</p> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>Note that the role making the request and the role specified in the <code>DataAccessRoleArn</code> request parameter (if present) must have permission to use the specified KMS key.</p>"
         },
         "DataAccessRoleArn":{
           "shape":"DataAccessRoleArn",
@@ -3016,7 +3075,7 @@
         },
         "OutputEncryptionKMSKeyId":{
           "shape":"KMSKeyId",
-          "documentation":"<p>The KMS key you want to use to encrypt your Medical Scribe output.</p> <p>If using a key located in the <b>current</b> Amazon Web Services account, you can specify your KMS key in one of four ways:</p> <ol> <li> <p>Use the KMS key ID itself. For example, <code>1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use an alias for the KMS key ID. For example, <code>alias/ExampleAlias</code>.</p> </li> <li> <p>Use the Amazon Resource Name (ARN) for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If using a key located in a <b>different</b> Amazon Web Services account than the current Amazon Web Services account, you can specify your KMS key in one of two ways:</p> <ol> <li> <p>Use the ARN for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>Note that the role specified in the <code>DataAccessRoleArn</code> request parameter must have permission to use the specified KMS key.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a KMS key that you want to use to encrypt your Medical Scribe output.</p> <p>KMS key ARNs have the format <code>arn:partition:kms:region:account:key/key-id</code>. For example: <code>arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS key ARNs</a>.</p> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>Note that the role making the request and the role specified in the <code>DataAccessRoleArn</code> request parameter (if present) must have permission to use the specified KMS key.</p>"
         },
         "KMSEncryptionContext":{
           "shape":"KMSEncryptionContextMap",
@@ -3036,7 +3095,11 @@
         },
         "Tags":{
           "shape":"TagList",
-          "documentation":"<p>Adds one or more custom tags, each in the form of a key:value pair, to the Medica Scribe job.</p> <p>To learn more about using tags with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tagging.html\">Tagging resources</a>.</p>"
+          "documentation":"<p>Adds one or more custom tags, each in the form of a key:value pair, to the Medical Scribe job.</p> <p>To learn more about using tags with Amazon Transcribe, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/tagging.html\">Tagging resources</a>.</p>"
+        },
+        "MedicalScribeContext":{
+          "shape":"MedicalScribeContext",
+          "documentation":"<p>The <code>MedicalScribeContext</code> object that contains contextual information which is used during clinical note generation to add relevant context to the note.</p>"
         }
       }
     },
@@ -3087,7 +3150,7 @@
         },
         "OutputEncryptionKMSKeyId":{
           "shape":"KMSKeyId",
-          "documentation":"<p>The KMS key you want to use to encrypt your medical transcription output.</p> <p>If using a key located in the <b>current</b> Amazon Web Services account, you can specify your KMS key in one of four ways:</p> <ol> <li> <p>Use the KMS key ID itself. For example, <code>1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use an alias for the KMS key ID. For example, <code>alias/ExampleAlias</code>.</p> </li> <li> <p>Use the Amazon Resource Name (ARN) for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If using a key located in a <b>different</b> Amazon Web Services account than the current Amazon Web Services account, you can specify your KMS key in one of two ways:</p> <ol> <li> <p>Use the ARN for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>If you specify a KMS key to encrypt your output, you must also specify an output location using the <code>OutputLocation</code> parameter.</p> <p>Note that the role making the request must have permission to use the specified KMS key.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a KMS key that you want to use to encrypt your medical transcription output.</p> <p>KMS key ARNs have the format <code>arn:partition:kms:region:account:key/key-id</code>. For example: <code>arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS key ARNs</a>.</p> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>Note that the role making the request and the role specified in the <code>DataAccessRoleArn</code> request parameter (if present) must have permission to use the specified KMS key.</p>"
         },
         "KMSEncryptionContext":{
           "shape":"KMSEncryptionContextMap",
@@ -3137,7 +3200,7 @@
         },
         "LanguageCode":{
           "shape":"LanguageCode",
-          "documentation":"<p>The language code that represents the language spoken in the input media file.</p> <p>If you're unsure of the language spoken in your media file, consider using <code>IdentifyLanguage</code> or <code>IdentifyMultipleLanguages</code> to enable automatic language identification.</p> <p>Note that you must include one of <code>LanguageCode</code>, <code>IdentifyLanguage</code>, or <code>IdentifyMultipleLanguages</code> in your request. If you include more than one of these parameters, your transcription job fails.</p> <p>For a list of supported languages and their associated language codes, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a> table.</p> <note> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>), your media file must be encoded at a sample rate of 16,000 Hz or higher.</p> </note>"
+          "documentation":"<p>The language code that represents the language spoken in the input media file.</p> <p>If you're unsure of the language spoken in your media file, consider using <code>IdentifyLanguage</code> or <code>IdentifyMultipleLanguages</code> to enable automatic language identification.</p> <p>Note that you must include one of <code>LanguageCode</code>, <code>IdentifyLanguage</code>, or <code>IdentifyMultipleLanguages</code> in your request. If you include more than one of these parameters, your transcription job fails.</p> <p>For a list of supported languages and their associated language codes, refer to the <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a> table.</p> <note> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>) in Amazon Web Services GovCloud (US) (US-West, us-gov-west-1), Amazon Web Services GovCloud (US) (US-East, us-gov-east-1), Canada (Calgary, ca-west-1) and Africa (Cape Town, af-south-1), your media file must be encoded at a sample rate of 16,000 Hz or higher.</p> </note>"
         },
         "MediaSampleRateHertz":{
           "shape":"MediaSampleRateHertz",
@@ -3161,7 +3224,7 @@
         },
         "OutputEncryptionKMSKeyId":{
           "shape":"KMSKeyId",
-          "documentation":"<p>The KMS key you want to use to encrypt your transcription output.</p> <p>If using a key located in the <b>current</b> Amazon Web Services account, you can specify your KMS key in one of four ways:</p> <ol> <li> <p>Use the KMS key ID itself. For example, <code>1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use an alias for the KMS key ID. For example, <code>alias/ExampleAlias</code>.</p> </li> <li> <p>Use the Amazon Resource Name (ARN) for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If using a key located in a <b>different</b> Amazon Web Services account than the current Amazon Web Services account, you can specify your KMS key in one of two ways:</p> <ol> <li> <p>Use the ARN for the KMS key ID. For example, <code>arn:aws:kms:region:account-ID:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>.</p> </li> <li> <p>Use the ARN for the KMS key alias. For example, <code>arn:aws:kms:region:account-ID:alias/ExampleAlias</code>.</p> </li> </ol> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>If you specify a KMS key to encrypt your output, you must also specify an output location using the <code>OutputLocation</code> parameter.</p> <p>Note that the role making the request must have permission to use the specified KMS key.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of a KMS key that you want to use to encrypt your transcription output.</p> <p>KMS key ARNs have the format <code>arn:partition:kms:region:account:key/key-id</code>. For example: <code>arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab</code>. For more information, see <a href=\"https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN\"> KMS key ARNs</a>.</p> <p>If you do not specify an encryption key, your output is encrypted with the default Amazon S3 key (SSE-S3).</p> <p>Note that the role making the request and the role specified in the <code>DataAccessRoleArn</code> request parameter (if present) must have permission to use the specified KMS key.</p>"
         },
         "KMSEncryptionContext":{
           "shape":"KMSEncryptionContextMap",
@@ -3193,7 +3256,7 @@
         },
         "LanguageOptions":{
           "shape":"LanguageOptions",
-          "documentation":"<p>You can specify two or more language codes that represent the languages you think may be present in your media. Including more than five is not recommended. If you're unsure what languages are present, do not include this parameter.</p> <p>If you include <code>LanguageOptions</code> in your request, you must also include <code>IdentifyLanguage</code>.</p> <p>For more information, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a>.</p> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>), your media file must be encoded at a sample rate of 16,000 Hz or higher.</p>"
+          "documentation":"<p>You can specify two or more language codes that represent the languages you think may be present in your media. Including more than five is not recommended. If you're unsure what languages are present, do not include this parameter.</p> <p>If you include <code>LanguageOptions</code> in your request, you must also include <code>IdentifyLanguage</code>.</p> <p>For more information, refer to <a href=\"https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html\">Supported languages</a>.</p> <p>To transcribe speech in Modern Standard Arabic (<code>ar-SA</code>)in Amazon Web Services GovCloud (US) (US-West, us-gov-west-1), Amazon Web Services GovCloud (US) (US-East, us-gov-east-1), in Canada (Calgary) ca-west-1 and Africa (Cape Town) af-south-1, your media file must be encoded at a sample rate of 16,000 Hz or higher.</p>"
         },
         "Subtitles":{
           "shape":"Subtitles",
@@ -3345,8 +3408,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3653,8 +3715,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateCallAnalyticsCategoryRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/transfer/2018-11-05/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/transfer/2018-11-05/service-2.json 2.31.35-1/awscli/botocore/data/transfer/2018-11-05/service-2.json
--- 2.23.6-1/awscli/botocore/data/transfer/2018-11-05/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/transfer/2018-11-05/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -368,7 +368,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the access that is assigned to the specific file transfer protocol-enabled server, as identified by its <code>ServerId</code> property and its <code>ExternalId</code>.</p> <p>The response from this call returns the properties of the access that is associated with the <code>ServerId</code> value that was specified.</p>"
+      "documentation":"<p>Describes the access that is assigned to the specific file transfer protocol-enabled server, as identified by its <code>ServerId</code> property and its <code>ExternalId</code>.</p> <p>The response from this call returns the properties of the access that is associated with the <code>ServerId</code> value that was specified.</p>",
+      "readonly":true
     },
     "DescribeAgreement":{
       "name":"DescribeAgreement",
@@ -384,7 +385,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the agreement that's identified by the <code>AgreementId</code>.</p>"
+      "documentation":"<p>Describes the agreement that's identified by the <code>AgreementId</code>.</p>",
+      "readonly":true
     },
     "DescribeCertificate":{
       "name":"DescribeCertificate",
@@ -400,7 +402,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the certificate that's identified by the <code>CertificateId</code>.</p>"
+      "documentation":"<p>Describes the certificate that's identified by the <code>CertificateId</code>.</p> <note> <p>Transfer Family automatically publishes a Amazon CloudWatch metric called <code>DaysUntilExpiry</code> for imported certificates. This metric tracks the number of days until the certificate expires based on the <code>InactiveDate</code>. The metric is available in the <code>AWS/Transfer</code> namespace and includes the <code>CertificateId</code> as a dimension.</p> </note>",
+      "readonly":true
     },
     "DescribeConnector":{
       "name":"DescribeConnector",
@@ -416,7 +419,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the connector that's identified by the <code>ConnectorId.</code> </p>"
+      "documentation":"<p>Describes the connector that's identified by the <code>ConnectorId.</code> </p>",
+      "readonly":true
     },
     "DescribeExecution":{
       "name":"DescribeExecution",
@@ -432,7 +436,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>You can use <code>DescribeExecution</code> to check the details of the execution of the specified workflow.</p> <note> <p>This API call only returns details for in-progress workflows.</p> <p> If you provide an ID for an execution that is not in progress, or if the execution doesn't match the specified workflow ID, you receive a <code>ResourceNotFound</code> exception.</p> </note>"
+      "documentation":"<p>You can use <code>DescribeExecution</code> to check the details of the execution of the specified workflow.</p> <note> <p>This API call only returns details for in-progress workflows.</p> <p> If you provide an ID for an execution that is not in progress, or if the execution doesn't match the specified workflow ID, you receive a <code>ResourceNotFound</code> exception.</p> </note>",
+      "readonly":true
     },
     "DescribeHostKey":{
       "name":"DescribeHostKey",
@@ -448,7 +453,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns the details of the host key that's specified by the <code>HostKeyId</code> and <code>ServerId</code>.</p>"
+      "documentation":"<p>Returns the details of the host key that's specified by the <code>HostKeyId</code> and <code>ServerId</code>.</p>",
+      "readonly":true
     },
     "DescribeProfile":{
       "name":"DescribeProfile",
@@ -464,7 +470,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Returns the details of the profile that's specified by the <code>ProfileId</code>.</p>"
+      "documentation":"<p>Returns the details of the profile that's specified by the <code>ProfileId</code>.</p>",
+      "readonly":true
     },
     "DescribeSecurityPolicy":{
       "name":"DescribeSecurityPolicy",
@@ -480,7 +487,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the security policy that is attached to your server or SFTP connector. The response contains a description of the security policy's properties. For more information about security policies, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html\">Working with security policies for servers</a> or <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html\">Working with security policies for SFTP connectors</a>.</p>"
+      "documentation":"<p>Describes the security policy that is attached to your server or SFTP connector. The response contains a description of the security policy's properties. For more information about security policies, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html\">Working with security policies for servers</a> or <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html\">Working with security policies for SFTP connectors</a>.</p>",
+      "readonly":true
     },
     "DescribeServer":{
       "name":"DescribeServer",
@@ -496,7 +504,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes a file transfer protocol-enabled server that you specify by passing the <code>ServerId</code> parameter.</p> <p>The response contains a description of a server's properties. When you set <code>EndpointType</code> to VPC, the response will contain the <code>EndpointDetails</code>.</p>"
+      "documentation":"<p>Describes a file transfer protocol-enabled server that you specify by passing the <code>ServerId</code> parameter.</p> <p>The response contains a description of a server's properties. When you set <code>EndpointType</code> to VPC, the response will contain the <code>EndpointDetails</code>.</p>",
+      "readonly":true
     },
     "DescribeUser":{
       "name":"DescribeUser",
@@ -512,7 +521,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the user assigned to the specific file transfer protocol-enabled server, as identified by its <code>ServerId</code> property.</p> <p>The response from this call returns the properties of the user associated with the <code>ServerId</code> value that was specified.</p>"
+      "documentation":"<p>Describes the user assigned to the specific file transfer protocol-enabled server, as identified by its <code>ServerId</code> property.</p> <p>The response from this call returns the properties of the user associated with the <code>ServerId</code> value that was specified.</p>",
+      "readonly":true
     },
     "DescribeWebApp":{
       "name":"DescribeWebApp",
@@ -529,7 +539,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Describes the web app that's identified by <code>WebAppId</code>.</p>"
+      "documentation":"<p>Describes the web app that's identified by <code>WebAppId</code>.</p>",
+      "readonly":true
     },
     "DescribeWebAppCustomization":{
       "name":"DescribeWebAppCustomization",
@@ -546,7 +557,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"AccessDeniedException"}
       ],
-      "documentation":"<p>Describes the web app customization object that's identified by <code>WebAppId</code>.</p>"
+      "documentation":"<p>Describes the web app customization object that's identified by <code>WebAppId</code>.</p>",
+      "readonly":true
     },
     "DescribeWorkflow":{
       "name":"DescribeWorkflow",
@@ -562,7 +574,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Describes the specified workflow.</p>"
+      "documentation":"<p>Describes the specified workflow.</p>",
+      "readonly":true
     },
     "ImportCertificate":{
       "name":"ImportCertificate",
@@ -578,7 +591,7 @@
         {"shape":"InternalServiceError"},
         {"shape":"ServiceUnavailableException"}
       ],
-      "documentation":"<p>Imports the signing and encryption certificates that you need to create local (AS2) profiles and partner profiles.</p>"
+      "documentation":"<p>Imports the signing and encryption certificates that you need to create local (AS2) profiles and partner profiles.</p> <p>You can import both the certificate and its chain in the <code>Certificate</code> parameter.</p> <p>After importing a certificate, Transfer Family automatically creates a Amazon CloudWatch metric called <code>DaysUntilExpiry</code> that tracks the number of days until the certificate expires. The metric is based on the <code>InactiveDate</code> parameter and is published daily in the <code>AWS/Transfer</code> namespace.</p> <important> <p>It can take up to a full day after importing a certificate for Transfer Family to emit the <code>DaysUntilExpiry</code> metric to your account.</p> </important> <note> <p>If you use the <code>Certificate</code> parameter to upload both the certificate and its chain, don't use the <code>CertificateChain</code> parameter.</p> </note> <p> <b>CloudWatch monitoring</b> </p> <p>The <code>DaysUntilExpiry</code> metric includes the following specifications:</p> <ul> <li> <p> <b>Units:</b> Count (days)</p> </li> <li> <p> <b>Dimensions:</b> <code>CertificateId</code> (always present), <code>Description</code> (if provided during certificate import)</p> </li> <li> <p> <b>Statistics:</b> Minimum, Maximum, Average</p> </li> <li> <p> <b>Frequency:</b> Published daily</p> </li> </ul>"
     },
     "ImportHostKey":{
       "name":"ImportHostKey",
@@ -631,7 +644,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the details for all the accesses you have on your server.</p>"
+      "documentation":"<p>Lists the details for all the accesses you have on your server.</p>",
+      "readonly":true
     },
     "ListAgreements":{
       "name":"ListAgreements",
@@ -648,7 +662,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Returns a list of the agreements for the server that's identified by the <code>ServerId</code> that you supply. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for <code>NextToken</code>, you can supply that value to continue listing agreements from where you left off.</p>"
+      "documentation":"<p>Returns a list of the agreements for the server that's identified by the <code>ServerId</code> that you supply. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for <code>NextToken</code>, you can supply that value to continue listing agreements from where you left off.</p>",
+      "readonly":true
     },
     "ListCertificates":{
       "name":"ListCertificates",
@@ -665,7 +680,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Returns a list of the current certificates that have been imported into Transfer Family. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for the <code>NextToken</code> parameter, you can supply that value to continue listing certificates from where you left off.</p>"
+      "documentation":"<p>Returns a list of the current certificates that have been imported into Transfer Family. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for the <code>NextToken</code> parameter, you can supply that value to continue listing certificates from where you left off.</p>",
+      "readonly":true
     },
     "ListConnectors":{
       "name":"ListConnectors",
@@ -682,7 +698,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the connectors for the specified Region.</p>"
+      "documentation":"<p>Lists the connectors for the specified Region.</p>",
+      "readonly":true
     },
     "ListExecutions":{
       "name":"ListExecutions",
@@ -699,7 +716,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists all in-progress executions for the specified workflow.</p> <note> <p>If the specified workflow ID cannot be found, <code>ListExecutions</code> returns a <code>ResourceNotFound</code> exception.</p> </note>"
+      "documentation":"<p>Lists all in-progress executions for the specified workflow.</p> <note> <p>If the specified workflow ID cannot be found, <code>ListExecutions</code> returns a <code>ResourceNotFound</code> exception.</p> </note>",
+      "readonly":true
     },
     "ListFileTransferResults":{
       "name":"ListFileTransferResults",
@@ -732,7 +750,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Returns a list of host keys for the server that's specified by the <code>ServerId</code> parameter.</p>"
+      "documentation":"<p>Returns a list of host keys for the server that's specified by the <code>ServerId</code> parameter.</p>",
+      "readonly":true
     },
     "ListProfiles":{
       "name":"ListProfiles",
@@ -749,7 +768,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Returns a list of the profiles for your system. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for <code>NextToken</code>, you can supply that value to continue listing profiles from where you left off.</p>"
+      "documentation":"<p>Returns a list of the profiles for your system. If you want to limit the results to a certain number, supply a value for the <code>MaxResults</code> parameter. If you ran the command previously and received a value for <code>NextToken</code>, you can supply that value to continue listing profiles from where you left off.</p>",
+      "readonly":true
     },
     "ListSecurityPolicies":{
       "name":"ListSecurityPolicies",
@@ -765,7 +785,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the security policies that are attached to your servers and SFTP connectors. For more information about security policies, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html\">Working with security policies for servers</a> or <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html\">Working with security policies for SFTP connectors</a>.</p>"
+      "documentation":"<p>Lists the security policies that are attached to your servers and SFTP connectors. For more information about security policies, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html\">Working with security policies for servers</a> or <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/security-policies-connectors.html\">Working with security policies for SFTP connectors</a>.</p>",
+      "readonly":true
     },
     "ListServers":{
       "name":"ListServers",
@@ -781,7 +802,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the file transfer protocol-enabled servers that are associated with your Amazon Web Services account.</p>"
+      "documentation":"<p>Lists the file transfer protocol-enabled servers that are associated with your Amazon Web Services account.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -797,7 +819,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists all of the tags associated with the Amazon Resource Name (ARN) that you specify. The resource can be a user, server, or role.</p>"
+      "documentation":"<p>Lists all of the tags associated with the Amazon Resource Name (ARN) that you specify. The resource can be a user, server, or role.</p>",
+      "readonly":true
     },
     "ListUsers":{
       "name":"ListUsers",
@@ -814,7 +837,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists the users for a file transfer protocol-enabled server that you specify by passing the <code>ServerId</code> parameter.</p>"
+      "documentation":"<p>Lists the users for a file transfer protocol-enabled server that you specify by passing the <code>ServerId</code> parameter.</p>",
+      "readonly":true
     },
     "ListWebApps":{
       "name":"ListWebApps",
@@ -830,7 +854,8 @@
         {"shape":"InternalServiceError"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists all web apps associated with your Amazon Web Services account for your current region.</p>"
+      "documentation":"<p>Lists all web apps associated with your Amazon Web Services account for your current region.</p>",
+      "readonly":true
     },
     "ListWorkflows":{
       "name":"ListWorkflows",
@@ -846,7 +871,8 @@
         {"shape":"ServiceUnavailableException"},
         {"shape":"InvalidNextTokenException"}
       ],
-      "documentation":"<p>Lists all workflows associated with your Amazon Web Services account for your current region.</p>"
+      "documentation":"<p>Lists all workflows associated with your Amazon Web Services account for your current region.</p>",
+      "readonly":true
     },
     "SendWorkflowStepState":{
       "name":"SendWorkflowStepState",
@@ -900,6 +926,40 @@
       ],
       "documentation":"<p>Begins a file transfer between local Amazon Web Services storage and a remote AS2 or SFTP server.</p> <ul> <li> <p>For an AS2 connector, you specify the <code>ConnectorId</code> and one or more <code>SendFilePaths</code> to identify the files you want to transfer.</p> </li> <li> <p>For an SFTP connector, the file transfer can be either outbound or inbound. In both cases, you specify the <code>ConnectorId</code>. Depending on the direction of the transfer, you also specify the following items:</p> <ul> <li> <p>If you are transferring file from a partner's SFTP server to Amazon Web Services storage, you specify one or more <code>RetrieveFilePaths</code> to identify the files you want to transfer, and a <code>LocalDirectoryPath</code> to specify the destination folder.</p> </li> <li> <p>If you are transferring file to a partner's SFTP server from Amazon Web Services storage, you specify one or more <code>SendFilePaths</code> to identify the files you want to transfer, and a <code>RemoteDirectoryPath</code> to specify the destination folder.</p> </li> </ul> </li> </ul>"
     },
+    "StartRemoteDelete":{
+      "name":"StartRemoteDelete",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartRemoteDeleteRequest"},
+      "output":{"shape":"StartRemoteDeleteResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceError"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Deletes a file or directory on the remote SFTP server.</p>"
+    },
+    "StartRemoteMove":{
+      "name":"StartRemoteMove",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"StartRemoteMoveRequest"},
+      "output":{"shape":"StartRemoteMoveResponse"},
+      "errors":[
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InvalidRequestException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServiceError"},
+        {"shape":"ServiceUnavailableException"}
+      ],
+      "documentation":"<p>Moves or renames a file or directory on the remote SFTP server.</p>"
+    },
     "StartServer":{
       "name":"StartServer",
       "http":{
@@ -1239,7 +1299,7 @@
         },
         "MdnResponse":{
           "shape":"MdnResponse",
-          "documentation":"<p>Used for outbound requests (from an Transfer Family server to a partner AS2 server) to determine whether the partner response for transfers is synchronous or asynchronous. Specify either of the following values:</p> <ul> <li> <p> <code>SYNC</code>: The system expects a synchronous MDN response, confirming that the file was transferred successfully (or not).</p> </li> <li> <p> <code>NONE</code>: Specifies that no MDN response is required.</p> </li> </ul>"
+          "documentation":"<p>Used for outbound requests (from an Transfer Family connector to a partner AS2 server) to determine whether the partner response for transfers is synchronous or asynchronous. Specify either of the following values:</p> <ul> <li> <p> <code>SYNC</code>: The system expects a synchronous MDN response, confirming that the file was transferred successfully (or not).</p> </li> <li> <p> <code>NONE</code>: Specifies that no MDN response is required.</p> </li> </ul>"
         },
         "BasicAuthSecretId":{
           "shape":"As2ConnectorSecretId",
@@ -1354,6 +1414,25 @@
       "documentation":"<p>This exception is thrown when the <code>UpdateServer</code> is called for a file transfer protocol-enabled server that has VPC as the endpoint type and the server's <code>VpcEndpointID</code> is not in the available state.</p>",
       "exception":true
     },
+    "ConnectorEgressConfig":{
+      "type":"structure",
+      "members":{
+        "VpcLattice":{
+          "shape":"ConnectorVpcLatticeEgressConfig",
+          "documentation":"<p>VPC_LATTICE configuration for routing connector traffic through customer VPCs. Enables private connectivity to SFTP servers without requiring public internet access or complex network configurations.</p>"
+        }
+      },
+      "documentation":"<p>Configuration structure that defines how traffic is routed from the connector to the SFTP server. Contains VPC Lattice settings when using VPC_LATTICE egress type for private connectivity through customer VPCs.</p>",
+      "union":true
+    },
+    "ConnectorEgressType":{
+      "type":"string",
+      "enum":[
+        "SERVICE_MANAGED",
+        "VPC_LATTICE"
+      ]
+    },
+    "ConnectorErrorMessage":{"type":"string"},
     "ConnectorFileTransferResult":{
       "type":"structure",
       "required":[
@@ -1398,6 +1477,29 @@
       "min":0,
       "pattern":"TransferSFTPConnectorSecurityPolicy-[A-Za-z0-9-]+"
     },
+    "ConnectorStatus":{
+      "type":"string",
+      "enum":[
+        "ACTIVE",
+        "ERRORED",
+        "PENDING"
+      ]
+    },
+    "ConnectorVpcLatticeEgressConfig":{
+      "type":"structure",
+      "required":["ResourceConfigurationArn"],
+      "members":{
+        "ResourceConfigurationArn":{
+          "shape":"VpcLatticeResourceConfigurationArn",
+          "documentation":"<p>ARN of the VPC_LATTICE Resource Configuration that defines the target SFTP server location. Must point to a valid Resource Configuration in the customer's VPC with appropriate network connectivity to the SFTP server.</p>"
+        },
+        "PortNumber":{
+          "shape":"SftpPort",
+          "documentation":"<p>Port number for connecting to the SFTP server through VPC_LATTICE. Defaults to 22 if not specified. Must match the port on which the target SFTP server is listening.</p>"
+        }
+      },
+      "documentation":"<p>VPC_LATTICE egress configuration that specifies the Resource Configuration ARN and port for connecting to SFTP servers through customer VPCs. Requires a valid Resource Configuration with appropriate network access.</p>"
+    },
     "CopyStepDetails":{
       "type":"structure",
       "members":{
@@ -1430,7 +1532,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -1543,14 +1645,11 @@
     },
     "CreateConnectorRequest":{
       "type":"structure",
-      "required":[
-        "Url",
-        "AccessRole"
-      ],
+      "required":["AccessRole"],
       "members":{
         "Url":{
           "shape":"Url",
-          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p>"
+          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p> <p>When creating AS2 connectors or service-managed SFTP connectors (connectors without egress configuration), you must provide a URL to specify the remote server endpoint. For VPC Lattice type connectors, the URL must be null.</p>"
         },
         "As2Config":{
           "shape":"As2ConnectorConfig",
@@ -1575,6 +1674,10 @@
         "SecurityPolicyName":{
           "shape":"ConnectorSecurityPolicyName",
           "documentation":"<p>Specifies the name of the security policy for the connector.</p>"
+        },
+        "EgressConfig":{
+          "shape":"ConnectorEgressConfig",
+          "documentation":"<p>Specifies the egress configuration for the connector, which determines how traffic is routed from the connector to the SFTP server. When set to VPC, enables routing through customer VPCs using VPC_LATTICE for private connectivity.</p>"
         }
       }
     },
@@ -1656,7 +1759,7 @@
         },
         "LoggingRole":{
           "shape":"NullableRole",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When set, you can view user activity in your CloudWatch logs.</p>"
         },
         "PostAuthenticationLoginBanner":{
           "shape":"PostAuthenticationLoginBanner",
@@ -1672,7 +1775,7 @@
         },
         "ProtocolDetails":{
           "shape":"ProtocolDetails",
-          "documentation":"<p>The protocol settings that are configured for your server.</p> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
+          "documentation":"<p>The protocol settings that are configured for your server.</p> <note> <p>Avoid placing Network Load Balancers (NLBs) or NAT gateways in front of Transfer Family servers, as this increases costs and can cause performance issues, including reduced connection limits for FTPS. For more details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/infrastructure-security.html#nlb-considerations\"> Avoid placing NLBs and NATs in front of Transfer Family</a>.</p> </note> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
         },
         "SecurityPolicyName":{
           "shape":"SecurityPolicyName",
@@ -1692,7 +1795,11 @@
         },
         "S3StorageOptions":{
           "shape":"S3StorageOptions",
-          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized. This is disabled by default.</p> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized.</p> <ul> <li> <p>If using the console, this is enabled by default.</p> </li> <li> <p>If using the API or CLI, this is disabled by default.</p> </li> </ul> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>Specifies whether to use IPv4 only, or to use dual-stack (IPv4 and IPv6) for your Transfer Family endpoint. The default value is <code>IPV4</code>.</p> <important> <p>The <code>IpAddressType</code> parameter has the following limitations:</p> <ul> <li> <p>It cannot be changed while the server is online. You must stop the server before modifying this parameter.</p> </li> <li> <p>It cannot be updated to <code>DUALSTACK</code> if the server has <code>AddressAllocationIds</code> specified.</p> </li> </ul> </important> <note> <p>When using <code>DUALSTACK</code> as the <code>IpAddressType</code>, you cannot set the <code>AddressAllocationIds</code> parameter for the <a href=\"https://docs.aws.amazon.com/transfer/latest/APIReference/API_EndpointDetails.html\">EndpointDetails</a> for the server.</p> </note>"
         }
       }
     },
@@ -1716,7 +1823,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -1779,11 +1886,11 @@
       "members":{
         "IdentityProviderDetails":{
           "shape":"WebAppIdentityProviderDetails",
-          "documentation":"<p>You can provide a structure that contains the details for the identity provider to use with your web app.</p>"
+          "documentation":"<p>You can provide a structure that contains the details for the identity provider to use with your web app.</p> <p>For more details about this parameter, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/webapp-identity-center.html\">Configure your identity provider for Transfer Family web apps</a>.</p>"
         },
         "AccessEndpoint":{
           "shape":"WebAppAccessEndpoint",
-          "documentation":"<p>The <code>AccessEndpoint</code> is the URL that you provide to your users for them to interact with the Transfer Family web app. You can specify a custom URL or use the default value.</p>"
+          "documentation":"<p>The <code>AccessEndpoint</code> is the URL that you provide to your users for them to interact with the Transfer Family web app. You can specify a custom URL or use the default value.</p> <p>Before you enter a custom URL for this parameter, follow the steps described in <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/webapp-customize.html\">Update your access endpoint with a custom URL</a>.</p>"
         },
         "WebAppUnits":{
           "shape":"WebAppUnits",
@@ -1792,6 +1899,10 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>Key-value pairs that can be used to group and search for web apps.</p>"
+        },
+        "WebAppEndpointPolicy":{
+          "shape":"WebAppEndpointPolicy",
+          "documentation":"<p> Setting for the type of endpoint policy for the web app. The default value is <code>STANDARD</code>. </p> <p>If you are creating the web app in an Amazon Web Services GovCloud (US) Region, you can set this parameter to <code>FIPS</code>.</p>"
         }
       }
     },
@@ -2013,6 +2124,12 @@
         }
       }
     },
+    "DeleteId":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[0-9a-zA-Z./-]+"
+    },
     "DeleteProfileRequest":{
       "type":"structure",
       "required":["ProfileId"],
@@ -2437,7 +2554,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryMappings":{
           "shape":"HomeDirectoryMappings",
@@ -2540,7 +2657,7 @@
         },
         "Status":{
           "shape":"CertificateStatusType",
-          "documentation":"<p>Currently, the only available status is <code>ACTIVE</code>: all other values are reserved for future use.</p>"
+          "documentation":"<p>A certificate's status can be either <code>ACTIVE</code> or <code>INACTIVE</code>.</p> <p>You can set <code>ActiveDate</code> and <code>InactiveDate</code> in the <code>UpdateCertificate</code> call. If you set values for these parameters, those values are used to determine whether the certificate has a status of <code>ACTIVE</code> or <code>INACTIVE</code>.</p> <p>If you don't set values for <code>ActiveDate</code> and <code>InactiveDate</code>, we use the <code>NotBefore</code> and <code>NotAfter</code> date as specified on the X509 certificate to determine when a certificate is active and when it is inactive.</p>"
         },
         "Certificate":{
           "shape":"CertificateBodyType",
@@ -2552,11 +2669,11 @@
         },
         "ActiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes active.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes active. If you do not specify a value, <code>ActiveDate</code> takes the same value as <code>NotBeforeDate</code>, which is specified by the CA. </p>"
         },
         "InactiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes inactive.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes inactive. If you do not specify a value, <code>InactiveDate</code> takes the same value as <code>NotAfterDate</code>, which is specified by the CA.</p>"
         },
         "Serial":{
           "shape":"CertSerial",
@@ -2587,7 +2704,11 @@
     },
     "DescribedConnector":{
       "type":"structure",
-      "required":["Arn"],
+      "required":[
+        "Arn",
+        "EgressType",
+        "Status"
+      ],
       "members":{
         "Arn":{
           "shape":"Arn",
@@ -2599,7 +2720,7 @@
         },
         "Url":{
           "shape":"Url",
-          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p>"
+          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p> <p>When creating AS2 connectors or service-managed SFTP connectors (connectors without egress configuration), you must provide a URL to specify the remote server endpoint. For VPC Lattice type connectors, the URL must be null.</p>"
         },
         "As2Config":{
           "shape":"As2ConnectorConfig",
@@ -2628,10 +2749,52 @@
         "SecurityPolicyName":{
           "shape":"ConnectorSecurityPolicyName",
           "documentation":"<p>The text name of the security policy for the specified connector.</p>"
+        },
+        "EgressConfig":{
+          "shape":"DescribedConnectorEgressConfig",
+          "documentation":"<p>Current egress configuration of the connector, showing how traffic is routed to the SFTP server. Contains VPC Lattice settings when using VPC_LATTICE egress type.</p> <p>When using the VPC_LATTICE egress type, Transfer Family uses a managed Service Network to simplify the resource sharing process.</p>"
+        },
+        "EgressType":{
+          "shape":"ConnectorEgressType",
+          "documentation":"<p>Type of egress configuration for the connector. SERVICE_MANAGED uses Transfer Family managed NAT gateways, while VPC_LATTICE routes traffic through customer VPCs using VPC Lattice.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"ConnectorErrorMessage",
+          "documentation":"<p>Error message providing details when the connector is in ERRORED status. Contains information to help troubleshoot connector creation or operation failures.</p>"
+        },
+        "Status":{
+          "shape":"ConnectorStatus",
+          "documentation":"<p>Current status of the connector. PENDING indicates creation/update in progress, ACTIVE means ready for operations, and ERRORED indicates a failure requiring attention.</p>"
         }
       },
       "documentation":"<p>Describes the parameters for the connector, as identified by the <code>ConnectorId</code>.</p>"
     },
+    "DescribedConnectorEgressConfig":{
+      "type":"structure",
+      "members":{
+        "VpcLattice":{
+          "shape":"DescribedConnectorVpcLatticeEgressConfig",
+          "documentation":"<p>VPC_LATTICE configuration details in the response, showing the current Resource Configuration ARN and port settings for VPC-based connectivity.</p>"
+        }
+      },
+      "documentation":"<p>Response structure containing the current egress configuration details for the connector. Shows how traffic is currently routed from the connector to the SFTP server.</p>",
+      "union":true
+    },
+    "DescribedConnectorVpcLatticeEgressConfig":{
+      "type":"structure",
+      "required":["ResourceConfigurationArn"],
+      "members":{
+        "ResourceConfigurationArn":{
+          "shape":"VpcLatticeResourceConfigurationArn",
+          "documentation":"<p>ARN of the VPC_LATTICE Resource Configuration currently used by the connector. This Resource Configuration defines the network path to the SFTP server through the customer's VPC.</p>"
+        },
+        "PortNumber":{
+          "shape":"SftpPort",
+          "documentation":"<p>Port number currently configured for SFTP connections through VPC_LATTICE. Shows the port on which the connector attempts to connect to the target SFTP server.</p>"
+        }
+      },
+      "documentation":"<p>VPC_LATTICE egress configuration details in the response, containing the Resource Configuration ARN and port number currently configured for the connector.</p>"
+    },
     "DescribedExecution":{
       "type":"structure",
       "members":{
@@ -2808,7 +2971,7 @@
         },
         "ProtocolDetails":{
           "shape":"ProtocolDetails",
-          "documentation":"<p>The protocol settings that are configured for your server.</p> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
+          "documentation":"<p>The protocol settings that are configured for your server.</p> <note> <p>Avoid placing Network Load Balancers (NLBs) or NAT gateways in front of Transfer Family servers, as this increases costs and can cause performance issues, including reduced connection limits for FTPS. For more details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/infrastructure-security.html#nlb-considerations\"> Avoid placing NLBs and NATs in front of Transfer Family</a>.</p> </note> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
         },
         "Domain":{
           "shape":"Domain",
@@ -2836,7 +2999,7 @@
         },
         "LoggingRole":{
           "shape":"NullableRole",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When set, you can view user activity in your CloudWatch logs.</p>"
         },
         "PostAuthenticationLoginBanner":{
           "shape":"PostAuthenticationLoginBanner",
@@ -2880,11 +3043,15 @@
         },
         "S3StorageOptions":{
           "shape":"S3StorageOptions",
-          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized. This is disabled by default.</p> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized.</p> <ul> <li> <p>If using the console, this is enabled by default.</p> </li> <li> <p>If using the API or CLI, this is disabled by default.</p> </li> </ul> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
         },
         "As2ServiceManagedEgressIpAddresses":{
           "shape":"ServiceManagedEgressIpAddresses",
           "documentation":"<p>The list of egress IP addresses of this server. These IP addresses are only relevant for servers that use the AS2 protocol. They are used for sending asynchronous MDNs.</p> <p>These IP addresses are assigned automatically when you create an AS2 server. Additionally, if you update an existing server and add the AS2 protocol, static IP addresses are assigned as well.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>Specifies whether to use IPv4 only, or to use dual-stack (IPv4 and IPv6) for your Transfer Family endpoint. The default value is <code>IPV4</code>.</p> <important> <p>The <code>IpAddressType</code> parameter has the following limitations:</p> <ul> <li> <p>It cannot be changed while the server is online. You must stop the server before modifying this parameter.</p> </li> <li> <p>It cannot be updated to <code>DUALSTACK</code> if the server has <code>AddressAllocationIds</code> specified.</p> </li> </ul> </important> <note> <p>When using <code>DUALSTACK</code> as the <code>IpAddressType</code>, you cannot set the <code>AddressAllocationIds</code> parameter for the <a href=\"https://docs.aws.amazon.com/transfer/latest/APIReference/API_EndpointDetails.html\">EndpointDetails</a> for the server.</p> </note>"
         }
       },
       "documentation":"<p>Describes the properties of a file transfer protocol-enabled server that was specified.</p>"
@@ -2899,7 +3066,7 @@
         },
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryMappings":{
           "shape":"HomeDirectoryMappings",
@@ -2923,7 +3090,7 @@
         },
         "SshPublicKeys":{
           "shape":"SshPublicKeys",
-          "documentation":"<p>Specifies the public key portion of the Secure Shell (SSH) keys stored for the described user.</p>"
+          "documentation":"<p>Specifies the public key portion of the Secure Shell (SSH) keys stored for the described user.</p> <note> <p>To delete the public key body, set its value to zero keys, as shown here:</p> <p> <code>SshPublicKeys: []</code> </p> </note>"
         },
         "Tags":{
           "shape":"Tags",
@@ -2970,6 +3137,10 @@
         "Tags":{
           "shape":"Tags",
           "documentation":"<p>Key-value pairs that can be used to group and search for web apps. Tags are metadata attached to web apps for any purpose.</p>"
+        },
+        "WebAppEndpointPolicy":{
+          "shape":"WebAppEndpointPolicy",
+          "documentation":"<p> Setting for the type of endpoint policy for the web app. The default value is <code>STANDARD</code>. </p> <p>If your web app was created in an Amazon Web Services GovCloud (US) Region, the value of this parameter can be <code>FIPS</code>, which indicates the web app endpoint is FIPS-compliant.</p>"
         }
       },
       "documentation":"<p>A structure that describes the parameters for the web app, as identified by the <code>WebAppId</code>.</p>"
@@ -2999,7 +3170,7 @@
         },
         "FaviconFile":{
           "shape":"WebAppFaviconFile",
-          "documentation":"<p>Returns a icon file data string (in base64 encoding).</p>"
+          "documentation":"<p>Returns an icon file data string (in base64 encoding).</p>"
         }
       },
       "documentation":"<p>A structure that contains the customization fields for the web app. You can provide a title, logo, and icon to customize the appearance of your web app.</p>"
@@ -3118,7 +3289,7 @@
       "members":{
         "AddressAllocationIds":{
           "shape":"AddressAllocationIds",
-          "documentation":"<p>A list of address allocation IDs that are required to attach an Elastic IP address to your server's endpoint.</p> <p>An address allocation ID corresponds to the allocation ID of an Elastic IP address. This value can be retrieved from the <code>allocationId</code> field from the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Address.html\">Address</a> data type. One way to retrieve this value is by calling the EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAddresses.html\">DescribeAddresses</a> API.</p> <p>This parameter is optional. Set this parameter if you want to make your VPC endpoint public-facing. For details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#create-internet-facing-endpoint\">Create an internet-facing endpoint for your server</a>.</p> <note> <p>This property can only be set as follows:</p> <ul> <li> <p> <code>EndpointType</code> must be set to <code>VPC</code> </p> </li> <li> <p>The Transfer Family server must be offline.</p> </li> <li> <p>You cannot set this parameter for Transfer Family servers that use the FTP protocol.</p> </li> <li> <p>The server must already have <code>SubnetIds</code> populated (<code>SubnetIds</code> and <code>AddressAllocationIds</code> cannot be updated simultaneously).</p> </li> <li> <p> <code>AddressAllocationIds</code> can't contain duplicates, and must be equal in length to <code>SubnetIds</code>. For example, if you have three subnet IDs, you must also specify three address allocation IDs.</p> </li> <li> <p>Call the <code>UpdateServer</code> API to set or change this parameter.</p> </li> </ul> </note>"
+          "documentation":"<p>A list of address allocation IDs that are required to attach an Elastic IP address to your server's endpoint.</p> <p>An address allocation ID corresponds to the allocation ID of an Elastic IP address. This value can be retrieved from the <code>allocationId</code> field from the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Address.html\">Address</a> data type. One way to retrieve this value is by calling the EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAddresses.html\">DescribeAddresses</a> API.</p> <p>This parameter is optional. Set this parameter if you want to make your VPC endpoint public-facing. For details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#create-internet-facing-endpoint\">Create an internet-facing endpoint for your server</a>.</p> <note> <p>This property can only be set as follows:</p> <ul> <li> <p> <code>EndpointType</code> must be set to <code>VPC</code> </p> </li> <li> <p>The Transfer Family server must be offline.</p> </li> <li> <p>You cannot set this parameter for Transfer Family servers that use the FTP protocol.</p> </li> <li> <p>The server must already have <code>SubnetIds</code> populated (<code>SubnetIds</code> and <code>AddressAllocationIds</code> cannot be updated simultaneously).</p> </li> <li> <p> <code>AddressAllocationIds</code> can't contain duplicates, and must be equal in length to <code>SubnetIds</code>. For example, if you have three subnet IDs, you must also specify three address allocation IDs.</p> </li> <li> <p>Call the <code>UpdateServer</code> API to set or change this parameter.</p> </li> <li> <p>You can't set address allocation IDs for servers that have an <code>IpAddressType</code> set to <code>DUALSTACK</code> You can only set this property if <code>IpAddressType</code> is set to <code>IPV4</code>.</p> </li> </ul> </note>"
         },
         "SubnetIds":{
           "shape":"SubnetIds",
@@ -3134,7 +3305,7 @@
         },
         "SecurityGroupIds":{
           "shape":"SecurityGroupIds",
-          "documentation":"<p>A list of security groups IDs that are available to attach to your server's endpoint.</p> <note> <p>This property can only be set when <code>EndpointType</code> is set to <code>VPC</code>.</p> <p>You can edit the <code>SecurityGroupIds</code> property in the <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/API_UpdateServer.html\">UpdateServer</a> API only if you are changing the <code>EndpointType</code> from <code>PUBLIC</code> or <code>VPC_ENDPOINT</code> to <code>VPC</code>. To change security groups associated with your server's VPC endpoint after creation, use the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpoint.html\">ModifyVpcEndpoint</a> API.</p> </note>"
+          "documentation":"<p>A list of security groups IDs that are available to attach to your server's endpoint.</p> <note> <p>While <code>SecurityGroupIds</code> appears in the response syntax for consistency with <code>CreateServer</code> and <code>UpdateServer</code> operations, this field is not populated in <code>DescribeServer</code> responses. Security groups are managed at the VPC endpoint level and can be modified outside of the Transfer Family service. To retrieve current security group information, use the EC2 <code>DescribeVpcEndpoints</code> API with the <code>VpcEndpointId</code> returned in the response.</p> <p>This property can only be set when <code>EndpointType</code> is set to <code>VPC</code>.</p> <p>You can edit the <code>SecurityGroupIds</code> property in the <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/API_UpdateServer.html\">UpdateServer</a> API only if you are changing the <code>EndpointType</code> from <code>PUBLIC</code> or <code>VPC_ENDPOINT</code> to <code>VPC</code>. To change security groups associated with your server's VPC endpoint after creation, use the Amazon EC2 <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpoint.html\">ModifyVpcEndpoint</a> API.</p> </note>"
         }
       },
       "documentation":"<p>The virtual private cloud (VPC) endpoint settings that are configured for your file transfer protocol-enabled server. With a VPC endpoint, you can restrict access to your server and resources only within your VPC. To control incoming internet traffic, invoke the <code>UpdateServer</code> API and attach an Elastic IP address to your server's endpoint.</p> <note> <p> After May 19, 2021, you won't be able to create a server using <code>EndpointType=VPC_ENDPOINT</code> in your Amazon Web Services account if your account hasn't already done so before May 19, 2021. If you have already created servers with <code>EndpointType=VPC_ENDPOINT</code> in your Amazon Web Services account on or before May 19, 2021, you will not be affected. After this date, use <code>EndpointType</code>=<code>VPC</code>.</p> <p>For more information, see https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.</p> <p>It is recommended that you use <code>VPC</code> as the <code>EndpointType</code>. With this endpoint type, you have the option to directly associate up to three Elastic IPv4 addresses (BYO IP included) with your server's endpoint and use VPC security groups to restrict traffic by the client's public IP address. This is not possible with <code>EndpointType</code> set to <code>VPC_ENDPOINT</code>.</p> </note>"
@@ -3418,7 +3589,7 @@
         },
         "Certificate":{
           "shape":"CertificateBodyType",
-          "documentation":"<ul> <li> <p>For the CLI, provide a file path for a certificate in URI format. For example, <code>--certificate file://encryption-cert.pem</code>. Alternatively, you can provide the raw content.</p> </li> <li> <p>For the SDK, specify the raw content of a certificate file. For example, <code>--certificate \"`cat encryption-cert.pem`\"</code>.</p> </li> </ul>"
+          "documentation":"<ul> <li> <p>For the CLI, provide a file path for a certificate in URI format. For example, <code>--certificate file://encryption-cert.pem</code>. Alternatively, you can provide the raw content.</p> </li> <li> <p>For the SDK, specify the raw content of a certificate file. For example, <code>--certificate \"`cat encryption-cert.pem`\"</code>.</p> </li> </ul> <note> <p>You can provide both the certificate and its chain in this parameter, without needing to use the <code>CertificateChain</code> parameter. If you use this parameter for both the certificate and its chain, do not use the <code>CertificateChain</code> parameter.</p> </note>"
         },
         "CertificateChain":{
           "shape":"CertificateChainType",
@@ -3426,15 +3597,15 @@
         },
         "PrivateKey":{
           "shape":"PrivateKeyType",
-          "documentation":"<ul> <li> <p>For the CLI, provide a file path for a private key in URI format.For example, <code>--private-key file://encryption-key.pem</code>. Alternatively, you can provide the raw content of the private key file.</p> </li> <li> <p>For the SDK, specify the raw content of a private key file. For example, <code>--private-key \"`cat encryption-key.pem`\"</code> </p> </li> </ul>"
+          "documentation":"<ul> <li> <p>For the CLI, provide a file path for a private key in URI format. For example, <code>--private-key file://encryption-key.pem</code>. Alternatively, you can provide the raw content of the private key file.</p> </li> <li> <p>For the SDK, specify the raw content of a private key file. For example, <code>--private-key \"`cat encryption-key.pem`\"</code> </p> </li> </ul>"
         },
         "ActiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes active.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes active. If you do not specify a value, <code>ActiveDate</code> takes the same value as <code>NotBeforeDate</code>, which is specified by the CA. </p>"
         },
         "InactiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes inactive.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes inactive. If you do not specify a value, <code>InactiveDate</code> takes the same value as <code>NotAfterDate</code>, which is specified by the CA.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -3585,6 +3756,13 @@
       "documentation":"<p>This exception is thrown when the client submits a malformed request.</p>",
       "exception":true
     },
+    "IpAddressType":{
+      "type":"string",
+      "enum":[
+        "IPV4",
+        "DUALSTACK"
+      ]
+    },
     "ListAccessesRequest":{
       "type":"structure",
       "required":["ServerId"],
@@ -4045,7 +4223,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -4125,11 +4303,11 @@
         },
         "ActiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes active.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes active. If you do not specify a value, <code>ActiveDate</code> takes the same value as <code>NotBeforeDate</code>, which is specified by the CA. </p>"
         },
         "InactiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes inactive.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes inactive. If you do not specify a value, <code>InactiveDate</code> takes the same value as <code>NotAfterDate</code>, which is specified by the CA.</p>"
         },
         "Type":{
           "shape":"CertificateType",
@@ -4159,7 +4337,7 @@
         },
         "Url":{
           "shape":"Url",
-          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p>"
+          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p> <p>When creating AS2 connectors or service-managed SFTP connectors (connectors without egress configuration), you must provide a URL to specify the remote server endpoint. For VPC Lattice type connectors, the URL must be null.</p>"
         }
       },
       "documentation":"<p>Returns details of the connector that is specified.</p>"
@@ -4277,7 +4455,7 @@
         },
         "LoggingRole":{
           "shape":"Role",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When set, you can view user activity in your CloudWatch logs.</p>"
         },
         "ServerId":{
           "shape":"ServerId",
@@ -4308,7 +4486,7 @@
         },
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -4402,7 +4580,7 @@
       "members":{
         "LoggingRole":{
           "shape":"Role",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When set, you can view user activity in your CloudWatch logs.</p>"
         },
         "LogGroupName":{
           "shape":"LogGroupName",
@@ -4430,6 +4608,12 @@
         "DIRECTORY"
       ]
     },
+    "MaxConcurrentConnections":{
+      "type":"integer",
+      "documentation":"<p>The number of concurrent connections that the connector will create to the remote server.</p>",
+      "box":true,
+      "min":1
+    },
     "MaxItems":{
       "type":"integer",
       "box":true,
@@ -4467,6 +4651,12 @@
       "min":1,
       "pattern":"[\\p{Print}\\p{Blank}]+"
     },
+    "MoveId":{
+      "type":"string",
+      "max":512,
+      "min":1,
+      "pattern":"[0-9a-zA-Z./-]+"
+    },
     "NextToken":{
       "type":"string",
       "max":6144,
@@ -4601,7 +4791,7 @@
       "members":{
         "PassiveIp":{
           "shape":"PassiveIp",
-          "documentation":"<p> Indicates passive mode, for FTP and FTPS protocols. Enter a single IPv4 address, such as the public IP address of a firewall, router, or load balancer. For example: </p> <p> <code>aws transfer update-server --protocol-details PassiveIp=0.0.0.0</code> </p> <p>Replace <code>0.0.0.0</code> in the example above with the actual IP address you want to use.</p> <note> <p> If you change the <code>PassiveIp</code> value, you must stop and then restart your Transfer Family server for the change to take effect. For details on using passive mode (PASV) in a NAT environment, see <a href=\"http://aws.amazon.com/blogs/storage/configuring-your-ftps-server-behind-a-firewall-or-nat-with-aws-transfer-family/\">Configuring your FTPS server behind a firewall or NAT with Transfer Family</a>. </p> </note> <p> <i>Special values</i> </p> <p>The <code>AUTO</code> and <code>0.0.0.0</code> are special values for the <code>PassiveIp</code> parameter. The value <code>PassiveIp=AUTO</code> is assigned by default to FTP and FTPS type servers. In this case, the server automatically responds with one of the endpoint IPs within the PASV response. <code>PassiveIp=0.0.0.0</code> has a more unique application for its usage. For example, if you have a High Availability (HA) Network Load Balancer (NLB) environment, where you have 3 subnets, you can only specify a single IP address using the <code>PassiveIp</code> parameter. This reduces the effectiveness of having High Availability. In this case, you can specify <code>PassiveIp=0.0.0.0</code>. This tells the client to use the same IP address as the Control connection and utilize all AZs for their connections. Note, however, that not all FTP clients support the <code>PassiveIp=0.0.0.0</code> response. FileZilla and WinSCP do support it. If you are using other clients, check to see if your client supports the <code>PassiveIp=0.0.0.0</code> response.</p>"
+          "documentation":"<p> Indicates passive mode, for FTP and FTPS protocols. Enter a single IPv4 address, such as the public IP address of a firewall, router, or load balancer. For example: </p> <p> <code>aws transfer update-server --protocol-details PassiveIp=0.0.0.0</code> </p> <p>Replace <code>0.0.0.0</code> in the example above with the actual IP address you want to use.</p> <note> <p> If you change the <code>PassiveIp</code> value, you must stop and then restart your Transfer Family server for the change to take effect. For details on using passive mode (PASV) in a NAT environment, see <a href=\"http://aws.amazon.com/blogs/storage/configuring-your-ftps-server-behind-a-firewall-or-nat-with-aws-transfer-family/\">Configuring your FTPS server behind a firewall or NAT with Transfer Family</a>. </p> <p>Additionally, avoid placing Network Load Balancers (NLBs) or NAT gateways in front of Transfer Family servers. This configuration increases costs and can cause performance issues. When NLBs or NATs are in the communication path, Transfer Family cannot accurately recognize client IP addresses, which impacts connection sharding and limits FTPS servers to only 300 simultaneous connections instead of 10,000. If you must use an NLB, use port 21 for health checks and enable TLS session resumption by setting <code>TlsSessionResumptionMode = ENFORCED</code>. For optimal performance, migrate to VPC endpoints with Elastic IP addresses instead of using NLBs. For more details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/infrastructure-security.html#nlb-considerations\"> Avoid placing NLBs and NATs in front of Transfer Family</a>. </p> </note> <p> <i>Special values</i> </p> <p>The <code>AUTO</code> and <code>0.0.0.0</code> are special values for the <code>PassiveIp</code> parameter. The value <code>PassiveIp=AUTO</code> is assigned by default to FTP and FTPS type servers. In this case, the server automatically responds with one of the endpoint IPs within the PASV response. <code>PassiveIp=0.0.0.0</code> has a more unique application for its usage. For example, if you have a High Availability (HA) Network Load Balancer (NLB) environment, where you have 3 subnets, you can only specify a single IP address using the <code>PassiveIp</code> parameter. This reduces the effectiveness of having High Availability. In this case, you can specify <code>PassiveIp=0.0.0.0</code>. This tells the client to use the same IP address as the Control connection and utilize all AZs for their connections. Note, however, that not all FTP clients support the <code>PassiveIp=0.0.0.0</code> response. FileZilla and WinSCP do support it. If you are using other clients, check to see if your client supports the <code>PassiveIp=0.0.0.0</code> response.</p>"
         },
         "TlsSessionResumptionMode":{
           "shape":"TlsSessionResumptionMode",
@@ -4723,7 +4913,7 @@
       "members":{
         "DirectoryListingOptimization":{
           "shape":"DirectoryListingOptimization",
-          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized. This is disabled by default.</p> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized.</p> <ul> <li> <p>If using the console, this is enabled by default.</p> </li> <li> <p>If using the API or CLI, this is disabled by default.</p> </li> </ul> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
         }
       },
       "documentation":"<p>The Amazon S3 storage options that are configured for your server.</p>"
@@ -4859,8 +5049,7 @@
     },
     "SendWorkflowStepStateResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ServerId":{
       "type":"string",
@@ -4925,14 +5114,33 @@
       "members":{
         "UserSecretId":{
           "shape":"SecretId",
-          "documentation":"<p>The identifier for the secret (in Amazon Web Services Secrets Manager) that contains the SFTP user's private key, password, or both. The identifier must be the Amazon Resource Name (ARN) of the secret.</p>"
+          "documentation":"<p>The identifier for the secret (in Amazon Web Services Secrets Manager) that contains the SFTP user's private key, password, or both. The identifier must be the Amazon Resource Name (ARN) of the secret.</p> <note> <ul> <li> <p>Required when creating an SFTP connector</p> </li> <li> <p>Optional when updating an existing SFTP connector</p> </li> </ul> </note>"
         },
         "TrustedHostKeys":{
           "shape":"SftpConnectorTrustedHostKeyList",
-          "documentation":"<p>The public portion of the host key, or keys, that are used to identify the external server to which you are connecting. You can use the <code>ssh-keyscan</code> command against the SFTP server to retrieve the necessary key.</p> <p>The three standard SSH public key format elements are <code>&lt;key type&gt;</code>, <code>&lt;body base64&gt;</code>, and an optional <code>&lt;comment&gt;</code>, with spaces between each element. Specify only the <code>&lt;key type&gt;</code> and <code>&lt;body base64&gt;</code>: do not enter the <code>&lt;comment&gt;</code> portion of the key.</p> <p>For the trusted host key, Transfer Family accepts RSA and ECDSA keys.</p> <ul> <li> <p>For RSA keys, the <code>&lt;key type&gt;</code> string is <code>ssh-rsa</code>.</p> </li> <li> <p>For ECDSA keys, the <code>&lt;key type&gt;</code> string is either <code>ecdsa-sha2-nistp256</code>, <code>ecdsa-sha2-nistp384</code>, or <code>ecdsa-sha2-nistp521</code>, depending on the size of the key you generated.</p> </li> </ul> <p>Run this command to retrieve the SFTP server host key, where your SFTP server name is <code>ftp.host.com</code>.</p> <p> <code>ssh-keyscan ftp.host.com</code> </p> <p>This prints the public host key to standard output.</p> <p> <code>ftp.host.com ssh-rsa AAAAB3Nza...&lt;long-string-for-public-key</code> </p> <p>Copy and paste this string into the <code>TrustedHostKeys</code> field for the <code>create-connector</code> command or into the <b>Trusted host keys</b> field in the console.</p>"
+          "documentation":"<p>The public portion of the host key, or keys, that are used to identify the external server to which you are connecting. You can use the <code>ssh-keyscan</code> command against the SFTP server to retrieve the necessary key.</p> <note> <p> <code>TrustedHostKeys</code> is optional for <code>CreateConnector</code>. If not provided, you can use <code>TestConnection</code> to retrieve the server host key during the initial connection attempt, and subsequently update the connector with the observed host key.</p> </note> <p>When creating connectors with egress config (VPC_LATTICE type connectors), since host name is not something we can verify, the only accepted trusted host key format is <code>key-type key-body</code> without the host name. For example: <code>ssh-rsa AAAAB3Nza...&lt;long-string-for-public-key&gt;</code> </p> <p>The three standard SSH public key format elements are <code>&lt;key type&gt;</code>, <code>&lt;body base64&gt;</code>, and an optional <code>&lt;comment&gt;</code>, with spaces between each element. Specify only the <code>&lt;key type&gt;</code> and <code>&lt;body base64&gt;</code>: do not enter the <code>&lt;comment&gt;</code> portion of the key.</p> <p>For the trusted host key, Transfer Family accepts RSA and ECDSA keys.</p> <ul> <li> <p>For RSA keys, the <code>&lt;key type&gt;</code> string is <code>ssh-rsa</code>.</p> </li> <li> <p>For ECDSA keys, the <code>&lt;key type&gt;</code> string is either <code>ecdsa-sha2-nistp256</code>, <code>ecdsa-sha2-nistp384</code>, or <code>ecdsa-sha2-nistp521</code>, depending on the size of the key you generated.</p> </li> </ul> <p>Run this command to retrieve the SFTP server host key, where your SFTP server name is <code>ftp.host.com</code>.</p> <p> <code>ssh-keyscan ftp.host.com</code> </p> <p>This prints the public host key to standard output.</p> <p> <code>ftp.host.com ssh-rsa AAAAB3Nza...&lt;long-string-for-public-key&gt;</code> </p> <p>Copy and paste this string into the <code>TrustedHostKeys</code> field for the <code>create-connector</code> command or into the <b>Trusted host keys</b> field in the console.</p> <p>For VPC Lattice type connectors (VPC_LATTICE), remove the hostname from the key and use only the <code>key-type key-body</code> format. In this example, it should be: <code>ssh-rsa AAAAB3Nza...&lt;long-string-for-public-key&gt;</code> </p>"
+        },
+        "MaxConcurrentConnections":{
+          "shape":"MaxConcurrentConnections",
+          "documentation":"<p>Specify the number of concurrent connections that your connector creates to the remote server. The default value is <code>1</code>. The maximum values is <code>5</code>.</p> <note> <p>If you are using the Amazon Web Services Management Console, the default value is <code>5</code>.</p> </note> <p>This parameter specifies the number of active connections that your connector can establish with the remote server at the same time. Increasing this value can enhance connector performance when transferring large file batches by enabling parallel operations.</p>"
+        }
+      },
+      "documentation":"<p>Contains the details for an SFTP connector object. The connector object is used for transferring files to and from a partner's SFTP server.</p>"
+    },
+    "SftpConnectorConnectionDetails":{
+      "type":"structure",
+      "members":{
+        "HostKey":{
+          "shape":"SftpConnectorHostKey",
+          "documentation":"<p>The SSH public key of the remote SFTP server. This is returned during the initial connection attempt when you call <code>TestConnection</code>. It allows you to retrieve the valid server host key to update the connector when you are unable to obtain it in advance.</p>"
         }
       },
-      "documentation":"<p>Contains the details for an SFTP connector object. The connector object is used for transferring files to and from a partner's SFTP server.</p> <note> <p>Because the <code>SftpConnectorConfig</code> data type is used for both creating and updating SFTP connectors, its parameters, <code>TrustedHostKeys</code> and <code>UserSecretId</code> are marked as not required. This is a bit misleading, as they are not required when you are updating an existing SFTP connector, but <i>are required</i> when you are creating a new SFTP connector.</p> </note>"
+      "documentation":"<p>Contains the details for an SFTP connector connection.</p>"
+    },
+    "SftpConnectorHostKey":{
+      "type":"string",
+      "max":2048,
+      "min":1
     },
     "SftpConnectorTrustedHostKey":{
       "type":"string",
@@ -4943,6 +5151,12 @@
       "type":"list",
       "member":{"shape":"SftpConnectorTrustedHostKey"},
       "max":10,
+      "min":0
+    },
+    "SftpPort":{
+      "type":"integer",
+      "box":true,
+      "max":65535,
       "min":1
     },
     "SigningAlg":{
@@ -4965,7 +5179,7 @@
       "type":"string",
       "max":32,
       "min":0,
-      "pattern":"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
+      "pattern":"[0-9a-fA-F\\.\\:]+"
     },
     "SshPublicKey":{
       "type":"structure",
@@ -5091,6 +5305,65 @@
         }
       }
     },
+    "StartRemoteDeleteRequest":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "DeletePath"
+      ],
+      "members":{
+        "ConnectorId":{
+          "shape":"ConnectorId",
+          "documentation":"<p>The unique identifier for the connector.</p>"
+        },
+        "DeletePath":{
+          "shape":"FilePath",
+          "documentation":"<p>The absolute path of the file or directory to delete. You can only specify one path per call to this operation.</p>"
+        }
+      }
+    },
+    "StartRemoteDeleteResponse":{
+      "type":"structure",
+      "required":["DeleteId"],
+      "members":{
+        "DeleteId":{
+          "shape":"DeleteId",
+          "documentation":"<p>Returns a unique identifier for the delete operation.</p>"
+        }
+      }
+    },
+    "StartRemoteMoveRequest":{
+      "type":"structure",
+      "required":[
+        "ConnectorId",
+        "SourcePath",
+        "TargetPath"
+      ],
+      "members":{
+        "ConnectorId":{
+          "shape":"ConnectorId",
+          "documentation":"<p>The unique identifier for the connector.</p>"
+        },
+        "SourcePath":{
+          "shape":"FilePath",
+          "documentation":"<p>The absolute path of the file or directory to move or rename. You can only specify one path per call to this operation.</p>"
+        },
+        "TargetPath":{
+          "shape":"FilePath",
+          "documentation":"<p>The absolute path for the target of the move/rename operation.</p>"
+        }
+      }
+    },
+    "StartRemoteMoveResponse":{
+      "type":"structure",
+      "required":["MoveId"],
+      "members":{
+        "MoveId":{
+          "shape":"MoveId",
+          "documentation":"<p>Returns a unique identifier for the move/rename operation.</p>"
+        }
+      }
+    },
     "StartServerRequest":{
       "type":"structure",
       "required":["ServerId"],
@@ -5240,6 +5513,10 @@
         "StatusMessage":{
           "shape":"Message",
           "documentation":"<p>Returns <code>Connection succeeded</code> if the test is successful. Or, returns a descriptive error message if the test fails. The following list provides troubleshooting details, depending on the error message that you receive.</p> <ul> <li> <p>Verify that your secret name aligns with the one in Transfer Role permissions.</p> </li> <li> <p>Verify the server URL in the connector configuration , and verify that the login credentials work successfully outside of the connector.</p> </li> <li> <p>Verify that the secret exists and is formatted correctly.</p> </li> <li> <p>Verify that the trusted host key in the connector configuration matches the <code>ssh-keyscan</code> output.</p> </li> </ul>"
+        },
+        "SftpConnectionDetails":{
+          "shape":"SftpConnectorConnectionDetails",
+          "documentation":"<p>Structure that contains the SFTP connector host key.</p>"
         }
       }
     },
@@ -5354,7 +5631,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -5473,11 +5750,11 @@
         },
         "ActiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes active.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes active. If you do not specify a value, <code>ActiveDate</code> takes the same value as <code>NotBeforeDate</code>, which is specified by the CA. </p>"
         },
         "InactiveDate":{
           "shape":"CertDate",
-          "documentation":"<p>An optional date that specifies when the certificate becomes inactive.</p>"
+          "documentation":"<p>An optional date that specifies when the certificate becomes inactive. If you do not specify a value, <code>InactiveDate</code> takes the same value as <code>NotAfterDate</code>, which is specified by the CA.</p>"
         },
         "Description":{
           "shape":"Description",
@@ -5495,6 +5772,17 @@
         }
       }
     },
+    "UpdateConnectorEgressConfig":{
+      "type":"structure",
+      "members":{
+        "VpcLattice":{
+          "shape":"UpdateConnectorVpcLatticeEgressConfig",
+          "documentation":"<p>VPC_LATTICE configuration updates for the connector. Use this to modify the Resource Configuration ARN or port number for VPC-based connectivity.</p>"
+        }
+      },
+      "documentation":"<p>Structure for updating the egress configuration of an existing connector. Allows modification of how traffic is routed from the connector to the SFTP server, including VPC_LATTICE settings.</p>",
+      "union":true
+    },
     "UpdateConnectorRequest":{
       "type":"structure",
       "required":["ConnectorId"],
@@ -5505,7 +5793,7 @@
         },
         "Url":{
           "shape":"Url",
-          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p>"
+          "documentation":"<p>The URL of the partner's AS2 or SFTP endpoint.</p> <p>When creating AS2 connectors or service-managed SFTP connectors (connectors without egress configuration), you must provide a URL to specify the remote server endpoint. For VPC Lattice type connectors, the URL must be null.</p>"
         },
         "As2Config":{
           "shape":"As2ConnectorConfig",
@@ -5526,6 +5814,10 @@
         "SecurityPolicyName":{
           "shape":"ConnectorSecurityPolicyName",
           "documentation":"<p>Specifies the name of the security policy for the connector.</p>"
+        },
+        "EgressConfig":{
+          "shape":"UpdateConnectorEgressConfig",
+          "documentation":"<p>Updates the egress configuration for the connector, allowing you to modify how traffic is routed from the connector to the SFTP server. Changes to VPC configuration may require connector restart.</p>"
         }
       }
     },
@@ -5539,6 +5831,20 @@
         }
       }
     },
+    "UpdateConnectorVpcLatticeEgressConfig":{
+      "type":"structure",
+      "members":{
+        "ResourceConfigurationArn":{
+          "shape":"VpcLatticeResourceConfigurationArn",
+          "documentation":"<p>Updated ARN of the VPC_LATTICE Resource Configuration. Use this to change the target SFTP server location or modify the network path through the customer's VPC infrastructure.</p>"
+        },
+        "PortNumber":{
+          "shape":"SftpPort",
+          "documentation":"<p>Updated port number for SFTP connections through VPC_LATTICE. Change this if the target SFTP server port has been modified or if connecting to a different server endpoint.</p>"
+        }
+      },
+      "documentation":"<p>VPC_LATTICE egress configuration updates for modifying how the connector routes traffic through customer VPCs. Changes to these settings may require connector restart to take effect.</p>"
+    },
     "UpdateHostKeyRequest":{
       "type":"structure",
       "required":[
@@ -5612,7 +5918,7 @@
         },
         "ProtocolDetails":{
           "shape":"ProtocolDetails",
-          "documentation":"<p>The protocol settings that are configured for your server.</p> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
+          "documentation":"<p>The protocol settings that are configured for your server.</p> <note> <p>Avoid placing Network Load Balancers (NLBs) or NAT gateways in front of Transfer Family servers, as this increases costs and can cause performance issues, including reduced connection limits for FTPS. For more details, see <a href=\"https://docs.aws.amazon.com/transfer/latest/userguide/infrastructure-security.html#nlb-considerations\"> Avoid placing NLBs and NATs in front of Transfer Family</a>.</p> </note> <ul> <li> <p> To indicate passive mode (for FTP and FTPS protocols), use the <code>PassiveIp</code> parameter. Enter a single dotted-quad IPv4 address, such as the external IP address of a firewall, router, or load balancer. </p> </li> <li> <p>To ignore the error that is generated when the client attempts to use the <code>SETSTAT</code> command on a file that you are uploading to an Amazon S3 bucket, use the <code>SetStatOption</code> parameter. To have the Transfer Family server ignore the <code>SETSTAT</code> command and upload files without needing to make any changes to your SFTP client, set the value to <code>ENABLE_NO_OP</code>. If you set the <code>SetStatOption</code> parameter to <code>ENABLE_NO_OP</code>, Transfer Family generates a log entry to Amazon CloudWatch Logs, so that you can determine when the client is making a <code>SETSTAT</code> call.</p> </li> <li> <p>To determine whether your Transfer Family server resumes recent, negotiated sessions through a unique session ID, use the <code>TlsSessionResumptionMode</code> parameter.</p> </li> <li> <p> <code>As2Transports</code> indicates the transport method for the AS2 messages. Currently, only HTTP is supported.</p> </li> </ul>"
         },
         "EndpointDetails":{
           "shape":"EndpointDetails",
@@ -5632,7 +5938,7 @@
         },
         "LoggingRole":{
           "shape":"NullableRole",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When set, you can view user activity in your CloudWatch logs.</p>"
         },
         "PostAuthenticationLoginBanner":{
           "shape":"PostAuthenticationLoginBanner",
@@ -5664,7 +5970,15 @@
         },
         "S3StorageOptions":{
           "shape":"S3StorageOptions",
-          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized. This is disabled by default.</p> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+          "documentation":"<p>Specifies whether or not performance for your Amazon S3 directories is optimized.</p> <ul> <li> <p>If using the console, this is enabled by default.</p> </li> <li> <p>If using the API or CLI, this is disabled by default.</p> </li> </ul> <p>By default, home directory mappings have a <code>TYPE</code> of <code>DIRECTORY</code>. If you enable this option, you would then need to explicitly set the <code>HomeDirectoryMapEntry</code> <code>Type</code> to <code>FILE</code> if you want a mapping to have a file target.</p>"
+        },
+        "IpAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>Specifies whether to use IPv4 only, or to use dual-stack (IPv4 and IPv6) for your Transfer Family endpoint. The default value is <code>IPV4</code>.</p> <important> <p>The <code>IpAddressType</code> parameter has the following limitations:</p> <ul> <li> <p>It cannot be changed while the server is online. You must stop the server before modifying this parameter.</p> </li> <li> <p>It cannot be updated to <code>DUALSTACK</code> if the server has <code>AddressAllocationIds</code> specified.</p> </li> </ul> </important> <note> <p>When using <code>DUALSTACK</code> as the <code>IpAddressType</code>, you cannot set the <code>AddressAllocationIds</code> parameter for the <a href=\"https://docs.aws.amazon.com/transfer/latest/APIReference/API_EndpointDetails.html\">EndpointDetails</a> for the server.</p> </note>"
+        },
+        "IdentityProviderType":{
+          "shape":"IdentityProviderType",
+          "documentation":"<p>The mode of authentication for a server. The default value is <code>SERVICE_MANAGED</code>, which allows you to store and access user credentials within the Transfer Family service.</p> <p>Use <code>AWS_DIRECTORY_SERVICE</code> to provide access to Active Directory groups in Directory Service for Microsoft Active Directory or Microsoft Active Directory in your on-premises environment or in Amazon Web Services using AD Connector. This option also requires you to provide a Directory ID by using the <code>IdentityProviderDetails</code> parameter.</p> <p>Use the <code>API_GATEWAY</code> value to integrate with an identity provider of your choosing. The <code>API_GATEWAY</code> setting requires you to provide an Amazon API Gateway endpoint URL to call for authentication by using the <code>IdentityProviderDetails</code> parameter.</p> <p>Use the <code>AWS_LAMBDA</code> value to directly use an Lambda function as your identity provider. If you choose this value, you must specify the ARN for the Lambda function in the <code>Function</code> parameter for the <code>IdentityProviderDetails</code> data type.</p>"
         }
       }
     },
@@ -5687,7 +6001,7 @@
       "members":{
         "HomeDirectory":{
           "shape":"HomeDirectory",
-          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>The <code>HomeDirectory</code> parameter is only used if <code>HomeDirectoryType</code> is set to <code>PATH</code>.</p> </note>"
+          "documentation":"<p>The landing directory (folder) for a user when they log in to the server using the client.</p> <p>A <code>HomeDirectory</code> example is <code>/bucket_name/home/mydirectory</code>.</p> <note> <p>You can use the <code>HomeDirectory</code> parameter for <code>HomeDirectoryType</code> when it is set to either <code>PATH</code> or <code>LOGICAL</code>.</p> </note>"
         },
         "HomeDirectoryType":{
           "shape":"HomeDirectoryType",
@@ -5755,7 +6069,7 @@
         },
         "FaviconFile":{
           "shape":"WebAppFaviconFile",
-          "documentation":"<p>Specify icon file data string (in base64 encoding).</p>"
+          "documentation":"<p>Specify an icon file data string (in base64 encoding).</p>"
         }
       }
     },
@@ -5872,6 +6186,12 @@
       "pattern":"vpce-[0-9a-f]{17}"
     },
     "VpcId":{"type":"string"},
+    "VpcLatticeResourceConfigurationArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceconfiguration/rcfg-[0-9a-z]{17}"
+    },
     "WebAppAccessEndpoint":{
       "type":"string",
       "max":1024,
@@ -5882,6 +6202,13 @@
       "max":1024,
       "min":1
     },
+    "WebAppEndpointPolicy":{
+      "type":"string",
+      "enum":[
+        "FIPS",
+        "STANDARD"
+      ]
+    },
     "WebAppFaviconFile":{
       "type":"blob",
       "max":20960,
diff -pruN 2.23.6-1/awscli/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/translate/2017-07-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/translate/2017-07-01/service-2.json 2.31.35-1/awscli/botocore/data/translate/2017-07-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/translate/2017-07-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/translate/2017-07-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"translate",
     "jsonVersion":"1.1",
     "protocol":"json",
+    "protocols":["json"],
     "serviceFullName":"Amazon Translate",
     "serviceId":"Translate",
     "signatureVersion":"v4",
     "signingName":"translate",
     "targetPrefix":"AWSShineFrontendService_20170701",
-    "uid":"translate-2017-07-01"
+    "uid":"translate-2017-07-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "CreateParallelData":{
@@ -1317,8 +1319,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -1793,8 +1794,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateParallelDataRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/trustedadvisor/2022-09-15/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/verifiedpermissions/2021-12-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/verifiedpermissions/2021-12-01/service-2.json 2.31.35-1/awscli/botocore/data/verifiedpermissions/2021-12-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/verifiedpermissions/2021-12-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/verifiedpermissions/2021-12-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -29,7 +29,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about a group (batch) of policies.</p> <note> <p>The <code>BatchGetPolicy</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:GetPolicy</code> in their IAM policies.</p> </note>"
+      "documentation":"<p>Retrieves information about a group (batch) of policies.</p> <note> <p>The <code>BatchGetPolicy</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:GetPolicy</code> in their IAM policies.</p> </note>",
+      "readonly":true
     },
     "BatchIsAuthorized":{
       "name":"BatchIsAuthorized",
@@ -46,7 +47,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Makes a series of decisions about multiple authorization requests for one principal or resource. Each request contains the equivalent content of an <code>IsAuthorized</code> request: principal, action, resource, and context. Either the <code>principal</code> or the <code>resource</code> parameter must be identical across all requests. For example, Verified Permissions won't evaluate a pair of requests where <code>bob</code> views <code>photo1</code> and <code>alice</code> views <code>photo2</code>. Authorization of <code>bob</code> to view <code>photo1</code> and <code>photo2</code>, or <code>bob</code> and <code>alice</code> to view <code>photo1</code>, are valid batches. </p> <p>The request is evaluated against all policies in the specified policy store that match the entities that you declare. The result of the decisions is a series of <code>Allow</code> or <code>Deny</code> responses, along with the IDs of the policies that produced each decision.</p> <p>The <code>entities</code> of a <code>BatchIsAuthorized</code> API request can contain up to 100 principals and up to 100 resources. The <code>requests</code> of a <code>BatchIsAuthorized</code> API request can contain up to 30 requests.</p> <note> <p>The <code>BatchIsAuthorized</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:IsAuthorized</code> in their IAM policies.</p> </note>"
+      "documentation":"<p>Makes a series of decisions about multiple authorization requests for one principal or resource. Each request contains the equivalent content of an <code>IsAuthorized</code> request: principal, action, resource, and context. Either the <code>principal</code> or the <code>resource</code> parameter must be identical across all requests. For example, Verified Permissions won't evaluate a pair of requests where <code>bob</code> views <code>photo1</code> and <code>alice</code> views <code>photo2</code>. Authorization of <code>bob</code> to view <code>photo1</code> and <code>photo2</code>, or <code>bob</code> and <code>alice</code> to view <code>photo1</code>, are valid batches. </p> <p>The request is evaluated against all policies in the specified policy store that match the entities that you declare. The result of the decisions is a series of <code>Allow</code> or <code>Deny</code> responses, along with the IDs of the policies that produced each decision.</p> <p>The <code>entities</code> of a <code>BatchIsAuthorized</code> API request can contain up to 100 principals and up to 100 resources. The <code>requests</code> of a <code>BatchIsAuthorized</code> API request can contain up to 30 requests.</p> <note> <p>The <code>BatchIsAuthorized</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:IsAuthorized</code> in their IAM policies.</p> </note>",
+      "readonly":true
     },
     "BatchIsAuthorizedWithToken":{
       "name":"BatchIsAuthorizedWithToken",
@@ -63,7 +65,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Makes a series of decisions about multiple authorization requests for one token. The principal in this request comes from an external identity source in the form of an identity or access token, formatted as a <a href=\"https://wikipedia.org/wiki/JSON_Web_Token\">JSON web token (JWT)</a>. The information in the parameters can also define additional context that Verified Permissions can include in the evaluations.</p> <p>The request is evaluated against all policies in the specified policy store that match the entities that you provide in the entities declaration and in the token. The result of the decisions is a series of <code>Allow</code> or <code>Deny</code> responses, along with the IDs of the policies that produced each decision.</p> <p>The <code>entities</code> of a <code>BatchIsAuthorizedWithToken</code> API request can contain up to 100 resources and up to 99 user groups. The <code>requests</code> of a <code>BatchIsAuthorizedWithToken</code> API request can contain up to 30 requests.</p> <note> <p>The <code>BatchIsAuthorizedWithToken</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:IsAuthorizedWithToken</code> in their IAM policies.</p> </note>"
+      "documentation":"<p>Makes a series of decisions about multiple authorization requests for one token. The principal in this request comes from an external identity source in the form of an identity or access token, formatted as a <a href=\"https://wikipedia.org/wiki/JSON_Web_Token\">JSON web token (JWT)</a>. The information in the parameters can also define additional context that Verified Permissions can include in the evaluations.</p> <p>The request is evaluated against all policies in the specified policy store that match the entities that you provide in the entities declaration and in the token. The result of the decisions is a series of <code>Allow</code> or <code>Deny</code> responses, along with the IDs of the policies that produced each decision.</p> <p>The <code>entities</code> of a <code>BatchIsAuthorizedWithToken</code> API request can contain up to 100 resources and up to 99 user groups. The <code>requests</code> of a <code>BatchIsAuthorizedWithToken</code> API request can contain up to 30 requests.</p> <note> <p>The <code>BatchIsAuthorizedWithToken</code> operation doesn't have its own IAM permission. To authorize this operation for Amazon Web Services principals, include the permission <code>verifiedpermissions:IsAuthorizedWithToken</code> in their IAM policies.</p> </note>",
+      "readonly":true
     },
     "CreateIdentitySource":{
       "name":"CreateIdentitySource",
@@ -192,6 +195,7 @@
       "output":{"shape":"DeletePolicyStoreOutput"},
       "errors":[
         {"shape":"ValidationException"},
+        {"shape":"InvalidStateException"},
         {"shape":"AccessDeniedException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -233,7 +237,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves the details about the specified identity source.</p>"
+      "documentation":"<p>Retrieves the details about the specified identity source.</p>",
+      "readonly":true
     },
     "GetPolicy":{
       "name":"GetPolicy",
@@ -250,7 +255,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified policy.</p>"
+      "documentation":"<p>Retrieves information about the specified policy.</p>",
+      "readonly":true
     },
     "GetPolicyStore":{
       "name":"GetPolicyStore",
@@ -267,7 +273,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves details about a policy store.</p>"
+      "documentation":"<p>Retrieves details about a policy store.</p>",
+      "readonly":true
     },
     "GetPolicyTemplate":{
       "name":"GetPolicyTemplate",
@@ -284,7 +291,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieve the details for the specified policy template in the specified policy store.</p>"
+      "documentation":"<p>Retrieve the details for the specified policy template in the specified policy store.</p>",
+      "readonly":true
     },
     "GetSchema":{
       "name":"GetSchema",
@@ -301,7 +309,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieve the details for the specified schema in the specified policy store.</p>"
+      "documentation":"<p>Retrieve the details for the specified schema in the specified policy store.</p>",
+      "readonly":true
     },
     "IsAuthorized":{
       "name":"IsAuthorized",
@@ -318,7 +327,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Makes an authorization decision about a service request described in the parameters. The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either <code>Allow</code> or <code>Deny</code>, along with a list of the policies that resulted in the decision.</p>"
+      "documentation":"<p>Makes an authorization decision about a service request described in the parameters. The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either <code>Allow</code> or <code>Deny</code>, along with a list of the policies that resulted in the decision.</p>",
+      "readonly":true
     },
     "IsAuthorizedWithToken":{
       "name":"IsAuthorizedWithToken",
@@ -335,7 +345,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Makes an authorization decision about a service request described in the parameters. The principal in this request comes from an external identity source in the form of an identity token formatted as a <a href=\"https://wikipedia.org/wiki/JSON_Web_Token\">JSON web token (JWT)</a>. The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either <code>Allow</code> or <code>Deny</code>, along with a list of the policies that resulted in the decision.</p> <p>Verified Permissions validates each token that is specified in a request by checking its expiration date and its signature.</p> <important> <p>Tokens from an identity source user continue to be usable until they expire. Token revocation and resource deletion have no effect on the validity of a token in your policy store</p> </important>"
+      "documentation":"<p>Makes an authorization decision about a service request described in the parameters. The principal in this request comes from an external identity source in the form of an identity token formatted as a <a href=\"https://wikipedia.org/wiki/JSON_Web_Token\">JSON web token (JWT)</a>. The information in the parameters can also define additional context that Verified Permissions can include in the evaluation. The request is evaluated against all matching policies in the specified policy store. The result of the decision is either <code>Allow</code> or <code>Deny</code>, along with a list of the policies that resulted in the decision.</p> <p>Verified Permissions validates each token that is specified in a request by checking its expiration date and its signature.</p> <important> <p>Tokens from an identity source user continue to be usable until they expire. Token revocation and resource deletion have no effect on the validity of a token in your policy store</p> </important>",
+      "readonly":true
     },
     "ListIdentitySources":{
       "name":"ListIdentitySources",
@@ -352,7 +363,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns a paginated list of all of the identity sources defined in the specified policy store.</p>"
+      "documentation":"<p>Returns a paginated list of all of the identity sources defined in the specified policy store.</p>",
+      "readonly":true
     },
     "ListPolicies":{
       "name":"ListPolicies",
@@ -369,7 +381,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns a paginated list of all policies stored in the specified policy store.</p>"
+      "documentation":"<p>Returns a paginated list of all policies stored in the specified policy store.</p>",
+      "readonly":true
     },
     "ListPolicyStores":{
       "name":"ListPolicyStores",
@@ -385,7 +398,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns a paginated list of all policy stores in the calling Amazon Web Services account.</p>"
+      "documentation":"<p>Returns a paginated list of all policy stores in the calling Amazon Web Services account.</p>",
+      "readonly":true
     },
     "ListPolicyTemplates":{
       "name":"ListPolicyTemplates",
@@ -402,7 +416,26 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Returns a paginated list of all policy templates in the specified policy store.</p>"
+      "documentation":"<p>Returns a paginated list of all policy templates in the specified policy store.</p>",
+      "readonly":true
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceInput"},
+      "output":{"shape":"ListTagsForResourceOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Returns the tags associated with the specified Amazon Verified Permissions resource. In Verified Permissions, policy stores can be tagged.</p>",
+      "readonly":true
     },
     "PutSchema":{
       "name":"PutSchema",
@@ -424,6 +457,41 @@
       "documentation":"<p>Creates or updates the policy schema in the specified policy store. The schema is used to validate any Cedar policies and policy templates submitted to the policy store. Any changes to the schema validate only policies and templates submitted after the schema change. Existing policies and templates are not re-evaluated against the changed schema. If you later update a policy, then it is evaluated against the new schema at that time.</p> <note> <p>Verified Permissions is <i> <a href=\"https://wikipedia.org/wiki/Eventual_consistency\">eventually consistent</a> </i>. It can take a few seconds for a new or changed element to propagate through the service and be visible in the results of other Verified Permissions operations.</p> </note>",
       "idempotent":true
     },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceInput"},
+      "output":{"shape":"TagResourceOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"TooManyTagsException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified Amazon Verified Permissions resource. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. In Verified Permissions, policy stores can be tagged.</p> <p>Tags don't have any semantic meaning to Amazon Web Services and are interpreted strictly as strings of characters.</p> <p>You can use the TagResource action with a resource that already has tags. If you specify a new tag key, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag.</p> <p>You can associate as many as 50 tags with a resource.</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceInput"},
+      "output":{"shape":"UntagResourceOutput"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes one or more tags from the specified Amazon Verified Permissions resource. In Verified Permissions, policy stores can be tagged.</p>"
+    },
     "UpdateIdentitySource":{
       "name":"UpdateIdentitySource",
       "http":{
@@ -548,32 +616,38 @@
       "pattern":"Action$|^.+::Action",
       "sensitive":true
     },
+    "AmazonResourceName":{
+      "type":"string",
+      "documentation":"<p>An Amazon Resource Name (ARN) uniquely identifies an AWS resource.</p>",
+      "max":2048,
+      "min":1
+    },
     "AttributeValue":{
       "type":"structure",
       "members":{
         "boolean":{
           "shape":"BooleanAttribute",
-          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#boolean\">Boolean</a> type.</p> <p>Example: <code>{\"boolean\": true}</code> </p>"
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-bool\">Boolean</a> type.</p> <p>Example: <code>{\"boolean\": true}</code> </p>"
         },
         "entityIdentifier":{
           "shape":"EntityIdentifier",
-          "documentation":"<p>An attribute value of type <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_EntityIdentifier.html\">EntityIdentifier</a>.</p> <p>Example: <code>\"entityIdentifier\": { \"entityId\": \"&lt;id&gt;\", \"entityType\": \"&lt;entity type&gt;\"}</code> </p>"
+          "documentation":"<p>An attribute value of type <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_EntityIdentifier.html\">EntityIdentifier</a>.</p> <p>Example: <code>{\"entityIdentifier\": { \"entityId\": \"alice\", \"entityType\": \"User\"} }</code> </p>"
         },
         "long":{
           "shape":"LongAttribute",
-          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#long\">Long</a> type.</p> <p>Example: <code>{\"long\": 0}</code> </p>"
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-long\">Long</a> type.</p> <p>Example: <code>{\"long\": 0}</code> </p>"
         },
         "string":{
           "shape":"StringAttribute",
-          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#string\">String</a> type.</p> <p>Example: <code>{\"string\": \"abc\"}</code> </p>"
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-string\">String</a> type.</p> <p>Example: <code>{\"string\": \"abc\"}</code> </p>"
         },
         "set":{
           "shape":"SetAttribute",
-          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#set\">Set</a> type.</p> <p>Example: <code>{\"set\": [ {} ] }</code> </p>"
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-set\">Set</a> type.</p> <p>Example: <code>{\"set\": [ {} ] }</code> </p>"
         },
         "record":{
           "shape":"RecordAttribute",
-          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#record\">Record</a> type.</p> <p>Example: <code>{\"record\": { \"keyName\": {} } }</code> </p>"
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-record\">Record</a> type.</p> <p>Example: <code>{\"record\": { \"keyName\": {} } }</code> </p>"
         },
         "ipaddr":{
           "shape":"IpAddr",
@@ -582,9 +656,17 @@
         "decimal":{
           "shape":"Decimal",
           "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-decimal\">decimal</a> type.</p> <p>Example: <code>{\"decimal\": \"1.1\"}</code> </p>"
+        },
+        "datetime":{
+          "shape":"DatetimeAttribute",
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-datetime\">datetime</a> type.</p> <p>Example: <code>{\"datetime\": \"2024-10-15T11:35:00Z\"}</code> </p>"
+        },
+        "duration":{
+          "shape":"Duration",
+          "documentation":"<p>An attribute value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-duration\">duration</a> type.</p> <p>Example: <code>{\"duration\": \"1h30m\"}</code> </p>"
         }
       },
-      "documentation":"<p>The value of an attribute.</p> <p>Contains information about the runtime context for a request for which an authorization decision is made. </p> <p>This data type is used as a member of the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ContextDefinition.html\">ContextDefinition</a> structure which is uses as a request parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html\">BatchIsAuthorized</a>, and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a> operations.</p>",
+      "documentation":"<p>The value of an attribute.</p> <p>Contains information about the runtime context for a request for which an authorization decision is made. </p> <p>This data type is used as a member of the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_ContextDefinition.html\">ContextDefinition</a> structure which is used as a request parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html\">BatchIsAuthorized</a>, and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a> operations.</p>",
       "union":true
     },
     "Audience":{
@@ -743,7 +825,7 @@
         },
         "entities":{
           "shape":"EntitiesDefinition",
-          "documentation":"<p>Specifies the list of resources and principals and their associated attributes that Verified Permissions can examine when evaluating the policies. </p> <note> <p>You can include only principal and resource entities in this parameter; you can't include actions. You must specify actions in the schema.</p> </note>"
+          "documentation":"<p>(Optional) Specifies the list of resources and principals and their associated attributes that Verified Permissions can examine when evaluating the policies. These additional entities and their attributes can be referenced and checked by conditional elements in the policies in the specified policy store.</p> <note> <p>You can include only principal and resource entities in this parameter; you can't include actions. You must specify actions in the schema.</p> </note>"
         },
         "requests":{
           "shape":"BatchIsAuthorizedInputList",
@@ -841,7 +923,7 @@
         },
         "entities":{
           "shape":"EntitiesDefinition",
-          "documentation":"<p>Specifies the list of resources and their associated attributes that Verified Permissions can examine when evaluating the policies. </p> <important> <p>You can't include principals in this parameter, only resource and action entities. This parameter can't include any entities of a type that matches the user or group entity types that you defined in your identity source.</p> <ul> <li> <p>The <code>BatchIsAuthorizedWithToken</code> operation takes principal attributes from <b> <i>only</i> </b> the <code>identityToken</code> or <code>accessToken</code> passed to the operation.</p> </li> <li> <p>For action entities, you can include only their <code>Identifier</code> and <code>EntityType</code>. </p> </li> </ul> </important>"
+          "documentation":"<p>(Optional) Specifies the list of resources and their associated attributes that Verified Permissions can examine when evaluating the policies. These additional entities and their attributes can be referenced and checked by conditional elements in the policies in the specified policy store.</p> <important> <p>You can't include principals in this parameter, only resource and action entities. This parameter can't include any entities of a type that matches the user or group entity types that you defined in your identity source.</p> <ul> <li> <p>The <code>BatchIsAuthorizedWithToken</code> operation takes principal attributes from <b> <i>only</i> </b> the <code>identityToken</code> or <code>accessToken</code> passed to the operation.</p> </li> <li> <p>For action entities, you can include only their <code>Identifier</code> and <code>EntityType</code>. </p> </li> </ul> </important>"
         },
         "requests":{
           "shape":"BatchIsAuthorizedWithTokenInputList",
@@ -927,6 +1009,73 @@
       "box":true,
       "sensitive":true
     },
+    "CedarJson":{
+      "type":"string",
+      "sensitive":true
+    },
+    "CedarTagRecordAttribute":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"CedarTagValue"}
+    },
+    "CedarTagSetAttribute":{
+      "type":"list",
+      "member":{"shape":"CedarTagValue"}
+    },
+    "CedarTagValue":{
+      "type":"structure",
+      "members":{
+        "boolean":{
+          "shape":"BooleanAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-bool\">Boolean</a> type.</p> <p>Example: <code>{\"boolean\": false}</code> </p>"
+        },
+        "entityIdentifier":{
+          "shape":"EntityIdentifier",
+          "documentation":"<p>A Cedar tag value of type <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_EntityIdentifier.html\">EntityIdentifier</a>.</p> <p>Example: <code>{\"entityIdentifier\": { \"entityId\": \"alice\", \"entityType\": \"User\"} }</code> </p>"
+        },
+        "long":{
+          "shape":"LongAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-long\">Long</a> type.</p> <p>Example: <code>{\"long\": 0}</code> </p>"
+        },
+        "string":{
+          "shape":"StringAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-string\">String</a> type.</p> <p>Example: <code>{\"string\": \"abc\"}</code> </p>"
+        },
+        "set":{
+          "shape":"CedarTagSetAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-set\">Set</a> type.</p> <p>Example: <code>{\"set\": [ { \"string\": \"abc\" } ] }</code> </p>"
+        },
+        "record":{
+          "shape":"CedarTagRecordAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-record\">Record</a> type.</p> <p>Example: <code>{\"record\": { \"keyName\": {} } }</code> </p>"
+        },
+        "ipaddr":{
+          "shape":"IpAddr",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-ipaddr\">ipaddr</a> type.</p> <p>Example: <code>{\"ip\": \"10.50.0.0/24\"}</code> </p>"
+        },
+        "decimal":{
+          "shape":"Decimal",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-decimal\">decimal</a> type.</p> <p>Example: <code>{\"decimal\": \"-2.0\"}</code> </p>"
+        },
+        "datetime":{
+          "shape":"DatetimeAttribute",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-datetime\">datetime</a> type.</p> <p>Example: <code>{\"datetime\": \"2025-11-04T11:35:00.000+0100\"}</code> </p>"
+        },
+        "duration":{
+          "shape":"Duration",
+          "documentation":"<p>A Cedar tag value of <a href=\"https://docs.cedarpolicy.com/policies/syntax-datatypes.html#datatype-duration\">duration</a> type.</p> <p>Example: <code>{\"duration\": \"-1d12h\"}</code> </p>"
+        }
+      },
+      "documentation":"<p>The value of an entity's Cedar tag.</p> <p>This data type is used as a member of the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_EntityItem.html\">EntityItem</a> structure that forms the body of the <code>Entities</code> request parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html\">BatchIsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a>, and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html\">BatchIsAuthorizedWithToken</a> operations.</p>",
+      "union":true
+    },
+    "CedarVersion":{
+      "type":"string",
+      "enum":[
+        "CEDAR_2",
+        "CEDAR_4"
+      ]
+    },
     "Claim":{
       "type":"string",
       "min":1,
@@ -1116,9 +1265,13 @@
         "contextMap":{
           "shape":"ContextMap",
           "documentation":"<p>An list of attributes that are needed to successfully evaluate an authorization request. Each attribute in this array must include a map of a data type and its value.</p> <p>Example: <code>\"contextMap\":{\"&lt;KeyName1&gt;\":{\"boolean\":true},\"&lt;KeyName2&gt;\":{\"long\":1234}}</code> </p>"
+        },
+        "cedarJson":{
+          "shape":"CedarJson",
+          "documentation":"<p>A Cedar JSON string representation of the context needed to successfully evaluate an authorization request.</p> <p>Example: <code>{\"cedarJson\":\"{\\\"&lt;KeyName1&gt;\\\": true, \\\"&lt;KeyName2&gt;\\\": 1234}\" }</code> </p>"
         }
       },
-      "documentation":"<p>Contains additional details about the context of the request. Verified Permissions evaluates this information in an authorization request as part of the <code>when</code> and <code>unless</code> clauses in a policy.</p> <p>This data type is used as a request parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html\">BatchIsAuthorized</a>, and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a> operations.</p> <p>Example: <code>\"context\":{\"contextMap\":{\"&lt;KeyName1&gt;\":{\"boolean\":true},\"&lt;KeyName2&gt;\":{\"long\":1234}}}</code> </p>",
+      "documentation":"<p>Contains additional details about the context of the request. Verified Permissions evaluates this information in an authorization request as part of the <code>when</code> and <code>unless</code> clauses in a policy.</p> <p>This data type is used as a request parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a>, <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorized.html\">BatchIsAuthorized</a>, and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a> operations.</p> <p>If you're passing context as part of the request, exactly one instance of <code>context</code> must be passed. If you don't want to pass context, omit the <code>context</code> parameter from your request rather than sending <code>context {}</code>.</p> <p>Example: <code>\"context\":{\"contextMap\":{\"&lt;KeyName1&gt;\":{\"boolean\":true},\"&lt;KeyName2&gt;\":{\"long\":1234}}}</code> </p>",
       "union":true
     },
     "ContextMap":{
@@ -1266,6 +1419,14 @@
         "description":{
           "shape":"PolicyStoreDescription",
           "documentation":"<p>Descriptive text that you can provide to help with identification of the current policy store.</p>"
+        },
+        "deletionProtection":{
+          "shape":"DeletionProtection",
+          "documentation":"<p>Specifies whether the policy store can be deleted. If enabled, the policy store can't be deleted.</p> <p>The default state is <code>DISABLED</code>.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The list of key-value pairs to associate with the policy store.</p>"
         }
       }
     },
@@ -1349,6 +1510,13 @@
         }
       }
     },
+    "DatetimeAttribute":{
+      "type":"string",
+      "max":28,
+      "min":10,
+      "pattern":"\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?(Z|[+-]\\d{4}))?",
+      "sensitive":true
+    },
     "Decimal":{
       "type":"string",
       "max":23,
@@ -1382,8 +1550,7 @@
     },
     "DeleteIdentitySourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePolicyInput":{
       "type":"structure",
@@ -1404,8 +1571,7 @@
     },
     "DeletePolicyOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePolicyStoreInput":{
       "type":"structure",
@@ -1419,8 +1585,7 @@
     },
     "DeletePolicyStoreOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePolicyTemplateInput":{
       "type":"structure",
@@ -1441,8 +1606,14 @@
     },
     "DeletePolicyTemplateOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
+    },
+    "DeletionProtection":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
     },
     "DeterminingPolicyItem":{
       "type":"structure",
@@ -1465,12 +1636,23 @@
       "min":1,
       "pattern":"https://.*"
     },
+    "Duration":{
+      "type":"string",
+      "max":100,
+      "min":2,
+      "pattern":"-?(\\d+d)?(\\d+h)?(\\d+m)?(\\d+s)?(\\d+ms)?",
+      "sensitive":true
+    },
     "EntitiesDefinition":{
       "type":"structure",
       "members":{
         "entityList":{
           "shape":"EntityList",
-          "documentation":"<p>An array of entities that are needed to successfully evaluate an authorization request. Each entity in this array must include an identifier for the entity, the attributes of the entity, and a list of any parent entities.</p>"
+          "documentation":"<p>An array of entities that are needed to successfully evaluate an authorization request. Each entity in this array must include an identifier for the entity, the attributes of the entity, and a list of any parent entities.</p> <note> <p>If you include multiple entities with the same <code>identifier</code>, only the last one is processed in the request.</p> </note>"
+        },
+        "cedarJson":{
+          "shape":"CedarJson",
+          "documentation":"<p>A Cedar JSON string representation of the entities needed to successfully evaluate an authorization request.</p> <p>Example: <code>{\"cedarJson\": \"[{\\\"uid\\\":{\\\"type\\\":\\\"Photo\\\",\\\"id\\\":\\\"VacationPhoto94.jpg\\\"},\\\"attrs\\\":{\\\"accessLevel\\\":\\\"public\\\"},\\\"parents\\\":[]}]\"}</code> </p>"
         }
       },
       "documentation":"<p>Contains the list of entities to be considered during an authorization request. This includes all principals, resources, and actions required to successfully evaluate the request.</p> <p>This data type is used as a field in the response parameter for the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorized.html\">IsAuthorized</a> and <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html\">IsAuthorizedWithToken</a> operations.</p>",
@@ -1481,6 +1663,11 @@
       "key":{"shape":"String"},
       "value":{"shape":"AttributeValue"}
     },
+    "EntityCedarTags":{
+      "type":"map",
+      "key":{"shape":"String"},
+      "value":{"shape":"CedarTagValue"}
+    },
     "EntityId":{
       "type":"string",
       "max":200,
@@ -1527,6 +1714,10 @@
         "parents":{
           "shape":"ParentList",
           "documentation":"<p>The parent entities in the hierarchy that contains the entity. A principal or resource entity can be defined with at most 99 <i>transitive parents</i> per authorization request. </p> <p>A transitive parent is an entity in the hierarchy of entities including all direct parents, and parents of parents. For example, a user can be a member of 91 groups if one of those groups is a member of eight groups, for a total of 100: one entity, 91 entity parents, and eight parents of parents. </p>"
+        },
+        "tags":{
+          "shape":"EntityCedarTags",
+          "documentation":"<p>A list of cedar tags for the entity.</p>"
         }
       },
       "documentation":"<p>Contains information about an entity that can be referenced in a Cedar policy.</p> <p>This data type is used as one of the fields in the <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_EntitiesDefinition.html\">EntitiesDefinition</a> structure.</p> <p> <code>{ \"identifier\": { \"entityType\": \"Photo\", \"entityId\": \"VacationPhoto94.jpg\" }, \"attributes\": {}, \"parents\": [ { \"entityType\": \"Album\", \"entityId\": \"alice_folder\" } ] }</code> </p>"
@@ -1709,6 +1900,10 @@
         "policyStoreId":{
           "shape":"PolicyStoreId",
           "documentation":"<p>Specifies the ID of the policy store that you want information about.</p>"
+        },
+        "tags":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to return the tags that are attached to the policy store. If this parameter is included in the API call, the tags are returned, otherwise they are not returned.</p> <note> <p>If this parameter is included in the API call but there are no tags attached to the policy store, the <code>tags</code> response parameter is omitted from the response.</p> </note>"
         }
       }
     },
@@ -1745,6 +1940,18 @@
         "description":{
           "shape":"PolicyStoreDescription",
           "documentation":"<p>Descriptive text that you can provide to help with identification of the current policy store.</p>"
+        },
+        "deletionProtection":{
+          "shape":"DeletionProtection",
+          "documentation":"<p>Specifies whether the policy store can be deleted. If enabled, the policy store can't be deleted.</p> <p>The default state is <code>DISABLED</code>.</p>"
+        },
+        "cedarVersion":{
+          "shape":"CedarVersion",
+          "documentation":"<p>The version of the Cedar language used with policies, policy templates, and schemas in this policy store. For more information, see <a href=\"https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/cedar4-faq.html\">Amazon Verified Permissions upgrade to Cedar v4 FAQ</a>.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The list of tags associated with the policy store.</p>"
         }
       }
     },
@@ -1999,6 +2206,15 @@
       "fault":true,
       "retryable":{"throttling":false}
     },
+    "InvalidStateException":{
+      "type":"structure",
+      "required":["message"],
+      "members":{
+        "message":{"shape":"String"}
+      },
+      "documentation":"<p>The policy store can't be deleted because deletion protection is enabled. To delete this policy store, disable deletion protection.</p>",
+      "exception":true
+    },
     "IpAddr":{
       "type":"string",
       "max":44,
@@ -2032,7 +2248,7 @@
         },
         "entities":{
           "shape":"EntitiesDefinition",
-          "documentation":"<p>Specifies the list of resources and principals and their associated attributes that Verified Permissions can examine when evaluating the policies. </p> <note> <p>You can include only principal and resource entities in this parameter; you can't include actions. You must specify actions in the schema.</p> </note>"
+          "documentation":"<p>(Optional) Specifies the list of resources and principals and their associated attributes that Verified Permissions can examine when evaluating the policies. These additional entities and their attributes can be referenced and checked by conditional elements in the policies in the specified policy store.</p> <note> <p>You can include only principal and resource entities in this parameter; you can't include actions. You must specify actions in the schema.</p> </note>"
         }
       }
     },
@@ -2088,7 +2304,7 @@
         },
         "entities":{
           "shape":"EntitiesDefinition",
-          "documentation":"<p>Specifies the list of resources and their associated attributes that Verified Permissions can examine when evaluating the policies. </p> <important> <p>You can't include principals in this parameter, only resource and action entities. This parameter can't include any entities of a type that matches the user or group entity types that you defined in your identity source.</p> <ul> <li> <p>The <code>IsAuthorizedWithToken</code> operation takes principal attributes from <b> <i>only</i> </b> the <code>identityToken</code> or <code>accessToken</code> passed to the operation.</p> </li> <li> <p>For action entities, you can include only their <code>Identifier</code> and <code>EntityType</code>. </p> </li> </ul> </important>"
+          "documentation":"<p>(Optional) Specifies the list of resources and their associated attributes that Verified Permissions can examine when evaluating the policies. These additional entities and their attributes can be referenced and checked by conditional elements in the policies in the specified policy store.</p> <important> <p>You can't include principals in this parameter, only resource and action entities. This parameter can't include any entities of a type that matches the user or group entity types that you defined in your identity source.</p> <ul> <li> <p>The <code>IsAuthorizedWithToken</code> operation takes principal attributes from <b> <i>only</i> </b> the <code>identityToken</code> or <code>accessToken</code> passed to the operation.</p> </li> <li> <p>For action entities, you can include only their <code>Identifier</code> and <code>EntityType</code>. </p> </li> </ul> </important>"
         }
       }
     },
@@ -2260,6 +2476,25 @@
         }
       }
     },
+    "ListTagsForResourceInput":{
+      "type":"structure",
+      "required":["resourceArn"],
+      "members":{
+        "resourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The ARN of the resource for which you want to view tags.</p>"
+        }
+      }
+    },
+    "ListTagsForResourceOutput":{
+      "type":"structure",
+      "members":{
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The list of tags associated with the resource.</p>"
+        }
+      }
+    },
     "LongAttribute":{
       "type":"long",
       "box":true,
@@ -2710,7 +2945,7 @@
       "type":"string",
       "max":200,
       "min":1,
-      "pattern":"[a-zA-Z0-9-]*"
+      "pattern":"[a-zA-Z0-9-/_]*"
     },
     "PolicyStoreItem":{
       "type":"structure",
@@ -2757,7 +2992,7 @@
       "type":"string",
       "max":200,
       "min":1,
-      "pattern":"[a-zA-Z0-9-]*"
+      "pattern":"[a-zA-Z0-9-/_]*"
     },
     "PolicyTemplateItem":{
       "type":"structure",
@@ -3016,6 +3251,50 @@
       "type":"string",
       "sensitive":true
     },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":200,
+      "min":1
+    },
+    "TagMap":{
+      "type":"map",
+      "key":{"shape":"TagKey"},
+      "value":{"shape":"TagValue"},
+      "max":200,
+      "min":0
+    },
+    "TagResourceInput":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tags"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The ARN of the resource that you're adding tags to.</p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p>The list of key-value pairs to associate with the resource.</p>"
+        }
+      }
+    },
+    "TagResourceOutput":{
+      "type":"structure",
+      "members":{}
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0
+    },
     "TemplateLinkedPolicyDefinition":{
       "type":"structure",
       "required":["policyTemplateId"],
@@ -3071,7 +3350,7 @@
           "documentation":"<p>The resource associated with this template-linked policy. Verified Permissions substitutes this resource for the <code>?resource</code> placeholder in the policy template when it evaluates an authorization request.</p>"
         }
       },
-      "documentation":"<p>Contains information about a policy created by instantiating a policy template. </p> <p>This </p>"
+      "documentation":"<p>Contains information about a policy created by instantiating a policy template. </p>"
     },
     "ThrottlingException":{
       "type":"structure",
@@ -3102,6 +3381,36 @@
       "pattern":"[A-Za-z0-9-_=]+.[A-Za-z0-9-_=]+.[A-Za-z0-9-_=]+",
       "sensitive":true
     },
+    "TooManyTagsException":{
+      "type":"structure",
+      "members":{
+        "message":{"shape":"String"},
+        "resourceName":{"shape":"AmazonResourceName"}
+      },
+      "documentation":"<p>No more tags be added because the limit (50) has been reached. To add new tags, use <code>UntagResource</code> to remove existing tags.</p>",
+      "exception":true
+    },
+    "UntagResourceInput":{
+      "type":"structure",
+      "required":[
+        "resourceArn",
+        "tagKeys"
+      ],
+      "members":{
+        "resourceArn":{
+          "shape":"AmazonResourceName",
+          "documentation":"<p>The ARN of the resource from which you are removing tags.</p>"
+        },
+        "tagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>The list of tag keys to remove from the resource.</p>"
+        }
+      }
+    },
+    "UntagResourceOutput":{
+      "type":"structure",
+      "members":{}
+    },
     "UpdateCognitoGroupConfiguration":{
       "type":"structure",
       "required":["groupEntityType"],
@@ -3383,6 +3692,10 @@
           "shape":"ValidationSettings",
           "documentation":"<p>A structure that defines the validation settings that want to enable for the policy store.</p>"
         },
+        "deletionProtection":{
+          "shape":"DeletionProtection",
+          "documentation":"<p>Specifies whether the policy store can be deleted. If enabled, the policy store can't be deleted.</p> <p>When you call <code>UpdatePolicyStore</code>, this parameter is unchanged unless explicitly included in the call.</p>"
+        },
         "description":{
           "shape":"PolicyStoreDescription",
           "documentation":"<p>Descriptive text that you can provide to help with identification of the current policy store.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/voice-id/2021-09-27/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/paginators-1.json 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -83,6 +83,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "items"
+    },
+    "ListDomainVerifications": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "items"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/service-2.json 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/service-2.json
--- 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2022-11-30",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"vpc-lattice",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Amazon VPC Lattice",
     "serviceId":"VPC Lattice",
     "signatureVersion":"v4",
     "signingName":"vpc-lattice",
-    "uid":"vpc-lattice-2022-11-30",
-    "auth":["aws.auth#sigv4"]
+    "uid":"vpc-lattice-2022-11-30"
   },
   "operations":{
     "BatchUpdateRule":{
@@ -26,9 +25,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the listener rules in a batch. You can use this operation to change the priority of listener rules. This can be useful when bulk updating or swapping rule priority.</p> <p> <b>Required permissions:</b> <code>vpc-lattice:UpdateRule</code> </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/security_iam_service-with-iam.html\">How Amazon VPC Lattice works with IAM</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
@@ -46,9 +45,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Enables access logs to be sent to Amazon CloudWatch, Amazon S3, and Amazon Kinesis Data Firehose. The service network owner can use the access logs to audit the services in the network. The service network owner can only see access logs from clients and services that are associated with their service network. Access log entries represent traffic originated from VPCs associated with that network. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/monitoring-access-logs.html\">Access logs</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
@@ -66,9 +65,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -87,9 +86,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -108,13 +107,13 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Creates a resource gateway.</p>",
+      "documentation":"<p>A resource gateway is a point of ingress into the VPC where a resource resides. It spans multiple Availability Zones. For your resource to be accessible from all Availability Zones, you should create your resource gateways to span as many Availability Zones as possible. A VPC can have multiple resource gateways.</p>",
       "idempotent":true
     },
     "CreateRule":{
@@ -129,9 +128,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -150,9 +149,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -171,9 +170,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -192,9 +191,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -213,9 +212,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -234,9 +233,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -255,9 +254,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -276,8 +275,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified access log subscription.</p>",
@@ -295,13 +294,32 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified auth policy. If an auth is set to <code>AWS_IAM</code> and the auth policy is deleted, all requests are denied. If you are trying to remove the auth policy completely, you must set the auth type to <code>NONE</code>. If auth is enabled on the resource, but no auth policy is set, all requests are denied.</p>",
       "idempotent":true
     },
+    "DeleteDomainVerification":{
+      "name":"DeleteDomainVerification",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/domainverifications/{domainVerificationIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteDomainVerificationRequest"},
+      "output":{"shape":"DeleteDomainVerificationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p> Deletes the specified domain verification. </p>",
+      "idempotent":true
+    },
     "DeleteListener":{
       "name":"DeleteListener",
       "http":{
@@ -314,9 +332,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified listener.</p>",
@@ -334,9 +352,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified resource configuration.</p>",
@@ -354,8 +372,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Disassociates the resource configuration from the resource VPC endpoint.</p>",
@@ -373,9 +391,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified resource gateway.</p>",
@@ -393,8 +411,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the specified resource policy.</p>",
@@ -412,9 +430,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a listener rule. Each listener has a default rule for checking connection requests, but you can define additional rules. Each rule consists of a priority, one or more actions, and one or more conditions. You can delete additional listener rules, but you cannot delete the default rule.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/listeners.html#listener-rules\">Listener rules</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
@@ -432,9 +450,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a service. A service can't be deleted if it's associated with a service network. If you delete a service, all resources related to the service, such as the resource policy, auth policy, listeners, listener rules, and access log subscriptions, are also deleted. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/services.html#delete-service\">Delete a service</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
@@ -452,9 +470,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a service network. You can only delete the service network if there is no service or VPC associated with it. If you delete a service network, all resources related to the service network, such as the resource policy, auth policy, and access log subscriptions, are also deleted. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/service-networks.html#delete-service-network\">Delete a service network</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
@@ -472,9 +490,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the association between a service network and a resource configuration.</p>",
@@ -492,9 +510,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes the association between a service and a service network. This operation fails if an association is still in progress.</p>",
@@ -512,9 +530,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Disassociates the VPC from the service network. You can't disassociate the VPC if there is a create or update association in progress.</p>",
@@ -531,9 +549,9 @@
       "output":{"shape":"DeleteTargetGroupResponse"},
       "errors":[
         {"shape":"ValidationException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a target group. You can't delete a target group if it is used in a listener rule or if the target group creation is in progress.</p>",
@@ -551,9 +569,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deregisters the specified targets from the specified target group.</p>",
@@ -571,11 +589,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified access log subscription.</p>"
+      "documentation":"<p>Retrieves information about the specified access log subscription.</p>",
+      "readonly":true
     },
     "GetAuthPolicy":{
       "name":"GetAuthPolicy",
@@ -589,11 +608,31 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves information about the auth policy for the specified service or service network.</p>",
+      "readonly":true
+    },
+    "GetDomainVerification":{
+      "name":"GetDomainVerification",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domainverifications/{domainVerificationIdentifier}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetDomainVerificationRequest"},
+      "output":{"shape":"GetDomainVerificationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the auth policy for the specified service or service network.</p>"
+      "documentation":"<p> Retrieves information about a domain verification.ß </p>",
+      "readonly":true
     },
     "GetListener":{
       "name":"GetListener",
@@ -607,11 +646,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified listener for the specified service.</p>"
+      "documentation":"<p>Retrieves information about the specified listener for the specified service.</p>",
+      "readonly":true
     },
     "GetResourceConfiguration":{
       "name":"GetResourceConfiguration",
@@ -625,11 +665,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified resource configuration.</p>"
+      "documentation":"<p>Retrieves information about the specified resource configuration.</p>",
+      "readonly":true
     },
     "GetResourceGateway":{
       "name":"GetResourceGateway",
@@ -643,11 +684,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified resource gateway.</p>"
+      "documentation":"<p>Retrieves information about the specified resource gateway.</p>",
+      "readonly":true
     },
     "GetResourcePolicy":{
       "name":"GetResourcePolicy",
@@ -661,11 +703,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified resource policy. The resource policy is an IAM policy created on behalf of the resource owner when they share a resource.</p>"
+      "documentation":"<p>Retrieves information about the specified resource policy. The resource policy is an IAM policy created on behalf of the resource owner when they share a resource.</p>",
+      "readonly":true
     },
     "GetRule":{
       "name":"GetRule",
@@ -679,11 +722,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified listener rules. You can also retrieve information about the default listener rule. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/listeners.html#listener-rules\">Listener rules</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
+      "documentation":"<p>Retrieves information about the specified listener rules. You can also retrieve information about the default listener rule. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/listeners.html#listener-rules\">Listener rules</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>",
+      "readonly":true
     },
     "GetService":{
       "name":"GetService",
@@ -697,11 +741,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified service.</p>"
+      "documentation":"<p>Retrieves information about the specified service.</p>",
+      "readonly":true
     },
     "GetServiceNetwork":{
       "name":"GetServiceNetwork",
@@ -715,11 +760,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified service network.</p>"
+      "documentation":"<p>Retrieves information about the specified service network.</p>",
+      "readonly":true
     },
     "GetServiceNetworkResourceAssociation":{
       "name":"GetServiceNetworkResourceAssociation",
@@ -733,11 +779,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified association between a service network and a resource configuration.</p>"
+      "documentation":"<p>Retrieves information about the specified association between a service network and a resource configuration.</p>",
+      "readonly":true
     },
     "GetServiceNetworkServiceAssociation":{
       "name":"GetServiceNetworkServiceAssociation",
@@ -751,11 +798,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified association between a service network and a service.</p>"
+      "documentation":"<p>Retrieves information about the specified association between a service network and a service.</p>",
+      "readonly":true
     },
     "GetServiceNetworkVpcAssociation":{
       "name":"GetServiceNetworkVpcAssociation",
@@ -769,11 +817,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified association between a service network and a VPC.</p>"
+      "documentation":"<p>Retrieves information about the specified association between a service network and a VPC.</p>",
+      "readonly":true
     },
     "GetTargetGroup":{
       "name":"GetTargetGroup",
@@ -787,11 +836,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Retrieves information about the specified target group.</p>"
+      "documentation":"<p>Retrieves information about the specified target group.</p>",
+      "readonly":true
     },
     "ListAccessLogSubscriptions":{
       "name":"ListAccessLogSubscriptions",
@@ -808,7 +858,27 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the access log subscriptions for the specified service network or service.</p>"
+      "documentation":"<p>Lists the access log subscriptions for the specified service network or service.</p>",
+      "readonly":true
+    },
+    "ListDomainVerifications":{
+      "name":"ListDomainVerifications",
+      "http":{
+        "method":"GET",
+        "requestUri":"/domainverifications",
+        "responseCode":200
+      },
+      "input":{"shape":"ListDomainVerificationsRequest"},
+      "output":{"shape":"ListDomainVerificationsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p> Lists the domain verifications. </p>",
+      "readonly":true
     },
     "ListListeners":{
       "name":"ListListeners",
@@ -822,11 +892,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the listeners for the specified service.</p>"
+      "documentation":"<p>Lists the listeners for the specified service.</p>",
+      "readonly":true
     },
     "ListResourceConfigurations":{
       "name":"ListResourceConfigurations",
@@ -843,7 +914,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the resource configurations owned by or shared with this account.</p>"
+      "documentation":"<p>Lists the resource configurations owned by or shared with this account.</p>",
+      "readonly":true
     },
     "ListResourceEndpointAssociations":{
       "name":"ListResourceEndpointAssociations",
@@ -860,7 +932,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the associations for the specified VPC endpoint.</p>"
+      "documentation":"<p>Lists the associations for the specified VPC endpoint.</p>",
+      "readonly":true
     },
     "ListResourceGateways":{
       "name":"ListResourceGateways",
@@ -877,7 +950,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the resource gateways that you own or that were shared with you.</p>"
+      "documentation":"<p>Lists the resource gateways that you own or that were shared with you.</p>",
+      "readonly":true
     },
     "ListRules":{
       "name":"ListRules",
@@ -891,11 +965,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the rules for the specified listener.</p>"
+      "documentation":"<p>Lists the rules for the specified listener.</p>",
+      "readonly":true
     },
     "ListServiceNetworkResourceAssociations":{
       "name":"ListServiceNetworkResourceAssociations",
@@ -912,7 +987,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the associations between a service network and a resource configuration.</p>"
+      "documentation":"<p>Lists the associations between a service network and a resource configuration.</p>",
+      "readonly":true
     },
     "ListServiceNetworkServiceAssociations":{
       "name":"ListServiceNetworkServiceAssociations",
@@ -929,7 +1005,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the associations between a service network and a service. You can filter the list either by service or service network. You must provide either the service network identifier or the service identifier.</p> <p>Every association in Amazon VPC Lattice has a unique Amazon Resource Name (ARN), such as when a service network is associated with a VPC or when a service is associated with a service network. If the association is for a resource is shared with another account, the association includes the local account ID as the prefix in the ARN.</p>"
+      "documentation":"<p>Lists the associations between a service network and a service. You can filter the list either by service or service network. You must provide either the service network identifier or the service identifier.</p> <p>Every association in Amazon VPC Lattice has a unique Amazon Resource Name (ARN), such as when a service network is associated with a VPC or when a service is associated with a service network. If the association is for a resource is shared with another account, the association includes the local account ID as the prefix in the ARN.</p>",
+      "readonly":true
     },
     "ListServiceNetworkVpcAssociations":{
       "name":"ListServiceNetworkVpcAssociations",
@@ -946,7 +1023,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the associations between a service network and a VPC. You can filter the list either by VPC or service network. You must provide either the ID of the service network identifier or the ID of the VPC.</p>"
+      "documentation":"<p>Lists the associations between a service network and a VPC. You can filter the list either by VPC or service network. You must provide either the ID of the service network identifier or the ID of the VPC.</p>",
+      "readonly":true
     },
     "ListServiceNetworkVpcEndpointAssociations":{
       "name":"ListServiceNetworkVpcEndpointAssociations",
@@ -963,7 +1041,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the associations between a service network and a VPC endpoint.</p>"
+      "documentation":"<p>Lists the associations between a service network and a VPC endpoint.</p>",
+      "readonly":true
     },
     "ListServiceNetworks":{
       "name":"ListServiceNetworks",
@@ -980,7 +1059,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the service networks owned by or shared with this account. The account ID in the ARN shows which account owns the service network.</p>"
+      "documentation":"<p>Lists the service networks owned by or shared with this account. The account ID in the ARN shows which account owns the service network.</p>",
+      "readonly":true
     },
     "ListServices":{
       "name":"ListServices",
@@ -997,7 +1077,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the services owned by the caller account or shared with the caller account.</p>"
+      "documentation":"<p>Lists the services owned by the caller account or shared with the caller account.</p>",
+      "readonly":true
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -1014,7 +1095,8 @@
         {"shape":"ResourceNotFoundException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the tags for the specified resource.</p>"
+      "documentation":"<p>Lists the tags for the specified resource.</p>",
+      "readonly":true
     },
     "ListTargetGroups":{
       "name":"ListTargetGroups",
@@ -1031,7 +1113,8 @@
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists your target groups. You can narrow your search by using the filters below in your request.</p>"
+      "documentation":"<p>Lists your target groups. You can narrow your search by using the filters below in your request.</p>",
+      "readonly":true
     },
     "ListTargets":{
       "name":"ListTargets",
@@ -1045,11 +1128,12 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
-      "documentation":"<p>Lists the targets for the target group. By default, all targets are included. You can use this API to check the health status of targets. You can also ﬁlter the results by target.</p>"
+      "documentation":"<p>Lists the targets for the target group. By default, all targets are included. You can use this API to check the health status of targets. You can also ﬁlter the results by target.</p>",
+      "readonly":true
     },
     "PutAuthPolicy":{
       "name":"PutAuthPolicy",
@@ -1063,8 +1147,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Creates or updates the auth policy. The policy string in JSON must not contain newlines or blank lines.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/auth-policies.html\">Auth policies</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
@@ -1081,8 +1165,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Attaches a resource-based permission policy to a service or service network. The policy must contain the same actions and condition statements as the Amazon Web Services Resource Access Manager permission for sharing services and service networks.</p>",
@@ -1100,14 +1184,34 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Registers the targets with the target group. If it's a Lambda target, you can only have one target in a target group.</p>"
     },
+    "StartDomainVerification":{
+      "name":"StartDomainVerification",
+      "http":{
+        "method":"POST",
+        "requestUri":"/domainverifications",
+        "responseCode":201
+      },
+      "input":{"shape":"StartDomainVerificationRequest"},
+      "output":{"shape":"StartDomainVerificationResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p> Starts the domain verification process for a custom domain name. </p>",
+      "idempotent":true
+    },
     "TagResource":{
       "name":"TagResource",
       "http":{
@@ -1120,8 +1224,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Adds the specified tags to the specified resource.</p>"
@@ -1156,9 +1260,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the specified access log subscription.</p>",
@@ -1176,9 +1280,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -1197,8 +1301,8 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -1216,8 +1320,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the specified resource gateway.</p>"
@@ -1234,9 +1339,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -1255,9 +1360,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -1275,9 +1380,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the specified service network.</p>",
@@ -1295,9 +1400,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Updates the service network and VPC association. If you add a security group to the service network and VPC association, the association must continue to have at least one security group. You can add or edit security groups at any time. However, to remove all security groups, you must first delete the association and then recreate it without security groups.</p>",
@@ -1315,9 +1420,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
-        {"shape":"ThrottlingException"},
-        {"shape":"ResourceNotFoundException"},
         {"shape":"ConflictException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"InternalServerException"}
       ],
@@ -1343,25 +1448,25 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?$"
+      "pattern":"arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:([^/].*)?"
     },
     "AccessLogSubscriptionArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:accesslogsubscription/als-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:accesslogsubscription/als-[0-9a-z]{17}"
     },
     "AccessLogSubscriptionId":{
       "type":"string",
       "max":21,
       "min":21,
-      "pattern":"^als-[0-9a-z]{17}$"
+      "pattern":"als-[0-9a-z]{17}"
     },
     "AccessLogSubscriptionIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((als-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:accesslogsubscription/als-[0-9a-z]{17}))$"
+      "pattern":"((als-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:accesslogsubscription/als-[0-9a-z]{17}))"
     },
     "AccessLogSubscriptionList":{
       "type":"list",
@@ -1370,46 +1475,46 @@
     "AccessLogSubscriptionSummary":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "destinationArn",
         "id",
-        "lastUpdatedAt",
+        "arn",
+        "resourceId",
         "resourceArn",
-        "resourceId"
+        "destinationArn",
+        "createdAt",
+        "lastUpdatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"AccessLogSubscriptionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the access log subscription was created, in ISO-8601 format.</p>"
-        },
-        "destinationArn":{
-          "shape":"AccessLogDestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the destination.</p>"
-        },
         "id":{
           "shape":"AccessLogSubscriptionId",
           "documentation":"<p>The ID of the access log subscription.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the access log subscription was last updated, in ISO-8601 format.</p>"
+        "arn":{
+          "shape":"AccessLogSubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription</p>"
+        },
+        "resourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The ID of the service or service network.</p>"
         },
         "resourceArn":{
           "shape":"ResourceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service or service network.</p>"
         },
-        "resourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service or service network.</p>"
+        "destinationArn":{
+          "shape":"AccessLogDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the destination.</p>"
         },
         "serviceNetworkLogType":{
           "shape":"ServiceNetworkLogType",
           "documentation":"<p>Log type of the service network.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the access log subscription was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the access log subscription was last updated, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about an access log subscription.</p>"
@@ -1418,13 +1523,13 @@
       "type":"string",
       "max":12,
       "min":1,
-      "pattern":"^[0-9]{12}$"
+      "pattern":"[0-9]{12}"
     },
     "Arn":{
       "type":"string",
       "max":1224,
       "min":0,
-      "pattern":"^arn:[a-z0-9][-.a-z0-9]{0,62}:vpc-lattice:([a-z0-9][-.a-z0-9]{0,62})?:\\d{12}?:[^/].{0,1023}$"
+      "pattern":"arn:[a-z0-9][-.a-z0-9]{0,62}:vpc-lattice:([a-z0-9][-.a-z0-9]{0,62})?:\\d{12}?:[^/].{0,1023}"
     },
     "ArnResource":{
       "type":"structure",
@@ -1445,7 +1550,7 @@
     },
     "AuthPolicyString":{
       "type":"string",
-      "max":10000,
+      "max":36864,
       "min":0
     },
     "AuthType":{
@@ -1458,11 +1563,17 @@
     "BatchUpdateRuleRequest":{
       "type":"structure",
       "required":[
+        "serviceIdentifier",
         "listenerIdentifier",
-        "rules",
-        "serviceIdentifier"
+        "rules"
       ],
       "members":{
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
+        },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
           "documentation":"<p>The ID or ARN of the listener.</p>",
@@ -1472,12 +1583,6 @@
         "rules":{
           "shape":"RuleUpdateList",
           "documentation":"<p>The rules for the specified listener.</p>"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
         }
       }
     },
@@ -1502,13 +1607,13 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"^(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:certificate/[0-9a-z-]+)?$"
+      "pattern":"(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:certificate/[0-9a-z-]+)?"
     },
     "ClientToken":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"[!-~]+"
+      "pattern":".*[!-~]+.*"
     },
     "ConflictException":{
       "type":"structure",
@@ -1538,8 +1643,8 @@
     "CreateAccessLogSubscriptionRequest":{
       "type":"structure",
       "required":[
-        "destinationArn",
-        "resourceIdentifier"
+        "resourceIdentifier",
+        "destinationArn"
       ],
       "members":{
         "clientToken":{
@@ -1547,14 +1652,14 @@
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
           "idempotencyToken":true
         },
-        "destinationArn":{
-          "shape":"AccessLogDestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the destination. The supported destination types are CloudWatch Log groups, Kinesis Data Firehose delivery streams, and Amazon S3 buckets.</p>"
-        },
         "resourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The ID or ARN of the service network or service.</p>"
         },
+        "destinationArn":{
+          "shape":"AccessLogDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the destination. The supported destination types are CloudWatch Log groups, Kinesis Data Firehose delivery streams, and Amazon S3 buckets.</p>"
+        },
         "serviceNetworkLogType":{
           "shape":"ServiceNetworkLogType",
           "documentation":"<p>The type of log that monitors your Amazon VPC Lattice service networks.</p>"
@@ -1568,74 +1673,74 @@
     "CreateAccessLogSubscriptionResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "destinationArn",
         "id",
+        "arn",
+        "resourceId",
         "resourceArn",
-        "resourceId"
+        "destinationArn"
       ],
       "members":{
-        "arn":{
-          "shape":"AccessLogSubscriptionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
-        },
-        "destinationArn":{
-          "shape":"AccessLogDestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the log destination.</p>"
-        },
         "id":{
           "shape":"AccessLogSubscriptionId",
           "documentation":"<p>The ID of the access log subscription.</p>"
         },
-        "resourceArn":{
-          "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network or service.</p>"
+        "arn":{
+          "shape":"AccessLogSubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
         },
         "resourceId":{
           "shape":"ResourceId",
           "documentation":"<p>The ID of the service network or service.</p>"
         },
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network or service.</p>"
+        },
         "serviceNetworkLogType":{
           "shape":"ServiceNetworkLogType",
           "documentation":"<p>The type of log that monitors your Amazon VPC Lattice service networks.</p>"
+        },
+        "destinationArn":{
+          "shape":"AccessLogDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the log destination.</p>"
         }
       }
     },
     "CreateListenerRequest":{
       "type":"structure",
       "required":[
-        "defaultAction",
+        "serviceIdentifier",
         "name",
         "protocol",
-        "serviceIdentifier"
+        "defaultAction"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
-          "idempotencyToken":true
-        },
-        "defaultAction":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule. Each listener has a default rule. The default rule is used if no other rules match.</p>"
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
         },
         "name":{
           "shape":"ListenerName",
           "documentation":"<p>The name of the listener. A listener name must be unique within a service. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
         },
+        "protocol":{
+          "shape":"ListenerProtocol",
+          "documentation":"<p>The listener protocol.</p>"
+        },
         "port":{
           "shape":"Port",
           "documentation":"<p>The listener port. You can specify a value from 1 to 65535. For HTTP, the default is 80. For HTTPS, the default is 443.</p>"
         },
-        "protocol":{
-          "shape":"ListenerProtocol",
-          "documentation":"<p>The listener protocol.</p>"
+        "defaultAction":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule. Each listener has a default rule. The default rule is used if no other rules match.</p>"
         },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
@@ -1650,10 +1755,6 @@
           "shape":"ListenerArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
         },
-        "defaultAction":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule.</p>"
-        },
         "id":{
           "shape":"ListenerId",
           "documentation":"<p>The ID of the listener.</p>"
@@ -1662,14 +1763,14 @@
           "shape":"ListenerName",
           "documentation":"<p>The name of the listener.</p>"
         },
-        "port":{
-          "shape":"Port",
-          "documentation":"<p>The port number of the listener.</p>"
-        },
         "protocol":{
           "shape":"ListenerProtocol",
           "documentation":"<p>The protocol of the listener.</p>"
         },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The port number of the listener.</p>"
+        },
         "serviceArn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
@@ -1677,6 +1778,10 @@
         "serviceId":{
           "shape":"ServiceId",
           "documentation":"<p>The ID of the service.</p>"
+        },
+        "defaultAction":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule.</p>"
         }
       }
     },
@@ -1687,19 +1792,14 @@
         "type"
       ],
       "members":{
-        "allowAssociationToShareableServiceNetwork":{
-          "shape":"Boolean",
-          "documentation":"<p>(SINGLE, GROUP, ARN) Specifies whether the resource configuration can be associated with a sharable service network. The default is false.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
-          "idempotencyToken":true
-        },
         "name":{
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration. The name must be unique within the account. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
         },
+        "type":{
+          "shape":"ResourceConfigurationType",
+          "documentation":"<p>The type of resource configuration. A resource configuration can be one of the following types:</p> <ul> <li> <p> <b>SINGLE</b> - A single resource.</p> </li> <li> <p> <b>GROUP</b> - A group of resources. You must create a group resource configuration before you create a child resource configuration.</p> </li> <li> <p> <b>CHILD</b> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <b>ARN</b> - An Amazon Web Services resource.</p> </li> </ul>"
+        },
         "portRanges":{
           "shape":"PortRangeList",
           "documentation":"<p>(SINGLE, GROUP, CHILD) The TCP port ranges that a consumer can use to access a resource configuration (for example: 1-65535). You can separate port ranges using commas (for example: 1,2,22-30).</p>"
@@ -1708,54 +1808,71 @@
           "shape":"ProtocolType",
           "documentation":"<p>(SINGLE, GROUP) The protocol accepted by the resource configuration.</p>"
         },
-        "resourceConfigurationDefinition":{
-          "shape":"ResourceConfigurationDefinition",
-          "documentation":"<p>(SINGLE, CHILD, ARN) The resource configuration.</p>"
+        "resourceGatewayIdentifier":{
+          "shape":"ResourceGatewayIdentifier",
+          "documentation":"<p>(SINGLE, GROUP, ARN) The ID or ARN of the resource gateway used to connect to the resource configuration. For a child resource configuration, this value is inherited from the parent resource configuration.</p>"
         },
         "resourceConfigurationGroupIdentifier":{
           "shape":"ResourceConfigurationIdentifier",
-          "documentation":"<p>(CHILD) The ID or ARN of the parent resource configuration (type is <code>GROUP</code>). This is used to associate a child resource configuration with a group resource configuration.</p>"
+          "documentation":"<p>(CHILD) The ID or ARN of the parent resource configuration of type <code>GROUP</code>. This is used to associate a child resource configuration with a group resource configuration.</p>"
         },
-        "resourceGatewayIdentifier":{
-          "shape":"ResourceGatewayIdentifier",
-          "documentation":"<p>(SINGLE, GROUP, ARN) The ID or ARN of the resource gateway used to connect to the resource configuration. For a child resource configuration, this value is inherited from the parent resource configuration.</p>"
+        "resourceConfigurationDefinition":{
+          "shape":"ResourceConfigurationDefinition",
+          "documentation":"<p>Identifies the resource configuration in one of the following ways:</p> <ul> <li> <p> <b>Amazon Resource Name (ARN)</b> - Supported resource-types that are provisioned by Amazon Web Services services, such as RDS databases, can be identified by their ARN.</p> </li> <li> <p> <b>Domain name</b> - Any domain name that is publicly resolvable.</p> </li> <li> <p> <b>IP address</b> - For IPv4 and IPv6, only IP addresses in the VPC are supported.</p> </li> </ul>"
+        },
+        "allowAssociationToShareableServiceNetwork":{
+          "shape":"Boolean",
+          "documentation":"<p>(SINGLE, GROUP, ARN) Specifies whether the resource configuration can be associated with a sharable service network. The default is false.</p>"
+        },
+        "customDomainName":{
+          "shape":"DomainName",
+          "documentation":"<p> A custom domain name for your resource configuration. Additionally, provide a DomainVerificationID to prove your ownership of a domain. </p>"
+        },
+        "groupDomain":{
+          "shape":"DomainName",
+          "documentation":"<p> (GROUP) The group domain for a group resource configuration. Any domains that you create for the child resource are subdomains of the group domain. Child resources inherit the verification status of the domain. </p>"
+        },
+        "domainVerificationIdentifier":{
+          "shape":"DomainVerificationIdentifier",
+          "documentation":"<p> The domain verification ID of your verified custom domain name. If you don't provide an ID, you must configure the DNS settings yourself. </p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the resource configuration.</p>"
-        },
-        "type":{
-          "shape":"ResourceConfigurationType",
-          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources. You must create a group resource configuration before you create a child resource configuration.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
         }
       }
     },
     "CreateResourceConfigurationResponse":{
       "type":"structure",
       "members":{
-        "allowAssociationToShareableServiceNetwork":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether the resource configuration can be associated with a sharable service network.</p>"
+        "id":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the resource configuration.</p>"
+        },
+        "name":{
+          "shape":"ResourceConfigurationName",
+          "documentation":"<p>The name of the resource configuration.</p>"
         },
         "arn":{
           "shape":"ResourceConfigurationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
-        },
-        "failureReason":{
-          "shape":"String",
-          "documentation":"<p>The reason that the request failed.</p>"
+        "resourceGatewayId":{
+          "shape":"ResourceGatewayId",
+          "documentation":"<p>The ID of the resource gateway associated with the resource configuration.</p>"
         },
-        "id":{
+        "resourceConfigurationGroupId":{
           "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the resource configuration.</p>"
+          "documentation":"<p>The ID of the parent resource configuration of type <code>GROUP</code>.</p>"
         },
-        "name":{
-          "shape":"ResourceConfigurationName",
-          "documentation":"<p>The name of the resource configuration.</p>"
+        "type":{
+          "shape":"ResourceConfigurationType",
+          "documentation":"<p>The type of resource configuration. A resource configuration can be one of the following types:</p> <ul> <li> <p> <b>SINGLE</b> - A single resource.</p> </li> <li> <p> <b>GROUP</b> - A group of resources. You must create a group resource configuration before you create a child resource configuration.</p> </li> <li> <p> <b>CHILD</b> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <b>ARN</b> - An Amazon Web Services resource.</p> </li> </ul>"
         },
         "portRanges":{
           "shape":"PortRangeList",
@@ -1765,64 +1882,80 @@
           "shape":"ProtocolType",
           "documentation":"<p>The protocol.</p>"
         },
+        "status":{
+          "shape":"ResourceConfigurationStatus",
+          "documentation":"<p>The current status of the resource configuration.</p>"
+        },
         "resourceConfigurationDefinition":{
           "shape":"ResourceConfigurationDefinition",
-          "documentation":"<p>The resource configuration.</p>"
+          "documentation":"<p>Identifies the resource configuration in one of the following ways:</p> <ul> <li> <p> <b>Amazon Resource Name (ARN)</b> - Supported resource-types that are provisioned by Amazon Web Services services, such as RDS databases, can be identified by their ARN.</p> </li> <li> <p> <b>Domain name</b> - Any domain name that is publicly resolvable.</p> </li> <li> <p> <b>IP address</b> - For IPv4 and IPv6, only IP addresses in the VPC are supported.</p> </li> </ul>"
         },
-        "resourceConfigurationGroupId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the parent resource configuration (type is GROUP).</p>"
+        "allowAssociationToShareableServiceNetwork":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the resource configuration can be associated with a sharable service network.</p>"
         },
-        "resourceGatewayId":{
-          "shape":"ResourceGatewayId",
-          "documentation":"<p>The ID of the resource gateway associated with the resource configuration.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
         },
-        "status":{
-          "shape":"ResourceConfigurationStatus",
-          "documentation":"<p>The current status of the resource configuration.</p>"
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason that the request failed.</p>"
         },
-        "type":{
-          "shape":"ResourceConfigurationType",
-          "documentation":"<p>The type of resource configuration.</p>"
+        "customDomainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The custom domain name for your resource configuration. </p>"
+        },
+        "domainVerificationId":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The domain name verification ID. </p>"
+        },
+        "groupDomain":{
+          "shape":"DomainName",
+          "documentation":"<p> (GROUP) The group domain for a group resource configuration. Any domains that you create for the child resource are subdomains of the group domain. Child resources inherit the verification status of the domain. </p>"
+        },
+        "domainVerificationArn":{
+          "shape":"DomainVerificationArn",
+          "documentation":"<p> The verification ID ARN </p>"
         }
       }
     },
     "CreateResourceGatewayRequest":{
       "type":"structure",
-      "required":[
-        "name",
-        "subnetIds",
-        "vpcIdentifier"
-      ],
+      "required":["name"],
       "members":{
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
           "idempotencyToken":true
         },
-        "ipAddressType":{
-          "shape":"ResourceGatewayIpAddressType",
-          "documentation":"<p>The type of IP address used by the resource gateway.</p>"
-        },
         "name":{
           "shape":"ResourceGatewayName",
           "documentation":"<p>The name of the resource gateway.</p>"
         },
-        "securityGroupIds":{
-          "shape":"CreateResourceGatewayRequestSecurityGroupIdsList",
-          "documentation":"<p>The IDs of the security groups to apply to the resource gateway. The security groups must be in the same VPC.</p>"
+        "vpcIdentifier":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
         },
         "subnetIds":{
           "shape":"SubnetList",
           "documentation":"<p>The IDs of the VPC subnets in which to create the resource gateway.</p>"
         },
+        "securityGroupIds":{
+          "shape":"CreateResourceGatewayRequestSecurityGroupIdsList",
+          "documentation":"<p>The IDs of the security groups to apply to the resource gateway. The security groups must be in the same VPC.</p>"
+        },
+        "ipAddressType":{
+          "shape":"ResourceGatewayIpAddressType",
+          "documentation":"<p>A resource gateway can have IPv4, IPv6 or dualstack addresses. The IP address type of a resource gateway must be compatible with the subnets of the resource gateway and the IP address type of the resource, as described here: </p> <ul> <li> <p> <b>IPv4</b>Assign IPv4 addresses to your resource gateway network interfaces. This option is supported only if all selected subnets have IPv4 address ranges, and the resource also has an IPv4 address.</p> </li> <li> <p> <b>IPv6</b>Assign IPv6 addresses to your resource gateway network interfaces. This option is supported only if all selected subnets are IPv6 only subnets, and the resource also has an IPv6 address.</p> </li> <li> <p> <b>Dualstack</b>Assign both IPv4 and IPv6 addresses to your resource gateway network interfaces. This option is supported only if all selected subnets have both IPv4 and IPv6 address ranges, and the resource either has an IPv4 or IPv6 address.</p> </li> </ul> <p>The IP address type of the resource gateway is independent of the IP address type of the client or the VPC endpoint through which the resource is accessed.</p>"
+        },
+        "ipv4AddressesPerEni":{
+          "shape":"Ipv4AddressesPerEni",
+          "documentation":"<p>The number of IPv4 addresses in each ENI for the resource gateway.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the resource gateway.</p>"
-        },
-        "vpcIdentifier":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
         }
       }
     },
@@ -1835,59 +1968,60 @@
     "CreateResourceGatewayResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceGatewayArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
+        "name":{
+          "shape":"ResourceGatewayName",
+          "documentation":"<p>The name of the resource gateway.</p>"
         },
         "id":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
-        "ipAddressType":{
-          "shape":"ResourceGatewayIpAddressType",
-          "documentation":"<p>The type of IP address for the resource gateway.</p>"
-        },
-        "name":{
-          "shape":"ResourceGatewayName",
-          "documentation":"<p>The name of the resource gateway.</p>"
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupList",
-          "documentation":"<p>The IDs of the security groups for the resource gateway.</p>"
+        "arn":{
+          "shape":"ResourceGatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
         },
         "status":{
           "shape":"ResourceGatewayStatus",
           "documentation":"<p>The status of the resource gateway.</p>"
         },
+        "vpcIdentifier":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC.</p>"
+        },
         "subnetIds":{
           "shape":"SubnetList",
           "documentation":"<p>The IDs of the resource gateway subnets.</p>"
         },
-        "vpcIdentifier":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupList",
+          "documentation":"<p>The IDs of the security groups for the resource gateway.</p>"
+        },
+        "ipAddressType":{
+          "shape":"ResourceGatewayIpAddressType",
+          "documentation":"<p>The type of IP address for the resource gateway.</p>"
+        },
+        "ipv4AddressesPerEni":{
+          "shape":"Ipv4AddressesPerEni",
+          "documentation":"<p>The number of IPv4 addresses in each ENI for the resource gateway.</p>"
         }
       }
     },
     "CreateRuleRequest":{
       "type":"structure",
       "required":[
-        "action",
+        "serviceIdentifier",
         "listenerIdentifier",
-        "match",
         "name",
+        "match",
         "priority",
-        "serviceIdentifier"
+        "action"
       ],
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
-          "idempotencyToken":true
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
         },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
@@ -1895,23 +2029,26 @@
           "location":"uri",
           "locationName":"listenerIdentifier"
         },
-        "match":{
-          "shape":"RuleMatch",
-          "documentation":"<p>The rule match.</p>"
-        },
         "name":{
           "shape":"RuleName",
           "documentation":"<p>The name of the rule. The name must be unique within the listener. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
         },
+        "match":{
+          "shape":"RuleMatch",
+          "documentation":"<p>The rule match.</p>"
+        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The priority assigned to the rule. Each rule for a specific listener must have a unique priority. The lower the priority number the higher the priority.</p>"
         },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
@@ -1922,10 +2059,6 @@
     "CreateRuleResponse":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>The rule action.</p>"
-        },
         "arn":{
           "shape":"RuleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the rule.</p>"
@@ -1934,17 +2067,21 @@
           "shape":"RuleId",
           "documentation":"<p>The ID of the rule.</p>"
         },
-        "match":{
-          "shape":"RuleMatch",
-          "documentation":"<p>The rule match. The <code>RuleMatch</code> must be an <code>HttpMatch</code>. This means that the rule should be an exact match on HTTP constraints which are made up of the HTTP method, path, and header.</p>"
-        },
         "name":{
           "shape":"RuleName",
           "documentation":"<p>The name of the rule.</p>"
         },
+        "match":{
+          "shape":"RuleMatch",
+          "documentation":"<p>The rule match. The <code>RuleMatch</code> must be an <code>HttpMatch</code>. This means that the rule should be an exact match on HTTP constraints which are made up of the HTTP method, path, and header.</p>"
+        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The priority assigned to the rule. The lower the priority number the higher the priority.</p>"
+        },
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>The rule action.</p>"
         }
       }
     },
@@ -1952,10 +2089,6 @@
       "type":"structure",
       "required":["name"],
       "members":{
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
@@ -1965,13 +2098,17 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network. The name must be unique to the account. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
         },
-        "sharingConfig":{
-          "shape":"SharingConfig",
-          "documentation":"<p>Specify if the service network should be enabled for sharing.</p>"
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the service network.</p>"
+        },
+        "sharingConfig":{
+          "shape":"SharingConfig",
+          "documentation":"<p>Specify if the service network should be enabled for sharing.</p>"
         }
       }
     },
@@ -1995,44 +2132,44 @@
           "shape":"ServiceNetworkIdentifierWithoutRegex",
           "documentation":"<p>The ID of the service network to associate with the resource configuration.</p>"
         },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled for the service network resource association. </p>"
+        },
         "tags":{
           "shape":"TagMap",
-          "documentation":"<p>The tags for the association.</p>"
+          "documentation":"<p>A key-value pair to associate with a resource.</p>"
         }
       }
     },
     "CreateServiceNetworkResourceAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkResourceAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkResourceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
+        "status":{
+          "shape":"ServiceNetworkResourceAssociationStatus",
+          "documentation":"<p>The status of the association.</p>"
+        },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The ID of the account that created the association.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkResourceAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "status":{
-          "shape":"ServiceNetworkResourceAssociationStatus",
-          "documentation":"<p>The status of the association.</p>"
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is is enabled for the service network resource association. </p>"
         }
       }
     },
     "CreateServiceNetworkResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
-        },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
-        },
         "id":{
           "shape":"ServiceNetworkId",
           "documentation":"<p>The ID of the service network.</p>"
@@ -2041,9 +2178,17 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
         },
+        "arn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
         "sharingConfig":{
           "shape":"SharingConfig",
           "documentation":"<p>Specifies if the service network is enabled for sharing.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
         }
       }
     },
@@ -2076,6 +2221,14 @@
     "CreateServiceNetworkServiceAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkServiceAssociationIdentifier",
+          "documentation":"<p>The ID of the association.</p>"
+        },
+        "status":{
+          "shape":"ServiceNetworkServiceAssociationStatus",
+          "documentation":"<p>The association status.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkServiceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
@@ -2091,14 +2244,6 @@
         "dnsEntry":{
           "shape":"DnsEntry",
           "documentation":"<p>The DNS name of the service.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkServiceAssociationIdentifier",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "status":{
-          "shape":"ServiceNetworkServiceAssociationStatus",
-          "documentation":"<p>The association status.</p>"
         }
       }
     },
@@ -2114,21 +2259,29 @@
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
           "idempotencyToken":true
         },
-        "securityGroupIds":{
-          "shape":"CreateServiceNetworkVpcAssociationRequestSecurityGroupIdsList",
-          "documentation":"<p>The IDs of the security groups. Security groups aren't added by default. You can add a security group to apply network level controls to control which resources in a VPC are allowed to access the service network and its services. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html\">Control traffic to resources using security groups</a> in the <i>Amazon VPC User Guide</i>.</p>"
-        },
         "serviceNetworkIdentifier":{
           "shape":"ServiceNetworkIdentifier",
           "documentation":"<p>The ID or ARN of the service network. You must use an ARN if the resources are in different accounts.</p>"
         },
+        "vpcIdentifier":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC.</p>"
+        },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled for the VPC association. </p>"
+        },
+        "securityGroupIds":{
+          "shape":"CreateServiceNetworkVpcAssociationRequestSecurityGroupIdsList",
+          "documentation":"<p>The IDs of the security groups. Security groups aren't added by default. You can add a security group to apply network level controls to control which resources in a VPC are allowed to access the service network and its services. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html\">Control traffic to resources using security groups</a> in the <i>Amazon VPC User Guide</i>.</p>"
+        },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the association.</p>"
         },
-        "vpcIdentifier":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC.</p>"
+        "dnsOptions":{
+          "shape":"DnsOptions",
+          "documentation":"<p> DNS options for the service network VPC association. </p>"
         }
       }
     },
@@ -2141,6 +2294,14 @@
     "CreateServiceNetworkVpcAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkVpcAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
+        "status":{
+          "shape":"ServiceNetworkVpcAssociationStatus",
+          "documentation":"<p>The association status.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkVpcAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
@@ -2149,41 +2310,26 @@
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkVpcAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
         "securityGroupIds":{
           "shape":"SecurityGroupList",
           "documentation":"<p>The IDs of the security groups.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkVpcAssociationStatus",
-          "documentation":"<p>The association status.</p>"
-        }
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled for the VPC association. </p>"
+        },
+        "dnsOptions":{"shape":"DnsOptions"}
       }
     },
     "CreateServiceRequest":{
       "type":"structure",
       "required":["name"],
       "members":{
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
-        },
-        "certificateArn":{
-          "shape":"CertificateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
           "idempotencyToken":true
         },
-        "customDomainName":{
-          "shape":"ServiceCustomDomainName",
-          "documentation":"<p>The custom domain name of the service.</p>"
-        },
         "name":{
           "shape":"ServiceName",
           "documentation":"<p>The name of the service. The name must be unique within the account. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
@@ -2191,43 +2337,55 @@
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the service.</p>"
+        },
+        "customDomainName":{
+          "shape":"ServiceCustomDomainName",
+          "documentation":"<p>The custom domain name of the service.</p>"
+        },
+        "certificateArn":{
+          "shape":"CertificateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
         }
       }
     },
     "CreateServiceResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceId",
+          "documentation":"<p>The ID of the service.</p>"
+        },
         "arn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
         },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
-        },
-        "certificateArn":{
-          "shape":"CertificateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
+        "name":{
+          "shape":"ServiceName",
+          "documentation":"<p>The name of the service.</p>"
         },
         "customDomainName":{
           "shape":"ServiceCustomDomainName",
           "documentation":"<p>The custom domain name of the service.</p>"
         },
-        "dnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The public DNS name of the service.</p>"
-        },
-        "id":{
-          "shape":"ServiceId",
-          "documentation":"<p>The ID of the service.</p>"
-        },
-        "name":{
-          "shape":"ServiceName",
-          "documentation":"<p>The name of the service.</p>"
+        "certificateArn":{
+          "shape":"CertificateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
         },
         "status":{
           "shape":"ServiceStatus",
           "documentation":"<p>The status. If the status is <code>CREATE_FAILED</code>, you must delete and recreate the service.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
+        },
+        "dnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The public DNS name of the service.</p>"
         }
       }
     },
@@ -2238,55 +2396,55 @@
         "type"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
-          "idempotencyToken":true
+        "name":{
+          "shape":"TargetGroupName",
+          "documentation":"<p>The name of the target group. The name must be unique within the account. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
+        },
+        "type":{
+          "shape":"TargetGroupType",
+          "documentation":"<p>The type of target group.</p>"
         },
         "config":{
           "shape":"TargetGroupConfig",
           "documentation":"<p>The target group configuration.</p>"
         },
-        "name":{
-          "shape":"TargetGroupName",
-          "documentation":"<p>The name of the target group. The name must be unique within the account. The valid characters are a-z, 0-9, and hyphens (-). You can't use a hyphen as the first or last character, or immediately after another hyphen.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagMap",
           "documentation":"<p>The tags for the target group.</p>"
-        },
-        "type":{
-          "shape":"TargetGroupType",
-          "documentation":"<p>The type of target group.</p>"
         }
       }
     },
     "CreateTargetGroupResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"TargetGroupArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
-        },
-        "config":{
-          "shape":"TargetGroupConfig",
-          "documentation":"<p>The target group configuration.</p>"
-        },
         "id":{
           "shape":"TargetGroupId",
           "documentation":"<p>The ID of the target group.</p>"
         },
+        "arn":{
+          "shape":"TargetGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
+        },
         "name":{
           "shape":"TargetGroupName",
           "documentation":"<p>The name of the target group.</p>"
         },
-        "status":{
-          "shape":"TargetGroupStatus",
-          "documentation":"<p>The status. You can retry the operation if the status is <code>CREATE_FAILED</code>. However, if you retry it while the status is <code>CREATE_IN_PROGRESS</code>, there is no change in the status.</p>"
-        },
         "type":{
           "shape":"TargetGroupType",
           "documentation":"<p>The type of target group.</p>"
+        },
+        "config":{
+          "shape":"TargetGroupConfig",
+          "documentation":"<p>The target group configuration.</p>"
+        },
+        "status":{
+          "shape":"TargetGroupStatus",
+          "documentation":"<p>The status. You can retry the operation if the status is <code>CREATE_FAILED</code>. However, if you retry it while the status is <code>CREATE_IN_PROGRESS</code>, there is no change in the status.</p>"
         }
       }
     },
@@ -2304,8 +2462,7 @@
     },
     "DeleteAccessLogSubscriptionResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAuthPolicyRequest":{
       "type":"structure",
@@ -2321,34 +2478,48 @@
     },
     "DeleteAuthPolicyResponse":{
       "type":"structure",
+      "members":{}
+    },
+    "DeleteDomainVerificationRequest":{
+      "type":"structure",
+      "required":["domainVerificationIdentifier"],
       "members":{
+        "domainVerificationIdentifier":{
+          "shape":"DomainVerificationIdentifier",
+          "documentation":"<p> The ID of the domain verification to delete. </p>",
+          "location":"uri",
+          "locationName":"domainVerificationIdentifier"
+        }
       }
     },
+    "DeleteDomainVerificationResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "DeleteListenerRequest":{
       "type":"structure",
       "required":[
-        "listenerIdentifier",
-        "serviceIdentifier"
+        "serviceIdentifier",
+        "listenerIdentifier"
       ],
       "members":{
-        "listenerIdentifier":{
-          "shape":"ListenerIdentifier",
-          "documentation":"<p>The ID or ARN of the listener.</p>",
-          "location":"uri",
-          "locationName":"listenerIdentifier"
-        },
         "serviceIdentifier":{
           "shape":"ServiceIdentifier",
           "documentation":"<p>The ID or ARN of the service.</p>",
           "location":"uri",
           "locationName":"serviceIdentifier"
+        },
+        "listenerIdentifier":{
+          "shape":"ListenerIdentifier",
+          "documentation":"<p>The ID or ARN of the listener.</p>",
+          "location":"uri",
+          "locationName":"listenerIdentifier"
         }
       }
     },
     "DeleteListenerResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourceConfigurationRequest":{
       "type":"structure",
@@ -2364,8 +2535,7 @@
     },
     "DeleteResourceConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourceEndpointAssociationRequest":{
       "type":"structure",
@@ -2382,22 +2552,22 @@
     "DeleteResourceEndpointAssociationResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceEndpointAssociationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
-        },
         "id":{
           "shape":"ResourceEndpointAssociationId",
           "documentation":"<p>The ID of the association.</p>"
         },
-        "resourceConfigurationArn":{
-          "shape":"ResourceConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration associated with the VPC endpoint of type resource.</p>"
+        "arn":{
+          "shape":"ResourceEndpointAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
         "resourceConfigurationId":{
           "shape":"ResourceConfigurationId",
           "documentation":"<p>The ID of the resource configuration.</p>"
         },
+        "resourceConfigurationArn":{
+          "shape":"ResourceConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration associated with the VPC endpoint of type resource.</p>"
+        },
         "vpcEndpointId":{
           "shape":"VpcEndpointId",
           "documentation":"<p>The ID of the resource VPC endpoint that is associated with the resource configuration.</p>"
@@ -2419,14 +2589,14 @@
     "DeleteResourceGatewayResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceGatewayArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
-        },
         "id":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
+        "arn":{
+          "shape":"ResourceGatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
+        },
         "name":{
           "shape":"ResourceGatewayName",
           "documentation":"<p>The name of the resource gateway.</p>"
@@ -2451,17 +2621,22 @@
     },
     "DeleteResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleRequest":{
       "type":"structure",
       "required":[
+        "serviceIdentifier",
         "listenerIdentifier",
-        "ruleIdentifier",
-        "serviceIdentifier"
+        "ruleIdentifier"
       ],
       "members":{
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
+        },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
           "documentation":"<p>The ID or ARN of the listener.</p>",
@@ -2473,19 +2648,12 @@
           "documentation":"<p>The ID or ARN of the rule.</p>",
           "location":"uri",
           "locationName":"ruleIdentifier"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
         }
       }
     },
     "DeleteRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteServiceNetworkRequest":{
       "type":"structure",
@@ -2514,14 +2682,14 @@
     "DeleteServiceNetworkResourceAssociationResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkResourceAssociationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
-        },
         "id":{
           "shape":"ServiceNetworkResourceAssociationId",
           "documentation":"<p>The ID of the association.</p>"
         },
+        "arn":{
+          "shape":"ServiceNetworkResourceAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
+        },
         "status":{
           "shape":"ServiceNetworkResourceAssociationStatus",
           "documentation":"<p>The status of the association.</p>"
@@ -2530,8 +2698,7 @@
     },
     "DeleteServiceNetworkResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteServiceNetworkServiceAssociationRequest":{
       "type":"structure",
@@ -2548,10 +2715,6 @@
     "DeleteServiceNetworkServiceAssociationResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkServiceAssociationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
-        },
         "id":{
           "shape":"ServiceNetworkServiceAssociationIdentifier",
           "documentation":"<p>The ID of the association.</p>"
@@ -2559,6 +2722,10 @@
         "status":{
           "shape":"ServiceNetworkServiceAssociationStatus",
           "documentation":"<p>The status. You can retry the operation if the status is <code>DELETE_FAILED</code>. However, if you retry it when the status is <code>DELETE_IN_PROGRESS</code>, there is no change in the status.</p>"
+        },
+        "arn":{
+          "shape":"ServiceNetworkServiceAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         }
       }
     },
@@ -2577,10 +2744,6 @@
     "DeleteServiceNetworkVpcAssociationResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkVpcAssociationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
-        },
         "id":{
           "shape":"ServiceNetworkVpcAssociationId",
           "documentation":"<p>The ID of the association.</p>"
@@ -2588,6 +2751,10 @@
         "status":{
           "shape":"ServiceNetworkVpcAssociationStatus",
           "documentation":"<p>The status. You can retry the operation if the status is <code>DELETE_FAILED</code>. However, if you retry it while the status is <code>DELETE_IN_PROGRESS</code>, there is no change in the status.</p>"
+        },
+        "arn":{
+          "shape":"ServiceNetworkVpcAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         }
       }
     },
@@ -2606,14 +2773,14 @@
     "DeleteServiceResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
-        },
         "id":{
           "shape":"ServiceId",
           "documentation":"<p>The ID of the service.</p>"
         },
+        "arn":{
+          "shape":"ServiceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
+        },
         "name":{
           "shape":"ServiceName",
           "documentation":"<p>The name of the service.</p>"
@@ -2639,14 +2806,14 @@
     "DeleteTargetGroupResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"TargetGroupArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
-        },
         "id":{
           "shape":"TargetGroupId",
           "documentation":"<p>The ID of the target group.</p>"
         },
+        "arn":{
+          "shape":"TargetGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
+        },
         "status":{
           "shape":"TargetGroupStatus",
           "documentation":"<p>The status. You can retry the operation if the status is <code>DELETE_FAILED</code>. However, if you retry it while the status is <code>DELETE_IN_PROGRESS</code>, the status doesn't change.</p>"
@@ -2705,6 +2872,20 @@
       },
       "documentation":"<p>Describes the DNS information of a service.</p>"
     },
+    "DnsOptions":{
+      "type":"structure",
+      "members":{
+        "privateDnsPreference":{
+          "shape":"PrivateDnsPreference",
+          "documentation":"<p> The preference for which private domains have a private hosted zone created for and associated with the specified VPC. Only supported when private DNS is enabled and when the VPC endpoint type is ServiceNetwork or Resource. </p> <ul> <li> <p> <code>ALL_DOMAINS</code> - VPC Lattice provisions private hosted zones for all custom domain names.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone only if custom domain name has been verified by the provider.</p> </li> <li> <p> <code>VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS</code> - VPC Lattice provisions private hosted zones for all verified custom domain names and other domain names that the resource consumer specifies. The resource consumer specifies the domain names in the privateDnsSpecifiedDomains parameter.</p> </li> <li> <p> <code>SPECIFIED_DOMAINS_ONLY</code> - VPC Lattice provisions a private hosted zone for domain names specified by the resource consumer. The resource consumer specifies the domain names in the privateDnsSpecifiedDomains parameter.</p> </li> </ul>"
+        },
+        "privateDnsSpecifiedDomains":{
+          "shape":"PrivateDnsSpecifiedDomainsList",
+          "documentation":"<p> Indicates which of the private domains to create private hosted zones for and associate with the specified VPC. Only supported when private DNS is enabled and the private DNS preference is <code>VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS</code> or <code>SPECIFIED_DOMAINS_ONLY</code>. </p>"
+        }
+      },
+      "documentation":"<p> The DNS configuration options. </p>"
+    },
     "DnsResource":{
       "type":"structure",
       "members":{
@@ -2714,7 +2895,7 @@
         },
         "ipAddressType":{
           "shape":"ResourceConfigurationIpAddressType",
-          "documentation":"<p>The type of IP address.</p>"
+          "documentation":"<p>The type of IP address. Dualstack is currently not supported.</p>"
         }
       },
       "documentation":"<p>The DNS name of the resource.</p>"
@@ -2724,6 +2905,73 @@
       "max":255,
       "min":3
     },
+    "DomainVerificationArn":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"arn:[a-z0-9f\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:domainverification/dv-[a-fA-F0-9]{17}"
+    },
+    "DomainVerificationId":{
+      "type":"string",
+      "max":20,
+      "min":20,
+      "pattern":"dv-[a-fA-F0-9]{17}"
+    },
+    "DomainVerificationIdentifier":{
+      "type":"string",
+      "max":2048,
+      "min":20,
+      "pattern":"((dv-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:domainverification/dv-[a-fA-F0-9]{17}))"
+    },
+    "DomainVerificationList":{
+      "type":"list",
+      "member":{"shape":"DomainVerificationSummary"}
+    },
+    "DomainVerificationSummary":{
+      "type":"structure",
+      "required":[
+        "id",
+        "arn",
+        "domainName",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "id":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The ID of the domain verification. </p>"
+        },
+        "arn":{
+          "shape":"DomainVerificationArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the domain verification. </p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The domain name being verified. </p>"
+        },
+        "status":{
+          "shape":"VerificationStatus",
+          "documentation":"<p> The current status of the domain verification process. </p>"
+        },
+        "txtMethodConfig":{
+          "shape":"TxtMethodConfig",
+          "documentation":"<p> The TXT record configuration used for domain verification. </p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the domain verification was created, in ISO-8601 format. </p>"
+        },
+        "lastVerifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the domain was last successfully verified, in ISO-8601 format. </p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p> The tags associated with the domain verification. </p>"
+        }
+      },
+      "documentation":"<p> Summary information about a domain verification. </p>"
+    },
     "FailureCode":{"type":"string"},
     "FailureMessage":{"type":"string"},
     "FixedResponseAction":{
@@ -2732,7 +2980,7 @@
       "members":{
         "statusCode":{
           "shape":"HttpStatusCode",
-          "documentation":"<p>The HTTP response code.</p>"
+          "documentation":"<p>The HTTP response code. Only <code>404</code> and <code>500</code> status codes are supported.</p>"
         }
       },
       "documentation":"<p>Describes an action that returns a custom HTTP response.</p>"
@@ -2763,46 +3011,46 @@
     "GetAccessLogSubscriptionResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "createdAt",
-        "destinationArn",
         "id",
-        "lastUpdatedAt",
+        "arn",
+        "resourceId",
         "resourceArn",
-        "resourceId"
+        "destinationArn",
+        "createdAt",
+        "lastUpdatedAt"
       ],
       "members":{
-        "arn":{
-          "shape":"AccessLogSubscriptionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the access log subscription was created, in ISO-8601 format.</p>"
-        },
-        "destinationArn":{
-          "shape":"AccessLogDestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log destination.</p>"
-        },
         "id":{
           "shape":"AccessLogSubscriptionId",
           "documentation":"<p>The ID of the access log subscription.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the access log subscription was last updated, in ISO-8601 format.</p>"
+        "arn":{
+          "shape":"AccessLogSubscriptionArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
+        },
+        "resourceId":{
+          "shape":"ResourceId",
+          "documentation":"<p>The ID of the service network or service.</p>"
         },
         "resourceArn":{
           "shape":"ResourceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service network or service.</p>"
         },
-        "resourceId":{
-          "shape":"ResourceId",
-          "documentation":"<p>The ID of the service network or service.</p>"
+        "destinationArn":{
+          "shape":"AccessLogDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log destination.</p>"
         },
         "serviceNetworkLogType":{
           "shape":"ServiceNetworkLogType",
           "documentation":"<p>The log type for the service network.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the access log subscription was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the access log subscription was last updated, in ISO-8601 format.</p>"
         }
       }
     },
@@ -2821,6 +3069,14 @@
     "GetAuthPolicyResponse":{
       "type":"structure",
       "members":{
+        "policy":{
+          "shape":"AuthPolicyString",
+          "documentation":"<p>The auth policy.</p>"
+        },
+        "state":{
+          "shape":"AuthPolicyState",
+          "documentation":"<p>The state of the auth policy. The auth policy is only active when the auth type is set to <code>AWS_IAM</code>. If you provide a policy, then authentication and authorization decisions are made based on this policy and the client's IAM policy. If the auth type is <code>NONE</code>, then any auth policy that you provide remains inactive. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/service-networks.html#create-service-network\">Create a service network</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
+        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the auth policy was created, in ISO-8601 format.</p>"
@@ -2828,35 +3084,83 @@
         "lastUpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the auth policy was last updated, in ISO-8601 format.</p>"
+        }
+      }
+    },
+    "GetDomainVerificationRequest":{
+      "type":"structure",
+      "required":["domainVerificationIdentifier"],
+      "members":{
+        "domainVerificationIdentifier":{
+          "shape":"DomainVerificationIdentifier",
+          "documentation":"<p> The ID or ARN of the domain verification to retrieve. </p>",
+          "location":"uri",
+          "locationName":"domainVerificationIdentifier"
+        }
+      }
+    },
+    "GetDomainVerificationResponse":{
+      "type":"structure",
+      "required":[
+        "id",
+        "arn",
+        "domainName",
+        "status",
+        "createdAt"
+      ],
+      "members":{
+        "id":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The ID of the domain verification. </p>"
         },
-        "policy":{
-          "shape":"AuthPolicyString",
-          "documentation":"<p>The auth policy.</p>"
+        "arn":{
+          "shape":"DomainVerificationArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the domain verification. </p>"
         },
-        "state":{
-          "shape":"AuthPolicyState",
-          "documentation":"<p>The state of the auth policy. The auth policy is only active when the auth type is set to <code>AWS_IAM</code>. If you provide a policy, then authentication and authorization decisions are made based on this policy and the client's IAM policy. If the auth type is <code>NONE</code>, then any auth policy that you provide remains inactive. For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/service-networks.html#create-service-network\">Create a service network</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The domain name being verified. </p>"
+        },
+        "status":{
+          "shape":"VerificationStatus",
+          "documentation":"<p> The current status of the domain verification process. </p>"
+        },
+        "txtMethodConfig":{
+          "shape":"TxtMethodConfig",
+          "documentation":"<p> The TXT record configuration used for domain verification. </p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the domain verification was created, in ISO-8601 format. </p>"
+        },
+        "lastVerifiedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p> The date and time that the domain was last successfully verified, in ISO-8601 format. </p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p> The tags associated with the domain verification. </p>"
         }
       }
     },
     "GetListenerRequest":{
       "type":"structure",
       "required":[
-        "listenerIdentifier",
-        "serviceIdentifier"
+        "serviceIdentifier",
+        "listenerIdentifier"
       ],
       "members":{
-        "listenerIdentifier":{
-          "shape":"ListenerIdentifier",
-          "documentation":"<p>The ID or ARN of the listener.</p>",
-          "location":"uri",
-          "locationName":"listenerIdentifier"
-        },
         "serviceIdentifier":{
           "shape":"ServiceIdentifier",
           "documentation":"<p>The ID or ARN of the service.</p>",
           "location":"uri",
           "locationName":"serviceIdentifier"
+        },
+        "listenerIdentifier":{
+          "shape":"ListenerIdentifier",
+          "documentation":"<p>The ID or ARN of the listener.</p>",
+          "location":"uri",
+          "locationName":"listenerIdentifier"
         }
       }
     },
@@ -2867,34 +3171,22 @@
           "shape":"ListenerArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener was created, in ISO-8601 format.</p>"
-        },
-        "defaultAction":{
-          "shape":"RuleAction",
-          "documentation":"<p>The actions for the default listener rule.</p>"
-        },
         "id":{
           "shape":"ListenerId",
           "documentation":"<p>The ID of the listener.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener was last updated, in ISO-8601 format.</p>"
-        },
         "name":{
           "shape":"ListenerName",
           "documentation":"<p>The name of the listener.</p>"
         },
-        "port":{
-          "shape":"Port",
-          "documentation":"<p>The listener port.</p>"
-        },
         "protocol":{
           "shape":"ListenerProtocol",
           "documentation":"<p>The listener protocol.</p>"
         },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The listener port.</p>"
+        },
         "serviceArn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
@@ -2902,6 +3194,18 @@
         "serviceId":{
           "shape":"ServiceId",
           "documentation":"<p>The ID of the service.</p>"
+        },
+        "defaultAction":{
+          "shape":"RuleAction",
+          "documentation":"<p>The actions for the default listener rule.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener was last updated, in ISO-8601 format.</p>"
         }
       }
     },
@@ -2920,41 +3224,33 @@
     "GetResourceConfigurationResponse":{
       "type":"structure",
       "members":{
-        "allowAssociationToShareableServiceNetwork":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether the resource configuration is associated with a sharable service network.</p>"
+        "id":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the resource configuration.</p>"
         },
-        "amazonManaged":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the resource configuration was created and is managed by Amazon.</p>"
+        "name":{
+          "shape":"ResourceConfigurationName",
+          "documentation":"<p>The name of the resource configuration.</p>"
         },
         "arn":{
           "shape":"ResourceConfigurationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
-        },
-        "customDomainName":{
-          "shape":"DomainName",
-          "documentation":"<p>The custom domain name of the resource configuration.</p>"
-        },
-        "failureReason":{
-          "shape":"String",
-          "documentation":"<p>The reason the create-resource-configuration request failed.</p>"
+        "resourceGatewayId":{
+          "shape":"ResourceGatewayId",
+          "documentation":"<p>The ID of the resource gateway used to connect to the resource configuration in a given VPC. You can specify the resource gateway identifier only for resource configurations with type SINGLE, GROUP, or ARN.</p>"
         },
-        "id":{
+        "resourceConfigurationGroupId":{
           "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the resource configuration.</p>"
+          "documentation":"<p>The ID of the group resource configuration.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The most recent date and time that the resource configuration was updated, in ISO-8601 format.</p>"
+        "type":{
+          "shape":"ResourceConfigurationType",
+          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
         },
-        "name":{
-          "shape":"ResourceConfigurationName",
-          "documentation":"<p>The name of the resource configuration.</p>"
+        "allowAssociationToShareableServiceNetwork":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the resource configuration is associated with a sharable service network.</p>"
         },
         "portRanges":{
           "shape":"PortRangeList",
@@ -2964,25 +3260,49 @@
           "shape":"ProtocolType",
           "documentation":"<p>The TCP protocol accepted by the specified resource configuration.</p>"
         },
+        "customDomainName":{
+          "shape":"DomainName",
+          "documentation":"<p>The custom domain name of the resource configuration.</p>"
+        },
+        "status":{
+          "shape":"ResourceConfigurationStatus",
+          "documentation":"<p>The status of the resource configuration.</p>"
+        },
         "resourceConfigurationDefinition":{
           "shape":"ResourceConfigurationDefinition",
           "documentation":"<p>The resource configuration.</p>"
         },
-        "resourceConfigurationGroupId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the group resource configuration.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
         },
-        "resourceGatewayId":{
-          "shape":"ResourceGatewayId",
-          "documentation":"<p>The ID of the resource gateway used to connect to the resource configuration in a given VPC. You can specify the resource gateway identifier only for resource configurations with type SINGLE, GROUP, or ARN.</p>"
+        "amazonManaged":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the resource configuration was created and is managed by Amazon.</p>"
         },
-        "status":{
-          "shape":"ResourceConfigurationStatus",
-          "documentation":"<p>The status of the resource configuration.</p>"
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason the create-resource-configuration request failed.</p>"
         },
-        "type":{
-          "shape":"ResourceConfigurationType",
-          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The most recent date and time that the resource configuration was updated, in ISO-8601 format.</p>"
+        },
+        "domainVerificationId":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The domain verification ID. </p>"
+        },
+        "domainVerificationArn":{
+          "shape":"DomainVerificationArn",
+          "documentation":"<p> The ARN of the domain verification. </p>"
+        },
+        "domainVerificationStatus":{
+          "shape":"VerificationStatus",
+          "documentation":"<p> The domain verification status. </p>"
+        },
+        "groupDomain":{
+          "shape":"DomainName",
+          "documentation":"<p> (GROUP) The group domain for a group resource configuration. Any domains that you create for the child resource are subdomains of the group domain. Child resources inherit the verification status of the domain. </p>"
         }
       }
     },
@@ -3001,45 +3321,49 @@
     "GetResourceGatewayResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceGatewayArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the resource gateway was created, in ISO-8601 format.</p>"
+        "name":{
+          "shape":"ResourceGatewayName",
+          "documentation":"<p>The name of the resource gateway.</p>"
         },
         "id":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
-        "ipAddressType":{
-          "shape":"ResourceGatewayIpAddressType",
-          "documentation":"<p>The type of IP address for the resource gateway.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the resource gateway was last updated, in ISO-8601 format.</p>"
-        },
-        "name":{
-          "shape":"ResourceGatewayName",
-          "documentation":"<p>The name of the resource gateway.</p>"
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupList",
-          "documentation":"<p>The security group IDs associated with the resource gateway.</p>"
+        "arn":{
+          "shape":"ResourceGatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
         },
         "status":{
           "shape":"ResourceGatewayStatus",
           "documentation":"<p>The status for the resource gateway.</p>"
         },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        },
         "subnetIds":{
           "shape":"SubnetList",
           "documentation":"<p>The IDs of the VPC subnets for resource gateway.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupList",
+          "documentation":"<p>The security group IDs associated with the resource gateway.</p>"
+        },
+        "ipAddressType":{
+          "shape":"ResourceGatewayIpAddressType",
+          "documentation":"<p>The type of IP address for the resource gateway.</p>"
+        },
+        "ipv4AddressesPerEni":{
+          "shape":"Ipv4AddressesPerEni",
+          "documentation":"<p>The number of IPv4 addresses in each ENI for the resource gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the resource gateway was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the resource gateway was last updated, in ISO-8601 format.</p>"
         }
       }
     },
@@ -3067,11 +3391,17 @@
     "GetRuleRequest":{
       "type":"structure",
       "required":[
+        "serviceIdentifier",
         "listenerIdentifier",
-        "ruleIdentifier",
-        "serviceIdentifier"
+        "ruleIdentifier"
       ],
       "members":{
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
+        },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
           "documentation":"<p>The ID or ARN of the listener.</p>",
@@ -3083,53 +3413,47 @@
           "documentation":"<p>The ID or ARN of the listener rule.</p>",
           "location":"uri",
           "locationName":"ruleIdentifier"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
         }
       }
     },
     "GetRuleResponse":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule.</p>"
-        },
         "arn":{
           "shape":"RuleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener rule was created, in ISO-8601 format.</p>"
-        },
         "id":{
           "shape":"RuleId",
           "documentation":"<p>The ID of the listener.</p>"
         },
+        "name":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the listener.</p>"
+        },
         "isDefault":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether this is the default rule.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener rule was last updated, in ISO-8601 format.</p>"
-        },
         "match":{
           "shape":"RuleMatch",
           "documentation":"<p>The rule match.</p>"
         },
-        "name":{
-          "shape":"RuleName",
-          "documentation":"<p>The name of the listener.</p>"
-        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The priority level for the specified rule.</p>"
+        },
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener rule was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener rule was last updated, in ISO-8601 format.</p>"
         }
       }
     },
@@ -3160,114 +3484,122 @@
     "GetServiceNetworkResourceAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkResourceAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkResourceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
+        "status":{
+          "shape":"ServiceNetworkResourceAssociationStatus",
+          "documentation":"<p>The status of the association.</p>"
         },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "dnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The DNS entry for the service.</p>"
-        },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failureReason":{
-          "shape":"String",
-          "documentation":"<p>The reason the association request failed.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkResourceAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "isManagedAssociation":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the association is managed by Amazon.</p>"
-        },
-        "lastUpdatedAt":{
+        "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The most recent date and time that the association was updated, in ISO-8601 format.</p>"
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
-        "privateDnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The private DNS entry for the service.</p>"
+        "resourceConfigurationId":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the resource configuration that is associated with the service network.</p>"
         },
         "resourceConfigurationArn":{
           "shape":"ResourceConfigurationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "resourceConfigurationId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the resource configuration that is associated with the service network.</p>"
-        },
         "resourceConfigurationName":{
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration that is associated with the service network.</p>"
         },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkIdentifierWithoutRegex",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network that is associated with the resource configuration.</p>"
-        },
         "serviceNetworkId":{
           "shape":"ServiceNetworkIdentifierWithoutRegex",
           "documentation":"<p>The ID of the service network that is associated with the resource configuration.</p>"
         },
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkIdentifierWithoutRegex",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network that is associated with the resource configuration.</p>"
+        },
         "serviceNetworkName":{
           "shape":"ServiceNetworkNameWithoutRegex",
           "documentation":"<p>The name of the service network that is associated with the resource configuration.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkResourceAssociationStatus",
-          "documentation":"<p>The status of the association.</p>"
+        "failureReason":{
+          "shape":"String",
+          "documentation":"<p>The reason the association request failed.</p>"
+        },
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The most recent date and time that the association was updated, in ISO-8601 format.</p>"
+        },
+        "privateDnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The private DNS entry for the service.</p>"
+        },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled in the service network resource association. </p>"
+        },
+        "dnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The DNS entry for the service.</p>"
+        },
+        "isManagedAssociation":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the association is managed by Amazon.</p>"
+        },
+        "domainVerificationStatus":{
+          "shape":"VerificationStatus",
+          "documentation":"<p> The domain verification status in the service network resource association. </p>"
         }
       }
     },
     "GetServiceNetworkResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        "id":{
+          "shape":"ServiceNetworkId",
+          "documentation":"<p>The ID of the service network.</p>"
         },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
+        "name":{
+          "shape":"ServiceNetworkName",
+          "documentation":"<p>The name of the service network.</p>"
         },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service network was created, in ISO-8601 format.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkId",
-          "documentation":"<p>The ID of the service network.</p>"
-        },
         "lastUpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time of the last update, in ISO-8601 format.</p>"
         },
-        "name":{
-          "shape":"ServiceNetworkName",
-          "documentation":"<p>The name of the service network.</p>"
+        "arn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
         },
-        "numberOfAssociatedServices":{
-          "shape":"Long",
-          "documentation":"<p>The number of services associated with the service network.</p>"
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
+        },
+        "sharingConfig":{
+          "shape":"SharingConfig",
+          "documentation":"<p>Specifies if the service network is enabled for sharing.</p>"
         },
         "numberOfAssociatedVPCs":{
           "shape":"Long",
           "documentation":"<p>The number of VPCs associated with the service network.</p>"
         },
-        "sharingConfig":{
-          "shape":"SharingConfig",
-          "documentation":"<p>Specifies if the service network is enabled for sharing.</p>"
+        "numberOfAssociatedServices":{
+          "shape":"Long",
+          "documentation":"<p>The number of services associated with the service network.</p>"
         }
       }
     },
@@ -3286,41 +3618,25 @@
     "GetServiceNetworkServiceAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkServiceAssociationIdentifier",
+          "documentation":"<p>The ID of the service network and service association.</p>"
+        },
+        "status":{
+          "shape":"ServiceNetworkServiceAssociationStatus",
+          "documentation":"<p>The status of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkServiceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
-        },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "customDomainName":{
-          "shape":"ServiceCustomDomainName",
-          "documentation":"<p>The custom domain name of the service.</p>"
-        },
-        "dnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The DNS name of the service.</p>"
-        },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failureMessage":{
-          "shape":"String",
-          "documentation":"<p>The failure message.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkServiceAssociationIdentifier",
-          "documentation":"<p>The ID of the service network and service association.</p>"
-        },
-        "serviceArn":{
-          "shape":"ServiceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
         "serviceId":{
           "shape":"ServiceId",
@@ -3330,9 +3646,9 @@
           "shape":"ServiceName",
           "documentation":"<p>The name of the service.</p>"
         },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        "serviceArn":{
+          "shape":"ServiceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
         },
         "serviceNetworkId":{
           "shape":"ServiceNetworkId",
@@ -3342,9 +3658,25 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkServiceAssociationStatus",
-          "documentation":"<p>The status of the association.</p>"
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
+        "dnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The DNS name of the service.</p>"
+        },
+        "customDomainName":{
+          "shape":"ServiceCustomDomainName",
+          "documentation":"<p>The custom domain name of the service.</p>"
+        },
+        "failureMessage":{
+          "shape":"String",
+          "documentation":"<p>The failure message.</p>"
+        },
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
         }
       }
     },
@@ -3363,41 +3695,25 @@
     "GetServiceNetworkVpcAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkVpcAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
+        "status":{
+          "shape":"ServiceNetworkVpcAssociationStatus",
+          "documentation":"<p>The status of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkVpcAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
-        },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failureMessage":{
-          "shape":"String",
-          "documentation":"<p>The failure message.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkVpcAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "lastUpdatedAt":{
+        "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was last updated, in ISO-8601 format.</p>"
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupList",
-          "documentation":"<p>The IDs of the security groups.</p>"
-        },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
         "serviceNetworkId":{
           "shape":"ServiceNetworkId",
@@ -3407,13 +3723,37 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkVpcAssociationStatus",
-          "documentation":"<p>The status of the association.</p>"
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
         },
         "vpcId":{
           "shape":"VpcId",
           "documentation":"<p>The ID of the VPC.</p>"
+        },
+        "securityGroupIds":{
+          "shape":"SecurityGroupList",
+          "documentation":"<p>The IDs of the security groups.</p>"
+        },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled in the VPC association. </p>"
+        },
+        "failureMessage":{
+          "shape":"String",
+          "documentation":"<p>The failure message.</p>"
+        },
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was last updated, in ISO-8601 format.</p>"
+        },
+        "dnsOptions":{
+          "shape":"DnsOptions",
+          "documentation":"<p> DNS options for the service network VPC association. </p>"
         }
       }
     },
@@ -3432,30 +3772,46 @@
     "GetServiceResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceId",
+          "documentation":"<p>The ID of the service.</p>"
+        },
+        "name":{
+          "shape":"ServiceName",
+          "documentation":"<p>The name of the service.</p>"
+        },
         "arn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
         },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
-        },
-        "certificateArn":{
-          "shape":"CertificateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
-        },
         "createdAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service was created, in ISO-8601 format.</p>"
         },
-        "customDomainName":{
-          "shape":"ServiceCustomDomainName",
-          "documentation":"<p>The custom domain name of the service.</p>"
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the service was last updated, in ISO-8601 format.</p>"
         },
         "dnsEntry":{
           "shape":"DnsEntry",
           "documentation":"<p>The DNS name of the service.</p>"
         },
+        "customDomainName":{
+          "shape":"ServiceCustomDomainName",
+          "documentation":"<p>The custom domain name of the service.</p>"
+        },
+        "certificateArn":{
+          "shape":"CertificateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
+        },
+        "status":{
+          "shape":"ServiceStatus",
+          "documentation":"<p>The status of the service.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
+        },
         "failureCode":{
           "shape":"FailureCode",
           "documentation":"<p>The failure code.</p>"
@@ -3463,22 +3819,6 @@
         "failureMessage":{
           "shape":"FailureMessage",
           "documentation":"<p>The failure message.</p>"
-        },
-        "id":{
-          "shape":"ServiceId",
-          "documentation":"<p>The ID of the service.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the service was last updated, in ISO-8601 format.</p>"
-        },
-        "name":{
-          "shape":"ServiceName",
-          "documentation":"<p>The name of the service.</p>"
-        },
-        "status":{
-          "shape":"ServiceStatus",
-          "documentation":"<p>The status of the service.</p>"
         }
       }
     },
@@ -3497,10 +3837,22 @@
     "GetTargetGroupResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"TargetGroupId",
+          "documentation":"<p>The ID of the target group.</p>"
+        },
         "arn":{
           "shape":"TargetGroupArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
         },
+        "name":{
+          "shape":"TargetGroupName",
+          "documentation":"<p>The name of the target group.</p>"
+        },
+        "type":{
+          "shape":"TargetGroupType",
+          "documentation":"<p>The target group type.</p>"
+        },
         "config":{
           "shape":"TargetGroupConfig",
           "documentation":"<p>The target group configuration.</p>"
@@ -3509,58 +3861,46 @@
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the target group was created, in ISO-8601 format.</p>"
         },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failureMessage":{
-          "shape":"String",
-          "documentation":"<p>The failure message.</p>"
-        },
-        "id":{
-          "shape":"TargetGroupId",
-          "documentation":"<p>The ID of the target group.</p>"
-        },
         "lastUpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the target group was last updated, in ISO-8601 format.</p>"
         },
-        "name":{
-          "shape":"TargetGroupName",
-          "documentation":"<p>The name of the target group.</p>"
+        "status":{
+          "shape":"TargetGroupStatus",
+          "documentation":"<p>The status.</p>"
         },
         "serviceArns":{
           "shape":"ServiceArnList",
           "documentation":"<p>The Amazon Resource Names (ARNs) of the service.</p>"
         },
-        "status":{
-          "shape":"TargetGroupStatus",
-          "documentation":"<p>The status.</p>"
+        "failureMessage":{
+          "shape":"String",
+          "documentation":"<p>The failure message.</p>"
         },
-        "type":{
-          "shape":"TargetGroupType",
-          "documentation":"<p>The target group type.</p>"
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
         }
       }
     },
     "HeaderMatch":{
       "type":"structure",
       "required":[
-        "match",
-        "name"
+        "name",
+        "match"
       ],
       "members":{
-        "caseSensitive":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the match is case sensitive.</p>"
+        "name":{
+          "shape":"HeaderMatchName",
+          "documentation":"<p>The name of the header.</p>"
         },
         "match":{
           "shape":"HeaderMatchType",
           "documentation":"<p>The header match type.</p>"
         },
-        "name":{
-          "shape":"HeaderMatchName",
-          "documentation":"<p>The name of the header.</p>"
+        "caseSensitive":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the match is case sensitive.</p>"
         }
       },
       "documentation":"<p>Describes the constraints for a header match. Matches incoming requests with rule based on request header value before applying rule action.</p>"
@@ -3594,10 +3934,6 @@
     "HeaderMatchType":{
       "type":"structure",
       "members":{
-        "contains":{
-          "shape":"HeaderMatchContains",
-          "documentation":"<p>A contains type match.</p>"
-        },
         "exact":{
           "shape":"HeaderMatchExact",
           "documentation":"<p>An exact type match.</p>"
@@ -3605,6 +3941,10 @@
         "prefix":{
           "shape":"HeaderMatchPrefix",
           "documentation":"<p>A prefix type match. Matches the value with the prefix.</p>"
+        },
+        "contains":{
+          "shape":"HeaderMatchContains",
+          "documentation":"<p>A contains type match.</p>"
         }
       },
       "documentation":"<p>Describes a header match type.</p>",
@@ -3617,6 +3957,22 @@
           "shape":"Boolean",
           "documentation":"<p>Indicates whether health checking is enabled.</p>"
         },
+        "protocol":{
+          "shape":"TargetGroupProtocol",
+          "documentation":"<p>The protocol used when performing health checks on targets. The possible protocols are <code>HTTP</code> and <code>HTTPS</code>. The default is <code>HTTP</code>.</p>"
+        },
+        "protocolVersion":{
+          "shape":"HealthCheckProtocolVersion",
+          "documentation":"<p>The protocol version used when performing health checks on targets. The possible protocol versions are <code>HTTP1</code> and <code>HTTP2</code>.</p>"
+        },
+        "port":{
+          "shape":"HealthCheckPort",
+          "documentation":"<p>The port used when performing health checks on targets. The default setting is the port that a target receives traffic on.</p>"
+        },
+        "path":{
+          "shape":"HealthCheckPath",
+          "documentation":"<p>The destination for health checks on the targets. If the protocol version is <code>HTTP/1.1</code> or <code>HTTP/2</code>, specify a valid URI (for example, <code>/path?query</code>). The default path is <code>/</code>. Health checks are not supported if the protocol version is <code>gRPC</code>, however, you can choose <code>HTTP/1.1</code> or <code>HTTP/2</code> and specify a valid URI.</p>"
+        },
         "healthCheckIntervalSeconds":{
           "shape":"HealthCheckIntervalSeconds",
           "documentation":"<p>The approximate amount of time, in seconds, between health checks of an individual target. The range is 5–300 seconds. The default is 30 seconds.</p>"
@@ -3629,29 +3985,13 @@
           "shape":"HealthyThresholdCount",
           "documentation":"<p>The number of consecutive successful health checks required before considering an unhealthy target healthy. The range is 2–10. The default is 5.</p>"
         },
-        "matcher":{
-          "shape":"Matcher",
-          "documentation":"<p>The codes to use when checking for a successful response from a target.</p>"
-        },
-        "path":{
-          "shape":"HealthCheckPath",
-          "documentation":"<p>The destination for health checks on the targets. If the protocol version is <code>HTTP/1.1</code> or <code>HTTP/2</code>, specify a valid URI (for example, <code>/path?query</code>). The default path is <code>/</code>. Health checks are not supported if the protocol version is <code>gRPC</code>, however, you can choose <code>HTTP/1.1</code> or <code>HTTP/2</code> and specify a valid URI.</p>"
-        },
-        "port":{
-          "shape":"HealthCheckPort",
-          "documentation":"<p>The port used when performing health checks on targets. The default setting is the port that a target receives traffic on.</p>"
-        },
-        "protocol":{
-          "shape":"TargetGroupProtocol",
-          "documentation":"<p>The protocol used when performing health checks on targets. The possible protocols are <code>HTTP</code> and <code>HTTPS</code>. The default is <code>HTTP</code>.</p>"
-        },
-        "protocolVersion":{
-          "shape":"HealthCheckProtocolVersion",
-          "documentation":"<p>The protocol version used when performing health checks on targets. The possible protocol versions are <code>HTTP1</code> and <code>HTTP2</code>.</p>"
-        },
         "unhealthyThresholdCount":{
           "shape":"UnhealthyThresholdCount",
           "documentation":"<p>The number of consecutive failed health checks required before considering a target unhealthy. The range is 2–10. The default is 2.</p>"
+        },
+        "matcher":{
+          "shape":"Matcher",
+          "documentation":"<p>The codes to use when checking for a successful response from a target.</p>"
         }
       },
       "documentation":"<p>Describes the health check configuration of a target group. Health check configurations aren't used for target groups of type <code>LAMBDA</code> or <code>ALB</code>.</p>"
@@ -3666,7 +4006,7 @@
       "type":"string",
       "max":2048,
       "min":0,
-      "pattern":"(^/[a-zA-Z0-9@:%_+.~#?&/=-]*$|(^$))"
+      "pattern":".*(^/[a-zA-Z0-9@:%_+.~#?&/=-]*$|(^$)).*"
     },
     "HealthCheckPort":{
       "type":"integer",
@@ -3697,15 +4037,11 @@
       "type":"string",
       "max":2000,
       "min":0,
-      "pattern":"(^[0-9-,]+$|(^$))"
+      "pattern":".*(^[0-9-,]+$|(^$)).*"
     },
     "HttpMatch":{
       "type":"structure",
       "members":{
-        "headerMatches":{
-          "shape":"HeaderMatchList",
-          "documentation":"<p>The header matches. Matches incoming requests with rule based on request header value before applying rule action.</p>"
-        },
         "method":{
           "shape":"HttpMethod",
           "documentation":"<p>The HTTP method type.</p>"
@@ -3713,6 +4049,10 @@
         "pathMatch":{
           "shape":"PathMatch",
           "documentation":"<p>The path match.</p>"
+        },
+        "headerMatches":{
+          "shape":"HeaderMatchList",
+          "documentation":"<p>The header matches. Matches incoming requests with rule based on request header value before applying rule action.</p>"
         }
       },
       "documentation":"<p>Describes criteria that can be applied to incoming requests.</p>"
@@ -3772,6 +4112,12 @@
       },
       "documentation":"<p>Describes an IP resource.</p>"
     },
+    "Ipv4AddressesPerEni":{
+      "type":"integer",
+      "box":true,
+      "max":62,
+      "min":1
+    },
     "LambdaEventStructureVersion":{
       "type":"string",
       "enum":[
@@ -3783,6 +4129,12 @@
       "type":"structure",
       "required":["resourceIdentifier"],
       "members":{
+        "resourceIdentifier":{
+          "shape":"ResourceIdentifier",
+          "documentation":"<p>The ID or ARN of the service network or service.</p>",
+          "location":"querystring",
+          "locationName":"resourceIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to return.</p>",
@@ -3794,12 +4146,6 @@
           "documentation":"<p>A pagination token for the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "resourceIdentifier":{
-          "shape":"ResourceIdentifier",
-          "documentation":"<p>The ID or ARN of the service network or service.</p>",
-          "location":"querystring",
-          "locationName":"resourceIdentifier"
         }
       }
     },
@@ -3817,27 +4163,58 @@
         }
       }
     },
-    "ListListenersRequest":{
+    "ListDomainVerificationsRequest":{
       "type":"structure",
-      "required":["serviceIdentifier"],
       "members":{
         "maxResults":{
           "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
+          "documentation":"<p> The maximum number of results to return. </p>",
           "location":"querystring",
           "locationName":"maxResults"
         },
         "nextToken":{
           "shape":"NextToken",
-          "documentation":"<p>A pagination token for the next page of results.</p>",
+          "documentation":"<p> A pagination token for the next page of results. </p>",
           "location":"querystring",
           "locationName":"nextToken"
+        }
+      }
+    },
+    "ListDomainVerificationsResponse":{
+      "type":"structure",
+      "required":["items"],
+      "members":{
+        "items":{
+          "shape":"DomainVerificationList",
+          "documentation":"<p> Information about the domain verifications. </p>"
         },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p> A pagination token for the next page of results. </p>"
+        }
+      }
+    },
+    "ListListenersRequest":{
+      "type":"structure",
+      "required":["serviceIdentifier"],
+      "members":{
         "serviceIdentifier":{
           "shape":"ServiceIdentifier",
           "documentation":"<p>The ID or ARN of the service.</p>",
           "location":"uri",
           "locationName":"serviceIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token for the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         }
       }
     },
@@ -3858,6 +4235,24 @@
     "ListResourceConfigurationsRequest":{
       "type":"structure",
       "members":{
+        "resourceGatewayIdentifier":{
+          "shape":"ResourceGatewayIdentifier",
+          "documentation":"<p>The ID of the resource gateway for the resource configuration.</p>",
+          "location":"querystring",
+          "locationName":"resourceGatewayIdentifier"
+        },
+        "resourceConfigurationGroupIdentifier":{
+          "shape":"ResourceConfigurationIdentifier",
+          "documentation":"<p>The ID of the resource configuration of type <code>Group</code>.</p>",
+          "location":"querystring",
+          "locationName":"resourceConfigurationGroupIdentifier"
+        },
+        "domainVerificationIdentifier":{
+          "shape":"DomainVerificationIdentifier",
+          "documentation":"<p> The domain verification ID. </p>",
+          "location":"querystring",
+          "locationName":"domainVerificationIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum page size.</p>",
@@ -3869,18 +4264,6 @@
           "documentation":"<p>A pagination token for the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "resourceConfigurationGroupIdentifier":{
-          "shape":"ResourceConfigurationIdentifier",
-          "documentation":"<p>The ID of the group resource configuration.</p>",
-          "location":"querystring",
-          "locationName":"resourceConfigurationGroupIdentifier"
-        },
-        "resourceGatewayIdentifier":{
-          "shape":"ResourceGatewayIdentifier",
-          "documentation":"<p>The ID of the resource gateway for the resource configuration.</p>",
-          "location":"querystring",
-          "locationName":"resourceGatewayIdentifier"
         }
       }
     },
@@ -3901,18 +4284,6 @@
       "type":"structure",
       "required":["resourceConfigurationIdentifier"],
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum page size.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token for the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
         "resourceConfigurationIdentifier":{
           "shape":"ResourceConfigurationIdentifier",
           "documentation":"<p>The ID for the resource configuration associated with the VPC endpoint.</p>",
@@ -3936,6 +4307,18 @@
           "documentation":"<p>The owner of the VPC endpoint in the association.</p>",
           "location":"querystring",
           "locationName":"vpcEndpointOwner"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum page size.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token for the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         }
       }
     },
@@ -3986,10 +4369,16 @@
     "ListRulesRequest":{
       "type":"structure",
       "required":[
-        "listenerIdentifier",
-        "serviceIdentifier"
+        "serviceIdentifier",
+        "listenerIdentifier"
       ],
       "members":{
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
+        },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
           "documentation":"<p>The ID or ARN of the listener.</p>",
@@ -4007,12 +4396,6 @@
           "documentation":"<p>A pagination token for the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
         }
       }
     },
@@ -4033,6 +4416,18 @@
     "ListServiceNetworkResourceAssociationsRequest":{
       "type":"structure",
       "members":{
+        "serviceNetworkIdentifier":{
+          "shape":"ServiceNetworkIdentifier",
+          "documentation":"<p>The ID of the service network.</p>",
+          "location":"querystring",
+          "locationName":"serviceNetworkIdentifier"
+        },
+        "resourceConfigurationIdentifier":{
+          "shape":"ResourceConfigurationIdentifier",
+          "documentation":"<p>The ID of the resource configuration.</p>",
+          "location":"querystring",
+          "locationName":"resourceConfigurationIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum page size.</p>",
@@ -4045,17 +4440,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "resourceConfigurationIdentifier":{
-          "shape":"ResourceConfigurationIdentifier",
-          "documentation":"<p>The ID of the resource configurationk.</p>",
-          "location":"querystring",
-          "locationName":"resourceConfigurationIdentifier"
-        },
-        "serviceNetworkIdentifier":{
-          "shape":"ServiceNetworkIdentifier",
-          "documentation":"<p>The ID of the service network.</p>",
+        "includeChildren":{
+          "shape":"Boolean",
+          "documentation":"<p>Include service network resource associations of the child resource configuration with the grouped resource configuration.</p> <p>The type is boolean and the default value is false.</p>",
           "location":"querystring",
-          "locationName":"serviceNetworkIdentifier"
+          "locationName":"includeChildren"
         }
       }
     },
@@ -4076,6 +4465,18 @@
     "ListServiceNetworkServiceAssociationsRequest":{
       "type":"structure",
       "members":{
+        "serviceNetworkIdentifier":{
+          "shape":"ServiceNetworkIdentifier",
+          "documentation":"<p>The ID or ARN of the service network.</p>",
+          "location":"querystring",
+          "locationName":"serviceNetworkIdentifier"
+        },
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"querystring",
+          "locationName":"serviceIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to return.</p>",
@@ -4087,18 +4488,6 @@
           "documentation":"<p>A pagination token for the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"querystring",
-          "locationName":"serviceIdentifier"
-        },
-        "serviceNetworkIdentifier":{
-          "shape":"ServiceNetworkIdentifier",
-          "documentation":"<p>The ID or ARN of the service network.</p>",
-          "location":"querystring",
-          "locationName":"serviceNetworkIdentifier"
         }
       }
     },
@@ -4119,18 +4508,6 @@
     "ListServiceNetworkVpcAssociationsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to return.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
-        "nextToken":{
-          "shape":"NextToken",
-          "documentation":"<p>A pagination token for the next page of results.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
         "serviceNetworkIdentifier":{
           "shape":"ServiceNetworkIdentifier",
           "documentation":"<p>The ID or ARN of the service network.</p>",
@@ -4142,6 +4519,18 @@
           "documentation":"<p>The ID or ARN of the VPC.</p>",
           "location":"querystring",
           "locationName":"vpcIdentifier"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to return.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>A pagination token for the next page of results.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         }
       }
     },
@@ -4163,6 +4552,12 @@
       "type":"structure",
       "required":["serviceNetworkIdentifier"],
       "members":{
+        "serviceNetworkIdentifier":{
+          "shape":"ServiceNetworkIdentifier",
+          "documentation":"<p>The ID of the service network associated with the VPC endpoint.</p>",
+          "location":"querystring",
+          "locationName":"serviceNetworkIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum page size.</p>",
@@ -4174,12 +4569,6 @@
           "documentation":"<p>If there are additional results, a pagination token for the next page of results.</p>",
           "location":"querystring",
           "locationName":"nextToken"
-        },
-        "serviceNetworkIdentifier":{
-          "shape":"ServiceNetworkIdentifier",
-          "documentation":"<p>The ID of the service network associated with the VPC endpoint.</p>",
-          "location":"querystring",
-          "locationName":"serviceNetworkIdentifier"
         }
       }
     },
@@ -4294,17 +4683,17 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "targetGroupType":{
-          "shape":"TargetGroupType",
-          "documentation":"<p>The target group type.</p>",
-          "location":"querystring",
-          "locationName":"targetGroupType"
-        },
         "vpcIdentifier":{
           "shape":"VpcId",
           "documentation":"<p>The ID or ARN of the VPC.</p>",
           "location":"querystring",
           "locationName":"vpcIdentifier"
+        },
+        "targetGroupType":{
+          "shape":"TargetGroupType",
+          "documentation":"<p>The target group type.</p>",
+          "location":"querystring",
+          "locationName":"targetGroupType"
         }
       }
     },
@@ -4325,6 +4714,12 @@
       "type":"structure",
       "required":["targetGroupIdentifier"],
       "members":{
+        "targetGroupIdentifier":{
+          "shape":"TargetGroupIdentifier",
+          "documentation":"<p>The ID or ARN of the target group.</p>",
+          "location":"uri",
+          "locationName":"targetGroupIdentifier"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to return.</p>",
@@ -4337,12 +4732,6 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "targetGroupIdentifier":{
-          "shape":"TargetGroupIdentifier",
-          "documentation":"<p>The ID or ARN of the target group.</p>",
-          "location":"uri",
-          "locationName":"targetGroupIdentifier"
-        },
         "targets":{
           "shape":"ListTargetsRequestTargetsList",
           "documentation":"<p>The targets.</p>"
@@ -4373,25 +4762,25 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}"
     },
     "ListenerId":{
       "type":"string",
       "max":26,
       "min":26,
-      "pattern":"^listener-[0-9a-z]{17}$"
+      "pattern":"listener-[0-9a-z]{17}"
     },
     "ListenerIdentifier":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^((listener-[0-9a-z]{17})|(^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}$))$"
+      "pattern":"((listener-[0-9a-z]{17})|(^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}$))"
     },
     "ListenerName":{
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^(?!listener-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!listener-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "ListenerProtocol":{
       "type":"string",
@@ -4408,29 +4797,29 @@
           "shape":"ListenerArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener was created, in ISO-8601 format.</p>"
-        },
         "id":{
           "shape":"ListenerId",
           "documentation":"<p>The ID of the listener.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener was last updated, in ISO-8601 format.</p>"
-        },
         "name":{
           "shape":"ListenerName",
           "documentation":"<p>The name of the listener.</p>"
         },
+        "protocol":{
+          "shape":"ListenerProtocol",
+          "documentation":"<p>The listener protocol.</p>"
+        },
         "port":{
           "shape":"Port",
           "documentation":"<p>The listener port.</p>"
         },
-        "protocol":{
-          "shape":"ListenerProtocol",
-          "documentation":"<p>The listener protocol.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener was last updated, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about a listener.</p>"
@@ -4469,13 +4858,13 @@
       "type":"structure",
       "required":["match"],
       "members":{
-        "caseSensitive":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the match is case sensitive.</p>"
-        },
         "match":{
           "shape":"PathMatchType",
           "documentation":"<p>The type of path match.</p>"
+        },
+        "caseSensitive":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the match is case sensitive.</p>"
         }
       },
       "documentation":"<p>Describes the conditions that can be applied when matching a path for incoming requests.</p>"
@@ -4484,13 +4873,13 @@
       "type":"string",
       "max":200,
       "min":1,
-      "pattern":"^/[a-zA-Z0-9@:%_+.~#?&/=-]*$"
+      "pattern":"/[a-zA-Z0-9@:%_+.~#?&/=-]*"
     },
     "PathMatchPrefix":{
       "type":"string",
       "max":200,
       "min":1,
-      "pattern":"^/[a-zA-Z0-9@:%_+.~#?&/=-]*$"
+      "pattern":"/[a-zA-Z0-9@:%_+.~#?&/=-]*"
     },
     "PathMatchType":{
       "type":"structure",
@@ -4511,7 +4900,7 @@
       "type":"string",
       "max":10000,
       "min":1,
-      "pattern":"^.*\\S.*$"
+      "pattern":".*\\S.*"
     },
     "Port":{
       "type":"integer",
@@ -4523,12 +4912,32 @@
       "type":"string",
       "max":11,
       "min":1,
-      "pattern":"^((\\d{1,5}\\-\\d{1,5})|(\\d+))$"
+      "pattern":"((\\d{1,5}\\-\\d{1,5})|(\\d+))"
     },
     "PortRangeList":{
       "type":"list",
       "member":{"shape":"PortRange"}
     },
+    "PrivateDnsPreference":{
+      "type":"string",
+      "enum":[
+        "VERIFIED_DOMAINS_ONLY",
+        "ALL_DOMAINS",
+        "VERIFIED_DOMAINS_AND_SPECIFIED_DOMAINS",
+        "SPECIFIED_DOMAINS_ONLY"
+      ]
+    },
+    "PrivateDnsSpecifiedDomain":{
+      "type":"string",
+      "max":255,
+      "min":1
+    },
+    "PrivateDnsSpecifiedDomainsList":{
+      "type":"list",
+      "member":{"shape":"PrivateDnsSpecifiedDomain"},
+      "max":10,
+      "min":1
+    },
     "ProtocolType":{
       "type":"string",
       "enum":["TCP"]
@@ -4536,19 +4945,19 @@
     "PutAuthPolicyRequest":{
       "type":"structure",
       "required":[
-        "policy",
-        "resourceIdentifier"
+        "resourceIdentifier",
+        "policy"
       ],
       "members":{
-        "policy":{
-          "shape":"AuthPolicyString",
-          "documentation":"<p>The auth policy. The policy string in JSON must not contain newlines or blank lines.</p>"
-        },
         "resourceIdentifier":{
           "shape":"ResourceIdentifier",
           "documentation":"<p>The ID or ARN of the service network or service for which the policy is created.</p>",
           "location":"uri",
           "locationName":"resourceIdentifier"
+        },
+        "policy":{
+          "shape":"AuthPolicyString",
+          "documentation":"<p>The auth policy. The policy string in JSON must not contain newlines or blank lines.</p>"
         }
       }
     },
@@ -4568,26 +4977,25 @@
     "PutResourcePolicyRequest":{
       "type":"structure",
       "required":[
-        "policy",
-        "resourceArn"
+        "resourceArn",
+        "policy"
       ],
       "members":{
-        "policy":{
-          "shape":"PolicyString",
-          "documentation":"<p>An IAM policy. The policy string in JSON must not contain newlines or blank lines.</p>"
-        },
         "resourceArn":{
           "shape":"ResourceArn",
           "documentation":"<p>The ID or ARN of the service network or service for which the policy is created.</p>",
           "location":"uri",
           "locationName":"resourceArn"
+        },
+        "policy":{
+          "shape":"PolicyString",
+          "documentation":"<p>An IAM policy. The policy string in JSON must not contain newlines or blank lines.</p>"
         }
       }
     },
     "PutResourcePolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RegisterTargetsRequest":{
       "type":"structure",
@@ -4631,21 +5039,17 @@
       "type":"string",
       "max":200,
       "min":20,
-      "pattern":"^arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc)|(resourceconfiguration/rcfg))-[0-9a-z]{17}$"
+      "pattern":"arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(service/svc)|(resourceconfiguration/rcfg))-[0-9a-z]{17}"
     },
     "ResourceConfigurationArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9f\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceconfiguration/rcfg-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9f\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceconfiguration/rcfg-[0-9a-z]{17}"
     },
     "ResourceConfigurationDefinition":{
       "type":"structure",
       "members":{
-        "arnResource":{
-          "shape":"ArnResource",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
-        },
         "dnsResource":{
           "shape":"DnsResource",
           "documentation":"<p>The DNS name of the resource.</p>"
@@ -4653,6 +5057,10 @@
         "ipResource":{
           "shape":"IpResource",
           "documentation":"<p>The IP resource.</p>"
+        },
+        "arnResource":{
+          "shape":"ArnResource",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource.</p>"
         }
       },
       "documentation":"<p>Describes a resource configuration.</p>",
@@ -4662,13 +5070,13 @@
       "type":"string",
       "max":22,
       "min":22,
-      "pattern":"^rcfg-[0-9a-z]{17}$"
+      "pattern":"rcfg-[0-9a-z]{17}"
     },
     "ResourceConfigurationIdentifier":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^((rcfg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceconfiguration/rcfg-[0-9a-z]{17}))$"
+      "pattern":"((rcfg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceconfiguration/rcfg-[0-9a-z]{17}))"
     },
     "ResourceConfigurationIpAddressType":{
       "type":"string",
@@ -4682,7 +5090,7 @@
       "type":"string",
       "max":40,
       "min":3,
-      "pattern":"^(?!rcfg-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!rcfg-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "ResourceConfigurationStatus":{
       "type":"string",
@@ -4699,45 +5107,57 @@
     "ResourceConfigurationSummary":{
       "type":"structure",
       "members":{
-        "amazonManaged":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether the resource configuration was created and is managed by Amazon.</p>"
-        },
-        "arn":{
-          "shape":"ResourceConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
-        },
         "id":{
           "shape":"ResourceConfigurationId",
           "documentation":"<p>The ID of the resource configuration.</p>"
         },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The most recent date and time that the resource configuration was updated, in ISO-8601 format.</p>"
-        },
         "name":{
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration.</p>"
         },
-        "resourceConfigurationGroupId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the group resource configuration.</p>"
+        "arn":{
+          "shape":"ResourceConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
         },
         "resourceGatewayId":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
+        "resourceConfigurationGroupId":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the group resource configuration.</p>"
+        },
+        "type":{
+          "shape":"ResourceConfigurationType",
+          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources. You must create a group resource configuration before you create a child resource configuration.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
+        },
         "status":{
           "shape":"ResourceConfigurationStatus",
           "documentation":"<p>The status of the resource configuration.</p>"
         },
-        "type":{
-          "shape":"ResourceConfigurationType",
-          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
+        "amazonManaged":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether the resource configuration was created and is managed by Amazon.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the resource configuration was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The most recent date and time that the resource configuration was updated, in ISO-8601 format.</p>"
+        },
+        "customDomainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The custom domain name. </p>"
+        },
+        "domainVerificationId":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The domain verification ID. </p>"
+        },
+        "groupDomain":{
+          "shape":"DomainName",
+          "documentation":"<p> (GROUP) The group domain for a group resource configuration. Any domains that you create for the child resource are subdomains of the group domain. Child resources inherit the verification status of the domain. </p>"
         }
       },
       "documentation":"<p>Summary information about a resource configuration.</p>"
@@ -4759,19 +5179,19 @@
       "type":"string",
       "max":2048,
       "min":21,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceendpointassociation/rea-[0-9a-f]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceendpointassociation/rea-[0-9a-f]{17}"
     },
     "ResourceEndpointAssociationId":{
       "type":"string",
       "max":21,
       "min":21,
-      "pattern":"^rea-[0-9a-f]{17}$"
+      "pattern":"rea-[0-9a-f]{17}"
     },
     "ResourceEndpointAssociationIdentifier":{
       "type":"string",
       "max":2048,
       "min":21,
-      "pattern":"^((rea-[0-9a-f]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceendpointassociation/rea-[0-9a-f]{17}))$"
+      "pattern":"((rea-[0-9a-f]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourceendpointassociation/rea-[0-9a-f]{17}))"
     },
     "ResourceEndpointAssociationList":{
       "type":"list",
@@ -4780,30 +5200,22 @@
     "ResourceEndpointAssociationSummary":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceEndpointAssociationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the VPC endpoint association.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the VPC endpoint association was created, in ISO-8601 format.</p>"
-        },
-        "createdBy":{
-          "shape":"AccountId",
-          "documentation":"<p>The account that created the association.</p>"
-        },
         "id":{
           "shape":"ResourceEndpointAssociationId",
           "documentation":"<p>The ID of the VPC endpoint association.</p>"
         },
-        "resourceConfigurationArn":{
-          "shape":"ResourceConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
+        "arn":{
+          "shape":"ResourceEndpointAssociationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the VPC endpoint association.</p>"
         },
         "resourceConfigurationId":{
           "shape":"ResourceConfigurationId",
           "documentation":"<p>The ID of the resource configuration.</p>"
         },
+        "resourceConfigurationArn":{
+          "shape":"ResourceConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
+        },
         "resourceConfigurationName":{
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration.</p>"
@@ -4815,6 +5227,14 @@
         "vpcEndpointOwner":{
           "shape":"VpcEndpointOwner",
           "documentation":"<p>The owner of the VPC endpoint.</p>"
+        },
+        "createdBy":{
+          "shape":"AccountId",
+          "documentation":"<p>The account that created the association.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the VPC endpoint association was created, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about a VPC endpoint association.</p>"
@@ -4823,19 +5243,19 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourcegateway/rgw-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourcegateway/rgw-[0-9a-z]{17}"
     },
     "ResourceGatewayId":{
       "type":"string",
       "max":21,
       "min":21,
-      "pattern":"^rgw-[0-9a-z]{17}$"
+      "pattern":"rgw-[0-9a-z]{17}"
     },
     "ResourceGatewayIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((rgw-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourcegateway/rgw-[0-9a-z]{17}))$"
+      "pattern":"((rgw-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:resourcegateway/rgw-[0-9a-z]{17}))"
     },
     "ResourceGatewayIpAddressType":{
       "type":"string",
@@ -4853,7 +5273,7 @@
       "type":"string",
       "max":40,
       "min":3,
-      "pattern":"^(?!rgw-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!rgw-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "ResourceGatewayStatus":{
       "type":"string",
@@ -4870,45 +5290,49 @@
     "ResourceGatewaySummary":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceGatewayArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the VPC endpoint association was created, in ISO-8601 format.</p>"
+        "name":{
+          "shape":"ResourceGatewayName",
+          "documentation":"<p>The name of the resource gateway.</p>"
         },
         "id":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
-        "ipAddressType":{
-          "shape":"ResourceGatewayIpAddressType",
-          "documentation":"<p>The type of IP address used by the resource gateway.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The most recent date and time that the resource gateway was updated, in ISO-8601 format.</p>"
-        },
-        "name":{
-          "shape":"ResourceGatewayName",
-          "documentation":"<p>The name of the resource gateway.</p>"
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupList",
-          "documentation":"<p>The IDs of the security groups applied to the resource gateway.</p>"
+        "arn":{
+          "shape":"ResourceGatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
         },
         "status":{
           "shape":"ResourceGatewayStatus",
           "documentation":"<p>The name of the resource gateway.</p>"
         },
+        "vpcIdentifier":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        },
         "subnetIds":{
           "shape":"SubnetList",
           "documentation":"<p>The IDs of the VPC subnets for the resource gateway.</p>"
         },
-        "vpcIdentifier":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupList",
+          "documentation":"<p>The IDs of the security groups applied to the resource gateway.</p>"
+        },
+        "ipAddressType":{
+          "shape":"ResourceGatewayIpAddressType",
+          "documentation":"<p>The type of IP address used by the resource gateway.</p>"
+        },
+        "ipv4AddressesPerEni":{
+          "shape":"Ipv4AddressesPerEni",
+          "documentation":"<p>The number of IPv4 addresses in each ENI for the resource gateway.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the VPC endpoint association was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The most recent date and time that the resource gateway was updated, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about a resource gateway.</p>"
@@ -4917,13 +5341,13 @@
       "type":"string",
       "max":50,
       "min":20,
-      "pattern":"^((sn)|(svc))-[0-9a-z]{17}$"
+      "pattern":"((sn)|(svc))-[0-9a-z]{17}"
     },
     "ResourceIdentifier":{
       "type":"string",
       "max":200,
       "min":17,
-      "pattern":"^((((sn)|(svc)|(rcfg))-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(resourceconfiguration/rcfg)|(service/svc))-[0-9a-z]{17}))$"
+      "pattern":"((((sn)|(svc)|(rcfg))-[0-9a-z]{17})|(arn(:[a-z0-9]+([.-][a-z0-9]+)*){2}(:([a-z0-9]+([.-][a-z0-9]+)*)?){2}:((servicenetwork/sn)|(resourceconfiguration/rcfg)|(service/svc))-[0-9a-z]{17}))"
     },
     "ResourceNotFoundException":{
       "type":"structure",
@@ -4953,13 +5377,13 @@
     "RuleAction":{
       "type":"structure",
       "members":{
-        "fixedResponse":{
-          "shape":"FixedResponseAction",
-          "documentation":"<p>The fixed response action. The rule returns a custom HTTP response.</p>"
-        },
         "forward":{
           "shape":"ForwardAction",
           "documentation":"<p>The forward action. Traffic that matches the rule is forwarded to the specified target groups.</p>"
+        },
+        "fixedResponse":{
+          "shape":"FixedResponseAction",
+          "documentation":"<p>The fixed response action. The rule returns a custom HTTP response.</p>"
         }
       },
       "documentation":"<p>Describes the action for a rule.</p>",
@@ -4969,19 +5393,19 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}/rule/rule-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}/rule/rule-[0-9a-z]{17}"
     },
     "RuleId":{
       "type":"string",
       "max":22,
       "min":5,
-      "pattern":"^rule-[0-9a-z]{17}$"
+      "pattern":"rule-[0-9a-z]{17}"
     },
     "RuleIdentifier":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^((rule-[0-9a-z]{17})|(^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}/rule/rule-[0-9a-z]{17}$))$"
+      "pattern":"((rule-[0-9a-z]{17})|(^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}/listener/listener-[0-9a-z]{17}/rule/rule-[0-9a-z]{17}$))"
     },
     "RuleMatch":{
       "type":"structure",
@@ -4998,12 +5422,12 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^(?!rule-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!rule-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "RulePriority":{
       "type":"integer",
       "box":true,
-      "max":100,
+      "max":2000,
       "min":1
     },
     "RuleSummary":{
@@ -5013,29 +5437,29 @@
           "shape":"RuleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the rule.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener rule was created, in ISO-8601 format.</p>"
-        },
         "id":{
           "shape":"RuleId",
           "documentation":"<p>The ID of the rule.</p>"
         },
-        "isDefault":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether this is the default listener rule.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the listener rule was last updated, in ISO-8601 format.</p>"
-        },
         "name":{
           "shape":"RuleName",
           "documentation":"<p>The name of the rule.</p>"
         },
+        "isDefault":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether this is the default listener rule.</p>"
+        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The priority of the rule.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener rule was created, in ISO-8601 format.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the listener rule was last updated, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about a listener rule.</p>"
@@ -5048,9 +5472,9 @@
       "type":"structure",
       "required":["ruleIdentifier"],
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>The rule action.</p>"
+        "ruleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The ID or ARN of the rule.</p>"
         },
         "match":{
           "shape":"RuleMatch",
@@ -5060,9 +5484,9 @@
           "shape":"RulePriority",
           "documentation":"<p>The rule priority. A listener can't have multiple rules with the same priority.</p>"
         },
-        "ruleIdentifier":{
-          "shape":"RuleIdentifier",
-          "documentation":"<p>The ID or ARN of the rule.</p>"
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>The rule action.</p>"
         }
       },
       "documentation":"<p>Describes a rule update.</p>"
@@ -5070,6 +5494,10 @@
     "RuleUpdateFailure":{
       "type":"structure",
       "members":{
+        "ruleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The ID or ARN of the rule.</p>"
+        },
         "failureCode":{
           "shape":"FailureCode",
           "documentation":"<p>The failure code.</p>"
@@ -5077,10 +5505,6 @@
         "failureMessage":{
           "shape":"FailureMessage",
           "documentation":"<p>The failure message.</p>"
-        },
-        "ruleIdentifier":{
-          "shape":"RuleIdentifier",
-          "documentation":"<p>The ID or ARN of the rule.</p>"
         }
       },
       "documentation":"<p>Describes a rule update that failed.</p>"
@@ -5092,16 +5516,12 @@
     "RuleUpdateList":{
       "type":"list",
       "member":{"shape":"RuleUpdate"},
-      "max":5,
+      "max":10,
       "min":1
     },
     "RuleUpdateSuccess":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the rule.</p>"
-        },
         "arn":{
           "shape":"RuleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
@@ -5110,6 +5530,10 @@
           "shape":"RuleId",
           "documentation":"<p>The ID of the listener.</p>"
         },
+        "name":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the listener.</p>"
+        },
         "isDefault":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether this is the default rule.</p>"
@@ -5118,13 +5542,13 @@
           "shape":"RuleMatch",
           "documentation":"<p>The rule match.</p>"
         },
-        "name":{
-          "shape":"RuleName",
-          "documentation":"<p>The name of the listener.</p>"
-        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The rule priority.</p>"
+        },
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the rule.</p>"
         }
       },
       "documentation":"<p>Describes a successful rule update.</p>"
@@ -5137,7 +5561,7 @@
       "type":"string",
       "max":200,
       "min":5,
-      "pattern":"^sg-(([0-9a-z]{8})|([0-9a-z]{17}))$"
+      "pattern":"sg-(([0-9a-z]{8})|([0-9a-z]{17}))"
     },
     "SecurityGroupList":{
       "type":"list",
@@ -5147,7 +5571,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}"
     },
     "ServiceArnList":{
       "type":"list",
@@ -5162,13 +5586,13 @@
       "type":"string",
       "max":21,
       "min":21,
-      "pattern":"^svc-[0-9a-z]{17}$"
+      "pattern":"svc-[0-9a-z]{17}"
     },
     "ServiceIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))$"
+      "pattern":"((svc-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:service/svc-[0-9a-z]{17}))"
     },
     "ServiceList":{
       "type":"list",
@@ -5178,13 +5602,13 @@
       "type":"string",
       "max":40,
       "min":3,
-      "pattern":"^(?!svc-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!svc-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "ServiceNetworkArn":{
       "type":"string",
       "max":2048,
       "min":32,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}"
     },
     "ServiceNetworkArnWithoutRegex":{
       "type":"string",
@@ -5194,33 +5618,33 @@
     "ServiceNetworkEndpointAssociation":{
       "type":"structure",
       "members":{
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
+        "vpcEndpointId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the VPC endpoint associated with the service network.</p>"
+        },
+        "vpcId":{
+          "shape":"String",
+          "documentation":"<p>The ID of the VPC for the association.</p>"
+        },
+        "vpcEndpointOwnerId":{
+          "shape":"String",
+          "documentation":"<p>The owner of the VPC endpoint associated with the service network.</p>"
         },
         "id":{
           "shape":"String",
           "documentation":"<p>The ID of the association.</p>"
         },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
-        },
         "state":{
           "shape":"String",
           "documentation":"<p>The state of the association.</p>"
         },
-        "vpcEndpointId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC endpoint associated with the service network.</p>"
-        },
-        "vpcEndpointOwnerId":{
-          "shape":"String",
-          "documentation":"<p>The owner of the VPC endpoint associated with the service network.</p>"
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
         },
-        "vpcId":{
-          "shape":"String",
-          "documentation":"<p>The ID of the VPC for the association.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Describes the association between a service network and a VPC endpoint.</p>"
@@ -5229,13 +5653,13 @@
       "type":"string",
       "max":20,
       "min":20,
-      "pattern":"^sn-[0-9a-z]{17}$"
+      "pattern":"sn-[0-9a-z]{17}"
     },
     "ServiceNetworkIdentifier":{
       "type":"string",
       "max":2048,
       "min":3,
-      "pattern":"^((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))$"
+      "pattern":"((sn-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetwork/sn-[0-9a-z]{17}))"
     },
     "ServiceNetworkIdentifierWithoutRegex":{
       "type":"string",
@@ -5257,7 +5681,7 @@
       "type":"string",
       "max":63,
       "min":3,
-      "pattern":"^(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "ServiceNetworkNameWithoutRegex":{
       "type":"string",
@@ -5268,19 +5692,19 @@
       "type":"string",
       "max":2048,
       "min":22,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkresourceassociation/snra-[0-9a-f]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkresourceassociation/snra-[0-9a-f]{17}"
     },
     "ServiceNetworkResourceAssociationId":{
       "type":"string",
       "max":22,
       "min":22,
-      "pattern":"^snra-[0-9a-f]{17}$"
+      "pattern":"snra-[0-9a-f]{17}"
     },
     "ServiceNetworkResourceAssociationIdentifier":{
       "type":"string",
       "max":2048,
       "min":22,
-      "pattern":"^((snra-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkresourceassociation/snra-[0-9a-f]{17}))$"
+      "pattern":"((snra-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkresourceassociation/snra-[0-9a-f]{17}))"
     },
     "ServiceNetworkResourceAssociationList":{
       "type":"list",
@@ -5300,65 +5724,69 @@
     "ServiceNetworkResourceAssociationSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkResourceAssociationId",
+          "documentation":"<p>The ID of the association between the service network and resource configuration.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkResourceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
+        "status":{
+          "shape":"ServiceNetworkResourceAssociationStatus",
+          "documentation":"<p>The status of the service network’s association with the resource configuration. If the deletion fails, try to delete again. </p>"
         },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "dnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The DNS entry for the service.</p>"
-        },
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkResourceAssociationId",
-          "documentation":"<p>The ID of the association between the service network and resource configuration.</p>"
-        },
-        "isManagedAssociation":{
-          "shape":"Boolean",
-          "documentation":"<p>Specifies whether the association is managed by Amazon.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
-        "privateDnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The private DNS entry for the service.</p>"
+        "resourceConfigurationId":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the resource configuration associated with the service network.</p>"
         },
         "resourceConfigurationArn":{
           "shape":"ResourceConfigurationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "resourceConfigurationId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the resource configuration associated with the service network.</p>"
-        },
         "resourceConfigurationName":{
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration associated with the service network.</p>"
         },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArnWithoutRegex",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network associated with the resource configuration.</p>"
-        },
         "serviceNetworkId":{
           "shape":"ServiceNetworkIdentifierWithoutRegex",
           "documentation":"<p>The ID of the service network associated with the resource configuration.</p>"
         },
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArnWithoutRegex",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network associated with the resource configuration.</p>"
+        },
         "serviceNetworkName":{
           "shape":"ServiceNetworkNameWithoutRegex",
           "documentation":"<p>The name of the service network associated with the resource configuration.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkResourceAssociationStatus",
-          "documentation":"<p>The status of the service network associated with the resource configuration.</p>"
+        "dnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The DNS entry for the service.</p>"
+        },
+        "privateDnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The private DNS entry for the service.</p>"
+        },
+        "isManagedAssociation":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether the association is managed by Amazon.</p>"
+        },
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
+        },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled for the service network resource association. </p>"
         }
       },
       "documentation":"<p>Summary information about an association between a service network and a resource configuration.</p>"
@@ -5367,13 +5795,13 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkserviceassociation/snsa-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkserviceassociation/snsa-[0-9a-z]{17}"
     },
     "ServiceNetworkServiceAssociationIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((snsa-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkserviceassociation/snsa-[0-9a-z]{17}))$"
+      "pattern":"((snsa-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkserviceassociation/snsa-[0-9a-z]{17}))"
     },
     "ServiceNetworkServiceAssociationList":{
       "type":"list",
@@ -5392,33 +5820,25 @@
     "ServiceNetworkServiceAssociationSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkServiceAssociationIdentifier",
+          "documentation":"<p>The ID of the association.</p>"
+        },
+        "status":{
+          "shape":"ServiceNetworkServiceAssociationStatus",
+          "documentation":"<p>The status of the service network’s association with the service. If the deletion fails, try to delete again.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkServiceAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
-        },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "customDomainName":{
-          "shape":"ServiceCustomDomainName",
-          "documentation":"<p>The custom domain name of the service.</p>"
-        },
-        "dnsEntry":{
-          "shape":"DnsEntry",
-          "documentation":"<p>The DNS information.</p>"
-        },
-        "id":{
-          "shape":"ServiceNetworkServiceAssociationIdentifier",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "serviceArn":{
-          "shape":"ServiceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
         "serviceId":{
           "shape":"ServiceId",
@@ -5428,9 +5848,9 @@
           "shape":"ServiceName",
           "documentation":"<p>The name of the service.</p>"
         },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        "serviceArn":{
+          "shape":"ServiceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
         },
         "serviceNetworkId":{
           "shape":"ServiceNetworkId",
@@ -5440,9 +5860,17 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkServiceAssociationStatus",
-          "documentation":"<p>The status. If the deletion fails, try to delete again.</p>"
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
+        "dnsEntry":{
+          "shape":"DnsEntry",
+          "documentation":"<p>The DNS information.</p>"
+        },
+        "customDomainName":{
+          "shape":"ServiceCustomDomainName",
+          "documentation":"<p>The custom domain name of the service.</p>"
         }
       },
       "documentation":"<p>Summary information about an association between a service network and a service.</p>"
@@ -5450,6 +5878,14 @@
     "ServiceNetworkSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkId",
+          "documentation":"<p>The ID of the service network.</p>"
+        },
+        "name":{
+          "shape":"ServiceNetworkName",
+          "documentation":"<p>The name of the service network.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
@@ -5458,29 +5894,21 @@
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service network was created, in ISO-8601 format.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkId",
-          "documentation":"<p>The ID of the service network.</p>"
-        },
         "lastUpdatedAt":{
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service network was last updated, in ISO-8601 format.</p>"
         },
-        "name":{
-          "shape":"ServiceNetworkName",
-          "documentation":"<p>The name of the service network.</p>"
-        },
-        "numberOfAssociatedResourceConfigurations":{
+        "numberOfAssociatedVPCs":{
           "shape":"Long",
-          "documentation":"<p>The number of resource configurations associated with a service network.</p>"
+          "documentation":"<p>The number of VPCs associated with the service network.</p>"
         },
         "numberOfAssociatedServices":{
           "shape":"Long",
           "documentation":"<p>The number of services associated with the service network.</p>"
         },
-        "numberOfAssociatedVPCs":{
+        "numberOfAssociatedResourceConfigurations":{
           "shape":"Long",
-          "documentation":"<p>The number of VPCs associated with the service network.</p>"
+          "documentation":"<p>The number of resource configurations associated with a service network.</p>"
         }
       },
       "documentation":"<p>Summary information about a service network.</p>"
@@ -5489,19 +5917,19 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkvpcassociation/snva-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkvpcassociation/snva-[0-9a-z]{17}"
     },
     "ServiceNetworkVpcAssociationId":{
       "type":"string",
       "max":22,
       "min":22,
-      "pattern":"^snva-[0-9a-z]{17}$"
+      "pattern":"snva-[0-9a-z]{17}"
     },
     "ServiceNetworkVpcAssociationIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((snva-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkvpcassociation/snva-[0-9a-z]{17}))$"
+      "pattern":"((snva-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:servicenetworkvpcassociation/snva-[0-9a-z]{17}))"
     },
     "ServiceNetworkVpcAssociationList":{
       "type":"list",
@@ -5522,29 +5950,25 @@
     "ServiceNetworkVpcAssociationSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkVpcAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkVpcAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
+        "status":{
+          "shape":"ServiceNetworkVpcAssociationStatus",
+          "documentation":"<p>The status.</p>"
         },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkVpcAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
-        "lastUpdatedAt":{
+        "createdAt":{
           "shape":"Timestamp",
-          "documentation":"<p>The date and time that the association was last updated, in ISO-8601 format.</p>"
-        },
-        "serviceNetworkArn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+          "documentation":"<p>The date and time that the association was created, in ISO-8601 format.</p>"
         },
         "serviceNetworkId":{
           "shape":"ServiceNetworkId",
@@ -5554,13 +5978,25 @@
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
         },
-        "status":{
-          "shape":"ServiceNetworkVpcAssociationStatus",
-          "documentation":"<p>The status.</p>"
+        "serviceNetworkArn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
+        "privateDnsEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p> Indicates if private DNS is enabled for the service network VPC association. </p>"
+        },
+        "dnsOptions":{
+          "shape":"DnsOptions",
+          "documentation":"<p> The DNS options for the service network VPC association. </p>"
         },
         "vpcId":{
           "shape":"VpcId",
           "documentation":"<p>The ID of the VPC.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the association was last updated, in ISO-8601 format.</p>"
         }
       },
       "documentation":"<p>Summary information about an association between a service network and a VPC.</p>"
@@ -5573,16 +6009,12 @@
       "type":"structure",
       "required":[
         "message",
-        "quotaCode",
         "resourceType",
-        "serviceCode"
+        "serviceCode",
+        "quotaCode"
       ],
       "members":{
         "message":{"shape":"String"},
-        "quotaCode":{
-          "shape":"String",
-          "documentation":"<p>The ID of the service quota that was exceeded.</p>"
-        },
         "resourceId":{
           "shape":"String",
           "documentation":"<p>The resource ID.</p>"
@@ -5594,6 +6026,10 @@
         "serviceCode":{
           "shape":"String",
           "documentation":"<p>The service code.</p>"
+        },
+        "quotaCode":{
+          "shape":"String",
+          "documentation":"<p>The ID of the service quota that was exceeded.</p>"
         }
       },
       "documentation":"<p>The request would cause a service quota to be exceeded.</p>",
@@ -5616,6 +6052,14 @@
     "ServiceSummary":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceId",
+          "documentation":"<p>The ID of the service.</p>"
+        },
+        "name":{
+          "shape":"ServiceName",
+          "documentation":"<p>The name of the service.</p>"
+        },
         "arn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
@@ -5624,25 +6068,17 @@
           "shape":"Timestamp",
           "documentation":"<p>The date and time that the service was created, in ISO-8601 format.</p>"
         },
-        "customDomainName":{
-          "shape":"ServiceCustomDomainName",
-          "documentation":"<p>The custom domain name of the service.</p>"
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the service was last updated, in ISO-8601 format.</p>"
         },
         "dnsEntry":{
           "shape":"DnsEntry",
           "documentation":"<p>The DNS information.</p>"
         },
-        "id":{
-          "shape":"ServiceId",
-          "documentation":"<p>The ID of the service.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the service was last updated, in ISO-8601 format.</p>"
-        },
-        "name":{
-          "shape":"ServiceName",
-          "documentation":"<p>The name of the service.</p>"
+        "customDomainName":{
+          "shape":"ServiceCustomDomainName",
+          "documentation":"<p>The custom domain name of the service.</p>"
         },
         "status":{
           "shape":"ServiceStatus",
@@ -5661,6 +6097,56 @@
       },
       "documentation":"<p>Specifies if the service network should be enabled for sharing.</p>"
     },
+    "StartDomainVerificationRequest":{
+      "type":"structure",
+      "required":["domainName"],
+      "members":{
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p> A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. If you retry a request that completed successfully using the same client token and parameters, the retry succeeds without performing any actions. If the parameters aren't identical, the retry fails. </p>",
+          "idempotencyToken":true
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The domain name to verify ownership for. </p>"
+        },
+        "tags":{
+          "shape":"TagMap",
+          "documentation":"<p> The tags for the domain verification. </p>"
+        }
+      }
+    },
+    "StartDomainVerificationResponse":{
+      "type":"structure",
+      "required":[
+        "id",
+        "arn",
+        "domainName",
+        "status"
+      ],
+      "members":{
+        "id":{
+          "shape":"DomainVerificationId",
+          "documentation":"<p> The ID of the domain verification. </p>"
+        },
+        "arn":{
+          "shape":"DomainVerificationArn",
+          "documentation":"<p> The Amazon Resource Name (ARN) of the domain verification. </p>"
+        },
+        "domainName":{
+          "shape":"DomainName",
+          "documentation":"<p> The domain name being verified. </p>"
+        },
+        "status":{
+          "shape":"VerificationStatus",
+          "documentation":"<p> The current status of the domain verification process. </p>"
+        },
+        "txtMethodConfig":{
+          "shape":"TxtMethodConfig",
+          "documentation":"<p> The TXT record configuration used for domain verification. </p>"
+        }
+      }
+    },
     "String":{"type":"string"},
     "SubnetId":{
       "type":"string",
@@ -5716,8 +6202,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5742,14 +6227,6 @@
     "TargetFailure":{
       "type":"structure",
       "members":{
-        "failureCode":{
-          "shape":"String",
-          "documentation":"<p>The failure code.</p>"
-        },
-        "failureMessage":{
-          "shape":"String",
-          "documentation":"<p>The failure message.</p>"
-        },
         "id":{
           "shape":"String",
           "documentation":"<p>The ID of the target. If the target group type is <code>INSTANCE</code>, this is an instance ID. If the target group type is <code>IP</code>, this is an IP address. If the target group type is <code>LAMBDA</code>, this is the ARN of a Lambda function. If the target group type is <code>ALB</code>, this is the ARN of an Application Load Balancer.</p>"
@@ -5757,6 +6234,14 @@
         "port":{
           "shape":"Port",
           "documentation":"<p>The port on which the target is listening. This parameter doesn't apply if the target is a Lambda function.</p>"
+        },
+        "failureCode":{
+          "shape":"String",
+          "documentation":"<p>The failure code.</p>"
+        },
+        "failureMessage":{
+          "shape":"String",
+          "documentation":"<p>The failure message.</p>"
         }
       },
       "documentation":"<p>Describes a target failure.</p>"
@@ -5769,23 +6254,11 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}$"
+      "pattern":"arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}"
     },
     "TargetGroupConfig":{
       "type":"structure",
       "members":{
-        "healthCheck":{
-          "shape":"HealthCheckConfig",
-          "documentation":"<p>The health check configuration. Not supported if the target group type is <code>LAMBDA</code> or <code>ALB</code>.</p>"
-        },
-        "ipAddressType":{
-          "shape":"IpAddressType",
-          "documentation":"<p>The type of IP address used for the target group. Supported only if the target group type is <code>IP</code>. The default is <code>IPV4</code>.</p>"
-        },
-        "lambdaEventStructureVersion":{
-          "shape":"LambdaEventStructureVersion",
-          "documentation":"<p>The version of the event structure that your Lambda function receives. Supported only if the target group type is <code>LAMBDA</code>. The default is <code>V1</code>.</p>"
-        },
         "port":{
           "shape":"Port",
           "documentation":"<p>The port on which the targets are listening. For HTTP, the default is 80. For HTTPS, the default is 443. Not supported if the target group type is <code>LAMBDA</code>.</p>"
@@ -5798,9 +6271,21 @@
           "shape":"TargetGroupProtocolVersion",
           "documentation":"<p>The protocol version. The default is <code>HTTP1</code>. Not supported if the target group type is <code>LAMBDA</code>.</p>"
         },
+        "ipAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The type of IP address used for the target group. Supported only if the target group type is <code>IP</code>. The default is <code>IPV4</code>.</p>"
+        },
         "vpcIdentifier":{
           "shape":"VpcId",
           "documentation":"<p>The ID of the VPC. Not supported if the target group type is <code>LAMBDA</code>.</p>"
+        },
+        "healthCheck":{
+          "shape":"HealthCheckConfig",
+          "documentation":"<p>The health check configuration. Not supported if the target group type is <code>LAMBDA</code> or <code>ALB</code>.</p>"
+        },
+        "lambdaEventStructureVersion":{
+          "shape":"LambdaEventStructureVersion",
+          "documentation":"<p>The version of the event structure that your Lambda function receives. Supported only if the target group type is <code>LAMBDA</code>. The default is <code>V1</code>.</p>"
         }
       },
       "documentation":"<p>Describes the configuration of a target group.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/target-groups.html\">Target groups</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
@@ -5809,13 +6294,13 @@
       "type":"string",
       "max":20,
       "min":20,
-      "pattern":"^tg-[0-9a-z]{17}$"
+      "pattern":"tg-[0-9a-z]{17}"
     },
     "TargetGroupIdentifier":{
       "type":"string",
       "max":2048,
       "min":17,
-      "pattern":"^((tg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}))$"
+      "pattern":"((tg-[0-9a-z]{17})|(arn:[a-z0-9\\-]+:vpc-lattice:[a-zA-Z0-9\\-]+:\\d{12}:targetgroup/tg-[0-9a-z]{17}))"
     },
     "TargetGroupList":{
       "type":"list",
@@ -5825,7 +6310,7 @@
       "type":"string",
       "max":128,
       "min":3,
-      "pattern":"^(?!tg-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+$"
+      "pattern":"(?!tg-)(?![-])(?!.*[-]$)(?!.*[-]{2})[a-z0-9-]+"
     },
     "TargetGroupProtocol":{
       "type":"string",
@@ -5856,34 +6341,26 @@
     "TargetGroupSummary":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"TargetGroupArn",
-          "documentation":"<p>The ARN (Amazon Resource Name) of the target group.</p>"
-        },
-        "createdAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the target group was created, in ISO-8601 format.</p>"
-        },
         "id":{
           "shape":"TargetGroupId",
           "documentation":"<p>The ID of the target group.</p>"
         },
-        "ipAddressType":{
-          "shape":"IpAddressType",
-          "documentation":"<p>The type of IP address used for the target group. The possible values are <code>IPV4</code> and <code>IPV6</code>. This is an optional parameter. If not specified, the default is <code>IPV4</code>.</p>"
-        },
-        "lambdaEventStructureVersion":{
-          "shape":"LambdaEventStructureVersion",
-          "documentation":"<p>The version of the event structure that your Lambda function receives. Supported only if the target group type is <code>LAMBDA</code>.</p>"
-        },
-        "lastUpdatedAt":{
-          "shape":"Timestamp",
-          "documentation":"<p>The date and time that the target group was last updated, in ISO-8601 format.</p>"
+        "arn":{
+          "shape":"TargetGroupArn",
+          "documentation":"<p>The ARN (Amazon Resource Name) of the target group.</p>"
         },
         "name":{
           "shape":"TargetGroupName",
           "documentation":"<p>The name of the target group.</p>"
         },
+        "type":{
+          "shape":"TargetGroupType",
+          "documentation":"<p>The target group type.</p>"
+        },
+        "createdAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the target group was created, in ISO-8601 format.</p>"
+        },
         "port":{
           "shape":"Port",
           "documentation":"<p>The port of the target group.</p>"
@@ -5892,21 +6369,29 @@
           "shape":"TargetGroupProtocol",
           "documentation":"<p>The protocol of the target group.</p>"
         },
-        "serviceArns":{
-          "shape":"ServiceArnList",
-          "documentation":"<p>The Amazon Resource Names (ARNs) of the service.</p>"
+        "ipAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The type of IP address used for the target group. The possible values are <code>IPV4</code> and <code>IPV6</code>. This is an optional parameter. If not specified, the default is <code>IPV4</code>.</p>"
+        },
+        "vpcIdentifier":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC of the target group.</p>"
+        },
+        "lastUpdatedAt":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date and time that the target group was last updated, in ISO-8601 format.</p>"
         },
         "status":{
           "shape":"TargetGroupStatus",
           "documentation":"<p>The status.</p>"
         },
-        "type":{
-          "shape":"TargetGroupType",
-          "documentation":"<p>The target group type.</p>"
+        "serviceArns":{
+          "shape":"ServiceArnList",
+          "documentation":"<p>The Amazon Resource Names (ARNs) of the service.</p>"
         },
-        "vpcIdentifier":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC of the target group.</p>"
+        "lambdaEventStructureVersion":{
+          "shape":"LambdaEventStructureVersion",
+          "documentation":"<p>The version of the event structure that your Lambda function receives. Supported only if the target group type is <code>LAMBDA</code>.</p>"
         }
       },
       "documentation":"<p>Summary information about a target group.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/target-groups.html\">Target groups</a> in the <i>Amazon VPC Lattice User Guide</i>.</p>"
@@ -5957,13 +6442,13 @@
           "shape":"Port",
           "documentation":"<p>The port on which the target is listening.</p>"
         },
-        "reasonCode":{
-          "shape":"String",
-          "documentation":"<p>The code for why the target status is what it is.</p>"
-        },
         "status":{
           "shape":"TargetStatus",
           "documentation":"<p>The status of the target.</p> <ul> <li> <p> <code>DRAINING</code>: The target is being deregistered. No new connections are sent to this target while current connections are being drained. The default draining time is 5 minutes.</p> </li> <li> <p> <code>UNAVAILABLE</code>: Health checks are unavailable for the target group.</p> </li> <li> <p> <code>HEALTHY</code>: The target is healthy.</p> </li> <li> <p> <code>UNHEALTHY</code>: The target is unhealthy.</p> </li> <li> <p> <code>INITIAL</code>: Initial health checks on the target are being performed.</p> </li> <li> <p> <code>UNUSED</code>: Target group is not used in a service.</p> </li> </ul>"
+        },
+        "reasonCode":{
+          "shape":"String",
+          "documentation":"<p>The code for why the target status is what it is.</p>"
         }
       },
       "documentation":"<p>Summary information about a target.</p>"
@@ -5977,6 +6462,10 @@
       "required":["message"],
       "members":{
         "message":{"shape":"String"},
+        "serviceCode":{
+          "shape":"String",
+          "documentation":"<p>The service code.</p>"
+        },
         "quotaCode":{
           "shape":"String",
           "documentation":"<p>The ID of the service quota that was exceeded.</p>"
@@ -5986,10 +6475,6 @@
           "documentation":"<p>The number of seconds to wait before retrying.</p>",
           "location":"header",
           "locationName":"Retry-After"
-        },
-        "serviceCode":{
-          "shape":"String",
-          "documentation":"<p>The service code.</p>"
         }
       },
       "documentation":"<p>The limit on the number of requests per second was exceeded.</p>",
@@ -6004,6 +6489,24 @@
       "type":"timestamp",
       "timestampFormat":"iso8601"
     },
+    "TxtMethodConfig":{
+      "type":"structure",
+      "required":[
+        "value",
+        "name"
+      ],
+      "members":{
+        "value":{
+          "shape":"String",
+          "documentation":"<p> The value that must be added to the TXT record for domain verification. </p>"
+        },
+        "name":{
+          "shape":"String",
+          "documentation":"<p> The name of the TXT record that must be created for domain verification. </p>"
+        }
+      },
+      "documentation":"<p> Configuration for TXT record-based domain verification method. </p>"
+    },
     "UnhealthyThresholdCount":{
       "type":"integer",
       "box":true,
@@ -6033,8 +6536,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAccessLogSubscriptionRequest":{
       "type":"structure",
@@ -6058,46 +6560,48 @@
     "UpdateAccessLogSubscriptionResponse":{
       "type":"structure",
       "required":[
-        "arn",
-        "destinationArn",
         "id",
+        "arn",
+        "resourceId",
         "resourceArn",
-        "resourceId"
+        "destinationArn"
       ],
       "members":{
-        "arn":{
-          "shape":"AccessLogSubscriptionArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
-        },
-        "destinationArn":{
-          "shape":"AccessLogDestinationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the access log destination.</p>"
-        },
         "id":{
           "shape":"AccessLogSubscriptionId",
           "documentation":"<p>The ID of the access log subscription.</p>"
         },
-        "resourceArn":{
-          "shape":"ResourceArn",
+        "arn":{
+          "shape":"AccessLogSubscriptionArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
         },
         "resourceId":{
           "shape":"ResourceId",
           "documentation":"<p>The ID of the resource.</p>"
+        },
+        "resourceArn":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log subscription.</p>"
+        },
+        "destinationArn":{
+          "shape":"AccessLogDestinationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the access log destination.</p>"
         }
       }
     },
     "UpdateListenerRequest":{
       "type":"structure",
       "required":[
-        "defaultAction",
+        "serviceIdentifier",
         "listenerIdentifier",
-        "serviceIdentifier"
+        "defaultAction"
       ],
       "members":{
-        "defaultAction":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule.</p>"
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
         },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
@@ -6105,11 +6609,9 @@
           "location":"uri",
           "locationName":"listenerIdentifier"
         },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
+        "defaultAction":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule.</p>"
         }
       }
     },
@@ -6120,10 +6622,6 @@
           "shape":"ListenerArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
         },
-        "defaultAction":{
-          "shape":"RuleAction",
-          "documentation":"<p>The action for the default rule.</p>"
-        },
         "id":{
           "shape":"ListenerId",
           "documentation":"<p>The ID of the listener.</p>"
@@ -6132,14 +6630,14 @@
           "shape":"ListenerName",
           "documentation":"<p>The name of the listener.</p>"
         },
-        "port":{
-          "shape":"Port",
-          "documentation":"<p>The listener port.</p>"
-        },
         "protocol":{
           "shape":"ListenerProtocol",
           "documentation":"<p>The protocol of the listener.</p>"
         },
+        "port":{
+          "shape":"Port",
+          "documentation":"<p>The listener port.</p>"
+        },
         "serviceArn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
@@ -6147,6 +6645,10 @@
         "serviceId":{
           "shape":"ServiceId",
           "documentation":"<p>The ID of the service.</p>"
+        },
+        "defaultAction":{
+          "shape":"RuleAction",
+          "documentation":"<p>The action for the default rule.</p>"
         }
       }
     },
@@ -6154,6 +6656,16 @@
       "type":"structure",
       "required":["resourceConfigurationIdentifier"],
       "members":{
+        "resourceConfigurationIdentifier":{
+          "shape":"ResourceConfigurationIdentifier",
+          "documentation":"<p>The ID of the resource configuration.</p>",
+          "location":"uri",
+          "locationName":"resourceConfigurationIdentifier"
+        },
+        "resourceConfigurationDefinition":{
+          "shape":"ResourceConfigurationDefinition",
+          "documentation":"<p>Identifies the resource configuration in one of the following ways:</p> <ul> <li> <p> <b>Amazon Resource Name (ARN)</b> - Supported resource-types that are provisioned by Amazon Web Services services, such as RDS databases, can be identified by their ARN.</p> </li> <li> <p> <b>Domain name</b> - Any domain name that is publicly resolvable.</p> </li> <li> <p> <b>IP address</b> - For IPv4 and IPv6, only IP addresses in the VPC are supported.</p> </li> </ul>"
+        },
         "allowAssociationToShareableServiceNetwork":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether to add the resource configuration to service networks that are shared with other accounts.</p>"
@@ -6161,30 +6673,12 @@
         "portRanges":{
           "shape":"PortRangeList",
           "documentation":"<p>The TCP port ranges that a consumer can use to access a resource configuration. You can separate port ranges with a comma. Example: 1-65535 or 1,2,22-30</p>"
-        },
-        "resourceConfigurationDefinition":{
-          "shape":"ResourceConfigurationDefinition",
-          "documentation":"<p>The resource configuration.</p>"
-        },
-        "resourceConfigurationIdentifier":{
-          "shape":"ResourceConfigurationIdentifier",
-          "documentation":"<p>The ID of the resource configuration.</p>",
-          "location":"uri",
-          "locationName":"resourceConfigurationIdentifier"
         }
       }
     },
     "UpdateResourceConfigurationResponse":{
       "type":"structure",
       "members":{
-        "allowAssociationToShareableServiceNetwork":{
-          "shape":"Boolean",
-          "documentation":"<p>Indicates whether to add the resource configuration to service networks that are shared with other accounts.</p>"
-        },
-        "arn":{
-          "shape":"ResourceConfigurationArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
-        },
         "id":{
           "shape":"ResourceConfigurationId",
           "documentation":"<p>The ID of the resource configuration.</p>"
@@ -6193,33 +6687,41 @@
           "shape":"ResourceConfigurationName",
           "documentation":"<p>The name of the resource configuration.</p>"
         },
+        "arn":{
+          "shape":"ResourceConfigurationArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource configuration.</p>"
+        },
+        "resourceGatewayId":{
+          "shape":"ResourceGatewayId",
+          "documentation":"<p>The ID of the resource gateway associated with the resource configuration.</p>"
+        },
+        "resourceConfigurationGroupId":{
+          "shape":"ResourceConfigurationId",
+          "documentation":"<p>The ID of the group resource configuration.</p>"
+        },
+        "type":{
+          "shape":"ResourceConfigurationType",
+          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
+        },
         "portRanges":{
           "shape":"PortRangeList",
           "documentation":"<p>The TCP port ranges that a consumer can use to access a resource configuration. You can separate port ranges with a comma. Example: 1-65535 or 1,2,22-30</p>"
         },
+        "allowAssociationToShareableServiceNetwork":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates whether to add the resource configuration to service networks that are shared with other accounts.</p>"
+        },
         "protocol":{
           "shape":"ProtocolType",
           "documentation":"<p>The TCP protocol accepted by the specified resource configuration.</p>"
         },
-        "resourceConfigurationDefinition":{
-          "shape":"ResourceConfigurationDefinition",
-          "documentation":"<p>The resource configuration.</p>"
-        },
-        "resourceConfigurationGroupId":{
-          "shape":"ResourceConfigurationId",
-          "documentation":"<p>The ID of the group resource configuration.</p>"
-        },
-        "resourceGatewayId":{
-          "shape":"ResourceGatewayId",
-          "documentation":"<p>The ID of the resource gateway associated with the resource configuration.</p>"
-        },
         "status":{
           "shape":"ResourceConfigurationStatus",
           "documentation":"<p>The status of the resource configuration.</p>"
         },
-        "type":{
-          "shape":"ResourceConfigurationType",
-          "documentation":"<p>The type of resource configuration.</p> <ul> <li> <p> <code>SINGLE</code> - A single resource.</p> </li> <li> <p> <code>GROUP</code> - A group of resources.</p> </li> <li> <p> <code>CHILD</code> - A single resource that is part of a group resource configuration.</p> </li> <li> <p> <code>ARN</code> - An Amazon Web Services resource.</p> </li> </ul>"
+        "resourceConfigurationDefinition":{
+          "shape":"ResourceConfigurationDefinition",
+          "documentation":"<p>The resource configuration.</p>"
         }
       }
     },
@@ -6248,51 +6750,53 @@
     "UpdateResourceGatewayResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ResourceGatewayArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
+        "name":{
+          "shape":"ResourceGatewayName",
+          "documentation":"<p>The name of the resource gateway.</p>"
         },
         "id":{
           "shape":"ResourceGatewayId",
           "documentation":"<p>The ID of the resource gateway.</p>"
         },
-        "ipAddressType":{
-          "shape":"IpAddressType",
-          "documentation":"<p>The type of IP address used by the resource gateway.</p>"
-        },
-        "name":{
-          "shape":"ResourceGatewayName",
-          "documentation":"<p>The name of the resource gateway.</p>"
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupList",
-          "documentation":"<p>The IDs of the security groups associated with the resource gateway.</p>"
+        "arn":{
+          "shape":"ResourceGatewayArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource gateway.</p>"
         },
         "status":{
           "shape":"ResourceGatewayStatus",
           "documentation":"<p>The status of the resource gateway.</p>"
         },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        },
         "subnetIds":{
           "shape":"SubnetList",
           "documentation":"<p>The IDs of the VPC subnets for the resource gateway.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The ID of the VPC for the resource gateway.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupList",
+          "documentation":"<p>The IDs of the security groups associated with the resource gateway.</p>"
+        },
+        "ipAddressType":{
+          "shape":"IpAddressType",
+          "documentation":"<p>The type of IP address used by the resource gateway.</p>"
         }
       }
     },
     "UpdateRuleRequest":{
       "type":"structure",
       "required":[
+        "serviceIdentifier",
         "listenerIdentifier",
-        "ruleIdentifier",
-        "serviceIdentifier"
+        "ruleIdentifier"
       ],
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>Information about the action for the specified listener rule.</p>"
+        "serviceIdentifier":{
+          "shape":"ServiceIdentifier",
+          "documentation":"<p>The ID or ARN of the service.</p>",
+          "location":"uri",
+          "locationName":"serviceIdentifier"
         },
         "listenerIdentifier":{
           "shape":"ListenerIdentifier",
@@ -6300,6 +6804,12 @@
           "location":"uri",
           "locationName":"listenerIdentifier"
         },
+        "ruleIdentifier":{
+          "shape":"RuleIdentifier",
+          "documentation":"<p>The ID or ARN of the rule.</p>",
+          "location":"uri",
+          "locationName":"ruleIdentifier"
+        },
         "match":{
           "shape":"RuleMatch",
           "documentation":"<p>The rule match.</p>"
@@ -6308,27 +6818,15 @@
           "shape":"RulePriority",
           "documentation":"<p>The rule priority. A listener can't have multiple rules with the same priority.</p>"
         },
-        "ruleIdentifier":{
-          "shape":"RuleIdentifier",
-          "documentation":"<p>The ID or ARN of the rule.</p>",
-          "location":"uri",
-          "locationName":"ruleIdentifier"
-        },
-        "serviceIdentifier":{
-          "shape":"ServiceIdentifier",
-          "documentation":"<p>The ID or ARN of the service.</p>",
-          "location":"uri",
-          "locationName":"serviceIdentifier"
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>Information about the action for the specified listener rule.</p>"
         }
       }
     },
     "UpdateRuleResponse":{
       "type":"structure",
       "members":{
-        "action":{
-          "shape":"RuleAction",
-          "documentation":"<p>Information about the action for the specified listener rule.</p>"
-        },
         "arn":{
           "shape":"RuleArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the listener.</p>"
@@ -6337,6 +6835,10 @@
           "shape":"RuleId",
           "documentation":"<p>The ID of the listener.</p>"
         },
+        "name":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the listener.</p>"
+        },
         "isDefault":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether this is the default rule.</p>"
@@ -6345,46 +6847,38 @@
           "shape":"RuleMatch",
           "documentation":"<p>The rule match.</p>"
         },
-        "name":{
-          "shape":"RuleName",
-          "documentation":"<p>The name of the listener.</p>"
-        },
         "priority":{
           "shape":"RulePriority",
           "documentation":"<p>The rule priority.</p>"
+        },
+        "action":{
+          "shape":"RuleAction",
+          "documentation":"<p>Information about the action for the specified listener rule.</p>"
         }
       }
     },
     "UpdateServiceNetworkRequest":{
       "type":"structure",
       "required":[
-        "authType",
-        "serviceNetworkIdentifier"
+        "serviceNetworkIdentifier",
+        "authType"
       ],
       "members":{
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
-        },
         "serviceNetworkIdentifier":{
           "shape":"ServiceNetworkIdentifier",
           "documentation":"<p>The ID or ARN of the service network.</p>",
           "location":"uri",
           "locationName":"serviceNetworkIdentifier"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
         }
       }
     },
     "UpdateServiceNetworkResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"ServiceNetworkArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
-        },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
-        },
         "id":{
           "shape":"ServiceNetworkId",
           "documentation":"<p>The ID of the service network.</p>"
@@ -6392,25 +6886,33 @@
         "name":{
           "shape":"ServiceNetworkName",
           "documentation":"<p>The name of the service network.</p>"
+        },
+        "arn":{
+          "shape":"ServiceNetworkArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the service network.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
         }
       }
     },
     "UpdateServiceNetworkVpcAssociationRequest":{
       "type":"structure",
       "required":[
-        "securityGroupIds",
-        "serviceNetworkVpcAssociationIdentifier"
+        "serviceNetworkVpcAssociationIdentifier",
+        "securityGroupIds"
       ],
       "members":{
-        "securityGroupIds":{
-          "shape":"UpdateServiceNetworkVpcAssociationRequestSecurityGroupIdsList",
-          "documentation":"<p>The IDs of the security groups.</p>"
-        },
         "serviceNetworkVpcAssociationIdentifier":{
           "shape":"ServiceNetworkVpcAssociationIdentifier",
           "documentation":"<p>The ID or ARN of the association.</p>",
           "location":"uri",
           "locationName":"serviceNetworkVpcAssociationIdentifier"
+        },
+        "securityGroupIds":{
+          "shape":"UpdateServiceNetworkVpcAssociationRequestSecurityGroupIdsList",
+          "documentation":"<p>The IDs of the security groups.</p>"
         }
       }
     },
@@ -6423,25 +6925,25 @@
     "UpdateServiceNetworkVpcAssociationResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceNetworkVpcAssociationId",
+          "documentation":"<p>The ID of the association.</p>"
+        },
         "arn":{
           "shape":"ServiceNetworkVpcAssociationArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the association.</p>"
         },
+        "status":{
+          "shape":"ServiceNetworkVpcAssociationStatus",
+          "documentation":"<p>The status. You can retry the operation if the status is <code>DELETE_FAILED</code>. However, if you retry it while the status is <code>DELETE_IN_PROGRESS</code>, there is no change in the status.</p>"
+        },
         "createdBy":{
           "shape":"AccountId",
           "documentation":"<p>The account that created the association.</p>"
         },
-        "id":{
-          "shape":"ServiceNetworkVpcAssociationId",
-          "documentation":"<p>The ID of the association.</p>"
-        },
         "securityGroupIds":{
           "shape":"SecurityGroupList",
           "documentation":"<p>The IDs of the security groups.</p>"
-        },
-        "status":{
-          "shape":"ServiceNetworkVpcAssociationStatus",
-          "documentation":"<p>The status. You can retry the operation if the status is <code>DELETE_FAILED</code>. However, if you retry it while the status is <code>DELETE_IN_PROGRESS</code>, there is no change in the status.</p>"
         }
       }
     },
@@ -6449,96 +6951,96 @@
       "type":"structure",
       "required":["serviceIdentifier"],
       "members":{
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
-        },
-        "certificateArn":{
-          "shape":"CertificateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
-        },
         "serviceIdentifier":{
           "shape":"ServiceIdentifier",
           "documentation":"<p>The ID or ARN of the service.</p>",
           "location":"uri",
           "locationName":"serviceIdentifier"
+        },
+        "certificateArn":{
+          "shape":"CertificateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
+        },
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p> <ul> <li> <p> <code>NONE</code>: The resource does not use an IAM policy. This is the default.</p> </li> <li> <p> <code>AWS_IAM</code>: The resource uses an IAM policy. When this type is used, auth is enabled and an auth policy is required.</p> </li> </ul>"
         }
       }
     },
     "UpdateServiceResponse":{
       "type":"structure",
       "members":{
+        "id":{
+          "shape":"ServiceId",
+          "documentation":"<p>The ID of the service.</p>"
+        },
         "arn":{
           "shape":"ServiceArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the service.</p>"
         },
-        "authType":{
-          "shape":"AuthType",
-          "documentation":"<p>The type of IAM policy.</p>"
-        },
-        "certificateArn":{
-          "shape":"CertificateArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
+        "name":{
+          "shape":"ServiceName",
+          "documentation":"<p>The name of the service.</p>"
         },
         "customDomainName":{
           "shape":"ServiceCustomDomainName",
           "documentation":"<p>The custom domain name of the service.</p>"
         },
-        "id":{
-          "shape":"ServiceId",
-          "documentation":"<p>The ID of the service.</p>"
+        "certificateArn":{
+          "shape":"CertificateArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the certificate.</p>"
         },
-        "name":{
-          "shape":"ServiceName",
-          "documentation":"<p>The name of the service.</p>"
+        "authType":{
+          "shape":"AuthType",
+          "documentation":"<p>The type of IAM policy.</p>"
         }
       }
     },
     "UpdateTargetGroupRequest":{
       "type":"structure",
       "required":[
-        "healthCheck",
-        "targetGroupIdentifier"
+        "targetGroupIdentifier",
+        "healthCheck"
       ],
       "members":{
-        "healthCheck":{
-          "shape":"HealthCheckConfig",
-          "documentation":"<p>The health check configuration.</p>"
-        },
         "targetGroupIdentifier":{
           "shape":"TargetGroupIdentifier",
           "documentation":"<p>The ID or ARN of the target group.</p>",
           "location":"uri",
           "locationName":"targetGroupIdentifier"
+        },
+        "healthCheck":{
+          "shape":"HealthCheckConfig",
+          "documentation":"<p>The health check configuration.</p>"
         }
       }
     },
     "UpdateTargetGroupResponse":{
       "type":"structure",
       "members":{
-        "arn":{
-          "shape":"TargetGroupArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
-        },
-        "config":{
-          "shape":"TargetGroupConfig",
-          "documentation":"<p>The target group configuration.</p>"
-        },
         "id":{
           "shape":"TargetGroupId",
           "documentation":"<p>The ID of the target group.</p>"
         },
+        "arn":{
+          "shape":"TargetGroupArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the target group.</p>"
+        },
         "name":{
           "shape":"TargetGroupName",
           "documentation":"<p>The name of the target group.</p>"
         },
-        "status":{
-          "shape":"TargetGroupStatus",
-          "documentation":"<p>The status.</p>"
-        },
         "type":{
           "shape":"TargetGroupType",
           "documentation":"<p>The target group type.</p>"
+        },
+        "config":{
+          "shape":"TargetGroupConfig",
+          "documentation":"<p>The target group configuration.</p>"
+        },
+        "status":{
+          "shape":"TargetGroupStatus",
+          "documentation":"<p>The status.</p>"
         }
       }
     },
@@ -6549,14 +7051,14 @@
         "reason"
       ],
       "members":{
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The fields that failed validation.</p>"
-        },
         "message":{"shape":"String"},
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>The reason.</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>The fields that failed validation.</p>"
         }
       },
       "documentation":"<p>The input does not satisfy the constraints specified by an Amazon Web Services service.</p>",
@@ -6569,17 +7071,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"String",
-          "documentation":"<p>Additional information about why the validation failed.</p>"
-        },
         "name":{
           "shape":"String",
           "documentation":"<p>The name of the validation exception.</p>"
+        },
+        "message":{
+          "shape":"String",
+          "documentation":"<p>Additional information about why the validation failed.</p>"
         }
       },
       "documentation":"<p>Describes a validation failure.</p>"
@@ -6597,23 +7099,31 @@
         "other"
       ]
     },
+    "VerificationStatus":{
+      "type":"string",
+      "enum":[
+        "VERIFIED",
+        "PENDING",
+        "VERIFICATION_TIMED_OUT"
+      ]
+    },
     "VpcEndpointId":{
       "type":"string",
       "max":22,
       "min":22,
-      "pattern":"^vpce-[0-9a-f]{17}$"
+      "pattern":"vpce-[0-9a-f]{17}"
     },
     "VpcEndpointOwner":{
       "type":"string",
       "max":12,
       "min":12,
-      "pattern":"^\\d{12}$"
+      "pattern":"\\d{12}"
     },
     "VpcId":{
       "type":"string",
       "max":50,
       "min":5,
-      "pattern":"^vpc-(([0-9a-z]{8})|([0-9a-z]{17}))$"
+      "pattern":"vpc-(([0-9a-z]{8})|([0-9a-z]{17}))"
     },
     "WeightedTargetGroup":{
       "type":"structure",
@@ -6640,7 +7150,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:\\d{12}?:[^/].{0,1023}$"
+      "pattern":"arn:[a-z0-9][-.a-z0-9]{0,62}:[a-z0-9][-.a-z0-9]{0,62}:([a-z0-9][-.a-z0-9]{0,62})?:\\d{12}?:[^/].{0,1023}"
     }
   },
   "documentation":"<p>Amazon VPC Lattice is a fully managed application networking service that you use to connect, secure, and monitor all of your services across multiple accounts and virtual private clouds (VPCs). Amazon VPC Lattice interconnects your microservices and legacy services within a logical boundary, so that you can discover and manage them more efficiently. For more information, see the <a href=\"https://docs.aws.amazon.com/vpc-lattice/latest/ug/\">Amazon VPC Lattice User Guide</a> </p>"
diff -pruN 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/waiters-2.json 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/vpc-lattice/2022-11-30/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/vpc-lattice/2022-11-30/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/waf/2015-08-24/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/waf/2015-08-24/service-2.json 2.31.35-1/awscli/botocore/data/waf/2015-08-24/service-2.json
--- 2.23.6-1/awscli/botocore/data/waf/2015-08-24/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/waf/2015-08-24/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2025,8 +2025,7 @@
     },
     "DeleteLoggingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePermissionPolicyRequest":{
       "type":"structure",
@@ -2040,8 +2039,7 @@
     },
     "DeletePermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRateBasedRuleRequest":{
       "type":"structure",
@@ -2680,8 +2678,7 @@
     },
     "GetChangeTokenRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetChangeTokenResponse":{
       "type":"structure",
@@ -3838,8 +3835,7 @@
     },
     "PutPermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RateBasedRule":{
       "type":"structure",
@@ -4546,8 +4542,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4605,8 +4600,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateByteMatchSetRequest":{
       "type":"structure",
@@ -5029,8 +5023,7 @@
     },
     "WAFInvalidAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation failed because you tried to create, update, or delete an object by using an invalid account identifier.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/waf-regional/2016-11-28/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/waf-regional/2016-11-28/service-2.json 2.31.35-1/awscli/botocore/data/waf-regional/2016-11-28/service-2.json
--- 2.23.6-1/awscli/botocore/data/waf-regional/2016-11-28/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/waf-regional/2016-11-28/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1440,8 +1440,7 @@
     },
     "AssociateWebACLResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ByteMatchSet":{
       "type":"structure",
@@ -2113,8 +2112,7 @@
     },
     "DeleteLoggingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePermissionPolicyRequest":{
       "type":"structure",
@@ -2128,8 +2126,7 @@
     },
     "DeletePermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRateBasedRuleRequest":{
       "type":"structure",
@@ -2381,8 +2378,7 @@
     },
     "DisassociateWebACLResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ErrorReason":{"type":"string"},
     "ExcludedRule":{
@@ -2783,8 +2779,7 @@
     },
     "GetChangeTokenRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetChangeTokenResponse":{
       "type":"structure",
@@ -3983,8 +3978,7 @@
     },
     "PutPermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RateBasedRule":{
       "type":"structure",
@@ -4702,8 +4696,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -4761,8 +4754,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateByteMatchSetRequest":{
       "type":"structure",
@@ -5185,8 +5177,7 @@
     },
     "WAFInvalidAccountException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation failed because you tried to create, update, or delete an object by using an invalid account identifier.</p>",
       "exception":true
     },
diff -pruN 2.23.6-1/awscli/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/wafv2/2019-07-29/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/wafv2/2019-07-29/service-2.json 2.31.35-1/awscli/botocore/data/wafv2/2019-07-29/service-2.json
--- 2.23.6-1/awscli/botocore/data/wafv2/2019-07-29/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/wafv2/2019-07-29/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -28,9 +28,10 @@
         {"shape":"WAFInvalidParameterException"},
         {"shape":"WAFNonexistentItemException"},
         {"shape":"WAFUnavailableEntityException"},
-        {"shape":"WAFInvalidOperationException"}
+        {"shape":"WAFInvalidOperationException"},
+        {"shape":"WAFLimitsExceededException"}
       ],
-      "documentation":"<p>Associates a web ACL with a regional application resource, to protect the resource. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To associate a web ACL, in the CloudFront call <code>UpdateDistribution</code>, set the web ACL ID to the Amazon Resource Name (ARN) of the web ACL. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront Developer Guide</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-AssociateWebACL\">Permissions for AssociateWebACL</a> in the <i>WAF Developer Guide</i>. </p> <p> <b>Temporary inconsistencies during updates</b> </p> <p>When you create or change a web ACL or other WAF resources, the changes take a small amount of time to propagate to all areas where the resources are stored. The propagation time can be from a few seconds to a number of minutes. </p> <p>The following are examples of the temporary inconsistencies that you might notice during change propagation: </p> <ul> <li> <p>After you create a web ACL, if you try to associate it with a resource, you might get an exception indicating that the web ACL is unavailable. </p> </li> <li> <p>After you add a rule group to a web ACL, the new rule group rules might be in effect in one area where the web ACL is used and not in another.</p> </li> <li> <p>After you change a rule action setting, you might see the old action in some places and the new action in others. </p> </li> <li> <p>After you add an IP address to an IP set that is in use in a blocking rule, the new address might be blocked in one area while still allowed in another.</p> </li> </ul>"
+      "documentation":"<p>Associates a web ACL with a resource, to protect the resource. </p> <p>Use this for all resource types except for Amazon CloudFront distributions. For Amazon CloudFront, call <code>UpdateDistribution</code> for the distribution and provide the Amazon Resource Name (ARN) of the web ACL in the web ACL ID. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront Developer Guide</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-AssociateWebACL\">Permissions for AssociateWebACL</a> in the <i>WAF Developer Guide</i>. </p> <p> <b>Temporary inconsistencies during updates</b> </p> <p>When you create or change a web ACL or other WAF resources, the changes take a small amount of time to propagate to all areas where the resources are stored. The propagation time can be from a few seconds to a number of minutes. </p> <p>The following are examples of the temporary inconsistencies that you might notice during change propagation: </p> <ul> <li> <p>After you create a web ACL, if you try to associate it with a resource, you might get an exception indicating that the web ACL is unavailable. </p> </li> <li> <p>After you add a rule group to a web ACL, the new rule group rules might be in effect in one area where the web ACL is used and not in another.</p> </li> <li> <p>After you change a rule action setting, you might see the old action in some places and the new action in others. </p> </li> <li> <p>After you add an IP address to an IP set that is in use in a blocking rule, the new address might be blocked in one area while still allowed in another.</p> </li> </ul>"
     },
     "CheckCapacity":{
       "name":"CheckCapacity",
@@ -156,7 +157,7 @@
         {"shape":"WAFConfigurationWarningException"},
         {"shape":"WAFExpiredManagedRuleGroupVersionException"}
       ],
-      "documentation":"<p>Creates a <a>WebACL</a> per the specifications provided.</p> <p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p>"
+      "documentation":"<p>Creates a <a>WebACL</a> per the specifications provided.</p> <p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resource types include Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, App Runner service, Amplify application, and Amazon Web Services Verified Access instance. </p>"
     },
     "DeleteAPIKey":{
       "name":"DeleteAPIKey",
@@ -302,7 +303,7 @@
         {"shape":"WAFTagOperationInternalErrorException"},
         {"shape":"WAFInvalidOperationException"}
       ],
-      "documentation":"<p>Deletes the specified <a>WebACL</a>. </p> <p>You can only use this if <code>ManagedByFirewallManager</code> is false in the web ACL. </p> <note> <p>Before deleting any web ACL, first disassociate it from all resources.</p> <ul> <li> <p>To retrieve a list of the resources that are associated with a web ACL, use the following calls:</p> <ul> <li> <p>For regional resources, call <a>ListResourcesForWebACL</a>.</p> </li> <li> <p>For Amazon CloudFront distributions, use the CloudFront call <code>ListDistributionsByWebACLId</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html\">ListDistributionsByWebACLId</a> in the <i>Amazon CloudFront API Reference</i>. </p> </li> </ul> </li> <li> <p>To disassociate a resource from a web ACL, use the following calls:</p> <ul> <li> <p>For regional resources, call <a>DisassociateWebACL</a>.</p> </li> <li> <p>For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call <code>UpdateDistribution</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront API Reference</i>. </p> </li> </ul> </li> </ul> </note>"
+      "documentation":"<p>Deletes the specified <a>WebACL</a>. </p> <p>You can only use this if <code>ManagedByFirewallManager</code> is false in the web ACL. </p> <note> <p>Before deleting any web ACL, first disassociate it from all resources.</p> <ul> <li> <p>To retrieve a list of the resources that are associated with a web ACL, use the following calls:</p> <ul> <li> <p>For Amazon CloudFront distributions, use the CloudFront call <code>ListDistributionsByWebACLId</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html\">ListDistributionsByWebACLId</a> in the <i>Amazon CloudFront API Reference</i>. </p> </li> <li> <p>For all other resources, call <a>ListResourcesForWebACL</a>.</p> </li> </ul> </li> <li> <p>To disassociate a resource from a web ACL, use the following calls:</p> <ul> <li> <p>For Amazon CloudFront distributions, provide an empty web ACL ID in the CloudFront call <code>UpdateDistribution</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront API Reference</i>. </p> </li> <li> <p>For all other resources, call <a>DisassociateWebACL</a>.</p> </li> </ul> </li> </ul> </note>"
     },
     "DescribeAllManagedProducts":{
       "name":"DescribeAllManagedProducts",
@@ -366,7 +367,7 @@
         {"shape":"WAFNonexistentItemException"},
         {"shape":"WAFInvalidOperationException"}
       ],
-      "documentation":"<p>Disassociates the specified regional application resource from any existing web ACL association. A resource can have at most one web ACL association. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>For Amazon CloudFront, don't use this call. Instead, use your CloudFront distribution configuration. To disassociate a web ACL, provide an empty web ACL ID in the CloudFront call <code>UpdateDistribution</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront API Reference</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-DisassociateWebACL\">Permissions for DisassociateWebACL</a> in the <i>WAF Developer Guide</i>.</p>"
+      "documentation":"<p>Disassociates the specified resource from its web ACL association, if it has one. </p> <p>Use this for all resource types except for Amazon CloudFront distributions. For Amazon CloudFront, call <code>UpdateDistribution</code> for the distribution and provide an empty web ACL ID. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a> in the <i>Amazon CloudFront API Reference</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-DisassociateWebACL\">Permissions for DisassociateWebACL</a> in the <i>WAF Developer Guide</i>.</p>"
     },
     "GenerateMobileSdkReleaseUrl":{
       "name":"GenerateMobileSdkReleaseUrl",
@@ -713,7 +714,7 @@
         {"shape":"WAFInvalidParameterException"},
         {"shape":"WAFInvalidOperationException"}
       ],
-      "documentation":"<p>Retrieves an array of the Amazon Resource Names (ARNs) for the regional resources that are associated with the specified web ACL. </p> <p>For Amazon CloudFront, don't use this call. Instead, use the CloudFront call <code>ListDistributionsByWebACLId</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html\">ListDistributionsByWebACLId</a> in the <i>Amazon CloudFront API Reference</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-ListResourcesForWebACL\">Permissions for ListResourcesForWebACL</a> in the <i>WAF Developer Guide</i>.</p>"
+      "documentation":"<p>Retrieves an array of the Amazon Resource Names (ARNs) for the resources that are associated with the specified web ACL. </p> <p>For Amazon CloudFront, don't use this call. Instead, use the CloudFront call <code>ListDistributionsByWebACLId</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html\">ListDistributionsByWebACLId</a> in the <i>Amazon CloudFront API Reference</i>. </p> <p> <b>Required permissions for customer-managed IAM policies</b> </p> <p>This call requires permissions that are specific to the protected resource type. For details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/security_iam_service-with-iam.html#security_iam_action-ListResourcesForWebACL\">Permissions for ListResourcesForWebACL</a> in the <i>WAF Developer Guide</i>.</p>"
     },
     "ListRuleGroups":{
       "name":"ListRuleGroups",
@@ -781,7 +782,7 @@
         {"shape":"WAFLimitsExceededException"},
         {"shape":"WAFLogDestinationPermissionIssueException"}
       ],
-      "documentation":"<p>Enables the specified <a>LoggingConfiguration</a>, to start logging from a web ACL, according to the configuration provided. </p> <note> <p>This operation completely replaces any mutable specifications that you already have for a logging configuration with the ones that you provide to this call. </p> <p>To modify an existing logging configuration, do the following: </p> <ol> <li> <p>Retrieve it by calling <a>GetLoggingConfiguration</a> </p> </li> <li> <p>Update its settings as needed</p> </li> <li> <p>Provide the complete logging configuration specification to this call</p> </li> </ol> </note> <note> <p>You can define one logging destination per web ACL.</p> </note> <p>You can access information about the traffic that WAF inspects using the following steps:</p> <ol> <li> <p>Create your logging destination. You can use an Amazon CloudWatch Logs log group, an Amazon Simple Storage Service (Amazon S3) bucket, or an Amazon Kinesis Data Firehose. </p> <p>The name that you give the destination must start with <code>aws-waf-logs-</code>. Depending on the type of destination, you might need to configure additional settings or permissions. </p> <p>For configuration requirements and pricing information for each destination type, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> </li> <li> <p>Associate your logging destination to your web ACL using a <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you successfully enable logging using a <code>PutLoggingConfiguration</code> request, WAF creates an additional role or policy that is required to write logs to the logging destination. For an Amazon CloudWatch Logs log group, WAF creates a resource policy on the log group. For an Amazon S3 bucket, WAF creates a bucket policy. For an Amazon Kinesis Data Firehose, WAF creates a service-linked role.</p> <p>For additional information about web ACL logging, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic information</a> in the <i>WAF Developer Guide</i>.</p>"
+      "documentation":"<p>Enables the specified <a>LoggingConfiguration</a>, to start logging from a web ACL, according to the configuration provided. </p> <p>If you configure data protection for the web ACL, the protection applies to the data that WAF sends to the logs. </p> <note> <p>This operation completely replaces any mutable specifications that you already have for a logging configuration with the ones that you provide to this call. </p> <p>To modify an existing logging configuration, do the following: </p> <ol> <li> <p>Retrieve it by calling <a>GetLoggingConfiguration</a> </p> </li> <li> <p>Update its settings as needed</p> </li> <li> <p>Provide the complete logging configuration specification to this call</p> </li> </ol> </note> <note> <p>You can define one logging destination per web ACL.</p> </note> <p>You can access information about the traffic that WAF inspects using the following steps:</p> <ol> <li> <p>Create your logging destination. You can use an Amazon CloudWatch Logs log group, an Amazon Simple Storage Service (Amazon S3) bucket, or an Amazon Kinesis Data Firehose. </p> <p>The name that you give the destination must start with <code>aws-waf-logs-</code>. Depending on the type of destination, you might need to configure additional settings or permissions. </p> <p>For configuration requirements and pricing information for each destination type, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> </li> <li> <p>Associate your logging destination to your web ACL using a <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you successfully enable logging using a <code>PutLoggingConfiguration</code> request, WAF creates an additional role or policy that is required to write logs to the logging destination. For an Amazon CloudWatch Logs log group, WAF creates a resource policy on the log group. For an Amazon S3 bucket, WAF creates a bucket policy. For an Amazon Kinesis Data Firehose, WAF creates a service-linked role.</p> <p>For additional information about web ACL logging, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic information</a> in the <i>WAF Developer Guide</i>.</p>"
     },
     "PutManagedRuleSetVersions":{
       "name":"PutManagedRuleSetVersions",
@@ -952,7 +953,7 @@
         {"shape":"WAFExpiredManagedRuleGroupVersionException"},
         {"shape":"WAFConfigurationWarningException"}
       ],
-      "documentation":"<p>Updates the specified <a>WebACL</a>. While updating a web ACL, WAF provides continuous coverage to the resources that you have associated with the web ACL. </p> <note> <p>This operation completely replaces the mutable specifications that you already have for the web ACL with the ones that you provide to this call. </p> <p>To modify a web ACL, do the following: </p> <ol> <li> <p>Retrieve it by calling <a>GetWebACL</a> </p> </li> <li> <p>Update its settings as needed</p> </li> <li> <p>Provide the complete web ACL specification to this call</p> </li> </ol> </note> <p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p> <b>Temporary inconsistencies during updates</b> </p> <p>When you create or change a web ACL or other WAF resources, the changes take a small amount of time to propagate to all areas where the resources are stored. The propagation time can be from a few seconds to a number of minutes. </p> <p>The following are examples of the temporary inconsistencies that you might notice during change propagation: </p> <ul> <li> <p>After you create a web ACL, if you try to associate it with a resource, you might get an exception indicating that the web ACL is unavailable. </p> </li> <li> <p>After you add a rule group to a web ACL, the new rule group rules might be in effect in one area where the web ACL is used and not in another.</p> </li> <li> <p>After you change a rule action setting, you might see the old action in some places and the new action in others. </p> </li> <li> <p>After you add an IP address to an IP set that is in use in a blocking rule, the new address might be blocked in one area while still allowed in another.</p> </li> </ul>"
+      "documentation":"<p>Updates the specified <a>WebACL</a>. While updating a web ACL, WAF provides continuous coverage to the resources that you have associated with the web ACL. </p> <note> <p>This operation completely replaces the mutable specifications that you already have for the web ACL with the ones that you provide to this call. </p> <p>To modify a web ACL, do the following: </p> <ol> <li> <p>Retrieve it by calling <a>GetWebACL</a> </p> </li> <li> <p>Update its settings as needed</p> </li> <li> <p>Provide the complete web ACL specification to this call</p> </li> </ol> </note> <p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resource types include Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, App Runner service, Amplify application, and Amazon Web Services Verified Access instance. </p> <p> <b>Temporary inconsistencies during updates</b> </p> <p>When you create or change a web ACL or other WAF resources, the changes take a small amount of time to propagate to all areas where the resources are stored. The propagation time can be from a few seconds to a number of minutes. </p> <p>The following are examples of the temporary inconsistencies that you might notice during change propagation: </p> <ul> <li> <p>After you create a web ACL, if you try to associate it with a resource, you might get an exception indicating that the web ACL is unavailable. </p> </li> <li> <p>After you add a rule group to a web ACL, the new rule group rules might be in effect in one area where the web ACL is used and not in another.</p> </li> <li> <p>After you change a rule action setting, you might see the old action in some places and the new action in others. </p> </li> <li> <p>After you add an IP address to an IP set that is in use in a blocking rule, the new address might be blocked in one area while still allowed in another.</p> </li> </ul>"
     }
   },
   "shapes":{
@@ -997,6 +998,11 @@
       "type":"integer",
       "min":0
     },
+    "ASN":{
+      "type":"long",
+      "max":4294967295,
+      "min":0
+    },
     "AWSManagedRulesACFPRuleSet":{
       "type":"structure",
       "required":[
@@ -1026,7 +1032,7 @@
           "documentation":"<p>Allow the use of regular expressions in the registration page path and the account creation path. </p>"
         }
       },
-      "documentation":"<p>Details for your use of the account creation fraud prevention managed rule group, <code>AWSManagedRulesACFPRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p>"
+      "documentation":"<p>Details for your use of the account creation fraud prevention managed rule group, <code>AWSManagedRulesACFPRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p> <p>For additional information about this and the other intelligent threat mitigation rule groups, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-managed-protections\">Intelligent threat mitigation in WAF</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-list\">Amazon Web Services Managed Rules rule groups list</a> in the <i>WAF Developer Guide</i>. </p>"
     },
     "AWSManagedRulesATPRuleSet":{
       "type":"structure",
@@ -1049,7 +1055,22 @@
           "documentation":"<p>Allow the use of regular expressions in the login page path. </p>"
         }
       },
-      "documentation":"<p>Details for your use of the account takeover prevention managed rule group, <code>AWSManagedRulesATPRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p>"
+      "documentation":"<p>Details for your use of the account takeover prevention managed rule group, <code>AWSManagedRulesATPRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p> <p>For additional information about this and the other intelligent threat mitigation rule groups, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-managed-protections\">Intelligent threat mitigation in WAF</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-list\">Amazon Web Services Managed Rules rule groups list</a> in the <i>WAF Developer Guide</i>. </p>"
+    },
+    "AWSManagedRulesAntiDDoSRuleSet":{
+      "type":"structure",
+      "required":["ClientSideActionConfig"],
+      "members":{
+        "ClientSideActionConfig":{
+          "shape":"ClientSideActionConfig",
+          "documentation":"<p>Configures the request handling that's applied by the managed rule group rules <code>ChallengeAllDuringEvent</code> and <code>ChallengeDDoSRequests</code> during a distributed denial of service (DDoS) attack.</p>"
+        },
+        "SensitivityToBlock":{
+          "shape":"SensitivityToAct",
+          "documentation":"<p>The sensitivity that the rule group rule <code>DDoSRequests</code> uses when matching against the DDoS suspicion labeling on a request. The managed rule group adds the labeling during DDoS events, before the <code>DDoSRequests</code> rule runs. </p> <p>The higher the sensitivity, the more levels of labeling that the rule matches: </p> <ul> <li> <p>Low sensitivity is less sensitive, causing the rule to match only on the most likely participants in an attack, which are the requests with the high suspicion label <code>awswaf:managed:aws:anti-ddos:high-suspicion-ddos-request</code>.</p> </li> <li> <p>Medium sensitivity causes the rule to match on the medium and high suspicion labels.</p> </li> <li> <p>High sensitivity causes the rule to match on all of the suspicion labels: low, medium, and high.</p> </li> </ul> <p>Default: <code>LOW</code> </p>"
+        }
+      },
+      "documentation":"<p>Configures the use of the anti-DDoS managed rule group, <code>AWSManagedRulesAntiDDoSRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p> <p>The configuration that you provide here determines whether and how the rules in the rule group are used. </p> <p>For additional information about this and the other intelligent threat mitigation rule groups, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-managed-protections\">Intelligent threat mitigation in WAF</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-list\">Amazon Web Services Managed Rules rule groups list</a> in the <i>WAF Developer Guide</i>. </p>"
     },
     "AWSManagedRulesBotControlRuleSet":{
       "type":"structure",
@@ -1064,7 +1085,7 @@
           "documentation":"<p>Applies only to the targeted inspection level. </p> <p>Determines whether to use machine learning (ML) to analyze your web traffic for bot-related activity. Machine learning is required for the Bot Control rules <code>TGT_ML_CoordinatedActivityLow</code> and <code>TGT_ML_CoordinatedActivityMedium</code>, which inspect for anomalous behavior that might indicate distributed, coordinated bot activity.</p> <p>For more information about this choice, see the listing for these rules in the table at <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-bot.html#aws-managed-rule-groups-bot-rules\">Bot Control rules listing</a> in the <i>WAF Developer Guide</i>.</p> <p>Default: <code>TRUE</code> </p>"
         }
       },
-      "documentation":"<p>Details for your use of the Bot Control managed rule group, <code>AWSManagedRulesBotControlRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p>"
+      "documentation":"<p>Details for your use of the Bot Control managed rule group, <code>AWSManagedRulesBotControlRuleSet</code>. This configuration is used in <code>ManagedRuleGroupConfig</code>. </p> <p>For additional information about this and the other intelligent threat mitigation rule groups, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-managed-protections\">Intelligent threat mitigation in WAF</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-list\">Amazon Web Services Managed Rules rule groups list</a> in the <i>WAF Developer Guide</i>. </p>"
     },
     "Action":{"type":"string"},
     "ActionCondition":{
@@ -1106,14 +1127,12 @@
     },
     "All":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Inspect all of the elements that WAF has parsed and extracted from the web request component that you've identified in your <a>FieldToMatch</a> specifications. </p> <p>This is used in the <a>FieldToMatch</a> specification for some web request component types. </p> <p>JSON specification: <code>\"All\": {}</code> </p>"
     },
     "AllQueryArguments":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Inspect all query arguments of the web request. </p> <p>This is used in the <a>FieldToMatch</a> specification for some web request component types. </p> <p>JSON specification: <code>\"AllQueryArguments\": {}</code> </p>"
     },
     "AllowAction":{
@@ -1137,6 +1156,57 @@
       },
       "documentation":"<p>A logical rule statement used to combine other rule statements with AND logic. You provide more than one <a>Statement</a> within the <code>AndStatement</code>. </p>"
     },
+    "ApplicationAttribute":{
+      "type":"structure",
+      "members":{
+        "Name":{
+          "shape":"AttributeName",
+          "documentation":"<p>Specifies the attribute name.</p>"
+        },
+        "Values":{
+          "shape":"AttributeValues",
+          "documentation":"<p>Specifies the attribute value.</p>"
+        }
+      },
+      "documentation":"<p>Application details defined during the web ACL creation process. Application attributes help WAF give recommendations for protection packs.</p>"
+    },
+    "ApplicationAttributes":{
+      "type":"list",
+      "member":{"shape":"ApplicationAttribute"},
+      "max":10,
+      "min":1
+    },
+    "ApplicationConfig":{
+      "type":"structure",
+      "members":{
+        "Attributes":{
+          "shape":"ApplicationAttributes",
+          "documentation":"<p>Contains the attribute name and a list of values for that attribute.</p>"
+        }
+      },
+      "documentation":"<p>A list of <code>ApplicationAttribute</code>s that contains information about the application.</p>"
+    },
+    "AsnList":{
+      "type":"list",
+      "member":{"shape":"ASN"},
+      "max":100,
+      "min":1
+    },
+    "AsnMatchStatement":{
+      "type":"structure",
+      "required":["AsnList"],
+      "members":{
+        "AsnList":{
+          "shape":"AsnList",
+          "documentation":"<p>Contains one or more Autonomous System Numbers (ASNs). ASNs are unique identifiers assigned to large internet networks managed by organizations such as internet service providers, enterprises, universities, or government agencies. </p>"
+        },
+        "ForwardedIPConfig":{
+          "shape":"ForwardedIPConfig",
+          "documentation":"<p>The configuration for inspecting IP addresses to match against an ASN in an HTTP header that you specify, instead of using the IP address that's reported by the web request origin. Commonly, this is the X-Forwarded-For (XFF) header, but you can specify any header name. </p>"
+        }
+      },
+      "documentation":"<p>A rule statement that inspects web traffic based on the Autonomous System Number (ASN) associated with the request's IP address.</p> <p>For additional details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-asn-match.html\">ASN match rule statement</a> in the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html\">WAF Developer Guide</a>. </p>"
+    },
     "AssociateWebACLRequest":{
       "type":"structure",
       "required":[
@@ -1150,14 +1220,13 @@
         },
         "ResourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to associate with the web ACL. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to associate with the web ACL. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> <li> <p>For an Amplify application: <code>arn:<i>partition</i>:amplify:<i>region</i>:<i>account-id</i>:apps/<i>app-id</i> </code> </p> </li> </ul>"
         }
       }
     },
     "AssociateWebACLResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociatedResourceType":{
       "type":"string",
@@ -1179,6 +1248,23 @@
       },
       "documentation":"<p>Specifies custom configurations for the associations between the web ACL and protected resources. </p> <p>Use this to customize the maximum size of the request body that your protected resources forward to WAF for inspection. You can customize this setting for CloudFront, API Gateway, Amazon Cognito, App Runner, or Verified Access resources. The default setting is 16 KB (16,384 bytes). </p> <note> <p>You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see <a href=\"http://aws.amazon.com/waf/pricing/\">WAF Pricing</a>.</p> </note> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p>"
     },
+    "AttributeName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":"^[\\w\\-]+$"
+    },
+    "AttributeValue":{
+      "type":"string",
+      "max":64,
+      "min":1
+    },
+    "AttributeValues":{
+      "type":"list",
+      "member":{"shape":"AttributeValue"},
+      "max":50,
+      "min":1
+    },
     "BlockAction":{
       "type":"structure",
       "members":{
@@ -1194,7 +1280,7 @@
       "members":{
         "OversizeHandling":{
           "shape":"OversizeHandling",
-          "documentation":"<p>What WAF should do if the body is larger than WAF can inspect. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> </ul> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available body contents normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul> <p>You can combine the <code>MATCH</code> or <code>NO_MATCH</code> settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. </p> <p>Default: <code>CONTINUE</code> </p>"
+          "documentation":"<p>What WAF should do if the body is larger than WAF can inspect. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> <li> <p>For Amplify, use the CloudFront limit.</p> </li> </ul> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available body contents normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul> <p>You can combine the <code>MATCH</code> or <code>NO_MATCH</code> settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. </p> <p>Default: <code>CONTINUE</code> </p>"
         }
       },
       "documentation":"<p>Inspect the body of the web request. The body immediately follows the request headers.</p> <p>This is used to indicate the web request component to inspect, in the <a>FieldToMatch</a> specification. </p>"
@@ -1325,7 +1411,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Rules":{
           "shape":"Rules",
@@ -1342,6 +1428,36 @@
         }
       }
     },
+    "ClientSideAction":{
+      "type":"structure",
+      "required":["UsageOfAction"],
+      "members":{
+        "UsageOfAction":{
+          "shape":"UsageOfAction",
+          "documentation":"<p>Determines whether to use the <code>AWSManagedRulesAntiDDoSRuleSet</code> rules <code>ChallengeAllDuringEvent</code> and <code>ChallengeDDoSRequests</code> in the rule group evaluation and the related label <code>awswaf:managed:aws:anti-ddos:challengeable-request</code>. </p> <ul> <li> <p>If usage is enabled: </p> <ul> <li> <p>The managed rule group adds the label <code>awswaf:managed:aws:anti-ddos:challengeable-request</code> to any web request whose URL does <i>NOT</i> match the regular expressions provided in the <code>ClientSideAction</code> setting <code>ExemptUriRegularExpressions</code>. </p> </li> <li> <p>The two rules are evaluated against web requests for protected resources that are experiencing a DDoS attack. The two rules only apply their action to matching requests that have the label <code>awswaf:managed:aws:anti-ddos:challengeable-request</code>. </p> </li> </ul> </li> <li> <p>If usage is disabled: </p> <ul> <li> <p>The managed rule group doesn't add the label <code>awswaf:managed:aws:anti-ddos:challengeable-request</code> to any web requests. </p> </li> <li> <p>The two rules are not evaluated.</p> </li> <li> <p>None of the other <code>ClientSideAction</code> settings have any effect.</p> </li> </ul> </li> </ul> <note> <p>This setting only enables or disables the use of the two anti-DDOS rules <code>ChallengeAllDuringEvent</code> and <code>ChallengeDDoSRequests</code> in the anti-DDoS managed rule group. </p> <p>This setting doesn't alter the action setting in the two rules. To override the actions used by the rules <code>ChallengeAllDuringEvent</code> and <code>ChallengeDDoSRequests</code>, enable this setting, and then override the rule actions in the usual way, in your managed rule group configuration. </p> </note>"
+        },
+        "Sensitivity":{
+          "shape":"SensitivityToAct",
+          "documentation":"<p>The sensitivity that the rule group rule <code>ChallengeDDoSRequests</code> uses when matching against the DDoS suspicion labeling on a request. The managed rule group adds the labeling during DDoS events, before the <code>ChallengeDDoSRequests</code> rule runs. </p> <p>The higher the sensitivity, the more levels of labeling that the rule matches: </p> <ul> <li> <p>Low sensitivity is less sensitive, causing the rule to match only on the most likely participants in an attack, which are the requests with the high suspicion label <code>awswaf:managed:aws:anti-ddos:high-suspicion-ddos-request</code>.</p> </li> <li> <p>Medium sensitivity causes the rule to match on the medium and high suspicion labels.</p> </li> <li> <p>High sensitivity causes the rule to match on all of the suspicion labels: low, medium, and high.</p> </li> </ul> <p>Default: <code>HIGH</code> </p>"
+        },
+        "ExemptUriRegularExpressions":{
+          "shape":"RegularExpressionList",
+          "documentation":"<p>The regular expression to match against the web request URI, used to identify requests that can't handle a silent browser challenge. When the <code>ClientSideAction</code> setting <code>UsageOfAction</code> is enabled, the managed rule group uses this setting to determine which requests to label with <code>awswaf:managed:aws:anti-ddos:challengeable-request</code>. If <code>UsageOfAction</code> is disabled, this setting has no effect and the managed rule group doesn't add the label to any requests.</p> <p>The anti-DDoS managed rule group doesn't evaluate the rules <code>ChallengeDDoSRequests</code> or <code>ChallengeAllDuringEvent</code> for web requests whose URIs match this regex. This is true regardless of whether you override the rule action for either of the rules in your web ACL configuration. </p> <p>Amazon Web Services recommends using a regular expression. </p> <p>This setting is required if <code>UsageOfAction</code> is set to <code>ENABLED</code>. If required, you can provide between 1 and 5 regex objects in the array of settings. </p> <p>Amazon Web Services recommends starting with the following setting. Review and update it for your application's needs:</p> <p> <code>\\/api\\/|\\.(acc|avi|css|gif|jpe?g|js|mp[34]|ogg|otf|pdf|png|tiff?|ttf|webm|webp|woff2?)$</code> </p>"
+        }
+      },
+      "documentation":"<p>This is part of the <code>AWSManagedRulesAntiDDoSRuleSet</code> <code>ClientSideActionConfig</code> configuration in <code>ManagedRuleGroupConfig</code>.</p>"
+    },
+    "ClientSideActionConfig":{
+      "type":"structure",
+      "required":["Challenge"],
+      "members":{
+        "Challenge":{
+          "shape":"ClientSideAction",
+          "documentation":"<p>Configuration for the use of the <code>AWSManagedRulesAntiDDoSRuleSet</code> rules <code>ChallengeAllDuringEvent</code> and <code>ChallengeDDoSRequests</code>. </p> <note> <p>This setting isn't related to the configuration of the <code>Challenge</code> action itself. It only configures the use of the two anti-DDoS rules named here. </p> </note> <p>You can enable or disable the use of these rules, and you can configure how to use them when they are enabled. </p>"
+        }
+      },
+      "documentation":"<p>This is part of the configuration for the managed rules <code>AWSManagedRulesAntiDDoSRuleSet</code> in <code>ManagedRuleGroupConfig</code>.</p>"
+    },
     "ComparisonOperator":{
       "type":"string",
       "enum":[
@@ -1703,7 +1819,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "TokenDomains":{
           "shape":"APIKeyTokenDomains",
@@ -1735,7 +1851,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Description":{
           "shape":"EntityDescription",
@@ -1778,7 +1894,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Description":{
           "shape":"EntityDescription",
@@ -1818,7 +1934,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Capacity":{
           "shape":"CapacityUnit",
@@ -1870,7 +1986,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "DefaultAction":{
           "shape":"DefaultAction",
@@ -1888,6 +2004,10 @@
           "shape":"VisibilityConfig",
           "documentation":"<p>Defines and enables Amazon CloudWatch metrics and web request sample collection. </p>"
         },
+        "DataProtectionConfig":{
+          "shape":"DataProtectionConfig",
+          "documentation":"<p>Specifies data protection to apply to the web request data for the web ACL. This is a web ACL level data protection option. </p> <p>The data protection that you configure for the web ACL alters the data that's available for any other data collection activity, including your WAF logging destinations, web ACL request sampling, and Amazon Security Lake data collection and management. Your other option for data protection is in the logging configuration, which only affects logging. </p>"
+        },
         "Tags":{
           "shape":"TagList",
           "documentation":"<p>An array of key:value pairs to associate with the resource.</p>"
@@ -1911,6 +2031,14 @@
         "AssociationConfig":{
           "shape":"AssociationConfig",
           "documentation":"<p>Specifies custom configurations for the associations between the web ACL and protected resources. </p> <p>Use this to customize the maximum size of the request body that your protected resources forward to WAF for inspection. You can customize this setting for CloudFront, API Gateway, Amazon Cognito, App Runner, or Verified Access resources. The default setting is 16 KB (16,384 bytes). </p> <note> <p>You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see <a href=\"http://aws.amazon.com/waf/pricing/\">WAF Pricing</a>.</p> </note> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p>"
+        },
+        "OnSourceDDoSProtectionConfig":{
+          "shape":"OnSourceDDoSProtectionConfig",
+          "documentation":"<p>Specifies the type of DDoS protection to apply to web request data for a web ACL. For most scenarios, it is recommended to use the default protection level, <code>ACTIVE_UNDER_DDOS</code>. If a web ACL is associated with multiple Application Load Balancers, the changes you make to DDoS protection in that web ACL will apply to all associated Application Load Balancers.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>Configures the ability for the WAF console to store and retrieve application attributes during the web ACL creation process. Application attributes help WAF give recommendations for protection packs.</p>"
         }
       }
     },
@@ -2018,6 +2146,56 @@
       },
       "documentation":"<p>The response body to use in a custom response to a web request. This is referenced by key from <a>CustomResponse</a> <code>CustomResponseBodyKey</code>.</p>"
     },
+    "DataProtection":{
+      "type":"structure",
+      "required":[
+        "Field",
+        "Action"
+      ],
+      "members":{
+        "Field":{
+          "shape":"FieldToProtect",
+          "documentation":"<p>Specifies the field type and optional keys to apply the protection behavior to. </p>"
+        },
+        "Action":{
+          "shape":"DataProtectionAction",
+          "documentation":"<p>Specifies how to protect the field. WAF can apply a one-way hash to the field or hard code a string substitution. </p> <ul> <li> <p>One-way hash example: <code>ade099751dEXAMPLEHASH2ea9f3393f80dd5d3bEXAMPLEHASH966ae0d3cd5a1e</code> </p> </li> <li> <p>Substitution example: <code>REDACTED</code> </p> </li> </ul>"
+        },
+        "ExcludeRuleMatchDetails":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to also exclude any rule match details from the data protection you have enabled for a given field. WAF logs these details for non-terminating matching rules and for the terminating matching rule. For additional information, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields for web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> <p>Default: <code>FALSE</code> </p>"
+        },
+        "ExcludeRateBasedDetails":{
+          "shape":"Boolean",
+          "documentation":"<p>Specifies whether to also exclude any rate-based rule details from the data protection you have enabled for a given field. If you specify this exception, RateBasedDetails will show the value of the field. For additional information, see the log field <code>rateBasedRuleList</code> at <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields for web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> <p>Default: <code>FALSE</code> </p>"
+        }
+      },
+      "documentation":"<p>Specifies the protection behavior for a field type. This is part of the data protection configuration for a web ACL. </p>"
+    },
+    "DataProtectionAction":{
+      "type":"string",
+      "enum":[
+        "SUBSTITUTION",
+        "HASH"
+      ]
+    },
+    "DataProtectionConfig":{
+      "type":"structure",
+      "required":["DataProtections"],
+      "members":{
+        "DataProtections":{
+          "shape":"DataProtections",
+          "documentation":"<p>An array of data protection configurations for specific web request field types. This is defined for each web ACL. WAF applies the specified protection to all web requests that the web ACL inspects. </p>"
+        }
+      },
+      "documentation":"<p>Specifies data protection to apply to the web request data for the web ACL. This is a web ACL level data protection option. </p> <p>The data protection that you configure for the web ACL alters the data that's available for any other data collection activity, including your WAF logging destinations, web ACL request sampling, and Amazon Security Lake data collection and management. Your other option for data protection is in the logging configuration, which only affects logging. </p> <p>This is part of the data protection configuration for a web ACL. </p>"
+    },
+    "DataProtections":{
+      "type":"list",
+      "member":{"shape":"DataProtection"},
+      "max":26,
+      "min":1
+    },
     "DefaultAction":{
       "type":"structure",
       "members":{
@@ -2041,7 +2219,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "APIKey":{
           "shape":"APIKey",
@@ -2051,8 +2229,7 @@
     },
     "DeleteAPIKeyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteFirewallManagerRuleGroupsRequest":{
       "type":"structure",
@@ -2095,7 +2272,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2109,8 +2286,7 @@
     },
     "DeleteIPSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteLoggingConfigurationRequest":{
       "type":"structure",
@@ -2126,14 +2302,13 @@
         },
         "LogScope":{
           "shape":"LogScope",
-          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
+          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>The log scope <code>CLOUDWATCH_TELEMETRY_RULE_MANAGED</code> indicates a configuration that is managed through Amazon CloudWatch Logs for telemetry data collection and analysis. For information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">What is Amazon CloudWatch Logs ?</a> in the <i>Amazon CloudWatch Logs user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
         }
       }
     },
     "DeleteLoggingConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeletePermissionPolicyRequest":{
       "type":"structure",
@@ -2147,8 +2322,7 @@
     },
     "DeletePermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRegexPatternSetRequest":{
       "type":"structure",
@@ -2165,7 +2339,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2179,8 +2353,7 @@
     },
     "DeleteRegexPatternSetResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRuleGroupRequest":{
       "type":"structure",
@@ -2197,7 +2370,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2211,8 +2384,7 @@
     },
     "DeleteRuleGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWebACLRequest":{
       "type":"structure",
@@ -2229,7 +2401,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2243,8 +2415,7 @@
     },
     "DeleteWebACLResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAllManagedProductsRequest":{
       "type":"structure",
@@ -2252,7 +2423,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         }
       }
     },
@@ -2278,7 +2449,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         }
       }
     },
@@ -2309,7 +2480,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "VersionName":{
           "shape":"VersionKeyString",
@@ -2356,14 +2527,13 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to disassociate from the web ACL. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource to disassociate from the web ACL. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> <li> <p>For an Amplify application: <code>arn:<i>partition</i>:amplify:<i>region</i>:<i>account-id</i>:apps/<i>app-id</i> </code> </p> </li> </ul>"
         }
       }
     },
     "DisassociateWebACLResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DownloadUrl":{"type":"string"},
     "EmailField":{
@@ -2473,7 +2643,7 @@
         },
         "Body":{
           "shape":"Body",
-          "documentation":"<p>Inspect the request body as plain text. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> </ul> <p>For information about how to handle oversized request bodies, see the <code>Body</code> object configuration. </p>"
+          "documentation":"<p>Inspect the request body as plain text. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> <li> <p>For Amplify, use the CloudFront limit.</p> </li> </ul> <p>For information about how to handle oversized request bodies, see the <code>Body</code> object configuration. </p>"
         },
         "Method":{
           "shape":"Method",
@@ -2481,7 +2651,7 @@
         },
         "JsonBody":{
           "shape":"JsonBody",
-          "documentation":"<p>Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> </ul> <p>For information about how to handle oversized request bodies, see the <code>JsonBody</code> object configuration. </p>"
+          "documentation":"<p>Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> <li> <p>For Amplify, use the CloudFront limit.</p> </li> </ul> <p>For information about how to handle oversized request bodies, see the <code>JsonBody</code> object configuration. </p>"
         },
         "Headers":{
           "shape":"Headers",
@@ -2498,9 +2668,17 @@
         "JA3Fingerprint":{
           "shape":"JA3Fingerprint",
           "documentation":"<p>Available for use with Amazon CloudFront distributions and Application Load Balancers. Match against the request's JA3 fingerprint. The JA3 fingerprint is a 32-character hash derived from the TLS Client Hello of an incoming request. This fingerprint serves as a unique identifier for the client's TLS configuration. WAF calculates and logs this fingerprint for each request that has enough TLS Client Hello information for the calculation. Almost all web requests include this information.</p> <note> <p>You can use this choice only with a string match <code>ByteMatchStatement</code> with the <code>PositionalConstraint</code> set to <code>EXACTLY</code>. </p> </note> <p>You can obtain the JA3 fingerprint for client requests from the web ACL logs. If WAF is able to calculate the fingerprint, it includes it in the logs. For information about the logging fields, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields</a> in the <i>WAF Developer Guide</i>. </p> <p>Provide the JA3 fingerprint string from the logs in your string match statement specification, to match with any future requests that have the same TLS configuration.</p>"
+        },
+        "JA4Fingerprint":{
+          "shape":"JA4Fingerprint",
+          "documentation":"<p>Available for use with Amazon CloudFront distributions and Application Load Balancers. Match against the request's JA4 fingerprint. The JA4 fingerprint is a 36-character hash derived from the TLS Client Hello of an incoming request. This fingerprint serves as a unique identifier for the client's TLS configuration. WAF calculates and logs this fingerprint for each request that has enough TLS Client Hello information for the calculation. Almost all web requests include this information.</p> <note> <p>You can use this choice only with a string match <code>ByteMatchStatement</code> with the <code>PositionalConstraint</code> set to <code>EXACTLY</code>. </p> </note> <p>You can obtain the JA4 fingerprint for client requests from the web ACL logs. If WAF is able to calculate the fingerprint, it includes it in the logs. For information about the logging fields, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields</a> in the <i>WAF Developer Guide</i>. </p> <p>Provide the JA4 fingerprint string from the logs in your string match statement specification, to match with any future requests that have the same TLS configuration.</p>"
+        },
+        "UriFragment":{
+          "shape":"UriFragment",
+          "documentation":"<p>Inspect fragments of the request URI. You must configure scope and pattern matching filters in the <code>UriFragment</code> object, to define the fragment of a URI that WAF inspects. </p> <p>Only the first 8 KB (8192 bytes) of a request's URI fragments and only the first 200 URI fragments are forwarded to WAF for inspection by the underlying host service. You must configure how to handle any oversize URI fragment content in the <code>UriFragment</code> object. WAF applies the pattern matching filters to the cookies that it receives from the underlying host service. </p>"
         }
       },
-      "documentation":"<p>Specifies a web request component to be used in a rule match statement or in a logging configuration. </p> <ul> <li> <p>In a rule statement, this is the part of the web request that you want WAF to inspect. Include the single <code>FieldToMatch</code> type that you want to inspect, with additional specifications as needed, according to the type. You specify a single request component in <code>FieldToMatch</code> for each rule statement that requires it. To inspect more than one component of the web request, create a separate rule statement for each component.</p> <p>Example JSON for a <code>QueryString</code> field to match: </p> <p> <code> \"FieldToMatch\": { \"QueryString\": {} }</code> </p> <p>Example JSON for a <code>Method</code> field to match specification:</p> <p> <code> \"FieldToMatch\": { \"Method\": { \"Name\": \"DELETE\" } }</code> </p> </li> <li> <p>In a logging configuration, this is used in the <code>RedactedFields</code> property to specify a field to redact from the logging records. For this use case, note the following: </p> <ul> <li> <p>Even though all <code>FieldToMatch</code> settings are available, the only valid settings for field redaction are <code>UriPath</code>, <code>QueryString</code>, <code>SingleHeader</code>, and <code>Method</code>.</p> </li> <li> <p>In this documentation, the descriptions of the individual fields talk about specifying the web request component to inspect, but for field redaction, you are specifying the component type to redact from the logs. </p> </li> <li> <p>If you have request sampling enabled, the redacted fields configuration for logging has no impact on sampling. The only way to exclude fields from request sampling is by disabling sampling in the web ACL visibility configuration. </p> </li> </ul> </li> </ul>"
+      "documentation":"<p>Specifies a web request component to be used in a rule match statement or in a logging configuration. </p> <ul> <li> <p>In a rule statement, this is the part of the web request that you want WAF to inspect. Include the single <code>FieldToMatch</code> type that you want to inspect, with additional specifications as needed, according to the type. You specify a single request component in <code>FieldToMatch</code> for each rule statement that requires it. To inspect more than one component of the web request, create a separate rule statement for each component.</p> <p>Example JSON for a <code>QueryString</code> field to match: </p> <p> <code> \"FieldToMatch\": { \"QueryString\": {} }</code> </p> <p>Example JSON for a <code>Method</code> field to match specification:</p> <p> <code> \"FieldToMatch\": { \"Method\": { \"Name\": \"DELETE\" } }</code> </p> </li> <li> <p>In a logging configuration, this is used in the <code>RedactedFields</code> property to specify a field to redact from the logging records. For this use case, note the following: </p> <ul> <li> <p>Even though all <code>FieldToMatch</code> settings are available, the only valid settings for field redaction are <code>UriPath</code>, <code>QueryString</code>, <code>SingleHeader</code>, and <code>Method</code>.</p> </li> <li> <p>In this documentation, the descriptions of the individual fields talk about specifying the web request component to inspect, but for field redaction, you are specifying the component type to redact from the logs. </p> </li> <li> <p>If you have request sampling enabled, the redacted fields configuration for logging has no impact on sampling. You can only exclude fields from request sampling by disabling sampling in the web ACL visibility configuration or by configuring data protection for the web ACL.</p> </li> </ul> </li> </ul>"
     },
     "FieldToMatchData":{
       "type":"string",
@@ -2508,6 +2686,42 @@
       "min":1,
       "pattern":".*\\S.*"
     },
+    "FieldToProtect":{
+      "type":"structure",
+      "required":["FieldType"],
+      "members":{
+        "FieldType":{
+          "shape":"FieldToProtectType",
+          "documentation":"<p>Specifies the web request component type to protect. </p>"
+        },
+        "FieldKeys":{
+          "shape":"FieldToProtectKeys",
+          "documentation":"<p>Specifies the keys to protect for the specified field type. If you don't specify any key, then all keys for the field type are protected. </p>"
+        }
+      },
+      "documentation":"<p>Specifies a field type and keys to protect in stored web request data. This is part of the data protection configuration for a web ACL. </p>"
+    },
+    "FieldToProtectKeyName":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "pattern":".*\\S.*"
+    },
+    "FieldToProtectKeys":{
+      "type":"list",
+      "member":{"shape":"FieldToProtectKeyName"},
+      "max":100
+    },
+    "FieldToProtectType":{
+      "type":"string",
+      "enum":[
+        "SINGLE_HEADER",
+        "SINGLE_COOKIE",
+        "SINGLE_QUERY_ARGUMENT",
+        "QUERY_STRING",
+        "BODY"
+      ]
+    },
     "Filter":{
       "type":"structure",
       "required":[
@@ -2617,7 +2831,7 @@
           "documentation":"<p>The match status to assign to the web request if the request doesn't have a valid IP address in the specified position.</p> <note> <p>If the specified header isn't present in the request, WAF doesn't apply the rule to the web request at all.</p> </note> <p>You can specify the following fallback behaviors:</p> <ul> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
         }
       },
-      "documentation":"<p>The configuration for inspecting IP addresses in an HTTP header that you specify, instead of using the IP address that's reported by the web request origin. Commonly, this is the X-Forwarded-For (XFF) header, but you can specify any header name. </p> <note> <p>If the specified header isn't present in the request, WAF doesn't apply the rule to the web request at all.</p> </note> <p>This configuration is used for <a>GeoMatchStatement</a> and <a>RateBasedStatement</a>. For <a>IPSetReferenceStatement</a>, use <a>IPSetForwardedIPConfig</a> instead. </p> <p>WAF only evaluates the first IP address found in the specified HTTP header. </p>"
+      "documentation":"<p>The configuration for inspecting IP addresses in an HTTP header that you specify, instead of using the IP address that's reported by the web request origin. Commonly, this is the X-Forwarded-For (XFF) header, but you can specify any header name. </p> <note> <p>If the specified header isn't present in the request, WAF doesn't apply the rule to the web request at all.</p> </note> <p>This configuration is used for <a>GeoMatchStatement</a>, <a>AsnMatchStatement</a>, and <a>RateBasedStatement</a>. For <a>IPSetReferenceStatement</a>, use <a>IPSetForwardedIPConfig</a> instead. </p> <p>WAF only evaluates the first IP address found in the specified HTTP header. </p>"
     },
     "ForwardedIPHeaderName":{
       "type":"string",
@@ -2682,7 +2896,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "APIKey":{
           "shape":"APIKey",
@@ -2717,7 +2931,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2752,7 +2966,7 @@
         },
         "LogScope":{
           "shape":"LogScope",
-          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
+          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>The log scope <code>CLOUDWATCH_TELEMETRY_RULE_MANAGED</code> indicates a configuration that is managed through Amazon CloudWatch Logs for telemetry data collection and analysis. For information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">What is Amazon CloudWatch Logs ?</a> in the <i>Amazon CloudWatch Logs user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
         }
       }
     },
@@ -2779,7 +2993,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2856,7 +3070,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "WebACLName":{
           "shape":"EntityName",
@@ -2903,7 +3117,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2933,7 +3147,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -2978,7 +3192,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "TimeWindow":{
           "shape":"TimeWindow",
@@ -3013,7 +3227,7 @@
       "members":{
         "ResourceArn":{
           "shape":"ResourceArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the resource whose web ACL you want to retrieve. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> </ul>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the resource whose web ACL you want to retrieve. </p> <p>The ARN must be in one of the following formats:</p> <ul> <li> <p>For an Application Load Balancer: <code>arn:<i>partition</i>:elasticloadbalancing:<i>region</i>:<i>account-id</i>:loadbalancer/app/<i>load-balancer-name</i>/<i>load-balancer-id</i> </code> </p> </li> <li> <p>For an Amazon API Gateway REST API: <code>arn:<i>partition</i>:apigateway:<i>region</i>::/restapis/<i>api-id</i>/stages/<i>stage-name</i> </code> </p> </li> <li> <p>For an AppSync GraphQL API: <code>arn:<i>partition</i>:appsync:<i>region</i>:<i>account-id</i>:apis/<i>GraphQLApiId</i> </code> </p> </li> <li> <p>For an Amazon Cognito user pool: <code>arn:<i>partition</i>:cognito-idp:<i>region</i>:<i>account-id</i>:userpool/<i>user-pool-id</i> </code> </p> </li> <li> <p>For an App Runner service: <code>arn:<i>partition</i>:apprunner:<i>region</i>:<i>account-id</i>:service/<i>apprunner-service-name</i>/<i>apprunner-service-id</i> </code> </p> </li> <li> <p>For an Amazon Web Services Verified Access instance: <code>arn:<i>partition</i>:ec2:<i>region</i>:<i>account-id</i>:verified-access-instance/<i>instance-id</i> </code> </p> </li> <li> <p>For an Amplify application: <code>arn:<i>partition</i>:amplify:<i>region</i>:<i>account-id</i>:apps/<i>app-id</i> </code> </p> </li> </ul>"
         }
       }
     },
@@ -3028,11 +3242,6 @@
     },
     "GetWebACLRequest":{
       "type":"structure",
-      "required":[
-        "Name",
-        "Scope",
-        "Id"
-      ],
       "members":{
         "Name":{
           "shape":"EntityName",
@@ -3040,11 +3249,15 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
           "documentation":"<p>The unique identifier for the web ACL. This ID is returned in the responses to create and list commands. You provide it to operations like update and delete.</p>"
+        },
+        "ARN":{
+          "shape":"ResourceArn",
+          "documentation":"<p>The Amazon Resource Name (ARN) of the web ACL that you want to retrieve. </p>"
         }
       }
     },
@@ -3146,7 +3359,7 @@
       "members":{
         "OversizeHandling":{
           "shape":"OversizeHandling",
-          "documentation":"<p>What WAF should do if the headers of the request are more numerous or larger than WAF can inspect. WAF does not support inspecting the entire contents of request headers when they exceed 8 KB (8192 bytes) or 200 total headers. The underlying host service forwards a maximum of 200 headers and at most 8 KB of header contents to WAF. </p> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available headers normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
+          "documentation":"<p>What WAF should do if the headers determined by your match scope are more numerous or larger than WAF can inspect. WAF does not support inspecting the entire contents of request headers when they exceed 8 KB (8192 bytes) or 200 total headers. The underlying host service forwards a maximum of 200 headers and at most 8 KB of header contents to WAF. </p> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available headers normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Inspect a string containing the list of the request's header names, ordered as they appear in the web request that WAF receives for inspection. WAF generates the string and then uses that as the field to match component in its inspection. WAF separates the header names in the string using colons and no added spaces, for example <code>host:user-agent:accept:authorization:referer</code>.</p>"
@@ -3170,7 +3383,7 @@
         },
         "OversizeHandling":{
           "shape":"OversizeHandling",
-          "documentation":"<p>What WAF should do if the headers of the request are more numerous or larger than WAF can inspect. WAF does not support inspecting the entire contents of request headers when they exceed 8 KB (8192 bytes) or 200 total headers. The underlying host service forwards a maximum of 200 headers and at most 8 KB of header contents to WAF. </p> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available headers normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
+          "documentation":"<p>What WAF should do if the headers determined by your match scope are more numerous or larger than WAF can inspect. WAF does not support inspecting the entire contents of request headers when they exceed 8 KB (8192 bytes) or 200 total headers. The underlying host service forwards a maximum of 200 headers and at most 8 KB of header contents to WAF. </p> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available headers normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
         }
       },
       "documentation":"<p>Inspect all headers in the web request. You can specify the parts of the headers to inspect and you can narrow the set of headers to inspect by including or excluding specific keys.</p> <p>This is used to indicate the web request component to inspect, in the <a>FieldToMatch</a> specification. </p> <p>If you want to inspect just the value of a single header, use the <code>SingleHeader</code> <code>FieldToMatch</code> setting instead.</p> <p>Example JSON: <code>\"Headers\": { \"MatchPattern\": { \"All\": {} }, \"MatchScope\": \"KEY\", \"OversizeHandling\": \"MATCH\" }</code> </p>"
@@ -3327,6 +3540,17 @@
       },
       "documentation":"<p>Available for use with Amazon CloudFront distributions and Application Load Balancers. Match against the request's JA3 fingerprint. The JA3 fingerprint is a 32-character hash derived from the TLS Client Hello of an incoming request. This fingerprint serves as a unique identifier for the client's TLS configuration. WAF calculates and logs this fingerprint for each request that has enough TLS Client Hello information for the calculation. Almost all web requests include this information.</p> <note> <p>You can use this choice only with a string match <code>ByteMatchStatement</code> with the <code>PositionalConstraint</code> set to <code>EXACTLY</code>. </p> </note> <p>You can obtain the JA3 fingerprint for client requests from the web ACL logs. If WAF is able to calculate the fingerprint, it includes it in the logs. For information about the logging fields, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields</a> in the <i>WAF Developer Guide</i>. </p> <p>Provide the JA3 fingerprint string from the logs in your string match statement specification, to match with any future requests that have the same TLS configuration.</p>"
     },
+    "JA4Fingerprint":{
+      "type":"structure",
+      "required":["FallbackBehavior"],
+      "members":{
+        "FallbackBehavior":{
+          "shape":"FallbackBehavior",
+          "documentation":"<p>The match status to assign to the web request if the request doesn't have a JA4 fingerprint. </p> <p>You can specify the following fallback behaviors:</p> <ul> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Available for use with Amazon CloudFront distributions and Application Load Balancers. Match against the request's JA4 fingerprint. The JA4 fingerprint is a 36-character hash derived from the TLS Client Hello of an incoming request. This fingerprint serves as a unique identifier for the client's TLS configuration. WAF calculates and logs this fingerprint for each request that has enough TLS Client Hello information for the calculation. Almost all web requests include this information.</p> <note> <p>You can use this choice only with a string match <code>ByteMatchStatement</code> with the <code>PositionalConstraint</code> set to <code>EXACTLY</code>. </p> </note> <p>You can obtain the JA4 fingerprint for client requests from the web ACL logs. If WAF is able to calculate the fingerprint, it includes it in the logs. For information about the logging fields, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging-fields.html\">Log fields</a> in the <i>WAF Developer Guide</i>. </p> <p>Provide the JA4 fingerprint string from the logs in your string match statement specification, to match with any future requests that have the same TLS configuration.</p>"
+    },
     "JsonBody":{
       "type":"structure",
       "required":[
@@ -3348,7 +3572,7 @@
         },
         "OversizeHandling":{
           "shape":"OversizeHandling",
-          "documentation":"<p>What WAF should do if the body is larger than WAF can inspect. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> </ul> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available body contents normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul> <p>You can combine the <code>MATCH</code> or <code>NO_MATCH</code> settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. </p> <p>Default: <code>CONTINUE</code> </p>"
+          "documentation":"<p>What WAF should do if the body is larger than WAF can inspect. </p> <p>WAF does not support inspecting the entire contents of the web request body if the body exceeds the limit for the resource type. When a web request body is larger than the limit, the underlying host service only forwards the contents that are within the limit to WAF for inspection. </p> <ul> <li> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p> </li> <li> <p>For CloudFront, API Gateway, Amazon Cognito, App Runner, and Verified Access, the default limit is 16 KB (16,384 bytes), and you can increase the limit for each resource type in the web ACL <code>AssociationConfig</code>, for additional processing fees. </p> </li> <li> <p>For Amplify, use the CloudFront limit.</p> </li> </ul> <p>The options for oversize handling are the following:</p> <ul> <li> <p> <code>CONTINUE</code> - Inspect the available body contents normally, according to the rule inspection criteria. </p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul> <p>You can combine the <code>MATCH</code> or <code>NO_MATCH</code> settings for oversize handling with your rule and web ACL action settings, so that you block any request whose body is over the limit. </p> <p>Default: <code>CONTINUE</code> </p>"
         }
       },
       "documentation":"<p>Inspect the body of the web request as JSON. The body immediately follows the request headers. </p> <p>This is used to indicate the web request component to inspect, in the <a>FieldToMatch</a> specification. </p> <p>Use the specifications in this object to indicate which parts of the JSON body to inspect using the rule's inspection criteria. WAF inspects only the parts of the JSON that result from the matches that you indicate. </p> <p>Example JSON: <code>\"JsonBody\": { \"MatchPattern\": { \"All\": {} }, \"MatchScope\": \"ALL\" }</code> </p> <p>For additional information about this request component option, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-fields-list.html#waf-rule-statement-request-component-json-body\">JSON body</a> in the <i>WAF Developer Guide</i>.</p>"
@@ -3475,7 +3699,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3522,7 +3746,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3557,7 +3781,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3588,7 +3812,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3619,7 +3843,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3631,7 +3855,7 @@
         },
         "LogScope":{
           "shape":"LogScope",
-          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
+          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>The log scope <code>CLOUDWATCH_TELEMETRY_RULE_MANAGED</code> indicates a configuration that is managed through Amazon CloudWatch Logs for telemetry data collection and analysis. For information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">What is Amazon CloudWatch Logs ?</a> in the <i>Amazon CloudWatch Logs user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
         }
       }
     },
@@ -3654,7 +3878,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3721,7 +3945,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3756,7 +3980,7 @@
         },
         "ResourceType":{
           "shape":"ResourceType",
-          "documentation":"<p>Used for web ACLs that are scoped for regional applications. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <note> <p>If you don't provide a resource type, the call uses the resource type <code>APPLICATION_LOAD_BALANCER</code>. </p> </note> <p>Default: <code>APPLICATION_LOAD_BALANCER</code> </p>"
+          "documentation":"<p>Retrieves the web ACLs that are used by the specified resource type. </p> <p>For Amazon CloudFront, don't use this call. Instead, use the CloudFront call <code>ListDistributionsByWebACLId</code>. For information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html\">ListDistributionsByWebACLId</a> in the <i>Amazon CloudFront API Reference</i>. </p> <note> <p>If you don't provide a resource type, the call uses the resource type <code>APPLICATION_LOAD_BALANCER</code>. </p> </note> <p>Default: <code>APPLICATION_LOAD_BALANCER</code> </p>"
         }
       }
     },
@@ -3775,7 +3999,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3837,7 +4061,7 @@
       "members":{
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "NextMarker":{
           "shape":"NextMarker",
@@ -3878,7 +4102,8 @@
       "type":"string",
       "enum":[
         "CUSTOMER",
-        "SECURITY_LAKE"
+        "SECURITY_LAKE",
+        "CLOUDWATCH_TELEMETRY_RULE_MANAGED"
       ]
     },
     "LogType":{
@@ -3902,7 +4127,7 @@
         },
         "RedactedFields":{
           "shape":"RedactedFields",
-          "documentation":"<p>The parts of the request that you want to keep out of the logs.</p> <p>For example, if you redact the <code>SingleHeader</code> field, the <code>HEADER</code> field in the logs will be <code>REDACTED</code> for all rules that use the <code>SingleHeader</code> <code>FieldToMatch</code> setting. </p> <p>Redaction applies only to the component that's specified in the rule's <code>FieldToMatch</code> setting, so the <code>SingleHeader</code> redaction doesn't apply to rules that use the <code>Headers</code> <code>FieldToMatch</code>.</p> <note> <p>You can specify only the following fields for redaction: <code>UriPath</code>, <code>QueryString</code>, <code>SingleHeader</code>, and <code>Method</code>.</p> </note> <note> <p>This setting has no impact on request sampling. With request sampling, the only way to exclude fields is by disabling sampling in the web ACL visibility configuration. </p> </note>"
+          "documentation":"<p>The parts of the request that you want to keep out of the logs.</p> <p>For example, if you redact the <code>SingleHeader</code> field, the <code>HEADER</code> field in the logs will be <code>REDACTED</code> for all rules that use the <code>SingleHeader</code> <code>FieldToMatch</code> setting. </p> <p>If you configure data protection for the web ACL, the protection applies to the data that WAF sends to the logs. </p> <p>Redaction applies only to the component that's specified in the rule's <code>FieldToMatch</code> setting, so the <code>SingleHeader</code> redaction doesn't apply to rules that use the <code>Headers</code> <code>FieldToMatch</code>.</p> <note> <p>You can specify only the following fields for redaction: <code>UriPath</code>, <code>QueryString</code>, <code>SingleHeader</code>, and <code>Method</code>.</p> </note> <note> <p>This setting has no impact on request sampling. You can only exclude fields from request sampling by disabling sampling in the web ACL visibility configuration or by configuring data protection for the web ACL.</p> </note>"
         },
         "ManagedByFirewallManager":{
           "shape":"Boolean",
@@ -3918,10 +4143,10 @@
         },
         "LogScope":{
           "shape":"LogScope",
-          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
+          "documentation":"<p>The owner of the logging configuration, which must be set to <code>CUSTOMER</code> for the configurations that you manage. </p> <p>The log scope <code>SECURITY_LAKE</code> indicates a configuration that is managed through Amazon Security Lake. You can use Security Lake to collect log and event data from various sources for normalization, analysis, and management. For information, see <a href=\"https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html\">Collecting data from Amazon Web Services services</a> in the <i>Amazon Security Lake user guide</i>. </p> <p>The log scope <code>CLOUDWATCH_TELEMETRY_RULE_MANAGED</code> indicates a configuration that is managed through Amazon CloudWatch Logs for telemetry data collection and analysis. For information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html\">What is Amazon CloudWatch Logs ?</a> in the <i>Amazon CloudWatch Logs user guide</i>. </p> <p>Default: <code>CUSTOMER</code> </p>"
         }
       },
-      "documentation":"<p>Defines an association between logging destinations and a web ACL resource, for logging from WAF. As part of the association, you can specify parts of the standard logging fields to keep out of the logs and you can specify filters so that you log only a subset of the logging records. </p> <note> <p>You can define one logging destination per web ACL.</p> </note> <p>You can access information about the traffic that WAF inspects using the following steps:</p> <ol> <li> <p>Create your logging destination. You can use an Amazon CloudWatch Logs log group, an Amazon Simple Storage Service (Amazon S3) bucket, or an Amazon Kinesis Data Firehose. </p> <p>The name that you give the destination must start with <code>aws-waf-logs-</code>. Depending on the type of destination, you might need to configure additional settings or permissions. </p> <p>For configuration requirements and pricing information for each destination type, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> </li> <li> <p>Associate your logging destination to your web ACL using a <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you successfully enable logging using a <code>PutLoggingConfiguration</code> request, WAF creates an additional role or policy that is required to write logs to the logging destination. For an Amazon CloudWatch Logs log group, WAF creates a resource policy on the log group. For an Amazon S3 bucket, WAF creates a bucket policy. For an Amazon Kinesis Data Firehose, WAF creates a service-linked role.</p> <p>For additional information about web ACL logging, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic information</a> in the <i>WAF Developer Guide</i>.</p>"
+      "documentation":"<p>Defines an association between logging destinations and a web ACL resource, for logging from WAF. As part of the association, you can specify parts of the standard logging fields to keep out of the logs and you can specify filters so that you log only a subset of the logging records. </p> <p>If you configure data protection for the web ACL, the protection applies to the data that WAF sends to the logs. </p> <note> <p>You can define one logging destination per web ACL.</p> </note> <p>You can access information about the traffic that WAF inspects using the following steps:</p> <ol> <li> <p>Create your logging destination. You can use an Amazon CloudWatch Logs log group, an Amazon Simple Storage Service (Amazon S3) bucket, or an Amazon Kinesis Data Firehose. </p> <p>The name that you give the destination must start with <code>aws-waf-logs-</code>. Depending on the type of destination, you might need to configure additional settings or permissions. </p> <p>For configuration requirements and pricing information for each destination type, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic</a> in the <i>WAF Developer Guide</i>.</p> </li> <li> <p>Associate your logging destination to your web ACL using a <code>PutLoggingConfiguration</code> request.</p> </li> </ol> <p>When you successfully enable logging using a <code>PutLoggingConfiguration</code> request, WAF creates an additional role or policy that is required to write logs to the logging destination. For an Amazon CloudWatch Logs log group, WAF creates a resource policy on the log group. For an Amazon S3 bucket, WAF creates a bucket policy. For an Amazon Kinesis Data Firehose, WAF creates a service-linked role.</p> <p>For additional information about web ACL logging, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html\">Logging web ACL traffic information</a> in the <i>WAF Developer Guide</i>.</p>"
     },
     "LoggingConfigurations":{
       "type":"list",
@@ -3951,6 +4176,13 @@
       "min":1,
       "pattern":".*\\S.*"
     },
+    "LowReputationMode":{
+      "type":"string",
+      "enum":[
+        "ACTIVE_UNDER_DDOS",
+        "ALWAYS_ON"
+      ]
+    },
     "ManagedProductDescriptor":{
       "type":"structure",
       "members":{
@@ -4035,9 +4267,13 @@
         "AWSManagedRulesACFPRuleSet":{
           "shape":"AWSManagedRulesACFPRuleSet",
           "documentation":"<p>Additional configuration for using the account creation fraud prevention (ACFP) managed rule group, <code>AWSManagedRulesACFPRuleSet</code>. Use this to provide account creation request information to the rule group. For web ACLs that protect CloudFront distributions, use this to also provide the information about how your distribution responds to account creation requests. </p> <p>For information about using the ACFP managed rule group, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-acfp.html\">WAF Fraud Control account creation fraud prevention (ACFP) rule group</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-acfp.html\">WAF Fraud Control account creation fraud prevention (ACFP)</a> in the <i>WAF Developer Guide</i>.</p>"
+        },
+        "AWSManagedRulesAntiDDoSRuleSet":{
+          "shape":"AWSManagedRulesAntiDDoSRuleSet",
+          "documentation":"<p>Additional configuration for using the anti-DDoS managed rule group, <code>AWSManagedRulesAntiDDoSRuleSet</code>. Use this to configure anti-DDoS behavior for the rule group. </p> <p>For information about using the anti-DDoS managed rule group, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-anti-ddos.html\">WAF Anti-DDoS rule group</a> and <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-anti-ddos.html\">Distributed Denial of Service (DDoS) prevention</a> in the <i>WAF Developer Guide</i>.</p>"
         }
       },
-      "documentation":"<p>Additional information that's used by a managed rule group. Many managed rule groups don't require this.</p> <p>The rule groups used for intelligent threat mitigation require additional configuration: </p> <ul> <li> <p>Use the <code>AWSManagedRulesACFPRuleSet</code> configuration object to configure the account creation fraud prevention managed rule group. The configuration includes the registration and sign-up pages of your application and the locations in the account creation request payload of data, such as the user email and phone number fields. </p> </li> <li> <p>Use the <code>AWSManagedRulesATPRuleSet</code> configuration object to configure the account takeover prevention managed rule group. The configuration includes the sign-in page of your application and the locations in the login request payload of data such as the username and password. </p> </li> <li> <p>Use the <code>AWSManagedRulesBotControlRuleSet</code> configuration object to configure the protection level that you want the Bot Control rule group to use. </p> </li> </ul> <p>For example specifications, see the examples section of <a>CreateWebACL</a>.</p>"
+      "documentation":"<p>Additional information that's used by a managed rule group. Many managed rule groups don't require this.</p> <p>The rule groups used for intelligent threat mitigation require additional configuration: </p> <ul> <li> <p>Use the <code>AWSManagedRulesACFPRuleSet</code> configuration object to configure the account creation fraud prevention managed rule group. The configuration includes the registration and sign-up pages of your application and the locations in the account creation request payload of data, such as the user email and phone number fields. </p> </li> <li> <p>Use the <code>AWSManagedRulesAntiDDoSRuleSet</code> configuration object to configure the anti-DDoS managed rule group. The configuration includes the sensitivity levels to use in the rules that typically block and challenge requests that might be participating in DDoS attacks and the specification to use to indicate whether a request can handle a silent browser challenge. </p> </li> <li> <p>Use the <code>AWSManagedRulesATPRuleSet</code> configuration object to configure the account takeover prevention managed rule group. The configuration includes the sign-in page of your application and the locations in the login request payload of data such as the username and password. </p> </li> <li> <p>Use the <code>AWSManagedRulesBotControlRuleSet</code> configuration object to configure the protection level that you want the Bot Control rule group to use. </p> </li> </ul> <p>For example specifications, see the examples section of <a>CreateWebACL</a>.</p>"
     },
     "ManagedRuleGroupConfigs":{
       "type":"list",
@@ -4072,11 +4308,11 @@
         },
         "ManagedRuleGroupConfigs":{
           "shape":"ManagedRuleGroupConfigs",
-          "documentation":"<p>Additional information that's used by a managed rule group. Many managed rule groups don't require this.</p> <p>The rule groups used for intelligent threat mitigation require additional configuration: </p> <ul> <li> <p>Use the <code>AWSManagedRulesACFPRuleSet</code> configuration object to configure the account creation fraud prevention managed rule group. The configuration includes the registration and sign-up pages of your application and the locations in the account creation request payload of data, such as the user email and phone number fields. </p> </li> <li> <p>Use the <code>AWSManagedRulesATPRuleSet</code> configuration object to configure the account takeover prevention managed rule group. The configuration includes the sign-in page of your application and the locations in the login request payload of data such as the username and password. </p> </li> <li> <p>Use the <code>AWSManagedRulesBotControlRuleSet</code> configuration object to configure the protection level that you want the Bot Control rule group to use. </p> </li> </ul>"
+          "documentation":"<p>Additional information that's used by a managed rule group. Many managed rule groups don't require this.</p> <p>The rule groups used for intelligent threat mitigation require additional configuration: </p> <ul> <li> <p>Use the <code>AWSManagedRulesACFPRuleSet</code> configuration object to configure the account creation fraud prevention managed rule group. The configuration includes the registration and sign-up pages of your application and the locations in the account creation request payload of data, such as the user email and phone number fields. </p> </li> <li> <p>Use the <code>AWSManagedRulesAntiDDoSRuleSet</code> configuration object to configure the anti-DDoS managed rule group. The configuration includes the sensitivity levels to use in the rules that typically block and challenge requests that might be participating in DDoS attacks and the specification to use to indicate whether a request can handle a silent browser challenge. </p> </li> <li> <p>Use the <code>AWSManagedRulesATPRuleSet</code> configuration object to configure the account takeover prevention managed rule group. The configuration includes the sign-in page of your application and the locations in the login request payload of data such as the username and password. </p> </li> <li> <p>Use the <code>AWSManagedRulesBotControlRuleSet</code> configuration object to configure the protection level that you want the Bot Control rule group to use. </p> </li> </ul>"
         },
         "RuleActionOverrides":{
           "shape":"RuleActionOverrides",
-          "documentation":"<p>Action settings to use in the place of the rule actions that are configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
+          "documentation":"<p>Action settings to use in the place of the rule actions that are configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <note> <p>Verify the rule names in your overrides carefully. With managed rule groups, WAF silently ignores any override that uses an invalid rule name. With customer-owned rule groups, invalid rule names in your overrides will cause web ACL updates to fail. An invalid rule name is any name that doesn't exactly match the case-sensitive name of an existing rule in the rule group.</p> </note> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
         }
       },
       "documentation":"<p>A rule statement used to run the rules that are defined in a managed rule group. To use this, provide the vendor name and the name of the rule group in this statement. You can retrieve the required names by calling <a>ListAvailableManagedRuleGroups</a>.</p> <p>You cannot nest a <code>ManagedRuleGroupStatement</code>, for example for use inside a <code>NotStatement</code> or <code>OrStatement</code>. You cannot use a managed rule group inside another rule group. You can only reference a managed rule group as a top-level statement within a rule that you define in a web ACL.</p> <note> <p>You are charged additional fees when you use the WAF Bot Control managed rule group <code>AWSManagedRulesBotControlRuleSet</code>, the WAF Fraud Control account takeover prevention (ATP) managed rule group <code>AWSManagedRulesATPRuleSet</code>, or the WAF Fraud Control account creation fraud prevention (ACFP) managed rule group <code>AWSManagedRulesACFPRuleSet</code>. For more information, see <a href=\"http://aws.amazon.com/waf/pricing/\">WAF Pricing</a>.</p> </note>"
@@ -4238,8 +4474,7 @@
     },
     "Method":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Inspect the HTTP method of the web request. The method indicates the type of operation that the request is asking the origin to perform. </p> <p>This is used in the <a>FieldToMatch</a> specification for some web request component types. </p> <p>JSON specification: <code>\"Method\": {}</code> </p>"
     },
     "MetricName":{
@@ -4278,8 +4513,7 @@
     },
     "NoneAction":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies that WAF should do nothing. This is used for the <code>OverrideAction</code> setting on a <a>Rule</a> when the rule uses a rule group reference statement. </p> <p>This is used in the context of other settings, for example to specify values for <a>RuleAction</a> and web ACL <a>DefaultAction</a>. </p> <p>JSON specification: <code>\"None\": {}</code> </p>"
     },
     "NotStatement":{
@@ -4293,6 +4527,17 @@
       },
       "documentation":"<p>A logical rule statement used to negate the results of another rule statement. You provide one <a>Statement</a> within the <code>NotStatement</code>.</p>"
     },
+    "OnSourceDDoSProtectionConfig":{
+      "type":"structure",
+      "required":["ALBLowReputationMode"],
+      "members":{
+        "ALBLowReputationMode":{
+          "shape":"LowReputationMode",
+          "documentation":"<p>The level of DDoS protection that applies to web ACLs associated with Application Load Balancers. <code>ACTIVE_UNDER_DDOS</code> protection is enabled by default whenever a web ACL is associated with an Application Load Balancer. In the event that an Application Load Balancer experiences high-load conditions or suspected DDoS attacks, the <code>ACTIVE_UNDER_DDOS</code> protection automatically rate limits traffic from known low reputation sources without disrupting Application Load Balancer availability. <code>ALWAYS_ON</code> protection provides constant, always-on monitoring of known low reputation sources for suspected DDoS attacks. While this provides a higher level of protection, there may be potential impacts on legitimate traffic.</p>"
+        }
+      },
+      "documentation":"<p>Configures the level of DDoS protection that applies to web ACLs associated with Application Load Balancers.</p>"
+    },
     "OrStatement":{
       "type":"structure",
       "required":["Statements"],
@@ -4404,7 +4649,9 @@
         "ASSOCIATED_RESOURCE_TYPE",
         "SCOPE_DOWN",
         "CUSTOM_KEYS",
-        "ACP_RULE_SET_RESPONSE_INSPECTION"
+        "ACP_RULE_SET_RESPONSE_INSPECTION",
+        "DATA_PROTECTION_CONFIG",
+        "LOW_REPUTATION_MODE"
       ]
     },
     "ParameterExceptionParameter":{
@@ -4529,7 +4776,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -4577,13 +4824,11 @@
     },
     "PutPermissionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "QueryString":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Inspect the query string of the web request. This is the part of a URL that appears after a <code>?</code> character, if any.</p> <p>This is used in the <a>FieldToMatch</a> specification for some web request component types. </p> <p>JSON specification: <code>\"QueryString\": {}</code> </p>"
     },
     "RateBasedStatement":{
@@ -4595,7 +4840,7 @@
       "members":{
         "Limit":{
           "shape":"RateLimit",
-          "documentation":"<p>The limit on requests per 5-minute period for a single aggregation instance for the rate-based rule. If the rate-based statement includes a <code>ScopeDownStatement</code>, this limit is applied only to the requests that match the statement.</p> <p>Examples: </p> <ul> <li> <p>If you aggregate on just the IP address, this is the limit on requests from any single IP address. </p> </li> <li> <p>If you aggregate on the HTTP method and the query argument name \"city\", then this is the limit on requests for any single method, city pair. </p> </li> </ul>"
+          "documentation":"<p>The limit on requests during the specified evaluation window for a single aggregation instance for the rate-based rule. If the rate-based statement includes a <code>ScopeDownStatement</code>, this limit is applied only to the requests that match the statement.</p> <p>Examples: </p> <ul> <li> <p>If you aggregate on just the IP address, this is the limit on requests from any single IP address. </p> </li> <li> <p>If you aggregate on the HTTP method and the query argument name \"city\", then this is the limit on requests for any single method, city pair. </p> </li> </ul>"
         },
         "EvaluationWindowSec":{
           "shape":"EvaluationWindowSec",
@@ -4667,6 +4912,18 @@
         "UriPath":{
           "shape":"RateLimitUriPath",
           "documentation":"<p>Use the request's URI path as an aggregate key. Each distinct URI path contributes to the aggregation instance. If you use just the URI path as your custom key, then each URI path fully defines an aggregation instance. </p>"
+        },
+        "JA3Fingerprint":{
+          "shape":"RateLimitJA3Fingerprint",
+          "documentation":"<p> Use the request's JA3 fingerprint as an aggregate key. If you use a single JA3 fingerprint as your custom key, then each value fully defines an aggregation instance. </p>"
+        },
+        "JA4Fingerprint":{
+          "shape":"RateLimitJA4Fingerprint",
+          "documentation":"<p>Use the request's JA4 fingerprint as an aggregate key. If you use a single JA4 fingerprint as your custom key, then each value fully defines an aggregation instance. </p>"
+        },
+        "ASN":{
+          "shape":"RateLimitAsn",
+          "documentation":"<p>Use an Autonomous System Number (ASN) derived from the request's originating or forwarded IP address as an aggregate key. Each distinct ASN contributes to the aggregation instance. </p>"
         }
       },
       "documentation":"<p>Specifies a single custom aggregate key for a rate-base rule. </p> <note> <p>Web requests that are missing any of the components specified in the aggregation keys are omitted from the rate-based rule evaluation and handling. </p> </note>"
@@ -4695,6 +4952,11 @@
       "max":2000000000,
       "min":10
     },
+    "RateLimitAsn":{
+      "type":"structure",
+      "members":{},
+      "documentation":"<p>Specifies an Autonomous System Number (ASN) derived from the request's originating or forwarded IP address as an aggregate key for a rate-based rule. Each distinct ASN contributes to the aggregation instance. If you use a single ASN as your custom key, then each ASN fully defines an aggregation instance. </p>"
+    },
     "RateLimitCookie":{
       "type":"structure",
       "required":[
@@ -4715,14 +4977,12 @@
     },
     "RateLimitForwardedIP":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies the first IP address in an HTTP header as an aggregate key for a rate-based rule. Each distinct forwarded IP address contributes to the aggregation instance.</p> <p>This setting is used only in the <code>RateBasedStatementCustomKey</code> specification of a rate-based rule statement. When you specify an IP or forwarded IP in the custom key settings, you must also specify at least one other key to use. You can aggregate on only the forwarded IP address by specifying <code>FORWARDED_IP</code> in your rate-based statement's <code>AggregateKeyType</code>. </p> <p>This data type supports using the forwarded IP address in the web request aggregation for a rate-based rule, in <code>RateBasedStatementCustomKey</code>. The JSON specification for using the forwarded IP address doesn't explicitly use this data type. </p> <p>JSON specification: <code>\"ForwardedIP\": {}</code> </p> <p>When you use this specification, you must also configure the forwarded IP address in the rate-based statement's <code>ForwardedIPConfig</code>. </p>"
     },
     "RateLimitHTTPMethod":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>Specifies the request's HTTP method as an aggregate key for a rate-based rule. Each distinct HTTP method contributes to the aggregation instance. If you use just the HTTP method as your custom key, then each method fully defines an aggregation instance. </p> <p>JSON specification: <code>\"RateLimitHTTPMethod\": {}</code> </p>"
     },
     "RateLimitHeader":{
@@ -4745,9 +5005,30 @@
     },
     "RateLimitIP":{
       "type":"structure",
+      "members":{},
+      "documentation":"<p>Specifies the IP address in the web request as an aggregate key for a rate-based rule. Each distinct IP address contributes to the aggregation instance. </p> <p>This setting is used only in the <code>RateBasedStatementCustomKey</code> specification of a rate-based rule statement. To use this in the custom key settings, you must specify at least one other key to use, along with the IP address. To aggregate on only the IP address, in your rate-based statement's <code>AggregateKeyType</code>, specify <code>IP</code>.</p> <p>JSON specification: <code>\"RateLimitIP\": {}</code> </p>"
+    },
+    "RateLimitJA3Fingerprint":{
+      "type":"structure",
+      "required":["FallbackBehavior"],
       "members":{
+        "FallbackBehavior":{
+          "shape":"FallbackBehavior",
+          "documentation":"<p>The match status to assign to the web request if there is insufficient TSL Client Hello information to compute the JA3 fingerprint.</p> <p>You can specify the following fallback behaviors:</p> <ul> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
+        }
       },
-      "documentation":"<p>Specifies the IP address in the web request as an aggregate key for a rate-based rule. Each distinct IP address contributes to the aggregation instance. </p> <p>This setting is used only in the <code>RateBasedStatementCustomKey</code> specification of a rate-based rule statement. To use this in the custom key settings, you must specify at least one other key to use, along with the IP address. To aggregate on only the IP address, in your rate-based statement's <code>AggregateKeyType</code>, specify <code>IP</code>.</p> <p>JSON specification: <code>\"RateLimitIP\": {}</code> </p>"
+      "documentation":"<p> Use the request's JA3 fingerprint derived from the TLS Client Hello of an incoming request as an aggregate key. If you use a single JA3 fingerprint as your custom key, then each value fully defines an aggregation instance. </p>"
+    },
+    "RateLimitJA4Fingerprint":{
+      "type":"structure",
+      "required":["FallbackBehavior"],
+      "members":{
+        "FallbackBehavior":{
+          "shape":"FallbackBehavior",
+          "documentation":"<p>The match status to assign to the web request if there is insufficient TSL Client Hello information to compute the JA4 fingerprint.</p> <p>You can specify the following fallback behaviors:</p> <ul> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul>"
+        }
+      },
+      "documentation":"<p>Use the request's JA4 fingerprint derived from the TLS Client Hello of an incoming request as an aggregate key. If you use a single JA4 fingerprint as your custom key, then each value fully defines an aggregation instance.</p>"
     },
     "RateLimitLabelNamespace":{
       "type":"structure",
@@ -4813,7 +5094,7 @@
           "documentation":"<p>The string representing the regular expression.</p>"
         }
       },
-      "documentation":"<p>A single regular expression. This is used in a <a>RegexPatternSet</a>.</p>"
+      "documentation":"<p>A single regular expression. This is used in a <a>RegexPatternSet</a> and also in the configuration for the Amazon Web Services Managed Rules rule group <code>AWSManagedRulesAntiDDoSRuleSet</code>.</p>"
     },
     "RegexMatchStatement":{
       "type":"structure",
@@ -5040,7 +5321,8 @@
         "APPSYNC",
         "COGNITO_USER_POOL",
         "APP_RUNNER_SERVICE",
-        "VERIFIED_ACCESS_INSTANCE"
+        "VERIFIED_ACCESS_INSTANCE",
+        "AMPLIFY"
       ]
     },
     "ResponseCode":{"type":"integer"},
@@ -5252,7 +5534,7 @@
         },
         "RuleLabels":{
           "shape":"Labels",
-          "documentation":"<p>Labels to apply to web requests that match the rule match statement. WAF applies fully qualified labels to matching web requests. A fully qualified label is the concatenation of a label namespace and a rule label. The rule's rule group or web ACL defines the label namespace. </p> <p>Rules that run after this rule in the web ACL can match against these labels using a <code>LabelMatchStatement</code>.</p> <p>For each label, provide a case-sensitive string containing optional namespaces and a label name, according to the following guidelines:</p> <ul> <li> <p>Separate each component of the label with a colon. </p> </li> <li> <p>Each namespace or name can have up to 128 characters.</p> </li> <li> <p>You can specify up to 5 namespaces in a label.</p> </li> <li> <p>Don't use the following reserved words in your label specification: <code>aws</code>, <code>waf</code>, <code>managed</code>, <code>rulegroup</code>, <code>webacl</code>, <code>regexpatternset</code>, or <code>ipset</code>.</p> </li> </ul> <p>For example, <code>myLabelName</code> or <code>nameSpace1:nameSpace2:myLabelName</code>. </p>"
+          "documentation":"<p>Labels to apply to web requests that match the rule match statement. WAF applies fully qualified labels to matching web requests. A fully qualified label is the concatenation of a label namespace and a rule label. The rule's rule group or web ACL defines the label namespace. </p> <note> <p>Any rule that isn't a rule group reference statement or managed rule group statement can add labels to matching web requests.</p> </note> <p>Rules that run after this rule in the web ACL can match against these labels using a <code>LabelMatchStatement</code>.</p> <p>For each label, provide a case-sensitive string containing optional namespaces and a label name, according to the following guidelines:</p> <ul> <li> <p>Separate each component of the label with a colon. </p> </li> <li> <p>Each namespace or name can have up to 128 characters.</p> </li> <li> <p>You can specify up to 5 namespaces in a label.</p> </li> <li> <p>Don't use the following reserved words in your label specification: <code>aws</code>, <code>waf</code>, <code>managed</code>, <code>rulegroup</code>, <code>webacl</code>, <code>regexpatternset</code>, or <code>ipset</code>.</p> </li> </ul> <p>For example, <code>myLabelName</code> or <code>nameSpace1:nameSpace2:myLabelName</code>. </p>"
         },
         "VisibilityConfig":{
           "shape":"VisibilityConfig",
@@ -5304,14 +5586,14 @@
       "members":{
         "Name":{
           "shape":"EntityName",
-          "documentation":"<p>The name of the rule to override.</p>"
+          "documentation":"<p>The name of the rule to override.</p> <note> <p>Verify the rule names in your overrides carefully. With managed rule groups, WAF silently ignores any override that uses an invalid rule name. With customer-owned rule groups, invalid rule names in your overrides will cause web ACL updates to fail. An invalid rule name is any name that doesn't exactly match the case-sensitive name of an existing rule in the rule group.</p> </note>"
         },
         "ActionToUse":{
           "shape":"RuleAction",
           "documentation":"<p>The override action to use, in place of the configured action of the rule in the rule group. </p>"
         }
       },
-      "documentation":"<p>Action setting to use in the place of a rule action that is configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
+      "documentation":"<p>Action setting to use in the place of a rule action that is configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <note> <p>Verify the rule names in your overrides carefully. With managed rule groups, WAF silently ignores any override that uses an invalid rule name. With customer-owned rule groups, invalid rule names in your overrides will cause web ACL updates to fail. An invalid rule name is any name that doesn't exactly match the case-sensitive name of an existing rule in the rule group.</p> </note> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
     },
     "RuleActionOverrides":{
       "type":"list",
@@ -5389,7 +5671,7 @@
         },
         "RuleActionOverrides":{
           "shape":"RuleActionOverrides",
-          "documentation":"<p>Action settings to use in the place of the rule actions that are configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
+          "documentation":"<p>Action settings to use in the place of the rule actions that are configured inside the rule group. You specify one override for each rule whose action you want to change. </p> <note> <p>Verify the rule names in your overrides carefully. With managed rule groups, WAF silently ignores any override that uses an invalid rule name. With customer-owned rule groups, invalid rule names in your overrides will cause web ACL updates to fail. An invalid rule name is any name that doesn't exactly match the case-sensitive name of an existing rule in the rule group.</p> </note> <p>You can use overrides for testing, for example you can override all of rule actions to <code>Count</code> and then monitor the resulting count metrics to understand how the rule group would handle your web traffic. You can also permanently override some or all actions, to modify how the rule group manages your web traffic.</p>"
         }
       },
       "documentation":"<p>A rule statement used to run the rules that are defined in a <a>RuleGroup</a>. To use this, create a rule group with your rules, then provide the ARN of the rule group in this statement.</p> <p>You cannot nest a <code>RuleGroupReferenceStatement</code>, for example for use inside a <code>NotStatement</code> or <code>OrStatement</code>. You cannot use a rule group reference statement inside another rule group. You can only reference a rule group as a top-level statement within a rule that you define in a web ACL.</p>"
@@ -5527,6 +5809,14 @@
         "HIGH"
       ]
     },
+    "SensitivityToAct":{
+      "type":"string",
+      "enum":[
+        "LOW",
+        "MEDIUM",
+        "HIGH"
+      ]
+    },
     "SingleCookieName":{
       "type":"string",
       "max":60,
@@ -5683,6 +5973,10 @@
         "RegexMatchStatement":{
           "shape":"RegexMatchStatement",
           "documentation":"<p>A rule statement used to search web request components for a match against a single regular expression. </p>"
+        },
+        "AsnMatchStatement":{
+          "shape":"AsnMatchStatement",
+          "documentation":"<p>A rule statement that inspects web traffic based on the Autonomous System Number (ASN) associated with the request's IP address.</p> <p>For additional details, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-asn-match.html\">ASN match rule statement</a> in the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html\">WAF Developer Guide</a>. </p>"
         }
       },
       "documentation":"<p>The processing guidance for a <a>Rule</a>, used by WAF to determine whether a web request matches the rule. </p> <p>For example specifications, see the examples section of <a>CreateWebACL</a>.</p>"
@@ -5770,8 +6064,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5890,8 +6183,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateIPSetRequest":{
       "type":"structure",
@@ -5909,7 +6201,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -5955,7 +6247,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -6008,7 +6300,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -6053,7 +6345,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -6107,7 +6399,7 @@
         },
         "Scope":{
           "shape":"Scope",
-          "documentation":"<p>Specifies whether this is for an Amazon CloudFront distribution or for a regional application. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
+          "documentation":"<p>Specifies whether this is for a global resource type, such as a Amazon CloudFront distribution. For an Amplify application, use <code>CLOUDFRONT</code>.</p> <p>To work with CloudFront, you must also specify the Region US East (N. Virginia) as follows: </p> <ul> <li> <p>CLI - Specify the Region when you use the CloudFront scope: <code>--scope=CLOUDFRONT --region=us-east-1</code>. </p> </li> <li> <p>API and SDKs - For all calls, use the Region endpoint us-east-1. </p> </li> </ul>"
         },
         "Id":{
           "shape":"EntityId",
@@ -6129,6 +6421,10 @@
           "shape":"VisibilityConfig",
           "documentation":"<p>Defines and enables Amazon CloudWatch metrics and web request sample collection. </p>"
         },
+        "DataProtectionConfig":{
+          "shape":"DataProtectionConfig",
+          "documentation":"<p>Specifies data protection to apply to the web request data for the web ACL. This is a web ACL level data protection option. </p> <p>The data protection that you configure for the web ACL alters the data that's available for any other data collection activity, including your WAF logging destinations, web ACL request sampling, and Amazon Security Lake data collection and management. Your other option for data protection is in the logging configuration, which only affects logging. </p>"
+        },
         "LockToken":{
           "shape":"LockToken",
           "documentation":"<p>A token used for optimistic locking. WAF returns a token to your <code>get</code> and <code>list</code> requests, to mark the state of the entity at the time of the request. To make changes to the entity associated with the token, you provide the token to operations like <code>update</code> and <code>delete</code>. WAF uses the token to ensure that no changes have been made to the entity since you last retrieved it. If a change has been made, the update fails with a <code>WAFOptimisticLockException</code>. If this happens, perform another <code>get</code>, and use the new token returned by that operation. </p>"
@@ -6152,6 +6448,14 @@
         "AssociationConfig":{
           "shape":"AssociationConfig",
           "documentation":"<p>Specifies custom configurations for the associations between the web ACL and protected resources. </p> <p>Use this to customize the maximum size of the request body that your protected resources forward to WAF for inspection. You can customize this setting for CloudFront, API Gateway, Amazon Cognito, App Runner, or Verified Access resources. The default setting is 16 KB (16,384 bytes). </p> <note> <p>You are charged additional fees when your protected resources forward body sizes that are larger than the default. For more information, see <a href=\"http://aws.amazon.com/waf/pricing/\">WAF Pricing</a>.</p> </note> <p>For Application Load Balancer and AppSync, the limit is fixed at 8 KB (8,192 bytes).</p>"
+        },
+        "OnSourceDDoSProtectionConfig":{
+          "shape":"OnSourceDDoSProtectionConfig",
+          "documentation":"<p>Specifies the type of DDoS protection to apply to web request data for a web ACL. For most scenarios, it is recommended to use the default protection level, <code>ACTIVE_UNDER_DDOS</code>. If a web ACL is associated with multiple Application Load Balancers, the changes you make to DDoS protection in that web ACL will apply to all associated Application Load Balancers.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>Configures the ability for the WAF console to store and retrieve application attributes. Application attributes help WAF give recommendations for protection packs.</p> <p>When using <code>UpdateWebACL</code>, <code>ApplicationConfig</code> follows these rules:</p> <ul> <li> <p>If you omit <code>ApplicationConfig</code> from the request, all existing entries in the web ACL are retained.</p> </li> <li> <p>If you include <code>ApplicationConfig</code>, entries must match the existing values exactly. Any attempt to modify existing entries will result in an error.</p> </li> </ul>"
         }
       }
     },
@@ -6164,12 +6468,28 @@
         }
       }
     },
-    "UriPath":{
+    "UriFragment":{
       "type":"structure",
       "members":{
+        "FallbackBehavior":{
+          "shape":"FallbackBehavior",
+          "documentation":"<p>What WAF should do if it fails to completely parse the JSON body. The options are the following:</p> <ul> <li> <p> <code>EVALUATE_AS_STRING</code> - Inspect the body as plain text. WAF applies the text transformations and inspection criteria that you defined for the JSON inspection to the body text string.</p> </li> <li> <p> <code>MATCH</code> - Treat the web request as matching the rule statement. WAF applies the rule action to the request.</p> </li> <li> <p> <code>NO_MATCH</code> - Treat the web request as not matching the rule statement.</p> </li> </ul> <p>If you don't provide this setting, WAF parses and evaluates the content only up to the first parsing failure that it encounters. </p> <p>Example JSON: <code>{ \"UriFragment\": { \"FallbackBehavior\": \"MATCH\"} }</code> </p> <note> <p>WAF parsing doesn't fully validate the input JSON string, so parsing can succeed even for invalid JSON. When parsing succeeds, WAF doesn't apply the fallback behavior. For more information, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-fields-list.html#waf-rule-statement-request-component-json-body\">JSON body</a> in the <i>WAF Developer Guide</i>.</p> </note>"
+        }
       },
+      "documentation":"<p>Inspect fragments of the request URI. You can specify the parts of the URI fragment to inspect and you can narrow the set of URI fragments to inspect by including or excluding specific keys. </p> <p>This is used to indicate the web request component to inspect, in the <a>FieldToMatch</a> specification. </p> <p>Example JSON: <code>\"UriFragment\": { \"MatchPattern\": { \"All\": {} }, \"MatchScope\": \"KEY\", \"OversizeHandling\": \"MATCH\" }</code> </p>"
+    },
+    "UriPath":{
+      "type":"structure",
+      "members":{},
       "documentation":"<p>Inspect the path component of the URI of the web request. This is the part of the web request that identifies a resource. For example, <code>/images/daily-ad.jpg</code>.</p> <p>This is used in the <a>FieldToMatch</a> specification for some web request component types. </p> <p>JSON specification: <code>\"UriPath\": {}</code> </p>"
     },
+    "UsageOfAction":{
+      "type":"string",
+      "enum":[
+        "ENABLED",
+        "DISABLED"
+      ]
+    },
     "UsernameField":{
       "type":"structure",
       "required":["Identifier"],
@@ -6222,7 +6542,7 @@
       "members":{
         "SampledRequestsEnabled":{
           "shape":"Boolean",
-          "documentation":"<p>Indicates whether WAF should store a sampling of the web requests that match the rules. You can view the sampled requests through the WAF console. </p> <note> <p>Request sampling doesn't provide a field redaction option, and any field redaction that you specify in your logging configuration doesn't affect sampling. The only way to exclude fields from request sampling is by disabling sampling in the web ACL visibility configuration. </p> </note>"
+          "documentation":"<p>Indicates whether WAF should store a sampling of the web requests that match the rules. You can view the sampled requests through the WAF console. </p> <p>If you configure data protection for the web ACL, the protection applies to the web ACL's sampled web request data. </p> <note> <p>Request sampling doesn't provide a field redaction option, and any field redaction that you specify in your logging configuration doesn't affect sampling. You can only exclude fields from request sampling by disabling sampling in the web ACL visibility configuration or by configuring data protection for the web ACL.</p> </note>"
         },
         "CloudWatchMetricsEnabled":{
           "shape":"Boolean",
@@ -6394,7 +6714,7 @@
       "members":{
         "Message":{"shape":"ErrorMessage"}
       },
-      "documentation":"<p>WAF couldn’t retrieve a resource that you specified for this operation. If you've just created a resource that you're using in this operation, you might just need to wait a few minutes. It can take from a few seconds to a number of minutes for changes to propagate. Verify the resources that you are specifying in your request parameters and then retry the operation.</p>",
+      "documentation":"<p>WAF couldn’t retrieve a resource that you specified for this operation. If you've just created a resource that you're using in this operation, you might just need to wait a few minutes. It can take from a few seconds to a number of minutes for changes to propagate. Verify the resource specifications in your request parameters and then retry the operation.</p>",
       "exception":true
     },
     "WAFUnsupportedAggregateKeyTypeException":{
@@ -6443,6 +6763,10 @@
           "shape":"VisibilityConfig",
           "documentation":"<p>Defines and enables Amazon CloudWatch metrics and web request sample collection. </p>"
         },
+        "DataProtectionConfig":{
+          "shape":"DataProtectionConfig",
+          "documentation":"<p>Specifies data protection to apply to the web request data for the web ACL. This is a web ACL level data protection option. </p> <p>The data protection that you configure for the web ACL alters the data that's available for any other data collection activity, including your WAF logging destinations, web ACL request sampling, and Amazon Security Lake data collection and management. Your other option for data protection is in the logging configuration, which only affects logging. </p>"
+        },
         "Capacity":{
           "shape":"ConsumedCapacity",
           "documentation":"<p>The web ACL capacity units (WCUs) currently being used by this web ACL. </p> <p>WAF uses WCUs to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. WAF calculates capacity differently for each rule type, to reflect the relative cost of each rule. Simple rules that cost little to run use fewer WCUs than more complex rules that use more processing power. Rule group capacity is fixed at creation, which helps users plan their web ACL WCU usage when they use a rule group. For more information, see <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/aws-waf-capacity-units.html\">WAF web ACL capacity units (WCU)</a> in the <i>WAF Developer Guide</i>. </p>"
@@ -6486,9 +6810,17 @@
         "RetrofittedByFirewallManager":{
           "shape":"Boolean",
           "documentation":"<p>Indicates whether this web ACL was created by a customer account and then retrofitted by Firewall Manager. If true, then the web ACL is currently being managed by a Firewall Manager WAF policy, and only Firewall Manager can manage any Firewall Manager rule groups in the web ACL. See also the properties <code>ManagedByFirewallManager</code>, <code>PreProcessFirewallManagerRuleGroups</code>, and <code>PostProcessFirewallManagerRuleGroups</code>. </p>"
+        },
+        "OnSourceDDoSProtectionConfig":{
+          "shape":"OnSourceDDoSProtectionConfig",
+          "documentation":"<p>Configures the level of DDoS protection that applies to web ACLs associated with Application Load Balancers.</p>"
+        },
+        "ApplicationConfig":{
+          "shape":"ApplicationConfig",
+          "documentation":"<p>Returns a list of <code>ApplicationAttribute</code>s.</p>"
         }
       },
-      "documentation":"<p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resources can be an Amazon CloudFront distribution, an Amazon API Gateway REST API, an Application Load Balancer, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p>"
+      "documentation":"<p> A web ACL defines a collection of rules to use to inspect and control web requests. Each rule has a statement that defines what to look for in web requests and an action that WAF applies to requests that match the statement. In the web ACL, you assign a default action to take (allow, block) for any request that does not match any of the rules. The rules in a web ACL can be a combination of the types <a>Rule</a>, <a>RuleGroup</a>, and managed rule group. You can associate a web ACL with one or more Amazon Web Services resources to protect. The resource types include Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, App Runner service, Amplify application, and Amazon Web Services Verified Access instance. </p>"
     },
     "WebACLSummaries":{
       "type":"list",
@@ -6539,5 +6871,5 @@
       "documentation":"<p>A rule statement that inspects for cross-site scripting (XSS) attacks. In XSS attacks, the attacker uses vulnerabilities in a benign website as a vehicle to inject malicious client-site scripts into other legitimate web browsers. </p>"
     }
   },
-  "documentation":"<fullname>WAF</fullname> <note> <p>This is the latest version of the <b>WAF</b> API, released in November, 2019. The names of the entities that you use to access this API, like endpoints and namespaces, all have the versioning information added, like \"V2\" or \"v2\", to distinguish from the prior version. We recommend migrating your resources to this version, because it has a number of significant improvements.</p> <p>If you used WAF prior to this release, you can't use this WAFV2 API to access any WAF resources that you created before. WAF Classic support will end on September 30, 2025. </p> <p>For information about WAF, including how to migrate your WAF Classic resources to this version, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html\">WAF Developer Guide</a>. </p> </note> <p>WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to an Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, App Runner service, or Amazon Web Services Verified Access instance. WAF also lets you control access to your content, to protect the Amazon Web Services resource that WAF is monitoring. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, the protected resource responds to requests with either the requested content, an HTTP 403 status code (Forbidden), or with a custom response. </p> <p>This API guide is for developers who need detailed information about WAF API actions, data types, and errors. For detailed information about WAF features and guidance for configuring and using WAF, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html\">WAF Developer Guide</a>.</p> <p>You can make calls using the endpoints listed in <a href=\"https://docs.aws.amazon.com/general/latest/gr/waf.html\">WAF endpoints and quotas</a>. </p> <ul> <li> <p>For regional applications, you can use any of the endpoints in the list. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> </li> <li> <p>For Amazon CloudFront applications, you must use the API endpoint listed for US East (N. Virginia): us-east-1.</p> </li> </ul> <p>Alternatively, you can use one of the Amazon Web Services SDKs to access an API that's tailored to the programming language or platform that you're using. For more information, see <a href=\"http://aws.amazon.com/tools/#SDKs\">Amazon Web Services SDKs</a>.</p>"
+  "documentation":"<fullname>WAF </fullname> <note> <p>This is the latest version of the <b>WAF</b> API, released in November, 2019. The names of the entities that you use to access this API, like endpoints and namespaces, all have the versioning information added, like \"V2\" or \"v2\", to distinguish from the prior version. We recommend migrating your resources to this version, because it has a number of significant improvements.</p> <p>If you used WAF prior to this release, you can't use this WAFV2 API to access any WAF resources that you created before. WAF Classic support will end on September 30, 2025. </p> <p>For information about WAF, including how to migrate your WAF Classic resources to this version, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html\">WAF Developer Guide</a>. </p> </note> <p>WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to a protected resource. Protected resource types include Amazon CloudFront distribution, Amazon API Gateway REST API, Application Load Balancer, AppSync GraphQL API, Amazon Cognito user pool, App Runner service, Amplify application, and Amazon Web Services Verified Access instance. WAF also lets you control access to your content, to protect the Amazon Web Services resource that WAF is monitoring. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, the protected resource responds to requests with either the requested content, an HTTP 403 status code (Forbidden), or with a custom response. </p> <p>This API guide is for developers who need detailed information about WAF API actions, data types, and errors. For detailed information about WAF features and guidance for configuring and using WAF, see the <a href=\"https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html\">WAF Developer Guide</a>.</p> <p>You can make calls using the endpoints listed in <a href=\"https://docs.aws.amazon.com/general/latest/gr/waf.html\">WAF endpoints and quotas</a>. </p> <ul> <li> <p>For regional resources, you can use any of the endpoints in the list. A regional application can be an Application Load Balancer (ALB), an Amazon API Gateway REST API, an AppSync GraphQL API, an Amazon Cognito user pool, an App Runner service, or an Amazon Web Services Verified Access instance. </p> </li> <li> <p>For Amazon CloudFront and Amplify, you must use the API endpoint listed for US East (N. Virginia): us-east-1.</p> </li> </ul> <p>Alternatively, you can use one of the Amazon Web Services SDKs to access an API that's tailored to the programming language or platform that you're using. For more information, see <a href=\"http://aws.amazon.com/tools/#SDKs\">Amazon Web Services SDKs</a>.</p>"
 }
diff -pruN 2.23.6-1/awscli/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/wellarchitected/2020-03-31/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/wellarchitected/2020-03-31/service-2.json 2.31.35-1/awscli/botocore/data/wellarchitected/2020-03-31/service-2.json
--- 2.23.6-1/awscli/botocore/data/wellarchitected/2020-03-31/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/wellarchitected/2020-03-31/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,12 +5,14 @@
     "endpointPrefix":"wellarchitected",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceAbbreviation":"Well-Architected",
     "serviceFullName":"AWS Well-Architected Tool",
     "serviceId":"WellArchitected",
     "signatureVersion":"v4",
     "signingName":"wellarchitected",
-    "uid":"wellarchitected-2020-03-31"
+    "uid":"wellarchitected-2020-03-31",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AssociateLenses":{
@@ -2780,8 +2782,7 @@
     },
     "GetProfileTemplateInput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetProfileTemplateOutput":{
       "type":"structure",
@@ -5117,8 +5118,7 @@
     },
     "TagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -5214,8 +5214,7 @@
     },
     "UntagResourceOutput":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAnswerInput":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/wisdom/2020-10-19/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workdocs/2016-05-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/workdocs/2016-05-01/service-2.json 2.31.35-1/awscli/botocore/data/workdocs/2016-05-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/workdocs/2016-05-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workdocs/2016-05-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,10 +5,12 @@
     "endpointPrefix":"workdocs",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon WorkDocs",
     "serviceId":"WorkDocs",
     "signatureVersion":"v4",
-    "uid":"workdocs-2016-05-01"
+    "uid":"workdocs-2016-05-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "AbortDocumentVersionUpload":{
@@ -1280,8 +1282,7 @@
     },
     "CreateCustomMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateFolderRequest":{
       "type":"structure",
@@ -1339,8 +1340,7 @@
     },
     "CreateLabelsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateNotificationSubscriptionRequest":{
       "type":"structure",
@@ -1505,8 +1505,7 @@
     },
     "DeactivatingLastSystemUserException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The last user in the organization is being deactivated.</p>",
       "error":{"httpStatusCode":409},
       "exception":true
@@ -1583,8 +1582,7 @@
     },
     "DeleteCustomMetadataResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteDocumentRequest":{
       "type":"structure",
@@ -1706,8 +1704,7 @@
     },
     "DeleteLabelsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteNotificationSubscriptionRequest":{
       "type":"structure",
@@ -3897,8 +3894,7 @@
     },
     "UnauthorizedOperationException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operation is not permitted.</p>",
       "error":{"httpStatusCode":403},
       "exception":true
diff -pruN 2.23.6-1/awscli/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workmail/2017-10-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/workmail/2017-10-01/service-2.json 2.31.35-1/awscli/botocore/data/workmail/2017-10-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/workmail/2017-10-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workmail/2017-10-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1348,7 +1348,8 @@
         {"shape":"MailDomainNotFoundException"},
         {"shape":"MailDomainStateException"},
         {"shape":"OrganizationNotFoundException"},
-        {"shape":"OrganizationStateException"}
+        {"shape":"OrganizationStateException"},
+        {"shape":"UnsupportedOperationException"}
       ],
       "documentation":"<p>Registers an existing and disabled user, group, or resource for WorkMail use by associating a mailbox and calendaring capabilities. It performs no change if the user, group, or resource is enabled and fails if the user, group, or resource is deleted. This operation results in the accumulation of costs. For more information, see <a href=\"https://aws.amazon.com/workmail/pricing\">Pricing</a>. The equivalent console functionality for this operation is <i>Enable</i>.</p> <p>Users can either be created by calling the <a>CreateUser</a> API operation or they can be synchronized from your directory. For more information, see <a>DeregisterFromWorkMail</a>.</p>",
       "idempotent":true
@@ -1766,8 +1767,7 @@
     },
     "AssociateDelegateToResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateMemberToGroupRequest":{
       "type":"structure",
@@ -1793,8 +1793,7 @@
     },
     "AssociateMemberToGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssumeImpersonationRoleRequest":{
       "type":"structure",
@@ -1912,8 +1911,7 @@
     },
     "CancelMailboxExportJobResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateAliasRequest":{
       "type":"structure",
@@ -1939,8 +1937,7 @@
     },
     "CreateAliasResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateAvailabilityConfigurationRequest":{
       "type":"structure",
@@ -1974,8 +1971,7 @@
     },
     "CreateAvailabilityConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateGroupRequest":{
       "type":"structure",
@@ -2326,8 +2322,7 @@
     },
     "DeleteAccessControlRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAliasRequest":{
       "type":"structure",
@@ -2353,8 +2348,7 @@
     },
     "DeleteAliasResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteAvailabilityConfigurationRequest":{
       "type":"structure",
@@ -2375,8 +2369,7 @@
     },
     "DeleteAvailabilityConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteEmailMonitoringConfigurationRequest":{
       "type":"structure",
@@ -2390,8 +2383,7 @@
     },
     "DeleteEmailMonitoringConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteGroupRequest":{
       "type":"structure",
@@ -2412,8 +2404,7 @@
     },
     "DeleteGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIdentityCenterApplicationRequest":{
       "type":"structure",
@@ -2427,8 +2418,7 @@
     },
     "DeleteIdentityCenterApplicationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIdentityProviderConfigurationRequest":{
       "type":"structure",
@@ -2442,8 +2432,7 @@
     },
     "DeleteIdentityProviderConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteImpersonationRoleRequest":{
       "type":"structure",
@@ -2464,8 +2453,7 @@
     },
     "DeleteImpersonationRoleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMailboxPermissionsRequest":{
       "type":"structure",
@@ -2491,8 +2479,7 @@
     },
     "DeleteMailboxPermissionsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMobileDeviceAccessOverrideRequest":{
       "type":"structure",
@@ -2518,8 +2505,7 @@
     },
     "DeleteMobileDeviceAccessOverrideResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteMobileDeviceAccessRuleRequest":{
       "type":"structure",
@@ -2540,8 +2526,7 @@
     },
     "DeleteMobileDeviceAccessRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteOrganizationRequest":{
       "type":"structure",
@@ -2605,8 +2590,7 @@
     },
     "DeletePersonalAccessTokenResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourceRequest":{
       "type":"structure",
@@ -2627,8 +2611,7 @@
     },
     "DeleteResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteRetentionPolicyRequest":{
       "type":"structure",
@@ -2649,8 +2632,7 @@
     },
     "DeleteRetentionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteUserRequest":{
       "type":"structure",
@@ -2671,8 +2653,7 @@
     },
     "DeleteUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterFromWorkMailRequest":{
       "type":"structure",
@@ -2693,8 +2674,7 @@
     },
     "DeregisterFromWorkMailResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeregisterMailDomainRequest":{
       "type":"structure",
@@ -2715,8 +2695,7 @@
     },
     "DeregisterMailDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeEmailMonitoringConfigurationRequest":{
       "type":"structure",
@@ -3298,8 +3277,7 @@
     },
     "DisassociateDelegateFromResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateMemberFromGroupRequest":{
       "type":"structure",
@@ -3325,8 +3303,7 @@
     },
     "DisassociateMemberFromGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DnsRecord":{
       "type":"structure",
@@ -5502,14 +5479,12 @@
     },
     "PutAccessControlRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutEmailMonitoringConfigurationRequest":{
       "type":"structure",
       "required":[
         "OrganizationId",
-        "RoleArn",
         "LogGroupArn"
       ],
       "members":{
@@ -5519,7 +5494,7 @@
         },
         "RoleArn":{
           "shape":"RoleArn",
-          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Role associated with the email monitoring configuration.</p>"
+          "documentation":"<p>The Amazon Resource Name (ARN) of the IAM Role associated with the email monitoring configuration. If absent, the IAM Role Arn of AWSServiceRoleForAmazonWorkMailEvents will be used.</p>"
         },
         "LogGroupArn":{
           "shape":"LogGroupArn",
@@ -5529,8 +5504,7 @@
     },
     "PutEmailMonitoringConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutIdentityProviderConfigurationRequest":{
       "type":"structure",
@@ -5561,8 +5535,7 @@
     },
     "PutIdentityProviderConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutInboundDmarcSettingsRequest":{
       "type":"structure",
@@ -5583,8 +5556,7 @@
     },
     "PutInboundDmarcSettingsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutMailboxPermissionsRequest":{
       "type":"structure",
@@ -5615,8 +5587,7 @@
     },
     "PutMailboxPermissionsResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutMobileDeviceAccessOverrideRequest":{
       "type":"structure",
@@ -5651,8 +5622,7 @@
     },
     "PutMobileDeviceAccessOverrideResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutRetentionPolicyRequest":{
       "type":"structure",
@@ -5686,8 +5656,7 @@
     },
     "PutRetentionPolicyResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RedactedEwsAvailabilityProvider":{
       "type":"structure",
@@ -5727,8 +5696,7 @@
     },
     "RegisterMailDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RegisterToWorkMailRequest":{
       "type":"structure",
@@ -5754,8 +5722,7 @@
     },
     "RegisterToWorkMailResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ReservedNameException":{
       "type":"structure",
@@ -5789,8 +5756,7 @@
     },
     "ResetPasswordResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Resource":{
       "type":"structure",
@@ -6023,8 +5989,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -6102,8 +6067,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateAvailabilityConfigurationRequest":{
       "type":"structure",
@@ -6132,8 +6096,7 @@
     },
     "UpdateAvailabilityConfigurationResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDefaultMailDomainRequest":{
       "type":"structure",
@@ -6154,8 +6117,7 @@
     },
     "UpdateDefaultMailDomainResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateGroupRequest":{
       "type":"structure",
@@ -6180,8 +6142,7 @@
     },
     "UpdateGroupResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateImpersonationRoleRequest":{
       "type":"structure",
@@ -6221,8 +6182,7 @@
     },
     "UpdateImpersonationRoleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMailboxQuotaRequest":{
       "type":"structure",
@@ -6248,8 +6208,7 @@
     },
     "UpdateMailboxQuotaResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateMobileDeviceAccessRuleRequest":{
       "type":"structure",
@@ -6316,8 +6275,7 @@
     },
     "UpdateMobileDeviceAccessRuleResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdatePrimaryEmailAddressRequest":{
       "type":"structure",
@@ -6343,8 +6301,7 @@
     },
     "UpdatePrimaryEmailAddressResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateResourceRequest":{
       "type":"structure",
@@ -6385,8 +6342,7 @@
     },
     "UpdateResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateUserRequest":{
       "type":"structure",
@@ -6471,8 +6427,7 @@
     },
     "UpdateUserResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "Url":{
       "type":"string",
diff -pruN 2.23.6-1/awscli/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workmailmessageflow/2019-05-01/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
@@ -40,7 +40,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -83,7 +82,8 @@
                     },
                     "type": "endpoint"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [
@@ -96,7 +96,6 @@
                     ]
                 }
             ],
-            "type": "tree",
             "rules": [
                 {
                     "conditions": [
@@ -110,7 +109,6 @@
                             "assign": "PartitionResult"
                         }
                     ],
-                    "type": "tree",
                     "rules": [
                         {
                             "conditions": [
@@ -133,7 +131,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -168,7 +165,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -179,14 +175,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS and DualStack are enabled, but this partition does not support one or both",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -200,14 +198,12 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
                                         {
                                             "fn": "booleanEquals",
                                             "argv": [
-                                                true,
                                                 {
                                                     "fn": "getAttr",
                                                     "argv": [
@@ -216,11 +212,11 @@
                                                         },
                                                         "supportsFIPS"
                                                     ]
-                                                }
+                                                },
+                                                true
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -231,14 +227,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "FIPS is enabled but this partition does not support FIPS",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [
@@ -252,7 +250,6 @@
                                     ]
                                 }
                             ],
-                            "type": "tree",
                             "rules": [
                                 {
                                     "conditions": [
@@ -272,7 +269,6 @@
                                             ]
                                         }
                                     ],
-                                    "type": "tree",
                                     "rules": [
                                         {
                                             "conditions": [],
@@ -283,14 +279,16 @@
                                             },
                                             "type": "endpoint"
                                         }
-                                    ]
+                                    ],
+                                    "type": "tree"
                                 },
                                 {
                                     "conditions": [],
                                     "error": "DualStack is enabled but this partition does not support DualStack",
                                     "type": "error"
                                 }
-                            ]
+                            ],
+                            "type": "tree"
                         },
                         {
                             "conditions": [],
@@ -301,9 +299,11 @@
                             },
                             "type": "endpoint"
                         }
-                    ]
+                    ],
+                    "type": "tree"
                 }
-            ]
+            ],
+            "type": "tree"
         },
         {
             "conditions": [],
diff -pruN 2.23.6-1/awscli/botocore/data/workmailmessageflow/2019-05-01/service-2.json 2.31.35-1/awscli/botocore/data/workmailmessageflow/2019-05-01/service-2.json
--- 2.23.6-1/awscli/botocore/data/workmailmessageflow/2019-05-01/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workmailmessageflow/2019-05-01/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,10 +5,12 @@
     "endpointPrefix":"workmailmessageflow",
     "jsonVersion":"1.1",
     "protocol":"rest-json",
+    "protocols":["rest-json"],
     "serviceFullName":"Amazon WorkMail Message Flow",
     "serviceId":"WorkMailMessageFlow",
     "signatureVersion":"v4",
-    "uid":"workmailmessageflow-2019-05-01"
+    "uid":"workmailmessageflow-2019-05-01",
+    "auth":["aws.auth#sigv4"]
   },
   "operations":{
     "GetRawMessageContent":{
@@ -110,8 +112,7 @@
     },
     "PutRawMessageContentResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RawMessageContent":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces/2015-04-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces/2015-04-08/service-2.json 2.31.35-1/awscli/botocore/data/workspaces/2015-04-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces/2015-04-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces/2015-04-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -123,7 +123,7 @@
         {"shape":"AccessDeniedException"},
         {"shape":"InvalidParameterValuesException"}
       ],
-      "documentation":"<p>Copies the specified image from the specified Region to the current Region. For more information about copying images, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/copy-custom-image.html\"> Copy a Custom WorkSpaces Image</a>.</p> <p>In the China (Ningxia) Region, you can copy images only within the same Region.</p> <p>In Amazon Web Services GovCloud (US), to copy images to and from other Regions, contact Amazon Web Services Support.</p> <important> <p>Before copying a shared image, be sure to verify that it has been shared from the correct Amazon Web Services account. To determine if an image has been shared and to see the ID of the Amazon Web Services account that owns an image, use the <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImages.html\">DescribeWorkSpaceImages</a> and <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImagePermissions.html\">DescribeWorkspaceImagePermissions</a> API operations. </p> </important>"
+      "documentation":"<p>Copies the specified image from the specified Region to the current Region. For more information about copying images, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/copy-custom-image.html\"> Copy a Custom WorkSpaces Image</a>.</p> <p>In the China (Ningxia) Region, you can copy images only within the same Region.</p> <p>In Amazon Web Services GovCloud (US), to copy images to and from other Regions, contact Amazon Web ServicesSupport.</p> <important> <p>Before copying a shared image, be sure to verify that it has been shared from the correct Amazon Web Services account. To determine if an image has been shared and to see the ID of the Amazon Web Services account that owns an image, use the <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImages.html\">DescribeWorkSpaceImages</a> and <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaceImagePermissions.html\">DescribeWorkspaceImagePermissions</a> API operations. </p> </important>"
     },
     "CreateAccountLinkInvitation":{
       "name":"CreateAccountLinkInvitation",
@@ -624,6 +624,20 @@
       ],
       "documentation":"<p>Retrieves a list that describes the connection aliases used for cross-Region redirection. For more information, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/cross-region-redirection.html\"> Cross-Region Redirection for Amazon WorkSpaces</a>.</p>"
     },
+    "DescribeCustomWorkspaceImageImport":{
+      "name":"DescribeCustomWorkspaceImageImport",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DescribeCustomWorkspaceImageImportRequest"},
+      "output":{"shape":"DescribeCustomWorkspaceImageImportResult"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"}
+      ],
+      "documentation":"<p>Retrieves information about a WorkSpace BYOL image being imported via ImportCustomWorkspaceImage.</p>"
+    },
     "DescribeImageAssociations":{
       "name":"DescribeImageAssociations",
       "http":{
@@ -892,6 +906,24 @@
       ],
       "documentation":"<p>Imports client branding. Client branding allows you to customize your WorkSpace's client login portal. You can tailor your login portal company logo, the support email address, support link, link to reset password, and a custom message for users trying to sign in.</p> <p>After you import client branding, the default branding experience for the specified platform type is replaced with the imported experience</p> <note> <ul> <li> <p>You must specify at least one platform type when importing client branding.</p> </li> <li> <p>You can import up to 6 MB of data with each request. If your request exceeds this limit, you can import client branding for different platform types using separate requests.</p> </li> <li> <p>In each platform type, the <code>SupportEmail</code> and <code>SupportLink</code> parameters are mutually exclusive. You can specify only one parameter for each platform type, but not both.</p> </li> <li> <p>Imported data can take up to a minute to appear in the WorkSpaces client.</p> </li> </ul> </note>"
     },
+    "ImportCustomWorkspaceImage":{
+      "name":"ImportCustomWorkspaceImage",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ImportCustomWorkspaceImageRequest"},
+      "output":{"shape":"ImportCustomWorkspaceImageResult"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterValuesException"},
+        {"shape":"OperationNotSupportedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ResourceAlreadyExistsException"},
+        {"shape":"ResourceLimitExceededException"}
+      ],
+      "documentation":"<p>Imports the specified Windows 10 or 11 Bring Your Own License (BYOL) image into Amazon WorkSpaces using EC2 Image Builder. The image must be an already licensed image that is in your Amazon Web Services account, and you must own the image. For more information about creating BYOL images, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/byol-windows-images.html\"> Bring Your Own Windows Desktop Licenses</a>. </p>"
+    },
     "ImportWorkspaceImage":{
       "name":"ImportWorkspaceImage",
       "http":{
@@ -1006,6 +1038,21 @@
       ],
       "documentation":"<p>Modifies the properties of the specified Amazon WorkSpaces clients.</p>"
     },
+    "ModifyEndpointEncryptionMode":{
+      "name":"ModifyEndpointEncryptionMode",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ModifyEndpointEncryptionModeRequest"},
+      "output":{"shape":"ModifyEndpointEncryptionModeResponse"},
+      "errors":[
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"OperationNotSupportedException"}
+      ],
+      "documentation":"<p>Modifies the endpoint encryption mode that allows you to configure the specified directory between Standard TLS and FIPS 140-2 validated mode. </p>"
+    },
     "ModifySamlProperties":{
       "name":"ModifySamlProperties",
       "http":{
@@ -1064,7 +1111,10 @@
       "output":{"shape":"ModifyWorkspaceAccessPropertiesResult"},
       "errors":[
         {"shape":"ResourceNotFoundException"},
-        {"shape":"AccessDeniedException"}
+        {"shape":"AccessDeniedException"},
+        {"shape":"InvalidParameterValuesException"},
+        {"shape":"InvalidParameterCombinationException"},
+        {"shape":"OperationNotSupportedException"}
       ],
       "documentation":"<p>Specifies which devices and operating systems users can use to access their WorkSpaces. For more information, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/update-directory-details.html#control-device-access\"> Control Device Access</a>.</p>"
     },
@@ -1279,7 +1329,7 @@
       },
       "input":{"shape":"TerminateWorkspacesRequest"},
       "output":{"shape":"TerminateWorkspacesResult"},
-      "documentation":"<p>Terminates the specified WorkSpaces.</p> <important> <p>Terminating a WorkSpace is a permanent action and cannot be undone. The user's data is destroyed. If you need to archive any user data, contact Amazon Web Services Support before terminating the WorkSpace.</p> </important> <p>You can terminate a WorkSpace that is in any state except <code>SUSPENDED</code>.</p> <p>This operation is asynchronous and returns before the WorkSpaces have been completely terminated. After a WorkSpace is terminated, the <code>TERMINATED</code> state is returned only briefly before the WorkSpace directory metadata is cleaned up, so this state is rarely returned. To confirm that a WorkSpace is terminated, check for the WorkSpace ID by using <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html\"> DescribeWorkSpaces</a>. If the WorkSpace ID isn't returned, then the WorkSpace has been successfully terminated.</p> <note> <p>Simple AD and AD Connector are made available to you free of charge to use with WorkSpaces. If there are no WorkSpaces being used with your Simple AD or AD Connector directory for 30 consecutive days, this directory will be automatically deregistered for use with Amazon WorkSpaces, and you will be charged for this directory as per the <a href=\"http://aws.amazon.com/directoryservice/pricing/\">Directory Service pricing terms</a>.</p> <p>To delete empty directories, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/delete-workspaces-directory.html\"> Delete the Directory for Your WorkSpaces</a>. If you delete your Simple AD or AD Connector directory, you can always create a new one when you want to start using WorkSpaces again.</p> </note>"
+      "documentation":"<p>Terminates the specified WorkSpaces.</p> <important> <p>Terminating a WorkSpace is a permanent action and cannot be undone. The user's data is destroyed. If you need to archive any user data, contact Amazon Web ServicesSupport before terminating the WorkSpace.</p> </important> <p>You can terminate a WorkSpace that is in any state except <code>SUSPENDED</code>.</p> <p>This operation is asynchronous and returns before the WorkSpaces have been completely terminated. After a WorkSpace is terminated, the <code>TERMINATED</code> state is returned only briefly before the WorkSpace directory metadata is cleaned up, so this state is rarely returned. To confirm that a WorkSpace is terminated, check for the WorkSpace ID by using <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html\"> DescribeWorkSpaces</a>. If the WorkSpace ID isn't returned, then the WorkSpace has been successfully terminated.</p> <note> <p>Simple AD and AD Connector are made available to you free of charge to use with WorkSpaces. If there are no WorkSpaces being used with your Simple AD or AD Connector directory for 30 consecutive days, this directory will be automatically deregistered for use with Amazon WorkSpaces, and you will be charged for this directory as per the <a href=\"http://aws.amazon.com/directoryservice/pricing/\">Directory Service pricing terms</a>.</p> <p>To delete empty directories, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/delete-workspaces-directory.html\"> Delete the Directory for Your WorkSpaces</a>. If you delete your Simple AD or AD Connector directory, you can always create a new one when you want to start using WorkSpaces again.</p> </note>"
     },
     "TerminateWorkspacesPool":{
       "name":"TerminateWorkspacesPool",
@@ -1398,7 +1448,7 @@
         {"shape":"InvalidParameterValuesException"},
         {"shape":"OperationNotSupportedException"}
       ],
-      "documentation":"<p>Shares or unshares an image with one account in the same Amazon Web Services Region by specifying whether that account has permission to copy the image. If the copy image permission is granted, the image is shared with that account. If the copy image permission is revoked, the image is unshared with the account.</p> <p>After an image has been shared, the recipient account can copy the image to other Regions as needed.</p> <p>In the China (Ningxia) Region, you can copy images only within the same Region.</p> <p>In Amazon Web Services GovCloud (US), to copy images to and from other Regions, contact Amazon Web Services Support.</p> <p>For more information about sharing images, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/share-custom-image.html\"> Share or Unshare a Custom WorkSpaces Image</a>.</p> <note> <ul> <li> <p>To delete an image that has been shared, you must unshare the image before you delete it.</p> </li> <li> <p>Sharing Bring Your Own License (BYOL) images across Amazon Web Services accounts isn't supported at this time in Amazon Web Services GovCloud (US). To share BYOL images across accounts in Amazon Web Services GovCloud (US), contact Amazon Web Services Support.</p> </li> </ul> </note>"
+      "documentation":"<p>Shares or unshares an image with one account in the same Amazon Web Services Region by specifying whether that account has permission to copy the image. If the copy image permission is granted, the image is shared with that account. If the copy image permission is revoked, the image is unshared with the account.</p> <p>After an image has been shared, the recipient account can copy the image to other Regions as needed.</p> <p>In the China (Ningxia) Region, you can copy images only within the same Region.</p> <p>In Amazon Web Services GovCloud (US), to copy images to and from other Regions, contact Amazon Web ServicesSupport.</p> <p>For more information about sharing images, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/share-custom-image.html\"> Share or Unshare a Custom WorkSpaces Image</a>.</p> <note> <ul> <li> <p>To delete an image that has been shared, you must unshare the image before you delete it.</p> </li> <li> <p>Sharing Bring Your Own License (BYOL) images across Amazon Web Services accounts isn't supported at this time in Amazon Web Services GovCloud (US). To share BYOL images across accounts in Amazon Web Services GovCloud (US), contact Amazon Web ServicesSupport.</p> </li> </ul> </note>"
     },
     "UpdateWorkspacesPool":{
       "name":"UpdateWorkspacesPool",
@@ -1486,6 +1536,43 @@
       "documentation":"<p>The user is not authorized to access a resource.</p>",
       "exception":true
     },
+    "AccessEndpoint":{
+      "type":"structure",
+      "members":{
+        "AccessEndpointType":{
+          "shape":"AccessEndpointType",
+          "documentation":"<p>Indicates the type of access endpoint.</p>"
+        },
+        "VpcEndpointId":{
+          "shape":"AlphanumericDashUnderscoreNonEmptyString",
+          "documentation":"<p>Indicates the VPC endpoint to use for access.</p>"
+        }
+      },
+      "documentation":"<p>Describes the access type and endpoint for a WorkSpace.</p>"
+    },
+    "AccessEndpointConfig":{
+      "type":"structure",
+      "required":["AccessEndpoints"],
+      "members":{
+        "AccessEndpoints":{
+          "shape":"AccessEndpointList",
+          "documentation":"<p>Indicates a list of access endpoints associated with this directory.</p>"
+        },
+        "InternetFallbackProtocols":{
+          "shape":"InternetFallbackProtocolList",
+          "documentation":"<p>Indicates a list of protocols that fallback to using the public Internet when streaming over a VPC endpoint is not available.</p>"
+        }
+      },
+      "documentation":"<p>Describes the access endpoint configuration for a WorkSpace.</p>"
+    },
+    "AccessEndpointList":{
+      "type":"list",
+      "member":{"shape":"AccessEndpoint"}
+    },
+    "AccessEndpointType":{
+      "type":"string",
+      "enum":["STREAMING_WSP"]
+    },
     "AccessPropertyValue":{
       "type":"string",
       "enum":[
@@ -1602,6 +1689,10 @@
       "pattern":"^(http|https)\\://\\S+"
     },
     "Alias":{"type":"string"},
+    "AlphanumericDashUnderscoreNonEmptyString":{
+      "type":"string",
+      "pattern":"^[a-zA-Z0-9\\_\\-]{1,1000}$"
+    },
     "AmazonUuid":{
       "type":"string",
       "max":36,
@@ -1635,8 +1726,7 @@
     },
     "ApplicationNotSupportedException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified application is not supported.</p>",
       "exception":true
     },
@@ -1764,8 +1854,7 @@
     },
     "AssociateIpGroupsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AssociateWorkspaceApplicationRequest":{
       "type":"structure",
@@ -1864,8 +1953,7 @@
     },
     "AuthorizeIpRulesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "AvailableUserSessions":{
       "type":"integer",
@@ -2109,8 +2197,7 @@
     },
     "ComputeNotCompatibleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The compute type of the WorkSpace is not compatible with the application.</p>",
       "exception":true
     },
@@ -2479,8 +2566,7 @@
     },
     "CreateTagsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "CreateUpdatedWorkspaceImageRequest":{
       "type":"structure",
@@ -2658,6 +2744,10 @@
         "TimeoutSettings":{
           "shape":"TimeoutSettings",
           "documentation":"<p>Indicates the timeout settings of the pool.</p>"
+        },
+        "RunningMode":{
+          "shape":"PoolsRunningMode",
+          "documentation":"<p>The running mode for the pool.</p>"
         }
       }
     },
@@ -2693,6 +2783,41 @@
         }
       }
     },
+    "CustomImageProtocol":{
+      "type":"string",
+      "enum":[
+        "PCOIP",
+        "DCV",
+        "BYOP"
+      ]
+    },
+    "CustomWorkspaceImageImportErrorDetails":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"ErrorCode",
+          "documentation":"<p>The error code that is returned for the image import.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"ImageErrorMessage",
+          "documentation":"<p>The text of the error message that is returned for the image import.</p>"
+        }
+      },
+      "documentation":"<p>Describes in-depth details about the error. These details include the possible causes of the error and troubleshooting information.</p>"
+    },
+    "CustomWorkspaceImageImportErrorDetailsList":{
+      "type":"list",
+      "member":{"shape":"CustomWorkspaceImageImportErrorDetails"}
+    },
+    "CustomWorkspaceImageImportState":{
+      "type":"string",
+      "enum":[
+        "PENDING",
+        "IN_PROGRESS",
+        "COMPLETED",
+        "ERROR"
+      ]
+    },
     "DataReplication":{
       "type":"string",
       "enum":[
@@ -2809,10 +2934,6 @@
     "DefaultWorkspaceCreationProperties":{
       "type":"structure",
       "members":{
-        "EnableWorkDocs":{
-          "shape":"BooleanObject",
-          "documentation":"<p>Specifies whether the directory is enabled for Amazon WorkDocs.</p>"
-        },
         "EnableInternetAccess":{
           "shape":"BooleanObject",
           "documentation":"<p>Specifies whether to automatically assign an Elastic public IP address to WorkSpaces in this directory by default. If enabled, the Elastic public IP address allows outbound internet access from your WorkSpaces when you’re using an internet gateway in the Amazon VPC in which your WorkSpaces are located. If you're using a Network Address Translation (NAT) gateway for outbound internet access from your VPC, or if your WorkSpaces are in public subnets and you manually assign them Elastic IP addresses, you should disable this setting. This setting applies to new WorkSpaces that you launch or to existing WorkSpaces that you rebuild. For more information, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-vpc.html\"> Configure a VPC for Amazon WorkSpaces</a>.</p>"
@@ -2901,8 +3022,7 @@
     },
     "DeleteClientBrandingResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConnectClientAddInRequest":{
       "type":"structure",
@@ -2923,8 +3043,7 @@
     },
     "DeleteConnectClientAddInResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteConnectionAliasRequest":{
       "type":"structure",
@@ -2938,8 +3057,7 @@
     },
     "DeleteConnectionAliasResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteIpGroupRequest":{
       "type":"structure",
@@ -2953,8 +3071,7 @@
     },
     "DeleteIpGroupResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteTagsRequest":{
       "type":"structure",
@@ -2975,8 +3092,7 @@
     },
     "DeleteTagsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkspaceBundleRequest":{
       "type":"structure",
@@ -2989,8 +3105,7 @@
     },
     "DeleteWorkspaceBundleResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteWorkspaceImageRequest":{
       "type":"structure",
@@ -3004,8 +3119,7 @@
     },
     "DeleteWorkspaceImageResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeployWorkspaceApplicationsRequest":{
       "type":"structure",
@@ -3042,8 +3156,7 @@
     },
     "DeregisterWorkspaceDirectoryResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountModificationsRequest":{
       "type":"structure",
@@ -3069,8 +3182,7 @@
     },
     "DescribeAccountRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DescribeAccountResult":{
       "type":"structure",
@@ -3086,6 +3198,10 @@
         "DedicatedTenancyAccountType":{
           "shape":"DedicatedTenancyAccountType",
           "documentation":"<p>The type of linked account.</p>"
+        },
+        "Message":{
+          "shape":"Message",
+          "documentation":"<p>The text message to describe the status of BYOL.</p>"
         }
       }
     },
@@ -3357,6 +3473,53 @@
         }
       }
     },
+    "DescribeCustomWorkspaceImageImportRequest":{
+      "type":"structure",
+      "required":["ImageId"],
+      "members":{
+        "ImageId":{
+          "shape":"WorkspaceImageId",
+          "documentation":"<p>The identifier of the WorkSpace image.</p>"
+        }
+      }
+    },
+    "DescribeCustomWorkspaceImageImportResult":{
+      "type":"structure",
+      "members":{
+        "ImageId":{
+          "shape":"WorkspaceImageId",
+          "documentation":"<p>The identifier of the WorkSpace image.</p>"
+        },
+        "InfrastructureConfigurationArn":{
+          "shape":"InfrastructureConfigurationArn",
+          "documentation":"<p>The infrastructure configuration ARN that specifies how the WorkSpace image is built.</p>"
+        },
+        "State":{
+          "shape":"CustomWorkspaceImageImportState",
+          "documentation":"<p>The state of the WorkSpace image.</p>"
+        },
+        "Created":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the WorkSpace image import was created.</p>"
+        },
+        "LastUpdatedTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The timestamp when the WorkSpace image import was last updated.</p>"
+        },
+        "ImageSource":{
+          "shape":"ImageSourceIdentifier",
+          "documentation":"<p>Describes the image import source.</p>"
+        },
+        "ImageBuilderInstanceId":{
+          "shape":"NonEmptyString",
+          "documentation":"<p>The image builder instance ID of the WorkSpace image.</p>"
+        },
+        "ErrorDetails":{
+          "shape":"CustomWorkspaceImageImportErrorDetailsList",
+          "documentation":"<p>Describes in-depth details about the error. These details include the possible causes of the error and troubleshooting information.</p>"
+        }
+      }
+    },
     "DescribeImageAssociationsRequest":{
       "type":"structure",
       "required":[
@@ -3699,7 +3862,7 @@
         },
         "Limit":{
           "shape":"Limit50",
-          "documentation":"<p>The maximum number of items to return.</p>"
+          "documentation":"<p>The maximum size of each page of results. The default value is 20 and the maximum value is 50.</p>"
         },
         "NextToken":{
           "shape":"PaginationToken",
@@ -3888,8 +4051,7 @@
     },
     "DisassociateConnectionAliasResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateIpGroupsRequest":{
       "type":"structure",
@@ -3910,8 +4072,7 @@
     },
     "DisassociateIpGroupsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DisassociateWorkspaceApplicationRequest":{
       "type":"structure",
@@ -3948,6 +4109,10 @@
       "type":"list",
       "member":{"shape":"IpAddress"}
     },
+    "DnsIpv6Addresses":{
+      "type":"list",
+      "member":{"shape":"Ipv6Address"}
+    },
     "DomainName":{
       "type":"string",
       "pattern":"^([a-zA-Z0-9]+[.-])+([a-zA-Z0-9])+$"
@@ -3956,6 +4121,24 @@
       "type":"string",
       "pattern":"^ami\\-([a-f0-9]{8}|[a-f0-9]{17})$"
     },
+    "Ec2ImportTaskId":{
+      "type":"string",
+      "max":28,
+      "min":19,
+      "pattern":"^import-ami\\-([a-zA-Z0-9]{8}|[a-zA-Z0-9]{17})$"
+    },
+    "EndpointEncryptionMode":{
+      "type":"string",
+      "enum":[
+        "STANDARD_TLS",
+        "FIPS_VALIDATED"
+      ]
+    },
+    "ErrorCode":{
+      "type":"string",
+      "max":256,
+      "min":1
+    },
     "ErrorDetails":{
       "type":"structure",
       "members":{
@@ -4139,6 +4322,24 @@
       "type":"list",
       "member":{"shape":"ImageAssociatedResourceType"}
     },
+    "ImageBuildVersionArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"^arn:aws[^:]*:imagebuilder:[^:]+:(?:[0-9]{12}|aws(?:-[a-z-]+)?):image/[a-z0-9-_]+/(?:(?:([0-9]+|x)\\.([0-9]+|x)\\.([0-9]+|x))|(?:[0-9]+\\.[0-9]+\\.[0-9]+/[0-9]+))$"
+    },
+    "ImageComputeType":{
+      "type":"string",
+      "enum":[
+        "BASE",
+        "GRAPHICS_G4DN"
+      ]
+    },
+    "ImageErrorMessage":{
+      "type":"string",
+      "max":2048,
+      "min":1
+    },
     "ImagePermission":{
       "type":"structure",
       "members":{
@@ -4191,6 +4392,25 @@
       "type":"list",
       "member":{"shape":"ImageResourceAssociation"}
     },
+    "ImageSourceIdentifier":{
+      "type":"structure",
+      "members":{
+        "Ec2ImportTaskId":{
+          "shape":"Ec2ImportTaskId",
+          "documentation":"<p>The EC2 import task ID to import the image from the Amazon EC2 VM import process.</p>"
+        },
+        "ImageBuildVersionArn":{
+          "shape":"ImageBuildVersionArn",
+          "documentation":"<p>The ARN of the EC2 Image Builder image.</p>"
+        },
+        "Ec2ImageId":{
+          "shape":"Ec2ImageId",
+          "documentation":"<p>The identifier of the EC2 image.</p>"
+        }
+      },
+      "documentation":"<p>Describes the image import source.</p>",
+      "union":true
+    },
     "ImageType":{
       "type":"string",
       "enum":[
@@ -4261,6 +4481,70 @@
         }
       }
     },
+    "ImportCustomWorkspaceImageRequest":{
+      "type":"structure",
+      "required":[
+        "ImageName",
+        "ImageDescription",
+        "ComputeType",
+        "Protocol",
+        "ImageSource",
+        "InfrastructureConfigurationArn",
+        "Platform",
+        "OsVersion"
+      ],
+      "members":{
+        "ImageName":{
+          "shape":"WorkspaceImageName",
+          "documentation":"<p>The name of the WorkSpace image.</p>"
+        },
+        "ImageDescription":{
+          "shape":"WorkspaceImageDescription",
+          "documentation":"<p>The description of the WorkSpace image.</p>"
+        },
+        "ComputeType":{
+          "shape":"ImageComputeType",
+          "documentation":"<p>The supported compute type for the WorkSpace image.</p>"
+        },
+        "Protocol":{
+          "shape":"CustomImageProtocol",
+          "documentation":"<p>The supported protocol for the WorkSpace image. Windows 11 does not support PCOIP protocol.</p>"
+        },
+        "ImageSource":{
+          "shape":"ImageSourceIdentifier",
+          "documentation":"<p>The options for image import source.</p>"
+        },
+        "InfrastructureConfigurationArn":{
+          "shape":"InfrastructureConfigurationArn",
+          "documentation":"<p>The infrastructure configuration ARN that specifies how the WorkSpace image is built.</p>"
+        },
+        "Platform":{
+          "shape":"Platform",
+          "documentation":"<p>The platform for the WorkSpace image source.</p>"
+        },
+        "OsVersion":{
+          "shape":"OSVersion",
+          "documentation":"<p>The OS version for the WorkSpace image source.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>The resource tags. Each WorkSpaces resource can have a maximum of 50 tags.</p>"
+        }
+      }
+    },
+    "ImportCustomWorkspaceImageResult":{
+      "type":"structure",
+      "members":{
+        "ImageId":{
+          "shape":"WorkspaceImageId",
+          "documentation":"<p>The identifier of the WorkSpace image.</p>"
+        },
+        "State":{
+          "shape":"CustomWorkspaceImageImportState",
+          "documentation":"<p>The state of the WorkSpace image.</p>"
+        }
+      }
+    },
     "ImportWorkspaceImageRequest":{
       "type":"structure",
       "required":[
@@ -4307,11 +4591,16 @@
     },
     "IncompatibleApplicationsException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The specified application is not compatible with the resource.</p>",
       "exception":true
     },
+    "InfrastructureConfigurationArn":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "pattern":"^arn:aws[^:]*:imagebuilder:[^:]+:(?:[0-9]{12}|aws):infrastructure-configuration/[a-z0-9-_]+$"
+    },
     "InternalServerException":{
       "type":"structure",
       "members":{
@@ -4320,6 +4609,25 @@
       "documentation":"<p>Unexpected server error occured.</p>",
       "exception":true
     },
+    "InternetFallbackProtocol":{
+      "type":"string",
+      "enum":["PCOIP"]
+    },
+    "InternetFallbackProtocolList":{
+      "type":"list",
+      "member":{"shape":"InternetFallbackProtocol"}
+    },
+    "InvalidParameterCombinationException":{
+      "type":"structure",
+      "members":{
+        "message":{
+          "shape":"ExceptionMessage",
+          "documentation":"<p>The exception error message.</p>"
+        }
+      },
+      "documentation":"<p>Two or more of the selected parameter values cannot be used together.</p>",
+      "exception":true
+    },
     "InvalidParameterValuesException":{
       "type":"structure",
       "members":{
@@ -4457,6 +4765,10 @@
       "type":"list",
       "member":{"shape":"IpRuleItem"}
     },
+    "Ipv6Address":{
+      "type":"string",
+      "pattern":"^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|[0-9a-fA-F]{1,4}(?::[0-9a-fA-F]{1,4}){0,6}::[0-9a-fA-F]{1,4}$"
+    },
     "Limit":{
       "type":"integer",
       "max":25,
@@ -4566,6 +4878,7 @@
       "type":"integer",
       "min":0
     },
+    "Message":{"type":"string"},
     "MicrosoftEntraConfig":{
       "type":"structure",
       "members":{
@@ -4663,6 +4976,10 @@
     "ModifyAccountResult":{
       "type":"structure",
       "members":{
+        "Message":{
+          "shape":"Message",
+          "documentation":"<p>The text message to describe the status of BYOL modification.</p>"
+        }
       }
     },
     "ModifyCertificateBasedAuthPropertiesRequest":{
@@ -4685,8 +5002,7 @@
     },
     "ModifyCertificateBasedAuthPropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyClientPropertiesRequest":{
       "type":"structure",
@@ -4707,9 +5023,29 @@
     },
     "ModifyClientPropertiesResult":{
       "type":"structure",
+      "members":{}
+    },
+    "ModifyEndpointEncryptionModeRequest":{
+      "type":"structure",
+      "required":[
+        "DirectoryId",
+        "EndpointEncryptionMode"
+      ],
       "members":{
+        "DirectoryId":{
+          "shape":"DirectoryId",
+          "documentation":"<p> The identifier of the directory.</p>"
+        },
+        "EndpointEncryptionMode":{
+          "shape":"EndpointEncryptionMode",
+          "documentation":"<p>The encryption mode used for endpoint connections when streaming to WorkSpaces Personal or WorkSpace Pools.</p>"
+        }
       }
     },
+    "ModifyEndpointEncryptionModeResponse":{
+      "type":"structure",
+      "members":{}
+    },
     "ModifySamlPropertiesRequest":{
       "type":"structure",
       "required":["ResourceId"],
@@ -4730,8 +5066,7 @@
     },
     "ModifySamlPropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifySelfservicePermissionsRequest":{
       "type":"structure",
@@ -4752,8 +5087,7 @@
     },
     "ModifySelfservicePermissionsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyStreamingPropertiesRequest":{
       "type":"structure",
@@ -4771,8 +5105,7 @@
     },
     "ModifyStreamingPropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyWorkspaceAccessPropertiesRequest":{
       "type":"structure",
@@ -4793,8 +5126,7 @@
     },
     "ModifyWorkspaceAccessPropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyWorkspaceCreationPropertiesRequest":{
       "type":"structure",
@@ -4815,8 +5147,7 @@
     },
     "ModifyWorkspaceCreationPropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyWorkspacePropertiesRequest":{
       "type":"structure",
@@ -4838,8 +5169,7 @@
     },
     "ModifyWorkspacePropertiesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ModifyWorkspaceStateRequest":{
       "type":"structure",
@@ -4860,8 +5190,7 @@
     },
     "ModifyWorkspaceStateResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "NetworkAccessConfiguration":{
       "type":"structure",
@@ -4881,6 +5210,13 @@
       "type":"string",
       "min":1
     },
+    "OSVersion":{
+      "type":"string",
+      "enum":[
+        "Windows_10",
+        "Windows_11"
+      ]
+    },
     "OperatingSystem":{
       "type":"structure",
       "members":{
@@ -4915,8 +5251,7 @@
     },
     "OperatingSystemNotCompatibleException":{
       "type":"structure",
-      "members":{
-      },
+      "members":{},
       "documentation":"<p>The operating system of the WorkSpace is not compatible with the application.</p>",
       "exception":true
     },
@@ -4981,6 +5316,17 @@
       "type":"list",
       "member":{"shape":"PendingCreateStandbyWorkspacesRequest"}
     },
+    "Platform":{
+      "type":"string",
+      "enum":["WINDOWS"]
+    },
+    "PoolsRunningMode":{
+      "type":"string",
+      "enum":[
+        "AUTO_STOP",
+        "ALWAYS_ON"
+      ]
+    },
     "Protocol":{
       "type":"string",
       "enum":[
@@ -5088,10 +5434,6 @@
           "shape":"SubnetIds",
           "documentation":"<p>The identifiers of the subnets for your virtual private cloud (VPC). Make sure that the subnets are in supported Availability Zones. The subnets must also be in separate Availability Zones. If these conditions are not met, you will receive an OperationNotSupportedException error.</p>"
         },
-        "EnableWorkDocs":{
-          "shape":"BooleanObject",
-          "documentation":"<p>Indicates whether Amazon WorkDocs is enabled or disabled. If you have enabled this parameter and WorkDocs is not available in the Region, you will receive an OperationNotSupportedException error. Set <code>EnableWorkDocs</code> to disabled, and try again.</p>"
-        },
         "EnableSelfService":{
           "shape":"BooleanObject",
           "documentation":"<p>Indicates whether self-service capabilities are enabled or disabled.</p>"
@@ -5296,8 +5638,7 @@
     },
     "RestoreWorkspaceResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RevokeIpRulesRequest":{
       "type":"structure",
@@ -5318,8 +5659,7 @@
     },
     "RevokeIpRulesResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "RootStorage":{
       "type":"structure",
@@ -5537,8 +5877,7 @@
     },
     "StartWorkspacesPoolResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StartWorkspacesRequest":{
       "type":"structure",
@@ -5587,8 +5926,7 @@
     },
     "StopWorkspacesPoolResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "StopWorkspacesRequest":{
       "type":"structure",
@@ -5763,8 +6101,7 @@
     },
     "TerminateWorkspacesPoolResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TerminateWorkspacesPoolSessionRequest":{
       "type":"structure",
@@ -5778,8 +6115,7 @@
     },
     "TerminateWorkspacesPoolSessionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TerminateWorkspacesRequest":{
       "type":"structure",
@@ -5862,8 +6198,7 @@
     },
     "UpdateConnectClientAddInResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateConnectionAliasPermissionRequest":{
       "type":"structure",
@@ -5884,8 +6219,7 @@
     },
     "UpdateConnectionAliasPermissionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateDescription":{
       "type":"string",
@@ -5926,8 +6260,7 @@
     },
     "UpdateRulesOfIpGroupResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWorkspaceBundleRequest":{
       "type":"structure",
@@ -5944,8 +6277,7 @@
     },
     "UpdateWorkspaceBundleResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWorkspaceImagePermissionRequest":{
       "type":"structure",
@@ -5971,8 +6303,7 @@
     },
     "UpdateWorkspaceImagePermissionResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateWorkspacesPoolRequest":{
       "type":"structure",
@@ -6005,6 +6336,10 @@
         "TimeoutSettings":{
           "shape":"TimeoutSettings",
           "documentation":"<p>Indicates the timeout settings of the specified pool.</p>"
+        },
+        "RunningMode":{
+          "shape":"PoolsRunningMode",
+          "documentation":"<p>The desired running mode for the pool. The running mode can only be updated when the pool is in a stopped state.</p>"
         }
       }
     },
@@ -6207,6 +6542,10 @@
           "shape":"IpAddress",
           "documentation":"<p>The IP address of the WorkSpace.</p>"
         },
+        "Ipv6Address":{
+          "shape":"Ipv6Address",
+          "documentation":"<p>The IPv6 address of the WorkSpace.</p>"
+        },
         "State":{
           "shape":"WorkspaceState",
           "documentation":"<p>The operational state of the WorkSpace.</p> <ul> <li> <p> <code>PENDING</code> – The WorkSpace is in a waiting state (for example, the WorkSpace is being created).</p> </li> <li> <p> <code>AVAILABLE</code> – The WorkSpace is running and has passed the health checks.</p> </li> <li> <p> <code>IMPAIRED</code> – Refer to <code>UNHEALTHY</code> state.</p> </li> <li> <p> <code>UNHEALTHY</code> – The WorkSpace is not responding to health checks.</p> </li> <li> <p> <code>REBOOTING</code> – The WorkSpace is being rebooted (restarted).</p> </li> <li> <p> <code>STARTING</code> – The WorkSpace is starting up and health checks are being run.</p> </li> <li> <p> <code>REBUILDING</code> – The WorkSpace is being rebuilt.</p> </li> <li> <p> <code>RESTORING</code> – The WorkSpace is being restored.</p> </li> <li> <p> <code>MAINTENANCE</code> – The WorkSpace is undergoing scheduled maintenance by Amazon Web Services.</p> </li> <li> <p> <code>ADMIN_MAINTENANCE</code> – The WorkSpace is undergoing maintenance by the WorkSpaces administrator.</p> </li> <li> <p> <code>TERMINATING</code> – The WorkSpace is being deleted.</p> </li> <li> <p> <code>TERMINATED</code> – The WorkSpace has been deleted.</p> </li> <li> <p> <code>SUSPENDED</code> – The WorkSpace has been suspended for image creation.</p> </li> <li> <p> <code>UPDATING</code> – The WorkSpace is undergoing an update.</p> </li> <li> <p> <code>STOPPING</code> – The WorkSpace is being stopped.</p> </li> <li> <p> <code>STOPPED</code> – The WorkSpace has been stopped.</p> </li> <li> <p> <code>ERROR </code> – The WorkSpace is an error state (for example, an error occurred during startup).</p> </li> </ul> <note> <p>After a WorkSpace is terminated, the <code>TERMINATED</code> state is returned only briefly before the WorkSpace directory metadata is cleaned up, so this state is rarely returned. To confirm that a WorkSpace is terminated, check for the WorkSpace ID by using <a href=\"https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html\"> DescribeWorkSpaces</a>. If the WorkSpace ID isn't returned, then the WorkSpace has been successfully terminated.</p> </note>"
@@ -6304,6 +6643,14 @@
         "DeviceTypeLinux":{
           "shape":"AccessPropertyValue",
           "documentation":"<p>Indicates whether users can use Linux clients to access their WorkSpaces.</p>"
+        },
+        "DeviceTypeWorkSpacesThinClient":{
+          "shape":"AccessPropertyValue",
+          "documentation":"<p>Indicates whether users can access their WorkSpaces through a WorkSpaces Thin Client.</p>"
+        },
+        "AccessEndpointConfig":{
+          "shape":"AccessEndpointConfig",
+          "documentation":"<p>Specifies the configuration for accessing the WorkSpace.</p>"
         }
       },
       "documentation":"<p>The device types and operating systems that can be used to access a WorkSpace. For more information, see <a href=\"https://docs.aws.amazon.com/workspaces/latest/adminguide/workspaces-network-requirements.html\">Amazon WorkSpaces Client Network Requirements</a>.</p>"
@@ -6411,10 +6758,6 @@
     "WorkspaceCreationProperties":{
       "type":"structure",
       "members":{
-        "EnableWorkDocs":{
-          "shape":"BooleanObject",
-          "documentation":"<p>Indicates whether Amazon WorkDocs is enabled for your WorkSpaces.</p> <note> <p>If WorkDocs is already enabled for a WorkSpaces directory and you disable it, new WorkSpaces launched in the directory will not have WorkDocs enabled. However, WorkDocs remains enabled for any existing WorkSpaces, unless you either disable users' access to WorkDocs or you delete the WorkDocs site. To disable users' access to WorkDocs, see <a href=\"https://docs.aws.amazon.com/workdocs/latest/adminguide/inactive-user.html\">Disabling Users</a> in the <i>Amazon WorkDocs Administration Guide</i>. To delete a WorkDocs site, see <a href=\"https://docs.aws.amazon.com/workdocs/latest/adminguide/manage-sites.html\">Deleting a Site</a> in the <i>Amazon WorkDocs Administration Guide</i>.</p> <p>If you enable WorkDocs on a directory that already has existing WorkSpaces, the existing WorkSpaces and any new WorkSpaces that are launched in the directory will have WorkDocs enabled.</p> </note>"
-        },
         "EnableInternetAccess":{
           "shape":"BooleanObject",
           "documentation":"<p>Indicates whether internet access is enabled for your WorkSpaces.</p>"
@@ -6469,6 +6812,10 @@
           "shape":"DnsIpAddresses",
           "documentation":"<p>The IP addresses of the DNS servers for the directory.</p>"
         },
+        "DnsIpv6Addresses":{
+          "shape":"DnsIpv6Addresses",
+          "documentation":"<p>The IPv6 addresses of the DNS servers for the directory.</p>"
+        },
         "CustomerUserName":{
           "shape":"UserName",
           "documentation":"<p>The user name for the service account.</p>"
@@ -6517,6 +6864,10 @@
           "shape":"CertificateBasedAuthProperties",
           "documentation":"<p>The certificate-based authentication properties used to authenticate SAML 2.0 Identity Provider (IdP) user identities to Active Directory for WorkSpaces login.</p>"
         },
+        "EndpointEncryptionMode":{
+          "shape":"EndpointEncryptionMode",
+          "documentation":"<p>Endpoint encryption mode that allows you to configure the specified directory between Standard TLS and FIPS 140-2 validated mode.</p>"
+        },
         "MicrosoftEntraConfig":{
           "shape":"MicrosoftEntraConfig",
           "documentation":"<p>Specifies details about Microsoft Entra configurations.</p>"
@@ -6708,7 +7059,10 @@
         "MultipleUserProfiles",
         "StagedAppxPackage",
         "UnsupportedOsUpgrade",
-        "InsufficientRearmCount"
+        "InsufficientRearmCount",
+        "ProtocolOSIncompatibility",
+        "MemoryIntegrityIncompatibility",
+        "RestrictedDriveLetterInUse"
       ]
     },
     "WorkspaceImageId":{
@@ -6848,6 +7202,10 @@
         "WorkspaceName":{
           "shape":"WorkspaceName",
           "documentation":"<p>The name of the user-decoupled WorkSpace.</p> <note> <p> <code>WorkspaceName</code> is required if <code>UserName</code> is <code>[UNDEFINED]</code> for user-decoupled WorkSpaces. <code>WorkspaceName</code> is not applicable if <code>UserName</code> is specified for user-assigned WorkSpaces.</p> </note>"
+        },
+        "Ipv6Address":{
+          "shape":"Ipv6Address",
+          "documentation":"<p>The IPv6 address for the WorkSpace.</p>"
         }
       },
       "documentation":"<p>Describes the information used to create a WorkSpace.</p>"
@@ -6969,7 +7327,8 @@
         "State",
         "CreatedAt",
         "BundleId",
-        "DirectoryId"
+        "DirectoryId",
+        "RunningMode"
       ],
       "members":{
         "PoolId":{
@@ -6986,7 +7345,7 @@
         },
         "PoolName":{
           "shape":"WorkspacesPoolName",
-          "documentation":"<p>The name of the pool,</p>"
+          "documentation":"<p>The name of the pool.</p>"
         },
         "Description":{
           "shape":"UpdateDescription",
@@ -7019,6 +7378,10 @@
         "TimeoutSettings":{
           "shape":"TimeoutSettings",
           "documentation":"<p>The amount of time that a pool session remains active after users disconnect. If they try to reconnect to the pool session after a disconnection or network interruption within this time interval, they are connected to their previous session. Otherwise, they are connected to a new session with a new pool instance.</p>"
+        },
+        "RunningMode":{
+          "shape":"PoolsRunningMode",
+          "documentation":"<p>The running mode of the pool.</p>"
         }
       },
       "documentation":"<p>Describes a pool of WorkSpaces.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/endpoint-rule-set-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,137 @@
+{
+    "version": "1.0",
+    "parameters": {
+        "UseFIPS": {
+            "builtIn": "AWS::UseFIPS",
+            "required": true,
+            "default": false,
+            "documentation": "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.",
+            "type": "boolean"
+        },
+        "Endpoint": {
+            "builtIn": "SDK::Endpoint",
+            "required": false,
+            "documentation": "Override the endpoint used to send this request",
+            "type": "string"
+        },
+        "Region": {
+            "builtIn": "AWS::Region",
+            "required": false,
+            "documentation": "The AWS region used to dispatch the request.",
+            "type": "string"
+        }
+    },
+    "rules": [
+        {
+            "conditions": [
+                {
+                    "fn": "isSet",
+                    "argv": [
+                        {
+                            "ref": "Endpoint"
+                        }
+                    ]
+                }
+            ],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "booleanEquals",
+                            "argv": [
+                                {
+                                    "ref": "UseFIPS"
+                                },
+                                true
+                            ]
+                        }
+                    ],
+                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
+                    "type": "error"
+                },
+                {
+                    "conditions": [],
+                    "endpoint": {
+                        "url": {
+                            "ref": "Endpoint"
+                        },
+                        "properties": {},
+                        "headers": {}
+                    },
+                    "type": "endpoint"
+                }
+            ],
+            "type": "tree"
+        },
+        {
+            "conditions": [],
+            "rules": [
+                {
+                    "conditions": [
+                        {
+                            "fn": "isSet",
+                            "argv": [
+                                {
+                                    "ref": "Region"
+                                }
+                            ]
+                        }
+                    ],
+                    "rules": [
+                        {
+                            "conditions": [
+                                {
+                                    "fn": "aws.partition",
+                                    "argv": [
+                                        {
+                                            "ref": "Region"
+                                        }
+                                    ],
+                                    "assign": "PartitionResult"
+                                }
+                            ],
+                            "rules": [
+                                {
+                                    "conditions": [
+                                        {
+                                            "fn": "booleanEquals",
+                                            "argv": [
+                                                {
+                                                    "ref": "UseFIPS"
+                                                },
+                                                true
+                                            ]
+                                        }
+                                    ],
+                                    "endpoint": {
+                                        "url": "https://workspaces-instances-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                },
+                                {
+                                    "conditions": [],
+                                    "endpoint": {
+                                        "url": "https://workspaces-instances.{Region}.{PartitionResult#dualStackDnsSuffix}",
+                                        "properties": {},
+                                        "headers": {}
+                                    },
+                                    "type": "endpoint"
+                                }
+                            ],
+                            "type": "tree"
+                        }
+                    ],
+                    "type": "tree"
+                },
+                {
+                    "conditions": [],
+                    "error": "Invalid Configuration: Missing Region",
+                    "type": "error"
+                }
+            ],
+            "type": "tree"
+        }
+    ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/paginators-1.json 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/paginators-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+{
+  "pagination": {
+    "ListInstanceTypes": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "InstanceTypes"
+    },
+    "ListRegions": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "Regions"
+    },
+    "ListWorkspaceInstances": {
+      "input_token": "NextToken",
+      "output_token": "NextToken",
+      "limit_key": "MaxResults",
+      "result_key": "WorkspaceInstances"
+    }
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/service-2.json 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/service-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1945 @@
+{
+  "version":"2.0",
+  "metadata":{
+    "apiVersion":"2022-07-26",
+    "auth":["aws.auth#sigv4"],
+    "endpointPrefix":"workspaces-instances",
+    "jsonVersion":"1.0",
+    "protocol":"json",
+    "protocols":["json"],
+    "serviceFullName":"Amazon Workspaces Instances",
+    "serviceId":"Workspaces Instances",
+    "signatureVersion":"v4",
+    "signingName":"workspaces-instances",
+    "targetPrefix":"EUCMIFrontendAPIService",
+    "uid":"workspaces-instances-2022-07-26"
+  },
+  "operations":{
+    "AssociateVolume":{
+      "name":"AssociateVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"AssociateVolumeRequest"},
+      "output":{"shape":"AssociateVolumeResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Attaches a volume to a WorkSpace Instance.</p>"
+    },
+    "CreateVolume":{
+      "name":"CreateVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateVolumeRequest"},
+      "output":{"shape":"CreateVolumeResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates a new volume for WorkSpace Instances.</p>",
+      "idempotent":true
+    },
+    "CreateWorkspaceInstance":{
+      "name":"CreateWorkspaceInstance",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"CreateWorkspaceInstanceRequest"},
+      "output":{"shape":"CreateWorkspaceInstanceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Launches a new WorkSpace Instance with specified configuration parameters, enabling programmatic workspace deployment.</p>",
+      "idempotent":true
+    },
+    "DeleteVolume":{
+      "name":"DeleteVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteVolumeRequest"},
+      "output":{"shape":"DeleteVolumeResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes a specified volume.</p>"
+    },
+    "DeleteWorkspaceInstance":{
+      "name":"DeleteWorkspaceInstance",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DeleteWorkspaceInstanceRequest"},
+      "output":{"shape":"DeleteWorkspaceInstanceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes the specified WorkSpace</p>"
+    },
+    "DisassociateVolume":{
+      "name":"DisassociateVolume",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"DisassociateVolumeRequest"},
+      "output":{"shape":"DisassociateVolumeResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Detaches a volume from a WorkSpace Instance.</p>"
+    },
+    "GetWorkspaceInstance":{
+      "name":"GetWorkspaceInstance",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"GetWorkspaceInstanceRequest"},
+      "output":{"shape":"GetWorkspaceInstanceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves detailed information about a specific WorkSpace Instance.</p>"
+    },
+    "ListInstanceTypes":{
+      "name":"ListInstanceTypes",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListInstanceTypesRequest"},
+      "output":{"shape":"ListInstanceTypesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves a list of instance types supported by Amazon WorkSpaces Instances, enabling precise workspace infrastructure configuration.</p>"
+    },
+    "ListRegions":{
+      "name":"ListRegions",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListRegionsRequest"},
+      "output":{"shape":"ListRegionsResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves a list of AWS regions supported by Amazon WorkSpaces Instances, enabling region discovery for workspace deployments.</p>"
+    },
+    "ListTagsForResource":{
+      "name":"ListTagsForResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListTagsForResourceRequest"},
+      "output":{"shape":"ListTagsForResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves tags for a WorkSpace Instance.</p>"
+    },
+    "ListWorkspaceInstances":{
+      "name":"ListWorkspaceInstances",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"ListWorkspaceInstancesRequest"},
+      "output":{"shape":"ListWorkspaceInstancesResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Retrieves a collection of WorkSpaces Instances based on specified filters.</p>"
+    },
+    "TagResource":{
+      "name":"TagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"TagResourceRequest"},
+      "output":{"shape":"TagResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Adds tags to a WorkSpace Instance.</p>"
+    },
+    "UntagResource":{
+      "name":"UntagResource",
+      "http":{
+        "method":"POST",
+        "requestUri":"/"
+      },
+      "input":{"shape":"UntagResourceRequest"},
+      "output":{"shape":"UntagResourceResponse"},
+      "errors":[
+        {"shape":"ValidationException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"InternalServerException"}
+      ],
+      "documentation":"<p>Removes tags from a WorkSpace Instance.</p>"
+    }
+  },
+  "shapes":{
+    "ARN":{
+      "type":"string",
+      "max":2048,
+      "min":0,
+      "pattern":"arn:.*"
+    },
+    "AccessDeniedException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Detailed explanation of the access denial.</p>"
+        }
+      },
+      "documentation":"<p>Indicates insufficient permissions to perform the requested action.</p>",
+      "exception":true
+    },
+    "AmdSevSnpEnum":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
+    "AssociateVolumeRequest":{
+      "type":"structure",
+      "required":[
+        "WorkspaceInstanceId",
+        "VolumeId",
+        "Device"
+      ],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>WorkSpace Instance to attach volume to.</p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>Volume to be attached.</p>"
+        },
+        "Device":{
+          "shape":"DeviceName",
+          "documentation":"<p>Device path for volume attachment.</p>"
+        }
+      },
+      "documentation":"<p>Specifies volume attachment parameters.</p>"
+    },
+    "AssociateVolumeResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms volume attachment.</p>"
+    },
+    "AutoRecoveryEnum":{
+      "type":"string",
+      "enum":[
+        "disabled",
+        "default"
+      ]
+    },
+    "AvailabilityZone":{
+      "type":"string",
+      "pattern":"[a-z]{2}-[a-z]+-\\d[a-z](-[a-z0-9]+)?"
+    },
+    "BandwidthWeightingEnum":{
+      "type":"string",
+      "enum":[
+        "default",
+        "vpc-1",
+        "ebs-1"
+      ]
+    },
+    "BlockDeviceMappingRequest":{
+      "type":"structure",
+      "members":{
+        "DeviceName":{
+          "shape":"DeviceName",
+          "documentation":"<p>Name of the device for storage mapping.</p>"
+        },
+        "Ebs":{
+          "shape":"EbsBlockDevice",
+          "documentation":"<p>EBS volume configuration for the device.</p>"
+        },
+        "NoDevice":{
+          "shape":"DeviceName",
+          "documentation":"<p>Indicates device should not be mapped.</p>"
+        },
+        "VirtualName":{
+          "shape":"VirtualName",
+          "documentation":"<p>Virtual device name for ephemeral storage.</p>"
+        }
+      },
+      "documentation":"<p>Defines device mapping for WorkSpace Instance storage.</p>"
+    },
+    "BlockDeviceMappings":{
+      "type":"list",
+      "member":{"shape":"BlockDeviceMappingRequest"}
+    },
+    "Boolean":{
+      "type":"boolean",
+      "box":true
+    },
+    "CapacityReservationPreferenceEnum":{
+      "type":"string",
+      "enum":[
+        "capacity-reservations-only",
+        "open",
+        "none"
+      ]
+    },
+    "CapacityReservationSpecification":{
+      "type":"structure",
+      "members":{
+        "CapacityReservationPreference":{
+          "shape":"CapacityReservationPreferenceEnum",
+          "documentation":"<p>Preference for using capacity reservation.</p>"
+        },
+        "CapacityReservationTarget":{
+          "shape":"CapacityReservationTarget",
+          "documentation":"<p>Specific capacity reservation target.</p>"
+        }
+      },
+      "documentation":"<p>Specifies capacity reservation preferences.</p>"
+    },
+    "CapacityReservationTarget":{
+      "type":"structure",
+      "members":{
+        "CapacityReservationId":{
+          "shape":"String128",
+          "documentation":"<p>Unique identifier for the capacity reservation.</p>"
+        },
+        "CapacityReservationResourceGroupArn":{
+          "shape":"ARN",
+          "documentation":"<p>ARN of the capacity reservation resource group.</p>"
+        }
+      },
+      "documentation":"<p>Identifies a specific capacity reservation.</p>"
+    },
+    "ClientToken":{
+      "type":"string",
+      "max":64,
+      "min":1,
+      "sensitive":true
+    },
+    "ConflictException":{
+      "type":"structure",
+      "required":[
+        "Message",
+        "ResourceId",
+        "ResourceType"
+      ],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the conflict encountered.</p>"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>Identifier of the conflicting resource.</p>"
+        },
+        "ResourceType":{
+          "shape":"String",
+          "documentation":"<p>Type of the conflicting resource.</p>"
+        }
+      },
+      "documentation":"<p>Signals a conflict with the current state of the resource.</p>",
+      "exception":true
+    },
+    "ConnectionTrackingSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "TcpEstablishedTimeout":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Timeout for established TCP connections.</p>"
+        },
+        "UdpStreamTimeout":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Timeout for UDP stream connections.</p>"
+        },
+        "UdpTimeout":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>General timeout for UDP connections.</p>"
+        }
+      },
+      "documentation":"<p>Defines connection tracking parameters for network interfaces.</p>"
+    },
+    "CpuCreditsEnum":{
+      "type":"string",
+      "enum":[
+        "standard",
+        "unlimited"
+      ]
+    },
+    "CpuOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "AmdSevSnp":{
+          "shape":"AmdSevSnpEnum",
+          "documentation":"<p>AMD Secure Encrypted Virtualization configuration.</p>"
+        },
+        "CoreCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of CPU cores to allocate.</p>"
+        },
+        "ThreadsPerCore":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of threads per CPU core.</p>"
+        }
+      },
+      "documentation":"<p>Configures CPU-specific settings for WorkSpace Instance.</p>"
+    },
+    "CreateVolumeRequest":{
+      "type":"structure",
+      "required":["AvailabilityZone"],
+      "members":{
+        "AvailabilityZone":{
+          "shape":"String64",
+          "documentation":"<p>Availability zone for the volume.</p>"
+        },
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique token to prevent duplicate volume creation.</p>",
+          "idempotencyToken":true
+        },
+        "Encrypted":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if the volume should be encrypted.</p>"
+        },
+        "Iops":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Input/output operations per second for the volume.</p>"
+        },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>KMS key for volume encryption.</p>"
+        },
+        "SizeInGB":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Volume size in gigabytes.</p>"
+        },
+        "SnapshotId":{
+          "shape":"SnapshotId",
+          "documentation":"<p>Source snapshot for volume creation.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecifications",
+          "documentation":"<p>Metadata tags for the volume.</p>"
+        },
+        "Throughput":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Volume throughput performance.</p>"
+        },
+        "VolumeType":{
+          "shape":"VolumeTypeEnum",
+          "documentation":"<p>Type of EBS volume.</p>"
+        }
+      },
+      "documentation":"<p>Specifies volume creation parameters.</p>"
+    },
+    "CreateVolumeResponse":{
+      "type":"structure",
+      "members":{
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>Unique identifier for the new volume.</p>"
+        }
+      },
+      "documentation":"<p>Returns the created volume identifier.</p>"
+    },
+    "CreateWorkspaceInstanceRequest":{
+      "type":"structure",
+      "required":["ManagedInstance"],
+      "members":{
+        "ClientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>Unique token to ensure idempotent instance creation, preventing duplicate workspace launches.</p>",
+          "idempotencyToken":true
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Optional metadata tags for categorizing and managing WorkSpaces Instances.</p>"
+        },
+        "ManagedInstance":{
+          "shape":"ManagedInstanceRequest",
+          "documentation":"<p>Comprehensive configuration settings for the WorkSpaces Instance, including network, compute, and storage parameters.</p>"
+        }
+      },
+      "documentation":"<p>Defines the configuration parameters for creating a new WorkSpaces Instance.</p>"
+    },
+    "CreateWorkspaceInstanceResponse":{
+      "type":"structure",
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier assigned to the newly created WorkSpaces Instance.</p>"
+        }
+      },
+      "documentation":"<p>Returns the unique identifier for the newly created WorkSpaces Instance.</p>"
+    },
+    "CreditSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "CpuCredits":{
+          "shape":"CpuCreditsEnum",
+          "documentation":"<p>CPU credit specification mode.</p>"
+        }
+      },
+      "documentation":"<p>Defines CPU credit configuration for burstable instances.</p>"
+    },
+    "DeleteVolumeRequest":{
+      "type":"structure",
+      "required":["VolumeId"],
+      "members":{
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>Identifier of the volume to delete.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the volume to delete.</p>"
+    },
+    "DeleteVolumeResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms volume deletion.</p>"
+    },
+    "DeleteWorkspaceInstanceRequest":{
+      "type":"structure",
+      "required":["WorkspaceInstanceId"],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the WorkSpaces Instance targeted for deletion.</p>"
+        }
+      },
+      "documentation":"<p>The WorkSpace to delete</p>"
+    },
+    "DeleteWorkspaceInstanceResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms the successful deletion of the specified WorkSpace Instance.</p>"
+    },
+    "Description":{
+      "type":"string",
+      "max":1000,
+      "min":0,
+      "pattern":"[\\S\\s]*"
+    },
+    "DeviceName":{
+      "type":"string",
+      "max":32,
+      "min":0
+    },
+    "DisassociateModeEnum":{
+      "type":"string",
+      "enum":[
+        "FORCE",
+        "NO_FORCE"
+      ]
+    },
+    "DisassociateVolumeRequest":{
+      "type":"structure",
+      "required":[
+        "WorkspaceInstanceId",
+        "VolumeId"
+      ],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>WorkSpace Instance to detach volume from.</p>"
+        },
+        "VolumeId":{
+          "shape":"VolumeId",
+          "documentation":"<p>Volume to be detached.</p>"
+        },
+        "Device":{
+          "shape":"DeviceName",
+          "documentation":"<p>Device path of volume to detach.</p>"
+        },
+        "DisassociateMode":{
+          "shape":"DisassociateModeEnum",
+          "documentation":"<p>Mode for volume detachment.</p>"
+        }
+      },
+      "documentation":"<p>Specifies volume detachment parameters.</p>"
+    },
+    "DisassociateVolumeResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms volume detachment.</p>"
+    },
+    "EC2InstanceError":{
+      "type":"structure",
+      "members":{
+        "EC2ErrorCode":{
+          "shape":"String",
+          "documentation":"<p>Unique error code identifying the specific EC2 instance error.</p>"
+        },
+        "EC2ExceptionType":{
+          "shape":"String",
+          "documentation":"<p>Type of exception encountered during EC2 instance operation.</p>"
+        },
+        "EC2ErrorMessage":{
+          "shape":"String",
+          "documentation":"<p>Detailed description of the EC2 instance error.</p>"
+        }
+      },
+      "documentation":"<p>Captures detailed error information for EC2 instance operations.</p>"
+    },
+    "EC2InstanceErrors":{
+      "type":"list",
+      "member":{"shape":"EC2InstanceError"}
+    },
+    "EC2ManagedInstance":{
+      "type":"structure",
+      "members":{
+        "InstanceId":{
+          "shape":"String",
+          "documentation":"<p>Unique identifier of the managed EC2 instance.</p>"
+        }
+      },
+      "documentation":"<p>Represents an EC2 instance managed by WorkSpaces.</p>"
+    },
+    "EbsBlockDevice":{
+      "type":"structure",
+      "members":{
+        "VolumeType":{
+          "shape":"VolumeTypeEnum",
+          "documentation":"<p>Type of EBS volume (e.g., gp2, io1).</p>"
+        },
+        "Encrypted":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if the volume is encrypted.</p>"
+        },
+        "KmsKeyId":{
+          "shape":"KmsKeyId",
+          "documentation":"<p>KMS key used for volume encryption.</p>"
+        },
+        "Iops":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Input/output operations per second for the volume.</p>"
+        },
+        "Throughput":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Volume data transfer rate.</p>"
+        },
+        "VolumeSize":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Size of the EBS volume in gigabytes.</p>"
+        }
+      },
+      "documentation":"<p>Defines configuration for an Elastic Block Store volume.</p>"
+    },
+    "EnaSrdSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "EnaSrdEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables or disables ENA SRD for network performance.</p>"
+        },
+        "EnaSrdUdpSpecification":{
+          "shape":"EnaSrdUdpSpecificationRequest",
+          "documentation":"<p>Configures UDP-specific ENA SRD settings.</p>"
+        }
+      },
+      "documentation":"<p>Defines Elastic Network Adapter (ENA) Scalable Reliable Datagram (SRD) configuration.</p>"
+    },
+    "EnaSrdUdpSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "EnaSrdUdpEnabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables or disables ENA SRD for UDP traffic.</p>"
+        }
+      },
+      "documentation":"<p>Specifies UDP configuration for ENA SRD.</p>"
+    },
+    "EnclaveOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables or disables AWS Nitro Enclaves for enhanced security.</p>"
+        }
+      },
+      "documentation":"<p>Configures AWS Nitro Enclave options for the WorkSpace Instance.</p>"
+    },
+    "GetWorkspaceInstanceRequest":{
+      "type":"structure",
+      "required":["WorkspaceInstanceId"],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the WorkSpace Instance to retrieve.</p>"
+        }
+      },
+      "documentation":"<p>Identifies the WorkSpaces Instance to retrieve detailed information for.</p>"
+    },
+    "GetWorkspaceInstanceResponse":{
+      "type":"structure",
+      "members":{
+        "WorkspaceInstanceErrors":{
+          "shape":"WorkspaceInstanceErrors",
+          "documentation":"<p>Captures any errors specific to the WorkSpace Instance lifecycle.</p>"
+        },
+        "EC2InstanceErrors":{
+          "shape":"EC2InstanceErrors",
+          "documentation":"<p>Includes any underlying EC2 instance errors encountered.</p>"
+        },
+        "ProvisionState":{
+          "shape":"ProvisionStateEnum",
+          "documentation":"<p>Current provisioning state of the WorkSpaces Instance.</p>"
+        },
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the retrieved WorkSpaces Instance.</p>"
+        },
+        "EC2ManagedInstance":{
+          "shape":"EC2ManagedInstance",
+          "documentation":"<p>Details of the associated EC2 managed instance.</p>"
+        }
+      },
+      "documentation":"<p>Provides comprehensive details about the requested WorkSpaces Instance.</p>"
+    },
+    "HibernationOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "Configured":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables or disables instance hibernation capability.</p>"
+        }
+      },
+      "documentation":"<p>Defines hibernation configuration for the WorkSpace Instance.</p>"
+    },
+    "HostId":{
+      "type":"string",
+      "pattern":"h-[0-9a-zA-Z]{1,63}"
+    },
+    "HostnameTypeEnum":{
+      "type":"string",
+      "enum":[
+        "ip-name",
+        "resource-name"
+      ]
+    },
+    "HttpEndpointEnum":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
+    "HttpProtocolIpv6Enum":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
+    "HttpPutResponseHopLimit":{
+      "type":"integer",
+      "box":true,
+      "max":64,
+      "min":1
+    },
+    "HttpTokensEnum":{
+      "type":"string",
+      "enum":[
+        "optional",
+        "required"
+      ]
+    },
+    "IamInstanceProfileSpecification":{
+      "type":"structure",
+      "members":{
+        "Arn":{
+          "shape":"ARN",
+          "documentation":"<p>Amazon Resource Name (ARN) of the IAM instance profile.</p>"
+        },
+        "Name":{
+          "shape":"String64",
+          "documentation":"<p>Name of the IAM instance profile.</p>"
+        }
+      },
+      "documentation":"<p>Defines IAM instance profile configuration for WorkSpace Instance.</p>"
+    },
+    "ImageId":{
+      "type":"string",
+      "pattern":"ami-[0-9a-zA-Z]{1,63}"
+    },
+    "InstanceInterruptionBehaviorEnum":{
+      "type":"string",
+      "enum":[
+        "hibernate",
+        "stop"
+      ]
+    },
+    "InstanceIpv6Address":{
+      "type":"structure",
+      "members":{
+        "Ipv6Address":{
+          "shape":"Ipv6Address",
+          "documentation":"<p>Specific IPv6 address assigned to the instance.</p>"
+        },
+        "IsPrimaryIpv6":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if this is the primary IPv6 address for the instance.</p>"
+        }
+      },
+      "documentation":"<p>Represents an IPv6 address configuration for a WorkSpace Instance.</p>"
+    },
+    "InstanceMaintenanceOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "AutoRecovery":{
+          "shape":"AutoRecoveryEnum",
+          "documentation":"<p>Enables or disables automatic instance recovery.</p>"
+        }
+      },
+      "documentation":"<p>Configures automatic maintenance settings for WorkSpace Instance.</p>"
+    },
+    "InstanceMarketOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "MarketType":{
+          "shape":"MarketTypeEnum",
+          "documentation":"<p>Specifies the type of marketplace for instance deployment.</p>"
+        },
+        "SpotOptions":{
+          "shape":"SpotMarketOptions",
+          "documentation":"<p>Configuration options for spot instance deployment.</p>"
+        }
+      },
+      "documentation":"<p>Configures marketplace-specific instance deployment options.</p>"
+    },
+    "InstanceMetadataOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "HttpEndpoint":{
+          "shape":"HttpEndpointEnum",
+          "documentation":"<p>Enables or disables HTTP endpoint for instance metadata.</p>"
+        },
+        "HttpProtocolIpv6":{
+          "shape":"HttpProtocolIpv6Enum",
+          "documentation":"<p>Configures IPv6 support for instance metadata HTTP protocol.</p>"
+        },
+        "HttpPutResponseHopLimit":{
+          "shape":"HttpPutResponseHopLimit",
+          "documentation":"<p>Sets maximum number of network hops for metadata PUT responses.</p>"
+        },
+        "HttpTokens":{
+          "shape":"HttpTokensEnum",
+          "documentation":"<p>Configures token requirement for instance metadata retrieval.</p>"
+        },
+        "InstanceMetadataTags":{
+          "shape":"InstanceMetadataTagsEnum",
+          "documentation":"<p>Enables or disables instance metadata tags retrieval.</p>"
+        }
+      },
+      "documentation":"<p>Defines instance metadata service configuration.</p>"
+    },
+    "InstanceMetadataTagsEnum":{
+      "type":"string",
+      "enum":[
+        "enabled",
+        "disabled"
+      ]
+    },
+    "InstanceNetworkInterfaceSpecification":{
+      "type":"structure",
+      "members":{
+        "AssociateCarrierIpAddress":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables carrier IP address association.</p>"
+        },
+        "AssociatePublicIpAddress":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables public IP address assignment.</p>"
+        },
+        "ConnectionTrackingSpecification":{
+          "shape":"ConnectionTrackingSpecificationRequest",
+          "documentation":"<p>Configures network connection tracking parameters.</p>"
+        },
+        "Description":{
+          "shape":"Description",
+          "documentation":"<p>Descriptive text for the network interface.</p>"
+        },
+        "DeviceIndex":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Unique index for the network interface.</p>"
+        },
+        "EnaSrdSpecification":{
+          "shape":"EnaSrdSpecificationRequest",
+          "documentation":"<p>Configures Elastic Network Adapter Scalable Reliable Datagram settings.</p>"
+        },
+        "InterfaceType":{
+          "shape":"InterfaceTypeEnum",
+          "documentation":"<p>Specifies the type of network interface.</p>"
+        },
+        "Ipv4Prefixes":{
+          "shape":"Ipv4Prefixes",
+          "documentation":"<p>IPv4 prefix configurations for the interface.</p>"
+        },
+        "Ipv4PrefixCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of IPv4 prefixes to assign.</p>"
+        },
+        "Ipv6AddressCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of IPv6 addresses to assign.</p>"
+        },
+        "Ipv6Addresses":{
+          "shape":"Ipv6Addresses",
+          "documentation":"<p>Specific IPv6 addresses for the interface.</p>"
+        },
+        "Ipv6Prefixes":{
+          "shape":"Ipv6Prefixes",
+          "documentation":"<p>IPv6 prefix configurations for the interface.</p>"
+        },
+        "Ipv6PrefixCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of IPv6 prefixes to assign.</p>"
+        },
+        "NetworkCardIndex":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Index of the network card for multiple network interfaces.</p>"
+        },
+        "NetworkInterfaceId":{
+          "shape":"NetworkInterfaceId",
+          "documentation":"<p>Unique identifier for the network interface.</p>"
+        },
+        "PrimaryIpv6":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates the primary IPv6 configuration.</p>"
+        },
+        "PrivateIpAddress":{
+          "shape":"Ipv4Address",
+          "documentation":"<p>Primary private IP address for the interface.</p>"
+        },
+        "PrivateIpAddresses":{
+          "shape":"PrivateIpAddresses",
+          "documentation":"<p>List of private IP addresses for the interface.</p>"
+        },
+        "SecondaryPrivateIpAddressCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Number of additional private IP addresses to assign.</p>"
+        },
+        "Groups":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>Security groups associated with the network interface.</p>"
+        },
+        "SubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>Subnet identifier for the network interface.</p>"
+        }
+      },
+      "documentation":"<p>Defines network interface configuration for WorkSpace Instance.</p>"
+    },
+    "InstanceNetworkPerformanceOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "BandwidthWeighting":{
+          "shape":"BandwidthWeightingEnum",
+          "documentation":"<p>Defines bandwidth allocation strategy for network interfaces.</p>"
+        }
+      },
+      "documentation":"<p>Configures network performance settings for WorkSpace Instance.</p>"
+    },
+    "InstanceType":{
+      "type":"string",
+      "pattern":"([a-z0-9-]+)\\.([a-z0-9]+)"
+    },
+    "InstanceTypeInfo":{
+      "type":"structure",
+      "members":{
+        "InstanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>Unique identifier for the WorkSpace Instance type.</p>"
+        }
+      },
+      "documentation":"<p>Provides details about a specific WorkSpace Instance type.</p>"
+    },
+    "InstanceTypes":{
+      "type":"list",
+      "member":{"shape":"InstanceTypeInfo"}
+    },
+    "Integer":{
+      "type":"integer",
+      "box":true
+    },
+    "InterfaceTypeEnum":{
+      "type":"string",
+      "enum":[
+        "interface",
+        "efa",
+        "efa-only"
+      ]
+    },
+    "InternalServerException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the internal server error.</p>"
+        },
+        "RetryAfterSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>Recommended wait time before retrying the request.</p>"
+        }
+      },
+      "documentation":"<p>Indicates an unexpected server-side error occurred.</p>",
+      "exception":true,
+      "fault":true,
+      "retryable":{"throttling":false}
+    },
+    "Ipv4Address":{
+      "type":"string",
+      "pattern":"(\\b25[0-5]|\\b2[0-4][0-9]|\\b[01]?[0-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}",
+      "sensitive":true
+    },
+    "Ipv4Prefix":{
+      "type":"string",
+      "pattern":".*(?:(?:\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d|\\d)(?:/\\d{1,2})?.*"
+    },
+    "Ipv4PrefixSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "Ipv4Prefix":{
+          "shape":"Ipv4Prefix",
+          "documentation":"<p>Specific IPv4 prefix for network interface configuration.</p>"
+        }
+      },
+      "documentation":"<p>Specifies IPv4 prefix configuration for network interfaces.</p>"
+    },
+    "Ipv4Prefixes":{
+      "type":"list",
+      "member":{"shape":"Ipv4PrefixSpecificationRequest"}
+    },
+    "Ipv6Address":{
+      "type":"string",
+      "max":128,
+      "min":0,
+      "sensitive":true
+    },
+    "Ipv6Addresses":{
+      "type":"list",
+      "member":{"shape":"InstanceIpv6Address"}
+    },
+    "Ipv6Prefix":{
+      "type":"string",
+      "pattern":"(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/([0-9]{1,2}|1[01][0-9]|12[0-8])"
+    },
+    "Ipv6PrefixSpecificationRequest":{
+      "type":"structure",
+      "members":{
+        "Ipv6Prefix":{
+          "shape":"Ipv6Prefix",
+          "documentation":"<p>Specific IPv6 prefix for network interface configuration.</p>"
+        }
+      },
+      "documentation":"<p>Specifies IPv6 prefix configuration for network interfaces.</p>"
+    },
+    "Ipv6Prefixes":{
+      "type":"list",
+      "member":{"shape":"Ipv6PrefixSpecificationRequest"}
+    },
+    "KmsKeyId":{
+      "type":"string",
+      "max":128,
+      "min":0,
+      "sensitive":true
+    },
+    "LicenseConfigurationRequest":{
+      "type":"structure",
+      "members":{
+        "LicenseConfigurationArn":{
+          "shape":"ARN",
+          "documentation":"<p>ARN of the license configuration for the WorkSpace Instance.</p>"
+        }
+      },
+      "documentation":"<p>Specifies license configuration for WorkSpace Instance.</p>"
+    },
+    "LicenseSpecifications":{
+      "type":"list",
+      "member":{"shape":"LicenseConfigurationRequest"}
+    },
+    "ListInstanceTypesRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Maximum number of instance types to return in a single API call. Enables pagination of instance type results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Pagination token for retrieving subsequent pages of instance type results.</p>"
+        }
+      },
+      "documentation":"<p>Defines input parameters for retrieving supported WorkSpaces Instances instance types.</p>"
+    },
+    "ListInstanceTypesResponse":{
+      "type":"structure",
+      "required":["InstanceTypes"],
+      "members":{
+        "InstanceTypes":{
+          "shape":"InstanceTypes",
+          "documentation":"<p>Collection of supported instance types for WorkSpaces Instances.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving additional instance types if the result set is paginated.</p>"
+        }
+      },
+      "documentation":"<p>Contains the list of instance types supported by WorkSpaces Instances.</p>"
+    },
+    "ListRegionsRequest":{
+      "type":"structure",
+      "members":{
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Maximum number of regions to return in a single API call. Enables pagination of region results.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Pagination token for retrieving subsequent pages of region results.</p>"
+        }
+      },
+      "documentation":"<p>Defines input parameters for retrieving supported WorkSpaces Instances regions.</p>"
+    },
+    "ListRegionsResponse":{
+      "type":"structure",
+      "required":["Regions"],
+      "members":{
+        "Regions":{
+          "shape":"RegionList",
+          "documentation":"<p>Collection of AWS regions supported by WorkSpaces Instances.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving additional regions if the result set is paginated.</p>"
+        }
+      },
+      "documentation":"<p>Contains the list of supported AWS regions for WorkSpaces Instances.</p>"
+    },
+    "ListTagsForResourceRequest":{
+      "type":"structure",
+      "required":["WorkspaceInstanceId"],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the WorkSpace Instance.</p>"
+        }
+      },
+      "documentation":"<p>Specifies the WorkSpace Instance to retrieve tags for.</p>"
+    },
+    "ListTagsForResourceResponse":{
+      "type":"structure",
+      "members":{
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Collection of tags associated with the WorkSpace Instance.</p>"
+        }
+      },
+      "documentation":"<p>Returns the list of tags for the specified WorkSpace Instance.</p>"
+    },
+    "ListWorkspaceInstancesRequest":{
+      "type":"structure",
+      "members":{
+        "ProvisionStates":{
+          "shape":"ProvisionStates",
+          "documentation":"<p>Filter WorkSpaces Instances by their current provisioning states.</p>"
+        },
+        "MaxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>Maximum number of WorkSpaces Instances to return in a single response.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Pagination token for retrieving subsequent pages of WorkSpaces Instances.</p>"
+        }
+      },
+      "documentation":"<p>Defines filters and pagination parameters for retrieving WorkSpaces Instances.</p>"
+    },
+    "ListWorkspaceInstancesResponse":{
+      "type":"structure",
+      "required":["WorkspaceInstances"],
+      "members":{
+        "WorkspaceInstances":{
+          "shape":"WorkspaceInstances",
+          "documentation":"<p>Collection of WorkSpaces Instances returned by the query.</p>"
+        },
+        "NextToken":{
+          "shape":"NextToken",
+          "documentation":"<p>Token for retrieving additional WorkSpaces Instances if the result set is paginated.</p>"
+        }
+      },
+      "documentation":"<p>Contains the list of WorkSpaces Instances matching the specified criteria.</p>"
+    },
+    "ManagedInstanceRequest":{
+      "type":"structure",
+      "members":{
+        "BlockDeviceMappings":{
+          "shape":"BlockDeviceMappings",
+          "documentation":"<p>Configures block device mappings for storage.</p>"
+        },
+        "CapacityReservationSpecification":{
+          "shape":"CapacityReservationSpecification",
+          "documentation":"<p>Specifies capacity reservation preferences.</p>"
+        },
+        "CpuOptions":{
+          "shape":"CpuOptionsRequest",
+          "documentation":"<p>Configures CPU-specific settings.</p>"
+        },
+        "CreditSpecification":{
+          "shape":"CreditSpecificationRequest",
+          "documentation":"<p>Defines CPU credit configuration for burstable instances.</p>"
+        },
+        "DisableApiStop":{
+          "shape":"Boolean",
+          "documentation":"<p>Prevents API-initiated instance stop.</p>"
+        },
+        "EbsOptimized":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables optimized EBS performance.</p>"
+        },
+        "EnablePrimaryIpv6":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables primary IPv6 address configuration.</p>"
+        },
+        "EnclaveOptions":{
+          "shape":"EnclaveOptionsRequest",
+          "documentation":"<p>Configures AWS Nitro Enclave settings.</p>"
+        },
+        "HibernationOptions":{
+          "shape":"HibernationOptionsRequest",
+          "documentation":"<p>Configures instance hibernation capabilities.</p>"
+        },
+        "IamInstanceProfile":{
+          "shape":"IamInstanceProfileSpecification",
+          "documentation":"<p>Specifies IAM instance profile configuration.</p>"
+        },
+        "ImageId":{
+          "shape":"ImageId",
+          "documentation":"<p>Identifies the Amazon Machine Image (AMI) for the instance.</p>"
+        },
+        "InstanceMarketOptions":{
+          "shape":"InstanceMarketOptionsRequest",
+          "documentation":"<p>Configures marketplace-specific deployment options.</p>"
+        },
+        "InstanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>Specifies the WorkSpace Instance type.</p>"
+        },
+        "Ipv6Addresses":{
+          "shape":"Ipv6Addresses",
+          "documentation":"<p>Configures specific IPv6 addresses.</p>"
+        },
+        "Ipv6AddressCount":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Specifies number of IPv6 addresses to assign.</p>"
+        },
+        "KernelId":{
+          "shape":"String128",
+          "documentation":"<p>Identifies the kernel for the instance.</p>"
+        },
+        "KeyName":{
+          "shape":"String64",
+          "documentation":"<p>Specifies the key pair for instance access.</p>"
+        },
+        "LicenseSpecifications":{
+          "shape":"LicenseSpecifications",
+          "documentation":"<p>Configures license-related settings.</p>"
+        },
+        "MaintenanceOptions":{
+          "shape":"InstanceMaintenanceOptionsRequest",
+          "documentation":"<p>Defines automatic maintenance settings.</p>"
+        },
+        "MetadataOptions":{
+          "shape":"InstanceMetadataOptionsRequest",
+          "documentation":"<p>Configures instance metadata service settings.</p>"
+        },
+        "Monitoring":{
+          "shape":"RunInstancesMonitoringEnabled",
+          "documentation":"<p>Enables or disables detailed instance monitoring.</p>"
+        },
+        "NetworkInterfaces":{
+          "shape":"NetworkInterfaces",
+          "documentation":"<p>Configures network interface settings.</p>"
+        },
+        "NetworkPerformanceOptions":{
+          "shape":"InstanceNetworkPerformanceOptionsRequest",
+          "documentation":"<p>Defines network performance configuration.</p>"
+        },
+        "Placement":{
+          "shape":"Placement",
+          "documentation":"<p>Specifies instance placement preferences.</p>"
+        },
+        "PrivateDnsNameOptions":{
+          "shape":"PrivateDnsNameOptionsRequest",
+          "documentation":"<p>Configures private DNS name settings.</p>"
+        },
+        "PrivateIpAddress":{
+          "shape":"Ipv4Address",
+          "documentation":"<p>Specifies the primary private IP address.</p>"
+        },
+        "RamdiskId":{
+          "shape":"String128",
+          "documentation":"<p>Identifies the ramdisk for the instance.</p>"
+        },
+        "SecurityGroupIds":{
+          "shape":"SecurityGroupIds",
+          "documentation":"<p>Specifies security group identifiers.</p>"
+        },
+        "SecurityGroups":{
+          "shape":"SecurityGroupNames",
+          "documentation":"<p>Configures security group settings.</p>"
+        },
+        "SubnetId":{
+          "shape":"SubnetId",
+          "documentation":"<p>Identifies the subnet for the instance.</p>"
+        },
+        "TagSpecifications":{
+          "shape":"TagSpecifications",
+          "documentation":"<p>Configures resource tagging specifications.</p>"
+        },
+        "UserData":{
+          "shape":"UserData",
+          "documentation":"<p>Provides custom initialization data for the instance.</p>"
+        }
+      },
+      "documentation":"<p>Defines comprehensive configuration for a managed WorkSpace Instance.</p>"
+    },
+    "MarketTypeEnum":{
+      "type":"string",
+      "enum":[
+        "spot",
+        "capacity-block"
+      ]
+    },
+    "MaxResults":{
+      "type":"integer",
+      "box":true,
+      "max":25,
+      "min":1
+    },
+    "NetworkInterfaceId":{
+      "type":"string",
+      "pattern":"eni-[0-9a-zA-Z]{1,63}"
+    },
+    "NetworkInterfaces":{
+      "type":"list",
+      "member":{"shape":"InstanceNetworkInterfaceSpecification"}
+    },
+    "NextToken":{
+      "type":"string",
+      "max":2048,
+      "min":1,
+      "sensitive":true
+    },
+    "NonNegativeInteger":{
+      "type":"integer",
+      "box":true,
+      "min":0
+    },
+    "Placement":{
+      "type":"structure",
+      "members":{
+        "Affinity":{
+          "shape":"String64",
+          "documentation":"<p>Specifies host affinity for dedicated instances.</p>"
+        },
+        "AvailabilityZone":{
+          "shape":"AvailabilityZone",
+          "documentation":"<p>Identifies the specific AWS availability zone.</p>"
+        },
+        "GroupId":{
+          "shape":"PlacementGroupId",
+          "documentation":"<p>Unique identifier for placement group.</p>"
+        },
+        "GroupName":{
+          "shape":"String64",
+          "documentation":"<p>Name of the placement group.</p>"
+        },
+        "HostId":{
+          "shape":"HostId",
+          "documentation":"<p>Identifies the specific dedicated host.</p>"
+        },
+        "HostResourceGroupArn":{
+          "shape":"ARN",
+          "documentation":"<p>ARN of the host resource group.</p>"
+        },
+        "PartitionNumber":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Specifies partition number for partition placement groups.</p>"
+        },
+        "Tenancy":{
+          "shape":"TenancyEnum",
+          "documentation":"<p>Defines instance tenancy configuration.</p>"
+        }
+      },
+      "documentation":"<p>Defines instance placement configuration for WorkSpace Instance.</p>"
+    },
+    "PlacementGroupId":{
+      "type":"string",
+      "pattern":"pg-[0-9a-zA-Z]{1,63}"
+    },
+    "PrivateDnsNameOptionsRequest":{
+      "type":"structure",
+      "members":{
+        "HostnameType":{
+          "shape":"HostnameTypeEnum",
+          "documentation":"<p>Specifies the type of hostname configuration.</p>"
+        },
+        "EnableResourceNameDnsARecord":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables DNS A record for resource name resolution.</p>"
+        },
+        "EnableResourceNameDnsAAAARecord":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables DNS AAAA record for resource name resolution.</p>"
+        }
+      },
+      "documentation":"<p>Configures private DNS name settings for WorkSpace Instance.</p>"
+    },
+    "PrivateIpAddressSpecification":{
+      "type":"structure",
+      "members":{
+        "Primary":{
+          "shape":"Boolean",
+          "documentation":"<p>Indicates if this is the primary private IP address.</p>"
+        },
+        "PrivateIpAddress":{
+          "shape":"Ipv4Address",
+          "documentation":"<p>Specific private IP address for the network interface.</p>"
+        }
+      },
+      "documentation":"<p>Defines private IP address configuration for network interface.</p>"
+    },
+    "PrivateIpAddresses":{
+      "type":"list",
+      "member":{"shape":"PrivateIpAddressSpecification"}
+    },
+    "ProvisionStateEnum":{
+      "type":"string",
+      "enum":[
+        "ALLOCATING",
+        "ALLOCATED",
+        "DEALLOCATING",
+        "DEALLOCATED",
+        "ERROR_ALLOCATING",
+        "ERROR_DEALLOCATING"
+      ]
+    },
+    "ProvisionStates":{
+      "type":"list",
+      "member":{"shape":"ProvisionStateEnum"}
+    },
+    "Region":{
+      "type":"structure",
+      "members":{
+        "RegionName":{
+          "shape":"RegionName",
+          "documentation":"<p>Name of the AWS region.</p>"
+        }
+      },
+      "documentation":"<p>Represents an AWS region supported by WorkSpaces Instances.</p>"
+    },
+    "RegionList":{
+      "type":"list",
+      "member":{"shape":"Region"}
+    },
+    "RegionName":{
+      "type":"string",
+      "pattern":"[-0-9a-z]{1,31}"
+    },
+    "ResourceNotFoundException":{
+      "type":"structure",
+      "required":[
+        "Message",
+        "ResourceId",
+        "ResourceType"
+      ],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Details about the missing resource.</p>"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>Identifier of the resource that was not found.</p>"
+        },
+        "ResourceType":{
+          "shape":"String",
+          "documentation":"<p>Type of the resource that was not found.</p>"
+        }
+      },
+      "documentation":"<p>Indicates the requested resource could not be found.</p>",
+      "exception":true
+    },
+    "ResourceTypeEnum":{
+      "type":"string",
+      "enum":[
+        "instance",
+        "volume",
+        "spot-instances-request",
+        "network-interface"
+      ]
+    },
+    "RunInstancesMonitoringEnabled":{
+      "type":"structure",
+      "members":{
+        "Enabled":{
+          "shape":"Boolean",
+          "documentation":"<p>Enables or disables detailed instance monitoring.</p>"
+        }
+      },
+      "documentation":"<p>Configures detailed monitoring for WorkSpace Instance.</p>"
+    },
+    "SecurityGroupId":{
+      "type":"string",
+      "pattern":"sg-[0-9a-zA-Z]{1,63}"
+    },
+    "SecurityGroupIds":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupId"}
+    },
+    "SecurityGroupName":{
+      "type":"string",
+      "pattern":"(?!sg-)[\\w .:/()#,@\\[\\]+=&;{}!$*-]{0,255}"
+    },
+    "SecurityGroupNames":{
+      "type":"list",
+      "member":{"shape":"SecurityGroupName"}
+    },
+    "ServiceQuotaExceededException":{
+      "type":"structure",
+      "required":[
+        "Message",
+        "ResourceId",
+        "ResourceType",
+        "ServiceCode",
+        "QuotaCode"
+      ],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the quota limitation.</p>"
+        },
+        "ResourceId":{
+          "shape":"String",
+          "documentation":"<p>Identifier of the resource related to the quota.</p>"
+        },
+        "ResourceType":{
+          "shape":"String",
+          "documentation":"<p>Type of resource related to the quota.</p>"
+        },
+        "ServiceCode":{
+          "shape":"String",
+          "documentation":"<p>Code identifying the service with the quota limitation.</p>"
+        },
+        "QuotaCode":{
+          "shape":"String",
+          "documentation":"<p>Specific code for the exceeded quota.</p>"
+        }
+      },
+      "documentation":"<p>Indicates that a service quota has been exceeded.</p>",
+      "exception":true
+    },
+    "SnapshotId":{
+      "type":"string",
+      "pattern":"snap-[0-9a-zA-Z]{1,63}"
+    },
+    "SpotInstanceTypeEnum":{
+      "type":"string",
+      "enum":[
+        "one-time",
+        "persistent"
+      ]
+    },
+    "SpotMarketOptions":{
+      "type":"structure",
+      "members":{
+        "BlockDurationMinutes":{
+          "shape":"NonNegativeInteger",
+          "documentation":"<p>Duration of spot instance block reservation.</p>"
+        },
+        "InstanceInterruptionBehavior":{
+          "shape":"InstanceInterruptionBehaviorEnum",
+          "documentation":"<p>Specifies behavior when spot instance is interrupted.</p>"
+        },
+        "MaxPrice":{
+          "shape":"String64",
+          "documentation":"<p>Maximum hourly price for spot instance.</p>"
+        },
+        "SpotInstanceType":{
+          "shape":"SpotInstanceTypeEnum",
+          "documentation":"<p>Defines the type of spot instance request.</p>"
+        },
+        "ValidUntilUtc":{
+          "shape":"Timestamp",
+          "documentation":"<p>Timestamp until which spot instance request is valid.</p>"
+        }
+      },
+      "documentation":"<p>Defines configuration for spot instance deployment.</p>"
+    },
+    "String":{"type":"string"},
+    "String128":{
+      "type":"string",
+      "max":128,
+      "min":0
+    },
+    "String64":{
+      "type":"string",
+      "max":64,
+      "min":0
+    },
+    "SubnetId":{
+      "type":"string",
+      "pattern":"subnet-[0-9a-zA-Z]{1,63}"
+    },
+    "Tag":{
+      "type":"structure",
+      "members":{
+        "Key":{
+          "shape":"TagKey",
+          "documentation":"<p>Unique identifier for the tag.</p>"
+        },
+        "Value":{
+          "shape":"TagValue",
+          "documentation":"<p>Value associated with the tag key.</p>"
+        }
+      },
+      "documentation":"<p>Represents a key-value metadata tag.</p>"
+    },
+    "TagKey":{
+      "type":"string",
+      "max":128,
+      "min":1,
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]+)"
+    },
+    "TagKeyList":{
+      "type":"list",
+      "member":{"shape":"TagKey"},
+      "max":30,
+      "min":1
+    },
+    "TagList":{
+      "type":"list",
+      "member":{"shape":"Tag"},
+      "max":30,
+      "min":0
+    },
+    "TagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "WorkspaceInstanceId",
+        "Tags"
+      ],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the WorkSpace Instance to tag.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Tags to be added to the WorkSpace Instance.</p>"
+        }
+      },
+      "documentation":"<p>Specifies tags to add to a WorkSpace Instance.</p>"
+    },
+    "TagResourceResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms successful tag addition.</p>"
+    },
+    "TagSpecification":{
+      "type":"structure",
+      "members":{
+        "ResourceType":{
+          "shape":"ResourceTypeEnum",
+          "documentation":"<p>Type of resource being tagged.</p>"
+        },
+        "Tags":{
+          "shape":"TagList",
+          "documentation":"<p>Collection of tags for the specified resource.</p>"
+        }
+      },
+      "documentation":"<p>Defines tagging configuration for a resource.</p>"
+    },
+    "TagSpecifications":{
+      "type":"list",
+      "member":{"shape":"TagSpecification"},
+      "max":30,
+      "min":0
+    },
+    "TagValue":{
+      "type":"string",
+      "max":256,
+      "min":0,
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)"
+    },
+    "TenancyEnum":{
+      "type":"string",
+      "enum":[
+        "default",
+        "dedicated",
+        "host"
+      ]
+    },
+    "ThrottlingException":{
+      "type":"structure",
+      "required":["Message"],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Description of the throttling event.</p>"
+        },
+        "ServiceCode":{
+          "shape":"String",
+          "documentation":"<p>Code identifying the service experiencing throttling.</p>"
+        },
+        "QuotaCode":{
+          "shape":"String",
+          "documentation":"<p>Specific code for the throttling quota.</p>"
+        },
+        "RetryAfterSeconds":{
+          "shape":"Integer",
+          "documentation":"<p>Recommended wait time before retrying the request.</p>"
+        }
+      },
+      "documentation":"<p>Indicates the request rate has exceeded limits.</p>",
+      "exception":true,
+      "retryable":{"throttling":true}
+    },
+    "Timestamp":{"type":"timestamp"},
+    "UntagResourceRequest":{
+      "type":"structure",
+      "required":[
+        "WorkspaceInstanceId",
+        "TagKeys"
+      ],
+      "members":{
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier of the WorkSpace Instance to untag.</p>"
+        },
+        "TagKeys":{
+          "shape":"TagKeyList",
+          "documentation":"<p>Keys of tags to be removed.</p>"
+        }
+      },
+      "documentation":"<p>Specifies tags to remove from a WorkSpace Instance.</p>"
+    },
+    "UntagResourceResponse":{
+      "type":"structure",
+      "members":{
+      },
+      "documentation":"<p>Confirms successful tag removal.</p>"
+    },
+    "UserData":{
+      "type":"string",
+      "max":16000,
+      "min":0,
+      "sensitive":true
+    },
+    "ValidationException":{
+      "type":"structure",
+      "required":[
+        "Message",
+        "Reason"
+      ],
+      "members":{
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Overall description of validation failures.</p>"
+        },
+        "Reason":{
+          "shape":"ValidationExceptionReason",
+          "documentation":"<p>Specific reason for the validation failure.</p>"
+        },
+        "FieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>List of fields that failed validation.</p>"
+        }
+      },
+      "documentation":"<p>Indicates invalid input parameters in the request.</p>",
+      "exception":true
+    },
+    "ValidationExceptionField":{
+      "type":"structure",
+      "required":[
+        "Name",
+        "Reason",
+        "Message"
+      ],
+      "members":{
+        "Name":{
+          "shape":"String",
+          "documentation":"<p>Name of the field that failed validation.</p>"
+        },
+        "Reason":{
+          "shape":"String",
+          "documentation":"<p>Reason for the validation failure.</p>"
+        },
+        "Message":{
+          "shape":"String",
+          "documentation":"<p>Detailed error message describing the validation issue.</p>"
+        }
+      },
+      "documentation":"<p>Represents a validation error field in an API request.</p>"
+    },
+    "ValidationExceptionFieldList":{
+      "type":"list",
+      "member":{"shape":"ValidationExceptionField"}
+    },
+    "ValidationExceptionReason":{
+      "type":"string",
+      "enum":[
+        "UNKNOWN_OPERATION",
+        "UNSUPPORTED_OPERATION",
+        "CANNOT_PARSE",
+        "FIELD_VALIDATION_FAILED",
+        "DEPENDENCY_FAILURE",
+        "OTHER"
+      ]
+    },
+    "VirtualName":{
+      "type":"string",
+      "pattern":"ephemeral(0|[1-9][0-9]{0,2})"
+    },
+    "VolumeId":{
+      "type":"string",
+      "pattern":"vol-[0-9a-zA-Z]{1,63}"
+    },
+    "VolumeTypeEnum":{
+      "type":"string",
+      "enum":[
+        "standard",
+        "io1",
+        "io2",
+        "gp2",
+        "sc1",
+        "st1",
+        "gp3"
+      ]
+    },
+    "WorkspaceInstance":{
+      "type":"structure",
+      "members":{
+        "ProvisionState":{
+          "shape":"ProvisionStateEnum",
+          "documentation":"<p>Current provisioning state of the WorkSpace Instance.</p>"
+        },
+        "WorkspaceInstanceId":{
+          "shape":"WorkspaceInstanceId",
+          "documentation":"<p>Unique identifier for the WorkSpace Instance.</p>"
+        },
+        "EC2ManagedInstance":{
+          "shape":"EC2ManagedInstance",
+          "documentation":"<p>Details of the associated EC2 managed instance.</p>"
+        }
+      },
+      "documentation":"<p>Represents a single WorkSpace Instance.</p>"
+    },
+    "WorkspaceInstanceError":{
+      "type":"structure",
+      "members":{
+        "ErrorCode":{
+          "shape":"String",
+          "documentation":"<p>Unique error code for the WorkSpace Instance error.</p>"
+        },
+        "ErrorMessage":{
+          "shape":"String",
+          "documentation":"<p>Detailed description of the WorkSpace Instance error.</p>"
+        }
+      },
+      "documentation":"<p>Captures errors specific to WorkSpace Instance operations.</p>"
+    },
+    "WorkspaceInstanceErrors":{
+      "type":"list",
+      "member":{"shape":"WorkspaceInstanceError"}
+    },
+    "WorkspaceInstanceId":{
+      "type":"string",
+      "max":70,
+      "min":15,
+      "pattern":"wsinst-[0-9a-zA-Z]{8,63}"
+    },
+    "WorkspaceInstances":{
+      "type":"list",
+      "member":{"shape":"WorkspaceInstance"}
+    }
+  },
+  "documentation":"<p>Amazon WorkSpaces Instances provides an API framework for managing virtual workspace environments across multiple AWS regions, enabling programmatic creation and configuration of desktop infrastructure.</p>"
+}
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/waiters-2.json 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces-instances/2022-07-26/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-instances/2022-07-26/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/service-2.json 2.31.35-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/service-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-thin-client/2023-08-22/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -26,9 +26,9 @@
         {"shape":"ServiceQuotaExceededException"},
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Creates an environment for your thin client devices.</p>",
@@ -46,9 +46,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes a thin client device.</p>",
@@ -67,9 +67,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deletes an environment.</p>",
@@ -88,9 +88,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Deregisters a thin client device.</p>",
@@ -239,9 +239,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Assigns one or more tags (key-value pairs) to the specified resource.</p>",
@@ -259,9 +259,9 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
-        {"shape":"ConflictException"},
         {"shape":"InternalServerException"}
       ],
       "documentation":"<p>Removes a tag or tags from a resource.</p>",
@@ -300,6 +300,7 @@
       "errors":[
         {"shape":"ValidationException"},
         {"shape":"AccessDeniedException"},
+        {"shape":"ConflictException"},
         {"shape":"ResourceNotFoundException"},
         {"shape":"ThrottlingException"},
         {"shape":"InternalServerException"}
@@ -344,7 +345,8 @@
     },
     "ActivationCode":{
       "type":"string",
-      "pattern":"[a-z]{2}[a-z0-9]{6}"
+      "pattern":"[a-z]{2}[a-z0-9]{6}",
+      "sensitive":true
     },
     "ApplyTimeOf":{
       "type":"string",
@@ -634,9 +636,9 @@
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Key Management Service key used to encrypt the device.</p>"
         },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>The tag keys and optional values for the resource.</p>"
+        "lastUserId":{
+          "shape":"UserId",
+          "documentation":"<p>The user ID of the most recent session on the device.</p>"
         }
       },
       "documentation":"<p>Describes a thin client device.</p>"
@@ -671,7 +673,9 @@
     },
     "DeviceName":{
       "type":"string",
-      "pattern":"[0-9\\p{IsAlphabetic}+:,.@'\" -]{1,64}",
+      "max":64,
+      "min":0,
+      "pattern":"$|^[0-9\\p{IsAlphabetic}+:,.@'\" -]*",
       "sensitive":true
     },
     "DeviceSoftwareSetComplianceStatus":{
@@ -753,6 +757,10 @@
         "arn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the device.</p>"
+        },
+        "lastUserId":{
+          "shape":"UserId",
+          "documentation":"<p>The user ID of the most recent session on the device.</p>"
         }
       },
       "documentation":"<p>Describes a thin client device.</p>"
@@ -832,10 +840,6 @@
           "shape":"KmsKeyArn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the Key Management Service key used to encrypt the environment.</p>"
         },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>The tag keys and optional values for the resource.</p>"
-        },
         "deviceCreationTags":{
           "shape":"DeviceCreationTagsMap",
           "documentation":"<p>The tag keys and optional values for the newly created devices for this environment.</p>"
@@ -853,7 +857,9 @@
     },
     "EnvironmentName":{
       "type":"string",
-      "pattern":"[0-9\\p{IsAlphabetic}+:,.@'\" -][0-9\\p{IsAlphabetic}+=:,.@'\" -]{0,63}",
+      "max":64,
+      "min":0,
+      "pattern":"$|^[0-9\\p{IsAlphabetic}+:,.@'\" -][0-9\\p{IsAlphabetic}+=:,.@'\" -]*",
       "sensitive":true
     },
     "EnvironmentSoftwareSetComplianceStatus":{
@@ -1298,10 +1304,6 @@
         "arn":{
           "shape":"Arn",
           "documentation":"<p>The Amazon Resource Name (ARN) of the software set.</p>"
-        },
-        "tags":{
-          "shape":"TagsMap",
-          "documentation":"<p>The tag keys and optional values for the resource.</p>"
         }
       },
       "documentation":"<p>Describes a software set.</p>"
@@ -1583,6 +1585,10 @@
       "members":{
       }
     },
+    "UserId":{
+      "type":"string",
+      "sensitive":true
+    },
     "ValidationException":{
       "type":"structure",
       "members":{
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/paginators-1.json 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/paginators-1.json
--- 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/paginators-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/paginators-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,12 @@
       "output_token": "nextToken",
       "limit_key": "maxResults",
       "result_key": "dataProtectionSettings"
+    },
+    "ListSessionLoggers": {
+      "input_token": "nextToken",
+      "output_token": "nextToken",
+      "limit_key": "maxResults",
+      "result_key": "sessionLoggers"
     }
   }
 }
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/service-2.json 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/service-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,16 +2,15 @@
   "version":"2.0",
   "metadata":{
     "apiVersion":"2020-07-08",
+    "auth":["aws.auth#sigv4"],
     "endpointPrefix":"workspaces-web",
-    "jsonVersion":"1.1",
     "protocol":"rest-json",
     "protocols":["rest-json"],
     "serviceFullName":"Amazon WorkSpaces Web",
     "serviceId":"WorkSpaces Web",
     "signatureVersion":"v4",
     "signingName":"workspaces-web",
-    "uid":"workspaces-web-2020-07-08",
-    "auth":["aws.auth#sigv4"]
+    "uid":"workspaces-web-2020-07-08"
   },
   "operations":{
     "AssociateBrowserSettings":{
@@ -94,6 +93,26 @@
       "documentation":"<p>Associates a network settings resource with a web portal.</p>",
       "idempotent":true
     },
+    "AssociateSessionLogger":{
+      "name":"AssociateSessionLogger",
+      "http":{
+        "method":"PUT",
+        "requestUri":"/portals/{portalArn+}/sessionLogger",
+        "responseCode":200
+      },
+      "input":{"shape":"AssociateSessionLoggerRequest"},
+      "output":{"shape":"AssociateSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Associates a session logger with a portal.</p>",
+      "idempotent":true
+    },
     "AssociateTrustStore":{
       "name":"AssociateTrustStore",
       "http":{
@@ -272,6 +291,25 @@
       ],
       "documentation":"<p>Creates a web portal.</p>"
     },
+    "CreateSessionLogger":{
+      "name":"CreateSessionLogger",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessionLoggers",
+        "responseCode":200
+      },
+      "input":{"shape":"CreateSessionLoggerRequest"},
+      "output":{"shape":"CreateSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ServiceQuotaExceededException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Creates a session logger.</p>"
+    },
     "CreateTrustStore":{
       "name":"CreateTrustStore",
       "http":{
@@ -443,6 +481,25 @@
       "documentation":"<p>Deletes a web portal.</p>",
       "idempotent":true
     },
+    "DeleteSessionLogger":{
+      "name":"DeleteSessionLogger",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/sessionLoggers/{sessionLoggerArn+}",
+        "responseCode":200
+      },
+      "input":{"shape":"DeleteSessionLoggerRequest"},
+      "output":{"shape":"DeleteSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"},
+        {"shape":"ConflictException"}
+      ],
+      "documentation":"<p>Deletes a session logger resource.</p>",
+      "idempotent":true
+    },
     "DeleteTrustStore":{
       "name":"DeleteTrustStore",
       "http":{
@@ -580,6 +637,25 @@
       "documentation":"<p>Disassociates network settings from a web portal.</p>",
       "idempotent":true
     },
+    "DisassociateSessionLogger":{
+      "name":"DisassociateSessionLogger",
+      "http":{
+        "method":"DELETE",
+        "requestUri":"/portals/{portalArn+}/sessionLogger",
+        "responseCode":200
+      },
+      "input":{"shape":"DisassociateSessionLoggerRequest"},
+      "output":{"shape":"DisassociateSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Disassociates a session logger from a portal.</p>",
+      "idempotent":true
+    },
     "DisassociateTrustStore":{
       "name":"DisassociateTrustStore",
       "http":{
@@ -803,6 +879,24 @@
       ],
       "documentation":"<p>Gets information for a secure browser session.</p>"
     },
+    "GetSessionLogger":{
+      "name":"GetSessionLogger",
+      "http":{
+        "method":"GET",
+        "requestUri":"/sessionLoggers/{sessionLoggerArn+}",
+        "responseCode":200
+      },
+      "input":{"shape":"GetSessionLoggerRequest"},
+      "output":{"shape":"GetSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Gets details about a specific session logger resource.</p>"
+    },
     "GetTrustStore":{
       "name":"GetTrustStore",
       "http":{
@@ -977,6 +1071,23 @@
       ],
       "documentation":"<p>Retrieves a list or web portals.</p>"
     },
+    "ListSessionLoggers":{
+      "name":"ListSessionLoggers",
+      "http":{
+        "method":"GET",
+        "requestUri":"/sessionLoggers",
+        "responseCode":200
+      },
+      "input":{"shape":"ListSessionLoggersRequest"},
+      "output":{"shape":"ListSessionLoggersResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Lists all available session logger resources.</p>"
+    },
     "ListSessions":{
       "name":"ListSessions",
       "http":{
@@ -1231,6 +1342,24 @@
       "documentation":"<p>Updates a web portal.</p>",
       "idempotent":true
     },
+    "UpdateSessionLogger":{
+      "name":"UpdateSessionLogger",
+      "http":{
+        "method":"POST",
+        "requestUri":"/sessionLoggers/{sessionLoggerArn+}",
+        "responseCode":200
+      },
+      "input":{"shape":"UpdateSessionLoggerRequest"},
+      "output":{"shape":"UpdateSessionLoggerResponse"},
+      "errors":[
+        {"shape":"InternalServerException"},
+        {"shape":"ResourceNotFoundException"},
+        {"shape":"AccessDeniedException"},
+        {"shape":"ThrottlingException"},
+        {"shape":"ValidationException"}
+      ],
+      "documentation":"<p>Updates the details of a session logger.</p>"
+    },
     "UpdateTrustStore":{
       "name":"UpdateTrustStore",
       "http":{
@@ -1292,7 +1421,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+$"
+      "pattern":"arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36})+"
     },
     "AccessDeniedException":{
       "type":"structure",
@@ -1313,152 +1442,190 @@
     "AssociateBrowserSettingsRequest":{
       "type":"structure",
       "required":[
-        "browserSettingsArn",
-        "portalArn"
+        "portalArn",
+        "browserSettingsArn"
       ],
       "members":{
-        "browserSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the browser settings.</p>",
-          "location":"querystring",
-          "locationName":"browserSettingsArn"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>",
           "location":"uri",
           "locationName":"portalArn"
+        },
+        "browserSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the browser settings.</p>",
+          "location":"querystring",
+          "locationName":"browserSettingsArn"
         }
       }
     },
     "AssociateBrowserSettingsResponse":{
       "type":"structure",
       "required":[
-        "browserSettingsArn",
-        "portalArn"
+        "portalArn",
+        "browserSettingsArn"
       ],
       "members":{
-        "browserSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the browser settings.</p>"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>"
+        },
+        "browserSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the browser settings.</p>"
         }
       }
     },
     "AssociateDataProtectionSettingsRequest":{
       "type":"structure",
       "required":[
-        "dataProtectionSettingsArn",
-        "portalArn"
+        "portalArn",
+        "dataProtectionSettingsArn"
       ],
       "members":{
-        "dataProtectionSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the data protection settings.</p>",
-          "location":"querystring",
-          "locationName":"dataProtectionSettingsArn"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>",
           "location":"uri",
           "locationName":"portalArn"
+        },
+        "dataProtectionSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the data protection settings.</p>",
+          "location":"querystring",
+          "locationName":"dataProtectionSettingsArn"
         }
       }
     },
     "AssociateDataProtectionSettingsResponse":{
       "type":"structure",
       "required":[
-        "dataProtectionSettingsArn",
-        "portalArn"
+        "portalArn",
+        "dataProtectionSettingsArn"
       ],
       "members":{
-        "dataProtectionSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the data protection settings resource.</p>"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>"
+        },
+        "dataProtectionSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the data protection settings resource.</p>"
         }
       }
     },
     "AssociateIpAccessSettingsRequest":{
       "type":"structure",
       "required":[
-        "ipAccessSettingsArn",
-        "portalArn"
+        "portalArn",
+        "ipAccessSettingsArn"
       ],
       "members":{
-        "ipAccessSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the IP access settings.</p>",
-          "location":"querystring",
-          "locationName":"ipAccessSettingsArn"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>",
           "location":"uri",
           "locationName":"portalArn"
+        },
+        "ipAccessSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the IP access settings.</p>",
+          "location":"querystring",
+          "locationName":"ipAccessSettingsArn"
         }
       }
     },
     "AssociateIpAccessSettingsResponse":{
       "type":"structure",
       "required":[
-        "ipAccessSettingsArn",
-        "portalArn"
+        "portalArn",
+        "ipAccessSettingsArn"
       ],
       "members":{
-        "ipAccessSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the IP access settings resource.</p>"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>"
+        },
+        "ipAccessSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the IP access settings resource.</p>"
         }
       }
     },
     "AssociateNetworkSettingsRequest":{
       "type":"structure",
       "required":[
-        "networkSettingsArn",
-        "portalArn"
+        "portalArn",
+        "networkSettingsArn"
       ],
       "members":{
+        "portalArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the web portal.</p>",
+          "location":"uri",
+          "locationName":"portalArn"
+        },
         "networkSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the network settings.</p>",
           "location":"querystring",
           "locationName":"networkSettingsArn"
+        }
+      }
+    },
+    "AssociateNetworkSettingsResponse":{
+      "type":"structure",
+      "required":[
+        "portalArn",
+        "networkSettingsArn"
+      ],
+      "members":{
+        "portalArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the web portal.</p>"
         },
+        "networkSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the network settings.</p>"
+        }
+      }
+    },
+    "AssociateSessionLoggerRequest":{
+      "type":"structure",
+      "required":[
+        "portalArn",
+        "sessionLoggerArn"
+      ],
+      "members":{
         "portalArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>",
+          "documentation":"<p>The ARN of the portal to associate to the session logger ARN.</p>",
           "location":"uri",
           "locationName":"portalArn"
+        },
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger to associate to the portal ARN.</p>",
+          "location":"querystring",
+          "locationName":"sessionLoggerArn"
         }
       }
     },
-    "AssociateNetworkSettingsResponse":{
+    "AssociateSessionLoggerResponse":{
       "type":"structure",
       "required":[
-        "networkSettingsArn",
-        "portalArn"
+        "portalArn",
+        "sessionLoggerArn"
       ],
       "members":{
-        "networkSettingsArn":{
+        "portalArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the network settings.</p>"
+          "documentation":"<p>The ARN of the portal.</p>"
         },
-        "portalArn":{
+        "sessionLoggerArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>"
+          "documentation":"<p>The ARN of the session logger.</p>"
         }
       }
     },
@@ -1594,9 +1761,9 @@
       "type":"structure",
       "required":["browserSettingsArn"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the browser settings.</p>"
+        "browserSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the browser settings.</p>"
         },
         "associatedPortalArns":{
           "shape":"ArnList",
@@ -1606,13 +1773,13 @@
           "shape":"BrowserPolicy",
           "documentation":"<p>A JSON string containing Chrome Enterprise policies that will be applied to all streaming sessions.</p>"
         },
-        "browserSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the browser settings.</p>"
-        },
         "customerManagedKey":{
           "shape":"keyArn",
           "documentation":"<p>The customer managed key used to encrypt sensitive information in the browser settings.</p>"
+        },
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the browser settings.</p>"
         }
       },
       "documentation":"<p>The browser settings resource that can be associated with a web portal. Once associated with a web portal, browser settings control how the browser will behave once a user starts a streaming session for the web portal. </p>"
@@ -1640,40 +1807,44 @@
       "type":"string",
       "max":50,
       "min":1,
-      "pattern":"^[_\\-\\d\\w]+$",
+      "pattern":"[_\\-\\d\\w]+",
       "sensitive":true
     },
     "Certificate":{
       "type":"structure",
       "members":{
-        "body":{
-          "shape":"CertificateAuthorityBody",
-          "documentation":"<p>The body of the certificate.</p>"
+        "thumbprint":{
+          "shape":"CertificateThumbprint",
+          "documentation":"<p>A hexadecimal identifier for the certificate.</p>"
+        },
+        "subject":{
+          "shape":"CertificatePrincipal",
+          "documentation":"<p>The entity the certificate belongs to.</p>"
         },
         "issuer":{
           "shape":"CertificatePrincipal",
           "documentation":"<p>The entity that issued the certificate.</p>"
         },
-        "notValidAfter":{
-          "shape":"Timestamp",
-          "documentation":"<p>The certificate is not valid after this date.</p>"
-        },
         "notValidBefore":{
           "shape":"Timestamp",
           "documentation":"<p>The certificate is not valid before this date.</p>"
         },
-        "subject":{
-          "shape":"CertificatePrincipal",
-          "documentation":"<p>The entity the certificate belongs to.</p>"
+        "notValidAfter":{
+          "shape":"Timestamp",
+          "documentation":"<p>The certificate is not valid after this date.</p>"
         },
-        "thumbprint":{
-          "shape":"CertificateThumbprint",
-          "documentation":"<p>A hexadecimal identifier for the certificate.</p>"
+        "body":{
+          "shape":"CertificateAuthorityBody",
+          "documentation":"<p>The body of the certificate.</p>"
         }
       },
       "documentation":"<p>The certificate.</p>"
     },
-    "CertificateAuthorityBody":{"type":"blob"},
+    "CertificateAuthorityBody":{
+      "type":"blob",
+      "max":32768,
+      "min":1
+    },
     "CertificateList":{
       "type":"list",
       "member":{"shape":"CertificateAuthorityBody"}
@@ -1682,30 +1853,30 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^\\S+$"
+      "pattern":"\\S+"
     },
     "CertificateSummary":{
       "type":"structure",
       "members":{
+        "thumbprint":{
+          "shape":"CertificateThumbprint",
+          "documentation":"<p>A hexadecimal identifier for the certificate.</p>"
+        },
+        "subject":{
+          "shape":"CertificatePrincipal",
+          "documentation":"<p>The entity the certificate belongs to.</p>"
+        },
         "issuer":{
           "shape":"CertificatePrincipal",
           "documentation":"<p>The entity that issued the certificate.</p>"
         },
-        "notValidAfter":{
-          "shape":"Timestamp",
-          "documentation":"<p>The certificate is not valid after this date.</p>"
-        },
         "notValidBefore":{
           "shape":"Timestamp",
           "documentation":"<p>The certificate is not valid before this date.</p>"
         },
-        "subject":{
-          "shape":"CertificatePrincipal",
-          "documentation":"<p>The entity the certificate belongs to.</p>"
-        },
-        "thumbprint":{
-          "shape":"CertificateThumbprint",
-          "documentation":"<p>A hexadecimal identifier for the certificate.</p>"
+        "notValidAfter":{
+          "shape":"Timestamp",
+          "documentation":"<p>The certificate is not valid after this date.</p>"
         }
       },
       "documentation":"<p>The summary of the certificate.</p>"
@@ -1718,7 +1889,7 @@
       "type":"string",
       "max":64,
       "min":64,
-      "pattern":"^[A-Fa-f0-9]{64}$"
+      "pattern":"[A-Fa-f0-9]{64}"
     },
     "CertificateThumbprintList":{
       "type":"list",
@@ -1759,7 +1930,7 @@
       "type":"string",
       "max":253,
       "min":0,
-      "pattern":"^(\\.?)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$",
+      "pattern":"(\\.?)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z0-9][a-z0-9-]{0,61}[a-z0-9]",
       "sensitive":true
     },
     "CookieName":{
@@ -1772,7 +1943,7 @@
       "type":"string",
       "max":2000,
       "min":0,
-      "pattern":"^/(\\S)*$",
+      "pattern":"/(\\S)*",
       "sensitive":true
     },
     "CookieSpecification":{
@@ -1820,6 +1991,14 @@
       "type":"structure",
       "required":["browserPolicy"],
       "members":{
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the browser settings resource. A tag is a key-value pair.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The custom managed key of the browser settings.</p>"
+        },
         "additionalEncryptionContext":{
           "shape":"EncryptionContextMap",
           "documentation":"<p>Additional encryption context of the browser settings.</p>"
@@ -1832,14 +2011,6 @@
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.</p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK. </p>",
           "idempotencyToken":true
-        },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The custom managed key of the browser settings.</p>"
-        },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags to add to the browser settings resource. A tag is a key-value pair.</p>"
         }
       }
     },
@@ -1856,34 +2027,34 @@
     "CreateDataProtectionSettingsRequest":{
       "type":"structure",
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>Additional encryption context of the data protection settings.</p>"
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The display name of the data protection settings.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
+        "description":{
+          "shape":"DescriptionSafe",
+          "documentation":"<p>The description of the data protection settings.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the data protection settings resource. A tag is a key-value pair.</p>"
         },
         "customerManagedKey":{
           "shape":"keyArn",
           "documentation":"<p>The custom managed key of the data protection settings.</p>"
         },
-        "description":{
-          "shape":"DescriptionSafe",
-          "documentation":"<p>The description of the data protection settings.</p>"
-        },
-        "displayName":{
-          "shape":"DisplayNameSafe",
-          "documentation":"<p>The display name of the data protection settings.</p>"
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>Additional encryption context of the data protection settings.</p>"
         },
         "inlineRedactionConfiguration":{
           "shape":"InlineRedactionConfiguration",
           "documentation":"<p>The inline redaction configuration of the data protection settings that will be applied to all sessions.</p>"
         },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags to add to the data protection settings resource. A tag is a key-value pair.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1900,20 +2071,15 @@
     "CreateIdentityProviderRequest":{
       "type":"structure",
       "required":[
-        "identityProviderDetails",
+        "portalArn",
         "identityProviderName",
         "identityProviderType",
-        "portalArn"
+        "identityProviderDetails"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.</p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "identityProviderDetails":{
-          "shape":"IdentityProviderDetails",
-          "documentation":"<p>The identity provider details. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
+        "portalArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the web portal.</p>"
         },
         "identityProviderName":{
           "shape":"IdentityProviderName",
@@ -1923,9 +2089,14 @@
           "shape":"IdentityProviderType",
           "documentation":"<p>The identity provider type.</p>"
         },
-        "portalArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>"
+        "identityProviderDetails":{
+          "shape":"IdentityProviderDetails",
+          "documentation":"<p>The identity provider details. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request.</p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         },
         "tags":{
           "shape":"TagList",
@@ -1947,34 +2118,34 @@
       "type":"structure",
       "required":["ipRules"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>Additional encryption context of the IP access settings.</p>"
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The display name of the IP access settings.</p>"
         },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the IP access settings.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the IP access settings resource. A tag is a key-value pair.</p>"
         },
         "customerManagedKey":{
           "shape":"keyArn",
           "documentation":"<p>The custom managed key of the IP access settings.</p>"
         },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the IP access settings.</p>"
-        },
-        "displayName":{
-          "shape":"DisplayName",
-          "documentation":"<p>The display name of the IP access settings.</p>"
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>Additional encryption context of the IP access settings.</p>"
         },
         "ipRules":{
           "shape":"IpRuleList",
           "documentation":"<p>The IP rules of the IP access settings.</p>"
         },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags to add to the IP access settings resource. A tag is a key-value pair.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -1991,31 +2162,31 @@
     "CreateNetworkSettingsRequest":{
       "type":"structure",
       "required":[
-        "securityGroupIds",
+        "vpcId",
         "subnetIds",
-        "vpcId"
+        "securityGroupIds"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "securityGroupIds":{
-          "shape":"SecurityGroupIdList",
-          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC.</p>"
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
         },
         "subnetIds":{
           "shape":"SubnetIdList",
           "documentation":"<p>The subnets in which network interfaces are created to connect streaming instances to your VPC. At least two of these subnets must be in different availability zones.</p>"
         },
+        "securityGroupIds":{
+          "shape":"SecurityGroupIdList",
+          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC.</p>"
+        },
         "tags":{
           "shape":"TagList",
           "documentation":"<p>The tags to add to the network settings resource. A tag is a key-value pair.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2032,26 +2203,30 @@
     "CreatePortalRequest":{
       "type":"structure",
       "members":{
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The name of the web portal. This is not visible to users who log into the web portal.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the web portal. A tag is a key-value pair.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The customer managed key of the web portal.</p>"
+        },
         "additionalEncryptionContext":{
           "shape":"EncryptionContextMap",
           "documentation":"<p>The additional encryption context of the portal.</p>"
         },
-        "authenticationType":{
-          "shape":"AuthenticationType",
-          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
-        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
           "idempotencyToken":true
         },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The customer managed key of the web portal.</p>"
-        },
-        "displayName":{
-          "shape":"DisplayName",
-          "documentation":"<p>The name of the web portal. This is not visible to users who log into the web portal.</p>"
+        "authenticationType":{
+          "shape":"AuthenticationType",
+          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
         },
         "instanceType":{
           "shape":"InstanceType",
@@ -2060,10 +2235,6 @@
         "maxConcurrentSessions":{
           "shape":"MaxConcurrentSessions",
           "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
-        },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags to add to the web portal. A tag is a key-value pair.</p>"
         }
       }
     },
@@ -2084,6 +2255,54 @@
         }
       }
     },
+    "CreateSessionLoggerRequest":{
+      "type":"structure",
+      "required":[
+        "eventFilter",
+        "logConfiguration"
+      ],
+      "members":{
+        "eventFilter":{
+          "shape":"EventFilter",
+          "documentation":"<p>The filter that specifies the events to monitor.</p>"
+        },
+        "logConfiguration":{
+          "shape":"LogConfiguration",
+          "documentation":"<p>The configuration that specifies where logs are delivered.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The human-readable display name for the session logger resource.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The custom managed key of the session logger.</p>"
+        },
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the session logger.</p>"
+        },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the session logger.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. If you do not specify a client token, one is automatically generated by the AWS SDK.</p>",
+          "idempotencyToken":true
+        }
+      }
+    },
+    "CreateSessionLoggerResponse":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger.</p>"
+        }
+      }
+    },
     "CreateTrustStoreRequest":{
       "type":"structure",
       "required":["certificateList"],
@@ -2092,14 +2311,14 @@
           "shape":"CertificateList",
           "documentation":"<p>A list of CA certificates to be added to the trust store.</p>"
         },
+        "tags":{
+          "shape":"TagList",
+          "documentation":"<p>The tags to add to the trust store. A tag is a key-value pair.</p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
           "idempotencyToken":true
-        },
-        "tags":{
-          "shape":"TagList",
-          "documentation":"<p>The tags to add to the trust store. A tag is a key-value pair.</p>"
         }
       }
     },
@@ -2117,11 +2336,6 @@
       "type":"structure",
       "required":["kinesisStreamArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
         "kinesisStreamArn":{
           "shape":"KinesisStreamArn",
           "documentation":"<p>The ARN of the Kinesis stream.</p>"
@@ -2129,6 +2343,11 @@
         "tags":{
           "shape":"TagList",
           "documentation":"<p>The tags to add to the user settings resource. A tag is a key-value pair.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -2146,52 +2365,27 @@
       "type":"structure",
       "required":[
         "copyAllowed",
-        "downloadAllowed",
         "pasteAllowed",
-        "printAllowed",
-        "uploadAllowed"
+        "downloadAllowed",
+        "uploadAllowed",
+        "printAllowed"
       ],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the user settings.</p>"
-        },
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "cookieSynchronizationConfiguration":{
-          "shape":"CookieSynchronizationConfiguration",
-          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
-        },
         "copyAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can copy text from the streaming session to the local device.</p>"
         },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The customer managed key used to encrypt sensitive information in the user settings.</p>"
-        },
-        "deepLinkAllowed":{
+        "pasteAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
-        },
-        "disconnectTimeoutInMinutes":{
-          "shape":"DisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
         },
         "downloadAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can download files from the streaming session to the local device.</p>"
         },
-        "idleDisconnectTimeoutInMinutes":{
-          "shape":"IdleDisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
-        },
-        "pasteAllowed":{
+        "uploadAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
         },
         "printAllowed":{
           "shape":"EnabledType",
@@ -2201,9 +2395,38 @@
           "shape":"TagList",
           "documentation":"<p>The tags to add to the user settings resource. A tag is a key-value pair.</p>"
         },
-        "uploadAllowed":{
+        "disconnectTimeoutInMinutes":{
+          "shape":"DisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+        },
+        "idleDisconnectTimeoutInMinutes":{
+          "shape":"IdleDisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
+        },
+        "cookieSynchronizationConfiguration":{
+          "shape":"CookieSynchronizationConfiguration",
+          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The customer managed key used to encrypt sensitive information in the user settings.</p>"
+        },
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the user settings.</p>"
+        },
+        "deepLinkAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
+        },
+        "toolbarConfiguration":{
+          "shape":"ToolbarConfiguration",
+          "documentation":"<p>The configuration of the toolbar. This allows administrators to select the toolbar type and visual mode, set maximum display resolution for sessions, and choose which items are visible to end users during their sessions. If administrators do not modify these settings, end users retain control over their toolbar preferences.</p>"
         }
       }
     },
@@ -2224,14 +2447,6 @@
         "patternRegex"
       ],
       "members":{
-        "keywordRegex":{
-          "shape":"Regex",
-          "documentation":"<p>The keyword regex for the customer pattern. After there is a match to the pattern regex, the keyword regex is used to search within the proximity of the match. If there is a keyword match, then the match is confirmed. If no keyword regex is provided, the pattern regex match will automatically be confirmed. The format must follow JavaScript regex format. The pattern must be enclosed between slashes, and can have flags behind the second slash. For example, “/ab+c/gi”</p>"
-        },
-        "patternDescription":{
-          "shape":"DescriptionSafe",
-          "documentation":"<p>The pattern description for the customer pattern.</p>"
-        },
         "patternName":{
           "shape":"PatternName",
           "documentation":"<p>The pattern name for the custom pattern.</p>"
@@ -2239,6 +2454,14 @@
         "patternRegex":{
           "shape":"Regex",
           "documentation":"<p>The pattern regex for the customer pattern. The format must follow JavaScript regex format. The pattern must be enclosed between slashes, and can have flags behind the second slash. For example: “/ab+c/gi”.</p>"
+        },
+        "patternDescription":{
+          "shape":"DescriptionSafe",
+          "documentation":"<p>The pattern description for the customer pattern.</p>"
+        },
+        "keywordRegex":{
+          "shape":"Regex",
+          "documentation":"<p>The keyword regex for the customer pattern. After there is a match to the pattern regex, the keyword regex is used to search within the proximity of the match. If there is a keyword match, then the match is confirmed. If no keyword regex is provided, the pattern regex match will automatically be confirmed. The format must follow JavaScript regex format. The pattern must be enclosed between slashes, and can have flags behind the second slash. For example, “/ab+c/gi”</p>"
         }
       },
       "documentation":"<p>The pattern configuration for redacting custom data types in session.</p>"
@@ -2247,14 +2470,26 @@
       "type":"structure",
       "required":["dataProtectionSettingsArn"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the data protection settings.</p>"
+        "dataProtectionSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the data protection settings resource.</p>"
+        },
+        "inlineRedactionConfiguration":{
+          "shape":"InlineRedactionConfiguration",
+          "documentation":"<p>The inline redaction configuration for the data protection settings.</p>"
         },
         "associatedPortalArns":{
           "shape":"ArnList",
           "documentation":"<p>A list of web portal ARNs that this data protection settings resource is associated with.</p>"
         },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The display name of the data protection settings.</p>"
+        },
+        "description":{
+          "shape":"DescriptionSafe",
+          "documentation":"<p>The description of the data protection settings.</p>"
+        },
         "creationDate":{
           "shape":"Timestamp",
           "documentation":"<p>The creation date timestamp of the data protection settings.</p>"
@@ -2263,21 +2498,9 @@
           "shape":"keyArn",
           "documentation":"<p>The customer managed key used to encrypt sensitive information in the data protection settings.</p>"
         },
-        "dataProtectionSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the data protection settings resource.</p>"
-        },
-        "description":{
-          "shape":"DescriptionSafe",
-          "documentation":"<p>The description of the data protection settings.</p>"
-        },
-        "displayName":{
-          "shape":"DisplayNameSafe",
-          "documentation":"<p>The display name of the data protection settings.</p>"
-        },
-        "inlineRedactionConfiguration":{
-          "shape":"InlineRedactionConfiguration",
-          "documentation":"<p>The inline redaction configuration for the data protection settings.</p>"
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the data protection settings.</p>"
         }
       },
       "documentation":"<p>The data protection settings resource that can be associated with a web portal.</p>"
@@ -2290,21 +2513,21 @@
       "type":"structure",
       "required":["dataProtectionSettingsArn"],
       "members":{
-        "creationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation date timestamp of the data protection settings.</p>"
-        },
         "dataProtectionSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the data protection settings.</p>"
         },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The display name of the data protection settings.</p>"
+        },
         "description":{
           "shape":"DescriptionSafe",
           "documentation":"<p>The description of the data protection settings.</p>"
         },
-        "displayName":{
-          "shape":"DisplayNameSafe",
-          "documentation":"<p>The display name of the data protection settings.</p>"
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation date timestamp of the data protection settings.</p>"
         }
       },
       "documentation":"<p>The summary of the data protection settings.</p>"
@@ -2411,6 +2634,23 @@
       "members":{
       }
     },
+    "DeleteSessionLoggerRequest":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger.</p>",
+          "location":"uri",
+          "locationName":"sessionLoggerArn"
+        }
+      }
+    },
+    "DeleteSessionLoggerResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DeleteTrustStoreRequest":{
       "type":"structure",
       "required":["trustStoreArn"],
@@ -2466,14 +2706,14 @@
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^.+$",
+      "pattern":".+",
       "sensitive":true
     },
     "DescriptionSafe":{
       "type":"string",
       "max":256,
       "min":1,
-      "pattern":"^[ _\\-\\d\\w]+$",
+      "pattern":"[ _\\-\\d\\w]+",
       "sensitive":true
     },
     "DisassociateBrowserSettingsRequest":{
@@ -2544,6 +2784,23 @@
       "members":{
       }
     },
+    "DisassociateSessionLoggerRequest":{
+      "type":"structure",
+      "required":["portalArn"],
+      "members":{
+        "portalArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the portal to disassociate from the a session logger.</p>",
+          "location":"uri",
+          "locationName":"portalArn"
+        }
+      }
+    },
+    "DisassociateSessionLoggerResponse":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "DisassociateTrustStoreRequest":{
       "type":"structure",
       "required":["portalArn"],
@@ -2605,14 +2862,14 @@
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^.+$",
+      "pattern":".+",
       "sensitive":true
     },
     "DisplayNameSafe":{
       "type":"string",
       "max":64,
       "min":1,
-      "pattern":"^[ _\\-\\d\\w]+$",
+      "pattern":"[ _\\-\\d\\w]+",
       "sensitive":true
     },
     "EnabledType":{
@@ -2627,6 +2884,48 @@
       "key":{"shape":"StringType"},
       "value":{"shape":"StringType"}
     },
+    "Event":{
+      "type":"string",
+      "enum":[
+        "WebsiteInteract",
+        "FileDownloadFromSecureBrowserToRemoteDisk",
+        "FileTransferFromRemoteToLocalDisk",
+        "FileTransferFromLocalToRemoteDisk",
+        "FileUploadFromRemoteDiskToSecureBrowser",
+        "ContentPasteToWebsite",
+        "ContentTransferFromLocalToRemoteClipboard",
+        "ContentCopyFromWebsite",
+        "UrlLoad",
+        "TabOpen",
+        "TabClose",
+        "PrintJobSubmit",
+        "SessionConnect",
+        "SessionStart",
+        "SessionDisconnect",
+        "SessionEnd"
+      ]
+    },
+    "EventFilter":{
+      "type":"structure",
+      "members":{
+        "all":{
+          "shape":"Unit",
+          "documentation":"<p>The filter that monitors all of the available events, including any new events emitted in the future.</p>"
+        },
+        "include":{
+          "shape":"Events",
+          "documentation":"<p>The filter that monitors only the listed set of events. New events are not auto-monitored.</p>"
+        }
+      },
+      "documentation":"<p>The filter that specifies the events to monitor.</p>",
+      "union":true
+    },
+    "Events":{
+      "type":"list",
+      "member":{"shape":"Event"},
+      "max":100,
+      "min":1
+    },
     "ExceptionMessage":{"type":"string"},
     "ExpireSessionRequest":{
       "type":"structure",
@@ -2655,6 +2954,13 @@
       }
     },
     "FieldName":{"type":"string"},
+    "FolderStructure":{
+      "type":"string",
+      "enum":[
+        "Flat",
+        "NestedByDate"
+      ]
+    },
     "GetBrowserSettingsRequest":{
       "type":"structure",
       "required":["browserSettingsArn"],
@@ -2807,6 +3113,27 @@
         }
       }
     },
+    "GetSessionLoggerRequest":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger.</p>",
+          "location":"uri",
+          "locationName":"sessionLoggerArn"
+        }
+      }
+    },
+    "GetSessionLoggerResponse":{
+      "type":"structure",
+      "members":{
+        "sessionLogger":{
+          "shape":"SessionLogger",
+          "documentation":"<p>The session logger details.</p>"
+        }
+      }
+    },
     "GetSessionRequest":{
       "type":"structure",
       "required":[
@@ -2840,21 +3167,21 @@
     "GetTrustStoreCertificateRequest":{
       "type":"structure",
       "required":[
-        "thumbprint",
-        "trustStoreArn"
+        "trustStoreArn",
+        "thumbprint"
       ],
       "members":{
-        "thumbprint":{
-          "shape":"CertificateThumbprint",
-          "documentation":"<p>The thumbprint of the trust store certificate.</p>",
-          "location":"querystring",
-          "locationName":"thumbprint"
-        },
         "trustStoreArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the trust store certificate.</p>",
           "location":"uri",
           "locationName":"trustStoreArn"
+        },
+        "thumbprint":{
+          "shape":"CertificateThumbprint",
+          "documentation":"<p>The thumbprint of the trust store certificate.</p>",
+          "location":"querystring",
+          "locationName":"thumbprint"
         }
       }
     },
@@ -2862,13 +3189,13 @@
       "type":"structure",
       "required":["trustStoreArn"],
       "members":{
-        "certificate":{
-          "shape":"Certificate",
-          "documentation":"<p>The certificate of the trust store certificate.</p>"
-        },
         "trustStoreArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the trust store certificate.</p>"
+        },
+        "certificate":{
+          "shape":"Certificate",
+          "documentation":"<p>The certificate of the trust store certificate.</p>"
         }
       }
     },
@@ -2941,6 +3268,10 @@
       "max":100,
       "min":1
     },
+    "HiddenToolbarItemList":{
+      "type":"list",
+      "member":{"shape":"ToolbarItem"}
+    },
     "IdentityProvider":{
       "type":"structure",
       "required":["identityProviderArn"],
@@ -2949,10 +3280,6 @@
           "shape":"SubresourceARN",
           "documentation":"<p>The ARN of the identity provider.</p>"
         },
-        "identityProviderDetails":{
-          "shape":"IdentityProviderDetails",
-          "documentation":"<p>The identity provider details. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
-        },
         "identityProviderName":{
           "shape":"IdentityProviderName",
           "documentation":"<p>The identity provider name.</p>"
@@ -2960,6 +3287,10 @@
         "identityProviderType":{
           "shape":"IdentityProviderType",
           "documentation":"<p>The identity provider type.</p>"
+        },
+        "identityProviderDetails":{
+          "shape":"IdentityProviderDetails",
+          "documentation":"<p>The identity provider details. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by oidc_issuer key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
         }
       },
       "documentation":"<p>The identity provider.</p>"
@@ -2978,7 +3309,7 @@
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^[^_][\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}][^_]+$",
+      "pattern":"[^_][\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}][^_]+",
       "sensitive":true
     },
     "IdentityProviderSummary":{
@@ -3021,9 +3352,9 @@
       "type":"structure",
       "required":["inlineRedactionPatterns"],
       "members":{
-        "globalConfidenceLevel":{
-          "shape":"ConfidenceLevel",
-          "documentation":"<p>The global confidence level for the inline redaction configuration. This indicates the certainty of data type matches in the redaction process. Confidence level 3 means high confidence, and requires a formatted text pattern match in order for content to be redacted. Confidence level 2 means medium confidence, and redaction considers both formatted and unformatted text, and adds keyword associate to the logic. Confidence level 1 means low confidence, and redaction is enforced for both formatted pattern + unformatted pattern without keyword. This is applied to patterns that do not have a pattern-level confidence level. Defaults to confidence level 2.</p>"
+        "inlineRedactionPatterns":{
+          "shape":"InlineRedactionPatterns",
+          "documentation":"<p>The inline redaction patterns to be enabled for the inline redaction configuration.</p>"
         },
         "globalEnforcedUrls":{
           "shape":"GlobalInlineRedactionUrls",
@@ -3033,9 +3364,9 @@
           "shape":"GlobalInlineRedactionUrls",
           "documentation":"<p>The global exempt URL configuration for the inline redaction configuration. This is applied to patterns that do not have a pattern-level exempt URL list.</p>"
         },
-        "inlineRedactionPatterns":{
-          "shape":"InlineRedactionPatterns",
-          "documentation":"<p>The inline redaction patterns to be enabled for the inline redaction configuration.</p>"
+        "globalConfidenceLevel":{
+          "shape":"ConfidenceLevel",
+          "documentation":"<p>The global confidence level for the inline redaction configuration. This indicates the certainty of data type matches in the redaction process. Confidence level 3 means high confidence, and requires a formatted text pattern match in order for content to be redacted. Confidence level 2 means medium confidence, and redaction considers both formatted and unformatted text, and adds keyword associate to the logic. Confidence level 1 means low confidence, and redaction is enforced for both formatted pattern + unformatted pattern without keyword. This is applied to patterns that do not have a pattern-level confidence level. Defaults to confidence level 2.</p>"
         }
       },
       "documentation":"<p>The configuration for in-session inline redaction.</p>"
@@ -3048,14 +3379,14 @@
           "shape":"BuiltInPatternId",
           "documentation":"<p>The built-in pattern from the list of preconfigured patterns. Either a customPattern or builtInPatternId is required.</p>"
         },
-        "confidenceLevel":{
-          "shape":"ConfidenceLevel",
-          "documentation":"<p>The confidence level for inline redaction pattern. This indicates the certainty of data type matches in the redaction process. Confidence level 3 means high confidence, and requires a formatted text pattern match in order for content to be redacted. Confidence level 2 means medium confidence, and redaction considers both formatted and unformatted text, and adds keyword associate to the logic. Confidence level 1 means low confidence, and redaction is enforced for both formatted pattern + unformatted pattern without keyword. This overrides the global confidence level.</p>"
-        },
         "customPattern":{
           "shape":"CustomPattern",
           "documentation":"<p>&gt;The configuration for a custom pattern. Either a customPattern or builtInPatternId is required.</p>"
         },
+        "redactionPlaceHolder":{
+          "shape":"RedactionPlaceHolder",
+          "documentation":"<p>The redaction placeholder that will replace the redacted text in session for the inline redaction pattern.</p>"
+        },
         "enforcedUrls":{
           "shape":"InlineRedactionUrls",
           "documentation":"<p>The enforced URL configuration for the inline redaction pattern. This will override the global enforced URL configuration.</p>"
@@ -3064,9 +3395,9 @@
           "shape":"InlineRedactionUrls",
           "documentation":"<p>The exempt URL configuration for the inline redaction pattern. This will override the global exempt URL configuration for the inline redaction pattern.</p>"
         },
-        "redactionPlaceHolder":{
-          "shape":"RedactionPlaceHolder",
-          "documentation":"<p>The redaction placeholder that will replace the redacted text in session for the inline redaction pattern.</p>"
+        "confidenceLevel":{
+          "shape":"ConfidenceLevel",
+          "documentation":"<p>The confidence level for inline redaction pattern. This indicates the certainty of data type matches in the redaction process. Confidence level 3 means high confidence, and requires a formatted text pattern match in order for content to be redacted. Confidence level 2 means medium confidence, and redaction considers both formatted and unformatted text, and adds keyword associate to the logic. Confidence level 1 means low confidence, and redaction is enforced for both formatted pattern + unformatted pattern without keyword. This overrides the global confidence level.</p>"
         }
       },
       "documentation":"<p>The set of patterns that determine the data types redacted in session.</p>"
@@ -3079,7 +3410,7 @@
     },
     "InlineRedactionUrl":{
       "type":"string",
-      "pattern":"^((([a-zA-Z][a-zA-Z0-9+.-]*):\\/\\/(\\*|[\\w%._\\-\\+~#=@]+)?(\\/[^@\\s]*)?(?:\\?([^*\\s]+(?:\\*?)))?)|(\\*|[\\w%._\\-\\+~#=@]+\\.[\\w%._\\-\\+~#=@]+)(?::(\\d{1,5}))?(\\/[^@\\s]*)?(?:\\?([^*\\s]+(?:\\*?)))?|(([a-zA-Z][a-zA-Z0-9+.-]*):(\\/\\/)?\\*))$",
+      "pattern":"((([a-zA-Z][a-zA-Z0-9+.-]*):\\/\\/(\\*|[\\w%._\\-\\+~#=@]+)?(\\/[^@\\s]*)?(?:\\?([^*\\s]+(?:\\*?)))?)|(\\*|[\\w%._\\-\\+~#=@]+\\.[\\w%._\\-\\+~#=@]+)(?::(\\d{1,5}))?(\\/[^@\\s]*)?(?:\\?([^*\\s]+(?:\\*?)))?|(([a-zA-Z][a-zA-Z0-9+.-]*):(\\/\\/)?\\*))",
       "sensitive":true
     },
     "InlineRedactionUrls":{
@@ -3116,37 +3447,37 @@
       "type":"structure",
       "required":["ipAccessSettingsArn"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the IP access settings.</p>"
+        "ipAccessSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the IP access settings resource.</p>"
         },
         "associatedPortalArns":{
           "shape":"ArnList",
           "documentation":"<p>A list of web portal ARNs that this IP access settings resource is associated with.</p>"
         },
-        "creationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation date timestamp of the IP access settings.</p>"
+        "ipRules":{
+          "shape":"IpRuleList",
+          "documentation":"<p>The IP rules of the IP access settings.</p>"
         },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The customer managed key used to encrypt sensitive information in the IP access settings.</p>"
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p> The display name of the IP access settings.</p>"
         },
         "description":{
           "shape":"Description",
           "documentation":"<p>The description of the IP access settings.</p>"
         },
-        "displayName":{
-          "shape":"DisplayName",
-          "documentation":"<p> The display name of the IP access settings.</p>"
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation date timestamp of the IP access settings.</p>"
         },
-        "ipAccessSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the IP access settings resource.</p>"
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The customer managed key used to encrypt sensitive information in the IP access settings.</p>"
         },
-        "ipRules":{
-          "shape":"IpRuleList",
-          "documentation":"<p>The IP rules of the IP access settings.</p>"
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the IP access settings.</p>"
         }
       },
       "documentation":"<p>The IP access settings resource that can be associated with a web portal. </p>"
@@ -3159,21 +3490,21 @@
       "type":"structure",
       "required":["ipAccessSettingsArn"],
       "members":{
-        "creationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation date timestamp of the IP access settings.</p>"
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the IP access settings.</p>"
+        "ipAccessSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of IP access settings.</p>"
         },
         "displayName":{
           "shape":"DisplayName",
           "documentation":"<p>The display name of the IP access settings.</p>"
         },
-        "ipAccessSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of IP access settings.</p>"
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the IP access settings.</p>"
+        },
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation date timestamp of the IP access settings.</p>"
         }
       },
       "documentation":"<p>The summary of IP access settings.</p>"
@@ -3182,7 +3513,7 @@
       "type":"string",
       "max":15,
       "min":1,
-      "pattern":"^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$",
+      "pattern":"((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))",
       "sensitive":true
     },
     "IpAddressList":{
@@ -3194,20 +3525,20 @@
     "IpRange":{
       "type":"string",
       "documentation":"<p>A single IP address or an IP address range in CIDR notation</p>",
-      "pattern":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(?:/([0-9]|[12][0-9]|3[0-2])|)$",
+      "pattern":"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(?:/([0-9]|[12][0-9]|3[0-2])|)",
       "sensitive":true
     },
     "IpRule":{
       "type":"structure",
       "required":["ipRange"],
       "members":{
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the IP rule.</p>"
-        },
         "ipRange":{
           "shape":"IpRange",
           "documentation":"<p>The IP range of the IP rule.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the IP rule.</p>"
         }
       },
       "documentation":"<p>The IP rules of the IP access settings.</p>"
@@ -3229,17 +3560,17 @@
     "ListBrowserSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -3259,17 +3590,17 @@
     "ListDataProtectionSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -3290,18 +3621,18 @@
       "type":"structure",
       "required":["portalArn"],
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
         },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
+        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>",
@@ -3313,30 +3644,30 @@
     "ListIdentityProvidersResponse":{
       "type":"structure",
       "members":{
-        "identityProviders":{
-          "shape":"IdentityProviderList",
-          "documentation":"<p>The identity providers.</p>"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
+        },
+        "identityProviders":{
+          "shape":"IdentityProviderList",
+          "documentation":"<p>The identity providers.</p>"
         }
       }
     },
     "ListIpAccessSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -3356,17 +3687,17 @@
     "ListNetworkSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -3386,55 +3717,79 @@
     "ListPortalsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
     "ListPortalsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>"
-        },
         "portals":{
           "shape":"PortalList",
           "documentation":"<p>The portals in the list.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>"
         }
       }
     },
-    "ListSessionsRequest":{
+    "ListSessionLoggersRequest":{
       "type":"structure",
-      "required":["portalId"],
       "members":{
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
+        },
         "maxResults":{
           "shape":"MaxResults",
           "documentation":"<p>The maximum number of results to be included in the next page.</p>",
           "location":"querystring",
           "locationName":"maxResults"
+        }
+      }
+    },
+    "ListSessionLoggersResponse":{
+      "type":"structure",
+      "members":{
+        "sessionLoggers":{
+          "shape":"SessionLoggerList",
+          "documentation":"<p>The list of session loggers, including summaries of their details.</p>"
         },
         "nextToken":{
           "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
-          "location":"querystring",
-          "locationName":"nextToken"
-        },
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
+        }
+      }
+    },
+    "ListSessionsRequest":{
+      "type":"structure",
+      "required":["portalId"],
+      "members":{
         "portalId":{
           "shape":"PortalId",
           "documentation":"<p>The ID of the web portal for the sessions.</p>",
           "location":"uri",
           "locationName":"portalId"
         },
+        "username":{
+          "shape":"Username",
+          "documentation":"<p>The username of the session.</p>",
+          "location":"querystring",
+          "locationName":"username"
+        },
         "sessionId":{
           "shape":"SessionId",
           "documentation":"<p>The ID of the session.</p>",
@@ -3453,11 +3808,17 @@
           "location":"querystring",
           "locationName":"status"
         },
-        "username":{
-          "shape":"Username",
-          "documentation":"<p>The username of the session.</p>",
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
           "location":"querystring",
-          "locationName":"username"
+          "locationName":"maxResults"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
+          "location":"querystring",
+          "locationName":"nextToken"
         }
       }
     },
@@ -3465,13 +3826,13 @@
       "type":"structure",
       "required":["sessions"],
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
-        },
         "sessions":{
           "shape":"SessionSummaryList",
           "documentation":"<p>The sessions in a list.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
         }
       }
     },
@@ -3500,11 +3861,11 @@
       "type":"structure",
       "required":["trustStoreArn"],
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
+        "trustStoreArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the trust store</p>",
+          "location":"uri",
+          "locationName":"trustStoreArn"
         },
         "nextToken":{
           "shape":"PaginationToken",
@@ -3512,11 +3873,11 @@
           "location":"querystring",
           "locationName":"nextToken"
         },
-        "trustStoreArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the trust store</p>",
-          "location":"uri",
-          "locationName":"trustStoreArn"
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
@@ -3528,112 +3889,142 @@
           "shape":"CertificateSummaryList",
           "documentation":"<p>The certificate list.</p>"
         },
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.&gt;</p>"
-        },
         "trustStoreArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the trust store.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.&gt;</p>"
         }
       }
     },
     "ListTrustStoresRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
     "ListTrustStoresResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
-        },
         "trustStores":{
           "shape":"TrustStoreSummaryList",
           "documentation":"<p>The trust stores.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
         }
       }
     },
     "ListUserAccessLoggingSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
     "ListUserAccessLoggingSettingsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
-        },
         "userAccessLoggingSettings":{
           "shape":"UserAccessLoggingSettingsList",
           "documentation":"<p>The user access logging settings.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation.</p>"
         }
       }
     },
     "ListUserSettingsRequest":{
       "type":"structure",
       "members":{
-        "maxResults":{
-          "shape":"MaxResults",
-          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
-          "location":"querystring",
-          "locationName":"maxResults"
-        },
         "nextToken":{
           "shape":"PaginationToken",
           "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>",
           "location":"querystring",
           "locationName":"nextToken"
+        },
+        "maxResults":{
+          "shape":"MaxResults",
+          "documentation":"<p>The maximum number of results to be included in the next page.</p>",
+          "location":"querystring",
+          "locationName":"maxResults"
         }
       }
     },
     "ListUserSettingsResponse":{
       "type":"structure",
       "members":{
-        "nextToken":{
-          "shape":"PaginationToken",
-          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>"
-        },
         "userSettings":{
           "shape":"UserSettingsList",
           "documentation":"<p>The user settings.</p>"
+        },
+        "nextToken":{
+          "shape":"PaginationToken",
+          "documentation":"<p>The pagination token used to retrieve the next page of results for this operation. </p>"
         }
       }
     },
+    "LogConfiguration":{
+      "type":"structure",
+      "members":{
+        "s3":{
+          "shape":"S3LogConfiguration",
+          "documentation":"<p>The configuration for delivering the logs to S3.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of the log.</p>"
+    },
+    "LogFileFormat":{
+      "type":"string",
+      "enum":[
+        "JSONLines",
+        "Json"
+      ]
+    },
     "MaxConcurrentSessions":{
       "type":"integer",
       "box":true,
       "max":5000,
       "min":1
     },
+    "MaxDisplayResolution":{
+      "type":"string",
+      "enum":[
+        "size4096X2160",
+        "size3840X2160",
+        "size3440X1440",
+        "size2560X1440",
+        "size1920X1080",
+        "size1280X720",
+        "size1024X768",
+        "size800X600"
+      ]
+    },
     "MaxResults":{
       "type":"integer",
       "box":true,
@@ -3643,25 +4034,25 @@
       "type":"structure",
       "required":["networkSettingsArn"],
       "members":{
-        "associatedPortalArns":{
-          "shape":"ArnList",
-          "documentation":"<p>A list of web portal ARNs that this network settings is associated with.</p>"
-        },
         "networkSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the network settings.</p>"
         },
-        "securityGroupIds":{
-          "shape":"SecurityGroupIdList",
-          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC. </p>"
+        "associatedPortalArns":{
+          "shape":"ArnList",
+          "documentation":"<p>A list of web portal ARNs that this network settings is associated with.</p>"
+        },
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
         },
         "subnetIds":{
           "shape":"SubnetIdList",
           "documentation":"<p>The subnets in which network interfaces are created to connect streaming instances to your VPC. At least two of these subnets must be in different availability zones.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupIdList",
+          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC. </p>"
         }
       },
       "documentation":"<p>A network settings resource that can be associated with a web portal. Once associated with a web portal, network settings define how streaming instances will connect with your specified VPC. </p>"
@@ -3689,98 +4080,102 @@
       "type":"string",
       "max":2048,
       "min":1,
-      "pattern":"^\\S+$"
+      "pattern":"\\S+"
     },
     "PatternName":{
       "type":"string",
       "max":20,
       "min":1,
-      "pattern":"^[_\\-\\d\\w]+$",
+      "pattern":"[_\\-\\d\\w]+",
       "sensitive":true
     },
     "Portal":{
       "type":"structure",
       "required":["portalArn"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the portal.</p>"
-        },
-        "authenticationType":{
-          "shape":"AuthenticationType",
-          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
-        },
-        "browserSettingsArn":{
+        "portalArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the browser settings that is associated with this web portal.</p>"
+          "documentation":"<p>The ARN of the web portal.</p>"
+        },
+        "rendererType":{
+          "shape":"RendererType",
+          "documentation":"<p>The renderer that is used in streaming sessions.</p>"
         },
         "browserType":{
           "shape":"BrowserType",
           "documentation":"<p>The browser that users see when using a streaming session.</p>"
         },
+        "portalStatus":{
+          "shape":"PortalStatus",
+          "documentation":"<p>The status of the web portal.</p>"
+        },
+        "portalEndpoint":{
+          "shape":"PortalEndpoint",
+          "documentation":"<p>The endpoint URL of the web portal that users access in order to start streaming sessions.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The name of the web portal.</p>"
+        },
         "creationDate":{
           "shape":"Timestamp",
           "documentation":"<p>The creation date of the web portal.</p>"
         },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The customer managed key used to encrypt sensitive information in the portal.</p>"
+        "browserSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the browser settings that is associated with this web portal.</p>"
         },
         "dataProtectionSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the data protection settings.</p>"
         },
-        "displayName":{
-          "shape":"DisplayName",
-          "documentation":"<p>The name of the web portal.</p>"
-        },
-        "instanceType":{
-          "shape":"InstanceType",
-          "documentation":"<p>The type and resources of the underlying instance.</p>"
-        },
-        "ipAccessSettingsArn":{
+        "userSettingsArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the IP access settings.</p>"
-        },
-        "maxConcurrentSessions":{
-          "shape":"MaxConcurrentSessions",
-          "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
+          "documentation":"<p>The ARN of the user settings that is associated with the web portal.</p>"
         },
         "networkSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the network settings that is associated with the web portal.</p>"
         },
-        "portalArn":{
+        "sessionLoggerArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>"
+          "documentation":"<p>The ARN of the session logger that is assocaited with the portal.</p>"
         },
-        "portalEndpoint":{
-          "shape":"PortalEndpoint",
-          "documentation":"<p>The endpoint URL of the web portal that users access in order to start streaming sessions.</p>"
-        },
-        "portalStatus":{
-          "shape":"PortalStatus",
-          "documentation":"<p>The status of the web portal.</p>"
-        },
-        "rendererType":{
-          "shape":"RendererType",
-          "documentation":"<p>The renderer that is used in streaming sessions.</p>"
+        "trustStoreArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the trust store that is associated with the web portal.</p>"
         },
         "statusReason":{
           "shape":"StatusReason",
           "documentation":"<p>A message that explains why the web portal is in its current status.</p>"
         },
-        "trustStoreArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the trust store that is associated with the web portal.</p>"
-        },
         "userAccessLoggingSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the user access logging settings that is associated with the web portal.</p>"
         },
-        "userSettingsArn":{
+        "authenticationType":{
+          "shape":"AuthenticationType",
+          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
+        },
+        "ipAccessSettingsArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the user settings that is associated with the web portal.</p>"
+          "documentation":"<p>The ARN of the IP access settings.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The customer managed key used to encrypt sensitive information in the portal.</p>"
+        },
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the portal.</p>"
+        },
+        "instanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>The type and resources of the underlying instance.</p>"
+        },
+        "maxConcurrentSessions":{
+          "shape":"MaxConcurrentSessions",
+          "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
         }
       },
       "documentation":"<p>The web portal.</p>"
@@ -3789,13 +4184,13 @@
       "type":"string",
       "max":253,
       "min":1,
-      "pattern":"^[a-zA-Z0-9]?((?!-)([A-Za-z0-9-]*[A-Za-z0-9])\\.)+[a-zA-Z0-9]+$"
+      "pattern":"[a-zA-Z0-9]?((?!-)([A-Za-z0-9-]*[A-Za-z0-9])\\.)+[a-zA-Z0-9]+"
     },
     "PortalId":{
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-zA-Z0-9\\-]+$"
+      "pattern":"[a-zA-Z0-9\\-]+"
     },
     "PortalList":{
       "type":"list",
@@ -3813,61 +4208,53 @@
       "type":"structure",
       "required":["portalArn"],
       "members":{
-        "authenticationType":{
-          "shape":"AuthenticationType",
-          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
-        },
-        "browserSettingsArn":{
+        "portalArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the browser settings that is associated with the web portal.</p>"
+          "documentation":"<p>The ARN of the web portal.</p>"
+        },
+        "rendererType":{
+          "shape":"RendererType",
+          "documentation":"<p>The renderer that is used in streaming sessions.</p>"
         },
         "browserType":{
           "shape":"BrowserType",
           "documentation":"<p>The browser type of the web portal.</p>"
         },
-        "creationDate":{
-          "shape":"Timestamp",
-          "documentation":"<p>The creation date of the web portal.</p>"
+        "portalStatus":{
+          "shape":"PortalStatus",
+          "documentation":"<p>The status of the web portal.</p>"
         },
-        "dataProtectionSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the data protection settings.</p>"
+        "portalEndpoint":{
+          "shape":"PortalEndpoint",
+          "documentation":"<p>The endpoint URL of the web portal that users access in order to start streaming sessions.</p>"
         },
         "displayName":{
           "shape":"DisplayName",
           "documentation":"<p>The name of the web portal.</p>"
         },
-        "instanceType":{
-          "shape":"InstanceType",
-          "documentation":"<p>The type and resources of the underlying instance.</p>"
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The creation date of the web portal.</p>"
         },
-        "ipAccessSettingsArn":{
+        "browserSettingsArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the IP access settings.</p>"
+          "documentation":"<p>The ARN of the browser settings that is associated with the web portal.</p>"
         },
-        "maxConcurrentSessions":{
-          "shape":"MaxConcurrentSessions",
-          "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
+        "dataProtectionSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the data protection settings.</p>"
+        },
+        "userSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the user settings that is associated with the web portal.</p>"
         },
         "networkSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the network settings that is associated with the web portal.</p>"
         },
-        "portalArn":{
+        "sessionLoggerArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>"
-        },
-        "portalEndpoint":{
-          "shape":"PortalEndpoint",
-          "documentation":"<p>The endpoint URL of the web portal that users access in order to start streaming sessions.</p>"
-        },
-        "portalStatus":{
-          "shape":"PortalStatus",
-          "documentation":"<p>The status of the web portal.</p>"
-        },
-        "rendererType":{
-          "shape":"RendererType",
-          "documentation":"<p>The renderer that is used in streaming sessions.</p>"
+          "documentation":"<p>The ARN of the session logger that is assocaited with the portal.</p>"
         },
         "trustStoreArn":{
           "shape":"ARN",
@@ -3877,9 +4264,21 @@
           "shape":"ARN",
           "documentation":"<p>The ARN of the user access logging settings that is associated with the web portal.</p>"
         },
-        "userSettingsArn":{
+        "authenticationType":{
+          "shape":"AuthenticationType",
+          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
+        },
+        "ipAccessSettingsArn":{
           "shape":"ARN",
-          "documentation":"<p>The ARN of the user settings that is associated with the web portal.</p>"
+          "documentation":"<p>The ARN of the IP access settings.</p>"
+        },
+        "instanceType":{
+          "shape":"InstanceType",
+          "documentation":"<p>The type and resources of the underlying instance.</p>"
+        },
+        "maxConcurrentSessions":{
+          "shape":"MaxConcurrentSessions",
+          "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
         }
       },
       "documentation":"<p>The summary of the portal.</p>"
@@ -3889,13 +4288,13 @@
       "type":"structure",
       "required":["redactionPlaceHolderType"],
       "members":{
-        "redactionPlaceHolderText":{
-          "shape":"RedactionPlaceHolderText",
-          "documentation":"<p>The redaction placeholder text that will replace the redacted text in session for the custom text redaction placeholder type.</p>"
-        },
         "redactionPlaceHolderType":{
           "shape":"RedactionPlaceHolderType",
           "documentation":"<p>The redaction placeholder type that will replace the redacted text in session.</p>"
+        },
+        "redactionPlaceHolderText":{
+          "shape":"RedactionPlaceHolderText",
+          "documentation":"<p>The redaction placeholder text that will replace the redacted text in session for the custom text redaction placeholder type.</p>"
         }
       },
       "documentation":"<p>The redaction placeholder that will replace the redacted text in session.</p>"
@@ -3904,7 +4303,7 @@
       "type":"string",
       "max":20,
       "min":1,
-      "pattern":"^[*_\\-\\d\\w]+$",
+      "pattern":"[*_\\-\\d\\w]+",
       "sensitive":true
     },
     "RedactionPlaceHolderType":{
@@ -3915,7 +4314,7 @@
       "type":"string",
       "max":300,
       "min":0,
-      "pattern":"^\\/((?:[^\\n])+)\\/([gimsuyvd]{0,8})$",
+      "pattern":"\\/((?:[^\\n])+)\\/([gimsuyvd]{0,8})",
       "sensitive":true
     },
     "RendererType":{
@@ -3945,17 +4344,66 @@
     },
     "ResourceType":{"type":"string"},
     "RetryAfterSeconds":{"type":"integer"},
+    "S3Bucket":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]",
+      "sensitive":true
+    },
+    "S3BucketOwner":{
+      "type":"string",
+      "pattern":"[0-9]{12}"
+    },
+    "S3KeyPrefix":{
+      "type":"string",
+      "max":256,
+      "min":1,
+      "pattern":"[\\d\\w\\-_/!().*']+",
+      "sensitive":true
+    },
+    "S3LogConfiguration":{
+      "type":"structure",
+      "required":[
+        "bucket",
+        "logFileFormat",
+        "folderStructure"
+      ],
+      "members":{
+        "bucket":{
+          "shape":"S3Bucket",
+          "documentation":"<p>The S3 bucket name where logs are delivered.</p>"
+        },
+        "keyPrefix":{
+          "shape":"S3KeyPrefix",
+          "documentation":"<p>The S3 path prefix that determines where log files are stored.</p>"
+        },
+        "bucketOwner":{
+          "shape":"S3BucketOwner",
+          "documentation":"<p>The expected bucket owner of the target S3 bucket. The caller must have permissions to write to the target bucket.</p>"
+        },
+        "logFileFormat":{
+          "shape":"LogFileFormat",
+          "documentation":"<p>The format of the LogFile that is written to S3.</p>"
+        },
+        "folderStructure":{
+          "shape":"FolderStructure",
+          "documentation":"<p>The folder structure that defines the organizational structure for log files in S3.</p>"
+        }
+      },
+      "documentation":"<p>The S3 log configuration.</p>"
+    },
     "SamlMetadata":{
       "type":"string",
       "max":204800,
       "min":1,
-      "pattern":"^.+$"
+      "pattern":".+"
     },
     "SecurityGroupId":{
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^[\\w+\\-]+$"
+      "pattern":"[\\w+\\-]+"
     },
     "SecurityGroupIdList":{
       "type":"list",
@@ -3968,10 +4416,6 @@
       "type":"structure",
       "members":{
         "message":{"shape":"ExceptionMessage"},
-        "quotaCode":{
-          "shape":"QuotaCode",
-          "documentation":"<p>The originating quota.</p>"
-        },
         "resourceId":{
           "shape":"ResourceId",
           "documentation":"<p>Identifier of the resource affected.</p>"
@@ -3983,6 +4427,10 @@
         "serviceCode":{
           "shape":"ServiceCode",
           "documentation":"<p>The originating service.</p>"
+        },
+        "quotaCode":{
+          "shape":"QuotaCode",
+          "documentation":"<p>The originating quota.</p>"
         }
       },
       "documentation":"<p>The service quota has been exceeded.</p>",
@@ -3995,14 +4443,6 @@
     "Session":{
       "type":"structure",
       "members":{
-        "clientIpAddresses":{
-          "shape":"IpAddressList",
-          "documentation":"<p>The IP address of the client.</p>"
-        },
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end time of the session.</p>"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>"
@@ -4011,17 +4451,25 @@
           "shape":"StringType",
           "documentation":"<p>The ID of the session.</p>"
         },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time of the session.</p>"
+        "username":{
+          "shape":"Username",
+          "documentation":"<p>The username of the session.</p>"
+        },
+        "clientIpAddresses":{
+          "shape":"IpAddressList",
+          "documentation":"<p>The IP address of the client.</p>"
         },
         "status":{
           "shape":"SessionStatus",
           "documentation":"<p>The status of the session.</p>"
         },
-        "username":{
-          "shape":"Username",
-          "documentation":"<p>The username of the session.</p>"
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the session.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time of the session.</p>"
         }
       },
       "documentation":"<p>Information about a secure browser session.</p>"
@@ -4030,7 +4478,73 @@
       "type":"string",
       "max":36,
       "min":36,
-      "pattern":"^[a-zA-Z0-9\\-]+$"
+      "pattern":"[a-zA-Z0-9\\-]+"
+    },
+    "SessionLogger":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger resource.</p>"
+        },
+        "eventFilter":{
+          "shape":"EventFilter",
+          "documentation":"<p>The filter that specifies which events to monitor.</p>"
+        },
+        "logConfiguration":{
+          "shape":"LogConfiguration",
+          "documentation":"<p>The configuration that specifies where logs are fowarded.</p>"
+        },
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The custom managed key of the session logger.</p>"
+        },
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the session logger.</p>"
+        },
+        "associatedPortalArns":{
+          "shape":"ArnList",
+          "documentation":"<p>The associated portal ARN.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The human-readable display name.</p>"
+        },
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date the session logger resource was created.</p>"
+        }
+      },
+      "documentation":"<p>The session logger resource.</p>"
+    },
+    "SessionLoggerList":{
+      "type":"list",
+      "member":{"shape":"SessionLoggerSummary"}
+    },
+    "SessionLoggerSummary":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger resource.</p>"
+        },
+        "logConfiguration":{
+          "shape":"LogConfiguration",
+          "documentation":"<p>The configuration that specifies where the logs are fowarded.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The human-readable display name.</p>"
+        },
+        "creationDate":{
+          "shape":"Timestamp",
+          "documentation":"<p>The date the session logger resource was created.</p>"
+        }
+      },
+      "documentation":"<p>The summary of the session logger resource.</p>"
     },
     "SessionSortBy":{
       "type":"string",
@@ -4049,10 +4563,6 @@
     "SessionSummary":{
       "type":"structure",
       "members":{
-        "endTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The end time of the session.</p>"
-        },
         "portalArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the web portal.</p>"
@@ -4061,17 +4571,21 @@
           "shape":"StringType",
           "documentation":"<p>The ID of the session.</p>"
         },
-        "startTime":{
-          "shape":"Timestamp",
-          "documentation":"<p>The start time of the session.</p>"
+        "username":{
+          "shape":"Username",
+          "documentation":"<p>The username of the session.</p>"
         },
         "status":{
           "shape":"SessionStatus",
           "documentation":"<p>The status of the session.</p>"
         },
-        "username":{
-          "shape":"Username",
-          "documentation":"<p>The username of the session.</p>"
+        "startTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The start time of the session.</p>"
+        },
+        "endTime":{
+          "shape":"Timestamp",
+          "documentation":"<p>The end time of the session.</p>"
         }
       },
       "documentation":"<p>Summary information about a secure browser session.</p>"
@@ -4090,13 +4604,13 @@
       "type":"string",
       "max":131072,
       "min":0,
-      "pattern":"^[\\s\\S]*$"
+      "pattern":"[\\s\\S]*"
     },
     "SubnetId":{
       "type":"string",
       "max":32,
       "min":1,
-      "pattern":"^subnet-([0-9a-f]{8}|[0-9a-f]{17})$"
+      "pattern":"subnet-([0-9a-f]{8}|[0-9a-f]{17})"
     },
     "SubnetIdList":{
       "type":"list",
@@ -4108,7 +4622,7 @@
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36}){2,}$"
+      "pattern":"arn:[\\w+=\\/,.@-]+:[a-zA-Z0-9\\-]+:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:[a-zA-Z]+(\\/[a-fA-F0-9\\-]{36}){2,}"
     },
     "Tag":{
       "type":"structure",
@@ -4134,7 +4648,7 @@
       "type":"string",
       "max":128,
       "min":1,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)",
       "sensitive":true
     },
     "TagKeyList":{
@@ -4156,11 +4670,6 @@
         "tags"
       ],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
         "resourceArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the resource.</p>",
@@ -4170,6 +4679,11 @@
         "tags":{
           "shape":"TagList",
           "documentation":"<p>The tags of the resource.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token returns the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4182,13 +4696,17 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+      "pattern":"([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)",
       "sensitive":true
     },
     "ThrottlingException":{
       "type":"structure",
       "members":{
         "message":{"shape":"ExceptionMessage"},
+        "serviceCode":{
+          "shape":"ServiceCode",
+          "documentation":"<p>The originating service.</p>"
+        },
         "quotaCode":{
           "shape":"QuotaCode",
           "documentation":"<p>The originating quota.</p>"
@@ -4198,10 +4716,6 @@
           "documentation":"<p>Advice to clients on when the call can be safely retried.</p>",
           "location":"header",
           "locationName":"Retry-After"
-        },
-        "serviceCode":{
-          "shape":"ServiceCode",
-          "documentation":"<p>The originating service.</p>"
         }
       },
       "documentation":"<p>There is a throttling error.</p>",
@@ -4228,6 +4742,45 @@
       },
       "exception":true
     },
+    "ToolbarConfiguration":{
+      "type":"structure",
+      "members":{
+        "toolbarType":{
+          "shape":"ToolbarType",
+          "documentation":"<p>The type of toolbar displayed during the session.</p>"
+        },
+        "visualMode":{
+          "shape":"VisualMode",
+          "documentation":"<p>The visual mode of the toolbar.</p>"
+        },
+        "hiddenToolbarItems":{
+          "shape":"HiddenToolbarItemList",
+          "documentation":"<p>The list of toolbar items to be hidden.</p>"
+        },
+        "maxDisplayResolution":{
+          "shape":"MaxDisplayResolution",
+          "documentation":"<p>The maximum display resolution that is allowed for the session.</p>"
+        }
+      },
+      "documentation":"<p>The configuration of the toolbar. This allows administrators to select the toolbar type and visual mode, set maximum display resolution for sessions, and choose which items are visible to end users during their sessions. If administrators do not modify these settings, end users retain control over their toolbar preferences.</p>"
+    },
+    "ToolbarItem":{
+      "type":"string",
+      "enum":[
+        "Windows",
+        "DualMonitor",
+        "FullScreen",
+        "Webcam",
+        "Microphone"
+      ]
+    },
+    "ToolbarType":{
+      "type":"string",
+      "enum":[
+        "Floating",
+        "Docked"
+      ]
+    },
     "TrustStore":{
       "type":"structure",
       "required":["trustStoreArn"],
@@ -4257,6 +4810,11 @@
       "type":"list",
       "member":{"shape":"TrustStoreSummary"}
     },
+    "Unit":{
+      "type":"structure",
+      "members":{
+      }
+    },
     "UntagResourceRequest":{
       "type":"structure",
       "required":[
@@ -4287,16 +4845,16 @@
       "type":"structure",
       "required":["browserSettingsArn"],
       "members":{
-        "browserPolicy":{
-          "shape":"BrowserPolicy",
-          "documentation":"<p>A JSON string containing Chrome Enterprise policies that will be applied to all streaming sessions. </p>"
-        },
         "browserSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the browser settings.</p>",
           "location":"uri",
           "locationName":"browserSettingsArn"
         },
+        "browserPolicy":{
+          "shape":"BrowserPolicy",
+          "documentation":"<p>A JSON string containing Chrome Enterprise policies that will be applied to all streaming sessions. </p>"
+        },
         "clientToken":{
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
@@ -4318,28 +4876,28 @@
       "type":"structure",
       "required":["dataProtectionSettingsArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
         "dataProtectionSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the data protection settings.</p>",
           "location":"uri",
           "locationName":"dataProtectionSettingsArn"
         },
-        "description":{
-          "shape":"DescriptionSafe",
-          "documentation":"<p>The description of the data protection settings.</p>"
+        "inlineRedactionConfiguration":{
+          "shape":"InlineRedactionConfiguration",
+          "documentation":"<p>The inline redaction configuration of the data protection settings that will be applied to all sessions.</p>"
         },
         "displayName":{
           "shape":"DisplayNameSafe",
           "documentation":"<p>The display name of the data protection settings.</p>"
         },
-        "inlineRedactionConfiguration":{
-          "shape":"InlineRedactionConfiguration",
-          "documentation":"<p>The inline redaction configuration of the data protection settings that will be applied to all sessions.</p>"
+        "description":{
+          "shape":"DescriptionSafe",
+          "documentation":"<p>The description of the data protection settings.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4357,21 +4915,12 @@
       "type":"structure",
       "required":["identityProviderArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
         "identityProviderArn":{
           "shape":"SubresourceARN",
           "documentation":"<p>The ARN of the identity provider.</p>",
           "location":"uri",
           "locationName":"identityProviderArn"
         },
-        "identityProviderDetails":{
-          "shape":"IdentityProviderDetails",
-          "documentation":"<p>The details of the identity provider. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
-        },
         "identityProviderName":{
           "shape":"IdentityProviderName",
           "documentation":"<p>The name of the identity provider.</p>"
@@ -4379,6 +4928,15 @@
         "identityProviderType":{
           "shape":"IdentityProviderType",
           "documentation":"<p>The type of the identity provider.</p>"
+        },
+        "identityProviderDetails":{
+          "shape":"IdentityProviderDetails",
+          "documentation":"<p>The details of the identity provider. The following list describes the provider detail keys for each identity provider type. </p> <ul> <li> <p>For Google and Login with Amazon:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For Facebook:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>api_version</code> </p> </li> </ul> </li> <li> <p>For Sign in with Apple:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>team_id</code> </p> </li> <li> <p> <code>key_id</code> </p> </li> <li> <p> <code>private_key</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> </ul> </li> <li> <p>For OIDC providers:</p> <ul> <li> <p> <code>client_id</code> </p> </li> <li> <p> <code>client_secret</code> </p> </li> <li> <p> <code>attributes_request_method</code> </p> </li> <li> <p> <code>oidc_issuer</code> </p> </li> <li> <p> <code>authorize_scopes</code> </p> </li> <li> <p> <code>authorize_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>token_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>attributes_url</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> <li> <p> <code>jwks_uri</code> <i>if not available from discovery URL specified by <code>oidc_issuer</code> key</i> </p> </li> </ul> </li> <li> <p>For SAML providers:</p> <ul> <li> <p> <code>MetadataFile</code> OR <code>MetadataURL</code> </p> </li> <li> <p> <code>IDPSignout</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>IDPInit</code> (boolean) <i>optional</i> </p> </li> <li> <p> <code>RequestSigningAlgorithm</code> (string) <i>optional</i> - Only accepts <code>rsa-sha256</code> </p> </li> <li> <p> <code>EncryptedResponses</code> (boolean) <i>optional</i> </p> </li> </ul> </li> </ul>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4396,28 +4954,28 @@
       "type":"structure",
       "required":["ipAccessSettingsArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "description":{
-          "shape":"Description",
-          "documentation":"<p>The description of the IP access settings.</p>"
-        },
-        "displayName":{
-          "shape":"DisplayName",
-          "documentation":"<p>The display name of the IP access settings.</p>"
-        },
         "ipAccessSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the IP access settings.</p>",
           "location":"uri",
           "locationName":"ipAccessSettingsArn"
         },
+        "displayName":{
+          "shape":"DisplayName",
+          "documentation":"<p>The display name of the IP access settings.</p>"
+        },
+        "description":{
+          "shape":"Description",
+          "documentation":"<p>The description of the IP access settings.</p>"
+        },
         "ipRules":{
           "shape":"IpRuleList",
           "documentation":"<p>The updated IP rules of the IP access settings.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4435,28 +4993,28 @@
       "type":"structure",
       "required":["networkSettingsArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
         "networkSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the network settings.</p>",
           "location":"uri",
           "locationName":"networkSettingsArn"
         },
-        "securityGroupIds":{
-          "shape":"SecurityGroupIdList",
-          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC.</p>"
+        "vpcId":{
+          "shape":"VpcId",
+          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
         },
         "subnetIds":{
           "shape":"SubnetIdList",
           "documentation":"<p>The subnets in which network interfaces are created to connect streaming instances to your VPC. At least two of these subnets must be in different availability zones.</p>"
         },
-        "vpcId":{
-          "shape":"VpcId",
-          "documentation":"<p>The VPC that streaming instances will connect to.</p>"
+        "securityGroupIds":{
+          "shape":"SecurityGroupIdList",
+          "documentation":"<p>One or more security groups used to control access from streaming instances to your VPC.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4474,14 +5032,20 @@
       "type":"structure",
       "required":["portalArn"],
       "members":{
-        "authenticationType":{
-          "shape":"AuthenticationType",
-          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
+        "portalArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the web portal.</p>",
+          "location":"uri",
+          "locationName":"portalArn"
         },
         "displayName":{
           "shape":"DisplayName",
           "documentation":"<p>The name of the web portal. This is not visible to users who log into the web portal.</p>"
         },
+        "authenticationType":{
+          "shape":"AuthenticationType",
+          "documentation":"<p>The type of authentication integration points used when signing into the web portal. Defaults to <code>Standard</code>.</p> <p> <code>Standard</code> web portals are authenticated directly through your identity provider. You need to call <code>CreateIdentityProvider</code> to integrate your identity provider with your web portal. User and group access to your web portal is controlled through your identity provider.</p> <p> <code>IAM Identity Center</code> web portals are authenticated through IAM Identity Center. Identity sources (including external identity provider integration), plus user and group access to your web portal, can be configured in the IAM Identity Center.</p>"
+        },
         "instanceType":{
           "shape":"InstanceType",
           "documentation":"<p>The type and resources of the underlying instance.</p>"
@@ -4489,12 +5053,6 @@
         "maxConcurrentSessions":{
           "shape":"MaxConcurrentSessions",
           "documentation":"<p>The maximum number of concurrent sessions for the portal.</p>"
-        },
-        "portalArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the web portal.</p>",
-          "location":"uri",
-          "locationName":"portalArn"
         }
       }
     },
@@ -4507,10 +5065,50 @@
         }
       }
     },
+    "UpdateSessionLoggerRequest":{
+      "type":"structure",
+      "required":["sessionLoggerArn"],
+      "members":{
+        "sessionLoggerArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the session logger to update.</p>",
+          "location":"uri",
+          "locationName":"sessionLoggerArn"
+        },
+        "eventFilter":{
+          "shape":"EventFilter",
+          "documentation":"<p>The updated eventFilter.</p>"
+        },
+        "logConfiguration":{
+          "shape":"LogConfiguration",
+          "documentation":"<p>The updated logConfiguration.</p>"
+        },
+        "displayName":{
+          "shape":"DisplayNameSafe",
+          "documentation":"<p>The updated display name.</p>"
+        }
+      }
+    },
+    "UpdateSessionLoggerResponse":{
+      "type":"structure",
+      "required":["sessionLogger"],
+      "members":{
+        "sessionLogger":{
+          "shape":"SessionLogger",
+          "documentation":"<p>The updated details of the session logger.</p>"
+        }
+      }
+    },
     "UpdateTrustStoreRequest":{
       "type":"structure",
       "required":["trustStoreArn"],
       "members":{
+        "trustStoreArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the trust store.</p>",
+          "location":"uri",
+          "locationName":"trustStoreArn"
+        },
         "certificatesToAdd":{
           "shape":"CertificateList",
           "documentation":"<p>A list of CA certificates to add to the trust store.</p>"
@@ -4523,12 +5121,6 @@
           "shape":"ClientToken",
           "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
           "idempotencyToken":true
-        },
-        "trustStoreArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the trust store.</p>",
-          "location":"uri",
-          "locationName":"trustStoreArn"
         }
       }
     },
@@ -4546,20 +5138,20 @@
       "type":"structure",
       "required":["userAccessLoggingSettingsArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "kinesisStreamArn":{
-          "shape":"KinesisStreamArn",
-          "documentation":"<p>The ARN of the Kinesis stream.</p>"
-        },
         "userAccessLoggingSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the user access logging settings.</p>",
           "location":"uri",
           "locationName":"userAccessLoggingSettingsArn"
+        },
+        "kinesisStreamArn":{
+          "shape":"KinesisStreamArn",
+          "documentation":"<p>The ARN of the Kinesis stream.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
         }
       }
     },
@@ -4577,52 +5169,56 @@
       "type":"structure",
       "required":["userSettingsArn"],
       "members":{
-        "clientToken":{
-          "shape":"ClientToken",
-          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
-          "idempotencyToken":true
-        },
-        "cookieSynchronizationConfiguration":{
-          "shape":"CookieSynchronizationConfiguration",
-          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p> <p>If the allowlist and blocklist are empty, the configuration becomes null.</p>"
+        "userSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the user settings.</p>",
+          "location":"uri",
+          "locationName":"userSettingsArn"
         },
         "copyAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can copy text from the streaming session to the local device.</p>"
         },
-        "deepLinkAllowed":{
+        "pasteAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
-        },
-        "disconnectTimeoutInMinutes":{
-          "shape":"DisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
         },
         "downloadAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can download files from the streaming session to the local device.</p>"
         },
-        "idleDisconnectTimeoutInMinutes":{
-          "shape":"IdleDisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
-        },
-        "pasteAllowed":{
+        "uploadAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
         },
         "printAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can print to the local device.</p>"
         },
-        "uploadAllowed":{
+        "disconnectTimeoutInMinutes":{
+          "shape":"DisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+        },
+        "idleDisconnectTimeoutInMinutes":{
+          "shape":"IdleDisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
+        },
+        "clientToken":{
+          "shape":"ClientToken",
+          "documentation":"<p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully, subsequent retries with the same client token return the result from the original successful request. </p> <p>If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.</p>",
+          "idempotencyToken":true
+        },
+        "cookieSynchronizationConfiguration":{
+          "shape":"CookieSynchronizationConfiguration",
+          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p> <p>If the allowlist and blocklist are empty, the configuration becomes null.</p>"
+        },
+        "deepLinkAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
         },
-        "userSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the user settings.</p>",
-          "location":"uri",
-          "locationName":"userSettingsArn"
+        "toolbarConfiguration":{
+          "shape":"ToolbarConfiguration",
+          "documentation":"<p>The configuration of the toolbar. This allows administrators to select the toolbar type and visual mode, set maximum display resolution for sessions, and choose which items are visible to end users during their sessions. If administrators do not modify these settings, end users retain control over their toolbar preferences.</p>"
         }
       }
     },
@@ -4640,6 +5236,10 @@
       "type":"structure",
       "required":["userAccessLoggingSettingsArn"],
       "members":{
+        "userAccessLoggingSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the user access logging settings.</p>"
+        },
         "associatedPortalArns":{
           "shape":"ArnList",
           "documentation":"<p>A list of web portal ARNs that this user access logging settings is associated with.</p>"
@@ -4647,10 +5247,6 @@
         "kinesisStreamArn":{
           "shape":"KinesisStreamArn",
           "documentation":"<p>The ARN of the Kinesis stream.</p>"
-        },
-        "userAccessLoggingSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the user access logging settings.</p>"
         }
       },
       "documentation":"<p>A user access logging settings resource that can be associated with a web portal.</p>"
@@ -4663,13 +5259,13 @@
       "type":"structure",
       "required":["userAccessLoggingSettingsArn"],
       "members":{
-        "kinesisStreamArn":{
-          "shape":"KinesisStreamArn",
-          "documentation":"<p>The ARN of the Kinesis stream.</p>"
-        },
         "userAccessLoggingSettingsArn":{
           "shape":"ARN",
           "documentation":"<p>The ARN of the user access logging settings.</p>"
+        },
+        "kinesisStreamArn":{
+          "shape":"KinesisStreamArn",
+          "documentation":"<p>The ARN of the Kinesis stream.</p>"
         }
       },
       "documentation":"<p>The summary of user access logging settings.</p>"
@@ -4678,57 +5274,61 @@
       "type":"structure",
       "required":["userSettingsArn"],
       "members":{
-        "additionalEncryptionContext":{
-          "shape":"EncryptionContextMap",
-          "documentation":"<p>The additional encryption context of the user settings.</p>"
+        "userSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the user settings.</p>"
         },
         "associatedPortalArns":{
           "shape":"ArnList",
           "documentation":"<p>A list of web portal ARNs that this user settings is associated with.</p>"
         },
-        "cookieSynchronizationConfiguration":{
-          "shape":"CookieSynchronizationConfiguration",
-          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
-        },
         "copyAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can copy text from the streaming session to the local device.</p>"
         },
-        "customerManagedKey":{
-          "shape":"keyArn",
-          "documentation":"<p>The customer managed key used to encrypt sensitive information in the user settings.</p>"
+        "pasteAllowed":{
+          "shape":"EnabledType",
+          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
         },
-        "deepLinkAllowed":{
+        "downloadAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
+          "documentation":"<p>Specifies whether the user can download files from the streaming session to the local device.</p>"
+        },
+        "uploadAllowed":{
+          "shape":"EnabledType",
+          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
+        },
+        "printAllowed":{
+          "shape":"EnabledType",
+          "documentation":"<p>Specifies whether the user can print to the local device.</p>"
         },
         "disconnectTimeoutInMinutes":{
           "shape":"DisconnectTimeoutInMinutes",
           "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
         },
-        "downloadAllowed":{
-          "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can download files from the streaming session to the local device.</p>"
-        },
         "idleDisconnectTimeoutInMinutes":{
           "shape":"IdleDisconnectTimeoutInMinutes",
           "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
         },
-        "pasteAllowed":{
-          "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
+        "cookieSynchronizationConfiguration":{
+          "shape":"CookieSynchronizationConfiguration",
+          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
         },
-        "printAllowed":{
-          "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can print to the local device.</p>"
+        "customerManagedKey":{
+          "shape":"keyArn",
+          "documentation":"<p>The customer managed key used to encrypt sensitive information in the user settings.</p>"
         },
-        "uploadAllowed":{
+        "additionalEncryptionContext":{
+          "shape":"EncryptionContextMap",
+          "documentation":"<p>The additional encryption context of the user settings.</p>"
+        },
+        "deepLinkAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
         },
-        "userSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the user settings.</p>"
+        "toolbarConfiguration":{
+          "shape":"ToolbarConfiguration",
+          "documentation":"<p>The configuration of the toolbar. This allows administrators to select the toolbar type and visual mode, set maximum display resolution for sessions, and choose which items are visible to end users during their sessions. If administrators do not modify these settings, end users retain control over their toolbar preferences.</p>"
         }
       },
       "documentation":"<p>A user settings resource that can be associated with a web portal. Once associated with a web portal, user settings control how users can transfer data between a streaming session and the their local devices. </p>"
@@ -4741,45 +5341,49 @@
       "type":"structure",
       "required":["userSettingsArn"],
       "members":{
-        "cookieSynchronizationConfiguration":{
-          "shape":"CookieSynchronizationConfiguration",
-          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
+        "userSettingsArn":{
+          "shape":"ARN",
+          "documentation":"<p>The ARN of the user settings.</p>"
         },
         "copyAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can copy text from the streaming session to the local device.</p>"
         },
-        "deepLinkAllowed":{
+        "pasteAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
-        },
-        "disconnectTimeoutInMinutes":{
-          "shape":"DisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
         },
         "downloadAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can download files from the streaming session to the local device.</p>"
         },
-        "idleDisconnectTimeoutInMinutes":{
-          "shape":"IdleDisconnectTimeoutInMinutes",
-          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
-        },
-        "pasteAllowed":{
+        "uploadAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can paste text from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
         },
         "printAllowed":{
           "shape":"EnabledType",
           "documentation":"<p>Specifies whether the user can print to the local device.</p>"
         },
-        "uploadAllowed":{
+        "disconnectTimeoutInMinutes":{
+          "shape":"DisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that a streaming session remains active after users disconnect.</p>"
+        },
+        "idleDisconnectTimeoutInMinutes":{
+          "shape":"IdleDisconnectTimeoutInMinutes",
+          "documentation":"<p>The amount of time that users can be idle (inactive) before they are disconnected from their streaming session and the disconnect timeout interval begins.</p>"
+        },
+        "cookieSynchronizationConfiguration":{
+          "shape":"CookieSynchronizationConfiguration",
+          "documentation":"<p>The configuration that specifies which cookies should be synchronized from the end user's local browser to the remote browser.</p>"
+        },
+        "deepLinkAllowed":{
           "shape":"EnabledType",
-          "documentation":"<p>Specifies whether the user can upload files from the local device to the streaming session.</p>"
+          "documentation":"<p>Specifies whether the user can use deep links that open automatically when connecting to a session.</p>"
         },
-        "userSettingsArn":{
-          "shape":"ARN",
-          "documentation":"<p>The ARN of the user settings.</p>"
+        "toolbarConfiguration":{
+          "shape":"ToolbarConfiguration",
+          "documentation":"<p>The configuration of the toolbar. This allows administrators to select the toolbar type and visual mode, set maximum display resolution for sessions, and choose which items are visible to end users during their sessions. If administrators do not modify these settings, end users retain control over their toolbar preferences.</p>"
         }
       },
       "documentation":"<p>The summary of user settings.</p>"
@@ -4788,20 +5392,20 @@
       "type":"string",
       "max":256,
       "min":0,
-      "pattern":"^[\\s\\S]*$",
+      "pattern":"[\\s\\S]*",
       "sensitive":true
     },
     "ValidationException":{
       "type":"structure",
       "members":{
-        "fieldList":{
-          "shape":"ValidationExceptionFieldList",
-          "documentation":"<p>The field that caused the error.</p>"
-        },
         "message":{"shape":"ExceptionMessage"},
         "reason":{
           "shape":"ValidationExceptionReason",
           "documentation":"<p>Reason the request failed validation</p>"
+        },
+        "fieldList":{
+          "shape":"ValidationExceptionFieldList",
+          "documentation":"<p>The field that caused the error.</p>"
         }
       },
       "documentation":"<p>There is a validation error.</p>",
@@ -4814,17 +5418,17 @@
     "ValidationExceptionField":{
       "type":"structure",
       "required":[
-        "message",
-        "name"
+        "name",
+        "message"
       ],
       "members":{
-        "message":{
-          "shape":"ExceptionMessage",
-          "documentation":"<p>The message describing why the field failed validation.</p>"
-        },
         "name":{
           "shape":"FieldName",
           "documentation":"<p>The name of the field that failed validation.</p>"
+        },
+        "message":{
+          "shape":"ExceptionMessage",
+          "documentation":"<p>The message describing why the field failed validation.</p>"
         }
       },
       "documentation":"<p>Information about a field passed inside a request that resulted in an exception.</p>"
@@ -4842,17 +5446,24 @@
         "other"
       ]
     },
+    "VisualMode":{
+      "type":"string",
+      "enum":[
+        "Dark",
+        "Light"
+      ]
+    },
     "VpcId":{
       "type":"string",
       "max":255,
       "min":1,
-      "pattern":"^vpc-[0-9a-z]*$"
+      "pattern":"vpc-[0-9a-z]*"
     },
     "keyArn":{
       "type":"string",
       "max":2048,
       "min":20,
-      "pattern":"^arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+$"
+      "pattern":"arn:[\\w+=\\/,.@-]+:kms:[a-zA-Z0-9\\-]*:[a-zA-Z0-9]{1,12}:key\\/[a-zA-Z0-9-]+"
     }
   },
   "documentation":"<p>Amazon WorkSpaces Secure Browser is a low cost, fully managed WorkSpace built specifically to facilitate secure, web-based workloads. WorkSpaces Secure Browser makes it easy for customers to safely provide their employees with access to internal websites and SaaS web applications without the administrative burden of appliances or specialized client software. WorkSpaces Secure Browser provides simple policy tools tailored for user interactions, while offloading common tasks like capacity management, scaling, and maintaining browser images.</p>"
diff -pruN 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/waiters-2.json 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/waiters-2.json
--- 2.23.6-1/awscli/botocore/data/workspaces-web/2020-07-08/waiters-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/workspaces-web/2020-07-08/waiters-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,5 @@
+{
+  "version": 2,
+  "waiters": {
+  }
+}
diff -pruN 2.23.6-1/awscli/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json 2.31.35-1/awscli/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json
--- 2.23.6-1/awscli/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/xray/2016-04-12/endpoint-rule-set-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -5,27 +5,27 @@
             "builtIn": "AWS::Region",
             "required": false,
             "documentation": "The AWS region used to dispatch the request.",
-            "type": "String"
+            "type": "string"
         },
         "UseDualStack": {
             "builtIn": "AWS::UseDualStack",
             "required": true,
             "default": false,
             "documentation": "When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "UseFIPS": {
             "builtIn": "AWS::UseFIPS",
             "required": true,
             "default": false,
             "documentation": "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.",
-            "type": "Boolean"
+            "type": "boolean"
         },
         "Endpoint": {
             "builtIn": "SDK::Endpoint",
             "required": false,
             "documentation": "Override the endpoint used to send this request",
-            "type": "String"
+            "type": "string"
         }
     },
     "rules": [
diff -pruN 2.23.6-1/awscli/botocore/data/xray/2016-04-12/service-2.json 2.31.35-1/awscli/botocore/data/xray/2016-04-12/service-2.json
--- 2.23.6-1/awscli/botocore/data/xray/2016-04-12/service-2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/data/xray/2016-04-12/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -336,7 +336,7 @@
         {"shape":"InvalidRequestException"},
         {"shape":"ThrottledException"}
       ],
-      "documentation":"<p> Retrieves the current destination of data sent to <code>PutTraceSegments</code> and <i>OpenTelemetry</i> API. The Transaction Search feature requires a CloudWatchLogs destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html\">Transaction Search</a> and <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OpenTelemetry-Sections.html\">OpenTelemetry</a>. </p>"
+      "documentation":"<p> Retrieves the current destination of data sent to <code>PutTraceSegments</code> and <i>OpenTelemetry protocol (OTLP)</i> endpoint. The Transaction Search feature requires a CloudWatchLogs destination. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html\">Transaction Search</a> and <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OpenTelemetry-Sections.html\">OpenTelemetry</a>. </p>"
     },
     "GetTraceSummaries":{
       "name":"GetTraceSummaries",
@@ -379,7 +379,7 @@
         {"shape":"ThrottledException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p> Retrieves a list of traces for a given <code>RetrievalToken</code> from the CloudWatch log group generated by Transaction Search. For information on what each trace returns, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>. </p> <p>This API does not initiate a retrieval job. To start a trace retrieval, use <code>StartTraceRetrieval</code>, which generates the required <code>RetrievalToken</code>.</p> <p> When the <code>RetrievalStatus</code> is not <i>COMPLETE</i>, the API will return an empty response. Retry the request once the retrieval has completed to access the full list of traces.</p> <p>For cross-account observability, this API can retrieve traces from linked accounts when CloudWatch log is the destination across relevant accounts. For more details, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p> <p>For retrieving data from X-Ray directly as opposed to the Transaction-Search Log group, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>.</p>"
+      "documentation":"<p> Retrieves a list of traces for a given <code>RetrievalToken</code> from the CloudWatch log group generated by Transaction Search. For information on what each trace returns, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>. </p> <p>This API does not initiate a retrieval process. To start a trace retrieval, use <code>StartTraceRetrieval</code>, which generates the required <code>RetrievalToken</code>.</p> <p> When the <code>RetrievalStatus</code> is not <i>COMPLETE</i>, the API will return an empty response. Retry the request once the retrieval has completed to access the full list of traces.</p> <p>For cross-account observability, this API can retrieve traces from linked accounts when CloudWatch log is set as the destination across relevant accounts. For more details, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>.</p> <p>For retrieving data from X-Ray directly as opposed to the Transaction Search generated log group, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>.</p>"
     },
     "ListTagsForResource":{
       "name":"ListTagsForResource",
@@ -469,7 +469,7 @@
         {"shape":"ThrottledException"},
         {"shape":"ResourceNotFoundException"}
       ],
-      "documentation":"<p> Initiates a trace retrieval process using the specified time range and for the give trace IDs on Transaction Search generated by the CloudWatch log group. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html\">Transaction Search</a>. </p> <p>API returns a <code>RetrievalToken</code>, which can be used with <code>ListRetrievedTraces</code> or <code>GetRetrievedTracesGraph</code> to fetch results. Retrievals will time out after 60 minutes. To execute long time ranges, consider segmenting into multiple retrievals.</p> <p>If you are using <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>, you can use this operation in a monitoring account to retrieve data from a linked source account, as long as both accounts have transaction search enabled.</p> <p>For retrieving data from X-Ray directly as opposed to the Transaction-Search Log group, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>.</p>"
+      "documentation":"<p> Initiates a trace retrieval process using the specified time range and for the given trace IDs in the Transaction Search generated CloudWatch log group. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html\">Transaction Search</a>. </p> <p>API returns a <code>RetrievalToken</code>, which can be used with <code>ListRetrievedTraces</code> or <code>GetRetrievedTracesGraph</code> to fetch results. Retrievals will time out after 60 minutes. To execute long time ranges, consider segmenting into multiple retrievals.</p> <p>If you are using <a href=\"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html\">CloudWatch cross-account observability</a>, you can use this operation in a monitoring account to retrieve data from a linked source account, as long as both accounts have transaction search enabled.</p> <p>For retrieving data from X-Ray directly as opposed to the Transaction-Search Log group, see <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_BatchGetTraces.html\">BatchGetTraces</a>.</p>"
     },
     "TagResource":{
       "name":"TagResource",
@@ -627,6 +627,10 @@
       "type":"list",
       "member":{"shape":"AnomalousService"}
     },
+    "AnomalyCount":{
+      "type":"integer",
+      "min":0
+    },
     "AttributeKey":{
       "type":"string",
       "max":32,
@@ -731,14 +735,17 @@
     },
     "CancelTraceRetrievalResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "ClientID":{
       "type":"string",
       "max":24,
       "min":24
     },
+    "CooldownWindowMinutes":{
+      "type":"integer",
+      "min":0
+    },
     "CreateGroupRequest":{
       "type":"structure",
       "required":["GroupName"],
@@ -808,8 +815,7 @@
     },
     "DeleteGroupResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteResourcePolicyRequest":{
       "type":"structure",
@@ -827,8 +833,7 @@
     },
     "DeleteResourcePolicyResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "DeleteSamplingRuleRequest":{
       "type":"structure",
@@ -1171,8 +1176,7 @@
     },
     "GetEncryptionConfigRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetEncryptionConfigResult":{
       "type":"structure",
@@ -1505,6 +1509,10 @@
         "SamplingStatisticsDocuments":{
           "shape":"SamplingStatisticsDocumentList",
           "documentation":"<p>Information about rules that the service is using to sample requests.</p>"
+        },
+        "SamplingBoostStatisticsDocuments":{
+          "shape":"SamplingBoostStatisticsDocumentList",
+          "documentation":"<p>Information about rules that the service is using to boost sampling rate.</p>"
         }
       }
     },
@@ -1522,6 +1530,10 @@
         "UnprocessedStatistics":{
           "shape":"UnprocessedStatisticsList",
           "documentation":"<p>Information about <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_SamplingStatisticsDocument.html\">SamplingStatisticsDocument</a> that X-Ray could not process.</p>"
+        },
+        "UnprocessedBoostStatistics":{
+          "shape":"UnprocessedStatisticsList",
+          "documentation":"<p>Information about <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_SamplingBoostStatisticsDocument.html\">SamplingBoostStatisticsDocument</a> that X-Ray could not process.</p>"
         }
       }
     },
@@ -1666,8 +1678,7 @@
     },
     "GetTraceSegmentDestinationRequest":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "GetTraceSegmentDestinationResult":{
       "type":"structure",
@@ -2286,6 +2297,11 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "MaxRate":{
+      "type":"double",
+      "max":1,
+      "min":0
+    },
     "NullableBoolean":{"type":"boolean"},
     "NullableDouble":{"type":"double"},
     "NullableInteger":{"type":"integer"},
@@ -2428,8 +2444,7 @@
     },
     "PutTelemetryRecordsResult":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "PutTraceSegmentsRequest":{
       "type":"structure",
@@ -2687,10 +2702,93 @@
       "max":32,
       "min":1
     },
+    "SampledAnomalyCount":{
+      "type":"integer",
+      "min":0
+    },
     "SampledCount":{
       "type":"integer",
       "min":0
     },
+    "SamplingBoost":{
+      "type":"structure",
+      "required":[
+        "BoostRate",
+        "BoostRateTTL"
+      ],
+      "members":{
+        "BoostRate":{
+          "shape":"Double",
+          "documentation":"<p>The calculated sampling boost rate for this service </p>"
+        },
+        "BoostRateTTL":{
+          "shape":"Timestamp",
+          "documentation":"<p>When the sampling boost expires.</p>"
+        }
+      },
+      "documentation":"<p>Temporary boost sampling rate. X-Ray calculates sampling boost for each service based on the recent sampling boost stats of all services that called <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_GetSamplingTargets.html\">GetSamplingTargets</a>.</p>"
+    },
+    "SamplingBoostStatisticsDocument":{
+      "type":"structure",
+      "required":[
+        "RuleName",
+        "ServiceName",
+        "Timestamp",
+        "AnomalyCount",
+        "TotalCount",
+        "SampledAnomalyCount"
+      ],
+      "members":{
+        "RuleName":{
+          "shape":"RuleName",
+          "documentation":"<p>The name of the sampling rule.</p>"
+        },
+        "ServiceName":{
+          "shape":"ServiceName",
+          "documentation":"<p>Matches the <code>name</code> that the service uses to identify itself in segments.</p>"
+        },
+        "Timestamp":{
+          "shape":"Timestamp",
+          "documentation":"<p>The current time.</p>"
+        },
+        "AnomalyCount":{
+          "shape":"AnomalyCount",
+          "documentation":"<p>The number of requests with anomaly.</p>"
+        },
+        "TotalCount":{
+          "shape":"TotalCount",
+          "documentation":"<p>The number of requests that associated to the rule.</p>"
+        },
+        "SampledAnomalyCount":{
+          "shape":"SampledAnomalyCount",
+          "documentation":"<p>The number of requests with anomaly recorded.</p>"
+        }
+      },
+      "documentation":"<p>Request anomaly stats for a single rule from a service. Results are for the last 10 seconds unless the service has been assigned a longer reporting interval after a previous call to <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_GetSamplingTargets.html\">GetSamplingTargets</a>.</p>"
+    },
+    "SamplingBoostStatisticsDocumentList":{
+      "type":"list",
+      "member":{"shape":"SamplingBoostStatisticsDocument"},
+      "max":25
+    },
+    "SamplingRateBoost":{
+      "type":"structure",
+      "required":[
+        "MaxRate",
+        "CooldownWindowMinutes"
+      ],
+      "members":{
+        "MaxRate":{
+          "shape":"MaxRate",
+          "documentation":"<p>Defines max temporary sampling rate to apply when a boost is triggered. Calculated boost rate by X-Ray will be less than or equal to this max rate.</p>"
+        },
+        "CooldownWindowMinutes":{
+          "shape":"CooldownWindowMinutes",
+          "documentation":"<p>Sets the time window (in minutes) in which only one sampling rate boost can be triggered. After a boost occurs, no further boosts are allowed until the next window.</p>"
+        }
+      },
+      "documentation":"<p>Enable temporary sampling rate increases when you detect anomalies to improve visibility.</p>"
+    },
     "SamplingRule":{
       "type":"structure",
       "required":[
@@ -2757,6 +2855,10 @@
         "Attributes":{
           "shape":"AttributeMap",
           "documentation":"<p>Matches attributes derived from the request.</p>"
+        },
+        "SamplingRateBoost":{
+          "shape":"SamplingRateBoost",
+          "documentation":"<p>Specifies the multiplier applied to the base sampling rate. This boost allows you to temporarily increase sampling without changing the rule's configuration.</p>"
         }
       },
       "documentation":"<p>A sampling rule that services use to decide whether to instrument a request. Rule fields can match properties of the service, or properties of a request. The service can ignore rules that don't match its properties.</p>"
@@ -2833,6 +2935,10 @@
         "Attributes":{
           "shape":"AttributeMap",
           "documentation":"<p>Matches attributes derived from the request.</p>"
+        },
+        "SamplingRateBoost":{
+          "shape":"SamplingRateBoost",
+          "documentation":"<p>Specifies the multiplier applied to the base sampling rate. This boost allows you to temporarily increase sampling without changing the rule's configuration.</p>"
         }
       },
       "documentation":"<p>A document specifying changes to a sampling rule's configuration.</p>"
@@ -2952,6 +3058,10 @@
         "Interval":{
           "shape":"NullableInteger",
           "documentation":"<p>The number of seconds for the service to wait before getting sampling targets again.</p>"
+        },
+        "SamplingBoost":{
+          "shape":"SamplingBoost",
+          "documentation":"<p>The sampling boost that X-Ray allocated for this service.</p>"
         }
       },
       "documentation":"<p>Temporary changes to a sampling rule configuration. To meet the global sampling target for a rule, X-Ray calculates a new reservoir for each service based on the recent sampling results of all services that called <a href=\"https://docs.aws.amazon.com/xray/latest/api/API_GetSamplingTargets.html\">GetSamplingTargets</a>.</p>"
@@ -3224,8 +3334,7 @@
     },
     "TagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "TagValue":{
       "type":"string",
@@ -3324,6 +3433,10 @@
       "error":{"httpStatusCode":400},
       "exception":true
     },
+    "TotalCount":{
+      "type":"integer",
+      "min":0
+    },
     "Trace":{
       "type":"structure",
       "members":{
@@ -3333,7 +3446,7 @@
         },
         "Duration":{
           "shape":"NullableDouble",
-          "documentation":"<p>The length of time in seconds between the start time of the root segment and the end time of the last segment that completed.</p>"
+          "documentation":"<p>The length of time in seconds between the start time of the earliest segment that started and the end time of the last segment that completed.</p>"
         },
         "LimitExceeded":{
           "shape":"NullableBoolean",
@@ -3422,7 +3535,7 @@
         },
         "Duration":{
           "shape":"NullableDouble",
-          "documentation":"<p>The length of time in seconds between the start time of the root segment and the end time of the last segment that completed.</p>"
+          "documentation":"<p> The length of time in seconds between the start time of the earliest segment that started and the end time of the last segment that completed.</p>"
         },
         "ResponseTime":{
           "shape":"NullableDouble",
@@ -3592,8 +3705,7 @@
     },
     "UntagResourceResponse":{
       "type":"structure",
-      "members":{
-      }
+      "members":{}
     },
     "UpdateGroupRequest":{
       "type":"structure",
diff -pruN 2.23.6-1/awscli/botocore/discovery.py 2.31.35-1/awscli/botocore/discovery.py
--- 2.23.6-1/awscli/botocore/discovery.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/discovery.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,12 +27,14 @@ class EndpointDiscoveryException(BotoCor
 
 
 class EndpointDiscoveryRequired(EndpointDiscoveryException):
-    """ Endpoint Discovery is disabled but is required for this operation. """
+    """Endpoint Discovery is disabled but is required for this operation."""
+
     fmt = 'Endpoint Discovery is not enabled but this operation requires it.'
 
 
 class EndpointDiscoveryRefreshFailed(EndpointDiscoveryException):
-    """ Endpoint Discovery failed to the refresh the known endpoints. """
+    """Endpoint Discovery failed to the refresh the known endpoints."""
+
     fmt = 'Endpoint Discovery failed to refresh the required endpoints.'
 
 
@@ -42,7 +44,7 @@ def block_endpoint_discovery_required_op
         raise EndpointDiscoveryRequired()
 
 
-class EndpointDiscoveryModel(object):
+class EndpointDiscoveryModel:
     def __init__(self, service_model):
         self._service_model = service_model
 
@@ -61,7 +63,9 @@ class EndpointDiscoveryModel(object):
 
     def discovery_required_for(self, operation_name):
         try:
-            operation_model = self._service_model.operation_model(operation_name)
+            operation_model = self._service_model.operation_model(
+                operation_name
+            )
             return operation_model.endpoint_discovery.get('required', False)
         except OperationNotFoundError:
             return False
@@ -85,13 +89,17 @@ class EndpointDiscoveryModel(object):
         for member_name, member_shape in shape.members.items():
             if member_shape.metadata.get('endpointdiscoveryid'):
                 ids[member_name] = params[member_name]
-            elif member_shape.type_name == 'structure' and member_name in params:
+            elif (
+                member_shape.type_name == 'structure' and member_name in params
+            ):
                 self._gather_ids(member_shape, params[member_name], ids)
         return ids
 
 
-class EndpointDiscoveryManager(object):
-    def __init__(self, client, cache=None, current_time=None, always_discover=True):
+class EndpointDiscoveryManager:
+    def __init__(
+        self, client, cache=None, current_time=None, always_discover=True
+    ):
         if cache is None:
             cache = {}
         self._cache = cache
@@ -177,8 +185,7 @@ class EndpointDiscoveryManager(object):
         if not self._always_discover and not discovery_required:
             # Discovery set to only run on required operations
             logger.debug(
-                'Optional discovery disabled. Skipping discovery for Operation: %s'
-                % operation
+                f'Optional discovery disabled. Skipping discovery for Operation: {operation}'
             )
             return None
 
@@ -214,18 +221,18 @@ class EndpointDiscoveryManager(object):
         return None
 
 
-class EndpointDiscoveryHandler(object):
+class EndpointDiscoveryHandler:
     def __init__(self, manager):
         self._manager = manager
 
     def register(self, events, service_id):
         events.register(
-            'before-parameter-build.%s' % service_id, self.gather_identifiers
+            f'before-parameter-build.{service_id}', self.gather_identifiers
         )
         events.register_first(
-            'request-created.%s' % service_id, self.discover_endpoint
+            f'request-created.{service_id}', self.discover_endpoint
         )
-        events.register('needs-retry.%s' % service_id, self.handle_retries)
+        events.register(f'needs-retry.{service_id}', self.handle_retries)
 
     def gather_identifiers(self, params, model, context, **kwargs):
         endpoint_discovery = model.endpoint_discovery
diff -pruN 2.23.6-1/awscli/botocore/docs/__init__.py 2.31.35-1/awscli/botocore/docs/__init__.py
--- 2.23.6-1/awscli/botocore/docs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -33,6 +33,7 @@ def generate_docs(root_dir, session):
     for service_name in session.get_available_services():
         docs = ServiceDocumenter(service_name, session).document_service()
         service_doc_path = os.path.join(
-            services_doc_path, service_name + '.rst')
+            services_doc_path, service_name + '.rst'
+        )
         with open(service_doc_path, 'wb') as f:
             f.write(docs)
diff -pruN 2.23.6-1/awscli/botocore/docs/bcdoc/docstringparser.py 2.31.35-1/awscli/botocore/docs/bcdoc/docstringparser.py
--- 2.23.6-1/awscli/botocore/docs/bcdoc/docstringparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/bcdoc/docstringparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -51,12 +51,13 @@ class DocStringParser(HTMLParser):
         self.tree.add_data(data)
 
 
-class HTMLTree(object):
+class HTMLTree:
     """
     A tree which handles HTML nodes. Designed to work with a python HTML parser,
     meaning that the current_node will be the most recently opened tag. When
     a tag is closed, the current_node moves up to the parent node.
     """
+
     def __init__(self, doc):
         self.doc = doc
         self.head = StemNode()
@@ -80,9 +81,9 @@ class HTMLTree(object):
 
     def _doc_has_handler(self, tag, is_start):
         if is_start:
-            handler_name = 'start_%s' % tag
+            handler_name = f'start_{tag}'
         else:
-            handler_name = 'end_%s' % tag
+            handler_name = f'end_{tag}'
 
         return hasattr(self.doc.style, handler_name)
 
@@ -93,7 +94,7 @@ class HTMLTree(object):
         self.head.write(self.doc)
 
 
-class Node(object):
+class Node:
     def __init__(self, parent=None):
         self.parent = parent
 
@@ -103,7 +104,7 @@ class Node(object):
 
 class StemNode(Node):
     def __init__(self, parent=None):
-        super(StemNode, self).__init__(parent)
+        super().__init__(parent)
         self.children = []
 
     def add_child(self, child):
@@ -122,8 +123,9 @@ class TagNode(StemNode):
     """
     A generic Tag node. It will verify that handlers exist before writing.
     """
+
     def __init__(self, tag, attrs=None, parent=None):
-        super(TagNode, self).__init__(parent)
+        super().__init__(parent)
         self.attrs = attrs
         self.tag = tag
 
@@ -133,23 +135,23 @@ class TagNode(StemNode):
         self._write_end(doc)
 
     def _write_start(self, doc):
-        handler_name = 'start_%s' % self.tag
+        handler_name = f'start_{self.tag}'
         if hasattr(doc.style, handler_name):
             getattr(doc.style, handler_name)(self.attrs)
 
     def _write_end(self, doc):
-        handler_name = 'end_%s' % self.tag
+        handler_name = f'end_{self.tag}'
         if hasattr(doc.style, handler_name):
             getattr(doc.style, handler_name)()
 
 
 class LineItemNode(TagNode):
     def __init__(self, attrs=None, parent=None):
-        super(LineItemNode, self).__init__('li', attrs, parent)
+        super().__init__('li', attrs, parent)
 
     def write(self, doc):
         self._lstrip(self)
-        super(LineItemNode, self).write(doc)
+        super().write(doc)
 
     def _lstrip(self, node):
         """
@@ -174,10 +176,11 @@ class DataNode(Node):
     """
     A Node that contains only string data.
     """
+
     def __init__(self, data, parent=None):
-        super(DataNode, self).__init__(parent)
+        super().__init__(parent)
         if not isinstance(data, str):
-            raise ValueError("Expecting string type, %s given." % type(data))
+            raise ValueError(f"Expecting string type, {type(data)} given.")
         self.data = data
 
     def lstrip(self):
diff -pruN 2.23.6-1/awscli/botocore/docs/bcdoc/restdoc.py 2.31.35-1/awscli/botocore/docs/bcdoc/restdoc.py
--- 2.23.6-1/awscli/botocore/docs/bcdoc/restdoc.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/bcdoc/restdoc.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,8 +19,7 @@ from botocore.docs.bcdoc.style import Re
 LOG = logging.getLogger('bcdocs')
 
 
-class ReSTDocument(object):
-
+class ReSTDocument:
     def __init__(self, target='man'):
         self.style = ReSTStyle(self)
         self.target = target
@@ -46,7 +45,7 @@ class ReSTDocument(object):
         """
         Write content on a newline.
         """
-        self._write('%s%s\n' % (self.style.spaces(), content))
+        self._write(f'{self.style.spaces()}{content}\n')
 
     def peek_write(self):
         """
@@ -117,7 +116,7 @@ class DocumentStructure(ReSTDocument):
         :param context: A dictionary of data to store with the strucuture. These
             are only stored per section not the entire structure.
         """
-        super(DocumentStructure, self).__init__(target=target)
+        super().__init__(target=target)
         self._name = name
         self._structure = OrderedDict()
         self._path = [self._name]
@@ -172,8 +171,9 @@ class DocumentStructure(ReSTDocument):
             to the document structure it was instantiated from.
         """
         # Add a new section
-        section = self.__class__(name=name, target=self.target,
-                                 context=context)
+        section = self.__class__(
+            name=name, target=self.target, context=context
+        )
         section.path = self.path + [name]
         # Indent the section apporpriately as well
         section.style.indentation = self.style.indentation
diff -pruN 2.23.6-1/awscli/botocore/docs/bcdoc/style.py 2.31.35-1/awscli/botocore/docs/bcdoc/style.py
--- 2.23.6-1/awscli/botocore/docs/bcdoc/style.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/bcdoc/style.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,8 +16,7 @@ import logging
 logger = logging.getLogger('bcdocs')
 
 
-class BaseStyle(object):
-
+class BaseStyle:
     def __init__(self, doc, indent_width=2):
         self.doc = doc
         self.indent_width = indent_width
@@ -33,7 +32,7 @@ class BaseStyle(object):
         self._indent = value
 
     def new_paragraph(self):
-        return '\n%s' % self.spaces()
+        return f'\n{self.spaces()}'
 
     def indent(self):
         self._indent += 1
@@ -65,7 +64,6 @@ class BaseStyle(object):
 
 
 class ReSTStyle(BaseStyle):
-
     def __init__(self, doc, indent_width=2):
         BaseStyle.__init__(self, doc, indent_width)
         self.do_p = True
@@ -73,10 +71,10 @@ class ReSTStyle(BaseStyle):
         self.list_depth = 0
 
     def new_paragraph(self):
-        self.doc.write('\n\n%s' % self.spaces())
+        self.doc.write(f'\n\n{self.spaces()}')
 
     def new_line(self):
-        self.doc.write('\n%s' % self.spaces())
+        self.doc.write(f'\n{self.spaces()}')
 
     def _start_inline(self, markup):
         self.doc.write(markup)
@@ -123,12 +121,12 @@ class ReSTStyle(BaseStyle):
     def ref(self, title, link=None):
         if link is None:
             link = title
-        self.doc.write(':doc:`%s <%s>`' % (title, link))
+        self.doc.write(f':doc:`{title} <{link}>`')
 
     def _heading(self, s, border_char):
         border = border_char * len(s)
         self.new_paragraph()
-        self.doc.write('%s\n%s\n%s' % (border, s, border))
+        self.doc.write(f'{border}\n{s}\n{border}')
         self.new_paragraph()
 
     def h1(self, s):
@@ -154,11 +152,11 @@ class ReSTStyle(BaseStyle):
 
     def start_p(self, attrs=None):
         if self.do_p:
-            self.doc.write('\n\n%s' % self.spaces())
+            self.doc.write(f'\n\n{self.spaces()}')
 
     def end_p(self):
         if self.do_p:
-            self.doc.write('\n\n%s' % self.spaces())
+            self.doc.write(f'\n\n{self.spaces()}')
 
     def start_code(self, attrs=None):
         self.doc.do_translation = True
@@ -219,13 +217,13 @@ class ReSTStyle(BaseStyle):
         self.doc.do_translation = True
 
     def link_target_definition(self, refname, link):
-        self.doc.writeln('.. _%s: %s' % (refname, link))
+        self.doc.writeln(f'.. _{refname}: {link}')
 
     def sphinx_reference_label(self, label, text=None):
         if text is None:
             text = label
         if self.doc.target == 'html':
-            self.doc.write(':ref:`%s <%s>`' % (text, label))
+            self.doc.write(f':ref:`{text} <{label}>`')
         else:
             self.doc.write(text)
 
@@ -238,14 +236,14 @@ class ReSTStyle(BaseStyle):
                 if ':' in last_write:
                     last_write = last_write.replace(':', r'\:')
                 self.doc.push_write(last_write)
-                self.doc.push_write(' <%s>`__' % self.a_href)
+                self.doc.push_write(f' <{self.a_href}>`__')
             elif last_write == '`':
                 # Look at start_a().  It will do a self.doc.write('`')
                 # which is the start of the link title.  If that is the
                 # case then there was no link text.  We should just
                 # use an inline link.  The syntax of this is
                 # `<http://url>`_
-                self.doc.push_write('`<%s>`__' % self.a_href)
+                self.doc.push_write(f'`<{self.a_href}>`__')
             else:
                 self.doc.push_write(self.a_href)
                 self.doc.hrefs[self.a_href] = self.a_href
@@ -346,9 +344,9 @@ class ReSTStyle(BaseStyle):
             self.li(item)
         else:
             if file_name:
-                self.doc.writeln('  %s' % file_name)
+                self.doc.writeln(f'  {file_name}')
             else:
-                self.doc.writeln('  %s' % item)
+                self.doc.writeln(f'  {item}')
 
     def hidden_toctree(self):
         if self.doc.target == 'html':
@@ -365,11 +363,11 @@ class ReSTStyle(BaseStyle):
         if title is not None:
             self.doc.writeln(title)
         if depth is not None:
-            self.doc.writeln('   :depth: %s' % depth)
+            self.doc.writeln(f'   :depth: {depth}')
 
     def start_sphinx_py_class(self, class_name):
         self.new_paragraph()
-        self.doc.write('.. py:class:: %s' % class_name)
+        self.doc.write(f'.. py:class:: {class_name}')
         self.indent()
         self.new_paragraph()
 
@@ -379,9 +377,9 @@ class ReSTStyle(BaseStyle):
 
     def start_sphinx_py_method(self, method_name, parameters=None):
         self.new_paragraph()
-        content = '.. py:method:: %s' % method_name
+        content = f'.. py:method:: {method_name}'
         if parameters is not None:
-            content += '(%s)' % parameters
+            content += f'({parameters})'
         self.doc.write(content)
         self.indent()
         self.new_paragraph()
@@ -392,7 +390,7 @@ class ReSTStyle(BaseStyle):
 
     def start_sphinx_py_attr(self, attr_name):
         self.new_paragraph()
-        self.doc.write('.. py:attribute:: %s' % attr_name)
+        self.doc.write(f'.. py:attribute:: {attr_name}')
         self.indent()
         self.new_paragraph()
 
@@ -407,12 +405,12 @@ class ReSTStyle(BaseStyle):
 
     def external_link(self, title, link):
         if self.doc.target == 'html':
-            self.doc.write('`%s <%s>`_' % (title, link))
+            self.doc.write(f'`{title} <{link}>`_')
         else:
             self.doc.write(title)
 
     def internal_link(self, title, page):
         if self.doc.target == 'html':
-            self.doc.write(':doc:`%s <%s>`' % (title, page))
+            self.doc.write(f':doc:`{title} <{page}>`')
         else:
             self.doc.write(title)
diff -pruN 2.23.6-1/awscli/botocore/docs/client.py 2.31.35-1/awscli/botocore/docs/client.py
--- 2.23.6-1/awscli/botocore/docs/client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/client.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,7 @@ from botocore.docs.sharedexample import
 from botocore.docs.utils import DocumentedShape, get_official_service_name
 
 
-class ClientDocumenter(object):
+class ClientDocumenter:
     def __init__(self, client, shared_examples=None):
         self._client = client
         self._shared_examples = shared_examples
@@ -50,11 +50,15 @@ class ClientDocumenter(object):
         section = section.add_new_section('intro')
         # Write out the top level description for the client.
         official_service_name = get_official_service_name(
-            self._client.meta.service_model)
+            self._client.meta.service_model
+        )
         section.write(
-            'A low-level client representing %s' % official_service_name)
+            f'A low-level client representing {official_service_name}'
+        )
         section.style.new_line()
-        section.include_doc_string(self._client.meta.service_model.documentation)
+        section.include_doc_string(
+            self._client.meta.service_model.documentation
+        )
 
         # Write out the client example instantiation.
         self._add_client_creation_example(section)
@@ -65,19 +69,18 @@ class ClientDocumenter(object):
         section.style.new_line()
         class_name = self._client.__class__.__name__
         for method_name in sorted(client_methods):
-            section.style.li(':py:meth:`~%s.Client.%s`' % (
-                class_name, method_name))
+            section.style.li(f':py:meth:`~{class_name}.Client.{method_name}`')
 
     def _add_class_signature(self, section):
         section.style.start_sphinx_py_class(
-            class_name='%s.Client' % self._client.__class__.__name__)
+            class_name=f'{self._client.__class__.__name__}.Client'
+        )
 
     def _add_client_creation_example(self, section):
         section.style.start_codeblock()
         section.style.new_line()
         section.write(
-            'client = session.create_client(\'{service}\')'.format(
-                service=self._service_name)
+            f'client = session.create_client(\'{self._service_name}\')'
         )
         section.style.end_codeblock()
 
@@ -85,7 +88,8 @@ class ClientDocumenter(object):
         section = section.add_new_section('methods')
         for method_name in sorted(client_methods):
             self._add_client_method(
-                section, method_name, client_methods[method_name])
+                section, method_name, client_methods[method_name]
+            )
 
     def _add_client_method(self, section, method_name, method):
         section = section.add_new_section(method_name)
@@ -107,17 +111,19 @@ class ClientDocumenter(object):
         error_section.style.new_line()
         client_name = self._client.__class__.__name__
         for error in operation_model.error_shapes:
-            class_name = '%s.Client.exceptions.%s' % (client_name, error.name)
-            error_section.style.li(':py:class:`%s`' % class_name)
+            class_name = f'{client_name}.Client.exceptions.{error.name}'
+            error_section.style.li(f':py:class:`{class_name}`')
 
     def _add_model_driven_method(self, section, method_name):
         service_model = self._client.meta.service_model
         operation_name = self._client.meta.method_to_api_mapping[method_name]
         operation_model = service_model.operation_model(operation_name)
 
-        example_prefix = 'response = client.%s' % method_name
+        example_prefix = f'response = client.{method_name}'
         document_model_driven_method(
-            section, method_name, operation_model,
+            section,
+            method_name,
+            operation_model,
             event_emitter=self._client.meta.events,
             method_description=operation_model.documentation,
             example_prefix=example_prefix,
@@ -131,10 +137,11 @@ class ClientDocumenter(object):
         shared_examples = self._shared_examples.get(operation_name)
         if shared_examples:
             document_shared_examples(
-                section, operation_model, example_prefix, shared_examples)
+                section, operation_model, example_prefix, shared_examples
+            )
 
 
-class ClientExceptionsDocumenter(object):
+class ClientExceptionsDocumenter:
     _USER_GUIDE_LINK = (
         'https://boto3.amazonaws.com/'
         'v1/documentation/api/latest/guide/error-handling.html'
@@ -142,26 +149,32 @@ class ClientExceptionsDocumenter(object)
     _GENERIC_ERROR_SHAPE = DocumentedShape(
         name='Error',
         type_name='structure',
-        documentation=(
-            'Normalized access to common exception attributes.'
-        ),
-        members=OrderedDict([
-            ('Code', DocumentedShape(
-                name='Code',
-                type_name='string',
-                documentation=(
-                    'An identifier specifying the exception type.'
+        documentation=('Normalized access to common exception attributes.'),
+        members=OrderedDict(
+            [
+                (
+                    'Code',
+                    DocumentedShape(
+                        name='Code',
+                        type_name='string',
+                        documentation=(
+                            'An identifier specifying the exception type.'
+                        ),
+                    ),
                 ),
-            )),
-            ('Message', DocumentedShape(
-                name='Message',
-                type_name='string',
-                documentation=(
-                    'A descriptive message explaining why the exception '
-                    'occured.'
+                (
+                    'Message',
+                    DocumentedShape(
+                        name='Message',
+                        type_name='string',
+                        documentation=(
+                            'A descriptive message explaining why the exception '
+                            'occured.'
+                        ),
+                    ),
                 ),
-            )),
-        ]),
+            ]
+        ),
     )
 
     def __init__(self, client):
@@ -194,7 +207,7 @@ class ClientExceptionsDocumenter(object)
 
     def _exception_class_name(self, shape):
         cls_name = self._client.__class__.__name__
-        return '%s.Client.exceptions.%s' % (cls_name, shape.name)
+        return f'{cls_name}.Client.exceptions.{shape.name}'
 
     def _add_exceptions_list(self, section):
         error_shapes = self._client.meta.service_model.error_shapes
@@ -208,7 +221,7 @@ class ClientExceptionsDocumenter(object)
         section.style.new_line()
         for shape in error_shapes:
             class_name = self._exception_class_name(shape)
-            section.style.li(':py:class:`%s`' % class_name)
+            section.style.li(f':py:class:`{class_name}`')
 
     def _add_exception_classes(self, section):
         for shape in self._client.meta.service_model.error_shapes:
@@ -239,7 +252,7 @@ class ClientExceptionsDocumenter(object)
         section.write('...')
         section.style.dedent()
         section.style.new_line()
-        section.write('except client.exceptions.%s as e:' % shape.name)
+        section.write(f'except client.exceptions.{shape.name} as e:')
         section.style.indent()
         section.style.new_line()
         section.write('print(e.response)')
@@ -275,7 +288,9 @@ class ClientExceptionsDocumenter(object)
             event_emitter=self._client.meta.events,
         )
         documenter.document_example(
-            example_section, shape, include=[self._GENERIC_ERROR_SHAPE],
+            example_section,
+            shape,
+            include=[self._GENERIC_ERROR_SHAPE],
         )
 
     def _add_response_params(self, section, shape):
@@ -289,5 +304,7 @@ class ClientExceptionsDocumenter(object)
             event_emitter=self._client.meta.events,
         )
         documenter.document_params(
-            params_section, shape, include=[self._GENERIC_ERROR_SHAPE],
+            params_section,
+            shape,
+            include=[self._GENERIC_ERROR_SHAPE],
         )
diff -pruN 2.23.6-1/awscli/botocore/docs/docstring.py 2.31.35-1/awscli/botocore/docs/docstring.py
--- 2.23.6-1/awscli/botocore/docs/docstring.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/docstring.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,20 +24,21 @@ class LazyLoadedDocstring(str):
     help(). Note that all docstring classes **must** subclass from
     this class. It cannot be used directly as a docstring.
     """
+
     def __init__(self, *args, **kwargs):
         """
         The args and kwargs are the same as the underlying document
         generation function. These just get proxied to the underlying
         function.
         """
-        super(LazyLoadedDocstring, self).__init__()
+        super().__init__()
         self._gen_args = args
         self._gen_kwargs = kwargs
         self._docstring = None
 
     def __new__(cls, *args, **kwargs):
         # Needed in order to sub class from str with args and kwargs
-        return super(LazyLoadedDocstring, cls).__new__(cls)
+        return super().__new__(cls)
 
     def _write_docstring(self, *args, **kwargs):
         raise NotImplementedError(
@@ -76,8 +77,8 @@ class LazyLoadedDocstring(str):
         # Call the document method function with the args and kwargs
         # passed to the class.
         self._write_docstring(
-            docstring_structure, *self._gen_args,
-            **self._gen_kwargs)
+            docstring_structure, *self._gen_args, **self._gen_kwargs
+        )
         return docstring_structure.flush_structure().decode('utf-8')
 
 
diff -pruN 2.23.6-1/awscli/botocore/docs/example.py 2.31.35-1/awscli/botocore/docs/example.py
--- 2.23.6-1/awscli/botocore/docs/example.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/example.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,8 +15,9 @@ from botocore.docs.utils import py_defau
 
 
 class BaseExampleDocumenter(ShapeDocumenter):
-    def document_example(self, section, shape, prefix=None, include=None,
-                         exclude=None):
+    def document_example(
+        self, section, shape, prefix=None, include=None, exclude=None
+    ):
         """Generates an example based on a shape
 
         :param section: The section to write the documentation to.
@@ -39,14 +40,19 @@ class BaseExampleDocumenter(ShapeDocumen
         if prefix is not None:
             section.write(prefix)
         self.traverse_and_document_shape(
-            section=section, shape=shape, history=history,
-            include=include, exclude=exclude)
+            section=section,
+            shape=shape,
+            history=history,
+            include=include,
+            exclude=exclude,
+        )
 
     def document_recursive_shape(self, section, shape, **kwargs):
         section.write('{\'... recursive ...\'}')
 
-    def document_shape_default(self, section, shape, history, include=None,
-                               exclude=None, **kwargs):
+    def document_shape_default(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         py_type = self._get_special_py_default(shape)
         if py_type is None:
             py_type = py_default(shape.type_name)
@@ -55,33 +61,37 @@ class BaseExampleDocumenter(ShapeDocumen
             py_type = 'StreamingBody()'
         section.write(py_type)
 
-    def document_shape_type_string(self, section, shape, history,
-                                   include=None, exclude=None, **kwargs):
+    def document_shape_type_string(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         if 'enum' in shape.metadata:
             for i, enum in enumerate(shape.metadata['enum']):
-                section.write('\'%s\'' % enum)
+                section.write(f'\'{enum}\'')
                 if i < len(shape.metadata['enum']) - 1:
                     section.write('|')
         else:
             self.document_shape_default(section, shape, history)
 
-    def document_shape_type_list(self, section, shape, history, include=None,
-                                 exclude=None, **kwargs):
+    def document_shape_type_list(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         param_shape = shape.member
         list_section = section.add_new_section('list-value')
         self._start_nested_param(list_section, '[')
         param_section = list_section.add_new_section(
-            'member', context={'shape': param_shape.name})
+            'member', context={'shape': param_shape.name}
+        )
         self.traverse_and_document_shape(
-            section=param_section, shape=param_shape, history=history)
+            section=param_section, shape=param_shape, history=history
+        )
         ending_comma_section = list_section.add_new_section('ending-comma')
         ending_comma_section.write(',')
-        ending_bracket_section = list_section.add_new_section(
-            'ending-bracket')
+        ending_bracket_section = list_section.add_new_section('ending-bracket')
         self._end_nested_param(ending_bracket_section, ']')
 
-    def document_shape_type_structure(self, section, shape, history,
-                                      include=None, exclude=None, **kwargs):
+    def document_shape_type_structure(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         if not shape.members:
             section.write('{}')
             return
@@ -95,32 +105,41 @@ class BaseExampleDocumenter(ShapeDocumen
             if exclude and param in exclude:
                 continue
             param_section = section.add_new_section(param)
-            param_section.write('\'%s\': ' % param)
+            param_section.write(f'\'{param}\': ')
             param_shape = input_members[param]
             param_value_section = param_section.add_new_section(
-                'member-value', context={'shape': param_shape.name})
+                'member-value', context={'shape': param_shape.name}
+            )
             self.traverse_and_document_shape(
-                section=param_value_section, shape=param_shape,
-                history=history, name=param)
+                section=param_value_section,
+                shape=param_shape,
+                history=history,
+                name=param,
+            )
             if i < len(input_members) - 1:
                 ending_comma_section = param_section.add_new_section(
-                    'ending-comma')
+                    'ending-comma'
+                )
                 ending_comma_section.write(',')
                 ending_comma_section.style.new_line()
         self._end_structure(section, '{', '}')
 
-    def document_shape_type_map(self, section, shape, history,
-                                include=None, exclude=None, **kwargs):
+    def document_shape_type_map(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         map_section = section.add_new_section('map-value')
         self._start_nested_param(map_section, '{')
         value_shape = shape.value
         key_section = map_section.add_new_section(
-            'key', context={'shape': shape.key.name})
+            'key', context={'shape': shape.key.name}
+        )
         key_section.write('\'string\': ')
         value_section = map_section.add_new_section(
-            'value', context={'shape': value_shape.name})
+            'value', context={'shape': value_shape.name}
+        )
         self.traverse_and_document_shape(
-            section=value_section, shape=value_shape, history=history)
+            section=value_section, shape=value_shape, history=history
+        )
         end_bracket_section = map_section.add_new_section('ending-bracket')
         self._end_nested_param(end_bracket_section, '}')
 
@@ -161,8 +180,9 @@ class BaseExampleDocumenter(ShapeDocumen
 class ResponseExampleDocumenter(BaseExampleDocumenter):
     EVENT_NAME = 'response-example'
 
-    def document_shape_type_event_stream(self, section, shape, history,
-                                         **kwargs):
+    def document_shape_type_event_stream(
+        self, section, shape, history, **kwargs
+    ):
         section.write('EventStream(')
         self.document_shape_type_structure(section, shape, history, **kwargs)
         end_section = section.add_new_section('event-stream-end')
@@ -172,8 +192,9 @@ class ResponseExampleDocumenter(BaseExam
 class RequestExampleDocumenter(BaseExampleDocumenter):
     EVENT_NAME = 'request-example'
 
-    def document_shape_type_structure(self, section, shape, history,
-                                      include=None, exclude=None, **kwargs):
+    def document_shape_type_structure(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         param_format = '\'%s\''
         operator = ': '
         start = '{'
@@ -196,13 +217,18 @@ class RequestExampleDocumenter(BaseExamp
             param_section.write(operator)
             param_shape = input_members[param]
             param_value_section = param_section.add_new_section(
-                'member-value', context={'shape': param_shape.name})
+                'member-value', context={'shape': param_shape.name}
+            )
             self.traverse_and_document_shape(
-                section=param_value_section, shape=param_shape,
-                history=history, name=param)
+                section=param_value_section,
+                shape=param_shape,
+                history=history,
+                name=param,
+            )
             if i < len(input_members) - 1:
                 ending_comma_section = param_section.add_new_section(
-                    'ending-comma')
+                    'ending-comma'
+                )
                 ending_comma_section.write(',')
                 ending_comma_section.style.new_line()
         self._end_structure(section, start, end)
diff -pruN 2.23.6-1/awscli/botocore/docs/method.py 2.31.35-1/awscli/botocore/docs/method.py
--- 2.23.6-1/awscli/botocore/docs/method.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/method.py	2025-11-12 19:17:29.000000000 +0000
@@ -43,8 +43,9 @@ def get_instance_public_methods(instance
     return instance_methods
 
 
-def document_model_driven_signature(section, name, operation_model,
-                                    include=None, exclude=None):
+def document_model_driven_signature(
+    section, name, operation_model, include=None, exclude=None
+):
     """Documents the signature of a model-driven method
 
     :param section: The section to write the documentation to.
@@ -82,8 +83,9 @@ def document_model_driven_signature(sect
     section.style.start_sphinx_py_method(name, signature_params)
 
 
-def document_custom_signature(section, name, method,
-                              include=None, exclude=None):
+def document_custom_signature(
+    section, name, method, include=None, exclude=None
+):
     """Documents the signature of a custom method
 
     :param section: The section to write the documentation to.
@@ -125,8 +127,7 @@ def document_custom_method(section, meth
 
     :param method: The handle to the method being documented
     """
-    document_custom_signature(
-        section, method_name, method)
+    document_custom_signature(section, method_name, method)
     method_intro_section = section.add_new_section('method-intro')
     method_intro_section.writeln('')
     doc_string = inspect.getdoc(method)
@@ -134,12 +135,20 @@ def document_custom_method(section, meth
         method_intro_section.style.write_py_doc_string(doc_string)
 
 
-def document_model_driven_method(section, method_name, operation_model,
-                                 event_emitter, method_description=None,
-                                 example_prefix=None, include_input=None,
-                                 include_output=None, exclude_input=None,
-                                 exclude_output=None, document_output=True,
-                                 include_signature=True):
+def document_model_driven_method(
+    section,
+    method_name,
+    operation_model,
+    event_emitter,
+    method_description=None,
+    example_prefix=None,
+    include_input=None,
+    include_output=None,
+    exclude_input=None,
+    exclude_output=None,
+    document_output=True,
+    include_signature=True,
+):
     """Documents an individual method
 
     :param section: The section to write to
@@ -179,8 +188,12 @@ def document_model_driven_method(section
     # Add the signature if specified.
     if include_signature:
         document_model_driven_signature(
-            section, method_name, operation_model, include=include_input,
-            exclude=exclude_input)
+            section,
+            method_name,
+            operation_model,
+            include=include_input,
+            exclude=exclude_input,
+        )
 
     # Add the description for the method.
     method_intro_section = section.add_new_section('method-intro')
@@ -188,18 +201,19 @@ def document_model_driven_method(section
     if operation_model.deprecated:
         method_intro_section.style.start_danger()
         method_intro_section.writeln(
-                'This operation is deprecated and may not function as '
-                'expected. This operation should not be used going forward '
-                'and is only kept for the purpose of backwards compatiblity.')
+            'This operation is deprecated and may not function as '
+            'expected. This operation should not be used going forward '
+            'and is only kept for the purpose of backwards compatiblity.'
+        )
         method_intro_section.style.end_danger()
     service_uid = operation_model.service_model.metadata.get('uid')
     if service_uid is not None:
         method_intro_section.style.new_paragraph()
         method_intro_section.write("See also: ")
-        link = '%s/%s/%s' % (AWS_DOC_BASE, service_uid,
-                             operation_model.name)
-        method_intro_section.style.external_link(title="AWS API Documentation",
-                                                 link=link)
+        link = f'{AWS_DOC_BASE}/{service_uid}/{operation_model.name}'
+        method_intro_section.style.external_link(
+            title="AWS API Documentation", link=link
+        )
         method_intro_section.writeln('')
 
     # Add the example section.
@@ -219,10 +233,15 @@ def document_model_driven_method(section
         RequestExampleDocumenter(
             service_id=operation_model.service_model.service_id.hyphenize(),
             operation_name=operation_model.name,
-            event_emitter=event_emitter, context=context).document_example(
-                example_section, operation_model.input_shape,
-                prefix=example_prefix, include=include_input,
-                exclude=exclude_input)
+            event_emitter=event_emitter,
+            context=context,
+        ).document_example(
+            example_section,
+            operation_model.input_shape,
+            prefix=example_prefix,
+            include=include_input,
+            exclude=exclude_input,
+        )
     else:
         example_section.style.new_paragraph()
         example_section.style.start_codeblock()
@@ -234,9 +253,14 @@ def document_model_driven_method(section
         RequestParamsDocumenter(
             service_id=operation_model.service_model.service_id.hyphenize(),
             operation_name=operation_model.name,
-            event_emitter=event_emitter, context=context).document_params(
-                request_params_section, operation_model.input_shape,
-                include=include_input, exclude=exclude_input)
+            event_emitter=event_emitter,
+            context=context,
+        ).document_params(
+            request_params_section,
+            operation_model.input_shape,
+            include=include_input,
+            exclude=exclude_input,
+        )
 
     # Add the return value documentation
     return_section = section.add_new_section('return')
@@ -271,13 +295,18 @@ def document_model_driven_method(section
             service_id=operation_model.service_model.service_id.hyphenize(),
             operation_name=operation_model.name,
             event_emitter=event_emitter,
-            context=context).document_example(
-                return_example_section, operation_model.output_shape,
-                include=include_output, exclude=exclude_output)
+            context=context,
+        ).document_example(
+            return_example_section,
+            operation_model.output_shape,
+            include=include_output,
+            exclude=exclude_output,
+        )
 
         # Add a description for the return value
         return_description_section = return_section.add_new_section(
-            'description')
+            'description'
+        )
         return_description_section.style.new_line()
         return_description_section.style.bold('Response Structure')
         return_description_section.style.new_paragraph()
@@ -285,8 +314,12 @@ def document_model_driven_method(section
             service_id=operation_model.service_model.service_id.hyphenize(),
             operation_name=operation_model.name,
             event_emitter=event_emitter,
-            context=context).document_params(
-                return_description_section, operation_model.output_shape,
-                include=include_output, exclude=exclude_output)
+            context=context,
+        ).document_params(
+            return_description_section,
+            operation_model.output_shape,
+            include=include_output,
+            exclude=exclude_output,
+        )
     else:
         return_section.write(':returns: None')
diff -pruN 2.23.6-1/awscli/botocore/docs/paginator.py 2.31.35-1/awscli/botocore/docs/paginator.py
--- 2.23.6-1/awscli/botocore/docs/paginator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/paginator.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,7 +17,7 @@ from botocore.docs.utils import Document
 from botocore.utils import get_service_module_name
 
 
-class PaginatorDocumenter(object):
+class PaginatorDocumenter:
     def __init__(self, client, service_paginator_model):
         self._client = client
         self._service_name = self._client.meta.service_model.service_name
@@ -33,13 +33,14 @@ class PaginatorDocumenter(object):
         section.writeln('The available paginators are:')
 
         paginator_names = sorted(
-            self._service_paginator_model._paginator_config)
+            self._service_paginator_model._paginator_config
+        )
 
         # List the available paginators and then document each paginator.
         for paginator_name in paginator_names:
             section.style.li(
-                ':py:class:`%s.Paginator.%s`' % (
-                    self._client.__class__.__name__, paginator_name))
+                f':py:class:`{self._client.__class__.__name__}.Paginator.{paginator_name}`'
+            )
             self._add_paginator(section, paginator_name)
 
     def _add_paginator(self, section, paginator_name):
@@ -47,33 +48,38 @@ class PaginatorDocumenter(object):
 
         # Docment the paginator class
         section.style.start_sphinx_py_class(
-            class_name='%s.Paginator.%s' % (
-                self._client.__class__.__name__, paginator_name))
+            class_name=f'{self._client.__class__.__name__}.Paginator.{paginator_name}'
+        )
         section.style.start_codeblock()
         section.style.new_line()
 
         # Document how to instantiate the paginator.
         section.write(
-            'paginator = client.get_paginator(\'%s\')' % xform_name(
-                paginator_name)
+            f'paginator = client.get_paginator(\'{xform_name(paginator_name)}\')'
         )
         section.style.end_codeblock()
         section.style.new_line()
         # Get the pagination model for the particular paginator.
         paginator_config = self._service_paginator_model.get_paginator(
-            paginator_name)
+            paginator_name
+        )
         document_paginate_method(
             section=section,
             paginator_name=paginator_name,
             event_emitter=self._client.meta.events,
             service_model=self._client.meta.service_model,
-            paginator_config=paginator_config
+            paginator_config=paginator_config,
         )
 
 
-def document_paginate_method(section, paginator_name, event_emitter,
-                             service_model, paginator_config,
-                             include_signature=True):
+def document_paginate_method(
+    section,
+    paginator_name,
+    event_emitter,
+    service_model,
+    paginator_config,
+    include_signature=True,
+):
     """Documents the paginate method of a paginator
 
     :param section: The section to write to
@@ -91,8 +97,7 @@ def document_paginate_method(section, pa
         It is useful for generating docstrings.
     """
     # Retrieve the operation model of the underlying operation.
-    operation_model = service_model.operation_model(
-        paginator_name)
+    operation_model = service_model.operation_model(paginator_name)
 
     # Add representations of the request and response parameters
     # we want to include in the description of the paginate method.
@@ -100,40 +105,52 @@ def document_paginate_method(section, pa
     pagination_config_members = OrderedDict()
 
     pagination_config_members['MaxItems'] = DocumentedShape(
-        name='MaxItems', type_name='integer',
+        name='MaxItems',
+        type_name='integer',
         documentation=(
             '<p>The total number of items to return. If the total '
             'number of items available is more than the value '
             'specified in max-items then a <code>NextToken</code> '
             'will be provided in the output that you can use to '
-            'resume pagination.</p>'))
+            'resume pagination.</p>'
+        ),
+    )
 
     if paginator_config.get('limit_key', None):
         pagination_config_members['PageSize'] = DocumentedShape(
-            name='PageSize', type_name='integer',
-            documentation='<p>The size of each page.<p>')
+            name='PageSize',
+            type_name='integer',
+            documentation='<p>The size of each page.<p>',
+        )
 
     pagination_config_members['StartingToken'] = DocumentedShape(
-        name='StartingToken', type_name='string',
+        name='StartingToken',
+        type_name='string',
         documentation=(
             '<p>A token to specify where to start paginating. '
             'This is the <code>NextToken</code> from a previous '
-            'response.</p>'))
+            'response.</p>'
+        ),
+    )
 
     botocore_pagination_params = [
         DocumentedShape(
-            name='PaginationConfig', type_name='structure',
+            name='PaginationConfig',
+            type_name='structure',
             documentation=(
                 '<p>A dictionary that provides parameters to control '
-                'pagination.</p>'),
-            members=pagination_config_members)
+                'pagination.</p>'
+            ),
+            members=pagination_config_members,
+        )
     ]
 
     botocore_pagination_response_params = [
         DocumentedShape(
-            name='NextToken', type_name='string',
-            documentation=(
-                '<p>A token to resume pagination.</p>'))
+            name='NextToken',
+            type_name='string',
+            documentation=('<p>A token to resume pagination.</p>'),
+        )
     ]
 
     service_pagination_params = []
@@ -152,20 +169,21 @@ def document_paginate_method(section, pa
     # Hide the output tokens in the documentation.
     service_pagination_response_params = []
     if isinstance(paginator_config['output_token'], list):
-        service_pagination_response_params += paginator_config[
-            'output_token']
+        service_pagination_response_params += paginator_config['output_token']
     else:
-        service_pagination_response_params.append(paginator_config[
-            'output_token'])
+        service_pagination_response_params.append(
+            paginator_config['output_token']
+        )
 
     paginate_description = (
         'Creates an iterator that will paginate through responses '
-        'from :py:meth:`{0}.Client.{1}`.'.format(
-            get_service_module_name(service_model), xform_name(paginator_name))
+        f'from :py:meth:`{get_service_module_name(service_model)}.Client.{xform_name(paginator_name)}`.'
     )
 
     document_model_driven_method(
-        section, 'paginate', operation_model,
+        section,
+        'paginate',
+        operation_model,
         event_emitter=event_emitter,
         method_description=paginate_description,
         example_prefix='response_iterator = paginator.paginate',
@@ -173,5 +191,5 @@ def document_paginate_method(section, pa
         include_output=botocore_pagination_response_params,
         exclude_input=service_pagination_params,
         exclude_output=service_pagination_response_params,
-        include_signature=include_signature
+        include_signature=include_signature,
     )
diff -pruN 2.23.6-1/awscli/botocore/docs/params.py 2.31.35-1/awscli/botocore/docs/params.py
--- 2.23.6-1/awscli/botocore/docs/params.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/params.py	2025-11-12 19:17:29.000000000 +0000
@@ -32,53 +32,77 @@ class BaseParamsDocumenter(ShapeDocument
         """
         history = []
         self.traverse_and_document_shape(
-            section=section, shape=shape, history=history,
-            name=None, include=include, exclude=exclude)
+            section=section,
+            shape=shape,
+            history=history,
+            name=None,
+            include=include,
+            exclude=exclude,
+        )
 
     def document_recursive_shape(self, section, shape, **kwargs):
         self._add_member_documentation(section, shape, **kwargs)
 
-    def document_shape_default(self, section, shape, history, include=None,
-                               exclude=None, **kwargs):
+    def document_shape_default(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         self._add_member_documentation(section, shape, **kwargs)
 
-    def document_shape_type_list(self, section, shape, history, include=None,
-                                 exclude=None, **kwargs):
+    def document_shape_type_list(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         self._add_member_documentation(section, shape, **kwargs)
         param_shape = shape.member
         param_section = section.add_new_section(
-            param_shape.name, context={'shape': shape.member.name})
+            param_shape.name, context={'shape': shape.member.name}
+        )
         self._start_nested_param(param_section)
         self.traverse_and_document_shape(
-            section=param_section, shape=param_shape,
-            history=history, name=None)
+            section=param_section,
+            shape=param_shape,
+            history=history,
+            name=None,
+        )
         section = section.add_new_section('end-list')
         self._end_nested_param(section)
 
-    def document_shape_type_map(self, section, shape, history, include=None,
-                                exclude=None, **kwargs):
+    def document_shape_type_map(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         self._add_member_documentation(section, shape, **kwargs)
 
         key_section = section.add_new_section(
-            'key', context={'shape': shape.key.name})
+            'key', context={'shape': shape.key.name}
+        )
         self._start_nested_param(key_section)
         self._add_member_documentation(key_section, shape.key)
 
         param_section = section.add_new_section(
-            shape.value.name, context={'shape': shape.value.name})
+            shape.value.name, context={'shape': shape.value.name}
+        )
         param_section.style.indent()
         self._start_nested_param(param_section)
         self.traverse_and_document_shape(
-            section=param_section, shape=shape.value,
-            history=history, name=None)
+            section=param_section,
+            shape=shape.value,
+            history=history,
+            name=None,
+        )
 
         end_section = section.add_new_section('end-map')
         self._end_nested_param(end_section)
         self._end_nested_param(end_section)
 
-    def document_shape_type_structure(self, section, shape, history,
-                                      include=None, exclude=None,
-                                      name=None, **kwargs):
+    def document_shape_type_structure(
+        self,
+        section,
+        shape,
+        history,
+        include=None,
+        exclude=None,
+        name=None,
+        **kwargs,
+    ):
         members = self._add_members_to_shape(shape.members, include)
         self._add_member_documentation(section, shape, name=name)
         for param in members:
@@ -86,11 +110,15 @@ class BaseParamsDocumenter(ShapeDocument
                 continue
             param_shape = members[param]
             param_section = section.add_new_section(
-                param, context={'shape': param_shape.name})
+                param, context={'shape': param_shape.name}
+            )
             self._start_nested_param(param_section)
             self.traverse_and_document_shape(
-                section=param_section, shape=param_shape,
-                history=history, name=param)
+                section=param_section,
+                shape=param_shape,
+                history=history,
+                name=param,
+            )
         section = section.add_new_section('end-structure')
         self._end_nested_param(section)
 
@@ -134,7 +162,7 @@ class ResponseParamsDocumenter(BaseParam
         name_section = section.add_new_section('param-name')
         name_section.write('- ')
         if name is not None:
-            name_section.style.bold('%s ' % name)
+            name_section.style.bold(f'{name} ')
         type_section = section.add_new_section('param-type')
         self._document_non_top_level_param_type(type_section, shape)
 
@@ -156,18 +184,21 @@ class ResponseParamsDocumenter(BaseParam
                     '    as follows'
                 )
                 tagged_union_members_str = ', '.join(
-                    ['``%s``' % key for key in shape.members.keys()]
+                    [f'``{key}``' for key in shape.members.keys()]
+                )
+                unknown_code_example = (
+                    '\'SDK_UNKNOWN_MEMBER\': '
+                    '{\'name\': \'UnknownMemberName\'}'
                 )
-                unknown_code_example = ('\'SDK_UNKNOWN_MEMBER\': '
-                                        '{\'name\': \'UnknownMemberName\'}')
                 tagged_union_docs.write(note % (tagged_union_members_str))
                 example = section.add_new_section('param-unknown-example')
                 example.style.codeblock(unknown_code_example)
             documentation_section.include_doc_string(shape.documentation)
         section.style.new_paragraph()
 
-    def document_shape_type_event_stream(self, section, shape, history,
-                                         **kwargs):
+    def document_shape_type_event_stream(
+        self, section, shape, history, **kwargs
+    ):
         self.document_shape_type_structure(section, shape, history, **kwargs)
 
 
@@ -176,8 +207,9 @@ class RequestParamsDocumenter(BaseParams
 
     EVENT_NAME = 'request-params'
 
-    def document_shape_type_structure(self, section, shape, history,
-                                      include=None, exclude=None, **kwargs):
+    def document_shape_type_structure(
+        self, section, shape, history, include=None, exclude=None, **kwargs
+    ):
         if len(history) > 1:
             self._add_member_documentation(section, shape, **kwargs)
             section.style.indent()
@@ -187,36 +219,47 @@ class RequestParamsDocumenter(BaseParams
                 continue
             param_shape = members[param]
             param_section = section.add_new_section(
-                param, context={'shape': param_shape.name})
+                param, context={'shape': param_shape.name}
+            )
             param_section.style.new_line()
             is_required = param in shape.required_members
             self.traverse_and_document_shape(
-                section=param_section, shape=param_shape,
-                history=history, name=param, is_required=is_required)
+                section=param_section,
+                shape=param_shape,
+                history=history,
+                name=param,
+                is_required=is_required,
+            )
         section = section.add_new_section('end-structure')
         if len(history) > 1:
             section.style.dedent()
         section.style.new_line()
 
-    def _add_member_documentation(self, section, shape, name=None,
-                                  is_top_level_param=False, is_required=False,
-                                  **kwargs):
+    def _add_member_documentation(
+        self,
+        section,
+        shape,
+        name=None,
+        is_top_level_param=False,
+        is_required=False,
+        **kwargs,
+    ):
         py_type = self._get_special_py_type_name(shape)
         if py_type is None:
             py_type = py_type_name(shape.type_name)
         if is_top_level_param:
             type_section = section.add_new_section('param-type')
-            type_section.write(':type %s: %s' % (name, py_type))
+            type_section.write(f':type {name}: {py_type}')
             end_type_section = type_section.add_new_section('end-param-type')
             end_type_section.style.new_line()
             name_section = section.add_new_section('param-name')
-            name_section.write(':param %s: ' % name)
+            name_section.write(f':param {name}: ')
 
         else:
             name_section = section.add_new_section('param-name')
             name_section.write('- ')
             if name is not None:
-                name_section.style.bold('%s ' % name)
+                name_section.style.bold(f'{name} ')
             type_section = section.add_new_section('param-type')
             self._document_non_top_level_param_type(type_section, shape)
 
@@ -226,7 +269,8 @@ class RequestParamsDocumenter(BaseParams
             is_required_section.style.bold('[REQUIRED] ')
         if shape.documentation:
             documentation_section = section.add_new_section(
-                'param-documentation')
+                'param-documentation'
+            )
             documentation_section.style.indent()
             if getattr(shape, 'is_tagged_union', False):
                 tagged_union_docs = section.add_new_section(
@@ -238,7 +282,7 @@ class RequestParamsDocumenter(BaseParams
                     '    following top level keys can be set: %s. '
                 )
                 tagged_union_members_str = ', '.join(
-                    ['``%s``' % key for key in shape.members.keys()]
+                    [f'``{key}``' for key in shape.members.keys()]
                 )
                 tagged_union_docs.write(note % (tagged_union_members_str))
             documentation_section.include_doc_string(shape.documentation)
diff -pruN 2.23.6-1/awscli/botocore/docs/service.py 2.31.35-1/awscli/botocore/docs/service.py
--- 2.23.6-1/awscli/botocore/docs/service.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/service.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,14 +18,17 @@ from botocore.docs.waiter import WaiterD
 from botocore.exceptions import DataNotFoundError
 
 
-class ServiceDocumenter(object):
+class ServiceDocumenter:
     def __init__(self, service_name, session):
         self._session = session
         self._service_name = service_name
 
         self._client = self._session.create_client(
-            service_name, region_name='us-east-1', aws_access_key_id='foo',
-            aws_secret_access_key='bar')
+            service_name,
+            region_name='us-east-1',
+            aws_access_key_id='foo',
+            aws_secret_access_key='bar',
+        )
         self._event_emitter = self._client.meta.events
 
         self.sections = [
@@ -34,7 +37,7 @@ class ServiceDocumenter(object):
             'client-api',
             'client-exceptions',
             'paginator-api',
-            'waiter-api'
+            'waiter-api',
         ]
 
     def document_service(self):
@@ -43,8 +46,8 @@ class ServiceDocumenter(object):
         :returns: The reStructured text of the documented service.
         """
         doc_structure = DocumentStructure(
-            self._service_name, section_names=self.sections,
-            target='html')
+            self._service_name, section_names=self.sections, target='html'
+        )
         self.title(doc_structure.get_section('title'))
         self.table_of_contents(doc_structure.get_section('table-of-contents'))
         self.client_api(doc_structure.get_section('client-api'))
@@ -57,8 +60,7 @@ class ServiceDocumenter(object):
         section.style.h1(self._client.__class__.__name__)
         service_id = self._client.meta.service_model.service_id.hyphenize()
         self._event_emitter.emit(
-            'docs.%s.%s' % ('title', service_id),
-            section=section
+            'docs.{}.{}'.format('title', service_id), section=section
         )
 
     def table_of_contents(self, section):
@@ -79,23 +81,26 @@ class ServiceDocumenter(object):
     def paginator_api(self, section):
         try:
             service_paginator_model = self._session.get_paginator_model(
-                self._service_name)
+                self._service_name
+            )
         except DataNotFoundError:
             return
         paginator_documenter = PaginatorDocumenter(
-            self._client, service_paginator_model)
+            self._client, service_paginator_model
+        )
         paginator_documenter.document_paginators(section)
 
     def waiter_api(self, section):
         if self._client.waiter_names:
             service_waiter_model = self._session.get_waiter_model(
-                self._service_name)
+                self._service_name
+            )
             waiter_documenter = WaiterDocumenter(
-                self._client, service_waiter_model)
+                self._client, service_waiter_model
+            )
             waiter_documenter.document_waiters(section)
 
     def get_examples(self, service_name):
         loader = self._session.get_component('data_loader')
-        examples = loader.load_service_model(
-            service_name, 'examples-1')
+        examples = loader.load_service_model(service_name, 'examples-1')
         return examples['examples']
diff -pruN 2.23.6-1/awscli/botocore/docs/shape.py 2.31.35-1/awscli/botocore/docs/shape.py
--- 2.23.6-1/awscli/botocore/docs/shape.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/shape.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,23 +19,29 @@
 from botocore.utils import is_json_value_header
 
 
-class ShapeDocumenter(object):
+class ShapeDocumenter:
     EVENT_NAME = ''
 
-    def __init__(self, service_id, operation_name, event_emitter,
-                 context=None):
+    def __init__(
+        self, service_id, operation_name, event_emitter, context=None
+    ):
         self._service_id = service_id
         self._operation_name = operation_name
         self._event_emitter = event_emitter
         self._context = context
         if context is None:
-            self._context = {
-                'special_shape_types': {}
-            }
-
-    def traverse_and_document_shape(self, section, shape, history,
-                                    include=None, exclude=None, name=None,
-                                    is_required=False):
+            self._context = {'special_shape_types': {}}
+
+    def traverse_and_document_shape(
+        self,
+        section,
+        shape,
+        history,
+        include=None,
+        exclude=None,
+        name=None,
+        is_required=False,
+    ):
         """Traverses and documents a shape
 
         Will take a self class and call its appropriate methods as a shape
@@ -65,29 +71,34 @@ class ShapeDocumenter(object):
             self.document_recursive_shape(section, shape, name=name)
         else:
             history.append(shape.name)
-            is_top_level_param = (len(history) == 2)
+            is_top_level_param = len(history) == 2
             if hasattr(shape, 'is_document_type') and shape.is_document_type:
                 param_type = 'document'
-            getattr(self, 'document_shape_type_%s' % param_type,
-                    self.document_shape_default)(
-                        section, shape, history=history, name=name,
-                        include=include, exclude=exclude,
-                        is_top_level_param=is_top_level_param,
-                        is_required=is_required)
+            getattr(
+                self,
+                f'document_shape_type_{param_type}',
+                self.document_shape_default,
+            )(
+                section,
+                shape,
+                history=history,
+                name=name,
+                include=include,
+                exclude=exclude,
+                is_top_level_param=is_top_level_param,
+                is_required=is_required,
+            )
             if is_top_level_param:
                 self._event_emitter.emit(
-                    'docs.%s.%s.%s.%s' % (self.EVENT_NAME,
-                                          self._service_id,
-                                          self._operation_name,
-                                          name),
-                    section=section)
-            at_overlying_method_section = (len(history) == 1)
+                    f'docs.{self.EVENT_NAME}.{self._service_id}.{self._operation_name}.{name}',
+                    section=section,
+                )
+            at_overlying_method_section = len(history) == 1
             if at_overlying_method_section:
                 self._event_emitter.emit(
-                    'docs.%s.%s.%s.complete-section' % (self.EVENT_NAME,
-                                                        self._service_id,
-                                                        self._operation_name),
-                    section=section)
+                    f'docs.{self.EVENT_NAME}.{self._service_id}.{self._operation_name}.complete-section',
+                    section=section,
+                )
             history.pop()
 
     def _get_special_py_default(self, shape):
@@ -116,7 +127,8 @@ class ShapeDocumenter(object):
         if hasattr(shape, 'is_document_type') and shape.is_document_type:
             return special_type_map['document_type']
         for special_type, marked_shape in self._context[
-                'special_shape_types'].items():
+            'special_shape_types'
+        ].items():
             if special_type in special_type_map:
                 if shape == marked_shape:
                     return special_type_map[special_type]
diff -pruN 2.23.6-1/awscli/botocore/docs/sharedexample.py 2.31.35-1/awscli/botocore/docs/sharedexample.py
--- 2.23.6-1/awscli/botocore/docs/sharedexample.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/sharedexample.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,9 +17,10 @@ from botocore.docs.utils import escape_c
 from botocore.utils import parse_timestamp
 
 
-class SharedExampleDocumenter(object):
-    def document_shared_example(self, example, prefix, section,
-                                operation_model):
+class SharedExampleDocumenter:
+    def document_shared_example(
+        self, example, prefix, section, operation_model
+    ):
         """Documents a single shared example based on its definition.
 
         :param example: The model of the example
@@ -33,8 +34,9 @@ class SharedExampleDocumenter(object):
         section.style.new_paragraph()
         section.write(example.get('description'))
         section.style.new_line()
-        self.document_input(section, example, prefix,
-                            operation_model.input_shape)
+        self.document_input(
+            section, example, prefix, operation_model.input_shape
+        )
         self.document_output(section, example, operation_model.output_shape)
 
     def document_input(self, section, example, prefix, shape):
@@ -96,19 +98,20 @@ class SharedExampleDocumenter(object):
         else:
             self._document_str(section, value, path)
 
-    def _document_dict(self, section, value, comments, path, shape,
-                       top_level=False):
+    def _document_dict(
+        self, section, value, comments, path, shape, top_level=False
+    ):
         dict_section = section.add_new_section('dict-value')
         self._start_nested_value(dict_section, '{')
         for key, val in value.items():
-            path.append('.%s' % key)
+            path.append(f'.{key}')
             item_section = dict_section.add_new_section(key)
             item_section.style.new_line()
             item_comment = self._get_comment(path, comments)
             if item_comment:
                 item_section.write(item_comment)
                 item_section.style.new_line()
-            item_section.write("'%s': " % key)
+            item_section.write(f"'{key}': ")
 
             # Shape could be none if there is no output besides ResponseMetadata
             item_shape = None
@@ -128,7 +131,7 @@ class SharedExampleDocumenter(object):
         param_section = section.add_new_section('param-values')
         self._start_nested_value(param_section, '(')
         for key, val in value.items():
-            path.append('.%s' % key)
+            path.append(f'.{key}')
             item_section = param_section.add_new_section(key)
             item_section.style.new_line()
             item_comment = self._get_comment(path, comments)
@@ -153,7 +156,7 @@ class SharedExampleDocumenter(object):
         for index, val in enumerate(value):
             item_section = list_section.add_new_section(index)
             item_section.style.new_line()
-            path.append('[%s]' % index)
+            path.append(f'[{index}]')
             item_comment = self._get_comment(path, comments)
             if item_comment:
                 item_section.write(item_comment)
@@ -167,17 +170,17 @@ class SharedExampleDocumenter(object):
         # We do the string conversion because this might accept a type that
         # we don't specifically address.
         safe_value = escape_controls(value)
-        section.write(u"'%s'," % str(safe_value))
+        section.write(f"'{str(safe_value)}',")
 
     def _document_number(self, section, value, path):
-        section.write("%s," % str(value))
+        section.write(f"{str(value)},")
 
     def _document_datetime(self, section, value, path):
         datetime_tuple = parse_timestamp(value).timetuple()
         datetime_str = str(datetime_tuple[0])
         for i in range(1, len(datetime_tuple)):
             datetime_str += ", " + str(datetime_tuple[i])
-        section.write("datetime(%s)," % datetime_str)
+        section.write(f"datetime({datetime_str}),")
 
     def _get_comment(self, path, comments):
         key = re.sub(r'^\.', '', ''.join(path))
@@ -198,8 +201,9 @@ class SharedExampleDocumenter(object):
         section.write(end)
 
 
-def document_shared_examples(section, operation_model, example_prefix,
-                             shared_examples):
+def document_shared_examples(
+    section, operation_model, example_prefix, shared_examples
+):
     """Documents the shared examples
 
     :param section: The section to write to.
@@ -219,5 +223,5 @@ def document_shared_examples(section, op
             example=example,
             section=container_section.add_new_section(example['id']),
             prefix=example_prefix,
-            operation_model=operation_model
+            operation_model=operation_model,
         )
diff -pruN 2.23.6-1/awscli/botocore/docs/utils.py 2.31.35-1/awscli/botocore/docs/utils.py
--- 2.23.6-1/awscli/botocore/docs/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -73,31 +73,53 @@ def get_official_service_name(service_mo
     if short_name.startswith('AWS'):
         short_name = short_name[4:]
     if short_name and short_name.lower() not in official_name.lower():
-        official_name += ' ({0})'.format(short_name)
+        official_name += f' ({short_name})'
     return official_name
 
 
 _DocumentedShape = namedtuple(
-    'DocumentedShape', ['name', 'type_name', 'documentation', 'metadata',
-                        'members', 'required_members'])
+    'DocumentedShape',
+    [
+        'name',
+        'type_name',
+        'documentation',
+        'metadata',
+        'members',
+        'required_members',
+    ],
+)
 
 
-class DocumentedShape (_DocumentedShape):
+class DocumentedShape(_DocumentedShape):
     """Use this class to inject new shapes into a model for documentation"""
-    def __new__(cls, name, type_name, documentation, metadata=None,
-                members=None, required_members=None):
+
+    def __new__(
+        cls,
+        name,
+        type_name,
+        documentation,
+        metadata=None,
+        members=None,
+        required_members=None,
+    ):
         if metadata is None:
             metadata = []
         if members is None:
             members = []
         if required_members is None:
             required_members = []
-        return super(DocumentedShape, cls).__new__(
-            cls, name, type_name, documentation, metadata, members,
-            required_members)
+        return super().__new__(
+            cls,
+            name,
+            type_name,
+            documentation,
+            metadata,
+            members,
+            required_members,
+        )
 
 
-class AutoPopulatedParam(object):
+class AutoPopulatedParam:
     def __init__(self, name, param_description=None):
         self.name = name
         self.param_description = param_description
@@ -105,7 +127,8 @@ class AutoPopulatedParam(object):
             self.param_description = (
                 'Please note that this parameter is automatically populated '
                 'if it is not provided. Including this parameter is not '
-                'required\n')
+                'required\n'
+            )
 
     def document_auto_populated_param(self, event_name, section, **kwargs):
         """Documents auto populated parameters
@@ -120,7 +143,8 @@ class AutoPopulatedParam(object):
                 if 'is-required' in section.available_sections:
                     section.delete_section('is-required')
                 description_section = section.get_section(
-                    'param-documentation')
+                    'param-documentation'
+                )
                 description_section.writeln(self.param_description)
         elif event_name.startswith('docs.request-example'):
             section = section.get_section('structure-value')
@@ -128,13 +152,14 @@ class AutoPopulatedParam(object):
                 section.delete_section(self.name)
 
 
-class HideParamFromOperations(object):
+class HideParamFromOperations:
     """Hides a single parameter from multiple operations.
 
     This method will remove a parameter from documentation and from
     examples. This method is typically used for things that are
     automatically populated because a user would be unable to provide
     a value (e.g., a checksum of a serialized XML request body)."""
+
     def __init__(self, service_name, parameter_name, operation_names):
         """
         :type service_name: str
@@ -166,8 +191,9 @@ class HideParamFromOperations(object):
             section.delete_section(self._parameter_name)
 
 
-class AppendParamDocumentation(object):
+class AppendParamDocumentation:
     """Appends documentation to a specific parameter"""
+
     def __init__(self, parameter_name, doc_string):
         self._parameter_name = parameter_name
         self._doc_string = doc_string
@@ -175,8 +201,7 @@ class AppendParamDocumentation(object):
     def append_documentation(self, event_name, section, **kwargs):
         if self._parameter_name in section.available_sections:
             section = section.get_section(self._parameter_name)
-            description_section = section.get_section(
-                'param-documentation')
+            description_section = section.get_section('param-documentation')
             description_section.writeln(self._doc_string)
 
 
@@ -189,8 +214,11 @@ _CONTROLS = {
 }
 # Combines all CONTROLS keys into a big or regular expression
 _ESCAPE_CONTROLS_RE = re.compile('|'.join(map(re.escape, _CONTROLS)))
+
+
 # Based on the match get the appropriate replacement from CONTROLS
-_CONTROLS_MATCH_HANDLER = lambda match: _CONTROLS[match.group(0)]
+def _CONTROLS_MATCH_HANDLER(match):
+    return _CONTROLS[match.group(0)]
 
 
 def escape_controls(value):
diff -pruN 2.23.6-1/awscli/botocore/docs/waiter.py 2.31.35-1/awscli/botocore/docs/waiter.py
--- 2.23.6-1/awscli/botocore/docs/waiter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/docs/waiter.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,7 +17,7 @@ from botocore.docs.utils import Document
 from botocore.utils import get_service_module_name
 
 
-class WaiterDocumenter(object):
+class WaiterDocumenter:
     def __init__(self, client, service_waiter_model):
         self._client = client
         self._service_name = self._client.meta.service_model.service_name
@@ -33,21 +33,21 @@ class WaiterDocumenter(object):
         section.writeln('The available waiters are:')
         for waiter_name in self._service_waiter_model.waiter_names:
             section.style.li(
-                ':py:class:`%s.Waiter.%s`' % (
-                    self._client.__class__.__name__, waiter_name))
+                f':py:class:`{self._client.__class__.__name__}.Waiter.{waiter_name}`'
+            )
             self._add_single_waiter(section, waiter_name)
 
     def _add_single_waiter(self, section, waiter_name):
         section = section.add_new_section(waiter_name)
         section.style.start_sphinx_py_class(
-            class_name='%s.Waiter.%s' % (
-                self._client.__class__.__name__, waiter_name))
+            class_name=f'{self._client.__class__.__name__}.Waiter.{waiter_name}'
+        )
 
         # Add example on how to instantiate waiter.
         section.style.start_codeblock()
         section.style.new_line()
         section.write(
-            'waiter = client.get_waiter(\'%s\')' % xform_name(waiter_name)
+            f'waiter = client.get_waiter(\'{xform_name(waiter_name)}\')'
         )
         section.style.end_codeblock()
 
@@ -58,13 +58,18 @@ class WaiterDocumenter(object):
             waiter_name=waiter_name,
             event_emitter=self._client.meta.events,
             service_model=self._client.meta.service_model,
-            service_waiter_model=self._service_waiter_model
+            service_waiter_model=self._service_waiter_model,
         )
 
 
-def document_wait_method(section, waiter_name, event_emitter,
-                         service_model, service_waiter_model,
-                         include_signature=True):
+def document_wait_method(
+    section,
+    waiter_name,
+    event_emitter,
+    service_model,
+    service_waiter_model,
+    include_signature=True,
+):
     """Documents a the wait method of a waiter
 
     :param section: The section to write to
@@ -81,47 +86,54 @@ def document_wait_method(section, waiter
         It is useful for generating docstrings.
     """
     waiter_model = service_waiter_model.get_waiter(waiter_name)
-    operation_model = service_model.operation_model(
-        waiter_model.operation)
+    operation_model = service_model.operation_model(waiter_model.operation)
 
     waiter_config_members = OrderedDict()
 
     waiter_config_members['Delay'] = DocumentedShape(
-        name='Delay', type_name='integer',
+        name='Delay',
+        type_name='integer',
         documentation=(
             '<p>The amount of time in seconds to wait between '
-            'attempts. Default: {0}</p>'.format(waiter_model.delay)))
+            f'attempts. Default: {waiter_model.delay}</p>'
+        ),
+    )
 
     waiter_config_members['MaxAttempts'] = DocumentedShape(
-        name='MaxAttempts', type_name='integer',
+        name='MaxAttempts',
+        type_name='integer',
         documentation=(
             '<p>The maximum number of attempts to be made. '
-            'Default: {0}</p>'.format(waiter_model.max_attempts)))
+            f'Default: {waiter_model.max_attempts}</p>'
+        ),
+    )
 
     botocore_waiter_params = [
         DocumentedShape(
-            name='WaiterConfig', type_name='structure',
+            name='WaiterConfig',
+            type_name='structure',
             documentation=(
                 '<p>A dictionary that provides parameters to control '
-                'waiting behavior.</p>'),
-            members=waiter_config_members)
+                'waiting behavior.</p>'
+            ),
+            members=waiter_config_members,
+        )
     ]
 
     wait_description = (
-        'Polls :py:meth:`{0}.Client.{1}` every {2} '
+        f'Polls :py:meth:`{get_service_module_name(service_model)}.Client.{xform_name(waiter_model.operation)}` every {waiter_model.delay} '
         'seconds until a successful state is reached. An error is '
-        'returned after {3} failed checks.'.format(
-            get_service_module_name(service_model),
-            xform_name(waiter_model.operation),
-            waiter_model.delay, waiter_model.max_attempts)
+        f'returned after {waiter_model.max_attempts} failed checks.'
     )
 
     document_model_driven_method(
-        section, 'wait', operation_model,
+        section,
+        'wait',
+        operation_model,
         event_emitter=event_emitter,
         method_description=wait_description,
         example_prefix='waiter.wait',
         include_input=botocore_waiter_params,
         document_output=False,
-        include_signature=include_signature
+        include_signature=include_signature,
     )
diff -pruN 2.23.6-1/awscli/botocore/endpoint.py 2.31.35-1/awscli/botocore/endpoint.py
--- 2.23.6-1/awscli/botocore/endpoint.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/endpoint.py	2025-11-12 19:17:29.000000000 +0000
@@ -58,7 +58,7 @@ def convert_to_response_dict(http_respon
         'status_code': http_response.status_code,
         'context': {
             'operation_name': operation_model.name,
-        }
+        },
     }
     if response_dict['status_code'] >= 300:
         response_dict['body'] = http_response.content
@@ -72,7 +72,7 @@ def convert_to_response_dict(http_respon
     return response_dict
 
 
-class Endpoint(object):
+class Endpoint:
     """
     Represents an endpoint for a particular service in a specific
     region.  Only an endpoint can make requests.
@@ -82,8 +82,15 @@ class Endpoint(object):
     :ivar host: The fully qualified endpoint hostname.
     :ivar session: The session object.
     """
-    def __init__(self, host, endpoint_prefix, event_emitter,
-                 response_parser_factory=None, http_session=None):
+
+    def __init__(
+        self,
+        host,
+        endpoint_prefix,
+        event_emitter,
+        response_parser_factory=None,
+        http_session=None,
+    ):
         self._endpoint_prefix = endpoint_prefix
         self._event_emitter = event_emitter
         self.host = host
@@ -96,26 +103,32 @@ class Endpoint(object):
             self.http_session = URLLib3Session()
 
     def __repr__(self):
-        return '%s(%s)' % (self._endpoint_prefix, self.host)
+        return f'{self._endpoint_prefix}({self.host})'
 
     def make_request(self, operation_model, request_dict):
-        logger.debug("Making request for %s with params: %s",
-                     operation_model, request_dict)
+        logger.debug(
+            "Making request for %s with params: %s",
+            operation_model,
+            request_dict,
+        )
         return self._send_request(request_dict, operation_model)
 
     def create_request(self, params, operation_model=None):
         request = create_request_object(params)
         if operation_model:
-            request.stream_output = any([
-                operation_model.has_streaming_output,
-                operation_model.has_event_stream_output
-            ])
+            request.stream_output = any(
+                [
+                    operation_model.has_streaming_output,
+                    operation_model.has_event_stream_output,
+                ]
+            )
             service_id = operation_model.service_model.service_id.hyphenize()
-            event_name = 'request-created.{service_id}.{op_name}'.format(
-                service_id=service_id,
-                op_name=operation_model.name)
-            self._event_emitter.emit(event_name, request=request,
-                                     operation_name=operation_model.name)
+            event_name = f'request-created.{service_id}.{operation_model.name}'
+            self._event_emitter.emit(
+                event_name,
+                request=request,
+                operation_name=operation_model.name,
+            )
         prepared_request = self.prepare_request(request)
         return prepared_request
 
@@ -134,9 +147,15 @@ class Endpoint(object):
         request = self.create_request(request_dict, operation_model)
         context = request_dict['context']
         success_response, exception = self._get_response(
-            request, operation_model, context)
-        while self._needs_retry(attempts, operation_model, request_dict,
-                                success_response, exception):
+            request, operation_model, context
+        )
+        while self._needs_retry(
+            attempts,
+            operation_model,
+            request_dict,
+            success_response,
+            exception,
+        ):
             attempts += 1
             # If there is a stream associated with the request, we need
             # to reset it before attempting to send the request again.
@@ -144,16 +163,19 @@ class Endpoint(object):
             # body.
             request.reset_stream()
             # Create a new request when retried (including a new signature).
-            request = self.create_request(
-                request_dict, operation_model)
+            request = self.create_request(request_dict, operation_model)
             success_response, exception = self._get_response(
-                request, operation_model, context)
-        if success_response is not None and \
-                'ResponseMetadata' in success_response[1]:
+                request, operation_model, context
+            )
+        if (
+            success_response is not None
+            and 'ResponseMetadata' in success_response[1]
+        ):
             # We want to share num retries, not num attempts.
             total_retries = attempts - 1
-            success_response[1]['ResponseMetadata']['RetryAttempts'] = \
-                    total_retries
+            success_response[1]['ResponseMetadata']['RetryAttempts'] = (
+                total_retries
+            )
         if exception is not None:
             raise exception
         else:
@@ -166,7 +188,8 @@ class Endpoint(object):
         # If an exception occurs then the success_response is None.
         # If no exception occurs then exception is None.
         success_response, exception = self._do_get_response(
-            request, operation_model, context)
+            request, operation_model, context
+        )
         kwargs_to_emit = {
             'response_dict': None,
             'parsed_response': None,
@@ -177,25 +200,30 @@ class Endpoint(object):
             http_response, parsed_response = success_response
             kwargs_to_emit['parsed_response'] = parsed_response
             kwargs_to_emit['response_dict'] = convert_to_response_dict(
-                http_response, operation_model)
+                http_response, operation_model
+            )
         service_id = operation_model.service_model.service_id.hyphenize()
         self._event_emitter.emit(
-            'response-received.%s.%s' % (
-                service_id, operation_model.name), **kwargs_to_emit)
+            f'response-received.{service_id}.{operation_model.name}',
+            **kwargs_to_emit,
+        )
         return success_response, exception
 
     def _do_get_response(self, request, operation_model, context):
         try:
             logger.debug("Sending http request: %s", request)
-            history_recorder.record('HTTP_REQUEST', {
-                'method': request.method,
-                'headers': request.headers,
-                'streaming': operation_model.has_streaming_input,
-                'url': request.url,
-                'body': request.body
-            })
+            history_recorder.record(
+                'HTTP_REQUEST',
+                {
+                    'method': request.method,
+                    'headers': request.headers,
+                    'streaming': operation_model.has_streaming_input,
+                    'url': request.url,
+                    'body': request.body,
+                },
+            )
             service_id = operation_model.service_model.service_id.hyphenize()
-            event_name = 'before-send.%s.%s' % (service_id, operation_model.name)
+            event_name = f'before-send.{service_id}.{operation_model.name}'
             responses = self._event_emitter.emit(event_name, request=request)
             http_response = first_non_none_response(responses)
             if http_response is None:
@@ -203,21 +231,28 @@ class Endpoint(object):
         except HTTPClientError as e:
             return (None, e)
         except Exception as e:
-            logger.debug("Exception received when sending HTTP request.",
-                         exc_info=True)
+            logger.debug(
+                "Exception received when sending HTTP request.", exc_info=True
+            )
             return (None, e)
         # This returns the http_response and the parsed_data.
-        response_dict = convert_to_response_dict(http_response, operation_model)
+        response_dict = convert_to_response_dict(
+            http_response, operation_model
+        )
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
 
         http_response_record_dict = response_dict.copy()
-        http_response_record_dict['streaming'] = \
+        http_response_record_dict['streaming'] = (
             operation_model.has_streaming_output
+        )
         history_recorder.record('HTTP_RESPONSE', http_response_record_dict)
 
-        protocol = operation_model.metadata['protocol']
+        protocol = operation_model.service_model.resolved_protocol
         customized_response_dict = {}
         self._event_emitter.emit(
             f"before-parse.{service_id}.{operation_model.name}",
@@ -227,7 +262,8 @@ class Endpoint(object):
         )
         parser = self._response_parser_factory.create_parser(protocol)
         parsed_response = parser.parse(
-            response_dict, operation_model.output_shape)
+            response_dict, operation_model.output_shape
+        )
         parsed_response.update(customized_response_dict)
         # Do a second parsing pass to pick up on any modeled error fields
         # NOTE: Ideally, we would push this down into the parser classes but
@@ -236,15 +272,20 @@ class Endpoint(object):
         # output shape but we can't change that now
         if http_response.status_code >= 300:
             self._add_modeled_error_fields(
-                response_dict, parsed_response,
-                operation_model, parser,
+                response_dict,
+                parsed_response,
+                operation_model,
+                parser,
             )
         history_recorder.record('PARSED_RESPONSE', parsed_response)
         return (http_response, parsed_response), None
 
     def _add_modeled_error_fields(
-            self, response_dict, parsed_response,
-            operation_model, parser,
+        self,
+        response_dict,
+        parsed_response,
+        operation_model,
+        parser,
     ):
         error_code = parsed_response.get("Error", {}).get("Code")
         if error_code is None:
@@ -257,24 +298,35 @@ class Endpoint(object):
         # TODO: avoid naming conflicts with ResponseMetadata and Error
         parsed_response.update(modeled_parse)
 
-    def _needs_retry(self, attempts, operation_model, request_dict,
-                     response=None, caught_exception=None):
+    def _needs_retry(
+        self,
+        attempts,
+        operation_model,
+        request_dict,
+        response=None,
+        caught_exception=None,
+    ):
         service_id = operation_model.service_model.service_id.hyphenize()
-        event_name = 'needs-retry.%s.%s' % (
-            service_id,
-            operation_model.name)
+        event_name = f'needs-retry.{service_id}.{operation_model.name}'
         responses = self._event_emitter.emit(
-            event_name, response=response, endpoint=self,
-            operation=operation_model, attempts=attempts,
-            caught_exception=caught_exception, request_dict=request_dict)
+            event_name,
+            response=response,
+            endpoint=self,
+            operation=operation_model,
+            attempts=attempts,
+            caught_exception=caught_exception,
+            request_dict=request_dict,
+        )
         handler_response = first_non_none_response(responses)
         if handler_response is None:
             return False
         else:
             # Request needs to be retried, and we need to sleep
             # for the specified number of times.
-            logger.debug("Response received to retry, sleeping for "
-                         "%s seconds", handler_response)
+            logger.debug(
+                "Response received to retry, sleeping for " "%s seconds",
+                handler_response,
+            )
             time.sleep(handler_response)
             return True
 
@@ -282,24 +334,29 @@ class Endpoint(object):
         return self.http_session.send(request)
 
 
-class EndpointCreator(object):
+class EndpointCreator:
     def __init__(self, event_emitter):
         self._event_emitter = event_emitter
 
-    def create_endpoint(self, service_model, region_name, endpoint_url,
-                        verify=None, response_parser_factory=None,
-                        timeout=DEFAULT_TIMEOUT,
-                        max_pool_connections=MAX_POOL_CONNECTIONS,
-                        http_session_cls=URLLib3Session,
-                        proxies=None,
-                        socket_options=None,
-                        client_cert=None,
-                        proxies_config=None):
-        if (
-            not is_valid_endpoint_url(endpoint_url)
-            and not is_valid_ipv6_endpoint_url(endpoint_url)
-        ):
-            raise ValueError("Invalid endpoint: %s" % endpoint_url)
+    def create_endpoint(
+        self,
+        service_model,
+        region_name,
+        endpoint_url,
+        verify=None,
+        response_parser_factory=None,
+        timeout=DEFAULT_TIMEOUT,
+        max_pool_connections=MAX_POOL_CONNECTIONS,
+        http_session_cls=URLLib3Session,
+        proxies=None,
+        socket_options=None,
+        client_cert=None,
+        proxies_config=None,
+    ):
+        if not is_valid_endpoint_url(
+            endpoint_url
+        ) and not is_valid_ipv6_endpoint_url(endpoint_url):
+            raise ValueError(f"Invalid endpoint: {endpoint_url}")
 
         if proxies is None:
             proxies = self._get_proxies(endpoint_url)
@@ -313,7 +370,7 @@ class EndpointCreator(object):
             max_pool_connections=max_pool_connections,
             socket_options=socket_options,
             client_cert=client_cert,
-            proxies_config=proxies_config
+            proxies_config=proxies_config,
         )
 
         return Endpoint(
@@ -321,7 +378,7 @@ class EndpointCreator(object):
             endpoint_prefix=endpoint_prefix,
             event_emitter=self._event_emitter,
             response_parser_factory=response_parser_factory,
-            http_session=http_session
+            http_session=http_session,
         )
 
     def _get_proxies(self, url):
diff -pruN 2.23.6-1/awscli/botocore/endpoint_provider.py 2.31.35-1/awscli/botocore/endpoint_provider.py
--- 2.23.6-1/awscli/botocore/endpoint_provider.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/endpoint_provider.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,7 +20,6 @@ go to any `endpoint-rule-set.json` file
 or you can look at the test files in /tests/unit/data/endpoints/valid-rules/
 """
 
-
 import logging
 import re
 from enum import Enum
@@ -550,7 +549,6 @@ class TreeRule(BaseRule):
 
 
 class RuleCreator:
-
     endpoint = EndpointRule
     error = ErrorRule
     tree = TreeRule
diff -pruN 2.23.6-1/awscli/botocore/errorfactory.py 2.31.35-1/awscli/botocore/errorfactory.py
--- 2.23.6-1/awscli/botocore/errorfactory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/errorfactory.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,7 @@ from botocore.exceptions import ClientEr
 from botocore.utils import get_service_module_name
 
 
-class BaseClientExceptions(object):
+class BaseClientExceptions:
     ClientError = ClientError
 
     def __init__(self, code_to_exception):
@@ -45,15 +45,17 @@ class BaseClientExceptions(object):
 
     def __getattr__(self, name):
         exception_cls_names = [
-            exception_cls.__name__ for exception_cls
-            in self._code_to_exception.values()
+            exception_cls.__name__
+            for exception_cls in self._code_to_exception.values()
         ]
         raise AttributeError(
-            '%r object has no attribute %r. Valid exceptions are: %s' % (
-                self, name, ', '.join(exception_cls_names)))
+            '{!r} object has no attribute {!r}. Valid exceptions are: {}'.format(
+                self, name, ', '.join(exception_cls_names)
+            )
+        )
 
 
-class ClientExceptionsFactory(object):
+class ClientExceptionsFactory:
     def __init__(self):
         self._client_exceptions_cache = {}
 
@@ -84,5 +86,6 @@ class ClientExceptionsFactory(object):
             code_to_exception[code] = exception_cls
         cls_name = str(get_service_module_name(service_model) + 'Exceptions')
         client_exceptions_cls = type(
-            cls_name, (BaseClientExceptions,), cls_props)
+            cls_name, (BaseClientExceptions,), cls_props
+        )
         return client_exceptions_cls(code_to_exception)
diff -pruN 2.23.6-1/awscli/botocore/eventstream.py 2.31.35-1/awscli/botocore/eventstream.py
--- 2.23.6-1/awscli/botocore/eventstream.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/eventstream.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-"""Binary Event Stream Decoding """
+"""Binary Event Stream Decoding"""
 
 from binascii import crc32
 from struct import unpack
@@ -20,46 +20,36 @@ from botocore.exceptions import EventStr
 # byte length of the prelude (total_length + header_length + prelude_crc)
 _PRELUDE_LENGTH = 12
 _MAX_HEADERS_LENGTH = 128 * 1024  # 128 Kb
-_MAX_PAYLOAD_LENGTH = 16 * 1024 ** 2  # 16 Mb
 
 
 class ParserError(Exception):
-    """Base binary flow encoding parsing exception.  """
+    """Base binary flow encoding parsing exception."""
+
     pass
 
 
 class DuplicateHeader(ParserError):
-    """Duplicate header found in the event. """
+    """Duplicate header found in the event."""
+
     def __init__(self, header):
-        message = 'Duplicate header present: "%s"' % header
-        super(DuplicateHeader, self).__init__(message)
+        message = f'Duplicate header present: "{header}"'
+        super().__init__(message)
 
 
 class InvalidHeadersLength(ParserError):
-    """Headers length is longer than the maximum. """
-    def __init__(self, length):
-        message = 'Header length of %s exceeded the maximum of %s' % (
-            length, _MAX_HEADERS_LENGTH
-        )
-        super(InvalidHeadersLength, self).__init__(message)
+    """Headers length is longer than the maximum."""
 
-
-class InvalidPayloadLength(ParserError):
-    """Payload length is longer than the maximum. """
     def __init__(self, length):
-        message = 'Payload length of %s exceeded the maximum of %s' % (
-            length, _MAX_PAYLOAD_LENGTH
-        )
-        super(InvalidPayloadLength, self).__init__(message)
+        message = f'Header length of {length} exceeded the maximum of {_MAX_HEADERS_LENGTH}'
+        super().__init__(message)
 
 
 class ChecksumMismatch(ParserError):
-    """Calculated checksum did not match the expected checksum. """
+    """Calculated checksum did not match the expected checksum."""
+
     def __init__(self, expected, calculated):
-        message = 'Checksum mismatch: expected 0x%08x, calculated 0x%08x' % (
-            expected, calculated
-        )
-        super(ChecksumMismatch, self).__init__(message)
+        message = f'Checksum mismatch: expected 0x{expected:08x}, calculated 0x{calculated:08x}'
+        super().__init__(message)
 
 
 class NoInitialResponseError(ParserError):
@@ -68,12 +58,13 @@ class NoInitialResponseError(ParserError
     This exception is raised when the event stream produced no events or
     the first event in the stream was not of the initial-response type.
     """
+
     def __init__(self):
         message = 'First event was not of the initial-response type'
-        super(NoInitialResponseError, self).__init__(message)
+        super().__init__(message)
 
 
-class DecodeUtils(object):
+class DecodeUtils:
     """Unpacking utility functions used in the decoder.
 
     All methods on this class take raw bytes and return  a tuple containing
@@ -250,7 +241,8 @@ class DecodeUtils(object):
         :returns: A tuple containing the (utf-8 string, bytes consumed).
         """
         array_bytes, consumed = DecodeUtils.unpack_byte_array(
-            data, length_byte_size)
+            data, length_byte_size
+        )
         return array_bytes.decode('utf-8'), consumed
 
     @staticmethod
@@ -288,8 +280,9 @@ def _validate_checksum(data, checksum, c
         raise ChecksumMismatch(checksum, computed_checksum)
 
 
-class MessagePrelude(object):
-    """Represents the prelude of an event stream message. """
+class MessagePrelude:
+    """Represents the prelude of an event stream message."""
+
     def __init__(self, total_length, headers_length, crc):
         self.total_length = total_length
         self.headers_length = headers_length
@@ -329,8 +322,9 @@ class MessagePrelude(object):
         return _PRELUDE_LENGTH + self.headers_length
 
 
-class EventStreamMessage(object):
-    """Represents an event stream message. """
+class EventStreamMessage:
+    """Represents an event stream message."""
+
     def __init__(self, prelude, headers, payload, crc):
         self.prelude = prelude
         self.headers = headers
@@ -344,12 +338,12 @@ class EventStreamMessage(object):
         return {
             'status_code': status_code,
             'headers': self.headers,
-            'body': self.payload
+            'body': self.payload,
         }
 
 
-class EventStreamHeaderParser(object):
-    """ Parses the event headers from an event stream message.
+class EventStreamHeaderParser:
+    """Parses the event headers from an event stream message.
 
     Expects all of the header data upfront and creates a dictionary of headers
     to return. This object can be reused multiple times to parse the headers
@@ -432,7 +426,7 @@ class EventStreamHeaderParser(object):
         self._data = self._data[consumed:]
 
 
-class EventStreamBuffer(object):
+class EventStreamBuffer:
     """Streaming based event stream buffer
 
     A buffer class that wraps bytes from an event stream providing parsed
@@ -456,36 +450,35 @@ class EventStreamBuffer(object):
         if prelude.headers_length > _MAX_HEADERS_LENGTH:
             raise InvalidHeadersLength(prelude.headers_length)
 
-        if prelude.payload_length > _MAX_PAYLOAD_LENGTH:
-            raise InvalidPayloadLength(prelude.payload_length)
-
     def _parse_prelude(self):
         prelude_bytes = self._data[:_PRELUDE_LENGTH]
         raw_prelude, _ = DecodeUtils.unpack_prelude(prelude_bytes)
         prelude = MessagePrelude(*raw_prelude)
-        self._validate_prelude(prelude)
         # The minus 4 removes the prelude crc from the bytes to be checked
-        _validate_checksum(prelude_bytes[:_PRELUDE_LENGTH-4], prelude.crc)
+        _validate_checksum(prelude_bytes[: _PRELUDE_LENGTH - 4], prelude.crc)
+        self._validate_prelude(prelude)
         return prelude
 
     def _parse_headers(self):
-        header_bytes = self._data[_PRELUDE_LENGTH:self._prelude.headers_end]
+        header_bytes = self._data[_PRELUDE_LENGTH : self._prelude.headers_end]
         return self._header_parser.parse(header_bytes)
 
     def _parse_payload(self):
         prelude = self._prelude
-        payload_bytes = self._data[prelude.headers_end:prelude.payload_end]
+        payload_bytes = self._data[prelude.headers_end : prelude.payload_end]
         return payload_bytes
 
     def _parse_message_crc(self):
         prelude = self._prelude
-        crc_bytes = self._data[prelude.payload_end:prelude.total_length]
+        crc_bytes = self._data[prelude.payload_end : prelude.total_length]
         message_crc, _ = DecodeUtils.unpack_uint32(crc_bytes)
         return message_crc
 
     def _parse_message_bytes(self):
         # The minus 4 includes the prelude crc to the bytes to be checked
-        message_bytes = self._data[_PRELUDE_LENGTH-4:self._prelude.payload_end]
+        message_bytes = self._data[
+            _PRELUDE_LENGTH - 4 : self._prelude.payload_end
+        ]
         return message_bytes
 
     def _validate_message_crc(self):
@@ -504,7 +497,7 @@ class EventStreamBuffer(object):
 
     def _prepare_for_next_message(self):
         # Advance the data and reset the current prelude
-        self._data = self._data[self._prelude.total_length:]
+        self._data = self._data[self._prelude.total_length :]
         self._prelude = None
 
     def next(self):
@@ -531,7 +524,7 @@ class EventStreamBuffer(object):
         return self
 
 
-class EventStream(object):
+class EventStream:
     """Wrapper class for an event stream body.
 
     This wraps the underlying streaming body, parsing it for individual events
@@ -574,6 +567,7 @@ class EventStream(object):
         if not end_event_received:
             raise Exception("End event not received, request incomplete.")
     """
+
     def __init__(self, raw_stream, output_shape, parser, operation_name):
         self._raw_stream = raw_stream
         self._output_shape = output_shape
@@ -591,8 +585,7 @@ class EventStream(object):
         event_stream_buffer = EventStreamBuffer()
         for chunk in self._raw_stream.stream():
             event_stream_buffer.add_data(chunk)
-            for event in event_stream_buffer:
-                yield event
+            yield from event_stream_buffer
 
     def _parse_event(self, event):
         response_dict = event.to_response_dict()
@@ -613,5 +606,5 @@ class EventStream(object):
         raise NoInitialResponseError()
 
     def close(self):
-        """Closes the underlying streaming body. """
+        """Closes the underlying streaming body."""
         self._raw_stream.close()
diff -pruN 2.23.6-1/awscli/botocore/exceptions.py 2.31.35-1/awscli/botocore/exceptions.py
--- 2.23.6-1/awscli/botocore/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from __future__ import unicode_literals
 
 from botocore.vendored.requests.packages import urllib3
 
@@ -34,6 +33,7 @@ class BotoCoreError(Exception):
 
     :ivar msg: The descriptive message associated with the error.
     """
+
     fmt = 'An unspecified error occurred'
 
     def __init__(self, **kwargs):
@@ -51,6 +51,7 @@ class DataNotFoundError(BotoCoreError):
 
     :ivar data_path: The data path that the user attempted to load.
     """
+
     fmt = 'Unable to load data for: {data_path}'
 
 
@@ -60,9 +61,11 @@ class UnknownServiceError(DataNotFoundEr
     :ivar service_name: The name of the unknown service.
 
     """
+
     fmt = (
         "Unknown service: '{service_name}'. Valid service names are: "
-        "{known_service_names}")
+        "{known_service_names}"
+    )
 
 
 class UnknownRegionError(BotoCoreError):
@@ -81,19 +84,24 @@ class ApiVersionNotFoundError(BotoCoreEr
     :ivar data_path: The data path that the user attempted to load.
     :ivar api_version: The API version that the user attempted to load.
     """
+
     fmt = 'Unable to load data {data_path} for: {api_version}'
 
 
 class HTTPClientError(BotoCoreError):
     fmt = 'An HTTP Client raised an unhandled exception: {error}'
+
     def __init__(self, request=None, response=None, **kwargs):
         self.request = request
         self.response = response
-        super(HTTPClientError, self).__init__(**kwargs)
+        super().__init__(**kwargs)
 
     def __reduce__(self):
         return _exception_from_packed_args, (
-            self.__class__, (self.request, self.response), self.kwargs)
+            self.__class__,
+            (self.request, self.response),
+            self.kwargs,
+        )
 
 
 class ConnectionError(BotoCoreError):
@@ -105,8 +113,10 @@ class InvalidIMDSEndpointError(BotoCoreE
 
 
 class InvalidIMDSEndpointModeError(BotoCoreError):
-    fmt = ('Invalid EC2 Instance Metadata endpoint mode: {mode}'
-        ' Valid endpoint modes (case-insensitive): {valid_modes}.')
+    fmt = (
+        'Invalid EC2 Instance Metadata endpoint mode: {mode}'
+        ' Valid endpoint modes (case-insensitive): {valid_modes}.'
+    )
 
 
 class EndpointConnectionError(ConnectionError):
@@ -120,7 +130,8 @@ class SSLError(ConnectionError):
 class ConnectionClosedError(HTTPClientError):
     fmt = (
         'Connection was closed before we received a valid response '
-        'from endpoint URL: "{endpoint_url}".')
+        'from endpoint URL: "{endpoint_url}".'
+    )
 
 
 class ReadTimeoutError(HTTPClientError, urllib3.exceptions.ReadTimeoutError):
@@ -139,6 +150,7 @@ class NoCredentialsError(BotoCoreError):
     """
     No credentials could be found.
     """
+
     fmt = 'Unable to locate credentials'
 
 
@@ -169,6 +181,7 @@ class PartialCredentialsError(BotoCoreEr
     :ivar cred_var: The missing credential variable name.
 
     """
+
     fmt = 'Partial credentials found in {provider}, missing: {cred_var}'
 
 
@@ -181,6 +194,7 @@ class CredentialRetrievalError(BotoCoreE
         retrieved.
 
     """
+
     fmt = 'Error when retrieving credentials from {provider}: {error_msg}'
 
 
@@ -190,6 +204,7 @@ class UnknownSignatureVersionError(BotoC
 
     :ivar signature_version: The name of the requested signature version.
     """
+
     fmt = 'Unknown Signature Version: {signature_version}.'
 
 
@@ -200,6 +215,7 @@ class ServiceNotInRegionError(BotoCoreEr
     :ivar service_name: The name of the service.
     :ivar region_name: The name of the region.
     """
+
     fmt = 'Service {service_name} not available in region {region_name}'
 
 
@@ -215,6 +231,7 @@ class BaseEndpointResolverError(BotoCore
 
 class NoRegionError(BaseEndpointResolverError):
     """No region was specified."""
+
     fmt = 'You must specify a region.'
 
 
@@ -227,8 +244,10 @@ class EndpointVariantError(BaseEndpointR
 
     """
 
-    fmt = ('Unable to construct a modeled endpoint with the following '
-           'variant(s) {tags}: ')
+    fmt = (
+        'Unable to construct a modeled endpoint with the following '
+        'variant(s) {tags}: '
+    )
 
 
 class UnknownEndpointError(BaseEndpointResolverError, ValueError):
@@ -238,9 +257,11 @@ class UnknownEndpointError(BaseEndpointR
     :ivar service_name: The name of the service.
     :ivar region_name: The name of the region.
     """
+
     fmt = (
         'Unable to construct an endpoint for '
-        '{service_name} in region {region_name}')
+        '{service_name} in region {region_name}'
+    )
 
 
 class UnknownFIPSEndpointError(BaseEndpointResolverError):
@@ -250,6 +271,7 @@ class UnknownFIPSEndpointError(BaseEndpo
     :ivar service_name: The name of the service.
     :ivar region_name: The name of the region.
     """
+
     fmt = (
         'The provided FIPS pseudo-region "{region_name}" is not known for '
         'the service "{service_name}". A FIPS compliant endpoint cannot be '
@@ -264,6 +286,7 @@ class ProfileNotFound(BotoCoreError):
 
     :ivar profile: The name of the profile the user attempted to load.
     """
+
     fmt = 'The config profile ({profile}) could not be found'
 
 
@@ -273,6 +296,7 @@ class ConfigParseError(BotoCoreError):
 
     :ivar path: The path to the configuration file.
     """
+
     fmt = 'Unable to parse config file: {path}'
 
 
@@ -282,6 +306,7 @@ class ConfigNotFound(BotoCoreError):
 
     :ivar path: The path to the configuration file.
     """
+
     fmt = 'The specified config file ({path}) could not be found.'
 
 
@@ -296,8 +321,11 @@ class MissingParametersError(BotoCoreErr
         other than str().
     :ivar missing: The names of the missing parameters.
     """
-    fmt = ('The following required parameters are missing for '
-           '{object_name}: {missing}')
+
+    fmt = (
+        'The following required parameters are missing for '
+        '{object_name}: {missing}'
+    )
 
 
 class ValidationError(BotoCoreError):
@@ -311,8 +339,8 @@ class ValidationError(BotoCoreError):
     :ivar param: The parameter that failed validation.
     :ivar type_name: The name of the underlying type.
     """
-    fmt = ("Invalid value ('{value}') for param {param} "
-           "of type {type_name} ")
+
+    fmt = "Invalid value ('{value}') for param {param} " "of type {type_name} "
 
 
 class ParamValidationError(BotoCoreError):
@@ -330,8 +358,11 @@ class UnknownKeyError(ValidationError):
     :ivar param: The name of the parameter.
     :ivar choices: The valid choices the value can be.
     """
-    fmt = ("Unknown key '{value}' for param '{param}'.  Must be one "
-           "of: {choices}")
+
+    fmt = (
+        "Unknown key '{value}' for param '{param}'.  Must be one "
+        "of: {choices}"
+    )
 
 
 class RangeError(ValidationError):
@@ -343,8 +374,11 @@ class RangeError(ValidationError):
     :ivar min_value: The specified minimum value.
     :ivar max_value: The specified maximum value.
     """
-    fmt = ('Value out of range for param {param}: '
-           '{min_value} <= {value} <= {max_value}')
+
+    fmt = (
+        'Value out of range for param {param}: '
+        '{min_value} <= {value} <= {max_value}'
+    )
 
 
 class UnknownParameterError(ValidationError):
@@ -355,6 +389,7 @@ class UnknownParameterError(ValidationEr
     :ivar operation: The name of the operation.
     :ivar choices: The valid choices the parameter name can be.
     """
+
     fmt = (
         "Unknown parameter '{name}' for operation {operation}.  Must be one "
         "of: {choices}"
@@ -367,9 +402,8 @@ class InvalidRegionError(ValidationError
 
     :ivar region_name: region_name that was being validated.
     """
-    fmt = (
-        "Provided region_name '{region_name}' doesn't match a supported format."
-    )
+
+    fmt = "Provided region_name '{region_name}' doesn't match a supported format."
 
 
 class AliasConflictParameterError(ValidationError):
@@ -380,6 +414,7 @@ class AliasConflictParameterError(Valida
     :ivar alias: The name of the alias
     :ivar operation: The name of the operation.
     """
+
     fmt = (
         "Parameter '{original}' and its alias '{alias}' were provided "
         "for operation {operation}.  Only one of them may be used."
@@ -392,6 +427,7 @@ class UnknownServiceStyle(BotoCoreError)
 
     :ivar service_style: The style requested.
     """
+
     fmt = 'The service style ({service_style}) is not understood.'
 
 
@@ -404,66 +440,77 @@ class OperationNotPageableError(BotoCore
 
 
 class ChecksumError(BotoCoreError):
-    """The expected checksum did not match the calculated checksum.
+    """The expected checksum did not match the calculated checksum."""
 
-    """
-    fmt = ('Checksum {checksum_type} failed, expected checksum '
-           '{expected_checksum} did not match calculated checksum '
-           '{actual_checksum}.')
+    fmt = (
+        'Checksum {checksum_type} failed, expected checksum '
+        '{expected_checksum} did not match calculated checksum '
+        '{actual_checksum}.'
+    )
 
 
 class UnseekableStreamError(BotoCoreError):
-    """Need to seek a stream, but stream does not support seeking.
+    """Need to seek a stream, but stream does not support seeking."""
 
-    """
-    fmt = ('Need to rewind the stream {stream_object}, but stream '
-           'is not seekable.')
+    fmt = (
+        'Need to rewind the stream {stream_object}, but stream '
+        'is not seekable.'
+    )
 
 
 class WaiterError(BotoCoreError):
     """Waiter failed to reach desired state."""
+
     fmt = 'Waiter {name} failed: {reason}'
 
     def __init__(self, name, reason, last_response):
-        super(WaiterError, self).__init__(name=name, reason=reason)
+        super().__init__(name=name, reason=reason)
         self.last_response = last_response
 
 
 class IncompleteReadError(BotoCoreError):
     """HTTP response did not return expected number of bytes."""
-    fmt = ('{actual_bytes} read, but total bytes '
-           'expected is {expected_bytes}.')
+
+    fmt = (
+        '{actual_bytes} read, but total bytes ' 'expected is {expected_bytes}.'
+    )
 
 
 class InvalidExpressionError(BotoCoreError):
     """Expression is either invalid or too complex."""
+
     fmt = 'Invalid expression {expression}: Only dotted lookups are supported.'
 
 
 class UnknownCredentialError(BotoCoreError):
     """Tried to insert before/after an unregistered credential type."""
+
     fmt = 'Credential named {name} not found.'
 
 
 class WaiterConfigError(BotoCoreError):
     """Error when processing waiter configuration."""
+
     fmt = 'Error processing waiter config: {error_msg}'
 
 
 class UnknownClientMethodError(BotoCoreError):
     """Error when trying to access a method on a client that does not exist."""
+
     fmt = 'Client does not have method: {method_name}'
 
 
 class UnsupportedSignatureVersionError(BotoCoreError):
     """Error when trying to use an unsupported Signature Version."""
+
     fmt = 'Signature version(s) are not supported: {signature_version}'
 
 
 class ClientError(Exception):
     MSG_TEMPLATE = (
         'An error occurred ({error_code}) when calling the {operation_name} '
-        'operation{retry_info}: {error_message}')
+        'operation{retry_info}: {error_message}'
+    )
 
     def __init__(self, error_response, operation_name):
         retry_info = self._get_retry_info(error_response)
@@ -474,7 +521,7 @@ class ClientError(Exception):
             operation_name=operation_name,
             retry_info=retry_info,
         )
-        super(ClientError, self).__init__(msg)
+        super().__init__(msg)
         self.response = error_response
         self.operation_name = operation_name
 
@@ -484,8 +531,9 @@ class ClientError(Exception):
             metadata = response['ResponseMetadata']
             if metadata.get('MaxAttemptsReached', False):
                 if 'RetryAttempts' in metadata:
-                    retry_info = (' (reached max retries: %s)' %
-                                  metadata['RetryAttempts'])
+                    retry_info = ' (reached max retries: {})'.format(
+                        metadata['RetryAttempts']
+                    )
         return retry_info
 
     def __reduce__(self):
@@ -501,6 +549,7 @@ class EventStreamError(ClientError):
 
 class UnsupportedTLSVersionWarning(Warning):
     """Warn when an openssl version that uses TLS 1.2 is required"""
+
     pass
 
 
@@ -510,6 +559,7 @@ class ImminentRemovalWarning(Warning):
 
 class InvalidDNSNameError(BotoCoreError):
     """Error when virtual host path is forced on a non-DNS compatible bucket"""
+
     fmt = (
         'Bucket named {bucket_name} is not DNS compatible. Virtual '
         'hosted-style addressing cannot be used. The addressing style '
@@ -521,6 +571,7 @@ class InvalidDNSNameError(BotoCoreError)
 
 class InvalidS3AddressingStyleError(BotoCoreError):
     """Error when an invalid path style is specified"""
+
     fmt = (
         'S3 addressing style {s3_addressing_style} is invalid. Valid options '
         'are: \'auto\', \'virtual\', and \'path\''
@@ -529,6 +580,7 @@ class InvalidS3AddressingStyleError(Boto
 
 class UnsupportedS3ArnError(BotoCoreError):
     """Error when S3 ARN provided to Bucket parameter is not supported"""
+
     fmt = (
         'S3 ARN {arn} provided to "Bucket" parameter is invalid. Only '
         'ARNs for S3 access-points are supported.'
@@ -537,13 +589,13 @@ class UnsupportedS3ArnError(BotoCoreErro
 
 class UnsupportedS3ControlArnError(BotoCoreError):
     """Error when S3 ARN provided to S3 control parameter is not supported"""
-    fmt = (
-        'S3 ARN "{arn}" provided is invalid for this operation. {msg}'
-    )
+
+    fmt = 'S3 ARN "{arn}" provided is invalid for this operation. {msg}'
 
 
 class InvalidHostLabelError(BotoCoreError):
     """Error when an invalid host label would be bound to an endpoint"""
+
     fmt = (
         'Invalid host label to be bound to the hostname of the endpoint: '
         '"{label}".'
@@ -552,6 +604,7 @@ class InvalidHostLabelError(BotoCoreErro
 
 class UnsupportedOutpostResourceError(BotoCoreError):
     """Error when S3 Outpost ARN provided to Bucket parameter is incomplete"""
+
     fmt = (
         'S3 Outpost ARN resource "{resource_name}" provided to "Bucket" '
         'parameter is invalid. Only ARNs for S3 Outpost arns with an '
@@ -561,20 +614,19 @@ class UnsupportedOutpostResourceError(Bo
 
 class UnsupportedS3ConfigurationError(BotoCoreError):
     """Error when an unsupported configuration is used with access-points"""
-    fmt = (
-        'Unsupported configuration when using S3: {msg}'
-    )
+
+    fmt = 'Unsupported configuration when using S3: {msg}'
 
 
 class UnsupportedS3AccesspointConfigurationError(BotoCoreError):
     """Error when an unsupported configuration is used with access-points"""
-    fmt = (
-        'Unsupported configuration when using S3 access-points: {msg}'
-    )
+
+    fmt = 'Unsupported configuration when using S3 access-points: {msg}'
 
 
 class InvalidEndpointDiscoveryConfigurationError(BotoCoreError):
     """Error when invalid value supplied for endpoint_discovery_enabled"""
+
     fmt = (
         'Unsupported configuration value for endpoint_discovery_enabled. '
         'Expected one of ("true", "false", "auto") but got {config_value}.'
@@ -583,13 +635,13 @@ class InvalidEndpointDiscoveryConfigurat
 
 class UnsupportedS3ControlConfigurationError(BotoCoreError):
     """Error when an unsupported configuration is used with S3 Control"""
-    fmt = (
-        'Unsupported configuration when using S3 Control: {msg}'
-    )
+
+    fmt = 'Unsupported configuration when using S3 Control: {msg}'
 
 
 class InvalidRetryConfigurationError(BotoCoreError):
     """Error when invalid retry configuration is specified"""
+
     fmt = (
         'Cannot provide retry configuration for "{retry_config_option}". '
         'Valid retry configuration options are: \'max_attempts\''
@@ -598,6 +650,7 @@ class InvalidRetryConfigurationError(Bot
 
 class InvalidMaxRetryAttemptsError(InvalidRetryConfigurationError):
     """Error when invalid retry configuration is specified"""
+
     fmt = (
         'Value provided to "max_attempts": {provided_max_attempts} must '
         'be an integer greater than or equal to one.'
@@ -606,6 +659,7 @@ class InvalidMaxRetryAttemptsError(Inval
 
 class InvalidRetryModeError(InvalidRetryConfigurationError):
     """Error when invalid retry mode configuration is specified"""
+
     fmt = (
         'Invalid value provided to "mode": "{provided_retry_mode}" must '
         'be one of: "standard" or "adaptive"'
@@ -613,7 +667,9 @@ class InvalidRetryModeError(InvalidRetry
 
 
 class StubResponseError(BotoCoreError):
-    fmt = 'Error getting response stub for operation {operation_name}: {reason}'
+    fmt = (
+        'Error getting response stub for operation {operation_name}: {reason}'
+    )
 
 
 class StubAssertionError(StubResponseError, AssertionError):
@@ -703,15 +759,11 @@ class AuthCodeFetcherError(SSOError):
 
 
 class CapacityNotAvailableError(BotoCoreError):
-    fmt = (
-        'Insufficient request capacity available.'
-    )
+    fmt = 'Insufficient request capacity available.'
 
 
 class InvalidProxiesConfigError(BotoCoreError):
-    fmt = (
-        'Invalid configuration value(s) provided for proxies_config.'
-    )
+    fmt = 'Invalid configuration value(s) provided for proxies_config.'
 
 
 class AwsChunkedWrapperError(BotoCoreError):
@@ -723,9 +775,7 @@ class FlexibleChecksumError(BotoCoreErro
 
 
 class InvalidEndpointConfigurationError(BotoCoreError):
-    fmt = (
-        'Invalid endpoint configuration: {msg}'
-    )
+    fmt = 'Invalid endpoint configuration: {msg}'
 
 
 class EndpointProviderError(BotoCoreError):
@@ -751,3 +801,12 @@ class InvalidChecksumConfigError(BotoCor
         'Unsupported configuration value for {config_key}. '
         'Expected one of {valid_options} but got {config_value}.'
     )
+
+
+class UnsupportedServiceProtocolsError(BotoCoreError):
+    """Error when a service does not use any protocol supported by botocore."""
+
+    fmt = (
+        'Botocore supports {botocore_supported_protocols}, but service {service} only '
+        'supports {service_supported_protocols}.'
+    )
diff -pruN 2.23.6-1/awscli/botocore/handlers.py 2.31.35-1/awscli/botocore/handlers.py
--- 2.23.6-1/awscli/botocore/handlers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/handlers.py	2025-11-12 19:17:29.000000000 +0000
@@ -26,9 +26,10 @@ from io import BytesIO
 
 import botocore
 import botocore.auth
-from botocore import utils, UNSIGNED
+from botocore import UNSIGNED, utils
+from botocore.args import ClientConfigString
 from botocore.compat import (
-    MD5_AVAILABLE,
+    MD5_AVAILABLE,  # noqa
     ETree,
     OrderedDict,
     XMLParseError,
@@ -47,25 +48,27 @@ from botocore.docs.utils import (
 )
 from botocore.exceptions import (
     AliasConflictParameterError,
-    MissingServiceIdError,
+    MissingServiceIdError,  # noqa
     ParamValidationError,
     UnsupportedTLSVersionWarning,
 )
 from botocore.regions import EndpointResolverBuiltins
 from botocore.signers import (
-    add_generate_db_auth_token,
     add_dsql_generate_db_auth_token_methods,
+    add_generate_db_auth_token,
     add_generate_presigned_post,
     add_generate_presigned_url,
 )
+from botocore.useragent import register_feature_id
 from botocore.utils import (
     SAFE_CHARS,
+    SERVICE_NAME_ALIASES,
     ArnParser,
-    hyphenize_service_id,
-    is_global_accesspoint,
+    get_token_from_environment,
+    hyphenize_service_id,  # noqa
+    is_global_accesspoint,  # noqa
     percent_encode,
     switch_host_with_param,
-    SERVICE_NAME_ALIASES,
 )
 
 logger = logging.getLogger(__name__)
@@ -117,8 +120,8 @@ def _looks_like_special_case_error(statu
     if status_code == 200 and body:
         try:
             parser = ETree.XMLParser(
-                target=ETree.TreeBuilder(),
-                encoding='utf-8')
+                target=ETree.TreeBuilder(), encoding='utf-8'
+            )
             parser.feed(body)
             root = parser.close()
         except XMLParseError:
@@ -132,7 +135,7 @@ def _looks_like_special_case_error(statu
 
 
 def set_operation_specific_signer(context, signing_name, **kwargs):
-    """ Choose the operation-specific signer.
+    """Choose the operation-specific signer.
 
     Individual operations may have a different auth type than the service as a
     whole. This will most often manifest as operations that should not be
@@ -204,8 +207,9 @@ def decode_console_output(parsed, **kwar
             # We're using 'replace' for errors because it is
             # possible that console output contains non string
             # chars we can't utf-8 decode.
-            value = base64.b64decode(bytes(parsed['Output'], 'latin-1')).decode(
-                'utf-8', 'replace')
+            value = base64.b64decode(
+                bytes(parsed['Output'], 'latin-1')
+            ).decode('utf-8', 'replace')
             parsed['Output'] = value
         except (ValueError, TypeError, AttributeError):
             logger.debug('Error decoding base64', exc_info=True)
@@ -215,8 +219,9 @@ def generate_idempotent_uuid(params, mod
     for name in model.idempotent_members:
         if name not in params:
             params[name] = str(uuid.uuid4())
-            logger.debug("injecting idempotency token (%s) into param '%s'." %
-                         (params[name], name))
+            logger.debug(
+                f"injecting idempotency token ({params[name]}) into param '{name}'."
+            )
 
 
 def decode_quoted_jsondoc(value):
@@ -231,7 +236,8 @@ def json_decode_template_body(parsed, **
     if 'TemplateBody' in parsed:
         try:
             value = json.loads(
-                parsed['TemplateBody'], object_pairs_hook=OrderedDict)
+                parsed['TemplateBody'], object_pairs_hook=OrderedDict
+            )
             parsed['TemplateBody'] = value
         except (ValueError, TypeError):
             logger.debug('error loading JSON', exc_info=True)
@@ -243,9 +249,9 @@ def validate_bucket_name(params, **kwarg
     bucket = params['Bucket']
     if not VALID_BUCKET.search(bucket) and not VALID_S3_ARN.search(bucket):
         error_msg = (
-            'Invalid bucket name "%s": Bucket name must match '
-            'the regex "%s" or be an ARN matching the regex "%s"' % (
-                bucket, VALID_BUCKET.pattern, VALID_S3_ARN.pattern))
+            f'Invalid bucket name "{bucket}": Bucket name must match '
+            f'the regex "{VALID_BUCKET.pattern}" or be an ARN matching the regex "{VALID_S3_ARN.pattern}"'
+        )
         raise ParamValidationError(report=error_msg)
 
 
@@ -278,16 +284,19 @@ def _sse_md5(params, sse_member_prefix='
     key_as_bytes = params[sse_key_member]
     if isinstance(key_as_bytes, str):
         key_as_bytes = key_as_bytes.encode('utf-8')
-    key_md5_str = base64.b64encode(
-        get_md5(key_as_bytes).digest()).decode('utf-8')
+    key_md5_str = base64.b64encode(get_md5(key_as_bytes).digest()).decode(
+        'utf-8'
+    )
     key_b64_encoded = base64.b64encode(key_as_bytes).decode('utf-8')
     params[sse_key_member] = key_b64_encoded
     params[sse_md5_member] = key_md5_str
 
 
 def _needs_s3_sse_customization(params, sse_member_prefix):
-    return (params.get(sse_member_prefix + 'Key') is not None and
-            sse_member_prefix + 'KeyMD5' not in params)
+    return (
+        params.get(sse_member_prefix + 'Key') is not None
+        and sse_member_prefix + 'KeyMD5' not in params
+    )
 
 
 def disable_signing(**kwargs):
@@ -310,7 +319,7 @@ def add_expect_header(model, params, **k
             params['headers']['Expect'] = '100-continue'
 
 
-class DeprecatedServiceDocumenter(object):
+class DeprecatedServiceDocumenter:
     def __init__(self, replacement_service_name):
         self._replacement_service_name = replacement_service_name
 
@@ -331,8 +340,10 @@ def document_copy_source_form(section, e
         param_line = parent.get_section('CopySource')
         value_portion = param_line.get_section('member-value')
         value_portion.clear_text()
-        value_portion.write("'string' or {'Bucket': 'string', "
-                            "'Key': 'string', 'VersionId': 'string'}")
+        value_portion.write(
+            "'string' or {'Bucket': 'string', "
+            "'Key': 'string', 'VersionId': 'string'}"
+        )
     elif 'request-params' in event_name:
         param_section = section.get_section('CopySource')
         type_section = param_section.get_section('param-type')
@@ -393,15 +404,16 @@ def _quote_source_header_from_dict(sourc
         key = source_dict['Key']
         version_id = source_dict.get('VersionId')
         if VALID_S3_ARN.search(bucket):
-            final = '%s/object/%s' % (bucket, key)
+            final = f'{bucket}/object/{key}'
         else:
-            final = '%s/%s' % (bucket, key)
+            final = f'{bucket}/{key}'
     except KeyError as e:
         raise ParamValidationError(
-            report='Missing required parameter: %s' % str(e))
+            report=f'Missing required parameter: {str(e)}'
+        )
     final = percent_encode(final, safe=SAFE_CHARS + '/')
     if version_id is not None:
-        final += '?versionId=%s' % version_id
+        final += f'?versionId={version_id}'
     return final
 
 
@@ -410,12 +422,13 @@ def _quote_source_header(value):
     if result is None:
         return percent_encode(value, safe=SAFE_CHARS + '/')
     else:
-        first, version_id = value[:result.start()], value[result.start():]
+        first, version_id = value[: result.start()], value[result.start() :]
         return percent_encode(first, safe=SAFE_CHARS + '/') + version_id
 
 
-def _get_cross_region_presigned_url(request_signer, request_dict, model,
-                                    source_region, destination_region):
+def _get_cross_region_presigned_url(
+    request_signer, request_dict, model, source_region, destination_region
+):
     # The better way to do this is to actually get the
     # endpoint_resolver and get the endpoint_url given the
     # source region.  In this specific case, we know that
@@ -427,12 +440,13 @@ def _get_cross_region_presigned_url(requ
     request_dict_copy = copy.deepcopy(request_dict)
     request_dict_copy['body']['DestinationRegion'] = destination_region
     request_dict_copy['url'] = request_dict['url'].replace(
-        destination_region, source_region)
+        destination_region, source_region
+    )
     request_dict_copy['method'] = 'GET'
     request_dict_copy['headers'] = {}
     return request_signer.generate_presigned_url(
-        request_dict_copy, region_name=source_region,
-        operation_name=model.name)
+        request_dict_copy, region_name=source_region, operation_name=model.name
+    )
 
 
 def _get_presigned_url_source_and_destination_regions(request_signer, params):
@@ -447,9 +461,11 @@ def inject_presigned_url_ec2(params, req
     if 'PresignedUrl' in params['body']:
         return
     src, dest = _get_presigned_url_source_and_destination_regions(
-        request_signer, params['body'])
+        request_signer, params['body']
+    )
     url = _get_cross_region_presigned_url(
-        request_signer, params, model, src, dest)
+        request_signer, params, model, src, dest
+    )
     params['body']['PresignedUrl'] = url
     # EC2 Requires that the destination region be sent over the wire in
     # addition to the source region.
@@ -464,7 +480,8 @@ def inject_presigned_url_rds(params, req
         return
 
     src, dest = _get_presigned_url_source_and_destination_regions(
-        request_signer, params['body'])
+        request_signer, params['body']
+    )
 
     # Since SourceRegion isn't actually modeled for RDS, it needs to be
     # removed from the request params before we send the actual request.
@@ -474,7 +491,8 @@ def inject_presigned_url_rds(params, req
         return
 
     url = _get_cross_region_presigned_url(
-        request_signer, params, model, src, dest)
+        request_signer, params, model, src, dest
+    )
     params['body']['PreSignedUrl'] = url
 
 
@@ -496,11 +514,14 @@ def _decode_policy_types(parsed, shape):
     shape_name = 'policyDocumentType'
     if shape.type_name == 'structure':
         for member_name, member_shape in shape.members.items():
-            if member_shape.type_name == 'string' and \
-                    member_shape.name == shape_name and \
-                    member_name in parsed:
+            if (
+                member_shape.type_name == 'string'
+                and member_shape.name == shape_name
+                and member_name in parsed
+            ):
                 parsed[member_name] = decode_quoted_jsondoc(
-                    parsed[member_name])
+                    parsed[member_name]
+                )
             elif member_name in parsed:
                 _decode_policy_types(parsed[member_name], member_shape)
     if shape.type_name == 'list':
@@ -518,9 +539,7 @@ def parse_get_bucket_location(parsed, ht
     if http_response.raw is None:
         return
     response_body = http_response.content
-    parser = ETree.XMLParser(
-        target=ETree.TreeBuilder(),
-        encoding='utf-8')
+    parser = ETree.XMLParser(target=ETree.TreeBuilder(), encoding='utf-8')
     parser.feed(response_body)
     root = parser.close()
     region = root.text
@@ -532,14 +551,17 @@ def base64_encode_user_data(params, **kw
         if isinstance(params['UserData'], str):
             # Encode it to bytes if it is text.
             params['UserData'] = params['UserData'].encode('utf-8')
-        params['UserData'] = base64.b64encode(
-            params['UserData']).decode('utf-8')
+        params['UserData'] = base64.b64encode(params['UserData']).decode(
+            'utf-8'
+        )
 
 
 def document_base64_encoding(param):
-    description = ('**This value will be base64 encoded automatically. Do '
-                   'not base64 encode this value prior to performing the '
-                   'operation.**')
+    description = (
+        '**This value will be base64 encoded automatically. Do '
+        'not base64 encode this value prior to performing the '
+        'operation.**'
+    )
     append = AppendParamDocumentation(param, description)
     return append.append_documentation
 
@@ -566,14 +588,13 @@ def validate_ascii_metadata(params, **kw
         try:
             key.encode('ascii')
             value.encode('ascii')
-        except UnicodeEncodeError as e:
+        except UnicodeEncodeError:
             error_msg = (
                 'Non ascii characters found in S3 metadata '
-                'for key "%s", value: "%s".  \nS3 metadata can only '
-                'contain ASCII characters. ' % (key, value)
+                f'for key "{key}", value: "{value}".  \nS3 metadata can only '
+                'contain ASCII characters. '
             )
-            raise ParamValidationError(
-                report=error_msg)
+            raise ParamValidationError(report=error_msg)
 
 
 def fix_route53_ids(params, model, **kwargs):
@@ -587,8 +608,11 @@ def fix_route53_ids(params, model, **kwa
     if not input_shape or not hasattr(input_shape, 'members'):
         return
 
-    members = [name for (name, shape) in input_shape.members.items()
-               if shape.name in ['ResourceId', 'DelegationSetId', 'ChangeId']]
+    members = [
+        name
+        for (name, shape) in input_shape.members.items()
+        if shape.name in ['ResourceId', 'DelegationSetId', 'ChangeId']
+    ]
 
     for name in members:
         if name in params:
@@ -609,7 +633,8 @@ def inject_account_id(params, **kwargs):
 def add_glacier_version(model, params, **kwargs):
     request_dict = params
     request_dict['headers']['x-amz-glacier-version'] = model.metadata[
-        'apiVersion']
+        'apiVersion'
+    ]
 
 
 def add_accept_header(model, params, **kwargs):
@@ -643,7 +668,8 @@ def add_glacier_checksums(params, **kwar
     starting_position = body.tell()
     if 'x-amz-content-sha256' not in headers:
         headers['x-amz-content-sha256'] = utils.calculate_sha256(
-            body, as_hex=True)
+            body, as_hex=True
+        )
     body.seek(starting_position)
     if 'x-amz-sha256-tree-hash' not in headers:
         headers['x-amz-sha256-tree-hash'] = utils.calculate_tree_hash(body)
@@ -667,7 +693,9 @@ def document_glacier_tree_hash_checksum(
     return AppendParamDocumentation('checksum', doc).append_documentation
 
 
-def document_cloudformation_get_template_return_type(section, event_name, **kwargs):
+def document_cloudformation_get_template_return_type(
+    section, event_name, **kwargs
+):
     if 'response-params' in event_name:
         template_body_section = section.get_section('TemplateBody')
         type_section = template_body_section.get_section('param-type')
@@ -687,15 +715,16 @@ def switch_host_machinelearning(request,
 
 def check_openssl_supports_tls_version_1_2(**kwargs):
     import ssl
+
     try:
         openssl_version_tuple = ssl.OPENSSL_VERSION_INFO
         if openssl_version_tuple < (1, 0, 1):
             warnings.warn(
-                'Currently installed openssl version: %s does not '
+                f'Currently installed openssl version: {ssl.OPENSSL_VERSION} does not '
                 'support TLS 1.2, which is required for use of iot-data. '
                 'Please use python installed with openssl version 1.0.1 or '
-                'higher.' % (ssl.OPENSSL_VERSION),
-                UnsupportedTLSVersionWarning
+                'higher.',
+                UnsupportedTLSVersionWarning,
             )
     # We cannot check the openssl version on python2.6, so we should just
     # pass on this conveniency check.
@@ -733,7 +762,7 @@ def decode_list_object(parsed, context,
         top_level_keys=['Delimiter', 'Marker', 'NextMarker'],
         nested_keys=[('Contents', 'Key'), ('CommonPrefixes', 'Prefix')],
         parsed=parsed,
-        context=context
+        context=context,
     )
 
 
@@ -746,7 +775,7 @@ def decode_list_object_v2(parsed, contex
         top_level_keys=['Delimiter', 'Prefix', 'StartAfter'],
         nested_keys=[('Contents', 'Key'), ('CommonPrefixes', 'Prefix')],
         parsed=parsed,
-        context=context
+        context=context,
     )
 
 
@@ -768,19 +797,20 @@ def decode_list_object_versions(parsed,
             ('CommonPrefixes', 'Prefix'),
         ],
         parsed=parsed,
-        context=context
+        context=context,
     )
 
 
 def _decode_list_object(top_level_keys, nested_keys, parsed, context):
-    if parsed.get('EncodingType') == 'url' and \
-                    context.get('encoding_type_auto_set'):
+    if parsed.get('EncodingType') == 'url' and context.get(
+        'encoding_type_auto_set'
+    ):
         # URL decode top-level keys in the response if present.
         for key in top_level_keys:
             if key in parsed:
                 parsed[key] = unquote_str(parsed[key])
         # URL decode nested keys from the response if present.
-        for (top_key, child_key) in nested_keys:
+        for top_key, child_key in nested_keys:
             if top_key in parsed:
                 for member in parsed[top_key]:
                     member[child_key] = unquote_str(member[child_key])
@@ -803,7 +833,7 @@ def _add_parameter_aliases(handler_list)
     aliases = {
         'ec2.*.Filter': 'Filters',
         'cloudwatch-logs.CreateExportTask.from': 'fromTime',
-        'cloudsearch-domain.Search.return': 'returnFields'
+        'cloudsearch-domain.Search.return': 'returnFields',
     }
 
     for original, new_name in aliases.items():
@@ -817,16 +847,17 @@ def _add_parameter_aliases(handler_list)
         parameter_build_event_handler_tuple = (
             'before-parameter-build.' + event_portion,
             parameter_alias.alias_parameter_in_call,
-            REGISTER_FIRST
+            REGISTER_FIRST,
         )
         docs_event_handler_tuple = (
             'docs.*.' + event_portion + '.complete-section',
-            parameter_alias.alias_parameter_in_documentation)
+            parameter_alias.alias_parameter_in_documentation,
+        )
         handler_list.append(parameter_build_event_handler_tuple)
         handler_list.append(docs_event_handler_tuple)
 
 
-class ParameterAlias(object):
+class ParameterAlias:
     def __init__(self, original_name, alias_name):
         self._original_name = original_name
         self._alias_name = alias_name
@@ -841,7 +872,7 @@ class ParameterAlias(object):
                         raise AliasConflictParameterError(
                             original=self._original_name,
                             alias=self._alias_name,
-                            operation=model.name
+                            operation=model.name,
                         )
                     # Remove the alias parameter value and use the old name
                     # instead.
@@ -870,14 +901,15 @@ class ParameterAlias(object):
     def _replace_content(self, section):
         content = section.getvalue().decode('utf-8')
         updated_content = content.replace(
-            self._original_name, self._alias_name)
+            self._original_name, self._alias_name
+        )
         section.clear_text()
         section.write(updated_content)
 
 
-class ClientMethodAlias(object):
+class ClientMethodAlias:
     def __init__(self, actual_name):
-        """ Aliases a non-extant method to an existing method.
+        """Aliases a non-extant method to an existing method.
 
         :param actual_name: The name of the method that actually exists on
             the client.
@@ -889,9 +921,9 @@ class ClientMethodAlias(object):
 
 
 # TODO: Remove this class as it is no longer used
-class HeaderToHostHoister(object):
-    """Takes a header and moves it to the front of the hoststring.
-    """
+class HeaderToHostHoister:
+    """Takes a header and moves it to the front of the hoststring."""
+
     _VALID_HOSTNAME = re.compile(r'(?!-)[a-z\d-]{1,63}(?<!-)$', re.IGNORECASE)
 
     def __init__(self, header_name):
@@ -915,10 +947,12 @@ class HeaderToHostHoister(object):
     def _ensure_header_is_valid_host(self, header):
         match = self._VALID_HOSTNAME.match(header)
         if not match:
-            raise ParamValidationError(report=(
-                'Hostnames must contain only - and alphanumeric characters, '
-                'and between 1 and 63 characters long.'
-            ))
+            raise ParamValidationError(
+                report=(
+                    'Hostnames must contain only - and alphanumeric characters, '
+                    'and between 1 and 63 characters long.'
+                )
+            )
 
     def _prepend_to_host(self, url, prefix):
         url_components = urlsplit(url)
@@ -930,7 +964,7 @@ class HeaderToHostHoister(object):
             new_netloc,
             url_components.path,
             url_components.query,
-            ''
+            '',
         )
         new_url = urlunsplit(new_components)
         return new_url
@@ -954,6 +988,14 @@ def remove_qbusiness_chat(class_attribut
         del class_attributes['chat']
 
 
+def remove_bedrock_runtime_invoke_model_with_bidirectional_stream(
+    class_attributes, **kwargs
+):
+    """Operation requires h2 which is currently unsupported in Python"""
+    if 'invoke_model_with_bidirectional_stream' in class_attributes:
+        del class_attributes['invoke_model_with_bidirectional_stream']
+
+
 def remove_bucket_from_url_paths_from_model(params, model, context, **kwargs):
     """Strips leading `{Bucket}/` from any operations that have it.
 
@@ -1150,12 +1192,6 @@ def _update_status_code(response, **kwar
         http_response.status_code = parsed_status_code
 
 
-def add_query_compatibility_header(model, params, **kwargs):
-    if not model.service_model.is_query_compatible:
-        return
-    params['headers']['x-amzn-query-mode'] = 'true'
-
-
 def _handle_request_validation_mode_member(params, model, **kwargs):
     client_config = kwargs.get("context", {}).get("client_config")
     if client_config is None:
@@ -1164,13 +1200,109 @@ def _handle_request_validation_mode_memb
     http_checksum = model.http_checksum
     mode_member = http_checksum.get("requestValidationModeMember")
     if (
-            mode_member is not None
-            and response_checksum_validation == "when_supported"
+        mode_member is not None
+        and response_checksum_validation == "when_supported"
     ):
         params.setdefault(mode_member, "ENABLED")
 
 
-def _set_extra_headers_for_unsigned_request(request, signature_version, **kwargs):
+def _set_auth_scheme_preference_signer(context, signing_name, **kwargs):
+    """
+    Determines the appropriate signer to use based on the client configuration,
+    authentication scheme preferences, and the availability of a bearer token.
+    """
+    client_config = context.get('client_config')
+    if client_config is None:
+        return
+
+    signature_version = client_config.signature_version
+    auth_scheme_preference = client_config.auth_scheme_preference
+    auth_options = context.get('auth_options')
+
+    signature_version_set_in_code = (
+        isinstance(signature_version, ClientConfigString)
+        or signature_version is botocore.UNSIGNED
+    )
+    auth_preference_set_in_code = isinstance(
+        auth_scheme_preference, ClientConfigString
+    )
+    has_in_code_configuration = (
+        signature_version_set_in_code or auth_preference_set_in_code
+    )
+
+    resolved_signature_version = signature_version
+
+    # If signature version was not set in code, but an auth scheme preference
+    # is available, resolve it based on the preferred schemes and supported auth
+    # options for this service.
+    if (
+        not signature_version_set_in_code
+        and auth_scheme_preference
+        and auth_options
+    ):
+        preferred_schemes = auth_scheme_preference.split(',')
+        resolved = botocore.auth.resolve_auth_scheme_preference(
+            preferred_schemes, auth_options
+        )
+        resolved_signature_version = (
+            botocore.UNSIGNED if resolved == 'none' else resolved
+        )
+
+    # Prefer 'bearer' signature version if a bearer token is available, and it
+    # is allowed for this service. This can override earlier resolution if the
+    # config object didn't explicitly set a signature version.
+    if _should_prefer_bearer_auth(
+        has_in_code_configuration,
+        signing_name,
+        resolved_signature_version,
+        auth_options,
+    ):
+        register_feature_id('BEARER_SERVICE_ENV_VARS')
+        resolved_signature_version = 'bearer'
+
+    if resolved_signature_version == signature_version:
+        return None
+    return resolved_signature_version
+
+
+def _should_prefer_bearer_auth(
+    has_in_code_configuration,
+    signing_name,
+    resolved_signature_version,
+    auth_options,
+):
+    if signing_name not in get_bearer_auth_supported_services():
+        return False
+
+    if not auth_options or 'smithy.api#httpBearerAuth' not in auth_options:
+        return False
+
+    has_token = get_token_from_environment(signing_name) is not None
+
+    # Prefer 'bearer' if a bearer token is available, and either:
+    #   Bearer was already resolved, or
+    #   No auth-related values were explicitly set in code
+    return has_token and (
+        resolved_signature_version == 'bearer' or not has_in_code_configuration
+    )
+
+
+def get_bearer_auth_supported_services():
+    """
+    Returns a set of services that support bearer token authentication.
+    These values correspond to the service's `signingName` property as defined
+    in model.py, falling back to `endpointPrefix` if `signingName` is not set.
+
+    Warning: This is a private interface and is subject to abrupt breaking changes,
+    including removal, in any botocore release. It is not intended for external use,
+    and its usage outside of botocore is not advised or supported.
+    """
+    return {'bedrock'}
+
+
+def _set_extra_headers_for_unsigned_request(
+    request, signature_version, **kwargs
+):
     # When sending a checksum in the trailer of an unsigned chunked request, S3
     # requires us to set the "X-Amz-Content-SHA256" header to "STREAMING-UNSIGNED-PAYLOAD-TRAILER".
     checksum_context = request.context.get("checksum", {})
@@ -1187,20 +1319,33 @@ def _set_extra_headers_for_unsigned_requ
 
 BUILTIN_HANDLERS = [
     ('choose-service-name', handle_service_name_alias),
-    ('getattr.mturk.list_hi_ts_for_qualification_type',
-     ClientMethodAlias('list_hits_for_qualification_type')),
-    ('before-parameter-build.s3.UploadPart',
-     convert_body_to_file_like_object, REGISTER_LAST),
-    ('before-parameter-build.s3.PutObject',
-     convert_body_to_file_like_object, REGISTER_LAST),
+    (
+        'getattr.mturk.list_hi_ts_for_qualification_type',
+        ClientMethodAlias('list_hits_for_qualification_type'),
+    ),
+    (
+        'before-parameter-build.s3.UploadPart',
+        convert_body_to_file_like_object,
+        REGISTER_LAST,
+    ),
+    (
+        'before-parameter-build.s3.PutObject',
+        convert_body_to_file_like_object,
+        REGISTER_LAST,
+    ),
     ('creating-client-class', add_generate_presigned_url),
     ('creating-client-class.s3', add_generate_presigned_post),
-    ('creating-client-class.iot-data-plane',
-     check_openssl_supports_tls_version_1_2),
+    (
+        'creating-client-class.iot-data-plane',
+        check_openssl_supports_tls_version_1_2,
+    ),
     ('creating-client-class.lex-runtime-v2', remove_lex_v2_start_conversation),
     ('creating-client-class.qbusiness', remove_qbusiness_chat),
+    (
+        'creating-client-class.bedrock-runtime',
+        remove_bedrock_runtime_invoke_model_with_bidirectional_stream,
+    ),
     ('after-call.iam', json_decode_policies),
-
     ('after-call.ec2.GetConsoleOutput', decode_console_output),
     ('after-call.cloudformation.GetTemplate', json_decode_template_body),
     ('after-call.s3.GetBucketLocation', parse_get_bucket_location),
@@ -1210,28 +1355,32 @@ BUILTIN_HANDLERS = [
     ('before-parameter-build', _handle_request_validation_mode_member),
     ('before-parameter-build.s3', validate_bucket_name),
     ('before-parameter-build.s3', remove_bucket_from_url_paths_from_model),
-
-    ('before-parameter-build.s3.ListObjects',
-     set_list_objects_encoding_type_url),
-    ('before-parameter-build.s3.ListObjectsV2',
-     set_list_objects_encoding_type_url),
-    ('before-parameter-build.s3.ListObjectVersions',
-     set_list_objects_encoding_type_url),
-    ('before-parameter-build.s3.CopyObject',
-     handle_copy_source_param),
-    ('before-parameter-build.s3.UploadPartCopy',
-     handle_copy_source_param),
+    (
+        'before-parameter-build.s3.ListObjects',
+        set_list_objects_encoding_type_url,
+    ),
+    (
+        'before-parameter-build.s3.ListObjectsV2',
+        set_list_objects_encoding_type_url,
+    ),
+    (
+        'before-parameter-build.s3.ListObjectVersions',
+        set_list_objects_encoding_type_url,
+    ),
+    ('before-parameter-build.s3.CopyObject', handle_copy_source_param),
+    ('before-parameter-build.s3.UploadPartCopy', handle_copy_source_param),
     ('before-parameter-build.s3.CopyObject', validate_ascii_metadata),
     ('before-parameter-build.s3.PutObject', validate_ascii_metadata),
-    ('before-parameter-build.s3.CreateMultipartUpload',
-     validate_ascii_metadata),
+    (
+        'before-parameter-build.s3.CreateMultipartUpload',
+        validate_ascii_metadata,
+    ),
     ('before-parameter-build.s3-control', remove_accid_host_prefix_from_model),
     ('docs.*.s3.CopyObject.complete-section', document_copy_source_form),
     ('docs.*.s3.UploadPartCopy.complete-section', document_copy_source_form),
     ('docs.response-example.s3.*.complete-section', document_expires_shape),
     ('docs.response-params.s3.*.complete-section', document_expires_shape),
     ('before-endpoint-resolution.s3', customize_endpoint_resolver_builtins),
-    ('before-call', add_query_compatibility_header),
     ('before-call.s3', add_expect_header),
     ('before-call.glacier', add_glacier_version),
     ('before-call.api-gateway', add_accept_header),
@@ -1245,11 +1394,14 @@ BUILTIN_HANDLERS = [
     ('choose-signer.cognito-identity.GetId', disable_signing),
     ('choose-signer.cognito-identity.GetOpenIdToken', disable_signing),
     ('choose-signer.cognito-identity.UnlinkIdentity', disable_signing),
-    ('choose-signer.cognito-identity.GetCredentialsForIdentity',
-        disable_signing),
+    (
+        'choose-signer.cognito-identity.GetCredentialsForIdentity',
+        disable_signing,
+    ),
     ('choose-signer.sts.AssumeRoleWithSAML', disable_signing),
     ('choose-signer.sts.AssumeRoleWithWebIdentity', disable_signing),
     ('choose-signer', set_operation_specific_signer),
+    ('choose-signer', _set_auth_scheme_preference_signer),
     ('before-parameter-build.s3.HeadObject', sse_md5),
     ('before-parameter-build.s3.GetObject', sse_md5),
     ('before-parameter-build.s3.PutObject', sse_md5),
@@ -1261,8 +1413,10 @@ BUILTIN_HANDLERS = [
     ('before-parameter-build.s3.UploadPartCopy', copy_source_sse_md5),
     ('before-parameter-build.s3.CompleteMultipartUpload', sse_md5),
     ('before-parameter-build.ec2.RunInstances', base64_encode_user_data),
-    ('before-parameter-build.auto-scaling.CreateLaunchConfiguration',
-     base64_encode_user_data),
+    (
+        'before-parameter-build.auto-scaling.CreateLaunchConfiguration',
+        base64_encode_user_data,
+    ),
     ('before-parameter-build.route-53', fix_route53_ids),
     ('before-parameter-build.glacier', inject_account_id),
     ('before-sign.s3', remove_arn_from_signing_path),
@@ -1270,121 +1424,160 @@ BUILTIN_HANDLERS = [
     ('after-call.s3.ListObjects', decode_list_object),
     ('after-call.s3.ListObjectsV2', decode_list_object_v2),
     ('after-call.s3.ListObjectVersions', decode_list_object_versions),
-
     # Cloudsearchdomain search operation will be sent by HTTP POST
-    ('request-created.cloudsearch-domain.Search',
-     change_get_to_post),
+    ('request-created.cloudsearch-domain.Search', change_get_to_post),
     # Glacier documentation customizations
-    ('docs.*.glacier.*.complete-section',
-     AutoPopulatedParam('accountId', 'Note: this parameter is set to "-" by'
-                        'default if no value is not specified.')
-     .document_auto_populated_param),
-    ('docs.*.glacier.UploadArchive.complete-section',
-     AutoPopulatedParam('checksum').document_auto_populated_param),
-    ('docs.*.glacier.UploadMultipartPart.complete-section',
-     AutoPopulatedParam('checksum').document_auto_populated_param),
-    ('docs.request-params.glacier.CompleteMultipartUpload.complete-section',
-     document_glacier_tree_hash_checksum()),
+    (
+        'docs.*.glacier.*.complete-section',
+        AutoPopulatedParam(
+            'accountId',
+            'Note: this parameter is set to "-" by'
+            'default if no value is not specified.',
+        ).document_auto_populated_param,
+    ),
+    (
+        'docs.*.glacier.UploadArchive.complete-section',
+        AutoPopulatedParam('checksum').document_auto_populated_param,
+    ),
+    (
+        'docs.*.glacier.UploadMultipartPart.complete-section',
+        AutoPopulatedParam('checksum').document_auto_populated_param,
+    ),
+    (
+        'docs.request-params.glacier.CompleteMultipartUpload.complete-section',
+        document_glacier_tree_hash_checksum(),
+    ),
     # Cloudformation documentation customizations
-    ('docs.*.cloudformation.GetTemplate.complete-section',
-     document_cloudformation_get_template_return_type),
-
+    (
+        'docs.*.cloudformation.GetTemplate.complete-section',
+        document_cloudformation_get_template_return_type,
+    ),
     # UserData base64 encoding documentation customizations
-    ('docs.*.ec2.RunInstances.complete-section',
-     document_base64_encoding('UserData')),
-    ('docs.*.auto-scaling.CreateLaunchConfiguration.complete-section',
-     document_base64_encoding('UserData')),
-
+    (
+        'docs.*.ec2.RunInstances.complete-section',
+        document_base64_encoding('UserData'),
+    ),
+    (
+        'docs.*.auto-scaling.CreateLaunchConfiguration.complete-section',
+        document_base64_encoding('UserData'),
+    ),
     # EC2 CopySnapshot documentation customizations
-    ('docs.*.ec2.CopySnapshot.complete-section',
-     AutoPopulatedParam('PresignedUrl').document_auto_populated_param),
-    ('docs.*.ec2.CopySnapshot.complete-section',
-     AutoPopulatedParam('DestinationRegion').document_auto_populated_param),
+    (
+        'docs.*.ec2.CopySnapshot.complete-section',
+        AutoPopulatedParam('PresignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.ec2.CopySnapshot.complete-section',
+        AutoPopulatedParam('DestinationRegion').document_auto_populated_param,
+    ),
     # S3 SSE documentation modifications
-    ('docs.*.s3.*.complete-section',
-     AutoPopulatedParam('SSECustomerKeyMD5').document_auto_populated_param),
+    (
+        'docs.*.s3.*.complete-section',
+        AutoPopulatedParam('SSECustomerKeyMD5').document_auto_populated_param,
+    ),
     # S3 SSE Copy Source documentation modifications
-    ('docs.*.s3.*.complete-section',
-     AutoPopulatedParam(
-        'CopySourceSSECustomerKeyMD5').document_auto_populated_param),
+    (
+        'docs.*.s3.*.complete-section',
+        AutoPopulatedParam(
+            'CopySourceSSECustomerKeyMD5'
+        ).document_auto_populated_param,
+    ),
     # Add base64 information to Lambda
-    ('docs.*.lambda.UpdateFunctionCode.complete-section',
-     document_base64_encoding('ZipFile')),
+    (
+        'docs.*.lambda.UpdateFunctionCode.complete-section',
+        document_base64_encoding('ZipFile'),
+    ),
     # The following S3 operations cannot actually accept a ContentMD5
-    ('docs.*.s3.*.complete-section',
-     HideParamFromOperations(
-         's3', 'ContentMD5',
-         ['DeleteObjects', 'PutBucketAcl', 'PutBucketCors',
-          'PutBucketLifecycle', 'PutBucketLogging', 'PutBucketNotification',
-          'PutBucketPolicy', 'PutBucketReplication', 'PutBucketRequestPayment',
-          'PutBucketTagging', 'PutBucketVersioning', 'PutBucketWebsite',
-          'PutObjectAcl']).hide_param),
-
+    (
+        'docs.*.s3.*.complete-section',
+        HideParamFromOperations(
+            's3',
+            'ContentMD5',
+            [
+                'DeleteObjects',
+                'PutBucketAcl',
+                'PutBucketCors',
+                'PutBucketLifecycle',
+                'PutBucketLogging',
+                'PutBucketNotification',
+                'PutBucketPolicy',
+                'PutBucketReplication',
+                'PutBucketRequestPayment',
+                'PutBucketTagging',
+                'PutBucketVersioning',
+                'PutBucketWebsite',
+                'PutObjectAcl',
+            ],
+        ).hide_param,
+    ),
     #############
     # DSQL
     #############
     ('creating-client-class.dsql', add_dsql_generate_db_auth_token_methods),
-
     #############
     # RDS
     #############
     ('creating-client-class.rds', add_generate_db_auth_token),
-
-    ('before-call.rds.CopyDBClusterSnapshot',
-     inject_presigned_url_rds),
-    ('before-call.rds.CreateDBCluster',
-     inject_presigned_url_rds),
-    ('before-call.rds.CopyDBSnapshot',
-     inject_presigned_url_rds),
-    ('before-call.rds.CreateDBInstanceReadReplica',
-     inject_presigned_url_rds),
-    ('before-call.rds.StartDBInstanceAutomatedBackupsReplication',
-     inject_presigned_url_rds),
-
+    ('before-call.rds.CopyDBClusterSnapshot', inject_presigned_url_rds),
+    ('before-call.rds.CreateDBCluster', inject_presigned_url_rds),
+    ('before-call.rds.CopyDBSnapshot', inject_presigned_url_rds),
+    ('before-call.rds.CreateDBInstanceReadReplica', inject_presigned_url_rds),
+    (
+        'before-call.rds.StartDBInstanceAutomatedBackupsReplication',
+        inject_presigned_url_rds,
+    ),
     # RDS PresignedUrl documentation customizations
-    ('docs.*.rds.CopyDBClusterSnapshot.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.rds.CreateDBCluster.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.rds.CopyDBSnapshot.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.rds.CreateDBInstanceReadReplica.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.rds.StartDBInstanceAutomatedBackupsReplication.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-
+    (
+        'docs.*.rds.CopyDBClusterSnapshot.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.rds.CreateDBCluster.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.rds.CopyDBSnapshot.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.rds.CreateDBInstanceReadReplica.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.rds.StartDBInstanceAutomatedBackupsReplication.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
     #############
     # Neptune
     #############
-    ('before-call.neptune.CopyDBClusterSnapshot',
-     inject_presigned_url_rds),
-    ('before-call.neptune.CreateDBCluster',
-     inject_presigned_url_rds),
-
+    ('before-call.neptune.CopyDBClusterSnapshot', inject_presigned_url_rds),
+    ('before-call.neptune.CreateDBCluster', inject_presigned_url_rds),
     # Neptune PresignedUrl documentation customizations
-    ('docs.*.neptune.CopyDBClusterSnapshot.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.neptune.CreateDBCluster.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-
+    (
+        'docs.*.neptune.CopyDBClusterSnapshot.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.neptune.CreateDBCluster.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
     #############
     # DocDB
     #############
-    ('before-call.docdb.CopyDBClusterSnapshot',
-     inject_presigned_url_rds),
-    ('before-call.docdb.CreateDBCluster',
-     inject_presigned_url_rds),
-
+    ('before-call.docdb.CopyDBClusterSnapshot', inject_presigned_url_rds),
+    ('before-call.docdb.CreateDBCluster', inject_presigned_url_rds),
     # DocDB PresignedUrl documentation customizations
-    ('docs.*.docdb.CopyDBClusterSnapshot.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-    ('docs.*.docdb.CreateDBCluster.complete-section',
-     AutoPopulatedParam('PreSignedUrl').document_auto_populated_param),
-
+    (
+        'docs.*.docdb.CopyDBClusterSnapshot.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
+    (
+        'docs.*.docdb.CreateDBCluster.complete-section',
+        AutoPopulatedParam('PreSignedUrl').document_auto_populated_param,
+    ),
     ###########
     # SMS Voice
-     ##########
+    ##########
     ('before-call', inject_api_version_header_if_needed),
-
 ]
 _add_parameter_aliases(BUILTIN_HANDLERS)
diff -pruN 2.23.6-1/awscli/botocore/history.py 2.31.35-1/awscli/botocore/history.py
--- 2.23.6-1/awscli/botocore/history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/history.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,12 +16,12 @@ HISTORY_RECORDER = None
 logger = logging.getLogger(__name__)
 
 
-class BaseHistoryHandler(object):
+class BaseHistoryHandler:
     def emit(self, event_type, payload, source):
         raise NotImplementedError('emit()')
 
 
-class HistoryRecorder(object):
+class HistoryRecorder:
     def __init__(self):
         self._enabled = False
         self._handlers = []
@@ -43,8 +43,9 @@ class HistoryRecorder(object):
                 except Exception:
                     # Never let the process die because we had a failure in
                     # a record collection handler.
-                    logger.debug("Exception raised in %s.", handler,
-                                 exc_info=True)
+                    logger.debug(
+                        "Exception raised in %s.", handler, exc_info=True
+                    )
 
 
 def get_global_history_recorder():
diff -pruN 2.23.6-1/awscli/botocore/hooks.py 2.31.35-1/awscli/botocore/hooks.py
--- 2.23.6-1/awscli/botocore/hooks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/hooks.py	2025-11-12 19:17:29.000000000 +0000
@@ -26,7 +26,6 @@ _LAST = 2
 
 
 class NodeList(_NodeList):
-
     def __copy__(self):
         first_copy = copy.copy(self.first)
         middle_copy = copy.copy(self.middle)
@@ -63,7 +62,7 @@ def first_non_none_response(responses, d
     return default
 
 
-class BaseEventHooks(object):
+class BaseEventHooks:
     def emit(self, event_name, **kwargs):
         """Call all handlers subscribed to an event.
 
@@ -81,8 +80,9 @@ class BaseEventHooks(object):
         """
         return []
 
-    def register(self, event_name, handler, unique_id=None,
-                 unique_id_uses_count=False):
+    def register(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
         """Register an event handler for a given event.
 
         If a ``unique_id`` is given, the handler will not be registered
@@ -96,12 +96,17 @@ class BaseEventHooks(object):
         with ``register_last()``.
 
         """
-        self._verify_and_register(event_name, handler, unique_id,
-                                  register_method=self._register,
-                                  unique_id_uses_count=unique_id_uses_count)
-
-    def register_first(self, event_name, handler, unique_id=None,
-                       unique_id_uses_count=False):
+        self._verify_and_register(
+            event_name,
+            handler,
+            unique_id,
+            register_method=self._register,
+            unique_id_uses_count=unique_id_uses_count,
+        )
+
+    def register_first(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
         """Register an event handler to be called first for an event.
 
         All event handlers registered with ``register_first()`` will
@@ -109,30 +114,50 @@ class BaseEventHooks(object):
         ``register_last()``.
 
         """
-        self._verify_and_register(event_name, handler, unique_id,
-                                  register_method=self._register_first,
-                                  unique_id_uses_count=unique_id_uses_count)
-
-    def register_last(self, event_name, handler, unique_id=None,
-                      unique_id_uses_count=False):
+        self._verify_and_register(
+            event_name,
+            handler,
+            unique_id,
+            register_method=self._register_first,
+            unique_id_uses_count=unique_id_uses_count,
+        )
+
+    def register_last(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
         """Register an event handler to be called last for an event.
 
         All event handlers registered with ``register_last()`` will be called
         after handlers registered with ``register_first()`` and ``register()``.
 
         """
-        self._verify_and_register(event_name, handler, unique_id,
-                                  register_method=self._register_last,
-                                  unique_id_uses_count=unique_id_uses_count)
-
-    def _verify_and_register(self, event_name, handler, unique_id,
-                             register_method, unique_id_uses_count):
+        self._verify_and_register(
+            event_name,
+            handler,
+            unique_id,
+            register_method=self._register_last,
+            unique_id_uses_count=unique_id_uses_count,
+        )
+
+    def _verify_and_register(
+        self,
+        event_name,
+        handler,
+        unique_id,
+        register_method,
+        unique_id_uses_count,
+    ):
         self._verify_is_callable(handler)
         self._verify_accept_kwargs(handler)
         register_method(event_name, handler, unique_id, unique_id_uses_count)
 
-    def unregister(self, event_name, handler=None, unique_id=None,
-                   unique_id_uses_count=False):
+    def unregister(
+        self,
+        event_name,
+        handler=None,
+        unique_id=None,
+        unique_id_uses_count=False,
+    ):
         """Unregister an event handler for a given event.
 
         If no ``unique_id`` was given during registration, then the
@@ -144,7 +169,7 @@ class BaseEventHooks(object):
 
     def _verify_is_callable(self, func):
         if not callable(func):
-            raise ValueError("Event handler %s must be callable." % func)
+            raise ValueError(f"Event handler {func} must be callable.")
 
     def _verify_accept_kwargs(self, func):
         """Verifies a callable accepts kwargs
@@ -157,8 +182,10 @@ class BaseEventHooks(object):
         """
         try:
             if not accepts_kwargs(func):
-                raise ValueError("Event handler %s must accept keyword "
-                                 "arguments (**kwargs)" % func)
+                raise ValueError(
+                    f"Event handler {func} must accept keyword "
+                    "arguments (**kwargs)"
+                )
         except TypeError:
             return False
 
@@ -246,23 +273,38 @@ class HierarchicalEmitter(BaseEventHooks
         else:
             return (None, None)
 
-    def _register(self, event_name, handler, unique_id=None,
-                  unique_id_uses_count=False):
-        self._register_section(event_name, handler, unique_id,
-                               unique_id_uses_count, section=_MIDDLE)
-
-    def _register_first(self, event_name, handler, unique_id=None,
-                        unique_id_uses_count=False):
-        self._register_section(event_name, handler, unique_id,
-                               unique_id_uses_count, section=_FIRST)
-
-    def _register_last(self, event_name, handler, unique_id,
-                       unique_id_uses_count=False):
-        self._register_section(event_name, handler, unique_id,
-                               unique_id_uses_count, section=_LAST)
-
-    def _register_section(self, event_name, handler, unique_id,
-                          unique_id_uses_count, section):
+    def _register(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
+        self._register_section(
+            event_name,
+            handler,
+            unique_id,
+            unique_id_uses_count,
+            section=_MIDDLE,
+        )
+
+    def _register_first(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
+        self._register_section(
+            event_name,
+            handler,
+            unique_id,
+            unique_id_uses_count,
+            section=_FIRST,
+        )
+
+    def _register_last(
+        self, event_name, handler, unique_id, unique_id_uses_count=False
+    ):
+        self._register_section(
+            event_name, handler, unique_id, unique_id_uses_count, section=_LAST
+        )
+
+    def _register_section(
+        self, event_name, handler, unique_id, unique_id_uses_count, section
+    ):
         if unique_id is not None:
             if unique_id in self._unique_id_handlers:
                 # We've already registered a handler using this unique_id
@@ -271,26 +313,29 @@ class HierarchicalEmitter(BaseEventHooks
                 if unique_id_uses_count:
                     if not count:
                         raise ValueError(
-                            "Initial registration of  unique id %s was "
+                            f"Initial registration of  unique id {unique_id} was "
                             "specified to use a counter. Subsequent register "
                             "calls to unique id must specify use of a counter "
-                            "as well." % unique_id)
+                            "as well."
+                        )
                     else:
                         self._unique_id_handlers[unique_id]['count'] += 1
                 else:
                     if count:
                         raise ValueError(
-                            "Initial registration of unique id %s was "
+                            f"Initial registration of unique id {unique_id} was "
                             "specified to not use a counter. Subsequent "
                             "register calls to unique id must specify not to "
-                            "use a counter as well." % unique_id)
+                            "use a counter as well."
+                        )
                 return
             else:
                 # Note that the trie knows nothing about the unique
                 # id.  We track uniqueness in this class via the
                 # _unique_id_handlers.
-                self._handlers.append_item(event_name, handler,
-                                           section=section)
+                self._handlers.append_item(
+                    event_name, handler, section=section
+                )
                 unique_id_handler_item = {'handler': handler}
                 if unique_id_uses_count:
                     unique_id_handler_item['count'] = 1
@@ -301,8 +346,13 @@ class HierarchicalEmitter(BaseEventHooks
         # clear the cache.  This has the opportunity for smarter invalidations.
         self._lookup_cache = {}
 
-    def unregister(self, event_name, handler=None, unique_id=None,
-                   unique_id_uses_count=False):
+    def unregister(
+        self,
+        event_name,
+        handler=None,
+        unique_id=None,
+        unique_id_uses_count=False,
+    ):
         if unique_id is not None:
             try:
                 count = self._unique_id_handlers[unique_id].get('count', None)
@@ -313,21 +363,25 @@ class HierarchicalEmitter(BaseEventHooks
             if unique_id_uses_count:
                 if count is None:
                     raise ValueError(
-                        "Initial registration of unique id %s was specified to "
+                        f"Initial registration of unique id {unique_id} was specified to "
                         "use a counter. Subsequent unregister calls to unique "
-                        "id must specify use of a counter as well." % unique_id)
+                        "id must specify use of a counter as well."
+                    )
                 elif count == 1:
-                    handler = self._unique_id_handlers.pop(unique_id)['handler']
+                    handler = self._unique_id_handlers.pop(unique_id)[
+                        'handler'
+                    ]
                 else:
                     self._unique_id_handlers[unique_id]['count'] -= 1
                     return
             else:
                 if count:
                     raise ValueError(
-                        "Initial registration of unique id %s was specified "
+                        f"Initial registration of unique id {unique_id} was specified "
                         "to not use a counter. Subsequent unregister calls "
                         "to unique id must specify not to use a counter as "
-                        "well." % unique_id)
+                        "well."
+                    )
                 handler = self._unique_id_handlers.pop(unique_id)['handler']
         try:
             self._handlers.remove_item(event_name, handler)
@@ -344,7 +398,7 @@ class HierarchicalEmitter(BaseEventHooks
         return new_instance
 
 
-class _PrefixTrie(object):
+class _PrefixTrie:
     """Specialized prefix trie that handles wildcards.
 
     The prefixes in this case are based on dot separated
@@ -366,6 +420,7 @@ class _PrefixTrie(object):
     most specific to least specific.
 
     """
+
     def __init__(self):
         # Each dictionary can be though of as a node, where a node
         # has values associated with the node, and children is a link
@@ -425,8 +480,9 @@ class _PrefixTrie(object):
                 # will result in final_list = [3, 2, 1], which is
                 # why we reverse the lists.
                 node_list = current_node['values']
-                complete_order = (node_list.first + node_list.middle +
-                                  node_list.last)
+                complete_order = (
+                    node_list.first + node_list.middle + node_list.last
+                )
                 collected.extendleft(reversed(complete_order))
             if not index == key_parts_len:
                 children = current_node['children']
@@ -473,7 +529,8 @@ class _PrefixTrie(object):
                     del current_node['children'][key_parts[index]]
             else:
                 raise ValueError(
-                    "key is not in trie: %s" % '.'.join(key_parts))
+                    "key is not in trie: {}".format('.'.join(key_parts))
+                )
 
     def __copy__(self):
         # The fact that we're using a nested dict under the covers
diff -pruN 2.23.6-1/awscli/botocore/httpchecksum.py 2.31.35-1/awscli/botocore/httpchecksum.py
--- 2.23.6-1/awscli/botocore/httpchecksum.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/httpchecksum.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-""" The interfaces in this module are not intended for public use.
+"""The interfaces in this module are not intended for public use.
 
 This module defines interfaces for applying checksums to HTTP requests within
 the context of botocore. This involves both resolving the checksum to be used
 based on client configuration and environment, as well as application of the
 checksum to the request.
 """
+
 import base64
 import io
 import logging
@@ -29,6 +30,7 @@ from botocore.compat import urlparse
 from botocore.exceptions import AwsChunkedWrapperError, FlexibleChecksumError
 from botocore.model import StructureShape
 from botocore.response import StreamingBody
+from botocore.useragent import register_feature_id
 from botocore.utils import determine_content_length, has_checksum_header
 
 logger = logging.getLogger(__name__)
@@ -224,7 +226,7 @@ class StreamingChecksumBody(StreamingBod
         self._expected = expected
 
     def read(self, amt=None):
-        chunk = super(StreamingChecksumBody, self).read(amt=amt)
+        chunk = super().read(amt=amt)
         self._checksum.update(chunk)
         if amt is None or (not chunk and amt > 0):
             self._validate_checksum()
@@ -232,10 +234,7 @@ class StreamingChecksumBody(StreamingBod
 
     def _validate_checksum(self):
         if self._checksum.digest() != base64.b64decode(self._expected):
-            error_msg = (
-                "Expected checksum %s did not match calculated checksum: %s"
-                % (self._expected, self._checksum.b64digest(),)
-            )
+            error_msg = f"Expected checksum {self._expected} did not match calculated checksum: {self._checksum.b64digest()}"
             raise FlexibleChecksumError(error_msg=error_msg)
 
 
@@ -245,7 +244,10 @@ def resolve_checksum_context(request, op
 
 
 def resolve_request_checksum_algorithm(
-    request, operation_model, params, supported_algorithms=None,
+    request,
+    operation_model,
+    params,
+    supported_algorithms=None,
 ):
     # If the header is already set by the customer, skip calculation
     if has_checksum_header(request):
@@ -270,7 +272,7 @@ def resolve_request_checksum_algorithm(
         algorithm_name = params[algorithm_member].lower()
         if algorithm_name not in supported_algorithms:
             raise FlexibleChecksumError(
-                error_msg="Unsupported checksum algorithm: %s" % algorithm_name
+                error_msg=f"Unsupported checksum algorithm: {algorithm_name}"
             )
     elif request_checksum_required or (
         algorithm_member and request_checksum_calculation == "when_supported"
@@ -340,7 +342,7 @@ def apply_request_checksum(request):
         _apply_request_trailer_checksum(request)
     else:
         raise FlexibleChecksumError(
-            error_msg="Unknown checksum variant: %s" % algorithm["in"]
+            error_msg="Unknown checksum variant: {}".format(algorithm["in"])
         )
     if "request_algorithm_header" in checksum_context:
         request_algorithm_header = checksum_context["request_algorithm_header"]
@@ -359,6 +361,7 @@ def _apply_request_header_checksum(reque
     checksum_cls = _CHECKSUM_CLS.get(algorithm["algorithm"])
     digest = checksum_cls().handle(request["body"])
     request["headers"][location_name] = digest
+    _register_checksum_algorithm_feature_id(algorithm)
 
 
 def _apply_request_trailer_checksum(request):
@@ -382,6 +385,7 @@ def _apply_request_trailer_checksum(requ
     else:
         headers["Content-Encoding"] = "aws-chunked"
     headers["X-Amz-Trailer"] = location_name
+    _register_checksum_algorithm_feature_id(algorithm)
 
     content_length = determine_content_length(body)
     if content_length is not None:
@@ -389,14 +393,32 @@ def _apply_request_trailer_checksum(requ
         # services such as S3 may require the decoded content length
         headers["X-Amz-Decoded-Content-Length"] = str(content_length)
 
+        if "Content-Length" in headers:
+            del headers["Content-Length"]
+            logger.debug(
+                "Removing the Content-Length header since 'chunked' is specified for Transfer-Encoding."
+            )
+
     if isinstance(body, (bytes, bytearray)):
         body = io.BytesIO(body)
 
     request["body"] = AwsChunkedWrapper(
-        body, checksum_cls=checksum_cls, checksum_name=location_name,
+        body,
+        checksum_cls=checksum_cls,
+        checksum_name=location_name,
     )
 
 
+def _register_checksum_algorithm_feature_id(algorithm):
+    checksum_algorithm_name = algorithm["algorithm"].upper()
+    if checksum_algorithm_name == "CRC64NVME":
+        checksum_algorithm_name = "CRC64"
+    checksum_algorithm_name_feature_id = (
+        f"FLEXIBLE_CHECKSUMS_REQ_{checksum_algorithm_name}"
+    )
+    register_feature_id(checksum_algorithm_name_feature_id)
+
+
 def resolve_response_checksum_algorithms(
     request, operation_model, params, supported_algorithms=None
 ):
@@ -430,7 +452,7 @@ def handle_checksum_body(http_response,
         return
 
     for algorithm in algorithms:
-        header_name = "x-amz-checksum-%s" % algorithm
+        header_name = f"x-amz-checksum-{algorithm}"
         # If the header is not found, check the next algorithm
         if header_name not in headers:
             continue
@@ -464,7 +486,7 @@ def handle_checksum_body(http_response,
 
 def _handle_streaming_response(http_response, response, algorithm):
     checksum_cls = _CHECKSUM_CLS.get(algorithm)
-    header_name = "x-amz-checksum-%s" % algorithm
+    header_name = f"x-amz-checksum-{algorithm}"
     return StreamingChecksumBody(
         http_response.raw,
         response["headers"].get("content-length"),
@@ -475,16 +497,13 @@ def _handle_streaming_response(http_resp
 
 def _handle_bytes_response(http_response, response, algorithm):
     body = http_response.content
-    header_name = "x-amz-checksum-%s" % algorithm
+    header_name = f"x-amz-checksum-{algorithm}"
     checksum_cls = _CHECKSUM_CLS.get(algorithm)
     checksum = checksum_cls()
     checksum.update(body)
     expected = response["headers"][header_name]
     if checksum.digest() != base64.b64decode(expected):
-        error_msg = (
-            "Expected checksum %s did not match calculated checksum: %s"
-            % (expected, checksum.b64digest(),)
-        )
+        error_msg = f"Expected checksum {expected} did not match calculated checksum: {checksum.b64digest()}"
         raise FlexibleChecksumError(error_msg=error_msg)
     return body
 
diff -pruN 2.23.6-1/awscli/botocore/httpsession.py 2.31.35-1/awscli/botocore/httpsession.py
--- 2.23.6-1/awscli/botocore/httpsession.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/httpsession.py	2025-11-12 19:17:29.000000000 +0000
@@ -28,6 +28,8 @@ from urllib3.util.ssl_ import (
 )
 from urllib3.util.url import parse_url
 
+from concurrent.futures import CancelledError
+
 try:
     from urllib3.util.ssl_ import OP_NO_TICKET, PROTOCOL_TLS_CLIENT
 except ImportError:
@@ -497,6 +499,8 @@ class URLLib3Session:
             raise ConnectionClosedError(
                 error=e, request=request, endpoint_url=request.url
             )
+        except CancelledError:
+            raise
         except Exception as e:
             message = 'Exception received when sending urllib3 HTTP request'
             logger.debug(message, exc_info=True)
diff -pruN 2.23.6-1/awscli/botocore/loaders.py 2.31.35-1/awscli/botocore/loaders.py
--- 2.23.6-1/awscli/botocore/loaders.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/loaders.py	2025-11-12 19:17:29.000000000 +0000
@@ -101,6 +101,7 @@ information that doesn't quite fit in th
 for the sdk. For instance, additional operation parameters might be added here
 which don't represent the actual service api.
 """
+
 import logging
 import os
 
@@ -121,6 +122,7 @@ def instance_cache(func):
     ``self._cache`` dictionary.
 
     """
+
     def _wrapper(self, *args, **kwargs):
         key = (func.__name__,) + args
         for pair in sorted(kwargs.items()):
@@ -130,15 +132,17 @@ def instance_cache(func):
         data = func(self, *args, **kwargs)
         self._cache[key] = data
         return data
+
     return _wrapper
 
 
-class JSONFileLoader(object):
+class JSONFileLoader:
     """Loader JSON files.
 
     This class can load the default format of models, which is a JSON file.
 
     """
+
     def exists(self, file_path):
         """Checks if the file exists.
 
@@ -198,7 +202,7 @@ def create_loader(search_path_string=Non
     return Loader(extra_search_paths=paths)
 
 
-class Loader(object):
+class Loader:
     """Find and load data models.
 
     This class will handle searching for and loading data models.
@@ -207,17 +211,24 @@ class Loader(object):
     convenience method over ``load_data`` and ``determine_latest_version``.
 
     """
+
     FILE_LOADER_CLASS = JSONFileLoader
     # The included models in botocore/data/ that we ship with botocore.
     BUILTIN_DATA_PATH = os.path.join(BOTOCORE_ROOT, 'data')
     # For convenience we automatically add ~/.aws/models to the data path.
-    CUSTOMER_DATA_PATH = os.path.join(os.path.expanduser('~'),
-                                      '.aws', 'models')
+    CUSTOMER_DATA_PATH = os.path.join(
+        os.path.expanduser('~'), '.aws', 'models'
+    )
     BUILTIN_EXTRAS_TYPES = ['sdk']
 
-    def __init__(self, extra_search_paths=None, file_loader=None,
-                 cache=None, include_default_search_paths=True,
-                 include_default_extras=True):
+    def __init__(
+        self,
+        extra_search_paths=None,
+        file_loader=None,
+        cache=None,
+        include_default_search_paths=True,
+        include_default_extras=True,
+    ):
         self._cache = {}
         if file_loader is None:
             file_loader = self.FILE_LOADER_CLASS()
@@ -227,8 +238,9 @@ class Loader(object):
         else:
             self._search_paths = []
         if include_default_search_paths:
-            self._search_paths.extend([self.CUSTOMER_DATA_PATH,
-                                       self.BUILTIN_DATA_PATH])
+            self._search_paths.extend(
+                [self.CUSTOMER_DATA_PATH, self.BUILTIN_DATA_PATH]
+            )
 
         self._extras_types = []
         if include_default_extras:
@@ -271,15 +283,17 @@ class Loader(object):
             # by searching for the corresponding type_name in each
             # potential directory.
             possible_services = [
-                d for d in os.listdir(possible_path)
-                if os.path.isdir(os.path.join(possible_path, d))]
+                d
+                for d in os.listdir(possible_path)
+                if os.path.isdir(os.path.join(possible_path, d))
+            ]
             for service_name in possible_services:
                 full_dirname = os.path.join(possible_path, service_name)
                 api_versions = os.listdir(full_dirname)
                 for api_version in api_versions:
-                    full_load_path = os.path.join(full_dirname,
-                                                  api_version,
-                                                  type_name)
+                    full_load_path = os.path.join(
+                        full_dirname, api_version, type_name
+                    )
                     if self.file_loader.exists(full_load_path):
                         services.add(service_name)
                         break
@@ -324,9 +338,9 @@ class Loader(object):
 
         """
         known_api_versions = set()
-        for possible_path in self._potential_locations(service_name,
-                                                       must_exist=True,
-                                                       is_dir=True):
+        for possible_path in self._potential_locations(
+            service_name, must_exist=True, is_dir=True
+        ):
             for dirname in os.listdir(possible_path):
                 full_path = os.path.join(possible_path, dirname, type_name)
                 # Only add to the known_api_versions if the directory
@@ -374,11 +388,13 @@ class Loader(object):
         if service_name not in known_services:
             raise UnknownServiceError(
                 service_name=service_name,
-                known_service_names=', '.join(sorted(known_services)))
+                known_service_names=', '.join(sorted(known_services)),
+            )
 
         if api_version is None:
             api_version = self.determine_latest_version(
-                service_name, type_name)
+                service_name, type_name
+            )
 
         full_path = os.path.join(service_name, api_version, type_name)
         model = self.load_data(full_path)
@@ -392,7 +408,7 @@ class Loader(object):
     def _find_extras(self, service_name, type_name, api_version):
         """Creates an iterator over all the extras data."""
         for extras_type in self.extras_types:
-            extras_name = '%s.%s-extras' % (type_name, extras_type)
+            extras_name = f'{type_name}.{extras_type}-extras'
             full_path = os.path.join(service_name, api_version, extras_name)
 
             try:
@@ -438,8 +454,7 @@ class Loader(object):
         data, _ = self.load_data_with_path(name)
         return data
 
-    def _potential_locations(self, name=None, must_exist=False,
-                             is_dir=False):
+    def _potential_locations(self, name=None, must_exist=False, is_dir=False):
         # Will give an iterator over the full path of potential locations
         # according to the search path.
         for path in self.search_paths:
@@ -471,8 +486,9 @@ class Loader(object):
         return path.startswith(self.BUILTIN_DATA_PATH)
 
 
-class ExtrasProcessor(object):
+class ExtrasProcessor:
     """Processes data from extras files into service models."""
+
     def process(self, original_model, extra_models):
         """Processes data from a list of loaded extras files into a model
 
diff -pruN 2.23.6-1/awscli/botocore/model.py 2.31.35-1/awscli/botocore/model.py
--- 2.23.6-1/awscli/botocore/model.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/model.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """Abstractions to interact with service models."""
+
 from collections import defaultdict
 from typing import NamedTuple, Union
 
@@ -19,8 +20,14 @@ from botocore.compat import OrderedDict
 from botocore.exceptions import (
     MissingServiceIdError,
     UndefinedModelAttributeError,
+    UnsupportedServiceProtocolsError,
+)
+from botocore.utils import (
+    PRIORITY_ORDERED_SUPPORTED_PROTOCOLS,
+    CachedProperty,
+    hyphenize_service_id,
+    instance_cache,
 )
-from botocore.utils import CachedProperty, hyphenize_service_id, instance_cache
 
 NOT_SET = object()
 
@@ -46,21 +53,50 @@ class ServiceId(str):
         return hyphenize_service_id(self)
 
 
-class Shape(object):
+class Shape:
     """Object representing a shape from the service model."""
+
     # To simplify serialization logic, all shape params that are
     # related to serialization are moved from the top level hash into
     # a 'serialization' hash.  This list below contains the names of all
     # the attributes that should be moved.
-    SERIALIZED_ATTRS = ['locationName', 'queryName', 'flattened', 'location',
-                        'payload', 'streaming', 'timestampFormat',
-                        'xmlNamespace', 'resultWrapper', 'xmlAttribute',
-                        'eventstream', 'event', 'eventheader', 'eventpayload',
-                        'jsonvalue', 'timestampFormat', 'hostLabel']
-    METADATA_ATTRS = ['required', 'min', 'max', 'sensitive', 'enum',
-                      'idempotencyToken', 'error', 'exception',
-                      'endpointdiscoveryid', 'retryable', 'document', 'union',
-                      'contextParam', 'clientContextParams', 'requiresLength']
+    SERIALIZED_ATTRS = [
+        'locationName',
+        'queryName',
+        'flattened',
+        'location',
+        'payload',
+        'streaming',
+        'timestampFormat',
+        'xmlNamespace',
+        'resultWrapper',
+        'xmlAttribute',
+        'eventstream',
+        'event',
+        'eventheader',
+        'eventpayload',
+        'jsonvalue',
+        'timestampFormat',
+        'hostLabel',
+    ]
+    METADATA_ATTRS = [
+        'required',
+        'min',
+        'max',
+        'sensitive',
+        'enum',
+        'idempotencyToken',
+        'error',
+        'exception',
+        'endpointdiscoveryid',
+        'retryable',
+        'document',
+        'union',
+        'contextParam',
+        'clientContextParams',
+        'requiresLength',
+        'pattern',
+    ]
     MAP_TYPE = OrderedDict
 
     def __init__(self, shape_name, shape_model, shape_resolver=None):
@@ -174,8 +210,7 @@ class Shape(object):
         return self._shape_resolver.resolve_shape_ref(shape_ref)
 
     def __repr__(self):
-        return "<%s(%s)>" % (self.__class__.__name__,
-                             self.name)
+        return f"<{self.__class__.__name__}({self.name})>"
 
     @property
     def event_stream_name(self):
@@ -262,7 +297,7 @@ class ClientContextParameter(NamedTuple)
     documentation: str
 
 
-class ServiceModel(object):
+class ServiceModel:
     """
 
     :ivar service_description: The parsed service description dictionary.
@@ -294,14 +329,16 @@ class ServiceModel(object):
         # We want clients to be able to access metadata directly.
         self.metadata = service_description.get('metadata', {})
         self._shape_resolver = ShapeResolver(
-            service_description.get('shapes', {}))
+            service_description.get('shapes', {})
+        )
         self._signature_version = NOT_SET
         self._service_name = service_name
         self._instance_cache = {}
 
     def shape_for(self, shape_name, member_traits=None):
         return self._shape_resolver.get_shape_by_name(
-            shape_name, member_traits)
+            shape_name, member_traits
+        )
 
     def shape_for_error_code(self, error_code):
         return self._error_code_cache.get(error_code, None)
@@ -368,9 +405,7 @@ class ServiceModel(object):
         try:
             return ServiceId(self._get_metadata_property('serviceId'))
         except UndefinedModelAttributeError:
-            raise MissingServiceIdError(
-                service_name=self._service_name
-            )
+            raise MissingServiceIdError(service_name=self._service_name)
 
     @CachedProperty
     def signing_name(self):
@@ -393,6 +428,28 @@ class ServiceModel(object):
         return self._get_metadata_property('protocol')
 
     @CachedProperty
+    def protocols(self):
+        return self._get_metadata_property('protocols')
+
+    @CachedProperty
+    def resolved_protocol(self):
+        # We need to ensure `protocols` exists in the metadata before attempting to
+        # access it directly since referencing service_model.protocols directly will
+        # raise an UndefinedModelAttributeError if protocols is not defined
+        if self.metadata.get('protocols'):
+            for protocol in PRIORITY_ORDERED_SUPPORTED_PROTOCOLS:
+                if protocol in self.protocols:
+                    return protocol
+            raise UnsupportedServiceProtocolsError(
+                botocore_supported_protocols=PRIORITY_ORDERED_SUPPORTED_PROTOCOLS,
+                service_supported_protocols=self.protocols,
+                service=self.service_name,
+            )
+        # If a service does not have a `protocols` trait, fall back to the legacy
+        # `protocol` trait
+        return self.protocol
+
+    @CachedProperty
     def endpoint_prefix(self):
         return self._get_metadata_property('endpointPrefix')
 
@@ -407,8 +464,10 @@ class ServiceModel(object):
     def endpoint_discovery_required(self):
         for operation in self.operation_names:
             model = self.operation_model(operation)
-            if (model.endpoint_discovery is not None and
-                    model.endpoint_discovery.get('required')):
+            if (
+                model.endpoint_discovery is not None
+                and model.endpoint_discovery.get('required')
+            ):
                 return True
         return False
 
@@ -429,8 +488,8 @@ class ServiceModel(object):
             return self.metadata[name]
         except KeyError:
             raise UndefinedModelAttributeError(
-                '"%s" not defined in the metadata of the model: %s' %
-                (name, self))
+                f'"{name}" not defined in the metadata of the model: {self}'
+            )
 
     # Signature version is one of the rare properties
     # that can be modified so a CachedProperty is not used here.
@@ -451,11 +510,10 @@ class ServiceModel(object):
         return 'awsQueryCompatible' in self.metadata
 
     def __repr__(self):
-        return '%s(%s)' % (self.__class__.__name__, self.service_name)
+        return f'{self.__class__.__name__}({self.service_name})'
 
 
-
-class OperationModel(object):
+class OperationModel:
     def __init__(self, operation_model, service_model, name=None):
         """
 
@@ -543,7 +601,8 @@ class OperationModel(object):
             # input shape.
             return None
         return self._service_model.resolve_shape_ref(
-            self._operation_model['input'])
+            self._operation_model['input']
+        )
 
     @CachedProperty
     def output_shape(self):
@@ -553,7 +612,8 @@ class OperationModel(object):
             # operation has no expected output.
             return None
         return self._service_model.resolve_shape_ref(
-            self._operation_model['output'])
+            self._operation_model['output']
+        )
 
     @CachedProperty
     def idempotent_members(self):
@@ -561,9 +621,12 @@ class OperationModel(object):
         if not input_shape:
             return []
 
-        return [name for (name, shape) in input_shape.members.items()
-                if 'idempotencyToken' in shape.metadata and
-                shape.metadata['idempotencyToken']]
+        return [
+            name
+            for (name, shape) in input_shape.members.items()
+            if 'idempotencyToken' in shape.metadata
+            and shape.metadata['idempotencyToken']
+        ]
 
     @CachedProperty
     def static_context_parameters(self):
@@ -680,10 +743,10 @@ class OperationModel(object):
         return None
 
     def __repr__(self):
-        return '%s(name=%s)' % (self.__class__.__name__, self.name)
+        return f'{self.__class__.__name__}(name={self.name})'
 
 
-class ShapeResolver(object):
+class ShapeResolver:
     """Resolves shape references."""
 
     # Any type not in this mapping will default to the Shape class.
@@ -691,7 +754,7 @@ class ShapeResolver(object):
         'structure': StructureShape,
         'list': ListShape,
         'map': MapShape,
-        'string': StringShape
+        'string': StringShape,
     }
 
     def __init__(self, shape_map):
@@ -706,8 +769,9 @@ class ShapeResolver(object):
         try:
             shape_cls = self.SHAPE_CLASSES.get(shape_model['type'], Shape)
         except KeyError:
-            raise InvalidShapeError("Shape is missing required key 'type': %s"
-                                    % shape_model)
+            raise InvalidShapeError(
+                f"Shape is missing required key 'type': {shape_model}"
+            )
         if member_traits:
             shape_model = shape_model.copy()
             shape_model.update(member_traits)
@@ -731,23 +795,27 @@ class ShapeResolver(object):
                 shape_name = member_traits.pop('shape')
             except KeyError:
                 raise InvalidShapeReferenceError(
-                    "Invalid model, missing shape reference: %s" % shape_ref)
+                    f"Invalid model, missing shape reference: {shape_ref}"
+                )
             return self.get_shape_by_name(shape_name, member_traits)
 
 
-class UnresolvableShapeMap(object):
-    """A ShapeResolver that will throw ValueErrors when shapes are resolved.
-    """
+class UnresolvableShapeMap:
+    """A ShapeResolver that will throw ValueErrors when shapes are resolved."""
+
     def get_shape_by_name(self, shape_name, member_traits=None):
-        raise ValueError("Attempted to lookup shape '%s', but no shape "
-                         "map was provided.")
+        raise ValueError(
+            "Attempted to lookup shape '%s', but no shape " "map was provided."
+        )
 
     def resolve_shape_ref(self, shape_ref):
-        raise ValueError("Attempted to resolve shape '%s', but no shape "
-                         "map was provided.")
+        raise ValueError(
+            "Attempted to resolve shape '%s', but no shape "
+            "map was provided."
+        )
 
 
-class DenormalizedStructureBuilder(object):
+class DenormalizedStructureBuilder:
     """Build a StructureShape from a denormalized model.
 
     This is a convenience builder class that makes it easy to construct
@@ -783,6 +851,7 @@ class DenormalizedStructureBuilder(objec
                       matters, such as for documentation.
 
     """
+
     def __init__(self, name=None):
         self.members = OrderedDict()
         self._name_generator = ShapeNameGenerator()
@@ -815,9 +884,11 @@ class DenormalizedStructureBuilder(objec
         }
         self._build_model(denormalized, shapes, self.name)
         resolver = ShapeResolver(shape_map=shapes)
-        return StructureShape(shape_name=self.name,
-                              shape_model=shapes[self.name],
-                              shape_resolver=resolver)
+        return StructureShape(
+            shape_name=self.name,
+            shape_model=shapes[self.name],
+            shape_resolver=resolver,
+        )
 
     def _build_model(self, model, shapes, shape_name):
         if model['type'] == 'structure':
@@ -826,11 +897,22 @@ class DenormalizedStructureBuilder(objec
             shapes[shape_name] = self._build_list(model, shapes)
         elif model['type'] == 'map':
             shapes[shape_name] = self._build_map(model, shapes)
-        elif model['type'] in ['string', 'integer', 'boolean', 'blob', 'float',
-                               'timestamp', 'long', 'double', 'char']:
+        elif model['type'] in [
+            'string',
+            'integer',
+            'boolean',
+            'blob',
+            'float',
+            'timestamp',
+            'long',
+            'double',
+            'char',
+        ]:
             shapes[shape_name] = self._build_scalar(model)
         else:
-            raise InvalidShapeError("Unknown shape type: %s" % model['type'])
+            raise InvalidShapeError(
+                "Unknown shape type: {}".format(model['type'])
+            )
 
     def _build_structure(self, model, shapes):
         members = OrderedDict()
@@ -881,13 +963,14 @@ class DenormalizedStructureBuilder(objec
             return self._name_generator.new_shape_name(model['type'])
 
 
-class ShapeNameGenerator(object):
+class ShapeNameGenerator:
     """Generate unique shape names for a type.
 
     This class can be used in conjunction with the DenormalizedStructureBuilder
     to generate unique shape names for a given type.
 
     """
+
     def __init__(self):
         self._name_cache = defaultdict(int)
 
@@ -919,5 +1002,4 @@ class ShapeNameGenerator(object):
         """
         self._name_cache[type_name] += 1
         current_index = self._name_cache[type_name]
-        return '%sType%s' % (type_name.capitalize(),
-                             current_index)
+        return f'{type_name.capitalize()}Type{current_index}'
diff -pruN 2.23.6-1/awscli/botocore/monitoring.py 2.31.35-1/awscli/botocore/monitoring.py
--- 2.23.6-1/awscli/botocore/monitoring.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/monitoring.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,15 +24,17 @@ from botocore.exceptions import (
 )
 
 RETRYABLE_EXCEPTIONS = (
-	ConnectionError, ConnectionClosedError, ReadTimeoutError,
-	EndpointConnectionError
+    ConnectionError,
+    ConnectionClosedError,
+    ReadTimeoutError,
+    EndpointConnectionError,
 )
 
 
 logger = logging.getLogger(__name__)
 
 
-class Monitor(object):
+class Monitor:
     _EVENTS_TO_REGISTER = [
         'before-parameter-build',
         'request-created',
@@ -70,10 +72,13 @@ class Monitor(object):
         except Exception as e:
             logger.debug(
                 'Exception %s raised by client monitor in handling event %s',
-                e, event_name, exc_info=True)
+                e,
+                event_name,
+                exc_info=True,
+            )
 
 
-class MonitorEventAdapter(object):
+class MonitorEventAdapter:
     def __init__(self, time=time.time):
         """Adapts event emitter events to produce monitor events
 
@@ -113,21 +118,24 @@ class MonitorEventAdapter(object):
     def _handle_request_created(self, request, **kwargs):
         context = request.context
         new_attempt_event = context[
-            'current_api_call_event'].new_api_call_attempt(
-                timestamp=self._get_current_time())
+            'current_api_call_event'
+        ].new_api_call_attempt(timestamp=self._get_current_time())
         new_attempt_event.request_headers = request.headers
         new_attempt_event.url = request.url
         context['current_api_call_attempt_event'] = new_attempt_event
 
-    def _handle_response_received(self, parsed_response, context, exception,
-                                  **kwargs):
+    def _handle_response_received(
+        self, parsed_response, context, exception, **kwargs
+    ):
         attempt_event = context.pop('current_api_call_attempt_event')
         attempt_event.latency = self._get_latency(attempt_event)
         if parsed_response is not None:
             attempt_event.http_status_code = parsed_response[
-                'ResponseMetadata']['HTTPStatusCode']
+                'ResponseMetadata'
+            ]['HTTPStatusCode']
             attempt_event.response_headers = parsed_response[
-                'ResponseMetadata']['HTTPHeaders']
+                'ResponseMetadata'
+            ]['HTTPHeaders']
             attempt_event.parsed_error = parsed_response.get('Error')
         else:
             attempt_event.wire_exception = exception
@@ -135,7 +143,8 @@ class MonitorEventAdapter(object):
 
     def _handle_after_call(self, context, parsed, **kwargs):
         context['current_api_call_event'].retries_exceeded = parsed[
-            'ResponseMetadata'].get('MaxAttemptsReached', False)
+            'ResponseMetadata'
+        ].get('MaxAttemptsReached', False)
         return self._complete_api_call(context)
 
     def _handle_after_call_error(self, context, exception, **kwargs):
@@ -143,13 +152,13 @@ class MonitorEventAdapter(object):
         # was a retryable connection error, then the retries must have exceeded
         # for that exception as this event gets emitted **after** retries
         # happen.
-        context['current_api_call_event'].retries_exceeded = \
-            self._is_retryable_exception(exception)
+        context[
+            'current_api_call_event'
+        ].retries_exceeded = self._is_retryable_exception(exception)
         return self._complete_api_call(context)
 
     def _is_retryable_exception(self, exception):
-        return isinstance(
-            exception, RETRYABLE_EXCEPTIONS)
+        return isinstance(exception, RETRYABLE_EXCEPTIONS)
 
     def _complete_api_call(self, context):
         call_event = context.pop('current_api_call_event')
@@ -163,7 +172,7 @@ class MonitorEventAdapter(object):
         return int(self._time() * 1000)
 
 
-class BaseMonitorEvent(object):
+class BaseMonitorEvent:
     def __init__(self, service, operation, timestamp):
         """Base monitor event
 
@@ -183,7 +192,7 @@ class BaseMonitorEvent(object):
         self.timestamp = timestamp
 
     def __repr__(self):
-        return '%s(%r)' % (self.__class__.__name__, self.__dict__)
+        return f'{self.__class__.__name__}({self.__dict__!r})'
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
@@ -192,8 +201,15 @@ class BaseMonitorEvent(object):
 
 
 class APICallEvent(BaseMonitorEvent):
-    def __init__(self, service, operation, timestamp, latency=None,
-                 attempts=None, retries_exceeded=False):
+    def __init__(
+        self,
+        service,
+        operation,
+        timestamp,
+        latency=None,
+        attempts=None,
+        retries_exceeded=False,
+    ):
         """Monitor event for a single API call
 
         This event corresponds to a single client method call, which includes
@@ -221,8 +237,9 @@ class APICallEvent(BaseMonitorEvent):
         :param retries_exceeded: True if API call exceeded retries. False
             otherwise
         """
-        super(APICallEvent, self).__init__(
-            service=service, operation=operation, timestamp=timestamp)
+        super().__init__(
+            service=service, operation=operation, timestamp=timestamp
+        )
         self.latency = latency
         self.attempts = attempts
         if attempts is None:
@@ -237,19 +254,26 @@ class APICallEvent(BaseMonitorEvent):
             APICallAttemptEvent
         """
         attempt_event = APICallAttemptEvent(
-            service=self.service,
-            operation=self.operation,
-            timestamp=timestamp
+            service=self.service, operation=self.operation, timestamp=timestamp
         )
         self.attempts.append(attempt_event)
         return attempt_event
 
 
 class APICallAttemptEvent(BaseMonitorEvent):
-    def __init__(self, service, operation, timestamp,
-                 latency=None, url=None, http_status_code=None,
-                 request_headers=None, response_headers=None,
-                 parsed_error=None, wire_exception=None):
+    def __init__(
+        self,
+        service,
+        operation,
+        timestamp,
+        latency=None,
+        url=None,
+        http_status_code=None,
+        request_headers=None,
+        response_headers=None,
+        parsed_error=None,
+        wire_exception=None,
+    ):
         """Monitor event for a single API call attempt
 
         This event corresponds to a single HTTP request attempt in completing
@@ -294,7 +318,7 @@ class APICallAttemptEvent(BaseMonitorEve
         :param wire_exception: The exception raised in sending the HTTP
             request (i.e. ConnectionError)
         """
-        super(APICallAttemptEvent, self).__init__(
+        super().__init__(
             service=service, operation=operation, timestamp=timestamp
         )
         self.latency = latency
@@ -306,7 +330,7 @@ class APICallAttemptEvent(BaseMonitorEve
         self.wire_exception = wire_exception
 
 
-class CSMSerializer(object):
+class CSMSerializer:
     _MAX_CLIENT_ID_LENGTH = 255
     _MAX_EXCEPTION_CLASS_LENGTH = 128
     _MAX_ERROR_CODE_LENGTH = 128
@@ -323,9 +347,7 @@ class CSMSerializer(object):
             r'Credential=(?P<access_key>\w+)/\d+/'
             r'(?P<signing_region>[a-z0-9-]+)/'
         ),
-        's3': re.compile(
-            r'AWS (?P<access_key>\w+):'
-        )
+        's3': re.compile(r'AWS (?P<access_key>\w+):'),
     }
     _SERIALIZEABLE_EVENT_PROPERTIES = [
         'service',
@@ -355,9 +377,8 @@ class CSMSerializer(object):
     def _validate_client_id(self, csm_client_id):
         if len(csm_client_id) > self._MAX_CLIENT_ID_LENGTH:
             raise ValueError(
-                'The value provided for csm_client_id: %s exceeds the '
-                'maximum length of %s characters' % (
-                    csm_client_id, self._MAX_CLIENT_ID_LENGTH)
+                f'The value provided for csm_client_id: {csm_client_id} exceeds the '
+                f'maximum length of {self._MAX_CLIENT_ID_LENGTH} characters'
             )
 
     def serialize(self, event):
@@ -376,9 +397,9 @@ class CSMSerializer(object):
             value = getattr(event, attr, None)
             if value is not None:
                 getattr(self, '_serialize_' + attr)(
-                    value, event_dict, event_type=event_type)
-        return ensure_bytes(
-            json.dumps(event_dict, separators=(',', ':')))
+                    value, event_dict, event_type=event_type
+                )
+        return ensure_bytes(json.dumps(event_dict, separators=(',', ':')))
 
     def _get_base_event_dict(self, event):
         return {
@@ -408,15 +429,18 @@ class CSMSerializer(object):
             if region is not None:
                 event_dict['Region'] = region
             event_dict['UserAgent'] = self._get_user_agent(
-                last_attempt.request_headers)
+                last_attempt.request_headers
+            )
         if last_attempt.http_status_code is not None:
             event_dict['FinalHttpStatusCode'] = last_attempt.http_status_code
         if last_attempt.parsed_error is not None:
             self._serialize_parsed_error(
-                last_attempt.parsed_error, event_dict, 'ApiCall')
+                last_attempt.parsed_error, event_dict, 'ApiCall'
+            )
         if last_attempt.wire_exception is not None:
             self._serialize_wire_exception(
-                last_attempt.wire_exception, event_dict, 'ApiCall')
+                last_attempt.wire_exception, event_dict, 'ApiCall'
+            )
 
     def _serialize_latency(self, latency, event_dict, event_type):
         if event_type == 'ApiCall':
@@ -424,15 +448,17 @@ class CSMSerializer(object):
         elif event_type == 'ApiCallAttempt':
             event_dict['AttemptLatency'] = latency
 
-    def _serialize_retries_exceeded(self, retries_exceeded, event_dict,
-                                    **kwargs):
-        event_dict['MaxRetriesExceeded'] = (1 if retries_exceeded else 0)
+    def _serialize_retries_exceeded(
+        self, retries_exceeded, event_dict, **kwargs
+    ):
+        event_dict['MaxRetriesExceeded'] = 1 if retries_exceeded else 0
 
     def _serialize_url(self, url, event_dict, **kwargs):
         event_dict['Fqdn'] = urlparse(url).netloc
 
-    def _serialize_request_headers(self, request_headers, event_dict,
-                                   **kwargs):
+    def _serialize_request_headers(
+        self, request_headers, event_dict, **kwargs
+    ):
         event_dict['UserAgent'] = self._get_user_agent(request_headers)
         if self._is_signed(request_headers):
             event_dict['AccessKey'] = self._get_access_key(request_headers)
@@ -441,34 +467,42 @@ class CSMSerializer(object):
             event_dict['Region'] = region
         if 'X-Amz-Security-Token' in request_headers:
             event_dict['SessionToken'] = request_headers[
-                'X-Amz-Security-Token']
+                'X-Amz-Security-Token'
+            ]
 
-    def _serialize_http_status_code(self, http_status_code, event_dict,
-                                    **kwargs):
+    def _serialize_http_status_code(
+        self, http_status_code, event_dict, **kwargs
+    ):
         event_dict['HttpStatusCode'] = http_status_code
 
-    def _serialize_response_headers(self, response_headers, event_dict,
-                                    **kwargs):
+    def _serialize_response_headers(
+        self, response_headers, event_dict, **kwargs
+    ):
         for header, entry in self._RESPONSE_HEADERS_TO_EVENT_ENTRIES.items():
             if header in response_headers:
                 event_dict[entry] = response_headers[header]
 
-    def _serialize_parsed_error(self, parsed_error, event_dict, event_type,
-                                **kwargs):
+    def _serialize_parsed_error(
+        self, parsed_error, event_dict, event_type, **kwargs
+    ):
         field_prefix = 'Final' if event_type == 'ApiCall' else ''
         event_dict[field_prefix + 'AwsException'] = self._truncate(
-            parsed_error['Code'], self._MAX_ERROR_CODE_LENGTH)
+            parsed_error['Code'], self._MAX_ERROR_CODE_LENGTH
+        )
         event_dict[field_prefix + 'AwsExceptionMessage'] = self._truncate(
-            parsed_error['Message'], self._MAX_MESSAGE_LENGTH)
+            parsed_error['Message'], self._MAX_MESSAGE_LENGTH
+        )
 
-    def _serialize_wire_exception(self, wire_exception, event_dict, event_type,
-                                  **kwargs):
+    def _serialize_wire_exception(
+        self, wire_exception, event_dict, event_type, **kwargs
+    ):
         field_prefix = 'Final' if event_type == 'ApiCall' else ''
         event_dict[field_prefix + 'SdkException'] = self._truncate(
-            wire_exception.__class__.__name__,
-            self._MAX_EXCEPTION_CLASS_LENGTH)
+            wire_exception.__class__.__name__, self._MAX_EXCEPTION_CLASS_LENGTH
+        )
         event_dict[field_prefix + 'SdkExceptionMessage'] = self._truncate(
-            str(wire_exception), self._MAX_MESSAGE_LENGTH)
+            str(wire_exception), self._MAX_MESSAGE_LENGTH
+        )
 
     def _get_event_type(self, event):
         if isinstance(event, APICallEvent):
@@ -493,7 +527,7 @@ class CSMSerializer(object):
     def _get_user_agent(self, request_headers):
         return self._truncate(
             ensure_unicode(request_headers.get('User-Agent', '')),
-            self._MAX_USER_AGENT_LENGTH
+            self._MAX_USER_AGENT_LENGTH,
         )
 
     def _is_signed(self, request_headers):
@@ -512,13 +546,15 @@ class CSMSerializer(object):
     def _truncate(self, text, max_length):
         if len(text) > max_length:
             logger.debug(
-                'Truncating following value to maximum length of '
-                '%s: %s', text, max_length)
+                'Truncating following value to maximum length of ' '%s: %s',
+                text,
+                max_length,
+            )
             return text[:max_length]
         return text
 
 
-class SocketPublisher(object):
+class SocketPublisher:
     _MAX_MONITOR_EVENT_LENGTH = 8 * 1024
 
     def __init__(self, socket, host, port, serializer):
@@ -554,7 +590,8 @@ class SocketPublisher(object):
             logger.debug(
                 'Serialized event of size %s exceeds the maximum length '
                 'allowed: %s. Not sending event to socket.',
-                len(serialized_event), self._MAX_MONITOR_EVENT_LENGTH
+                len(serialized_event),
+                self._MAX_MONITOR_EVENT_LENGTH,
             )
             return
         self._socket.sendto(serialized_event, self._address)
diff -pruN 2.23.6-1/awscli/botocore/paginate.py 2.31.35-1/awscli/botocore/paginate.py
--- 2.23.6-1/awscli/botocore/paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,17 +14,20 @@
 import base64
 import json
 import logging
+from functools import partial
 from itertools import tee
 
 import jmespath
 from botocore.compat import zip
+from botocore.context import with_current_context
 from botocore.exceptions import PaginationError
+from botocore.useragent import register_feature_id
 from botocore.utils import merge_dicts, set_value_from_jmespath
 
 log = logging.getLogger(__name__)
 
 
-class TokenEncoder(object):
+class TokenEncoder:
     """Encodes dictionaries into opaque strings.
 
     This for the most part json dumps + base64 encoding, but also supports
@@ -102,7 +105,7 @@ class TokenEncoder(object):
         return base64.b64encode(data).decode('utf-8'), [path]
 
 
-class TokenDecoder(object):
+class TokenDecoder:
     """Decodes token strings back into dictionaries.
 
     This performs the inverse operation to the TokenEncoder, accepting
@@ -170,7 +173,7 @@ class TokenDecoder(object):
         container[path[-1]] = value
 
 
-class PaginatorModel(object):
+class PaginatorModel:
     def __init__(self, paginator_config):
         self._paginator_config = paginator_config['pagination']
 
@@ -178,15 +181,27 @@ class PaginatorModel(object):
         try:
             single_paginator_config = self._paginator_config[operation_name]
         except KeyError:
-            raise ValueError("Paginator for operation does not exist: %s"
-                             % operation_name)
+            raise ValueError(
+                f"Paginator for operation does not exist: {operation_name}"
+            )
         return single_paginator_config
 
 
-class PageIterator(object):
-    def __init__(self, method, input_token, output_token, more_results,
-                 result_keys, non_aggregate_keys, limit_key, max_items,
-                 starting_token, page_size, op_kwargs):
+class PageIterator:
+    def __init__(
+        self,
+        method,
+        input_token,
+        output_token,
+        more_results,
+        result_keys,
+        non_aggregate_keys,
+        limit_key,
+        max_items,
+        starting_token,
+        page_size,
+        op_kwargs,
+    ):
         self._method = method
         self._input_token = input_token
         self._output_token = output_token
@@ -215,7 +230,7 @@ class PageIterator(object):
     @resume_token.setter
     def resume_token(self, value):
         if not isinstance(value, dict):
-            raise ValueError("Bad starting token: %s" % value)
+            raise ValueError(f"Bad starting token: {value}")
 
         if 'boto_truncate_amount' in value:
             token_keys = sorted(self._input_token + ['boto_truncate_amount'])
@@ -226,7 +241,7 @@ class PageIterator(object):
         if token_keys == dict_keys:
             self._resume_token = self._token_encoder.encode(value)
         else:
-            raise ValueError("Bad starting token: %s" % value)
+            raise ValueError(f"Bad starting token: {value}")
 
     @property
     def non_aggregate_part(self):
@@ -257,7 +272,8 @@ class PageIterator(object):
                 # to index into the retrieved page.
                 if self._starting_token is not None:
                     starting_truncation = self._handle_first_request(
-                        parsed, primary_result_key, starting_truncation)
+                        parsed, primary_result_key, starting_truncation
+                    )
                 first_request = False
                 self._record_non_aggregate_key_values(parsed)
             else:
@@ -271,12 +287,17 @@ class PageIterator(object):
             num_current_response = len(current_response)
             truncate_amount = 0
             if self._max_items is not None:
-                truncate_amount = (total_items + num_current_response) \
-                                  - self._max_items
+                truncate_amount = (
+                    total_items + num_current_response
+                ) - self._max_items
             if truncate_amount > 0:
-                self._truncate_response(parsed, primary_result_key,
-                                        truncate_amount, starting_truncation,
-                                        next_token)
+                self._truncate_response(
+                    parsed,
+                    primary_result_key,
+                    truncate_amount,
+                    starting_truncation,
+                    next_token,
+                )
                 yield response
                 break
             else:
@@ -285,16 +306,22 @@ class PageIterator(object):
                 next_token = self._get_next_token(parsed)
                 if all(t is None for t in next_token.values()):
                     break
-                if self._max_items is not None and \
-                        total_items == self._max_items:
+                if (
+                    self._max_items is not None
+                    and total_items == self._max_items
+                ):
                     # We're on a page boundary so we can set the current
                     # next token to be the resume token.
                     self.resume_token = next_token
                     break
-                if previous_next_token is not None and \
-                        previous_next_token == next_token:
-                    message = ("The same next token was received "
-                               "twice: %s" % next_token)
+                if (
+                    previous_next_token is not None
+                    and previous_next_token == next_token
+                ):
+                    message = (
+                        "The same next token was received "
+                        f"twice: {next_token}"
+                    )
                     raise PaginationError(message=message)
                 self._inject_token_into_kwargs(current_kwargs, next_token)
                 previous_next_token = next_token
@@ -319,12 +346,12 @@ class PageIterator(object):
         for page in self:
             results = compiled.search(page)
             if isinstance(results, list):
-                for element in results:
-                    yield element
+                yield from results
             else:
                 # Yield result directly if it is not a list.
                 yield results
 
+    @with_current_context(partial(register_feature_id, 'PAGINATOR'))
     def _make_request(self, current_kwargs):
         return self._method(**current_kwargs)
 
@@ -335,9 +362,9 @@ class PageIterator(object):
         non_aggregate_keys = {}
         for expression in self._non_aggregate_key_exprs:
             result = expression.search(response)
-            set_value_from_jmespath(non_aggregate_keys,
-                                    expression.expression,
-                                    result)
+            set_value_from_jmespath(
+                non_aggregate_keys, expression.expression, result
+            )
         self._non_aggregate_part = non_aggregate_keys
 
     def _inject_starting_params(self, op_kwargs):
@@ -360,8 +387,9 @@ class PageIterator(object):
             elif name in op_kwargs:
                 del op_kwargs[name]
 
-    def _handle_first_request(self, parsed, primary_result_key,
-                              starting_truncation):
+    def _handle_first_request(
+        self, parsed, primary_result_key, starting_truncation
+    ):
         # If the payload is an array or string, we need to slice into it
         # and only return the truncated amount.
         starting_truncation = self._parse_starting_token()[1]
@@ -370,11 +398,7 @@ class PageIterator(object):
             data = all_data[starting_truncation:]
         else:
             data = None
-        set_value_from_jmespath(
-            parsed,
-            primary_result_key.expression,
-            data
-        )
+        set_value_from_jmespath(parsed, primary_result_key.expression, data)
         # We also need to truncate any secondary result keys
         # because they were not truncated in the previous last
         # response.
@@ -387,23 +411,32 @@ class PageIterator(object):
             elif isinstance(sample, str):
                 empty_value = ''
             elif isinstance(sample, (int, float)):
-                empty_value = 0
+                # Even though we may be resuming from a truncated page, we
+                # still start from the actual numeric secondary result. For
+                # DynamoDB's Count/ScannedCount, this will still show how many
+                # items the server evaluated, even if the client is truncating
+                # due to a StartingToken.
+                empty_value = sample
             else:
                 empty_value = None
             set_value_from_jmespath(parsed, token.expression, empty_value)
         return starting_truncation
 
-    def _truncate_response(self, parsed, primary_result_key, truncate_amount,
-                           starting_truncation, next_token):
+    def _truncate_response(
+        self,
+        parsed,
+        primary_result_key,
+        truncate_amount,
+        starting_truncation,
+        next_token,
+    ):
         original = primary_result_key.search(parsed)
         if original is None:
             original = []
         amount_to_keep = len(original) - truncate_amount
         truncated = original[:amount_to_keep]
         set_value_from_jmespath(
-            parsed,
-            primary_result_key.expression,
-            truncated
+            parsed, primary_result_key.expression, truncated
         )
         # The issue here is that even though we know how much we've truncated
         # we need to account for this globally including any starting
@@ -416,8 +449,9 @@ class PageIterator(object):
         # However, even though we only kept 1, this is post
         # left truncation so the next starting index should be 2, not 1
         # (left_truncation + amount_to_keep).
-        next_token['boto_truncate_amount'] = \
+        next_token['boto_truncate_amount'] = (
             amount_to_keep + starting_truncation
+        )
         self.resume_token = next_token
 
     def _get_next_token(self, parsed):
@@ -425,8 +459,9 @@ class PageIterator(object):
             if not self._more_results.search(parsed):
                 return {}
         next_tokens = {}
-        for output_token, input_key in \
-                zip(self._output_token, self._input_token):
+        for output_token, input_key in zip(
+            self._output_token, self._input_token
+        ):
             next_token = output_token.search(parsed)
             # We do not want to include any empty strings as actual tokens.
             # Treat them as None.
@@ -438,8 +473,10 @@ class PageIterator(object):
 
     def result_key_iters(self):
         teed_results = tee(self, len(self.result_keys))
-        return [ResultKeyIterator(i, result_key) for i, result_key
-                in zip(teed_results, self.result_keys)]
+        return [
+            ResultKeyIterator(i, result_key)
+            for i, result_key in zip(teed_results, self.result_keys)
+        ]
 
     def build_full_result(self):
         complete_result = {}
@@ -470,8 +507,10 @@ class PageIterator(object):
                 if existing_value is None:
                     # Set the initial result
                     set_value_from_jmespath(
-                        complete_result, result_expression.expression,
-                        result_value)
+                        complete_result,
+                        result_expression.expression,
+                        result_value,
+                    )
                     continue
                 # Now both result_value and existing_value contain something
                 if isinstance(result_value, list):
@@ -479,8 +518,10 @@ class PageIterator(object):
                 elif isinstance(result_value, (int, float, str)):
                     # Modify the existing result with the sum or concatenation
                     set_value_from_jmespath(
-                        complete_result, result_expression.expression,
-                        existing_value + result_value)
+                        complete_result,
+                        result_expression.expression,
+                        existing_value + result_value,
+                    )
         merge_dicts(complete_result, self.non_aggregate_part)
         if self.resume_token is not None:
             complete_result['NextToken'] = self.resume_token
@@ -507,8 +548,10 @@ class PageIterator(object):
         This handles parsing of old style starting tokens, and attempts to
         coerce them into the new style.
         """
-        log.debug("Attempting to fall back to old starting token parser. For "
-                  "token: %s" % self._starting_token)
+        log.debug(
+            "Attempting to fall back to old starting token parser. For "
+            f"token: {self._starting_token}"
+        )
         if self._starting_token is None:
             return None
 
@@ -538,16 +581,18 @@ class PageIterator(object):
         len_deprecated_token = len(deprecated_token)
         len_input_token = len(self._input_token)
         if len_deprecated_token > len_input_token:
-            raise ValueError("Bad starting token: %s" % self._starting_token)
+            raise ValueError(f"Bad starting token: {self._starting_token}")
         elif len_deprecated_token < len_input_token:
-            log.debug("Old format starting token does not contain all input "
-                      "tokens. Setting the rest, in order, as None.")
+            log.debug(
+                "Old format starting token does not contain all input "
+                "tokens. Setting the rest, in order, as None."
+            )
             for i in range(len_input_token - len_deprecated_token):
                 deprecated_token.append(None)
         return dict(zip(self._input_token, deprecated_token))
 
 
-class Paginator(object):
+class Paginator:
     PAGE_ITERATOR_CLS = PageIterator
 
     def __init__(self, method, pagination_config, model):
@@ -558,7 +603,8 @@ class Paginator(object):
         self._input_token = self._get_input_tokens(self._pagination_cfg)
         self._more_results = self._get_more_results_token(self._pagination_cfg)
         self._non_aggregate_keys = self._get_non_aggregate_keys(
-            self._pagination_cfg)
+            self._pagination_cfg
+        )
         self._result_keys = self._get_result_keys(self._pagination_cfg)
         self._limit_key = self._get_limit_key(self._pagination_cfg)
 
@@ -613,14 +659,18 @@ class Paginator(object):
         """
         page_params = self._extract_paging_params(kwargs)
         return self.PAGE_ITERATOR_CLS(
-            self._method, self._input_token,
-            self._output_token, self._more_results,
-            self._result_keys, self._non_aggregate_keys,
+            self._method,
+            self._input_token,
+            self._output_token,
+            self._more_results,
+            self._result_keys,
+            self._non_aggregate_keys,
             self._limit_key,
             page_params['MaxItems'],
             page_params['StartingToken'],
             page_params['PageSize'],
-            kwargs)
+            kwargs,
+        )
 
     def _extract_paging_params(self, kwargs):
         pagination_config = kwargs.pop('PaginationConfig', {})
@@ -632,7 +682,8 @@ class Paginator(object):
             if self._limit_key is None:
                 raise PaginationError(
                     message="PageSize parameter is not supported for the "
-                            "pagination interface for this operation.")
+                    "pagination interface for this operation."
+                )
             input_members = self._model.input_shape.members
             limit_key_shape = input_members.get(self._limit_key)
             if limit_key_shape.type_name == 'string':
@@ -647,7 +698,7 @@ class Paginator(object):
         }
 
 
-class ResultKeyIterator(object):
+class ResultKeyIterator:
     """Iterates over the results of paginated responses.
 
     Each iterator is associated with a single result key.
@@ -670,5 +721,4 @@ class ResultKeyIterator(object):
             results = self.result_key.search(page)
             if results is None:
                 results = []
-            for result in results:
-                yield result
+            yield from results
diff -pruN 2.23.6-1/awscli/botocore/parsers.py 2.31.35-1/awscli/botocore/parsers.py
--- 2.23.6-1/awscli/botocore/parsers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/parsers.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,30 +24,34 @@ showing the inheritance hierarchy of the
 ::
 
 
-
-                                 +--------------+
-                                 |ResponseParser|
-                                 +--------------+
-                                    ^    ^    ^
-               +--------------------+    |    +-------------------+
-               |                         |                        |
-    +----------+----------+       +------+-------+        +-------+------+
-    |BaseXMLResponseParser|       |BaseRestParser|        |BaseJSONParser|
-    +---------------------+       +--------------+        +--------------+
-              ^         ^          ^           ^           ^        ^
-              |         |          |           |           |        |
-              |         |          |           |           |        |
-              |        ++----------+-+       +-+-----------++       |
-              |        |RestXMLParser|       |RestJSONParser|       |
-        +-----+-----+  +-------------+       +--------------+  +----+-----+
-        |QueryParser|                                          |JSONParser|
-        +-----------+                                          +----------+
-
+                                +-------------------+
+                                |   ResponseParser  |
+                                +-------------------+
+                                ^    ^    ^   ^   ^
+                                |    |    |   |   |
+                                |    |    |   |   +--------------------------------------------+
+                                |    |    |   +-----------------------------+                  |
+                                |    |    |                                 |                  |
+           +--------------------+    |    +----------------+                |                  |
+           |                         |                     |                |                  |
++----------+----------+       +------+-------+     +-------+------+  +------+-------+   +------+--------+
+|BaseXMLResponseParser|       |BaseRestParser|     |BaseJSONParser|  |BaseCBORParser|   |BaseRpcV2Parser|
++---------------------+       +--------------+     +--------------+  +----------+---+   +-+-------------+
+          ^         ^          ^           ^        ^        ^                  ^         ^
+          |         |          |           |        |        |                  |         |
+          |         |          |           |        |        |                  |         |
+          |        ++----------+-+       +-+--------+---+    |              +---+---------+-+
+          |        |RestXMLParser|       |RestJSONParser|    |              |RpcV2CBORParser|
+    +-----+-----+  +-------------+       +--------------+    |              +---+---------+-+
+    |QueryParser|                                            |
+    +-----------+                                       +----+-----+
+                                                        |JSONParser|
+                                                        +----------+
 
 The diagram above shows that there is a base class, ``ResponseParser`` that
 contains logic that is similar amongst all the different protocols (``query``,
-``json``, ``rest-json``, ``rest-xml``).  Amongst the various services there
-is shared logic that can be grouped several ways:
+``json``, ``rest-json``, ``rest-xml``, ``smithy-rpc-v2-cbor``).  Amongst the various services
+there is shared logic that can be grouped several ways:
 
 * The ``query`` and ``rest-xml`` both have XML bodies that are parsed in the
   same way.
@@ -114,15 +118,21 @@ Each call to ``parse()`` returns a dict
     }
 
 """
+
 import base64
 import http.client
+import io
 import json
 import logging
+import os
 import re
+import struct
 
 from botocore.compat import ETree, XMLParseError
 from botocore.eventstream import EventStream, NoInitialResponseError
 from botocore.utils import (
+    CachedProperty,
+    ensure_boolean,
     is_json_value_header,
     lowercase_dict,
     merge_dicts,
@@ -134,7 +144,7 @@ LOG = logging.getLogger(__name__)
 DEFAULT_TIMESTAMP_PARSER = parse_timestamp
 
 
-class ResponseParserFactory(object):
+class ResponseParserFactory:
     def __init__(self):
         self._defaults = {}
 
@@ -176,6 +186,7 @@ def _text_content(func):
         else:
             text = node_or_string
         return func(self, shape, text)
+
     return _get_text_content
 
 
@@ -183,7 +194,7 @@ class ResponseParserError(Exception):
     pass
 
 
-class ResponseParser(object):
+class ResponseParser:
     """Base class for response parsing.
 
     This class represents the interface that all ResponseParsers for the
@@ -196,6 +207,7 @@ class ResponseParser(object):
     docstring for more info.
 
     """
+
     DEFAULT_ENCODING = 'utf-8'
     EVENT_STREAM_PARSER_CLS = None
 
@@ -209,7 +221,8 @@ class ResponseParser(object):
         self._event_stream_parser = None
         if self.EVENT_STREAM_PARSER_CLS is not None:
             self._event_stream_parser = self.EVENT_STREAM_PARSER_CLS(
-                timestamp_parser, blob_parser)
+                timestamp_parser, blob_parser
+            )
 
     def _default_blob_parser(self, value):
         # Blobs are always returned as bytes type (this matters on python3).
@@ -297,29 +310,35 @@ class ResponseParser(object):
     def _do_generic_error_parse(self, response):
         # There's not really much we can do when we get a generic
         # html response.
-        LOG.debug("Received a non protocol specific error response from the "
-                  "service, unable to populate error code and message.")
+        LOG.debug(
+            "Received a non protocol specific error response from the "
+            "service, unable to populate error code and message."
+        )
         return {
-            'Error': {'Code': str(response['status_code']),
-                      'Message': http.client.responses.get(
-                          response['status_code'], '')},
+            'Error': {
+                'Code': str(response['status_code']),
+                'Message': http.client.responses.get(
+                    response['status_code'], ''
+                ),
+            },
             'ResponseMetadata': {},
         }
 
     def _do_parse(self, response, shape):
-        raise NotImplementedError("%s._do_parse" % self.__class__.__name__)
+        raise NotImplementedError(f"{self.__class__.__name__}._do_parse")
 
     def _do_error_parse(self, response, shape):
-        raise NotImplementedError(
-            "%s._do_error_parse" % self.__class__.__name__)
+        raise NotImplementedError(f"{self.__class__.__name__}._do_error_parse")
 
     def _do_modeled_error_parse(self, response, shape, parsed):
         raise NotImplementedError(
-            "%s._do_modeled_error_parse" % self.__class__.__name__)
+            f"{self.__class__.__name__}._do_modeled_error_parse"
+        )
 
     def _parse_shape(self, shape, node):
-        handler = getattr(self, '_handle_%s' % shape.type_name,
-                          self._default_handle)
+        handler = getattr(
+            self, f'_handle_{shape.type_name}', self._default_handle
+        )
         return handler(shape, node)
 
     def _handle_list(self, shape, node):
@@ -346,6 +365,9 @@ class ResponseParser(object):
         if shape.is_tagged_union:
             cleaned_value = value.copy()
             cleaned_value.pop("__type", None)
+            cleaned_value = {
+                k: v for k, v in cleaned_value.items() if v is not None
+            }
             if len(cleaned_value) != 1:
                 error_msg = (
                     "Invalid service response: %s must have one and only "
@@ -353,7 +375,11 @@ class ResponseParser(object):
                 )
                 raise ResponseParserError(error_msg % shape.name)
             tag = self._get_first_key(cleaned_value)
-            if tag not in shape.members:
+            serialized_member_names = [
+                shape.members[member].serialization.get('name', member)
+                for member in shape.members
+            ]
+            if tag not in serialized_member_names:
                 msg = (
                     "Received a tagged union response with member "
                     "unknown to client: %s. Please upgrade SDK for full "
@@ -366,11 +392,25 @@ class ResponseParser(object):
     def _handle_unknown_tagged_union_member(self, tag):
         return {'SDK_UNKNOWN_MEMBER': {'name': tag}}
 
+    def _do_query_compatible_error_parse(self, code, headers, error):
+        """
+        Error response may contain an x-amzn-query-error header to translate
+        errors codes from former `query` services into other protocols. We use this
+        to do our lookup in the errorfactory for modeled errors.
+        """
+        query_error = headers['x-amzn-query-error']
+        query_error_components = query_error.split(';')
+
+        if len(query_error_components) == 2 and query_error_components[0]:
+            error['Error']['QueryErrorCode'] = code
+            error['Error']['Type'] = query_error_components[1]
+            return query_error_components[0]
+        return code
+
 
 class BaseXMLResponseParser(ResponseParser):
     def __init__(self, timestamp_parser=None, blob_parser=None):
-        super(BaseXMLResponseParser, self).__init__(timestamp_parser,
-                                                    blob_parser)
+        super().__init__(timestamp_parser, blob_parser)
         self._namespace_re = re.compile('{.*}')
 
     def _handle_map(self, shape, node):
@@ -390,7 +430,7 @@ class BaseXMLResponseParser(ResponsePars
                 elif tag_name == value_location_name:
                     val_name = self._parse_shape(value_shape, single_pair)
                 else:
-                    raise ResponseParserError("Unknown tag: %s" % tag_name)
+                    raise ResponseParserError(f"Unknown tag: {tag_name}")
             parsed[key_name] = val_name
         return parsed
 
@@ -405,7 +445,7 @@ class BaseXMLResponseParser(ResponsePars
         # it's flattened, and if it's not, then we make it a one element list.
         if shape.serialization.get('flattened') and not isinstance(node, list):
             node = [node]
-        return super(BaseXMLResponseParser, self)._handle_list(shape, node)
+        return super()._handle_list(shape, node)
 
     def _handle_structure(self, shape, node):
         parsed = {}
@@ -418,8 +458,10 @@ class BaseXMLResponseParser(ResponsePars
             return self._handle_unknown_tagged_union_member(tag)
         for member_name in members:
             member_shape = members[member_name]
-            if 'location' in member_shape.serialization or \
-               member_shape.serialization.get('eventheader'):
+            if (
+                'location' in member_shape.serialization
+                or member_shape.serialization.get('eventheader')
+            ):
                 # All members with locations have already been handled,
                 # so we don't need to parse these members.
                 continue
@@ -427,13 +469,15 @@ class BaseXMLResponseParser(ResponsePars
             member_node = xml_dict.get(xml_name)
             if member_node is not None:
                 parsed[member_name] = self._parse_shape(
-                    member_shape, member_node)
+                    member_shape, member_node
+                )
             elif member_shape.serialization.get('xmlAttribute'):
                 attribs = {}
                 location_name = member_shape.serialization['name']
                 for key, value in node.attrib.items():
                     new_key = self._namespace_re.sub(
-                        location_name.split(':')[0] + ':', key)
+                        location_name.split(':')[0] + ':', key
+                    )
                     attribs[new_key] = value
                 if location_name in attribs:
                     parsed[member_name] = attribs[location_name]
@@ -453,7 +497,8 @@ class BaseXMLResponseParser(ResponsePars
         # surrounding structure.
         if shape.type_name == 'list' and shape.serialization.get('flattened'):
             list_member_serialized_name = shape.member.serialization.get(
-                'name')
+                'name'
+            )
             if list_member_serialized_name is not None:
                 return list_member_serialized_name
         serialized_name = shape.serialization.get('name')
@@ -487,15 +532,15 @@ class BaseXMLResponseParser(ResponsePars
     def _parse_xml_string_to_dom(self, xml_string):
         try:
             parser = ETree.XMLParser(
-                target=ETree.TreeBuilder(),
-                encoding=self.DEFAULT_ENCODING)
+                target=ETree.TreeBuilder(), encoding=self.DEFAULT_ENCODING
+            )
             parser.feed(xml_string)
             root = parser.close()
         except XMLParseError as e:
             raise ResponseParserError(
-                "Unable to parse response (%s), "
-                "invalid XML received. Further retries may succeed:\n%s" %
-                (e, xml_string))
+                f"Unable to parse response ({e}), "
+                f"invalid XML received. Further retries may succeed:\n{xml_string}"
+            )
         return root
 
     def _replace_nodes(self, parsed):
@@ -540,7 +585,6 @@ class BaseXMLResponseParser(ResponsePars
 
 
 class QueryParser(BaseXMLResponseParser):
-
     def _do_error_parse(self, response, shape):
         xml_contents = response['body']
         root = self._parse_xml_string_to_dom(xml_contents)
@@ -571,8 +615,8 @@ class QueryParser(BaseXMLResponseParser)
             start = root
             if 'resultWrapper' in shape.serialization:
                 start = self._find_result_wrapped_shape(
-                    shape.serialization['resultWrapper'],
-                    root)
+                    shape.serialization['resultWrapper'], root
+                )
             parsed = self._parse_shape(shape, start)
         if inject_metadata:
             self._inject_response_metadata(root, parsed)
@@ -593,7 +637,6 @@ class QueryParser(BaseXMLResponseParser)
 
 
 class EC2QueryParser(QueryParser):
-
     def _inject_response_metadata(self, node, inject_into):
         mapping = self._build_name_to_xml_node(node)
         child_node = mapping.get('requestId')
@@ -613,7 +656,7 @@ class EC2QueryParser(QueryParser):
         # </Response>
         # This is different from QueryParser in that it's RequestID,
         # not RequestId
-        original = super(EC2QueryParser, self)._do_error_parse(response, shape)
+        original = super()._do_error_parse(response, shape)
         if 'RequestID' in original:
             original['ResponseMetadata'] = {
                 'RequestId': original.pop('RequestID')
@@ -630,7 +673,6 @@ class EC2QueryParser(QueryParser):
 
 
 class BaseJSONParser(ResponseParser):
-
     def _handle_structure(self, shape, value):
         final_parsed = {}
         if shape.is_document_type:
@@ -652,8 +694,8 @@ class BaseJSONParser(ResponseParser):
                 raw_value = value.get(json_name)
                 if raw_value is not None:
                     final_parsed[member_name] = self._parse_shape(
-                        member_shapes[member_name],
-                        raw_value)
+                        member_shapes[member_name], raw_value
+                    )
         return final_parsed
 
     def _handle_map(self, shape, value):
@@ -684,8 +726,9 @@ class BaseJSONParser(ResponseParser):
 
         # The error message can either come in the 'message' or 'Message' key
         # so we need to check for both.
-        error['Error']['Message'] = body.get('message',
-                                             body.get('Message', ''))
+        error['Error']['Message'] = body.get(
+            'message', body.get('Message', '')
+        )
         # if the message did not contain an error code
         # include the response status code
         response_code = response.get('status_code')
@@ -703,6 +746,8 @@ class BaseJSONParser(ResponseParser):
             # code has a couple forms as well:
             # * "com.aws.dynamodb.vAPI#ProvisionedThroughputExceededException"
             # * "ResourceNotFoundException"
+            if ':' in code:
+                code = code.split(':', 1)[0]
             if '#' in code:
                 code = code.rsplit('#', 1)[1]
             error['Error']['Code'] = code
@@ -711,8 +756,9 @@ class BaseJSONParser(ResponseParser):
 
     def _inject_response_metadata(self, parsed, headers):
         if 'x-amzn-requestid' in headers:
-            parsed.setdefault('ResponseMetadata', {})['RequestId'] = (
-                headers['x-amzn-requestid'])
+            parsed.setdefault('ResponseMetadata', {})['RequestId'] = headers[
+                'x-amzn-requestid'
+            ]
 
     def _parse_body_as_json(self, body_contents):
         if not body_contents:
@@ -724,21 +770,216 @@ class BaseJSONParser(ResponseParser):
         except ValueError:
             # if the body cannot be parsed, include
             # the literal string as the message
-            return { 'message': body }
+            return {'message': body}
 
 
-class BaseEventStreamParser(ResponseParser):
+class BaseCBORParser(ResponseParser):
+    INDEFINITE_ITEM_ADDITIONAL_INFO = 31
+    BREAK_CODE = 0xFF
+
+    @CachedProperty
+    def major_type_to_parsing_method_map(self):
+        return {
+            0: self._parse_unsigned_integer,
+            1: self._parse_negative_integer,
+            2: self._parse_byte_string,
+            3: self._parse_text_string,
+            4: self._parse_array,
+            5: self._parse_map,
+            6: self._parse_tag,
+            7: self._parse_simple_and_float,
+        }
+
+    def get_peekable_stream_from_bytes(self, bytes):
+        return io.BufferedReader(io.BytesIO(bytes))
+
+    def parse_data_item(self, stream):
+        # CBOR data is divided into "data items", and each data item starts
+        # with an initial byte that describes how the following bytes should be parsed
+        initial_byte = self._read_bytes_as_int(stream, 1)
+        # The highest order three bits of the initial byte describe the CBOR major type
+        major_type = initial_byte >> 5
+        # The lowest order 5 bits of the initial byte tells us more information about
+        # how the bytes should be parsed that will be used
+        additional_info = initial_byte & 0b00011111
+
+        if major_type in self.major_type_to_parsing_method_map:
+            method = self.major_type_to_parsing_method_map[major_type]
+            return method(stream, additional_info)
+        else:
+            raise ResponseParserError(
+                f"Unsupported inital byte found for data item- "
+                f"Major type:{major_type}, Additional info: "
+                f"{additional_info}"
+            )
+
+    # Major type 0 - unsigned integers
+    def _parse_unsigned_integer(self, stream, additional_info):
+        additional_info_to_num_bytes = {
+            24: 1,
+            25: 2,
+            26: 4,
+            27: 8,
+        }
+        # Values under 24 don't need a full byte to be stored; their values are
+        # instead stored as the "additional info" in the initial byte
+        if additional_info < 24:
+            return additional_info
+        elif additional_info in additional_info_to_num_bytes:
+            num_bytes = additional_info_to_num_bytes[additional_info]
+            return self._read_bytes_as_int(stream, num_bytes)
+        else:
+            raise ResponseParserError(
+                "Invalid CBOR integer returned from the service; unparsable "
+                f"additional info found for major type 0 or 1: {additional_info}"
+            )
+
+    # Major type 1 - negative integers
+    def _parse_negative_integer(self, stream, additional_info):
+        return -1 - self._parse_unsigned_integer(stream, additional_info)
+
+    # Major type 2 - byte string
+    def _parse_byte_string(self, stream, additional_info):
+        if additional_info != self.INDEFINITE_ITEM_ADDITIONAL_INFO:
+            length = self._parse_unsigned_integer(stream, additional_info)
+            return self._read_from_stream(stream, length)
+        else:
+            chunks = []
+            while True:
+                if self._handle_break_code(stream):
+                    break
+                initial_byte = self._read_bytes_as_int(stream, 1)
+                additional_info = initial_byte & 0b00011111
+                length = self._parse_unsigned_integer(stream, additional_info)
+                chunks.append(self._read_from_stream(stream, length))
+            return b''.join(chunks)
+
+    # Major type 3 - text string
+    def _parse_text_string(self, stream, additional_info):
+        return self._parse_byte_string(stream, additional_info).decode('utf-8')
+
+    # Major type 4 - lists
+    def _parse_array(self, stream, additional_info):
+        if additional_info != self.INDEFINITE_ITEM_ADDITIONAL_INFO:
+            length = self._parse_unsigned_integer(stream, additional_info)
+            return [self.parse_data_item(stream) for _ in range(length)]
+        else:
+            items = []
+            while not self._handle_break_code(stream):
+                items.append(self.parse_data_item(stream))
+            return items
+
+    # Major type 5 - maps
+    def _parse_map(self, stream, additional_info):
+        items = {}
+        if additional_info != self.INDEFINITE_ITEM_ADDITIONAL_INFO:
+            length = self._parse_unsigned_integer(stream, additional_info)
+            for _ in range(length):
+                self._parse_key_value_pair(stream, items)
+            return items
+
+        else:
+            while not self._handle_break_code(stream):
+                self._parse_key_value_pair(stream, items)
+            return items
+
+    def _parse_key_value_pair(self, stream, items):
+        key = self.parse_data_item(stream)
+        value = self.parse_data_item(stream)
+        if value is not None:
+            items[key] = value
+
+    # Major type 6 is tags.  The only tag we currently support is tag 1 for unix
+    # timestamps
+    def _parse_tag(self, stream, additional_info):
+        tag = self._parse_unsigned_integer(stream, additional_info)
+        value = self.parse_data_item(stream)
+        if tag == 1:  # Epoch-based date/time in milliseconds
+            return self._parse_datetime(value)
+        else:
+            raise ResponseParserError(
+                f"Found CBOR tag not supported by botocore: {tag}"
+            )
+
+    def _parse_datetime(self, value):
+        if isinstance(value, (int, float)):
+            return self._timestamp_parser(value)
+        else:
+            raise ResponseParserError(
+                f"Unable to parse datetime value: {value}"
+            )
+
+    # Major type 7 includes floats and "simple" types.  Supported simple types are
+    # currently boolean values, CBOR's null, and CBOR's undefined type.  All other
+    # values are either floats or invalid.
+    def _parse_simple_and_float(self, stream, additional_info):
+        # For major type 7, values 20-23 correspond to CBOR "simple" values
+        additional_info_simple_values = {
+            20: False,  # CBOR false
+            21: True,  # CBOR true
+            22: None,  # CBOR null
+            23: None,  # CBOR undefined
+        }
+        # First we check if the additional info corresponds to a supported simple value
+        if additional_info in additional_info_simple_values:
+            return additional_info_simple_values[additional_info]
+
+        # If it's not a simple value, we need to parse it into the correct format and
+        # number fo bytes
+        float_formats = {
+            25: ('>e', 2),
+            26: ('>f', 4),
+            27: ('>d', 8),
+        }
+
+        if additional_info in float_formats:
+            float_format, num_bytes = float_formats[additional_info]
+            return struct.unpack(
+                float_format, self._read_from_stream(stream, num_bytes)
+            )[0]
+        raise ResponseParserError(
+            f"Invalid additional info found for major type 7: {additional_info}.  "
+            f"This indicates an unsupported simple type or an indefinite float value"
+        )
+
+    # This helper method is intended for use when parsing indefinite length items.
+    # It does nothing if the next byte is not the break code.  If the next byte is
+    # the break code, it advances past that byte and returns True so the calling
+    # method knows to stop parsing that data item.
+    def _handle_break_code(self, stream):
+        if int.from_bytes(stream.peek(1)[:1], 'big') == self.BREAK_CODE:
+            stream.seek(1, os.SEEK_CUR)
+            return True
+
+    def _read_bytes_as_int(self, stream, num_bytes):
+        byte = self._read_from_stream(stream, num_bytes)
+        return int.from_bytes(byte, 'big')
+
+    def _read_from_stream(self, stream, num_bytes):
+        value = stream.read(num_bytes)
+        if len(value) != num_bytes:
+            raise ResponseParserError(
+                "End of stream reached; this indicates a "
+                "malformed CBOR response from the server or an "
+                "issue in botocore"
+            )
+        return value
+
 
+class BaseEventStreamParser(ResponseParser):
     def _do_parse(self, response, shape):
         final_parsed = {}
         if shape.serialization.get('eventstream'):
             event_type = response['headers'].get(':event-type')
             event_shape = shape.members.get(event_type)
             if event_shape:
-                final_parsed[event_type] = self._do_parse(response, event_shape)
+                final_parsed[event_type] = self._do_parse(
+                    response, event_shape
+                )
         else:
-            self._parse_non_payload_attrs(response, shape,
-                                          shape.members, final_parsed)
+            self._parse_non_payload_attrs(
+                response, shape, shape.members, final_parsed
+            )
             self._parse_payload(response, shape, shape.members, final_parsed)
         return final_parsed
 
@@ -751,7 +992,7 @@ class BaseEventStreamParser(ResponsePars
             error = {
                 'Error': {
                     'Code': exception_type,
-                    'Message': body.get('Message', body.get('message', ''))
+                    'Message': body.get('Message', body.get('message', '')),
                 }
             }
         else:
@@ -775,7 +1016,9 @@ class BaseEventStreamParser(ResponsePars
                         parsed_body = body.decode(self.DEFAULT_ENCODING)
                     else:
                         raw_parse = self._initial_body_parse(body)
-                        parsed_body = self._parse_shape(member_shape, raw_parse)
+                        parsed_body = self._parse_shape(
+                            member_shape, raw_parse
+                        )
                     final_parsed[name] = parsed_body
                     return
             # If we didn't find an explicit payload, use the current shape
@@ -783,8 +1026,9 @@ class BaseEventStreamParser(ResponsePars
             body_parsed = self._parse_shape(shape, original_parsed)
             final_parsed.update(body_parsed)
 
-    def _parse_non_payload_attrs(self, response, shape,
-                                 member_shapes, final_parsed):
+    def _parse_non_payload_attrs(
+        self, response, shape, member_shapes, final_parsed
+    ):
         headers = response['headers']
         for name in member_shapes:
             member_shape = member_shapes[name]
@@ -799,31 +1043,38 @@ class BaseEventStreamParser(ResponsePars
 
     def _initial_body_parse(self, body_contents):
         # This method should do the initial xml/json parsing of the
-        # body.  We we still need to walk the parsed body in order
+        # body.  We still need to walk the parsed body in order
         # to convert types, but this method will do the first round
         # of parsing.
         raise NotImplementedError("_initial_body_parse")
 
 
 class EventStreamJSONParser(BaseEventStreamParser, BaseJSONParser):
-
     def _initial_body_parse(self, body_contents):
         return self._parse_body_as_json(body_contents)
 
 
 class EventStreamXMLParser(BaseEventStreamParser, BaseXMLResponseParser):
-
     def _initial_body_parse(self, xml_string):
         if not xml_string:
             return ETree.Element('')
         return self._parse_xml_string_to_dom(xml_string)
 
 
-class JSONParser(BaseJSONParser):
+class EventStreamCBORParser(BaseEventStreamParser, BaseCBORParser):
+    def _initial_body_parse(self, body_contents):
+        if body_contents == b'':
+            return {}
+        return self.parse_data_item(
+            self.get_peekable_stream_from_bytes(body_contents)
+        )
 
+
+class JSONParser(BaseJSONParser):
     EVENT_STREAM_PARSER_CLS = EventStreamJSONParser
 
     """Response parser for the "json" protocol."""
+
     def _do_parse(self, response, shape):
         parsed = {}
         if shape is not None:
@@ -859,11 +1110,11 @@ class JSONParser(BaseJSONParser):
 
 
 class BaseRestParser(ResponseParser):
-
     def _do_parse(self, response, shape):
         final_parsed = {}
         final_parsed['ResponseMetadata'] = self._populate_response_metadata(
-            response)
+            response
+        )
         self._add_modeled_parse(response, shape, final_parsed)
         return final_parsed
 
@@ -871,8 +1122,9 @@ class BaseRestParser(ResponseParser):
         if shape is None:
             return final_parsed
         member_shapes = shape.members
-        self._parse_non_payload_attrs(response, shape,
-                                      member_shapes, final_parsed)
+        self._parse_non_payload_attrs(
+            response, shape, member_shapes, final_parsed
+        )
         self._parse_payload(response, shape, member_shapes, final_parsed)
 
     def _do_modeled_error_parse(self, response, shape):
@@ -911,14 +1163,16 @@ class BaseRestParser(ResponseParser):
             else:
                 original_parsed = self._initial_body_parse(response['body'])
                 final_parsed[payload_member_name] = self._parse_shape(
-                    body_shape, original_parsed)
+                    body_shape, original_parsed
+                )
         else:
             original_parsed = self._initial_body_parse(response['body'])
             body_parsed = self._parse_shape(shape, original_parsed)
             final_parsed.update(body_parsed)
 
-    def _parse_non_payload_attrs(self, response, shape,
-                                 member_shapes, final_parsed):
+    def _parse_non_payload_attrs(
+        self, response, shape, member_shapes, final_parsed
+    ):
         headers = response['headers']
         for name in member_shapes:
             member_shape = member_shapes[name]
@@ -927,15 +1181,18 @@ class BaseRestParser(ResponseParser):
                 continue
             elif location == 'statusCode':
                 final_parsed[name] = self._parse_shape(
-                    member_shape, response['status_code'])
+                    member_shape, response['status_code']
+                )
             elif location == 'headers':
-                final_parsed[name] = self._parse_header_map(member_shape,
-                                                            headers)
+                final_parsed[name] = self._parse_header_map(
+                    member_shape, headers
+                )
             elif location == 'header':
                 header_name = member_shape.serialization.get('name', name)
                 if header_name in headers:
                     final_parsed[name] = self._parse_shape(
-                        member_shape, headers[header_name])
+                        member_shape, headers[header_name]
+                    )
 
     def _parse_header_map(self, shape, headers):
         # Note that headers are case insensitive, so we .lower()
@@ -946,13 +1203,13 @@ class BaseRestParser(ResponseParser):
             if header_name.lower().startswith(prefix):
                 # The key name inserted into the parsed hash
                 # strips off the prefix.
-                name = header_name[len(prefix):]
+                name = header_name[len(prefix) :]
                 parsed[name] = headers[header_name]
         return parsed
 
     def _initial_body_parse(self, body_contents):
         # This method should do the initial xml/json parsing of the
-        # body.  We we still need to walk the parsed body in order
+        # body.  We still need to walk the parsed body in order
         # to convert types, but this method will do the first round
         # of parsing.
         raise NotImplementedError("_initial_body_parse")
@@ -969,18 +1226,88 @@ class BaseRestParser(ResponseParser):
         if location == 'header' and not isinstance(node, list):
             # List in headers may be a comma separated string as per RFC7230
             node = [e.strip() for e in node.split(',')]
-        return super(BaseRestParser, self)._handle_list(shape, node)
+        return super()._handle_list(shape, node)
 
 
-class RestJSONParser(BaseRestParser, BaseJSONParser):
+class BaseRpcV2Parser(ResponseParser):
+    def _do_parse(self, response, shape):
+        parsed = {}
+        if shape is not None:
+            event_stream_name = shape.event_stream_name
+            if event_stream_name:
+                parsed = self._handle_event_stream(
+                    response, shape, event_stream_name
+                )
+            else:
+                parsed = {}
+                self._parse_payload(response, shape, parsed)
+            parsed['ResponseMetadata'] = self._populate_response_metadata(
+                response
+            )
+        return parsed
+
+    def _add_modeled_parse(self, response, shape, final_parsed):
+        if shape is None:
+            return final_parsed
+        self._parse_payload(response, shape, final_parsed)
+
+    def _do_modeled_error_parse(self, response, shape):
+        final_parsed = {}
+        self._add_modeled_parse(response, shape, final_parsed)
+        return final_parsed
+
+    def _populate_response_metadata(self, response):
+        metadata = {}
+        headers = response['headers']
+        if 'x-amzn-requestid' in headers:
+            metadata['RequestId'] = headers['x-amzn-requestid']
+        return metadata
+
+    def _handle_structure(self, shape, node):
+        parsed = {}
+        members = shape.members
+        if shape.is_tagged_union:
+            cleaned_value = node.copy()
+            cleaned_value.pop("__type", None)
+            cleaned_value = {
+                k: v for k, v in cleaned_value.items() if v is not None
+            }
+            if len(cleaned_value) != 1:
+                error_msg = (
+                    "Invalid service response: %s must have one and only "
+                    "one member set."
+                )
+                raise ResponseParserError(error_msg % shape.name)
+        for member_name in members:
+            member_shape = members[member_name]
+            member_node = node.get(member_name)
+            if member_node is not None:
+                parsed[member_name] = self._parse_shape(
+                    member_shape, member_node
+                )
+        return parsed
+
+    def _parse_payload(self, response, shape, final_parsed):
+        original_parsed = self._initial_body_parse(response['body'])
+        body_parsed = self._parse_shape(shape, original_parsed)
+        final_parsed.update(body_parsed)
 
+    def _initial_body_parse(self, body_contents):
+        # This method should do the initial parsing of the
+        # body.  We still need to walk the parsed body in order
+        # to convert types, but this method will do the first round
+        # of parsing.
+        raise NotImplementedError("_initial_body_parse")
+
+
+class RestJSONParser(BaseRestParser, BaseJSONParser):
     EVENT_STREAM_PARSER_CLS = EventStreamJSONParser
 
     def _initial_body_parse(self, body_contents):
         return self._parse_body_as_json(body_contents)
 
     def _do_error_parse(self, response, shape):
-        error = super(RestJSONParser, self)._do_error_parse(response, shape)
+        error = super()._do_error_parse(response, shape)
         self._inject_error_code(error, response)
         return error
 
@@ -988,19 +1315,87 @@ class RestJSONParser(BaseRestParser, Bas
         # The "Code" value can come from either a response
         # header or a value in the JSON body.
         body = self._initial_body_parse(response['body'])
+        code = None
         if 'x-amzn-errortype' in response['headers']:
             code = response['headers']['x-amzn-errortype']
-            # Could be:
-            # x-amzn-errortype: ValidationException:
-            code = code.split(':')[0]
-            error['Error']['Code'] = code
         elif 'code' in body or 'Code' in body:
-            error['Error']['Code'] = body.get(
-                'code', body.get('Code', ''))
+            code = body.get('code', body.get('Code', ''))
+        if code is None:
+            return
+        if isinstance(code, str):
+            code = code.split(':', 1)[0].rsplit('#', 1)[-1]
+        error['Error']['Code'] = code
 
+    def _handle_boolean(self, shape, value):
+        return ensure_boolean(value)
 
-class RestXMLParser(BaseRestParser, BaseXMLResponseParser):
+    def _handle_integer(self, shape, value):
+        return int(value)
+
+    def _handle_float(self, shape, value):
+        return float(value)
+
+    _handle_long = _handle_integer
+    _handle_double = _handle_float
+
+
+class RpcV2CBORParser(BaseRpcV2Parser, BaseCBORParser):
+    EVENT_STREAM_PARSER_CLS = EventStreamCBORParser
+
+    def _initial_body_parse(self, body_contents):
+        if body_contents == b'':
+            return body_contents
+        body_contents_stream = self.get_peekable_stream_from_bytes(
+            body_contents
+        )
+        return self.parse_data_item(body_contents_stream)
+
+    def _do_error_parse(self, response, shape):
+        body = self._initial_body_parse(response['body'])
+        error = {
+            "Error": {
+                "Message": body.get('message', body.get('Message', '')),
+                "Code": '',
+            },
+            "ResponseMetadata": {},
+        }
+        headers = response['headers']
+
+        code = body.get('__type')
+        if code is None:
+            response_code = response.get('status_code')
+            if response_code is not None:
+                code = str(response_code)
+        if code is not None:
+            if ':' in code:
+                code = code.split(':', 1)[0]
+            if '#' in code:
+                code = code.rsplit('#', 1)[1]
+            if 'x-amzn-query-error' in headers:
+                code = self._do_query_compatible_error_parse(
+                    code, headers, error
+                )
+            error['Error']['Code'] = code
+        if 'x-amzn-requestid' in headers:
+            error.setdefault('ResponseMetadata', {})['RequestId'] = headers[
+                'x-amzn-requestid'
+            ]
+        return error
+
+    def _handle_event_stream(self, response, shape, event_name):
+        event_stream_shape = shape.members[event_name]
+        event_stream = self._create_event_stream(response, event_stream_shape)
+        try:
+            event = event_stream.get_initial_response()
+        except NoInitialResponseError:
+            error_msg = 'First event was not of type initial-response'
+            raise ResponseParserError(error_msg)
+        parsed = self._initial_body_parse(event.payload)
+        parsed[event_name] = event_stream
+        return parsed
 
+
+class RestXMLParser(BaseRestParser, BaseXMLResponseParser):
     EVENT_STREAM_PARSER_CLS = EventStreamXMLParser
 
     def _initial_body_parse(self, xml_string):
@@ -1028,10 +1423,11 @@ class RestXMLParser(BaseRestParser, Base
             # the error response from other sources like the HTTP status code.
             try:
                 return self._parse_error_from_body(response)
-            except ResponseParserError as e:
+            except ResponseParserError:
                 LOG.debug(
                     'Exception caught when parsing error response body:',
-                    exc_info=True)
+                    exc_info=True,
+                )
         return self._parse_error_from_http_status(response)
 
     def _parse_error_from_http_status(self, response):
@@ -1039,12 +1435,13 @@ class RestXMLParser(BaseRestParser, Base
             'Error': {
                 'Code': str(response['status_code']),
                 'Message': http.client.responses.get(
-                    response['status_code'], ''),
+                    response['status_code'], ''
+                ),
             },
             'ResponseMetadata': {
                 'RequestId': response['headers'].get('x-amz-request-id', ''),
                 'HostId': response['headers'].get('x-amz-id-2', ''),
-            }
+            },
         }
 
     def _parse_error_from_body(self, response):
@@ -1072,7 +1469,7 @@ class RestXMLParser(BaseRestParser, Base
 
     @_text_content
     def _handle_string(self, shape, text):
-        text = super(RestXMLParser, self)._handle_string(shape, text)
+        text = super()._handle_string(shape, text)
         return text
 
 
@@ -1082,4 +1479,5 @@ PROTOCOL_PARSERS = {
     'json': JSONParser,
     'rest-json': RestJSONParser,
     'rest-xml': RestXMLParser,
+    'smithy-rpc-v2-cbor': RpcV2CBORParser,
 }
diff -pruN 2.23.6-1/awscli/botocore/regions.py 2.31.35-1/awscli/botocore/regions.py
--- 2.23.6-1/awscli/botocore/regions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/regions.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,20 +16,20 @@ This module implements endpoint resoluti
 given service and region and resolving the available endpoints for a service
 in a specific AWS partition.
 """
+
 import copy
 import logging
 import re
 from enum import Enum
 
 import jmespath
-
 from botocore import UNSIGNED, xform_name
 from botocore.auth import AUTH_TYPE_MAPS
 from botocore.endpoint_provider import EndpointProvider
 from botocore.exceptions import (
     EndpointProviderError,
-    InvalidEndpointConfigurationError,
     EndpointVariantError,
+    InvalidEndpointConfigurationError,
     InvalidHostLabelError,
     NoRegionError,
     ParamValidationError,
@@ -41,15 +41,17 @@ from botocore.exceptions import (
     UnsupportedS3ControlArnError,
     UnsupportedS3ControlConfigurationError,
 )
+from botocore.useragent import register_feature_id
 from botocore.utils import ensure_boolean, instance_cache
 
 LOG = logging.getLogger(__name__)
-DEFAULT_URI_TEMPLATE = '{service}.{region}.{dnsSuffix}' # noqa
+DEFAULT_URI_TEMPLATE = '{service}.{region}.{dnsSuffix}'  # noqa
 DEFAULT_SERVICE_DATA = {'endpoints': {}}
 
 
-class BaseEndpointResolver(object):
+class BaseEndpointResolver:
     """Resolves regions and endpoints. Must be subclassed."""
+
     def construct_endpoint(self, service_name, region_name=None):
         """Resolves an endpoint for a service and region combination.
 
@@ -86,8 +88,9 @@ class BaseEndpointResolver(object):
         """
         raise NotImplementedError
 
-    def get_available_endpoints(self, service_name, partition_name='aws',
-                                allow_non_regional=False):
+    def get_available_endpoints(
+        self, service_name, partition_name='aws', allow_non_regional=False
+    ):
         """Lists the endpoint names of a particular partition.
 
         :type service_name: string
@@ -141,9 +144,13 @@ class EndpointResolver(BaseEndpointResol
             result.append(partition['partition'])
         return result
 
-    def get_available_endpoints(self, service_name, partition_name='aws',
-                                allow_non_regional=False,
-                                endpoint_variant_tags=None):
+    def get_available_endpoints(
+        self,
+        service_name,
+        partition_name='aws',
+        allow_non_regional=False,
+        endpoint_variant_tags=None,
+    ):
         result = []
         for partition in self._endpoint_data['partitions']:
             if partition['partition'] != partition_name:
@@ -157,8 +164,8 @@ class EndpointResolver(BaseEndpointResol
                 # Only regional endpoints can be modeled with variants
                 if endpoint_variant_tags and is_regional_endpoint:
                     variant_data = self._retrieve_variant_data(
-                        service_endpoints[endpoint_name],
-                        endpoint_variant_tags)
+                        service_endpoints[endpoint_name], endpoint_variant_tags
+                    )
                     if variant_data:
                         result.append(endpoint_name)
                 elif allow_non_regional or is_regional_endpoint:
@@ -166,15 +173,14 @@ class EndpointResolver(BaseEndpointResol
         return result
 
     def get_partition_dns_suffix(
-        self,
-        partition_name,
-        endpoint_variant_tags=None
+        self, partition_name, endpoint_variant_tags=None
     ):
         for partition in self._endpoint_data['partitions']:
             if partition['partition'] == partition_name:
                 if endpoint_variant_tags:
                     variant = self._retrieve_variant_data(
-                        partition.get('defaults'), endpoint_variant_tags)
+                        partition.get('defaults'), endpoint_variant_tags
+                    )
                     if variant and 'dnsSuffix' in variant:
                         return variant['dnsSuffix']
                 else:
@@ -187,7 +193,7 @@ class EndpointResolver(BaseEndpointResol
         region_name=None,
         partition_name=None,
         use_dualstack_endpoint=False,
-        use_fips_endpoint=False
+        use_fips_endpoint=False,
     ):
         if (
             service_name == 's3'
@@ -204,9 +210,12 @@ class EndpointResolver(BaseEndpointResol
 
             if valid_partition is not None:
                 result = self._endpoint_for_partition(
-                    valid_partition, service_name,
-                    region_name, use_dualstack_endpoint, use_fips_endpoint,
-                    True
+                    valid_partition,
+                    service_name,
+                    region_name,
+                    use_dualstack_endpoint,
+                    use_fips_endpoint,
+                    True,
                 )
                 return result
             return None
@@ -214,12 +223,16 @@ class EndpointResolver(BaseEndpointResol
         # Iterate over each partition until a match is found.
         for partition in self._endpoint_data['partitions']:
             if use_dualstack_endpoint and (
-                    partition['partition'] in
-                    self._UNSUPPORTED_DUALSTACK_PARTITIONS):
+                partition['partition']
+                in self._UNSUPPORTED_DUALSTACK_PARTITIONS
+            ):
                 continue
             result = self._endpoint_for_partition(
-                partition, service_name, region_name, use_dualstack_endpoint,
-                use_fips_endpoint
+                partition,
+                service_name,
+                region_name,
+                use_dualstack_endpoint,
+                use_fips_endpoint,
             )
             if result:
                 return result
@@ -233,19 +246,30 @@ class EndpointResolver(BaseEndpointResol
             error_msg='No partition found for provided region_name.',
         )
 
-    def _endpoint_for_partition(self, partition, service_name, region_name,
-                                use_dualstack_endpoint, use_fips_endpoint,
-                                force_partition=False):
+    def _endpoint_for_partition(
+        self,
+        partition,
+        service_name,
+        region_name,
+        use_dualstack_endpoint,
+        use_fips_endpoint,
+        force_partition=False,
+    ):
         partition_name = partition["partition"]
-        if (use_dualstack_endpoint and
-                partition_name in self._UNSUPPORTED_DUALSTACK_PARTITIONS):
-            error_msg = ("Dualstack endpoints are currently not supported"
-                         " for %s partition" % partition_name)
+        if (
+            use_dualstack_endpoint
+            and partition_name in self._UNSUPPORTED_DUALSTACK_PARTITIONS
+        ):
+            error_msg = (
+                "Dualstack endpoints are currently not supported"
+                f" for {partition_name} partition"
+            )
             raise EndpointVariantError(tags=['dualstack'], error_msg=error_msg)
 
         # Get the service from the partition, or an empty template.
         service_data = partition['services'].get(
-            service_name, DEFAULT_SERVICE_DATA)
+            service_name, DEFAULT_SERVICE_DATA
+        )
         # Use the partition endpoint if no region is supplied.
         if region_name is None:
             if 'partitionEndpoint' in service_data:
@@ -272,12 +296,19 @@ class EndpointResolver(BaseEndpointResol
             partition_endpoint = service_data.get('partitionEndpoint')
             is_regionalized = service_data.get('isRegionalized', True)
             if partition_endpoint and not is_regionalized:
-                LOG.debug('Using partition endpoint for %s, %s: %s',
-                          service_name, region_name, partition_endpoint)
+                LOG.debug(
+                    'Using partition endpoint for %s, %s: %s',
+                    service_name,
+                    region_name,
+                    partition_endpoint,
+                )
                 resolve_kwargs['endpoint_name'] = partition_endpoint
                 return self._resolve(**resolve_kwargs)
-            LOG.debug('Creating a regex based endpoint for %s, %s',
-                      service_name, region_name)
+            LOG.debug(
+                'Creating a regex based endpoint for %s, %s',
+                service_name,
+                region_name,
+            )
             return self._resolve(**resolve_kwargs)
 
     def _region_match(self, partition, region_name):
@@ -302,40 +333,44 @@ class EndpointResolver(BaseEndpointResol
             tags.append('fips')
         return tags
 
-    def _resolve_variant(self, tags, endpoint_data, service_defaults,
-                         partition_defaults):
+    def _resolve_variant(
+        self, tags, endpoint_data, service_defaults, partition_defaults
+    ):
         result = {}
-        for variants in [endpoint_data, service_defaults,
-                         partition_defaults]:
+        for variants in [endpoint_data, service_defaults, partition_defaults]:
             variant = self._retrieve_variant_data(variants, tags)
             if variant:
                 self._merge_keys(variant, result)
         return result
 
-    def _resolve(self, partition, service_name, service_data, endpoint_name,
-                 use_dualstack_endpoint, use_fips_endpoint):
-        endpoint_data = service_data.get('endpoints', {}).get(endpoint_name, {})
+    def _resolve(
+        self,
+        partition,
+        service_name,
+        service_data,
+        endpoint_name,
+        use_dualstack_endpoint,
+        use_fips_endpoint,
+    ):
+        endpoint_data = service_data.get('endpoints', {}).get(
+            endpoint_name, {}
+        )
 
         if endpoint_data.get('deprecated'):
             LOG.warning(
-                'Client is configured with the deprecated endpoint: %s' % (
-                    endpoint_name
-                )
+                f'Client is configured with the deprecated endpoint: {endpoint_name}'
             )
 
         service_defaults = service_data.get('defaults', {})
         partition_defaults = partition.get('defaults', {})
-        tags = self._create_tag_list(use_dualstack_endpoint,
-                                     use_fips_endpoint)
+        tags = self._create_tag_list(use_dualstack_endpoint, use_fips_endpoint)
 
         if tags:
-            result = self._resolve_variant(tags, endpoint_data,
-                                           service_defaults,
-                                           partition_defaults)
+            result = self._resolve_variant(
+                tags, endpoint_data, service_defaults, partition_defaults
+            )
             if result == {}:
-                error_msg = ("Endpoint does not exist for %s in region %s" % (
-                    service_name, endpoint_name
-                ))
+                error_msg = f"Endpoint does not exist for {service_name} in region {endpoint_name}"
                 raise EndpointVariantError(tags=tags, error_msg=error_msg)
             self._merge_keys(endpoint_data, result)
         else:
@@ -353,13 +388,20 @@ class EndpointResolver(BaseEndpointResol
         self._merge_keys(partition_defaults, result)
 
         result['hostname'] = self._expand_template(
-            partition, result['hostname'], service_name, endpoint_name,
-            result['dnsSuffix']
+            partition,
+            result['hostname'],
+            service_name,
+            endpoint_name,
+            result['dnsSuffix'],
         )
         if 'sslCommonName' in result:
             result['sslCommonName'] = self._expand_template(
-                partition, result['sslCommonName'], service_name,
-                endpoint_name, result['dnsSuffix'])
+                partition,
+                result['sslCommonName'],
+                service_name,
+                endpoint_name,
+                result['dnsSuffix'],
+            )
 
         return result
 
@@ -368,11 +410,12 @@ class EndpointResolver(BaseEndpointResol
             if key not in result:
                 result[key] = from_data[key]
 
-    def _expand_template(self, partition, template, service_name,
-                         endpoint_name, dnsSuffix):
+    def _expand_template(
+        self, partition, template, service_name, endpoint_name, dnsSuffix
+    ):
         return template.format(
-            service=service_name, region=endpoint_name,
-            dnsSuffix=dnsSuffix)
+            service=service_name, region=endpoint_name, dnsSuffix=dnsSuffix
+        )
 
 
 class EndpointResolverBuiltins(str, Enum):
@@ -384,10 +427,10 @@ class EndpointResolverBuiltins(str, Enum
     # Whether the UseDualStackEndpoint configuration option has been enabled
     # for the SDK client (bool)
     AWS_USE_DUALSTACK = "AWS::UseDualStack"
-    # Whether the global endpoint should be used with STS, rather the the
+    # Whether the global endpoint should be used with STS, rather than the
     # regional endpoint for us-east-1 (bool)
     AWS_STS_USE_GLOBAL_ENDPOINT = "AWS::STS::UseGlobalEndpoint"
-    # Whether the global endpoint should be used with S3, rather then the
+    # Whether the global endpoint should be used with S3, rather than the
     # regional endpoint for us-east-1 (bool)
     AWS_S3_USE_GLOBAL_ENDPOINT = "AWS::S3::UseGlobalEndpoint"
     # Whether S3 Transfer Acceleration has been requested (bool)
@@ -404,10 +447,12 @@ class EndpointResolverBuiltins(str, Enum
     AWS_S3_DISABLE_MRAP = "AWS::S3::DisableMultiRegionAccessPoints"
     # Whether a custom endpoint has been configured (str)
     SDK_ENDPOINT = "SDK::Endpoint"
-    # Currently not implemented:
+    # An AWS account ID that can be optionally configured for the SDK client (str)
     ACCOUNT_ID = "AWS::Auth::AccountId"
+    # Whether an endpoint should include an account ID (str)
     ACCOUNT_ID_ENDPOINT_MODE = "AWS::Auth::AccountIdEndpointMode"
 
+
 class EndpointRulesetResolver:
     """Resolves endpoints using a service's endpoint ruleset"""
 
@@ -452,7 +497,7 @@ class EndpointRulesetResolver:
             operation_model, call_args, request_context
         )
         LOG.debug(
-            'Calling endpoint provider with parameters: %s' % provider_params
+            f'Calling endpoint provider with parameters: {provider_params}'
         )
         try:
             provider_result = self._provider.resolve_endpoint(
@@ -466,10 +511,14 @@ class EndpointRulesetResolver:
                 raise
             else:
                 raise botocore_exception from ex
-        LOG.debug('Endpoint provider result: %s' % provider_result.url)
+        LOG.debug(f'Endpoint provider result: {provider_result.url}')
 
         # The endpoint provider does not support non-secure transport.
-        if not self._use_ssl and provider_result.url.startswith('https://'):
+        if (
+                not self._use_ssl
+                and provider_result.url.startswith('https://')
+                and 'Endpoint' not in provider_params
+        ):
             provider_result = provider_result._replace(
                 url=f'http://{provider_result.url[8:]}'
             )
@@ -516,6 +565,7 @@ class EndpointRulesetResolver:
 
             if param_val is not None:
                 provider_params[param_name] = param_val
+                self._register_endpoint_feature_ids(param_name, param_val)
 
         return provider_params
 
@@ -523,7 +573,8 @@ class EndpointRulesetResolver:
         self, param_name, operation_model, call_args
     ):
         static = self._resolve_param_as_static_context_param(
-            param_name, operation_model,
+            param_name,
+            operation_model,
         )
         if static is not None:
             return static
@@ -572,7 +623,10 @@ class EndpointRulesetResolver:
     def _resolve_param_as_builtin(self, builtin_name, builtins):
         if builtin_name not in EndpointResolverBuiltins.__members__.values():
             raise UnknownEndpointResolutionBuiltInName(name=builtin_name)
-        return builtins.get(builtin_name)
+        builtin = builtins.get(builtin_name)
+        if callable(builtin):
+            return builtin()
+        return builtin
 
     @instance_cache
     def _get_static_context_params(self, operation_model):
@@ -605,7 +659,7 @@ class EndpointRulesetResolver:
         customized_builtins = copy.copy(self._builtins)
         # Handlers are expected to modify the builtins dict in place.
         self._event_emitter.emit(
-            'before-endpoint-resolution.%s' % service_id,
+            f'before-endpoint-resolution.{service_id}',
             builtins=customized_builtins,
             model=operation_model,
             params=call_args,
@@ -789,3 +843,9 @@ class EndpointRulesetResolver:
             if msg == 'EndpointId must be a valid host label.':
                 return InvalidEndpointConfigurationError(msg=msg)
         return None
+
+    def _register_endpoint_feature_ids(self, param_name, param_val):
+        if param_name == 'AccountIdEndpointMode':
+            register_feature_id(f'ACCOUNT_ID_MODE_{param_val.upper()}')
+        elif param_name == 'AccountId':
+            register_feature_id('RESOLVED_ACCOUNT_ID')
diff -pruN 2.23.6-1/awscli/botocore/response.py 2.31.35-1/awscli/botocore/response.py
--- 2.23.6-1/awscli/botocore/response.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/response.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,16 +15,23 @@
 import logging
 import sys
 
-from botocore import ScalarTypes, parsers
-from botocore.compat import XMLParseError, json, set_socket_timeout
+from botocore import (
+    ScalarTypes,  # noqa
+    parsers,
+)
+from botocore.compat import (
+    XMLParseError,  # noqa
+    json,  # noqa
+    set_socket_timeout,
+)
 from botocore.exceptions import IncompleteReadError, ReadTimeoutError
-from botocore.hooks import first_non_none_response
+from botocore.hooks import first_non_none_response  # noqa
 from urllib3.exceptions import ReadTimeoutError as URLLib3ReadTimeoutError
 
 logger = logging.getLogger(__name__)
 
 
-class StreamingBody(object):
+class StreamingBody:
     """Wrapper class for an http response body.
 
     This provides a few additional conveniences that do not exist
@@ -36,6 +43,7 @@ class StreamingBody(object):
           is raised.
 
     """
+
     _DEFAULT_CHUNK_SIZE = 1024
 
     def __init__(self, raw_stream, content_length):
@@ -61,9 +69,12 @@ class StreamingBody(object):
             # in py2 and py3.  So this code has been pushed to botocore.compat.
             set_socket_timeout(self._raw_stream, timeout)
         except AttributeError:
-            logger.error("Cannot access the socket object of "
-                         "a streaming response.  It's possible "
-                         "the interface has changed.", exc_info=True)
+            logger.error(
+                "Cannot access the socket object of "
+                "a streaming response.  It's possible "
+                "the interface has changed.",
+                exc_info=True,
+            )
             raise
 
     def read(self, amt=None):
@@ -85,13 +96,11 @@ class StreamingBody(object):
         return chunk
 
     def __iter__(self):
-        """Return an iterator to yield 1k chunks from the raw stream.
-        """
+        """Return an iterator to yield 1k chunks from the raw stream."""
         return self.iter_chunks(self._DEFAULT_CHUNK_SIZE)
 
     def __next__(self):
-        """Return the next 1k chunk from the raw stream.
-        """
+        """Return the next 1k chunk from the raw stream."""
         current_chunk = self.read(self._DEFAULT_CHUNK_SIZE)
         if current_chunk:
             return current_chunk
@@ -128,11 +137,13 @@ class StreamingBody(object):
         # See: https://github.com/kennethreitz/requests/issues/1855
         # Basically, our http library doesn't do this for us, so we have
         # to do this ourself.
-        if self._content_length is not None and \
-                self._amount_read != int(self._content_length):
+        if self._content_length is not None and self._amount_read != int(
+            self._content_length
+        ):
             raise IncompleteReadError(
                 actual_bytes=self._amount_read,
-                expected_bytes=int(self._content_length))
+                expected_bytes=int(self._content_length),
+            )
 
     def close(self):
         """Close the underlying http response stream."""
@@ -140,7 +151,7 @@ class StreamingBody(object):
 
 
 def get_response(operation_model, http_response):
-    protocol = operation_model.metadata['protocol']
+    protocol = operation_model.service_model.resolved_protocol
     response_dict = {
         'headers': http_response.headers,
         'status_code': http_response.status_code,
@@ -152,10 +163,12 @@ def get_response(operation_model, http_r
         response_dict['body'] = http_response.content
     elif operation_model.has_streaming_output:
         response_dict['body'] = StreamingBody(
-            http_response.raw, response_dict['headers'].get('content-length'))
+            http_response.raw, response_dict['headers'].get('content-length')
+        )
     else:
         response_dict['body'] = http_response.content
 
     parser = parsers.create_parser(protocol)
-    return http_response, parser.parse(response_dict,
-                                       operation_model.output_shape)
+    return http_response, parser.parse(
+        response_dict, operation_model.output_shape
+    )
diff -pruN 2.23.6-1/awscli/botocore/retries/adaptive.py 2.31.35-1/awscli/botocore/retries/adaptive.py
--- 2.23.6-1/awscli/botocore/retries/adaptive.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/adaptive.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,8 +9,9 @@ logger = logging.getLogger(__name__)
 
 def register_retry_handler(client):
     clock = bucket.Clock()
-    rate_adjustor = throttling.CubicCalculator(starting_max_rate=0,
-                                               start_time=clock.current_time())
+    rate_adjustor = throttling.CubicCalculator(
+        starting_max_rate=0, start_time=clock.current_time()
+    )
     token_bucket = bucket.TokenBucket(max_rate=1, clock=clock)
     rate_clocker = RateClocker(clock)
     throttling_detector = standard.ThrottlingErrorDetector(
@@ -24,20 +25,27 @@ def register_retry_handler(client):
         clock=clock,
     )
     client.meta.events.register(
-        'before-send', limiter.on_sending_request,
+        'before-send',
+        limiter.on_sending_request,
     )
     client.meta.events.register(
-        'needs-retry', limiter.on_receiving_response,
+        'needs-retry',
+        limiter.on_receiving_response,
     )
     return limiter
 
 
-class ClientRateLimiter(object):
-
+class ClientRateLimiter:
     _MAX_RATE_ADJUST_SCALE = 2.0
 
-    def __init__(self, rate_adjustor, rate_clocker, token_bucket,
-                 throttling_detector, clock):
+    def __init__(
+        self,
+        rate_adjustor,
+        rate_clocker,
+        token_bucket,
+        throttling_detector,
+        clock,
+    ):
         self._rate_adjustor = rate_adjustor
         self._rate_clocker = rate_clocker
         self._token_bucket = token_bucket
@@ -56,34 +64,44 @@ class ClientRateLimiter(object):
         timestamp = self._clock.current_time()
         with self._lock:
             if not self._throttling_detector.is_throttling_error(**kwargs):
-                throttling = False
                 new_rate = self._rate_adjustor.success_received(timestamp)
             else:
-                throttling = True
                 if not self._enabled:
                     rate_to_use = measured_rate
                 else:
-                    rate_to_use = min(measured_rate, self._token_bucket.max_rate)
+                    rate_to_use = min(
+                        measured_rate, self._token_bucket.max_rate
+                    )
                 new_rate = self._rate_adjustor.error_received(
-                    rate_to_use, timestamp)
-                logger.debug("Throttling response received, new send rate: %s "
-                             "measured rate: %s, token bucket capacity "
-                             "available: %s", new_rate, measured_rate,
-                             self._token_bucket.available_capacity)
+                    rate_to_use, timestamp
+                )
+                logger.debug(
+                    "Throttling response received, new send rate: %s "
+                    "measured rate: %s, token bucket capacity "
+                    "available: %s",
+                    new_rate,
+                    measured_rate,
+                    self._token_bucket.available_capacity,
+                )
                 self._enabled = True
             self._token_bucket.max_rate = min(
-                new_rate, self._MAX_RATE_ADJUST_SCALE * measured_rate)
+                new_rate, self._MAX_RATE_ADJUST_SCALE * measured_rate
+            )
 
 
-class RateClocker(object):
+class RateClocker:
     """Tracks the rate at which a client is sending a request."""
 
     _DEFAULT_SMOOTHING = 0.8
     # Update the rate every _TIME_BUCKET_RANGE seconds.
     _TIME_BUCKET_RANGE = 0.5
 
-    def __init__(self, clock, smoothing=_DEFAULT_SMOOTHING,
-                 time_bucket_range=_TIME_BUCKET_RANGE):
+    def __init__(
+        self,
+        clock,
+        smoothing=_DEFAULT_SMOOTHING,
+        time_bucket_range=_TIME_BUCKET_RANGE,
+    ):
         self._clock = clock
         self._measured_rate = 0
         self._smoothing = smoothing
@@ -95,15 +113,15 @@ class RateClocker(object):
     def record(self, amount=1):
         with self._lock:
             t = self._clock.current_time()
-            bucket = math.floor(
-                t * self._time_bucket_scale) / self._time_bucket_scale
+            bucket = (
+                math.floor(t * self._time_bucket_scale)
+                / self._time_bucket_scale
+            )
             self._count += amount
             if bucket > self._last_bucket:
-                current_rate = self._count / float(
-                    bucket - self._last_bucket)
-                self._measured_rate = (
-                    (current_rate * self._smoothing) +
-                    (self._measured_rate * (1 - self._smoothing))
+                current_rate = self._count / float(bucket - self._last_bucket)
+                self._measured_rate = (current_rate * self._smoothing) + (
+                    self._measured_rate * (1 - self._smoothing)
                 )
                 self._count = 0
                 self._last_bucket = bucket
diff -pruN 2.23.6-1/awscli/botocore/retries/base.py 2.31.35-1/awscli/botocore/retries/base.py
--- 2.23.6-1/awscli/botocore/retries/base.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/base.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,4 @@
-class BaseRetryBackoff(object):
-
+class BaseRetryBackoff:
     def delay_amount(self, context):
         """Calculate how long we should delay before retrying.
 
@@ -9,7 +8,7 @@ class BaseRetryBackoff(object):
         raise NotImplementedError("delay_amount")
 
 
-class BaseRetryableChecker(object):
+class BaseRetryableChecker:
     """Base class for determining if a retry should happen.
 
     This base class checks for specific retryable conditions.
diff -pruN 2.23.6-1/awscli/botocore/retries/bucket.py 2.31.35-1/awscli/botocore/retries/bucket.py
--- 2.23.6-1/awscli/botocore/retries/bucket.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/bucket.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,12 @@
 """This module implements token buckets used for client side throttling."""
+
 import threading
 import time
 
 from botocore.exceptions import CapacityNotAvailableError
 
 
-class Clock(object):
+class Clock:
     def __init__(self):
         pass
 
@@ -16,8 +17,7 @@ class Clock(object):
         return time.time()
 
 
-class TokenBucket(object):
-
+class TokenBucket:
     _MIN_RATE = 0.5
 
     def __init__(self, max_rate, clock, min_rate=_MIN_RATE):
@@ -51,8 +51,9 @@ class TokenBucket(object):
                 self._max_capacity = 1
             # If we're scaling down, we also can't have a capacity that's
             # more than our max_capacity.
-            self._current_capacity = min(self._current_capacity,
-                                        self._max_capacity)
+            self._current_capacity = min(
+                self._current_capacity, self._max_capacity
+            )
             self._new_fill_rate_condition.notify()
 
     @property
diff -pruN 2.23.6-1/awscli/botocore/retries/quota.py 2.31.35-1/awscli/botocore/retries/quota.py
--- 2.23.6-1/awscli/botocore/retries/quota.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/quota.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,9 @@
-"""Retry quota implementation.
+"""Retry quota implementation."""
 
-
-"""
 import threading
 
 
-class RetryQuota(object):
+class RetryQuota:
     INITIAL_CAPACITY = 500
 
     def __init__(self, initial_capacity=INITIAL_CAPACITY, lock=None):
@@ -47,8 +45,7 @@ class RetryQuota(object):
             return
         with self._lock:
             amount = min(
-                self._max_capacity - self._available_capacity,
-                capacity_amount
+                self._max_capacity - self._available_capacity, capacity_amount
             )
             self._available_capacity += amount
 
diff -pruN 2.23.6-1/awscli/botocore/retries/special.py 2.31.35-1/awscli/botocore/retries/special.py
--- 2.23.6-1/awscli/botocore/retries/special.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/special.py	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,7 @@ retry handler.  They don't make sense as
 module.  Ideally we should be able to remove this module.
 
 """
+
 import logging
 from binascii import crc32
 
@@ -16,7 +17,6 @@ logger = logging.getLogger(__name__)
 # TODO: This is an ideal candidate for the retryable trait once that's
 # available.
 class RetryIDPCommunicationError(BaseRetryableChecker):
-
     _SERVICE_NAME = 'sts'
 
     def is_retryable(self, context):
@@ -28,7 +28,6 @@ class RetryIDPCommunicationError(BaseRet
 
 
 class RetryDDBChecksumError(BaseRetryableChecker):
-
     _CHECKSUM_HEADER = 'x-amz-crc32'
     _SERVICE_NAME = 'dynamodb'
 
@@ -41,8 +40,12 @@ class RetryDDBChecksumError(BaseRetryabl
         checksum = context.http_response.headers.get(self._CHECKSUM_HEADER)
         if checksum is None:
             return False
-        actual_crc32 = crc32(context.http_response.content) & 0xffffffff
+        actual_crc32 = crc32(context.http_response.content) & 0xFFFFFFFF
         if actual_crc32 != int(checksum):
-            logger.debug("DynamoDB crc32 checksum does not match, "
-                         "expected: %s, actual: %s", checksum, actual_crc32)
+            logger.debug(
+                "DynamoDB crc32 checksum does not match, "
+                "expected: %s, actual: %s",
+                checksum,
+                actual_crc32,
+            )
             return True
diff -pruN 2.23.6-1/awscli/botocore/retries/standard.py 2.31.35-1/awscli/botocore/retries/standard.py
--- 2.23.6-1/awscli/botocore/retries/standard.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/standard.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,7 @@ This allows us to define an API that has
 based API used by botocore.
 
 """
+
 import logging
 import random
 
@@ -44,8 +45,9 @@ def register_retry_handler(client, max_a
 
     service_id = client.meta.service_model.service_id
     service_event_name = service_id.hyphenize()
-    client.meta.events.register('after-call.%s' % service_event_name,
-                                retry_quota.release_retry_quota)
+    client.meta.events.register(
+        f'after-call.{service_event_name}', retry_quota.release_retry_quota
+    )
 
     handler = RetryHandler(
         retry_policy=RetryPolicy(
@@ -56,20 +58,22 @@ def register_retry_handler(client, max_a
         retry_quota=retry_quota,
     )
 
-    unique_id = 'retry-config-%s' % service_event_name
+    unique_id = f'retry-config-{service_event_name}'
     client.meta.events.register(
-        'needs-retry.%s' % service_event_name, handler.needs_retry,
-        unique_id=unique_id
+        f'needs-retry.{service_event_name}',
+        handler.needs_retry,
+        unique_id=unique_id,
     )
     return handler
 
 
-class RetryHandler(object):
+class RetryHandler:
     """Bridge between botocore's event system and this module.
 
     This class is intended to be hooked to botocore's event system
     as an event handler.
     """
+
     def __init__(self, retry_policy, retry_event_adapter, retry_quota):
         self._retry_policy = retry_policy
         self._retry_event_adapter = retry_event_adapter
@@ -84,19 +88,22 @@ class RetryHandler(object):
             # capacity in our retry quota.
             if self._retry_quota.acquire_retry_quota(context):
                 retry_delay = self._retry_policy.compute_retry_delay(context)
-                logger.debug("Retry needed, retrying request after "
-                             "delay of: %s", retry_delay)
+                logger.debug(
+                    "Retry needed, retrying request after " "delay of: %s",
+                    retry_delay,
+                )
             else:
-                logger.debug("Retry needed but retry quota reached, "
-                             "not retrying request.")
+                logger.debug(
+                    "Retry needed but retry quota reached, "
+                    "not retrying request."
+                )
         else:
             logger.debug("Not retrying request.")
-        self._retry_event_adapter.adapt_retry_response_from_context(
-            context)
+        self._retry_event_adapter.adapt_retry_response_from_context(context)
         return retry_delay
 
 
-class RetryEventAdapter(object):
+class RetryEventAdapter:
     """Adapter to existing retry interface used in the endpoints layer.
 
     This existing interface for determining if a retry needs to happen
@@ -106,6 +113,7 @@ class RetryEventAdapter(object):
     new retry strategies.
 
     """
+
     def create_retry_context(self, **kwargs):
         """Create context based on needs-retry kwargs."""
         response = kwargs['response']
@@ -138,14 +146,15 @@ class RetryEventAdapter(object):
         # don't mutate any input parameters from the needs-retry event.
         metadata = context.get_retry_metadata()
         if context.parsed_response is not None:
-            context.parsed_response.setdefault(
-                'ResponseMetadata', {}).update(metadata)
+            context.parsed_response.setdefault('ResponseMetadata', {}).update(
+                metadata
+            )
 
 
 # Implementation note: this is meant to encapsulate all the misc stuff
 # that gets sent in the needs-retry event.  This is mapped so that params
 # are more clear and explicit.
-class RetryContext(object):
+class RetryContext:
     """Normalize a response that we use to check if a retry should occur.
 
     This class smoothes over the different types of responses we may get
@@ -168,9 +177,16 @@ class RetryContext(object):
     are meant to be modified directly.
 
     """
-    def __init__(self, attempt_number, operation_model=None,
-                 parsed_response=None, http_response=None,
-                 caught_exception=None, request_context=None):
+
+    def __init__(
+        self,
+        attempt_number,
+        operation_model=None,
+        parsed_response=None,
+        http_response=None,
+        caught_exception=None,
+        request_context=None,
+    ):
         # 1-based attempt number.
         self.attempt_number = attempt_number
         self.operation_model = operation_model
@@ -221,7 +237,7 @@ class RetryContext(object):
         return self._retry_metadata.copy()
 
 
-class RetryPolicy(object):
+class RetryPolicy:
     def __init__(self, retry_checker, retry_backoff):
         self._retry_checker = retry_checker
         self._retry_backoff = retry_backoff
@@ -234,7 +250,6 @@ class RetryPolicy(object):
 
 
 class ExponentialBackoff(BaseRetryBackoff):
-
     _BASE = 2
     _MAX_BACKOFF = 20
 
@@ -259,7 +274,7 @@ class ExponentialBackoff(BaseRetryBackof
         # want the first delay to just be ``rand(0, 1)``.
         return min(
             self._random() * (self._base ** (context.attempt_number - 1)),
-            self._max_backoff
+            self._max_backoff,
         )
 
 
@@ -287,9 +302,12 @@ class TransientRetryableChecker(BaseRetr
         HTTPClientError,
     )
 
-    def __init__(self, transient_error_codes=None,
-                 transient_status_codes=None,
-                 transient_exception_cls=None):
+    def __init__(
+        self,
+        transient_error_codes=None,
+        transient_status_codes=None,
+        transient_exception_cls=None,
+    ):
         if transient_error_codes is None:
             transient_error_codes = self._TRANSIENT_ERROR_CODES[:]
         if transient_status_codes is None:
@@ -304,12 +322,15 @@ class TransientRetryableChecker(BaseRetr
         if context.get_error_code() in self._transient_error_codes:
             return True
         if context.http_response is not None:
-            if context.http_response.status_code in \
-                    self._transient_status_codes:
+            if (
+                context.http_response.status_code
+                in self._transient_status_codes
+            ):
                 return True
         if context.caught_exception is not None:
-            return isinstance(context.caught_exception,
-                              self._transient_exception_cls)
+            return isinstance(
+                context.caught_exception, self._transient_exception_cls
+            )
         return False
 
 
@@ -357,8 +378,9 @@ class ModeledRetryableChecker(BaseRetrya
         return self._error_detector.detect_error_type(context) is not None
 
 
-class ModeledRetryErrorDetector(object):
+class ModeledRetryErrorDetector:
     """Checks whether or not an error is a modeled retryable error."""
+
     # There are return values from the detect_error_type() method.
     TRANSIENT_ERROR = 'TRANSIENT_ERROR'
     THROTTLING_ERROR = 'THROTTLING_ERROR'
@@ -385,8 +407,7 @@ class ModeledRetryErrorDetector(object):
                 # Check if this error code matches the shape.  This can
                 # be either by name or by a modeled error code.
                 error_code_to_check = (
-                    shape.metadata.get('error', {}).get('code')
-                    or shape.name
+                    shape.metadata.get('error', {}).get('code') or shape.name
                 )
                 if error_code == error_code_to_check:
                     if shape.metadata['retryable'].get('throttling'):
@@ -394,7 +415,7 @@ class ModeledRetryErrorDetector(object):
                     return self.TRANSIENT_ERROR
 
 
-class ThrottlingErrorDetector(object):
+class ThrottlingErrorDetector:
     def __init__(self, retry_event_adapter):
         self._modeled_error_detector = ModeledRetryErrorDetector()
         self._fixed_error_code_detector = ThrottledRetryableChecker()
@@ -422,19 +443,24 @@ class StandardRetryConditions(BaseRetrya
         # Note: This class is for convenience so you can have the
         # standard retry condition in a single class.
         self._max_attempts_checker = MaxAttemptsChecker(max_attempts)
-        self._additional_checkers = OrRetryChecker([
-            TransientRetryableChecker(),
-            ThrottledRetryableChecker(),
-            ModeledRetryableChecker(),
-            OrRetryChecker([
-                special.RetryIDPCommunicationError(),
-                special.RetryDDBChecksumError(),
-            ])
-        ])
+        self._additional_checkers = OrRetryChecker(
+            [
+                TransientRetryableChecker(),
+                ThrottledRetryableChecker(),
+                ModeledRetryableChecker(),
+                OrRetryChecker(
+                    [
+                        special.RetryIDPCommunicationError(),
+                        special.RetryDDBChecksumError(),
+                    ]
+                ),
+            ]
+        )
 
     def is_retryable(self, context):
-        return (self._max_attempts_checker.is_retryable(context) and
-                self._additional_checkers.is_retryable(context))
+        return self._max_attempts_checker.is_retryable(
+            context
+        ) and self._additional_checkers.is_retryable(context)
 
 
 class OrRetryChecker(BaseRetryableChecker):
@@ -445,7 +471,7 @@ class OrRetryChecker(BaseRetryableChecke
         return any(checker.is_retryable(context) for checker in self._checkers)
 
 
-class RetryQuotaChecker(object):
+class RetryQuotaChecker:
     _RETRY_COST = 5
     _NO_RETRY_INCREMENT = 1
     _TIMEOUT_RETRY_REQUEST = 10
diff -pruN 2.23.6-1/awscli/botocore/retries/throttling.py 2.31.35-1/awscli/botocore/retries/throttling.py
--- 2.23.6-1/awscli/botocore/retries/throttling.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/retries/throttling.py	2025-11-12 19:17:29.000000000 +0000
@@ -3,13 +3,17 @@ from collections import namedtuple
 CubicParams = namedtuple('CubicParams', ['w_max', 'k', 'last_fail'])
 
 
-class CubicCalculator(object):
+class CubicCalculator:
     _SCALE_CONSTANT = 0.4
     _BETA = 0.7
 
-    def __init__(self, starting_max_rate,
-                 start_time,
-                 scale_constant=_SCALE_CONSTANT, beta=_BETA):
+    def __init__(
+        self,
+        starting_max_rate,
+        start_time,
+        scale_constant=_SCALE_CONSTANT,
+        beta=_BETA,
+    ):
         self._w_max = starting_max_rate
         self._scale_constant = scale_constant
         self._beta = beta
@@ -17,14 +21,14 @@ class CubicCalculator(object):
         self._last_fail = start_time
 
     def _calculate_zero_point(self):
-        k = ((self._w_max * (1 - self._beta)) / self._scale_constant) ** (1 / 3.0)
+        k = ((self._w_max * (1 - self._beta)) / self._scale_constant) ** (
+            1 / 3.0
+        )
         return k
 
     def success_received(self, timestamp):
         dt = timestamp - self._last_fail
-        new_rate = (
-            self._scale_constant * (dt - self._k) ** 3 + self._w_max
-        )
+        new_rate = self._scale_constant * (dt - self._k) ** 3 + self._w_max
         return new_rate
 
     def error_received(self, current_rate, timestamp):
@@ -48,7 +52,5 @@ class CubicCalculator(object):
 
         """
         return CubicParams(
-            w_max=self._w_max,
-            k=self._k,
-            last_fail=self._last_fail
+            w_max=self._w_max, k=self._k, last_fail=self._last_fail
         )
diff -pruN 2.23.6-1/awscli/botocore/serialize.py 2.31.35-1/awscli/botocore/serialize.py
--- 2.23.6-1/awscli/botocore/serialize.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/serialize.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,14 +37,19 @@ The input to the serializers should be t
 with the exception of blob types.  Those are assumed to be binary,
 and if a str/unicode type is passed in, it will be encoded as utf-8.
 """
+
 import base64
 import calendar
 import datetime
+import decimal
+import math
 import re
+import struct
 from xml.etree import ElementTree
 
 from botocore import validate
 from botocore.compat import formatdate, json
+from botocore.useragent import register_feature_id
 from botocore.utils import (
     has_header,
     is_json_value_header,
@@ -68,7 +73,7 @@ def create_serializer(protocol_name, inc
     return serializer
 
 
-class Serializer(object):
+class Serializer:
     DEFAULT_METHOD = 'POST'
     # Clients can change this to a different MutableMapping
     # (i.e OrderedDict) if they want.  This is used in the
@@ -124,7 +129,7 @@ class Serializer(object):
             'method': self.DEFAULT_METHOD,
             'headers': {},
             # An empty body is represented as an empty byte string.
-            'body': b''
+            'body': b'',
         }
         return serialized
 
@@ -150,8 +155,7 @@ class Serializer(object):
             timestamp_format = self.TIMESTAMP_FORMAT
         timestamp_format = timestamp_format.lower()
         datetime_obj = parse_to_aware_datetime(value)
-        converter = getattr(
-            self, '_timestamp_%s' % timestamp_format)
+        converter = getattr(self, f'_timestamp_{timestamp_format}')
         final_value = converter(datetime_obj)
         return final_value
 
@@ -166,8 +170,7 @@ class Serializer(object):
         # via the default encoding.
         if isinstance(value, str):
             value = value.encode(self.DEFAULT_ENCODING)
-        return base64.b64encode(value).strip().decode(
-            self.DEFAULT_ENCODING)
+        return base64.b64encode(value).strip().decode(self.DEFAULT_ENCODING)
 
     def _expand_host_prefix(self, parameters, operation_model):
         operation_endpoint = operation_model.endpoint
@@ -178,25 +181,44 @@ class Serializer(object):
             return None
 
         host_prefix_expression = operation_endpoint['hostPrefix']
+        if operation_model.input_shape is None:
+            return host_prefix_expression
         input_members = operation_model.input_shape.members
         host_labels = [
-            member for member, shape in input_members.items()
+            member
+            for member, shape in input_members.items()
             if shape.serialization.get('hostLabel')
         ]
         format_kwargs = dict((name, parameters[name]) for name in host_labels)
 
         return host_prefix_expression.format(**format_kwargs)
 
+    def _is_shape_flattened(self, shape):
+        return shape.serialization.get('flattened')
+
+    def _handle_float(self, value):
+        if value == float("Infinity"):
+            value = "Infinity"
+        elif value == float("-Infinity"):
+            value = "-Infinity"
+        elif math.isnan(value):
+            value = "NaN"
+        return value
+
+    def _handle_query_compatible_trait(self, operation_model, serialized):
+        if operation_model.service_model.is_query_compatible:
+            serialized['headers']['x-amzn-query-mode'] = 'true'
 
-class QuerySerializer(Serializer):
 
+class QuerySerializer(Serializer):
     TIMESTAMP_FORMAT = 'iso8601'
 
     def serialize_to_request(self, parameters, operation_model):
         shape = operation_model.input_shape
         serialized = self._create_default_request()
-        serialized['method'] = operation_model.http.get('method',
-                                                        self.DEFAULT_METHOD)
+        serialized['method'] = operation_model.http.get(
+            'method', self.DEFAULT_METHOD
+        )
         serialized['headers'] = {
             'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
         }
@@ -223,8 +245,11 @@ class QuerySerializer(Serializer):
         #        input.
         # prefix: The incrementally built up prefix for the serialized
         #         key (i.e Foo.bar.members.1).
-        method = getattr(self, '_serialize_type_%s' % shape.type_name,
-                         self._default_serialize)
+        method = getattr(
+            self,
+            f'_serialize_type_{shape.type_name}',
+            self._default_serialize,
+        )
         method(serialized, value, shape, prefix=prefix)
 
     def _serialize_type_structure(self, serialized, value, shape, prefix=''):
@@ -233,7 +258,7 @@ class QuerySerializer(Serializer):
             member_shape = members[key]
             member_prefix = self._get_serialized_name(member_shape, key)
             if prefix:
-                member_prefix = '%s.%s' % (prefix, member_prefix)
+                member_prefix = f'{prefix}.{member_prefix}'
             self._serialize(serialized, value, member_shape, member_prefix)
 
     def _serialize_type_list(self, serialized, value, shape, prefix=''):
@@ -249,9 +274,9 @@ class QuerySerializer(Serializer):
                 list_prefix = '.'.join(prefix.split('.')[:-1] + [name])
         else:
             list_name = shape.member.serialization.get('name', 'member')
-            list_prefix = '%s.%s' % (prefix, list_name)
+            list_prefix = f'{prefix}.{list_name}'
         for i, element in enumerate(value, 1):
-            element_prefix = '%s.%s' % (list_prefix, i)
+            element_prefix = f'{list_prefix}.{i}'
             element_shape = shape.member
             self._serialize(serialized, element, element_shape, element_prefix)
 
@@ -259,7 +284,7 @@ class QuerySerializer(Serializer):
         if self._is_shape_flattened(shape):
             full_prefix = prefix
         else:
-            full_prefix = '%s.entry' % prefix
+            full_prefix = f'{prefix}.entry'
         template = full_prefix + '.{i}.{suffix}'
         key_shape = shape.key
         value_shape = shape.value
@@ -277,7 +302,8 @@ class QuerySerializer(Serializer):
 
     def _serialize_type_timestamp(self, serialized, value, shape, prefix=''):
         serialized[prefix] = self._convert_timestamp_to_str(
-            value, shape.serialization.get('timestampFormat'))
+            value, shape.serialization.get('timestampFormat')
+        )
 
     def _serialize_type_boolean(self, serialized, value, shape, prefix=''):
         if value:
@@ -288,8 +314,11 @@ class QuerySerializer(Serializer):
     def _default_serialize(self, serialized, value, shape, prefix=''):
         serialized[prefix] = value
 
-    def _is_shape_flattened(self, shape):
-        return shape.serialization.get('flattened')
+    def _serialize_type_float(self, serialized, value, shape, prefix=''):
+        serialized[prefix] = self._handle_float(value)
+
+    def _serialize_type_double(self, serialized, value, shape, prefix=''):
+        self._serialize_type_float(serialized, value, shape, prefix)
 
 
 class EC2Serializer(QuerySerializer):
@@ -304,7 +333,7 @@ class EC2Serializer(QuerySerializer):
 
     def _get_serialized_name(self, shape, default_name):
         # Returns the serialized name for the shape if it exists.
-        # Otherwise it will return the passed in default_name.
+        # Otherwise it will return the passed in capitalized default_name.
         if 'queryName' in shape.serialization:
             return shape.serialization['queryName']
         elif 'name' in shape.serialization:
@@ -317,7 +346,7 @@ class EC2Serializer(QuerySerializer):
 
     def _serialize_type_list(self, serialized, value, shape, prefix=''):
         for i, element in enumerate(value, 1):
-            element_prefix = '%s.%s' % (prefix, i)
+            element_prefix = f'{prefix}.{i}'
             element_shape = shape.member
             self._serialize(serialized, element, element_shape, element_prefix)
 
@@ -326,16 +355,21 @@ class JSONSerializer(Serializer):
     TIMESTAMP_FORMAT = 'unixtimestamp'
 
     def serialize_to_request(self, parameters, operation_model):
-        target = '%s.%s' % (operation_model.metadata['targetPrefix'],
-                            operation_model.name)
+        target = '{}.{}'.format(
+            operation_model.metadata['targetPrefix'],
+            operation_model.name,
+        )
         json_version = operation_model.metadata['jsonVersion']
         serialized = self._create_default_request()
-        serialized['method'] = operation_model.http.get('method',
-                                                        self.DEFAULT_METHOD)
+        serialized['method'] = operation_model.http.get(
+            'method', self.DEFAULT_METHOD
+        )
         serialized['headers'] = {
             'X-Amz-Target': target,
-            'Content-Type': 'application/x-amz-json-%s' % json_version,
+            'Content-Type': f'application/x-amz-json-{json_version}',
         }
+        self._handle_query_compatible_trait(operation_model, serialized)
+
         body = self.MAP_TYPE()
         input_shape = operation_model.input_shape
         if input_shape is not None:
@@ -349,8 +383,11 @@ class JSONSerializer(Serializer):
         return serialized
 
     def _serialize(self, serialized, value, shape, key=None):
-        method = getattr(self, '_serialize_type_%s' % shape.type_name,
-                         self._default_serialize)
+        method = getattr(
+            self,
+            f'_serialize_type_{shape.type_name}',
+            self._default_serialize,
+        )
         method(serialized, value, shape, key)
 
     def _serialize_type_structure(self, serialized, value, shape, key):
@@ -371,7 +408,9 @@ class JSONSerializer(Serializer):
                 member_shape = members[member_key]
                 if 'name' in member_shape.serialization:
                     member_key = member_shape.serialization['name']
-                self._serialize(serialized, member_value, member_shape, member_key)
+                self._serialize(
+                    serialized, member_value, member_shape, member_key
+                )
 
     def _serialize_type_map(self, serialized, value, shape, key):
         map_obj = self.MAP_TYPE()
@@ -396,11 +435,262 @@ class JSONSerializer(Serializer):
 
     def _serialize_type_timestamp(self, serialized, value, shape, key):
         serialized[key] = self._convert_timestamp_to_str(
-            value, shape.serialization.get('timestampFormat'))
+            value, shape.serialization.get('timestampFormat')
+        )
 
     def _serialize_type_blob(self, serialized, value, shape, key):
         serialized[key] = self._get_base64(value)
 
+    def _serialize_type_float(self, serialized, value, shape, prefix=''):
+        if isinstance(value, decimal.Decimal):
+            value = float(value)
+        serialized[prefix] = self._handle_float(value)
+
+    def _serialize_type_double(self, serialized, value, shape, prefix=''):
+        self._serialize_type_float(serialized, value, shape, prefix)
+
+
+class CBORSerializer(Serializer):
+    UNSIGNED_INT_MAJOR_TYPE = 0
+    NEGATIVE_INT_MAJOR_TYPE = 1
+    BLOB_MAJOR_TYPE = 2
+    STRING_MAJOR_TYPE = 3
+    LIST_MAJOR_TYPE = 4
+    MAP_MAJOR_TYPE = 5
+    TAG_MAJOR_TYPE = 6
+    FLOAT_AND_SIMPLE_MAJOR_TYPE = 7
+
+    def _serialize_data_item(self, serialized, value, shape, key=None):
+        method = getattr(self, f'_serialize_type_{shape.type_name}')
+        if method is None:
+            raise ValueError(
+                f"Unrecognized C2J type: {shape.type_name}, unable to "
+                f"serialize request"
+            )
+        method(serialized, value, shape, key)
+
+    def _serialize_type_integer(self, serialized, value, shape, key):
+        if value >= 0:
+            major_type = self.UNSIGNED_INT_MAJOR_TYPE
+        else:
+            major_type = self.NEGATIVE_INT_MAJOR_TYPE
+            # The only differences in serializing negative and positive integers is
+            # that for negative, we set the major type to 1 and set the value to -1
+            # minus the value
+            value = -1 - value
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            value
+        )
+        initial_byte = self._get_initial_byte(major_type, additional_info)
+        if num_bytes == 0:
+            serialized.extend(initial_byte)
+        else:
+            serialized.extend(initial_byte + value.to_bytes(num_bytes, "big"))
+
+    def _serialize_type_long(self, serialized, value, shape, key):
+        self._serialize_type_integer(serialized, value, shape, key)
+
+    def _serialize_type_blob(self, serialized, value, shape, key):
+        if isinstance(value, str):
+            value = value.encode('utf-8')
+        elif not isinstance(value, (bytes, bytearray)):
+            # We support file-like objects for blobs; these already have been
+            # validated to ensure they have a read method
+            value = value.read()
+        length = len(value)
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            length
+        )
+        initial_byte = self._get_initial_byte(
+            self.BLOB_MAJOR_TYPE, additional_info
+        )
+        if num_bytes == 0:
+            serialized.extend(initial_byte)
+        else:
+            serialized.extend(initial_byte + length.to_bytes(num_bytes, "big"))
+        serialized.extend(value)
+
+    def _serialize_type_string(self, serialized, value, shape, key):
+        encoded = value.encode('utf-8')
+        length = len(encoded)
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            length
+        )
+        initial_byte = self._get_initial_byte(
+            self.STRING_MAJOR_TYPE, additional_info
+        )
+        if num_bytes == 0:
+            serialized.extend(initial_byte + encoded)
+        else:
+            serialized.extend(
+                initial_byte + length.to_bytes(num_bytes, "big") + encoded
+            )
+
+    def _serialize_type_list(self, serialized, value, shape, key):
+        length = len(value)
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            length
+        )
+        initial_byte = self._get_initial_byte(
+            self.LIST_MAJOR_TYPE, additional_info
+        )
+        if num_bytes == 0:
+            serialized.extend(initial_byte)
+        else:
+            serialized.extend(initial_byte + length.to_bytes(num_bytes, "big"))
+        for item in value:
+            self._serialize_data_item(serialized, item, shape.member)
+
+    def _serialize_type_map(self, serialized, value, shape, key):
+        length = len(value)
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            length
+        )
+        initial_byte = self._get_initial_byte(
+            self.MAP_MAJOR_TYPE, additional_info
+        )
+        if num_bytes == 0:
+            serialized.extend(initial_byte)
+        else:
+            serialized.extend(initial_byte + length.to_bytes(num_bytes, "big"))
+        for key_item, item in value.items():
+            self._serialize_data_item(serialized, key_item, shape.key)
+            self._serialize_data_item(serialized, item, shape.value)
+
+    def _serialize_type_structure(self, serialized, value, shape, key):
+        if key is not None:
+            # For nested structures, we need to serialize the key first
+            self._serialize_data_item(serialized, key, shape.key_shape)
+
+        # Remove `None` values from the dictionary
+        value = {k: v for k, v in value.items() if v is not None}
+
+        map_length = len(value)
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            map_length
+        )
+        initial_byte = self._get_initial_byte(
+            self.MAP_MAJOR_TYPE, additional_info
+        )
+        if num_bytes == 0:
+            serialized.extend(initial_byte)
+        else:
+            serialized.extend(
+                initial_byte + map_length.to_bytes(num_bytes, "big")
+            )
+
+        members = shape.members
+        for member_key, member_value in value.items():
+            member_shape = members[member_key]
+            if 'name' in member_shape.serialization:
+                member_key = member_shape.serialization['name']
+            if member_value is not None:
+                self._serialize_type_string(serialized, member_key, None, None)
+                self._serialize_data_item(
+                    serialized, member_value, member_shape
+                )
+
+    def _serialize_type_timestamp(self, serialized, value, shape, key):
+        timestamp = self._convert_timestamp_to_str(value)
+        tag = 1  # Use tag 1 for unix timestamp
+        initial_byte = self._get_initial_byte(self.TAG_MAJOR_TYPE, tag)
+        serialized.extend(initial_byte)  # Tagging the timestamp
+        additional_info, num_bytes = self._get_additional_info_and_num_bytes(
+            timestamp
+        )
+
+        if num_bytes == 0:
+            initial_byte = self._get_initial_byte(
+                self.UNSIGNED_INT_MAJOR_TYPE, timestamp
+            )
+            serialized.extend(initial_byte)
+        else:
+            initial_byte = self._get_initial_byte(
+                self.UNSIGNED_INT_MAJOR_TYPE, additional_info
+            )
+            serialized.extend(
+                initial_byte + timestamp.to_bytes(num_bytes, "big")
+            )
+
+    def _serialize_type_float(self, serialized, value, shape, key):
+        if self._is_special_number(value):
+            serialized.extend(
+                self._get_bytes_for_special_numbers(value)
+            )  # Handle special values like NaN or Infinity
+        else:
+            initial_byte = self._get_initial_byte(
+                self.FLOAT_AND_SIMPLE_MAJOR_TYPE, 26
+            )
+            serialized.extend(initial_byte + struct.pack(">f", value))
+
+    def _serialize_type_double(self, serialized, value, shape, key):
+        if self._is_special_number(value):
+            serialized.extend(
+                self._get_bytes_for_special_numbers(value)
+            )  # Handle special values like NaN or Infinity
+        else:
+            initial_byte = self._get_initial_byte(
+                self.FLOAT_AND_SIMPLE_MAJOR_TYPE, 27
+            )
+            serialized.extend(initial_byte + struct.pack(">d", value))
+
+    def _serialize_type_boolean(self, serialized, value, shape, key):
+        additional_info = 21 if value else 20
+        serialized.extend(
+            self._get_initial_byte(
+                self.FLOAT_AND_SIMPLE_MAJOR_TYPE, additional_info
+            )
+        )
+
+    def _get_additional_info_and_num_bytes(self, value):
+        # Values under 24 can be stored in the initial byte and don't need further
+        # encoding
+        if value < 24:
+            return value, 0
+        # Values between 24 and 255 (inclusive) can be stored in 1 byte and
+        # correspond to additional info 24
+        elif value < 256:
+            return 24, 1
+        # Values up to 65535 can be stored in two bytes and correspond to additional
+        # info 25
+        elif value < 65536:
+            return 25, 2
+        # Values up to 4294967296 can be stored in four bytes and correspond to
+        # additional info 26
+        elif value < 4294967296:
+            return 26, 4
+        # The maximum number of bytes in a definite length data items is 8 which
+        # to additional info 27
+        else:
+            return 27, 8
+
+    def _get_initial_byte(self, major_type, additional_info):
+        # The highest order three bits are the major type, so we need to bitshift the
+        # major type by 5
+        major_type_bytes = major_type << 5
+        return (major_type_bytes | additional_info).to_bytes(1, "big")
+
+    def _is_special_number(self, value):
+        return any(
+            [
+                value == float('inf'),
+                value == float('-inf'),
+                math.isnan(value),
+            ]
+        )
+
+    def _get_bytes_for_special_numbers(self, value):
+        additional_info = 25
+        initial_byte = self._get_initial_byte(
+            self.FLOAT_AND_SIMPLE_MAJOR_TYPE, additional_info
+        )
+        if value == float('inf'):
+            return initial_byte + struct.pack(">H", 0x7C00)
+        elif value == float('-inf'):
+            return initial_byte + struct.pack(">H", 0xFC00)
+        elif math.isnan(value):
+            return initial_byte + struct.pack(">H", 0x7E00)
+
 
 class BaseRestSerializer(Serializer):
     """Base class for rest protocols.
@@ -412,6 +702,7 @@ class BaseRestSerializer(Serializer):
     Subclasses must implement the ``_serialize_body_params`` method.
 
     """
+
     QUERY_STRING_TIMESTAMP_FORMAT = 'iso8601'
     HEADER_TIMESTAMP_FORMAT = 'rfc822'
     # This is a list of known values for the "location" key in the
@@ -421,9 +712,15 @@ class BaseRestSerializer(Serializer):
 
     def serialize_to_request(self, parameters, operation_model):
         serialized = self._create_default_request()
-        serialized['method'] = operation_model.http.get('method',
-                                                        self.DEFAULT_METHOD)
+        serialized['method'] = operation_model.http.get(
+            'method', self.DEFAULT_METHOD
+        )
         shape = operation_model.input_shape
+
+        host_prefix = self._expand_host_prefix(parameters, operation_model)
+        if host_prefix is not None:
+            serialized['host_prefix'] = host_prefix
+
         if shape is None:
             serialized['url_path'] = operation_model.http['requestUri']
             return serialized
@@ -448,11 +745,12 @@ class BaseRestSerializer(Serializer):
             if param_value is None:
                 # Don't serialize any parameter with a None value.
                 continue
-            self._partition_parameters(partitioned, param_name, param_value,
-                                       shape_members)
+            self._partition_parameters(
+                partitioned, param_name, param_value, shape_members
+            )
         serialized['url_path'] = self._render_uri_template(
-            operation_model.http['requestUri'],
-            partitioned['uri_path_kwargs'])
+            operation_model.http['requestUri'], partitioned['uri_path_kwargs']
+        )
 
         if 'authPath' in operation_model.http:
             serialized['auth_path'] = self._render_uri_template(
@@ -465,14 +763,11 @@ class BaseRestSerializer(Serializer):
         serialized['query_string'] = partitioned['query_string_kwargs']
         if partitioned['headers']:
             serialized['headers'] = partitioned['headers']
-        self._serialize_payload(partitioned, parameters,
-                                serialized, shape, shape_members)
+        self._serialize_payload(
+            partitioned, parameters, serialized, shape, shape_members
+        )
         self._serialize_content_type(serialized, shape, shape_members)
 
-        host_prefix = self._expand_host_prefix(parameters, operation_model)
-        if host_prefix is not None:
-            serialized['host_prefix'] = host_prefix
-
         return serialized
 
     def _render_uri_template(self, uri_template, params):
@@ -486,14 +781,17 @@ class BaseRestSerializer(Serializer):
         for template_param in re.findall(r'{(.*?)}', uri_template):
             if template_param.endswith('+'):
                 encoded_params[template_param] = percent_encode(
-                    params[template_param[:-1]], safe='/~')
+                    params[template_param[:-1]], safe='/~'
+                )
             else:
                 encoded_params[template_param] = percent_encode(
-                    params[template_param])
+                    params[template_param]
+                )
         return uri_template.format(**encoded_params)
 
-    def _serialize_payload(self, partitioned, parameters,
-                           serialized, shape, shape_members):
+    def _serialize_payload(
+        self, partitioned, parameters, serialized, shape, shape_members
+    ):
         # partitioned - The user input params partitioned by location.
         # parameters - The user input params.
         # serialized - The final serialized request dict.
@@ -512,13 +810,14 @@ class BaseRestSerializer(Serializer):
             body_params = parameters.get(payload_member)
             if body_params is not None:
                 serialized['body'] = self._serialize_body_params(
-                    body_params,
-                    shape_members[payload_member])
+                    body_params, shape_members[payload_member]
+                )
             else:
                 serialized['body'] = self._serialize_empty_body()
         elif partitioned['body_kwargs']:
             serialized['body'] = self._serialize_body_params(
-                partitioned['body_kwargs'], shape)
+                partitioned['body_kwargs'], shape
+            )
         elif self._requires_empty_body(shape):
             serialized['body'] = self._serialize_empty_body()
 
@@ -542,18 +841,19 @@ class BaseRestSerializer(Serializer):
 
     def _has_streaming_payload(self, payload, shape_members):
         """Determine if payload is streaming (a blob or string)."""
-        return (
-            payload is not None and
-            shape_members[payload].type_name in ['blob', 'string']
-        )
+        return payload is not None and shape_members[payload].type_name in [
+            'blob',
+            'string',
+        ]
 
     def _encode_payload(self, body):
         if isinstance(body, str):
             return body.encode(self.DEFAULT_ENCODING)
         return body
 
-    def _partition_parameters(self, partitioned, param_name,
-                              param_value, shape_members):
+    def _partition_parameters(
+        self, partitioned, param_name, param_value, shape_members
+    ):
         # This takes the user provided input parameter (``param``)
         # and figures out where they go in the request dict.
         # Some params are HTTP headers, some are used in the URI, some
@@ -562,29 +862,32 @@ class BaseRestSerializer(Serializer):
         location = member.serialization.get('location')
         key_name = member.serialization.get('name', param_name)
         if location == 'uri':
-            partitioned['uri_path_kwargs'][key_name] = param_value
+            uri_path_value = self._get_uri_and_query_string_value(
+                param_value, member
+            )
+            partitioned['uri_path_kwargs'][key_name] = uri_path_value
         elif location == 'querystring':
             if isinstance(param_value, dict):
                 partitioned['query_string_kwargs'].update(param_value)
-            elif isinstance(param_value, bool):
-                partitioned['query_string_kwargs'][
-                    key_name] = str(param_value).lower()
-            elif member.type_name == 'timestamp':
-                timestamp_format = member.serialization.get(
-                    'timestampFormat', self.QUERY_STRING_TIMESTAMP_FORMAT)
-                partitioned['query_string_kwargs'][
-                    key_name] = self._convert_timestamp_to_str(
-                        param_value, timestamp_format
-                    )
+            elif member.type_name == 'list':
+                new_param = [
+                    self._get_uri_and_query_string_value(value, member.member)
+                    for value in param_value
+                ]
+                partitioned['query_string_kwargs'][key_name] = new_param
             else:
-                partitioned['query_string_kwargs'][key_name] = param_value
+                new_param = self._get_uri_and_query_string_value(
+                    param_value, member
+                )
+                partitioned['query_string_kwargs'][key_name] = new_param
         elif location == 'header':
             shape = shape_members[param_name]
             if not param_value and shape.type_name == 'list':
                 # Empty lists should not be set on the headers
                 return
-            value = self._convert_header_value(shape, param_value)
-            partitioned['headers'][key_name] = str(value)
+            partitioned['headers'][key_name] = self._convert_header_value(
+                shape, param_value
+            )
         elif location == 'headers':
             # 'headers' is a bit of an oddball.  The ``key_name``
             # is actually really a prefix for the header names:
@@ -593,12 +896,26 @@ class BaseRestSerializer(Serializer):
             # creating multiple header key/val pairs.  The key
             # name to use for each header is the header_prefix (``key_name``)
             # plus the key provided by the user.
-            self._do_serialize_header_map(header_prefix,
-                                          partitioned['headers'],
-                                          param_value)
+            self._do_serialize_header_map(
+                header_prefix, partitioned['headers'], param_value
+            )
         else:
             partitioned['body_kwargs'][param_name] = param_value
 
+    def _get_uri_and_query_string_value(self, param_value, member):
+        if member.type_name == 'boolean':
+            return str(param_value).lower()
+        elif member.type_name == 'timestamp':
+            timestamp_format = member.serialization.get(
+                'timestampFormat', self.QUERY_STRING_TIMESTAMP_FORMAT
+            )
+            return self._convert_timestamp_to_str(
+                param_value, timestamp_format
+            )
+        elif member.type_name in ['float', 'double']:
+            return str(self._handle_float(param_value))
+        return param_value
+
     def _do_serialize_header_map(self, header_prefix, headers, user_input):
         for key, val in user_input.items():
             full_key = header_prefix + key
@@ -612,24 +929,82 @@ class BaseRestSerializer(Serializer):
             datetime_obj = parse_to_aware_datetime(value)
             timestamp = calendar.timegm(datetime_obj.utctimetuple())
             timestamp_format = shape.serialization.get(
-                'timestampFormat', self.HEADER_TIMESTAMP_FORMAT)
-            return self._convert_timestamp_to_str(timestamp, timestamp_format)
+                'timestampFormat', self.HEADER_TIMESTAMP_FORMAT
+            )
+            return str(
+                self._convert_timestamp_to_str(timestamp, timestamp_format)
+            )
         elif shape.type_name == 'list':
-            converted_value = [
-                self._convert_header_value(shape.member, v)
-                for v in value if v is not None
-            ]
+            if shape.member.type_name == "string":
+                converted_value = [
+                    self._escape_header_list_string(v)
+                    for v in value
+                    if v is not None
+                ]
+            else:
+                converted_value = [
+                    self._convert_header_value(shape.member, v)
+                    for v in value
+                    if v is not None
+                ]
             return ",".join(converted_value)
         elif is_json_value_header(shape):
             # Serialize with no spaces after separators to save space in
             # the header.
             return self._get_base64(json.dumps(value, separators=(',', ':')))
+        elif shape.type_name == 'boolean':
+            return str(value).lower()
+        elif shape.type_name in ['float', 'double']:
+            return str(self._handle_float(value))
+        else:
+            return str(value)
+
+    def _escape_header_list_string(self, value):
+        # Escapes a header list string by wrapping it in double quotes if it contains
+        # a comma or a double quote, and escapes any internal double quotes.
+        if '"' in value or ',' in value:
+            return '"' + value.replace('"', '\\"') + '"'
         else:
             return value
 
 
-class RestJSONSerializer(BaseRestSerializer, JSONSerializer):
+class BaseRpcV2Serializer(Serializer):
+    """Base class for RPCv2 protocols.
+    The only variance between the various RPCv2 protocols is the
+    way that the body is serialized.  All other aspects (headers, uri, etc.)
+    are the same and logic for serializing those aspects lives here.
+    Subclasses must implement the ``_serialize_body_params``  and
+    ``_serialize_headers`` methods.
+    """
+
+    def serialize_to_request(self, parameters, operation_model):
+        serialized = self._create_default_request()
+        service_name = operation_model.service_model.metadata['targetPrefix']
+        operation_name = operation_model.name
+        serialized['url_path'] = (
+            f'/service/{service_name}/operation/{operation_name}'
+        )
+
+        input_shape = operation_model.input_shape
+        if input_shape is not None:
+            self._serialize_payload(parameters, serialized, input_shape)
+
+        self._serialize_headers(serialized, operation_model)
+
+        return serialized
+
+    def _serialize_payload(self, parameters, serialized, shape):
+        body_payload = self._serialize_body_params(parameters, shape)
+        serialized['body'] = body_payload
 
+    def _serialize_headers(self, serialized, operation_model):
+        raise NotImplementedError("_serialize_headers")
+
+    def _serialize_body_params(self, parameters, shape):
+        raise NotImplementedError("_serialize_body_params")
+
+
+class RestJSONSerializer(BaseRestSerializer, JSONSerializer):
     def _serialize_empty_body(self):
         return b'{}'
 
@@ -672,19 +1047,17 @@ class RestXMLSerializer(BaseRestSerializ
         return ElementTree.tostring(real_root, encoding=self.DEFAULT_ENCODING)
 
     def _serialize(self, shape, params, xmlnode, name):
-        method = getattr(self, '_serialize_type_%s' % shape.type_name,
-                         self._default_serialize)
+        method = getattr(
+            self,
+            f'_serialize_type_{shape.type_name}',
+            self._default_serialize,
+        )
         method(xmlnode, params, shape, name)
 
     def _serialize_type_structure(self, xmlnode, params, shape, name):
         structure_node = ElementTree.SubElement(xmlnode, name)
 
-        if 'xmlNamespace' in shape.serialization:
-            namespace_metadata = shape.serialization['xmlNamespace']
-            attribute_name = 'xmlns'
-            if namespace_metadata.get('prefix'):
-                attribute_name += ':%s' % namespace_metadata['prefix']
-            structure_node.attrib[attribute_name] = namespace_metadata['uri']
+        self._add_xml_namespace(shape, structure_node)
         for key, value in params.items():
             member_shape = shape.members[key]
             member_name = member_shape.serialization.get('name', key)
@@ -710,6 +1083,7 @@ class RestXMLSerializer(BaseRestSerializ
         else:
             element_name = member_shape.serialization.get('name', 'member')
             list_node = ElementTree.SubElement(xmlnode, name)
+        self._add_xml_namespace(shape, list_node)
         for item in params:
             self._serialize(member_shape, item, list_node, element_name)
 
@@ -722,15 +1096,22 @@ class RestXMLSerializer(BaseRestSerializ
         #       <value>val1</value>
         #     </entry>
         #  </MyMap>
-        node = ElementTree.SubElement(xmlnode, name)
-        # TODO: handle flattened maps.
+        if not self._is_shape_flattened(shape):
+            node = ElementTree.SubElement(xmlnode, name)
+            self._add_xml_namespace(shape, node)
+
         for key, value in params.items():
-            entry_node = ElementTree.SubElement(node, 'entry')
+            sub_node = (
+                ElementTree.SubElement(xmlnode, name)
+                if self._is_shape_flattened(shape)
+                else ElementTree.SubElement(node, 'entry')
+            )
             key_name = self._get_serialized_name(shape.key, default_name='key')
-            val_name = self._get_serialized_name(shape.value,
-                                                 default_name='value')
-            self._serialize(shape.key, key, entry_node, key_name)
-            self._serialize(shape.value, value, entry_node, val_name)
+            val_name = self._get_serialized_name(
+                shape.value, default_name='value'
+            )
+            self._serialize(shape.key, key, sub_node, key_name)
+            self._serialize(shape.value, value, sub_node, val_name)
 
     def _serialize_type_boolean(self, xmlnode, params, shape, name):
         # For scalar types, the 'params' attr is actually just a scalar
@@ -742,19 +1123,76 @@ class RestXMLSerializer(BaseRestSerializ
         else:
             str_value = 'false'
         node.text = str_value
+        self._add_xml_namespace(shape, node)
 
     def _serialize_type_blob(self, xmlnode, params, shape, name):
         node = ElementTree.SubElement(xmlnode, name)
         node.text = self._get_base64(params)
+        self._add_xml_namespace(shape, node)
 
     def _serialize_type_timestamp(self, xmlnode, params, shape, name):
         node = ElementTree.SubElement(xmlnode, name)
-        node.text = self._convert_timestamp_to_str(
-            params, shape.serialization.get('timestampFormat'))
+        node.text = str(
+            self._convert_timestamp_to_str(
+                params, shape.serialization.get('timestampFormat')
+            )
+        )
+        self._add_xml_namespace(shape, node)
+
+    def _serialize_type_float(self, xmlnode, params, shape, name):
+        node = ElementTree.SubElement(xmlnode, name)
+        node.text = str(self._handle_float(params))
+        self._add_xml_namespace(shape, node)
+
+    def _serialize_type_double(self, xmlnode, params, shape, name):
+        self._serialize_type_float(xmlnode, params, shape, name)
 
     def _default_serialize(self, xmlnode, params, shape, name):
         node = ElementTree.SubElement(xmlnode, name)
         node.text = str(params)
+        self._add_xml_namespace(shape, node)
+
+    def _add_xml_namespace(self, shape, structure_node):
+        if 'xmlNamespace' in shape.serialization:
+            namespace_metadata = shape.serialization['xmlNamespace']
+            attribute_name = 'xmlns'
+            if isinstance(namespace_metadata, dict):
+                if namespace_metadata.get('prefix'):
+                    attribute_name += f":{namespace_metadata['prefix']}"
+                structure_node.attrib[attribute_name] = namespace_metadata[
+                    'uri'
+                ]
+            elif isinstance(namespace_metadata, str):
+                structure_node.attrib[attribute_name] = namespace_metadata
+
+
+class RpcV2CBORSerializer(BaseRpcV2Serializer, CBORSerializer):
+    TIMESTAMP_FORMAT = 'unixtimestamp'
+
+    def serialize_to_request(self, parameters, operation_model):
+        register_feature_id('PROTOCOL_RPC_V2_CBOR')
+        return super().serialize_to_request(parameters, operation_model)
+
+    def _serialize_body_params(self, parameters, input_shape):
+        body = bytearray()
+        self._serialize_data_item(body, parameters, input_shape)
+        return bytes(body)
+
+    def _serialize_headers(self, serialized, operation_model):
+        serialized['headers']['smithy-protocol'] = 'rpc-v2-cbor'
+
+        if operation_model.has_event_stream_output:
+            header_val = 'application/vnd.amazon.eventstream'
+        else:
+            header_val = 'application/cbor'
+        self._handle_query_compatible_trait(operation_model, serialized)
+
+        has_body = serialized['body'] != b''
+        has_content_type = has_header('Content-Type', serialized['headers'])
+
+        serialized['headers']['Accept'] = header_val
+        if not has_content_type and has_body:
+            serialized['headers']['Content-Type'] = header_val
 
 
 SERIALIZERS = {
@@ -763,4 +1201,5 @@ SERIALIZERS = {
     'json': JSONSerializer,
     'rest-json': RestJSONSerializer,
     'rest-xml': RestXMLSerializer,
+    'smithy-rpc-v2-cbor': RpcV2CBORSerializer,
 }
diff -pruN 2.23.6-1/awscli/botocore/session.py 2.31.35-1/awscli/botocore/session.py
--- 2.23.6-1/awscli/botocore/session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/session.py	2025-11-12 19:17:29.000000000 +0000
@@ -45,6 +45,7 @@ from botocore.configprovider import (
     ConfigValueStore,
     create_botocore_default_config_mapping,
 )
+from botocore.context import get_context, with_current_context
 from botocore.errorfactory import ClientExceptionsFactory
 from botocore.exceptions import (
     ConfigNotFound,
@@ -57,13 +58,12 @@ from botocore.loaders import create_load
 from botocore.model import ServiceModel
 from botocore.parsers import ResponseParserFactory
 from botocore.regions import EndpointResolver
-from botocore.useragent import UserAgentString
-
+from botocore.useragent import UserAgentString, register_feature_id
 
 logger = logging.getLogger(__name__)
 
 
-class Session(object):
+class Session:
     """
     The Session object collects together useful functionality
     from `botocore` as well as important data such as configuration
@@ -79,8 +79,13 @@ class Session(object):
     #: The default format string to use when configuring the botocore logger.
     LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
 
-    def __init__(self, session_vars=None, event_hooks=None,
-                 include_builtin_handlers=True, profile=None):
+    def __init__(
+        self,
+        session_vars=None,
+        event_hooks=None,
+        include_builtin_handlers=True,
+        profile=None,
+    ):
         """
         Create a new Session object.
 
@@ -161,7 +166,8 @@ class Session(object):
 
     def _register_credential_provider(self):
         self._components.lazy_register_component(
-            'credential_provider', self._create_credential_resolver)
+            'credential_provider', self._create_credential_resolver
+        )
 
     def _create_credential_resolver(self):
         return botocore.credentials.create_credential_resolver(
@@ -171,7 +177,8 @@ class Session(object):
     def _register_data_loader(self):
         self._components.lazy_register_component(
             'data_loader',
-            lambda:  create_loader(self.get_config_variable('data_path')))
+            lambda: create_loader(self.get_config_variable('data_path')),
+        )
 
     def _register_endpoint_resolver(self):
         def create_default_resolver():
@@ -179,16 +186,20 @@ class Session(object):
             endpoints, path = loader.load_data_with_path('endpoints')
             uses_builtin = loader.is_builtin_path(path)
             return EndpointResolver(endpoints, uses_builtin_data=uses_builtin)
+
         self._internal_components.lazy_register_component(
-            'endpoint_resolver', create_default_resolver)
+            'endpoint_resolver', create_default_resolver
+        )
 
     def _register_response_parser_factory(self):
-        self._components.register_component('response_parser_factory',
-                                            ResponseParserFactory())
+        self._components.register_component(
+            'response_parser_factory', ResponseParserFactory()
+        )
 
     def _register_exceptions_factory(self):
         self._internal_components.register_component(
-            'exceptions_factory', ClientExceptionsFactory())
+            'exceptions_factory', ClientExceptionsFactory()
+        )
 
     def _register_builtin_handlers(self, events):
         for spec in handlers.BUILTIN_HANDLERS:
@@ -206,12 +217,14 @@ class Session(object):
         config_store_component = ConfigValueStore(
             mapping=create_botocore_default_config_mapping(self)
         )
-        self._components.register_component('config_store',
-                                            config_store_component)
+        self._components.register_component(
+            'config_store', config_store_component
+        )
 
     def _register_monitor(self):
         self._internal_components.lazy_register_component(
-            'monitor', self._create_csm_monitor)
+            'monitor', self._create_csm_monitor
+        )
 
     def _register_user_agent_creator(self):
         uas = UserAgentString.from_environment()
@@ -229,8 +242,9 @@ class Session(object):
                     host=host,
                     port=port,
                     serializer=monitoring.CSMSerializer(
-                        csm_client_id=client_id)
-                )
+                        csm_client_id=client_id
+                    ),
+                ),
             )
             return handler
         return None
@@ -261,9 +275,11 @@ class Session(object):
     def get_config_variable(self, logical_name, methods=None):
         if methods is not None:
             return self._get_config_variable_with_custom_methods(
-                logical_name, methods)
+                logical_name, methods
+            )
         return self.get_component('config_store').get_config_variable(
-            logical_name)
+            logical_name
+        )
 
     def _get_config_variable_with_custom_methods(self, logical_name, methods):
         # If a custom list of methods was supplied we need to perserve the
@@ -289,9 +305,7 @@ class Session(object):
             mapping[name] = chain_builder.create_config_chain(
                 **build_chain_config_args
             )
-        config_store_component = ConfigValueStore(
-            mapping=mapping
-        )
+        config_store_component = ConfigValueStore(mapping=mapping)
         value = config_store_component.get_config_variable(logical_name)
         return value
 
@@ -390,7 +404,8 @@ class Session(object):
                 # profile.
                 cred_file = self.get_config_variable('credentials_file')
                 cred_profiles = botocore.configloader.raw_config_parse(
-                    cred_file)
+                    cred_file
+                )
                 for profile in cred_profiles:
                     cred_vars = cred_profiles[profile]
                     if profile not in self._config['profiles']:
@@ -421,7 +436,9 @@ class Session(object):
         """
         self._client_config = client_config
 
-    def set_credentials(self, access_key, secret_key, token=None):
+    def set_credentials(
+        self, access_key, secret_key, token=None, account_id=None
+    ):
         """
         Manually create credentials for this session.  If you would
         prefer to use botocore without a config file, environment variables,
@@ -437,10 +454,13 @@ class Session(object):
         :type token: str
         :param token: An option session token used by STS session
             credentials.
+
+        :type account_id: str
+        :param account_id: An optional account ID part of the credentials.
         """
-        self._credentials = botocore.credentials.Credentials(access_key,
-                                                             secret_key,
-                                                             token)
+        self._credentials = botocore.credentials.Credentials(
+            access_key, secret_key, token, account_id=account_id
+        )
 
     def get_credentials(self):
         """
@@ -453,10 +473,11 @@ class Session(object):
         """
         if self._credentials is None:
             self._credentials = self._components.get_component(
-                'credential_provider').load_credentials()
+                'credential_provider'
+            ).load_credentials()
         return self._credentials
 
-    def get_auth_token(self):
+    def get_auth_token(self, **kwargs):
         """
         Return the :class:`botocore.tokens.AuthToken` object associated with
         this session. If the authorization token has not yet been loaded, this
@@ -464,8 +485,15 @@ class Session(object):
         return the cached authorization token.
 
         """
+        provider = self._components.get_component('token_provider')
+
+        signing_name = kwargs.get('signing_name')
+        if signing_name is not None:
+            auth_token = provider.load_token(signing_name=signing_name)
+            if auth_token is not None:
+                return auth_token
+
         if self._auth_token is None:
-            provider = self._components.get_component('token_provider')
             self._auth_token = provider.load_token()
         return self._auth_token
 
@@ -496,16 +524,12 @@ class Session(object):
 
         """
         if truncate:
-            return '%s/%s' % (self.user_agent_name, self.user_agent_version)
-        base = '%s/%s Python/%s %s/%s' % (self.user_agent_name,
-                                          self.user_agent_version,
-                                          platform.python_version(),
-                                          platform.system(),
-                                          platform.release())
+            return f'{self.user_agent_name}/{self.user_agent_version}'
+        base = f'{self.user_agent_name}/{self.user_agent_version} Python/{platform.python_version()} {platform.system()}/{platform.release()}'
         if os.environ.get('AWS_EXECUTION_ENV') is not None:
-            base += ' exec-env/%s' % os.environ.get('AWS_EXECUTION_ENV')
+            base += ' exec-env/{}'.format(os.environ.get('AWS_EXECUTION_ENV'))
         if self.user_agent_extra:
-            base += ' %s' % self.user_agent_extra
+            base += f' {self.user_agent_extra}'
 
         return base
 
@@ -533,14 +557,14 @@ class Session(object):
 
     def get_waiter_model(self, service_name):
         loader = self.get_component('data_loader')
-        waiter_config = loader.load_service_model(
-            service_name, 'waiters-2')
+        waiter_config = loader.load_service_model(service_name, 'waiters-2')
         return waiter.WaiterModel(waiter_config)
 
     def get_paginator_model(self, service_name):
         loader = self.get_component('data_loader')
         paginator_config = loader.load_service_model(
-            service_name, 'paginators-1')
+            service_name, 'paginators-1'
+        )
         return paginate.PaginatorModel(paginator_config)
 
     def get_service_data(self, service_name):
@@ -558,8 +582,9 @@ class Session(object):
         """
         Return a list of names of available services.
         """
-        return self.get_component('data_loader')\
-            .list_available_services(type_name='service-2')
+        return self.get_component('data_loader').list_available_services(
+            type_name='service-2'
+        )
 
     def set_debug_logger(self, logger_name='botocore'):
         """
@@ -568,8 +593,9 @@ class Session(object):
         """
         self.set_stream_logger(logger_name, logging.DEBUG)
 
-    def set_stream_logger(self, logger_name, log_level, stream=None,
-                          format_string=None):
+    def set_stream_logger(
+        self, logger_name, log_level, stream=None, format_string=None
+    ):
         """
         Convenience method to configure a stream logger.
 
@@ -636,8 +662,9 @@ class Session(object):
         # add ch to logger
         log.addHandler(ch)
 
-    def register(self, event_name, handler, unique_id=None,
-                 unique_id_uses_count=False):
+    def register(
+        self, event_name, handler, unique_id=None, unique_id_uses_count=False
+    ):
         """Register a handler with an event.
 
         :type event_name: str
@@ -670,11 +697,20 @@ class Session(object):
             ``unique_id_uses_count`` value declared by the very first
             ``register`` call for that ``unique_id``.
         """
-        self._events.register(event_name, handler, unique_id,
-                              unique_id_uses_count=unique_id_uses_count)
+        self._events.register(
+            event_name,
+            handler,
+            unique_id,
+            unique_id_uses_count=unique_id_uses_count,
+        )
 
-    def unregister(self, event_name, handler=None, unique_id=None,
-                   unique_id_uses_count=False):
+    def unregister(
+        self,
+        event_name,
+        handler=None,
+        unique_id=None,
+        unique_id_uses_count=False,
+    ):
         """Unregister a handler with an event.
 
         :type event_name: str
@@ -703,9 +739,12 @@ class Session(object):
             ``unique_id_uses_count`` value declared by the very first
             ``register`` call for that ``unique_id``.
         """
-        self._events.unregister(event_name, handler=handler,
-                                unique_id=unique_id,
-                                unique_id_uses_count=unique_id_uses_count)
+        self._events.unregister(
+            event_name,
+            handler=handler,
+            unique_id=unique_id,
+            unique_id_uses_count=unique_id_uses_count,
+        )
 
     def emit(self, event_name, **kwargs):
         return self._events.emit(event_name, **kwargs)
@@ -720,10 +759,11 @@ class Session(object):
         except ValueError:
             if name in ['endpoint_resolver', 'exceptions_factory']:
                 warnings.warn(
-                    'Fetching the %s component with the get_component() '
+                    f'Fetching the {name} component with the get_component() '
                     'method is deprecated as the component has always been '
-                    'considered an internal interface of botocore' % name,
-                    DeprecationWarning)
+                    'considered an internal interface of botocore',
+                    DeprecationWarning,
+                )
                 return self._internal_components.get_component(name)
             raise
 
@@ -745,10 +785,20 @@ class Session(object):
     def lazy_register_component(self, name, component):
         self._components.lazy_register_component(name, component)
 
-    def create_client(self, service_name, region_name=None,
-                      use_ssl=True, verify=None, endpoint_url=None,
-                      aws_access_key_id=None, aws_secret_access_key=None,
-                      aws_session_token=None, config=None):
+    @with_current_context()
+    def create_client(
+        self,
+        service_name,
+        region_name=None,
+        use_ssl=True,
+        verify=None,
+        endpoint_url=None,
+        aws_access_key_id=None,
+        aws_secret_access_key=None,
+        aws_session_token=None,
+        config=None,
+        aws_account_id=None,
+    ):
         """Create a botocore client.
 
         :type service_name: string
@@ -808,6 +858,10 @@ class Session(object):
             the client will be the result of calling ``merge()`` on the
             default config with the config provided to this call.
 
+        :type aws_account_id: string
+        :param aws_account_id: The account id to use when creating
+            the client.  Same semantics as aws_access_key_id above.
+
         :rtype: botocore.client.BaseClient
         :return: A botocore client instance
 
@@ -831,23 +885,36 @@ class Session(object):
 
         loader = self.get_component('data_loader')
         event_emitter = self.get_component('event_emitter')
-        response_parser_factory = self.get_component(
-            'response_parser_factory')
+        response_parser_factory = self.get_component('response_parser_factory')
         if config is not None and config.signature_version is UNSIGNED:
             credentials = None
-        elif aws_access_key_id is not None and aws_secret_access_key is not None:
+        elif (
+            aws_access_key_id is not None and aws_secret_access_key is not None
+        ):
             credentials = botocore.credentials.Credentials(
                 access_key=aws_access_key_id,
                 secret_key=aws_secret_access_key,
-                token=aws_session_token)
-        elif self._missing_cred_vars(aws_access_key_id,
-                                     aws_secret_access_key):
+                token=aws_session_token,
+                account_id=aws_account_id,
+            )
+        elif self._missing_cred_vars(aws_access_key_id, aws_secret_access_key):
             raise PartialCredentialsError(
                 provider='explicit',
-                cred_var=self._missing_cred_vars(aws_access_key_id,
-                                                 aws_secret_access_key))
+                cred_var=self._missing_cred_vars(
+                    aws_access_key_id, aws_secret_access_key
+                ),
+            )
         else:
+            if ignored_credentials := self._get_ignored_credentials(
+                aws_session_token, aws_account_id
+            ):
+                logger.debug(
+                    f"Ignoring the following credential-related values which were set without "
+                    f"an access key id and secret key on the session or client: {ignored_credentials}"
+                )
             credentials = self.get_credentials()
+        if getattr(credentials, 'method', None) == 'explicit':
+            register_feature_id('CREDENTIALS_CODE')
         auth_token = self.get_auth_token()
         endpoint_resolver = self._get_internal_component('endpoint_resolver')
         exceptions_factory = self._get_internal_component('exceptions_factory')
@@ -866,15 +933,30 @@ class Session(object):
             config_store=config_store,
         )
 
+        user_agent_creator.set_client_features(get_context().features)
+
         client_creator = botocore.client.ClientCreator(
-            loader, endpoint_resolver, self.user_agent(), event_emitter,
-            response_parser_factory, exceptions_factory, config_store,
-            user_agent_creator=user_agent_creator)
+            loader,
+            endpoint_resolver,
+            self.user_agent(),
+            event_emitter,
+            response_parser_factory,
+            exceptions_factory,
+            config_store,
+            user_agent_creator=user_agent_creator,
+            auth_token_resolver=self.get_auth_token,
+        )
         client = client_creator.create_client(
-            service_name=service_name, region_name=region_name,
-            is_secure=use_ssl, endpoint_url=endpoint_url, verify=verify,
-            credentials=credentials, scoped_config=self.get_scoped_config(),
-            client_config=config, auth_token=auth_token)
+            service_name=service_name,
+            region_name=region_name,
+            is_secure=use_ssl,
+            endpoint_url=endpoint_url,
+            verify=verify,
+            credentials=credentials,
+            scoped_config=self.get_scoped_config(),
+            client_config=config,
+            auth_token=auth_token,
+        )
         monitor = self._get_internal_component('monitor')
         if monitor is not None:
             monitor.register(client.meta.events)
@@ -929,8 +1011,9 @@ class Session(object):
         resolver = self._get_internal_component('endpoint_resolver')
         return resolver.get_available_partitions()
 
-    def get_available_regions(self, service_name, partition_name='aws',
-                              allow_non_regional=False):
+    def get_available_regions(
+        self, service_name, partition_name='aws', allow_non_regional=False
+    ):
         """Lists the region and endpoint names of a particular partition.
 
         :type service_name: string
@@ -954,16 +1037,27 @@ class Session(object):
         try:
             service_data = self.get_service_data(service_name)
             endpoint_prefix = service_data['metadata'].get(
-                'endpointPrefix', service_name)
+                'endpointPrefix', service_name
+            )
             results = resolver.get_available_endpoints(
-                endpoint_prefix, partition_name, allow_non_regional)
+                endpoint_prefix, partition_name, allow_non_regional
+            )
         except UnknownServiceError:
             pass
         return results
 
+    def _get_ignored_credentials(self, aws_session_token, aws_account_id):
+        credential_inputs = []
+        if aws_session_token:
+            credential_inputs.append('aws_session_token')
+        if aws_account_id:
+            credential_inputs.append('aws_account_id')
+        return ', '.join(credential_inputs) if credential_inputs else None
 
-class ComponentLocator(object):
+
+class ComponentLocator:
     """Service locator for session components."""
+
     def __init__(self):
         self._components = {}
         self._deferred = {}
@@ -979,7 +1073,7 @@ class ComponentLocator(object):
         try:
             return self._components[name]
         except KeyError:
-            raise ValueError("Unknown component: %s" % name)
+            raise ValueError(f"Unknown component: {name}")
 
     def register_component(self, name, component):
         self._components[name] = component
@@ -1017,8 +1111,9 @@ class SessionVarDict(MutableMapping):
     def __len__(self):
         return len(self._store)
 
-    def _update_config_store_from_session_vars(self, logical_name,
-                                               config_options):
+    def _update_config_store_from_session_vars(
+        self, logical_name, config_options
+    ):
         # This is for backwards compatibility. The new preferred way to
         # modify configuration logic is to use the component system to get
         # the config_store component from the session, and then update
@@ -1037,11 +1132,11 @@ class SessionVarDict(MutableMapping):
                 config_property_names=config_name,
                 default=default,
                 conversion_func=typecast,
-            )
+            ),
         )
 
 
-class SubsetChainConfigFactory(object):
+class SubsetChainConfigFactory:
     """A class for creating backwards compatible configuration chains.
 
     This class can be used instead of
@@ -1050,13 +1145,19 @@ class SubsetChainConfigFactory(object):
     out providers that are not in the methods tuple when creating a new config
     chain.
     """
+
     def __init__(self, session, methods, environ=None):
         self._factory = ConfigChainFactory(session, environ)
         self._supported_methods = methods
 
-    def create_config_chain(self, instance_name=None, env_var_names=None,
-                            config_property_name=None, default=None,
-                            conversion_func=None):
+    def create_config_chain(
+        self,
+        instance_name=None,
+        env_var_names=None,
+        config_property_name=None,
+        default=None,
+        conversion_func=None,
+    ):
         """Build a config chain following the standard botocore pattern.
 
         This config chain factory will omit any providers not in the methods
diff -pruN 2.23.6-1/awscli/botocore/signers.py 2.31.35-1/awscli/botocore/signers.py
--- 2.23.6-1/awscli/botocore/signers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/signers.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,15 +20,20 @@ import botocore.auth
 from botocore.awsrequest import create_request_object, prepare_request_dict
 from botocore.compat import OrderedDict
 from botocore.exceptions import (
+    ParamValidationError,
     UnknownClientMethodError,
     UnknownSignatureVersionError,
     UnsupportedSignatureVersionError,
-    ParamValidationError,
 )
-from botocore.utils import ArnParser, datetime2timestamp, fix_s3_host
+from botocore.tokens import FrozenAuthToken
+from botocore.utils import (
+    ArnParser,
+    datetime2timestamp,
+    fix_s3_host,  # noqa
+)
 
 
-class RequestSigner(object):
+class RequestSigner:
     """
     An object to sign requests before they go out over the wire using
     one of the authentication mechanisms defined in ``auth.py``. This
@@ -62,9 +67,17 @@ class RequestSigner(object):
     :type event_emitter: :py:class:`~botocore.hooks.BaseEventHooks`
     :param event_emitter: Extension mechanism to fire events.
     """
-    def __init__(self, service_id, region_name, signing_name,
-                 signature_version, credentials, event_emitter,
-                 auth_token=None):
+
+    def __init__(
+        self,
+        service_id,
+        region_name,
+        signing_name,
+        signature_version,
+        credentials,
+        event_emitter,
+        auth_token=None,
+    ):
         self._region_name = region_name
         self._signing_name = signing_name
         self._signature_version = signature_version
@@ -94,8 +107,15 @@ class RequestSigner(object):
         # Don't call this method directly.
         return self.sign(operation_name, request)
 
-    def sign(self, operation_name, request, region_name=None,
-             signing_type='standard', expires_in=None, signing_name=None):
+    def sign(
+        self,
+        operation_name,
+        request,
+        region_name=None,
+        signing_type='standard',
+        expires_in=None,
+        signing_name=None,
+    ):
         """Sign a request before it goes out over the wire.
 
         :type operation_name: string
@@ -130,23 +150,25 @@ class RequestSigner(object):
             signing_name = self._signing_name
 
         signature_version = self._choose_signer(
-            operation_name, signing_type, request.context)
+            operation_name, signing_type, request.context
+        )
 
         # Allow mutating request before signing
         self._event_emitter.emit(
-            'before-sign.{0}.{1}'.format(
-                self._service_id.hyphenize(), operation_name),
-            request=request, signing_name=signing_name,
+            f'before-sign.{self._service_id.hyphenize()}.{operation_name}',
+            request=request,
+            signing_name=signing_name,
             region_name=self._region_name,
-            signature_version=signature_version, request_signer=self,
-            operation_name=operation_name
+            signature_version=signature_version,
+            request_signer=self,
+            operation_name=operation_name,
         )
 
         if signature_version != botocore.UNSIGNED:
             kwargs = {
                 'signing_name': signing_name,
                 'region_name': region_name,
-                'signature_version': signature_version
+                'signature_version': signature_version,
             }
             if expires_in is not None:
                 kwargs['expires'] = expires_in
@@ -166,7 +188,8 @@ class RequestSigner(object):
             except UnknownSignatureVersionError as e:
                 if signing_type != 'standard':
                     raise UnsupportedSignatureVersionError(
-                        signature_version=signature_version)
+                        signature_version=signature_version
+                    )
                 else:
                     raise e
 
@@ -188,7 +211,7 @@ class RequestSigner(object):
         """
         signing_type_suffix_map = {
             'presign-post': '-presign-post',
-            'presign-url': '-query'
+            'presign-url': '-query',
         }
         suffix = signing_type_suffix_map.get(signing_type, '')
         # operation specific signing context takes precedent over client-level
@@ -197,13 +220,14 @@ class RequestSigner(object):
         signing = context.get('signing', {})
         signing_name = signing.get('signing_name', self._signing_name)
         region_name = signing.get('region', self._region_name)
-        if signature_version is not botocore.UNSIGNED and not \
-                signature_version.endswith(suffix):
+        if (
+            signature_version is not botocore.UNSIGNED
+            and not signature_version.endswith(suffix)
+        ):
             signature_version += suffix
 
         handler, response = self._event_emitter.emit_until_response(
-            'choose-signer.{0}.{1}'.format(
-                self._service_id.hyphenize(), operation_name),
+            f'choose-signer.{self._service_id.hyphenize()}.{operation_name}',
             signing_name=signing_name,
             region_name=region_name,
             signature_version=signature_version,
@@ -214,14 +238,17 @@ class RequestSigner(object):
             signature_version = response
             # The suffix needs to be checked again in case we get an improper
             # signature version from choose-signer.
-            if signature_version is not botocore.UNSIGNED and not \
-                    signature_version.endswith(suffix):
+            if (
+                signature_version is not botocore.UNSIGNED
+                and not signature_version.endswith(suffix)
+            ):
                 signature_version += suffix
 
         return signature_version
 
-    def get_auth_instance(self, signing_name, region_name,
-                          signature_version=None, **kwargs):
+    def get_auth_instance(
+        self, signing_name, region_name, signature_version=None, **kwargs
+    ):
         """
         Get an auth instance which can be used to sign a request
         using the given signature version.
@@ -246,12 +273,16 @@ class RequestSigner(object):
         cls = botocore.auth.AUTH_TYPE_MAPS.get(signature_version)
         if cls is None:
             raise UnknownSignatureVersionError(
-                signature_version=signature_version)
+                signature_version=signature_version
+            )
 
         if cls.REQUIRES_TOKEN is True:
-            frozen_token = None
-            if self._auth_token is not None:
+            if self._auth_token and not isinstance(
+                self._auth_token, FrozenAuthToken
+            ):
                 frozen_token = self._auth_token.get_frozen_token()
+            else:
+                frozen_token = self._auth_token
             auth = cls(frozen_token)
             return auth
 
@@ -281,9 +312,14 @@ class RequestSigner(object):
     # Alias get_auth for backwards compatibility.
     get_auth = get_auth_instance
 
-    def generate_presigned_url(self, request_dict, operation_name,
-                               expires_in=3600, region_name=None,
-                               signing_name=None):
+    def generate_presigned_url(
+        self,
+        request_dict,
+        operation_name,
+        expires_in=3600,
+        region_name=None,
+        signing_name=None,
+    ):
         """Generates a presigned url
 
         :type request_dict: dict
@@ -306,14 +342,20 @@ class RequestSigner(object):
         :returns: The presigned url
         """
         request = create_request_object(request_dict)
-        self.sign(operation_name, request, region_name,
-                  'presign-url', expires_in, signing_name)
+        self.sign(
+            operation_name,
+            request,
+            region_name,
+            'presign-url',
+            expires_in,
+            signing_name,
+        )
 
         request.prepare()
         return request.url
 
 
-class CloudFrontSigner(object):
+class CloudFrontSigner:
     '''A signer to create a signed CloudFront URL.
 
     First you create a cloudfront signer based on a normalized RSA signer::
@@ -367,8 +409,12 @@ class CloudFrontSigner(object):
         :rtype: str
         :return: The signed URL.
         """
-        if (date_less_than is not None and policy is not None or
-                date_less_than is None and policy is None):
+        if (
+            date_less_than is not None
+            and policy is not None
+            or date_less_than is None
+            and policy is None
+        ):
             e = 'Need to provide either date_less_than or policy, but not both'
             raise ValueError(e)
         if date_less_than is not None:
@@ -377,22 +423,29 @@ class CloudFrontSigner(object):
         if isinstance(policy, str):
             policy = policy.encode('utf8')
         if date_less_than is not None:
-            params = ['Expires=%s' % int(datetime2timestamp(date_less_than))]
+            params = [f'Expires={int(datetime2timestamp(date_less_than))}']
         else:
-            params = ['Policy=%s' % self._url_b64encode(policy).decode('utf8')]
+            params = [
+                'Policy={}'.format(self._url_b64encode(policy).decode('utf8'))
+            ]
         signature = self.rsa_signer(policy)
-        params.extend([
-            'Signature=%s' % self._url_b64encode(signature).decode('utf8'),
-            'Key-Pair-Id=%s' % self.key_id,
-            ])
+        params.extend(
+            [
+                'Signature={}'.format(
+                    self._url_b64encode(signature).decode('utf8')
+                ),
+                f'Key-Pair-Id={self.key_id}',
+            ]
+        )
         return self._build_url(url, params)
 
     def _build_url(self, base_url, extra_params):
         separator = '&' if '?' in base_url else '?'
         return base_url + separator + '&'.join(extra_params)
 
-    def build_policy(self, resource, date_less_than,
-                     date_greater_than=None, ip_address=None):
+    def build_policy(
+        self, resource, date_less_than, date_greater_than=None, ip_address=None
+    ):
         """A helper to build policy.
 
         :type resource: str
@@ -435,8 +488,12 @@ class CloudFrontSigner(object):
     def _url_b64encode(self, data):
         # Required by CloudFront. See also:
         # http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-linux-openssl.html
-        return base64.b64encode(
-            data).replace(b'+', b'-').replace(b'=', b'_').replace(b'/', b'~')
+        return (
+            base64.b64encode(data)
+            .replace(b'+', b'-')
+            .replace(b'=', b'_')
+            .replace(b'/', b'~')
+        )
 
 
 def add_generate_db_auth_token(class_attributes, **kwargs):
@@ -484,7 +541,7 @@ def generate_db_auth_token(self, DBHostn
         'query_string': '',
         'headers': {},
         'body': params,
-        'method': 'GET'
+        'method': 'GET',
     }
 
     # RDS requires that the scheme not be set when sent over. This can cause
@@ -494,13 +551,16 @@ def generate_db_auth_token(self, DBHostn
     # netloc would be treated as a path component. To work around this we
     # introduce https here and remove it once we're done processing it.
     scheme = 'https://'
-    endpoint_url = '%s%s:%s' % (scheme, DBHostname, Port)
+    endpoint_url = f'{scheme}{DBHostname}:{Port}'
     prepare_request_dict(request_dict, endpoint_url)
     presigned_url = self._request_signer.generate_presigned_url(
-        operation_name='connect', request_dict=request_dict,
-        region_name=region, expires_in=900, signing_name='rds-db'
+        operation_name='connect',
+        request_dict=request_dict,
+        region_name=region,
+        expires_in=900,
+        signing_name='rds-db',
     )
-    return presigned_url[len(scheme):]
+    return presigned_url[len(scheme) :]
 
 
 def _dsql_generate_db_auth_token(
@@ -596,13 +656,18 @@ def dsql_generate_db_connect_admin_auth_
     )
 
 
-class S3PostPresigner(object):
+class S3PostPresigner:
     def __init__(self, request_signer):
         self._request_signer = request_signer
 
-    def generate_presigned_post(self, request_dict, fields=None,
-                                conditions=None, expires_in=3600,
-                                region_name=None):
+    def generate_presigned_post(
+        self,
+        request_dict,
+        fields=None,
+        conditions=None,
+        expires_in=3600,
+        region_name=None,
+    ):
         """Generates the url and the form fields used for a presigned s3 post
 
         :type request_dict: dict
@@ -667,7 +732,8 @@ class S3PostPresigner(object):
         request.context['s3-presign-post-policy'] = policy
 
         self._request_signer.sign(
-            'PutObject', request, region_name, 'presign-post')
+            'PutObject', request, region_name, 'presign-post'
+        )
         # Return the url and the fields for th form to post.
         return {'url': request.url, 'fields': fields}
 
@@ -676,8 +742,9 @@ def add_generate_presigned_url(class_att
     class_attributes['generate_presigned_url'] = generate_presigned_url
 
 
-def generate_presigned_url(self, ClientMethod, Params=None, ExpiresIn=3600,
-                           HttpMethod=None):
+def generate_presigned_url(
+    self, ClientMethod, Params=None, ExpiresIn=3600, HttpMethod=None
+):
     """Generate a presigned url given a client, its method, and arguments
 
     :type ClientMethod: string
@@ -715,8 +782,7 @@ def generate_presigned_url(self, ClientM
     except KeyError:
         raise UnknownClientMethodError(method_name=client_method)
 
-    operation_model = self.meta.service_model.operation_model(
-        operation_name)
+    operation_model = self.meta.service_model.operation_model(operation_name)
     params = self._emit_api_params(
         api_params=params,
         operation_model=operation_model,
@@ -749,16 +815,19 @@ def generate_presigned_url(self, ClientM
 
     # Generate the presigned url.
     return request_signer.generate_presigned_url(
-        request_dict=request_dict, expires_in=expires_in,
-        operation_name=operation_name)
+        request_dict=request_dict,
+        expires_in=expires_in,
+        operation_name=operation_name,
+    )
 
 
 def add_generate_presigned_post(class_attributes, **kwargs):
     class_attributes['generate_presigned_post'] = generate_presigned_post
 
 
-def generate_presigned_post(self, Bucket, Key, Fields=None, Conditions=None,
-                            ExpiresIn=3600):
+def generate_presigned_post(
+    self, Bucket, Key, Fields=None, Conditions=None, ExpiresIn=3600
+):
     """Builds the url and the form fields used for a presigned s3 post
 
     :type Bucket: string
@@ -844,8 +913,7 @@ def generate_presigned_post(self, Bucket
 
     # We choose the CreateBucket operation model because its url gets
     # serialized to what a presign post requires.
-    operation_model = self.meta.service_model.operation_model(
-        'CreateBucket')
+    operation_model = self.meta.service_model.operation_model('CreateBucket')
     params = self._emit_api_params(
         api_params={'Bucket': bucket},
         operation_model=operation_model,
@@ -878,7 +946,7 @@ def generate_presigned_post(self, Bucket
     # If the key ends with filename, the only constraint that can be
     # imposed is if it starts with the specified prefix.
     if key.endswith('${filename}'):
-        conditions.append(["starts-with", '$key', key[:-len('${filename}')]])
+        conditions.append(["starts-with", '$key', key[: -len('${filename}')]])
     else:
         conditions.append({'key': key})
 
@@ -886,5 +954,8 @@ def generate_presigned_post(self, Bucket
     fields['key'] = key
 
     return post_presigner.generate_presigned_post(
-        request_dict=request_dict, fields=fields, conditions=conditions,
-        expires_in=expires_in)
+        request_dict=request_dict,
+        fields=fields,
+        conditions=conditions,
+        expires_in=expires_in,
+    )
diff -pruN 2.23.6-1/awscli/botocore/stub.py 2.31.35-1/awscli/botocore/stub.py
--- 2.23.6-1/awscli/botocore/stub.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/stub.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,7 @@ from botocore.exceptions import (
 from botocore.validate import validate_parameters
 
 
-class _ANY(object):
+class _ANY:
     """
     A helper object that compares equal to everything. Copied from
     unittest.mock
@@ -39,10 +39,11 @@ class _ANY(object):
     def __repr__(self):
         return '<ANY>'
 
+
 ANY = _ANY()
 
 
-class Stubber(object):
+class Stubber:
     """
     This class will allow you to stub out requests so you don't have to hit
     an endpoint to write tests. Responses are returned first in, first out.
@@ -163,6 +164,7 @@ class Stubber(object):
 
         assert service_response == response
     """
+
     def __init__(self, client):
         """
         :param client: The client to add your stubs to.
@@ -186,11 +188,13 @@ class Stubber(object):
         self.client.meta.events.register_first(
             'before-parameter-build.*.*',
             self._assert_expected_params,
-            unique_id=self._expected_params_event_id)
+            unique_id=self._expected_params_event_id,
+        )
         self.client.meta.events.register(
             'before-call.*.*',
             self._get_response_handler,
-            unique_id=self._event_id)
+            unique_id=self._event_id,
+        )
 
     def deactivate(self):
         """
@@ -199,11 +203,13 @@ class Stubber(object):
         self.client.meta.events.unregister(
             'before-parameter-build.*.*',
             self._assert_expected_params,
-            unique_id=self._expected_params_event_id)
+            unique_id=self._expected_params_event_id,
+        )
         self.client.meta.events.unregister(
             'before-call.*.*',
             self._get_response_handler,
-            unique_id=self._event_id)
+            unique_id=self._event_id,
+        )
 
     def add_response(self, method, service_response, expected_params=None):
         """
@@ -233,8 +239,8 @@ class Stubber(object):
     def _add_response(self, method, service_response, expected_params):
         if not hasattr(self.client, method):
             raise ValueError(
-                "Client %s does not have method: %s"
-                % (self.client.meta.service_model.service_name, method))
+                f"Client {self.client.meta.service_model.service_name} does not have method: {method}"
+            )
 
         # Create a successful http response
         http_response = AWSResponse(None, 200, {}, None)
@@ -246,14 +252,20 @@ class Stubber(object):
         response = {
             'operation_name': operation_name,
             'response': (http_response, service_response),
-            'expected_params': expected_params
+            'expected_params': expected_params,
         }
         self._queue.append(response)
 
-    def add_client_error(self, method, service_error_code='',
-                         service_message='', http_status_code=400,
-                         service_error_meta=None, expected_params=None,
-                         response_meta=None):
+    def add_client_error(
+        self,
+        method,
+        service_error_code='',
+        service_message='',
+        http_status_code=400,
+        service_error_meta=None,
+        expected_params=None,
+        response_meta=None,
+    ):
         """
         Adds a ``ClientError`` to the response queue.
 
@@ -294,10 +306,7 @@ class Stubber(object):
         # look like.
         parsed_response = {
             'ResponseMetadata': {'HTTPStatusCode': http_status_code},
-            'Error': {
-                'Message': service_message,
-                'Code': service_error_code
-            }
+            'Error': {'Message': service_message, 'Code': service_error_code},
         }
 
         if service_error_meta is not None:
@@ -323,23 +332,25 @@ class Stubber(object):
         remaining = len(self._queue)
         if remaining != 0:
             raise AssertionError(
-                "%d responses remaining in queue." % remaining)
+                "%d responses remaining in queue." % remaining
+            )
 
     def _assert_expected_call_order(self, model, params):
         if not self._queue:
             raise UnStubbedResponseError(
                 operation_name=model.name,
                 reason=(
-                        'Unexpected API Call: A call was made but no additional calls expected. '
-                        'Either the API Call was not stubbed or it was called multiple times.'
-                        )
+                    'Unexpected API Call: A call was made but no additional calls expected. '
+                    'Either the API Call was not stubbed or it was called multiple times.'
+                ),
             )
 
         name = self._queue[0]['operation_name']
         if name != model.name:
             raise StubResponseError(
                 operation_name=model.name,
-                reason='Operation mismatch: found response for %s.' % name)
+                reason=f'Operation mismatch: found response for {name}.',
+            )
 
     def _get_response_handler(self, model, params, context, **kwargs):
         self._assert_expected_call_order(model, params)
@@ -359,15 +370,15 @@ class Stubber(object):
             if param not in params or expected_params[param] != params[param]:
                 raise StubAssertionError(
                     operation_name=model.name,
-                    reason='Expected parameters:\n%s,\nbut received:\n%s' % (
-                        pformat(expected_params), pformat(params)))
+                    reason=f'Expected parameters:\n{pformat(expected_params)},\nbut received:\n{pformat(params)}',
+                )
 
         # Ensure there are no extra params hanging around
         if sorted(expected_params.keys()) != sorted(params.keys()):
             raise StubAssertionError(
                 operation_name=model.name,
-                reason='Expected parameters:\n%s,\nbut received:\n%s' % (
-                    pformat(expected_params), pformat(params)))
+                reason=f'Expected parameters:\n{pformat(expected_params)},\nbut received:\n{pformat(params)}',
+            )
 
     def _should_not_stub(self, context):
         # Do not include presign requests when processing stubbed client calls
@@ -395,4 +406,6 @@ class Stubber(object):
             # empty apart from ResponseMetadata
             raise ParamValidationError(
                 report=(
-                    "Service response should only contain ResponseMetadata."))
+                    "Service response should only contain ResponseMetadata."
+                )
+            )
diff -pruN 2.23.6-1/awscli/botocore/tokens.py 2.31.35-1/awscli/botocore/tokens.py
--- 2.23.6-1/awscli/botocore/tokens.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/tokens.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,8 +19,6 @@ from datetime import datetime, timedelta
 from typing import Optional
 
 import dateutil.parser
-from dateutil.tz import tzutc
-
 from botocore import UNSIGNED
 from botocore.compat import total_seconds
 from botocore.config import Config
@@ -29,7 +27,13 @@ from botocore.exceptions import (
     InvalidConfigError,
     TokenRetrievalError,
 )
-from botocore.utils import CachedProperty, JSONFileCache, SSOTokenLoader
+from botocore.utils import (
+    CachedProperty,
+    JSONFileCache,
+    SSOTokenLoader,
+    get_token_from_environment,
+)
+from dateutil.tz import tzutc
 
 logger = logging.getLogger(__name__)
 
@@ -40,6 +44,7 @@ def _utc_now():
 
 def create_token_resolver(session):
     providers = [
+        ScopedEnvTokenProvider(session),
         SSOTokenProvider(session),
     ]
     return TokenProviderChain(providers=providers)
@@ -164,9 +169,9 @@ class TokenProviderChain:
             providers = []
         self._providers = providers
 
-    def load_token(self):
+    def load_token(self, **kwargs):
         for provider in self._providers:
-            token = provider.load_token()
+            token = provider.load_token(**kwargs)
             if token is not None:
                 return token
         return None
@@ -323,10 +328,36 @@ class SSOTokenProvider:
             token_dict["accessToken"], expiration=expiration
         )
 
-    def load_token(self):
+    def load_token(self, **kwargs):
         if self._sso_config is None:
             return None
 
         return DeferredRefreshableToken(
             self.METHOD, self._refresher, time_fetcher=self._now
         )
+
+
+class ScopedEnvTokenProvider:
+    """
+    Token provider that loads tokens from environment variables scoped to
+    a specific `signing_name`.
+    """
+
+    METHOD = 'env'
+
+    def __init__(self, session, environ=None):
+        self._session = session
+        if environ is None:
+            environ = os.environ
+        self.environ = environ
+
+    def load_token(self, **kwargs):
+        signing_name = kwargs.get("signing_name")
+        if signing_name is None:
+            return None
+
+        token = get_token_from_environment(signing_name, self.environ)
+
+        if token is not None:
+            logger.info("Found token in environment variables.")
+            return FrozenAuthToken(token)
diff -pruN 2.23.6-1/awscli/botocore/useragent.py 2.31.35-1/awscli/botocore/useragent.py
--- 2.23.6-1/awscli/botocore/useragent.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/useragent.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,6 +22,8 @@ configuration options:
 * The ``user_agent_extra`` field in the :py:class:`botocore.config.Config`.
 
 """
+
+import logging
 import os
 import platform
 from copy import copy
@@ -29,8 +31,12 @@ from string import ascii_letters, digits
 from typing import NamedTuple, Optional
 
 from botocore import __version__ as botocore_version
+from botocore.context import get_context
+
+logger = logging.getLogger(__name__)
 
-_USERAGENT_ALLOWED_CHARACTERS = ascii_letters + digits + "!$%&'*+-.^_`|~"
+
+_USERAGENT_ALLOWED_CHARACTERS = ascii_letters + digits + "!$%&'*+-.^_`|~,"
 _USERAGENT_ALLOWED_OS_NAMES = (
     'windows',
     'linux',
@@ -47,12 +53,84 @@ _USERAGENT_PLATFORM_NAME_MAPPINGS = {'da
 # using their existing values. Uses uppercase "B" with all other characters
 # lowercase.
 _USERAGENT_SDK_NAME = 'Botocore'
+_USERAGENT_FEATURE_MAPPINGS = {
+    'WAITER': 'B',
+    'PAGINATOR': 'C',
+    'RETRY_MODE_STANDARD': 'E',
+    'RETRY_MODE_ADAPTIVE': 'F',
+    'S3_TRANSFER': 'G',
+    'PROTOCOL_RPC_V2_CBOR': 'M',
+    'GZIP_REQUEST_COMPRESSION': 'L',
+    'ENDPOINT_OVERRIDE': 'N',
+    'ACCOUNT_ID_MODE_PREFERRED': 'P',
+    'ACCOUNT_ID_MODE_DISABLED': 'Q',
+    'ACCOUNT_ID_MODE_REQUIRED': 'R',
+    'SIGV4A_SIGNING': 'S',
+    'RESOLVED_ACCOUNT_ID': 'T',
+    'FLEXIBLE_CHECKSUMS_REQ_CRC32': 'U',
+    'FLEXIBLE_CHECKSUMS_REQ_CRC32C': 'V',
+    'FLEXIBLE_CHECKSUMS_REQ_CRC64': 'W',
+    'FLEXIBLE_CHECKSUMS_REQ_SHA1': 'X',
+    'FLEXIBLE_CHECKSUMS_REQ_SHA256': 'Y',
+    'FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED': 'Z',
+    'FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED': 'a',
+    'FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED': 'b',
+    'FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED': 'c',
+    'CREDENTIALS_CODE': 'e',
+    'CREDENTIALS_ENV_VARS': 'g',
+    'CREDENTIALS_PROFILE_PROCESS': 'v',
+    'CREDENTIALS_PROCESS': 'w',
+    'CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN': 'h',
+    'CREDENTIALS_STS_ASSUME_ROLE': 'i',
+    'CREDENTIALS_STS_ASSUME_ROLE_WEB_ID': 'k',
+    'CREDENTIALS_PROFILE': 'n',
+    'CREDENTIALS_PROFILE_SOURCE_PROFILE': 'o',
+    'CREDENTIALS_PROFILE_NAMED_PROVIDER': 'p',
+    'CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN': 'q',
+    'CREDENTIALS_PROFILE_SSO': 'r',
+    'CREDENTIALS_SSO': 's',
+    'CREDENTIALS_PROFILE_SSO_LEGACY': 't',
+    'CREDENTIALS_SSO_LEGACY': 'u',
+    'CREDENTIALS_BOTO2_CONFIG_FILE': 'x',
+    'CREDENTIALS_HTTP': 'z',
+    'CREDENTIALS_IMDS': '0',
+    'BEARER_SERVICE_ENV_VARS': '3',
+}
+
+
+def register_feature_id(feature_id):
+    """Adds metric value to the current context object's ``features`` set.
+
+    :type feature_id: str
+    :param feature_id: The name of the feature to register. Value must be a key
+        in the ``_USERAGENT_FEATURE_MAPPINGS`` dict.
+    """
+    ctx = get_context()
+    if ctx is None:
+        # Never register features outside the scope of a
+        # ``botocore.context.start_as_current_context`` context manager.
+        # Otherwise, the context variable won't be reset and features will
+        # bleed into all subsequent requests. Return instead of raising an
+        # exception since this function could be invoked in a public interface.
+        return
+    if val := _USERAGENT_FEATURE_MAPPINGS.get(feature_id):
+        ctx.features.add(val)
+
+
+def register_feature_ids(feature_ids):
+    """Adds multiple feature IDs to the current context object's ``features`` set.
+    :type feature_ids: iterable of str
+    :param feature_ids: An iterable of feature ID strings to register. Each
+        value must be a key in the ``_USERAGENT_FEATURE_MAPPINGS`` dict.
+    """
+    for feature_id in feature_ids:
+        register_feature_id(feature_id)
 
 
 def sanitize_user_agent_string_component(raw_str, allow_hash):
     """Replaces all not allowed characters in the string with a dash ("-").
 
-    Allowed characters are ASCII alphanumerics and ``!$%&'*+-.^_`|~``. If
+    Allowed characters are ASCII alphanumerics and ``!$%&'*+-.^_`|~,``. If
     ``allow_hash`` is ``True``, "#"``" is also allowed.
 
     :type raw_str: str
@@ -69,19 +147,41 @@ def sanitize_user_agent_string_component
     )
 
 
+class UserAgentComponentSizeConfig:
+    """
+    Configures the max size of a built user agent string component and the
+    delimiter used to truncate the string if the size is above the max.
+    """
+
+    def __init__(self, max_size_in_bytes: int, delimiter: str):
+        self.max_size_in_bytes = max_size_in_bytes
+        self.delimiter = delimiter
+        self._validate_input()
+
+    def _validate_input(self):
+        if self.max_size_in_bytes < 1:
+            raise ValueError(
+                f'Invalid `max_size_in_bytes`: {self.max_size_in_bytes}. '
+                'Value must be a positive integer.'
+            )
+
+
 class UserAgentComponent(NamedTuple):
     """
     Component of a Botocore User-Agent header string in the standard format.
 
-    Each component consists of a prefix, a name, and a value. In the string
-    representation these are combined in the format ``prefix/name#value``.
+    Each component consists of a prefix, a name, a value, and a size_config.
+    In the string representation these are combined in the format
+    ``prefix/name#value``.
 
-    This class is considered private and is subject to abrupt breaking changes.
+    ``size_config`` configures the max size and truncation strategy for the
+    built user agent string component.
     """
 
     prefix: str
     name: str
     value: Optional[str] = None
+    size_config: Optional[UserAgentComponentSizeConfig] = None
 
     def to_string(self):
         """Create string like 'prefix/name#value' from a UserAgentComponent."""
@@ -92,11 +192,39 @@ class UserAgentComponent(NamedTuple):
             self.name, allow_hash=False
         )
         if self.value is None or self.value == '':
-            return f'{clean_prefix}/{clean_name}'
-        clean_value = sanitize_user_agent_string_component(
-            self.value, allow_hash=True
-        )
-        return f'{clean_prefix}/{clean_name}#{clean_value}'
+            clean_string = f'{clean_prefix}/{clean_name}'
+        else:
+            clean_value = sanitize_user_agent_string_component(
+                self.value, allow_hash=True
+            )
+            clean_string = f'{clean_prefix}/{clean_name}#{clean_value}'
+        if self.size_config is not None:
+            clean_string = self._truncate_string(
+                clean_string,
+                self.size_config.max_size_in_bytes,
+                self.size_config.delimiter,
+            )
+        return clean_string
+
+    def _truncate_string(self, string, max_size, delimiter):
+        """
+        Pop ``delimiter``-separated values until encoded string is less than or
+        equal to ``max_size``.
+        """
+        orig = string
+        while len(string.encode('utf-8')) > max_size:
+            parts = string.split(delimiter)
+            parts.pop()
+            string = delimiter.join(parts)
+
+        if string == '':
+            logger.debug(
+                f"User agent component `{orig}` could not be truncated to "
+                f"`{max_size}` bytes with delimiter "
+                f"`{delimiter}` without losing all contents. "
+                f"Value will be omitted from user agent string."
+            )
+        return string
 
 
 class RawStringUserAgentComponent:
@@ -191,9 +319,9 @@ class UserAgentString:
         self._session_user_agent_extra = None
 
         self._client_config = None
-        self._uses_paginator = None
-        self._uses_waiter = None
-        self._uses_resource = None
+
+        # Component that can be set with ``set_client_features()``
+        self._client_features = None
 
     @classmethod
     def from_environment(cls):
@@ -231,6 +359,15 @@ class UserAgentString:
         self._session_user_agent_extra = session_user_agent_extra
         return self
 
+    def set_client_features(self, features):
+        """
+        Persist client-specific features registered before or during client
+        creation.
+        :type features: Set[str]
+        :param features: A set of client-specific features.
+        """
+        self._client_features = features
+
     def with_client_config(self, client_config):
         """
         Create a copy with all original values and client-specific values.
@@ -258,7 +395,7 @@ class UserAgentString:
 
         components = [
             *self._build_sdk_metadata(),
-            RawStringUserAgentComponent('ua/2.0'),
+            RawStringUserAgentComponent('ua/2.1'),
             *self._build_os_metadata(),
             *self._build_architecture_metadata(),
             *self._build_language_metadata(),
@@ -269,7 +406,9 @@ class UserAgentString:
             *self._build_extra(),
         ]
 
-        return ' '.join([comp.to_string() for comp in components])
+        return ' '.join(
+            [comp.to_string() for comp in components if comp.to_string()]
+        )
 
     def _build_sdk_metadata(self):
         """
@@ -396,12 +535,23 @@ class UserAgentString:
 
     def _build_feature_metadata(self):
         """
-        Build the features components of the User-Agent header string.
+        Build the features component of the User-Agent header string.
 
-        Botocore currently does not report any features. This may change in a
-        future version.
+        Returns a single component with prefix "m" followed by a list of
+        comma-separated metric values.
         """
-        return []
+        ctx = get_context()
+        context_features = set() if ctx is None else ctx.features
+        client_features = self._client_features or set()
+        features = client_features.union(context_features)
+        if not features:
+            return []
+        size_config = UserAgentComponentSizeConfig(1024, ',')
+        return [
+            UserAgentComponent(
+                'm', ','.join(features), size_config=size_config
+            )
+        ]
 
     def _build_config_metadata(self):
         """
@@ -471,6 +621,13 @@ class UserAgentString:
             components.append(self._client_config.user_agent_extra)
         return ' '.join(components)
 
+    def rebuild_and_replace_user_agent_handler(
+        self, operation_name, request, **kwargs
+    ):
+        ua_string = self.to_string()
+        if request.headers.get('User-Agent'):
+            request.headers.replace_header('User-Agent', ua_string)
+
 
 def _get_crt_version():
     """
diff -pruN 2.23.6-1/awscli/botocore/utils.py 2.31.35-1/awscli/botocore/utils.py
--- 2.23.6-1/awscli/botocore/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -90,7 +90,9 @@ METADATA_ENDPOINT_MODES = ('ipv4', 'ipv6
 SAFE_CHARS = '-._~'
 LABEL_RE = re.compile(r'[a-z0-9][a-z0-9\-]*[a-z0-9]')
 RETRYABLE_HTTP_ERRORS = (
-    ReadTimeoutError, EndpointConnectionError, ConnectionClosedError,
+    ReadTimeoutError,
+    EndpointConnectionError,
+    ConnectionClosedError,
     ConnectTimeoutError,
 )
 S3_ACCELERATE_WHITELIST = ['dualstack']
@@ -100,7 +102,7 @@ S3_ACCELERATE_WHITELIST = ['dualstack']
 IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}"
 IPV4_RE = re.compile("^" + IPV4_PAT + "$")
 HEX_PAT = "[0-9A-Fa-f]{1,4}"
-LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=HEX_PAT, ipv4=IPV4_PAT)
+LS32_PAT = f"(?:{HEX_PAT}:{HEX_PAT}|{IPV4_PAT})"
 _subs = {"hex": HEX_PAT, "ls32": LS32_PAT}
 _variations = [
     #                            6( h16 ":" ) ls32
@@ -123,7 +125,9 @@ _variations = [
     "(?:(?:%(hex)s:){0,6}%(hex)s)?::",
 ]
 
-UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~"
+UNRESERVED_PAT = (
+    r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~"
+)
 IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")"
 ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+"
 IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]"
@@ -138,6 +142,15 @@ CHECKSUM_HEADER_PATTERN = re.compile(
     flags=re.IGNORECASE,
 )
 
+PRIORITY_ORDERED_SUPPORTED_PROTOCOLS = (
+    'json',
+    'rest-json',
+    'rest-xml',
+    'smithy-rpc-v2-cbor',
+    'query',
+    'ec2',
+)
+
 
 def ensure_boolean(val):
     """Ensures a boolean value if a string or boolean is provided
@@ -158,18 +171,19 @@ def resolve_imds_endpoint_mode(session):
     ec2_metadata_service_endpoint_mode takes precedence over imds_use_ipv6.
     """
     endpoint_mode = session.get_config_variable(
-        'ec2_metadata_service_endpoint_mode')
+        'ec2_metadata_service_endpoint_mode'
+    )
     if endpoint_mode is not None:
         lendpoint_mode = endpoint_mode.lower()
         if lendpoint_mode not in METADATA_ENDPOINT_MODES:
             error_msg_kwargs = {
                 'mode': endpoint_mode,
-                'valid_modes': METADATA_ENDPOINT_MODES
+                'valid_modes': METADATA_ENDPOINT_MODES,
             }
             raise InvalidIMDSEndpointModeError(**error_msg_kwargs)
         return lendpoint_mode
     elif session.get_config_variable('imds_use_ipv6'):
-            return 'ipv6'
+        return 'ipv6'
     return 'ipv4'
 
 
@@ -182,10 +196,12 @@ def is_json_value_header(shape):
     :return: True if this type is a jsonvalue, False otherwise
     :rtype: Bool
     """
-    return (hasattr(shape, 'serialization') and
-            shape.serialization.get('jsonvalue', False) and
-            shape.serialization.get('location') == 'header' and
-            shape.type_name == 'string')
+    return (
+        hasattr(shape, 'serialization')
+        and shape.serialization.get('jsonvalue', False)
+        and shape.serialization.get('location') == 'header'
+        and shape.type_name == 'string'
+    )
 
 
 def has_header(header_name, headers):
@@ -195,9 +211,7 @@ def has_header(header_name, headers):
     elif isinstance(headers, botocore.awsrequest.HeadersDict):
         return header_name in headers
     else:
-        return header_name.lower() in [
-            key.lower() for key in headers.keys()
-        ]
+        return header_name.lower() in [key.lower() for key in headers.keys()]
 
 
 def get_service_module_name(service_model):
@@ -208,7 +222,9 @@ def get_service_module_name(service_mode
     name = service_model.metadata.get(
         'serviceAbbreviation',
         service_model.metadata.get(
-            'serviceFullName', service_model.service_name))
+            'serviceFullName', service_model.service_name
+        ),
+    )
     name = name.replace('Amazon', '')
     name = name.replace('AWS', '')
     name = re.sub(r'\W+', '', name)
@@ -291,10 +307,7 @@ def set_value_from_jmespath(source, expr
             source[current_key] = {}
 
         return set_value_from_jmespath(
-            source[current_key],
-            remainder,
-            value,
-            is_first=False
+            source[current_key], remainder, value, is_first=False
         )
 
     # If we're down to a single key, set it.
@@ -310,6 +323,7 @@ def is_global_accesspoint(context):
 
 class _RetriesExceededError(Exception):
     """Internal exception used when the number of retries are exceeded."""
+
     pass
 
 
@@ -318,15 +332,20 @@ class BadIMDSRequestError(Exception):
         self.request = request
 
 
-class IMDSFetcher(object):
-
+class IMDSFetcher:
     _RETRIES_EXCEEDED_ERROR_CLS = _RetriesExceededError
     _TOKEN_PATH = 'latest/api/token'
     _TOKEN_TTL = '21600'
 
-    def __init__(self, timeout=DEFAULT_METADATA_SERVICE_TIMEOUT,
-                 num_attempts=1, base_url=METADATA_BASE_URL,
-                 env=None, user_agent=None, config=None):
+    def __init__(
+        self,
+        timeout=DEFAULT_METADATA_SERVICE_TIMEOUT,
+        num_attempts=1,
+        base_url=METADATA_BASE_URL,
+        env=None,
+        user_agent=None,
+        config=None,
+    ):
         self._timeout = timeout
         self._num_attempts = num_attempts
         if config is None:
@@ -350,8 +369,9 @@ class IMDSFetcher(object):
         return self._base_url
 
     def _select_base_url(self, base_url, config):
-        requires_ipv6 = config.get(
-            'ec2_metadata_service_endpoint_mode') == 'ipv6'
+        requires_ipv6 = (
+            config.get('ec2_metadata_service_endpoint_mode') == 'ipv6'
+        )
         custom_metadata_endpoint = config.get('ec2_metadata_service_endpoint')
 
         if requires_ipv6 and custom_metadata_endpoint:
@@ -370,21 +390,28 @@ class IMDSFetcher(object):
         else:
             chosen_base_url = METADATA_BASE_URL
 
-        logger.debug("IMDS ENDPOINT: %s" % chosen_base_url)
+        logger.debug(f"IMDS ENDPOINT: {chosen_base_url}")
         if not is_valid_uri(chosen_base_url):
             raise InvalidIMDSEndpointError(endpoint=chosen_base_url)
 
         return chosen_base_url
+        
+    def _construct_url(self, path):
+        sep = ''
+        if self._base_url and not self._base_url.endswith('/'):
+            sep = '/'
+        return f'{self._base_url}{sep}{path}'
 
     def _fetch_metadata_token(self):
         self._assert_enabled()
-        url = self._base_url + self._TOKEN_PATH
+        url = self._construct_url(self._TOKEN_PATH)
         headers = {
             'x-aws-ec2-metadata-token-ttl-seconds': self._TOKEN_TTL,
         }
         self._add_user_agent(headers)
         request = botocore.awsrequest.AWSRequest(
-            method='PUT', url=url, headers=headers)
+            method='PUT', url=url, headers=headers
+        )
         for i in range(self._num_attempts):
             try:
                 response = self._session.send(request.prepare())
@@ -399,7 +426,11 @@ class IMDSFetcher(object):
             except RETRYABLE_HTTP_ERRORS as e:
                 logger.debug(
                     "Caught retryable HTTP exception while making metadata "
-                    "service request to %s: %s", url, e, exc_info=True)
+                    "service request to %s: %s",
+                    url,
+                    e,
+                    exc_info=True,
+                )
             except HTTPClientError as e:
                 if isinstance(e.kwargs.get('error'), LocationParseError):
                     raise InvalidIMDSEndpointError(endpoint=url, error=e)
@@ -428,7 +459,7 @@ class IMDSFetcher(object):
             self._assert_v1_enabled()
         if retry_func is None:
             retry_func = self._default_retry
-        url = self._base_url + url_path
+        url = self._construct_url(url_path)
         headers = {}
         if token is not None:
             headers['x-aws-ec2-metadata-token'] = token
@@ -436,14 +467,19 @@ class IMDSFetcher(object):
         for i in range(self._num_attempts):
             try:
                 request = botocore.awsrequest.AWSRequest(
-                    method='GET', url=url, headers=headers)
+                    method='GET', url=url, headers=headers
+                )
                 response = self._session.send(request.prepare())
                 if not retry_func(response):
                     return response
             except RETRYABLE_HTTP_ERRORS as e:
                 logger.debug(
                     "Caught retryable HTTP exception while making metadata "
-                    "service request to %s: %s", url, e, exc_info=True)
+                    "service request to %s: %s",
+                    url,
+                    e,
+                    exc_info=True,
+                )
         raise self._RETRIES_EXCEEDED_ERROR_CLS()
 
     def _add_user_agent(self, headers):
@@ -462,10 +498,7 @@ class IMDSFetcher(object):
             )
 
     def _default_retry(self, response):
-        return (
-            self._is_non_ok_response(response) or
-            self._is_empty(response)
-        )
+        return self._is_non_ok_response(response) or self._is_empty(response)
 
     def _is_non_ok_response(self, response):
         if response.status_code != 200:
@@ -484,9 +517,7 @@ class IMDSFetcher(object):
             "Metadata service returned %s response "
             "with status code of %s for url: %s"
         )
-        logger_args = [
-            reason_to_log, response.status_code, response.url
-        ]
+        logger_args = [reason_to_log, response.status_code, response.url]
         if log_body:
             statement += ", content body: %s"
             logger_args.append(response.content)
@@ -496,7 +527,10 @@ class IMDSFetcher(object):
 class InstanceMetadataFetcher(IMDSFetcher):
     _URL_PATH = 'latest/meta-data/iam/security-credentials/'
     _REQUIRED_CREDENTIAL_FIELDS = [
-        'AccessKeyId', 'SecretAccessKey', 'Token', 'Expiration'
+        'AccessKeyId',
+        'SecretAccessKey',
+        'Token',
+        'Expiration',
     ]
 
     def retrieve_iam_role_credentials(self):
@@ -524,13 +558,18 @@ class InstanceMetadataFetcher(IMDSFetche
                 # retrieve credentials. These error will contain both a
                 # Code and Message key.
                 if 'Code' in credentials and 'Message' in credentials:
-                    logger.debug('Error response received when retrieving'
-                                 'credentials: %s.', credentials)
+                    logger.debug(
+                        'Error response received when retrieving'
+                        'credentials: %s.',
+                        credentials,
+                    )
                 return {}
         except self._RETRIES_EXCEEDED_ERROR_CLS:
-            logger.debug("Max number of attempts exceeded (%s) when "
-                         "attempting to retrieve data from metadata service.",
-                         self._num_attempts)
+            logger.debug(
+                "Max number of attempts exceeded (%s) when "
+                "attempting to retrieve data from metadata service.",
+                self._num_attempts,
+            )
         except BadIMDSRequestError as e:
             logger.debug("Bad IMDS request: %s", e.request)
         return {}
@@ -559,16 +598,13 @@ class InstanceMetadataFetcher(IMDSFetche
             return True
 
     def _needs_retry_for_role_name(self, response):
-        return (
-            self._is_non_ok_response(response) or
-            self._is_empty(response)
-        )
+        return self._is_non_ok_response(response) or self._is_empty(response)
 
     def _needs_retry_for_credentials(self, response):
         return (
-            self._is_non_ok_response(response) or
-            self._is_empty(response) or
-            self._is_invalid_json(response)
+            self._is_non_ok_response(response)
+            or self._is_empty(response)
+            or self._is_invalid_json(response)
         )
 
     def _contains_all_credential_fields(self, credentials):
@@ -576,7 +612,8 @@ class InstanceMetadataFetcher(IMDSFetche
             if field not in credentials:
                 logger.debug(
                     'Retrieved credentials is missing required field: %s',
-                    field)
+                    field,
+                )
                 return False
         return True
 
@@ -591,13 +628,19 @@ class InstanceMetadataFetcher(IMDSFetche
             refresh_interval = self._config.get(
                 "ec2_credential_refresh_window", 60 * 10
             )
-            refresh_interval_with_jitter = refresh_interval + random.randint(120, 600)
+            refresh_interval_with_jitter = refresh_interval + random.randint(
+                120, 600
+            )
             current_time = datetime.datetime.utcnow()
-            refresh_offset = datetime.timedelta(seconds=refresh_interval_with_jitter)
+            refresh_offset = datetime.timedelta(
+                seconds=refresh_interval_with_jitter
+            )
             extension_time = expiration - refresh_offset
             if current_time >= extension_time:
                 new_time = current_time + refresh_offset
-                credentials["expiry_time"] = new_time.strftime("%Y-%m-%dT%H:%M:%SZ")
+                credentials["expiry_time"] = new_time.strftime(
+                    "%Y-%m-%dT%H:%M:%SZ"
+                )
                 logger.info(
                     f"Attempting credential expiration extension due to a "
                     f"credential service availability issue. A refresh of "
@@ -640,7 +683,7 @@ def merge_dicts(dict1, dict2, append_lis
 
 
 def lowercase_dict(original):
-    """Copies the given dictionary ensuring all keys are lowercase strings. """
+    """Copies the given dictionary ensuring all keys are lowercase strings."""
     copy = {}
     for key in original:
         copy[key.lower()] = original[key]
@@ -699,11 +742,13 @@ def percent_encode_sequence(mapping, saf
     for key, value in pairs:
         if isinstance(value, list):
             for element in value:
-                encoded_pairs.append('%s=%s' % (percent_encode(key),
-                                                percent_encode(element)))
+                encoded_pairs.append(
+                    f'{percent_encode(key)}={percent_encode(element)}'
+                )
         else:
-            encoded_pairs.append('%s=%s' % (percent_encode(key),
-                                            percent_encode(value)))
+            encoded_pairs.append(
+                f'{percent_encode(key)}={percent_encode(value)}'
+            )
     return '&'.join(encoded_pairs)
 
 
@@ -760,7 +805,7 @@ def _parse_timestamp_with_tzinfo(value,
         # enforce that GMT == UTC.
         return dateutil.parser.parse(value, tzinfos={'GMT': tzutc()})
     except (TypeError, ValueError) as e:
-        raise ValueError('Invalid timestamp "%s": %s' % (value, e))
+        raise ValueError(f'Invalid timestamp "{value}": {e}')
 
 
 def parse_timestamp(value):
@@ -807,7 +852,7 @@ def parse_timestamp(value):
                 exc_info=e,
             )
     raise RuntimeError(
-        'Unable to calculate correct timezone offset for "%s"' % value
+        f'Unable to calculate correct timezone offset for "{value}"'
     )
 
 
@@ -954,7 +999,7 @@ def _in_pairs(iterable):
     return zip_longest(shared_iter, shared_iter)
 
 
-class CachedProperty(object):
+class CachedProperty:
     """A read only property that caches the initially computed value.
 
     This descriptor will only call the provided ``fget`` function once.
@@ -974,7 +1019,7 @@ class CachedProperty(object):
             return computed_value
 
 
-class ArgumentGenerator(object):
+class ArgumentGenerator:
     """Generate sample input based on a shape model.
 
     This class contains a ``generate_skeleton`` method that will take
@@ -1000,6 +1045,7 @@ class ArgumentGenerator(object):
         print("Sample input for dynamodb.CreateTable: %s" % sample_input)
 
     """
+
     def __init__(self, use_member_names=False):
         self._use_member_names = use_member_names
 
@@ -1048,7 +1094,8 @@ class ArgumentGenerator(object):
             return skeleton
         for member_name, member_shape in shape.members.items():
             skeleton[member_name] = self._generate_skeleton(
-                member_shape, stack, name=member_name)
+                member_shape, stack, name=member_name
+            )
         return skeleton
 
     def _generate_type_list(self, shape, stack):
@@ -1074,6 +1121,7 @@ def is_valid_ipv6_endpoint_url(endpoint_
     hostname = f'[{urlparse(endpoint_url).hostname}]'
     return IPV6_ADDRZ_RE.match(hostname) is not None
 
+
 def is_valid_ipv4_endpoint_url(endpoint_url):
     hostname = urlparse(endpoint_url).hostname
     return IPV4_RE.match(hostname) is not None
@@ -1103,11 +1151,16 @@ def is_valid_endpoint_url(endpoint_url):
         hostname = hostname[:-1]
     allowed = re.compile(
         r"^((?!-)[A-Z\d-]{1,63}(?<!-)\.)*((?!-)[A-Z\d-]{1,63}(?<!-))$",
-        re.IGNORECASE)
+        re.IGNORECASE,
+    )
     return allowed.match(hostname)
 
+
 def is_valid_uri(endpoint_url):
-    return is_valid_endpoint_url(endpoint_url) or is_valid_ipv6_endpoint_url(endpoint_url)
+    return is_valid_endpoint_url(endpoint_url) or is_valid_ipv6_endpoint_url(
+        endpoint_url
+    )
+
 
 def validate_region_name(region_name):
     """Provided region_name must be a valid host label."""
@@ -1142,8 +1195,13 @@ def check_dns_name(bucket_name):
     return True
 
 
-def fix_s3_host(request, signature_version, region_name,
-                default_endpoint_url=None, **kwargs):
+def fix_s3_host(
+    request,
+    signature_version,
+    region_name,
+    default_endpoint_url=None,
+    **kwargs,
+):
     """
     This handler looks at S3 requests just before they are signed.
     If there is a bucket name on the path (true for everything except
@@ -1157,15 +1215,18 @@ def fix_s3_host(request, signature_versi
         default_endpoint_url = 's3.amazonaws.com'
     try:
         switch_to_virtual_host_style(
-            request, signature_version, default_endpoint_url)
+            request, signature_version, default_endpoint_url
+        )
     except InvalidDNSNameError as e:
         bucket_name = e.kwargs['bucket_name']
-        logger.debug('Not changing URI, bucket is not DNS compatible: %s',
-                     bucket_name)
+        logger.debug(
+            'Not changing URI, bucket is not DNS compatible: %s', bucket_name
+        )
 
 
-def switch_to_virtual_host_style(request, signature_version,
-                                 default_endpoint_url=None, **kwargs):
+def switch_to_virtual_host_style(
+    request, signature_version, default_endpoint_url=None, **kwargs
+):
     """
     This is a handler to force virtual host style s3 addressing no matter
     the signature version (which is taken in consideration for the default
@@ -1186,8 +1247,10 @@ def switch_to_virtual_host_style(request
         # For the GetBucketLocation response, we should not be using
         # the virtual host style addressing so we can avoid any sigv4
         # issues.
-        logger.debug("Request is GetBucketLocation operation, not checking "
-                     "for DNS compatibility.")
+        logger.debug(
+            "Request is GetBucketLocation operation, not checking "
+            "for DNS compatibility."
+        )
         return
     parts = urlsplit(request.url)
     request.auth_path = parts.path
@@ -1203,8 +1266,7 @@ def switch_to_virtual_host_style(request
             # If the bucket name is empty we should not be checking for
             # dns compatibility.
             return
-        logger.debug('Checking for DNS compatible bucket for: %s',
-                     request.url)
+        logger.debug('Checking for DNS compatible bucket for: %s', request.url)
         if check_dns_name(bucket_name):
             # If the operation is on a bucket, the auth_path must be
             # terminated with a '/' character.
@@ -1218,8 +1280,7 @@ def switch_to_virtual_host_style(request
             path = '/'.join(path_parts) or '/'
             global_endpoint = default_endpoint_url
             host = bucket_name + '.' + global_endpoint
-            new_tuple = (parts.scheme, host, path,
-                         parts.query, '')
+            new_tuple = (parts.scheme, host, path, parts.query, '')
             new_uri = urlunsplit(new_tuple)
             request.url = new_uri
             logger.debug('URI updated to: %s', new_uri)
@@ -1260,6 +1321,7 @@ def instance_cache(func):
         result = func(self, *args, **kwargs)
         self._instance_cache[cache_key] = result
         return result
+
     return _cache_guard
 
 
@@ -1308,7 +1370,7 @@ def switch_host_s3_accelerate(request, o
 
     if operation_name in ['ListBuckets', 'CreateBucket', 'DeleteBucket']:
         return
-    _switch_hosts(request, endpoint,  use_new_scheme=False)
+    _switch_hosts(request, endpoint, use_new_scheme=False)
 
 
 def switch_host_with_param(request, param_name):
@@ -1321,7 +1383,8 @@ def switch_host_with_param(request, para
 
 def _switch_hosts(request, new_endpoint, use_new_scheme=True):
     final_endpoint = _get_new_endpoint(
-        request.url, new_endpoint, use_new_scheme)
+        request.url, new_endpoint, use_new_scheme
+    )
     request.url = final_endpoint
 
 
@@ -1336,11 +1399,10 @@ def _get_new_endpoint(original_endpoint,
         new_endpoint_components.netloc,
         original_endpoint_components.path,
         original_endpoint_components.query,
-        ''
+        '',
     )
     final_endpoint = urlunsplit(final_endpoint_components)
-    logger.debug('Updating URI from %s to %s' % (
-        original_endpoint, final_endpoint))
+    logger.debug(f'Updating URI from {original_endpoint} to {final_endpoint}')
     return final_endpoint
 
 
@@ -1353,8 +1415,11 @@ def deep_merge(base, extra):
     """
     for key in extra:
         # If the key represents a dict on both given dicts, merge the sub-dicts
-        if key in base and isinstance(base[key], dict)\
-                and isinstance(extra[key], dict):
+        if (
+            key in base
+            and isinstance(base[key], dict)
+            and isinstance(extra[key], dict)
+        ):
             deep_merge(base[key], extra[key])
             continue
 
@@ -1595,17 +1660,16 @@ class S3RegionRedirectorv2:
 
         if new_region is None:
             logger.debug(
-                "S3 client configured for region %s but the bucket %s is not "
+                f"S3 client configured for region {client_region} but the bucket {bucket} is not "
                 "in that region and the proper region could not be "
-                "automatically determined." % (client_region, bucket)
+                "automatically determined."
             )
             return
 
         logger.debug(
-            "S3 client configured for region %s but the bucket %s is in region"
-            " %s; Please configure the proper region to avoid multiple "
+            f"S3 client configured for region {client_region} but the bucket {bucket} is in region"
+            f" {new_region}; Please configure the proper region to avoid multiple "
             "unnecessary redirects and signing attempts."
-            % (client_region, bucket, new_region)
         )
         # Adding the new region to _cache will make construct_endpoint() to
         # use the new region as value for the AWS::Region builtin parameter.
@@ -1701,7 +1765,7 @@ class S3RegionRedirectorv2:
         }
 
 
-class S3RegionRedirector(object):
+class S3RegionRedirector:
     """This handler has been replaced by S3RegionRedirectorv2. The original
     version remains in place for any third-party libraries that import it.
     """
@@ -1722,13 +1786,11 @@ class S3RegionRedirector(object):
             category=FutureWarning,
         )
 
-
     def register(self, event_emitter=None):
         emitter = event_emitter or self._client.meta.events
         emitter.register('needs-retry.s3', self.redirect_from_error)
         emitter.register('before-call.s3', self.set_request_url)
-        emitter.register('before-parameter-build.s3',
-                         self.redirect_from_cache)
+        emitter.register('before-parameter-build.s3', self.redirect_from_cache)
 
     def redirect_from_error(self, request_dict, response, operation, **kwargs):
         """
@@ -1750,7 +1812,8 @@ class S3RegionRedirector(object):
 
         if request_dict.get('context', {}).get('s3_redirected'):
             logger.debug(
-                'S3 request was previously redirected, not redirecting.')
+                'S3 request was previously redirected, not redirecting.'
+            )
             return
 
         error = response[1].get('Error', {})
@@ -1762,24 +1825,30 @@ class S3RegionRedirector(object):
         # we'll get a 400 Bad Request but we won't get a
         # body saying it's an "AuthorizationHeaderMalformed".
         is_special_head_object = (
-            error_code in ['301', '400'] and
-            operation.name == 'HeadObject'
+            error_code in ['301', '400'] and operation.name == 'HeadObject'
         )
         is_special_head_bucket = (
-            error_code in ['301', '400'] and
-            operation.name == 'HeadBucket' and
-            'x-amz-bucket-region' in response_metadata.get('HTTPHeaders', {})
+            error_code in ['301', '400']
+            and operation.name == 'HeadBucket'
+            and 'x-amz-bucket-region'
+            in response_metadata.get('HTTPHeaders', {})
         )
         is_wrong_signing_region = (
-            error_code == 'AuthorizationHeaderMalformed' and
-            'Region' in error
+            error_code == 'AuthorizationHeaderMalformed' and 'Region' in error
         )
-        is_redirect_status = response[0] is not None and \
-            response[0].status_code in [301, 302, 307]
+        is_redirect_status = response[0] is not None and response[
+            0
+        ].status_code in [301, 302, 307]
         is_permanent_redirect = error_code == 'PermanentRedirect'
-        if not any([is_special_head_object, is_wrong_signing_region,
-                    is_permanent_redirect, is_special_head_bucket,
-                    is_redirect_status]):
+        if not any(
+            [
+                is_special_head_object,
+                is_wrong_signing_region,
+                is_permanent_redirect,
+                is_special_head_bucket,
+                is_redirect_status,
+            ]
+        ):
             return
 
         bucket = request_dict['context']['signing']['bucket']
@@ -1788,23 +1857,24 @@ class S3RegionRedirector(object):
 
         if new_region is None:
             logger.debug(
-                "S3 client configured for region %s but the bucket %s is not "
+                f"S3 client configured for region {client_region} but the bucket {bucket} is not "
                 "in that region and the proper region could not be "
-                "automatically determined." % (client_region, bucket))
+                "automatically determined."
+            )
             return
 
         logger.debug(
-            "S3 client configured for region %s but the bucket %s is in region"
-            " %s; Please configure the proper region to avoid multiple "
-            "unnecessary redirects and signing attempts." % (
-                client_region, bucket, new_region))
+            f"S3 client configured for region {client_region} but the bucket {bucket} is in region"
+            f" {new_region}; Please configure the proper region to avoid multiple "
+            "unnecessary redirects and signing attempts."
+        )
         endpoint = self._endpoint_resolver.resolve('s3', new_region)
         endpoint = endpoint['endpoint_url']
 
         signing_context = {
             'region': new_region,
             'bucket': bucket,
-            'endpoint': endpoint
+            'endpoint': endpoint,
         }
         request_dict['context']['signing'] = signing_context
 
@@ -1876,13 +1946,13 @@ class InvalidArnException(ValueError):
     pass
 
 
-class ArnParser(object):
+class ArnParser:
     def parse_arn(self, arn):
         arn_parts = arn.split(':', 5)
         if len(arn_parts) < 6:
             raise InvalidArnException(
-                'Provided ARN: %s must be of the format: '
-                'arn:partition:service:region:account:resource' % arn
+                f'Provided ARN: {arn} must be of the format: '
+                'arn:partition:service:region:account:resource'
             )
         return {
             'partition': arn_parts[1],
@@ -1904,7 +1974,7 @@ class ArnParser(object):
             return False
 
 
-class S3ArnParamHandler(object):
+class S3ArnParamHandler:
     _RESOURCE_REGEX = re.compile(
         r'^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$'
     )
@@ -1912,9 +1982,7 @@ class S3ArnParamHandler(object):
         r'^(?P<outpost_name>[a-zA-Z0-9\-]{1,63})[/:]accesspoint[/:]'
         r'(?P<accesspoint_name>[a-zA-Z0-9\-]{1,63}$)'
     )
-    _BLACKLISTED_OPERATIONS = [
-        'CreateBucket'
-    ]
+    _BLACKLISTED_OPERATIONS = ['CreateBucket']
 
     def __init__(self, arn_parser=None):
         self._arn_parser = arn_parser
@@ -1991,13 +2059,19 @@ class S3ArnParamHandler(object):
         }
 
 
-class S3EndpointSetter(object):
+class S3EndpointSetter:
     _DEFAULT_PARTITION = 'aws'
     _DEFAULT_DNS_SUFFIX = 'amazonaws.com'
 
-    def __init__(self, endpoint_resolver, region=None,
-                 s3_config=None, endpoint_url=None, partition=None,
-                 use_fips_endpoint=False):
+    def __init__(
+        self,
+        endpoint_resolver,
+        region=None,
+        s3_config=None,
+        endpoint_url=None,
+        partition=None,
+        use_fips_endpoint=False,
+    ):
         # This is calling the endpoint_resolver in regions.py
         self._endpoint_resolver = endpoint_resolver
         self._region = region
@@ -2015,7 +2089,7 @@ class S3EndpointSetter(object):
         event_emitter.register('choose-signer.s3', self.set_signer)
         event_emitter.register(
             'before-call.s3.WriteGetObjectResponse',
-            self.update_endpoint_to_s3_object_lambda
+            self.update_endpoint_to_s3_object_lambda,
         )
 
     def update_endpoint_to_s3_object_lambda(self, params, context, **kwargs):
@@ -2031,7 +2105,9 @@ class S3EndpointSetter(object):
 
         resolver = self._endpoint_resolver
         # Constructing endpoints as s3-object-lambda as region
-        resolved = resolver.construct_endpoint('s3-object-lambda', self._region)
+        resolved = resolver.construct_endpoint(
+            's3-object-lambda', self._region
+        )
 
         # Ideally we would be able to replace the endpoint before
         # serialization but there's no event to do that currently
@@ -2049,9 +2125,9 @@ class S3EndpointSetter(object):
             self._validate_fips_supported(request)
             self._validate_global_regions(request)
             region_name = self._resolve_region_for_accesspoint_endpoint(
-                request)
-            self._resolve_signing_name_for_accesspoint_endpoint(
-                request)
+                request
+            )
+            self._resolve_signing_name_for_accesspoint_endpoint(request)
             self._switch_to_accesspoint_endpoint(request, region_name)
             return
         if self._use_accelerate_endpoint:
@@ -2059,8 +2135,8 @@ class S3EndpointSetter(object):
                 raise UnsupportedS3ConfigurationError(
                     msg=(
                         'Client is configured to use the FIPS psuedo region '
-                        'for "%s", but S3 Accelerate does not have any FIPS '
-                        'compatible endpoints.' % (self._region)
+                        f'for "{self._region}", but S3 Accelerate does not have any FIPS '
+                        'compatible endpoints.'
                     )
                 )
             switch_host_s3_accelerate(request=request, **kwargs)
@@ -2075,16 +2151,13 @@ class S3EndpointSetter(object):
             return
         if 'fips' in request.context['s3_accesspoint']['region']:
             raise UnsupportedS3AccesspointConfigurationError(
-                msg={
-                    'Invalid ARN, FIPS region not allowed in ARN.'
-                }
+                msg={'Invalid ARN, FIPS region not allowed in ARN.'}
             )
         if 'outpost_name' in request.context['s3_accesspoint']:
             raise UnsupportedS3AccesspointConfigurationError(
                 msg=(
-                    'Client is configured to use the FIPS psuedo-region "%s", '
-                    'but outpost ARNs do not support FIPS endpoints.' % (
-                        self._region)
+                    f'Client is configured to use the FIPS psuedo-region "{self._region}", '
+                    'but outpost ARNs do not support FIPS endpoints.'
                 )
             )
         # Transforming psuedo region to actual region
@@ -2096,11 +2169,10 @@ class S3EndpointSetter(object):
                 raise UnsupportedS3AccesspointConfigurationError(
                     msg=(
                         'Client is configured to use the FIPS psuedo-region '
-                        'for "%s", but the access-point ARN provided is for '
-                        'the "%s" region. For clients using a FIPS '
+                        f'for "{self._region}", but the access-point ARN provided is for '
+                        f'the "{accesspoint_region}" region. For clients using a FIPS '
                         'psuedo-region calls to access-point ARNs in another '
-                        'region are not allowed.' % (self._region,
-                                                     accesspoint_region)
+                        'region are not allowed.'
                     )
                 )
 
@@ -2111,8 +2183,8 @@ class S3EndpointSetter(object):
             raise UnsupportedS3AccesspointConfigurationError(
                 msg=(
                     'Client is configured to use the global psuedo-region '
-                    '"%s". When providing access-point ARNs a regional '
-                    'endpoint must be specified.' % self._region
+                    f'"{self._region}". When providing access-point ARNs a regional '
+                    'endpoint must be specified.'
                 )
             )
 
@@ -2128,14 +2200,15 @@ class S3EndpointSetter(object):
         if request_partition != self._partition:
             raise UnsupportedS3AccesspointConfigurationError(
                 msg=(
-                    'Client is configured for "%s" partition, but access-point'
-                    ' ARN provided is for "%s" partition. The client and '
-                    ' access-point partition must be the same.' % (
-                        self._partition, request_partition)
+                    f'Client is configured for "{self._partition}" partition, but access-point'
+                    f' ARN provided is for "{request_partition}" partition. The client and '
+                    ' access-point partition must be the same.'
                 )
             )
         s3_service = request.context['s3_accesspoint'].get('service')
-        if s3_service == 's3-object-lambda' and self._s3_config.get('use_dualstack_endpoint'):
+        if s3_service == 's3-object-lambda' and self._s3_config.get(
+            'use_dualstack_endpoint'
+        ):
             raise UnsupportedS3AccesspointConfigurationError(
                 msg=(
                     'Client does not support s3 dualstack configuration '
@@ -2193,16 +2266,20 @@ class S3EndpointSetter(object):
 
     def _switch_to_accesspoint_endpoint(self, request, region_name):
         original_components = urlsplit(request.url)
-        accesspoint_endpoint = urlunsplit((
-            original_components.scheme,
-            self._get_netloc(request.context, region_name),
-            self._get_accesspoint_path(
-                original_components.path, request.context),
-            original_components.query,
-            ''
-        ))
+        accesspoint_endpoint = urlunsplit(
+            (
+                original_components.scheme,
+                self._get_netloc(request.context, region_name),
+                self._get_accesspoint_path(
+                    original_components.path, request.context
+                ),
+                original_components.query,
+                '',
+            )
+        )
         logger.debug(
-            'Updating URI from %s to %s' % (request.url, accesspoint_endpoint))
+            f'Updating URI from {request.url} to {accesspoint_endpoint}'
+        )
         request.url = accesspoint_endpoint
 
     def _get_netloc(self, request_context, region_name):
@@ -2214,9 +2291,7 @@ class S3EndpointSetter(object):
     def _get_mrap_netloc(self, request_context):
         s3_accesspoint = request_context['s3_accesspoint']
         region_name = 's3-global'
-        mrap_netloc_components = [
-            s3_accesspoint['name']
-        ]
+        mrap_netloc_components = [s3_accesspoint['name']]
         if self._endpoint_url:
             endpoint_url_netloc = urlsplit(self._endpoint_url).netloc
             mrap_netloc_components.append(endpoint_url_netloc)
@@ -2226,7 +2301,7 @@ class S3EndpointSetter(object):
                 [
                     'accesspoint',
                     region_name,
-                    self._get_partition_dns_suffix(partition)
+                    self._get_partition_dns_suffix(partition),
                 ]
             )
         return '.'.join(mrap_netloc_components)
@@ -2234,7 +2309,7 @@ class S3EndpointSetter(object):
     def _get_accesspoint_netloc(self, request_context, region_name):
         s3_accesspoint = request_context['s3_accesspoint']
         accesspoint_netloc_components = [
-            '%s-%s' % (s3_accesspoint['name'], s3_accesspoint['account']),
+            '{}-{}'.format(s3_accesspoint['name'], s3_accesspoint['account']),
         ]
         outpost_name = s3_accesspoint.get('outpost_name')
         if self._endpoint_url:
@@ -2248,25 +2323,24 @@ class S3EndpointSetter(object):
                 accesspoint_netloc_components.extend(outpost_host)
             elif s3_accesspoint['service'] == 's3-object-lambda':
                 component = self._inject_fips_if_needed(
-                    's3-object-lambda', request_context)
+                    's3-object-lambda', request_context
+                )
                 accesspoint_netloc_components.append(component)
             else:
                 component = self._inject_fips_if_needed(
-                    's3-accesspoint', request_context)
+                    's3-accesspoint', request_context
+                )
                 accesspoint_netloc_components.append(component)
             if self._s3_config.get('use_dualstack_endpoint'):
                 accesspoint_netloc_components.append('dualstack')
             accesspoint_netloc_components.extend(
-                [
-                    region_name,
-                    self._get_dns_suffix(region_name)
-                ]
+                [region_name, self._get_dns_suffix(region_name)]
             )
         return '.'.join(accesspoint_netloc_components)
 
     def _inject_fips_if_needed(self, component, request_context):
         if self._use_fips_endpoint:
-            return '%s-fips' % component
+            return f'{component}-fips'
         return component
 
     def _get_accesspoint_path(self, original_path, request_context):
@@ -2288,7 +2362,8 @@ class S3EndpointSetter(object):
 
     def _get_dns_suffix(self, region_name):
         resolved = self._endpoint_resolver.construct_endpoint(
-            's3', region_name)
+            's3', region_name
+        )
         dns_suffix = self._DEFAULT_DNS_SUFFIX
         if resolved and 'dnsSuffix' in resolved:
             dns_suffix = resolved['dnsSuffix']
@@ -2375,21 +2450,29 @@ class S3EndpointSetter(object):
             logger.debug("Using S3 path style addressing.")
             return None
 
-        logger.debug("Defaulting to S3 virtual host style addressing with "
-                     "path style addressing fallback.")
+        logger.debug(
+            "Defaulting to S3 virtual host style addressing with "
+            "path style addressing fallback."
+        )
 
         # By default, try to use virtual style with path fallback.
         return fix_s3_host
 
 
-class S3ControlEndpointSetter(object):
+class S3ControlEndpointSetter:
     _DEFAULT_PARTITION = 'aws'
     _DEFAULT_DNS_SUFFIX = 'amazonaws.com'
     _HOST_LABEL_REGEX = re.compile(r'^[a-zA-Z0-9\-]{1,63}$')
 
-    def __init__(self, endpoint_resolver, region=None,
-                 s3_config=None, endpoint_url=None, partition=None,
-                 use_fips_endpoint=False):
+    def __init__(
+        self,
+        endpoint_resolver,
+        region=None,
+        s3_config=None,
+        endpoint_url=None,
+        partition=None,
+        use_fips_endpoint=False,
+    ):
         self._endpoint_resolver = endpoint_resolver
         self._region = region
         self._s3_config = s3_config
@@ -2413,7 +2496,6 @@ class S3ControlEndpointSetter(object):
             self._add_headers_from_arn_details(request)
         elif self._use_endpoint_from_outpost_id(request):
             self._validate_outpost_redirection_valid(request)
-            outpost_id = request.context['outpost_id']
             self._override_signing_name(request, 's3-outposts')
             new_netloc = self._construct_outpost_endpoint(self._region)
             self._update_request_netloc(request, new_netloc)
@@ -2428,27 +2510,24 @@ class S3ControlEndpointSetter(object):
         if 'fips' in request.context['arn_details']['region']:
             raise UnsupportedS3ControlArnError(
                 arn=request.context['arn_details']['original'],
-                msg={
-                    'Invalid ARN, FIPS region not allowed in ARN.'
-                }
+                msg={'Invalid ARN, FIPS region not allowed in ARN.'},
             )
         if not self._s3_config.get('use_arn_region', False):
             arn_region = request.context['arn_details']['region']
             if arn_region != self._region:
                 error_msg = (
                     'The use_arn_region configuration is disabled but '
-                    'received arn for "%s" when the client is configured '
-                    'to use "%s"'
-                ) % (arn_region, self._region)
+                    f'received arn for "{arn_region}" when the client is configured '
+                    f'to use "{self._region}"'
+                )
                 raise UnsupportedS3ControlConfigurationError(msg=error_msg)
         request_partion = request.context['arn_details']['partition']
         if request_partion != self._partition:
             raise UnsupportedS3ControlConfigurationError(
                 msg=(
-                    'Client is configured for "%s" partition, but arn '
-                    'provided is for "%s" partition. The client and '
-                    'arn partition must be the same.' % (
-                        self._partition, request_partion)
+                    f'Client is configured for "{self._partition}" partition, but arn '
+                    f'provided is for "{request_partion}" partition. The client and '
+                    'arn partition must be the same.'
                 )
             )
         if self._s3_config.get('use_accelerate_endpoint'):
@@ -2482,20 +2561,24 @@ class S3ControlEndpointSetter(object):
         return arn_service
 
     def _resolve_endpoint_from_arn_details(self, request, region_name):
-        new_netloc = self._resolve_netloc_from_arn_details(request, region_name)
+        new_netloc = self._resolve_netloc_from_arn_details(
+            request, region_name
+        )
         self._update_request_netloc(request, new_netloc)
 
     def _update_request_netloc(self, request, new_netloc):
         original_components = urlsplit(request.url)
-        arn_details_endpoint = urlunsplit((
-            original_components.scheme,
-            new_netloc,
-            original_components.path,
-            original_components.query,
-            ''
-        ))
+        arn_details_endpoint = urlunsplit(
+            (
+                original_components.scheme,
+                new_netloc,
+                original_components.path,
+                original_components.query,
+                '',
+            )
+        )
         logger.debug(
-            'Updating URI from %s to %s' % (request.url, arn_details_endpoint)
+            f'Updating URI from {request.url} to {arn_details_endpoint}'
         )
         request.url = arn_details_endpoint
 
@@ -2555,7 +2638,8 @@ class S3ControlEndpointSetter(object):
 
     def _get_dns_suffix(self, region_name):
         resolved = self._endpoint_resolver.construct_endpoint(
-            's3', region_name)
+            's3', region_name
+        )
         dns_suffix = self._DEFAULT_DNS_SUFFIX
         if resolved and 'dnsSuffix' in resolved:
             dns_suffix = resolved['dnsSuffix']
@@ -2636,17 +2720,17 @@ class S3ControlArnParamHandler:
             return None
 
     def _split_resource(self, arn_details):
-       return self._RESOURCE_SPLIT_REGEX.split(arn_details['resource'])
+        return self._RESOURCE_SPLIT_REGEX.split(arn_details['resource'])
 
     def _override_account_id_param(self, params, arn_details):
         account_id = arn_details['account']
         if 'AccountId' in params and params['AccountId'] != account_id:
             error_msg = (
                 'Account ID in arn does not match the AccountId parameter '
-                'provided: "%s"'
-            ) % params['AccountId']
+                'provided: "{}"'
+            ).format(params['AccountId'])
             raise UnsupportedS3ControlArnError(
-               arn=arn_details['original'],
+                arn=arn_details['original'],
                 msg=error_msg,
             )
         params['AccountId'] = account_id
@@ -2799,8 +2883,7 @@ class S3ControlArnParamHandlerv2(S3Contr
             )
 
 
-class ContainerMetadataFetcher(object):
-
+class ContainerMetadataFetcher:
     TIMEOUT_SECONDS = 2
     RETRY_ATTEMPTS = 3
     SLEEP_TIME = 1
@@ -2836,8 +2919,7 @@ class ContainerMetadataFetcher(object):
         parsed = botocore.compat.urlparse(full_url)
         if self._is_loopback_address(parsed.hostname):
             return
-        is_whitelisted_host = self._check_if_whitelisted_host(
-            parsed.hostname)
+        is_whitelisted_host = self._check_if_whitelisted_host(parsed.hostname)
         if not is_whitelisted_host:
             raise ValueError(
                 f"Unsupported host '{parsed.hostname}'.  Can only retrieve metadata "
@@ -2876,10 +2958,15 @@ class ContainerMetadataFetcher(object):
         while True:
             try:
                 return self._get_response(
-                    full_url, headers, self.TIMEOUT_SECONDS)
+                    full_url, headers, self.TIMEOUT_SECONDS
+                )
             except MetadataRetrievalError as e:
-                logger.debug("Received error when attempting to retrieve "
-                             "container metadata: %s", e, exc_info=True)
+                logger.debug(
+                    "Received error when attempting to retrieve "
+                    "container metadata: %s",
+                    e,
+                    exc_info=True,
+                )
                 self._sleep(self.SLEEP_TIME)
                 attempts += 1
                 if attempts >= self.RETRY_ATTEMPTS:
@@ -2912,7 +2999,7 @@ class ContainerMetadataFetcher(object):
             raise MetadataRetrievalError(error_msg=error_msg)
 
     def full_url(self, relative_uri):
-        return 'http://%s%s' % (self.IP_ADDRESS, relative_uri)
+        return f'http://{self.IP_ADDRESS}{relative_uri}'
 
 
 def get_environ_proxies(url):
@@ -3095,7 +3182,7 @@ def conditionally_calculate_md5(params,
         params['headers']['Content-MD5'] = md5_digest
 
 
-class FileWebIdentityTokenLoader(object):
+class FileWebIdentityTokenLoader:
     def __init__(self, web_identity_token_path, _open=open):
         self._web_identity_token_path = web_identity_token_path
         self._open = _open
@@ -3105,18 +3192,23 @@ class FileWebIdentityTokenLoader(object)
             return token_file.read()
 
 
-class BaseSSOTokenFetcher(object):
+class BaseSSOTokenFetcher:
     """Base class for SSO token fetchers, for functionality
     shared between the device and authorization code grant flows.
     """
+
     _EXPIRY_WINDOW = 15 * 60
     _CLIENT_REGISTRATION_TYPE = 'public'
     _USER_AGENT_EXTRA = None
 
     def __init__(
-            self, sso_region, client_creator,
-            parsed_globals, cache=None,
-            on_pending_authorization=None, time_fetcher=None
+        self,
+        sso_region,
+        client_creator,
+        parsed_globals,
+        cache=None,
+        on_pending_authorization=None,
+        time_fetcher=None,
     ):
         self._sso_region = sso_region
         self._client_creator = client_creator
@@ -3207,6 +3299,7 @@ class BaseSSOTokenFetcher(object):
 
 class SSOTokenFetcher(BaseSSOTokenFetcher):
     """Performs the device grant OAuth2.0 flow"""
+
     # The device flow RFC defines the slow-down delay to be an additional
     # 5 seconds:
     # https://tools.ietf.org/html/draft-ietf-oauth-device-flow-15#section-3.5
@@ -3272,10 +3365,9 @@ class SSOTokenFetcher(BaseSSOTokenFetche
         )
         if not force_refresh and cache_key in self._cache:
             registration = self._cache[cache_key]
-            if (
-                not self._is_expired(registration)
-                and not self._is_registration_for_auth_code(registration)
-            ):
+            if not self._is_expired(
+                registration
+            ) and not self._is_registration_for_auth_code(registration):
                 return registration
 
         registration = self._register_client(
@@ -3345,7 +3437,11 @@ class SSOTokenFetcher(BaseSSOTokenFetche
             self._sleep(interval)
 
     def _create_token_attempt(
-        self, start_url, registration, authorization, interval,
+        self,
+        start_url,
+        registration,
+        authorization,
+        interval,
     ):
         try:
             response = self._client.create_token(
@@ -3416,6 +3512,7 @@ class SSOTokenFetcher(BaseSSOTokenFetche
 
 class SSOTokenFetcherAuth(BaseSSOTokenFetcher):
     """Performs the authorization code grant with PKCE OAuth2.0 flow"""
+
     _AUTH_GRANT_TYPES = ('authorization_code', 'refresh_token')
     _AUTH_GRANT_DEFAULT_SCOPE = 'sso:account:access'
     _USER_AGENT_EXTRA = 'md/sso#auth'
@@ -3443,9 +3540,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
 
         # Generate the PKCE pair
         self.code_verifier = ''.join(
-            secrets.choice(
-                string.ascii_letters + string.digits + '-._~'
-            )
+            secrets.choice(string.ascii_letters + string.digits + '-._~')
             for _ in range(64)
         )
         self.code_challenge = base64.urlsafe_b64encode(
@@ -3471,7 +3566,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
             'clientSecret': response['clientSecret'],
             'expiresAt': expires_at,
             'scopes': register_kwargs['scopes'],
-            'grantTypes': register_kwargs['grantTypes']
+            'grantTypes': register_kwargs['grantTypes'],
         }
 
         return registration
@@ -3490,17 +3585,16 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
         )
         if not force_refresh and cache_key in self._cache:
             registration = self._cache[cache_key]
-            if (
-                not self._is_expired(registration)
-                and self._is_registration_for_auth_code(registration)
-            ):
+            if not self._is_expired(
+                registration
+            ) and self._is_registration_for_auth_code(registration):
                 return registration
 
         registration = self._register_client(
             session_name,
             scopes,
             self._auth_code_fetcher.redirect_uri_without_port(),
-            start_url
+            start_url,
         )
         self._cache[cache_key] = registration
         return registration
@@ -3526,10 +3620,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
         self._client.meta.events.register(
             'before-call', self._extract_resolved_endpoint
         )
-        self._client.register_client(
-            clientName='temp',
-            clientType='public'
-        )
+        self._client.register_client(clientName='temp', clientType='public')
         self._client.meta.events.unregister(
             'before-call', self._extract_resolved_endpoint
         )
@@ -3537,18 +3628,14 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
         return self._base_endpoint
 
     def _get_authorization_uri(
-        self,
-        client_id,
-        registration_scopes,
-        expected_state
+        self, client_id, registration_scopes, expected_state
     ):
-
         query_params = {
             'response_type': 'code',
             'client_id': client_id,
             'redirect_uri': self._auth_code_fetcher.redirect_uri_with_port(),
             'state': expected_state,
-            'code_challenge_method': 'S256'
+            'code_challenge_method': 'S256',
             # Don't want to encode code_challenge again, so we append below
         }
 
@@ -3574,9 +3661,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
         expected_state = uuid.uuid4()
 
         authorization_uri = self._get_authorization_uri(
-            registration['clientId'],
-            registration_scopes,
-            expected_state
+            registration['clientId'], registration_scopes, expected_state
         )
 
         # Even though there's just one URI, this matches the inputs
@@ -3584,7 +3669,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
         authorization_args = {
             'verificationUri': authorization_uri,
             'verificationUriComplete': authorization_uri,
-            'userCode': None
+            'userCode': None,
         }
 
         # Open/display the link, then block until the redirect uri is hit and
@@ -3614,7 +3699,7 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
                 clientSecret=registration['clientSecret'],
                 redirectUri=self._auth_code_fetcher.redirect_uri_with_port(),
                 codeVerifier=self.code_verifier,
-                code=auth_code
+                code=auth_code,
             )
             expires_in = datetime.timedelta(seconds=response['expiresIn'])
             token = {
@@ -3648,15 +3733,13 @@ class SSOTokenFetcherAuth(BaseSSOTokenFe
                 return token
 
         token = self._get_new_token(
-            start_url,
-            session_name,
-            registration_scopes
+            start_url, session_name, registration_scopes
         )
         self._cache[cache_key] = token
         return token
 
 
-class SSOTokenLoader(object):
+class SSOTokenLoader:
     def __init__(self, cache=None):
         if cache is None:
             cache = {}
@@ -3694,11 +3777,22 @@ def original_ld_library_path(env=None):
     # See: https://pyinstaller.readthedocs.io/en/stable/runtime-information.html
     # When running under pyinstaller, it will set an
     # LD_LIBRARY_PATH to ensure it prefers its bundled version of libs.
-    # There are times where we don't want this behavior, for example when
+    # There are times when we don't want this behavior, for example when
     # running a separate subprocess.
     if env is None:
         env = os.environ
 
+    # Unless the user provided an explicit value, set this so
+    # PyInstaller resets the environment variables used by its
+    # bootloader causing a subprocess to be treated as new.
+    # This avoids interfering with starting another PyInstaller
+    # process, such as the CLI using another instance of itself
+    # as a credentials process.
+    should_clear_pyinstaller_reset_environment = False
+    if 'PYINSTALLER_RESET_ENVIRONMENT' not in env:
+        env['PYINSTALLER_RESET_ENVIRONMENT'] = '1'
+        should_clear_pyinstaller_reset_environment = True
+
     value_to_put_back = env.get('LD_LIBRARY_PATH')
     # The first case is where a user has exported an LD_LIBRARY_PATH
     # in their env.  This will be mapped to LD_LIBRARY_PATH_ORIG.
@@ -3713,18 +3807,15 @@ def original_ld_library_path(env=None):
     finally:
         if value_to_put_back is not None:
             env['LD_LIBRARY_PATH'] = value_to_put_back
+        if should_clear_pyinstaller_reset_environment:
+            env.pop('PYINSTALLER_RESET_ENVIRONMENT', None)
 
 
 class EventbridgeSignerSetter:
     _DEFAULT_PARTITION = 'aws'
     _DEFAULT_DNS_SUFFIX = 'amazonaws.com'
 
-    def __init__(
-        self,
-        endpoint_resolver,
-        region=None,
-        endpoint_url=None
-    ):
+    def __init__(self, endpoint_resolver, region=None, endpoint_url=None):
         self._endpoint_resolver = endpoint_resolver
         self._region = region
         self._endpoint_url = endpoint_url
@@ -3732,19 +3823,16 @@ class EventbridgeSignerSetter:
     def register(self, event_emitter):
         event_emitter.register(
             'before-parameter-build.eventbridge.PutEvents',
-            self.check_for_global_endpoint
+            self.check_for_global_endpoint,
         )
         event_emitter.register(
-            'before-call.eventbridge.PutEvents',
-            self.set_endpoint_url
+            'before-call.eventbridge.PutEvents', self.set_endpoint_url
         )
 
     def set_endpoint_url(self, params, context, **kwargs):
         if 'eventbridge_endpoint' in context:
             endpoint = context['eventbridge_endpoint']
-            logger.debug(
-                f"Rewriting URL from {params['url']} to {endpoint}"
-            )
+            logger.debug(f"Rewriting URL from {params['url']} to {endpoint}")
             params['url'] = endpoint
 
     def check_for_global_endpoint(self, params, context, **kwargs):
@@ -3776,8 +3864,7 @@ class EventbridgeSignerSetter:
                     msg='EndpointId is not a valid hostname component.'
                 )
             resolved_endpoint = self._get_global_endpoint(
-                endpoint,
-                endpoint_variant_tags=endpoint_variant_tags
+                endpoint, endpoint_variant_tags=endpoint_variant_tags
             )
         else:
             resolved_endpoint = self._endpoint_url
@@ -3792,8 +3879,7 @@ class EventbridgeSignerSetter:
         if partition is None:
             partition = self._DEFAULT_PARTITION
         dns_suffix = resolver.get_partition_dns_suffix(
-            partition,
-            endpoint_variant_tags=endpoint_variant_tags
+            partition, endpoint_variant_tags=endpoint_variant_tags
         )
         if dns_suffix is None:
             dns_suffix = self._DEFAULT_DNS_SUFFIX
@@ -3909,6 +3995,21 @@ def is_s3express_bucket(bucket):
     return bucket.endswith('--x-s3')
 
 
+def get_token_from_environment(signing_name, environ=None):
+    if not isinstance(signing_name, str) or not signing_name.strip():
+        return None
+
+    if environ is None:
+        environ = os.environ
+    env_var = _get_bearer_env_var_name(signing_name)
+    return environ.get(env_var)
+
+
+def _get_bearer_env_var_name(signing_name):
+    bearer_name = signing_name.replace('-', '_').replace(' ', '_').upper()
+    return f"AWS_BEARER_TOKEN_{bearer_name}"
+
+
 # This parameter is not part of the public interface and is subject to abrupt
 # breaking changes or removal without prior announcement.
 # Mapping of services that have been renamed for backwards compatibility reasons.
diff -pruN 2.23.6-1/awscli/botocore/validate.py 2.31.35-1/awscli/botocore/validate.py
--- 2.23.6-1/awscli/botocore/validate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/validate.py	2025-11-12 19:17:29.000000000 +0000
@@ -56,12 +56,17 @@ def type_check(valid_types):
         def _type_check(param, errors, name):
             if not isinstance(param, valid_types):
                 valid_type_names = [str(t) for t in valid_types]
-                errors.report(name, 'invalid type', param=param,
-                              valid_types=valid_type_names)
+                errors.report(
+                    name,
+                    'invalid type',
+                    param=param,
+                    valid_types=valid_type_names,
+                )
                 return False
             return True
 
         return _on_passes_type_check
+
     return _create_type_check_guard
 
 
@@ -82,7 +87,7 @@ def range_check(name, value, shape, erro
         errors.report(name, error_type, param=value, min_allowed=min_allowed)
 
 
-class ValidationErrors(object):
+class ValidationErrors:
     def __init__(self):
         self._errors = []
 
@@ -101,45 +106,71 @@ class ValidationErrors(object):
         error_type, name, additional = error
         name = self._get_name(name)
         if error_type == 'missing required field':
-            return 'Missing required parameter in %s: "%s"' % (
-                name, additional['required_name'])
+            return 'Missing required parameter in {}: "{}"'.format(
+                name,
+                additional['required_name'],
+            )
         elif error_type == 'unknown field':
-            return 'Unknown parameter in %s: "%s", must be one of: %s' % (
-                name, additional['unknown_param'],
-                ', '.join(additional['valid_names']))
+            return 'Unknown parameter in {}: "{}", must be one of: {}'.format(
+                name,
+                additional['unknown_param'],
+                ', '.join(additional['valid_names']),
+            )
         elif error_type == 'invalid type':
-            return 'Invalid type for parameter %s, value: %s, type: %s, ' \
-                   'valid types: %s' % (name, additional['param'],
-                                        str(type(additional['param'])),
-                                        ', '.join(additional['valid_types']))
+            return (
+                'Invalid type for parameter {}, value: {}, type: {}, '
+                'valid types: {}'.format(
+                    name,
+                    additional['param'],
+                    str(type(additional['param'])),
+                    ', '.join(additional['valid_types']),
+                )
+            )
         elif error_type == 'invalid range':
             min_allowed = additional['min_allowed']
-            return ('Invalid value for parameter %s, value: %s, '
-                    'valid min value: %s' % (name, additional['param'],
-                                             min_allowed))
+            return (
+                'Invalid value for parameter {}, value: {}, '
+                'valid min value: {}'.format(
+                    name, additional['param'], min_allowed
+                )
+            )
         elif error_type == 'invalid length':
             min_allowed = additional['min_allowed']
-            return ('Invalid length for parameter %s, value: %s, '
-                    'valid min length: %s' % (name, additional['param'],
-                                              min_allowed))
+            return (
+                'Invalid length for parameter {}, value: {}, '
+                'valid min length: {}'.format(
+                    name, additional['param'], min_allowed
+                )
+            )
         elif error_type == 'unable to encode to json':
-            return 'Invalid parameter %s must be json serializable: %s' \
-                % (name, additional['type_error'])
+            return 'Invalid parameter {} must be json serializable: {}'.format(
+                name,
+                additional['type_error'],
+            )
         elif error_type == 'invalid type for document':
-            return 'Invalid type for document parameter %s, value: %s, type: %s, ' \
-                   'valid types: %s' % (name, additional['param'],
-                                        str(type(additional['param'])),
-                                        ', '.join(additional['valid_types']))
+            return (
+                'Invalid type for document parameter {}, value: {}, type: {}, '
+                'valid types: {}'.format(
+                    name,
+                    additional['param'],
+                    str(type(additional['param'])),
+                    ', '.join(additional['valid_types']),
+                )
+            )
         elif error_type == 'more than one input':
-            return 'Invalid number of parameters set for tagged union structure' \
-                    ' %s. Can only set one of the following keys: %s.' % (
-                        name, '. '.join(additional['members'])
-                    )
+            return (
+                'Invalid number of parameters set for tagged union structure'
+                ' {}. Can only set one of the following keys: {}.'.format(
+                    name, '. '.join(additional['members'])
+                )
+            )
         elif error_type == 'empty input':
-            return 'Must set one of the following keys for tagged union' \
-                    'structure %s: %s.' % (
-                        name, '. '.join(additional['members'])
-                    )
+            return (
+                'Must set one of the following keys for tagged union'
+                'structure {}: {}.'.format(
+                    name, '. '.join(additional['members'])
+                )
+            )
 
     def _get_name(self, name):
         if not name:
@@ -153,7 +184,7 @@ class ValidationErrors(object):
         self._errors.append((reason, name, kwargs))
 
 
-class ParamValidator(object):
+class ParamValidator:
     """Validates parameters against a shape model."""
 
     def validate(self, params, shape):
@@ -185,8 +216,9 @@ class ParamValidator(object):
         if special_validator:
             special_validator(params, shape, errors, name)
         else:
-            getattr(self, '_validate_%s' % shape.type_name)(
-                params, shape, errors, name)
+            getattr(self, f'_validate_{shape.type_name}')(
+                params, shape, errors, name
+            )
 
     def _validate_jsonvalue_string(self, params, shape, errors, name):
         # Check to see if a value marked as a jsonvalue can be dumped to
@@ -205,15 +237,19 @@ class ParamValidator(object):
                 self._validate_document(params[key], shape, errors, key)
         elif isinstance(params, list):
             for index, entity in enumerate(params):
-                self._validate_document(entity, shape, errors,
-                                        '%s[%d]' % (name, index))
+                self._validate_document(
+                    entity, shape, errors, '%s[%d]' % (name, index)
+                )
         elif not isinstance(params, (str, int, bool, float)):
             valid_types = (str, int, bool, float, list, dict)
             valid_type_names = [str(t) for t in valid_types]
-            errors.report(name, 'invalid type for document',
-                          param=params,
-                          param_type=type(params),
-                          valid_types=valid_type_names)
+            errors.report(
+                name,
+                'invalid type for document',
+                param=params,
+                param_type=type(params),
+                valid_types=valid_type_names,
+            )
 
     @type_check(valid_types=(dict,))
     def _validate_structure(self, params, shape, errors, name):
@@ -228,21 +264,33 @@ class ParamValidator(object):
         # Validate required fields.
         for required_member in shape.metadata.get('required', []):
             if required_member not in params:
-                errors.report(name, 'missing required field',
-                              required_name=required_member, user_params=params)
+                errors.report(
+                    name,
+                    'missing required field',
+                    required_name=required_member,
+                    user_params=params,
+                )
         members = shape.members
         known_params = []
         # Validate known params.
         for param in params:
             if param not in members:
-                errors.report(name, 'unknown field', unknown_param=param,
-                              valid_names=list(members))
+                errors.report(
+                    name,
+                    'unknown field',
+                    unknown_param=param,
+                    valid_names=list(members),
+                )
             else:
                 known_params.append(param)
         # Validate structure members.
         for param in known_params:
-            self._validate(params[param], shape.members[param],
-                           errors, '%s.%s' % (name, param))
+            self._validate(
+                params[param],
+                shape.members[param],
+                errors,
+                f'{name}.{param}',
+            )
 
     @type_check(valid_types=(str,))
     def _validate_string(self, param, shape, errors, name):
@@ -261,16 +309,15 @@ class ParamValidator(object):
         member_shape = shape.member
         range_check(name, len(param), shape, 'invalid length', errors)
         for i, item in enumerate(param):
-            self._validate(item, member_shape, errors, '%s[%s]' % (name, i))
+            self._validate(item, member_shape, errors, f'{name}[{i}]')
 
     @type_check(valid_types=(dict,))
     def _validate_map(self, param, shape, errors, name):
         key_shape = shape.key
         value_shape = shape.value
         for key, value in param.items():
-            self._validate(key, key_shape, errors, "%s (key: %s)"
-                           % (name, key))
-            self._validate(value, value_shape, errors, '%s.%s' % (name, key))
+            self._validate(key, key_shape, errors, f"{name} (key: {key})")
+            self._validate(value, value_shape, errors, f'{name}.{key}')
 
     @type_check(valid_types=(int,))
     def _validate_integer(self, param, shape, errors, name):
@@ -283,9 +330,12 @@ class ParamValidator(object):
             # File like objects are also allowed for blob types.
             return
         else:
-            errors.report(name, 'invalid type', param=param,
-                          valid_types=[str(bytes), str(bytearray),
-                                       'file-like object'])
+            errors.report(
+                name,
+                'invalid type',
+                param=param,
+                valid_types=[str(bytes), str(bytearray), 'file-like object'],
+            )
 
     @type_check(valid_types=(bool,))
     def _validate_boolean(self, param, shape, errors, name):
@@ -308,8 +358,9 @@ class ParamValidator(object):
         is_valid_type = self._type_check_datetime(param)
         if not is_valid_type:
             valid_type_names = [str(datetime), 'timestamp-string']
-            errors.report(name, 'invalid type', param=param,
-                          valid_types=valid_type_names)
+            errors.report(
+                name, 'invalid type', param=param, valid_types=valid_type_names
+            )
 
     def _type_check_datetime(self, value):
         try:
@@ -321,7 +372,7 @@ class ParamValidator(object):
             return False
 
 
-class ParamValidationDecorator(object):
+class ParamValidationDecorator:
     def __init__(self, param_validator, serializer):
         self._param_validator = param_validator
         self._serializer = serializer
@@ -329,9 +380,11 @@ class ParamValidationDecorator(object):
     def serialize_to_request(self, parameters, operation_model):
         input_shape = operation_model.input_shape
         if input_shape is not None:
-            report = self._param_validator.validate(parameters,
-                                                    operation_model.input_shape)
+            report = self._param_validator.validate(
+                parameters, operation_model.input_shape
+            )
             if report.has_errors():
                 raise ParamValidationError(report=report.generate_report())
-        return self._serializer.serialize_to_request(parameters,
-                                                     operation_model)
+        return self._serializer.serialize_to_request(
+            parameters, operation_model
+        )
diff -pruN 2.23.6-1/awscli/botocore/waiter.py 2.31.35-1/awscli/botocore/waiter.py
--- 2.23.6-1/awscli/botocore/waiter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/botocore/waiter.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,12 @@
 # language governing permissions and limitations under the License.
 import logging
 import time
+from functools import partial
 
 import jmespath
+from botocore.context import with_current_context
 from botocore.docs.docstring import WaiterDocstring
+from botocore.useragent import register_feature_id
 from botocore.utils import get_service_module_name
 
 from . import xform_name
@@ -44,7 +47,8 @@ def create_waiter_with_client(waiter_nam
     single_waiter_config = waiter_model.get_waiter(waiter_name)
     operation_name = xform_name(single_waiter_config.operation)
     operation_method = NormalizedOperationMethod(
-        getattr(client, operation_name))
+        getattr(client, operation_name)
+    )
 
     # Create a new wait method that will serve as a proxy to the underlying
     # Waiter.wait method. This is needed to attach a docstring to the
@@ -57,17 +61,16 @@ def create_waiter_with_client(waiter_nam
         event_emitter=client.meta.events,
         service_model=client.meta.service_model,
         service_waiter_model=waiter_model,
-        include_signature=False
+        include_signature=False,
     )
 
     # Rename the waiter class based on the type of waiter.
-    waiter_class_name = str('%s.Waiter.%s' % (
-        get_service_module_name(client.meta.service_model),
-        waiter_name))
+    waiter_class_name = str(
+        f'{get_service_module_name(client.meta.service_model)}.Waiter.{waiter_name}'
+    )
 
     # Create the new waiter class
-    documented_waiter_cls = type(
-        waiter_class_name, (Waiter,), {'wait': wait})
+    documented_waiter_cls = type(waiter_class_name, (Waiter,), {'wait': wait})
 
     # Return an instance of the new waiter class.
     return documented_waiter_cls(
@@ -82,7 +85,7 @@ def is_valid_waiter_error(response):
     return False
 
 
-class NormalizedOperationMethod(object):
+class NormalizedOperationMethod:
     def __init__(self, client_method):
         self._client_method = client_method
 
@@ -93,7 +96,7 @@ class NormalizedOperationMethod(object):
             return e.response
 
 
-class WaiterModel(object):
+class WaiterModel:
     SUPPORTED_VERSION = 2
 
     def __init__(self, waiter_config):
@@ -123,26 +126,29 @@ class WaiterModel(object):
     def _verify_supported_version(self, version):
         if version != self.SUPPORTED_VERSION:
             raise WaiterConfigError(
-                error_msg=("Unsupported waiter version, supported version "
-                           "must be: %s, but version of waiter config "
-                           "is: %s" % (self.SUPPORTED_VERSION,
-                                       version)))
+                error_msg=(
+                    "Unsupported waiter version, supported version "
+                    f"must be: {self.SUPPORTED_VERSION}, but version of waiter config "
+                    f"is: {version}"
+                )
+            )
 
     def get_waiter(self, waiter_name):
         try:
             single_waiter_config = self._waiter_config[waiter_name]
         except KeyError:
-            raise ValueError("Waiter does not exist: %s" % waiter_name)
+            raise ValueError(f"Waiter does not exist: {waiter_name}")
         return SingleWaiterConfig(single_waiter_config)
 
 
-class SingleWaiterConfig(object):
+class SingleWaiterConfig:
     """Represents the waiter configuration for a single waiter.
 
     A single waiter is considered the configuration for a single
     value associated with a named waiter (i.e TableExists).
 
     """
+
     def __init__(self, single_waiter_config):
         self._config = single_waiter_config
 
@@ -162,7 +168,7 @@ class SingleWaiterConfig(object):
         return acceptors
 
 
-class AcceptorConfig(object):
+class AcceptorConfig:
     def __init__(self, config):
         self.state = config['state']
         self.matcher = config['matcher']
@@ -173,17 +179,17 @@ class AcceptorConfig(object):
     @property
     def explanation(self):
         if self.matcher == 'path':
-            return 'For expression "%s" we matched expected path: "%s"' % (self.argument, self.expected)
+            return f'For expression "{self.argument}" we matched expected path: "{self.expected}"'
         elif self.matcher == 'pathAll':
-            return 'For expression "%s" all members matched excepted path: "%s"' % (self.argument, self.expected)
+            return f'For expression "{self.argument}" all members matched excepted path: "{self.expected}"'
         elif self.matcher == 'pathAny':
-            return 'For expression "%s" we matched expected path: "%s" at least once' % (self.argument, self.expected)
+            return f'For expression "{self.argument}" we matched expected path: "{self.expected}" at least once'
         elif self.matcher == 'status':
-            return 'Matched expected HTTP status code: %s' % self.expected
+            return f'Matched expected HTTP status code: {self.expected}'
         elif self.matcher == 'error':
-            return 'Matched expected service error code: %s' % self.expected
+            return f'Matched expected service error code: {self.expected}'
         else:
-            return 'No explanation for unknown waiter type: "%s"' % self.matcher
+            return f'No explanation for unknown waiter type: "{self.matcher}"'
 
     def _create_matcher_func(self):
         # An acceptor function is a callable that takes a single value.  The
@@ -206,7 +212,8 @@ class AcceptorConfig(object):
             return self._create_error_matcher()
         else:
             raise WaiterConfigError(
-                error_msg="Unknown acceptor: %s" % self.matcher)
+                error_msg=f"Unknown acceptor: {self.matcher}"
+            )
 
     def _create_path_matcher(self):
         expression = jmespath.compile(self.argument)
@@ -216,6 +223,7 @@ class AcceptorConfig(object):
             if is_valid_waiter_error(response):
                 return
             return expression.search(response) == expected
+
         return acceptor_matches
 
     def _create_path_all_matcher(self):
@@ -236,6 +244,7 @@ class AcceptorConfig(object):
                 if element != expected:
                     return False
             return True
+
         return acceptor_matches
 
     def _create_path_any_matcher(self):
@@ -256,6 +265,7 @@ class AcceptorConfig(object):
                 if element == expected:
                     return True
             return False
+
         return acceptor_matches
 
     def _create_status_matcher(self):
@@ -266,8 +276,10 @@ class AcceptorConfig(object):
             # other than it is a dict, so we don't assume there's
             # a ResponseMetadata.HTTPStatusCode.
             status_code = response.get('ResponseMetadata', {}).get(
-                'HTTPStatusCode')
+                'HTTPStatusCode'
+            )
             return status_code == expected
+
         return acceptor_matches
 
     def _create_error_matcher(self):
@@ -289,11 +301,11 @@ class AcceptorConfig(object):
                 return "Error" not in response
             else:
                 return response.get("Error", {}).get("Code", "") == expected
-            
+
         return acceptor_matches
 
 
-class Waiter(object):
+class Waiter:
     def __init__(self, name, config, operation_method):
         """
 
@@ -315,6 +327,7 @@ class Waiter(object):
         self.name = name
         self.config = config
 
+    @with_current_context(partial(register_feature_id, 'WAITER'))
     def wait(self, **kwargs):
         acceptors = list(self.config.acceptors)
         current_state = 'waiting'
@@ -342,20 +355,19 @@ class Waiter(object):
                     # can just handle here by raising an exception.
                     raise WaiterError(
                         name=self.name,
-                        reason='An error occurred (%s): %s' % (
+                        reason='An error occurred ({}): {}'.format(
                             response['Error'].get('Code', 'Unknown'),
                             response['Error'].get('Message', 'Unknown'),
                         ),
                         last_response=response,
                     )
             if current_state == 'success':
-                logger.debug("Waiting complete, waiter matched the "
-                             "success state.")
+                logger.debug(
+                    "Waiting complete, waiter matched the " "success state."
+                )
                 return
             if current_state == 'failure':
-                reason = 'Waiter encountered a terminal failure state: %s' % (
-                        acceptor.explanation
-                        )
+                reason = f'Waiter encountered a terminal failure state: {acceptor.explanation}'
                 raise WaiterError(
                     name=self.name,
                     reason=reason,
@@ -365,9 +377,7 @@ class Waiter(object):
                 if last_matched_acceptor is None:
                     reason = 'Max attempts exceeded'
                 else:
-                    reason = 'Max attempts exceeded. Previously accepted state: %s' %(
-                        acceptor.explanation
-                    )
+                    reason = f'Max attempts exceeded. Previously accepted state: {acceptor.explanation}'
                 raise WaiterError(
                     name=self.name,
                     reason=reason,
diff -pruN 2.23.6-1/awscli/clidocs.py 2.31.35-1/awscli/clidocs.py
--- 2.23.6-1/awscli/clidocs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/clidocs.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,30 +13,34 @@
 import logging
 import os
 import re
+
 from botocore import xform_name
 from botocore.model import StringShape
 from botocore.utils import is_json_value_header
 
-from awscli import SCALAR_TYPES
+from awscli import SCALAR_TYPES, __version__ as AWS_CLI_VERSION
 from awscli.argprocess import ParamShorthandDocGen
 from awscli.bcdoc.docevents import DOC_EVENTS
 from awscli.topictags import TopicTagDB
 from awscli.utils import (
-    find_service_and_method_in_event_name, is_document_type,
-    operation_uses_document_types, is_streaming_blob_type,
-    is_tagged_union_type
+    find_service_and_method_in_event_name,
+    is_document_type,
+    is_streaming_blob_type,
+    is_tagged_union_type,
+    operation_uses_document_types,
 )
 
 LOG = logging.getLogger(__name__)
-EXAMPLES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
-                            'examples')
+EXAMPLES_DIR = os.path.join(
+    os.path.dirname(os.path.abspath(__file__)), 'examples'
+)
 GLOBAL_OPTIONS_FILE = os.path.join(EXAMPLES_DIR, 'global_options.rst')
-GLOBAL_OPTIONS_SYNOPSIS_FILE = os.path.join(EXAMPLES_DIR,
-                                            'global_synopsis.rst')
-
+GLOBAL_OPTIONS_SYNOPSIS_FILE = os.path.join(
+    EXAMPLES_DIR, 'global_synopsis.rst'
+)
 
-class CLIDocumentEventHandler(object):
 
+class CLIDocumentEventHandler:
     def __init__(self, help_command):
         self.help_command = help_command
         self.register(help_command.session, help_command.event_class)
@@ -91,9 +95,11 @@ class CLIDocumentEventHandler(object):
         handler method will be unregistered for the all events of
         that type for the specified ``event_class``.
         """
-        self._map_handlers(self.help_command.session,
-                           self.help_command.event_class,
-                           self.help_command.session.unregister)
+        self._map_handlers(
+            self.help_command.session,
+            self.help_command.event_class,
+            self.help_command.session.unregister,
+        )
 
     # These are default doc handlers that apply in the general case.
 
@@ -108,8 +114,9 @@ class CLIDocumentEventHandler(object):
                 doc.write(' . ')
                 full_cmd_list.append(cmd)
                 full_cmd_name = ' '.join(full_cmd_list)
-                doc.write(':ref:`%s <cli:%s>`' % (cmd, full_cmd_name))
-            doc.write(' ]')
+                doc.write(f':ref:`{cmd} <cli:{full_cmd_name}>`')
+            doc.writeln(' ]')
+            doc.writeln('')
 
     def doc_title(self, help_command, **kwargs):
         doc = help_command.doc
@@ -117,7 +124,7 @@ class CLIDocumentEventHandler(object):
         reference = help_command.event_class.replace('.', ' ')
         if reference != 'aws':
             reference = 'aws ' + reference
-        doc.writeln('.. _cli:%s:' % reference)
+        doc.writeln(f'.. _cli:{reference}:')
         doc.style.h1(help_command.name)
 
     def doc_description(self, help_command, **kwargs):
@@ -131,7 +138,7 @@ class CLIDocumentEventHandler(object):
         doc = help_command.doc
         doc.style.h2('Synopsis')
         doc.style.start_codeblock()
-        doc.writeln('%s' % help_command.name)
+        doc.writeln(f'{help_command.name}')
 
     def doc_synopsis_option(self, arg_name, help_command, **kwargs):
         doc = help_command.doc
@@ -141,17 +148,19 @@ class CLIDocumentEventHandler(object):
                 # This arg is already documented so we can move on.
                 return
             option_str = ' | '.join(
-                [a.cli_name for a in
-                 self._arg_groups[argument.group_name]])
+                [a.cli_name for a in self._arg_groups[argument.group_name]]
+            )
             self._documented_arg_groups.append(argument.group_name)
         elif argument.cli_name.startswith('--'):
-            option_str = '%s <value>' % argument.cli_name
+            option_str = f'{argument.cli_name} <value>'
         else:
-            option_str = '<%s>' % argument.cli_name
-        if not (argument.required
-                or getattr(argument, '_DOCUMENT_AS_REQUIRED', False)):
-            option_str = '[%s]' % option_str
-        doc.writeln('%s' % option_str)
+            option_str = f'<{argument.cli_name}>'
+        if not (
+            argument.required
+            or getattr(argument, '_DOCUMENT_AS_REQUIRED', False)
+        ):
+            option_str = f'[{option_str}]'
+        doc.writeln(f'{option_str}')
 
     def doc_synopsis_end(self, help_command, **kwargs):
         doc = help_command.doc
@@ -172,18 +181,32 @@ class CLIDocumentEventHandler(object):
     def doc_option(self, arg_name, help_command, **kwargs):
         doc = help_command.doc
         argument = help_command.arg_table[arg_name]
+        if argument.required or getattr(
+            argument, '_DOCUMENT_AS_REQUIRED', False
+        ):
+            required_field = ' [required]'
+        else:
+            required_field = ''
+
         if argument.group_name in self._arg_groups:
             if argument.group_name in self._documented_arg_groups:
                 # This arg is already documented so we can move on.
                 return
             name = ' | '.join(
-                ['``%s``' % a.cli_name for a in
-                 self._arg_groups[argument.group_name]])
+                [
+                    f'``{a.cli_name}``'
+                    for a in self._arg_groups[argument.group_name]
+                ]
+            )
             self._documented_arg_groups.append(argument.group_name)
         else:
-            name = '``%s``' % argument.cli_name
-        doc.write('%s (%s)\n' % (name, self._get_argument_type_name(
-            argument.argument_model, argument.cli_type_name)))
+            name = f'``{argument.cli_name}``'
+        doc.write(
+            f'{name} '
+            f'({self._get_argument_type_name(argument.argument_model, argument.cli_type_name)})'
+            f'{required_field}\n'
+        )
+
         doc.style.indent()
         doc.include_doc_string(argument.documentation)
         if is_streaming_blob_type(argument.argument_model):
@@ -192,6 +215,7 @@ class CLIDocumentEventHandler(object):
             self._add_tagged_union_note(argument.argument_model, doc)
         if hasattr(argument, 'argument_model'):
             self._document_enums(argument.argument_model, doc)
+            self._document_constraints(argument.argument_model, doc)
             self._document_nested_structure(argument.argument_model, doc)
         doc.style.dedent()
         doc.style.new_paragraph()
@@ -210,11 +234,13 @@ class CLIDocumentEventHandler(object):
         doc = help_command.doc
         doc.write('* ')
         doc.style.sphinx_reference_label(
-            label='cli:%s' % related_item,
-            text=related_item
+            label=f'cli:{related_item}', text=related_item
         )
         doc.write('\n')
 
+    def doc_meta_description(self, help_command, **kwargs):
+        pass
+
     def _document_enums(self, model, doc):
         """Documents top-level parameter enums"""
         if isinstance(model, StringShape):
@@ -223,27 +249,46 @@ class CLIDocumentEventHandler(object):
                 doc.write('Possible values:')
                 doc.style.start_ul()
                 for enum in model.enum:
-                    doc.style.li('``%s``' % enum)
+                    doc.style.li(f'``{enum}``')
                 doc.style.end_ul()
 
     def _document_nested_structure(self, model, doc):
         """Recursively documents parameters in nested structures"""
         member_type_name = getattr(model, 'type_name', None)
         if member_type_name == 'structure':
+            required_members = model.metadata.get('required', [])
             for member_name, member_shape in model.members.items():
-                self._doc_member(doc, member_name, member_shape,
-                                 stack=[model.name])
+                is_required = member_name in required_members
+                self._doc_member(
+                    doc,
+                    member_name,
+                    member_shape,
+                    stack=[model.name],
+                    required=is_required,
+                )
         elif member_type_name == 'list':
-            self._doc_member(doc, '', model.member, stack=[model.name])
+            self._doc_member(
+                doc, '', model.member, stack=[model.name], required=False
+            )
         elif member_type_name == 'map':
             key_shape = model.key
             key_name = key_shape.serialization.get('name', 'key')
-            self._doc_member(doc, key_name, key_shape, stack=[model.name])
+            self._doc_member(
+                doc, key_name, key_shape, stack=[model.name], required=False
+            )
             value_shape = model.value
             value_name = value_shape.serialization.get('name', 'value')
-            self._doc_member(doc, value_name, value_shape, stack=[model.name])
+            self._doc_member(
+                doc,
+                value_name,
+                value_shape,
+                stack=[model.name],
+                required=False,
+            )
 
-    def _doc_member(self, doc, member_name, member_shape, stack):
+    def _doc_member(
+        self, doc, member_name, member_shape, stack, required=False
+    ):
         if member_shape.name in stack:
             # Document the recursion once, otherwise just
             # note the fact that it's recursive and return.
@@ -253,63 +298,103 @@ class CLIDocumentEventHandler(object):
                 return
         stack.append(member_shape.name)
         try:
-            self._do_doc_member(doc, member_name,
-                                member_shape, stack)
+            self._do_doc_member(
+                doc, member_name, member_shape, stack, required
+            )
         finally:
             stack.pop()
 
-    def _do_doc_member(self, doc, member_name, member_shape, stack):
+    def _do_doc_member(
+        self, doc, member_name, member_shape, stack, required=False
+    ):
         docs = member_shape.documentation
         type_name = self._get_argument_type_name(
-            member_shape, member_shape.type_name)
+            member_shape, member_shape.type_name
+        )
+
         if member_name:
-            doc.write('%s -> (%s)' % (member_name, type_name))
+            parameter_string = f'{member_name} -> ({type_name})'
         else:
-            doc.write('(%s)' % type_name)
+            parameter_string = f'({type_name})'
+
+        if required:
+            parameter_string += ' [required]'
+
+        doc.write(parameter_string)
+
         doc.style.indent()
         doc.style.new_paragraph()
         doc.include_doc_string(docs)
         if is_tagged_union_type(member_shape):
             self._add_tagged_union_note(member_shape, doc)
+
+        self._document_enums(member_shape, doc)
+        self._document_constraints(member_shape, doc)
         doc.style.new_paragraph()
         member_type_name = member_shape.type_name
         if member_type_name == 'structure':
+            required_members = member_shape.metadata.get('required', [])
             for sub_name, sub_shape in member_shape.members.items():
-                self._doc_member(doc, sub_name, sub_shape, stack)
+                sub_required = sub_name in required_members
+                self._doc_member(
+                    doc, sub_name, sub_shape, stack, required=sub_required
+                )
         elif member_type_name == 'map':
             key_shape = member_shape.key
             key_name = key_shape.serialization.get('name', 'key')
-            self._doc_member(doc, key_name, key_shape, stack)
+            self._doc_member(doc, key_name, key_shape, stack, required=False)
             value_shape = member_shape.value
             value_name = value_shape.serialization.get('name', 'value')
-            self._doc_member(doc, value_name, value_shape, stack)
+            self._doc_member(
+                doc, value_name, value_shape, stack, required=False
+            )
         elif member_type_name == 'list':
-            self._doc_member(doc, '', member_shape.member, stack)
+            self._doc_member(
+                doc, '', member_shape.member, stack, required=False
+            )
         doc.style.dedent()
         doc.style.new_paragraph()
 
     def _add_streaming_blob_note(self, doc):
         doc.style.start_note()
-        msg = ("This argument is of type: streaming blob. "
-               "Its value must be the path to a file "
-               "(e.g. ``path/to/file``) and must **not** "
-               "be prefixed with ``file://`` or ``fileb://``")
+        msg = (
+            "This argument is of type: streaming blob. "
+            "Its value must be the path to a file "
+            "(e.g. ``path/to/file``) and must **not** "
+            "be prefixed with ``file://`` or ``fileb://``"
+        )
         doc.writeln(msg)
         doc.style.end_note()
 
     def _add_tagged_union_note(self, shape, doc):
         doc.style.start_note()
-        members_str = ", ".join(
-            [f'``{key}``' for key in shape.members.keys()]
+        members_str = ", ".join([f'``{key}``' for key in shape.members.keys()])
+        msg = (
+            "This is a Tagged Union structure. Only one of the "
+            f"following top level keys can be set: {members_str}."
         )
-        msg = ("This is a Tagged Union structure. Only one of the "
-               f"following top level keys can be set: {members_str}.")
         doc.writeln(msg)
         doc.style.end_note()
 
+    def _document_constraints(self, model, doc):
+        """Documents parameter value constraints"""
+        if not hasattr(model, 'metadata'):
+            return
+        constraints = ['min', 'max', 'pattern']
+        if not any(
+            [constraint in model.metadata for constraint in constraints]
+        ):
+            return
+        doc.style.new_paragraph()
+        doc.write('Constraints:')
+        doc.style.start_ul()
+        for constraint in constraints:
+            if (val := model.metadata.get(constraint)) is not None:
+                doc.style.li(f'{constraint}: ``{val}``')
+        doc.style.end_ul()
 
-class ProviderDocumentEventHandler(CLIDocumentEventHandler):
 
+class ProviderDocumentEventHandler(CLIDocumentEventHandler):
     def doc_breadcrumbs(self, help_command, event_name, **kwargs):
         pass
 
@@ -339,12 +424,11 @@ class ProviderDocumentEventHandler(CLIDo
 
     def doc_subitem(self, command_name, help_command, **kwargs):
         doc = help_command.doc
-        file_name = '%s/index' % command_name
+        file_name = f'{command_name}/index'
         doc.style.tocitem(command_name, file_name=file_name)
 
 
 class ServiceDocumentEventHandler(CLIDocumentEventHandler):
-
     # A service document has no synopsis.
     def doc_synopsis_start(self, help_command, **kwargs):
         pass
@@ -390,15 +474,21 @@ class ServiceDocumentEventHandler(CLIDoc
         # If the subcommand table has commands in it,
         # direct the subitem to the command's index because
         # it has more subcommands to be documented.
-        if (len(subcommand_table) > 0):
-            file_name = '%s/index' % command_name
+        if len(subcommand_table) > 0:
+            file_name = f'{command_name}/index'
             doc.style.tocitem(command_name, file_name=file_name)
         else:
             doc.style.tocitem(command_name)
 
+    def doc_meta_description(self, help_command, **kwargs):
+        doc = help_command.doc
+        reference = help_command.event_class.replace('.', ' ')
+        doc.writeln(".. meta::")
+        doc.writeln(f"   :description: Learn about the AWS CLI {AWS_CLI_VERSION} {reference} commands.")
+        doc.writeln("")
 
-class OperationDocumentEventHandler(CLIDocumentEventHandler):
 
+class OperationDocumentEventHandler(CLIDocumentEventHandler):
     AWS_DOC_BASE = 'https://docs.aws.amazon.com/goto/WebAPI'
 
     def doc_description(self, help_command, **kwargs):
@@ -409,7 +499,6 @@ class OperationDocumentEventHandler(CLID
         self._add_webapi_crosslink(help_command)
         self._add_note_for_document_types_if_used(help_command)
 
-
     def _add_webapi_crosslink(self, help_command):
         doc = help_command.doc
         operation_model = help_command.obj
@@ -422,8 +511,7 @@ class OperationDocumentEventHandler(CLID
             return
         doc.style.new_paragraph()
         doc.write("See also: ")
-        link = '%s/%s/%s' % (self.AWS_DOC_BASE, service_uid,
-                             operation_model.name)
+        link = f'{self.AWS_DOC_BASE}/{service_uid}/{operation_model.name}'
         doc.style.external_link(title="AWS API Documentation", link=link)
         doc.writeln('')
 
@@ -431,27 +519,29 @@ class OperationDocumentEventHandler(CLID
         if operation_uses_document_types(help_command.obj):
             help_command.doc.style.new_paragraph()
             help_command.doc.writeln(
-                '``%s`` uses document type values. Document types follow the '
+                f'``{help_command.name}`` uses document type values. Document types follow the '
                 'JSON data model where valid values are: strings, numbers, '
                 'booleans, null, arrays, and objects. For command input, '
                 'options and nested parameters that are labeled with the type '
                 '``document`` must be provided as JSON. Shorthand syntax does '
-                'not support document types.' % help_command.name
+                'not support document types.'
             )
 
-    def _json_example_value_name(self, argument_model, include_enum_values=True):
+    def _json_example_value_name(
+        self, argument_model, include_enum_values=True
+    ):
         # If include_enum_values is True, then the valid enum values
         # are included as the sample JSON value.
         if isinstance(argument_model, StringShape):
             if argument_model.enum and include_enum_values:
                 choices = argument_model.enum
-                return '|'.join(['"%s"' % c for c in choices])
+                return '|'.join([f'"{c}"' for c in choices])
             else:
                 return '"string"'
         elif argument_model.type_name == 'boolean':
             return 'true|false'
         else:
-            return '%s' % argument_model.type_name
+            return f'{argument_model.type_name}'
 
     def _json_example(self, doc, argument_model, stack):
         if argument_model.name in stack:
@@ -471,7 +561,9 @@ class OperationDocumentEventHandler(CLID
         if argument_model.type_name == 'list':
             doc.write('[')
             if argument_model.member.type_name in SCALAR_TYPES:
-                doc.write('%s, ...' % self._json_example_value_name(argument_model.member))
+                doc.write(
+                    f'{self._json_example_value_name(argument_model.member)}, ...'
+                )
             else:
                 doc.style.indent()
                 doc.style.new_line()
@@ -485,7 +577,7 @@ class OperationDocumentEventHandler(CLID
             doc.write('{')
             doc.style.indent()
             key_string = self._json_example_value_name(argument_model.key)
-            doc.write('%s: ' % key_string)
+            doc.write(f'{key_string}: ')
             if argument_model.value.type_name in SCALAR_TYPES:
                 doc.write(self._json_example_value_name(argument_model.value))
             else:
@@ -514,16 +606,17 @@ class OperationDocumentEventHandler(CLID
             member_model = members[member_name]
             member_type_name = member_model.type_name
             if member_type_name in SCALAR_TYPES:
-                doc.write('"%s": %s' % (member_name,
-                    self._json_example_value_name(member_model)))
+                doc.write(
+                    f'"{member_name}": {self._json_example_value_name(member_model)}'
+                )
             elif member_type_name == 'structure':
-                doc.write('"%s": ' % member_name)
+                doc.write(f'"{member_name}": ')
                 self._json_example(doc, member_model, stack)
             elif member_type_name == 'map':
-                doc.write('"%s": ' % member_name)
+                doc.write(f'"{member_name}": ')
                 self._json_example(doc, member_model, stack)
             elif member_type_name == 'list':
-                doc.write('"%s": ' % member_name)
+                doc.write(f'"{member_name}": ')
                 self._json_example(doc, member_model, stack)
             if i < len(members) - 1:
                 doc.write(',')
@@ -533,8 +626,9 @@ class OperationDocumentEventHandler(CLID
         doc.write('}')
 
     def doc_option_example(self, arg_name, help_command, event_name, **kwargs):
-        service_id, operation_name = \
-            find_service_and_method_in_event_name(event_name)
+        service_id, operation_name = find_service_and_method_in_event_name(
+            event_name
+        )
         doc = help_command.doc
         cli_argument = help_command.arg_table[arg_name]
         if cli_argument.group_name in self._arg_groups:
@@ -546,7 +640,8 @@ class OperationDocumentEventHandler(CLID
         docgen = ParamShorthandDocGen()
         if docgen.supports_shorthand(cli_argument.argument_model):
             example_shorthand_syntax = docgen.generate_shorthand_example(
-                cli_argument, service_id, operation_name)
+                cli_argument, service_id, operation_name
+            )
             if example_shorthand_syntax is None:
                 # If the shorthand syntax returns a value of None,
                 # this indicates to us that there is no example
@@ -560,8 +655,11 @@ class OperationDocumentEventHandler(CLID
                 for example_line in example_shorthand_syntax.splitlines():
                     doc.writeln(example_line)
                 doc.style.end_codeblock()
-        if argument_model is not None and argument_model.type_name == 'list' and \
-                argument_model.member.type_name in SCALAR_TYPES:
+        if (
+            argument_model is not None
+            and argument_model.type_name == 'list'
+            and argument_model.member.type_name in SCALAR_TYPES
+        ):
             # A list of scalars is special.  While you *can* use
             # JSON ( ["foo", "bar", "baz"] ), you can also just
             # use the argparse behavior of space separated lists.
@@ -572,12 +670,9 @@ class OperationDocumentEventHandler(CLID
             doc.write('Syntax')
             doc.style.start_codeblock()
             example_type = self._json_example_value_name(
-                member, include_enum_values=False)
-            doc.write('%s %s ...' % (example_type, example_type))
-            if isinstance(member, StringShape) and member.enum:
-                # If we have enum values, we can tell the user
-                # exactly what valid values they can provide.
-                self._write_valid_enums(doc, member.enum)
+                member, include_enum_values=False
+            )
+            doc.write(f'{example_type} {example_type} ...')
             doc.style.end_codeblock()
             doc.style.new_paragraph()
         elif cli_argument.cli_type_name not in SCALAR_TYPES:
@@ -588,13 +683,6 @@ class OperationDocumentEventHandler(CLID
             doc.style.end_codeblock()
             doc.style.new_paragraph()
 
-    def _write_valid_enums(self, doc, enum_values):
-        doc.style.new_paragraph()
-        doc.write("Where valid values are:\n")
-        for value in enum_values:
-            doc.write("    %s\n" % value)
-        doc.write("\n")
-
     def doc_output(self, help_command, event_name, **kwargs):
         doc = help_command.doc
         doc.style.h2('Output')
@@ -606,6 +694,12 @@ class OperationDocumentEventHandler(CLID
             for member_name, member_shape in output_shape.members.items():
                 self._doc_member(doc, member_name, member_shape, stack=[])
 
+    def doc_meta_description(self, help_command, **kwargs):
+        doc = help_command.doc
+        reference = help_command.event_class.replace('.', ' ')
+        doc.writeln(".. meta::")
+        doc.writeln(f"   :description: Use the AWS CLI {AWS_CLI_VERSION} to run the {reference} command.")
+        doc.writeln("")
 
 class TopicListerDocumentEventHandler(CLIDocumentEventHandler):
     DESCRIPTION = (
@@ -614,7 +708,8 @@ class TopicListerDocumentEventHandler(CL
         'the list of topics from the command line, run ``aws help topics``. '
         'To access a specific topic from the command line, run '
         '``aws help [topicname]``, where ``topicname`` is the name of the '
-        'topic as it appears in the output from ``aws help topics``.')
+        'topic as it appears in the output from ``aws help topics``.'
+    )
 
     def __init__(self, help_command):
         self.help_command = help_command
@@ -633,8 +728,8 @@ class TopicListerDocumentEventHandler(CL
         doc = help_command.doc
         doc.style.new_paragraph()
         doc.style.link_target_definition(
-            refname='cli:aws help %s' % self.help_command.name,
-            link='')
+            refname=f'cli:aws help {self.help_command.name}', link=''
+        )
         doc.style.h1('AWS CLI Topic Guide')
 
     def doc_description(self, help_command, **kwargs):
@@ -674,13 +769,13 @@ class TopicListerDocumentEventHandler(CL
             # each category.
             for topic_name in sorted(categories[category_name]):
                 description = self._topic_tag_db.get_tag_single_value(
-                    topic_name, 'description')
+                    topic_name, 'description'
+                )
                 doc.write('* ')
                 doc.style.sphinx_reference_label(
-                    label='cli:aws help %s' % topic_name,
-                    text=topic_name
+                    label=f'cli:aws help {topic_name}', text=topic_name
                 )
-                doc.write(': %s\n' % description)
+                doc.write(f': {description}\n')
         # Add a hidden toctree to make sure everything is connected in
         # the document.
         doc.style.hidden_toctree()
@@ -689,7 +784,6 @@ class TopicListerDocumentEventHandler(CL
 
 
 class TopicDocumentEventHandler(TopicListerDocumentEventHandler):
-
     def doc_breadcrumbs(self, help_command, **kwargs):
         doc = help_command.doc
         if doc.target != 'man':
@@ -697,8 +791,7 @@ class TopicDocumentEventHandler(TopicLis
             doc.style.sphinx_reference_label(label='cli:aws', text='aws')
             doc.write(' . ')
             doc.style.sphinx_reference_label(
-                label='cli:aws help topics',
-                text='topics'
+                label='cli:aws help topics', text='topics'
             )
             doc.write(' ]')
 
@@ -706,22 +799,24 @@ class TopicDocumentEventHandler(TopicLis
         doc = help_command.doc
         doc.style.new_paragraph()
         doc.style.link_target_definition(
-            refname='cli:aws help %s' % self.help_command.name,
-            link='')
+            refname=f'cli:aws help {self.help_command.name}', link=''
+        )
         title = self._topic_tag_db.get_tag_single_value(
-            help_command.name, 'title')
+            help_command.name, 'title'
+        )
         doc.style.h1(title)
 
     def doc_description(self, help_command, **kwargs):
         doc = help_command.doc
-        topic_filename = os.path.join(self._topic_tag_db.topic_dir,
-                                      help_command.name + '.rst')
+        topic_filename = os.path.join(
+            self._topic_tag_db.topic_dir, help_command.name + '.rst'
+        )
         contents = self._remove_tags_from_content(topic_filename)
         doc.writeln(contents)
         doc.style.new_paragraph()
 
     def _remove_tags_from_content(self, filename):
-        with open(filename, 'r') as f:
+        with open(filename) as f:
             lines = f.readlines()
 
         content_begin_index = 0
@@ -759,7 +854,8 @@ class GlobalOptionsDocumenter:
         for arg in help_command.arg_table:
             argument = help_command.arg_table.get(arg)
             help_command.doc.writeln(
-                f"``{argument.cli_name}`` ({argument.cli_type_name})")
+                f"``{argument.cli_name}`` ({argument.cli_type_name})"
+            )
             help_command.doc.style.indent()
             help_command.doc.style.new_paragraph()
             help_command.doc.include_doc_string(argument.documentation)
diff -pruN 2.23.6-1/awscli/clidriver.py 2.31.35-1/awscli/clidriver.py
--- 2.23.6-1/awscli/clidriver.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/clidriver.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,69 +10,84 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import copy
 import json
+import logging
 import os
 import platform
-import sys
-import copy
-import logging
 import re
+import sys
 
-import distro
 import botocore.session
+import distro
 from botocore import xform_name
-from botocore.compat import copy_kwargs, OrderedDict
+from botocore.compat import OrderedDict, copy_kwargs
+from botocore.configprovider import (
+    ChainProvider,
+    ConstantProvider,
+    EnvironmentProvider,
+    InstanceVarProvider,
+    ScopedConfigProvider,
+)
+from botocore.context import start_as_current_context
 from botocore.history import get_global_history_recorder
-from botocore.configprovider import InstanceVarProvider
-from botocore.configprovider import EnvironmentProvider
-from botocore.configprovider import ScopedConfigProvider
-from botocore.configprovider import ConstantProvider
-from botocore.configprovider import ChainProvider
 
 from awscli import __version__
+from awscli.alias import AliasCommandInjector, AliasLoader
+from awscli.argparser import (
+    ArgTableArgParser,
+    FirstPassGlobalArgParser,
+    MainArgParser,
+    ServiceArgParser,
+    SubCommandArgParser,
+)
+from awscli.argprocess import unpack_argument
+from awscli.arguments import (
+    BooleanArgument,
+    CLIArgument,
+    CustomArgument,
+    ListArgument,
+    UnknownArgumentError,
+)
+from awscli.autoprompt.core import AutoPromptDriver
+from awscli.commands import CLICommand
 from awscli.compat import (
-    default_pager, get_stderr_text_writer, get_stdout_text_writer
+    default_pager,
+    get_stderr_text_writer,
+    get_stdout_text_writer,
+    validate_preferred_output_encoding,
+)
+from awscli.constants import PARAM_VALIDATION_ERROR_RC
+from awscli.errorhandler import (
+    construct_cli_error_handlers_chain,
+    construct_entry_point_handlers_chain,
 )
 from awscli.formatter import get_formatter
-from awscli.plugin import load_plugins
-from awscli.commands import CLICommand
-from awscli.argparser import MainArgParser
-from awscli.argparser import FirstPassGlobalArgParser
-from awscli.argparser import ServiceArgParser
-from awscli.argparser import ArgTableArgParser
-from awscli.argparser import SubCommandArgParser
-from awscli.help import ProviderHelpCommand
-from awscli.help import ServiceHelpCommand
-from awscli.help import OperationHelpCommand
-from awscli.arguments import CustomArgument
-from awscli.arguments import ListArgument
-from awscli.arguments import BooleanArgument
-from awscli.arguments import CLIArgument
-from awscli.arguments import UnknownArgumentError
-from awscli.argprocess import unpack_argument
-from awscli.alias import AliasLoader
-from awscli.alias import AliasCommandInjector
+from awscli.help import (
+    OperationHelpCommand,
+    ProviderHelpCommand,
+    ServiceHelpCommand,
+)
 from awscli.logger import (
-    set_stream_logger, remove_stream_logger, enable_crt_logging,
     disable_crt_logging,
+    enable_crt_logging,
+    remove_stream_logger,
+    set_stream_logger,
 )
+from awscli.plugin import load_plugins
+from awscli.telemetry import add_session_id_component_to_user_agent_extra
 from awscli.utils import (
+    IMDSRegionProvider,
+    OutputStreamFactory,
+    add_command_lineage_to_user_agent_extra,
     add_metadata_component_to_user_agent_extra,
-    add_command_lineage_to_user_agent_extra
-)
-from awscli.utils import emit_top_level_args_parsed_event
-from awscli.utils import OutputStreamFactory
-from awscli.utils import IMDSRegionProvider
-from awscli.constants import PARAM_VALIDATION_ERROR_RC
-from awscli.autoprompt.core import AutoPromptDriver
-from awscli.errorhandler import (
-    construct_cli_error_handlers_chain, construct_entry_point_handlers_chain
+    emit_top_level_args_parsed_event,
 )
 
-
 LOG = logging.getLogger('awscli.clidriver')
 LOG_FORMAT = (
-    '%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s')
+    '%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(message)s'
+)
 HISTORY_RECORDER = get_global_history_recorder()
 METADATA_FILENAME = 'metadata.json'
 # Don't remove this line.  The idna encoding
@@ -84,11 +99,12 @@ METADATA_FILENAME = 'metadata.json'
 # the encodings.idna is imported and registered in the codecs registry,
 # which will stop the LookupErrors from happening.
 # See: https://bugs.python.org/issue29288
-u''.encode('idna')
+''.encode('idna')
 
 
 def main():
-    return AWSCLIEntryPoint().main(sys.argv[1:])
+    with start_as_current_context():
+        return AWSCLIEntryPoint().main(sys.argv[1:])
 
 
 def create_clidriver(args=None):
@@ -99,19 +115,21 @@ def create_clidriver(args=None):
         debug = args.debug
     session = botocore.session.Session()
     _set_user_agent_for_session(session)
-    load_plugins(session.full_config.get('plugins', {}),
-                 event_hooks=session.get_component('event_emitter'))
+    load_plugins(
+        session.full_config.get('plugins', {}),
+        event_hooks=session.get_component('event_emitter'),
+    )
     error_handlers_chain = construct_cli_error_handlers_chain()
-    driver = CLIDriver(session=session,
-                       error_handler=error_handlers_chain,
-                       debug=debug)
+    driver = CLIDriver(
+        session=session, error_handler=error_handlers_chain, debug=debug
+    )
     return driver
 
 
 def _get_distribution_source():
     metadata_file = os.path.join(
         os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data'),
-        METADATA_FILENAME
+        METADATA_FILENAME,
     )
     metadata = {}
     if os.path.isfile(metadata_file):
@@ -133,7 +151,7 @@ def _get_linux_distribution():
         linux_distribution = distro.id()
         version = distro.major_version()
         if version:
-            linux_distribution += '.%s' % version
+            linux_distribution += f'.{version}'
     except Exception:
         pass
     return linux_distribution
@@ -141,9 +159,7 @@ def _get_linux_distribution():
 
 def _add_distribution_source_to_user_agent(session):
     add_metadata_component_to_user_agent_extra(
-        session,
-        'installer',
-        _get_distribution_source()
+        session, 'installer', _get_distribution_source()
     )
 
 
@@ -151,7 +167,7 @@ def _add_linux_distribution_to_user_agen
     if linux_distribution := _get_distribution():
         add_metadata_component_to_user_agent_extra(
             session,
-            'distrib', 
+            'distrib',
             linux_distribution,
         )
 
@@ -161,14 +177,13 @@ def _set_user_agent_for_session(session)
     session.user_agent_version = __version__
     _add_distribution_source_to_user_agent(session)
     _add_linux_distribution_to_user_agent(session)
+    add_session_id_component_to_user_agent_extra(session)
 
 
 def no_pager_handler(session, parsed_args, **kwargs):
     if parsed_args.no_cli_pager:
         config_store = session.get_component('config_store')
-        config_store.set_config_provider(
-            'pager', ConstantProvider(value=None)
-        )
+        config_store.set_config_provider('pager', ConstantProvider(value=None))
 
 
 class AWSCLIEntryPoint:
@@ -184,7 +199,7 @@ class AWSCLIEntryPoint:
             return self._error_handler.handle_exception(
                 e,
                 stdout=get_stdout_text_writer(),
-                stderr=get_stderr_text_writer()
+                stderr=get_stderr_text_writer(),
             )
 
         HISTORY_RECORDER.record('CLI_RC', rc, 'CLI')
@@ -222,10 +237,8 @@ class AWSCLIEntryPoint:
         return rc
 
 
-class CLIDriver(object):
-
-    def __init__(self, session=None, error_handler=None,
-                 debug=False):
+class CLIDriver:
+    def __init__(self, session=None, error_handler=None, debug=False):
         if session is None:
             self.session = botocore.session.get_session()
             _set_user_agent_for_session(self.session)
@@ -245,32 +258,27 @@ class CLIDriver(object):
     def _update_config_chain(self):
         config_store = self.session.get_component('config_store')
         config_store.set_config_provider(
-            'region',
-            self._construct_cli_region_chain()
+            'region', self._construct_cli_region_chain()
+        )
+        config_store.set_config_provider(
+            'output', self._construct_cli_output_chain()
         )
         config_store.set_config_provider(
-            'output',
-            self._construct_cli_output_chain()
+            'pager', self._construct_cli_pager_chain()
         )
         config_store.set_config_provider(
-            'pager',
-            self._construct_cli_pager_chain()
+            'cli_binary_format', self._construct_cli_binary_format_chain()
         )
         config_store.set_config_provider(
-            'cli_binary_format',
-            self._construct_cli_binary_format_chain()
+            'cli_auto_prompt', self._construct_cli_auto_prompt_chain()
         )
         config_store.set_config_provider(
-            'cli_auto_prompt',
-            self._construct_cli_auto_prompt_chain()
+            'cli_help_output', self._construct_cli_help_output_chain()
         )
 
     def _construct_cli_region_chain(self):
         providers = [
-            InstanceVarProvider(
-                instance_var='region',
-                session=self.session
-            ),
+            InstanceVarProvider(instance_var='region', session=self.session),
             EnvironmentProvider(
                 name='AWS_REGION',
                 env=os.environ,
@@ -305,6 +313,16 @@ class CLIDriver(object):
         ]
         return ChainProvider(providers=providers)
 
+    def _construct_cli_help_output_chain(self):
+        providers = [
+            ScopedConfigProvider(
+                config_var_name='cli_help_output',
+                session=self.session,
+            ),
+            ConstantProvider(value='terminal'),
+        ]
+        return ChainProvider(providers=providers)
+
     def _construct_cli_pager_chain(self):
         providers = [
             EnvironmentProvider(
@@ -344,8 +362,7 @@ class CLIDriver(object):
                 env=os.environ,
             ),
             ScopedConfigProvider(
-                config_var_name='cli_auto_prompt',
-                session=self.session
+                config_var_name='cli_auto_prompt', session=self.session
             ),
             ConstantProvider(value='off'),
         ]
@@ -390,24 +407,27 @@ class CLIDriver(object):
 
         """
         command_table = self._build_builtin_commands(self.session)
-        self.session.emit('building-command-table.main',
-                          command_table=command_table,
-                          session=self.session,
-                          command_object=self)
+        self.session.emit(
+            'building-command-table.main',
+            command_table=command_table,
+            session=self.session,
+            command_object=self,
+        )
         return command_table
 
     def _build_builtin_commands(self, session):
         commands = OrderedDict()
         services = session.get_available_services()
         for service_name in services:
-            commands[service_name] = ServiceCommand(cli_name=service_name,
-                                                    session=self.session,
-                                                    service_name=service_name)
+            commands[service_name] = ServiceCommand(
+                cli_name=service_name,
+                session=self.session,
+                service_name=service_name,
+            )
         return commands
 
     def _add_aliases(self, command_table, parser):
-        injector = AliasCommandInjector(
-            self.session, self.alias_loader)
+        injector = AliasCommandInjector(self.session, self.alias_loader)
         injector.inject_aliases(command_table, parser)
 
     def _build_argument_table(self):
@@ -420,29 +440,36 @@ class CLIDriver(object):
             cli_argument.add_to_arg_table(argument_table)
         # Then the final step is to send out an event so handlers
         # can add extra arguments or modify existing arguments.
-        self.session.emit('building-top-level-params',
-                          session=self.session,
-                          argument_table=argument_table,
-                          driver=self)
+        self.session.emit(
+            'building-top-level-params',
+            session=self.session,
+            argument_table=argument_table,
+            driver=self,
+        )
         return argument_table
 
     def _create_cli_argument(self, option_name, option_params):
         return CustomArgument(
-            option_name, help_text=option_params.get('help', ''),
+            option_name,
+            help_text=option_params.get('help', ''),
             dest=option_params.get('dest'),
             default=option_params.get('default'),
             action=option_params.get('action'),
             required=option_params.get('required'),
             choices=option_params.get('choices'),
-            cli_type_name=option_params.get('type'))
+            cli_type_name=option_params.get('type'),
+        )
 
     def create_help_command(self):
         cli_data = self._get_cli_data()
-        return ProviderHelpCommand(self.session, self._get_command_table(),
-                                   self._get_argument_table(),
-                                   cli_data.get('description', None),
-                                   cli_data.get('synopsis', None),
-                                   cli_data.get('help_usage', None))
+        return ProviderHelpCommand(
+            self.session,
+            self._get_command_table(),
+            self._get_argument_table(),
+            cli_data.get('description', None),
+            cli_data.get('synopsis', None),
+            cli_data.get('help_usage', None),
+        )
 
     def _cli_version(self):
         version_string = (
@@ -452,8 +479,10 @@ class CLIDriver(object):
         )
 
         if 'AWS_EXECUTION_ENV' in os.environ:
-            version_string += f' exec-env/{os.environ.get("AWS_EXECUTION_ENV")}'
-        
+            version_string += (
+                f' exec-env/{os.environ.get("AWS_EXECUTION_ENV")}'
+            )
+
         version_string += f' {_get_distribution_source()}/{platform.machine()}'
 
         if linux_distribution := _get_distribution():
@@ -466,10 +495,12 @@ class CLIDriver(object):
         command_table['help'] = self.create_help_command()
         cli_data = self._get_cli_data()
         parser = MainArgParser(
-            command_table, self._cli_version(),
+            command_table,
+            self._cli_version(),
             cli_data.get('description', None),
             self._get_argument_table(),
-            prog="aws")
+            prog="aws",
+        )
         return parser
 
     def main(self, args=None):
@@ -492,9 +523,9 @@ class CLIDriver(object):
             # command table.  This is why it's in the try/except clause.
             parsed_args, remaining = parser.parse_known_args(args)
             self._handle_top_level_args(parsed_args)
+            validate_preferred_output_encoding()
             self._emit_session_event(parsed_args)
-            HISTORY_RECORDER.record(
-                'CLI_VERSION', self._cli_version(), 'CLI')
+            HISTORY_RECORDER.record('CLI_VERSION', self._cli_version(), 'CLI')
             HISTORY_RECORDER.record('CLI_ARGUMENTS', args, 'CLI')
             return command_table[parsed_args.command](remaining, parsed_args)
         except BaseException as e:
@@ -506,7 +537,7 @@ class CLIDriver(object):
             return self._error_handler.handle_exception(
                 e,
                 stdout=get_stdout_text_writer(),
-                stderr=get_stderr_text_writer()
+                stderr=get_stderr_text_writer(),
             )
 
     def _emit_session_event(self, parsed_args):
@@ -516,8 +547,10 @@ class CLIDriver(object):
         # session components to be reset (such as session.profile = foo)
         # then all the prior registered components would be removed.
         self.session.emit(
-            'session-initialized', session=self.session,
-            parsed_args=parsed_args)
+            'session-initialized',
+            session=self.session,
+            parsed_args=parsed_args,
+        )
 
     def _show_error(self, msg):
         LOG.debug(msg, exc_info=True)
@@ -536,8 +569,9 @@ class CLIDriver(object):
         loggers_list = ['botocore', 'awscli', 's3transfer', 'urllib3']
         if debug:
             for logger_name in loggers_list:
-                set_stream_logger(logger_name, logging.DEBUG,
-                                  format_string=LOG_FORMAT)
+                set_stream_logger(
+                    logger_name, logging.DEBUG, format_string=LOG_FORMAT
+                )
             enable_crt_logging()
             LOG.debug("CLI version: %s", self._cli_version())
             LOG.debug("Arguments entered to CLI: %s", sys.argv[1:])
@@ -548,12 +582,10 @@ class CLIDriver(object):
             for logger_name in loggers_list:
                 remove_stream_logger(logger_name)
             disable_crt_logging()
-            set_stream_logger(logger_name='awscli',
-                              log_level=logging.ERROR)
+            set_stream_logger(logger_name='awscli', log_level=logging.ERROR)
 
 
 class ServiceCommand(CLICommand):
-
     """A service command for the CLI.
 
     For example, ``aws ec2 ...`` we'd create a ServiceCommand
@@ -621,7 +653,8 @@ class ServiceCommand(CLICommand):
     def _get_service_model(self):
         if self._service_model is None:
             self._service_model = self.session.get_service_model(
-                self._service_name)
+                self._service_name
+            )
         return self._service_model
 
     def __call__(self, args, parsed_globals):
@@ -646,10 +679,12 @@ class ServiceCommand(CLICommand):
                 operation_model=operation_model,
                 operation_caller=CLIOperationCaller(self.session),
             )
-        self.session.emit('building-command-table.%s' % self._name,
-                          command_table=command_table,
-                          session=self.session,
-                          command_object=self)
+        self.session.emit(
+            f'building-command-table.{self._name}',
+            command_table=command_table,
+            session=self.session,
+            command_object=self,
+        )
         self._add_lineage(command_table)
         return command_table
 
@@ -660,23 +695,25 @@ class ServiceCommand(CLICommand):
 
     def create_help_command(self):
         command_table = self._get_command_table()
-        return ServiceHelpCommand(session=self.session,
-                                  obj=self._get_service_model(),
-                                  command_table=command_table,
-                                  arg_table=None,
-                                  event_class='.'.join(self.lineage_names),
-                                  name=self._name)
+        return ServiceHelpCommand(
+            session=self.session,
+            obj=self._get_service_model(),
+            command_table=command_table,
+            arg_table=None,
+            event_class='.'.join(self.lineage_names),
+            name=self._name,
+        )
 
     def create_parser(self):
         command_table = self._get_command_table()
         # Also add a 'help' command.
         command_table['help'] = self.create_help_command()
         return ServiceArgParser(
-            operations_table=command_table, service_name=self._name)
-
+            operations_table=command_table, service_name=self._name
+        )
 
-class ServiceOperation(object):
 
+class ServiceOperation:
     """A single operation of a service.
 
     This class represents a single operation for a service, for
@@ -690,8 +727,9 @@ class ServiceOperation(object):
     }
     DEFAULT_ARG_CLASS = CLIArgument
 
-    def __init__(self, name, parent_name, operation_caller,
-                 operation_model, session):
+    def __init__(
+        self, name, parent_name, operation_caller, operation_model, session
+    ):
         """
 
         :type name: str
@@ -750,7 +788,7 @@ class ServiceOperation(object):
         subcommand_table = OrderedDict()
         full_name = '_'.join([c.name for c in self.lineage])
         self._session.emit(
-            'building-command-table.%s' % full_name,
+            f'building-command-table.{full_name}',
             command_table=subcommand_table,
             session=self._session,
             command_object=self,
@@ -780,18 +818,23 @@ class ServiceOperation(object):
     def __call__(self, args, parsed_globals):
         # Once we know we're trying to call a particular operation
         # of a service we can go ahead and load the parameters.
-        event = 'before-building-argument-table-parser.%s.%s' % \
-            (self._parent_name, self._name)
-        self._emit(event, argument_table=self.arg_table, args=args,
-                   session=self._session)
+        event = f'before-building-argument-table-parser.{self._parent_name}.{self._name}'
+        self._emit(
+            event,
+            argument_table=self.arg_table,
+            args=args,
+            session=self._session,
+        )
         subcommand_table = self.subcommand_table
         maybe_parsed_subcommand = self._parse_potential_subcommand(
-            args, subcommand_table)
+            args, subcommand_table
+        )
         if maybe_parsed_subcommand is not None:
             new_args, subcommand_name = maybe_parsed_subcommand
             return subcommand_table[subcommand_name](new_args, parsed_globals)
         operation_parser = self._create_operation_parser(
-            self.arg_table, subcommand_table)
+            self.arg_table, subcommand_table
+        )
         self._add_help(operation_parser)
         parsed_args, remaining = operation_parser.parse_known_args(args)
         if parsed_args.help == 'help':
@@ -801,20 +844,21 @@ class ServiceOperation(object):
             remaining.append(parsed_args.help)
         if remaining:
             raise UnknownArgumentError(
-                "Unknown options: %s" % ', '.join(remaining))
-        event = 'operation-args-parsed.%s.%s' % (self._parent_name,
-                                                 self._name)
-        self._emit(event, parsed_args=parsed_args,
-                   parsed_globals=parsed_globals)
+                f"Unknown options: {', '.join(remaining)}"
+            )
+        event = f'operation-args-parsed.{self._parent_name}.{self._name}'
+        self._emit(
+            event, parsed_args=parsed_args, parsed_globals=parsed_globals
+        )
         call_parameters = self._build_call_parameters(
-            parsed_args, self.arg_table)
-        event = 'calling-command.%s.%s' % (self._parent_name,
-                                           self._name)
+            parsed_args, self.arg_table
+        )
+        event = f'calling-command.{self._parent_name}.{self._name}'
         override = self._emit_first_non_none_response(
             event,
             call_parameters=call_parameters,
             parsed_args=parsed_args,
-            parsed_globals=parsed_globals
+            parsed_globals=parsed_globals,
         )
         # There are two possible values for override. It can be some type
         # of exception that will be raised if detected or it can represent
@@ -837,14 +881,18 @@ class ServiceOperation(object):
             return self._operation_caller.invoke(
                 self._operation_model.service_model.service_name,
                 self._operation_model.name,
-                call_parameters, parsed_globals)
+                call_parameters,
+                parsed_globals,
+            )
 
     def create_help_command(self):
         return OperationHelpCommand(
             self._session,
             operation_model=self._operation_model,
             arg_table=self.arg_table,
-            name=self._name, event_class='.'.join(self.lineage_names))
+            name=self._name,
+            event_class='.'.join(self.lineage_names),
+        )
 
     def _add_help(self, parser):
         # The 'help' output is processed a little differently from
@@ -874,8 +922,9 @@ class ServiceOperation(object):
         service_name = self._operation_model.service_model.endpoint_prefix
         operation_name = xform_name(self._name, '-')
 
-        return unpack_argument(session, service_name, operation_name,
-                               cli_argument, value)
+        return unpack_argument(
+            session, service_name, operation_name, cli_argument, value
+        )
 
     def _create_argument_table(self):
         argument_table = OrderedDict()
@@ -887,8 +936,9 @@ class ServiceOperation(object):
             arg_dict = input_shape.members
         for arg_name, arg_shape in arg_dict.items():
             cli_arg_name = xform_name(arg_name, '-')
-            arg_class = self.ARG_TYPES.get(arg_shape.type_name,
-                                           self.DEFAULT_ARG_CLASS)
+            arg_class = self.ARG_TYPES.get(
+                arg_shape.type_name, self.DEFAULT_ARG_CLASS
+            )
             is_token = arg_shape.metadata.get('idempotencyToken', False)
             is_required = arg_name in required_arguments and not is_token
             event_emitter = self._session.get_component('event_emitter')
@@ -898,34 +948,36 @@ class ServiceOperation(object):
                 is_required=is_required,
                 operation_model=self._operation_model,
                 serialized_name=arg_name,
-                event_emitter=event_emitter)
+                event_emitter=event_emitter,
+            )
             arg_object.add_to_arg_table(argument_table)
         LOG.debug(argument_table)
-        self._emit('building-argument-table.%s.%s' % (self._parent_name,
-                                                      self._name),
-                   operation_model=self._operation_model,
-                   session=self._session,
-                   command=self,
-                   argument_table=argument_table)
+        self._emit(
+            f'building-argument-table.{self._parent_name}.{self._name}',
+            operation_model=self._operation_model,
+            session=self._session,
+            command=self,
+            argument_table=argument_table,
+        )
         return argument_table
 
     def _emit(self, name, **kwargs):
         return self._session.emit(name, **kwargs)
 
     def _emit_first_non_none_response(self, name, **kwargs):
-        return self._session.emit_first_non_none_response(
-            name, **kwargs)
+        return self._session.emit_first_non_none_response(name, **kwargs)
 
     def _create_operation_parser(self, arg_table, subcommand_table):
         parser = ArgTableArgParser(arg_table, subcommand_table)
         return parser
 
     def _add_customization_to_user_agent(self):
-        add_command_lineage_to_user_agent_extra(self._session, self.lineage_names)
-
+        add_command_lineage_to_user_agent_extra(
+            self._session, self.lineage_names
+        )
 
-class CLIOperationCaller(object):
 
+class CLIOperationCaller:
     """Call an AWS operation and format the response."""
 
     def __init__(self, session):
@@ -957,27 +1009,31 @@ class CLIOperationCaller(object):
 
         """
         client = self._session.create_client(
-            service_name, region_name=parsed_globals.region,
+            service_name,
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
         response = self._make_client_call(
-            client, operation_name, parameters, parsed_globals)
+            client, operation_name, parameters, parsed_globals
+        )
         self._display_response(operation_name, response, parsed_globals)
         return 0
 
-    def _make_client_call(self, client, operation_name, parameters,
-                          parsed_globals):
+    def _make_client_call(
+        self, client, operation_name, parameters, parsed_globals
+    ):
         py_operation_name = xform_name(operation_name)
         if client.can_paginate(py_operation_name) and parsed_globals.paginate:
             paginator = client.get_paginator(py_operation_name)
             response = paginator.paginate(**parameters)
         else:
             response = getattr(client, xform_name(operation_name))(
-                **parameters)
+                **parameters
+            )
         return response
 
-    def _display_response(self, command_name, response,
-                          parsed_globals):
+    def _display_response(self, command_name, response, parsed_globals):
         output = parsed_globals.output
         if output is None:
             output = self._session.get_config_variable('output')
diff -pruN 2.23.6-1/awscli/commands.py 2.31.35-1/awscli/commands.py
--- 2.23.6-1/awscli/commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,7 @@
 # language governing permissions and limitations under the License.
 
 
-class CLICommand(object):
-
+class CLICommand:
     """Interface for a CLI command.
 
     This class represents a top level CLI command
diff -pruN 2.23.6-1/awscli/compat.py 2.31.35-1/awscli/compat.py
--- 2.23.6-1/awscli/compat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/compat.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,27 +10,27 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
-import re
-import shlex
+import collections.abc as collections_abc
+import contextlib
+import io
+import locale
+import logging
 import os
 import os.path
 import platform
-import zipfile
-import signal
-import contextlib
-import collections.abc as collections_abc
-import locale
 import queue
-import io
-from urllib.request import urlopen
+import re
+import shlex
+import signal
+import sys
+import urllib.parse as urlparse
+import zipfile
 from configparser import RawConfigParser
 from functools import partial
-import urllib.parse as urlparse
 from urllib.error import URLError
+from urllib.request import urlopen
 
-from botocore.compat import six
-from botocore.compat import OrderedDict
+from botocore.compat import OrderedDict, six
 
 # Backwards compatible definitions from six
 PY3 = sys.version_info[0] == 3
@@ -46,6 +46,7 @@ raw_input = input
 # package the files in a zip container.
 try:
     import zlib
+
     ZIP_COMPRESSION_MODE = zipfile.ZIP_DEFLATED
 except ImportError:
     ZIP_COMPRESSION_MODE = zipfile.ZIP_STORED
@@ -71,17 +72,20 @@ else:
 imap = map
 raw_input = input
 
+OUTPUT_ENCODING_ENV_VAR = 'AWS_CLI_OUTPUT_ENCODING'
+PYTHONUTF8_ENV_VAR = 'PYTHONUTF8'
+
+LOG = logging.getLogger(__name__)
+
 
 class StdinMissingError(Exception):
     def __init__(self):
-        message = (
-            'stdin is required for this operation, but is not available.'
-        )
+        message = 'stdin is required for this operation, but is not available.'
         super(StdinMissingError, self).__init__(message)
 
 
-class NonTranslatedStdout(object):
-    """ This context manager sets the line-end translation mode for stdout.
+class NonTranslatedStdout:
+    """This context manager sets the line-end translation mode for stdout.
 
     It is deliberately set to binary mode so that `\r` does not get added to
     the line ending. This can be useful when printing commands where a
@@ -91,13 +95,16 @@ class NonTranslatedStdout(object):
     def __enter__(self):
         if sys.platform == "win32":
             import msvcrt
-            self.previous_mode = msvcrt.setmode(sys.stdout.fileno(),
-                                                os.O_BINARY)
+
+            self.previous_mode = msvcrt.setmode(
+                sys.stdout.fileno(), os.O_BINARY
+            )
         return sys.stdout
 
     def __exit__(self, type, value, traceback):
         if sys.platform == "win32":
             import msvcrt
+
             msvcrt.setmode(sys.stdout.fileno(), self.previous_mode)
 
 
@@ -120,9 +127,56 @@ def get_binary_stdout():
 
 
 def _get_text_writer(stream, errors):
+    set_preferred_output_encoding(stream)
     return stream
 
 
+def validate_preferred_output_encoding():
+    """
+    Validate that the preferred output encoding is valid if it's set.
+    We do this separately from set_preferred_output_encoding because that
+    may be called from error handlers while handling another exception, which
+    we still want to print successfully.
+    """
+    if OUTPUT_ENCODING_ENV_VAR in os.environ:
+        try:
+            ''.encode(os.environ[OUTPUT_ENCODING_ENV_VAR])
+        except LookupError:
+            raise ValueError(
+                f'Unknown codec `'
+                f'{os.environ[OUTPUT_ENCODING_ENV_VAR]}` '
+                f'specified for {OUTPUT_ENCODING_ENV_VAR}.'
+            )
+
+
+def set_preferred_output_encoding(stream):
+    """
+    If the user specified AWS_CLI_OUTPUT_ENCODING, use that encoding
+    for the output stream. This lets us move away from the Python-specific
+    environment variables in the long-term, though we support PYTHONUTF8
+    here as well for backwards compatability.
+    """
+    if OUTPUT_ENCODING_ENV_VAR in os.environ:
+        try:
+            stream.reconfigure(encoding=os.environ[OUTPUT_ENCODING_ENV_VAR])
+        except LookupError:
+            # At this point we don't want to raise the exception, since we
+            # could be writing out another error. Callers should call
+            # validate_preferred_output_encoding first.
+            LOG.debug(
+                f'Ignoring invalid codec '
+                f'{os.environ[OUTPUT_ENCODING_ENV_VAR]} '
+                f'specified for {OUTPUT_ENCODING_ENV_VAR}.'
+            )
+    # Fall back to PYTHONUTF8, for users who were setting it
+    # before the PyInstaller 6 upgrade which stopped supporting it
+    elif (
+        PYTHONUTF8_ENV_VAR in os.environ
+        and os.environ[PYTHONUTF8_ENV_VAR] == '1'
+    ):
+        stream.reconfigure(encoding='UTF-8')
+
+
 def getpreferredencoding(*args, **kwargs):
     """Use AWS_CLI_FILE_ENCODING environment variable value as encoding,
     if it's not set use locale.getpreferredencoding()
@@ -330,12 +384,12 @@ try:
     from platform import linux_distribution
 except ImportError:
     _UNIXCONFDIR = '/etc'
-    def _dist_try_harder(distname, version, id):
 
-        """ Tries some special tricks to get the distribution
-            information in case the default method fails.
-            Currently supports older SuSE Linux, Caldera OpenLinux and
-            Slackware Linux distributions.
+    def _dist_try_harder(distname, version, id):
+        """Tries some special tricks to get the distribution
+        information in case the default method fails.
+        Currently supports older SuSE Linux, Caldera OpenLinux and
+        Slackware Linux distributions.
         """
         if os.path.exists('/var/adm/inst-log/info'):
             # SuSE Linux stores distribution information in that file
@@ -367,7 +421,7 @@ except ImportError:
         if os.path.isdir('/usr/lib/setup'):
             # Check for slackware version tag file (thanks to Greg Andruk)
             verfiles = os.listdir('/usr/lib/setup')
-            for n in range(len(verfiles)-1, -1, -1):
+            for n in range(len(verfiles) - 1, -1, -1):
                 if verfiles[n][:14] != 'slack-version-':
                     del verfiles[n]
             if verfiles:
@@ -379,14 +433,13 @@ except ImportError:
         return distname, version, id
 
     _release_filename = re.compile(r'(\w+)[-_](release|version)', re.ASCII)
-    _lsb_release_version = re.compile(r'(.+)'
-                                      r' release '
-                                      r'([\d.]+)'
-                                      r'[^(]*(?:\((.+)\))?', re.ASCII)
-    _release_version = re.compile(r'([^0-9]+)'
-                                  r'(?: release )?'
-                                  r'([\d.]+)'
-                                  r'[^(]*(?:\((.+)\))?', re.ASCII)
+    _lsb_release_version = re.compile(
+        r'(.+)' r' release ' r'([\d.]+)' r'[^(]*(?:\((.+)\))?', re.ASCII
+    )
+    _release_version = re.compile(
+        r'([^0-9]+)' r'(?: release )?' r'([\d.]+)' r'[^(]*(?:\((.+)\))?',
+        re.ASCII,
+    )
 
     # See also http://www.novell.com/coolsolutions/feature/11251.html
     # and http://linuxmafia.com/faq/Admin/release-files.html
@@ -394,12 +447,24 @@ except ImportError:
     # and http://www.die.net/doc/linux/man/man1/lsb_release.1.html
 
     _supported_dists = (
-        'SuSE', 'debian', 'fedora', 'redhat', 'centos',
-        'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
-        'UnitedLinux', 'turbolinux', 'arch', 'mageia')
+        'SuSE',
+        'debian',
+        'fedora',
+        'redhat',
+        'centos',
+        'mandrake',
+        'mandriva',
+        'rocks',
+        'slackware',
+        'yellowdog',
+        'gentoo',
+        'UnitedLinux',
+        'turbolinux',
+        'arch',
+        'mageia',
+    )
 
     def _parse_release_file(firstline):
-
         # Default to empty 'version' and 'id' strings.  Both defaults are used
         # when 'firstline' is empty.  'id' defaults to empty when an id can not
         # be deduced.
@@ -429,34 +494,39 @@ except ImportError:
     _release_file_re = re.compile(r"(?:DISTRIB_RELEASE\s*=)\s*(.*)", re.I)
     _codename_file_re = re.compile(r"(?:DISTRIB_CODENAME\s*=)\s*(.*)", re.I)
 
-    def linux_distribution(distname='', version='', id='',
-                           supported_dists=_supported_dists,
-                           full_distribution_name=1):
-        return _linux_distribution(distname, version, id, supported_dists,
-                                   full_distribution_name)
-
-    def _linux_distribution(distname, version, id, supported_dists,
-                            full_distribution_name):
-
-        """ Tries to determine the name of the Linux OS distribution name.
-            The function first looks for a distribution release file in
-            /etc and then reverts to _dist_try_harder() in case no
-            suitable files are found.
-            supported_dists may be given to define the set of Linux
-            distributions to look for. It defaults to a list of currently
-            supported Linux distributions identified by their release file
-            name.
-            If full_distribution_name is true (default), the full
-            distribution read from the OS is returned. Otherwise the short
-            name taken from supported_dists is used.
-            Returns a tuple (distname, version, id) which default to the
-            args given as parameters.
+    def linux_distribution(
+        distname='',
+        version='',
+        id='',
+        supported_dists=_supported_dists,
+        full_distribution_name=1,
+    ):
+        return _linux_distribution(
+            distname, version, id, supported_dists, full_distribution_name
+        )
+
+    def _linux_distribution(
+        distname, version, id, supported_dists, full_distribution_name
+    ):
+        """Tries to determine the name of the Linux OS distribution name.
+        The function first looks for a distribution release file in
+        /etc and then reverts to _dist_try_harder() in case no
+        suitable files are found.
+        supported_dists may be given to define the set of Linux
+        distributions to look for. It defaults to a list of currently
+        supported Linux distributions identified by their release file
+        name.
+        If full_distribution_name is true (default), the full
+        distribution read from the OS is returned. Otherwise the short
+        name taken from supported_dists is used.
+        Returns a tuple (distname, version, id) which default to the
+        args given as parameters.
         """
         # check for the Debian/Ubuntu /etc/lsb-release file first, needed so
         # that the distribution doesn't get identified as Debian.
         # https://bugs.python.org/issue9514
         try:
-            with open("/etc/lsb-release", "r") as etclsbrel:
+            with open("/etc/lsb-release") as etclsbrel:
                 for line in etclsbrel:
                     m = _distributor_id_file_re.search(line)
                     if m:
@@ -469,8 +539,8 @@ except ImportError:
                         _u_id = m.group(1).strip()
                 if _u_distname and _u_version:
                     return (_u_distname, _u_version, _u_id)
-        except (EnvironmentError, UnboundLocalError):
-                pass
+        except (OSError, UnboundLocalError):
+            pass
 
         try:
             etc = os.listdir(_UNIXCONFDIR)
@@ -489,8 +559,11 @@ except ImportError:
             return _dist_try_harder(distname, version, id)
 
         # Read the first line
-        with open(os.path.join(_UNIXCONFDIR, file), 'r',
-                  encoding='utf-8', errors='surrogateescape') as f:
+        with open(
+            os.path.join(_UNIXCONFDIR, file),
+            encoding='utf-8',
+            errors='surrogateescape',
+        ) as f:
             firstline = f.readline()
         _distname, _version, _id = _parse_release_file(firstline)
 
diff -pruN 2.23.6-1/awscli/customizations/addexamples.py 2.31.35-1/awscli/customizations/addexamples.py
--- 2.23.6-1/awscli/customizations/addexamples.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/addexamples.py	2025-11-12 19:17:29.000000000 +0000
@@ -26,36 +26,38 @@ work you need to:
   For example, ``examples/ec2/ec2-create-key-pair.rst``.
 
 """
-import os
-import logging
 
+import logging
+import os
 
 LOG = logging.getLogger(__name__)
 
 
 def add_examples(help_command, **kwargs):
     doc_path = os.path.join(
-        os.path.dirname(
-            os.path.dirname(
-                os.path.abspath(__file__))), 'examples')
-    doc_path = os.path.join(doc_path,
-                            help_command.event_class.replace('.', os.path.sep))
+        os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'examples'
+    )
+    doc_path = os.path.join(
+        doc_path, help_command.event_class.replace('.', os.path.sep)
+    )
     doc_path = doc_path + '.rst'
     LOG.debug("Looking for example file at: %s", doc_path)
     if os.path.isfile(doc_path):
         help_command.doc.style.h2('Examples')
         help_command.doc.style.start_note()
-        msg = ("<p>To use the following examples, you must have the AWS "
-               "CLI installed and configured. See the "
-               "<a href='https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html'>"
-               "Getting started guide</a> in the <i>AWS CLI User Guide</i> "
-               "for more information.</p>"
-               "<p>Unless otherwise stated, all examples have unix-like "
-               "quotation rules. These examples will need to be adapted "
-               "to your terminal's quoting rules. See "
-               "<a href='https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html'>"
-               "Using quotation marks with strings</a> "
-               "in the <i>AWS CLI User Guide</i>.</p>")
+        msg = (
+            "<p>To use the following examples, you must have the AWS "
+            "CLI installed and configured. See the "
+            "<a href='https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html'>"
+            "Getting started guide</a> in the <i>AWS CLI User Guide</i> "
+            "for more information.</p>"
+            "<p>Unless otherwise stated, all examples have unix-like "
+            "quotation rules. These examples will need to be adapted "
+            "to your terminal's quoting rules. See "
+            "<a href='https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html'>"
+            "Using quotation marks with strings</a> "
+            "in the <i>AWS CLI User Guide</i>.</p>"
+        )
         help_command.doc.include_doc_string(msg)
         help_command.doc.style.end_note()
         fp = open(doc_path)
diff -pruN 2.23.6-1/awscli/customizations/argrename.py 2.31.35-1/awscli/customizations/argrename.py
--- 2.23.6-1/awscli/customizations/argrename.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/argrename.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-"""
-"""
+""" """
 
 from awscli.customizations import utils
 
-
 ARGUMENT_RENAMES = {
     # Mapping of original arg to renamed arg.
     # The key is <service>.<operation>.argname
@@ -26,7 +24,6 @@ ARGUMENT_RENAMES = {
     'ec2.create-image.no-no-reboot': 'reboot',
     'ec2.*.no-egress': 'ingress',
     'ec2.*.no-disable-api-termination': 'enable-api-termination',
-    'opsworks.*.region': 'stack-region',
     'elastictranscoder.*.output': 'job-output',
     'swf.register-activity-type.version': 'activity-version',
     'swf.register-workflow-type.version': 'workflow-version',
@@ -76,8 +73,7 @@ ARGUMENT_RENAMES = {
     'stepfunctions.send-task-success.output': 'task-output',
     'clouddirectory.publish-schema.version': 'schema-version',
     'mturk.list-qualification-types.query': 'types-query',
-    'workdocs.create-notification-subscription.endpoint':
-        'notification-endpoint',
+    'workdocs.create-notification-subscription.endpoint': 'notification-endpoint',
     'workdocs.describe-users.query': 'user-query',
     'lex-models.delete-bot.version': 'bot-version',
     'lex-models.delete-intent.version': 'intent-version',
@@ -117,36 +113,41 @@ ARGUMENT_RENAMES = {
 # This is useful when you need to change the name of an argument but you
 # still need to support the old argument.
 HIDDEN_ALIASES = {
-    'mgn.*.replication-servers-security-groups-ids':
-        'replication-servers-security-groups-i-ds',
+    'mgn.*.replication-servers-security-groups-ids': 'replication-servers-security-groups-i-ds',
     'mgn.*.source-server-ids': 'source-server-i-ds',
-    'mgn.*.replication-configuration-template-ids':
-        'replication-configuration-template-i-ds',
-    'elasticache.create-replication-group.preferred-cache-cluster-azs':
-        'preferred-cache-cluster-a-zs'
+    'mgn.*.replication-configuration-template-ids': 'replication-configuration-template-i-ds',
+    'elasticache.create-replication-group.preferred-cache-cluster-azs': 'preferred-cache-cluster-a-zs',
 }
 
 
 def register_arg_renames(cli):
     for original, new_name in ARGUMENT_RENAMES.items():
         event_portion, original_arg_name = original.rsplit('.', 1)
-        cli.register('building-argument-table.%s' % event_portion,
-                     rename_arg(original_arg_name, new_name))
+        cli.register(
+            'building-argument-table.%s' % event_portion,
+            rename_arg(original_arg_name, new_name),
+        )
     for original, new_name in HIDDEN_ALIASES.items():
         event_portion, original_arg_name = original.rsplit('.', 1)
-        cli.register('building-argument-table.%s' % event_portion,
-                     hidden_alias(original_arg_name, new_name))
+        cli.register(
+            'building-argument-table.%s' % event_portion,
+            hidden_alias(original_arg_name, new_name),
+        )
 
 
 def rename_arg(original_arg_name, new_name):
     def _rename_arg(argument_table, **kwargs):
         if original_arg_name in argument_table:
             utils.rename_argument(argument_table, original_arg_name, new_name)
+
     return _rename_arg
 
 
 def hidden_alias(original_arg_name, alias_name):
     def _alias_arg(argument_table, **kwargs):
         if original_arg_name in argument_table:
-            utils.make_hidden_alias(argument_table, original_arg_name, alias_name)
+            utils.make_hidden_alias(
+                argument_table, original_arg_name, alias_name
+            )
+
     return _alias_arg
diff -pruN 2.23.6-1/awscli/customizations/arguments.py 2.31.35-1/awscli/customizations/arguments.py
--- 2.23.6-1/awscli/customizations/arguments.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/arguments.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,11 @@
 import os
 import re
 
+import jmespath
+
 from awscli.arguments import CustomArgument
 from awscli.compat import compat_open
 from awscli.customizations.exceptions import ParamValidationError
-import jmespath
 
 
 def resolve_given_outfile_path(path):
@@ -62,8 +63,10 @@ class OverrideRequiredArgsArgument(Custo
         super(OverrideRequiredArgsArgument, self).__init__(**self.ARG_DATA)
 
     def _register_argument_action(self):
-        self._session.register('before-building-argument-table-parser',
-                               self.override_required_args)
+        self._session.register(
+            'before-building-argument-table-parser',
+            self.override_required_args,
+        )
 
     def override_required_args(self, argument_table, args, **kwargs):
         name_in_cmdline = '--' + self.name
@@ -93,16 +96,19 @@ class StatefulArgument(CustomArgument):
 class QueryOutFileArgument(StatefulArgument):
     """An argument that write a JMESPath query result to a file"""
 
-    def __init__(self, session, name, query, after_call_event, perm,
-                 *args, **kwargs):
+    def __init__(
+        self, session, name, query, after_call_event, perm, *args, **kwargs
+    ):
         self._session = session
         self._query = query
         self._after_call_event = after_call_event
         self._perm = perm
         # Generate default help_text if text was not provided.
         if 'help_text' not in kwargs:
-            kwargs['help_text'] = ('Saves the command output contents of %s '
-                                   'to the given filename' % self.query)
+            kwargs['help_text'] = (
+                'Saves the command output contents of %s '
+                'to the given filename' % self.query
+            )
         super(QueryOutFileArgument, self).__init__(name, *args, **kwargs)
 
     @property
@@ -129,7 +135,8 @@ class QueryOutFileArgument(StatefulArgum
         if is_parsed_result_successful(parsed):
             contents = jmespath.search(self.query, parsed)
             with compat_open(
-                    self.value, 'w', access_permissions=self.perm) as fp:
+                self.value, 'w', access_permissions=self.perm
+            ) as fp:
                 # Don't write 'None' to a file -- write ''.
                 if contents is None:
                     fp.write('')
@@ -145,15 +152,21 @@ class QueryOutFileArgument(StatefulArgum
                 os.chmod(self.value, self.perm)
 
 
-class NestedBlobArgumentHoister(object):
+class NestedBlobArgumentHoister:
     """Can be registered to update a single argument / model value combination
     mapping that to a new top-level argument.
     Currently limited to blob argument types as these are the only ones
     requiring the hoist.
     """
 
-    def __init__(self, source_arg, source_arg_blob_member,
-                 new_arg, new_arg_doc_string, doc_string_addendum):
+    def __init__(
+        self,
+        source_arg,
+        source_arg_blob_member,
+        new_arg,
+        new_arg_doc_string,
+        doc_string_addendum,
+    ):
         self._source_arg = source_arg
         self._source_arg_blob_member = source_arg_blob_member
         self._new_arg = new_arg
@@ -163,8 +176,7 @@ class NestedBlobArgumentHoister(object):
     def __call__(self, session, argument_table, **kwargs):
         if not self._valid_target(argument_table):
             return
-        self._update_arg(
-            argument_table, self._source_arg, self._new_arg)
+        self._update_arg(argument_table, self._source_arg, self._new_arg)
 
     def _valid_target(self, argument_table):
         # Find the source argument and check that it has a member of
@@ -173,16 +185,18 @@ class NestedBlobArgumentHoister(object):
             arg = argument_table[self._source_arg]
             input_model = arg.argument_model
             member = input_model.members.get(self._source_arg_blob_member)
-            if (member is not None and
-                    member.type_name == 'blob'):
+            if member is not None and member.type_name == 'blob':
                 return True
         return False
 
     def _update_arg(self, argument_table, source_arg, new_arg):
         argument_table[new_arg] = _NestedBlobArgumentParamOverwrite(
-            new_arg, source_arg, self._source_arg_blob_member,
+            new_arg,
+            source_arg,
+            self._source_arg_blob_member,
             help_text=self._new_arg_doc_string,
-            cli_type_name='blob')
+            cli_type_name='blob',
+        )
         argument_table[source_arg].required = False
         argument_table[source_arg].documentation += self._doc_string_addendum
 
@@ -190,7 +204,8 @@ class NestedBlobArgumentHoister(object):
 class _NestedBlobArgumentParamOverwrite(CustomArgument):
     def __init__(self, new_arg, source_arg, source_arg_blob_member, **kwargs):
         super(_NestedBlobArgumentParamOverwrite, self).__init__(
-            new_arg, **kwargs)
+            new_arg, **kwargs
+        )
         self._param_to_overwrite = _reverse_xform_name(source_arg)
         self._source_arg_blob_member = source_arg_blob_member
 
diff -pruN 2.23.6-1/awscli/customizations/assumerole.py 2.31.35-1/awscli/customizations/assumerole.py
--- 2.23.6-1/awscli/customizations/assumerole.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/assumerole.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,17 +1,19 @@
-import os
 import logging
+import os
 
-from botocore.exceptions import ProfileNotFound
 from botocore.credentials import JSONFileCache
+from botocore.exceptions import ProfileNotFound
 
 LOG = logging.getLogger(__name__)
 CACHE_DIR = os.path.expanduser(os.path.join('~', '.aws', 'cli', 'cache'))
 
 
 def register_assume_role_provider(event_handlers):
-    event_handlers.register('session-initialized',
-                            inject_assume_role_provider_cache,
-                            unique_id='inject_assume_role_cred_provider_cache')
+    event_handlers.register(
+        'session-initialized',
+        inject_assume_role_provider_cache,
+        unique_id='inject_assume_role_cred_provider_cache',
+    )
 
 
 def inject_assume_role_provider_cache(session, **kwargs):
@@ -33,9 +35,11 @@ def inject_assume_role_provider_cache(se
         # immediately return.  If it's invalid something else
         # up the stack will raise ProfileNotFound, otherwise
         # the configure (and other) commands will work as expected.
-        LOG.debug("ProfileNotFound caught when trying to inject "
-                  "assume-role cred provider cache.  Not configuring "
-                  "JSONFileCache for assume-role.")
+        LOG.debug(
+            "ProfileNotFound caught when trying to inject "
+            "assume-role cred provider cache.  Not configuring "
+            "JSONFileCache for assume-role."
+        )
         return
     assume_role_provider = cred_chain.get_provider('assume-role')
     assume_role_provider.cache = JSONFileCache(CACHE_DIR)
diff -pruN 2.23.6-1/awscli/customizations/awslambda.py 2.31.35-1/awscli/customizations/awslambda.py
--- 2.23.6-1/awscli/customizations/awslambda.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/awslambda.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import zipfile
 import copy
+import zipfile
 from contextlib import closing
 
-from awscli.arguments import CustomArgument, CLIArgument
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.arguments import CLIArgument, CustomArgument
 from awscli.compat import BytesIO
-
+from awscli.customizations.exceptions import ParamValidationError
 
 ERROR_MSG = (
     "--zip-file must be a zip file with the fileb:// prefix.\n"
-    "Example usage:  --zip-file fileb://path/to/file.zip")
+    "Example usage:  --zip-file fileb://path/to/file.zip"
+)
 
 ZIP_DOCSTRING = (
     '<p>The path to the zip file of the {param_type} you are uploading. '
@@ -31,14 +31,21 @@ ZIP_DOCSTRING = (
 
 
 def register_lambda_create_function(cli):
-    cli.register('building-argument-table.lambda.create-function',
-                 ZipFileArgumentHoister('Code').hoist)
-    cli.register('building-argument-table.lambda.publish-layer-version',
-                 ZipFileArgumentHoister('Content').hoist)
-    cli.register('building-argument-table.lambda.update-function-code',
-                 _modify_zipfile_docstring)
-    cli.register('process-cli-arg.lambda.update-function-code',
-                 validate_is_zip_file)
+    cli.register(
+        'building-argument-table.lambda.create-function',
+        ZipFileArgumentHoister('Code').hoist,
+    )
+    cli.register(
+        'building-argument-table.lambda.publish-layer-version',
+        ZipFileArgumentHoister('Content').hoist,
+    )
+    cli.register(
+        'building-argument-table.lambda.update-function-code',
+        _modify_zipfile_docstring,
+    )
+    cli.register(
+        'process-cli-arg.lambda.update-function-code', validate_is_zip_file
+    )
 
 
 def validate_is_zip_file(cli_argument, value, **kwargs):
@@ -46,7 +53,7 @@ def validate_is_zip_file(cli_argument, v
         _should_contain_zip_content(value)
 
 
-class ZipFileArgumentHoister(object):
+class ZipFileArgumentHoister:
     """Hoists a ZipFile argument up to the top level.
 
     Injects a top-level ZipFileArgument into the argument table which maps
@@ -55,6 +62,7 @@ class ZipFileArgumentHoister(object):
     ReplacedZipFileArgument to prevent its usage and recommend the new
     top-level injected parameter.
     """
+
     def __init__(self, serialized_name):
         self._serialized_name = serialized_name
         self._name = serialized_name.lower()
@@ -62,8 +70,10 @@ class ZipFileArgumentHoister(object):
     def hoist(self, session, argument_table, **kwargs):
         help_text = ZIP_DOCSTRING.format(param_type=self._name)
         argument_table['zip-file'] = ZipFileArgument(
-            'zip-file', help_text=help_text, cli_type_name='blob',
-            serialized_name=self._serialized_name
+            'zip-file',
+            help_text=help_text,
+            cli_type_name='blob',
+            serialized_name=self._serialized_name,
         )
         argument = argument_table[self._name]
         model = copy.deepcopy(argument.argument_model)
@@ -107,6 +117,7 @@ class ZipFileArgument(CustomArgument):
     --zip-file foo.zip winds up being serialized as
     { 'Code': { 'ZipFile': <contents of foo.zip> } }.
     """
+
     def __init__(self, *args, **kwargs):
         self._param_to_replace = kwargs.pop('serialized_name')
         super(ZipFileArgument, self).__init__(*args, **kwargs)
@@ -131,6 +142,7 @@ class ReplacedZipFileArgument(CLIArgumen
     contents. And the argument class can inject those bytes into the correct
     serialization name.
     """
+
     def __init__(self, *args, **kwargs):
         super(ReplacedZipFileArgument, self).__init__(*args, **kwargs)
         self._cli_name = '--%s' % kwargs['name']
diff -pruN 2.23.6-1/awscli/customizations/binaryformat.py 2.31.35-1/awscli/customizations/binaryformat.py
--- 2.23.6-1/awscli/customizations/binaryformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/binaryformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -60,7 +60,7 @@ class Base64DecodeVisitor(ModelVisitor):
             raise InvalidBase64Error('Invalid base64: "%s"' % value)
 
 
-class BinaryFormatHandler(object):
+class BinaryFormatHandler:
     _BINARY_FORMATS = {
         'base64': (base64_decode_input_blobs, register_identity_blob_parser),
         'raw-in-base64-out': (None, register_identity_blob_parser),
diff -pruN 2.23.6-1/awscli/customizations/binaryhoist.py 2.31.35-1/awscli/customizations/binaryhoist.py
--- 2.23.6-1/awscli/customizations/binaryhoist.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/binaryhoist.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import copy
-
 from dataclasses import dataclass
 from typing import Optional
-from awscli.arguments import CustomArgument, CLIArgument
+
+from awscli.arguments import CLIArgument, CustomArgument
 from awscli.customizations.exceptions import ParamValidationError
 
 
diff -pruN 2.23.6-1/awscli/customizations/cliinput.py 2.31.35-1/awscli/customizations/cliinput.py
--- 2.23.6-1/awscli/customizations/cliinput.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cliinput.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,9 @@ import json
 from ruamel.yaml import YAML
 from ruamel.yaml.error import YAMLError
 
-from awscli.paramfile import get_paramfile, LOCAL_PREFIX_MAP
 from awscli.argprocess import ParamError, ParamSyntaxError
 from awscli.customizations.arguments import OverrideRequiredArgsArgument
+from awscli.paramfile import LOCAL_PREFIX_MAP, get_paramfile
 
 
 def register_cli_input_args(cli):
@@ -49,6 +49,7 @@ class CliInputArgument(OverrideRequiredA
     The parameters in the file will be overwritten by any arguments specified
     on the command line.
     """
+
     def _register_argument_action(self):
         self._session.register(
             'calling-command.*', self.add_to_call_parameters
@@ -65,7 +66,7 @@ class CliInputArgument(OverrideRequiredA
             raise ParamError(
                 self.cli_name,
                 "Invalid type: expecting map, "
-                "received %s" % type(loaded_params)
+                "received %s" % type(loaded_params),
             )
         self._update_call_parameters(call_parameters, loaded_params)
 
@@ -75,7 +76,8 @@ class CliInputArgument(OverrideRequiredA
             return
 
         cli_input_args = [
-            k for k, v in vars(parsed_args).items()
+            k
+            for k, v in vars(parsed_args).items()
             if v is not None and k.startswith('cli_input')
         ]
         if len(cli_input_args) != 1:
@@ -109,6 +111,7 @@ class CliInputJSONArgument(CliInputArgum
     generated by ``--generate-cli-skeleton``. The items in the JSON string
     will not clobber other arguments entered into the command line.
     """
+
     ARG_DATA = {
         'name': 'cli-input-json',
         'group_name': 'cli_input',
@@ -120,7 +123,7 @@ class CliInputJSONArgument(CliInputArgum
             'pass arbitrary binary values using a JSON-provided value as the '
             'string will be taken literally. This may not be specified along '
             'with ``--cli-input-yaml``.'
-        )
+        ),
     }
 
     def _load_parameters(self, arg_value):
@@ -141,7 +144,7 @@ class CliInputYAMLArgument(CliInputArgum
             'If other arguments are provided on the command line, those '
             'values will override the YAML-provided values. This may not be '
             'specified along with ``--cli-input-json``.'
-        )
+        ),
     }
 
     def _load_parameters(self, arg_value):
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/__init__.py 2.31.35-1/awscli/customizations/cloudformation/__init__.py
--- 2.23.6-1/awscli/customizations/cloudformation/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.cloudformation.package import PackageCommand
 from awscli.customizations.cloudformation.deploy import DeployCommand
+from awscli.customizations.cloudformation.package import PackageCommand
 
 
 def initialize(cli):
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/artifact_exporter.py 2.31.35-1/awscli/customizations/cloudformation/artifact_exporter.py
--- 2.23.6-1/awscli/customizations/cloudformation/artifact_exporter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/artifact_exporter.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,23 +11,24 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import contextlib
 import logging
 import os
+import shutil
 import tempfile
-import zipfile
-import contextlib
 import uuid
-import shutil
-from botocore.utils import set_value_from_jmespath
-
-from awscli.compat import urlparse
+import zipfile
 from contextlib import contextmanager
-from awscli.compat import compat_open
-from awscli.customizations.cloudformation import exceptions
-from awscli.customizations.cloudformation.yamlhelper import yaml_dump, \
-    yaml_parse
+
 import jmespath
+from botocore.utils import set_value_from_jmespath
 
+from awscli.compat import compat_open, urlparse
+from awscli.customizations.cloudformation import exceptions
+from awscli.customizations.cloudformation.yamlhelper import (
+    yaml_dump,
+    yaml_parse,
+)
 
 LOG = logging.getLogger(__name__)
 
@@ -60,19 +61,16 @@ def is_local_file(path):
 
 
 def is_zip_file(path):
-    return (
-        is_path_value_valid(path) and
-        zipfile.is_zipfile(path))
-
-
-def parse_s3_url(url,
-                 bucket_name_property="Bucket",
-                 object_key_property="Key",
-                 version_property=None):
+    return is_path_value_valid(path) and zipfile.is_zipfile(path)
 
-    if isinstance(url, str) \
-            and url.startswith("s3://"):
 
+def parse_s3_url(
+    url,
+    bucket_name_property="Bucket",
+    object_key_property="Key",
+    version_property=None,
+):
+    if isinstance(url, str) and url.startswith("s3://"):
         # Python < 2.7.10 don't parse query parameters from URI with custom
         # scheme such as s3://blah/blah. As a workaround, remove scheme
         # altogether to trigger the parser "s3://foo/bar?v=1" =>"//foo/bar?v=1"
@@ -86,19 +84,23 @@ def parse_s3_url(url,
 
             # If there is a query string that has a single versionId field,
             # set the object version and return
-            if version_property is not None \
-                    and 'versionId' in query \
-                    and len(query['versionId']) == 1:
+            if (
+                version_property is not None
+                and 'versionId' in query
+                and len(query['versionId']) == 1
+            ):
                 result[version_property] = query['versionId'][0]
 
             return result
 
-    raise ValueError("URL given to the parse method is not a valid S3 url "
-                     "{0}".format(url))
+    raise ValueError(
+        f"URL given to the parse method is not a valid S3 url {url}"
+    )
 
 
-def upload_local_artifacts(resource_id, resource_dict, property_name,
-                           parent_dir, uploader):
+def upload_local_artifacts(
+    resource_id, resource_dict, property_name, parent_dir, uploader
+):
     """
     Upload local artifacts referenced by the property at given resource and
     return S3 URL of the uploaded object. It is the responsibility of callers
@@ -134,8 +136,9 @@ def upload_local_artifacts(resource_id,
         # This check is supporting the case where your resource does not
         # refer to local artifacts
         # Nothing to do if property value is an S3 URL
-        LOG.debug("Property {0} of {1} is already a S3 URL"
-                  .format(property_name, resource_id))
+        LOG.debug(
+            f"Property {property_name} of {resource_id} is already a S3 URL"
+        )
         return local_path
 
     local_path = make_abs_path(parent_dir, local_path)
@@ -149,14 +152,15 @@ def upload_local_artifacts(resource_id,
         return uploader.upload_with_dedup(local_path)
 
     raise exceptions.InvalidLocalPathError(
-            resource_id=resource_id,
-            property_name=property_name,
-            local_path=local_path)
+        resource_id=resource_id,
+        property_name=property_name,
+        local_path=local_path,
+    )
 
 
 def zip_and_upload(local_path, uploader):
     with zip_folder(local_path) as zipfile:
-            return uploader.upload_with_dedup(zipfile)
+        return uploader.upload_with_dedup(zipfile)
 
 
 @contextmanager
@@ -169,8 +173,7 @@ def zip_folder(folder_path):
     :return: Name of the zipfile
     """
 
-    filename = os.path.join(
-        tempfile.gettempdir(), "data-" + uuid.uuid4().hex)
+    filename = os.path.join(tempfile.gettempdir(), "data-" + uuid.uuid4().hex)
 
     zipfile_name = make_zip(filename, folder_path)
     try:
@@ -181,7 +184,7 @@ def zip_folder(folder_path):
 
 
 def make_zip(filename, source_root):
-    zipfile_name = "{0}.zip".format(filename)
+    zipfile_name = f"{filename}.zip"
     source_root = os.path.abspath(source_root)
     with open(zipfile_name, 'wb') as f:
         zip_file = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
@@ -189,8 +192,7 @@ def make_zip(filename, source_root):
             for root, dirs, files in os.walk(source_root, followlinks=True):
                 for filename in files:
                     full_path = os.path.join(root, filename)
-                    relative_path = os.path.relpath(
-                        full_path, source_root)
+                    relative_path = os.path.relpath(full_path, source_root)
                     zf.write(full_path, relative_path)
 
     return zipfile_name
@@ -216,7 +218,7 @@ def copy_to_temp_dir(filepath):
     return tmp_dir
 
 
-class Resource(object):
+class Resource:
     """
     Base class representing a CloudFormation resource that can be exported
     """
@@ -241,17 +243,25 @@ class Resource(object):
             return
 
         if isinstance(property_value, dict):
-            LOG.debug("Property {0} of {1} resource is not a URL"
-                      .format(self.PROPERTY_NAME, resource_id))
+            LOG.debug(
+                "Property %s of %s resource is not a URL",
+                self.PROPERTY_NAME,
+                resource_id,
+            )
             return
 
         # If property is a file but not a zip file, place file in temp
         # folder and send the temp folder to be zipped
         temp_dir = None
-        if is_local_file(property_value) and not \
-                is_zip_file(property_value) and self.FORCE_ZIP:
+        if (
+            is_local_file(property_value)
+            and not is_zip_file(property_value)
+            and self.FORCE_ZIP
+        ):
             temp_dir = copy_to_temp_dir(property_value)
-            set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, temp_dir)
+            set_value_from_jmespath(
+                resource_dict, self.PROPERTY_NAME, temp_dir
+            )
 
         try:
             self.do_export(resource_id, resource_dict, parent_dir)
@@ -259,10 +269,11 @@ class Resource(object):
         except Exception as ex:
             LOG.debug("Unable to export", exc_info=ex)
             raise exceptions.ExportFailedError(
-                    resource_id=resource_id,
-                    property_name=self.PROPERTY_NAME,
-                    property_value=property_value,
-                    ex=ex)
+                resource_id=resource_id,
+                property_name=self.PROPERTY_NAME,
+                property_value=property_value,
+                ex=ex,
+            )
         finally:
             if temp_dir:
                 shutil.rmtree(temp_dir)
@@ -272,10 +283,16 @@ class Resource(object):
         Default export action is to upload artifacts and set the property to
         S3 URL of the uploaded object
         """
-        uploaded_url = upload_local_artifacts(resource_id, resource_dict,
-                                   self.PROPERTY_NAME,
-                                   parent_dir, self.uploader)
-        set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, uploaded_url)
+        uploaded_url = upload_local_artifacts(
+            resource_id,
+            resource_dict,
+            self.PROPERTY_NAME,
+            parent_dir,
+            self.uploader,
+        )
+        set_value_from_jmespath(
+            resource_dict, self.PROPERTY_NAME, uploaded_url
+        )
 
 
 class ResourceWithS3UrlDict(Resource):
@@ -297,16 +314,20 @@ class ResourceWithS3UrlDict(Resource):
         of the uploaded object
         """
 
-        artifact_s3_url = \
-            upload_local_artifacts(resource_id, resource_dict,
-                                   self.PROPERTY_NAME,
-                                   parent_dir, self.uploader)
+        artifact_s3_url = upload_local_artifacts(
+            resource_id,
+            resource_dict,
+            self.PROPERTY_NAME,
+            parent_dir,
+            self.uploader,
+        )
 
         parsed_url = parse_s3_url(
-                artifact_s3_url,
-                bucket_name_property=self.BUCKET_NAME_PROPERTY,
-                object_key_property=self.OBJECT_KEY_PROPERTY,
-                version_property=self.VERSION_PROPERTY)
+            artifact_s3_url,
+            bucket_name_property=self.BUCKET_NAME_PROPERTY,
+            object_key_property=self.OBJECT_KEY_PROPERTY,
+            version_property=self.VERSION_PROPERTY,
+        )
         set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, parsed_url)
 
 
@@ -440,6 +461,7 @@ class CloudFormationStackResource(Resour
     Represents CloudFormation::Stack resource that can refer to a nested
     stack template via TemplateURL property.
     """
+
     RESOURCE_TYPE = "AWS::CloudFormation::Stack"
     PROPERTY_NAME = "TemplateURL"
 
@@ -455,21 +477,26 @@ class CloudFormationStackResource(Resour
 
         template_path = resource_dict.get(self.PROPERTY_NAME, None)
 
-        if template_path is None or is_s3_url(template_path) or \
-                template_path.startswith("http://") or \
-                template_path.startswith("https://"):
+        if (
+            template_path is None
+            or is_s3_url(template_path)
+            or template_path.startswith("http://")
+            or template_path.startswith("https://")
+        ):
             # Nothing to do
             return
 
         abs_template_path = make_abs_path(parent_dir, template_path)
         if not is_local_file(abs_template_path):
             raise exceptions.InvalidTemplateUrlParameterError(
-                    property_name=self.PROPERTY_NAME,
-                    resource_id=resource_id,
-                    template_path=abs_template_path)
-
-        exported_template_dict = \
-            Template(template_path, parent_dir, self.uploader).export()
+                property_name=self.PROPERTY_NAME,
+                resource_id=resource_id,
+                template_path=abs_template_path,
+            )
+
+        exported_template_dict = Template(
+            template_path, parent_dir, self.uploader
+        ).export()
 
         exported_template_str = yaml_dump(exported_template_dict)
 
@@ -478,13 +505,17 @@ class CloudFormationStackResource(Resour
             temporary_file.flush()
 
             url = self.uploader.upload_with_dedup(
-                    temporary_file.name, "template")
+                temporary_file.name, "template"
+            )
 
             # TemplateUrl property requires S3 URL to be in path-style format
             parts = parse_s3_url(url, version_property="Version")
             s3_path_url = self.uploader.to_path_style_s3_url(
-                    parts["Key"], parts.get("Version", None))
-            set_value_from_jmespath(resource_dict, self.PROPERTY_NAME, s3_path_url)
+                parts["Key"], parts.get("Version", None)
+            )
+            set_value_from_jmespath(
+                resource_dict, self.PROPERTY_NAME, s3_path_url
+            )
 
 
 class ServerlessApplicationResource(CloudFormationStackResource):
@@ -492,15 +523,16 @@ class ServerlessApplicationResource(Clou
     Represents Serverless::Application resource that can refer to a nested
     app template via Location property.
     """
+
     RESOURCE_TYPE = "AWS::Serverless::Application"
     PROPERTY_NAME = "Location"
 
 
-
 class GlueJobCommandScriptLocationResource(Resource):
     """
     Represents Glue::Job resource.
     """
+
     RESOURCE_TYPE = "AWS::Glue::Job"
     # Note the PROPERTY_NAME includes a '.' implying it's nested.
     PROPERTY_NAME = "Command.ScriptLocation"
@@ -510,6 +542,7 @@ class CodeCommitRepositoryS3Resource(Res
     """
     Represents CodeCommit::Repository resource.
     """
+
     RESOURCE_TYPE = "AWS::CodeCommit::Repository"
     PROPERTY_NAME = "Code.S3"
     BUCKET_NAME_PROPERTY = "Bucket"
@@ -538,12 +571,12 @@ RESOURCES_EXPORT_LIST = [
     GlueJobCommandScriptLocationResource,
     StepFunctionsStateMachineDefinitionResource,
     ServerlessStateMachineDefinitionResource,
-    CodeCommitRepositoryS3Resource
+    CodeCommitRepositoryS3Resource,
 ]
 
 METADATA_EXPORT_LIST = [
     ServerlessRepoApplicationReadme,
-    ServerlessRepoApplicationLicense
+    ServerlessRepoApplicationLicense,
 ]
 
 
@@ -551,47 +584,58 @@ def include_transform_export_handler(tem
     if template_dict.get("Name", None) != "AWS::Include":
         return template_dict
 
-    include_location = template_dict.get("Parameters", {}).get("Location", None)
-    if not include_location \
-            or not is_path_value_valid(include_location) \
-            or is_s3_url(include_location):
+    include_location = template_dict.get("Parameters", {}).get(
+        "Location", None
+    )
+    if (
+        not include_location
+        or not is_path_value_valid(include_location)
+        or is_s3_url(include_location)
+    ):
         # `include_location` is either empty, or not a string, or an S3 URI
         return template_dict
 
     # We are confident at this point that `include_location` is a string containing the local path
     abs_include_location = os.path.join(parent_dir, include_location)
     if is_local_file(abs_include_location):
-        template_dict["Parameters"]["Location"] = uploader.upload_with_dedup(abs_include_location)
+        template_dict["Parameters"]["Location"] = uploader.upload_with_dedup(
+            abs_include_location
+        )
     else:
         raise exceptions.InvalidLocalPathError(
             resource_id="AWS::Include",
             property_name="Location",
-            local_path=abs_include_location)
+            local_path=abs_include_location,
+        )
 
     return template_dict
 
 
-GLOBAL_EXPORT_DICT = {
-    "Fn::Transform": include_transform_export_handler
-}
+GLOBAL_EXPORT_DICT = {"Fn::Transform": include_transform_export_handler}
 
 
-class Template(object):
+class Template:
     """
     Class to export a CloudFormation template
     """
 
-    def __init__(self, template_path, parent_dir, uploader,
-                 resources_to_export=RESOURCES_EXPORT_LIST,
-                 metadata_to_export=METADATA_EXPORT_LIST):
+    def __init__(
+        self,
+        template_path,
+        parent_dir,
+        uploader,
+        resources_to_export=RESOURCES_EXPORT_LIST,
+        metadata_to_export=METADATA_EXPORT_LIST,
+    ):
         """
         Reads the template and makes it ready for export
         """
 
         if not (is_local_folder(parent_dir) and os.path.isabs(parent_dir)):
-            raise ValueError("parent_dir parameter must be "
-                             "an absolute path to a folder {0}"
-                             .format(parent_dir))
+            raise ValueError(
+                "parent_dir parameter must be "
+                f"an absolute path to a folder {parent_dir}"
+            )
 
         abs_template_path = make_abs_path(parent_dir, template_path)
         template_dir = os.path.dirname(abs_template_path)
@@ -614,7 +658,9 @@ class Template(object):
         """
         for key, val in template_dict.items():
             if key in GLOBAL_EXPORT_DICT:
-                template_dict[key] = GLOBAL_EXPORT_DICT[key](val, self.uploader, self.template_dir)
+                template_dict[key] = GLOBAL_EXPORT_DICT[key](
+                    val, self.uploader, self.template_dir
+                )
             elif isinstance(val, dict):
                 self.export_global_artifacts(val)
             elif isinstance(val, list):
@@ -640,7 +686,9 @@ class Template(object):
                     continue
 
                 exporter = exporter_class(self.uploader)
-                exporter.export(metadata_type, metadata_dict, self.template_dir)
+                exporter.export(
+                    metadata_type, metadata_dict, self.template_dir
+                )
 
         return template_dict
 
@@ -665,10 +713,11 @@ class Template(object):
 
     def export_resources(self, resource_dict):
         for resource_id, resource in resource_dict.items():
-
             if resource_id.startswith("Fn::ForEach::"):
                 if not isinstance(resource, list) or len(resource) != 3:
-                    raise exceptions.InvalidForEachIntrinsicFunctionError(resource_id=resource_id)
+                    raise exceptions.InvalidForEachIntrinsicFunctionError(
+                        resource_id=resource_id
+                    )
                 self.export_resources(resource[2])
                 continue
 
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/deploy.py 2.31.35-1/awscli/customizations/cloudformation/deploy.py
--- 2.23.6-1/awscli/customizations/cloudformation/deploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/deploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,21 +13,19 @@
 
 import functools
 import json
+import logging
 import os
 import sys
-import logging
 
 from botocore.client import Config
 
-from awscli.compat import compat_open
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.compat import compat_open, get_stdout_text_writer
 from awscli.customizations.cloudformation import exceptions
 from awscli.customizations.cloudformation.deployer import Deployer
-from awscli.customizations.s3uploader import S3Uploader
 from awscli.customizations.cloudformation.yamlhelper import yaml_parse
-
 from awscli.customizations.commands import BasicCommand
-from awscli.compat import get_stdout_text_writer
+from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.s3uploader import S3Uploader
 from awscli.utils import write_exception
 
 LOG = logging.getLogger(__name__)
@@ -61,8 +59,10 @@ class CodePipelineLikeParameterOverrideP
 class CloudFormationLikeParameterOverrideParser(BaseParameterOverrideParser):
     def can_parse(self, data):
         for param_pair in data:
-            if ('ParameterKey' not in param_pair or
-                    'ParameterValue' not in param_pair):
+            if (
+                'ParameterKey' not in param_pair
+                or 'ParameterValue' not in param_pair
+            ):
                 return False
             if len(param_pair.keys()) > 2:
                 return False
@@ -76,8 +76,7 @@ class CloudFormationLikeParameterOverrid
         #   "ParameterValue": "string",
         # }]
         return {
-            param['ParameterKey']: param['ParameterValue']
-            for param in data
+            param['ParameterKey']: param['ParameterValue'] for param in data
         }
 
 
@@ -98,14 +97,14 @@ class StringEqualsParameterOverrideParse
 
 
 class DeployCommand(BasicCommand):
-
-    MSG_NO_EXECUTE_CHANGESET = \
-        ("Changeset created successfully. Run the following command to "
-         "review changes:"
-         "\n"
-         "aws cloudformation describe-change-set --change-set-name "
-         "{changeset_id}"
-         "\n")
+    MSG_NO_EXECUTE_CHANGESET = (
+        "Changeset created successfully. Run the following command to "
+        "review changes:"
+        "\n"
+        "aws cloudformation describe-change-set --change-set-name "
+        "{changeset_id}"
+        "\n"
+    )
 
     MSG_EXECUTE_SUCCESS = "Successfully created/updated stack - {stack_name}\n"
 
@@ -113,8 +112,9 @@ class DeployCommand(BasicCommand):
     TAGS_CMD = "tags"
 
     NAME = 'deploy'
-    DESCRIPTION = BasicCommand.FROM_FILE("cloudformation",
-                                         "_deploy_description.rst")
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        "cloudformation", "_deploy_description.rst"
+    )
 
     ARG_TABLE = [
         {
@@ -123,7 +123,7 @@ class DeployCommand(BasicCommand):
             'help_text': (
                 'The path where your AWS CloudFormation'
                 ' template is located.'
-            )
+            ),
         },
         {
             'name': 'stack-name',
@@ -133,7 +133,7 @@ class DeployCommand(BasicCommand):
                 'The name of the AWS CloudFormation stack you\'re deploying to.'
                 ' If you specify an existing stack, the command updates the'
                 ' stack. If you specify a new stack, the command creates it.'
-            )
+            ),
         },
         {
             'name': 's3-bucket',
@@ -142,7 +142,7 @@ class DeployCommand(BasicCommand):
                 'The name of the S3 bucket where this command uploads your '
                 'CloudFormation template. This is required the deployments of '
                 'templates sized greater than 51,200 bytes'
-            )
+            ),
         },
         {
             "name": "force-upload",
@@ -151,7 +151,7 @@ class DeployCommand(BasicCommand):
                 'Indicates whether to override existing files in the S3 bucket.'
                 ' Specify this flag to upload artifacts even if they '
                 ' match existing artifacts in the S3 bucket.'
-            )
+            ),
         },
         {
             'name': 's3-prefix',
@@ -160,15 +160,14 @@ class DeployCommand(BasicCommand):
                 ' artifacts\' name when it uploads them to the S3 bucket.'
                 ' The prefix name is a path name (folder name) for'
                 ' the S3 bucket.'
-            )
+            ),
         },
-
         {
             'name': 'kms-key-id',
             'help_text': (
                 'The ID of an AWS KMS key that the command uses'
                 ' to encrypt artifacts that are at rest in the S3 bucket.'
-            )
+            ),
         },
         {
             'name': PARAMETER_OVERRIDE_CMD,
@@ -184,7 +183,7 @@ class DeployCommand(BasicCommand):
                 ' parameters that don\'t have a default value.'
                 ' Syntax: ParameterKey1=ParameterValue1'
                 ' ParameterKey2=ParameterValue2 ... or JSON file (see Examples)'
-            )
+            ),
         },
         {
             'name': 'capabilities',
@@ -194,11 +193,8 @@ class DeployCommand(BasicCommand):
                 'type': 'array',
                 'items': {
                     'type': 'string',
-                    'enum': [
-                        'CAPABILITY_IAM',
-                        'CAPABILITY_NAMED_IAM'
-                    ]
-                }
+                    'enum': ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
+                },
             },
             'default': [],
             'help_text': (
@@ -215,8 +211,7 @@ class DeployCommand(BasicCommand):
                 ' custom names, you must specify CAPABILITY_NAMED_IAM. If you'
                 ' don\'t specify this parameter, this action returns an'
                 ' InsufficientCapabilities error.'
-            )
-
+            ),
         },
         {
             'name': 'no-execute-changeset',
@@ -230,7 +225,7 @@ class DeployCommand(BasicCommand):
                 ' AWS CloudFormation change set and then exits without'
                 ' executing the change set. After you view the change set,'
                 ' execute it to implement your changes.'
-            )
+            ),
         },
         {
             'name': 'disable-rollback',
@@ -242,7 +237,7 @@ class DeployCommand(BasicCommand):
             'help_text': (
                 'Preserve the state of previously provisioned resources when '
                 'the execute-change-set operation fails.'
-            )
+            ),
         },
         {
             'name': 'no-disable-rollback',
@@ -254,7 +249,7 @@ class DeployCommand(BasicCommand):
             'help_text': (
                 'Roll back all resource changes when the execute-change-set '
                 'operation fails.'
-            )
+            ),
         },
         {
             'name': 'role-arn',
@@ -263,21 +258,16 @@ class DeployCommand(BasicCommand):
                 'The Amazon Resource Name (ARN) of an AWS Identity and Access '
                 'Management (IAM) role that AWS CloudFormation assumes when '
                 'executing the change set.'
-            )
+            ),
         },
         {
             'name': 'notification-arns',
             'required': False,
-            'schema': {
-                'type': 'array',
-                'items': {
-                    'type': 'string'
-                }
-            },
+            'schema': {'type': 'array', 'items': {'type': 'string'}},
             'help_text': (
                 'Amazon Simple Notification Service topic Amazon Resource Names'
                 ' (ARNs) that AWS CloudFormation associates with the stack.'
-            )
+            ),
         },
         {
             'name': 'fail-on-empty-changeset',
@@ -287,10 +277,14 @@ class DeployCommand(BasicCommand):
             'dest': 'fail_on_empty_changeset',
             'default': False,
             'help_text': (
-                'Specify if the CLI should return a non-zero exit code if '
-                'there are no changes to be made to the stack. The default '
-                'behavior is to return a zero exit code.'
-            )
+                'Specify if the CLI should return a non-zero exit code '
+                'when there are no changes to be made to the stack. By '
+                'default, a zero exit code is returned, and this is '
+                'the same behavior that occurs when '
+                '`--no-fail-on-empty-changeset` is specified. If '
+                '`--fail-on-empty-changeset` is specified, then the '
+                'CLI will return a non-zero exit code.'
+            ),
         },
         {
             'name': 'no-fail-on-empty-changeset',
@@ -302,46 +296,43 @@ class DeployCommand(BasicCommand):
             'help_text': (
                 'Causes the CLI to return an exit code of 0 if there are no '
                 'changes to be made to the stack.'
-            )
+            ),
         },
         {
             'name': TAGS_CMD,
             'action': 'store',
             'required': False,
-            'schema': {
-                'type': 'array',
-                'items': {
-                    'type': 'string'
-                }
-            },
+            'schema': {'type': 'array', 'items': {'type': 'string'}},
             'default': [],
             'help_text': (
                 'A list of tags to associate with the stack that is created'
                 ' or updated. AWS CloudFormation also propagates these tags'
                 ' to resources in the stack if the resource supports it.'
                 ' Syntax: TagKey1=TagValue1 TagKey2=TagValue2 ...'
-            )
-        }
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
-        cloudformation_client = \
-            self._session.create_client(
-                    'cloudformation', region_name=parsed_globals.region,
-                    endpoint_url=parsed_globals.endpoint_url,
-                    verify=parsed_globals.verify_ssl)
+        cloudformation_client = self._session.create_client(
+            'cloudformation',
+            region_name=parsed_globals.region,
+            endpoint_url=parsed_globals.endpoint_url,
+            verify=parsed_globals.verify_ssl,
+        )
 
         template_dict, template_str, template_size = self.load_template_file(
-            parsed_args.template_file)
+            parsed_args.template_file
+        )
 
         stack_name = parsed_args.stack_name
         parameter_overrides = self.parse_parameter_overrides(
             parsed_args.parameter_overrides
         )
         tags_dict = self.parse_key_value_arg(parsed_args.tags, self.TAGS_CMD)
-        tags = [{"Key": key, "Value": value}
-                for key, value in tags_dict.items()]
-
+        tags = [
+            {"Key": key, "Value": value} for key, value in tags_dict.items()
+        ]
 
         parameters = self.merge_parameters(template_dict, parameter_overrides)
 
@@ -354,39 +345,62 @@ class DeployCommand(BasicCommand):
                 "s3",
                 config=Config(signature_version='s3v4'),
                 region_name=parsed_globals.region,
-                verify=parsed_globals.verify_ssl)
+                verify=parsed_globals.verify_ssl,
+            )
 
-            s3_uploader = S3Uploader(s3_client,
-                                      bucket,
-                                      parsed_args.s3_prefix,
-                                      parsed_args.kms_key_id,
-                                      parsed_args.force_upload)
+            s3_uploader = S3Uploader(
+                s3_client,
+                bucket,
+                parsed_args.s3_prefix,
+                parsed_args.kms_key_id,
+                parsed_args.force_upload,
+            )
         else:
             s3_uploader = None
 
         deployer = Deployer(cloudformation_client)
-        return self.deploy(deployer, stack_name, template_str,
-                           parameters, parsed_args.capabilities,
-                           parsed_args.execute_changeset, parsed_args.role_arn,
-                           parsed_args.notification_arns, s3_uploader,
-                           tags, parsed_args.fail_on_empty_changeset,
-                           parsed_args.disable_rollback)
+        return self.deploy(
+            deployer,
+            stack_name,
+            template_str,
+            parameters,
+            parsed_args.capabilities,
+            parsed_args.execute_changeset,
+            parsed_args.role_arn,
+            parsed_args.notification_arns,
+            s3_uploader,
+            tags,
+            parsed_args.fail_on_empty_changeset,
+            parsed_args.disable_rollback,
+        )
 
     def load_template_file(self, template_file):
         template_path = os.path.expanduser(template_file)
         if not os.path.isfile(template_path):
             raise exceptions.InvalidTemplatePathError(
-                    template_path=template_path)
+                template_path=template_path
+            )
         with compat_open(template_path, "r") as handle:
             template_str = handle.read()
         template_dict = yaml_parse(template_str)
         template_size = os.path.getsize(template_path)
         return template_dict, template_str, template_size
 
-    def deploy(self, deployer, stack_name, template_str,
-               parameters, capabilities, execute_changeset, role_arn,
-               notification_arns, s3_uploader, tags,
-               fail_on_empty_changeset=False, disable_rollback=False):
+    def deploy(
+        self,
+        deployer,
+        stack_name,
+        template_str,
+        parameters,
+        capabilities,
+        execute_changeset,
+        role_arn,
+        notification_arns,
+        s3_uploader,
+        tags,
+        fail_on_empty_changeset=False,
+        disable_rollback=False,
+    ):
         try:
             result = deployer.create_and_wait_for_changeset(
                 stack_name=stack_name,
@@ -396,7 +410,7 @@ class DeployCommand(BasicCommand):
                 role_arn=role_arn,
                 notification_arns=notification_arns,
                 s3_uploader=s3_uploader,
-                tags=tags
+                tags=tags,
             )
         except exceptions.ChangeEmptyError as ex:
             if fail_on_empty_changeset:
@@ -405,14 +419,19 @@ class DeployCommand(BasicCommand):
             return 0
 
         if execute_changeset:
-            deployer.execute_changeset(result.changeset_id, stack_name,
-                                       disable_rollback)
+            deployer.execute_changeset(
+                result.changeset_id, stack_name, disable_rollback
+            )
             deployer.wait_for_execute(stack_name, result.changeset_type)
-            sys.stdout.write(self.MSG_EXECUTE_SUCCESS.format(
-                    stack_name=stack_name))
+            sys.stdout.write(
+                self.MSG_EXECUTE_SUCCESS.format(stack_name=stack_name)
+            )
         else:
-            sys.stdout.write(self.MSG_NO_EXECUTE_CHANGESET.format(
-                    changeset_id=result.changeset_id))
+            sys.stdout.write(
+                self.MSG_NO_EXECUTE_CHANGESET.format(
+                    changeset_id=result.changeset_id
+                )
+            )
 
         sys.stdout.flush()
         return 0
@@ -434,10 +453,7 @@ class DeployCommand(BasicCommand):
             return parameter_values
 
         for key, value in template_dict["Parameters"].items():
-
-            obj = {
-                "ParameterKey": key
-            }
+            obj = {"ParameterKey": key}
 
             if key in parameter_overrides:
                 obj["ParameterValue"] = parameter_overrides[key]
@@ -466,7 +482,7 @@ class DeployCommand(BasicCommand):
             parsers = [
                 CloudFormationLikeParameterOverrideParser(),
                 CodePipelineLikeParameterOverrideParser(),
-                StringEqualsParameterOverrideParser()
+                StringEqualsParameterOverrideParser(),
             ]
             for parser in parsers:
                 if parser.can_parse(data):
@@ -475,13 +491,13 @@ class DeployCommand(BasicCommand):
                 'JSON passed to --parameter-overrides must be one of '
                 'the formats: ["Key1=Value1","Key2=Value2", ...] , '
                 '[{"ParameterKey": "Key1", "ParameterValue": "Value1"}, ...] , '
-                '["Parameters": {"Key1": "Value1", "Key2": "Value2", ...}]')
+                '["Parameters": {"Key1": "Value1", "Key2": "Value2", ...}]'
+            )
         else:
             # In case it was in deploy command format
             # and was input via command line
             return self.parse_key_value_arg(
-                arg_value,
-                self.PARAMETER_OVERRIDE_CMD
+                arg_value, self.PARAMETER_OVERRIDE_CMD
             )
 
     def parse_key_value_arg(self, arg_value, argname):
@@ -496,14 +512,13 @@ class DeployCommand(BasicCommand):
         """
         result = {}
         for data in arg_value:
-
             # Split at first '=' from left
             key_value_pair = data.split("=", 1)
 
             if len(key_value_pair) != 2:
                 raise exceptions.InvalidKeyValuePairArgumentError(
-                        argname=argname,
-                        value=key_value_pair)
+                    argname=argname, value=key_value_pair
+                )
 
             result[key_value_pair[0]] = key_value_pair[1]
 
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/deployer.py 2.31.35-1/awscli/customizations/cloudformation/deployer.py
--- 2.23.6-1/awscli/customizations/cloudformation/deployer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/deployer.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,27 +11,33 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import collections
+import logging
 import sys
 import time
-import logging
+from datetime import datetime
+
 import botocore
-import collections
 
 from awscli.customizations.cloudformation import exceptions
-from awscli.customizations.cloudformation.artifact_exporter import mktempfile, parse_s3_url
-
-from datetime import datetime
+from awscli.customizations.cloudformation.artifact_exporter import (
+    mktempfile,
+    parse_s3_url,
+)
 
 LOG = logging.getLogger(__name__)
 
 ChangeSetResult = collections.namedtuple(
-                "ChangeSetResult", ["changeset_id", "changeset_type"])
+    "ChangeSetResult", ["changeset_id", "changeset_type"]
+)
 
 
-class Deployer(object):
-
-    def __init__(self, cloudformation_client,
-                 changeset_prefix="awscli-cloudformation-package-deploy-"):
+class Deployer:
+    def __init__(
+        self,
+        cloudformation_client,
+        changeset_prefix="awscli-cloudformation-package-deploy-",
+    ):
         self._client = cloudformation_client
         self.changeset_prefix = changeset_prefix
 
@@ -62,18 +68,25 @@ class Deployer(object):
             # the exception msg to understand the nature of this exception.
             msg = str(e)
 
-            if "Stack with id {0} does not exist".format(stack_name) in msg:
-                LOG.debug("Stack with id {0} does not exist".format(
-                    stack_name))
+            if f"Stack with id {stack_name} does not exist" in msg:
+                LOG.debug(f"Stack with id {stack_name} does not exist")
                 return False
             else:
                 # We don't know anything about this exception. Don't handle
                 LOG.debug("Unable to get stack details.", exc_info=e)
                 raise e
 
-    def create_changeset(self, stack_name, cfn_template,
-                         parameter_values, capabilities, role_arn,
-                         notification_arns, s3_uploader, tags):
+    def create_changeset(
+        self,
+        stack_name,
+        cfn_template,
+        parameter_values,
+        capabilities,
+        role_arn,
+        notification_arns,
+        s3_uploader,
+        tags,
+    ):
         """
         Call Cloudformation to create a changeset and wait for it to complete
 
@@ -86,7 +99,7 @@ class Deployer(object):
         """
 
         now = datetime.utcnow().isoformat()
-        description = "Created by AWS CLI at {0} UTC".format(now)
+        description = f"Created by AWS CLI at {now} UTC"
 
         # Each changeset will get a unique name based on time
         changeset_name = self.changeset_prefix + str(int(time.time()))
@@ -96,17 +109,27 @@ class Deployer(object):
             # When creating a new stack, UsePreviousValue=True is invalid.
             # For such parameters, users should either override with new value,
             # or set a Default value in template to successfully create a stack.
-            parameter_values = [x for x in parameter_values
-                                if not x.get("UsePreviousValue", False)]
+            parameter_values = [
+                x
+                for x in parameter_values
+                if not x.get("UsePreviousValue", False)
+            ]
         else:
             changeset_type = "UPDATE"
             # UsePreviousValue not valid if parameter is new
             summary = self._client.get_template_summary(StackName=stack_name)
-            existing_parameters = [parameter['ParameterKey'] for parameter in \
-                                   summary['Parameters']]
-            parameter_values = [x for x in parameter_values
-                                if not (x.get("UsePreviousValue", False) and \
-                                x["ParameterKey"] not in existing_parameters)]
+            existing_parameters = [
+                parameter['ParameterKey']
+                for parameter in summary['Parameters']
+            ]
+            parameter_values = [
+                x
+                for x in parameter_values
+                if not (
+                    x.get("UsePreviousValue", False)
+                    and x["ParameterKey"] not in existing_parameters
+                )
+            ]
 
         kwargs = {
             'ChangeSetName': changeset_name,
@@ -126,10 +149,13 @@ class Deployer(object):
                 temporary_file.write(kwargs.pop('TemplateBody'))
                 temporary_file.flush()
                 url = s3_uploader.upload_with_dedup(
-                        temporary_file.name, "template")
+                    temporary_file.name, "template"
+                )
                 # TemplateUrl property requires S3 URL to be in path-style format
                 parts = parse_s3_url(url, version_property="Version")
-                kwargs['TemplateURL'] = s3_uploader.to_path_style_s3_url(parts["Key"], parts.get("Version", None))
+                kwargs['TemplateURL'] = s3_uploader.to_path_style_s3_url(
+                    parts["Key"], parts.get("Version", None)
+                )
 
         # don't set these arguments if not specified to use existing values
         if role_arn is not None:
@@ -159,8 +185,11 @@ class Deployer(object):
         # Poll every 5 seconds. Changeset creation should be fast
         waiter_config = {'Delay': 5}
         try:
-            waiter.wait(ChangeSetName=changeset_id, StackName=stack_name,
-                        WaiterConfig=waiter_config)
+            waiter.wait(
+                ChangeSetName=changeset_id,
+                StackName=stack_name,
+                WaiterConfig=waiter_config,
+            )
         except botocore.exceptions.WaiterError as ex:
             LOG.debug("Create changeset waiter exception", exc_info=ex)
 
@@ -168,17 +197,22 @@ class Deployer(object):
             status = resp["Status"]
             reason = resp["StatusReason"]
 
-            if status == "FAILED" and \
-               "The submitted information didn't contain changes." in reason or \
-                            "No updates are to be performed" in reason:
-                    raise exceptions.ChangeEmptyError(stack_name=stack_name)
-
-            raise RuntimeError("Failed to create the changeset: {0} "
-                               "Status: {1}. Reason: {2}"
-                               .format(ex, status, reason))
-
-    def execute_changeset(self, changeset_id, stack_name,
-                          disable_rollback=False):
+            if (
+                status == "FAILED"
+                and "The submitted information didn't contain changes."
+                in reason
+                or "No updates are to be performed" in reason
+            ):
+                raise exceptions.ChangeEmptyError(stack_name=stack_name)
+
+            raise RuntimeError(
+                f"Failed to create the changeset: {ex} "
+                f"Status: {status}. Reason: {reason}"
+            )
+
+    def execute_changeset(
+        self, changeset_id, stack_name, disable_rollback=False
+    ):
         """
         Calls CloudFormation to execute changeset
 
@@ -188,12 +222,12 @@ class Deployer(object):
         :return: Response from execute-change-set call
         """
         return self._client.execute_change_set(
-                ChangeSetName=changeset_id,
-                StackName=stack_name,
-                DisableRollback=disable_rollback)
+            ChangeSetName=changeset_id,
+            StackName=stack_name,
+            DisableRollback=disable_rollback,
+        )
 
     def wait_for_execute(self, stack_name, changeset_type):
-
         sys.stdout.write("Waiting for stack create/update to complete\n")
         sys.stdout.flush()
 
@@ -203,8 +237,7 @@ class Deployer(object):
         elif changeset_type == "UPDATE":
             waiter = self._client.get_waiter("stack_update_complete")
         else:
-            raise RuntimeError("Invalid changeset type {0}"
-                               .format(changeset_type))
+            raise RuntimeError(f"Invalid changeset type {changeset_type}")
 
         # Poll every 30 seconds. Polling too frequently risks hitting rate limits
         # on CloudFormation's DescribeStacks API
@@ -220,13 +253,27 @@ class Deployer(object):
 
             raise exceptions.DeployFailedError(stack_name=stack_name)
 
-    def create_and_wait_for_changeset(self, stack_name, cfn_template,
-                                      parameter_values, capabilities, role_arn,
-                                      notification_arns, s3_uploader, tags):
-
+    def create_and_wait_for_changeset(
+        self,
+        stack_name,
+        cfn_template,
+        parameter_values,
+        capabilities,
+        role_arn,
+        notification_arns,
+        s3_uploader,
+        tags,
+    ):
         result = self.create_changeset(
-                stack_name, cfn_template, parameter_values, capabilities,
-                role_arn, notification_arns, s3_uploader, tags)
+            stack_name,
+            cfn_template,
+            parameter_values,
+            capabilities,
+            role_arn,
+            notification_arns,
+            s3_uploader,
+            tags,
+        )
         self.wait_for_changeset(result.changeset_id, stack_name)
 
         return result
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/exceptions.py 2.31.35-1/awscli/customizations/cloudformation/exceptions.py
--- 2.23.6-1/awscli/customizations/cloudformation/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,3 @@
-
 class CloudFormationCommandError(Exception):
     fmt = 'An unspecified error occurred'
 
@@ -17,42 +16,50 @@ class ChangeEmptyError(CloudFormationCom
 
 
 class InvalidLocalPathError(CloudFormationCommandError):
-    fmt = ("Parameter {property_name} of resource {resource_id} refers "
-           "to a file or folder that does not exist {local_path}")
+    fmt = (
+        "Parameter {property_name} of resource {resource_id} refers "
+        "to a file or folder that does not exist {local_path}"
+    )
 
 
 class InvalidTemplateUrlParameterError(CloudFormationCommandError):
-    fmt = ("{property_name} parameter of {resource_id} resource is invalid. "
-           "It must be a S3 URL or path to CloudFormation "
-           "template file. Actual: {template_path}")
+    fmt = (
+        "{property_name} parameter of {resource_id} resource is invalid. "
+        "It must be a S3 URL or path to CloudFormation "
+        "template file. Actual: {template_path}"
+    )
 
 
 class ExportFailedError(CloudFormationCommandError):
-    fmt = ("Unable to upload artifact {property_value} referenced "
-           "by {property_name} parameter of {resource_id} resource."
-           "\n"
-           "{ex}")
+    fmt = (
+        "Unable to upload artifact {property_value} referenced "
+        "by {property_name} parameter of {resource_id} resource."
+        "\n"
+        "{ex}"
+    )
 
 
 class InvalidKeyValuePairArgumentError(CloudFormationCommandError):
-    fmt = ("{value} value passed to --{argname} must be of format "
-           "Key=Value")
+    fmt = "{value} value passed to --{argname} must be of format " "Key=Value"
 
 
 class DeployFailedError(CloudFormationCommandError):
-    fmt = \
-        ("Failed to create/update the stack. Run the following command"
-         "\n"
-         "to fetch the list of events leading up to the failure"
-         "\n"
-         "aws cloudformation describe-stack-events --stack-name {stack_name}")
+    fmt = (
+        "Failed to create/update the stack. Run the following command"
+        "\n"
+        "to fetch the list of events leading up to the failure"
+        "\n"
+        "aws cloudformation describe-stack-events --stack-name {stack_name}"
+    )
+
 
 class DeployBucketRequiredError(CloudFormationCommandError):
-    fmt = \
-        ("Templates with a size greater than 51,200 bytes must be deployed "
-         "via an S3 Bucket. Please add the --s3-bucket parameter to your "
-         "command. The local template will be copied to that S3 bucket and "
-         "then deployed.")
+    fmt = (
+        "Templates with a size greater than 51,200 bytes must be deployed "
+        "via an S3 Bucket. Please add the --s3-bucket parameter to your "
+        "command. The local template will be copied to that S3 bucket and "
+        "then deployed."
+    )
 
 
 class InvalidForEachIntrinsicFunctionError(CloudFormationCommandError):
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/package.py 2.31.35-1/awscli/customizations/cloudformation/package.py
--- 2.23.6-1/awscli/customizations/cloudformation/package.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/package.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,16 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import os
+import json
 import logging
+import os
 import sys
 
-import json
-
 from botocore.client import Config
 
+from awscli.customizations.cloudformation import exceptions
 from awscli.customizations.cloudformation.artifact_exporter import Template
 from awscli.customizations.cloudformation.yamlhelper import yaml_dump
-from awscli.customizations.cloudformation import exceptions
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.s3uploader import S3Uploader
 
@@ -29,7 +28,6 @@ LOG = logging.getLogger(__name__)
 
 
 class PackageCommand(BasicCommand):
-
     MSG_PACKAGED_TEMPLATE_WRITTEN = (
         "Successfully packaged artifacts and wrote output template "
         "to file {output_file_name}."
@@ -38,12 +36,14 @@ class PackageCommand(BasicCommand):
         "\n"
         "aws cloudformation deploy --template-file {output_file_path} "
         "--stack-name <YOUR STACK NAME>"
-        "\n")
+        "\n"
+    )
 
     NAME = "package"
 
-    DESCRIPTION = BasicCommand.FROM_FILE("cloudformation",
-                                         "_package_description.rst")
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        "cloudformation", "_package_description.rst"
+    )
 
     ARG_TABLE = [
         {
@@ -52,18 +52,16 @@ class PackageCommand(BasicCommand):
             'help_text': (
                 'The path where your AWS CloudFormation'
                 ' template is located.'
-            )
+            ),
         },
-
         {
             'name': 's3-bucket',
             'required': True,
             'help_text': (
                 'The name of the S3 bucket where this command uploads'
                 ' the artifacts that are referenced in your template.'
-            )
+            ),
         },
-
         {
             'name': 's3-prefix',
             'help_text': (
@@ -71,17 +69,15 @@ class PackageCommand(BasicCommand):
                 ' artifacts\' name when it uploads them to the S3 bucket.'
                 ' The prefix name is a path name (folder name) for'
                 ' the S3 bucket.'
-            )
+            ),
         },
-
         {
             'name': 'kms-key-id',
             'help_text': (
                 'The ID of an AWS KMS key that the command uses'
                 ' to encrypt artifacts that are at rest in the S3 bucket.'
-            )
+            ),
         },
-
         {
             "name": "output-template-file",
             "help_text": (
@@ -89,18 +85,16 @@ class PackageCommand(BasicCommand):
                 " output AWS CloudFormation template. If you don't specify"
                 " a path, the command writes the template to the standard"
                 " output."
-            )
+            ),
         },
-
         {
             "name": "use-json",
             "action": "store_true",
             "help_text": (
                 "Indicates whether to use JSON as the format for the output AWS"
                 " CloudFormation template. YAML is used by default."
-            )
+            ),
         },
-
         {
             "name": "force-upload",
             "action": "store_true",
@@ -108,7 +102,7 @@ class PackageCommand(BasicCommand):
                 'Indicates whether to override existing files in the S3 bucket.'
                 ' Specify this flag to upload artifacts even if they '
                 ' match existing artifacts in the S3 bucket.'
-            )
+            ),
         },
         {
             "name": "metadata",
@@ -116,11 +110,11 @@ class PackageCommand(BasicCommand):
             "schema": {
                 "type": "map",
                 "key": {"type": "string"},
-                "value": {"type": "string"}
+                "value": {"type": "string"},
             },
             "help_text": "A map of metadata to attach to *ALL* the artifacts that"
-            " are referenced in your template."
-        }
+            " are referenced in your template.",
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -128,20 +122,24 @@ class PackageCommand(BasicCommand):
             "s3",
             config=Config(signature_version='s3v4'),
             region_name=parsed_globals.region,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
 
         template_path = parsed_args.template_file
         if not os.path.isfile(template_path):
             raise exceptions.InvalidTemplatePathError(
-                    template_path=template_path)
+                template_path=template_path
+            )
 
         bucket = parsed_args.s3_bucket
 
-        self.s3_uploader = S3Uploader(s3_client,
-                                      bucket,
-                                      parsed_args.s3_prefix,
-                                      parsed_args.kms_key_id,
-                                      parsed_args.force_upload)
+        self.s3_uploader = S3Uploader(
+            s3_client,
+            bucket,
+            parsed_args.s3_prefix,
+            parsed_args.kms_key_id,
+            parsed_args.force_upload,
+        )
         # attach the given metadata to the artifacts to be uploaded
         self.s3_uploader.artifact_metadata = parsed_args.metadata
 
@@ -154,8 +152,9 @@ class PackageCommand(BasicCommand):
 
         if output_file:
             msg = self.MSG_PACKAGED_TEMPLATE_WRITTEN.format(
-                    output_file_name=output_file,
-                    output_file_path=os.path.abspath(output_file))
+                output_file_name=output_file,
+                output_file_path=os.path.abspath(output_file),
+            )
             sys.stdout.write(msg)
 
         sys.stdout.flush()
@@ -166,7 +165,9 @@ class PackageCommand(BasicCommand):
         exported_template = template.export()
 
         if use_json:
-            exported_str = json.dumps(exported_template, indent=4, ensure_ascii=False)
+            exported_str = json.dumps(
+                exported_template, indent=4, ensure_ascii=False
+            )
         else:
             exported_str = yaml_dump(exported_template)
 
diff -pruN 2.23.6-1/awscli/customizations/cloudformation/yamlhelper.py 2.31.35-1/awscli/customizations/cloudformation/yamlhelper.py
--- 2.23.6-1/awscli/customizations/cloudformation/yamlhelper.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudformation/yamlhelper.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,8 @@
 import re
 
 import ruamel.yaml
+from botocore.compat import OrderedDict, json
 from ruamel.yaml.resolver import ScalarNode, SequenceNode
-from botocore.compat import json
-from botocore.compat import OrderedDict
 
 from awscli.utils import dump_yaml_to_str
 
@@ -73,9 +72,10 @@ def _add_yaml_1_1_boolean_resolvers(reso
         '|true|True|TRUE|false|False|FALSE'
         '|on|On|ON|off|Off|OFF)$'
     )
-    boolean_first_chars = list(u'yYnNtTfFoO')
+    boolean_first_chars = list('yYnNtTfFoO')
     resolver_cls.add_implicit_resolver(
-        'tag:yaml.org,2002:bool', boolean_regex, boolean_first_chars)
+        'tag:yaml.org,2002:bool', boolean_regex, boolean_first_chars
+    )
 
 
 def yaml_dump(dict_to_dump):
@@ -111,9 +111,11 @@ def yaml_parse(yamlstr):
         yaml = ruamel.yaml.YAML(typ="safe", pure=True)
         yaml.Constructor.add_constructor(
             ruamel.yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
-            _dict_constructor)
+            _dict_constructor,
+        )
         yaml.Constructor.add_multi_constructor(
-            "!", intrinsics_multi_constructor)
+            "!", intrinsics_multi_constructor
+        )
         _add_yaml_1_1_boolean_resolvers(yaml.Resolver)
 
         return yaml.load(yamlstr)
diff -pruN 2.23.6-1/awscli/customizations/cloudfront.py 2.31.35-1/awscli/customizations/cloudfront.py
--- 2.23.6-1/awscli/customizations/cloudfront.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudfront.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,18 +11,18 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import hashlib
+import random
 import sys
 import time
-import random
 
-from awscrt.crypto import RSA, RSASignatureAlgorithm
-
-from botocore.utils import parse_to_aware_datetime
 from botocore.signers import CloudFrontSigner
+from botocore.utils import parse_to_aware_datetime
+
+from awscrt.crypto import RSA, RSASignatureAlgorithm
 
 from awscli.arguments import CustomArgument
-from awscli.customizations.utils import validate_mutually_exclusive_handler
 from awscli.customizations.commands import BasicCommand
+from awscli.customizations.utils import validate_mutually_exclusive_handler
 
 
 def register(event_handler):
@@ -30,37 +30,52 @@ def register(event_handler):
 
     # Provides a simpler --paths for ``aws cloudfront create-invalidation``
     event_handler.register(
-        'building-argument-table.cloudfront.create-invalidation', _add_paths)
+        'building-argument-table.cloudfront.create-invalidation', _add_paths
+    )
     event_handler.register(
         'operation-args-parsed.cloudfront.create-invalidation',
-        validate_mutually_exclusive_handler(['invalidation_batch'], ['paths']))
+        validate_mutually_exclusive_handler(['invalidation_batch'], ['paths']),
+    )
 
     event_handler.register(
         'operation-args-parsed.cloudfront.create-distribution',
         validate_mutually_exclusive_handler(
             ['default_root_object', 'origin_domain_name'],
-            ['distribution_config']))
+            ['distribution_config'],
+        ),
+    )
     event_handler.register(
         'building-argument-table.cloudfront.create-distribution',
         lambda argument_table, **kwargs: argument_table.__setitem__(
-            'origin-domain-name', OriginDomainName(argument_table)))
+            'origin-domain-name', OriginDomainName(argument_table)
+        ),
+    )
     event_handler.register(
         'building-argument-table.cloudfront.create-distribution',
         lambda argument_table, **kwargs: argument_table.__setitem__(
-            'default-root-object', CreateDefaultRootObject(argument_table)))
+            'default-root-object', CreateDefaultRootObject(argument_table)
+        ),
+    )
 
     context = {}
     event_handler.register(
-        'top-level-args-parsed', context.update, unique_id='cloudfront')
+        'top-level-args-parsed', context.update, unique_id='cloudfront'
+    )
     event_handler.register(
         'operation-args-parsed.cloudfront.update-distribution',
         validate_mutually_exclusive_handler(
-            ['default_root_object'], ['distribution_config']))
+            ['default_root_object'], ['distribution_config']
+        ),
+    )
     event_handler.register(
         'building-argument-table.cloudfront.update-distribution',
         lambda argument_table, **kwargs: argument_table.__setitem__(
-            'default-root-object', UpdateDefaultRootObject(
-                context=context, argument_table=argument_table)))
+            'default-root-object',
+            UpdateDefaultRootObject(
+                context=context, argument_table=argument_table
+            ),
+        ),
+    )
 
 
 def unique_string(prefix='cli'):
@@ -73,7 +88,6 @@ def _add_paths(argument_table, **kwargs)
 
 
 class PathsArgument(CustomArgument):
-
     def __init__(self):
         doc = (
             'The space-separated paths to be invalidated.'
@@ -86,17 +100,23 @@ class PathsArgument(CustomArgument):
             parameters['InvalidationBatch'] = {
                 "CallerReference": unique_string(),
                 "Paths": {"Quantity": len(value), "Items": value},
-                }
+            }
 
 
 class ExclusiveArgument(CustomArgument):
     DOC = '%s This argument and --%s are mutually exclusive.'
 
-    def __init__(self, name, argument_table,
-                 exclusive_to='distribution-config', help_text=''):
+    def __init__(
+        self,
+        name,
+        argument_table,
+        exclusive_to='distribution-config',
+        help_text='',
+    ):
         argument_table[exclusive_to].required = False
         super(ExclusiveArgument, self).__init__(
-            name, help_text=self.DOC % (help_text, exclusive_to))
+            name, help_text=self.DOC % (help_text, exclusive_to)
+        )
 
     def distribution_config_template(self):
         return {
@@ -108,12 +128,9 @@ class ExclusiveArgument(CustomArgument):
                     "QueryString": False,
                     "Cookies": {"Forward": "none"},
                 },
-                "TrustedSigners": {
-                    "Enabled": False,
-                    "Quantity": 0
-                },
+                "TrustedSigners": {"Enabled": False, "Quantity": 0},
                 "ViewerProtocolPolicy": "allow-all",
-                "MinTTL": 0
+                "MinTTL": 0,
             },
             "Enabled": True,
             "Comment": "",
@@ -123,14 +140,17 @@ class ExclusiveArgument(CustomArgument):
 class OriginDomainName(ExclusiveArgument):
     def __init__(self, argument_table):
         super(OriginDomainName, self).__init__(
-            'origin-domain-name', argument_table,
-            help_text='The domain name for your origin.')
+            'origin-domain-name',
+            argument_table,
+            help_text='The domain name for your origin.',
+        )
 
     def add_to_params(self, parameters, value):
         if value is None:
             return
         parameters.setdefault(
-            'DistributionConfig', self.distribution_config_template())
+            'DistributionConfig', self.distribution_config_template()
+        )
         origin_id = unique_string(prefix=value)
         item = {"Id": origin_id, "DomainName": value, "OriginPath": ''}
         if item['DomainName'].endswith('.s3.amazonaws.com'):
@@ -140,36 +160,50 @@ class OriginDomainName(ExclusiveArgument
             item["S3OriginConfig"] = {"OriginAccessIdentity": ""}
         else:
             item["CustomOriginConfig"] = {
-                'HTTPPort': 80, 'HTTPSPort': 443,
-                'OriginProtocolPolicy': 'http-only'}
+                'HTTPPort': 80,
+                'HTTPSPort': 443,
+                'OriginProtocolPolicy': 'http-only',
+            }
         parameters['DistributionConfig']['Origins'] = {
-            "Quantity": 1, "Items": [item]}
+            "Quantity": 1,
+            "Items": [item],
+        }
         parameters['DistributionConfig']['DefaultCacheBehavior'][
-            'TargetOriginId'] = origin_id
+            'TargetOriginId'
+        ] = origin_id
 
 
 class CreateDefaultRootObject(ExclusiveArgument):
     def __init__(self, argument_table, help_text=''):
         super(CreateDefaultRootObject, self).__init__(
-            'default-root-object', argument_table, help_text=help_text or (
+            'default-root-object',
+            argument_table,
+            help_text=help_text
+            or (
                 'The object that you want CloudFront to return (for example, '
-                'index.html) when a viewer request points to your root URL.'))
+                'index.html) when a viewer request points to your root URL.'
+            ),
+        )
 
     def add_to_params(self, parameters, value):
         if value is not None:
             parameters.setdefault(
-                'DistributionConfig', self.distribution_config_template())
+                'DistributionConfig', self.distribution_config_template()
+            )
             parameters['DistributionConfig']['DefaultRootObject'] = value
 
 
 class UpdateDefaultRootObject(CreateDefaultRootObject):
     def __init__(self, context, argument_table):
         super(UpdateDefaultRootObject, self).__init__(
-            argument_table, help_text=(
+            argument_table,
+            help_text=(
                 'The object that you want CloudFront to return (for example, '
                 'index.html) when a viewer request points to your root URL. '
                 'CLI will automatically make a get-distribution-config call '
-                'to load and preserve your other settings.'))
+                'to load and preserve your other settings.'
+            ),
+        )
         self.context = context
 
     def add_to_params(self, parameters, value):
@@ -178,7 +212,8 @@ class UpdateDefaultRootObject(CreateDefa
                 'cloudfront',
                 region_name=self.context['parsed_args'].region,
                 endpoint_url=self.context['parsed_args'].endpoint_url,
-                verify=self.context['parsed_args'].verify_ssl)
+                verify=self.context['parsed_args'].verify_ssl,
+            )
             response = client.get_distribution_config(Id=parameters['Id'])
             parameters['IfMatch'] = response['ETag']
             parameters['DistributionConfig'] = response['DistributionConfig']
@@ -210,7 +245,8 @@ class SignCommand(BasicCommand):
             'required': True,
             'help_text': (
                 "The active CloudFront key pair Id for the key pair "
-                "that you're using to generate the signature."),
+                "that you're using to generate the signature."
+            ),
         },
         {
             'name': 'private-key',
@@ -218,43 +254,53 @@ class SignCommand(BasicCommand):
             'help_text': 'file://path/to/your/private-key.pem',
         },
         {
-            'name': 'date-less-than', 'required': True,
-            'help_text':
-                'The expiration date and time for the URL. ' + DATE_FORMAT,
+            'name': 'date-less-than',
+            'required': True,
+            'help_text': 'The expiration date and time for the URL. '
+            + DATE_FORMAT,
         },
         {
             'name': 'date-greater-than',
-            'help_text':
-                'An optional start date and time for the URL. ' + DATE_FORMAT,
+            'help_text': 'An optional start date and time for the URL. '
+            + DATE_FORMAT,
         },
         {
             'name': 'ip-address',
             'help_text': (
                 'An optional IP address or IP address range to allow client '
-                'making the GET request from. Format: x.x.x.x/x or x.x.x.x'),
+                'making the GET request from. Format: x.x.x.x/x or x.x.x.x'
+            ),
         },
     ]
 
     def _run_main(self, args, parsed_globals):
         signer = CloudFrontSigner(
-            args.key_pair_id, RSASigner(args.private_key).sign)
+            args.key_pair_id, RSASigner(args.private_key).sign
+        )
         date_less_than = parse_to_aware_datetime(args.date_less_than)
         date_greater_than = args.date_greater_than
         if date_greater_than is not None:
             date_greater_than = parse_to_aware_datetime(date_greater_than)
         if date_greater_than is not None or args.ip_address is not None:
             policy = signer.build_policy(
-                args.url, date_less_than, date_greater_than=date_greater_than,
-                ip_address=args.ip_address)
-            sys.stdout.write(signer.generate_presigned_url(
-                args.url, policy=policy))
+                args.url,
+                date_less_than,
+                date_greater_than=date_greater_than,
+                ip_address=args.ip_address,
+            )
+            sys.stdout.write(
+                signer.generate_presigned_url(args.url, policy=policy)
+            )
         else:
-            sys.stdout.write(signer.generate_presigned_url(
-                args.url, date_less_than=date_less_than))
+            sys.stdout.write(
+                signer.generate_presigned_url(
+                    args.url, date_less_than=date_less_than
+                )
+            )
         return 0
 
 
-class RSASigner(object):
+class RSASigner:
     def __init__(self, private_key):
         key_bytes = private_key.encode('utf8')
         self.priv_key = RSA.new_private_key_from_pem_data(key_bytes)
diff -pruN 2.23.6-1/awscli/customizations/cloudsearch.py 2.31.35-1/awscli/customizations/cloudsearch.py
--- 2.23.6-1/awscli/customizations/cloudsearch.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudsearch.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,17 +13,18 @@
 
 import logging
 
-from awscli.customizations.flatten import FlattenArguments, SEP
-from awscli.customizations.exceptions import ParamValidationError
 from botocore.compat import OrderedDict
 
+from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.flatten import SEP, FlattenArguments
+
 LOG = logging.getLogger(__name__)
 
 DEFAULT_VALUE_TYPE_MAP = {
     'Int': int,
     'Double': float,
     'IntArray': int,
-    'DoubleArray': float
+    'DoubleArray': float,
 }
 
 
@@ -71,13 +72,16 @@ FLATTEN_CONFIG = {
     "define-expression": {
         "expression": {
             "keep": False,
-            "flatten": OrderedDict([
-                # Order is crucial here!  We're
-                # flattening ExpressionValue to be "expression",
-                # but this is the name ("expression") of the our parent
-                # key, the top level nested param.
-                ("ExpressionName", {"name": "name"}),
-                ("ExpressionValue", {"name": "expression"}),]),
+            "flatten": OrderedDict(
+                [
+                    # Order is crucial here!  We're
+                    # flattening ExpressionValue to be "expression",
+                    # but this is the name ("expression") of the our parent
+                    # key, the top level nested param.
+                    ("ExpressionName", {"name": "name"}),
+                    ("ExpressionValue", {"name": "expression"}),
+                ]
+            ),
         }
     },
     "define-index-field": {
@@ -85,30 +89,57 @@ FLATTEN_CONFIG = {
             "keep": False,
             # We use an ordered dict because `type` needs to be parsed before
             # any of the <X>Options values.
-            "flatten": OrderedDict([
-                ("IndexFieldName", {"name": "name"}),
-                ("IndexFieldType", {"name": "type"}),
-                ("IntOptions.DefaultValue", {"name": "default-value",
-                                             "type": "string",
-                                             "hydrate": index_hydrate}),
-                ("IntOptions.FacetEnabled", {"name": "facet-enabled",
-                                             "hydrate": index_hydrate }),
-                ("IntOptions.SearchEnabled", {"name": "search-enabled",
-                                              "hydrate": index_hydrate}),
-                ("IntOptions.ReturnEnabled", {"name": "return-enabled",
-                                              "hydrate": index_hydrate}),
-                ("IntOptions.SortEnabled", {"name": "sort-enabled",
-                                            "hydrate": index_hydrate}),
-                ("IntOptions.SourceField", {"name": "source-field",
-                                            "type": "string",
-                                            "hydrate": index_hydrate }),
-                ("TextOptions.HighlightEnabled", {"name": "highlight-enabled",
-                                                  "hydrate": index_hydrate}),
-                ("TextOptions.AnalysisScheme", {"name": "analysis-scheme",
-                                                "hydrate": index_hydrate})
-            ])
+            "flatten": OrderedDict(
+                [
+                    ("IndexFieldName", {"name": "name"}),
+                    ("IndexFieldType", {"name": "type"}),
+                    (
+                        "IntOptions.DefaultValue",
+                        {
+                            "name": "default-value",
+                            "type": "string",
+                            "hydrate": index_hydrate,
+                        },
+                    ),
+                    (
+                        "IntOptions.FacetEnabled",
+                        {"name": "facet-enabled", "hydrate": index_hydrate},
+                    ),
+                    (
+                        "IntOptions.SearchEnabled",
+                        {"name": "search-enabled", "hydrate": index_hydrate},
+                    ),
+                    (
+                        "IntOptions.ReturnEnabled",
+                        {"name": "return-enabled", "hydrate": index_hydrate},
+                    ),
+                    (
+                        "IntOptions.SortEnabled",
+                        {"name": "sort-enabled", "hydrate": index_hydrate},
+                    ),
+                    (
+                        "IntOptions.SourceField",
+                        {
+                            "name": "source-field",
+                            "type": "string",
+                            "hydrate": index_hydrate,
+                        },
+                    ),
+                    (
+                        "TextOptions.HighlightEnabled",
+                        {
+                            "name": "highlight-enabled",
+                            "hydrate": index_hydrate,
+                        },
+                    ),
+                    (
+                        "TextOptions.AnalysisScheme",
+                        {"name": "analysis-scheme", "hydrate": index_hydrate},
+                    ),
+                ]
+            ),
         }
-    }
+    },
 }
 
 
diff -pruN 2.23.6-1/awscli/customizations/cloudsearchdomain.py 2.31.35-1/awscli/customizations/cloudsearchdomain.py
--- 2.23.6-1/awscli/customizations/cloudsearchdomain.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudsearchdomain.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,11 +17,14 @@ This module customizes the cloudsearchdo
     * Add validation that --endpoint-url is required.
 
 """
+
 from awscli.customizations.exceptions import ParamValidationError
 
+
 def register_cloudsearchdomain(cli):
-    cli.register_last('calling-command.cloudsearchdomain',
-                      validate_endpoint_url)
+    cli.register_last(
+        'calling-command.cloudsearchdomain', validate_endpoint_url
+    )
 
 
 def validate_endpoint_url(parsed_globals, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/cloudtrail/__init__.py 2.31.35-1/awscli/customizations/cloudtrail/__init__.py
--- 2.23.6-1/awscli/customizations/cloudtrail/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudtrail/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -28,4 +28,6 @@ def inject_commands(command_table, sessi
     must not collide with existing low-level API call names.
     """
     command_table['validate-logs'] = CloudTrailValidateLogs(session)
-    command_table['verify-query-results'] = CloudTrailVerifyQueryResult(session)
+    command_table['verify-query-results'] = CloudTrailVerifyQueryResult(
+        session
+    )
diff -pruN 2.23.6-1/awscli/customizations/cloudtrail/utils.py 2.31.35-1/awscli/customizations/cloudtrail/utils.py
--- 2.23.6-1/awscli/customizations/cloudtrail/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudtrail/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from dateutil import tz, parser
 from datetime import timedelta
 
+from dateutil import parser, tz
+
 DATE_FORMAT = "%Y%m%dT%H%M%SZ"
 
 
@@ -94,5 +95,6 @@ class PublicKeyProvider:
                 return key["Value"]
 
         raise RuntimeError(
-            "No public keys found for key with fingerprint: %s" % public_key_fingerprint
+            "No public keys found for key with fingerprint: %s"
+            % public_key_fingerprint
         )
diff -pruN 2.23.6-1/awscli/customizations/cloudtrail/validation.py 2.31.35-1/awscli/customizations/cloudtrail/validation.py
--- 2.23.6-1/awscli/customizations/cloudtrail/validation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudtrail/validation.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,24 +12,26 @@
 # language governing permissions and limitations under the License.
 import base64
 import binascii
-import json
 import hashlib
+import json
 import logging
 import re
 import sys
 import zlib
-from zlib import error as ZLibError
 from datetime import datetime, timedelta
-from dateutil import tz, parser
+from zlib import error as ZLibError
 
 from awscrt.crypto import RSA, RSASignatureAlgorithm
+from botocore.exceptions import ClientError
+from dateutil import parser, tz
 
-from awscli.customizations.cloudtrail.utils import get_trail_by_arn, \
-    get_account_id_from_arn, PublicKeyProvider
+from awscli.customizations.cloudtrail.utils import (
+    PublicKeyProvider,
+    get_account_id_from_arn,
+    get_trail_by_arn,
+)
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.exceptions import ParamValidationError
-from botocore.exceptions import ClientError
-
 
 LOG = logging.getLogger(__name__)
 DATE_FORMAT = '%Y%m%dT%H%M%SZ'
@@ -66,7 +68,7 @@ def parse_date(date_string):
         return parser.parse(date_string)
     except ValueError:
         raise ParamValidationError(
-            'Unable to parse date value: %s' % date_string
+            f'Unable to parse date value: {date_string}'
         )
 
 
@@ -76,16 +78,22 @@ def assert_cloudtrail_arn_is_valid(trail
     ARNs look like: arn:aws:cloudtrail:us-east-1:123456789012:trail/foo"""
     pattern = re.compile(r'arn:.+:cloudtrail:.+:\d{12}:trail/.+')
     if not pattern.match(trail_arn):
-        raise ParamValidationError(
-            'Invalid trail ARN provided: %s' % trail_arn
-        )
+        raise ParamValidationError(f'Invalid trail ARN provided: {trail_arn}')
 
 
-def create_digest_traverser(cloudtrail_client, organization_client,
-                            s3_client_provider, trail_arn,
-                            trail_source_region=None, on_invalid=None,
-                            on_gap=None, on_missing=None, bucket=None,
-                            prefix=None, account_id=None):
+def create_digest_traverser(
+    cloudtrail_client,
+    organization_client,
+    s3_client_provider,
+    trail_arn,
+    trail_source_region=None,
+    on_invalid=None,
+    on_gap=None,
+    on_missing=None,
+    bucket=None,
+    prefix=None,
+    account_id=None,
+):
     """Creates a CloudTrail DigestTraverser and its object graph.
 
     :type cloudtrail_client: botocore.client.CloudTrail
@@ -134,9 +142,11 @@ def create_digest_traverser(cloudtrail_c
             if not account_id:
                 raise ParamValidationError(
                     "Missing required parameter for organization "
-                    "trail: '--account-id'")
+                    "trail: '--account-id'"
+                )
             organization_id = organization_client.describe_organization()[
-                'Organization']['Id']
+                'Organization'
+            ]['Id']
 
     # Determine the region from the ARN (e.g., arn:aws:cloudtrail:REGION:...)
     trail_region = trail_arn.split(':')[3]
@@ -147,24 +157,31 @@ def create_digest_traverser(cloudtrail_c
         account_id = get_account_id_from_arn(trail_arn)
 
     digest_provider = DigestProvider(
-        account_id=account_id, trail_name=trail_name,
+        account_id=account_id,
+        trail_name=trail_name,
         s3_client_provider=s3_client_provider,
         trail_source_region=trail_source_region,
         trail_home_region=trail_region,
-        organization_id=organization_id)
+        organization_id=organization_id,
+    )
     return DigestTraverser(
-        digest_provider=digest_provider, starting_bucket=bucket,
-        starting_prefix=prefix, on_invalid=on_invalid, on_gap=on_gap,
+        digest_provider=digest_provider,
+        starting_bucket=bucket,
+        starting_prefix=prefix,
+        on_invalid=on_invalid,
+        on_gap=on_gap,
         on_missing=on_missing,
-        public_key_provider=PublicKeyProvider(cloudtrail_client))
+        public_key_provider=PublicKeyProvider(cloudtrail_client),
+    )
 
 
-class S3ClientProvider(object):
+class S3ClientProvider:
     """Creates Amazon S3 clients and determines the region name of a client.
 
     This class will cache the location constraints of previously requested
     buckets and cache previously created clients for the same region.
     """
+
     def __init__(self, session, get_bucket_location_region='us-east-1'):
         self._session = session
         self._get_bucket_location_region = get_bucket_location_region
@@ -196,26 +213,30 @@ class S3ClientProvider(object):
 
 class DigestError(ValueError):
     """Exception raised when a digest fails to validate"""
+
     pass
 
 
 class DigestSignatureError(DigestError):
     """Exception raised when a digest signature is invalid"""
+
     def __init__(self, bucket, key):
-        message = ('Digest file\ts3://%s/%s\tINVALID: signature verification '
-                   'failed') % (bucket, key)
+        message = (
+            f'Digest file\ts3://{bucket}/{key}\tINVALID: signature verification '
+            'failed'
+        )
         super(DigestSignatureError, self).__init__(message)
 
 
 class InvalidDigestFormat(DigestError):
     """Exception raised when a digest has an invalid format"""
+
     def __init__(self, bucket, key):
-        message = 'Digest file\ts3://%s/%s\tINVALID: invalid format' % (bucket,
-                                                                        key)
+        message = f'Digest file\ts3://{bucket}/{key}\tINVALID: invalid format'
         super(InvalidDigestFormat, self).__init__(message)
 
 
-class DigestProvider(object):
+class DigestProvider:
     """
     Retrieves digest keys and digests from Amazon S3.
 
@@ -224,9 +245,16 @@ class DigestProvider(object):
     dict. This class is not responsible for validation or iterating from
     one digest to the next.
     """
-    def __init__(self, s3_client_provider, account_id, trail_name,
-                 trail_home_region, trail_source_region=None,
-                 organization_id=None):
+
+    def __init__(
+        self,
+        s3_client_provider,
+        account_id,
+        trail_name,
+        trail_home_region,
+        trail_source_region=None,
+        organization_id=None,
+    ):
         self._client_provider = s3_client_provider
         self.trail_name = trail_name
         self.account_id = account_id
@@ -254,7 +282,8 @@ class DigestProvider(object):
         target_start_date = format_date(normalize_date(start_date))
         # Add one hour to the end_date to get logs that spilled over to next.
         target_end_date = format_date(
-            normalize_date(end_date + timedelta(hours=1)))
+            normalize_date(end_date + timedelta(hours=1))
+        )
         # Ensure digests are from the same trail.
         digest_key_regex = re.compile(self._create_digest_key_regex(prefix))
         for key in key_filter:
@@ -276,19 +305,23 @@ class DigestProvider(object):
         client = self._client_provider.get_client(bucket)
         result = client.get_object(Bucket=bucket, Key=key)
         try:
-            digest = zlib.decompress(result['Body'].read(),
-                                     zlib.MAX_WBITS | 16)
+            digest = zlib.decompress(
+                result['Body'].read(), zlib.MAX_WBITS | 16
+            )
             digest_data = json.loads(digest.decode())
         except (ValueError, ZLibError):
             # Cannot gzip decode or JSON parse.
             raise InvalidDigestFormat(bucket, key)
         # Add the expected digest signature and algorithm to the dict.
-        if 'signature' not in result['Metadata'] \
-                or 'signature-algorithm' not in result['Metadata']:
+        if (
+            'signature' not in result['Metadata']
+            or 'signature-algorithm' not in result['Metadata']
+        ):
             raise DigestSignatureError(bucket, key)
         digest_data['_signature'] = result['Metadata']['signature']
-        digest_data['_signature_algorithm'] = \
-            result['Metadata']['signature-algorithm']
+        digest_data['_signature_algorithm'] = result['Metadata'][
+            'signature-algorithm'
+        ]
         return digest_data, digest
 
     def _create_digest_key(self, start_date, key_prefix):
@@ -310,7 +343,7 @@ class DigestProvider(object):
             'ymd': date.strftime('%Y/%m/%d'),
             'source_region': self.trail_source_region,
             'home_region': self.trail_home_region,
-            'name': self.trail_name
+            'name': self.trail_name,
         }
         if self.organization_id:
             template += '{organization_id}/'
@@ -332,7 +365,7 @@ class DigestProvider(object):
             'account_id': re.escape(self.account_id),
             'source_region': re.escape(self.trail_source_region),
             'home_region': re.escape(self.trail_home_region),
-            'name': re.escape(self.trail_name)
+            'name': re.escape(self.trail_name),
         }
         if self.organization_id:
             template += '{organization_id}/'
@@ -348,17 +381,31 @@ class DigestProvider(object):
         return '^' + key + '$'
 
 
-class DigestTraverser(object):
+class DigestTraverser:
     """Retrieves and validates digests within a date range."""
+
     # These keys are required to be present before validating the contents
     # of a digest.
-    required_digest_keys = ['digestPublicKeyFingerprint', 'digestS3Bucket',
-                            'digestS3Object', 'previousDigestSignature',
-                            'digestEndTime', 'digestStartTime']
-
-    def __init__(self, digest_provider, starting_bucket, starting_prefix,
-                 public_key_provider, digest_validator=None,
-                 on_invalid=None, on_gap=None, on_missing=None):
+    required_digest_keys = [
+        'digestPublicKeyFingerprint',
+        'digestS3Bucket',
+        'digestS3Object',
+        'previousDigestSignature',
+        'digestEndTime',
+        'digestStartTime',
+    ]
+
+    def __init__(
+        self,
+        digest_provider,
+        starting_bucket,
+        starting_prefix,
+        public_key_provider,
+        digest_validator=None,
+        on_invalid=None,
+        on_gap=None,
+        on_missing=None,
+    ):
         """
         :type digest_provider: DigestProvider
         :param digest_provider: DigestProvider object
@@ -409,57 +456,91 @@ class DigestTraverser(object):
         while key and start_date <= last_start_date:
             try:
                 digest, end_date = self._load_and_validate_digest(
-                    public_keys, bucket, key)
+                    public_keys, bucket, key
+                )
                 last_start_date = normalize_date(
-                    parse_date(digest['digestStartTime']))
+                    parse_date(digest['digestStartTime'])
+                )
                 previous_bucket = digest.get('previousDigestS3Bucket', None)
                 yield digest
                 if previous_bucket is None:
                     # The chain is broken, so find next in digest store.
                     key, end_date = self._find_next_digest(
-                        digests=digests, bucket=bucket, last_key=key,
-                        last_start_date=last_start_date, cb=self._on_gap,
-                        is_cb_conditional=True)
+                        digests=digests,
+                        bucket=bucket,
+                        last_key=key,
+                        last_start_date=last_start_date,
+                        cb=self._on_gap,
+                        is_cb_conditional=True,
+                    )
                 else:
                     key = digest['previousDigestS3Object']
                     if previous_bucket != bucket:
                         bucket = previous_bucket
                         # The bucket changed so reload the digest list.
                         digests = self._load_digests(
-                            bucket, prefix, start_date, end_date)
+                            bucket, prefix, start_date, end_date
+                        )
             except ClientError as e:
                 if e.response['Error']['Code'] != 'NoSuchKey':
                     raise e
                 key, end_date = self._find_next_digest(
-                    digests=digests, bucket=bucket, last_key=key,
-                    last_start_date=last_start_date, cb=self._on_missing,
-                    message=str(e))
+                    digests=digests,
+                    bucket=bucket,
+                    last_key=key,
+                    last_start_date=last_start_date,
+                    cb=self._on_missing,
+                    message=str(e),
+                )
             except DigestError as e:
                 key, end_date = self._find_next_digest(
-                    digests=digests, bucket=bucket, last_key=key,
-                    last_start_date=last_start_date, cb=self._on_invalid,
-                    message=str(e))
+                    digests=digests,
+                    bucket=bucket,
+                    last_key=key,
+                    last_start_date=last_start_date,
+                    cb=self._on_invalid,
+                    message=str(e),
+                )
             except Exception as e:
                 # Any other unexpected errors.
                 key, end_date = self._find_next_digest(
-                    digests=digests, bucket=bucket, last_key=key,
-                    last_start_date=last_start_date, cb=self._on_invalid,
-                    message='Digest file\ts3://%s/%s\tINVALID: %s'
-                            % (bucket, key, str(e)))
+                    digests=digests,
+                    bucket=bucket,
+                    last_key=key,
+                    last_start_date=last_start_date,
+                    cb=self._on_invalid,
+                    message=f'Digest file\ts3://{bucket}/{key}\tINVALID: {str(e)}',
+                )
 
     def _load_digests(self, bucket, prefix, start_date, end_date):
         return self.digest_provider.load_digest_keys_in_range(
-            bucket=bucket, prefix=prefix,
-            start_date=start_date, end_date=end_date)
+            bucket=bucket,
+            prefix=prefix,
+            start_date=start_date,
+            end_date=end_date,
+        )
 
-    def _find_next_digest(self, digests, bucket, last_key, last_start_date,
-                          cb=None, is_cb_conditional=False, message=None):
+    def _find_next_digest(
+        self,
+        digests,
+        bucket,
+        last_key,
+        last_start_date,
+        cb=None,
+        is_cb_conditional=False,
+        message=None,
+    ):
         """Finds the next digest in the bucket and invokes any callback."""
         next_key, next_end_date = self._get_last_digest(digests, last_key)
         if cb and (not is_cb_conditional or next_key):
-            cb(bucket=bucket, next_key=next_key, last_key=last_key,
-               next_end_date=next_end_date, last_start_date=last_start_date,
-               message=message)
+            cb(
+                bucket=bucket,
+                next_key=next_key,
+                last_key=last_key,
+                next_end_date=next_end_date,
+                last_start_date=last_start_date,
+                message=message,
+            )
         return next_key, next_end_date
 
     def _get_last_digest(self, digests, before_key=None):
@@ -474,14 +555,16 @@ class DigestTraverser(object):
         elif before_key is None:
             next_key = digests.pop()
             next_key_date = normalize_date(
-                parse_date(extract_digest_key_date(next_key)))
+                parse_date(extract_digest_key_date(next_key))
+            )
             return next_key, next_key_date
         # find a key before the given key.
         before_key_date = parse_date(extract_digest_key_date(before_key))
         while digests:
             next_key = digests.pop()
             next_key_date = normalize_date(
-                parse_date(extract_digest_key_date(next_key)))
+                parse_date(extract_digest_key_date(next_key))
+            )
             if next_key_date < before_key_date:
                 LOG.debug("Next found key: %s", next_key)
                 return next_key, next_key_date
@@ -499,37 +582,40 @@ class DigestTraverser(object):
             if required_key not in digest_data:
                 raise InvalidDigestFormat(bucket, key)
         # Ensure the bucket and key are the same as what's expected.
-        if digest_data['digestS3Bucket'] != bucket \
-                or digest_data['digestS3Object'] != key:
+        if (
+            digest_data['digestS3Bucket'] != bucket
+            or digest_data['digestS3Object'] != key
+        ):
             raise DigestError(
-                ('Digest file\ts3://%s/%s\tINVALID: has been moved from its '
-                 'original location') % (bucket, key))
+                f'Digest file\ts3://{bucket}/{key}\tINVALID: has been moved from its '
+                'original location'
+            )
         # Get the public keys in the given time range.
         fingerprint = digest_data['digestPublicKeyFingerprint']
         if fingerprint not in public_keys:
             raise DigestError(
-                ('Digest file\ts3://%s/%s\tINVALID: public key not found in '
-                 'region %s for fingerprint %s') %
-                (bucket, key, self.digest_provider.trail_home_region,
-                 fingerprint))
+                f'Digest file\ts3://{bucket}/{key}\tINVALID: public key not found in '
+                f'region {self.digest_provider.trail_home_region} for fingerprint {fingerprint}'
+            )
         public_key_hex = public_keys[fingerprint]['Value']
         self._digest_validator.validate(
-            bucket, key, public_key_hex, digest_data, digest)
+            bucket, key, public_key_hex, digest_data, digest
+        )
         end_date = normalize_date(parse_date(digest_data['digestEndTime']))
         return digest_data, end_date
 
     def _load_public_keys(self, start_date, end_date):
         public_keys = self._public_key_provider.get_public_keys(
-            start_date, end_date)
+            start_date, end_date
+        )
         if not public_keys:
             raise RuntimeError(
-                'No public keys found between %s and %s' %
-                (format_display_date(start_date),
-                 format_display_date(end_date)))
+                f'No public keys found between {format_display_date(start_date)} and {format_display_date(end_date)}'
+            )
         return public_keys
 
 
-class Sha256RSADigestValidator(object):
+class Sha256RSADigestValidator:
     """
     Validates SHA256withRSA signed digests.
 
@@ -554,17 +640,21 @@ class Sha256RSADigestValidator(object):
             public_key = RSA.new_public_key_from_der_data(decoded_key)
         except RuntimeError:
             raise DigestError(
-                ('Digest file\ts3://%s/%s\tINVALID: Unable to load PKCS #1 key'
-                 ' with fingerprint %s')
-                % (bucket, key, digest_data['digestPublicKeyFingerprint']))
+                (
+                    'Digest file\ts3://{}/{}\tINVALID: Unable to load PKCS #1 key'
+                    ' with fingerprint {}'
+                ).format(
+                    bucket, key, digest_data['digestPublicKeyFingerprint']
+                )
+            )
 
         to_sign = self._create_string_to_sign(digest_data, inflated_digest)
         signature_bytes = binascii.unhexlify(digest_data['_signature'])
 
         result = public_key.verify(
-            signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256, 
-            digest=hashlib.sha256(to_sign).digest(), 
-            signature=signature_bytes
+            signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
+            digest=hashlib.sha256(to_sign).digest(),
+            signature=signature_bytes,
         )
         if not result:
             # The previous implementation caught a cryptography.exceptions.InvalidSignature
@@ -577,12 +667,13 @@ class Sha256RSADigestValidator(object):
         if previous_signature is None:
             # The value must be 'null' to match the Java implementation.
             previous_signature = 'null'
-        string_to_sign = "%s\n%s/%s\n%s\n%s" % (
+        string_to_sign = "{}\n{}/{}\n{}\n{}".format(
             digest_data['digestEndTime'],
             digest_data['digestS3Bucket'],
             digest_data['digestS3Object'],
             hashlib.sha256(inflated_digest).hexdigest(),
-            previous_signature)
+            previous_signature,
+        )
         LOG.debug('Digest string to sign: %s', string_to_sign)
         return string_to_sign.encode()
 
@@ -591,6 +682,7 @@ class CloudTrailValidateLogs(BasicComman
     """
     Validates log digests and log files, optionally saving them to disk.
     """
+
     NAME = 'validate-logs'
     DESCRIPTION = """
     Validates CloudTrail logs for a given period of time.
@@ -637,34 +729,67 @@ class CloudTrailValidateLogs(BasicComman
     """
 
     ARG_TABLE = [
-        {'name': 'trail-arn', 'required': True, 'cli_type_name': 'string',
-         'help_text': 'Specifies the ARN of the trail to be validated'},
-        {'name': 'start-time', 'required': True, 'cli_type_name': 'string',
-         'help_text': ('Specifies that log files delivered on or after the '
-                       'specified UTC timestamp value will be validated. '
-                       'Example: "2015-01-08T05:21:42Z".')},
-        {'name': 'end-time', 'cli_type_name': 'string',
-         'help_text': ('Optionally specifies that log files delivered on or '
-                       'before the specified UTC timestamp value will be '
-                       'validated. The default value is the current time. '
-                       'Example: "2015-01-08T12:31:41Z".')},
-        {'name': 's3-bucket', 'cli_type_name': 'string',
-         'help_text': ('Optionally specifies the S3 bucket where the digest '
-                       'files are stored. If a bucket name is not specified, '
-                       'the CLI will retrieve it by calling describe_trails')},
-        {'name': 's3-prefix', 'cli_type_name': 'string',
-         'help_text': ('Optionally specifies the optional S3 prefix where the '
-                       'digest files are stored. If not specified, the CLI '
-                       'will determine the prefix automatically by calling '
-                       'describe_trails.')},
-        {'name': 'account-id', 'cli_type_name': 'string',
-         'help_text': ('Optionally specifies the account for validating logs. '
-                       'This parameter is needed for organization trails '
-                       'for validating logs for specific account inside an '
-                       'organization')},
-        {'name': 'verbose', 'cli_type_name': 'boolean',
-         'action': 'store_true',
-         'help_text': 'Display verbose log validation information'}
+        {
+            'name': 'trail-arn',
+            'required': True,
+            'cli_type_name': 'string',
+            'help_text': 'Specifies the ARN of the trail to be validated',
+        },
+        {
+            'name': 'start-time',
+            'required': True,
+            'cli_type_name': 'string',
+            'help_text': (
+                'Specifies that log files delivered on or after the '
+                'specified UTC timestamp value will be validated. '
+                'Example: "2015-01-08T05:21:42Z".'
+            ),
+        },
+        {
+            'name': 'end-time',
+            'cli_type_name': 'string',
+            'help_text': (
+                'Optionally specifies that log files delivered on or '
+                'before the specified UTC timestamp value will be '
+                'validated. The default value is the current time. '
+                'Example: "2015-01-08T12:31:41Z".'
+            ),
+        },
+        {
+            'name': 's3-bucket',
+            'cli_type_name': 'string',
+            'help_text': (
+                'Optionally specifies the S3 bucket where the digest '
+                'files are stored. If a bucket name is not specified, '
+                'the CLI will retrieve it by calling describe_trails'
+            ),
+        },
+        {
+            'name': 's3-prefix',
+            'cli_type_name': 'string',
+            'help_text': (
+                'Optionally specifies the optional S3 prefix where the '
+                'digest files are stored. If not specified, the CLI '
+                'will determine the prefix automatically by calling '
+                'describe_trails.'
+            ),
+        },
+        {
+            'name': 'account-id',
+            'cli_type_name': 'string',
+            'help_text': (
+                'Optionally specifies the account for validating logs. '
+                'This parameter is needed for organization trails '
+                'for validating logs for specific account inside an '
+                'organization'
+            ),
+        },
+        {
+            'name': 'verbose',
+            'cli_type_name': 'boolean',
+            'action': 'store_true',
+            'help_text': 'Display verbose log validation information',
+        },
     ]
 
     def __init__(self, session):
@@ -722,26 +847,36 @@ class CloudTrailValidateLogs(BasicComman
         self._source_region = parsed_globals.region
         # Use the the same region as the region of the CLI to get locations.
         self.s3_client_provider = S3ClientProvider(
-            self._session, self._source_region)
-        client_args = {'region_name': parsed_globals.region,
-                       'verify': parsed_globals.verify_ssl}
+            self._session, self._source_region
+        )
+        client_args = {
+            'region_name': parsed_globals.region,
+            'verify': parsed_globals.verify_ssl,
+        }
         self.organization_client = self._session.create_client(
-            'organizations', **client_args)
+            'organizations', **client_args
+        )
 
         if parsed_globals.endpoint_url is not None:
             client_args['endpoint_url'] = parsed_globals.endpoint_url
         self.cloudtrail_client = self._session.create_client(
-            'cloudtrail', **client_args)
+            'cloudtrail', **client_args
+        )
 
     def _call(self):
         traverser = create_digest_traverser(
-            trail_arn=self.trail_arn, cloudtrail_client=self.cloudtrail_client,
+            trail_arn=self.trail_arn,
+            cloudtrail_client=self.cloudtrail_client,
             organization_client=self.organization_client,
             trail_source_region=self._source_region,
-            s3_client_provider=self.s3_client_provider, bucket=self.s3_bucket,
-            prefix=self.s3_prefix, on_missing=self._on_missing_digest,
-            on_invalid=self._on_invalid_digest, on_gap=self._on_digest_gap,
-            account_id=self.account_id)
+            s3_client_provider=self.s3_client_provider,
+            bucket=self.s3_bucket,
+            prefix=self.s3_prefix,
+            on_missing=self._on_missing_digest,
+            on_invalid=self._on_invalid_digest,
+            on_gap=self._on_digest_gap,
+            account_id=self.account_id,
+        )
         self._write_startup_text()
         digests = traverser.traverse(self.start_time, self.end_time)
         for digest in digests:
@@ -750,8 +885,10 @@ class CloudTrailValidateLogs(BasicComman
             self._track_found_times(digest)
             self._valid_digests += 1
             self._write_status(
-                'Digest file\ts3://%s/%s\tvalid'
-                % (digest['digestS3Bucket'], digest['digestS3Object']))
+                'Digest file\ts3://{}/{}\tvalid'.format(
+                    digest['digestS3Bucket'], digest['digestS3Object']
+                )
+            )
             if not digest['logFiles']:
                 continue
             for log in digest['logFiles']:
@@ -771,12 +908,13 @@ class CloudTrailValidateLogs(BasicComman
             self._found_end_time = min(digest_end_time, self.end_time)
 
     def _download_log(self, log):
-        """ Download a log, decompress, and compare SHA256 checksums"""
+        """Download a log, decompress, and compare SHA256 checksums"""
         try:
             # Create a client that can work with this bucket.
             client = self.s3_client_provider.get_client(log['s3Bucket'])
             response = client.get_object(
-                Bucket=log['s3Bucket'], Key=log['s3Object'])
+                Bucket=log['s3Bucket'], Key=log['s3Object']
+            )
             gzip_inflater = zlib.decompressobj(zlib.MAX_WBITS | 16)
             rolling_hash = hashlib.sha256()
             for chunk in iter(lambda: response['Body'].read(2048), b""):
@@ -790,8 +928,9 @@ class CloudTrailValidateLogs(BasicComman
                 self._on_log_invalid(log)
             else:
                 self._valid_logs += 1
-                self._write_status(('Log file\ts3://%s/%s\tvalid'
-                                    % (log['s3Bucket'], log['s3Object'])))
+                self._write_status(
+                    f"Log file\ts3://{log['s3Bucket']}/{log['s3Object']}\tvalid"
+                )
         except ClientError as e:
             if e.response['Error']['Code'] != 'NoSuchKey':
                 raise
@@ -802,35 +941,34 @@ class CloudTrailValidateLogs(BasicComman
     def _write_status(self, message, is_error=False):
         if is_error:
             if self._is_last_status_double_space:
-                sys.stderr.write("%s\n\n" % message)
+                sys.stderr.write(f"{message}\n\n")
             else:
-                sys.stderr.write("\n%s\n\n" % message)
+                sys.stderr.write(f"\n{message}\n\n")
             self._is_last_status_double_space = True
         elif self.is_verbose:
             self._is_last_status_double_space = False
-            sys.stdout.write("%s\n" % message)
+            sys.stdout.write(f"{message}\n")
 
     def _write_startup_text(self):
         sys.stdout.write(
-            'Validating log files for trail %s between %s and %s\n\n'
-            % (self.trail_arn, format_display_date(self.start_time),
-               format_display_date(self.end_time)))
+            f'Validating log files for trail {self.trail_arn} between {format_display_date(self.start_time)} and {format_display_date(self.end_time)}\n\n'
+        )
 
     def _write_summary_text(self):
         if not self._is_last_status_double_space:
             sys.stdout.write('\n')
-        sys.stdout.write('Results requested for %s to %s\n'
-                         % (format_display_date(self.start_time),
-                            format_display_date(self.end_time)))
+        sys.stdout.write(
+            f'Results requested for {format_display_date(self.start_time)} to {format_display_date(self.end_time)}\n'
+        )
         if not self._valid_digests and not self._invalid_digests:
             sys.stdout.write('No digests found\n')
             return
         if not self._found_start_time or not self._found_end_time:
             sys.stdout.write('No valid digests found in range\n')
         else:
-            sys.stdout.write('Results found for %s to %s:\n'
-                             % (format_display_date(self._found_start_time),
-                                format_display_date(self._found_end_time)))
+            sys.stdout.write(
+                f'Results found for {format_display_date(self._found_start_time)} to {format_display_date(self._found_end_time)}:\n'
+            )
         self._write_ratio(self._valid_digests, self._invalid_digests, 'digest')
         self._write_ratio(self._valid_logs, self._invalid_logs, 'log')
         sys.stdout.write('\n')
@@ -840,19 +978,25 @@ class CloudTrailValidateLogs(BasicComman
         if total > 0:
             sys.stdout.write('\n%d/%d %s files valid' % (valid, total, name))
             if invalid > 0:
-                sys.stdout.write(', %d/%d %s files INVALID' % (invalid, total,
-                                                               name))
+                sys.stdout.write(
+                    ', %d/%d %s files INVALID' % (invalid, total, name)
+                )
 
     def _on_missing_digest(self, bucket, last_key, **kwargs):
         self._invalid_digests += 1
-        self._write_status('Digest file\ts3://%s/%s\tINVALID: not found'
-                           % (bucket, last_key), True)
+        self._write_status(
+            f'Digest file\ts3://{bucket}/{last_key}\tINVALID: not found',
+            True,
+        )
 
     def _on_digest_gap(self, **kwargs):
         self._write_status(
-            'No log files were delivered by CloudTrail between %s and %s'
-            % (format_display_date(kwargs['next_end_date']),
-               format_display_date(kwargs['last_start_date'])), True)
+            'No log files were delivered by CloudTrail between {} and {}'.format(
+                format_display_date(kwargs['next_end_date']),
+                format_display_date(kwargs['last_start_date']),
+            ),
+            True,
+        )
 
     def _on_invalid_digest(self, message, **kwargs):
         self._invalid_digests += 1
@@ -861,17 +1005,28 @@ class CloudTrailValidateLogs(BasicComman
     def _on_invalid_log_format(self, log_data):
         self._invalid_logs += 1
         self._write_status(
-            ('Log file\ts3://%s/%s\tINVALID: invalid format'
-             % (log_data['s3Bucket'], log_data['s3Object'])), True)
+            (
+                'Log file\ts3://{}/{}\tINVALID: invalid format'.format(
+                    log_data['s3Bucket'], log_data['s3Object']
+                )
+            ),
+            True,
+        )
 
     def _on_log_invalid(self, log_data):
         self._invalid_logs += 1
         self._write_status(
-            "Log file\ts3://%s/%s\tINVALID: hash value doesn't match"
-            % (log_data['s3Bucket'], log_data['s3Object']), True)
+            "Log file\ts3://{}/{}\tINVALID: hash value doesn't match".format(
+                log_data['s3Bucket'], log_data['s3Object']
+            ),
+            True,
+        )
 
     def _on_missing_log(self, log_data):
         self._invalid_logs += 1
         self._write_status(
-            'Log file\ts3://%s/%s\tINVALID: not found'
-            % (log_data['s3Bucket'], log_data['s3Object']), True)
+            'Log file\ts3://{}/{}\tINVALID: not found'.format(
+                log_data['s3Bucket'], log_data['s3Object']
+            ),
+            True,
+        )
diff -pruN 2.23.6-1/awscli/customizations/cloudtrail/verifyqueryresults.py 2.31.35-1/awscli/customizations/cloudtrail/verifyqueryresults.py
--- 2.23.6-1/awscli/customizations/cloudtrail/verifyqueryresults.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/cloudtrail/verifyqueryresults.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,17 +1,19 @@
 import base64
 import binascii
-import json
 import hashlib
+import json
 import sys
 from abc import ABC, abstractmethod
 from os import path
 
-from awscli.customizations.exceptions import ParamValidationError
-
 from awscrt.crypto import RSA, RSASignatureAlgorithm
 
+from awscli.customizations.cloudtrail.utils import (
+    PublicKeyProvider,
+    parse_date,
+)
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.cloudtrail.utils import parse_date, PublicKeyProvider
+from awscli.customizations.exceptions import ParamValidationError
 
 SIGN_FILE_NAME = "result_sign.json"
 
@@ -65,8 +67,10 @@ class Sha256RsaSignatureValidator:
         signature_bytes = binascii.unhexlify(sign_file["hashSignature"])
         result = public_key.verify(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256(self._create_string_to_sign(sign_file)).digest(),
-            signature=signature_bytes
+            digest=hashlib.sha256(
+                self._create_string_to_sign(sign_file)
+            ).digest(),
+            signature=signature_bytes,
         )
         if not result:
             # The previous implementation caught a cryptography.exceptions.InvalidSignature
@@ -187,7 +191,6 @@ class S3ExportFilesHashValidator(BaseExp
         s3_bucket=None,
         s3_path_prefix=None,
     ):
-
         self._s3_client = s3_client
         self._s3_bucket = s3_bucket
         self._s3_path_prefix = s3_path_prefix
@@ -197,9 +200,13 @@ class S3ExportFilesHashValidator(BaseExp
 
         for file_info in sign_file["files"]:
             key = self._s3_path_prefix + file_info["fileName"]
-            response = self._s3_client.get_object(Bucket=self._s3_bucket, Key=key)
+            response = self._s3_client.get_object(
+                Bucket=self._s3_bucket, Key=key
+            )
             self._validate_hash_value(
-                response["Body"], file_info["fileName"], file_info["fileHashValue"]
+                response["Body"],
+                file_info["fileName"],
+                file_info["fileHashValue"],
             )
 
 
@@ -218,7 +225,9 @@ class LocalExportFilesHashValidator(Base
                 path.join(self.local_path_prefix, file_info["fileName"]), "rb"
             ) as export_file:
                 self._validate_hash_value(
-                    export_file, file_info["fileName"], file_info["fileHashValue"]
+                    export_file,
+                    file_info["fileName"],
+                    file_info["fileHashValue"],
                 )
 
 
@@ -250,7 +259,7 @@ class CloudTrailVerifyQueryResult(BasicC
       CloudTrail delivered them.
 
     .. note::
-        For verify export file from S3, this command requires that the user or 
+        For verify export file from S3, this command requires that the user or
         role executing the command has permission to call GetObject, and
         GetBucketLocation for the bucket that store the export file.
     """
@@ -358,7 +367,9 @@ class CloudTrailVerifyQueryResult(BasicC
         )
         signature_validator.validate(public_key, sign_file)
         self._return_code = 0
-        sys.stdout.write("Successfully validated sign and query result files\n")
+        sys.stdout.write(
+            "Successfully validated sign and query result files\n"
+        )
 
     def _initialize_components(
         self,
diff -pruN 2.23.6-1/awscli/customizations/codeartifact/login.py 2.31.35-1/awscli/customizations/codeartifact/login.py
--- 2.23.6-1/awscli/customizations/codeartifact/login.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codeartifact/login.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,25 +1,21 @@
 import errno
 import os
 import platform
-import sys
-import subprocess
 import re
-
+import subprocess
+import sys
 from configparser import RawConfigParser
+from datetime import datetime
 from io import StringIO
 from urllib.parse import urlsplit
 
-from datetime import datetime
-from dateutil.tz import tzutc
+from botocore.utils import original_ld_library_path, parse_timestamp
 from dateutil.relativedelta import relativedelta
-from botocore.utils import parse_timestamp
+from dateutil.tz import tzutc
 
-from awscli.compat import (
-    is_windows, urlparse, get_stderr_encoding, is_macos
-)
+from awscli.compat import get_stderr_encoding, is_macos, is_windows, urlparse
 from awscli.customizations import utils as cli_utils
 from awscli.customizations.commands import BasicCommand
-from awscli.utils import original_ld_library_path
 from awscli.customizations.utils import uni_print
 
 
@@ -45,7 +41,7 @@ class CommandFailedError(Exception):
     def __init__(self, called_process_error, auth_token):
         msg = str(called_process_error).replace(auth_token, '******')
         if called_process_error.stderr is not None:
-            msg +=(
+            msg += (
                 f' Stderr from command:\n'
                 f'{called_process_error.stderr.decode(get_stderr_encoding())}'
             )
@@ -55,8 +51,16 @@ class CommandFailedError(Exception):
 class BaseLogin:
     _TOOL_NOT_FOUND_MESSAGE = '%s was not found. Please verify installation.'
 
-    def __init__(self, auth_token, expiration, repository_endpoint,
-                 domain, repository, subprocess_utils, namespace=None):
+    def __init__(
+        self,
+        auth_token,
+        expiration,
+        repository_endpoint,
+        domain,
+        repository,
+        subprocess_utils,
+        namespace=None,
+    ):
         self.auth_token = auth_token
         self.expiration = expiration
         self.repository_endpoint = repository_endpoint
@@ -79,15 +83,18 @@ class BaseLogin:
         # for some corner case
         # e.g. 11 hours 59 minutes 31 seconds should output --> 12 hours.
         remaining = relativedelta(
-            self.expiration, datetime.now(tzutc())) + relativedelta(seconds=30)
+            self.expiration, datetime.now(tzutc())
+        ) + relativedelta(seconds=30)
         expiration_message = get_relative_expiration_time(remaining)
 
-        sys.stdout.write('Successfully configured {} to use '
-                         'AWS CodeArtifact repository {} '
-                         .format(tool, self.repository_endpoint))
+        sys.stdout.write(
+            f'Successfully configured {tool} to use '
+            f'AWS CodeArtifact repository {self.repository_endpoint} '
+        )
         sys.stdout.write(os.linesep)
-        sys.stdout.write('Login expires in {} at {}'.format(
-            expiration_message, self.expiration))
+        sys.stdout.write(
+            f'Login expires in {expiration_message} at {self.expiration}'
+        )
         sys.stdout.write(os.linesep)
 
     def _run_commands(self, tool, commands, dry_run=False):
@@ -113,9 +120,7 @@ class BaseLogin:
                 raise CommandFailedError(ex, self.auth_token)
         except OSError as ex:
             if ex.errno == errno.ENOENT:
-                raise ValueError(
-                    self._TOOL_NOT_FOUND_MESSAGE % tool
-                )
+                raise ValueError(self._TOOL_NOT_FOUND_MESSAGE % tool)
             raise ex
 
     @classmethod
@@ -124,18 +129,15 @@ class BaseLogin:
 
 
 class SwiftLogin(BaseLogin):
+    DEFAULT_NETRC_FMT = 'machine {hostname} login token password {auth_token}'
 
-    DEFAULT_NETRC_FMT = \
-        u'machine {hostname} login token password {auth_token}'
-
-    NETRC_REGEX_FMT = \
-        r'(?P<entry_start>\bmachine\s+{escaped_hostname}\s+login\s+\S+\s+password\s+)' \
+    NETRC_REGEX_FMT = (
+        r'(?P<entry_start>\bmachine\s+{escaped_hostname}\s+login\s+\S+\s+password\s+)'
         r'(?P<token>\S+)'
+    )
 
     def login(self, dry_run=False):
-        scope = self.get_scope(
-            self.namespace
-        )
+        scope = self.get_scope(self.namespace)
         commands = self.get_commands(
             self.repository_endpoint, self.auth_token, scope=scope
         )
@@ -143,13 +145,14 @@ class SwiftLogin(BaseLogin):
         if not is_macos:
             hostname = urlparse.urlparse(self.repository_endpoint).hostname
             new_entry = self.DEFAULT_NETRC_FMT.format(
-                hostname=hostname,
-                auth_token=self.auth_token
+                hostname=hostname, auth_token=self.auth_token
             )
             if dry_run:
                 self._display_new_netrc_entry(new_entry, self.get_netrc_path())
             else:
-                self._update_netrc_entry(hostname, new_entry, self.get_netrc_path())
+                self._update_netrc_entry(
+                    hostname, new_entry, self.get_netrc_path()
+                )
 
         self._run_commands('swift', commands, dry_run)
 
@@ -171,22 +174,22 @@ class SwiftLogin(BaseLogin):
     def _update_netrc_entry(self, hostname, new_entry, netrc_path):
         pattern = re.compile(
             self.NETRC_REGEX_FMT.format(escaped_hostname=re.escape(hostname)),
-            re.M
+            re.M,
         )
         if not os.path.isfile(netrc_path):
             self._create_netrc_file(netrc_path, new_entry)
         else:
-            with open(netrc_path, 'r') as f:
+            with open(netrc_path) as f:
                 contents = f.read()
             escaped_auth_token = self.auth_token.replace('\\', r'\\')
             new_contents = re.sub(
-                pattern,
-                rf"\g<entry_start>{escaped_auth_token}",
-                contents
+                pattern, rf"\g<entry_start>{escaped_auth_token}", contents
             )
 
             if new_contents == contents:
-                new_contents = self._append_netrc_entry(new_contents, new_entry)
+                new_contents = self._append_netrc_entry(
+                    new_contents, new_entry
+                )
 
             with open(netrc_path, 'w') as f:
                 f.write(new_contents)
@@ -195,8 +198,9 @@ class SwiftLogin(BaseLogin):
         dirname = os.path.split(netrc_path)[0]
         if not os.path.isdir(dirname):
             os.makedirs(dirname)
-        with os.fdopen(os.open(netrc_path,
-                               os.O_WRONLY | os.O_CREAT, 0o600), 'w') as f:
+        with os.fdopen(
+            os.open(netrc_path, os.O_WRONLY | os.O_CREAT, 0o600), 'w'
+        ) as f:
             f.write(new_entry + '\n')
 
     def _append_netrc_entry(self, contents, new_entry):
@@ -234,9 +238,7 @@ class SwiftLogin(BaseLogin):
         scope = kwargs.get('scope')
 
         # Set up the codeartifact repository as the swift registry.
-        set_registry_command = [
-            'swift', 'package-registry', 'set', endpoint
-        ]
+        set_registry_command = ['swift', 'package-registry', 'set', endpoint]
         if scope is not None:
             set_registry_command.extend(['--scope', scope])
         commands.append(set_registry_command)
@@ -245,7 +247,10 @@ class SwiftLogin(BaseLogin):
         # We will write token to .netrc for Linux and Windows
         # MacOS will store the token from command line option to Keychain
         login_registry_command = [
-            'swift', 'package-registry', 'login', f'{endpoint}login'
+            'swift',
+            'package-registry',
+            'login',
+            f'{endpoint}login',
         ]
         if is_macos:
             login_registry_command.extend(['--token', auth_token])
@@ -293,7 +298,9 @@ class NuGetBaseLogin(BaseLogin):
             )
             source_configured_message = self._SOURCE_UPDATED_MESSAGE
         else:
-            command = self._get_configure_command('add', nuget_index_url, source_name)
+            command = self._get_configure_command(
+                'add', nuget_index_url, source_name
+            )
             source_configured_message = self._SOURCE_ADDED_MESSAGE
 
         if dry_run:
@@ -305,9 +312,7 @@ class NuGetBaseLogin(BaseLogin):
         try:
             with original_ld_library_path():
                 self.subprocess_utils.run(
-                    command,
-                    capture_output=True,
-                    check=True
+                    command, capture_output=True, check=True
                 )
         except subprocess.CalledProcessError as e:
             uni_print('Failed to update the NuGet.Config\n')
@@ -339,8 +344,7 @@ class NuGetBaseLogin(BaseLogin):
         """
         with original_ld_library_path():
             response = self.subprocess_utils.check_output(
-                self._get_list_command(),
-                stderr=self.subprocess_utils.PIPE
+                self._get_list_command(), stderr=self.subprocess_utils.PIPE
             )
 
         lines = response.decode(os.device_encoding(1) or "utf-8").splitlines()
@@ -350,13 +354,14 @@ class NuGetBaseLogin(BaseLogin):
         for i in range(len(lines)):
             result = self._SOURCE_REGEX.match(lines[i].strip())
             if result:
-                source_to_url_dict[result["source_name"].strip()] = \
-                    lines[i + 1].strip()
+                source_to_url_dict[result["source_name"].strip()] = lines[
+                    i + 1
+                ].strip()
 
         return source_to_url_dict
 
     def _get_source_name(self, codeartifact_url, source_dict):
-        default_name = '{}/{}'.format(self.domain, self.repository)
+        default_name = f'{self.domain}/{self.repository}'
 
         # Check if the CodeArtifact URL is already present in the
         # NuGet.Config file. If the URL already exists, use the source name
@@ -387,7 +392,6 @@ class NuGetBaseLogin(BaseLogin):
 
 
 class NuGetLogin(NuGetBaseLogin):
-
     def _get_tool_name(self):
         return 'nuget'
 
@@ -396,16 +400,21 @@ class NuGetLogin(NuGetBaseLogin):
 
     def _get_configure_command(self, operation, nuget_index_url, source_name):
         return [
-            'nuget', 'sources', operation,
-            '-name', source_name,
-            '-source', nuget_index_url,
-            '-username', 'aws',
-            '-password', self.auth_token
+            'nuget',
+            'sources',
+            operation,
+            '-name',
+            source_name,
+            '-source',
+            nuget_index_url,
+            '-username',
+            'aws',
+            '-password',
+            self.auth_token,
         ]
 
 
 class DotNetLogin(NuGetBaseLogin):
-
     def _get_tool_name(self):
         return 'dotnet'
 
@@ -422,10 +431,7 @@ class DotNetLogin(NuGetBaseLogin):
             command.append(source_name)
             command += ['--source', nuget_index_url]
 
-        command += [
-            '--username', 'aws',
-            '--password', self.auth_token
-        ]
+        command += ['--username', 'aws', '--password', self.auth_token]
 
         # Encryption is not supported on non-Windows platforms.
         if not is_windows:
@@ -435,15 +441,12 @@ class DotNetLogin(NuGetBaseLogin):
 
 
 class NpmLogin(BaseLogin):
-
     # On Windows we need to be explicit about the .cmd file to execute
     # (unless we execute through the shell, i.e. with shell=True).
     NPM_CMD = 'npm.cmd' if platform.system().lower() == 'windows' else 'npm'
 
     def login(self, dry_run=False):
-        scope = self.get_scope(
-            self.namespace
-        )
+        scope = self.get_scope(self.namespace)
         commands = self.get_commands(
             self.repository_endpoint, self.auth_token, scope=scope
         )
@@ -465,7 +468,7 @@ class NpmLogin(BaseLogin):
         if namespace.startswith('@'):
             scope = namespace
         else:
-            scope = '@{}'.format(namespace)
+            scope = f'@{namespace}'
 
         if not valid_scope_name.match(scope):
             raise ValueError(
@@ -481,27 +484,21 @@ class NpmLogin(BaseLogin):
         scope = kwargs.get('scope')
 
         # prepend scope if it exists
-        registry = '{}:registry'.format(scope) if scope else 'registry'
+        registry = f'{scope}:registry' if scope else 'registry'
 
         # set up the codeartifact repository as the npm registry.
-        commands.append(
-            [cls.NPM_CMD, 'config', 'set', registry, endpoint]
-        )
+        commands.append([cls.NPM_CMD, 'config', 'set', registry, endpoint])
 
         repo_uri = urlsplit(endpoint)
 
         # configure npm to always require auth for the repository.
-        always_auth_config = '//{}{}:always-auth'.format(
-            repo_uri.netloc, repo_uri.path
-        )
+        always_auth_config = f'//{repo_uri.netloc}{repo_uri.path}:always-auth'
         commands.append(
             [cls.NPM_CMD, 'config', 'set', always_auth_config, 'true']
         )
 
         # set auth info for the repository.
-        auth_token_config = '//{}{}:_authToken'.format(
-            repo_uri.netloc, repo_uri.path
-        )
+        auth_token_config = f'//{repo_uri.netloc}{repo_uri.path}:_authToken'
         commands.append(
             [cls.NPM_CMD, 'config', 'set', auth_token_config, auth_token]
         )
@@ -510,13 +507,10 @@ class NpmLogin(BaseLogin):
 
 
 class PipLogin(BaseLogin):
-
     PIP_INDEX_URL_FMT = '{scheme}://aws:{auth_token}@{netloc}{path}simple/'
 
     def login(self, dry_run=False):
-        commands = self.get_commands(
-            self.repository_endpoint, self.auth_token
-        )
+        commands = self.get_commands(self.repository_endpoint, self.auth_token)
         self._run_commands('pip', commands, dry_run)
 
     @classmethod
@@ -526,14 +520,13 @@ class PipLogin(BaseLogin):
             scheme=repo_uri.scheme,
             auth_token=auth_token,
             netloc=repo_uri.netloc,
-            path=repo_uri.path
+            path=repo_uri.path,
         )
 
         return [['pip', 'config', 'set', 'global.index-url', pip_index_url]]
 
 
 class TwineLogin(BaseLogin):
-
     DEFAULT_PYPI_RC_FMT = '''\
 [distutils]
 index-servers=
@@ -553,14 +546,19 @@ password: {auth_token}'''
         domain,
         repository,
         subprocess_utils,
-        pypi_rc_path=None
+        pypi_rc_path=None,
     ):
         if pypi_rc_path is None:
             pypi_rc_path = self.get_pypi_rc_path()
         self.pypi_rc_path = pypi_rc_path
         super().__init__(
-            auth_token, expiration, repository_endpoint,
-            domain, repository, subprocess_utils)
+            auth_token,
+            expiration,
+            repository_endpoint,
+            domain,
+            repository,
+            subprocess_utils,
+        )
 
     @classmethod
     def get_commands(cls, endpoint, auth_token, **kwargs):
@@ -577,8 +575,7 @@ password: {auth_token}'''
         pypi_rc_path = kwargs['pypi_rc_path']
 
         default_pypi_rc = cls.DEFAULT_PYPI_RC_FMT.format(
-            repository_endpoint=endpoint,
-            auth_token=auth_token
+            repository_endpoint=endpoint, auth_token=auth_token
         )
 
         pypi_rc = RawConfigParser()
@@ -624,7 +621,7 @@ password: {auth_token}'''
         pypi_rc_str = self.get_commands(
             self.repository_endpoint,
             self.auth_token,
-            pypi_rc_path=self.pypi_rc_path
+            pypi_rc_path=self.pypi_rc_path,
         )
 
         if dry_run:
@@ -681,7 +678,7 @@ class CodeArtifactLogin(BasicCommand):
             'package_format': 'pypi',
             'login_cls': TwineLogin,
             'namespace_support': False,
-        }
+        },
     }
 
     NAME = 'login'
@@ -707,7 +704,7 @@ class CodeArtifactLogin(BasicCommand):
         {
             'name': 'domain-owner',
             'help_text': 'The AWS account ID that owns your CodeArtifact '
-                         'domain',
+            'domain',
             'required': False,
         },
         {
@@ -719,7 +716,7 @@ class CodeArtifactLogin(BasicCommand):
             'name': 'duration-seconds',
             'cli_type_name': 'integer',
             'help_text': 'The time, in seconds, that the login information '
-                         'is valid',
+            'is valid',
             'required': False,
         },
         {
@@ -730,17 +727,17 @@ class CodeArtifactLogin(BasicCommand):
         {
             'name': 'endpoint-type',
             'help_text': 'The type of endpoint you want the tool to interact with',
-            'required': False
+            'required': False,
         },
         {
             'name': 'dry-run',
             'action': 'store_true',
             'help_text': 'Only print the commands that would be executed '
-                         'to connect your tool with your repository without '
-                         'making any changes to your configuration. Note that '
-                         'this prints the unredacted auth token as part of the output',
+            'to connect your tool with your repository without '
+            'making any changes to your configuration. Note that '
+            'this prints the unredacted auth token as part of the output',
             'required': False,
-            'default': False
+            'default': False,
         },
     ]
 
@@ -749,7 +746,7 @@ class CodeArtifactLogin(BasicCommand):
 
         if not namespace_compatible and parsed_args.namespace:
             raise ValueError(
-                'Argument --namespace is not supported for {}'.format(tool)
+                f'Argument --namespace is not supported for {tool}'
             )
         else:
             return parsed_args.namespace
@@ -760,30 +757,30 @@ class CodeArtifactLogin(BasicCommand):
         kwargs = {
             'domain': parsed_args.domain,
             'repository': parsed_args.repository,
-            'format': package_format
+            'format': package_format,
         }
         if parsed_args.endpoint_type:
             kwargs['endpointType'] = parsed_args.endpoint_type
         if parsed_args.domain_owner:
             kwargs['domainOwner'] = parsed_args.domain_owner
 
-        get_repository_endpoint_response = \
+        get_repository_endpoint_response = (
             codeartifact_client.get_repository_endpoint(**kwargs)
+        )
 
         return get_repository_endpoint_response['repositoryEndpoint']
 
     def _get_authorization_token(self, codeartifact_client, parsed_args):
-        kwargs = {
-            'domain': parsed_args.domain
-        }
+        kwargs = {'domain': parsed_args.domain}
         if parsed_args.domain_owner:
             kwargs['domainOwner'] = parsed_args.domain_owner
 
         if parsed_args.duration_seconds:
             kwargs['durationSeconds'] = parsed_args.duration_seconds
 
-        get_authorization_token_response = \
+        get_authorization_token_response = (
             codeartifact_client.get_authorization_token(**kwargs)
+        )
 
         return get_authorization_token_response
 
@@ -811,8 +808,13 @@ class CodeArtifactLogin(BasicCommand):
         auth_token = auth_token_res['authorizationToken']
         expiration = parse_timestamp(auth_token_res['expiration'])
         login = self.TOOL_MAP[tool]['login_cls'](
-            auth_token, expiration, repository_endpoint,
-            domain, repository, subprocess, namespace
+            auth_token,
+            expiration,
+            repository_endpoint,
+            domain,
+            repository,
+            subprocess,
+            namespace,
         )
 
         login.login(parsed_args.dry_run)
diff -pruN 2.23.6-1/awscli/customizations/codecommit.py 2.31.35-1/awscli/customizations/codecommit.py
--- 2.23.6-1/awscli/customizations/codecommit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codecommit.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,18 +11,19 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import datetime
+import fileinput
+import logging
 import os
 import re
 import sys
-import logging
-import fileinput
-import datetime
 
 from botocore.auth import SigV4Auth
 from botocore.awsrequest import AWSRequest
 from botocore.compat import urlsplit
-from awscli.customizations.commands import BasicCommand
+
 from awscli.compat import NonTranslatedStdout
+from awscli.customizations.commands import BasicCommand
 
 logger = logging.getLogger('botocore.credentials')
 
@@ -43,9 +44,10 @@ def inject_commands(command_table, sessi
 
 class CodeCommitNoOpStoreCommand(BasicCommand):
     NAME = 'store'
-    DESCRIPTION = ('This operation does nothing, credentials'
-                   ' are calculated each time')
-    SYNOPSIS = ('aws codecommit credential-helper store')
+    DESCRIPTION = (
+        'This operation does nothing, credentials are calculated each time'
+    )
+    SYNOPSIS = 'aws codecommit credential-helper store'
     EXAMPLES = ''
     _UNDOCUMENTED = True
 
@@ -55,9 +57,8 @@ class CodeCommitNoOpStoreCommand(BasicCo
 
 class CodeCommitNoOpEraseCommand(BasicCommand):
     NAME = 'erase'
-    DESCRIPTION = ('This operation does nothing, no credentials'
-                   ' are ever stored')
-    SYNOPSIS = ('aws codecommit credential-helper erase')
+    DESCRIPTION = 'This operation does nothing, no credentials are ever stored'
+    SYNOPSIS = 'aws codecommit credential-helper erase'
     EXAMPLES = ''
     _UNDOCUMENTED = True
 
@@ -67,16 +68,20 @@ class CodeCommitNoOpEraseCommand(BasicCo
 
 class CodeCommitGetCommand(BasicCommand):
     NAME = 'get'
-    DESCRIPTION = ('get a username SigV4 credential pair'
-                   ' based on protocol, host and path provided'
-                   ' from standard in. This is primarily'
-                   ' called by git to generate credentials to'
-                   ' authenticate against AWS CodeCommit')
-    SYNOPSIS = ('aws codecommit credential-helper get')
-    EXAMPLES = (r'echo -e "protocol=https\\n'
-                r'path=/v1/repos/myrepo\\n'
-                'host=git-codecommit.us-east-1.amazonaws.com"'
-                ' | aws codecommit credential-helper get')
+    DESCRIPTION = (
+        'get a username SigV4 credential pair'
+        ' based on protocol, host and path provided'
+        ' from standard in. This is primarily'
+        ' called by git to generate credentials to'
+        ' authenticate against AWS CodeCommit'
+    )
+    SYNOPSIS = 'aws codecommit credential-helper get'
+    EXAMPLES = (
+        r'echo -e "protocol=https\\n'
+        r'path=/v1/repos/myrepo\\n'
+        'host=git-codecommit.us-east-1.amazonaws.com"'
+        ' | aws codecommit credential-helper get'
+    )
     ARG_TABLE = [
         {
             'name': 'ignore-host-check',
@@ -86,18 +91,20 @@ class CodeCommitGetCommand(BasicCommand)
             'help_text': (
                 'Optional. Generate credentials regardless of whether'
                 ' the domain is an Amazon domain.'
-                )
-            }
-        ]
+            ),
+        }
+    ]
 
     def __init__(self, session):
         super(CodeCommitGetCommand, self).__init__(session)
 
     def _run_main(self, args, parsed_globals):
         git_parameters = self.read_git_parameters()
-        if ('amazon.com' in git_parameters['host'] or
-                'amazonaws.com' in git_parameters['host'] or
-                args.ignore_host_check):
+        if (
+            'amazon.com' in git_parameters['host']
+            or 'amazonaws.com' in git_parameters['host']
+            or args.ignore_host_check
+        ):
             theUrl = self.extract_url(git_parameters)
             region = self.extract_region(git_parameters, parsed_globals)
             signature = self.sign_request(region, theUrl)
@@ -111,9 +118,9 @@ class CodeCommitGetCommand(BasicCommand)
         # Python will add a \r to the line ending for a text stdout in Windows.
         # Git does not like the \r, so switch to binary
         with NonTranslatedStdout() as binary_stdout:
-            binary_stdout.write('username={0}\n'.format(username))
+            binary_stdout.write(f'username={username}\n')
             logger.debug('username\n%s', username)
-            binary_stdout.write('password={0}\n'.format(signature))
+            binary_stdout.write(f'password={signature}\n')
             # need to explicitly flush the buffer here,
             # before we turn the stream back to text for windows
             binary_stdout.flush()
@@ -129,14 +136,16 @@ class CodeCommitGetCommand(BasicCommand)
         return parsed
 
     def extract_url(self, parameters):
-        url = '{0}://{1}/{2}'.format(parameters['protocol'],
-                                     parameters['host'],
-                                     parameters['path'])
+        url = '{0}://{1}/{2}'.format(
+            parameters['protocol'], parameters['host'], parameters['path']
+        )
         return url
 
     def extract_region(self, parameters, parsed_globals):
-        match = re.match(r'(vpce-.+\.)?git-codecommit(-fips)?\.([^.]+)\.(vpce\.)?amazonaws\.com',
-                         parameters['host'])
+        match = re.match(
+            r'(vpce-.+\.)?git-codecommit(-fips)?\.([^.]+)\.(vpce\.)?amazonaws\.com',
+            parameters['host'],
+        )
         if match is not None:
             return match.group(3)
         elif parsed_globals.region is not None:
@@ -155,10 +164,9 @@ class CodeCommitGetCommand(BasicCommand)
         split = urlsplit(request.url)
         # we don't want to include the port number in the signature
         hostname = split.netloc.split(':')[0]
-        canonical_request = '{0}\n{1}\n\nhost:{2}\n\nhost\n'.format(
-            request.method,
-            split.path,
-            hostname)
+        canonical_request = (
+            f'{request.method}\n{split.path}\n\nhost:{hostname}\n\nhost\n'
+        )
         logger.debug("Calculating signature using v4 auth.")
         logger.debug('CanonicalRequest:\n%s', canonical_request)
         string_to_sign = signer.string_to_sign(request, canonical_request)
@@ -170,7 +178,7 @@ class CodeCommitGetCommand(BasicCommand)
 
 class CodeCommitCommand(BasicCommand):
     NAME = 'credential-helper'
-    SYNOPSIS = ('aws codecommit credential-helper')
+    SYNOPSIS = 'aws codecommit credential-helper'
     EXAMPLES = ''
 
     SUBCOMMANDS = [
@@ -178,14 +186,16 @@ class CodeCommitCommand(BasicCommand):
         {'name': 'store', 'command_class': CodeCommitNoOpStoreCommand},
         {'name': 'erase', 'command_class': CodeCommitNoOpEraseCommand},
     ]
-    DESCRIPTION = ('Provide a SigV4 compatible user name and'
-                   ' password for git smart HTTP '
-                   ' These commands are consumed by git and'
-                   ' should not used directly. Erase and Store'
-                   ' are no-ops. Get is operation to generate'
-                   ' credentials to authenticate AWS CodeCommit.'
-                   ' Run \"aws codecommit credential-helper help\"'
-                   ' for details')
+    DESCRIPTION = (
+        'Provide a SigV4 compatible user name and'
+        ' password for git smart HTTP '
+        ' These commands are consumed by git and'
+        ' should not used directly. Erase and Store'
+        ' are no-ops. Get is operation to generate'
+        ' credentials to authenticate AWS CodeCommit.'
+        ' Run "aws codecommit credential-helper help"'
+        ' for details'
+    )
 
     def _run_main(self, args, parsed_globals):
         self._raise_usage_error()
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/codedeploy.py 2.31.35-1/awscli/customizations/codedeploy/codedeploy.py
--- 2.23.6-1/awscli/customizations/codedeploy/codedeploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/codedeploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,13 @@
 # language governing permissions and limitations under the License.
 
 from awscli.customizations import utils
-from awscli.customizations.codedeploy.locationargs import \
-    modify_revision_arguments
-from awscli.customizations.codedeploy.push import Push
-from awscli.customizations.codedeploy.register import Register
 from awscli.customizations.codedeploy.deregister import Deregister
 from awscli.customizations.codedeploy.install import Install
+from awscli.customizations.codedeploy.locationargs import (
+    modify_revision_arguments,
+)
+from awscli.customizations.codedeploy.push import Push
+from awscli.customizations.codedeploy.register import Register
 from awscli.customizations.codedeploy.uninstall import Uninstall
 
 
@@ -25,25 +26,19 @@ def initialize(cli):
     """
     The entry point for CodeDeploy high level commands.
     """
-    cli.register(
-        'building-command-table.main',
-        change_name
-    )
-    cli.register(
-        'building-command-table.deploy',
-        inject_commands
-    )
+    cli.register('building-command-table.main', change_name)
+    cli.register('building-command-table.deploy', inject_commands)
     cli.register(
         'building-argument-table.deploy.get-application-revision',
-        modify_revision_arguments
+        modify_revision_arguments,
     )
     cli.register(
         'building-argument-table.deploy.register-application-revision',
-        modify_revision_arguments
+        modify_revision_arguments,
     )
     cli.register(
         'building-argument-table.deploy.create-deployment',
-        modify_revision_arguments
+        modify_revision_arguments,
     )
 
 
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/deregister.py 2.31.35-1/awscli/customizations/codedeploy/deregister.py
--- 2.23.6-1/awscli/customizations/codedeploy/deregister.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/deregister.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,12 @@ import sys
 
 from botocore.exceptions import ClientError
 
+from awscli.customizations.codedeploy.utils import (
+    INSTANCE_NAME_ARG,
+    validate_instance_name,
+    validate_region,
+)
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.codedeploy.utils import \
-    validate_region, validate_instance_name, INSTANCE_NAME_ARG
 
 
 class Deregister(BasicCommand):
@@ -38,8 +41,8 @@ class Deregister(BasicCommand):
             'help_text': (
                 'Optional. Do not delete the IAM user for the registered '
                 'on-premises instance.'
-            )
-        }
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -52,11 +55,10 @@ class Deregister(BasicCommand):
             'codedeploy',
             region_name=params.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         self.iam = self._session.create_client(
-            'iam',
-            region_name=params.region
+            'iam', region_name=params.region
         )
 
         try:
@@ -77,11 +79,11 @@ class Deregister(BasicCommand):
             sys.stdout.flush()
             sys.stderr.write(
                 'ERROR\n'
-                '{0}\n'
+                f'{e}\n'
                 'Deregister the on-premises instance by following the '
                 'instructions in "Configure Existing On-Premises Instances by '
                 'Using AWS CodeDeploy" in the AWS CodeDeploy User '
-                'Guide.\n'.format(e)
+                'Guide.\n'
             )
             return 255
         return 0
@@ -95,12 +97,7 @@ class Deregister(BasicCommand):
         start = params.iam_user_arn.rfind('/') + 1
         params.user_name = params.iam_user_arn[start:]
         params.tags = response['instanceInfo']['tags']
-        sys.stdout.write(
-            'DONE\n'
-            'IamUserArn: {0}\n'.format(
-                params.iam_user_arn
-            )
-        )
+        sys.stdout.write(f'DONE\nIamUserArn: {params.iam_user_arn}\n')
         if params.tags:
             sys.stdout.write('Tags:')
             for tag in params.tags:
@@ -112,8 +109,7 @@ class Deregister(BasicCommand):
     def _remove_tags(self, params):
         sys.stdout.write('Removing tags from the on-premises instance... ')
         self.codedeploy.remove_tags_from_on_premises_instances(
-            tags=params.tags,
-            instanceNames=[params.instance_name]
+            tags=params.tags, instanceNames=[params.instance_name]
         )
         sys.stdout.write('DONE\n')
 
@@ -129,11 +125,11 @@ class Deregister(BasicCommand):
         list_user_policies = self.iam.get_paginator('list_user_policies')
         try:
             for response in list_user_policies.paginate(
-                    UserName=params.user_name):
+                UserName=params.user_name
+            ):
                 for policy_name in response['PolicyNames']:
                     self.iam.delete_user_policy(
-                        UserName=params.user_name,
-                        PolicyName=policy_name
+                        UserName=params.user_name, PolicyName=policy_name
                     )
         except ClientError as e:
             if e.response.get('Error', {}).get('Code') != 'NoSuchEntity':
@@ -145,11 +141,12 @@ class Deregister(BasicCommand):
         list_access_keys = self.iam.get_paginator('list_access_keys')
         try:
             for response in list_access_keys.paginate(
-                    UserName=params.user_name):
+                UserName=params.user_name
+            ):
                 for access_key in response['AccessKeyMetadata']:
                     self.iam.delete_access_key(
                         UserName=params.user_name,
-                        AccessKeyId=access_key['AccessKeyId']
+                        AccessKeyId=access_key['AccessKeyId'],
                     )
         except ClientError as e:
             if e.response.get('Error', {}).get('Code') != 'NoSuchEntity':
@@ -157,9 +154,7 @@ class Deregister(BasicCommand):
         sys.stdout.write('DONE\n')
 
     def _delete_iam_user(self, params):
-        sys.stdout.write('Deleting the IAM user ({0})... '.format(
-            params.user_name
-        ))
+        sys.stdout.write(f'Deleting the IAM user ({params.user_name})... ')
         try:
             self.iam.delete_user(UserName=params.user_name)
         except ClientError as e:
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/install.py 2.31.35-1/awscli/customizations/codedeploy/install.py
--- 2.23.6-1/awscli/customizations/codedeploy/install.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/install.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,9 +16,12 @@ import os
 import shutil
 import sys
 
+from awscli.customizations.codedeploy.utils import (
+    validate_instance,
+    validate_region,
+    validate_s3_location,
+)
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.codedeploy.utils import \
-    validate_region, validate_s3_location, validate_instance
 
 
 class Install(BasicCommand):
@@ -37,7 +40,7 @@ class Install(BasicCommand):
             'help_text': (
                 'Required. The path to the on-premises instance configuration '
                 'file.'
-            )
+            ),
         },
         {
             'name': 'override-config',
@@ -46,7 +49,7 @@ class Install(BasicCommand):
             'help_text': (
                 'Optional. Overrides the on-premises instance configuration '
                 'file.'
-            )
+            ),
         },
         {
             'name': 'agent-installer',
@@ -54,8 +57,8 @@ class Install(BasicCommand):
             'required': False,
             'help_text': (
                 'Optional. The AWS CodeDeploy Agent installer file.'
-            )
-        }
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -74,18 +77,20 @@ class Install(BasicCommand):
             sys.stdout.flush()
             sys.stderr.write(
                 'ERROR\n'
-                '{0}\n'
+                f'{e}\n'
                 'Install the AWS CodeDeploy Agent on the on-premises instance '
                 'by following the instructions in "Configure Existing '
                 'On-Premises Instances by Using AWS CodeDeploy" in the AWS '
-                'CodeDeploy User Guide.\n'.format(e)
+                'CodeDeploy User Guide.\n'
             )
             return 255
         return 0
 
     def _validate_override_config(self, params):
-        if os.path.isfile(params.system.CONFIG_PATH) and \
-                not params.override_config:
+        if (
+            os.path.isfile(params.system.CONFIG_PATH)
+            and not params.override_config
+        ):
             raise RuntimeError(
                 'The on-premises instance configuration file already exists. '
                 'Specify --override-config to update the existing on-premises '
@@ -95,9 +100,9 @@ class Install(BasicCommand):
     def _validate_agent_installer(self, params):
         validate_s3_location(params, 'agent_installer')
         if 'bucket' not in params:
-            params.bucket = 'aws-codedeploy-{0}'.format(params.region)
+            params.bucket = f'aws-codedeploy-{params.region}'
         if 'key' not in params:
-            params.key = 'latest/{0}'.format(params.system.INSTALLER)
+            params.key = f'latest/{params.system.INSTALLER}'
             params.installer = params.system.INSTALLER
         else:
             start = params.key.rfind('/') + 1
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/locationargs.py 2.31.35-1/awscli/customizations/codedeploy/locationargs.py
--- 2.23.6-1/awscli/customizations/codedeploy/locationargs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/locationargs.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,7 @@
 # language governing permissions and limitations under the License.
 
 from awscli.argprocess import unpack_cli_arg
-from awscli.arguments import CustomArgument
-from awscli.arguments import create_argument_model_from_schema
+from awscli.arguments import CustomArgument, create_argument_model_from_schema
 from awscli.customizations.exceptions import ParamValidationError
 
 S3_LOCATION_ARG_DESCRIPTION = {
@@ -23,7 +22,7 @@ S3_LOCATION_ARG_DESCRIPTION = {
         'Information about the location of the application revision in Amazon '
         'S3. You must specify the bucket, the key, and bundleType. '
         'Optionally, you can also specify an eTag and version.'
-    )
+    ),
 }
 
 S3_LOCATION_SCHEMA = {
@@ -32,30 +31,30 @@ S3_LOCATION_SCHEMA = {
         "bucket": {
             "type": "string",
             "description": "The Amazon S3 bucket name.",
-            "required": True
+            "required": True,
         },
         "key": {
             "type": "string",
             "description": "The Amazon S3 object key name.",
-            "required": True
+            "required": True,
         },
         "bundleType": {
             "type": "string",
             "description": "The format of the bundle stored in Amazon S3.",
             "enum": ["tar", "tgz", "zip"],
-            "required": True
+            "required": True,
         },
         "eTag": {
             "type": "string",
             "description": "The Amazon S3 object eTag.",
-            "required": False
+            "required": False,
         },
         "version": {
             "type": "string",
             "description": "The Amazon S3 object version.",
-            "required": False
-        }
-    }
+            "required": False,
+        },
+    },
 }
 
 GITHUB_LOCATION_ARG_DESCRIPTION = {
@@ -67,7 +66,7 @@ GITHUB_LOCATION_ARG_DESCRIPTION = {
         'references the application revision. For the repository, use the '
         'format GitHub-account/repository-name or GitHub-org/repository-name. '
         'For the commit ID, use the SHA1 Git commit reference.'
-    )
+    ),
 }
 
 GITHUB_LOCATION_SCHEMA = {
@@ -79,32 +78,28 @@ GITHUB_LOCATION_SCHEMA = {
                 "The GitHub account or organization and repository. Specify "
                 "as GitHub-account/repository or GitHub-org/repository."
             ),
-            "required": True
+            "required": True,
         },
         "commitId": {
             "type": "string",
             "description": "The SHA1 Git commit reference.",
-            "required": True
-        }
-    }
+            "required": True,
+        },
+    },
 }
 
 
 def modify_revision_arguments(argument_table, session, **kwargs):
     s3_model = create_argument_model_from_schema(S3_LOCATION_SCHEMA)
-    argument_table[S3_LOCATION_ARG_DESCRIPTION['name']] = (
-        S3LocationArgument(
-            argument_model=s3_model,
-            session=session,
-            **S3_LOCATION_ARG_DESCRIPTION
-        )
+    argument_table[S3_LOCATION_ARG_DESCRIPTION['name']] = S3LocationArgument(
+        argument_model=s3_model, session=session, **S3_LOCATION_ARG_DESCRIPTION
     )
     github_model = create_argument_model_from_schema(GITHUB_LOCATION_SCHEMA)
     argument_table[GITHUB_LOCATION_ARG_DESCRIPTION['name']] = (
         GitHubLocationArgument(
             argument_model=github_model,
             session=session,
-            **GITHUB_LOCATION_ARG_DESCRIPTION
+            **GITHUB_LOCATION_ARG_DESCRIPTION,
         )
     )
     argument_table['revision'].required = False
@@ -123,7 +118,7 @@ class LocationArgument(CustomArgument):
             param=self.argument_model,
             cli_argument=self,
             value=value,
-            operation=None
+            operation=None,
         )
         if parsed is None:
             parsed = unpack_cli_arg(self, value)
@@ -149,8 +144,8 @@ class S3LocationArgument(LocationArgumen
             "s3Location": {
                 "bucket": value_dict['bucket'],
                 "key": value_dict['key'],
-                "bundleType": value_dict['bundleType']
-            }
+                "bundleType": value_dict['bundleType'],
+            },
         }
         if 'eTag' in value_dict:
             revision['s3Location']['eTag'] = value_dict['eTag']
@@ -171,6 +166,6 @@ class GitHubLocationArgument(LocationArg
             "revisionType": "GitHub",
             "gitHubLocation": {
                 "repository": value_dict['repository'],
-                "commitId": value_dict['commitId']
-            }
+                "commitId": value_dict['commitId'],
+            },
         }
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/push.py 2.31.35-1/awscli/customizations/codedeploy/push.py
--- 2.23.6-1/awscli/customizations/codedeploy/push.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/push.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,19 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import contextlib
 import os
 import sys
-import zipfile
 import tempfile
-import contextlib
+import zipfile
 from datetime import datetime
 
 from botocore.exceptions import ClientError
 
+from awscli.compat import ZIP_COMPRESSION_MODE, BytesIO
 from awscli.customizations.codedeploy.utils import validate_s3_location
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.exceptions import ParamValidationError
-from awscli.compat import BytesIO, ZIP_COMPRESSION_MODE
-
 
 ONE_MB = 1 << 20
 MULTIPART_LIMIT = 6 * ONE_MB
@@ -51,7 +50,7 @@ class Push(BasicCommand):
             'help_text': (
                 'Required. The name of the AWS CodeDeploy application to be '
                 'associated with the application revision.'
-            )
+            ),
         },
         {
             'name': 's3-location',
@@ -63,7 +62,7 @@ class Push(BasicCommand):
                 r'a bucket and a key that represent the Amazon S3 bucket name '
                 r'and the object key name. Content will be zipped before '
                 r'uploading. Use the format s3://\<bucket\>/\<key\>'
-            )
+            ),
         },
         {
             'name': 'ignore-hidden-files',
@@ -75,13 +74,13 @@ class Push(BasicCommand):
                 'and upload hidden files to Amazon S3; otherwise, set the '
                 '--no-ignore-hidden-files flag (the default) to bundle and '
                 'upload hidden files to Amazon S3.'
-            )
+            ),
         },
         {
             'name': 'no-ignore-hidden-files',
             'action': 'store_true',
             'default': False,
-            'group_name': 'ignore-hidden-files'
+            'group_name': 'ignore-hidden-files',
         },
         {
             'name': 'source',
@@ -92,7 +91,7 @@ class Push(BasicCommand):
                 'accompanying AppSpec file on the development machine to be '
                 'zipped and uploaded to Amazon S3. If not specified, the '
                 'current directory is used.'
-            )
+            ),
         },
         {
             'name': 'description',
@@ -102,8 +101,8 @@ class Push(BasicCommand):
                 'revision. If not specified, the default string "Uploaded by '
                 'AWS CLI \'time\' UTC" is used, where \'time\' is the current '
                 'system time in Coordinated Universal Time (UTC).'
-            )
-        }
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -112,34 +111,32 @@ class Push(BasicCommand):
             'codedeploy',
             region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         self.s3 = self._session.create_client(
-            's3',
-            region_name=parsed_globals.region
+            's3', region_name=parsed_globals.region
         )
         self._push(parsed_args)
         return 0
 
     def _validate_args(self, parsed_args):
         validate_s3_location(parsed_args, 's3_location')
-        if parsed_args.ignore_hidden_files \
-                and parsed_args.no_ignore_hidden_files:
+        if (
+            parsed_args.ignore_hidden_files
+            and parsed_args.no_ignore_hidden_files
+        ):
             raise ParamValidationError(
                 'You cannot specify both --ignore-hidden-files and '
                 '--no-ignore-hidden-files.'
             )
         if not parsed_args.description:
             parsed_args.description = (
-                'Uploaded by AWS CLI {0} UTC'.format(
-                    datetime.utcnow().isoformat()
-                )
+                f'Uploaded by AWS CLI {datetime.utcnow().isoformat()} UTC'
             )
 
     def _push(self, params):
         with self._compress(
-                params.source,
-                params.ignore_hidden_files
+            params.source, params.ignore_hidden_files
         ) as bundle:
             try:
                 upload_response = self._upload_to_s3(params, bundle)
@@ -148,36 +145,26 @@ class Push(BasicCommand):
                     params.version = upload_response['VersionId']
             except Exception as e:
                 raise RuntimeError(
-                    'Failed to upload \'%s\' to \'%s\': %s' %
-                    (params.source,
-                     params.s3_location,
-                     str(e))
+                    'Failed to upload \'%s\' to \'%s\': %s'
+                    % (params.source, params.s3_location, str(e))
                 )
         self._register_revision(params)
 
         if 'version' in params:
-            version_string = ',version={0}'.format(params.version)
+            version_string = f',version={params.version}'
         else:
             version_string = ''
         s3location_string = (
-            '--s3-location bucket={0},key={1},'
-            'bundleType=zip,eTag={2}{3}'.format(
-                params.bucket,
-                params.key,
-                params.eTag,
-                version_string
-            )
+            f'--s3-location bucket={params.bucket},key={params.key},'
+            f'bundleType=zip,eTag={params.eTag}{version_string}'
         )
         sys.stdout.write(
             'To deploy with this revision, run:\n'
             'aws deploy create-deployment '
-            '--application-name {0} {1} '
+            f'--application-name {params.application_name} {s3location_string} '
             '--deployment-group-name <deployment-group-name> '
             '--deployment-config-name <deployment-config-name> '
-            '--description <description>\n'.format(
-                params.application_name,
-                s3location_string
-            )
+            '--description <description>\n'
         )
 
     @contextlib.contextmanager
@@ -197,14 +184,12 @@ class Push(BasicCommand):
                     for fn in files:
                         filename = os.path.join(root, fn)
                         filename = os.path.abspath(filename)
-                        arcname = filename[len(source_path) + 1:]
+                        arcname = filename[len(source_path) + 1 :]
                         if filename == appspec_path:
                             contains_appspec = True
                         zf.write(filename, arcname, ZIP_COMPRESSION_MODE)
                 if not contains_appspec:
-                    raise RuntimeError(
-                        '{0} was not found'.format(appspec_path)
-                    )
+                    raise RuntimeError(f'{appspec_path} was not found')
             finally:
                 zf.close()
             yield tf
@@ -213,16 +198,10 @@ class Push(BasicCommand):
         size_remaining = self._bundle_size(bundle)
         if size_remaining < MULTIPART_LIMIT:
             return self.s3.put_object(
-                Bucket=params.bucket,
-                Key=params.key,
-                Body=bundle
+                Bucket=params.bucket, Key=params.key, Body=bundle
             )
         else:
-            return self._multipart_upload_to_s3(
-                params,
-                bundle,
-                size_remaining
-            )
+            return self._multipart_upload_to_s3(params, bundle, size_remaining)
 
     def _bundle_size(self, bundle):
         bundle.seek(0, 2)
@@ -232,8 +211,7 @@ class Push(BasicCommand):
 
     def _multipart_upload_to_s3(self, params, bundle, size_remaining):
         create_response = self.s3.create_multipart_upload(
-            Bucket=params.bucket,
-            Key=params.key
+            Bucket=params.bucket, Key=params.key
         )
         upload_id = create_response['UploadId']
         try:
@@ -247,25 +225,22 @@ class Push(BasicCommand):
                     Key=params.key,
                     UploadId=upload_id,
                     PartNumber=part_num,
-                    Body=BytesIO(data)
+                    Body=BytesIO(data),
+                )
+                multipart_list.append(
+                    {'PartNumber': part_num, 'ETag': upload_response['ETag']}
                 )
-                multipart_list.append({
-                    'PartNumber': part_num,
-                    'ETag': upload_response['ETag']
-                })
                 part_num += 1
                 size_remaining -= len(data)
             return self.s3.complete_multipart_upload(
                 Bucket=params.bucket,
                 Key=params.key,
                 UploadId=upload_id,
-                MultipartUpload={'Parts': multipart_list}
+                MultipartUpload={'Parts': multipart_list},
             )
         except ClientError as e:
             self.s3.abort_multipart_upload(
-                Bucket=params.bucket,
-                Key=params.key,
-                UploadId=upload_id
+                Bucket=params.bucket, Key=params.key, UploadId=upload_id
             )
             raise e
 
@@ -276,13 +251,13 @@ class Push(BasicCommand):
                 'bucket': params.bucket,
                 'key': params.key,
                 'bundleType': 'zip',
-                'eTag': params.eTag
-            }
+                'eTag': params.eTag,
+            },
         }
         if 'version' in params:
             revision['s3Location']['version'] = params.version
         self.codedeploy.register_application_revision(
             applicationName=params.application_name,
             revision=revision,
-            description=params.description
+            description=params.description,
         )
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/register.py 2.31.35-1/awscli/customizations/codedeploy/register.py
--- 2.23.6-1/awscli/customizations/codedeploy/register.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/register.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,16 @@
 
 import sys
 
-from awscli.customizations.commands import BasicCommand
 from awscli.customizations.codedeploy.systems import DEFAULT_CONFIG_FILE
-from awscli.customizations.codedeploy.utils import \
-    validate_region, validate_instance_name, validate_tags, \
-    validate_iam_user_arn, INSTANCE_NAME_ARG, IAM_USER_ARN_ARG
+from awscli.customizations.codedeploy.utils import (
+    IAM_USER_ARN_ARG,
+    INSTANCE_NAME_ARG,
+    validate_iam_user_arn,
+    validate_instance_name,
+    validate_region,
+    validate_tags,
+)
+from awscli.customizations.commands import BasicCommand
 
 
 class Register(BasicCommand):
@@ -38,15 +43,15 @@ class Register(BasicCommand):
                 "Key": {
                     "description": "The tag key.",
                     "type": "string",
-                    "required": True
+                    "required": True,
                 },
                 "Value": {
                     "description": "The tag value.",
                     "type": "string",
-                    "required": True
-                }
-            }
-        }
+                    "required": True,
+                },
+            },
+        },
     }
 
     ARG_TABLE = [
@@ -60,9 +65,9 @@ class Register(BasicCommand):
             'help_text': (
                 'Optional. The list of key/value pairs to tag the on-premises '
                 'instance.'
-            )
+            ),
         },
-        IAM_USER_ARN_ARG
+        IAM_USER_ARN_ARG,
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -77,11 +82,10 @@ class Register(BasicCommand):
             'codedeploy',
             region_name=params.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         self.iam = self._session.create_client(
-            'iam',
-            region_name=params.region
+            'iam', region_name=params.region
         )
 
         try:
@@ -94,23 +98,21 @@ class Register(BasicCommand):
             if params.tags:
                 self._add_tags(params)
             sys.stdout.write(
-                'Copy the on-premises configuration file named {0} to the '
+                f'Copy the on-premises configuration file named {DEFAULT_CONFIG_FILE} to the '
                 'on-premises instance, and run the following command on the '
                 'on-premises instance to install and configure the AWS '
                 'CodeDeploy Agent:\n'
-                'aws deploy install --config-file {0}\n'.format(
-                    DEFAULT_CONFIG_FILE
-                )
+                f'aws deploy install --config-file {DEFAULT_CONFIG_FILE}\n'
             )
         except Exception as e:
             sys.stdout.flush()
             sys.stderr.write(
                 'ERROR\n'
-                '{0}\n'
+                f'{e}\n'
                 'Register the on-premises instance by following the '
                 'instructions in "Configure Existing On-Premises Instances by '
                 'Using AWS CodeDeploy" in the AWS CodeDeploy User '
-                'Guide.\n'.format(e)
+                'Guide.\n'
             )
             return 255
         return 0
@@ -119,31 +121,18 @@ class Register(BasicCommand):
         sys.stdout.write('Creating the IAM user... ')
         params.user_name = params.instance_name
         response = self.iam.create_user(
-            Path='/AWS/CodeDeploy/',
-            UserName=params.user_name
+            Path='/AWS/CodeDeploy/', UserName=params.user_name
         )
         params.iam_user_arn = response['User']['Arn']
-        sys.stdout.write(
-            'DONE\n'
-            'IamUserArn: {0}\n'.format(
-                params.iam_user_arn
-            )
-        )
+        sys.stdout.write(f'DONE\nIamUserArn: {params.iam_user_arn}\n')
 
     def _create_access_key(self, params):
         sys.stdout.write('Creating the IAM user access key... ')
-        response = self.iam.create_access_key(
-            UserName=params.user_name
-        )
+        response = self.iam.create_access_key(UserName=params.user_name)
         params.access_key_id = response['AccessKey']['AccessKeyId']
         params.secret_access_key = response['AccessKey']['SecretAccessKey']
         sys.stdout.write(
-            'DONE\n'
-            'AccessKeyId: {0}\n'
-            'SecretAccessKey: {1}\n'.format(
-                params.access_key_id,
-                params.secret_access_key
-            )
+            f'DONE\nAccessKeyId: {params.access_key_id}\nSecretAccessKey: {params.secret_access_key}\n'
         )
 
     def _create_user_policy(self, params):
@@ -162,49 +151,37 @@ class Register(BasicCommand):
         self.iam.put_user_policy(
             UserName=params.user_name,
             PolicyName=params.policy_name,
-            PolicyDocument=params.policy_document
+            PolicyDocument=params.policy_document,
         )
         sys.stdout.write(
-            'DONE\n'
-            'PolicyName: {0}\n'
-            'PolicyDocument: {1}\n'.format(
-                params.policy_name,
-                params.policy_document
-            )
+            f'DONE\nPolicyName: {params.policy_name}\nPolicyDocument: {params.policy_document}\n'
         )
 
     def _create_config(self, params):
         sys.stdout.write(
-            'Creating the on-premises instance configuration file named {0}'
-            '...'.format(DEFAULT_CONFIG_FILE)
+            f'Creating the on-premises instance configuration file named {DEFAULT_CONFIG_FILE}'
+            '...'
         )
         with open(DEFAULT_CONFIG_FILE, 'w') as f:
             f.write(
                 '---\n'
-                'region: {0}\n'
-                'iam_user_arn: {1}\n'
-                'aws_access_key_id: {2}\n'
-                'aws_secret_access_key: {3}\n'.format(
-                    params.region,
-                    params.iam_user_arn,
-                    params.access_key_id,
-                    params.secret_access_key
-                )
+                f'region: {params.region}\n'
+                f'iam_user_arn: {params.iam_user_arn}\n'
+                f'aws_access_key_id: {params.access_key_id}\n'
+                f'aws_secret_access_key: {params.secret_access_key}\n'
             )
         sys.stdout.write('DONE\n')
 
     def _register_instance(self, params):
         sys.stdout.write('Registering the on-premises instance... ')
         self.codedeploy.register_on_premises_instance(
-            instanceName=params.instance_name,
-            iamUserArn=params.iam_user_arn
+            instanceName=params.instance_name, iamUserArn=params.iam_user_arn
         )
         sys.stdout.write('DONE\n')
 
     def _add_tags(self, params):
         sys.stdout.write('Adding tags to the on-premises instance... ')
         self.codedeploy.add_tags_to_on_premises_instances(
-            tags=params.tags,
-            instanceNames=[params.instance_name]
+            tags=params.tags, instanceNames=[params.instance_name]
         )
         sys.stdout.write('DONE\n')
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/systems.py 2.31.35-1/awscli/customizations/codedeploy/systems.py
--- 2.23.6-1/awscli/customizations/codedeploy/systems.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/systems.py	2025-11-12 19:17:29.000000000 +0000
@@ -26,10 +26,7 @@ class System:
 
     def __init__(self, params):
         self.session = params.session
-        self.s3 = self.session.create_client(
-            's3',
-            region_name=params.region
-        )
+        self.s3 = self.session.create_client('s3', region_name=params.region)
 
     def validate_administrator(self):
         raise NotImplementedError('validate_administrator')
@@ -44,7 +41,7 @@ class System:
 class Windows(System):
     CONFIG_DIR = r'C:\ProgramData\Amazon\CodeDeploy'
     CONFIG_FILE = 'conf.onpremises.yml'
-    CONFIG_PATH = r'{0}\{1}'.format(CONFIG_DIR, CONFIG_FILE)
+    CONFIG_PATH = rf'{CONFIG_DIR}\{CONFIG_FILE}'
     INSTALLER = 'codedeploy-agent.msi'
 
     def validate_administrator(self):
@@ -60,11 +57,13 @@ class Windows(System):
         process = subprocess.Popen(
             [
                 'powershell.exe',
-                '-Command', 'Stop-Service',
-                '-Name', 'codedeployagent'
+                '-Command',
+                'Stop-Service',
+                '-Name',
+                'codedeployagent',
             ],
             stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE
+            stderr=subprocess.PIPE,
         )
         (output, error) = process.communicate()
         not_found = (
@@ -72,7 +71,7 @@ class Windows(System):
         )
         if process.returncode != 0 and not_found not in error:
             raise RuntimeError(
-                'Failed to stop the AWS CodeDeploy Agent:\n{0}'.format(error)
+                f'Failed to stop the AWS CodeDeploy Agent:\n{error}'
             )
 
         response = self.s3.get_object(Bucket=params.bucket, Key=params.key)
@@ -81,26 +80,33 @@ class Windows(System):
 
         subprocess.check_call(
             [
-                r'.\{0}'.format(self.INSTALLER),
+                rf'.\{self.INSTALLER}',
                 '/quiet',
-                '/l', r'.\codedeploy-agent-install-log.txt'
+                '/l',
+                r'.\codedeploy-agent-install-log.txt',
             ],
-            shell=True
+            shell=True,
+        )
+        subprocess.check_call(
+            [
+                'powershell.exe',
+                '-Command',
+                'Restart-Service',
+                '-Name',
+                'codedeployagent',
+            ]
         )
-        subprocess.check_call([
-            'powershell.exe',
-            '-Command', 'Restart-Service',
-            '-Name', 'codedeployagent'
-        ])
 
         process = subprocess.Popen(
             [
                 'powershell.exe',
-                '-Command', 'Get-Service',
-                '-Name', 'codedeployagent'
+                '-Command',
+                'Get-Service',
+                '-Name',
+                'codedeployagent',
             ],
             stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE
+            stderr=subprocess.PIPE,
         )
         (output, error) = process.communicate()
         if "Running" not in output:
@@ -112,11 +118,13 @@ class Windows(System):
         process = subprocess.Popen(
             [
                 'powershell.exe',
-                '-Command', 'Stop-Service',
-                '-Name', 'codedeployagent'
+                '-Command',
+                'Stop-Service',
+                '-Name',
+                'codedeployagent',
             ],
             stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE
+            stderr=subprocess.PIPE,
         )
         (output, error) = process.communicate()
         not_found = (
@@ -126,32 +134,34 @@ class Windows(System):
             self._remove_agent()
         elif not_found not in error:
             raise RuntimeError(
-                'Failed to stop the AWS CodeDeploy Agent:\n{0}'.format(error)
+                f'Failed to stop the AWS CodeDeploy Agent:\n{error}'
             )
 
     def _remove_agent(self):
         process = subprocess.Popen(
             [
                 'wmic',
-                'product', 'where', 'name="CodeDeploy Host Agent"',
-                'call', 'uninstall', '/nointeractive'
+                'product',
+                'where',
+                'name="CodeDeploy Host Agent"',
+                'call',
+                'uninstall',
+                '/nointeractive',
             ],
             stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE
+            stderr=subprocess.PIPE,
         )
         (output, error) = process.communicate()
         if process.returncode != 0:
             raise RuntimeError(
-                'Failed to uninstall the AWS CodeDeploy Agent:\n{0}'.format(
-                    error
-                )
+                f'Failed to uninstall the AWS CodeDeploy Agent:\n{error}'
             )
 
 
 class Linux(System):
     CONFIG_DIR = '/etc/codedeploy-agent/conf'
     CONFIG_FILE = DEFAULT_CONFIG_FILE
-    CONFIG_PATH = '{0}/{1}'.format(CONFIG_DIR, CONFIG_FILE)
+    CONFIG_PATH = f'{CONFIG_DIR}/{CONFIG_FILE}'
     INSTALLER = 'install'
 
     def validate_administrator(self):
@@ -169,9 +179,7 @@ class Linux(System):
         with open(self.INSTALLER, 'wb') as f:
             f.write(response['Body'].read())
 
-        subprocess.check_call(
-            ['chmod', '+x', './{0}'.format(self.INSTALLER)]
-        )
+        subprocess.check_call(['chmod', '+x', f'./{self.INSTALLER}'])
 
         credentials = self.session.get_credentials()
         environment = os.environ.copy()
@@ -180,10 +188,7 @@ class Linux(System):
         environment['AWS_SECRET_ACCESS_KEY'] = credentials.secret_key
         if credentials.token is not None:
             environment['AWS_SESSION_TOKEN'] = credentials.token
-        subprocess.check_call(
-            ['./{0}'.format(self.INSTALLER), 'auto'],
-            env=environment
-        )
+        subprocess.check_call([f'./{self.INSTALLER}', 'auto'], env=environment)
 
     def uninstall(self, params):
         process = self._stop_agent(params)
@@ -200,12 +205,12 @@ class Linux(System):
         process = subprocess.Popen(
             ['service', 'codedeploy-agent', 'stop'],
             stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE
+            stderr=subprocess.PIPE,
         )
         (output, error) = process.communicate()
         if process.returncode != 0 and params.not_found_msg not in error:
             raise RuntimeError(
-                'Failed to stop the AWS CodeDeploy Agent:\n{0}'.format(error)
+                f'Failed to stop the AWS CodeDeploy Agent:\n{error}'
             )
         return process
 
@@ -231,5 +236,7 @@ class RHEL(Linux):
         subprocess.check_call(['yum', '-y', 'erase', 'codedeploy-agent'])
 
     def _stop_agent(self, params):
-        params.not_found_msg = 'Redirecting to /bin/systemctl stop  codedeploy-agent.service'
+        params.not_found_msg = (
+            'Redirecting to /bin/systemctl stop  codedeploy-agent.service'
+        )
         return Linux._stop_agent(self, params)
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/uninstall.py 2.31.35-1/awscli/customizations/codedeploy/uninstall.py
--- 2.23.6-1/awscli/customizations/codedeploy/uninstall.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/uninstall.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import errno
 import os
 import sys
-import errno
 
-from awscli.customizations.codedeploy.utils import validate_instance, \
-    validate_region
+from awscli.customizations.codedeploy.utils import (
+    validate_instance,
+    validate_region,
+)
 from awscli.customizations.commands import BasicCommand
 
 
@@ -41,11 +43,11 @@ class Uninstall(BasicCommand):
             sys.stdout.flush()
             sys.stderr.write(
                 'ERROR\n'
-                '{0}\n'
+                f'{e}\n'
                 'Uninstall the AWS CodeDeploy Agent on the on-premises '
                 'instance by following the instructions in "Configure '
                 'Existing On-Premises Instances by Using AWS CodeDeploy" in '
-                'the AWS CodeDeploy User Guide.\n'.format(e)
+                'the AWS CodeDeploy User Guide.\n'
             )
             return 255
         return 0
diff -pruN 2.23.6-1/awscli/customizations/codedeploy/utils.py 2.31.35-1/awscli/customizations/codedeploy/utils.py
--- 2.23.6-1/awscli/customizations/codedeploy/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/codedeploy/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,20 @@
 
 import platform
 import re
-
-import awscli.compat
-from awscli.compat import urlopen, URLError
-from awscli.customizations.codedeploy.systems import System, Ubuntu, Windows, RHEL
-from awscli.customizations.exceptions import ParamValidationError
-from awscli.customizations.exceptions import ConfigurationError
 from socket import timeout
 
+import awscli.compat
+from awscli.compat import URLError, urlopen
+from awscli.customizations.codedeploy.systems import (
+    RHEL,
+    System,
+    Ubuntu,
+    Windows,
+)
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 
 MAX_INSTANCE_NAME_LENGTH = 100
 MAX_TAGS_PER_INSTANCE = 10
@@ -34,9 +40,7 @@ INSTANCE_NAME_ARG = {
     'name': 'instance-name',
     'synopsis': '--instance-name <instance-name>',
     'required': True,
-    'help_text': (
-        'Required. The name of the on-premises instance.'
-    )
+    'help_text': ('Required. The name of the on-premises instance.'),
 }
 
 IAM_USER_ARN_ARG = {
@@ -45,7 +49,7 @@ IAM_USER_ARN_ARG = {
     'required': False,
     'help_text': (
         'Optional. The IAM user associated with the on-premises instance.'
-    )
+    ),
 }
 
 
@@ -70,9 +74,7 @@ def validate_instance_name(params):
             )
         if len(params.instance_name) > MAX_INSTANCE_NAME_LENGTH:
             raise ParamValidationError(
-                'Instance name cannot be longer than {0} characters.'.format(
-                    MAX_INSTANCE_NAME_LENGTH
-                )
+                f'Instance name cannot be longer than {MAX_INSTANCE_NAME_LENGTH} characters.'
             )
 
 
@@ -80,28 +82,23 @@ def validate_tags(params):
     if params.tags:
         if len(params.tags) > MAX_TAGS_PER_INSTANCE:
             raise ParamValidationError(
-                'Instances can only have a maximum of {0} tags.'.format(
-                    MAX_TAGS_PER_INSTANCE
-                )
+                f'Instances can only have a maximum of {MAX_TAGS_PER_INSTANCE} tags.'
             )
         for tag in params.tags:
             if len(tag['Key']) > MAX_TAG_KEY_LENGTH:
                 raise ParamValidationError(
-                    'Tag Key cannot be longer than {0} characters.'.format(
-                        MAX_TAG_KEY_LENGTH
-                    )
+                    f'Tag Key cannot be longer than {MAX_TAG_KEY_LENGTH} characters.'
                 )
             if len(tag['Value']) > MAX_TAG_VALUE_LENGTH:
                 raise ParamValidationError(
-                    'Tag Value cannot be longer than {0} characters.'.format(
-                        MAX_TAG_VALUE_LENGTH
-                    )
+                    f'Tag Value cannot be longer than {MAX_TAG_VALUE_LENGTH} characters.'
                 )
 
 
 def validate_iam_user_arn(params):
-    if params.iam_user_arn and \
-            not re.match(IAM_USER_ARN_PATTERN, params.iam_user_arn):
+    if params.iam_user_arn and not re.match(
+        IAM_USER_ARN_PATTERN, params.iam_user_arn
+    ):
         raise ParamValidationError('Invalid IAM user ARN.')
 
 
@@ -115,9 +112,7 @@ def validate_instance(params):
     elif platform.system() == 'Windows':
         params.system = Windows(params)
     if 'system' not in params:
-        raise RuntimeError(
-            System.UNSUPPORTED_SYSTEM_MSG
-        )
+        raise RuntimeError(System.UNSUPPORTED_SYSTEM_MSG)
     try:
         urlopen('http://169.254.169.254/latest/meta-data/', timeout=1)
         raise RuntimeError('Amazon EC2 instances are not supported.')
@@ -137,7 +132,5 @@ def validate_s3_location(params, arg_nam
             else:
                 raise ParamValidationError(
                     '--{0} must specify the Amazon S3 URL format as '
-                    's3://<bucket>/<key>.'.format(
-                        arg_name.replace('_', '-')
-                    )
+                    's3://<bucket>/<key>.'.format(arg_name.replace('_', '-'))
                 )
diff -pruN 2.23.6-1/awscli/customizations/commands.py 2.31.35-1/awscli/customizations/commands.py
--- 2.23.6-1/awscli/customizations/commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
-import logging
 import copy
+import logging
 import os
 
 from botocore import model
@@ -10,20 +10,19 @@ import awscli
 from awscli.argparser import ArgTableArgParser, SubCommandArgParser
 from awscli.argprocess import unpack_argument, unpack_cli_arg
 from awscli.arguments import CustomArgument, create_argument_model_from_schema
+from awscli.bcdoc import docevents
 from awscli.clidocs import OperationDocumentEventHandler
 from awscli.commands import CLICommand
-from awscli.bcdoc import docevents
+from awscli.customizations.exceptions import ParamValidationError
 from awscli.help import HelpCommand
 from awscli.schema import SchemaTransformer
 from awscli.utils import add_command_lineage_to_user_agent_extra
-from awscli.customizations.exceptions import ParamValidationError
 
 LOG = logging.getLogger(__name__)
 _open = open
 
 
-class _FromFile(object):
-
+class _FromFile:
     def __init__(self, *paths, **kwargs):
         """
         ``**kwargs`` can contain a ``root_module`` argument
@@ -43,7 +42,6 @@ class _FromFile(object):
 
 
 class BasicCommand(CLICommand):
-
     """Basic top level command with no subcommands.
 
     If you want to create a new command, subclass this and
@@ -140,17 +138,21 @@ class BasicCommand(CLICommand):
         # an arg parser and parse them.
         self._subcommand_table = self._build_subcommand_table()
         self._arg_table = self._build_arg_table()
-        event = 'before-building-argument-table-parser.%s' % \
-            ".".join(self.lineage_names)
-        self._session.emit(event, argument_table=self._arg_table, args=args,
-                           session=self._session)
+        event = f'before-building-argument-table-parser.{".".join(self.lineage_names)}'
+        self._session.emit(
+            event,
+            argument_table=self._arg_table,
+            args=args,
+            session=self._session,
+        )
         maybe_parsed_subcommand = self._parse_potential_subcommand(
             args, self._subcommand_table
         )
         if maybe_parsed_subcommand is not None:
             new_args, subcommand_name = maybe_parsed_subcommand
             return self._subcommand_table[subcommand_name](
-                new_args, parsed_globals)
+                new_args, parsed_globals
+            )
         parser = ArgTableArgParser(self.arg_table, self.subcommand_table)
         parsed_args, remaining = parser.parse_known_args(args)
 
@@ -166,20 +168,18 @@ class BasicCommand(CLICommand):
                 cli_argument = self.arg_table[xformed]
 
             value = unpack_argument(
-                self._session,
-                'custom',
-                self.name,
-                cli_argument,
-                value
+                self._session, 'custom', self.name, cli_argument, value
             )
 
             # If this parameter has a schema defined, then allow plugins
             # a chance to process and override its value.
             if self._should_allow_plugins_override(cli_argument, value):
-                override = self._session\
-                    .emit_first_non_none_response(
-                        'process-cli-arg.%s.%s' % ('custom', self.name),
-                        cli_argument=cli_argument, value=value, operation=None)
+                override = self._session.emit_first_non_none_response(
+                    f'process-cli-arg.custom.{self.name}',
+                    cli_argument=cli_argument,
+                    value=value,
+                    operation=None,
+                )
 
                 if override is not None:
                     # A plugin supplied a conversion
@@ -189,7 +189,8 @@ class BasicCommand(CLICommand):
                     # correct Python type (dict, list, etc)
                     value = unpack_cli_arg(cli_argument, value)
                 self._validate_value_against_schema(
-                    cli_argument.argument_model, value)
+                    cli_argument.argument_model, value
+                )
 
             setattr(parsed_args, key, value)
         if hasattr(self._session, 'user_agent_extra'):
@@ -201,7 +202,7 @@ class BasicCommand(CLICommand):
             # function for this top level command.
             if remaining:
                 raise ParamValidationError(
-                    "Unknown options: %s" % ','.join(remaining)
+                    f"Unknown options: {','.join(remaining)}"
                 )
             rc = self._run_main(parsed_args, parsed_globals)
             if rc is None:
@@ -209,12 +210,11 @@ class BasicCommand(CLICommand):
             else:
                 return rc
 
-    def _validate_value_against_schema(self, model, value):
+    def _validate_value_against_schema(self, model, value):  # noqa: F811
         validate_parameters(value, model)
 
     def _should_allow_plugins_override(self, param, value):
-        if (param and param.argument_model is not None and
-                value is not None):
+        if param and param.argument_model is not None and value is not None:
             return True
         return False
 
@@ -236,10 +236,12 @@ class BasicCommand(CLICommand):
             subcommand_class = subcommand['command_class']
             subcommand_table[subcommand_name] = subcommand_class(self._session)
         name = '_'.join([c.name for c in self.lineage])
-        self._session.emit('building-command-table.%s' % name,
-                           command_table=subcommand_table,
-                           session=self._session,
-                           command_object=self)
+        self._session.emit(
+            f'building-command-table.{name}',
+            command_table=subcommand_table,
+            session=self._session,
+            command_object=self,
+        )
         self._add_lineage(subcommand_table)
         return subcommand_table
 
@@ -251,8 +253,12 @@ class BasicCommand(CLICommand):
         command_help_table = {}
         if self.SUBCOMMANDS:
             command_help_table = self.create_help_command_table()
-        return BasicHelp(self._session, self, command_table=command_help_table,
-                         arg_table=self.arg_table)
+        return BasicHelp(
+            self._session,
+            self,
+            command_table=command_help_table,
+            arg_table=self.arg_table,
+        )
 
     def create_help_command_table(self):
         """
@@ -268,15 +274,16 @@ class BasicCommand(CLICommand):
     def _build_arg_table(self):
         arg_table = OrderedDict()
         name = '_'.join([c.name for c in self.lineage])
-        self._session.emit('building-arg-table.%s' % name,
-                           arg_table=self.ARG_TABLE)
+        self._session.emit(
+            f'building-arg-table.{name}', arg_table=self.ARG_TABLE
+        )
         for arg_data in self.ARG_TABLE:
-
             # If a custom schema was passed in, create the argument_model
             # so that it can be validated and docs can be generated.
             if 'schema' in arg_data:
                 argument_model = create_argument_model_from_schema(
-                    arg_data.pop('schema'))
+                    arg_data.pop('schema')
+                )
                 arg_data['argument_model'] = argument_model
             custom_argument = CustomArgument(**arg_data)
 
@@ -319,21 +326,27 @@ class BasicCommand(CLICommand):
     def _raise_usage_error(self):
         lineage = ' '.join([c.name for c in self.lineage])
         error_msg = (
-            "usage: aws [options] %s <subcommand> "
-            "[parameters]\naws: error: too few arguments"
-        ) % lineage
+            f"usage: aws [options] {lineage} <subcommand> "
+            "[parameters]\naws: [ERROR]: too few arguments"
+        )
         raise ParamValidationError(error_msg)
 
     def _add_customization_to_user_agent(self):
-        add_command_lineage_to_user_agent_extra(self._session, self.lineage_names)
+        add_command_lineage_to_user_agent_extra(
+            self._session, self.lineage_names
+        )
 
 
 class BasicHelp(HelpCommand):
-
-    def __init__(self, session, command_object, command_table, arg_table,
-                 event_handler_class=None):
-        super(BasicHelp, self).__init__(session, command_object,
-                                        command_table, arg_table)
+    def __init__(
+        self,
+        session,
+        command_object,
+        command_table,
+        arg_table,
+        event_handler_class=None,
+    ):
+        super().__init__(session, command_object, command_table, arg_table)
         # This is defined in HelpCommand so we're matching the
         # casing here.
         if event_handler_class is None:
@@ -366,6 +379,16 @@ class BasicHelp(HelpCommand):
     def event_class(self):
         return '.'.join(self.obj.lineage_names)
 
+    @property
+    def url(self):
+        # If the operation command has a subcommand table with commands
+        # in it, treat it as a service command as opposed to an operation
+        # command. This is to support things like a customization command
+        # that rely on the `BasicHelp` object.
+        if len(self.command_table) > 0:
+            return f"{self._base_remote_url}/reference/{self.event_class.replace('.', '/')}/index.html"
+        return f"{self._base_remote_url}/reference/{self.event_class.replace('.', '/')}.html"
+
     def _get_doc_contents(self, attr_name):
         value = getattr(self, attr_name)
         if isinstance(value, BasicCommand.FROM_FILE):
@@ -376,7 +399,9 @@ class BasicHelp(HelpCommand):
             root_module = value.root_module
             doc_path = os.path.join(
                 os.path.abspath(os.path.dirname(root_module.__file__)),
-                'examples', trailing_path)
+                'examples',
+                trailing_path,
+            )
             with _open(doc_path) as f:
                 return f.read()
         else:
@@ -389,14 +414,18 @@ class BasicHelp(HelpCommand):
         # We pass ourselves along so that we can, in turn, get passed
         # to all event handlers.
         docevents.generate_events(self.session, self)
-        self.renderer.render(self.doc.getvalue())
+
+        if self._help_output_format == 'url':
+            self.renderer.render(self.url.encode())
+        else:
+            self.renderer.render(self.doc.getvalue())
+
         instance.unregister()
 
 
 class BasicDocHandler(OperationDocumentEventHandler):
-
     def __init__(self, help_command):
-        super(BasicDocHandler, self).__init__(help_command)
+        super().__init__(help_command)
         self.doc = help_command.doc
 
     def doc_description(self, help_command, **kwargs):
@@ -406,8 +435,7 @@ class BasicDocHandler(OperationDocumentE
 
     def doc_synopsis_start(self, help_command, **kwargs):
         if not help_command.synopsis:
-            super(BasicDocHandler, self).doc_synopsis_start(
-                help_command=help_command, **kwargs)
+            super().doc_synopsis_start(help_command=help_command, **kwargs)
         else:
             self.doc.style.h2('Synopsis')
             self.doc.style.start_codeblock()
@@ -424,18 +452,18 @@ class BasicDocHandler(OperationDocumentE
                     # This arg is already documented so we can move on.
                     return
                 option_str = ' | '.join(
-                    [a.cli_name for a in
-                     self._arg_groups[argument.group_name]])
+                    [a.cli_name for a in self._arg_groups[argument.group_name]]
+                )
                 self._documented_arg_groups.append(argument.group_name)
             elif argument.cli_type_name == 'boolean':
-                option_str = '%s' % argument.cli_name
+                option_str = f'{argument.cli_name}'
             elif argument.nargs == '+':
-                option_str = "%s <value> [<value>...]" % argument.cli_name
+                option_str = f"{argument.cli_name} <value> [<value>...]"
             else:
-                option_str = '%s <value>' % argument.cli_name
+                option_str = f'{argument.cli_name} <value>'
             if not (argument.required or argument.positional_arg):
-                option_str = '[%s]' % option_str
-            doc.writeln('%s' % option_str)
+                option_str = f'[{option_str}]'
+            doc.writeln(f'{option_str}')
 
         else:
             # A synopsis has been provided so we don't need to write
@@ -444,8 +472,7 @@ class BasicDocHandler(OperationDocumentE
 
     def doc_synopsis_end(self, help_command, **kwargs):
         if not help_command.synopsis and not help_command.command_table:
-            super(BasicDocHandler, self).doc_synopsis_end(
-                help_command=help_command, **kwargs)
+            super().doc_synopsis_end(help_command=help_command, **kwargs)
         else:
             self.doc.style.end_codeblock()
 
diff -pruN 2.23.6-1/awscli/customizations/configservice/getstatus.py 2.31.35-1/awscli/customizations/configservice/getstatus.py
--- 2.23.6-1/awscli/customizations/configservice/getstatus.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configservice/getstatus.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,8 +25,10 @@ def add_get_status(command_table, sessio
 
 class GetStatusCommand(BasicCommand):
     NAME = 'get-status'
-    DESCRIPTION = ('Reports the status of all of configuration '
-                   'recorders and delivery channels.')
+    DESCRIPTION = (
+        'Reports the status of all of configuration '
+        'recorders and delivery channels.'
+    )
 
     def __init__(self, session):
         self._config_client = None
@@ -42,10 +44,11 @@ class GetStatusCommand(BasicCommand):
         client_args = {
             'verify': parsed_globals.verify_ssl,
             'region_name': parsed_globals.region,
-            'endpoint_url': parsed_globals.endpoint_url
+            'endpoint_url': parsed_globals.endpoint_url,
         }
-        self._config_client = self._session.create_client('config',
-                                                          **client_args)
+        self._config_client = self._session.create_client(
+            'config', **client_args
+        )
 
     def _check_configuration_recorders(self):
         status = self._config_client.describe_configuration_recorder_status()
diff -pruN 2.23.6-1/awscli/customizations/configservice/putconfigurationrecorder.py 2.31.35-1/awscli/customizations/configservice/putconfigurationrecorder.py
--- 2.23.6-1/awscli/customizations/configservice/putconfigurationrecorder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configservice/putconfigurationrecorder.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,7 +18,8 @@ from awscli.arguments import CLIArgument
 def register_modify_put_configuration_recorder(cli):
     cli.register(
         'building-argument-table.configservice.put-configuration-recorder',
-        extract_recording_group)
+        extract_recording_group,
+    )
 
 
 def extract_recording_group(session, argument_table, **kwargs):
@@ -29,10 +30,13 @@ def extract_recording_group(session, arg
     configuration_recorder_argument = argument_table['configuration-recorder']
 
     configuration_recorder_model = copy.deepcopy(
-        configuration_recorder_argument.argument_model)
+        configuration_recorder_argument.argument_model
+    )
     recording_group_model = copy.deepcopy(
-        configuration_recorder_argument.argument_model.
-        members['recordingGroup'])
+        configuration_recorder_argument.argument_model.members[
+            'recordingGroup'
+        ]
+    )
 
     del configuration_recorder_model.members['recordingGroup']
     argument_table['configuration-recorder'] = ConfigurationRecorderArgument(
@@ -41,7 +45,7 @@ def extract_recording_group(session, arg
         operation_model=configuration_recorder_argument._operation_model,
         is_required=True,
         event_emitter=session.get_component('event_emitter'),
-        serialized_name='ConfigurationRecorder'
+        serialized_name='ConfigurationRecorder',
     )
 
     argument_table['recording-group'] = RecordingGroupArgument(
@@ -50,7 +54,7 @@ def extract_recording_group(session, arg
         operation_model=configuration_recorder_argument._operation_model,
         is_required=False,
         event_emitter=session.get_component('event_emitter'),
-        serialized_name='recordingGroup'
+        serialized_name='recordingGroup',
     )
 
 
diff -pruN 2.23.6-1/awscli/customizations/configservice/subscribe.py 2.31.35-1/awscli/customizations/configservice/subscribe.py
--- 2.23.6-1/awscli/customizations/configservice/subscribe.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configservice/subscribe.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,29 +14,43 @@ import json
 import sys
 
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.utils import s3_bucket_exists
 from awscli.customizations.s3.utils import find_bucket_key
+from awscli.customizations.utils import s3_bucket_exists
 
-
-S3_BUCKET = {'name': 's3-bucket', 'required': True,
-             'help_text': ('The S3 bucket that the AWS Config delivery channel'
-                           ' will use. If the bucket does not exist, it will '
-                           'be automatically created. The value for this '
-                           'argument should follow the form '
-                           'bucket/prefix. Note that the prefix is optional.')}
-
-SNS_TOPIC = {'name': 'sns-topic', 'required': True,
-             'help_text': ('The SNS topic that the AWS Config delivery channel'
-                           ' will use. If the SNS topic does not exist, it '
-                           'will be automatically created. Value for this '
-                           'should be a valid SNS topic name or the ARN of an '
-                           'existing SNS topic.')}
-
-IAM_ROLE = {'name': 'iam-role', 'required': True,
-            'help_text': ('The IAM role that the AWS Config configuration '
-                          'recorder will use to record current resource '
-                          'configurations. Value for this should be the '
-                          'ARN of the desired IAM role.')}
+S3_BUCKET = {
+    'name': 's3-bucket',
+    'required': True,
+    'help_text': (
+        'The S3 bucket that the AWS Config delivery channel'
+        ' will use. If the bucket does not exist, it will '
+        'be automatically created. The value for this '
+        'argument should follow the form '
+        'bucket/prefix. Note that the prefix is optional.'
+    ),
+}
+
+SNS_TOPIC = {
+    'name': 'sns-topic',
+    'required': True,
+    'help_text': (
+        'The SNS topic that the AWS Config delivery channel'
+        ' will use. If the SNS topic does not exist, it '
+        'will be automatically created. Value for this '
+        'should be a valid SNS topic name or the ARN of an '
+        'existing SNS topic.'
+    ),
+}
+
+IAM_ROLE = {
+    'name': 'iam-role',
+    'required': True,
+    'help_text': (
+        'The IAM role that the AWS Config configuration '
+        'recorder will use to record current resource '
+        'configurations. Value for this should be the '
+        'ARN of the desired IAM role.'
+    ),
+}
 
 
 def register_subscribe(cli):
@@ -49,10 +63,12 @@ def add_subscribe(command_table, session
 
 class SubscribeCommand(BasicCommand):
     NAME = 'subscribe'
-    DESCRIPTION = ('Subscribes user to AWS Config by creating an AWS Config '
-                   'delivery channel and configuration recorder to track '
-                   'AWS resource configurations. The names of the default '
-                   'channel and configuration recorder will be default.')
+    DESCRIPTION = (
+        'Subscribes user to AWS Config by creating an AWS Config '
+        'delivery channel and configuration recorder to track '
+        'AWS resource configurations. The names of the default '
+        'channel and configuration recorder will be default.'
+    )
     ARG_TABLE = [S3_BUCKET, SNS_TOPIC, IAM_ROLE]
 
     def __init__(self, session):
@@ -79,7 +95,7 @@ class SubscribeCommand(BasicCommand):
         self._config_client.put_configuration_recorder(
             ConfigurationRecorder={
                 'name': name,
-                'roleARN': parsed_args.iam_role
+                'roleARN': parsed_args.iam_role,
             }
         )
 
@@ -87,14 +103,15 @@ class SubscribeCommand(BasicCommand):
         delivery_channel = {
             'name': name,
             's3BucketName': bucket,
-            'snsTopicARN': sns_topic_arn
+            'snsTopicARN': sns_topic_arn,
         }
 
         if prefix:
             delivery_channel['s3KeyPrefix'] = prefix
 
         self._config_client.put_delivery_channel(
-            DeliveryChannel=delivery_channel)
+            DeliveryChannel=delivery_channel
+        )
 
         # Start the configuration recorder.
         self._config_client.start_configuration_recorder(
@@ -106,7 +123,8 @@ class SubscribeCommand(BasicCommand):
         sys.stdout.write('Configuration Recorders: ')
         response = self._config_client.describe_configuration_recorders()
         sys.stdout.write(
-            json.dumps(response['ConfigurationRecorders'], indent=4))
+            json.dumps(response['ConfigurationRecorders'], indent=4)
+        )
         sys.stdout.write('\n\n')
 
         # Describe the delivery channels
@@ -120,17 +138,18 @@ class SubscribeCommand(BasicCommand):
     def _setup_clients(self, parsed_globals):
         client_args = {
             'verify': parsed_globals.verify_ssl,
-            'region_name': parsed_globals.region
+            'region_name': parsed_globals.region,
         }
         self._s3_client = self._session.create_client('s3', **client_args)
         self._sns_client = self._session.create_client('sns', **client_args)
         # Use the specified endpoint only for config related commands.
         client_args['endpoint_url'] = parsed_globals.endpoint_url
-        self._config_client = self._session.create_client('config',
-                                                          **client_args)
+        self._config_client = self._session.create_client(
+            'config', **client_args
+        )
 
 
-class S3BucketHelper(object):
+class S3BucketHelper:
     def __init__(self, s3_client):
         self._s3_client = s3_client
 
@@ -149,16 +168,14 @@ class S3BucketHelper(object):
 
     def _create_bucket(self, bucket):
         region_name = self._s3_client.meta.region_name
-        params = {
-            'Bucket': bucket
-        }
+        params = {'Bucket': bucket}
         bucket_config = {'LocationConstraint': region_name}
         if region_name != 'us-east-1':
             params['CreateBucketConfiguration'] = bucket_config
         self._s3_client.create_bucket(**params)
 
 
-class SNSTopicHelper(object):
+class SNSTopicHelper:
     def __init__(self, sns_client):
         self._sns_client = sns_client
 
diff -pruN 2.23.6-1/awscli/customizations/configure/__init__.py 2.31.35-1/awscli/customizations/configure/__init__.py
--- 2.23.6-1/awscli/customizations/configure/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import string
+
 from awscli.compat import shlex
 
 NOT_SET = '<not set>'
-PREDEFINED_SECTION_NAMES = ('plugins')
+PREDEFINED_SECTION_NAMES = 'plugins'
 _WHITESPACE = ' \t'
 
 
-class ConfigValue(object):
-
+class ConfigValue:
     def __init__(self, value, config_type, config_variable):
         self.value = value
         self.config_type = config_type
diff -pruN 2.23.6-1/awscli/customizations/configure/addmodel.py 2.31.35-1/awscli/customizations/configure/addmodel.py
--- 2.23.6-1/awscli/customizations/configure/addmodel.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/addmodel.py	2025-11-12 19:17:29.000000000 +0000
@@ -76,11 +76,12 @@ def get_model_location(session, service_
     # not the one set by AWS_DATA_PATH)
     data_path = session.get_component('data_loader').CUSTOMER_DATA_PATH
     # Use the version of the model to determine the file's naming convention.
-    service_model_name = (
-        'service-%d.json' % int(
-            float(service_definition.get('version', '2.0'))))
-    return os.path.join(data_path, service_name, api_version,
-        service_model_name)
+    service_model_name = 'service-%d.json' % int(
+        float(service_definition.get('version', '2.0'))
+    )
+    return os.path.join(
+        data_path, service_name, api_version, service_model_name
+    )
 
 
 class AddModelCommand(BasicCommand):
@@ -92,11 +93,18 @@ class AddModelCommand(BasicCommand):
         'provided.'
     )
     ARG_TABLE = [
-        {'name': 'service-model', 'required': True, 'help_text': (
-            'The contents of the service JSON model.')},
-        {'name': 'service-name', 'help_text': (
-            'Overrides the default name used by the service JSON '
-            'model to generate CLI service commands and Boto3 clients.')}
+        {
+            'name': 'service-model',
+            'required': True,
+            'help_text': ('The contents of the service JSON model.'),
+        },
+        {
+            'name': 'service-name',
+            'help_text': (
+                'Overrides the default name used by the service JSON '
+                'model to generate CLI service commands and Boto3 clients.'
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
diff -pruN 2.23.6-1/awscli/customizations/configure/configure.py 2.31.35-1/awscli/customizations/configure/configure.py
--- 2.23.6-1/awscli/customizations/configure/configure.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/configure.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,42 +10,48 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import logging
+import os
+import sys
 
 from botocore.exceptions import ProfileNotFound
 
 from awscli.compat import compat_input
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.configure.addmodel import AddModelCommand
-from awscli.customizations.configure.set import ConfigureSetCommand
+from awscli.customizations.configure.exportcreds import (
+    ConfigureExportCredentialsCommand,
+)
 from awscli.customizations.configure.get import ConfigureGetCommand
-from awscli.customizations.configure.list import ConfigureListCommand
-from awscli.customizations.configure.writer import ConfigFileWriter
 from awscli.customizations.configure.importer import ConfigureImportCommand
+from awscli.customizations.configure.list import ConfigureListCommand
 from awscli.customizations.configure.listprofiles import ListProfilesCommand
-from awscli.customizations.configure.sso import ConfigureSSOCommand
-from awscli.customizations.configure.sso import ConfigureSSOSessionCommand
-from awscli.customizations.configure.exportcreds import \
-    ConfigureExportCredentialsCommand
+from awscli.customizations.configure.mfalogin import ConfigureMFALoginCommand
+from awscli.customizations.configure.set import ConfigureSetCommand
+from awscli.customizations.configure.sso import (
+    ConfigureSSOCommand,
+    ConfigureSSOSessionCommand,
+)
+from awscli.customizations.configure.writer import ConfigFileWriter
 
 from . import mask_value, profile_to_section
 
-
 logger = logging.getLogger(__name__)
 
 
 def register_configure_cmd(cli):
-    cli.register('building-command-table.main',
-                 ConfigureCommand.add_command)
+    cli.register('building-command-table.main', ConfigureCommand.add_command)
 
 
-class InteractivePrompter(object):
-
+class InteractivePrompter:
     def get_value(self, current_value, config_name, prompt_text=''):
-        if config_name in ('aws_access_key_id', 'aws_secret_access_key'):
+        if config_name in (
+            'aws_access_key_id',
+            'aws_secret_access_key',
+            'aws_session_token',
+        ):
             current_value = mask_value(current_value)
-        response = compat_input("%s [%s]: " % (prompt_text, current_value))
+        response = compat_input(f"{prompt_text} [{current_value}]: ")
         if not response:
             # If the user hits enter, we return a value of None
             # instead of an empty string.  That way we can determine
@@ -57,7 +63,7 @@ class InteractivePrompter(object):
 class ConfigureCommand(BasicCommand):
     NAME = 'configure'
     DESCRIPTION = BasicCommand.FROM_FILE()
-    SYNOPSIS = ('aws configure [--profile profile-name]')
+    SYNOPSIS = 'aws configure [--profile profile-name]'
     EXAMPLES = (
         'To create a new configuration::\n'
         '\n'
@@ -84,8 +90,11 @@ class ConfigureCommand(BasicCommand):
         {'name': 'list-profiles', 'command_class': ListProfilesCommand},
         {'name': 'sso', 'command_class': ConfigureSSOCommand},
         {'name': 'sso-session', 'command_class': ConfigureSSOSessionCommand},
-        {'name': 'export-credentials',
-         'command_class': ConfigureExportCredentialsCommand},
+        {'name': 'mfa-login', 'command_class': ConfigureMFALoginCommand},
+        {
+            'name': 'export-credentials',
+            'command_class': ConfigureExportCredentialsCommand,
+        },
     ]
 
     # If you want to add new values to prompt, update this list here.
@@ -93,12 +102,13 @@ class ConfigureCommand(BasicCommand):
         # (logical_name, config_name, prompt_text)
         ('aws_access_key_id', "AWS Access Key ID"),
         ('aws_secret_access_key', "AWS Secret Access Key"),
+        ('aws_session_token', "AWS Session Token"),
         ('region', "Default region name"),
         ('output', "Default output format"),
     ]
 
     def __init__(self, session, prompter=None, config_writer=None):
-        super(ConfigureCommand, self).__init__(session)
+        super().__init__(session)
         if prompter is None:
             prompter = InteractivePrompter()
         self._prompter = prompter
@@ -106,8 +116,24 @@ class ConfigureCommand(BasicCommand):
             config_writer = ConfigFileWriter()
         self._config_writer = config_writer
 
+    def _needs_session_token(self, new_values):
+        """Check if session token is needed based on access key ID."""
+        access_key = new_values.get('aws_access_key_id')
+        return access_key and access_key.startswith('ASIA')
+
+    def _should_prompt_for_session_token(self, new_values, config):
+        """Determine if we should prompt for session token."""
+        # Don't prompt if explicitly switching to long-term credentials
+        new_access_key = new_values.get('aws_access_key_id')
+        if new_access_key and not self._needs_session_token(new_values):
+            return False
+        
+        # Prompt if needed for temporary credentials or if already exists
+        return self._needs_session_token(new_values) or config.get('aws_session_token')
+
     def _run_main(self, parsed_args, parsed_globals):
         # Called when invoked with no args "aws configure"
+
         new_values = {}
         # This is the config from the config file scoped to a specific
         # profile.
@@ -115,14 +141,28 @@ class ConfigureCommand(BasicCommand):
             config = self._session.get_scoped_config()
         except ProfileNotFound:
             config = {}
+
         for config_name, prompt_text in self.VALUES_TO_PROMPT:
+            if config_name == 'aws_session_token' and not self._should_prompt_for_session_token(new_values, config):
+                continue
+                
             current_value = config.get(config_name)
-            new_value = self._prompter.get_value(current_value, config_name,
-                                                 prompt_text)
+            new_value = self._prompter.get_value(
+                current_value, config_name, prompt_text
+            )
             if new_value is not None and new_value != current_value:
                 new_values[config_name] = new_value
+
+        # Remove session token for non-temporary credentials
+        if (
+            'aws_access_key_id' in new_values
+            and not self._needs_session_token(new_values)
+            and config.get('aws_session_token')
+        ):
+            new_values['aws_session_token'] = None
         config_filename = os.path.expanduser(
-            self._session.get_config_variable('config_file'))
+            self._session.get_config_variable('config_file')
+        )
         if new_values:
             profile = self._session.profile
             self._write_out_creds_file_values(new_values, profile)
@@ -140,15 +180,22 @@ class ConfigureCommand(BasicCommand):
         credential_file_values = {}
         if 'aws_access_key_id' in new_values:
             credential_file_values['aws_access_key_id'] = new_values.pop(
-                'aws_access_key_id')
+                'aws_access_key_id'
+            )
         if 'aws_secret_access_key' in new_values:
             credential_file_values['aws_secret_access_key'] = new_values.pop(
-                'aws_secret_access_key')
+                'aws_secret_access_key'
+            )
+        if 'aws_session_token' in new_values:
+            credential_file_values['aws_session_token'] = new_values.pop(
+                'aws_session_token'
+            )
         if credential_file_values:
             if profile_name is not None:
                 credential_file_values['__section__'] = profile_name
             shared_credentials_filename = os.path.expanduser(
-                self._session.get_config_variable('credentials_file'))
+                self._session.get_config_variable('credentials_file')
+            )
             self._config_writer.update_config(
-                credential_file_values,
-                shared_credentials_filename)
+                credential_file_values, shared_credentials_filename
+            )
diff -pruN 2.23.6-1/awscli/customizations/configure/exportcreds.py 2.31.35-1/awscli/customizations/configure/exportcreds.py
--- 2.23.6-1/awscli/customizations/configure/exportcreds.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/exportcreds.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
-import io
-import sys
 import csv
+import io
 import json
-from datetime import datetime
+import os
+import sys
 from collections import namedtuple
+from datetime import datetime
 
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.exceptions import ConfigurationError
 
-
 # Takes botocore's ReadOnlyCredentials and exposes an expiry_time.
 Credentials = namedtuple(
-    'Credentials', ['access_key', 'secret_key', 'token', 'expiry_time'])
+    'Credentials', ['access_key', 'secret_key', 'token', 'expiry_time']
+)
 
 
 def convert_botocore_credentials(credentials):
@@ -46,8 +46,7 @@ def convert_botocore_credentials(credent
     )
 
 
-class BaseCredentialFormatter(object):
-
+class BaseCredentialFormatter:
     FORMAT = None
     DOCUMENTATION = ""
 
@@ -61,27 +60,28 @@ class BaseCredentialFormatter(object):
 
 
 class BasePerLineFormatter(BaseCredentialFormatter):
-
     _VAR_FORMAT = 'export {var_name}={var_value}'
 
     def display_credentials(self, credentials):
-        output = (
-            self._format_line('AWS_ACCESS_KEY_ID', credentials.access_key) +
-            self._format_line('AWS_SECRET_ACCESS_KEY', credentials.secret_key))
+        output = self._format_line(
+            'AWS_ACCESS_KEY_ID', credentials.access_key
+        ) + self._format_line('AWS_SECRET_ACCESS_KEY', credentials.secret_key)
         if credentials.token is not None:
             output += self._format_line('AWS_SESSION_TOKEN', credentials.token)
         if credentials.expiry_time is not None:
             output += self._format_line(
-                'AWS_CREDENTIAL_EXPIRATION', credentials.expiry_time)
+                'AWS_CREDENTIAL_EXPIRATION', credentials.expiry_time
+            )
         self._stream.write(output)
 
     def _format_line(self, var_name, var_value):
-        return self._VAR_FORMAT.format(
-            var_name=var_name, var_value=var_value) + '\n'
+        return (
+            self._VAR_FORMAT.format(var_name=var_name, var_value=var_value)
+            + '\n'
+        )
 
 
 class BashEnvVarFormatter(BasePerLineFormatter):
-
     FORMAT = 'env'
     DOCUMENTATION = (
         "Display credentials as exported shell variables: "
@@ -91,7 +91,6 @@ class BashEnvVarFormatter(BasePerLineFor
 
 
 class BashNoExportEnvFormatter(BasePerLineFormatter):
-
     FORMAT = 'env-no-export'
     DOCUMENTATION = (
         "Display credentials as non-exported shell variables: "
@@ -101,7 +100,6 @@ class BashNoExportEnvFormatter(BasePerLi
 
 
 class PowershellFormatter(BasePerLineFormatter):
-
     FORMAT = 'powershell'
     DOCUMENTATION = (
         'Display credentials as PowerShell environment variables: '
@@ -111,7 +109,6 @@ class PowershellFormatter(BasePerLineFor
 
 
 class WindowsCmdFormatter(BasePerLineFormatter):
-
     FORMAT = 'windows-cmd'
     DOCUMENTATION = (
         'Display credentials as Windows cmd environment variables: '
@@ -121,7 +118,6 @@ class WindowsCmdFormatter(BasePerLineFor
 
 
 class CredentialProcessFormatter(BaseCredentialFormatter):
-
     FORMAT = 'process'
     DOCUMENTATION = (
         "Display credentials as JSON output, in the schema "
@@ -149,15 +145,23 @@ class CredentialProcessFormatter(BaseCre
 
 
 SUPPORTED_FORMATS = {
-    format_cls.FORMAT: format_cls for format_cls in
-    [CredentialProcessFormatter, BashEnvVarFormatter, BashNoExportEnvFormatter,
-     PowershellFormatter, WindowsCmdFormatter]
+    format_cls.FORMAT: format_cls
+    for format_cls in [
+        CredentialProcessFormatter,
+        BashEnvVarFormatter,
+        BashNoExportEnvFormatter,
+        PowershellFormatter,
+        WindowsCmdFormatter,
+    ]
 }
 
 
 def generate_docs(formats):
-    lines = ['The output format to display credentials.  '
-             'Defaults to `process`.  ', '<ul>']
+    lines = [
+        'The output format to display credentials.  '
+        'Defaults to `process`.  ',
+        '<ul>',
+    ]
     for name, cls in formats.items():
         line = f'<li>``{name}`` - {cls.DOCUMENTATION} </li>'
         lines.append(line)
@@ -166,7 +170,6 @@ def generate_docs(formats):
 
 
 class ConfigureExportCredentialsCommand(BasicCommand):
-
     NAME = 'export-credentials'
     SYNOPSIS = 'aws configure export-credentials --profile profile-name'
     DESCRIPTION = (
@@ -179,11 +182,13 @@ class ConfigureExportCredentialsCommand(
         "``--output`` options."
     )
     ARG_TABLE = [
-        {'name': 'format',
-         'help_text': generate_docs(SUPPORTED_FORMATS),
-         'action': 'store',
-         'choices': list(SUPPORTED_FORMATS),
-         'default': CredentialProcessFormatter.FORMAT},
+        {
+            'name': 'format',
+            'help_text': generate_docs(SUPPORTED_FORMATS),
+            'action': 'store',
+            'choices': list(SUPPORTED_FORMATS),
+            'default': CredentialProcessFormatter.FORMAT,
+        },
     ]
     _RECURSION_VAR = '_AWS_CLI_PROFILE_CHAIN'
     # Two levels is reasonable because you might explicitly run
@@ -208,7 +213,8 @@ class ConfigureExportCredentialsCommand(
     def _detect_recursion_barrier(self):
         profile = self._get_current_profile()
         seen_profiles = self._parse_profile_chain(
-            self._env.get(self._RECURSION_VAR, ''))
+            self._env.get(self._RECURSION_VAR, '')
+        )
         if len(seen_profiles) >= self._MAX_RECURSION:
             raise ConfigurationError(
                 f"Maximum recursive credential process resolution reached "
@@ -224,7 +230,8 @@ class ConfigureExportCredentialsCommand(
     def _update_recursion_barrier(self):
         profile = self._get_current_profile()
         seen_profiles = self._parse_profile_chain(
-            self._env.get(self._RECURSION_VAR, ''))
+            self._env.get(self._RECURSION_VAR, '')
+        )
         seen_profiles.append(profile)
         serialized = self._serialize_to_csv_str(seen_profiles)
         self._env[self._RECURSION_VAR] = serialized
@@ -254,10 +261,12 @@ class ConfigureExportCredentialsCommand(
         except Exception as e:
             original_msg = str(e).strip()
             raise ConfigurationError(
-                f"Unable to retrieve credentials: {original_msg}\n")
+                f"Unable to retrieve credentials: {original_msg}\n"
+            )
         if creds is None:
             raise ConfigurationError(
-                "Unable to retrieve credentials: no credentials found")
+                "Unable to retrieve credentials: no credentials found"
+            )
         creds_with_expiry = convert_botocore_credentials(creds)
         formatter = SUPPORTED_FORMATS[parsed_args.format](self._out_stream)
         formatter.display_credentials(creds_with_expiry)
diff -pruN 2.23.6-1/awscli/customizations/configure/get.py 2.31.35-1/awscli/customizations/configure/get.py
--- 2.23.6-1/awscli/customizations/configure/get.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/get.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
 import logging
+import sys
 
 from awscli.customizations.commands import BasicCommand
 
@@ -22,15 +22,19 @@ LOG = logging.getLogger(__name__)
 
 class ConfigureGetCommand(BasicCommand):
     NAME = 'get'
-    DESCRIPTION = BasicCommand.FROM_FILE('configure', 'get',
-                                         '_description.rst')
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        'configure', 'get', '_description.rst'
+    )
     SYNOPSIS = 'aws configure get varname [--profile profile-name]'
     EXAMPLES = BasicCommand.FROM_FILE('configure', 'get', '_examples.rst')
     ARG_TABLE = [
-        {'name': 'varname',
-         'help_text': 'The name of the config value to retrieve.',
-         'action': 'store',
-         'cli_type_name': 'string', 'positional_arg': True},
+        {
+            'name': 'varname',
+            'help_text': 'The name of the config value to retrieve.',
+            'action': 'store',
+            'cli_type_name': 'string',
+            'positional_arg': True,
+        },
     ]
 
     def __init__(self, session, stream=None, error_stream=None):
@@ -53,7 +57,7 @@ class ConfigureGetCommand(BasicCommand):
         else:
             value = self._get_dotted_config_value(varname)
 
-        LOG.debug(u'Config value retrieved: %s' % value)
+        LOG.debug('Config value retrieved: %s' % value)
 
         if isinstance(value, str):
             self._stream.write(value)
@@ -81,8 +85,9 @@ class ConfigureGetCommand(BasicCommand):
             value = full_config.get(section, {}).get(config_name)
             if value is None:
                 # Try to retrieve it from the profile config.
-                value = full_config['profiles'].get(
-                    section, {}).get(config_name)
+                value = (
+                    full_config['profiles'].get(section, {}).get(config_name)
+                )
             return value
 
         if parts[0] == 'profile':
@@ -93,7 +98,8 @@ class ConfigureGetCommand(BasicCommand):
         # default.emr-dev.emr.instance_profile) If not, go further to check
         # if varname starts with a known profile name
         elif parts[0] == 'default' or (
-                parts[0] in self._session.full_config['profiles']):
+            parts[0] in self._session.full_config['profiles']
+        ):
             profile_name = parts[0]
             config_name = parts[1]
             remaining = parts[2:]
@@ -104,8 +110,11 @@ class ConfigureGetCommand(BasicCommand):
             config_name = parts[0]
             remaining = parts[1:]
 
-        value = self._session.full_config['profiles'].get(
-            profile_name, {}).get(config_name)
+        value = (
+            self._session.full_config['profiles']
+            .get(profile_name, {})
+            .get(config_name)
+        )
         if len(remaining) == 1:
             try:
                 value = value.get(remaining[-1])
diff -pruN 2.23.6-1/awscli/customizations/configure/importer.py 2.31.35-1/awscli/customizations/configure/importer.py
--- 2.23.6-1/awscli/customizations/configure/importer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/importer.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import codecs
 import os
 import sys
-import codecs
 
-from awscli.customizations.utils import uni_print
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.configure.writer import ConfigFileWriter
+from awscli.customizations.utils import uni_print
 
 
 class ConfigureImportCommand(BasicCommand):
@@ -33,33 +33,42 @@ class ConfigureImportCommand(BasicComman
         '--profile-prefix test-\n\n'
     )
     ARG_TABLE = [
-        {'name': 'csv',
-         'required': True,
-         'help_text': (
-             'The credentials in CSV format generated by the AWS web console.'
-             'The CSV file must contain the "User name", "Access key ID", and '
-             '"Secret access key" headers.'
-         ),
-         'cli_type_name': 'string'},
-        {'name': 'skip-invalid',
-         'dest': 'skip_invalid',
-         'help_text': (
-             'Skip entries that are invalid or do not have programmatic '
-             'access instead of failing.'
-         ),
-         'default': False,
-         'action': 'store_true'},
-        {'name': 'profile-prefix',
-         'dest': 'profile_prefix',
-         'help_text': (
-             'Adds the specified prefix to the beginning of all profile names.'
-         ),
-         'default': '',
-         'cli_type_name': 'string'},
+        {
+            'name': 'csv',
+            'required': True,
+            'help_text': (
+                'The credentials in CSV format generated by the AWS web console. '
+                'The CSV file must contain the "User name", "Access key ID", and '
+                '"Secret access key" headers.'
+                'If passing a CSV file path instead of a CSV-formatted string, '
+                'the "file://" prefix is required.'
+            ),
+            'cli_type_name': 'string',
+        },
+        {
+            'name': 'skip-invalid',
+            'dest': 'skip_invalid',
+            'help_text': (
+                'Skip entries that are invalid or do not have programmatic '
+                'access instead of failing.'
+            ),
+            'default': False,
+            'action': 'store_true',
+        },
+        {
+            'name': 'profile-prefix',
+            'dest': 'profile_prefix',
+            'help_text': (
+                'Adds the specified prefix to the beginning of all profile names.'
+            ),
+            'default': '',
+            'cli_type_name': 'string',
+        },
     ]
 
-    def __init__(self, session, csv_parser=None, importer=None,
-                 out_stream=None):
+    def __init__(
+        self, session, csv_parser=None, importer=None, out_stream=None
+    ):
         super(ConfigureImportCommand, self).__init__(session)
         if csv_parser is None:
             csv_parser = CSVCredentialParser()
@@ -79,16 +88,27 @@ class ConfigureImportCommand(BasicComman
         return os.path.expanduser(config_file)
 
     def _import_csv(self, contents):
+        self._check_possible_filepath(contents)
         config_path = self._get_config_path()
         credentials = self._csv_parser.parse_credentials(contents)
         for credential in credentials:
             self._importer.import_credential(
-                credential, config_path,
+                credential,
+                config_path,
                 profile_prefix=self._profile_prefix,
             )
         import_msg = 'Successfully imported %s profile(s)\n' % len(credentials)
         uni_print(import_msg, out_file=self._out_stream)
 
+    def _check_possible_filepath(self, csv_data):
+        if ('\n' not in csv_data and
+            os.path.exists(csv_data) and
+            not csv_data.startswith('file://')):
+            raise ValueError(
+                "You may be passing a file to import without the 'file://' prefix. "
+                "To import a CSV file, use --csv file://path/to/file.csv"
+            )
+
     def _run_main(self, parsed_args, parsed_globals):
         self._csv_parser.strict = not parsed_args.skip_invalid
         self._profile_prefix = parsed_args.profile_prefix
@@ -100,7 +120,7 @@ class CredentialParserError(Exception):
     pass
 
 
-class CSVCredentialParser(object):
+class CSVCredentialParser:
     _USERNAME_HEADER = 'User Name'
     _AKID_HEADER = 'Access Key ID'
     _SAK_HEADER = 'Secret Access key'
@@ -185,11 +205,13 @@ class CSVCredentialParser(object):
         return self._convert_rows_to_credentials(parsed_rows)
 
 
-class CredentialImporter(object):
+class CredentialImporter:
     def __init__(self, writer):
         self._config_writer = writer
 
-    def import_credential(self, credential, credentials_file, profile_prefix=''):
+    def import_credential(
+        self, credential, credentials_file, profile_prefix=''
+    ):
         name, akid, sak = credential
         config_profile = {
             '__section__': profile_prefix + name,
diff -pruN 2.23.6-1/awscli/customizations/configure/list.py 2.31.35-1/awscli/customizations/configure/list.py
--- 2.23.6-1/awscli/customizations/configure/list.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/list.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,7 @@ import sys
 
 from awscli.customizations.commands import BasicCommand
 
-from . import ConfigValue, NOT_SET
+from . import NOT_SET, ConfigValue
 
 
 class ConfigureListCommand(BasicCommand):
@@ -41,26 +41,24 @@ class ConfigureListCommand(BasicCommand)
         'To show your current configuration values::\n'
         '\n'
         '  $ aws configure list\n'
-        '        Name                    Value             Type    Location\n'
-        '        ----                    -----             ----    --------\n'
-        '     profile                <not set>             None    None\n'
-        '  access_key     ****************ABCD      config_file    ~/.aws/config\n'
-        '  secret_key     ****************ABCD      config_file    ~/.aws/config\n'
-        '      region                us-west-2              env    AWS_DEFAULT_REGION\n'
+        '  NAME       : VALUE                    : TYPE             : LOCATION\n'
+        '  profile    : <not set>                : None             : None\n'
+        '  access_key : ****************ABCD     : config_file      : ~/.aws/config\n'
+        '  secret_key : ****************ABCD     : config_file      : ~/.aws/config\n'
+        '  region     : us-west-2                : env              : AWS_DEFAULT_REGION\n'
         '\n'
     )
 
     def __init__(self, session, stream=None):
-        super(ConfigureListCommand, self).__init__(session)
+        super().__init__(session)
         if stream is None:
             stream = sys.stdout
         self._stream = stream
 
     def _run_main(self, args, parsed_globals):
-        self._display_config_value(ConfigValue('Value', 'Type', 'Location'),
-                                   'Name')
-        self._display_config_value(ConfigValue('-----', '----', '--------'),
-                                   '----')
+        self._display_config_value(
+            ConfigValue('VALUE', 'TYPE', 'LOCATION'), 'NAME'
+        )
 
         if parsed_globals and parsed_globals.profile is not None:
             profile = ConfigValue(self._session.profile, 'manual', '--profile')
@@ -77,9 +75,12 @@ class ConfigureListCommand(BasicCommand)
         return 0
 
     def _display_config_value(self, config_value, config_name):
-        self._stream.write('%10s %24s %16s    %s\n' % (
-            config_name, config_value.value, config_value.config_type,
-            config_value.config_variable))
+        self._stream.write(
+            f'{config_name:<10} : '
+            f'{config_value.value:<24} : '
+            f'{str(config_value.config_type):<16} : '
+            f'{str(config_value.config_variable)}\n'
+        )
 
     def _lookup_credentials(self):
         # First try it with _lookup_config.  It's possible
@@ -105,10 +106,12 @@ class ConfigureListCommand(BasicCommand)
                 # visible from botocore.credentials.  I think
                 # the credentials.method is sufficient to show
                 # where the credentials are coming from.
-                access_key = ConfigValue(credentials.access_key,
-                                         credentials.method, '')
-                secret_key = ConfigValue(credentials.secret_key,
-                                         credentials.method, '')
+                access_key = ConfigValue(
+                    credentials.access_key, credentials.method, ''
+                )
+                secret_key = ConfigValue(
+                    credentials.secret_key, credentials.method, ''
+                )
                 access_key.mask_value()
                 secret_key.mask_value()
                 return access_key, secret_key
@@ -135,14 +138,17 @@ class ConfigureListCommand(BasicCommand)
         # First try to look up the variable in the env.
         value = self._session.get_config_variable(name, methods=('env',))
         if value is not None:
-            return ConfigValue(value, 'env',
-                               self._session.session_var_map[name][1])
+            return ConfigValue(
+                value, 'env', self._session.session_var_map[name][1]
+            )
         # Then try to look up the variable in the config file.
         value = self._session.get_config_variable(name, methods=('config',))
         if value is not None:
             return ConfigValue(
-                value, 'config-file',
-                self._session.get_config_variable('config_file'))
+                value,
+                'config-file',
+                self._session.get_config_variable('config_file'),
+            )
 
     def _lookup_config(self, name):
         val = self._lookup_in_env_and_config(name)
diff -pruN 2.23.6-1/awscli/customizations/configure/listprofiles.py 2.31.35-1/awscli/customizations/configure/listprofiles.py
--- 2.23.6-1/awscli/customizations/configure/listprofiles.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/listprofiles.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,12 +18,8 @@ from awscli.customizations.utils import
 
 class ListProfilesCommand(BasicCommand):
     NAME = 'list-profiles'
-    DESCRIPTION = (
-        'List the profiles available to the AWS CLI.'
-    )
-    EXAMPLES = (
-        'aws configure list-profiles\n\n'
-    )
+    DESCRIPTION = 'List the profiles available to the AWS CLI.'
+    EXAMPLES = 'aws configure list-profiles\n\n'
 
     def __init__(self, session, out_stream=None):
         super(ListProfilesCommand, self).__init__(session)
diff -pruN 2.23.6-1/awscli/customizations/configure/mfalogin.py 2.31.35-1/awscli/customizations/configure/mfalogin.py
--- 2.23.6-1/awscli/customizations/configure/mfalogin.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/mfalogin.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,280 @@
+# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import logging
+import os
+import random
+import string
+import sys
+
+# Import botocore at module level to avoid repeated imports
+import botocore.session
+from botocore.exceptions import ClientError, ProfileNotFound
+
+from awscli.compat import compat_input
+from awscli.customizations.commands import BasicCommand
+from awscli.customizations.configure import profile_to_section
+from awscli.customizations.configure.writer import ConfigFileWriter
+
+LOG = logging.getLogger(__name__)
+
+
+class InteractiveMFAPrompter:
+    """Handles interactive prompting for MFA login."""
+
+    def get_value(self, current_value, prompt_text=''):
+        """Prompt for a value, showing the current value as a default."""
+        response = compat_input(f"{prompt_text} [{current_value}]: ")
+        if not response:
+            # If the user hits enter, return the current value
+            return current_value
+        return response
+
+    def get_credential_value(self, current_value, config_name, prompt_text=''):
+        """Prompt for credential values with masking for sensitive data."""
+        response = compat_input(f"{prompt_text}: ")
+        if not response:
+            return None
+        return response
+
+
+class ConfigureMFALoginCommand(BasicCommand):
+    """Configures MFA login for AWS CLI by creating temporary credentials."""
+
+    NAME = 'mfa-login'
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        'configure', 'mfa-login', '_description.rst'
+    )
+    SYNOPSIS = (
+        'aws configure mfa-login [--profile profile-name] '
+        '[--update-profile profile-to-update] [--duration-seconds seconds] '
+        '[--serial-number mfa-serial-number]'
+    )
+    EXAMPLES = BasicCommand.FROM_FILE('configure', 'mfa-login', '_examples.rst')
+    ARG_TABLE = [
+        {
+            'name': 'update-profile',
+            'help_text': (
+                'The profile to update with temporary credentials. '
+                'If not provided, a default name will be generated.'
+            ),
+            'action': 'store',
+            'required': False,
+            'cli_type_name': 'string',
+        },
+        {
+            'name': 'duration-seconds',
+            'help_text': (
+                'The duration, in seconds, that the credentials should remain valid. '
+                'Minimum is 900 seconds (15 minutes), maximum is 129600 seconds (36 hours).'
+            ),
+            'action': 'store',
+            'required': False,
+            'cli_type_name': 'integer',
+            'default': 43200,
+        },
+        {
+            'name': 'serial-number',
+            'help_text': (
+                'The ARN or serial number of the MFA device associated with the IAM user. '
+                'If not provided, will use the mfa_serial from the profile configuration.'
+            ),
+            'action': 'store',
+            'required': False,
+            'cli_type_name': 'string',
+        },
+    ]
+
+    # Values to prompt for during interactive setup
+    VALUES_TO_PROMPT = [
+        ('aws_access_key_id', 'AWS Access Key ID'),
+        ('aws_secret_access_key', 'AWS Secret Access Key'),
+        ('mfa_serial', 'MFA serial number or ARN'),
+        ('mfa_token', 'MFA token code'),
+    ]
+
+    def __init__(self, session, prompter=None, config_writer=None):
+        super().__init__(session)
+        if prompter is None:
+            prompter = InteractiveMFAPrompter()
+        self._prompter = prompter
+        if config_writer is None:
+            config_writer = ConfigFileWriter()
+        self._config_writer = config_writer
+
+    def _generate_profile_name_from_mfa(self, mfa_serial):
+        """Generate a deterministic profile name from MFA serial/ARN."""
+        if isinstance(mfa_serial, str) and mfa_serial.startswith('arn:aws:iam::'):
+            # Parse ARN: arn:aws:iam::123456789012:mfa/device-name
+            parts = mfa_serial.split(':')
+            account_id = parts[4]
+            device_name = parts[5].split('/')[-1]  # Get device name after 'mfa/'
+            return f"{account_id}-{device_name}"
+        else:
+            # Assume it's just a serial number
+            return f"session-{mfa_serial}"
+
+    def _get_target_profile(self, parsed_args, mfa_serial=None):
+        """Get or generate the target profile name."""
+        target_profile = parsed_args.update_profile
+        if not target_profile:
+            if mfa_serial:
+                target_profile = self._generate_profile_name_from_mfa(mfa_serial)
+            else:
+                target_profile = "session-temp"
+            target_profile = self._prompter.get_value(
+                target_profile, 'Profile to update'
+            )
+        return target_profile
+
+    def _get_mfa_token(self):
+        """Prompt for MFA token code."""
+        token_code = self._prompter.get_credential_value(
+            'None', 'mfa_token', 'MFA token code'
+        )
+        if not token_code:
+            sys.stderr.write("MFA token code is required\n")
+            return None
+        return token_code
+
+    def _call_sts_get_session_token(self, sts_client, duration_seconds, mfa_serial, token_code):
+        """Call STS to get temporary credentials."""
+        try:
+            response = sts_client.get_session_token(
+                DurationSeconds=duration_seconds,
+                SerialNumber=mfa_serial,
+                TokenCode=token_code,
+            )
+            return response
+        except ClientError as e:
+            sys.stderr.write(f"An error occurred: {e}\n")
+            return None
+
+    def _resolve_mfa_serial(self, parsed_args, source_config):
+        """Resolve MFA serial from args, config, or prompt."""
+        mfa_serial = parsed_args.serial_number or source_config.get('mfa_serial')
+        if not mfa_serial:
+            mfa_serial = self._prompter.get_credential_value(
+                'None', 'mfa_serial', 'MFA serial number or ARN'
+            )
+            if not mfa_serial:
+                sys.stderr.write("MFA serial number or MFA device ARN is required\n")
+                return None
+        return mfa_serial
+
+    def _write_temporary_credentials(self, temp_credentials, target_profile):
+        """Write temporary credentials to the credentials file."""
+        credentials_file = os.path.expanduser(self._session.get_config_variable('credentials_file'))
+
+        credential_values = {
+            '__section__': target_profile,
+            'aws_access_key_id': temp_credentials['AccessKeyId'],
+            'aws_secret_access_key': temp_credentials['SecretAccessKey'],
+            'aws_session_token': temp_credentials['SessionToken'],
+        }
+
+        try:
+            expiration_time = temp_credentials['Expiration'].strftime(
+                '%Y-%m-%d %H:%M:%S UTC'
+            )
+        except AttributeError:
+            expiration_time = str(temp_credentials['Expiration'])
+
+        self._config_writer.update_config(credential_values, credentials_file)
+
+        sys.stdout.write(
+            f"Temporary credentials written to profile '{target_profile}'\n"
+        )
+        sys.stdout.write(f"Credentials will expire at {expiration_time}\n")
+        sys.stdout.write(
+            f"To use these credentials, specify --profile {target_profile} when running AWS CLI commands\n"
+        )
+        return 0
+
+    def _run_main(self, parsed_args, parsed_globals):
+        duration_seconds = parsed_args.duration_seconds
+
+        # Use the CLI session directly
+        credentials = self._session.get_credentials()
+        if credentials is None:
+            return self._handle_interactive_prompting(parsed_args, duration_seconds)
+        
+        source_config = self._session.get_scoped_config()
+
+        # Resolve MFA serial number
+        mfa_serial = self._resolve_mfa_serial(parsed_args, source_config)
+        if not mfa_serial:
+            return 1
+
+        # Get MFA token code
+        token_code = self._get_mfa_token()
+        if not token_code:
+            return 1
+
+        # Get the target profile name
+        target_profile = self._get_target_profile(parsed_args, mfa_serial)
+
+        # Call STS to get temporary credentials
+        sts_client = self._session.create_client('sts')
+        response = self._call_sts_get_session_token(
+            sts_client, duration_seconds, mfa_serial, token_code
+        )
+        if not response:
+            return 1
+
+        # Write credentials and return
+        return self._write_temporary_credentials(
+            response['Credentials'], target_profile
+        )
+
+    def _handle_interactive_prompting(self, parsed_args, duration_seconds):
+        """Handle the case where no default profile exists, and there is no profile explicitly named as a configuration source"""
+        sys.stdout.write(
+            "Please provide your AWS credentials:\n"
+        )
+
+        values = {}
+        for config_name, prompt_text in self.VALUES_TO_PROMPT:
+            if config_name == 'mfa_serial' and parsed_args.serial_number:
+                values[config_name] = parsed_args.serial_number
+                continue
+                
+            value = self._prompter.get_credential_value(
+                'None', config_name, prompt_text
+            )
+            if not value or value == 'None':
+                sys.stderr.write(f"{prompt_text} is required\n")
+                return 1
+            values[config_name] = value
+
+        # Get the target profile name
+        target_profile = self._get_target_profile(parsed_args, values['mfa_serial'])
+
+        # Create STS client with the provided credentials
+        session = botocore.session.Session()
+        sts_client = session.create_client(
+            'sts',
+            aws_access_key_id=values['aws_access_key_id'],
+            aws_secret_access_key=values['aws_secret_access_key'],
+        )
+
+        # Call STS to get temporary credentials
+        response = self._call_sts_get_session_token(
+            sts_client, duration_seconds, values['mfa_serial'], values['mfa_token']
+        )
+        if not response:
+            return 1
+
+        # Write credentials and return
+        return self._write_temporary_credentials(
+            response['Credentials'], target_profile
+        )
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/customizations/configure/set.py 2.31.35-1/awscli/customizations/configure/set.py
--- 2.23.6-1/awscli/customizations/configure/set.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/set.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,25 +20,35 @@ from . import PREDEFINED_SECTION_NAMES,
 
 class ConfigureSetCommand(BasicCommand):
     NAME = 'set'
-    DESCRIPTION = BasicCommand.FROM_FILE('configure', 'set',
-                                         '_description.rst')
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        'configure', 'set', '_description.rst'
+    )
     SYNOPSIS = 'aws configure set varname value [--profile profile-name]'
     EXAMPLES = BasicCommand.FROM_FILE('configure', 'set', '_examples.rst')
     ARG_TABLE = [
-        {'name': 'varname',
-         'help_text': 'The name of the config value to set.',
-         'action': 'store',
-         'cli_type_name': 'string', 'positional_arg': True},
-        {'name': 'value',
-         'help_text': 'The value to set.',
-         'action': 'store',
-         'no_paramfile': True,  # To disable the default paramfile behavior
-         'cli_type_name': 'string', 'positional_arg': True},
+        {
+            'name': 'varname',
+            'help_text': 'The name of the config value to set.',
+            'action': 'store',
+            'cli_type_name': 'string',
+            'positional_arg': True,
+        },
+        {
+            'name': 'value',
+            'help_text': 'The value to set.',
+            'action': 'store',
+            'no_paramfile': True,  # To disable the default paramfile behavior
+            'cli_type_name': 'string',
+            'positional_arg': True,
+        },
     ]
     # Any variables specified in this list will be written to
     # the ~/.aws/credentials file instead of ~/.aws/config.
-    _WRITE_TO_CREDS_FILE = ['aws_access_key_id', 'aws_secret_access_key',
-                            'aws_session_token']
+    _WRITE_TO_CREDS_FILE = [
+        'aws_access_key_id',
+        'aws_secret_access_key',
+        'aws_session_token',
+    ]
 
     def __init__(self, session, config_writer=None):
         super(ConfigureSetCommand, self).__init__(session)
diff -pruN 2.23.6-1/awscli/customizations/configure/sso.py 2.31.35-1/awscli/customizations/configure/sso.py
--- 2.23.6-1/awscli/customizations/configure/sso.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/sso.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,8 +13,8 @@
 import collections
 import itertools
 import json
-import os
 import logging
+import os
 import re
 
 import colorama
@@ -23,28 +23,29 @@ from botocore.config import Config
 from botocore.configprovider import ConstantProvider
 from botocore.exceptions import ProfileNotFound
 from botocore.utils import is_valid_endpoint_url
-
 from prompt_toolkit import prompt as ptk_prompt
 from prompt_toolkit.application import get_app
 from prompt_toolkit.completion import WordCompleter
 from prompt_toolkit.formatted_text import FormattedText
 from prompt_toolkit.styles import Style
-from prompt_toolkit.validation import Validator
-from prompt_toolkit.validation import ValidationError
+from prompt_toolkit.validation import ValidationError, Validator
 
-from awscli.customizations.utils import uni_print
 from awscli.customizations.configure import (
-    profile_to_section, get_section_header,
+    get_section_header,
+    profile_to_section,
 )
 from awscli.customizations.configure.writer import ConfigFileWriter
-from awscli.customizations.wizard.ui.selectmenu import select_menu
 from awscli.customizations.sso.utils import (
-    do_sso_login, parse_sso_registration_scopes, PrintOnlyHandler, LOGIN_ARGS,
+    LOGIN_ARGS,
     BaseSSOCommand,
+    PrintOnlyHandler,
+    do_sso_login,
+    parse_sso_registration_scopes,
 )
+from awscli.customizations.utils import uni_print
+from awscli.customizations.wizard.ui.selectmenu import select_menu
 from awscli.formatter import CLI_OUTPUT_FORMATS
 
-
 logger = logging.getLogger(__name__)
 
 _CMD_PROMPT_USAGE = (
@@ -95,7 +96,8 @@ class ScopesValidator(ValidatorWithDefau
             return
         if not self._is_comma_separated_list(document.text):
             self._raise_validation_error(
-                document, 'Scope values must be separated by commas')
+                document, 'Scope values must be separated by commas'
+            )
 
     def _is_comma_separated_list(self, value):
         scopes = value.split(',')
@@ -105,7 +107,7 @@ class ScopesValidator(ValidatorWithDefau
         return True
 
 
-class PTKPrompt(object):
+class PTKPrompt:
     _DEFAULT_PROMPT_FORMAT = '{prompt_text} [{current_value}]: '
 
     def __init__(self, prompter=None):
@@ -118,21 +120,26 @@ class PTKPrompt(object):
             completions = []
         completer_kwargs = {
             'words': completions,
-            'pattern': re.compile(r'\S+')
+            'pattern': re.compile(r'\S+'),
         }
         if isinstance(completions, dict):
             completer_kwargs['meta_dict'] = completions
             completer_kwargs['words'] = list(completions.keys())
         return WordCompleter(**completer_kwargs)
 
-    def get_value(self, current_value, prompt_text='',
-                  completions=None, validator=None, toolbar=None,
-                  prompt_fmt=None):
+    def get_value(
+        self,
+        current_value,
+        prompt_text='',
+        completions=None,
+        validator=None,
+        toolbar=None,
+        prompt_fmt=None,
+    ):
         if prompt_fmt is None:
             prompt_fmt = self._DEFAULT_PROMPT_FORMAT
         prompt_string = prompt_fmt.format(
-            prompt_text=prompt_text,
-            current_value=current_value
+            prompt_text=prompt_text, current_value=current_value
         )
         prompter_kwargs = {
             'validator': validator,
@@ -192,7 +199,8 @@ class SSOSessionConfigurationPrompter:
         self._botocore_session = botocore_session
         self._prompter = prompter
         self._sso_sessions = self._botocore_session.full_config.get(
-            'sso_sessions', {})
+            'sso_sessions', {}
+        )
         self._sso_session = None
         self.sso_session_config = {}
 
@@ -204,7 +212,8 @@ class SSOSessionConfigurationPrompter:
     def sso_session(self, value):
         self._sso_session = value
         self.sso_session_config = self._sso_sessions.get(
-            self._sso_session, {}).copy()
+            self._sso_session, {}
+        ).copy()
 
     def prompt_for_sso_session(self, required=True):
         prompt_text = 'SSO session name'
@@ -217,7 +226,8 @@ class SSOSessionConfigurationPrompter:
             if not required:
                 prompt_fmt = f'{prompt_text} (Recommended): '
         sso_session = self._prompt_for(
-            'sso_session', prompt_text,
+            'sso_session',
+            prompt_text,
             completions=sorted(self._sso_sessions),
             toolbar=self._get_sso_session_toolbar,
             validator_cls=validator_cls,
@@ -229,43 +239,55 @@ class SSOSessionConfigurationPrompter:
 
     def prompt_for_sso_start_url(self):
         return self._prompt_for(
-            'sso_start_url', 'SSO start URL',
+            'sso_start_url',
+            'SSO start URL',
             completions=self._get_potential_start_urls(),
             validator_cls=StartUrlValidator,
         )
 
     def prompt_for_sso_region(self):
         return self._prompt_for(
-            'sso_region', 'SSO region',
+            'sso_region',
+            'SSO region',
             completions=self._get_potential_sso_regions(),
             validator_cls=RequiredInputValidator,
         )
 
     def prompt_for_sso_registration_scopes(self):
         if 'sso_registration_scopes' not in self.sso_session_config:
-            self.sso_session_config['sso_registration_scopes'] = \
+            self.sso_session_config['sso_registration_scopes'] = (
                 self._DEFAULT_SSO_SCOPE
+            )
         raw_scopes = self._prompt_for(
-            'sso_registration_scopes', 'SSO registration scopes',
+            'sso_registration_scopes',
+            'SSO registration scopes',
             completions=self._get_potential_sso_registrations_scopes(),
             validator_cls=ScopesValidator,
         )
         return parse_sso_registration_scopes(raw_scopes)
 
-    def _prompt_for(self, config_name, text,
-                    completions=None, validator_cls=None,
-                    toolbar=None, prompt_fmt=None, current_value=None):
+    def _prompt_for(
+        self,
+        config_name,
+        text,
+        completions=None,
+        validator_cls=None,
+        toolbar=None,
+        prompt_fmt=None,
+        current_value=None,
+    ):
         if current_value is None:
             current_value = self.sso_session_config.get(config_name)
         validator = None
         if validator_cls:
             validator = validator_cls(current_value)
         value = self._prompter.get_value(
-            current_value, text,
+            current_value,
+            text,
             completions=completions,
             validator=validator,
             toolbar=toolbar,
-            prompt_fmt=prompt_fmt
+            prompt_fmt=prompt_fmt,
         )
         if value:
             self.sso_session_config[config_name] = value
@@ -275,12 +297,17 @@ class SSOSessionConfigurationPrompter:
         current_input = get_app().current_buffer.document.text
         if current_input in self._sso_sessions:
             selected_sso_config = self._sso_sessions[current_input]
-            return FormattedText([
-                ('',  self._get_toolbar_border()),
-                ('', '\n'),
-                ('bold', f'Configuration for SSO session: {current_input}\n\n'),
-                ('', json.dumps(selected_sso_config, indent=2)),
-            ])
+            return FormattedText(
+                [
+                    ('', self._get_toolbar_border()),
+                    ('', '\n'),
+                    (
+                        'bold',
+                        f'Configuration for SSO session: {current_input}\n\n',
+                    ),
+                    ('', json.dumps(selected_sso_config, indent=2)),
+                ]
+            )
 
     def _get_toolbar_border(self):
         horizontal_line_char = '\u2500'
@@ -289,8 +316,7 @@ class SSOSessionConfigurationPrompter:
     def _get_potential_start_urls(self):
         profiles = self._botocore_session.full_config.get('profiles', {})
         configs_to_search = itertools.chain(
-            profiles.values(),
-            self._sso_sessions.values()
+            profiles.values(), self._sso_sessions.values()
         )
         potential_start_urls = set()
         for config_to_search in configs_to_search:
@@ -335,14 +361,16 @@ class BaseSSOConfigurationCommand(BaseSS
         self._config_writer = config_writer
         self._sso_sessions = self._session.full_config.get('sso_sessions', {})
         self._sso_session_prompter = SSOSessionConfigurationPrompter(
-            botocore_session=session, prompter=self._prompter,
+            botocore_session=session,
+            prompter=self._prompter,
         )
 
     def _write_sso_configuration(self):
         self._update_section(
             section_header=get_section_header(
-                'sso-session', self._sso_session_prompter.sso_session),
-            new_values=self._sso_session_prompter.sso_session_config
+                'sso-session', self._sso_session_prompter.sso_session
+            ),
+            new_values=self._sso_session_prompter.sso_session_config,
         )
 
     def _update_section(self, section_header, new_values):
@@ -354,7 +382,7 @@ class BaseSSOConfigurationCommand(BaseSS
 
 class ConfigureSSOCommand(BaseSSOConfigurationCommand):
     NAME = 'sso'
-    SYNOPSIS = ('aws configure sso [--profile profile-name]')
+    SYNOPSIS = 'aws configure sso [--profile profile-name]'
     DESCRIPTION = (
         'The ``aws configure sso`` command interactively prompts for the '
         'configuration values required to create a profile that sources '
@@ -368,10 +396,18 @@ class ConfigureSSOCommand(BaseSSOConfigu
     # TODO: Add CLI parameters to skip prompted values, --start-url, etc.
     ARG_TABLE = LOGIN_ARGS
 
-    def __init__(self, session, prompter=None, selector=None,
-                 config_writer=None, sso_token_cache=None, sso_login=None):
+    def __init__(
+        self,
+        session,
+        prompter=None,
+        selector=None,
+        config_writer=None,
+        sso_token_cache=None,
+        sso_login=None,
+    ):
         super(ConfigureSSOCommand, self).__init__(
-            session, prompter=prompter, config_writer=config_writer)
+            session, prompter=prompter, config_writer=config_writer
+        )
         if selector is None:
             selector = select_menu
         self._selector = selector
@@ -390,14 +426,13 @@ class ConfigureSSOCommand(BaseSSOConfigu
 
     def _set_sso_session_if_configured_in_profile(self):
         if 'sso_session' in self._profile_config:
-            self._sso_session_prompter.sso_session = \
-                self._profile_config['sso_session']
+            self._sso_session_prompter.sso_session = self._profile_config[
+                'sso_session'
+            ]
 
     def _handle_single_account(self, accounts):
         sso_account_id = accounts[0]['accountId']
-        single_account_msg = (
-            'The only AWS account available to you is: {}\n'
-        )
+        single_account_msg = 'The only AWS account available to you is: {}\n'
         uni_print(single_account_msg.format(sso_account_id))
         return sso_account_id
 
@@ -407,7 +442,8 @@ class ConfigureSSOCommand(BaseSSOConfigu
         )
         uni_print(available_accounts_msg.format(len(accounts)))
         selected_account = self._selector(
-            accounts, display_format=display_account)
+            accounts, display_format=display_account
+        )
         sso_account_id = selected_account['accountId']
         return sso_account_id
 
@@ -424,7 +460,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
             sso_account_id = self._handle_single_account(accounts)
         else:
             sso_account_id = self._handle_multiple_accounts(accounts)
-        uni_print('Using the account ID {}\n'.format(sso_account_id))
+        uni_print(f'Using the account ID {sso_account_id}\n')
         self._new_profile_config_values['sso_account_id'] = sso_account_id
         return sso_account_id
 
@@ -444,8 +480,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
     def _get_all_roles(self, sso, sso_token, sso_account_id):
         paginator = sso.get_paginator('list_account_roles')
         results = paginator.paginate(
-            accountId=sso_account_id,
-            accessToken=sso_token['accessToken']
+            accountId=sso_account_id, accessToken=sso_token['accessToken']
         )
         return results.build_full_result()
 
@@ -458,7 +493,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
             sso_role_name = self._handle_single_role(roles)
         else:
             sso_role_name = self._handle_multiple_roles(roles)
-        uni_print('Using the role name "{}"\n'.format(sso_role_name))
+        uni_print(f'Using the role name "{sso_role_name}"\n')
         self._new_profile_config_values['sso_role_name'] = sso_role_name
         return sso_role_name
 
@@ -466,30 +501,35 @@ class ConfigureSSOCommand(BaseSSOConfigu
         if self._original_profile_name:
             profile_name = self._original_profile_name
         else:
-            text = 'CLI profile name'
+            text = 'Profile name'
             default_profile = None
             if sso_account_id and sso_role_name:
                 default_profile = f'{sso_role_name}-{sso_account_id}'
             validator = RequiredInputValidator(default_profile)
             profile_name = self._prompter.get_value(
-                default_profile, text, validator=validator)
+                default_profile, text, validator=validator
+            )
         return profile_name
 
     def _prompt_for_cli_default_region(self):
         # TODO: figure out a way to get a list of reasonable client regions
         return self._prompt_for_profile_config(
-            'region', 'CLI default client Region')
+            'region', 'Default client Region'
+        )
 
     def _prompt_for_cli_output_format(self):
         return self._prompt_for_profile_config(
-            'output', 'CLI default output format',
+            'output',
+            'CLI default output format (json if not specified)',
             completions=list(CLI_OUTPUT_FORMATS.keys()),
         )
 
     def _prompt_for_profile_config(self, config_name, text, completions=None):
         current_value = self._profile_config.get(config_name)
+
         new_value = self._prompter.get_value(
-            current_value, text,
+            current_value,
+            text,
             completions=completions,
         )
         if new_value:
@@ -519,7 +559,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
             token_cache=self._sso_token_cache,
             on_pending_authorization=on_pending_authorization,
             use_device_code=parsed_args.use_device_code,
-            **sso_registration_args
+            **sso_registration_args,
         )
 
         # Construct an SSO client to explore the accounts / roles
@@ -546,7 +586,8 @@ class ConfigureSSOCommand(BaseSSOConfigu
 
     def _prompt_for_sso_registration_args(self):
         sso_session = self._sso_session_prompter.prompt_for_sso_session(
-            required=False)
+            required=False
+        )
         if sso_session is None:
             self._warn_configuring_using_legacy_format()
             return self._prompt_for_registration_args_with_legacy_format()
@@ -554,7 +595,8 @@ class ConfigureSSOCommand(BaseSSOConfigu
             self._set_sso_session_in_profile_config(sso_session)
             if sso_session in self._sso_sessions:
                 return self._get_sso_registration_args_from_sso_config(
-                    sso_session)
+                    sso_session
+                )
             else:
                 return self._prompt_for_registration_args_for_new_sso_session(
                     sso_session=sso_session
@@ -564,10 +606,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
         self._store_sso_session_prompter_answers_to_profile_config()
         self._set_sso_session_defaults_from_profile_config()
         start_url, sso_region = self._prompt_for_sso_start_url_and_sso_region()
-        return {
-            'start_url': start_url,
-            'sso_region': sso_region
-        }
+        return {'start_url': start_url, 'sso_region': sso_region}
 
     def _get_sso_registration_args_from_sso_config(self, sso_session):
         sso_config = self._get_sso_session_config(sso_session)
@@ -575,13 +614,15 @@ class ConfigureSSOCommand(BaseSSOConfigu
             'session_name': sso_session,
             'start_url': sso_config['sso_start_url'],
             'sso_region': sso_config['sso_region'],
-            'registration_scopes': sso_config.get('registration_scopes')
+            'registration_scopes': sso_config.get('registration_scopes'),
         }
 
     def _prompt_for_registration_args_for_new_sso_session(self, sso_session):
         self._set_sso_session_defaults_from_profile_config()
         start_url, sso_region = self._prompt_for_sso_start_url_and_sso_region()
-        scopes = self._sso_session_prompter.prompt_for_sso_registration_scopes()
+        scopes = (
+            self._sso_session_prompter.prompt_for_sso_registration_scopes()
+        )
         return {
             'session_name': sso_session,
             'start_url': start_url,
@@ -591,14 +632,15 @@ class ConfigureSSOCommand(BaseSSOConfigu
             # using any cached tokens from any previous of attempts to
             # create/authenticate a new SSO session as part of the configure
             # sso flow.
-            'force_refresh': True
+            'force_refresh': True,
         }
 
     def _store_sso_session_prompter_answers_to_profile_config(self):
         # Wire the SSO session prompter to set config values to the
         # dictionary used for writing to the profile section
-        self._sso_session_prompter.sso_session_config = \
+        self._sso_session_prompter.sso_session_config = (
             self._new_profile_config_values
+        )
 
     def _set_sso_session_in_profile_config(self, sso_session):
         self._new_profile_config_values['sso_session'] = sso_session
@@ -608,11 +650,13 @@ class ConfigureSSOCommand(BaseSSOConfigu
         # SSO configuration as part of the prompt if a profile was explicitly
         # provided that already had SSO configuration
         if 'sso_start_url' in self._profile_config:
-            self._sso_session_prompter.sso_session_config['sso_start_url'] = \
+            self._sso_session_prompter.sso_session_config['sso_start_url'] = (
                 self._profile_config['sso_start_url']
+            )
         if 'sso_region' in self._profile_config:
-            self._sso_session_prompter.sso_session_config['sso_region'] = \
+            self._sso_session_prompter.sso_session_config['sso_region'] = (
                 self._profile_config['sso_region']
+            )
 
     def _prompt_for_sso_start_url_and_sso_region(self):
         start_url = self._sso_session_prompter.prompt_for_sso_start_url()
@@ -633,8 +677,9 @@ class ConfigureSSOCommand(BaseSSOConfigu
         try:
             sso_account_id = self._prompt_for_account(sso, sso_token)
             sso_role_name = self._prompt_for_role(
-                sso, sso_token, sso_account_id)
-        except sso.exceptions.UnauthorizedException as e:
+                sso, sso_token, sso_account_id
+            )
+        except sso.exceptions.UnauthorizedException:
             uni_print(
                 'Unable to list AWS accounts and/or roles. '
                 'Skipping configuring AWS credential provider for profile.\n'
@@ -645,17 +690,25 @@ class ConfigureSSOCommand(BaseSSOConfigu
         if self._new_profile_config_values:
             profile_section = profile_to_section(profile)
             self._update_section(
-                profile_section, self._new_profile_config_values)
+                profile_section, self._new_profile_config_values
+            )
         if self._sso_session_prompter.sso_session:
             self._write_sso_configuration()
 
     def _print_conclusion(self, configured_for_aws_credentials, profile_name):
         if configured_for_aws_credentials:
-            msg = (
-                '\nTo use this profile, specify the profile name using '
-                '--profile, as shown:\n\n'
-                'aws s3 ls --profile {}\n'
-            )
+            if profile_name.lower() == 'default':
+                msg = (
+                    'The AWS CLI is now configured to use the default profile.\n'
+                    'Run the following command to verify your configuration:\n\n'
+                    'aws sts get-caller-identity\n'
+                )
+            else:
+                msg = (
+                    'To use this profile, specify the profile name using '
+                    '--profile, as shown:\n\n'
+                    'aws sts get-caller-identity --profile {}\n'
+                )
         else:
             msg = 'Successfully configured SSO for profile: {}\n'
         uni_print(msg.format(profile_name))
@@ -663,7 +716,7 @@ class ConfigureSSOCommand(BaseSSOConfigu
 
 class ConfigureSSOSessionCommand(BaseSSOConfigurationCommand):
     NAME = 'sso-session'
-    SYNOPSIS = ('aws configure sso-session')
+    SYNOPSIS = 'aws configure sso-session'
     DESCRIPTION = (
         'The ``aws configure sso-session`` command interactively prompts for '
         'the configuration values required to create a SSO session. '
diff -pruN 2.23.6-1/awscli/customizations/configure/writer.py 2.31.35-1/awscli/customizations/configure/writer.py
--- 2.23.6-1/awscli/customizations/configure/writer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/configure/writer.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,13 +16,13 @@ import re
 from . import SectionNotFoundError
 
 
-class ConfigFileWriter(object):
+class ConfigFileWriter:
     SECTION_REGEX = re.compile(r'^\s*\[(?P<header>[^]]+)\]')
     OPTION_REGEX = re.compile(
         r'(?P<option>[^:=][^:=]*)'
         r'\s*(?P<vi>[:=])\s*'
         r'(?P<value>.*)$'
-    )
+    )  # fmt: skip
 
     def update_config(self, new_values, config_filename):
         """Update config file with new values.
@@ -56,7 +56,7 @@ class ConfigFileWriter(object):
             self._create_file(config_filename)
             self._write_new_section(section_name, new_values, config_filename)
             return
-        with open(config_filename, 'r') as f:
+        with open(config_filename) as f:
             contents = f.readlines()
         # We can only update a single section at a time so we first need
         # to find the section in question
@@ -72,8 +72,9 @@ class ConfigFileWriter(object):
         dirname = os.path.split(config_filename)[0]
         if not os.path.isdir(dirname):
             os.makedirs(dirname)
-        with os.fdopen(os.open(config_filename,
-                               os.O_WRONLY | os.O_CREAT, 0o600), 'w'):
+        with os.fdopen(
+            os.open(config_filename, os.O_WRONLY | os.O_CREAT, 0o600), 'w'
+        ):
             pass
 
     def _check_file_needs_newline(self, filename):
@@ -92,11 +93,11 @@ class ConfigFileWriter(object):
         with open(config_filename, 'a') as f:
             if needs_newline:
                 f.write('\n')
-            f.write('[%s]\n' % section_name)
+            f.write(f'[{section_name}]\n')
             contents = []
-            self._insert_new_values(line_number=0,
-                                    contents=contents,
-                                    new_values=new_values)
+            self._insert_new_values(
+                line_number=0, contents=contents, new_values=new_values
+            )
             f.write(''.join(contents))
 
     def _find_section_start(self, contents, section_name):
@@ -106,8 +107,9 @@ class ConfigFileWriter(object):
                 # This is a comment, so we can safely ignore this line.
                 continue
             match = self.SECTION_REGEX.search(line)
-            if match is not None and self._matches_section(match,
-                                                           section_name):
+            if match is not None and self._matches_section(
+                match, section_name
+            ):
                 return i
         raise SectionNotFoundError(section_name)
 
@@ -116,8 +118,9 @@ class ConfigFileWriter(object):
         # This will be the value of i.
         new_values = new_values.copy()
         # ``contents`` is a list of file line contents.
-        section_start_line_num = self._find_section_start(contents,
-                                                          section_name)
+        section_start_line_num = self._find_section_start(
+            contents, section_name
+        )
         # If we get here, then we've found the section.  We now need
         # to figure out if we're updating a value or adding a new value.
         # There's 2 cases.  Either we're setting a normal scalar value
@@ -129,9 +132,11 @@ class ConfigFileWriter(object):
             if self.SECTION_REGEX.search(line) is not None:
                 # We've hit a new section which means the config key is
                 # not in the section.  We need to add it here.
-                self._insert_new_values(line_number=last_matching_line,
-                                        contents=contents,
-                                        new_values=new_values)
+                self._insert_new_values(
+                    line_number=last_matching_line,
+                    contents=contents,
+                    new_values=new_values,
+                )
                 return
             match = self.OPTION_REGEX.search(line)
             if match is not None:
@@ -143,22 +148,31 @@ class ConfigFileWriter(object):
                     # out now.
                     if not isinstance(new_values[key_name], dict):
                         option_value = new_values[key_name]
-                        new_line = '%s = %s\n' % (key_name, option_value)
-                        contents[j] = new_line
+                        if option_value is None:
+                            # Remove the line by replacing with empty string
+                            contents[j] = ''
+                        else:
+                            new_line = f'{key_name} = {option_value}\n'
+                            contents[j] = new_line
                         del new_values[key_name]
                     else:
                         j = self._update_subattributes(
-                            j, contents, new_values[key_name],
-                            len(match.group(1)) - len(match.group(1).lstrip()))
+                            j,
+                            contents,
+                            new_values[key_name],
+                            len(match.group(1)) - len(match.group(1).lstrip()),
+                        )
                         return
             j += 1
 
         if new_values:
             if not contents[-1].endswith('\n'):
                 contents.append('\n')
-            self._insert_new_values(line_number=last_matching_line + 1,
-                                    contents=contents,
-                                    new_values=new_values)
+            self._insert_new_values(
+                line_number=last_matching_line + 1,
+                contents=contents,
+                new_values=new_values,
+            )
 
     def _update_subattributes(self, index, contents, values, starting_indent):
         index += 1
@@ -166,17 +180,21 @@ class ConfigFileWriter(object):
             line = contents[i]
             match = self.OPTION_REGEX.search(line)
             if match is not None:
-                current_indent = len(
-                    match.group(1)) - len(match.group(1).lstrip())
+                current_indent = len(match.group(1)) - len(
+                    match.group(1).lstrip()
+                )
                 key_name = match.group(1).strip()
                 if key_name in values:
                     option_value = values[key_name]
-                    new_line = '%s%s = %s\n' % (' ' * current_indent,
-                                                key_name, option_value)
+                    new_line = (
+                        f"{' ' * current_indent}{key_name} = {option_value}\n"
+                    )
                     contents[i] = new_line
                     del values[key_name]
-            if starting_indent == current_indent or \
-                    self.SECTION_REGEX.search(line) is not None:
+            if (
+                starting_indent == current_indent
+                or self.SECTION_REGEX.search(line) is not None
+            ):
                 # We've arrived at the starting indent level so we can just
                 # write out all the values now.
                 self._insert_new_values(i - 1, contents, values, '    ')
@@ -192,20 +210,21 @@ class ConfigFileWriter(object):
         for key, value in list(new_values.items()):
             if isinstance(value, dict):
                 subindent = indent + '    '
-                new_contents.append('%s%s =\n' % (indent, key))
+                new_contents.append(f'{indent}{key} =\n')
                 for subkey, subval in list(value.items()):
-                    new_contents.append('%s%s = %s\n' % (subindent, subkey,
-                                                         subval))
-            else:
-                new_contents.append('%s%s = %s\n' % (indent, key, value))
+                    new_contents.append(f'{subindent}{subkey} = {subval}\n')
+            elif value is not None:
+                new_contents.append(f'{indent}{key} = {value}\n')
             del new_values[key]
-        contents.insert(line_number + 1, ''.join(new_contents))
+        if new_contents:
+            contents.insert(line_number + 1, ''.join(new_contents))
 
     def _matches_section(self, match, section_name):
         parts = section_name.split(' ')
-        unquoted_match = match.group(0) == '[%s]' % section_name
+        unquoted_match = match.group(0) == f'[{section_name}]'
         if len(parts) > 1:
-            quoted_match = match.group(0) == '[%s "%s"]' % (
-                parts[0], ' '.join(parts[1:]))
+            quoted_match = (
+                match.group(0) == f'[{parts[0]} "{" ".join(parts[1:])}"]'
+            )
             return unquoted_match or quoted_match
         return unquoted_match
diff -pruN 2.23.6-1/awscli/customizations/datapipeline/__init__.py 2.31.35-1/awscli/customizations/datapipeline/__init__.py
--- 2.23.6-1/awscli/customizations/datapipeline/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/datapipeline/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,16 +14,17 @@
 import json
 from datetime import datetime, timedelta
 
-from awscli.formatter import get_formatter
 from awscli.arguments import CustomArgument
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.datapipeline import translator
-from awscli.customizations.datapipeline.createdefaultroles \
-    import CreateDefaultRoles
-from awscli.customizations.datapipeline.listrunsformatter \
-    import ListRunsFormatter
+from awscli.customizations.datapipeline.createdefaultroles import (
+    CreateDefaultRoles,
+)
+from awscli.customizations.datapipeline.listrunsformatter import (
+    ListRunsFormatter,
+)
 from awscli.customizations.exceptions import ParamValidationError
-
+from awscli.formatter import get_formatter
 
 DEFINITION_HELP_TEXT = """\
 The JSON pipeline definition.  If the pipeline definition
@@ -60,7 +61,7 @@ class DocSectionNotFoundError(Exception)
 
 class ParameterDefinitionError(ParamValidationError):
     def __init__(self, msg):
-        full_msg = ("Error in parameter: %s\n" % msg)
+        full_msg = "Error in parameter: %s\n" % msg
         super(ParameterDefinitionError, self).__init__(full_msg)
         self.msg = msg
 
@@ -68,20 +69,20 @@ class ParameterDefinitionError(ParamVali
 def register_customizations(cli):
     cli.register(
         'building-argument-table.datapipeline.put-pipeline-definition',
-        add_pipeline_definition)
+        add_pipeline_definition,
+    )
     cli.register(
         'building-argument-table.datapipeline.activate-pipeline',
-        activate_pipeline_definition)
+        activate_pipeline_definition,
+    )
     # botocore level events use service id, not service name
     cli.register(
-        'after-call.data-pipeline.GetPipelineDefinition',
-        translate_definition)
-    cli.register(
-        'building-command-table.datapipeline',
-        register_commands)
+        'after-call.data-pipeline.GetPipelineDefinition', translate_definition
+    )
+    cli.register('building-command-table.datapipeline', register_commands)
     cli.register_last(
-        'doc-output.datapipeline.get-pipeline-definition',
-        document_translation)
+        'doc-output.datapipeline.get-pipeline-definition', document_translation
+    )
 
 
 def register_commands(command_table, session, **kwargs):
@@ -103,36 +104,42 @@ def document_translation(help_command, *
             # we should be raising something with a helpful error message.
             raise DocSectionNotFoundError(
                 'Could not find the "output" section for the command: %s'
-                % help_command)
+                % help_command
+            )
     doc.write('======\nOutput\n======')
     doc.write(
         '\nThe output of this command is the pipeline definition, which'
         ' is documented in the '
         '`Pipeline Definition File Syntax '
         '<http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/'
-        'dp-writing-pipeline-definition.html>`__')
+        'dp-writing-pipeline-definition.html>`__'
+    )
 
 
 def add_pipeline_definition(argument_table, **kwargs):
     argument_table['pipeline-definition'] = PipelineDefinitionArgument(
-        'pipeline-definition', required=True,
-        help_text=DEFINITION_HELP_TEXT)
+        'pipeline-definition', required=True, help_text=DEFINITION_HELP_TEXT
+    )
 
     argument_table['parameter-objects'] = ParameterObjectsArgument(
-        'parameter-objects', required=False,
-        help_text=PARAMETER_OBJECTS_HELP_TEXT)
+        'parameter-objects',
+        required=False,
+        help_text=PARAMETER_OBJECTS_HELP_TEXT,
+    )
 
     argument_table['parameter-values-uri'] = ParameterValuesArgument(
         'parameter-values-uri',
         required=False,
-        help_text=PARAMETER_VALUES_HELP_TEXT)
+        help_text=PARAMETER_VALUES_HELP_TEXT,
+    )
 
     # Need to use an argument model for inline parameters to accept a list
     argument_table['parameter-values'] = ParameterValuesInlineArgument(
         'parameter-values',
         required=False,
         nargs='+',
-        help_text=INLINE_PARAMETER_VALUES_HELP_TEXT)
+        help_text=INLINE_PARAMETER_VALUES_HELP_TEXT,
+    )
 
     # The pipeline-objects is no longer needed required because
     # a user can provide a pipeline-definition instead.
@@ -144,8 +151,10 @@ def add_pipeline_definition(argument_tab
 
 def activate_pipeline_definition(argument_table, **kwargs):
     argument_table['parameter-values-uri'] = ParameterValuesArgument(
-        'parameter-values-uri', required=False,
-        help_text=PARAMETER_VALUES_HELP_TEXT)
+        'parameter-values-uri',
+        required=False,
+        help_text=PARAMETER_VALUES_HELP_TEXT,
+    )
 
     # Need to use an argument model for inline parameters to accept a list
     argument_table['parameter-values'] = ParameterValuesInlineArgument(
@@ -153,7 +162,7 @@ def activate_pipeline_definition(argumen
         required=False,
         nargs='+',
         help_text=INLINE_PARAMETER_VALUES_HELP_TEXT,
-        )
+    )
 
 
 def translate_definition(parsed, **kwargs):
@@ -172,18 +181,20 @@ def convert_described_objects(api_descri
             'name': obj['name'],
         }
         for field in obj['fields']:
-            new_fields[field['key']] = field.get('stringValue',
-                                                 field.get('refValue'))
+            new_fields[field['key']] = field.get(
+                'stringValue', field.get('refValue')
+            )
         converted.append(new_fields)
     if sort_key_func is not None:
         converted.sort(key=sort_key_func)
     return converted
 
 
-class QueryArgBuilder(object):
+class QueryArgBuilder:
     """
     Convert CLI arguments to Query arguments used by QueryObject.
     """
+
     def __init__(self, current_time=None):
         if current_time is None:
             current_time = datetime.utcnow()
@@ -191,8 +202,10 @@ class QueryArgBuilder(object):
 
     def build_query(self, parsed_args):
         selectors = []
-        if parsed_args.start_interval is None and \
-                parsed_args.schedule_interval is None:
+        if (
+            parsed_args.start_interval is None
+            and parsed_args.schedule_interval is None
+        ):
             # If no intervals are specified, default
             # to a start time of 4 days ago and an end time
             # of right now.
@@ -200,13 +213,15 @@ class QueryArgBuilder(object):
             start_datetime = end_datetime - timedelta(days=4)
             start_time_str = start_datetime.strftime('%Y-%m-%dT%H:%M:%S')
             end_time_str = end_datetime.strftime('%Y-%m-%dT%H:%M:%S')
-            selectors.append({
-                'fieldName': '@actualStartTime',
-                'operator': {
-                    'type': 'BETWEEN',
-                    'values': [start_time_str, end_time_str]
+            selectors.append(
+                {
+                    'fieldName': '@actualStartTime',
+                    'operator': {
+                        'type': 'BETWEEN',
+                        'values': [start_time_str, end_time_str],
+                    },
                 }
-            })
+            )
         else:
             self._build_schedule_times(selectors, parsed_args)
         if parsed_args.status is not None:
@@ -218,32 +233,40 @@ class QueryArgBuilder(object):
         if parsed_args.start_interval is not None:
             start_time_str = parsed_args.start_interval[0]
             end_time_str = parsed_args.start_interval[1]
-            selectors.append({
-                'fieldName': '@actualStartTime',
-                'operator': {
-                    'type': 'BETWEEN',
-                    'values': [start_time_str, end_time_str]
+            selectors.append(
+                {
+                    'fieldName': '@actualStartTime',
+                    'operator': {
+                        'type': 'BETWEEN',
+                        'values': [start_time_str, end_time_str],
+                    },
                 }
-            })
+            )
         if parsed_args.schedule_interval is not None:
             start_time_str = parsed_args.schedule_interval[0]
             end_time_str = parsed_args.schedule_interval[1]
-            selectors.append({
-                'fieldName': '@scheduledStartTime',
-                'operator': {
-                    'type': 'BETWEEN',
-                    'values': [start_time_str, end_time_str]
+            selectors.append(
+                {
+                    'fieldName': '@scheduledStartTime',
+                    'operator': {
+                        'type': 'BETWEEN',
+                        'values': [start_time_str, end_time_str],
+                    },
                 }
-            })
+            )
 
     def _build_status(self, selectors, parsed_args):
-        selectors.append({
-            'fieldName': '@status',
-            'operator': {
-                'type': 'EQ',
-                'values': [status.upper() for status in parsed_args.status]
+        selectors.append(
+            {
+                'fieldName': '@status',
+                'operator': {
+                    'type': 'EQ',
+                    'values': [
+                        status.upper() for status in parsed_args.status
+                    ],
+                },
             }
-        })
+        )
 
 
 class PipelineDefinitionArgument(CustomArgument):
@@ -256,11 +279,15 @@ class PipelineDefinitionArgument(CustomA
         parameter_values = translator.definition_to_parameter_values(parsed)
         parameters['pipelineObjects'] = api_objects
         # Use Parameter objects and values from def if not already provided
-        if 'parameterObjects' not in parameters \
-                and parameter_objects is not None:
+        if (
+            'parameterObjects' not in parameters
+            and parameter_objects is not None
+        ):
             parameters['parameterObjects'] = parameter_objects
-        if 'parameterValues' not in parameters \
-                and parameter_values is not None:
+        if (
+            'parameterValues' not in parameters
+            and parameter_values is not None
+        ):
             parameters['parameterValues'] = parameter_values
 
 
@@ -275,7 +302,6 @@ class ParameterObjectsArgument(CustomArg
 
 class ParameterValuesArgument(CustomArgument):
     def add_to_params(self, parameters, value):
-
         if value is None:
             return
 
@@ -291,7 +317,6 @@ class ParameterValuesArgument(CustomArgu
 
 class ParameterValuesInlineArgument(CustomArgument):
     def add_to_params(self, parameters, value):
-
         if value is None:
             return
 
@@ -328,32 +353,59 @@ class ListRunsCommand(BasicCommand):
     DESCRIPTION = (
         'Lists the times the specified pipeline has run. '
         'You can optionally filter the complete list of '
-        'results to include only the runs you are interested in.')
+        'results to include only the runs you are interested in.'
+    )
     ARG_TABLE = [
-        {'name': 'pipeline-id', 'help_text': 'The identifier of the pipeline.',
-         'action': 'store', 'required': True, 'cli_type_name': 'string', },
-        {'name': 'status',
-         'help_text': (
-             'Filters the list to include only runs in the '
-             'specified statuses. '
-             'The valid statuses are as follows: waiting, pending, cancelled, '
-             'running, finished, failed, waiting_for_runner, '
-             'and waiting_on_dependencies.'),
-         'action': 'store'},
-        {'name': 'start-interval',
-         'help_text': (
-             'Filters the list to include only runs that started '
-             'within the specified interval.'),
-         'action': 'store', 'required': False, 'cli_type_name': 'string', },
-        {'name': 'schedule-interval',
-         'help_text': (
-             'Filters the list to include only runs that are scheduled to '
-             'start within the specified interval.'),
-         'action': 'store', 'required': False, 'cli_type_name': 'string', },
+        {
+            'name': 'pipeline-id',
+            'help_text': 'The identifier of the pipeline.',
+            'action': 'store',
+            'required': True,
+            'cli_type_name': 'string',
+        },
+        {
+            'name': 'status',
+            'help_text': (
+                'Filters the list to include only runs in the '
+                'specified statuses. '
+                'The valid statuses are as follows: waiting, pending, cancelled, '
+                'running, finished, failed, waiting_for_runner, '
+                'and waiting_on_dependencies.'
+            ),
+            'action': 'store',
+        },
+        {
+            'name': 'start-interval',
+            'help_text': (
+                'Filters the list to include only runs that started '
+                'within the specified interval.'
+            ),
+            'action': 'store',
+            'required': False,
+            'cli_type_name': 'string',
+        },
+        {
+            'name': 'schedule-interval',
+            'help_text': (
+                'Filters the list to include only runs that are scheduled to '
+                'start within the specified interval.'
+            ),
+            'action': 'store',
+            'required': False,
+            'cli_type_name': 'string',
+        },
+    ]
+    VALID_STATUS = [
+        'waiting',
+        'pending',
+        'cancelled',
+        'running',
+        'finished',
+        'failed',
+        'waiting_for_runner',
+        'waiting_on_dependencies',
+        'shutting_down',
     ]
-    VALID_STATUS = ['waiting', 'pending', 'cancelled', 'running',
-                    'finished', 'failed', 'waiting_for_runner',
-                    'waiting_on_dependencies', 'shutting_down']
 
     def _run_main(self, parsed_args, parsed_globals, **kwargs):
         self._set_client(parsed_globals)
@@ -368,7 +420,8 @@ class ListRunsCommand(BasicCommand):
             'datapipeline',
             region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
 
     def _parse_type_args(self, parsed_args):
         # TODO: give good error messages!
@@ -376,24 +429,24 @@ class ListRunsCommand(BasicCommand):
         # Parse the status csv.
         if parsed_args.start_interval is not None:
             parsed_args.start_interval = [
-                arg.strip() for arg in
-                parsed_args.start_interval.split(',')]
+                arg.strip() for arg in parsed_args.start_interval.split(',')
+            ]
         if parsed_args.schedule_interval is not None:
             parsed_args.schedule_interval = [
-                arg.strip() for arg in
-                parsed_args.schedule_interval.split(',')]
+                arg.strip() for arg in parsed_args.schedule_interval.split(',')
+            ]
         if parsed_args.status is not None:
             parsed_args.status = [
-                arg.strip() for arg in
-                parsed_args.status.split(',')]
+                arg.strip() for arg in parsed_args.status.split(',')
+            ]
             self._validate_status_choices(parsed_args.status)
 
     def _validate_status_choices(self, statuses):
         for status in statuses:
             if status not in self.VALID_STATUS:
                 raise ParamValidationError(
-                    "Invalid status: %s, must be one of: %s" %
-                    (status, ', '.join(self.VALID_STATUS))
+                    "Invalid status: %s, must be one of: %s"
+                    % (status, ', '.join(self.VALID_STATUS))
                 )
 
     def _list_runs(self, parsed_args, parsed_globals):
@@ -402,8 +455,11 @@ class ListRunsCommand(BasicCommand):
         objects = self._describe_objects(parsed_args.pipeline_id, object_ids)
         converted = convert_described_objects(
             objects,
-            sort_key_func=lambda x: (x.get('@scheduledStartTime'),
-                                     x.get('name')))
+            sort_key_func=lambda x: (
+                x.get('@scheduledStartTime'),
+                x.get('name'),
+            ),
+        )
         formatter = self._get_formatter(parsed_globals)
         formatter(self.NAME, converted)
 
@@ -413,17 +469,18 @@ class ListRunsCommand(BasicCommand):
         # most that size. We then aggregate the results to return.
         objects = []
         for i in range(0, len(object_ids), MAX_ITEMS_PER_DESCRIBE):
-            current_object_ids = object_ids[i:i + MAX_ITEMS_PER_DESCRIBE]
+            current_object_ids = object_ids[i : i + MAX_ITEMS_PER_DESCRIBE]
             result = self.client.describe_objects(
-                pipelineId=pipeline_id, objectIds=current_object_ids)
+                pipelineId=pipeline_id, objectIds=current_object_ids
+            )
             objects.extend(result['pipelineObjects'])
 
         return objects
 
     def _query_objects(self, pipeline_id, query):
         paginator = self.client.get_paginator('query_objects').paginate(
-            pipelineId=pipeline_id,
-            sphere='INSTANCE', query=query)
+            pipelineId=pipeline_id, sphere='INSTANCE', query=query
+        )
         parsed = paginator.build_full_result()
         return parsed['ids']
 
diff -pruN 2.23.6-1/awscli/customizations/datapipeline/constants.py 2.31.35-1/awscli/customizations/datapipeline/constants.py
--- 2.23.6-1/awscli/customizations/datapipeline/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/datapipeline/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,11 +18,14 @@ DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME =
 DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME = "DataPipelineDefaultResourceRole"
 
 # DataPipeline role arn names
-DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN = ("arn:aws:iam::aws:policy/"
-                                         "service-role/AWSDataPipelineRole")
-DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN = ("arn:aws:iam::aws:policy/"
-                                          "service-role/"
-                                          "AmazonEC2RoleforDataPipelineRole")
+DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN = (
+    "arn:aws:iam::aws:policy/" "service-role/AWSDataPipelineRole"
+)
+DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN = (
+    "arn:aws:iam::aws:policy/"
+    "service-role/"
+    "AmazonEC2RoleforDataPipelineRole"
+)
 
 # Assume Role Policy definitions for roles
 DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY = {
@@ -32,9 +35,9 @@ DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUM
             "Sid": "",
             "Effect": "Allow",
             "Principal": {"Service": "ec2.amazonaws.com"},
-            "Action": "sts:AssumeRole"
+            "Action": "sts:AssumeRole",
         }
-    ]
+    ],
 }
 
 DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY = {
@@ -43,10 +46,13 @@ DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME
         {
             "Sid": "",
             "Effect": "Allow",
-            "Principal": {"Service": ["datapipeline.amazonaws.com",
-                                      "elasticmapreduce.amazonaws.com"]
-                          },
-            "Action": "sts:AssumeRole"
+            "Principal": {
+                "Service": [
+                    "datapipeline.amazonaws.com",
+                    "elasticmapreduce.amazonaws.com",
+                ]
+            },
+            "Action": "sts:AssumeRole",
         }
-    ]
+    ],
 }
diff -pruN 2.23.6-1/awscli/customizations/datapipeline/createdefaultroles.py 2.31.35-1/awscli/customizations/datapipeline/createdefaultroles.py
--- 2.23.6-1/awscli/customizations/datapipeline/createdefaultroles.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/datapipeline/createdefaultroles.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,18 +15,24 @@
 
 import logging
 import warnings
-from awscli.customizations.datapipeline.constants \
-    import DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME, \
-    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME, \
-    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN, \
-    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN, \
-    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY, \
-    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY
-from awscli.customizations.commands import BasicCommand
-from awscli.customizations.datapipeline.translator \
-    import display_response, dict_to_string, get_region
+
 from botocore.exceptions import ClientError
 
+from awscli.customizations.commands import BasicCommand
+from awscli.customizations.datapipeline.constants import (
+    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN,
+    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY,
+    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN,
+    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY,
+    DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
+)
+from awscli.customizations.datapipeline.translator import (
+    dict_to_string,
+    display_response,
+    get_region,
+)
+
 LOG = logging.getLogger(__name__)
 
 
@@ -53,7 +59,6 @@ their policies.
 
 
 class CreateDefaultRoles(BasicCommand):
-
     NAME = "create-default-roles"
     _UNDOCUMENTED = True
     DESCRIPTION = _DESCRIPTION.format(
@@ -70,10 +75,10 @@ class CreateDefaultRoles(BasicCommand):
         self._region = get_region(self._session, parsed_globals)
         self._endpoint_url = parsed_globals.endpoint_url
         self._iam_client = self._session.create_client(
-            'iam', 
-            region_name=self._region, 
+            'iam',
+            region_name=self._region,
             endpoint_url=self._endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         warnings.warn(_DEPRECATION_NOTICE)
         return self._create_default_roles(parsed_args, parsed_globals)
@@ -89,63 +94,78 @@ class CreateDefaultRoles(BasicCommand):
         if self._check_if_role_exists(role_name):
             LOG.debug('Role ' + role_name + ' exists.')
         else:
-            LOG.debug('Role ' + role_name + ' does not exist.'
-                      ' Creating default role for EC2: ' + role_name)
+            LOG.debug(
+                'Role ' + role_name + ' does not exist.'
+                ' Creating default role for EC2: ' + role_name
+            )
             # Create a create using the IAM Client with a particular triplet
             # (role_name, role_arn, assume_role_policy)
-            role_result = self._create_role_with_role_policy(role_name,
-                                                             role_policy,
-                                                             role_arn)
+            role_result = self._create_role_with_role_policy(
+                role_name, role_policy, role_arn
+            )
             role_policy_result = self._get_role_policy(role_arn)
         return role_result, role_policy_result
 
-    def _construct_result(self, dpl_default_result,
-                          dpl_default_policy,
-                          dpl_default_res_result,
-                          dpl_default_res_policy):
+    def _construct_result(
+        self,
+        dpl_default_result,
+        dpl_default_policy,
+        dpl_default_res_result,
+        dpl_default_res_policy,
+    ):
         """Method to create a resultant list of responses for create roles
         for service and resource role
         """
 
         result = []
-        self._construct_role_and_role_policy_structure(result,
-                                                       dpl_default_result,
-                                                       dpl_default_policy)
-        self._construct_role_and_role_policy_structure(result,
-                                                       dpl_default_res_result,
-                                                       dpl_default_res_policy)
+        self._construct_role_and_role_policy_structure(
+            result, dpl_default_result, dpl_default_policy
+        )
+        self._construct_role_and_role_policy_structure(
+            result, dpl_default_res_result, dpl_default_res_policy
+        )
         return result
 
     def _create_default_roles(self, parsed_args, parsed_globals):
-
         # Setting the role name and arn value
-        (datapipline_default_result,
-            datapipline_default_policy) = self._create_role(
+        (datapipline_default_result, datapipline_default_policy) = (
+            self._create_role(
                 DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
                 DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN,
-                DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY)
+                DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY,
+            )
+        )
 
-        (datapipline_default_resource_result,
-            datapipline_default_resource_policy) = self._create_role(
-                DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
-                DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN,
-                DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY)
+        (
+            datapipline_default_resource_result,
+            datapipline_default_resource_policy,
+        ) = self._create_role(
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN,
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY,
+        )
 
         # Check if the default EC2 Instance Profile for DataPipeline exists.
         instance_profile_name = DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME
         if self._check_if_instance_profile_exists(instance_profile_name):
             LOG.debug('Instance Profile ' + instance_profile_name + ' exists.')
         else:
-            LOG.debug('Instance Profile ' + instance_profile_name +
-                      'does not exist. Creating default Instance Profile ' +
-                      instance_profile_name)
-            self._create_instance_profile_with_role(instance_profile_name,
-                                                    instance_profile_name)
-
-        result = self._construct_result(datapipline_default_result,
-                                        datapipline_default_policy,
-                                        datapipline_default_resource_result,
-                                        datapipline_default_resource_policy)
+            LOG.debug(
+                'Instance Profile '
+                + instance_profile_name
+                + 'does not exist. Creating default Instance Profile '
+                + instance_profile_name
+            )
+            self._create_instance_profile_with_role(
+                instance_profile_name, instance_profile_name
+            )
+
+        result = self._construct_result(
+            datapipline_default_result,
+            datapipline_default_policy,
+            datapipline_default_resource_result,
+            datapipline_default_resource_policy,
+        )
 
         display_response(self._session, 'create_role', result, parsed_globals)
 
@@ -157,27 +177,32 @@ class CreateDefaultRoles(BasicCommand):
         """
         pol_det = self._iam_client.get_policy(PolicyArn=arn)
         policy_version_details = self._iam_client.get_policy_version(
-            PolicyArn=arn, VersionId=pol_det["Policy"]["DefaultVersionId"])
+            PolicyArn=arn, VersionId=pol_det["Policy"]["DefaultVersionId"]
+        )
         return policy_version_details["PolicyVersion"]["Document"]
 
     def _create_role_with_role_policy(
-            self, role_name, assume_role_policy, role_arn):
+        self, role_name, assume_role_policy, role_arn
+    ):
         """Method to create role with a given rolename, assume_role_policy
         and role_arn
         """
         # Create a role using IAM client CreateRole API
         create_role_response = self._iam_client.create_role(
-            RoleName=role_name, AssumeRolePolicyDocument=dict_to_string(
-                assume_role_policy))
+            RoleName=role_name,
+            AssumeRolePolicyDocument=dict_to_string(assume_role_policy),
+        )
 
         # Create a role using IAM client AttachRolePolicy API
-        self._iam_client.attach_role_policy(PolicyArn=role_arn,
-                                            RoleName=role_name)
+        self._iam_client.attach_role_policy(
+            PolicyArn=role_arn, RoleName=role_name
+        )
 
         return create_role_response
 
     def _construct_role_and_role_policy_structure(
-            self, list_val, response, policy):
+        self, list_val, response, policy
+    ):
         """Method to construct the message to be displayed to the user"""
         # If the response is not none they we get the role name
         # from the response and
@@ -191,7 +216,8 @@ class CreateDefaultRoles(BasicCommand):
         try:
             # Client call to get the instance profile with that name
             self._iam_client.get_instance_profile(
-                InstanceProfileName=instance_profile_name)
+                InstanceProfileName=instance_profile_name
+            )
 
         except ClientError as e:
             # If the instance profile does not exist then the error message
@@ -222,14 +248,17 @@ class CreateDefaultRoles(BasicCommand):
 
         return True
 
-    def _create_instance_profile_with_role(self, instance_profile_name,
-                                           role_name):
+    def _create_instance_profile_with_role(
+        self, instance_profile_name, role_name
+    ):
         """Method to create the instance profile with the role"""
         # Setting the value for instance profile name
         # Client call to create an instance profile
         self._iam_client.create_instance_profile(
-            InstanceProfileName=instance_profile_name)
+            InstanceProfileName=instance_profile_name
+        )
 
         # Adding the role to the Instance Profile
         self._iam_client.add_role_to_instance_profile(
-            InstanceProfileName=instance_profile_name, RoleName=role_name)
+            InstanceProfileName=instance_profile_name, RoleName=role_name
+        )
diff -pruN 2.23.6-1/awscli/customizations/datapipeline/listrunsformatter.py 2.31.35-1/awscli/customizations/datapipeline/listrunsformatter.py
--- 2.23.6-1/awscli/customizations/datapipeline/listrunsformatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/datapipeline/listrunsformatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,11 +25,12 @@ class ListRunsFormatter(FullyBufferedFor
             self._print_row(i, obj, stream)
 
     def _print_headers(self, stream):
-        stream.write(self.TITLE_ROW_FORMAT_STRING % (
-            "Name", "Scheduled Start", "Status"))
+        stream.write(
+            self.TITLE_ROW_FORMAT_STRING
+            % ("Name", "Scheduled Start", "Status")
+        )
         stream.write('\n')
-        second_row = (self.SECOND_ROW_FORMAT_STRING % (
-            "ID", "Started", "Ended"))
+        second_row = self.SECOND_ROW_FORMAT_STRING % ("ID", "Started", "Ended")
         stream.write(second_row)
         stream.write('\n')
         stream.write('-' * len(second_row))
@@ -43,9 +44,16 @@ class ListRunsFormatter(FullyBufferedFor
         start_date = obj.get('@actualStartTime', '')
         end_date = obj.get('@actualEndTime', '')
         first_row = self.FIRST_ROW_FORMAT_STRING % (
-            index + 1, logical_name, scheduled_start_date, status)
+            index + 1,
+            logical_name,
+            scheduled_start_date,
+            status,
+        )
         second_row = self.SECOND_ROW_FORMAT_STRING % (
-            object_id, start_date, end_date)
+            object_id,
+            start_date,
+            end_date,
+        )
         stream.write(first_row)
         stream.write('\n')
         stream.write(second_row)
diff -pruN 2.23.6-1/awscli/customizations/datapipeline/translator.py 2.31.35-1/awscli/customizations/datapipeline/translator.py
--- 2.23.6-1/awscli/customizations/datapipeline/translator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/datapipeline/translator.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,14 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import json
+
 from awscli.clidriver import CLIOperationCaller
 from awscli.customizations.exceptions import ParamValidationError
 
 
 class PipelineDefinitionError(ParamValidationError):
     def __init__(self, msg, definition):
-        full_msg = (
-            "Error in pipeline definition: %s\n" % msg)
+        full_msg = "Error in pipeline definition: %s\n" % msg
         super(PipelineDefinitionError, self).__init__(full_msg)
         self.msg = msg
         self.definition = definition
@@ -44,7 +44,8 @@ def display_response(session, operation_
     # Calling a private method. Should be changed after the functionality
     # is moved outside CliOperationCaller.
     cli_operation_caller._display_response(
-        operation_name, result, parsed_globals)
+        operation_name, result, parsed_globals
+    )
 
 
 def api_to_definition(definition):
@@ -54,13 +55,16 @@ def api_to_definition(definition):
     # api_response.
     if 'pipelineObjects' in definition:
         definition['objects'] = _api_to_objects_definition(
-            definition.pop('pipelineObjects'))
+            definition.pop('pipelineObjects')
+        )
     if 'parameterObjects' in definition:
         definition['parameters'] = _api_to_parameters_definition(
-            definition.pop('parameterObjects'))
+            definition.pop('parameterObjects')
+        )
     if 'parameterValues' in definition:
         definition['values'] = _api_to_values_definition(
-            definition.pop('parameterValues'))
+            definition.pop('parameterValues')
+        )
     return definition
 
 
@@ -75,8 +79,10 @@ def definition_to_api_objects(definition
         try:
             element_id = element.pop('id')
         except KeyError:
-            raise PipelineDefinitionError('Missing "id" key of element: %s' %
-                                          json.dumps(element), definition)
+            raise PipelineDefinitionError(
+                'Missing "id" key of element: %s' % json.dumps(element),
+                definition,
+            )
         api_object = {'id': element_id}
         # If a name is provided, then we use that for the name,
         # otherwise the id is used for the name.
@@ -100,8 +106,10 @@ def definition_to_api_parameters(definit
         try:
             parameter_id = element.pop('id')
         except KeyError:
-            raise PipelineDefinitionError('Missing "id" key of parameter: %s' %
-                                          json.dumps(element), definition)
+            raise PipelineDefinitionError(
+                'Missing "id" key of parameter: %s' % json.dumps(element),
+                definition,
+            )
         parameter_object = {'id': parameter_id}
         # Now we need the attribute list.  Each element in the attribute list
         # is a dict with a 'key', 'stringValue'
@@ -119,7 +127,8 @@ def definition_to_parameter_values(defin
     parameter_values = []
     for key in definition['values']:
         parameter_values.extend(
-            _convert_single_parameter_value(key, definition['values'][key]))
+            _convert_single_parameter_value(key, definition['values'][key])
+        )
 
     return parameter_values
 
@@ -158,10 +167,7 @@ def _convert_single_parameter_value(key,
 def _api_to_objects_definition(api_response):
     pipeline_objects = []
     for element in api_response:
-        current = {
-            'id': element['id'],
-            'name': element['name']
-        }
+        current = {'id': element['id'], 'name': element['name']}
         for field in element['fields']:
             key = field['key']
             if 'stringValue' in field:
@@ -176,9 +182,7 @@ def _api_to_objects_definition(api_respo
 def _api_to_parameters_definition(api_response):
     parameter_objects = []
     for element in api_response:
-        current = {
-            'id': element['id']
-        }
+        current = {'id': element['id']}
         for attribute in element['attributes']:
             _add_value(attribute['key'], attribute['stringValue'], current)
         parameter_objects.append(current)
diff -pruN 2.23.6-1/awscli/customizations/devcommands.py 2.31.35-1/awscli/customizations/devcommands.py
--- 2.23.6-1/awscli/customizations/devcommands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/devcommands.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,9 @@ from awscli.customizations.commands impo
 
 
 def register_dev_commands(event_handlers):
-    event_handlers.register('building-command-table.main',
-                            CLIDevCommand.add_command)
+    event_handlers.register(
+        'building-command-table.main', CLIDevCommand.add_command
+    )
 
 
 # This is adding a top level placeholder command to add dev commands.
diff -pruN 2.23.6-1/awscli/customizations/dlm/constants.py 2.31.35-1/awscli/customizations/dlm/constants.py
--- 2.23.6-1/awscli/customizations/dlm/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dlm/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,13 +15,15 @@
 
 # Lifecycle role names
 LIFECYCLE_DEFAULT_ROLE_NAME = "AWSDataLifecycleManagerDefaultRole"
-LIFECYCLE_DEFAULT_ROLE_NAME_AMI = \
+LIFECYCLE_DEFAULT_ROLE_NAME_AMI = (
     "AWSDataLifecycleManagerDefaultRoleForAMIManagement"
+)
 
 # Lifecycle role arn names
 LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME = "AWSDataLifecycleManagerServiceRole"
-LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI = \
+LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI = (
     "AWSDataLifecycleManagerServiceRoleForAMIManagement"
+)
 
 POLICY_ARN_PATTERN = "arn:{0}:iam::aws:policy/service-role/{1}"
 
@@ -33,9 +35,9 @@ LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY = {
             "Sid": "",
             "Effect": "Allow",
             "Principal": {"Service": "dlm.amazonaws.com"},
-            "Action": "sts:AssumeRole"
+            "Action": "sts:AssumeRole",
         }
-    ]
+    ],
 }
 
 RESOURCE_TYPE_SNAPSHOT = "snapshot"
@@ -44,10 +46,10 @@ RESOURCE_TYPE_IMAGE = "image"
 RESOURCES = {
     RESOURCE_TYPE_SNAPSHOT: {
         'default_role_name': LIFECYCLE_DEFAULT_ROLE_NAME,
-        'default_policy_name': LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME
+        'default_policy_name': LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME,
     },
     RESOURCE_TYPE_IMAGE: {
         'default_role_name': LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
-        'default_policy_name': LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI
-    }
+        'default_policy_name': LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI,
+    },
 }
diff -pruN 2.23.6-1/awscli/customizations/dlm/createdefaultrole.py 2.31.35-1/awscli/customizations/dlm/createdefaultrole.py
--- 2.23.6-1/awscli/customizations/dlm/createdefaultrole.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dlm/createdefaultrole.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,17 +13,19 @@
 
 # Class to create default roles for lifecycle
 import logging
+
 from awscli.clidriver import CLIOperationCaller
-from awscli.customizations.utils import get_policy_arn_suffix
 from awscli.customizations.commands import BasicCommand
+from awscli.customizations.dlm.constants import (
+    LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY,
+    POLICY_ARN_PATTERN,
+    RESOURCE_TYPE_IMAGE,
+    RESOURCE_TYPE_SNAPSHOT,
+    RESOURCES,
+)
 from awscli.customizations.dlm.iam import IAM
-from awscli.customizations.dlm.constants \
-    import RESOURCES, \
-    LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY, \
-    POLICY_ARN_PATTERN, \
-    RESOURCE_TYPE_SNAPSHOT, \
-    RESOURCE_TYPE_IMAGE
 from awscli.customizations.exceptions import ConfigurationError
+from awscli.customizations.utils import get_policy_arn_suffix
 
 LOG = logging.getLogger(__name__)
 
@@ -43,7 +45,8 @@ def display_response(session, operation_
         # Calling a private method. Should be changed after the functionality
         # is moved outside CliOperationCaller.
         cli_operation_caller._display_response(
-            operation_name, result, parsed_globals)
+            operation_name, result, parsed_globals
+        )
 
 
 # Get policy arn from region and policy name
@@ -63,31 +66,40 @@ def get_region(session, parsed_globals):
 
 class CreateDefaultRole(BasicCommand):
     NAME = "create-default-role"
-    DESCRIPTION = ('Creates the default IAM role '
-                   ' which will be used by Lifecycle service.\n'
-                   'If the role does not exist, create-default-role '
-                   'will automatically create it and set its policy.'
-                   ' If the role has been already '
-                   'created, create-default-role'
-                   ' will not update its policy.'
-                   '\n')
+    DESCRIPTION = (
+        'Creates the default IAM role '
+        ' which will be used by Lifecycle service.\n'
+        'If the role does not exist, create-default-role '
+        'will automatically create it and set its policy.'
+        ' If the role has been already '
+        'created, create-default-role'
+        ' will not update its policy.'
+        '\n'
+    )
     ARG_TABLE = [
-        {'name': 'iam-endpoint',
-         'no_paramfile': True,
-         'help_text': '<p>The IAM endpoint to call for creating the roles.'
-                      ' This is optional and should only be specified when a'
-                      ' custom endpoint should be called for IAM operations'
-                      '.</p>'},
-        {'name': 'resource-type',
-         'default': RESOURCE_TYPE_SNAPSHOT,
-         'choices': [RESOURCE_TYPE_SNAPSHOT, RESOURCE_TYPE_IMAGE],
-         'help_text': (
-                 "<p>The resource type for which the role needs to be created."
-                 " The available options are '%s' and '%s'."
-                 " This parameter defaults to '%s'.</p>"
-                 % (RESOURCE_TYPE_SNAPSHOT, RESOURCE_TYPE_IMAGE,
-                    RESOURCE_TYPE_SNAPSHOT))}
-
+        {
+            'name': 'iam-endpoint',
+            'no_paramfile': True,
+            'help_text': '<p>The IAM endpoint to call for creating the roles.'
+            ' This is optional and should only be specified when a'
+            ' custom endpoint should be called for IAM operations'
+            '.</p>',
+        },
+        {
+            'name': 'resource-type',
+            'default': RESOURCE_TYPE_SNAPSHOT,
+            'choices': [RESOURCE_TYPE_SNAPSHOT, RESOURCE_TYPE_IMAGE],
+            'help_text': (
+                "<p>The resource type for which the role needs to be created."
+                " The available options are '%s' and '%s'."
+                " This parameter defaults to '%s'.</p>"
+                % (
+                    RESOURCE_TYPE_SNAPSHOT,
+                    RESOURCE_TYPE_IMAGE,
+                    RESOURCE_TYPE_SNAPSHOT,
+                )
+            ),
+        },
     ]
 
     def __init__(self, session):
@@ -99,27 +111,24 @@ class CreateDefaultRole(BasicCommand):
         self._region = get_region(self._session, parsed_globals)
         self._endpoint_url = parsed_args.iam_endpoint
         self._resource_type = parsed_args.resource_type
-        self._iam_client = IAM(self._session.create_client(
-            'iam',
-            region_name=self._region,
-            endpoint_url=self._endpoint_url,
-            verify=parsed_globals.verify_ssl
-        ))
+        self._iam_client = IAM(
+            self._session.create_client(
+                'iam',
+                region_name=self._region,
+                endpoint_url=self._endpoint_url,
+                verify=parsed_globals.verify_ssl,
+            )
+        )
 
         result = self._create_default_role_if_not_exists(parsed_globals)
 
-        display_response(
-            self._session,
-            'create_role',
-            result,
-            parsed_globals
-        )
+        display_response(self._session, 'create_role', result, parsed_globals)
 
         return 0
 
     def _create_default_role_if_not_exists(self, parsed_globals):
         """Method to create default lifecycle role
-            if it doesn't exist already
+        if it doesn't exist already
         """
 
         role_name = RESOURCES[self._resource_type]['default_role_name']
@@ -129,8 +138,10 @@ class CreateDefaultRole(BasicCommand):
             LOG.debug('Role %s exists', role_name)
             return None
 
-        LOG.debug('Role %s does not exist. '
-                  'Creating default role for Lifecycle', role_name)
+        LOG.debug(
+            'Role %s does not exist. Creating default role for Lifecycle',
+            role_name,
+        )
 
         # Get Region
         region = get_region(self._session, parsed_globals)
@@ -142,8 +153,7 @@ class CreateDefaultRole(BasicCommand):
             )
 
         managed_policy_arn = get_policy_arn(
-            region,
-            RESOURCES[self._resource_type]['default_policy_name']
+            region, RESOURCES[self._resource_type]['default_policy_name']
         )
 
         # Don't proceed if managed policy does not exist
@@ -153,16 +163,11 @@ class CreateDefaultRole(BasicCommand):
 
         LOG.debug('Managed Policy %s exists.', managed_policy_arn)
         # Create default role
-        create_role_response = \
-            self._iam_client.create_role_with_trust_policy(
-                role_name,
-                assume_role_policy
-            )
-        # Attach policy to role
-        self._iam_client.attach_policy_to_role(
-            managed_policy_arn,
-            role_name
+        create_role_response = self._iam_client.create_role_with_trust_policy(
+            role_name, assume_role_policy
         )
+        # Attach policy to role
+        self._iam_client.attach_policy_to_role(managed_policy_arn, role_name)
 
         # Construct result
         get_policy_response = self._iam_client.get_policy(managed_policy_arn)
diff -pruN 2.23.6-1/awscli/customizations/dlm/iam.py 2.31.35-1/awscli/customizations/dlm/iam.py
--- 2.23.6-1/awscli/customizations/dlm/iam.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dlm/iam.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,7 @@
 import json
 
 
-class IAM(object):
-
+class IAM:
     def __init__(self, iam_client):
         self.iam_client = iam_client
 
@@ -25,17 +24,17 @@ class IAM(object):
     def attach_policy_to_role(self, policy_arn, role_name):
         """Method to attach LifecyclePolicy to role specified by role_name"""
         return self.iam_client.attach_role_policy(
-            PolicyArn=policy_arn,
-            RoleName=role_name
+            PolicyArn=policy_arn, RoleName=role_name
         )
 
     def create_role_with_trust_policy(self, role_name, assume_role_policy):
         """Method to create role with a given role name
-            and assume_role_policy
+        and assume_role_policy
         """
         return self.iam_client.create_role(
             RoleName=role_name,
-            AssumeRolePolicyDocument=json.dumps(assume_role_policy))
+            AssumeRolePolicyDocument=json.dumps(assume_role_policy),
+        )
 
     def get_policy(self, arn):
         """Method to get the Policy for a particular ARN
@@ -44,8 +43,8 @@ class IAM(object):
         pol_det = self.iam_client.get_policy(PolicyArn=arn)
         policy_version_details = self.iam_client.get_policy_version(
             PolicyArn=arn,
-            VersionId=pol_det.get("Policy", {}).get("DefaultVersionId", "")
+            VersionId=pol_det.get("Policy", {}).get("DefaultVersionId", ""),
+        )
+        return policy_version_details.get("PolicyVersion", {}).get(
+            "Document", {}
         )
-        return policy_version_details\
-            .get("PolicyVersion", {})\
-            .get("Document", {})
diff -pruN 2.23.6-1/awscli/customizations/dsql.py 2.31.35-1/awscli/customizations/dsql.py
--- 2.23.6-1/awscli/customizations/dsql.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dsql.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,8 +15,13 @@ from awscli.customizations.utils import
 
 
 def register_dsql_customizations(cli):
-    cli.register('building-command-table.dsql', _add_generate_dsql_db_connect_auth_token)
-    cli.register('building-command-table.dsql', _add_generate_dsql_db_connect_admin_auth_token)
+    cli.register(
+        'building-command-table.dsql', _add_generate_dsql_db_connect_auth_token
+    )
+    cli.register(
+        'building-command-table.dsql',
+        _add_generate_dsql_db_connect_admin_auth_token,
+    )
 
 
 def _add_generate_dsql_db_connect_auth_token(command_table, session, **kwargs):
@@ -24,33 +29,41 @@ def _add_generate_dsql_db_connect_auth_t
     command_table['generate-db-connect-auth-token'] = command
 
 
-def _add_generate_dsql_db_connect_admin_auth_token(command_table, session, **kwargs):
+def _add_generate_dsql_db_connect_admin_auth_token(
+    command_table, session, **kwargs
+):
     command = GenerateDBConnectAdminAuthTokenCommand(session)
     command_table['generate-db-connect-admin-auth-token'] = command
 
 
 class GenerateDBConnectAuthTokenCommand(BasicCommand):
     NAME = 'generate-db-connect-auth-token'
-    DESCRIPTION = (
-        'Generates an authorization token used to connect to a DSQL database with IAM credentials.'
-    )
+    DESCRIPTION = 'Generates an authorization token used to connect to a DSQL database with IAM credentials.'
     ARG_TABLE = [
-        {'name': 'hostname', 'required': True,
-         'help_text': 'Cluster endpoint e.g. http://test.example.com'},
-        {'name': 'expires-in', 'cli_type_name': 'integer', 'default': 900, 'required': False,
-         'help_text': 'Token expiry duration in seconds e.g. 3600. Default is 900 seconds.'},
+        {
+            'name': 'hostname',
+            'required': True,
+            'help_text': 'Cluster endpoint e.g. http://test.example.com',
+        },
+        {
+            'name': 'expires-in',
+            'cli_type_name': 'integer',
+            'default': 900,
+            'required': False,
+            'help_text': 'Token expiry duration in seconds e.g. 3600. Default is 900 seconds.',
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
         dsql = self._session.create_client(
-            'dsql', parsed_globals.region, parsed_globals.endpoint_url,
-            parsed_globals.verify_ssl
+            'dsql',
+            parsed_globals.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
         )
 
         token = dsql.generate_db_connect_auth_token(
-            parsed_args.hostname,
-            parsed_globals.region,
-            parsed_args.expires_in
+            parsed_args.hostname, parsed_globals.region, parsed_args.expires_in
         )
         uni_print(token)
         uni_print('\n')
@@ -59,26 +72,32 @@ class GenerateDBConnectAuthTokenCommand(
 
 class GenerateDBConnectAdminAuthTokenCommand(BasicCommand):
     NAME = 'generate-db-connect-admin-auth-token'
-    DESCRIPTION = (
-        'Generates an Admin authorization token used to connect to a DSQL database with IAM credentials.'
-    )
+    DESCRIPTION = 'Generates an Admin authorization token used to connect to a DSQL database with IAM credentials.'
     ARG_TABLE = [
-        {'name': 'hostname', 'required': True,
-         'help_text': 'Cluster endpoint e.g. http://test.example.com'},
-        {'name': 'expires-in', 'cli_type_name': 'integer', 'default': 900, 'required': False,
-         'help_text': 'Token expiry duration in seconds e.g. 3600. Default is 900 seconds.'},
+        {
+            'name': 'hostname',
+            'required': True,
+            'help_text': 'Cluster endpoint e.g. http://test.example.com',
+        },
+        {
+            'name': 'expires-in',
+            'cli_type_name': 'integer',
+            'default': 900,
+            'required': False,
+            'help_text': 'Token expiry duration in seconds e.g. 3600. Default is 900 seconds.',
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
         dsql = self._session.create_client(
-            'dsql', parsed_globals.region, parsed_globals.endpoint_url,
-            parsed_globals.verify_ssl
+            'dsql',
+            parsed_globals.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
         )
 
         token = dsql.generate_db_connect_admin_auth_token(
-            parsed_args.hostname,
-            parsed_globals.region,
-            parsed_args.expires_in
+            parsed_args.hostname, parsed_globals.region, parsed_args.expires_in
         )
         uni_print(token)
         uni_print('\n')
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/ast.py 2.31.35-1/awscli/customizations/dynamodb/ast.py
--- 2.23.6-1/awscli/customizations/dynamodb/ast.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/ast.py	2025-11-12 19:17:29.000000000 +0000
@@ -62,4 +62,3 @@ def between_expression(left, center, rig
 
 def comparison_expression(name, left, right):
     return {"type": "comparator", "children": [left, right], "value": name}
-
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/ddb.py 2.31.35-1/awscli/customizations/dynamodb/ddb.py
--- 2.23.6-1/awscli/customizations/dynamodb/ddb.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/ddb.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,8 @@
 # language governing permissions and limitations under the License.
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.dynamodb.subcommands import (
-    SelectCommand, PutCommand,
+    PutCommand,
+    SelectCommand,
 )
 
 
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/exceptions.py 2.31.35-1/awscli/customizations/dynamodb/exceptions.py
--- 2.23.6-1/awscli/customizations/dynamodb/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -44,8 +44,10 @@ class UnexpectedTokenError(ParserError):
         )
         if token is None:
             token = {
-                'type': 'None', 'value': None,
-                'start': len(expression), 'end': len(expression),
+                'type': 'None',
+                'value': None,
+                'start': len(expression),
+                'end': len(expression),
             }
         token_length = token['end'] - token['start']
         message = message.format(
@@ -64,8 +66,7 @@ class UnexpectedTokenError(ParserError):
 class InvalidLiteralValueError(ParserError):
     def __init__(self, token, message, expression):
         error_message = (
-            'Invalid token value: {message}\n'
-            '{expression}\n{underline}\n'
+            'Invalid token value: {message}\n{expression}\n{underline}\n'
         )
         token_length = token['end'] - token['start']
         underline = ' ' * token['start'] + '^' * (max(token_length, 1))
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/extractor.py 2.31.35-1/awscli/customizations/dynamodb/extractor.py
--- 2.23.6-1/awscli/customizations/dynamodb/extractor.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/extractor.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@
 from .parser import Parser
 
 
-class AttributeExtractor(object):
+class AttributeExtractor:
     COMPARATORS = {
         'eq': '=',
         'ne': '<>',
@@ -41,7 +41,7 @@ class AttributeExtractor(object):
             'expression': expression,
             'identifiers': self._identifiers,
             'values': self._literals,
-            'substitution_count': len(self._identifiers) + len(self._literals)
+            'substitution_count': len(self._identifiers) + len(self._literals),
         }
 
     def _substitution_index(self):
@@ -55,9 +55,7 @@ class AttributeExtractor(object):
     def _visit_comparator(self, node):
         left = self._visit(node['children'][0])
         right = self._visit(node['children'][1])
-        expression = '%s%s %s' % (
-            left, self.COMPARATORS[node['value']], right
-        )
+        expression = '%s%s %s' % (left, self.COMPARATORS[node['value']], right)
         return expression
 
     def _visit_identifier(self, node):
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/formatter.py 2.31.35-1/awscli/customizations/dynamodb/formatter.py
--- 2.23.6-1/awscli/customizations/dynamodb/formatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/formatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from base64 import b64encode
 import decimal
+from base64 import b64encode
 
 from ruamel.yaml import ScalarNode
 
@@ -25,9 +25,7 @@ class DynamoYAMLDumper(YAMLDumper):
         self._yaml.representer.add_representer(
             decimal.Decimal, self._represent_decimal
         )
-        self._yaml.representer.add_representer(
-            Binary, self._represent_binary
-        )
+        self._yaml.representer.add_representer(Binary, self._represent_binary)
 
     def _represent_decimal(self, underlying_dumper, data):
         if data == data.to_integral():
@@ -38,7 +36,7 @@ class DynamoYAMLDumper(YAMLDumper):
     def _represent_binary(self, underlying_dumper, data):
         encoded_data = b64encode(data.value).decode('ascii')
         return underlying_dumper.represent_scalar(
-            u'tag:yaml.org,2002:binary', encoded_data, style='"'
+            'tag:yaml.org,2002:binary', encoded_data, style='"'
         )
 
     def dump(self, response, stream):
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/lexer.py 2.31.35-1/awscli/customizations/dynamodb/lexer.py
--- 2.23.6-1/awscli/customizations/dynamodb/lexer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/lexer.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from base64 import b64decode
 import binascii
-from decimal import Decimal
 import re
 import string
+from base64 import b64decode
+from decimal import Decimal
 
-
-from .exceptions import LexerError, EmptyExpressionError
+from .exceptions import EmptyExpressionError, LexerError
 from .types import Binary
 
-
 VALID_BASE64 = re.compile(r'[A-Za-z0-9+/=]+')
 
 
-class Lexer(object):
+class Lexer:
     START_IDENTIFIER = set(string.ascii_letters + '_')
     VALID_IDENTIFIER = set(string.ascii_letters + string.digits + '_')
     WHITESPACE = set(' \t\n\r')
@@ -43,7 +41,11 @@ class Lexer(object):
     DIGITS = set(string.digits)
     INT_CHARS = set(string.digits + '-')
     OPERATION_TOKENS = {
-        'and', 'between', 'in', 'or', 'not',
+        'and',
+        'between',
+        'in',
+        'or',
+        'not',
     }
 
     def tokenize(self, expression):
@@ -76,8 +78,10 @@ class Lexer(object):
                     position=self._position,
                 )
         yield {
-            'type': 'eof', 'value': '',
-            'start': self._length, 'end': self._length
+            'type': 'eof',
+            'value': '',
+            'start': self._length,
+            'end': self._length,
         }
 
     def _consume_unquoted_identifier(self):
@@ -91,8 +95,10 @@ class Lexer(object):
                 buff += self._current
             else:
                 return {
-                    'type': 'unquoted_identifier', 'value': buff,
-                    'start': start, 'end': start + 1,
+                    'type': 'unquoted_identifier',
+                    'value': buff,
+                    'start': start,
+                    'end': start + 1,
                 }
 
         while self._next() in self.VALID_IDENTIFIER:
@@ -101,30 +107,40 @@ class Lexer(object):
         lower = buff.lower()
         if lower in self.OPERATION_TOKENS:
             return {
-                'type': lower, 'value': buff,
-                'start': start, 'end': start + len(buff)
+                'type': lower,
+                'value': buff,
+                'start': start,
+                'end': start + len(buff),
             }
 
         if lower == 'true':
             return {
-                'type': 'literal', 'value': True,
-                'start': start, 'end': start + len(buff)
+                'type': 'literal',
+                'value': True,
+                'start': start,
+                'end': start + len(buff),
             }
 
         if lower == 'false':
             return {
-                'type': 'literal', 'value': False,
-                'start': start, 'end': start + len(buff)
+                'type': 'literal',
+                'value': False,
+                'start': start,
+                'end': start + len(buff),
             }
 
         if lower == 'null':
             return {
-                'type': 'literal', 'value': None,
-                'start': start, 'end': start + len(buff)
+                'type': 'literal',
+                'value': None,
+                'start': start,
+                'end': start + len(buff),
             }
         return {
-            'type': 'unquoted_identifier', 'value': buff,
-            'start': start, 'end': start + len(buff)
+            'type': 'unquoted_identifier',
+            'value': buff,
+            'start': start,
+            'end': start + len(buff),
         }
 
     def _consume_quoted_identifier(self):
@@ -132,8 +148,10 @@ class Lexer(object):
         lexeme = self._consume_until("'").replace("\\'", "'")
         token_len = self._position - start
         return {
-            'type': 'identifier', 'value': lexeme,
-            'start': start, 'end': token_len
+            'type': 'identifier',
+            'value': lexeme,
+            'start': start,
+            'end': token_len,
         }
 
     def _consume_string_literal(self):
@@ -141,8 +159,10 @@ class Lexer(object):
         lexeme = self._consume_until('"').replace('\\"', '"')
         token_len = self._position - start
         return {
-            'type': 'literal', 'value': lexeme,
-            'start': start, 'end': token_len
+            'type': 'literal',
+            'value': lexeme,
+            'start': start,
+            'end': token_len,
         }
 
     def _consume_base64_string(self):
@@ -199,8 +219,10 @@ class Lexer(object):
             buff += self._consume_int()
 
         return {
-            'type': 'literal', 'value': Decimal(buff),
-            'start': start, 'end': start + len(buff)
+            'type': 'literal',
+            'value': Decimal(buff),
+            'start': start,
+            'end': start + len(buff),
         }
 
     def _consume_int(self):
@@ -221,31 +243,41 @@ class Lexer(object):
             if self._next() == '>':
                 self._next()
                 return {
-                    'type': 'ne', 'value': '<>',
-                    'start': self._position - 2, 'end': self._position,
+                    'type': 'ne',
+                    'value': '<>',
+                    'start': self._position - 2,
+                    'end': self._position,
                 }
             elif self._current == '=':
                 self._next()
                 return {
-                    'type': 'lte', 'value': '<=',
-                    'start': self._position - 2, 'end': self._position,
+                    'type': 'lte',
+                    'value': '<=',
+                    'start': self._position - 2,
+                    'end': self._position,
                 }
             else:
                 return {
-                    'type': 'lt', 'value': '<',
-                    'start': self._position - 1, 'end': self._position
+                    'type': 'lt',
+                    'value': '<',
+                    'start': self._position - 1,
+                    'end': self._position,
                 }
         elif self._current == '>':
             if self._next() == '=':
                 self._next()
                 return {
-                    'type': 'gte', 'value': '>=',
-                    'start': self._position - 2, 'end': self._position,
+                    'type': 'gte',
+                    'value': '>=',
+                    'start': self._position - 2,
+                    'end': self._position,
                 }
             else:
                 return {
-                    'type': 'gt', 'value': '>',
-                    'start': self._position - 1, 'end': self._position,
+                    'type': 'gt',
+                    'value': '>',
+                    'start': self._position - 1,
+                    'end': self._position,
                 }
 
     def _init_expression(self, expression):
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/paginatorfix.py 2.31.35-1/awscli/customizations/dynamodb/paginatorfix.py
--- 2.23.6-1/awscli/customizations/dynamodb/paginatorfix.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/paginatorfix.py	2025-11-12 19:17:29.000000000 +0000
@@ -35,7 +35,7 @@ def parse_last_evaluated_key_binary(pars
             val['B'] = base64.b64decode(val['B'])
 
 
-class DynamoDBPaginatorFix(object):
+class DynamoDBPaginatorFix:
     def __init__(self, event_emitter):
         self._event_emitter = event_emitter
 
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/params.py 2.31.35-1/awscli/customizations/dynamodb/params.py
--- 2.23.6-1/awscli/customizations/dynamodb/params.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/params.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.customizations.paginate import (
-    MAX_ITEMS_HELP, PAGE_SIZE_HELP, STARTING_TOKEN_HELP
+    MAX_ITEMS_HELP,
+    PAGE_SIZE_HELP,
+    STARTING_TOKEN_HELP,
 )
 
-
 TABLE_NAME = {
     'name': 'table_name',
     'positional_arg': True,
@@ -27,7 +28,7 @@ INDEX_NAME = {
     'help_text': (
         '<p>The name of a secondary index to scan. This index can be any '
         'local secondary index or global secondary index.</p>'
-    )
+    ),
 }
 
 SELECT = {
@@ -52,11 +53,12 @@ SELECT = {
         '<li> ``COUNT`` - Returns the number of matching items, rather than '
         'the matching items themselves.</li>'
         '</ul>'
-    )
+    ),
 }
 
 PROJECTION_EXPRESSION = {
-    'name': 'projection', 'nargs': '+',
+    'name': 'projection',
+    'nargs': '+',
     'help_text': (
         '<p>A string that identifies one or more attributes to retrieve from '
         'the specified table or index. These attributes can include scalars, '
@@ -71,11 +73,12 @@ PROJECTION_EXPRESSION = {
         '<p>For CLI specific syntax see '
         '<a href="https://docs.aws.amazon.com/cli/latest/topic/'
         'ddb-expressions.html">aws help ddb-expressions</a></p>'
-    )
+    ),
 }
 
 FILTER_EXPRESSION = {
-    'name': 'filter', 'nargs': '+',
+    'name': 'filter',
+    'nargs': '+',
     'help_text': (
         '<p>A string that contains conditions that DynamoDB applies after the '
         'operation, but before the data is returned to you. Items that do '
@@ -90,11 +93,12 @@ FILTER_EXPRESSION = {
         '<p>For CLI specific syntax see '
         '<a href="https://docs.aws.amazon.com/cli/latest/topic/'
         'ddb-expressions.html">aws help ddb-expressions</a></p>'
-    )
+    ),
 }
 
 CONDITION_EXPRESSION = {
-    'name': 'condition', 'nargs': '+',
+    'name': 'condition',
+    'nargs': '+',
     'help_text': (
         '<p>A condition that must be satisfied in order for a conditional '
         '<code>put</code> operation to succeed.</p>'
@@ -106,11 +110,12 @@ CONDITION_EXPRESSION = {
         '<p>For CLI specific syntax see '
         '<a href="https://docs.aws.amazon.com/cli/latest/topic/'
         'ddb-expressions.html">aws help ddb-expressions</a></p>'
-    )
+    ),
 }
 
 KEY_CONDITION_EXPRESSION = {
-    'name': 'key-condition', 'nargs': '+',
+    'name': 'key-condition',
+    'nargs': '+',
     'help_text': (
         '<p>The condition that specifies the key value(s) for items to be '
         'retrieved. Must perform an equality test on a single partition key '
@@ -152,7 +157,7 @@ KEY_CONDITION_EXPRESSION = {
         '<p>For CLI specific syntax see '
         '<a href="https://docs.aws.amazon.com/cli/latest/topic/'
         'ddb-expressions.html">aws help ddb-expressions</a></p>'
-    )
+    ),
 }
 
 ITEMS = {
@@ -161,12 +166,15 @@ ITEMS = {
     'synopsis': '<items>',
     'help_text': (
         '<p>One or more items to put into the table, in YAML format.</p>'
-    )
+    ),
 }
 
 CONSISTENT_READ = {
-    'name': 'consistent-read', 'action': 'store_true', 'default': True,
-    'group_name': 'consistent_read', 'dest': 'consistent_read',
+    'name': 'consistent-read',
+    'action': 'store_true',
+    'default': True,
+    'group_name': 'consistent_read',
+    'dest': 'consistent_read',
     'help_text': (
         '<p>Determines the read consistency model: If set to '
         '<code>--consistent-read</code>, then the operation uses strongly '
@@ -175,29 +183,36 @@ CONSISTENT_READ = {
         'global secondary indexes. If you query a global secondary index '
         'with <code>--consistent-read</code>, you will receive a '
         '<code>ValidationException</code>.</p>'
-    )
+    ),
 }
 
 NO_CONSISTENT_READ = {
-    'name': 'no-consistent-read', 'action': 'store_false', 'default': True,
-    'group_name': 'consistent_read', 'dest': 'consistent_read',
+    'name': 'no-consistent-read',
+    'action': 'store_false',
+    'default': True,
+    'group_name': 'consistent_read',
+    'dest': 'consistent_read',
 }
 
 RETURN_CONSUMED_CAPACITY = {
-    'name': 'return-consumed-capacity', 'action': 'store_true',
-    'default': False, 'group_name': 'return_consumed_capacity',
+    'name': 'return-consumed-capacity',
+    'action': 'store_true',
+    'default': False,
+    'group_name': 'return_consumed_capacity',
     'dest': 'return_consumed_capacity',
     'help_text': (
         '<p>Will include the aggregate <code>ConsumedCapacity</code> for the '
         'operation. If <code>--index-name</code> is also specified, '
         'then the <code>ConsumedCapacity</code> for each table and secondary '
         'index that was accessed will be returned.</p>'
-    )
+    ),
 }
 
 NO_RETURN_CONSUMED_CAPACITY = {
-    'name': 'no-return-consumed-capacity', 'action': 'store_false',
-    'default': False, 'group_name': 'return_consumed_capacity',
+    'name': 'no-return-consumed-capacity',
+    'action': 'store_false',
+    'default': False,
+    'group_name': 'return_consumed_capacity',
     'dest': 'return_consumed_capacity',
 }
 
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/parser.py 2.31.35-1/awscli/customizations/dynamodb/parser.py
--- 2.23.6-1/awscli/customizations/dynamodb/parser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/parser.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,18 @@
 from decimal import Decimal
 
 import awscli.customizations.dynamodb.ast as ast
+
 from .exceptions import (
-    EmptyExpressionError, UnexpectedTokenError, UnknownExpressionError,
+    EmptyExpressionError,
     InvalidLiteralValueError,
+    UnexpectedTokenError,
+    UnknownExpressionError,
 )
-
 from .lexer import Lexer
 from .types import Binary
 
 
-class Parser(object):
+class Parser:
     COMPARATORS = ['eq', 'ne', 'lt', 'lte', 'gt', 'gte']
 
     def __init__(self, lexer=None):
@@ -57,7 +59,9 @@ class Parser(object):
         expression = self._parse_simple_expression()
 
         identifier_types = [
-            'identifier', 'path_identifier', 'index_identifier'
+            'identifier',
+            'path_identifier',
+            'index_identifier',
         ]
         if expression['type'] in identifier_types and self._match('comma'):
             self._advance()
@@ -104,8 +108,11 @@ class Parser(object):
             return self._parse_function()
 
         operand_types = [
-            'literal', 'identifier', 'unquoted_identifier',
-            'lbracket', 'lbrace',
+            'literal',
+            'identifier',
+            'unquoted_identifier',
+            'lbracket',
+            'lbrace',
         ]
         if not self._match(operand_types):
             raise UnknownExpressionError(
@@ -174,7 +181,10 @@ class Parser(object):
                 token=self._current,
                 expression=self._expression,
                 expected_type=[
-                    'literal', 'lbracket', 'lbrace', 'identifier',
+                    'literal',
+                    'lbracket',
+                    'lbrace',
+                    'identifier',
                     'unquoted_identiifer',
                 ],
             )
@@ -291,7 +301,7 @@ class Parser(object):
                     expression=self._expression,
                     message=(
                         'Keys must be of type `str`, found `%s`' % type(key)
-                    )
+                    ),
                 )
             self._advance_if_match('literal')
             self._advance_if_match('colon')
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/subcommands.py 2.31.35-1/awscli/customizations/dynamodb/subcommands.py
--- 2.23.6-1/awscli/customizations/dynamodb/subcommands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/subcommands.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,26 +10,28 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from base64 import b64decode
-from decimal import Decimal
 import logging
 import sys
+from base64 import b64decode
+from decimal import Decimal
 
 from ruamel.yaml import YAML
 
-from awscli.formatter import YAMLFormatter
-from awscli.utils import OutputStreamFactory
 import awscli.customizations.dynamodb.params as parameters
 from awscli.customizations.commands import BasicCommand, CustomArgument
 from awscli.customizations.dynamodb.extractor import AttributeExtractor
+from awscli.customizations.dynamodb.formatter import DynamoYAMLDumper
 from awscli.customizations.dynamodb.transform import (
-    ParameterTransformer, TypeSerializer, TypeDeserializer
+    ParameterTransformer,
+    TypeDeserializer,
+    TypeSerializer,
 )
-from awscli.customizations.dynamodb.formatter import DynamoYAMLDumper
-from awscli.customizations.paginate import ensure_paging_params_not_set
 from awscli.customizations.exceptions import ParamValidationError
-from .types import Binary
+from awscli.customizations.paginate import ensure_paging_params_not_set
+from awscli.formatter import YAMLFormatter
+from awscli.utils import OutputStreamFactory
 
+from .types import Binary
 
 LOGGER = logging.getLogger(__name__)
 
@@ -39,9 +41,10 @@ class DDBCommand(BasicCommand):
         factory = self._session.get_component('response_parser_factory')
         factory.set_parser_defaults(blob_parser=None)
         self._client = self._session.create_client(
-            'dynamodb', region_name=parsed_globals.region,
+            'dynamodb',
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         self._transformer = ParameterTransformer()
         self._serializer = TypeSerializer()
@@ -55,8 +58,10 @@ class DDBCommand(BasicCommand):
             self._client.meta.method_to_api_mapping.get(operation_name)
         )
         self._transformer.transform(
-            data, operation_model.input_shape, self._serializer.serialize,
-            'AttributeValue'
+            data,
+            operation_model.input_shape,
+            self._serializer.serialize,
+            'AttributeValue',
         )
 
     def _deserialize(self, operation_name, data):
@@ -65,12 +70,15 @@ class DDBCommand(BasicCommand):
             self._client.meta.method_to_api_mapping.get(operation_name)
         )
         self._transformer.transform(
-            data, operation_model.output_shape, self._deserializer.deserialize,
-            'AttributeValue'
+            data,
+            operation_model.output_shape,
+            self._deserializer.deserialize,
+            'AttributeValue',
         )
 
-    def _make_api_call(self, operation_name, client_args,
-                       should_paginate=True):
+    def _make_api_call(
+        self, operation_name, client_args, should_paginate=True
+    ):
         self._serialize(operation_name, client_args)
 
         if self._client.can_paginate(operation_name) and should_paginate:
@@ -78,8 +86,10 @@ class DDBCommand(BasicCommand):
             response = paginator.paginate(**client_args).build_full_result()
         else:
             response = getattr(self._client, operation_name)(**client_args)
-        if 'ConsumedCapacity' in response and \
-                response['ConsumedCapacity'] is None:
+        if (
+            'ConsumedCapacity' in response
+            and response['ConsumedCapacity'] is None
+        ):
             del response['ConsumedCapacity']
         self._deserialize(operation_name, response)
         return response
@@ -98,11 +108,11 @@ class DDBCommand(BasicCommand):
         with self._output_stream_factory.get_output_stream() as stream:
             formatter(operation_name, data, stream)
 
-    def _add_expression_args(self, expression_name, expression, args,
-                             substitution_count=0):
+    def _add_expression_args(
+        self, expression_name, expression, args, substitution_count=0
+    ):
         result = self._extractor.extract(
-            ' '.join(expression),
-            substitution_count
+            ' '.join(expression), substitution_count
         )
         args[expression_name] = result['expression']
 
@@ -121,7 +131,9 @@ class DDBCommand(BasicCommand):
 
 class PaginatedDDBCommand(DDBCommand):
     PAGING_ARGS = [
-        parameters.STARTING_TOKEN, parameters.MAX_ITEMS, parameters.PAGE_SIZE
+        parameters.STARTING_TOKEN,
+        parameters.MAX_ITEMS,
+        parameters.PAGE_SIZE,
     ]
 
     def _build_arg_table(self):
@@ -175,7 +187,10 @@ class SelectCommand(PaginatedDDBCommand)
 
     def _select(self, parsed_args, parsed_globals):
         output_type = parsed_globals.output
-        if output_type is not None and output_type not in self._SUPPORTED_OUTPUT_TYPES:
+        if (
+            output_type is not None
+            and output_type not in self._SUPPORTED_OUTPUT_TYPES
+        ):
             raise ParamValidationError(
                 f'{output_type} output format is not supported for ddb commands'
             )
@@ -201,27 +216,35 @@ class SelectCommand(PaginatedDDBCommand)
 
     def _get_client_args(self, parsed_args):
         client_args = super(SelectCommand, self)._get_client_args(parsed_args)
-        client_args.update({
-            'TableName': parsed_args.table_name,
-            'ConsistentRead': parsed_args.consistent_read,
-        })
+        client_args.update(
+            {
+                'TableName': parsed_args.table_name,
+                'ConsistentRead': parsed_args.consistent_read,
+            }
+        )
         substitution_count = 0
         if parsed_args.index_name is not None:
             client_args['IndexName'] = parsed_args.index_name
         if parsed_args.projection is not None:
             substitution_count = self._add_expression_args(
-                'ProjectionExpression', parsed_args.projection, client_args,
+                'ProjectionExpression',
+                parsed_args.projection,
+                client_args,
                 substitution_count,
             )
         if parsed_args.filter is not None:
             substitution_count += self._add_expression_args(
-                'FilterExpression', parsed_args.filter, client_args,
+                'FilterExpression',
+                parsed_args.filter,
+                client_args,
                 substitution_count,
             )
         if parsed_args.key_condition is not None:
             self._add_expression_args(
-                'KeyConditionExpression', parsed_args.key_condition,
-                client_args, substitution_count,
+                'KeyConditionExpression',
+                parsed_args.key_condition,
+                client_args,
+                substitution_count,
             )
         if parsed_args.attributes is not None:
             select_map = {
@@ -245,9 +268,7 @@ class SelectCommand(PaginatedDDBCommand)
 
 class PutCommand(DDBCommand):
     NAME = 'put'
-    DESCRIPTION = (
-        '``put`` puts one or more items into a table.'
-    )
+    DESCRIPTION = '``put`` puts one or more items into a table.'
     ARG_TABLE = [
         parameters.TABLE_NAME,
         parameters.ITEMS,
@@ -301,9 +322,7 @@ class PutCommand(DDBCommand):
         put_requests = [{'PutRequest': {'Item': i}} for i in items]
         while len(put_requests) > 0:
             batch_items = put_requests[:batch_size]
-            client_args['RequestItems'] = {
-                parsed_args.table_name: batch_items
-            }
+            client_args['RequestItems'] = {parsed_args.table_name: batch_items}
             result = self._make_api_call('batch_write_item', client_args)
 
             put_requests = put_requests[batch_size:]
@@ -328,6 +347,8 @@ class PutCommand(DDBCommand):
         client_args = {'ReturnConsumedCapacity': 'NONE'}
         if parsed_args.condition is not None:
             self._add_expression_args(
-                'ConditionExpression', parsed_args.condition, client_args,
+                'ConditionExpression',
+                parsed_args.condition,
+                client_args,
             )
         return client_args
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/transform.py 2.31.35-1/awscli/customizations/dynamodb/transform.py
--- 2.23.6-1/awscli/customizations/dynamodb/transform.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/transform.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,12 @@
 from collections.abc import Mapping, MutableSequence
 
 from awscli.customizations.dynamodb.types import (
-    TypeSerializer, TypeDeserializer
+    TypeDeserializer,
+    TypeSerializer,
 )
 
 
-class ParameterTransformer(object):
+class ParameterTransformer:
     """Transforms the input to and output from botocore based on shape"""
 
     def transform(self, params, model, transformation, target_shape):
@@ -30,18 +31,20 @@ class ParameterTransformer(object):
         :param target_shape: The name of the shape to apply the
             transformation to
         """
-        self._transform_parameters(
-            model, params, transformation, target_shape)
+        self._transform_parameters(model, params, transformation, target_shape)
 
-    def _transform_parameters(self, model, params, transformation,
-                              target_shape):
+    def _transform_parameters(
+        self, model, params, transformation, target_shape
+    ):
         type_name = model.type_name
         if type_name in ['structure', 'map', 'list']:
             getattr(self, '_transform_%s' % type_name)(
-                model, params, transformation, target_shape)
+                model, params, transformation, target_shape
+            )
 
-    def _transform_structure(self, model, params, transformation,
-                             target_shape):
+    def _transform_structure(
+        self, model, params, transformation, target_shape
+    ):
         if not isinstance(params, Mapping):
             return
         for param in params:
@@ -52,8 +55,11 @@ class ParameterTransformer(object):
                     params[param] = transformation(params[param])
                 else:
                     self._transform_parameters(
-                        member_model, params[param], transformation,
-                        target_shape)
+                        member_model,
+                        params[param],
+                        transformation,
+                        target_shape,
+                    )
 
     def _transform_map(self, model, params, transformation, target_shape):
         if not isinstance(params, Mapping):
@@ -65,7 +71,8 @@ class ParameterTransformer(object):
                 params[key] = transformation(value)
             else:
                 self._transform_parameters(
-                    value_model, params[key], transformation, target_shape)
+                    value_model, params[key], transformation, target_shape
+                )
 
     def _transform_list(self, model, params, transformation, target_shape):
         if not isinstance(params, MutableSequence):
@@ -77,4 +84,5 @@ class ParameterTransformer(object):
                 params[i] = transformation(item)
             else:
                 self._transform_parameters(
-                    member_model, params[i], transformation, target_shape)
+                    member_model, params[i], transformation, target_shape
+                )
diff -pruN 2.23.6-1/awscli/customizations/dynamodb/types.py 2.31.35-1/awscli/customizations/dynamodb/types.py
--- 2.23.6-1/awscli/customizations/dynamodb/types.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/dynamodb/types.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from collections.abc import Mapping, Set
-from decimal import Decimal, Context, Clamped
-from decimal import Overflow, Inexact, Underflow, Rounded
-
+from decimal import (
+    Clamped,
+    Context,
+    Decimal,
+    Inexact,
+    Overflow,
+    Rounded,
+    Underflow,
+)
 
 STRING = 'S'
 NUMBER = 'N'
@@ -28,24 +34,29 @@ LIST = 'L'
 
 
 DYNAMODB_CONTEXT = Context(
-    Emin=-128, Emax=126, prec=38,
-    traps=[Clamped, Overflow, Inexact, Rounded, Underflow]
+    Emin=-128,
+    Emax=126,
+    prec=38,
+    traps=[Clamped, Overflow, Inexact, Rounded, Underflow],
 )
 
 
 BINARY_TYPES = (bytearray, bytes)
 
 
-class Binary(object):
+class Binary:
     """A class for representing Binary in dynamodb
     Especially for Python 2, use this class to explicitly specify
     binary data for item in DynamoDB. It is essentially a wrapper around
     binary. Unicode and Python 3 string types are not allowed.
     """
+
     def __init__(self, value):
         if not isinstance(value, BINARY_TYPES):
-            raise TypeError('Value must be of the following types: %s.' %
-                            ', '.join([str(t) for t in BINARY_TYPES]))
+            raise TypeError(
+                'Value must be of the following types: %s.'
+                % ', '.join([str(t) for t in BINARY_TYPES])
+            )
         self.value = value
 
     def __eq__(self, other):
@@ -66,8 +77,9 @@ class Binary(object):
         return hash(self.value)
 
 
-class TypeSerializer(object):
+class TypeSerializer:
     """This class serializes Python data types to DynamoDB types."""
+
     def serialize(self, value):
         """The method to serialize the Python data types.
         :param value: A python value to be serialized to DynamoDB. Here are
@@ -150,7 +162,8 @@ class TypeSerializer(object):
             return True
         elif isinstance(value, float):
             raise TypeError(
-                'Float types are not supported. Use Decimal types instead.')
+                'Float types are not supported. Use Decimal types instead.'
+            )
         return False
 
     def _is_string(self, value):
@@ -224,8 +237,9 @@ class TypeSerializer(object):
         return dict([(k, self.serialize(v)) for k, v in value.items()])
 
 
-class TypeDeserializer(object):
+class TypeDeserializer:
     """This class deserializes DynamoDB types to Python types."""
+
     def deserialize(self, value):
         """The method to deserialize the DynamoDB data types.
         :param value: A DynamoDB value to be deserialized to a pythonic value.
@@ -246,15 +260,19 @@ class TypeDeserializer(object):
         """
 
         if not value:
-            raise TypeError('Value must be a nonempty dictionary whose key '
-                            'is a valid dynamodb type.')
+            raise TypeError(
+                'Value must be a nonempty dictionary whose key '
+                'is a valid dynamodb type.'
+            )
         dynamodb_type = list(value.keys())[0]
         try:
             deserializer = getattr(
-                self, '_deserialize_%s' % dynamodb_type.lower())
+                self, '_deserialize_%s' % dynamodb_type.lower()
+            )
         except AttributeError:
             raise TypeError(
-                'Dynamodb type %s is not supported' % dynamodb_type)
+                'Dynamodb type %s is not supported' % dynamodb_type
+            )
         return deserializer(value[dynamodb_type])
 
     def _deserialize_null(self, value):
diff -pruN 2.23.6-1/awscli/customizations/ec2/addcount.py 2.31.35-1/awscli/customizations/ec2/addcount.py
--- 2.23.6-1/awscli/customizations/ec2/addcount.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/addcount.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,24 +16,28 @@ from botocore import model
 
 from awscli.arguments import BaseCLIArgument
 
-
 logger = logging.getLogger(__name__)
 
 
 DEFAULT = 1
-HELP = """
+HELP = (
+    """
 <p>Number of instances to launch. If a single number is provided, it
 is assumed to be the minimum to launch (defaults to %d).  If a range is
 provided in the form <code>min:max</code> then the first number is
 interpreted as the minimum number of instances to launch and the second
-is interpreted as the maximum number of instances to launch.</p>""" % DEFAULT
+is interpreted as the maximum number of instances to launch.</p>"""
+    % DEFAULT
+)
 
 
 def register_count_events(event_handler):
     event_handler.register(
-        'building-argument-table.ec2.run-instances', ec2_add_count)
+        'building-argument-table.ec2.run-instances', ec2_add_count
+    )
     event_handler.register(
-        'before-parameter-build.ec2.RunInstances', set_default_count)
+        'before-parameter-build.ec2.RunInstances', set_default_count
+    )
 
 
 def ec2_add_count(argument_table, **kwargs):
@@ -48,7 +52,6 @@ def set_default_count(params, **kwargs):
 
 
 class CountArgument(BaseCLIArgument):
-
     def __init__(self, name):
         self.argument_model = model.Shape('CountArgument', {'type': 'string'})
         self._name = name
@@ -76,8 +79,11 @@ class CountArgument(BaseCLIArgument):
 
     def add_to_parser(self, parser):
         # We do NOT set default value here. It will be set later by event hook.
-        parser.add_argument(self.cli_name, metavar=self.py_name,
-                            help='Number of instances to launch')
+        parser.add_argument(
+            self.cli_name,
+            metavar=self.py_name,
+            help='Number of instances to launch',
+        )
 
     def add_to_params(self, parameters, value):
         if value is None:
@@ -91,6 +97,8 @@ class CountArgument(BaseCLIArgument):
             parameters['MinCount'] = int(minstr)
             parameters['MaxCount'] = int(maxstr)
         except:
-            msg = ('count parameter should be of '
-                   'form min[:max] (e.g. 1 or 1:10)')
+            msg = (
+                'count parameter should be of '
+                'form min[:max] (e.g. 1 or 1:10)'
+            )
             raise ParamValidationError(msg)
diff -pruN 2.23.6-1/awscli/customizations/ec2/bundleinstance.py 2.31.35-1/awscli/customizations/ec2/bundleinstance.py
--- 2.23.6-1/awscli/customizations/ec2/bundleinstance.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/bundleinstance.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import logging
-from hashlib import sha1
-import hmac
 import base64
 import datetime
+import hmac
+import logging
+from hashlib import sha1
 
 from awscli.arguments import CustomArgument
 from awscli.customizations.exceptions import ParamValidationError
@@ -26,15 +26,18 @@ logger = logging.getLogger('ec2bundleins
 # bundle-instance operation:
 
 # --bucket:
-BUCKET_DOCS = ('The bucket in which to store the AMI.  '
-               'You can specify a bucket that you already own or '
-               'a new bucket that Amazon EC2 creates on your behalf.  '
-               'If you specify a bucket that belongs to someone else, '
-               'Amazon EC2 returns an error.')
+BUCKET_DOCS = (
+    'The bucket in which to store the AMI.  '
+    'You can specify a bucket that you already own or '
+    'a new bucket that Amazon EC2 creates on your behalf.  '
+    'If you specify a bucket that belongs to someone else, '
+    'Amazon EC2 returns an error.'
+)
 
 # --prefix:
-PREFIX_DOCS = ('The prefix for the image component names being stored '
-               'in Amazon S3.')
+PREFIX_DOCS = (
+    'The prefix for the image component names being stored in Amazon S3.'
+)
 
 # --owner-akid
 OWNER_AKID_DOCS = 'The access key ID of the owner of the Amazon S3 bucket.'
@@ -53,13 +56,16 @@ POLICY_DOCS = (
     "sections about policy construction and signatures in the "
     '<a href="http://docs.aws.amazon.com/AmazonS3/latest/dev'
     '/HTTPPOSTForms.html">'
-    'Amazon Simple Storage Service Developer Guide</a>.')
+    'Amazon Simple Storage Service Developer Guide</a>.'
+)
 
 # --owner-sak
-OWNER_SAK_DOCS = ('The AWS secret access key for the owner of the '
-                  'Amazon S3 bucket specified in the --bucket '
-                  'parameter. This parameter is required so that a '
-                  'signature can be computed for the policy.')
+OWNER_SAK_DOCS = (
+    'The AWS secret access key for the owner of the '
+    'Amazon S3 bucket specified in the --bucket '
+    'parameter. This parameter is required so that a '
+    'signature can be computed for the policy.'
+)
 
 
 def _add_params(argument_table, **kwargs):
@@ -68,25 +74,27 @@ def _add_params(argument_table, **kwargs
     # argparse if they only supply scalar params.
     storage_arg = argument_table['storage']
     storage_arg.required = False
-    arg = BundleArgument(storage_param='Bucket',
-                         name='bucket',
-                         help_text=BUCKET_DOCS)
+    arg = BundleArgument(
+        storage_param='Bucket', name='bucket', help_text=BUCKET_DOCS
+    )
     argument_table['bucket'] = arg
-    arg = BundleArgument(storage_param='Prefix',
-                         name='prefix',
-                         help_text=PREFIX_DOCS)
+    arg = BundleArgument(
+        storage_param='Prefix', name='prefix', help_text=PREFIX_DOCS
+    )
     argument_table['prefix'] = arg
-    arg = BundleArgument(storage_param='AWSAccessKeyId',
-                         name='owner-akid',
-                         help_text=OWNER_AKID_DOCS)
+    arg = BundleArgument(
+        storage_param='AWSAccessKeyId',
+        name='owner-akid',
+        help_text=OWNER_AKID_DOCS,
+    )
     argument_table['owner-akid'] = arg
-    arg = BundleArgument(storage_param='_SAK',
-                         name='owner-sak',
-                         help_text=OWNER_SAK_DOCS)
+    arg = BundleArgument(
+        storage_param='_SAK', name='owner-sak', help_text=OWNER_SAK_DOCS
+    )
     argument_table['owner-sak'] = arg
-    arg = BundleArgument(storage_param='UploadPolicy',
-                         name='policy',
-                         help_text=POLICY_DOCS)
+    arg = BundleArgument(
+        storage_param='UploadPolicy', name='policy', help_text=POLICY_DOCS
+    )
     argument_table['policy'] = arg
 
 
@@ -97,21 +105,24 @@ def _check_args(parsed_args, **kwargs):
     logger.debug(parsed_args)
     arg_dict = vars(parsed_args)
     if arg_dict['storage']:
-        for key in ('bucket', 'prefix', 'owner_akid',
-                    'owner_sak', 'policy'):
+        for key in ('bucket', 'prefix', 'owner_akid', 'owner_sak', 'policy'):
             if arg_dict[key]:
-                msg = ('Mixing the --storage option '
-                       'with the simple, scalar options is '
-                       'not recommended.')
+                msg = (
+                    'Mixing the --storage option '
+                    'with the simple, scalar options is '
+                    'not recommended.'
+                )
                 raise ParamValidationError(msg)
 
-POLICY = ('{{"expiration": "{expires}",'
-          '"conditions": ['
-          '{{"bucket": "{bucket}"}},'
-          '{{"acl": "ec2-bundle-read"}},'
-          '["starts-with", "$key", "{prefix}"]'
-          ']}}'
-          )
+
+POLICY = (
+    '{{"expiration": "{expires}",'
+    '"conditions": ['
+    '{{"bucket": "{bucket}"}},'
+    '{{"acl": "ec2-bundle-read"}},'
+    '["starts-with", "$key", "{prefix}"]'
+    ']}}'
+)
 
 
 def _generate_policy(params):
@@ -120,9 +131,9 @@ def _generate_policy(params):
     delta = datetime.timedelta(hours=24)
     expires = datetime.datetime.utcnow() + delta
     expires_iso = expires.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
-    policy = POLICY.format(expires=expires_iso,
-                           bucket=params['Bucket'],
-                           prefix=params['Prefix'])
+    policy = POLICY.format(
+        expires=expires_iso, bucket=params['Bucket'], prefix=params['Prefix']
+    )
     params['UploadPolicy'] = policy.encode('utf-8')
 
 
@@ -163,7 +174,6 @@ def register_bundleinstance(event_handle
 
 
 class BundleArgument(CustomArgument):
-
     def __init__(self, storage_param, *args, **kwargs):
         super(BundleArgument, self).__init__(*args, **kwargs)
         self._storage_param = storage_param
diff -pruN 2.23.6-1/awscli/customizations/ec2/decryptpassword.py 2.31.35-1/awscli/customizations/ec2/decryptpassword.py
--- 2.23.6-1/awscli/customizations/ec2/decryptpassword.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/decryptpassword.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,22 +27,25 @@ the instance (e.g. windows-keypair.pem).
 password data sent from EC2 will be decrypted before display.</p>"""
 
 
-def ec2_add_priv_launch_key(argument_table, operation_model, session,
-                            **kwargs):
+def ec2_add_priv_launch_key(
+    argument_table, operation_model, session, **kwargs
+):
     """
     This handler gets called after the argument table for the
     operation has been created.  It's job is to add the
     ``priv-launch-key`` parameter.
     """
     argument_table['priv-launch-key'] = LaunchKeyArgument(
-        session, operation_model, 'priv-launch-key')
+        session, operation_model, 'priv-launch-key'
+    )
 
 
 class LaunchKeyArgument(BaseCLIArgument):
-
     def __init__(self, session, operation_model, name):
         self._session = session
-        self.argument_model = model.Shape('LaunchKeyArgument', {'type': 'string'})
+        self.argument_model = model.Shape(
+            'LaunchKeyArgument', {'type': 'string'}
+        )
         self._operation_model = operation_model
         self._name = name
         self._key_path = None
@@ -65,8 +68,9 @@ class LaunchKeyArgument(BaseCLIArgument)
         return HELP
 
     def add_to_parser(self, parser):
-        parser.add_argument(self.cli_name, dest=self.py_name,
-                            help='SSH Private Key file')
+        parser.add_argument(
+            self.cli_name, dest=self.py_name, help='SSH Private Key file'
+        )
 
     def add_to_params(self, parameters, value):
         """
@@ -81,13 +85,17 @@ class LaunchKeyArgument(BaseCLIArgument)
             if os.path.isfile(path):
                 self._key_path = path
                 service_id = self._operation_model.service_model.service_id
-                event = 'after-call.%s.%s' % (service_id.hyphenize(),
-                                              self._operation_model.name)
+                event = 'after-call.%s.%s' % (
+                    service_id.hyphenize(),
+                    self._operation_model.name,
+                )
                 self._session.register(event, self._decrypt_password_data)
             else:
-                msg = ('priv-launch-key should be a path to the '
-                       'local SSH private key file used to launch '
-                       'the instance.')
+                msg = (
+                    'priv-launch-key should be a path to the '
+                    'local SSH private key file used to launch '
+                    'the instance.'
+                )
                 raise ValueError(msg)
 
     def _decrypt_password_data(self, parsed, **kwargs):
@@ -108,12 +116,16 @@ class LaunchKeyArgument(BaseCLIArgument)
                     pk_bytes = pk_file.read()
                     private_key = RSA.new_private_key_from_pem_data(pk_bytes)
                     value = base64.b64decode(value)
-                    value = private_key.decrypt(RSASignatureAlgorithm.PKCS1_5_SHA256, value)
+                    value = private_key.decrypt(
+                        RSASignatureAlgorithm.PKCS1_5_SHA256, value
+                    )
                     logger.debug(parsed)
                     parsed['PasswordData'] = value.decode('utf-8')
                     logger.debug(parsed)
             except Exception:
                 logger.debug('Unable to decrypt PasswordData', exc_info=True)
-                msg = ('Unable to decrypt password data using '
-                       'provided private key file.')
+                msg = (
+                    'Unable to decrypt password data using '
+                    'provided private key file.'
+                )
                 raise ValueError(msg)
diff -pruN 2.23.6-1/awscli/customizations/ec2/paginate.py 2.31.35-1/awscli/customizations/ec2/paginate.py
--- 2.23.6-1/awscli/customizations/ec2/paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,15 +16,14 @@ def register_ec2_page_size_injector(even
     EC2PageSizeInjector().register(event_emitter)
 
 
-class EC2PageSizeInjector(object):
-
+class EC2PageSizeInjector:
     # Operations to auto-paginate and their specific whitelists.
     # Format:
     #    Key:   Operation
     #    Value: List of parameters to add to whitelist for that operation.
     TARGET_OPERATIONS = {
         "describe-volumes": [],
-        "describe-snapshots": ['OwnerIds', 'RestorableByUserIds']
+        "describe-snapshots": ['OwnerIds', 'RestorableByUserIds'],
     }
 
     # Parameters which should be whitelisted for every operation.
diff -pruN 2.23.6-1/awscli/customizations/ec2/protocolarg.py 2.31.35-1/awscli/customizations/ec2/protocolarg.py
--- 2.23.6-1/awscli/customizations/ec2/protocolarg.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/protocolarg.py	2025-11-12 19:17:29.000000000 +0000
@@ -31,7 +31,7 @@ def _fix_args(params, **kwargs):
 
 
 def register_protocol_args(cli):
-    cli.register('before-parameter-build.ec2.CreateNetworkAclEntry',
-                 _fix_args)
-    cli.register('before-parameter-build.ec2.ReplaceNetworkAclEntry',
-                 _fix_args)
+    cli.register('before-parameter-build.ec2.CreateNetworkAclEntry', _fix_args)
+    cli.register(
+        'before-parameter-build.ec2.ReplaceNetworkAclEntry', _fix_args
+    )
diff -pruN 2.23.6-1/awscli/customizations/ec2/runinstances.py 2.31.35-1/awscli/customizations/ec2/runinstances.py
--- 2.23.6-1/awscli/customizations/ec2/runinstances.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/runinstances.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,6 +22,7 @@ This functionality (and much more) is al
 ``--network-interfaces`` complex argument.  This just makes two of
 the most commonly used features available more easily.
 """
+
 from awscli.arguments import CustomArgument
 from awscli.customizations.exceptions import ParamValidationError
 
@@ -31,37 +32,46 @@ SECONDARY_PRIVATE_IP_ADDRESSES_DOCS = (
     'or instance. You can specify this multiple times to assign multiple '
     'secondary IP addresses.  If you want additional private IP addresses '
     'but do not need a specific address, use the '
-    '--secondary-private-ip-address-count option.')
+    '--secondary-private-ip-address-count option.'
+)
 
 # --secondary-private-ip-address-count
 SECONDARY_PRIVATE_IP_ADDRESS_COUNT_DOCS = (
     '[EC2-VPC] The number of secondary IP addresses to assign to '
-    'the network interface or instance.')
+    'the network interface or instance.'
+)
 
 # --associate-public-ip-address
 ASSOCIATE_PUBLIC_IP_ADDRESS_DOCS = (
     '[EC2-VPC] If specified a public IP address will be assigned '
-    'to the new instance in a VPC.')
+    'to the new instance in a VPC.'
+)
 
 
 def _add_params(argument_table, **kwargs):
     arg = SecondaryPrivateIpAddressesArgument(
         name='secondary-private-ip-addresses',
-        help_text=SECONDARY_PRIVATE_IP_ADDRESSES_DOCS)
+        help_text=SECONDARY_PRIVATE_IP_ADDRESSES_DOCS,
+    )
     argument_table['secondary-private-ip-addresses'] = arg
     arg = SecondaryPrivateIpAddressCountArgument(
         name='secondary-private-ip-address-count',
-        help_text=SECONDARY_PRIVATE_IP_ADDRESS_COUNT_DOCS)
+        help_text=SECONDARY_PRIVATE_IP_ADDRESS_COUNT_DOCS,
+    )
     argument_table['secondary-private-ip-address-count'] = arg
     arg = AssociatePublicIpAddressArgument(
         name='associate-public-ip-address',
         help_text=ASSOCIATE_PUBLIC_IP_ADDRESS_DOCS,
-        action='store_true', group_name='associate_public_ip')
+        action='store_true',
+        group_name='associate_public_ip',
+    )
     argument_table['associate-public-ip-address'] = arg
     arg = NoAssociatePublicIpAddressArgument(
         name='no-associate-public-ip-address',
         help_text=ASSOCIATE_PUBLIC_IP_ADDRESS_DOCS,
-        action='store_false', group_name='associate_public_ip')
+        action='store_false',
+        group_name='associate_public_ip',
+    )
     argument_table['no-associate-public-ip-address'] = arg
 
 
@@ -71,13 +81,17 @@ def _check_args(parsed_args, **kwargs):
     # raise an error.
     arg_dict = vars(parsed_args)
     if arg_dict['network_interfaces']:
-        for key in ('secondary_private_ip_addresses',
-                    'secondary_private_ip_address_count',
-                    'associate_public_ip_address'):
+        for key in (
+            'secondary_private_ip_addresses',
+            'secondary_private_ip_address_count',
+            'associate_public_ip_address',
+        ):
             if arg_dict[key]:
-                msg = ('Mixing the --network-interfaces option '
-                       'with the simple, scalar options is '
-                       'not supported.')
+                msg = (
+                    'Mixing the --network-interfaces option '
+                    'with the simple, scalar options is '
+                    'not supported.'
+                )
                 raise ParamValidationError(msg)
 
 
@@ -96,7 +110,7 @@ def _fix_args(params, **kwargs):
     network_interface_params = [
         'PrivateIpAddresses',
         'SecondaryPrivateIpAddressCount',
-        'AssociatePublicIpAddress'
+        'AssociatePublicIpAddress',
     ]
     if 'NetworkInterfaces' in params:
         interface = params['NetworkInterfaces'][0]
@@ -108,8 +122,10 @@ def _fix_args(params, **kwargs):
                 interface['Groups'] = params['SecurityGroupIds']
                 del params['SecurityGroupIds']
             if 'PrivateIpAddress' in params:
-                ip_addr = {'PrivateIpAddress': params['PrivateIpAddress'],
-                           'Primary': True}
+                ip_addr = {
+                    'PrivateIpAddress': params['PrivateIpAddress'],
+                    'Primary': True,
+                }
                 interface['PrivateIpAddresses'] = [ip_addr]
                 del params['PrivateIpAddress']
             if 'Ipv6AddressCount' in params:
@@ -149,41 +165,41 @@ def _build_network_interfaces(params, ke
 
 
 class SecondaryPrivateIpAddressesArgument(CustomArgument):
-
     def add_to_parser(self, parser, cli_name=None):
-        parser.add_argument(self.cli_name, dest=self.py_name,
-                            default=self._default, nargs='*')
+        parser.add_argument(
+            self.cli_name, dest=self.py_name, default=self._default, nargs='*'
+        )
 
     def add_to_params(self, parameters, value):
         if value:
             value = [{'PrivateIpAddress': v, 'Primary': False} for v in value]
-            _build_network_interfaces(
-                parameters, 'PrivateIpAddresses', value)
+            _build_network_interfaces(parameters, 'PrivateIpAddresses', value)
 
 
 class SecondaryPrivateIpAddressCountArgument(CustomArgument):
-
     def add_to_parser(self, parser, cli_name=None):
-        parser.add_argument(self.cli_name, dest=self.py_name,
-                            default=self._default, type=int)
+        parser.add_argument(
+            self.cli_name, dest=self.py_name, default=self._default, type=int
+        )
 
     def add_to_params(self, parameters, value):
         if value:
             _build_network_interfaces(
-                parameters, 'SecondaryPrivateIpAddressCount', value)
+                parameters, 'SecondaryPrivateIpAddressCount', value
+            )
 
 
 class AssociatePublicIpAddressArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value is True:
             _build_network_interfaces(
-                parameters, 'AssociatePublicIpAddress', value)
+                parameters, 'AssociatePublicIpAddress', value
+            )
 
 
 class NoAssociatePublicIpAddressArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value is False:
             _build_network_interfaces(
-                parameters, 'AssociatePublicIpAddress', value)
+                parameters, 'AssociatePublicIpAddress', value
+            )
diff -pruN 2.23.6-1/awscli/customizations/ec2/secgroupsimplify.py 2.31.35-1/awscli/customizations/ec2/secgroupsimplify.py
--- 2.23.6-1/awscli/customizations/ec2/secgroupsimplify.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2/secgroupsimplify.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,8 +27,7 @@ from awscli.customizations.exceptions im
 
 
 def _add_params(argument_table, **kwargs):
-    arg = ProtocolArgument('protocol',
-                           help_text=PROTOCOL_DOCS)
+    arg = ProtocolArgument('protocol', help_text=PROTOCOL_DOCS)
     argument_table['protocol'] = arg
     argument_table['ip-protocol']._UNDOCUMENTED = True
 
@@ -43,13 +42,11 @@ def _add_params(argument_table, **kwargs
     argument_table['cidr'] = arg
     argument_table['cidr-ip']._UNDOCUMENTED = True
 
-    arg = SourceGroupArgument('source-group',
-                              help_text=SOURCEGROUP_DOCS)
+    arg = SourceGroupArgument('source-group', help_text=SOURCEGROUP_DOCS)
     argument_table['source-group'] = arg
     argument_table['source-security-group-name']._UNDOCUMENTED = True
 
-    arg = GroupOwnerArgument('group-owner',
-                             help_text=GROUPOWNER_DOCS)
+    arg = GroupOwnerArgument('group-owner', help_text=GROUPOWNER_DOCS)
     argument_table['group-owner'] = arg
     argument_table['source-security-group-owner-id']._UNDOCUMENTED = True
 
@@ -60,11 +57,12 @@ def _check_args(parsed_args, **kwargs):
     # raise an error.
     arg_dict = vars(parsed_args)
     if arg_dict['ip_permissions']:
-        for key in ('protocol', 'port', 'cidr',
-                    'source_group', 'group_owner'):
+        for key in ('protocol', 'port', 'cidr', 'source_group', 'group_owner'):
             if arg_dict[key]:
-                msg = ('The --%s option is not compatible '
-                       'with the --ip-permissions option ') % key
+                msg = (
+                    'The --%s option is not compatible '
+                    'with the --ip-permissions option '
+                ) % key
                 raise ParamValidationError(msg)
 
 
@@ -72,21 +70,29 @@ def _add_docs(help_command, **kwargs):
     doc = help_command.doc
     doc.style.new_paragraph()
     doc.style.start_note()
-    msg = ('To specify multiple rules in a single command '
-           'use the <code>--ip-permissions</code> option')
+    msg = (
+        'To specify multiple rules in a single command '
+        'use the <code>--ip-permissions</code> option'
+    )
     doc.include_doc_string(msg)
     doc.style.end_note()
 
 
 EVENTS = [
-    ('building-argument-table.ec2.authorize-security-group-ingress',
-     _add_params),
-    ('building-argument-table.ec2.authorize-security-group-egress',
-     _add_params),
+    (
+        'building-argument-table.ec2.authorize-security-group-ingress',
+        _add_params,
+    ),
+    (
+        'building-argument-table.ec2.authorize-security-group-egress',
+        _add_params,
+    ),
     ('building-argument-table.ec2.revoke-security-group-ingress', _add_params),
     ('building-argument-table.ec2.revoke-security-group-egress', _add_params),
-    ('operation-args-parsed.ec2.authorize-security-group-ingress',
-     _check_args),
+    (
+        'operation-args-parsed.ec2.authorize-security-group-ingress',
+        _check_args,
+    ),
     ('operation-args-parsed.ec2.authorize-security-group-egress', _check_args),
     ('operation-args-parsed.ec2.revoke-security-group-ingress', _check_args),
     ('operation-args-parsed.ec2.revoke-security-group-egress', _check_args),
@@ -95,25 +101,31 @@ EVENTS = [
     ('doc-description.ec2.revoke-security-group-ingress', _add_docs),
     ('doc-description.ec2.revoke-security-groupdoc-ingress', _add_docs),
 ]
-PROTOCOL_DOCS = ('<p>The IP protocol: <code>tcp</code> | '
-                 '<code>udp</code> | <code>icmp</code></p> '
-                 '<p>(VPC only) Use <code>all</code> to specify all protocols.</p>'
-                 '<p>If this argument is provided without also providing the '
-                 '<code>port</code> argument, then it will be applied to all '
-                 'ports for the specified protocol.</p>')
-PORT_DOCS = ('<p>For TCP or UDP: The range of ports to allow.'
-             '  A single integer or a range (<code>min-max</code>).</p>'
-             '<p>For ICMP: A single integer or a range (<code>type-code</code>)'
-             ' representing the ICMP type'
-             ' number and the ICMP code number respectively.'
-             ' A value of -1 indicates all ICMP codes for'
-             ' all ICMP types. A value of -1 just for <code>type</code>'
-             ' indicates all ICMP codes for the specified ICMP type.</p>')
+PROTOCOL_DOCS = (
+    '<p>The IP protocol: <code>tcp</code> | '
+    '<code>udp</code> | <code>icmp</code></p> '
+    '<p>(VPC only) Use <code>all</code> to specify all protocols.</p>'
+    '<p>If this argument is provided without also providing the '
+    '<code>port</code> argument, then it will be applied to all '
+    'ports for the specified protocol.</p>'
+)
+PORT_DOCS = (
+    '<p>For TCP or UDP: The range of ports to allow.'
+    '  A single integer or a range (<code>min-max</code>).</p>'
+    '<p>For ICMP: A single integer or a range (<code>type-code</code>)'
+    ' representing the ICMP type'
+    ' number and the ICMP code number respectively.'
+    ' A value of -1 indicates all ICMP codes for'
+    ' all ICMP types. A value of -1 just for <code>type</code>'
+    ' indicates all ICMP codes for the specified ICMP type.</p>'
+)
 CIDR_DOCS = '<p>The IPv4 address range, in CIDR format.</p>'
-SOURCEGROUP_DOCS = ('<p>The name or ID of the source security group.</p>')
-GROUPOWNER_DOCS = ('<p>The AWS account ID that owns the source security '
-                   'group. Cannot be used when specifying a CIDR IP '
-                   'address.</p>')
+SOURCEGROUP_DOCS = '<p>The name or ID of the source security group.</p>'
+GROUPOWNER_DOCS = (
+    '<p>The AWS account ID that owns the source security '
+    'group. Cannot be used when specifying a CIDR IP '
+    'address.</p>'
+)
 
 
 def register_secgroup(event_handler):
@@ -137,19 +149,22 @@ def _build_ip_permissions(params, key, v
 
 
 class ProtocolArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value:
             try:
                 int_value = int(value)
                 if (int_value < 0 or int_value > 255) and int_value != -1:
-                    msg = ('protocol numbers must be in the range 0-255 '
-                           'or -1 to specify all protocols')
+                    msg = (
+                        'protocol numbers must be in the range 0-255 '
+                        'or -1 to specify all protocols'
+                    )
                     raise ParamValidationError(msg)
             except ValueError:
                 if value not in ('tcp', 'udp', 'icmp', 'all'):
-                    msg = ('protocol parameter should be one of: '
-                           'tcp|udp|icmp|all or any valid protocol number.')
+                    msg = (
+                        'protocol parameter should be one of: '
+                        'tcp|udp|icmp|all or any valid protocol number.'
+                    )
                     raise ParamValidationError(msg)
                 if value == 'all':
                     value = '-1'
@@ -157,7 +172,6 @@ class ProtocolArgument(CustomArgument):
 
 
 class PortArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value:
             try:
@@ -175,13 +189,14 @@ class PortArgument(CustomArgument):
                 _build_ip_permissions(parameters, 'FromPort', int(fromstr))
                 _build_ip_permissions(parameters, 'ToPort', int(tostr))
             except ValueError:
-                msg = ('port parameter should be of the '
-                       'form <from[-to]> (e.g. 22 or 22-25)')
+                msg = (
+                    'port parameter should be of the '
+                    'form <from[-to]> (e.g. 22 or 22-25)'
+                )
                 raise ParamValidationError(msg)
 
 
 class CidrArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value:
             value = [{'CidrIp': value}]
@@ -189,7 +204,6 @@ class CidrArgument(CustomArgument):
 
 
 class SourceGroupArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value:
             if value.startswith('sg-'):
@@ -199,7 +213,6 @@ class SourceGroupArgument(CustomArgument
 
 
 class GroupOwnerArgument(CustomArgument):
-
     def add_to_params(self, parameters, value):
         if value:
             _build_ip_permissions(parameters, 'UserId', value)
diff -pruN 2.23.6-1/awscli/customizations/ec2instanceconnect/eicefetcher.py 2.31.35-1/awscli/customizations/ec2instanceconnect/eicefetcher.py
--- 2.23.6-1/awscli/customizations/ec2instanceconnect/eicefetcher.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2instanceconnect/eicefetcher.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,10 @@
 # language governing permissions and limitations under the License.
 import logging
 
-from awscli.customizations.exceptions import ParamValidationError, ConfigurationError
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -22,7 +25,6 @@ class FipsEndpointUnsupported(Configurat
 
 
 class InstanceConnectEndpointRequestFetcher:
-
     def get_eice_dns_name(self, eice_info, is_fips_enabled):
         fips_dns_name = eice_info.get('FipsDnsName')
 
@@ -33,45 +35,88 @@ class InstanceConnectEndpointRequestFetc
         elif is_fips_enabled and not fips_dns_name:
             raise FipsEndpointUnsupported("Unable to find FIPS Endpoint")
 
-    def get_available_instance_connect_endpoint(self, ec2_client, vpc_id, subnet_id, instance_connect_endpoint_id):
+    def get_available_instance_connect_endpoint(
+        self, ec2_client, vpc_id, subnet_id, instance_connect_endpoint_id
+    ):
         if instance_connect_endpoint_id:
-            return self._get_instance_connect_endpoint_by_id(ec2_client, instance_connect_endpoint_id)
+            return self._get_instance_connect_endpoint_by_id(
+                ec2_client, instance_connect_endpoint_id
+            )
         else:
-            return self._get_instance_connect_endpoint_by_vpc(ec2_client, vpc_id, subnet_id)
-
-    def _get_instance_connect_endpoint_by_id(self, ec2_client, instance_connect_endpoint_id):
+            return self._get_instance_connect_endpoint_by_vpc(
+                ec2_client, vpc_id, subnet_id
+            )
+
+    def _get_instance_connect_endpoint_by_id(
+        self, ec2_client, instance_connect_endpoint_id
+    ):
         args = {
-            "Filters": [{"Name": "state", "Values": ["create-complete"]}],
-            "InstanceConnectEndpointIds": [instance_connect_endpoint_id]
+            "Filters": [
+                {
+                    "Name": "state",
+                    "Values": [
+                        "create-complete",
+                        "update-in-progress",
+                        "update-failed",
+                        "update-complete",
+                    ],
+                }
+            ],
+            "InstanceConnectEndpointIds": [instance_connect_endpoint_id],
         }
-        describe_eice_response = ec2_client.describe_instance_connect_endpoints(**args)
-        instance_connect_endpoints = describe_eice_response["InstanceConnectEndpoints"]
+        describe_eice_response = (
+            ec2_client.describe_instance_connect_endpoints(**args)
+        )
+        instance_connect_endpoints = describe_eice_response[
+            "InstanceConnectEndpoints"
+        ]
         if instance_connect_endpoints:
             return instance_connect_endpoints[0]
         raise ParamValidationError(
-            f"There are no available instance connect endpoints with {instance_connect_endpoint_id}")
+            f"There are no available instance connect endpoints with {instance_connect_endpoint_id}"
+        )
 
-    def _get_instance_connect_endpoint_by_vpc(self, ec2_client, vpc_id, subnet_id):
+    def _get_instance_connect_endpoint_by_vpc(
+        self, ec2_client, vpc_id, subnet_id
+    ):
         ## Describe until subnet match and if none match subnet then return the first one based on vpc-id filter
-        args = {"Filters": [
-            {"Name": "state", "Values": ["create-complete"]},
-            {"Name": "vpc-id", "Values": [vpc_id]}
-        ]}
+        args = {
+            "Filters": [
+                {
+                    "Name": "state",
+                    "Values": [
+                        "create-complete",
+                        "update-in-progress",
+                        "update-failed",
+                        "update-complete",
+                    ],
+                },
+                {"Name": "vpc-id", "Values": [vpc_id]},
+            ]
+        }
 
-        paginator = ec2_client.get_paginator('describe_instance_connect_endpoints')
+        paginator = ec2_client.get_paginator(
+            'describe_instance_connect_endpoints'
+        )
         page_iterator = paginator.paginate(**args)
         instance_connect_endpoints = []
         for page in page_iterator:
             page_result = page["InstanceConnectEndpoints"]
-            instance_connect_endpoints = instance_connect_endpoints + page_result
+            instance_connect_endpoints = (
+                instance_connect_endpoints + page_result
+            )
             if page_result:
                 for eice in page_result:
                     if eice['SubnetId'] == subnet_id:
-                        logger.debug(f"Using EICE based on subnet: {instance_connect_endpoints[0]}")
+                        logger.debug(f"Using EICE based on subnet: {eice}")
                         return eice
 
         if instance_connect_endpoints:
-            logger.debug(f"Using EICE based on vpc: {instance_connect_endpoints[0]}")
+            logger.debug(
+                f"Using EICE based on vpc: {instance_connect_endpoints[0]}"
+            )
             return instance_connect_endpoints[0]
 
-        raise ParamValidationError("There are no available instance connect endpoints.")
+        raise ParamValidationError(
+            "There are no available instance connect endpoints."
+        )
diff -pruN 2.23.6-1/awscli/customizations/ec2instanceconnect/eicesigner.py 2.31.35-1/awscli/customizations/ec2instanceconnect/eicesigner.py
--- 2.23.6-1/awscli/customizations/ec2instanceconnect/eicesigner.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2instanceconnect/eicesigner.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,14 +17,14 @@ from botocore.signers import RequestSign
 
 class InstanceConnectEndpointRequestSigner:
     def __init__(
-            self,
-            session,
-            instance_connect_endpoint_dns_name,
-            instance_connect_endpoint_id,
-            remote_port,
-            instance_private_ip,
-            max_tunnel_duration,
-            request_singer=None,
+        self,
+        session,
+        instance_connect_endpoint_dns_name,
+        instance_connect_endpoint_id,
+        remote_port,
+        instance_private_ip,
+        max_tunnel_duration,
+        request_singer=None,
     ):
         service_model = session.get_service_model("ec2-instance-connect")
 
diff -pruN 2.23.6-1/awscli/customizations/ec2instanceconnect/opentunnel.py 2.31.35-1/awscli/customizations/ec2instanceconnect/opentunnel.py
--- 2.23.6-1/awscli/customizations/ec2instanceconnect/opentunnel.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2instanceconnect/opentunnel.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,12 +14,14 @@ import logging
 import sys
 
 from awscli.customizations.commands import BasicCommand
+from awscli.customizations.ec2instanceconnect.eicefetcher import (
+    InstanceConnectEndpointRequestFetcher,
+)
 from awscli.customizations.ec2instanceconnect.eicesigner import (
     InstanceConnectEndpointRequestSigner,
 )
 from awscli.customizations.ec2instanceconnect.websocket import WebsocketManager
 from awscli.customizations.exceptions import ParamValidationError
-from awscli.customizations.ec2instanceconnect.eicefetcher import InstanceConnectEndpointRequestFetcher
 
 logger = logging.getLogger(__name__)
 
@@ -27,7 +29,9 @@ logger = logging.getLogger(__name__)
 class OpenTunnelCommand(BasicCommand):
     NAME = "open-tunnel"
 
-    DESCRIPTION = "Opens a websocket tunnel to the specified EC2 Instance or private ip."
+    DESCRIPTION = (
+        "Opens a websocket tunnel to the specified EC2 Instance or private ip."
+    )
 
     ARG_TABLE = [
         {
@@ -126,10 +130,16 @@ class OpenTunnelCommand(BasicCommand):
             )
             instance_connect_endpoint_id = eice["InstanceConnectEndpointId"]
 
-            is_fips_enabled = self._session.get_config_variable('use_fips_endpoint')
-            instance_connect_endpoint_dns_name = eice_fetcher.get_eice_dns_name(eice, is_fips_enabled)
+            is_fips_enabled = self._session.get_config_variable(
+                'use_fips_endpoint'
+            )
+            instance_connect_endpoint_dns_name = (
+                eice_fetcher.get_eice_dns_name(eice, is_fips_enabled)
+            )
 
-        logger.debug(f"Using endpoint dns: {instance_connect_endpoint_dns_name}")
+        logger.debug(
+            f"Using endpoint dns: {instance_connect_endpoint_dns_name}"
+        )
         eice_request_signer = InstanceConnectEndpointRequestSigner(
             self._session,
             instance_connect_endpoint_dns_name=instance_connect_endpoint_dns_name,
@@ -140,7 +150,10 @@ class OpenTunnelCommand(BasicCommand):
         )
 
         with WebsocketManager(
-                parsed_args.local_port, parsed_args.max_websocket_connections, eice_request_signer, self._session.user_agent(),
+            parsed_args.local_port,
+            parsed_args.max_websocket_connections,
+            eice_request_signer,
+            self._session.user_agent(),
         ) as websocket_manager:
             websocket_manager.run()
         return 0
@@ -148,13 +161,23 @@ class OpenTunnelCommand(BasicCommand):
     def _validate_parsed_args(self, parsed_args):
         if not parsed_args.instance_id and not parsed_args.private_ip_address:
             raise ParamValidationError("Specify an instance id or private ip.")
-        if parsed_args.instance_connect_endpoint_dns_name and not parsed_args.instance_connect_endpoint_id:
-            raise ParamValidationError("Specify an instance connect endpoint id when providing a DNS name.")
-        if parsed_args.private_ip_address and not parsed_args.instance_connect_endpoint_id:
-            raise ParamValidationError("Specify an instance connect endpoint id when providing a private ip.")
+        if (
+            parsed_args.instance_connect_endpoint_dns_name
+            and not parsed_args.instance_connect_endpoint_id
+        ):
+            raise ParamValidationError(
+                "Specify an instance connect endpoint id when providing a DNS name."
+            )
+        if (
+            parsed_args.private_ip_address
+            and not parsed_args.instance_connect_endpoint_id
+        ):
+            raise ParamValidationError(
+                "Specify an instance connect endpoint id when providing a private ip."
+            )
         if parsed_args.max_tunnel_duration is not None and (
-                parsed_args.max_tunnel_duration < 1
-                or parsed_args.max_tunnel_duration > 3_600
+            parsed_args.max_tunnel_duration < 1
+            or parsed_args.max_tunnel_duration > 3_600
         ):
             raise ParamValidationError(
                 "Invalid max connection timeout specified. Value must be greater than 1 and "
@@ -164,4 +187,4 @@ class OpenTunnelCommand(BasicCommand):
             raise ParamValidationError(
                 "This command does not support interactive mode. You must use this command as a proxy or in listener "
                 "mode. "
-            )
\ No newline at end of file
+            )
diff -pruN 2.23.6-1/awscli/customizations/ec2instanceconnect/ssh.py 2.31.35-1/awscli/customizations/ec2instanceconnect/ssh.py
--- 2.23.6-1/awscli/customizations/ec2instanceconnect/ssh.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2instanceconnect/ssh.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,20 +10,25 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import logging
+import os
 import re
 import shutil
 import subprocess
 import sys
 import tempfile
 
-from awscli.customizations.commands import BasicCommand
-from awscli.customizations.exceptions import ParamValidationError, ConfigurationError
-from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
-from cryptography.hazmat.primitives.serialization import PublicFormat, Encoding, PrivateFormat, NoEncryption
+from awscrt.crypto import ED25519, ED25519ExportFormat
+
 from awscli.compat import compat_shell_quote
-from awscli.customizations.ec2instanceconnect.eicefetcher import InstanceConnectEndpointRequestFetcher
+from awscli.customizations.commands import BasicCommand
+from awscli.customizations.ec2instanceconnect.eicefetcher import (
+    InstanceConnectEndpointRequestFetcher,
+)
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -31,9 +36,7 @@ logger = logging.getLogger(__name__)
 class SshCommand(BasicCommand):
     NAME = 'ssh'
 
-    CONNECTION_TYPES = ['auto',
-                        'direct',
-                        'eice']
+    CONNECTION_TYPES = ['auto', 'direct', 'eice']
 
     ARG_TABLE = [
         {
@@ -67,7 +70,7 @@ class SshCommand(BasicCommand):
         {
             'name': 'local-forwarding',
             'help_text': 'Specify the local forwarding specification as defined by your OpenSSH client. '
-                         '(Example: 3336:remote.host:3306)',
+            '(Example: 3336:remote.host:3306)',
             'required': False,
         },
         {
@@ -77,21 +80,21 @@ class SshCommand(BasicCommand):
                 '<ul>'
                 '<li>direct: SSH directly to the instance. '
                 'The CLI tries to connect using the IP addresses in the following order: '
-                    '<ul>'
-                    '<li>Public IPv4</li>'
-                    '<li>IPv6</li>'
-                    '<li>Private IPv4</li>'
-                    '</ul>'
+                '<ul>'
+                '<li>Public IPv4</li>'
+                '<li>IPv6</li>'
+                '<li>Private IPv4</li>'
+                '</ul>'
                 '</li>'
                 '<li>eice: SSH using EC2 Instance Connect Endpoint. The CLI always uses the private IPv4 address.</li>'
                 '<li>auto: The CLI automatically determines the connection type (direct or eice) '
                 'to use based on the instance info. Currently the CLI tries to connect using the IP addresses '
                 'in the following order and with the corresponding connection type:'
-                    '<ul>'
-                    '<li>Public IPv4: direct</li>'
-                    '<li>Private IPv4: eice</li>'
-                    '<li>IPv6: direct</li>'
-                    '</ul>'
+                '<ul>'
+                '<li>Public IPv4: direct</li>'
+                '<li>Private IPv4: eice</li>'
+                '<li>IPv6: direct</li>'
+                '</ul>'
                 '</li>'
                 '</ul>'
                 'In the future, we might change the behavior of the auto connection type. To ensure that your '
@@ -130,7 +133,7 @@ class SshCommand(BasicCommand):
                         ),
                         'required': False,
                     },
-                }
+                },
             },
         },
     ]
@@ -138,8 +141,10 @@ class SshCommand(BasicCommand):
     DESCRIPTION = 'Connect to your EC2 instance using your OpenSSH client.'
 
     def __init__(self, session, key_manager=None):
-        super(SshCommand, self).__init__(session)
-        self._key_manager = KeyManager() if (key_manager is None) else key_manager
+        super().__init__(session)
+        self._key_manager = (
+            KeyManager() if (key_manager is None) else key_manager
+        )
 
     def _run_main(self, parsed_args, parsed_globals):
         self._validate_parsed_args(parsed_args)
@@ -169,7 +174,9 @@ class SshCommand(BasicCommand):
             ip_address_to_connect = private_ip_address
         elif parsed_args.connection_type == 'direct':
             use_open_tunnel = False
-            ip_address_to_connect = public_ip_address or ipv6_address or private_ip_address
+            ip_address_to_connect = (
+                public_ip_address or ipv6_address or private_ip_address
+            )
         elif parsed_args.connection_type == 'auto':
             # In case of auto we use IPv4 address first and then IPv6 because right now most instance have these, but
             # in future we might want to switch this logic to where we select IPv6 first and then fallback to IPv4.
@@ -184,22 +191,34 @@ class SshCommand(BasicCommand):
                 ip_address_to_connect = ipv6_address
 
         if ip_address_to_connect is None:
-            raise ParamValidationError('Unable to find any IP address on the instance to connect to.')
+            raise ParamValidationError(
+                'Unable to find any IP address on the instance to connect to.'
+            )
 
-        instance_connect_endpoint_id = self._get_eice_option(parsed_args.eice_options, 'endpointId')
-        instance_connect_endpoint_dns_name = self._get_eice_option(parsed_args.eice_options, 'dnsName')
+        instance_connect_endpoint_id = self._get_eice_option(
+            parsed_args.eice_options, 'endpointId'
+        )
+        instance_connect_endpoint_dns_name = self._get_eice_option(
+            parsed_args.eice_options, 'dnsName'
+        )
         if use_open_tunnel and not instance_connect_endpoint_dns_name:
             eice_fetcher = InstanceConnectEndpointRequestFetcher()
             eice_info = eice_fetcher.get_available_instance_connect_endpoint(
                 ec2_client,
                 instance_metadata["VpcId"],
                 instance_metadata["SubnetId"],
-                instance_connect_endpoint_id
+                instance_connect_endpoint_id,
             )
-            instance_connect_endpoint_id = eice_info["InstanceConnectEndpointId"]
+            instance_connect_endpoint_id = eice_info[
+                "InstanceConnectEndpointId"
+            ]
 
-            is_fips_enabled = self._session.get_config_variable('use_fips_endpoint')
-            instance_connect_endpoint_dns_name = eice_fetcher.get_eice_dns_name(eice_info, is_fips_enabled)
+            is_fips_enabled = self._session.get_config_variable(
+                'use_fips_endpoint'
+            )
+            instance_connect_endpoint_dns_name = (
+                eice_fetcher.get_eice_dns_name(eice_info, is_fips_enabled)
+            )
 
         # Validate ssh key exist (either use user defined or create new one)
         key_file = parsed_args.private_key_file
@@ -209,7 +228,10 @@ class SshCommand(BasicCommand):
                 key_file = os.path.join(tmp_dir, 'private-key')
                 logger.debug('Generate new ssh key and upload')
                 private_pem_bytes = self._generate_and_upload_ssh_key(
-                    parsed_args.instance_id, parsed_args.os_user, parsed_globals)
+                    parsed_args.instance_id,
+                    parsed_args.os_user,
+                    parsed_globals,
+                )
 
                 with open(key_file, 'wb') as fd:
                     fd.write(private_pem_bytes)
@@ -226,50 +248,70 @@ class SshCommand(BasicCommand):
                 ip_address_to_connect,
                 instance_connect_endpoint_id,
                 instance_connect_endpoint_dns_name,
-                self._get_eice_option(parsed_args.eice_options, 'maxTunnelDuration'),
-                parsed_globals
+                self._get_eice_option(
+                    parsed_args.eice_options, 'maxTunnelDuration'
+                ),
+                parsed_globals,
             )
 
     def _validate_parsed_args(self, parsed_args):
         if parsed_args.instance_id:
             if not re.search("^i-[0-9a-zA-Z]+$", parsed_args.instance_id):
-                raise ParamValidationError('The specified instance ID is invalid. '
-                                           'Provide the full instance ID in the form i-xxxxxxxxxxxxxxxxx.')
+                raise ParamValidationError(
+                    'The specified instance ID is invalid. '
+                    'Provide the full instance ID in the form i-xxxxxxxxxxxxxxxxx.'
+                )
 
         eice_options = parsed_args.eice_options
         if parsed_args.connection_type == "direct" and eice_options:
-            raise ParamValidationError('eice-options can\'t be specified when connection type is direct.')
+            raise ParamValidationError(
+                'eice-options can\'t be specified when connection type is direct.'
+            )
 
-        if self._get_eice_option(eice_options, 'dnsName') and not self._get_eice_option(eice_options, 'endpointId'):
-            raise ParamValidationError('When specifying dnsName, you must specify endpointId.')
+        if self._get_eice_option(
+            eice_options, 'dnsName'
+        ) and not self._get_eice_option(eice_options, 'endpointId'):
+            raise ParamValidationError(
+                'When specifying dnsName, you must specify endpointId.'
+            )
 
         if eice_options and 'maxTunnelDuration' in eice_options:
             max_tunnel_duration = eice_options['maxTunnelDuration']
-            if max_tunnel_duration is not None and (max_tunnel_duration < 1 or max_tunnel_duration > 3_600):
+            if max_tunnel_duration is not None and (
+                max_tunnel_duration < 1 or max_tunnel_duration > 3_600
+            ):
                 raise ParamValidationError(
                     'Invalid value specified for maxTunnelDuration. Value must be greater than 1 and '
                     'less than 3600.'
                 )
 
         if self._get_eice_option(eice_options, 'endpointId'):
-            if not re.search("^eice-[0-9a-zA-Z_]+$", eice_options['endpointId']):
-                raise ParamValidationError('The specified endpointId is invalid. '
-                                           'Provide the full EC2 Instance Connect Endpoint ID in '
-                                           'the form eice-xxxxxxxxxxxxxxxxx.')
+            if not re.search(
+                "^eice-[0-9a-zA-Z_]+$", eice_options['endpointId']
+            ):
+                raise ParamValidationError(
+                    'The specified endpointId is invalid. '
+                    'Provide the full EC2 Instance Connect Endpoint ID in '
+                    'the form eice-xxxxxxxxxxxxxxxxx.'
+                )
 
         if self._get_eice_option(eice_options, 'dnsName'):
             if not re.search('^[0-9a-zA-Z.-]+$', eice_options['dnsName']):
                 raise ParamValidationError('The specified dnsName is invalid.')
 
         if parsed_args.instance_ip and parsed_args.connection_type == 'auto':
-            raise ParamValidationError('When specifying instance-ip, you must specify connection-type.')
+            raise ParamValidationError(
+                'When specifying instance-ip, you must specify connection-type.'
+            )
 
     def _get_eice_option(self, eice_options, option):
         if eice_options:
             return eice_options.get(option)
         return None
 
-    def _generate_and_upload_ssh_key(self, instance_id, os_user, parsed_globals):
+    def _generate_and_upload_ssh_key(
+        self, instance_id, os_user, parsed_globals
+    ):
         private_key = self._key_manager.generate_key()
 
         logger.debug('Upload public ssh key to instance')
@@ -279,18 +321,33 @@ class SshCommand(BasicCommand):
             verify=parsed_globals.verify_ssl,
         )
         public_key = self._key_manager.get_public_key(private_key)
-        self._key_manager.upload_public_key(ec2_instance_connect_client, instance_id, os_user, public_key)
+        self._key_manager.upload_public_key(
+            ec2_instance_connect_client, instance_id, os_user, public_key
+        )
 
         return self._key_manager.get_private_pem(private_key)
 
-    def _generate_open_tunnel_command(self, instance_id, private_ip_address, ssh_port, eice_id, eice_dns_name,
-                                      max_tunnel_duration, parsed_globals):
+    def _generate_open_tunnel_command(
+        self,
+        instance_id,
+        private_ip_address,
+        ssh_port,
+        eice_id,
+        eice_dns_name,
+        max_tunnel_duration,
+        parsed_globals,
+    ):
         aws_cli_path = sys.argv[0]
         proxy_command = [
-            aws_cli_path, 'ec2-instance-connect', 'open-tunnel',
-            '--instance-id', instance_id,
-            '--private-ip-address', private_ip_address,
-            '--remote-port', str(ssh_port),
+            aws_cli_path,
+            'ec2-instance-connect',
+            'open-tunnel',
+            '--instance-id',
+            instance_id,
+            '--private-ip-address',
+            private_ip_address,
+            '--remote-port',
+            str(ssh_port),
         ]
         logger.debug(f"Using aws: {aws_cli_path}")
 
@@ -312,20 +369,42 @@ class SshCommand(BasicCommand):
 
         return proxy_command
 
-    def _ssh(self, use_open_tunnel, instance_id, ssh_port, os_user, local_forwarding, key_file,
-             ip_address, eice_id, eice_dns_name, max_tunnel_duration, parsed_globals):
-
+    def _ssh(
+        self,
+        use_open_tunnel,
+        instance_id,
+        ssh_port,
+        os_user,
+        local_forwarding,
+        key_file,
+        ip_address,
+        eice_id,
+        eice_dns_name,
+        max_tunnel_duration,
+        parsed_globals,
+    ):
         proxy_command = self._generate_open_tunnel_command(
-            instance_id, ip_address, ssh_port, eice_id, eice_dns_name, max_tunnel_duration, parsed_globals)
+            instance_id,
+            ip_address,
+            ssh_port,
+            eice_id,
+            eice_dns_name,
+            max_tunnel_duration,
+            parsed_globals,
+        )
 
         command = [
             'ssh',
             # adding ServerAliveInterval as default because it offers better customer experience as it let customer
             # know about terminated connections. If we want to allow customer to override this we can add additional
             # parameter to this cli command
-            '-o', 'ServerAliveInterval=5',
-            '-p', str(ssh_port),
-            '-i', key_file, os_user + '@' + ip_address,
+            '-o',
+            'ServerAliveInterval=5',
+            '-p',
+            str(ssh_port),
+            '-i',
+            key_file,
+            os_user + '@' + ip_address,
         ]
 
         ssh_path = shutil.which('ssh')
@@ -333,8 +412,10 @@ class SshCommand(BasicCommand):
             command[0] = ssh_path
             logger.debug(f"Using ssh: {ssh_path}")
         else:
-            raise ConfigurationError('SSH not available. Please refer to the documentation '
-                                     'at https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html.')
+            raise ConfigurationError(
+                'SSH not available. Please refer to the documentation '
+                'at https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html.'
+            )
 
         # Add local-forwarding option if users passed local-forwarding
         if local_forwarding:
@@ -348,7 +429,10 @@ class SshCommand(BasicCommand):
         # If we are trying to connect to instance in private subnet lets use open-tunnel command to use eice
         if use_open_tunnel:
             command.insert(-1, '-o')
-            command.insert(-1, f"ProxyCommand={' '.join(compat_shell_quote(a) for a in proxy_command)}")
+            command.insert(
+                -1,
+                f"ProxyCommand={' '.join(compat_shell_quote(a) for a in proxy_command)}",
+            )
 
         logger.debug('Invoking SSH command: %s', command)
         rc = subprocess.call(command)
@@ -358,25 +442,36 @@ class SshCommand(BasicCommand):
 class KeyManager:
     def generate_key(self):
         logger.debug('Generate Ed25519 Key')
-        return Ed25519PrivateKey.generate()
+        return ED25519.new_generate()
+
+    def _get_public_key(self, private_key):
+        public_key_bytes = ED25519.export_public_key(
+            private_key, export_format=ED25519ExportFormat.OPENSSH_B64
+        )
+        return f"ssh-ed25519 {public_key_bytes.decode()}"
 
     def get_public_key(self, private_key):
-        return private_key.public_key().public_bytes(
-            encoding=Encoding.OpenSSH,
-            format=PublicFormat.OpenSSH
+        return self._get_public_key(private_key)
+
+    def _get_private_pem(self, private_key):
+        private_key_bytes = ED25519.export_private_key(
+            private_key, export_format=ED25519ExportFormat.OPENSSH_B64
         )
+        return (
+            '-----BEGIN OPENSSH PRIVATE KEY-----\n'
+            f'{private_key_bytes.decode()}\n'
+            '-----END OPENSSH PRIVATE KEY-----\n'
+        ).encode()
 
     def get_private_pem(self, private_key):
-        return private_key.private_bytes(
-            encoding=Encoding.PEM,
-            format=PrivateFormat.OpenSSH,
-            encryption_algorithm=NoEncryption()
-        )
+        return self._get_private_pem(private_key=private_key)
 
-    def upload_public_key(self, ec2_instance_connect_client, instance_id, os_user, public_key):
+    def upload_public_key(
+        self, ec2_instance_connect_client, instance_id, os_user, public_key
+    ):
         logger.debug('Upload ssh key to instance')
         ec2_instance_connect_client.send_ssh_public_key(
             InstanceId=instance_id,
             InstanceOSUser=os_user,
-            SSHPublicKey=public_key.decode(),
+            SSHPublicKey=public_key,
         )
diff -pruN 2.23.6-1/awscli/customizations/ec2instanceconnect/websocket.py 2.31.35-1/awscli/customizations/ec2instanceconnect/websocket.py
--- 2.23.6-1/awscli/customizations/ec2instanceconnect/websocket.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ec2instanceconnect/websocket.py	2025-11-12 19:17:29.000000000 +0000
@@ -28,10 +28,11 @@ from awscrt.http import HttpProxyAuthent
 from awscrt.io import ClientTlsContext, TlsContextOptions
 from awscrt.websocket import (
     OnConnectionSetupData,
+    OnConnectionShutdownData,
+    OnIncomingFrameCompleteData,
     OnIncomingFramePayloadData,
     OnSendFrameCompleteData,
     Opcode,
-    OnConnectionShutdownData, OnIncomingFrameCompleteData,
 )
 
 from awscli.compat import is_windows
@@ -42,9 +43,11 @@ logger = logging.getLogger(__name__)
 class WebsocketException(RuntimeError):
     pass
 
+
 class InputClosedError(RuntimeError):
     pass
 
+
 class BaseWebsocketIO:
     def has_data_to_read(self):
         raise NotImplementedError("has_data_to_read")
@@ -63,10 +66,11 @@ _SELECT_TIMEOUT = 0.05
 
 
 class StdinStdoutIO(BaseWebsocketIO):
-
     def has_data_to_read(self):
         socket_list = [sys.stdin]
-        read_sockets, _, _ = select.select(socket_list, [], [], _SELECT_TIMEOUT)
+        read_sockets, _, _ = select.select(
+            socket_list, [], [], _SELECT_TIMEOUT
+        )
         if read_sockets:
             return True
         return False
@@ -83,13 +87,11 @@ class StdinStdoutIO(BaseWebsocketIO):
 
 
 class WindowsStdinStdoutIO(StdinStdoutIO):
-
     def has_data_to_read(self):
         return True
 
 
 class TCPSocketIO(BaseWebsocketIO):
-
     def __init__(self, conn):
         self.conn = conn
 
@@ -121,19 +123,36 @@ class TCPSocketIO(BaseWebsocketIO):
 
 
 class Websocket:
-    def __init__(self, websocketio, websocket_id, tls_connection_options=None, on_connection_event=None,
-                 shutdown_event=None, send_frame_results_queue=None):
+    def __init__(
+        self,
+        websocketio,
+        websocket_id,
+        tls_connection_options=None,
+        on_connection_event=None,
+        shutdown_event=None,
+        send_frame_results_queue=None,
+    ):
         self.websocketio = websocketio
         self.websocket_id = websocket_id
-        self._on_connection_event = Event() if (on_connection_event is None) else on_connection_event
-        self._send_frame_results_queue = Queue() if (send_frame_results_queue is None) else send_frame_results_queue
-        self._shutdown_event = Event() if (shutdown_event is None) else shutdown_event
+        self._on_connection_event = (
+            Event() if (on_connection_event is None) else on_connection_event
+        )
+        self._send_frame_results_queue = (
+            Queue()
+            if (send_frame_results_queue is None)
+            else send_frame_results_queue
+        )
+        self._shutdown_event = (
+            Event() if (shutdown_event is None) else shutdown_event
+        )
         self._websocket = None
         self._exception = None
         self._close_frame_bytes = bytearray()
 
         if tls_connection_options is None:
-            self._tls_connection_options = ClientTlsContext(TlsContextOptions()).new_connection_options()
+            self._tls_connection_options = ClientTlsContext(
+                TlsContextOptions()
+            ).new_connection_options()
         else:
             self._tls_connection_options = tls_connection_options
 
@@ -147,21 +166,29 @@ class Websocket:
     def connect(self, url, user_agent=None):
         parsed_url = urlparse(url)
         path = parsed_url.path + "?" + parsed_url.query
-        request = websocket.create_handshake_request(host=parsed_url.hostname, path=path)
+        request = websocket.create_handshake_request(
+            host=parsed_url.hostname, path=path
+        )
         if user_agent:
             request.headers.set("User-Agent", user_agent)
 
         environment = os.environ.copy()
         proxy_options = None
-        proxy_url = environment.get("HTTP_PROXY") or environment.get("HTTPS_PROXY")
+        proxy_url = environment.get("HTTP_PROXY") or environment.get(
+            "HTTPS_PROXY"
+        )
         no_proxy = environment.get("NO_PROXY", "")
         if proxy_url and parsed_url.hostname not in no_proxy:
             parsed_proxy_url = urlparse(proxy_url)
-            logger.debug(f"Using the following proxy: {parsed_proxy_url.hostname}")
+            logger.debug(
+                f"Using the following proxy: {parsed_proxy_url.hostname}"
+            )
             proxy_options = HttpProxyOptions(
                 host_name=parsed_proxy_url.hostname,
                 port=parsed_proxy_url.port,
-                auth_type=HttpProxyAuthenticationType.Basic if proxy_url else HttpProxyAuthenticationType.Nothing,
+                auth_type=HttpProxyAuthenticationType.Basic
+                if proxy_url
+                else HttpProxyAuthenticationType.Nothing,
                 auth_username=parsed_proxy_url.username or None,
                 auth_password=parsed_proxy_url.password or None,
             )
@@ -176,7 +203,7 @@ class Websocket:
             on_connection_setup=self._on_connection,
             on_connection_shutdown=self._on_connection_shutdown,
             on_incoming_frame_payload=self._on_incoming_frame_payload_data,
-            on_incoming_frame_complete=self._on_incoming_frame_complete
+            on_incoming_frame_complete=self._on_incoming_frame_complete,
         )
 
         # Wait for the on_connection callback to be called.
@@ -211,7 +238,7 @@ class Websocket:
 
             try:
                 data = self.websocketio.read(self._MAX_BYTES_PER_FRAME)
-            except InputClosedError as e:
+            except InputClosedError:
                 logger.debug('Input closed. Shutting down websocket.')
                 self.close()
 
@@ -230,7 +257,9 @@ class Websocket:
                 ]
                 # Expected exception if server or user closes conn. Catch it and gracefully exit this method.
                 if any(exc_code in str(e.args) for exc_code in crt_exceptions):
-                    logger.debug(f"Received exception when sending websocket frame: {e.args}")
+                    logger.debug(
+                        f"Received exception when sending websocket frame: {e.args}"
+                    )
                     self.close()
                 else:
                     raise e
@@ -253,20 +282,29 @@ class Websocket:
         self._websocket = data.websocket
         self._on_connection_event.set()
 
-    def _on_incoming_frame_payload_data(self, incoming_frame_data: OnIncomingFramePayloadData) -> None:
+    def _on_incoming_frame_payload_data(
+        self, incoming_frame_data: OnIncomingFramePayloadData
+    ) -> None:
         opcode = incoming_frame_data.frame.opcode
         if not opcode.is_data_frame():
             if opcode == Opcode.CLOSE and incoming_frame_data.data:
                 self._close_frame_bytes += incoming_frame_data.data
             return
         if opcode == Opcode.TEXT:
-            self._exception = WebsocketException("Received invalid data from server, closing websocket connection.")
+            self._exception = WebsocketException(
+                "Received invalid data from server, closing websocket connection."
+            )
             self.close()
             return
         self.websocketio.write(incoming_frame_data.data)
 
-    def _on_incoming_frame_complete(self, incoming_frame_data: OnIncomingFrameCompleteData):
-        if incoming_frame_data.frame.opcode == Opcode.CLOSE and incoming_frame_data.exception is None:
+    def _on_incoming_frame_complete(
+        self, incoming_frame_data: OnIncomingFrameCompleteData
+    ):
+        if (
+            incoming_frame_data.frame.opcode == Opcode.CLOSE
+            and incoming_frame_data.exception is None
+        ):
             if len(self._close_frame_bytes) > 0:
                 shutdown_code_as_bytes = self._close_frame_bytes[0:2]
                 # The shutdown code is a packed 2 byte unsigned int.
@@ -274,11 +312,17 @@ class Websocket:
                 shutdown_reason_in_bytes = self._close_frame_bytes[2:]
                 if shutdown_code != 1000:
                     logger.debug("Shutdown code: %s", str(shutdown_code))
-                    decoded_shutdown_reason = shutdown_reason_in_bytes.decode("utf-8")
-                    self._exception = WebsocketException(f"Websocket Closure Reason: {decoded_shutdown_reason}")
+                    decoded_shutdown_reason = shutdown_reason_in_bytes.decode(
+                        "utf-8"
+                    )
+                    self._exception = WebsocketException(
+                        f"Websocket Closure Reason: {decoded_shutdown_reason}"
+                    )
             self.close()
 
-    def _on_send_frame_complete_data(self, send_frame_data: OnSendFrameCompleteData) -> None:
+    def _on_send_frame_complete_data(
+        self, send_frame_data: OnSendFrameCompleteData
+    ) -> None:
         self._send_frame_results_queue.put(send_frame_data)
 
     def _on_connection_shutdown(self, data: OnConnectionShutdownData) -> None:
@@ -288,7 +332,13 @@ class Websocket:
 
 
 class WebsocketManager:
-    def __init__(self, port, max_websocket_connections, eice_request_signer, user_agent=None):
+    def __init__(
+        self,
+        port,
+        max_websocket_connections,
+        eice_request_signer,
+        user_agent=None,
+    ):
         self._port = port
         self._executor = ThreadPoolExecutor(
             max_workers=max_websocket_connections
@@ -322,8 +372,12 @@ class WebsocketManager:
     def run(self):
         # If no port is specified, open a singular websocket connection.
         if not self._port:
-            websocketio = WindowsStdinStdoutIO() if is_windows else StdinStdoutIO()
-            future = self._open_websocket_connection(Websocket(websocketio, websocket_id=None))
+            websocketio = (
+                WindowsStdinStdoutIO() if is_windows else StdinStdoutIO()
+            )
+            future = self._open_websocket_connection(
+                Websocket(websocketio, websocket_id=None)
+            )
             # Block until the future completes.
             future.result()
         else:
@@ -342,21 +396,32 @@ class WebsocketManager:
                 conn, addr = self._socket.accept()
                 # Check if we have reached max connections
                 self._remove_done_futures()
-                if len(self._inflight_futures_and_websockets) >= self._max_websocket_connections:
-                    print(f"Max websocket connections {self._max_websocket_connections} have been reached, closing "
-                          f"incoming connection.")
+                if (
+                    len(self._inflight_futures_and_websockets)
+                    >= self._max_websocket_connections
+                ):
+                    print(
+                        f"Max websocket connections {self._max_websocket_connections} have been reached, closing "
+                        f"incoming connection."
+                    )
                     conn.close()
                     continue
 
                 websocket_id = self._connection_id_counter
                 self._connection_id_counter += 1
-                print(f"[{websocket_id}] Accepted new tcp connection, opening websocket tunnel.")
+                print(
+                    f"[{websocket_id}] Accepted new tcp connection, opening websocket tunnel."
+                )
                 try:
                     web_socket = Websocket(TCPSocketIO(conn), websocket_id)
                     future = self._open_websocket_connection(web_socket)
-                    future.add_done_callback(self._print_tcp_conn_closed(web_socket))
+                    future.add_done_callback(
+                        self._print_tcp_conn_closed(web_socket)
+                    )
                 except WebsocketException as e:
-                    logger.error(f"[{websocket_id}] Encountered error opening websocket: {e.args}")
+                    logger.error(
+                        f"[{websocket_id}] Encountered error opening websocket: {e.args}"
+                    )
 
     def _open_websocket_connection(self, web_socket):
         presigned_url = self._eice_request_signer.get_presigned_url()
diff -pruN 2.23.6-1/awscli/customizations/ecr.py 2.31.35-1/awscli/customizations/ecr.py
--- 2.23.6-1/awscli/customizations/ecr.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecr.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import sys
+from base64 import b64decode
+
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.utils import create_client_from_parsed_globals
 
-from base64 import b64decode
-import sys
-
 
 def register_ecr_commands(cli):
     cli.register('building-command-table.ecr', _inject_commands)
@@ -27,16 +27,17 @@ def _inject_commands(command_table, sess
 
 class ECRGetLoginPassword(BasicCommand):
     """Get a password to be used with container clients such as Docker"""
+
     NAME = 'get-login-password'
 
     DESCRIPTION = BasicCommand.FROM_FILE(
-            'ecr/get-login-password_description.rst')
+        'ecr/get-login-password_description.rst'
+    )
 
     def _run_main(self, parsed_args, parsed_globals):
         ecr_client = create_client_from_parsed_globals(
-                self._session,
-                'ecr',
-                parsed_globals)
+            self._session, 'ecr', parsed_globals
+        )
         result = ecr_client.get_authorization_token()
         auth = result['authorizationData'][0]
         auth_token = b64decode(auth['authorizationToken']).decode()
diff -pruN 2.23.6-1/awscli/customizations/ecr_public.py 2.31.35-1/awscli/customizations/ecr_public.py
--- 2.23.6-1/awscli/customizations/ecr_public.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecr_public.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import sys
+from base64 import b64decode
+
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.utils import create_client_from_parsed_globals
 
-from base64 import b64decode
-import sys
-
 
 def register_ecr_public_commands(cli):
     cli.register('building-command-table.ecr-public', _inject_commands)
@@ -27,16 +27,17 @@ def _inject_commands(command_table, sess
 
 class ECRPublicGetLoginPassword(BasicCommand):
     """Get a password to be used with container clients such as Docker"""
+
     NAME = 'get-login-password'
 
     DESCRIPTION = BasicCommand.FROM_FILE(
-            'ecr-public/get-login-password_description.rst')
+        'ecr-public/get-login-password_description.rst'
+    )
 
     def _run_main(self, parsed_args, parsed_globals):
         ecr_public_client = create_client_from_parsed_globals(
-                self._session,
-                'ecr-public',
-                parsed_globals)
+            self._session, 'ecr-public', parsed_globals
+        )
         result = ecr_public_client.get_authorization_token()
         auth = result['authorizationData']
         auth_token = b64decode(auth['authorizationToken']).decode()
diff -pruN 2.23.6-1/awscli/customizations/ecs/__init__.py 2.31.35-1/awscli/customizations/ecs/__init__.py
--- 2.23.6-1/awscli/customizations/ecs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,10 @@
 # language governing permissions and limitations under the License.
 
 from awscli.customizations.ecs.deploy import ECSDeploy
-from awscli.customizations.ecs.executecommand import ECSExecuteCommand
-from awscli.customizations.ecs.executecommand import ExecuteCommandCaller
+from awscli.customizations.ecs.executecommand import (
+    ECSExecuteCommand,
+    ExecuteCommandCaller,
+)
 
 
 def initialize(cli):
@@ -33,7 +35,8 @@ def inject_commands(command_table, sessi
         name='execute-command',
         parent_name='ecs',
         session=session,
-        operation_model=session.get_service_model('ecs')
-                    .operation_model('ExecuteCommand'),
+        operation_model=session.get_service_model('ecs').operation_model(
+            'ExecuteCommand'
+        ),
         operation_caller=ExecuteCommandCaller(session),
     )
diff -pruN 2.23.6-1/awscli/customizations/ecs/deploy.py 2.31.35-1/awscli/customizations/ecs/deploy.py
--- 2.23.6-1/awscli/customizations/ecs/deploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecs/deploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,9 +18,10 @@ import sys
 
 from botocore import compat, config
 from botocore.exceptions import ClientError
+
 from awscli.compat import compat_open
-from awscli.customizations.ecs import exceptions, filehelpers
 from awscli.customizations.commands import BasicCommand
+from awscli.customizations.ecs import exceptions, filehelpers
 
 TIMEOUT_BUFFER_MIN = 10
 DEFAULT_DELAY_SEC = 15
@@ -45,96 +46,111 @@ class ECSDeploy(BasicCommand):
     ARG_TABLE = [
         {
             'name': 'service',
-            'help_text': ("The short name or full Amazon Resource Name "
-                          "(ARN) of the service to update"),
-            'required': True
+            'help_text': (
+                "The short name or full Amazon Resource Name "
+                "(ARN) of the service to update"
+            ),
+            'required': True,
         },
         {
             'name': 'task-definition',
-            'help_text': ("The file path where your task definition file is "
-                          "located. The format of the file must be the same "
-                          "as the JSON output of: <codeblock>aws ecs "
-                          "register-task-definition "
-                          "--generate-cli-skeleton</codeblock>"),
-            'required': True
+            'help_text': (
+                "The file path where your task definition file is "
+                "located. The format of the file must be the same "
+                "as the JSON output of: <codeblock>aws ecs "
+                "register-task-definition "
+                "--generate-cli-skeleton</codeblock>"
+            ),
+            'required': True,
         },
         {
             'name': 'codedeploy-appspec',
-            'help_text': ("The file path where your AWS CodeDeploy appspec "
-                          "file is located. The appspec file may be in JSON "
-                          "or YAML format. The <code>TaskDefinition</code> "
-                          "property will be updated within the appspec with "
-                          "the newly registered task definition ARN, "
-                          "overwriting any placeholder values in the file."),
-            'required': True
+            'help_text': (
+                "The file path where your AWS CodeDeploy appspec "
+                "file is located. The appspec file may be in JSON "
+                "or YAML format. The <code>TaskDefinition</code> "
+                "property will be updated within the appspec with "
+                "the newly registered task definition ARN, "
+                "overwriting any placeholder values in the file."
+            ),
+            'required': True,
         },
         {
             'name': 'cluster',
-            'help_text': ("The short name or full Amazon Resource Name "
-                          "(ARN) of the cluster that your service is "
-                          "running within. If you do not specify a "
-                          "cluster, the \"default\" cluster is assumed."),
-            'required': False
+            'help_text': (
+                "The short name or full Amazon Resource Name "
+                "(ARN) of the cluster that your service is "
+                "running within. If you do not specify a "
+                "cluster, the \"default\" cluster is assumed."
+            ),
+            'required': False,
         },
         {
             'name': 'codedeploy-application',
-            'help_text': ("The name of the AWS CodeDeploy application "
-                          "to use for the deployment. The specified "
-                          "application must use the 'ECS' compute "
-                          "platform. If you do not specify an "
-                          "application, the application name "
-                          "<code>AppECS-[CLUSTER_NAME]-[SERVICE_NAME]</code> "
-                          "is assumed."),
-            'required': False
+            'help_text': (
+                "The name of the AWS CodeDeploy application "
+                "to use for the deployment. The specified "
+                "application must use the 'ECS' compute "
+                "platform. If you do not specify an "
+                "application, the application name "
+                "<code>AppECS-[CLUSTER_NAME]-[SERVICE_NAME]</code> "
+                "is assumed."
+            ),
+            'required': False,
         },
         {
             'name': 'codedeploy-deployment-group',
-            'help_text': ("The name of the AWS CodeDeploy deployment "
-                          "group to use for the deployment. The "
-                          "specified deployment group must be associated "
-                          "with the specified ECS service and cluster. "
-                          "If you do not specify a deployment group, "
-                          "the deployment group name "
-                          "<code>DgpECS-[CLUSTER_NAME]-[SERVICE_NAME]</code> "
-                          "is assumed."),
-            'required': False
-        }
+            'help_text': (
+                "The name of the AWS CodeDeploy deployment "
+                "group to use for the deployment. The "
+                "specified deployment group must be associated "
+                "with the specified ECS service and cluster. "
+                "If you do not specify a deployment group, "
+                "the deployment group name "
+                "<code>DgpECS-[CLUSTER_NAME]-[SERVICE_NAME]</code> "
+                "is assumed."
+            ),
+            'required': False,
+        },
     ]
 
-    MSG_TASK_DEF_REGISTERED = \
+    MSG_TASK_DEF_REGISTERED = (
         "Successfully registered new ECS task definition {arn}\n"
+    )
 
     MSG_CREATED_DEPLOYMENT = "Successfully created deployment {id}\n"
 
-    MSG_SUCCESS = ("Successfully deployed {task_def} to "
-                   "service '{service}'\n")
+    MSG_SUCCESS = "Successfully deployed {task_def} to service '{service}'\n"
 
     USER_AGENT_EXTRA = 'md/customization#ecs-deploy'
 
     def _run_main(self, parsed_args, parsed_globals):
-
-        register_task_def_kwargs, appspec_obj = \
-            self._load_file_args(parsed_args.task_definition,
-                                 parsed_args.codedeploy_appspec)
+        register_task_def_kwargs, appspec_obj = self._load_file_args(
+            parsed_args.task_definition, parsed_args.codedeploy_appspec
+        )
 
         ecs_client_wrapper = ECSClient(
-            self._session, parsed_args, parsed_globals, self.USER_AGENT_EXTRA)
+            self._session, parsed_args, parsed_globals, self.USER_AGENT_EXTRA
+        )
 
         self.resources = self._get_resource_names(
-            parsed_args, ecs_client_wrapper)
+            parsed_args, ecs_client_wrapper
+        )
 
         codedeploy_client = self._session.create_client(
             'codedeploy',
             region_name=parsed_globals.region,
             verify=parsed_globals.verify_ssl,
-            config=config.Config(user_agent_extra=self.USER_AGENT_EXTRA))
+            config=config.Config(user_agent_extra=self.USER_AGENT_EXTRA),
+        )
 
         self._validate_code_deploy_resources(codedeploy_client)
 
         self.wait_time = self._cd_validator.get_deployment_wait_time()
 
         self.task_def_arn = self._register_task_def(
-            register_task_def_kwargs, ecs_client_wrapper)
+            register_task_def_kwargs, ecs_client_wrapper
+        )
 
         self._create_and_wait_for_deployment(codedeploy_client, appspec_obj)
         return 0
@@ -143,18 +159,19 @@ class ECSDeploy(BasicCommand):
         deployer = CodeDeployer(client, appspec)
         deployer.update_task_def_arn(self.task_def_arn)
         deployment_id = deployer.create_deployment(
-            self.resources['app_name'],
-            self.resources['deployment_group_name'])
+            self.resources['app_name'], self.resources['deployment_group_name']
+        )
 
-        sys.stdout.write(self.MSG_CREATED_DEPLOYMENT.format(
-            id=deployment_id))
+        sys.stdout.write(self.MSG_CREATED_DEPLOYMENT.format(id=deployment_id))
 
         deployer.wait_for_deploy_success(deployment_id, self.wait_time)
         service_name = self.resources['service']
 
         sys.stdout.write(
             self.MSG_SUCCESS.format(
-                task_def=self.task_def_arn, service=service_name))
+                task_def=self.task_def_arn, service=service_name
+            )
+        )
         sys.stdout.flush()
 
     def _get_file_contents(self, file_path):
@@ -162,9 +179,8 @@ class ECSDeploy(BasicCommand):
         try:
             with compat_open(full_path) as f:
                 return f.read()
-        except (OSError, IOError, UnicodeDecodeError) as e:
-            raise exceptions.FileLoadError(
-                file_path=file_path, error=e)
+        except (OSError, UnicodeDecodeError) as e:
+            raise exceptions.FileLoadError(file_path=file_path, error=e)
 
     def _get_resource_names(self, args, ecs_client):
         service_details = ecs_client.get_service_details()
@@ -172,9 +188,11 @@ class ECSDeploy(BasicCommand):
         cluster_name = service_details['cluster_name']
 
         application_name = filehelpers.get_app_name(
-            service_name, cluster_name, args.codedeploy_application)
+            service_name, cluster_name, args.codedeploy_application
+        )
         deployment_group_name = filehelpers.get_deploy_group_name(
-            service_name, cluster_name, args.codedeploy_deployment_group)
+            service_name, cluster_name, args.codedeploy_deployment_group
+        )
 
         return {
             'service': service_name,
@@ -182,7 +200,7 @@ class ECSDeploy(BasicCommand):
             'cluster': cluster_name,
             'cluster_arn': service_details['cluster_arn'],
             'app_name': application_name,
-            'deployment_group_name': deployment_group_name
+            'deployment_group_name': deployment_group_name,
         }
 
     def _load_file_args(self, task_def_arg, appspec_arg):
@@ -199,8 +217,7 @@ class ECSDeploy(BasicCommand):
 
         task_def_arn = response['taskDefinition']['taskDefinitionArn']
 
-        sys.stdout.write(self.MSG_TASK_DEF_REGISTERED.format(
-            arn=task_def_arn))
+        sys.stdout.write(self.MSG_TASK_DEF_REGISTERED.format(arn=task_def_arn))
         sys.stdout.flush()
 
         return task_def_arn
@@ -212,10 +229,11 @@ class ECSDeploy(BasicCommand):
         self._cd_validator = validator
 
 
-class CodeDeployer():
-
-    MSG_WAITING = ("Waiting for {deployment_id} to succeed "
-                   "(will wait up to {wait} minutes)...\n")
+class CodeDeployer:
+    MSG_WAITING = (
+        "Waiting for {deployment_id} to succeed "
+        "(will wait up to {wait} minutes)...\n"
+    )
 
     def __init__(self, cd_client, appspec_dict):
         self._client = cd_client
@@ -223,13 +241,15 @@ class CodeDeployer():
 
     def create_deployment(self, app_name, deploy_grp_name):
         request_obj = self._get_create_deploy_request(
-            app_name, deploy_grp_name)
+            app_name, deploy_grp_name
+        )
 
         try:
             response = self._client.create_deployment(**request_obj)
         except ClientError as e:
             raise exceptions.ServiceClientError(
-                action='create deployment', error=e)
+                action='create deployment', error=e
+            )
 
         return response['deploymentId']
 
@@ -246,9 +266,9 @@ class CodeDeployer():
                 "revisionType": "AppSpecContent",
                 "appSpecContent": {
                     "content": json.dumps(self._appspec_dict),
-                    "sha256": self._get_appspec_hash()
-                }
-            }
+                    "sha256": self._get_appspec_hash(),
+                },
+            },
         }
 
     def update_task_def_arn(self, new_arn):
@@ -270,7 +290,8 @@ class CodeDeployer():
         appspec_obj = self._appspec_dict
 
         resources_key = filehelpers.find_required_key(
-            'codedeploy-appspec', appspec_obj, 'resources')
+            'codedeploy-appspec', appspec_obj, 'resources'
+        )
         updated_resources = []
 
         # 'resources' is a list of string:obj dictionaries
@@ -280,11 +301,13 @@ class CodeDeployer():
                 resource_content = resource[name]
                 # get resource properties
                 properties_key = filehelpers.find_required_key(
-                    name, resource_content, 'properties')
+                    name, resource_content, 'properties'
+                )
                 properties_content = resource_content[properties_key]
                 # find task definition property
                 task_def_key = filehelpers.find_required_key(
-                    properties_key, properties_content, 'taskDefinition')
+                    properties_key, properties_content, 'taskDefinition'
+                )
 
                 # insert new task def ARN into resource
                 properties_content[task_def_key] = new_arn
@@ -305,22 +328,19 @@ class CodeDeployer():
 
         delay_sec = DEFAULT_DELAY_SEC
         max_attempts = (wait_min * 60) / delay_sec
-        config = {
-            'Delay': delay_sec,
-            'MaxAttempts': max_attempts
-        }
+        config = {'Delay': delay_sec, 'MaxAttempts': max_attempts}
 
         self._show_deploy_wait_msg(id, wait_min)
         waiter.wait(deploymentId=id, WaiterConfig=config)
 
     def _show_deploy_wait_msg(self, id, wait_min):
         sys.stdout.write(
-            self.MSG_WAITING.format(deployment_id=id,
-                                    wait=wait_min))
+            self.MSG_WAITING.format(deployment_id=id, wait=wait_min)
+        )
         sys.stdout.flush()
 
 
-class CodeDeployValidator():
+class CodeDeployValidator:
     def __init__(self, cd_client, resources):
         self._client = cd_client
         self._resource_names = resources
@@ -328,35 +348,42 @@ class CodeDeployValidator():
     def describe_cd_resources(self):
         try:
             self.app_details = self._client.get_application(
-                applicationName=self._resource_names['app_name'])
+                applicationName=self._resource_names['app_name']
+            )
         except ClientError as e:
             raise exceptions.ServiceClientError(
-                action='describe Code Deploy application', error=e)
+                action='describe Code Deploy application', error=e
+            )
 
         try:
             dgp = self._resource_names['deployment_group_name']
             app = self._resource_names['app_name']
             self.deployment_group_details = self._client.get_deployment_group(
-                applicationName=app, deploymentGroupName=dgp)
+                applicationName=app, deploymentGroupName=dgp
+            )
         except ClientError as e:
             raise exceptions.ServiceClientError(
-                action='describe Code Deploy deployment group', error=e)
+                action='describe Code Deploy deployment group', error=e
+            )
 
     def get_deployment_wait_time(self):
-
-        if (not hasattr(self, 'deployment_group_details') or
-                self.deployment_group_details is None):
+        if (
+            not hasattr(self, 'deployment_group_details')
+            or self.deployment_group_details is None
+        ):
             return None
         else:
             dgp_info = self.deployment_group_details['deploymentGroupInfo']
             blue_green_info = dgp_info['blueGreenDeploymentConfiguration']
 
-            deploy_ready_wait_min = \
-                blue_green_info['deploymentReadyOption']['waitTimeInMinutes']
+            deploy_ready_wait_min = blue_green_info['deploymentReadyOption'][
+                'waitTimeInMinutes'
+            ]
 
             terminate_key = 'terminateBlueInstancesOnDeploymentSuccess'
-            termination_wait_min = \
-                blue_green_info[terminate_key]['terminationWaitTimeInMinutes']
+            termination_wait_min = blue_green_info[terminate_key][
+                'terminationWaitTimeInMinutes'
+            ]
 
             configured_wait = deploy_ready_wait_min + termination_wait_min
 
@@ -370,7 +397,8 @@ class CodeDeployValidator():
         app_name = self._resource_names['app_name']
         if self.app_details['application']['computePlatform'] != 'ECS':
             raise exceptions.InvalidPlatformError(
-                resource='Application', name=app_name)
+                resource='Application', name=app_name
+            )
 
     def validate_deployment_group(self):
         dgp = self._resource_names['deployment_group_name']
@@ -384,26 +412,29 @@ class CodeDeployValidator():
 
         if compute_platform != 'ECS':
             raise exceptions.InvalidPlatformError(
-                resource='Deployment Group', name=dgp)
+                resource='Deployment Group', name=dgp
+            )
 
-        target_services = \
-            self.deployment_group_details['deploymentGroupInfo']['ecsServices']
+        target_services = self.deployment_group_details['deploymentGroupInfo'][
+            'ecsServices'
+        ]
 
         # either ECS resource names or ARNs can be stored, so check both
         for target in target_services:
             target_serv = target['serviceName']
             if target_serv != service and target_serv != service_arn:
                 raise exceptions.InvalidProperyError(
-                    dg_name=dgp, resource='service', resource_name=service)
+                    dg_name=dgp, resource='service', resource_name=service
+                )
 
             target_cluster = target['clusterName']
             if target_cluster != cluster and target_cluster != cluster_arn:
                 raise exceptions.InvalidProperyError(
-                    dg_name=dgp, resource='cluster', resource_name=cluster)
-
+                    dg_name=dgp, resource='cluster', resource_name=cluster
+                )
 
-class ECSClient():
 
+class ECSClient:
     def __init__(self, session, parsed_args, parsed_globals, user_agent_extra):
         self._args = parsed_args
         self._custom_config = config.Config(user_agent_extra=user_agent_extra)
@@ -412,7 +443,8 @@ class ECSClient():
             region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
             verify=parsed_globals.verify_ssl,
-            config=self._custom_config)
+            config=self._custom_config,
+        )
 
     def get_service_details(self):
         cluster = self._args.cluster
@@ -422,33 +454,36 @@ class ECSClient():
 
         try:
             service_response = self._client.describe_services(
-                cluster=cluster, services=[self._args.service])
+                cluster=cluster, services=[self._args.service]
+            )
         except ClientError as e:
             raise exceptions.ServiceClientError(
-                action='describe ECS service', error=e)
+                action='describe ECS service', error=e
+            )
 
         if len(service_response['services']) == 0:
             raise exceptions.InvalidServiceError(
-                service=self._args.service, cluster=cluster)
+                service=self._args.service, cluster=cluster
+            )
 
         service_details = service_response['services'][0]
-        cluster_name = \
-            filehelpers.get_cluster_name_from_arn(
-                service_details['clusterArn'])
+        cluster_name = filehelpers.get_cluster_name_from_arn(
+            service_details['clusterArn']
+        )
 
         return {
             'service_arn': service_details['serviceArn'],
             'service_name': service_details['serviceName'],
             'cluster_arn': service_details['clusterArn'],
-            'cluster_name': cluster_name
+            'cluster_name': cluster_name,
         }
 
     def register_task_definition(self, kwargs):
         try:
-            response = \
-                self._client.register_task_definition(**kwargs)
+            response = self._client.register_task_definition(**kwargs)
         except ClientError as e:
             raise exceptions.ServiceClientError(
-                action='register ECS task definition', error=e)
+                action='register ECS task definition', error=e
+            )
 
         return response
diff -pruN 2.23.6-1/awscli/customizations/ecs/exceptions.py 2.31.35-1/awscli/customizations/ecs/exceptions.py
--- 2.23.6-1/awscli/customizations/ecs/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecs/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,8 @@
 
 
 class ECSError(Exception):
-    """ Base class for all ECSErrors."""
+    """Base class for all ECSErrors."""
+
     fmt = 'An unspecified error occurred'
 
     def __init__(self, **kwargs):
@@ -23,8 +24,7 @@ class ECSError(Exception):
 
 
 class MissingPropertyError(ECSError):
-    fmt = \
-        "Error: Resource '{resource}' must include property '{prop_name}'"
+    fmt = "Error: Resource '{resource}' must include property '{prop_name}'"
 
 
 class FileLoadError(ECSError):
@@ -36,8 +36,10 @@ class InvalidPlatformError(ECSError):
 
 
 class InvalidProperyError(ECSError):
-    fmt = ("Error: deployment group '{dg_name}' does not target "
-           "ECS {resource} '{resource_name}'")
+    fmt = (
+        "Error: deployment group '{dg_name}' does not target "
+        "ECS {resource} '{resource_name}'"
+    )
 
 
 class InvalidServiceError(ECSError):
@@ -45,4 +47,4 @@ class InvalidServiceError(ECSError):
 
 
 class ServiceClientError(ECSError):
-    fmt = "Failed to {action}:\n{error}"
\ No newline at end of file
+    fmt = "Failed to {action}:\n{error}"
diff -pruN 2.23.6-1/awscli/customizations/ecs/executecommand.py 2.31.35-1/awscli/customizations/ecs/executecommand.py
--- 2.23.6-1/awscli/customizations/ecs/executecommand.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecs/executecommand.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import logging
-import json
 import errno
-
+import json
+import logging
 from subprocess import check_call
+
+from awscli.clidriver import CLIOperationCaller, ServiceOperation
 from awscli.compat import ignore_user_entered_signals
-from awscli.clidriver import ServiceOperation, CLIOperationCaller
 
 logger = logging.getLogger(__name__)
 
@@ -24,17 +24,13 @@ ERROR_MESSAGE = (
     'SessionManagerPlugin is not found. ',
     'Please refer to SessionManager Documentation here: ',
     'http://docs.aws.amazon.com/console/systems-manager/',
-    'session-manager-plugin-not-found'
+    'session-manager-plugin-not-found',
 )
 
-TASK_NOT_FOUND = (
-    'The task provided in the request was '
-    'not found.'
-)
+TASK_NOT_FOUND = 'The task provided in the request was not found.'
 
 
 class ECSExecuteCommand(ServiceOperation):
-
     def create_help_command(self):
         help_command = super(ECSExecuteCommand, self).create_help_command()
         # change the output shape because the command provides no output.
@@ -43,10 +39,7 @@ class ECSExecuteCommand(ServiceOperation
 
 
 def get_container_runtime_id(client, container_name, task_id, cluster_name):
-    describe_tasks_params = {
-        "cluster": cluster_name,
-        "tasks": [task_id]
-    }
+    describe_tasks_params = {"cluster": cluster_name, "tasks": [task_id]}
     describe_tasks_response = client.describe_tasks(**describe_tasks_params)
     # need to fail here if task has failed in the intermediate time
     tasks = describe_tasks_response['tasks']
@@ -64,11 +57,10 @@ def build_ssm_request_paramaters(respons
     container_name = response['containerName']
     # in order to get container run-time id
     # we need to make a call to describe-tasks
-    container_runtime_id = \
-        get_container_runtime_id(client, container_name,
-                                 task_id, cluster_name)
-    target = "ecs:{}_{}_{}".format(cluster_name, task_id,
-                                   container_runtime_id)
+    container_runtime_id = get_container_runtime_id(
+        client, container_name, task_id, cluster_name
+    )
+    target = f"ecs:{cluster_name}_{task_id}_{container_runtime_id}"
     ssm_request_params = {"Target": target}
     return ssm_request_params
 
@@ -85,13 +77,18 @@ class ExecuteCommandCaller(CLIOperationC
             # before execute-command-command is made
             check_call(["session-manager-plugin"])
             client = self._session.create_client(
-                service_name, region_name=parsed_globals.region,
+                service_name,
+                region_name=parsed_globals.region,
                 endpoint_url=parsed_globals.endpoint_url,
-                verify=parsed_globals.verify_ssl)
+                verify=parsed_globals.verify_ssl,
+            )
             response = client.execute_command(**parameters)
             region_name = client.meta.region_name
-            profile_name = self._session.profile \
-                if self._session.profile is not None else ''
+            profile_name = (
+                self._session.profile
+                if self._session.profile is not None
+                else ''
+            )
             endpoint_url = client.meta.endpoint_url
             ssm_request_params = build_ssm_request_paramaters(response, client)
             # ignore_user_entered_signals ignores these signals
@@ -102,16 +99,21 @@ class ExecuteCommandCaller(CLIOperationC
             # and handling in there
             with ignore_user_entered_signals():
                 # call executable with necessary input
-                check_call(["session-manager-plugin",
-                            json.dumps(response['session']),
-                            region_name,
-                            "StartSession",
-                            profile_name,
-                            json.dumps(ssm_request_params),
-                            endpoint_url])
+                check_call(
+                    [
+                        "session-manager-plugin",
+                        json.dumps(response['session']),
+                        region_name,
+                        "StartSession",
+                        profile_name,
+                        json.dumps(ssm_request_params),
+                        endpoint_url,
+                    ]
+                )
             return 0
         except OSError as ex:
             if ex.errno == errno.ENOENT:
-                logger.debug('SessionManagerPlugin is not present',
-                             exc_info=True)
+                logger.debug(
+                    'SessionManagerPlugin is not present', exc_info=True
+                )
                 raise ValueError(''.join(ERROR_MESSAGE))
diff -pruN 2.23.6-1/awscli/customizations/ecs/filehelpers.py 2.31.35-1/awscli/customizations/ecs/filehelpers.py
--- 2.23.6-1/awscli/customizations/ecs/filehelpers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/ecs/filehelpers.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import json
+
 from ruamel.yaml import YAML
 
 from awscli.customizations.ecs import exceptions
@@ -21,16 +22,17 @@ DGP_PREFIX = 'DgpECS-'
 
 
 def find_required_key(resource_name, obj, key):
-
     if obj is None:
         raise exceptions.MissingPropertyError(
-            resource=resource_name, prop_name=key)
+            resource=resource_name, prop_name=key
+        )
 
     result = _get_case_insensitive_key(obj, key)
 
     if result is None:
         raise exceptions.MissingPropertyError(
-            resource=resource_name, prop_name=key)
+            resource=resource_name, prop_name=key
+        )
     else:
         return result
 
diff -pruN 2.23.6-1/awscli/customizations/eks/__init__.py 2.31.35-1/awscli/customizations/eks/__init__.py
--- 2.23.6-1/awscli/customizations/eks/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.eks.update_kubeconfig import UpdateKubeconfigCommand
 from awscli.customizations.eks.get_token import GetTokenCommand
+from awscli.customizations.eks.update_kubeconfig import UpdateKubeconfigCommand
 
 
 def initialize(cli):
diff -pruN 2.23.6-1/awscli/customizations/eks/exceptions.py 2.31.35-1/awscli/customizations/eks/exceptions.py
--- 2.23.6-1/awscli/customizations/eks/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,8 +13,8 @@
 
 
 class EKSError(Exception):
-    """ Base class for all EKSErrors."""
+    """Base class for all EKSErrors."""
 
 
 class EKSClusterError(EKSError):
-    """ Raised when a cluster is not in the correct state."""
+    """Raised when a cluster is not in the correct state."""
diff -pruN 2.23.6-1/awscli/customizations/eks/get_token.py 2.31.35-1/awscli/customizations/eks/get_token.py
--- 2.23.6-1/awscli/customizations/eks/get_token.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/get_token.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,19 +11,18 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import base64
-import botocore
 import json
 import os
 import sys
-
 from datetime import datetime, timedelta
-from botocore.signers import RequestSigner
+
+import botocore
 from botocore.model import ServiceId
+from botocore.signers import RequestSigner
 
-from awscli.formatter import get_formatter
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.utils import uni_print
-from awscli.customizations.utils import validate_mutually_exclusive
+from awscli.customizations.utils import uni_print, validate_mutually_exclusive
+from awscli.formatter import get_formatter
 
 AUTH_SERVICE = "sts"
 AUTH_COMMAND = "GetCallerIdentity"
@@ -116,15 +115,19 @@ class GetTokenCommand(BasicCommand):
         sts_client = client_factory.get_sts_client(
             region_name=parsed_globals.region, role_arn=parsed_args.role_arn
         )
-        
-        validate_mutually_exclusive(parsed_args, ['cluster_name'], ['cluster_id'])
+
+        validate_mutually_exclusive(
+            parsed_args, ['cluster_name'], ['cluster_id']
+        )
 
         if parsed_args.cluster_id:
             identifier = parsed_args.cluster_id
         elif parsed_args.cluster_name:
             identifier = parsed_args.cluster_name
         else:
-            return ValueError("Either parameter --cluster-name or --cluster-id must be specified.")
+            return ValueError(
+                "Either parameter --cluster-name or --cluster-id must be specified."
+            )
 
         token = TokenGenerator(sts_client).get_token(identifier)
 
@@ -215,7 +218,7 @@ class GetTokenCommand(BasicCommand):
             return fallback_api_version
 
 
-class TokenGenerator(object):
+class TokenGenerator:
     def __init__(self, sts_client):
         self._sts_client = sts_client
 
@@ -236,7 +239,7 @@ class TokenGenerator(object):
         )
 
 
-class STSClientFactory(object):
+class STSClientFactory:
     def __init__(self, session):
         self._session = session
 
@@ -273,4 +276,6 @@ class STSClientFactory(object):
 
     def _inject_k8s_aws_id_header(self, request, **kwargs):
         if K8S_AWS_ID_HEADER in request.context:
-            request.headers[K8S_AWS_ID_HEADER] = request.context[K8S_AWS_ID_HEADER]
+            request.headers[K8S_AWS_ID_HEADER] = request.context[
+                K8S_AWS_ID_HEADER
+            ]
diff -pruN 2.23.6-1/awscli/customizations/eks/kubeconfig.py 2.31.35-1/awscli/customizations/eks/kubeconfig.py
--- 2.23.6-1/awscli/customizations/eks/kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,36 +20,38 @@ from botocore.compat import OrderedDict
 from awscli.compat import compat_open
 from awscli.customizations.eks.exceptions import EKSError
 from awscli.customizations.eks.ordered_yaml import (
+    ordered_yaml_dump,
     ordered_yaml_load,
-    ordered_yaml_dump
 )
 
 
 class KubeconfigError(EKSError):
-    """ Base class for all kubeconfig errors."""
+    """Base class for all kubeconfig errors."""
 
 
 class KubeconfigCorruptedError(KubeconfigError):
-    """ Raised when a kubeconfig cannot be parsed."""
+    """Raised when a kubeconfig cannot be parsed."""
 
 
 class KubeconfigInaccessableError(KubeconfigError):
-    """ Raised when a kubeconfig cannot be opened for read/writing."""
+    """Raised when a kubeconfig cannot be opened for read/writing."""
 
 
 def _get_new_kubeconfig_content():
-    return OrderedDict([
-        ("apiVersion", "v1"),
-        ("clusters", []),
-        ("contexts", []),
-        ("current-context", ""),
-        ("kind", "Config"),
-        ("preferences", OrderedDict()),
-        ("users", [])
-    ])
+    return OrderedDict(
+        [
+            ("apiVersion", "v1"),
+            ("clusters", []),
+            ("contexts", []),
+            ("current-context", ""),
+            ("kind", "Config"),
+            ("preferences", OrderedDict()),
+            ("users", []),
+        ]
+    )
 
 
-class Kubeconfig(object):
+class Kubeconfig:
     def __init__(self, path, content=None):
         self.path = path
         if content is None:
@@ -57,7 +59,7 @@ class Kubeconfig(object):
         self.content = content
 
     def dump_content(self):
-        """ Return the stored content in yaml format. """
+        """Return the stored content in yaml format."""
         return ordered_yaml_dump(self.content)
 
     def has_cluster(self, name):
@@ -67,18 +69,21 @@ class Kubeconfig(object):
         """
         if self.content.get('clusters') is None:
             return False
-        return name in [cluster['name']
-                        for cluster in self.content['clusters'] if 'name' in cluster]
+        return name in [
+            cluster['name']
+            for cluster in self.content['clusters']
+            if 'name' in cluster
+        ]
 
     def __eq__(self, other):
         return (
-                isinstance(other, Kubeconfig)
-                and self.path == other.path
-                and self.content == other.content
+            isinstance(other, Kubeconfig)
+            and self.path == other.path
+            and self.content == other.content
         )
 
 
-class KubeconfigValidator(object):
+class KubeconfigValidator:
     def __init__(self):
         # Validation_content is an empty Kubeconfig
         # It is used as a way to know what types different entries should be
@@ -92,8 +97,9 @@ class KubeconfigValidator(object):
         :type config: Kubeconfig
         """
         if not isinstance(config, Kubeconfig):
-            raise KubeconfigCorruptedError("Internal error: "
-                                           f"Not a {Kubeconfig}.")
+            raise KubeconfigCorruptedError(
+                f"Internal error: Not a {Kubeconfig}."
+            )
         self._validate_config_types(config)
         self._validate_list_entry_types(config)
 
@@ -108,9 +114,11 @@ class KubeconfigValidator(object):
         if not isinstance(config.content, dict):
             raise KubeconfigCorruptedError(f"Content not a {dict}.")
         for key, value in self._validation_content.items():
-            if (key in config.content and
-                    config.content[key] is not None and
-                    not isinstance(config.content[key], type(value))):
+            if (
+                key in config.content
+                and config.content[key] is not None
+                and not isinstance(config.content[key], type(value))
+            ):
                 raise KubeconfigCorruptedError(
                     f"{key} is wrong type: {type(config.content[key])} "
                     f"(Should be {type(value)})"
@@ -125,19 +133,19 @@ class KubeconfigValidator(object):
         :type config: Kubeconfig
         """
         for key, value in self._validation_content.items():
-            if (key in config.content and
-                    type(config.content[key]) == list):
+            if key in config.content and type(config.content[key]) == list:
                 for element in config.content[key]:
                     if not isinstance(element, OrderedDict):
                         raise KubeconfigCorruptedError(
-                            f"Entry in {key} not a {dict}. ")
+                            f"Entry in {key} not a {dict}. "
+                        )
 
 
-class KubeconfigLoader(object):
-    def __init__(self, validator = None):
+class KubeconfigLoader:
+    def __init__(self, validator=None):
         if validator is None:
-            validator=KubeconfigValidator()
-        self._validator=validator
+            validator = KubeconfigValidator()
+        self._validator = validator
 
     def load_kubeconfig(self, path):
         """
@@ -159,23 +167,25 @@ class KubeconfigLoader(object):
         try:
             with compat_open(path, "r") as stream:
                 loaded_content = ordered_yaml_load(stream)
-        except IOError as e:
+        except OSError as e:
             if e.errno == errno.ENOENT:
-                loaded_content=None
+                loaded_content = None
             else:
                 raise KubeconfigInaccessableError(
-                    f"Can't open kubeconfig for reading: {e}")
+                    f"Can't open kubeconfig for reading: {e}"
+                )
         except yaml.YAMLError as e:
             raise KubeconfigCorruptedError(
-                f"YamlError while loading kubeconfig: {e}")
+                f"YamlError while loading kubeconfig: {e}"
+            )
 
-        loaded_config=Kubeconfig(path, loaded_content)
+        loaded_config = Kubeconfig(path, loaded_content)
         self._validator.validate_config(loaded_config)
 
         return loaded_config
 
 
-class KubeconfigWriter(object):
+class KubeconfigWriter:
     def write_kubeconfig(self, config):
         """
         Write config to disk.
@@ -187,24 +197,27 @@ class KubeconfigWriter(object):
         :raises KubeconfigInaccessableError: if the kubeconfig
         can't be opened for writing
         """
-        directory=os.path.dirname(config.path)
+        directory = os.path.dirname(config.path)
 
         try:
             os.makedirs(directory)
         except OSError as e:
             if e.errno != errno.EEXIST:
                 raise KubeconfigInaccessableError(
-                    f"Can't create directory for writing: {e}")
+                    f"Can't create directory for writing: {e}"
+                )
         try:
             with compat_open(
-                    config.path, "w+", access_permissions=0o600) as stream:
+                config.path, "w+", access_permissions=0o600
+            ) as stream:
                 ordered_yaml_dump(config.content, stream)
-        except IOError as e:
+        except OSError as e:
             raise KubeconfigInaccessableError(
-                f"Can't open kubeconfig for writing: {e}")
+                f"Can't open kubeconfig for writing: {e}"
+            )
 
 
-class KubeconfigAppender(object):
+class KubeconfigAppender:
     def insert_entry(self, config, key, new_entry):
         """
         Insert entry into the entries list at content[key]
@@ -213,42 +226,48 @@ class KubeconfigAppender(object):
         :param config: The kubeconfig to insert an entry into
         :type config: Kubeconfig
         """
-        entries=self._setdefault_existing_entries(config, key)
-        same_name_index=self._index_same_name(entries, new_entry)
+        entries = self._setdefault_existing_entries(config, key)
+        same_name_index = self._index_same_name(entries, new_entry)
         if same_name_index is None:
             entries.append(new_entry)
         else:
-            entries[same_name_index]=new_entry
+            entries[same_name_index] = new_entry
         return config
 
     def _setdefault_existing_entries(self, config, key):
-        config.content[key]=config.content.get(key) or []
-        entries=config.content[key]
+        config.content[key] = config.content.get(key) or []
+        entries = config.content[key]
         if not isinstance(entries, list):
-            raise KubeconfigError(f"Tried to insert into {key}, "
-                                  f"which is a {type(entries)} "
-                                  f"not a {list}")
+            raise KubeconfigError(
+                f"Tried to insert into {key}, "
+                f"which is a {type(entries)} "
+                f"not a {list}"
+            )
         return entries
 
     def _index_same_name(self, entries, new_entry):
         if "name" in new_entry:
-            name_to_search=new_entry["name"]
+            name_to_search = new_entry["name"]
             for i, entry in enumerate(entries):
                 if "name" in entry and entry["name"] == name_to_search:
                     return i
         return None
 
-    def _make_context(self, cluster, user, alias = None):
-        """ Generate a context to associate cluster and user with a given alias."""
-        return OrderedDict([
-            ("context", OrderedDict([
-                ("cluster", cluster["name"]),
-                ("user", user["name"])
-            ])),
-            ("name", alias or user["name"])
-        ])
+    def _make_context(self, cluster, user, alias=None):
+        """Generate a context to associate cluster and user with a given alias."""
+        return OrderedDict(
+            [
+                (
+                    "context",
+                    OrderedDict(
+                        [("cluster", cluster["name"]), ("user", user["name"])]
+                    ),
+                ),
+                ("name", alias or user["name"]),
+            ]
+        )
 
-    def insert_cluster_user_pair(self, config, cluster, user, alias = None):
+    def insert_cluster_user_pair(self, config, cluster, user, alias=None):
         """
         Insert the passed cluster entry and user entry,
         then make a context to associate them
@@ -270,11 +289,11 @@ class KubeconfigAppender(object):
         :return: The generated context
         :rtype: OrderedDict
         """
-        context=self._make_context(cluster, user, alias = alias)
+        context = self._make_context(cluster, user, alias=alias)
         self.insert_entry(config, "clusters", cluster)
         self.insert_entry(config, "users", user)
         self.insert_entry(config, "contexts", context)
 
-        config.content["current-context"]=context["name"]
+        config.content["current-context"] = context["name"]
 
         return context
diff -pruN 2.23.6-1/awscli/customizations/eks/ordered_yaml.py 2.31.35-1/awscli/customizations/eks/ordered_yaml.py
--- 2.23.6-1/awscli/customizations/eks/ordered_yaml.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/ordered_yaml.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,21 +15,25 @@ from botocore.compat import OrderedDict
 
 from awscli.utils import dump_yaml_to_str
 
+
 def _ordered_constructor(loader, node):
     loader.flatten_mapping(node)
     return OrderedDict(loader.construct_pairs(node))
 
+
 def _ordered_representer(dumper, data):
     return dumper.represent_mapping(
-        ruamel.yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
-        data.items())
+        ruamel.yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, data.items()
+    )
+
 
 def ordered_yaml_load(stream):
-    """ Load an OrderedDict object from a yaml stream."""
+    """Load an OrderedDict object from a yaml stream."""
     yaml = ruamel.yaml.YAML(typ="safe", pure=True)
     yaml.Constructor.add_constructor(
         ruamel.yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
-        _ordered_constructor)
+        _ordered_constructor,
+    )
 
     return yaml.load(stream)
 
diff -pruN 2.23.6-1/awscli/customizations/eks/update_kubeconfig.py 2.31.35-1/awscli/customizations/eks/update_kubeconfig.py
--- 2.23.6-1/awscli/customizations/eks/update_kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/eks/update_kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,11 +20,11 @@ from awscli.customizations.commands impo
 from awscli.customizations.eks.exceptions import EKSClusterError
 from awscli.customizations.eks.kubeconfig import (
     Kubeconfig,
+    KubeconfigAppender,
     KubeconfigError,
     KubeconfigLoader,
-    KubeconfigWriter,
     KubeconfigValidator,
-    KubeconfigAppender
+    KubeconfigWriter,
 )
 from awscli.customizations.eks.ordered_yaml import ordered_yaml_dump
 from awscli.customizations.utils import uni_print
@@ -37,75 +37,106 @@ DEFAULT_PATH = os.path.expanduser("~/.ku
 # this can be safely changed to default to writing "v1"
 API_VERSION = "client.authentication.k8s.io/v1beta1"
 
+
 class UpdateKubeconfigCommand(BasicCommand):
     NAME = 'update-kubeconfig'
 
     DESCRIPTION = BasicCommand.FROM_FILE(
-        'eks',
-        'update-kubeconfig',
-        '_description.rst'
+        'eks', 'update-kubeconfig', '_description.rst'
     )
 
     ARG_TABLE = [
         {
             'name': 'name',
             'dest': 'cluster_name',
-            'help_text': ("The name of the cluster for which "
-                          "to create a kubeconfig entry. "
-                          "This cluster must exist in your account and in the "
-                          "specified or configured default Region "
-                          "for your AWS CLI installation."),
-            'required': True
+            'help_text': (
+                "The name of the cluster for which "
+                "to create a kubeconfig entry. "
+                "This cluster must exist in your account and in the "
+                "specified or configured default Region "
+                "for your AWS CLI installation."
+            ),
+            'required': True,
         },
         {
             'name': 'kubeconfig',
-            'help_text': ("Optionally specify a kubeconfig file to append "
-                          "with your configuration. "
-                          "By default, the configuration is written to the "
-                          "first file path in the KUBECONFIG "
-                          "environment variable (if it is set) "
-                          "or the default kubeconfig path (.kube/config) "
-                          "in your home directory."),
-            'required': False
+            'help_text': (
+                "Optionally specify a kubeconfig file to append "
+                "with your configuration. "
+                "By default, the configuration is written to the "
+                "first file path in the KUBECONFIG "
+                "environment variable (if it is set) "
+                "or the default kubeconfig path (.kube/config) "
+                "in your home directory."
+            ),
+            'required': False,
         },
         {
             'name': 'role-arn',
-            'help_text': ("To assume a role for cluster authentication, "
-                          "specify an IAM role ARN with this option. "
-                          "For example, if you created a cluster "
-                          "while assuming an IAM role, "
-                          "then you must also assume that role to "
-                          "connect to the cluster the first time."),
-            'required': False
+            'help_text': (
+                "To assume a role for cluster authentication, "
+                "specify an IAM role ARN with this option. "
+                "For example, if you created a cluster "
+                "while assuming an IAM role, "
+                "then you must also assume that role to "
+                "connect to the cluster the first time."
+            ),
+            'required': False,
+        },
+        {
+            'name': 'proxy-url',
+            'help_text': (
+                "Optionally specify a proxy url to route "
+                "traffic via when connecting to a cluster."
+            ),
+            'required': False,
         },
         {
             'name': 'dry-run',
             'action': 'store_true',
             'default': False,
-            'help_text': ("Print the merged kubeconfig to stdout instead of "
-                          "writing it to the specified file."),
-            'required': False
+            'help_text': (
+                "Print the merged kubeconfig to stdout instead of "
+                "writing it to the specified file."
+            ),
+            'required': False,
         },
         {
             'name': 'verbose',
             'action': 'store_true',
             'default': False,
-            'help_text': ("Print more detailed output "
-                          "when writing to the kubeconfig file, "
-                          "including the appended entries.")
+            'help_text': (
+                "Print more detailed output "
+                "when writing to the kubeconfig file, "
+                "including the appended entries."
+            ),
         },
         {
             'name': 'alias',
-            'help_text': ("Alias for the cluster context name. "
-                          "Defaults to match cluster ARN."),
-            'required': False
+            'help_text': (
+                "Alias for the cluster context name. "
+                "Defaults to match cluster ARN."
+            ),
+            'required': False,
         },
         {
             'name': 'user-alias',
-            'help_text': ("Alias for the generated user name. "
-                          "Defaults to match cluster ARN."),
-            'required': False
-        }
+            'help_text': (
+                "Alias for the generated user name. "
+                "Defaults to match cluster ARN."
+            ),
+            'required': False,
+        },
+        {
+            'name': 'assume-role-arn',
+            'help_text': (
+                'To assume a role for retrieving cluster information, '
+                'specify an IAM role ARN with this option. '
+                'Use this for cross-account access to get cluster details '
+                'from the account where the cluster resides.'
+            ),
+            'required': False,
+        },
     ]
 
     def _display_entries(self, entries):
@@ -121,25 +152,25 @@ class UpdateKubeconfigCommand(BasicComma
             uni_print("\n")
 
     def _run_main(self, parsed_args, parsed_globals):
-        client = EKSClient(self._session,
-                           parsed_args=parsed_args,
-                           parsed_globals=parsed_globals)
+        client = EKSClient(
+            self._session,
+            parsed_args=parsed_args,
+            parsed_globals=parsed_globals,
+        )
         new_cluster_dict = client.get_cluster_entry()
-        new_user_dict = client.get_user_entry(user_alias=parsed_args.user_alias)
+        new_user_dict = client.get_user_entry(
+            user_alias=parsed_args.user_alias
+        )
 
         config_selector = KubeconfigSelector(
-            os.environ.get("KUBECONFIG", ""),
-            parsed_args.kubeconfig
-        )
-        config = config_selector.choose_kubeconfig(
-            new_cluster_dict["name"]
+            os.environ.get("KUBECONFIG", ""), parsed_args.kubeconfig
         )
+        config = config_selector.choose_kubeconfig(new_cluster_dict["name"])
         updating_existing = config.has_cluster(new_cluster_dict["name"])
         appender = KubeconfigAppender()
-        new_context_dict = appender.insert_cluster_user_pair(config,
-                                                             new_cluster_dict,
-                                                             new_user_dict,
-                                                             parsed_args.alias)
+        new_context_dict = appender.insert_cluster_user_pair(
+            config, new_cluster_dict, new_user_dict, parsed_args.alias
+        )
 
         if parsed_args.dry_run:
             uni_print(config.dump_content())
@@ -148,27 +179,23 @@ class UpdateKubeconfigCommand(BasicComma
             writer.write_kubeconfig(config)
 
             if updating_existing:
-                uni_print("Updated context {0} in {1}\n".format(
-                    new_context_dict["name"], config.path
-                ))
+                uni_print(
+                    f"Updated context {new_context_dict['name']} in {config.path}\n"
+                )
             else:
-                uni_print("Added new context {0} to {1}\n".format(
-                    new_context_dict["name"], config.path
-                ))
+                uni_print(
+                    f"Added new context {new_context_dict['name']} to {config.path}\n"
+                )
 
             if parsed_args.verbose:
-                self._display_entries([
-                    new_context_dict,
-                    new_user_dict,
-                    new_cluster_dict
-                ])
+                self._display_entries(
+                    [new_context_dict, new_user_dict, new_cluster_dict]
+                )
         return 0
 
 
-class KubeconfigSelector(object):
-
-    def __init__(self, env_variable, path_in, validator=None,
-                                              loader=None):
+class KubeconfigSelector:
+    def __init__(self, env_variable, path_in, validator=None, loader=None):
         """
         Parse KUBECONFIG into a list of absolute paths.
         Also replace the empty list with DEFAULT_PATH
@@ -194,9 +221,11 @@ class KubeconfigSelector(object):
             # Get the list of paths from the environment variable
             if env_variable == "":
                 env_variable = DEFAULT_PATH
-            self._paths = [self._expand_path(element)
-                           for element in env_variable.split(os.pathsep)
-                           if len(element.strip()) > 0]
+            self._paths = [
+                self._expand_path(element)
+                for element in env_variable.split(os.pathsep)
+                if len(element.strip()) > 0
+            ]
             if len(self._paths) == 0:
                 self._paths = [DEFAULT_PATH]
 
@@ -219,12 +248,10 @@ class KubeconfigSelector(object):
                 loaded_config = self._loader.load_kubeconfig(candidate_path)
 
                 if loaded_config.has_cluster(cluster_name):
-                    LOG.debug("Found entry to update at {0}".format(
-                        candidate_path
-                    ))
+                    LOG.debug("Found entry to update at %s", candidate_path)
                     return loaded_config
             except KubeconfigError as e:
-                LOG.warning("Passing {0}:{1}".format(candidate_path, e))
+                LOG.warning("Passing %s:%s", candidate_path, e)
 
         # No entry was found, use the first file in KUBECONFIG
         #
@@ -232,11 +259,11 @@ class KubeconfigSelector(object):
         return self._loader.load_kubeconfig(self._paths[0])
 
     def _expand_path(self, path):
-        """ A helper to expand a path to a full absolute path. """
+        """A helper to expand a path to a full absolute path."""
         return os.path.abspath(os.path.expanduser(path))
 
 
-class EKSClient(object):
+class EKSClient:
     def __init__(self, session, parsed_args, parsed_globals=None):
         self._session = session
         self._cluster_name = parsed_args.cluster_name
@@ -251,27 +278,46 @@ class EKSClient(object):
         Cache the response in self._cluster_description.
         describe-cluster will only be called once.
         """
-        if self._cluster_description is None:
-            if self._parsed_globals is None:
-                client = self._session.create_client("eks")
-            else:
-                client = self._session.create_client(
-                    "eks",
-                    region_name=self._parsed_globals.region,
-                    endpoint_url=self._parsed_globals.endpoint_url,
-                    verify=self._parsed_globals.verify_ssl
-                )
-            full_description = client.describe_cluster(name=self._cluster_name)
-            self._cluster_description = full_description["cluster"]
+        if self._cluster_description is not None:
+            return self._cluster_description
 
-            if "status" not in self._cluster_description:
-                raise EKSClusterError("Cluster not found")
-            if self._cluster_description["status"] not in ["ACTIVE", "UPDATING"]:
-                raise EKSClusterError("Cluster status is {0}".format(
-                    self._cluster_description["status"]
-                ))
+        client_kwargs = {}
+        if self._parsed_globals:
+            client_kwargs.update(
+                {
+                    "region_name": self._parsed_globals.region,
+                    "endpoint_url": self._parsed_globals.endpoint_url,
+                    "verify": self._parsed_globals.verify_ssl,
+                }
+            )
+
+        # Handle role assumption if needed
+        if getattr(self._parsed_args, 'assume_role_arn', None):
+            sts_client = self._session.create_client('sts')
+            credentials = sts_client.assume_role(
+                RoleArn=self._parsed_args.assume_role_arn,
+                RoleSessionName='EKSDescribeClusterSession',
+            )["Credentials"]
+
+            client_kwargs.update(
+                {
+                    "aws_access_key_id": credentials["AccessKeyId"],
+                    "aws_secret_access_key": credentials["SecretAccessKey"],
+                    "aws_session_token": credentials["SessionToken"],
+                }
+            )
+
+        client = self._session.create_client("eks", **client_kwargs)
+        full_description = client.describe_cluster(name=self._cluster_name)
+        cluster = full_description.get("cluster")
+
+        if not cluster or "status" not in cluster:
+            raise EKSClusterError("Cluster not found")
+        if cluster["status"] not in ["ACTIVE", "UPDATING"]:
+            raise EKSClusterError(f"Cluster status is {cluster['status']}")
 
-        return self._cluster_description
+        self._cluster_description = cluster
+        return cluster
 
     def get_cluster_entry(self):
         """
@@ -279,17 +325,33 @@ class EKSClient(object):
         the previously obtained description.
         """
 
-        cert_data = self.cluster_description.get("certificateAuthority", {}).get("data", "")
+        cert_data = self.cluster_description.get(
+            "certificateAuthority", {}
+        ).get("data", "")
         endpoint = self.cluster_description.get("endpoint")
         arn = self.cluster_description.get("arn")
 
-        return OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", cert_data),
-                ("server", endpoint)
-            ])),
-            ("name", arn)
-        ])
+        generated_cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", cert_data),
+                            ("server", endpoint),
+                        ]
+                    ),
+                ),
+                ("name", arn),
+            ]
+        )
+
+        if self._parsed_args.proxy_url is not None:
+            generated_cluster["cluster"]["proxy-url"] = (
+                self._parsed_args.proxy_url
+            )
+
+        return generated_cluster
 
     def get_user_entry(self, user_alias=None):
         """
@@ -307,37 +369,54 @@ class EKSClient(object):
             cluster_identification_parameter = "--cluster-id"
             cluster_identification_value = self.cluster_description.get("id")
 
-        generated_user = OrderedDict([
-            ("name", user_alias or self.cluster_description.get("arn", "")),
-            ("user", OrderedDict([
-                ("exec", OrderedDict([
-                    ("apiVersion", API_VERSION),
-                    ("args",
+        generated_user = OrderedDict(
+            [
+                (
+                    "name",
+                    user_alias or self.cluster_description.get("arn", ""),
+                ),
+                (
+                    "user",
+                    OrderedDict(
                         [
-                            "--region",
-                            region,
-                            "eks",
-                            "get-token",
-                            cluster_identification_parameter,
-                            cluster_identification_value,
-                            "--output",
-                            "json",
-                        ]),
-                    ("command", "aws"),
-                ]))
-            ]))
-        ])
+                            (
+                                "exec",
+                                OrderedDict(
+                                    [
+                                        ("apiVersion", API_VERSION),
+                                        (
+                                            "args",
+                                            [
+                                                "--region",
+                                                region,
+                                                "eks",
+                                                "get-token",
+                                                cluster_identification_parameter,
+                                                cluster_identification_value,
+                                                "--output",
+                                                "json",
+                                            ],
+                                        ),
+                                        ("command", "aws"),
+                                    ]
+                                ),
+                            )
+                        ]
+                    ),
+                ),
+            ]
+        )
 
         if self._parsed_args.role_arn is not None:
-            generated_user["user"]["exec"]["args"].extend([
-                "--role",
-                self._parsed_args.role_arn
-            ])
+            generated_user["user"]["exec"]["args"].extend(
+                ["--role", self._parsed_args.role_arn]
+            )
 
         if self._session.profile:
-            generated_user["user"]["exec"]["env"] = [OrderedDict([
-                ("name", "AWS_PROFILE"),
-                ("value", self._session.profile)
-            ])]
+            generated_user["user"]["exec"]["env"] = [
+                OrderedDict(
+                    [("name", "AWS_PROFILE"), ("value", self._session.profile)]
+                )
+            ]
 
         return generated_user
diff -pruN 2.23.6-1/awscli/customizations/emr/addinstancegroups.py 2.31.35-1/awscli/customizations/emr/addinstancegroups.py
--- 2.23.6-1/awscli/customizations/emr/addinstancegroups.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/addinstancegroups.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,12 @@
 # language governing permissions and limitations under the License.
 
 
-from awscli.customizations.emr import argumentschema
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import helptext
-from awscli.customizations.emr import instancegroupsutils
+from awscli.customizations.emr import (
+    argumentschema,
+    emrutils,
+    helptext,
+    instancegroupsutils,
+)
 from awscli.customizations.emr.command import Command
 
 
@@ -23,29 +25,46 @@ class AddInstanceGroups(Command):
     NAME = 'add-instance-groups'
     DESCRIPTION = 'Adds an instance group to a running cluster.'
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'instance-groups', 'required': True,
-         'help_text': helptext.INSTANCE_GROUPS,
-         'schema': argumentschema.INSTANCE_GROUPS_SCHEMA}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'instance-groups',
+            'required': True,
+            'help_text': helptext.INSTANCE_GROUPS,
+            'schema': argumentschema.INSTANCE_GROUPS_SCHEMA,
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         parameters = {'JobFlowId': parsed_args.cluster_id}
-        parameters['InstanceGroups'] = \
+        parameters['InstanceGroups'] = (
             instancegroupsutils.build_instance_groups(
-            parsed_args.instance_groups)
+                parsed_args.instance_groups
+            )
+        )
 
         add_instance_groups_response = emrutils.call(
-            self._session, 'add_instance_groups', parameters,
-            self.region, parsed_globals.endpoint_url,
-            parsed_globals.verify_ssl)
+            self._session,
+            'add_instance_groups',
+            parameters,
+            self.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
+        )
 
         constructed_result = self._construct_result(
-            add_instance_groups_response)
+            add_instance_groups_response
+        )
 
-        emrutils.display_response(self._session, 'add_instance_groups',
-                                  constructed_result, parsed_globals)
+        emrutils.display_response(
+            self._session,
+            'add_instance_groups',
+            constructed_result,
+            parsed_globals,
+        )
         return 0
 
     def _construct_result(self, add_instance_groups_result):
@@ -55,12 +74,15 @@ class AddInstanceGroups(Command):
         if add_instance_groups_result is not None:
             jobFlowId = add_instance_groups_result.get('JobFlowId')
             instanceGroupIds = add_instance_groups_result.get(
-                'InstanceGroupIds')
+                'InstanceGroupIds'
+            )
             clusterArn = add_instance_groups_result.get('ClusterArn')
 
         if jobFlowId is not None and instanceGroupIds is not None:
-            return {'ClusterId': jobFlowId,
-                    'InstanceGroupIds': instanceGroupIds,
-                    'ClusterArn': clusterArn}
+            return {
+                'ClusterId': jobFlowId,
+                'InstanceGroupIds': instanceGroupIds,
+                'ClusterArn': clusterArn,
+            }
         else:
             return {}
diff -pruN 2.23.6-1/awscli/customizations/emr/addsteps.py 2.31.35-1/awscli/customizations/emr/addsteps.py
--- 2.23.6-1/awscli/customizations/emr/addsteps.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/addsteps.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,50 +11,60 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import argumentschema
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import helptext
-from awscli.customizations.emr import steputils
+from awscli.customizations.emr import (
+    argumentschema,
+    emrutils,
+    helptext,
+    steputils,
+)
 from awscli.customizations.emr.command import Command
 
 
 class AddSteps(Command):
     NAME = 'add-steps'
-    DESCRIPTION = ('Add a list of steps to a cluster.')
+    DESCRIPTION = 'Add a list of steps to a cluster.'
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID
-         },
-        {'name': 'steps',
-         'required': True,
-         'nargs': '+',
-         'schema': argumentschema.STEPS_SCHEMA,
-         'help_text': helptext.STEPS
-         },
-        {'name': 'execution-role-arn',
-         'required': False,
-         'help_text': helptext.EXECUTION_ROLE_ARN
-         }
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'steps',
+            'required': True,
+            'nargs': '+',
+            'schema': argumentschema.STEPS_SCHEMA,
+            'help_text': helptext.STEPS,
+        },
+        {
+            'name': 'execution-role-arn',
+            'required': False,
+            'help_text': helptext.EXECUTION_ROLE_ARN,
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         parsed_steps = parsed_args.steps
 
         release_label = emrutils.get_release_label(
-            parsed_args.cluster_id, self._session, self.region,
-            parsed_globals.endpoint_url, parsed_globals.verify_ssl)
+            parsed_args.cluster_id,
+            self._session,
+            self.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
+        )
 
         step_list = steputils.build_step_config_list(
-            parsed_step_list=parsed_steps, region=self.region,
-            release_label=release_label)
-        parameters = {
-            'JobFlowId': parsed_args.cluster_id,
-            'Steps': step_list
-        }
+            parsed_step_list=parsed_steps,
+            region=self.region,
+            release_label=release_label,
+        )
+        parameters = {'JobFlowId': parsed_args.cluster_id, 'Steps': step_list}
 
         if parsed_args.execution_role_arn is not None:
             parameters['ExecutionRoleArn'] = parsed_args.execution_role_arn
 
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
diff -pruN 2.23.6-1/awscli/customizations/emr/addtags.py 2.31.35-1/awscli/customizations/emr/addtags.py
--- 2.23.6-1/awscli/customizations/emr/addtags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/addtags.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,13 +13,13 @@
 
 
 from awscli.arguments import CustomArgument
-from awscli.customizations.emr import helptext
-from awscli.customizations.emr import emrutils
+from awscli.customizations.emr import emrutils, helptext
 
 
 def modify_tags_argument(argument_table, **kwargs):
-    argument_table['tags'] = TagsArgument('tags', required=True,
-                                          help_text=helptext.TAGS, nargs='+')
+    argument_table['tags'] = TagsArgument(
+        'tags', required=True, help_text=helptext.TAGS, nargs='+'
+    )
 
 
 class TagsArgument(CustomArgument):
diff -pruN 2.23.6-1/awscli/customizations/emr/applicationutils.py 2.31.35-1/awscli/customizations/emr/applicationutils.py
--- 2.23.6-1/awscli/customizations/emr/applicationutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/applicationutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,14 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import constants, emrutils, exceptions
 from awscli.customizations.exceptions import ParamValidationError
 
 
-def build_applications(region,
-                       parsed_applications, ami_version=None):
+def build_applications(region, parsed_applications, ami_version=None):
     app_list = []
     step_list = []
     ba_list = []
@@ -28,38 +25,41 @@ def build_applications(region,
 
         if app_name == constants.HIVE:
             hive_version = constants.LATEST
-            step_list.append(
-                _build_install_hive_step(region=region))
+            step_list.append(_build_install_hive_step(region=region))
             args = app_config.get('Args')
             if args is not None:
                 hive_site_path = _find_matching_arg(
-                    key=constants.HIVE_SITE_KEY, args_list=args)
+                    key=constants.HIVE_SITE_KEY, args_list=args
+                )
                 if hive_site_path is not None:
                     step_list.append(
                         _build_install_hive_site_step(
-                            region=region,
-                            hive_site_path=hive_site_path))
+                            region=region, hive_site_path=hive_site_path
+                        )
+                    )
         elif app_name == constants.PIG:
             pig_version = constants.LATEST
-            step_list.append(
-                _build_pig_install_step(
-                    region=region))
+            step_list.append(_build_pig_install_step(region=region))
         elif app_name == constants.GANGLIA:
             ba_list.append(
-                _build_ganglia_install_bootstrap_action(
-                    region=region))
+                _build_ganglia_install_bootstrap_action(region=region)
+            )
         elif app_name == constants.HBASE:
             ba_list.append(
-                _build_hbase_install_bootstrap_action(
-                    region=region))
+                _build_hbase_install_bootstrap_action(region=region)
+            )
             if ami_version >= '3.0':
                 step_list.append(
                     _build_hbase_install_step(
-                        constants.HBASE_PATH_HADOOP2_INSTALL_JAR))
+                        constants.HBASE_PATH_HADOOP2_INSTALL_JAR
+                    )
+                )
             elif ami_version >= '2.1':
                 step_list.append(
                     _build_hbase_install_step(
-                        constants.HBASE_PATH_HADOOP1_INSTALL_JAR))
+                        constants.HBASE_PATH_HADOOP1_INSTALL_JAR
+                    )
+                )
             else:
                 raise ParamValidationError(
                     'aws: error: AMI version %s is not '
@@ -68,12 +68,15 @@ def build_applications(region,
         elif app_name == constants.IMPALA:
             ba_list.append(
                 _build_impala_install_bootstrap_action(
-                    region=region,
-                    args=app_config.get('Args')))
+                    region=region, args=app_config.get('Args')
+                )
+            )
         else:
             app_list.append(
                 _build_supported_product(
-                    app_config['Name'], app_config.get('Args')))
+                    app_config['Name'], app_config.get('Args')
+                )
+            )
 
     return app_list, ba_list, step_list
 
@@ -89,16 +92,18 @@ def _build_ganglia_install_bootstrap_act
     return emrutils.build_bootstrap_action(
         name=constants.INSTALL_GANGLIA_NAME,
         path=emrutils.build_s3_link(
-            relative_path=constants.GANGLIA_INSTALL_BA_PATH,
-            region=region))
+            relative_path=constants.GANGLIA_INSTALL_BA_PATH, region=region
+        ),
+    )
 
 
 def _build_hbase_install_bootstrap_action(region):
     return emrutils.build_bootstrap_action(
         name=constants.INSTALL_HBASE_NAME,
         path=emrutils.build_s3_link(
-            relative_path=constants.HBASE_INSTALL_BA_PATH,
-            region=region))
+            relative_path=constants.HBASE_INSTALL_BA_PATH, region=region
+        ),
+    )
 
 
 def _build_hbase_install_step(jar):
@@ -106,7 +111,8 @@ def _build_hbase_install_step(jar):
         jar=jar,
         name=constants.START_HBASE_NAME,
         action_on_failure=constants.TERMINATE_CLUSTER,
-        args=constants.HBASE_INSTALL_ARG)
+        args=constants.HBASE_INSTALL_ARG,
+    )
 
 
 def _build_impala_install_bootstrap_action(region, args=None):
@@ -114,37 +120,43 @@ def _build_impala_install_bootstrap_acti
         constants.BASE_PATH_ARG,
         emrutils.build_s3_link(region=region),
         constants.IMPALA_VERSION,
-        constants.LATEST]
+        constants.LATEST,
+    ]
     if args is not None:
         args_list.append(constants.IMPALA_CONF)
         args_list.append(','.join(args))
     return emrutils.build_bootstrap_action(
         name=constants.INSTALL_IMPALA_NAME,
         path=emrutils.build_s3_link(
-            relative_path=constants.IMPALA_INSTALL_PATH,
-            region=region),
-        args=args_list)
+            relative_path=constants.IMPALA_INSTALL_PATH, region=region
+        ),
+        args=args_list,
+    )
 
 
-def _build_install_hive_step(region,
-                             action_on_failure=constants.TERMINATE_CLUSTER):
+def _build_install_hive_step(
+    region, action_on_failure=constants.TERMINATE_CLUSTER
+):
     step_args = [
         emrutils.build_s3_link(constants.HIVE_SCRIPT_PATH, region),
         constants.INSTALL_HIVE_ARG,
         constants.BASE_PATH_ARG,
         emrutils.build_s3_link(constants.HIVE_BASE_PATH, region),
         constants.HIVE_VERSIONS,
-        constants.LATEST]
+        constants.LATEST,
+    ]
     step = emrutils.build_step(
         name=constants.INSTALL_HIVE_NAME,
         action_on_failure=action_on_failure,
         jar=emrutils.build_s3_link(constants.SCRIPT_RUNNER_PATH, region),
-        args=step_args)
+        args=step_args,
+    )
     return step
 
 
-def _build_install_hive_site_step(region, hive_site_path,
-                                  action_on_failure=constants.CANCEL_AND_WAIT):
+def _build_install_hive_site_step(
+    region, hive_site_path, action_on_failure=constants.CANCEL_AND_WAIT
+):
     step_args = [
         emrutils.build_s3_link(constants.HIVE_SCRIPT_PATH, region),
         constants.BASE_PATH_ARG,
@@ -152,29 +164,34 @@ def _build_install_hive_site_step(region
         constants.INSTALL_HIVE_SITE_ARG,
         hive_site_path,
         constants.HIVE_VERSIONS,
-        constants.LATEST]
+        constants.LATEST,
+    ]
     step = emrutils.build_step(
         name=constants.INSTALL_HIVE_SITE_NAME,
         action_on_failure=action_on_failure,
         jar=emrutils.build_s3_link(constants.SCRIPT_RUNNER_PATH, region),
-        args=step_args)
+        args=step_args,
+    )
     return step
 
 
-def _build_pig_install_step(region,
-                            action_on_failure=constants.TERMINATE_CLUSTER):
+def _build_pig_install_step(
+    region, action_on_failure=constants.TERMINATE_CLUSTER
+):
     step_args = [
         emrutils.build_s3_link(constants.PIG_SCRIPT_PATH, region),
         constants.INSTALL_PIG_ARG,
         constants.BASE_PATH_ARG,
         emrutils.build_s3_link(constants.PIG_BASE_PATH, region),
         constants.PIG_VERSIONS,
-        constants.LATEST]
+        constants.LATEST,
+    ]
     step = emrutils.build_step(
         name=constants.INSTALL_PIG_NAME,
         action_on_failure=action_on_failure,
         jar=emrutils.build_s3_link(constants.SCRIPT_RUNNER_PATH, region),
-        args=step_args)
+        args=step_args,
+    )
     return step
 
 
diff -pruN 2.23.6-1/awscli/customizations/emr/argumentschema.py 2.31.35-1/awscli/customizations/emr/argumentschema.py
--- 2.23.6-1/awscli/customizations/emr/argumentschema.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/argumentschema.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,15 +16,9 @@ from awscli.customizations.emr.createdef
 
 CONFIGURATIONS_PROPERTIES_SCHEMA = {
     "type": "map",
-    "key": {
-        "type": "string",
-        "description": "Configuration key"
-    },
-    "value": {
-        "type": "string",
-        "description": "Configuration value"
-    },
-    "description": "Application configuration properties"
+    "key": {"type": "string", "description": "Configuration key"},
+    "value": {"type": "string", "description": "Configuration value"},
+    "description": "Application configuration properties",
 }
 
 CONFIGURATIONS_CLASSIFICATION_SCHEMA = {
@@ -38,10 +32,10 @@ INNER_CONFIGURATIONS_SCHEMA = {
         "type": "object",
         "properties": {
             "Classification": CONFIGURATIONS_CLASSIFICATION_SCHEMA,
-            "Properties": CONFIGURATIONS_PROPERTIES_SCHEMA
-        }
+            "Properties": CONFIGURATIONS_PROPERTIES_SCHEMA,
+        },
     },
-    "description": "Instance group application configurations."
+    "description": "Instance group application configurations.",
 }
 
 OUTER_CONFIGURATIONS_SCHEMA = {
@@ -51,45 +45,48 @@ OUTER_CONFIGURATIONS_SCHEMA = {
         "properties": {
             "Classification": CONFIGURATIONS_CLASSIFICATION_SCHEMA,
             "Properties": CONFIGURATIONS_PROPERTIES_SCHEMA,
-            "Configurations": INNER_CONFIGURATIONS_SCHEMA
-        }
+            "Configurations": INNER_CONFIGURATIONS_SCHEMA,
+        },
     },
-    "description": "Instance group application configurations."
+    "description": "Instance group application configurations.",
 }
 
 ONDEMAND_CAPACITY_RESERVATION_OPTIONS_SCHEMA = {
     "type": "object",
-    "properties" : {
+    "properties": {
         "UsageStrategy": {
             "type": "string",
             "description": "The strategy of whether to use available capacity reservations to fulfill On-Demand capacity.",
-            "enum": ["use-capacity-reservations-first"]
+            "enum": ["use-capacity-reservations-first"],
         },
         "CapacityReservationPreference": {
             "type": "string",
             "description": "The preference of the capacity reservation of the instance.",
-            "enum": [
-                "open",
-                "none"
-            ]
+            "enum": ["open", "none"],
         },
         "CapacityReservationResourceGroupArn": {
             "type": "string",
-            "description": "The ARN of the capacity reservation resource group in which to run the instance."
-        }
-    }
+            "description": "The ARN of the capacity reservation resource group in which to run the instance.",
+        },
+    },
 }
 
 SPOT_ALLOCATION_STRATEGY_SCHEMA = {
     "type": "string",
     "description": "The strategy to use to launch Spot instance fleets.",
-    "enum": ["capacity-optimized", "price-capacity-optimized", "lowest-price", "diversified", "capacity-optimized-prioritized"]
+    "enum": [
+        "capacity-optimized",
+        "price-capacity-optimized",
+        "lowest-price",
+        "diversified",
+        "capacity-optimized-prioritized",
+    ],
 }
 
 ONDEMAND_ALLOCATION_STRATEGY_SCHEMA = {
     "type": "string",
     "description": "The strategy to use to launch On-Demand instance fleets.",
-    "enum": ["lowest-price", "prioritized"]
+    "enum": ["lowest-price", "prioritized"],
 }
 
 INSTANCE_GROUPS_SCHEMA = {
@@ -99,39 +96,35 @@ INSTANCE_GROUPS_SCHEMA = {
         "properties": {
             "Name": {
                 "type": "string",
-                "description":
-                    "Friendly name given to the instance group."
+                "description": "Friendly name given to the instance group.",
             },
             "InstanceGroupType": {
                 "type": "string",
-                "description":
-                    "The type of the instance group in the cluster.",
+                "description": "The type of the instance group in the cluster.",
                 "enum": ["MASTER", "CORE", "TASK"],
-                "required": True
+                "required": True,
             },
             "BidPrice": {
                 "type": "string",
-                "description":
-                    "Bid price for each Amazon EC2 instance in the "
-                    "instance group when launching nodes as Spot Instances, "
-                    "expressed in USD."
+                "description": "Bid price for each Amazon EC2 instance in the "
+                "instance group when launching nodes as Spot Instances, "
+                "expressed in USD.",
             },
             "InstanceType": {
                 "type": "string",
-                "description":
-                    "The Amazon EC2 instance type for all instances "
-                    "in the instance group.",
-                "required": True
+                "description": "The Amazon EC2 instance type for all instances "
+                "in the instance group.",
+                "required": True,
             },
             "InstanceCount": {
                 "type": "integer",
                 "description": "Target number of Amazon EC2 instances "
                 "for the instance group",
-                "required": True
+                "required": True,
             },
             "CustomAmiId": {
                 "type": "string",
-                "description": "The AMI ID of a custom AMI to use when Amazon EMR provisions EC2 instances."
+                "description": "The AMI ID of a custom AMI to use when Amazon EMR provisions EC2 instances.",
             },
             "EbsConfiguration": {
                 "type": "object",
@@ -146,19 +139,19 @@ INSTANCE_GROUPS_SCHEMA = {
                         "items": {
                             "type": "object",
                             "properties": {
-                                "VolumeSpecification" : {
+                                "VolumeSpecification": {
                                     "type": "object",
                                     "description": "The EBS volume specification that will be created and attached to every instance in this instance group.",
                                     "properties": {
                                         "VolumeType": {
                                             "type": "string",
                                             "description": "The EBS volume type that is attached to all the instances in the instance group. Valid types are: gp2, io1, and standard.",
-                                            "required": True
+                                            "required": True,
                                         },
                                         "SizeInGB": {
                                             "type": "integer",
                                             "description": "The EBS volume size, in GB, that is attached to all the instances in the instance group.",
-                                            "required": True
+                                            "required": True,
                                         },
                                         "Iops": {
                                             "type": "integer",
@@ -167,17 +160,17 @@ INSTANCE_GROUPS_SCHEMA = {
                                         "Throughput": {
                                             "type": "integer",
                                             "description": "The throughput of the EBS volume that is attached to all the instances in the instance group.",
-                                        }
-                                    }
+                                        },
+                                    },
                                 },
                                 "VolumesPerInstance": {
                                     "type": "integer",
                                     "description": "The number of EBS volumes that will be created and attached to each instance in the instance group.",
-                                }
-                            }
-                        }
-                    }
-                }
+                                },
+                            },
+                        },
+                    },
+                },
             },
             "AutoScalingPolicy": {
                 "type": "object",
@@ -190,14 +183,14 @@ INSTANCE_GROUPS_SCHEMA = {
                             "MinCapacity": {
                                 "type": "integer",
                                 "description": "The minimum value for the instances to scale in"
-                                               " to in response to scaling activities."
+                                " to in response to scaling activities.",
                             },
                             "MaxCapacity": {
                                 "type": "integer",
                                 "description": "The maximum value for the instances to scale out to in response"
-                                               " to scaling activities"
-                            }
-                        }
+                                " to scaling activities",
+                            },
+                        },
                     },
                     "Rules": {
                         "type": "array",
@@ -207,11 +200,11 @@ INSTANCE_GROUPS_SCHEMA = {
                             "properties": {
                                 "Name": {
                                     "type": "string",
-                                    "description": "Name of the Auto Scaling rule."
+                                    "description": "Name of the Auto Scaling rule.",
                                 },
                                 "Description": {
                                     "type": "string",
-                                    "description": "Description of the Auto Scaling rule."
+                                    "description": "Description of the Auto Scaling rule.",
                                 },
                                 "Action": {
                                     "type": "object",
@@ -220,35 +213,38 @@ INSTANCE_GROUPS_SCHEMA = {
                                         "Market": {  # Required for Instance Fleets
                                             "type": "string",
                                             "description": "Market type of the Amazon EC2 instances used to create a "
-                                                           "cluster node by Auto Scaling action.",
-                                            "enum": ["ON_DEMAND", "SPOT"]
+                                            "cluster node by Auto Scaling action.",
+                                            "enum": ["ON_DEMAND", "SPOT"],
                                         },
                                         "SimpleScalingPolicyConfiguration": {
                                             "type": "object",
                                             "description": "The Simple scaling configuration that will be associated"
-                                                           "to Auto Scaling action.",
+                                            "to Auto Scaling action.",
                                             "properties": {
                                                 "AdjustmentType": {
                                                     "type": "string",
                                                     "description": "Specifies how the ScalingAdjustment parameter is "
-                                                                   "interpreted.",
-                                                    "enum": ["CHANGE_IN_CAPACITY", "PERCENT_CHANGE_IN_CAPACITY",
-                                                             "EXACT_CAPACITY"]
+                                                    "interpreted.",
+                                                    "enum": [
+                                                        "CHANGE_IN_CAPACITY",
+                                                        "PERCENT_CHANGE_IN_CAPACITY",
+                                                        "EXACT_CAPACITY",
+                                                    ],
                                                 },
                                                 "ScalingAdjustment": {
                                                     "type": "integer",
                                                     "description": "The amount by which to scale, based on the "
-                                                                   "specified adjustment type."
+                                                    "specified adjustment type.",
                                                 },
                                                 "CoolDown": {
                                                     "type": "integer",
                                                     "description": "The amount of time, in seconds, after a scaling "
-                                                                   "activity completes and before the next scaling "
-                                                                   "activity can start."
-                                                }
-                                            }
-                                        }
-                                    }
+                                                    "activity completes and before the next scaling "
+                                                    "activity can start.",
+                                                },
+                                            },
+                                        },
+                                    },
                                 },
                                 "Trigger": {
                                     "type": "object",
@@ -257,44 +253,44 @@ INSTANCE_GROUPS_SCHEMA = {
                                         "CloudWatchAlarmDefinition": {
                                             "type": "object",
                                             "description": "The Alarm to be registered with CloudWatch, to trigger"
-                                                           " scaling activities.",
+                                            " scaling activities.",
                                             "properties": {
                                                 "ComparisonOperator": {
                                                     "type": "string",
                                                     "description": "The arithmetic operation to use when comparing the"
-                                                                   " specified Statistic and Threshold."
+                                                    " specified Statistic and Threshold.",
                                                 },
                                                 "EvaluationPeriods": {
                                                     "type": "integer",
                                                     "description": "The number of periods over which data is compared"
-                                                                   " to the specified threshold."
+                                                    " to the specified threshold.",
                                                 },
                                                 "MetricName": {
                                                     "type": "string",
-                                                    "description": "The name for the alarm's associated metric."
+                                                    "description": "The name for the alarm's associated metric.",
                                                 },
                                                 "Namespace": {
                                                     "type": "string",
-                                                    "description": "The namespace for the alarm's associated metric."
+                                                    "description": "The namespace for the alarm's associated metric.",
                                                 },
                                                 "Period": {
                                                     "type": "integer",
                                                     "description": "The period in seconds over which the specified "
-                                                                   "statistic is applied."
+                                                    "statistic is applied.",
                                                 },
                                                 "Statistic": {
                                                     "type": "string",
                                                     "description": "The statistic to apply to the alarm's associated "
-                                                                   "metric."
+                                                    "metric.",
                                                 },
                                                 "Threshold": {
                                                     "type": "double",
                                                     "description": "The value against which the specified statistic is "
-                                                                   "compared."
+                                                    "compared.",
                                                 },
                                                 "Unit": {
                                                     "type": "string",
-                                                    "description": "The statistic's unit of measure."
+                                                    "description": "The statistic's unit of measure.",
                                                 },
                                                 "Dimensions": {
                                                     "type": "array",
@@ -304,27 +300,27 @@ INSTANCE_GROUPS_SCHEMA = {
                                                         "properties": {
                                                             "Key": {
                                                                 "type": "string",
-                                                                "description": "Dimension Key."
+                                                                "description": "Dimension Key.",
                                                             },
                                                             "Value": {
                                                                 "type": "string",
-                                                                "description": "Dimension Value."
-                                                            }
-                                                        }
-                                                    }
-                                                }
-                                            }
+                                                                "description": "Dimension Value.",
+                                                            },
+                                                        },
+                                                    },
+                                                },
+                                            },
                                         }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
+                                    },
+                                },
+                            },
+                        },
+                    },
+                },
             },
-            "Configurations": OUTER_CONFIGURATIONS_SCHEMA
-        }
-    }
+            "Configurations": OUTER_CONFIGURATIONS_SCHEMA,
+        },
+    },
 }
 
 INSTANCE_FLEETS_SCHEMA = {
@@ -334,21 +330,21 @@ INSTANCE_FLEETS_SCHEMA = {
         "properties": {
             "Name": {
                 "type": "string",
-                "description": "Friendly name given to the instance fleet."
+                "description": "Friendly name given to the instance fleet.",
             },
             "InstanceFleetType": {
                 "type": "string",
                 "description": "The type of the instance fleet in the cluster.",
                 "enum": ["MASTER", "CORE", "TASK"],
-                "required": True
+                "required": True,
             },
             "TargetOnDemandCapacity": {
                 "type": "integer",
-                "description": "Target on-demand capacity for the instance fleet."
+                "description": "Target on-demand capacity for the instance fleet.",
             },
             "TargetSpotCapacity": {
                 "type": "integer",
-                "description": "Target spot capacity for the instance fleet."
+                "description": "Target spot capacity for the instance fleet.",
             },
             "InstanceTypeConfigs": {
                 "type": "array",
@@ -358,30 +354,30 @@ INSTANCE_FLEETS_SCHEMA = {
                         "InstanceType": {
                             "type": "string",
                             "description": "The Amazon EC2 instance type for the instance fleet.",
-                            "required": True
+                            "required": True,
                         },
                         "WeightedCapacity": {
                             "type": "integer",
-                            "description": "The weight assigned to an instance type, which will impact the overall fulfillment of the capacity."
+                            "description": "The weight assigned to an instance type, which will impact the overall fulfillment of the capacity.",
                         },
                         "BidPrice": {
                             "type": "string",
                             "description": "Bid price for each Amazon EC2 instance in the "
-                                "instance fleet when launching nodes as Spot Instances, "
-                                "expressed in USD."
+                            "instance fleet when launching nodes as Spot Instances, "
+                            "expressed in USD.",
                         },
                         "BidPriceAsPercentageOfOnDemandPrice": {
                             "type": "double",
-                            "description": "Bid price as percentage of on-demand price."
+                            "description": "Bid price as percentage of on-demand price.",
                         },
                         "CustomAmiId": {
                             "type": "string",
-                            "description": "The AMI ID of a custom AMI to use when Amazon EMR provisions EC2 instances."
+                            "description": "The AMI ID of a custom AMI to use when Amazon EMR provisions EC2 instances.",
                         },
                         "Priority": {
                             "type": "double",
                             "description": "The priority at which Amazon EMR launches the EC2 instances with this instance type. "
-                                "Priority starts at 0, which is the highest priority. Amazon EMR considers the highest priority first."
+                            "Priority starts at 0, which is the highest priority. Amazon EMR considers the highest priority first.",
                         },
                         "EbsConfiguration": {
                             "type": "object",
@@ -396,83 +392,83 @@ INSTANCE_FLEETS_SCHEMA = {
                                     "items": {
                                         "type": "object",
                                         "properties": {
-                                            "VolumeSpecification" : {
+                                            "VolumeSpecification": {
                                                 "type": "object",
                                                 "description": "The EBS volume specification that is created "
-                                                    "and attached to each instance in the instance group.",
+                                                "and attached to each instance in the instance group.",
                                                 "properties": {
                                                     "VolumeType": {
                                                         "type": "string",
                                                         "description": "The EBS volume type that is attached to all "
-                                                            "the instances in the instance group. Valid types are: "
-                                                            "gp2, io1, and standard.",
-                                                            "required": True
+                                                        "the instances in the instance group. Valid types are: "
+                                                        "gp2, io1, and standard.",
+                                                        "required": True,
                                                     },
                                                     "SizeInGB": {
                                                         "type": "integer",
                                                         "description": "The EBS volume size, in GB, that is attached "
-                                                            "to all the instances in the instance group.",
-                                                        "required": True
+                                                        "to all the instances in the instance group.",
+                                                        "required": True,
                                                     },
                                                     "Iops": {
                                                         "type": "integer",
                                                         "description": "The IOPS of the EBS volume that is attached to "
-                                                            "all the instances in the instance group.",
+                                                        "all the instances in the instance group.",
                                                     },
                                                     "Throughput": {
-                                                         "type": "integer",
-                                                         "description": "The throughput of the EBS volume that is attached to "
-                                                             "all the instances in the instance group.",
-                                                    }
-                                                }
+                                                        "type": "integer",
+                                                        "description": "The throughput of the EBS volume that is attached to "
+                                                        "all the instances in the instance group.",
+                                                    },
+                                                },
                                             },
                                             "VolumesPerInstance": {
                                                 "type": "integer",
                                                 "description": "The number of EBS volumes that will be created and "
-                                                    "attached to each instance in the instance group.",
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        "Configurations": OUTER_CONFIGURATIONS_SCHEMA
-                    }
-                }
+                                                "attached to each instance in the instance group.",
+                                            },
+                                        },
+                                    },
+                                },
+                            },
+                        },
+                        "Configurations": OUTER_CONFIGURATIONS_SCHEMA,
+                    },
+                },
             },
             "LaunchSpecifications": {
                 "type": "object",
-                "properties" : {
+                "properties": {
                     "OnDemandSpecification": {
                         "type": "object",
                         "properties": {
                             "AllocationStrategy": ONDEMAND_ALLOCATION_STRATEGY_SCHEMA,
-                            "CapacityReservationOptions": ONDEMAND_CAPACITY_RESERVATION_OPTIONS_SCHEMA
-                        }
+                            "CapacityReservationOptions": ONDEMAND_CAPACITY_RESERVATION_OPTIONS_SCHEMA,
+                        },
                     },
                     "SpotSpecification": {
                         "type": "object",
                         "properties": {
                             "TimeoutDurationMinutes": {
                                 "type": "integer",
-                                "description": "The time, in minutes, after which the action specified in TimeoutAction field will be performed if requested resources are unavailable."
+                                "description": "The time, in minutes, after which the action specified in TimeoutAction field will be performed if requested resources are unavailable.",
                             },
                             "TimeoutAction": {
                                 "type": "string",
                                 "description": "The action that is performed after TimeoutDurationMinutes.",
                                 "enum": [
                                     "TERMINATE_CLUSTER",
-                                    "SWITCH_TO_ONDEMAND"
-                                ]
+                                    "SWITCH_TO_ONDEMAND",
+                                ],
                             },
                             "BlockDurationMinutes": {
                                 "type": "integer",
-                                "description": "Block duration in minutes."
+                                "description": "Block duration in minutes.",
                             },
-                            "AllocationStrategy": SPOT_ALLOCATION_STRATEGY_SCHEMA
-                        }
-                    }
-                }
+                            "AllocationStrategy": SPOT_ALLOCATION_STRATEGY_SCHEMA,
+                        },
+                    },
+                },
             },
             "ResizeSpecifications": {
                 "type": "object",
@@ -481,31 +477,28 @@ INSTANCE_FLEETS_SCHEMA = {
                         "type": "object",
                         "properties": {
                             "TimeoutDurationMinutes": {
-                                "type" : "integer",
-                                "description": "The time, in minutes, after which the resize will be stopped if requested resources are unavailable."
+                                "type": "integer",
+                                "description": "The time, in minutes, after which the resize will be stopped if requested resources are unavailable.",
                             },
-                            "AllocationStrategy": SPOT_ALLOCATION_STRATEGY_SCHEMA
-                        }
+                            "AllocationStrategy": SPOT_ALLOCATION_STRATEGY_SCHEMA,
+                        },
                     },
                     "OnDemandResizeSpecification": {
                         "type": "object",
                         "properties": {
                             "TimeoutDurationMinutes": {
-                                "type" : "integer",
-                                "description": "The time, in minutes, after which the resize will be stopped if requested resources are unavailable."
+                                "type": "integer",
+                                "description": "The time, in minutes, after which the resize will be stopped if requested resources are unavailable.",
                             },
                             "AllocationStrategy": ONDEMAND_ALLOCATION_STRATEGY_SCHEMA,
-                            "CapacityReservationOptions": ONDEMAND_CAPACITY_RESERVATION_OPTIONS_SCHEMA
-                        }
-                    }
-                }
+                            "CapacityReservationOptions": ONDEMAND_CAPACITY_RESERVATION_OPTIONS_SCHEMA,
+                        },
+                    },
+                },
             },
-            "Context": {
-                "type": "string",
-                "description": "Reserved."
-            }
-        }
-    }
+            "Context": {"type": "string", "description": "Reserved."},
+        },
+    },
 }
 
 EC2_ATTRIBUTES_SCHEMA = {
@@ -513,75 +506,64 @@ EC2_ATTRIBUTES_SCHEMA = {
     "properties": {
         "KeyName": {
             "type": "string",
-            "description":
-                "The name of the Amazon EC2 key pair that can "
-                "be used to ssh to the master node as the user 'hadoop'."
+            "description": "The name of the Amazon EC2 key pair that can "
+            "be used to ssh to the master node as the user 'hadoop'.",
         },
         "SubnetId": {
             "type": "string",
-            "description":
-                "To launch the cluster in Amazon "
-                "Virtual Private Cloud (Amazon VPC), set this parameter to "
-                "the identifier of the Amazon VPC subnet where you want "
-                "the cluster to launch. If you do not specify this value, "
-                "the cluster is launched in the normal Amazon Web Services "
-                "cloud, outside of an Amazon VPC. "
+            "description": "To launch the cluster in Amazon "
+            "Virtual Private Cloud (Amazon VPC), set this parameter to "
+            "the identifier of the Amazon VPC subnet where you want "
+            "the cluster to launch. If you do not specify this value, "
+            "the cluster is launched in the normal Amazon Web Services "
+            "cloud, outside of an Amazon VPC. ",
         },
         "SubnetIds": {
             "type": "array",
-            "description":
-                "List of SubnetIds.",
-            "items": {
-                "type": "string"
-            }
+            "description": "List of SubnetIds.",
+            "items": {"type": "string"},
         },
         "AvailabilityZone": {
             "type": "string",
-            "description": "The Availability Zone the cluster will run in."
+            "description": "The Availability Zone the cluster will run in.",
         },
         "AvailabilityZones": {
             "type": "array",
             "description": "List of AvailabilityZones.",
-            "items": {
-                "type": "string"
-            }
+            "items": {"type": "string"},
         },
         "InstanceProfile": {
             "type": "string",
-            "description":
-                "An IAM role for the cluster. The EC2 instances of the cluster"
-                " assume this role. The default role is " +
-                EC2_ROLE_NAME + ". In order to use the default"
-                " role, you must have already created it using the "
-                "<code>create-default-roles</code> command. "
+            "description": "An IAM role for the cluster. The EC2 instances of the cluster"
+            " assume this role. The default role is "
+            + EC2_ROLE_NAME
+            + ". In order to use the default"
+            " role, you must have already created it using the "
+            "<code>create-default-roles</code> command. ",
         },
         "EmrManagedMasterSecurityGroup": {
             "type": "string",
-            "description": helptext.EMR_MANAGED_MASTER_SECURITY_GROUP
+            "description": helptext.EMR_MANAGED_MASTER_SECURITY_GROUP,
         },
         "EmrManagedSlaveSecurityGroup": {
             "type": "string",
-            "description": helptext.EMR_MANAGED_SLAVE_SECURITY_GROUP
+            "description": helptext.EMR_MANAGED_SLAVE_SECURITY_GROUP,
         },
         "ServiceAccessSecurityGroup": {
             "type": "string",
-            "description": helptext.SERVICE_ACCESS_SECURITY_GROUP
+            "description": helptext.SERVICE_ACCESS_SECURITY_GROUP,
         },
         "AdditionalMasterSecurityGroups": {
             "type": "array",
             "description": helptext.ADDITIONAL_MASTER_SECURITY_GROUPS,
-            "items": {
-                "type": "string"
-            }
+            "items": {"type": "string"},
         },
         "AdditionalSlaveSecurityGroups": {
             "type": "array",
             "description": helptext.ADDITIONAL_SLAVE_SECURITY_GROUPS,
-            "items": {
-                "type": "string"
-            }
-        }
-    }
+            "items": {"type": "string"},
+        },
+    },
 }
 
 
@@ -593,20 +575,26 @@ APPLICATIONS_SCHEMA = {
             "Name": {
                 "type": "string",
                 "description": "Application name.",
-                "enum": ["MapR", "HUE", "HIVE", "PIG", "HBASE",
-                         "IMPALA", "GANGLIA", "HADOOP", "SPARK"],
-                "required": True
+                "enum": [
+                    "MapR",
+                    "HUE",
+                    "HIVE",
+                    "PIG",
+                    "HBASE",
+                    "IMPALA",
+                    "GANGLIA",
+                    "HADOOP",
+                    "SPARK",
+                ],
+                "required": True,
             },
             "Args": {
                 "type": "array",
-                "description":
-                    "A list of arguments to pass to the application.",
-                "items": {
-                    "type": "string"
-                }
-            }
-        }
-    }
+                "description": "A list of arguments to pass to the application.",
+                "items": {"type": "string"},
+            },
+        },
+    },
 }
 
 BOOTSTRAP_ACTIONS_SCHEMA = {
@@ -614,29 +602,22 @@ BOOTSTRAP_ACTIONS_SCHEMA = {
     "items": {
         "type": "object",
         "properties": {
-            "Name": {
-                "type": "string",
-                "default": "Bootstrap Action"
-            },
+            "Name": {"type": "string", "default": "Bootstrap Action"},
             "Path": {
                 "type": "string",
-                "description":
-                    "Location of the script to run during a bootstrap action. "
-                    "Can be either a location in Amazon S3 or "
-                    "on a local file system.",
-                "required": True
+                "description": "Location of the script to run during a bootstrap action. "
+                "Can be either a location in Amazon S3 or "
+                "on a local file system.",
+                "required": True,
             },
             "Args": {
                 "type": "array",
-                "description":
-                    "A list of command line arguments to pass to "
-                    "the bootstrap action script",
-                "items": {
-                    "type": "string"
-                }
-            }
-        }
-    }
+                "description": "A list of command line arguments to pass to "
+                "the bootstrap action script",
+                "items": {"type": "string"},
+            },
+        },
+    },
 }
 
 
@@ -647,8 +628,7 @@ STEPS_SCHEMA = {
         "properties": {
             "Type": {
                 "type": "string",
-                "description":
-                    "The type of a step to be added to the cluster.",
+                "description": "The type of a step to be added to the cluster.",
                 "default": "custom_jar",
                 "enum": ["CUSTOM_JAR", "STREAMING", "HIVE", "PIG", "IMPALA"],
             },
@@ -660,7 +640,7 @@ STEPS_SCHEMA = {
                 "type": "string",
                 "description": "The action to take if the cluster step fails.",
                 "enum": ["TERMINATE_CLUSTER", "CANCEL_AND_WAIT", "CONTINUE"],
-                "default": "CONTINUE"
+                "default": "CONTINUE",
             },
             "Jar": {
                 "type": "string",
@@ -668,42 +648,34 @@ STEPS_SCHEMA = {
             },
             "Args": {
                 "type": "array",
-                "description":
-                    "A list of command line arguments to pass to the step.",
-                "items": {
-                        "type": "string"
-                }
+                "description": "A list of command line arguments to pass to the step.",
+                "items": {"type": "string"},
             },
             "MainClass": {
                 "type": "string",
-                "description":
-                    "The name of the main class in the specified "
-                    "Java file. If not specified, the JAR file should "
-                    "specify a Main-Class in its manifest file."
+                "description": "The name of the main class in the specified "
+                "Java file. If not specified, the JAR file should "
+                "specify a Main-Class in its manifest file.",
             },
             "Properties": {
                 "type": "string",
-                "description":
-                    "A list of Java properties that are set when the step "
-                    "runs. You can use these properties to pass key value "
-                    "pairs to your main function."
-            }
-        }
-    }
+                "description": "A list of Java properties that are set when the step "
+                "runs. You can use these properties to pass key value "
+                "pairs to your main function.",
+            },
+        },
+    },
 }
 
 HBASE_RESTORE_FROM_BACKUP_SCHEMA = {
     "type": "object",
     "properties": {
-        "Dir": {
-            "type": "string",
-            "description": helptext.HBASE_BACKUP_DIR
-        },
+        "Dir": {"type": "string", "description": helptext.HBASE_BACKUP_DIR},
         "BackupVersion": {
             "type": "string",
-            "description": helptext.HBASE_BACKUP_VERSION
-        }
-    }
+            "description": helptext.HBASE_BACKUP_VERSION,
+        },
+    },
 }
 
 EMR_FS_SCHEMA = {
@@ -711,41 +683,38 @@ EMR_FS_SCHEMA = {
     "properties": {
         "Consistent": {
             "type": "boolean",
-            "description": "Enable EMRFS consistent view."
+            "description": "Enable EMRFS consistent view.",
         },
         "SSE": {
             "type": "boolean",
             "description": "Enable Amazon S3 server-side encryption on files "
-                           "written to S3 by EMRFS."
+            "written to S3 by EMRFS.",
         },
         "RetryCount": {
             "type": "integer",
-            "description":
-                "The maximum number of times to retry upon S3 inconsistency."
+            "description": "The maximum number of times to retry upon S3 inconsistency.",
         },
         "RetryPeriod": {
             "type": "integer",
             "description": "The amount of time (in seconds) until the first "
-                           "retry. Subsequent retries use an exponential "
-                           "back-off."
+            "retry. Subsequent retries use an exponential "
+            "back-off.",
         },
         "Args": {
             "type": "array",
             "description": "A list of arguments to pass for additional "
-                           "EMRFS configuration.",
-            "items": {
-                "type": "string"
-            }
+            "EMRFS configuration.",
+            "items": {"type": "string"},
         },
         "Encryption": {
             "type": "string",
             "description": "EMRFS encryption type.",
-            "enum": ["SERVERSIDE", "CLIENTSIDE"]
+            "enum": ["SERVERSIDE", "CLIENTSIDE"],
         },
         "ProviderType": {
             "type": "string",
             "description": "EMRFS client-side encryption provider type.",
-            "enum": ["KMS", "CUSTOM"]
+            "enum": ["KMS", "CUSTOM"],
         },
         "KMSKeyId": {
             "type": "string",
@@ -753,46 +722,41 @@ EMR_FS_SCHEMA = {
         },
         "CustomProviderLocation": {
             "type": "string",
-            "description": "Custom encryption provider JAR location."
+            "description": "Custom encryption provider JAR location.",
         },
         "CustomProviderClass": {
             "type": "string",
-            "description": "Custom encryption provider full class name."
-        }
-    }
+            "description": "Custom encryption provider full class name.",
+        },
+    },
 }
 
-TAGS_SCHEMA = {
-    "type": "array",
-    "items": {
-        "type": "string"
-    }
-}
+TAGS_SCHEMA = {"type": "array", "items": {"type": "string"}}
 
 KERBEROS_ATTRIBUTES_SCHEMA = {
     "type": "object",
     "properties": {
         "Realm": {
             "type": "string",
-            "description": "The name of Kerberos realm."
+            "description": "The name of Kerberos realm.",
         },
         "KdcAdminPassword": {
             "type": "string",
-            "description": "The password of Kerberos administrator."
+            "description": "The password of Kerberos administrator.",
         },
         "CrossRealmTrustPrincipalPassword": {
             "type": "string",
-            "description": "The password to establish cross-realm trusts."
+            "description": "The password to establish cross-realm trusts.",
         },
         "ADDomainJoinUser": {
             "type": "string",
-            "description": "The name of the user with privileges to join instances to Active Directory."
+            "description": "The name of the user with privileges to join instances to Active Directory.",
         },
         "ADDomainJoinPassword": {
             "type": "string",
-            "description": "The password of the user with privileges to join instances to Active Directory."
-        }
-    }
+            "description": "The password of the user with privileges to join instances to Active Directory.",
+        },
+    },
 }
 
 MANAGED_SCALING_POLICY_SCHEMA = {
@@ -800,73 +764,66 @@ MANAGED_SCALING_POLICY_SCHEMA = {
     "properties": {
         "ComputeLimits": {
             "type": "object",
-            "description": 
-                "The EC2 unit limits for a managed scaling policy. "
-                "The managed scaling activity of a cluster is not allowed to go above "
-                "or below these limits. The limits apply to CORE and TASK groups "
-                "and exclude the capacity of the MASTER group.",
+            "description": "The EC2 unit limits for a managed scaling policy. "
+            "The managed scaling activity of a cluster is not allowed to go above "
+            "or below these limits. The limits apply to CORE and TASK groups "
+            "and exclude the capacity of the MASTER group.",
             "properties": {
-               "MinimumCapacityUnits": {
-                  "type": "integer",
-                  "description": 
-                      "The lower boundary of EC2 units. It is measured through "
-                      "VCPU cores or instances for instance groups and measured "
-                      "through units for instance fleets. Managed scaling "
-                      "activities are not allowed beyond this boundary.",
-                  "required": True
-               },
-               "MaximumCapacityUnits": {
-                  "type": "integer",
-                  "description": 
-                      "The upper boundary of EC2 units. It is measured through "
-                      "VCPU cores or instances for instance groups and measured "
-                      "through units for instance fleets. Managed scaling "
-                      "activities are not allowed beyond this boundary.",
-                  "required": True
-               },
-               "MaximumOnDemandCapacityUnits": {
-                  "type": "integer",
-                  "description": 
-                      "The upper boundary of on-demand EC2 units. It is measured through "
-                      "VCPU cores or instances for instance groups and measured "
-                      "through units for instance fleets. The on-demand units are not "
-                      "allowed to scale beyond this boundary. "
-                      "This value must be lower than MaximumCapacityUnits."
-               },
-               "UnitType": {
-                  "type": "string",
-                  "description": "The unit type used for specifying a managed scaling policy.",
-                  "enum": ["VCPU", "Instances", "InstanceFleetUnits"],
-                  "required": True
-               },
-               "MaximumCoreCapacityUnits": {
-                  "type": "integer",
-                  "description":
-                      "The upper boundary of EC2 units for core node type in a cluster. "
-                      "It is measured through VCPU cores or instances for instance groups "
-                      "and measured through units for instance fleets. "
-                      "The core units are not allowed to scale beyond this boundary. "
-                      "The parameter is used to split capacity allocation between core and task nodes."
-               }
-            } 
+                "MinimumCapacityUnits": {
+                    "type": "integer",
+                    "description": "The lower boundary of EC2 units. It is measured through "
+                    "VCPU cores or instances for instance groups and measured "
+                    "through units for instance fleets. Managed scaling "
+                    "activities are not allowed beyond this boundary.",
+                    "required": True,
+                },
+                "MaximumCapacityUnits": {
+                    "type": "integer",
+                    "description": "The upper boundary of EC2 units. It is measured through "
+                    "VCPU cores or instances for instance groups and measured "
+                    "through units for instance fleets. Managed scaling "
+                    "activities are not allowed beyond this boundary.",
+                    "required": True,
+                },
+                "MaximumOnDemandCapacityUnits": {
+                    "type": "integer",
+                    "description": "The upper boundary of on-demand EC2 units. It is measured through "
+                    "VCPU cores or instances for instance groups and measured "
+                    "through units for instance fleets. The on-demand units are not "
+                    "allowed to scale beyond this boundary. "
+                    "This value must be lower than MaximumCapacityUnits.",
+                },
+                "UnitType": {
+                    "type": "string",
+                    "description": "The unit type used for specifying a managed scaling policy.",
+                    "enum": ["VCPU", "Instances", "InstanceFleetUnits"],
+                    "required": True,
+                },
+                "MaximumCoreCapacityUnits": {
+                    "type": "integer",
+                    "description": "The upper boundary of EC2 units for core node type in a cluster. "
+                    "It is measured through VCPU cores or instances for instance groups "
+                    "and measured through units for instance fleets. "
+                    "The core units are not allowed to scale beyond this boundary. "
+                    "The parameter is used to split capacity allocation between core and task nodes.",
+                },
+            },
         },
         "ScalingStrategy": {
             "type": "string",
             "enum": ["DEFAULT", "ADVANCED"],
-            "description":
-                      "Determines whether a custom scaling utilization performance index can be set. "
-                      "Possible values include ADVANCED or DEFAULT."
+            "description": "Determines whether a custom scaling utilization performance index can be set. "
+            "Possible values include ADVANCED or DEFAULT.",
         },
         "UtilizationPerformanceIndex": {
             "type": "integer",
-            "description":
-                      "An integer value that represents an advanced scaling strategy. "
-                      "Setting a higher value optimizes for performance. "
-                      "Setting a lower value optimizes for resource conservation. "
-                      "Setting the value to 50 balances performance and resource conservation. "
-                      "Possible values are 1, 25, 50, 75, and 100."
-        }
-    }
+            "description": "An integer value that represents an advanced scaling strategy. "
+            "Setting a higher value optimizes for performance. "
+            "Setting a lower value optimizes for resource conservation. "
+            "Setting the value to 50 balances performance and resource conservation. "
+            "Possible values are 1, 25, 50, 75, and 100.",
+        },
+    },
 }
 
 PLACEMENT_GROUP_CONFIGS_SCHEMA = {
@@ -878,26 +835,25 @@ PLACEMENT_GROUP_CONFIGS_SCHEMA = {
                 "type": "string",
                 "description": "Role of the instance in the cluster.",
                 "enum": ["MASTER", "CORE", "TASK"],
-                "required": True
+                "required": True,
             },
             "PlacementStrategy": {
                 "type": "string",
                 "description": "EC2 Placement Group strategy associated "
-                               "with instance role.",
-                "enum": ["SPREAD", "PARTITION", "CLUSTER", "NONE"]
-            }
-        }
-    }
+                "with instance role.",
+                "enum": ["SPREAD", "PARTITION", "CLUSTER", "NONE"],
+            },
+        },
+    },
 }
 
 AUTO_TERMINATION_POLICY_SCHEMA = {
     "type": "object",
-    "properties":  {
+    "properties": {
         "IdleTimeout": {
             "type": "long",
-            "description":
-                "Specifies the amount of idle time in seconds after which the cluster automatically terminates. "
-                "You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days).",
+            "description": "Specifies the amount of idle time in seconds after which the cluster automatically terminates. "
+            "You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days).",
         }
-    }
+    },
 }
diff -pruN 2.23.6-1/awscli/customizations/emr/command.py 2.31.35-1/awscli/customizations/emr/command.py
--- 2.23.6-1/awscli/customizations/emr/command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/command.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,11 +12,9 @@
 # language governing permissions and limitations under the License.
 
 import logging
+
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.emr import config
-from awscli.customizations.emr import configutils
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import config, configutils, emrutils, exceptions
 
 LOG = logging.getLogger(__name__)
 
@@ -24,36 +22,42 @@ LOG = logging.getLogger(__name__)
 class Command(BasicCommand):
     region = None
 
-    UNSUPPORTED_COMMANDS_FOR_RELEASE_BASED_CLUSTERS = set([
-        'install-applications',
-        'restore-from-hbase-backup',
-        'schedule-hbase-backup',
-        'create-hbase-backup',
-        'disable-hbase-backups',
-    ])
+    UNSUPPORTED_COMMANDS_FOR_RELEASE_BASED_CLUSTERS = set(
+        [
+            'install-applications',
+            'restore-from-hbase-backup',
+            'schedule-hbase-backup',
+            'create-hbase-backup',
+            'disable-hbase-backups',
+        ]
+    )
 
     def supports_arg(self, name):
-        return any((x['name'] == name for x in self.ARG_TABLE))
+        return any(x['name'] == name for x in self.ARG_TABLE)
 
     def _run_main(self, parsed_args, parsed_globals):
-
-        self._apply_configs(parsed_args,
-                            configutils.get_configs(self._session))
+        self._apply_configs(
+            parsed_args, configutils.get_configs(self._session)
+        )
         self.region = emrutils.get_region(self._session, parsed_globals)
         self._validate_unsupported_commands_for_release_based_clusters(
-            parsed_args, parsed_globals)
+            parsed_args, parsed_globals
+        )
         return self._run_main_command(parsed_args, parsed_globals)
 
     def _apply_configs(self, parsed_args, parsed_configs):
-        applicable_configurations = \
-            self._get_applicable_configurations(parsed_args, parsed_configs)
+        applicable_configurations = self._get_applicable_configurations(
+            parsed_args, parsed_configs
+        )
 
         configs_added = {}
         for configuration in applicable_configurations:
-            configuration.add(self, parsed_args,
-                              parsed_configs[configuration.name])
-            configs_added[configuration.name] = \
-                parsed_configs[configuration.name]
+            configuration.add(
+                self, parsed_args, parsed_configs[configuration.name]
+            )
+            configs_added[configuration.name] = parsed_configs[
+                configuration.name
+            ]
 
         if configs_added:
             LOG.debug("Updated arguments with configs: %s" % configs_added)
@@ -68,20 +72,23 @@ class Command(BasicCommand):
         # 3. Configurations that are present in parsed_configs
         # 2. Configurations that are not present in parsed_args
 
-        configurations = \
-            config.get_applicable_configurations(self)
+        configurations = config.get_applicable_configurations(self)
 
-        configurations = [x for x in configurations
-                          if x.name in parsed_configs and
-                          not x.is_present(parsed_args)]
+        configurations = [
+            x
+            for x in configurations
+            if x.name in parsed_configs and not x.is_present(parsed_args)
+        ]
 
         configurations = self._filter_configurations_in_special_cases(
-            configurations, parsed_args, parsed_configs)
+            configurations, parsed_args, parsed_configs
+        )
 
         return configurations
 
-    def _filter_configurations_in_special_cases(self, configurations,
-                                                parsed_args, parsed_configs):
+    def _filter_configurations_in_special_cases(
+        self, configurations, parsed_args, parsed_configs
+    ):
         # Subclasses can override this method to filter the applicable
         # configurations further based upon some custom logic
         # Default behavior is to return the configurations list as is
@@ -99,18 +106,25 @@ class Command(BasicCommand):
         raise NotImplementedError("_run_main_command")
 
     def _validate_unsupported_commands_for_release_based_clusters(
-            self, parsed_args, parsed_globals):
+        self, parsed_args, parsed_globals
+    ):
         command = self.NAME
 
-        if (command in self.UNSUPPORTED_COMMANDS_FOR_RELEASE_BASED_CLUSTERS and
-                hasattr(parsed_args, 'cluster_id')):
+        if (
+            command in self.UNSUPPORTED_COMMANDS_FOR_RELEASE_BASED_CLUSTERS
+            and hasattr(parsed_args, 'cluster_id')
+        ):
             release_label = emrutils.get_release_label(
-                parsed_args.cluster_id, self._session, self.region,
-                parsed_globals.endpoint_url, parsed_globals.verify_ssl)
+                parsed_args.cluster_id,
+                self._session,
+                self.region,
+                parsed_globals.endpoint_url,
+                parsed_globals.verify_ssl,
+            )
             if release_label:
                 raise exceptions.UnsupportedCommandWithReleaseError(
-                    command=command,
-                    release_label=release_label)
+                    command=command, release_label=release_label
+                )
 
 
 def override_args_required_option(argument_table, args, session, **kwargs):
@@ -119,8 +133,7 @@ def override_args_required_option(argume
     # file
     # We don't want to override when user is viewing the help so that we
     # can show the required options correctly in the help
-    need_to_override = False if len(args) == 1 and args[0] == 'help' \
-        else True
+    need_to_override = False if len(args) == 1 and args[0] == 'help' else True
 
     if need_to_override:
         parsed_configs = configutils.get_configs(session)
diff -pruN 2.23.6-1/awscli/customizations/emr/config.py 2.31.35-1/awscli/customizations/emr/config.py
--- 2.23.6-1/awscli/customizations/emr/config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/config.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,20 +12,26 @@
 # language governing permissions and limitations under the License.
 
 import logging
-from awscli.customizations.emr import configutils
-from awscli.customizations.emr import exceptions
+
+from awscli.customizations.emr import configutils, exceptions
 
 LOG = logging.getLogger(__name__)
 
 SUPPORTED_CONFIG_LIST = [
     {'name': 'service_role'},
     {'name': 'log_uri'},
-    {'name': 'instance_profile', 'arg_name': 'ec2_attributes',
-     'arg_value_key': 'InstanceProfile'},
-    {'name': 'key_name', 'arg_name': 'ec2_attributes',
-     'arg_value_key': 'KeyName'},
+    {
+        'name': 'instance_profile',
+        'arg_name': 'ec2_attributes',
+        'arg_value_key': 'InstanceProfile',
+    },
+    {
+        'name': 'key_name',
+        'arg_name': 'ec2_attributes',
+        'arg_value_key': 'KeyName',
+    },
     {'name': 'enable_debugging', 'type': 'boolean'},
-    {'name': 'key_pair_file'}
+    {'name': 'key_pair_file'},
 ]
 
 TYPES = ['string', 'boolean']
@@ -39,27 +45,30 @@ def get_applicable_configurations(comman
 def _create_supported_configuration(config):
     config_type = config['type'] if 'type' in config else 'string'
 
-    if (config_type == 'string'):
-        config_arg_name = config['arg_name'] \
-            if 'arg_name' in config else config['name']
-        config_arg_value_key = config['arg_value_key'] \
-            if 'arg_value_key' in config else None
-        configuration = StringConfiguration(config['name'],
-                                            config_arg_name,
-                                            config_arg_value_key)
-    elif (config_type == 'boolean'):
+    if config_type == 'string':
+        config_arg_name = (
+            config['arg_name'] if 'arg_name' in config else config['name']
+        )
+        config_arg_value_key = (
+            config['arg_value_key'] if 'arg_value_key' in config else None
+        )
+        configuration = StringConfiguration(
+            config['name'], config_arg_name, config_arg_value_key
+        )
+    elif config_type == 'boolean':
         configuration = BooleanConfiguration(config['name'])
 
     return configuration
 
 
 def _create_supported_configurations():
-    return [_create_supported_configuration(config)
-            for config in SUPPORTED_CONFIG_LIST]
-
+    return [
+        _create_supported_configuration(config)
+        for config in SUPPORTED_CONFIG_LIST
+    ]
 
-class Configuration(object):
 
+class Configuration:
     def __init__(self, name, arg_name):
         self.name = name
         self.arg_name = arg_name
@@ -78,7 +87,6 @@ class Configuration(object):
 
 
 class StringConfiguration(Configuration):
-
     def __init__(self, name, arg_name, arg_value_key=None):
         super(StringConfiguration, self).__init__(name, arg_name)
         self.arg_value_key = arg_value_key
@@ -87,40 +95,42 @@ class StringConfiguration(Configuration)
         return command.supports_arg(self.arg_name.replace('_', '-'))
 
     def is_present(self, parsed_args):
-        if (not self.arg_value_key):
+        if not self.arg_value_key:
             return self._check_arg(parsed_args, self.arg_name)
         else:
-            return self._check_arg(parsed_args, self.arg_name) \
-                and self.arg_value_key in getattr(parsed_args, self.arg_name)
+            return self._check_arg(
+                parsed_args, self.arg_name
+            ) and self.arg_value_key in getattr(parsed_args, self.arg_name)
 
     def add(self, command, parsed_args, value):
-        if (not self.arg_value_key):
+        if not self.arg_value_key:
             setattr(parsed_args, self.arg_name, value)
         else:
-            if (not self._check_arg(parsed_args, self.arg_name)):
+            if not self._check_arg(parsed_args, self.arg_name):
                 setattr(parsed_args, self.arg_name, {})
             getattr(parsed_args, self.arg_name)[self.arg_value_key] = value
 
 
 class BooleanConfiguration(Configuration):
-
     def __init__(self, name):
         super(BooleanConfiguration, self).__init__(name, name)
         self.no_version_arg_name = "no_" + name
 
     def is_applicable(self, command):
-        return command.supports_arg(self.arg_name.replace('_', '-')) and \
-            command.supports_arg(self.no_version_arg_name.replace('_', '-'))
+        return command.supports_arg(
+            self.arg_name.replace('_', '-')
+        ) and command.supports_arg(self.no_version_arg_name.replace('_', '-'))
 
     def is_present(self, parsed_args):
-        return self._check_arg(parsed_args, self.arg_name) \
-            or self._check_arg(parsed_args, self.no_version_arg_name)
+        return self._check_arg(parsed_args, self.arg_name) or self._check_arg(
+            parsed_args, self.no_version_arg_name
+        )
 
     def add(self, command, parsed_args, value):
-        if (value.lower() == 'true'):
+        if value.lower() == 'true':
             setattr(parsed_args, self.arg_name, True)
             setattr(parsed_args, self.no_version_arg_name, False)
-        elif (value.lower() == 'false'):
+        elif value.lower() == 'false':
             setattr(parsed_args, self.arg_name, False)
             setattr(parsed_args, self.no_version_arg_name, True)
         else:
@@ -128,4 +138,6 @@ class BooleanConfiguration(Configuration
                 config_value=value,
                 config_key=self.arg_name,
                 profile_var_name=configutils.get_current_profile_var_name(
-                    command._session))
+                    command._session
+                ),
+            )
diff -pruN 2.23.6-1/awscli/customizations/emr/configutils.py 2.31.35-1/awscli/customizations/emr/configutils.py
--- 2.23.6-1/awscli/customizations/emr/configutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/configutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,7 @@ import logging
 import os
 
 from awscli.customizations.configure.writer import ConfigFileWriter
-from awscli.customizations.emr.constants import EC2_ROLE_NAME
-from awscli.customizations.emr.constants import EMR_ROLE_NAME
+from awscli.customizations.emr.constants import EC2_ROLE_NAME, EMR_ROLE_NAME
 
 LOG = logging.getLogger(__name__)
 
@@ -35,21 +34,31 @@ def get_current_profile_var_name(session
 
 def _get_profile_str(session, separator):
     profile_name = session.get_config_variable('profile')
-    return 'default' if profile_name is None \
+    return (
+        'default'
+        if profile_name is None
         else 'profile%c%s' % (separator, profile_name)
+    )
 
 
 def is_any_role_configured(session):
     parsed_configs = get_configs(session)
-    return True if ('instance_profile' in parsed_configs or
-                    'service_role' in parsed_configs) \
+    return (
+        True
+        if (
+            'instance_profile' in parsed_configs
+            or 'service_role' in parsed_configs
+        )
         else False
+    )
 
 
 def update_roles(session):
     if is_any_role_configured(session):
-        LOG.debug("At least one of the roles is already associated with "
-                  "your current profile ")
+        LOG.debug(
+            "At least one of the roles is already associated with "
+            "your current profile "
+        )
     else:
         config_writer = ConfigWriter(session)
         config_writer.update_config('service_role', EMR_ROLE_NAME)
@@ -57,16 +66,15 @@ def update_roles(session):
         LOG.debug("Associated default roles with your current profile")
 
 
-class ConfigWriter(object):
-
+class ConfigWriter:
     def __init__(self, session):
         self.session = session
         self.section = _get_profile_str(session, ' ')
         self.config_file_writer = ConfigFileWriter()
 
     def update_config(self, key, value):
-        config_filename = \
-            os.path.expanduser(self.session.get_config_variable('config_file'))
-        updated_config = {'__section__': self.section,
-                          'emr': {key: value}}
+        config_filename = os.path.expanduser(
+            self.session.get_config_variable('config_file')
+        )
+        updated_config = {'__section__': self.section, 'emr': {key: value}}
         self.config_file_writer.update_config(updated_config, config_filename)
diff -pruN 2.23.6-1/awscli/customizations/emr/constants.py 2.31.35-1/awscli/customizations/emr/constants.py
--- 2.23.6-1/awscli/customizations/emr/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,9 @@
 EC2_ROLE_NAME = "EMR_EC2_DefaultRole"
 EMR_ROLE_NAME = "EMR_DefaultRole"
 EMR_AUTOSCALING_ROLE_NAME = "EMR_AutoScaling_DefaultRole"
-ROLE_ARN_PATTERN = "arn:{{region_suffix}}:iam::aws:policy/service-role/{{policy_name}}"
+ROLE_ARN_PATTERN = (
+    "arn:{{region_suffix}}:iam::aws:policy/service-role/{{policy_name}}"
+)
 EC2_ROLE_POLICY_NAME = "AmazonElasticMapReduceforEC2Role"
 EMR_ROLE_POLICY_NAME = "AmazonElasticMapReduceRole"
 EMR_AUTOSCALING_ROLE_POLICY_NAME = "AmazonElasticMapReduceforAutoScalingRole"
@@ -57,12 +59,14 @@ EMRFS_RETRY_COUNT_KEY = 'fs.s3.consisten
 EMRFS_RETRY_PERIOD_KEY = 'fs.s3.consistent.retryPeriodSeconds'
 EMRFS_CSE_KEY = 'fs.s3.cse.enabled'
 EMRFS_CSE_KMS_KEY_ID_KEY = 'fs.s3.cse.kms.keyId'
-EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY = \
+EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY = (
     'fs.s3.cse.encryptionMaterialsProvider'
+)
 EMRFS_CSE_CUSTOM_PROVIDER_URI_KEY = 'fs.s3.cse.encryptionMaterialsProvider.uri'
 
-EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAME = ('com.amazon.ws.emr.hadoop.fs.cse.'
-                                          'KMSEncryptionMaterialsProvider')
+EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAME = (
+    'com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider'
+)
 EMRFS_CSE_CUSTOM_S3_GET_BA_PATH = 'file:/usr/share/aws/emr/scripts/s3get'
 EMRFS_CUSTOM_DEST_PATH = '/usr/share/aws/emr/auxlib'
 
@@ -181,16 +185,31 @@ EMR = 'elasticmapreduce'
 APPLICATION_AUTOSCALING = 'application-autoscaling'
 LATEST = 'latest'
 
-APPLICATIONS = ["HIVE", "PIG", "HBASE", "GANGLIA", "IMPALA", "SPARK", "MAPR",
-                "MAPR_M3", "MAPR_M5", "MAPR_M7"]
+APPLICATIONS = [
+    "HIVE",
+    "PIG",
+    "HBASE",
+    "GANGLIA",
+    "IMPALA",
+    "SPARK",
+    "MAPR",
+    "MAPR_M3",
+    "MAPR_M5",
+    "MAPR_M7",
+]
 
 SSH_USER = 'hadoop'
 STARTING_STATES = ['STARTING', 'BOOTSTRAPPING']
 TERMINATED_STATES = ['TERMINATED', 'TERMINATING', 'TERMINATED_WITH_ERRORS']
 
 # list-clusters
-LIST_CLUSTERS_ACTIVE_STATES = ['STARTING', 'BOOTSTRAPPING', 'RUNNING',
-                               'WAITING', 'TERMINATING']
+LIST_CLUSTERS_ACTIVE_STATES = [
+    'STARTING',
+    'BOOTSTRAPPING',
+    'RUNNING',
+    'WAITING',
+    'TERMINATING',
+]
 LIST_CLUSTERS_TERMINATED_STATES = ['TERMINATED']
 LIST_CLUSTERS_FAILED_STATES = ['TERMINATED_WITH_ERRORS']
 
diff -pruN 2.23.6-1/awscli/customizations/emr/createcluster.py 2.31.35-1/awscli/customizations/emr/createcluster.py
--- 2.23.6-1/awscli/customizations/emr/createcluster.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/createcluster.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,137 +13,217 @@
 
 import re
 
-from awscli.customizations.exceptions import ParamValidationError
+from botocore.compat import json
+
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.emr import applicationutils
-from awscli.customizations.emr import argumentschema
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrfsutils
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
-from awscli.customizations.emr import hbaseutils
-from awscli.customizations.emr import helptext
-from awscli.customizations.emr import instancegroupsutils
-from awscli.customizations.emr import instancefleetsutils
-from awscli.customizations.emr import steputils
+from awscli.customizations.emr import (
+    applicationutils,
+    argumentschema,
+    constants,
+    emrfsutils,
+    emrutils,
+    exceptions,
+    hbaseutils,
+    helptext,
+    instancefleetsutils,
+    instancegroupsutils,
+    steputils,
+)
 from awscli.customizations.emr.command import Command
-from awscli.customizations.emr.constants import EC2_ROLE_NAME
-from awscli.customizations.emr.constants import EMR_ROLE_NAME
-from botocore.compat import json
+from awscli.customizations.emr.constants import EC2_ROLE_NAME, EMR_ROLE_NAME
+from awscli.customizations.exceptions import ParamValidationError
 
 
 class CreateCluster(Command):
     NAME = 'create-cluster'
     DESCRIPTION = helptext.CREATE_CLUSTER_DESCRIPTION
     ARG_TABLE = [
-        {'name': 'release-label',
-         'help_text': helptext.RELEASE_LABEL},
-        {'name': 'os-release-label',
-         'help_text': helptext.OS_RELEASE_LABEL},
-        {'name': 'ami-version',
-         'help_text': helptext.AMI_VERSION},
-        {'name': 'instance-groups',
-         'schema': argumentschema.INSTANCE_GROUPS_SCHEMA,
-         'help_text': helptext.INSTANCE_GROUPS},
-        {'name': 'instance-type',
-         'help_text': helptext.INSTANCE_TYPE},
-        {'name': 'instance-count',
-         'help_text': helptext.INSTANCE_COUNT},
-        {'name': 'auto-terminate', 'action': 'store_true',
-         'group_name': 'auto_terminate',
-         'help_text': helptext.AUTO_TERMINATE},
-        {'name': 'no-auto-terminate', 'action': 'store_true',
-         'group_name': 'auto_terminate'},
-        {'name': 'instance-fleets',
-         'schema': argumentschema.INSTANCE_FLEETS_SCHEMA,
-         'help_text': helptext.INSTANCE_FLEETS},
-        {'name': 'name',
-         'default': 'Development Cluster',
-         'help_text': helptext.CLUSTER_NAME},
-        {'name': 'log-uri',
-         'help_text': helptext.LOG_URI},
-        {'name': 'log-encryption-kms-key-id',
-         'help_text': helptext.LOG_ENCRYPTION_KMS_KEY_ID},
-        {'name': 'service-role',
-         'help_text': helptext.SERVICE_ROLE},
-        {'name': 'auto-scaling-role',
-         'help_text': helptext.AUTOSCALING_ROLE},
-        {'name': 'use-default-roles', 'action': 'store_true',
-         'help_text': helptext.USE_DEFAULT_ROLES},
-        {'name': 'configurations',
-         'help_text': helptext.CONFIGURATIONS},
-        {'name': 'ec2-attributes',
-         'help_text': helptext.EC2_ATTRIBUTES,
-         'schema': argumentschema.EC2_ATTRIBUTES_SCHEMA},
-        {'name': 'termination-protected', 'action': 'store_true',
-         'group_name': 'termination_protected',
-         'help_text': helptext.TERMINATION_PROTECTED},
-        {'name': 'no-termination-protected', 'action': 'store_true',
-         'group_name': 'termination_protected'},
-        {'name': 'unhealthy-node-replacement', 'action': 'store_true',
-        'group_name': 'unhealthy_node_replacement',
-        'help_text': helptext.UNHEALTHY_NODE_REPLACEMENT},
-        {'name': 'no-unhealthy-node-replacement', 'action': 'store_true',
-        'group_name': 'unhealthy_node_replacement'},
-        {'name': 'scale-down-behavior',
-         'help_text': helptext.SCALE_DOWN_BEHAVIOR},
-        {'name': 'visible-to-all-users', 'action': 'store_true',
-         'group_name': 'visibility',
-         'help_text': helptext.VISIBILITY},
-        {'name': 'no-visible-to-all-users', 'action': 'store_true',
-         'group_name': 'visibility'},
-        {'name': 'enable-debugging', 'action': 'store_true',
-         'group_name': 'debug',
-         'help_text': helptext.DEBUGGING},
-        {'name': 'no-enable-debugging', 'action': 'store_true',
-         'group_name': 'debug'},
-        {'name': 'tags', 'nargs': '+',
-         'help_text': helptext.TAGS,
-         'schema': argumentschema.TAGS_SCHEMA},
-        {'name': 'bootstrap-actions',
-         'help_text': helptext.BOOTSTRAP_ACTIONS,
-         'schema': argumentschema.BOOTSTRAP_ACTIONS_SCHEMA},
-        {'name': 'applications',
-         'help_text': helptext.APPLICATIONS,
-         'schema': argumentschema.APPLICATIONS_SCHEMA},
-        {'name': 'emrfs',
-         'help_text': helptext.EMR_FS,
-         'schema': argumentschema.EMR_FS_SCHEMA},
-        {'name': 'steps',
-         'schema': argumentschema.STEPS_SCHEMA,
-         'help_text': helptext.STEPS},
-        {'name': 'additional-info',
-         'help_text': helptext.ADDITIONAL_INFO},
-        {'name': 'restore-from-hbase-backup',
-         'schema': argumentschema.HBASE_RESTORE_FROM_BACKUP_SCHEMA,
-         'help_text': helptext.RESTORE_FROM_HBASE},
-        {'name': 'security-configuration',
-         'help_text': helptext.SECURITY_CONFIG},
-        {'name': 'custom-ami-id',
-         'help_text' : helptext.CUSTOM_AMI_ID},
-        {'name': 'ebs-root-volume-size',
-         'help_text' : helptext.EBS_ROOT_VOLUME_SIZE},
-        {'name': 'ebs-root-volume-iops',
-         'help_text' : helptext.EBS_ROOT_VOLUME_IOPS},
-        {'name': 'ebs-root-volume-throughput',
-         'help_text' : helptext.EBS_ROOT_VOLUME_THROUGHPUT},
-        {'name': 'repo-upgrade-on-boot',
-         'help_text' : helptext.REPO_UPGRADE_ON_BOOT},
-        {'name': 'kerberos-attributes',
-         'schema': argumentschema.KERBEROS_ATTRIBUTES_SCHEMA,
-         'help_text': helptext.KERBEROS_ATTRIBUTES},
-        {'name': 'step-concurrency-level',
-         'cli_type_name': 'integer',
-         'help_text': helptext.STEP_CONCURRENCY_LEVEL},
-        {'name': 'managed-scaling-policy',
-         'schema': argumentschema.MANAGED_SCALING_POLICY_SCHEMA,
-         'help_text': helptext.MANAGED_SCALING_POLICY},
-        {'name': 'placement-group-configs',
-         'schema': argumentschema.PLACEMENT_GROUP_CONFIGS_SCHEMA,
-         'help_text': helptext.PLACEMENT_GROUP_CONFIGS},
-        {'name': 'auto-termination-policy',
-         'schema': argumentschema.AUTO_TERMINATION_POLICY_SCHEMA,
-         'help_text': helptext.AUTO_TERMINATION_POLICY}
+        {'name': 'release-label', 'help_text': helptext.RELEASE_LABEL},
+        {'name': 'os-release-label', 'help_text': helptext.OS_RELEASE_LABEL},
+        {'name': 'ami-version', 'help_text': helptext.AMI_VERSION},
+        {
+            'name': 'instance-groups',
+            'schema': argumentschema.INSTANCE_GROUPS_SCHEMA,
+            'help_text': helptext.INSTANCE_GROUPS,
+        },
+        {'name': 'instance-type', 'help_text': helptext.INSTANCE_TYPE},
+        {'name': 'instance-count', 'help_text': helptext.INSTANCE_COUNT},
+        {
+            'name': 'auto-terminate',
+            'action': 'store_true',
+            'group_name': 'auto_terminate',
+            'help_text': helptext.AUTO_TERMINATE,
+        },
+        {
+            'name': 'no-auto-terminate',
+            'action': 'store_true',
+            'group_name': 'auto_terminate',
+        },
+        {
+            'name': 'instance-fleets',
+            'schema': argumentschema.INSTANCE_FLEETS_SCHEMA,
+            'help_text': helptext.INSTANCE_FLEETS,
+        },
+        {
+            'name': 'name',
+            'default': 'Development Cluster',
+            'help_text': helptext.CLUSTER_NAME,
+        },
+        {'name': 'log-uri', 'help_text': helptext.LOG_URI},
+        {
+            'name': 'log-encryption-kms-key-id',
+            'help_text': helptext.LOG_ENCRYPTION_KMS_KEY_ID,
+        },
+        {'name': 'service-role', 'help_text': helptext.SERVICE_ROLE},
+        {'name': 'auto-scaling-role', 'help_text': helptext.AUTOSCALING_ROLE},
+        {
+            'name': 'use-default-roles',
+            'action': 'store_true',
+            'help_text': helptext.USE_DEFAULT_ROLES,
+        },
+        {'name': 'configurations', 'help_text': helptext.CONFIGURATIONS},
+        {
+            'name': 'ec2-attributes',
+            'help_text': helptext.EC2_ATTRIBUTES,
+            'schema': argumentschema.EC2_ATTRIBUTES_SCHEMA,
+        },
+        {
+            'name': 'termination-protected',
+            'action': 'store_true',
+            'group_name': 'termination_protected',
+            'help_text': helptext.TERMINATION_PROTECTED,
+        },
+        {
+            'name': 'no-termination-protected',
+            'action': 'store_true',
+            'group_name': 'termination_protected',
+        },
+        {
+            'name': 'unhealthy-node-replacement',
+            'action': 'store_true',
+            'group_name': 'unhealthy_node_replacement',
+            'help_text': helptext.UNHEALTHY_NODE_REPLACEMENT,
+        },
+        {
+            'name': 'no-unhealthy-node-replacement',
+            'action': 'store_true',
+            'group_name': 'unhealthy_node_replacement',
+        },
+        {
+            'name': 'scale-down-behavior',
+            'help_text': helptext.SCALE_DOWN_BEHAVIOR,
+        },
+        {
+            'name': 'visible-to-all-users',
+            'action': 'store_true',
+            'group_name': 'visibility',
+            'help_text': helptext.VISIBILITY,
+        },
+        {
+            'name': 'no-visible-to-all-users',
+            'action': 'store_true',
+            'group_name': 'visibility',
+        },
+        {
+            'name': 'enable-debugging',
+            'action': 'store_true',
+            'group_name': 'debug',
+            'help_text': helptext.DEBUGGING,
+        },
+        {
+            'name': 'no-enable-debugging',
+            'action': 'store_true',
+            'group_name': 'debug',
+        },
+        {
+            'name': 'tags',
+            'nargs': '+',
+            'help_text': helptext.TAGS,
+            'schema': argumentschema.TAGS_SCHEMA,
+        },
+        {
+            'name': 'bootstrap-actions',
+            'help_text': helptext.BOOTSTRAP_ACTIONS,
+            'schema': argumentschema.BOOTSTRAP_ACTIONS_SCHEMA,
+        },
+        {
+            'name': 'applications',
+            'help_text': helptext.APPLICATIONS,
+            'schema': argumentschema.APPLICATIONS_SCHEMA,
+        },
+        {
+            'name': 'emrfs',
+            'help_text': helptext.EMR_FS,
+            'schema': argumentschema.EMR_FS_SCHEMA,
+        },
+        {
+            'name': 'steps',
+            'schema': argumentschema.STEPS_SCHEMA,
+            'help_text': helptext.STEPS,
+        },
+        {'name': 'additional-info', 'help_text': helptext.ADDITIONAL_INFO},
+        {
+            'name': 'restore-from-hbase-backup',
+            'schema': argumentschema.HBASE_RESTORE_FROM_BACKUP_SCHEMA,
+            'help_text': helptext.RESTORE_FROM_HBASE,
+        },
+        {
+            'name': 'security-configuration',
+            'help_text': helptext.SECURITY_CONFIG,
+        },
+        {'name': 'custom-ami-id', 'help_text': helptext.CUSTOM_AMI_ID},
+        {
+            'name': 'ebs-root-volume-size',
+            'help_text': helptext.EBS_ROOT_VOLUME_SIZE,
+        },
+        {
+            'name': 'ebs-root-volume-iops',
+            'help_text': helptext.EBS_ROOT_VOLUME_IOPS,
+        },
+        {
+            'name': 'ebs-root-volume-throughput',
+            'help_text': helptext.EBS_ROOT_VOLUME_THROUGHPUT,
+        },
+        {
+            'name': 'repo-upgrade-on-boot',
+            'help_text': helptext.REPO_UPGRADE_ON_BOOT,
+        },
+        {
+            'name': 'kerberos-attributes',
+            'schema': argumentschema.KERBEROS_ATTRIBUTES_SCHEMA,
+            'help_text': helptext.KERBEROS_ATTRIBUTES,
+        },
+        {
+            'name': 'step-concurrency-level',
+            'cli_type_name': 'integer',
+            'help_text': helptext.STEP_CONCURRENCY_LEVEL,
+        },
+        {
+            'name': 'managed-scaling-policy',
+            'schema': argumentschema.MANAGED_SCALING_POLICY_SCHEMA,
+            'help_text': helptext.MANAGED_SCALING_POLICY,
+        },
+        {
+            'name': 'placement-group-configs',
+            'schema': argumentschema.PLACEMENT_GROUP_CONFIGS_SCHEMA,
+            'help_text': helptext.PLACEMENT_GROUP_CONFIGS,
+        },
+        {
+            'name': 'auto-termination-policy',
+            'schema': argumentschema.AUTO_TERMINATION_POLICY_SCHEMA,
+            'help_text': helptext.AUTO_TERMINATION_POLICY,
+        },
+        {
+            'name': 'extended-support',
+            'action': 'store_true',
+            'group_name': 'extended-support',
+            'help_text': helptext.EXTENDED_SUPPORT,
+        },
+        {
+            'name': 'no-extended-support',
+            'action': 'store_true',
+            'group_name': 'extended-support',
+        },
     ]
     SYNOPSIS = BasicCommand.FROM_FILE('emr', 'create-cluster-synopsis.txt')
     EXAMPLES = BasicCommand.FROM_FILE('emr', 'create-cluster-examples.rst')
@@ -156,71 +236,95 @@ class CreateCluster(Command):
 
         service_role_validation_message = (
             " Either choose --use-default-roles or use both --service-role "
-            "<roleName> and --ec2-attributes InstanceProfile=<profileName>.")
+            "<roleName> and --ec2-attributes InstanceProfile=<profileName>."
+        )
 
-        if parsed_args.use_default_roles is True and \
-                parsed_args.service_role is not None:
+        if (
+            parsed_args.use_default_roles is True
+            and parsed_args.service_role is not None
+        ):
             raise exceptions.MutualExclusiveOptionError(
                 option1="--use-default-roles",
                 option2="--service-role",
-                message=service_role_validation_message)
+                message=service_role_validation_message,
+            )
 
-        if parsed_args.use_default_roles is True and \
-                parsed_args.ec2_attributes is not None and \
-                'InstanceProfile' in parsed_args.ec2_attributes:
+        if (
+            parsed_args.use_default_roles is True
+            and parsed_args.ec2_attributes is not None
+            and 'InstanceProfile' in parsed_args.ec2_attributes
+        ):
             raise exceptions.MutualExclusiveOptionError(
                 option1="--use-default-roles",
                 option2="--ec2-attributes InstanceProfile",
-                message=service_role_validation_message)
+                message=service_role_validation_message,
+            )
 
-        if parsed_args.instance_groups is not None and \
-                parsed_args.instance_fleets is not None:
+        if (
+            parsed_args.instance_groups is not None
+            and parsed_args.instance_fleets is not None
+        ):
             raise exceptions.MutualExclusiveOptionError(
-                option1="--instance-groups",
-                option2="--instance-fleets")
+                option1="--instance-groups", option2="--instance-fleets"
+            )
 
         instances_config = {}
         if parsed_args.instance_fleets is not None:
-            instances_config['InstanceFleets'] = \
+            instances_config['InstanceFleets'] = (
                 instancefleetsutils.validate_and_build_instance_fleets(
-                    parsed_args.instance_fleets)
+                    parsed_args.instance_fleets
+                )
+            )
         else:
-            instances_config['InstanceGroups'] = \
+            instances_config['InstanceGroups'] = (
                 instancegroupsutils.validate_and_build_instance_groups(
                     instance_groups=parsed_args.instance_groups,
                     instance_type=parsed_args.instance_type,
-                    instance_count=parsed_args.instance_count)
+                    instance_count=parsed_args.instance_count,
+                )
+            )
 
         if parsed_args.release_label is not None:
             params["ReleaseLabel"] = parsed_args.release_label
             if parsed_args.configurations is not None:
                 try:
                     params["Configurations"] = json.loads(
-                        parsed_args.configurations)
+                        parsed_args.configurations
+                    )
                 except ValueError:
                     raise ParamValidationError(
                         'aws: error: invalid json argument for '
                         'option --configurations'
                     )
 
-        if (parsed_args.release_label is None and
-                parsed_args.ami_version is not None):
-            is_valid_ami_version = re.match(r'\d?\..*', parsed_args.ami_version)
+        if (
+            parsed_args.release_label is None
+            and parsed_args.ami_version is not None
+        ):
+            is_valid_ami_version = re.match(
+                r'\d?\..*', parsed_args.ami_version
+            )
             if is_valid_ami_version is None:
                 raise exceptions.InvalidAmiVersionError(
-                    ami_version=parsed_args.ami_version)
+                    ami_version=parsed_args.ami_version
+                )
             params['AmiVersion'] = parsed_args.ami_version
         emrutils.apply_dict(
-            params, 'AdditionalInfo', parsed_args.additional_info)
+            params, 'AdditionalInfo', parsed_args.additional_info
+        )
         emrutils.apply_dict(params, 'LogUri', parsed_args.log_uri)
 
         if parsed_args.os_release_label is not None:
-            emrutils.apply_dict(params, 'OSReleaseLabel',
-                parsed_args.os_release_label)
+            emrutils.apply_dict(
+                params, 'OSReleaseLabel', parsed_args.os_release_label
+            )
 
         if parsed_args.log_encryption_kms_key_id is not None:
-            emrutils.apply_dict(params, 'LogEncryptionKmsKeyId',
-                parsed_args.log_encryption_kms_key_id)
+            emrutils.apply_dict(
+                params,
+                'LogEncryptionKmsKeyId',
+                parsed_args.log_encryption_kms_key_id,
+            )
 
         if parsed_args.use_default_roles is True:
             parsed_args.service_role = EMR_ROLE_NAME
@@ -236,61 +340,79 @@ class CreateCluster(Command):
                     if parsed_args.auto_scaling_role is None:
                         raise exceptions.MissingAutoScalingRoleError()
 
-        emrutils.apply_dict(params, 'AutoScalingRole', parsed_args.auto_scaling_role)
+        emrutils.apply_dict(
+            params, 'AutoScalingRole', parsed_args.auto_scaling_role
+        )
 
         if parsed_args.scale_down_behavior is not None:
-            emrutils.apply_dict(params, 'ScaleDownBehavior', parsed_args.scale_down_behavior)
+            emrutils.apply_dict(
+                params, 'ScaleDownBehavior', parsed_args.scale_down_behavior
+            )
 
         if (
-                parsed_args.no_auto_terminate is False and
-                parsed_args.auto_terminate is False):
+            parsed_args.no_auto_terminate is False
+            and parsed_args.auto_terminate is False
+        ):
             parsed_args.no_auto_terminate = True
 
-        instances_config['KeepJobFlowAliveWhenNoSteps'] = \
+        instances_config['KeepJobFlowAliveWhenNoSteps'] = (
             emrutils.apply_boolean_options(
                 parsed_args.no_auto_terminate,
                 '--no-auto-terminate',
                 parsed_args.auto_terminate,
-                '--auto-terminate')
+                '--auto-terminate',
+            )
+        )
 
-        instances_config['TerminationProtected'] = \
+        instances_config['TerminationProtected'] = (
             emrutils.apply_boolean_options(
                 parsed_args.termination_protected,
                 '--termination-protected',
                 parsed_args.no_termination_protected,
-                '--no-termination-protected')
-        
-        if (parsed_args.unhealthy_node_replacement or parsed_args.no_unhealthy_node_replacement):
-            instances_config['UnhealthyNodeReplacement'] = \
-            emrutils.apply_boolean_options(
-                parsed_args.unhealthy_node_replacement,
-                '--unhealthy-node-replacement',
-                parsed_args.no_unhealthy_node_replacement,
-                '--no-unhealthy-node-replacement')
+                '--no-termination-protected',
+            )
+        )
 
-        if (parsed_args.visible_to_all_users is False and
-                parsed_args.no_visible_to_all_users is False):
+        if (
+            parsed_args.unhealthy_node_replacement
+            or parsed_args.no_unhealthy_node_replacement
+        ):
+            instances_config['UnhealthyNodeReplacement'] = (
+                emrutils.apply_boolean_options(
+                    parsed_args.unhealthy_node_replacement,
+                    '--unhealthy-node-replacement',
+                    parsed_args.no_unhealthy_node_replacement,
+                    '--no-unhealthy-node-replacement',
+                )
+            )
+
+        if (
+            parsed_args.visible_to_all_users is False
+            and parsed_args.no_visible_to_all_users is False
+        ):
             parsed_args.visible_to_all_users = True
 
-        params['VisibleToAllUsers'] = \
-            emrutils.apply_boolean_options(
-                parsed_args.visible_to_all_users,
-                '--visible-to-all-users',
-                parsed_args.no_visible_to_all_users,
-                '--no-visible-to-all-users')
+        params['VisibleToAllUsers'] = emrutils.apply_boolean_options(
+            parsed_args.visible_to_all_users,
+            '--visible-to-all-users',
+            parsed_args.no_visible_to_all_users,
+            '--no-visible-to-all-users',
+        )
 
         params['Tags'] = emrutils.parse_tags(parsed_args.tags)
         params['Instances'] = instances_config
 
         if parsed_args.ec2_attributes is not None:
             self._build_ec2_attributes(
-                cluster=params, parsed_attrs=parsed_args.ec2_attributes)
+                cluster=params, parsed_attrs=parsed_args.ec2_attributes
+            )
 
         debugging_enabled = emrutils.apply_boolean_options(
             parsed_args.enable_debugging,
             '--enable-debugging',
             parsed_args.no_enable_debugging,
-            '--no-enable-debugging')
+            '--no-enable-debugging',
+        )
 
         if parsed_args.log_uri is None and debugging_enabled is True:
             raise exceptions.LogUriError
@@ -300,21 +422,24 @@ class CreateCluster(Command):
                 cluster=params,
                 key='Steps',
                 value=[
-                    self._build_enable_debugging(parsed_args, parsed_globals)])
+                    self._build_enable_debugging(parsed_args, parsed_globals)
+                ],
+            )
 
         if parsed_args.applications is not None:
             if parsed_args.release_label is None:
-                app_list, ba_list, step_list = \
+                app_list, ba_list, step_list = (
                     applicationutils.build_applications(
                         region=self.region,
                         parsed_applications=parsed_args.applications,
-                        ami_version=params['AmiVersion'])
-                self._update_cluster_dict(
-                    params, 'NewSupportedProducts', app_list)
-                self._update_cluster_dict(
-                    params, 'BootstrapActions', ba_list)
+                        ami_version=params['AmiVersion'],
+                    )
+                )
                 self._update_cluster_dict(
-                    params, 'Steps', step_list)
+                    params, 'NewSupportedProducts', app_list
+                )
+                self._update_cluster_dict(params, 'BootstrapActions', ba_list)
+                self._update_cluster_dict(params, 'Steps', step_list)
             else:
                 params["Applications"] = []
                 for application in parsed_args.applications:
@@ -324,37 +449,45 @@ class CreateCluster(Command):
         if hbase_restore_config is not None:
             args = hbaseutils.build_hbase_restore_from_backup_args(
                 dir=hbase_restore_config.get('Dir'),
-                backup_version=hbase_restore_config.get('BackupVersion'))
+                backup_version=hbase_restore_config.get('BackupVersion'),
+            )
             step_config = emrutils.build_step(
                 jar=constants.HBASE_JAR_PATH,
                 name=constants.HBASE_RESTORE_STEP_NAME,
                 action_on_failure=constants.CANCEL_AND_WAIT,
-                args=args)
-            self._update_cluster_dict(
-                params, 'Steps', [step_config])
+                args=args,
+            )
+            self._update_cluster_dict(params, 'Steps', [step_config])
 
         if parsed_args.bootstrap_actions is not None:
             self._build_bootstrap_actions(
                 cluster=params,
-                parsed_boostrap_actions=parsed_args.bootstrap_actions)
+                parsed_boostrap_actions=parsed_args.bootstrap_actions,
+            )
 
         if parsed_args.emrfs is not None:
             self._handle_emrfs_parameters(
                 cluster=params,
                 emrfs_args=parsed_args.emrfs,
-                release_label=parsed_args.release_label)
+                release_label=parsed_args.release_label,
+            )
 
         if parsed_args.steps is not None:
             steps_list = steputils.build_step_config_list(
                 parsed_step_list=parsed_args.steps,
                 region=self.region,
-                release_label=parsed_args.release_label)
+                release_label=parsed_args.release_label,
+            )
             self._update_cluster_dict(
-                cluster=params, key='Steps', value=steps_list)
+                cluster=params, key='Steps', value=steps_list
+            )
 
         if parsed_args.security_configuration is not None:
             emrutils.apply_dict(
-                params, 'SecurityConfiguration', parsed_args.security_configuration)
+                params,
+                'SecurityConfiguration',
+                parsed_args.security_configuration,
+            )
 
         if parsed_args.custom_ami_id is not None:
             emrutils.apply_dict(
@@ -362,15 +495,21 @@ class CreateCluster(Command):
             )
         if parsed_args.ebs_root_volume_size is not None:
             emrutils.apply_dict(
-                params, 'EbsRootVolumeSize', int(parsed_args.ebs_root_volume_size)
+                params,
+                'EbsRootVolumeSize',
+                int(parsed_args.ebs_root_volume_size),
             )
         if parsed_args.ebs_root_volume_iops is not None:
             emrutils.apply_dict(
-                params, 'EbsRootVolumeIops', int(parsed_args.ebs_root_volume_iops)
+                params,
+                'EbsRootVolumeIops',
+                int(parsed_args.ebs_root_volume_iops),
             )
         if parsed_args.ebs_root_volume_throughput is not None:
             emrutils.apply_dict(
-                params, 'EbsRootVolumeThroughput', int(parsed_args.ebs_root_volume_throughput)
+                params,
+                'EbsRootVolumeThroughput',
+                int(parsed_args.ebs_root_volume_throughput),
             )
 
         if parsed_args.repo_upgrade_on_boot is not None:
@@ -380,34 +519,56 @@ class CreateCluster(Command):
 
         if parsed_args.kerberos_attributes is not None:
             emrutils.apply_dict(
-                params, 'KerberosAttributes', parsed_args.kerberos_attributes)
+                params, 'KerberosAttributes', parsed_args.kerberos_attributes
+            )
 
         if parsed_args.step_concurrency_level is not None:
             params['StepConcurrencyLevel'] = parsed_args.step_concurrency_level
 
+        if parsed_args.extended_support or parsed_args.no_extended_support:
+            params['ExtendedSupport'] = emrutils.apply_boolean_options(
+                parsed_args.extended_support,
+                '--extended-support',
+                parsed_args.no_extended_support,
+                '--no-extended-support',
+            )
+
         if parsed_args.managed_scaling_policy is not None:
             emrutils.apply_dict(
-                params, 'ManagedScalingPolicy', parsed_args.managed_scaling_policy)
+                params,
+                'ManagedScalingPolicy',
+                parsed_args.managed_scaling_policy,
+            )
 
         if parsed_args.placement_group_configs is not None:
             emrutils.apply_dict(
-                params, 'PlacementGroupConfigs',
-                parsed_args.placement_group_configs)
+                params,
+                'PlacementGroupConfigs',
+                parsed_args.placement_group_configs,
+            )
 
         if parsed_args.auto_termination_policy is not None:
             emrutils.apply_dict(
-                params, 'AutoTerminationPolicy',
-                parsed_args.auto_termination_policy)
+                params,
+                'AutoTerminationPolicy',
+                parsed_args.auto_termination_policy,
+            )
 
         self._validate_required_applications(parsed_args)
 
         run_job_flow_response = emrutils.call(
-            self._session, 'run_job_flow', params, self.region,
-            parsed_globals.endpoint_url, parsed_globals.verify_ssl)
+            self._session,
+            'run_job_flow',
+            params,
+            self.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
+        )
 
         constructed_result = self._construct_result(run_job_flow_response)
-        emrutils.display_response(self._session, 'run_job_flow',
-                                  constructed_result, parsed_globals)
+        emrutils.display_response(
+            self._session, 'run_job_flow', constructed_result, parsed_globals
+        )
 
         return 0
 
@@ -419,8 +580,7 @@ class CreateCluster(Command):
             clusterArn = run_job_flow_result.get('ClusterArn')
 
         if jobFlowId is not None:
-            return {'ClusterId': jobFlowId,
-                    'ClusterArn': clusterArn }
+            return {'ClusterId': jobFlowId, 'ClusterArn': clusterArn}
         else:
             return {}
 
@@ -428,83 +588,118 @@ class CreateCluster(Command):
         keys = parsed_attrs.keys()
         instances = cluster['Instances']
 
-        if ('SubnetId' in keys and 'SubnetIds' in keys):
+        if 'SubnetId' in keys and 'SubnetIds' in keys:
             raise exceptions.MutualExclusiveOptionError(
-                option1="SubnetId",
-                option2="SubnetIds")
+                option1="SubnetId", option2="SubnetIds"
+            )
 
-        if ('AvailabilityZone' in keys and 'AvailabilityZones' in keys):
+        if 'AvailabilityZone' in keys and 'AvailabilityZones' in keys:
             raise exceptions.MutualExclusiveOptionError(
-                option1="AvailabilityZone",
-                option2="AvailabilityZones")
+                option1="AvailabilityZone", option2="AvailabilityZones"
+            )
 
-        if ('SubnetId' in keys or 'SubnetIds' in keys) \
-                and ('AvailabilityZone' in keys or 'AvailabilityZones' in keys):
+        if ('SubnetId' in keys or 'SubnetIds' in keys) and (
+            'AvailabilityZone' in keys or 'AvailabilityZones' in keys
+        ):
             raise exceptions.SubnetAndAzValidationError
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='KeyName',
-            dest_params=instances, dest_key='Ec2KeyName')
+            src_params=parsed_attrs,
+            src_key='KeyName',
+            dest_params=instances,
+            dest_key='Ec2KeyName',
+        )
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='SubnetId',
-            dest_params=instances, dest_key='Ec2SubnetId')
+            src_params=parsed_attrs,
+            src_key='SubnetId',
+            dest_params=instances,
+            dest_key='Ec2SubnetId',
+        )
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='SubnetIds',
-            dest_params=instances, dest_key='Ec2SubnetIds')
+            src_params=parsed_attrs,
+            src_key='SubnetIds',
+            dest_params=instances,
+            dest_key='Ec2SubnetIds',
+        )
 
         if 'AvailabilityZone' in keys:
             instances['Placement'] = dict()
             emrutils.apply_params(
-                src_params=parsed_attrs, src_key='AvailabilityZone',
+                src_params=parsed_attrs,
+                src_key='AvailabilityZone',
                 dest_params=instances['Placement'],
-                dest_key='AvailabilityZone')
+                dest_key='AvailabilityZone',
+            )
 
         if 'AvailabilityZones' in keys:
             instances['Placement'] = dict()
             emrutils.apply_params(
-                src_params=parsed_attrs, src_key='AvailabilityZones',
+                src_params=parsed_attrs,
+                src_key='AvailabilityZones',
                 dest_params=instances['Placement'],
-                dest_key='AvailabilityZones')
+                dest_key='AvailabilityZones',
+            )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='InstanceProfile',
-            dest_params=cluster, dest_key='JobFlowRole')
+            src_params=parsed_attrs,
+            src_key='InstanceProfile',
+            dest_params=cluster,
+            dest_key='JobFlowRole',
+        )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='EmrManagedMasterSecurityGroup',
-            dest_params=instances, dest_key='EmrManagedMasterSecurityGroup')
+            src_params=parsed_attrs,
+            src_key='EmrManagedMasterSecurityGroup',
+            dest_params=instances,
+            dest_key='EmrManagedMasterSecurityGroup',
+        )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='EmrManagedSlaveSecurityGroup',
-            dest_params=instances, dest_key='EmrManagedSlaveSecurityGroup')
+            src_params=parsed_attrs,
+            src_key='EmrManagedSlaveSecurityGroup',
+            dest_params=instances,
+            dest_key='EmrManagedSlaveSecurityGroup',
+        )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='ServiceAccessSecurityGroup',
-            dest_params=instances, dest_key='ServiceAccessSecurityGroup')
+            src_params=parsed_attrs,
+            src_key='ServiceAccessSecurityGroup',
+            dest_params=instances,
+            dest_key='ServiceAccessSecurityGroup',
+        )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='AdditionalMasterSecurityGroups',
-            dest_params=instances, dest_key='AdditionalMasterSecurityGroups')
+            src_params=parsed_attrs,
+            src_key='AdditionalMasterSecurityGroups',
+            dest_params=instances,
+            dest_key='AdditionalMasterSecurityGroups',
+        )
 
         emrutils.apply_params(
-            src_params=parsed_attrs, src_key='AdditionalSlaveSecurityGroups',
-            dest_params=instances, dest_key='AdditionalSlaveSecurityGroups')
+            src_params=parsed_attrs,
+            src_key='AdditionalSlaveSecurityGroups',
+            dest_params=instances,
+            dest_key='AdditionalSlaveSecurityGroups',
+        )
 
         emrutils.apply(params=cluster, key='Instances', value=instances)
 
         return cluster
 
-    def _build_bootstrap_actions(
-            self, cluster, parsed_boostrap_actions):
+    def _build_bootstrap_actions(self, cluster, parsed_boostrap_actions):
         cluster_ba_list = cluster.get('BootstrapActions')
         if cluster_ba_list is None:
             cluster_ba_list = []
 
         bootstrap_actions = []
-        if len(cluster_ba_list) + len(parsed_boostrap_actions) \
-                > constants.MAX_BOOTSTRAP_ACTION_NUMBER:
-            raise ParamValidationError('aws: error: maximum number of '
-                             'bootstrap actions for a cluster exceeded.')
+        if (
+            len(cluster_ba_list) + len(parsed_boostrap_actions)
+            > constants.MAX_BOOTSTRAP_ACTION_NUMBER
+        ):
+            raise ParamValidationError(
+                'aws: error: maximum number of '
+                'bootstrap actions for a cluster exceeded.'
+            )
 
         for ba in parsed_boostrap_actions:
             ba_config = {}
@@ -514,15 +709,22 @@ class CreateCluster(Command):
                 ba_config['Name'] = constants.BOOTSTRAP_ACTION_NAME
             script_arg_config = {}
             emrutils.apply_params(
-                src_params=ba, src_key='Path',
-                dest_params=script_arg_config, dest_key='Path')
+                src_params=ba,
+                src_key='Path',
+                dest_params=script_arg_config,
+                dest_key='Path',
+            )
             emrutils.apply_params(
-                src_params=ba, src_key='Args',
-                dest_params=script_arg_config, dest_key='Args')
+                src_params=ba,
+                src_key='Args',
+                dest_params=script_arg_config,
+                dest_key='Args',
+            )
             emrutils.apply(
                 params=ba_config,
                 key='ScriptBootstrapAction',
-                value=script_arg_config)
+                value=script_arg_config,
+            )
             bootstrap_actions.append(ba_config)
 
         result = cluster_ba_list + bootstrap_actions
@@ -537,15 +739,18 @@ class CreateCluster(Command):
             args = [constants.DEBUGGING_COMMAND]
         else:
             jar = emrutils.get_script_runner(self.region)
-            args = [emrutils.build_s3_link(
-                relative_path=constants.DEBUGGING_PATH,
-                region=self.region)]
+            args = [
+                emrutils.build_s3_link(
+                    relative_path=constants.DEBUGGING_PATH, region=self.region
+                )
+            ]
 
         return emrutils.build_step(
             name=constants.DEBUGGING_NAME,
             action_on_failure=constants.TERMINATE_CLUSTER,
             jar=jar,
-            args=args)
+            args=args,
+        )
 
     def _update_cluster_dict(self, cluster, key, value):
         if key in cluster:
@@ -555,29 +760,34 @@ class CreateCluster(Command):
         return cluster
 
     def _validate_release_label_ami_version(self, parsed_args):
-        if parsed_args.ami_version is not None and \
-                parsed_args.release_label is not None:
+        if (
+            parsed_args.ami_version is not None
+            and parsed_args.release_label is not None
+        ):
             raise exceptions.MutualExclusiveOptionError(
-                option1="--ami-version",
-                option2="--release-label")
+                option1="--ami-version", option2="--release-label"
+            )
 
-        if parsed_args.ami_version is None and \
-                parsed_args.release_label is None:
+        if (
+            parsed_args.ami_version is None
+            and parsed_args.release_label is None
+        ):
             raise exceptions.RequiredOptionsError(
-                option1="--ami-version",
-                option2="--release-label")
+                option1="--ami-version", option2="--release-label"
+            )
 
     # Checks if the applications required by steps are specified
     # using the --applications option.
     def _validate_required_applications(self, parsed_args):
-
         specified_apps = set([])
         if parsed_args.applications is not None:
-            specified_apps = \
-                set([app['Name'].lower() for app in parsed_args.applications])
+            specified_apps = set(
+                [app['Name'].lower() for app in parsed_args.applications]
+            )
 
-        missing_apps = self._get_missing_applications_for_steps(specified_apps,
-                                                                parsed_args)
+        missing_apps = self._get_missing_applications_for_steps(
+            specified_apps, parsed_args
+        )
         # Check for HBase.
         if parsed_args.restore_from_hbase_backup is not None:
             if constants.HBASE not in specified_apps:
@@ -585,11 +795,13 @@ class CreateCluster(Command):
 
         if missing_apps:
             raise exceptions.MissingApplicationsError(
-                applications=missing_apps)
+                applications=missing_apps
+            )
 
     def _get_missing_applications_for_steps(self, specified_apps, parsed_args):
-        allowed_app_steps = set([constants.HIVE, constants.PIG,
-                                 constants.IMPALA])
+        allowed_app_steps = set(
+            [constants.HIVE, constants.PIG, constants.IMPALA]
+        )
         missing_apps = set()
         if parsed_args.steps is not None:
             for step in parsed_args.steps:
@@ -599,38 +811,51 @@ class CreateCluster(Command):
 
                 if step_type is not None:
                     step_type = step_type.lower()
-                    if step_type in allowed_app_steps and \
-                            step_type not in specified_apps:
+                    if (
+                        step_type in allowed_app_steps
+                        and step_type not in specified_apps
+                    ):
                         missing_apps.add(step['Type'].title())
         return missing_apps
 
-    def _filter_configurations_in_special_cases(self, configurations,
-                                                parsed_args, parsed_configs):
+    def _filter_configurations_in_special_cases(
+        self, configurations, parsed_args, parsed_configs
+    ):
         if parsed_args.use_default_roles:
-            configurations = [x for x in configurations
-                              if x.name != 'service_role' and
-                              x.name != 'instance_profile']
+            configurations = [
+                x
+                for x in configurations
+                if x.name != 'service_role' and x.name != 'instance_profile'
+            ]
         return configurations
 
     def _handle_emrfs_parameters(self, cluster, emrfs_args, release_label):
         if release_label:
             self.validate_no_emrfs_configuration(cluster)
             emrfs_configuration = emrfsutils.build_emrfs_confiuration(
-                emrfs_args)
+                emrfs_args
+            )
 
             self._update_cluster_dict(
-                cluster=cluster, key='Configurations',
-                value=[emrfs_configuration])
+                cluster=cluster,
+                key='Configurations',
+                value=[emrfs_configuration],
+            )
         else:
             emrfs_ba_config_list = emrfsutils.build_bootstrap_action_configs(
-                self.region, emrfs_args)
+                self.region, emrfs_args
+            )
             self._update_cluster_dict(
-                cluster=cluster, key='BootstrapActions',
-                value=emrfs_ba_config_list)
+                cluster=cluster,
+                key='BootstrapActions',
+                value=emrfs_ba_config_list,
+            )
 
     def validate_no_emrfs_configuration(self, cluster):
         if 'Configurations' in cluster:
             for config in cluster['Configurations']:
-                if config is not None and \
-                        config.get('Classification') == constants.EMRFS_SITE:
+                if (
+                    config is not None
+                    and config.get('Classification') == constants.EMRFS_SITE
+                ):
                     raise exceptions.DuplicateEmrFsConfigurationError
diff -pruN 2.23.6-1/awscli/customizations/emr/createdefaultroles.py 2.31.35-1/awscli/customizations/emr/createdefaultroles.py
--- 2.23.6-1/awscli/customizations/emr/createdefaultroles.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/createdefaultroles.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,32 +13,30 @@
 
 import logging
 import re
+
 import botocore.exceptions
 import botocore.session
 from botocore import xform_name
 
-from awscli.customizations.utils import get_policy_arn_suffix
-from awscli.customizations.emr import configutils
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import configutils, emrutils, exceptions
 from awscli.customizations.emr.command import Command
-from awscli.customizations.emr.constants import EC2
-from awscli.customizations.emr.constants import EC2_ROLE_NAME
-from awscli.customizations.emr.constants import EC2_SERVICE_PRINCIPAL
-from awscli.customizations.emr.constants import ROLE_ARN_PATTERN
-from awscli.customizations.emr.constants import EMR
-from awscli.customizations.emr.constants import EMR_ROLE_NAME
-from awscli.customizations.emr.constants import EMR_AUTOSCALING_ROLE_NAME
-from awscli.customizations.emr.constants import APPLICATION_AUTOSCALING
-from awscli.customizations.emr.constants import EC2_ROLE_POLICY_NAME
-from awscli.customizations.emr.constants import EMR_ROLE_POLICY_NAME
-from awscli.customizations.emr.constants \
-    import EMR_AUTOSCALING_ROLE_POLICY_NAME
-from awscli.customizations.emr.constants import EMR_AUTOSCALING_SERVICE_NAME
-from awscli.customizations.emr.constants \
-    import EMR_AUTOSCALING_SERVICE_PRINCIPAL
+from awscli.customizations.emr.constants import (
+    APPLICATION_AUTOSCALING,
+    EC2,
+    EC2_ROLE_NAME,
+    EC2_ROLE_POLICY_NAME,
+    EC2_SERVICE_PRINCIPAL,
+    EMR,
+    EMR_AUTOSCALING_ROLE_NAME,
+    EMR_AUTOSCALING_ROLE_POLICY_NAME,
+    EMR_AUTOSCALING_SERVICE_NAME,
+    EMR_AUTOSCALING_SERVICE_PRINCIPAL,
+    EMR_ROLE_NAME,
+    EMR_ROLE_POLICY_NAME,
+    ROLE_ARN_PATTERN,
+)
 from awscli.customizations.emr.exceptions import ResolveServicePrincipalError
-
+from awscli.customizations.utils import get_policy_arn_suffix
 
 LOG = logging.getLogger(__name__)
 
@@ -51,9 +49,9 @@ def assume_role_policy(serviceprincipal)
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {"Service": serviceprincipal},
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
 
@@ -94,107 +92,138 @@ def _get_suffix_and_region_from_endpoint
 def _get_regex_match_from_endpoint_host(endpoint_host):
     if endpoint_host is None:
         return None
-    regex_match = re.match("(https?://)([^.]+).elasticmapreduce.([^/]*)",
-                           endpoint_host)
+    regex_match = re.match(
+        "(https?://)([^.]+).elasticmapreduce.([^/]*)", endpoint_host
+    )
 
     # Supports 'elasticmapreduce.{region}.' and '{region}.elasticmapreduce.'
     if regex_match is None:
-        regex_match = re.match("(https?://elasticmapreduce).([^.]+).([^/]*)",
-                               endpoint_host)
+        regex_match = re.match(
+            "(https?://elasticmapreduce).([^.]+).([^/]*)", endpoint_host
+        )
     return regex_match
 
 
 class CreateDefaultRoles(Command):
     NAME = "create-default-roles"
-    DESCRIPTION = ('Creates the default IAM role ' +
-                   EC2_ROLE_NAME + ' and ' +
-                   EMR_ROLE_NAME + ' which can be used when creating the'
-                   ' cluster using the create-cluster command. The default'
-                   ' roles for EMR use managed policies, which are updated'
-                   ' automatically to support future EMR functionality.\n'
-                   '\nIf you do not have a Service Role and Instance Profile '
-                   'variable set for your create-cluster command in the AWS '
-                   'CLI config file, create-default-roles will automatically '
-                   'set the values for these variables with these default '
-                   'roles. If you have already set a value for Service Role '
-                   'or Instance Profile, create-default-roles will not '
-                   'automatically set the defaults for these variables in the '
-                   'AWS CLI config file. You can view settings for variables '
-                   'in the config file using the "aws configure get" command.'
-                   '\n')
+    DESCRIPTION = (
+        'Creates the default IAM role '
+        + EC2_ROLE_NAME
+        + ' and '
+        + EMR_ROLE_NAME
+        + ' which can be used when creating the'
+        ' cluster using the create-cluster command. The default'
+        ' roles for EMR use managed policies, which are updated'
+        ' automatically to support future EMR functionality.\n'
+        '\nIf you do not have a Service Role and Instance Profile '
+        'variable set for your create-cluster command in the AWS '
+        'CLI config file, create-default-roles will automatically '
+        'set the values for these variables with these default '
+        'roles. If you have already set a value for Service Role '
+        'or Instance Profile, create-default-roles will not '
+        'automatically set the defaults for these variables in the '
+        'AWS CLI config file. You can view settings for variables '
+        'in the config file using the "aws configure get" command.'
+        '\n'
+    )
     ARG_TABLE = [
-        {'name': 'iam-endpoint',
-         'no_paramfile': True,
-         'help_text': '<p>The IAM endpoint to call for creating the roles.'
-                      ' This is optional and should only be specified when a'
-                      ' custom endpoint should be called for IAM operations'
-                      '.</p>'}
+        {
+            'name': 'iam-endpoint',
+            'no_paramfile': True,
+            'help_text': '<p>The IAM endpoint to call for creating the roles.'
+            ' This is optional and should only be specified when a'
+            ' custom endpoint should be called for IAM operations'
+            '.</p>',
+        }
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
-
         self.iam_endpoint_url = parsed_args.iam_endpoint
 
         self._check_for_iam_endpoint(self.region, self.iam_endpoint_url)
-        self.emr_endpoint_url = \
-            self._session.create_client(
-                'emr',
-                region_name=self.region,
-                endpoint_url=parsed_globals.endpoint_url,
-                verify=parsed_globals.verify_ssl).meta.endpoint_url
-
-        LOG.debug('elasticmapreduce endpoint used for resolving'
-                  ' service principal: ' + self.emr_endpoint_url)
+        self.emr_endpoint_url = self._session.create_client(
+            'emr',
+            region_name=self.region,
+            endpoint_url=parsed_globals.endpoint_url,
+            verify=parsed_globals.verify_ssl,
+        ).meta.endpoint_url
+
+        LOG.debug(
+            'elasticmapreduce endpoint used for resolving'
+            ' service principal: ' + self.emr_endpoint_url
+        )
 
         # Create default EC2 Role for EMR if it does not exist.
-        ec2_result, ec2_policy = self._create_role_if_not_exists(parsed_globals, EC2_ROLE_NAME,
-                                                                 EC2_ROLE_POLICY_NAME, [EC2])
+        ec2_result, ec2_policy = self._create_role_if_not_exists(
+            parsed_globals, EC2_ROLE_NAME, EC2_ROLE_POLICY_NAME, [EC2]
+        )
 
         # Create default EC2 Instance Profile for EMR if it does not exist.
         instance_profile_name = EC2_ROLE_NAME
-        if self.check_if_instance_profile_exists(instance_profile_name,
-                                                 parsed_globals):
+        if self.check_if_instance_profile_exists(
+            instance_profile_name, parsed_globals
+        ):
             LOG.debug('Instance Profile ' + instance_profile_name + ' exists.')
         else:
-            LOG.debug('Instance Profile ' + instance_profile_name +
-                      'does not exist. Creating default Instance Profile ' +
-                      instance_profile_name)
-            self._create_instance_profile_with_role(instance_profile_name,
-                                                    instance_profile_name,
-                                                    parsed_globals)
+            LOG.debug(
+                'Instance Profile '
+                + instance_profile_name
+                + 'does not exist. Creating default Instance Profile '
+                + instance_profile_name
+            )
+            self._create_instance_profile_with_role(
+                instance_profile_name, instance_profile_name, parsed_globals
+            )
 
         # Create default EMR Role if it does not exist.
-        emr_result, emr_policy = self._create_role_if_not_exists(parsed_globals, EMR_ROLE_NAME,
-                                                                 EMR_ROLE_POLICY_NAME, [EMR])
+        emr_result, emr_policy = self._create_role_if_not_exists(
+            parsed_globals, EMR_ROLE_NAME, EMR_ROLE_POLICY_NAME, [EMR]
+        )
 
         # Create default EMR AutoScaling Role if it does not exist.
-        emr_autoscaling_result, emr_autoscaling_policy = \
-            self._create_role_if_not_exists(parsed_globals, EMR_AUTOSCALING_ROLE_NAME,
-                                            EMR_AUTOSCALING_ROLE_POLICY_NAME, [EMR, APPLICATION_AUTOSCALING])
+        emr_autoscaling_result, emr_autoscaling_policy = (
+            self._create_role_if_not_exists(
+                parsed_globals,
+                EMR_AUTOSCALING_ROLE_NAME,
+                EMR_AUTOSCALING_ROLE_POLICY_NAME,
+                [EMR, APPLICATION_AUTOSCALING],
+            )
+        )
 
         configutils.update_roles(self._session)
         emrutils.display_response(
             self._session,
             'create_role',
-            self._construct_result(ec2_result, ec2_policy,
-                                   emr_result, emr_policy,
-                                   emr_autoscaling_result, emr_autoscaling_policy),
-            parsed_globals)
+            self._construct_result(
+                ec2_result,
+                ec2_policy,
+                emr_result,
+                emr_policy,
+                emr_autoscaling_result,
+                emr_autoscaling_policy,
+            ),
+            parsed_globals,
+        )
 
         return 0
 
-    def _create_role_if_not_exists(self, parsed_globals, role_name, policy_name, service_names):
+    def _create_role_if_not_exists(
+        self, parsed_globals, role_name, policy_name, service_names
+    ):
         result = None
         policy = None
 
         if self.check_if_role_exists(role_name, parsed_globals):
             LOG.debug('Role ' + role_name + ' exists.')
         else:
-            LOG.debug('Role ' + role_name + ' does not exist.'
-                      ' Creating default role: ' + role_name)
+            LOG.debug(
+                'Role ' + role_name + ' does not exist.'
+                ' Creating default role: ' + role_name
+            )
             role_arn = get_role_policy_arn(self.region, policy_name)
             result = self._create_role_with_role_policy(
-                    role_name, service_names, role_arn, parsed_globals)
+                role_name, service_names, role_arn, parsed_globals
+            )
             policy = self._get_role_policy(role_arn, parsed_globals)
         return result, policy
 
@@ -205,20 +234,30 @@ class CreateDefaultRoles(Command):
             if iam_endpoint is None:
                 raise exceptions.UnknownIamEndpointError(region=region)
 
-    def _construct_result(self, ec2_response, ec2_policy,
-                          emr_response, emr_policy,
-                          emr_autoscaling_response, emr_autoscaling_policy):
+    def _construct_result(
+        self,
+        ec2_response,
+        ec2_policy,
+        emr_response,
+        emr_policy,
+        emr_autoscaling_response,
+        emr_autoscaling_policy,
+    ):
         result = []
         self._construct_role_and_role_policy_structure(
-            result, ec2_response, ec2_policy)
+            result, ec2_response, ec2_policy
+        )
         self._construct_role_and_role_policy_structure(
-            result, emr_response, emr_policy)
+            result, emr_response, emr_policy
+        )
         self._construct_role_and_role_policy_structure(
-            result, emr_autoscaling_response, emr_autoscaling_policy)
+            result, emr_autoscaling_response, emr_autoscaling_policy
+        )
         return result
 
     def _construct_role_and_role_policy_structure(
-            self, list, response, policy):
+        self, list, response, policy
+    ):
         if response is not None and response['Role'] is not None:
             list.append({'Role': response['Role'], 'RolePolicy': policy})
             return list
@@ -240,12 +279,14 @@ class CreateDefaultRoles(Command):
 
         return True
 
-    def check_if_instance_profile_exists(self, instance_profile_name,
-                                         parsed_globals):
+    def check_if_instance_profile_exists(
+        self, instance_profile_name, parsed_globals
+    ):
         parameters = {'InstanceProfileName': instance_profile_name}
         try:
-            self._call_iam_operation('GetInstanceProfile', parameters,
-                                     parsed_globals)
+            self._call_iam_operation(
+                'GetInstanceProfile', parameters, parsed_globals
+            )
         except botocore.exceptions.ClientError as e:
             profile_not_found_code = 'NoSuchEntity'
             error_code = e.response.get('Error', {}).get('Code')
@@ -261,59 +302,74 @@ class CreateDefaultRoles(Command):
     def _get_role_policy(self, arn, parsed_globals):
         parameters = {}
         parameters['PolicyArn'] = arn
-        policy_details = self._call_iam_operation('GetPolicy', parameters,
-                                                  parsed_globals)
+        policy_details = self._call_iam_operation(
+            'GetPolicy', parameters, parsed_globals
+        )
         parameters["VersionId"] = policy_details["Policy"]["DefaultVersionId"]
-        policy_version_details = self._call_iam_operation('GetPolicyVersion',
-                                                          parameters,
-                                                          parsed_globals)
+        policy_version_details = self._call_iam_operation(
+            'GetPolicyVersion', parameters, parsed_globals
+        )
         return policy_version_details["PolicyVersion"]["Document"]
 
     def _create_role_with_role_policy(
-            self, role_name, service_names, role_arn, parsed_globals):
-
+        self, role_name, service_names, role_arn, parsed_globals
+    ):
         if len(service_names) == 1:
             service_principal = get_service_principal(
-                service_names[0], self.emr_endpoint_url, self._session)
+                service_names[0], self.emr_endpoint_url, self._session
+            )
         else:
             service_principal = []
             for service in service_names:
-                service_principal.append(get_service_principal(
-                    service, self.emr_endpoint_url, self._session))
-
-        LOG.debug(f'Adding service principal(s) to trust policy: {service_principal}')
+                service_principal.append(
+                    get_service_principal(
+                        service, self.emr_endpoint_url, self._session
+                    )
+                )
+
+        LOG.debug(
+            f'Adding service principal(s) to trust policy: {service_principal}'
+        )
 
         parameters = {'RoleName': role_name}
-        _assume_role_policy = \
-            emrutils.dict_to_string(assume_role_policy(service_principal))
+        _assume_role_policy = emrutils.dict_to_string(
+            assume_role_policy(service_principal)
+        )
         parameters['AssumeRolePolicyDocument'] = _assume_role_policy
-        create_role_response = self._call_iam_operation('CreateRole',
-                                                        parameters,
-                                                        parsed_globals)
+        create_role_response = self._call_iam_operation(
+            'CreateRole', parameters, parsed_globals
+        )
 
         parameters = {}
         parameters['PolicyArn'] = role_arn
         parameters['RoleName'] = role_name
-        self._call_iam_operation('AttachRolePolicy',
-                                 parameters, parsed_globals)
+        self._call_iam_operation(
+            'AttachRolePolicy', parameters, parsed_globals
+        )
 
         return create_role_response
 
-    def _create_instance_profile_with_role(self, instance_profile_name,
-                                           role_name, parsed_globals):
+    def _create_instance_profile_with_role(
+        self, instance_profile_name, role_name, parsed_globals
+    ):
         # Creating an Instance Profile
         parameters = {'InstanceProfileName': instance_profile_name}
-        self._call_iam_operation('CreateInstanceProfile', parameters,
-                                 parsed_globals)
+        self._call_iam_operation(
+            'CreateInstanceProfile', parameters, parsed_globals
+        )
         # Adding the role to the Instance Profile
         parameters = {}
         parameters['InstanceProfileName'] = instance_profile_name
         parameters['RoleName'] = role_name
-        self._call_iam_operation('AddRoleToInstanceProfile', parameters,
-                                 parsed_globals)
+        self._call_iam_operation(
+            'AddRoleToInstanceProfile', parameters, parsed_globals
+        )
 
     def _call_iam_operation(self, operation_name, parameters, parsed_globals):
         client = self._session.create_client(
-            'iam', region_name=self.region, endpoint_url=self.iam_endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            'iam',
+            region_name=self.region,
+            endpoint_url=self.iam_endpoint_url,
+            verify=parsed_globals.verify_ssl,
+        )
         return getattr(client, xform_name(operation_name))(**parameters)
diff -pruN 2.23.6-1/awscli/customizations/emr/describecluster.py 2.31.35-1/awscli/customizations/emr/describecluster.py
--- 2.23.6-1/awscli/customizations/emr/describecluster.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/describecluster.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,22 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+from botocore.exceptions import NoCredentialsError
+
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import helptext
+from awscli.customizations.emr import constants, emrutils, helptext
 from awscli.customizations.emr.command import Command
-from botocore.exceptions import NoCredentialsError
 
 
 class DescribeCluster(Command):
     NAME = 'describe-cluster'
     DESCRIPTION = helptext.DESCRIBE_CLUSTER_DESCRIPTION
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        }
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
@@ -34,44 +36,61 @@ class DescribeCluster(Command):
         is_fleet_based_cluster = False
 
         describe_cluster_result = self._call(
-            self._session, 'describe_cluster', parameters, parsed_globals)
-
+            self._session, 'describe_cluster', parameters, parsed_globals
+        )
 
         if 'Cluster' in describe_cluster_result:
             describe_cluster = describe_cluster_result['Cluster']
-            if describe_cluster.get('InstanceCollectionType') == constants.INSTANCE_FLEET_TYPE:
+            if (
+                describe_cluster.get('InstanceCollectionType')
+                == constants.INSTANCE_FLEET_TYPE
+            ):
                 is_fleet_based_cluster = True
 
         if is_fleet_based_cluster:
             list_instance_fleets_result = self._call(
-                self._session, 'list_instance_fleets', parameters,
-                parsed_globals)
+                self._session,
+                'list_instance_fleets',
+                parameters,
+                parsed_globals,
+            )
         else:
             list_instance_groups_result = self._call(
-                self._session, 'list_instance_groups', parameters,
-                parsed_globals)
+                self._session,
+                'list_instance_groups',
+                parameters,
+                parsed_globals,
+            )
 
         list_bootstrap_actions_result = self._call(
-            self._session, 'list_bootstrap_actions',
-            parameters, parsed_globals)
+            self._session, 'list_bootstrap_actions', parameters, parsed_globals
+        )
 
         constructed_result = self._construct_result(
             describe_cluster_result,
             list_instance_fleets_result,
             list_instance_groups_result,
-            list_bootstrap_actions_result)
+            list_bootstrap_actions_result,
+        )
 
-        emrutils.display_response(self._session, 'describe_cluster',
-                                  constructed_result, parsed_globals)
+        emrutils.display_response(
+            self._session,
+            'describe_cluster',
+            constructed_result,
+            parsed_globals,
+        )
 
         return 0
 
     def _call(self, session, operation_name, parameters, parsed_globals):
         return emrutils.call(
-            session, operation_name, parameters,
+            session,
+            operation_name,
+            parameters,
             region_name=self.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
 
     def _get_key_of_result(self, keys):
         # Return the first key that is not "Marker"
@@ -80,23 +99,36 @@ class DescribeCluster(Command):
                 return key
 
     def _construct_result(
-            self, describe_cluster_result, list_instance_fleets_result,
-            list_instance_groups_result, list_bootstrap_actions_result):
+        self,
+        describe_cluster_result,
+        list_instance_fleets_result,
+        list_instance_groups_result,
+        list_bootstrap_actions_result,
+    ):
         result = describe_cluster_result
         result['Cluster']['BootstrapActions'] = []
 
-        if (list_instance_fleets_result is not None and
-                list_instance_fleets_result.get('InstanceFleets') is not None):
-            result['Cluster']['InstanceFleets'] = \
+        if (
+            list_instance_fleets_result is not None
+            and list_instance_fleets_result.get('InstanceFleets') is not None
+        ):
+            result['Cluster']['InstanceFleets'] = (
                 list_instance_fleets_result.get('InstanceFleets')
-        if (list_instance_groups_result is not None and
-                list_instance_groups_result.get('InstanceGroups') is not None):
-            result['Cluster']['InstanceGroups'] = \
+            )
+        if (
+            list_instance_groups_result is not None
+            and list_instance_groups_result.get('InstanceGroups') is not None
+        ):
+            result['Cluster']['InstanceGroups'] = (
                 list_instance_groups_result.get('InstanceGroups')
-        if (list_bootstrap_actions_result is not None and
-                list_bootstrap_actions_result.get('BootstrapActions')
-                is not None):
-            result['Cluster']['BootstrapActions'] = \
+            )
+        if (
+            list_bootstrap_actions_result is not None
+            and list_bootstrap_actions_result.get('BootstrapActions')
+            is not None
+        ):
+            result['Cluster']['BootstrapActions'] = (
                 list_bootstrap_actions_result['BootstrapActions']
+            )
 
         return result
diff -pruN 2.23.6-1/awscli/customizations/emr/emr.py 2.31.35-1/awscli/customizations/emr/emr.py
--- 2.23.6-1/awscli/customizations/emr/emr.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/emr.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,20 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import hbase
-from awscli.customizations.emr import ssh
+from awscli.customizations.emr import hbase, ssh
+from awscli.customizations.emr.addinstancegroups import AddInstanceGroups
 from awscli.customizations.emr.addsteps import AddSteps
+from awscli.customizations.emr.addtags import modify_tags_argument
+from awscli.customizations.emr.command import override_args_required_option
 from awscli.customizations.emr.createcluster import CreateCluster
-from awscli.customizations.emr.addinstancegroups import AddInstanceGroups
 from awscli.customizations.emr.createdefaultroles import CreateDefaultRoles
-from awscli.customizations.emr.modifyclusterattributes import ModifyClusterAttr
-from awscli.customizations.emr.installapplications import InstallApplications
 from awscli.customizations.emr.describecluster import DescribeCluster
+from awscli.customizations.emr.installapplications import InstallApplications
+from awscli.customizations.emr.listclusters import (
+    modify_list_clusters_argument,
+)
+from awscli.customizations.emr.modifyclusterattributes import ModifyClusterAttr
 from awscli.customizations.emr.terminateclusters import TerminateClusters
-from awscli.customizations.emr.addtags import modify_tags_argument
-from awscli.customizations.emr.listclusters \
-    import modify_list_clusters_argument
-from awscli.customizations.emr.command import override_args_required_option
 
 
 def emr_initialize(cli):
@@ -35,9 +35,12 @@ def emr_initialize(cli):
     cli.register('building-argument-table.emr.add-tags', modify_tags_argument)
     cli.register(
         'building-argument-table.emr.list-clusters',
-        modify_list_clusters_argument)
-    cli.register('before-building-argument-table-parser.emr.*',
-                 override_args_required_option)
+        modify_list_clusters_argument,
+    )
+    cli.register(
+        'before-building-argument-table-parser.emr.*',
+        override_args_required_option,
+    )
 
 
 def register_commands(command_table, session, **kwargs):
@@ -52,12 +55,12 @@ def register_commands(command_table, ses
     command_table['install-applications'] = InstallApplications(session)
     command_table['create-cluster'] = CreateCluster(session)
     command_table['add-steps'] = AddSteps(session)
-    command_table['restore-from-hbase-backup'] = \
-        hbase.RestoreFromHBaseBackup(session)
+    command_table['restore-from-hbase-backup'] = hbase.RestoreFromHBaseBackup(
+        session
+    )
     command_table['create-hbase-backup'] = hbase.CreateHBaseBackup(session)
     command_table['schedule-hbase-backup'] = hbase.ScheduleHBaseBackup(session)
-    command_table['disable-hbase-backups'] = \
-        hbase.DisableHBaseBackups(session)
+    command_table['disable-hbase-backups'] = hbase.DisableHBaseBackups(session)
     command_table['create-default-roles'] = CreateDefaultRoles(session)
     command_table['add-instance-groups'] = AddInstanceGroups(session)
     command_table['ssh'] = ssh.SSH(session)
diff -pruN 2.23.6-1/awscli/customizations/emr/emrfsutils.py 2.31.35-1/awscli/customizations/emr/emrfsutils.py
--- 2.23.6-1/awscli/customizations/emr/emrfsutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/emrfsutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
 from botocore.compat import OrderedDict
 
+from awscli.customizations.emr import constants, emrutils, exceptions
 
 CONSISTENT_OPTIONAL_KEYS = ['RetryCount', 'RetryPeriod']
 CSE_KMS_REQUIRED_KEYS = ['KMSKeyId']
@@ -40,20 +38,26 @@ def build_bootstrap_action_configs(regio
             emrutils.build_bootstrap_action(
                 path=constants.EMRFS_CSE_CUSTOM_S3_GET_BA_PATH,
                 name=constants.S3_GET_BA_NAME,
-                args=[constants.S3_GET_BA_SRC,
-                      emrfs_args.get('CustomProviderLocation'),
-                      constants.S3_GET_BA_DEST,
-                      constants.EMRFS_CUSTOM_DEST_PATH,
-                      constants.S3_GET_BA_FORCE]))
+                args=[
+                    constants.S3_GET_BA_SRC,
+                    emrfs_args.get('CustomProviderLocation'),
+                    constants.S3_GET_BA_DEST,
+                    constants.EMRFS_CUSTOM_DEST_PATH,
+                    constants.S3_GET_BA_FORCE,
+                ],
+            )
+        )
 
     emrfs_setup_ba_args = _build_ba_args_to_setup_emrfs(emrfs_args)
     bootstrap_actions.append(
         emrutils.build_bootstrap_action(
             path=emrutils.build_s3_link(
-                relative_path=constants.CONFIG_HADOOP_PATH,
-                region=region),
+                relative_path=constants.CONFIG_HADOOP_PATH, region=region
+            ),
             name=constants.EMRFS_BA_NAME,
-            args=emrfs_setup_ba_args))
+            args=emrfs_setup_ba_args,
+        )
+    )
 
     return bootstrap_actions
 
@@ -63,74 +67,95 @@ def build_emrfs_confiuration(emrfs_args)
     emrfs_properties = _build_emrfs_properties(emrfs_args)
 
     if _need_to_configure_cse(emrfs_args, 'CUSTOM'):
-        emrfs_properties[constants.EMRFS_CSE_CUSTOM_PROVIDER_URI_KEY] = \
+        emrfs_properties[constants.EMRFS_CSE_CUSTOM_PROVIDER_URI_KEY] = (
             emrfs_args.get('CustomProviderLocation')
+        )
 
     emrfs_configuration = {
         'Classification': constants.EMRFS_SITE,
-        'Properties': emrfs_properties}
+        'Properties': emrfs_properties,
+    }
 
     return emrfs_configuration
 
 
 def _verify_emrfs_args(emrfs_args):
     # Encryption should have a valid value
-    if 'Encryption' in emrfs_args \
-            and emrfs_args['Encryption'].upper() not in ENCRYPTION_TYPES:
+    if (
+        'Encryption' in emrfs_args
+        and emrfs_args['Encryption'].upper() not in ENCRYPTION_TYPES
+    ):
         raise exceptions.UnknownEncryptionTypeError(
-            encryption=emrfs_args['Encryption'])
+            encryption=emrfs_args['Encryption']
+        )
 
     # Only one of SSE and Encryption should be configured
     if 'SSE' in emrfs_args and 'Encryption' in emrfs_args:
         raise exceptions.BothSseAndEncryptionConfiguredError(
-            sse=emrfs_args['SSE'], encryption=emrfs_args['Encryption'])
+            sse=emrfs_args['SSE'], encryption=emrfs_args['Encryption']
+        )
 
     # CSE should be configured correctly
     # ProviderType should be present and should have valid value
     # Given the type, the required parameters should be present
-    if ('Encryption' in emrfs_args and
-            emrfs_args['Encryption'].upper() == constants.EMRFS_CLIENT_SIDE):
+    if (
+        'Encryption' in emrfs_args
+        and emrfs_args['Encryption'].upper() == constants.EMRFS_CLIENT_SIDE
+    ):
         if 'ProviderType' not in emrfs_args:
             raise exceptions.MissingParametersError(
-                object_name=CSE_OPTION_NAME, missing='ProviderType')
+                object_name=CSE_OPTION_NAME, missing='ProviderType'
+            )
         elif emrfs_args['ProviderType'].upper() not in CSE_PROVIDER_TYPES:
             raise exceptions.UnknownCseProviderTypeError(
-                provider_type=emrfs_args['ProviderType'])
+                provider_type=emrfs_args['ProviderType']
+            )
         elif emrfs_args['ProviderType'].upper() == 'KMS':
-            _verify_required_args(emrfs_args.keys(), CSE_KMS_REQUIRED_KEYS,
-                                  CSE_KMS_OPTION_NAME)
+            _verify_required_args(
+                emrfs_args.keys(), CSE_KMS_REQUIRED_KEYS, CSE_KMS_OPTION_NAME
+            )
         elif emrfs_args['ProviderType'].upper() == 'CUSTOM':
-            _verify_required_args(emrfs_args.keys(), CSE_CUSTOM_REQUIRED_KEYS,
-                                  CSE_CUSTOM_OPTION_NAME)
+            _verify_required_args(
+                emrfs_args.keys(),
+                CSE_CUSTOM_REQUIRED_KEYS,
+                CSE_CUSTOM_OPTION_NAME,
+            )
 
     # No child attributes should be present if the parent feature is not
     # configured
     if 'Consistent' not in emrfs_args:
-        _verify_child_args(emrfs_args.keys(), CONSISTENT_OPTIONAL_KEYS,
-                           CONSISTENT_OPTION_NAME)
+        _verify_child_args(
+            emrfs_args.keys(), CONSISTENT_OPTIONAL_KEYS, CONSISTENT_OPTION_NAME
+        )
     if not _need_to_configure_cse(emrfs_args, 'KMS'):
-        _verify_child_args(emrfs_args.keys(), CSE_KMS_REQUIRED_KEYS,
-                           CSE_KMS_OPTION_NAME)
+        _verify_child_args(
+            emrfs_args.keys(), CSE_KMS_REQUIRED_KEYS, CSE_KMS_OPTION_NAME
+        )
     if not _need_to_configure_cse(emrfs_args, 'CUSTOM'):
-        _verify_child_args(emrfs_args.keys(), CSE_CUSTOM_REQUIRED_KEYS,
-                           CSE_CUSTOM_OPTION_NAME)
+        _verify_child_args(
+            emrfs_args.keys(), CSE_CUSTOM_REQUIRED_KEYS, CSE_CUSTOM_OPTION_NAME
+        )
 
 
 def _verify_required_args(actual_keys, required_keys, object_name):
     if any(x not in actual_keys for x in required_keys):
         missing_keys = list(
-            sorted(set(required_keys).difference(set(actual_keys))))
+            sorted(set(required_keys).difference(set(actual_keys)))
+        )
         raise exceptions.MissingParametersError(
-            object_name=object_name, missing=emrutils.join(missing_keys))
+            object_name=object_name, missing=emrutils.join(missing_keys)
+        )
 
 
 def _verify_child_args(actual_keys, child_keys, parent_object_name):
     if any(x in actual_keys for x in child_keys):
         invalid_keys = list(
-            sorted(set(child_keys).intersection(set(actual_keys))))
+            sorted(set(child_keys).intersection(set(actual_keys)))
+        )
         raise exceptions.InvalidEmrFsArgumentsError(
             invalid=emrutils.join(invalid_keys),
-            parent_object_name=parent_object_name)
+            parent_object_name=parent_object_name,
+        )
 
 
 def _build_ba_args_to_setup_emrfs(emrfs_args):
@@ -170,29 +195,35 @@ def _need_to_configure_consistent_view(e
 
 
 def _need_to_configure_sse(emrfs_args):
-    return 'SSE' in emrfs_args \
-        or ('Encryption' in emrfs_args and
-            emrfs_args['Encryption'].upper() == constants.EMRFS_SERVER_SIDE)
+    return 'SSE' in emrfs_args or (
+        'Encryption' in emrfs_args
+        and emrfs_args['Encryption'].upper() == constants.EMRFS_SERVER_SIDE
+    )
 
 
 def _need_to_configure_cse(emrfs_args, cse_type):
-    return ('Encryption' in emrfs_args and
-            emrfs_args['Encryption'].upper() == constants.EMRFS_CLIENT_SIDE and
-            'ProviderType' in emrfs_args and
-            emrfs_args['ProviderType'].upper() == cse_type)
+    return (
+        'Encryption' in emrfs_args
+        and emrfs_args['Encryption'].upper() == constants.EMRFS_CLIENT_SIDE
+        and 'ProviderType' in emrfs_args
+        and emrfs_args['ProviderType'].upper() == cse_type
+    )
 
 
 def _update_properties_for_consistent_view(emrfs_properties, emrfs_args):
-    emrfs_properties[constants.EMRFS_CONSISTENT_KEY] = \
-        str(emrfs_args['Consistent']).lower()
+    emrfs_properties[constants.EMRFS_CONSISTENT_KEY] = str(
+        emrfs_args['Consistent']
+    ).lower()
 
     if 'RetryCount' in emrfs_args:
-        emrfs_properties[constants.EMRFS_RETRY_COUNT_KEY] = \
-            str(emrfs_args['RetryCount'])
+        emrfs_properties[constants.EMRFS_RETRY_COUNT_KEY] = str(
+            emrfs_args['RetryCount']
+        )
 
     if 'RetryPeriod' in emrfs_args:
-        emrfs_properties[constants.EMRFS_RETRY_PERIOD_KEY] = \
-            str(emrfs_args['RetryPeriod'])
+        emrfs_properties[constants.EMRFS_RETRY_PERIOD_KEY] = str(
+            emrfs_args['RetryPeriod']
+        )
 
 
 def _update_properties_for_sse(emrfs_properties, emrfs_args):
@@ -206,16 +237,17 @@ def _update_properties_for_cse(emrfs_pro
     emrfs_properties[constants.EMRFS_CSE_KEY] = 'true'
     if cse_type == 'KMS':
         emrfs_properties[
-            constants.EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY] = \
-            constants.EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAME
+            constants.EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY
+        ] = constants.EMRFS_CSE_KMS_PROVIDER_FULL_CLASS_NAME
 
-        emrfs_properties[constants.EMRFS_CSE_KMS_KEY_ID_KEY] =\
-            emrfs_args['KMSKeyId']
+        emrfs_properties[constants.EMRFS_CSE_KMS_KEY_ID_KEY] = emrfs_args[
+            'KMSKeyId'
+        ]
 
     elif cse_type == 'CUSTOM':
         emrfs_properties[
-            constants.EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY] = \
-            emrfs_args['CustomProviderClass']
+            constants.EMRFS_CSE_ENCRYPTION_MATERIALS_PROVIDER_KEY
+        ] = emrfs_args['CustomProviderClass']
 
 
 def _update_emrfs_ba_args(ba_args, key_value):
diff -pruN 2.23.6-1/awscli/customizations/emr/emrutils.py 2.31.35-1/awscli/customizations/emr/emrutils.py
--- 2.23.6-1/awscli/customizations/emr/emrutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/emrutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,13 +15,12 @@ import json
 import logging
 import os
 
+from botocore import xform_name
+from botocore.exceptions import NoCredentialsError, WaiterError
 
 from awscli.clidriver import CLIOperationCaller
+from awscli.customizations.emr import constants, exceptions
 from awscli.customizations.exceptions import ParamValidationError
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import exceptions
-from botocore.exceptions import WaiterError, NoCredentialsError
-from botocore import xform_name
 
 LOG = logging.getLogger(__name__)
 
@@ -57,11 +56,16 @@ def parse_key_value_string(key_value_str
 
 
 def apply_boolean_options(
-        true_option, true_option_name, false_option, false_option_name):
+    true_option, true_option_name, false_option, false_option_name
+):
     if true_option and false_option:
-        error_message = \
-            'aws: error: cannot use both ' + true_option_name + \
-            ' and ' + false_option_name + ' options together.'
+        error_message = (
+            'aws: error: cannot use both '
+            + true_option_name
+            + ' and '
+            + false_option_name
+            + ' options together.'
+        )
         raise ParamValidationError(error_message)
     elif true_option:
         return True
@@ -92,13 +96,14 @@ def apply_params(src_params, src_key, de
 
 
 def build_step(
-        jar, name='Step',
-        action_on_failure=constants.DEFAULT_FAILURE_ACTION,
-        args=None,
-        main_class=None,
-        properties=None):
-    check_required_field(
-        structure='HadoopJarStep', name='Jar', value=jar)
+    jar,
+    name='Step',
+    action_on_failure=constants.DEFAULT_FAILURE_ACTION,
+    args=None,
+    main_class=None,
+    properties=None,
+):
+    check_required_field(structure='HadoopJarStep', name='Jar', value=jar)
 
     step = {}
     apply_dict(step, 'Name', name)
@@ -113,13 +118,11 @@ def build_step(
     return step
 
 
-def build_bootstrap_action(
-        path,
-        name='Bootstrap Action',
-        args=None):
+def build_bootstrap_action(path, name='Bootstrap Action', args=None):
     if path is None:
         raise exceptions.MissingParametersError(
-            object_name='ScriptBootstrapActionConfig', missing='Path')
+            object_name='ScriptBootstrapActionConfig', missing='Path'
+        )
     ba_config = {}
     apply_dict(ba_config, 'Name', name)
     script_config = {}
@@ -133,20 +136,22 @@ def build_bootstrap_action(
 def build_s3_link(relative_path='', region='us-east-1'):
     if region is None:
         region = 'us-east-1'
-    return 's3://{0}.elasticmapreduce{1}'.format(region, relative_path)
+    return f's3://{region}.elasticmapreduce{relative_path}'
 
 
 def get_script_runner(region='us-east-1'):
     if region is None:
         region = 'us-east-1'
     return build_s3_link(
-        relative_path=constants.SCRIPT_RUNNER_PATH, region=region)
+        relative_path=constants.SCRIPT_RUNNER_PATH, region=region
+    )
 
 
 def check_required_field(structure, name, value):
     if not value:
         raise exceptions.MissingParametersError(
-            object_name=structure, missing=name)
+            object_name=structure, missing=name
+        )
 
 
 def check_empty_string_list(name, value):
@@ -154,8 +159,14 @@ def check_empty_string_list(name, value)
         raise exceptions.EmptyListError(param=name)
 
 
-def call(session, operation_name, parameters, region_name=None,
-         endpoint_url=None, verify=None):
+def call(
+    session,
+    operation_name,
+    parameters,
+    region_name=None,
+    endpoint_url=None,
+    verify=None,
+):
     # We could get an error from get_endpoint() about not having
     # a region configured.  Before this happens we want to check
     # for credentials so we can give a good error message.
@@ -163,8 +174,11 @@ def call(session, operation_name, parame
         raise NoCredentialsError()
 
     client = session.create_client(
-        'emr', region_name=region_name, endpoint_url=endpoint_url,
-        verify=verify)
+        'emr',
+        region_name=region_name,
+        endpoint_url=endpoint_url,
+        verify=verify,
+    )
     LOG.debug('Calling ' + str(operation_name))
     return getattr(client, operation_name)(**parameters)
 
@@ -182,7 +196,8 @@ def get_client(session, parsed_globals):
         'emr',
         region_name=get_region(session, parsed_globals),
         endpoint_url=parsed_globals.endpoint_url,
-        verify=parsed_globals.verify_ssl)
+        verify=parsed_globals.verify_ssl,
+    )
 
 
 def get_cluster_state(session, parsed_globals, cluster_id):
@@ -210,12 +225,13 @@ def which(program):
     return None
 
 
-def call_and_display_response(session, operation_name, parameters,
-                              parsed_globals):
+def call_and_display_response(
+    session, operation_name, parameters, parsed_globals
+):
     cli_operation_caller = CLIOperationCaller(session)
     cli_operation_caller.invoke(
-        'emr', operation_name,
-        parameters, parsed_globals)
+        'emr', operation_name, parameters, parsed_globals
+    )
 
 
 def display_response(session, operation_name, result, parsed_globals):
@@ -223,7 +239,8 @@ def display_response(session, operation_
     # Calling a private method. Should be changed after the functionality
     # is moved outside CliOperationCaller.
     cli_operation_caller._display_response(
-        operation_name, result, parsed_globals)
+        operation_name, result, parsed_globals
+    )
 
 
 def get_region(session, parsed_globals):
@@ -245,8 +262,9 @@ def join(values, separator=',', lastSepa
         return values[0]
     else:
         separator = '%s ' % separator
-        return ' '.join([separator.join(values[:-1]),
-                         lastSeparator, values[-1]])
+        return ' '.join(
+            [separator.join(values[:-1]), lastSeparator, values[-1]]
+        )
 
 
 def split_to_key_value(string):
@@ -256,21 +274,24 @@ def split_to_key_value(string):
         return string.split('=', 1)
 
 
-def get_cluster(cluster_id, session, region,
-                endpoint_url, verify_ssl):
-        describe_cluster_params = {'ClusterId': cluster_id}
-        describe_cluster_response = call(
-            session, 'describe_cluster', describe_cluster_params,
-            region, endpoint_url,
-            verify_ssl)
-
-        if describe_cluster_response is not None:
-            return describe_cluster_response.get('Cluster')
-
-
-def get_release_label(cluster_id, session, region,
-                      endpoint_url, verify_ssl):
-        cluster = get_cluster(cluster_id, session, region,
-                              endpoint_url, verify_ssl)
-        if cluster is not None:
-            return cluster.get('ReleaseLabel')
+def get_cluster(cluster_id, session, region, endpoint_url, verify_ssl):
+    describe_cluster_params = {'ClusterId': cluster_id}
+    describe_cluster_response = call(
+        session,
+        'describe_cluster',
+        describe_cluster_params,
+        region,
+        endpoint_url,
+        verify_ssl,
+    )
+
+    if describe_cluster_response is not None:
+        return describe_cluster_response.get('Cluster')
+
+
+def get_release_label(cluster_id, session, region, endpoint_url, verify_ssl):
+    cluster = get_cluster(
+        cluster_id, session, region, endpoint_url, verify_ssl
+    )
+    if cluster is not None:
+        return cluster.get('ReleaseLabel')
diff -pruN 2.23.6-1/awscli/customizations/emr/exceptions.py 2.31.35-1/awscli/customizations/emr/exceptions.py
--- 2.23.6-1/awscli/customizations/emr/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,12 +14,12 @@ from awscli.customizations.exceptions im
 
 
 class EmrError(Exception):
-
     """
     The base exception class for Emr exceptions.
 
     :ivar msg: The descriptive message associated with the error.
     """
+
     fmt = 'An unspecified error occurred'
 
     def __init__(self, **kwargs):
@@ -29,7 +29,6 @@ class EmrError(Exception):
 
 
 class MissingParametersError(EmrError, ParamValidationError):
-
     """
     One or more required parameters were not supplied.
 
@@ -40,168 +39,193 @@ class MissingParametersError(EmrError, P
         other than str().
     :ivar missing: The names of the missing parameters.
     """
-    fmt = ('aws: error: The following required parameters are missing for '
-           '{object_name}: {missing}.')
 
+    fmt = (
+        'aws: error: The following required parameters are missing for '
+        '{object_name}: {missing}.'
+    )
 
-class EmptyListError(EmrError, ParamValidationError):
 
+class EmptyListError(EmrError, ParamValidationError):
     """
     The provided list is empty.
 
     :ivar param: The provided list parameter
     """
-    fmt = ('aws: error: The prameter {param} cannot be an empty list.')
 
+    fmt = 'aws: error: The prameter {param} cannot be an empty list.'
 
-class MissingRequiredInstanceGroupsError(EmrError, ParamValidationError):
 
+class MissingRequiredInstanceGroupsError(EmrError, ParamValidationError):
     """
     In create-cluster command, none of --instance-group,
     --instance-count nor --instance-type were not supplied.
     """
-    fmt = ('aws: error: Must specify either --instance-groups or '
-           '--instance-type with --instance-count(optional) to '
-           'configure instance groups.')
 
+    fmt = (
+        'aws: error: Must specify either --instance-groups or '
+        '--instance-type with --instance-count(optional) to '
+        'configure instance groups.'
+    )
 
-class InstanceGroupsValidationError(EmrError, ParamValidationError):
 
+class InstanceGroupsValidationError(EmrError, ParamValidationError):
     """
     --instance-type and --instance-count are shortcut option
     for --instance-groups and they cannot be specified
     together with --instance-groups
     """
-    fmt = ('aws: error: You may not specify --instance-type '
-           'or --instance-count with --instance-groups, '
-           'because --instance-type and --instance-count are '
-           'shortcut options for --instance-groups.')
 
+    fmt = (
+        'aws: error: You may not specify --instance-type '
+        'or --instance-count with --instance-groups, '
+        'because --instance-type and --instance-count are '
+        'shortcut options for --instance-groups.'
+    )
 
-class InvalidAmiVersionError(EmrError, ParamValidationError):
 
+class InvalidAmiVersionError(EmrError, ParamValidationError):
     """
     The supplied ami-version is invalid.
     :ivar ami_version: The provided ami_version.
     """
-    fmt = ('aws: error: The supplied AMI version "{ami_version}" is invalid.'
-           ' Please see AMI Versions Supported in Amazon EMR in '
-           'Amazon Elastic MapReduce Developer Guide: '
-           'http://docs.aws.amazon.com/ElasticMapReduce/'
-           'latest/DeveloperGuide/ami-versions-supported.html')
 
+    fmt = (
+        'aws: error: The supplied AMI version "{ami_version}" is invalid.'
+        ' Please see AMI Versions Supported in Amazon EMR in '
+        'Amazon Elastic MapReduce Developer Guide: '
+        'http://docs.aws.amazon.com/ElasticMapReduce/'
+        'latest/DeveloperGuide/ami-versions-supported.html'
+    )
 
-class MissingBooleanOptionsError(EmrError, ParamValidationError):
 
+class MissingBooleanOptionsError(EmrError, ParamValidationError):
     """
     Required boolean options are not supplied.
 
     :ivar true_option
     :ivar false_option
     """
-    fmt = ('aws: error: Must specify one of the following boolean options: '
-           '{true_option}|{false_option}.')
 
+    fmt = (
+        'aws: error: Must specify one of the following boolean options: '
+        '{true_option}|{false_option}.'
+    )
 
-class UnknownStepTypeError(EmrError, ParamValidationError):
 
+class UnknownStepTypeError(EmrError, ParamValidationError):
     """
     The provided step type is not supported.
 
     :ivar step_type: the step_type provided.
     """
-    fmt = ('aws: error: The step type {step_type} is not supported.')
 
+    fmt = 'aws: error: The step type {step_type} is not supported.'
 
-class UnknownIamEndpointError(EmrError):
 
+class UnknownIamEndpointError(EmrError):
     """
     The IAM endpoint is not known for the specified region.
 
     :ivar region: The region specified.
     """
-    fmt = 'IAM endpoint not known for region: {region}.' +\
-          ' Specify the iam-endpoint using the --iam-endpoint option.'
 
+    fmt = (
+        'IAM endpoint not known for region: {region}.'
+        + ' Specify the iam-endpoint using the --iam-endpoint option.'
+    )
 
-class ResolveServicePrincipalError(EmrError):
 
+class ResolveServicePrincipalError(EmrError):
     """
     The service principal could not be resolved from the region or the
     endpoint.
     """
-    fmt = 'Could not resolve the service principal from' +\
-          ' the region or the endpoint.'
 
+    fmt = (
+        'Could not resolve the service principal from'
+        + ' the region or the endpoint.'
+    )
 
-class LogUriError(EmrError, ParamValidationError):
 
+class LogUriError(EmrError, ParamValidationError):
     """
     The LogUri is not specified and debugging is enabled for the cluster.
     """
-    fmt = ('aws: error: LogUri not specified. You must specify a logUri '
-           'if you enable debugging when creating a cluster.')
 
+    fmt = (
+        'aws: error: LogUri not specified. You must specify a logUri '
+        'if you enable debugging when creating a cluster.'
+    )
 
-class MasterDNSNotAvailableError(EmrError):
 
+class MasterDNSNotAvailableError(EmrError):
     """
     Cannot get dns of master node on the cluster.
     """
-    fmt = 'Cannot get DNS of master node on the cluster. '\
-          ' Please try again after some time.'
 
+    fmt = (
+        'Cannot get DNS of master node on the cluster. '
+        ' Please try again after some time.'
+    )
 
-class WrongPuttyKeyError(EmrError, ParamValidationError):
 
+class WrongPuttyKeyError(EmrError, ParamValidationError):
     """
     A wrong key has been used with a compatible program.
     """
-    fmt = 'Key file file format is incorrect. Putty expects a ppk file. '\
-          'Please refer to documentation at http://docs.aws.amazon.com/'\
-          'ElasticMapReduce/latest/DeveloperGuide/EMR_SetUp_SSH.html. '
 
+    fmt = (
+        'Key file file format is incorrect. Putty expects a ppk file. '
+        'Please refer to documentation at http://docs.aws.amazon.com/'
+        'ElasticMapReduce/latest/DeveloperGuide/EMR_SetUp_SSH.html. '
+    )
 
-class SSHNotFoundError(EmrError):
 
+class SSHNotFoundError(EmrError):
     """
     SSH or Putty not available.
     """
-    fmt = 'SSH or Putty not available. Please refer to the documentation '\
-          'at http://docs.aws.amazon.com/ElasticMapReduce/latest/'\
-          'DeveloperGuide/EMR_SetUp_SSH.html.'
 
+    fmt = (
+        'SSH or Putty not available. Please refer to the documentation '
+        'at http://docs.aws.amazon.com/ElasticMapReduce/latest/'
+        'DeveloperGuide/EMR_SetUp_SSH.html.'
+    )
 
-class SCPNotFoundError(EmrError):
 
+class SCPNotFoundError(EmrError):
     """
     SCP or Pscp not available.
     """
-    fmt = 'SCP or Pscp not available. Please refer to the documentation '\
-          'at http://docs.aws.amazon.com/ElasticMapReduce/latest/'\
-          'DeveloperGuide/EMR_SetUp_SSH.html. '
 
+    fmt = (
+        'SCP or Pscp not available. Please refer to the documentation '
+        'at http://docs.aws.amazon.com/ElasticMapReduce/latest/'
+        'DeveloperGuide/EMR_SetUp_SSH.html. '
+    )
 
-class SubnetAndAzValidationError(EmrError, ParamValidationError):
 
+class SubnetAndAzValidationError(EmrError, ParamValidationError):
     """
     SubnetId and AvailabilityZone are mutual exclusive in --ec2-attributes.
     """
-    fmt = ('aws: error: You may not specify both a SubnetId and an Availabili'
-           'tyZone (placement) because ec2SubnetId implies a placement.')
 
+    fmt = (
+        'aws: error: You may not specify both a SubnetId and an Availabili'
+        'tyZone (placement) because ec2SubnetId implies a placement.'
+    )
 
-class RequiredOptionsError(EmrError, ParamValidationError):
 
+class RequiredOptionsError(EmrError, ParamValidationError):
     """
     Either of option1 or option2 is required.
     """
 
-    fmt = ('aws: error: Either {option1} or {option2} is required.')
+    fmt = 'aws: error: Either {option1} or {option2} is required.'
 
 
 class MutualExclusiveOptionError(EmrError, ParamValidationError):
-
     """
     The provided option1 and option2 are mutually exclusive.
 
@@ -211,15 +235,18 @@ class MutualExclusiveOptionError(EmrErro
     """
 
     def __init__(self, **kwargs):
-        msg = ('aws: error: You cannot specify both ' +
-               kwargs.get('option1', '') + ' and ' +
-               kwargs.get('option2', '') + ' options together.' +
-               kwargs.get('message', ''))
+        msg = (
+            'aws: error: You cannot specify both '
+            + kwargs.get('option1', '')
+            + ' and '
+            + kwargs.get('option2', '')
+            + ' options together.'
+            + kwargs.get('message', '')
+        )
         Exception.__init__(self, msg)
 
 
 class MissingApplicationsError(EmrError, ParamValidationError):
-
     """
     The application required for a step is not installed when creating a
     cluster.
@@ -228,50 +255,56 @@ class MissingApplicationsError(EmrError,
     """
 
     def __init__(self, **kwargs):
-        msg = ('aws: error: Some of the steps require the following'
-               ' applications to be installed: ' +
-               ', '.join(kwargs['applications']) + '. Please install the'
-               ' applications using --applications.')
+        msg = (
+            'aws: error: Some of the steps require the following'
+            ' applications to be installed: '
+            + ', '.join(kwargs['applications'])
+            + '. Please install the'
+            ' applications using --applications.'
+        )
         Exception.__init__(self, msg)
 
 
 class ClusterTerminatedError(EmrError):
-
     """
     The cluster is terminating or has already terminated.
     """
+
     fmt = 'aws: error: Cluster terminating or already terminated.'
 
 
 class ClusterStatesFilterValidationError(EmrError, ParamValidationError):
-
     """
     In the list-clusters command, customers can specify only one
     of the following states filters:
     --cluster-states, --active, --terminated, --failed
 
     """
-    fmt = ('aws: error: You can specify only one of the cluster state '
-           'filters: --cluster-states, --active, --terminated, --failed.')
 
+    fmt = (
+        'aws: error: You can specify only one of the cluster state '
+        'filters: --cluster-states, --active, --terminated, --failed.'
+    )
 
-class MissingClusterAttributesError(EmrError, ParamValidationError):
 
+class MissingClusterAttributesError(EmrError, ParamValidationError):
     """
     In the modify-cluster-attributes command, customers need to provide
     at least one of the following cluster attributes: --visible-to-all-users,
     --no-visible-to-all-users, --termination-protected, --no-termination-protected,
     --auto-terminate and --no-auto-terminate
     """
-    fmt = ('aws: error: Must specify one of the following boolean options: '
-           '--visible-to-all-users|--no-visible-to-all-users, '
-           '--termination-protected|--no-termination-protected, '
-           '--auto-terminate|--no-auto-terminate, '
-           '--unhealthy-node-replacement|--no-unhealthy-node-replacement.')
 
+    fmt = (
+        'aws: error: Must specify one of the following boolean options: '
+        '--visible-to-all-users|--no-visible-to-all-users, '
+        '--termination-protected|--no-termination-protected, '
+        '--auto-terminate|--no-auto-terminate, '
+        '--unhealthy-node-replacement|--no-unhealthy-node-replacement.'
+    )
 
-class InvalidEmrFsArgumentsError(EmrError, ParamValidationError):
 
+class InvalidEmrFsArgumentsError(EmrError, ParamValidationError):
     """
     The provided EMRFS parameters are invalid as parent feature e.g.,
     Consistent View, CSE, SSE is not configured
@@ -280,40 +313,46 @@ class InvalidEmrFsArgumentsError(EmrErro
     :ivar parent_object_name: Parent feature name
     """
 
-    fmt = ('aws: error: {parent_object_name} is not specified. Thus, '
-           ' following parameters are invalid: {invalid}')
+    fmt = (
+        'aws: error: {parent_object_name} is not specified. Thus, '
+        ' following parameters are invalid: {invalid}'
+    )
 
 
 class DuplicateEmrFsConfigurationError(EmrError, ParamValidationError):
-
-    fmt = ('aws: error: EMRFS should be configured either using '
-           '--configuration or --emrfs but not both')
+    fmt = (
+        'aws: error: EMRFS should be configured either using '
+        '--configuration or --emrfs but not both'
+    )
 
 
 class UnknownCseProviderTypeError(EmrError, ParamValidationError):
-
     """
     The provided EMRFS client-side encryption provider type is not supported.
 
     :ivar provider_type: the provider_type provided.
     """
-    fmt = ('aws: error: The client side encryption type "{provider_type}" is '
-           'not supported. You must specify either KMS or Custom')
 
+    fmt = (
+        'aws: error: The client side encryption type "{provider_type}" is '
+        'not supported. You must specify either KMS or Custom'
+    )
 
-class UnknownEncryptionTypeError(EmrError, ParamValidationError):
 
+class UnknownEncryptionTypeError(EmrError, ParamValidationError):
     """
     The provided encryption type is not supported.
 
     :ivar provider_type: the provider_type provided.
     """
-    fmt = ('aws: error: The encryption type "{encryption}" is invalid. '
-           'You must specify either ServerSide or ClientSide')
 
+    fmt = (
+        'aws: error: The encryption type "{encryption}" is invalid. '
+        'You must specify either ServerSide or ClientSide'
+    )
 
-class BothSseAndEncryptionConfiguredError(EmrError, ParamValidationError):
 
+class BothSseAndEncryptionConfiguredError(EmrError, ParamValidationError):
     """
     Only one of SSE or Encryption can be configured.
 
@@ -321,25 +360,30 @@ class BothSseAndEncryptionConfiguredErro
     :ivar encryption: Value for encryption
     """
 
-    fmt = ('aws: error: Both SSE={sse} and Encryption={encryption} are '
-           'configured for --emrfs. You must specify only one of the two.')
+    fmt = (
+        'aws: error: Both SSE={sse} and Encryption={encryption} are '
+        'configured for --emrfs. You must specify only one of the two.'
+    )
 
 
 class InvalidBooleanConfigError(EmrError, ParamValidationError):
-
-    fmt = ("aws: error: {config_value} for {config_key} in the config file is "
-           "invalid. The value should be either 'True' or 'False'. Use "
-           "'aws configure set {profile_var_name}.emr.{config_key} <value>' "
-           "command to set a valid value.")
+    fmt = (
+        "aws: error: {config_value} for {config_key} in the config file is "
+        "invalid. The value should be either 'True' or 'False'. Use "
+        "'aws configure set {profile_var_name}.emr.{config_key} <value>' "
+        "command to set a valid value."
+    )
 
 
 class UnsupportedCommandWithReleaseError(EmrError, ParamValidationError):
+    fmt = (
+        "aws: error: {command} is not supported with "
+        "'{release_label}' release."
+    )
 
-    fmt = ("aws: error: {command} is not supported with "
-           "'{release_label}' release.")
 
 class MissingAutoScalingRoleError(EmrError, ParamValidationError):
-
-    fmt = ("aws: error: Must specify --auto-scaling-role when configuring an "
-           "AutoScaling policy for an instance group.")
-
+    fmt = (
+        "aws: error: Must specify --auto-scaling-role when configuring an "
+        "AutoScaling policy for an instance group."
+    )
diff -pruN 2.23.6-1/awscli/customizations/emr/hbase.py 2.31.35-1/awscli/customizations/emr/hbase.py
--- 2.23.6-1/awscli/customizations/emr/hbase.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/hbase.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,71 +11,98 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import hbaseutils
-from awscli.customizations.emr import helptext
+from awscli.customizations.emr import constants, emrutils, hbaseutils, helptext
 from awscli.customizations.emr.command import Command
 from awscli.customizations.exceptions import ParamValidationError
 
 
 class RestoreFromHBaseBackup(Command):
     NAME = 'restore-from-hbase-backup'
-    DESCRIPTION = ('Restores HBase from S3. ' +
-                   helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS)
+    DESCRIPTION = (
+        'Restores HBase from S3. ' + helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'dir', 'required': True,
-         'help_text': helptext.HBASE_BACKUP_DIR},
-        {'name': 'backup-version',
-         'help_text': helptext.HBASE_BACKUP_VERSION}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'dir',
+            'required': True,
+            'help_text': helptext.HBASE_BACKUP_DIR,
+        },
+        {'name': 'backup-version', 'help_text': helptext.HBASE_BACKUP_VERSION},
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         steps = []
         args = hbaseutils.build_hbase_restore_from_backup_args(
-            parsed_args.dir, parsed_args.backup_version)
+            parsed_args.dir, parsed_args.backup_version
+        )
 
         step_config = emrutils.build_step(
             jar=constants.HBASE_JAR_PATH,
             name=constants.HBASE_RESTORE_STEP_NAME,
             action_on_failure=constants.CANCEL_AND_WAIT,
-            args=args)
+            args=args,
+        )
 
         steps.append(step_config)
-        parameters = {'JobFlowId': parsed_args.cluster_id,
-                      'Steps': steps}
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        parameters = {'JobFlowId': parsed_args.cluster_id, 'Steps': steps}
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
 
 
 class ScheduleHBaseBackup(Command):
     NAME = 'schedule-hbase-backup'
-    DESCRIPTION = ('Adds a step to schedule automated HBase backup. ' +
-                   helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS)
+    DESCRIPTION = (
+        'Adds a step to schedule automated HBase backup. '
+        + helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'type', 'required': True,
-         'help_text': "<p>Backup type. You can specify 'incremental' or "
-                      "'full'.</p>"},
-        {'name': 'dir', 'required': True,
-         'help_text': helptext.HBASE_BACKUP_DIR},
-        {'name': 'interval', 'required': True,
-         'help_text': '<p>The time between backups.</p>'},
-        {'name': 'unit', 'required': True,
-         'help_text': "<p>The time unit for backup's time-interval. "
-                      "You can specify one of the following values:"
-                      " 'minutes', 'hours', or 'days'.</p>"},
-        {'name': 'start-time',
-         'help_text': '<p>The time of the first backup in ISO format.</p>'
-         ' e.g. 2014-04-21T05:26:10Z. Default is now.'},
-        {'name': 'consistent', 'action': 'store_true',
-         'help_text': '<p>Performs a consistent backup.'
-                      ' Pauses all write operations to the HBase cluster'
-                      ' during the backup process.</p>'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'type',
+            'required': True,
+            'help_text': "<p>Backup type. You can specify 'incremental' or "
+            "'full'.</p>",
+        },
+        {
+            'name': 'dir',
+            'required': True,
+            'help_text': helptext.HBASE_BACKUP_DIR,
+        },
+        {
+            'name': 'interval',
+            'required': True,
+            'help_text': '<p>The time between backups.</p>',
+        },
+        {
+            'name': 'unit',
+            'required': True,
+            'help_text': "<p>The time unit for backup's time-interval. "
+            "You can specify one of the following values:"
+            " 'minutes', 'hours', or 'days'.</p>",
+        },
+        {
+            'name': 'start-time',
+            'help_text': '<p>The time of the first backup in ISO format.</p>'
+            ' e.g. 2014-04-21T05:26:10Z. Default is now.',
+        },
+        {
+            'name': 'consistent',
+            'action': 'store_true',
+            'help_text': '<p>Performs a consistent backup.'
+            ' Pauses all write operations to the HBase cluster'
+            ' during the backup process.</p>',
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
@@ -88,37 +115,54 @@ class ScheduleHBaseBackup(Command):
             jar=constants.HBASE_JAR_PATH,
             name=constants.HBASE_SCHEDULE_BACKUP_STEP_NAME,
             action_on_failure=constants.CANCEL_AND_WAIT,
-            args=args)
+            args=args,
+        )
 
         steps.append(step_config)
-        parameters = {'JobFlowId': parsed_args.cluster_id,
-                      'Steps': steps}
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        parameters = {'JobFlowId': parsed_args.cluster_id, 'Steps': steps}
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
 
     def _check_type(self, type):
         type = type.lower()
         if type != constants.FULL and type != constants.INCREMENTAL:
-            raise ParamValidationError('aws: error: invalid type. '
-                             'type should be either ' +
-                             constants.FULL + ' or ' + constants.INCREMENTAL +
-                             '.')
+            raise ParamValidationError(
+                'aws: error: invalid type. '
+                'type should be either '
+                + constants.FULL
+                + ' or '
+                + constants.INCREMENTAL
+                + '.'
+            )
 
     def _check_unit(self, unit):
         unit = unit.lower()
-        if (unit != constants.MINUTES and
-                unit != constants.HOURS and
-                unit != constants.DAYS):
+        if (
+            unit != constants.MINUTES
+            and unit != constants.HOURS
+            and unit != constants.DAYS
+        ):
             raise ParamValidationError(
                 'aws: error: invalid unit. unit should be one of'
-                ' the following values: ' + constants.MINUTES +
-                ', ' + constants.HOURS + ' or ' + constants.DAYS + '.'
+                ' the following values: '
+                + constants.MINUTES
+                + ', '
+                + constants.HOURS
+                + ' or '
+                + constants.DAYS
+                + '.'
             )
 
     def _build_hbase_schedule_backup_args(self, parsed_args):
-        args = [constants.HBASE_MAIN, constants.HBASE_SCHEDULED_BACKUP,
-                constants.TRUE, constants.HBASE_BACKUP_DIR, parsed_args.dir]
+        args = [
+            constants.HBASE_MAIN,
+            constants.HBASE_SCHEDULED_BACKUP,
+            constants.TRUE,
+            constants.HBASE_BACKUP_DIR,
+            parsed_args.dir,
+        ]
 
         type = parsed_args.type.lower()
         unit = parsed_args.unit.lower()
@@ -151,17 +195,28 @@ class ScheduleHBaseBackup(Command):
 
 class CreateHBaseBackup(Command):
     NAME = 'create-hbase-backup'
-    DESCRIPTION = ('Creates a HBase backup in S3. ' +
-                   helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS)
+    DESCRIPTION = (
+        'Creates a HBase backup in S3. '
+        + helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'dir', 'required': True,
-         'help_text': helptext.HBASE_BACKUP_DIR},
-        {'name': 'consistent', 'action': 'store_true',
-         'help_text': '<p>Performs a consistent backup. Pauses all write'
-                      ' operations to the HBase cluster during the backup'
-                      ' process.</p>'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'dir',
+            'required': True,
+            'help_text': helptext.HBASE_BACKUP_DIR,
+        },
+        {
+            'name': 'consistent',
+            'action': 'store_true',
+            'help_text': '<p>Performs a consistent backup. Pauses all write'
+            ' operations to the HBase cluster during the backup'
+            ' process.</p>',
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
@@ -172,19 +227,23 @@ class CreateHBaseBackup(Command):
             jar=constants.HBASE_JAR_PATH,
             name=constants.HBASE_BACKUP_STEP_NAME,
             action_on_failure=constants.CANCEL_AND_WAIT,
-            args=args)
+            args=args,
+        )
 
         steps.append(step_config)
-        parameters = {'JobFlowId': parsed_args.cluster_id,
-                      'Steps': steps}
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        parameters = {'JobFlowId': parsed_args.cluster_id, 'Steps': steps}
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
 
     def _build_hbase_backup_args(self, parsed_args):
-        args = [constants.HBASE_MAIN,
-                constants.HBASE_BACKUP,
-                constants.HBASE_BACKUP_DIR, parsed_args.dir]
+        args = [
+            constants.HBASE_MAIN,
+            constants.HBASE_BACKUP,
+            constants.HBASE_BACKUP_DIR,
+            parsed_args.dir,
+        ]
 
         if parsed_args.consistent is True:
             args.append(constants.HBASE_BACKUP_CONSISTENT)
@@ -194,15 +253,26 @@ class CreateHBaseBackup(Command):
 
 class DisableHBaseBackups(Command):
     NAME = 'disable-hbase-backups'
-    DESCRIPTION = ('Add a step to disable automated HBase backups. ' +
-                   helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS)
+    DESCRIPTION = (
+        'Add a step to disable automated HBase backups. '
+        + helptext.AVAILABLE_ONLY_FOR_AMI_VERSIONS
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'full', 'action': 'store_true',
-         'help_text': 'Disables full backup.'},
-        {'name': 'incremental', 'action': 'store_true',
-         'help_text': 'Disables incremental backup.'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'full',
+            'action': 'store_true',
+            'help_text': 'Disables full backup.',
+        },
+        {
+            'name': 'incremental',
+            'action': 'store_true',
+            'help_text': 'Disables incremental backup.',
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
@@ -214,22 +284,30 @@ class DisableHBaseBackups(Command):
             constants.HBASE_JAR_PATH,
             constants.HBASE_SCHEDULE_BACKUP_STEP_NAME,
             constants.CANCEL_AND_WAIT,
-            args)
+            args,
+        )
 
         steps.append(step_config)
-        parameters = {'JobFlowId': parsed_args.cluster_id,
-                      'Steps': steps}
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        parameters = {'JobFlowId': parsed_args.cluster_id, 'Steps': steps}
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
 
     def _build_hbase_disable_backups_args(self, parsed_args):
-        args = [constants.HBASE_MAIN, constants.HBASE_SCHEDULED_BACKUP,
-                constants.FALSE]
+        args = [
+            constants.HBASE_MAIN,
+            constants.HBASE_SCHEDULED_BACKUP,
+            constants.FALSE,
+        ]
         if parsed_args.full is False and parsed_args.incremental is False:
-            error_message = 'Should specify at least one of --' +\
-                            constants.FULL + ' and --' +\
-                            constants.INCREMENTAL + '.'
+            error_message = (
+                'Should specify at least one of --'
+                + constants.FULL
+                + ' and --'
+                + constants.INCREMENTAL
+                + '.'
+            )
             raise ParamValidationError(error_message)
         if parsed_args.full is True:
             args.append(constants.HBASE_DISABLE_FULL_BACKUP)
diff -pruN 2.23.6-1/awscli/customizations/emr/hbaseutils.py 2.31.35-1/awscli/customizations/emr/hbaseutils.py
--- 2.23.6-1/awscli/customizations/emr/hbaseutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/hbaseutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,12 @@ from awscli.customizations.emr import co
 
 
 def build_hbase_restore_from_backup_args(dir, backup_version=None):
-    args = [constants.HBASE_MAIN,
-            constants.HBASE_RESTORE,
-            constants.HBASE_BACKUP_DIR, dir]
+    args = [
+        constants.HBASE_MAIN,
+        constants.HBASE_RESTORE,
+        constants.HBASE_BACKUP_DIR,
+        dir,
+    ]
 
     if backup_version is not None:
         args.append(constants.HBASE_BACKUP_VERSION_FOR_RESTORE)
diff -pruN 2.23.6-1/awscli/customizations/emr/helptext.py 2.31.35-1/awscli/customizations/emr/helptext.py
--- 2.23.6-1/awscli/customizations/emr/helptext.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/helptext.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr.createdefaultroles import EMR_ROLE_NAME
-from awscli.customizations.emr.createdefaultroles import EC2_ROLE_NAME
 
 TERMINATE_CLUSTERS = (
     'Shuts down one or more clusters, each specified by cluster ID. '
@@ -27,28 +25,33 @@ TERMINATE_CLUSTERS = (
     'The command is asynchronous. Depending on the '
     'configuration of the cluster, it may take from 5 to 20 minutes for the '
     'cluster to terminate completely and release allocated resources such as '
-    'Amazon EC2 instances.')
+    'Amazon EC2 instances.'
+)
 
 CLUSTER_ID = (
     '<p>A unique string that identifies a cluster. The '
     '<code>create-cluster</code> command returns this identifier. You can '
-    'use the <code>list-clusters</code> command to get cluster IDs.</p>')
+    'use the <code>list-clusters</code> command to get cluster IDs.</p>'
+)
 
 HBASE_BACKUP_DIR = (
     '<p>The Amazon S3 location of the Hbase backup. Example: '
     '<code>s3://mybucket/mybackup</code>, where <code>mybucket</code> is the '
     'specified Amazon S3 bucket and mybackup is the specified backup '
     'location. The path argument must begin with s3://, which '
-    'refers to an Amazon S3 bucket.</p>')
+    'refers to an Amazon S3 bucket.</p>'
+)
 
 HBASE_BACKUP_VERSION = (
     '<p>The backup version to restore from. If not specified, the latest backup '
-    'in the specified location is used.</p>')
+    'in the specified location is used.</p>'
+)
 
 # create-cluster options help text
 
 CREATE_CLUSTER_DESCRIPTION = (
-    'Creates an Amazon EMR cluster with the specified configurations.')
+    'Creates an Amazon EMR cluster with the specified configurations.'
+)
 
 DESCRIBE_CLUSTER_DESCRIPTION = (
     'Provides  cluster-level details including status, hardware '
@@ -58,22 +61,24 @@ DESCRIBE_CLUSTER_DESCRIPTION = (
     'elasticmapreduce:ListBootstrapActions, '
     'elasticmapreduce:ListInstanceFleets, '
     'elasticmapreduce:DescribeCluster, '
-    'and elasticmapreduce:ListInstanceGroups.')
+    'and elasticmapreduce:ListInstanceGroups.'
+)
 
-CLUSTER_NAME = (
-    '<p>The name of the cluster. If not provided, the default is "Development Cluster".</p>')
+CLUSTER_NAME = '<p>The name of the cluster. If not provided, the default is "Development Cluster".</p>'
 
 LOG_URI = (
     '<p>Specifies the location in Amazon S3 to which log files '
     'are periodically written. If a value is not provided, '
     'logs files are not written to Amazon S3 from the master node '
-    'and are lost if the master node terminates.</p>')
+    'and are lost if the master node terminates.</p>'
+)
 
 LOG_ENCRYPTION_KMS_KEY_ID = (
     '<p> Specifies the KMS Id utilized for log encryption. If a value is '
     'not provided, log files will be encrypted by default encryption method '
     'AES-256. This attribute is only available with EMR version 5.30.0 and later, '
-    'excluding EMR 6.0.0.</p>')
+    'excluding EMR 6.0.0.</p>'
+)
 
 SERVICE_ROLE = (
     '<p>Specifies an IAM service role, which Amazon EMR requires to call other AWS services '
@@ -82,28 +87,32 @@ SERVICE_ROLE = (
     'To specify the default service role, as well as the default instance '
     'profile, use the <code>--use-default-roles</code> parameter. '
     'If the role and instance profile do not already exist, use the '
-    '<code>aws emr create-default-roles</code> command to create them.</p>')
+    '<code>aws emr create-default-roles</code> command to create them.</p>'
+)
 
 AUTOSCALING_ROLE = (
     '<p>Specify <code>--auto-scaling-role EMR_AutoScaling_DefaultRole</code>'
     ' if an automatic scaling policy is specified for an instance group'
     ' using the <code>--instance-groups</code> parameter. This default'
     ' IAM role allows the automatic scaling feature'
-    ' to launch and terminate Amazon EC2 instances during scaling operations.</p>')
+    ' to launch and terminate Amazon EC2 instances during scaling operations.</p>'
+)
 
 USE_DEFAULT_ROLES = (
     '<p>Specifies that the cluster should use the default'
     ' service role (EMR_DefaultRole) and instance profile (EMR_EC2_DefaultRole)'
     ' for permissions to access other AWS services.</p>'
     '<p>Make sure that the role and instance profile exist first. To create them,'
-    ' use the <code>create-default-roles</code> command.</p>')
+    ' use the <code>create-default-roles</code> command.</p>'
+)
 
 AMI_VERSION = (
     '<p>Applies only to Amazon EMR release versions earlier than 4.0. Use'
     ' <code>--release-label</code> for 4.0 and later. Specifies'
     ' the version of Amazon Linux Amazon Machine Image (AMI)'
     ' to use when launching Amazon EC2 instances in the cluster.'
-    ' For example, <code>--ami-version 3.1.0</code>.')
+    ' For example, <code>--ami-version 3.1.0</code>.'
+)
 
 RELEASE_LABEL = (
     '<p>Specifies the Amazon EMR release version, which determines'
@@ -115,12 +124,14 @@ RELEASE_LABEL = (
     '<p>https://docs.aws.amazon.com/emr/latest/ReleaseGuide</p>'
     '<p>Use <code>--release-label</code> only for Amazon EMR release version 4.0'
     ' and later. Use <code>--ami-version</code> for earlier versions.'
-    ' You cannot specify both a release label and AMI version.</p>')
+    ' You cannot specify both a release label and AMI version.</p>'
+)
 
 OS_RELEASE_LABEL = (
     '<p>Specifies a particular Amazon Linux release for all nodes in a cluster'
-    ' launch request. If a release is not specified, EMR uses the latest validated' 
-    ' Amazon Linux release for cluster launch.</p>')
+    ' launch request. If a release is not specified, EMR uses the latest validated'
+    ' Amazon Linux release for cluster launch.</p>'
+)
 
 CONFIGURATIONS = (
     '<p>Specifies a JSON file that contains configuration classifications,'
@@ -134,7 +145,8 @@ CONFIGURATIONS = (
     ' file for an application, such as <code>yarn-site</code> for YARN. For a list of'
     ' available configuration classifications and example JSON, see'
     ' the following topic in the Amazon EMR Release Guide:</p>'
-    '<p>https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html</p>')
+    '<p>https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html</p>'
+)
 
 INSTANCE_GROUPS = (
     '<p>Specifies the number and type of Amazon EC2 instances'
@@ -163,7 +175,8 @@ INSTANCE_GROUPS = (
     '<li><code>[EbsConfiguration]</code> - Specifies additional Amazon EBS storage volumes attached'
     ' to EC2 instances using an inline JSON structure.</li>'
     '<li><code>[AutoScalingPolicy]</code> - Specifies an automatic scaling policy for the'
-    ' instance group using an inline JSON structure.</li>')
+    ' instance group using an inline JSON structure.</li>'
+)
 
 INSTANCE_FLEETS = (
     '<p>Applies only to Amazon EMR release version 5.0 and later. Specifies'
@@ -195,7 +208,8 @@ INSTANCE_FLEETS = (
     '<li><code>InstanceTypeConfigs</code> - Specify up to five EC2 instance types to'
     ' use in the instance fleet, including details such as Spot price and Amazon EBS configuration.'
     ' When you use an On-Demand or Spot Instance allocation strategy,'
-    ' you can specify up to 30 instance types per instance fleet.</li>')
+    ' you can specify up to 30 instance types per instance fleet.</li>'
+)
 
 INSTANCE_TYPE = (
     '<p>Shortcut parameter as an alternative to <code>--instance-groups</code>.'
@@ -204,18 +218,21 @@ INSTANCE_TYPE = (
     ' the cluster consists of a single master node running on the EC2 instance type'
     ' specified. When used together with <code>--instance-count</code>,'
     ' one instance is used for the master node, and the remainder'
-    ' are used for the core node type.</p>')
+    ' are used for the core node type.</p>'
+)
 
 INSTANCE_COUNT = (
     '<p>Shortcut parameter as an alternative to <code>--instance-groups</code>'
     ' when used together with <code>--instance-type</code>. Specifies the'
     ' number of Amazon EC2 instances to create for a cluster.'
     ' One instance is used for the master node, and the remainder'
-    ' are used for the core node type.</p>')
+    ' are used for the core node type.</p>'
+)
 
 ADDITIONAL_INFO = (
     '<p>Specifies additional information during cluster creation. To set development mode when starting your EMR cluster,'
-    ' set this parameter to <code>{"clusterType":"development"}</code>.</p>')
+    ' set this parameter to <code>{"clusterType":"development"}</code>.</p>'
+)
 
 EC2_ATTRIBUTES = (
     '<p>Configures cluster and Amazon EC2 instance configurations. Accepts'
@@ -227,10 +244,10 @@ EC2_ATTRIBUTES = (
     ' For example, <code>us-west-1b</code>. <code>AvailabilityZone</code> is used for uniform instance groups,'
     ' while <code>AvailabilityZones</code> (plural) is used for instance fleets.</li>'
     '<li><code>AvailabilityZones</code> - Applies to clusters that use the instance fleet configuration.'
-    ' When multiple Availability Zones are specified, Amazon EMR evaluates them and launches instances' 
+    ' When multiple Availability Zones are specified, Amazon EMR evaluates them and launches instances'
     ' in the optimal Availability Zone. <code>AvailabilityZone</code> is used for uniform instance groups,'
     ' while <code>AvailabilityZones</code> (plural) is used for instance fleets.</li>'
-    '<li><code>SubnetId</code> - Applies to clusters that use the uniform instance group configuration.' 
+    '<li><code>SubnetId</code> - Applies to clusters that use the uniform instance group configuration.'
     ' Specify the VPC subnet in which to create the cluster. <code>SubnetId</code> is used for uniform instance groups,'
     ' while <code>SubnetIds</code> (plural) is used for instance fleets.</li>'
     '<li><code>SubnetIds</code> - Applies to clusters that use the instance fleet configuration.'
@@ -249,16 +266,19 @@ EC2_ATTRIBUTES = (
     '<li><code>AdditionalMasterSecurityGroups</code> - A list of additional Amazon EC2'
     ' security group IDs for the master node.</li>'
     '<li><code>AdditionalSlaveSecurityGroups</code> - A list of additional Amazon EC2'
-    ' security group IDs for the slave nodes.</li>')
+    ' security group IDs for the slave nodes.</li>'
+)
 
 AUTO_TERMINATE = (
     '<p>Specifies whether the cluster should terminate after'
-    ' completing all the steps. Auto termination is off by default.</p>')
+    ' completing all the steps. Auto termination is off by default.</p>'
+)
 
 TERMINATION_PROTECTED = (
     '<p>Specifies whether to lock the cluster to prevent the'
     ' Amazon EC2 instances from being terminated by API call,'
-    ' user intervention, or an error.</p>')
+    ' user intervention, or an error.</p>'
+)
 
 SCALE_DOWN_BEHAVIOR = (
     '<p>Specifies the way that individual Amazon EC2 instances terminate'
@@ -276,7 +296,8 @@ VISIBILITY = (
     ' of the AWS account associated with the cluster. If a user'
     ' has the proper policy permissions set, they can also manage the cluster.</p>'
     '<p>Visibility is on by default. The <code>--no-visible-to-all-users</code> option'
-    ' is no longer supported. To restrict cluster visibility, use an IAM policy.</p>')
+    ' is no longer supported. To restrict cluster visibility, use an IAM policy.</p>'
+)
 
 DEBUGGING = (
     '<p>Specifies that the debugging tool is enabled for the cluster,'
@@ -284,7 +305,8 @@ DEBUGGING = (
     ' Turning debugging on requires that you specify <code>--log-uri</code>'
     ' because log files must be stored in Amazon S3 so that'
     ' Amazon EMR can index them for viewing in the console.'
-    ' Effective January 23, 2023, Amazon EMR will discontinue the debugging tool for all versions.</p>')
+    ' Effective January 23, 2023, Amazon EMR will discontinue the debugging tool for all versions.</p>'
+)
 
 TAGS = (
     '<p>A list of tags to associate with a cluster, which apply to'
@@ -294,7 +316,8 @@ TAGS = (
     ' with a maximum of 256 characters.</p>'
     '<p>You can specify tags in <code>key=value</code> format or you can add a'
     ' tag without a value using only the key name, for example <code>key</code>.'
-    ' Use a space to separate multiple tags.</p>')
+    ' Use a space to separate multiple tags.</p>'
+)
 
 BOOTSTRAP_ACTIONS = (
     '<p>Specifies a list of bootstrap actions to run on each EC2 instance when'
@@ -317,7 +340,8 @@ BOOTSTRAP_ACTIONS = (
     ' to pass to the bootstrap action script. Arguments can be'
     ' either a list of values (<code>Args=arg1,arg2,arg3</code>)'
     ' or a list of key-value pairs, as well as optional values,'
-    ' enclosed in square brackets (<code>Args=[arg1,arg2=arg2value,arg3])</li>.')
+    ' enclosed in square brackets (<code>Args=[arg1,arg2=arg2value,arg3])</li>.'
+)
 
 APPLICATIONS = (
     '<p>Specifies the applications to install on the cluster.'
@@ -329,7 +353,8 @@ APPLICATIONS = (
     ' some applications take optional arguments for configuration.'
     ' Arguments should either be a comma-separated list of values'
     ' (<code>Args=arg1,arg2,arg3</code>) or a bracket-enclosed list of values'
-    ' and key-value pairs (<code>Args=[arg1,arg2=arg3,arg4]</code>).</p>')
+    ' and key-value pairs (<code>Args=[arg1,arg2=arg3,arg4]</code>).</p>'
+)
 
 EMR_FS = (
     '<p>Specifies EMRFS configuration options, such as consistent view'
@@ -340,13 +365,15 @@ EMR_FS = (
     ' to configure EMRFS, and use security configurations'
     ' to configure encryption for EMRFS data in Amazon S3 instead.'
     ' For more information, see the following topic in the Amazon EMR Management Guide:</p>'
-    '<p>https://docs.aws.amazon.com/emr/latest/ManagementGuide/emrfs-configure-consistent-view.html</p>')
+    '<p>https://docs.aws.amazon.com/emr/latest/ManagementGuide/emrfs-configure-consistent-view.html</p>'
+)
 
 RESTORE_FROM_HBASE = (
     '<p>Applies only when using Amazon EMR release versions earlier than 4.0.'
     ' Launches a new HBase cluster and populates it with'
     ' data from a previous backup of an HBase cluster. HBase'
-    ' must be installed using the <code>--applications</code> option.</p>')
+    ' must be installed using the <code>--applications</code> option.</p>'
+)
 
 STEPS = (
     '<p>Specifies a list of steps to be executed by the cluster. Steps run'
@@ -356,27 +383,32 @@ STEPS = (
     ' or by specifying an inline JSON structure. <code>Args</code> supplied with steps'
     ' should be a comma-separated list of values (<code>Args=arg1,arg2,arg3</code>) or'
     ' a bracket-enclosed list of values and key-value'
-    ' pairs (<code>Args=[arg1,arg2=value,arg4</code>).</p>')
+    ' pairs (<code>Args=[arg1,arg2=value,arg4</code>).</p>'
+)
 
 INSTALL_APPLICATIONS = (
     '<p>The applications to be installed.'
     ' Takes the following parameters: '
-    '<code>Name</code> and <code>Args</code>.</p>')
+    '<code>Name</code> and <code>Args</code>.</p>'
+)
 
 EBS_ROOT_VOLUME_SIZE = (
     '<p>This option is available only with Amazon EMR version 4.x and later. Specifies the size,'
     ' in GiB, of the EBS root device volume of the Amazon Linux AMI'
-    ' that is used for each EC2 instance in the cluster. </p>')
+    ' that is used for each EC2 instance in the cluster. </p>'
+)
 
 EBS_ROOT_VOLUME_IOPS = (
     '<p>This option is available only with Amazon EMR version 6.15.0 and later. Specifies the IOPS,'
     ' of the EBS root device volume of the Amazon Linux AMI'
-    ' that is used for each EC2 instance in the cluster. </p>')
+    ' that is used for each EC2 instance in the cluster. </p>'
+)
 
 EBS_ROOT_VOLUME_THROUGHPUT = (
     '<p>This option is available only with Amazon EMR version 6.15.0 and later. Specifies the throughput,'
     ' in MiB/s, of the EBS root device volume of the Amazon Linux AMI'
-    ' that is used for each EC2 instance in the cluster. </p>')
+    ' that is used for each EC2 instance in the cluster. </p>'
+)
 
 
 SECURITY_CONFIG = (
@@ -386,7 +418,8 @@ SECURITY_CONFIG = (
     ' the following topic in the Amazon EMR Management Guide:</p>'
     '<p>https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-enable-security-configuration.html</p>'
     '<p>Use <code>list-security-configurations</code> to get a list of available'
-    ' security configurations in the active account.</p>')
+    ' security configurations in the active account.</p>'
+)
 
 CUSTOM_AMI_ID = (
     '<p>Applies only to Amazon EMR release version 5.7.0 and later.'
@@ -396,7 +429,8 @@ CUSTOM_AMI_ID = (
     ' can also be used instead of bootstrap actions to customize'
     ' cluster node configurations. For more information, see'
     ' the following topic in the Amazon EMR Management Guide:</p>'
-    '<p>https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html</p>')
+    '<p>https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html</p>'
+)
 
 REPO_UPGRADE_ON_BOOT = (
     '<p>Applies only when a <code>--custom-ami-id</code> is'
@@ -405,24 +439,26 @@ REPO_UPGRADE_ON_BOOT = (
     ' before other services start. You can set this parameter'
     ' using <code>--rep-upgrade-on-boot NONE</code> to'
     ' disable these updates. CAUTION: This creates additional'
-    ' security risks.</p>')
+    ' security risks.</p>'
+)
 
 KERBEROS_ATTRIBUTES = (
-     '<p>Specifies required cluster attributes for Kerberos when Kerberos authentication'
-     ' is enabled in the specified <code>--security-configuration</code>.'
-     ' Takes the following arguments:</p>'
-     ' <li><code>Realm</code> - Specifies the name of the Kerberos'
-     ' realm to which all nodes in a cluster belong. For example,'
-     ' <code>Realm=EC2.INTERNAL</code>.</li>'
-     ' <li><code>KdcAdminPassword</code> - Specifies the password used within the cluster'
-     ' for the kadmin service, which maintains Kerberos principals, password'
-     ' policies, and keytabs for the cluster.</li>'
-     ' <li><code>CrossRealmTrustPrincipalPassword</code> - Required when establishing a cross-realm trust'
-     ' with a KDC in a different realm. This is the cross-realm principal password,'
-     ' which must be identical across realms.</li>'
-     ' <li><code>ADDomainJoinUser</code> - Required when establishing trust with an Active Directory'
-     ' domain. This is the User logon name of an AD account with sufficient privileges to join resources to the domain.</li>'
-     ' <li><code>ADDomainJoinPassword</code> - The AD password for <code>ADDomainJoinUser</code>.</li>')
+    '<p>Specifies required cluster attributes for Kerberos when Kerberos authentication'
+    ' is enabled in the specified <code>--security-configuration</code>.'
+    ' Takes the following arguments:</p>'
+    ' <li><code>Realm</code> - Specifies the name of the Kerberos'
+    ' realm to which all nodes in a cluster belong. For example,'
+    ' <code>Realm=EC2.INTERNAL</code>.</li>'
+    ' <li><code>KdcAdminPassword</code> - Specifies the password used within the cluster'
+    ' for the kadmin service, which maintains Kerberos principals, password'
+    ' policies, and keytabs for the cluster.</li>'
+    ' <li><code>CrossRealmTrustPrincipalPassword</code> - Required when establishing a cross-realm trust'
+    ' with a KDC in a different realm. This is the cross-realm principal password,'
+    ' which must be identical across realms.</li>'
+    ' <li><code>ADDomainJoinUser</code> - Required when establishing trust with an Active Directory'
+    ' domain. This is the User logon name of an AD account with sufficient privileges to join resources to the domain.</li>'
+    ' <li><code>ADDomainJoinPassword</code> - The AD password for <code>ADDomainJoinUser</code>.</li>'
+)
 
 # end create-cluster options help descriptions
 
@@ -437,7 +473,8 @@ LIST_CLUSTERS_CLUSTER_STATES = (
     '<li><code>WAITING</code></li>'
     '<li><code>TERMINATING</code></li>'
     '<li><code>TERMINATED</code></li>'
-    '<li><code>TERMINATED_WITH_ERRORS</code></li>')
+    '<li><code>TERMINATED_WITH_ERRORS</code></li>'
+)
 
 LIST_CLUSTERS_STATE_FILTERS = (
     '<p>Shortcut options for --cluster-states. The'
@@ -446,41 +483,50 @@ LIST_CLUSTERS_STATE_FILTERS = (
     ' are <code>STARTING</code>,<code>BOOTSTRAPPING</code>,'
     ' <code>RUNNING</code>, <code>WAITING</code>, or <code>TERMINATING</code>. </li>'
     '<li><code>--terminated</code> - list only clusters that are <code>TERMINATED</code>. </li>'
-    '<li><code>--failed</code> - list only clusters that are <code>TERMINATED_WITH_ERRORS</code>.</li>')
+    '<li><code>--failed</code> - list only clusters that are <code>TERMINATED_WITH_ERRORS</code>.</li>'
+)
 
 LIST_CLUSTERS_CREATED_AFTER = (
     '<p>List only those clusters created after the date and time'
     ' specified in the format yyyy-mm-ddThh:mm:ss. For example,'
-    ' <code>--created-after 2017-07-04T00:01:30.</p>')
+    ' <code>--created-after 2017-07-04T00:01:30.</p>'
+)
 
 LIST_CLUSTERS_CREATED_BEFORE = (
     '<p>List only those clusters created before the date and time'
     ' specified in the format yyyy-mm-ddThh:mm:ss. For example,'
-    ' <code>--created-before 2017-07-04T00:01:30.</p>')
+    ' <code>--created-before 2017-07-04T00:01:30.</p>'
+)
 
 EMR_MANAGED_MASTER_SECURITY_GROUP = (
     '<p>The identifier of the Amazon EC2 security group '
-    'for the master node.</p>')
+    'for the master node.</p>'
+)
 
 EMR_MANAGED_SLAVE_SECURITY_GROUP = (
     '<p>The identifier of the Amazon EC2 security group '
-    'for the slave nodes.</p>')
+    'for the slave nodes.</p>'
+)
 
 SERVICE_ACCESS_SECURITY_GROUP = (
     '<p>The identifier of the Amazon EC2 security group '
-    'for Amazon EMR to access clusters in VPC private subnets.</p>')
+    'for Amazon EMR to access clusters in VPC private subnets.</p>'
+)
 
 ADDITIONAL_MASTER_SECURITY_GROUPS = (
     '<p> A list of additional Amazon EC2 security group IDs for '
-    'the master node</p>')
+    'the master node</p>'
+)
 
 ADDITIONAL_SLAVE_SECURITY_GROUPS = (
     '<p>A list of additional Amazon EC2 security group IDs for '
-    'the slave nodes.</p>')
+    'the slave nodes.</p>'
+)
 
 AVAILABLE_ONLY_FOR_AMI_VERSIONS = (
     'This command is only available when using Amazon EMR versions'
-    'earlier than 4.0.')
+    'earlier than 4.0.'
+)
 
 STEP_CONCURRENCY_LEVEL = (
     'This command specifies the step concurrency level of the cluster.'
@@ -498,10 +544,10 @@ MANAGED_SCALING_POLICY = (
 )
 
 PLACEMENT_GROUP_CONFIGS = (
-    '<p>Placement group configuration for an Amazon EMR ' 
-    'cluster. The configuration specifies the EC2 placement group ' 
-    'strategy associated with each EMR Instance Role.</p> ' 
-    '<p>Currently, we support placement group only for <code>MASTER</code> ' 
+    '<p>Placement group configuration for an Amazon EMR '
+    'cluster. The configuration specifies the EC2 placement group '
+    'strategy associated with each EMR Instance Role.</p> '
+    '<p>Currently, we support placement group only for <code>MASTER</code> '
     'role with <code>SPREAD</code> strategy by default. You can opt-in by '
     'passing <code>--placement-group-configs InstanceRole=MASTER</code> '
     'during cluster creation.</p>'
@@ -522,3 +568,5 @@ EXECUTION_ROLE_ARN = (
 UNHEALTHY_NODE_REPLACEMENT = (
     '<p>Unhealthy node replacement for an Amazon EMR cluster.</p> '
 )
+
+EXTENDED_SUPPORT = '<p>Reserved.</p> '
diff -pruN 2.23.6-1/awscli/customizations/emr/installapplications.py 2.31.35-1/awscli/customizations/emr/installapplications.py
--- 2.23.6-1/awscli/customizations/emr/installapplications.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/installapplications.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,41 +12,52 @@
 # language governing permissions and limitations under the License.
 
 
-from awscli.customizations.emr import applicationutils
-from awscli.customizations.emr import argumentschema
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import helptext
+from awscli.customizations.emr import (
+    applicationutils,
+    argumentschema,
+    constants,
+    emrutils,
+    helptext,
+)
 from awscli.customizations.emr.command import Command
 from awscli.customizations.exceptions import ParamValidationError
 
 
 class InstallApplications(Command):
     NAME = 'install-applications'
-    DESCRIPTION = ('Installs applications on a running cluster. Currently only'
-                   ' Hive and Pig can be installed using this command, and'
-                   ' this command is only supported by AMI versions'
-                   ' (3.x and 2.x).')
+    DESCRIPTION = (
+        'Installs applications on a running cluster. Currently only'
+        ' Hive and Pig can be installed using this command, and'
+        ' this command is only supported by AMI versions'
+        ' (3.x and 2.x).'
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': helptext.CLUSTER_ID},
-        {'name': 'applications', 'required': True,
-         'help_text': helptext.INSTALL_APPLICATIONS,
-         'schema': argumentschema.APPLICATIONS_SCHEMA},
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'applications',
+            'required': True,
+            'help_text': helptext.INSTALL_APPLICATIONS,
+            'schema': argumentschema.APPLICATIONS_SCHEMA,
+        },
     ]
     # Applications supported by the install-applications command.
     supported_apps = ['HIVE', 'PIG']
 
     def _run_main_command(self, parsed_args, parsed_globals):
-
         parameters = {'JobFlowId': parsed_args.cluster_id}
 
         self._check_for_supported_apps(parsed_args.applications)
         parameters['Steps'] = applicationutils.build_applications(
-            self.region, parsed_args.applications)[2]
+            self.region, parsed_args.applications
+        )[2]
 
-        emrutils.call_and_display_response(self._session, 'AddJobFlowSteps',
-                                           parameters, parsed_globals)
+        emrutils.call_and_display_response(
+            self._session, 'AddJobFlowSteps', parameters, parsed_globals
+        )
         return 0
 
     def _check_for_supported_apps(self, parsed_applications):
@@ -58,10 +69,12 @@ class InstallApplications(Command):
                     raise ParamValidationError(
                         "aws: error: " + app_config['Name'] + " cannot be"
                         " installed on a running cluster. 'Name' should be one"
-                        " of the following: " +
-                        ', '.join(self.supported_apps))
+                        " of the following: " + ', '.join(self.supported_apps)
+                    )
             else:
                 raise ParamValidationError(
-                    "aws: error: Unknown application: " + app_config['Name'] +
-                    ". 'Name' should be one of the following: " +
-                    ', '.join(constants.APPLICATIONS))
+                    "aws: error: Unknown application: "
+                    + app_config['Name']
+                    + ". 'Name' should be one of the following: "
+                    + ', '.join(constants.APPLICATIONS)
+                )
diff -pruN 2.23.6-1/awscli/customizations/emr/instancefleetsutils.py 2.31.35-1/awscli/customizations/emr/instancefleetsutils.py
--- 2.23.6-1/awscli/customizations/emr/instancefleetsutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/instancefleetsutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import constants, exceptions
 
 
 def validate_and_build_instance_fleets(parsed_instance_fleets):
@@ -31,41 +30,71 @@ def validate_and_build_instance_fleets(p
             instance_fleet_config['Name'] = instance_fleet['Name']
         else:
             instance_fleet_config['Name'] = instance_fleet['InstanceFleetType']
-        instance_fleet_config['InstanceFleetType'] = instance_fleet['InstanceFleetType']
+        instance_fleet_config['InstanceFleetType'] = instance_fleet[
+            'InstanceFleetType'
+        ]
 
         if 'TargetOnDemandCapacity' in keys:
-            instance_fleet_config['TargetOnDemandCapacity'] = instance_fleet['TargetOnDemandCapacity']
+            instance_fleet_config['TargetOnDemandCapacity'] = instance_fleet[
+                'TargetOnDemandCapacity'
+            ]
 
         if 'TargetSpotCapacity' in keys:
-            instance_fleet_config['TargetSpotCapacity'] = instance_fleet['TargetSpotCapacity']
+            instance_fleet_config['TargetSpotCapacity'] = instance_fleet[
+                'TargetSpotCapacity'
+            ]
 
         if 'InstanceTypeConfigs' in keys:
-            instance_fleet_config['InstanceTypeConfigs'] = instance_fleet['InstanceTypeConfigs']
+            instance_fleet_config['InstanceTypeConfigs'] = instance_fleet[
+                'InstanceTypeConfigs'
+            ]
 
         if 'LaunchSpecifications' in keys:
-            instanceFleetProvisioningSpecifications = instance_fleet['LaunchSpecifications']
+            instanceFleetProvisioningSpecifications = instance_fleet[
+                'LaunchSpecifications'
+            ]
             instance_fleet_config['LaunchSpecifications'] = {}
 
             if 'SpotSpecification' in instanceFleetProvisioningSpecifications:
-                instance_fleet_config['LaunchSpecifications']['SpotSpecification'] = \
-                    instanceFleetProvisioningSpecifications['SpotSpecification']
-
-            if 'OnDemandSpecification' in instanceFleetProvisioningSpecifications:
-                instance_fleet_config['LaunchSpecifications']['OnDemandSpecification'] = \
-                    instanceFleetProvisioningSpecifications['OnDemandSpecification']
+                instance_fleet_config['LaunchSpecifications'][
+                    'SpotSpecification'
+                ] = instanceFleetProvisioningSpecifications[
+                    'SpotSpecification'
+                ]
+
+            if (
+                'OnDemandSpecification'
+                in instanceFleetProvisioningSpecifications
+            ):
+                instance_fleet_config['LaunchSpecifications'][
+                    'OnDemandSpecification'
+                ] = instanceFleetProvisioningSpecifications[
+                    'OnDemandSpecification'
+                ]
 
         if 'ResizeSpecifications' in keys:
-            instanceFleetResizeSpecifications = instance_fleet['ResizeSpecifications']
+            instanceFleetResizeSpecifications = instance_fleet[
+                'ResizeSpecifications'
+            ]
             instance_fleet_config['ResizeSpecifications'] = {}
 
             if 'SpotResizeSpecification' in instanceFleetResizeSpecifications:
-                instance_fleet_config['ResizeSpecifications']['SpotResizeSpecification'] = \
-                    instanceFleetResizeSpecifications['SpotResizeSpecification']
+                instance_fleet_config['ResizeSpecifications'][
+                    'SpotResizeSpecification'
+                ] = instanceFleetResizeSpecifications[
+                    'SpotResizeSpecification'
+                ]
+
+            if (
+                'OnDemandResizeSpecification'
+                in instanceFleetResizeSpecifications
+            ):
+                instance_fleet_config['ResizeSpecifications'][
+                    'OnDemandResizeSpecification'
+                ] = instanceFleetResizeSpecifications[
+                    'OnDemandResizeSpecification'
+                ]
 
-            if 'OnDemandResizeSpecification' in instanceFleetResizeSpecifications:
-                instance_fleet_config['ResizeSpecifications']['OnDemandResizeSpecification'] = \
-                    instanceFleetResizeSpecifications['OnDemandResizeSpecification']
-        
         if 'Context' in keys:
             instance_fleet_config['Context'] = instance_fleet['Context']
 
diff -pruN 2.23.6-1/awscli/customizations/emr/instancegroupsutils.py 2.31.35-1/awscli/customizations/emr/instancegroupsutils.py
--- 2.23.6-1/awscli/customizations/emr/instancegroupsutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/instancegroupsutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import constants, exceptions
 
 
 def build_instance_groups(parsed_instance_groups):
@@ -44,7 +43,9 @@ def build_instance_groups(parsed_instanc
             ig_config['EbsConfiguration'] = instance_group['EbsConfiguration']
 
         if 'AutoScalingPolicy' in keys:
-            ig_config['AutoScalingPolicy'] = instance_group['AutoScalingPolicy']
+            ig_config['AutoScalingPolicy'] = instance_group[
+                'AutoScalingPolicy'
+            ]
 
         if 'Configurations' in keys:
             ig_config['Configurations'] = instance_group['Configurations']
@@ -56,8 +57,7 @@ def build_instance_groups(parsed_instanc
     return instance_groups
 
 
-def _build_instance_group(
-        instance_type, instance_count, instance_group_type):
+def _build_instance_group(instance_type, instance_count, instance_group_type):
     ig_config = {}
     ig_config['InstanceType'] = instance_type
     ig_config['InstanceCount'] = instance_count
@@ -68,13 +68,14 @@ def _build_instance_group(
 
 
 def validate_and_build_instance_groups(
-        instance_groups, instance_type, instance_count):
-    if (instance_groups is None and instance_type is None):
+    instance_groups, instance_type, instance_count
+):
+    if instance_groups is None and instance_type is None:
         raise exceptions.MissingRequiredInstanceGroupsError
 
-    if (instance_groups is not None and
-        (instance_type is not None or
-            instance_count is not None)):
+    if instance_groups is not None and (
+        instance_type is not None or instance_count is not None
+    ):
         raise exceptions.InstanceGroupsValidationError
 
     if instance_groups is not None:
@@ -84,13 +85,15 @@ def validate_and_build_instance_groups(
         master_ig = _build_instance_group(
             instance_type=instance_type,
             instance_count=1,
-            instance_group_type="MASTER")
+            instance_group_type="MASTER",
+        )
         instance_groups.append(master_ig)
         if instance_count is not None and int(instance_count) > 1:
             core_ig = _build_instance_group(
                 instance_type=instance_type,
                 instance_count=int(instance_count) - 1,
-                instance_group_type="CORE")
+                instance_group_type="CORE",
+            )
             instance_groups.append(core_ig)
 
         return instance_groups
diff -pruN 2.23.6-1/awscli/customizations/emr/listclusters.py 2.31.35-1/awscli/customizations/emr/listclusters.py
--- 2.23.6-1/awscli/customizations/emr/listclusters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/listclusters.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,41 +13,46 @@
 
 
 from awscli.arguments import CustomArgument
-from awscli.customizations.emr import helptext
-from awscli.customizations.emr import exceptions
-from awscli.customizations.emr import constants
+from awscli.customizations.emr import constants, exceptions, helptext
 
 
 def modify_list_clusters_argument(argument_table, **kwargs):
-    argument_table['cluster-states'] = \
-        ClusterStatesArgument(
-            name='cluster-states',
-            help_text=helptext.LIST_CLUSTERS_CLUSTER_STATES,
-            nargs='+')
-    argument_table['active'] = \
-        ActiveStateArgument(
-            name='active', help_text=helptext.LIST_CLUSTERS_STATE_FILTERS,
-            action='store_true', group_name='states_filter')
-    argument_table['terminated'] = \
-        TerminatedStateArgument(
-            name='terminated',
-            action='store_true', group_name='states_filter')
-    argument_table['failed'] = \
-        FailedStateArgument(
-            name='failed', action='store_true', group_name='states_filter')
+    argument_table['cluster-states'] = ClusterStatesArgument(
+        name='cluster-states',
+        help_text=helptext.LIST_CLUSTERS_CLUSTER_STATES,
+        nargs='+',
+    )
+    argument_table['active'] = ActiveStateArgument(
+        name='active',
+        help_text=helptext.LIST_CLUSTERS_STATE_FILTERS,
+        action='store_true',
+        group_name='states_filter',
+    )
+    argument_table['terminated'] = TerminatedStateArgument(
+        name='terminated', action='store_true', group_name='states_filter'
+    )
+    argument_table['failed'] = FailedStateArgument(
+        name='failed', action='store_true', group_name='states_filter'
+    )
     argument_table['created-before'] = CreatedBefore(
-        name='created-before', help_text=helptext.LIST_CLUSTERS_CREATED_BEFORE,
-        cli_type_name='timestamp')
+        name='created-before',
+        help_text=helptext.LIST_CLUSTERS_CREATED_BEFORE,
+        cli_type_name='timestamp',
+    )
     argument_table['created-after'] = CreatedAfter(
-        name='created-after', help_text=helptext.LIST_CLUSTERS_CREATED_AFTER,
-        cli_type_name='timestamp')
+        name='created-after',
+        help_text=helptext.LIST_CLUSTERS_CREATED_AFTER,
+        cli_type_name='timestamp',
+    )
 
 
 class ClusterStatesArgument(CustomArgument):
     def add_to_params(self, parameters, value):
         if value is not None:
-            if (parameters.get('ClusterStates') is not None and
-                    len(parameters.get('ClusterStates')) > 0):
+            if (
+                parameters.get('ClusterStates') is not None
+                and len(parameters.get('ClusterStates')) > 0
+            ):
                 raise exceptions.ClusterStatesFilterValidationError()
             parameters['ClusterStates'] = value
 
@@ -55,8 +60,10 @@ class ClusterStatesArgument(CustomArgume
 class ActiveStateArgument(CustomArgument):
     def add_to_params(self, parameters, value):
         if value is True:
-            if (parameters.get('ClusterStates') is not None and
-                    len(parameters.get('ClusterStates')) > 0):
+            if (
+                parameters.get('ClusterStates') is not None
+                and len(parameters.get('ClusterStates')) > 0
+            ):
                 raise exceptions.ClusterStatesFilterValidationError()
             parameters['ClusterStates'] = constants.LIST_CLUSTERS_ACTIVE_STATES
 
@@ -64,18 +71,23 @@ class ActiveStateArgument(CustomArgument
 class TerminatedStateArgument(CustomArgument):
     def add_to_params(self, parameters, value):
         if value is True:
-            if (parameters.get('ClusterStates') is not None and
-                    len(parameters.get('ClusterStates')) > 0):
+            if (
+                parameters.get('ClusterStates') is not None
+                and len(parameters.get('ClusterStates')) > 0
+            ):
                 raise exceptions.ClusterStatesFilterValidationError()
-            parameters['ClusterStates'] = \
+            parameters['ClusterStates'] = (
                 constants.LIST_CLUSTERS_TERMINATED_STATES
+            )
 
 
 class FailedStateArgument(CustomArgument):
     def add_to_params(self, parameters, value):
         if value is True:
-            if (parameters.get('ClusterStates') is not None and
-                    len(parameters.get('ClusterStates')) > 0):
+            if (
+                parameters.get('ClusterStates') is not None
+                and len(parameters.get('ClusterStates')) > 0
+            ):
                 raise exceptions.ClusterStatesFilterValidationError()
             parameters['ClusterStates'] = constants.LIST_CLUSTERS_FAILED_STATES
 
diff -pruN 2.23.6-1/awscli/customizations/emr/modifyclusterattributes.py 2.31.35-1/awscli/customizations/emr/modifyclusterattributes.py
--- 2.23.6-1/awscli/customizations/emr/modifyclusterattributes.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/modifyclusterattributes.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,103 +11,176 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import exceptions
-from awscli.customizations.emr import helptext
+from awscli.customizations.emr import emrutils, exceptions, helptext
 from awscli.customizations.emr.command import Command
 
 
 class ModifyClusterAttr(Command):
     NAME = 'modify-cluster-attributes'
-    DESCRIPTION = ("Modifies the cluster attributes 'visible-to-all-users', "
-                   " 'termination-protected' and 'unhealthy-node-replacement'.")
+    DESCRIPTION = (
+        "Modifies the cluster attributes 'visible-to-all-users', "
+        " 'termination-protected' and 'unhealthy-node-replacement'."
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-            'help_text': helptext.CLUSTER_ID},
-        {'name': 'visible-to-all-users', 'required': False, 'action':
-            'store_true', 'group_name': 'visible',
-            'help_text': helptext.VISIBILITY},
-        {'name': 'no-visible-to-all-users', 'required': False, 'action':
-            'store_true', 'group_name': 'visible',
-            'help_text': helptext.VISIBILITY},
-        {'name': 'termination-protected', 'required': False, 'action':
-            'store_true', 'group_name': 'terminate',
-            'help_text': 'Set termination protection on or off'},
-        {'name': 'no-termination-protected', 'required': False, 'action':
-            'store_true', 'group_name': 'terminate',
-            'help_text': 'Set termination protection on or off'},
-        {'name': 'auto-terminate', 'required': False, 'action':
-            'store_true', 'group_name': 'auto_terminate',
-            'help_text': 'Set cluster auto terminate after completing all the steps on or off'},
-        {'name': 'no-auto-terminate', 'required': False, 'action':
-            'store_true', 'group_name': 'auto_terminate',
-            'help_text': 'Set cluster auto terminate after completing all the steps on or off'},
-        {'name': 'unhealthy-node-replacement', 'required': False, 'action':
-            'store_true', 'group_name': 'UnhealthyReplacement',
-            'help_text': 'Set Unhealthy Node Replacement on or off'},
-        {'name': 'no-unhealthy-node-replacement', 'required': False, 'action':
-            'store_true', 'group_name': 'UnhealthyReplacement',
-            'help_text': 'Set Unhealthy Node Replacement on or off'},
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': helptext.CLUSTER_ID,
+        },
+        {
+            'name': 'visible-to-all-users',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'visible',
+            'help_text': helptext.VISIBILITY,
+        },
+        {
+            'name': 'no-visible-to-all-users',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'visible',
+            'help_text': helptext.VISIBILITY,
+        },
+        {
+            'name': 'termination-protected',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'terminate',
+            'help_text': 'Set termination protection on or off',
+        },
+        {
+            'name': 'no-termination-protected',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'terminate',
+            'help_text': 'Set termination protection on or off',
+        },
+        {
+            'name': 'auto-terminate',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'auto_terminate',
+            'help_text': 'Set cluster auto terminate after completing all the steps on or off',
+        },
+        {
+            'name': 'no-auto-terminate',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'auto_terminate',
+            'help_text': 'Set cluster auto terminate after completing all the steps on or off',
+        },
+        {
+            'name': 'unhealthy-node-replacement',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'UnhealthyReplacement',
+            'help_text': 'Set Unhealthy Node Replacement on or off',
+        },
+        {
+            'name': 'no-unhealthy-node-replacement',
+            'required': False,
+            'action': 'store_true',
+            'group_name': 'UnhealthyReplacement',
+            'help_text': 'Set Unhealthy Node Replacement on or off',
+        },
     ]
 
     def _run_main_command(self, args, parsed_globals):
-
-        if (args.visible_to_all_users and args.no_visible_to_all_users):
+        if args.visible_to_all_users and args.no_visible_to_all_users:
             raise exceptions.MutualExclusiveOptionError(
                 option1='--visible-to-all-users',
-                option2='--no-visible-to-all-users')
-        if (args.termination_protected and args.no_termination_protected):
+                option2='--no-visible-to-all-users',
+            )
+        if args.termination_protected and args.no_termination_protected:
             raise exceptions.MutualExclusiveOptionError(
                 option1='--termination-protected',
-                option2='--no-termination-protected')
-        if (args.auto_terminate and args.no_auto_terminate):
+                option2='--no-termination-protected',
+            )
+        if args.auto_terminate and args.no_auto_terminate:
             raise exceptions.MutualExclusiveOptionError(
-                option1='--auto-terminate',
-                option2='--no-auto-terminate')
-        if (args.unhealthy_node_replacement and args.no_unhealthy_node_replacement):
+                option1='--auto-terminate', option2='--no-auto-terminate'
+            )
+        if (
+            args.unhealthy_node_replacement
+            and args.no_unhealthy_node_replacement
+        ):
             raise exceptions.MutualExclusiveOptionError(
                 option1='--unhealthy-node-replacement',
-                option2='--no-unhealthy-node-replacement')
-        if not(args.termination_protected or args.no_termination_protected or
-               args.visible_to_all_users or args.no_visible_to_all_users or
-               args.auto_terminate or args.no_auto_terminate or
-               args.unhealthy_node_replacement or args.no_unhealthy_node_replacement):
+                option2='--no-unhealthy-node-replacement',
+            )
+        if not (
+            args.termination_protected
+            or args.no_termination_protected
+            or args.visible_to_all_users
+            or args.no_visible_to_all_users
+            or args.auto_terminate
+            or args.no_auto_terminate
+            or args.unhealthy_node_replacement
+            or args.no_unhealthy_node_replacement
+        ):
             raise exceptions.MissingClusterAttributesError()
 
-        if (args.visible_to_all_users or args.no_visible_to_all_users):
-            visible = (args.visible_to_all_users and
-                       not args.no_visible_to_all_users)
-            parameters = {'JobFlowIds': [args.cluster_id],
-                          'VisibleToAllUsers': visible}
-            emrutils.call_and_display_response(self._session,
-                                               'SetVisibleToAllUsers',
-                                               parameters, parsed_globals)
-
-        if (args.termination_protected or args.no_termination_protected):
-            protected = (args.termination_protected and
-                         not args.no_termination_protected)
-            parameters = {'JobFlowIds': [args.cluster_id],
-                          'TerminationProtected': protected}
-            emrutils.call_and_display_response(self._session,
-                                               'SetTerminationProtection',
-                                               parameters, parsed_globals)
-
-        if (args.auto_terminate or args.no_auto_terminate):
-            auto_terminate = (args.auto_terminate and
-                         not args.no_auto_terminate)
-            parameters = {'JobFlowIds': [args.cluster_id],
-                          'KeepJobFlowAliveWhenNoSteps': not auto_terminate}
-            emrutils.call_and_display_response(self._session,
-                                               'SetKeepJobFlowAliveWhenNoSteps',
-                                               parameters, parsed_globals)
-            
-        if (args.unhealthy_node_replacement or args.no_unhealthy_node_replacement):
-            protected = (args.unhealthy_node_replacement and
-                         not args.no_unhealthy_node_replacement)
-            parameters = {'JobFlowIds': [args.cluster_id],
-                          'UnhealthyNodeReplacement': protected}
-            emrutils.call_and_display_response(self._session,
-                                               'SetUnhealthyNodeReplacement',
-                                               parameters, parsed_globals)
+        if args.visible_to_all_users or args.no_visible_to_all_users:
+            visible = (
+                args.visible_to_all_users and not args.no_visible_to_all_users
+            )
+            parameters = {
+                'JobFlowIds': [args.cluster_id],
+                'VisibleToAllUsers': visible,
+            }
+            emrutils.call_and_display_response(
+                self._session,
+                'SetVisibleToAllUsers',
+                parameters,
+                parsed_globals,
+            )
+
+        if args.termination_protected or args.no_termination_protected:
+            protected = (
+                args.termination_protected
+                and not args.no_termination_protected
+            )
+            parameters = {
+                'JobFlowIds': [args.cluster_id],
+                'TerminationProtected': protected,
+            }
+            emrutils.call_and_display_response(
+                self._session,
+                'SetTerminationProtection',
+                parameters,
+                parsed_globals,
+            )
+
+        if args.auto_terminate or args.no_auto_terminate:
+            auto_terminate = args.auto_terminate and not args.no_auto_terminate
+            parameters = {
+                'JobFlowIds': [args.cluster_id],
+                'KeepJobFlowAliveWhenNoSteps': not auto_terminate,
+            }
+            emrutils.call_and_display_response(
+                self._session,
+                'SetKeepJobFlowAliveWhenNoSteps',
+                parameters,
+                parsed_globals,
+            )
+
+        if (
+            args.unhealthy_node_replacement
+            or args.no_unhealthy_node_replacement
+        ):
+            protected = (
+                args.unhealthy_node_replacement
+                and not args.no_unhealthy_node_replacement
+            )
+            parameters = {
+                'JobFlowIds': [args.cluster_id],
+                'UnhealthyNodeReplacement': protected,
+            }
+            emrutils.call_and_display_response(
+                self._session,
+                'SetUnhealthyNodeReplacement',
+                parameters,
+                parsed_globals,
+            )
 
         return 0
diff -pruN 2.23.6-1/awscli/customizations/emr/ssh.py 2.31.35-1/awscli/customizations/emr/ssh.py
--- 2.23.6-1/awscli/customizations/emr/ssh.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/ssh.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,25 +15,33 @@ import os
 import subprocess
 import tempfile
 
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import sshutils
+from awscli.customizations.emr import constants, emrutils, sshutils
 from awscli.customizations.emr.command import Command
 
-KEY_PAIR_FILE_HELP_TEXT = '\nA value for the variable Key Pair File ' \
-    'can be set in the AWS CLI config file using the ' \
+KEY_PAIR_FILE_HELP_TEXT = (
+    '\nA value for the variable Key Pair File '
+    'can be set in the AWS CLI config file using the '
     '"aws configure set emr.key_pair_file <value>" command.\n'
+)
 
 
 class Socks(Command):
     NAME = 'socks'
-    DESCRIPTION = ('Create a socks tunnel on port 8157 from your machine '
-                   'to the master.\n%s' % KEY_PAIR_FILE_HELP_TEXT)
+    DESCRIPTION = (
+        'Create a socks tunnel on port 8157 from your machine '
+        'to the master.\n%s' % KEY_PAIR_FILE_HELP_TEXT
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': 'Cluster Id of cluster you want to ssh into'},
-        {'name': 'key-pair-file', 'required': True,
-         'help_text': 'Private key file to use for login'},
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': 'Cluster Id of cluster you want to ssh into',
+        },
+        {
+            'name': 'key-pair-file',
+            'required': True,
+            'help_text': 'Private key file to use for login',
+        },
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
@@ -41,20 +49,36 @@ class Socks(Command):
             master_dns = sshutils.validate_and_find_master_dns(
                 session=self._session,
                 parsed_globals=parsed_globals,
-                cluster_id=parsed_args.cluster_id)
+                cluster_id=parsed_args.cluster_id,
+            )
 
             key_file = parsed_args.key_pair_file
             sshutils.validate_ssh_with_key_file(key_file)
             f = tempfile.NamedTemporaryFile(delete=False)
-            if (emrutils.which('ssh') or emrutils.which('ssh.exe')):
-                command = ['ssh', '-o', 'StrictHostKeyChecking=no', '-o',
-                           'ServerAliveInterval=10', '-ND', '8157', '-i',
-                           parsed_args.key_pair_file, constants.SSH_USER +
-                           '@' + master_dns]
+            if emrutils.which('ssh') or emrutils.which('ssh.exe'):
+                command = [
+                    'ssh',
+                    '-o',
+                    'StrictHostKeyChecking=no',
+                    '-o',
+                    'ServerAliveInterval=10',
+                    '-ND',
+                    '8157',
+                    '-i',
+                    parsed_args.key_pair_file,
+                    constants.SSH_USER + '@' + master_dns,
+                ]
             else:
-                command = ['putty', '-ssh', '-i', parsed_args.key_pair_file,
-                           constants.SSH_USER + '@' + master_dns, '-N', '-D',
-                           '8157']
+                command = [
+                    'putty',
+                    '-ssh',
+                    '-i',
+                    parsed_args.key_pair_file,
+                    constants.SSH_USER + '@' + master_dns,
+                    '-N',
+                    '-D',
+                    '8157',
+                ]
 
             print(' '.join(command))
             rc = subprocess.call(command)
@@ -66,35 +90,56 @@ class Socks(Command):
 
 class SSH(Command):
     NAME = 'ssh'
-    DESCRIPTION = ('SSH into master node of the cluster.\n%s' %
-                   KEY_PAIR_FILE_HELP_TEXT)
+    DESCRIPTION = (
+        'SSH into master node of the cluster.\n%s' % KEY_PAIR_FILE_HELP_TEXT
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': 'Cluster Id of cluster you want to ssh into'},
-        {'name': 'key-pair-file', 'required': True,
-         'help_text': 'Private key file to use for login'},
-        {'name': 'command', 'help_text': 'Command to execute on Master Node'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': 'Cluster Id of cluster you want to ssh into',
+        },
+        {
+            'name': 'key-pair-file',
+            'required': True,
+            'help_text': 'Private key file to use for login',
+        },
+        {'name': 'command', 'help_text': 'Command to execute on Master Node'},
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         master_dns = sshutils.validate_and_find_master_dns(
             session=self._session,
             parsed_globals=parsed_globals,
-            cluster_id=parsed_args.cluster_id)
+            cluster_id=parsed_args.cluster_id,
+        )
 
         key_file = parsed_args.key_pair_file
         sshutils.validate_ssh_with_key_file(key_file)
         f = tempfile.NamedTemporaryFile(delete=False)
-        if (emrutils.which('ssh') or emrutils.which('ssh.exe')):
-            command = ['ssh', '-o', 'StrictHostKeyChecking=no', '-o',
-                       'ServerAliveInterval=10', '-i',
-                       parsed_args.key_pair_file, constants.SSH_USER +
-                       '@' + master_dns, '-t']
+        if emrutils.which('ssh') or emrutils.which('ssh.exe'):
+            command = [
+                'ssh',
+                '-o',
+                'StrictHostKeyChecking=no',
+                '-o',
+                'ServerAliveInterval=10',
+                '-i',
+                parsed_args.key_pair_file,
+                constants.SSH_USER + '@' + master_dns,
+                '-t',
+            ]
             if parsed_args.command:
                 command.append(parsed_args.command)
         else:
-            command = ['putty', '-ssh', '-i', parsed_args.key_pair_file,
-                       constants.SSH_USER + '@' + master_dns, '-t']
+            command = [
+                'putty',
+                '-ssh',
+                '-i',
+                parsed_args.key_pair_file,
+                constants.SSH_USER + '@' + master_dns,
+                '-t',
+            ]
             if parsed_args.command:
                 f.write(parsed_args.command)
                 f.write('\nread -n1 -r -p "Command completed. Press any key."')
@@ -110,33 +155,57 @@ class SSH(Command):
 
 class Put(Command):
     NAME = 'put'
-    DESCRIPTION = ('Put file onto the master node.\n%s' %
-                   KEY_PAIR_FILE_HELP_TEXT)
+    DESCRIPTION = (
+        'Put file onto the master node.\n%s' % KEY_PAIR_FILE_HELP_TEXT
+    )
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': 'Cluster Id of cluster you want to put file onto'},
-        {'name': 'key-pair-file', 'required': True,
-         'help_text': 'Private key file to use for login'},
-        {'name': 'src', 'required': True,
-         'help_text': 'Source file path on local machine'},
-        {'name': 'dest', 'help_text': 'Destination file path on remote host'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': 'Cluster Id of cluster you want to put file onto',
+        },
+        {
+            'name': 'key-pair-file',
+            'required': True,
+            'help_text': 'Private key file to use for login',
+        },
+        {
+            'name': 'src',
+            'required': True,
+            'help_text': 'Source file path on local machine',
+        },
+        {'name': 'dest', 'help_text': 'Destination file path on remote host'},
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         master_dns = sshutils.validate_and_find_master_dns(
             session=self._session,
             parsed_globals=parsed_globals,
-            cluster_id=parsed_args.cluster_id)
+            cluster_id=parsed_args.cluster_id,
+        )
 
         key_file = parsed_args.key_pair_file
         sshutils.validate_scp_with_key_file(key_file)
-        if (emrutils.which('scp') or emrutils.which('scp.exe')):
-            command = ['scp', '-r', '-o StrictHostKeyChecking=no',
-                       '-i', parsed_args.key_pair_file, parsed_args.src,
-                       constants.SSH_USER + '@' + master_dns]
+        if emrutils.which('scp') or emrutils.which('scp.exe'):
+            command = [
+                'scp',
+                '-r',
+                '-o StrictHostKeyChecking=no',
+                '-i',
+                parsed_args.key_pair_file,
+                parsed_args.src,
+                constants.SSH_USER + '@' + master_dns,
+            ]
         else:
-            command = ['pscp', '-scp', '-r', '-i', parsed_args.key_pair_file,
-                       parsed_args.src, constants.SSH_USER + '@' + master_dns]
+            command = [
+                'pscp',
+                '-scp',
+                '-r',
+                '-i',
+                parsed_args.key_pair_file,
+                parsed_args.src,
+                constants.SSH_USER + '@' + master_dns,
+            ]
 
         # if the instance is not terminated
         if parsed_args.dest:
@@ -150,33 +219,53 @@ class Put(Command):
 
 class Get(Command):
     NAME = 'get'
-    DESCRIPTION = ('Get file from master node.\n%s' % KEY_PAIR_FILE_HELP_TEXT)
+    DESCRIPTION = 'Get file from master node.\n%s' % KEY_PAIR_FILE_HELP_TEXT
     ARG_TABLE = [
-        {'name': 'cluster-id', 'required': True,
-         'help_text': 'Cluster Id of cluster you want to get file from'},
-        {'name': 'key-pair-file', 'required': True,
-         'help_text': 'Private key file to use for login'},
-        {'name': 'src', 'required': True,
-         'help_text': 'Source file path on remote host'},
-        {'name': 'dest', 'help_text': 'Destination file path on your machine'}
+        {
+            'name': 'cluster-id',
+            'required': True,
+            'help_text': 'Cluster Id of cluster you want to get file from',
+        },
+        {
+            'name': 'key-pair-file',
+            'required': True,
+            'help_text': 'Private key file to use for login',
+        },
+        {
+            'name': 'src',
+            'required': True,
+            'help_text': 'Source file path on remote host',
+        },
+        {'name': 'dest', 'help_text': 'Destination file path on your machine'},
     ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         master_dns = sshutils.validate_and_find_master_dns(
             session=self._session,
             parsed_globals=parsed_globals,
-            cluster_id=parsed_args.cluster_id)
+            cluster_id=parsed_args.cluster_id,
+        )
 
         key_file = parsed_args.key_pair_file
         sshutils.validate_scp_with_key_file(key_file)
-        if (emrutils.which('scp') or emrutils.which('scp.exe')):
-            command = ['scp', '-r', '-o StrictHostKeyChecking=no', '-i',
-                       parsed_args.key_pair_file, constants.SSH_USER + '@' +
-                       master_dns + ':' + parsed_args.src]
+        if emrutils.which('scp') or emrutils.which('scp.exe'):
+            command = [
+                'scp',
+                '-r',
+                '-o StrictHostKeyChecking=no',
+                '-i',
+                parsed_args.key_pair_file,
+                constants.SSH_USER + '@' + master_dns + ':' + parsed_args.src,
+            ]
         else:
-            command = ['pscp', '-scp', '-r', '-i', parsed_args.key_pair_file,
-                       constants.SSH_USER + '@' + master_dns + ':' +
-                       parsed_args.src]
+            command = [
+                'pscp',
+                '-scp',
+                '-r',
+                '-i',
+                parsed_args.key_pair_file,
+                constants.SSH_USER + '@' + master_dns + ':' + parsed_args.src,
+            ]
 
         if parsed_args.dest:
             command.append(parsed_args.dest)
diff -pruN 2.23.6-1/awscli/customizations/emr/sshutils.py 2.31.35-1/awscli/customizations/emr/sshutils.py
--- 2.23.6-1/awscli/customizations/emr/sshutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/sshutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,10 @@
 
 import logging
 
-from awscli.customizations.emr import exceptions
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import constants
 from botocore.exceptions import WaiterError
 
+from awscli.customizations.emr import constants, emrutils, exceptions
+
 LOG = logging.getLogger(__name__)
 
 
@@ -32,7 +31,8 @@ def validate_and_find_master_dns(session
     Throw MasterDNSNotAvailableError or ClusterTerminatedError.
     """
     cluster_state = emrutils.get_cluster_state(
-        session, parsed_globals, cluster_id)
+        session, parsed_globals, cluster_id
+    )
 
     if cluster_state in constants.TERMINATED_STATES:
         raise exceptions.ClusterTerminatedError
@@ -48,21 +48,27 @@ def validate_and_find_master_dns(session
         raise exceptions.MasterDNSNotAvailableError
 
     return emrutils.find_master_dns(
-        session=session, cluster_id=cluster_id,
-        parsed_globals=parsed_globals)
+        session=session, cluster_id=cluster_id, parsed_globals=parsed_globals
+    )
 
 
 def validate_ssh_with_key_file(key_file):
-    if (emrutils.which('putty.exe') or emrutils.which('ssh') or
-            emrutils.which('ssh.exe')) is None:
+    if (
+        emrutils.which('putty.exe')
+        or emrutils.which('ssh')
+        or emrutils.which('ssh.exe')
+    ) is None:
         raise exceptions.SSHNotFoundError
     else:
         check_ssh_key_format(key_file)
 
 
 def validate_scp_with_key_file(key_file):
-    if (emrutils.which('pscp.exe') or emrutils.which('scp') or
-            emrutils.which('scp.exe')) is None:
+    if (
+        emrutils.which('pscp.exe')
+        or emrutils.which('scp')
+        or emrutils.which('scp.exe')
+    ) is None:
         raise exceptions.SCPNotFoundError
     else:
         check_scp_key_format(key_file)
@@ -70,8 +76,10 @@ def validate_scp_with_key_file(key_file)
 
 def check_scp_key_format(key_file):
     # If only pscp is present and the file format is incorrect
-    if (emrutils.which('pscp.exe') is not None and
-            (emrutils.which('scp.exe') or emrutils.which('scp')) is None):
+    if (
+        emrutils.which('pscp.exe') is not None
+        and (emrutils.which('scp.exe') or emrutils.which('scp')) is None
+    ):
         if check_command_key_format(key_file, ['ppk']) is False:
             raise exceptions.WrongPuttyKeyError
     else:
@@ -80,8 +88,10 @@ def check_scp_key_format(key_file):
 
 def check_ssh_key_format(key_file):
     # If only putty is present and the file format is incorrect
-    if (emrutils.which('putty.exe') is not None and
-            (emrutils.which('ssh.exe') or emrutils.which('ssh')) is None):
+    if (
+        emrutils.which('putty.exe') is not None
+        and (emrutils.which('ssh.exe') or emrutils.which('ssh')) is None
+    ):
         if check_command_key_format(key_file, ['ppk']) is False:
             raise exceptions.WrongPuttyKeyError
     else:
diff -pruN 2.23.6-1/awscli/customizations/emr/steputils.py 2.31.35-1/awscli/customizations/emr/steputils.py
--- 2.23.6-1/awscli/customizations/emr/steputils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/steputils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import constants
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import constants, emrutils, exceptions
 
 
 def build_step_config_list(parsed_step_list, region, release_label):
@@ -29,23 +27,24 @@ def build_step_config_list(parsed_step_l
             step_config = build_custom_jar_step(parsed_step=step)
         elif step_type == constants.STREAMING:
             step_config = build_streaming_step(
-                parsed_step=step, release_label=release_label)
+                parsed_step=step, release_label=release_label
+            )
         elif step_type == constants.HIVE:
             step_config = build_hive_step(
-                parsed_step=step, region=region,
-                release_label=release_label)
+                parsed_step=step, region=region, release_label=release_label
+            )
         elif step_type == constants.PIG:
             step_config = build_pig_step(
-                parsed_step=step, region=region,
-                release_label=release_label)
+                parsed_step=step, region=region, release_label=release_label
+            )
         elif step_type == constants.IMPALA:
             step_config = build_impala_step(
-                parsed_step=step, region=region,
-                release_label=release_label)
+                parsed_step=step, region=region, release_label=release_label
+            )
         elif step_type == constants.SPARK:
             step_config = build_spark_step(
-                parsed_step=step, region=region,
-                release_label=release_label)
+                parsed_step=step, region=region, release_label=release_label
+            )
         else:
             raise exceptions.UnknownStepTypeError(step_type=step_type)
 
@@ -57,14 +56,17 @@ def build_step_config_list(parsed_step_l
 def build_custom_jar_step(parsed_step):
     name = _apply_default_value(
         arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_CUSTOM_JAR_STEP_NAME)
+        value=constants.DEFAULT_CUSTOM_JAR_STEP_NAME,
+    )
     action_on_failure = _apply_default_value(
         arg=parsed_step.get('ActionOnFailure'),
-        value=constants.DEFAULT_FAILURE_ACTION)
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
     emrutils.check_required_field(
         structure=constants.CUSTOM_JAR_STEP_CONFIG,
         name='Jar',
-        value=parsed_step.get('Jar'))
+        value=parsed_step.get('Jar'),
+    )
     return emrutils.build_step(
         jar=parsed_step.get('Jar'),
         args=parsed_step.get('Args'),
@@ -72,22 +74,25 @@ def build_custom_jar_step(parsed_step):
         action_on_failure=action_on_failure,
         main_class=parsed_step.get('MainClass'),
         properties=emrutils.parse_key_value_string(
-            parsed_step.get('Properties')))
+            parsed_step.get('Properties')
+        ),
+    )
 
 
 def build_streaming_step(parsed_step, release_label):
     name = _apply_default_value(
         arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_STREAMING_STEP_NAME)
+        value=constants.DEFAULT_STREAMING_STEP_NAME,
+    )
     action_on_failure = _apply_default_value(
         arg=parsed_step.get('ActionOnFailure'),
-        value=constants.DEFAULT_FAILURE_ACTION)
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
 
     args = parsed_step.get('Args')
     emrutils.check_required_field(
-        structure=constants.STREAMING_STEP_CONFIG,
-        name='Args',
-        value=args)
+        structure=constants.STREAMING_STEP_CONFIG, name='Args', value=args
+    )
     emrutils.check_empty_string_list(name='Args', value=args)
     args_list = []
 
@@ -100,30 +105,30 @@ def build_streaming_step(parsed_step, re
     args_list += args
 
     return emrutils.build_step(
-        jar=jar,
-        args=args_list,
-        name=name,
-        action_on_failure=action_on_failure)
+        jar=jar, args=args_list, name=name, action_on_failure=action_on_failure
+    )
 
 
 def build_hive_step(parsed_step, release_label, region=None):
     args = parsed_step.get('Args')
     emrutils.check_required_field(
-        structure=constants.HIVE_STEP_CONFIG, name='Args', value=args)
+        structure=constants.HIVE_STEP_CONFIG, name='Args', value=args
+    )
     emrutils.check_empty_string_list(name='Args', value=args)
     name = _apply_default_value(
-        arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_HIVE_STEP_NAME)
-    action_on_failure = \
-        _apply_default_value(
-            arg=parsed_step.get('ActionOnFailure'),
-            value=constants.DEFAULT_FAILURE_ACTION)
+        arg=parsed_step.get('Name'), value=constants.DEFAULT_HIVE_STEP_NAME
+    )
+    action_on_failure = _apply_default_value(
+        arg=parsed_step.get('ActionOnFailure'),
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
 
     return emrutils.build_step(
         jar=_get_runner_jar(release_label, region),
         args=_build_hive_args(args, release_label, region),
         name=name,
-        action_on_failure=action_on_failure)
+        action_on_failure=action_on_failure,
+    )
 
 
 def _build_hive_args(args, release_label, region):
@@ -131,8 +136,11 @@ def _build_hive_args(args, release_label
     if release_label:
         args_list.append(constants.HIVE_SCRIPT_COMMAND)
     else:
-        args_list.append(emrutils.build_s3_link(
-            relative_path=constants.HIVE_SCRIPT_PATH, region=region))
+        args_list.append(
+            emrutils.build_s3_link(
+                relative_path=constants.HIVE_SCRIPT_PATH, region=region
+            )
+        )
 
     args_list.append(constants.RUN_HIVE_SCRIPT)
 
@@ -149,20 +157,23 @@ def _build_hive_args(args, release_label
 def build_pig_step(parsed_step, release_label, region=None):
     args = parsed_step.get('Args')
     emrutils.check_required_field(
-        structure=constants.PIG_STEP_CONFIG, name='Args', value=args)
+        structure=constants.PIG_STEP_CONFIG, name='Args', value=args
+    )
     emrutils.check_empty_string_list(name='Args', value=args)
     name = _apply_default_value(
-        arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_PIG_STEP_NAME)
+        arg=parsed_step.get('Name'), value=constants.DEFAULT_PIG_STEP_NAME
+    )
     action_on_failure = _apply_default_value(
         arg=parsed_step.get('ActionOnFailure'),
-        value=constants.DEFAULT_FAILURE_ACTION)
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
 
     return emrutils.build_step(
         jar=_get_runner_jar(release_label, region),
         args=_build_pig_args(args, release_label, region),
         name=name,
-        action_on_failure=action_on_failure)
+        action_on_failure=action_on_failure,
+    )
 
 
 def _build_pig_args(args, release_label, region):
@@ -170,8 +181,11 @@ def _build_pig_args(args, release_label,
     if release_label:
         args_list.append(constants.PIG_SCRIPT_COMMAND)
     else:
-        args_list.append(emrutils.build_s3_link(
-            relative_path=constants.PIG_SCRIPT_PATH, region=region))
+        args_list.append(
+            emrutils.build_s3_link(
+                relative_path=constants.PIG_SCRIPT_PATH, region=region
+            )
+        )
 
     args_list.append(constants.RUN_PIG_SCRIPT)
 
@@ -189,43 +203,51 @@ def build_impala_step(parsed_step, relea
     if release_label:
         raise exceptions.UnknownStepTypeError(step_type=constants.IMPALA)
     name = _apply_default_value(
-        arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_IMPALA_STEP_NAME)
+        arg=parsed_step.get('Name'), value=constants.DEFAULT_IMPALA_STEP_NAME
+    )
     action_on_failure = _apply_default_value(
         arg=parsed_step.get('ActionOnFailure'),
-        value=constants.DEFAULT_FAILURE_ACTION)
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
     args_list = [
         emrutils.build_s3_link(
-            relative_path=constants.IMPALA_INSTALL_PATH, region=region),
-        constants.RUN_IMPALA_SCRIPT]
+            relative_path=constants.IMPALA_INSTALL_PATH, region=region
+        ),
+        constants.RUN_IMPALA_SCRIPT,
+    ]
     args = parsed_step.get('Args')
     emrutils.check_required_field(
-        structure=constants.IMPALA_STEP_CONFIG, name='Args', value=args)
+        structure=constants.IMPALA_STEP_CONFIG, name='Args', value=args
+    )
     args_list += args
 
     return emrutils.build_step(
         jar=emrutils.get_script_runner(region),
         args=args_list,
         name=name,
-        action_on_failure=action_on_failure)
+        action_on_failure=action_on_failure,
+    )
 
 
 def build_spark_step(parsed_step, release_label, region=None):
     name = _apply_default_value(
-        arg=parsed_step.get('Name'),
-        value=constants.DEFAULT_SPARK_STEP_NAME)
+        arg=parsed_step.get('Name'), value=constants.DEFAULT_SPARK_STEP_NAME
+    )
     action_on_failure = _apply_default_value(
         arg=parsed_step.get('ActionOnFailure'),
-        value=constants.DEFAULT_FAILURE_ACTION)
+        value=constants.DEFAULT_FAILURE_ACTION,
+    )
     args = parsed_step.get('Args')
     emrutils.check_required_field(
-        structure=constants.SPARK_STEP_CONFIG, name='Args', value=args)
+        structure=constants.SPARK_STEP_CONFIG, name='Args', value=args
+    )
 
     return emrutils.build_step(
         jar=_get_runner_jar(release_label, region),
         args=_build_spark_args(args, release_label, region),
         name=name,
-        action_on_failure=action_on_failure)
+        action_on_failure=action_on_failure,
+    )
 
 
 def _build_spark_args(args, release_label, region):
@@ -247,5 +269,8 @@ def _apply_default_value(arg, value):
 
 
 def _get_runner_jar(release_label, region):
-    return constants.COMMAND_RUNNER if release_label \
+    return (
+        constants.COMMAND_RUNNER
+        if release_label
         else emrutils.get_script_runner(region)
+    )
diff -pruN 2.23.6-1/awscli/customizations/emr/terminateclusters.py 2.31.35-1/awscli/customizations/emr/terminateclusters.py
--- 2.23.6-1/awscli/customizations/emr/terminateclusters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emr/terminateclusters.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,23 +12,26 @@
 # language governing permissions and limitations under the License.
 
 
-from awscli.customizations.emr import emrutils
-from awscli.customizations.emr import helptext
+from awscli.customizations.emr import emrutils, helptext
 from awscli.customizations.emr.command import Command
 
 
 class TerminateClusters(Command):
     NAME = 'terminate-clusters'
     DESCRIPTION = helptext.TERMINATE_CLUSTERS
-    ARG_TABLE = [{
-        'name': 'cluster-ids', 'nargs': '+', 'required': True,
-        'help_text': '<p>A list of clusters to terminate.</p>',
-        'schema': {'type': 'array', 'items': {'type': 'string'}},
-    }]
+    ARG_TABLE = [
+        {
+            'name': 'cluster-ids',
+            'nargs': '+',
+            'required': True,
+            'help_text': '<p>A list of clusters to terminate.</p>',
+            'schema': {'type': 'array', 'items': {'type': 'string'}},
+        }
+    ]
 
     def _run_main_command(self, parsed_args, parsed_globals):
         parameters = {'JobFlowIds': parsed_args.cluster_ids}
-        emrutils.call_and_display_response(self._session,
-                                           'TerminateJobFlows', parameters,
-                                           parsed_globals)
+        emrutils.call_and_display_response(
+            self._session, 'TerminateJobFlows', parameters, parsed_globals
+        )
         return 0
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/__init__.py 2.31.35-1/awscli/customizations/emrcontainers/__init__.py
--- 2.23.6-1/awscli/customizations/emrcontainers/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.emrcontainers.update_role_trust_policy \
-    import UpdateRoleTrustPolicyCommand
+from awscli.customizations.emrcontainers.create_role_associations import (
+    CreateRoleAssociationsCommand,
+)
+from awscli.customizations.emrcontainers.delete_role_associations import (
+    DeleteRoleAssociationsCommand,
+)
+from awscli.customizations.emrcontainers.update_role_trust_policy import (
+    UpdateRoleTrustPolicyCommand,
+)
 
 
 def initialize(cli):
@@ -28,4 +35,11 @@ def inject_commands(command_table, sessi
     Used to inject new high level commands into the command list.
     """
     command_table['update-role-trust-policy'] = UpdateRoleTrustPolicyCommand(
-        session)
+        session
+    )
+    command_table['create-role-associations'] = CreateRoleAssociationsCommand(
+        session
+    )
+    command_table['delete-role-associations'] = DeleteRoleAssociationsCommand(
+        session
+    )
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/base36.py 2.31.35-1/awscli/customizations/emrcontainers/base36.py
--- 2.23.6-1/awscli/customizations/emrcontainers/base36.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/base36.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,7 @@
 # language governing permissions and limitations under the License.
 
 
-class Base36(object):
+class Base36:
     def str_to_int(self, request):
         """Method to convert given string into decimal representation"""
         result = 0
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/constants.py 2.31.35-1/awscli/customizations/emrcontainers/constants.py
--- 2.23.6-1/awscli/customizations/emrcontainers/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,24 +14,37 @@
 # Declare all the constants used by Lifecycle in this file
 
 # Lifecycle role names
-TRUST_POLICY_STATEMENT_FORMAT = '{ \
+from enum import Enum
+
+TRUST_POLICY_STATEMENT_FORMAT = (
+    '{ \
     "Effect": "Allow", \
     "Principal": { \
-        "Federated": "arn:%(AWS_PARTITION)s:iam::%(AWS_ACCOUNT_ID)s:oidc-provider/' \
-                                '%(OIDC_PROVIDER)s" \
+        "Federated": "arn:%(AWS_PARTITION)s:iam::%(AWS_ACCOUNT_ID)s:oidc-provider/'
+    '%(OIDC_PROVIDER)s" \
     }, \
     "Action": "sts:AssumeRoleWithWebIdentity", \
     "Condition": { \
         "StringLike": { \
-            "%(OIDC_PROVIDER)s:sub": "system:serviceaccount:%(NAMESPACE)s' \
-                                ':emr-containers-sa-*-*-%(AWS_ACCOUNT_ID)s-' \
-                                '%(BASE36_ENCODED_ROLE_NAME)s" \
+            "%(OIDC_PROVIDER)s:sub": "system:serviceaccount:%(NAMESPACE)s'
+    ':emr-containers-sa-*-*-%(AWS_ACCOUNT_ID)s-'
+    '%(BASE36_ENCODED_ROLE_NAME)s" \
         } \
     } \
 }'
+)
 
-TRUST_POLICY_STATEMENT_ALREADY_EXISTS = "Trust policy statement already " \
-                                        "exists for role %s. No changes " \
-                                        "were made!"
+TRUST_POLICY_STATEMENT_ALREADY_EXISTS = (
+    "Trust policy statement already exists for role %s. No changes were made!"
+)
 
 TRUST_POLICY_UPDATE_SUCCESSFUL = "Successfully updated trust policy of role %s"
+
+SERVICE_ACCOUNT_NAMING = "emr-containers-sa-%(FRAMEWORK)s-%(COMPONENT)s-%(AWS_ACCOUNT_ID)s-%(BASE36_ENCODED_ROLE_NAME)s"
+
+
+class ServiceAccount(Enum):
+    SPARK_OPERATOR_SERVICE_ACCOUNT = "emr-containers-sa-spark-operator"
+    FLINK_OPERATOR_SERVICE_ACCOUNT = "emr-containers-sa-flink-operator"
+    LIVY_SERVICE_ACCOUNT = "emr-containers-sa-livy"
+    LIVY_SPARK_SERVICE_ACCOUNT = "emr-container-sa-spark-livy"
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/create_role_associations.py 2.31.35-1/awscli/customizations/emrcontainers/create_role_associations.py
--- 2.23.6-1/awscli/customizations/emrcontainers/create_role_associations.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/create_role_associations.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,307 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import json
+import logging
+import sys
+
+import botocore
+
+from awscli.customizations.commands import BasicCommand
+from awscli.customizations.emrcontainers.base36 import Base36
+from awscli.customizations.emrcontainers.constants import (
+    SERVICE_ACCOUNT_NAMING,
+    ServiceAccount,
+)
+from awscli.customizations.emrcontainers.eks import EKS
+from awscli.customizations.emrcontainers.utils import get_region
+from awscli.customizations.utils import get_policy_arn_suffix, uni_print
+
+LOG = logging.getLogger(__name__)
+
+
+class CreateRoleAssociationsCommand(BasicCommand):
+    NAME = "create-role-associations"
+
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        "emr-containers", "create-role-associations", "_description.rst"
+    )
+
+    ARG_TABLE = [
+        {
+            "name": "cluster-name",
+            "help_text": (
+                "Specify the name of the Amazon EKS cluster with "
+                "which the IAM Role would be associated."
+            ),
+            "required": True,
+        },
+        {
+            "name": "namespace",
+            "help_text": (
+                "Specify the job/application namespace from the Amazon EKS cluster "
+                "with which the IAM Role would be associated."
+            ),
+            "required": True,
+        },
+        {
+            "name": "role-name",
+            "help_text": (
+                "Specify the IAM Role name that you want to associate "
+                "with Amazon EMR on EKS."
+            ),
+            "required": True,
+        },
+        {
+            "name": "type",
+            "help_text": (
+                "Specify the Amazon EMR on EKS submission model and choose service accounts that you want to associate "
+                "with Amazon EMR on EKS. The default is start_job_run. Supported types: start_job_run, "
+                "interactive_endpoint, spark_operator, flink_operator, livy."
+            ),
+            "required": False,
+            "choices": [
+                "start_job_run",
+                "interactive_endpoint",
+                "spark_operator",
+                "flink_operator",
+                "livy",
+            ],
+        },
+        {
+            "name": "operator-namespace",
+            "help_text": (
+                "Specify the namespace that you want to associate the operator service account "
+                "with the IAM role. Default to the job/application namespace specified. Note: "
+                "If jobs are running in a different namespace than the operator installation namespace, "
+                "this parameter needs to be set as the namespace that the operator is running on."
+            ),
+            "required": False,
+        },
+        {
+            "name": "service-account-name",
+            "help_text": (
+                "Specify the service account name that you want to associate with the IAM role. "
+                "By default, Amazon EMR on EKS service accounts will be used for association."
+            ),
+            "required": False,
+        },
+    ]
+
+    def _run_main(self, parsed_args, parsed_globals):
+        """Call to run the commands"""
+
+        self._cluster_name = parsed_args.cluster_name
+        self._namespace = parsed_args.namespace
+        self._role_name = parsed_args.role_name
+        self._type = parsed_args.type or "start_job_run"
+        self._operator_namespace = parsed_args.operator_namespace
+        self._service_account_name = parsed_args.service_account_name
+        self._region = get_region(self._session, parsed_globals)
+
+        result = self._create_role_associations(parsed_globals)
+        if result:
+            uni_print(json.dumps(result, indent=4))
+
+        return 0
+
+    def _create_role_associations(self, parsed_globals):
+        """Method to create role associations if not done already"""
+        eks_client = EKS(
+            self._session.create_client(
+                "eks",
+                region_name=self._region,
+                verify=parsed_globals.verify_ssl,
+            )
+        )
+        account_id = eks_client.get_account_id(self._cluster_name)
+        role_arn = f"arn:{get_policy_arn_suffix(self._region)}:iam::{account_id}:role/{self._role_name}"
+
+        results = []
+        # If service account provided, create association with provided service account and role
+        if self._service_account_name:
+            service_account_namespace_mapping = [
+                (self._service_account_name, self._namespace)
+            ]
+        else:
+            # By default, create associations with EMR on EKS service accounts
+            base36 = Base36()
+
+            base36_encoded_role_name = base36.encode(self._role_name)
+            LOG.debug(f"Base36 encoded role name: {base36_encoded_role_name}")
+            service_account_namespace_mapping = (
+                self._get_emr_service_account_namespace_mapping(
+                    account_id, base36_encoded_role_name
+                )
+            )
+
+        for (
+            service_account_name,
+            namespace,
+        ) in service_account_namespace_mapping:
+            LOG.debug(
+                f"Creating pod identity association for service account {service_account_name} and "
+                + f"role {self._role_name} in namespace {namespace}"
+            )
+            try:
+                result = eks_client.create_pod_identity_association(
+                    self._cluster_name,
+                    namespace,
+                    role_arn,
+                    service_account_name,
+                )
+                results.append(
+                    result["association"]
+                    if "association" in result
+                    else result
+                )
+            except botocore.exceptions.ClientError as error:
+                # Raise the error if EKS throws exceptions other than ResourceInUseException
+                if error.response["Error"]["Code"] != "ResourceInUseException":
+                    for result in results:
+                        uni_print(
+                            f"Rolling back association for service account {service_account_name} "
+                            f"and role {self._role_name} in namespace {namespace} as an error was encountered\n",
+                            out_file=sys.stderr,
+                        )
+                        eks_client.delete_pod_identity_association(
+                            cluster_name=result["clusterName"],
+                            association_id=result["associationId"],
+                        )
+                    raise Exception(
+                        f"Failed to create pod identity association for service account {service_account_name}, "
+                        f"role {self._role_name} in namespace {namespace}: {error.response['Error']['Message']}"
+                    ) from error
+                uni_print(
+                    f"Skipping pod identity association creation because pod identity association already exists for "
+                    f"service account {service_account_name} and role {self._role_name} in namespace {namespace}: "
+                    f"{error.response['Error']['Message']}\n",
+                    out_file=sys.stderr,
+                )
+        return results
+
+    def _get_emr_service_account_namespace_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        return getattr(self, f"_get_{self._type}_mapping")(
+            account_id, base36_encoded_role_name
+        )
+
+    def _get_start_job_run_mapping(self, account_id, base36_encoded_role_name):
+        emr_spark_components = ["client", "driver", "executor"]
+        return [
+            (
+                SERVICE_ACCOUNT_NAMING
+                % {
+                    "FRAMEWORK": "spark",
+                    "COMPONENT": component,
+                    "AWS_ACCOUNT_ID": account_id,
+                    "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                },
+                self._namespace,
+            )
+            for component in emr_spark_components
+        ]
+
+    def _get_interactive_endpoint_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_spark_endpoint_components = ["jeg", "jeg-kernel", "session"]
+        return [
+            (
+                SERVICE_ACCOUNT_NAMING
+                % {
+                    "FRAMEWORK": "spark",
+                    "COMPONENT": component,
+                    "AWS_ACCOUNT_ID": account_id,
+                    "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                },
+                self._namespace,
+            )
+            for component in emr_spark_endpoint_components
+        ]
+
+    def _get_spark_operator_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_spark_operator_components = ["driver", "executor"]
+        service_accounts = [
+            (
+                ServiceAccount.SPARK_OPERATOR_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            )
+        ]
+        service_accounts.extend(
+            [
+                (
+                    SERVICE_ACCOUNT_NAMING
+                    % {
+                        "FRAMEWORK": "spark",
+                        "COMPONENT": component,
+                        "AWS_ACCOUNT_ID": account_id,
+                        "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                    },
+                    self._namespace,
+                )
+                for component in emr_spark_operator_components
+            ]
+        )
+        return service_accounts
+
+    def _get_flink_operator_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_flink_operator_components = ["jobmanager", "taskmanager"]
+        service_accounts = [
+            (
+                ServiceAccount.FLINK_OPERATOR_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            )
+        ]
+        service_accounts.extend(
+            [
+                (
+                    SERVICE_ACCOUNT_NAMING
+                    % {
+                        "FRAMEWORK": "flink",
+                        "COMPONENT": component,
+                        "AWS_ACCOUNT_ID": account_id,
+                        "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                    },
+                    self._namespace,
+                )
+                for component in emr_flink_operator_components
+            ]
+        )
+        return service_accounts
+
+    def _get_livy_mapping(self, account_id, base36_encoded_role_name):
+        return [
+            (
+                ServiceAccount.LIVY_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            ),
+            (ServiceAccount.LIVY_SPARK_SERVICE_ACCOUNT.value, self._namespace),
+        ]
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/delete_role_associations.py 2.31.35-1/awscli/customizations/emrcontainers/delete_role_associations.py
--- 2.23.6-1/awscli/customizations/emrcontainers/delete_role_associations.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/delete_role_associations.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,298 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import json
+import logging
+import sys
+
+import botocore
+
+from awscli.customizations.commands import BasicCommand
+from awscli.customizations.emrcontainers.base36 import Base36
+from awscli.customizations.emrcontainers.constants import (
+    SERVICE_ACCOUNT_NAMING,
+    ServiceAccount,
+)
+from awscli.customizations.emrcontainers.eks import EKS
+from awscli.customizations.emrcontainers.utils import get_region
+from awscli.customizations.utils import uni_print
+
+LOG = logging.getLogger(__name__)
+
+
+class DeleteRoleAssociationsCommand(BasicCommand):
+    NAME = "delete-role-associations"
+
+    DESCRIPTION = BasicCommand.FROM_FILE(
+        "emr-containers", "delete-role-associations", "_description.rst"
+    )
+
+    ARG_TABLE = [
+        {
+            "name": "cluster-name",
+            "help_text": (
+                "Specify the name of the Amazon EKS cluster with "
+                "which the IAM Role would be dissociated."
+            ),
+            "required": True,
+        },
+        {
+            "name": "namespace",
+            "help_text": (
+                "Specify the job/application namespace from the Amazon EKS cluster "
+                "with which the IAM Role would be dissociated."
+            ),
+            "required": True,
+        },
+        {
+            "name": "role-name",
+            "help_text": (
+                "Specify the IAM Role name that you want to dissociate "
+                "with Amazon EMR on EKS."
+            ),
+            "required": True,
+        },
+        {
+            "name": "type",
+            "help_text": (
+                "Specify the Amazon EMR on EKS submission model and choose service accounts that you want to "
+                "dissociate from Amazon EMR on EKS. The default is start_job_run. Supported types: start_job_run, "
+                "interactive_endpoint, spark_operator, flink_operator, livy."
+            ),
+            "required": False,
+            "choices": [
+                "start_job_run",
+                "interactive_endpoint",
+                "spark_operator",
+                "flink_operator",
+                "livy",
+            ],
+        },
+        {
+            "name": "operator-namespace",
+            "help_text": (
+                "Specify the namespace under which you want to dissociate the operator service account "
+                "from the IAM role. Default to the job/application namespace specified. Note: If jobs are running "
+                "in a different namespace than the operator installation namespace, this parameter needs to be set as "
+                "the namespace that the operator is running on."
+            ),
+            "required": False,
+        },
+        {
+            "name": "service-account-name",
+            "help_text": (
+                "Specify the service account name that you want to dissociate with the IAM role. "
+                "By default, Amazon EMR on EKS service accounts will be used for association."
+            ),
+            "required": False,
+        },
+    ]
+
+    def _run_main(self, parsed_args, parsed_globals):
+        """Call to run the commands"""
+
+        self._cluster_name = parsed_args.cluster_name
+        self._namespace = parsed_args.namespace
+        self._role_name = parsed_args.role_name
+        self._type = parsed_args.type or "start_job_run"
+        self._operator_namespace = parsed_args.operator_namespace
+        self._service_account_name = parsed_args.service_account_name
+        self._region = get_region(self._session, parsed_globals)
+
+        result = self._delete_role_associations(parsed_globals)
+        if result:
+            uni_print(json.dumps(result, indent=4))
+
+        return 0
+
+    def _delete_role_associations(self, parsed_globals):
+        """Method to delete role associations if not done already"""
+        eks_client = EKS(
+            self._session.create_client(
+                "eks",
+                region_name=self._region,
+                verify=parsed_globals.verify_ssl,
+            )
+        )
+        account_id = eks_client.get_account_id(self._cluster_name)
+
+        results = []
+        # If service account provided, delete association with provided service account and role
+        if self._service_account_name:
+            service_account_namespace_mapping = [
+                (self._service_account_name, self._namespace)
+            ]
+        else:
+            # By default, delete associations with EMR on EKS service accounts
+            base36 = Base36()
+
+            base36_encoded_role_name = base36.encode(self._role_name)
+            LOG.debug(f"Base36 encoded role name: {base36_encoded_role_name}")
+            service_account_namespace_mapping = (
+                self._get_emr_service_account_namespace_mapping(
+                    account_id, base36_encoded_role_name
+                )
+            )
+
+        for (
+            service_account_name,
+            namespace,
+        ) in service_account_namespace_mapping:
+            try:
+                association = eks_client.list_pod_identity_associations(
+                    self._cluster_name, namespace, service_account_name
+                )
+                if not association.get("associations", []):
+                    uni_print(
+                        f"Skipping deletion as no pod identity association found for service account {service_account_name} "
+                        f"and role {self._role_name} in namespace {namespace}\n",
+                        out_file=sys.stderr,
+                    )
+                    continue
+                association_id = association["associations"][0][
+                    "associationId"
+                ]
+                LOG.debug(
+                    f"Deleting pod identity association for service account {service_account_name} "
+                    f"and role {self._role_name} in {namespace} with association id {association_id}"
+                )
+                result = eks_client.delete_pod_identity_association(
+                    self._cluster_name, association_id
+                )
+                results.append(
+                    result["association"]
+                    if "association" in result
+                    else result
+                )
+            except botocore.exceptions.ClientError as error:
+                raise Exception(
+                    f"Failed to delete pod identity association for service account {service_account_name}, "
+                    f"role {self._role_name} in namespace {namespace}: {error.response['Error']['Message']}"
+                ) from error
+        return results
+
+    def _get_emr_service_account_namespace_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        return getattr(self, f"_get_{self._type}_mapping")(
+            account_id, base36_encoded_role_name
+        )
+
+    def _get_start_job_run_mapping(self, account_id, base36_encoded_role_name):
+        emr_spark_components = ["client", "driver", "executor"]
+        return [
+            (
+                SERVICE_ACCOUNT_NAMING
+                % {
+                    "FRAMEWORK": "spark",
+                    "COMPONENT": component,
+                    "AWS_ACCOUNT_ID": account_id,
+                    "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                },
+                self._namespace,
+            )
+            for component in emr_spark_components
+        ]
+
+    def _get_interactive_endpoint_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_spark_endpoint_components = ["jeg", "jeg-kernel", "session"]
+        return [
+            (
+                SERVICE_ACCOUNT_NAMING
+                % {
+                    "FRAMEWORK": "spark",
+                    "COMPONENT": component,
+                    "AWS_ACCOUNT_ID": account_id,
+                    "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                },
+                self._namespace,
+            )
+            for component in emr_spark_endpoint_components
+        ]
+
+    def _get_spark_operator_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_spark_operator_components = ["driver", "executor"]
+        service_accounts = [
+            (
+                ServiceAccount.SPARK_OPERATOR_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            )
+        ]
+        service_accounts.extend(
+            [
+                (
+                    SERVICE_ACCOUNT_NAMING
+                    % {
+                        "FRAMEWORK": "spark",
+                        "COMPONENT": component,
+                        "AWS_ACCOUNT_ID": account_id,
+                        "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                    },
+                    self._namespace,
+                )
+                for component in emr_spark_operator_components
+            ]
+        )
+        return service_accounts
+
+    def _get_flink_operator_mapping(
+        self, account_id, base36_encoded_role_name
+    ):
+        emr_flink_operator_components = ["jobmanager", "taskmanager"]
+        service_accounts = [
+            (
+                ServiceAccount.FLINK_OPERATOR_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            )
+        ]
+        service_accounts.extend(
+            [
+                (
+                    SERVICE_ACCOUNT_NAMING
+                    % {
+                        "FRAMEWORK": "flink",
+                        "COMPONENT": component,
+                        "AWS_ACCOUNT_ID": account_id,
+                        "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                    },
+                    self._namespace,
+                )
+                for component in emr_flink_operator_components
+            ]
+        )
+        return service_accounts
+
+    def _get_livy_mapping(self, account_id, base36_encoded_role_name):
+        return [
+            (
+                ServiceAccount.LIVY_SERVICE_ACCOUNT.value,
+                (
+                    self._operator_namespace
+                    if self._operator_namespace
+                    else self._namespace
+                ),
+            ),
+            (ServiceAccount.LIVY_SPARK_SERVICE_ACCOUNT.value, self._namespace),
+        ]
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/eks.py 2.31.35-1/awscli/customizations/emrcontainers/eks.py
--- 2.23.6-1/awscli/customizations/emrcontainers/eks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/eks.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,7 @@
 # language governing permissions and limitations under the License.
 
 
-class EKS(object):
+class EKS:
     def __init__(self, eks_client):
         self.eks_client = eks_client
         self.cluster_info = {}
@@ -24,8 +24,13 @@ class EKS(object):
                 name=cluster_name
             )
 
-        oidc_issuer = self.cluster_info[cluster_name].get("cluster", {}).get(
-            "identity", {}).get("oidc", {}).get("issuer", "")
+        oidc_issuer = (
+            self.cluster_info[cluster_name]
+            .get("cluster", {})
+            .get("identity", {})
+            .get("oidc", {})
+            .get("issuer", "")
+        )
 
         return oidc_issuer.split('https://')[1]
 
@@ -36,7 +41,32 @@ class EKS(object):
                 name=cluster_name
             )
 
-        cluster_arn = self.cluster_info[cluster_name].get("cluster", {}).get(
-            "arn", "")
+        cluster_arn = (
+            self.cluster_info[cluster_name].get("cluster", {}).get("arn", "")
+        )
 
         return cluster_arn.split(':')[4]
+
+    def create_pod_identity_association(
+        self, cluster_name, namespace, role_arn, service_account
+    ):
+        return self.eks_client.create_pod_identity_association(
+            clusterName=cluster_name,
+            namespace=namespace,
+            roleArn=role_arn,
+            serviceAccount=service_account,
+        )
+
+    def delete_pod_identity_association(self, cluster_name, association_id):
+        return self.eks_client.delete_pod_identity_association(
+            clusterName=cluster_name, associationId=association_id
+        )
+
+    def list_pod_identity_associations(
+        self, cluster_name, namespace, service_account
+    ):
+        return self.eks_client.list_pod_identity_associations(
+            clusterName=cluster_name,
+            namespace=namespace,
+            serviceAccount=service_account,
+        )
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/iam.py 2.31.35-1/awscli/customizations/emrcontainers/iam.py
--- 2.23.6-1/awscli/customizations/emrcontainers/iam.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/iam.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,7 @@
 import json
 
 
-class IAM(object):
+class IAM:
     def __init__(self, iam_client):
         self.iam_client = iam_client
 
@@ -26,6 +26,5 @@ class IAM(object):
     def update_assume_role_policy(self, role_name, assume_role_policy):
         """Method to update trust policy of given role name"""
         return self.iam_client.update_assume_role_policy(
-            RoleName=role_name,
-            PolicyDocument=json.dumps(assume_role_policy)
+            RoleName=role_name, PolicyDocument=json.dumps(assume_role_policy)
         )
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/update_role_trust_policy.py 2.31.35-1/awscli/customizations/emrcontainers/update_role_trust_policy.py
--- 2.23.6-1/awscli/customizations/emrcontainers/update_role_trust_policy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/update_role_trust_policy.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,28 +15,20 @@ import json
 import logging
 
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.emrcontainers.constants \
-    import TRUST_POLICY_STATEMENT_FORMAT, \
-    TRUST_POLICY_STATEMENT_ALREADY_EXISTS, \
-    TRUST_POLICY_UPDATE_SUCCESSFUL
 from awscli.customizations.emrcontainers.base36 import Base36
+from awscli.customizations.emrcontainers.constants import (
+    TRUST_POLICY_STATEMENT_ALREADY_EXISTS,
+    TRUST_POLICY_STATEMENT_FORMAT,
+    TRUST_POLICY_UPDATE_SUCCESSFUL,
+)
 from awscli.customizations.emrcontainers.eks import EKS
 from awscli.customizations.emrcontainers.iam import IAM
-from awscli.customizations.utils import uni_print, get_policy_arn_suffix
+from awscli.customizations.emrcontainers.utils import get_region
+from awscli.customizations.utils import get_policy_arn_suffix, uni_print
 
 LOG = logging.getLogger(__name__)
 
 
-# Method to parse the arguments to get the region value
-def get_region(session, parsed_globals):
-    region = parsed_globals.region
-
-    if region is None:
-        region = session.get_config_variable('region')
-
-    return region
-
-
 def check_if_statement_exists(expected_statement, actual_assume_role_document):
     if actual_assume_role_document is None:
         return False
@@ -71,48 +63,56 @@ class UpdateRoleTrustPolicyCommand(Basic
     NAME = 'update-role-trust-policy'
 
     DESCRIPTION = BasicCommand.FROM_FILE(
-        'emr-containers',
-        'update-role-trust-policy',
-        '_description.rst'
+        'emr-containers', 'update-role-trust-policy', '_description.rst'
     )
 
     ARG_TABLE = [
         {
             'name': 'cluster-name',
-            'help_text': ("Specify the name of the Amazon EKS cluster with "
-                          "which the IAM Role would be used."),
-            'required': True
+            'help_text': (
+                "Specify the name of the Amazon EKS cluster with "
+                "which the IAM Role would be used."
+            ),
+            'required': True,
         },
         {
             'name': 'namespace',
-            'help_text': ("Specify the namespace from the Amazon EKS cluster "
-                          "with which the IAM Role would be used."),
-            'required': True
+            'help_text': (
+                "Specify the namespace from the Amazon EKS cluster "
+                "with which the IAM Role would be used."
+            ),
+            'required': True,
         },
         {
             'name': 'role-name',
-            'help_text': ("Specify the IAM Role name that you want to use"
-                          "with Amazon EMR on EKS."),
-            'required': True
+            'help_text': (
+                "Specify the IAM Role name that you want to use"
+                "with Amazon EMR on EKS."
+            ),
+            'required': True,
         },
         {
             'name': 'iam-endpoint',
             'no_paramfile': True,
-            'help_text': ("The  IAM  endpoint  to call for updating the role "
-                          "trust policy. This is optional and should only be"
-                          "specified when a custom endpoint should be called"
-                          "for IAM operations."),
-            'required': False
+            'help_text': (
+                "The  IAM  endpoint  to call for updating the role "
+                "trust policy. This is optional and should only be"
+                "specified when a custom endpoint should be called"
+                "for IAM operations."
+            ),
+            'required': False,
         },
         {
             'name': 'dry-run',
             'action': 'store_true',
             'default': False,
-            'help_text': ("Print the merged trust policy document to"
-                          "stdout instead of updating the role trust"
-                          "policy directly."),
-            'required': False
-        }
+            'help_text': (
+                "Print the merged trust policy document to"
+                "stdout instead of updating the role trust"
+                "policy directly."
+            ),
+            'required': False,
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -136,42 +136,55 @@ class UpdateRoleTrustPolicyCommand(Basic
 
         base36 = Base36()
 
-        eks_client = EKS(self._session.create_client(
-            'eks',
-            region_name=self._region,
-            verify=parsed_globals.verify_ssl
-        ))
+        eks_client = EKS(
+            self._session.create_client(
+                'eks',
+                region_name=self._region,
+                verify=parsed_globals.verify_ssl,
+            )
+        )
 
         account_id = eks_client.get_account_id(self._cluster_name)
         oidc_provider = eks_client.get_oidc_issuer_id(self._cluster_name)
 
         base36_encoded_role_name = base36.encode(self._role_name)
         LOG.debug('Base36 encoded role name: %s', base36_encoded_role_name)
-        trust_policy_statement = json.loads(TRUST_POLICY_STATEMENT_FORMAT % {
-            "AWS_ACCOUNT_ID": account_id,
-            "OIDC_PROVIDER": oidc_provider,
-            "NAMESPACE": self._namespace,
-            "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
-            "AWS_PARTITION": get_policy_arn_suffix(self._region)
-        })
-
-        LOG.debug('Computed Trust Policy Statement:\n%s', json.dumps(
-            trust_policy_statement, indent=2))
-        iam_client = IAM(self._session.create_client(
-            'iam',
-            region_name=self._region,
-            endpoint_url=self._endpoint_url,
-            verify=parsed_globals.verify_ssl
-        ))
+        trust_policy_statement = json.loads(
+            TRUST_POLICY_STATEMENT_FORMAT
+            % {
+                "AWS_ACCOUNT_ID": account_id,
+                "OIDC_PROVIDER": oidc_provider,
+                "NAMESPACE": self._namespace,
+                "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+                "AWS_PARTITION": get_policy_arn_suffix(self._region),
+            }
+        )
+
+        LOG.debug(
+            'Computed Trust Policy Statement:\n%s',
+            json.dumps(trust_policy_statement, indent=2),
+        )
+        iam_client = IAM(
+            self._session.create_client(
+                'iam',
+                region_name=self._region,
+                endpoint_url=self._endpoint_url,
+                verify=parsed_globals.verify_ssl,
+            )
+        )
 
         assume_role_document = iam_client.get_assume_role_policy(
-            self._role_name)
-        matches = check_if_statement_exists(trust_policy_statement,
-                                            assume_role_document)
+            self._role_name
+        )
+        matches = check_if_statement_exists(
+            trust_policy_statement, assume_role_document
+        )
 
         if not matches:
-            LOG.debug('Role %s does not have the required trust policy ',
-                      self._role_name)
+            LOG.debug(
+                'Role %s does not have the required trust policy ',
+                self._role_name,
+            )
 
             existing_statements = assume_role_document.get("Statement")
             if existing_statements is None:
@@ -183,8 +196,9 @@ class UpdateRoleTrustPolicyCommand(Basic
                 return json.dumps(assume_role_document, indent=2)
             else:
                 LOG.debug('Updating trust policy of role %s', self._role_name)
-                iam_client.update_assume_role_policy(self._role_name,
-                                                     assume_role_document)
+                iam_client.update_assume_role_policy(
+                    self._role_name, assume_role_document
+                )
                 return TRUST_POLICY_UPDATE_SUCCESSFUL % self._role_name
         else:
             return TRUST_POLICY_STATEMENT_ALREADY_EXISTS % self._role_name
diff -pruN 2.23.6-1/awscli/customizations/emrcontainers/utils.py 2.31.35-1/awscli/customizations/emrcontainers/utils.py
--- 2.23.6-1/awscli/customizations/emrcontainers/utils.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/customizations/emrcontainers/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+"""
+Utility functions to make it easier to work with emr-containers customizations.
+
+"""
+
+
+# Method to parse the arguments to get the region value
+def get_region(session, parsed_globals):
+    region = parsed_globals.region
+
+    if region is None:
+        region = session.get_config_variable("region")
+
+    return region
diff -pruN 2.23.6-1/awscli/customizations/flatten.py 2.31.35-1/awscli/customizations/flatten.py
--- 2.23.6-1/awscli/customizations/flatten.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/flatten.py	2025-11-12 19:17:29.000000000 +0000
@@ -30,15 +30,26 @@ class FlattenedArgument(CustomArgument):
     Supports both an object and a list of objects, in which case the flattened
     parameters will hydrate a list with a single object in it.
     """
-    def __init__(self, name, container, prop, help_text='', required=None,
-                 type=None, hydrate=None, hydrate_value=None):
+
+    def __init__(
+        self,
+        name,
+        container,
+        prop,
+        help_text='',
+        required=None,
+        type=None,
+        hydrate=None,
+        hydrate_value=None,
+    ):
         self.type = type
         self._container = container
         self._property = prop
         self._hydrate = hydrate
         self._hydrate_value = hydrate_value
-        super(FlattenedArgument, self).__init__(name=name, help_text=help_text,
-                                                required=required)
+        super(FlattenedArgument, self).__init__(
+            name=name, help_text=help_text, required=required
+        )
 
     @property
     def cli_type_name(self):
@@ -56,7 +67,7 @@ class FlattenedArgument(CustomArgument):
         cli_type = self._container.cli_type_name
         key = self._property
 
-        LOG.debug('Hydrating {0}[{1}]'.format(container, key))
+        LOG.debug('Hydrating %s[%s]', container, key)
 
         if value is not None:
             # Convert type if possible
@@ -85,7 +96,7 @@ class FlattenedArgument(CustomArgument):
                     parameters[container][key] = value
 
 
-class FlattenArguments(object):
+class FlattenArguments:
     """
     Flatten arguments for one or more commands for a particular service from
     a given configuration which maps service call parameters to flattened
@@ -151,6 +162,7 @@ class FlattenArguments(object):
     ensure that a list of one or more objects is hydrated rather than a
     single object.
     """
+
     def __init__(self, service_name, configs):
         self.configs = configs
         self.service_name = service_name
@@ -163,9 +175,10 @@ class FlattenArguments(object):
         # Flatten each configured operation when they are built
         service = self.service_name
         for operation in self.configs:
-            cli.register('building-argument-table.{0}.{1}'.format(service,
-                                                                  operation),
-                         self.flatten_args)
+            cli.register(
+                f'building-argument-table.{service}.{operation}',
+                self.flatten_args,
+            )
 
     def flatten_args(self, command, argument_table, **kwargs):
         # For each argument with a bag of parameters
@@ -173,10 +186,15 @@ class FlattenArguments(object):
             argument_from_table = argument_table[name]
             overwritten = False
 
-            LOG.debug('Flattening {0} argument {1} into {2}'.format(
-                command.name, name,
-                ', '.join([v['name'] for k, v in argument['flatten'].items()])
-            ))
+            LOG.debug(
+                'Flattening {0} argument {1} into {2}'.format(
+                    command.name,
+                    name,
+                    ', '.join(
+                        [v['name'] for k, v in argument['flatten'].items()]
+                    ),
+                )
+            )
 
             # For each parameter to flatten out
             for sub_argument, new_config in argument['flatten'].items():
@@ -200,8 +218,9 @@ class FlattenArguments(object):
                     overwritten = True
 
             # Delete the original argument?
-            if not overwritten and ('keep' not in argument or
-                                    not argument['keep']):
+            if not overwritten and (
+                'keep' not in argument or not argument['keep']
+            ):
                 del argument_table[name]
 
     def _find_nested_arg(self, argument, name):
@@ -212,16 +231,14 @@ class FlattenArguments(object):
         """
         if SEP in name:
             # Find the actual nested argument to pull out
-            LOG.debug('Finding nested argument in {0}'.format(name))
+            LOG.debug('Finding nested argument in %s', name)
             for piece in name.split(SEP)[:-1]:
                 for member_name, member in argument.members.items():
                     if member_name == piece:
                         argument = member
                         break
                 else:
-                    raise ParamValidationError(
-                        'Invalid piece {0}'.format(piece)
-                    )
+                    raise ParamValidationError(f'Invalid piece {piece}')
 
         return argument
 
@@ -239,7 +256,9 @@ class FlattenArguments(object):
                     config['help_text'] = member.documentation
 
                 if 'required' not in config:
-                    config['required'] = member_name in argument.required_members
+                    config['required'] = (
+                        member_name in argument.required_members
+                    )
 
                 if 'type' not in config:
                     config['type'] = member.type_name
diff -pruN 2.23.6-1/awscli/customizations/gamelift/__init__.py 2.31.35-1/awscli/customizations/gamelift/__init__.py
--- 2.23.6-1/awscli/customizations/gamelift/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/gamelift/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.gamelift.uploadbuild import UploadBuildCommand
 from awscli.customizations.gamelift.getlog import GetGameSessionLogCommand
+from awscli.customizations.gamelift.uploadbuild import UploadBuildCommand
 
 
 def register_gamelift_commands(event_emitter):
diff -pruN 2.23.6-1/awscli/customizations/gamelift/getlog.py 2.31.35-1/awscli/customizations/gamelift/getlog.py
--- 2.23.6-1/awscli/customizations/gamelift/getlog.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/gamelift/getlog.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,30 +21,38 @@ class GetGameSessionLogCommand(BasicComm
     NAME = 'get-game-session-log'
     DESCRIPTION = 'Download a compressed log file for a game session.'
     ARG_TABLE = [
-        {'name': 'game-session-id', 'required': True,
-         'help_text': 'The game session ID'},
-        {'name': 'save-as', 'required': True,
-         'help_text': 'The filename to which the file should be saved (.zip)'}
+        {
+            'name': 'game-session-id',
+            'required': True,
+            'help_text': 'The game session ID',
+        },
+        {
+            'name': 'save-as',
+            'required': True,
+            'help_text': 'The filename to which the file should be saved (.zip)',
+        },
     ]
 
     def _run_main(self, args, parsed_globals):
         client = self._session.create_client(
-            'gamelift', region_name=parsed_globals.region,
+            'gamelift',
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
 
         # Retrieve a signed url.
         response = client.get_game_session_log_url(
-            GameSessionId=args.game_session_id)
+            GameSessionId=args.game_session_id
+        )
         url = response['PreSignedUrl']
 
         # Retrieve the content from the presigned url and save it locally.
         contents = urlopen(url)
 
         sys.stdout.write(
-            'Downloading log archive for game session %s...\r' %
-            args.game_session_id
+            'Downloading log archive for game session %s...\r'
+            % args.game_session_id
         )
 
         with open(args.save_as, 'wb') as f:
@@ -53,6 +61,7 @@ class GetGameSessionLogCommand(BasicComm
 
         sys.stdout.write(
             'Successfully downloaded log archive for game '
-            'session %s to %s\n' % (args.game_session_id, args.save_as))
+            'session %s to %s\n' % (args.game_session_id, args.save_as)
+        )
 
         return 0
diff -pruN 2.23.6-1/awscli/customizations/gamelift/uploadbuild.py 2.31.35-1/awscli/customizations/gamelift/uploadbuild.py
--- 2.23.6-1/awscli/customizations/gamelift/uploadbuild.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/gamelift/uploadbuild.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import threading
 import contextlib
 import os
-import tempfile
 import sys
+import tempfile
+import threading
 import zipfile
 
 from s3transfer import S3Transfer
@@ -27,26 +27,40 @@ class UploadBuildCommand(BasicCommand):
     NAME = 'upload-build'
     DESCRIPTION = 'Upload a new build to AWS GameLift.'
     ARG_TABLE = [
-        {'name': 'name', 'required': True,
-         'help_text': 'The name of the build'},
-        {'name': 'build-version', 'required': True,
-         'help_text': 'The version of the build'},
-        {'name': 'build-root', 'required': True,
-         'help_text':
-         'The path to the directory containing the build to upload'},
-        {'name': 'server-sdk-version', 'required': False,
-         'help_text':
-             'The version of the GameLift server SDK used to '
-             'create the game server'},
-        {'name': 'operating-system', 'required': False,
-         'help_text': 'The operating system the build runs on'}
+        {
+            'name': 'name',
+            'required': True,
+            'help_text': 'The name of the build',
+        },
+        {
+            'name': 'build-version',
+            'required': True,
+            'help_text': 'The version of the build',
+        },
+        {
+            'name': 'build-root',
+            'required': True,
+            'help_text': 'The path to the directory containing the build to upload',
+        },
+        {
+            'name': 'server-sdk-version',
+            'required': False,
+            'help_text': 'The version of the GameLift server SDK used to '
+            'create the game server',
+        },
+        {
+            'name': 'operating-system',
+            'required': False,
+            'help_text': 'The operating system the build runs on',
+        },
     ]
 
     def _run_main(self, args, parsed_globals):
         gamelift_client = self._session.create_client(
-            'gamelift', region_name=parsed_globals.region,
+            'gamelift',
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         # Validate a build directory
         if not validate_directory(args.build_root):
@@ -60,7 +74,7 @@ class UploadBuildCommand(BasicCommand):
         # Create a build based on the operating system given.
         create_build_kwargs = {
             'Name': args.name,
-            'Version': args.build_version
+            'Version': args.build_version,
         }
         if args.operating_system:
             create_build_kwargs['OperatingSystem'] = args.operating_system
@@ -70,8 +84,7 @@ class UploadBuildCommand(BasicCommand):
         build_id = response['Build']['BuildId']
 
         # Retrieve a set of credentials and the s3 bucket and key.
-        response = gamelift_client.request_upload_credentials(
-            BuildId=build_id)
+        response = gamelift_client.request_upload_credentials(BuildId=build_id)
         upload_credentials = response['UploadCredentials']
         bucket = response['StorageLocation']['Bucket']
         key = response['StorageLocation']['Key']
@@ -82,11 +95,12 @@ class UploadBuildCommand(BasicCommand):
         secret_key = upload_credentials['SecretAccessKey']
         session_token = upload_credentials['SessionToken']
         s3_client = self._session.create_client(
-            's3', aws_access_key_id=access_key,
+            's3',
+            aws_access_key_id=access_key,
             aws_secret_access_key=secret_key,
             aws_session_token=session_token,
             region_name=parsed_globals.region,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
 
         s3_transfer_mgr = S3Transfer(s3_client)
@@ -95,11 +109,13 @@ class UploadBuildCommand(BasicCommand):
             fd, temporary_zipfile = tempfile.mkstemp('%s.zip' % build_id)
             zip_directory(temporary_zipfile, args.build_root)
             s3_transfer_mgr.upload_file(
-                temporary_zipfile, bucket, key,
+                temporary_zipfile,
+                bucket,
+                key,
                 callback=ProgressPercentage(
                     temporary_zipfile,
-                    label='Uploading ' + args.build_root + ':'
-                )
+                    label='Uploading ' + args.build_root + ':',
+                ),
             )
         finally:
             os.close(fd)
@@ -107,7 +123,8 @@ class UploadBuildCommand(BasicCommand):
 
         sys.stdout.write(
             'Successfully uploaded %s to AWS GameLift\n'
-            'Build ID: %s\n' % (args.build_root, build_id))
+            'Build ID: %s\n' % (args.build_root, build_id)
+        )
 
         return 0
 
@@ -120,8 +137,7 @@ def zip_directory(zipfile_name, source_r
             for root, dirs, files in os.walk(source_root):
                 for filename in files:
                     full_path = os.path.join(root, filename)
-                    relative_path = os.path.relpath(
-                        full_path, source_root)
+                    relative_path = os.path.relpath(full_path, source_root)
                     zf.write(full_path, relative_path)
 
 
@@ -140,7 +156,7 @@ def validate_directory(source_root):
 
 # TODO: Remove this class once available to CLI from s3transfer
 # docstring.
-class ProgressPercentage(object):
+class ProgressPercentage:
     def __init__(self, filename, label=None):
         self._filename = filename
         self._label = label
@@ -156,9 +172,12 @@ class ProgressPercentage(object):
             if self._size > 0:
                 percentage = (self._seen_so_far / self._size) * 100
                 sys.stdout.write(
-                    "\r%s  %s / %s  (%.2f%%)" % (
-                        self._label, human_readable_size(self._seen_so_far),
-                        human_readable_size(self._size), percentage
+                    "\r%s  %s / %s  (%.2f%%)"
+                    % (
+                        self._label,
+                        human_readable_size(self._seen_so_far),
+                        human_readable_size(self._size),
+                        percentage,
                     )
                 )
                 sys.stdout.flush()
diff -pruN 2.23.6-1/awscli/customizations/generatecliskeleton.py 2.31.35-1/awscli/customizations/generatecliskeleton.py
--- 2.23.6-1/awscli/customizations/generatecliskeleton.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/generatecliskeleton.py	2025-11-12 19:17:29.000000000 +0000
@@ -33,7 +33,8 @@ def add_generate_skeleton(session, opera
     # is designated by the argument name `outfile`.
     if 'outfile' not in argument_table:
         generate_cli_skeleton_argument = GenerateCliSkeletonArgument(
-            session, operation_model)
+            session, operation_model
+        )
         generate_cli_skeleton_argument.add_to_arg_table(argument_table)
 
 
@@ -44,6 +45,7 @@ class GenerateCliSkeletonArgument(Overri
     command from taking place. Instead, it will generate a JSON skeleton and
     print it to standard output.
     """
+
     ARG_DATA = {
         'name': 'generate-cli-skeleton',
         'help_text': (
@@ -86,17 +88,18 @@ class GenerateCliSkeletonArgument(Overri
             except IndexError:
                 pass
             super(GenerateCliSkeletonArgument, self).override_required_args(
-                argument_table, args, **kwargs)
+                argument_table, args, **kwargs
+            )
 
-    def generate_skeleton(self, call_parameters, parsed_args,
-                          parsed_globals, **kwargs):
+    def generate_skeleton(
+        self, call_parameters, parsed_args, parsed_globals, **kwargs
+    ):
         if not getattr(parsed_args, 'generate_cli_skeleton', None):
             return
         arg_value = parsed_args.generate_cli_skeleton
         return getattr(
-            self, '_generate_%s_skeleton' % arg_value.replace('-', '_'))(
-                call_parameters=call_parameters, parsed_globals=parsed_globals
-        )
+            self, '_generate_%s_skeleton' % arg_value.replace('-', '_')
+        )(call_parameters=call_parameters, parsed_globals=parsed_globals)
 
     def _generate_yaml_input_skeleton(self, **kwargs):
         input_shape = self._operation_model.input_shape
@@ -120,13 +123,14 @@ class GenerateCliSkeletonArgument(Overri
         outfile.write('\n')
         return 0
 
-    def _generate_output_skeleton(self, call_parameters, parsed_globals,
-                                  **kwargs):
+    def _generate_output_skeleton(
+        self, call_parameters, parsed_globals, **kwargs
+    ):
         service_name = self._operation_model.service_model.service_name
         operation_name = self._operation_model.name
         return StubbedCLIOperationCaller(self._session).invoke(
-            service_name, operation_name, call_parameters,
-            parsed_globals)
+            service_name, operation_name, call_parameters, parsed_globals
+        )
 
 
 class StubbedCLIOperationCaller(CLIOperationCaller):
@@ -135,31 +139,36 @@ class StubbedCLIOperationCaller(CLIOpera
     It generates a fake response and uses the response and provided parameters
     to make a stubbed client call for an operation command.
     """
-    def _make_client_call(self, client, operation_name, parameters,
-                          parsed_globals):
+
+    def _make_client_call(
+        self, client, operation_name, parameters, parsed_globals
+    ):
         method_name = xform_name(operation_name)
         operation_model = client.meta.service_model.operation_model(
-            operation_name)
+            operation_name
+        )
         fake_response = {}
         if operation_model.output_shape:
             argument_generator = ArgumentGenerator(use_member_names=True)
             fake_response = argument_generator.generate_skeleton(
-                operation_model.output_shape)
+                operation_model.output_shape
+            )
         with Stubber(client) as stubber:
             stubber.add_response(method_name, fake_response)
             return getattr(client, method_name)(**parameters)
 
 
-class _Bytes(object):
+class _Bytes:
     @classmethod
     def represent(cls, dumper, data):
-        return dumper.represent_scalar(u'tag:yaml.org,2002:binary', '')
+        return dumper.represent_scalar('tag:yaml.org,2002:binary', '')
 
 
 class YAMLArgumentGenerator(ArgumentGenerator):
     def __init__(self, use_member_names=False, yaml=None):
         super(YAMLArgumentGenerator, self).__init__(
-            use_member_names=use_member_names)
+            use_member_names=use_member_names
+        )
         self._yaml = yaml
         if self._yaml is None:
             self._yaml = YAML()
@@ -181,14 +190,17 @@ class YAMLArgumentGenerator(ArgumentGene
         skeleton = self._yaml.map()
         for member_name, member_shape in shape.members.items():
             skeleton[member_name] = self._generate_skeleton(
-                member_shape, stack, name=member_name)
+                member_shape, stack, name=member_name
+            )
             is_required = member_name in shape.required_members
             self._add_member_comments(
-                skeleton, member_name, member_shape, is_required)
+                skeleton, member_name, member_shape, is_required
+            )
         return skeleton
 
-    def _add_member_comments(self, skeleton, member_name, member_shape,
-                             is_required):
+    def _add_member_comments(
+        self, skeleton, member_name, member_shape, is_required
+    ):
         comment_components = []
         if is_required:
             comment_components.append('[REQUIRED]')
@@ -208,6 +220,6 @@ class YAMLArgumentGenerator(ArgumentGene
         # YAML has support for ordered maps, so don't use ordereddicts
         # because that isn't necessary and it makes the output harder to
         # understand and read.
-        return dict(super(YAMLArgumentGenerator, self)._generate_type_map(
-            shape, stack
-        ))
+        return dict(
+            super(YAMLArgumentGenerator, self)._generate_type_map(shape, stack)
+        )
diff -pruN 2.23.6-1/awscli/customizations/globalargs.py 2.31.35-1/awscli/customizations/globalargs.py
--- 2.23.6-1/awscli/customizations/globalargs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/globalargs.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,29 +10,38 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
 import os
+import sys
 
+import jmespath
+from botocore import UNSIGNED
 from botocore.client import Config
 from botocore.endpoint import DEFAULT_TIMEOUT
-from botocore.handlers import disable_signing
-import jmespath
 
 from awscli.compat import urlparse
 from awscli.customizations.exceptions import ParamValidationError
 
 
 def register_parse_global_args(cli):
-    cli.register('top-level-args-parsed', resolve_types,
-                 unique_id='resolve-types')
-    cli.register('top-level-args-parsed', no_sign_request,
-                 unique_id='no-sign')
-    cli.register('top-level-args-parsed', resolve_verify_ssl,
-                 unique_id='resolve-verify-ssl')
-    cli.register('top-level-args-parsed', resolve_cli_read_timeout,
-                 unique_id='resolve-cli-read-timeout')
-    cli.register('top-level-args-parsed', resolve_cli_connect_timeout,
-                 unique_id='resolve-cli-connect-timeout')
+    cli.register(
+        'top-level-args-parsed', resolve_types, unique_id='resolve-types'
+    )
+    cli.register('top-level-args-parsed', no_sign_request, unique_id='no-sign')
+    cli.register(
+        'top-level-args-parsed',
+        resolve_verify_ssl,
+        unique_id='resolve-verify-ssl',
+    )
+    cli.register(
+        'top-level-args-parsed',
+        resolve_cli_read_timeout,
+        unique_id='resolve-cli-read-timeout',
+    )
+    cli.register(
+        'top-level-args-parsed',
+        resolve_cli_connect_timeout,
+        unique_id='resolve-cli-connect-timeout',
+    )
 
 
 def resolve_types(parsed_args, **kwargs):
@@ -89,13 +98,10 @@ def resolve_verify_ssl(parsed_args, sess
 
 def no_sign_request(parsed_args, session, **kwargs):
     if not parsed_args.sign_request:
-        # In order to make signing disabled for all requests
-        # we need to use botocore's ``disable_signing()`` handler.
-        # Register this first to override other handlers.
-        emitter = session.get_component('event_emitter')
-        emitter.register_first(
-            'choose-signer', disable_signing, unique_id='disable-signing',
-        )
+        # Disable request signing by setting the signature version to UNSIGNED
+        # in the default client configuration. This ensures all new clients
+        # will be created with signing disabled.
+        _update_default_client_config(session, 'signature_version', UNSIGNED)
 
 
 def resolve_cli_connect_timeout(parsed_args, session, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/history/__init__.py 2.31.35-1/awscli/customizations/history/__init__.py
--- 2.23.6-1/awscli/customizations/history/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,37 +10,40 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import logging
 import os
 import sys
-import logging
 
-from botocore.history import get_global_history_recorder
 from botocore.exceptions import ProfileNotFound
+from botocore.history import get_global_history_recorder
 
 from awscli.compat import sqlite3
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.history.constants import HISTORY_FILENAME_ENV_VAR
-from awscli.customizations.history.constants import DEFAULT_HISTORY_FILENAME
-from awscli.customizations.history.db import DatabaseConnection
-from awscli.customizations.history.db import DatabaseRecordWriter
-from awscli.customizations.history.db import RecordBuilder
-from awscli.customizations.history.db import DatabaseHistoryHandler
-from awscli.customizations.history.show import ShowCommand
+from awscli.customizations.history.constants import (
+    DEFAULT_HISTORY_FILENAME,
+    HISTORY_FILENAME_ENV_VAR,
+)
+from awscli.customizations.history.db import (
+    DatabaseConnection,
+    DatabaseHistoryHandler,
+    DatabaseRecordWriter,
+    RecordBuilder,
+)
 from awscli.customizations.history.list import ListCommand
-
+from awscli.customizations.history.show import ShowCommand
 
 LOG = logging.getLogger(__name__)
 HISTORY_RECORDER = get_global_history_recorder()
 
 
 def register_history_mode(event_handlers):
-    event_handlers.register(
-        'session-initialized', attach_history_handler)
+    event_handlers.register('session-initialized', attach_history_handler)
 
 
 def register_history_commands(event_handlers):
     event_handlers.register(
-        "building-command-table.main", add_history_commands)
+        "building-command-table.main", add_history_commands
+    )
 
 
 def attach_history_handler(session, parsed_args, **kwargs):
@@ -48,7 +51,8 @@ def attach_history_handler(session, pars
         LOG.debug('Enabling CLI history')
 
         history_filename = os.environ.get(
-            HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME)
+            HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME
+        )
         if not os.path.isdir(os.path.dirname(history_filename)):
             os.makedirs(os.path.dirname(history_filename))
 
@@ -98,7 +102,7 @@ class HistoryCommand(BasicCommand):
     )
     SUBCOMMANDS = [
         {'name': 'show', 'command_class': ShowCommand},
-        {'name': 'list', 'command_class': ListCommand}
+        {'name': 'list', 'command_class': ListCommand},
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
diff -pruN 2.23.6-1/awscli/customizations/history/commands.py 2.31.35-1/awscli/customizations/history/commands.py
--- 2.23.6-1/awscli/customizations/history/commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,16 @@
 import os
 
 from awscli.compat import is_windows
-from awscli.utils import is_a_tty
-from awscli.utils import OutputStreamFactory
-
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.history.db import DatabaseConnection
-from awscli.customizations.history.constants import HISTORY_FILENAME_ENV_VAR
-from awscli.customizations.history.constants import DEFAULT_HISTORY_FILENAME
-from awscli.customizations.history.db import DatabaseRecordReader
+from awscli.customizations.history.constants import (
+    DEFAULT_HISTORY_FILENAME,
+    HISTORY_FILENAME_ENV_VAR,
+)
+from awscli.customizations.history.db import (
+    DatabaseConnection,
+    DatabaseRecordReader,
+)
+from awscli.utils import OutputStreamFactory, is_a_tty
 
 
 class HistorySubcommand(BasicCommand):
@@ -29,8 +31,9 @@ class HistorySubcommand(BasicCommand):
         self._db_reader = db_reader
         self._output_stream_factory = output_stream_factory
         if output_stream_factory is None:
-            self._output_stream_factory = \
+            self._output_stream_factory = (
                 self._get_default_output_stream_factory()
+            )
 
     def _get_default_output_stream_factory(self):
         return OutputStreamFactory(self._session)
@@ -45,7 +48,8 @@ class HistorySubcommand(BasicCommand):
 
     def _get_history_db_filename(self):
         filename = os.environ.get(
-            HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME)
+            HISTORY_FILENAME_ENV_VAR, DEFAULT_HISTORY_FILENAME
+        )
         if not os.path.exists(filename):
             raise RuntimeError(
                 'Could not locate history. Make sure cli_history is set to '
diff -pruN 2.23.6-1/awscli/customizations/history/constants.py 2.31.35-1/awscli/customizations/history/constants.py
--- 2.23.6-1/awscli/customizations/history/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,7 @@
 # language governing permissions and limitations under the License.
 import os
 
-
 HISTORY_FILENAME_ENV_VAR = 'AWS_CLI_HISTORY_FILE'
 DEFAULT_HISTORY_FILENAME = os.path.expanduser(
-    os.path.join('~', '.aws', 'cli', 'history', 'history.db'))
+    os.path.join('~', '.aws', 'cli', 'history', 'history.db')
+)
diff -pruN 2.23.6-1/awscli/customizations/history/db.py 2.31.35-1/awscli/customizations/history/db.py
--- 2.23.6-1/awscli/customizations/history/db.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/db.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,24 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import uuid
-import time
-import json
 import datetime
-import threading
+import json
 import logging
-from awscli.compat import collections_abc
+import threading
+import time
+import uuid
 
 from botocore.history import BaseHistoryHandler
 
-from awscli.compat import sqlite3
-from awscli.compat import binary_type
-
+from awscli.compat import binary_type, collections_abc, sqlite3
 
 LOG = logging.getLogger(__name__)
 
 
-class DatabaseConnection(object):
+class DatabaseConnection:
     _CREATE_TABLE = """
         CREATE TABLE IF NOT EXISTS records (
           id TEXT,
@@ -41,7 +38,8 @@ class DatabaseConnection(object):
 
     def __init__(self, db_filename):
         self._connection = sqlite3.connect(
-            db_filename, check_same_thread=False, isolation_level=None)
+            db_filename, check_same_thread=False, isolation_level=None
+        )
         self._ensure_database_setup()
 
     def close(self):
@@ -92,8 +90,9 @@ class PayloadSerializer(json.JSONEncoder
         if isinstance(obj, str):
             obj = self._try_decode_bytes(obj)
         elif isinstance(obj, dict):
-            obj = dict((k, self._remove_non_unicode_stings(v)) for k, v
-                       in obj.items())
+            obj = dict(
+                (k, self._remove_non_unicode_stings(v)) for k, v in obj.items()
+            )
         elif isinstance(obj, (list, tuple)):
             obj = [self._remove_non_unicode_stings(o) for o in obj]
         return obj
@@ -132,7 +131,7 @@ class PayloadSerializer(json.JSONEncoder
             return repr(obj)
 
 
-class DatabaseRecordWriter(object):
+class DatabaseRecordWriter:
     _WRITE_RECORD = """
         INSERT INTO records(
             id, request_id, source, event_type, timestamp, payload)
@@ -152,26 +151,30 @@ class DatabaseRecordWriter(object):
 
     def _create_db_record(self, record):
         event_type = record['event_type']
-        json_serialized_payload = json.dumps(record['payload'],
-                                             cls=PayloadSerializer)
+        json_serialized_payload = json.dumps(
+            record['payload'], cls=PayloadSerializer
+        )
         db_record = (
             record['command_id'],
             record.get('request_id'),
             record['source'],
             event_type,
             record['timestamp'],
-            json_serialized_payload
+            json_serialized_payload,
         )
         return db_record
 
 
-class DatabaseRecordReader(object):
+class DatabaseRecordReader:
     _ORDERING = 'ORDER BY timestamp'
-    _GET_LAST_ID_RECORDS = """
+    _GET_LAST_ID_RECORDS = (
+        """
         SELECT * FROM records
         WHERE id =
         (SELECT id FROM records WHERE timestamp =
-        (SELECT max(timestamp) FROM records)) %s;""" % _ORDERING
+        (SELECT max(timestamp) FROM records)) %s;"""
+        % _ORDERING
+    )
     _GET_RECORDS_BY_ID = 'SELECT * from records where id = ? %s' % _ORDERING
     _GET_ALL_RECORDS = (
         'SELECT a.id AS id_a, '
@@ -218,9 +221,10 @@ class DatabaseRecordReader(object):
             yield row
 
 
-class RecordBuilder(object):
+class RecordBuilder:
     _REQUEST_LIFECYCLE_EVENTS = set(
-        ['API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE'])
+        ['API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE']
+    )
     _START_OF_REQUEST_LIFECYCLE_EVENT = 'API_CALL'
 
     def __init__(self):
@@ -254,7 +258,7 @@ class RecordBuilder(object):
             'event_type': event_type,
             'payload': payload,
             'source': source,
-            'timestamp': int(time.time() * 1000)
+            'timestamp': int(time.time() * 1000),
         }
         request_id = self._get_request_id(event_type)
         if request_id:
diff -pruN 2.23.6-1/awscli/customizations/history/filters.py 2.31.35-1/awscli/customizations/history/filters.py
--- 2.23.6-1/awscli/customizations/history/filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,7 @@
 import re
 
 
-class RegexFilter(object):
+class RegexFilter:
     def __init__(self, pattern, replacement):
         self._pattern = pattern
         self._replacement = replacement
diff -pruN 2.23.6-1/awscli/customizations/history/list.py 2.31.35-1/awscli/customizations/history/list.py
--- 2.23.6-1/awscli/customizations/history/list.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/list.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import json
 import datetime
+import json
 
-from awscli.utils import OutputStreamFactory
 from awscli.customizations.history.commands import HistorySubcommand
+from awscli.utils import OutputStreamFactory
 
 
 class ListCommand(HistorySubcommand):
@@ -26,12 +26,7 @@ class ListCommand(HistorySubcommand):
         '``history show`` with the command_id to see more details about '
         'a particular entry.'
     )
-    _COL_WIDTHS = {
-        'id_a': 38,
-        'timestamp': 24,
-        'args': 50,
-        'rc': 0
-    }
+    _COL_WIDTHS = {'id_a': 38, 'timestamp': 24, 'args': 50, 'rc': 0}
 
     def _get_default_output_stream_factory(self):
         return OutputStreamFactory(self._session, default_less_flags='SR')
@@ -45,7 +40,8 @@ class ListCommand(HistorySubcommand):
                 raise RuntimeError(
                     'No commands were found in your history. Make sure you have '
                     'enabled history mode by adding "cli_history = enabled" '
-                    'to the config file.')
+                    'to the config file.'
+                )
 
             with self._output_stream_factory.get_output_stream() as stream:
                 formatter = TextFormatter(self._COL_WIDTHS, stream)
@@ -55,11 +51,12 @@ class ListCommand(HistorySubcommand):
         return 0
 
 
-class RecordAdapter(object):
+class RecordAdapter:
     """This class is just to read one ahead to make sure there are records
 
     If there are no records we can just exit early.
     """
+
     def __init__(self, records):
         self._records = records
         self._next = None
@@ -80,7 +77,7 @@ class RecordAdapter(object):
             self._advance()
 
 
-class TextFormatter(object):
+class TextFormatter:
     def __init__(self, col_widths, output_stream):
         self._col_widths = col_widths
         self._output_stream = output_stream
@@ -88,27 +85,28 @@ class TextFormatter(object):
     def _format_time(self, timestamp):
         command_time = datetime.datetime.fromtimestamp(timestamp / 1000)
         formatted = datetime.datetime.strftime(
-            command_time, '%Y-%m-%d %I:%M:%S %p')
+            command_time, '%Y-%m-%d %I:%M:%S %p'
+        )
         return formatted
 
     def _format_args(self, args, arg_width):
         json_value = json.loads(args)
         formatted = ' '.join(json_value[:2])
         if len(formatted) >= arg_width:
-            formatted = '%s...' % formatted[:arg_width-4]
+            formatted = '%s...' % formatted[: arg_width - 4]
         return formatted
 
     def _format_record(self, record):
         fmt_string = "{0:<%s}{1:<%s}{2:<%s}{3}\n" % (
             self._col_widths['id_a'],
             self._col_widths['timestamp'],
-            self._col_widths['args']
+            self._col_widths['args'],
         )
         record_line = fmt_string.format(
             record['id_a'],
             self._format_time(record['timestamp']),
             self._format_args(record['args'], self._col_widths['args']),
-            record['rc']
+            record['rc'],
         )
         return record_line
 
diff -pruN 2.23.6-1/awscli/customizations/history/show.py 2.31.35-1/awscli/customizations/history/show.py
--- 2.23.6-1/awscli/customizations/history/show.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/history/show.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,18 +13,18 @@
 import datetime
 import json
 import sys
-import xml.parsers.expat
 import xml.dom.minidom
+import xml.parsers.expat
 
 import colorama
 
-from awscli.table import COLORAMA_KWARGS
+from awscli.customizations.exceptions import ParamValidationError
 from awscli.customizations.history.commands import HistorySubcommand
 from awscli.customizations.history.filters import RegexFilter
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.table import COLORAMA_KWARGS
 
 
-class Formatter(object):
+class Formatter:
     def __init__(self, output=None, include=None, exclude=None):
         """Formats and outputs CLI history events
 
@@ -46,7 +46,8 @@ class Formatter(object):
             self._output = sys.stdout
         if include and exclude:
             raise ParamValidationError(
-                'Either input or exclude can be provided but not both')
+                'Either input or exclude can be provided but not both'
+            )
         self._include = include
         self._exclude = exclude
 
@@ -80,97 +81,73 @@ class DetailedFormatter(Formatter):
     _SECTIONS = {
         'CLI_VERSION': {
             'title': 'AWS CLI command entered',
-            'values': [
-                {'description': 'with AWS CLI version'}
-            ]
-        },
-        'CLI_ARGUMENTS': {
-            'values': [
-                {'description': 'with arguments'}
-            ]
+            'values': [{'description': 'with AWS CLI version'}],
         },
+        'CLI_ARGUMENTS': {'values': [{'description': 'with arguments'}]},
         'API_CALL': {
             'title': 'API call made',
             'values': [
-                {
-                    'description': 'to service',
-                    'payload_key': 'service'
-                },
-                {
-                    'description': 'using operation',
-                    'payload_key': 'operation'
-                },
+                {'description': 'to service', 'payload_key': 'service'},
+                {'description': 'using operation', 'payload_key': 'operation'},
                 {
                     'description': 'with parameters',
                     'payload_key': 'params',
-                    'value_format': 'dictionary'
-                }
-            ]
+                    'value_format': 'dictionary',
+                },
+            ],
         },
         'HTTP_REQUEST': {
             'title': 'HTTP request sent',
             'values': [
-                {
-                    'description': 'to URL',
-                    'payload_key': 'url'
-                },
-                {
-                    'description': 'with method',
-                    'payload_key': 'method'
-                },
+                {'description': 'to URL', 'payload_key': 'url'},
+                {'description': 'with method', 'payload_key': 'method'},
                 {
                     'description': 'with headers',
                     'payload_key': 'headers',
                     'value_format': 'dictionary',
-                    'filters': [_SIG_FILTER]
+                    'filters': [_SIG_FILTER],
                 },
                 {
                     'description': 'with body',
                     'payload_key': 'body',
-                    'value_format': 'http_body'
-                }
-
-            ]
+                    'value_format': 'http_body',
+                },
+            ],
         },
         'HTTP_RESPONSE': {
             'title': 'HTTP response received',
             'values': [
                 {
                     'description': 'with status code',
-                    'payload_key': 'status_code'
+                    'payload_key': 'status_code',
                 },
                 {
                     'description': 'with headers',
                     'payload_key': 'headers',
-                    'value_format': 'dictionary'
+                    'value_format': 'dictionary',
                 },
                 {
                     'description': 'with body',
                     'payload_key': 'body',
-                    'value_format': 'http_body'
-                }
-            ]
+                    'value_format': 'http_body',
+                },
+            ],
         },
         'PARSED_RESPONSE': {
             'title': 'HTTP response parsed',
             'values': [
-                {
-                    'description': 'parsed to',
-                    'value_format': 'dictionary'
-                }
-            ]
+                {'description': 'parsed to', 'value_format': 'dictionary'}
+            ],
         },
         'CLI_RC': {
             'title': 'AWS CLI command exited',
-            'values': [
-                {'description': 'with return code'}
-            ]
+            'values': [{'description': 'with return code'}],
         },
     }
 
     _COMPONENT_COLORS = {
         'title': colorama.Style.BRIGHT,
-        'description': colorama.Fore.CYAN
+        'description': colorama.Fore.CYAN,
     }
 
     def __init__(self, output=None, include=None, exclude=None, colorize=True):
@@ -225,7 +202,8 @@ class DetailedFormatter(Formatter):
 
         formatted_timestamp = self._format_description('at time')
         formatted_timestamp += self._format_value(
-            event_record['timestamp'], event_record, value_format='timestamp')
+            event_record['timestamp'], event_record, value_format='timestamp'
+        )
 
         return '\n' + formatted_title + formatted_timestamp
 
@@ -233,19 +211,20 @@ class DetailedFormatter(Formatter):
         request_id = event_record['request_id']
         if request_id:
             if request_id not in self._request_id_to_api_num:
-                self._request_id_to_api_num[
-                    request_id] = self._num_api_calls
+                self._request_id_to_api_num[request_id] = self._num_api_calls
                 self._num_api_calls += 1
             return self._request_id_to_api_num[request_id]
 
     def _format_description(self, value_description):
         return self._color_if_configured(
-            value_description + ': ', 'description')
+            value_description + ': ', 'description'
+        )
 
     def _format_value(self, value, event_record, value_format=None):
         if value_format:
             formatted_value = self._value_pformatter.pformat(
-                value, value_format, event_record)
+                value, value_format, event_record
+            )
         else:
             formatted_value = str(value)
         return formatted_value + '\n'
@@ -257,13 +236,14 @@ class DetailedFormatter(Formatter):
         return text
 
 
-class SectionValuePrettyFormatter(object):
+class SectionValuePrettyFormatter:
     def pformat(self, value, value_format, event_record):
         return getattr(self, '_pformat_' + value_format)(value, event_record)
 
     def _pformat_timestamp(self, event_timestamp, event_record=None):
         return datetime.datetime.fromtimestamp(
-            event_timestamp/1000.0).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
+            event_timestamp / 1000.0
+        ).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
 
     def _pformat_dictionary(self, obj, event_record=None):
         return json.dumps(obj=obj, sort_keys=True, indent=4)
@@ -295,7 +275,7 @@ class SectionValuePrettyFormatter(object
         # is called.
         stripped_body = self._strip_whitespace(body)
         xml_dom = xml.dom.minidom.parseString(stripped_body)
-        return xml_dom.toprettyxml(indent=' '*4, newl='\n')
+        return xml_dom.toprettyxml(indent=' ' * 4, newl='\n')
 
     def _get_pretty_json(self, body):
         # The json body is loaded so it can be dumped in a format that
@@ -312,9 +292,7 @@ class SectionValuePrettyFormatter(object
 
     def _strip_whitespace(self, xml_string):
         xml_dom = xml.dom.minidom.parseString(xml_string)
-        return ''.join(
-            [line.strip() for line in xml_dom.toxml().splitlines()]
-        )
+        return ''.join([line.strip() for line in xml_dom.toxml().splitlines()])
 
     def _is_json_structure(self, body):
         if body.startswith('{'):
@@ -333,43 +311,57 @@ class ShowCommand(HistorySubcommand):
         'If this command is ran without any positional arguments, it will '
         'display the events for the last CLI command ran.'
     )
-    FORMATTERS = {
-        'detailed': DetailedFormatter
-    }
+    FORMATTERS = {'detailed': DetailedFormatter}
     ARG_TABLE = [
-        {'name': 'command_id', 'nargs': '?', 'default': 'latest',
-         'positional_arg': True,
-         'help_text': (
-             'The ID of the CLI command to show. If this positional argument '
-             'is omitted, it will show the last the CLI command ran.')},
-        {'name': 'include', 'nargs': '+',
-         'help_text': (
-             'Specifies which events to **only** include when showing the '
-             'CLI command. This argument is mutually exclusive with '
-             '``--exclude``.')},
-        {'name': 'exclude', 'nargs': '+',
-         'help_text': (
-             'Specifies which events to exclude when showing the '
-             'CLI command. This argument is mutually exclusive with '
-             '``--include``.')},
-        {'name': 'format', 'choices': FORMATTERS.keys(),
-         'default': 'detailed', 'help_text': (
-            'Specifies which format to use in showing the events for '
-            'the specified CLI command. The following formats are '
-            'supported:\n\n'
-            '<ul>'
-            '<li> detailed - This the default format. It prints out a '
-            'detailed overview of the CLI command ran. It displays all '
-            'of the key events in the command lifecycle where each '
-            'important event has a title and its important values '
-            'underneath. The events are ordered by timestamp and events of '
-            'the same API call are associated together with the '
-            '[``api_id``] notation where events that share the same '
-            '``api_id`` belong to the lifecycle of the same API call.'
-            '</li>'
-            '</ul>'
-            )
-         }
+        {
+            'name': 'command_id',
+            'nargs': '?',
+            'default': 'latest',
+            'positional_arg': True,
+            'help_text': (
+                'The ID of the CLI command to show. If this positional argument '
+                'is omitted, it will show the last the CLI command ran.'
+            ),
+        },
+        {
+            'name': 'include',
+            'nargs': '+',
+            'help_text': (
+                'Specifies which events to **only** include when showing the '
+                'CLI command. This argument is mutually exclusive with '
+                '``--exclude``.'
+            ),
+        },
+        {
+            'name': 'exclude',
+            'nargs': '+',
+            'help_text': (
+                'Specifies which events to exclude when showing the '
+                'CLI command. This argument is mutually exclusive with '
+                '``--include``.'
+            ),
+        },
+        {
+            'name': 'format',
+            'choices': FORMATTERS.keys(),
+            'default': 'detailed',
+            'help_text': (
+                'Specifies which format to use in showing the events for '
+                'the specified CLI command. The following formats are '
+                'supported:\n\n'
+                '<ul>'
+                '<li> detailed - This the default format. It prints out a '
+                'detailed overview of the CLI command ran. It displays all '
+                'of the key events in the command lifecycle where each '
+                'important event has a title and its important values '
+                'underneath. The events are ordered by timestamp and events of '
+                'the same API call are associated together with the '
+                '[``api_id``] notation where events that share the same '
+                '``api_id`` belong to the lifecycle of the same API call.'
+                '</li>'
+                '</ul>'
+            ),
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
@@ -378,7 +370,8 @@ class ShowCommand(HistorySubcommand):
             self._validate_args(parsed_args)
             with self._output_stream_factory.get_output_stream() as stream:
                 formatter = self._get_formatter(
-                    parsed_args, parsed_globals, stream)
+                    parsed_args, parsed_globals, stream
+                )
                 for record in self._get_record_iterator(parsed_args):
                     formatter.display(record)
         finally:
@@ -388,18 +381,20 @@ class ShowCommand(HistorySubcommand):
     def _validate_args(self, parsed_args):
         if parsed_args.exclude and parsed_args.include:
             raise ParamValidationError(
-                'Either --exclude or --include can be provided but not both')
+                'Either --exclude or --include can be provided but not both'
+            )
 
     def _get_formatter(self, parsed_args, parsed_globals, output_stream):
         format_type = parsed_args.format
         formatter_kwargs = {
             'include': parsed_args.include,
             'exclude': parsed_args.exclude,
-            'output': output_stream
+            'output': output_stream,
         }
         if format_type == 'detailed':
             formatter_kwargs['colorize'] = self._should_use_color(
-                parsed_globals)
+                parsed_globals
+            )
         return self.FORMATTERS[format_type](**formatter_kwargs)
 
     def _get_record_iterator(self, parsed_args):
diff -pruN 2.23.6-1/awscli/customizations/iamvirtmfa.py 2.31.35-1/awscli/customizations/iamvirtmfa.py
--- 2.23.6-1/awscli/customizations/iamvirtmfa.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/iamvirtmfa.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,22 +22,27 @@ pull the appropriate data field out of t
 to the specified file.  It will also remove the two bootstrap data
 fields from the response.
 """
-import base64
 
-from awscli.customizations.arguments import StatefulArgument
-from awscli.customizations.arguments import resolve_given_outfile_path
-from awscli.customizations.arguments import is_parsed_result_successful
+import base64
 
+from awscli.customizations.arguments import (
+    StatefulArgument,
+    is_parsed_result_successful,
+    resolve_given_outfile_path,
+)
 
 CHOICES = ('QRCodePNG', 'Base32StringSeed')
-OUTPUT_HELP = ('The output path and file name where the bootstrap '
-               'information will be stored.')
-BOOTSTRAP_HELP = ('Method to use to seed the virtual MFA.  '
-                  'Valid values are: %s | %s' % CHOICES)
+OUTPUT_HELP = (
+    'The output path and file name where the bootstrap '
+    'information will be stored.'
+)
+BOOTSTRAP_HELP = (
+    'Method to use to seed the virtual MFA.  '
+    'Valid values are: %s | %s' % CHOICES
+)
 
 
 class FileArgument(StatefulArgument):
-
     def add_to_params(self, parameters, value):
         # Validate the file here so we can raise an error prior
         # calling the service.
@@ -45,20 +50,25 @@ class FileArgument(StatefulArgument):
         super(FileArgument, self).add_to_params(parameters, value)
 
 
-class IAMVMFAWrapper(object):
-
+class IAMVMFAWrapper:
     def __init__(self, event_handler):
         self._event_handler = event_handler
         self._outfile = FileArgument(
-            'outfile', help_text=OUTPUT_HELP, required=True)
+            'outfile', help_text=OUTPUT_HELP, required=True
+        )
         self._method = StatefulArgument(
-            'bootstrap-method', help_text=BOOTSTRAP_HELP,
-            choices=CHOICES, required=True)
+            'bootstrap-method',
+            help_text=BOOTSTRAP_HELP,
+            choices=CHOICES,
+            required=True,
+        )
         self._event_handler.register(
             'building-argument-table.iam.create-virtual-mfa-device',
-            self._add_options)
+            self._add_options,
+        )
         self._event_handler.register(
-            'after-call.iam.CreateVirtualMFADevice', self._save_file)
+            'after-call.iam.CreateVirtualMFADevice', self._save_file
+        )
 
     def _add_options(self, argument_table, **kwargs):
         argument_table['outfile'] = self._outfile
diff -pruN 2.23.6-1/awscli/customizations/iot.py 2.31.35-1/awscli/customizations/iot.py
--- 2.23.6-1/awscli/customizations/iot.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/iot.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,6 +22,7 @@ file. This customization adds the follow
   - ``--public-key-outfile``: keyPair.PublicKey
   - ``--private-key-outfile``: keyPair.PrivateKey
 """
+
 from awscli.customizations.arguments import QueryOutFileArgument
 
 
@@ -34,19 +35,34 @@ def register_create_keys_and_cert_argume
     """
     after_event = 'after-call.iot.CreateKeysAndCertificate'
     argument_table['certificate-pem-outfile'] = QueryOutFileArgument(
-        session=session, name='certificate-pem-outfile',
-        query='certificatePem', after_call_event=after_event, perm=0o600)
+        session=session,
+        name='certificate-pem-outfile',
+        query='certificatePem',
+        after_call_event=after_event,
+        perm=0o600,
+    )
     argument_table['public-key-outfile'] = QueryOutFileArgument(
-        session=session, name='public-key-outfile', query='keyPair.PublicKey',
-        after_call_event=after_event, perm=0o600)
+        session=session,
+        name='public-key-outfile',
+        query='keyPair.PublicKey',
+        after_call_event=after_event,
+        perm=0o600,
+    )
     argument_table['private-key-outfile'] = QueryOutFileArgument(
-        session=session, name='private-key-outfile',
-        query='keyPair.PrivateKey', after_call_event=after_event, perm=0o600)
+        session=session,
+        name='private-key-outfile',
+        query='keyPair.PrivateKey',
+        after_call_event=after_event,
+        perm=0o600,
+    )
 
 
 def register_create_keys_from_csr_arguments(session, argument_table, **kwargs):
     """Add certificate-pem-outfile to create-certificate-from-csr"""
     argument_table['certificate-pem-outfile'] = QueryOutFileArgument(
-        session=session, name='certificate-pem-outfile',
+        session=session,
+        name='certificate-pem-outfile',
         query='certificatePem',
-        after_call_event='after-call.iot.CreateCertificateFromCsr', perm=0o600)
+        after_call_event='after-call.iot.CreateCertificateFromCsr',
+        perm=0o600,
+    )
diff -pruN 2.23.6-1/awscli/customizations/iot_data.py 2.31.35-1/awscli/customizations/iot_data.py
--- 2.23.6-1/awscli/customizations/iot_data.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/iot_data.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,8 @@
 
 def register_custom_endpoint_note(event_emitter):
     event_emitter.register_last(
-        'doc-description.iot-data', add_custom_endpoint_url_note)
+        'doc-description.iot-data', add_custom_endpoint_url_note
+    )
 
 
 def add_custom_endpoint_url_note(help_command, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/lightsail/__init__.py 2.31.35-1/awscli/customizations/lightsail/__init__.py
--- 2.23.6-1/awscli/customizations/lightsail/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/lightsail/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.lightsail.push_container_image \
-    import PushContainerImage
+from awscli.customizations.lightsail.push_container_image import (
+    PushContainerImage,
+)
 
 
 def initialize(cli):
diff -pruN 2.23.6-1/awscli/customizations/lightsail/push_container_image.py 2.31.35-1/awscli/customizations/lightsail/push_container_image.py
--- 2.23.6-1/awscli/customizations/lightsail/push_container_image.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/lightsail/push_container_image.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,6 +14,7 @@ import errno
 import json
 import logging
 import subprocess
+
 import awscli
 from awscli.compat import ignore_user_entered_signals
 from awscli.customizations.commands import BasicCommand
@@ -24,11 +25,12 @@ logger = logging.getLogger(__name__)
 ERROR_MESSAGE = (
     'The Lightsail Control (lightsailctl) plugin was not found. ',
     'To download and install it, see ',
-    'https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-install-software'
+    'https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-install-software',
 )
 
 INPUT_VERSION = '1'
 
+
 class PushContainerImage(BasicCommand):
     NAME = 'push-container-image'
 
@@ -38,18 +40,11 @@ class PushContainerImage(BasicCommand):
         {
             'name': 'service-name',
             'help_text': helptext.SERVICENAME,
-            'required': True
+            'required': True,
         },
-        {
-            'name': 'image',
-            'help_text': helptext.IMAGE,
-            'required': True
-        },
-        {
-            'name': 'label',
-            'help_text': helptext.LABEL,
-            'required': True
-        }]
+        {'name': 'image', 'help_text': helptext.IMAGE, 'required': True},
+        {'name': 'label', 'help_text': helptext.LABEL, 'required': True},
+    ]
 
     def _run_main(self, parsed_args, parsed_globals):
         payload = self._get_input_request(parsed_args, parsed_globals)
@@ -65,24 +60,24 @@ class PushContainerImage(BasicCommand):
                 subprocess.run(
                     ['lightsailctl', '--plugin', '--input-stdin'],
                     input=json.dumps(payload).encode('utf-8'),
-                    check=True)
+                    check=True,
+                )
             return 0
         except OSError as ex:
             if ex.errno == errno.ENOENT:
-                logger.debug('lightsailctl not found',
-                             exc_info=True)
+                logger.debug('lightsailctl not found', exc_info=True)
                 raise ValueError(''.join(ERROR_MESSAGE))
 
     def _get_input_request(self, parsed_args, parsed_globals):
         input_request = {
-            'inputVersion' : INPUT_VERSION,
+            'inputVersion': INPUT_VERSION,
             'operation': 'PushContainerImage',
         }
 
         payload = dict(
             service=parsed_args.service_name,
             image=parsed_args.image,
-            label=parsed_args.label
+            label=parsed_args.label,
         )
 
         configuration = {}
@@ -105,22 +100,25 @@ class PushContainerImage(BasicCommand):
         if parsed_globals.profile:
             configuration['profile'] = parsed_globals.profile
         elif self._session.get_config_variable('profile'):
-            configuration['profile'] = \
-                self._session.get_config_variable('profile')
+            configuration['profile'] = self._session.get_config_variable(
+                'profile'
+            )
 
         if parsed_globals.region:
             configuration['region'] = parsed_globals.region
         elif self._session.get_config_variable('region'):
-            configuration['region'] = \
-                self._session.get_config_variable('region')
+            configuration['region'] = self._session.get_config_variable(
+                'region'
+            )
 
         configuration['doNotSignRequest'] = not parsed_globals.sign_request
 
         if parsed_globals.ca_bundle:
             configuration['caBundle'] = parsed_globals.ca_bundle
         elif self._session.get_config_variable('ca_bundle'):
-            configuration['caBundle'] = \
-                self._session.get_config_variable('ca_bundle')
+            configuration['caBundle'] = self._session.get_config_variable(
+                'ca_bundle'
+            )
 
         if parsed_globals.read_timeout is not None:
             configuration['readTimeout'] = parsed_globals.read_timeout
diff -pruN 2.23.6-1/awscli/customizations/logs/__init__.py 2.31.35-1/awscli/customizations/logs/__init__.py
--- 2.23.6-1/awscli/customizations/logs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/logs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.logs.tail import TailCommand
 from awscli.customizations.logs.startlivetail import StartLiveTailCommand
+from awscli.customizations.logs.tail import TailCommand
 
 
 def register_logs_commands(event_emitter):
     event_emitter.register('building-command-table.logs', inject_tail_command)
-    event_emitter.register('building-command-table.logs', inject_start_live_tail_command)
+    event_emitter.register(
+        'building-command-table.logs', inject_start_live_tail_command
+    )
 
 
 def inject_tail_command(command_table, session, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/logs/startlivetail.py 2.31.35-1/awscli/customizations/logs/startlivetail.py
--- 2.23.6-1/awscli/customizations/logs/startlivetail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/logs/startlivetail.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,30 +10,30 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from enum import Enum
-from functools import partial
-from threading import Thread
 import asyncio
-import colorama
 import contextlib
 import json
 import re
 import signal
 import sys
 import time
+from enum import Enum
+from functools import partial
+from threading import Thread
 
+import colorama
 from prompt_toolkit.application import Application, get_app
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.filters import Condition
 from prompt_toolkit.formatted_text import (
     ANSI,
-    to_formatted_text,
     fragment_list_to_text,
+    to_formatted_text,
 )
 from prompt_toolkit.key_binding import KeyBindings, KeyPressEvent
 from prompt_toolkit.layout import Layout, Window, WindowAlign
-from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
 from prompt_toolkit.layout.containers import HSplit, VSplit
+from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
 from prompt_toolkit.layout.dimension import Dimension
 from prompt_toolkit.layout.processors import Processor, Transformation
 
@@ -42,7 +42,6 @@ from awscli.customizations.commands impo
 from awscli.customizations.exceptions import ParamValidationError
 from awscli.utils import is_a_tty
 
-
 DESCRIPTION = (
     "Starts a Live Tail streaming session for one or more log groups. "
     "A Live Tail session provides a near real-time streaming of log events "
@@ -770,9 +769,9 @@ class InteractiveUI(BaseLiveTailUI):
         elapsed_time = int(
             current_time - self._session_metadata.session_start_time
         )
-        hours = "{:02d}".format(elapsed_time // 3600)
-        minutes = "{:02d}".format((elapsed_time // 60) % 60)
-        seconds = "{:02d}".format(elapsed_time % 60)
+        hours = f"{elapsed_time // 3600:02d}"
+        minutes = f"{(elapsed_time // 60) % 60:02d}"
+        seconds = f"{elapsed_time % 60:02d}"
         keyword_count_map = ", ".join(
             [
                 value.get_string_to_print()
@@ -824,7 +823,9 @@ class InteractiveUI(BaseLiveTailUI):
         self._application.exit()
 
     async def _run_ui(self):
-        self._application.create_background_task(self._log_events_printer.run())
+        self._application.create_background_task(
+            self._log_events_printer.run()
+        )
         self._application.create_background_task(self._render_metadata())
         self._application.create_background_task(self._trim_buffers())
 
@@ -893,7 +894,7 @@ class LiveTailLogEventsCollector(Thread)
     def _collect_log_events(self):
         try:
             for event in self._response_stream:
-                if not "sessionUpdate" in event:
+                if "sessionUpdate" not in event:
                     continue
 
                 session_update = event["sessionUpdate"]
diff -pruN 2.23.6-1/awscli/customizations/logs/tail.py 2.31.35-1/awscli/customizations/logs/tail.py
--- 2.23.6-1/awscli/customizations/logs/tail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/logs/tail.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,23 +10,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from collections import defaultdict
-from datetime import datetime, timedelta
 import json
 import re
 import time
+from collections import defaultdict
+from datetime import datetime, timedelta
 
-from botocore.utils import parse_timestamp, datetime2timestamp
-from dateutil import tz
 import colorama
+from botocore.utils import datetime2timestamp, parse_timestamp
+from dateutil import tz
 
 from awscli.compat import get_stdout_text_writer
-from awscli.utils import is_a_tty
 from awscli.customizations.commands import BasicCommand
+from awscli.utils import is_a_tty
 
 
-class BaseLogEventsFormatter(object):
-
+class BaseLogEventsFormatter:
     _TIMESTAMP_COLOR = colorama.Fore.GREEN
     _STREAM_NAME_COLOR = colorama.Fore.CYAN
 
@@ -56,13 +55,14 @@ class ShortLogEventsFormatter(BaseLogEve
     def display_log_event(self, log_event):
         log_event = '%s %s' % (
             self._format_timestamp(log_event['timestamp']),
-            log_event['message']
+            log_event['message'],
         )
         self._write_log_event(log_event)
 
     def _format_timestamp(self, timestamp):
         return self._color_if_configured(
-            timestamp.strftime("%Y-%m-%dT%H:%M:%S"), self._TIMESTAMP_COLOR)
+            timestamp.strftime("%Y-%m-%dT%H:%M:%S"), self._TIMESTAMP_COLOR
+        )
 
 
 class DetailedLogEventsFormatter(BaseLogEventsFormatter):
@@ -70,15 +70,15 @@ class DetailedLogEventsFormatter(BaseLog
         log_event = '%s %s %s' % (
             self._format_timestamp(log_event['timestamp']),
             self._color_if_configured(
-                log_event['logStreamName'], self._STREAM_NAME_COLOR),
-            log_event['message']
+                log_event['logStreamName'], self._STREAM_NAME_COLOR
+            ),
+            log_event['message'],
         )
         self._write_log_event(log_event)
 
     def _format_timestamp(self, timestamp):
         return self._color_if_configured(
-            timestamp.isoformat(timespec='microseconds'),
-            self._TIMESTAMP_COLOR
+            timestamp.isoformat(timespec='microseconds'), self._TIMESTAMP_COLOR
         )
 
 
@@ -87,8 +87,9 @@ class PrettyJSONLogEventsFormatter(BaseL
         log_event = '%s %s %s' % (
             self._format_timestamp(log_event['timestamp']),
             self._color_if_configured(
-                log_event['logStreamName'], self._STREAM_NAME_COLOR),
-            self._format_pretty_json(log_event['message'])
+                log_event['logStreamName'], self._STREAM_NAME_COLOR
+            ),
+            self._format_pretty_json(log_event['message']),
         )
         self._write_log_event(log_event)
 
@@ -102,7 +103,8 @@ class PrettyJSONLogEventsFormatter(BaseL
 
     def _format_timestamp(self, timestamp):
         return self._color_if_configured(
-            timestamp.isoformat(), self._TIMESTAMP_COLOR)
+            timestamp.isoformat(), self._TIMESTAMP_COLOR
+        )
 
 
 class TailCommand(BasicCommand):
@@ -139,7 +141,7 @@ class TailCommand(BasicCommand):
                 'display logs starting five minutes in the past. '
                 'Note that multiple units are **not** supported '
                 '(i.e. ``5h30m``)'
-            )
+            ),
         },
         {
             'name': 'follow',
@@ -149,7 +151,7 @@ class TailCommand(BasicCommand):
                 'Whether to continuously poll for new logs. By default, the '
                 'command will exit once there are no more logs to display. '
                 'To exit from this mode, use Control-C.'
-            )
+            ),
         },
         {
             'name': 'format',
@@ -169,7 +171,7 @@ class TailCommand(BasicCommand):
                 '<li> json - Pretty print any messages that are entirely JSON.'
                 '</li>'
                 '</ul>'
-            )
+            ),
         },
         {
             'name': 'filter-pattern',
@@ -179,7 +181,7 @@ class TailCommand(BasicCommand):
                 'latest/logs/FilterAndPatternSyntax.html">Filter and '
                 'Pattern Syntax</a> for details. If not provided, all '
                 'the events are matched'
-            )
+            ),
         },
         {
             'name': 'log-stream-names',
@@ -188,7 +190,7 @@ class TailCommand(BasicCommand):
                 'The list of stream names to filter logs by. This parameter '
                 'cannot be specified when ``--log-stream-name-prefix`` is '
                 'also specified.'
-            )
+            ),
         },
         {
             'name': 'log-stream-name-prefix',
@@ -197,10 +199,8 @@ class TailCommand(BasicCommand):
                 'with names beginning with this prefix will be returned. This '
                 'parameter cannot be specified when ``log-stream-names`` is '
                 'also specified.'
-            )
+            ),
         },
-
-
     ]
     _FORMAT_TO_FORMATTER_CLS = {
         'detailed': DetailedLogEventsFormatter,
@@ -210,17 +210,21 @@ class TailCommand(BasicCommand):
 
     def _run_main(self, parsed_args, parsed_globals):
         logs_client = self._session.create_client(
-            'logs', region_name=parsed_globals.region,
+            'logs',
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
         logs_generator = self._get_log_events_generator(
-            logs_client, parsed_args.follow)
+            logs_client, parsed_args.follow
+        )
         log_events = logs_generator.iter_log_events(
-            parsed_args.group_name, start=parsed_args.since,
+            parsed_args.group_name,
+            start=parsed_args.since,
             filter_pattern=parsed_args.filter_pattern,
             log_stream_names=parsed_args.log_stream_names,
-            log_stream_name_prefix=parsed_args.log_stream_name_prefix)
+            log_stream_name_prefix=parsed_args.log_stream_name_prefix,
+        )
         self._output_log_events(parsed_args, parsed_globals, log_events)
         return 0
 
@@ -234,7 +238,8 @@ class TailCommand(BasicCommand):
     def _output_log_events(self, parsed_args, parsed_globals, log_events):
         output = get_stdout_text_writer()
         logs_formatter = self._FORMAT_TO_FORMATTER_CLS[parsed_args.format](
-            output, colorize=self._should_use_color(parsed_globals))
+            output, colorize=self._should_use_color(parsed_globals)
+        )
         for event in log_events:
             logs_formatter.display_log_event(event)
 
@@ -246,7 +251,7 @@ class TailCommand(BasicCommand):
         return is_a_tty()
 
 
-class TimestampUtils(object):
+class TimestampUtils:
     _RELATIVE_TIMESTAMP_REGEX = re.compile(
         r"(?P<amount>\d+)(?P<unit>s|m|h|d|w)$"
     )
@@ -281,16 +286,26 @@ class TimestampUtils(object):
         return self._now() + timedelta(seconds=amount * multiplier * -1)
 
 
-class BaseLogEventsGenerator(object):
+class BaseLogEventsGenerator:
     def __init__(self, client, timestamp_utils):
         self._client = client
         self._timestamp_utils = timestamp_utils
 
-    def iter_log_events(self, group_name, start=None, filter_pattern=None,
-                        log_stream_names=None, log_stream_name_prefix=None):
+    def iter_log_events(
+        self,
+        group_name,
+        start=None,
+        filter_pattern=None,
+        log_stream_names=None,
+        log_stream_name_prefix=None,
+    ):
         filter_logs_events_kwargs = self._get_filter_logs_events_kwargs(
-            group_name, start, filter_pattern, log_stream_names,
-            log_stream_name_prefix)
+            group_name,
+            start,
+            filter_pattern,
+            log_stream_names,
+            log_stream_name_prefix,
+        )
         log_events = self._filter_log_events(filter_logs_events_kwargs)
         for log_event in log_events:
             self._convert_event_timestamps(log_event)
@@ -299,14 +314,15 @@ class BaseLogEventsGenerator(object):
     def _filter_log_events(self, filter_logs_events_kwargs):
         raise NotImplementedError('_filter_log_events()')
 
-    def _get_filter_logs_events_kwargs(self, group_name, start,
-                                       filter_pattern,
-                                       log_stream_names,
-                                       log_stream_name_prefix):
-        kwargs = {
-            'logGroupName': group_name,
-            'interleaved': True
-        }
+    def _get_filter_logs_events_kwargs(
+        self,
+        group_name,
+        start,
+        filter_pattern,
+        log_stream_names,
+        log_stream_name_prefix,
+    ):
+        kwargs = {'logGroupName': group_name, 'interleaved': True}
         if start is not None:
             kwargs['startTime'] = self._timestamp_utils.to_epoch_millis(start)
         if filter_pattern is not None:
@@ -319,9 +335,11 @@ class BaseLogEventsGenerator(object):
 
     def _convert_event_timestamps(self, event):
         event['ingestionTime'] = self._timestamp_utils.to_datetime(
-            event['ingestionTime'])
+            event['ingestionTime']
+        )
         event['timestamp'] = self._timestamp_utils.to_datetime(
-            event['timestamp'])
+            event['timestamp']
+        )
 
 
 class NoFollowLogEventsGenerator(BaseLogEventsGenerator):
@@ -356,32 +374,39 @@ class FollowLogEventsGenerator(BaseLogEv
             # Keep only ids of the events with the newest timestamp
             newest_timestamp = max(event_ids_per_timestamp.keys())
             event_ids_per_timestamp = defaultdict(
-                set, {newest_timestamp: event_ids_per_timestamp[newest_timestamp]}
+                set,
+                {newest_timestamp: event_ids_per_timestamp[newest_timestamp]},
             )
         return event_ids_per_timestamp
 
-    def _reset_filter_log_events_params(self, fle_kwargs, event_ids_per_timestamp):
+    def _reset_filter_log_events_params(
+        self, fle_kwargs, event_ids_per_timestamp
+    ):
         # Remove nextToken and update startTime for the next request
         # with the timestamp of the newest event
         if event_ids_per_timestamp:
-            fle_kwargs['startTime'] = max(
-                event_ids_per_timestamp.keys()
-            )
+            fle_kwargs['startTime'] = max(event_ids_per_timestamp.keys())
         fle_kwargs.pop('nextToken', None)
 
     def _do_filter_log_events(self, filter_logs_events_kwargs):
         event_ids_per_timestamp = defaultdict(set)
         while True:
             response = self._client.filter_log_events(
-                **filter_logs_events_kwargs)
+                **filter_logs_events_kwargs
+            )
             for event in response['events']:
                 # For the case where we've hit the last page, we will be
                 # reusing the newest timestamp of the received events to keep polling.
                 # This means it is possible that duplicate log events with same timestamp
                 # are returned back which we do not want to yield again.
                 # We only want to yield log events that we have not seen.
-                if event['eventId'] not in event_ids_per_timestamp[event['timestamp']]:
-                    event_ids_per_timestamp[event['timestamp']].add(event['eventId'])
+                if (
+                    event['eventId']
+                    not in event_ids_per_timestamp[event['timestamp']]
+                ):
+                    event_ids_per_timestamp[event['timestamp']].add(
+                        event['eventId']
+                    )
                     yield event
             event_ids_per_timestamp = self._get_latest_events_and_timestamp(
                 event_ids_per_timestamp
@@ -390,7 +415,6 @@ class FollowLogEventsGenerator(BaseLogEv
                 filter_logs_events_kwargs['nextToken'] = response['nextToken']
             else:
                 self._reset_filter_log_events_params(
-                    filter_logs_events_kwargs,
-                    event_ids_per_timestamp
+                    filter_logs_events_kwargs, event_ids_per_timestamp
                 )
                 self._sleep(self._TIME_TO_SLEEP)
diff -pruN 2.23.6-1/awscli/customizations/opsworks.py 2.31.35-1/awscli/customizations/opsworks.py
--- 2.23.6-1/awscli/customizations/opsworks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/opsworks.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,545 +0,0 @@
-# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-import datetime
-import json
-import logging
-import os
-import platform
-import re
-import shlex
-import socket
-import subprocess
-import tempfile
-import textwrap
-
-from botocore.exceptions import ClientError
-
-from awscli.compat import urlopen, ensure_text_type
-from awscli.customizations.commands import BasicCommand
-from awscli.customizations.utils import create_client_from_parsed_globals
-from awscli.customizations.exceptions import ParamValidationError
-
-
-LOG = logging.getLogger(__name__)
-
-IAM_USER_POLICY_NAME = "OpsWorks-Instance"
-IAM_USER_POLICY_TIMEOUT = datetime.timedelta(minutes=15)
-IAM_PATH = '/AWS/OpsWorks/'
-IAM_POLICY_ARN = 'arn:aws:iam::aws:policy/AWSOpsWorksInstanceRegistration'
-
-HOSTNAME_RE = re.compile(r"^(?!-)[a-z0-9-]{1,63}(?<!-)$", re.I)
-INSTANCE_ID_RE = re.compile(r"^i-[0-9a-f]+$")
-IP_ADDRESS_RE = re.compile(r"^\d+\.\d+\.\d+\.\d+$")
-
-IDENTITY_URL = \
-    "http://169.254.169.254/latest/dynamic/instance-identity/document"
-
-REMOTE_SCRIPT = """
-set -e
-umask 007
-AGENT_TMP_DIR=$(mktemp -d /tmp/opsworks-agent-installer.XXXXXXXXXXXXXXXX)
-curl --retry 5 -L %(agent_installer_url)s | tar xz -C $AGENT_TMP_DIR
-cat >$AGENT_TMP_DIR/opsworks-agent-installer/preconfig <<EOF
-%(preconfig)s
-EOF
-exec sudo /bin/sh -c "\
-OPSWORKS_ASSETS_DOWNLOAD_BUCKET=%(assets_download_bucket)s \
-$AGENT_TMP_DIR/opsworks-agent-installer/boot-registration; \
-rm -rf $AGENT_TMP_DIR"
-""".lstrip()
-
-
-def initialize(cli):
-    cli.register('building-command-table.opsworks', inject_commands)
-
-
-def inject_commands(command_table, session, **kwargs):
-    command_table['register'] = OpsWorksRegister(session)
-
-
-class OpsWorksRegister(BasicCommand):
-    NAME = "register"
-    DESCRIPTION = textwrap.dedent("""
-        Registers an EC2 instance or machine with AWS OpsWorks.
-
-        Registering a machine using this command will install the AWS OpsWorks
-        agent on the target machine and register it with an existing OpsWorks
-        stack.
-    """).strip()
-
-    ARG_TABLE = [
-        {'name': 'stack-id', 'required': True,
-         'help_text': """A stack ID. The instance will be registered with the
-                         given stack."""},
-        {'name': 'infrastructure-class', 'required': True,
-         'choices': ['ec2', 'on-premises'],
-         'help_text': """Specifies whether to register an EC2 instance (`ec2`)
-                         or an on-premises instance (`on-premises`)."""},
-        {'name': 'override-hostname', 'dest': 'hostname',
-         'help_text': """The instance hostname. If not provided, the current
-                         hostname of the machine will be used."""},
-        {'name': 'override-private-ip', 'dest': 'private_ip',
-         'help_text': """An IP address. If you set this parameter, the given IP
-                         address will be used as the private IP address within
-                         OpsWorks.  Otherwise the private IP address will be
-                         determined automatically. Not to be used with EC2
-                         instances."""},
-        {'name': 'override-public-ip', 'dest': 'public_ip',
-         'help_text': """An IP address. If you set this parameter, the given IP
-                         address will be used as the public IP address within
-                         OpsWorks.  Otherwise the public IP address will be
-                         determined automatically. Not to be used with EC2
-                         instances."""},
-        {'name': 'override-ssh', 'dest': 'ssh',
-         'help_text': """If you set this parameter, the given command will be
-                         used to connect to the machine."""},
-        {'name': 'ssh-username', 'dest': 'username',
-         'help_text': """If provided, this username will be used to connect to
-                         the host."""},
-        {'name': 'ssh-private-key', 'dest': 'private_key',
-         'help_text': """If provided, the given private key file will be used
-                         to connect to the machine."""},
-        {'name': 'local', 'action': 'store_true',
-         'help_text': """If given, instead of a remote machine, the local
-                         machine will be imported. Cannot be used together
-                         with `target`."""},
-        {'name': 'use-instance-profile', 'action': 'store_true',
-         'help_text': """Use the instance profile instead of creating an IAM
-                         user."""},
-        {'name': 'target', 'positional_arg': True, 'nargs': '?',
-         'synopsis': '[<target>]',
-         'help_text': """Either the EC2 instance ID or the hostname of the
-                         instance or machine to be registered with OpsWorks.
-                         Cannot be used together with `--local`."""},
-    ]
-
-    def __init__(self, session):
-        super(OpsWorksRegister, self).__init__(session)
-        self._stack = None
-        self._ec2_instance = None
-        self._prov_params = None
-        self._use_address = None
-        self._use_hostname = None
-        self._name_for_iam = None
-        self.access_key = None
-
-    def _create_clients(self, args, parsed_globals):
-        self.iam = self._session.create_client('iam')
-        self.opsworks = create_client_from_parsed_globals(
-            self._session, 'opsworks', parsed_globals)
-
-    def _run_main(self, args, parsed_globals):
-        self._create_clients(args, parsed_globals)
-
-        self.prevalidate_arguments(args)
-        self.retrieve_stack(args)
-        self.validate_arguments(args)
-        self.determine_details(args)
-        self.create_iam_entities(args)
-        self.setup_target_machine(args)
-        return 0
-
-    def prevalidate_arguments(self, args):
-        """
-        Validates command line arguments before doing anything else.
-        """
-        if not args.target and not args.local:
-            raise ParamValidationError("One of target or --local is required.")
-        elif args.target and args.local:
-            raise ParamValidationError(
-                "Arguments target and --local are mutually exclusive.")
-
-        if args.local and platform.system() != 'Linux':
-            raise ParamValidationError(
-                "Non-Linux instances are not supported by AWS OpsWorks.")
-
-        if args.ssh and (args.username or args.private_key):
-            raise ParamValidationError(
-                "Argument --override-ssh cannot be used together with "
-                "--ssh-username or --ssh-private-key.")
-
-        if args.infrastructure_class == 'ec2':
-            if args.private_ip:
-                raise ParamValidationError(
-                    "--override-private-ip is not supported for EC2.")
-            if args.public_ip:
-                raise ParamValidationError(
-                    "--override-public-ip is not supported for EC2.")
-
-        if args.infrastructure_class == 'on-premises' and \
-                args.use_instance_profile:
-            raise ParamValidationError(
-                "--use-instance-profile is only supported for EC2.")
-
-        if args.hostname:
-            if not HOSTNAME_RE.match(args.hostname):
-                raise ParamValidationError(
-                    "Invalid hostname: '%s'. Hostnames must consist of "
-                    "letters, digits and dashes only and must not start or "
-                    "end with a dash." % args.hostname)
-
-    def retrieve_stack(self, args):
-        """
-        Retrieves the stack from the API, thereby ensures that it exists.
-
-        Provides `self._stack`, `self._prov_params`, `self._use_address`, and
-        `self._ec2_instance`.
-        """
-
-        LOG.debug("Retrieving stack and provisioning parameters")
-        self._stack = self.opsworks.describe_stacks(
-            StackIds=[args.stack_id]
-        )['Stacks'][0]
-        self._prov_params = \
-            self.opsworks.describe_stack_provisioning_parameters(
-                StackId=self._stack['StackId']
-            )
-
-        if args.infrastructure_class == 'ec2' and not args.local:
-            LOG.debug("Retrieving EC2 instance information")
-            ec2 = self._session.create_client(
-                'ec2', region_name=self._stack['Region'])
-
-            # `desc_args` are arguments for the describe_instances call,
-            # whereas `conditions` is a list of lambdas for further filtering
-            # on the results of the call.
-            desc_args = {'Filters': []}
-            conditions = []
-
-            # make sure that the platforms (EC2/VPC) and VPC IDs of the stack
-            # and the instance match
-            if 'VpcId' in self._stack:
-                desc_args['Filters'].append(
-                    {'Name': 'vpc-id', 'Values': [self._stack['VpcId']]}
-                )
-            else:
-                # Cannot search for non-VPC instances directly, thus filter
-                # afterwards
-                conditions.append(lambda instance: 'VpcId' not in instance)
-
-            # target may be an instance ID, an IP address, or a name
-            if INSTANCE_ID_RE.match(args.target):
-                desc_args['InstanceIds'] = [args.target]
-            elif IP_ADDRESS_RE.match(args.target):
-                # Cannot search for either private or public IP at the same
-                # time, thus filter afterwards
-                conditions.append(
-                    lambda instance:
-                        instance.get('PrivateIpAddress') == args.target or
-                        instance.get('PublicIpAddress') == args.target)
-                # also use the given address to connect
-                self._use_address = args.target
-            else:
-                # names are tags
-                desc_args['Filters'].append(
-                    {'Name': 'tag:Name', 'Values': [args.target]}
-                )
-
-            # find all matching instances
-            instances = [
-                i
-                for r in ec2.describe_instances(**desc_args)['Reservations']
-                for i in r['Instances']
-                if all(c(i) for c in conditions)
-            ]
-
-            if not instances:
-                raise ValueError(
-                    "Did not find any instance matching %s." % args.target)
-            elif len(instances) > 1:
-                raise ValueError(
-                    "Found multiple instances matching %s: %s." % (
-                        args.target,
-                        ", ".join(i['InstanceId'] for i in instances)))
-
-            self._ec2_instance = instances[0]
-
-    def validate_arguments(self, args):
-        """
-        Validates command line arguments using the retrieved information.
-        """
-
-        if args.hostname:
-            instances = self.opsworks.describe_instances(
-                StackId=self._stack['StackId']
-            )['Instances']
-            if any(args.hostname.lower() == instance['Hostname']
-                   for instance in instances):
-                raise ValueError(
-                    "Invalid hostname: '%s'. Hostnames must be unique within "
-                    "a stack." % args.hostname)
-
-        if args.infrastructure_class == 'ec2' and args.local:
-            # make sure the regions match
-            region = json.loads(
-                ensure_text_type(urlopen(IDENTITY_URL).read()))['region']
-            if region != self._stack['Region']:
-                raise ValueError(
-                    "The stack's and the instance's region must match.")
-
-    def determine_details(self, args):
-        """
-        Determine details (like the address to connect to and the hostname to
-        use) from the given arguments and the retrieved data.
-
-        Provides `self._use_address` (if not provided already),
-        `self._use_hostname` and `self._name_for_iam`.
-        """
-
-        # determine the address to connect to
-        if not self._use_address:
-            if args.local:
-                pass
-            elif args.infrastructure_class == 'ec2':
-                if 'PublicIpAddress' in self._ec2_instance:
-                    self._use_address = self._ec2_instance['PublicIpAddress']
-                elif 'PrivateIpAddress' in self._ec2_instance:
-                    LOG.warning(
-                        "Instance does not have a public IP address. Trying "
-                        "to use the private address to connect.")
-                    self._use_address = self._ec2_instance['PrivateIpAddress']
-                else:
-                    # Should never happen
-                    raise ValueError(
-                        "The instance does not seem to have an IP address.")
-            elif args.infrastructure_class == 'on-premises':
-                self._use_address = args.target
-
-        # determine the names to use
-        if args.hostname:
-            self._use_hostname = args.hostname
-            self._name_for_iam = args.hostname
-        elif args.local:
-            self._use_hostname = None
-            self._name_for_iam = socket.gethostname()
-        else:
-            self._use_hostname = None
-            self._name_for_iam = args.target
-
-    def create_iam_entities(self, args):
-        """
-        Creates an IAM group, user and corresponding credentials.
-
-        Provides `self.access_key`.
-        """
-
-        if args.use_instance_profile:
-            LOG.debug("Skipping IAM entity creation")
-            self.access_key = None
-            return
-
-        LOG.debug("Creating the IAM group if necessary")
-        group_name = "OpsWorks-%s" % clean_for_iam(self._stack['StackId'])
-        try:
-            self.iam.create_group(GroupName=group_name, Path=IAM_PATH)
-            LOG.debug("Created IAM group %s", group_name)
-        except ClientError as e:
-            if e.response.get('Error', {}).get('Code') == 'EntityAlreadyExists':
-                LOG.debug("IAM group %s exists, continuing", group_name)
-                # group already exists, good
-                pass
-            else:
-                raise
-
-        # create the IAM user, trying alternatives if it already exists
-        LOG.debug("Creating an IAM user")
-        base_username = "OpsWorks-%s-%s" % (
-            shorten_name(clean_for_iam(self._stack['Name']), 25),
-            shorten_name(clean_for_iam(self._name_for_iam), 25)
-        )
-        for try_ in range(20):
-            username = base_username + ("+%s" % try_ if try_ else "")
-            try:
-                self.iam.create_user(UserName=username, Path=IAM_PATH)
-            except ClientError as e:
-                if e.response.get('Error', {}).get('Code') == 'EntityAlreadyExists':
-                    LOG.debug(
-                        "IAM user %s already exists, trying another name",
-                        username
-                    )
-                    # user already exists, try the next one
-                    pass
-                else:
-                    raise
-            else:
-                LOG.debug("Created IAM user %s", username)
-                break
-        else:
-            raise ValueError("Couldn't find an unused IAM user name.")
-
-        LOG.debug("Adding the user to the group and attaching a policy")
-        self.iam.add_user_to_group(GroupName=group_name, UserName=username)
-
-        try:
-            self.iam.attach_user_policy(
-                PolicyArn=IAM_POLICY_ARN,
-                UserName=username
-            )
-        except ClientError as e:
-            if e.response.get('Error', {}).get('Code') == 'AccessDenied':
-                LOG.debug(
-                    "Unauthorized to attach policy %s to user %s. Trying "
-                    "to put user policy",
-                    IAM_POLICY_ARN,
-                    username
-                )
-                self.iam.put_user_policy(
-                    PolicyName=IAM_USER_POLICY_NAME,
-                    PolicyDocument=self._iam_policy_document(
-                        self._stack['Arn'], IAM_USER_POLICY_TIMEOUT),
-                    UserName=username
-                )
-                LOG.debug(
-                    "Put policy %s to user %s",
-                    IAM_USER_POLICY_NAME,
-                    username
-                )
-            else:
-                raise
-        else:
-            LOG.debug(
-                "Attached policy %s to user %s",
-                IAM_POLICY_ARN,
-                username
-            )
-
-        LOG.debug("Creating an access key")
-        self.access_key = self.iam.create_access_key(
-            UserName=username
-        )['AccessKey']
-
-    def setup_target_machine(self, args):
-        """
-        Setups the target machine by copying over the credentials and starting
-        the installation process.
-        """
-
-        remote_script = REMOTE_SCRIPT % {
-            'agent_installer_url':
-                self._prov_params['AgentInstallerUrl'],
-            'preconfig':
-                self._to_ruby_yaml(self._pre_config_document(args)),
-            'assets_download_bucket':
-                self._prov_params['Parameters']['assets_download_bucket']
-        }
-
-        if args.local:
-            LOG.debug("Running the installer locally")
-            subprocess.check_call(["/bin/sh", "-c", remote_script])
-        else:
-            LOG.debug("Connecting to the target machine to run the installer.")
-            self.ssh(args, remote_script)
-
-    def ssh(self, args, remote_script):
-        """
-        Runs a (sh) script on a remote machine via SSH.
-        """
-
-        if platform.system() == 'Windows':
-            try:
-                script_file = tempfile.NamedTemporaryFile("wt", delete=False)
-                script_file.write(remote_script)
-                script_file.close()
-                if args.ssh:
-                    call = args.ssh
-                else:
-                    call = 'plink'
-                    if args.username:
-                        call += ' -l "%s"' % args.username
-                    if args.private_key:
-                        call += ' -i "%s"' % args.private_key
-                    call += ' "%s"' % self._use_address
-                    call += ' -m'
-                call += ' "%s"' % script_file.name
-
-                subprocess.check_call(call, shell=True)
-            finally:
-                os.remove(script_file.name)
-        else:
-            if args.ssh:
-                call = shlex.split(str(args.ssh))
-            else:
-                call = ['ssh', '-tt']
-                if args.username:
-                    call.extend(['-l', args.username])
-                if args.private_key:
-                    call.extend(['-i', args.private_key])
-                call.append(self._use_address)
-
-            remote_call = ["/bin/sh", "-c", remote_script]
-            call.append(" ".join(shlex.quote(word) for word in remote_call))
-            subprocess.check_call(call)
-
-    def _pre_config_document(self, args):
-        parameters = dict(
-            stack_id=self._stack['StackId'],
-            **self._prov_params["Parameters"]
-        )
-        if self.access_key:
-            parameters['access_key_id'] = self.access_key['AccessKeyId']
-            parameters['secret_access_key'] = \
-                self.access_key['SecretAccessKey']
-        if self._use_hostname:
-            parameters['hostname'] = self._use_hostname
-        if args.private_ip:
-            parameters['private_ip'] = args.private_ip
-        if args.public_ip:
-            parameters['public_ip'] = args.public_ip
-        parameters['import'] = args.infrastructure_class == 'ec2'
-        LOG.debug("Using pre-config: %r", parameters)
-        return parameters
-
-    @staticmethod
-    def _iam_policy_document(arn, timeout=None):
-        statement = {
-            "Action": "opsworks:RegisterInstance",
-            "Effect": "Allow",
-            "Resource": arn,
-        }
-        if timeout is not None:
-            valid_until = datetime.datetime.utcnow() + timeout
-            statement["Condition"] = {
-                "DateLessThan": {
-                    "aws:CurrentTime":
-                        valid_until.strftime("%Y-%m-%dT%H:%M:%SZ")
-                }
-            }
-        policy_document = {
-            "Statement": [statement],
-            "Version": "2012-10-17"
-        }
-        return json.dumps(policy_document)
-
-    @staticmethod
-    def _to_ruby_yaml(parameters):
-        return "\n".join(":%s: %s" % (k, json.dumps(v))
-                         for k, v in sorted(parameters.items()))
-
-
-def clean_for_iam(name):
-    """
-    Cleans a name to fit IAM's naming requirements.
-    """
-
-    return re.sub(r'[^A-Za-z0-9+=,.@_-]+', '-', name)
-
-
-def shorten_name(name, max_length):
-    """
-    Shortens a name to the given number of characters.
-    """
-
-    if len(name) <= max_length:
-        return name
-    q, r = divmod(max_length - 3, 2)
-    return name[:q + r] + "..." + name[-q:]
diff -pruN 2.23.6-1/awscli/customizations/opsworkscm.py 2.31.35-1/awscli/customizations/opsworkscm.py
--- 2.23.6-1/awscli/customizations/opsworkscm.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/opsworkscm.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-from awscli.customizations.utils import alias_command
-
-
-def register_alias_opsworks_cm(event_emitter):
-    event_emitter.register('building-command-table.main', alias_opsworks_cm)
-
-
-def alias_opsworks_cm(command_table, **kwargs):
-    alias_command(command_table, 'opsworkscm', 'opsworks-cm')
diff -pruN 2.23.6-1/awscli/customizations/paginate.py 2.31.35-1/awscli/customizations/paginate.py
--- 2.23.6-1/awscli/customizations/paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,13 +23,13 @@ For any operation that can be paginated,
     * Add a ``--starting-token`` and a ``--max-items`` argument.
 
 """
+
 import logging
 import sys
 from functools import partial
 
-from botocore import xform_name
+from botocore import model, xform_name
 from botocore.exceptions import DataNotFoundError
-from botocore import model
 
 from awscli.arguments import BaseCLIArgument
 from awscli.customizations.exceptions import ParamValidationError
@@ -87,7 +87,8 @@ def get_paginator_config(session, servic
         return None
     try:
         operation_paginator_config = paginator_model.get_paginator(
-            operation_name)
+            operation_name
+        )
     except ValueError:
         return None
     return operation_paginator_config
@@ -100,15 +101,19 @@ def add_paging_description(help_command,
         return
     service_name = help_command.obj.service_model.service_name
     paginator_config = get_paginator_config(
-        help_command.session, service_name, help_command.obj.name)
+        help_command.session, service_name, help_command.obj.name
+    )
     if not paginator_config:
         return
     help_command.doc.style.new_paragraph()
     help_command.doc.writeln(
-        ('``%s`` is a paginated operation. Multiple API calls may be issued '
-         'in order to retrieve the entire data set of results. You can '
-         'disable pagination by providing the ``--no-paginate`` argument.')
-        % help_command.name)
+        (
+            '``%s`` is a paginated operation. Multiple API calls may be issued '
+            'in order to retrieve the entire data set of results. You can '
+            'disable pagination by providing the ``--no-paginate`` argument.'
+        )
+        % help_command.name
+    )
     # Only include result key information if it is present.
     if paginator_config.get('result_key'):
         queries = paginator_config['result_key']
@@ -116,33 +121,48 @@ def add_paging_description(help_command,
             queries = [queries]
         queries = ", ".join([('``%s``' % s) for s in queries])
         help_command.doc.writeln(
-            ('When using ``--output text`` and the ``--query`` argument on a '
-             'paginated response, the ``--query`` argument must extract data '
-             'from the results of the following query expressions: %s')
-            % queries)
+            (
+                'When using ``--output text`` and the ``--query`` argument on a '
+                'paginated response, the ``--query`` argument must extract data '
+                'from the results of the following query expressions: %s'
+            )
+            % queries
+        )
 
 
-def unify_paging_params(argument_table, operation_model, event_name,
-                        session, **kwargs):
+def unify_paging_params(
+    argument_table, operation_model, event_name, session, **kwargs
+):
     paginator_config = get_paginator_config(
-        session, operation_model.service_model.service_name,
-        operation_model.name)
+        session,
+        operation_model.service_model.service_name,
+        operation_model.name,
+    )
     if paginator_config is None:
         # We only apply these customizations to paginated responses.
         return
-    logger.debug("Modifying paging parameters for operation: %s",
-                 operation_model.name)
+    logger.debug(
+        "Modifying paging parameters for operation: %s", operation_model.name
+    )
     _remove_existing_paging_arguments(argument_table, paginator_config)
-    parsed_args_event = event_name.replace('building-argument-table.',
-                                           'operation-args-parsed.')
-    call_parameters_event = event_name.replace('building-argument-table',
-                                               'calling-command')
+    parsed_args_event = event_name.replace(
+        'building-argument-table.', 'operation-args-parsed.'
+    )
+    call_parameters_event = event_name.replace(
+        'building-argument-table', 'calling-command'
+    )
     shadowed_args = {}
-    add_paging_argument(argument_table, 'starting-token',
-                        PageArgument('starting-token', STARTING_TOKEN_HELP,
-                                     parse_type='string',
-                                     serialized_name='StartingToken'),
-                        shadowed_args)
+    add_paging_argument(
+        argument_table,
+        'starting-token',
+        PageArgument(
+            'starting-token',
+            STARTING_TOKEN_HELP,
+            parse_type='string',
+            serialized_name='StartingToken',
+        ),
+        shadowed_args,
+    )
     input_members = operation_model.input_shape.members
     type_name = 'integer'
     if 'limit_key' in paginator_config:
@@ -150,21 +170,38 @@ def unify_paging_params(argument_table,
         type_name = limit_key_shape.type_name
         if type_name not in PageArgument.type_map:
             raise TypeError(
-                ('Unsupported pagination type {0} for operation {1}'
-                 ' and parameter {2}').format(
-                    type_name, operation_model.name,
-                    paginator_config['limit_key']))
-        add_paging_argument(argument_table, 'page-size',
-                            PageArgument('page-size', PAGE_SIZE_HELP,
-                                         parse_type=type_name,
-                                         serialized_name='PageSize'),
-                            shadowed_args)
-
-    add_paging_argument(argument_table, 'max-items',
-                        PageArgument('max-items', MAX_ITEMS_HELP,
-                                     parse_type=type_name,
-                                     serialized_name='MaxItems'),
-                        shadowed_args)
+                (
+                    'Unsupported pagination type {0} for operation {1}'
+                    ' and parameter {2}'
+                ).format(
+                    type_name,
+                    operation_model.name,
+                    paginator_config['limit_key'],
+                )
+            )
+        add_paging_argument(
+            argument_table,
+            'page-size',
+            PageArgument(
+                'page-size',
+                PAGE_SIZE_HELP,
+                parse_type=type_name,
+                serialized_name='PageSize',
+            ),
+            shadowed_args,
+        )
+
+    add_paging_argument(
+        argument_table,
+        'max-items',
+        PageArgument(
+            'max-items',
+            MAX_ITEMS_HELP,
+            parse_type=type_name,
+            serialized_name='MaxItems',
+        ),
+        shadowed_args,
+    )
     # We will register two pagination handlers.
     #
     # The first is focused on analyzing the CLI arguments passed to see
@@ -179,13 +216,20 @@ def unify_paging_params(argument_table,
     # directly and this bypasses all of the CLI args processing.
     session.register(
         parsed_args_event,
-        partial(check_should_enable_pagination,
-                list(_get_all_cli_input_tokens(paginator_config)),
-                shadowed_args, argument_table))
+        partial(
+            check_should_enable_pagination,
+            list(_get_all_cli_input_tokens(paginator_config)),
+            shadowed_args,
+            argument_table,
+        ),
+    )
     session.register(
         call_parameters_event,
-        partial(check_should_enable_pagination_call_parameters,
-                list(_get_all_input_tokens(paginator_config))))
+        partial(
+            check_should_enable_pagination_call_parameters,
+            list(_get_all_input_tokens(paginator_config)),
+        ),
+    )
 
 
 def add_paging_argument(argument_table, arg_name, argument, shadowed_args):
@@ -199,17 +243,27 @@ def add_paging_argument(argument_table,
     argument_table[arg_name] = argument
 
 
-def check_should_enable_pagination(input_tokens, shadowed_args, argument_table,
-                                   parsed_args, parsed_globals, **kwargs):
+def check_should_enable_pagination(
+    input_tokens,
+    shadowed_args,
+    argument_table,
+    parsed_args,
+    parsed_globals,
+    **kwargs,
+):
     normalized_paging_args = ['start_token', 'max_items']
     for token in input_tokens:
         py_name = token.replace('-', '_')
-        if getattr(parsed_args, py_name) is not None and \
-                py_name not in normalized_paging_args:
+        if (
+            getattr(parsed_args, py_name) is not None
+            and py_name not in normalized_paging_args
+        ):
             # The user has specified a manual (undocumented) pagination arg.
             # We need to automatically turn pagination off.
-            logger.debug("User has specified a manual pagination arg. "
-                         "Automatically setting --no-paginate.")
+            logger.debug(
+                "User has specified a manual pagination arg. "
+                "Automatically setting --no-paginate."
+            )
             parsed_globals.paginate = False
 
     if not parsed_globals.paginate:
@@ -229,12 +283,16 @@ def check_should_enable_pagination(input
 def ensure_paging_params_not_set(parsed_args, shadowed_args):
     paging_params = ['starting_token', 'page_size', 'max_items']
     shadowed_params = [p.replace('-', '_') for p in shadowed_args.keys()]
-    params_used = [p for p in paging_params if
-                   p not in shadowed_params and getattr(parsed_args, p, None)]
+    params_used = [
+        p
+        for p in paging_params
+        if p not in shadowed_params and getattr(parsed_args, p, None)
+    ]
 
     if len(params_used) > 0:
         converted_params = ', '.join(
-            ["--" + p.replace('_', '-') for p in params_used])
+            ["--" + p.replace('_', '-') for p in params_used]
+        )
         raise ParamValidationError(
             "Cannot specify --no-paginate along with pagination "
             "arguments: %s" % converted_params
@@ -291,11 +349,14 @@ def _get_cli_name(param_objects, token_n
 # and would be missed by the processing above.  This function gets
 # called on the calling-command event.
 def check_should_enable_pagination_call_parameters(
-        input_tokens, call_parameters, parsed_args, parsed_globals, **kwargs):
+    input_tokens, call_parameters, parsed_args, parsed_globals, **kwargs
+):
     for param in call_parameters:
         if param in input_tokens:
-            logger.debug("User has specified a manual pagination arg. "
-                         "Automatically setting --no-paginate.")
+            logger.debug(
+                "User has specified a manual pagination arg. "
+                "Automatically setting --no-paginate."
+            )
             parsed_globals.paginate = False
 
 
@@ -317,7 +378,8 @@ class PageArgument(BaseCLIArgument):
     def _emit_non_positive_max_items_warning(self):
         uni_print(
             "warning: Non-positive values for --max-items may result in undefined behavior.\n",
-            sys.stderr)
+            sys.stderr,
+        )
 
     @property
     def cli_name(self):
@@ -340,8 +402,11 @@ class PageArgument(BaseCLIArgument):
         return self._documentation
 
     def add_to_parser(self, parser):
-        parser.add_argument(self.cli_name, dest=self.py_name,
-                            type=self.type_map[self._parse_type])
+        parser.add_argument(
+            self.cli_name,
+            dest=self.py_name,
+            type=self.type_map[self._parse_type],
+        )
 
     def add_to_params(self, parameters, value):
         if value is not None:
diff -pruN 2.23.6-1/awscli/customizations/putmetricdata.py 2.31.35-1/awscli/customizations/putmetricdata.py
--- 2.23.6-1/awscli/customizations/putmetricdata.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/putmetricdata.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,21 +23,32 @@ cloudwatch put-metric-data operation:
 * --storage-resolution
 
 """
+
 import decimal
 
 from awscli.arguments import CustomArgument
-from awscli.utils import split_on_commas
 from awscli.customizations.utils import validate_mutually_exclusive_handler
+from awscli.utils import split_on_commas
 
 
 def register_put_metric_data(event_handler):
     event_handler.register(
-        'building-argument-table.cloudwatch.put-metric-data', _promote_args)
+        'building-argument-table.cloudwatch.put-metric-data', _promote_args
+    )
     event_handler.register(
         'operation-args-parsed.cloudwatch.put-metric-data',
         validate_mutually_exclusive_handler(
-            ['metric_data'], ['metric_name', 'timestamp', 'unit', 'value',
-                              'dimensions', 'statistic_values']))
+            ['metric_data'],
+            [
+                'metric_name',
+                'timestamp',
+                'unit',
+                'value',
+                'dimensions',
+                'statistic_values',
+            ],
+        ),
+    )
 
 
 def _promote_args(argument_table, operation_model, **kwargs):
@@ -48,25 +59,32 @@ def _promote_args(argument_table, operat
     argument_table['metric-data'].required = False
 
     argument_table['metric-name'] = PutMetricArgument(
-        'metric-name', help_text='The name of the metric.')
+        'metric-name', help_text='The name of the metric.'
+    )
     argument_table['timestamp'] = PutMetricArgument(
-        'timestamp', help_text='The time stamp used for the metric.  '
-                               'If not specified, the default value is '
-                               'set to the time the metric data was '
-                               'received.')
+        'timestamp',
+        help_text='The time stamp used for the metric.  '
+        'If not specified, the default value is '
+        'set to the time the metric data was '
+        'received.',
+    )
     argument_table['unit'] = PutMetricArgument(
-        'unit', help_text='The unit of metric.')
+        'unit', help_text='The unit of metric.'
+    )
     argument_table['value'] = PutMetricArgument(
-        'value', help_text='The value for the metric.  Although the --value '
-                           'parameter accepts numbers of type Double, '
-                           'Amazon CloudWatch truncates values with very '
-                           'large exponents.  Values with base-10 exponents '
-                           'greater than 126 (1 x 10^126) are truncated.  '
-                           'Likewise, values with base-10 exponents less '
-                           'than -130 (1 x 10^-130) are also truncated.')
+        'value',
+        help_text='The value for the metric.  Although the --value '
+        'parameter accepts numbers of type Double, '
+        'Amazon CloudWatch truncates values with very '
+        'large exponents.  Values with base-10 exponents '
+        'greater than 126 (1 x 10^126) are truncated.  '
+        'Likewise, values with base-10 exponents less '
+        'than -130 (1 x 10^-130) are also truncated.',
+    )
 
     argument_table['dimensions'] = PutMetricArgument(
-        'dimensions', help_text=(
+        'dimensions',
+        help_text=(
             'The --dimensions argument further expands '
             'on the identity of a metric using a Name=Value '
             'pair, separated by commas, for example: '
@@ -76,11 +94,12 @@ def _promote_args(argument_table, operat
             'where for the same example you would use the format '
             '<code>--dimensions Name=InstanceID,Value=i-aaba32d4 '
             'Name=InstanceType,value=m1.small </code>.'
-        )
+        ),
     )
     argument_table['statistic-values'] = PutMetricArgument(
-        'statistic-values', help_text='A set of statistical values describing '
-                                      'the metric.')
+        'statistic-values',
+        help_text='A set of statistical values describing the metric.',
+    )
 
     metric_data = operation_model.input_shape.members['MetricData'].member
     storage_resolution = metric_data.members['StorageResolution']
@@ -103,7 +122,9 @@ def insert_first_element(name):
                 parameters[name] = [{}]
             first_element = parameters[name][0]
             return func(self, first_element, value)
+
         return _add_to_params
+
     return _wrap_add_to_params
 
 
diff -pruN 2.23.6-1/awscli/customizations/quicksight.py 2.31.35-1/awscli/customizations/quicksight.py
--- 2.23.6-1/awscli/customizations/quicksight.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/quicksight.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,11 +16,13 @@ from awscli.customizations.arguments imp
 _ASSET_BUNDLE_FILE_DOCSTRING = (
     '<p>The content of the asset bundle to be uploaded. '
     'To specify the content of a local file use the '
-    'fileb:// prefix. Example: fileb://asset-bundle.zip</p>')
+    'fileb:// prefix. Example: fileb://asset-bundle.zip</p>'
+)
 
 _ASSET_BUNDLE_DOCSTRING_ADDENDUM = (
     '<p>To specify a local file use '
-    '<code>--asset-bundle-import-source-bytes</code> instead.</p>')
+    '<code>--asset-bundle-import-source-bytes</code> instead.</p>'
+)
 
 
 def register_quicksight_asset_bundle_customizations(cli):
@@ -31,4 +33,6 @@ def register_quicksight_asset_bundle_cus
             source_arg_blob_member='Body',
             new_arg='asset-bundle-import-source-bytes',
             new_arg_doc_string=_ASSET_BUNDLE_FILE_DOCSTRING,
-            doc_string_addendum=_ASSET_BUNDLE_DOCSTRING_ADDENDUM))
+            doc_string_addendum=_ASSET_BUNDLE_DOCSTRING_ADDENDUM,
+        ),
+    )
diff -pruN 2.23.6-1/awscli/customizations/rds.py 2.31.35-1/awscli/customizations/rds.py
--- 2.23.6-1/awscli/customizations/rds.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/rds.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,8 +24,7 @@ modify-option-group).
 
 """
 
-from awscli.clidriver import ServiceOperation
-from awscli.clidriver import CLIOperationCaller
+from awscli.clidriver import CLIOperationCaller, ServiceOperation
 from awscli.customizations import utils
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.utils import uni_print
@@ -33,10 +32,14 @@ from awscli.customizations.utils import
 
 def register_rds_modify_split(cli):
     cli.register('building-command-table.rds', _building_command_table)
-    cli.register('building-argument-table.rds.add-option-to-option-group',
-                 _rename_add_option)
-    cli.register('building-argument-table.rds.remove-option-from-option-group',
-                 _rename_remove_option)
+    cli.register(
+        'building-argument-table.rds.add-option-to-option-group',
+        _rename_add_option,
+    )
+    cli.register(
+        'building-argument-table.rds.remove-option-from-option-group',
+        _rename_remove_option,
+    )
 
 
 def register_add_generate_db_auth_token(cli):
@@ -49,14 +52,16 @@ def _add_generate_db_auth_token(command_
 
 
 def _rename_add_option(argument_table, **kwargs):
-    utils.rename_argument(argument_table, 'options-to-include',
-                          new_name='options')
+    utils.rename_argument(
+        argument_table, 'options-to-include', new_name='options'
+    )
     del argument_table['options-to-remove']
 
 
 def _rename_remove_option(argument_table, **kwargs):
-    utils.rename_argument(argument_table, 'options-to-remove',
-                          new_name='options')
+    utils.rename_argument(
+        argument_table, 'options-to-remove', new_name='options'
+    )
     del argument_table['options-to-include']
 
 
@@ -69,15 +74,19 @@ def _building_command_table(command_tabl
     rds_model = session.get_service_model('rds')
     modify_operation_model = rds_model.operation_model('ModifyOptionGroup')
     command_table['add-option-to-option-group'] = ServiceOperation(
-        parent_name='rds', name='add-option-to-option-group',
+        parent_name='rds',
+        name='add-option-to-option-group',
         operation_caller=CLIOperationCaller(session),
         session=session,
-        operation_model=modify_operation_model)
+        operation_model=modify_operation_model,
+    )
     command_table['remove-option-from-option-group'] = ServiceOperation(
-        parent_name='rds', name='remove-option-from-option-group',
+        parent_name='rds',
+        name='remove-option-from-option-group',
         session=session,
         operation_model=modify_operation_model,
-        operation_caller=CLIOperationCaller(session))
+        operation_caller=CLIOperationCaller(session),
+    )
 
 
 class GenerateDBAuthTokenCommand(BasicCommand):
@@ -86,23 +95,35 @@ class GenerateDBAuthTokenCommand(BasicCo
         'Generates an auth token used to connect to a db with IAM credentials.'
     )
     ARG_TABLE = [
-        {'name': 'hostname', 'required': True,
-         'help_text': 'The hostname of the database to connect to.'},
-        {'name': 'port', 'cli_type_name': 'integer', 'required': True,
-         'help_text': 'The port number the database is listening on.'},
-        {'name': 'username', 'required': True,
-         'help_text': 'The username to log in as.'}
+        {
+            'name': 'hostname',
+            'required': True,
+            'help_text': 'The hostname of the database to connect to.',
+        },
+        {
+            'name': 'port',
+            'cli_type_name': 'integer',
+            'required': True,
+            'help_text': 'The port number the database is listening on.',
+        },
+        {
+            'name': 'username',
+            'required': True,
+            'help_text': 'The username to log in as.',
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
         rds = self._session.create_client(
-            'rds', parsed_globals.region, parsed_globals.endpoint_url,
-            parsed_globals.verify_ssl
+            'rds',
+            parsed_globals.region,
+            parsed_globals.endpoint_url,
+            parsed_globals.verify_ssl,
         )
         token = rds.generate_db_auth_token(
             DBHostname=parsed_args.hostname,
             Port=parsed_args.port,
-            DBUsername=parsed_args.username
+            DBUsername=parsed_args.username,
         )
         uni_print(token)
         uni_print('\n')
diff -pruN 2.23.6-1/awscli/customizations/rekognition.py 2.31.35-1/awscli/customizations/rekognition.py
--- 2.23.6-1/awscli/customizations/rekognition.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/rekognition.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,15 @@
 
 from awscli.customizations.arguments import NestedBlobArgumentHoister
 
-IMAGE_FILE_DOCSTRING = ('<p>The content of the image to be uploaded. '
-                        'To specify the content of a local file use the '
-                        'fileb:// prefix. '
-                        'Example: fileb://image.png</p>')
-IMAGE_DOCSTRING_ADDENDUM = ('<p>To specify a local file use <code>--%s</code> '
-                            'instead.</p>')
+IMAGE_FILE_DOCSTRING = (
+    '<p>The content of the image to be uploaded. '
+    'To specify the content of a local file use the '
+    'fileb:// prefix. '
+    'Example: fileb://image.png</p>'
+)
+IMAGE_DOCSTRING_ADDENDUM = (
+    '<p>To specify a local file use <code>--%s</code> instead.</p>'
+)
 
 
 FILE_PARAMETER_UPDATES = {
@@ -32,10 +35,13 @@ def register_rekognition_detect_labels(c
     for target, new_param in FILE_PARAMETER_UPDATES.items():
         operation, old_param = target.rsplit('.', 1)
         doc_string_addendum = IMAGE_DOCSTRING_ADDENDUM % new_param
-        cli.register('building-argument-table.rekognition.%s' % operation,
-                     NestedBlobArgumentHoister(
-                         source_arg=old_param,
-                         source_arg_blob_member='Bytes',
-                         new_arg=new_param,
-                         new_arg_doc_string=IMAGE_FILE_DOCSTRING,
-                         doc_string_addendum=doc_string_addendum))
+        cli.register(
+            'building-argument-table.rekognition.%s' % operation,
+            NestedBlobArgumentHoister(
+                source_arg=old_param,
+                source_arg_blob_member='Bytes',
+                new_arg=new_param,
+                new_arg_doc_string=IMAGE_FILE_DOCSTRING,
+                doc_string_addendum=doc_string_addendum,
+            ),
+        )
diff -pruN 2.23.6-1/awscli/customizations/removals.py 2.31.35-1/awscli/customizations/removals.py
--- 2.23.6-1/awscli/customizations/removals.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/removals.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,6 +18,7 @@ This customization removes commands that
 yet fully supported.
 
 """
+
 import logging
 from functools import partial
 
@@ -26,52 +27,88 @@ LOG = logging.getLogger(__name__)
 
 def register_removals(event_handler):
     cmd_remover = CommandRemover(event_handler)
-    cmd_remover.remove(on_event='building-command-table.ses',
-                       remove_commands=['delete-verified-email-address',
-                                        'list-verified-email-addresses',
-                                        'verify-email-address'])
-    cmd_remover.remove(on_event='building-command-table.ec2',
-                       remove_commands=['import-instance', 'import-volume'])
-    cmd_remover.remove(on_event='building-command-table.emr',
-                       remove_commands=['run-job-flow', 'describe-job-flows',
-                                        'add-job-flow-steps',
-                                        'terminate-job-flows',
-                                        'list-bootstrap-actions',
-                                        'list-instance-groups',
-                                        'set-termination-protection',
-                                        'set-keep-job-flow-alive-when-no-steps',
-                                        'set-visible-to-all-users',
-                                        'set-unhealthy-node-replacement'])
-    cmd_remover.remove(on_event='building-command-table.kinesis',
-                       remove_commands=['subscribe-to-shard'])
-    cmd_remover.remove(on_event='building-command-table.lexv2-runtime',
-                         remove_commands=['start-conversation'])
-    cmd_remover.remove(on_event='building-command-table.lambda',
-                         remove_commands=['invoke-with-response-stream'])
-    cmd_remover.remove(on_event='building-command-table.sagemaker-runtime',
-                         remove_commands=['invoke-endpoint-with-response-stream'])
-    cmd_remover.remove(on_event='building-command-table.bedrock-runtime',
-                         remove_commands=['invoke-model-with-response-stream',
-                                          'converse-stream'])
-    cmd_remover.remove(on_event='building-command-table.bedrock-agent-runtime',
-                         remove_commands=['invoke-agent',
-                                          'invoke-flow',
-                                          'invoke-inline-agent',
-                                          'optimize-prompt',
-                                          'retrieve-and-generate-stream'])
-    cmd_remover.remove(on_event='building-command-table.qbusiness',
-                        remove_commands=['chat'])
-    cmd_remover.remove(on_event='building-command-table.iotsitewise',
-                        remove_commands=['invoke-assistant'])
+    cmd_remover.remove(
+        on_event='building-command-table.ses',
+        remove_commands=[
+            'delete-verified-email-address',
+            'list-verified-email-addresses',
+            'verify-email-address',
+        ],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.ec2',
+        remove_commands=['import-instance', 'import-volume'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.emr',
+        remove_commands=[
+            'run-job-flow',
+            'describe-job-flows',
+            'add-job-flow-steps',
+            'terminate-job-flows',
+            'list-bootstrap-actions',
+            'list-instance-groups',
+            'set-termination-protection',
+            'set-keep-job-flow-alive-when-no-steps',
+            'set-visible-to-all-users',
+            'set-unhealthy-node-replacement',
+        ],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.kinesis',
+        remove_commands=['subscribe-to-shard'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.lexv2-runtime',
+        remove_commands=['start-conversation'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.lambda',
+        remove_commands=['invoke-with-response-stream'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.sagemaker-runtime',
+        remove_commands=['invoke-endpoint-with-response-stream'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.bedrock-runtime',
+        remove_commands=[
+            'invoke-model-with-bidirectional-stream',
+            'invoke-model-with-response-stream',
+            'converse-stream',
+        ],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.bedrock-agent-runtime',
+        remove_commands=[
+            'invoke-agent',
+            'invoke-flow',
+            'invoke-inline-agent',
+            'optimize-prompt',
+            'retrieve-and-generate-stream',
+        ],
+    )
+    cmd_remover.remove(on_event='building-command-table.bedrock-agentcore',
+                         remove_commands=['invoke-code-interpreter'])
+    cmd_remover.remove(
+        on_event='building-command-table.qbusiness', remove_commands=['chat']
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.iotsitewise',
+        remove_commands=['invoke-assistant'],
+    )
+    cmd_remover.remove(
+        on_event='building-command-table.logs',
+        remove_commands=['get-log-object'],
+    )
 
 
-class CommandRemover(object):
+class CommandRemover:
     def __init__(self, events):
         self._events = events
 
     def remove(self, on_event, remove_commands):
-        self._events.register(on_event,
-                              self._create_remover(remove_commands))
+        self._events.register(on_event, self._create_remover(remove_commands))
 
     def _create_remover(self, commands_to_remove):
         return partial(_remove_commands, commands_to_remove=commands_to_remove)
@@ -84,5 +121,6 @@ def _remove_commands(command_table, comm
             LOG.debug("Removing operation: %s", command)
             del command_table[command]
         except KeyError:
-            LOG.warning("Attempting to delete command that does not exist: %s",
-                        command)
+            LOG.warning(
+                "Attempting to delete command that does not exist: %s", command
+            )
diff -pruN 2.23.6-1/awscli/customizations/route53.py 2.31.35-1/awscli/customizations/route53.py
--- 2.23.6-1/awscli/customizations/route53.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/route53.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,7 +18,8 @@ def register_create_hosted_zone_doc_fix(
     # has the necessary documentation.
     cli.register(
         'doc-option.route53.create-hosted-zone.hosted-zone-config',
-        add_private_zone_note)
+        add_private_zone_note,
+    )
 
 
 def add_private_zone_note(help_command, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/s3/comparator.py 2.31.35-1/awscli/customizations/s3/comparator.py
--- 2.23.6-1/awscli/customizations/s3/comparator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/comparator.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,23 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import logging
-from awscli.compat import advance_iterator
 
+from awscli.compat import advance_iterator
 
 LOG = logging.getLogger(__name__)
 
 
-class Comparator(object):
+class Comparator:
     """
     This class performs all of the comparisons behind the sync operation
     """
-    def __init__(self, file_at_src_and_dest_sync_strategy,
-                 file_not_at_dest_sync_strategy,
-                 file_not_at_src_sync_strategy):
 
+    def __init__(
+        self,
+        file_at_src_and_dest_sync_strategy,
+        file_not_at_dest_sync_strategy,
+        file_not_at_src_sync_strategy,
+    ):
         self._sync_strategy = file_at_src_and_dest_sync_strategy
         self._not_at_dest_sync_strategy = file_not_at_dest_sync_strategy
         self._not_at_src_sync_strategy = file_not_at_src_sync_strategy
@@ -102,26 +105,42 @@ class Comparator(object):
                 elif compare_keys == 'less_than':
                     src_take = True
                     dest_take = False
-                    should_sync = self._not_at_dest_sync_strategy.determine_should_sync(src_file, None)
+                    should_sync = (
+                        self._not_at_dest_sync_strategy.determine_should_sync(
+                            src_file, None
+                        )
+                    )
                     if should_sync:
                         yield src_file
 
                 elif compare_keys == 'greater_than':
                     src_take = False
                     dest_take = True
-                    should_sync = self._not_at_src_sync_strategy.determine_should_sync(None, dest_file)
+                    should_sync = (
+                        self._not_at_src_sync_strategy.determine_should_sync(
+                            None, dest_file
+                        )
+                    )
                     if should_sync:
                         yield dest_file
 
             elif (not src_done) and dest_done:
                 src_take = True
-                should_sync = self._not_at_dest_sync_strategy.determine_should_sync(src_file, None)
+                should_sync = (
+                    self._not_at_dest_sync_strategy.determine_should_sync(
+                        src_file, None
+                    )
+                )
                 if should_sync:
                     yield src_file
 
             elif src_done and (not dest_done):
                 dest_take = True
-                should_sync = self._not_at_src_sync_strategy.determine_should_sync(None, dest_file)
+                should_sync = (
+                    self._not_at_src_sync_strategy.determine_should_sync(
+                        None, dest_file
+                    )
+                )
                 if should_sync:
                     yield dest_file
             else:
@@ -135,10 +154,10 @@ class Comparator(object):
 
         src_comp_key = src_file.compare_key
         dest_comp_key = dest_file.compare_key
-        if (src_comp_key == dest_comp_key):
+        if src_comp_key == dest_comp_key:
             return 'equal'
 
-        elif (src_comp_key < dest_comp_key):
+        elif src_comp_key < dest_comp_key:
             return 'less_than'
 
         else:
diff -pruN 2.23.6-1/awscli/customizations/s3/factory.py 2.31.35-1/awscli/customizations/s3/factory.py
--- 2.23.6-1/awscli/customizations/s3/factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,18 +15,20 @@ import logging
 import awscrt.s3
 from botocore.client import Config
 from botocore.httpsession import DEFAULT_CA_BUNDLE
-from s3transfer.manager import TransferManager
 from s3transfer.crt import (
-    acquire_crt_s3_process_lock, create_s3_crt_client,
-    BotocoreCRTRequestSerializer, CRTTransferManager,
-    BotocoreCRTCredentialsWrapper
+    BotocoreCRTCredentialsWrapper,
+    BotocoreCRTRequestSerializer,
+    CRTTransferManager,
+    acquire_crt_s3_process_lock,
+    create_s3_crt_client,
 )
+from s3transfer.manager import TransferManager
 
 from awscli.compat import urlparse
 from awscli.customizations.s3 import constants
-from awscli.customizations.s3.transferconfig import \
-    create_transfer_config_from_runtime_config
-
+from awscli.customizations.s3.transferconfig import (
+    create_transfer_config_from_runtime_config,
+)
 
 LOGGER = logging.getLogger(__name__)
 
@@ -36,9 +38,7 @@ class ClientFactory:
         self._session = session
 
     def create_client(self, params, is_source_client=False):
-        create_client_kwargs = {
-            'verify': params['verify_ssl']
-        }
+        create_client_kwargs = {'verify': params['verify_ssl']}
         if params.get('sse') == 'aws:kms':
             create_client_kwargs['config'] = Config(signature_version='s3v4')
         region = params['region']
@@ -61,22 +61,24 @@ class TransferManagerFactory:
         self._session = session
         self._botocore_client_factory = ClientFactory(self._session)
 
-    def create_transfer_manager(self, params, runtime_config,
-                                botocore_client=None):
+    def create_transfer_manager(
+        self, params, runtime_config, botocore_client=None
+    ):
         client_type = self._compute_transfer_client_type(
-            params, runtime_config)
+            params, runtime_config
+        )
         if client_type == constants.CRT_TRANSFER_CLIENT:
             return self._create_crt_transfer_manager(params, runtime_config)
         else:
             return self._create_classic_transfer_manager(
-                params, runtime_config, botocore_client)
+                params, runtime_config, botocore_client
+            )
 
     def _compute_transfer_client_type(self, params, runtime_config):
         if params.get('paths_type') == 's3s3':
             return constants.CLASSIC_TRANSFER_CLIENT
         preferred_transfer_client = runtime_config.get(
-            'preferred_transfer_client',
-            constants.AUTO_RESOLVE_TRANSFER_CLIENT
+            'preferred_transfer_client', constants.AUTO_RESOLVE_TRANSFER_CLIENT
         )
         if preferred_transfer_client == constants.AUTO_RESOLVE_TRANSFER_CLIENT:
             return self._resolve_transfer_client_type_for_system()
@@ -92,7 +94,7 @@ class TransferManagerFactory:
             is_running = self._is_crt_client_running_in_other_aws_cli_process()
             LOGGER.debug(
                 'S3 CRT client running in different AWS CLI process: %s',
-                is_running
+                is_running,
             )
             if not is_running:
                 transfer_client_type = constants.CRT_TRANSFER_CLIENT
@@ -114,7 +116,7 @@ class TransferManagerFactory:
         self._acquire_crt_s3_process_lock()
         return CRTTransferManager(
             self._create_crt_client(params, runtime_config),
-            self._create_crt_request_serializer(params)
+            self._create_crt_request_serializer(params),
         )
 
     def _create_crt_client(self, params, runtime_config):
@@ -133,8 +135,18 @@ class TransferManagerFactory:
             create_crt_client_kwargs['part_size'] = multipart_chunksize
         if params.get('sign_request', True):
             crt_credentials_provider = self._get_crt_credentials_provider()
-            create_crt_client_kwargs[
-                'crt_credentials_provider'] = crt_credentials_provider
+            create_crt_client_kwargs['crt_credentials_provider'] = (
+                crt_credentials_provider
+            )
+        fio_options = {}
+        if (val := runtime_config.get('should_stream')) is not None:
+            fio_options['should_stream'] = val
+        if (val := runtime_config.get('disk_throughput')) is not None:
+            # Convert bytes to gigabits.
+            fio_options['disk_throughput_gbps'] = val * 8 / 1_000_000_000
+        if (val := runtime_config.get('direct_io')) is not None:
+            fio_options['direct_io'] = val
+        create_crt_client_kwargs['fio_options'] = fio_options
 
         return create_s3_crt_client(**create_crt_client_kwargs)
 
@@ -144,23 +156,27 @@ class TransferManagerFactory:
             {
                 'region_name': self._resolve_region(params),
                 'endpoint_url': params.get('endpoint_url'),
-            }
+            },
         )
 
-    def _create_classic_transfer_manager(self, params, runtime_config,
-                                         client=None):
+    def _create_classic_transfer_manager(
+        self, params, runtime_config, client=None
+    ):
         if client is None:
             client = self._botocore_client_factory.create_client(params)
         transfer_config = create_transfer_config_from_runtime_config(
-            runtime_config)
-        transfer_config.max_in_memory_upload_chunks = \
+            runtime_config
+        )
+        transfer_config.max_in_memory_upload_chunks = (
             self._MAX_IN_MEMORY_CHUNKS
-        transfer_config.max_in_memory_download_chunks = \
+        )
+        transfer_config.max_in_memory_download_chunks = (
             self._MAX_IN_MEMORY_CHUNKS
+        )
         LOGGER.debug(
             "Using a multipart threshold of %s and a part size of %s",
             transfer_config.multipart_threshold,
-            transfer_config.multipart_chunksize
+            transfer_config.multipart_chunksize,
         )
         return TransferManager(client, transfer_config)
 
diff -pruN 2.23.6-1/awscli/customizations/s3/fileformat.py 2.31.35-1/awscli/customizations/s3/fileformat.py
--- 2.23.6-1/awscli/customizations/s3/fileformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/fileformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@
 import os
 
 
-class FileFormat(object):
+class FileFormat:
     def format(self, src, dest, parameters):
         """
         This function formats the source and destination
@@ -53,9 +53,12 @@ class FileFormat(object):
         #     will take on the name the user specified in the
         #     command line.
         dest_path, use_src_name = format_table[dest_type](dest_path, dir_op)
-        files = {'src': {'path': src_path, 'type': src_type},
-                 'dest': {'path': dest_path, 'type': dest_type},
-                 'dir_op': dir_op, 'use_src_name': use_src_name}
+        files = {
+            'src': {'path': src_path, 'type': src_type},
+            'dest': {'path': dest_path, 'type': dest_type},
+            'dir_op': dir_op,
+            'use_src_name': use_src_name,
+        }
         return files
 
     def local_format(self, path, dir_op):
diff -pruN 2.23.6-1/awscli/customizations/s3/filegenerator.py 2.31.35-1/awscli/customizations/s3/filegenerator.py
--- 2.23.6-1/awscli/customizations/s3/filegenerator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/filegenerator.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,22 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import sys
 import stat
+import sys
 
+from botocore.exceptions import ClientError
 from dateutil.parser import parse
 from dateutil.tz import tzlocal
-from botocore.exceptions import ClientError
 
-from awscli.customizations.s3.utils import find_bucket_key, get_file_stat
-from awscli.customizations.s3.utils import BucketLister, create_warning, \
-    find_dest_path_comp_key, EPOCH_TIME
 from awscli.compat import queue
+from awscli.customizations.s3.utils import (
+    EPOCH_TIME,
+    BucketLister,
+    create_warning,
+    find_bucket_key,
+    find_dest_path_comp_key,
+    get_file_stat,
+)
 
 _open = open
 
@@ -57,19 +62,20 @@ def is_readable(path):
     if os.path.isdir(path):
         try:
             os.listdir(path)
-        except (OSError, IOError):
+        except OSError:
             return False
     else:
         try:
             with _open(path, 'r') as fd:
                 pass
-        except (OSError, IOError):
+        except OSError:
             return False
     return True
 
 
 # This class is provided primarily to provide a detailed error message.
 
+
 class FileDecodingError(Exception):
     """Raised when there was an issue decoding the file."""
 
@@ -84,17 +90,26 @@ class FileDecodingError(Exception):
         self.file_name = filename
         self.error_message = (
             'There was an error trying to decode the the file %s in '
-            'directory "%s". \n%s' % (repr(self.file_name),
-                                      self.directory,
-                                      self.ADVICE)
+            'directory "%s". \n%s'
+            % (repr(self.file_name), self.directory, self.ADVICE)
         )
         super(FileDecodingError, self).__init__(self.error_message)
 
 
-class FileStat(object):
-    def __init__(self, src, dest=None, compare_key=None, size=None,
-                 last_update=None, src_type=None, dest_type=None,
-                 operation_name=None, response_data=None):
+class FileStat:
+    def __init__(
+        self,
+        src,
+        dest=None,
+        compare_key=None,
+        size=None,
+        last_update=None,
+        src_type=None,
+        dest_type=None,
+        operation_name=None,
+        response_data=None,
+        etag=None,
+    ):
         self.src = src
         self.dest = dest
         self.compare_key = compare_key
@@ -104,9 +119,10 @@ class FileStat(object):
         self.dest_type = dest_type
         self.operation_name = operation_name
         self.response_data = response_data
+        self.etag = etag
 
 
-class FileGenerator(object):
+class FileGenerator:
     """
     This is a class the creates a generator to yield files based on information
     returned from the ``FileFormat`` class.  It is universal in the sense that
@@ -114,8 +130,16 @@ class FileGenerator(object):
     under the same common prefix.  The generator yields corresponding
     ``FileInfo`` objects to send to a ``Comparator`` or ``S3Handler``.
     """
-    def __init__(self, client, operation_name, follow_symlinks=True,
-                 page_size=None, result_queue=None, request_parameters=None):
+
+    def __init__(
+        self,
+        client,
+        operation_name,
+        follow_symlinks=True,
+        page_size=None,
+        result_queue=None,
+        request_parameters=None,
+    ):
         self._client = client
         self.operation_name = operation_name
         self.follow_symlinks = follow_symlinks
@@ -141,9 +165,12 @@ class FileGenerator(object):
         for src_path, extra_information in file_iterator:
             dest_path, compare_key = find_dest_path_comp_key(files, src_path)
             file_stat_kwargs = {
-                'src': src_path, 'dest': dest_path, 'compare_key': compare_key,
-                'src_type': src_type, 'dest_type': dest_type,
-                'operation_name': self.operation_name
+                'src': src_path,
+                'dest': dest_path,
+                'compare_key': compare_key,
+                'src_type': src_type,
+                'dest_type': dest_type,
+                'operation_name': self.operation_name,
             }
             self._inject_extra_information(file_stat_kwargs, extra_information)
             yield FileStat(**file_stat_kwargs)
@@ -152,6 +179,7 @@ class FileGenerator(object):
         src_type = file_stat_kwargs['src_type']
         file_stat_kwargs['size'] = extra_information['Size']
         file_stat_kwargs['last_update'] = extra_information['LastModified']
+        file_stat_kwargs['etag'] = extra_information.get('ETag')
 
         # S3 objects require the response data retrieved from HeadObject
         # and ListObject
@@ -188,7 +216,8 @@ class FileGenerator(object):
                 names = []
                 for name in listdir_names:
                     if not self.should_ignore_file_with_decoding_warnings(
-                            path, name):
+                        path, name
+                    ):
                         file_path = join(path, name)
                         if isdir(file_path):
                             name = name + os.path.sep
@@ -225,8 +254,9 @@ class FileGenerator(object):
             warning = create_warning(
                 path=path,
                 error_message="File has an invalid timestamp. Passing epoch "
-                              "time as timestamp.",
-                skip_file=False)
+                "time as timestamp.",
+                skip_file=False,
+            )
             self.result_queue.put(warning)
             return EPOCH_TIME
         return update_time
@@ -251,8 +281,9 @@ class FileGenerator(object):
         """
         if not isinstance(filename, str):
             decoding_error = FileDecodingError(dirname, filename)
-            warning = create_warning(repr(filename),
-                                     decoding_error.error_message)
+            warning = create_warning(
+                repr(filename), decoding_error.error_message
+            )
             self.result_queue.put(warning)
             return True
         path = os.path.join(dirname, filename)
@@ -290,10 +321,14 @@ class FileGenerator(object):
             self.result_queue.put(warning)
             return True
         if is_special_file(path):
-            warning = create_warning(path,
-                                     ("File is character special device, "
-                                      "block special device, FIFO, or "
-                                      "socket."))
+            warning = create_warning(
+                path,
+                (
+                    "File is character special device, "
+                    "block special device, FIFO, or "
+                    "socket."
+                ),
+            )
             self.result_queue.put(warning)
             return True
         if not is_readable(path):
@@ -318,9 +353,12 @@ class FileGenerator(object):
         else:
             lister = BucketLister(self._client)
             extra_args = self.request_parameters.get('ListObjectsV2', {})
-            for key in lister.list_objects(bucket=bucket, prefix=prefix,
-                                           page_size=self.page_size,
-                                           extra_args=extra_args):
+            for key in lister.list_objects(
+                bucket=bucket,
+                prefix=prefix,
+                page_size=self.page_size,
+                extra_args=extra_args,
+            ):
                 source_path, response_data = key
                 if response_data['Size'] == 0 and source_path.endswith('/'):
                     if self.operation_name == 'delete':
@@ -366,4 +404,5 @@ class FileGenerator(object):
         response['Size'] = int(response.pop('ContentLength'))
         last_update = parse(response['LastModified'])
         response['LastModified'] = last_update.astimezone(tzlocal())
+        response['ETag'] = response.pop('ETag', None)
         return s3_path, response
diff -pruN 2.23.6-1/awscli/customizations/s3/fileinfo.py 2.31.35-1/awscli/customizations/s3/fileinfo.py
--- 2.23.6-1/awscli/customizations/s3/fileinfo.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/fileinfo.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,7 @@
 # language governing permissions and limitations under the License.
 
 
-class FileInfo(object):
+class FileInfo:
     """This class contains important details related to performing a task.
 
     It can perform operations such as ``upload``, ``download``, ``copy``,
@@ -38,11 +38,24 @@ class FileInfo(object):
         from the list of a ListObjects or the response from a HeadObject. It
         will only be filled if the task was generated from an S3 bucket.
     """
-    def __init__(self, src, dest=None, compare_key=None, size=None,
-                 last_update=None, src_type=None, dest_type=None,
-                 operation_name=None, client=None, parameters=None,
-                 source_client=None, is_stream=False,
-                 associated_response_data=None):
+
+    def __init__(
+        self,
+        src,
+        dest=None,
+        compare_key=None,
+        size=None,
+        last_update=None,
+        src_type=None,
+        dest_type=None,
+        operation_name=None,
+        client=None,
+        parameters=None,
+        source_client=None,
+        is_stream=False,
+        associated_response_data=None,
+        etag=None,
+    ):
         self.src = src
         self.src_type = src_type
         self.operation_name = operation_name
@@ -59,6 +72,7 @@ class FileInfo(object):
         self.source_client = source_client
         self.is_stream = is_stream
         self.associated_response_data = associated_response_data
+        self.etag = etag
 
     def is_glacier_compatible(self):
         """Determines if a file info object is glacier compatible
@@ -82,8 +96,11 @@ class FileInfo(object):
     def _is_glacier_object(self, response_data):
         glacier_storage_classes = ['GLACIER', 'DEEP_ARCHIVE']
         if response_data:
-            if response_data.get('StorageClass') in glacier_storage_classes \
-                    and not self._is_restored(response_data):
+            if response_data.get(
+                'StorageClass'
+            ) in glacier_storage_classes and not self._is_restored(
+                response_data
+            ):
                 return True
         return False
 
diff -pruN 2.23.6-1/awscli/customizations/s3/fileinfobuilder.py 2.31.35-1/awscli/customizations/s3/fileinfobuilder.py
--- 2.23.6-1/awscli/customizations/s3/fileinfobuilder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/fileinfobuilder.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,13 +13,15 @@
 from awscli.customizations.s3.fileinfo import FileInfo
 
 
-class FileInfoBuilder(object):
+class FileInfoBuilder:
     """
     This class takes a ``FileBase`` object's attributes and generates
     a ``FileInfo`` object so that the operation can be performed.
     """
-    def __init__(self, client, source_client=None,
-                 parameters = None, is_stream=False):
+
+    def __init__(
+        self, client, source_client=None, parameters=None, is_stream=False
+    ):
         self._client = client
         self._source_client = client
         if source_client is not None:
@@ -45,6 +47,7 @@ class FileInfoBuilder(object):
         file_info_attr['parameters'] = self._parameters
         file_info_attr['is_stream'] = self._is_stream
         file_info_attr['associated_response_data'] = file_base.response_data
+        file_info_attr['etag'] = file_base.etag
 
         # This is a bit quirky. The below conditional hinges on the --delete
         # flag being set, which only occurs during a sync command. The source
@@ -57,8 +60,9 @@ class FileInfoBuilder(object):
         # issue by swapping clients only in the case of a sync delete since
         # swapping which client is used in the delete function would then break
         # moving under s3v4.
-        if (file_base.operation_name == 'delete' and
-                self._parameters.get('delete')):
+        if file_base.operation_name == 'delete' and self._parameters.get(
+            'delete'
+        ):
             file_info_attr['client'] = self._source_client
             file_info_attr['source_client'] = self._client
         else:
diff -pruN 2.23.6-1/awscli/customizations/s3/filters.py 2.31.35-1/awscli/customizations/s3/filters.py
--- 2.23.6-1/awscli/customizations/s3/filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import logging
 import fnmatch
+import logging
 import os
 
 from awscli.customizations.s3.utils import split_s3_bucket_key
 
-
 LOG = logging.getLogger(__name__)
 
 
@@ -28,24 +27,26 @@ def create_filter(parameters):
         cli_filters = parameters['filters']
         real_filters = []
         for filter_type, filter_pattern in cli_filters:
-            real_filters.append((filter_type.lstrip('-'),
-                                 filter_pattern))
+            real_filters.append((filter_type.lstrip('-'), filter_pattern))
         source_location = parameters['src']
         if source_location.startswith('s3://'):
             # This gives us (bucket, keyname) and we want
             # the bucket to be the root dir.
-            src_rootdir = _get_s3_root(source_location,
-                                       parameters['dir_op'])
+            src_rootdir = _get_s3_root(source_location, parameters['dir_op'])
         else:
-            src_rootdir = _get_local_root(parameters['src'], parameters['dir_op'])
+            src_rootdir = _get_local_root(
+                parameters['src'], parameters['dir_op']
+            )
 
         destination_location = parameters['dest']
         if destination_location.startswith('s3://'):
-            dst_rootdir = _get_s3_root(parameters['dest'],
-                                       parameters['dir_op'])
+            dst_rootdir = _get_s3_root(
+                parameters['dest'], parameters['dir_op']
+            )
         else:
-            dst_rootdir = _get_local_root(parameters['dest'],
-                                          parameters['dir_op'])
+            dst_rootdir = _get_local_root(
+                parameters['dest'], parameters['dir_op']
+            )
 
         return Filter(real_filters, src_rootdir, dst_rootdir)
     else:
@@ -73,10 +74,11 @@ def _get_local_root(source_location, dir
     return rootdir
 
 
-class Filter(object):
+class Filter:
     """
     This is a universal exclude/include filter.
     """
+
     def __init__(self, patterns, rootdir, dst_rootdir):
         """
         :var patterns: A list of patterns. A pattern consists of a list
@@ -100,7 +102,8 @@ class Filter(object):
         full_patterns = []
         for pattern in original_patterns:
             full_patterns.append(
-                (pattern[0], os.path.join(rootdir, pattern[1])))
+                (pattern[0], os.path.join(rootdir, pattern[1]))
+            )
         return full_patterns
 
     def call(self, file_infos):
@@ -122,11 +125,16 @@ class Filter(object):
                 current_file_status = self._match_pattern(pattern, file_info)
                 if current_file_status is not None:
                     file_status = current_file_status
-                dst_current_file_status = self._match_pattern(dst_pattern, file_info)
+                dst_current_file_status = self._match_pattern(
+                    dst_pattern, file_info
+                )
                 if dst_current_file_status is not None:
                     file_status = dst_current_file_status
-            LOG.debug("=%s final filtered status, should_include: %s",
-                      file_path, file_status[1])
+            LOG.debug(
+                "=%s final filtered status, should_include: %s",
+                file_path,
+                file_status[1],
+            )
             if file_status[1]:
                 yield file_info
 
@@ -141,13 +149,15 @@ class Filter(object):
         is_match = fnmatch.fnmatch(file_path, path_pattern)
         if is_match and pattern_type == 'include':
             file_status = (file_info, True)
-            LOG.debug("%s matched include filter: %s",
-                        file_path, path_pattern)
+            LOG.debug("%s matched include filter: %s", file_path, path_pattern)
         elif is_match and pattern_type == 'exclude':
             file_status = (file_info, False)
-            LOG.debug("%s matched exclude filter: %s",
-                        file_path, path_pattern)
+            LOG.debug("%s matched exclude filter: %s", file_path, path_pattern)
         else:
-            LOG.debug("%s did not match %s filter: %s",
-                        file_path, pattern_type, path_pattern)
+            LOG.debug(
+                "%s did not match %s filter: %s",
+                file_path,
+                pattern_type,
+                path_pattern,
+            )
         return file_status
diff -pruN 2.23.6-1/awscli/customizations/s3/results.py 2.31.35-1/awscli/customizations/s3/results.py
--- 2.23.6-1/awscli/customizations/s3/results.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/results.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,24 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from __future__ import division
 import logging
 import sys
 import threading
 import time
-from collections import namedtuple
-from collections import defaultdict
+from collections import defaultdict, namedtuple
 
-from s3transfer.exceptions import CancelledError
-from s3transfer.exceptions import FatalError
+from s3transfer.exceptions import CancelledError, FatalError
 from s3transfer.subscribers import BaseSubscriber
 
-from awscli.compat import queue, ensure_text_type
-from awscli.customizations.s3.utils import human_readable_size
-from awscli.customizations.utils import uni_print
-from awscli.customizations.s3.utils import WarningResult
+from awscli.compat import ensure_text_type, queue
 from awscli.customizations.s3.subscribers import OnDoneFilteredSubscriber
-
+from awscli.customizations.s3.utils import WarningResult, human_readable_size
+from awscli.customizations.utils import uni_print
 
 LOGGER = logging.getLogger(__name__)
 
@@ -51,8 +46,8 @@ def _create_new_result_cls(name, extra_f
 QueuedResult = _create_new_result_cls('QueuedResult', ['total_transfer_size'])
 
 ProgressResult = _create_new_result_cls(
-    'ProgressResult', ['bytes_transferred', 'total_transfer_size',
-                       'timestamp'])
+    'ProgressResult', ['bytes_transferred', 'total_transfer_size', 'timestamp']
+)
 
 SuccessResult = _create_new_result_cls('SuccessResult')
 
@@ -65,13 +60,15 @@ ErrorResult = namedtuple('ErrorResult',
 CtrlCResult = _create_new_result_cls('CtrlCResult', base_cls=ErrorResult)
 
 CommandResult = namedtuple(
-    'CommandResult', ['num_tasks_failed', 'num_tasks_warned'])
+    'CommandResult', ['num_tasks_failed', 'num_tasks_warned']
+)
 
 FinalTotalSubmissionsResult = namedtuple(
-    'FinalTotalSubmissionsResult', ['total_submissions'])
+    'FinalTotalSubmissionsResult', ['total_submissions']
+)
 
 
-class ShutdownThreadRequest(object):
+class ShutdownThreadRequest:
     pass
 
 
@@ -91,7 +88,7 @@ class QueuedResultSubscriber(BaseResultS
                 transfer_type=self._transfer_type,
                 src=self._src,
                 dest=self._dest,
-                total_transfer_size=self._size
+                total_transfer_size=self._size,
             )
         )
 
@@ -105,7 +102,7 @@ class ProgressResultSubscriber(BaseResul
                 dest=self._dest,
                 bytes_transferred=bytes_transferred,
                 timestamp=time.time(),
-                total_transfer_size=self._size
+                total_transfer_size=self._size,
             )
         )
 
@@ -137,14 +134,16 @@ class DoneResultSubscriber(BaseResultSub
             )
 
 
-class BaseResultHandler(object):
+class BaseResultHandler:
     """Base handler class to be called in the ResultProcessor"""
+
     def __call__(self, result):
         raise NotImplementedError('__call__()')
 
 
 class ResultRecorder(BaseResultHandler):
     """Records and track transfer statistics based on results received"""
+
     def __init__(self):
         self.bytes_transferred = 0
         self.bytes_failed_to_transfer = 0
@@ -175,26 +174,27 @@ class ResultRecorder(BaseResultHandler):
 
     def expected_totals_are_final(self):
         return (
-            self.final_expected_files_transferred ==
-            self.expected_files_transferred
+            self.final_expected_files_transferred
+            == self.expected_files_transferred
         )
 
     def __call__(self, result):
         """Record the result of an individual Result object"""
         self._result_handler_map.get(type(result), self._record_noop)(
-            result=result)
+            result=result
+        )
 
     def _get_ongoing_dict_key(self, result):
         if not isinstance(result, BaseResult):
             raise ValueError(
                 'Any result using _get_ongoing_dict_key must subclass from '
-                'BaseResult. Provided result is of type: %s' % type(result)
+                f'BaseResult. Provided result is of type: {type(result)}'
             )
         key_parts = []
         for result_property in [result.transfer_type, result.src, result.dest]:
             if result_property is not None:
                 key_parts.append(ensure_text_type(result_property))
-        return u':'.join(key_parts)
+        return ':'.join(key_parts)
 
     def _pop_result_from_ongoing_dicts(self, result):
         ongoing_key = self._get_ongoing_dict_key(result)
@@ -210,8 +210,9 @@ class ResultRecorder(BaseResultHandler):
         if self.start_time is None:
             self.start_time = time.time()
         total_transfer_size = result.total_transfer_size
-        self._ongoing_total_sizes[
-            self._get_ongoing_dict_key(result)] = total_transfer_size
+        self._ongoing_total_sizes[self._get_ongoing_dict_key(result)] = (
+            total_transfer_size
+        )
         # The total transfer size can be None if we do not know the size
         # immediately so do not add to the total right away.
         if total_transfer_size:
@@ -221,8 +222,9 @@ class ResultRecorder(BaseResultHandler):
     def _record_progress_result(self, result, **kwargs):
         bytes_transferred = result.bytes_transferred
         self._update_ongoing_transfer_size_if_unknown(result)
-        self._ongoing_progress[
-            self._get_ongoing_dict_key(result)] += bytes_transferred
+        self._ongoing_progress[self._get_ongoing_dict_key(result)] += (
+            bytes_transferred
+        )
         self.bytes_transferred += bytes_transferred
         # Since the start time is captured in the result recorder and
         # capture timestamps in the subscriber, there is a chance that if
@@ -233,7 +235,8 @@ class ResultRecorder(BaseResultHandler):
         # negative progress being displayed or zero division occurring.
         if result.timestamp > self.start_time:
             self.bytes_transfer_speed = self.bytes_transferred / (
-                result.timestamp - self.start_time)
+                result.timestamp - self.start_time
+            )
 
     def _update_ongoing_transfer_size_if_unknown(self, result):
         # This is a special case when the transfer size was previous not
@@ -270,7 +273,8 @@ class ResultRecorder(BaseResultHandler):
         # the count for bytes transferred by just adding on the remaining bytes
         # that did not get transferred.
         total_progress, total_file_size = self._pop_result_from_ongoing_dicts(
-            result)
+            result
+        )
         if total_file_size is not None:
             progress_left = total_file_size - total_progress
             self.bytes_failed_to_transfer += progress_left
@@ -299,27 +303,26 @@ class ResultPrinter(BaseResultHandler):
     FILE_PROGRESS_FORMAT = (
         'Completed {files_completed} file(s) with ' + _FILES_REMAINING
     )
-    SUCCESS_FORMAT = (
-        u'{transfer_type}: {transfer_location}'
-    )
-    DRY_RUN_FORMAT = u'(dryrun) ' + SUCCESS_FORMAT
-    FAILURE_FORMAT = (
-        u'{transfer_type} failed: {transfer_location} {exception}'
-    )
+    SUCCESS_FORMAT = '{transfer_type}: {transfer_location}'
+    DRY_RUN_FORMAT = '(dryrun) ' + SUCCESS_FORMAT
+    FAILURE_FORMAT = '{transfer_type} failed: {transfer_location} {exception}'
     # TODO: Add "warning: " prefix once all commands are converted to using
     # result printer and remove "warning: " prefix from ``create_warning``.
-    WARNING_FORMAT = (
-        u'{message}'
-    )
-    ERROR_FORMAT = (
-        u'fatal error: {exception}'
-    )
+    WARNING_FORMAT = '{message}'
+    ERROR_FORMAT = 'fatal error: {exception}'
     CTRL_C_MSG = 'cancelled: ctrl-c received'
 
-    SRC_DEST_TRANSFER_LOCATION_FORMAT = u'{src} to {dest}'
-    SRC_TRANSFER_LOCATION_FORMAT = u'{src}'
+    SRC_DEST_TRANSFER_LOCATION_FORMAT = '{src} to {dest}'
+    SRC_TRANSFER_LOCATION_FORMAT = '{src}'
 
-    def __init__(self, result_recorder, out_file=None, error_file=None):
+    def __init__(
+        self,
+        result_recorder,
+        out_file=None,
+        error_file=None,
+        frequency=0,
+        oneline=True,
+    ):
         """Prints status of ongoing transfer
 
         :type result_recorder: ResultRecorder
@@ -332,9 +335,22 @@ class ResultPrinter(BaseResultHandler):
         :type error_file: file-like obj
         :param error_file: Location to write warnings and errors.
             By default, the location is sys.stderr.
+
+        :type frequency: int
+        :param frequency: Frequency in seconds to print progress.
+            By default, prints progress in real time.
+
+        :type oneline: boolean
+        :param oneline: Indicates if progress should be on one line.
+            By default, prints progress on one line, overwriting previous
+            progress message. Setting to False prints each progress
+            message on a new line.
+
         """
         self._result_recorder = result_recorder
         self._out_file = out_file
+        self._frequency = frequency
+        self._first = True
         if self._out_file is None:
             self._out_file = sys.stdout
         self._error_file = error_file
@@ -349,14 +365,16 @@ class ResultPrinter(BaseResultHandler):
             ErrorResult: self._print_error,
             CtrlCResult: self._print_ctrl_c,
             DryRunResult: self._print_dry_run,
-            FinalTotalSubmissionsResult:
-                self._clear_progress_if_no_more_expected_transfers,
+            FinalTotalSubmissionsResult: self._clear_progress_if_no_more_expected_transfers,
         }
+        self._now = time.time()
+        self._oneline = oneline
 
     def __call__(self, result):
         """Print the progress of the ongoing transfer based on a result"""
         self._result_handler_map.get(type(result), self._print_noop)(
-            result=result)
+            result=result
+        )
 
     def _print_noop(self, **kwargs):
         # If the result does not have a handler, then do nothing with it.
@@ -365,7 +383,7 @@ class ResultPrinter(BaseResultHandler):
     def _print_dry_run(self, result, **kwargs):
         statement = self.DRY_RUN_FORMAT.format(
             transfer_type=result.transfer_type,
-            transfer_location=self._get_transfer_location(result)
+            transfer_location=self._get_transfer_location(result),
         )
         statement = self._adjust_statement_padding(statement)
         self._print_to_out_file(statement)
@@ -373,7 +391,7 @@ class ResultPrinter(BaseResultHandler):
     def _print_success(self, result, **kwargs):
         success_statement = self.SUCCESS_FORMAT.format(
             transfer_type=result.transfer_type,
-            transfer_location=self._get_transfer_location(result)
+            transfer_location=self._get_transfer_location(result),
         )
         success_statement = self._adjust_statement_padding(success_statement)
         self._print_to_out_file(success_statement)
@@ -383,7 +401,7 @@ class ResultPrinter(BaseResultHandler):
         failure_statement = self.FAILURE_FORMAT.format(
             transfer_type=result.transfer_type,
             transfer_location=self._get_transfer_location(result),
-            exception=result.exception
+            exception=result.exception,
         )
         failure_statement = self._adjust_statement_padding(failure_statement)
         self._print_to_error_file(failure_statement)
@@ -397,7 +415,8 @@ class ResultPrinter(BaseResultHandler):
 
     def _print_error(self, result, **kwargs):
         self._flush_error_statement(
-            self.ERROR_FORMAT.format(exception=result.exception))
+            self.ERROR_FORMAT.format(exception=result.exception)
+        )
 
     def _print_ctrl_c(self, result, **kwargs):
         self._flush_error_statement(self.CTRL_C_MSG)
@@ -410,7 +429,8 @@ class ResultPrinter(BaseResultHandler):
         if result.dest is None:
             return self.SRC_TRANSFER_LOCATION_FORMAT.format(src=result.src)
         return self.SRC_DEST_TRANSFER_LOCATION_FORMAT.format(
-            src=result.src, dest=result.dest)
+            src=result.src, dest=result.dest
+        )
 
     def _redisplay_progress(self):
         # Reset to zero because done statements are printed with new lines
@@ -423,57 +443,89 @@ class ResultPrinter(BaseResultHandler):
         if self._has_remaining_progress():
             self._print_progress()
 
+    def _should_print_progress_now(self):
+        """Check to see if should print progres based on frequency.
+
+        Will only return true if its the first time or enough time has elapsed
+        since the last time printing.
+        """
+
+        if (
+            self._first
+            or (self._frequency == 0)
+            or (time.time() - self._now >= self._frequency)
+        ):
+            self._now = time.time()
+            self._first = False
+            return True
+
+        return False
+
     def _print_progress(self, **kwargs):
         # Get all of the statistics in the correct form.
+
         remaining_files = self._get_expected_total(
-            str(self._result_recorder.expected_files_transferred -
-                self._result_recorder.files_transferred)
+            str(
+                self._result_recorder.expected_files_transferred
+                - self._result_recorder.files_transferred
+            )
         )
 
         # Create the display statement.
         if self._result_recorder.expected_bytes_transferred > 0:
             bytes_completed = human_readable_size(
-                self._result_recorder.bytes_transferred +
-                self._result_recorder.bytes_failed_to_transfer
+                self._result_recorder.bytes_transferred
+                + self._result_recorder.bytes_failed_to_transfer
             )
             expected_bytes_completed = self._get_expected_total(
                 human_readable_size(
-                    self._result_recorder.expected_bytes_transferred))
+                    self._result_recorder.expected_bytes_transferred
+                )
+            )
 
-            transfer_speed = human_readable_size(
-                self._result_recorder.bytes_transfer_speed) + '/s'
+            transfer_speed = (
+                human_readable_size(self._result_recorder.bytes_transfer_speed)
+                + '/s'
+            )
             progress_statement = self.BYTE_PROGRESS_FORMAT.format(
                 bytes_completed=bytes_completed,
                 expected_bytes_completed=expected_bytes_completed,
                 transfer_speed=transfer_speed,
-                remaining_files=remaining_files
+                remaining_files=remaining_files,
             )
         else:
             # We're not expecting any bytes to be transferred, so we should
             # only print of information about number of files transferred.
             progress_statement = self.FILE_PROGRESS_FORMAT.format(
                 files_completed=self._result_recorder.files_transferred,
-                remaining_files=remaining_files
+                remaining_files=remaining_files,
             )
 
         if not self._result_recorder.expected_totals_are_final():
             progress_statement += self._STILL_CALCULATING_TOTALS
 
-        # Make sure that it overrides any previous progress bar.
-        progress_statement = self._adjust_statement_padding(
-                progress_statement, ending_char='\r')
-        # We do not want to include the carriage return in this calculation
-        # as progress length is used for determining whitespace padding.
-        # So we subtract one off of the length.
-        self._progress_length = len(progress_statement) - 1
-
+        if self._oneline:
+            # Make sure that it overrides any previous progress bar.
+            progress_statement = self._adjust_statement_padding(
+                progress_statement, ending_char='\r'
+            )
+            # We do not want to include the carriage return in this calculation
+            # as progress length is used for determining whitespace padding.
+            # So we subtract one off of the length.
+            self._progress_length = len(progress_statement) - 1
+        else:
+            progress_statement = self._adjust_statement_padding(
+                progress_statement, ending_char='\n'
+            )
         # Print the progress out.
-        self._print_to_out_file(progress_statement)
+        if self._should_print_progress_now():
+            self._print_to_out_file(progress_statement)
 
     def _get_expected_total(self, expected_total):
         if not self._result_recorder.expected_totals_are_final():
             return self._ESTIMATED_EXPECTED_TOTAL.format(
-                expected_total=expected_total)
+                expected_total=expected_total
+            )
         return expected_total
 
     def _adjust_statement_padding(self, print_statement, ending_char='\n'):
@@ -500,12 +552,14 @@ class ResultPrinter(BaseResultHandler):
 
 class NoProgressResultPrinter(ResultPrinter):
     """A result printer that doesn't print progress"""
+
     def _print_progress(self, **kwargs):
         pass
 
 
 class OnlyShowErrorsResultPrinter(ResultPrinter):
     """A result printer that only prints out errors"""
+
     def _print_progress(self, **kwargs):
         pass
 
@@ -537,7 +591,8 @@ class ResultProcessor(threading.Thread):
                 if isinstance(result, ShutdownThreadRequest):
                     LOGGER.debug(
                         'Shutdown request received in result processing '
-                        'thread, shutting down result thread.')
+                        'thread, shutting down result thread.'
+                    )
                     break
                 if self._result_handlers_enabled:
                     self._process_result(result)
@@ -558,10 +613,14 @@ class ResultProcessor(threading.Thread):
             except Exception as e:
                 LOGGER.debug(
                     'Error processing result %s with handler %s: %s',
-                    result, result_handler, e, exc_info=True)
+                    result,
+                    result_handler,
+                    e,
+                    exc_info=True,
+                )
 
 
-class CommandResultRecorder(object):
+class CommandResultRecorder:
     def __init__(self, result_queue, result_recorder, result_processor):
         """Records the result for an entire command
 
@@ -600,7 +659,7 @@ class CommandResultRecorder(object):
         """
         return CommandResult(
             self._result_recorder.files_failed + self._result_recorder.errors,
-            self._result_recorder.files_warned
+            self._result_recorder.files_warned,
         )
 
     def notify_total_submissions(self, total):
@@ -612,8 +671,11 @@ class CommandResultRecorder(object):
 
     def __exit__(self, exc_type, exc_value, *args):
         if exc_type:
-            LOGGER.debug('Exception caught during command execution: %s',
-                         exc_value, exc_info=True)
+            LOGGER.debug(
+                'Exception caught during command execution: %s',
+                exc_value,
+                exc_info=True,
+            )
             self.result_queue.put(ErrorResult(exception=exc_value))
             self.shutdown()
             return True
diff -pruN 2.23.6-1/awscli/customizations/s3/s3.py 2.31.35-1/awscli/customizations/s3/s3.py
--- 2.23.6-1/awscli/customizations/s3/s3.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/s3.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,11 +12,20 @@
 # language governing permissions and limitations under the License.
 from awscli.customizations import utils
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.s3.subcommands import ListCommand, WebsiteCommand, \
-    CpCommand, MvCommand, RmCommand, SyncCommand, MbCommand, RbCommand, \
-    PresignCommand
-from awscli.customizations.s3.syncstrategy.register import \
-    register_sync_strategies
+from awscli.customizations.s3.subcommands import (
+    CpCommand,
+    ListCommand,
+    MbCommand,
+    MvCommand,
+    PresignCommand,
+    RbCommand,
+    RmCommand,
+    SyncCommand,
+    WebsiteCommand,
+)
+from awscli.customizations.s3.syncstrategy.register import (
+    register_sync_strategies,
+)
 
 
 def awscli_initialize(cli):
diff -pruN 2.23.6-1/awscli/customizations/s3/s3handler.py 2.31.35-1/awscli/customizations/s3/s3handler.py
--- 2.23.6-1/awscli/customizations/s3/s3handler.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/s3handler.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,40 +15,51 @@ import os
 
 from s3transfer.manager import TransferManager
 
-from awscli.customizations.s3.utils import (
-    human_readable_size, MAX_UPLOAD_SIZE, find_bucket_key, relative_path,
-    create_warning, NonSeekableStream)
-from awscli.customizations.s3.transferconfig import \
-    create_transfer_config_from_runtime_config
-from awscli.customizations.s3.results import QueuedResultSubscriber
-from awscli.customizations.s3.results import ProgressResultSubscriber
-from awscli.customizations.s3.results import DoneResultSubscriber
-from awscli.customizations.s3.results import QueuedResult
-from awscli.customizations.s3.results import SuccessResult
-from awscli.customizations.s3.results import FailureResult
-from awscli.customizations.s3.results import DryRunResult
-from awscli.customizations.s3.results import ResultRecorder
-from awscli.customizations.s3.results import ResultPrinter
-from awscli.customizations.s3.results import OnlyShowErrorsResultPrinter
-from awscli.customizations.s3.results import NoProgressResultPrinter
-from awscli.customizations.s3.results import ResultProcessor
-from awscli.customizations.s3.results import CommandResultRecorder
-from awscli.customizations.s3.utils import RequestParamsMapper
-from awscli.customizations.s3.utils import StdoutBytesWriter
+from awscli.compat import get_binary_stdin
+from awscli.customizations.s3.results import (
+    CommandResultRecorder,
+    DoneResultSubscriber,
+    DryRunResult,
+    FailureResult,
+    NoProgressResultPrinter,
+    OnlyShowErrorsResultPrinter,
+    ProgressResultSubscriber,
+    QueuedResult,
+    QueuedResultSubscriber,
+    ResultPrinter,
+    ResultProcessor,
+    ResultRecorder,
+    SuccessResult,
+)
 from awscli.customizations.s3.subscribers import (
-    ProvideSizeSubscriber, ProvideUploadContentTypeSubscriber,
+    CopyPropsSubscriberFactory,
+    DeleteCopySourceObjectSubscriber,
+    DeleteSourceFileSubscriber,
+    DeleteSourceObjectSubscriber,
+    DirectoryCreatorSubscriber,
+    ProvideETagSubscriber,
     ProvideLastModifiedTimeSubscriber,
-    CopyPropsSubscriberFactory, DirectoryCreatorSubscriber,
-    DeleteSourceFileSubscriber, DeleteSourceObjectSubscriber,
-    DeleteCopySourceObjectSubscriber
+    ProvideSizeSubscriber,
+    ProvideUploadContentTypeSubscriber,
+)
+from awscli.customizations.s3.transferconfig import (
+    create_transfer_config_from_runtime_config,
+)
+from awscli.customizations.s3.utils import (
+    MAX_UPLOAD_SIZE,
+    NonSeekableStream,
+    RequestParamsMapper,
+    StdoutBytesWriter,
+    create_warning,
+    find_bucket_key,
+    human_readable_size,
+    relative_path,
 )
-from awscli.compat import get_binary_stdin
-
 
 LOGGER = logging.getLogger(__name__)
 
 
-class S3TransferHandlerFactory(object):
+class S3TransferHandlerFactory:
     def __init__(self, cli_params):
         """Factory for S3TransferHandlers
 
@@ -73,12 +84,15 @@ class S3TransferHandlerFactory(object):
         result_processor_handlers = [result_recorder]
         self._add_result_printer(result_recorder, result_processor_handlers)
         result_processor = ResultProcessor(
-            result_queue, result_processor_handlers)
+            result_queue, result_processor_handlers
+        )
         command_result_recorder = CommandResultRecorder(
-            result_queue, result_recorder, result_processor)
+            result_queue, result_recorder, result_processor
+        )
 
         return S3TransferHandler(
-            transfer_manager, self._cli_params, command_result_recorder)
+            transfer_manager, self._cli_params, command_result_recorder
+        )
 
     def _add_result_printer(self, result_recorder, result_processor_handlers):
         if self._cli_params.get('quiet'):
@@ -90,11 +104,15 @@ class S3TransferHandlerFactory(object):
         elif not self._cli_params.get('progress'):
             result_printer = NoProgressResultPrinter(result_recorder)
         else:
-            result_printer = ResultPrinter(result_recorder)
+            result_printer = ResultPrinter(
+                result_recorder,
+                frequency=self._cli_params.get('progress_frequency'),
+                oneline=not self._cli_params.get('progress_multiline'),
+            )
         result_processor_handlers.append(result_printer)
 
 
-class S3TransferHandler(object):
+class S3TransferHandler:
     def __init__(self, transfer_manager, cli_params, result_command_recorder):
         """Backend for performing S3 transfers
 
@@ -119,8 +137,9 @@ class S3TransferHandler(object):
         self._result_command_recorder = result_command_recorder
 
         submitter_args = (
-            self._transfer_manager, self._result_command_recorder.result_queue,
-            cli_params
+            self._transfer_manager,
+            self._result_command_recorder.result_queue,
+            cli_params,
         )
         self._submitters = [
             UploadStreamRequestSubmitter(*submitter_args),
@@ -129,7 +148,7 @@ class S3TransferHandler(object):
             DownloadRequestSubmitter(*submitter_args),
             CopyRequestSubmitter(*submitter_args),
             DeleteRequestSubmitter(*submitter_args),
-            LocalDeleteRequestSubmitter(*submitter_args)
+            LocalDeleteRequestSubmitter(*submitter_args),
         ]
 
     def call(self, fileinfos):
@@ -153,11 +172,12 @@ class S3TransferHandler(object):
                                 total_submissions += 1
                             break
                 self._result_command_recorder.notify_total_submissions(
-                    total_submissions)
+                    total_submissions
+                )
         return self._result_command_recorder.get_command_result()
 
 
-class BaseTransferRequestSubmitter(object):
+class BaseTransferRequestSubmitter:
     REQUEST_MAPPER_METHOD = None
 
     def __init__(self, transfer_manager, result_queue, cli_params):
@@ -219,7 +239,8 @@ class BaseTransferRequestSubmitter(objec
             self.REQUEST_MAPPER_METHOD(extra_args, self._cli_params)
         if not self._cli_params.get('dryrun'):
             return self._submit_transfer_request(
-                fileinfo, extra_args, self._get_subscribers(fileinfo))
+                fileinfo, extra_args, self._get_subscribers(fileinfo)
+            )
         else:
             self._submit_dryrun(fileinfo)
 
@@ -227,14 +248,14 @@ class BaseTransferRequestSubmitter(objec
         subscribers = []
         result_subscriber_kwargs = self._get_result_subscriber_kwargs(fileinfo)
         self._add_provide_size_subscriber(subscribers, fileinfo)
+        subscribers.append(ProvideETagSubscriber(fileinfo.etag))
         subscribers.append(QueuedResultSubscriber(**result_subscriber_kwargs))
         self._add_additional_subscribers(subscribers, fileinfo)
         subscribers.extend(
             [
                 ProgressResultSubscriber(**result_subscriber_kwargs),
-                DoneResultSubscriber(**result_subscriber_kwargs)
+                DoneResultSubscriber(**result_subscriber_kwargs),
             ]
-
         )
         return subscribers
 
@@ -251,8 +272,9 @@ class BaseTransferRequestSubmitter(objec
     def _submit_dryrun(self, fileinfo):
         transfer_type = self._get_transfer_type(fileinfo)
         src, dest = self._format_src_dest(fileinfo)
-        self._result_queue.put(DryRunResult(
-            transfer_type=transfer_type, src=src, dest=dest))
+        self._result_queue.put(
+            DryRunResult(transfer_type=transfer_type, src=src, dest=dest)
+        )
 
     def _add_provide_size_subscriber(self, subscribers, fileinfo):
         subscribers.append(ProvideSizeSubscriber(fileinfo.size))
@@ -280,27 +302,27 @@ class BaseTransferRequestSubmitter(objec
         return []
 
     def _should_inject_content_type(self):
-        return (
-            self._cli_params.get('guess_mime_type') and
-            not self._cli_params.get('content_type')
-        )
+        return self._cli_params.get(
+            'guess_mime_type'
+        ) and not self._cli_params.get('content_type')
 
     def _warn_glacier(self, fileinfo):
         if not self._cli_params.get('force_glacier_transfer'):
             if not fileinfo.is_glacier_compatible():
                 LOGGER.debug(
                     'Encountered glacier object s3://%s. Not performing '
-                    '%s on object.' % (fileinfo.src, fileinfo.operation_name))
+                    '%s on object.' % (fileinfo.src, fileinfo.operation_name)
+                )
                 if not self._cli_params.get('ignore_glacier_warnings'):
                     warning = create_warning(
-                        's3://'+fileinfo.src,
+                        's3://' + fileinfo.src,
                         'Object is of storage class GLACIER. Unable to '
                         'perform %s operations on GLACIER objects. You must '
                         'restore the object to be able to perform the '
                         'operation. See aws s3 %s help for additional '
                         'parameter options to ignore or force these '
-                        'transfers.' %
-                        (fileinfo.operation_name, fileinfo.operation_name)
+                        'transfers.'
+                        % (fileinfo.operation_name, fileinfo.operation_name),
                     )
                     self._result_queue.put(warning)
                 return True
@@ -311,10 +333,12 @@ class BaseTransferRequestSubmitter(objec
         # need to take that into account when checking for a parent prefix.
         parent_prefix = '..' + os.path.sep
         escapes_cwd = os.path.normpath(fileinfo.compare_key).startswith(
-            parent_prefix)
+            parent_prefix
+        )
         if escapes_cwd:
             warning = create_warning(
-                fileinfo.compare_key, "File references a parent directory.")
+                fileinfo.compare_key, "File references a parent directory."
+            )
             self._result_queue.put(warning)
             return True
         return False
@@ -353,8 +377,11 @@ class UploadRequestSubmitter(BaseTransfe
         bucket, key = find_bucket_key(fileinfo.dest)
         filein = self._get_filein(fileinfo)
         return self._transfer_manager.upload(
-            fileobj=filein, bucket=bucket, key=key,
-            extra_args=extra_args, subscribers=subscribers
+            fileobj=filein,
+            bucket=bucket,
+            key=key,
+            extra_args=extra_args,
+            subscribers=subscribers,
         )
 
     def _get_filein(self, fileinfo):
@@ -366,11 +393,13 @@ class UploadRequestSubmitter(BaseTransfe
     def _warn_if_too_large(self, fileinfo):
         if getattr(fileinfo, 'size') and fileinfo.size > MAX_UPLOAD_SIZE:
             file_path = relative_path(fileinfo.src)
-            warning_message = (
-                "File %s exceeds s3 upload limit of %s." % (
-                    file_path, human_readable_size(MAX_UPLOAD_SIZE)))
+            warning_message = "File %s exceeds s3 upload limit of %s." % (
+                file_path,
+                human_readable_size(MAX_UPLOAD_SIZE),
+            )
             warning = create_warning(
-                file_path, warning_message, skip_file=False)
+                file_path, warning_message, skip_file=False
+            )
             self._result_queue.put(warning)
 
     def _format_src_dest(self, fileinfo):
@@ -387,18 +416,25 @@ class DownloadRequestSubmitter(BaseTrans
 
     def _add_additional_subscribers(self, subscribers, fileinfo):
         subscribers.append(DirectoryCreatorSubscriber())
-        subscribers.append(ProvideLastModifiedTimeSubscriber(
-            fileinfo.last_update, self._result_queue))
+        subscribers.append(
+            ProvideLastModifiedTimeSubscriber(
+                fileinfo.last_update, self._result_queue
+            )
+        )
         if self._cli_params.get('is_move', False):
-            subscribers.append(DeleteSourceObjectSubscriber(
-                fileinfo.source_client))
+            subscribers.append(
+                DeleteSourceObjectSubscriber(fileinfo.source_client)
+            )
 
     def _submit_transfer_request(self, fileinfo, extra_args, subscribers):
         bucket, key = find_bucket_key(fileinfo.src)
         fileout = self._get_fileout(fileinfo)
         return self._transfer_manager.download(
-            fileobj=fileout, bucket=bucket, key=key,
-            extra_args=extra_args, subscribers=subscribers
+            fileobj=fileout,
+            bucket=bucket,
+            key=key,
+            extra_args=extra_args,
+            subscribers=subscribers,
         )
 
     def _get_fileout(self, fileinfo):
@@ -423,8 +459,9 @@ class CopyRequestSubmitter(BaseTransferR
         if not self._cli_params.get('metadata_directive'):
             self._add_copy_props_subscribers(subscribers, fileinfo)
         if self._cli_params.get('is_move', False):
-            subscribers.append(DeleteCopySourceObjectSubscriber(
-                fileinfo.source_client))
+            subscribers.append(
+                DeleteCopySourceObjectSubscriber(fileinfo.source_client)
+            )
 
     def _add_copy_props_subscribers(self, subscribers, fileinfo):
         copy_props_factory = CopyPropsSubscriberFactory(
@@ -439,9 +476,12 @@ class CopyRequestSubmitter(BaseTransferR
         source_bucket, source_key = find_bucket_key(fileinfo.src)
         copy_source = {'Bucket': source_bucket, 'Key': source_key}
         return self._transfer_manager.copy(
-            bucket=bucket, key=key, copy_source=copy_source,
-            extra_args=extra_args, subscribers=subscribers,
-            source_client=fileinfo.source_client
+            bucket=bucket,
+            key=key,
+            copy_source=copy_source,
+            extra_args=extra_args,
+            subscribers=subscribers,
+            source_client=fileinfo.source_client,
         )
 
     def _get_warning_handlers(self):
@@ -455,9 +495,8 @@ class CopyRequestSubmitter(BaseTransferR
 
 class UploadStreamRequestSubmitter(UploadRequestSubmitter):
     def can_submit(self, fileinfo):
-        return (
-            fileinfo.operation_name == 'upload' and
-            self._cli_params.get('is_stream')
+        return fileinfo.operation_name == 'upload' and self._cli_params.get(
+            'is_stream'
         )
 
     def _add_provide_size_subscriber(self, subscribers, fileinfo):
@@ -478,9 +517,8 @@ class UploadStreamRequestSubmitter(Uploa
 
 class DownloadStreamRequestSubmitter(DownloadRequestSubmitter):
     def can_submit(self, fileinfo):
-        return (
-            fileinfo.operation_name == 'download' and
-            self._cli_params.get('is_stream')
+        return fileinfo.operation_name == 'download' and self._cli_params.get(
+            'is_stream'
         )
 
     def _add_provide_size_subscriber(self, subscribers, fileinfo):
@@ -500,8 +538,9 @@ class DeleteRequestSubmitter(BaseTransfe
     REQUEST_MAPPER_METHOD = RequestParamsMapper.map_delete_object_params
 
     def can_submit(self, fileinfo):
-        return fileinfo.operation_name == 'delete' and \
-            fileinfo.src_type == 's3'
+        return (
+            fileinfo.operation_name == 'delete' and fileinfo.src_type == 's3'
+        )
 
     def _add_provide_size_subscriber(self, subscribers, fileinfo):
         pass
@@ -509,8 +548,11 @@ class DeleteRequestSubmitter(BaseTransfe
     def _submit_transfer_request(self, fileinfo, extra_args, subscribers):
         bucket, key = find_bucket_key(fileinfo.src)
         return self._transfer_manager.delete(
-            bucket=bucket, key=key, extra_args=extra_args,
-            subscribers=subscribers)
+            bucket=bucket,
+            key=key,
+            extra_args=extra_args,
+            subscribers=subscribers,
+        )
 
     def _format_src_dest(self, fileinfo):
         return self._format_s3_path(fileinfo.src), None
@@ -520,8 +562,10 @@ class LocalDeleteRequestSubmitter(BaseTr
     REQUEST_MAPPER_METHOD = None
 
     def can_submit(self, fileinfo):
-        return fileinfo.operation_name == 'delete' and \
-            fileinfo.src_type == 'local'
+        return (
+            fileinfo.operation_name == 'delete'
+            and fileinfo.src_type == 'local'
+        )
 
     def _submit_transfer_request(self, fileinfo, extra_args, subscribers):
         # This is quirky but essentially instead of relying on a built-in
@@ -537,19 +581,15 @@ class LocalDeleteRequestSubmitter(BaseTr
         # deleting a local file only happens for sync --delete downloads and
         # is very fast compared to all of the other types of transfers.
         src, dest = self._format_src_dest(fileinfo)
-        result_kwargs = {
-            'transfer_type': 'delete',
-            'src': src,
-            'dest': dest
-        }
+        result_kwargs = {'transfer_type': 'delete', 'src': src, 'dest': dest}
         try:
-            self._result_queue.put(QueuedResult(
-                total_transfer_size=0, **result_kwargs))
+            self._result_queue.put(
+                QueuedResult(total_transfer_size=0, **result_kwargs)
+            )
             os.remove(fileinfo.src)
             self._result_queue.put(SuccessResult(**result_kwargs))
         except Exception as e:
-            self._result_queue.put(
-                FailureResult(exception=e, **result_kwargs))
+            self._result_queue.put(FailureResult(exception=e, **result_kwargs))
         finally:
             # Return True to indicate that the transfer was submitted
             return True
diff -pruN 2.23.6-1/awscli/customizations/s3/subcommands.py 2.31.35-1/awscli/customizations/s3/subcommands.py
--- 2.23.6-1/awscli/customizations/s3/subcommands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/subcommands.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,146 +10,216 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import logging
+import os
 import sys
 
 from botocore.client import Config
-from botocore.utils import is_s3express_bucket, ensure_boolean
+from botocore.useragent import register_feature_id
+from botocore.utils import ensure_boolean, is_s3express_bucket
 from dateutil.parser import parse
 from dateutil.tz import tzlocal
 
 from awscli.compat import queue
 from awscli.customizations.commands import BasicCommand
+from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.s3 import transferconfig
 from awscli.customizations.s3.comparator import Comparator
 from awscli.customizations.s3.factory import (
-    ClientFactory, TransferManagerFactory
+    ClientFactory,
+    TransferManagerFactory,
 )
-from awscli.customizations.s3.fileinfobuilder import FileInfoBuilder
 from awscli.customizations.s3.fileformat import FileFormat
 from awscli.customizations.s3.filegenerator import FileGenerator
 from awscli.customizations.s3.fileinfo import FileInfo
+from awscli.customizations.s3.fileinfobuilder import FileInfoBuilder
 from awscli.customizations.s3.filters import create_filter
 from awscli.customizations.s3.s3handler import S3TransferHandlerFactory
-from awscli.customizations.s3.utils import find_bucket_key, AppendFilter, \
-    find_dest_path_comp_key, human_readable_size, \
-    RequestParamsMapper, split_s3_bucket_key, block_unsupported_resources, \
-    S3PathResolver
+from awscli.customizations.s3.syncstrategy.base import (
+    MissingFileSync,
+    NeverSync,
+    SizeAndLastModifiedSync,
+)
+from awscli.customizations.s3.utils import (
+    AppendFilter,
+    RequestParamsMapper,
+    S3PathResolver,
+    block_unsupported_resources,
+    find_bucket_key,
+    find_dest_path_comp_key,
+    human_readable_size,
+    split_s3_bucket_key,
+)
 from awscli.customizations.utils import uni_print
-from awscli.customizations.s3.syncstrategy.base import MissingFileSync, \
-    SizeAndLastModifiedSync, NeverSync
-from awscli.customizations.s3 import transferconfig
-from awscli.customizations.exceptions import ParamValidationError
-
 
 LOGGER = logging.getLogger(__name__)
 
 
-RECURSIVE = {'name': 'recursive', 'action': 'store_true', 'dest': 'dir_op',
-             'help_text': (
-                 "Command is performed on all files or objects "
-                 "under the specified directory or prefix.")}
-
-
-HUMAN_READABLE = {'name': 'human-readable', 'action': 'store_true',
-                  'help_text': "Displays file sizes in human readable format."}
-
-
-SUMMARIZE = {'name': 'summarize', 'action': 'store_true',
-             'help_text': (
-                 "Displays summary information "
-                 "(number of objects, total size).")}
-
-
-DRYRUN = {'name': 'dryrun', 'action': 'store_true',
-          'help_text': (
-              "Displays the operations that would be performed using the "
-              "specified command without actually running them.")}
-
-
-QUIET = {'name': 'quiet', 'action': 'store_true',
-         'help_text': (
-             "Does not display the operations performed from the specified "
-             "command.")}
-
-
-FORCE = {'name': 'force', 'action': 'store_true',
-         'help_text': (
-             "Deletes all objects in the bucket including the bucket itself. "
-             "Note that versioned objects will not be deleted in this "
-             "process which would cause the bucket deletion to fail because "
-             "the bucket would not be empty. To delete versioned "
-             "objects use the ``s3api delete-object`` command with "
-             "the ``--version-id`` parameter.")}
-
-
-FOLLOW_SYMLINKS = {'name': 'follow-symlinks', 'action': 'store_true',
-                   'default': True, 'group_name': 'follow_symlinks',
-                   'help_text': (
-                       "Symbolic links are followed "
-                       "only when uploading to S3 from the local filesystem. "
-                       "Note that S3 does not support symbolic links, so the "
-                       "contents of the link target are uploaded under the "
-                       "name of the link. When neither ``--follow-symlinks`` "
-                       "nor ``--no-follow-symlinks`` is specified, the default "
-                       "is to follow symlinks.")}
-
-
-NO_FOLLOW_SYMLINKS = {'name': 'no-follow-symlinks', 'action': 'store_false',
-                      'dest': 'follow_symlinks', 'default': True,
-                      'group_name': 'follow_symlinks'}
-
-
-NO_GUESS_MIME_TYPE = {'name': 'no-guess-mime-type', 'action': 'store_false',
-                      'dest': 'guess_mime_type', 'default': True,
-                      'help_text': (
-                          "Do not try to guess the mime type for "
-                          "uploaded files.  By default the mime type of a "
-                          "file is guessed when it is uploaded.")}
-
-
-CONTENT_TYPE = {'name': 'content-type',
-                'help_text': (
-                    "Specify an explicit content type for this operation.  "
-                    "This value overrides any guessed mime types.")}
-
-
-EXCLUDE = {'name': 'exclude', 'action': AppendFilter, 'nargs': 1,
-           'dest': 'filters',
-           'help_text': (
-               "Exclude all files or objects from the command that matches "
-               "the specified pattern.")}
-
-
-INCLUDE = {'name': 'include', 'action': AppendFilter, 'nargs': 1,
-           'dest': 'filters',
-           'help_text': (
-               "Don't exclude files or objects "
-               "in the command that match the specified pattern. "
-               'See <a href="http://docs.aws.amazon.com/cli/latest/reference'
-               '/s3/index.html#use-of-exclude-and-include-filters">Use of '
-               'Exclude and Include Filters</a> for details.')}
-
-
-ACL = {'name': 'acl',
-       'choices': ['private', 'public-read', 'public-read-write',
-                   'authenticated-read', 'aws-exec-read', 'bucket-owner-read',
-                   'bucket-owner-full-control', 'log-delivery-write'],
-       'help_text': (
-           "Sets the ACL for the object when the command is "
-           "performed.  If you use this parameter you must have the "
-           '"s3:PutObjectAcl" permission included in the list of actions '
-           "for your IAM policy. "
-           "Only accepts values of ``private``, ``public-read``, "
-           "``public-read-write``, ``authenticated-read``, ``aws-exec-read``, "
-           "``bucket-owner-read``, ``bucket-owner-full-control`` and "
-           "``log-delivery-write``. "
-           'See <a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/'
-           'acl-overview.html#canned-acl">Canned ACL</a> for details')}
+RECURSIVE = {
+    'name': 'recursive',
+    'action': 'store_true',
+    'dest': 'dir_op',
+    'help_text': (
+        "Command is performed on all files or objects "
+        "under the specified directory or prefix."
+    ),
+}
+
+
+HUMAN_READABLE = {
+    'name': 'human-readable',
+    'action': 'store_true',
+    'help_text': "Displays file sizes in human readable format.",
+}
+
+
+SUMMARIZE = {
+    'name': 'summarize',
+    'action': 'store_true',
+    'help_text': (
+        "Displays summary information (number of objects, total size)."
+    ),
+}
+
+
+DRYRUN = {
+    'name': 'dryrun',
+    'action': 'store_true',
+    'help_text': (
+        "Displays the operations that would be performed using the "
+        "specified command without actually running them."
+    ),
+}
+
+
+QUIET = {
+    'name': 'quiet',
+    'action': 'store_true',
+    'help_text': (
+        "Does not display the operations performed from the specified command."
+    ),
+}
+
+
+FORCE = {
+    'name': 'force',
+    'action': 'store_true',
+    'help_text': (
+        "Deletes all objects in the bucket including the bucket itself. "
+        "Note that versioned objects will not be deleted in this "
+        "process which would cause the bucket deletion to fail because "
+        "the bucket would not be empty. To delete versioned "
+        "objects use the ``s3api delete-object`` command with "
+        "the ``--version-id`` parameter."
+    ),
+}
+
+
+FOLLOW_SYMLINKS = {
+    'name': 'follow-symlinks',
+    'action': 'store_true',
+    'default': True,
+    'group_name': 'follow_symlinks',
+    'help_text': (
+        "Symbolic links are followed "
+        "only when uploading to S3 from the local filesystem. "
+        "Note that S3 does not support symbolic links, so the "
+        "contents of the link target are uploaded under the "
+        "name of the link. When neither ``--follow-symlinks`` "
+        "nor ``--no-follow-symlinks`` is specified, the default "
+        "is to follow symlinks."
+    ),
+}
+
+
+NO_FOLLOW_SYMLINKS = {
+    'name': 'no-follow-symlinks',
+    'action': 'store_false',
+    'dest': 'follow_symlinks',
+    'default': True,
+    'group_name': 'follow_symlinks',
+}
+
+
+NO_GUESS_MIME_TYPE = {
+    'name': 'no-guess-mime-type',
+    'action': 'store_false',
+    'dest': 'guess_mime_type',
+    'default': True,
+    'help_text': (
+        "Do not try to guess the mime type for "
+        "uploaded files.  By default the mime type of a "
+        "file is guessed when it is uploaded."
+    ),
+}
+
+
+CONTENT_TYPE = {
+    'name': 'content-type',
+    'help_text': (
+        "Specify an explicit content type for this operation.  "
+        "This value overrides any guessed mime types."
+    ),
+}
+
+
+EXCLUDE = {
+    'name': 'exclude',
+    'action': AppendFilter,
+    'nargs': 1,
+    'dest': 'filters',
+    'help_text': (
+        "Exclude all files or objects from the command that matches "
+        "the specified pattern."
+    ),
+}
+
+
+INCLUDE = {
+    'name': 'include',
+    'action': AppendFilter,
+    'nargs': 1,
+    'dest': 'filters',
+    'help_text': (
+        "Don't exclude files or objects "
+        "in the command that match the specified pattern. "
+        'See <a href="http://docs.aws.amazon.com/cli/latest/reference'
+        '/s3/index.html#use-of-exclude-and-include-filters">Use of '
+        'Exclude and Include Filters</a> for details.'
+    ),
+}
+
+
+ACL = {
+    'name': 'acl',
+    'choices': [
+        'private',
+        'public-read',
+        'public-read-write',
+        'authenticated-read',
+        'aws-exec-read',
+        'bucket-owner-read',
+        'bucket-owner-full-control',
+        'log-delivery-write',
+    ],
+    'help_text': (
+        "Sets the ACL for the object when the command is "
+        "performed.  If you use this parameter you must have the "
+        '"s3:PutObjectAcl" permission included in the list of actions '
+        "for your IAM policy. "
+        "Only accepts values of ``private``, ``public-read``, "
+        "``public-read-write``, ``authenticated-read``, ``aws-exec-read``, "
+        "``bucket-owner-read``, ``bucket-owner-full-control`` and "
+        "``log-delivery-write``. "
+        'See <a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/'
+        'acl-overview.html#canned-acl">Canned ACL</a> for details'
+    ),
+}
 
 
 GRANTS = {
-    'name': 'grants', 'nargs': '+',
+    'name': 'grants',
+    'nargs': '+',
     'help_text': (
         '<p>Grant specific permissions to individual users or groups. You '
         'can supply a list of grants of the form</p><codeblock>--grants '
@@ -174,40 +244,48 @@ GRANTS = {
         '</li></ul>'
         'For more information on Amazon S3 access control, see '
         '<a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/'
-        'UsingAuthAccess.html">Access Control</a>')}
+        'UsingAuthAccess.html">Access Control</a>'
+    ),
+}
 
 
 SSE = {
-    'name': 'sse', 'nargs': '?', 'const': 'AES256',
+    'name': 'sse',
+    'nargs': '?',
+    'const': 'AES256',
     'choices': ['AES256', 'aws:kms'],
     'help_text': (
         'Specifies server-side encryption of the object in S3. '
         'Valid values are ``AES256`` and ``aws:kms``. If the parameter is '
         'specified but no value is provided, ``AES256`` is used.'
-    )
+    ),
 }
 
 
 SSE_C = {
-    'name': 'sse-c', 'nargs': '?', 'const': 'AES256', 'choices': ['AES256'],
+    'name': 'sse-c',
+    'nargs': '?',
+    'const': 'AES256',
+    'choices': ['AES256'],
     'help_text': (
         'Specifies server-side encryption using customer provided keys '
         'of the the object in S3. ``AES256`` is the only valid value. '
         'If the parameter is specified but no value is provided, '
         '``AES256`` is used. If you provide this value, ``--sse-c-key`` '
         'must be specified as well.'
-    )
+    ),
 }
 
 
 SSE_C_KEY = {
-    'name': 'sse-c-key', 'cli_type_name': 'blob',
+    'name': 'sse-c-key',
+    'cli_type_name': 'blob',
     'help_text': (
         'The customer-provided encryption key to use to server-side '
         'encrypt the object in S3. If you provide this value, '
         '``--sse-c`` must be specified as well. The key provided should '
         '**not** be base64 encoded.'
-    )
+    ),
 }
 
 
@@ -218,13 +296,15 @@ SSE_KMS_KEY_ID = {
         'should be used to server-side encrypt the object in S3. You should '
         'only provide this parameter if you are using a customer managed '
         'customer master key (CMK) and not the AWS managed KMS CMK.'
-    )
+    ),
 }
 
 
 SSE_C_COPY_SOURCE = {
-    'name': 'sse-c-copy-source', 'nargs': '?',
-    'const': 'AES256', 'choices': ['AES256'],
+    'name': 'sse-c-copy-source',
+    'nargs': '?',
+    'const': 'AES256',
+    'choices': ['AES256'],
     'help_text': (
         'This parameter should only be specified when copying an S3 object '
         'that was encrypted server-side with a customer-provided '
@@ -233,12 +313,13 @@ SSE_C_COPY_SOURCE = {
         'value. If the parameter is specified but no value is provided, '
         '``AES256`` is used. If you provide this value, '
         '``--sse-c-copy-source-key`` must be specified as well. '
-    )
+    ),
 }
 
 
 SSE_C_COPY_SOURCE_KEY = {
-    'name': 'sse-c-copy-source-key', 'cli_type_name': 'blob',
+    'name': 'sse-c-copy-source-key',
+    'cli_type_name': 'blob',
     'help_text': (
         'This parameter should only be specified when copying an S3 object '
         'that was encrypted server-side with a customer-provided '
@@ -247,105 +328,130 @@ SSE_C_COPY_SOURCE_KEY = {
         'must be one that was used when the source object was created. '
         'If you provide this value, ``--sse-c-copy-source`` be specified as '
         'well. The key provided should **not** be base64 encoded.'
-    )
+    ),
 }
 
 
-STORAGE_CLASS = {'name': 'storage-class',
-                 'choices': ['STANDARD', 'REDUCED_REDUNDANCY', 'STANDARD_IA',
-                             'ONEZONE_IA', 'INTELLIGENT_TIERING', 'GLACIER',
-                             'DEEP_ARCHIVE', 'GLACIER_IR'],
-                 'help_text': (
-                     "The type of storage to use for the object. "
-                     "Valid choices are: STANDARD | REDUCED_REDUNDANCY "
-                     "| STANDARD_IA | ONEZONE_IA | INTELLIGENT_TIERING "
-                     "| GLACIER | DEEP_ARCHIVE | GLACIER_IR. "
-                     "Defaults to 'STANDARD'")}
-
-
-WEBSITE_REDIRECT = {'name': 'website-redirect',
-                    'help_text': (
-                        "If the bucket is configured as a website, "
-                        "redirects requests for this object to another object "
-                        "in the same bucket or to an external URL. Amazon S3 "
-                        "stores the value of this header in the object "
-                        "metadata.")}
-
-
-CACHE_CONTROL = {'name': 'cache-control',
-                 'help_text': (
-                     "Specifies caching behavior along the "
-                     "request/reply chain.")}
-
-
-CONTENT_DISPOSITION = {'name': 'content-disposition',
-                       'help_text': (
-                           "Specifies presentational information "
-                           "for the object.")}
-
-
-CONTENT_ENCODING = {'name': 'content-encoding',
-                    'help_text': (
-                        "Specifies what content encodings have been "
-                        "applied to the object and thus what decoding "
-                        "mechanisms must be applied to obtain the media-type "
-                        "referenced by the Content-Type header field.")}
-
-
-CONTENT_LANGUAGE = {'name': 'content-language',
-                    'help_text': ("The language the content is in.")}
-
-
-SOURCE_REGION = {'name': 'source-region',
-                 'help_text': (
-                     "When transferring objects from an s3 bucket to an s3 "
-                     "bucket, this specifies the region of the source bucket."
-                     " Note the region specified by ``--region`` or through "
-                     "configuration of the CLI refers to the region of the "
-                     "destination bucket.  If ``--source-region`` is not "
-                     "specified the region of the source will be the same "
-                     "as the region of the destination bucket.")}
+STORAGE_CLASS = {
+    'name': 'storage-class',
+    'choices': [
+        'STANDARD',
+        'REDUCED_REDUNDANCY',
+        'STANDARD_IA',
+        'ONEZONE_IA',
+        'INTELLIGENT_TIERING',
+        'GLACIER',
+        'DEEP_ARCHIVE',
+        'GLACIER_IR',
+    ],
+    'help_text': (
+        "The type of storage to use for the object. "
+        "Valid choices are: STANDARD | REDUCED_REDUNDANCY "
+        "| STANDARD_IA | ONEZONE_IA | INTELLIGENT_TIERING "
+        "| GLACIER | DEEP_ARCHIVE | GLACIER_IR. "
+        "Defaults to 'STANDARD'"
+    ),
+}
+
+
+WEBSITE_REDIRECT = {
+    'name': 'website-redirect',
+    'help_text': (
+        "If the bucket is configured as a website, "
+        "redirects requests for this object to another object "
+        "in the same bucket or to an external URL. Amazon S3 "
+        "stores the value of this header in the object "
+        "metadata."
+    ),
+}
+
+
+CACHE_CONTROL = {
+    'name': 'cache-control',
+    'help_text': ("Specifies caching behavior along the request/reply chain."),
+}
+
+
+CONTENT_DISPOSITION = {
+    'name': 'content-disposition',
+    'help_text': ("Specifies presentational information for the object."),
+}
+
+
+CONTENT_ENCODING = {
+    'name': 'content-encoding',
+    'help_text': (
+        "Specifies what content encodings have been "
+        "applied to the object and thus what decoding "
+        "mechanisms must be applied to obtain the media-type "
+        "referenced by the Content-Type header field."
+    ),
+}
+
+
+CONTENT_LANGUAGE = {
+    'name': 'content-language',
+    'help_text': ("The language the content is in."),
+}
+
+
+SOURCE_REGION = {
+    'name': 'source-region',
+    'help_text': (
+        "When transferring objects from an s3 bucket to an s3 "
+        "bucket, this specifies the region of the source bucket."
+        " Note the region specified by ``--region`` or through "
+        "configuration of the CLI refers to the region of the "
+        "destination bucket.  If ``--source-region`` is not "
+        "specified the region of the source will be the same "
+        "as the region of the destination bucket."
+    ),
+}
 
 
 EXPIRES = {
     'name': 'expires',
     'help_text': (
-        "The date and time at which the object is no longer cacheable.")
+        "The date and time at which the object is no longer cacheable."
+    ),
 }
 
 
 METADATA = {
-    'name': 'metadata', 'cli_type_name': 'map',
+    'name': 'metadata',
+    'cli_type_name': 'map',
     'schema': {
         'type': 'map',
         'key': {'type': 'string'},
-        'value': {'type': 'string'}
+        'value': {'type': 'string'},
     },
     'help_text': (
         "A map of metadata to store with the objects in S3. This will be "
         "applied to every object which is part of this request. In a sync, "
         "this means that files which haven't changed won't receive the new "
         "metadata. "
-    )
+    ),
 }
 
 
 METADATA_DIRECTIVE = {
-    'name': 'metadata-directive', 'choices': ['COPY', 'REPLACE'],
+    'name': 'metadata-directive',
+    'choices': ['COPY', 'REPLACE'],
     'help_text': (
         'Sets the ``x-amz-metadata-directive`` header for CopyObject '
         'operations. It is recommended to use the ``--copy-props`` parameter '
         'instead to control copying of metadata properties. '
         'If ``--metadata-directive`` is set, the ``--copy-props`` parameter '
         'will be disabled and will have no affect on the transfer.'
-    )
+    ),
 }
 
 
 COPY_PROPS = {
     'name': 'copy-props',
     'choices': ['none', 'metadata-directive', 'default'],
-    'default': 'default', 'help_text': (
+    'default': 'default',
+    'help_text': (
         'Determines which properties are copied from the source S3 object. '
         'This parameter only applies for S3 to S3 copies. Valid values are: '
         '<ul>'
@@ -375,81 +481,124 @@ COPY_PROPS = {
         'If you want to guarantee no additional API calls are made other than '
         'than the ones needed to perform the actual copy, set this option to '
         '``none``.'
-    )
+    ),
 }
 
 
-INDEX_DOCUMENT = {'name': 'index-document',
-                  'help_text': (
-                      'A suffix that is appended to a request that is for '
-                      'a directory on the website endpoint (e.g. if the '
-                      'suffix is index.html and you make a request to '
-                      'samplebucket/images/ the data that is returned '
-                      'will be for the object with the key name '
-                      'images/index.html) The suffix must not be empty and '
-                      'must not include a slash character.')}
-
-
-ERROR_DOCUMENT = {'name': 'error-document',
-                  'help_text': (
-                      'The object key name to use when '
-                      'a 4XX class error occurs.')}
-
-
-ONLY_SHOW_ERRORS = {'name': 'only-show-errors', 'action': 'store_true',
-                    'help_text': (
-                        'Only errors and warnings are displayed. All other '
-                        'output is suppressed.')}
-
-
-NO_PROGRESS = {'name': 'no-progress',
-               'action': 'store_false',
-               'dest': 'progress',
-               'help_text': (
-                   'File transfer progress is not displayed. This flag '
-                   'is only applied when the quiet and only-show-errors '
-                   'flags are not provided.')}
-
-
-EXPECTED_SIZE = {'name': 'expected-size',
-                 'help_text': (
-                     'This argument specifies the expected size of a stream '
-                     'in terms of bytes. Note that this argument is needed '
-                     'only when a stream is being uploaded to s3 and the size '
-                     'is larger than 50GB.  Failure to include this argument '
-                     'under these conditions may result in a failed upload '
-                     'due to too many parts in upload.')}
-
-
-PAGE_SIZE = {'name': 'page-size', 'cli_type_name': 'integer',
-             'help_text': (
-                 'The number of results to return in each response to a list '
-                 'operation. The default value is 1000 (the maximum allowed). '
-                 'Using a lower value may help if an operation times out.')}
+INDEX_DOCUMENT = {
+    'name': 'index-document',
+    'help_text': (
+        'A suffix that is appended to a request that is for '
+        'a directory on the website endpoint (e.g. if the '
+        'suffix is index.html and you make a request to '
+        'samplebucket/images/ the data that is returned '
+        'will be for the object with the key name '
+        'images/index.html) The suffix must not be empty and '
+        'must not include a slash character.'
+    ),
+}
+
+
+ERROR_DOCUMENT = {
+    'name': 'error-document',
+    'help_text': ('The object key name to use when a 4XX class error occurs.'),
+}
+
+
+ONLY_SHOW_ERRORS = {
+    'name': 'only-show-errors',
+    'action': 'store_true',
+    'help_text': (
+        'Only errors and warnings are displayed. All other '
+        'output is suppressed.'
+    ),
+}
+
+
+NO_PROGRESS = {
+    'name': 'no-progress',
+    'action': 'store_false',
+    'dest': 'progress',
+    'help_text': (
+        'File transfer progress is not displayed. This flag '
+        'is only applied when the quiet and only-show-errors '
+        'flags are not provided.'
+    ),
+}
+
+PROGRESS_FREQUENCY = {
+    'name': 'progress-frequency',
+    'dest': 'progress_frequency',
+    'cli_type_name': 'integer',
+    'default': 0,
+    'help_text': (
+        'Number of seconds to wait before updating file '
+        'transfer progress. This flag is only applied when '
+        'the quiet and only-show-errors flags are not '
+        'provided.'
+    ),
+}
+
+PROGRESS_MULTILINE = {
+    'name': 'progress-multiline',
+    'dest': 'progress_multiline',
+    'action': 'store_true',
+    'help_text': (
+        'Show progress on multiple lines.'
+    ),
+}
+
+
+EXPECTED_SIZE = {
+    'name': 'expected-size',
+    'help_text': (
+        'This argument specifies the expected size of a stream '
+        'in terms of bytes. Note that this argument is needed '
+        'only when a stream is being uploaded to s3 and the size '
+        'is larger than 50GB.  Failure to include this argument '
+        'under these conditions may result in a failed upload '
+        'due to too many parts in upload.'
+    ),
+}
+
+
+PAGE_SIZE = {
+    'name': 'page-size',
+    'cli_type_name': 'integer',
+    'help_text': (
+        'The number of results to return in each response to a list '
+        'operation. The default value is 1000 (the maximum allowed). '
+        'Using a lower value may help if an operation times out.'
+    ),
+}
 
 
 IGNORE_GLACIER_WARNINGS = {
-    'name': 'ignore-glacier-warnings', 'action': 'store_true',
+    'name': 'ignore-glacier-warnings',
+    'action': 'store_true',
     'help_text': (
         'Turns off glacier warnings. Warnings about an operation that cannot '
         'be performed because it involves copying, downloading, or moving '
         'a glacier object will no longer be printed to standard error and '
         'will no longer cause the return code of the command to be ``2``.'
-    )
+    ),
 }
 
 
 FORCE_GLACIER_TRANSFER = {
-    'name': 'force-glacier-transfer', 'action': 'store_true',
+    'name': 'force-glacier-transfer',
+    'action': 'store_true',
     'help_text': (
         'Forces a transfer request on all Glacier objects in a sync or '
         'recursive copy.'
-    )
+    ),
 }
 
 REQUEST_PAYER = {
-    'name': 'request-payer', 'choices': ['requester'],
-    'nargs': '?', 'const': 'requester',
+    'name': 'request-payer',
+    'choices': ['requester'],
+    'nargs': '?',
+    'const': 'requester',
     'help_text': (
         'Confirms that the requester knows that they will be charged '
         'for the request. Bucket owners need not specify this parameter in '
@@ -457,11 +606,12 @@ REQUEST_PAYER = {
         'pays buckets can be found at '
         'http://docs.aws.amazon.com/AmazonS3/latest/dev/'
         'ObjectsinRequesterPaysBuckets.html'
-    )
+    ),
 }
 
 VALIDATE_SAME_S3_PATHS = {
-    'name': 'validate-same-s3-paths', 'action': 'store_true',
+    'name': 'validate-same-s3-paths',
+    'action': 'store_true',
     'help_text': (
         'Resolves the source and destination S3 URIs to their '
         'underlying buckets and verifies that the file or object '
@@ -478,18 +628,20 @@ VALIDATE_SAME_S3_PATHS = {
         'NOTE: Path validation requires making additional API calls. '
         'Future updates to this path-validation mechanism might change '
         'which API calls are made.'
-    )
+    ),
 }
 
 CHECKSUM_MODE = {
-        'name': 'checksum-mode', 'choices': ['ENABLED'],
-        'help_text': 'To retrieve the checksum, this mode must be enabled. If the object has a '
-                     'checksum, it will be verified.'
+    'name': 'checksum-mode',
+    'choices': ['ENABLED'],
+    'help_text': 'To retrieve the checksum, this mode must be enabled. If the object has a '
+    'checksum, it will be verified.',
 }
 
 CHECKSUM_ALGORITHM = {
-        'name': 'checksum-algorithm', 'choices': ['CRC64NVME', 'CRC32', 'SHA256', 'SHA1', 'CRC32C'],
-        'help_text': 'Indicates the algorithm used to create the checksum for the object.'
+    'name': 'checksum-algorithm',
+    'choices': ['CRC64NVME', 'CRC32', 'SHA256', 'SHA1', 'CRC32C'],
+    'help_text': 'Indicates the algorithm used to create the checksum for the object.',
 }
 
 BUCKET_NAME_PREFIX = {
@@ -497,7 +649,7 @@ BUCKET_NAME_PREFIX = {
     'help_text': (
         'Limits the response to bucket names that begin with the specified '
         'bucket name prefix.'
-    )
+    ),
 }
 
 BUCKET_REGION = {
@@ -509,18 +661,45 @@ BUCKET_REGION = {
         'us-west-2 for the US West (Oregon) Region. For a list of the valid '
         'values for all of the Amazon Web Services Regions, see '
         'https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region'
-    )
+    ),
 }
 
-TRANSFER_ARGS = [DRYRUN, QUIET, INCLUDE, EXCLUDE, ACL,
-                 FOLLOW_SYMLINKS, NO_FOLLOW_SYMLINKS, NO_GUESS_MIME_TYPE,
-                 SSE, SSE_C, SSE_C_KEY, SSE_KMS_KEY_ID, SSE_C_COPY_SOURCE,
-                 SSE_C_COPY_SOURCE_KEY, STORAGE_CLASS, GRANTS,
-                 WEBSITE_REDIRECT, CONTENT_TYPE, CACHE_CONTROL,
-                 CONTENT_DISPOSITION, CONTENT_ENCODING, CONTENT_LANGUAGE,
-                 EXPIRES, SOURCE_REGION, ONLY_SHOW_ERRORS, NO_PROGRESS,
-                 PAGE_SIZE, IGNORE_GLACIER_WARNINGS, FORCE_GLACIER_TRANSFER,
-                 REQUEST_PAYER, CHECKSUM_MODE, CHECKSUM_ALGORITHM]
+TRANSFER_ARGS = [
+    DRYRUN,
+    QUIET,
+    INCLUDE,
+    EXCLUDE,
+    ACL,
+    FOLLOW_SYMLINKS,
+    NO_FOLLOW_SYMLINKS,
+    NO_GUESS_MIME_TYPE,
+    SSE,
+    SSE_C,
+    SSE_C_KEY,
+    SSE_KMS_KEY_ID,
+    SSE_C_COPY_SOURCE,
+    SSE_C_COPY_SOURCE_KEY,
+    STORAGE_CLASS,
+    GRANTS,
+    WEBSITE_REDIRECT,
+    CONTENT_TYPE,
+    CACHE_CONTROL,
+    CONTENT_DISPOSITION,
+    CONTENT_ENCODING,
+    CONTENT_LANGUAGE,
+    EXPIRES,
+    SOURCE_REGION,
+    ONLY_SHOW_ERRORS,
+    NO_PROGRESS,
+    PROGRESS_FREQUENCY,
+    PROGRESS_MULTILINE,
+    PAGE_SIZE,
+    IGNORE_GLACIER_WARNINGS,
+    FORCE_GLACIER_TRANSFER,
+    REQUEST_PAYER,
+    CHECKSUM_MODE,
+    CHECKSUM_ALGORITHM,
+]
 
 
 class S3Command(BasicCommand):
@@ -535,14 +714,28 @@ class S3Command(BasicCommand):
 
 class ListCommand(S3Command):
     NAME = 'ls'
-    DESCRIPTION = ("List S3 objects and common prefixes under a prefix or "
-                   "all S3 buckets. Note that the --output and --no-paginate "
-                   "arguments are ignored for this command.")
+    DESCRIPTION = (
+        "List S3 objects and common prefixes under a prefix or "
+        "all S3 buckets. Note that the --output and --no-paginate "
+        "arguments are ignored for this command."
+    )
     USAGE = "<S3Uri> or NONE"
-    ARG_TABLE = [{'name': 'paths', 'nargs': '?', 'default': 's3://',
-                  'positional_arg': True, 'synopsis': USAGE}, RECURSIVE,
-                 PAGE_SIZE, HUMAN_READABLE, SUMMARIZE, REQUEST_PAYER,
-                 BUCKET_NAME_PREFIX, BUCKET_REGION]
+    ARG_TABLE = [
+        {
+            'name': 'paths',
+            'nargs': '?',
+            'default': 's3://',
+            'positional_arg': True,
+            'synopsis': USAGE,
+        },
+        RECURSIVE,
+        PAGE_SIZE,
+        HUMAN_READABLE,
+        SUMMARIZE,
+        REQUEST_PAYER,
+        BUCKET_NAME_PREFIX,
+        BUCKET_REGION,
+    ]
 
     def _run_main(self, parsed_args, parsed_globals):
         super(ListCommand, self)._run_main(parsed_args, parsed_globals)
@@ -564,10 +757,12 @@ class ListCommand(S3Command):
         elif parsed_args.dir_op:
             # Then --recursive was specified.
             self._list_all_objects_recursive(
-                bucket, key, parsed_args.page_size, parsed_args.request_payer)
+                bucket, key, parsed_args.page_size, parsed_args.request_payer
+            )
         else:
             self._list_all_objects(
-                bucket, key, parsed_args.page_size, parsed_args.request_payer)
+                bucket, key, parsed_args.page_size, parsed_args.request_payer
+            )
         if parsed_args.summarize:
             self._print_summary()
         if key:
@@ -584,12 +779,15 @@ class ListCommand(S3Command):
             # thrown before reaching the automatic return of rc of zero.
             return 0
 
-    def _list_all_objects(self, bucket, key, page_size=None,
-                          request_payer=None):
+    def _list_all_objects(
+        self, bucket, key, page_size=None, request_payer=None
+    ):
         paginator = self.client.get_paginator('list_objects_v2')
         paging_args = {
-            'Bucket': bucket, 'Prefix': key, 'Delimiter': '/',
-            'PaginationConfig': {'PageSize': page_size}
+            'Bucket': bucket,
+            'Prefix': key,
+            'Delimiter': '/',
+            'PaginationConfig': {'PageSize': page_size},
         }
         if request_payer is not None:
             paging_args['RequestPayer'] = request_payer
@@ -619,21 +817,18 @@ class ListCommand(S3Command):
                 filename = filename_components[-1]
             else:
                 filename = content['Key']
-            print_str = last_mod_str + ' ' + size_str + ' ' + \
-                filename + '\n'
+            print_str = last_mod_str + ' ' + size_str + ' ' + filename + '\n'
             uni_print(print_str)
         self._at_first_page = False
 
     def _list_all_buckets(
-            self,
-            page_size=None,
-            prefix=None,
-            bucket_region=None,
+        self,
+        page_size=None,
+        prefix=None,
+        bucket_region=None,
     ):
         paginator = self.client.get_paginator('list_buckets')
-        paging_args = {
-            'PaginationConfig': {'PageSize': page_size}
-        }
+        paging_args = {'PaginationConfig': {'PageSize': page_size}}
         if prefix:
             paging_args['Prefix'] = prefix
         if bucket_region:
@@ -649,12 +844,14 @@ class ListCommand(S3Command):
                 print_str = last_mod_str + ' ' + bucket['Name'] + '\n'
                 uni_print(print_str)
 
-    def _list_all_objects_recursive(self, bucket, key, page_size=None,
-                                    request_payer=None):
+    def _list_all_objects_recursive(
+        self, bucket, key, page_size=None, request_payer=None
+    ):
         paginator = self.client.get_paginator('list_objects_v2')
         paging_args = {
-            'Bucket': bucket, 'Prefix': key,
-            'PaginationConfig': {'PageSize': page_size}
+            'Bucket': bucket,
+            'Prefix': key,
+            'PaginationConfig': {'PageSize': page_size},
         }
         if request_payer is not None:
             paging_args['RequestPayer'] = request_payer
@@ -676,11 +873,14 @@ class ListCommand(S3Command):
         """
         last_mod = parse(last_mod)
         last_mod = last_mod.astimezone(tzlocal())
-        last_mod_tup = (str(last_mod.year), str(last_mod.month).zfill(2),
-                        str(last_mod.day).zfill(2),
-                        str(last_mod.hour).zfill(2),
-                        str(last_mod.minute).zfill(2),
-                        str(last_mod.second).zfill(2))
+        last_mod_tup = (
+            str(last_mod.year),
+            str(last_mod.month).zfill(2),
+            str(last_mod.day).zfill(2),
+            str(last_mod.hour).zfill(2),
+            str(last_mod.minute).zfill(2),
+            str(last_mod.second).zfill(2),
+        )
         last_mod_str = "%s-%s-%s %s:%s:%s" % last_mod_tup
         return last_mod_str.ljust(19, ' ')
 
@@ -711,25 +911,36 @@ class WebsiteCommand(S3Command):
     NAME = 'website'
     DESCRIPTION = 'Set the website configuration for a bucket.'
     USAGE = '<S3Uri>'
-    ARG_TABLE = [{'name': 'paths', 'nargs': 1, 'positional_arg': True,
-                  'synopsis': USAGE}, INDEX_DOCUMENT, ERROR_DOCUMENT]
+    ARG_TABLE = [
+        {
+            'name': 'paths',
+            'nargs': 1,
+            'positional_arg': True,
+            'synopsis': USAGE,
+        },
+        INDEX_DOCUMENT,
+        ERROR_DOCUMENT,
+    ]
 
     def _run_main(self, parsed_args, parsed_globals):
         super(WebsiteCommand, self)._run_main(parsed_args, parsed_globals)
         bucket = self._get_bucket_name(parsed_args.paths[0])
         website_configuration = self._build_website_configuration(parsed_args)
         self.client.put_bucket_website(
-            Bucket=bucket, WebsiteConfiguration=website_configuration)
+            Bucket=bucket, WebsiteConfiguration=website_configuration
+        )
         return 0
 
     def _build_website_configuration(self, parsed_args):
         website_config = {}
         if parsed_args.index_document is not None:
-            website_config['IndexDocument'] = \
-                {'Suffix': parsed_args.index_document}
+            website_config['IndexDocument'] = {
+                'Suffix': parsed_args.index_document
+            }
         if parsed_args.error_document is not None:
-            website_config['ErrorDocument'] = \
-                {'Key': parsed_args.error_document}
+            website_config['ErrorDocument'] = {
+                'Key': parsed_args.error_document
+            }
         return website_config
 
     def _get_bucket_name(self, path):
@@ -756,13 +967,18 @@ class PresignCommand(S3Command):
         "so the region needs to be configured explicitly."
     )
     USAGE = "<S3Uri>"
-    ARG_TABLE = [{'name': 'path',
-                  'positional_arg': True, 'synopsis': USAGE},
-                 {'name': 'expires-in', 'default': 3600,
-                  'cli_type_name': 'integer',
-                  'help_text': (
-                      'Number of seconds until the pre-signed '
-                      'URL expires.  Default is 3600 seconds. Maximum is 604800 seconds.')}]
+    ARG_TABLE = [
+        {'name': 'path', 'positional_arg': True, 'synopsis': USAGE},
+        {
+            'name': 'expires-in',
+            'default': 3600,
+            'cli_type_name': 'integer',
+            'help_text': (
+                'Number of seconds until the pre-signed '
+                'URL expires.  Default is 3600 seconds. Maximum is 604800 seconds.'
+            ),
+        },
+    ]
 
     def _run_main(self, parsed_args, parsed_globals):
         super(PresignCommand, self)._run_main(parsed_args, parsed_globals)
@@ -773,7 +989,7 @@ class PresignCommand(S3Command):
         url = self.client.generate_presigned_url(
             'get_object',
             {'Bucket': bucket, 'Key': key},
-            ExpiresIn=parsed_args.expires_in
+            ExpiresIn=parsed_args.expires_in,
         )
         uni_print(url)
         uni_print('\n')
@@ -783,18 +999,22 @@ class PresignCommand(S3Command):
 class S3TransferCommand(S3Command):
     def _run_main(self, parsed_args, parsed_globals):
         super(S3TransferCommand, self)._run_main(parsed_args, parsed_globals)
+        register_feature_id('S3_TRANSFER')
         self._convert_path_args(parsed_args)
         params = self._get_params(parsed_args, parsed_globals, self._session)
         source_client, transfer_client = self._get_source_and_transfer_clients(
             params=params
         )
         transfer_manager = self._get_transfer_manager(
-            params=params,
-            botocore_transfer_client=transfer_client
+            params=params, botocore_transfer_client=transfer_client
         )
         cmd = CommandArchitecture(
-            self._session, self.NAME, params,
-            transfer_manager, source_client, transfer_client
+            self._session,
+            self.NAME,
+            params,
+            transfer_manager,
+            source_client,
+            transfer_client,
         )
         cmd.create_instructions()
         return cmd.run()
@@ -812,8 +1032,8 @@ class S3TransferCommand(S3Command):
 
     def _get_params(self, parsed_args, parsed_globals, session):
         cmd_params = CommandParameters(
-            self.NAME, vars(parsed_args), self.USAGE,
-            session, parsed_globals)
+            self.NAME, vars(parsed_args), self.USAGE, session, parsed_globals
+        )
         cmd_params.add_region(parsed_globals)
         cmd_params.add_endpoint_url(parsed_globals)
         cmd_params.add_verify_ssl(parsed_globals)
@@ -825,7 +1045,8 @@ class S3TransferCommand(S3Command):
     def _get_source_and_transfer_clients(self, params):
         client_factory = ClientFactory(self._session)
         source_client = client_factory.create_client(
-            params, is_source_client=True)
+            params, is_source_client=True
+        )
         transfer_client = client_factory.create_client(params)
         return source_client, transfer_client
 
@@ -839,52 +1060,98 @@ class S3TransferCommand(S3Command):
 
     def _get_runtime_config(self):
         return transferconfig.RuntimeConfig().build_config(
-            **self._session.get_scoped_config().get('s3', {}))
+            **self._session.get_scoped_config().get('s3', {})
+        )
 
 
 class CpCommand(S3TransferCommand):
     NAME = 'cp'
-    DESCRIPTION = "Copies a local file or S3 object to another location " \
-                  "locally or in S3."
-    USAGE = "<LocalPath> <S3Uri> or <S3Uri> <LocalPath> " \
-            "or <S3Uri> <S3Uri>"
-    ARG_TABLE = [{'name': 'paths', 'nargs': 2, 'positional_arg': True,
-                  'synopsis': USAGE}] + TRANSFER_ARGS + \
-                [METADATA, COPY_PROPS, METADATA_DIRECTIVE, EXPECTED_SIZE,
-                 RECURSIVE]
+    DESCRIPTION = (
+        "Copies a local file or S3 object to another location "
+        "locally or in S3."
+    )
+    USAGE = "<LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>"
+    ARG_TABLE = (
+        [
+            {
+                'name': 'paths',
+                'nargs': 2,
+                'positional_arg': True,
+                'synopsis': USAGE,
+            }
+        ]
+        + TRANSFER_ARGS
+        + [METADATA, COPY_PROPS, METADATA_DIRECTIVE, EXPECTED_SIZE, RECURSIVE]
+    )
 
 
 class MvCommand(S3TransferCommand):
     NAME = 'mv'
     DESCRIPTION = BasicCommand.FROM_FILE('s3', 'mv', '_description.rst')
-    USAGE = "<LocalPath> <S3Uri> or <S3Uri> <LocalPath> " \
-            "or <S3Uri> <S3Uri>"
-    ARG_TABLE = [{'name': 'paths', 'nargs': 2, 'positional_arg': True,
-                  'synopsis': USAGE}] + TRANSFER_ARGS +\
-                [METADATA, COPY_PROPS, METADATA_DIRECTIVE, RECURSIVE,
-                 VALIDATE_SAME_S3_PATHS]
+    USAGE = "<LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>"
+    ARG_TABLE = (
+        [
+            {
+                'name': 'paths',
+                'nargs': 2,
+                'positional_arg': True,
+                'synopsis': USAGE,
+            }
+        ]
+        + TRANSFER_ARGS
+        + [
+            METADATA,
+            COPY_PROPS,
+            METADATA_DIRECTIVE,
+            RECURSIVE,
+            VALIDATE_SAME_S3_PATHS,
+        ]
+    )
 
 
 class RmCommand(S3TransferCommand):
     NAME = 'rm'
     DESCRIPTION = "Deletes an S3 object."
     USAGE = "<S3Uri>"
-    ARG_TABLE = [{'name': 'paths', 'nargs': 1, 'positional_arg': True,
-                  'synopsis': USAGE}, DRYRUN, QUIET, RECURSIVE, REQUEST_PAYER,
-                 INCLUDE, EXCLUDE, ONLY_SHOW_ERRORS, PAGE_SIZE]
+    ARG_TABLE = [
+        {
+            'name': 'paths',
+            'nargs': 1,
+            'positional_arg': True,
+            'synopsis': USAGE,
+        },
+        DRYRUN,
+        QUIET,
+        RECURSIVE,
+        REQUEST_PAYER,
+        INCLUDE,
+        EXCLUDE,
+        ONLY_SHOW_ERRORS,
+        PAGE_SIZE,
+    ]
 
 
 class SyncCommand(S3TransferCommand):
     NAME = 'sync'
-    DESCRIPTION = "Syncs directories and S3 prefixes. Recursively copies " \
-                  "new and updated files from the source directory to " \
-                  "the destination. Only creates folders in the destination " \
-                  "if they contain one or more files."
-    USAGE = "<LocalPath> <S3Uri> or <S3Uri> " \
-            "<LocalPath> or <S3Uri> <S3Uri>"
-    ARG_TABLE = [{'name': 'paths', 'nargs': 2, 'positional_arg': True,
-                  'synopsis': USAGE}] + TRANSFER_ARGS + \
-                [METADATA, COPY_PROPS, METADATA_DIRECTIVE]
+    DESCRIPTION = (
+        "Syncs directories and S3 prefixes. Recursively copies "
+        "new and updated files from the source directory to "
+        "the destination. Only creates folders in the destination "
+        "if they contain one or more files."
+    )
+    USAGE = "<LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>"
+    ARG_TABLE = (
+        [
+            {
+                'name': 'paths',
+                'nargs': 2,
+                'positional_arg': True,
+                'synopsis': USAGE,
+            }
+        ]
+        + TRANSFER_ARGS
+        + [METADATA, COPY_PROPS, METADATA_DIRECTIVE]
+    )
 
 
 class MbCommand(S3Command):
@@ -920,7 +1187,7 @@ class MbCommand(S3Command):
         except Exception as e:
             uni_print(
                 "make_bucket failed: %s %s\n" % (parsed_args.path, e),
-                sys.stderr
+                sys.stderr,
             )
             return 1
 
@@ -935,8 +1202,10 @@ class RbCommand(S3Command):
         "deleted."
     )
     USAGE = "<S3Uri>"
-    ARG_TABLE = [{'name': 'path', 'positional_arg': True,
-                  'synopsis': USAGE}, FORCE]
+    ARG_TABLE = [
+        {'name': 'path', 'positional_arg': True, 'synopsis': USAGE},
+        FORCE,
+    ]
 
     def _run_main(self, parsed_args, parsed_globals):
         super(RbCommand, self)._run_main(parsed_args, parsed_globals)
@@ -963,7 +1232,7 @@ class RbCommand(S3Command):
         except Exception as e:
             uni_print(
                 "remove_bucket failed: %s %s\n" % (parsed_args.path, e),
-                sys.stderr
+                sys.stderr,
             )
             return 1
 
@@ -974,10 +1243,11 @@ class RbCommand(S3Command):
         if rc != 0:
             raise RuntimeError(
                 "remove_bucket failed: Unable to delete all objects in the "
-                "bucket, bucket will not be deleted.")
+                "bucket, bucket will not be deleted."
+            )
 
 
-class CommandArchitecture(object):
+class CommandArchitecture:
     """
     This class drives the actual command.  A command is performed in two
     steps.  First a list of instructions is generated.  This list of
@@ -987,8 +1257,16 @@ class CommandArchitecture(object):
     list of instructions to wire together an assortment of generators to
     perform the command.
     """
-    def __init__(self, session, cmd, parameters, transfer_manager,
-                 source_client, transfer_client):
+
+    def __init__(
+        self,
+        session,
+        cmd,
+        parameters,
+        transfer_manager,
+        source_client,
+        transfer_client,
+    ):
         self.session = session
         self.cmd = cmd
         self.parameters = parameters
@@ -1026,14 +1304,16 @@ class CommandArchitecture(object):
         """
         sync_strategies = {}
         # Set the default strategies.
-        sync_strategies['file_at_src_and_dest_sync_strategy'] = \
+        sync_strategies['file_at_src_and_dest_sync_strategy'] = (
             SizeAndLastModifiedSync()
+        )
         sync_strategies['file_not_at_dest_sync_strategy'] = MissingFileSync()
         sync_strategies['file_not_at_src_sync_strategy'] = NeverSync()
 
         # Determine what strategies to override if any.
         responses = self.session.emit(
-            'choosing-s3-sync-strategy', params=self.parameters)
+            'choosing-s3-sync-strategy', params=self.parameters
+        )
         if responses is not None:
             for response in responses:
                 override_sync_strategy = response[1]
@@ -1076,85 +1356,106 @@ class CommandArchitecture(object):
             'locals3': 'upload',
             's3s3': 'copy',
             's3local': 'download',
-            's3': 'delete'
+            's3': 'delete',
         }
         result_queue = queue.Queue()
         operation_name = cmd_translation[paths_type]
 
         fgen_kwargs = {
-            'client': self._source_client, 'operation_name': operation_name,
+            'client': self._source_client,
+            'operation_name': operation_name,
             'follow_symlinks': self.parameters['follow_symlinks'],
             'page_size': self.parameters['page_size'],
             'result_queue': result_queue,
         }
         rgen_kwargs = {
-            'client': self._client, 'operation_name': '',
+            'client': self._client,
+            'operation_name': '',
             'follow_symlinks': self.parameters['follow_symlinks'],
             'page_size': self.parameters['page_size'],
             'result_queue': result_queue,
         }
 
-        fgen_request_parameters = \
+        fgen_request_parameters = (
             self._get_file_generator_request_parameters_skeleton()
+        )
         self._map_request_payer_params(fgen_request_parameters)
         self._map_sse_c_params(fgen_request_parameters, paths_type)
         fgen_kwargs['request_parameters'] = fgen_request_parameters
 
-        rgen_request_parameters =  \
+        rgen_request_parameters = (
             self._get_file_generator_request_parameters_skeleton()
+        )
         self._map_request_payer_params(rgen_request_parameters)
         rgen_kwargs['request_parameters'] = rgen_request_parameters
 
         file_generator = FileGenerator(**fgen_kwargs)
         rev_generator = FileGenerator(**rgen_kwargs)
         stream_dest_path, stream_compare_key = find_dest_path_comp_key(files)
-        stream_file_info = [FileInfo(src=files['src']['path'],
-                                     dest=stream_dest_path,
-                                     compare_key=stream_compare_key,
-                                     src_type=files['src']['type'],
-                                     dest_type=files['dest']['type'],
-                                     operation_name=operation_name,
-                                     client=self._client,
-                                     is_stream=True)]
+        stream_file_info = [
+            FileInfo(
+                src=files['src']['path'],
+                dest=stream_dest_path,
+                compare_key=stream_compare_key,
+                src_type=files['src']['type'],
+                dest_type=files['dest']['type'],
+                operation_name=operation_name,
+                client=self._client,
+                is_stream=True,
+            )
+        ]
         file_info_builder = FileInfoBuilder(
-            self._client, self._source_client, self.parameters)
+            self._client, self._source_client, self.parameters
+        )
 
         s3_transfer_handler = S3TransferHandlerFactory(self.parameters)(
-            self._transfer_manager, result_queue)
+            self._transfer_manager, result_queue
+        )
 
         sync_strategies = self.choose_sync_strategies()
 
         command_dict = {}
         if self.cmd == 'sync':
-            command_dict = {'setup': [files, rev_files],
-                            'file_generator': [file_generator,
-                                               rev_generator],
-                            'filters': [create_filter(self.parameters),
-                                        create_filter(self.parameters)],
-                            'comparator': [Comparator(**sync_strategies)],
-                            'file_info_builder': [file_info_builder],
-                            's3_handler': [s3_transfer_handler]}
+            command_dict = {
+                'setup': [files, rev_files],
+                'file_generator': [file_generator, rev_generator],
+                'filters': [
+                    create_filter(self.parameters),
+                    create_filter(self.parameters),
+                ],
+                'comparator': [Comparator(**sync_strategies)],
+                'file_info_builder': [file_info_builder],
+                's3_handler': [s3_transfer_handler],
+            }
         elif self.cmd == 'cp' and self.parameters['is_stream']:
-            command_dict = {'setup': [stream_file_info],
-                            's3_handler': [s3_transfer_handler]}
+            command_dict = {
+                'setup': [stream_file_info],
+                's3_handler': [s3_transfer_handler],
+            }
         elif self.cmd == 'cp':
-            command_dict = {'setup': [files],
-                            'file_generator': [file_generator],
-                            'filters': [create_filter(self.parameters)],
-                            'file_info_builder': [file_info_builder],
-                            's3_handler': [s3_transfer_handler]}
+            command_dict = {
+                'setup': [files],
+                'file_generator': [file_generator],
+                'filters': [create_filter(self.parameters)],
+                'file_info_builder': [file_info_builder],
+                's3_handler': [s3_transfer_handler],
+            }
         elif self.cmd == 'rm':
-            command_dict = {'setup': [files],
-                            'file_generator': [file_generator],
-                            'filters': [create_filter(self.parameters)],
-                            'file_info_builder': [file_info_builder],
-                            's3_handler': [s3_transfer_handler]}
+            command_dict = {
+                'setup': [files],
+                'file_generator': [file_generator],
+                'filters': [create_filter(self.parameters)],
+                'file_info_builder': [file_info_builder],
+                's3_handler': [s3_transfer_handler],
+            }
         elif self.cmd == 'mv':
-            command_dict = {'setup': [files],
-                            'file_generator': [file_generator],
-                            'filters': [create_filter(self.parameters)],
-                            'file_info_builder': [file_info_builder],
-                            's3_handler': [s3_transfer_handler]}
+            command_dict = {
+                'setup': [files],
+                'file_generator': [file_generator],
+                'filters': [create_filter(self.parameters)],
+                'file_info_builder': [file_info_builder],
+                's3_handler': [s3_transfer_handler],
+            }
 
         files = command_dict['setup']
         while self.instructions:
@@ -1185,22 +1486,16 @@ class CommandArchitecture(object):
         return rc
 
     def _get_file_generator_request_parameters_skeleton(self):
-        return {
-            'HeadObject': {},
-            'ListObjects': {},
-            'ListObjectsV2': {}
-        }
+        return {'HeadObject': {}, 'ListObjects': {}, 'ListObjectsV2': {}}
 
     def _map_request_payer_params(self, request_parameters):
         RequestParamsMapper.map_head_object_params(
-            request_parameters['HeadObject'], {
-                'request_payer': self.parameters.get('request_payer')
-            }
+            request_parameters['HeadObject'],
+            {'request_payer': self.parameters.get('request_payer')},
         )
         RequestParamsMapper.map_list_objects_v2_params(
-            request_parameters['ListObjectsV2'], {
-                'request_payer': self.parameters.get('request_payer')
-            }
+            request_parameters['ListObjectsV2'],
+            {'request_payer': self.parameters.get('request_payer')},
         )
 
     def _map_sse_c_params(self, request_parameters, paths_type):
@@ -1211,13 +1506,15 @@ class CommandArchitecture(object):
         # not need any of these because it is used only for sync operations
         # which only use ListObjects which does not require HeadObject.
         RequestParamsMapper.map_head_object_params(
-            request_parameters['HeadObject'], self.parameters)
+            request_parameters['HeadObject'], self.parameters
+        )
         if paths_type == 's3s3':
             RequestParamsMapper.map_head_object_params(
-                request_parameters['HeadObject'], {
+                request_parameters['HeadObject'],
+                {
                     'sse_c': self.parameters.get('sse_c_copy_source'),
-                    'sse_c_key': self.parameters.get('sse_c_copy_source_key')
-                }
+                    'sse_c_key': self.parameters.get('sse_c_copy_source_key'),
+                },
             )
 
 
@@ -1231,13 +1528,15 @@ class CommandArchitecture(object):
 #    the various valid parameters. The difficult part right now is the
 #    parameters property right now is a dictionary that holds arbitrary
 #    key/value pairs making it difficult to know what is supported.
-class CommandParameters(object):
+class CommandParameters:
     """
     This class is used to do some initial error based on the
     parameters and arguments passed to the command line.
     """
-    def __init__(self, cmd, parameters, usage,
-                 session=None, parsed_globals=None):
+
+    def __init__(
+        self, cmd, parameters, usage, session=None, parsed_globals=None
+    ):
         """
         Stores command name and parameters.  Ensures that the ``dir_op`` flag
         is true if a certain command is being used.
@@ -1286,9 +1585,10 @@ class CommandParameters(object):
         self._validate_not_s3_express_bucket_for_sync()
 
     def _validate_not_s3_express_bucket_for_sync(self):
-        if self.cmd == 'sync' and \
-            (self._is_s3express_path(self.parameters['src']) or
-             self._is_s3express_path(self.parameters['dest'])):
+        if self.cmd == 'sync' and (
+            self._is_s3express_path(self.parameters['src'])
+            or self._is_s3express_path(self.parameters['dest'])
+        ):
             raise ParamValidationError(
                 "Cannot use sync command with a directory bucket."
             )
@@ -1314,7 +1614,7 @@ class CommandParameters(object):
     def _validate_path_args(self):
         # If we're using a mv command, you can't copy the object onto itself.
         params = self.parameters
-        if self.cmd == 'mv' and params['paths_type']=='s3s3':
+        if self.cmd == 'mv' and params['paths_type'] == 's3s3':
             self._raise_if_mv_same_paths(params['src'], params['dest'])
             if self._should_validate_same_underlying_s3_paths():
                 self._validate_same_underlying_s3_paths()
@@ -1325,20 +1625,20 @@ class CommandParameters(object):
             self._raise_if_paths_type_incorrect_for_param(
                 CHECKSUM_ALGORITHM['name'],
                 params['paths_type'],
-                ['locals3', 's3s3'])
+                ['locals3', 's3s3'],
+            )
         if params.get('checksum_mode'):
             self._raise_if_paths_type_incorrect_for_param(
-                CHECKSUM_MODE['name'],
-                params['paths_type'],
-                ['s3local'])
+                CHECKSUM_MODE['name'], params['paths_type'], ['s3local']
+            )
 
         # If the user provided local path does not exist, hard fail because
         # we know that we will not be able to upload the file.
         if 'locals3' == params['paths_type'] and not params['is_stream']:
             if not os.path.exists(params['src']):
                 raise RuntimeError(
-                    'The user-provided path %s does not exist.' %
-                    params['src'])
+                    'The user-provided path %s does not exist.' % params['src']
+                )
         # If the operation is downloading to a directory that does not exist,
         # create the directories so no warnings are thrown during the syncing
         # process.
@@ -1362,19 +1662,27 @@ class CommandParameters(object):
 
     def _validate_same_s3_paths_enabled(self):
         validate_env_var = ensure_boolean(
-            os.environ.get('AWS_CLI_S3_MV_VALIDATE_SAME_S3_PATHS'))
-        return (self.parameters.get('validate_same_s3_paths') or
-                validate_env_var)
+            os.environ.get('AWS_CLI_S3_MV_VALIDATE_SAME_S3_PATHS')
+        )
+        return (
+            self.parameters.get('validate_same_s3_paths') or validate_env_var
+        )
 
     def _should_emit_validate_s3_paths_warning(self):
         is_same_key = self._same_key(
-            self.parameters['src'], self.parameters['dest'])
+            self.parameters['src'], self.parameters['dest']
+        )
         src_has_underlying_path = S3PathResolver.has_underlying_s3_path(
-            self.parameters['src'])
+            self.parameters['src']
+        )
         dest_has_underlying_path = S3PathResolver.has_underlying_s3_path(
-            self.parameters['dest'])
-        return (is_same_key and not self._validate_same_s3_paths_enabled() and
-                (src_has_underlying_path or dest_has_underlying_path))
+            self.parameters['dest']
+        )
+        return (
+            is_same_key
+            and not self._validate_same_s3_paths_enabled()
+            and (src_has_underlying_path or dest_has_underlying_path)
+        )
 
     def _emit_validate_s3_paths_warning(self):
         msg = (
@@ -1390,19 +1698,20 @@ class CommandParameters(object):
 
     def _should_validate_same_underlying_s3_paths(self):
         is_same_key = self._same_key(
-            self.parameters['src'], self.parameters['dest'])
+            self.parameters['src'], self.parameters['dest']
+        )
         return is_same_key and self._validate_same_s3_paths_enabled()
 
     def _validate_same_underlying_s3_paths(self):
         src_paths = S3PathResolver.from_session(
             self._session,
             self.parameters.get('source_region', self._parsed_globals.region),
-            self._parsed_globals.verify_ssl
+            self._parsed_globals.verify_ssl,
         ).resolve_underlying_s3_paths(self.parameters['src'])
         dest_paths = S3PathResolver.from_session(
             self._session,
             self._parsed_globals.region,
-            self._parsed_globals.verify_ssl
+            self._parsed_globals.verify_ssl,
         ).resolve_underlying_s3_paths(self.parameters['dest'])
         for src_path in src_paths:
             for dest_path in dest_paths:
@@ -1415,13 +1724,15 @@ class CommandParameters(object):
                 f"{self.parameters['src']} - {self.parameters['dest']}"
             )
 
-    def _raise_if_paths_type_incorrect_for_param(self, param, paths_type, allowed_paths):
+    def _raise_if_paths_type_incorrect_for_param(
+        self, param, paths_type, allowed_paths
+    ):
         if paths_type not in allowed_paths:
             expected_usage_map = {
                 'locals3': '<LocalPath> <S3Uri>',
                 's3s3': '<S3Uri> <S3Uri>',
                 's3local': '<S3Uri> <LocalPath>',
-                's3': '<S3Uri>'
+                's3': '<S3Uri>',
             }
             raise ParamValidationError(
                 f"Expected {param} parameter to be used with one of following path formats: "
@@ -1444,14 +1755,16 @@ class CommandParameters(object):
         This initial check ensures that the path types for the specified
         command is correct.
         """
-        template_type = {'s3s3': ['cp', 'sync', 'mv'],
-                         's3local': ['cp', 'sync', 'mv'],
-                         'locals3': ['cp', 'sync', 'mv'],
-                         's3': ['mb', 'rb', 'rm'],
-                         'local': [], 'locallocal': []}
+        template_type = {
+            's3s3': ['cp', 'sync', 'mv'],
+            's3local': ['cp', 'sync', 'mv'],
+            'locals3': ['cp', 'sync', 'mv'],
+            's3': ['mb', 'rb', 'rm'],
+            'local': [],
+            'locallocal': [],
+        }
         paths_type = ''
-        usage = "usage: aws s3 %s %s" % (self.cmd,
-                                         self.usage)
+        usage = "usage: aws s3 %s %s" % (self.cmd, self.usage)
         for i in range(len(paths)):
             if paths[i].startswith('s3://'):
                 paths_type = paths_type + 's3'
@@ -1472,8 +1785,9 @@ class CommandParameters(object):
         Adds endpoint_url to the parameters.
         """
         if 'endpoint_url' in parsed_globals:
-            self.parameters['endpoint_url'] = getattr(parsed_globals,
-                                                      'endpoint_url')
+            self.parameters['endpoint_url'] = getattr(
+                parsed_globals, 'endpoint_url'
+            )
         else:
             self.parameters['endpoint_url'] = None
 
@@ -1482,7 +1796,8 @@ class CommandParameters(object):
 
     def add_sign_request(self, parsed_globals):
         self.parameters['sign_request'] = getattr(
-            parsed_globals, 'sign_request', True)
+            parsed_globals, 'sign_request', True
+        )
 
     def add_page_size(self, parsed_args):
         self.parameters['page_size'] = getattr(parsed_args, 'page_size', None)
diff -pruN 2.23.6-1/awscli/customizations/s3/subscribers.py 2.31.35-1/awscli/customizations/s3/subscribers.py
--- 2.23.6-1/awscli/customizations/s3/subscribers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/subscribers.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,7 +20,6 @@ from s3transfer.subscribers import BaseS
 
 from awscli.customizations.s3 import utils
 
-
 LOGGER = logging.getLogger(__name__)
 
 
@@ -37,10 +36,10 @@ class OnDoneFilteredSubscriber(BaseSubsc
     It is really a convenience class so developers do not have to have
     to constantly remember to have a general try/except around future.result()
     """
+
     def on_done(self, future, **kwargs):
         future_exception = None
         try:
-
             future.result()
         except Exception as e:
             future_exception = e
@@ -62,6 +61,7 @@ class ProvideSizeSubscriber(BaseSubscrib
     """
     A subscriber which provides the transfer size before it's queued.
     """
+
     def __init__(self, size):
         self.size = size
 
@@ -73,12 +73,35 @@ class ProvideSizeSubscriber(BaseSubscrib
         else:
             LOGGER.debug(
                 'Not providing transfer size. Future: %s does not offer'
-                'the capability to notify the size of a transfer', future
+                'the capability to notify the size of a transfer',
+                future,
+            )
+
+
+class ProvideETagSubscriber(BaseSubscriber):
+    """
+    A subscriber which provides the object ETag before it's queued.
+    """
+
+    def __init__(self, etag):
+        self.etag = etag
+
+    def on_queued(self, future, **kwargs):
+        # The CRT transfer client does not support providing an expected
+        # ETag of an object. So only provide it if it is available.
+        if hasattr(future.meta, 'provide_object_etag'):
+            future.meta.provide_object_etag(self.etag)
+        else:
+            LOGGER.debug(
+                'Not providing object ETag. Future: %s does not offer'
+                'the capability to notify the ETag of an object',
+                future,
             )
 
 
 class DeleteSourceSubscriber(OnDoneFilteredSubscriber):
     """A subscriber which deletes the source of the transfer."""
+
     def _on_success(self, future):
         try:
             self._delete_source(future)
@@ -91,6 +114,7 @@ class DeleteSourceSubscriber(OnDoneFilte
 
 class DeleteSourceObjectSubscriber(DeleteSourceSubscriber):
     """A subscriber which deletes an object."""
+
     def __init__(self, client):
         self._client = client
 
@@ -104,16 +128,18 @@ class DeleteSourceObjectSubscriber(Delet
         call_args = future.meta.call_args
         delete_object_kwargs = {
             'Bucket': self._get_bucket(call_args),
-            'Key': self._get_key(call_args)
+            'Key': self._get_key(call_args),
         }
         if call_args.extra_args.get('RequestPayer'):
             delete_object_kwargs['RequestPayer'] = call_args.extra_args[
-                'RequestPayer']
+                'RequestPayer'
+            ]
         self._client.delete_object(**delete_object_kwargs)
 
 
 class DeleteCopySourceObjectSubscriber(DeleteSourceObjectSubscriber):
     """A subscriber which deletes the copy source."""
+
     def _get_bucket(self, call_args):
         return call_args.copy_source['Bucket']
 
@@ -123,6 +149,7 @@ class DeleteCopySourceObjectSubscriber(D
 
 class DeleteSourceFileSubscriber(DeleteSourceSubscriber):
     """A subscriber which deletes a file."""
+
     def _delete_source(self, future):
         os.remove(future.meta.call_args.fileobj)
 
@@ -146,6 +173,7 @@ class ProvideUploadContentTypeSubscriber
 
 class ProvideLastModifiedTimeSubscriber(OnDoneFilteredSubscriber):
     """Sets utime for a downloaded file"""
+
     def __init__(self, last_modified_time, result_queue):
         self._last_modified_time = last_modified_time
         self._result_queue = result_queue
@@ -159,13 +187,16 @@ class ProvideLastModifiedTimeSubscriber(
         except Exception as e:
             warning_message = (
                 'Successfully Downloaded %s but was unable to update the '
-                'last modified time. %s' % (filename, e))
+                'last modified time. %s' % (filename, e)
+            )
             self._result_queue.put(
-                utils.create_warning(filename, warning_message))
+                utils.create_warning(filename, warning_message)
+            )
 
 
 class DirectoryCreatorSubscriber(BaseSubscriber):
     """Creates a directory to download if it does not exist"""
+
     def on_queued(self, future, **kwargs):
         d = os.path.dirname(future.meta.call_args.fileobj)
         try:
@@ -174,18 +205,20 @@ class DirectoryCreatorSubscriber(BaseSub
         except OSError as e:
             if not e.errno == errno.EEXIST:
                 raise CreateDirectoryError(
-                    "Could not create directory %s: %s" % (d, e))
+                    "Could not create directory %s: %s" % (d, e)
+                )
 
 
-class CopyPropsSubscriberFactory(object):
+class CopyPropsSubscriberFactory:
     def __init__(self, client, transfer_config, cli_params):
         self._client = client
         self._transfer_config = transfer_config
         self._cli_params = cli_params
 
     def get_subscribers(self, fileinfo):
-        copy_props = self._cli_params.get(
-            'copy_props', 'default').replace('-', '_')
+        copy_props = self._cli_params.get('copy_props', 'default').replace(
+            '-', '_'
+        )
         return getattr(self, '_get_%s_subscribers' % copy_props)(fileinfo)
 
     def _get_none_subscribers(self, fileinfo):
@@ -197,16 +230,18 @@ class CopyPropsSubscriberFactory(object)
     def _get_metadata_directive_subscribers(self, fileinfo):
         return [
             self._create_metadata_directive_props_subscriber(fileinfo),
-            ReplaceTaggingDirectiveSubscriber()
+            ReplaceTaggingDirectiveSubscriber(),
         ]
 
     def _get_default_subscribers(self, fileinfo):
         return [
             self._create_metadata_directive_props_subscriber(fileinfo),
             SetTagsSubscriber(
-                self._client, self._transfer_config, self._cli_params,
+                self._client,
+                self._transfer_config,
+                self._cli_params,
                 source_client=fileinfo.source_client,
-            )
+            ),
         ]
 
     def _create_metadata_directive_props_subscriber(self, fileinfo):
@@ -216,8 +251,9 @@ class CopyPropsSubscriberFactory(object)
             'cli_params': self._cli_params,
         }
         if not self._cli_params.get('dir_op'):
-            subscriber_kwargs[
-                'head_object_response'] = fileinfo.associated_response_data
+            subscriber_kwargs['head_object_response'] = (
+                fileinfo.associated_response_data
+            )
         return SetMetadataDirectivePropsSubscriber(**subscriber_kwargs)
 
 
@@ -247,8 +283,9 @@ class SetMetadataDirectivePropsSubscribe
         'Metadata',
     ]
 
-    def __init__(self, client, transfer_config, cli_params,
-                 head_object_response=None):
+    def __init__(
+        self, client, transfer_config, cli_params, head_object_response=None
+    ):
         self._client = client
         self._transfer_config = transfer_config
         self._cli_params = cli_params
@@ -280,7 +317,8 @@ class SetMetadataDirectivePropsSubscribe
             'Key': copy_source['Key'],
         }
         utils.RequestParamsMapper.map_head_object_params(
-            head_object_params, self._cli_params)
+            head_object_params, self._cli_params
+        )
         return self._client.head_object(**head_object_params)
 
     def _inject_metadata_props(self, future, head_object_response):
@@ -333,19 +371,14 @@ class SetTagsSubscriber(OnDoneFilteredSu
             extra_args, self._cli_params
         )
         self._client.put_object_tagging(
-            Bucket=bucket,
-            Key=key,
-            Tagging={'TagSet': tag_set},
-            **extra_args
+            Bucket=bucket, Key=key, Tagging={'TagSet': tag_set}, **extra_args
         )
 
     def _delete_object(self, bucket, key):
-        params = {
-            'Bucket': bucket,
-            'Key': key
-        }
+        params = {'Bucket': bucket, 'Key': key}
         utils.RequestParamsMapper.map_delete_object_params(
-            params, self._cli_params)
+            params, self._cli_params
+        )
         self._client.delete_object(**params)
 
     def _get_bucket_key_from_copy_source(self, future):
@@ -358,16 +391,20 @@ class SetTagsSubscriber(OnDoneFilteredSu
             extra_args, self._cli_params
         )
         get_tags_response = self._source_client.get_object_tagging(
-            Bucket=bucket, Key=key, **extra_args)
+            Bucket=bucket, Key=key, **extra_args
+        )
         return get_tags_response['TagSet']
 
     def _fits_in_tagging_header(self, tagging_header):
-        return len(
-            tagging_header.encode('utf-8')) <= self._MAX_TAGGING_HEADER_SIZE
+        return (
+            len(tagging_header.encode('utf-8'))
+            <= self._MAX_TAGGING_HEADER_SIZE
+        )
 
     def _serialize_to_header_value(self, tags):
         return percent_encode_sequence(
-            [(tag['Key'], tag['Value']) for tag in tags])
+            [(tag['Key'], tag['Value']) for tag in tags]
+        )
 
     def _is_multipart_copy(self, future):
         return future.meta.size >= self._transfer_config.multipart_threshold
diff -pruN 2.23.6-1/awscli/customizations/s3/syncstrategy/base.py 2.31.35-1/awscli/customizations/s3/syncstrategy/base.py
--- 2.23.6-1/awscli/customizations/s3/syncstrategy/base.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/syncstrategy/base.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,14 +14,16 @@ import logging
 
 from awscli.customizations.exceptions import ParamValidationError
 
-
 LOG = logging.getLogger(__name__)
 
-VALID_SYNC_TYPES = ['file_at_src_and_dest', 'file_not_at_dest',
-                    'file_not_at_src']
+VALID_SYNC_TYPES = [
+    'file_at_src_and_dest',
+    'file_not_at_dest',
+    'file_not_at_src',
+]
 
 
-class BaseSync(object):
+class BaseSync:
     """Base sync strategy
 
     To create a new sync strategy, subclass from this class.
@@ -69,8 +71,7 @@ class BaseSync(object):
         if sync_type not in VALID_SYNC_TYPES:
             raise ParamValidationError(
                 "Unknown sync_type: %s.\n"
-                "Valid options are %s." %
-                (sync_type, VALID_SYNC_TYPES)
+                "Valid options are %s." % (sync_type, VALID_SYNC_TYPES)
             )
 
     @property
@@ -80,8 +81,7 @@ class BaseSync(object):
     def register_strategy(self, session):
         """Registers the sync strategy class to the given session."""
 
-        session.register('building-arg-table.s3_sync',
-                         self.add_sync_argument)
+        session.register('building-arg-table.s3_sync', self.add_sync_argument)
         session.register('choosing-s3-sync-strategy', self.use_sync_strategy)
 
     def determine_should_sync(self, src_file, dest_file):
@@ -118,7 +118,7 @@ class BaseSync(object):
             'file_not_at_dest': refers to ``src_file``
 
             'file_not_at_src': refers to ``dest_file``
-         """
+        """
 
         raise NotImplementedError("determine_should_sync")
 
@@ -187,8 +187,9 @@ class BaseSync(object):
 
         :param td: The difference between two datetime objects.
         """
-        return (td.microseconds + (td.seconds + td.days * 24 *
-                                   3600) * 10**6) / 10**6
+        return (
+            td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6
+        ) / 10**6
 
     def compare_size(self, src_file, dest_file):
         """
@@ -218,7 +219,6 @@ class BaseSync(object):
                 # at the source location.
                 return False
         elif cmd == "download":
-
             if self.total_seconds(delta) <= 0:
                 return True
             else:
@@ -228,7 +228,6 @@ class BaseSync(object):
 
 
 class SizeAndLastModifiedSync(BaseSync):
-
     def determine_should_sync(self, src_file, dest_file):
         same_size = self.compare_size(src_file, dest_file)
         same_last_modified_time = self.compare_time(src_file, dest_file)
@@ -236,9 +235,13 @@ class SizeAndLastModifiedSync(BaseSync):
         if should_sync:
             LOG.debug(
                 "syncing: %s -> %s, size: %s -> %s, modified time: %s -> %s",
-                src_file.src, src_file.dest,
-                src_file.size, dest_file.size,
-                src_file.last_update, dest_file.last_update)
+                src_file.src,
+                src_file.dest,
+                src_file.size,
+                dest_file.size,
+                src_file.last_update,
+                dest_file.last_update,
+            )
         return should_sync
 
 
@@ -255,6 +258,9 @@ class MissingFileSync(BaseSync):
         super(MissingFileSync, self).__init__(sync_type)
 
     def determine_should_sync(self, src_file, dest_file):
-        LOG.debug("syncing: %s -> %s, file does not exist at destination",
-                  src_file.src, src_file.dest)
+        LOG.debug(
+            "syncing: %s -> %s, file does not exist at destination",
+            src_file.src,
+            src_file.dest,
+        )
         return True
diff -pruN 2.23.6-1/awscli/customizations/s3/syncstrategy/delete.py 2.31.35-1/awscli/customizations/s3/syncstrategy/delete.py
--- 2.23.6-1/awscli/customizations/s3/syncstrategy/delete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/syncstrategy/delete.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,24 +14,29 @@ import logging
 
 from awscli.customizations.s3.syncstrategy.base import BaseSync
 
-
 LOG = logging.getLogger(__name__)
 
 
-DELETE = {'name': 'delete', 'action': 'store_true',
-          'help_text': (
-              "Files that exist in the destination but not in the source are "
-              "deleted during sync. Note that files excluded by filters are "
-              "excluded from deletion.")}
+DELETE = {
+    'name': 'delete',
+    'action': 'store_true',
+    'help_text': (
+        "Files that exist in the destination but not in the source are "
+        "deleted during sync. Note that files excluded by filters are "
+        "excluded from deletion."
+    ),
+}
 
 
 class DeleteSync(BaseSync):
-
     ARGUMENT = DELETE
 
     def determine_should_sync(self, src_file, dest_file):
         dest_file.operation_name = 'delete'
-        LOG.debug("syncing: (None) -> %s (remove), file does not "
-                  "exist at source (%s) and delete mode enabled",
-                  dest_file.src, dest_file.dest)
+        LOG.debug(
+            "syncing: (None) -> %s (remove), file does not "
+            "exist at source (%s) and delete mode enabled",
+            dest_file.src,
+            dest_file.dest,
+        )
         return True
diff -pruN 2.23.6-1/awscli/customizations/s3/syncstrategy/exacttimestamps.py 2.31.35-1/awscli/customizations/s3/syncstrategy/exacttimestamps.py
--- 2.23.6-1/awscli/customizations/s3/syncstrategy/exacttimestamps.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/syncstrategy/exacttimestamps.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,21 +14,23 @@ import logging
 
 from awscli.customizations.s3.syncstrategy.base import SizeAndLastModifiedSync
 
-
 LOG = logging.getLogger(__name__)
 
 
-EXACT_TIMESTAMPS = {'name': 'exact-timestamps', 'action': 'store_true',
-                    'help_text': (
-                        'When syncing from S3 to local, same-sized '
-                        'items will be ignored only when the timestamps '
-                        'match exactly. The default behavior is to ignore '
-                        'same-sized items unless the local version is newer '
-                        'than the S3 version.')}
+EXACT_TIMESTAMPS = {
+    'name': 'exact-timestamps',
+    'action': 'store_true',
+    'help_text': (
+        'When syncing from S3 to local, same-sized '
+        'items will be ignored only when the timestamps '
+        'match exactly. The default behavior is to ignore '
+        'same-sized items unless the local version is newer '
+        'than the S3 version.'
+    ),
+}
 
 
 class ExactTimestampsSync(SizeAndLastModifiedSync):
-
     ARGUMENT = EXACT_TIMESTAMPS
 
     def compare_time(self, src_file, dest_file):
@@ -39,5 +41,6 @@ class ExactTimestampsSync(SizeAndLastMod
         if cmd == 'download':
             return self.total_seconds(delta) == 0
         else:
-            return super(ExactTimestampsSync, self).compare_time(src_file,
-                                                                 dest_file)
+            return super(ExactTimestampsSync, self).compare_time(
+                src_file, dest_file
+            )
diff -pruN 2.23.6-1/awscli/customizations/s3/syncstrategy/register.py 2.31.35-1/awscli/customizations/s3/syncstrategy/register.py
--- 2.23.6-1/awscli/customizations/s3/syncstrategy/register.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/syncstrategy/register.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.s3.syncstrategy.sizeonly import SizeOnlySync
-from awscli.customizations.s3.syncstrategy.exacttimestamps import \
-    ExactTimestampsSync
 from awscli.customizations.s3.syncstrategy.delete import DeleteSync
+from awscli.customizations.s3.syncstrategy.exacttimestamps import (
+    ExactTimestampsSync,
+)
+from awscli.customizations.s3.syncstrategy.sizeonly import SizeOnlySync
 
 
-def register_sync_strategy(session, strategy_cls,
-                           sync_type='file_at_src_and_dest'):
+def register_sync_strategy(
+    session, strategy_cls, sync_type='file_at_src_and_dest'
+):
     """Registers a single sync strategy
 
     :param session: The session that the sync strategy is being registered to.
diff -pruN 2.23.6-1/awscli/customizations/s3/syncstrategy/sizeonly.py 2.31.35-1/awscli/customizations/s3/syncstrategy/sizeonly.py
--- 2.23.6-1/awscli/customizations/s3/syncstrategy/sizeonly.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/syncstrategy/sizeonly.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,24 +14,30 @@ import logging
 
 from awscli.customizations.s3.syncstrategy.base import BaseSync
 
-
 LOG = logging.getLogger(__name__)
 
 
-SIZE_ONLY = {'name': 'size-only', 'action': 'store_true',
-             'help_text': (
-                 'Makes the size of each key the only criteria used to '
-                 'decide whether to sync from source to destination.')}
+SIZE_ONLY = {
+    'name': 'size-only',
+    'action': 'store_true',
+    'help_text': (
+        'Makes the size of each key the only criteria used to '
+        'decide whether to sync from source to destination.'
+    ),
+}
 
 
 class SizeOnlySync(BaseSync):
-
     ARGUMENT = SIZE_ONLY
 
     def determine_should_sync(self, src_file, dest_file):
         same_size = self.compare_size(src_file, dest_file)
         should_sync = not same_size
         if should_sync:
-            LOG.debug("syncing: %s -> %s, size_changed: %s",
-                      src_file.src, src_file.dest, not same_size)
+            LOG.debug(
+                "syncing: %s -> %s, size_changed: %s",
+                src_file.src,
+                src_file.dest,
+                not same_size,
+            )
         return should_sync
diff -pruN 2.23.6-1/awscli/customizations/s3/transferconfig.py 2.31.35-1/awscli/customizations/s3/transferconfig.py
--- 2.23.6-1/awscli/customizations/s3/transferconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/transferconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,26 +10,31 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from s3transfer.manager import TransferConfig
-
-from awscli.customizations.s3 import constants
-from awscli.customizations.s3.utils import human_readable_to_int
 # If the user does not specify any overrides,
 # these are the default values we use for the s3 transfer
 # commands.
 import logging
 
+from botocore.utils import ensure_boolean
+from s3transfer.manager import TransferConfig
+
+from awscli.customizations.s3 import constants
+from awscli.customizations.s3.utils import human_readable_to_int
 
 LOGGER = logging.getLogger(__name__)
 
 DEFAULTS = {
-    'multipart_threshold': 8 * (1024 ** 2),
-    'multipart_chunksize': 8 * (1024 ** 2),
+    'multipart_threshold': 8 * (1024**2),
+    'multipart_chunksize': 8 * (1024**2),
     'max_concurrent_requests': 10,
     'max_queue_size': 1000,
     'max_bandwidth': None,
     'preferred_transfer_client': constants.AUTO_RESOLVE_TRANSFER_CLIENT,
     'target_bandwidth': None,
+    'io_chunksize': 256 * 1024,
+    'should_stream': None,
+    'disk_throughput': None,
+    'direct_io': None,
 }
 
 
@@ -37,13 +42,27 @@ class InvalidConfigError(Exception):
     pass
 
 
-class RuntimeConfig(object):
-
-    POSITIVE_INTEGERS = ['multipart_chunksize', 'multipart_threshold',
-                         'max_concurrent_requests', 'max_queue_size',
-                         'max_bandwidth', 'target_bandwidth']
-    HUMAN_READABLE_SIZES = ['multipart_chunksize', 'multipart_threshold']
-    HUMAN_READABLE_RATES = ['max_bandwidth', 'target_bandwidth']
+class RuntimeConfig:
+    POSITIVE_INTEGERS = [
+        'multipart_chunksize',
+        'multipart_threshold',
+        'max_concurrent_requests',
+        'max_queue_size',
+        'max_bandwidth',
+        'target_bandwidth',
+        'io_chunksize',
+        'disk_throughput',
+    ]
+    HUMAN_READABLE_SIZES = [
+        'multipart_chunksize',
+        'multipart_threshold',
+        'io_chunksize',
+    ]
+    HUMAN_READABLE_RATES = [
+        'max_bandwidth',
+        'target_bandwidth',
+        'disk_throughput',
+    ]
     SUPPORTED_CHOICES = {
         'preferred_transfer_client': [
             constants.AUTO_RESOLVE_TRANSFER_CLIENT,
@@ -56,6 +75,7 @@ class RuntimeConfig(object):
             'default': constants.CLASSIC_TRANSFER_CLIENT
         }
     }
+    BOOLEANS = ['should_stream', 'direct_io']
 
     @staticmethod
     def defaults():
@@ -77,6 +97,7 @@ class RuntimeConfig(object):
             runtime_config.update(kwargs)
         self._convert_human_readable_sizes(runtime_config)
         self._convert_human_readable_rates(runtime_config)
+        self._convert_booleans(runtime_config)
         self._resolve_choice_aliases(runtime_config)
         self._validate_config(runtime_config)
         return runtime_config
@@ -107,7 +128,14 @@ class RuntimeConfig(object):
                         'as an integer in terms of bytes per second '
                         '(e.g. 10485760) or a rate in terms of bytes '
                         'per second (e.g. 10MB/s or 800KB/s) or bits per '
-                        'second (e.g. 10Mb/s or 800Kb/s)' % value)
+                        'second (e.g. 10Mb/s or 800Kb/s)' % value
+                    )
+
+    def _convert_booleans(self, runtime_config):
+        for attr in self.BOOLEANS:
+            value = runtime_config.get(attr)
+            if value is not None:
+                runtime_config[attr] = ensure_boolean(value)
 
     def _human_readable_rate_to_int(self, value):
         # The human_readable_to_int() utility only supports integers (e.g. 1024)
@@ -145,7 +173,9 @@ class RuntimeConfig(object):
                 resolved_value = self.CHOICE_ALIASES[attr][current_value]
                 LOGGER.debug(
                     'Resolved %s configuration alias value "%s" to "%s"',
-                    attr, current_value, resolved_value
+                    attr,
+                    current_value,
+                    resolved_value,
                 )
                 runtime_config[attr] = resolved_value
 
@@ -173,7 +203,8 @@ class RuntimeConfig(object):
 
     def _error_positive_value(self, name, value):
         raise InvalidConfigError(
-            "Value for %s must be a positive integer: %s" % (name, value))
+            "Value for %s must be a positive integer: %s" % (name, value)
+        )
 
     def _error_invalid_choice(self, name, value):
         raise InvalidConfigError(
@@ -198,6 +229,7 @@ def create_transfer_config_from_runtime_
         'multipart_threshold': 'multipart_threshold',
         'multipart_chunksize': 'multipart_chunksize',
         'max_bandwidth': 'max_bandwidth',
+        'io_chunksize': 'io_chunksize',
     }
     kwargs = {}
     for key, value in runtime_config.items():
diff -pruN 2.23.6-1/awscli/customizations/s3/utils.py 2.31.35-1/awscli/customizations/s3/utils.py
--- 2.23.6-1/awscli/customizations/s3/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,19 +11,18 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import argparse
+import errno
 import logging
-from datetime import datetime
 import mimetypes
-import errno
 import os
 import re
-from collections import namedtuple, deque
+from collections import deque, namedtuple
+from datetime import datetime
 
 from dateutil.parser import parse
 from dateutil.tz import tzlocal, tzutc
 
-from awscli.compat import bytes_print
-from awscli.compat import queue
+from awscli.compat import bytes_print, queue
 from awscli.customizations.exceptions import ParamValidationError
 
 LOGGER = logging.getLogger(__name__)
@@ -31,16 +30,16 @@ HUMANIZE_SUFFIXES = ('KiB', 'MiB', 'GiB'
 EPOCH_TIME = datetime(1970, 1, 1, tzinfo=tzutc())
 # Maximum object size allowed in S3.
 # See: http://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html
-MAX_UPLOAD_SIZE = 5 * (1024 ** 4)
+MAX_UPLOAD_SIZE = 5 * (1024**4)
 SIZE_SUFFIX = {
     'kb': 1024,
-    'mb': 1024 ** 2,
-    'gb': 1024 ** 3,
-    'tb': 1024 ** 4,
+    'mb': 1024**2,
+    'gb': 1024**3,
+    'tb': 1024**4,
     'kib': 1024,
-    'mib': 1024 ** 2,
-    'gib': 1024 ** 3,
-    'tib': 1024 ** 4,
+    'mib': 1024**2,
+    'gib': 1024**3,
+    'tib': 1024**4,
 }
 _S3_ACCESSPOINT_TO_BUCKET_KEY_REGEX = re.compile(
     r'^(?P<bucket>arn:(aws).*:s3:[a-z\-0-9]*:[0-9]{12}:accesspoint[:/][^/]+)/?'
@@ -90,7 +89,7 @@ def human_readable_size(value):
         return '%d Bytes' % bytes_int
 
     for i, suffix in enumerate(HUMANIZE_SUFFIXES):
-        unit = base ** (i+2)
+        unit = base ** (i + 2)
         if round((bytes_int / unit) * base) < base:
             return '%.1f %s' % ((base * bytes_int / unit), suffix)
 
@@ -110,8 +109,7 @@ def human_readable_to_int(value):
         suffix = value[-3:].lower()
     else:
         suffix = value[-2:].lower()
-    has_size_identifier = (
-        len(value) >= 2 and suffix in SIZE_SUFFIX)
+    has_size_identifier = len(value) >= 2 and suffix in SIZE_SUFFIX
     if not has_size_identifier:
         try:
             return int(value)
@@ -119,7 +117,7 @@ def human_readable_to_int(value):
             raise ValueError("Invalid size value: %s" % value)
     else:
         multiplier = SIZE_SUFFIX[suffix]
-        return int(value[:-len(suffix)]) * multiplier
+        return int(value[: -len(suffix)]) * multiplier
 
 
 class AppendFilter(argparse.Action):
@@ -136,6 +134,7 @@ class AppendFilter(argparse.Action):
     appear later in the command line take preference over rulers that
     appear earlier.
     """
+
     def __call__(self, parser, namespace, values, option_string=None):
         filter_list = getattr(namespace, self.dest)
         if filter_list:
@@ -170,6 +169,7 @@ class StablePriorityQueue(queue.Queue):
     (least important) priority available.
 
     """
+
     def __init__(self, maxsize=0, max_priority=20):
         queue.Queue.__init__(self, maxsize=maxsize)
         self.priorities = [deque([]) for i in range(max_priority + 1)]
@@ -182,8 +182,10 @@ class StablePriorityQueue(queue.Queue):
         return size
 
     def _put(self, item):
-        priority = min(getattr(item, 'PRIORITY', self.default_priority),
-                        self.default_priority)
+        priority = min(
+            getattr(item, 'PRIORITY', self.default_priority),
+            self.default_priority,
+        )
         self.priorities[priority].append(item)
 
     def _get(self):
@@ -251,9 +253,10 @@ def get_file_stat(path):
     """
     try:
         stats = os.stat(path)
-    except IOError as e:
-        raise ValueError('Could not retrieve file stat of "%s": %s' % (
-            path, e))
+    except OSError as e:
+        raise ValueError(
+            'Could not retrieve file stat of "%s": %s' % (path, e)
+        )
 
     try:
         update_time = datetime.fromtimestamp(stats.st_mtime, tzlocal())
@@ -284,14 +287,15 @@ def find_dest_path_comp_key(files, src_p
     sep_table = {'s3': '/', 'local': os.sep}
 
     if files['dir_op']:
-        rel_path = src_path[len(src['path']):]
+        rel_path = src_path[len(src['path']) :]
     else:
         rel_path = src_path.split(sep_table[src_type])[-1]
     compare_key = rel_path.replace(sep_table[src_type], '/')
     if files['use_src_name']:
         dest_path = dest['path']
-        dest_path += rel_path.replace(sep_table[src_type],
-                                      sep_table[dest_type])
+        dest_path += rel_path.replace(
+            sep_table[src_type], sep_table[dest_type]
+        )
     else:
         dest_path = dest['path']
     return dest_path, compare_key
@@ -305,16 +309,18 @@ def create_warning(path, error_message,
     if skip_file:
         print_string = print_string + "Skipping file " + path + ". "
     print_string = print_string + error_message
-    warning_message = WarningResult(message=print_string, error=False,
-                                    warning=True)
+    warning_message = WarningResult(
+        message=print_string, error=False, warning=True
+    )
     return warning_message
 
 
-class StdoutBytesWriter(object):
+class StdoutBytesWriter:
     """
     This class acts as a file-like object that performs the bytes_print
     function on write.
     """
+
     def __init__(self, stdout=None):
         self._stdout = stdout
 
@@ -344,8 +350,9 @@ def guess_content_type(filename):
     # default guessed content type of None.
     except UnicodeDecodeError:
         LOGGER.debug(
-            'Unable to guess content type for %s due to '
-            'UnicodeDecodeError: ', filename, exc_info=True
+            'Unable to guess content type for %s due to UnicodeDecodeError: ',
+            filename,
+            exc_info=True,
         )
 
 
@@ -381,8 +388,9 @@ def set_file_utime(filename, desired_tim
         if e.errno != errno.EPERM:
             raise e
         raise SetFileUtimeError(
-            ("The file was downloaded, but attempting to modify the "
-             "utime of the file failed. Is the file owned by another user?"))
+            "The file was downloaded, but attempting to modify the "
+            "utime of the file failed. Is the file owned by another user?"
+        )
 
 
 class SetFileUtimeError(Exception):
@@ -393,15 +401,20 @@ def _date_parser(date_string):
     return parse(date_string).astimezone(tzlocal())
 
 
-class BucketLister(object):
+class BucketLister:
     """List keys in a bucket."""
+
     def __init__(self, client, date_parser=_date_parser):
         self._client = client
         self._date_parser = date_parser
 
-    def list_objects(self, bucket, prefix=None, page_size=None,
-                     extra_args=None):
-        kwargs = {'Bucket': bucket, 'PaginationConfig': {'PageSize': page_size}}
+    def list_objects(
+        self, bucket, prefix=None, page_size=None, extra_args=None
+    ):
+        kwargs = {
+            'Bucket': bucket,
+            'PaginationConfig': {'PageSize': page_size},
+        }
         if prefix is not None:
             kwargs['Prefix'] = prefix
         if extra_args is not None:
@@ -414,12 +427,14 @@ class BucketLister(object):
             for content in contents:
                 source_path = bucket + '/' + content['Key']
                 content['LastModified'] = self._date_parser(
-                    content['LastModified'])
+                    content['LastModified']
+                )
                 yield source_path, content
 
 
-class PrintTask(namedtuple('PrintTask',
-                          ['message', 'error', 'total_parts', 'warning'])):
+class PrintTask(
+    namedtuple('PrintTask', ['message', 'error', 'total_parts', 'warning'])
+):
     def __new__(cls, message, error=False, total_parts=None, warning=None):
         """
         :param message: An arbitrary string associated with the entry.   This
@@ -428,13 +443,15 @@ class PrintTask(namedtuple('PrintTask',
         :param total_parts: The total number of parts for multipart transfers.
         :param warning: Boolean indicating a warning
         """
-        return super(PrintTask, cls).__new__(cls, message, error, total_parts,
-                                             warning)
+        return super(PrintTask, cls).__new__(
+            cls, message, error, total_parts, warning
+        )
+
 
 WarningResult = PrintTask
 
 
-class RequestParamsMapper(object):
+class RequestParamsMapper:
     """A utility class that maps CLI params to request params
 
     Each method in the class maps to a particular operation and will set
@@ -462,6 +479,7 @@ class RequestParamsMapper(object):
     Note that existing parameters in ``request_params`` will be overriden if
     a parameter in ``cli_params`` maps to the existing parameter.
     """
+
     @classmethod
     def map_put_object_params(cls, request_params, cli_params):
         """Map CLI params to PutObject request params"""
@@ -498,7 +516,8 @@ class RequestParamsMapper(object):
         cls._auto_populate_metadata_directive(request_params)
         cls._set_sse_request_params(request_params, cli_params)
         cls._set_sse_c_and_copy_source_request_params(
-            request_params, cli_params)
+            request_params, cli_params
+        )
         cls._set_request_payer_param(request_params, cli_params)
         cls._set_checksum_algorithm_param(request_params, cli_params)
 
@@ -527,7 +546,8 @@ class RequestParamsMapper(object):
     def map_upload_part_copy_params(cls, request_params, cli_params):
         """Map CLI params to UploadPartCopy request params"""
         cls._set_sse_c_and_copy_source_request_params(
-            request_params, cli_params)
+            request_params, cli_params
+        )
         cls._set_request_payer_param(request_params, cli_params)
 
     @classmethod
@@ -551,7 +571,9 @@ class RequestParamsMapper(object):
     @classmethod
     def _set_checksum_algorithm_param(cls, request_params, cli_params):
         if cli_params.get('checksum_algorithm'):
-            request_params['ChecksumAlgorithm'] = cli_params['checksum_algorithm']
+            request_params['ChecksumAlgorithm'] = cli_params[
+                'checksum_algorithm'
+            ]
 
     @classmethod
     def _set_general_object_params(cls, request_params, cli_params):
@@ -567,7 +589,7 @@ class RequestParamsMapper(object):
             'content_disposition': 'ContentDisposition',
             'content_encoding': 'ContentEncoding',
             'content_language': 'ContentLanguage',
-            'expires': 'Expires'
+            'expires': 'Expires',
         }
         for cli_param_name in general_param_translation:
             if cli_params.get(cli_param_name):
@@ -608,21 +630,23 @@ class RequestParamsMapper(object):
 
     @classmethod
     def _auto_populate_metadata_directive(cls, request_params):
-        if request_params.get('Metadata') and \
-                not request_params.get('MetadataDirective'):
+        if request_params.get('Metadata') and not request_params.get(
+            'MetadataDirective'
+        ):
             request_params['MetadataDirective'] = 'REPLACE'
 
     @classmethod
     def _set_metadata_directive_param(cls, request_params, cli_params):
         if cli_params.get('metadata_directive'):
             request_params['MetadataDirective'] = cli_params[
-                'metadata_directive']
+                'metadata_directive'
+            ]
 
     @classmethod
     def _set_sse_request_params(cls, request_params, cli_params):
         if cli_params.get('sse'):
             request_params['ServerSideEncryption'] = cli_params['sse']
-        if  cli_params.get('sse_kms_key_id'):
+        if cli_params.get('sse_kms_key_id'):
             request_params['SSEKMSKeyId'] = cli_params['sse_kms_key_id']
 
     @classmethod
@@ -635,18 +659,21 @@ class RequestParamsMapper(object):
     def _set_sse_c_copy_source_request_params(cls, request_params, cli_params):
         if cli_params.get('sse_c_copy_source'):
             request_params['CopySourceSSECustomerAlgorithm'] = cli_params[
-                'sse_c_copy_source']
+                'sse_c_copy_source'
+            ]
             request_params['CopySourceSSECustomerKey'] = cli_params[
-                'sse_c_copy_source_key']
+                'sse_c_copy_source_key'
+            ]
 
     @classmethod
-    def _set_sse_c_and_copy_source_request_params(cls, request_params,
-                                                  cli_params):
+    def _set_sse_c_and_copy_source_request_params(
+        cls, request_params, cli_params
+    ):
         cls._set_sse_c_request_params(request_params, cli_params)
         cls._set_sse_c_copy_source_request_params(request_params, cli_params)
 
 
-class NonSeekableStream(object):
+class NonSeekableStream:
     """Wrap a file like object as a non seekable stream.
 
     This class is used to wrap an existing file like object
@@ -664,6 +691,7 @@ class NonSeekableStream(object):
     for certain that a fileobj is non seekable.
 
     """
+
     def __init__(self, fileobj):
         self._fileobj = fileobj
 
@@ -696,10 +724,12 @@ class S3PathResolver:
     def has_underlying_s3_path(self, path):
         bucket, _ = split_s3_bucket_key(path)
         return bool(
-            self._S3_ACCESSPOINT_ARN_TO_ACCOUNT_NAME_REGEX.match(bucket) or
-            self._S3_OUTPOST_ACCESSPOINT_ARN_TO_ACCOUNT_REGEX.match(bucket) or
-            self._S3_MRAP_ARN_TO_ACCOUNT_ALIAS_REGEX.match(bucket) or
-            bucket.endswith('-s3alias') or bucket.endswith('--op-s3'))
+            self._S3_ACCESSPOINT_ARN_TO_ACCOUNT_NAME_REGEX.match(bucket)
+            or self._S3_OUTPOST_ACCESSPOINT_ARN_TO_ACCOUNT_REGEX.match(bucket)
+            or self._S3_MRAP_ARN_TO_ACCOUNT_ALIAS_REGEX.match(bucket)
+            or bucket.endswith('-s3alias')
+            or bucket.endswith('--op-s3')
+        )
 
     @classmethod
     def from_session(cls, session, region, verify_ssl):
@@ -756,8 +786,7 @@ class S3PathResolver:
 
     def _get_access_point_bucket(self, account, name):
         return self._s3control_client.get_access_point(
-            AccountId=account,
-            Name=name
+            AccountId=account, Name=name
         )['Bucket']
 
     def _get_account_id(self):
diff -pruN 2.23.6-1/awscli/customizations/s3errormsg.py 2.31.35-1/awscli/customizations/s3errormsg.py
--- 2.23.6-1/awscli/customizations/s3errormsg.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3errormsg.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-"""Give better S3 error messages.
-"""
-
+"""Give better S3 error messages."""
 
 REGION_ERROR_MSG = (
     'You can fix this issue by explicitly providing the correct region '
@@ -54,8 +52,9 @@ def enhance_error_msg(parsed, **kwargs):
 
 
 def _is_sigv4_error_message(parsed):
-    return ('Please use AWS4-HMAC-SHA256' in
-            parsed.get('Error', {}).get('Message', ''))
+    return 'Please use AWS4-HMAC-SHA256' in parsed.get('Error', {}).get(
+        'Message', ''
+    )
 
 
 def _is_permanent_redirect_message(parsed):
@@ -63,5 +62,7 @@ def _is_permanent_redirect_message(parse
 
 
 def _is_kms_sigv4_error_message(parsed):
-    return ('AWS KMS managed keys require AWS Signature Version 4' in
-            parsed.get('Error', {}).get('Message', ''))
+    return (
+        'AWS KMS managed keys require AWS Signature Version 4'
+        in parsed.get('Error', {}).get('Message', '')
+    )
diff -pruN 2.23.6-1/awscli/customizations/s3events.py 2.31.35-1/awscli/customizations/s3events.py
--- 2.23.6-1/awscli/customizations/s3events.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3events.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """Add S3 specific event streaming output arg."""
-from awscli.arguments import CustomArgument
 
+from awscli.arguments import CustomArgument
 
 STREAM_HELP_TEXT = 'Filename where the records will be saved'
 
@@ -24,28 +24,29 @@ class DocSectionNotFoundError(Exception)
 def register_event_stream_arg(event_handlers):
     event_handlers.register(
         'building-argument-table.s3api.select-object-content',
-        add_event_stream_output_arg)
+        add_event_stream_output_arg,
+    )
 
     event_handlers.register_last(
-        'doc-output.s3api.select-object-content',
-        replace_event_stream_docs
+        'doc-output.s3api.select-object-content', replace_event_stream_docs
     )
 
 
 def register_document_expires_string(event_handlers):
-    event_handlers.register_last(
-        'doc-output.s3api',
-        document_expires_string
-    )
+    event_handlers.register_last('doc-output.s3api', document_expires_string)
 
 
-def add_event_stream_output_arg(argument_table, operation_model,
-                                session, **kwargs):
+def add_event_stream_output_arg(
+    argument_table, operation_model, session, **kwargs
+):
     argument_table['outfile'] = S3SelectStreamOutputArgument(
-        name='outfile', help_text=STREAM_HELP_TEXT,
-        cli_type_name='string', positional_arg=True,
+        name='outfile',
+        help_text=STREAM_HELP_TEXT,
+        cli_type_name='string',
+        positional_arg=True,
         stream_key=operation_model.output_shape.serialization['payload'],
-        session=session)
+        session=session,
+    )
 
 
 def replace_event_stream_docs(help_command, **kwargs):
@@ -59,10 +60,13 @@ def replace_event_stream_docs(help_comma
             # we should be raising something with a helpful error message.
             raise DocSectionNotFoundError(
                 'Could not find the "output" section for the command: %s'
-                % help_command)
+                % help_command
+            )
     doc.write('======\nOutput\n======\n')
-    doc.write("This command generates no output.  The selected "
-              "object content is written to the specified outfile.\n")
+    doc.write(
+        "This command generates no output.  The selected "
+        "object content is written to the specified outfile.\n"
+    )
 
 
 def document_expires_string(help_command, **kwargs):
@@ -81,7 +85,7 @@ def document_expires_string(help_command
         f'\n\n{" " * doc.style.indentation * doc.style.indent_width}',
         'ExpiresString -> (string)\n\n',
         '\tThe raw, unparsed value of the ``Expires`` field.',
-        f'\n\n{" " * doc.style.indentation * doc.style.indent_width}'
+        f'\n\n{" " * doc.style.indentation * doc.style.indent_width}',
     ]
 
     for idx, write in enumerate(deprecation_note_and_expires_string):
@@ -103,8 +107,9 @@ class S3SelectStreamOutputArgument(Custo
 
     def add_to_params(self, parameters, value):
         self._output_file = value
-        self._session.register('after-call.s3.SelectObjectContent',
-                               self.save_file)
+        self._session.register(
+            'after-call.s3.SelectObjectContent', self.save_file
+        )
 
     def save_file(self, parsed, **kwargs):
         # This method is hooked into after-call which fires
diff -pruN 2.23.6-1/awscli/customizations/s3uploader.py 2.31.35-1/awscli/customizations/s3uploader.py
--- 2.23.6-1/awscli/customizations/s3uploader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/s3uploader.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,14 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import hashlib
 import logging
-import threading
 import os
 import sys
+import threading
 
 import botocore
 import botocore.exceptions
+from botocore.compat import get_md5
 from s3transfer.manager import TransferManager
 from s3transfer.subscribers import BaseSubscriber
 
@@ -27,20 +27,31 @@ from awscli.compat import collections_ab
 LOG = logging.getLogger(__name__)
 
 
+def _get_checksum():
+    hashlib_params = {"usedforsecurity": False}
+    try:
+        checksum = get_md5(**hashlib_params)
+    except botocore.exceptions.MD5UnavailableError:
+        import hashlib
+        checksum = hashlib.sha256(**hashlib_params)
+    return checksum
+
+
 class NoSuchBucketError(Exception):
     def __init__(self, **kwargs):
         msg = self.fmt.format(**kwargs)
         Exception.__init__(self, msg)
         self.kwargs = kwargs
 
+    fmt = (
+        "S3 Bucket does not exist. "
+        "Execute the command to create a new bucket"
+        "\n"
+        "aws s3 mb s3://{bucket_name}"
+    )
 
-    fmt = ("S3 Bucket does not exist. "
-           "Execute the command to create a new bucket"
-           "\n"
-           "aws s3 mb s3://{bucket_name}")
 
-
-class S3Uploader(object):
+class S3Uploader:
     """
     Class to upload objects to S3 bucket that use versioning. If bucket
     does not already use versioning, this class will turn on versioning.
@@ -59,12 +70,15 @@ class S3Uploader(object):
             raise TypeError("Artifact metadata should be in dict type")
         self._artifact_metadata = val
 
-    def __init__(self, s3_client,
-                 bucket_name,
-                 prefix=None,
-                 kms_key_id=None,
-                 force_upload=False,
-                 transfer_manager=None):
+    def __init__(
+        self,
+        s3_client,
+        bucket_name,
+        prefix=None,
+        kms_key_id=None,
+        force_upload=False,
+        transfer_manager=None,
+    ):
         self.bucket_name = bucket_name
         self.prefix = prefix
         self.kms_key_id = kms_key_id or None
@@ -86,21 +100,20 @@ class S3Uploader(object):
         """
 
         if self.prefix and len(self.prefix) > 0:
-            remote_path = "{0}/{1}".format(self.prefix, remote_path)
+            remote_path = f"{self.prefix}/{remote_path}"
 
         # Check if a file with same data exists
         if not self.force_upload and self.file_exists(remote_path):
-            LOG.debug("File with same data already exists at {0}. "
-                      "Skipping upload".format(remote_path))
+            LOG.debug(
+                f"File with same data already exists at {remote_path}. "
+                "Skipping upload"
+            )
             return self.make_url(remote_path)
 
         try:
-
             # Default to regular server-side encryption unless customer has
             # specified their own KMS keys
-            additional_args = {
-                "ServerSideEncryption": "AES256"
-            }
+            additional_args = {"ServerSideEncryption": "AES256"}
 
             if self.kms_key_id:
                 additional_args["ServerSideEncryption"] = "aws:kms"
@@ -109,13 +122,16 @@ class S3Uploader(object):
             if self.artifact_metadata:
                 additional_args["Metadata"] = self.artifact_metadata
 
-            print_progress_callback = \
-                ProgressPercentage(file_name, remote_path)
-            future = self.transfer_manager.upload(file_name,
-                                                  self.bucket_name,
-                                                  remote_path,
-                                                  additional_args,
-                                                  [print_progress_callback])
+            print_progress_callback = ProgressPercentage(
+                file_name, remote_path
+            )
+            future = self.transfer_manager.upload(
+                file_name,
+                self.bucket_name,
+                remote_path,
+                additional_args,
+                [print_progress_callback],
+            )
             future.result()
 
             return self.make_url(remote_path)
@@ -128,7 +144,7 @@ class S3Uploader(object):
 
     def upload_with_dedup(self, file_name, extension=None):
         """
-        Makes and returns name of the S3 object based on the file's MD5 sum
+        Makes and returns name of the S3 object based on the file's checksum
 
         :param file_name: file to upload
         :param extension: String of file extension to append to the object
@@ -140,8 +156,8 @@ class S3Uploader(object):
         # and re-upload only if necessary. So the template points to same file
         # in multiple places, this will upload only once
 
-        filemd5 = self.file_checksum(file_name)
-        remote_path = filemd5
+        file_checksum = self.file_checksum(file_name)
+        remote_path = file_checksum
         if extension:
             remote_path = remote_path + "." + extension
 
@@ -157,8 +173,7 @@ class S3Uploader(object):
 
         try:
             # Find the object that matches this ETag
-            self.s3.head_object(
-                Bucket=self.bucket_name, Key=remote_path)
+            self.s3.head_object(Bucket=self.bucket_name, Key=remote_path)
             return True
         except botocore.exceptions.ClientError:
             # Either File does not exist or we are unable to get
@@ -166,13 +181,11 @@ class S3Uploader(object):
             return False
 
     def make_url(self, obj_path):
-        return "s3://{0}/{1}".format(
-            self.bucket_name, obj_path)
+        return f"s3://{self.bucket_name}/{obj_path}"
 
     def file_checksum(self, file_name):
-
         with open(file_name, "rb") as file_handle:
-            md5 = hashlib.md5()
+            checksum = _get_checksum()
             # Read file in chunks of 4096 bytes
             block_size = 4096
 
@@ -182,23 +195,23 @@ class S3Uploader(object):
 
             buf = file_handle.read(block_size)
             while len(buf) > 0:
-                md5.update(buf)
+                checksum.update(buf)
                 buf = file_handle.read(block_size)
 
             # Restore file cursor's position
             file_handle.seek(curpos)
 
-            return md5.hexdigest()
+            return checksum.hexdigest()
 
     def to_path_style_s3_url(self, key, version=None):
         """
-            This link describes the format of Path Style URLs
-            http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
+        This link describes the format of Path Style URLs
+        http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
         """
         base = self.s3.meta.endpoint_url
-        result = "{0}/{1}/{2}".format(base, self.bucket_name, key)
+        result = f"{base}/{self.bucket_name}/{key}"
         if version:
-            result = "{0}?versionId={1}".format(result, version)
+            result = f"{result}?versionId={version}"
 
         return result
 
@@ -214,14 +227,18 @@ class ProgressPercentage(BaseSubscriber)
         self._lock = threading.Lock()
 
     def on_progress(self, future, bytes_transferred, **kwargs):
-
         # To simplify we'll assume this is hooked up
         # to a single filename.
         with self._lock:
             self._seen_so_far += bytes_transferred
             percentage = (self._seen_so_far / self._size) * 100
             sys.stderr.write(
-                    "\rUploading to %s  %s / %s  (%.2f%%)" %
-                    (self._remote_path, self._seen_so_far,
-                     self._size, percentage))
+                "\rUploading to %s  %s / %s  (%.2f%%)"
+                % (
+                    self._remote_path,
+                    self._seen_so_far,
+                    self._size,
+                    percentage,
+                )
+            )
             sys.stderr.flush()
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/__init__.py 2.31.35-1/awscli/customizations/servicecatalog/__init__.py
--- 2.23.6-1/awscli/customizations/servicecatalog/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.customizations.servicecatalog.generate \
-    import GenerateCommand
+from awscli.customizations.servicecatalog.generate import GenerateCommand
 
 
 def register_servicecatalog_commands(event_emitter):
-    event_emitter.register('building-command-table.servicecatalog',
-                           inject_commands)
+    event_emitter.register(
+        'building-command-table.servicecatalog', inject_commands
+    )
 
 
 def inject_commands(command_table, session, **kwargs):
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/generate.py 2.31.35-1/awscli/customizations/servicecatalog/generate.py
--- 2.23.6-1/awscli/customizations/servicecatalog/generate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/generate.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,20 +13,23 @@
 
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.servicecatalog import helptext
-from awscli.customizations.servicecatalog.generateproduct \
-    import GenerateProductCommand
-from awscli.customizations.servicecatalog.generateprovisioningartifact \
-    import GenerateProvisioningArtifactCommand
+from awscli.customizations.servicecatalog.generateproduct import (
+    GenerateProductCommand,
+)
+from awscli.customizations.servicecatalog.generateprovisioningartifact import (
+    GenerateProvisioningArtifactCommand,
+)
 
 
 class GenerateCommand(BasicCommand):
     NAME = "generate"
     DESCRIPTION = helptext.GENERATE_COMMAND
     SUBCOMMANDS = [
-        {'name': 'product',
-         'command_class': GenerateProductCommand},
-        {'name': 'provisioning-artifact',
-         'command_class': GenerateProvisioningArtifactCommand}
+        {'name': 'product', 'command_class': GenerateProductCommand},
+        {
+            'name': 'provisioning-artifact',
+            'command_class': GenerateProvisioningArtifactCommand,
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/generatebase.py 2.31.35-1/awscli/customizations/servicecatalog/generatebase.py
--- 2.23.6-1/awscli/customizations/servicecatalog/generatebase.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/generatebase.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,29 +12,28 @@
 # language governing permissions and limitations under the License.
 
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.servicecatalog.utils \
-    import make_url, get_s3_path
 from awscli.customizations.s3uploader import S3Uploader
 from awscli.customizations.servicecatalog import exceptions
+from awscli.customizations.servicecatalog.utils import get_s3_path, make_url
 
 
 class GenerateBaseCommand(BasicCommand):
-
     def _run_main(self, parsed_args, parsed_globals):
         self.region = self.get_and_validate_region(parsed_globals)
         self.s3_client = self._session.create_client(
             's3',
             region_name=self.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
+        )
+        self.s3_uploader = S3Uploader(
+            self.s3_client, parsed_args.bucket_name, force_upload=True
         )
-        self.s3_uploader = S3Uploader(self.s3_client,
-                                      parsed_args.bucket_name,
-                                      force_upload=True)
         try:
-            self.s3_uploader.upload(parsed_args.file_path,
-                                get_s3_path(parsed_args.file_path))
-        except OSError as ex:
+            self.s3_uploader.upload(
+                parsed_args.file_path, get_s3_path(parsed_args.file_path)
+            )
+        except OSError:
             raise RuntimeError("%s cannot be found" % parsed_args.file_path)
 
     def get_and_validate_region(self, parsed_globals):
@@ -43,11 +42,9 @@ class GenerateBaseCommand(BasicCommand):
             region = self._session.get_config_variable('region')
         if region not in self._session.get_available_regions('servicecatalog'):
             raise exceptions.InvalidParametersException(
-                message="Region {0} is not supported".format(
-                    parsed_globals.region))
+                message=f"Region {parsed_globals.region} is not supported"
+            )
         return region
 
     def create_s3_url(self, bucket_name, file_path):
-        return make_url(self.region,
-                        bucket_name,
-                        get_s3_path(file_path))
+        return make_url(self.region, bucket_name, get_s3_path(file_path))
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/generateproduct.py 2.31.35-1/awscli/customizations/servicecatalog/generateproduct.py
--- 2.23.6-1/awscli/customizations/servicecatalog/generateproduct.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/generateproduct.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,13 @@
 
 import sys
 
-from awscli.customizations.servicecatalog import helptext
-from awscli.customizations.servicecatalog.generatebase \
-    import GenerateBaseCommand
 from botocore.compat import json
 
+from awscli.customizations.servicecatalog import helptext
+from awscli.customizations.servicecatalog.generatebase import (
+    GenerateBaseCommand,
+)
+
 
 class GenerateProductCommand(GenerateBaseCommand):
     NAME = "product"
@@ -26,71 +28,66 @@ class GenerateProductCommand(GenerateBas
         {
             'name': 'product-name',
             'required': True,
-            'help_text': helptext.PRODUCT_NAME
+            'help_text': helptext.PRODUCT_NAME,
         },
         {
             'name': 'product-owner',
             'required': True,
-            'help_text': helptext.OWNER
+            'help_text': helptext.OWNER,
         },
         {
             'name': 'product-type',
             'required': True,
             'help_text': helptext.PRODUCT_TYPE,
-            'choices': ['CLOUD_FORMATION_TEMPLATE', 'MARKETPLACE']
+            'choices': ['CLOUD_FORMATION_TEMPLATE', 'MARKETPLACE'],
         },
         {
             'name': 'product-description',
             'required': False,
-            'help_text': helptext.PRODUCT_DESCRIPTION
+            'help_text': helptext.PRODUCT_DESCRIPTION,
         },
         {
             'name': 'product-distributor',
             'required': False,
-            'help_text': helptext.DISTRIBUTOR
+            'help_text': helptext.DISTRIBUTOR,
         },
         {
             'name': 'tags',
             'required': False,
-            'schema': {
-                'type': 'array',
-                'items': {
-                    'type': 'string'
-                }
-            },
+            'schema': {'type': 'array', 'items': {'type': 'string'}},
             'default': [],
             'synopsis': '--tags Key=key1,Value=value1 Key=key2,Value=value2',
-            'help_text': helptext.TAGS
+            'help_text': helptext.TAGS,
         },
         {
             'name': 'file-path',
             'required': True,
-            'help_text': helptext.FILE_PATH
+            'help_text': helptext.FILE_PATH,
         },
         {
             'name': 'bucket-name',
             'required': True,
-            'help_text': helptext.BUCKET_NAME
+            'help_text': helptext.BUCKET_NAME,
         },
         {
             'name': 'support-description',
             'required': False,
-            'help_text': helptext.SUPPORT_DESCRIPTION
+            'help_text': helptext.SUPPORT_DESCRIPTION,
         },
         {
             'name': 'support-email',
             'required': False,
-            'help_text': helptext.SUPPORT_EMAIL
+            'help_text': helptext.SUPPORT_EMAIL,
         },
         {
             'name': 'provisioning-artifact-name',
             'required': True,
-            'help_text': helptext.PA_NAME
+            'help_text': helptext.PA_NAME,
         },
         {
             'name': 'provisioning-artifact-description',
             'required': True,
-            'help_text': helptext.PA_DESCRIPTION
+            'help_text': helptext.PA_DESCRIPTION,
         },
         {
             'name': 'provisioning-artifact-type',
@@ -99,27 +96,30 @@ class GenerateProductCommand(GenerateBas
             'choices': [
                 'CLOUD_FORMATION_TEMPLATE',
                 'MARKETPLACE_AMI',
-                'MARKETPLACE_CAR'
-            ]
-        }
+                'MARKETPLACE_CAR',
+            ],
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
-        super(GenerateProductCommand, self)._run_main(parsed_args,
-                                                      parsed_globals)
+        super(GenerateProductCommand, self)._run_main(
+            parsed_args, parsed_globals
+        )
         self.region = self.get_and_validate_region(parsed_globals)
 
-        self.s3_url = self.create_s3_url(parsed_args.bucket_name,
-                                         parsed_args.file_path)
+        self.s3_url = self.create_s3_url(
+            parsed_args.bucket_name, parsed_args.file_path
+        )
         self.scs_client = self._session.create_client(
-            'servicecatalog', region_name=self.region,
+            'servicecatalog',
+            region_name=self.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
 
-        response = self.create_product(self.build_args(parsed_args,
-                                                       self.s3_url),
-                                       parsed_globals)
+        response = self.create_product(
+            self.build_args(parsed_args, self.s3_url), parsed_globals
+        )
         sys.stdout.write(json.dumps(response, indent=2, ensure_ascii=False))
 
         return 0
@@ -145,11 +145,9 @@ class GenerateProductCommand(GenerateBas
             "ProvisioningArtifactParameters": {
                 'Name': parsed_args.provisioning_artifact_name,
                 'Description': parsed_args.provisioning_artifact_description,
-                'Info': {
-                    'LoadTemplateFromURL': s3_url
-                },
-                'Type': parsed_args.provisioning_artifact_type
-            }
+                'Info': {'LoadTemplateFromURL': s3_url},
+                'Type': parsed_args.provisioning_artifact_type,
+            },
         }
 
         # Non-required args
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/generateprovisioningartifact.py 2.31.35-1/awscli/customizations/servicecatalog/generateprovisioningartifact.py
--- 2.23.6-1/awscli/customizations/servicecatalog/generateprovisioningartifact.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/generateprovisioningartifact.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,13 @@
 
 import sys
 
-from awscli.customizations.servicecatalog import helptext
-from awscli.customizations.servicecatalog.generatebase \
-    import GenerateBaseCommand
 from botocore.compat import json
 
+from awscli.customizations.servicecatalog import helptext
+from awscli.customizations.servicecatalog.generatebase import (
+    GenerateBaseCommand,
+)
+
 
 class GenerateProvisioningArtifactCommand(GenerateBaseCommand):
     NAME = 'provisioning-artifact'
@@ -26,22 +28,22 @@ class GenerateProvisioningArtifactComman
         {
             'name': 'file-path',
             'required': True,
-            'help_text': helptext.FILE_PATH
+            'help_text': helptext.FILE_PATH,
         },
         {
             'name': 'bucket-name',
             'required': True,
-            'help_text': helptext.BUCKET_NAME
+            'help_text': helptext.BUCKET_NAME,
         },
         {
             'name': 'provisioning-artifact-name',
             'required': True,
-            'help_text': helptext.PA_NAME
+            'help_text': helptext.PA_NAME,
         },
         {
             'name': 'provisioning-artifact-description',
             'required': True,
-            'help_text': helptext.PA_DESCRIPTION
+            'help_text': helptext.PA_DESCRIPTION,
         },
         {
             'name': 'provisioning-artifact-type',
@@ -50,31 +52,33 @@ class GenerateProvisioningArtifactComman
             'choices': [
                 'CLOUD_FORMATION_TEMPLATE',
                 'MARKETPLACE_AMI',
-                'MARKETPLACE_CAR'
-            ]
+                'MARKETPLACE_CAR',
+            ],
         },
         {
             'name': 'product-id',
             'required': True,
-            'help_text': helptext.PRODUCT_ID
-        }
+            'help_text': helptext.PRODUCT_ID,
+        },
     ]
 
     def _run_main(self, parsed_args, parsed_globals):
         super(GenerateProvisioningArtifactCommand, self)._run_main(
-            parsed_args, parsed_globals)
+            parsed_args, parsed_globals
+        )
         self.region = self.get_and_validate_region(parsed_globals)
 
-        self.s3_url = self.create_s3_url(parsed_args.bucket_name,
-                                         parsed_args.file_path)
+        self.s3_url = self.create_s3_url(
+            parsed_args.bucket_name, parsed_args.file_path
+        )
         self.scs_client = self._session.create_client(
-            'servicecatalog', region_name=self.region,
+            'servicecatalog',
+            region_name=self.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
 
-        response = self.create_provisioning_artifact(parsed_args,
-                                                     self.s3_url)
+        response = self.create_provisioning_artifact(parsed_args, self.s3_url)
 
         sys.stdout.write(json.dumps(response, indent=2, ensure_ascii=False))
 
@@ -86,11 +90,9 @@ class GenerateProvisioningArtifactComman
             Parameters={
                 'Name': parsed_args.provisioning_artifact_name,
                 'Description': parsed_args.provisioning_artifact_description,
-                'Info': {
-                    'LoadTemplateFromURL': s3_url
-                },
-                'Type': parsed_args.provisioning_artifact_type
-            }
+                'Info': {'LoadTemplateFromURL': s3_url},
+                'Type': parsed_args.provisioning_artifact_type,
+            },
         )
 
         if 'ResponseMetadata' in response:
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/helptext.py 2.31.35-1/awscli/customizations/servicecatalog/helptext.py
--- 2.23.6-1/awscli/customizations/servicecatalog/helptext.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/helptext.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,10 @@
 
 TAGS = "Tags to associate with the new product."
 
-BUCKET_NAME = ("Name of the S3 bucket name where the CloudFormation "
-               "template will be uploaded to")
+BUCKET_NAME = (
+    "Name of the S3 bucket name where the CloudFormation "
+    "template will be uploaded to"
+)
 
 SUPPORT_DESCRIPTION = "Support information about the product"
 
@@ -39,15 +41,21 @@ PRODUCT_TYPE = "The type of the product
 
 PRODUCT_DESCRIPTION = "The text description of the product"
 
-PRODUCT_COMMAND_DESCRIPTION = ("Create a new product using a CloudFormation "
-                               "template specified as a local file path")
-
-PA_COMMAND_DESCRIPTION = ("Create a new provisioning artifact for the "
-                          "specified product using a CloudFormation template "
-                          "specified as a local file path")
-
-GENERATE_COMMAND = ("Generate a Service Catalog product or provisioning "
-                    "artifact using a CloudFormation template specified "
-                    "as a local file path")
+PRODUCT_COMMAND_DESCRIPTION = (
+    "Create a new product using a CloudFormation "
+    "template specified as a local file path"
+)
+
+PA_COMMAND_DESCRIPTION = (
+    "Create a new provisioning artifact for the "
+    "specified product using a CloudFormation template "
+    "specified as a local file path"
+)
+
+GENERATE_COMMAND = (
+    "Generate a Service Catalog product or provisioning "
+    "artifact using a CloudFormation template specified "
+    "as a local file path"
+)
 
 FILE_PATH = "A local file path that references the CloudFormation template"
diff -pruN 2.23.6-1/awscli/customizations/servicecatalog/utils.py 2.31.35-1/awscli/customizations/servicecatalog/utils.py
--- 2.23.6-1/awscli/customizations/servicecatalog/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/servicecatalog/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,16 +16,16 @@ import os
 
 def make_url(region, bucket_name, obj_path, version=None):
     """
-        This link describes the format of Path Style URLs
-        http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
+    This link describes the format of Path Style URLs
+    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
     """
     base = "https://s3.amazonaws.com"
     if region and region != "us-east-1":
-        base = "https://s3-{0}.amazonaws.com".format(region)
+        base = f"https://s3-{region}.amazonaws.com"
 
-    result = "{0}/{1}/{2}".format(base, bucket_name, obj_path)
+    result = f"{base}/{bucket_name}/{obj_path}"
     if version:
-        result = "{0}?versionId={1}".format(result, version)
+        result = f"{result}?versionId={version}"
 
     return result
 
diff -pruN 2.23.6-1/awscli/customizations/sessendemail.py 2.31.35-1/awscli/customizations/sessendemail.py
--- 2.23.6-1/awscli/customizations/sessendemail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sessendemail.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,52 +22,61 @@ aws ses send-email --subject SUBJECT --f
 
 """
 
-from awscli.customizations import utils
 from awscli.arguments import CustomArgument
+from awscli.customizations import utils
 from awscli.customizations.utils import validate_mutually_exclusive_handler
 
-
-TO_HELP = ('The email addresses of the primary recipients.  '
-           'You can specify multiple recipients as space-separated values')
-CC_HELP = ('The email addresses of copy recipients (Cc).  '
-           'You can specify multiple recipients as space-separated values')
-BCC_HELP = ('The email addresses of blind-carbon-copy recipients (Bcc).  '
-            'You can specify multiple recipients as space-separated values')
+TO_HELP = (
+    'The email addresses of the primary recipients.  '
+    'You can specify multiple recipients as space-separated values'
+)
+CC_HELP = (
+    'The email addresses of copy recipients (Cc).  '
+    'You can specify multiple recipients as space-separated values'
+)
+BCC_HELP = (
+    'The email addresses of blind-carbon-copy recipients (Bcc).  '
+    'You can specify multiple recipients as space-separated values'
+)
 SUBJECT_HELP = 'The subject of the message'
 TEXT_HELP = 'The raw text body of the message'
 HTML_HELP = 'The HTML body of the message'
 
 
 def register_ses_send_email(event_handler):
-    event_handler.register('building-argument-table.ses.send-email',
-                           _promote_args)
+    event_handler.register(
+        'building-argument-table.ses.send-email', _promote_args
+    )
     event_handler.register(
         'operation-args-parsed.ses.send-email',
         validate_mutually_exclusive_handler(
-            ['destination'], ['to', 'cc', 'bcc']))
+            ['destination'], ['to', 'cc', 'bcc']
+        ),
+    )
     event_handler.register(
         'operation-args-parsed.ses.send-email',
-        validate_mutually_exclusive_handler(
-            ['message'], ['text', 'html']))
+        validate_mutually_exclusive_handler(['message'], ['text', 'html']),
+    )
 
 
 def _promote_args(argument_table, **kwargs):
     argument_table['message'].required = False
     argument_table['destination'].required = False
-    utils.rename_argument(argument_table, 'source',
-                          new_name='from')
+    utils.rename_argument(argument_table, 'source', new_name='from')
     argument_table['to'] = AddressesArgument(
-        'to', 'ToAddresses', help_text=TO_HELP)
+        'to', 'ToAddresses', help_text=TO_HELP
+    )
     argument_table['cc'] = AddressesArgument(
-        'cc', 'CcAddresses', help_text=CC_HELP)
+        'cc', 'CcAddresses', help_text=CC_HELP
+    )
     argument_table['bcc'] = AddressesArgument(
-        'bcc', 'BccAddresses', help_text=BCC_HELP)
+        'bcc', 'BccAddresses', help_text=BCC_HELP
+    )
     argument_table['subject'] = BodyArgument(
-        'subject', 'Subject', help_text=SUBJECT_HELP)
-    argument_table['text'] = BodyArgument(
-        'text', 'Text', help_text=TEXT_HELP)
-    argument_table['html'] = BodyArgument(
-        'html', 'Html', help_text=HTML_HELP)
+        'subject', 'Subject', help_text=SUBJECT_HELP
+    )
+    argument_table['text'] = BodyArgument('text', 'Text', help_text=TEXT_HELP)
+    argument_table['html'] = BodyArgument('html', 'Html', help_text=HTML_HELP)
 
 
 def _build_destination(params, key, value):
@@ -88,11 +97,21 @@ def _build_message(params, key, value):
 
 
 class AddressesArgument(CustomArgument):
-
-    def __init__(self, name, json_key, help_text='', dest=None, default=None,
-                 action=None, required=None, choices=None, cli_type_name=None):
-        super(AddressesArgument, self).__init__(name=name, help_text=help_text,
-                                                required=required, nargs='+')
+    def __init__(
+        self,
+        name,
+        json_key,
+        help_text='',
+        dest=None,
+        default=None,
+        action=None,
+        required=None,
+        choices=None,
+        cli_type_name=None,
+    ):
+        super(AddressesArgument, self).__init__(
+            name=name, help_text=help_text, required=required, nargs='+'
+        )
         self._json_key = json_key
 
     def add_to_params(self, parameters, value):
@@ -101,13 +120,12 @@ class AddressesArgument(CustomArgument):
 
 
 class BodyArgument(CustomArgument):
-
     def __init__(self, name, json_key, help_text='', required=None):
-        super(BodyArgument, self).__init__(name=name, help_text=help_text,
-                                           required=required)
+        super(BodyArgument, self).__init__(
+            name=name, help_text=help_text, required=required
+        )
         self._json_key = json_key
 
     def add_to_params(self, parameters, value):
         if value:
             _build_message(parameters, self._json_key, value)
-
diff -pruN 2.23.6-1/awscli/customizations/sessionmanager.py 2.31.35-1/awscli/customizations/sessionmanager.py
--- 2.23.6-1/awscli/customizations/sessionmanager.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sessionmanager.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import logging
-import json
 import errno
+import json
+import logging
 import os
 import re
-
 from subprocess import check_call, check_output
+
+from awscli.clidriver import CLIOperationCaller, ServiceOperation
 from awscli.compat import ignore_user_entered_signals
-from awscli.clidriver import ServiceOperation, CLIOperationCaller
 
 logger = logging.getLogger(__name__)
 
@@ -26,13 +26,14 @@ ERROR_MESSAGE = (
     'SessionManagerPlugin is not found. ',
     'Please refer to SessionManager Documentation here: ',
     'http://docs.aws.amazon.com/console/systems-manager/',
-    'session-manager-plugin-not-found'
+    'session-manager-plugin-not-found',
 )
 
 
 def register_ssm_session(event_handlers):
-    event_handlers.register('building-command-table.ssm',
-                            add_custom_start_session)
+    event_handlers.register(
+        'building-command-table.ssm', add_custom_start_session
+    )
 
 
 def add_custom_start_session(session, command_table, **kwargs):
@@ -40,8 +41,9 @@ def add_custom_start_session(session, co
         name='start-session',
         parent_name='ssm',
         session=session,
-        operation_model=session.get_service_model(
-            'ssm').operation_model('StartSession'),
+        operation_model=session.get_service_model('ssm').operation_model(
+            'StartSession'
+        ),
         operation_caller=StartSessionCaller(session),
     )
 
@@ -84,8 +86,7 @@ class VersionRequirement:
 
 class StartSessionCommand(ServiceOperation):
     def create_help_command(self):
-        help_command = super(
-            StartSessionCommand, self).create_help_command()
+        help_command = super(StartSessionCommand, self).create_help_command()
         # Change the output shape because the command provides no output.
         self._operation_model.output_shape = None
         return help_command
@@ -95,12 +96,13 @@ class StartSessionCaller(CLIOperationCal
     LAST_PLUGIN_VERSION_WITHOUT_ENV_VAR = "1.2.497.0"
     DEFAULT_SSM_ENV_NAME = "AWS_SSM_START_SESSION_RESPONSE"
 
-    def invoke(self, service_name, operation_name, parameters,
-               parsed_globals):
+    def invoke(self, service_name, operation_name, parameters, parsed_globals):
         client = self._session.create_client(
-            service_name, region_name=parsed_globals.region,
+            service_name,
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
         response = client.start_session(**parameters)
         session_id = response['SessionId']
         region_name = client.meta.region_name
@@ -108,8 +110,11 @@ class StartSessionCaller(CLIOperationCal
         # to fetch same profile credentials to make an api call in the plugin.
         # If --profile flag is configured, pass it to Session Manager plugin.
         # If not, set empty string.
-        profile_name = parsed_globals.profile \
-            if parsed_globals.profile is not None else ''
+        profile_name = (
+            parsed_globals.profile
+            if parsed_globals.profile is not None
+            else ''
+        )
         endpoint_url = client.meta.endpoint_url
         ssm_env_name = self.DEFAULT_SSM_ENV_NAME
 
@@ -147,19 +152,25 @@ class StartSessionCaller(CLIOperationCal
             # and handling in there
             with ignore_user_entered_signals():
                 # call executable with necessary input
-                check_call(["session-manager-plugin",
-                            start_session_response,
-                            region_name,
-                            "StartSession",
-                            profile_name,
-                            json.dumps(parameters),
-                            endpoint_url], env=env)
+                check_call(
+                    [
+                        "session-manager-plugin",
+                        start_session_response,
+                        region_name,
+                        "StartSession",
+                        profile_name,
+                        json.dumps(parameters),
+                        endpoint_url,
+                    ],
+                    env=env,
+                )
 
             return 0
         except OSError as ex:
             if ex.errno == errno.ENOENT:
-                logger.debug('SessionManagerPlugin is not present',
-                             exc_info=True)
+                logger.debug(
+                    'SessionManagerPlugin is not present', exc_info=True
+                )
                 # start-session api call returns response and starts the
                 # session on ssm-agent and response is forwarded to
                 # session-manager-plugin. If plugin is not present, terminate
diff -pruN 2.23.6-1/awscli/customizations/sso/__init__.py 2.31.35-1/awscli/customizations/sso/__init__.py
--- 2.23.6-1/awscli/customizations/sso/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sso/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.exceptions import ProfileNotFound
-from botocore.exceptions import UnknownCredentialError
 from botocore.credentials import JSONFileCache
+from botocore.exceptions import ProfileNotFound, UnknownCredentialError
 
 from awscli.customizations.sso.login import LoginCommand
 from awscli.customizations.sso.logout import LogoutCommand
@@ -21,11 +20,13 @@ from awscli.customizations.sso.utils imp
 
 def register_sso_commands(event_emitter):
     event_emitter.register(
-        'building-command-table.sso', add_sso_commands,
+        'building-command-table.sso',
+        add_sso_commands,
     )
     event_emitter.register(
-        'session-initialized', inject_json_file_cache,
-        unique_id='inject_sso_json_file_cache'
+        'session-initialized',
+        inject_json_file_cache,
+        unique_id='inject_sso_json_file_cache',
     )
 
 
diff -pruN 2.23.6-1/awscli/customizations/sso/login.py 2.31.35-1/awscli/customizations/sso/login.py
--- 2.23.6-1/awscli/customizations/sso/login.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sso/login.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.customizations.sso.utils import (
-    do_sso_login, PrintOnlyHandler, LOGIN_ARGS, BaseSSOCommand,
+    LOGIN_ARGS,
+    BaseSSOCommand,
+    PrintOnlyHandler,
+    do_sso_login,
 )
 from awscli.customizations.utils import uni_print
 
@@ -31,11 +34,11 @@ class LoginCommand(BaseSSOCommand):
         {
             'name': 'sso-session',
             'help_text': (
-               'An explicit SSO session to use to login. By default, this '
-               'command will login using the SSO session configured as part '
-               'of the requested profile and generally does not require this '
-               'argument to be set.'
-            )
+                'An explicit SSO session to use to login. By default, this '
+                'command will login using the SSO session configured as part '
+                'of the requested profile and generally does not require this '
+                'argument to be set.'
+            ),
         }
     ]
 
diff -pruN 2.23.6-1/awscli/customizations/sso/logout.py 2.31.35-1/awscli/customizations/sso/logout.py
--- 2.23.6-1/awscli/customizations/sso/logout.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sso/logout.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,9 +17,7 @@ import os
 from botocore.exceptions import ClientError
 
 from awscli.customizations.commands import BasicCommand
-from awscli.customizations.sso.utils import SSO_TOKEN_DIR
-from awscli.customizations.sso.utils import AWS_CREDS_CACHE_DIR
-
+from awscli.customizations.sso.utils import AWS_CREDS_CACHE_DIR, SSO_TOKEN_DIR
 
 LOG = logging.getLogger(__name__)
 
@@ -35,12 +33,14 @@ class LogoutCommand(BasicCommand):
     ARG_TABLE = []
 
     def _run_main(self, parsed_args, parsed_globals):
-        SSOTokenSweeper(self._session, parsed_globals).delete_credentials(SSO_TOKEN_DIR)
+        SSOTokenSweeper(self._session, parsed_globals).delete_credentials(
+            SSO_TOKEN_DIR
+        )
         SSOCredentialSweeper().delete_credentials(AWS_CREDS_CACHE_DIR)
         return 0
 
 
-class BaseCredentialSweeper(object):
+class BaseCredentialSweeper:
     def delete_credentials(self, creds_dir):
         if not os.path.isdir(creds_dir):
             return
@@ -59,7 +59,7 @@ class BaseCredentialSweeper(object):
 
     def _get_json_contents(self, filename):
         try:
-            with open(filename, 'r') as f:
+            with open(filename) as f:
                 return json.load(f)
         except Exception:
             # We do not want to include the traceback in the exception
diff -pruN 2.23.6-1/awscli/customizations/sso/utils.py 2.31.35-1/awscli/customizations/sso/utils.py
--- 2.23.6-1/awscli/customizations/sso/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/sso/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,16 +18,19 @@ import socket
 import time
 import webbrowser
 from functools import partial
-from http.server import HTTPServer, BaseHTTPRequestHandler
+from http.server import BaseHTTPRequestHandler, HTTPServer
 
-from botocore.compat import urlparse, parse_qs
+from botocore.compat import parse_qs, urlparse
 from botocore.credentials import JSONFileCache
 from botocore.exceptions import (
     AuthCodeFetcherError,
     PendingAuthorizationExpiredError,
 )
-from botocore.utils import SSOTokenFetcher, SSOTokenFetcherAuth
-from botocore.utils import original_ld_library_path
+from botocore.utils import (
+    SSOTokenFetcher,
+    SSOTokenFetcherAuth,
+    original_ld_library_path,
+)
 
 from awscli import __version__ as awscli_version
 from awscli.customizations.assumerole import CACHE_DIR as AWS_CREDS_CACHE_DIR
@@ -37,9 +40,7 @@ from awscli.customizations.utils import
 
 LOG = logging.getLogger(__name__)
 
-SSO_TOKEN_DIR = os.path.expanduser(
-    os.path.join('~', '.aws', 'sso', 'cache')
-)
+SSO_TOKEN_DIR = os.path.expanduser(os.path.join('~', '.aws', 'sso', 'cache'))
 
 LOGIN_ARGS = [
     {
@@ -49,7 +50,7 @@ LOGIN_ARGS = [
         'help_text': (
             'Disables automatically opening the verification URL in the '
             'default browser.'
-        )
+        ),
     },
     {
         'name': 'use-device-code',
@@ -58,8 +59,8 @@ LOGIN_ARGS = [
         'help_text': (
             'Uses the Device Code authorization grant and login flow '
             'instead of the Authorization Code flow.'
-        )
-    }
+        ),
+    },
 ]
 
 
@@ -74,16 +75,16 @@ def _sso_json_dumps(obj):
 
 
 def do_sso_login(
-        session,
-        sso_region,
-        start_url,
-        parsed_globals,
-        token_cache=None,
-        on_pending_authorization=None,
-        force_refresh=False,
-        registration_scopes=None,
-        session_name=None,
-        use_device_code=False,
+    session,
+    sso_region,
+    start_url,
+    parsed_globals,
+    token_cache=None,
+    on_pending_authorization=None,
+    force_refresh=False,
+    registration_scopes=None,
+    session_name=None,
+    use_device_code=False,
 ):
     if token_cache is None:
         token_cache = JSONFileCache(SSO_TOKEN_DIR, dumps_func=_sso_json_dumps)
@@ -153,7 +154,6 @@ class PrintOnlyHandler(BaseAuthorization
             f'Browser will not be automatically opened.\n'
             f'Please visit the following URL:\n'
             f'\n{verificationUri}\n'
-
         )
 
         user_code_msg = (
@@ -179,18 +179,23 @@ class OpenBrowserHandler(BaseAuthorizati
     def __call__(
         self, userCode, verificationUri, verificationUriComplete, **kwargs
     ):
-        opening_msg = (
-            f'Attempting to automatically open the SSO authorization page in '
-            f'your default browser.\nIf the browser does not open or you wish '
-            f'to use a different device to authorize this request, open the '
-            f'following URL:\n'
-            f'\n{verificationUri}\n'
-        )
+        if userCode: # only the device code flow supports different devices
+            opening_msg = (
+                f'Attempting to automatically open the SSO authorization page '
+                f'in your default browser.\nIf the browser does not open or '
+                f'you wish to use a different device to authorize this '
+                f'request, open the following URL:\n'
+                f'\n{verificationUri}\n'
+            )
+        else:
+            opening_msg = (
+                f'Attempting to automatically open the SSO authorization page '
+                f'in your default browser.\nIf the browser does not open, open '
+                f'the following URL:\n'
+                f'\n{verificationUri}\n'
+            )
 
-        user_code_msg = (
-            f'\nThen enter the code:\n'
-            f'\n{userCode}\n'
-        )
+        user_code_msg = f'\nThen enter the code:\n\n{userCode}\n'
         uni_print(opening_msg, self._outfile)
         if userCode:
             uni_print(user_code_msg, self._outfile)
@@ -206,6 +211,7 @@ class AuthCodeFetcher:
     """Manages the local web server that will be used
     to retrieve the authorization code from the OAuth callback
     """
+
     # How many seconds handle_request should wait for an incoming request
     _REQUEST_TIMEOUT = 10
     # How long we wait overall for the callback
@@ -222,21 +228,25 @@ class AuthCodeFetcher:
             handler = partial(OAuthCallbackHandler, self)
             self.http_server = HTTPServer(('', 0), handler)
             self.http_server.timeout = self._REQUEST_TIMEOUT
-        except socket.error as e:
+        except OSError as e:
             raise AuthCodeFetcherError(error_msg=e)
 
     def redirect_uri_without_port(self):
         return 'http://127.0.0.1/oauth/callback'
 
     def redirect_uri_with_port(self):
-        return f'http://127.0.0.1:{self.http_server.server_port}/oauth/callback'
+        return (
+            f'http://127.0.0.1:{self.http_server.server_port}/oauth/callback'
+        )
 
     def get_auth_code_and_state(self):
         """Blocks until the expected redirect request with either the
         authorization code/state or and error is handled
         """
         start = time.time()
-        while not self._is_done and time.time() < start + self._OVERALL_TIMEOUT:
+        while (
+            not self._is_done and time.time() < start + self._OVERALL_TIMEOUT
+        ):
             self.http_server.handle_request()
         self.http_server.server_close()
 
@@ -256,6 +266,7 @@ class OAuthCallbackHandler(BaseHTTPReque
     the auth code and state parameters, and displaying a page directing
     the user to return to the CLI.
     """
+
     def __init__(self, auth_code_fetcher, *args, **kwargs):
         self._auth_code_fetcher = auth_code_fetcher
         super().__init__(*args, **kwargs)
diff -pruN 2.23.6-1/awscli/customizations/streamingoutputarg.py 2.31.35-1/awscli/customizations/streamingoutputarg.py
--- 2.23.6-1/awscli/customizations/streamingoutputarg.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/streamingoutputarg.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,8 +15,9 @@ from botocore.model import Shape
 from awscli.arguments import BaseCLIArgument
 
 
-def add_streaming_output_arg(argument_table, operation_model,
-                             session, **kwargs):
+def add_streaming_output_arg(
+    argument_table, operation_model, session, **kwargs
+):
     # Implementation detail:  hooked up to 'building-argument-table'
     # event.
     if _has_streaming_output(operation_model):
@@ -24,7 +25,9 @@ def add_streaming_output_arg(argument_ta
         argument_table['outfile'] = StreamingOutputArgument(
             response_key=streaming_argument_name,
             operation_model=operation_model,
-            session=session, name='outfile')
+            session=session,
+            name='outfile',
+        )
 
 
 def _has_streaming_output(model):
@@ -36,15 +39,16 @@ def _get_streaming_argument_name(model):
 
 
 class StreamingOutputArgument(BaseCLIArgument):
-
     BUFFER_SIZE = 32768
     HELP = 'Filename where the content will be saved'
 
-    def __init__(self, response_key, operation_model, name,
-                 session, buffer_size=None):
+    def __init__(
+        self, response_key, operation_model, name, session, buffer_size=None
+    ):
         self._name = name
-        self.argument_model = Shape('StreamingOutputArgument',
-                                    {'type': 'string'})
+        self.argument_model = Shape(
+            'StreamingOutputArgument', {'type': 'string'}
+        )
         if buffer_size is None:
             buffer_size = self.BUFFER_SIZE
         self._buffer_size = buffer_size
@@ -81,15 +85,15 @@ class StreamingOutputArgument(BaseCLIArg
         return self.HELP
 
     def add_to_parser(self, parser):
-        parser.add_argument(self._name, metavar=self.py_name,
-                            help=self.HELP)
+        parser.add_argument(self._name, metavar=self.py_name, help=self.HELP)
 
     def add_to_params(self, parameters, value):
         self._output_file = value
         service_id = self._operation_model.service_model.service_id.hyphenize()
         operation_name = self._operation_model.name
-        self._session.register('after-call.%s.%s' % (
-            service_id, operation_name), self.save_file)
+        self._session.register(
+            'after-call.%s.%s' % (service_id, operation_name), self.save_file
+        )
 
     def save_file(self, parsed, **kwargs):
         if self._response_key not in parsed:
diff -pruN 2.23.6-1/awscli/customizations/timestampformat.py 2.31.35-1/awscli/customizations/timestampformat.py
--- 2.23.6-1/awscli/customizations/timestampformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/timestampformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,8 +27,10 @@ There's nothing currently done for times
 in the future.
 
 """
-from botocore.utils import parse_timestamp
+
 from botocore.exceptions import ProfileNotFound
+from botocore.utils import parse_timestamp
+
 from awscli.customizations.exceptions import ConfigurationError
 
 
diff -pruN 2.23.6-1/awscli/customizations/toplevelbool.py 2.31.35-1/awscli/customizations/toplevelbool.py
--- 2.23.6-1/awscli/customizations/toplevelbool.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/toplevelbool.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,15 +16,14 @@ You can instead say `--ebs-optimized/--n
 
 
 """
+
 import logging
 from functools import partial
 
-
-from awscli.argprocess import detect_shape_structure
 from awscli import arguments
-from awscli.customizations.utils import validate_mutually_exclusive_handler
+from awscli.argprocess import detect_shape_structure
 from awscli.customizations.exceptions import ParamValidationError
-
+from awscli.customizations.utils import validate_mutually_exclusive_handler
 
 LOG = logging.getLogger(__name__)
 # This sentinel object is used to distinguish when
@@ -34,17 +33,20 @@ _NOT_SPECIFIED = object()
 
 
 def register_bool_params(event_handler):
-    event_handler.register('building-argument-table.ec2.*',
-                           partial(pull_up_bool,
-                                   event_handler=event_handler))
+    event_handler.register(
+        'building-argument-table.ec2.*',
+        partial(pull_up_bool, event_handler=event_handler),
+    )
 
 
 def _qualifies_for_simplification(arg_model):
     if detect_shape_structure(arg_model) == 'structure(scalar)':
         members = arg_model.members
-        if (len(members) == 1 and
-            list(members.keys())[0] == 'Value' and
-            list(members.values())[0].type_name == 'boolean'):
+        if (
+            len(members) == 1
+            and list(members.keys())[0] == 'Value'
+            and list(members.values())[0].type_name == 'boolean'
+        ):
             return True
     return False
 
@@ -56,8 +58,8 @@ def pull_up_bool(argument_table, event_h
     boolean_pairs = []
     event_handler.register(
         'operation-args-parsed.ec2.*',
-        partial(validate_boolean_mutex_groups,
-                boolean_pairs=boolean_pairs))
+        partial(validate_boolean_mutex_groups, boolean_pairs=boolean_pairs),
+    )
     for value in list(argument_table.values()):
         if hasattr(value, 'argument_model'):
             arg_model = value.argument_model
@@ -66,18 +68,25 @@ def pull_up_bool(argument_table, event_h
                 # one that supports --option and --option <some value>
                 # and another arg of --no-option.
                 new_arg = PositiveBooleanArgument(
-                    value.name, arg_model, value._operation_model,
+                    value.name,
+                    arg_model,
+                    value._operation_model,
                     value._event_emitter,
                     group_name=value.name,
-                    serialized_name=value._serialized_name)
+                    serialized_name=value._serialized_name,
+                )
                 argument_table[value.name] = new_arg
                 negative_name = 'no-%s' % value.name
                 negative_arg = NegativeBooleanParameter(
-                    negative_name, arg_model, value._operation_model,
+                    negative_name,
+                    arg_model,
+                    value._operation_model,
                     value._event_emitter,
-                    action='store_true', dest='no_%s' % new_arg.py_name,
+                    action='store_true',
+                    dest='no_%s' % new_arg.py_name,
                     group_name=value.name,
-                    serialized_name=value._serialized_name)
+                    serialized_name=value._serialized_name,
+                )
                 argument_table[negative_name] = negative_arg
                 # If we've pulled up a structure(scalar) arg
                 # into a pair of top level boolean args, we need
@@ -90,19 +99,33 @@ def pull_up_bool(argument_table, event_h
 def validate_boolean_mutex_groups(boolean_pairs, parsed_args, **kwargs):
     # Validate we didn't pass in an --option and a --no-option.
     for positive, negative in boolean_pairs:
-        if getattr(parsed_args, positive.py_name) is not _NOT_SPECIFIED and \
-                getattr(parsed_args, negative.py_name) is not _NOT_SPECIFIED:
+        if (
+            getattr(parsed_args, positive.py_name) is not _NOT_SPECIFIED
+            and getattr(parsed_args, negative.py_name) is not _NOT_SPECIFIED
+        ):
             raise ParamValidationError(
                 'Cannot specify both the "%s" option and '
-                'the "%s" option.' % (positive.cli_name, negative.cli_name))
+                'the "%s" option.' % (positive.cli_name, negative.cli_name)
+            )
 
 
 class PositiveBooleanArgument(arguments.CLIArgument):
-    def __init__(self, name, argument_model, operation_model,
-                 event_emitter, serialized_name, group_name):
+    def __init__(
+        self,
+        name,
+        argument_model,
+        operation_model,
+        event_emitter,
+        serialized_name,
+        group_name,
+    ):
         super(PositiveBooleanArgument, self).__init__(
-            name, argument_model, operation_model, event_emitter,
-            serialized_name=serialized_name)
+            name,
+            argument_model,
+            operation_model,
+            event_emitter,
+            serialized_name=serialized_name,
+        )
         self._group_name = group_name
 
     @property
@@ -113,11 +136,13 @@ class PositiveBooleanArgument(arguments.
         # We need to support three forms:
         # --option-name
         # --option-name Value=(true|false)
-        parser.add_argument(self.cli_name,
-                            help=self.documentation,
-                            action='store',
-                            default=_NOT_SPECIFIED,
-                            nargs='?')
+        parser.add_argument(
+            self.cli_name,
+            help=self.documentation,
+            action='store',
+            default=_NOT_SPECIFIED,
+            nargs='?',
+        )
 
     def add_to_params(self, parameters, value):
         if value is _NOT_SPECIFIED:
@@ -131,17 +156,29 @@ class PositiveBooleanArgument(arguments.
             parameters[self._serialized_name] = {'Value': True}
         else:
             # Otherwise the arg was specified with a value.
-            parameters[self._serialized_name] = self._unpack_argument(
-                value)
+            parameters[self._serialized_name] = self._unpack_argument(value)
 
 
 class NegativeBooleanParameter(arguments.BooleanArgument):
-    def __init__(self, name, argument_model, operation_model,
-                 event_emitter, serialized_name, action='store_true',
-                 dest=None, group_name=None):
+    def __init__(
+        self,
+        name,
+        argument_model,
+        operation_model,
+        event_emitter,
+        serialized_name,
+        action='store_true',
+        dest=None,
+        group_name=None,
+    ):
         super(NegativeBooleanParameter, self).__init__(
-            name, argument_model, operation_model, event_emitter,
-            default=_NOT_SPECIFIED, serialized_name=serialized_name)
+            name,
+            argument_model,
+            operation_model,
+            event_emitter,
+            default=_NOT_SPECIFIED,
+            serialized_name=serialized_name,
+        )
         self._group_name = group_name
 
     def add_to_params(self, parameters, value):
diff -pruN 2.23.6-1/awscli/customizations/translate.py 2.31.35-1/awscli/customizations/translate.py
--- 2.23.6-1/awscli/customizations/translate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/translate.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,10 @@
 # language governing permissions and limitations under the License.
 import copy
 
-from awscli.arguments import CustomArgument, CLIArgument
+from awscli.arguments import CLIArgument, CustomArgument
 from awscli.customizations.binaryhoist import (
-    BinaryBlobArgumentHoister,
     ArgumentParameters,
+    BinaryBlobArgumentHoister,
 )
 
 FILE_DOCSTRING = (
@@ -41,22 +41,24 @@ DOCUMENT_ERRORSTRING = (
 
 
 def register_translate_import_terminology(cli):
-    cli.register(
-        "building-argument-table.translate.import-terminology",
-        BinaryBlobArgumentHoister(
-            new_argument=ArgumentParameters(
-                name="data-file",
-                help_text=FILE_DOCSTRING,
-                required=True,
-            ),
-            original_argument=ArgumentParameters(
-                name="terminology-data",
-                member="File",
-                required=False,
+    (
+        cli.register(
+            "building-argument-table.translate.import-terminology",
+            BinaryBlobArgumentHoister(
+                new_argument=ArgumentParameters(
+                    name="data-file",
+                    help_text=FILE_DOCSTRING,
+                    required=True,
+                ),
+                original_argument=ArgumentParameters(
+                    name="terminology-data",
+                    member="File",
+                    required=False,
+                ),
+                error_if_original_used=FILE_ERRORSTRING,
             ),
-            error_if_original_used=FILE_ERRORSTRING,
         ),
-    ),
+    )
 
     cli.register(
         "building-argument-table.translate.translate-document",
diff -pruN 2.23.6-1/awscli/customizations/utils.py 2.31.35-1/awscli/customizations/utils.py
--- 2.23.6-1/awscli/customizations/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,20 +14,19 @@
 Utility functions to make it easier to work with customizations.
 
 """
+
 import copy
 import re
 import sys
 import xml
 
 from botocore.exceptions import ClientError
-from awscli.customizations.exceptions import ParamValidationError
 
+from awscli.customizations.exceptions import ParamValidationError
 
 _SENTENCE_DELIMETERS_REGEX = re.compile(r'[.:]+')
-_LINE_BREAK_CHARS = [
-    '\n',
-    '\u2028'
-]
+_LINE_BREAK_CHARS = ['\n', '\u2028']
+
 
 def rename_argument(argument_table, existing_name, new_name):
     current = argument_table[existing_name]
@@ -93,6 +92,7 @@ def alias_command(command_table, existin
 def validate_mutually_exclusive_handler(*groups):
     def _handler(parsed_args, **kwargs):
         return validate_mutually_exclusive(parsed_args, *groups)
+
     return _handler
 
 
@@ -140,8 +140,9 @@ def s3_bucket_exists(s3_client, bucket_n
     return bucket_exists
 
 
-def create_client_from_parsed_globals(session, service_name, parsed_globals,
-                                      overrides=None):
+def create_client_from_parsed_globals(
+    session, service_name, parsed_globals, overrides=None
+):
     """Creates a service client, taking parsed_globals into account
 
     Any values specified in overrides will override the returned dict. Note
@@ -197,8 +198,9 @@ def uni_print(statement, out_file=None):
         # ``sys.stdout.encoding`` is ``None``.
         if new_encoding is None:
             new_encoding = 'ascii'
-        new_statement = statement.encode(
-            new_encoding, 'replace').decode(new_encoding)
+        new_statement = statement.encode(new_encoding, 'replace').decode(
+            new_encoding
+        )
         out_file.write(new_statement)
     out_file.flush()
 
diff -pruN 2.23.6-1/awscli/customizations/waiters.py 2.31.35-1/awscli/customizations/waiters.py
--- 2.23.6-1/awscli/customizations/waiters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/waiters.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,11 @@ from botocore import xform_name
 from botocore.exceptions import DataNotFoundError
 
 from awscli.clidriver import ServiceOperation
-from awscli.customizations.commands import BasicCommand, BasicHelp, \
-    BasicDocHandler
+from awscli.customizations.commands import (
+    BasicCommand,
+    BasicDocHandler,
+    BasicHelp,
+)
 
 
 def register_add_waiters(cli):
@@ -29,15 +32,17 @@ def add_waiters(command_table, session,
     service_model = getattr(command_object, 'service_model', None)
     if service_model is not None:
         # Get a client out of the service object.
-        waiter_model = get_waiter_model_from_service_model(session,
-                                                           service_model)
+        waiter_model = get_waiter_model_from_service_model(
+            session, service_model
+        )
         if waiter_model is None:
             return
         waiter_names = waiter_model.waiter_names
         # If there are waiters make a wait command.
         if waiter_names:
             command_table['wait'] = WaitCommand(
-                session, waiter_model, service_model)
+                session, waiter_model, service_model
+            )
 
 
 def get_waiter_model_from_service_model(session, service_model):
@@ -50,9 +55,11 @@ def get_waiter_model_from_service_model(
 
 class WaitCommand(BasicCommand):
     NAME = 'wait'
-    DESCRIPTION = ('Wait until a particular condition is satisfied. Each '
-                  'subcommand polls an API until the listed requirement '
-                  'is met.')
+    DESCRIPTION = (
+        'Wait until a particular condition is satisfied. Each '
+        'subcommand polls an API until the listed requirement '
+        'is met.'
+    )
 
     def __init__(self, session, waiter_model, service_model):
         self._model = waiter_model
@@ -60,7 +67,7 @@ class WaitCommand(BasicCommand):
         self.waiter_cmd_builder = WaiterStateCommandBuilder(
             session=session,
             model=self._model,
-            service_model=self._service_model
+            service_model=self._service_model,
         )
         super(WaitCommand, self).__init__(session)
 
@@ -76,13 +83,16 @@ class WaitCommand(BasicCommand):
         return subcommand_table
 
     def create_help_command(self):
-        return BasicHelp(self._session, self,
-                         command_table=self.subcommand_table,
-                         arg_table=self.arg_table,
-                         event_handler_class=WaiterCommandDocHandler)
+        return BasicHelp(
+            self._session,
+            self,
+            command_table=self.subcommand_table,
+            arg_table=self.arg_table,
+            event_handler_class=WaiterCommandDocHandler,
+        )
 
 
-class WaiterStateCommandBuilder(object):
+class WaiterStateCommandBuilder:
     def __init__(self, session, model, service_model):
         self._session = session
         self._model = model
@@ -97,8 +107,9 @@ class WaiterStateCommandBuilder(object):
         waiter_names = self._model.waiter_names
         for waiter_name in waiter_names:
             waiter_cli_name = xform_name(waiter_name, '-')
-            subcommand_table[waiter_cli_name] = \
-                self._build_waiter_state_cmd(waiter_name)
+            subcommand_table[waiter_cli_name] = self._build_waiter_state_cmd(
+                waiter_name
+            )
 
     def _build_waiter_state_cmd(self, waiter_name):
         # Get the waiter
@@ -117,7 +128,8 @@ class WaiterStateCommandBuilder(object):
         operation_model = self._service_model.operation_model(operation_name)
 
         waiter_state_command = WaiterStateCommand(
-            name=waiter_cli_name, parent_name='wait',
+            name=waiter_cli_name,
+            parent_name='wait',
             operation_caller=WaiterCaller(self._session, waiter_name),
             session=self._session,
             operation_model=operation_model,
@@ -131,13 +143,13 @@ class WaiterStateCommandBuilder(object):
         return waiter_state_command
 
 
-class WaiterStateDocBuilder(object):
+class WaiterStateDocBuilder:
     SUCCESS_DESCRIPTIONS = {
-        'error': u'%s is thrown ',
-        'path': u'%s ',
-        'pathAll': u'%s for all elements ',
-        'pathAny': u'%s for any element ',
-        'status': u'%s response is received '
+        'error': '%s is thrown ',
+        'path': '%s ',
+        'pathAll': '%s for all elements ',
+        'pathAny': '%s for any element ',
+        'status': '%s response is received ',
     }
 
     def __init__(self, waiter_config):
@@ -149,7 +161,7 @@ class WaiterStateDocBuilder(object):
         # description is provided, use a heuristic to generate a description
         # for the waiter.
         if not description:
-            description = u'Wait until '
+            description = 'Wait until '
             # Look at all of the acceptors and find the success state
             # acceptor.
             for acceptor in self._waiter_config.acceptors:
@@ -159,9 +171,11 @@ class WaiterStateDocBuilder(object):
                     break
             # Include what operation is being used.
             description += self._build_operation_description(
-                self._waiter_config.operation)
+                self._waiter_config.operation
+            )
         description += self._build_polling_description(
-            self._waiter_config.delay, self._waiter_config.max_attempts)
+            self._waiter_config.delay, self._waiter_config.max_attempts
+        )
         return description
 
     def _build_success_description(self, acceptor):
@@ -172,8 +186,9 @@ class WaiterStateDocBuilder(object):
         # If success is based off of the state of a resource include the
         # description about what resource is looked at.
         if matcher in ['path', 'pathAny', 'pathAll']:
-            resource_description = u'JMESPath query %s returns ' % \
-                acceptor.argument
+            resource_description = (
+                'JMESPath query %s returns ' % acceptor.argument
+            )
             # Prepend the resource description to the template description
             success_description = resource_description + success_description
         # Complete the description by filling in the expected success state.
@@ -182,27 +197,29 @@ class WaiterStateDocBuilder(object):
 
     def _build_operation_description(self, operation):
         operation_name = xform_name(operation).replace('_', '-')
-        return u'when polling with ``%s``.' % operation_name
+        return 'when polling with ``%s``.' % operation_name
 
     def _build_polling_description(self, delay, max_attempts):
         description = (
             ' It will poll every %s seconds until a successful state '
             'has been reached. This will exit with a return code of 255 '
-            'after %s failed checks.'
-            % (delay, max_attempts))
+            'after %s failed checks.' % (delay, max_attempts)
+        )
         return description
 
 
-class WaiterCaller(object):
+class WaiterCaller:
     def __init__(self, session, waiter_name):
         self._session = session
         self._waiter_name = waiter_name
 
     def invoke(self, service_name, operation_name, parameters, parsed_globals):
         client = self._session.create_client(
-            service_name, region_name=parsed_globals.region,
+            service_name,
+            region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl)
+            verify=parsed_globals.verify_ssl,
+        )
         waiter = client.get_waiter(xform_name(self._waiter_name))
         waiter.wait(**parameters)
         return 0
diff -pruN 2.23.6-1/awscli/customizations/wizard/app.py 2.31.35-1/awscli/customizations/wizard/app.py
--- 2.23.6-1/awscli/customizations/wizard/app.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/app.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,15 +18,17 @@ from collections.abc import MutableMappi
 from prompt_toolkit.application import Application
 
 from awscli.customizations.wizard import core
-from awscli.customizations.wizard.ui.style import get_default_style
-from awscli.customizations.wizard.ui.keybindings import get_default_keybindings
 from awscli.customizations.wizard.exceptions import (
-    UnexpectedWizardException, UnableToRunWizardError, InvalidChoiceException
+    InvalidChoiceException,
+    UnableToRunWizardError,
+    UnexpectedWizardException,
 )
+from awscli.customizations.wizard.ui.keybindings import get_default_keybindings
+from awscli.customizations.wizard.ui.style import get_default_style
 from awscli.utils import json_encoder
 
 
-class WizardAppRunner(object):
+class WizardAppRunner:
     def __init__(self, session, app_factory):
         self._session = session
         self._app_factory = app_factory
@@ -39,9 +41,19 @@ class WizardAppRunner(object):
 
 
 class WizardApp(Application):
-    def __init__(self, layout, values, traverser, executor, style=None,
-                 key_bindings=None, full_screen=True, output=None,
-                 app_input=None, file_io=None):
+    def __init__(
+        self,
+        layout,
+        values,
+        traverser,
+        executor,
+        style=None,
+        key_bindings=None,
+        full_screen=True,
+        output=None,
+        app_input=None,
+        file_io=None,
+    ):
         self.values = values
         self.traverser = traverser
         self.executor = executor
@@ -56,8 +68,12 @@ class WizardApp(Application):
             file_io = FileIO()
         self.file_io = file_io
         super().__init__(
-            layout=layout, style=style, key_bindings=key_bindings,
-            full_screen=full_screen, output=output, input=app_input,
+            layout=layout,
+            style=style,
+            key_bindings=key_bindings,
+            full_screen=full_screen,
+            output=output,
+            input=app_input,
         )
 
     def run(self, pre_run=None, **kwargs):
@@ -71,9 +87,7 @@ class WizardApp(Application):
             loop.close()
 
     def _handle_exception(self, loop, context):
-        self.exit(
-            exception=UnexpectedWizardException(context['exception'])
-        )
+        self.exit(exception=UnexpectedWizardException(context['exception']))
 
 
 class WizardTraverser:
@@ -106,18 +120,19 @@ class WizardTraverser:
 
     def current_prompt_has_details(self):
         return 'details' in self._prompt_definitions.get(
-            self._current_prompt, {})
+            self._current_prompt, {}
+        )
 
     def submit_prompt_answer(self, answer):
         definition = self._prompt_definitions[self._current_prompt]
         if 'choices' in definition:
             answer = self._convert_display_value_to_actual_value(
-                self._get_choices(self._current_prompt),
-                answer
+                self._get_choices(self._current_prompt), answer
             )
         if 'datatype' in definition:
             answer = core.DataTypeConverter.convert(
-                definition['datatype'], answer)
+                definition['datatype'], answer
+            )
 
         self._values[self._current_prompt] = answer
 
@@ -153,8 +168,11 @@ class WizardTraverser:
         return self._prompt_meets_condition(value_name)
 
     def is_prompt_details_visible_by_default(self, value_name):
-        return self._prompt_definitions[value_name].get(
-            'details', {}).get('visible', False)
+        return (
+            self._prompt_definitions[value_name]
+            .get('details', {})
+            .get('visible', False)
+        )
 
     def has_visited_section(self, section_name):
         return section_name in self._visited_sections
@@ -233,10 +251,7 @@ class WizardTraverser:
         for choice in choices:
             if isinstance(choice, str):
                 normalized_choices.append(
-                    {
-                        'display': choice,
-                        'actual_value': choice
-                    }
+                    {'display': choice, 'actual_value': choice}
                 )
             else:
                 normalized_choices.append(choice)
@@ -255,7 +270,7 @@ class WizardTraverser:
     def _get_next_prompt(self):
         prompts = list(self._prompt_definitions)
         current_pos = prompts.index(self._current_prompt)
-        for prompt in prompts[current_pos+1:]:
+        for prompt in prompts[current_pos + 1 :]:
             if self._prompt_meets_condition(prompt):
                 return prompt
         return self.DONE
@@ -271,12 +286,14 @@ class WizardTraverser:
     def get_output(self):
         template_step = core.TemplateStep()
         return template_step.run_step(
-            self._definition[self.OUTPUT], self._values)
+            self._definition[self.OUTPUT], self._values
+        )
 
 
 class WizardValues(MutableMapping):
-    def __init__(self, definition, value_retrieval_steps=None,
-                 exception_handler=None):
+    def __init__(
+        self, definition, value_retrieval_steps=None, exception_handler=None
+    ):
         self._definition = definition
         if value_retrieval_steps is None:
             value_retrieval_steps = {}
diff -pruN 2.23.6-1/awscli/customizations/wizard/commands.py 2.31.35-1/awscli/customizations/wizard/commands.py
--- 2.23.6-1/awscli/customizations/wizard/commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.wizard import devcommands, factory
-from awscli.customizations.wizard.loader import WizardLoader
 from awscli.customizations.commands import BasicCommand, BasicHelp
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.wizard import devcommands, factory
+from awscli.customizations.wizard.loader import WizardLoader
 
 
 def register_wizard_commands(event_handlers):
@@ -25,8 +25,9 @@ def register_wizard_commands(event_handl
 
 def _register_wizards_for_commands(commands, event_handlers):
     for command in commands:
-        event_handlers.register('building-command-table.%s' % command,
-                                _add_wizard_command)
+        event_handlers.register(
+            'building-command-table.%s' % command, _add_wizard_command
+        )
 
 
 def _add_wizard_command(session, command_object, command_table, **kwargs):
@@ -36,7 +37,7 @@ def _add_wizard_command(session, command
         session=session,
         loader=WizardLoader(),
         parent_command=command_object.name,
-        runner={'0.1': v1_runner, '0.2': v2_runner}
+        runner={'0.1': v1_runner, '0.2': v2_runner},
     )
     command_table['wizard'] = cmd
 
@@ -47,8 +48,9 @@ class TopLevelWizardCommand(BasicCommand
         'Interactive command for creating and configuring AWS resources.'
     )
 
-    def __init__(self, session, loader, parent_command, runner,
-                 wizard_name='_main'):
+    def __init__(
+        self, session, loader, parent_command, runner, wizard_name='_main'
+    ):
         super(TopLevelWizardCommand, self).__init__(session)
         self._session = session
         self._loader = loader
@@ -58,12 +60,17 @@ class TopLevelWizardCommand(BasicCommand
 
     def _build_subcommand_table(self):
         subcommand_table = super(
-            TopLevelWizardCommand, self)._build_subcommand_table()
+            TopLevelWizardCommand, self
+        )._build_subcommand_table()
         wizards = self._get_available_wizards()
         for name in wizards:
-            cmd = SingleWizardCommand(self._session, self._loader,
-                                      self._parent_command, self._runner,
-                                wizard_name=name)
+            cmd = SingleWizardCommand(
+                self._session,
+                self._loader,
+                self._parent_command,
+                self._runner,
+                wizard_name=name,
+            )
             subcommand_table[name] = cmd
         self._add_lineage(subcommand_table)
         return subcommand_table
@@ -80,12 +87,14 @@ class TopLevelWizardCommand(BasicCommand
             self._raise_usage_error()
 
     def _wizard_exists(self):
-        return self._loader.wizard_exists(self._parent_command,
-                                          self._wizard_name)
+        return self._loader.wizard_exists(
+            self._parent_command, self._wizard_name
+        )
 
     def _run_wizard(self):
         loaded = self._loader.load_wizard(
-            self._parent_command, self._wizard_name)
+            self._parent_command, self._wizard_name
+        )
         version = loaded.get('version')
         if version in self._runner:
             self._runner[version].run(loaded)
@@ -95,15 +104,19 @@ class TopLevelWizardCommand(BasicCommand
             )
 
     def create_help_command(self):
-        return BasicHelp(self._session, self,
-                         command_table=self.subcommand_table,
-                         arg_table=self.arg_table)
+        return BasicHelp(
+            self._session,
+            self,
+            command_table=self.subcommand_table,
+            arg_table=self.arg_table,
+        )
 
 
 class SingleWizardCommand(TopLevelWizardCommand):
     def __init__(self, session, loader, parent_command, runner, wizard_name):
         super(SingleWizardCommand, self).__init__(
-            session, loader, parent_command, runner, wizard_name)
+            session, loader, parent_command, runner, wizard_name
+        )
         self._session = session
         self._loader = loader
         self._runner = runner
@@ -119,15 +132,19 @@ class SingleWizardCommand(TopLevelWizard
 
     def create_help_command(self):
         loaded = self._loader.load_wizard(
-            self._parent_command, self._wizard_name,
+            self._parent_command,
+            self._wizard_name,
+        )
+        return WizardHelpCommand(
+            self._session, self, self.subcommand_table, self.arg_table, loaded
         )
-        return WizardHelpCommand(self._session, self, self.subcommand_table,
-                                self.arg_table, loaded)
 
 
 class WizardHelpCommand(BasicHelp):
-    def __init__(self, session, command_object, command_table, arg_table,
-                 loaded_wizard):
-        super(WizardHelpCommand, self).__init__(session, command_object,
-                                                command_table, arg_table)
+    def __init__(
+        self, session, command_object, command_table, arg_table, loaded_wizard
+    ):
+        super(WizardHelpCommand, self).__init__(
+            session, command_object, command_table, arg_table
+        )
         self._description = loaded_wizard.get('description', '')
diff -pruN 2.23.6-1/awscli/customizations/wizard/core.py 2.31.35-1/awscli/customizations/wizard/core.py
--- 2.23.6-1/awscli/customizations/wizard/core.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/core.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,25 +11,25 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """Core planner and executor for wizards."""
-import re
+
 import json
 import os
+import re
 from functools import partial
 
-from botocore import xform_name
 import jmespath
+from botocore import xform_name
 
-from awscli.utils import json_encoder
 from awscli.customizations.wizard.exceptions import (
-    InvalidDataTypeConversionException
+    InvalidDataTypeConversionException,
 )
-
+from awscli.utils import json_encoder
 
 DONE_SECTION_NAME = '__DONE__'
 OUTPUT_SECTION_NAME = '__OUTPUT__'
 
 
-class Runner(object):
+class Runner:
     def __init__(self, planner, executor):
         self._planner = planner
         self._executor = executor
@@ -39,7 +39,7 @@ class Runner(object):
         self._executor.execute(wizard_spec['execute'], params)
 
 
-class Planner(object):
+class Planner:
     _DONE_STEP = 'DONE'
     _STOP_RUNNING = object()
 
@@ -108,7 +108,7 @@ class Planner(object):
             return next_step[value]
 
 
-class BaseStep(object):
+class BaseStep:
     # Subclasses must implement this.  This defines the name you'd
     # use for the `type` in a wizard definition.
     NAME = ''
@@ -118,7 +118,6 @@ class BaseStep(object):
 
 
 class StaticStep(BaseStep):
-
     NAME = 'static'
 
     def run_step(self, step_definition, parameters):
@@ -126,7 +125,6 @@ class StaticStep(BaseStep):
 
 
 class PromptStep(BaseStep):
-
     NAME = 'prompt'
 
     def __init__(self, prompter):
@@ -135,13 +133,14 @@ class PromptStep(BaseStep):
             'int': int,
             'float': float,
             'str': str,
-            'bool': lambda x: True if x.lower() == 'true' else False
+            'bool': lambda x: True if x.lower() == 'true' else False,
         }
 
     def run_step(self, step_definition, parameters):
         choices = self._get_choices(step_definition, parameters)
-        response = self._prompter.prompt(step_definition['description'],
-                                         choices=choices)
+        response = self._prompter.prompt(
+            step_definition['description'], choices=choices
+        )
         return self._convert_data_type_if_needed(response, step_definition)
 
     def _get_choices(self, step_definition, parameters):
@@ -180,13 +179,13 @@ class YesNoPrompt(PromptStep):
             # They want the "No" choice to be the starting value so we
             # need to reverse the choices.
             choices[:] = choices[::-1]
-        response = self._prompter.prompt(step_definition['question'],
-                                         choices=choices)
+        response = self._prompter.prompt(
+            step_definition['question'], choices=choices
+        )
         return response
 
 
 class FilePromptStep(BaseStep):
-
     NAME = 'fileprompt'
 
     def __init__(self, prompter):
@@ -198,13 +197,12 @@ class FilePromptStep(BaseStep):
 
 
 class TemplateStep(BaseStep):
-
     NAME = 'template'
 
     CONDITION_PATTERN = re.compile(
         r'(?:^[ \t]*)?{%\s*if\s+(?P<condition>.+?)\s+%}(?:\s*[$|\n])?'
         r'(?P<body>.+?)[ \t]*{%\s*endif\s*%}[$|\n]?',
-        re.DOTALL | re.MULTILINE | re.IGNORECASE
+        re.DOTALL | re.MULTILINE | re.IGNORECASE,
     )
     _SUPPORTED_CONDITION_OPERATORS = [
         '==',
@@ -247,7 +245,6 @@ class TemplateStep(BaseStep):
 
 
 class APICallStep(BaseStep):
-
     NAME = 'apicall'
 
     def __init__(self, api_invoker):
@@ -256,18 +253,18 @@ class APICallStep(BaseStep):
     def run_step(self, step_definition, parameters):
         service, op_name = step_definition['operation'].split('.', 1)
         return self._api_invoker.invoke(
-            service=service, operation=op_name,
+            service=service,
+            operation=op_name,
             api_params=step_definition['params'],
             plan_variables=parameters,
             optional_api_params=step_definition.get('optional_params'),
             query=step_definition.get('query'),
             cache=step_definition.get('cache', False),
-            paginate=step_definition.get('paginate', False)
+            paginate=step_definition.get('paginate', False),
         )
 
 
 class SharedConfigStep(BaseStep):
-
     NAME = 'sharedconfig'
 
     def __init__(self, config_api):
@@ -289,7 +286,8 @@ class LoadDataStep(BaseStep):
     def run_step(self, step_definition, parameters):
         var_resolver = VariableResolver()
         value = var_resolver.resolve_variables(
-            parameters, step_definition['value'],
+            parameters,
+            step_definition['value'],
         )
         load_type = step_definition['load_type']
         if load_type == 'json':
@@ -304,7 +302,8 @@ class DumpDataStep(BaseStep):
     def run_step(self, step_definition, parameters):
         var_resolver = VariableResolver()
         value = var_resolver.resolve_variables(
-            parameters, step_definition['value'],
+            parameters,
+            step_definition['value'],
         )
         dump_type = step_definition['dump_type']
         if dump_type == 'json':
@@ -313,8 +312,7 @@ class DumpDataStep(BaseStep):
             raise ValueError(f'Unsupported load_type: {dump_type}')
 
 
-class VariableResolver(object):
-
+class VariableResolver:
     _VAR_MATCH = re.compile(r'^{(.*?)}$')
 
     def resolve_variables(self, variables, params):
@@ -364,7 +362,7 @@ class VariableResolver(object):
         return value
 
 
-class APIInvoker(object):
+class APIInvoker:
     """This class contains shared logic for the apicall step.
 
     The ``apicall`` in the planner and executor are slightly different
@@ -372,37 +370,49 @@ class APIInvoker(object):
     between the two steps.
 
     """
+
     def __init__(self, session):
         self._session = session
         self._response_cache = {}
 
-    def invoke(self, service, operation, api_params, plan_variables,
-               optional_api_params=None, query=None, cache=False,
-               paginate=False):
+    def invoke(
+        self,
+        service,
+        operation,
+        api_params,
+        plan_variables,
+        optional_api_params=None,
+        query=None,
+        cache=False,
+        paginate=False,
+    ):
         # TODO: All of the params that come from prompting the user
         # are strings.  We need a way to convert values to their
         # appropriate types.  We can either add typing into the wizard
         # spec or we possibly auto-convert based on the service
         # model (or both).
         resolved_params = self._resolve_params(
-            api_params, optional_api_params, plan_variables)
+            api_params, optional_api_params, plan_variables
+        )
         if cache:
             response = self._get_cached_api_call(
-                service, operation, resolved_params, paginate)
+                service, operation, resolved_params, paginate
+            )
         else:
             response = self._make_api_call(
-                service, operation, resolved_params, paginate)
+                service, operation, resolved_params, paginate
+            )
         if query is not None:
             response = jmespath.search(query, response)
         return response
 
     def _resolve_params(self, api_params, optional_params, plan_vars):
         resolver = VariableResolver()
-        api_params_resolved = resolver.resolve_variables(
-            plan_vars, api_params)
+        api_params_resolved = resolver.resolve_variables(plan_vars, api_params)
         if optional_params is not None:
             optional_params_resolved = resolver.resolve_variables(
-                plan_vars, optional_params)
+                plan_vars, optional_params
+            )
             for key, value in optional_params_resolved.items():
                 if key not in api_params_resolved and value is not None:
                     api_params_resolved[key] = value
@@ -417,14 +427,14 @@ class APIInvoker(object):
         else:
             return getattr(client, client_method_name)(**resolved_params)
 
-    def _get_cached_api_call(self, service, operation, resolved_params,
-                             paginate):
-        cache_key = self._get_cache_key(
-            service, operation, resolved_params
-        )
+    def _get_cached_api_call(
+        self, service, operation, resolved_params, paginate
+    ):
+        cache_key = self._get_cache_key(service, operation, resolved_params)
         if cache_key not in self._response_cache:
             response = self._make_api_call(
-                service, operation, resolved_params, paginate)
+                service, operation, resolved_params, paginate
+            )
             self._response_cache[cache_key] = response
         return self._response_cache[cache_key]
 
@@ -432,12 +442,11 @@ class APIInvoker(object):
         return (
             service_name,
             operation,
-            json.dumps(resolved_params, default=json_encoder)
+            json.dumps(resolved_params, default=json_encoder),
         )
 
 
-class Executor(object):
-
+class Executor:
     def __init__(self, step_handlers):
         self._step_handlers = step_handlers
 
@@ -466,8 +475,7 @@ class ConditionEvaluator:
         if not isinstance(condition, list):
             condition = [condition]
         for single in condition:
-            statuses.append(self._check_single_condition(
-                single, parameters))
+            statuses.append(self._check_single_condition(single, parameters))
         return all(statuses)
 
     def _check_single_condition(self, single, parameters):
@@ -483,7 +491,7 @@ class DataTypeConverter:
         'int': int,
         'float': float,
         'str': str,
-        'bool': lambda x: x.lower() == 'true'
+        'bool': lambda x: x.lower() == 'true',
     }
 
     @classmethod
@@ -494,8 +502,7 @@ class DataTypeConverter:
             raise InvalidDataTypeConversionException(value, datatype)
 
 
-class ExecutorStep(object):
-
+class ExecutorStep:
     # Subclasses must implement this to specify what name to use
     # for the `type` in a wizard definition.
     NAME = ''
@@ -505,7 +512,6 @@ class ExecutorStep(object):
 
 
 class APICallExecutorStep(ExecutorStep):
-
     NAME = 'apicall'
 
     def __init__(self, api_invoker):
@@ -514,7 +520,8 @@ class APICallExecutorStep(ExecutorStep):
     def run_step(self, step_definition, parameters):
         service, op_name = step_definition['operation'].split('.', 1)
         response = self._api_invoker.invoke(
-            service=service, operation=op_name,
+            service=service,
+            operation=op_name,
             api_params=step_definition['params'],
             plan_variables=parameters,
             optional_api_params=step_definition.get('optional_params'),
@@ -525,7 +532,6 @@ class APICallExecutorStep(ExecutorStep):
 
 
 class SharedConfigExecutorStep(ExecutorStep):
-
     NAME = 'sharedconfig'
 
     def __init__(self, config_api):
@@ -535,8 +541,9 @@ class SharedConfigExecutorStep(ExecutorS
         config_params = {}
         profile = None
         if 'profile' in step_definition:
-            profile = self._resolve_params(step_definition['profile'],
-                                           parameters)
+            profile = self._resolve_params(
+                step_definition['profile'], parameters
+            )
         config_params = self._resolve_params(
             step_definition['params'], parameters
         )
@@ -546,7 +553,7 @@ class SharedConfigExecutorStep(ExecutorS
         return VariableResolver().resolve_variables(params, value)
 
 
-class SharedConfigAPI(object):
+class SharedConfigAPI:
     """Simplified interface to reading/writing the ~/.aws/config file.
 
     This provides a simplified interface over the config file writer
@@ -555,6 +562,7 @@ class SharedConfigAPI(object):
     This allows similar logic to be shared by the planner and executor.
 
     """
+
     def __init__(self, session, config_writer):
         self._session = session
         self._config_writer = config_writer
@@ -575,24 +583,24 @@ class SharedConfigAPI(object):
             config_params['__section__'] = section
         config_params.update(values)
         config_filename = os.path.expanduser(
-            self._session.get_config_variable('config_file'))
+            self._session.get_config_variable('config_file')
+        )
         self._config_writer.update_config(config_params, config_filename)
 
 
 class DefineVariableStep(ExecutorStep):
-
     NAME = 'define-variable'
 
     def run_step(self, step_definition, parameters):
         value = step_definition['value']
         resolved_value = VariableResolver().resolve_variables(
-            parameters, value)
+            parameters, value
+        )
         key = step_definition['varname']
         parameters[key] = resolved_value
 
 
 class MergeDictStep(ExecutorStep):
-
     NAME = 'merge-dict'
 
     def run_step(self, step_definition, parameters):
@@ -600,7 +608,8 @@ class MergeDictStep(ExecutorStep):
         result = {}
         for overlay in step_definition['overlays']:
             resolved_overlay = var_resolver.resolve_variables(
-                parameters, overlay,
+                parameters,
+                overlay,
             )
             result = self._deep_merge(result, resolved_overlay)
         parameters[step_definition['output_var']] = result
diff -pruN 2.23.6-1/awscli/customizations/wizard/devcommands.py 2.31.35-1/awscli/customizations/wizard/devcommands.py
--- 2.23.6-1/awscli/customizations/wizard/devcommands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/devcommands.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from ruamel.yaml import YAML
+
 from awscli.customizations.commands import BasicCommand
 from awscli.customizations.wizard.factory import create_wizard_app
 
 
 def register_dev_commands(event_handlers):
-    event_handlers.register('building-command-table.cli-dev',
-                            WizardDev.add_command)
+    event_handlers.register(
+        'building-command-table.cli-dev', WizardDev.add_command
+    )
 
 
 def create_default_wizard_dev_runner(session):
@@ -27,14 +29,14 @@ def create_default_wizard_dev_runner(ses
     )
 
 
-class WizardLoader(object):
+class WizardLoader:
     def load(self, contents):
         yaml = YAML(typ="rt")
         data = yaml.load(contents)
         return data
 
 
-class WizardDevRunner(object):
+class WizardDevRunner:
     def __init__(self, wizard_loader, session):
         self._wizard_loader = wizard_loader
         self._session = session
@@ -57,8 +59,10 @@ class WizardDev(BasicCommand):
         'future versions.\n'
     )
     ARG_TABLE = [
-        {'name': 'run-wizard',
-         'help_text': 'Run a wizard given a wizard file.'}
+        {
+            'name': 'run-wizard',
+            'help_text': 'Run a wizard given a wizard file.',
+        }
     ]
 
     def __init__(self, session, dev_runner=None):
diff -pruN 2.23.6-1/awscli/customizations/wizard/exceptions.py 2.31.35-1/awscli/customizations/wizard/exceptions.py
--- 2.23.6-1/awscli/customizations/wizard/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -45,6 +45,6 @@ class UnexpectedWizardException(Exceptio
         message = self.MSG_FORMAT.format(
             original_tb=''.join(format_tb(original_exception.__traceback__)),
             original_exception_cls=self.original_exception.__class__.__name__,
-            original_exception=self.original_exception
+            original_exception=self.original_exception,
         )
         super().__init__(message)
diff -pruN 2.23.6-1/awscli/customizations/wizard/factory.py 2.31.35-1/awscli/customizations/wizard/factory.py
--- 2.23.6-1/awscli/customizations/wizard/factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,26 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.wizard.ui.layout import WizardLayoutFactory
+from awscli.customizations.configure.writer import ConfigFileWriter
 from awscli.customizations.wizard import core, ui
 from awscli.customizations.wizard.app import (
-    WizardAppRunner, WizardApp, WizardValues, WizardTraverser,
+    WizardApp,
+    WizardAppRunner,
+    WizardTraverser,
+    WizardValues,
 )
-from awscli.customizations.configure.writer import ConfigFileWriter
+from awscli.customizations.wizard.ui.layout import WizardLayoutFactory
 
 
 def create_default_executor(api_invoker, shared_config):
     return core.Executor(
         step_handlers={
             core.APICallExecutorStep.NAME: core.APICallExecutorStep(
-                api_invoker),
+                api_invoker
+            ),
             core.SharedConfigExecutorStep.NAME: core.SharedConfigExecutorStep(
-                shared_config),
+                shared_config
+            ),
             core.DefineVariableStep.NAME: core.DefineVariableStep(),
             core.MergeDictStep.NAME: core.MergeDictStep(),
             core.LoadDataExecutorStep.NAME: core.LoadDataExecutorStep(),
@@ -35,19 +40,22 @@ def create_default_executor(api_invoker,
 
 def create_default_wizard_v1_runner(session):
     api_invoker = core.APIInvoker(session=session)
-    shared_config = core.SharedConfigAPI(session=session,
-                                         config_writer=ConfigFileWriter())
+    shared_config = core.SharedConfigAPI(
+        session=session, config_writer=ConfigFileWriter()
+    )
     planner = core.Planner(
         step_handlers={
             core.StaticStep.NAME: core.StaticStep(),
             core.PromptStep.NAME: core.PromptStep(ui.UIPrompter()),
             core.YesNoPrompt.NAME: core.YesNoPrompt(ui.UIPrompter()),
             core.FilePromptStep.NAME: core.FilePromptStep(
-                ui.UIFilePrompter(ui.FileCompleter())),
+                ui.UIFilePrompter(ui.FileCompleter())
+            ),
             core.TemplateStep.NAME: core.TemplateStep(),
             core.APICallStep.NAME: core.APICallStep(api_invoker=api_invoker),
             core.SharedConfigStep.NAME: core.SharedConfigStep(
-                config_api=shared_config),
+                config_api=shared_config
+            ),
         }
     )
     executor = create_default_executor(api_invoker, shared_config)
@@ -61,24 +69,30 @@ def create_default_wizard_v2_runner(sess
 
 def create_wizard_app(definition, session, output=None, app_input=None):
     api_invoker = core.APIInvoker(session=session)
-    shared_config = core.SharedConfigAPI(session=session,
-                                         config_writer=ConfigFileWriter())
+    shared_config = core.SharedConfigAPI(
+        session=session, config_writer=ConfigFileWriter()
+    )
     layout = WizardLayoutFactory().create_wizard_layout(definition)
     values = WizardValues(
         definition,
         value_retrieval_steps={
             core.APICallStep.NAME: core.APICallStep(api_invoker=api_invoker),
             core.SharedConfigStep.NAME: core.SharedConfigStep(
-                config_api=shared_config),
+                config_api=shared_config
+            ),
             core.TemplateStep.NAME: core.TemplateStep(),
             core.LoadDataStep.NAME: core.LoadDataStep(),
             core.DumpDataStep.NAME: core.DumpDataStep(),
         },
-        exception_handler=layout.error_bar.display_error
+        exception_handler=layout.error_bar.display_error,
     )
     executor = create_default_executor(api_invoker, shared_config)
     traverser = WizardTraverser(definition, values, executor)
     return WizardApp(
-        layout=layout, values=values, traverser=traverser,
-        executor=executor, output=output, app_input=app_input
+        layout=layout,
+        values=values,
+        traverser=traverser,
+        executor=executor,
+        output=output,
+        app_input=app_input,
     )
diff -pruN 2.23.6-1/awscli/customizations/wizard/loader.py 2.31.35-1/awscli/customizations/wizard/loader.py
--- 2.23.6-1/awscli/customizations/wizard/loader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/loader.py	2025-11-12 19:17:29.000000000 +0000
@@ -38,12 +38,14 @@ exists, then a usage error will be print
 
 
 """
+
 import os
-from ruamel.yaml import YAML
 
+from ruamel.yaml import YAML
 
 WIZARD_SPEC_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), 'wizards',
+    os.path.dirname(os.path.abspath(__file__)),
+    'wizards',
 )
 
 
@@ -51,7 +53,7 @@ class WizardNotExistError(Exception):
     pass
 
 
-class WizardLoader(object):
+class WizardLoader:
     def __init__(self, spec_dir=None):
         if spec_dir is None:
             spec_dir = WIZARD_SPEC_DIR
@@ -60,8 +62,7 @@ class WizardLoader(object):
         self._yaml = YAML(typ='rt')
 
     def list_commands_with_wizards(self):
-        """Returns a list of commands with at least one wizard.
-        """
+        """Returns a list of commands with at least one wizard."""
         return os.listdir(self._spec_dir)
 
     def list_available_wizards(self, command_name):
@@ -81,21 +82,24 @@ class WizardLoader(object):
         of the file.
 
         """
-        filename = os.path.join(self._spec_dir, command_name,
-                                wizard_name + '.yml')
+        filename = os.path.join(
+            self._spec_dir, command_name, wizard_name + '.yml'
+        )
         try:
             with open(filename) as f:
                 return self._load_yaml(f.read())
-        except (OSError, IOError):
-            raise WizardNotExistError("Wizard does not exist for command "
-                                      "'%s', name: '%s'" % (command_name,
-                                                            wizard_name))
+        except OSError:
+            raise WizardNotExistError(
+                "Wizard does not exist for command "
+                "'%s', name: '%s'" % (command_name, wizard_name)
+            )
 
     def _load_yaml(self, contents):
         data = self._yaml.load(contents)
         return data
 
     def wizard_exists(self, command_name, wizard_name):
-        filename = os.path.join(self._spec_dir, command_name,
-                                wizard_name + '.yml')
+        filename = os.path.join(
+            self._spec_dir, command_name, wizard_name + '.yml'
+        )
         return os.path.isfile(filename)
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/__init__.py 2.31.35-1/awscli/customizations/wizard/ui/__init__.py
--- 2.23.6-1/awscli/customizations/wizard/ui/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,6 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from __future__ import unicode_literals
 import os
 
 import prompt_toolkit
@@ -19,7 +18,7 @@ from prompt_toolkit.completion import Co
 from awscli.customizations.wizard.ui import selectmenu
 
 
-class Prompter(object):
+class Prompter:
     def prompt(self, display_text, choices=None):
         raise NotImplementedError('prompt')
 
@@ -34,7 +33,8 @@ class UIPrompter(Prompter):
                 return selectmenu.select_menu(choices)
             else:
                 response = selectmenu.select_menu(
-                    choices, display_format=self._display_text)
+                    choices, display_format=self._display_text
+                )
                 result = response['actual_value']
                 return result
 
@@ -52,16 +52,16 @@ class FileCompleter(Completer):
             for child in sorted(children):
                 if child.startswith(partial):
                     result = os.path.join(dirname, child)
-                    yield Completion(result,
-                                     start_position=-len(result))
+                    yield Completion(result, start_position=-len(result))
         except OSError:
             return
 
 
-class UIFilePrompter(object):
+class UIFilePrompter:
     def __init__(self, completer):
         self._completer = completer
 
     def prompt(self, display_text):
         return prompt_toolkit.prompt(
-            '%s: ' % display_text, completer=self._completer)
+            '%s: ' % display_text, completer=self._completer
+        )
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/keybindings.py 2.31.35-1/awscli/customizations/wizard/ui/keybindings.py
--- 2.23.6-1/awscli/customizations/wizard/ui/keybindings.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/keybindings.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,17 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from prompt_toolkit.application import get_app
-from prompt_toolkit.filters import has_focus, Condition
+from prompt_toolkit.filters import Condition, has_focus
 from prompt_toolkit.key_binding import KeyBindings
 from prompt_toolkit.keys import Keys
 
+from awscli.customizations.wizard.exceptions import BaseWizardException
 from awscli.customizations.wizard.ui.utils import (
-    get_ui_control_by_buffer_name, move_to_previous_prompt,
-    show_details_if_visible_by_default, refresh_details_view
+    get_ui_control_by_buffer_name,
+    move_to_previous_prompt,
+    refresh_details_view,
+    show_details_if_visible_by_default,
 )
-from awscli.customizations.wizard.exceptions import BaseWizardException
 
 
 @Condition
@@ -52,11 +54,13 @@ def get_default_keybindings():
     def submit_current_answer(event):
         current_prompt = event.app.traverser.get_current_prompt()
         prompt_buffer = get_ui_control_by_buffer_name(
-            event.app.layout, current_prompt).buffer
+            event.app.layout, current_prompt
+        ).buffer
         try:
             event.app.traverser.submit_prompt_answer(prompt_buffer.text)
-            if isinstance(event.app.layout.error_bar.current_error,
-                          BaseWizardException):
+            if isinstance(
+                event.app.layout.error_bar.current_error, BaseWizardException
+            ):
                 event.app.layout.error_bar.clear()
         except BaseWizardException as e:
             event.app.layout.error_bar.display_error(e)
@@ -91,11 +95,14 @@ def get_default_keybindings():
     def focus_on_details_panel(event):
         if event.app.details_visible:
             layout = event.app.layout
-            if layout.current_buffer and \
-                    layout.current_buffer.name == 'details_buffer':
+            if (
+                layout.current_buffer
+                and layout.current_buffer.name == 'details_buffer'
+            ):
                 current_prompt = event.app.traverser.get_current_prompt()
                 current_control = get_ui_control_by_buffer_name(
-                    layout, current_prompt)
+                    layout, current_prompt
+                )
                 layout.focus(current_control)
             else:
                 details_buffer = layout.get_buffer_by_name('details_buffer')
@@ -106,8 +113,7 @@ def get_default_keybindings():
         event.app.details_visible = not event.app.details_visible
         layout = event.app.layout
         current_prompt = event.app.traverser.get_current_prompt()
-        current_control = get_ui_control_by_buffer_name(
-            layout, current_prompt)
+        current_control = get_ui_control_by_buffer_name(layout, current_prompt)
         if not event.app.details_visible:
             layout.focus(current_control)
         else:
@@ -121,7 +127,8 @@ def get_default_keybindings():
             refresh_details_view(event.app, current_prompt)
         event.app.save_details_visible = True
         save_dialogue = get_ui_control_by_buffer_name(
-            event.app.layout, 'save_details_dialogue')
+            event.app.layout, 'save_details_dialogue'
+        )
         event.app.layout.focus(save_dialogue)
 
     @kb.add(Keys.F4, filter=error_bar_enabled)
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/layout.py 2.31.35-1/awscli/customizations/wizard/ui/layout.py
--- 2.23.6-1/awscli/customizations/wizard/ui/layout.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/layout.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,36 +15,55 @@ import os
 from prompt_toolkit.application import get_app
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.completion import PathCompleter
-from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
-from prompt_toolkit.filters import has_focus, Condition
+from prompt_toolkit.filters import Condition, has_focus
 from prompt_toolkit.formatted_text import HTML, to_formatted_text
 from prompt_toolkit.key_binding import KeyBindings
 from prompt_toolkit.key_binding.bindings.focus import (
-    focus_next, focus_previous
+    focus_next,
+    focus_previous,
 )
 from prompt_toolkit.keys import Keys
 from prompt_toolkit.layout import Layout
 from prompt_toolkit.layout.containers import (
-    Window, HSplit, Dimension, ConditionalContainer, WindowAlign, VSplit,
-    to_container, to_filter
+    ConditionalContainer,
+    Dimension,
+    HSplit,
+    VSplit,
+    Window,
+    WindowAlign,
+    to_container,
+    to_filter,
 )
+from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
+from prompt_toolkit.utils import is_windows
 from prompt_toolkit.widgets import (
-    HorizontalLine, Box, Button, Label, Shadow, Frame, VerticalLine,
-    Dialog, TextArea
+    Box,
+    Button,
+    Dialog,
+    Frame,
+    HorizontalLine,
+    Label,
+    Shadow,
+    TextArea,
+    VerticalLine,
 )
-from prompt_toolkit.utils import is_windows
 
 from awscli.autoprompt.widgets import BaseToolbarView, TitleLine
 from awscli.customizations.wizard import core
-from awscli.customizations.wizard.ui.section import (
-    WizardSectionTab, WizardSectionBody
-)
 from awscli.customizations.wizard.ui.keybindings import (
-    details_visible, prompt_has_details, error_bar_enabled,
-    save_details_visible
+    details_visible,
+    error_bar_enabled,
+    prompt_has_details,
+    save_details_visible,
+)
+from awscli.customizations.wizard.ui.section import (
+    WizardSectionBody,
+    WizardSectionTab,
 )
 from awscli.customizations.wizard.ui.utils import (
-    move_to_previous_prompt, Spacer, get_ui_control_by_buffer_name
+    Spacer,
+    get_ui_control_by_buffer_name,
+    move_to_previous_prompt,
 )
 
 
@@ -56,13 +75,15 @@ class WizardLayoutFactory:
             [
                 self._create_title(definition),
                 self._create_sections(
-                    definition, run_wizard_dialog, error_bar),
-                HorizontalLine()
+                    definition, run_wizard_dialog, error_bar
+                ),
+                HorizontalLine(),
             ]
         )
         return WizardLayout(
-            container=container, run_wizard_dialog=run_wizard_dialog,
-            error_bar=error_bar
+            container=container,
+            run_wizard_dialog=run_wizard_dialog,
+            error_bar=error_bar,
         )
 
     def _create_title(self, definition):
@@ -90,17 +111,19 @@ class WizardLayoutFactory:
         return VSplit(
             [
                 HSplit(
-                    section_tabs,
-                    padding=1,
-                    style='class:wizard.section.tab'
+                    section_tabs, padding=1, style='class:wizard.section.tab'
                 ),
                 ConditionalContainer(
                     VerticalLine(), filter=Condition(is_windows)
                 ),
-                HSplit([*section_bodies,
+                HSplit(
+                    [
+                        *section_bodies,
                         WizardDetailsPanel(),
                         error_bar,
-                        ToolbarView()])
+                        ToolbarView(),
+                    ]
+                ),
             ]
         )
 
@@ -144,25 +167,33 @@ class WizardDetailsPanel:
 
     def _get_container(self):
         return ConditionalContainer(
-            HSplit([
-                TitleLine(self._get_title),
-                VSplit([
-                    Window(
-                        content=BufferControl(
-                            buffer=Buffer(
-                                name='details_buffer', read_only=True),
-                        ),
-                        height=Dimension(
-                            max=self.DIMENSIONS['details_window_height_max'],
-                            preferred=self.DIMENSIONS[
-                                'details_window_height_pref']
-                        ),
-                        wrap_lines=True
+            HSplit(
+                [
+                    TitleLine(self._get_title),
+                    VSplit(
+                        [
+                            Window(
+                                content=BufferControl(
+                                    buffer=Buffer(
+                                        name='details_buffer', read_only=True
+                                    ),
+                                ),
+                                height=Dimension(
+                                    max=self.DIMENSIONS[
+                                        'details_window_height_max'
+                                    ],
+                                    preferred=self.DIMENSIONS[
+                                        'details_window_height_pref'
+                                    ],
+                                ),
+                                wrap_lines=True,
+                            ),
+                            SaveFileDialogue(),
+                        ]
                     ),
-                    SaveFileDialogue(),
-                ])
-            ]),
-            details_visible
+                ]
+            ),
+            details_visible,
         )
 
     def __pt_container__(self):
@@ -175,8 +206,7 @@ class SaveFileDialogue:
 
     def _get_container(self):
         return ConditionalContainer(
-             self._create_dialog(),
-            save_details_visible
+            self._create_dialog(), save_details_visible
         )
 
     def __pt_container__(self):
@@ -188,17 +218,21 @@ class SaveFileDialogue:
         cancel_button = self._create_cancel_button(textfield)
         dialog = Dialog(
             title='Save to file',
-            body=HSplit([
-                Label(text='Filename', dont_extend_height=True),
-                textfield,
-            ], padding=Dimension(preferred=1, max=1)),
+            body=HSplit(
+                [
+                    Label(text='Filename', dont_extend_height=True),
+                    textfield,
+                ],
+                padding=Dimension(preferred=1, max=1),
+            ),
             buttons=[save_button, cancel_button],
-            with_background=True)
+            with_background=True,
+        )
         dialog.container.container.style = 'class:wizard.dialog.save'
         dialog.container.body.container.style = 'class:wizard.dialog.body'
         dialog.container.body.container.content.key_bindings.add(
-            Keys.Enter, filter=has_focus('save_details_dialogue'))(
-                save_button.handler)
+            Keys.Enter, filter=has_focus('save_details_dialogue')
+        )(save_button.handler)
         return dialog
 
     def _create_textfield(self):
@@ -214,11 +248,13 @@ class SaveFileDialogue:
         def save_handler(*args, **kwargs):
             app = get_app()
             contents = app.layout.get_buffer_by_name(
-                'details_buffer').document.text
+                'details_buffer'
+            ).document.text
             app.file_io.write_file_contents(textfield.text, contents)
             app.save_details_visible = False
             current_control = get_ui_control_by_buffer_name(
-                app.layout, app.traverser.get_current_prompt())
+                app.layout, app.traverser.get_current_prompt()
+            )
             app.layout.focus(current_control)
 
         return Button(text='Save', handler=save_handler)
@@ -228,6 +264,7 @@ class SaveFileDialogue:
             app = get_app()
             app.save_details_visible = False
             app.layout.focus('details_buffer')
+
         return Button(text='Cancel', handler=cancel_handler)
 
     def _create_key_bindings(self, save_button, cancel_button):
@@ -252,29 +289,29 @@ class ToolbarView(BaseToolbarView):
     def create_window(self, help_text):
         text_control = FormattedTextControl(text=lambda: help_text)
         text_control.name = 'toolbar_panel'
-        return HSplit([
-            HorizontalLine(),
-            Window(
-                content=text_control,
-                wrap_lines=True,
-                **self.DIMENSIONS
-            )
-        ])
+        return HSplit(
+            [
+                HorizontalLine(),
+                Window(
+                    content=text_control, wrap_lines=True, **self.DIMENSIONS
+                ),
+            ]
+        )
 
     def help_text(self):
         app = get_app()
         output = []
         if prompt_has_details():
             title = getattr(app, 'details_title', 'Details panel')
-            output.extend([
-                f'{self.STYLE}[F2]</style> Switch to {title}',
-                f'{self.STYLE}[F3]</style> Show/Hide {title}',
-                f'{self.STYLE}[CTRL+S]</style> Save {title}',
-            ])
-        if error_bar_enabled():
-            output.append(
-                f'{self.STYLE}[F4]</style> Show/Hide error message'
+            output.extend(
+                [
+                    f'{self.STYLE}[F2]</style> Switch to {title}',
+                    f'{self.STYLE}[F3]</style> Show/Hide {title}',
+                    f'{self.STYLE}[CTRL+S]</style> Save {title}',
+                ]
             )
+        if error_bar_enabled():
+            output.append(f'{self.STYLE}[F4]</style> Show/Hide error message')
         return to_formatted_text(HTML(f'{self.SPACING}'.join(output)))
 
 
@@ -367,7 +404,7 @@ class RunWizardDialog:
     def _create_dialog_frame(self):
         frame_body = Box(
             body=self._create_buttons_container(),
-            height=Dimension(min=1, max=3, preferred=3)
+            height=Dimension(min=1, max=3, preferred=3),
         )
         return Shadow(
             body=Frame(
@@ -405,8 +442,7 @@ class WizardErrorBar:
     def display_error(self, exception):
         self.current_error = exception
         self._error_bar_buffer.text = (
-            'Encountered following error in wizard:\n\n'
-            f'{exception}'
+            f'Encountered following error in wizard:\n\n{exception}'
         )
         get_app().error_bar_visible = True
 
@@ -420,19 +456,20 @@ class WizardErrorBar:
 
     def _get_container(self):
         return ConditionalContainer(
-            HSplit([
-                TitleLine('Wizard exception'),
-                Window(
-                    content=BufferControl(
-                        buffer=self._error_bar_buffer,
-                        focusable=False
+            HSplit(
+                [
+                    TitleLine('Wizard exception'),
+                    Window(
+                        content=BufferControl(
+                            buffer=self._error_bar_buffer, focusable=False
+                        ),
+                        style='class:wizard.error',
+                        dont_extend_height=True,
+                        wrap_lines=True,
                     ),
-                    style='class:wizard.error',
-                    dont_extend_height=True,
-                    wrap_lines=True,
-                ),
-            ]),
-            Condition(self._is_visible)
+                ]
+            ),
+            Condition(self._is_visible),
         )
 
     def _is_visible(self):
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/prompt.py 2.31.35-1/awscli/customizations/wizard/ui/prompt.py
--- 2.23.6-1/awscli/customizations/wizard/ui/prompt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/prompt.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,21 +12,26 @@
 # language governing permissions and limitations under the License.
 from prompt_toolkit.application import get_app
 from prompt_toolkit.buffer import Buffer
+from prompt_toolkit.completion import PathCompleter
 from prompt_toolkit.document import Document
 from prompt_toolkit.filters import Condition
 from prompt_toolkit.key_binding import KeyBindings
 from prompt_toolkit.keys import Keys
 from prompt_toolkit.layout.containers import (
-    Window, VSplit, Dimension, ConditionalContainer, FloatContainer, Float
+    ConditionalContainer,
+    Dimension,
+    Float,
+    FloatContainer,
+    ScrollOffsets,
+    VSplit,
+    Window,
 )
 from prompt_toolkit.layout.controls import BufferControl
 from prompt_toolkit.layout.margins import ScrollbarMargin
-from prompt_toolkit.layout.containers import ScrollOffsets
 from prompt_toolkit.layout.menus import CompletionsMenu
-from prompt_toolkit.completion import PathCompleter
 
 from awscli.customizations.wizard.ui.selectmenu import (
-    CollapsableSelectionMenuControl
+    CollapsableSelectionMenuControl,
 )
 from awscli.customizations.wizard.ui.utils import FullyExtendedWidthWindow
 
@@ -46,7 +51,7 @@ class WizardPrompt:
             answer = WizardPromptCompletionAnswer(
                 self._value_name,
                 default_value=self._value_definition.get('default_value'),
-                completer=self._value_definition['completer']
+                completer=self._value_definition['completer'],
             )
         else:
             answer = WizardPromptAnswer(
@@ -57,13 +62,12 @@ class WizardPrompt:
             VSplit(
                 [
                     WizardPromptDescription(
-                        self._value_name,
-                        self._value_definition['description']
+                        self._value_name, self._value_definition['description']
                     ),
-                    answer
+                    answer,
                 ],
             ),
-            Condition(self._is_visible)
+            Condition(self._is_visible),
         )
 
     def _is_visible(self):
@@ -81,14 +85,9 @@ class WizardPromptDescription:
 
     def _get_container(self):
         content = f'{self._value_description}:'
-        buffer = Buffer(
-            document=Document(content),
-            read_only=True
-        )
+        buffer = Buffer(document=Document(content), read_only=True)
         return Window(
-            content=BufferControl(
-                buffer=buffer, focusable=False
-            ),
+            content=BufferControl(buffer=buffer, focusable=False),
             style=self._get_style,
             width=Dimension.exact(len(content) + 1),
             dont_extend_height=True,
@@ -114,14 +113,13 @@ class WizardPromptAnswer:
         self.container = self._get_answer_container()
 
     def _get_answer_buffer(self):
-        return Buffer(name=self._value_name,
-                      document=Document(text=self._default_value))
+        return Buffer(
+            name=self._value_name, document=Document(text=self._default_value)
+        )
 
     def _get_answer_container(self):
         return FullyExtendedWidthWindow(
-            content=BufferControl(
-                buffer=self._buffer
-            ),
+            content=BufferControl(buffer=self._buffer),
             style=self._get_style,
             dont_extend_height=True,
         )
@@ -144,20 +142,22 @@ class WizardPromptCompletionAnswer(Wizar
         super().__init__(value_name, default_value)
 
     def _get_completer(self, completer):
-        return {
-            'file_completer': PathCompleter(expanduser=True)
-        }[completer]
+        return {'file_completer': PathCompleter(expanduser=True)}[completer]
 
     def _get_answer_buffer(self):
-        return Buffer(name=self._value_name,
-                      completer=self._completer,
-                      complete_while_typing=True,
-                      document=Document(text=self._default_value))
+        return Buffer(
+            name=self._value_name,
+            completer=self._completer,
+            complete_while_typing=True,
+            document=Document(text=self._default_value),
+        )
 
     def _get_menu_height(self):
         if self._buffer.complete_state:
-            return min(len(self._buffer.complete_state.completions),
-                       self.COMPLETION_MENU_MAX_HEIGHT)
+            return min(
+                len(self._buffer.complete_state.completions),
+                self.COMPLETION_MENU_MAX_HEIGHT,
+            )
         return 0
 
     def _get_answer_container(self):
@@ -165,16 +165,18 @@ class WizardPromptCompletionAnswer(Wizar
             FullyExtendedWidthWindow(
                 content=BufferControl(buffer=self._buffer),
                 style=self._get_style,
-                wrap_lines=True
+                wrap_lines=True,
             ),
             floats=[
                 Float(
-                    xcursor=True, ycursor=True, top=1,
+                    xcursor=True,
+                    ycursor=True,
+                    top=1,
                     height=self._get_menu_height,
                     content=CompletionsMenu(),
                 )
             ],
-            key_bindings=self._get_key_bindings()
+            key_bindings=self._get_key_bindings(),
         )
 
     def _get_key_bindings(self):
@@ -205,7 +207,7 @@ class WizardPromptSelectionAnswer(Wizard
             content=CollapsableSelectionMenuControl(
                 items=self._get_choices,
                 selection_capture_buffer=self._buffer,
-                on_toggle=self._show_details
+                on_toggle=self._show_details,
             ),
             style=self._get_style,
             always_hide_cursor=True,
@@ -218,8 +220,7 @@ class WizardPromptSelectionAnswer(Wizard
 
     def _show_details(self, choice):
         app = get_app()
-        details_buffer = app.layout.get_buffer_by_name(
-            'details_buffer')
+        details_buffer = app.layout.get_buffer_by_name('details_buffer')
         details, title = self._get_details(choice)
         app.details_title = title
         details_buffer.reset()
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/section.py 2.31.35-1/awscli/customizations/wizard/ui/section.py
--- 2.23.6-1/awscli/customizations/wizard/ui/section.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/section.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,10 @@ from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.document import Document
 from prompt_toolkit.filters import Condition
 from prompt_toolkit.layout.containers import (
-    Window, HSplit, Dimension, ConditionalContainer
+    ConditionalContainer,
+    Dimension,
+    HSplit,
+    Window,
 )
 from prompt_toolkit.layout.controls import BufferControl
 from prompt_toolkit.widgets import Box
@@ -31,14 +34,9 @@ class WizardSectionTab:
 
     def _get_container(self):
         content = f" {self._definition['shortname']}"
-        buffer = Buffer(
-            document=Document(content),
-            read_only=True
-        )
+        buffer = Buffer(document=Document(content), read_only=True)
         return Window(
-            content=BufferControl(
-                buffer=buffer, focusable=False
-            ),
+            content=BufferControl(buffer=buffer, focusable=False),
             style=self._get_style,
             width=Dimension.exact(len(content) + 1),
             dont_extend_height=True,
@@ -66,12 +64,12 @@ class WizardSectionBody:
         return ConditionalContainer(
             Box(
                 HSplit(
-                    self._create_prompts_from_section_definition(),
-                    padding=1
+                    self._create_prompts_from_section_definition(), padding=1
                 ),
-                padding_left=2, padding_top=1
+                padding_left=2,
+                padding_top=1,
             ),
-            Condition(self._is_current_section)
+            Condition(self._is_current_section),
         )
 
     def _is_current_section(self):
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/selectmenu.py 2.31.35-1/awscli/customizations/wizard/ui/selectmenu.py
--- 2.23.6-1/awscli/customizations/wizard/ui/selectmenu.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/selectmenu.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,22 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from __future__ import unicode_literals
 from prompt_toolkit import Application
 from prompt_toolkit.application import get_app
 from prompt_toolkit.buffer import Buffer
-from prompt_toolkit.utils import get_cwidth
-from prompt_toolkit.layout import Layout, FloatContainer, Float
-from prompt_toolkit.layout.controls import UIControl, UIContent
-from prompt_toolkit.layout.screen import Point
-from prompt_toolkit.layout.dimension import Dimension
 from prompt_toolkit.key_binding.key_bindings import KeyBindings
-from prompt_toolkit.layout.margins import ScrollbarMargin
+from prompt_toolkit.layout import Float, FloatContainer, Layout
 from prompt_toolkit.layout.containers import ScrollOffsets, Window
+from prompt_toolkit.layout.controls import UIContent, UIControl
+from prompt_toolkit.layout.dimension import Dimension
+from prompt_toolkit.layout.margins import ScrollbarMargin
+from prompt_toolkit.layout.screen import Point
+from prompt_toolkit.utils import get_cwidth
 
 
 def select_menu(items, display_format=None, max_height=10):
-    """ Presents a list of options and allows the user to select one.
+    """Presents a list of options and allows the user to select one.
 
     This presents a static list of options and prompts the user to select one.
     This is similar to a completion menu but is different in that it does not
@@ -64,7 +63,8 @@ def select_menu(items, display_format=No
     # limit the height and width of the window.
     content = FloatContainer(
         Window(height=Dimension(min=min_height, max=min_height)),
-        [Float(menu_window, top=0, left=0)])
+        [Float(menu_window, top=0, left=0)],
+    )
     app = Application(
         layout=Layout(content),
         key_bindings=app_bindings,
@@ -84,7 +84,7 @@ def _trim_text(text, max_width):
     if width > max_width:
         # When there are no double width characters, just use slice operation.
         if len(text) == width:
-            trimmed_text = (text[:max(1, max_width - 3)] + '...')[:max_width]
+            trimmed_text = (text[: max(1, max_width - 3)] + '...')[:max_width]
             return trimmed_text, len(trimmed_text)
 
         # Otherwise, loop until we have the desired width. (Rather
@@ -151,13 +151,13 @@ class SelectionMenuControl(UIControl):
     def create_content(self, width, height):
         def get_line(i):
             item = self._get_items()[i]
-            is_selected = (i == self._selection)
+            is_selected = i == self._selection
             return self._menu_item_fragment(item, is_selected, width)
 
         return UIContent(
             get_line=get_line,
             cursor_position=Point(x=0, y=self._selection or 0),
-            line_count=len(self._get_items())
+            line_count=len(self._get_items()),
         )
 
     def _move_cursor(self, delta):
@@ -190,8 +190,15 @@ class SelectionMenuControl(UIControl):
 
 class CollapsableSelectionMenuControl(SelectionMenuControl):
     """Menu that collapses to text with selection when loses focus"""
-    def __init__(self, items, display_format=None, cursor='>',
-                 selection_capture_buffer=None, on_toggle=None):
+
+    def __init__(
+        self,
+        items,
+        display_format=None,
+        cursor='>',
+        selection_capture_buffer=None,
+        on_toggle=None,
+    ):
         super().__init__(items, display_format=display_format, cursor=cursor)
         if not selection_capture_buffer:
             selection_capture_buffer = Buffer()
@@ -204,6 +211,7 @@ class CollapsableSelectionMenuControl(Se
             self._has_ever_entered_select_menu = True
             return super().create_content(width, height)
         else:
+
             def get_line(i):
                 content = ''
                 if self._has_ever_entered_select_menu:
@@ -212,11 +220,11 @@ class CollapsableSelectionMenuControl(Se
 
             return UIContent(get_line=get_line, line_count=1)
 
-    def preferred_height(self, width, max_height, wrap_lines,
-                         get_line_prefix):
+    def preferred_height(self, width, max_height, wrap_lines, get_line_prefix):
         if get_app().layout.has_focus(self):
             return super().preferred_height(
-                width, max_height, wrap_lines, get_line_prefix)
+                width, max_height, wrap_lines, get_line_prefix
+            )
         else:
             return 1
 
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/style.py 2.31.35-1/awscli/customizations/wizard/ui/style.py
--- 2.23.6-1/awscli/customizations/wizard/ui/style.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/style.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,26 +16,25 @@ from prompt_toolkit.utils import is_wind
 
 def get_default_style():
     basic_styles = [
-            # Wizard-specific classes
-            ('wizard', ''),
-            ('wizard.title', 'underline bold'),
-            ('wizard.prompt.description', 'bold'),
-            ('wizard.prompt.description.current', 'white'),
-            ('wizard.prompt.answer', 'bg:#aaaaaa black'),
-            ('wizard.prompt.answer.current', 'white'),
-            ('wizard.section.tab.current', 'white'),
-            ('wizard.section.tab.unvisited', '#777777'),
-            ('wizard.section.tab.visited', ''),
-            ('wizard.dialog', ''),
-            ('wizard.dialog frame.label', 'white bold'),
-            ('wizard.dialog.save frame.label', 'black bold'),
-            ('wizard.dialog.body', 'bg:#aaaaaa black'),
-            ('wizard.error', 'bg:#550000 #ffffff'),
-
-            # Prompt-toolkit built-in classes
-            ('button.focused', 'bg:#777777 white'),
-            ('completion-menu.completion', 'underline'),
-        ]
+        # Wizard-specific classes
+        ('wizard', ''),
+        ('wizard.title', 'underline bold'),
+        ('wizard.prompt.description', 'bold'),
+        ('wizard.prompt.description.current', 'white'),
+        ('wizard.prompt.answer', 'bg:#aaaaaa black'),
+        ('wizard.prompt.answer.current', 'white'),
+        ('wizard.section.tab.current', 'white'),
+        ('wizard.section.tab.unvisited', '#777777'),
+        ('wizard.section.tab.visited', ''),
+        ('wizard.dialog', ''),
+        ('wizard.dialog frame.label', 'white bold'),
+        ('wizard.dialog.save frame.label', 'black bold'),
+        ('wizard.dialog.body', 'bg:#aaaaaa black'),
+        ('wizard.error', 'bg:#550000 #ffffff'),
+        # Prompt-toolkit built-in classes
+        ('button.focused', 'bg:#777777 white'),
+        ('completion-menu.completion', 'underline'),
+    ]
     if is_windows():
         os_related_styles = [
             ('wizard.section.tab', 'bold black'),
diff -pruN 2.23.6-1/awscli/customizations/wizard/ui/utils.py 2.31.35-1/awscli/customizations/wizard/ui/utils.py
--- 2.23.6-1/awscli/customizations/wizard/ui/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/ui/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,7 @@
 # language governing permissions and limitations under the License.
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.document import Document
-from prompt_toolkit.layout.containers import Window, Dimension
+from prompt_toolkit.layout.containers import Dimension, Window
 from prompt_toolkit.layout.controls import BufferControl
 
 
@@ -28,7 +28,8 @@ def get_ui_control_by_buffer_name(layout
         if hasattr(control, 'buffer') and control.buffer.name == buffer_name:
             return control
     raise ValueError(
-        f"Couldn't find buffer in the current layout: {buffer_name}")
+        f"Couldn't find buffer in the current layout: {buffer_name}"
+    )
 
 
 def move_to_previous_prompt(app):
@@ -37,13 +38,15 @@ def move_to_previous_prompt(app):
     show_details_if_visible_by_default(app, previous_prompt)
     refresh_details_view(app, previous_prompt)
     previous_control = get_ui_control_by_buffer_name(
-        app.layout, previous_prompt)
+        app.layout, previous_prompt
+    )
     app.layout.focus(previous_control)
 
 
 def show_details_if_visible_by_default(app, prompt):
-    app.details_visible = \
-        app.traverser.is_prompt_details_visible_by_default(prompt)
+    app.details_visible = app.traverser.is_prompt_details_visible_by_default(
+        prompt
+    )
 
 
 def refresh_details_view(app, prompt):
@@ -59,19 +62,13 @@ class Spacer:
     element such as expanding tab column in the wizard app with the
     color gray.
     """
+
     def __init__(self):
         self.container = self._get_container()
 
     def _get_container(self):
-        buffer = Buffer(
-            document=Document(''),
-            read_only=True
-        )
-        return Window(
-            content=BufferControl(
-                buffer=buffer, focusable=False
-            )
-        )
+        buffer = Buffer(document=Document(''), read_only=True)
+        return Window(content=BufferControl(buffer=buffer, focusable=False))
 
     def __pt_container__(self):
         return self.container
@@ -79,5 +76,6 @@ class Spacer:
 
 class FullyExtendedWidthWindow(Window):
     """Window that fully extends its available width"""
+
     def preferred_width(self, max_available_width):
         return Dimension(preferred=max_available_width)
diff -pruN 2.23.6-1/awscli/customizations/wizard/wizards/lambda/new-function.yml 2.31.35-1/awscli/customizations/wizard/wizards/lambda/new-function.yml
--- 2.23.6-1/awscli/customizations/wizard/wizards/lambda/new-function.yml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/customizations/wizard/wizards/lambda/new-function.yml	2025-11-12 19:17:29.000000000 +0000
@@ -132,7 +132,7 @@ __OUTPUT__:
     Wizard successfully created Lambda Function:
       Function name: {function_name}
       Function ARN: {function_arn}
-   
+
     {% if {preview_type} == preview_cli_command %}
     Steps to create function is equivalent to running the following sample AWS CLI commands:
 
diff -pruN 2.23.6-1/awscli/data/metadata.json 2.31.35-1/awscli/data/metadata.json
--- 2.23.6-1/awscli/data/metadata.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/data/metadata.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
 {
   "distribution_source": "source"
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/awscli/errorhandler.py 2.31.35-1/awscli/errorhandler.py
--- 2.23.6-1/awscli/errorhandler.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/errorhandler.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,23 +14,29 @@ import logging
 import signal
 
 from botocore.exceptions import (
-    NoRegionError, NoCredentialsError, ClientError,
+    ClientError,
+    NoCredentialsError,
+    NoRegionError,
+)
+from botocore.exceptions import (
     ParamValidationError as BotocoreParamValidationError,
 )
 
+from awscli.argparser import USAGE, ArgParseException
 from awscli.argprocess import ParamError, ParamSyntaxError
 from awscli.arguments import UnknownArgumentError
-from awscli.argparser import ArgParseException, USAGE
+from awscli.autoprompt.factory import PrompterKeyboardInterrupt
 from awscli.constants import (
-    PARAM_VALIDATION_ERROR_RC, CONFIGURATION_ERROR_RC, CLIENT_ERROR_RC,
-    GENERAL_ERROR_RC
+    CLIENT_ERROR_RC,
+    CONFIGURATION_ERROR_RC,
+    GENERAL_ERROR_RC,
+    PARAM_VALIDATION_ERROR_RC,
 )
-from awscli.utils import PagerInitializationException
-from awscli.autoprompt.factory import PrompterKeyboardInterrupt
 from awscli.customizations.exceptions import (
-    ParamValidationError, ConfigurationError
+    ConfigurationError,
+    ParamValidationError,
 )
-
+from awscli.utils import PagerInitializationException
 
 LOG = logging.getLogger(__name__)
 
@@ -40,7 +46,7 @@ def construct_entry_point_handlers_chain
         ParamValidationErrorsHandler(),
         PrompterInterruptExceptionHandler(),
         InterruptExceptionHandler(),
-        GeneralExceptionHandler()
+        GeneralExceptionHandler(),
     ]
     return ChainedExceptionHandler(exception_handlers=handlers)
 
@@ -55,7 +61,7 @@ def construct_cli_error_handlers_chain()
         PagerErrorHandler(),
         InterruptExceptionHandler(),
         ClientErrorHandler(),
-        GeneralExceptionHandler()
+        GeneralExceptionHandler(),
     ]
     return ChainedExceptionHandler(exception_handlers=handlers)
 
@@ -84,8 +90,11 @@ class FilteredExceptionHandler(BaseExcep
 
 class ParamValidationErrorsHandler(FilteredExceptionHandler):
     EXCEPTIONS_TO_HANDLE = (
-        ParamError, ParamSyntaxError, ArgParseException,
-        ParamValidationError, BotocoreParamValidationError
+        ParamError,
+        ParamSyntaxError,
+        ArgParseException,
+        ParamValidationError,
+        BotocoreParamValidationError,
     )
     RC = PARAM_VALIDATION_ERROR_RC
 
@@ -108,7 +117,9 @@ class ConfigurationErrorHandler(Filtered
 class NoRegionErrorHandler(FilteredExceptionHandler):
     EXCEPTIONS_TO_HANDLE = NoRegionError
     RC = CONFIGURATION_ERROR_RC
-    MESSAGE = '%s You can also configure your region by running "aws configure".'
+    MESSAGE = (
+        '%s You can also configure your region by running "aws configure".'
+    )
 
 
 class NoCredentialsErrorHandler(FilteredExceptionHandler):
diff -pruN 2.23.6-1/awscli/examples/apigatewaymanagementapi/post-to-connection.rst 2.31.35-1/awscli/examples/apigatewaymanagementapi/post-to-connection.rst
--- 2.23.6-1/awscli/examples/apigatewaymanagementapi/post-to-connection.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewaymanagementapi/post-to-connection.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ The following ``post-to-connection`` exa
 
     aws apigatewaymanagementapi post-to-connection \
         --connection-id L0SM9cOFvHcCIhw= \
-        --data "Hello from API Gateway!" \
+        --data 'SGVsbG8gZnJvbSBBUEkgR2F0ZXdheSE=' \
         --endpoint-url https://aabbccddee.execute-api.us-west-2.amazonaws.com/prod
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/apigatewayv2/create-routing-rule.rst 2.31.35-1/awscli/examples/apigatewayv2/create-routing-rule.rst
--- 2.23.6-1/awscli/examples/apigatewayv2/create-routing-rule.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewayv2/create-routing-rule.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+**To create a routing rule**
+
+The following ``create-routing-rule`` example creates a routing rule with a priority of ``50``. ::
+
+    aws apigatewayv2 create-routing-rule \
+        --domain-name 'regional.example.com' \
+        --priority 50 \
+        --conditions '[ \
+            { \
+                "MatchBasePaths": { \
+                    "AnyOf": [ \
+                        "PetStoreShopper" \
+                    ] \
+                } \
+            } \
+        ]' \
+        --actions '[ \
+            { \
+                "InvokeApi": { \
+                    "ApiId": "abcd1234", \
+                    "Stage": "prod" \
+                } \
+            } \
+        ]'
+
+Output::
+
+    {
+        "Actions": [
+            {
+                "InvokeApi": {
+                    "ApiId": "abcd1234",
+                    "Stage": "prod",
+                    "StripBasePath": false
+                }
+            }
+        ],
+        "Conditions": [
+            {
+                "MatchBasePaths": {
+                    "AnyOf": [
+                        "PetStoreShopper"
+                    ]
+                }
+            }
+        ],
+        "Priority": 50,
+        "RoutingRuleArn": "arn:aws:apigateway:us-east-2:123456789012:/domainnames/regional.example.com/routingrules/aaa111",
+        "RoutingRuleId": "aaa111"
+    }
+
+For more information, see `Routing rules to connect API stages to a custom domain name for REST APIs <https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-routing-rules.html>`__ in the *Amazon API Gateway Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/apigatewayv2/delete-routing-rule.rst 2.31.35-1/awscli/examples/apigatewayv2/delete-routing-rule.rst
--- 2.23.6-1/awscli/examples/apigatewayv2/delete-routing-rule.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewayv2/delete-routing-rule.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To delete a routing rule**
+
+The following ``delete-routing-rule`` example deletes a routing rule for a custom domain name. ::
+
+    aws apigatewayv2 delete-routing-rule \
+        --domain-name 'regional.example.com' \
+        --routing-rule-id aaa111
+
+This command produces no output.
+
+For more information, see `Routing rules to connect API stages to a custom domain name for REST APIs <https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-routing-rules.html>`__ in the *Amazon API Gateway Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/apigatewayv2/get-routing-rule.rst 2.31.35-1/awscli/examples/apigatewayv2/get-routing-rule.rst
--- 2.23.6-1/awscli/examples/apigatewayv2/get-routing-rule.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewayv2/get-routing-rule.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**To get a routing rule**
+
+The following ``get-routing-rule`` example gets a routing rule for a domain name. ::
+
+    aws apigatewayv2 get-routing-rule \
+        --domain-name 'regional.example.com' \
+        --routing-rule-id aaa111
+
+Output::
+
+    {
+        "Actions": [
+            {
+                "InvokeApi": {
+                    "ApiId": "abcd1234",
+                    "Stage": "prod",
+                    "StripBasePath": false
+                }
+            }
+        ],
+        "Conditions": [
+            {
+                "MatchBasePaths": {
+                    "AnyOf": [
+                        "PetStoreShopper"
+                    ]
+                }
+            }
+        ],
+        "Priority": 50,
+        "RoutingRuleArn": "arn:aws:apigateway:us-east-2:123456789012:/domainnames/regional.example.com/routingrules/aaa111",
+        "RoutingRuleId": "aaa111"
+    }
+
+For more information, see `Routing rules to connect API stages to a custom domain name for REST APIs <https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-routing-rules.html>`__ in the *Amazon API Gateway Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/apigatewayv2/list-routing-rules.rst 2.31.35-1/awscli/examples/apigatewayv2/list-routing-rules.rst
--- 2.23.6-1/awscli/examples/apigatewayv2/list-routing-rules.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewayv2/list-routing-rules.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,38 @@
+**To list routing rules**
+
+The following ``list-routing-rules`` example lists the routing rules for a domain name. ::
+
+    aws apigatewayv2 list-routing-rules \
+        --domain-name 'regional.example.com'
+
+Output::
+
+    {
+        "RoutingRules": [
+            {
+                "Actions": [
+                    {
+                        "InvokeApi": {
+                            "ApiId": "abcd1234",
+                            "Stage": "prod",
+                            "StripBasePath": false
+                        }
+                    }
+                ],
+                "Conditions": [
+                    {
+                        "MatchBasePaths": {
+                            "AnyOf": [
+                                "PetStoreShopper"
+                            ]
+                        }
+                    }
+                ],
+                "Priority": 150,
+                "RoutingRuleArn": "arn:aws:apigateway:us-east-1:123456789012:/domainnames/regional.example.com/routingrules/aaa111",
+                "RoutingRuleId": "aaa111"
+            }
+        ]
+    }
+
+For more information, see `Routing rules to connect API stages to a custom domain name for REST APIs <https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-routing-rules.html>`__ in the *Amazon API Gateway Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/apigatewayv2/put-routing-rule.rst 2.31.35-1/awscli/examples/apigatewayv2/put-routing-rule.rst
--- 2.23.6-1/awscli/examples/apigatewayv2/put-routing-rule.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/apigatewayv2/put-routing-rule.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,52 @@
+**To update a routing rule**
+
+The following ``put-routing-rule`` example updates the priority of a routing rule. ::
+
+    aws apigatewayv2 put-routing-rule \
+        --domain-name 'regional.example.com' \
+        --priority 150 \
+        --conditions '[ \
+            { \
+                "MatchBasePaths": { \
+                    "AnyOf": [ \
+                        "PetStoreShopper" \
+                    ] \
+                } \
+            } \
+        ]' \
+        --actions '[ \
+            { \
+                "InvokeApi": { \
+                    "ApiId": "abcd1234", \
+                    "Stage": "prod" \
+                } \
+            } \
+        ]'
+
+Output::
+
+    {
+        "Actions": [
+            {
+                "InvokeApi": {
+                    "ApiId": "abcd1234",
+                    "Stage": "prod",
+                    "StripBasePath": false
+                }
+            }
+        ],
+        "Conditions": [
+            {
+                "MatchBasePaths": {
+                    "AnyOf": [
+                        "PetStoreShopper"
+                    ]
+                }
+            }
+        ],
+        "Priority": 150,
+        "RoutingRuleArn": "arn:aws:apigateway:us-east-2:123456789012:/domainnames/regional.example.com/routingrules/aaa111",
+        "RoutingRuleId": "aaa111"
+    }
+
+For more information, see `Routing rules to connect API stages to a custom domain name for REST APIs <https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-routing-rules.html>`__ in the *Amazon API Gateway Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst 2.31.35-1/awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst
--- 2.23.6-1/awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,99 @@
+**To retrieve one or more service level objective (SLO) budget reports.**
+
+The following ``batch-get-service-level-objective-budget-report`` example retrieves one or more service level objective (SLO) budget reports. ::
+
+    aws application-signals batch-get-service-level-objective-budget-report \
+    --timestamp 1735059869 \
+    --slo-ids "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName1" "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName2"
+
+Output::
+
+    {
+        "Timestamp": "2024-12-24T22:34:29+05:30",
+        "Reports": [{
+                "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName1",
+                "Name": "Your SLO Name",
+                "EvaluationType": "PeriodBased",
+                "BudgetStatus": "OK",
+                "Attainment": 100.0,
+                "TotalBudgetSeconds": 6048,
+                "BudgetSecondsRemaining": 6048,
+                "Sli": {
+                    "SliMetric": {
+                        "MetricDataQueries": [{
+                            "Id": "m1",
+                            "MetricStat": {
+                                "Metric": {
+                                    "Namespace": "AWS/EC2",
+                                    "MetricName": "CPUUtilization",
+                                    "Dimensions": [{
+                                        "Name": "InstanceId",
+                                        "Value": "i-0e098765432522"
+                                    }]
+                                },
+                                "Period": 60,
+                                "Stat": "Average"
+                            },
+                            "ReturnData": true
+                        }]
+                    },
+                    "MetricThreshold": 200.0,
+                    "ComparisonOperator": "LessThanOrEqualTo"
+                },
+                "Goal": {
+                    "Interval": {
+                        "RollingInterval": {
+                            "DurationUnit": "DAY",
+                            "Duration": 7
+                        }
+                    },
+                    "AttainmentGoal": 99.0,
+                    "WarningThreshold": 50.0
+                }
+            },
+            {
+                "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName2",
+                "Name": "test",
+                "EvaluationType": "PeriodBased",
+                "BudgetStatus": "BREACHED",
+                "Attainment": 97.39583275,
+                "TotalBudgetSeconds": 86,
+                "BudgetSecondsRemaining": -2154,
+                "Sli": {
+                    "SliMetric": {
+                        "MetricDataQueries": [{
+                            "Id": "cwMetric",
+                            "MetricStat": {
+                                "Metric": {
+                                    "Namespace": "AWS/EC2",
+                                    "MetricName": "CPUUtilization",
+                                    "Dimensions": [{
+                                        "Name": "InstanceId",
+                                        "Value": "i-0e12345678922"
+                                    }]
+                                },
+                                "Period": 300,
+                                "Stat": "Average"
+                            },
+                            "ReturnData": true
+                        }]
+                    },
+                    "MetricThreshold": 5.0,
+                    "ComparisonOperator": "GreaterThan"
+                },
+                "Goal": {
+                    "Interval": {
+                        "RollingInterval": {
+                            "DurationUnit": "DAY",
+                            "Duration": 1
+                        }
+                    },
+                    "AttainmentGoal": 99.9,
+                    "WarningThreshold": 30.0
+                }
+            }
+        ],
+        "Errors": []
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/create-service-level-objective.rst 2.31.35-1/awscli/examples/application-signals/create-service-level-objective.rst
--- 2.23.6-1/awscli/examples/application-signals/create-service-level-objective.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/create-service-level-objective.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,88 @@
+**To create a service level objective (SLO)**
+
+The following ``create-service-level-objective`` example creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. ::
+
+    aws application-signals create-service-level-objective \
+        --name "SLOName" \
+        --description "Description of your SLO" \
+        --sli-config file://sli-config.json
+
+Contents of ``sli-config.json``::
+
+    {
+        "SliMetricConfig": {
+            "MetricDataQueries": [
+                {
+                    "Id": "m1",
+                    "MetricStat": {
+                        "Metric": {
+                            "Namespace": "AWS/EC2",
+                            "MetricName": "CPUUtilization",
+                            "Dimensions": [
+                                {
+                                    "Name": "InstanceId",
+                                    "Value": "i-0e5a1234561522"
+                                }
+                            ]
+                        },
+                        "Period": 60,
+                        "Stat": "Average"
+                    },
+                    "ReturnData": true
+                }
+            ]
+        },
+        "MetricThreshold": 200,
+        "ComparisonOperator": "LessThanOrEqualTo"
+    }
+    
+Output::
+
+    {
+        "Slo": {
+        "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
+        "Name": "SLOName",
+        "Description": "Description of your SLO",
+        "CreatedTime": "2024-12-27T08:16:09.032000+05:30",
+        "LastUpdatedTime": "2024-12-27T08:16:09.032000+05:30",
+        "Sli": {
+            "SliMetric": {
+                "MetricDataQueries": [
+                    {
+                        "Id": "m1",
+                        "MetricStat": {
+                            "Metric": {
+                                "Namespace": "AWS/EC2",
+                                "MetricName": "CPUUtilization",
+                                "Dimensions": [
+                                    {
+                                        "Name": "InstanceId",
+                                        "Value": "i-0e59876543234522"
+                                    }
+                                ]
+                            },
+                            "Period": 60,
+                            "Stat": "Average"
+                        },
+                        "ReturnData": true
+                    }
+                ]
+            },
+            "MetricThreshold": 200.0,
+            "ComparisonOperator": "LessThanOrEqualTo"
+        },
+        "EvaluationType": "PeriodBased",
+        "Goal": {
+            "Interval": {
+                "RollingInterval": {
+                    "DurationUnit": "DAY",
+                    "Duration": 7
+                }
+            },
+            "AttainmentGoal": 99.0,
+            "WarningThreshold": 50.0
+          }
+        }
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/delete-service-level-objective.rst 2.31.35-1/awscli/examples/application-signals/delete-service-level-objective.rst
--- 2.23.6-1/awscli/examples/application-signals/delete-service-level-objective.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/delete-service-level-objective.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To delete the specified service level objective.**
+
+The following ``delete-service-level-objective`` example deletes the specified service level objective. ::
+
+    aws application-signals delete-service-level-objective \
+        --id "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"
+
+This command produces no output.
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/get-service-level-objective.rst 2.31.35-1/awscli/examples/application-signals/get-service-level-objective.rst
--- 2.23.6-1/awscli/examples/application-signals/get-service-level-objective.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/get-service-level-objective.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,53 @@
+**To return information about one SLO created in the account**
+
+The following ``get-service-level-objective`` example returns information about one SLO created in the account. ::
+
+    aws application-signals get-service-level-objective \
+        --id "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" 
+
+Output::
+
+    {
+        "Slo": {
+            "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
+            "Name": "SLOName",
+            "Description": "Description of your SLO",
+            "CreatedTime": "2024-12-24T22:19:18.624000+05:30",
+            "LastUpdatedTime": "2024-12-24T22:19:55.280000+05:30",
+            "Sli": {
+                "SliMetric": {
+                    "MetricDataQueries": [{
+                        "Id": "m1",
+                        "MetricStat": {
+                            "Metric": {
+                                "Namespace": "AWS/EC2",
+                                "MetricName": "CPUUtilization",
+                                "Dimensions": [{
+                                    "Name": "InstanceId",
+                                    "Value": "i-0e0987654321522"
+                                }]
+                            },
+                            "Period": 60,
+                            "Stat": "Average"
+                        },
+                        "ReturnData": true
+                    }]
+                },
+                "MetricThreshold": 200.0,
+                "ComparisonOperator": "LessThanOrEqualTo"
+            },
+            "EvaluationType": "PeriodBased",
+            "Goal": {
+                "Interval": {
+                    "RollingInterval": {
+                        "DurationUnit": "DAY",
+                        "Duration": 7
+                    }
+                },
+                "AttainmentGoal": 99.0,
+                "WarningThreshold": 50.0
+            }
+        }
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/get-service.rst 2.31.35-1/awscli/examples/application-signals/get-service.rst
--- 2.23.6-1/awscli/examples/application-signals/get-service.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/get-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,72 @@
+**To return information about a service discovered by Application Signals**
+
+The following ``get-service`` example returns information about a service discovered by Application Signals. ::
+
+    aws application-signals get-service \
+        --start-time 1732704000 \
+        --end-time 1732714500 \
+        --key-attributes Environment=lambda:default,Name=hello-world-python,Type=Service
+
+Output::
+
+    {
+        "Service": {
+            "KeyAttributes": {
+                "Environment": "lambda:default",
+                "Name": "hello-world-python",
+                "Type": "Service"
+            },
+            "AttributeMaps": [{
+                "Lambda.Function.Name": "hello-world-python",
+                "PlatformType": "AWS::Lambda"
+            }],
+            "MetricReferences": [{
+                "Namespace": "ApplicationSignals",
+                "MetricType": "LATENCY",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Latency"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "FAULT",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Fault"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "ERROR",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Error"
+            }],
+            "LogGroupReferences": [{
+                "Identifier": "/aws/lambda/hello-world-python",
+                "ResourceType": "AWS::Logs::LogGroup",
+                "Type": "AWS::Resource"
+            }]
+        },
+        "StartTime": "2024-11-27T10:00:00+00:00",
+        "EndTime": "2024-11-27T14:00:01+00:00",
+        "LogGroupReferences": [{
+            "Identifier": "/aws/lambda/hello-world-python",
+            "ResourceType": "AWS::Logs::LogGroup",
+            "Type": "AWS::Resource"
+        }]
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-service-dependencies.rst 2.31.35-1/awscli/examples/application-signals/list-service-dependencies.rst
--- 2.23.6-1/awscli/examples/application-signals/list-service-dependencies.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-service-dependencies.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,96 @@
+**To return a list of service dependencies of the service that you specify**
+
+The following ``list-service-dependencies`` example returns a list of service dependencies of the service that you specify. ::
+
+    aws application-signals list-service-dependencies \
+        --start-time 1732021200 \
+        --end-time 1732107600 \
+        --key-attributes Environment=api-gateway:prod, Name=PetAdoptionStatusUpdater,Type=Service
+
+Output::
+
+    {
+        "ServiceDependencies": [{
+            "OperationName": "PUT /prod",
+            "DependencyKeyAttributes": {
+                "Environment": "lambda:default",
+                "Name": "Services-name",
+                "Type": "Service"
+            },
+            "DependencyOperationName": "Invoke",
+            "MetricReferences": [{
+                "Namespace": "ApplicationSignals",
+                "MetricType": "LATENCY",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "api-gateway:prod"
+                }, {
+                    "Name": "Operation",
+                    "Value": "PUT /prod"
+                }, {
+                    "Name": "RemoteEnvironment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "RemoteOperation",
+                    "Value": "Invoke"
+                }, {
+                    "Name": "RemoteService",
+                    "Value": "Services-name"
+                }, {
+                    "Name": "Service",
+                    "Value": "PetAdoptionStatusUpdater"
+                }],
+                "MetricName": "Latency"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "FAULT",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "api-gateway:prod"
+                }, {
+                    "Name": "Operation",
+                    "Value": "PUT /prod"
+                }, {
+                    "Name": "RemoteEnvironment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "RemoteOperation",
+                    "Value": "Invoke"
+                }, {
+                    "Name": "RemoteService",
+                    "Value": "Services-name"
+                }, {
+                    "Name": "Service",
+                    "Value": "PetAdoptionStatusUpdater"
+                }],
+                "MetricName": "Fault"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "ERROR",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "api-gateway:prod"
+                }, {
+                    "Name": "Operation",
+                    "Value": "PUT /prod"
+                }, {
+                    "Name": "RemoteEnvironment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "RemoteOperation",
+                    "Value": "Invoke"
+                }, {
+                    "Name": "RemoteService",
+                    "Value": "Services-name"
+                }, {
+                    "Name": "Service",
+                    "Value": "PetAdoptionStatusUpdater"
+                }],
+                "MetricName": "Error"
+            }]
+        }],
+        "StartTime": "2024-11-19T13:00:00+00:00",
+        "EndTime": "2024-11-20T13:00:01+00:00"
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-service-dependents.rst 2.31.35-1/awscli/examples/application-signals/list-service-dependents.rst
--- 2.23.6-1/awscli/examples/application-signals/list-service-dependents.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-service-dependents.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,36 @@
+**To return the list of dependents that invoked the specified service during the provided time range**
+
+The following ``list-service-dependents`` example returns the list of dependents that invoked the specified service during the provided time range. ::
+
+    aws application-signals list-service-dependents \
+        --start-time 1732021200 \
+        --end-time 1732107600 \
+        --key-attributes Environment=generic:default,Name=PetSite,Type=Service
+
+Output::
+
+    {
+        "ServiceDependents": [{
+            "OperationName": "",
+            "DependentKeyAttributes": {
+                "Identifier": "pet-api-canary-hao",
+                "ResourceType": "AWS::Synthetics::Canary",
+                "Type": "AWS::Resource"
+            },
+            "DependentOperationName": "",
+            "MetricReferences": []
+        }, {
+            "OperationName": "",
+            "DependentKeyAttributes": {
+                "Identifier": "PetSite",
+                "ResourceType": "AWS::Synthetics::Canary",
+                "Type": "AWS::Resource"
+            },
+            "DependentOperationName": "",
+            "MetricReferences": []
+        }],
+        "StartTime": "2024-12-24T05:00:00+00:00",
+        "EndTime": "2024-12-25T06:00:01+00:00"
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-service-level-objectives.rst 2.31.35-1/awscli/examples/application-signals/list-service-level-objectives.rst
--- 2.23.6-1/awscli/examples/application-signals/list-service-level-objectives.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-service-level-objectives.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To return a list of SLOs created in this account.**
+
+The following ``list-service-level-objectives`` example returns a list of SLOs created in this account. ::
+
+    aws application-signals list-service-level-objectives
+
+Output::
+
+    {
+        "SloSummaries": [{
+            "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/test",
+            "Name": "test",
+            "CreatedTime": "2024-12-24T22:01:21.116000+05:30"
+        }]
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-service-operations.rst 2.31.35-1/awscli/examples/application-signals/list-service-operations.rst
--- 2.23.6-1/awscli/examples/application-signals/list-service-operations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-service-operations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,63 @@
+**To return a list of the operations of this service that have been discovered by Application Signals**
+
+The following ``list-service-operations`` example returns a list of the operations of this service that have been discovered by Application Signals. ::
+
+    aws application-signals list-service-operations \
+        --start-time 1735017423 \
+        --end-time 1735103823 \
+        --key-attributes Environment=generic:default,Name=payforadoption,Type=Service
+
+Output::
+
+    {
+        "ServiceOperations": [{
+            "Name": "POST /api",
+            "MetricReferences": [{
+                "Namespace": "ApplicationSignals",
+                "MetricType": "LATENCY",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "generic:default"
+                }, {
+                    "Name": "Operation",
+                    "Value": "POST /api"
+                }, {
+                    "Name": "Service",
+                    "Value": "payforadoption"
+                }],
+                "MetricName": "Latency"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "FAULT",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "generic:default"
+                }, {
+                    "Name": "Operation",
+                    "Value": "POST /api"
+                }, {
+                    "Name": "Service",
+                    "Value": "payforadoption"
+                }],
+                "MetricName": "Fault"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "ERROR",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "generic:default"
+                }, {
+                    "Name": "Operation",
+                    "Value": "POST /api"
+                }, {
+                    "Name": "Service",
+                    "Value": "payforadoption"
+                }],
+                "MetricName": "Error"
+            }]
+        }],
+        "StartTime": "2024-12-24T05:00:00+00:00",
+        "EndTime": "2024-12-25T06:00:01+00:00"
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-services.rst 2.31.35-1/awscli/examples/application-signals/list-services.rst
--- 2.23.6-1/awscli/examples/application-signals/list-services.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-services.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,61 @@
+**To return a list of services that have been discovered by Application Signals**
+
+The following ``list-services`` example returns a list of services that have been discovered by Application Signals. ::
+
+    aws application-signals list-services \
+        --start-time 1734918791 \
+        --end-time 1734965591
+
+Output::
+
+    {
+        "ServiceSummaries": [{
+            "KeyAttributes": {
+                "Environment": "lambda:default",
+                "Name": "hello-world-python",
+                "Type": "Service"
+            },
+            "AttributeMaps": [{
+                "Lambda.Function.Name": "hello-world-python",
+                "PlatformType": "AWS::Lambda"
+            }],
+            "MetricReferences": [{
+                "Namespace": "ApplicationSignals",
+                "MetricType": "LATENCY",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Latency"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "FAULT",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Fault"
+            }, {
+                "Namespace": "ApplicationSignals",
+                "MetricType": "ERROR",
+                "Dimensions": [{
+                    "Name": "Environment",
+                    "Value": "lambda:default"
+                }, {
+                    "Name": "Service",
+                    "Value": "hello-world-python"
+                }],
+                "MetricName": "Error"
+            }]
+        }],
+        "StartTime": "2024-11-27T10:00:00+00:00",
+        "EndTime": "2024-11-27T14:00:01+00:00"
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/list-tags-for-resource.rst 2.31.35-1/awscli/examples/application-signals/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/application-signals/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/list-tags-for-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To display the tags associated with a CloudWatch resource**
+
+The following ``list-tags-for-resource`` example displays the tags associated with a CloudWatch resource. ::
+
+    aws application-signals list-tags-for-resource \
+        --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"
+
+Output::
+
+    {
+        "Tags": [{
+            "Key": "test",
+            "Value": "value"
+        }]
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/start-discovery.rst 2.31.35-1/awscli/examples/application-signals/start-discovery.rst
--- 2.23.6-1/awscli/examples/application-signals/start-discovery.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/start-discovery.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,9 @@
+**To enable this Amazon Web Services account to be able to use CloudWatch Application Signals**
+
+The following ``start-discovery`` example enables this Amazon Web Services account to be able to use CloudWatch Application Signals by creating the *AWSServiceRoleForCloudWatchApplicationSignals* service-linked role. ::
+
+    aws application-signals start-discovery
+
+This command produces no output.
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/tag-resource.rst 2.31.35-1/awscli/examples/application-signals/tag-resource.rst
--- 2.23.6-1/awscli/examples/application-signals/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/tag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To assigns one or more tags (key-value pairs) to the specified CloudWatch resource, such as a service level objective**
+
+The following ``tag-resource`` example assigns one or more tags (key-value pairs) to the specified CloudWatch resource, such as a service level objective. ::
+
+    aws application-signals tag-resource \
+        --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \
+        --tags '{"Key":"test","Value":"value"}'
+
+This command produces no output.
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/untag-resource.rst 2.31.35-1/awscli/examples/application-signals/untag-resource.rst
--- 2.23.6-1/awscli/examples/application-signals/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/untag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To remove one or more tags from the specified resource**
+
+The following ``untag-resource`` example removes one or more tags from the specified resource. ::
+
+    aws application-signals untag-resource \
+        --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \
+        --tag-keys "test"
+
+This command produces no output.
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/application-signals/update-service-level-objective.rst 2.31.35-1/awscli/examples/application-signals/update-service-level-objective.rst
--- 2.23.6-1/awscli/examples/application-signals/update-service-level-objective.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/application-signals/update-service-level-objective.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,69 @@
+**To update an existing service level objective (SLO)**
+
+The following ``update-service-level-objective`` example updates an existing service level objective (SLO). ::
+
+    aws application-signals update-service-level-objective \
+    --cli-input-json file://update-slo.json
+
+Contents of ``update-slo.json``::
+
+    {
+        "id": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
+        "goal": {
+            "Interval": {
+                "RollingInterval": {
+                    "DurationUnit": "DAY",
+                    "Duration": 7
+                }
+            },
+            "AttainmentGoal": 90.0,
+            "WarningThreshold": 50.0
+        }
+    }
+
+Output::
+
+    {
+        "Slo": {
+            "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
+            "Name": "SLOName",
+            "Description": "Description of your SLO",
+            "CreatedTime": "2024-12-24T22:19:18.624000+05:30",
+            "LastUpdatedTime": "2024-12-27T08:51:38.278000+05:30",
+            "Sli": {
+                "SliMetric": {
+                    "MetricDataQueries": [{
+                        "Id": "m1",
+                        "MetricStat": {
+                            "Metric": {
+                                "Namespace": "AWS/EC2",
+                                "MetricName": "CPUUtilization",
+                                "Dimensions": [{
+                                    "Name": "InstanceId",
+                                    "Value": "i-00987654345222"
+                                }]
+                            },
+                            "Period": 60,
+                            "Stat": "Average"
+                        },
+                        "ReturnData": true
+                    }]
+                },
+                "MetricThreshold": 200.0,
+                "ComparisonOperator": "LessThanOrEqualTo"
+            },
+            "EvaluationType": "PeriodBased",
+            "Goal": {
+                "Interval": {
+                    "RollingInterval": {
+                        "DurationUnit": "DAY",
+                        "Duration": 7
+                    }
+                },
+                "AttainmentGoal": 90.0,
+                "WarningThreshold": 50.0
+            }
+        }
+    }
+
+For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To associate phone numbers with an Amazon Chime Voice Connector group**
-
-The following ``associate-phone-numbers-with-voice-connector-group`` example associates the specified phone numbers with an Amazon Chime Voice Connector group. ::
-
-    aws chime associate-phone-numbers-with-voice-connector-group \
-        --voice-connector-group-id 123a456b-c7d8-90e1-fg23-4h567jkl8901 \
-        --e164-phone-numbers "+12065550100" "+12065550101" \
-        --force-associate
-
-Output::
-
-    {
-        "PhoneNumberErrors": []
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector.rst 2.31.35-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/associate-phone-numbers-with-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To associate phone numbers with an Amazon Chime Voice Connector**
-
-The following ``associate-phone-numbers-with-voice-connector`` example  associates the specified phone numbers with an Amazon Chime Voice Connector. ::
-
-    aws chime associate-phone-numbers-with-voice-connector \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --e164-phone-numbers "+12065550100" "+12065550101"
-        --force-associate
-
-Output::
-
-    {
-        "PhoneNumberErrors": []
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/create-proxy-session.rst 2.31.35-1/awscli/examples/chime/create-proxy-session.rst
--- 2.23.6-1/awscli/examples/chime/create-proxy-session.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/create-proxy-session.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-**To create a proxy session**
-
-The following ``create-proxy-session`` example creates a proxy session with voice and SMS capabilities. ::
-
-    aws chime create-proxy-session \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --participant-phone-numbers "+14015550101" "+12065550100" \
-        --capabilities "Voice" "SMS"
-
-Output::
-
-    {
-        "ProxySession": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "ProxySessionId": "123a4bc5-67d8-901e-2f3g-h4ghjk56789l",
-            "Status": "Open",
-            "ExpiryMinutes": 60,
-            "Capabilities": [
-                "SMS",
-                "Voice"
-            ],
-            "CreatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "UpdatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "Participants": [
-                {
-                    "PhoneNumber": "+12065550100",
-                    "ProxyPhoneNumber": "+19135550199"
-                },
-                {
-                    "PhoneNumber": "+14015550101",
-                    "ProxyPhoneNumber": "+19135550199"
-                }
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/create-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/create-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/create-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/create-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-**To create an Amazon Chime Voice Connector group**
-
-The following ``create-voice-connector-group`` example creates an Amazon Chime Voice Connector group that includes the specified Amazon Chime Voice Connector. ::
-
-    aws chime create-voice-connector-group \
-        --name myGroup \
-        --voice-connector-items VoiceConnectorId=abcdef1ghij2klmno3pqr4,Priority=2
-
-Output::
-
-    {
-        "VoiceConnectorGroup": {
-            "VoiceConnectorGroupId": "123a456b-c7d8-90e1-fg23-4h567jkl8901",
-            "Name": "myGroup",
-            "VoiceConnectorItems": [],
-            "CreatedTimestamp": "2019-09-18T16:38:34.734Z",
-            "UpdatedTimestamp": "2019-09-18T16:38:34.734Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector Groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/create-voice-connector.rst 2.31.35-1/awscli/examples/chime/create-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/create-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/create-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To create an Amazon Chime Voice Connector**
-
-The following ``create-voice-connector`` example creates an Amazon Chime Voice Connector in the specified AWS Region, with encryption enabled. ::
-
-    aws chime create-voice-connector \
-        --name newVoiceConnector \
-        --aws-region us-west-2 \
-        --require-encryption
-
-Output::
-
-    {
-        "VoiceConnector": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "AwsRegion": "us-west-2",
-            "Name": "newVoiceConnector",
-            "OutboundHostName": "abcdef1ghij2klmno3pqr4.voiceconnector.chime.aws",
-            "RequireEncryption": true,
-            "CreatedTimestamp": "2019-09-18T20:34:01.352Z",
-            "UpdatedTimestamp": "2019-09-18T20:34:01.352Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-proxy-session.rst 2.31.35-1/awscli/examples/chime/delete-proxy-session.rst
--- 2.23.6-1/awscli/examples/chime/delete-proxy-session.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-proxy-session.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-**To delete a proxy session**
-
-The following ``delete-proxy-session`` example deletes the specified proxy session. ::
-
-    aws chime delete-proxy-session \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --proxy-session-id 123a4bc5-67d8-901e-2f3g-h4ghjk56789l
-
-This command produces no output.
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**title**
-
-The following ``delete-voice-connector-group`` example deletes the specified Amazon Chime Voice Connector group. ::
-
-    aws chime delete-voice-connector-group \
-        --voice-connector-group-id 123a456b-c7d8-90e1-fg23-4h567jkl8901
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connector Groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-origination.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-origination.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-origination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-origination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete origination settings**
-
-The following ``delete-voice-connector-origination`` example deletes the origination host, port, protocol, priority, and weight from the specified Amazon Chime Voice Connector. ::
-
-    aws chime delete-voice-connector-origination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-proxy.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-proxy.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-proxy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-proxy.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete a proxy configuration**
-
-The following ``delete-voice-connector-proxy`` example deletes the proxy configuration from your Amazon Chime Voice Connector. ::
-
-    aws chime delete-voice-connector-proxy \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-streaming-configuration.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-streaming-configuration.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-streaming-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-streaming-configuration.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete a streaming configuration**
-
-The following ``delete-voice-connector-streaming-configuration`` example deletes the streaming configuration for the specified Amazon Chime Voice Connector. ::
-
-    aws chime delete-voice-connector-streaming-configuration \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-
-For more information, see `Streaming Amazon Chime Voice Connector Data to Kinesis <https://docs.aws.amazon.com/chime/latest/ag/start-kinesis-vc.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-termination-credentials.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-termination-credentials.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-termination-credentials.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-termination-credentials.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-**To delete termination credentials**
-
-The following ``delete-voice-connector-termination-credentials`` example deletes the termination credentials for the specified user name and Amazon Chime Voice Connector. ::
-
-    aws chime delete-voice-connector-termination-credentials \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --usernames "jdoe"
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector-termination.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector-termination.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector-termination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector-termination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete termination settings**
-
-The following ``delete-voice-connector-termination`` example deletes the termination settings for the specified Amazon Chime Voice Connector. ::
-
-    aws chime delete-voice-connector-termination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/delete-voice-connector.rst 2.31.35-1/awscli/examples/chime/delete-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/delete-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/delete-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete an Amazon Chime Voice Connector**
-
-The following ``delete-voice-connector`` example doesthis ::
-
-    aws chime delete-voice-connector \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To disassociate phone numbers from an Amazon Chime Voice Connector group**
-
-The following ``disassociate-phone-numbers-from-voice-connector-group`` example disassociates the specified phone numbers from an Amazon Chime Voice Connector group. ::
-
-    aws chime disassociate-phone-numbers-from-voice-connector-group \
-        --voice-connector-group-id 123a456b-c7d8-90e1-fg23-4h567jkl8901 \
-        --e164-phone-numbers "+12065550100" "+12065550101"
-
-Output::
-
-    {
-        "PhoneNumberErrors": []
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector Groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector.rst 2.31.35-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/disassociate-phone-numbers-from-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To disassociate phone numbers from an Amazon Chime Voice Connector**
-
-The following ``disassociate-phone-numbers-from-voice-connector`` example disassociates the specified phone numbers from an Amazon Chime Voice Connector. ::
-
-    aws chime disassociate-phone-numbers-from-voice-connector \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --e164-phone-numbers "+12065550100" "+12065550101"
-
-Output::
-
-    {
-        "PhoneNumberErrors": []
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-proxy-session.rst 2.31.35-1/awscli/examples/chime/get-proxy-session.rst
--- 2.23.6-1/awscli/examples/chime/get-proxy-session.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-proxy-session.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-**To get proxy session details**
-
-The following ``get-proxy-session`` example lists the details of the specified proxy session. ::
-
-    aws chime get-proxy-session \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --proxy-session-id 123a4bc5-67d8-901e-2f3g-h4ghjk56789l
-
-Output::
-
-    {
-        "ProxySession": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "ProxySessionId": "123a4bc5-67d8-901e-2f3g-h4ghjk56789l",
-            "Status": "Open",
-            "ExpiryMinutes": 60,
-            "Capabilities": [
-                "SMS",
-                "Voice"
-            ],
-            "CreatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "UpdatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "Participants": [
-                {
-                    "PhoneNumber": "+12065550100",
-                    "ProxyPhoneNumber": "+19135550199"
-                },
-                {
-                    "PhoneNumber": "+14015550101",
-                    "ProxyPhoneNumber": "+19135550199"
-                }
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To get details for an Amazon Chime Voice Connector group**
-
-The following ``get-voice-connector-group`` example displays details for the specified Amazon Chime Voice Connector group. ::
-
-    aws chime get-voice-connector-group \
-        --voice-connector-group-id 123a456b-c7d8-90e1-fg23-4h567jkl8901
-
-Output::
-
-    {
-        "VoiceConnectorGroup": {
-            "VoiceConnectorGroupId": "123a456b-c7d8-90e1-fg23-4h567jkl8901",
-            "Name": "myGroup",
-            "VoiceConnectorItems": [],
-            "CreatedTimestamp": "2019-09-18T16:38:34.734Z",
-            "UpdatedTimestamp": "2019-09-18T16:38:34.734Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector Groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-logging-configuration.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-logging-configuration.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-logging-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-logging-configuration.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To get logging configuration details**
-
-The following ``get-voice-connector-logging-configuration`` example retreives the logging configuration details for the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-logging-configuration \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "LoggingConfiguration": {
-            "EnableSIPLogs": true
-        }
-    }
-
-
-For more information, see `Streaming Amazon Chime Voice Connector Media to Kinesis <https://docs.aws.amazon.com/chime/latest/ag/start-kinesis-vc.html>`__ in the *Amazon Chime Administration Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-origination.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-origination.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-origination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-origination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-**To retrieve origination settings**
-
-The following ``get-voice-connector-origination`` example retrieves the origination host, port, protocol, priority, and weight for the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-origination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "Origination": {
-            "Routes": [
-                {
-                    "Host": "10.24.34.0",
-                    "Port": 1234,
-                    "Protocol": "TCP",
-                    "Priority": 1,
-                    "Weight": 5
-                }
-            ],
-            "Disabled": false
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-proxy.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-proxy.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-proxy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-proxy.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To get proxy configuration details**
-
-The following ``get-voice-connector-proxy`` example gets the proxy configuration details for your Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-proxy \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "Proxy": {
-            "DefaultSessionExpiryMinutes": 60,
-            "Disabled": false,
-            "PhoneNumberCountries": [
-                "US"
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-streaming-configuration.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-streaming-configuration.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-streaming-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-streaming-configuration.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To get streaming configuration details**
-
-The following ``get-voice-connector-streaming-configuration`` example gets the streaming configuration details for the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-streaming-configuration \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "StreamingConfiguration": {
-            "DataRetentionInHours": 24,
-            "Disabled": false
-        }
-    }
-
-For more information, see `Streaming Amazon Chime Voice Connector Data to Kinesis <https://docs.aws.amazon.com/chime/latest/ag/start-kinesis-vc.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-termination-health.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-termination-health.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-termination-health.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-termination-health.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To retrieve termination health details**
-
-The following ``get-voice-connector-termination-health`` example retrieves the termination health details for the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-termination-health \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "TerminationHealth": {
-            "Timestamp": "Fri Aug 23 16:45:55 UTC 2019", 
-            "Source": "10.24.34.0"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector-termination.rst 2.31.35-1/awscli/examples/chime/get-voice-connector-termination.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector-termination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector-termination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-**To retrieve termination settings**
-
-The following ``get-voice-connector-termination`` example retrieves the termination settings for the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector-termination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-Output::
-
-    {
-        "Termination": {
-            "CpsLimit": 1,
-            "DefaultPhoneNumber": "+12065550100",
-            "CallingRegions": [
-                "US"
-            ],
-            "CidrAllowedList": [
-                "10.24.34.0/23"
-            ],
-            "Disabled": false
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/get-voice-connector.rst 2.31.35-1/awscli/examples/chime/get-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/get-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/get-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-**To get details for an Amazon Chime Voice Connector**
-
-The following ``get-voice-connector`` example displays the details of the specified Amazon Chime Voice Connector. ::
-
-    aws chime get-voice-connector \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "VoiceConnector": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "AwsRegion": "us-west-2",
-            "Name": "newVoiceConnector",
-            "OutboundHostName": "abcdef1ghij2klmno3pqr4.voiceconnector.chime.aws",
-            "RequireEncryption": true,
-            "CreatedTimestamp": "2019-09-18T20:34:01.352Z",
-            "UpdatedTimestamp": "2019-09-18T20:34:01.352Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/list-proxy-sessions.rst 2.31.35-1/awscli/examples/chime/list-proxy-sessions.rst
--- 2.23.6-1/awscli/examples/chime/list-proxy-sessions.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/list-proxy-sessions.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,35 +0,0 @@
-**To list proxy sessions**
-
-The following ``list-proxy-sessions`` example lists the proxy sessions for your Amazon Chime Voice Connector. ::
-
-    aws chime list-proxy-sessions \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-Output::
-
-    {
-        "ProxySession": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "ProxySessionId": "123a4bc5-67d8-901e-2f3g-h4ghjk56789l",
-            "Status": "Open",
-            "ExpiryMinutes": 60,
-            "Capabilities": [
-                "SMS",
-                "Voice"
-            ],
-            "CreatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "UpdatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "Participants": [
-                {
-                    "PhoneNumber": "+12065550100",
-                    "ProxyPhoneNumber": "+19135550199"
-                },
-                {
-                    "PhoneNumber": "+14015550101",
-                    "ProxyPhoneNumber": "+19135550199"
-                }
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/list-voice-connector-groups.rst 2.31.35-1/awscli/examples/chime/list-voice-connector-groups.rst
--- 2.23.6-1/awscli/examples/chime/list-voice-connector-groups.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/list-voice-connector-groups.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-**To list Amazon Chime Voice Connector groups for an Amazon Chime account**
-
-The following ``list-voice-connector-groups`` example lists the Amazon Chime Voice Connector groups associated with the administrator's Amazon Chime account. ::
-
-    aws chime list-voice-connector-groups
-
-Output::
-
-    {
-        "VoiceConnectorGroups": [
-            {
-                "VoiceConnectorGroupId": "123a456b-c7d8-90e1-fg23-4h567jkl8901",
-                "Name": "myGroup",
-                "VoiceConnectorItems": [],
-                "CreatedTimestamp": "2019-09-18T16:38:34.734Z",
-                "UpdatedTimestamp": "2019-09-18T16:38:34.734Z"
-            }
-        ]
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/list-voice-connector-termination-credentials.rst 2.31.35-1/awscli/examples/chime/list-voice-connector-termination-credentials.rst
--- 2.23.6-1/awscli/examples/chime/list-voice-connector-termination-credentials.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/list-voice-connector-termination-credentials.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To retrieve a list of termination credentials**
-
-The following ``list-voice-connector-termination-credentials`` example retrieves a list of the termination credentials for the specified Amazon Chime Voice Connector. ::
-
-    aws chime list-voice-connector-termination-credentials \
-        --voice-connector-id abcdef1ghij2klmno3pqr4
-
-This command produces no output.
-Output::
-
-    {
-        "Usernames": [
-            "jdoe"
-        ]
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/list-voice-connectors.rst 2.31.35-1/awscli/examples/chime/list-voice-connectors.rst
--- 2.23.6-1/awscli/examples/chime/list-voice-connectors.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/list-voice-connectors.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-**To list Amazon Chime Voice Connectors for an account**
-
-The following ``list-voice-connectors`` example lists the Amazon Chime Voice Connectors associated with the caller's account. ::
-
-    aws chime list-voice-connectors
-
-Output::
-
-    {
-        "VoiceConnectors": [
-            {
-                "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-                "AwsRegion": "us-east-1",
-                "Name": "MyVoiceConnector",
-                "OutboundHostName": "abcdef1ghij2klmno3pqr4.voiceconnector.chime.aws",
-                "RequireEncryption": true,
-                "CreatedTimestamp": "2019-06-04T18:46:56.508Z",
-                "UpdatedTimestamp": "2019-09-18T16:33:00.806Z"
-            },
-            {
-                "VoiceConnectorId": "cbadef1ghij2klmno3pqr5",
-                "AwsRegion": "us-west-2",
-                "Name": "newVoiceConnector",
-                "OutboundHostName": "cbadef1ghij2klmno3pqr5.voiceconnector.chime.aws",
-                "RequireEncryption": true,
-                "CreatedTimestamp": "2019-09-18T20:34:01.352Z",
-                "UpdatedTimestamp": "2019-09-18T20:34:01.352Z"
-            }
-        ]
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-logging-configuration.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-logging-configuration.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-logging-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-logging-configuration.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To add a logging configuration for an Amazon Chime Voice Connector**
-
-The following ``put-voice-connector-logging-configuration`` example turns on the SIP logging configuration for the specified Amazon Chime Voice Connector. ::
-
-    aws chime put-voice-connector-logging-configuration \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --logging-configuration EnableSIPLogs=true
-
-Output::
-
-    {
-        "LoggingConfiguration": {
-            "EnableSIPLogs": true
-        }
-    }
-
-For more information, see `Streaming Amazon Chime Voice Connector Media to Kinesis <https://docs.aws.amazon.com/chime/latest/ag/start-kinesis-vc.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-origination.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-origination.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-origination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-origination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-**To set up origination settings**
-
-The following ``put-voice-connector-origination`` example sets up the origination host, port, protocol, priority, and weight for the specified Amazon Chime Voice Connector. ::
-
-    aws chime put-voice-connector-origination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --origination Routes=[{Host="10.24.34.0",Port=1234,Protocol="TCP",Priority=1,Weight=5}],Disabled=false
-
-Output::
-
-    {
-        "Origination": {
-            "Routes": [
-                {
-                    "Host": "10.24.34.0",
-                    "Port": 1234,
-                    "Protocol": "TCP",
-                    "Priority": 1,
-                    "Weight": 5
-                }
-            ],
-            "Disabled": false
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-proxy.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-proxy.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-proxy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-proxy.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-**To put a proxy configuration**
-
-The following ``put-voice-connector-proxy`` example sets a proxy configuration to your Amazon Chime Voice Connector. ::
-
-    aws chime put-voice-connector-proxy \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --default-session-expiry-minutes 60 \
-        --phone-number-pool-countries "US"
-
-Output::
-
-    {
-        "Proxy": {
-            "DefaultSessionExpiryMinutes": 60,
-            "Disabled": false,
-            "PhoneNumberCountries": [
-                "US"
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-streaming-configuration.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-streaming-configuration.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-streaming-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-streaming-configuration.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-**To create a streaming configuration**
-
-The following ``put-voice-connector-streaming-configuration`` example creates a streaming configuration for the specified Amazon Chime Voice Connector. It enables media streaming from the Amazon Chime Voice Connector to Amazon Kinesis, and sets the data retention period to 24 hours. ::
-
-    aws chime put-voice-connector-streaming-configuration \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --streaming-configuration DataRetentionInHours=24,Disabled=false
-
-Output::
-
-    {
-        "StreamingConfiguration": {
-            "DataRetentionInHours": 24,
-            "Disabled": false
-        }
-    }
-
-For more information, see `Streaming Amazon Chime Voice Connector Data to Kinesis <https://docs.aws.amazon.com/chime/latest/ag/start-kinesis-vc.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-termination-credentials.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-termination-credentials.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-termination-credentials.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-termination-credentials.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-**To set up termination credentials**
-
-The following ``put-voice-connector-termination-credentials`` example sets termination credentials for the specified Amazon Chime Voice Connector. ::
-
-    aws chime put-voice-connector-termination-credentials \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --credentials Username="jdoe",Password="XXXXXXXX"
-
-This command produces no output.
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/put-voice-connector-termination.rst 2.31.35-1/awscli/examples/chime/put-voice-connector-termination.rst
--- 2.23.6-1/awscli/examples/chime/put-voice-connector-termination.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/put-voice-connector-termination.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To set up termination settings**
-
-The following ``put-voice-connector-termination`` example sets the calling regions and allowed IP host termination settings for the specified Amazon Chime Voice Connector. ::
-
-    aws chime put-voice-connector-termination \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --termination CallingRegions="US",CidrAllowedList="10.24.34.0/23",Disabled=false
-
-Output::
-
-    {
-        "Termination": {
-            "CpsLimit": 0,
-            "CallingRegions": [
-                "US"
-            ],
-            "CidrAllowedList": [
-                "10.24.34.0/23"
-            ],
-            "Disabled": false
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/update-proxy-session.rst 2.31.35-1/awscli/examples/chime/update-proxy-session.rst
--- 2.23.6-1/awscli/examples/chime/update-proxy-session.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/update-proxy-session.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-**To update a proxy session**
-
-The following ``update-proxy-session`` example updates the proxy session capabilities. ::
-
-    aws chime update-proxy-session \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --proxy-session-id 123a4bc5-67d8-901e-2f3g-h4ghjk56789l \
-        --capabilities "Voice"
-
-Output::
-
-    {
-        "ProxySession": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "ProxySessionId": "123a4bc5-67d8-901e-2f3g-h4ghjk56789l",
-            "Status": "Open",
-            "ExpiryMinutes": 60,
-            "Capabilities": [
-                "Voice"
-            ],
-            "CreatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "UpdatedTimestamp": "2020-04-15T16:10:10.288Z",
-            "Participants": [
-                {
-                    "PhoneNumber": "+12065550100",
-                    "ProxyPhoneNumber": "+19135550199"
-                },
-                {
-                    "PhoneNumber": "+14015550101",
-                    "ProxyPhoneNumber": "+19135550199"
-                }
-            ]
-        }
-    }
-
-For more information, see `Proxy Phone Sessions <https://docs.aws.amazon.com/chime/latest/dg/proxy-phone-sessions.html>`__ in the *Amazon Chime Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/update-voice-connector-group.rst 2.31.35-1/awscli/examples/chime/update-voice-connector-group.rst
--- 2.23.6-1/awscli/examples/chime/update-voice-connector-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/update-voice-connector-group.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-**To update the details for an Amazon Chime Voice Connector group**
-
-The following ``update-voice-connector-group`` example updates the details of the specified Amazon Chime Voice Connector group. ::
-
-    aws chime update-voice-connector-group \
-        --voice-connector-group-id 123a456b-c7d8-90e1-fg23-4h567jkl8901 \
-        --name "newGroupName" \
-        --voice-connector-items VoiceConnectorId=abcdef1ghij2klmno3pqr4,Priority=1
-
-Output::
-
-    {
-        "VoiceConnectorGroup": {
-            "VoiceConnectorGroupId": "123a456b-c7d8-90e1-fg23-4h567jkl8901",
-            "Name": "newGroupName",
-            "VoiceConnectorItems": [
-                {
-                    "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-                    "Priority": 1
-                }
-            ],
-            "CreatedTimestamp": "2019-09-18T16:38:34.734Z",
-            "UpdatedTimestamp": "2019-10-28T19:00:57.081Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connector Groups <https://docs.aws.amazon.com/chime/latest/ag/voice-connector-groups.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/chime/update-voice-connector.rst 2.31.35-1/awscli/examples/chime/update-voice-connector.rst
--- 2.23.6-1/awscli/examples/chime/update-voice-connector.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/chime/update-voice-connector.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To update the details for an Amazon Chime Voice Connector**
-
-The following ``update-voice-connector`` example updates the name of the specified Amazon Chime Voice Connector. ::
-
-    aws chime update-voice-connector \
-        --voice-connector-id abcdef1ghij2klmno3pqr4 \
-        --name newName \
-        --require-encryption
-
-Output::
-
-    {
-        "VoiceConnector": {
-            "VoiceConnectorId": "abcdef1ghij2klmno3pqr4",
-            "AwsRegion": "us-west-2",
-            "Name": "newName",
-            "OutboundHostName": "abcdef1ghij2klmno3pqr4.voiceconnector.chime.aws",
-            "RequireEncryption": true,
-            "CreatedTimestamp": "2019-09-18T20:34:01.352Z",
-            "UpdatedTimestamp": "2019-09-18T20:40:52.895Z"
-        }
-    }
-
-For more information, see `Working with Amazon Chime Voice Connectors <https://docs.aws.amazon.com/chime/latest/ag/voice-connectors.html>`__ in the *Amazon Chime Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudformation/_package_description.rst 2.31.35-1/awscli/examples/cloudformation/_package_description.rst
--- 2.23.6-1/awscli/examples/cloudformation/_package_description.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudformation/_package_description.rst	2025-11-12 19:17:29.000000000 +0000
@@ -40,7 +40,7 @@ For example, if your AWS Lambda function
 ``/home/user/code/lambdafunction/`` folder, specify
 ``CodeUri: /home/user/code/lambdafunction`` for the
 ``AWS::Serverless::Function`` resource. The command returns a template and replaces
-the local path with the S3 location: ``CodeUri: s3://mybucket/lambdafunction.zip``.
+the local path with the S3 location: ``CodeUri: s3://amzn-s3-demo-bucket/lambdafunction.zip``.
 
 If you specify a file, the command directly uploads it to the S3 bucket. If you
 specify a folder, the command zips the folder and then uploads the .zip file.
@@ -49,8 +49,8 @@ current working directory. The exception
 if you don't specify a ``BodyS3Location``, this command will not upload an artifact to S3.
 
 Before the command uploads artifacts, it checks if the artifacts are already
-present in the S3 bucket to prevent unnecessary uploads. The command uses MD5
-checksums to compare files. If the values match, the command doesn't upload the
-artifacts. Use the ``--force-upload flag`` to skip this check and always upload the
-artifacts.
+present in the S3 bucket to prevent unnecessary uploads. If the values match, the
+command doesn't upload the artifacts. Use the ``--force-upload flag`` to skip this
+check and always upload the artifacts. The command uses MD5 checksums to compare
+files by default. If MD5 is not available in the environment, a SHA256 checksum is used.
 
diff -pruN 2.23.6-1/awscli/examples/cloudfront/associate-distribution-tenant-web-acl.rst 2.31.35-1/awscli/examples/cloudfront/associate-distribution-tenant-web-acl.rst
--- 2.23.6-1/awscli/examples/cloudfront/associate-distribution-tenant-web-acl.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/associate-distribution-tenant-web-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To associate a web ACL with a CloudFront distribution tenant**
+
+The following ``associate-distribution-tenant-web-acl`` example associates a web ACL with a CloudFront distribution with ETag ``E13V1IB3VIYABC``. ::
+
+    aws cloudfront associate-distribution-tenant-web-acl \
+        --id dt_2wjDZi3hD1ivOXf6rpZJO1AB \
+        --if-match E13V1IB3VIYABC \
+        --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f37123ABC
+
+Output::
+
+    {
+        "ETag": "E1VC38T7YXBABC",
+        "Id": "dt_2wjDZi3hD1ivOXf6rpZJO1AB",
+        "WebACLArn": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f37123ABC"
+    }
+
+For more information, see `Use AWS WAF protections <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/associate-distribution-web-acl.rst 2.31.35-1/awscli/examples/cloudfront/associate-distribution-web-acl.rst
--- 2.23.6-1/awscli/examples/cloudfront/associate-distribution-web-acl.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/associate-distribution-web-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To associate a web ACL with a CloudFront distribution**
+
+The following ``associate-distribution-web-acl`` example associates a web ACL with a CloudFront distribution. ::
+
+    aws cloudfront associate-distribution-web-acl \
+        --id E1XNX8R2GOAABC \
+        --if-match E2YWS1C2J3OABC \
+        --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f3746cABC
+
+Output::
+
+    {
+        "ETag": "E3QE7ED60U0ABC",
+        "Id": "E1XNX8R2GOAABC",
+        "WebACLArn": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f3746cABC"
+    }
+
+For more information, see `Use AWS WAF protections <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/create-connection-group.rst 2.31.35-1/awscli/examples/cloudfront/create-connection-group.rst
--- 2.23.6-1/awscli/examples/cloudfront/create-connection-group.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/create-connection-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,39 @@
+**To create a connection group in CloudFront**
+
+The following ``create-connection-group`` example creates an enabled connection group, specifies an Anycast static IP list, and disables IPv6. ::
+
+    aws cloudfront create-connection-group \
+        --name cg-with-anycast-ip-list \
+        --no-ipv6-enabled \
+        --enabled \
+        --anycast-ip-list-id aip_CCkW6gKrDiBD4n78123ABC \
+        --tags "Items=[{Key=abc,Value=123}]"
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "ConnectionGroup": {
+            "Id": "cg_2yb6uj74B4PCbfhT31WFdiSABC",
+            "Name": "cg-with-anycast-ip-list",
+            "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2yb6uj74B4PCbfhT31WFdiSABC",
+            "CreatedTime": "2025-06-16T16:25:50.061000+00:00",
+            "LastModifiedTime": "2025-06-16T16:25:50.061000+00:00",
+            "Tags": {
+                "Items": [
+                    {
+                        "Key": "abc",
+                        "Value": "123"
+                    }
+                ]
+            },
+            "Ipv6Enabled": false,
+            "RoutingEndpoint": "dj6xusxq65abc.cloudfront.net",
+            "AnycastIpListId": "aip_CCkW6gKrDiBD4n78123ABC",
+            "Status": "InProgress",
+            "Enabled": true,
+            "IsDefault": false
+        }
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/create-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/create-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/create-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/create-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,275 @@
+**Example 1: To create a CloudFront distribution tenant that uses a custom certificate**
+
+The following ``create-distribution-tenant`` example creates a CloudFront distribution tenant that specifies customizations to disable WAF, add geo-restrictions, and uses another TLS certificate. ::
+
+    aws cloudfront create-distribution-tenant \
+        --cli-input-json file://tenant.json
+
+Contents of ``tenant.json``::
+
+    {
+        "DistributionId": "E1XNX8R2GOAABC",
+        "Domains": [
+            {
+                "Domain": "example.com"
+            }
+        ],
+        "Parameters": [
+            {
+                "Name": "testParam",
+                "Value": "defaultValue"
+            }
+        ],
+        "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+        "Enabled": false,
+        "Tags": {
+            "Items": [
+                {
+                    "Key": "tag",
+                    "Value": "tagValue"
+                }
+            ]
+        },
+        "Name": "new-tenant-customizations",
+        "Customizations": {
+            "GeoRestrictions": {
+                "Locations": ["DE"],
+                "RestrictionType": "whitelist"
+            },
+            "WebAcl": {
+                "Action": "disable"
+            },
+            "Certificate": {
+                "Arn": "arn:aws:acm:us-east-1:123456789012:certificate/ec53f564-ea5a-4e4a-a0a2-e3c989449abc"
+            }
+        }
+    }
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "DistributionTenant": {
+            "Id": "dt_2yN5tYwVbPKr7m2IB69M1yp1AB",
+            "DistributionId": "E1XNX8R2GOAABC",
+            "Name": "new-tenant-customizations",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2yN5tYwVbPKr7m2IB69M1yp1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "active"
+                }
+            ],
+            "Tags": {
+                "Items": [
+                    {
+                        "Key": "tag",
+                        "Value": "tagValue"
+                    }
+                ]
+            },
+            "Customizations": {
+                "WebAcl": {
+                    "Action": "disable"
+                },
+                "Certificate": {
+                    "Arn": "arn:aws:acm:us-east-1:123456789012:certificate/ec53f564-ea5a-4e4a-a0a2-e3c989449abc"
+                },
+                "GeoRestrictions": {
+                    "RestrictionType": "whitelist",
+                    "Locations": [
+                        "DE"
+                    ]
+                }
+            },
+            "Parameters": [
+                {
+                    "Name": "testParam",
+                    "Value": "defaultValue"
+                }
+            ],
+            "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+            "CreatedTime": "2025-06-11T17:20:06.432000+00:00",
+            "LastModifiedTime": "2025-06-11T17:20:06.432000+00:00",
+            "Enabled": false,
+            "Status": "InProgress"
+        }
+    }
+
+**Example 2: To create a distribution tenant with an inherited certificate**
+
+The following ``create-distribution-tenant`` example creates a distribution tenant and specifies an inherited TLS certificate from the multi-tenant distribution. ::
+
+    aws cloudfront create-distribution-tenant \
+        --cli-input-json file://tenant.json
+
+Contents of ``tenant.json``::
+
+    {
+        "DistributionId": "E1HVIAU7U12ABC",
+        "Domains": [
+            {
+                "Domain": "example.com"
+            }
+        ],
+        "Parameters": [
+            {
+                "Name": "tenantName",
+                "Value": "first-tenant"
+            }
+        ],
+        "Enabled": true,
+        "Name": "new-tenant-no-cert"
+    }
+
+Output::
+
+    {
+        "ETag": "E23ZP02F0ABC",
+        "DistributionTenant": {
+            "Id": "dt_2zhRB0vBe0B72LZCVy1mgzI1AB",
+            "DistributionId": "E1HVIAU7U12ABC",
+            "Name": "new-tenant-no-cert",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2zhRB0vBe0B72LZCVy1mgzI1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "active"
+                }
+            ],
+            "Parameters": [
+                {
+                    "Name": "tenantName",
+                    "Value": "first-tenant"
+                }
+            ],
+            "ConnectionGroupId": "cg_2yQEwpipGFN0hhA0ZemPabOABC",
+            "CreatedTime": "2025-07-10T20:59:38.414000+00:00",
+            "LastModifiedTime": "2025-07-10T20:59:38.414000+00:00",
+            "Enabled": true,
+            "Status": "InProgress"
+        }
+    }
+
+**Example 3: To create a CloudFront distribution tenant using a CloudFront-hosted validation token**
+
+The following ``create-distribution-tenant`` example creates a distribution tenant and uses a CloudFront-hosted validation token for your domain name. ::
+
+    aws cloudfront create-distribution-tenant \
+        --cli-input-json file://tenant.json
+
+Contents of ``tenant.json``::
+
+    {
+        "DistributionId": "E2GJ5J9QN12ABC",
+        "Domains": [
+            {
+                "Domain": "example.com"
+            }
+        ],
+        "Parameters": [
+            {
+                "Name": "tenantName",
+                "Value": "first-tenant"
+            }
+        ],
+        "ConnectionGroupId": "cg_2yQEwpipGFN0hhA0ZemPabOABC",
+        "Enabled": true,
+        "Name": "new-tenant-cf-hosted",
+        "ManagedCertificateRequest": {
+            "ValidationTokenHost": "cloudfront"
+        }
+    }
+
+**Important:** To successfully run this command, you must configure a CNAME DNS record that points your new domain (example.com) to the routing endpoint of the connection group that is associated with the distribution tenant. This CNAME record must also be propagated before CloudFront can successfully complete this request.
+
+Output::
+
+    {
+        "ETag": "E23ZP02F0ABC",
+        "DistributionTenant": {
+            "Id": "dt_2zhStKrA524GvvTWJX92Ozl1AB",
+            "DistributionId": "E2GJ5J9QN12ABC",
+            "Name": "new-tenant-cf-hosted",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2zhStKrA524GvvTWJX92Ozl1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "inactive"
+                }
+            ],
+            "Parameters": [
+                {
+                    "Name": "tenantName",
+                    "Value": "first-tenant"
+                }
+            ],
+            "ConnectionGroupId": "cg_2zhSaGatwwXjTjE42nneZzqABC",
+            "CreatedTime": "2025-07-10T21:13:46.416000+00:00",
+            "LastModifiedTime": "2025-07-10T21:13:46.416000+00:00",
+            "Enabled": true,
+            "Status": "InProgress"
+        }
+    }
+
+**Example 4: To create a CloudFront distribution tenant using a self-hosted validation token**
+
+The following ``create-distribution-tenant`` example creates a CloudFront distribution tenant and uses a self-hosted validation token. ::
+
+    aws cloudfront create-distribution-tenant \
+        --cli-input-json file://tenant.json
+
+Contents of ``tenant.json``::
+
+    {
+        "DistributionId": "E2GJ5J9QN12ABC",
+        "Domains": [
+            {
+                "Domain": "example.com"
+            }
+        ],
+        "Parameters": [
+            {
+                "Name": "tenantName",
+                "Value": "first-tenant"
+            }
+        ],
+        "Enabled": true,
+        "Name": "new-tenant-self-hosted",
+        "ManagedCertificateRequest": {
+            "ValidationTokenHost": "self-hosted"
+        }
+    }
+
+Output::
+
+    {
+        "ETag": "E23ZP02F0ABC",
+        "DistributionTenant": {
+            "Id": "dt_2zhTFBV93OfFJJ3YMdNM5BC1AB",
+            "DistributionId": "E2GJ5J9QN12ABC",
+            "Name": "new-tenant-self-hosted",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2zhTFBV93OfFJJ3YMdNM5BC1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "inactive"
+                }
+            ],
+            "Parameters": [
+                {
+                    "Name": "tenantName",
+                    "Value": "first-tenant"
+                }
+            ],
+            "ConnectionGroupId": "cg_2yQEwpipGFN0hhA0ZemPabOABC",
+            "CreatedTime": "2025-07-10T21:16:39.828000+00:00",
+            "LastModifiedTime": "2025-07-10T21:16:39.828000+00:00",
+            "Enabled": true,
+            "Status": "InProgress"
+        }
+    }
+
+**Important:** After you run this command, the distribution tenant will be created without validation. To validate the managed certificate request and configure the DNS when you're ready to start receiving traffic, see `Complete domain setup <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/managed-cloudfront-certificates.html#complete-domain-ownership>`__ in the *Amazon CloudFront Developer Guide*.
+
+For more information about creating distribution tenants, see `Create a distribution <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/create-distribution.rst 2.31.35-1/awscli/examples/cloudfront/create-distribution.rst
--- 2.23.6-1/awscli/examples/cloudfront/create-distribution.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/create-distribution.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,235 +1,625 @@
-**Example 1: To create a CloudFront distribution**
-
-The following example creates a distribution for an S3 bucket named ``amzn-s3-demo-bucket``, and also specifies ``index.html`` as the default root object, using command line arguments. ::
-
-    aws cloudfront create-distribution \
-        --origin-domain-name amzn-s3-demo-bucket.s3.amazonaws.com \
-        --default-root-object index.html
-
-Output::
-
-    {
-        "Location": "https://cloudfront.amazonaws.com/2019-03-26/distribution/EMLARXS9EXAMPLE",
-        "ETag": "E9LHASXEXAMPLE",
-        "Distribution": {
-            "Id": "EMLARXS9EXAMPLE",
-            "ARN": "arn:aws:cloudfront::123456789012:distribution/EMLARXS9EXAMPLE",
-            "Status": "InProgress",
-            "LastModifiedTime": "2019-11-22T00:55:15.705Z",
-            "InProgressInvalidationBatches": 0,
-            "DomainName": "d111111abcdef8.cloudfront.net",
-            "ActiveTrustedSigners": {
-                "Enabled": false,
-                "Quantity": 0
-            },
-            "DistributionConfig": {
-                "CallerReference": "cli-example",
-                "Aliases": {
-                    "Quantity": 0
-                },
-                "DefaultRootObject": "index.html",
-                "Origins": {
-                    "Quantity": 1,
-                    "Items": [
-                        {
-                            "Id": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
-                            "DomainName": "amzn-s3-demo-bucket.s3.amazonaws.com",
-                            "OriginPath": "",
-                            "CustomHeaders": {
-                                "Quantity": 0
-                            },
-                            "S3OriginConfig": {
-                                "OriginAccessIdentity": ""
-                            }
-                        }
-                    ]
-                },
-                "OriginGroups": {
-                    "Quantity": 0
-                },
-                "DefaultCacheBehavior": {
-                    "TargetOriginId": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
-                    "ForwardedValues": {
-                        "QueryString": false,
-                        "Cookies": {
-                            "Forward": "none"
-                        },
-                        "Headers": {
-                            "Quantity": 0
-                        },
-                        "QueryStringCacheKeys": {
-                            "Quantity": 0
-                        }
-                    },
-                    "TrustedSigners": {
-                        "Enabled": false,
-                        "Quantity": 0
-                    },
-                    "ViewerProtocolPolicy": "allow-all",
-                    "MinTTL": 0,
-                    "AllowedMethods": {
-                        "Quantity": 2,
-                        "Items": [
-                            "HEAD",
-                            "GET"
-                        ],
-                        "CachedMethods": {
-                            "Quantity": 2,
-                            "Items": [
-                                "HEAD",
-                                "GET"
-                            ]
-                        }
-                    },
-                    "SmoothStreaming": false,
-                    "DefaultTTL": 86400,
-                    "MaxTTL": 31536000,
-                    "Compress": false,
-                    "LambdaFunctionAssociations": {
-                        "Quantity": 0
-                    },
-                    "FieldLevelEncryptionId": ""
-                },
-                "CacheBehaviors": {
-                    "Quantity": 0
-                },
-                "CustomErrorResponses": {
-                    "Quantity": 0
-                },
-                "Comment": "",
-                "Logging": {
-                    "Enabled": false,
-                    "IncludeCookies": false,
-                    "Bucket": "",
-                    "Prefix": ""
-                },
-                "PriceClass": "PriceClass_All",
-                "Enabled": true,
-                "ViewerCertificate": {
-                    "CloudFrontDefaultCertificate": true,
-                    "MinimumProtocolVersion": "TLSv1",
-                    "CertificateSource": "cloudfront"
-                },
-                "Restrictions": {
-                    "GeoRestriction": {
-                        "RestrictionType": "none",
-                        "Quantity": 0
-                    }
-                },
-                "WebACLId": "",
-                "HttpVersion": "http2",
-                "IsIPV6Enabled": true
-            }
-        }
-    }
-
-**Example 2: To create a CloudFront distribution using a JSON file**
-
-The following example creates a distribution for an S3 bucket named ``amzn-s3-demo-bucket``, and also specifies ``index.html`` as the default root object, using a JSON file. ::
-
-    aws cloudfront create-distribution \
-        --distribution-config file://dist-config.json
-
-
-Contents of ``dist-config.json``::
-
-    {
-        "CallerReference": "cli-example",
-        "Aliases": {
-            "Quantity": 0
-        },
-        "DefaultRootObject": "index.html",
-        "Origins": {
-            "Quantity": 1,
-            "Items": [
-                {
-                    "Id": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
-                    "DomainName": "amzn-s3-demo-bucket.s3.amazonaws.com",
-                    "OriginPath": "",
-                    "CustomHeaders": {
-                        "Quantity": 0
-                    },
-                    "S3OriginConfig": {
-                        "OriginAccessIdentity": ""
-                    }
-                }
-            ]
-        },
-        "OriginGroups": {
-            "Quantity": 0
-        },
-        "DefaultCacheBehavior": {
-            "TargetOriginId": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
-            "ForwardedValues": {
-                "QueryString": false,
-                "Cookies": {
-                    "Forward": "none"
-                },
-                "Headers": {
-                    "Quantity": 0
-                },
-                "QueryStringCacheKeys": {
-                    "Quantity": 0
-                }
-            },
-            "TrustedSigners": {
-                "Enabled": false,
-                "Quantity": 0
-            },
-            "ViewerProtocolPolicy": "allow-all",
-            "MinTTL": 0,
-            "AllowedMethods": {
-                "Quantity": 2,
-                "Items": [
-                    "HEAD",
-                    "GET"
-                ],
-                "CachedMethods": {
-                    "Quantity": 2,
-                    "Items": [
-                        "HEAD",
-                        "GET"
-                    ]
-                }
-            },
-            "SmoothStreaming": false,
-            "DefaultTTL": 86400,
-            "MaxTTL": 31536000,
-            "Compress": false,
-            "LambdaFunctionAssociations": {
-                "Quantity": 0
-            },
-            "FieldLevelEncryptionId": ""
-        },
-        "CacheBehaviors": {
-            "Quantity": 0
-        },
-        "CustomErrorResponses": {
-            "Quantity": 0
-        },
-        "Comment": "",
-        "Logging": {
-            "Enabled": false,
-            "IncludeCookies": false,
-            "Bucket": "",
-            "Prefix": ""
-        },
-        "PriceClass": "PriceClass_All",
-        "Enabled": true,
-        "ViewerCertificate": {
-            "CloudFrontDefaultCertificate": true,
-            "MinimumProtocolVersion": "TLSv1",
-            "CertificateSource": "cloudfront"
-        },
-        "Restrictions": {
-            "GeoRestriction": {
-                "RestrictionType": "none",
-                "Quantity": 0
-            }
-        },
-        "WebACLId": "",
-        "HttpVersion": "http2",
-        "IsIPV6Enabled": true
-    }
-
-See Example 1 for sample output.
\ No newline at end of file
+**Example 1: To create a CloudFront distribution**
+
+The following ``create-distribution`` example creates a distribution for an S3 bucket named ``amzn-s3-demo-bucket``, and also specifies ``index.html`` as the default root object, using command line arguments. ::
+
+    aws cloudfront create-distribution \
+        --origin-domain-name amzn-s3-demo-bucket.s3.amazonaws.com \
+        --default-root-object index.html
+
+Output::
+
+    {
+        "Location": "https://cloudfront.amazonaws.com/2019-03-26/distribution/EMLARXS9EXAMPLE",
+        "ETag": "E9LHASXEXAMPLE",
+        "Distribution": {
+            "Id": "EMLARXS9EXAMPLE",
+            "ARN": "arn:aws:cloudfront::123456789012:distribution/EMLARXS9EXAMPLE",
+            "Status": "InProgress",
+            "LastModifiedTime": "2019-11-22T00:55:15.705Z",
+            "InProgressInvalidationBatches": 0,
+            "DomainName": "d111111abcdef8.cloudfront.net",
+            "ActiveTrustedSigners": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "DistributionConfig": {
+                "CallerReference": "cli-example",
+                "Aliases": {
+                    "Quantity": 0
+                },
+                "DefaultRootObject": "index.html",
+                "Origins": {
+                    "Quantity": 1,
+                    "Items": [
+                        {
+                            "Id": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
+                            "DomainName": "amzn-s3-demo-bucket.s3.amazonaws.com",
+                            "OriginPath": "",
+                            "CustomHeaders": {
+                                "Quantity": 0
+                            },
+                            "S3OriginConfig": {
+                                "OriginAccessIdentity": ""
+                            }
+                        }
+                    ]
+                },
+                "OriginGroups": {
+                    "Quantity": 0
+                },
+                "DefaultCacheBehavior": {
+                    "TargetOriginId": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
+                    "ForwardedValues": {
+                        "QueryString": false,
+                        "Cookies": {
+                            "Forward": "none"
+                        },
+                        "Headers": {
+                            "Quantity": 0
+                        },
+                        "QueryStringCacheKeys": {
+                            "Quantity": 0
+                        }
+                    },
+                    "TrustedSigners": {
+                        "Enabled": false,
+                        "Quantity": 0
+                    },
+                    "ViewerProtocolPolicy": "allow-all",
+                    "MinTTL": 0,
+                    "AllowedMethods": {
+                        "Quantity": 2,
+                        "Items": [
+                            "HEAD",
+                            "GET"
+                        ],
+                        "CachedMethods": {
+                            "Quantity": 2,
+                            "Items": [
+                                "HEAD",
+                                "GET"
+                            ]
+                        }
+                    },
+                    "SmoothStreaming": false,
+                    "DefaultTTL": 86400,
+                    "MaxTTL": 31536000,
+                    "Compress": false,
+                    "LambdaFunctionAssociations": {
+                        "Quantity": 0
+                    },
+                    "FieldLevelEncryptionId": ""
+                },
+                "CacheBehaviors": {
+                    "Quantity": 0
+                },
+                "CustomErrorResponses": {
+                    "Quantity": 0
+                },
+                "Comment": "",
+                "Logging": {
+                    "Enabled": false,
+                    "IncludeCookies": false,
+                    "Bucket": "",
+                    "Prefix": ""
+                },
+                "PriceClass": "PriceClass_All",
+                "Enabled": true,
+                "ViewerCertificate": {
+                    "CloudFrontDefaultCertificate": true,
+                    "MinimumProtocolVersion": "TLSv1",
+                    "CertificateSource": "cloudfront"
+                },
+                "Restrictions": {
+                    "GeoRestriction": {
+                        "RestrictionType": "none",
+                        "Quantity": 0
+                    }
+                },
+                "WebACLId": "",
+                "HttpVersion": "http2",
+                "IsIPV6Enabled": true
+            }
+        }
+    }
+
+**Example 2: To create a CloudFront distribution using a JSON file**
+
+The following ``create-distribution`` example creates a distribution for an S3 bucket named ``amzn-s3-demo-bucket``, and also specifies ``index.html`` as the default root object, using a JSON file. ::
+
+    aws cloudfront create-distribution \
+        --distribution-config file://dist-config.json
+
+
+Contents of ``dist-config.json``::
+
+    {
+        "CallerReference": "cli-example",
+        "Aliases": {
+            "Quantity": 0
+        },
+        "DefaultRootObject": "index.html",
+        "Origins": {
+            "Quantity": 1,
+            "Items": [
+                {
+                    "Id": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
+                    "DomainName": "amzn-s3-demo-bucket.s3.amazonaws.com",
+                    "OriginPath": "",
+                    "CustomHeaders": {
+                        "Quantity": 0
+                    },
+                    "S3OriginConfig": {
+                        "OriginAccessIdentity": ""
+                    }
+                }
+            ]
+        },
+        "OriginGroups": {
+            "Quantity": 0
+        },
+        "DefaultCacheBehavior": {
+            "TargetOriginId": "amzn-s3-demo-bucket.s3.amazonaws.com-cli-example",
+            "ForwardedValues": {
+                "QueryString": false,
+                "Cookies": {
+                    "Forward": "none"
+                },
+                "Headers": {
+                    "Quantity": 0
+                },
+                "QueryStringCacheKeys": {
+                    "Quantity": 0
+                }
+            },
+            "TrustedSigners": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "ViewerProtocolPolicy": "allow-all",
+            "MinTTL": 0,
+            "AllowedMethods": {
+                "Quantity": 2,
+                "Items": [
+                    "HEAD",
+                    "GET"
+                ],
+                "CachedMethods": {
+                    "Quantity": 2,
+                    "Items": [
+                        "HEAD",
+                        "GET"
+                    ]
+                }
+            },
+            "SmoothStreaming": false,
+            "DefaultTTL": 86400,
+            "MaxTTL": 31536000,
+            "Compress": false,
+            "LambdaFunctionAssociations": {
+                "Quantity": 0
+            },
+            "FieldLevelEncryptionId": ""
+        },
+        "CacheBehaviors": {
+            "Quantity": 0
+        },
+        "CustomErrorResponses": {
+            "Quantity": 0
+        },
+        "Comment": "",
+        "Logging": {
+            "Enabled": false,
+            "IncludeCookies": false,
+            "Bucket": "",
+            "Prefix": ""
+        },
+        "PriceClass": "PriceClass_All",
+        "Enabled": true,
+        "ViewerCertificate": {
+            "CloudFrontDefaultCertificate": true,
+            "MinimumProtocolVersion": "TLSv1",
+            "CertificateSource": "cloudfront"
+        },
+        "Restrictions": {
+            "GeoRestriction": {
+                "RestrictionType": "none",
+                "Quantity": 0
+            }
+        },
+        "WebACLId": "",
+        "HttpVersion": "http2",
+        "IsIPV6Enabled": true
+    }
+
+See Example 1 for sample output.
+
+**Example 3: To create a CloudFront multi-tenant distribution with a certificate**
+
+The following ``create-distribution`` example creates a CloudFront distribution with multi-tenant support and a specifies a TLS certificate. ::
+
+    aws cloudfront create-distribution \
+        --distribution-config file://dist-config.json
+
+Contents of ``dist-config.json``::
+
+    {
+        "CallerReference": "cli-example-with-cert",
+        "Comment": "CLI example distribution",
+        "DefaultRootObject": "index.html",
+        "Origins": {
+            "Quantity": 1,
+            "Items": [
+                {
+                    "Id": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "DomainName": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "OriginPath": "/{{tenantName}}",
+                    "CustomHeaders": {
+                        "Quantity": 0
+                    },
+                    "S3OriginConfig": {
+                        "OriginAccessIdentity": ""
+                    }
+                }
+            ]
+        },
+        "DefaultCacheBehavior": {
+            "TargetOriginId": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+            "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e5ABC",
+            "ViewerProtocolPolicy": "allow-all",
+            "AllowedMethods": {
+                "Quantity": 2,
+                "Items": ["HEAD", "GET"],
+                "CachedMethods": {
+                    "Quantity": 2,
+                    "Items": ["HEAD", "GET"]
+                }
+            }
+        },
+        "Enabled": true,
+        "ViewerCertificate": {
+            "ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/191306a1-db01-49ca-90ef-fc414ee5dabc",
+            "SSLSupportMethod": "sni-only"
+        },
+        "HttpVersion": "http2",
+        "ConnectionMode": "tenant-only",
+        "TenantConfig": {
+            "ParameterDefinitions": [
+                {
+                    "Name": "tenantName",
+                    "Definition": {
+                        "StringSchema": {
+                            "Comment": "tenantName parameter",
+                            "DefaultValue": "root",
+                            "Required": false
+                        }
+                    }
+                }
+            ]
+        }
+    }
+
+Output::
+
+    {
+        "Location": "https://cloudfront.amazonaws.com/2020-05-31/distribution/E1HVIAU7UABC",
+        "ETag": "E20LT7R1BABC",
+        "Distribution": {
+            "Id": "E1HVIAU7U12ABC",
+            "ARN": "arn:aws:cloudfront::123456789012:distribution/E1HVIAU7U12ABC",
+            "Status": "InProgress",
+            "LastModifiedTime": "2025-07-10T20:33:31.117000+00:00",
+            "InProgressInvalidationBatches": 0,
+            "DomainName": "example.com",
+            "ActiveTrustedSigners": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "ActiveTrustedKeyGroups": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "DistributionConfig": {
+                "CallerReference": "cli-example-with-cert",
+                "DefaultRootObject": "index.html",
+                "Origins": {
+                    "Quantity": 1,
+                    "Items": [
+                        {
+                            "Id": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                            "DomainName": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                            "OriginPath": "/{{tenantName}}",
+                            "CustomHeaders": {
+                                "Quantity": 0
+                            },
+                            "S3OriginConfig": {
+                                "OriginAccessIdentity": ""
+                            },
+                            "ConnectionAttempts": 3,
+                            "ConnectionTimeout": 10,
+                            "OriginShield": {
+                                "Enabled": false
+                            },
+                            "OriginAccessControlId": ""
+                        }
+                    ]
+                },
+                "OriginGroups": {
+                    "Quantity": 0
+                },
+                "DefaultCacheBehavior": {
+                    "TargetOriginId": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "TrustedKeyGroups": {
+                        "Enabled": false,
+                        "Quantity": 0
+                    },
+                    "ViewerProtocolPolicy": "allow-all",
+                    "AllowedMethods": {
+                        "Quantity": 2,
+                        "Items": ["HEAD", "GET"],
+                        "CachedMethods": {
+                            "Quantity": 2,
+                            "Items": ["HEAD", "GET"]
+                        }
+                    },
+                    "Compress": false,
+                    "LambdaFunctionAssociations": {
+                        "Quantity": 0
+                    },
+                    "FunctionAssociations": {
+                        "Quantity": 0
+                    },
+                    "FieldLevelEncryptionId": "",
+                    "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e5ABC",
+                    "GrpcConfig": {
+                        "Enabled": false
+                    }
+                },
+                "CacheBehaviors": {
+                    "Quantity": 0
+                },
+                "CustomErrorResponses": {
+                    "Quantity": 0
+                },
+                "Comment": "CLI example distribution",
+                "Logging": {
+                    "Enabled": false,
+                    "IncludeCookies": false,
+                    "Bucket": "",
+                    "Prefix": ""
+                },
+                "Enabled": true,
+                "ViewerCertificate": {
+                    "CloudFrontDefaultCertificate": false,
+                    "ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/1954f095-11b6-4daf-9952-0c308a00abc",
+                    "SSLSupportMethod": "sni-only",
+                    "MinimumProtocolVersion": "TLSv1.2_2021",
+                    "Certificate": "arn:aws:acm:us-east-1:123456789012:certificate/1954f095-11b6-4daf-9952-0c308a00abc",
+                    "CertificateSource": "acm"
+                },
+                "Restrictions": {
+                    "GeoRestriction": {
+                        "RestrictionType": "none",
+                        "Quantity": 0
+                    }
+                },
+                "WebACLId": "",
+                "HttpVersion": "http2",
+                "TenantConfig": {
+                    "ParameterDefinitions": [
+                        {
+                            "Name": "tenantName",
+                            "Definition": {
+                                "StringSchema": {
+                                    "Comment": "tenantName parameter",
+                                    "DefaultValue": "root",
+                                    "Required": false
+                                }
+                            }
+                        }
+                    ]
+                },
+                "ConnectionMode": "tenant-only"
+            }
+        }
+    }
+
+For more information, see `Working with distributions <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html>`__ in the *Amazon CloudFront Developer Guide*.
+
+**Example 4: To create a CloudFront multi-tenant distribution without a certificate**
+
+The following ``create-distribution`` example creates a CloudFront distribution with multi-tenant support but without a TLS certificate. ::
+
+    aws cloudfront create-distribution \
+        --distribution-config file://dist-config.json
+
+Contents of ``dist-config.json``::
+
+    {
+        "CallerReference": "cli-example",
+        "Comment": "CLI example distribution",
+        "DefaultRootObject": "index.html",
+        "Origins": {
+            "Quantity": 1,
+            "Items": [
+                {
+                    "Id": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "DomainName": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "OriginPath": "/{{tenantName}}",
+                    "CustomHeaders": {
+                        "Quantity": 0
+                    },
+                    "S3OriginConfig": {
+                        "OriginAccessIdentity": ""
+                    }
+                }
+            ]
+        },
+        "DefaultCacheBehavior": {
+            "TargetOriginId": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+            "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e5ABC",
+            "ViewerProtocolPolicy": "allow-all",
+            "AllowedMethods": {
+                "Quantity": 2,
+                "Items": [
+                    "HEAD",
+                    "GET"
+                ],
+                "CachedMethods": {
+                    "Quantity": 2,
+                    "Items": [
+                        "HEAD",
+                        "GET"
+                    ]
+                }
+            }
+        },
+        "Enabled": true,
+        "HttpVersion": "http2",
+        "ConnectionMode": "tenant-only",
+        "TenantConfig": {
+            "ParameterDefinitions": [
+                {
+                    "Name": "tenantName",
+                    "Definition": {
+                        "StringSchema": {
+                            "Comment": "tenantName parameter",
+                            "DefaultValue": "root",
+                            "Required": false
+                        }
+                    }
+                }
+            ]
+        }
+    }
+
+Output::
+
+    {
+        "Location": "https://cloudfront.amazonaws.com/2020-05-31/distribution/E2GJ5J9QN12ABC",
+        "ETag": "E37YLVVQIABC",
+        "Distribution": {
+            "Id": "E2GJ5J9QNABC",
+            "ARN": "arn:aws:cloudfront::123456789012:distribution/E2GJ5J9QN12ABC",
+            "Status": "InProgress",
+            "LastModifiedTime": "2025-07-10T20:35:20.565000+00:00",
+            "InProgressInvalidationBatches": 0,
+            "DomainName": "example.com",
+            "ActiveTrustedSigners": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "ActiveTrustedKeyGroups": {
+                "Enabled": false,
+                "Quantity": 0
+            },
+            "DistributionConfig": {
+                "CallerReference": "cli-example-no-cert",
+                "DefaultRootObject": "index.html",
+                "Origins": {
+                    "Quantity": 1,
+                    "Items": [
+                        {
+                            "Id": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                            "DomainName": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                            "OriginPath": "/{{tenantName}}",
+                            "CustomHeaders": {
+                                "Quantity": 0
+                            },
+                            "S3OriginConfig": {
+                                "OriginAccessIdentity": ""
+                            },
+                            "ConnectionAttempts": 3,
+                            "ConnectionTimeout": 10,
+                            "OriginShield": {
+                                "Enabled": false
+                            },
+                            "OriginAccessControlId": ""
+                        }
+                    ]
+                },
+                "OriginGroups": {
+                    "Quantity": 0
+                },
+                "DefaultCacheBehavior": {
+                    "TargetOriginId": "amzn-s3-demo-bucket.s3.us-east-1.amazonaws.com",
+                    "TrustedKeyGroups": {
+                        "Enabled": false,
+                        "Quantity": 0
+                    },
+                    "ViewerProtocolPolicy": "allow-all",
+                    "AllowedMethods": {
+                        "Quantity": 2,
+                        "Items": [
+                            "HEAD",
+                            "GET"
+                        ],
+                        "CachedMethods": {
+                            "Quantity": 2,
+                            "Items": [
+                                "HEAD",
+                                "GET"
+                            ]
+                        }
+                    },
+                    "Compress": false,
+                    "LambdaFunctionAssociations": {
+                        "Quantity": 0
+                    },
+                    "FunctionAssociations": {
+                        "Quantity": 0
+                    },
+                    "FieldLevelEncryptionId": "",
+                    "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e5ABC",
+                    "GrpcConfig": {
+                        "Enabled": false
+                    }
+                },
+                "CacheBehaviors": {
+                    "Quantity": 0
+                },
+                "CustomErrorResponses": {
+                    "Quantity": 0
+                },
+                "Comment": "CLI example distribution",
+                "Logging": {
+                    "Enabled": false,
+                    "IncludeCookies": false,
+                    "Bucket": "",
+                    "Prefix": ""
+                },
+                "Enabled": true,
+                "ViewerCertificate": {
+                    "CloudFrontDefaultCertificate": true,
+                    "SSLSupportMethod": "sni-only",
+                    "MinimumProtocolVersion": "TLSv1",
+                    "CertificateSource": "cloudfront"
+                },
+                "Restrictions": {
+                    "GeoRestriction": {
+                        "RestrictionType": "none",
+                        "Quantity": 0
+                    }
+                },
+                "WebACLId": "",
+                "HttpVersion": "http2",
+                "TenantConfig": {
+                    "ParameterDefinitions": [
+                        {
+                            "Name": "tenantName",
+                            "Definition": {
+                                "StringSchema": {
+                                    "Comment": "tenantName parameter",
+                                    "DefaultValue": "root",
+                                    "Required": false
+                                }
+                            }
+                        }
+                    ]
+                },
+                "ConnectionMode": "tenant-only"
+            }
+        }
+    }
+
+For more information, see `Configure distributions <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/create-invalidation-for-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/create-invalidation-for-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/create-invalidation-for-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/create-invalidation-for-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To create a CloudFront invalidation for a distribution tenant**
+
+The following ``create-invalidation-for-distribution-tenant`` example creates an invalidation for all files in a CloudFront distribution tenant. ::
+
+    aws cloudfront create-invalidation-for-distribution-tenant \
+        --id dt_2wjDZi3hD1ivOXf6rpZJO1AB \
+        --invalidation-batch '{"Paths": {"Quantity": 1, "Items": ["/*"]}, "CallerReference": "invalidation-$(date +%s)"}'
+
+Output::
+
+    {
+        "Location": "https://cloudfront.amazonaws.com/2020-05-31/distribution-tenant/dt_2wjDZi3hD1ivOXf6rpZJO1AB/invalidation/I2JGL2F1ZAA426PGG0YLLKABC",
+        "Invalidation": {
+            "Id": "I2JGL2F1ZAA426PGG0YLLKABC",
+            "Status": "InProgress",
+            "CreateTime": "2025-05-07T16:59:25.947000+00:00",
+            "InvalidationBatch": {
+                "Paths": {
+                    "Quantity": 1,
+                    "Items": [
+                        "/*"
+                    ]
+                },
+                "CallerReference": "invalidation-$(date +%s)"
+            }
+        }
+    }
+
+For more information, see `Invalidate files to remove content <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/delete-connection-group.rst 2.31.35-1/awscli/examples/cloudfront/delete-connection-group.rst
--- 2.23.6-1/awscli/examples/cloudfront/delete-connection-group.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/delete-connection-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To delete a connection group**
+
+The following ``delete-connection-group`` example deletes a connection group. The connection group must be disabled and can't be associated with any CloudFront resources. ::
+
+    aws cloudfront delete-connection-group \
+        --id cg_2wjLpjbHkLUdhWAjHllcOeABC \
+        --if-match ETVPDKIKX0DABC
+
+When successful, this command has no output.
+
+For more information about managing connection groups, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/delete-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/delete-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/delete-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/delete-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To delete a distribution tenant**
+
+The following ``delete-distribution-tenant`` example deletes a distribution tenant with ETag ``ETVPDKIKX0DABC``. The distribution tenant must be disabled and can't be associated with any CloudFront resources. ::
+
+    aws cloudfront delete-distribution-tenant \
+        --id dt_2wjMUbg3NHZEQ7OfoalP5zi1AB \
+        --if-match ETVPDKIKX0DABC
+
+When successful, this command has no output.
+
+For more information, see `Delete a distribution <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToDeleteDistribution.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/disassociate-distribution-tenant-web-acl.rst 2.31.35-1/awscli/examples/cloudfront/disassociate-distribution-tenant-web-acl.rst
--- 2.23.6-1/awscli/examples/cloudfront/disassociate-distribution-tenant-web-acl.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/disassociate-distribution-tenant-web-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,16 @@
+**To disassociate a web ACL from a distribution tenant**
+
+The following ``disassociate-distribution-tenant-web-acl`` example disassociates a web ACL from a distribution tenant with ETag ``E1PA6795UKMABC``. ::
+
+    aws cloudfront disassociate-distribution-tenant-web-acl \
+        --id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB \
+        --if-match E1PA6795UKMABC
+
+Output::
+
+    {
+        "ETag": "E13V1IB3VIYABC",
+        "Id": "dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB"
+    }
+
+For more information, see `Disable AWS WAF security protections <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/disable-waf.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/disassociate-distribution-web-acl.rst 2.31.35-1/awscli/examples/cloudfront/disassociate-distribution-web-acl.rst
--- 2.23.6-1/awscli/examples/cloudfront/disassociate-distribution-web-acl.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/disassociate-distribution-web-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,16 @@
+**To disassociate a web ACL from a CloudFront distribution**
+
+The following ``disassociate-distribution-web-acl`` example removes the association between a web ACL and a CloudFront distribution with ETag ``E13V1IB3VIYABC``. ::
+
+    aws cloudfront disassociate-distribution-web-acl \
+        --id E1XNX8R2GOAABC \
+        --if-match EEZQ9Z24VM1ABC
+
+Output::
+
+    {
+        "ETag": "E2YWS1C2J3OABC",
+        "Id": "E1XNX8R2GOAABC"
+    }
+
+For more information, see `Disable AWS WAF security protections <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/disable-waf.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-connection-group-by-routing-endpoint.rst 2.31.35-1/awscli/examples/cloudfront/get-connection-group-by-routing-endpoint.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-connection-group-by-routing-endpoint.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-connection-group-by-routing-endpoint.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,26 @@
+**To get a connection group by routing endpoint**
+
+The following ``get-connection-group-by-routing-endpoint`` example retrieves information about a connection group using its routing endpoint. ::
+
+    aws cloudfront get-connection-group-by-routing-endpoint \
+        --routing-endpoint dvdg9gprgabc.cloudfront.net
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "ConnectionGroup": {
+            "Id": "cg_2wjDWTBKTlRB87cAaUQFaakABC",
+            "Name": "connection-group-2",
+            "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2wjDWTBKTlRB87cAaUQFaakABC",
+            "CreatedTime": "2025-05-06T15:42:00.790000+00:00",
+            "LastModifiedTime": "2025-05-06T15:42:00.790000+00:00",
+            "Ipv6Enabled": true,
+            "RoutingEndpoint": "dvdg9gprgabc.cloudfront.net",
+            "Status": "Deployed",
+            "Enabled": true,
+            "IsDefault": false
+        }
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-connection-group.rst 2.31.35-1/awscli/examples/cloudfront/get-connection-group.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-connection-group.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-connection-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,26 @@
+**To get a CloudFront connection group**
+
+The following ``get-connection-group`` example retrieves information about a CloudFront connection group. ::
+
+    aws cloudfront get-connection-group \
+        --identifier cg_2wjDWTBKTlRB87cAaUQFaakABC
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "ConnectionGroup": {
+            "Id": "cg_2wjDWTBKTlRB87cAaUQFaakABC",
+            "Name": "connection-group-2",
+            "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2wjDWTBKTlRB87cAaUQFaakABC",
+            "CreatedTime": "2025-05-06T15:42:00.790000+00:00",
+            "LastModifiedTime": "2025-05-06T15:42:00.790000+00:00",
+            "Ipv6Enabled": true,
+            "RoutingEndpoint": "dvdg9gprgabc.cloudfront.net",
+            "Status": "Deployed",
+            "Enabled": true,
+            "IsDefault": false
+        }
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-distribution-tenant-by-domain.rst 2.31.35-1/awscli/examples/cloudfront/get-distribution-tenant-by-domain.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-distribution-tenant-by-domain.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-distribution-tenant-by-domain.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,37 @@
+**To get distribution tenant information by domain**
+
+The following ``get-distribution-tenant-by-domain`` example retrieves information about a distribution tenant using the specified domain. ::
+
+    aws cloudfront get-distribution-tenant-by-domain \
+        --domain example.com
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "DistributionTenant": {
+            "Id": "dt_2xVInRKCfUzQHgxosDs9hiLk1AB",
+            "DistributionId": "E1XNX8R2GOAABC",
+            "Name": "example-tenant-4",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2xVInRKCfUzQHgxosDs9hiLk1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "active"
+                }
+            ],
+            "Parameters": [
+                {
+                    "Name": "testParam",
+                    "Value": "defaultValue"
+                }
+            ],
+            "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+            "CreatedTime": "2025-05-23T16:16:20.871000+00:00",
+            "LastModifiedTime": "2025-05-23T16:16:20.871000+00:00",
+            "Enabled": false,
+            "Status": "Deployed"
+        }
+    }
+
+For more information, see `Understand how multi-tenant distributions work <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/get-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,31 @@
+**To get details about a CloudFront distribution tenant**
+
+The following ``get-distribution-tenant`` example retrieves information about a CloudFront distribution tenant. ::
+
+    aws cloudfront get-distribution-tenant \
+        --id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB
+
+Output::
+
+    {
+        "ETag": "E23ZP02F085ABC",
+        "DistributionTenant": {
+            "Id": "dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB",
+            "DistributionId": "E1XNX8R2GOAABC",
+            "Name": "example-tenant-2",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "inactive"
+                }
+            ],
+            "ConnectionGroupId": "cg_2wjDWTBKTlRB87cAaUQFaakABC",
+            "CreatedTime": "2025-05-06T15:42:28.542000+00:00",
+            "LastModifiedTime": "2025-05-06T15:42:37.724000+00:00",
+            "Enabled": true,
+            "Status": "InProgress"
+        }
+    }
+
+For more information, see `Understand how multi-tenant distributions work <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-invalidation-for-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/get-invalidation-for-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-invalidation-for-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-invalidation-for-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To get an invalidation for a distribution tenant**
+
+The following ``get-invalidation-for-distribution-tenant`` example gets information about an invalidation for a distribution tenant. ::
+
+    aws cloudfront get-invalidation-for-distribution-tenant \
+        --distribution-tenant-id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB \
+        --id I4CU23QAPKMUDUU06F9OFGFABC
+
+Output::
+
+    {
+        "Invalidation": {
+            "Id": "I4CU23QAPKMUDUU06F9OFGFABC",
+            "Status": "Completed",
+            "CreateTime": "2025-05-06T15:46:12.824000+00:00",
+            "InvalidationBatch": {
+                "Paths": {
+                    "Quantity": 2,
+                    "Items": [
+                        "/example/invalidation",
+                        "/more/invalidations"
+                    ]
+                },
+                "CallerReference": "007ee5a6-d0a0-42be-bb61-e7b915969b48"
+            }
+        }
+    }
+
+For more information, see `Invalidate files to remove content <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/get-managed-certificate-details.rst 2.31.35-1/awscli/examples/cloudfront/get-managed-certificate-details.rst
--- 2.23.6-1/awscli/examples/cloudfront/get-managed-certificate-details.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/get-managed-certificate-details.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+**To get managed certificate details**
+
+The following ``get-managed-certificate-details`` example retrieves the details of a CloudFront managed ACM certificate. ::
+
+    aws cloudfront get-managed-certificate-details \
+        --identifier dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB
+
+Output::
+
+    {
+        "ManagedCertificateDetails": {
+            "CertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/655dc1fe-6d37-451d-a013-c2db3a034abc",
+            "CertificateStatus": "pending-validation",
+            "ValidationTokenHost": "self-hosted",
+            "ValidationTokenDetails": [
+                {
+                    "Domain": "example.com",
+                    "RedirectTo": "validation.us-east-1.acm-validations.aws/123456789012/.well-known/pki-validation/b315c9ae21284e7918bb9f3f422ab1c7.txt",
+                    "RedirectFrom": "example.com/.well-known/pki-validation/b315c9ae21284e7918bb9f3f422ac3c7.txt"
+                }
+            ]
+        }
+    }
+
+For more information, see `Request certificates for your CloudFront distribution tenant <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/managed-cloudfront-certificates.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-connection-groups.rst 2.31.35-1/awscli/examples/cloudfront/list-connection-groups.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-connection-groups.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-connection-groups.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,38 @@
+**To list connection groups**
+
+The following ``list-connection-groups`` example lists the available connection groups in your AWS account. ::
+
+    aws cloudfront list-connection-groups
+
+Output::
+
+    {
+        "ConnectionGroups": [
+            {
+                "Id": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "Name": "CreatedByCloudFront-cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "RoutingEndpoint": "d3sx0pso7m5abc.cloudfront.net",
+                "CreatedTime": "2025-05-05T22:32:29.630000+00:00",
+                "LastModifiedTime": "2025-05-05T22:32:29.630000+00:00",
+                "ETag": "E23ZP02F085ABC",
+                "Enabled": true,
+                "Status": "Deployed",
+                "IsDefault": true
+            },
+            {
+                "Id": "cg_2wjDWTBKTlRB87cAaUQFaakABC",
+                "Name": "connection-group-2",
+                "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2wjDWTBKTlRB87cAaUQFaakABC",
+                "RoutingEndpoint": "dvdg9gprgabc.cloudfront.net",
+                "CreatedTime": "2025-05-06T15:42:00.790000+00:00",
+                "LastModifiedTime": "2025-05-06T15:42:00.790000+00:00",
+                "ETag": "E23ZP02F085ABC",
+                "Enabled": true,
+                "Status": "Deployed",
+                "IsDefault": false
+            }
+        ]
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-distribution-tenants-by-customization.rst 2.31.35-1/awscli/examples/cloudfront/list-distribution-tenants-by-customization.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-distribution-tenants-by-customization.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-distribution-tenants-by-customization.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,45 @@
+**To list distribution tenants by customization**
+
+The following ``list-distribution-tenants-by-customization`` example lists distribution tenants that use the specified web ACL. ::
+
+    aws cloudfront list-distribution-tenants-by-customization \
+        --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:global/webacl/CreatedByCloudFront-0273cd2f/a3c19bce-42b5-48a1-a8d4-b2bb2f28eabc
+
+Output::
+
+    {
+        "DistributionTenantList": [
+            {
+                "Id": "dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB",
+                "DistributionId": "E1XNX8R2GOAABC",
+                "Name": "example-tenant-2",
+                "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB",
+                "Domains": [
+                    {
+                        "Domain": "example.com",
+                        "Status": "inactive"
+                    }
+                ],
+                "ConnectionGroupId": "cg_2wjDWTBKTlRB87cAaUQFaakABC",
+                "Customizations": {
+                    "WebAcl": {
+                        "Action": "override",
+                        "Arn": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/CreatedByCloudFront-0273cd2f/a3c19bce-42b5-48a1-a8d4-b2bb2f28eabc"
+                    },
+                    "GeoRestrictions": {
+                        "RestrictionType": "whitelist",
+                        "Locations": [
+                            "AL"
+                        ]
+                    }
+                },
+                "CreatedTime": "2025-05-06T15:42:28.542000+00:00",
+                "LastModifiedTime": "2025-05-06T16:14:08.710000+00:00",
+                "ETag": "E1F83G8C2ARABC",
+                "Enabled": true,
+                "Status": "Deployed"
+            }
+        ]
+    }
+
+For more information, see `Distribution tenant customizations <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/tenant-customization.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-distribution-tenants.rst 2.31.35-1/awscli/examples/cloudfront/list-distribution-tenants.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-distribution-tenants.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-distribution-tenants.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,90 @@
+**To list CloudFront distribution tenants**
+
+The following ``list-distribution-tenants`` example lists 3 CloudFront distribution tenants in your AWS account by the associated connection group. ::
+
+    aws cloudfront list-distribution-tenants \
+        --association-filter ConnectionGroupId=cg_2whCJoXMYCjHcxaLGrkllvyABC \
+        --max-items 3
+
+Output::
+
+    {
+        "DistributionTenantList": [
+            {
+                "Id": "dt_2yMvQgam3QkJo2z54FDl91dk1AB",
+                "DistributionId": "E1XNX8R2GOAABC",
+                "Name": "new-tenant-customizations",
+                "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2yMvQgam3QkJo2z54FDl91dk1AB",
+                "Domains": [
+                    {
+                        "Domain": "example.com",
+                        "Status": "active"
+                    }
+                ],
+                "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "Customizations": {
+                    "WebAcl": {
+                        "Action": "disable"
+                    },
+                    "GeoRestrictions": {
+                        "RestrictionType": "whitelist",
+                        "Locations": [
+                            "DE"
+                        ]
+                    }
+                },
+                "CreatedTime": "2025-06-11T15:54:02.142000+00:00",
+                "LastModifiedTime": "2025-06-11T15:54:02.142000+00:00",
+                "ETag": "E23ZP02F085ABC",
+                "Enabled": false,
+                "Status": "Deployed"
+            },
+            {
+                "Id": "dt_2yMuV7NJuBcAB0cwwxMCBZQ1AB",
+                "DistributionId": "E1XNX8R2GOAABC",
+                "Name": "new-tenant",
+                "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2yMuV7NJuBcAB0cwwxMCBZQ1AB",
+                "Domains": [
+                    {
+                        "Domain": "1.example.com",
+                        "Status": "active"
+                    }
+                ],
+                "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "Customizations": {
+                    "GeoRestrictions": {
+                        "RestrictionType": "whitelist",
+                        "Locations": [
+                            "DE"
+                        ]
+                    }
+                },
+                "CreatedTime": "2025-06-11T15:46:23.466000+00:00",
+                "LastModifiedTime": "2025-06-11T15:46:23.466000+00:00",
+                "ETag": "E23ZP02F085ABC",
+                "Enabled": false,
+                "Status": "Deployed"
+            },
+            {
+                "Id": "dt_2xVInRKCfUzQHgxosDs9hiLk1AB",
+                "DistributionId": "E1XNX8R2GOAABC",
+                "Name": "new-tenant-2",
+                "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2xVInRKCfUzQHgxosDs9hiLk1AB",
+                "Domains": [
+                    {
+                        "Domain": "2.example.com",
+                        "Status": "active"
+                    }
+                ],
+                "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+                "CreatedTime": "2025-05-23T16:16:20.871000+00:00",
+                "LastModifiedTime": "2025-05-23T16:16:20.871000+00:00",
+                "ETag": "E23ZP02F085ABC",
+                "Enabled": false,
+                "Status": "Deployed"
+            }
+        ],
+        "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAzfQ=="
+    }
+
+For more information, see `Understand how multi-tenant distributions work <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-config-options.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-distributions-by-connection-mode.rst 2.31.35-1/awscli/examples/cloudfront/list-distributions-by-connection-mode.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-distributions-by-connection-mode.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-distributions-by-connection-mode.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,115 @@
+**To list CloudFront distributions by connection mode**
+
+The following ``list-distributions-by-connection-mode`` example lists CloudFront distributions with the specified connection mode. ::
+
+    aws cloudfront list-distributions-by-connection-mode \
+        --connection-mode tenant-only
+
+Output::
+
+    {
+        "DistributionList": {
+            "Items": [
+                {
+                    "Id": "E1XNX8R2GOAABC",
+                    "ARN": "arn:aws:cloudfront::123456789012:distribution/E1XNX8R2GOAABC",
+                    "ETag": "EPT4JPJQDY1ABC",
+                    "Status": "Deployed",
+                    "LastModifiedTime": "2025-05-23T16:16:15.691000+00:00",
+                    "DomainName": "-",
+                    "Aliases": {
+                        "Quantity": 0
+                    },
+                    "Origins": {
+                        "Quantity": 1,
+                        "Items": [
+                            {
+                                "Id": "example-cfn-simple-distribution123",
+                                "DomainName": "example.com",
+                                "OriginPath": "",
+                                "CustomHeaders": {
+                                    "Quantity": 0
+                                },
+                                "S3OriginConfig": {
+                                    "OriginAccessIdentity": ""
+                                },
+                                "ConnectionAttempts": 3,
+                                "ConnectionTimeout": 10,
+                                "OriginShield": {
+                                    "Enabled": false
+                                },
+                                "OriginAccessControlId": "E2CJRMB5LKEABC"
+                            }
+                        ]
+                    },
+                    "OriginGroups": {
+                        "Quantity": 0
+                    },
+                    "DefaultCacheBehavior": {
+                        "TargetOriginId": "example-cfn-simple-distribution123",
+                        "TrustedKeyGroups": {
+                            "Enabled": false,
+                            "Quantity": 0
+                        },
+                        "ViewerProtocolPolicy": "allow-all",
+                        "AllowedMethods": {
+                            "Quantity": 2,
+                            "Items": [
+                                "HEAD",
+                                "GET"
+                            ],
+                            "CachedMethods": {
+                                "Quantity": 2,
+                                "Items": [
+                                    "HEAD",
+                                    "GET"
+                                ]
+                            }
+                        },
+                        "Compress": true,
+                        "LambdaFunctionAssociations": {
+                            "Quantity": 0
+                        },
+                        "FunctionAssociations": {
+                            "Quantity": 0
+                        },
+                        "FieldLevelEncryptionId": "",
+                        "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e5abc",
+                        "GrpcConfig": {
+                            "Enabled": false
+                        }
+                    },
+                    "CacheBehaviors": {
+                        "Quantity": 0
+                    },
+                    "CustomErrorResponses": {
+                        "Quantity": 0
+                    },
+                    "Comment": "",
+                    "PriceClass": "PriceClass_All",
+                    "Enabled": true,
+                    "ViewerCertificate": {
+                        "CloudFrontDefaultCertificate": false,
+                        "ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/ec53f564-ea5a-4e4a-a0a2-e3c989449abc",
+                        "SSLSupportMethod": "sni-only",
+                        "MinimumProtocolVersion": "TLSv1.2_2021",
+                        "Certificate": "arn:aws:acm:us-east-1:123456789012:certificate/ec53f564-ea5a-4e4a-a0a2-e3c989449abc",
+                        "CertificateSource": "acm"
+                    },
+                    "Restrictions": {
+                        "GeoRestriction": {
+                            "RestrictionType": "none",
+                            "Quantity": 0
+                        }
+                    },
+                    "WebACLId": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f3746cabc",
+                    "HttpVersion": "http2",
+                    "IsIPV6Enabled": false,
+                    "Staging": false,
+                    "ConnectionMode": "tenant-only"
+                }
+            ]
+        }
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-domain-conflicts.rst 2.31.35-1/awscli/examples/cloudfront/list-domain-conflicts.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-domain-conflicts.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-domain-conflicts.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+**To list domain conflicts for a CloudFront distribution**
+
+The following ``list-domain-conflicts`` example lists domain conflicts for a CloudFront distribution. ::
+
+    aws cloudfront list-domain-conflicts \
+        --domain example.com \
+        --domain-control-validation-resource "DistributionTenantId=dt_2x9GhoK0TZRsohWzv1b9It8J1AB"
+
+Output::
+
+    {
+        "DomainConflicts": [
+            {
+                "Domain": "example.com",
+                "ResourceType": "distribution-tenant",
+                "ResourceId": "***************ohWzv1b9It8J1AB",
+                "AccountId": "123456789012"
+            }
+        ]
+    }
+
+For more information, see `Move an alternate domain name to a different distribution <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/alternate-domain-names-move.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/list-invalidations-for-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/list-invalidations-for-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/list-invalidations-for-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/list-invalidations-for-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+**To list invalidations for a CloudFront distribution tenant**
+
+The following ``list-invalidations-for-distribution-tenant`` example lists the invalidations for a CloudFront distribution tenant. ::
+
+    aws cloudfront list-invalidations-for-distribution-tenant \
+        --id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB
+
+Output::
+
+    {
+        "InvalidationList": {
+            "Items": [
+                {
+                    "Id": "I4CU23QAPKMUDUU06F9OFGFABC",
+                    "CreateTime": "2025-05-06T15:46:12.824000+00:00",
+                    "Status": "Completed"
+                }
+            ]
+        }
+    }
+
+For more information, see `Invalidate files to remove content <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/update-connection-group.rst 2.31.35-1/awscli/examples/cloudfront/update-connection-group.rst
--- 2.23.6-1/awscli/examples/cloudfront/update-connection-group.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/update-connection-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To update a CloudFront connection group**
+
+The following ``update-connection-group`` example disables a CloudFront connection group and disables IPv6. ::
+
+    aws cloudfront update-connection-group \
+        --id cg_2yHsDkcPKeUlVkk3aEgLKcjABC \
+        --no-ipv6-enabled \
+        --no-enabled \
+        --if-match E3UN6WX5RRO2ABC
+
+Output::
+
+    {
+        "ETag": "E1F83G8C2ARABC",
+        "ConnectionGroup": {
+            "Id": "cg_2yHsDkcPKeUlVkk3aEgLKcjABC",
+            "Name": "cg-example",
+            "Arn": "arn:aws:cloudfront::123456789012:connection-group/cg_2yHsDkcPKeUlVkk3aEgLKcjABC",
+            "CreatedTime": "2025-06-09T20:58:35.481000+00:00",
+            "LastModifiedTime": "2025-06-11T16:25:54.280000+00:00",
+            "Ipv6Enabled": false,
+            "RoutingEndpoint": "du9xp1elo1abc.cloudfront.net",
+            "Status": "InProgress",
+            "Enabled": false,
+            "IsDefault": false
+        }
+    }
+
+For more information, see `Create custom connection group (optional) <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-connection-group.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/update-distribution-tenant.rst 2.31.35-1/awscli/examples/cloudfront/update-distribution-tenant.rst
--- 2.23.6-1/awscli/examples/cloudfront/update-distribution-tenant.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/update-distribution-tenant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,76 @@
+**To update a CloudFront distribution tenant**
+
+The following ``update-distribution-tenant`` example updates a CloudFront distribution tenant with a new parameter value and adds a country to the geo-restrictions. ::
+
+    aws cloudfront update-distribution-tenant \
+        --cli-input-json file://update-tenant.json
+
+Contents of ``update-tenant.json``::
+
+    {
+        "Id": "dt_2yMvQgam3QkJo2z54FDl91dk1AB",
+        "IfMatch": "E1F83G8C2ARABC",
+        "Parameters": [
+            {
+                "Name": "testParam",
+                "Value": "newParameterValue"
+            }
+        ],
+        "Customizations": {
+            "WebAcl": {
+                "Action": "disable"
+            },
+            "GeoRestrictions": {
+                "RestrictionType": "whitelist",
+                "Locations": [
+                    "DE",
+                    "GB",
+                    "ES"
+                ]
+            }
+        }
+    }
+
+Output::
+
+    {
+        "ETag": "E1PA6795UKMABC",
+        "DistributionTenant": {
+            "Id": "dt_2yMvQgam3QkJo2z54FDl91dk1AB",
+            "DistributionId": "E1XNX8R2GOAABC",
+            "Name": "new-tenant-customizations",
+            "Arn": "arn:aws:cloudfront::123456789012:distribution-tenant/dt_2yMvQgam3QkJo2z54FDl91dk1AB",
+            "Domains": [
+                {
+                    "Domain": "example.com",
+                    "Status": "active"
+                }
+            ],
+            "Customizations": {
+                "WebAcl": {
+                    "Action": "disable"
+                },
+                "GeoRestrictions": {
+                    "RestrictionType": "whitelist",
+                    "Locations": [
+                        "DE",
+                        "ES",
+                        "GB"
+                    ]
+                }
+            },
+            "Parameters": [
+                {
+                    "Name": "testParam",
+                    "Value": "newParameterValue"
+                }
+            ],
+            "ConnectionGroupId": "cg_2whCJoXMYCjHcxaLGrkllvyABC",
+            "CreatedTime": "2025-06-11T15:54:02.142000+00:00",
+            "LastModifiedTime": "2025-06-11T16:42:45.531000+00:00",
+            "Enabled": false,
+            "Status": "InProgress"
+        }
+    }
+
+For more information, see `Distribution tenant customizations <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/tenant-customization.html>`__ in the *Amazon CloudFront Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cloudfront/update-domain-association.rst 2.31.35-1/awscli/examples/cloudfront/update-domain-association.rst
--- 2.23.6-1/awscli/examples/cloudfront/update-domain-association.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/update-domain-association.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To update a domain association**
+
+The following ``update-domain-association`` example updates a domain association for a distribution tenant with ETag ``E23ZP02F085ABC``. ::
+
+    aws cloudfront update-domain-association \
+        --domain example.com \
+        --target-resource DistributionTenantId=dt_2x9GhoK0TZRsohWzv1b9It8J1AB \
+        --if-match E23ZP02F085ABC
+
+Output::
+
+    {
+        "ETag": "ETVPDKIKX0ABC",
+        "Domain": "example.com",
+        "ResourceId": "dt_2x9GhoK0TZRsohWzv1b9It8J1AB"
+    }
+
+For more information, see `Move an alternate domain name to a different distribution <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/alternate-domain-names-move.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cloudfront/verify-dns-configuration.rst 2.31.35-1/awscli/examples/cloudfront/verify-dns-configuration.rst
--- 2.23.6-1/awscli/examples/cloudfront/verify-dns-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cloudfront/verify-dns-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,20 @@
+**To verify DNS configuration for a domain**
+
+The following ``verify-dns-configuration`` example verifies the DNS configuration for a domain. ::
+
+    aws cloudfront verify-dns-configuration \
+        --domain example.com \
+        --identifier dt_2x9GhoK0TZRsohWzv1b9It8J1AB
+
+Output::
+
+    {
+        "DnsConfigurationList": [
+            {
+                "Domain": "example.com",
+                "Status": "valid-configuration"
+            }
+        ]
+    }
+
+For more information, see `Move an alternate domain name to a different distribution <https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/alternate-domain-names-move.html>`__ in the *Amazon CloudFront Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/codecommit/get-merge-commit.rst 2.31.35-1/awscli/examples/codecommit/get-merge-commit.rst
--- 2.23.6-1/awscli/examples/codecommit/get-merge-commit.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/codecommit/get-merge-commit.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,10 @@
 **To get detailed information about a merge commit**
 
-The following ``get-merge-commit`` example displays details about a merge commit for the source branch named ``bugfix-bug1234`` with a destination branch named ``main`` using the THREE_WAY_MERGE strategy in a repository named ``MyDemoRepo``. ::
+The following ``get-merge-commit`` example displays details about a merge commit for the source branch named ``bugfix-bug1234`` with a destination branch named ``main`` in a repository named ``MyDemoRepo``. ::
 
     aws codecommit get-merge-commit \
         --source-commit-specifier bugfix-bug1234 \
         --destination-commit-specifier main \
-        --merge-option THREE_WAY_MERGE \
         --repository-name MyDemoRepo
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/codepipeline/list-action-executions.rst 2.31.35-1/awscli/examples/codepipeline/list-action-executions.rst
--- 2.23.6-1/awscli/examples/codepipeline/list-action-executions.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/codepipeline/list-action-executions.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,115 +1,115 @@
-**To list action executions**
-
-The following ``list-action-executions`` example views action execution details for a pipeline, such as action execution ID, input artifacts, output artifacts, execution result, and status. ::
-
-    aws codepipeline list-action-executions \
-        --pipeline-name myPipeline
-
-Output::
-
-    {
-        "actionExecutionDetails": [
-            {
-                "pipelineExecutionId": "EXAMPLE0-adfc-488e-bf4c-1111111720d3",
-                "actionExecutionId": "EXAMPLE4-2ee8-4853-bd6a-111111158148",
-                "pipelineVersion": 12,
-                "stageName": "Deploy",
-                "actionName": "Deploy",
-                "startTime": 1598572628.6,
-                "lastUpdateTime": 1598572661.255,
-                "status": "Succeeded",
-                "input": {
-                    "actionTypeId": {
-                        "category": "Deploy",
-                        "owner": "AWS",
-                        "provider": "CodeDeploy",
-                        "version": "1"
-                    },
-                    "configuration": {
-                        "ApplicationName": "my-application",
-                        "DeploymentGroupName": "my-deployment-group"
-                    },
-                    "resolvedConfiguration": {
-                        "ApplicationName": "my-application",
-                        "DeploymentGroupName": "my-deployment-group"
-                    },
-                    "region": "us-east-1",
-                    "inputArtifacts": [
-                        {
-                            "name": "SourceArtifact",
-                            "s3location": {
-                                "bucket": "artifact-bucket",
-                                "key": "myPipeline/SourceArti/key"
-                            }
-                        }
-                    ],
-                    "namespace": "DeployVariables"
-                },
-                "output": {
-                    "outputArtifacts": [],
-                    "executionResult": {
-                        "externalExecutionId": "d-EXAMPLEE5",
-                        "externalExecutionSummary": "Deployment Succeeded",
-                        "externalExecutionUrl": "https://myaddress.com"
-                    },
-                    "outputVariables": {}
-                }
-            },
-            {
-                "pipelineExecutionId": "EXAMPLE0-adfc-488e-bf4c-1111111720d3",
-                "actionExecutionId": "EXAMPLE5-abb4-4192-9031-11111113a7b0",
-                "pipelineVersion": 12,
-                "stageName": "Source",
-                "actionName": "Source",
-                "startTime": 1598572624.387,
-                "lastUpdateTime": 1598572628.16,
-                "status": "Succeeded",
-                "input": {
-                    "actionTypeId": {
-                        "category": "Source",
-                        "owner": "AWS",
-                        "provider": "CodeCommit",
-                        "version": "1"
-                    },
-                    "configuration": {
-                        "BranchName": "production",
-                        "PollForSourceChanges": "false",
-                        "RepositoryName": "my-repo"
-                    },
-                    "resolvedConfiguration": {
-                        "BranchName": "production",
-                        "PollForSourceChanges": "false",
-                        "RepositoryName": "my-repo"
-                    },
-                    "region": "us-east-1",
-                    "inputArtifacts": [],
-                    "namespace": "SourceVariables"
-                },
-                "output": {
-                    "outputArtifacts": [
-                        {
-                            "name": "SourceArtifact",
-                            "s3location": {
-                                "bucket": "my-bucket",
-                                "key": "myPipeline/SourceArti/key"
-                            }
-                        }
-                    ],
-                    "executionResult": {
-                        "externalExecutionId": "1111111ad99dcd35914c00b7fbea13995EXAMPLE",
-                        "externalExecutionSummary": "Edited template.yml",
-                        "externalExecutionUrl": "https://myaddress.com"
-                    },
-                    "outputVariables": {
-                        "AuthorDate": "2020-05-08T17:45:43Z",
-                        "BranchName": "production",
-                        "CommitId": "EXAMPLEad99dcd35914c00b7fbea139951111111",
-                        "CommitMessage": "Edited template.yml",
-                        "CommitterDate": "2020-05-08T17:45:43Z",
-                        "RepositoryName": "my-repo"
-                    }
-                }
-            },
-    . . . .
-
+**To list action executions**
+
+The following ``list-action-executions`` example views action execution details for a pipeline, such as action execution ID, input artifacts, output artifacts, execution result, and status. ::
+
+    aws codepipeline list-action-executions \
+        --pipeline-name myPipeline
+
+Output::
+
+    {
+        "actionExecutionDetails": [
+            {
+                "pipelineExecutionId": "EXAMPLE0-adfc-488e-bf4c-1111111720d3",
+                "actionExecutionId": "EXAMPLE4-2ee8-4853-bd6a-111111158148",
+                "pipelineVersion": 12,
+                "stageName": "Deploy",
+                "actionName": "Deploy",
+                "startTime": 1598572628.6,
+                "lastUpdateTime": 1598572661.255,
+                "status": "Succeeded",
+                "input": {
+                    "actionTypeId": {
+                        "category": "Deploy",
+                        "owner": "AWS",
+                        "provider": "CodeDeploy",
+                        "version": "1"
+                    },
+                    "configuration": {
+                        "ApplicationName": "my-application",
+                        "DeploymentGroupName": "my-deployment-group"
+                    },
+                    "resolvedConfiguration": {
+                        "ApplicationName": "my-application",
+                        "DeploymentGroupName": "my-deployment-group"
+                    },
+                    "region": "us-east-1",
+                    "inputArtifacts": [
+                        {
+                            "name": "SourceArtifact",
+                            "s3location": {
+                                "bucket": "artifact-bucket",
+                                "key": "myPipeline/SourceArti/key"
+                            }
+                        }
+                    ],
+                    "namespace": "DeployVariables"
+                },
+                "output": {
+                    "outputArtifacts": [],
+                    "executionResult": {
+                        "externalExecutionId": "d-EXAMPLEE5",
+                        "externalExecutionSummary": "Deployment Succeeded",
+                        "externalExecutionUrl": "https://myaddress.com"
+                    },
+                    "outputVariables": {}
+                }
+            },
+            {
+                "pipelineExecutionId": "EXAMPLE0-adfc-488e-bf4c-1111111720d3",
+                "actionExecutionId": "EXAMPLE5-abb4-4192-9031-11111113a7b0",
+                "pipelineVersion": 12,
+                "stageName": "Source",
+                "actionName": "Source",
+                "startTime": 1598572624.387,
+                "lastUpdateTime": 1598572628.16,
+                "status": "Succeeded",
+                "input": {
+                    "actionTypeId": {
+                        "category": "Source",
+                        "owner": "AWS",
+                        "provider": "CodeCommit",
+                        "version": "1"
+                    },
+                    "configuration": {
+                        "BranchName": "production",
+                        "PollForSourceChanges": "false",
+                        "RepositoryName": "my-repo"
+                    },
+                    "resolvedConfiguration": {
+                        "BranchName": "production",
+                        "PollForSourceChanges": "false",
+                        "RepositoryName": "my-repo"
+                    },
+                    "region": "us-east-1",
+                    "inputArtifacts": [],
+                    "namespace": "SourceVariables"
+                },
+                "output": {
+                    "outputArtifacts": [
+                        {
+                            "name": "SourceArtifact",
+                            "s3location": {
+                                "bucket": "amzn-s3-demo-bucket",
+                                "key": "myPipeline/SourceArti/key"
+                            }
+                        }
+                    ],
+                    "executionResult": {
+                        "externalExecutionId": "1111111ad99dcd35914c00b7fbea13995EXAMPLE",
+                        "externalExecutionSummary": "Edited template.yml",
+                        "externalExecutionUrl": "https://myaddress.com"
+                    },
+                    "outputVariables": {
+                        "AuthorDate": "2020-05-08T17:45:43Z",
+                        "BranchName": "production",
+                        "CommitId": "EXAMPLEad99dcd35914c00b7fbea139951111111",
+                        "CommitMessage": "Edited template.yml",
+                        "CommitterDate": "2020-05-08T17:45:43Z",
+                        "RepositoryName": "my-repo"
+                    }
+                }
+            },
+    . . . .
+
 For more information, see `View action executions (CLI) <https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-cli.html#pipelines-action-executions-cli>`__ in the *AWS CodePipeline User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-identity-provider-by-identifier.rst 2.31.35-1/awscli/examples/cognito-idp/get-identity-provider-by-identifier.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-identity-provider-by-identifier.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-identity-provider-by-identifier.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**To get the configuration of an identity provider from the IdP identifier**
+
+The following ``get-identity-provider-by-identifier`` example returns the configuration of the identity provider with the identifier ``mysso``. ::
+
+    aws cognito-idp get-identity-provider-by-identifier \
+        --user-pool-id us-west-2_EXAMPLE \
+        --idp-identifier mysso
+
+Output::
+
+    {
+        "IdentityProvider": {
+            "UserPoolId": "us-west-2_EXAMPLE",
+            "ProviderName": "MYSAML",
+            "ProviderType": "SAML",
+            "ProviderDetails": {
+                "ActiveEncryptionCertificate": "[Certificate contents]",
+                "IDPSignout": "false",
+                "MetadataURL": "https://auth.example.com/saml/metadata/",
+                "SLORedirectBindingURI": "https://auth.example.com/saml/logout/",
+                "SSORedirectBindingURI": "https://auth.example.com/saml/assertion/"
+            },
+            "AttributeMapping": {
+                "email": "email"
+            },
+            "IdpIdentifiers": [
+                "mysso",
+                "mysamlsso"
+            ],
+            "LastModifiedDate": 1705616729.188,
+            "CreationDate": 1643734622.919
+        }
+    }
+
+For more information, see `Third-party IdP sign-in <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-log-delivery-configuration.rst 2.31.35-1/awscli/examples/cognito-idp/get-log-delivery-configuration.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-log-delivery-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-log-delivery-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**To display the log delivery configuration**
+
+The following ``get-log-delivery-configuration`` example displays the log export settings of the requested user pool. ::
+
+    aws cognito-idp get-log-delivery-configuration \
+        --user-pool-id us-west-2_EXAMPLE
+
+Output::
+
+    {
+        "LogDeliveryConfiguration": {
+            "UserPoolId": "us-west-2_EXAMPLE",
+            "LogConfigurations": [
+                {
+                    "LogLevel": "INFO",
+                    "EventSource": "userAuthEvents",
+                    "FirehoseConfiguration": {
+                        "StreamArn": "arn:aws:firehose:us-west-2:123456789012:deliverystream/my-test-deliverystream"
+                    }
+                },
+                {
+                    "LogLevel": "ERROR",
+                    "EventSource": "userNotification",
+                    "CloudWatchLogsConfiguration": {
+                        "LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:my-message-delivery-logs"
+                    }
+                }
+            ]
+        }
+    }
+
+For more information, see `Exporting user pool logs <https://docs.aws.amazon.com/cognito/latest/developerguide/exporting-quotas-and-usage.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-signing-certificate.rst 2.31.35-1/awscli/examples/cognito-idp/get-signing-certificate.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-signing-certificate.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-signing-certificate.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,14 @@
-**To get a signing certificate**
-
-This example gets a signing certificate for a user pool.
-
-Command::
-
-  aws cognito-idp get-signing-certificate --user-pool-id us-west-2_aaaaaaaaa 
-
-Output::
-
-  {
-    "Certificate": "CERTIFICATE_DATA"
-  }
\ No newline at end of file
+**To display the SAML signing certificate**
+
+The following ``get-signing-certificate`` example displays the SAML 2.0 signing certificate for the request user pool. ::
+
+    aws cognito-idp get-signing-certificate \
+        --user-pool-id us-west-2_EXAMPLE
+
+Output::
+
+    {
+        "Certificate": "[Certificate content]"
+    }
+
+For more information, see `SAML signing and encryption <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-SAML-signing-encryption.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-ui-customization.rst 2.31.35-1/awscli/examples/cognito-idp/get-ui-customization.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-ui-customization.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-ui-customization.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,19 +1,22 @@
-**To get UI customization information**
-
-This example gets UI customization information for a user pool.
-
-Command::
-
-  aws cognito-idp get-ui-customization --user-pool-id us-west-2_aaaaaaaaa 
-
-Output::
-
-  {
-    "UICustomization": {
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "ClientId": "ALL",
-        "ImageUrl": "https://aaaaaaaaaaaaa.cloudfront.net/us-west-2_aaaaaaaaa/ALL/20190128231240/assets/images/image.jpg",
-        "CSS": ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 10px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 300;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 14px;\n\tfont-weight: bold;\n\tmargin: 20px 0px 10px 0px;\n\theight: 40px;\n\twidth: 100%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\theight: 40px;\n\ttext-align: left;\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #faf;\n}\n",
-        "CSSVersion": "20190128231240"
-    }
-  }
\ No newline at end of file
+**To display the classic hosted UI customization settings for an app client**
+
+The following ``get-ui-customization`` example displays the classic hosted UI customization settings for an app client that doesn't inherit settings from the user pool. ::
+
+    aws cognito-idp get-ui-customization \
+        --user-pool-id us-west-2_EXAMPLE \
+        --client-id 1example23456789
+
+
+Output::
+
+    {
+        "UICustomization": {
+            "UserPoolId": "us-west-2_EXAMPLE",
+            "ClientId": "1example23456789",
+            "ImageUrl": "https://example.cloudfront.net/us-west-2_EXAMPLE/1example23456789/20250115191928/assets/images/image.jpg",
+            "CSS": "\n.logo-customizable {\n  max-width: 80%;\n  max-height: 30%;\n}\n\n.banner-customizable {\n  padding: 25px 0px 25px 0px;\n  background-color: lightgray;\n}\n\n.label-customizable {\n  font-weight: 400;\n}\n\n.textDescription-customizable {\n  padding-top: 100px;\n  padding-bottom: 10px;\n  display: block;\n  font-size: 12px;\n}\n\n.idpDescription-customizable {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  display: block;\n  font-size: 16px;\n}\n\n.legalText-customizable {\n  color: #747474;\n  font-size: 11px;\n}\n\n.submitButton-customizable {\n  font-size: 14px;\n  font-weight: bold;\n  margin: 20px 0px 10px 0px;\n  height: 50px;\n  width: 100%;\n  color: #fff;\n  background-color: #337ab7;\n}\n\n.submitButton-customizable:hover {\n  color: #fff;\n  background-color: #286090;\n}\n\n.errorMessage-customizable {\n  padding: 5px;\n  font-size: 12px;\n  width: 100%;\n  background: #F5F5F5;\n  border: 2px solid #D64958;\n  color: #D64958;\n}\n\n.inputField-customizable {\n  width: 100%;\n  height: 34px;\n  color: #555;\n  background-color: #fff;\n  border: 1px solid #ccc;\n}\n\n.inputField-customizable:focus {\n  border-color: #66afe9;\n  outline: 0;\n}\n\n.idpButton-customizable {\n  height: 40px;\n  width: 100%;\n  width: 100%;\n  text-align: center;\n  margin-bottom: 15px;\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.idpButton-customizable:hover {\n  color: #fff;\n  background-color: #31b0d5;\n}\n\n.socialButton-customizable {\n  border-radius: 2px;\n  height: 60px;\n  margin-bottom: 15px;\n  padding: 1px;\n  text-align: left;\n  width: 100%;\n}\n\n.redirect-customizable {\n  text-align: center;\n}\n\n.passwordCheck-notValid-customizable {\n  color: #DF3312;\n}\n\n.passwordCheck-valid-customizable {\n  color: #19BF00;\n}\n\n.background-customizable {\n  background-color: #fff;\n}\n",
+            "CSSVersion": "20250115191928"
+        }
+    }
+
+For more information, see `Hosted UI (classic) branding <https://docs.aws.amazon.com/cognito/latest/developerguide/hosted-ui-classic-branding.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-user-attribute-verification-code.rst 2.31.35-1/awscli/examples/cognito-idp/get-user-attribute-verification-code.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-user-attribute-verification-code.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-user-attribute-verification-code.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+**To send an attribute verification code to the current user**
+
+The following ``get-user-attribute-verification-code`` example sends an attribute verification code to the currently signed-in user's email address. ::
+
+    aws cognito-idp get-user-attribute-verification-code \
+        --access-token eyJra456defEXAMPLE \
+        --attribute-name email
+
+Output::
+
+    {
+        "CodeDeliveryDetails": {
+            "Destination": "a***@e***",
+            "DeliveryMedium": "EMAIL",
+            "AttributeName": "email"
+        }
+    }
+
+For more information, see `Signing up and confirming user accounts <https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-user-auth-factors.rst 2.31.35-1/awscli/examples/cognito-idp/get-user-auth-factors.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-user-auth-factors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-user-auth-factors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,20 @@
+**To list the authentication factors available to the current user**
+
+The following ``get-user-auth-factors`` example lists the available authentication factors for the currently signed-in user. ::
+
+    aws cognito-idp get-user-auth-factors \
+        --access-token eyJra456defEXAMPLE
+
+Output::
+
+    {
+        "Username": "testuser",
+        "ConfiguredUserAuthFactors": [
+            "PASSWORD",
+            "EMAIL_OTP",
+            "SMS_OTP",
+            "WEB_AUTHN"
+        ]
+    }
+
+For more information, see `Authentication <https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-user-pool-mfa-config.rst 2.31.35-1/awscli/examples/cognito-idp/get-user-pool-mfa-config.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-user-pool-mfa-config.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-user-pool-mfa-config.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,33 @@
+**To display the multi-factor authentication and WebAuthn settings of a user pool**
+
+The following ``get-user-pool-mfa-config`` example displays the MFA and WebAuthn configuration of the requested user pool. ::
+
+    aws cognito-idp get-user-pool-mfa-config \
+        --user-pool-id us-west-2_EXAMPLE
+
+Output::
+
+    {
+        "SmsMfaConfiguration": {
+            "SmsAuthenticationMessage": "Your OTP for MFA or sign-in: use {####}.",
+            "SmsConfiguration": {
+                "SnsCallerArn": "arn:aws:iam::123456789012:role/service-role/my-SMS-Role",
+                "ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "SnsRegion": "us-west-2"
+            }
+        },
+        "SoftwareTokenMfaConfiguration": {
+            "Enabled": true
+        },
+        "EmailMfaConfiguration": {
+            "Message": "Your OTP for MFA or sign-in: use {####}",
+            "Subject": "OTP test"
+        },
+        "MfaConfiguration": "OPTIONAL",
+        "WebAuthnConfiguration": {
+            "RelyingPartyId": "auth.example.com",
+            "UserVerification": "preferred"
+        }
+    }
+
+For more information, see `Adding MFA <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/get-user.rst 2.31.35-1/awscli/examples/cognito-idp/get-user.rst
--- 2.23.6-1/awscli/examples/cognito-idp/get-user.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/get-user.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,56 @@
+**To get the details of the current user**
+
+The following ``get-user`` example displays the profile of the currently signed-in user. ::
+
+    aws cognito-idp get-user \
+        --access-token eyJra456defEXAMPLE
+
+Output::
+
+    {
+        "Username": "johndoe",
+        "UserAttributes": [
+            {
+                "Name": "sub",
+                "Value": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
+            },
+            {
+                "Name": "identities",
+                "Value": "[{\"userId\":\"a1b2c3d4-5678-90ab-cdef-EXAMPLE22222\",\"providerName\":\"SignInWithApple\",\"providerType\":\"SignInWithApple\",\"issuer\":null,\"primary\":false,\"dateCreated\":1701125599632}]"
+            },
+            {
+                "Name": "email_verified",
+                "Value": "true"
+            },
+            {
+                "Name": "custom:state",
+                "Value": "Maine"
+            },
+            {
+                "Name": "name",
+                "Value": "John Doe"
+            },
+            {
+                "Name": "phone_number_verified",
+                "Value": "true"
+            },
+            {
+                "Name": "phone_number",
+                "Value": "+12065551212"
+            },
+            {
+                "Name": "preferred_username",
+                "Value": "jamesdoe"
+            },
+            {
+                "Name": "locale",
+                "Value": "EMEA"
+            },
+            {
+                "Name": "email",
+                "Value": "jamesdoe@example.com"
+            }
+        ]
+    }
+
+For more information, see `Managing users <https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/global-sign-out.rst 2.31.35-1/awscli/examples/cognito-idp/global-sign-out.rst
--- 2.23.6-1/awscli/examples/cognito-idp/global-sign-out.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/global-sign-out.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To sign out the current user**
+
+The following ``global-sign-out`` example signs out the current user. ::
+
+    aws cognito-idp global-sign-out \
+        --access-token eyJra456defEXAMPLE
+
+This command produces no output.
+
+For more information, see `Managing users <https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/initiate-auth.rst 2.31.35-1/awscli/examples/cognito-idp/initiate-auth.rst
--- 2.23.6-1/awscli/examples/cognito-idp/initiate-auth.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/initiate-auth.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To sign in a user**
+
+The following ``initiate-auth`` example signs in a user with the basic username-password flow and no additional challenges. ::
+
+    aws cognito-idp initiate-auth \
+        --auth-flow USER_PASSWORD_AUTH \
+        --client-id 1example23456789 \
+        --analytics-metadata AnalyticsEndpointId=d70b2ba36a8c4dc5a04a0451aEXAMPLE \
+        --auth-parameters USERNAME=testuser,PASSWORD=[Password] --user-context-data EncodedData=mycontextdata --client-metadata MyTestKey=MyTestValue
+
+Output::
+
+    {
+        "AuthenticationResult": {
+            "AccessToken": "eyJra456defEXAMPLE",
+            "ExpiresIn": 3600,
+            "TokenType": "Bearer",
+            "RefreshToken": "eyJra123abcEXAMPLE",
+            "IdToken": "eyJra789ghiEXAMPLE",
+            "NewDeviceMetadata": {
+                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "DeviceGroupKey": "-v7w9UcY6"
+            }
+        }
+    }
+
+For more information, see `Authentication <https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-devices.rst 2.31.35-1/awscli/examples/cognito-idp/list-devices.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-devices.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-devices.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,18 +1,15 @@
-**To list devices for a user**
+**To list a user's devices**
 
-The following ``list-devices`` example lists devices for the currently sign-in user. ::
+The following ``list-devices`` example lists the devices that the current user has registered. ::
 
-    aws cognito-idp admin-list-devices \
-        --user-pool-id us-west-2_EXAMPLE \
-        --access-token eyJra456defEXAMPLE \
-        --limit 1
+    aws cognito-idp list-devices \
+        --access-token eyJra456defEXAMPLE
 
 Output::
 
     {
         "Devices": [
             {
-                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
                 "DeviceAttributes": [
                     {
                         "Name": "device_status",
@@ -20,34 +17,35 @@ Output::
                     },
                     {
                         "Name": "device_name",
-                        "Value": "MyDevice"
-                    },
-                    {
-                        "Name": "dev:device_arn",
-                        "Value": "arn:aws:cognito-idp:us-west-2:123456789012:owner/diego.us-west-2_EXAMPLE/device/us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
-                    },
-                    {
-                        "Name": "dev:device_owner",
-                        "Value": "diego.us-west-2_EXAMPLE"
+                        "Value": "Dart-device"
                     },
                     {
                         "Name": "last_ip_used",
                         "Value": "192.0.2.1"
-                    },
+                    }
+                ],
+                "DeviceCreateDate": 1715100742.022,
+                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "DeviceLastAuthenticatedDate": 1715100742.0,
+                "DeviceLastModifiedDate": 1723233651.167
+            },
+            {
+                "DeviceAttributes": [
                     {
-                        "Name": "dev:device_remembered_status",
-                        "Value": "remembered"
+                        "Name": "device_status",
+                        "Value": "valid"
                     },
                     {
-                        "Name": "dev:device_sdk",
-                        "Value": "aws-sdk"
+                        "Name": "last_ip_used",
+                        "Value": "192.0.2.2"
                     }
                 ],
-                "DeviceCreateDate": 1715100742.022,
-                "DeviceLastModifiedDate": 1723233651.167,
-                "DeviceLastAuthenticatedDate": 1715100742.0
+                "DeviceCreateDate": 1726856147.993,
+                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
+                "DeviceLastAuthenticatedDate": 1726856147.0,
+                "DeviceLastModifiedDate": 1726856147.993
             }
         ]
     }
 
-For more information, see `Working with user devices in your user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html>`__ in the *Amazon Cognito Developer Guide*.
+For more information, see `Working with devices <https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-groups.rst 2.31.35-1/awscli/examples/cognito-idp/list-groups.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-groups.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-groups.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**To list the groups in a user pool**
+
+The following ``list-groups`` example lists the first two groups in the requested user pool. ::
+
+    aws cognito-idp list-groups \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-items 2
+
+Output::
+
+    {
+        "Groups": [
+            {
+                "CreationDate": 1681760899.633,
+                "Description": "My test group",
+                "GroupName": "testgroup",
+                "LastModifiedDate": 1681760899.633,
+                "Precedence": 1,
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "CreationDate": 1642632749.051,
+                "Description": "Autogenerated group for users who sign in using Facebook",
+                "GroupName": "us-west-2_EXAMPLE_Facebook",
+                "LastModifiedDate": 1642632749.051,
+                "UserPoolId": "us-west-2_EXAMPLE"
+            }
+        ],
+        "NextToken": "[Pagination token]"
+    }
+
+For more information, see `Adding groups to a user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-user-groups.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-identity-providers.rst 2.31.35-1/awscli/examples/cognito-idp/list-identity-providers.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-identity-providers.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-identity-providers.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To list identity providers**
+
+The following ``list-identity-providers`` example lists the first two identity providers in the requested user pool. ::
+
+    aws cognito-idp list-identity-providers \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-items 2
+
+Output::
+
+    {
+        "Providers": [
+            {
+                "CreationDate": 1619477386.504,
+                "LastModifiedDate": 1703798328.142,
+                "ProviderName": "Azure",
+                "ProviderType": "SAML"
+            },
+            {
+                "CreationDate": 1642698776.175,
+                "LastModifiedDate": 1642699086.453,
+                "ProviderName": "LoginWithAmazon",
+                "ProviderType": "LoginWithAmazon"
+            }
+        ],
+        "NextToken": "[Pagination token]"
+    }
+
+For more information, see `Third-party IdP sign-in <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-resource-servers.rst 2.31.35-1/awscli/examples/cognito-idp/list-resource-servers.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-resource-servers.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-resource-servers.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,43 @@
+**To list resource servers**
+
+The following ``list-resource-servers`` example lists the first two resource servers in the requested user pool. ::
+
+    aws cognito-idp list-resource-servers \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-results 2
+
+Output::
+
+    {
+        "ResourceServers": [
+            {
+                "Identifier": "myapi.example.com",
+                "Name": "Example API with custom access control scopes",
+                "Scopes": [
+                    {
+                        "ScopeDescription": "International customers",
+                        "ScopeName": "international.read"
+                    },
+                    {
+                        "ScopeDescription": "Domestic customers",
+                        "ScopeName": "domestic.read"
+                    }
+                ],
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "Identifier": "myapi2.example.com",
+                "Name": "Another example API for access control",
+                "Scopes": [
+                    {
+                        "ScopeDescription": "B2B customers",
+                        "ScopeName": "b2b.read"
+                    }
+                ],
+                "UserPoolId": "us-west-2_EXAMPLE"
+            }
+        ],
+        "NextToken": "[Pagination token]"
+    }
+
+For more information, see `Access control with resource servers <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-define-resource-servers.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-tags-for-resource.rst 2.31.35-1/awscli/examples/cognito-idp/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-tags-for-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To list user pool tags**
+
+The following ``list-tags-for-resource`` example lists the tags assigned to the user pool with the requested ARN. ::
+
+    aws cognito-idp list-tags-for-resource \
+        --resource-arn arn:aws:cognito-idp:us-west-2:123456789012:userpool/us-west-2_EXAMPLE
+
+Output::
+
+    {
+        "Tags": {
+            "administrator": "Jie",
+            "tenant": "ExampleCorp"
+        }
+    }
+
+For more information, see `Tagging Amazon Cognito resources <https://docs.aws.amazon.com/cognito/latest/developerguide/tagging.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-user-import-jobs.rst 2.31.35-1/awscli/examples/cognito-idp/list-user-import-jobs.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-user-import-jobs.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-user-import-jobs.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,57 +1,61 @@
-**To list user import jobs**
-
-This example lists user import jobs. 
-
-For more information about importing users, see `Importing Users into User Pools From a CSV File`_.
-
-Command::
-
-  aws cognito-idp list-user-import-jobs --user-pool-id us-west-2_aaaaaaaaa  --max-results 20
-
-Output::
-
-  {
-    "UserImportJobs": [
-        {
-            "JobName": "Test2",
-            "JobId": "import-d0OnwGA3mV",
-            "UserPoolId": "us-west-2_aaaaaaaaa",
-            "PreSignedUrl": "PRE_SIGNED_URL",
-            "CreationDate": 1548272793.069,
-            "Status": "Created",
-            "CloudWatchLogsRoleArn": "arn:aws:iam::111111111111:role/CognitoCloudWatchLogsRole",
-            "ImportedUsers": 0,
-            "SkippedUsers": 0,
-            "FailedUsers": 0
-        },
-        {
-            "JobName": "Test1",
-            "JobId": "import-qQ0DCt2fRh",
-            "UserPoolId": "us-west-2_aaaaaaaaa",
-            "PreSignedUrl": "PRE_SIGNED_URL",
-            "CreationDate": 1548271795.471,
-            "Status": "Created",
-            "CloudWatchLogsRoleArn": "arn:aws:iam::111111111111:role/CognitoCloudWatchLogsRole",
-            "ImportedUsers": 0,
-            "SkippedUsers": 0,
-            "FailedUsers": 0
-        },
-        {
-            "JobName": "import-Test1",
-            "JobId": "import-TZqNQvDRnW",
-            "UserPoolId": "us-west-2_aaaaaaaaa",
-            "PreSignedUrl": "PRE_SIGNED_URL",
-            "CreationDate": 1548271708.512,
-            "StartDate": 1548277247.962,
-            "CompletionDate": 1548277248.912,
-            "Status": "Failed",
-            "CloudWatchLogsRoleArn": "arn:aws:iam::111111111111:role/CognitoCloudWatchLogsRole",
-            "ImportedUsers": 0,
-            "SkippedUsers": 0,
-            "FailedUsers": 1,
-            "CompletionMessage": "Too many users have failed or been skipped during the import."
-        }
-    ]
-  }
-  
-.. _`Importing Users into User Pools From a CSV File`: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html
\ No newline at end of file
+**To list user import jobs and statuses**
+
+The following ``list-user-import-jobs`` example lists first three user import jobs and their details in the requested user pool. ::
+
+    aws cognito-idp list-user-import-jobs \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-results 3
+
+Output::
+
+    {
+        "PaginationToken": "us-west-2_EXAMPLE#import-example3#1667948397084",
+        "UserImportJobs": [
+            {
+                "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/service-role/Cognito-UserImport-Role",
+                "CompletionDate": 1735329786.142,
+                "CompletionMessage": "The user import job has expired.",
+                "CreationDate": 1735241621.022,
+                "FailedUsers": 0,
+                "ImportedUsers": 0,
+                "JobId": "import-example1",
+                "JobName": "Test-import-job-1",
+                "PreSignedUrl": "https://aws-cognito-idp-user-import-pdx.s3.us-west-2.amazonaws.com/123456789012/us-west-2_EXAMPLE/import-mAgUtd8PMm?X-Amz-Security-Token=[token]&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241226T193341Z&X-Amz-SignedHeaders=host%3Bx-amz-server-side-encryption&X-Amz-Expires=899&X-Amz-Credential=[credential]&X-Amz-Signature=[signature]",
+                "SkippedUsers": 0,
+                "Status": "Expired",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/service-role/Cognito-UserImport-Role",
+                "CompletionDate": 1681509058.408,
+                "CompletionMessage": "Too many users have failed or been skipped during the import.",
+                "CreationDate": 1681509001.477,
+                "FailedUsers": 1,
+                "ImportedUsers": 0,
+                "JobId": "import-example2",
+                "JobName": "Test-import-job-2",
+                "PreSignedUrl": "https://aws-cognito-idp-user-import-pdx.s3.us-west-2.amazonaws.com/123456789012/us-west-2_EXAMPLE/import-mAgUtd8PMm?X-Amz-Security-Token=[token]&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241226T193341Z&X-Amz-SignedHeaders=host%3Bx-amz-server-side-encryption&X-Amz-Expires=899&X-Amz-Credential=[credential]&X-Amz-Signature=[signature]",
+                "SkippedUsers": 0,
+                "StartDate": 1681509057.965,
+                "Status": "Failed",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/service-role/Cognito-UserImport-Role",
+                "CompletionDate": 1.667864578676E9,
+                "CompletionMessage": "Import Job Completed Successfully.",
+                "CreationDate": 1.667864480281E9,
+                "FailedUsers": 0,
+                "ImportedUsers": 6,
+                "JobId": "import-example3",
+                "JobName": "Test-import-job-3",
+                "PreSignedUrl": "https://aws-cognito-idp-user-import-pdx.s3.us-west-2.amazonaws.com/123456789012/us-west-2_EXAMPLE/import-mAgUtd8PMm?X-Amz-Security-Token=[token]&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241226T193341Z&X-Amz-SignedHeaders=host%3Bx-amz-server-side-encryption&X-Amz-Expires=899&X-Amz-Credential=[credential]&X-Amz-Signature=[signature]",
+                "SkippedUsers": 0,
+                "StartDate": 1.667864578167E9,
+                "Status": "Succeeded",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            }
+        ]
+    }
+
+For more information, see `Importing users from a CSV file <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-user-pool-clients.rst 2.31.35-1/awscli/examples/cognito-idp/list-user-pool-clients.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-user-pool-clients.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-user-pool-clients.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**To list app clients**
+
+The following ``list-user-pool-clients`` example lists the first three app clients in the requested user pool. ::
+
+    aws cognito-idp list-user-pool-clients \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-results 3
+
+Output::
+
+    {
+        "NextToken": "[Pagination token]",
+        "UserPoolClients": [
+            {
+                "ClientId": "1example23456789",
+                "ClientName": "app-client-1",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "ClientId": "2example34567890",
+                "ClientName": "app-client-2",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            },
+            {
+                "ClientId": "3example45678901",
+                "ClientName": "app-client-3",
+                "UserPoolId": "us-west-2_EXAMPLE"
+            }
+        ]
+    }
+
+For more information, see `App clients <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-user-pools.rst 2.31.35-1/awscli/examples/cognito-idp/list-user-pools.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-user-pools.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-user-pools.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,22 +1,48 @@
-**To list user pools**
-
-This example lists up to 20 user pools.   
-
-Command::
-
-  aws cognito-idp list-user-pools --max-results 20
-
-Output::
-
-  {
-    "UserPools": [
-        {
-           "CreationDate": 1547763720.822,
-           "LastModifiedDate": 1547763720.822,
-           "LambdaConfig": {},
-           "Id": "us-west-2_aaaaaaaaa",
-           "Name": "MyUserPool"
-        }
-    ]
-  }
-
+**To list user pools**
+
+The following ``list-user-pools`` example lists 3 of the available user pools in the AWS account of the current CLI credentials. ::
+
+    aws cognito-idp list-user-pools \
+        --max-results 3
+
+Output::
+
+    {
+        "NextToken": "[Pagination token]",
+        "UserPools": [
+            {
+                "CreationDate": 1681502497.741,
+                "Id": "us-west-2_EXAMPLE1",
+                "LambdaConfig": {
+                    "CustomMessage": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
+                    "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
+                    "PreTokenGeneration": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
+                    "PreTokenGenerationConfig": {
+                        "LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
+                        "LambdaVersion": "V1_0"
+                    }
+                },
+                "LastModifiedDate": 1681502497.741,
+                "Name": "user pool 1"
+            },
+            {
+                "CreationDate": 1686064178.717,
+                "Id": "us-west-2_EXAMPLE2",
+                "LambdaConfig": {
+                },
+                "LastModifiedDate": 1686064178.873,
+                "Name": "user pool 2"
+            },
+            {
+                "CreationDate": 1627681712.237,
+                "Id": "us-west-2_EXAMPLE3",
+                "LambdaConfig": {
+                    "UserMigration": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction"
+                },
+                "LastModifiedDate": 1678486942.479,
+                "Name": "user pool 3"
+            }
+        ]
+    }
+
+For more information, see `Amazon Cognito user pools <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-users.rst 2.31.35-1/awscli/examples/cognito-idp/list-users.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-users.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-users.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,35 +1,98 @@
-**To list users**
-
-This example lists up to 20 users.   
-
-Command::
-
-  aws cognito-idp list-users --user-pool-id us-west-2_aaaaaaaaa --limit 20
-
-Output::
-
-  {
-    "Users": [
-        {
-            "Username": "22704aa3-fc10-479a-97eb-2af5806bd327",
-            "Enabled": true,
-            "UserStatus": "FORCE_CHANGE_PASSWORD",
-            "UserCreateDate": 1548089817.683,
-            "UserLastModifiedDate": 1548089817.683,
-            "Attributes": [
-                {
-                    "Name": "sub",
-                    "Value": "22704aa3-fc10-479a-97eb-2af5806bd327"
-                },
-                {
-                    "Name": "email_verified",
-                    "Value": "true"
-                },
-                {
-                    "Name": "email",
-                    "Value": "mary@example.com"
-                }
-            ]
-        }
-    ]
-  }
+**Example 1: To list users with a server-side filter**
+
+The following ``list-users`` example lists 3 users in the requested user pool whose email addresses begin with ``testuser``. ::
+
+    aws cognito-idp list-users \
+        --user-pool-id us-west-2_EXAMPLE \
+        --filter email^=\"testuser\" \
+        --max-items 3 
+
+Output::
+
+    {
+        "PaginationToken": "efgh5678EXAMPLE",
+        "Users": [
+            {
+                "Attributes": [
+                    {
+                        "Name": "sub",
+                        "Value": "eaad0219-2117-439f-8d46-4db20e59268f"
+                    },
+                    {
+                        "Name": "email",
+                        "Value": "testuser@example.com"
+                    }
+                ],
+                "Enabled": true,
+                "UserCreateDate": 1682955829.578,
+                "UserLastModifiedDate": 1689030181.63,
+                "UserStatus": "CONFIRMED",
+                "Username": "testuser"
+            },
+            {
+                "Attributes": [
+                    {
+                        "Name": "sub",
+                        "Value": "3b994cfd-0b07-4581-be46-3c82f9a70c90"
+                    },
+                    {
+                        "Name": "email",
+                        "Value": "testuser2@example.com"
+                    }
+                ],
+                "Enabled": true,
+                "UserCreateDate": 1684427979.201,
+                "UserLastModifiedDate": 1684427979.201,
+                "UserStatus": "UNCONFIRMED",
+                "Username": "testuser2"
+            },
+            {
+                "Attributes": [
+                    {
+                        "Name": "sub",
+                        "Value": "5929e0d1-4c34-42d1-9b79-a5ecacfe66f7"
+                    },
+                    {
+                        "Name": "email",
+                        "Value": "testuser3@example.com"
+                    }
+                ],
+                "Enabled": true,
+                "UserCreateDate": 1684427823.641,
+                "UserLastModifiedDate": 1684427823.641,
+                "UserStatus": "UNCONFIRMED",
+                "Username": "testuser3@example.com"
+            }
+        ]
+    }
+
+For more information, see `Managing and searching for users <https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-manage-user-accounts.html>`__ in the *Amazon Cognito Developer Guide*.
+
+**Example 2: To list users with a client-side filter**
+
+The following ``list-users`` example lists the attributes of three users who have an attribute, in this case their email address, that contains the email domain "@example.com". If other attributes contained this string, they would also be displayed. The second user has no attributes that match the query and is excluded from the displayed output, but not from the server response. ::
+
+    aws cognito-idp list-users \
+        --user-pool-id us-west-2_EXAMPLE \
+        --max-items 3 
+        --query Users\[\*\].Attributes\[\?Value\.contains\(\@\,\'@example.com\'\)\]
+
+Output::
+
+    [
+        [
+            {
+                "Name": "email",
+                "Value": "admin@example.com"
+            }
+        ],
+        [],
+        [
+            {
+                "Name": "email",
+                "Value": "operator@example.com"
+            }
+        ]
+    ]
+
+For more information, see `Managing and searching for users <https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-manage-user-accounts.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/list-web-authn-credentials.rst 2.31.35-1/awscli/examples/cognito-idp/list-web-authn-credentials.rst
--- 2.23.6-1/awscli/examples/cognito-idp/list-web-authn-credentials.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/list-web-authn-credentials.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+**To list passkey credentials**
+
+The following ``list-web-authn-credentials`` example lists passkey, or WebAuthn, credentials for the current user. They have one registered device. ::
+
+    aws cognito-idp list-web-authn-credentials \
+        --access-token eyJra456defEXAMPLE
+
+Output::
+
+    {
+        "Credentials": [
+            {
+                "AuthenticatorAttachment": "cross-platform",
+                "CreatedAt": 1736293876.115,
+                "CredentialId": "8LApgk4-lNUFHbhm2w6Und7-uxcc8coJGsPxiogvHoItc64xWQc3r4CEXAMPLE",
+                "FriendlyCredentialName": "Roaming passkey",
+                "RelyingPartyId": "auth.example.com"
+            }
+        ]
+    }
+
+For more information, see `Passkey sign-in <https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html#amazon-cognito-user-pools-authentication-flow-methods-passkey>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/respond-to-auth-challenge.rst 2.31.35-1/awscli/examples/cognito-idp/respond-to-auth-challenge.rst
--- 2.23.6-1/awscli/examples/cognito-idp/respond-to-auth-challenge.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/respond-to-auth-challenge.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,27 +1,78 @@
-**To respond to an authorization challenge**
-
-This example responds to an authorization challenge initiated with `initiate-auth`_. It is a response to the NEW_PASSWORD_REQUIRED challenge. 
-It sets a password for user jane@example.com.
-
-Command::
-
-  aws cognito-idp respond-to-auth-challenge --client-id 3n4b5urk1ft4fl3mg5e62d9ado --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses USERNAME=jane@example.com,NEW_PASSWORD="password" --session "SESSION_TOKEN"
-
-Output::
-
-  {
-    "ChallengeParameters": {},
-    "AuthenticationResult": {
-        "AccessToken": "ACCESS_TOKEN",
-        "ExpiresIn": 3600,
-        "TokenType": "Bearer",
-        "RefreshToken": "REFRESH_TOKEN",
-        "IdToken": "ID_TOKEN",
-        "NewDeviceMetadata": {
-            "DeviceKey": "us-west-2_fec070d2-fa88-424a-8ec8-b26d7198eb23",
-            "DeviceGroupKey": "-wt2ha1Zd"
-        }
-    }
-  }
-  
-.. _`initiate-auth`: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/initiate-auth.html
\ No newline at end of file
+**Example 1: To respond to a NEW_PASSWORD_REQUIRED challenge**
+
+The following ``respond-to-auth-challenge`` example responds to a NEW_PASSWORD_REQUIRED challenge that `initiate-auth`_ returned. It sets a password for the user ``jane@example.com``. ::
+
+    aws cognito-idp respond-to-auth-challenge \
+        --client-id 1example23456789 \
+        --challenge-name NEW_PASSWORD_REQUIRED \
+        --challenge-responses USERNAME=jane@example.com,NEW_PASSWORD=[Password] \
+        --session AYABeEv5HklEXAMPLE
+
+Output::
+
+    {
+        "ChallengeParameters": {},
+        "AuthenticationResult": {
+            "AccessToken": "ACCESS_TOKEN",
+            "ExpiresIn": 3600,
+            "TokenType": "Bearer",
+            "RefreshToken": "REFRESH_TOKEN",
+            "IdToken": "ID_TOKEN",
+            "NewDeviceMetadata": {
+                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "DeviceGroupKey": "-wt2ha1Zd"
+            }
+        }
+    }
+
+For more information, see `Authentication <https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html>`__ in the *Amazon Cognito Developer Guide*.
+
+**Example 2: To respond to a SELECT_MFA_TYPE challenge**
+
+The following ``respond-to-auth-challenge`` example chooses TOTP MFA as the MFA option for the current user. The user was prompted to select an MFA type and will next be prompted to enter their MFA code. ::
+
+    aws cognito-idp respond-to-auth-challenge \
+        --client-id 1example23456789 
+        --session AYABeEv5HklEXAMPLE 
+        --challenge-name SELECT_MFA_TYPE 
+        --challenge-responses USERNAME=testuser,ANSWER=SOFTWARE_TOKEN_MFA
+
+Output::
+
+    {
+        "ChallengeName": "SOFTWARE_TOKEN_MFA",
+        "Session": "AYABeEv5HklEXAMPLE",
+        "ChallengeParameters": {
+            "FRIENDLY_DEVICE_NAME": "transparent"
+        }
+    }
+
+For more information, see `Adding MFA <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
+
+**Example 3: To respond to a SOFTWARE_TOKEN_MFA challenge**
+
+The following ``respond-to-auth-challenge`` example provides a TOTP MFA code and completes sign-in. ::
+
+    aws cognito-idp respond-to-auth-challenge \
+        --client-id 1example23456789 \
+        --session AYABeEv5HklEXAMPLE \
+        --challenge-name SOFTWARE_TOKEN_MFA \
+        --challenge-responses USERNAME=testuser,SOFTWARE_TOKEN_MFA_CODE=123456
+
+Output::
+
+    {
+        "AuthenticationResult": {
+            "AccessToken": "eyJra456defEXAMPLE",
+            "ExpiresIn": 3600,
+            "TokenType": "Bearer",
+            "RefreshToken": "eyJra123abcEXAMPLE",
+            "IdToken": "eyJra789ghiEXAMPLE",
+            "NewDeviceMetadata": {
+                "DeviceKey": "us-west-2_a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "DeviceGroupKey": "-v7w9UcY6"
+            }
+        }
+    }
+
+For more information, see `Adding MFA <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/revoke-token.rst 2.31.35-1/awscli/examples/cognito-idp/revoke-token.rst
--- 2.23.6-1/awscli/examples/cognito-idp/revoke-token.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/revoke-token.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To revoke a refresh token**
+
+The following ``revoke-token`` revokes the requested refresh token and associated access tokens. ::
+
+    aws cognito-idp revoke-token \
+        --token eyJjd123abcEXAMPLE \
+        --client-id 1example23456789
+
+This command produces no output.
+
+For more information, see `Revoking tokens <https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/set-log-delivery-configuration.rst 2.31.35-1/awscli/examples/cognito-idp/set-log-delivery-configuration.rst
--- 2.23.6-1/awscli/examples/cognito-idp/set-log-delivery-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/set-log-delivery-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,33 @@
+**To set up log export from a user pool**
+
+The following ``set-log-delivery-configuration`` example configures the requested user pool with user-notification error logging to a log group and user-authentication info logging to an S3 bucket. ::
+
+    aws cognito-idp set-log-delivery-configuration \
+        --user-pool-id us-west-2_EXAMPLE \
+        --log-configurations LogLevel=ERROR,EventSource=userNotification,CloudWatchLogsConfiguration={LogGroupArn=arn:aws:logs:us-west-2:123456789012:log-group:cognito-exported} LogLevel=INFO,EventSource=userAuthEvents,S3Configuration={BucketArn=arn:aws:s3:::amzn-s3-demo-bucket1}
+
+Output::
+
+    {
+       "LogDeliveryConfiguration": {
+            "LogConfigurations": [
+                {
+                    "CloudWatchLogsConfiguration": {
+                        "LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:cognito-exported"
+                    },
+                    "EventSource": "userNotification",
+                    "LogLevel": "ERROR"
+                },
+                {
+                    "EventSource": "userAuthEvents",
+                    "LogLevel": "INFO",
+                    "S3Configuration": {
+                        "BucketArn": "arn:aws:s3:::amzn-s3-demo-bucket1"
+                    }
+                }
+            ],
+            "UserPoolId": "us-west-2_EXAMPLE"
+       }
+    }
+
+For more information, see `Exporting user pool logs <https://docs.aws.amazon.com/cognito/latest/developerguide/exporting-quotas-and-usage.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/set-risk-configuration.rst 2.31.35-1/awscli/examples/cognito-idp/set-risk-configuration.rst
--- 2.23.6-1/awscli/examples/cognito-idp/set-risk-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/set-risk-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,23 +1,136 @@
-**To set risk configuration**
-
-This example sets the risk configuration for a user pool. It sets the sign-up event action to NO_ACTION. 
-
-Command::
-
-  aws cognito-idp set-risk-configuration --user-pool-id us-west-2_aaaaaaaaa  --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION}
-
-Output::
-
-  {
-    "RiskConfiguration": {
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "CompromisedCredentialsRiskConfiguration": {
-            "EventFilter": [
-                "SIGN_UP"
-            ],
-            "Actions": {
-                "EventAction": "NO_ACTION"
-            }
-        }
-    }
-  }
\ No newline at end of file
+**To set the threat protection risk configuration**
+
+The following ``set-risk-configuration`` example configures threat protection messages and actions, compromised credentials, and IP address exceptions in the requested app client. Because of the complexity of the NotifyConfiguration object, JSON input is a best practice for this command. ::
+
+    aws cognito-idp set-risk-configuration \
+        --cli-input-json file://set-risk-configuration.json
+
+Contents of ``set-risk-configuration.json``::
+
+    {
+        "AccountTakeoverRiskConfiguration": {
+            "Actions": {
+                "HighAction": {
+                    "EventAction": "MFA_REQUIRED",
+                    "Notify": true
+                },
+                "LowAction": {
+                    "EventAction": "NO_ACTION",
+                    "Notify": true
+                },
+                "MediumAction": {
+                    "EventAction": "MFA_IF_CONFIGURED",
+                    "Notify": true
+                }
+            },
+            "NotifyConfiguration": {
+                "BlockEmail": {
+                    "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We blocked an unrecognized sign-in to your account with this information:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                    "Subject": "Blocked sign-in attempt",
+                    "TextBody": "We blocked an unrecognized sign-in to your account with this information:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                },
+                "From": "admin@example.com",
+                "MfaEmail": {
+                    "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We required you to use multi-factor authentication for the following sign-in attempt:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                    "Subject": "New sign-in attempt",
+                    "TextBody": "We required you to use multi-factor authentication for the following sign-in attempt:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                },
+                "NoActionEmail": {
+                    "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We observed an unrecognized sign-in to your account with this information:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                    "Subject": "New sign-in attempt",
+                    "TextBody": "We observed an unrecognized sign-in to your account with this information:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                },
+                "ReplyTo": "admin@example.com",
+                "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
+            }
+        },
+        "ClientId": "1example23456789",
+        "CompromisedCredentialsRiskConfiguration": {
+            "Actions": {
+                "EventAction": "BLOCK"
+            },
+            "EventFilter": [
+                "PASSWORD_CHANGE",
+                "SIGN_UP",
+                "SIGN_IN"
+            ]
+        },
+        "RiskExceptionConfiguration": {
+            "BlockedIPRangeList": [
+                "192.0.2.1/32",
+                "192.0.2.2/32"
+            ],
+            "SkippedIPRangeList": [
+                "203.0.113.1/32",
+                "203.0.113.2/32"
+            ]
+        },
+        "UserPoolId": "us-west-2_EXAMPLE"
+    }
+
+Output::
+
+    {
+        "RiskConfiguration": {
+            "AccountTakeoverRiskConfiguration": {
+                "Actions": {
+                    "HighAction": {
+                        "EventAction": "MFA_REQUIRED",
+                        "Notify": true
+                    },
+                    "LowAction": {
+                        "EventAction": "NO_ACTION",
+                        "Notify": true
+                    },
+                    "MediumAction": {
+                        "EventAction": "MFA_IF_CONFIGURED",
+                        "Notify": true
+                    }
+                },
+                "NotifyConfiguration": {
+                    "BlockEmail": {
+                        "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We blocked an unrecognized sign-in to your account with this information:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                        "Subject": "Blocked sign-in attempt",
+                        "TextBody": "We blocked an unrecognized sign-in to your account with this information:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                    },
+                    "From": "admin@example.com",
+                    "MfaEmail": {
+                        "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We required you to use multi-factor authentication for the following sign-in attempt:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                        "Subject": "New sign-in attempt",
+                        "TextBody": "We required you to use multi-factor authentication for the following sign-in attempt:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                    },
+                    "NoActionEmail": {
+                        "HtmlBody": "<!DOCTYPE html>\n<html>\n<head>\n\t<title>HTML email context</title>\n\t<meta charset=\"utf-8\">\n</head>\n<body>\n<pre>We observed an unrecognized sign-in to your account with this information:\n<ul>\n<li>Time: {login-time}</li>\n<li>Device: {device-name}</li>\n<li>Location: {city}, {country}</li>\n</ul>\nIf this sign-in was not by you, you should change your password and notify us by clicking on <a href={one-click-link-invalid}>this link</a>\nIf this sign-in was by you, you can follow <a href={one-click-link-valid}>this link</a> to let us know</pre>\n</body>\n</html>",
+                        "Subject": "New sign-in attempt",
+                        "TextBody": "We observed an unrecognized sign-in to your account with this information:\nTime: {login-time}\nDevice: {device-name}\nLocation: {city}, {country}\nIf this sign-in was not by you, you should change your password and notify us by clicking on {one-click-link-invalid}\nIf this sign-in was by you, you can follow {one-click-link-valid} to let us know"
+                    },
+                    "ReplyTo": "admin@example.com",
+                    "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
+                }
+            },
+            "ClientId": "1example23456789",
+            "CompromisedCredentialsRiskConfiguration": {
+                "Actions": {
+                    "EventAction": "BLOCK"
+                },
+                "EventFilter": [
+                    "PASSWORD_CHANGE",
+                    "SIGN_UP",
+                    "SIGN_IN"
+                ]
+            },
+            "RiskExceptionConfiguration": {
+                "BlockedIPRangeList": [
+                    "192.0.2.1/32",
+                    "192.0.2.2/32"
+                ],
+                "SkippedIPRangeList": [
+                    "203.0.113.1/32",
+                    "203.0.113.2/32"
+                ]
+            },
+            "UserPoolId": "us-west-2_EXAMPLE"
+        }
+    }
+
+For more information, see `Threat protection <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html>`__ in the *Amazon Cognito Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/set-ui-customization.rst 2.31.35-1/awscli/examples/cognito-idp/set-ui-customization.rst
--- 2.23.6-1/awscli/examples/cognito-idp/set-ui-customization.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/set-ui-customization.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,18 +1,45 @@
-**To set UI customization**
-
-This example customizes the CSS setting for a user pool.
-
-Command::
-
-  aws cognito-idp set-ui-customization --user-pool-id us-west-2_aaaaaaaaa --css ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 10px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 300;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 14px;\n\tfont-weight: bold;\n\tmargin: 20px 0px 10px 0px;\n\theight: 40px;\n\twidth: 100%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\theight: 40px;\n\ttext-align: left;\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #faf;\n}\n"
-
-Output::
-
-  {
-    "UICustomization": {
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "ClientId": "ALL",
-        "CSS": ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 10px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 300;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 14px;\n\tfont-weight: bold;\n\tmargin: 20px 0px 10px 0px;\n\theight: 40px;\n\twidth: 100%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\theight: 40px;\n\ttext-align: left;\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #faf;\n}\n",
-        "CSSVersion": "20190129172214"
-    }
-  }
\ No newline at end of file
+**Example 1: To customize the classic hosted UI for an app client**
+
+The following ``set-ui-customization`` example configures the requested app client with some custom CSS and with the Amazon Cognito logo as the application logo. ::
+
+    aws cognito-idp set-ui-customization \
+        --user-pool-id us-west-2_ywDJHlIfU \
+        --client-id 14pq32c5q2uq2q7keorloqvb23 \
+        --css ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 0px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 400;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 11px;\n\tfont-weight: normal;\n\tmargin: 20px -15px 10px -13px;\n\theight: 40px;\n\twidth: 108%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n\ttext-align: center;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 0px;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\tborder-radius: 2px;\n\theight: 40px;\n\tmargin-bottom: 15px;\n\tpadding: 1px;\n\ttext-align: left;\n\twidth: 100%;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #fff;\n}\n" \
+        --image-file iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA2UExURd00TN9BV/Cmsfvm6f3y9P////fM0uqAj+yNmu6ZpvnZ3eNabuFNYuZneehzhPKzvPTAxwAAAOiMMlkAAAASdFJOU///////////////////////AOK/vxIAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKDSURBVFhH7ZfpkoMgEISDHKuEw/d/2u2BQWMiBrG29o+fVsKatdPMAeZxc3Nz8w+ISekzmB++sYIw/I/tjHzrPpO2Tx62EbR2PNxFac+jVuKxRaV50IzXkUe76NOCoUuwlvnQKei02gNF0ykotOLRBq/nboeWRxAISx2EbsHFoRhK6Igk2JJlwScfQjgt06dOaWWiTbEDAe/iq8N9kqCw2uCbHkHlYkaXEF8EYeL9RDqT4FhC6XMIIEifdcUwCc4leNyhabadWU6OlKYJE1Oac3NSPhB5rlaXlSgmr/1lww4nPaU/1ylfLGxX1r6Y66ZZkCqvnOlqKWws59ELj7fULc2CubwySYkdDuuiY0/F0L6Q5pZiSG0SfZTSTCOUhxOCH1AdIoCpTTIjtd+VpEjUDDytQH/0Fpc661Aisas/4qmyUItD557pSCOSQQzlx27J+meyDGc5zZgfhWuXE1lGgmVOMwmWdeGdzhjqZV14x5vSj7vsC5JDz/Cl0Vhp56n2NQt1wQIpury1EPbwyaYm+IhmAQKoajkH51wg4cMZ1wQ3QG9efKWWOaDhYWnU6jXjCMdRmm21PArI+Pb5DYoH93hq0ZCPlxeGJho/DI15C6sQc/L2sTC47UFBKZGHT6k+zlXg7WebA0Nr0HTcLMfk/Y4Rc65D3iG6WDd7YLSlVqk87bVhUwhnClrx11RsVQwlAA818Mn+QEs71BhSFU6orsUfKhHp72XMGYXi4q9c64RXRvzkWurRfG2vI2be/VaNcNgpX0Evb/vio7nPMmj5qujkpQgSaPd1UcVqciHFDNZpOcGlcOPyi+AamCbIL9fitxAGeFN2Dl+3vZubm5u/4fH4Bd14HhIPdwZPAAAAAElFTkSuQmCC
+
+Output::
+
+    {
+        "UICustomization": {
+            "UserPoolId": "us-west-2_ywDJHlIfU",
+            "ClientId": "14pq32c5q2uq2q7keorloqvb23",
+            "ImageUrl": "https://cf.thewrong.club/14pq32c5q2uq2q7keorloqvb23/20250117005911/assets/images/image.jpg",
+            "CSS": ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 0px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 400;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 11px;\n\tfont-weight: normal;\n\tmargin: 20px -15px 10px -13px;\n\theight: 40px;\n\twidth: 108%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n\ttext-align: center;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 0px;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\tborder-radius: 2px;\n\theight: 40px;\n\tmargin-bottom: 15px;\n\tpadding: 1px;\n\ttext-align: left;\n\twidth: 100%;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #fff;\n}\n",
+            "CSSVersion": "20250117005911"
+        }
+    }
+
+**Example 2: To set the default UI customization for all app clients**
+
+The following ``set-ui-customization`` example configures the requested user pool for all app clients that don't have a client-specific configuration. The command applies some custom CSS and with the Amazon Cognito logo as the application logo. ::
+
+    aws cognito-idp set-ui-customization \
+    --user-pool-id us-west-2_ywDJHlIfU \
+    --client-id ALL \
+    --css ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 0px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 400;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 11px;\n\tfont-weight: normal;\n\tmargin: 20px -15px 10px -13px;\n\theight: 40px;\n\twidth: 108%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n\ttext-align: center;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 0px;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\tborder-radius: 2px;\n\theight: 40px;\n\tmargin-bottom: 15px;\n\tpadding: 1px;\n\ttext-align: left;\n\twidth: 100%;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #fff;\n}\n" \
+    --image-file iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA2UExURd00TN9BV/Cmsfvm6f3y9P////fM0uqAj+yNmu6ZpvnZ3eNabuFNYuZneehzhPKzvPTAxwAAAOiMMlkAAAASdFJOU///////////////////////AOK/vxIAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKDSURBVFhH7ZfpkoMgEISDHKuEw/d/2u2BQWMiBrG29o+fVsKatdPMAeZxc3Nz8w+ISekzmB++sYIw/I/tjHzrPpO2Tx62EbR2PNxFac+jVuKxRaV50IzXkUe76NOCoUuwlvnQKei02gNF0ykotOLRBq/nboeWRxAISx2EbsHFoRhK6Igk2JJlwScfQjgt06dOaWWiTbEDAe/iq8N9kqCw2uCbHkHlYkaXEF8EYeL9RDqT4FhC6XMIIEifdcUwCc4leNyhabadWU6OlKYJE1Oac3NSPhB5rlaXlSgmr/1lww4nPaU/1ylfLGxX1r6Y66ZZkCqvnOlqKWws59ELj7fULc2CubwySYkdDuuiY0/F0L6Q5pZiSG0SfZTSTCOUhxOCH1AdIoCpTTIjtd+VpEjUDDytQH/0Fpc661Aisas/4qmyUItD557pSCOSQQzlx27J+meyDGc5zZgfhWuXE1lGgmVOMwmWdeGdzhjqZV14x5vSj7vsC5JDz/Cl0Vhp56n2NQt1wQIpury1EPbwyaYm+IhmAQKoajkH51wg4cMZ1wQ3QG9efKWWOaDhYWnU6jXjCMdRmm21PArI+Pb5DYoH93hq0ZCPlxeGJho/DI15C6sQc/L2sTC47UFBKZGHT6k+zlXg7WebA0Nr0HTcLMfk/Y4Rc65D3iG6WDd7YLSlVqk87bVhUwhnClrx11RsVQwlAA818Mn+QEs71BhSFU6orsUfKhHp72XMGYXi4q9c64RXRvzkWurRfG2vI2be/VaNcNgpX0Evb/vio7nPMmj5qujkpQgSaPd1UcVqciHFDNZpOcGlcOPyi+AamCbIL9fitxAGeFN2Dl+3vZubm5u/4fH4Bd14HhIPdwZPAAAAAElFTkSuQmCC
+
+Output::
+
+    {
+        "UICustomization": {
+            "UserPoolId": "us-west-2_ywDJHlIfU",
+            "ClientId": "14pq32c5q2uq2q7keorloqvb23",
+            "ImageUrl": "https://cf.thewrong.club/14pq32c5q2uq2q7keorloqvb23/20250117005911/assets/images/image.jpg",
+            "CSS": ".logo-customizable {\n\tmax-width: 60%;\n\tmax-height: 30%;\n}\n.banner-customizable {\n\tpadding: 25px 0px 25px 0px;\n\tbackground-color: lightgray;\n}\n.label-customizable {\n\tfont-weight: 400;\n}\n.textDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.idpDescription-customizable {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tdisplay: block;\n\tfont-size: 16px;\n}\n.legalText-customizable {\n\tcolor: #747474;\n\tfont-size: 11px;\n}\n.submitButton-customizable {\n\tfont-size: 11px;\n\tfont-weight: normal;\n\tmargin: 20px -15px 10px -13px;\n\theight: 40px;\n\twidth: 108%;\n\tcolor: #fff;\n\tbackground-color: #337ab7;\n\ttext-align: center;\n}\n.submitButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #286090;\n}\n.errorMessage-customizable {\n\tpadding: 5px;\n\tfont-size: 14px;\n\twidth: 100%;\n\tbackground: #F5F5F5;\n\tborder: 2px solid #D64958;\n\tcolor: #D64958;\n}\n.inputField-customizable {\n\twidth: 100%;\n\theight: 34px;\n\tcolor: #555;\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 0px;\n}\n.inputField-customizable:focus {\n\tborder-color: #66afe9;\n\toutline: 0;\n}\n.idpButton-customizable {\n\theight: 40px;\n\twidth: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tmargin-bottom: 15px;\n\tcolor: #fff;\n\tbackground-color: #5bc0de;\n\tborder-color: #46b8da;\n}\n.idpButton-customizable:hover {\n\tcolor: #fff;\n\tbackground-color: #31b0d5;\n}\n.socialButton-customizable {\n\tborder-radius: 2px;\n\theight: 40px;\n\tmargin-bottom: 15px;\n\tpadding: 1px;\n\ttext-align: left;\n\twidth: 100%;\n}\n.redirect-customizable {\n\ttext-align: center;\n}\n.passwordCheck-notValid-customizable {\n\tcolor: #DF3312;\n}\n.passwordCheck-valid-customizable {\n\tcolor: #19BF00;\n}\n.background-customizable {\n\tbackground-color: #fff;\n}\n",
+            "CSSVersion": "20250117005911"
+        }
+    }
+
+For more information, see `Hosted UI (classic) branding <https://docs.aws.amazon.com/cognito/latest/developerguide/hosted-ui-classic-branding.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/set-user-mfa-preference.rst 2.31.35-1/awscli/examples/cognito-idp/set-user-mfa-preference.rst
--- 2.23.6-1/awscli/examples/cognito-idp/set-user-mfa-preference.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/set-user-mfa-preference.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,12 +1,13 @@
-**To set user MFA settings**
+**To set a user's MFA preference**
 
-The following ``set-user-mfa-preference`` example modifies the MFA delivery options. It changes the MFA delivery medium to SMS. ::
+The following ``set-user-mfa-preference`` example configures the current user to use TOTP MFA and disables all other MFA factors. ::
 
     aws cognito-idp set-user-mfa-preference \
-        --access-token "eyJra12345EXAMPLE" \
+        --access-token eyJra456defEXAMPLE \
         --software-token-mfa-settings Enabled=true,PreferredMfa=true \
-        --sms-mfa-settings Enabled=false,PreferredMfa=false
+        --sms-mfa-settings Enabled=false,PreferredMfa=false \
+        --email-mfa-settings Enabled=false,PreferredMfa=false
 
 This command produces no output.
 
-For more information, see `Adding MFA to a user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
\ No newline at end of file
+For more information, see `Adding MFA <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/set-user-pool-mfa-config.rst 2.31.35-1/awscli/examples/cognito-idp/set-user-pool-mfa-config.rst
--- 2.23.6-1/awscli/examples/cognito-idp/set-user-pool-mfa-config.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/set-user-pool-mfa-config.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,38 @@
+**To configure user pool MFA and WebAuthn**
+
+The following ``set-user-pool-mfa-config`` example configures the requested user pool with optional MFA with all available MFA methods, and sets the WebAuthn configuration. ::
+
+    aws cognito-idp set-user-pool-mfa-config \
+        --user-pool-id us-west-2_EXAMPLE \
+        --sms-mfa-configuration "SmsAuthenticationMessage=\"Your OTP for MFA or sign-in: use {####}.\",SmsConfiguration={SnsCallerArn=arn:aws:iam::123456789012:role/service-role/test-SMS-Role,ExternalId=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111,SnsRegion=us-west-2}" \
+        --software-token-mfa-configuration Enabled=true \
+        --email-mfa-configuration "Message=\"Your OTP for MFA or sign-in: use {####}\",Subject=\"OTP test\"" \
+        --mfa-configuration OPTIONAL \
+        --web-authn-configuration RelyingPartyId=auth.example.com,UserVerification=preferred
+
+Output::
+
+    {
+        "EmailMfaConfiguration": {
+            "Message": "Your OTP for MFA or sign-in: use {####}",
+            "Subject": "OTP test"
+        },
+        "MfaConfiguration": "OPTIONAL",
+        "SmsMfaConfiguration": {
+            "SmsAuthenticationMessage": "Your OTP for MFA or sign-in: use {####}.",
+            "SmsConfiguration": {
+                "ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+                "SnsCallerArn": "arn:aws:iam::123456789012:role/service-role/test-SMS-Role",
+                "SnsRegion": "us-west-2"
+            }
+        },
+        "SoftwareTokenMfaConfiguration": {
+            "Enabled": true
+        },
+        "WebAuthnConfiguration": {
+            "RelyingPartyId": "auth.example.com",
+            "UserVerification": "preferred"
+        }
+    }
+
+For more information, see `Adding MFA <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ and `Passkey sign-in <https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html#amazon-cognito-user-pools-authentication-flow-methods-passkey>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/start-user-import-job.rst 2.31.35-1/awscli/examples/cognito-idp/start-user-import-job.rst
--- 2.23.6-1/awscli/examples/cognito-idp/start-user-import-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/start-user-import-job.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,29 +1,27 @@
-**To start a user import job**
-
-This example starts a user input job. 
-
-For more information about importing users, see `Importing Users into User Pools From a CSV File`_.
-
-Command::
-
-  aws cognito-idp start-user-import-job --user-pool-id us-west-2_aaaaaaaaa --job-id import-TZqNQvDRnW
-
-Output::
-
-  {
-    "UserImportJob": {
-        "JobName": "import-Test10",
-        "JobId": "import-lmpxSOuIzH",
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "PreSignedUrl": "PRE_SIGNED_URL",
-        "CreationDate": 1548278378.928,
-        "StartDate": 1548278397.334,
-        "Status": "Pending",
-        "CloudWatchLogsRoleArn": "arn:aws:iam::111111111111:role/CognitoCloudWatchLogsRole",
-        "ImportedUsers": 0,
-        "SkippedUsers": 0,
-        "FailedUsers": 0
-    }
-  }
-  
-.. _`Importing Users into User Pools From a CSV File`: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html
\ No newline at end of file
+**To start an import job**
+
+The following ``start-user-import-job`` example starts the requested import job in the requested user pool. ::
+
+    aws cognito-idp start-user-import-job \
+        --user-pool-id us-west-2_EXAMPLE \
+        --job-id import-mAgUtd8PMm
+
+Output::
+
+    {
+        "UserImportJob": {
+            "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/example-cloudwatch-logs-role",
+            "CreationDate": 1736442975.904,
+            "FailedUsers": 0,
+            "ImportedUsers": 0,
+            "JobId": "import-mAgUtd8PMm",
+            "JobName": "Customer import",
+            "PreSignedUrl": "https://aws-cognito-idp-user-import-pdx.s3.us-west-2.amazonaws.com/123456789012/us-west-2_EXAMPLE/import-mAgUtd8PMm?X-Amz-Security-Token=[token]&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241226T193341Z&X-Amz-SignedHeaders=host%3Bx-amz-server-side-encryption&X-Amz-Expires=899&X-Amz-Credential=[credential]&X-Amz-Signature=[signature]",
+            "SkippedUsers": 0,
+            "StartDate": 1736443020.081,
+            "Status": "Pending",
+            "UserPoolId": "us-west-2_EXAMPLE"
+        }
+    }
+
+For more information, see `Importing users into a user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html>`__ in the *Amazon Cognito Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/start-web-authn-registration.rst 2.31.35-1/awscli/examples/cognito-idp/start-web-authn-registration.rst
--- 2.23.6-1/awscli/examples/cognito-idp/start-web-authn-registration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/start-web-authn-registration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+**To get passkey registration information for a signed-in user**
+
+The following ``start-web-authn-registration`` example generates WebAuthn registration options for the current user. ::
+
+    aws cognito-idp start-web-authn-registration \
+        --access-token eyJra456defEXAMPLE
+
+Output::
+
+    {
+        "CredentialCreationOptions": {
+            "authenticatorSelection": {
+                "requireResidentKey": true,
+                "residentKey": "required",
+                "userVerification": "preferred"
+            },
+            "challenge": "wxvbDicyqQqvF2EXAMPLE",
+            "excludeCredentials": [
+                {
+                    "id": "8LApgk4-lNUFHbhm2w6Und7-uxcc8coJGsPxiogvHoItc64xWQc3r4CEXAMPLE",
+                    "type": "public-key"
+                }
+            ],
+            "pubKeyCredParams": [
+                {
+                    "alg": -7,
+                    "type": "public-key"
+                },
+                {
+                    "alg": -257,
+                    "type": "public-key"
+                }
+            ],
+            "rp": {
+                "id": "auth.example.com",
+                "name": "auth.example.com"
+            },
+            "timeout": 60000,
+            "user": {
+                "displayName": "testuser",
+                "id": "ZWFhZDAyMTktMjExNy00MzlmLThkNDYtNGRiMjBlNEXAMPLE",
+                "name": "testuser"
+            }
+        }
+    }
+
+For more information, see `Passkey sign-in <https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow-methods.html#amazon-cognito-user-pools-authentication-flow-methods-passkey>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/stop-user-import-job.rst 2.31.35-1/awscli/examples/cognito-idp/stop-user-import-job.rst
--- 2.23.6-1/awscli/examples/cognito-idp/stop-user-import-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/stop-user-import-job.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,29 @@
-**To stop a user import job**
-
-This example stops a user input job. 
-
-For more information about importing users, see `Importing Users into User Pools From a CSV File`_.
-
-Command::
-
-  aws cognito-idp stop-user-import-job --user-pool-id us-west-2_aaaaaaaaa --job-id import-TZqNQvDRnW
-
-Output::
-
-  {
-    "UserImportJob": {
-        "JobName": "import-Test5",
-        "JobId": "import-Fx0kARISFL",
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "PreSignedUrl": "PRE_SIGNED_URL",
-        "CreationDate": 1548278576.259,
-        "StartDate": 1548278623.366,
-        "CompletionDate": 1548278626.741,
-        "Status": "Stopped",
-        "CloudWatchLogsRoleArn": "arn:aws:iam::111111111111:role/CognitoCloudWatchLogsRole",
-        "ImportedUsers": 0,
-        "SkippedUsers": 0,
-        "FailedUsers": 0,
-        "CompletionMessage": "The Import Job was stopped by the developer."
-    }
-  }
-  
-.. _`Importing Users into User Pools From a CSV File`: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html
\ No newline at end of file
+**To stop an import job**
+
+The following ``stop-user-import-job`` example stops the requested running user import job in the requested user pool. ::
+
+    aws cognito-idp stop-user-import-job \
+        --user-pool-id us-west-2_EXAMPLE \
+        --job-id import-mAgUtd8PMm
+
+Output::
+
+    {
+        "UserImportJob": {
+            "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/example-cloudwatch-logs-role",
+            "CompletionDate": 1736443496.379,
+            "CompletionMessage": "The Import Job was stopped by the developer.",
+            "CreationDate": 1736443471.781,
+            "FailedUsers": 0,
+            "ImportedUsers": 0,
+            "JobId": "import-mAgUtd8PMm",
+            "JobName": "Customer import",
+            "PreSignedUrl": "https://aws-cognito-idp-user-import-pdx.s3.us-west-2.amazonaws.com/123456789012/us-west-2_EXAMPLE/import-mAgUtd8PMm?X-Amz-Security-Token=[token]&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241226T193341Z&X-Amz-SignedHeaders=host%3Bx-amz-server-side-encryption&X-Amz-Expires=899&X-Amz-Credential=[credential]&X-Amz-Signature=[signature]",
+            "SkippedUsers": 0,
+            "StartDate": 1736443494.154,
+            "Status": "Stopped",
+            "UserPoolId": "us-west-2_EXAMPLE"
+        }
+    }
+
+For more information, see `Importing users into a user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-using-import-tool.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/tag-resource.rst 2.31.35-1/awscli/examples/cognito-idp/tag-resource.rst
--- 2.23.6-1/awscli/examples/cognito-idp/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/tag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To tag a user pool**
+
+The following ``tag-resource`` example applies ``administrator`` and ``department`` tags to the requested user pool. ::
+
+    aws cognito-idp tag-resource \
+        --resource-arn arn:aws:cognito-idp:us-west-2:123456789012:userpool/us-west-2_EXAMPLE \
+        --tags administrator=Jie,tenant=ExampleCorp
+
+This command produces no output.
+
+For more information, see `Tagging Amazon Cognito resources <https://docs.aws.amazon.com/cognito/latest/developerguide/tagging.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/untag-resource.rst 2.31.35-1/awscli/examples/cognito-idp/untag-resource.rst
--- 2.23.6-1/awscli/examples/cognito-idp/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/untag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To remove tags from a user pool**
+
+The following ``untag-resource`` example removes ``administrator`` and ``department`` tags from the requested user pool. ::
+
+    aws cognito-idp untag-resource \
+        --resource-arn arn:aws:cognito-idp:us-west-2:767671399759:userpool/us-west-2_l5cxwdm2K \
+        --tag-keys administrator tenant
+
+This command produces no output.
+
+For more information, see `Tagging Amazon Cognito resources <https://docs.aws.amazon.com/cognito/latest/developerguide/tagging.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/update-identity-provider.rst 2.31.35-1/awscli/examples/cognito-idp/update-identity-provider.rst
--- 2.23.6-1/awscli/examples/cognito-idp/update-identity-provider.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/update-identity-provider.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,71 @@
+**To update a user pool identity provider**
+
+The following ``update-identity-provider`` example updates the OIDC provider "MyOIDCIdP" in the requested user pool. ::
+
+    aws cognito-idp update-identity-provider \
+        --cli-input-json file://update-identity-provider.json
+
+Contents of ``update-identity-provider.json``::
+
+    {
+       "AttributeMapping": {
+                "email": "idp_email",
+                "email_verified": "idp_email_verified",
+                "username": "sub"
+        },
+        "CreationDate": 1.701129701653E9,
+        "IdpIdentifiers": [
+            "corp",
+            "dev"
+        ],
+        "LastModifiedDate": 1.701129701653E9,
+        "ProviderDetails": {
+            "attributes_request_method": "GET",
+            "attributes_url": "https://example.com/userInfo",
+            "attributes_url_add_attributes": "false",
+            "authorize_scopes": "openid profile",
+            "authorize_url": "https://example.com/authorize",
+            "client_id": "idpexampleclient123",
+            "client_secret": "idpexamplesecret456",
+            "jwks_uri": "https://example.com/.well-known/jwks.json",
+            "oidc_issuer": "https://example.com",
+            "token_url": "https://example.com/token"
+        },
+        "ProviderName": "MyOIDCIdP",
+        "UserPoolId": "us-west-2_EXAMPLE"
+    }
+
+Output::
+
+    {
+        "IdentityProvider": {
+            "AttributeMapping": {
+                "email": "idp_email",
+                "email_verified": "idp_email_verified",
+                "username": "sub"
+            },
+            "CreationDate": 1701129701.653,
+            "IdpIdentifiers": [
+                "corp",
+                "dev"
+            ],
+            "LastModifiedDate": 1736444278.211,
+            "ProviderDetails": {
+                "attributes_request_method": "GET",
+                "attributes_url": "https://example.com/userInfo",
+                "attributes_url_add_attributes": "false",
+                "authorize_scopes": "openid profile",
+                "authorize_url": "https://example.com/authorize",
+                "client_id": "idpexampleclient123",
+                "client_secret": "idpexamplesecret456",
+                "jwks_uri": "https://example.com/.well-known/jwks.json",
+                "oidc_issuer": "https://example.com",
+                "token_url": "https://example.com/token"
+            },
+            "ProviderName": "MyOIDCIdP",
+            "ProviderType": "OIDC",
+            "UserPoolId": "us-west-2_EXAMPLE"
+        }
+    }
+
+For more information, see `Configuring a domain <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-assign-domain.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/update-managed-login-branding.rst 2.31.35-1/awscli/examples/cognito-idp/update-managed-login-branding.rst
--- 2.23.6-1/awscli/examples/cognito-idp/update-managed-login-branding.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/update-managed-login-branding.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,949 @@
+**To update a managed login branding style**
+
+The following ``update-managed-login-branding`` example updates the requested app client branding style. ::
+
+    aws cognito-idp update-managed-login-branding \
+        --cli-input-json file://update-managed-login-branding.json
+
+Contents of ``update-managed-login-branding.json``::
+
+    {
+        "Assets": [
+            {
+                "Bytes": "PHN2ZyB3aWR0aD0iMjAwMDAiIGhlaWdodD0iNDAwIiB2aWV3Qm94PSIwIDAgMjAwMDAgNDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTcyNTlfMjM2Njc0KSI+CjxyZWN0IHdpZHRoPSIyMDAwMCIgaGVpZ2h0PSI0MDAiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNzI1OV8yMzY2NzQpIi8+CjxwYXRoIGQ9Ik0wIDBIMjAwMDBWNDAwSDBWMFoiIGZpbGw9IiMxMjIwMzciIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNzI1OV8yMzY2NzQiIHgxPSItODk0LjI0OSIgeTE9IjE5OS45MzEiIHgyPSIxODAzNC41IiB5Mj0iLTU4OTkuNTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0JGODBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjhGQUIiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNzI1OV8yMzY2NzQiPgo8cmVjdCB3aWR0aD0iMjAwMDAiIGhlaWdodD0iNDAwIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
+                "Category": "PAGE_FOOTER_BACKGROUND",
+                "ColorMode": "DARK",
+                "Extension": "SVG"
+            }
+        ],
+        "ManagedLoginBrandingId": "63f30090-6b1f-4278-b885-2bbb81f8e545",
+        "Settings": {
+            "categories": {
+                "auth": {
+                    "authMethodOrder": [
+                        [
+                            {
+                                "display": "BUTTON",
+                                "type": "FEDERATED"
+                            },
+                            {
+                                "display": "INPUT",
+                                "type": "USERNAME_PASSWORD"
+                            }
+                        ]
+                    ],
+                    "federation": {
+                        "interfaceStyle": "BUTTON_LIST",
+                        "order": [
+                        ]
+                    }
+                },
+                "form": {
+                    "displayGraphics": true,
+                    "instructions": {
+                        "enabled": false
+                    },
+                    "languageSelector": {
+                        "enabled": false
+                    },
+                    "location": {
+                        "horizontal": "CENTER",
+                        "vertical": "CENTER"
+                    },
+                    "sessionTimerDisplay": "NONE"
+                },
+                "global": {
+                    "colorSchemeMode": "LIGHT",
+                    "pageFooter": {
+                        "enabled": false
+                    },
+                    "pageHeader": {
+                        "enabled": false
+                    },
+                    "spacingDensity": "REGULAR"
+                },
+                "signUp": {
+                    "acceptanceElements": [
+                        {
+                            "enforcement": "NONE",
+                            "textKey": "en"
+                        }
+                    ]
+                }
+            },
+            "componentClasses": {
+                "buttons": {
+                    "borderRadius": 8.0
+                },
+                "divider": {
+                    "darkMode": {
+                        "borderColor": "232b37ff"
+                    },
+                    "lightMode": {
+                        "borderColor": "ebebf0ff"
+                    }
+                },
+                "dropDown": {
+                    "borderRadius": 8.0,
+                    "darkMode": {
+                        "defaults": {
+                            "itemBackgroundColor": "192534ff"
+                        },
+                        "hover": {
+                            "itemBackgroundColor": "081120ff",
+                            "itemBorderColor": "5f6b7aff",
+                            "itemTextColor": "e9ebedff"
+                        },
+                        "match": {
+                            "itemBackgroundColor": "d1d5dbff",
+                            "itemTextColor": "89bdeeff"
+                        }
+                    },
+                    "lightMode": {
+                        "defaults": {
+                            "itemBackgroundColor": "ffffffff"
+                        },
+                        "hover": {
+                            "itemBackgroundColor": "f4f4f4ff",
+                            "itemBorderColor": "7d8998ff",
+                            "itemTextColor": "000716ff"
+                        },
+                        "match": {
+                            "itemBackgroundColor": "414d5cff",
+                            "itemTextColor": "0972d3ff"
+                        }
+                    }
+                },
+                "focusState": {
+                    "darkMode": {
+                        "borderColor": "539fe5ff"
+                    },
+                    "lightMode": {
+                        "borderColor": "0972d3ff"
+                    }
+                },
+                "idpButtons": {
+                    "icons": {
+                        "enabled": true
+                    }
+                },
+                "input": {
+                    "borderRadius": 8.0,
+                    "darkMode": {
+                        "defaults": {
+                            "backgroundColor": "0f1b2aff",
+                            "borderColor": "5f6b7aff"
+                        },
+                        "placeholderColor": "8d99a8ff"
+                    },
+                    "lightMode": {
+                        "defaults": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "7d8998ff"
+                        },
+                        "placeholderColor": "5f6b7aff"
+                    }
+                },
+                "inputDescription": {
+                    "darkMode": {
+                        "textColor": "8d99a8ff"
+                    },
+                    "lightMode": {
+                        "textColor": "5f6b7aff"
+                    }
+                },
+                "inputLabel": {
+                    "darkMode": {
+                        "textColor": "d1d5dbff"
+                    },
+                    "lightMode": {
+                        "textColor": "000716ff"
+                    }
+                },
+                "link": {
+                    "darkMode": {
+                        "defaults": {
+                            "textColor": "539fe5ff"
+                        },
+                        "hover": {
+                            "textColor": "89bdeeff"
+                        }
+                    },
+                    "lightMode": {
+                        "defaults": {
+                            "textColor": "0972d3ff"
+                        },
+                        "hover": {
+                            "textColor": "033160ff"
+                        }
+                    }
+                },
+                "optionControls": {
+                    "darkMode": {
+                        "defaults": {
+                            "backgroundColor": "0f1b2aff",
+                            "borderColor": "7d8998ff"
+                        },
+                        "selected": {
+                            "backgroundColor": "539fe5ff",
+                            "foregroundColor": "000716ff"
+                        }
+                    },
+                    "lightMode": {
+                        "defaults": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "7d8998ff"
+                        },
+                        "selected": {
+                            "backgroundColor": "0972d3ff",
+                            "foregroundColor": "ffffffff"
+                        }
+                    }
+                },
+                "statusIndicator": {
+                    "darkMode": {
+                        "error": {
+                            "backgroundColor": "1a0000ff",
+                            "borderColor": "eb6f6fff",
+                            "indicatorColor": "eb6f6fff"
+                        },
+                        "pending": {
+                            "indicatorColor": "AAAAAAAA"
+                        },
+                        "success": {
+                            "backgroundColor": "001a02ff",
+                            "borderColor": "29ad32ff",
+                            "indicatorColor": "29ad32ff"
+                        },
+                        "warning": {
+                            "backgroundColor": "1d1906ff",
+                            "borderColor": "e0ca57ff",
+                            "indicatorColor": "e0ca57ff"
+                        }
+                    },
+                    "lightMode": {
+                        "error": {
+                            "backgroundColor": "fff7f7ff",
+                            "borderColor": "d91515ff",
+                            "indicatorColor": "d91515ff"
+                        },
+                        "pending": {
+                            "indicatorColor": "AAAAAAAA"
+                        },
+                        "success": {
+                            "backgroundColor": "f2fcf3ff",
+                            "borderColor": "037f0cff",
+                            "indicatorColor": "037f0cff"
+                        },
+                        "warning": {
+                            "backgroundColor": "fffce9ff",
+                            "borderColor": "8d6605ff",
+                            "indicatorColor": "8d6605ff"
+                        }
+                    }
+                }
+            },
+            "components": {
+                "alert": {
+                    "borderRadius": 12.0,
+                    "darkMode": {
+                        "error": {
+                            "backgroundColor": "1a0000ff",
+                            "borderColor": "eb6f6fff"
+                        }
+                    },
+                    "lightMode": {
+                        "error": {
+                            "backgroundColor": "fff7f7ff",
+                            "borderColor": "d91515ff"
+                        }
+                    }
+                },
+                "favicon": {
+                    "enabledTypes": [
+                        "ICO",
+                        "SVG"
+                    ]
+                },
+                "form": {
+                    "backgroundImage": {
+                        "enabled": false
+                    },
+                    "borderRadius": 8.0,
+                    "darkMode": {
+                        "backgroundColor": "0f1b2aff",
+                        "borderColor": "424650ff"
+                    },
+                    "lightMode": {
+                        "backgroundColor": "ffffffff",
+                        "borderColor": "c6c6cdff"
+                    },
+                    "logo": {
+                        "enabled": false,
+                        "formInclusion": "IN",
+                        "location": "CENTER",
+                        "position": "TOP"
+                    }
+                },
+                "idpButton": {
+                    "custom": {
+                    },
+                    "standard": {
+                        "darkMode": {
+                            "active": {
+                                "backgroundColor": "354150ff",
+                                "borderColor": "89bdeeff",
+                                "textColor": "89bdeeff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "0f1b2aff",
+                                "borderColor": "c6c6cdff",
+                                "textColor": "c6c6cdff"
+                            },
+                            "hover": {
+                                "backgroundColor": "192534ff",
+                                "borderColor": "89bdeeff",
+                                "textColor": "89bdeeff"
+                            }
+                        },
+                        "lightMode": {
+                            "active": {
+                                "backgroundColor": "d3e7f9ff",
+                                "borderColor": "033160ff",
+                                "textColor": "033160ff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "424650ff",
+                                "textColor": "424650ff"
+                            },
+                            "hover": {
+                                "backgroundColor": "f2f8fdff",
+                                "borderColor": "033160ff",
+                                "textColor": "033160ff"
+                            }
+                        }
+                    }
+                },
+                "pageBackground": {
+                    "darkMode": {
+                        "color": "0f1b2aff"
+                    },
+                    "image": {
+                        "enabled": true
+                    },
+                    "lightMode": {
+                        "color": "ffffffff"
+                    }
+                },
+                "pageFooter": {
+                    "backgroundImage": {
+                        "enabled": false
+                    },
+                    "darkMode": {
+                        "background": {
+                            "color": "0f141aff"
+                        },
+                        "borderColor": "424650ff"
+                    },
+                    "lightMode": {
+                        "background": {
+                            "color": "fafafaff"
+                        },
+                        "borderColor": "d5dbdbff"
+                    },
+                    "logo": {
+                        "enabled": false,
+                        "location": "START"
+                    }
+                },
+                "pageHeader": {
+                    "backgroundImage": {
+                        "enabled": false
+                    },
+                    "darkMode": {
+                        "background": {
+                            "color": "0f141aff"
+                        },
+                        "borderColor": "424650ff"
+                    },
+                    "lightMode": {
+                        "background": {
+                            "color": "fafafaff"
+                        },
+                        "borderColor": "d5dbdbff"
+                    },
+                    "logo": {
+                        "enabled": false,
+                        "location": "START"
+                    }
+                },
+                "pageText": {
+                    "darkMode": {
+                        "bodyColor": "b6bec9ff",
+                        "descriptionColor": "b6bec9ff",
+                        "headingColor": "d1d5dbff"
+                    },
+                    "lightMode": {
+                        "bodyColor": "414d5cff",
+                        "descriptionColor": "414d5cff",
+                        "headingColor": "000716ff"
+                    }
+                },
+                "phoneNumberSelector": {
+                    "displayType": "TEXT"
+                },
+                "primaryButton": {
+                    "darkMode": {
+                        "active": {
+                            "backgroundColor": "539fe5ff",
+                            "textColor": "000716ff"
+                        },
+                        "defaults": {
+                            "backgroundColor": "539fe5ff",
+                            "textColor": "000716ff"
+                        },
+                        "disabled": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "ffffffff"
+                        },
+                        "hover": {
+                            "backgroundColor": "89bdeeff",
+                            "textColor": "000716ff"
+                        }
+                    },
+                    "lightMode": {
+                        "active": {
+                            "backgroundColor": "033160ff",
+                            "textColor": "ffffffff"
+                        },
+                        "defaults": {
+                            "backgroundColor": "0972d3ff",
+                            "textColor": "ffffffff"
+                        },
+                        "disabled": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "ffffffff"
+                        },
+                        "hover": {
+                            "backgroundColor": "033160ff",
+                            "textColor": "ffffffff"
+                        }
+                    }
+                },
+                "secondaryButton": {
+                    "darkMode": {
+                        "active": {
+                            "backgroundColor": "354150ff",
+                            "borderColor": "89bdeeff",
+                            "textColor": "89bdeeff"
+                        },
+                        "defaults": {
+                            "backgroundColor": "0f1b2aff",
+                            "borderColor": "539fe5ff",
+                            "textColor": "539fe5ff"
+                        },
+                        "hover": {
+                            "backgroundColor": "192534ff",
+                            "borderColor": "89bdeeff",
+                            "textColor": "89bdeeff"
+                        }
+                    },
+                    "lightMode": {
+                        "active": {
+                            "backgroundColor": "d3e7f9ff",
+                            "borderColor": "033160ff",
+                            "textColor": "033160ff"
+                        },
+                        "defaults": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "0972d3ff",
+                            "textColor": "0972d3ff"
+                        },
+                        "hover": {
+                            "backgroundColor": "f2f8fdff",
+                            "borderColor": "033160ff",
+                            "textColor": "033160ff"
+                        }
+                    }
+                }
+            }
+        },
+        "UseCognitoProvidedValues": false,
+        "UserPoolId": "ca-central-1_EXAMPLE"
+    }
+
+Output::
+
+    {
+        "ManagedLoginBranding": {
+            "Assets": [
+                {
+                    "Bytes": "PHN2ZyB3aWR0aD0iMjAwMDAiIGhlaWdodD0iNDAwIiB2aWV3Qm94PSIwIDAgMjAwMDAgNDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTcyNTlfMjM2Njc0KSI+CjxyZWN0IHdpZHRoPSIyMDAwMCIgaGVpZ2h0PSI0MDAiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNzI1OV8yMzY2NzQpIi8+CjxwYXRoIGQ9Ik0wIDBIMjAwMDBWNDAwSDBWMFoiIGZpbGw9IiMxMjIwMzciIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNzI1OV8yMzY2NzQiIHgxPSItODk0LjI0OSIgeTE9IjE5OS45MzEiIHgyPSIxODAzNC41IiB5Mj0iLTU4OTkuNTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0JGODBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjhGQUIiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNzI1OV8yMzY2NzQiPgo8cmVjdCB3aWR0aD0iMjAwMDAiIGhlaWdodD0iNDAwIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
+                    "Category": "PAGE_FOOTER_BACKGROUND",
+                    "ColorMode": "DARK",
+                    "Extension": "SVG"
+                }
+            ],
+            "CreationDate": 1732138490.642,
+            "LastModifiedDate": 1732140420.301,
+            "ManagedLoginBrandingId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
+            "Settings": {
+                "categories": {
+                    "auth": {
+                        "authMethodOrder": [
+                            [
+                                {
+                                    "display": "BUTTON",
+                                    "type": "FEDERATED"
+                                },
+                                {
+                                    "display": "INPUT",
+                                    "type": "USERNAME_PASSWORD"
+                                }
+                            ]
+                        ],
+                        "federation": {
+                            "interfaceStyle": "BUTTON_LIST",
+                            "order": [
+                            ]
+                        }
+                    },
+                    "form": {
+                        "displayGraphics": true,
+                        "instructions": {
+                            "enabled": false
+                        },
+                        "languageSelector": {
+                            "enabled": false
+                        },
+                        "location": {
+                            "horizontal": "CENTER",
+                            "vertical": "CENTER"
+                        },
+                        "sessionTimerDisplay": "NONE"
+                    },
+                    "global": {
+                        "colorSchemeMode": "LIGHT",
+                        "pageFooter": {
+                            "enabled": false
+                        },
+                        "pageHeader": {
+                            "enabled": false
+                        },
+                        "spacingDensity": "REGULAR"
+                    },
+                    "signUp": {
+                        "acceptanceElements": [
+                            {
+                                "enforcement": "NONE",
+                                "textKey": "en"
+                            }
+                        ]
+                    }
+                },
+                "componentClasses": {
+                    "buttons": {
+                        "borderRadius": 8.0
+                    },
+                    "divider": {
+                        "darkMode": {
+                            "borderColor": "232b37ff"
+                        },
+                        "lightMode": {
+                            "borderColor": "ebebf0ff"
+                        }
+                    },
+                    "dropDown": {
+                        "borderRadius": 8.0,
+                        "darkMode": {
+                            "defaults": {
+                                "itemBackgroundColor": "192534ff"
+                            },
+                            "hover": {
+                                "itemBackgroundColor": "081120ff",
+                                "itemBorderColor": "5f6b7aff",
+                                "itemTextColor": "e9ebedff"
+                            },
+                            "match": {
+                                "itemBackgroundColor": "d1d5dbff",
+                                "itemTextColor": "89bdeeff"
+                            }
+                        },
+                        "lightMode": {
+                            "defaults": {
+                                "itemBackgroundColor": "ffffffff"
+                            },
+                            "hover": {
+                                "itemBackgroundColor": "f4f4f4ff",
+                                "itemBorderColor": "7d8998ff",
+                                "itemTextColor": "000716ff"
+                            },
+                            "match": {
+                                "itemBackgroundColor": "414d5cff",
+                                "itemTextColor": "0972d3ff"
+                            }
+                        }
+                    },
+                    "focusState": {
+                        "darkMode": {
+                            "borderColor": "539fe5ff"
+                        },
+                        "lightMode": {
+                            "borderColor": "0972d3ff"
+                        }
+                    },
+                    "idpButtons": {
+                        "icons": {
+                            "enabled": true
+                        }
+                    },
+                    "input": {
+                        "borderRadius": 8.0,
+                        "darkMode": {
+                            "defaults": {
+                                "backgroundColor": "0f1b2aff",
+                                "borderColor": "5f6b7aff"
+                            },
+                            "placeholderColor": "8d99a8ff"
+                        },
+                        "lightMode": {
+                            "defaults": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "7d8998ff"
+                            },
+                            "placeholderColor": "5f6b7aff"
+                        }
+                    },
+                    "inputDescription": {
+                        "darkMode": {
+                            "textColor": "8d99a8ff"
+                        },
+                        "lightMode": {
+                            "textColor": "5f6b7aff"
+                        }
+                    },
+                    "inputLabel": {
+                        "darkMode": {
+                            "textColor": "d1d5dbff"
+                        },
+                        "lightMode": {
+                            "textColor": "000716ff"
+                        }
+                    },
+                    "link": {
+                        "darkMode": {
+                            "defaults": {
+                                "textColor": "539fe5ff"
+                            },
+                            "hover": {
+                                "textColor": "89bdeeff"
+                            }
+                        },
+                        "lightMode": {
+                            "defaults": {
+                                "textColor": "0972d3ff"
+                            },
+                            "hover": {
+                                "textColor": "033160ff"
+                            }
+                        }
+                    },
+                    "optionControls": {
+                        "darkMode": {
+                            "defaults": {
+                                "backgroundColor": "0f1b2aff",
+                                "borderColor": "7d8998ff"
+                            },
+                            "selected": {
+                                "backgroundColor": "539fe5ff",
+                                "foregroundColor": "000716ff"
+                            }
+                        },
+                        "lightMode": {
+                            "defaults": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "7d8998ff"
+                            },
+                            "selected": {
+                                "backgroundColor": "0972d3ff",
+                                "foregroundColor": "ffffffff"
+                            }
+                        }
+                    },
+                    "statusIndicator": {
+                        "darkMode": {
+                            "error": {
+                                "backgroundColor": "1a0000ff",
+                                "borderColor": "eb6f6fff",
+                                "indicatorColor": "eb6f6fff"
+                            },
+                            "pending": {
+                                "indicatorColor": "AAAAAAAA"
+                            },
+                            "success": {
+                                "backgroundColor": "001a02ff",
+                                "borderColor": "29ad32ff",
+                                "indicatorColor": "29ad32ff"
+                            },
+                            "warning": {
+                                "backgroundColor": "1d1906ff",
+                                "borderColor": "e0ca57ff",
+                                "indicatorColor": "e0ca57ff"
+                            }
+                        },
+                        "lightMode": {
+                            "error": {
+                                "backgroundColor": "fff7f7ff",
+                                "borderColor": "d91515ff",
+                                "indicatorColor": "d91515ff"
+                            },
+                            "pending": {
+                                "indicatorColor": "AAAAAAAA"
+                            },
+                            "success": {
+                                "backgroundColor": "f2fcf3ff",
+                                "borderColor": "037f0cff",
+                                "indicatorColor": "037f0cff"
+                            },
+                            "warning": {
+                                "backgroundColor": "fffce9ff",
+                                "borderColor": "8d6605ff",
+                                "indicatorColor": "8d6605ff"
+                            }
+                        }
+                    }
+                },
+                "components": {
+                    "alert": {
+                        "borderRadius": 12.0,
+                        "darkMode": {
+                            "error": {
+                                "backgroundColor": "1a0000ff",
+                                "borderColor": "eb6f6fff"
+                            }
+                        },
+                        "lightMode": {
+                            "error": {
+                                "backgroundColor": "fff7f7ff",
+                                "borderColor": "d91515ff"
+                            }
+                        }
+                    },
+                    "favicon": {
+                        "enabledTypes": [
+                            "ICO",
+                            "SVG"
+                        ]
+                    },
+                    "form": {
+                        "backgroundImage": {
+                            "enabled": false
+                        },
+                        "borderRadius": 8.0,
+                        "darkMode": {
+                            "backgroundColor": "0f1b2aff",
+                            "borderColor": "424650ff"
+                        },
+                        "lightMode": {
+                            "backgroundColor": "ffffffff",
+                            "borderColor": "c6c6cdff"
+                        },
+                        "logo": {
+                            "enabled": false,
+                            "formInclusion": "IN",
+                            "location": "CENTER",
+                            "position": "TOP"
+                        }
+                    },
+                    "idpButton": {
+                        "custom": {
+                        },
+                        "standard": {
+                            "darkMode": {
+                                "active": {
+                                    "backgroundColor": "354150ff",
+                                    "borderColor": "89bdeeff",
+                                    "textColor": "89bdeeff"
+                                },
+                                "defaults": {
+                                    "backgroundColor": "0f1b2aff",
+                                    "borderColor": "c6c6cdff",
+                                    "textColor": "c6c6cdff"
+                                },
+                                "hover": {
+                                    "backgroundColor": "192534ff",
+                                    "borderColor": "89bdeeff",
+                                    "textColor": "89bdeeff"
+                                }
+                            },
+                            "lightMode": {
+                                "active": {
+                                    "backgroundColor": "d3e7f9ff",
+                                    "borderColor": "033160ff",
+                                    "textColor": "033160ff"
+                                },
+                                "defaults": {
+                                    "backgroundColor": "ffffffff",
+                                    "borderColor": "424650ff",
+                                    "textColor": "424650ff"
+                                },
+                                "hover": {
+                                    "backgroundColor": "f2f8fdff",
+                                    "borderColor": "033160ff",
+                                    "textColor": "033160ff"
+                                }
+                            }
+                        }
+                    },
+                    "pageBackground": {
+                        "darkMode": {
+                            "color": "0f1b2aff"
+                        },
+                        "image": {
+                            "enabled": true
+                        },
+                        "lightMode": {
+                            "color": "ffffffff"
+                        }
+                    },
+                    "pageFooter": {
+                        "backgroundImage": {
+                            "enabled": false
+                        },
+                        "darkMode": {
+                            "background": {
+                                "color": "0f141aff"
+                            },
+                            "borderColor": "424650ff"
+                        },
+                        "lightMode": {
+                            "background": {
+                                "color": "fafafaff"
+                            },
+                            "borderColor": "d5dbdbff"
+                        },
+                        "logo": {
+                            "enabled": false,
+                            "location": "START"
+                        }
+                    },
+                    "pageHeader": {
+                        "backgroundImage": {
+                            "enabled": false
+                        },
+                        "darkMode": {
+                            "background": {
+                                "color": "0f141aff"
+                            },
+                            "borderColor": "424650ff"
+                        },
+                        "lightMode": {
+                            "background": {
+                                "color": "fafafaff"
+                            },
+                            "borderColor": "d5dbdbff"
+                        },
+                        "logo": {
+                            "enabled": false,
+                            "location": "START"
+                        }
+                    },
+                    "pageText": {
+                        "darkMode": {
+                            "bodyColor": "b6bec9ff",
+                            "descriptionColor": "b6bec9ff",
+                            "headingColor": "d1d5dbff"
+                        },
+                        "lightMode": {
+                            "bodyColor": "414d5cff",
+                            "descriptionColor": "414d5cff",
+                            "headingColor": "000716ff"
+                        }
+                    },
+                    "phoneNumberSelector": {
+                        "displayType": "TEXT"
+                    },
+                    "primaryButton": {
+                        "darkMode": {
+                            "active": {
+                                "backgroundColor": "539fe5ff",
+                                "textColor": "000716ff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "539fe5ff",
+                                "textColor": "000716ff"
+                            },
+                            "disabled": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "ffffffff"
+                            },
+                            "hover": {
+                                "backgroundColor": "89bdeeff",
+                                "textColor": "000716ff"
+                            }
+                        },
+                        "lightMode": {
+                            "active": {
+                                "backgroundColor": "033160ff",
+                                "textColor": "ffffffff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "0972d3ff",
+                                "textColor": "ffffffff"
+                            },
+                            "disabled": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "ffffffff"
+                            },
+                            "hover": {
+                                "backgroundColor": "033160ff",
+                                "textColor": "ffffffff"
+                            }
+                        }
+                    },
+                    "secondaryButton": {
+                        "darkMode": {
+                            "active": {
+                                "backgroundColor": "354150ff",
+                                "borderColor": "89bdeeff",
+                                "textColor": "89bdeeff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "0f1b2aff",
+                                "borderColor": "539fe5ff",
+                                "textColor": "539fe5ff"
+                            },
+                            "hover": {
+                                "backgroundColor": "192534ff",
+                                "borderColor": "89bdeeff",
+                                "textColor": "89bdeeff"
+                            }
+                        },
+                        "lightMode": {
+                            "active": {
+                                "backgroundColor": "d3e7f9ff",
+                                "borderColor": "033160ff",
+                                "textColor": "033160ff"
+                            },
+                            "defaults": {
+                                "backgroundColor": "ffffffff",
+                                "borderColor": "0972d3ff",
+                                "textColor": "0972d3ff"
+                            },
+                            "hover": {
+                                "backgroundColor": "f2f8fdff",
+                                "borderColor": "033160ff",
+                                "textColor": "033160ff"
+                            }
+                        }
+                    }
+                }
+            },
+            "UseCognitoProvidedValues": false,
+            "UserPoolId": "ca-central-1_EXAMPLE"
+        }
+    }
+
+For more information, see `Apply branding to managed login pages <https://docs.aws.amazon.com/cognito/latest/developerguide/managed-login-branding.html>`__ in the *Amazon Cognito Developer Guide*.
+ 
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/update-user-pool-client.rst 2.31.35-1/awscli/examples/cognito-idp/update-user-pool-client.rst
--- 2.23.6-1/awscli/examples/cognito-idp/update-user-pool-client.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/update-user-pool-client.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,121 @@
-**To update a user pool client**
-
-This example updates the name of a user pool client. It also adds a writeable attribute "nickname".
-
-Command::
-
-  aws cognito-idp update-user-pool-client --user-pool-id us-west-2_aaaaaaaaa --client-id 3n4b5urk1ft4fl3mg5e62d9ado --client-name "NewClientName" --write-attributes "nickname"
-
-Output::
-
-  {
-    "UserPoolClient": {
-        "UserPoolId": "us-west-2_aaaaaaaaa",
-        "ClientName": "NewClientName",
-        "ClientId": "3n4b5urk1ft4fl3mg5e62d9ado",
-        "LastModifiedDate": 1548802761.334,
-        "CreationDate": 1548178931.258,
-        "RefreshTokenValidity": 30,
-        "WriteAttributes": [
-            "nickname"
-        ],
-        "AllowedOAuthFlowsUserPoolClient": false
-    }
-  }
\ No newline at end of file
+**To update an app client**
+
+The following ``update-user-pool-client`` example updates the configuration of the requested app client. ::
+
+    aws cognito-idp update-user-pool-client \
+        --user-pool-id us-west-2_EXAMPLE \
+        --client-id 1example23456789 \
+        --client-name my-test-app \
+        --refresh-token-validity 30 \
+        --access-token-validity 60 \
+        --id-token-validity 60 \
+        --token-validity-units AccessToken=minutes,IdToken=minutes,RefreshToken=days \
+        --read-attributes "address" "birthdate" "email" "email_verified" "family_name" "gender" "locale" "middle_name" "name" "nickname" "phone_number" "phone_number_verified" "picture" "preferred_username" "profile" "updated_at" "website" "zoneinfo" \
+        --write-attributes "address" "birthdate" "email" "family_name" "gender" "locale" "middle_name" "name" "nickname" "phone_number" "picture" "preferred_username" "profile" "updated_at" "website" "zoneinfo" \
+        --explicit-auth-flows "ALLOW_ADMIN_USER_PASSWORD_AUTH" "ALLOW_CUSTOM_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" "ALLOW_USER_PASSWORD_AUTH" "ALLOW_USER_SRP_AUTH" \
+        --supported-identity-providers "MySAML" "COGNITO" "Google" \
+        --callback-urls "https://www.example.com" "https://app2.example.com" \
+        --logout-urls "https://auth.example.com/login?client_id=1example23456789&response_type=code&redirect_uri=https%3A%2F%2Fwww.example.com" "https://example.com/logout" \
+        --default-redirect-uri "https://www.example.com" \
+        --allowed-o-auth-flows "code" "implicit" \
+        --allowed-o-auth-scopes "openid" "profile" "aws.cognito.signin.user.admin" \
+        --allowed-o-auth-flows-user-pool-client \
+        --prevent-user-existence-errors ENABLED \
+        --enable-token-revocation \
+        --no-enable-propagate-additional-user-context-data \
+        --auth-session-validity 3
+
+Output::
+
+    {
+        "UserPoolClient": {
+            "UserPoolId": "us-west-2_EXAMPLE",
+            "ClientName": "my-test-app",
+            "ClientId": "1example23456789",
+            "LastModifiedDate": "2025-01-31T14:40:12.498000-08:00",
+            "CreationDate": "2023-09-13T16:26:34.408000-07:00",
+            "RefreshTokenValidity": 30,
+            "AccessTokenValidity": 60,
+            "IdTokenValidity": 60,
+            "TokenValidityUnits": {
+                "AccessToken": "minutes",
+                "IdToken": "minutes",
+                "RefreshToken": "days"
+            },
+            "ReadAttributes": [
+                "website",
+                "zoneinfo",
+                "address",
+                "birthdate",
+                "email_verified",
+                "gender",
+                "profile",
+                "phone_number_verified",
+                "preferred_username",
+                "locale",
+                "middle_name",
+                "picture",
+                "updated_at",
+                "name",
+                "nickname",
+                "phone_number",
+                "family_name",
+                "email"
+            ],
+            "WriteAttributes": [
+                "website",
+                "zoneinfo",
+                "address",
+                "birthdate",
+                "gender",
+                "profile",
+                "preferred_username",
+                "locale",
+                "middle_name",
+                "picture",
+                "updated_at",
+                "name",
+                "nickname",
+                "phone_number",
+                "family_name",
+                "email"
+            ],
+            "ExplicitAuthFlows": [
+                "ALLOW_CUSTOM_AUTH",
+                "ALLOW_USER_PASSWORD_AUTH",
+                "ALLOW_ADMIN_USER_PASSWORD_AUTH",
+                "ALLOW_USER_SRP_AUTH",
+                "ALLOW_REFRESH_TOKEN_AUTH"
+            ],
+            "SupportedIdentityProviders": [
+                "Google",
+                "COGNITO",
+                "MySAML"
+            ],
+            "CallbackURLs": [
+                "https://www.example.com",
+                "https://app2.example.com"
+            ],
+            "LogoutURLs": [
+                "https://example.com/logout",
+                "https://auth.example.com/login?client_id=1example23456789&response_type=code&redirect_uri=https%3A%2F%2Fwww.example.com"
+            ],
+            "DefaultRedirectURI": "https://www.example.com",
+            "AllowedOAuthFlows": [
+                "implicit",
+                "code"
+            ],
+            "AllowedOAuthScopes": [
+                "aws.cognito.signin.user.admin",
+                "openid",
+                "profile"
+            ],
+            "AllowedOAuthFlowsUserPoolClient": true,
+            "PreventUserExistenceErrors": "ENABLED",
+            "EnableTokenRevocation": true,
+            "EnablePropagateAdditionalUserContextData": false,
+            "AuthSessionValidity": 3
+        }
+    }
+
+For more information, see `Application-specific settings with app clients <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html>`__ in the *Amazon Cognito Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/update-user-pool-domain.rst 2.31.35-1/awscli/examples/cognito-idp/update-user-pool-domain.rst
--- 2.23.6-1/awscli/examples/cognito-idp/update-user-pool-domain.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/update-user-pool-domain.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To update a custom domain**
+
+The following ``update-user-pool-domain`` example configures the branding version and certificate for the custom domain the requested user pool. ::
+
+    aws cognito-idp update-user-pool-domain \
+        --user-pool-id ca-central-1_EXAMPLE \
+        --domain auth.example.com \
+        --managed-login-version 2 \
+        --custom-domain-config CertificateArn=arn:aws:acm:us-east-1:123456789012:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
+
+Output::
+
+    {
+        "CloudFrontDomain": "example.cloudfront.net",
+        "ManagedLoginVersion": 2
+    }
+
+For more information, see `Managed login <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-managed-login.html>`__ and `Configuring a domain <https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-assign-domain.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/verify-software-token.rst 2.31.35-1/awscli/examples/cognito-idp/verify-software-token.rst
--- 2.23.6-1/awscli/examples/cognito-idp/verify-software-token.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/verify-software-token.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To confirm registration of a TOTP authenticator**
+
+The following ``verify-software-token`` example completes TOTP registration for the current user. ::
+
+    aws cognito-idp verify-software-token \
+        --access-token eyJra456defEXAMPLE \
+        --user-code 123456
+
+Output::
+
+    {
+        "Status": "SUCCESS"
+    }
+
+For more information, see `Adding MFA to a user pool <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html>`__ in the *Amazon Cognito Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/cognito-idp/verify-user-attribute.rst 2.31.35-1/awscli/examples/cognito-idp/verify-user-attribute.rst
--- 2.23.6-1/awscli/examples/cognito-idp/verify-user-attribute.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/cognito-idp/verify-user-attribute.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To verify an attribute change**
+
+The following ``verify-user-attribute`` example verifies a change to the current user's email attribute. ::
+
+    aws cognito-idp verify-user-attribute \
+        --access-token eyJra456defEXAMPLE \
+        --attribute-name email \
+        --code 123456
+
+For more information, see `Configuring email or phone verification <https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html>`__ in the *Amazon Cognito Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/configure/mfa-login/_description.rst 2.31.35-1/awscli/examples/configure/mfa-login/_description.rst
--- 2.23.6-1/awscli/examples/configure/mfa-login/_description.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/configure/mfa-login/_description.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,3 @@
+This command gets temporary AWS security credentials for use with the AWS CLI and SDK, and places them in an AWS profile. It will use a long-lived IAM user access key, and the MFA code from either a virtual TOTP MFA device, or a hardware OTP authenticator to call STS get-session-token to get the temporary credentials. If no default profile exists, the command will prompt you to provide your AWS credentials first.
+
+Note: This command currently supports only hardware or software based one-time password (OTP) authenticators. Passkeys and U2F devices are not currently supported.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/configure/mfa-login/_examples.rst 2.31.35-1/awscli/examples/configure/mfa-login/_examples.rst
--- 2.23.6-1/awscli/examples/configure/mfa-login/_examples.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/configure/mfa-login/_examples.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+**To create a new profile with temporary MFA credentials**
+
+The following ``mfa-login`` command creates a new profile with temporary credentials obtained using MFA authentication. ::
+
+    aws configure mfa-login
+
+Output::
+
+    MFA serial number or ARN: arn:aws:iam::123456789012:mfa/user
+    MFA token code: 123456
+    Profile to update [session-12345]:
+    Temporary credentials written to profile 'session-12345'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile session-12345 when running AWS CLI commands
+
+**To update an existing profile with temporary MFA credentials**
+
+The following ``mfa-login`` command updates an existing profile with temporary credentials obtained using MFA authentication. ::
+
+    aws configure mfa-login --profile myprofile --update-profile mytemp
+
+Output::
+
+    MFA token code: 123456
+    Temporary credentials written to profile 'mytemp'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile mytemp when running AWS CLI commands
+
+**To create credentials when no default profile exists**
+
+If you don't have a default profile configured, the ``mfa-login`` command will prompt you for your AWS credentials first. ::
+
+    aws configure mfa-login
+
+Output::
+
+    No default profile found. Please provide your AWS credentials:
+    AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
+    AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
+    MFA serial number or ARN: arn:aws:iam::123456789012:mfa/user
+    MFA token code: 123456
+    Profile to update [session-12345]:
+    Temporary credentials written to profile 'session-12345'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile session-12345 when running AWS CLI commands
+
+**Note:** This command currently supports only hardware or software based one-time password (OTP) authenticators. Passkeys and U2F devices are not currently supported.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/configure/mfa-login.rst 2.31.35-1/awscli/examples/configure/mfa-login.rst
--- 2.23.6-1/awscli/examples/configure/mfa-login.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/configure/mfa-login.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,49 @@
+**To create a new profile with temporary MFA credentials**
+
+The following ``mfa-login`` command creates a new profile with temporary credentials obtained using MFA authentication. ::
+
+    aws configure mfa-login
+
+Output::
+
+    MFA serial number or ARN: arn:aws:iam::123456789012:mfa/MFADeviceName
+    MFA token code: 123456
+    Profile to update [session-MFADeviceName]:
+    Temporary credentials written to profile 'session-MFADeviceName'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile session-MFADeviceName when running AWS CLI commands
+
+**To create credentials when no default profile exists**
+
+If you don't have a default profile configured, the ``mfa-login`` command will prompt you for your AWS credentials first. ::
+
+    aws configure mfa-login
+
+Output::
+
+    No default profile found. Please provide your AWS credentials:
+    AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
+    AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
+    MFA serial number or ARN: arn:aws:iam::123456789012:mfa/MFADeviceName
+    MFA token code: 123456
+    Profile to update [session-MFADeviceName]:
+    Temporary credentials written to profile 'session-MFADeviceName'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile session-MFADeviceName when running AWS CLI commands
+
+**To update an existing profile with temporary MFA credentials**
+
+The following ``mfa-login`` command updates an existing profile with temporary credentials obtained using MFA authentication. ::
+
+    aws configure mfa-login --profile myprofile --update-profile mfaprofile
+
+Output::
+
+    MFA token code: 123456
+    Temporary credentials written to profile 'mfaprofile'
+    Credentials will expire at 2023-05-19 18:06:10 UTC
+    To use these credentials, specify --profile mfaprofile when running AWS CLI commands
+
+**Note:** This command currently supports only hardware or software based one-time password (OTP) authenticators. Passkeys and U2F devices are not currently supported with this command.
+
+For more information, see `Using Multi-Factor Authentication (MFA) in AWS <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html>`__ in the *AWS IAM User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ds-data/create-group.rst 2.31.35-1/awscli/examples/ds-data/create-group.rst
--- 2.23.6-1/awscli/examples/ds-data/create-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ds-data/create-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,15 +1,15 @@
-**To create a group for a directory**
+**To list the available widgets**
 
-The following ``create-group`` example creates a group in the specified directory. ::
+The following ``create-group`` example creates a group in a specified directory. ::
 
     aws ds-data create-group \
         --directory-id d-1234567890 \
-        --sam-account-name 'sales'
+        --sam-account-name "sales" 
 
 Output::
 
     {
-        "DirectoryId": "d-9067f3da7a",
+        "DirectoryId": "d-1234567890",
         "SAMAccountName": "sales",
         "SID": "S-1-2-34-5567891234-5678912345-67891234567-8912"
     }
diff -pruN 2.23.6-1/awscli/examples/dsql/generate-db-connect-auth-token.rst 2.31.35-1/awscli/examples/dsql/generate-db-connect-auth-token.rst
--- 2.23.6-1/awscli/examples/dsql/generate-db-connect-auth-token.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/dsql/generate-db-connect-auth-token.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,11 +3,11 @@
 The following ``generate-db-connect-auth-token`` example generates IAM authentication token to connect to a database. ::
 
     aws dsql generate-db-connect-auth-token \
-        --hostname test.us-east-1.prod.sql.dsql.aws.dev \
+        --hostname abc0def1baz2quux3quuux4.dsql.us-east-1.on.aws \
         --region us-east-1 \
         --expires-in 3600
 
 Output::
 
-    'test.us-east-1.prod.sql.dsql.aws.dev/?Action=DbConnect&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request&X-Amz-Date=20241107T173933Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=b53dae15763139d6a5af5e318b117ff6e66c5ee859b14d44697d159cbe996077'
+    'abc0def1baz2quux3quuux4.dsql.us-east-1.on.aws/?Action=DbConnect&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request&X-Amz-Date=20241107T173933Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=b53dae15763139d6a5af5e318b117ff6e66c5ee859b14d44697d159cbe996077'
 
diff -pruN 2.23.6-1/awscli/examples/ec2/allocate-address.rst 2.31.35-1/awscli/examples/ec2/allocate-address.rst
--- 2.23.6-1/awscli/examples/ec2/allocate-address.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/allocate-address.rst	2025-11-12 19:17:29.000000000 +0000
@@ -53,4 +53,25 @@ Output::
         "NetworkBorderGroup": "us-west-2",
     }
 
-For more information, see `Elastic IP addresses <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html>`__ in the *Amazon EC2 User Guide*.
\ No newline at end of file
+For more information, see `Elastic IP addresses <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html>`__ in the *Amazon EC2 User Guide*.
+
+**Example 4: To allocate an Elastic IP address from an IPAM pool**
+
+The following ``allocate-address`` example allocates a specific /32 Elastic IP address from an Amazon VPC IP Address Manager (IPAM) pool. ::
+
+    aws ec2 allocate-address \
+        --region us-east-1 \
+        --ipam-pool-id ipam-pool-1234567890abcdef0 \
+        --address 192.0.2.0
+
+Output::
+
+    {                                                    
+        "PublicIp": "192.0.2.0",                        
+        "AllocationId": "eipalloc-abcdef01234567890",    
+        "PublicIpv4Pool": "ipam-pool-1234567890abcdef0", 
+        "NetworkBorderGroup": "us-east-1",               
+        "Domain": "vpc"                                  
+    }                                                    
+
+For more information, see `Allocate sequential Elastic IP addresses from an IPAM pool <https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-eip-pool.html>`__ in the *Amazon VPC IPAM User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/associate-ipam-resource-discovery.rst 2.31.35-1/awscli/examples/ec2/associate-ipam-resource-discovery.rst
--- 2.23.6-1/awscli/examples/ec2/associate-ipam-resource-discovery.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/associate-ipam-resource-discovery.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ In this example, you are an IPAM delegat
 
 Note
 
-* To complete this request, you'll need the resource discovery ID which you can get with `describe-ipam-resource-discoveries <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__ and the IPAM ID which you can get with `describe-ipams <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipams.html>`__.
+* To complete this request, you'll need the resource discovery ID which you can get with `describe-ipam-resource-discoveries <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__ and the IPAM ID which you can get with `describe-ipams <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipams.html>`__.
 * The resource discovery that you are associating must have first been shared with your account using AWS RAM.
 * The ``--region`` you enter must match the home Region of the IPAM you are associating it with.
 
diff -pruN 2.23.6-1/awscli/examples/ec2/associate-security-group-vpc.rst 2.31.35-1/awscli/examples/ec2/associate-security-group-vpc.rst
--- 2.23.6-1/awscli/examples/ec2/associate-security-group-vpc.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/associate-security-group-vpc.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To associate a security group with another VPC**
+
+The following ``associate-security-group-vpc`` example associates the specified security group with the specified VPC. ::
+
+    aws ec2 associate-security-group-vpc \
+        --group-id sg-04dbb43907d3f8a78 \
+        --vpc-id vpc-0bf4c2739bc05a694
+
+Output::
+
+    {
+        "State": "associating"
+    }
+
+For more information, see `Associate security groups with multiple VPCs <https://docs.aws.amazon.com/vpc/latest/userguide/security-group-assoc.html>`__ in the *Amazon VPC User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/create-ipam-resource-discovery.rst 2.31.35-1/awscli/examples/ec2/create-ipam-resource-discovery.rst
--- 2.23.6-1/awscli/examples/ec2/create-ipam-resource-discovery.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/create-ipam-resource-discovery.rst	2025-11-12 19:17:29.000000000 +0000
@@ -43,4 +43,4 @@ Output::
             ]
     }
 
-Once you create a resource discovery, you may want to share it with another IPAM delegated admin, which you can do with `create-resource-share <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-resource-share.html>`__. For more information, see `Integrate IPAM with accounts outside of your organization <https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org.html>`__ in the *Amazon VPC IPAM User Guide*.
\ No newline at end of file
+Once you create a resource discovery, you may want to share it with another IPAM delegated admin, which you can do with `create-resource-share <https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html>`__. For more information, see `Integrate IPAM with accounts outside of your organization <https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org.html>`__ in the *Amazon VPC IPAM User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ec2/create-spot-datafeed-subscription.rst 2.31.35-1/awscli/examples/ec2/create-spot-datafeed-subscription.rst
--- 2.23.6-1/awscli/examples/ec2/create-spot-datafeed-subscription.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/create-spot-datafeed-subscription.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,24 @@
-**To create a Spot Instance data feed**
-
-The following ``create-spot-datafeed-subscription`` example creates a Spot Instance data feed. ::
-
-    aws ec2 create-spot-datafeed-subscription \
-        --bucket my-bucket \
-        --prefix spot-data-feed
-
-Output::
-
-    {
-        "SpotDatafeedSubscription": {
-            "Bucket": "my-bucket",
-            "OwnerId": "123456789012",
-            "Prefix": "spot-data-feed",
-            "State": "Active"
-        }
-    }
-
-The data feed is stored in the Amazon S3 bucket that you specified. The file names for this data feed have the following format. ::
-
-    my-bucket.s3.amazonaws.com/spot-data-feed/123456789012.YYYY-MM-DD-HH.n.abcd1234.gz
-
-For more information, see `Spot Instance data feed <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html>`__ in the *Amazon EC2 User Guide*.
+**To create a Spot Instance data feed**
+
+The following ``create-spot-datafeed-subscription`` example creates a Spot Instance data feed. ::
+
+    aws ec2 create-spot-datafeed-subscription \
+        --bucket amzn-s3-demo-bucket \
+        --prefix spot-data-feed
+
+Output::
+
+    {
+        "SpotDatafeedSubscription": {
+            "Bucket": "amzn-s3-demo-bucket",
+            "OwnerId": "123456789012",
+            "Prefix": "spot-data-feed",
+            "State": "Active"
+        }
+    }
+
+The data feed is stored in the Amazon S3 bucket that you specified. The file names for this data feed have the following format. ::
+
+    amzn-s3-demo-bucket.s3.amazonaws.com/spot-data-feed/123456789012.YYYY-MM-DD-HH.n.abcd1234.gz
+
+For more information, see `Spot Instance data feed <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html>`__ in the *Amazon Elastic Compute Cloud User Guide for Linux Instances*.
diff -pruN 2.23.6-1/awscli/examples/ec2/create-vpc-endpoint.rst 2.31.35-1/awscli/examples/ec2/create-vpc-endpoint.rst
--- 2.23.6-1/awscli/examples/ec2/create-vpc-endpoint.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/create-vpc-endpoint.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,118 +1,196 @@
-**Example 1: To create a gateway endpoint**
-
-The following ``create-vpc-endpoint`` example creates a gateway VPC endpoint between VPC ``vpc-1a2b3c4d`` and Amazon S3 in the ``us-east-1`` region, and associates route table ``rtb-11aa22bb`` with the endpoint. ::
-
-    aws ec2 create-vpc-endpoint \
-        --vpc-id vpc-1a2b3c4d \
-        --service-name com.amazonaws.us-east-1.s3 \
-        --route-table-ids rtb-11aa22bb
-
-Output::
-
-    {
-        "VpcEndpoint": {
-            "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":\"\*\",\"Action\":\"\*\",\"Resource\":\"\*\"}]}",
-            "VpcId": "vpc-1a2b3c4d",
-            "State": "available",
-            "ServiceName": "com.amazonaws.us-east-1.s3",
-            "RouteTableIds": [
-                "rtb-11aa22bb"
-            ],
-            "VpcEndpointId": "vpc-1a2b3c4d",
-            "CreationTimestamp": "2015-05-15T09:40:50Z"
-        }
-    }
-
-For more information, see `Create a gateway endpoint <https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3>`__ in the *AWS PrivateLink User Guide*.
-
-**Example 2: To create an interface endpoint**
-
-The following ``create-vpc-endpoint`` example creates an interface VPC endpoint between VPC ``vpc-1a2b3c4d`` and Amazon S3 in the ``us-east-1`` region. The command creates the endpoint in subnet ``subnet-1a2b3c4d``, associates it with security group ``sg-1a2b3c4d``, and adds a tag with a key of "Service" and a Value of "S3". ::
-
-    aws ec2 create-vpc-endpoint \
-        --vpc-id vpc-1a2b3c4d \
-        --vpc-endpoint-type Interface \
-        --service-name com.amazonaws.us-east-1.s3 \
-        --subnet-ids subnet-7b16de0c \
-        --security-group-id sg-1a2b3c4d \
-        --tag-specifications ResourceType=vpc-endpoint,Tags=[{Key=service,Value=S3}]
-
-Output::
-
-    {
-        "VpcEndpoint": {
-            "VpcEndpointId": "vpce-1a2b3c4d5e6f1a2b3",
-            "VpcEndpointType": "Interface",
-            "VpcId": "vpc-1a2b3c4d",
-            "ServiceName": "com.amazonaws.us-east-1.s3",
-            "State": "pending",
-            "RouteTableIds": [],
-            "SubnetIds": [
-                "subnet-1a2b3c4d"
-            ],
-            "Groups": [
-                {
-                    "GroupId": "sg-1a2b3c4d",
-                    "GroupName": "default"
-                }
-            ],
-            "PrivateDnsEnabled": false,
-            "RequesterManaged": false,
-            "NetworkInterfaceIds": [
-                "eni-0b16f0581c8ac6877"
-            ],
-            "DnsEntries": [
-                {
-                    "DnsName": "*.vpce-1a2b3c4d5e6f1a2b3-9hnenorg.s3.us-east-1.vpce.amazonaws.com",
-                    "HostedZoneId": "Z7HUB22UULQXV"
-                },
-                {
-                    "DnsName": "*.vpce-1a2b3c4d5e6f1a2b3-9hnenorg-us-east-1c.s3.us-east-1.vpce.amazonaws.com",
-                    "HostedZoneId": "Z7HUB22UULQXV"
-                }
-            ],
-            "CreationTimestamp": "2021-03-05T14:46:16.030000+00:00",
-            "Tags": [
-                {
-                    "Key": "service",
-                    "Value": "S3"
-                }
-            ],
-            "OwnerId": "123456789012"
-        }
-    }
-
-For more information, see `Create an interface VPC endpoint <https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html>`__ in the *AWS PrivateLink User Guide*.
-
-**Example 3: To create a Gateway Load Balancer endpoint**
-
-The following ``create-vpc-endpoint`` example creates a Gateway Load Balancer endpoint between VPC ``vpc-111122223333aabbc`` and and a service that is configured using a Gateway Load Balancer. ::
-
-    aws ec2 create-vpc-endpoint \
-        --service-name com.amazonaws.vpce.us-east-1.vpce-svc-123123a1c43abc123 \
-        --vpc-endpoint-type GatewayLoadBalancer \
-        --vpc-id vpc-111122223333aabbc \
-        --subnet-ids subnet-0011aabbcc2233445
-
-Output::
-
-    {
-        "VpcEndpoint": {
-            "VpcEndpointId": "vpce-aabbaabbaabbaabba",
-            "VpcEndpointType": "GatewayLoadBalancer",
-            "VpcId": "vpc-111122223333aabbc",
-            "ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-123123a1c43abc123",
-            "State": "pending",
-            "SubnetIds": [
-                "subnet-0011aabbcc2233445"
-            ],
-            "RequesterManaged": false,
-            "NetworkInterfaceIds": [
-                "eni-01010120203030405"
-            ],
-            "CreationTimestamp": "2020-11-11T08:06:03.522Z",
-            "OwnerId": "123456789012"
-        }
-    }
-
-For more information, see `Gateway Load Balancer endpoints <https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-load-balancer-endpoints.html>`__ in the *AWS PrivateLink User Guide*.
\ No newline at end of file
+**Example 1: To create a gateway endpoint**
+
+The following ``create-vpc-endpoint`` example creates a gateway VPC endpoint between VPC ``vpc-1a2b3c4d`` and Amazon S3 in the ``us-east-1`` region, and associates route table ``rtb-11aa22bb`` with the endpoint. ::
+
+    aws ec2 create-vpc-endpoint \
+        --vpc-id vpc-1a2b3c4d \
+        --service-name com.amazonaws.us-east-1.s3 \
+        --route-table-ids rtb-11aa22bb
+
+Output::
+
+    {
+        "VpcEndpoint": {
+            "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":\"\*\",\"Action\":\"\*\",\"Resource\":\"\*\"}]}",
+            "VpcId": "vpc-1a2b3c4d",
+            "State": "available",
+            "ServiceName": "com.amazonaws.us-east-1.s3",
+            "RouteTableIds": [
+                "rtb-11aa22bb"
+            ],
+            "VpcEndpointId": "vpc-1a2b3c4d",
+            "CreationTimestamp": "2015-05-15T09:40:50Z"
+        }
+    }
+
+For more information, see `Create a gateway endpoint <https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3>`__ in the *AWS PrivateLink User Guide*.
+
+**Example 2: To create an interface endpoint**
+
+The following ``create-vpc-endpoint`` example creates an interface VPC endpoint between VPC ``vpc-1a2b3c4d`` and Amazon S3 in the ``us-east-1`` region. The command creates the endpoint in subnet ``subnet-1a2b3c4d``, associates it with security group ``sg-1a2b3c4d``, and adds a tag with a key of "Service" and a Value of "S3". ::
+
+    aws ec2 create-vpc-endpoint \
+        --vpc-id vpc-1a2b3c4d \
+        --vpc-endpoint-type Interface \
+        --service-name com.amazonaws.us-east-1.s3 \
+        --subnet-ids subnet-7b16de0c \
+        --security-group-id sg-1a2b3c4d \
+        --tag-specifications ResourceType=vpc-endpoint,Tags=[{Key=service,Value=S3}]
+
+Output::
+
+    {
+        "VpcEndpoint": {
+            "VpcEndpointId": "vpce-1a2b3c4d5e6f1a2b3",
+            "VpcEndpointType": "Interface",
+            "VpcId": "vpc-1a2b3c4d",
+            "ServiceName": "com.amazonaws.us-east-1.s3",
+            "State": "pending",
+            "RouteTableIds": [],
+            "SubnetIds": [
+                "subnet-1a2b3c4d"
+            ],
+            "Groups": [
+                {
+                    "GroupId": "sg-1a2b3c4d",
+                    "GroupName": "default"
+                }
+            ],
+            "PrivateDnsEnabled": false,
+            "RequesterManaged": false,
+            "NetworkInterfaceIds": [
+                "eni-0b16f0581c8ac6877"
+            ],
+            "DnsEntries": [
+                {
+                    "DnsName": "*.vpce-1a2b3c4d5e6f1a2b3-9hnenorg.s3.us-east-1.vpce.amazonaws.com",
+                    "HostedZoneId": "Z7HUB22UULQXV"
+                },
+                {
+                    "DnsName": "*.vpce-1a2b3c4d5e6f1a2b3-9hnenorg-us-east-1c.s3.us-east-1.vpce.amazonaws.com",
+                    "HostedZoneId": "Z7HUB22UULQXV"
+                }
+            ],
+            "CreationTimestamp": "2021-03-05T14:46:16.030000+00:00",
+            "Tags": [
+                {
+                    "Key": "service",
+                    "Value": "S3"
+                }
+            ],
+            "OwnerId": "123456789012"
+        }
+    }
+
+For more information, see `Create an interface VPC endpoint <https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html>`__ in the *AWS PrivateLink User Guide*.
+
+**Example 3: To create a Gateway Load Balancer endpoint**
+
+The following ``create-vpc-endpoint`` example creates a Gateway Load Balancer endpoint between VPC ``vpc-111122223333aabbc`` and and a service that is configured using a Gateway Load Balancer. ::
+
+    aws ec2 create-vpc-endpoint \
+        --service-name com.amazonaws.vpce.us-east-1.vpce-svc-123123a1c43abc123 \
+        --vpc-endpoint-type GatewayLoadBalancer \
+        --vpc-id vpc-111122223333aabbc \
+        --subnet-ids subnet-0011aabbcc2233445
+
+Output::
+
+    {
+        "VpcEndpoint": {
+            "VpcEndpointId": "vpce-aabbaabbaabbaabba",
+            "VpcEndpointType": "GatewayLoadBalancer",
+            "VpcId": "vpc-111122223333aabbc",
+            "ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-123123a1c43abc123",
+            "State": "pending",
+            "SubnetIds": [
+                "subnet-0011aabbcc2233445"
+            ],
+            "RequesterManaged": false,
+            "NetworkInterfaceIds": [
+                "eni-01010120203030405"
+            ],
+            "CreationTimestamp": "2020-11-11T08:06:03.522Z",
+            "OwnerId": "123456789012"
+        }
+    }
+
+For more information, see `Gateway Load Balancer endpoints <https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-load-balancer-endpoints.html>`__ in the *AWS PrivateLink User Guide*.
+
+**Example 4: To create a resource endpoint**
+
+The following ``create-vpc-endpoint`` example creates a resource endpoint. ::
+
+    aws ec2 create-vpc-endpoint \
+        --vpc-endpoint-type Resource \
+        --vpc-id vpc-111122223333aabbc \
+        --subnet-ids subnet-0011aabbcc2233445 \
+        --resource-configuration-arn arn:aws:vpc-lattice-us-east-1:123456789012:resourceconfiguration/rcfg-0123abcde98765432
+
+Output::
+
+    {
+        "VpcEndpoint": {
+            "VpcEndpointId": "vpce-00939a7ed9EXAMPLE",
+            "VpcEndpointType": "Resource",
+            "VpcId": "vpc-111122223333aabbc",
+            "State": "Pending",
+            "SubnetIds": [
+                "subnet-0011aabbcc2233445"
+            ],
+            "Groups": [
+                {
+                    "GroupId": "sg-03e2f15fbfc09b000",
+                    "GroupName": "default"
+                }
+            ],
+            "IpAddressType": "IPV4",
+            "PrivateDnsEnabled": false,
+            "CreationTimestamp": "2025-02-06T23:38:49.525000+00:00",
+            "Tags": [],
+            "OwnerId": "123456789012",
+            "ResourceConfigurationArn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-0123abcde98765432"
+        }
+    }
+
+For more information, see `Resource endpoints <https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-resources.html>`__ in the *AWS PrivateLink User Guide*.
+
+**Example 5: To create a service network endpoint**
+
+The following ``create-vpc-endpoint`` example creates a service network endpoint. ::
+
+    aws ec2 create-vpc-endpoint \
+        --vpc-endpoint-type ServiceNetwork \
+        --vpc-id vpc-111122223333aabbc \
+        --subnet-ids subnet-0011aabbcc2233445 \
+        --service-network-arn arn:aws:vpc-lattice:us-east-1:123456789012:servicenetwork/sn-0101abcd5432abcd0 \
+        --security-group-ids sg-0123456789012abcd
+
+Output::
+
+    {
+        "VpcEndpoint": {
+            "VpcEndpointId": "vpce-0f00567fa8EXAMPLE",
+            "VpcEndpointType": "ServiceNetwork",
+            "VpcId": "vpc-111122223333aabbc",
+            "State": "Pending",
+            "SubnetIds": [
+                "subnet-0011aabbcc2233445"
+            ],
+            "Groups": [
+                {
+                    "GroupId": "sg-0123456789012abcd",
+                    "GroupName": "my-security-group"
+                }
+            ],
+            "IpAddressType": "IPV4",
+            "PrivateDnsEnabled": false,
+            "CreationTimestamp": "2025-02-06T23:44:20.449000+00:00",
+            "Tags": [],
+            "OwnerId": "123456789012",
+            "ServiceNetworkArn": "arn:aws:vpc-lattice:us-east-1:123456789012:servicenetwork/sn-0101abcd5432abcd0"
+        }
+    }
+
+For more information, see `Service network endpoints <https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-service-networks.html>`__ in the *AWS PrivateLink User Guide*.
+
diff -pruN 2.23.6-1/awscli/examples/ec2/delete-ipam-pool.rst 2.31.35-1/awscli/examples/ec2/delete-ipam-pool.rst
--- 2.23.6-1/awscli/examples/ec2/delete-ipam-pool.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/delete-ipam-pool.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ In this example, you're a IPAM delegated
 
 To complete this request:
 
-* You'll need the IPAM pool ID which you can get with `describe-ipam-pools <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-pools.html>`__. 
+* You'll need the IPAM pool ID which you can get with `describe-ipam-pools <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-pools.html>`__. 
 * The ``--region`` must be the IPAM home Region.
 
 The following ``delete-ipam-pool`` example deletes an IPAM pool in your AWS account. ::
diff -pruN 2.23.6-1/awscli/examples/ec2/describe-addresses-attribute.rst 2.31.35-1/awscli/examples/ec2/describe-addresses-attribute.rst
--- 2.23.6-1/awscli/examples/ec2/describe-addresses-attribute.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/describe-addresses-attribute.rst	2025-11-12 19:17:29.000000000 +0000
@@ -26,4 +26,4 @@ Output::
         ]
     }
 
-To view the attributes of an elastic IP address, you must have first associated a domain name with the elastic IP address. For more information, see `Use reverse DNS for email applications <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS>`__ in the *Amazon EC2 User Guide* or `modify-address-attribute <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-address-attribute.html>`__ in the *AWS CLI Command Reference*.
+To view the attributes of an elastic IP address, you must have first associated a domain name with the elastic IP address. For more information, see `Use reverse DNS for email applications <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS>`__ in the *Amazon EC2 User Guide* or `modify-address-attribute <https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-address-attribute.html>`__ in the *AWS CLI Command Reference*.
diff -pruN 2.23.6-1/awscli/examples/ec2/describe-security-group-vpc-associations.rst 2.31.35-1/awscli/examples/ec2/describe-security-group-vpc-associations.rst
--- 2.23.6-1/awscli/examples/ec2/describe-security-group-vpc-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/describe-security-group-vpc-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,21 @@
+**To describe VPC associations**
+
+The following ``describe-security-group-vpc-associations`` example describes the VPC associations for the specified security group. ::
+
+    aws ec2 describe-security-group-vpc-associations \
+        --filters Name=group-id,Values=sg-04dbb43907d3f8a78
+
+Output::
+
+    {
+        "SecurityGroupVpcAssociations": [
+            {
+                "GroupId": "sg-04dbb43907d3f8a78",
+                "VpcId": "vpc-0bf4c2739bc05a694",
+                "VpcOwnerId": "123456789012",
+                "State": "associated"
+            }
+        ]
+    }
+
+For more information, see `Associate security groups with multiple VPCs <https://docs.aws.amazon.com/vpc/latest/userguide/security-group-assoc.html>`__ in the *Amazon VPC User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/describe-vpc-endpoint-associations.rst 2.31.35-1/awscli/examples/ec2/describe-vpc-endpoint-associations.rst
--- 2.23.6-1/awscli/examples/ec2/describe-vpc-endpoint-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/describe-vpc-endpoint-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+**To describe VPC endpoint associations**
+
+The following ``describe-vpc-endpoint-associations`` example describes your VPC endpoint associations. ::
+
+    aws ec2 describe-vpc-endpoint-associations
+
+Output::
+
+    {
+        "VpcEndpointAssociations": [
+            {
+                "Id": "vpce-rsc-asc-0a810ca6ac8866bf9",
+                "VpcEndpointId": "vpce-019b90d6f16d4f958",
+                "AssociatedResourceAccessibility": "Accessible",
+                "DnsEntry": {
+                    "DnsName": "vpce-019b90d6f16d4f958.rcfg-07129f3acded87625.4232ccc.vpc-lattice-rsc.us-east-2.on.aws",
+                    "HostedZoneId": "Z03265862FOUNWMZOKUF4"
+                },
+                "AssociatedResourceArn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-07129f3acded87625"
+            }
+        ]
+    }
+
+For more information, see `Manage VPC endpoint associations <https://docs.aws.amazon.com/vpc/latest/privatelink/resource-configuration-associations.html#resource-config-manage-ep-association>`__ in the *AWS PrivateLink User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/disable-image-deregistration-protection.rst 2.31.35-1/awscli/examples/ec2/disable-image-deregistration-protection.rst
--- 2.23.6-1/awscli/examples/ec2/disable-image-deregistration-protection.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/disable-image-deregistration-protection.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,14 @@
+**To disable deregistration protection**
+
+The following ``disable-image-deregistration-protection`` example disables deregistration protection for the specified image. ::
+
+    aws ec2 disable-image-deregistration-protection \
+        --image-id ami-0b1a928a144a74ec9
+
+Output::
+
+    {
+        "Return": "disabled"
+    }
+
+For more information, see `Protect an AMI from deregistration <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html>`__ in the *Amazon EC2 User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/disassociate-security-group-vpc.rst 2.31.35-1/awscli/examples/ec2/disassociate-security-group-vpc.rst
--- 2.23.6-1/awscli/examples/ec2/disassociate-security-group-vpc.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/disassociate-security-group-vpc.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To disassociate a security group from a VPC**
+
+The following ``disassociate-security-group-vpc`` example disassociates the specified security group from the specified VPC. ::
+
+    aws ec2 disassociate-security-group-vpc \
+        --group-id sg-04dbb43907d3f8a78 \
+        --vpc-id vpc-0bf4c2739bc05a694
+
+Output::
+
+    {
+        "State": "disassociating"
+    }
+
+For more information, see `Associate security groups with multiple VPCs <https://docs.aws.amazon.com/vpc/latest/userguide/security-group-assoc.html>`__ in the *Amazon VPC User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/enable-image-deregistration-protection.rst 2.31.35-1/awscli/examples/ec2/enable-image-deregistration-protection.rst
--- 2.23.6-1/awscli/examples/ec2/enable-image-deregistration-protection.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/enable-image-deregistration-protection.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,14 @@
+**To enable deregistration protection**
+
+The following ``enable-image-deregistration-protection`` example enables deregistration protection for the specified image. ::
+
+    aws ec2 enable-image-deregistration-protection \
+        --image-id ami-0b1a928a144a74ec9
+
+Output::
+
+    {
+        "Return": "enabled-without-cooldown"
+    }
+
+For more information, see `Protect an EC2 AMI from deregistration <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html>`__ in the *Amazon EC2 User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ec2/get-ipam-discovered-public-addresses.rst 2.31.35-1/awscli/examples/ec2/get-ipam-discovered-public-addresses.rst
--- 2.23.6-1/awscli/examples/ec2/get-ipam-discovered-public-addresses.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/get-ipam-discovered-public-addresses.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
 **To view discovered public IP addresses**
 
-In this example, you are an IPAM delegated admin and you want to view the IP addresses of resources discovered by IPAM. You can get the resource discovery ID with `describe-ipam-resource-discoveries <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__.
+In this example, you are an IPAM delegated admin and you want to view the IP addresses of resources discovered by IPAM. You can get the resource discovery ID with `describe-ipam-resource-discoveries <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__.
 
 The following ``get-ipam-discovered-public-addresses`` example shows the discovered public IP addresses for a resource discovery. ::
 
diff -pruN 2.23.6-1/awscli/examples/ec2/modify-ipam-resource-discovery.rst 2.31.35-1/awscli/examples/ec2/modify-ipam-resource-discovery.rst
--- 2.23.6-1/awscli/examples/ec2/modify-ipam-resource-discovery.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/modify-ipam-resource-discovery.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,7 +5,7 @@ In this example, you're an IPAM delegate
 To complete this request:
 
 * You cannot modify a default resource discovery and you must be the owner of the resource discovery.
-* You need the resource discovery ID, which you can get with `describe-ipam-resource-discoveries <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__.
+* You need the resource discovery ID, which you can get with `describe-ipam-resource-discoveries <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-resource-discoveries.html>`__.
 
 The following ``modify-ipam-resource-discovery`` example modifies a non-default resource discovery in your AWS account. ::
 
diff -pruN 2.23.6-1/awscli/examples/ec2/modify-ipam-scope.rst 2.31.35-1/awscli/examples/ec2/modify-ipam-scope.rst
--- 2.23.6-1/awscli/examples/ec2/modify-ipam-scope.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/modify-ipam-scope.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,7 +2,7 @@
 
 In this scenario, you're an IPAM delegated admin who wants to modify the description of an IPAM scope. 
 
-To complete this request, you'll need the scope ID, which you can get with `describe-ipam-scopes <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-scopes.html>`__.
+To complete this request, you'll need the scope ID, which you can get with `describe-ipam-scopes <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-scopes.html>`__.
 
 The following ``modify-ipam-scope`` example updates the description of the scope. ::
 
diff -pruN 2.23.6-1/awscli/examples/ec2/release-ipam-pool-allocation.rst 2.31.35-1/awscli/examples/ec2/release-ipam-pool-allocation.rst
--- 2.23.6-1/awscli/examples/ec2/release-ipam-pool-allocation.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ec2/release-ipam-pool-allocation.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,8 +4,8 @@ In this example, you're an IPAM delegate
 
 Note the following:
 
-* You can only use this command for custom allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using `modify-ipam-resource-cidr <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-ipam-resource-cidr.html>`__.
-* To complete this request, you'll need the IPAM pool ID, which you can get with `describe-ipam-pools <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-ipam-pools.html>`__. You'll also need the allocation ID, which you can get with `get-ipam-pool-allocations <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/get-ipam-pool-allocations.html>`__.
+* You can only use this command for custom allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using `modify-ipam-resource-cidr <https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-ipam-resource-cidr.html>`__.
+* To complete this request, you'll need the IPAM pool ID, which you can get with `describe-ipam-pools <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-ipam-pools.html>`__. You'll also need the allocation ID, which you can get with `get-ipam-pool-allocations <https://docs.aws.amazon.com/cli/latest/reference/ec2/get-ipam-pool-allocations.html>`__.
 * If you do not want to remove allocations one by one, you can use the ``--cascade option`` when you delete an IPAM pool to automatically release any allocations in the pool before deleting it.
 * There are a number of prerequisites before running this command. For more information, see `Release an allocation <https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html>`__ in the *Amazon VPC IPAM User Guide*.
 * The ``--region`` in which you run this command must be the locale of the IPAM pool where the allocation is.
@@ -24,4 +24,4 @@ Output::
         "Success": true
     }
 
-Once you release an allocation, you may want to run `delete-ipam-pool <https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/delete-ipam-pool.html>`__.
\ No newline at end of file
+Once you release an allocation, you may want to run `delete-ipam-pool <https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-ipam-pool.html>`__.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ecs/create-cluster.rst 2.31.35-1/awscli/examples/ecs/create-cluster.rst
--- 2.23.6-1/awscli/examples/ecs/create-cluster.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/create-cluster.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,11 @@
 **Example 1: To create a new cluster**
 
-The following ``create-cluster`` example creates a cluster. ::
+The following ``create-cluster`` example creates a cluster named ``MyCluster`` and enables CloudWatch Container Insights with enhanced observability. ::
 
     aws ecs create-cluster \
-        --cluster-name MyCluster
+        --cluster-name MyCluster \
+        --settings name=containerInsights,value=enhanced
+
 
 Output::
 
@@ -17,6 +19,12 @@ Output::
             "runningTasksCount": 0,
             "activeServicesCount": 0,
             "statistics": [],
+            "settings": [
+                {
+                    "name": "containerInsights",
+                    "value": "enhanced"
+                }
+            ],
             "tags": []
         }
     }
@@ -25,7 +33,7 @@ For more information, see `Creating a Cl
 
 **Example 2: To create a new cluster using capacity providers**
 
-The following ``create-cluster`` example creates a cluster and associates two existing capacity providers with it. The ``create-capacity-provider`` command is used to create a capacity provider. Specifying a default capacity provider strategy is optional, but recommended. In this example, we create a cluster named ``MyCluster`` and associate the ``MyCapacityProvider1`` and ``MyCapacityProvider2`` capacity providers with it. A default capacity provider strategy is specified that spreads the tasks evenly across both capacity providers.
+The following ``create-cluster`` example creates a cluster and associates two existing capacity providers with it. The ``create-capacity-provider`` command is used to create a capacity provider. Specifying a default capacity provider strategy is optional, but recommended. In this example, we create a cluster named ``MyCluster`` and associate the ``MyCapacityProvider1`` and ``MyCapacityProvider2`` capacity providers with it. A default capacity provider strategy is specified that spreads the tasks evenly across both capacity providers. ::
 
     aws ecs create-cluster \
         --cluster-name MyCluster \
@@ -68,18 +76,18 @@ Output::
             ],
             "attachments": [
                {
-                    "id": "0fb0c8f4-6edd-4de1-9b09-17e470ee1918",
-                    "type": "asp",
-                    "status": "PRECREATED",
-                    "details": [
-                        {
-                            "name": "capacityProviderName",
-                            "value": "MyCapacityProvider1"
-                        },
-                        {
-                            "name": "scalingPlanName",
-                            "value": "ECSManagedAutoScalingPlan-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
-                        }
+                   "id": "0fb0c8f4-6edd-4de1-9b09-17e470ee1918",
+                   "type": "asp",
+                   "status": "PRECREATED",
+                   "details": [
+                       {
+                           "name": "capacityProviderName",
+                           "value": "MyCapacityProvider1"
+                       },
+                       {
+                           "name": "scalingPlanName",
+                           "value": "ECSManagedAutoScalingPlan-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
+                       }
                     ]
                 },
                 {
@@ -106,39 +114,35 @@ For more information, see `Cluster capac
 
 **Example 3: To create a new cluster with multiple tags**
 
-The following ``create-cluster`` example creates a cluster with multiple tags.  For more information about adding tags using shorthand syntax, see `Using Shorthand Syntax with the AWS Command Line Interface <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-shorthand.html>`_ in the *AWS CLI User Guide*. ::
+The following ``create-cluster`` example creates a cluster with multiple tags.  For more information about adding tags using shorthand syntax, see `Using Shorthand Syntax with the AWS Command Line Interface <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-shorthand.html>`__ in the *AWS CLI User Guide*. ::
 
     aws ecs create-cluster \
         --cluster-name MyCluster \
-        --tags key=key1,value=value1 key=key2,value=value2 key=key3,value=value3
+        --tags key=key1,value=value1 key=key2,value=value2 
 
 Output::
 
-    {
-        "cluster": {
-            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster",
-            "clusterName": "MyCluster",
-            "status": "ACTIVE",
-            "registeredContainerInstancesCount": 0,
-            "pendingTasksCount": 0,
-            "runningTasksCount": 0,
-            "activeServicesCount": 0,
-            "statistics": [],
-            "tags": [
-                {
-                    "key": "key1",
-                    "value": "value1"
-                },
-                {
-                    "key": "key2",
-                    "value": "value2"
-                },
-                {
-                    "key": "key3",
-                    "value": "value3"
-                }
-            ]
+   {
+       "cluster": {
+           "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster",
+           "clusterName": "MyCluster",
+           "status": "ACTIVE",
+           "registeredContainerInstancesCount": 0,
+           "pendingTasksCount": 0,
+           "runningTasksCount": 0,
+           "activeServicesCount": 0,
+           "statistics": [],
+           "tags": [
+               {
+                   "key": "key1",
+                   "value": "value1"
+               },
+               {
+                   "key": "key2",
+                   "value": "value2"
+               }
+           ]
         }
     }
 
-For more information, see `Creating a Cluster <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html>`__ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
+For more information, see `Creating a Cluster <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html>`__ in the *Amazon ECS Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ecs/create-service.rst 2.31.35-1/awscli/examples/ecs/create-service.rst
--- 2.23.6-1/awscli/examples/ecs/create-service.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/create-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -9,7 +9,7 @@ The following ``create-service`` example
         --desired-count 2 \
         --launch-type FARGATE \
         --platform-version LATEST \
-        --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}" \
+        --network-configuration 'awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}' \
         --tags key=key1,value=value1 key=key2,value=value2 key=key3,value=value3
 
 Output::
@@ -93,6 +93,8 @@ Output::
         }
     }
 
+For more information, see `Creating a Service <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
+
 **Example 2: To create a service using the EC2 launch type**
 
 The following ``create-service`` example shows how to create a service called ``ecs-simple-service`` with a task that uses the EC2 launch type. The service uses the ``sleep360`` task definition and it maintains 1 instantiation of the task. ::
@@ -145,6 +147,8 @@ Output::
         }
     }
 
+For more information, see `Creating a Service <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
+
 **Example 3: To create a service that uses an external deployment controller**
 
 The following ``create-service`` example creates a service that uses an external deployment controller. ::
@@ -189,11 +193,20 @@ Output::
         }
     }
 
+For more information, see `Creating a Service <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
+
 **Example 4: To create a new service behind a load balancer**
 
-The following ``create-service`` example shows how to create a service that is behind a load balancer. You must have a load balancer configured in the same Region as your container instance. This example uses the ``--cli-input-json`` option and a JSON input file called ``ecs-simple-service-elb.json`` with the following content::
+The following ``create-service`` example shows how to create a service that is behind a load balancer. You must have a load balancer configured in the same Region as your container instance. This example uses the ``--cli-input-json`` option and a JSON input file called ``ecs-simple-service-elb.json`` with the following content. ::
 
-    {
+    aws ecs create-service \
+        --cluster MyCluster \
+        --service-name ecs-simple-service-elb \
+        --cli-input-json file://ecs-simple-service-elb.json
+
+Contents of ``ecs-simple-service-elb.json``::
+
+     {
         "serviceName": "ecs-simple-service-elb",
         "taskDefinition": "ecs-demo",
         "loadBalancers": [
@@ -207,13 +220,6 @@ The following ``create-service`` example
         "role": "ecsServiceRole"
     }
 
-Command::
-
-    aws ecs create-service \
-        --cluster MyCluster \
-        --service-name ecs-simple-service-elb \
-        --cli-input-json file://ecs-simple-service-elb.json
-
 Output::
 
     {
@@ -231,7 +237,7 @@ Output::
             "roleArn": "arn:aws:iam::123456789012:role/ecsServiceRole",
             "desiredCount": 10,
             "serviceName": "ecs-simple-service-elb",
-            "clusterArn": "arn:aws:ecs:<us-west-2:123456789012:cluster/MyCluster",
+            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster",
             "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/ecs-simple-service-elb",
             "deployments": [
                 {
@@ -250,4 +256,135 @@ Output::
         }
     }
 
-For more information, see `Creating a Service <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service.html>`_ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
+For more information, see `Use load balancing to distribute Amazon ECS service traffic <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html>`__ in the *Amazon ECS Developer Guide*.
+
+**Example 5: To configure Amazon EBS volumes at service creation**
+
+The following ``create-service`` example shows how to configure Amazon EBS volumes for each task managed by the service. You must have an Amazon ECS infrastructure role configured with the ``AmazonECSInfrastructureRolePolicyForVolumes`` managed policy attached. You must specify a task definition with the same volume name as in the ``create-service`` request. This example uses the ``--cli-input-json`` option and a JSON input file called ``ecs-simple-service-ebs.json`` with the following content. ::
+
+    aws ecs create-service \
+        --cli-input-json file://ecs-simple-service-ebs.json
+
+Contents of ``ecs-simple-service-ebs.json``::
+
+    {
+        "cluster": "mycluster",
+        "taskDefinition": "mytaskdef",
+        "serviceName": "ecs-simple-service-ebs",
+        "desiredCount": 2,
+        "launchType": "FARGATE",
+        "networkConfiguration":{
+            "awsvpcConfiguration":{
+                "assignPublicIp": "ENABLED",
+                "securityGroups": ["sg-12344321"],
+                "subnets":["subnet-12344321"]
+            }
+        },
+        "volumeConfigurations": [
+            {
+                "name": "myEbsVolume",
+                "managedEBSVolume": {
+                    "roleArn":"arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                    "volumeType": "gp3",
+                    "sizeInGiB": 100,
+                    "iops": 3000, 
+                    "throughput": 125, 
+                    "filesystemType": "ext4"
+                }
+            }
+       ]
+    }
+
+Output::
+
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/mycluster/ecs-simple-service-ebs",
+            "serviceName": "ecs-simple-service-ebs",
+            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/mycluster",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 0,
+            "pendingCount": 0,
+            "launchType": "EC2",
+            "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:3",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": false,
+                    "rollback": false
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/7851020056849183687",
+                    "status": "PRIMARY",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:3",
+                    "desiredCount": 0,
+                    "pendingCount": 0,
+                    "runningCount": 0,
+                    "failedTasks": 0,
+                    "createdAt": "2025-01-21T11:32:38.034000-06:00",
+                    "updatedAt": "2025-01-21T11:32:38.034000-06:00",
+                    "launchType": "EC2",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "DISABLED"
+                        }
+                    },
+                    "rolloutState": "IN_PROGRESS",
+                    "rolloutStateReason": "ECS deployment ecs-svc/7851020056849183687 in progress.",
+                    "volumeConfigurations": [
+                        {
+                            "name": "myEBSVolume",
+                            "managedEBSVolume": {
+                                "volumeType": "gp3",
+                                "sizeInGiB": 100,
+                                "iops": 3000,
+                                "throughput": 125,
+                                "roleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                                "filesystemType": "ext4"
+                            }
+                        }
+                    ]
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [],
+            "createdAt": "2025-01-21T11:32:38.034000-06:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-12344321"
+                    ],
+                    "securityGroups": [
+                        "sg-12344321"
+                    ],
+                    "assignPublicIp": "DISABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:user/AIDACKCEVSQ6C2EXAMPLE",
+            "enableECSManagedTags": false,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "DISABLED"
+        }
+    }
+
+For more information, see `Use Amazon EBS volumes with Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html>`__ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ecs/put-account-setting.rst 2.31.35-1/awscli/examples/ecs/put-account-setting.rst
--- 2.23.6-1/awscli/examples/ecs/put-account-setting.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/put-account-setting.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,16 +1,19 @@
 **To modify the account setting for your IAM user account**
 
-The following ``put-account-setting`` example enables the ``serviceLongArnFormat`` account setting for your IAM user account. ::
+The following ``put-account-setting`` example sets the ``containerInsights`` account setting to ``enhanced`` for your IAM user account. This turns on Container Insights with enhanced observability. ::
 
-    aws ecs put-account-setting --name serviceLongArnFormat --value enabled
+    aws ecs put-account-setting \
+        --name containerInsights \
+        --value enhanced
 
 Output::
 
     {
         "setting": {
-            "name": "serviceLongArnFormat",
-            "value": "enabled",
-            "principalArn": "arn:aws:iam::130757420319:user/your_username"
+            "name": "containerInsights",
+            "value": "enhanced",
+            "principalArn": "arn:aws:iam::123456789012:user/johndoe",
+            "type": "user"
         }
     }
 
diff -pruN 2.23.6-1/awscli/examples/ecs/run-task.rst 2.31.35-1/awscli/examples/ecs/run-task.rst
--- 2.23.6-1/awscli/examples/ecs/run-task.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/run-task.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To run a task on your default cluster**
+**Example 1: To run a task on your default cluster**
 
 The following ``run-task`` example runs a task on the default cluster and uses a client token. ::
 
@@ -60,4 +60,129 @@ Output::
         "failures": []
     }
 
-For more information, see `Running Tasks <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html>`__ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
+For more information, see `Running an application as a standalone task <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/standalone-task-create.html>`__ in the *Amazon ECS Developer Guide*.
+
+**Example 2: To configure an Amazon EBS volume for a standalone task**
+
+The following ``run-task`` example configures an encrypted Amazon EBS volume for a Fargate task on the default cluster. You must have an Amazon ECS infrastructure role configured with the ``AmazonECSInfrastructureRolePolicyForVolumes`` managed policy attached. You must specify a task definition with the same volume name as in the ``run-task`` request. This example uses the ``--cli-input-json`` option and a JSON input file called ``ebs.json``. ::
+
+    aws ecs run-task \
+        --cli-input-json file://ebs.json
+
+Contents of ``ebs.json``::
+
+    {
+       "cluster": "default",
+       "taskDefinition": "mytaskdef",
+       "launchType": "FARGATE",
+       "networkConfiguration":{
+            "awsvpcConfiguration":{
+                "assignPublicIp": "ENABLED",
+                "securityGroups": ["sg-12344321"],
+                "subnets":["subnet-12344321"]
+            }
+        },
+       "volumeConfigurations": [
+            {
+                "name": "myEBSVolume",
+                "managedEBSVolume": {
+                    "volumeType": "gp3",
+                    "sizeInGiB": 100,
+                    "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole",
+                    "encrypted": true,
+                    "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
+                }
+            }
+        ]
+    }
+
+Output::
+
+    {
+        "tasks": [
+            {
+                "attachments": [
+                    {
+                        "id": "ce868693-15ca-4083-91ac-f782f64000c9",
+                        "type": "ElasticNetworkInterface",
+                        "status": "PRECREATED",
+                        "details": [
+                            {
+                            "name": "subnetId",
+                            "value": "subnet-070982705451dad82"
+                            }
+                        ]
+                    },
+                    {
+                        "id": "a17ed863-786c-4372-b5b3-b23e53f37877",
+                        "type": "AmazonElasticBlockStorage",
+                        "status": "CREATED",
+                        "details": [
+                            {
+                                "name": "roleArn",
+                                "value": "arn:aws:iam::123456789012:role/ecsInfrastructureRole"
+                            },
+                            {
+                                "name": "volumeName",
+                                "value": "myEBSVolume"
+                            },
+                            {
+                                "name": "deleteOnTermination",
+                                "value": "true"
+                            }
+                        ]
+                    }
+                ],
+                "attributes": [
+                    {
+                        "name": "ecs.cpu-architecture",
+                        "value": "x86_64"
+                    }
+                ],
+                "availabilityZone": "us-west-2b",
+                "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/default",
+                "containers": [
+                    {
+                        "containerArn": "arn:aws:ecs:us-west-2:123456789012:container/default/7f1fbd3629434cc4b82d72d2f09b67c9/e21962a2-f328-4699-98a3-5161ac2c186a",
+                        "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/7f1fbd3629434cc4b82d72d2f09b67c9",
+                        "name": "container-using-ebs",
+                        "image": "amazonlinux:2",
+                        "lastStatus": "PENDING",
+                        "networkInterfaces": [],
+                        "cpu": "0"
+                    }
+                ],
+                "cpu": "1024",
+                "createdAt": "2025-01-23T10:29:46.650000-06:00",
+                "desiredStatus": "RUNNING",
+                "enableExecuteCommand": false,
+                "group": "family:mytaskdef",
+                "lastStatus": "PROVISIONING",
+                "launchType": "FARGATE",
+                "memory": "3072",
+                "overrides": {
+                    "containerOverrides": [
+                        {
+                            "name": "container-using-ebs"
+                        }
+                    ],
+                    "inferenceAcceleratorOverrides": []
+                },
+                "platformVersion": "1.4.0",
+                "platformFamily": "Linux",
+                "tags": [],
+                "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/7f1fbd3629434cc4b82d72d2f09b67c9",
+                "taskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:4",
+                "version": 1,
+                "ephemeralStorage": {
+                    "sizeInGiB": 20
+                },
+                "fargateEphemeralStorage": {
+                    "sizeInGiB": 20
+                }
+            }
+        ],
+        "failures": []
+    }
+
+For more information, see `Use Amazon EBS volumes with Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html>`__ in the *Amazon ECS Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ecs/start-task.rst 2.31.35-1/awscli/examples/ecs/start-task.rst
--- 2.23.6-1/awscli/examples/ecs/start-task.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/start-task.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-**To start a new task**
+**Example 1: To start a new task**
 
-The following ``start-task`` starts a task using the latest revision of the ``sleep360`` task definition on the specified container instance in the default cluster. ::
+The following ``start-task`` example starts a task using the latest revision of the ``sleep360`` task definition on the specified container instance in the default cluster. ::
 
     aws ecs start-task \
         --task-definition sleep360 \
@@ -11,10 +11,10 @@ Output::
     {
         "tasks": [
             {
-                "taskArn": "arn:aws:ecs:us-west-2:130757420319:task/default/666fdccc2e2d4b6894dd422f4eeee8f8",
-                "clusterArn": "arn:aws:ecs:us-west-2:130757420319:cluster/default",
-                "taskDefinitionArn": "arn:aws:ecs:us-west-2:130757420319:task-definition/sleep360:3",
-                "containerInstanceArn": "arn:aws:ecs:us-west-2:130757420319:container-instance/default/765936fadbdd46b5991a4bd70c2a43d4",
+                "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/666fdccc2e2d4b6894dd422f4eeee8f8",
+                "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/default",
+                "taskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:task-definition/sleep360:3",
+                "containerInstanceArn": "arn:aws:ecs:us-west-2:123456789012:container-instance/default/765936fadbdd46b5991a4bd70c2a43d4",
                 "overrides": {
                     "containerOverrides": [
                         {
@@ -28,8 +28,8 @@ Output::
                 "memory": "128",
                 "containers": [
                     {
-                        "containerArn": "arn:aws:ecs:us-west-2:130757420319:container/75f11ed4-8a3d-4f26-a33b-ad1db9e02d41",
-                        "taskArn": "arn:aws:ecs:us-west-2:130757420319:task/default/666fdccc2e2d4b6894dd422f4eeee8f8",
+                        "containerArn": "arn:aws:ecs:us-west-2:123456789012:container/75f11ed4-8a3d-4f26-a33b-ad1db9e02d41",
+                        "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/666fdccc2e2d4b6894dd422f4eeee8f8",
                         "name": "sleep",
                         "lastStatus": "PENDING",
                         "networkInterfaces": [],
@@ -47,3 +47,123 @@ Output::
         ],
         "failures": []
     }
+
+For more information, see `Schedule your containers on Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduling_tasks.html>`__ in the *Amazon ECS Developer Guide*.
+
+**Example 2: To configure an Amazon EBS volume at task start**
+
+The following ``start-task`` example configures an encrypted Amazon EBS volume for a task on the specified container instance. You must have an Amazon ECS infrastructure role configured with the ``AmazonECSInfrastructureRolePolicyForVolumes`` managed policy attached. You must specify a task definition with the same volume name as in the ``start-task`` request. This example uses the ``--cli-input-json`` option and a JSON input file called ``ebs.json`` with the following content. ::
+
+    aws ecs start-task \
+        --cli-input-json file://ebs.json \
+        --container-instances 765936fadbdd46b5991a4bd70c2a43d4
+
+Contents of ``ebs.json``::
+
+    {
+       "cluster": "default",
+       "taskDefinition": "mytaskdef",
+       "networkConfiguration":{
+            "awsvpcConfiguration":{
+                "assignPublicIp": "ENABLED",
+                "securityGroups": ["sg-12344321"],
+                "subnets":["subnet-12344321"]
+            }
+        },
+       "volumeConfigurations": [
+            {
+                "name": "myEBSVolume",
+                "managedEBSVolume": {
+                    "volumeType": "gp3",
+                    "sizeInGiB": 100,
+                    "roleArn":"arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                    "encrypted": true,
+                    "kmsKeyId": "arn:aws:kms:region:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
+                }
+            }
+        ]
+    }
+
+Output::
+
+    {
+        "tasks": [
+            {
+                "attachments": [
+                    {
+                        "id": "aea29489-9dcd-49f1-8164-4d91566e1113",
+                        "type": "ElasticNetworkInterface",
+                        "status": "PRECREATED",
+                        "details": [
+                            {
+                                "name": "subnetId",
+                                "value": "subnet-12344321"
+                            }
+                        ]
+                    },
+                    {
+                        "id": "f29e1222-9a1e-410f-b499-a12a7cd6d42e",
+                        "type": "AmazonElasticBlockStorage",
+                        "status": "CREATED",
+                        "details": [
+                            {
+                                "name": "roleArn",
+                                "value": "arn:aws:iam::123456789012:role/ecsInfrastructureRole"
+                            },
+                            {
+                                "name": "volumeName",
+                                "value": "myEBSVolume"
+                            },
+                            {
+                                "name": "deleteOnTermination",
+                                "value": "true"
+                            }
+                        ]
+                    }
+                ],
+                "attributes": [
+                    {
+                        "name": "ecs.cpu-architecture",
+                        "value": "arm64"
+                    }
+                ],
+                "availabilityZone": "us-west-2c",
+                "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/default",
+                "containerInstanceArn": "arn:aws:ecs:us-west-2:123456789012:container-instance/default/765936fadbdd46b5991a4bd70c2a43d4",
+                "containers": [
+                    {
+                        "containerArn": "arn:aws:ecs:us-west-2:123456789012:container/default/bb122ace3ed84add92c00a351a03c69e/a4a9ed10-51c7-4567-9653-50e71b94f867",
+                        "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/bb122ace3ed84add92c00a351a03c69e",
+                        "name": "container-using-ebs",
+                        "image": "amazonlinux:2",
+                        "lastStatus": "PENDING",
+                        "networkInterfaces": [],
+                        "cpu": "0"
+                    }
+                ],
+                "cpu": "1024",
+                "createdAt": "2025-01-23T14:51:05.191000-06:00",
+                "desiredStatus": "RUNNING",
+                "enableExecuteCommand": false,
+                "group": "family:mytaskdef",
+                "lastStatus": "PROVISIONING",
+                "launchType": "EC2",
+                "memory": "3072",
+                "overrides": {
+                    "containerOverrides": [
+                        {
+                            "name": "container-using-ebs"
+                        }
+                    ],
+                    "inferenceAcceleratorOverrides": []
+                },
+                 "tags": [],
+                "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/bb122ace3ed84add92c00a351a03c69e",
+                "taskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:4",
+                "version": 1
+            }
+        ],
+        "failures": []
+    }
+
+For more information, see `Use Amazon EBS volumes with Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html>`__ in the *Amazon ECS Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ecs/update-cluster-settings.rst 2.31.35-1/awscli/examples/ecs/update-cluster-settings.rst
--- 2.23.6-1/awscli/examples/ecs/update-cluster-settings.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/update-cluster-settings.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,16 +1,16 @@
 **To modify the settings for your cluster**
 
-The following ``update-cluster-settings`` example enables CloudWatch Container Insights for the ``default`` cluster. ::
+The following ``update-cluster-settings`` example enables CloudWatch Container Insights with enhanced observability for the ``MyCluster`` cluster. ::
 
     aws ecs update-cluster-settings \
-        --cluster default \
-        --settings name=containerInsights,value=enabled
+        --cluster MyCluster \
+        --settings name=containerInsights,value=enhanced
 
 Output::
 
     {
         "cluster": {
-            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster",
+            "clusterArn": "arn:aws:ecs:us-esat-1:123456789012:cluster/MyCluster",
             "clusterName": "default",
             "status": "ACTIVE",
             "registeredContainerInstancesCount": 0,
@@ -22,10 +22,10 @@ Output::
             "settings": [
                 {
                     "name": "containerInsights",
-                    "value": "enabled"
+                    "value": "enhanced"
                 }
             ]
         }
     }
 
-For more information, see `Modifying Account Settings <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-modifying-longer-id-settings.html>`__ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
+For more information, see `Modifying Account Settings <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-modifying-longer-id-settings.html>`__ in the *Amazon ECS Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ecs/update-service.rst 2.31.35-1/awscli/examples/ecs/update-service.rst
--- 2.23.6-1/awscli/examples/ecs/update-service.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/update-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,12 +2,750 @@
 
 The following ``update-service`` example updates the ``my-http-service`` service to use the ``amazon-ecs-sample`` task definition. ::
 
-    aws ecs update-service --service my-http-service --task-definition amazon-ecs-sample
+    aws ecs update-service \
+        --cluster test \
+        --service my-http-service \
+        --task-definition amazon-ecs-sample
+
+Output::
+
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/test/my-http-service",
+            "serviceName": "my-http-service",
+            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/test",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 2,
+            "pendingCount": 0,
+            "launchType": "FARGATE",
+            "platformVersion": "1.4.0",
+            "platformFamily": "Linux",
+            "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/amazon-ecs-sample:2",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": true,
+                    "rollback": true
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100,
+                "alarms": {
+                    "alarmNames": [],
+                    "rollback": false,
+                    "enable": false
+                }
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/7419115625193919142",
+                    "status": "PRIMARY",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/amazon-ecs-sample:2",
+                    "desiredCount": 0,
+                    "pendingCount": 0,
+                    "runningCount": 0,
+                    "failedTasks": 0,
+                    "createdAt": "2025-02-21T13:26:02.734000-06:00",
+                    "updatedAt": "2025-02-21T13:26:02.734000-06:00",
+                    "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "IN_PROGRESS",
+                    "rolloutStateReason": "ECS deployment ecs-svc/7419115625193919142 in progress."
+                },
+                {
+                    "id": "ecs-svc/1709597507655421668",
+                    "status": "ACTIVE",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/old-amazon-ecs-sample:4",
+                    "desiredCount": 2,
+                    "pendingCount": 0,
+                    "runningCount": 2,
+                    "failedTasks": 0,
+                    "createdAt": "2025-01-24T11:13:07.621000-06:00",
+                    "updatedAt": "2025-02-02T16:11:30.838000-06:00",
+                    "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                 "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "COMPLETED",
+                    "rolloutStateReason": "ECS deployment ecs-svc/1709597507655421668 completed."
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [
+                {
+                    "id": "e40b4d1c-80d9-4834-aaf3-6a268e530e17",
+                    "createdAt": "2025-02-21T10:31:26.037000-06:00",
+                    "message": "(my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "6ac069ad-fc8b-4e49-a35d-b5574a964c8e",
+                    "createdAt": "2025-02-21T04:31:22.703000-06:00",
+                    "message": "(my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "265f7d37-dfd1-4880-a846-ec486f341919",
+                    "createdAt": "2025-02-20T22:31:22.514000-06:00",
+                    "message": "(my-http-service) has reached a steady state."
+                }
+            ],
+            "createdAt": "2024-10-30T17:12:43.218000-05:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-12344321",
+                    ],
+                    "securityGroups": [
+                        "sg-12344321"
+                    ],
+                    "assignPublicIp": "ENABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:role/AIDACKCEVSQ6C2EXAMPLE",
+            "enableECSManagedTags": true,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "DISABLED"
+        }
+    }
+
+For more information, see `Update an Amazon ECS service using the console <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
 
 **Example 2: To change the number of tasks in a service**
 
-The following ``update-service`` example updates the desired task count of the service ``my-http-service`` to 3. ::
+The following ``update-service`` example updates the desired task count of the service ``my-http-service`` from to 2. ::
+
+    aws ecs update-service \
+        --cluster MyCluster \
+        --service my-http-service \
+        --desired-count 2
+
+Output::
+
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/my-http-service",
+            "serviceName": "my-http-service",
+            "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 1,
+            "pendingCount": 0,
+            "capacityProviderStrategy": [
+                {
+                    "capacityProvider": "FARGATE",
+                    "weight": 1,
+                    "base": 0
+                }
+            ],
+            "platformVersion": "LATEST",
+            "platformFamily": "Linux",
+            "taskDefinition": "arn:aws:ecs:us-east-1:123456789012:task-definition/MyTaskDefinition",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": true,
+                    "rollback": true
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100,
+                "alarms": {
+                    "alarmNames": [],
+                    "rollback": false,
+                    "enable": false
+                }
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/1976744184940610707",
+                    "status": "PRIMARY",
+                    "taskkDefinition": "arn:aws:ecs:us-east-1:123456789012:task-definition/MyTaskDefinition",
+                    "desiredCount": 1,
+                    "pendingCount": 0,
+                    "runningCount": 1,
+                    "failedTasks": 0,
+                    "createdAt": "2024-12-03T16:24:25.225000-05:00",
+                    "updatedAt": "2024-12-03T16:25:15.837000-05:00",
+                    "capacityProviderStrategy": [
+                        {
+                            "capacityProvider": "FARGATE",
+                            "weight": 1,
+                            "base": 0
+                        }
+                    ],
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-0d0eab1bb38d5ca64",
+                                "subnet-0db5010045995c2d5"
+                            ],
+                            "securityGroups": [
+                                "sg-02556bf85a191f59a"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "COMPLETED",
+                    "rolloutStateReason": "ECS deployment ecs-svc/1976744184940610707 completed."
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [
+                {
+                    "id": "f27350b9-4b2a-4e2e-b72e-a4b68380de45",
+                    "createdAt": "2024-12-30T13:24:07.345000-05:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "e764ec63-f53f-45e3-9af2-d99f922d2957",
+                    "createdAt": "2024-12-30T12:32:21.600000-05:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                },          
+                {
+                    "id": "28444756-c2fa-47f8-bd60-93a8e05f3991",
+                    "createdAt": "2024-12-08T19:26:10.367000-05:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                }
+            ],
+            "createdAt": "2024-12-03T16:24:25.225000-05:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-0d0eab1bb38d5ca64",
+                        "subnet-0db5010045995c2d5"
+                    ],
+                    "securityGroups": [
+                        "sg-02556bf85a191f59a"
+                    ],
+                    "assignPublicIp": "ENABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:role/Admin",
+            "enableECSManagedTags": true,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "ENABLED"
+        }
+    }
+
+For more information, see `Updating an Amazon ECS service using the console <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
+
+**Example 3: To configure Amazon EBS volumes for attachment at service update**
+
+The following ``update-service`` example updates the service ``my-http-service`` to use Amazon EBS volumes. You must have an Amazon ECS infrastructure role configured with the ``AmazonECSInfrastructureRolePolicyForVolumes`` managed policy attached. You must also specify a task definition with the same volume name as in the ``update-service`` request and with ``configuredAtLaunch`` set to ``true``. This example uses the ``--cli-input-json`` option and a JSON input file called ``ebs.json``. ::
+
+    aws ecs update-service \
+        --cli-input-json file://ebs.json
+
+Contents of ``ebs.json``::
+
+    {
+       "cluster": "mycluster",
+       "taskDefinition": "mytaskdef",
+       "service": "my-http-service",
+       "desiredCount": 2,
+       "volumeConfigurations": [
+            {
+                "name": "myEbsVolume",
+                "managedEBSVolume": {
+                    "roleArn":"arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                    "volumeType": "gp3",
+                    "sizeInGiB": 100,
+                    "iops": 3000, 
+                    "throughput": 125, 
+                    "filesystemType": "ext4"
+                }
+            }
+       ]
+    }
+
+Output:: 
+
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/mycluster/my-http-service",
+            "serviceName": "my-http-service",
+            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/mycluster",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 2,
+            "pendingCount": 0,
+            "launchType": "FARGATE",
+            "platformVersion": "LATEST",
+            "platformFamily": "Linux",
+            "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:1",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": true,
+                    "rollback": true
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100,
+                "alarms": {
+                    "alarmNames": [],
+                    "rollback": false,
+                    "enable": false
+                }
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/2420458347226626275",
+                    "status": "PRIMARY",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:1",
+                    "desiredCount": 0,
+                    "pendingCount": 0,
+                    "runningCount": 0,
+                    "failedTasks": 0,
+                    "createdAt": "2025-02-21T15:07:20.519000-06:00",
+                    "updatedAt": "2025-02-21T15:07:20.519000-06:00",
+                    "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321",
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "IN_PROGRESS",
+                    "rolloutStateReason": "ECS deployment ecs-svc/2420458347226626275 in progress.",
+                    "volumeConfigurations": [
+                        {
+                            "name": "ebs-volume",
+                            "managedEBSVolume": {
+                                "volumeType": "gp3",
+                                "sizeInGiB": 100,
+                                "iops": 3000,
+                                "throughput": 125,
+                                "roleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                                "filesystemType": "ext4"
+                            }
+                        }  
+                    ]
+                },
+                {
+                    "id": "ecs-svc/5191625155316533644",
+                    "status": "ACTIVE",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:2",
+                    "desiredCount": 2,
+                    "pendingCount": 0,
+                    "runningCount": 2,
+                    "failedTasks": 0,
+                    "createdAt": "2025-02-21T14:54:48.862000-06:00",
+                    "updatedAt": "2025-02-21T14:57:22.502000-06:00",
+                    "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "COMPLETED",
+                    "rolloutStateReason": "ECS deployment ecs-svc/5191625155316533644 completed."
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [
+                {
+                    "id": "b5823113-c2c5-458e-9649-8c2ed38f23a5",
+                    "createdAt": "2025-02-21T14:57:22.508000-06:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "b05a48e8-da35-4074-80aa-37ceb3167357",
+                    "createdAt": "2025-02-21T14:57:22.507000-06:00",
+                    "message": "(service my-http-service) (deployment ecs-svc/5191625155316533644) deployment completed."
+                },
+                {
+                    "id": "a10cd55d-4ba6-4cea-a655-5a5d32ada8a0",
+                    "createdAt": "2025-02-21T14:55:32.833000-06:00",
+                    "message": "(service my-http-service) has started 1 tasks: (task fb9c8df512684aec92f3c57dc3f22361)."
+                },
+            ],
+            "createdAt": "2025-02-21T14:54:48.862000-06:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-12344321"
+                    ],
+                    "securityGroups": [
+                        "sg-12344321"
+                    ],
+                    "assignPublicIp": "ENABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:role/AIDACKCEVSQ6C2EXAMPLE",
+            "enableECSManagedTags": true,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "ENABLED"
+        }
+    }
+
+
+For more information, see `Use Amazon EBS volumes with Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html>`__ in the *Amazon ECS Developer Guide*.
+   
+**Example 4: To update a service to no longer use Amazon EBS volumes**
+
+The following ``update-service`` example updates the service ``my-http-service`` to no longer use Amazon EBS volumes. You must specify a task definition revision with ``configuredAtLaunch`` set to ``false``. ::
+    
+    aws ecs update-service \
+        --cluster mycluster \
+        --task-definition mytaskdef \
+        --service my-http-service \
+        --desired-count 2 \
+        --volume-configurations "[]"
+
+Output::
+
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/mycluster/my-http-service",
+            "serviceName": "my-http-service",
+            "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/mycluster",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 2,
+            "pendingCount": 0,
+            "launchType": "FARGATE",
+            "platformVersion": "LATEST",
+            "platformFamily": "Linux",
+            "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:3",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": true,
+                    "rollback": true
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100,
+                "alarms": {
+                    "alarmNames": [],
+                    "rollback": false,
+                    "enable": false
+                }
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/7522791612543716777",
+                    "status": "PRIMARY",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:3",
+                    "desiredCount": 0,
+                    "pendingCount": 0,
+                    "runningCount": 0,
+                    "failedTasks": 0,
+                    "createdAt": "2025-02-21T15:25:38.598000-06:00",
+                    "updatedAt": "2025-02-21T15:25:38.598000-06:00",
+                        "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "IN_PROGRESS",
+                    "rolloutStateReason": "ECS deployment ecs-svc/7522791612543716777 in progress."
+                },
+                {
+                    "id": "ecs-svc/2420458347226626275",
+                    "status": "ACTIVE",
+                    "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/myoldtaskdef:1",
+                    "desiredCount": 2,
+                    "pendingCount": 0,
+                    "runningCount": 2,
+                    "failedTasks": 0,
+                    "createdAt": "2025-02-21T15:07:20.519000-06:00",
+                    "updatedAt": "2025-02-21T15:10:59.955000-06:00",
+                    "launchType": "FARGATE",
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-12344321"
+                            ],
+                            "securityGroups": [
+                                "sg-12344321"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "COMPLETED",
+                    "rolloutStateReason": "ECS deployment ecs-svc/2420458347226626275 completed.",
+                    "volumeConfigurations": [
+                        {
+                            "name": "ebs-volume",
+                            "managedEBSVolume": {
+                                "volumeType": "gp3",
+                                "sizeInGiB": 100,
+                                "iops": 3000,
+                                "throughput": 125,
+                                "roleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole",
+                                "filesystemType": "ext4"
+                            }
+                        }
+                    ]
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [
+                {
+                    "id": "4f2c3ca1-7800-4048-ba57-bba210ada2ad",
+                    "createdAt": "2025-02-21T15:10:59.959000-06:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "4b36a593-2d40-4ed6-8be8-b9b699eb6198",
+                    "createdAt": "2025-02-21T15:10:59.958000-06:00",
+                    "message": "(service my-http-service) (deployment ecs-svc/2420458347226626275) deployment completed."
+                },
+                {
+                    "id": "88380089-14e2-4ef0-8dbb-a33991683371",
+                    "createdAt": "2025-02-21T15:09:39.055000-06:00",
+                    "message": "(service my-http-service) has stopped 1 running tasks: (task fb9c8df512684aec92f3c57dc3f22361)."
+                },
+                {
+                    "id": "97d84243-d52f-4255-89bb-9311391c61f6",
+                    "createdAt": "2025-02-21T15:08:57.653000-06:00",
+                    "message": "(service my-http-service) has stopped 1 running tasks: (task 33eff090ad2c40539daa837e6503a9bc)."
+                },
+                {
+                    "id": "672ece6c-e2d0-4021-b5da-eefb14001687",
+                    "createdAt": "2025-02-21T15:08:15.631000-06:00",
+                    "message": "(service my-http-service) has started 1 tasks: (task 996c02a66ff24f3190a4a8e0c841740f)."
+                },
+                {
+                    "id": "a3cf9bea-9be6-4175-ac28-4c68360986eb",
+                    "createdAt": "2025-02-21T15:07:36.931000-06:00",
+                    "message": "(service my-http-service) has started 1 tasks: (task d5d23c39f89e46cf9a647b9cc6572feb)."
+                },
+                {
+                    "id": "b5823113-c2c5-458e-9649-8c2ed38f23a5",
+                    "createdAt": "2025-02-21T14:57:22.508000-06:00",
+                    "message": "(service my-http-service) has reached a steady state."
+                },
+                {
+                    "id": "b05a48e8-da35-4074-80aa-37ceb3167357",
+                    "createdAt": "2025-02-21T14:57:22.507000-06:00",
+                    "message": "(service my-http-service) (deployment ecs-svc/5191625155316533644) deployment completed."
+                },
+                {
+                    "id": "a10cd55d-4ba6-4cea-a655-5a5d32ada8a0",
+                    "createdAt": "2025-02-21T14:55:32.833000-06:00",
+                    "message": "(service my-http-service) has started 1 tasks: (task fb9c8df512684aec92f3c57dc3f22361)."
+                },
+                {
+                    "id": "42da91fa-e26d-42ef-88c3-bb5965c56b2f",
+                    "createdAt": "2025-02-21T14:55:02.703000-06:00",
+                    "message": "(service my-http-service) has started 1 tasks: (task 33eff090ad2c40539daa837e6503a9bc)."
+                }
+            ],
+            "createdAt": "2025-02-21T14:54:48.862000-06:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-12344321"
+                    ],
+                    "securityGroups": [
+                        "sg-12344321"
+                    ],
+                    "assignPublicIp": "ENABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:role/AIDACKCEVSQ6C2EXAMPLE",
+            "enableECSManagedTags": true,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "ENABLED"
+        }
+    }
+
+For more information, see `Use Amazon EBS volumes with Amazon ECS <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-volumes.html>`__ in the *Amazon ECS Developer Guide*.
+
+**Example 5: To turn on Availability Zone rebalancing for a service**
+
+The following ``update-service`` example turns on Availability Zone rebalancing for the service ``my-http-service``. ::
+
+    aws ecs update-service \
+        --cluster MyCluster \
+        --service my-http-service \
+        --availability-zone-rebalancing ENABLED
+
+Output::
 
-    aws ecs update-service --service my-http-service --desired-count 3
+    {
+        "service": {
+            "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/my-http-service",
+            "serviceName": "my-http-service",
+            "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster",
+            "loadBalancers": [],
+            "serviceRegistries": [],
+            "status": "ACTIVE",
+            "desiredCount": 2,
+            "runningCount": 1,
+            "pendingCount": 0,
+            "capacityProviderStrategy": [
+                {
+                    "capacityProvider": "FARGATE",
+                    "weight": 1,
+                    "base": 0
+                }
+            ],
+            "platformVersion": "LATEST",
+            "platformFamily": "Linux",
+            "taskDefinition": "arn:aws:ecs:us-east-1:123456789012:task-definition/MyTaskDefinition",
+            "deploymentConfiguration": {
+                "deploymentCircuitBreaker": {
+                    "enable": true,
+                    "rollback": true
+                },
+                "maximumPercent": 200,
+                "minimumHealthyPercent": 100,
+                "alarms": {
+                    "alarmNames": [],
+                    "rollback": false,
+                    "enable": false
+                }
+            },
+            "deployments": [
+                {
+                    "id": "ecs-svc/1976744184940610707",
+                    "status": "PRIMARY",
+                    "taskkDefinition": "arn:aws:ecs:us-east-1:123456789012:task-definition/MyTaskDefinition",
+                    "desiredCount": 1,
+                    "pendingCount": 0,
+                    "runningCount": 1,
+                    "failedTasks": 0,
+                    "createdAt": "2024-12-03T16:24:25.225000-05:00",
+                    "updatedAt": "2024-12-03T16:25:15.837000-05:00",
+                    "capacityProviderStrategy": [
+                        {
+                            "capacityProvider": "FARGATE",
+                            "weight": 1,
+                            "base": 0
+                        }
+                    ],
+                    "platformVersion": "1.4.0",
+                    "platformFamily": "Linux",
+                    "networkConfiguration": {
+                        "awsvpcConfiguration": {
+                            "subnets": [
+                                "subnet-0d0eab1bb38d5ca64",
+                                "subnet-0db5010045995c2d5"
+                            ],
+                            "securityGroups": [
+                                "sg-02556bf85a191f59a"
+                            ],
+                            "assignPublicIp": "ENABLED"
+                        }
+                    },
+                    "rolloutState": "COMPLETED",
+                    "rolloutStateReason": "ECS deployment ecs-svc/1976744184940610707 completed."
+                }
+            ],
+            "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
+            "events": [],
+            "createdAt": "2024-12-03T16:24:25.225000-05:00",
+            "placementConstraints": [],
+            "placementStrategy": [],
+            "networkConfiguration": {
+                "awsvpcConfiguration": {
+                    "subnets": [
+                        "subnet-0d0eab1bb38d5ca64",
+                        "subnet-0db5010045995c2d5"
+                    ],
+                    "securityGroups": [
+                        "sg-02556bf85a191f59a"
+                    ],
+                    "assignPublicIp": "ENABLED"
+                }
+            },
+            "healthCheckGracePeriodSeconds": 0,
+            "schedulingStrategy": "REPLICA",
+            "deploymentController": {
+                "type": "ECS"
+            },
+            "createdBy": "arn:aws:iam::123456789012:role/Admin",
+            "enableECSManagedTags": true,
+            "propagateTags": "NONE",
+            "enableExecuteCommand": false,
+            "availabilityZoneRebalancing": "ENABLED"
+        }
+    }
 
-For more information, see `Updating a Service <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html>`_ in the *Amazon ECS Developer Guide*.
\ No newline at end of file
+For more information, see `Updating an Amazon ECS service using the console <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service-console-v2.html>`__ in the *Amazon ECS Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ecs/wait/services-inactive.rst 2.31.35-1/awscli/examples/ecs/wait/services-inactive.rst
--- 2.23.6-1/awscli/examples/ecs/wait/services-inactive.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/wait/services-inactive.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,9 @@
+**Wait until an ECS service becomes inactive**
+
+The following ``service-inactive`` example waits until ECS services becomes inactive in the cluster. ::
+
+    aws ecs wait services-inactive \
+        --cluster MyCluster \
+        --services MyService 
+
+This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/ecs/wait/task-stopped.rst 2.31.35-1/awscli/examples/ecs/wait/task-stopped.rst
--- 2.23.6-1/awscli/examples/ecs/wait/task-stopped.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ecs/wait/task-stopped.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+**Example 1: Wait until an ECS task is in stopped state**
+
+The following ``wait tasks-stopped`` example waits until the provided tasks in the command are in a stopped state. You can pass IDs or full ARN of the tasks. This example uses ID of the task. ::
+
+    aws ecs wait tasks-stopped \
+        --cluster MyCluster \ 
+        --tasks 2c196f0a00dd4f58b7c8897a5c7bce13
+
+This command produces no output.
+
+**Example 2: Wait until multiple ECS tasks are in stopped state**
+
+The following ``wait tasks-stopped`` example waits until the multiple tasks provided in the command are in a stopped state. You can pass IDs or full ARN of the tasks. This example uses IDs of the tasks. ::
+
+    aws ecs wait tasks-stopped \
+        --cluster MyCluster \ 
+        --tasks 2c196f0a00dd4f58b7c8897a5c7bce13 4d590253bb114126b7afa7b58EXAMPLE
+
+This command produces no output.
+
+
+
diff -pruN 2.23.6-1/awscli/examples/eks/associate-access-policy.rst 2.31.35-1/awscli/examples/eks/associate-access-policy.rst
--- 2.23.6-1/awscli/examples/eks/associate-access-policy.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/associate-access-policy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To associate an access policy and its scope to the access entry of the cluster**
+
+The following ``associate-access-policy`` associates an access policy and its scope to the access entry of the specified cluster. ::
+
+    aws eks associate-access-policy \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/Admin \
+        --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \
+        --access-scope type=namespace,namespaces=default
+
+Output::
+
+    {
+        "clusterName": "eks-customer",
+        "principalArn": "arn:aws:iam::111122223333:role/Admin",
+        "associatedAccessPolicy": {
+            "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy",
+            "accessScope": {
+                "type": "namespace",
+                "namespaces": [
+                    "default"
+                ]
+            },
+            "associatedAt": "2025-05-24T15:59:51.981000-05:00",
+            "modifiedAt": "2025-05-24T15:59:51.981000-05:00"
+        }
+    }
+
+For more information, see `Associate access policies with access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/create-access-entry.rst 2.31.35-1/awscli/examples/eks/create-access-entry.rst
--- 2.23.6-1/awscli/examples/eks/create-access-entry.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/create-access-entry.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,54 @@
+**Example 1: To create the access entry for EKS cluster**
+
+The following ``create-access-entry`` example creates an access entry that allows an IAM principal to access the EKS cluster. ::
+
+    aws eks create-access-entry \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:user/eks-user
+
+Output::
+
+    {
+        "accessEntry": {
+            "clusterName": "eks-customer",
+            "principalArn": "arn:aws:iam::111122223333:user/eks-user",
+            "kubernetesGroups": [],
+            "accessEntryArn": "arn:aws:eks:us-west-2:111122223333:access-entry/eks-customer/user/111122223333/eks-user/a1b2c3d4-5678-90ab-cdef-a6506e3d36p0",
+            "createdAt": "2025-04-14T22:45:48.097000-05:00",
+            "modifiedAt": "2025-04-14T22:45:48.097000-05:00",
+            "tags": {},
+            "username": "arn:aws:iam::111122223333:user/eks-user",
+            "type": "STANDARD"
+        }
+    }
+
+For more information, see `Create access entries <https://docs.aws.amazon.com/eks/latest/userguide/creating-access-entries.html>`__ in the *Amazon EKS User Guide*.
+
+**Example 2: To create the access entry for EKS cluster by specifying the type of access entry**
+
+The following ``create-access-entry`` example creates an access entry of type ``EC2_LINUX`` in the EKS cluster. By default, a type ``STANDARD`` access entry is created. Apart from the default, if we specify any other access entry types, an IAM role ARN needs to be passed in the CLI. ::
+
+    aws eks create-access-entry \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/admin-test-ip \
+        --type EC2_LINUX
+
+Output::
+
+    {
+        "accessEntry": {
+            "clusterName": "eks-customer",
+            "principalArn": "arn:aws:iam::111122223333:role/admin-test-ip",
+            "kubernetesGroups": [
+                "system:nodes"
+            ],
+            "accessEntryArn": "arn:aws:eks:us-west-2:111122223333:access-entry/eks-customer/role/111122223333/admin-test-ip/accb5418-f493-f390-3e6e-c3f19f725fcp",
+            "createdAt": "2025-05-06T19:42:45.453000-05:00",
+            "modifiedAt": "2025-05-06T19:42:45.453000-05:00",
+            "tags": {},
+            "username": "system:node:{{EC2PrivateDNSName}}",
+            "type": "EC2_LINUX"
+        }
+    }
+
+For more information, see `Create access entries <https://docs.aws.amazon.com/eks/latest/userguide/creating-access-entries.html>`__ in the *Amazon EKS User Guide*.
diff -pruN 2.23.6-1/awscli/examples/eks/create-pod-identity-association.rst 2.31.35-1/awscli/examples/eks/create-pod-identity-association.rst
--- 2.23.6-1/awscli/examples/eks/create-pod-identity-association.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/create-pod-identity-association.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,59 @@
+**Example 1: To create an EKS Pod Identity association in EKS cluster**
+
+The following ``create-pod-identity-association`` example creates an EKS Pod Identity association between a service account in the EKS cluster and an IAM role. ::
+
+    aws eks create-pod-identity-association \
+        --cluster-name eks-customer \
+        --namespace default \
+        --service-account default \
+        --role-arn arn:aws:iam::111122223333:role/my-role
+
+Output::
+
+    {
+        "association": {
+            "clusterName": "eks-customer",
+            "namespace": "default",
+            "serviceAccount": "default",
+            "roleArn": "arn:aws:iam::111122223333:role/my-role",
+            "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-8mvwvh57cu74mgcst",
+            "associationId": "a-8mvwvh57cu74mgcst",
+            "tags": {},
+            "createdAt": "2025-05-24T19:40:13.961000-05:00",
+            "modifiedAt": "2025-05-24T19:40:13.961000-05:00"
+        }
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
+
+**Example 2: To create an EKS Pod Identity association in EKS cluster with tags**
+
+The following ``create-pod-identity-association`` creates an EKS Pod Identity association between a service account and an IAM role in the EKS cluster with tags. ::
+
+    aws eks create-pod-identity-association \
+        --cluster-name eks-customer \
+        --namespace default \
+        --service-account default \
+        --role-arn arn:aws:iam::111122223333:role/my-role \
+        --tags Key1=value1,Key2=value2
+
+Output::
+
+    {
+        "association": {
+            "clusterName": "eks-customer",
+            "namespace": "default",
+            "serviceAccount": "default",
+            "roleArn": "arn:aws:iam::111122223333:role/my-role",
+            "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-9njjin9gfghecgoda",
+            "associationId": "a-9njjin9gfghecgoda",
+            "tags": {
+                "Key2": "value2",
+                "Key1": "value1"
+            },
+            "createdAt": "2025-05-24T19:52:14.135000-05:00",
+            "modifiedAt": "2025-05-24T19:52:14.135000-05:00"
+        }
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/delete-access-entry.rst 2.31.35-1/awscli/examples/eks/delete-access-entry.rst
--- 2.23.6-1/awscli/examples/eks/delete-access-entry.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/delete-access-entry.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To delete an access entry associated with the cluster**
+
+The following ``delete-access-entry`` deletes an access entry associated with the EKS cluster named ``eks-customer``. ::
+
+    aws eks delete-access-entry \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/Admin
+
+This command produces no output.
+
+For more information, see `Delete access entries <https://docs.aws.amazon.com/eks/latest/userguide/deleting-access-entries.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/delete-pod-identity-association.rst 2.31.35-1/awscli/examples/eks/delete-pod-identity-association.rst
--- 2.23.6-1/awscli/examples/eks/delete-pod-identity-association.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/delete-pod-identity-association.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+**To delete the EKS Pod Identity association**
+
+The following ``delete-pod-identity-association`` example deletes the EKS Pod Identity association with association ID ``a-9njjin9gfghecgocd`` from the EKS cluster named ``eks-customer``. ::
+
+    aws eks delete-pod-identity-association \
+        --cluster-name eks-customer \
+        --association-id a-9njjin9gfghecgocd
+
+Output::
+
+    {
+        "association": {
+            "clusterName": "eks-customer",
+            "namespace": "default",
+            "serviceAccount": "default",
+            "roleArn": "arn:aws:iam::111122223333:role/s3-role",
+            "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-9njjin9gfghecgocd",
+            "associationId": "a-9njjin9gfghecgocd",
+            "tags": {
+                "Key2": "value2",
+                "Key1": "value1"
+            },
+            "createdAt": "2025-05-24T19:52:14.135000-05:00",
+            "modifiedAt": "2025-05-25T21:10:56.923000-05:00"
+        }
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/describe-access-entry.rst 2.31.35-1/awscli/examples/eks/describe-access-entry.rst
--- 2.23.6-1/awscli/examples/eks/describe-access-entry.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/describe-access-entry.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+**To describe the access entry for EKS cluster**
+
+The following ``describe-access-entry`` example describes an access entry for the EKS cluster. ::
+
+    aws eks describe-access-entry \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:user/eks-admin-user
+
+Output::
+
+    {
+        "accessEntry": {
+            "clusterName": "eks-customer",
+            "principalArn": "arn:aws:iam::111122223333:user/eks-admin-user",
+            "kubernetesGroups": [],
+            "accessEntryArn": "arn:aws:eks:us-west-2:111122223333:access-entry/eks-customer/user/111122223333/eks-admin-user/0acb1bc6-cb0a-ede6-11ae-a6506e3d36p0",
+            "createdAt": "2025-04-14T22:45:48.097000-05:00",
+            "modifiedAt": "2025-04-14T22:45:48.097000-05:00",
+            "tags": {},
+            "username": "arn:aws:iam::111122223333:user/eks-admin-user",
+            "type": "STANDARD"
+        }
+    }
+
+For more information, see `Grant IAM users access to Kubernetes with EKS access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/describe-insight.rst 2.31.35-1/awscli/examples/eks/describe-insight.rst
--- 2.23.6-1/awscli/examples/eks/describe-insight.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/describe-insight.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,36 @@
+**To get the details of an insight for an EKS cluster using its ID**
+
+The following ``describe-insight`` example returns the details about the insight specified using the cluster name and insight ID. ::
+
+    aws eks describe-insight \
+        --cluster-name eks-customer \
+        --id 38ea7a64-a14f-4e0e-95c7-8dbcab3c3623
+
+Output::
+
+    {
+        "insight": {
+            "id": "38ea7a64-a14f-4e0e-95c7-8dbcab3c3623",
+            "name": "Kubelet version skew",
+            "category": "UPGRADE_READINESS",
+            "kubernetesVersion": "1.33",
+            "lastRefreshTime": "2025-05-24T11:22:50-05:00",
+            "lastTransitionTime": "2025-05-24T11:22:50-05:00",
+            "description": "Checks for kubelet versions of worker nodes in the cluster to see if upgrade would cause noncompliance with supported Kubernetes kubelet version skew policy.",
+            "insightStatus": {
+                "status": "PASSING",
+                "reason": "Node kubelet versions match the cluster control plane version."
+            },
+            "recommendation": "Upgrade your worker nodes to match the Kubernetes version of your cluster control plane.",
+            "additionalInfo": {
+                "Kubelet version skew policy": "https://kubernetes.io/releases/version-skew-policy/#kubelet",
+                "Updating a managed node group": "https://docs.aws.amazon.com/eks/latest/userguide/update-managed-node-group.html"
+            },
+            "resources": [],
+            "categorySpecificSummary": {
+                "deprecationDetails": []
+            }
+        }
+    }
+
+For more information, see `View cluster insights <https://docs.aws.amazon.com/eks/latest/userguide/view-cluster-insights.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/describe-pod-identity-association.rst 2.31.35-1/awscli/examples/eks/describe-pod-identity-association.rst
--- 2.23.6-1/awscli/examples/eks/describe-pod-identity-association.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/describe-pod-identity-association.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+**To provide the details about Pod Identity association**
+
+The following ``describe-pod-identity-association`` example describes a Pod Identity association in the EKS cluster. ::
+
+    aws eks describe-pod-identity-association \
+        --cluster-name eks-customer \
+        --association-id a-9njjin9gfghecgocd
+
+Output::
+
+    {
+        "association": {
+            "clusterName": "eks-customer",
+            "namespace": "default",
+            "serviceAccount": "default",
+            "roleArn": "arn:aws:iam::111122223333:role/my-role",
+            "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-9njjin9gfghecgocd",
+            "associationId": "a-9njjin9gfghecgocd",
+            "tags": {
+                "Key2": "value2",
+                "Key1": "value1"
+            },
+            "createdAt": "2025-05-24T19:52:14.135000-05:00",
+            "modifiedAt": "2025-05-24T19:52:14.135000-05:00"
+        }
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/disassociate-access-policy.rst 2.31.35-1/awscli/examples/eks/disassociate-access-policy.rst
--- 2.23.6-1/awscli/examples/eks/disassociate-access-policy.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/disassociate-access-policy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+**To disassociate the access policy from an access entry**
+
+The following ``disassociate-access-policy`` removes the access policy associated with the access entry. ::
+
+    aws eks disassociate-access-policy \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/Admin \
+        --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy
+
+This command produces no output.
+
+For more information, see `Associate access policies with access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/list-access-entries.rst 2.31.35-1/awscli/examples/eks/list-access-entries.rst
--- 2.23.6-1/awscli/examples/eks/list-access-entries.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/list-access-entries.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+**To list the access entries for an EKS cluster**
+
+The following ``list-access-entries`` returns the list of access entries associated with the EKS cluster ``eks-customer``. ::
+
+    aws eks list-access-entries \
+        --cluster-name eks-customer
+
+Output::
+
+    {
+        "accessEntries": [
+            "arn:aws:iam::111122223333:role/Admin",
+            "arn:aws:iam::111122223333:role/admin-test-ip",
+            "arn:aws:iam::111122223333:role/assume-worker-node-role",
+            "arn:aws:iam::111122223333:user/eks-admin-user"
+        ]
+    }
+
+For more information, see `Grant IAM users access to Kubernetes with EKS access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/list-access-policies.rst 2.31.35-1/awscli/examples/eks/list-access-policies.rst
--- 2.23.6-1/awscli/examples/eks/list-access-policies.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/list-access-policies.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,90 @@
+**To list all available access policies**
+
+This ``list-access-policies`` example returns the list of all available access policies. ::
+
+    aws eks list-access-policies
+
+Output::
+
+    {
+        "accessPolicies": [
+            {
+                "name": "AmazonEKSAdminPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy"
+            },
+            {
+                "name": "AmazonEKSAdminViewPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminViewPolicy"
+            },
+            {
+                "name": "AmazonEKSAutoNodePolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy"
+            },
+            {
+                "name": "AmazonEKSBlockStorageClusterPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSBlockStorageClusterPolicy"
+            },
+            {
+                "name": "AmazonEKSBlockStoragePolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSBlockStoragePolicy"
+            },
+            {
+                "name": "AmazonEKSClusterAdminPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy"
+            },
+            {
+                "name": "AmazonEKSComputeClusterPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSComputeClusterPolicy"
+            },
+            {
+                "name": "AmazonEKSComputePolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSComputePolicy"
+            },
+            {
+                "name": "AmazonEKSEditPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy"
+            },
+            {
+                "name": "AmazonEKSHybridPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSHybridPolicy"
+            },
+            {
+                "name": "AmazonEKSLoadBalancingClusterPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSLoadBalancingClusterPolicy"
+            },
+            {
+                "name": "AmazonEKSLoadBalancingPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSLoadBalancingPolicy"
+            },
+            {
+                "name": "AmazonEKSNetworkingClusterPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSNetworkingClusterPolicy"
+            },
+            {
+                "name": "AmazonEKSNetworkingPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSNetworkingPolicy"
+            },
+            {
+                "name": "AmazonEKSViewPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy"
+            },
+            {
+                "name": "AmazonEMRJobPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonEMRJobPolicy"
+            },
+            {
+                "name": "AmazonSagemakerHyperpodClusterPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonSagemakerHyperpodClusterPolicy"
+            },
+            {
+                "name": "AmazonSagemakerHyperpodControllerPolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonSagemakerHyperpodControllerPolicy"
+            },
+            {
+                "name": "AmazonSagemakerHyperpodSystemNamespacePolicy",
+                "arn": "arn:aws:eks::aws:cluster-access-policy/AmazonSagemakerHyperpodSystemNamespacePolicy"
+            }
+        ]
+    }
+
+For more information, see `Associate access policies with access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/list-associated-access-policies.rst 2.31.35-1/awscli/examples/eks/list-associated-access-policies.rst
--- 2.23.6-1/awscli/examples/eks/list-associated-access-policies.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/list-associated-access-policies.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To list the access policies associated with an access entry**
+
+The following ``list-associated-access-policies`` example returns the list of access policies associated with an access entry in the EKS cluster. ::
+
+    aws eks list-associated-access-policies \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/Admin
+
+Output::
+
+    {
+        "associatedAccessPolicies": [
+            {
+                "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy",
+                "accessScope": {
+                    "type": "cluster",
+                    "namespaces": []
+                },
+                "associatedAt": "2025-05-24T17:26:22.935000-05:00",
+                "modifiedAt": "2025-05-24T17:26:22.935000-05:00"
+            }
+        ],
+        "clusterName": "eks-customer",
+        "principalArn": "arn:aws:iam::111122223333:role/Admin"
+    }
+
+For more information, see `Grant IAM users access to Kubernetes with EKS access entries <https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/list-insights.rst 2.31.35-1/awscli/examples/eks/list-insights.rst
--- 2.23.6-1/awscli/examples/eks/list-insights.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/list-insights.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,67 @@
+**To list all insights for the specified cluster**
+
+The following ``list-insights`` example returns the list of all insights checked against the specified cluster. ::
+
+    aws eks list-insights \
+    --cluster-name eks-customer
+
+Output::
+
+    {
+        "insights": [
+            {
+                "id": "38ea7a64-a14f-4e0e-95c7-8dbcab3c3616",
+                "name": "Kubelet version skew",
+                "category": "UPGRADE_READINESS",
+                "kubernetesVersion": "1.33",
+                "lastRefreshTime": "2025-05-24T11:22:50-05:00",
+                "lastTransitionTime": "2025-05-24T11:22:50-05:00",
+                "description": "Checks for kubelet versions of worker nodes in the cluster to see if upgrade would cause noncompliance with supported Kubernetes kubelet version skew policy.",
+                "insightStatus": {
+                    "status": "PASSING",
+                    "reason": "Node kubelet versions match the cluster control plane version."
+                }
+            },
+            {
+                "id": "9cd91472-f99c-45a9-b7d7-54d4900dee23",
+                "name": "EKS add-on version compatibility",
+                "category": "UPGRADE_READINESS",
+                "kubernetesVersion": "1.33",
+                "lastRefreshTime": "2025-05-24T11:22:59-05:00",
+                "lastTransitionTime": "2025-05-24T11:22:50-05:00",
+                "description": "Checks version of installed EKS add-ons to ensure they are compatible with the next version of Kubernetes. ",
+                "insightStatus": {
+                    "status": "PASSING",
+                    "reason": "All installed EKS add-on versions are compatible with next Kubernetes version."
+                }
+            },
+            {
+                "id": "0deb269d-b1e1-458c-a2b4-7a57f940c875",
+                "name": "Cluster health issues",
+                "category": "UPGRADE_READINESS",
+                "kubernetesVersion": "1.33",
+                "lastRefreshTime": "2025-05-24T11:22:59-05:00",
+                "lastTransitionTime": "2025-05-24T11:22:50-05:00",
+                "description": "Checks for any cluster health issues that prevent successful upgrade to the next Kubernetes version on EKS.",
+                "insightStatus": {
+                    "status": "PASSING",
+                    "reason": "No cluster health issues detected."
+                }
+            },
+            {
+                "id": "214fa274-344f-420b-812a-5049ce72c9ww",
+                "name": "kube-proxy version skew",
+                "category": "UPGRADE_READINESS",
+                "kubernetesVersion": "1.33",
+                "lastRefreshTime": "2025-05-24T11:22:50-05:00",
+                "lastTransitionTime": "2025-05-24T11:22:50-05:00",
+                "description": "Checks version of kube-proxy in cluster to see if upgrade would cause noncompliance with supported Kubernetes kube-proxy version skew policy.",
+                "insightStatus": {
+                    "status": "PASSING",
+                    "reason": "kube-proxy versions match the cluster control plane version."
+                }
+            }
+        ]
+    }
+
+For more information, see `View cluster insights <https://docs.aws.amazon.com/eks/latest/userguide/view-cluster-insights.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/list-pod-identity-associations.rst 2.31.35-1/awscli/examples/eks/list-pod-identity-associations.rst
--- 2.23.6-1/awscli/examples/eks/list-pod-identity-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/list-pod-identity-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,61 @@
+**Example 1: To list the Pod Identity associations in an EKS cluster**
+
+The following ``list-pod-identity-associations`` returns the list of Pod Identity associations associated with the EKS cluster named ``eks-customer`` in all namespaces and service accounts. ::
+
+    aws eks list-pod-identity-associations \
+        --cluster-name eks-customer
+
+Output::
+
+    {
+        "associations": [
+            {
+                "clusterName": "eks-customer",
+                "namespace": "default",
+                "serviceAccount": "default",
+                "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-9njjin9gfghecgocd",
+                "associationId": "a-9njjin9gfghecgocd"
+            },
+            {
+                "clusterName": "eks-customer",
+                "namespace": "kube-system",
+                "serviceAccount": "eks-customer",
+                "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-dvtacahdvjn01ffbc",
+                "associationId": "a-dvtacahdvjn01ffbc"
+            },
+            {
+                "clusterName": "eks-customer",
+                "namespace": "kube-system",
+                "serviceAccount": "coredns",
+                "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-yrpsdroc4ei7k6xps",
+                "associationId": "a-yrpsdroc4ei7k6xps"
+            }
+        ]
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
+
+**Example 2: To list the Pod Identity associations in an EKS cluster based on namespace and service account**
+
+The following ``list-pod-identity-associations`` returns the list of Pod Identity associations in the EKS cluster based on namespace and service account. ::
+
+    aws eks list-pod-identity-associations \
+        --cluster-name eks-customer \
+        --namespace kube-system \
+        --service-account eks-customer
+
+Output::
+
+    {
+        "associations": [
+            {
+                "clusterName": "eks-customer",
+                "namespace": "kube-system",
+                "serviceAccount": "eks-customer",
+                "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-dvtacahdvjn01ffbc",
+                "associationId": "a-dvtacahdvjn01ffbc"
+            }
+        ]
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/update-access-entry.rst 2.31.35-1/awscli/examples/eks/update-access-entry.rst
--- 2.23.6-1/awscli/examples/eks/update-access-entry.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/update-access-entry.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+**To update an access entry for an EKS cluster**
+
+The following ``update-access-entry`` updates an access entry for the EKS cluster by adding the Kubernetes group ``tester``. ::
+
+    aws eks update-access-entry \
+        --cluster-name eks-customer \
+        --principal-arn arn:aws:iam::111122223333:role/Admin \
+        --kubernetes-groups tester
+
+Output::
+
+    {
+        "accessEntry": {
+            "clusterName": "eks-customer",
+            "principalArn": "arn:aws:iam::111122223333:role/Admin",
+            "kubernetesGroups": [
+                "tester"
+            ],
+            "accessEntryArn": "arn:aws:eks:us-west-2:111122223333:access-entry/eks-customer/role/111122223333/Admin/d2cb8183-d6ec-b82a-d967-eca21902a4b4",
+            "createdAt": "2025-05-24T11:02:04.432000-05:00",
+            "modifiedAt": "2025-05-24T17:08:01.608000-05:00",
+            "tags": {},
+            "username": "arn:aws:sts::111122223333:assumed-role/Admin/{{SessionName}}",
+            "type": "STANDARD"
+        }
+    }
+
+For more information, see `Update access entries <https://docs.aws.amazon.com/eks/latest/userguide/updating-access-entries.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/eks/update-kubeconfig/_description.rst 2.31.35-1/awscli/examples/eks/update-kubeconfig/_description.rst
--- 2.23.6-1/awscli/examples/eks/update-kubeconfig/_description.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/update-kubeconfig/_description.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,16 +4,16 @@ Note:
  To use the resulting configuration, you must have kubectl installed and in your PATH environment variable.
 
 This command constructs a configuration with prepopulated server and certificate authority data values for a specified cluster. 
-You can specify an IAM role ARN with the --role-arn option to use for authentication when you issue kubectl commands. 
+You can specify an IAM role ARN with the ``--role-arn`` option to use for authentication when you issue kubectl commands. 
 Otherwise, the IAM entity in your default AWS CLI or SDK credential chain is used. 
 You can view your default AWS CLI or SDK identity by running the ``aws sts get-caller-identity`` command.
 
 The resulting kubeconfig is created as a new file or merged with an existing kubeconfig file using the following logic:
 
-* If you specify a path with the --kubeconfig option, then the resulting configuration file is created there or merged with an existing kubeconfig at that location.
-* Or, if you have the KUBECONFIG environment variable set, then the resulting configuration file is created at the first entry in that variable or merged with an existing kubeconfig at that location. 
-* Otherwise, by default, the resulting configuration file is created at the default kubeconfig path (.kube/config) in your home directory or merged with an existing kubeconfig at that location.
+* If you specify a path with the ``--kubeconfig option``, then the resulting configuration file is created there or merged with an existing kubeconfig at that location.
+* Or, if you have the ``KUBECONFIG`` environment variable set, then the resulting configuration file is created at the first entry in that variable or merged with an existing kubeconfig at that location. 
+* Otherwise, by default, the resulting configuration file is created at the default kubeconfig path (``.kube/config``) in your home directory or merged with an existing kubeconfig at that location.
 * If a previous cluster configuration exists for an Amazon EKS cluster with the same name at the specified path, the existing configuration is overwritten with the new configuration.
 * When update-kubeconfig writes a configuration to a kubeconfig file, the current-context of the kubeconfig file is set to that configuration.
 
-You can use the --dry-run option to print the resulting configuration to stdout instead of writing it to the specified location.
+You can use the ``--dry-run`` option to print the resulting configuration to stdout instead of writing it to the specified location.
diff -pruN 2.23.6-1/awscli/examples/eks/update-pod-identity-association.rst 2.31.35-1/awscli/examples/eks/update-pod-identity-association.rst
--- 2.23.6-1/awscli/examples/eks/update-pod-identity-association.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/eks/update-pod-identity-association.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To update the EKS Pod Identity association**
+
+The following ``update-pod-identity-association`` example updates an EKS Pod Identity association by changing the associated IAM role from ``arn:aws:iam::111122223333:role/my-role`` to ``arn:aws:iam::111122223333:role/s3-role`` for association ID ``a-9njjin9gfghecgocd``. This API only allows updating the associated IAM role. ::
+
+    aws eks update-pod-identity-association \
+        --cluster-name eks-customer \
+        --association-id a-9njjin9gfghecgocd \
+        --role-arn arn:aws:iam::111122223333:role/s3-role
+
+Output::
+
+    {
+        "association": {
+            "clusterName": "eks-customer",
+            "namespace": "default",
+            "serviceAccount": "default",
+            "roleArn": "arn:aws:iam::111122223333:role/s3-role",
+            "associationArn": "arn:aws:eks:us-west-2:111122223333:podidentityassociation/eks-customer/a-9njjin9gfghecgocd",
+            "associationId": "a-9njjin9gfghecgocd",
+            "tags": {
+                "Key2": "value2",
+                "Key1": "value1"
+            },
+            "createdAt": "2025-05-24T19:52:14.135000-05:00",
+            "modifiedAt": "2025-05-25T21:01:53.120000-05:00"
+        }
+    }
+
+For more information, see `Learn how EKS Pod Identity grants pods access to AWS services <https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html>`__ in the *Amazon EKS User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/elasticbeanstalk/create-application-version.rst 2.31.35-1/awscli/examples/elasticbeanstalk/create-application-version.rst
--- 2.23.6-1/awscli/examples/elasticbeanstalk/create-application-version.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/elasticbeanstalk/create-application-version.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,9 @@
 
 The following command creates a new version, "v1" of an application named "MyApp"::
 
-  aws elasticbeanstalk create-application-version --application-name MyApp --version-label v1 --description MyAppv1 --source-bundle S3Bucket="my-bucket",S3Key="sample.war" --auto-create-application
+  aws elasticbeanstalk create-application-version --application-name MyApp --version-label v1 --description MyAppv1 --source-bundle S3Bucket="amzn-s3-demo-bucket",S3Key="sample.war" --auto-create-application
 
-The application will be created automatically if it does not already exist, due to the auto-create-application option. The source bundle is a .war file stored in an s3 bucket named "my-bucket" that contains the Apache Tomcat sample application.
+The application will be created automatically if it does not already exist, due to the auto-create-application option. The source bundle is a .war file stored in an s3 bucket named "amzn-s3-demo-bucket" that contains the Apache Tomcat sample application.
 
 Output::
 
@@ -16,7 +16,7 @@ Output::
         "DateCreated": "2015-02-03T23:01:25.412Z",
         "DateUpdated": "2015-02-03T23:01:25.412Z",
         "SourceBundle": {
-            "S3Bucket": "my-bucket",
+            "S3Bucket": "amzn-s3-demo-bucket",
             "S3Key": "sample.war"
         }
     }
diff -pruN 2.23.6-1/awscli/examples/elbv2/modify-listener.rst 2.31.35-1/awscli/examples/elbv2/modify-listener.rst
--- 2.23.6-1/awscli/examples/elbv2/modify-listener.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/elbv2/modify-listener.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,86 +1,95 @@
-**Example 1: To change the default action to a forward action**
-
-The following ``modify-listener`` example changes the default action (to a **forward** action)for the specified listener. ::
-
-    aws elbv2 modify-listener \
-        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2 \
-        --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f
-
-Output::
-
-    {
-        "Listeners": [
-            {
-                "Protocol": "HTTP",
-                "DefaultActions": [
-                    {
-                        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f",
-                        "Type": "forward"
-                    }
-                ],
-                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
-                "Port": 80,
-                "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2"
-            }
-        ]
-    }
-
-**Example 2: To change the default action to a redirect action**
-
-The following ``modify-listener`` example changes the default action to a **redirect** action for the specified listener. ::
-
-    aws elbv2 modify-listener \
-        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2 \
-        --default-actions Type=redirect,TargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f
-
-Output::
-
-    {
-    "Listeners": [
-        {
-            "Protocol": "HTTP",
-            "DefaultActions": [
-                {
-                    "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f",
-                    "Type": "redirect"
-                }
-            ],
-            "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
-            "Port": 80,
-            "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2"
-        }
-      ]
-    }
-
-**Example 3: To change the server certificate**
-
-This example changes the server certificate for the specified HTTPS listener. ::
-
-    aws elbv2 modify-listener \
-        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65 \
-        --certificates CertificateArn=arn:aws:iam::123456789012:server-certificate/my-new-server-cert
-
-Output::
-
-    {
-        "Listeners": [
-            {
-                "Protocol": "HTTPS",
-                "DefaultActions": [
-                    {
-                        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067",
-                        "Type": "forward"
-                    }
-                ],
-                "SslPolicy": "ELBSecurityPolicy-2015-05",
-                "Certificates": [
-                    {
-                        "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-new-server-cert"
-                    }
-                ],
-                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
-                "Port": 443,
-                "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65"
-            }
-        ]
-    }
\ No newline at end of file
+**Example 1: To change the default action to a forward action**
+
+The following ``modify-listener`` example changes the default action to a ``forward`` action for the specified listener. ::
+
+    aws elbv2 modify-listener \
+        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2 \
+        --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f
+
+Output::
+
+    {
+        "Listeners": [
+            {
+                "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2",
+                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
+                "Protocol": "HTTP",
+                "Port": 80,
+                "DefaultActions": [
+                    {
+                        "Type": "forward",
+                        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-new-targets/2453ed029918f21f"
+                    }
+                ]
+            }
+        ]
+    }
+
+**Example 2: To change the default action to a redirect action**
+
+The following ``modify-listener`` example changes the default action to a ``redirect`` action for the specified listener. ::
+
+    aws elbv2 modify-listener \
+        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2 \
+        --default-actions Type=redirect, RedirectConfig='{Protocol=HTTPS,StatusCode=HTTP_302}'
+
+Output::
+
+    {
+        "Listeners": [
+            {
+                "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/f2f7dc8efc522ab2",
+                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
+                "Protocol": "HTTP",
+                "Port": 80,
+                "DefaultActions": [
+                    {
+                        "Type": "redirect",
+                        "RedirectConfig": {
+                            "Protocol": "HTTPS",
+                            "Port": "#{port}",
+                            "Host": "#{host}",
+                            "Path": "/#{path}",
+                            "Query": "#{query}",
+                            "StatusCode": "HTTP_302",
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+
+**Example 3: To change the server certificate**
+
+The following ``modify-listener`` example changes the server certificate for the specified HTTPS listener. ::
+
+    aws elbv2 modify-listener \
+        --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65 \
+        --certificates CertificateArn=arn:aws:iam::123456789012:server-certificate/my-new-server-cert
+
+Output::
+
+    {
+        "Listeners": [
+            {
+                "ListenerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65",
+                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188",
+                "Protocol": "HTTPS",
+                "Port": 443,
+                "DefaultActions": [
+                    {
+                        "Type": "forward",
+                        "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067"
+                    }
+                ],
+                "SslPolicy": "ELBSecurityPolicy-2015-05",
+                "Certificates": [
+                    {
+                        "CertificateArn": "arn:aws:iam::123456789012:server-certificate/my-new-server-cert"
+                    }
+                ],
+            }
+        ]
+    }
+
+For more information, see `Listener rules <https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules>`__ in the *Application Load Balancers User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/emr/add-steps.rst 2.31.35-1/awscli/examples/emr/add-steps.rst
--- 2.23.6-1/awscli/examples/emr/add-steps.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr/add-steps.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,7 +2,7 @@
 
 - Command::
 
-    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://mybucket/mytest.jar,Args=arg1,arg2,arg3 Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://mybucket/mytest.jar,MainClass=mymainclass,Args=arg1,arg2,arg3
+    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://amzn-s3-demo-bucket/mytest.jar,Args=arg1,arg2,arg3 Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://amzn-s3-demo-bucket/mytest.jar,MainClass=mymainclass,Args=arg1,arg2,arg3
 
 - Required parameters::
 
@@ -25,7 +25,7 @@
 
 - Command::
 
-    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=STREAMING,Name='Streaming Program',ActionOnFailure=CONTINUE,Args=[-files,s3://elasticmapreduce/samples/wordcount/wordSplitter.py,-mapper,wordSplitter.py,-reducer,aggregate,-input,s3://elasticmapreduce/samples/wordcount/input,-output,s3://mybucket/wordcount/output]
+    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=STREAMING,Name='Streaming Program',ActionOnFailure=CONTINUE,Args=[-files,s3://elasticmapreduce/samples/wordcount/wordSplitter.py,-mapper,wordSplitter.py,-reducer,aggregate,-input,s3://elasticmapreduce/samples/wordcount/input,-output,s3://amzn-s3-demo-bucket/wordcount/output]
 
 - Required parameters::
 
@@ -40,7 +40,7 @@
     [
      {
        "Name": "JSON Streaming Step",
-       "Args": ["-files","s3://elasticmapreduce/samples/wordcount/wordSplitter.py","-mapper","wordSplitter.py","-reducer","aggregate","-input","s3://elasticmapreduce/samples/wordcount/input","-output","s3://mybucket/wordcount/output"],
+       "Args": ["-files","s3://elasticmapreduce/samples/wordcount/wordSplitter.py","-mapper","wordSplitter.py","-reducer","aggregate","-input","s3://elasticmapreduce/samples/wordcount/input","-output","s3://amzn-s3-demo-bucket/wordcount/output"],
        "ActionOnFailure": "CONTINUE",
        "Type": "STREAMING"
      }
@@ -72,15 +72,15 @@ NOTE: JSON arguments must include option
         "ActionOnFailure": "CONTINUE",
         "Args": [
             "-files",
-            "s3://mybucket/mapper.py,s3://mybucket/reducer.py",
+            "s3://amzn-s3-demo-bucket/mapper.py,s3://amzn-s3-demo-bucket/reducer.py",
             "-mapper",
             "mapper.py",
             "-reducer",
             "reducer.py",
             "-input",
-            "s3://mybucket/input",
+            "s3://amzn-s3-demo-bucket/input",
             "-output",
-            "s3://mybucket/output"]
+            "s3://amzn-s3-demo-bucket/output"]
      }
    ]
 
@@ -109,7 +109,7 @@ NOTE: JSON arguments must include option
 
 - Command::
 
-    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=HIVE,Name='Hive program',ActionOnFailure=CONTINUE,Args=[-f,s3://mybucket/myhivescript.q,-d,INPUT=s3://mybucket/myhiveinput,-d,OUTPUT=s3://mybucket/myhiveoutput,arg1,arg2] Type=HIVE,Name='Hive steps',ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://mybucket/hive-ads/output/2014-04-18/11-07-32,-d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs]
+    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=HIVE,Name='Hive program',ActionOnFailure=CONTINUE,Args=[-f,s3://amzn-s3-demo-bucket/myhivescript.q,-d,INPUT=s3://amzn-s3-demo-bucket/myhiveinput,-d,OUTPUT=s3://amzn-s3-demo-bucket/myhiveoutput,arg1,arg2] Type=HIVE,Name='Hive steps',ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/2014-04-18/11-07-32,-d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs]
 
 
 - Required parameters::
@@ -134,7 +134,7 @@ NOTE: JSON arguments must include option
 
 - Command::
 
-    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=PIG,Name='Pig program',ActionOnFailure=CONTINUE,Args=[-f,s3://mybucket/mypigscript.pig,-p,INPUT=s3://mybucket/mypiginput,-p,OUTPUT=s3://mybucket/mypigoutput,arg1,arg2] Type=PIG,Name='Pig program',Args=[-f,s3://elasticmapreduce/samples/pig-apache/do-reports2.pig,-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input,-p,OUTPUT=s3://mybucket/pig-apache/output,arg1,arg2]
+    aws emr add-steps --cluster-id j-XXXXXXXX --steps Type=PIG,Name='Pig program',ActionOnFailure=CONTINUE,Args=[-f,s3://amzn-s3-demo-bucket/mypigscript.pig,-p,INPUT=s3://amzn-s3-demo-bucket/mypiginput,-p,OUTPUT=s3://amzn-s3-demo-bucket/mypigoutput,arg1,arg2] Type=PIG,Name='Pig program',Args=[-f,s3://elasticmapreduce/samples/pig-apache/do-reports2.pig,-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input,-p,OUTPUT=s3://amzn-s3-demo-bucket/pig-apache/output,arg1,arg2]
 
 
 - Required parameters::
diff -pruN 2.23.6-1/awscli/examples/emr/create-cluster-examples.rst 2.31.35-1/awscli/examples/emr/create-cluster-examples.rst
--- 2.23.6-1/awscli/examples/emr/create-cluster-examples.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr/create-cluster-examples.rst	2025-11-12 19:17:29.000000000 +0000
@@ -369,7 +369,7 @@ The following ``create-cluster`` example
 The following example specifies the step inline. ::
 
     aws emr create-cluster \
-        --steps Type=STREAMING,Name='Streaming Program',ActionOnFailure=CONTINUE,Args=[-files,s3://elasticmapreduce/samples/wordcount/wordSplitter.py,-mapper,wordSplitter.py,-reducer,aggregate,-input,s3://elasticmapreduce/samples/wordcount/input,-output,s3://mybucket/wordcount/output] \
+        --steps Type=STREAMING,Name='Streaming Program',ActionOnFailure=CONTINUE,Args=[-files,s3://elasticmapreduce/samples/wordcount/wordSplitter.py,-mapper,wordSplitter.py,-reducer,aggregate,-input,s3://elasticmapreduce/samples/wordcount/input,-output,s3://amzn-s3-demo-bucket/wordcount/output] \
         --release-label emr-5.3.1 \
         --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large \
         --auto-terminate
@@ -397,7 +397,7 @@ Contents of ``multiplefiles.json``::
                 "-input",
                 "s3://elasticmapreduce/samples/wordcount/input",
                 "-output",
-                "s3://mybucket/wordcount/output"
+                "s3://amzn-s3-demo-bucket/wordcount/output"
             ],
             "ActionOnFailure": "CONTINUE",
             "Type": "STREAMING"
@@ -409,7 +409,7 @@ Contents of ``multiplefiles.json``::
 The following example add Hive steps when creating a cluster. Hive steps require parameters ``Type`` and ``Args``. Hive steps optional parameters are ``Name`` and ``ActionOnFailure``. ::
 
     aws emr create-cluster \
-        --steps Type=HIVE,Name='Hive program',ActionOnFailure=CONTINUE,ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://mybucket/hive-ads/output/2014-04-18/11-07-32,-d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs] \
+        --steps Type=HIVE,Name='Hive program',ActionOnFailure=CONTINUE,ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/2014-04-18/11-07-32,-d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs] \
         --applications Name=Hive \
         --release-label emr-5.3.1 \
         --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large
@@ -419,7 +419,7 @@ The following example add Hive steps whe
 The following example adds Pig steps when creating a cluster. Pig steps required parameters are ``Type`` and ``Args``. Pig steps optional parameters are ``Name`` and ``ActionOnFailure``. ::
 
     aws emr create-cluster \
-        --steps Type=PIG,Name='Pig program',ActionOnFailure=CONTINUE,Args=[-f,s3://elasticmapreduce/samples/pig-apache/do-reports2.pig,-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input,-p,OUTPUT=s3://mybucket/pig-apache/output] \
+        --steps Type=PIG,Name='Pig program',ActionOnFailure=CONTINUE,Args=[-f,s3://elasticmapreduce/samples/pig-apache/do-reports2.pig,-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input,-p,OUTPUT=s3://amzn-s3-demo-bucket/pig-apache/output] \
         --applications Name=Pig \
         --release-label emr-5.3.1 \
         --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large
@@ -429,7 +429,7 @@ The following example adds Pig steps whe
 The following ``create-cluster`` example runs two bootstrap actions defined as scripts that are stored in Amazon S3. ::
 
     aws emr create-cluster \
-        --bootstrap-actions Path=s3://mybucket/myscript1,Name=BootstrapAction1,Args=[arg1,arg2] Path=s3://mybucket/myscript2,Name=BootstrapAction2,Args=[arg1,arg2] \
+        --bootstrap-actions Path=s3://amzn-s3-demo-bucket/myscript1,Name=BootstrapAction1,Args=[arg1,arg2] Path=s3://amzn-s3-demo-bucket/myscript2,Name=BootstrapAction2,Args=[arg1,arg2] \
         --release-label emr-5.3.1 \
         --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large \
         --auto-terminate
diff -pruN 2.23.6-1/awscli/examples/emr/create-cluster-synopsis.txt 2.31.35-1/awscli/examples/emr/create-cluster-synopsis.txt
--- 2.23.6-1/awscli/examples/emr/create-cluster-synopsis.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr/create-cluster-synopsis.txt	2025-11-12 19:17:29.000000000 +0000
@@ -32,3 +32,4 @@
      [--managed-scaling-policy <value>]
      [--placement-group-configs <value>]
      [--auto-termination-policy <value>]
+     [--extended-support | --no-extended-support]
diff -pruN 2.23.6-1/awscli/examples/emr-containers/create-role-associations/_description.rst 2.31.35-1/awscli/examples/emr-containers/create-role-associations/_description.rst
--- 2.23.6-1/awscli/examples/emr-containers/create-role-associations/_description.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr-containers/create-role-associations/_description.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+Creates role associations of given IAM role with EMR service accounts such that it can be used with Amazon EMR on EKS with the given namespace from the given EKS cluster.
+
+Note:
+The command would associate EMR service accounts with provided IAM role to EKS pod identity:
+
+* "emr-containers-sa-%(FRAMEWORK)s-%(COMPONENT)s-%(AWS_ACCOUNT_ID)s-%(BASE36_ENCODED_ROLE_NAME)s"
+
+Here::
+
+    <FRAMEWORK> = EMR on EKS framework such as spark, flink, livy
+    <COMPONENT> = Task component for the framework. Such as client, driver, executor for spark; flink-operator, jobmanager, taskmanager for flink.
+    <AWS_ACCOUNT_ID> = AWS Account ID of the EKS cluster
+    <BASE36_ENCODED_ROLE_NAME> = Base36 encoded form of the IAM Role name
+
+You can use the **--type** option to select which submission model to associate.
+
+You can use the **--operator-namespace** option if your operator/livy jobs are running in a different operator namespace other than your job/application namespace. **--namespace** should be the Job/Application Namespace, and this option is for operator namespace to associate operator/livy service account.
+
+You can use the **--service-account-name** option to associate a custom service account with the role.
diff -pruN 2.23.6-1/awscli/examples/emr-containers/create-role-associations.rst 2.31.35-1/awscli/examples/emr-containers/create-role-associations.rst
--- 2.23.6-1/awscli/examples/emr-containers/create-role-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr-containers/create-role-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,48 @@
+**To create role associations of an IAM Role with EMR service accounts to be used with Amazon EMR on EKS**
+
+The following ``create-role-associations`` example command creates EKS pod identity associations of a role named **example_iam_role** with EMR service accounts such that it can be used with Amazon EMR on EKS with
+**example_namespace** namespace from an EKS cluster named **example_cluster**.::
+
+    aws emr-containers create-role-associations \
+        --cluster-name example_cluster \
+        --namespace example_namespace \
+        --role-name example_iam_role
+
+Output::
+
+    [
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-client-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/a-bgyr1umgdmrk1kdtq",
+            "associationId": "a-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        },
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-driver-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/b-bgyr1umgdmrk1kdtq",
+            "associationId": "b-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        },
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-executor-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/c-bgyr1umgdmrk1kdtq",
+            "associationId": "c-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        }
+    ]   
+
diff -pruN 2.23.6-1/awscli/examples/emr-containers/delete-role-associations/_description.rst 2.31.35-1/awscli/examples/emr-containers/delete-role-associations/_description.rst
--- 2.23.6-1/awscli/examples/emr-containers/delete-role-associations/_description.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr-containers/delete-role-associations/_description.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+Deletes role associations of given IAM role with EMR service accounts such that it will be removed from Amazon EMR on EKS with the given namespace from the given EKS cluster.
+
+Note:
+The command would dissociate EMR service accounts with provided IAM role from EKS pod identity:
+
+* "emr-containers-sa-%(FRAMEWORK)s-%(COMPONENT)s-%(AWS_ACCOUNT_ID)s-%(BASE36_ENCODED_ROLE_NAME)s"
+
+Here::
+
+    <FRAMEWORK> = EMR on EKS framework such as spark, flink, livy
+    <COMPONENT> = Task component for the framework. Such as client, driver, executor for spark; flink-operator, jobmanager, taskmanager for flink.
+    <AWS_ACCOUNT_ID> = AWS Account ID of the EKS cluster
+    <BASE36_ENCODED_ROLE_NAME> = Base36 encoded form of the IAM Role name
+
+You can use the **--type** option to select which submission model to dissociate.
+
+You can use the **--operator-namespace** option if your operator/livy jobs are running in a different operator namespace other than your job/application namespace. **--namespace** should be the Job/Application Namespace, and this option is for operator namespace to dissociate operator/livy service account.
+
+You can use the **--service-account-name** option to dissociate a custom service account with the role.
diff -pruN 2.23.6-1/awscli/examples/emr-containers/delete-role-associations.rst 2.31.35-1/awscli/examples/emr-containers/delete-role-associations.rst
--- 2.23.6-1/awscli/examples/emr-containers/delete-role-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/emr-containers/delete-role-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,50 @@
+**To delete role associations of an IAM Role with EMR service accounts**
+
+EKS allows associations with non existing resources (namespace, service account), so EMR on EKS suggest to delete the associations if the namespace is deleted or the role is not in use to release the space for other associations.
+
+The following ``delete-role-associations`` example command deletes EKS pod identity associations of a role named **example_iam_role** with EMR service accounts such that it can be removed from Amazon EMR on EKS with
+**example_namespace** namespace from an EKS cluster named **example_cluster**.::
+
+    aws emr-containers delete-role-associations \
+        --cluster-name example_cluster \
+        --namespace example_namespace \
+        --role-name example_iam_role
+
+Output::
+
+    [
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-client-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/a-bgyr1umgdmrk1kdtq",
+            "associationId": "a-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        },
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-driver-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/b-bgyr1umgdmrk1kdtq",
+            "associationId": "b-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        },
+        {
+            "clusterName": "example_cluster",
+            "namespace": "example_namespace",
+            "serviceAccount": "emr-spark-executor-service-account-example",
+            "roleArn": "arn:aws:iam::111111111111:role/example_iam_role",
+            "associationArn": "arn:aws:eks:us-east-1:111111111111:podidentityassociation/example_cluster/c-bgyr1umgdmrk1kdtq",
+            "associationId": "c-bgyr1umgdmrk1kdtq",
+            "tags": {},
+            "createdAt": "2022-11-15T10:49:00+00:00",
+            "modifiedAt": "2022-11-15T10:49:00+00:00"
+        }
+    ]   
+
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/create-stage.rst 2.31.35-1/awscli/examples/ivs-realtime/create-stage.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/create-stage.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/create-stage.rst	2025-11-12 19:17:29.000000000 +0000
@@ -19,18 +19,36 @@ Output::
         "stage": {
             "activeSessionId": "st-a1b2c3d4e5f6g",
             "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
+            "autoParticipantRecordingConfiguration": {
+                "storageConfigurationArn": "",
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "thumbnailConfiguration": {
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "DISABLED"
+                },
+                "recordingReconnectWindowSeconds": 0,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 6
+                },
+                "recordParticipantReplicas": true
+            },
             "endpoints": {
                 "events": "wss://global.events.live-video.net",
                 "rtmp": "rtmp://9x0y8z7s6t5u.global-contribute-staging.live-video.net/app/",
                 "rtmps": "rtmps://9x0y8z7s6t5u.global-contribute-staging.live-video.net:443/app/",
-                "whip": "https://1a2b3c4d5e6f.global-bm.whip.live-video.net"
+                "whip": "https://9x0y8z7s6t5u.global-bm.whip.live-video.net"
             },
             "name": "stage1",
             "tags": {}
         }
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
 
 **Example 2: To create a stage and configure individial participant recording**
 
@@ -38,7 +56,54 @@ The following ``create-stage`` example c
 
     aws ivs-realtime create-stage \
         --name stage1 \
-        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh"}'
+        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh", "recordingReconnectWindowSeconds": 100, \
+            "hlsConfiguration": {"targetSegmentDurationSeconds": 5}}'
+
+Output::
+
+    {
+        "stage": { 
+            "activeSessionId": "st-a1b2c3d4e5f6g",
+            "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
+            "autoParticipantRecordingConfiguration": {
+                "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh"
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "thumbnailConfiguration": {
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "DISABLED"
+                },
+                "recordingReconnectWindowSeconds": 100,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 5
+                },
+                "recordParticipantReplicas": true
+            },
+            "endpoints": {
+                "events": "wss://global.events.live-video.net",
+                "rtmp": "rtmp://9x0y8z7s6t5u.global-contribute-staging.live-video.net/app/",
+                "rtmps": "rtmps://9x0y8z7s6t5u.global-contribute-staging.live-video.net:443/app/",
+                "whip": "https://9x0y8z7s6t5u.global-bm.whip.live-video.net"
+            },
+            "name": "stage1",
+            "tags": {}
+        }
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 3: To create a stage and configure individial participant recording with thumbnail recording enabled**
+
+The following ``create-stage`` example creates a stage and configures individual participant recording with thumbnail recording enabled. ::
+
+    aws ivs-realtime create-stage \
+        --name stage1 \
+        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh", \
+            "thumbnailConfiguration": {"recordingMode": "INTERVAL","storage": ["SEQUENTIAL"],"targetIntervalSeconds": 60}}'
 
 Output::
 
@@ -47,20 +112,32 @@ Output::
             "activeSessionId": "st-a1b2c3d4e5f6g",
             "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
             "autoParticipantRecordingConfiguration": {
-                 "mediaTypes": [
-                       "AUDIO_VIDEO"
-                 ],
-                 "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "thumbnailConfiguration": { 
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "INTERVAL"
+                },
+                "recordingReconnectWindowSeconds": 0,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 6
+                },
+                "recordParticipantReplicas": true
             },
             "endpoints": {
                 "events": "wss://global.events.live-video.net",
                 "rtmp": "rtmp://9x0y8z7s6t5u.global-contribute-staging.live-video.net/app/",
                 "rtmps": "rtmps://9x0y8z7s6t5u.global-contribute-staging.live-video.net:443/app/",
-                "whip": "https://1a2b3c4d5e6f.global-bm.whip.live-video.net"
+                "whip": "https://9x0y8z7s6t5u.global-bm.whip.live-video.net"
             },
             "name": "stage1",
             "tags": {}
         }
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/get-composition.rst 2.31.35-1/awscli/examples/ivs-realtime/get-composition.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/get-composition.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/get-composition.rst	2025-11-12 19:17:29.000000000 +0000
@@ -31,9 +31,12 @@ Output::
                                 "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
                             ],
                             "recordingConfiguration": {
-                                "format": "HLS"
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
                             },
-                            "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE"
+                            "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE",
                         }
                     },
                     "detail": {
@@ -48,11 +51,13 @@ Output::
             ],
             "layout": {
                 "grid": {
-                    "featuredParticipantAttribute": ""
+                    "featuredParticipantAttribute": "",
                     "gridGap": 2,
                     "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
                     "videoAspectRatio": "VIDEO",
-                    "videoFillMode": ""                }
+                    "videoFillMode": ""
+                }
             },
             "stageArn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd",
             "startTime": "2023-10-16T23:24:00+00:00",
@@ -61,7 +66,7 @@ Output::
         }
     }
 
-For more information, see `Composite Recording (Real-Time Streaming) <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
 
 **Example 2: To get a composition with PiP layout**
 
@@ -96,7 +101,10 @@ Output::
                                 "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
                             ],
                             "recordingConfiguration": {
-                                "format": "HLS"
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
                             },
                             "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE"
                         }
@@ -116,6 +124,7 @@ Output::
                     "featuredParticipantAttribute": "abcdefg",
                     "gridGap": 0,
                     "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
                     "pipBehavior": "STATIC",
                     "pipOffset": 0,
                     "pipParticipantAttribute": "",
@@ -130,4 +139,81 @@ Output::
         }
     }
 
-For more information, see `Composite Recording (Real-Time Streaming) <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
+
+**Example 3: To get a composition with thumbnail recording enabled**
+
+The following ``get-composition`` example gets the composition for the ARN (Amazon Resource Name) specified, which has thumbnail recording enabled with default settings. ::
+
+    aws ivs-realtime get-composition \
+        --arn "arn:aws:ivs:ap-northeast-1:123456789012:composition/abcdABCDefgh"
+
+Output::
+
+    {
+        "composition": {
+            "arn": "arn:aws:ivs:ap-northeast-1:123456789012:composition/abcdABCDefgh",
+            "destinations": [
+                {
+                    "configuration": {
+                        "channel": {
+                            "channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg",
+                            "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                        },
+                        "name": ""
+                    },
+                    "id": "AabBCcdDEefF",
+                    "startTime": "2023-10-16T23:26:00+00:00",
+                    "state": "ACTIVE"
+                },
+                {
+                    "configuration": {
+                        "name": "",
+                        "s3": {
+                            "encoderConfigurationArns": [
+                                "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                            ],
+                            "recordingConfiguration": {
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
+                            },
+                            "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE",
+                            "thumbnailConfigurations": [
+                               {
+                                  "targetIntervalSeconds": 60,
+                                  "storage": [
+                                      "SEQUENTIAL"
+                                  ],
+                               }
+                            ]
+                        }
+                    },
+                    "detail": {
+                        "s3": {
+                            "recordingPrefix": "aBcDeFgHhGfE/AbCdEfGhHgFe/GHFabcgefABC/composite"
+                        }
+                    },
+                    "id": "GHFabcgefABC",
+                    "startTime": "2023-10-16T23:26:00+00:00",
+                    "state": "STARTING"
+                }
+            ],
+            "layout": {
+                "grid": {
+                    "featuredParticipantAttribute": ""
+                    "gridGap": 2,
+                    "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
+                    "videoAspectRatio": "VIDEO",
+                    "videoFillMode": ""                }
+            },
+            "stageArn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd",
+            "startTime": "2023-10-16T23:24:00+00:00",
+            "state": "ACTIVE",
+            "tags": {}
+        }
+    }
+
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/get-participant.rst 2.31.35-1/awscli/examples/ivs-realtime/get-participant.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/get-participant.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/get-participant.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,99 @@
-**To get a stage participant**
-
-The following ``get-participant`` example gets the stage participant for a specified participant ID and session ID in the specified stage ARN (Amazon Resource Name). ::
-
-    aws ivs-realtime get-participant \
-        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
-        --session-id st-a1b2c3d4e5f6g \
-        --participant-id abCDEf12GHIj
-
-Output::
-
-    {
-        "participant": {
-            "browserName", "Google Chrome",
-            "browserVersion", "116",
-            "firstJoinTime": "2023-04-26T20:30:34+00:00",
-            "ispName", "Comcast",
-            "osName", "Microsoft Windows 10 Pro",
-            "osVersion", "10.0.19044"
-            "participantId": "abCDEf12GHIj",
-            "published": true,
-            "recordingS3BucketName": "bucket-name",
-            "recordingS3Prefix": "abcdABCDefgh/st-a1b2c3d4e5f6g/abCDEf12GHIj/1234567890",
-            "recordingState": "ACTIVE",
-            "sdkVersion", "",
-            "state": "CONNECTED",
-            "userId": "",
-        }
-    }
-
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
+**Example 1: To get a stage participant**
+
+The following ``get-participant`` example gets the stage participant for a specified participant ID and session ID in the specified stage ARN (Amazon Resource Name). ::
+
+    aws ivs-realtime get-participant \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "participant": {
+            "browserName": "Google Chrome",
+            "browserVersion": "116",
+            "firstJoinTime": "2023-04-26T20:30:34+00:00",
+            "ispName": "Comcast",
+            "osName": "Microsoft Windows 10 Pro",
+            "osVersion": "10.0.19044",
+            "participantId": "abCDEf12GHIj",
+            "published": true,
+            "recordingS3BucketName": "bucket-name",
+            "recordingS3Prefix": "abcdABCDefgh/st-a1b2c3d4e5f6g/abCDEf12GHIj/1234567890",
+            "recordingState": "ACTIVE",
+            "sdkVersion": "",
+            "state": "CONNECTED",
+            "userId": ""
+        }
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 2: To get a stage participant that has been replicated to another stage**
+
+The following ``get-participant`` example gets the stage participant for a specified participant ID and session ID in the specified stage ARN (Amazon Resource Name), when the participant has also been replicated to another stage. ::
+
+    aws ivs-realtime get-participant \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "participant": {
+            "browserName": "Google Chrome",
+            "browserVersion": "116",
+            "firstJoinTime": "2023-04-26T20:30:34+00:00",
+            "ispName": "Comcast",
+            "osName": "Microsoft Windows 10 Pro",
+            "osVersion": "10.0.19044",
+            "participantId": "abCDEf12GHIj",
+            "published": true,
+            "recordingS3BucketName": "bucket-name",
+            "recordingS3Prefix": "abcdABCDefgh/st-a1b2c3d4e5f6g/abCDEf12GHIj/1234567890",
+            "recordingState": "ACTIVE",
+            "replicationState": "ACTIVE",
+            "replicationType": "SOURCE",
+            "sdkVersion": "",
+            "state": "CONNECTED",
+            "userId": ""
+        }
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 3: To get a stage participant that has been replicated from another stage**
+
+The following ``get-participant`` example gets the stage participant for a specified participant ID and session ID in the specified stage ARN (Amazon Resource Name), when the participant has been replicated from another stage. ::
+
+    aws ivs-realtime get-participant \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "participant": {
+            "browserName": "Google Chrome",
+            "browserVersion": "116",
+            "firstJoinTime": "2023-04-26T20:30:34+00:00",
+            "ispName": "Comcast",
+            "osName": "Microsoft Windows 10 Pro",
+            "osVersion": "10.0.19044",
+            "participantId": "abCDEf12GHIj",
+            "published": true,
+            "recordingS3BucketName": "bucket-name",
+            "recordingS3Prefix": "abcdABCDefgh/st-a1b2c3d4e5f6g/abCDEf12GHIj/1234567890",
+            "recordingState": "ACTIVE",
+            "replicationState": "ACTIVE",
+            "replicationType": "REPLICA",
+            "sdkVersion": "",
+            "state": "CONNECTED",
+            "userId": ""
+        }
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/get-stage.rst 2.31.35-1/awscli/examples/ivs-realtime/get-stage.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/get-stage.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/get-stage.rst	2025-11-12 19:17:29.000000000 +0000
@@ -12,20 +12,32 @@ Output::
             "activeSessionId": "st-a1b2c3d4e5f6g",
             "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
             "autoParticipantRecordingConfiguration": {
-                 "mediaTypes": [
-                       "AUDIO_VIDEO"
-                 ],
-                 "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "storageConfigurationArn": "",
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "thumbnailConfiguration": {
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "DISABLED"
+                },
+                "recordingReconnectWindowSeconds": 0,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 6
+                },
+                "recordParticipantReplicas": true
             },
             "endpoints": {
                 "events": "wss://global.events.live-video.net",
                 "rtmp": "rtmp://9x0y8z7s6t5u.global-contribute-staging.live-video.net/app/",
                 "rtmps": "rtmps://9x0y8z7s6t5u.global-contribute-staging.live-video.net:443/app/",
-                "whip": "https://1a2b3c4d5e6f.global-bm.whip.live-video.net"
+                "whip": "https://9x0y8z7s6t5u.global-bm.whip.live-video.net"
             },
             "name": "test",
             "tags": {}
         }
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/list-participant-events.rst 2.31.35-1/awscli/examples/ivs-realtime/list-participant-events.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/list-participant-events.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/list-participant-events.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To get a list of stage participant events**
+**Example 1: To get a list of stage participant events**
 
 The following ``list-participant-events`` example lists all participant events for a specified participant ID and session ID of a specified stage ARN (Amazon Resource Name). ::
 
@@ -34,4 +34,56 @@ Output::
         ]
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/userguide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 2: To get a list of stage participant events, including participant replication stop and start**
+
+The following ``list-participant-events`` example lists all participant events for a specified session ID of a specified stage ARN (Amazon Resource Name), where a participant is replicated to another stage. ::
+
+    aws ivs-realtime list-participant-events \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "events": [
+            {
+                "eventTime": "2025-04-26T20:36:28+00:00",
+                "name": "LEFT",
+                "participantId": "abCDEf12GHIj"
+            },
+            {
+                "eventTime": "2025-04-26T20:36:28+00:00",
+                "name": "PUBLISH_STOPPED",
+                "participantId": "abCDEf12GHIj"
+            },
+            {
+                "eventTime": "2025-04-26T20:30:34+00:00",
+                "name": "JOINED",
+                "participantId": "abCDEf12GHIj"
+            },
+            {
+                "eventTime": "2025-04-26T20:30:34+00:00",
+                "name": "PUBLISH_STARTED",
+                "participantId": "abCDEf12GHIj"
+            },
+            {
+                "name": "REPLICATION_STARTED",
+                "participantId": "abCDEf12GHIj",
+                "eventTime": "2025-04-26T20:30:34+00:00",
+                "destinationStageArn": "arn:aws:ivs:us-west-2:12345678901:stage/ABCDabcdefgh",
+                "destinationSessionId": "st-b1c2d3e4f5g6a"
+            },
+            {
+                "name": "REPLICATION_STOPPED",
+                "participantId": "abCDEf12GHIj",
+                "eventTime": "2025-04-26T20:32:34+00:00",
+                "destinationStageArn": "arn:aws:ivs:us-west-2:12345678901:stage/ABCDabcdefgh",
+                "destinationSessionId": "st-b1c2d3e4f5g6a"
+            }
+        ]
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/list-participant-replicas.rst 2.31.35-1/awscli/examples/ivs-realtime/list-participant-replicas.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/list-participant-replicas.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/list-participant-replicas.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+**To get a list of stage participant replicas**
+
+The following ``list-participant-replicas`` example lists all stage participants replicated from the specified source stage ARN (Amazon Resource Name) to another stage. ::
+
+    aws ivs-realtime list-participant-replicas \
+        --source-stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "replicas": [
+            {
+                "sourceStageArn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
+                "participantId": "abCDEf12GHIj",
+                "sourceSessionId": "st-a1b2c3d4e5f6g",
+                "destinationStageArn": "arn:aws:ivs:us-west-2:012345678901:stage/ABCDabcdefgh",
+                "destinationSessionId": "st-b1c2d3e4f5g6a",
+                "replicationState": "ACTIVE"
+            }
+        ]
+    }
+
+For more information, see `IVS Participant Replication <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-participant-replication.html>`__ in the *Amazon IVS Real-Time Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/list-participants.rst 2.31.35-1/awscli/examples/ivs-realtime/list-participants.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/list-participants.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/list-participants.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To get a list of stage participants**
+**Example 1: To get a list of stage participants**
 
 The following ``list-participants`` example lists all participants for a specified session ID of a specified stage ARN (Amazon Resource Name). ::
 
@@ -12,7 +12,7 @@ Output::
         "participants": [
             {
                 "firstJoinTime": "2023-04-26T20:30:34+00:00",
-                "participantId": "abCDEf12GHIj"
+                "participantId": "abCDEf12GHIj",
                 "published": true,
                 "recordingState": "STOPPED",
                 "state": "DISCONNECTED",
@@ -21,4 +21,62 @@ Output::
         ]
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 2: To get a list of stage participants, when a participant has been replicated to another stage**
+
+The following ``list-participants`` example lists all participants for a specified session ID of a specified stage ARN (Amazon Resource Name), when a participant has been replicated to another stage. ::
+
+    aws ivs-realtime list-participants \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g
+
+Output::
+
+    {
+        "participants": [
+            {
+                "firstJoinTime": "2023-04-26T20:30:34+00:00",
+                "participantId": "abCDEf12GHIj",
+                "published": true,
+                "recordingState": "STOPPED",
+                "state": "DISCONNECTED",
+                "userId": "",
+                "replicationState": "ACTIVE",
+                "replicationType": "SOURCE",
+                "sourceStageArn": "",
+                "sourceSessionId": ""
+            }
+        ]
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 3: To get a list of stage participants, when a participant has been replicated from another stage**
+
+The following ``list-participants`` example lists all participants for a specified session ID of a specified stage ARN (Amazon Resource Name), when a participant has been replicated from another stage. ::
+
+    aws ivs-realtime list-participants \
+        --stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --session-id st-a1b2c3d4e5f6g
+
+Output::
+
+    {
+        "participants": [
+            {
+                "firstJoinTime": "2023-04-26T20:30:34+00:00",
+                "participantId": "abCDEf12GHIj",
+                "published": true,
+                "recordingState": "STOPPED",
+                "state": "DISCONNECTED",
+                "userId": "",
+                "replicationState": "ACTIVE",
+                "replicationType": "REPLICA",
+                "sourceStageArn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
+                "sourceSessionId": "st-a1b2c3d4e5f6g"
+            }
+        ]
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/start-composition.rst 2.31.35-1/awscli/examples/ivs-realtime/start-composition.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/start-composition.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/start-composition.rst	2025-11-12 19:17:29.000000000 +0000
@@ -7,6 +7,7 @@ The following ``start-composition`` exam
         --destinations '[{"channel": {"channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg", \
             "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"}}, \
             {"s3":{"encoderConfigurationArns":["arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"], \ 
+            "recordingConfiguration": {"hlsConfiguration": {"targetSegmentDurationSeconds": 5}}, \
             "storageConfigurationArn":"arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE"}}]'
 
 Output::
@@ -34,7 +35,10 @@ Output::
                                 "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
                             ],
                             "recordingConfiguration": {
-                                "format": "HLS"
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 5
+                                }
                             },
                             "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE"
                         }
@@ -53,6 +57,7 @@ Output::
                     "featuredParticipantAttribute": ""
                     "gridGap": 2,
                     "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
                     "videoAspectRatio": "VIDEO",
                     "videoFillMode": ""
                 }
@@ -64,7 +69,7 @@ Output::
         }
     }
 
-For more information, see `Composite Recording (Real-Time Streaming) <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
 
 **Example 2: To start a composition with PiP layout**
 
@@ -103,7 +108,10 @@ Output::
                                 "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
                             ],
                             "recordingConfiguration": {
-                                "format": "HLS"
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
                             },
                             "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE"
                         }
@@ -122,6 +130,7 @@ Output::
                     "featuredParticipantAttribute": "abcdefg",
                     "gridGap": 0,
                     "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
                     "pipBehavior": "STATIC",
                     "pipOffset": 0,
                     "pipParticipantAttribute": "",
@@ -136,4 +145,167 @@ Output::
         }
     }
 
-For more information, see `Composite Recording (Real-Time Streaming) <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
+
+**Example 3: To start a composition with thumbnail recording enabled**
+
+The following ``start-composition`` example starts a composition for the specified stage to be streamed to the specified locations with thumbnail recording enabled. ::
+
+    aws ivs-realtime start-composition \
+        --stage-arn arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd \
+        --destinations '[{"channel": {"channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg", \
+            "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"}}, \
+            {"s3": {"encoderConfigurationArns": ["arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"], \ 
+            "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE", \
+            "thumbnailConfigurations": [{"storage": ["SEQUENTIAL"],"targetIntervalSeconds": 60}]}}]'
+
+Output::
+
+    {
+        "composition": {
+            "arn": "arn:aws:ivs:ap-northeast-1:123456789012:composition/abcdABCDefgh",
+            "destinations": [
+                {
+                    "configuration": {
+                        "channel": {
+                            "channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg",
+                            "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                        },
+                        "name": ""
+                    },
+                    "id": "AabBCcdDEefF",
+                    "state": "STARTING"
+                },
+                {
+                    "configuration": {
+                        "name": "",
+                        "s3": {
+                            "encoderConfigurationArns": [
+                                "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                            ],
+                            "recordingConfiguration": {
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
+                            },
+                            "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE",
+                            "thumbnailConfigurations": [
+                               {
+                                  "targetIntervalSeconds": 60,
+                                  "storage": [
+                                      "SEQUENTIAL"
+                                  ]
+                               }
+                            ]
+                        }
+                    },
+                    "detail": {
+                        "s3": {
+                            "recordingPrefix": "aBcDeFgHhGfE/AbCdEfGhHgFe/GHFabcgefABC/composite"
+                        }
+                    },
+                    "id": "GHFabcgefABC",
+                    "state": "STARTING"
+                }
+            ],
+            "layout": {
+                "grid": {
+                    "featuredParticipantAttribute": ""
+                    "gridGap": 2,
+                    "omitStoppedVideo": false,
+                    "participantOrderAttribute": "",
+                    "videoAspectRatio": "VIDEO",
+                    "videoFillMode": ""
+                }
+            },
+            "stageArn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd",
+            "startTime": "2023-10-16T23:24:00+00:00",
+            "state": "STARTING",
+            "tags": {}
+        }
+    }
+
+For more information, see `Composite Recording (Real-Time Streaming) <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
+
+**Example 4: To start a composition using grid layout with custom participant ordering**
+
+The following ``start-composition`` example starts a composition for the specified stage to be streamed to the specified locations using grid layout with custom participant ordering. ::
+
+    aws ivs-realtime start-composition \
+        --stage-arn arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd \
+        --destinations '[{"channel": {"channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg", \
+            "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"}}, \
+            {"s3": {"encoderConfigurationArns": ["arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"], \ 
+            "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE", \
+            "thumbnailConfigurations": [{"storage": ["SEQUENTIAL"],"targetIntervalSeconds": 60}]}}]' \
+        --layout grid='{participantOrderAttribute="abcdefg"}'
+
+Output::
+
+    {
+        "composition": {
+            "arn": "arn:aws:ivs:ap-northeast-1:123456789012:composition/abcdABCDefgh",
+            "destinations": [
+                {
+                    "configuration": {
+                        "channel": {
+                            "channelArn": "arn:aws:ivs:ap-northeast-1:123456789012:channel/abcABCdefDEg",
+                            "encoderConfigurationArn": "arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                        },
+                        "name": ""
+                    },
+                    "id": "AabBCcdDEefF",
+                    "state": "STARTING"
+                },
+                {
+                    "configuration": {
+                        "name": "",
+                        "s3": {
+                            "encoderConfigurationArns": [
+                                "arn:aws:ivs:arn:aws:ivs:ap-northeast-1:123456789012:encoder-configuration/ABabCDcdEFef"
+                            ],
+                            "recordingConfiguration": {
+                                "format": "HLS",
+                                "hlsConfiguration": {
+                                    "targetSegmentDurationSeconds": 2
+                                }
+                            },
+                            "storageConfigurationArn": "arn:arn:aws:ivs:ap-northeast-1:123456789012:storage-configuration/FefABabCDcdE",
+                            "thumbnailConfigurations": [
+                               {
+                                  "targetIntervalSeconds": 60,
+                                  "storage": [
+                                      "SEQUENTIAL"
+                                  ]
+                               }
+                            ]
+                        }
+                    },
+                    "detail": {
+                        "s3": {
+                            "recordingPrefix": "aBcDeFgHhGfE/AbCdEfGhHgFe/GHFabcgefABC/composite"
+                        }
+                    },
+                    "id": "GHFabcgefABC",
+                    "state": "STARTING"
+                }
+            ],
+            "layout": {
+                "grid": {
+                    "featuredParticipantAttribute": ""
+                    "gridGap": 2,
+                    "omitStoppedVideo": false,
+                    "participantOrderAttribute": "abcdefg",
+                    "videoAspectRatio": "VIDEO",
+                    "videoFillMode": ""
+                }
+            },
+            "stageArn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/defgABCDabcd",
+            "startTime": "2023-10-16T23:24:00+00:00",
+            "state": "STARTING",
+            "tags": {}
+        }
+    }
+
+For more information, see `IVS Composite Recording | Real-Time Streaming <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-composite-recording.html>`__ in the *Amazon Interactive Video Service User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/start-participant-replication.rst 2.31.35-1/awscli/examples/ivs-realtime/start-participant-replication.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/start-participant-replication.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/start-participant-replication.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+**To start replicating a participant from one stage to another stage**
+
+The following ``start-participant-replication`` example replicates a participant from a source stage to a destination stage, with each stage specified by its ARN (Amazon Resource Name). ::
+
+    aws ivs-realtime start-participant-replication \
+        --source-stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --destination-stage-arn arn:aws:ivs:us-west-2:234567890123:stage/bcdABCDefghi \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "accessControlAllowOrigin": "*",
+        "accessControlExposeHeaders": "Access-Control-Allow-Origin,Access-Control-Expose-Headers,Cache-Control,Content-Length, \
+        Content-Security-Policy,Content-Type,date,Strict-Transport-Security,x-amz-apigw-id,x-amzn-errormessage,x-amzn-errortype, \
+        x-amzn-requestid,x-amzn-trace-id,X-Content-Type-Options,X-Frame-Options",
+        "cacheControl": "no-store, no-cache",
+        "contentSecurityPolicy": "default-src 'self'; upgrade-insecure-requests;",
+        "strictTransportSecurity": "max-age:47304000; includeSubDomains",
+        "xContentTypeOptions": "nosniff",
+        "xFrameOptions": "DENY"
+    }
+
+For more information, see `IVS Participant Replication <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-participant-replication.html>`__ in the *Amazon IVS Real-Time Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/stop-participant-replication.rst 2.31.35-1/awscli/examples/ivs-realtime/stop-participant-replication.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/stop-participant-replication.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/stop-participant-replication.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+**To stop replicating a participant from one stage to another stage**
+
+The following ``stop-participant-replication`` example stops replicating a participant from a source stage to a destination stage, with each stage specified by its ARN (Amazon Resource Name). ::
+
+    aws ivs-realtime stop-participant-replication \
+        --source-stage-arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --destination-stage-arn arn:aws:ivs:us-west-2:234567890123:stage/bcdABCDefghi \
+        --participant-id abCDEf12GHIj
+
+Output::
+
+    {
+        "accessControlAllowOrigin": "*",
+        "accessControlExposeHeaders": "Access-Control-Allow-Origin,Access-Control-Expose-Headers,Cache-Control,Content-Length, \
+        Content-Security-Policy,Content-Type,date,Strict-Transport-Security,x-amz-apigw-id,x-amzn-errormessage,x-amzn-errortype, \
+        x-amzn-requestid,x-amzn-trace-id,X-Content-Type-Options,X-Frame-Options",
+        "cacheControl": "no-store, no-cache",
+        "contentSecurityPolicy": "default-src 'self'; upgrade-insecure-requests;",
+        "strictTransportSecurity": "max-age:47304000; includeSubDomains",
+        "xContentTypeOptions": "nosniff",
+        "xFrameOptions": "DENY"
+    }
+
+For more information, see `IVS Participant Replication <https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/rt-participant-replication.html>`__ in the *Amazon IVS Real-Time Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/ivs-realtime/update-stage.rst 2.31.35-1/awscli/examples/ivs-realtime/update-stage.rst
--- 2.23.6-1/awscli/examples/ivs-realtime/update-stage.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ivs-realtime/update-stage.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,12 @@
-**To update a stage's configuration**
+**Example 1: To update a stage's configuration**
 
-The following ``update-stage`` example updates a stage for a specified stage ARN to update the stage name and configure individual participant recording. ::
+The following ``update-stage`` example updates a stage for a specified stage ARN to update the stage name and configure individual participant recording with thumbnail recording enabled. ::
 
     aws ivs-realtime update-stage \
         --arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
-        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh"}' \
+        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh", "recordingReconnectWindowSeconds": 100, \
+            "thumbnailConfiguration": {"recordingMode": "INTERVAL","storage": ["SEQUENTIAL"],"targetIntervalSeconds": 60}} \
+            "hlsConfiguration": {"targetSegmentDurationSeconds": 5}}' \
         --name stage1a
 
 Output::
@@ -13,10 +15,22 @@ Output::
         "stage": {
             "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
             "autoParticipantRecordingConfiguration": {
-                 "mediaTypes": [
-                       "AUDIO_VIDEO"
-                 ],
-                 "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "thumbnailConfiguration": {
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "INTERVAL"
+                },
+                "recordingReconnectWindowSeconds": 100,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 5
+                },
+                "recordParticipantReplicas": true
             },
             "endpoints": {
                 "events": "wss://global.events.live-video.net",
@@ -29,4 +43,51 @@ Output::
         }
     }
 
-For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon Interactive Video Service User Guide*.
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
+
+**Example 2: To update a stage's configuration, including disabling participant replica recording**
+
+The following ``update-stage`` example updates a stage for a specified stage ARN to update the stage name and configure individual participant recording with thumbnail recording enabled and participant replica recording disabled. ::
+
+    aws ivs-realtime update-stage \
+        --arn arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh \
+        --auto-participant-recording-configuration '{"mediaTypes": ["AUDIO_VIDEO"],"storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh", "recordingReconnectWindowSeconds": 100, \
+            "thumbnailConfiguration": {"recordingMode": "INTERVAL","storage": ["SEQUENTIAL"],"targetIntervalSeconds": 60}, "recordParticipantReplicas":false} \
+            "hlsConfiguration": {"targetSegmentDurationSeconds": 5}}' \
+        --name stage1a
+
+Output::
+
+    {
+        "stage": {
+            "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh",
+            "autoParticipantRecordingConfiguration": {
+                "mediaTypes": [
+                    "AUDIO_VIDEO"
+                ],
+                "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/abcdABCDefgh",
+                "thumbnailConfiguration": {
+                    "targetIntervalSeconds": 60,
+                    "storage": [
+                        "SEQUENTIAL"
+                    ],
+                    "recordingMode": "INTERVAL"
+                },
+                "recordingReconnectWindowSeconds": 100,
+                "hlsConfiguration": {
+                    "targetSegmentDurationSeconds": 5
+                },
+                "recordParticipantReplicas": false
+            },
+            "endpoints": {
+                "events": "wss://global.events.live-video.net",
+                "rtmp": "rtmp://9x0y8z7s6t5u.global-contribute-staging.live-video.net/app/",
+                "rtmps": "rtmps://9x0y8z7s6t5u.global-contribute-staging.live-video.net:443/app/",
+                "whip": "https://1a2b3c4d5e6f.global-bm.whip.live-video.net"
+            },
+            "name": "stage1a",
+            "tags": {}
+        }
+    }
+
+For more information, see `Enabling Multiple Hosts on an Amazon IVS Stream <https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multiple-hosts.html>`__ in the *Amazon IVS Low-Latency Streaming User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kendra/describe-data-source.rst 2.31.35-1/awscli/examples/kendra/describe-data-source.rst
--- 2.23.6-1/awscli/examples/kendra/describe-data-source.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kendra/describe-data-source.rst	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,7 @@ Output::
                 "Template": {
                     "connectionConfiguration": {
                         "repositoryEndpointMetadata": {
-                            "BucketName": "my-bucket"
+                            "BucketName": "amzn-s3-demo-bucket"
                         }
                     },
                     "repositoryConfigurations": {
diff -pruN 2.23.6-1/awscli/examples/kms/create-key.rst 2.31.35-1/awscli/examples/kms/create-key.rst
--- 2.23.6-1/awscli/examples/kms/create-key.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/create-key.rst	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,7 @@ Output::
             "AWSAccountId": "111122223333",
             "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
             "CreationDate": "2017-07-05T14:04:55-07:00",
+            "CurrentKeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
             "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
             "Description": "",
             "Enabled": true,
@@ -40,7 +41,7 @@ For more information, see `Creating keys
 
 **Example 2: To create an asymmetric RSA KMS key for encryption and decryption**
 
-The following ``create-key`` example creates a KMS key that contains an asymmetric RSA key pair for encryption and decryption. ::
+The following ``create-key`` example creates a KMS key that contains an asymmetric RSA key pair for encryption and decryption. The key spec and key usage can't be changed after the key is created.::
 
     aws kms create-key \
        --key-spec RSA_4096 \
@@ -75,7 +76,7 @@ For more information, see `Asymmetric ke
 
 **Example 3: To create an asymmetric elliptic curve KMS key for signing and verification**
 
-To create an asymmetric KMS key that contains an asymmetric elliptic curve (ECC) key pair for signing and verification. The ``--key-usage`` parameter is required even though ``SIGN_VERIFY`` is the only valid value for ECC KMS keys. ::
+To create an asymmetric KMS key that contains an asymmetric elliptic curve (ECC) key pair for signing and verification. The ``--key-usage`` parameter is required even though ``SIGN_VERIFY`` is the only valid value for ECC KMS keys. The key spec and key usage can't be changed after the key is created.::
 
     aws kms create-key \
         --key-spec ECC_NIST_P521 \
@@ -105,10 +106,43 @@ Output::
     }
 
 
-For more information, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.   
+For more information, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.
+
+**Example 4: To create an asymmetric ML-DSA KMS key for signing and verification**
+
+This example creates a module-lattice digital signature algorithm (ML-DSA) key for signing and verification. The key-usage parameter is required even though ``SIGN_VERIFY`` is the only valid value for ML-DSA keys. ::
+
+    aws kms create-key \
+        --key-spec ML_DSA_65 \
+        --key-usage SIGN_VERIFY
+
+Output::
+
+    {
+        "KeyMetadata": {
+            "Arn": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+            "AWSAccountId": "111122223333",
+            "CreationDate": "2019-12-02T07:48:55-07:00",
+            "Description": "",
+            "Enabled": true,
+            "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
+            "KeyManager": "CUSTOMER",
+            "KeySpec": "ML_DSA_65",
+            "KeyState": "Enabled",
+            "KeyUsage": "SIGN_VERIFY",
+            "MultiRegion": false,
+            "Origin": "AWS_KMS",
+            "SigningAlgorithms": [
+                "ML_DSA_SHAKE_256"
+            ]
+        }
+    }
+
+
+For more information, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.
 
 
-**Example 4: To create an HMAC KMS key**
+**Example 5: To create an HMAC KMS key**
 
 The following ``create-key`` example creates a 384-bit HMAC KMS key. The ``GENERATE_VERIFY_MAC`` value for the ``--key-usage`` parameter is required even though it's the only valid value for HMAC KMS keys. ::
 
@@ -142,7 +176,7 @@ Output::
 For more information, see `HMAC keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html>`__ in the *AWS Key Management Service Developer Guide*.  
 
 
-**Example 4: To create a multi-Region primary KMS key**
+**Example 6: To create a multi-Region primary KMS key**
 
 The following ``create-key`` example creates a multi-Region primary symmetric encryption key. Because the default values for all parameters create a symmetric encryption key, only the ``--multi-region`` parameter is required for this KMS key. In the AWS CLI, to indicate that a Boolean parameter is true, just specify the parameter name. ::
 
@@ -156,6 +190,7 @@ Output::
             "Arn": "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef12345678990ab",
             "AWSAccountId": "111122223333",
             "CreationDate": "2021-09-02T016:15:21-09:00",
+            "CurrentKeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
             "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
             "Description": "",
             "Enabled": true,
@@ -183,7 +218,7 @@ Output::
 For more information, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.  
 
 
-**Example 5: To create a KMS key for imported key material**
+**Example 7: To create a KMS key for imported key material**
 
 The following ``create-key`` example creates a creates a KMS key with no key material. When the operation is complete, you can import your own key material into the KMS key. To create this KMS key, set the ``--origin`` parameter to ``EXTERNAL``. ::
 
@@ -253,7 +288,7 @@ Output::
 For more information, see `AWS CloudHSM key stores <https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html>`__ in the *AWS Key Management Service Developer Guide*. 
 
 
-**Example 7: To create a KMS key in an external key store**
+**Example 8: To create a KMS key in an external key store**
 
 The following ``create-key`` example creates a creates a KMS key in the specified external key store. The ``--custom-key-store-id``, ``--origin``, and ``--xks-key-id`` parameters are required in this command. 
 
diff -pruN 2.23.6-1/awscli/examples/kms/delete-imported-key-material.rst 2.31.35-1/awscli/examples/kms/delete-imported-key-material.rst
--- 2.23.6-1/awscli/examples/kms/delete-imported-key-material.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/delete-imported-key-material.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,6 +5,12 @@ The following ``delete-imported-key-mate
     aws kms delete-imported-key-material \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
 
-This command produces no output. To verify that the key material is deleted, use the ``describe-key`` command to look for a key state of ``PendingImport`` or ``PendingDeletion``.
 
-For more information, see `Deleting imported key material<https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-delete-key-material.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
+Output::
+
+    {
+        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6"
+    }
+
+For more information, see `Deleting imported key material <https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-delete-key-material.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kms/describe-key.rst 2.31.35-1/awscli/examples/kms/describe-key.rst
--- 2.23.6-1/awscli/examples/kms/describe-key.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/describe-key.rst	2025-11-12 19:17:29.000000000 +0000
@@ -14,6 +14,7 @@ Output::
             "AWSAccountId": "846764612917",
             "KeyId": "b8a9477d-836c-491f-857e-07937918959b",
             "Arn": "arn:aws:kms:us-west-2:846764612917:key/b8a9477d-836c-491f-857e-07937918959b",
+            "CurrentKeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
             "CreationDate": 2017-06-30T21:44:32.140000+00:00,
             "Enabled": true,
             "Description": "Default KMS key that protects my S3 objects when no other key is defined",
@@ -80,6 +81,7 @@ Output::
             "AWSAccountId": "111122223333",
             "Arn": "arn:aws:kms:ap-northeast-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
             "CreationDate": "2021-06-28T21:09:16.114000+00:00",
+            "CurrentKeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
             "Description": "",
             "Enabled": true,
             "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab",
diff -pruN 2.23.6-1/awscli/examples/kms/disable-key.rst 2.31.35-1/awscli/examples/kms/disable-key.rst
--- 2.23.6-1/awscli/examples/kms/disable-key.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/disable-key.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
 **To temporarily disable a KMS key**
 
-The following example uses the ``disable-key`` command to disable a customer managed KMS key. To re-enable the KMS key, use the ``enable-key`` command. ::
+The following ``disable-key`` command disables a customer managed KMS key. To re-enable the KMS key, use the ``enable-key`` command. ::
 
     aws kms disable-key \
         --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
diff -pruN 2.23.6-1/awscli/examples/kms/generate-data-key-pair-without-plaintext.rst 2.31.35-1/awscli/examples/kms/generate-data-key-pair-without-plaintext.rst
--- 2.23.6-1/awscli/examples/kms/generate-data-key-pair-without-plaintext.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-data-key-pair-without-plaintext.rst	2025-11-12 19:17:29.000000000 +0000
@@ -20,6 +20,7 @@ Output::
         "PrivateKeyCiphertextBlob": "AQIDAHi6LtupRpdKl2aJTzkK6FbhOtQkMlQJJH3PdtHvS/y+hAFFxmiD134doUDzMGmfCEtcAAAHaTCCB2UGCSqGSIb3DQEHBqCCB1...",
         "PublicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3A3eGMyPrvSn7+LdlJE1oUoQV5HpEuHAVbdOyND+NmYDH/mL1OSIEuLrcdZ5hrMH4pk83r40l...",
         "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
         "KeyPairSpec": "ECC_NIST_P384"
     }
 
diff -pruN 2.23.6-1/awscli/examples/kms/generate-data-key-pair.rst 2.31.35-1/awscli/examples/kms/generate-data-key-pair.rst
--- 2.23.6-1/awscli/examples/kms/generate-data-key-pair.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-data-key-pair.rst	2025-11-12 19:17:29.000000000 +0000
@@ -19,6 +19,7 @@ Output::
         "PrivateKeyPlaintext": "MIIG/QIBADANBgkqhkiG9w0BAQEFAASCBucwggbjAgEAAoIBgQDcDd4YzI+u9Kfv4t2UkTWhShBXkekS4cBVt07I0P42ZgMf+YvU5IgS4ut...",
         "PublicKey": "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA3A3eGMyPrvSn7+LdlJE1oUoQV5HpEuHAVbdOyND+NmYDH/mL1OSIEuLrcdZ5hrMH4pk83r40l...",
         "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6"
         "KeyPairSpec": "RSA_2048"
     }
 
diff -pruN 2.23.6-1/awscli/examples/kms/generate-data-key-without-plaintext.rst 2.31.35-1/awscli/examples/kms/generate-data-key-without-plaintext.rst
--- 2.23.6-1/awscli/examples/kms/generate-data-key-without-plaintext.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-data-key-without-plaintext.rst	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,8 @@ Output::
 
     {
         "CiphertextBlob": "AQEDAHjRYf5WytIc0C857tFSnBaPn2F8DgfmThbJlGfR8P3WlwAAAH4wfAYJKoZIhvcNAQcGoG8wbQIBADBoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDEFogL",
-        "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
+        "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6"
     }
 
 The ``CiphertextBlob`` (encrypted data key) is returned in base64-encoded format. 
diff -pruN 2.23.6-1/awscli/examples/kms/generate-data-key.rst 2.31.35-1/awscli/examples/kms/generate-data-key.rst
--- 2.23.6-1/awscli/examples/kms/generate-data-key.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-data-key.rst	2025-11-12 19:17:29.000000000 +0000
@@ -15,13 +15,13 @@ Output::
     {
         "Plaintext": "VdzKNHGzUAzJeRBVY+uUmofUGGiDzyB3+i9fVkh3piw=",
         "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6",
         "CiphertextBlob": "AQEDAHjRYf5WytIc0C857tFSnBaPn2F8DgfmThbJlGfR8P3WlwAAAH4wfAYJKoZIhvcNAQcGoG8wbQIBADBoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDEFogLqPWZconQhwHAIBEIA7d9AC7GeJJM34njQvg4Wf1d5sw0NIo1MrBqZa+YdhV8MrkBQPeac0ReRVNDt9qleAt+SHgIRF8P0H+7U="
     }
 
 The ``Plaintext`` (plaintext data key) and the ``CiphertextBlob`` (encrypted data key) are returned in base64-encoded format. 
 
-For more information, see `Data keys <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys`__ in the *AWS Key Management Service Developer Guide*.
- 
+For more information, see `Data keys <https://docs.aws.amazon.com/kms/latest/developerguide/data-keys.html>`__ in the *AWS Key Management Service Developer Guide*.
 **Example 2: To generate a 512-bit symmetric data key**
 
 The following ``generate-data-key`` example requests a 512-bit symmetric data key for encryption and decryption. The command returns a plaintext data key for immediate use and deletion, and a copy of that data key encrypted under the specified KMS key. You can safely store the encrypted data key with the encrypted data. 
@@ -41,9 +41,10 @@ Output::
     {
         "CiphertextBlob": "AQIBAHi6LtupRpdKl2aJTzkK6FbhOtQkMlQJJH3PdtHvS/y+hAEnX/QQNmMwDfg2korNMEc8AAACaDCCAmQGCSqGSIb3DQEHBqCCAlUwggJRAgEAMIICSgYJKoZ...",
         "Plaintext": "ty8Lr0Bk6OF07M2BWt6qbFdNB+G00ZLtf5MSEb4al3R2UKWGOp06njAwy2n72VRm2m7z/Pm9Wpbvttz6a4lSo9hgPvKhZ5y6RTm4OovEXiVfBveyX3DQxDzRSwbKDPk/...",
-        "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
+        "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6"
     }
 
 The ``Plaintext`` (plaintext data key) and ``CiphertextBlob`` (encrypted data key) are returned in base64-encoded format. 
 
-For more information, see `Data keys <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
+For more information, see `Data keys <https://docs.aws.amazon.com/kms/latest/developerguide/data-keys.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kms/generate-mac.rst 2.31.35-1/awscli/examples/kms/generate-mac.rst
--- 2.23.6-1/awscli/examples/kms/generate-mac.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-mac.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,45 @@
+**Example 1: To generate an HMAC for a message**
+
+The following ``generate-mac`` command generates an HMAC for a message, an HMAC KMS key, and a MAC algorithm. The algorithm must be supported by the specified HMAC KMS key.
+
+In AWS CLI v2, the value of the ``message`` parameter must be Base64-encoded. Or, you can save the message in a file and use the ``fileb://`` prefix, which tells the AWS CLI to read binary data from the file.
+
+Before running this command, replace the example key ID with a valid key ID from your AWS account. The key ID must represent a HMAC KMS key with a key usage of ``GENERATE_VERIFY_MAC``. ::
+
+    msg=(echo 'Hello World' | base64)
+    
+    aws kms generate-mac \
+        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
+        --message fileb://Message \
+        --mac-algorithm HMAC_SHA_384
+
+Output::
+
+    {
+        "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "Mac": "<HMAC_TAG>",
+        "MacAlgorithm": "HMAC_SHA_384"
+    }
+
+For more information about using HMAC KMS keys in AWS KMS, see `HMAC keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html>`__ in the *AWS Key Management Service Developer Guide*.
+
+**Example 2: To save an HMAC in a file (Linux and macOs)**
+
+The following ``generate-mac``  example generates an HMAC for a short message stored in a local file. The command also gets the ``Mac`` property from the response, Base64-decodes it and saves it in the ExampleMac file. You can use the MAC file in a ``verify-mac`` command that verifies the MAC.
+
+The ``generate-mac`` command requires a Base64-encoded message and a MAC algorithm that your HMAC KMS key supports. To get the MAC algorithms that your KMS key supports, use the ``describe-key`` command.
+
+Before running this command, replace the example key ID with a valid key ID from your AWS account. The key ID must represent an asymmetric KMS key with a key usage of GENERATE_VERIFY_MAC. ::
+
+    echo 'hello world' | base64 > EncodedMessage
+
+    aws kms generate-mac \
+        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
+        --message fileb://EncodedMessage \
+        --mac-algorithm HMAC_SHA_384 \
+        --output text \
+        --query Mac | base64 --decode > ExampleMac
+
+This command produces no output. This example extracts the ``Mac`` property of the output and saves it in a file.
+
+For more information about using HMAC KMS keys in AWS KMS, see `HMAC keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html>`__ in the *AWS Key Management Service Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/kms/generate-random.rst 2.31.35-1/awscli/examples/kms/generate-random.rst
--- 2.23.6-1/awscli/examples/kms/generate-random.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/generate-random.rst	2025-11-12 19:17:29.000000000 +0000
@@ -6,7 +6,7 @@ When you run this command, you must use
 
 You don't specify a KMS key when you run this command. The random byte string is unrelated to any KMS key. 
 
-By default, AWS KMS generates the random number. However, if you specify a `custom key store<https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html>`__, the random byte string is generated in the AWS CloudHSM cluster associated with the custom key store.
+By default, AWS KMS generates the random number. However, if you specify a `custom key store <https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html>`__, the random byte string is generated in the AWS CloudHSM cluster associated with the custom key store.
 
 This example uses the following parameters and values:
 
diff -pruN 2.23.6-1/awscli/examples/kms/get-public-key.rst 2.31.35-1/awscli/examples/kms/get-public-key.rst
--- 2.23.6-1/awscli/examples/kms/get-public-key.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/get-public-key.rst	2025-11-12 19:17:29.000000000 +0000
@@ -20,8 +20,7 @@ Output::
         ]
     }
 
-For more information about using asymmetric KMS keys in AWS KMS, see `Using Symmetric and Asymmetric Keys <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service API Reference*.
-
+For more information about using asymmetric KMS keys in AWS KMS, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.
 **Example 2: To convert a public key to DER format (Linux and macOS)**
 
 The following ``get-public-key`` example downloads the public key of an asymmetric KMS key and saves it in a DER file.
@@ -37,4 +36,4 @@ Before running this command, replace the
 
 This command produces no output.
 
-For more information about using asymmetric KMS keys in AWS KMS, see `Using Symmetric and Asymmetric Keys <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service API Reference*.
+For more information about using asymmetric KMS keys in AWS KMS, see `Asymmetric keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kms/import-key-material.rst 2.31.35-1/awscli/examples/kms/import-key-material.rst
--- 2.23.6-1/awscli/examples/kms/import-key-material.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/import-key-material.rst	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,11 @@ Before running this command, replace the
         --expiration-model KEY_MATERIAL_EXPIRES \
         --valid-to 2021-09-21T19:00:00Z
 
-This command produces no output.
+Output::
+
+    {
+        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
+        "KeyMaterialId": "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6"
+    }
 
 For more information about importing key material, see `Importing Key Material <https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kms/re-encrypt.rst 2.31.35-1/awscli/examples/kms/re-encrypt.rst
--- 2.23.6-1/awscli/examples/kms/re-encrypt.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/re-encrypt.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ The following ``re-encrypt`` command exa
 
 * Provide the ciphertext in a file. 
 
-    In the value of the ``--ciphertext-blob`` parameter, use the ``fileb://`` prefix, which tells the CLI to read the data from a binary file. If the file is not in the current directory, type the full path to file. For more information about reading AWS CLI parameter values from a file, see `Loading AWS CLI parameters from a file <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html>` in the *AWS Command Line Interface User Guide* and `Best Practices for Local File Parameters<https://aws.amazon.com/blogs/developer/best-practices-for-local-file-parameters/>` in the *AWS Command Line Tool Blog*.
+    In the value of the ``--ciphertext-blob`` parameter, use the ``fileb://`` prefix, which tells the CLI to read the data from a binary file. If the file is not in the current directory, type the full path to file. For more information about reading AWS CLI parameter values from a file, see `Loading AWS CLI parameters from a file <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html>`__ in the *AWS Command Line Interface User Guide* and `Best Practices for Local File Parameters <https://aws.amazon.com/blogs/developer/best-practices-for-local-file-parameters/>`__ in the *AWS Command Line Tool Blog*.
 
 * Specify the source KMS key, which decrypts the ciphertext.
 
@@ -34,7 +34,7 @@ Before running this command, replace the
 
 This command produces no output. The output from the ``re-encrypt`` command is base64-decoded and saved in a file.
 
-For more information, see `ReEncrypt <https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html`__ in the *AWS Key Management Service API Reference*.
+For more information, see `ReEncrypt <https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html>`__ in the *AWS Key Management Service API Reference*.
 
 **Example 2: To re-encrypt an encrypted message under a different symmetric KMS key (Windows command prompt).**
 
@@ -59,4 +59,4 @@ Output::
     Output Length = 12
     CertUtil: -decode command completed successfully.
 
-For more information, see `ReEncrypt <https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html`__ in the *AWS Key Management Service API Reference*.
+For more information, see `ReEncrypt <https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html>`__ in the *AWS Key Management Service API Reference*.
diff -pruN 2.23.6-1/awscli/examples/kms/sign.rst 2.31.35-1/awscli/examples/kms/sign.rst
--- 2.23.6-1/awscli/examples/kms/sign.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/sign.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ The following ``sign`` example generates
 
 You must specify a message to sign and a signing algorithm that your asymmetric KMS key supports. To get the signing algorithms for your KMS key, use the ``describe-key`` command. 
 
-In AWS CLI 2.0, the value of the ``message`` parameter must be Base64-encoded. Or, you can save the message in a file and use the ``fileb://`` prefix, which tells the AWS CLI to read binary data from the file.
+In AWS CLI v2, the value of the ``message`` parameter must be Base64-encoded. Or, you can save the message in a file and use the ``fileb://`` prefix, which tells the AWS CLI to read binary data from the file.
 
 Before running this command, replace the example key ID with a valid key ID from your AWS account. The key ID must represent an asymmetric KMS key with a key usage of SIGN_VERIFY. ::
 
diff -pruN 2.23.6-1/awscli/examples/kms/verify-mac.rst 2.31.35-1/awscli/examples/kms/verify-mac.rst
--- 2.23.6-1/awscli/examples/kms/verify-mac.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/verify-mac.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**Example 1: To verify an HMAC**
+
+The following ``verify-mac`` command verifies an HMAC for a particular message, HMAC KMS keys, and MAC algorithm. A value of 'true' in the MacValid value in the response indicates that the HMAC is valid.
+
+In AWS CLI v2, the value of the ``message`` parameter must be Base64-encoded. Or, you can save the message in a file and use the ``fileb://`` prefix, which tells the AWS CLI to read binary data from the file.
+
+The MAC that you specify cannot be base64-encoded. For help decoding the MAC that the ``generate-mac`` command returns, see the ``generate-mac`` command examples.
+
+Before running this command, replace the example key ID with a valid key ID from your AWS account. The key ID must represent a HMAC KMS key with a key usage of ``GENERATE_VERIFY_MAC``. ::
+
+    msg=(echo 'Hello World' | base64)
+    
+    aws kms verify-mac \
+        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
+        --message fileb://Message \
+        --mac-algorithm HMAC_SHA_384 \
+        --mac fileb://ExampleMac
+
+Output::
+
+    {
+        "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
+        "MacValid": true,
+        "MacAlgorithm": "HMAC_SHA_384"
+    }
+
+For more information about using HMAC KMS keys in AWS KMS, see `HMAC keys in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/hmac.html>`__ in the *AWS Key Management Service Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/kms/verify.rst 2.31.35-1/awscli/examples/kms/verify.rst
--- 2.23.6-1/awscli/examples/kms/verify.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/kms/verify.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,10 @@
 **To verify a digital signature**
 
-The following ``verify`` example verifies a cryptographic signature for a short, Base64-encoded message. The key ID, message, message type, and signing algorithm must be same ones that were used to sign the message. The signature that you specify cannot be base64-encoded. For help decoding the signature that the ``sign`` command returns, see the ``sign`` command examples.
+The following ``verify`` command verifies a cryptographic signature for a short, Base64-encoded message. The key ID, message, message type, and signing algorithm must be same ones that were used to sign the message.
+
+In AWS CLI v2, the value of the ``message`` parameter must be Base64-encoded. Or, you can save the message in a file and use the ``fileb://`` prefix, which tells the AWS CLI to read binary data from the file.
+
+The signature that you specify cannot be base64-encoded. For help decoding the signature that the ``sign`` command returns, see the ``sign`` command examples.
 
 The output of the command includes a Boolean ``SignatureValid`` field that indicates that the signature was verified. If the signature validation fails, the ``verify`` command fails, too.
 
diff -pruN 2.23.6-1/awscli/examples/lambda/create-function.rst 2.31.35-1/awscli/examples/lambda/create-function.rst
--- 2.23.6-1/awscli/examples/lambda/create-function.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/lambda/create-function.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ The following ``create-function`` exampl
 
     aws lambda create-function \
         --function-name my-function \
-        --runtime nodejs18.x \
+        --runtime nodejs22.x \
         --zip-file fileb://my-function.zip \
         --handler my-function.handler \
         --role arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-tges6bf4
@@ -28,10 +28,10 @@ Output::
         "Version": "$LATEST",
         "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4",
         "Timeout": 3,
-        "LastModified": "2023-10-14T22:26:11.234+0000",
+        "LastModified": "2025-10-14T22:26:11.234+0000",
         "Handler": "my-function.handler",
-        "Runtime": "nodejs18.x",
+        "Runtime": "nodejs22.x",
         "Description": ""
     }
 
-For more information, see `AWS Lambda Function Configuration <https://docs.aws.amazon.com/lambda/latest/dg/resource-model.html>`__ in the *AWS Lambda Developer Guide*.
+For more information, see `Configure Lambda function memory <https://docs.aws.amazon.com/lambda/latest/dg/configuration-memory.html>`__ in the *AWS Lambda Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/lambda/get-function.rst 2.31.35-1/awscli/examples/lambda/get-function.rst
--- 2.23.6-1/awscli/examples/lambda/get-function.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/lambda/get-function.rst	2025-11-12 19:17:29.000000000 +0000
@@ -34,10 +34,10 @@ Output::
             "Handler": "index.handler",
             "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq",
             "Timeout": 3,
-            "LastModified": "2019-09-24T18:20:35.054+0000",
-            "Runtime": "nodejs10.x",
+            "LastModified": "2025-09-24T18:20:35.054+0000",
+            "Runtime": "nodejs22.x",
             "Description": ""
         }
     }
 
-For more information, see `AWS Lambda Function Configuration <https://docs.aws.amazon.com/lambda/latest/dg/resource-model.html>`__ in the *AWS Lambda Developer Guide*.
+For more information, see `Configure Lambda function memory <https://docs.aws.amazon.com/lambda/latest/dg/configuration-memory.html>`__ in the *AWS Lambda Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/lambda/invoke.rst 2.31.35-1/awscli/examples/lambda/invoke.rst
--- 2.23.6-1/awscli/examples/lambda/invoke.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/lambda/invoke.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,6 @@
 The following ``invoke`` example invokes the ``my-function`` function synchronously. The ``cli-binary-format`` option is required if you're using AWS CLI version 2. For more information, see `AWS CLI supported global command line options <https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list>`__ in the *AWS Command Line Interface User Guide*. ::
 
     aws lambda invoke \
-        --cli-binary-format raw-in-base64-out \
         --function-name my-function \
         --cli-binary-format raw-in-base64-out \
         --payload '{ "name": "Bob" }' \
@@ -16,14 +15,13 @@ Output::
         "StatusCode": 200
     }
 
-For more information, see `Synchronous Invocation <https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html>`__ in the *AWS Lambda Developer Guide*.
+For more information, see `Invoke a Lambda function synchronously <https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html>`__ in the *AWS Lambda Developer Guide*.
 
 **Example 2: To invoke a Lambda function asynchronously**
 
 The following ``invoke`` example invokes the ``my-function`` function asynchronously. The ``cli-binary-format`` option is required if you're using AWS CLI version 2. For more information, see `AWS CLI supported global command line options <https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list>`__ in the *AWS Command Line Interface User Guide*. ::
 
     aws lambda invoke \
-        --cli-binary-format raw-in-base64-out \
         --function-name my-function \
         --invocation-type Event \
         --cli-binary-format raw-in-base64-out \
@@ -36,4 +34,4 @@ Output::
         "StatusCode": 202
     }
 
-For more information, see `Asynchronous Invocation <https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html>`__ in the *AWS Lambda Developer Guide*.
+For more information, see `Invoking a Lambda function asynchronously <https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html>`__ in the *AWS Lambda Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/lambda/list-functions.rst 2.31.35-1/awscli/examples/lambda/list-functions.rst
--- 2.23.6-1/awscli/examples/lambda/list-functions.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/lambda/list-functions.rst	2025-11-12 19:17:29.000000000 +0000
@@ -22,8 +22,8 @@ Output::
                 "Handler": "helloworld.handler",
                 "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4",
                 "Timeout": 3,
-                "LastModified": "2023-09-23T18:32:33.857+0000",
-                "Runtime": "nodejs18.x",
+                "LastModified": "2025-09-23T18:32:33.857+0000",
+                "Runtime": "nodejs22.x",
                 "Description": ""
             },
             {
@@ -45,8 +45,8 @@ Output::
                 "Handler": "index.handler",
                 "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq",
                 "Timeout": 3,
-                "LastModified": "2023-10-01T16:47:28.490+0000",
-                "Runtime": "nodejs18.x",
+                "LastModified": "2025-10-01T16:47:28.490+0000",
+                "Runtime": "nodejs22.x",
                 "Description": ""
             },
             {
@@ -78,11 +78,11 @@ Output::
                 "Handler": "lambda_function.lambda_handler",
                 "Role": "arn:aws:iam::123456789012:role/service-role/my-python-function-role-z5g7dr6n",
                 "Timeout": 3,
-                "LastModified": "2023-10-01T19:40:41.643+0000",
+                "LastModified": "2025-10-01T19:40:41.643+0000",
                 "Runtime": "python3.11",
                 "Description": ""
             }
         ]
     }
 
-For more information, see `AWS Lambda Function Configuration <https://docs.aws.amazon.com/lambda/latest/dg/resource-model.html>`__ in the *AWS Lambda Developer Guide*.
\ No newline at end of file
+For more information, see `Configure Lambda function memory <https://docs.aws.amazon.com/lambda/latest/dg/configuration-memory.html>`__ in the *AWS Lambda Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/create-monitor.rst 2.31.35-1/awscli/examples/networkflowmonitor/create-monitor.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/create-monitor.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/create-monitor.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+**To create a monitor**
+
+The following ``create-monitor`` example creates a monitor named ``demo`` in the specified account. ::
+
+    aws networkflowmonitor create-monitor \
+        --monitor-name demo \
+        --local-resources type="AWS::EC2::VPC",identifier="arn:aws:ec2:us-east-1:123456789012:vpc/vpc-03ea55eeda25adbb0"  \
+        --scope-arn arn:aws:networkflowmonitor:us-east-1:123456789012:scope/e21cda79-30a0-4c12-9299-d8629d76d8cf
+
+Output::
+
+    {
+        "monitorArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/demo",
+        "monitorName": "demo",
+        "monitorStatus": "ACTIVE",
+        "tags": {}
+    }
+
+For more information, see `Create a monitor in Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-monitors-create.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/create-scope.rst 2.31.35-1/awscli/examples/networkflowmonitor/create-scope.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/create-scope.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/create-scope.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,16 @@
+**To create a scope**
+
+The following ``create-scope`` example creates a scope that includes a set of resources for which Network Flow Monitor will generate network traffic metrics. ::
+
+    aws networkflowmonitor create-scope \
+        --targets '[{"targetIdentifier":{"targetId":{"accountId":"123456789012"},"targetType":"ACCOUNT"},"region":"us-east-1"}]'
+
+Output::
+
+    {
+        "scopeId": "97626f8d-8a21-4b5d-813a-1a0962dd4615",
+        "status": "IN_PROGRESS",
+        "tags": {}
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/delete-monitor.rst 2.31.35-1/awscli/examples/networkflowmonitor/delete-monitor.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/delete-monitor.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/delete-monitor.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To delete a monitor**
+
+The following ``delete-monitor`` example deletes a monitor named ``demo`` in the specified account. ::
+
+    aws networkflowmonitor delete-monitor \
+        --monitor-name demo
+
+This command produces no output.
+
+For more information, see `Delete a monitor in Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-monitors-delete.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/delete-scope.rst 2.31.35-1/awscli/examples/networkflowmonitor/delete-scope.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/delete-scope.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/delete-scope.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To delete a scope**
+
+The following ``delete-scope`` example deletes a specified scope. ::
+
+    aws networkflowmonitor delete-scope \
+        --scope-id fdc20616-6bb4-4242-a24e-a748e65ca7ac
+
+This command produces no output.
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-monitor.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-monitor.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-monitor.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-monitor.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,26 @@
+**To retrieve information about a monitor**
+
+The following ``get-monitor`` example displays information about the monitor named ``demo`` in the specified account. ::
+
+    aws networkflowmonitor get-monitor \ 
+        --monitor-name Demo
+
+Output::
+
+    {
+        "monitorArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo",
+        "monitorName": "Demo",
+        "monitorStatus": "ACTIVE",
+        "localResources": [
+            {
+                "type": "AWS::EC2::VPC",
+                "identifier": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-03ea55eeda25adbb0"
+            }
+        ],
+        "remoteResources": [],
+        "createdAt": "2024-12-09T12:21:51.616000-06:00",
+        "modifiedAt": "2024-12-09T12:21:55.412000-06:00",
+        "tags": {}
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors-data.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors-data.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors-data.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors-data.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,30 @@
+**To retrieve the top contributor data on workload insights**
+
+The following ``get-query-results-workload-insights-top-contributors-data`` example returns the data for the specified query. ::
+
+    aws networkflowmonitor get-query-results-workload-insights-top-contributors-data \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id cc4f4ab3-3103-33b8-80ff-d6597a0c6cea
+
+Output::
+
+    {
+        "datapoints": [
+            {
+                "timestamps": [
+                    "2024-12-09T19:00:00+00:00",
+                    "2024-12-09T19:05:00+00:00",
+                    "2024-12-09T19:10:00+00:00"
+                ],
+                "values": [
+                    259943.0,
+                    194856.0,
+                    216432.0
+                ],
+                "label": "use1-az6"
+            }
+        ],
+        "unit": "Bytes"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-query-results-workload-insights-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To retrieve the top contributors on workload insights**
+
+The following ``get-query-results-workload-insights-top-contributors`` example returns the data for the specified query. ::
+
+    aws networkflowmonitor get-query-results-workload-insights-top-contributors \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id 1fc423d3-b144-37a6-80e6-e2c7d26eea0c
+
+Output::
+
+    {
+        "topContributors": [
+            {
+                "accountId": "123456789012",
+                "localSubnetId": "subnet-0a5b30fb95dca2c14",
+                "localAz": "use1-az6",
+                "localVpcId": "vpc-03ea55eeda25adbb0",
+                "localRegion": "us-east-1",
+                "remoteIdentifier": "",
+                "value": 908443,
+                "localSubnetArn": "arn:aws:ec2:us-east-1:123456789012:subnet/subnet-0a5b30fb95dca2c14",
+                "localVpcArn": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-03ea55eeda25adbb0"
+            }
+        ]
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-monitor-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-monitor-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-monitor-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-monitor-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To retrieve the status of the query**
+
+The following ``get-query-status-monitor-top-contributors`` example displays the current status of the query in the specified account. ::
+
+    aws networkflowmonitor get-query-status-monitor-top-contributors \
+        --monitor-name Demo \
+        --query-id 5398eabd-bc40-3f5f-aba3-bcb639d3c7ca
+
+Output::
+
+    {
+        "status": "SUCCEEDED"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors-data.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors-data.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors-data.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors-data.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To retrieve the status of the query**
+
+The following ``get-query-status-workload-insights-top-contributors-data`` example displays the current status of the query in the specified account. ::
+
+    aws networkflowmonitor get-query-status-workload-insights-top-contributors-data \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id 4333754d-8ae1-3f29-b6b7-c36db2e7f8ac
+
+Output::
+
+    {
+        "status": "SUCCEEDED"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-query-status-workload-insights-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,15 @@
+**To retrieve the status of the query**
+
+The following ``get-query-status-workload-insights-top-contributors`` example displays the current status of the query in the specified account. ::
+
+    aws networkflowmonitor get-query-status-workload-insights-top-contributors \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id f2a87c70-3e5a-362e-8beb-4747d13d8419
+
+Output::
+
+    {
+        "status": "SUCCEEDED"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/get-scope.rst 2.31.35-1/awscli/examples/networkflowmonitor/get-scope.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/get-scope.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/get-scope.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,28 @@
+**To retrieve information about a scope**
+
+The following ``get-scope`` example displays information about a scope, such as status, tags, name and target details. ::
+
+    aws networkflowmonitor get-scope \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf
+
+Output::
+
+    {
+        "scopeId": "e21cda79-30a0-4c12-9299-d8629d76d8cf",
+        "status": "SUCCEEDED",
+        "scopeArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:scope/e21cda79-30a0-4c12-9299-d8629d76d8cf",
+        "targets": [
+            {
+                "targetIdentifier": {
+                    "targetId": {
+                        "accountId": "123456789012"
+                    },
+                    "targetType": "ACCOUNT"
+                },
+                "region": "us-east-1"
+            }
+        ],
+        "tags": {}
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/list-monitors.rst 2.31.35-1/awscli/examples/networkflowmonitor/list-monitors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/list-monitors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/list-monitors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+**To retrieve a list of monitors**
+
+The following ``list-monitors`` example returns returns all the monitors in the specified account. ::
+
+    aws networkflowmonitor list-monitors 
+
+Output::
+
+    {
+        "monitors": [
+            {
+                "monitorArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo",
+                "monitorName": "Demo",
+                "monitorStatus": "ACTIVE"
+            }
+        ]
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/list-scopes.rst 2.31.35-1/awscli/examples/networkflowmonitor/list-scopes.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/list-scopes.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/list-scopes.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,19 @@
+**To retrieve a list of scopes**
+
+The following ``list-scopes`` example lists all scopes in the specified account. ::
+
+    aws networkflowmonitor list-scopes 
+
+Output::
+
+    {
+        "scopes": [
+            {
+                "scopeId": "fdc20616-6bb4-4242-a24e-a748e65ca7ac",
+                "status": "SUCCEEDED",
+                "scopeArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:scope/fdc20616-6bb4-4242-a24e-a748e65ca7ac"
+            }
+        ]
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/list-tags-for-resource.rst 2.31.35-1/awscli/examples/networkflowmonitor/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/list-tags-for-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To list the tags**
+
+The following ``list-tags-for-resource`` example returns all the tags associated with the specified resource. ::
+
+    aws networkflowmonitor list-tags-for-resource \
+        --resource-arn arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo
+
+Output::
+
+    {
+        "tags": {
+            "Value": "Production",
+            "Key": "stack"
+        }
+    }
+
+For more information, see `Tagging your Amazon CloudWatch resources <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Tagging.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/start-query-monitor-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/start-query-monitor-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/start-query-monitor-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/start-query-monitor-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To start a query**
+
+The following ``start-query-monitor-top-contributors``  example starts the query which returns a query ID to retrieve the top contributors. ::
+
+    aws networkflowmonitor start-query-monitor-top-contributors \
+        --monitor-name Demo \
+        --start-time 2024-12-09T19:00:00Z \
+        --end-time 2024-12-09T19:15:00Z \
+        --metric-name DATA_TRANSFERRED \
+        --destination-category UNCLASSIFIED
+
+Output::
+
+    {
+        "queryId": "aecd3a88-0283-35b0-a17d-6e944dc8531d"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors-data.rst 2.31.35-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors-data.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors-data.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors-data.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To start a query**
+
+The following ``start-query-workload-insights-top-contributors-data``  example starts the query which returns a query ID to retrieve the top contributors. ::
+
+    aws networkflowmonitor start-query-workload-insights-top-contributors-data \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --start-time 2024-12-09T19:00:00Z \
+        --end-time 2024-12-09T19:15:00Z \
+        --metric-name DATA_TRANSFERRED \
+        --destination-category UNCLASSIFIED
+
+Output::
+
+    {
+        "queryId": "cc4f4ab3-3103-33b8-80ff-d6597a0c6cea"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/start-query-workload-insights-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To start a query**
+
+The following ``start-query-workload-insights-top-contributors``  example starts the query which returns a query ID to retrieve the top contributors. ::
+
+    aws networkflowmonitor start-query-workload-insights-top-contributors \
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --start-time 2024-12-09T19:00:00Z \
+        --end-time 2024-12-09T19:15:00Z \
+        --metric-name DATA_TRANSFERRED \
+        --destination-category UNCLASSIFIED
+
+Output::
+
+    {
+        "queryId": "1fc423d3-b144-37a6-80e6-e2c7d26eea0c"
+    }
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-monitor-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-monitor-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-monitor-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-monitor-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To stop a query**
+
+The following ``stop-query-monitor-top-contributors`` example stops the query in the specified account. ::
+
+    aws networkflowmonitor stop-query-monitor-top-contributors \
+        --monitor-name Demo \
+        --query-id aecd3a88-0283-35b0-a17d-6e944dc8531d
+
+This command produces no output.
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors-data.rst 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors-data.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors-data.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors-data.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To stop a query**
+
+The following ``stop-query-workload-insights-top-contributors-data`` example stops the query in the specified account. ::
+
+    aws networkflowmonitor stop-query-workload-insights-top-contributors-data \ 
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id cc4f4ab3-3103-33b8-80ff-d6597a0c6cea
+
+This command produces no output.
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors.rst 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/stop-query-workload-insights-top-contributors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To stop a query**
+
+The following ``stop-query-workload-insights-top-contributors`` example stops the query in the specified account. ::
+
+    aws networkflowmonitor stop-query-workload-insights-top-contributors \ 
+        --scope-id e21cda79-30a0-4c12-9299-d8629d76d8cf \
+        --query-id 1fc423d3-b144-37a6-80e6-e2c7d26eea0c
+
+This command produces no output.
+
+For more information, see `Evaluate network flows with workload insights <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-configure-evaluate-flows.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/tag-resource.rst 2.31.35-1/awscli/examples/networkflowmonitor/tag-resource.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/tag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To add a tag to the specified resource**
+
+The following ``tag-resource`` example adds a tag to the monitor in the specified account. ::
+
+    aws networkflowmonitor tag-resource \
+        --resource-arn arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo \
+        --tags Key=stack,Value=Production  
+
+This command produces no output.
+
+For more information, see `Tagging your Amazon CloudWatch resources <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Tagging.html>`__ in the *Amazon CloudWatch User Guide*.
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/untag-resource.rst 2.31.35-1/awscli/examples/networkflowmonitor/untag-resource.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/untag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To remove a tag from the specified resource**
+
+The following ``untag-resource`` example removes a tag from the monitor in the specified account. ::
+
+    aws networkflowmonitor untag-resource \
+        --resource-arn arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo \
+        --tag-keys stack  
+
+This command produces no output.
+
+For more information, see `Tagging your Amazon CloudWatch resources <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Tagging.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkflowmonitor/update-monitor.rst 2.31.35-1/awscli/examples/networkflowmonitor/update-monitor.rst
--- 2.23.6-1/awscli/examples/networkflowmonitor/update-monitor.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkflowmonitor/update-monitor.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,21 @@
+**To update an existing monitor**
+
+The following ``update-monitor`` example updates the monitor named ``Demo`` in the specified account. ::
+
+    aws networkflowmonitor update-monitor \
+        --monitor-name Demo \
+        --local-resources-to-add type="AWS::EC2::VPC",identifier="arn:aws:ec2:us-east-1:123456789012:vpc/vpc-048d08dfbec623f94" 
+
+Output::
+
+    {
+        "monitorArn": "arn:aws:networkflowmonitor:us-east-1:123456789012:monitor/Demo",
+        "monitorName": "Demo",
+        "monitorStatus": "ACTIVE",
+        "tags": {
+            "Value": "Production",
+            "Key": "stack"
+        }
+    }
+
+For more information, see `Components and features of Network Flow Monitor <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-NetworkFlowMonitor-components.html>`__ in the *Amazon CloudWatch User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkmanager/delete-bucket-analytics-configuration.rst 2.31.35-1/awscli/examples/networkmanager/delete-bucket-analytics-configuration.rst
--- 2.23.6-1/awscli/examples/networkmanager/delete-bucket-analytics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/delete-bucket-analytics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-bucket-analytics-configuration`` example removes the analytics configuration for the specified bucket and ID. ::
 
     aws s3api delete-bucket-analytics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkmanager/delete-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/networkmanager/delete-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/networkmanager/delete-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/delete-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-bucket-metrics-configuration`` example removes the metrics configuration for the specified bucket and ID. ::
 
     aws s3api delete-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/networkmanager/delete-public-access-block.rst 2.31.35-1/awscli/examples/networkmanager/delete-public-access-block.rst
--- 2.23.6-1/awscli/examples/networkmanager/delete-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/delete-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,6 +3,6 @@
 The following ``delete-public-access-block`` example removes the block public access configuration on the specified bucket. ::
 
     aws s3api delete-public-access-block \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/networkmanager/get-bucket-analytics-configuration.rst 2.31.35-1/awscli/examples/networkmanager/get-bucket-analytics-configuration.rst
--- 2.23.6-1/awscli/examples/networkmanager/get-bucket-analytics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/get-bucket-analytics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-analytics-configuration`` example displays the analytics configuration for the specified bucket and ID. ::
 
     aws s3api get-bucket-analytics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/networkmanager/get-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/networkmanager/get-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/networkmanager/get-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/get-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-metrics-configuration`` example displays the metrics configuration for the specified bucket and ID. ::
 
     aws s3api get-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/networkmanager/get-object-retention.rst 2.31.35-1/awscli/examples/networkmanager/get-object-retention.rst
--- 2.23.6-1/awscli/examples/networkmanager/get-object-retention.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/get-object-retention.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-retention`` example retrieves the object retention configuration for the specified object. ::
 
     aws s3api get-object-retention \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/networkmanager/get-public-access-block.rst 2.31.35-1/awscli/examples/networkmanager/get-public-access-block.rst
--- 2.23.6-1/awscli/examples/networkmanager/get-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/get-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,7 +2,7 @@
 
 The following ``get-public-access-block`` example displays the block public access configuration for the specified bucket. ::
 
-    aws s3api get-public-access-block --bucket my-bucket
+    aws s3api get-public-access-block --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/networkmanager/list-bucket-analytics-configurations.rst 2.31.35-1/awscli/examples/networkmanager/list-bucket-analytics-configurations.rst
--- 2.23.6-1/awscli/examples/networkmanager/list-bucket-analytics-configurations.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/list-bucket-analytics-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-bucket-analytics-configurations`` retrieves a list of analytics configurations for the specified bucket. ::
 
     aws s3api list-bucket-analytics-configurations \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/networkmanager/list-bucket-metrics-configurations.rst 2.31.35-1/awscli/examples/networkmanager/list-bucket-metrics-configurations.rst
--- 2.23.6-1/awscli/examples/networkmanager/list-bucket-metrics-configurations.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/list-bucket-metrics-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-bucket-metrics-configurations`` example retrieves a list of metrics configurations for the specified bucket. ::
 
     aws s3api list-bucket-metrics-configurations \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/networkmanager/put-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/networkmanager/put-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/networkmanager/put-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/put-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-metrics-configuration`` example sets a metric configuration with ID 123 for the specified bucket. ::
 
     aws s3api put-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123 \
         --metrics-configuration '{"Id": "123", "Filter": {"Prefix": "logs"}}'
 
diff -pruN 2.23.6-1/awscli/examples/networkmanager/put-object-retention.rst 2.31.35-1/awscli/examples/networkmanager/put-object-retention.rst
--- 2.23.6-1/awscli/examples/networkmanager/put-object-retention.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/put-object-retention.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-object-retention`` example sets an object retention configuration for the specified object until 2025-01-01. ::
 
     aws s3api put-object-retention \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf \
         --retention '{ "Mode": "GOVERNANCE", "RetainUntilDate": "2025-01-01T00:00:00" }'
 
diff -pruN 2.23.6-1/awscli/examples/networkmanager/put-public-access-block.rst 2.31.35-1/awscli/examples/networkmanager/put-public-access-block.rst
--- 2.23.6-1/awscli/examples/networkmanager/put-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/networkmanager/put-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-public-access-block`` example sets a restrictive block public access configuration for the specified bucket. ::
 
     aws s3api put-public-access-block \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/omics/cancel-run.rst 2.31.35-1/awscli/examples/omics/cancel-run.rst
--- 2.23.6-1/awscli/examples/omics/cancel-run.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/cancel-run.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,4 +5,4 @@ The following ``cancel-run`` example can
     aws omics cancel-run \
         --id 1234567
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Run lifecycle in a workflow <https://docs.aws.amazon.com/omics/latest/dev/monitoring-runs.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/create-run-group.rst 2.31.35-1/awscli/examples/omics/create-run-group.rst
--- 2.23.6-1/awscli/examples/omics/create-run-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/create-run-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,7 +5,9 @@ The following ``create-run-group`` examp
     aws omics create-run-group \
         --name cram-converter \
         --max-cpus 20 \
-        --max-duration 600
+        --max-gpus 10 \
+        --max-duration 600 \
+        --max-runs 5 
 
 Output::
 
@@ -15,4 +17,4 @@ Output::
         "tags": {}
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating run groups <https://docs.aws.amazon.com/omics/latest/dev/creating-run-groups.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/create-workflow.rst 2.31.35-1/awscli/examples/omics/create-workflow.rst
--- 2.23.6-1/awscli/examples/omics/create-workflow.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/create-workflow.rst	2025-11-12 19:17:29.000000000 +0000
@@ -42,4 +42,4 @@ Output::
         "tags": {}
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating private workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows-setup.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/delete-run-group.rst 2.31.35-1/awscli/examples/omics/delete-run-group.rst
--- 2.23.6-1/awscli/examples/omics/delete-run-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/delete-run-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,4 +5,4 @@ The following ``delete-run-group`` examp
     aws omics delete-run-group \
         --id 1234567
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Deleting runs and run groups <https://docs.aws.amazon.com/omics/latest/dev/deleting-workflows-and-runs.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/delete-run.rst 2.31.35-1/awscli/examples/omics/delete-run.rst
--- 2.23.6-1/awscli/examples/omics/delete-run.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/delete-run.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,4 +5,4 @@ The following ``delete-run`` example del
     aws omics delete-run \
         --id 1234567
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Deleting runs and run groups <https://docs.aws.amazon.com/omics/latest/dev/deleting-workflows-and-runs.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/delete-workflow.rst 2.31.35-1/awscli/examples/omics/delete-workflow.rst
--- 2.23.6-1/awscli/examples/omics/delete-workflow.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/delete-workflow.rst	2025-11-12 19:17:29.000000000 +0000
@@ -5,4 +5,4 @@ The following ``delete-workflow`` exampl
     aws omics delete-workflow \
         --id 1234567
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Delete a private workflow <https://docs.aws.amazon.com/omics/latest/dev/delete-private-workflow.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/get-run-group.rst 2.31.35-1/awscli/examples/omics/get-run-group.rst
--- 2.23.6-1/awscli/examples/omics/get-run-group.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/get-run-group.rst	2025-11-12 19:17:29.000000000 +0000
@@ -17,4 +17,4 @@ Output::
         "tags": {}
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating run groups <https://docs.aws.amazon.com/omics/latest/dev/creating-run-groups.html>`__ in the *AWS HealthOmics User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/omics/get-run-task.rst 2.31.35-1/awscli/examples/omics/get-run-task.rst
--- 2.23.6-1/awscli/examples/omics/get-run-task.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/get-run-task.rst	2025-11-12 19:17:29.000000000 +0000
@@ -20,4 +20,4 @@ Output::
         "taskId": "1234567"
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Task lifecycle in a HealthOmics run <https://docs.aws.amazon.com/omics/latest/dev/workflow-run-tasks.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/get-run.rst 2.31.35-1/awscli/examples/omics/get-run.rst
--- 2.23.6-1/awscli/examples/omics/get-run.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/get-run.rst	2025-11-12 19:17:29.000000000 +0000
@@ -35,4 +35,4 @@ Output::
         "workflowType": "PRIVATE"
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Run lifecycle in a workflow <https://docs.aws.amazon.com/omics/latest/dev/monitoring-runs.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/get-workflow.rst 2.31.35-1/awscli/examples/omics/get-workflow.rst
--- 2.23.6-1/awscli/examples/omics/get-workflow.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/get-workflow.rst	2025-11-12 19:17:29.000000000 +0000
@@ -38,4 +38,4 @@ Output::
         "type": "PRIVATE"
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating private workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows-setup.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/list-run-groups.rst 2.31.35-1/awscli/examples/omics/list-run-groups.rst
--- 2.23.6-1/awscli/examples/omics/list-run-groups.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/list-run-groups.rst	2025-11-12 19:17:29.000000000 +0000
@@ -19,4 +19,4 @@ Output::
         ]
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating run groups <https://docs.aws.amazon.com/omics/latest/dev/creating-run-groups.html>`__ in the *AWS HealthOmics User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/omics/list-run-tasks.rst 2.31.35-1/awscli/examples/omics/list-run-tasks.rst
--- 2.23.6-1/awscli/examples/omics/list-run-tasks.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/list-run-tasks.rst	2025-11-12 19:17:29.000000000 +0000
@@ -32,4 +32,4 @@ Output::
         ]
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Task lifecycle in a HealthOmics run <https://docs.aws.amazon.com/omics/latest/dev/workflow-run-tasks.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/list-runs.rst 2.31.35-1/awscli/examples/omics/list-runs.rst
--- 2.23.6-1/awscli/examples/omics/list-runs.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/list-runs.rst	2025-11-12 19:17:29.000000000 +0000
@@ -43,4 +43,4 @@ Output::
         ]
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Run lifecycle in a workflow <https://docs.aws.amazon.com/omics/latest/dev/monitoring-runs.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/list-workflows.rst 2.31.35-1/awscli/examples/omics/list-workflows.rst
--- 2.23.6-1/awscli/examples/omics/list-workflows.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/list-workflows.rst	2025-11-12 19:17:29.000000000 +0000
@@ -29,4 +29,4 @@ Output::
         ]
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating private workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows-setup.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/start-run.rst 2.31.35-1/awscli/examples/omics/start-run.rst
--- 2.23.6-1/awscli/examples/omics/start-run.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/start-run.rst	2025-11-12 19:17:29.000000000 +0000
@@ -32,7 +32,7 @@ Output::
         "tags": {}
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Starting a run <https://docs.aws.amazon.com/omics/latest/dev/starting-a-run.html>`__ in the *AWS HealthOmics User Guide*.
 
 **To load source files from Amazon Omics**
 
@@ -46,4 +46,3 @@ You can also load source files from Amaz
         "ref_fasta_index": "omics://123456789012.storage.us-west-2.amazonaws.com/1234567890/reference/1234567890/index"
     }
 
-For more information, see `Omics Workflows <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/omics/update-workflow.rst 2.31.35-1/awscli/examples/omics/update-workflow.rst
--- 2.23.6-1/awscli/examples/omics/update-workflow.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/omics/update-workflow.rst	2025-11-12 19:17:29.000000000 +0000
@@ -6,4 +6,4 @@ The following ``update-workflow`` exampl
         --id 1234567 \
         --description "copy workflow"
 
-For more information, see `Omics Storage <https://docs.aws.amazon.com/omics/latest/dev/workflows.html>`__ in the *Amazon Omics Developer Guide*.
+For more information, see `Creating or updating a workflow <https://docs.aws.amazon.com/omics/latest/dev/creating-private-workflows.html>`__ in the *AWS HealthOmics User Guide*.
diff -pruN 2.23.6-1/awscli/examples/opsworks/assign-instance.rst 2.31.35-1/awscli/examples/opsworks/assign-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/assign-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/assign-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To assign a registered instance to a layer**
-
-The following example assigns a registered instance to a custom layer. ::
-
-  aws opsworks --region us-east-1 assign-instance --instance-id 4d6d1710-ded9-42a1-b08e-b043ad7af1e2 --layer-ids 26cf1d32-6876-42fa-bbf1-9cadc0bff938
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Assigning a Registered Instance to a Layer`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Assigning a Registered Instance to a Layer`: http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-assign.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/assign-volume.rst 2.31.35-1/awscli/examples/opsworks/assign-volume.rst
--- 2.23.6-1/awscli/examples/opsworks/assign-volume.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/assign-volume.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To assign a registered volume to an instance**
-
-The following example assigns a registered Amazon Elastic Block Store (Amazon EBS) volume to an instance.
-The volume is identified by its volume ID, which is the GUID that AWS OpsWorks assigns when
-you register the volume with a stack, not the Amazon Elastic Compute Cloud (Amazon EC2) volume ID.
-Before you run ``assign-volume``, you must first run ``update-volume`` to assign a mount point to the volume. ::
-
-  aws opsworks --region us-east-1 assign-volume --instance-id 4d6d1710-ded9-42a1-b08e-b043ad7af1e2 --volume-id 26cf1d32-6876-42fa-bbf1-9cadc0bff938
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Assigning Amazon EBS Volumes to an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Assigning Amazon EBS Volumes to an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-attach.html#resources-attach-ebs
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/associate-elastic-ip.rst 2.31.35-1/awscli/examples/opsworks/associate-elastic-ip.rst
--- 2.23.6-1/awscli/examples/opsworks/associate-elastic-ip.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/associate-elastic-ip.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To associate an Elastic IP address with an instance**
-
-The following example associates an Elastic IP address with a specified instance. ::
-
-  aws opsworks --region us-east-1 associate-elastic-ip --instance-id dfe18b02-5327-493d-91a4-c5c0c448927f --elastic-ip 54.148.130.96
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Resource Management`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Resource Management`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/attach-elastic-load-balancer.rst 2.31.35-1/awscli/examples/opsworks/attach-elastic-load-balancer.rst
--- 2.23.6-1/awscli/examples/opsworks/attach-elastic-load-balancer.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/attach-elastic-load-balancer.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To attach a load balancer to a layer**
-
-The following example attaches a load balancer, identified by its name, to a specified layer. ::
-
-  aws opsworks --region us-east-1 attach-elastic-load-balancer --elastic-load-balancer-name Java-LB --layer-id 888c5645-09a5-4d0e-95a8-812ef1db76a4 
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Elastic Load Balancing`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Elastic Load Balancing`: http://docs.aws.amazon.com/opsworks/latest/userguide/load-balancer-elb.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-app.rst 2.31.35-1/awscli/examples/opsworks/create-app.rst
--- 2.23.6-1/awscli/examples/opsworks/create-app.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-app.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,64 +0,0 @@
-**Example 1: To create an app**
-
-The following example creates a PHP app named SimplePHPApp from code stored in a GitHub repository.
-The command uses the shorthand form of the application source definition. ::
-
-    aws opsworks create-app \
-        --region us-east-1 \
-        --stack-id f6673d70-32e6-4425-8999-265dd002fec7 \
-        --name SimplePHPApp \
-        --type php \
-        --app-source Type=git,Url=git://github.com/amazonwebservices/opsworks-demo-php-simple-app.git,Revision=version1
-
-Output::
-
-    {
-        "AppId": "6cf5163c-a951-444f-a8f7-3716be75f2a2"
-    }
-
-**Example 2: To create an app with an attached database**
-
-The following example creates a JSP app from code stored in .zip archive in a public S3 bucket.
-It attaches an RDS DB instance to serve as the app's data store. The application and database sources are defined in separate
-JSON files that are in the directory from which you run the command. ::
-
-    aws opsworks create-app \
-        --region us-east-1 \
-        --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8 \
-        --name SimpleJSP \
-        --type java \
-        --app-source file://appsource.json \
-        --data-sources file://datasource.json 
-
-The application source information is in ``appsource.json`` and contains the following. ::
-
-    {
-        "Type": "archive",
-        "Url": "https://s3.amazonaws.com/opsworks-demo-assets/simplejsp.zip"
-    }
-
-The database source information is in ``datasource.json`` and contains the following. ::
-
-    [
-        {
-            "Type": "RdsDbInstance",
-            "Arn": "arn:aws:rds:us-west-2:123456789012:db:clitestdb",
-            "DatabaseName": "mydb"
-        }
-    ]
-  
-**Note**: For an RDS DB instance, you must first use ``register-rds-db-instance`` to register the instance with the stack.
-For MySQL App Server instances, set ``Type`` to ``OpsworksMysqlInstance``. These instances are
-created by AWS OpsWorks,
-so they do not have to be registered.
-
-Output::
-
-    {
-        "AppId": "26a61ead-d201-47e3-b55c-2a7c666942f8"
-    }
-
-For more information, see `Adding Apps`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Adding Apps`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-deployment.rst 2.31.35-1/awscli/examples/opsworks/create-deployment.rst
--- 2.23.6-1/awscli/examples/opsworks/create-deployment.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-deployment.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,66 +0,0 @@
-**Example 1: To deploy apps and run stack commands**
-
-The following examples show how to use the ``create-deployment`` command to deploy apps and run stack commands.  Notice that the quote (``"``) characters in the JSON object that specifies the command are all preceded by escape characters (\\). Without the escape characters, the command might return an invalid JSON error.
-
-The following ``create-deployment`` example deploys an app to a specified stack. ::
-
-    aws opsworks create-deployment \
-        --stack-id cfb7e082-ad1d-4599-8e81-de1c39ab45bf \
-        --app-id 307be5c8-d55d-47b5-bd6e-7bd417c6c7eb 
-        --command "{\"Name\":\"deploy\"}"
-
-Output::
-
-    {
-        "DeploymentId": "5746c781-df7f-4c87-84a7-65a119880560"
-    }
-
-**Example 2: To deploy a Rails App and Migrate the Database**
-
-The following ``create-deployment`` command deploys a Ruby on Rails app to a specified stack and migrates the database. ::
-
-    aws opsworks create-deployment \
-        --stack-id cfb7e082-ad1d-4599-8e81-de1c39ab45bf \
-        --app-id 307be5c8-d55d-47b5-bd6e-7bd417c6c7eb \
-        --command "{\"Name\":\"deploy\", \"Args\":{\"migrate\":[\"true\"]}}"
-
-Output::
-
-    {
-        "DeploymentId": "5746c781-df7f-4c87-84a7-65a119880560"
-    }
-
-For more information on deployment, see `Deploying Apps <https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-deploying.html>`__ in the *AWS OpsWorks User Guide*.
-
-**Example 3: Run a Recipe**
-
-The following ``create-deployment`` command runs a custom recipe, ``phpapp::appsetup``, on the instances in a specified stack. ::
-
-    aws opsworks create-deployment \
-        --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb \
-        --command "{\"Name\":\"execute_recipes\", \"Args\":{\"recipes\":[\"phpapp::appsetup\"]}}"
-
-Output::
-
-    {
-        "DeploymentId": "5cbaa7b9-4e09-4e53-aa1b-314fbd106038"
-    }
-
-For more information, see `Run Stack Commands <https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-commands.html>`__ in the *AWS OpsWorks User Guide*.
-
-**Example 4: Install Dependencies**
-
-The following ``create-deployment`` command installs dependencies, such as packages or Ruby gems, on the instances in a
-specified stack. ::
-
-    aws opsworks create-deployment \
-        --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb \
-        --command "{\"Name\":\"install_dependencies\"}"
-
-Output::
-
-    {
-        "DeploymentId": "aef5b255-8604-4928-81b3-9b0187f962ff"
-    }
-
-For more information, see `Run Stack Commands <https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-commands.html>`__ in the *AWS OpsWorks User Guide*.
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-instance.rst 2.31.35-1/awscli/examples/opsworks/create-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/create-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-**To create an instance**
-
-The following ``create-instance`` command creates an m1.large Amazon Linux instance named myinstance1 in a specified stack.
-The instance is assigned to one layer. ::
-
-  aws opsworks --region us-east-1 create-instance --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --layer-ids 5c8c272a-f2d5-42e3-8245-5bf3927cb65b --hostname myinstance1 --instance-type m1.large --os "Amazon Linux"
-
-To use an autogenerated name, call `get-hostname-suggestion`_, which generates
-a hostname based on the theme that you specified when you created the stack.
-Then pass that name to the `hostname` argument.
-
-.. _get-hostname-suggestion: http://docs.aws.amazon.com/cli/latest/reference/opsworks/get-hostname-suggestion.html
-
-*Output*::
-
-  {
-    "InstanceId": "5f9adeaa-c94c-42c6-aeef-28a5376002cd"
-  }
-
-**More Information**
-
-For more information, see `Adding an Instance to a Layer`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Adding an Instance to a Layer`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-add.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-layer.rst 2.31.35-1/awscli/examples/opsworks/create-layer.rst
--- 2.23.6-1/awscli/examples/opsworks/create-layer.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-layer.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To create a layer**
-
-The following ``create-layer`` command creates a PHP App Server layer named MyPHPLayer in a specified stack. ::
-
-  aws opsworks create-layer --region us-east-1 --stack-id f6673d70-32e6-4425-8999-265dd002fec7 --type php-app --name MyPHPLayer --shortname myphplayer
-
-*Output*::
-
-  {
-    "LayerId": "0b212672-6b4b-40e4-8a34-5a943cf2e07a"
-  }
-
-**More Information**
-
-For more information, see `How to Create a Layer`_ in the *AWS OpsWorks User Guide*.
-
-.. _`How to Create a Layer`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-create.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-server.rst 2.31.35-1/awscli/examples/opsworks/create-server.rst
--- 2.23.6-1/awscli/examples/opsworks/create-server.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-server.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-**To create a server**
-
-The following ``create-server`` example creates a new Chef Automate server named ``automate-06`` in your default region. Note that defaults are used for most other settings, such as number of backups to retain, and maintenance and backup start times. Before you run a ``create-server`` command, complete prerequisites in `Getting Started with AWS OpsWorks for Chef Automate <https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted-opscm.html>`__ in the *AWS Opsworks for Chef Automate User Guide*. ::
-
-    aws opsworks-cm create-server \
-        --engine "ChefAutomate" \
-        --instance-profile-arn "arn:aws:iam::012345678901:instance-profile/aws-opsworks-cm-ec2-role" \
-        --instance-type "t2.medium" \
-        --server-name "automate-06" \
-        --service-role-arn "arn:aws:iam::012345678901:role/aws-opsworks-cm-service-role"
-
-Output::
-
-    {
-        "Server": {
-            "AssociatePublicIpAddress": true,
-            "BackupRetentionCount": 10,
-            "CreatedAt": 2019-12-29T13:38:47.520Z,
-            "DisableAutomatedBackup": FALSE,
-            "Endpoint": "https://opsworks-cm.us-east-1.amazonaws.com",
-            "Engine": "ChefAutomate",
-            "EngineAttributes": [
-                {
-                    "Name": "CHEF_AUTOMATE_ADMIN_PASSWORD",
-                    "Value": "1Example1"
-                }
-            ],
-            "EngineModel": "Single",
-            "EngineVersion": "2019-08",
-            "InstanceProfileArn": "arn:aws:iam::012345678901:instance-profile/aws-opsworks-cm-ec2-role",
-            "InstanceType": "t2.medium",
-            "PreferredBackupWindow": "Sun:02:00",
-            "PreferredMaintenanceWindow": "00:00",
-            "SecurityGroupIds": [ "sg-12345678" ],
-            "ServerArn": "arn:aws:iam::012345678901:instance/automate-06-1010V4UU2WRM2",
-            "ServerName": "automate-06",
-            "ServiceRoleArn": "arn:aws:iam::012345678901:role/aws-opsworks-cm-service-role",
-            "Status": "CREATING",
-            "SubnetIds": [ "subnet-12345678" ]
-        }
-    }
-
-For more information, see `CreateServer <https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html>`__ in the *AWS OpsWorks for Chef Automate API Reference*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-stack.rst 2.31.35-1/awscli/examples/opsworks/create-stack.rst
--- 2.23.6-1/awscli/examples/opsworks/create-stack.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-stack.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-**To create a stack**
-
-The following ``create-stack`` command creates a stack named CLI Stack. ::
-
-  aws opsworks create-stack --name "CLI Stack" --stack-region "us-east-1" --service-role-arn arn:aws:iam::123456789012:role/aws-opsworks-service-role --default-instance-profile-arn arn:aws:iam::123456789012:instance-profile/aws-opsworks-ec2-role --region us-east-1
-
-The ``service-role-arn`` and ``default-instance-profile-arn`` parameters are required. You typically
-use the ones that AWS OpsWorks
-creates for you when you create your first stack. To get the Amazon Resource Names (ARNs) for your
-account, go to the `IAM console`_, choose ``Roles`` in the navigation panel,
-choose the role or profile, and choose the ``Summary`` tab.
-
-.. _`IAM console`: https://console.aws.amazon.com/iam/home
-
-*Output*::
-
-  {
-    "StackId": "f6673d70-32e6-4425-8999-265dd002fec7"
-  }
-
-**More Information**
-
-For more information, see `Create a New Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Create a New Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/create-user-profile.rst 2.31.35-1/awscli/examples/opsworks/create-user-profile.rst
--- 2.23.6-1/awscli/examples/opsworks/create-user-profile.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/create-user-profile.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To create a user profile**
-
-You import an AWS Identity and Access Manager (IAM) user into AWS OpsWorks by calling `create-user-profile` to create a user profile.
-The following example creates a user profile for the cli-user-test IAM user, who
-is identified by Amazon Resource Name (ARN). The example assigns the user an SSH username of ``myusername`` and enables self management,
-which allows the user to specify an SSH public key. ::
-
-  aws opsworks --region us-east-1 create-user-profile --iam-user-arn arn:aws:iam::123456789102:user/cli-user-test --ssh-username myusername --allow-self-management
-
-*Output*::
-
-  {
-    "IamUserArn": "arn:aws:iam::123456789102:user/cli-user-test"
-  }
-
-**Tip**: This command imports an IAM user into AWS OpsWorks, but only with the permissions that are
-granted by the attached policies. You can grant per-stack AWS OpsWorks permissions by using the ``set-permissions`` command.
-
-**More Information**
-
-For more information, see `Importing Users into AWS OpsWorks`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Importing Users into AWS OpsWorks`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-manage-import.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/delete-app.rst 2.31.35-1/awscli/examples/opsworks/delete-app.rst
--- 2.23.6-1/awscli/examples/opsworks/delete-app.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/delete-app.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To delete an app**
-
-The following example deletes a specified app, which is identified by its app ID.
-You can obtain an app ID by going to the app's details page on the AWS OpsWorks console or by
-running the ``describe-apps`` command. ::
-
-  aws opsworks delete-app --region us-east-1 --app-id 577943b9-2ec1-4baf-a7bf-1d347601edc5
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Apps`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Apps`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps.html
-
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/delete-instance.rst 2.31.35-1/awscli/examples/opsworks/delete-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/delete-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/delete-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To delete an instance**
-
-The following ``delete-instance`` example deletes a specified instance, which is identified by its instance ID. You can find an instance ID by opening the instance's details page in the AWS OpsWorks console, or by running the ``describe-instances`` command.
-
-If the instance is online, you must first stop the instance by calling ``stop-instance``, and then you must wait until the instance has stopped. Run ``describe-instances`` to check the instance status.
-
-To remove the instance's Amazon EBS volumes or Elastic IP addresses, add the ``--delete-volumes`` or ``--delete-elastic-ip`` arguments, respectively. ::
-
-    aws opsworks delete-instance \
-        --region us-east-1 \
-        --instance-id 3a21cfac-4a1f-4ce2-a921-b2cfba6f7771
-
-This command produces no output.
-
-For more information, see `Deleting AWS OpsWorks Instances <https://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-delete.html>`__ in the *AWS OpsWorks User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworks/delete-layer.rst 2.31.35-1/awscli/examples/opsworks/delete-layer.rst
--- 2.23.6-1/awscli/examples/opsworks/delete-layer.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/delete-layer.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To delete a layer**
-
-The following example deletes a specified layer, which is identified by its layer ID.
-You can obtain a layer ID by going to the layer's details page on the AWS OpsWorks console or by
-running the ``describe-layers`` command.
-
-**Note:** Before deleting a layer, you must use ``delete-instance`` to delete all of the layer's instances. ::
-
-  aws opsworks delete-layer --region us-east-1 --layer-id a919454e-b816-4598-b29a-5796afb498ed
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Deleting AWS OpsWorks Instances`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Deleting AWS OpsWorks Instances`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-delete.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/delete-stack.rst 2.31.35-1/awscli/examples/opsworks/delete-stack.rst
--- 2.23.6-1/awscli/examples/opsworks/delete-stack.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/delete-stack.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-**To delete a stack**
-
-The following example deletes a specified stack, which is identified by its stack ID.
-You can obtain a stack ID by clicking **Stack Settings** on the AWS OpsWorks console or by
-running the ``describe-stacks`` command.
-
-**Note:** Before deleting a layer, you must use ``delete-app``, ``delete-instance``, and ``delete-layer``
-to delete all of the stack's apps, instances, and layers. ::
-
-  aws opsworks delete-stack --region us-east-1 --stack-id 154a9d89-7e9e-433b-8de8-617e53756c84
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Shut Down a Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Shut Down a Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-shutting.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/delete-user-profile.rst 2.31.35-1/awscli/examples/opsworks/delete-user-profile.rst
--- 2.23.6-1/awscli/examples/opsworks/delete-user-profile.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/delete-user-profile.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To delete a user profile and remove an IAM user from AWS OpsWorks**
-
-The following example deletes the user profile for a specified AWS Identity and Access Management
-(IAM) user, who
-is identified by Amazon Resource Name (ARN). The operation removes the user from AWS OpsWorks, but
-does not delete the IAM user. You must use the IAM console, CLI, or API for that task. ::
-
-  aws opsworks --region us-east-1 delete-user-profile --iam-user-arn arn:aws:iam::123456789102:user/cli-user-test
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Importing Users into AWS OpsWorks`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Importing Users into AWS OpsWorks`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-manage-import.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/deregister-elastic-ip.rst 2.31.35-1/awscli/examples/opsworks/deregister-elastic-ip.rst
--- 2.23.6-1/awscli/examples/opsworks/deregister-elastic-ip.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/deregister-elastic-ip.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,13 +0,0 @@
-**To deregister an Elastic IP address from a stack**
-
-The following example deregisters an Elastic IP address, identified by its IP address, from its stack. ::
-
-  aws opsworks deregister-elastic-ip --region us-east-1 --elastic-ip 54.148.130.96 
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Deregistering Elastic IP Addresses`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Deregistering Elastic IP Addresses`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-dereg.html#resources-dereg-eip
diff -pruN 2.23.6-1/awscli/examples/opsworks/deregister-instance.rst 2.31.35-1/awscli/examples/opsworks/deregister-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/deregister-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/deregister-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To deregister a registered instance from a stack**
-
-The following ``deregister-instance`` command deregisters a registered instance from its stack. ::
-
-  aws opsworks --region us-east-1 deregister-instance --instance-id 4d6d1710-ded9-42a1-b08e-b043ad7af1e2
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Deregistering a Registered Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Deregistering a Registered Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-unassign.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/deregister-rds-db-instance.rst 2.31.35-1/awscli/examples/opsworks/deregister-rds-db-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/deregister-rds-db-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/deregister-rds-db-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To deregister an Amazon RDS DB instance from a stack**
-
-The following example deregisters an RDS DB instance, identified by its ARN, from its stack. ::
-
-  aws opsworks deregister-rds-db-instance --region us-east-1 --rds-db-instance-arn arn:aws:rds:us-west-2:123456789012:db:clitestdb
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Deregistering Amazon RDS Instances`_ in the *ASW OpsWorks User Guide*.
-
-.. _`Deregistering Amazon RDS Instances`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-dereg.html#resources-dereg-rds
-
-
-.. instance ID: clitestdb
-   Master usernams: cliuser
-   Master PWD: some23!pwd
-   DB Name: mydb
-   aws opsworks deregister-rds-db-instance --region us-east-1 --rds-db-instance-arn arn:aws:rds:us-west-2:645732743964:db:clitestdb
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworks/deregister-volume.rst 2.31.35-1/awscli/examples/opsworks/deregister-volume.rst
--- 2.23.6-1/awscli/examples/opsworks/deregister-volume.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/deregister-volume.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To deregister an Amazon EBS volume**
-
-The following example deregisters an EBS volume from its stack.
-The volume is identified by its volume ID, which is the GUID that AWS OpsWorks assigned when
-you registered the volume with the stack, not the EC2 volume ID. ::
-
-  aws opsworks deregister-volume --region us-east-1 --volume-id 5c48ef52-3144-4bf5-beaa-fda4deb23d4d
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Deregistering Amazon EBS Volumes`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Deregistering Amazon EBS Volumes`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-dereg.html#resources-dereg-ebs
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-apps.rst 2.31.35-1/awscli/examples/opsworks/describe-apps.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-apps.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-apps.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-**To describe apps**
-
-The following ``describe-apps`` command describes the apps in a specified stack. ::
-
-    aws opsworks describe-apps \
-        --stack-id 38ee91e2-abdc-4208-a107-0b7168b3cc7a \
-        --region us-east-1 
-
-Output:: 
-
-    {
-        "Apps": [
-            {
-                "StackId": "38ee91e2-abdc-4208-a107-0b7168b3cc7a",
-                "AppSource": {
-                "Url": "https://s3-us-west-2.amazonaws.com/opsworks-demo-assets/simplejsp.zip",
-                "Type": "archive"
-            },
-                "Name": "SimpleJSP",
-                "EnableSsl": false,
-                "SslConfiguration": {},
-                "AppId": "da1decc1-0dff-43ea-ad7c-bb667cd87c8b",
-                "Attributes": {
-                "RailsEnv": null,
-                "AutoBundleOnDeploy": "true",
-                "DocumentRoot": "ROOT"
-            },
-                "Shortname": "simplejsp",
-                "Type": "other",
-                "CreatedAt": "2013-08-01T21:46:54+00:00"
-            }
-        ]
-    }
-
-For more information, see Apps_ in the *AWS OpsWorks User Guide*.
-
-.. _Apps: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-commands.rst 2.31.35-1/awscli/examples/opsworks/describe-commands.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-commands.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-commands.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-**To describe commands**
-
-The following ``describe-commands`` command describes the commands in a specified instance. ::
-
-    aws opsworks describe-commands \
-        --instance-id 8c2673b9-3fe5-420d-9cfa-78d875ee7687 \
-        --region us-east-1
-
-Output::
-
-    {
-        "Commands": [
-            {
-                "Status": "successful",
-                "CompletedAt": "2013-07-25T18:57:47+00:00",
-                "InstanceId": "8c2673b9-3fe5-420d-9cfa-78d875ee7687",
-                "DeploymentId": "6ed0df4c-9ef7-4812-8dac-d54a05be1029",
-                "AcknowledgedAt": "2013-07-25T18:57:41+00:00",
-                "LogUrl": "https://s3.amazonaws.com/<bucket-name>/logs/008c1a91-ec59-4d51-971d-3adff54b00cc?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE &Expires=1375394373&Signature=HkXil6UuNfxTCC37EPQAa462E1E%3D&response-cache-control=private&response-content-encoding=gzip&response-content- type=text%2Fplain",
-                "Type": "undeploy",
-                "CommandId": "008c1a91-ec59-4d51-971d-3adff54b00cc",
-                "CreatedAt": "2013-07-25T18:57:34+00:00",
-                "ExitCode": 0
-            },
-            {
-                "Status": "successful",
-                "CompletedAt": "2013-07-25T18:55:40+00:00",
-                "InstanceId": "8c2673b9-3fe5-420d-9cfa-78d875ee7687",
-                "DeploymentId": "19d3121e-d949-4ff2-9f9d-94eac087862a",
-                "AcknowledgedAt": "2013-07-25T18:55:32+00:00",
-                "LogUrl": "https://s3.amazonaws.com/<bucket-name>/logs/899d3d64-0384-47b6-a586-33433aad117c?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE &Expires=1375394373&Signature=xMsJvtLuUqWmsr8s%2FAjVru0BtRs%3D&response-cache-control=private&response-content-encoding=gzip&response-conten t-type=text%2Fplain",
-                "Type": "deploy",
-                "CommandId": "899d3d64-0384-47b6-a586-33433aad117c",
-                "CreatedAt": "2013-07-25T18:55:29+00:00",
-                "ExitCode": 0
-            }
-        ]
-    }
-
-For more information, see `AWS OpsWorks Lifecycle Events`_ in the *AWS OpsWorks User Guide*.
-
-.. _`AWS OpsWorks Lifecycle Events`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-events.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-deployments.rst 2.31.35-1/awscli/examples/opsworks/describe-deployments.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-deployments.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-deployments.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,52 +0,0 @@
-**To describe deployments**
-
-The following ``describe-deployments`` command describes the deployments in a specified stack. ::
-
-  aws opsworks --region us-east-1 describe-deployments --stack-id 38ee91e2-abdc-4208-a107-0b7168b3cc7a
-
-*Output*::
-
-  {
-    "Deployments": [
-        {
-            "StackId": "38ee91e2-abdc-4208-a107-0b7168b3cc7a",
-            "Status": "successful",
-            "CompletedAt": "2013-07-25T18:57:49+00:00",
-            "DeploymentId": "6ed0df4c-9ef7-4812-8dac-d54a05be1029",
-            "Command": {
-                "Args": {},
-                "Name": "undeploy"
-            },
-            "CreatedAt": "2013-07-25T18:57:34+00:00",
-            "Duration": 15,
-            "InstanceIds": [
-                "8c2673b9-3fe5-420d-9cfa-78d875ee7687",
-                "9e588a25-35b2-4804-bd43-488f85ebe5b7"
-            ]
-        },
-        {
-            "StackId": "38ee91e2-abdc-4208-a107-0b7168b3cc7a",
-            "Status": "successful",
-            "CompletedAt": "2013-07-25T18:56:41+00:00",
-            "IamUserArn": "arn:aws:iam::123456789012:user/someuser",
-            "DeploymentId": "19d3121e-d949-4ff2-9f9d-94eac087862a",
-            "Command": {
-                "Args": {},
-                "Name": "deploy"
-            },
-            "InstanceIds": [
-                "8c2673b9-3fe5-420d-9cfa-78d875ee7687",
-                "9e588a25-35b2-4804-bd43-488f85ebe5b7"
-            ],
-            "Duration": 72,
-            "CreatedAt": "2013-07-25T18:55:29+00:00"
-        }
-    ]
-  }
-
-**More Information**
-
-For more information, see `Deploying Apps`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Deploying Apps`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-deploying.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-elastic-ips.rst 2.31.35-1/awscli/examples/opsworks/describe-elastic-ips.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-elastic-ips.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-elastic-ips.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To describe Elastic IP instances**
-
-The following ``describe-elastic-ips`` command describes the Elastic IP addresses in a specified instance. ::
-
-  aws opsworks --region us-east-1 describe-elastic-ips --instance-id b62f3e04-e9eb-436c-a91f-d9e9a396b7b0
-
-*Output*::
-
-  {
-    "ElasticIps": [
-        {
-            "Ip": "192.0.2.0",
-            "Domain": "standard",
-            "Region": "us-west-2"
-        }
-    ]
-  }
-
-**More Information**
-
-For more information, see Instances_ in the *AWS OpsWorks User Guide*.
-
-.. _Instances: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-elastic-load-balancers.rst 2.31.35-1/awscli/examples/opsworks/describe-elastic-load-balancers.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-elastic-load-balancers.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-elastic-load-balancers.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-**To describe a stack's elastic load balancers**
-
-The following ``describe-elastic-load-balancers`` command describes a specified stack's load balancers.  ::
-
-  aws opsworks --region us-west-2 describe-elastic-load-balancers --stack-id 6f4660e5-37a6-4e42-bfa0-1358ebd9c182
-
-*Output*: This particular stack has one load balancer.
-
-::
-
-  {
-    "ElasticLoadBalancers": [
-        {
-            "SubnetIds": [
-                "subnet-60e4ea04",
-                "subnet-66e1c110"
-            ],
-            "Ec2InstanceIds": [],
-            "ElasticLoadBalancerName": "my-balancer",
-            "Region": "us-west-2",
-            "LayerId": "344973cb-bf2b-4cd0-8d93-51cd819bab04",
-            "AvailabilityZones": [
-                "us-west-2a",
-                "us-west-2b"
-            ],
-            "VpcId": "vpc-b319f9d4",
-            "StackId": "6f4660e5-37a6-4e42-bfa0-1358ebd9c182",
-            "DnsName": "my-balancer-2094040179.us-west-2.elb.amazonaws.com"
-        }
-    ]
-  }
-
-**More Information**
-
-For more information, see Apps_ in the *AWS OpsWorks User Guide*.
-
-.. _Apps: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-instances.rst 2.31.35-1/awscli/examples/opsworks/describe-instances.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-instances.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-instances.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,95 +0,0 @@
-**To describe instances**
-
-The following ``describe-instances`` command describes the instances in a specified stack::
-
-  aws opsworks --region us-east-1 describe-instances --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8
-
-*Output*: The following output example is for a stack with two instances. The first is a registered
-EC2 instance, and the second was created by AWS OpsWorks.
-
-::
-
-  {
-    "Instances": [
-      {
-        "StackId": "71c7ca72-55ae-4b6a-8ee1-a8dcded3fa0f",
-        "PrivateDns": "ip-10-31-39-66.us-west-2.compute.internal",
-        "LayerIds": [
-          "26cf1d32-6876-42fa-bbf1-9cadc0bff938"
-        ],
-        "EbsOptimized": false,
-        "ReportedOs": {
-          "Version": "14.04",
-          "Name": "ubuntu",
-          "Family": "debian"
-        },
-        "Status": "online",
-        "InstanceId": "4d6d1710-ded9-42a1-b08e-b043ad7af1e2",
-        "SshKeyName": "US-West-2",
-        "InfrastructureClass": "ec2",
-        "RootDeviceVolumeId": "vol-d08ec6c1",
-        "SubnetId": "subnet-b8de0ddd",
-        "InstanceType": "t1.micro",
-        "CreatedAt": "2015-02-24T20:52:49+00:00",
-        "AmiId": "ami-35501205",
-        "Hostname": "ip-192-0-2-0",
-        "Ec2InstanceId": "i-5cd23551",
-        "PublicDns": "ec2-192-0-2-0.us-west-2.compute.amazonaws.com",
-        "SecurityGroupIds": [
-          "sg-c4d3f0a1"
-        ],
-        "Architecture": "x86_64",
-        "RootDeviceType": "ebs",
-        "InstallUpdatesOnBoot": true,
-        "Os": "Custom",
-        "VirtualizationType": "paravirtual",
-        "AvailabilityZone": "us-west-2a",
-        "PrivateIp": "10.31.39.66",
-        "PublicIp": "192.0.2.06",
-        "RegisteredBy": "arn:aws:iam::123456789102:user/AWS/OpsWorks/OpsWorks-EC2Register-i-5cd23551"
-      },
-      {
-        "StackId": "71c7ca72-55ae-4b6a-8ee1-a8dcded3fa0f",
-        "PrivateDns": "ip-10-31-39-158.us-west-2.compute.internal",
-        "SshHostRsaKeyFingerprint": "69:6b:7b:8b:72:f3:ed:23:01:00:05:bc:9f:a4:60:c1",
-        "LayerIds": [
-          "26cf1d32-6876-42fa-bbf1-9cadc0bff938"
-        ],
-        "EbsOptimized": false,
-        "ReportedOs": {},
-        "Status": "booting",
-        "InstanceId": "9b137a0d-2f5d-4cc0-9704-13da4b31fdcb",
-        "SshKeyName": "US-West-2",
-        "InfrastructureClass": "ec2",
-        "RootDeviceVolumeId": "vol-e09dd5f1",
-        "SubnetId": "subnet-b8de0ddd",
-        "InstanceProfileArn": "arn:aws:iam::123456789102:instance-profile/aws-opsworks-ec2-role",
-        "InstanceType": "c3.large",
-        "CreatedAt": "2015-02-24T21:29:33+00:00",
-        "AmiId": "ami-9fc29baf",
-        "SshHostDsaKeyFingerprint": "fc:87:95:c3:f5:e1:3b:9f:d2:06:6e:62:9a:35:27:e8",
-        "Ec2InstanceId": "i-8d2dca80",
-        "PublicDns": "ec2-192-0-2-1.us-west-2.compute.amazonaws.com",
-        "SecurityGroupIds": [
-          "sg-b022add5",
-          "sg-b122add4"
-        ],
-        "Architecture": "x86_64",
-        "RootDeviceType": "ebs",
-        "InstallUpdatesOnBoot": true,
-        "Os": "Amazon Linux 2014.09",
-        "VirtualizationType": "paravirtual",
-        "AvailabilityZone": "us-west-2a",
-        "Hostname": "custom11",
-        "PrivateIp": "10.31.39.158",
-        "PublicIp": "192.0.2.0"
-      }
-    ]
-  }
-
-**More Information**
-
-For more information, see `Instances`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Instances`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-layers.rst 2.31.35-1/awscli/examples/opsworks/describe-layers.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-layers.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-layers.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,171 +0,0 @@
-**To describe a stack's layers**
-
-The following ``describe-layers`` command describes the layers in a specified stack::
-
-  aws opsworks --region us-east-1 describe-layers --stack-id 38ee91e2-abdc-4208-a107-0b7168b3cc7a
-
-*Output*::
-
-  {
-    "Layers": [
-        {
-            "StackId": "38ee91e2-abdc-4208-a107-0b7168b3cc7a",
-            "Type": "db-master",
-            "DefaultSecurityGroupNames": [
-                "AWS-OpsWorks-DB-Master-Server"
-            ],
-            "Name": "MySQL",
-            "Packages": [],
-            "DefaultRecipes": {
-                "Undeploy": [],
-                "Setup": [
-                    "opsworks_initial_setup",
-                    "ssh_host_keys",
-                    "ssh_users",
-                    "mysql::client",
-                    "dependencies",
-                    "ebs",
-                    "opsworks_ganglia::client",
-                    "mysql::server",
-                    "dependencies",
-                    "deploy::mysql"
-                ],
-                "Configure": [
-                    "opsworks_ganglia::configure-client",
-                    "ssh_users",
-                    "agent_version",
-                    "deploy::mysql"
-                ],
-                "Shutdown": [
-                    "opsworks_shutdown::default",
-                    "mysql::stop"
-                ],
-                "Deploy": [
-                    "deploy::default",
-                    "deploy::mysql"
-                ]
-            },
-            "CustomRecipes": {
-                "Undeploy": [],
-                "Setup": [],
-                "Configure": [],
-                "Shutdown": [],
-                "Deploy": []
-            },
-            "EnableAutoHealing": false,
-            "LayerId": "41a20847-d594-4325-8447-171821916b73",
-            "Attributes": {
-                "MysqlRootPasswordUbiquitous": "true",
-                "RubygemsVersion": null,
-                "RailsStack": null,
-                "HaproxyHealthCheckMethod": null,
-                "RubyVersion": null,
-                "BundlerVersion": null,
-                "HaproxyStatsPassword": null,
-                "PassengerVersion": null,
-                "MemcachedMemory": null,
-                "EnableHaproxyStats": null,
-                "ManageBundler": null,
-                "NodejsVersion": null,
-                "HaproxyHealthCheckUrl": null,
-                "MysqlRootPassword": "*****FILTERED*****",
-                "GangliaPassword": null,
-                "GangliaUser": null,
-                "HaproxyStatsUrl": null,
-                "GangliaUrl": null,
-                "HaproxyStatsUser": null
-            },
-            "Shortname": "db-master",
-            "AutoAssignElasticIps": false,
-            "CustomSecurityGroupIds": [],
-            "CreatedAt": "2013-07-25T18:11:19+00:00",
-            "VolumeConfigurations": [
-                {
-                    "MountPoint": "/vol/mysql",
-                    "Size": 10,
-                    "NumberOfDisks": 1
-                }
-            ]
-        },
-        {
-            "StackId": "38ee91e2-abdc-4208-a107-0b7168b3cc7a",
-            "Type": "custom",
-            "DefaultSecurityGroupNames": [
-                "AWS-OpsWorks-Custom-Server"
-            ],
-            "Name": "TomCustom",
-            "Packages": [],
-            "DefaultRecipes": {
-                "Undeploy": [],
-                "Setup": [
-                    "opsworks_initial_setup",
-                    "ssh_host_keys",
-                    "ssh_users",
-                    "mysql::client",
-                    "dependencies",
-                    "ebs",
-                    "opsworks_ganglia::client"
-                ],
-                "Configure": [
-                    "opsworks_ganglia::configure-client",
-                    "ssh_users",
-                    "agent_version"
-                ],
-                "Shutdown": [
-                    "opsworks_shutdown::default"
-                ],
-                "Deploy": [
-                    "deploy::default"
-                ]
-            },
-            "CustomRecipes": {
-                "Undeploy": [],
-                "Setup": [
-                    "tomcat::setup"
-                ],
-                "Configure": [
-                    "tomcat::configure"
-                ],
-                "Shutdown": [],
-                "Deploy": [
-                    "tomcat::deploy"
-                ]
-            },
-            "EnableAutoHealing": true,
-            "LayerId": "e6cbcd29-d223-40fc-8243-2eb213377440",
-            "Attributes": {
-                "MysqlRootPasswordUbiquitous": null,
-                "RubygemsVersion": null,
-                "RailsStack": null,
-                "HaproxyHealthCheckMethod": null,
-                "RubyVersion": null,
-                "BundlerVersion": null,
-                "HaproxyStatsPassword": null,
-                "PassengerVersion": null,
-                "MemcachedMemory": null,
-                "EnableHaproxyStats": null,
-                "ManageBundler": null,
-                "NodejsVersion": null,
-                "HaproxyHealthCheckUrl": null,
-                "MysqlRootPassword": null,
-                "GangliaPassword": null,
-                "GangliaUser": null,
-                "HaproxyStatsUrl": null,
-                "GangliaUrl": null,
-                "HaproxyStatsUser": null
-            },
-            "Shortname": "tomcustom",
-            "AutoAssignElasticIps": false,
-            "CustomSecurityGroupIds": [],
-            "CreatedAt": "2013-07-25T18:12:53+00:00",
-            "VolumeConfigurations": []
-        }
-    ]
-  }
-
-**More Information**
-
-For more information, see Layers_ in the *AWS OpsWorks User Guide*.
-
-.. _Layers: http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-load-based-auto-scaling.rst 2.31.35-1/awscli/examples/opsworks/describe-load-based-auto-scaling.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-load-based-auto-scaling.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-load-based-auto-scaling.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-**To describe a layer's load-based scaling configuration**
-
-The following example describes a specified layer's load-based scaling configuration.
-The layer is identified by its layer ID, which you can find on the layer's
-details page or by running ``describe-layers``. ::
-
-  aws opsworks describe-load-based-auto-scaling --region us-east-1 --layer-ids 6bec29c9-c866-41a0-aba5-fa3e374ce2a1
-
-*Output*: The example layer has a single load-based instance. :: 
-
-  {
-    "LoadBasedAutoScalingConfigurations": [
-      {
-        "DownScaling": {
-          "IgnoreMetricsTime": 10, 
-          "ThresholdsWaitTime": 10, 
-          "InstanceCount": 1, 
-          "CpuThreshold": 30.0
-        }, 
-        "Enable": true, 
-        "UpScaling": {
-          "IgnoreMetricsTime": 5, 
-          "ThresholdsWaitTime": 5, 
-          "InstanceCount": 1, 
-          "CpuThreshold": 80.0
-        }, 
-        "LayerId": "6bec29c9-c866-41a0-aba5-fa3e374ce2a1"
-      }
-    ]
-  }
-
-
-**More Information**
-
-For more information, see `How Automatic Load-based Scaling Works`_ in the *AWS OpsWorks User Guide*.
-
-.. _`How Automatic Load-based Scaling Works`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html#workinginstances-autoscaling-loadbased
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-my-user-profile.rst 2.31.35-1/awscli/examples/opsworks/describe-my-user-profile.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-my-user-profile.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-my-user-profile.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To obtain a user's profile**
-
-The following example shows how to obtain the profile
-of the AWS Identity and Access Management (IAM) user that is running the command. ::
-
-  aws opsworks --region us-east-1 describe-my-user-profile
-
-*Output*: For brevity, most of the user's SSH public key is replaced by an ellipsis (...). ::
-
-  {
-    "UserProfile": {
-      "IamUserArn": "arn:aws:iam::123456789012:user/myusername", 
-      "SshPublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQ...3LQ4aX9jpxQw== rsa-key-20141104", 
-      "Name": "myusername", 
-      "SshUsername": "myusername"
-    }
-  }
-
-**More Information**
-
-For more information, see `Importing Users into AWS OpsWorks`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Importing Users into AWS OpsWorks`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-manage-import.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-permissions.rst 2.31.35-1/awscli/examples/opsworks/describe-permissions.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-permissions.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-permissions.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-**To obtain a user's per-stack AWS OpsWorks permission level**
-
-The following example shows how to to obtain an AWS Identity and Access Management (IAM) user's permission level on a specified stack. ::
-
-  aws opsworks --region us-east-1 describe-permissions --iam-user-arn arn:aws:iam::123456789012:user/cli-user-test --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06
-
-*Output*::
-
-  {
-    "Permissions": [
-      {
-        "StackId": "d72553d4-8727-448c-9b00-f024f0ba1b06", 
-        "IamUserArn": "arn:aws:iam::123456789012:user/cli-user-test", 
-        "Level": "manage", 
-        "AllowSudo": true, 
-        "AllowSsh": true
-      }
-    ]
-  }
-
-
-**More Information**
-
-For more information, see `Granting Per-Stack Permissions Levels`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Granting Per-Stack Permissions Levels`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-console.html
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-raid-arrays.rst 2.31.35-1/awscli/examples/opsworks/describe-raid-arrays.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-raid-arrays.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-raid-arrays.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-**To describe RAID arrays**
-
-The following example describes the RAID arrays attached to the instances in a specified stack. ::
-
-  aws opsworks --region us-east-1 describe-raid-arrays --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06
-
-*Output*: The following is the output for a stack with one RAID array. ::
-
-  {
-    "RaidArrays": [
-      {
-        "StackId": "d72553d4-8727-448c-9b00-f024f0ba1b06", 
-        "AvailabilityZone": "us-west-2a", 
-        "Name": "Created for php-app1", 
-        "NumberOfDisks": 2, 
-        "InstanceId": "9f14adbc-ced5-43b6-bf01-e7d0db6cf2f7", 
-        "RaidLevel": 0, 
-        "VolumeType": "standard", 
-        "RaidArrayId": "f2d4e470-5972-4676-b1b8-bae41ec3e51c", 
-        "Device": "/dev/md0", 
-        "MountPoint": "/mnt/workspace", 
-        "CreatedAt": "2015-02-26T23:53:09+00:00", 
-        "Size": 100
-      } 
-    ]
-  }
-
-For more information, see `EBS Volumes`_ in the *AWS OpsWorks User Guide*.
-
-.. _`EBS Volumes`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html#workinglayers-basics-edit-ebs
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-rds-db-instances.rst 2.31.35-1/awscli/examples/opsworks/describe-rds-db-instances.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-rds-db-instances.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-rds-db-instances.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-**To describe a stack's registered Amazon RDS instances**
-
-The following example describes the Amazon RDS instances registered with a specified stack. ::
-
-  aws opsworks --region us-east-1 describe-rds-db-instances --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06
-
-*Output*: The following is the output for a stack with one registered RDS instance. ::
-
-  {
-    "RdsDbInstances": [
-      {
-        "Engine": "mysql", 
-        "StackId": "d72553d4-8727-448c-9b00-f024f0ba1b06", 
-        "MissingOnRds": false, 
-        "Region": "us-west-2", 
-        "RdsDbInstanceArn": "arn:aws:rds:us-west-2:123456789012:db:clitestdb", 
-        "DbPassword": "*****FILTERED*****", 
-        "Address": "clitestdb.cdlqlk5uwd0k.us-west-2.rds.amazonaws.com", 
-        "DbUser": "cliuser", 
-        "DbInstanceIdentifier": "clitestdb"
-      }
-    ]
-  }
-
-
-For more information, see `Resource Management`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Resource Management`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-stack-provisioning-parameters.rst 2.31.35-1/awscli/examples/opsworks/describe-stack-provisioning-parameters.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-stack-provisioning-parameters.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-stack-provisioning-parameters.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-**To return the provisioning parameters for a stack**
-
-The following ``describe-stack-provisioning-parameters`` example returns the provisioning parameters for a specified stack. Provisioning parameters include settings such as the agent installation location and public key that OpsWorks uses to manage the agent on instances in a stack. ::
-
-    aws opsworks describe-stack-provisioning-parameters \
-        --stack-id 62744d97-6faf-4ecb-969b-a086fEXAMPLE
-
-Output::
-
-    {
-        "AgentInstallerUrl": "https://opsworks-instance-agent-us-west-2.s3.amazonaws.com/ID_number/opsworks-agent-installer.tgz",
-        "Parameters": {
-            "agent_installer_base_url": "https://opsworks-instance-agent-us-west-2.s3.amazonaws.com",
-            "agent_installer_tgz": "opsworks-agent-installer.tgz",
-            "assets_download_bucket": "opsworks-instance-assets-us-west-2.s3.amazonaws.com",
-            "charlie_public_key": "-----BEGIN PUBLIC KEY-----PUBLIC_KEY_EXAMPLE\n-----END PUBLIC KEY-----",
-            "instance_service_endpoint": "opsworks-instance-service.us-west-2.amazonaws.com",
-            "instance_service_port": "443",
-            "instance_service_region": "us-west-2",
-            "instance_service_ssl_verify_peer": "true",
-            "instance_service_use_ssl": "true",
-            "ops_works_endpoint": "opsworks.us-west-2.amazonaws.com",
-            "ops_works_port": "443",
-            "ops_works_region": "us-west-2",
-            "ops_works_ssl_verify_peer": "true",
-            "ops_works_use_ssl": "true",
-            "verbose": "false",
-            "wait_between_runs": "30"
-        }
-    }
-
-For more information, see `Run Stack Commands <https://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-commands.html>`__ in the *AWS OpsWorks User Guide*.
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-stack-summary.rst 2.31.35-1/awscli/examples/opsworks/describe-stack-summary.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-stack-summary.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-stack-summary.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-**To describe a stack's configuration**
-
-The following ``describe-stack-summary`` command returns a summary of the specified stack's configuration. ::
-
-  aws opsworks --region us-east-1 describe-stack-summary --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8
-
-*Output*::
-
-  {
-    "StackSummary": {
-      "StackId": "8c428b08-a1a1-46ce-a5f8-feddc43771b8",
-      "InstancesCount": {
-        "Booting": 1
-      },
-      "Name": "CLITest",
-      "AppsCount": 1,
-      "LayersCount": 1,
-      "Arn": "arn:aws:opsworks:us-west-2:123456789012:stack/8c428b08-a1a1-46ce-a5f8-feddc43771b8/"
-    }
-  }
-
-**More Information**
-
-For more information, see `Stacks`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Stacks`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-stacks.rst 2.31.35-1/awscli/examples/opsworks/describe-stacks.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-stacks.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-stacks.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,65 +0,0 @@
-**To describe stacks**
-
-The following ``describe-stacks`` command describes an account's stacks. ::
-
-  aws opsworks --region us-east-1 describe-stacks
-
-*Output*::
-
-  {
-    "Stacks": [
-      {
-        "ServiceRoleArn": "arn:aws:iam::444455556666:role/aws-opsworks-service-role",
-        "StackId": "aeb7523e-7c8b-49d4-b866-03aae9d4fbcb",
-        "DefaultRootDeviceType": "instance-store",
-        "Name": "TomStack-sd",
-        "ConfigurationManager": {
-          "Version": "11.4",
-          "Name": "Chef"
-        },
-        "UseCustomCookbooks": true,
-        "CustomJson": "{\n  \"tomcat\": {\n    \"base_version\": 7,\n    \"java_opts\": \"-Djava.awt.headless=true -Xmx256m\"\n  },\n  \"datasources\": {\n    \"ROOT\": \"jdbc/mydb\"\n  }\n}",
-        "Region": "us-east-1",
-        "DefaultInstanceProfileArn": "arn:aws:iam::444455556666:instance-profile/aws-opsworks-ec2-role",
-        "CustomCookbooksSource": {
-          "Url": "git://github.com/example-repo/tomcustom.git",
-          "Type": "git"
-        },
-        "DefaultAvailabilityZone": "us-east-1a",
-        "HostnameTheme": "Layer_Dependent",
-        "Attributes": {
-          "Color": "rgb(45, 114, 184)"
-        },
-        "DefaultOs": "Amazon Linux",
-        "CreatedAt": "2013-08-01T22:53:42+00:00"
-      },
-      {
-        "ServiceRoleArn": "arn:aws:iam::444455556666:role/aws-opsworks-service-role",
-        "StackId": "40738975-da59-4c5b-9789-3e422f2cf099",
-        "DefaultRootDeviceType": "instance-store",
-        "Name": "MyStack",
-        "ConfigurationManager": {
-          "Version": "11.4",
-          "Name": "Chef"
-        },
-        "UseCustomCookbooks": false,
-        "Region": "us-east-1",
-        "DefaultInstanceProfileArn": "arn:aws:iam::444455556666:instance-profile/aws-opsworks-ec2-role",
-        "CustomCookbooksSource": {},
-        "DefaultAvailabilityZone": "us-east-1a",
-        "HostnameTheme": "Layer_Dependent",
-        "Attributes": {
-          "Color": "rgb(45, 114, 184)"
-        },
-        "DefaultOs": "Amazon Linux",
-        "CreatedAt": "2013-10-25T19:24:30+00:00"
-      }
-    ]
-  }
-
-**More Information**
-
-For more information, see `Stacks`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Stacks`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-timebased-auto-scaling.rst 2.31.35-1/awscli/examples/opsworks/describe-timebased-auto-scaling.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-timebased-auto-scaling.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-timebased-auto-scaling.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-**To describe the time-based scaling configuration of an instance**
-
-The following example describes a specified instance's time-based scaling configuration.
-The instance is identified by its instance ID, which you can find on the instances's
-details page or by running ``describe-instances``. ::
-
-  aws opsworks describe-time-based-auto-scaling --region us-east-1 --instance-ids 701f2ffe-5d8e-4187-b140-77b75f55de8d
-
-*Output*: The example has a single time-based instance. :: 
-
-  {
-    "TimeBasedAutoScalingConfigurations": [
-     {
-        "InstanceId": "701f2ffe-5d8e-4187-b140-77b75f55de8d", 
-        "AutoScalingSchedule": {
-          "Monday": {
-            "11": "on", 
-            "10": "on", 
-            "13": "on", 
-            "12": "on" 
-          }, 
-          "Tuesday": {
-            "11": "on", 
-            "10": "on", 
-            "13": "on", 
-            "12": "on" 
-          } 
-        }
-      }
-    ]
-  }
-
-
-
-**More Information**
-
-For more information, see `How Automatic Time-based Scaling Works`_ in the *AWS OpsWorks User Guide*.
-
-.. _`How Automatic Time-based Scaling Works`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling.html#workinginstances-autoscaling-timebased
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-user-profiles.rst 2.31.35-1/awscli/examples/opsworks/describe-user-profiles.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-user-profiles.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-user-profiles.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-**To describe user profiles**
-
-The following ``describe-user-profiles`` command describes the account's user profiles. ::
-
-  aws opsworks --region us-east-1 describe-user-profiles
-
-*Output*::
-
-  {
-    "UserProfiles": [
-      {
-        "IamUserArn": "arn:aws:iam::123456789012:user/someuser",
-        "SshPublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAkOuP7i80q3Cko...",
-        "AllowSelfManagement": true,
-        "Name": "someuser",
-        "SshUsername": "someuser"
-      },
-      {
-        "IamUserArn": "arn:aws:iam::123456789012:user/cli-user-test",
-        "AllowSelfManagement": true,
-        "Name": "cli-user-test",
-        "SshUsername": "myusername"
-      }
-    ]
-  }
-
-**More Information**
-
-For more information, see `Managing AWS OpsWorks Users`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Managing AWS OpsWorks Users`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-manage.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/describe-volumes.rst 2.31.35-1/awscli/examples/opsworks/describe-volumes.rst
--- 2.23.6-1/awscli/examples/opsworks/describe-volumes.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/describe-volumes.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-**To describe a stack's volumes**
-
-The following example describes a stack's EBS volumes. ::
-
-  aws opsworks --region us-east-1 describe-volumes --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8
-
-*Output*::
-
-  {
-    "Volumes": [
-      {
-        "Status": "in-use",
-        "AvailabilityZone": "us-west-2a",
-        "Name": "CLITest",
-        "InstanceId": "dfe18b02-5327-493d-91a4-c5c0c448927f",
-        "VolumeType": "standard",
-        "VolumeId": "56b66fbd-e1a1-4aff-9227-70f77118d4c5",
-        "Device": "/dev/sdi",
-        "Ec2VolumeId": "vol-295c1638",
-        "MountPoint": "/mnt/myvolume",
-        "Size": 1
-      }
-    ]
-  }
-
-**More Information**
-
-For more information, see `Resource Management`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Resource Management`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/detach-elastic-load-balancer.rst 2.31.35-1/awscli/examples/opsworks/detach-elastic-load-balancer.rst
--- 2.23.6-1/awscli/examples/opsworks/detach-elastic-load-balancer.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/detach-elastic-load-balancer.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To detach a load balancer from its layer**
-
-The following example detaches a load balancer, identified by its name, from its layer. ::
-
-  aws opsworks --region us-east-1 detach-elastic-load-balancer --elastic-load-balancer-name Java-LB --layer-id 888c5645-09a5-4d0e-95a8-812ef1db76a4 
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Elastic Load Balancing`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Elastic Load Balancing`: http://docs.aws.amazon.com/opsworks/latest/userguide/load-balancer-elb.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/disassociate-elastic-ip.rst 2.31.35-1/awscli/examples/opsworks/disassociate-elastic-ip.rst
--- 2.23.6-1/awscli/examples/opsworks/disassociate-elastic-ip.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/disassociate-elastic-ip.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To disassociate an Elastic IP address from an instance**
-
-The following example disassociates an Elastic IP address from a specified instance. ::
-
-  aws opsworks --region us-east-1 disassociate-elastic-ip --elastic-ip 54.148.130.96
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Resource Management`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Resource Management`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/get-hostname-suggestion.rst 2.31.35-1/awscli/examples/opsworks/get-hostname-suggestion.rst
--- 2.23.6-1/awscli/examples/opsworks/get-hostname-suggestion.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/get-hostname-suggestion.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-**To get the next hostname for a layer**
-
-The following example gets the next generated hostname for a specified layer. The layer used for
-this example is a Java Application Server layer with one instance. The stack's hostname theme is
-the default, Layer_Dependent. ::
-
-  aws opsworks --region us-east-1 get-hostname-suggestion --layer-id 888c5645-09a5-4d0e-95a8-812ef1db76a4
-
-*Output*::
-
-  {
-    "Hostname": "java-app2", 
-    "LayerId": "888c5645-09a5-4d0e-95a8-812ef1db76a4"
-  }
-
-**More Information**
-
-For more information, see `Create a New Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Create a New Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingstacks-creating.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/reboot-instance.rst 2.31.35-1/awscli/examples/opsworks/reboot-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/reboot-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/reboot-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To reboot an instance**
-
-The following example reboots an instance. ::
-
-  aws opsworks --region us-east-1 reboot-instance --instance-id dfe18b02-5327-493d-91a4-c5c0c448927f
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Rebooting an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Rebooting an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html#workinginstances-starting-reboot
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/register-elastic-ip.rst 2.31.35-1/awscli/examples/opsworks/register-elastic-ip.rst
--- 2.23.6-1/awscli/examples/opsworks/register-elastic-ip.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/register-elastic-ip.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-**To register an Elastic IP address with a stack**
-
-The following example registers an Elastic IP address, identified by its IP address, with a specified stack.
-
-**Note:** The Elastic IP address must be in the same region as the stack. ::
-
-  aws opsworks register-elastic-ip --region us-east-1 --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06 --elastic-ip 54.148.130.96 
-
-*Output* ::
-
-  {
-    "ElasticIp": "54.148.130.96"
-  }
-
-**More Information**
-
-For more information, see `Registering Elastic IP Addresses with a Stack`_ in the *OpsWorks User Guide*.
-
-.. _`Registering Elastic IP Addresses with a Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-reg.html#resources-reg-eip
diff -pruN 2.23.6-1/awscli/examples/opsworks/register-rds-db-instance.rst 2.31.35-1/awscli/examples/opsworks/register-rds-db-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/register-rds-db-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/register-rds-db-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To register an Amazon RDS instance with a stack**
-
-The following example registers an Amazon RDS DB instance, identified by its Amazon Resource Name (ARN), with a specified stack.
-It also specifies the instance's master username and password. Note that AWS OpsWorks does not validate either of these
-values. If either one is incorrect, your application will not be able to connect to the database. ::
-
-  aws opsworks register-rds-db-instance --region us-east-1 --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06 --rds-db-instance-arn arn:aws:rds:us-west-2:123456789012:db:clitestdb  --db-user cliuser --db-password some23!pwd
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Registering Amazon RDS Instances with a Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Registering Amazon RDS Instances with a Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-reg.html#resources-reg-rds
diff -pruN 2.23.6-1/awscli/examples/opsworks/register-volume.rst 2.31.35-1/awscli/examples/opsworks/register-volume.rst
--- 2.23.6-1/awscli/examples/opsworks/register-volume.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/register-volume.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-**To register an Amazon EBS volume with a stack**
-
-The following example registers an Amazon EBS volume, identified by its volume ID, with a specified stack. ::
-
-  aws opsworks register-volume --region us-east-1 --stack-id d72553d4-8727-448c-9b00-f024f0ba1b06 --ec-2-volume-id vol-295c1638
-
-*Output*::
-
-  {
-    "VolumeId": "ee08039c-7cb7-469f-be10-40fb7f0c05e8"
-  }
-
-
-**More Information**
-
-For more information, see `Registering Amazon EBS Volumes with a Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Registering Amazon EBS Volumes with a Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-reg.html#resources-reg-ebs
diff -pruN 2.23.6-1/awscli/examples/opsworks/register.rst 2.31.35-1/awscli/examples/opsworks/register.rst
--- 2.23.6-1/awscli/examples/opsworks/register.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/register.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,105 +0,0 @@
-**To register instances with a stack**
-
-The following examples show a variety of ways to register instances with a stack that were created outside of AWS Opsworks.
-You can run ``register`` from the instance to be registered, or from a separate workstation.
-For more information, see `Registering Amazon EC2 and On-premises Instances`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Registering Amazon EC2 and On-premises Instances`: http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-register-registering.html
-
-
-**Note**: For brevity, the examples omit the ``region`` argument.
-
-*To register an Amazon EC2 instance*
-
-To indicate that you are registering an EC2 instance, set the ``--infrastructure-class`` argument
-to ``ec2``.
-
-The following example registers an EC2 instance with the specified stack from a separate workstation.
-The instance is identified by its EC2 ID, ``i-12345678``. The example uses the workstation's default SSH username and attempts
-to log in to the instance using authentication techniques that do not require a password,
-such as a default private SSH key. If that fails, ``register`` queries for the password. ::
-
-  aws opsworks register --infrastructure-class=ec2 --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb i-12345678
-
-The following example registers an EC2 instance with the specifed stack from a separate workstation.
-It uses the ``--ssh-username`` and ``--ssh-private-key`` arguments to explicitly
-specify the SSH username and private key file that the command uses to log into the instance.
-``ec2-user`` is the standard username for Amazon Linux instances. Use ``ubuntu`` for Ubuntu instances. ::
-
-  aws opsworks register --infrastructure-class=ec2 --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --ssh-username ec2-user --ssh-private-key ssh_private_key i-12345678
-
-The following example registers the EC2 instance that is running the ``register`` command.
-Log in to the instance with SSH and run ``register`` with the ``--local`` argument instead of an instance ID or hostname. ::
-
-  aws opsworks register --infrastructure-class ec2 --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --local
-
-*To register an on-premises instance*
-
-To indicate that you are registering an on-premises instance, set the ``--infrastructure-class`` argument
-to ``on-premises``.
-
-The following example registers an existing on-premises instance with a specified stack from a separate workstation.
-The instance is identified by its IP address, ``192.0.2.3``. The example uses the workstation's default SSH username and attempts
-to log in to the instance using authentication techniques that do not require a password,
-such as a default private SSH key. If that fails, ``register`` queries for the password. ::
-
-  aws opsworks register --infrastructure-class on-premises --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb 192.0.2.3
-
-The following example registers an on-premises instance with a specified stack from a separate workstation.
-The instance is identified by its hostname, ``host1``. The ``--override-...`` arguments direct AWS OpsWorks
-to display ``webserver1`` as the host name and ``192.0.2.3`` and ``10.0.0.2`` as the instance's public and
-private IP addresses, respectively. ::
-
-  aws opsworks register --infrastructure-class on-premises --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --override-hostname webserver1 --override-public-ip 192.0.2.3 --override-private-ip 10.0.0.2 host1
-
-The following example registers an on-premises instance with a specified stack from a separate workstation.
-The instance is identified by its IP address. ``register`` logs into the instance using the specified SSH username and private key file. ::
-
-  aws opsworks register --infrastructure-class on-premises --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --ssh-username admin --ssh-private-key ssh_private_key 192.0.2.3
-
-The following example registers an existing on-premises instance with a specified stack from a separate workstation.
-The command logs into the instance using a custom SSH command string that specifies
-the SSH password and the instance's IP address. ::
-
-  aws opsworks register --infrastructure-class on-premises --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --override-ssh "sshpass -p 'mypassword' ssh your-user@192.0.2.3" 
-
-The following example registers the on-premises instance that is running the ``register`` command.
-Log in to the instance with SSH and run ``register`` with the ``--local`` argument instead of an instance ID or hostname. ::
-
-  aws opsworks register --infrastructure-class on-premises --stack-id 935450cc-61e0-4b03-a3e0-160ac817d2bb --local
-  
-*Output*: The following is typical output for registering an EC2 instance.
-
-::
-
-  Warning: Permanently added '52.11.41.206' (ECDSA) to the list of known hosts.
-  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
-                                 Dload  Upload   Total   Spent    Left  Speed
-  100 6403k  100 6403k    0     0  2121k      0  0:00:03  0:00:03 --:--:-- 2121k
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Initializing AWS OpsWorks environment
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Running on Ubuntu
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Checking if OS is supported
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Running on supported OS
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Setup motd
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Executing: ln -sf --backup /etc/motd.opsworks-static /etc/motd
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Enabling multiverse repositories
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Customizing APT environment
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Installing system packages
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Executing: dpkg --configure -a
-  [Tue, 24 Feb 2015 20:48:37 +0000] opsworks-init: Executing with retry: apt-get update
-  [Tue, 24 Feb 2015 20:49:13 +0000] opsworks-init: Executing: apt-get install -y ruby ruby-dev libicu-dev libssl-dev libxslt-dev libxml2-dev libyaml-dev monit
-  [Tue, 24 Feb 2015 20:50:13 +0000] opsworks-init: Using assets bucket from environment: 'opsworks-instance-assets-us-east-1.s3.amazonaws.com'.
-  [Tue, 24 Feb 2015 20:50:13 +0000] opsworks-init: Installing Ruby for the agent
-  [Tue, 24 Feb 2015 20:50:13 +0000] opsworks-init: Executing: /tmp/opsworks-agent-installer.YgGq8wF3UUre6yDy/opsworks-agent-installer/opsworks-agent/bin/installer_wrapper.sh -r -R opsworks-instance-assets-us-east-1.s3.amazonaws.com
-  [Tue, 24 Feb 2015 20:50:44 +0000] opsworks-init: Starting the installer
-  Instance successfully registered. Instance ID: 4d6d1710-ded9-42a1-b08e-b043ad7af1e2
-  Connection to 52.11.41.206 closed.
-
-**More Information**
-
-For more information, see `Registering an Instance with an AWS OpsWorks Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Registering an Instance with an AWS OpsWorks Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-register.html
-
-
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/set-load-based-auto-scaling.rst 2.31.35-1/awscli/examples/opsworks/set-load-based-auto-scaling.rst
--- 2.23.6-1/awscli/examples/opsworks/set-load-based-auto-scaling.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/set-load-based-auto-scaling.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-**To set the load-based scaling configuration for a layer**
-
-The following example enables load-based scaling for a specified layer and sets the configuration
-for that layer.
-You must use ``create-instance`` to add load-based instances to the layer. ::
-
-  aws opsworks --region us-east-1 set-load-based-auto-scaling --layer-id 523569ae-2faf-47ac-b39e-f4c4b381f36d --enable --up-scaling file://upscale.json --down-scaling file://downscale.json
-
-The example puts the upscaling threshold settings in a separate file in the working directory named ``upscale.json``, which contains the following. ::
-
-  {
-    "InstanceCount": 2,
-    "ThresholdsWaitTime": 3,
-    "IgnoreMetricsTime": 3,
-    "CpuThreshold": 85,
-    "MemoryThreshold": 85,
-    "LoadThreshold": 85
-  }
-  
-The example puts the downscaling threshold settings in a separate file in the working directory named ``downscale.json``, which contains the following. ::
-
-  {
-  "InstanceCount": 2,
-  "ThresholdsWaitTime": 3,
-  "IgnoreMetricsTime": 3,
-  "CpuThreshold": 35,
-  "MemoryThreshold": 30,
-  "LoadThreshold": 30
-  }
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Using Automatic Load-based Scaling`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Using Automatic Load-based Scaling`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling-loadbased.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/set-permission.rst 2.31.35-1/awscli/examples/opsworks/set-permission.rst
--- 2.23.6-1/awscli/examples/opsworks/set-permission.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/set-permission.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-**To grant per-stack AWS OpsWorks permission levels**
-
-When you import an AWS Identity and Access Management (IAM) user into AWS OpsWorks by calling ``create-user-profile``, the user has only those
-permissions that are granted by the attached IAM policies.
-You can grant AWS OpsWorks permissions by modifying a user's policies.
-However, it is often easier to import a user and then use the ``set-permission`` command to grant
-the user one of the standard permission levels for each stack to which the user will need access.
-
-The following example grants permission for the specified stack for a user, who
-is identified by Amazon Resource Name (ARN). The example grants the user a Manage permissions level, with sudo and SSH privileges on the stack's
-instances. ::
-
-  aws opsworks set-permission --region us-east-1 --stack-id 71c7ca72-55ae-4b6a-8ee1-a8dcded3fa0f --level manage  --iam-user-arn arn:aws:iam::123456789102:user/cli-user-test --allow-ssh --allow-sudo
-  
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Granting AWS OpsWorks Users Per-Stack Permissions`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Granting AWS OpsWorks Users Per-Stack Permissions`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-console.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/set-time-based-auto-scaling.rst 2.31.35-1/awscli/examples/opsworks/set-time-based-auto-scaling.rst
--- 2.23.6-1/awscli/examples/opsworks/set-time-based-auto-scaling.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/set-time-based-auto-scaling.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,33 +0,0 @@
-**To set the time-based scaling configuration for a layer**
-
-The following example sets the time-based configuration for a specified instance.
-You must first use ``create-instance`` to add the instance to the layer. ::
-
-  aws opsworks --region us-east-1 set-time-based-auto-scaling --instance-id 69b6237c-08c0-4edb-a6af-78f3d01cedf2 --auto-scaling-schedule file://schedule.json
-
-The example puts the schedule in a separate file in the working directory named ``schedule.json``.
-For this example, the instance is on for a few hours around midday UTC (Coordinated Universal Time) on Monday and Tuesday. ::
-
-  {
-    "Monday": {
-      "10": "on",
-      "11": "on",
-      "12": "on",
-      "13": "on"
-    }, 
-    "Tuesday": {
-      "10": "on",
-      "11": "on",
-      "12": "on",
-      "13": "on" 
-    }
-  }
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Using Automatic Time-based Scaling`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Using Automatic Time-based Scaling`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-autoscaling-timebased.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/start-instance.rst 2.31.35-1/awscli/examples/opsworks/start-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/start-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/start-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To start an instance**
-
-The following ``start-instance`` command starts a specified 24/7 instance. ::
-
-  aws opsworks start-instance --instance-id f705ee48-9000-4890-8bd3-20eb05825aaf
-
-*Output*: None. Use describe-instances_ to check the instance's status.
-
-.. _describe-instances: http://docs.aws.amazon.com/cli/latest/reference/opsworks/describe-instances.html
-
-**Tip** You can start every offline instance in a stack with one command by calling start-stack_.
-
-.. _start-stack: http://docs.aws.amazon.com/cli/latest/reference/opsworks/start-stack.html
-
-**More Information**
-
-For more information, see `Manually Starting, Stopping, and Rebooting 24/7 Instances`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Manually Starting, Stopping, and Rebooting 24/7 Instances`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/start-stack.rst 2.31.35-1/awscli/examples/opsworks/start-stack.rst
--- 2.23.6-1/awscli/examples/opsworks/start-stack.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/start-stack.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To start a stack's instances**
-
-The following example starts all of a stack's 24/7 instances.
-To start a particular instance, use ``start-instance``. ::
-
-  aws opsworks --region us-east-1 start-stack --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Starting an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Starting an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html#workinginstances-starting-start
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/stop-instance.rst 2.31.35-1/awscli/examples/opsworks/stop-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/stop-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/stop-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To stop an instance**
-
-The following example stops a specified instance, which is identified by its instance ID.
-You can obtain an instance ID by going to the instance's details page on the AWS OpsWorks console or by
-running the ``describe-instances`` command. ::
-
-  aws opsworks stop-instance --region us-east-1 --instance-id 3a21cfac-4a1f-4ce2-a921-b2cfba6f7771
-
-You can restart a stopped instance by calling ``start-instance`` or by deleting the instance by calling
-``delete-instance``.
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Stopping an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Stopping an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html#workinginstances-starting-stop
-
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/stop-stack.rst 2.31.35-1/awscli/examples/opsworks/stop-stack.rst
--- 2.23.6-1/awscli/examples/opsworks/stop-stack.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/stop-stack.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To stop a stack's instances**
-
-The following example stops all of a stack's 24/7 instances.
-To stop a particular instance, use ``stop-instance``. ::
-
-  aws opsworks --region us-east-1 stop-stack --stack-id 8c428b08-a1a1-46ce-a5f8-feddc43771b8
-
-*Output*: No output.
-
-**More Information**
-
-For more information, see `Stopping an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Stopping an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-starting.html#workinginstances-starting-stop
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/unassign-instance.rst 2.31.35-1/awscli/examples/opsworks/unassign-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/unassign-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/unassign-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To unassign a registered instance from its layers**
-
-The following ``unassign-instance`` command unassigns an instance from its attached layers. ::
-
-  aws opsworks --region us-east-1 unassign-instance --instance-id 4d6d1710-ded9-42a1-b08e-b043ad7af1e2
-
-**Output**: None.
-
-**More Information**
-
-For more information, see `Unassigning a Registered Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Unassigning a Registered Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/registered-instances-unassign.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/unassign-volume.rst 2.31.35-1/awscli/examples/opsworks/unassign-volume.rst
--- 2.23.6-1/awscli/examples/opsworks/unassign-volume.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/unassign-volume.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To unassign a volume from its instance**
-
-The following example unassigns a registered Amazon Elastic Block Store (Amazon EBS) volume from its instance.
-The volume is identified by its volume ID, which is the GUID that AWS OpsWorks assigns when
-you register the volume with a stack, not the Amazon Elastic Compute Cloud (Amazon EC2) volume ID. ::
-
-  aws opsworks --region us-east-1 unassign-volume --volume-id 8430177d-52b7-4948-9c62-e195af4703df
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Unassigning Amazon EBS Volumes`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Unassigning Amazon EBS Volumes`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-detach.html#resources-detach-ebs
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-app.rst 2.31.35-1/awscli/examples/opsworks/update-app.rst
--- 2.23.6-1/awscli/examples/opsworks/update-app.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-app.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To update an app**
-
-The following example updates a specified app to change its name. ::
-
-  aws opsworks --region us-east-1 update-app --app-id 26a61ead-d201-47e3-b55c-2a7c666942f8 --name NewAppName
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Editing Apps`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Editing Apps`: http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-editing.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-elastic-ip.rst 2.31.35-1/awscli/examples/opsworks/update-elastic-ip.rst
--- 2.23.6-1/awscli/examples/opsworks/update-elastic-ip.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-elastic-ip.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To update an Elastic IP address name**
-
-The following example updates the name of a specified Elastic IP address. ::
-
-  aws opsworks --region us-east-1 update-elastic-ip --elastic-ip 54.148.130.96 --name NewIPName
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Resource Management`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Resource Management`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-instance.rst 2.31.35-1/awscli/examples/opsworks/update-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/update-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To update an instance**
-
-The following example updates a specified instance's type. ::
-
-  aws opsworks --region us-east-1 update-instance --instance-id dfe18b02-5327-493d-91a4-c5c0c448927f --instance-type c3.xlarge
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Editing the Instance Configuration`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Editing the Instance Configuration`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinginstances-properties.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-layer.rst 2.31.35-1/awscli/examples/opsworks/update-layer.rst
--- 2.23.6-1/awscli/examples/opsworks/update-layer.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-layer.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To update a layer**
-
-The following example updates a specified layer to use Amazon EBS-optimized instances. ::
-
-  aws opsworks --region us-east-1 update-layer --layer-id 888c5645-09a5-4d0e-95a8-812ef1db76a4 --use-ebs-optimized-instances
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Editing an OpsWorks Layer's Configuration`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Editing an OpsWorks Layer's Configuration`: http://docs.aws.amazon.com/opsworks/latest/userguide/workinglayers-basics-edit.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-my-user-profile.rst 2.31.35-1/awscli/examples/opsworks/update-my-user-profile.rst
--- 2.23.6-1/awscli/examples/opsworks/update-my-user-profile.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-my-user-profile.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To update a user's profile**
-
-The following example updates the ``development`` user's profile to use a specified SSH public key.
-The user's AWS credentials are represented by the ``development`` profile in the ``credentials`` file
-(``~\.aws\credentials``), and the key is in a ``.pem`` file in the working directory. ::
-
-  aws opsworks --region us-east-1 --profile development update-my-user-profile --ssh-public-key file://development_key.pem
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Editing AWS OpsWorks User Settings`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Editing AWS OpsWorks User Settings`: http://docs.aws.amazon.com/opsworks/latest/userguide/opsworks-security-users-manage-edit.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-rds-db-instance.rst 2.31.35-1/awscli/examples/opsworks/update-rds-db-instance.rst
--- 2.23.6-1/awscli/examples/opsworks/update-rds-db-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-rds-db-instance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-**To update a registered Amazon RDS DB instance**
-
-The following example updates an Amazon RDS instance's master password value.
-Note that this command does not change the RDS instance's master password, just the password that
-you provide to AWS OpsWorks.
-If this password does not match the RDS instance's password,
-your application will not be able to connect to the database. ::
-
-  aws opsworks --region us-east-1 update-rds-db-instance --db-password 123456789
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Registering Amazon RDS Instances with a Stack`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Registering Amazon RDS Instances with a Stack`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-reg.html#resources-reg-rds
-
diff -pruN 2.23.6-1/awscli/examples/opsworks/update-volume.rst 2.31.35-1/awscli/examples/opsworks/update-volume.rst
--- 2.23.6-1/awscli/examples/opsworks/update-volume.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworks/update-volume.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To update a registered volume**
-
-The following example updates a registered Amazon Elastic Block Store (Amazon EBS) volume's mount point.
-The volume is identified by its volume ID, which is the GUID that AWS OpsWorks assigns to the volume when
-you register it with a stack, not the Amazon Elastic Compute Cloud (Amazon EC2) volume ID.::
-
-  aws opsworks --region us-east-1 update-volume --volume-id 8430177d-52b7-4948-9c62-e195af4703df --mount-point /mnt/myvol
-
-*Output*: None.
-
-**More Information**
-
-For more information, see `Assigning Amazon EBS Volumes to an Instance`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Assigning Amazon EBS Volumes to an Instance`: http://docs.aws.amazon.com/opsworks/latest/userguide/resources-attach.html#resources-attach-ebs
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/associate-node.rst 2.31.35-1/awscli/examples/opsworkscm/associate-node.rst
--- 2.23.6-1/awscli/examples/opsworkscm/associate-node.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/associate-node.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-**To associate nodes**
-
-The following ``associate-node`` command associates a node named ``i-44de882p`` with
-a Chef Automate server named ``automate-06``, meaning that the ``automate-06`` server
-manages the node, and communicates recipe commands to the node through ``chef-client`` agent software
-that is installed on the node by the associate-node command. Valid node names are EC2 instance IDs.::
-
-  aws opsworks-cm associate-node --server-name "automate-06" --node-name "i-43de882p" --engine-attributes "Name=CHEF_ORGANIZATION,Value='MyOrganization' Name=CHEF_NODE_PUBLIC_KEY,Value='Public_key_contents'"
-
-The output returned by the command resembles the following.
-*Output*::
-
-  {
-   "NodeAssociationStatusToken": "AHUY8wFe4pdXtZC5DiJa5SOLp5o14DH//rHRqHDWXxwVoNBxcEy4V7R0NOFymh7E/1HumOBPsemPQFE6dcGaiFk"
-  }
-
-**More Information**
-
-For more information, see `Adding Nodes Automatically in AWS OpsWorks for Chef Automate`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Adding Nodes Automatically in AWS OpsWorks for Chef Automate`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-unattend-assoc.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/create-backup.rst 2.31.35-1/awscli/examples/opsworkscm/create-backup.rst
--- 2.23.6-1/awscli/examples/opsworkscm/create-backup.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/create-backup.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,46 +0,0 @@
-**To create backups**
-
-The following ``create-backup`` command starts a manual backup of a Chef Automate server
-named ``automate-06`` in the ``us-east-1`` region. The command adds a descriptive message to
-the backup in the ``--description`` parameter. ::
-
-    aws opsworks-cm create-backup \
-        --server-name 'automate-06' \
-        --description "state of my infrastructure at launch"
-
-The output shows you information similar to the following about the new backup.
-
-Output::
-
-    {
-        "Backups": [ 
-            { 
-                "BackupArn": "string",
-                "BackupId": "automate-06-20160729133847520",
-                "BackupType": "MANUAL",
-                "CreatedAt": 2016-07-29T13:38:47.520Z,
-                "Description": "state of my infrastructure at launch",
-                "Engine": "Chef",
-                "EngineModel": "Single",
-                "EngineVersion": "12",
-                "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/automate-06-1010V4UU2WRM2",
-                "InstanceType": "m4.large",
-                "KeyPair": "",
-                "PreferredBackupWindow": "",
-                "PreferredMaintenanceWindow": "",
-                "S3LogUrl": "https://s3.amazonaws.com/<bucket-name>/automate-06-20160729133847520",
-                "SecurityGroupIds": [ "sg-1a24c270" ],
-                "ServerName": "automate-06",
-                "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role.1114810729735",
-                "Status": "OK",
-                "StatusDescription": "",
-                "SubnetIds": [ "subnet-49436a18" ],
-                "ToolsVersion": "string",
-                "UserArn": "arn:aws:iam::1019881987024:user/opsworks-user"
-            }
-        ],
-    }
-
-For more information, see `Back Up and Restore an AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Back Up and Restore an AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-backup-restore.html
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/create-server.rst 2.31.35-1/awscli/examples/opsworkscm/create-server.rst
--- 2.23.6-1/awscli/examples/opsworkscm/create-server.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/create-server.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,48 +0,0 @@
-**To create a server**
-
-The following ``create-server`` example creates a new Chef Automate server named ``automate-06`` in your default region. Note that defaults are used for most other settings, such as number of backups to retain, and maintenance and backup start times. Before you run a ``create-server`` command, complete prerequisites in `Getting Started with AWS OpsWorks for Chef Automate <https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted-opscm.html>`__ in the *AWS Opsworks for Chef Automate User Guide*. ::
-
-    aws opsworks-cm create-server \
-        --engine "Chef" \
-        --engine-model "Single" \
-        --engine-version "12" \
-        --server-name "automate-06" \
-        --instance-profile-arn "arn:aws:iam::1019881987024:instance-profile/aws-opsworks-cm-ec2-role" \
-        --instance-type "t2.medium" \
-        --key-pair "amazon-test" \
-        --service-role-arn "arn:aws:iam::044726508045:role/aws-opsworks-cm-service-role"
-
-The output shows you information similar to the following about the new server::
-
-    {
-        "Server": { 
-            "BackupRetentionCount": 10,
-            "CreatedAt": 2016-07-29T13:38:47.520Z,
-            "DisableAutomatedBackup": FALSE,
-            "Endpoint": "https://opsworks-cm.us-east-1.amazonaws.com",
-            "Engine": "Chef",
-            "EngineAttributes": [ 
-                { 
-                    "Name": "CHEF_DELIVERY_ADMIN_PASSWORD",
-                    "Value": "1Password1"
-                }
-            ],
-            "EngineModel": "Single",
-            "EngineVersion": "12",
-            "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/aws-opsworks-cm-ec2-role",
-            "InstanceType": "t2.medium",
-            "KeyPair": "amazon-test",
-            "MaintenanceStatus": "",
-            "PreferredBackupWindow": "Sun:02:00",
-            "PreferredMaintenanceWindow": "00:00",
-            "SecurityGroupIds": [ "sg-1a24c270" ],
-            "ServerArn": "arn:aws:iam::1019881987024:instance/automate-06-1010V4UU2WRM2",
-            "ServerName": "automate-06",
-            "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role",
-            "Status": "CREATING",
-            "StatusReason": "",
-            "SubnetIds": [ "subnet-49436a18" ]
-        }
-    }
-
-For more information, see `UpdateServer <https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_UpdateServer.html>`_ in the *AWS OpsWorks for Chef Automate API Reference*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/delete-backup.rst 2.31.35-1/awscli/examples/opsworkscm/delete-backup.rst
--- 2.23.6-1/awscli/examples/opsworkscm/delete-backup.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/delete-backup.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To delete backups**
-
-The following ``delete-backup`` command deletes a manual or automated backup of
-a Chef Automate server, identified by the backup ID. This command is useful when
-you are approaching the maximum number of backups that you can save, or you want
-to minimize your Amazon S3 storage costs.::
-
-  aws opsworks-cm delete-backup --backup-id "automate-06-2016-11-19T23:42:40.240Z"
-
-The output shows whether the backup deletion succeeded.
-
-**More Information**
-
-For more information, see `Back Up and Restore an AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Back Up and Restore an AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-backup-restore.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/delete-server.rst 2.31.35-1/awscli/examples/opsworkscm/delete-server.rst
--- 2.23.6-1/awscli/examples/opsworkscm/delete-server.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/delete-server.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To delete servers**
-
-The following ``delete-server`` command deletes a Chef Automate server, identified
-by the server's name. After the server is deleted, it is no longer returned by
-``DescribeServer`` requests.::
-
-  aws opsworks-cm delete-server --server-name "automate-06"
-
-The output shows whether the server deletion succeeded.
-
-**More Information**
-
-For more information, see `Delete an AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Delete an AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-delete-server.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/describe-account-attributes.rst 2.31.35-1/awscli/examples/opsworkscm/describe-account-attributes.rst
--- 2.23.6-1/awscli/examples/opsworkscm/describe-account-attributes.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/describe-account-attributes.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,26 +0,0 @@
-**To describe account attributes**
-
-The following ``describe-account-attributes`` command returns information about your
-account's usage of AWS OpsWorks for Chef Automate resources.::
-
-  aws opsworks-cm describe-account-attributes
-
-The output for each account attribute entry returned by the command resembles the following.
-*Output*::
-
-  {
-   "Attributes": [ 
-      { 
-         "Maximum": 5,
-         "Name": "ServerLimit",
-         "Used": 2
-      }
-   ]
-  }
-
-**More Information**
-
-For more information, see `DescribeAccountAttributes`_ in the *AWS OpsWorks for Chef Automate API Reference*.
-
-.. _`DescribeAccountAttributes`: http://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_DescribeAccountAttributes.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/describe-backups.rst 2.31.35-1/awscli/examples/opsworkscm/describe-backups.rst
--- 2.23.6-1/awscli/examples/opsworkscm/describe-backups.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/describe-backups.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,44 +0,0 @@
-**To describe backups**
-
-The following ``describe-backups`` command returns information about all backups
-associated with your account in your default region. ::
-
-    aws opsworks-cm describe-backups
-
-The output for each backup entry returned by the command resembles the following.
-
-Output::
-
-    {
-        "Backups": [ 
-            { 
-                "BackupArn": "string",
-                "BackupId": "automate-06-20160729133847520",
-                "BackupType": "MANUAL",
-                "CreatedAt": 2016-07-29T13:38:47.520Z,
-                "Description": "state of my infrastructure at launch",
-                "Engine": "Chef",
-                "EngineModel": "Single",
-                "EngineVersion": "12",
-                "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/automate-06-1010V4UU2WRM2",
-                "InstanceType": "m4.large",
-                "KeyPair": "",
-                "PreferredBackupWindow": "",
-                "PreferredMaintenanceWindow": "",
-                "S3LogUrl": "https://s3.amazonaws.com/<bucket-name>/automate-06-20160729133847520",
-                "SecurityGroupIds": [ "sg-1a24c270" ],
-                "ServerName": "automate-06",
-                "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role.1114810729735",
-                "Status": "Successful",
-                "StatusDescription": "",
-                "SubnetIds": [ "subnet-49436a18" ],
-                "ToolsVersion": "string",
-                "UserArn": "arn:aws:iam::1019881987024:user/opsworks-user"
-            }
-        ],
-    }
-
-For more information, see `Back Up and Restore an AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Back Up and Restore an AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-backup-restore.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/describe-events.rst 2.31.35-1/awscli/examples/opsworkscm/describe-events.rst
--- 2.23.6-1/awscli/examples/opsworkscm/describe-events.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/describe-events.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-**To describe events**
-
-The following ``describe-events`` example returns information about all events that are associated with the specified Chef Automate server. ::
-
-    aws opsworks-cm describe-events \
-        --server-name 'automate-06'
-
-The output for each event entry returned by the command resembles the following example::
-
-    {
-        "ServerEvents": [ 
-            { 
-                "CreatedAt": 2016-07-29T13:38:47.520Z,
-                "LogUrl": "https://s3.amazonaws.com/<bucket-name>/automate-06-20160729133847520",
-                "Message": "Updates successfully installed.",
-                "ServerName": "automate-06"
-            }
-        ]
-    }
-
-For more information, see `General Troubleshooting Tips <https://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-opscm.html#d0e4561>`_ in the *AWS OpsWorks User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/describe-node-association-status.rst 2.31.35-1/awscli/examples/opsworkscm/describe-node-association-status.rst
--- 2.23.6-1/awscli/examples/opsworkscm/describe-node-association-status.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/describe-node-association-status.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To describe node association status**
-
-The following ``describe-node-association-status`` command returns the status of a
-request to associate a node with a Chef Automate server named ``automate-06``.::
-
-  aws opsworks-cm describe-node-association-status --server-name "automate-06" --node-association-status-token "AflJKl+/GoKLZJBdDQEx0O65CDi57blQe9nKM8joSok0pQ9xr8DqApBN9/1O6sLdSvlfDEKkEx+eoCHvjoWHaOs="
-
-The output for each account attribute entry returned by the command resembles the following.
-*Output*::
-
-  {
-   "NodeAssociationStatus": "IN_PROGRESS"
-  }
-
-**More Information**
-
-For more information, see `DescribeNodeAssociationStatus`_ in the *AWS OpsWorks for Chef Automate API Reference*.
-
-.. _`DescribeNodeAssociationStatus`: http://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_DescribeNodeAssociationStatus.html
-
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/describe-servers.rst 2.31.35-1/awscli/examples/opsworkscm/describe-servers.rst
--- 2.23.6-1/awscli/examples/opsworkscm/describe-servers.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/describe-servers.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,48 +0,0 @@
-**To describe servers**
-
-The following ``describe-servers`` command returns information about all servers 
-that are associated with your account, and in your default region.::
-
-  aws opsworks-cm describe-servers
-
-The output for each server entry returned by the command resembles the following.
-*Output*::
-
-  {
-   "Servers": [ 
-      { 
-         "BackupRetentionCount": 8,
-         "CreatedAt": 2016-07-29T13:38:47.520Z,
-         "DisableAutomatedBackup": FALSE,
-         "Endpoint": "https://opsworks-cm.us-east-1.amazonaws.com",
-         "Engine": "Chef",
-         "EngineAttributes": [ 
-            { 
-               "Name": "CHEF_DELIVERY_ADMIN_PASSWORD",
-               "Value": "1Password1"
-            }
-         ],
-         "EngineModel": "Single",
-         "EngineVersion": "12",
-         "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/automate-06-1010V4UU2WRM2",
-         "InstanceType": "m4.large",
-         "KeyPair": "",
-         "MaintenanceStatus": "SUCCESS",
-         "PreferredBackupWindow": "03:00",
-         "PreferredMaintenanceWindow": "Mon:09:00",
-         "SecurityGroupIds": [ "sg-1a24c270" ],
-         "ServerArn": "arn:aws:iam::1019881987024:instance/automate-06-1010V4UU2WRM2",
-         "ServerName": "automate-06",
-         "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role.1114810729735",
-         "Status": "HEALTHY",
-         "StatusReason": "",
-         "SubnetIds": [ "subnet-49436a18" ]
-      }
-   ]
-  }
-
-**More Information**
-
-For more information, see `DescribeServers`_ in the *AWS OpsWorks for Chef Automate API Guide*.
-
-.. _`DescribeServers`: http://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_DescribeServers.html
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/disassociate-node.rst 2.31.35-1/awscli/examples/opsworkscm/disassociate-node.rst
--- 2.23.6-1/awscli/examples/opsworkscm/disassociate-node.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/disassociate-node.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-**To disassociate nodes**
-
-The following ``disassociate-node`` command disassociates a node named ``i-44de882p``, removing the node from
-management by a Chef Automate server named ``automate-06``. Valid node names are EC2 instance IDs.::
-
-  aws opsworks-cm disassociate-node --server-name "automate-06" --node-name "i-43de882p" --engine-attributes "Name=CHEF_ORGANIZATION,Value='MyOrganization' Name=CHEF_NODE_PUBLIC_KEY,Value='Public_key_contents'"
-
-The output returned by the command resembles the following.
-*Output*::
-
-  {
-   "NodeAssociationStatusToken": "AHUY8wFe4pdXtZC5DiJa5SOLp5o14DH//rHRqHDWXxwVoNBxcEy4V7R0NOFymh7E/1HumOBPsemPQFE6dcGaiFk"
-  }
-
-**More Information**
-
-For more information, see `Delete an AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Delete an AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-delete-server.html
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/restore-server.rst 2.31.35-1/awscli/examples/opsworkscm/restore-server.rst
--- 2.23.6-1/awscli/examples/opsworkscm/restore-server.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/restore-server.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To restore a server**
-
-The following ``restore-server`` command performs an in-place restoration of a 
-Chef Automate server named ``automate-06`` in your default region from a backup
-with an ID of ``automate-06-2016-11-22T16:13:27.998Z``. Restoring a server restores
-connections to the nodes that the Chef Automate server was managing at the time 
-that the specified backup was performed.
-
-  aws opsworks-cm restore-server --backup-id "automate-06-2016-11-22T16:13:27.998Z" --server-name "automate-06"
-
-The output is the command ID only.
-*Output*::
-
-  (None)
-
-**More Information**
-
-For more information, see `Restore a Failed AWS OpsWorks for Chef Automate Server`_ in the *AWS OpsWorks User Guide*.
-
-.. _`Restore a Failed AWS OpsWorks for Chef Automate Server`: http://docs.aws.amazon.com/opsworks/latest/userguide/opscm-chef-restore.html
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/start-maintenance.rst 2.31.35-1/awscli/examples/opsworkscm/start-maintenance.rst
--- 2.23.6-1/awscli/examples/opsworkscm/start-maintenance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/start-maintenance.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-**To start maintenance**
-
-The following ``start-maintenance`` example manually starts maintenance on the specified Chef Automate or Puppet Enterprise server in your default region. This command is useful if an earlier, automated maintenance attempt failed, and the underlying cause of maintenance failure has been resolved. ::
-
-    aws opsworks-cm start-maintenance \
-        --server-name 'automate-06'
-
-Output::
-
-    {
-        "Server": {
-            "AssociatePublicIpAddress": true,
-            "BackupRetentionCount": 10,
-            "ServerName": "automate-06",
-            "CreatedAt": 1569229584.842,
-            "CloudFormationStackArn": "arn:aws:cloudformation:us-west-2:123456789012:stack/aws-opsworks-cm-instance-automate-06-1606611794746/EXAMPLE0-31de-11eb-bdb0-0a5b0a1353b8",
-            "DisableAutomatedBackup": false,
-            "Endpoint": "automate-06-EXAMPLEvr8gjfk5f.us-west-2.opsworks-cm.io",
-            "Engine": "ChefAutomate",
-            "EngineModel": "Single",
-            "EngineAttributes": [],
-            "EngineVersion": "2020-07",
-            "InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/aws-opsworks-cm-ec2-role",
-            "InstanceType": "m5.large",
-            "PreferredMaintenanceWindow": "Sun:01:00",
-            "PreferredBackupWindow": "Sun:15:00",
-            "SecurityGroupIds": [
-                "sg-EXAMPLE"
-            ],
-            "ServiceRoleArn": "arn:aws:iam::123456789012:role/service-role/aws-opsworks-cm-service-role",
-            "Status": "UNDER_MAINTENANCE",
-            "SubnetIds": [
-                "subnet-EXAMPLE"
-            ],
-            "ServerArn": "arn:aws:opsworks-cm:us-west-2:123456789012:server/automate-06/0148382d-66b0-4196-8274-d1a2b6dff8d1"
-        }
-    }
-
-For more information, see `System Maintenance (Puppet Enterprise servers) <https://docs.aws.amazon.com/opsworks/latest/userguide/opspup-maintenance.html>`_ or `System Maintenance (Chef Automate servers) <https://docs.aws.amazon.com/opsworks/latest/userguide/opscm-maintenance.html>`_ in the *AWS OpsWorks User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/update-server-engine-attributes.rst 2.31.35-1/awscli/examples/opsworkscm/update-server-engine-attributes.rst
--- 2.23.6-1/awscli/examples/opsworkscm/update-server-engine-attributes.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/update-server-engine-attributes.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-**To update server engine attributes**
-
-The following ``update-server-engine-attributes`` command updates the value of the ``CHEF_PIVOTAL_KEY`` engine attribute for a Chef Automate server named ``automate-06``. It is currently not possible to change the value of other engine attributes. ::
-
-    aws opsworks-cm update-server-engine-attributes \
-        --attribute-name CHEF_PIVOTAL_KEY \
-        --attribute-value "new key value" \
-        --server-name "automate-06"
-
-The output shows you information similar to the following about the updated server. ::
-
-    {
-        "Server": { 
-            "BackupRetentionCount": 2,
-            "CreatedAt": 2016-07-29T13:38:47.520Z,
-            "DisableAutomatedBackup": FALSE,
-            "Endpoint": "https://opsworks-cm.us-east-1.amazonaws.com",
-            "Engine": "Chef",
-            "EngineAttributes": [ 
-                { 
-                    "Name": "CHEF_PIVOTAL_KEY",
-                    "Value": "new key value"
-                }
-            ],
-            "EngineModel": "Single",
-            "EngineVersion": "12",
-            "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/automate-06-1010V4UU2WRM2",
-            "InstanceType": "m4.large",
-            "KeyPair": "",
-            "MaintenanceStatus": "SUCCESS",
-            "PreferredBackupWindow": "Mon:09:15",
-            "PreferredMaintenanceWindow": "03:00",
-            "SecurityGroupIds": [ "sg-1a24c270" ],
-            "ServerArn": "arn:aws:iam::1019881987024:instance/automate-06-1010V4UU2WRM2",
-            "ServerName": "automate-06",
-            "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role.1114810729735",
-            "Status": "HEALTHY",
-            "StatusReason": "",
-            "SubnetIds": [ "subnet-49436a18" ]
-        }
-    }
-
-For more information, see `UpdateServerEngineAttributes <https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_UpdateServerEngineAttributes.html>`_ in the *AWS OpsWorks for Chef Automate API Reference*.
diff -pruN 2.23.6-1/awscli/examples/opsworkscm/update-server.rst 2.31.35-1/awscli/examples/opsworkscm/update-server.rst
--- 2.23.6-1/awscli/examples/opsworkscm/update-server.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/opsworkscm/update-server.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,42 +0,0 @@
-**To update a server**
-
-The following ``update-server`` command updates the maintenance start time of the specified Chef Automate server in your default region. The ``--preferred-maintenance-window`` parameter is added to change the start day and time of server maintenance to Mondays at 9:15 a.m. UTC.::
-
-    aws opsworks-cm update-server \
-        --server-name "automate-06" \
-        --preferred-maintenance-window "Mon:09:15"
-
-The output shows you information similar to the following about the updated server. ::
-
-    {
-        "Server": { 
-            "BackupRetentionCount": 8,
-            "CreatedAt": 2016-07-29T13:38:47.520Z,
-            "DisableAutomatedBackup": TRUE,
-            "Endpoint": "https://opsworks-cm.us-east-1.amazonaws.com",
-            "Engine": "Chef",
-            "EngineAttributes": [ 
-                { 
-                    "Name": "CHEF_DELIVERY_ADMIN_PASSWORD",
-                    "Value": "1Password1"
-                }
-            ],
-            "EngineModel": "Single",
-            "EngineVersion": "12",
-            "InstanceProfileArn": "arn:aws:iam::1019881987024:instance-profile/automate-06-1010V4UU2WRM2",
-            "InstanceType": "m4.large",
-            "KeyPair": "",
-            "MaintenanceStatus": "OK",
-            "PreferredBackupWindow": "Mon:09:15",
-            "PreferredMaintenanceWindow": "03:00",
-            "SecurityGroupIds": [ "sg-1a24c270" ],
-            "ServerArn": "arn:aws:iam::1019881987024:instance/automate-06-1010V4UU2WRM2",
-            "ServerName": "automate-06",
-            "ServiceRoleArn": "arn:aws:iam::1019881987024:role/aws-opsworks-cm-service-role.1114810729735",
-            "Status": "HEALTHY",
-            "StatusReason": "",
-            "SubnetIds": [ "subnet-49436a18" ]
-        }
-    }
-
-For more information, see `UpdateServer <https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_UpdateServer.html>`_ in the *AWS OpsWorks for Chef Automate API Reference*.
diff -pruN 2.23.6-1/awscli/examples/pi/create-performance-analysis-report.rst 2.31.35-1/awscli/examples/pi/create-performance-analysis-report.rst
--- 2.23.6-1/awscli/examples/pi/create-performance-analysis-report.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/create-performance-analysis-report.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To create a performance analysis report**
+
+The following ``create-performance-analysis-report`` example creates a performance analysis report with the start time ``1682969503`` and end time ``1682979503`` for the database ``db-abcdefg123456789``. ::
+
+    aws pi create-performance-analysis-report \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --start-time 1682969503 \
+        --end-time 1682979503
+
+Output::
+
+    {
+        "AnalysisReportId": "report-0234d3ed98e28fb17"
+    }
+
+For more information about creating performance analysis reports, see `Creating a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.CreatingPerfAnlysisReport.html>`__ in the *Amazon RDS User Guide* and `Creating a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.CreatingPerfAnlysisReport.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/delete-performance-analysis-report.rst 2.31.35-1/awscli/examples/pi/delete-performance-analysis-report.rst
--- 2.23.6-1/awscli/examples/pi/delete-performance-analysis-report.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/delete-performance-analysis-report.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+**To delete a performance analysis report**
+
+The following ``delete-performance-analysis-report`` example deletes the performance analysis report with the report ID ``report-0d99cc91c4422ee61``. ::
+
+    aws pi delete-performance-analysis-report \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --analysis-report-id report-0d99cc91c4422ee61
+
+This command produces no output.
+
+For more information about deleting performance analysis reports, see `Deleting a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.DeletePerfAnalysisReport.html>`__ in the *Amazon RDS User Guide* and `Deleting a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.DeletePerfAnalysisReport.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/describe-dimension-keys.rst 2.31.35-1/awscli/examples/pi/describe-dimension-keys.rst
--- 2.23.6-1/awscli/examples/pi/describe-dimension-keys.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/describe-dimension-keys.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To describe dimension keys**
+**Example 1: To describe dimension keys**
 
 This example requests the names of all wait events. The data is summarized by event name, and the aggregate values of those events over the specified time period.
 
@@ -54,3 +54,35 @@ Output::
           }
       ]
   }
+
+**Example 2: To find the SQL ID for statements contributing the most to DB load**
+
+The following ``describe-dimension-keys`` requests the SQL statement and SQL ID for the 10 statements that contributed the most to DB load. ::
+
+    aws pi describe-dimension-keys \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --start-time 2023-05-01T00:00:00Z \
+        --end-time 2023-05-01T01:00:00Z \
+        --metric db.load.avg \
+        --group-by '{"Group": "db.sql", "Dimensions": ["db.sql.id", "db.sql.statement"],"Limit": 10}'
+
+Output::
+
+    {
+        "AlignedEndTime": 1.5270804E9,
+        "AlignedStartTime": 1.5270264E9,
+        "Identifier": "db-abcdefg123456789",
+        "MetricList": [
+            {
+                "Keys": [
+                    {
+                        "Dimensions": {"db.sql.id": "AKIAIOSFODNN7EXAMPLE", "db.sql.statement": "SELECT * FROM customers WHERE customer_id = 123"},
+                        "Total": 25.5,"Partitions": [12.3, 13.2]
+                    }
+                ]
+            }
+        ]
+    }
+
+For more information about dimensions in Performance Insights, see `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon RDS User Guide* and `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/get-dimension-key-details.rst 2.31.35-1/awscli/examples/pi/get-dimension-key-details.rst
--- 2.23.6-1/awscli/examples/pi/get-dimension-key-details.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/get-dimension-key-details.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+**To get details for a specified dimension group for a DB instance**
+
+The following ``get-dimension-key-details`` example retrieves the full text of a SQL statement for DB instance ``db-10BCD2EFGHIJ3KL4M5NO6PQRS5``. The ``--group`` is ``db.sql``, and the ``--group-identifier`` is ``db.sql.id``. In this example, ``example-sql-id`` represents a SQL ID retrieved by using the ``get-resource-metrics`` or ``describe-dimension-keys`` operations. In this example, the dimensions details are available. Thus, Performance Insights retrieves the full text of the SQL statement, without truncating it. ::
+
+    aws pi get-dimension-key-details \
+        --service-type RDS \
+        --identifier db-10BCD2EFGHIJ3KL4M5NO6PQRS5 \
+        --group db.sql \
+        --group-identifier example-sql-id \
+        --requested-dimensions statement
+
+Output::
+
+    {
+        "Dimensions":[
+            {
+                "Value": "SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id",
+                "Dimension": "db.sql.statement",
+                "Status": "AVAILABLE"
+            },
+        ...
+        ]
+    }
+
+For more information about dimensions in Performance Insights, see `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon RDS User Guide* and `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/get-performance-analysis-report.rst 2.31.35-1/awscli/examples/pi/get-performance-analysis-report.rst
--- 2.23.6-1/awscli/examples/pi/get-performance-analysis-report.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/get-performance-analysis-report.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To get a performance analysis report**
+
+The following ``get-performance-analysis-report`` example gets the performance analysis report for the database ``db-abcdefg123456789`` with the report ID ``report-0d99cc91c4422ee61``. The response provides the report status, ID, time details, and insights. ::
+
+    aws pi get-performance-analysis-report \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --analysis-report-id report-0d99cc91c4422ee61
+
+Output::
+
+    {
+        "AnalysisReport": {
+            "Status": "Succeeded",
+            "ServiceType": "RDS",
+            "Identifier": "db-abcdefg123456789",
+            "StartTime": 1680583486.584,
+            "AnalysisReportId": "report-0d99cc91c4422ee61",
+            "EndTime": 1680587086.584,
+            "CreateTime": 1680587087.139,
+            "Insights": [
+                ... (Condensed for space)
+           ]
+        }
+    }
+
+For more information about performance analysis reports, see `Analyzing database performance for a period of time <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.AnalyzePerformanceTimePeriod.html>`__ in the *Amazon RDS User Guide* and `Analyzing database performance for a period of time <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.AnalyzePerformanceTimePeriod.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/get-resource-metadata.rst 2.31.35-1/awscli/examples/pi/get-resource-metadata.rst
--- 2.23.6-1/awscli/examples/pi/get-resource-metadata.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/get-resource-metadata.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,20 @@
+**To get resource metadata for a database**
+
+The following ``get-resource-metadata`` example gets the resource metadata for the database ``db-abcdefg123456789``. The response shows that SQL digest statistics are enabled. ::
+
+    aws pi get-resource-metadata \
+        --service-type RDS \
+        --identifier db-abcdefg123456789
+
+Output::
+
+    {    
+        "Identifier": "db-abcdefg123456789",
+        "Features":{
+            "SQL_DIGEST_STATISTICS":{
+                "Status": "ENABLED"
+            }
+        }
+    }
+
+For more information about SQL statistics for Performance Insights, see `SQL statistics for Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/sql-statistics.html>`__ in the *Amazon RDS User Guide* and `SQL statistics for Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/sql-statistics.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/list-available-resource-dimensions.rst 2.31.35-1/awscli/examples/pi/list-available-resource-dimensions.rst
--- 2.23.6-1/awscli/examples/pi/list-available-resource-dimensions.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/list-available-resource-dimensions.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,48 @@
+**To list the dimensions that can be queried for a metric type on a DB instance**
+
+The following ``list-available-resource-dimensions`` example lists the ``db.load`` metrics you can query for the database ``db-abcdefg123456789``. ::
+
+    aws pi list-available-resource-dimensions \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --metrics db.load
+
+Output::
+
+    {
+        "MetricDimensions": [
+            {
+                "Metric": "db.load",
+                "Groups": [
+                    {
+                        "Group": "db.user",
+                        "Dimensions": [
+                            {
+                                "Identifier": "db.user.id"
+                            },
+                            {
+                                "Identifier": "db.user.name"
+                            }
+                        ]
+                    },
+                    {
+                        "Group": "db.sql_tokenized",
+                        "Dimensions": [
+                            {
+                                "Identifier": "db.sql_tokenized.id"
+                            },
+                            {
+                                "Identifier": "db.sql_tokenized.db_id"
+                            },
+                            {
+                                "Identifier": "db.sql_tokenized.statement"
+                            }
+                        ]
+                    },
+                    ...
+                ]
+            }
+        ]
+    }
+
+For more information about dimensions in Performance Insights, see `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon RDS User Guide* and `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/list-available-resource-metrics.rst 2.31.35-1/awscli/examples/pi/list-available-resource-metrics.rst
--- 2.23.6-1/awscli/examples/pi/list-available-resource-metrics.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/list-available-resource-metrics.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To list the metrics that can be queried for a metric type on a DB instance**
+
+The following ``list-available-resource-metrics`` example lists the ``db.load`` metrics you can query for the database ``db-abcdefg123456789``. ::
+
+    aws pi list-available-resource-metrics \
+        --service-type RDS \
+        --identifier db-abcdefg123456789 \
+        --metric-types "os" "db"
+
+Output::
+
+    {
+        "Metrics": [
+            {
+                "Description": "The number of virtual CPUs for the DB instance",
+                "Metric": "os.general.numVCPUs",
+                "Unit": "vCPUs"
+            },
+            ......,
+            {
+                "Description": "Time spent reading data file blocks by backends in this instance",
+                "Metric": "db.IO.read_latency",
+                "Unit": "Milliseconds per block"
+            },
+            ......
+        ]
+    }
+
+For more information about metrics in Performance Insights, see `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon RDS User Guide* and `Database load <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.Overview.ActiveSessions.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/list-performance-analysis-reports.rst 2.31.35-1/awscli/examples/pi/list-performance-analysis-reports.rst
--- 2.23.6-1/awscli/examples/pi/list-performance-analysis-reports.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/list-performance-analysis-reports.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,44 @@
+**To list performance analysis reports for a database**
+
+The following ``list-performance-analysis-reports`` example lists performance analysis reports for the database ``db-abcdefg123456789``. The response lists all the reports with the report ID, status, and time period details. ::
+
+    aws pi list-performance-analysis-reports \
+        --service-type RDS \
+        --identifier db-abcdefg123456789
+
+Output::
+
+    {
+        "AnalysisReports": [
+            {
+                "Status": "Succeeded",
+                "EndTime": 1680587086.584,
+                "CreateTime": 1680587087.139,
+                "StartTime": 1680583486.584,
+                "AnalysisReportId": "report-0d99cc91c4422ee61"
+            },
+            {
+                "Status": "Succeeded",
+                "EndTime": 1681491137.914,
+                "CreateTime": 1681491145.973,
+                "StartTime": 1681487537.914,
+                "AnalysisReportId": "report-002633115cc002233"
+            },
+            {
+                "Status": "Succeeded",
+                "EndTime": 1681493499.849,
+                "CreateTime": 1681493507.762,
+                "StartTime": 1681489899.849,
+                "AnalysisReportId": "report-043b1e006b47246f9"
+            },
+            {
+                "Status": "InProgress",
+                "EndTime": 1682979503.0,
+                "CreateTime": 1682979618.994,
+                "StartTime": 1682969503.0,
+                "AnalysisReportId": "report-01ad15f9b88bcbd56"
+            }
+        ]
+    }
+
+For more information about performance analysis reports, see `Analyzing database performance for a period of time <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.AnalyzePerformanceTimePeriod.html>`__ in the *Amazon RDS User Guide* and `Analyzing database performance for a period of time <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.AnalyzePerformanceTimePeriod.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/list-tags-for-resource.rst 2.31.35-1/awscli/examples/pi/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/pi/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/list-tags-for-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,20 @@
+**To list tags for a performance analysis report**
+
+The following ``list-tags-for-resource`` example lists tags for a performance analysis report with the report ID ``report-0d99cc91c4422ee61``. ::
+
+    aws pi list-tags-for-resource \
+        --service-type RDS \
+        --resource-arn arn:aws:pi:us-west-2:123456789012:perf-reports/RDS/db-abcdefg123456789/report-0d99cc91c4422ee61
+
+Output::
+
+    {
+        "Tags": [
+            {
+                "Value": "test-tag",
+                "Key": "name"
+            }
+        ]
+    }
+
+For more information about tagging performance analysis reports, see `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon RDS User Guide* and `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/tag-resource.rst 2.31.35-1/awscli/examples/pi/tag-resource.rst
--- 2.23.6-1/awscli/examples/pi/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/tag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+**To add a tag to a performance analysis report**
+
+The following ``tag-resource`` example adds the tag key ``name`` with the tag value ``test-tag`` to a performance analysis report with the report ID ``report-0d99cc91c4422ee61``. ::
+
+    aws pi tag-resource \
+        --service-type RDS \
+        --resource-arn arn:aws:pi:us-west-2:123456789012:perf-reports/RDS/db-abcdefg123456789/report-0d99cc91c4422ee61 \
+        --tags Key=name,Value=test-tag
+
+This command produces no output.
+
+For more information about tagging performance analysis reports, see `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon RDS User Guide* and `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/pi/untag-resource.rst 2.31.35-1/awscli/examples/pi/untag-resource.rst
--- 2.23.6-1/awscli/examples/pi/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/pi/untag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+**To delete a tag for a performance analysis report**
+
+The following ``untag-resource`` example deletes the tag ``name`` for a performance analysis report with the report ID ``report-0d99cc91c4422ee61``. ::
+
+    aws pi untag-resource \
+        --service-type RDS \
+        --resource-arn arn:aws:pi:us-west-2:123456789012:perf-reports/RDS/db-abcdefg123456789/report-0d99cc91c4422ee61 \
+        --tag-keys name
+
+This command produces no output.
+
+For more information about tagging performance analysis reports, see `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon RDS User Guide* and `Adding tags to a performance analysis report in Performance Insights <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.UsingDashboard.ManagePerfAnalysisReportTags.html>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/qldb/cancel-journal-kinesis-stream.rst 2.31.35-1/awscli/examples/qldb/cancel-journal-kinesis-stream.rst
--- 2.23.6-1/awscli/examples/qldb/cancel-journal-kinesis-stream.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/cancel-journal-kinesis-stream.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-**To cancel a journal stream**
-
-The following ``cancel-journal-kinesis-stream`` example cancels the specified journal stream from a ledger. ::
-
-    aws qldb cancel-journal-kinesis-stream \
-        --ledger-name myExampleLedger \
-        --stream-id 7ISCkqwe4y25YyHLzYUFAf
-
-Output::
-
-    {
-        "StreamId": "7ISCkqwe4y25YyHLzYUFAf"
-    }
-
-For more information, see `Streaming journal data from Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/streams.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/create-ledger.rst 2.31.35-1/awscli/examples/qldb/create-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/create-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/create-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-**Example 1: To create a ledger with default properties**
-
-The following ``create-ledger`` example creates a ledger with the name ``myExampleLedger`` and the permissions mode ``STANDARD``. The optional parameters for deletion protection and AWS KMS key are not specified, so they default to ``true`` and an AWS owned KMS key respectively. ::
-
-    aws qldb create-ledger \
-        --name myExampleLedger \
-        --permissions-mode STANDARD
-
-Output::
-
-    {
-        "State": "CREATING",
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "DeletionProtection": true,
-        "CreationDateTime": 1568839243.951,
-        "Name": "myExampleLedger",
-        "PermissionsMode": "STANDARD"
-    }
-
-**Example 2: To create a ledger with deletion protection disabled, a customer managed KMS key, and specified tags**
-
-The following ``create-ledger`` example creates a ledger with the name ``myExampleLedger2`` and the permissions mode ``STANDARD``. The deletion protection feature is disabled, the specified customer managed KMS key is used for encryption at rest, and the specified tags are attached to the resource. ::
-
-    aws qldb create-ledger \
-        --name myExampleLedger2 \
-        --permissions-mode STANDARD \
-        --no-deletion-protection \
-        --kms-key arn:aws:kms:us-west-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
-        --tags IsTest=true,Domain=Test
-
-Output::
-
-    {
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger2",
-        "DeletionProtection": false,
-        "CreationDateTime": 1568839543.557,
-        "State": "CREATING",
-        "Name": "myExampleLedger2",
-        "PermissionsMode": "STANDARD",
-        "KmsKeyArn": "arn:aws:kms:us-west-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
-    }
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/qldb/delete-ledger.rst 2.31.35-1/awscli/examples/qldb/delete-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/delete-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/delete-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-**To delete a ledger**
-
-The following ``delete-ledger`` example deletes the specified ledger. ::
-
-    aws qldb delete-ledger \
-        --name myExampleLedger
-
-This command produces no output.
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/describe-journal-kinesis-stream.rst 2.31.35-1/awscli/examples/qldb/describe-journal-kinesis-stream.rst
--- 2.23.6-1/awscli/examples/qldb/describe-journal-kinesis-stream.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/describe-journal-kinesis-stream.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-**To describe a journal stream**
-
-The following ``describe-journal-kinesis-stream`` example displays the details for the specified journal stream from a ledger. ::
-
-    aws qldb describe-journal-kinesis-stream \
-        --ledger-name myExampleLedger \
-        --stream-id 7ISCkqwe4y25YyHLzYUFAf
-
-Output::
-
-    {
-        "Stream": {
-            "LedgerName": "myExampleLedger",
-            "CreationTime": 1591221984.677,
-            "InclusiveStartTime": 1590710400.0,
-            "ExclusiveEndTime": 1590796799.0,
-            "RoleArn": "arn:aws:iam::123456789012:role/my-kinesis-stream-role",
-            "StreamId": "7ISCkqwe4y25YyHLzYUFAf",
-            "Arn": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/7ISCkqwe4y25YyHLzYUFAf",
-            "Status": "ACTIVE",
-            "KinesisConfiguration": {
-                "StreamArn": "arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb",
-                "AggregationEnabled": true
-            },
-            "StreamName": "myExampleLedger-stream"
-        }
-    }
-
-For more information, see `Streaming journal data from Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/streams.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/describe-journal-s3-export.rst 2.31.35-1/awscli/examples/qldb/describe-journal-s3-export.rst
--- 2.23.6-1/awscli/examples/qldb/describe-journal-s3-export.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/describe-journal-s3-export.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-**To describe a journal export job**
-
-The following ``describe-journal-s3-export`` example displays the details for the specified export job from a ledger. ::
-
-    aws qldb describe-journal-s3-export \
-        --name myExampleLedger \
-        --export-id ADR2ONPKN5LINYGb4dp7yZ
-
-Output::
-
-    {
-        "ExportDescription": {
-            "S3ExportConfiguration": {
-                "Bucket": "amzn-s3-demo-bucket",
-                "Prefix": "ledgerexport1/",
-                "EncryptionConfiguration": {
-                    "ObjectEncryptionType": "SSE_S3"
-                }
-            },
-            "RoleArn": "arn:aws:iam::123456789012:role/my-s3-export-role",
-            "Status": "COMPLETED",
-            "ExportCreationTime": 1568847801.418,
-            "InclusiveStartTime": 1568764800.0,
-            "ExclusiveEndTime": 1568847599.0,
-            "LedgerName": "myExampleLedger",
-            "ExportId": "ADR2ONPKN5LINYGb4dp7yZ"
-        }
-    }
-
-For more information, see `Exporting Your Journal in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/describe-ledger.rst 2.31.35-1/awscli/examples/qldb/describe-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/describe-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/describe-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-**To describe a ledger**
-
-The following ``describe-ledger`` example displays the details for the specified ledger. ::
-
-    aws qldb describe-ledger \
-        --name myExampleLedger
-
-Output::
-
-    {
-        "CreationDateTime": 1568839243.951,
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "State": "ACTIVE",
-        "Name": "myExampleLedger",
-        "DeletionProtection": true,
-        "PermissionsMode": "STANDARD",
-        "EncryptionDescription": { 
-            "KmsKeyArn": "arn:aws:kms:us-west-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
-            "EncryptionStatus": "ENABLED"
-        }
-    }
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/qldb/export-journal-to-s3.rst 2.31.35-1/awscli/examples/qldb/export-journal-to-s3.rst
--- 2.23.6-1/awscli/examples/qldb/export-journal-to-s3.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/export-journal-to-s3.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-**To export journal blocks to S3**
-
-The following ``export-journal-to-s3`` example creates an export job for journal blocks within a specified date and time range from a ledger with the name ``myExampleLedger``. The export job writes the blocks into a specified Amazon S3 bucket. ::
-
-    aws qldb export-journal-to-s3 \
-        --name myExampleLedger \
-        --inclusive-start-time 2019-09-18T00:00:00Z \
-        --exclusive-end-time 2019-09-18T22:59:59Z \
-        --role-arn arn:aws:iam::123456789012:role/my-s3-export-role \
-        --s3-export-configuration file://my-s3-export-config.json
-
-Contents of ``my-s3-export-config.json``::
-
-    {
-        "Bucket": "amzn-s3-demo-bucket",
-        "Prefix": "ledgerexport1/",
-        "EncryptionConfiguration": {
-            "ObjectEncryptionType": "SSE_S3"
-        }
-    }
-
-Output::
-
-    {
-        "ExportId": "ADR2ONPKN5LINYGb4dp7yZ"
-    }
-
-For more information, see `Exporting Your Journal in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/get-block.rst 2.31.35-1/awscli/examples/qldb/get-block.rst
--- 2.23.6-1/awscli/examples/qldb/get-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/get-block.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,55 +0,0 @@
-**Example 1: To get a journal block and proof for verification using input files**
-
-The following ``get-block`` example requests a block data object and a proof from the specified ledger. The request is for a specified digest tip address and block address. ::
-
-    aws qldb get-block \
-        --name vehicle-registration \
-        --block-address file://myblockaddress.json \
-        --digest-tip-address file://mydigesttipaddress.json
-
-Contents of ``myblockaddress.json``::
-
-   {
-       "IonText": "{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100}"
-   }
-
-Contents of ``mydigesttipaddress.json``::
-
-    {
-        "IonText": "{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:123}"
-    }
-
-Output::
-
-    {
-        "Block": {
-            "IonText": "{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},transactionId:\"FnQeJBAicTX0Ah32ZnVtSX\",blockTimestamp:2019-09-16T19:37:05.360Z,blockHash:{{NoChM92yKRuJAb/jeLd1VnYn4DHiWIf071ACfic9uHc=}},entriesHash:{{l05LOsiKV14SDbuaYnH7uwXzUvqzIwUiRLXGbTyj/nY=}},previousBlockHash:{{7kewBXhpdbClcZKxhVmpoMHpUGOJtWQD0iY2LPfZkYA=}},entriesHashList:[{{eRSwnmAM7WWANWDd5iGOyK+T4tDXyzUq6HZ/0fgLHos=}},{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},{{y5cCBr7pOAIUfsVQ1j0TqtE97b4b4oo1R0vnYyE5wWM=}},{{TvTXygML1bMe6NvEZtGkX+KR+W/EJl4qD1mmV77KZQg=}}],transactionInfo:{statements:[{statement:\"FROM VehicleRegistration AS r \\nWHERE r.VIN = '1N4AL11D75C109151'\\nINSERT INTO r.Owners.SecondaryOwners\\n    VALUE { 'PersonId' : 'CMVdR77XP8zAglmmFDGTvt' }\",startTime:2019-09-16T19:37:05.302Z,statementDigest:{{jcgPX2vsOJ0waum4qmDYtn1pCAT9xKNIzA+2k4R+mxA=}}}],documents:{JUJgkIcNbhS2goq8RqLuZ4:{tableName:\"VehicleRegistration\",tableId:\"BFJKdXgzt9oF4wjMbuxy4G\",statements:[0]}}},revisions:[{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},hash:{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},data:{VIN:\"1N4AL11D75C109151\",LicensePlateNumber:\"LEWISR261LL\",State:\"WA\",PendingPenaltyTicketAmount:90.25,ValidFromDate:2017-08-21,ValidToDate:2020-05-11,Owners:{PrimaryOwner:{PersonId:\"BFJKdXhnLRT27sXBnojNGW\"},SecondaryOwners:[{PersonId:\"CMVdR77XP8zAglmmFDGTvt\"}]},City:\"Everett\"},metadata:{id:\"JUJgkIcNbhS2goq8RqLuZ4\",version:3,txTime:2019-09-16T19:37:05.344Z,txId:\"FnQeJBAicTX0Ah32ZnVtSX\"}}]}"
-        },
-        "Proof": {
-            "IonText": "[{{l3+EXs69K1+rehlqyWLkt+oHDlw4Zi9pCLW/t/mgTPM=}},{{48CXG3ehPqsxCYd34EEa8Fso0ORpWWAO8010RJKf3Do=}},{{9UnwnKSQT0i3ge1JMVa+tMIqCEDaOPTkWxmyHSn8UPQ=}},{{3nW6Vryghk+7pd6wFCtLufgPM6qXHyTNeCb1sCwcDaI=}},{{Irb5fNhBrNEQ1VPhzlnGT/ZQPadSmgfdtMYcwkNOxoI=}},{{+3CWpYG/ytf/vq9GidpzSx6JJiLXt1hMQWNnqOy3jfY=}},{{NPx6cRhwsiy5m9UEWS5JTJrZoUdO2jBOAAOmyZAT+qE=}}]"
-        }
-    }
-
-For more information, see `Data Verification in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/verification.html>`__ in the *Amazon QLDB Developer Guide*.
-
-**Example 2: To get a journal block and proof for verification using shorthand syntax**
-
-The following ``get-block`` example requests a block data object and a proof from the specified ledger using shorthand syntax. The request is for a specified digest tip address and block address. ::
-
-    aws qldb get-block \
-        --name vehicle-registration \
-        --block-address 'IonText="{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100}"' \
-        --digest-tip-address 'IonText="{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:123}"'
-
-Output::
-
-    {
-        "Block": {
-            "IonText": "{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},transactionId:\"FnQeJBAicTX0Ah32ZnVtSX\",blockTimestamp:2019-09-16T19:37:05.360Z,blockHash:{{NoChM92yKRuJAb/jeLd1VnYn4DHiWIf071ACfic9uHc=}},entriesHash:{{l05LOsiKV14SDbuaYnH7uwXzUvqzIwUiRLXGbTyj/nY=}},previousBlockHash:{{7kewBXhpdbClcZKxhVmpoMHpUGOJtWQD0iY2LPfZkYA=}},entriesHashList:[{{eRSwnmAM7WWANWDd5iGOyK+T4tDXyzUq6HZ/0fgLHos=}},{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},{{y5cCBr7pOAIUfsVQ1j0TqtE97b4b4oo1R0vnYyE5wWM=}},{{TvTXygML1bMe6NvEZtGkX+KR+W/EJl4qD1mmV77KZQg=}}],transactionInfo:{statements:[{statement:\"FROM VehicleRegistration AS r \\nWHERE r.VIN = '1N4AL11D75C109151'\\nINSERT INTO r.Owners.SecondaryOwners\\n    VALUE { 'PersonId' : 'CMVdR77XP8zAglmmFDGTvt' }\",startTime:2019-09-16T19:37:05.302Z,statementDigest:{{jcgPX2vsOJ0waum4qmDYtn1pCAT9xKNIzA+2k4R+mxA=}}}],documents:{JUJgkIcNbhS2goq8RqLuZ4:{tableName:\"VehicleRegistration\",tableId:\"BFJKdXgzt9oF4wjMbuxy4G\",statements:[0]}}},revisions:[{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},hash:{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},data:{VIN:\"1N4AL11D75C109151\",LicensePlateNumber:\"LEWISR261LL\",State:\"WA\",PendingPenaltyTicketAmount:90.25,ValidFromDate:2017-08-21,ValidToDate:2020-05-11,Owners:{PrimaryOwner:{PersonId:\"BFJKdXhnLRT27sXBnojNGW\"},SecondaryOwners:[{PersonId:\"CMVdR77XP8zAglmmFDGTvt\"}]},City:\"Everett\"},metadata:{id:\"JUJgkIcNbhS2goq8RqLuZ4\",version:3,txTime:2019-09-16T19:37:05.344Z,txId:\"FnQeJBAicTX0Ah32ZnVtSX\"}}]}"
-        },
-        "Proof": {
-            "IonText": "[{{l3+EXs69K1+rehlqyWLkt+oHDlw4Zi9pCLW/t/mgTPM=}},{{48CXG3ehPqsxCYd34EEa8Fso0ORpWWAO8010RJKf3Do=}},{{9UnwnKSQT0i3ge1JMVa+tMIqCEDaOPTkWxmyHSn8UPQ=}},{{3nW6Vryghk+7pd6wFCtLufgPM6qXHyTNeCb1sCwcDaI=}},{{Irb5fNhBrNEQ1VPhzlnGT/ZQPadSmgfdtMYcwkNOxoI=}},{{+3CWpYG/ytf/vq9GidpzSx6JJiLXt1hMQWNnqOy3jfY=}},{{NPx6cRhwsiy5m9UEWS5JTJrZoUdO2jBOAAOmyZAT+qE=}}]"
-        }
-    }
-
-For more information, see `Data Verification in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/verification.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/get-digest.rst 2.31.35-1/awscli/examples/qldb/get-digest.rst
--- 2.23.6-1/awscli/examples/qldb/get-digest.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/get-digest.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To get a digest for a ledger**
-
-The following ``get-digest`` example requests a digest from the specified ledger at the latest committed block in the journal. ::
-
-    aws qldb get-digest \
-        --name vehicle-registration
-
-Output::
-
-    {
-        "Digest": "6m6BMXobbJKpMhahwVthAEsN6awgnHK62Qq5McGP1Gk=",
-        "DigestTipAddress": {
-            "IonText": "{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:123}"
-        }
-    }
-
-For more information, see `Data Verification in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/verification.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/get-revision.rst 2.31.35-1/awscli/examples/qldb/get-revision.rst
--- 2.23.6-1/awscli/examples/qldb/get-revision.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/get-revision.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,57 +0,0 @@
-**Example 1: To get a document revision and proof for verification using input files**
-
-The following ``get-revision`` example requests a revision data object and a proof from the specified ledger. The request is for a specified digest tip address, document ID, and block address of the revision. ::
-
-    aws qldb get-revision \
-        --name vehicle-registration \
-        --block-address file://myblockaddress.json \
-        --document-id JUJgkIcNbhS2goq8RqLuZ4 \
-        --digest-tip-address file://mydigesttipaddress.json
-
-Contents of ``myblockaddress.json``::
-
-    {
-        "IonText": "{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100}"
-    }
-
-Contents of ``mydigesttipaddress.json``::
-
-    {
-        "IonText": "{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:123}"
-    }
-
-Output::
-
-    {
-        "Revision": {
-            "IonText": "{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},hash:{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},data:{VIN:\"1N4AL11D75C109151\",LicensePlateNumber:\"LEWISR261LL\",State:\"WA\",PendingPenaltyTicketAmount:90.25,ValidFromDate:2017-08-21,ValidToDate:2020-05-11,Owners:{PrimaryOwner:{PersonId:\"BFJKdXhnLRT27sXBnojNGW\"},SecondaryOwners:[{PersonId:\"CMVdR77XP8zAglmmFDGTvt\"}]},City:\"Everett\"},metadata:{id:\"JUJgkIcNbhS2goq8RqLuZ4\",version:3,txTime:2019-09-16T19:37:05.344Z,txId:\"FnQeJBAicTX0Ah32ZnVtSX\"}}"
-        },
-        "Proof": {
-            "IonText": "[{{eRSwnmAM7WWANWDd5iGOyK+T4tDXyzUq6HZ/0fgLHos=}},{{VV1rdaNuf+yJZVGlmsM6gr2T52QvBO8Lg+KgpjcnWAU=}},{{7kewBXhpdbClcZKxhVmpoMHpUGOJtWQD0iY2LPfZkYA=}},{{l3+EXs69K1+rehlqyWLkt+oHDlw4Zi9pCLW/t/mgTPM=}},{{48CXG3ehPqsxCYd34EEa8Fso0ORpWWAO8010RJKf3Do=}},{{9UnwnKSQT0i3ge1JMVa+tMIqCEDaOPTkWxmyHSn8UPQ=}},{{3nW6Vryghk+7pd6wFCtLufgPM6qXHyTNeCb1sCwcDaI=}},{{Irb5fNhBrNEQ1VPhzlnGT/ZQPadSmgfdtMYcwkNOxoI=}},{{+3CWpYG/ytf/vq9GidpzSx6JJiLXt1hMQWNnqOy3jfY=}},{{NPx6cRhwsiy5m9UEWS5JTJrZoUdO2jBOAAOmyZAT+qE=}}]"
-        }
-    }
-
-For more information, see `Data Verification in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/verification.html>`__ in the *Amazon QLDB Developer Guide*.
-
-**Example 2: To get a document revision and proof for verification using shorthand syntax**
-
-The following ``get-revision`` example requests a revision data object and a proof from the specified ledger using shorthand syntax. The request is for a specified digest tip address, document ID, and block address of the revision. ::
-
-    aws qldb get-revision \
-        --name vehicle-registration \
-        --block-address 'IonText="{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100}"' \
-        --document-id JUJgkIcNbhS2goq8RqLuZ4 \
-        --digest-tip-address 'IonText="{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:123}"'
-
-Output::
-
-    {
-        "Revision": {
-            "IonText": "{blockAddress:{strandId:\"KmA3ZZca7vAIiJAK9S5Iwl\",sequenceNo:100},hash:{{mHVex/yjHAWjFPpwhBuH2GKXmKJjK2FBa9faqoUVNtg=}},data:{VIN:\"1N4AL11D75C109151\",LicensePlateNumber:\"LEWISR261LL\",State:\"WA\",PendingPenaltyTicketAmount:90.25,ValidFromDate:2017-08-21,ValidToDate:2020-05-11,Owners:{PrimaryOwner:{PersonId:\"BFJKdXhnLRT27sXBnojNGW\"},SecondaryOwners:[{PersonId:\"CMVdR77XP8zAglmmFDGTvt\"}]},City:\"Everett\"},metadata:{id:\"JUJgkIcNbhS2goq8RqLuZ4\",version:3,txTime:2019-09-16T19:37:05.344Z,txId:\"FnQeJBAicTX0Ah32ZnVtSX\"}}"
-        },
-        "Proof": {
-            "IonText": "[{{eRSwnmAM7WWANWDd5iGOyK+T4tDXyzUq6HZ/0fgLHos=}},{{VV1rdaNuf+yJZVGlmsM6gr2T52QvBO8Lg+KgpjcnWAU=}},{{7kewBXhpdbClcZKxhVmpoMHpUGOJtWQD0iY2LPfZkYA=}},{{l3+EXs69K1+rehlqyWLkt+oHDlw4Zi9pCLW/t/mgTPM=}},{{48CXG3ehPqsxCYd34EEa8Fso0ORpWWAO8010RJKf3Do=}},{{9UnwnKSQT0i3ge1JMVa+tMIqCEDaOPTkWxmyHSn8UPQ=}},{{3nW6Vryghk+7pd6wFCtLufgPM6qXHyTNeCb1sCwcDaI=}},{{Irb5fNhBrNEQ1VPhzlnGT/ZQPadSmgfdtMYcwkNOxoI=}},{{+3CWpYG/ytf/vq9GidpzSx6JJiLXt1hMQWNnqOy3jfY=}},{{NPx6cRhwsiy5m9UEWS5JTJrZoUdO2jBOAAOmyZAT+qE=}}]"
-        }
-    }
-
-For more information, see `Data Verification in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/verification.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst 2.31.35-1/awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-**To list journal streams for a ledger**
-
-The following ``list-journal-kinesis-streams-for-ledger`` example lists journal streams for the specified ledger. ::
-
-    aws qldb list-journal-kinesis-streams-for-ledger \
-        --ledger-name myExampleLedger
-
-Output::
-
-    {
-        "Streams": [
-            {
-                "LedgerName": "myExampleLedger",
-                "CreationTime": 1591221984.677,
-                "InclusiveStartTime": 1590710400.0,
-                "ExclusiveEndTime": 1590796799.0,
-                "RoleArn": "arn:aws:iam::123456789012:role/my-kinesis-stream-role",
-                "StreamId": "7ISCkqwe4y25YyHLzYUFAf",
-                "Arn": "arn:aws:qldb:us-east-1:123456789012:stream/myExampleLedger/7ISCkqwe4y25YyHLzYUFAf",
-                "Status": "ACTIVE",
-                "KinesisConfiguration": {
-                    "StreamArn": "arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb",
-                    "AggregationEnabled": true
-                },
-                "StreamName": "myExampleLedger-stream"
-            }
-        ]
-    }
-
-For more information, see `Streaming journal data from Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/streams.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst 2.31.35-1/awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-**To list journal export jobs for a ledger**
-
-The following ``list-journal-s3-exports-for-ledger`` example lists journal export jobs for the specified ledger. ::
-
-    aws qldb list-journal-s3-exports-for-ledger \
-        --name myExampleLedger
-
-Output::
-
-    {
-        "JournalS3Exports": [
-            {
-                "LedgerName": "myExampleLedger",
-                "ExclusiveEndTime": 1568847599.0,
-                "ExportCreationTime": 1568847801.418,
-                "S3ExportConfiguration": {
-                    "Bucket": "amzn-s3-demo-bucket",
-                    "Prefix": "ledgerexport1/",
-                    "EncryptionConfiguration": {
-                        "ObjectEncryptionType": "SSE_S3"
-                    }
-                },
-                "ExportId": "ADR2ONPKN5LINYGb4dp7yZ",
-                "RoleArn": "arn:aws:iam::123456789012:role/qldb-s3-export",
-                "InclusiveStartTime": 1568764800.0,
-                "Status": "IN_PROGRESS"
-            }
-        ]
-    }
-
-For more information, see `Exporting Your Journal in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.html>`__ in the *Amazon QLDB Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/qldb/list-journal-s3-exports.rst 2.31.35-1/awscli/examples/qldb/list-journal-s3-exports.rst
--- 2.23.6-1/awscli/examples/qldb/list-journal-s3-exports.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/list-journal-s3-exports.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,46 +0,0 @@
-**To list journal export jobs**
-
-The following ``list-journal-s3-exports`` example lists journal export jobs for all ledgers that are associated with the current AWS account and Region. ::
-
-    aws qldb list-journal-s3-exports
-
-Output::
-
-    {
-        "JournalS3Exports": [
-            {
-                "Status": "IN_PROGRESS",
-                "LedgerName": "myExampleLedger",
-                "S3ExportConfiguration": {
-                    "EncryptionConfiguration": {
-                        "ObjectEncryptionType": "SSE_S3"
-                    },
-                    "Bucket": "amzn-s3-demo-bucket",
-                    "Prefix": "ledgerexport1/"
-                },
-                "RoleArn": "arn:aws:iam::123456789012:role/my-s3-export-role",
-                "ExportCreationTime": 1568847801.418,
-                "ExportId": "ADR2ONPKN5LINYGb4dp7yZ",
-                "InclusiveStartTime": 1568764800.0,
-                "ExclusiveEndTime": 1568847599.0
-            },
-            {
-                "Status": "COMPLETED",
-                "LedgerName": "myExampleLedger2",
-                "S3ExportConfiguration": {
-                    "EncryptionConfiguration": {
-                        "ObjectEncryptionType": "SSE_S3"
-                    },
-                    "Bucket": "amzn-s3-demo-bucket",
-                    "Prefix": "ledgerexport1/"
-                },
-                "RoleArn": "arn:aws:iam::123456789012:role/my-s3-export-role",
-                "ExportCreationTime": 1568846847.638,
-                "ExportId": "2pdvW8UQrjBAiYTMehEJDI",
-                "InclusiveStartTime": 1568592000.0,
-                "ExclusiveEndTime": 1568764800.0
-            }
-        ]
-    }
-
-For more information, see `Exporting Your Journal in Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/export-journal.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/list-ledgers.rst 2.31.35-1/awscli/examples/qldb/list-ledgers.rst
--- 2.23.6-1/awscli/examples/qldb/list-ledgers.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/list-ledgers.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,24 +0,0 @@
-**To list your available ledgers**
-
-The following ``list-ledgers`` example lists all ledgers that are associated with the current AWS account and Region. ::
-
-    aws qldb list-ledgers
-
-Output::
-
-    {
-        "Ledgers": [
-            {
-                "State": "ACTIVE",
-                "CreationDateTime": 1568839243.951,
-                "Name": "myExampleLedger"
-            },
-            {
-                "State": "ACTIVE",
-                "CreationDateTime": 1568839543.557,
-                "Name": "myExampleLedger2"
-            }
-        ]
-    }
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/list-tags-for-resource.rst 2.31.35-1/awscli/examples/qldb/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/qldb/list-tags-for-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,17 +0,0 @@
-**To list the tags attached to a ledger**
-
-The following ``list-tags-for-resource`` example  lists all tags attached to the specified ledger. ::
-
-    aws qldb list-tags-for-resource \
-        --resource-arn arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger
-
-Output::
-
-    {
-        "Tags": {
-            "IsTest": "true",
-            "Domain": "Test"
-        }
-    }
-
-For more information, see `Tagging Amazon QLDB Resources <https://docs.aws.amazon.com/qldb/latest/developerguide/tagging.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/stream-journal-to-kinesis.rst 2.31.35-1/awscli/examples/qldb/stream-journal-to-kinesis.rst
--- 2.23.6-1/awscli/examples/qldb/stream-journal-to-kinesis.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/stream-journal-to-kinesis.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,46 +0,0 @@
-**Example 1: To stream journal data to Kinesis Data Streams using input files**
-
-The following ``stream-journal-to-kinesis`` example creates a stream of journal data within a specified date and time range from a ledger with the name ``myExampleLedger``. The stream sends the data to a specified Amazon Kinesis data stream. ::
-
-    aws qldb stream-journal-to-kinesis \
-        --ledger-name myExampleLedger \
-        --inclusive-start-time 2020-05-29T00:00:00Z \
-        --exclusive-end-time 2020-05-29T23:59:59Z \
-        --role-arn arn:aws:iam::123456789012:role/my-kinesis-stream-role \
-        --kinesis-configuration file://my-kinesis-config.json \
-        --stream-name myExampleLedger-stream
-
-Contents of ``my-kinesis-config.json``::
-
-    {
-        "StreamArn": "arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb",
-        "AggregationEnabled": true
-    }
-
-Output::
-
-    {
-        "StreamId": "7ISCkqwe4y25YyHLzYUFAf"
-    }
-
-For more information, see `Streaming journal data from Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/streams.html>`__ in the *Amazon QLDB Developer Guide*.
-
-**Example 2: To stream journal data to Kinesis Data Streams using shorthand syntax**
-
-The following ``stream-journal-to-kinesis`` example creates a stream of journal data within a specified date and time range from a ledger with the name ``myExampleLedger``. The stream sends the data to a specified Amazon Kinesis data stream. ::
-
-    aws qldb stream-journal-to-kinesis \
-        --ledger-name myExampleLedger \
-        --inclusive-start-time 2020-05-29T00:00:00Z \
-        --exclusive-end-time 2020-05-29T23:59:59Z \
-        --role-arn arn:aws:iam::123456789012:role/my-kinesis-stream-role \
-        --stream-name myExampleLedger-stream \
-        --kinesis-configuration StreamArn=arn:aws:kinesis:us-east-1:123456789012:stream/stream-for-qldb,AggregationEnabled=true
-
-Output::
-
-    {
-        "StreamId": "7ISCkqwe4y25YyHLzYUFAf"
-    }
-
-For more information, see `Streaming journal data from Amazon QLDB <https://docs.aws.amazon.com/qldb/latest/developerguide/streams.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/tag-resource.rst 2.31.35-1/awscli/examples/qldb/tag-resource.rst
--- 2.23.6-1/awscli/examples/qldb/tag-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-**To tag a ledger**
-
-The following ``tag-resource`` example adds a set of tags to a specified ledger. ::
-
-    aws qldb tag-resource \
-        --resource-arn arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger \
-        --tags IsTest=true,Domain=Test
-
-This command produces no output.
-
-For more information, see `Tagging Amazon QLDB Resources <https://docs.aws.amazon.com/qldb/latest/developerguide/tagging.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/untag-resource.rst 2.31.35-1/awscli/examples/qldb/untag-resource.rst
--- 2.23.6-1/awscli/examples/qldb/untag-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-**To remove tags from a resource**
-
-The following ``untag-resource`` example removes tags with the specified tag keys from a specified ledger. ::
-
-    aws qldb untag-resource \
-        --resource-arn arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger \
-        --tag-keys IsTest Domain
-
-This command produces no output.
-
-For more information, see `Tagging Amazon QLDB Resources <https://docs.aws.amazon.com/qldb/latest/developerguide/tagging.html>`__ in the *Amazon QLDB Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/qldb/update-ledger-permissions-mode.rst 2.31.35-1/awscli/examples/qldb/update-ledger-permissions-mode.rst
--- 2.23.6-1/awscli/examples/qldb/update-ledger-permissions-mode.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/update-ledger-permissions-mode.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,34 +0,0 @@
-**Example 1: To update the permissions mode of a ledger to STANDARD**
-
-The following ``update-ledger-permissions-mode`` example assigns the ``STANDARD`` permissions mode to the specified ledger. ::
-
-    aws qldb update-ledger-permissions-mode \
-        --name myExampleLedger \
-        --permissions-mode STANDARD
-
-Output::
-
-    {
-        "Name": "myExampleLedger",
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "PermissionsMode": "STANDARD"
-    }
-
-**Example 2: To update the permissions mode of a ledger to ALLOW_ALL**
-
-The following ``update-ledger-permissions-mode`` example assigns the ``ALLOW_ALL`` permissions mode to the specified ledger. ::
-
-    aws qldb update-ledger-permissions-mode \
-        --name myExampleLedger \
-        --permissions-mode ALLOW_ALL
-
-Output::
-
-    {
-        "Name": "myExampleLedger",
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "PermissionsMode": "ALLOW_ALL"
-    }
-
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/qldb/update-ledger.rst 2.31.35-1/awscli/examples/qldb/update-ledger.rst
--- 2.23.6-1/awscli/examples/qldb/update-ledger.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/qldb/update-ledger.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,63 +0,0 @@
-**Example 1: To update the deletion protection property of a ledger**
-
-The following ``update-ledger`` example updates the specified ledger to disable the deletion protection feature. ::
-
-    aws qldb update-ledger \
-        --name myExampleLedger \
-        --no-deletion-protection
-
-Output::
-
-    {
-        "CreationDateTime": 1568839243.951,
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "DeletionProtection": false,
-        "Name": "myExampleLedger",
-        "State": "ACTIVE"
-    }
-
-**Example 2: To update the AWS KMS key of a ledger to a customer managed key**
-
-The following ``update-ledger`` example updates the specified ledger to use a customer managed KMS key for encryption at rest. ::
-
-    aws qldb update-ledger \
-        --name myExampleLedger \
-        --kms-key arn:aws:kms:us-west-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111
-
-Output::
-
-    {
-        "CreationDateTime": 1568839243.951,
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "DeletionProtection": false,
-        "Name": "myExampleLedger",
-        "State": "ACTIVE",
-        "EncryptionDescription": { 
-            "KmsKeyArn": "arn:aws:kms:us-west-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
-            "EncryptionStatus": "UPDATING"
-        }
-    }
-
-**Example 3: To update the AWS KMS key of a ledger to an AWS owned key**
-
-The following ``update-ledger`` example updates the specified ledger to use an AWS owned KMS key for encryption at rest. ::
-
-    aws qldb update-ledger \
-        --name myExampleLedger \
-        --kms-key AWS_OWNED_KMS_KEY
-
-Output::
-
-    {
-        "CreationDateTime": 1568839243.951,
-        "Arn": "arn:aws:qldb:us-west-2:123456789012:ledger/myExampleLedger",
-        "DeletionProtection": false,
-        "Name": "myExampleLedger",
-        "State": "ACTIVE",
-        "EncryptionDescription": {
-            "KmsKeyArn": "AWS_OWNED_KMS_KEY",
-            "EncryptionStatus": "UPDATING"
-        }
-    }
-
-For more information, see `Basic Operations for Amazon QLDB Ledgers <https://docs.aws.amazon.com/qldb/latest/developerguide/ledger-management.basics.html>`__ in the *Amazon QLDB Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/rds/cancel-export-task.rst 2.31.35-1/awscli/examples/rds/cancel-export-task.rst
--- 2.23.6-1/awscli/examples/rds/cancel-export-task.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/rds/cancel-export-task.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,23 +1,23 @@
-**To cancel a snapshot export to Amazon S3**
-
-The following ``cancel-export-task`` example cancels an export task in progress that is exporting a snapshot to Amazon S3. ::
-
-    aws rds cancel-export-task \
-        --export-task-identifier my-s3-export-1
-
-Output::
-
-    {
-        "ExportTaskIdentifier": "my-s3-export-1",
-        "SourceArn": "arn:aws:rds:us-east-1:123456789012:snapshot:publisher-final-snapshot",
-        "SnapshotTime": "2019-03-24T20:01:09.815Z",
-        "S3Bucket": "mybucket",
-        "S3Prefix": "",
-        "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/export-snap-S3-role",
-        "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcd0000-7bfd-4594-af38-aabbccddeeff",
-        "Status": "CANCELING",
-        "PercentProgress": 0,
-        "TotalExtractedDataInGB": 0
-    }
-
+**To cancel a snapshot export to Amazon S3**
+
+The following ``cancel-export-task`` example cancels an export task in progress that is exporting a snapshot to Amazon S3. ::
+
+    aws rds cancel-export-task \
+        --export-task-identifier my-s3-export-1
+
+Output::
+
+    {
+        "ExportTaskIdentifier": "my-s3-export-1",
+        "SourceArn": "arn:aws:rds:us-east-1:123456789012:snapshot:publisher-final-snapshot",
+        "SnapshotTime": "2019-03-24T20:01:09.815Z",
+        "S3Bucket": "amzn-s3-demo-bucket",
+        "S3Prefix": "",
+        "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/export-snap-S3-role",
+        "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcd0000-7bfd-4594-af38-aabbccddeeff",
+        "Status": "CANCELING",
+        "PercentProgress": 0,
+        "TotalExtractedDataInGB": 0
+    }
+
 For more information, see `Canceling a snapshot export task <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Canceling>`__ in the *Amazon RDS User Guide* or `Canceling a snapshot export task <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Canceling>`__ in the *Amazon Aurora User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/rds/describe-export-tasks.rst 2.31.35-1/awscli/examples/rds/describe-export-tasks.rst
--- 2.23.6-1/awscli/examples/rds/describe-export-tasks.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/rds/describe-export-tasks.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,40 +1,40 @@
-**To describe snapshot export tasks**
-
-The following ``describe-export-tasks`` example returns information about snapshot exports to Amazon S3. ::
-
-    aws rds describe-export-tasks
-
-Output::
-
-    {
-        "ExportTasks": [
-            {
-                "ExportTaskIdentifier": "test-snapshot-export",
-                "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:test-snapshot",
-                "SnapshotTime": "2020-03-02T18:26:28.163Z",
-                "TaskStartTime": "2020-03-02T18:57:56.896Z",
-                "TaskEndTime": "2020-03-02T19:10:31.985Z",
-                "S3Bucket": "mybucket",
-                "S3Prefix": "",
-                "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
-                "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
-                "Status": "COMPLETE",
-                "PercentProgress": 100,
-                "TotalExtractedDataInGB": 0
-            },
-            {
-                "ExportTaskIdentifier": "my-s3-export",
-                "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
-                "SnapshotTime": "2020-03-27T20:48:42.023Z",
-                "S3Bucket": "mybucket",
-                "S3Prefix": "",
-                "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
-                "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
-                "Status": "STARTING",
-                "PercentProgress": 0,
-                "TotalExtractedDataInGB": 0
-            }
-        ]
-    }
-
-For more information, see `Monitoring Snapshot Exports <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Monitoring>`__ in the *Amazon RDS User Guide*.
+**To describe snapshot export tasks**
+
+The following ``describe-export-tasks`` example returns information about snapshot exports to Amazon S3. ::
+
+    aws rds describe-export-tasks
+
+Output::
+
+    {
+        "ExportTasks": [
+            {
+                "ExportTaskIdentifier": "test-snapshot-export",
+                "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:test-snapshot",
+                "SnapshotTime": "2020-03-02T18:26:28.163Z",
+                "TaskStartTime": "2020-03-02T18:57:56.896Z",
+                "TaskEndTime": "2020-03-02T19:10:31.985Z",
+                "S3Bucket": "amzn-s3-demo-bucket",
+                "S3Prefix": "",
+                "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
+                "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
+                "Status": "COMPLETE",
+                "PercentProgress": 100,
+                "TotalExtractedDataInGB": 0
+            },
+            {
+                "ExportTaskIdentifier": "my-s3-export",
+                "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
+                "SnapshotTime": "2020-03-27T20:48:42.023Z",
+                "S3Bucket": "amzn-s3-demo-bucket",
+                "S3Prefix": "",
+                "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
+                "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
+                "Status": "STARTING",
+                "PercentProgress": 0,
+                "TotalExtractedDataInGB": 0
+            }
+        ]
+    }
+
+For more information, see `Monitoring Snapshot Exports <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Monitoring>`__ in the *Amazon RDS User Guide*.
diff -pruN 2.23.6-1/awscli/examples/rds/restore-db-cluster-from-s3.rst 2.31.35-1/awscli/examples/rds/restore-db-cluster-from-s3.rst
--- 2.23.6-1/awscli/examples/rds/restore-db-cluster-from-s3.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/rds/restore-db-cluster-from-s3.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,64 +1,64 @@
-**To restore an Amazon Aurora DB cluster from Amazon S3**
-
-The following ``restore-db-cluster-from-s3`` example restores an Amazon Aurora MySQL version 5.7-compatible DB cluster from a MySQL 5.7 DB backup file in Amazon S3. ::
-
-    aws rds restore-db-cluster-from-s3 \
-        --db-cluster-identifier cluster-s3-restore \
-        --engine aurora-mysql \
-        --master-username admin \
-        --master-user-password mypassword \
-        --s3-bucket-name mybucket \
-        --s3-prefix test-backup \
-        --s3-ingestion-role-arn arn:aws:iam::123456789012:role/service-role/TestBackup \
-        --source-engine mysql \
-        --source-engine-version 5.7.28
-
-Output::
-
-    {
-        "DBCluster": {
-            "AllocatedStorage": 1,
-            "AvailabilityZones": [
-                "us-west-2c",
-                "us-west-2a",
-                "us-west-2b"
-            ],
-            "BackupRetentionPeriod": 1,
-            "DBClusterIdentifier": "cluster-s3-restore",
-            "DBClusterParameterGroup": "default.aurora-mysql5.7",
-            "DBSubnetGroup": "default",
-            "Status": "creating",
-            "Endpoint": "cluster-s3-restore.cluster-co3xyzabc123.us-west-2.rds.amazonaws.com",
-            "ReaderEndpoint": "cluster-s3-restore.cluster-ro-co3xyzabc123.us-west-2.rds.amazonaws.com",
-            "MultiAZ": false,
-            "Engine": "aurora-mysql",
-            "EngineVersion": "5.7.12",
-            "Port": 3306,
-            "MasterUsername": "admin",
-            "PreferredBackupWindow": "11:15-11:45",
-            "PreferredMaintenanceWindow": "thu:12:19-thu:12:49",
-            "ReadReplicaIdentifiers": [],
-            "DBClusterMembers": [],
-            "VpcSecurityGroups": [
-                {
-                    "VpcSecurityGroupId": "sg-########",
-                    "Status": "active"
-                }
-            ],
-            "HostedZoneId": "Z1PVIF0EXAMPLE",
-            "StorageEncrypted": false,
-            "DbClusterResourceId": "cluster-SU5THYQQHOWCXZZDGXREXAMPLE",
-            "DBClusterArn": "arn:aws:rds:us-west-2:123456789012:cluster:cluster-s3-restore",
-            "AssociatedRoles": [],
-            "IAMDatabaseAuthenticationEnabled": false,
-            "ClusterCreateTime": "2020-07-27T14:22:08.095Z",
-            "EngineMode": "provisioned",
-            "DeletionProtection": false,
-            "HttpEndpointEnabled": false,
-            "CopyTagsToSnapshot": false,
-            "CrossAccountClone": false,
-            "DomainMemberships": []
-        }
-    }
-
-For more information, see `Migrating Data from MySQL by Using an Amazon S3 Bucket <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3>`__ in the *Amazon Aurora User Guide*.
+**To restore an Amazon Aurora DB cluster from Amazon S3**
+
+The following ``restore-db-cluster-from-s3`` example restores an Amazon Aurora MySQL version 5.7-compatible DB cluster from a MySQL 5.7 DB backup file in Amazon S3. ::
+
+    aws rds restore-db-cluster-from-s3 \
+        --db-cluster-identifier cluster-s3-restore \
+        --engine aurora-mysql \
+        --master-username admin \
+        --master-user-password mypassword \
+        --s3-bucket-name amzn-s3-demo-bucket \
+        --s3-prefix test-backup \
+        --s3-ingestion-role-arn arn:aws:iam::123456789012:role/service-role/TestBackup \
+        --source-engine mysql \
+        --source-engine-version 5.7.28
+
+Output::
+
+    {
+        "DBCluster": {
+            "AllocatedStorage": 1,
+            "AvailabilityZones": [
+                "us-west-2c",
+                "us-west-2a",
+                "us-west-2b"
+            ],
+            "BackupRetentionPeriod": 1,
+            "DBClusterIdentifier": "cluster-s3-restore",
+            "DBClusterParameterGroup": "default.aurora-mysql5.7",
+            "DBSubnetGroup": "default",
+            "Status": "creating",
+            "Endpoint": "cluster-s3-restore.cluster-co3xyzabc123.us-west-2.rds.amazonaws.com",
+            "ReaderEndpoint": "cluster-s3-restore.cluster-ro-co3xyzabc123.us-west-2.rds.amazonaws.com",
+            "MultiAZ": false,
+            "Engine": "aurora-mysql",
+            "EngineVersion": "5.7.12",
+            "Port": 3306,
+            "MasterUsername": "admin",
+            "PreferredBackupWindow": "11:15-11:45",
+            "PreferredMaintenanceWindow": "thu:12:19-thu:12:49",
+            "ReadReplicaIdentifiers": [],
+            "DBClusterMembers": [],
+            "VpcSecurityGroups": [
+                {
+                    "VpcSecurityGroupId": "sg-########",
+                    "Status": "active"
+                }
+            ],
+            "HostedZoneId": "Z1PVIF0EXAMPLE",
+            "StorageEncrypted": false,
+            "DbClusterResourceId": "cluster-SU5THYQQHOWCXZZDGXREXAMPLE",
+            "DBClusterArn": "arn:aws:rds:us-west-2:123456789012:cluster:cluster-s3-restore",
+            "AssociatedRoles": [],
+            "IAMDatabaseAuthenticationEnabled": false,
+            "ClusterCreateTime": "2020-07-27T14:22:08.095Z",
+            "EngineMode": "provisioned",
+            "DeletionProtection": false,
+            "HttpEndpointEnabled": false,
+            "CopyTagsToSnapshot": false,
+            "CrossAccountClone": false,
+            "DomainMemberships": []
+        }
+    }
+
+For more information, see `Migrating Data from MySQL by Using an Amazon S3 Bucket <https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3>`__ in the *Amazon Aurora User Guide*.
diff -pruN 2.23.6-1/awscli/examples/rds/start-export-task.rst 2.31.35-1/awscli/examples/rds/start-export-task.rst
--- 2.23.6-1/awscli/examples/rds/start-export-task.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/rds/start-export-task.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,26 +1,26 @@
-**To export a snapshot to Amazon S3**
-
-The following ``start-export-task`` example exports a DB snapshot named ``db5-snapshot-test`` to the Amazon S3 bucket named ``mybucket``. ::
-
-    aws rds start-export-task \
-        --export-task-identifier my-s3-export \
-        --source-arn arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test \
-        --s3-bucket-name mybucket \
-        --iam-role-arn arn:aws:iam::123456789012:role/service-role/ExportRole \
-        --kms-key-id arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff
-
-Output::
-
-    {
-        "ExportTaskIdentifier": "my-s3-export",
-        "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
-        "SnapshotTime": "2020-03-27T20:48:42.023Z",
-        "S3Bucket": "mybucket",
-        "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
-        "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
-        "Status": "STARTING",
-        "PercentProgress": 0,
-        "TotalExtractedDataInGB": 0
-    }
-
-For more information, see `Exporting a Snapshot to an Amazon S3 Bucket <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Exporting>`__ in the *Amazon RDS User Guide*.
+**To export a snapshot to Amazon S3**
+
+The following ``start-export-task`` example exports a DB snapshot named ``db5-snapshot-test`` to the Amazon S3 bucket named ``amzn-s3-demo-bucket``. ::
+
+    aws rds start-export-task \
+        --export-task-identifier my-s3-export \
+        --source-arn arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test \
+        --s3-bucket-name amzn-s3-demo-bucket \
+        --iam-role-arn arn:aws:iam::123456789012:role/service-role/ExportRole \
+        --kms-key-id arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff
+
+Output::
+
+    {
+        "ExportTaskIdentifier": "my-s3-export",
+        "SourceArn": "arn:aws:rds:us-west-2:123456789012:snapshot:db5-snapshot-test",
+        "SnapshotTime": "2020-03-27T20:48:42.023Z",
+        "S3Bucket": "amzn-s3-demo-bucket",
+        "IamRoleArn": "arn:aws:iam::123456789012:role/service-role/ExportRole",
+        "KmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/abcd0000-7fca-4128-82f2-aabbccddeeff",
+        "Status": "STARTING",
+        "PercentProgress": 0,
+        "TotalExtractedDataInGB": 0
+    }
+
+For more information, see `Exporting a Snapshot to an Amazon S3 Bucket <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.Exporting>`__ in the *Amazon RDS User Guide*.
diff -pruN 2.23.6-1/awscli/examples/robomaker/batch-describe-simulation-job.rst 2.31.35-1/awscli/examples/robomaker/batch-describe-simulation-job.rst
--- 2.23.6-1/awscli/examples/robomaker/batch-describe-simulation-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/batch-describe-simulation-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,150 +0,0 @@
-**To batch describe simulation jobs**
-
-The following ``batch-describe-simulation-job`` example retrieves details for the three specified simulation jobs. 
-
-Command::
-
-    aws robomaker batch-describe-simulation-job \
-    --job arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-66bbb3gpxm8x arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-p0cpdrrwng2n arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-g8h6tglmblgw
-
-Output::
-
-    {
-        "jobs": [
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-66bbb3gpxm8x",
-                "status": "Completed",
-                "lastUpdatedAt": 1548959178.0,
-                "failureBehavior": "Continue",
-                "clientRequestToken": "6020408e-b05c-4310-9f13-4ed71c5221ed",
-                "outputLocation": {
-                    "s3Bucket": "awsrobomakerobjecttracker-111111111-bundlesbucket-2lk584kiq1oa",
-                    "s3Prefix": "output"
-                },
-                "maxJobDurationInSeconds": 3600,
-                "simulationTimeMillis": 0,
-                "iamRole": "arn:aws:iam::111111111111:role/AWSRoboMakerObjectTracker-154895-SimulationJobRole-14D5ASA7PQE3A",
-                "simulationApplications": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/AWSRoboMakerObjectTracker-1548959046124_NPvyfcatq/1548959170096",
-                        "applicationVersion": "$LATEST",
-                        "launchConfig": {
-                            "packageName": "object_tracker_simulation",
-                            "launchFile": "local_training.launch",
-                            "environmentVariables": {
-                                "MARKOV_PRESET_FILE": "object_tracker.py",
-                                "MODEL_S3_BUCKET": "awsrobomakerobjecttracker-111111111-bundlesbucket-2lk584kiq1oa",
-                                "MODEL_S3_PREFIX": "model-store",
-                                "ROS_AWS_REGION": "us-west-2"
-                            }
-                        }
-                    }
-                ],
-                "tags": {},
-                "vpcConfig": {
-                    "subnets": [
-                        "subnet-716dd52a",
-                        "subnet-43c22325",
-                        "subnet-3f526976"
-                    ],
-                    "securityGroups": [
-                        "sg-3fb40545"
-                    ],
-                    "vpcId": "vpc-99895eff",
-                    "assignPublicIp": true
-                }
-            },
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-p0cpdrrwng2n",
-                "status": "Completed",
-                "lastUpdatedAt": 1548168817.0,
-                "failureBehavior": "Continue",
-                "clientRequestToken": "e4a23e75-f9a7-411d-835f-21881c82c58b",
-                "outputLocation": {
-                    "s3Bucket": "awsrobomakercloudwatch-111111111111-bundlesbucket-14e5s9jvwtmv7",
-                    "s3Prefix": "output"
-                },
-                "maxJobDurationInSeconds": 3600,
-                "simulationTimeMillis": 0,
-                "iamRole": "arn:aws:iam::111111111111:role/AWSRoboMakerCloudWatch-154766341-SimulationJobRole-G0OBWTQ8YBG6",
-                "robotApplications": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/AWSRoboMakerCloudWatch-1547663411642_NZbpqEJ3T/1547663517377",
-                        "applicationVersion": "$LATEST",
-                        "launchConfig": {
-                            "packageName": "cloudwatch_robot",
-                            "launchFile": "await_commands.launch",
-                            "environmentVariables": {
-                                "LAUNCH_ID": "1548168752173",
-                                "ROS_AWS_REGION": "us-west-2"
-                            }
-                        }
-                    }
-                ],
-                "simulationApplications": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/AWSRoboMakerCloudWatch-1547663411642_0LIt6D1h6/1547663521470",
-                        "applicationVersion": "$LATEST",
-                        "launchConfig": {
-                            "packageName": "cloudwatch_simulation",
-                            "launchFile": "bookstore_turtlebot_navigation.launch",
-                            "environmentVariables": {
-                                "LAUNCH_ID": "1548168752173",
-                                "ROS_AWS_REGION": "us-west-2",
-                                "TURTLEBOT3_MODEL": "waffle_pi"
-                            }
-                        }
-                    }
-                ],
-                "tags": {},
-                "vpcConfig": {
-                    "subnets": [
-                        "subnet-716dd52a",
-                        "subnet-43c22325",
-                        "subnet-3f526976"
-                    ],
-                    "securityGroups": [
-                        "sg-3fb40545"
-                    ],
-                    "vpcId": "vpc-99895eff",
-                    "assignPublicIp": true
-                }
-            },
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-g8h6tglmblgw",
-                "status": "Canceled",
-                "lastUpdatedAt": 1546543442.0,
-                "failureBehavior": "Fail",
-                "clientRequestToken": "d796bbb4-2a2c-1abc-f2a9-0d9e547d853f",
-                "outputLocation": {
-                    "s3Bucket": "sample-bucket",
-                    "s3Prefix": "SimulationLog_115490482698"
-                },
-                "maxJobDurationInSeconds": 28800,
-                "simulationTimeMillis": 0,
-                "iamRole": "arn:aws:iam::111111111111:role/RoboMakerSampleTheFirst",
-                "robotApplications": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/RoboMakerHelloWorldRobot/1546541208251",
-                        "applicationVersion": "$LATEST",
-                        "launchConfig": {
-                            "packageName": "hello_world_robot",
-                            "launchFile": "rotate.launch"
-                        }
-                    }
-                ],
-                "simulationApplications": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/RoboMakerHelloWorldSimulation/1546541198985",
-                        "applicationVersion": "$LATEST",
-                        "launchConfig": {
-                            "packageName": "hello_world_simulation",
-                            "launchFile": "empty_world.launch"
-                        }
-                    }
-                ],
-                "tags": {}
-            }
-        ],
-        "unprocessedJobs": []
-    }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/cancel-simulation-job.rst 2.31.35-1/awscli/examples/robomaker/cancel-simulation-job.rst
--- 2.23.6-1/awscli/examples/robomaker/cancel-simulation-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/cancel-simulation-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,6 +0,0 @@
-**To cancel a simulation job**
-
-The following ``cancel-simulation-job`` example cancels the specified simulation job. ::
-
-    aws robomaker cancel-simulation-job \
-        --job arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-66bbb3gpxm8x
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-deployment-job.rst 2.31.35-1/awscli/examples/robomaker/create-deployment-job.rst
--- 2.23.6-1/awscli/examples/robomaker/create-deployment-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-deployment-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-**To create a deployment job**
-
-This example creates a deployment job for fleet MyFleet. It includes an environment variable named "ENVIRONMENT". 
-It also attaches a tag named "Region". 
-
-Command::
-
-   aws robomaker create-deployment-job --deployment-config concurrentDeploymentPercentage=20,failureThresholdPercentage=25 --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/Trek/1539894765711 --tags Region=West --deployment-application-configs application=arn:aws:robomaker:us-west-2:111111111111:robot-application/RoboMakerVoiceInteractionRobot/1546537110575,applicationVersion=1,launchConfig={environmentVariables={ENVIRONMENT=Beta},launchFile=await_commands.launch,packageName=voice_interaction_robot}
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/sim-0974h36s4v0t",
-    "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-    "status": "Pending",
-    "deploymentApplicationConfigs": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/RoboMakerVoiceInteractionRobot/1546537110575",
-            "applicationVersion": "1",
-            "launchConfig": {
-                "packageName": "voice_interaction_robot",
-                "launchFile": "await_commands.launch",
-                "environmentVariables": {
-                    "ENVIRONMENT": "Beta"
-                }
-            }
-        }
-    ],
-    "createdAt": 1550770236.0,
-    "deploymentConfig": {
-        "concurrentDeploymentPercentage": 20,
-        "failureThresholdPercentage": 25
-    },
-    "tags": {
-        "Region": "West"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-fleet.rst 2.31.35-1/awscli/examples/robomaker/create-fleet.rst
--- 2.23.6-1/awscli/examples/robomaker/create-fleet.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-fleet.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,18 +0,0 @@
-**To create a fleet**
-
-This example creates a fleet. It attaches a tag named Region.
-
-Command::
-
-   aws robomaker create-fleet --name MyFleet --tags Region=East
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyOtherFleet/1550771394395",
-    "name": "MyFleet",
-    "createdAt": 1550771394.0,
-    "tags": {
-        "Region": "East"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-robot-application-version.rst 2.31.35-1/awscli/examples/robomaker/create-robot-application-version.rst
--- 2.23.6-1/awscli/examples/robomaker/create-robot-application-version.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-robot-application-version.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-**To create a robot application version**
-
-This example creates a robot application version.
-
-Command::
-
-   aws robomaker create-robot-application-version --application arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551201873931
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551201873931",
-    "name": "MyRobotApplication",
-    "version": "1",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-robot-application.tar.gz",
-            "etag": "f8cf5526f1c6e7b3a72c3ed3f79c5493-70",
-            "architecture": "ARMHF"
-        }
-    ],
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "lastUpdatedAt": 1551201873.0,
-    "revisionId": "9986bb8d-a695-4ab4-8810-9f4a74d1aa00"
-    "tags": {}
-  }
-  
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-robot-application.rst 2.31.35-1/awscli/examples/robomaker/create-robot-application.rst
--- 2.23.6-1/awscli/examples/robomaker/create-robot-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-robot-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-**To create a robot application**
-
-This example creates a robot application.
-
-Command::
-
-   aws robomaker create-robot-application --name MyRobotApplication --sources s3Bucket=my-bucket,s3Key=my-robot-application.tar.gz,architecture=X86_64 --robot-software-suite name=ROS,version=Kinetic
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551201873931",
-    "name": "MyRobotApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-robot-application.tar.gz",
-            "architecture": "ARMHF"
-        }
-    ],
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "lastUpdatedAt": 1551201873.0,
-    "revisionId": "1f3cb539-9239-4841-a656-d3efcffa07e1",
-    "tags": {}
-  }
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-robot.rst 2.31.35-1/awscli/examples/robomaker/create-robot.rst
--- 2.23.6-1/awscli/examples/robomaker/create-robot.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-robot.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-**To create a robot**
-
-This example creates a robot. It uses the ARMHF architecture. It also attaches a tag named Region.
-
-Command::
-
-   aws robomaker create-robot --name MyRobot --architecture ARMHF --greengrass-group-id 0f728a3c-7dbf-4a3e-976d-d16a8360caba --tags Region=East
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398",
-    "name": "MyRobot",
-    "createdAt": 1550772325.0,
-    "greengrassGroupId": "0f728a3c-7dbf-4a3e-976d-d16a8360caba",
-    "architecture": "ARMHF",
-    "tags": {
-        "Region": "East"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-simulation-application-version.rst 2.31.35-1/awscli/examples/robomaker/create-simulation-application-version.rst
--- 2.23.6-1/awscli/examples/robomaker/create-simulation-application-version.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-simulation-application-version.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,39 +0,0 @@
-**To create a simulation application version**
-
-This example creates a robot application version.
-
-Command::
-
-   aws robomaker create-simulation-application-version --application arn:aws:robomaker:us-west-2:111111111111:robot-application/MySimulationApplication/1551203427605
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MyRobotApplication/1551203427605",
-    "name": "MyRobotApplication",
-    "version": "1",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-simulation-application.tar.gz",
-            "etag": "00d8a94ff113856688c4fce618ae0f45-94",
-            "architecture": "X86_64"
-        }
-    ],
-    "simulationSoftwareSuite": {
-        "name": "Gazebo",
-        "version": "7"
-    },
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "renderingEngine": {
-        "name": "OGRE",
-        "version": "1.x"
-    },
-   "lastUpdatedAt": 1551203853.0,
-    "revisionId": "ee753e53-519c-4d37-895d-65e79bcd1914",
-    "tags": {}
-  }
-  
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-simulation-application.rst 2.31.35-1/awscli/examples/robomaker/create-simulation-application.rst
--- 2.23.6-1/awscli/examples/robomaker/create-simulation-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-simulation-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-**To create a simulation application**
-
-This example creates a simulation application. 
-
-Command::
-
-   aws robomaker create-simulation-application  --name MyRobotApplication --sources s3Bucket=my-bucket,s3Key=my-simulation-application.tar.gz,architecture=ARMHF --robot-software-suite name=ROS,version=Kinetic --simulation-software-suite name=Gazebo,version=7 --rendering-engine name=OGRE,version=1.x
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MyRobotApplication/1551203301792",
-    "name": "MyRobotApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-simulation-application.tar.gz",
-            "architecture": "X86_64"
-        }
-    ],
-    "simulationSoftwareSuite": {
-        "name": "Gazebo",
-        "version": "7"
-    },
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "renderingEngine": {
-        "name": "OGRE",
-        "version": "1.x"
-    },
-    "lastUpdatedAt": 1551203301.0,
-    "revisionId": "ee753e53-519c-4d37-895d-65e79bcd1914",
-    "tags": {}
-  }
-
diff -pruN 2.23.6-1/awscli/examples/robomaker/create-simulation-job.rst 2.31.35-1/awscli/examples/robomaker/create-simulation-job.rst
--- 2.23.6-1/awscli/examples/robomaker/create-simulation-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/create-simulation-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-**To create a simulation job**
-
-This example creates a simulation job. It uses a robot application and a simulation application.
-
-Command::
-
-   aws robomaker create-simulation-job --max-job-duration-in-seconds 3600 --iam-role arn:aws:iam::111111111111:role/AWSRoboMakerCloudWatch-154766341-SimulationJobRole-G0OBWTQ8YBG6 --robot-applications application=arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821,launchConfig={packageName=hello_world_robot,launchFile=rotate.launch} --simulation-applications application=arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605,launchConfig={packageName=hello_world_simulation,launchFile=empty_world.launch} --tags Region=North
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-w7m68wpr05h8",
-    "status": "Pending",
-    "lastUpdatedAt": 1551213837.0,
-    "failureBehavior": "Fail",
-    "clientRequestToken": "b283ccce-e468-43ee-8642-be76a9d69f15",
-    "maxJobDurationInSeconds": 3600,
-    "simulationTimeMillis": 0,
-    "iamRole": "arn:aws:iam::111111111111:role/MySimulationRole",
-    "robotApplications": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821",
-            "applicationVersion": "$LATEST",
-            "launchConfig": {
-                "packageName": "hello_world_robot",
-                "launchFile": "rotate.launch"
-            }
-        }
-    ],
-    "simulationApplications": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605",
-            "applicationVersion": "$LATEST",
-            "launchConfig": {
-                "packageName": "hello_world_simulation",
-                "launchFile": "empty_world.launch"
-            }
-        }
-    ],
-    "tags": {
-        "Region": "North"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/delete-fleet.rst 2.31.35-1/awscli/examples/robomaker/delete-fleet.rst
--- 2.23.6-1/awscli/examples/robomaker/delete-fleet.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/delete-fleet.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To delete a fleet**
-
-This example deletes a fleet.
-
-Command::
-
-   aws robomaker delete-fleet --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771394395
diff -pruN 2.23.6-1/awscli/examples/robomaker/delete-robot-application.rst 2.31.35-1/awscli/examples/robomaker/delete-robot-application.rst
--- 2.23.6-1/awscli/examples/robomaker/delete-robot-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/delete-robot-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To delete a robot application**
-
-This example deletes a robot application.
-
-Command::
-
-   aws robomaker delete-robot-application --application arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821
diff -pruN 2.23.6-1/awscli/examples/robomaker/delete-robot.rst 2.31.35-1/awscli/examples/robomaker/delete-robot.rst
--- 2.23.6-1/awscli/examples/robomaker/delete-robot.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/delete-robot.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To delete a robot**
-
-This example deletes a robot.
-
-Command::
-
-   aws robomaker delete-robot --robot arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1540829698778
diff -pruN 2.23.6-1/awscli/examples/robomaker/delete-simulation-application.rst 2.31.35-1/awscli/examples/robomaker/delete-simulation-application.rst
--- 2.23.6-1/awscli/examples/robomaker/delete-simulation-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/delete-simulation-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To delete a simulation application**
-
-This example deletes a simulation application.
-
-Command::
-
-   aws robomaker delete-simulation-application --application arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605
diff -pruN 2.23.6-1/awscli/examples/robomaker/deregister-robot.rst 2.31.35-1/awscli/examples/robomaker/deregister-robot.rst
--- 2.23.6-1/awscli/examples/robomaker/deregister-robot.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/deregister-robot.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To deregister a robot from a fleet**
-
-This example deregisters a robot from a fleet.
-
-Command::
-
-   aws robomaker deregister-robot --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771358907 --robot arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398
-
-Output::
-
-  {
-    "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771358907",
-    "robot": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398"
-  }
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-deployment-job.rst 2.31.35-1/awscli/examples/robomaker/describe-deployment-job.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-deployment-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-deployment-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-**To describe a deployment job**
-
-The following ``describe-deployment-job`` example retrieves the details about the specified deployment job. ::
-
-    aws robomaker describe-deployment-job \
-        --job arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-xl8qssl6pbcn
-
-Output::
-
-    {
-        "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-xl8qssl6pbcn",
-        "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/Trek/1539894765711",
-        "status": "InProgress",
-        "deploymentConfig": {
-            "concurrentDeploymentPercentage": 20,
-            "failureThresholdPercentage": 25
-        },
-        "deploymentApplicationConfigs": [
-            {
-                "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/RoboMakerHelloWorldRobot/1546541208251",
-                "applicationVersion": "1",
-                "launchConfig": {
-                    "packageName": "hello_world_robot",
-                    "launchFile": "rotate.launch"
-                }
-            }
-        ],
-        "createdAt": 1551218369.0,
-        "robotDeploymentSummary": [
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1540834232469",
-                "deploymentStartTime": 1551218376.0,
-                "status": "Deploying",
-                "progressDetail": {}
-            }
-        ],
-        "tags": {}
-    }
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-fleet.rst 2.31.35-1/awscli/examples/robomaker/describe-fleet.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-fleet.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-fleet.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-**To describe a fleet**
-
-The following ``describe-fleet`` example retrieves the details for the specified fleet. ::
-
-    aws robomaker describe-fleet \
-        --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771358907
-
-Output::
-
-    {
-        "name": "MyFleet",
-        "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-        "robots": [
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1540834232469",
-                "createdAt": 1540834232.0
-            },
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyOtherRobot/1540829698778",
-                "createdAt": 1540829698.0
-            }
-        ],
-        "createdAt": 1539894765.0,
-        "lastDeploymentStatus": "Succeeded",
-        "lastDeploymentJob": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-xl8qssl6pbcn",
-        "lastDeploymentTime": 1551218369.0,
-        "tags": {}
-    }
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-robot-application.rst 2.31.35-1/awscli/examples/robomaker/describe-robot-application.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-robot-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-robot-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,29 +0,0 @@
-**To describe a robot application**
-
-This example describes a robot application.
-
-Command::
-
-   aws robomaker describe-robot-application --application arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821",
-    "name": "MyRobotApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-robot-application.tar.gz",
-            "architecture": "X86_64"
-        }
-    ],
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "revisionId": "e72efe0d-f44f-4333-b604-f6fa5c6bb50b",
-    "lastUpdatedAt": 1551203485.0,
-    "tags": {}
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-robot.rst 2.31.35-1/awscli/examples/robomaker/describe-robot.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-robot.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-robot.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,21 +0,0 @@
-**To describe a robot**
-
-This example describes a robot.
-
-Command::
-
-   aws robomaker describe-robot --robot arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398",
-    "name": "MyRobot",
-    "status": "Available",
-    "greengrassGroupId": "0f728a3c-7dbf-4a3e-976d-d16a8360caba",
-    "createdAt": 1550772325.0,
-    "architecture": "ARMHF",
-    "tags": {
-        "Region": "East"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-simulation-application.rst 2.31.35-1/awscli/examples/robomaker/describe-simulation-application.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-simulation-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-simulation-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,37 +0,0 @@
-**To describe a simulation application**
-
-This example describes a simulation application.
-
-Command::
-
-   aws robomaker describe-simulation-application --application arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605",
-    "name": "MySimulationApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-simulation-application.tar.gz",
-            "architecture": "X86_64"
-        }
-    ],
-    "simulationSoftwareSuite": {
-        "name": "Gazebo",
-        "version": "7"
-    },
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "renderingEngine": {
-        "name": "OGRE",
-        "version": "1.x"
-    },
-    "revisionId": "783674ab-b7b8-42d9-b01f-9373907987e5",
-    "lastUpdatedAt": 1551203427.0,
-    "tags": {}
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/describe-simulation-job.rst 2.31.35-1/awscli/examples/robomaker/describe-simulation-job.rst
--- 2.23.6-1/awscli/examples/robomaker/describe-simulation-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/describe-simulation-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,45 +0,0 @@
-**To describe a simulation job**
-
-This example describes a simulation job.
-
-Command::
-
-   aws robomaker describe-simulation-job --job arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-pql32v7pfjy6
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-pql32v7pfjy6",
-    "status": "Running",
-    "lastUpdatedAt": 1551219349.0,
-    "failureBehavior": "Continue",
-    "clientRequestToken": "a19ec4b5-e50d-3591-33da-c2e593c60615",
-    "outputLocation": {
-        "s3Bucket": "my-output-bucket",
-        "s3Prefix": "output"
-    },
-    "maxJobDurationInSeconds": 3600,
-    "simulationTimeMillis": 0,
-    "iamRole": "arn:aws:iam::111111111111:role/MySimulationRole",
-    "robotApplications": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551206341136",
-            "applicationVersion": "$LATEST",
-            "launchConfig": {
-                "packageName": "hello_world_robot",
-                "launchFile": "rotate.launch"
-            }
-        }
-    ],
-    "simulationApplications": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551206347967",
-            "applicationVersion": "$LATEST",
-            "launchConfig": {
-                "packageName": "hello_world_simulation",
-                "launchFile": "empty_world.launch"
-            }
-        }
-    ],
-    "tags": {}
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-deployment-jobs.rst 2.31.35-1/awscli/examples/robomaker/list-deployment-jobs.rst
--- 2.23.6-1/awscli/examples/robomaker/list-deployment-jobs.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-deployment-jobs.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,57 +0,0 @@
-**To list deployment jobs**
-
-The following ``list-deployment-jobs`` example retrieves a list of deployment jobs. ::
-
-    aws robomaker list-deployment-jobs
-
-Output::
-
-    {
-        "deploymentJobs": [
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/sim-6293szzm56rv",
-                "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-                "status": "InProgress",
-                "deploymentApplicationConfigs": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/HelloWorldRobot/1546537110575",
-                        "applicationVersion": "1",
-                        "launchConfig": {
-                            "packageName": "hello_world_robot",
-                            "launchFile": "rotate.launch",
-                            "environmentVariables": {
-                                "ENVIRONMENT": "Desert"
-                            }
-                        }
-                    }
-                ],
-                "deploymentConfig": {
-                    "concurrentDeploymentPercentage": 20,
-                    "failureThresholdPercentage": 25
-                },
-                "createdAt": 1550689373.0
-            },
-            {
-                "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-4w4g69p25zdb",
-                "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-                "status": "Pending",
-                "deploymentApplicationConfigs": [
-                    {
-                        "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/AWSRoboMakerHelloWorld-1544562726923_YGHM_sh5M/1544562822877",
-                        "applicationVersion": "1",
-                        "launchConfig": {
-                            "packageName": "fail",
-                            "launchFile": "fail"
-                        }
-                    }
-                ],
-                "deploymentConfig": {
-                    "concurrentDeploymentPercentage": 20,
-                    "failureThresholdPercentage": 25
-                },
-                "failureReason": "",
-                "failureCode": "",
-                "createdAt": 1544719763.0
-            }
-        ]
-    }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-fleets.rst 2.31.35-1/awscli/examples/robomaker/list-fleets.rst
--- 2.23.6-1/awscli/examples/robomaker/list-fleets.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-fleets.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-**To list fleets**
-
-This example lists fleets. A maximum of 20 fleets will be returned.
-
-Command::
-
-  aws robomaker list-fleets --max-items 20
-
-Output::
-
-  {
-    "fleetDetails": [
-        {
-            "name": "Trek",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-            "createdAt": 1539894765.0,
-            "lastDeploymentStatus": "Failed",
-            "lastDeploymentJob": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-4w4g69p25zdb",
-            "lastDeploymentTime": 1544719763.0
-        }
-    ]
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-robot-applications.rst 2.31.35-1/awscli/examples/robomaker/list-robot-applications.rst
--- 2.23.6-1/awscli/examples/robomaker/list-robot-applications.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-robot-applications.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-**To list robot applications**
-
-This example lists robot applications. Results are limited to 20 robot applications.
-
-Command::
-
-  aws robomaker list-robot-applications --max-results 20
-
-Output::
-
-  {
-    "robotApplicationSummaries": [
-        {
-            "name": "MyRobot",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobot/1546537110575",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1546540372.0
-        },
-        {
-            "name": "AnotherRobot",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/AnotherRobot/1546541208251",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1546541208.0
-        },
-        {
-            "name": "MySuperRobot",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MySuperRobot/1547663517377",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1547663517.0
-        }
-    ]
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-robots.rst 2.31.35-1/awscli/examples/robomaker/list-robots.rst
--- 2.23.6-1/awscli/examples/robomaker/list-robots.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-robots.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,45 +0,0 @@
-**To list robots**
-
-This example lists robots. A maximum of 20 robots will be returned.
-
-Command::
-
-  aws robomaker list-robots --max-results 20
-
-Output::
-
-  {
-    "robots": [
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/Robot100/1544035373264",
-            "name": "Robot100",
-            "status": "Available",
-            "createdAt": 1544035373.0,
-            "architecture": "X86_64"
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/Robot101/1542146976587",
-            "name": "Robot101",
-            "status": "Available",
-            "createdAt": 1542146976.0,
-            "architecture": "X86_64"
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/Robot102/1540834232469",
-            "name": "Robot102",
-            "fleetArn": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/Trek/1539894765711",
-            "status": "Available",
-            "createdAt": 1540834232.0,
-            "architecture": "X86_64",
-            "lastDeploymentJob": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-jb007b75gl5f",
-            "lastDeploymentTime": 1550689533.0
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1540829698778",
-            "name": "MyRobot",
-            "status": "Registered",
-            "createdAt": 1540829698.0,
-            "architecture": "X86_64"
-        }
-    ]
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-simulation-applications.rst 2.31.35-1/awscli/examples/robomaker/list-simulation-applications.rst
--- 2.23.6-1/awscli/examples/robomaker/list-simulation-applications.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-simulation-applications.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,50 +0,0 @@
-**To list simulation applications**
-
-This example lists simulation applications. A maximum of 20 simulation applications will be returned.
-
-Command::
-
-  aws robomaker list-simulation-applications --max-results 20
-
-Output::
-
-  {
-    "simulationApplicationSummaries": [
-        {
-            "name": "AWSRoboMakerObjectTracker-1548959046124_NPvyfcatq",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/AWSRoboMakerObjectTracker-1548959046124_NPvyfcatq/1548959170096",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1548959170.0
-        },
-        {
-            "name": "RoboMakerHelloWorldSimulation",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/RoboMakerHelloWorldSimulation/1546541198985",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1546541198.0
-        },
-        {
-            "name": "RoboMakerObjectTrackerSimulation",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/RoboMakerObjectTrackerSimulation/1545846795615",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1545847405.0
-        },
-        {
-            "name": "RoboMakerVoiceInteractionSimulation",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/RoboMakerVoiceInteractionSimulation/1546537100507",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1546540352.0
-        },
-        {
-            "name": "AWSRoboMakerCloudWatch-1547663411642_0LIt6D1h6",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/AWSRoboMakerCloudWatch-1547663411642_0LIt6D1h6/1547663521470",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1547663521.0
-        },
-        {
-            "name": "AWSRoboMakerDeepRacer-1545848257672_1YZCaieQ-",
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/AWSRoboMakerDeepRacer-1545848257672_1YZCaieQ-/1545848370525",
-            "version": "$LATEST",
-            "lastUpdatedAt": 1545848370.0
-        }
-    ]
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-simulation-jobs.rst 2.31.35-1/awscli/examples/robomaker/list-simulation-jobs.rst
--- 2.23.6-1/awscli/examples/robomaker/list-simulation-jobs.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-simulation-jobs.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,80 +0,0 @@
-**To list simulation jobs**
-
-This example lists simulation jobs. 
-
-Command::
-
-  aws robomaker list-simulation-jobs
-
-Output::
-
-  {
-    "simulationJobSummaries": [
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-66bbb3gpxm8x",
-            "lastUpdatedAt": 1548959178.0,
-            "status": "Completed",
-            "simulationApplicationNames": [
-                "AWSRoboMakerObjectTracker-1548959046124_NPvyfcatq"
-            ],
-            "robotApplicationNames": [
-                null
-            ]
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-b27c4rkrtzcw",
-            "lastUpdatedAt": 1543514088.0,
-            "status": "Canceled",
-            "simulationApplicationNames": [
-                "AWSRoboMakerPersonDetection-1543513948280_T8rHW2_lu"
-            ],
-            "robotApplicationNames": [
-                "AWSRoboMakerPersonDetection-1543513948280_EYaMT0mYb"
-            ]
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-51vxjbzy4q8t",
-            "lastUpdatedAt": 1543508858.0,
-            "status": "Canceled",
-            "simulationApplicationNames": [
-                "AWSRoboMakerCloudWatch-1543504747391_lFF9ZQyx6"
-            ],
-            "robotApplicationNames": [
-                "AWSRoboMakerCloudWatch-1543504747391_axbYa3S3K"
-            ]
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-kgf1fqxflqbx",
-            "lastUpdatedAt": 1543504862.0,
-            "status": "Completed",
-            "simulationApplicationNames": [
-                "AWSRoboMakerCloudWatch-1543504747391_lFF9ZQyx6"
-            ],
-            "robotApplicationNames": [
-                "AWSRoboMakerCloudWatch-1543504747391_axbYa3S3K"
-            ]
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-vw8lvh061nqt",
-            "lastUpdatedAt": 1543441430.0,
-            "status": "Completed",
-            "simulationApplicationNames": [
-                "AWSRoboMakerHelloWorld-1543437372341__yb_Jg96l"
-            ],
-            "robotApplicationNames": [
-                "AWSRoboMakerHelloWorld-1543437372341_lNbmKHvs9"
-            ]
-        },
-        {
-            "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-txy5ypxmhz84",
-            "lastUpdatedAt": 1543437488.0,
-            "status": "Completed",
-            "simulationApplicationNames": [
-                "AWSRoboMakerHelloWorld-1543437372341__yb_Jg96l"
-            ],
-            "robotApplicationNames": [
-                "AWSRoboMakerHelloWorld-1543437372341_lNbmKHvs9"
-            ]
-        }
-    ]
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/list-tags-for-resource.rst 2.31.35-1/awscli/examples/robomaker/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/robomaker/list-tags-for-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,16 +0,0 @@
-**To list tags for a resource**
-
-This example lists tags for an AWS RoboMaker resource. 
-
-Command::
-
-  aws robomaker list-tags-for-resource --resource-arn "arn:aws:robomaker:us-west-2:111111111111:robot/Robby_the_Robot/1544035373264"
-
-Output::
-
-  {
-    "tags": {
-        "Region": "North",
-        "Stage": "Initial"
-    }
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/register-robot.rst 2.31.35-1/awscli/examples/robomaker/register-robot.rst
--- 2.23.6-1/awscli/examples/robomaker/register-robot.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/register-robot.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-**To register a robot**
-
-This example registers a robot to a fleet.
-
-Command::
-
-   aws robomaker register-robot --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771358907 --robot arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398
-
-Output::
-
-  {
-    "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1550771358907",
-    "robot": "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1550772324398"
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/restart-simulation-job.rst 2.31.35-1/awscli/examples/robomaker/restart-simulation-job.rst
--- 2.23.6-1/awscli/examples/robomaker/restart-simulation-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/restart-simulation-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To restart a simulation**
-
-This example restarts a simulation.
-
-Command::
-
-   aws robomaker restart-simulation-job --job arn:aws:robomaker:us-west-2:111111111111:simulation-job/sim-t6rdgt70mftr
diff -pruN 2.23.6-1/awscli/examples/robomaker/sync-deployment-job.rst 2.31.35-1/awscli/examples/robomaker/sync-deployment-job.rst
--- 2.23.6-1/awscli/examples/robomaker/sync-deployment-job.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/sync-deployment-job.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-**To sync a deployment job**
-
-This example synchronizes a deployment job.
-
-Command::
-
-   aws robomaker sync-deployment-job --fleet arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/Trek/1539894765711
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:deployment-job/deployment-09ccxs3tlfms",
-    "fleet": "arn:aws:robomaker:us-west-2:111111111111:deployment-fleet/MyFleet/1539894765711",
-    "status": "Pending",
-    "deploymentConfig": {
-        "concurrentDeploymentPercentage": 20,
-        "failureThresholdPercentage": 25
-    },
-    "deploymentApplicationConfigs": [
-        {
-            "application": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1546541208251",
-            "applicationVersion": "1",
-            "launchConfig": {
-                "packageName": "hello_world_simulation",
-                "launchFile": "empty_world.launch"
-            }
-        }
-    ],
-    "createdAt": 1551286954.0
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/tag-resource.rst 2.31.35-1/awscli/examples/robomaker/tag-resource.rst
--- 2.23.6-1/awscli/examples/robomaker/tag-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To tag a resource**
-
-This example tags a resource. It attaches two tags: Region and Stage. 
-
-Command::
-
-   aws robomaker tag-resource --resource-arn "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1544035373264" --tags Region=North,Stage=Initial
diff -pruN 2.23.6-1/awscli/examples/robomaker/untag-resource.rst 2.31.35-1/awscli/examples/robomaker/untag-resource.rst
--- 2.23.6-1/awscli/examples/robomaker/untag-resource.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-**To untag a resource**
-
-This example removes a tag from a resource. It removes the Region tag.
-
-Command::
-
-   aws robomaker untag-resource --resource-arn "arn:aws:robomaker:us-west-2:111111111111:robot/MyRobot/1544035373264" --tag-keys Region
diff -pruN 2.23.6-1/awscli/examples/robomaker/update-robot-application.rst 2.31.35-1/awscli/examples/robomaker/update-robot-application.rst
--- 2.23.6-1/awscli/examples/robomaker/update-robot-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/update-robot-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-**To update a robot application**
-
-This example updates a robot application.
-
-Command::
-
-   aws robomaker update-robot-application --application arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821 --sources s3Bucket=my-bucket,s3Key=my-robot-application.tar.gz,architecture=X86_64 --robot-software-suite name=ROS,version=Kinetic
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:robot-application/MyRobotApplication/1551203485821",
-    "name": "MyRobotApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-robot-application.tar.gz",
-            "architecture": "X86_64"
-        }
-    ],
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "lastUpdatedAt": 1551287993.0,
-    "revisionId": "20b5e331-24fd-4504-8b8c-531afe5f4c94"
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/robomaker/update-simulation-application.rst 2.31.35-1/awscli/examples/robomaker/update-simulation-application.rst
--- 2.23.6-1/awscli/examples/robomaker/update-simulation-application.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/robomaker/update-simulation-application.rst	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-**To update a simulation application**
-
-This example updates a simulation application.
-
-Command::
-
-   aws robomaker update-simulation-application --application arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605 --sources s3Bucket=my-bucket,s3Key=my-simulation-application.tar.gz,architecture=X86_64 --robot-software-suite name=ROS,version=Kinetic --simulation-software-suite name=Gazebo,version=7 --rendering-engine name=OGRE,version=1.x
-
-Output::
-
-  {
-    "arn": "arn:aws:robomaker:us-west-2:111111111111:simulation-application/MySimulationApplication/1551203427605",
-    "name": "MySimulationApplication",
-    "version": "$LATEST",
-    "sources": [
-        {
-            "s3Bucket": "my-bucket",
-            "s3Key": "my-simulation-application.tar.gz",
-            "architecture": "X86_64"
-        }
-    ],
-    "simulationSoftwareSuite": {
-        "name": "Gazebo",
-        "version": "7"
-    },
-    "robotSoftwareSuite": {
-        "name": "ROS",
-        "version": "Kinetic"
-    },
-    "renderingEngine": {
-        "name": "OGRE",
-        "version": "1.x"
-    },
-    "lastUpdatedAt": 1551289361.0,
-    "revisionId": "4a22cb5d-93c5-4cef-9311-52bdd119b79e"
-  }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/route53domains/get-domain-detail.rst 2.31.35-1/awscli/examples/route53domains/get-domain-detail.rst
--- 2.23.6-1/awscli/examples/route53domains/get-domain-detail.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/route53domains/get-domain-detail.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,7 @@ The following ``get-domain-detail`` comm
 
 This command runs only in the ``us-east-1`` Region. If your default region is set to ``us-east-1``, you can omit the ``region`` parameter. ::
 
-    aws route53domains get-domain-detail \ 
+    aws route53domains get-domain-detail \
         --region us-east-1 \
         --domain-name example.com
 
@@ -77,7 +77,7 @@ Output::
         "RegistrantPrivacy": true,
         "TechPrivacy": true,
         "RegistrarName": "Amazon Registrar, Inc.",
-        "WhoIsServer": "whois.registrar.amazon.com",
+        "WhoIsServer": "whois.registrar.amazon",
         "RegistrarUrl": "http://registrar.amazon.com",
         "AbuseContactEmail": "abuse@registrar.amazon.com",
         "AbuseContactPhone": "+1.2062661000",
@@ -86,4 +86,4 @@ Output::
         "StatusList": [
             "clientTransferProhibited"
         ]
-    }
+    }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3/_concepts.rst 2.31.35-1/awscli/examples/s3/_concepts.rst
--- 2.23.6-1/awscli/examples/s3/_concepts.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/_concepts.rst	2025-11-12 19:17:29.000000000 +0000
@@ -14,13 +14,13 @@ are two types of path arguments: ``Local
 written as an absolute path or relative path.
 
 ``S3Uri``: represents the location of a S3 object, prefix, or bucket.  This
-must be written in the form ``s3://mybucket/mykey`` where ``mybucket`` is
+must be written in the form ``s3://amzn-s3-demo-bucket/mykey`` where ``amzn-s3-demo-bucket`` is
 the specified S3 bucket, ``mykey`` is the specified S3 key.  The path argument
 must begin with ``s3://`` in order to denote that the path argument refers to
 a S3 object. Note that prefixes are separated by forward slashes. For
 example, if the S3 object ``myobject`` had the prefix ``myprefix``, the
 S3 key would be ``myprefix/myobject``, and if the object was in the bucket
-``mybucket``, the ``S3Uri`` would be ``s3://mybucket/myprefix/myobject``.
+``amzn-s3-demo-bucket``, the ``S3Uri`` would be ``s3://amzn-s3-demo-bucket/myprefix/myobject``.
 
 ``S3Uri`` also supports S3 access points. To specify an access point, this
 value must be of the form ``s3://<access-point-arn>/<key>``. For example if
diff -pruN 2.23.6-1/awscli/examples/s3/cp.rst 2.31.35-1/awscli/examples/s3/cp.rst
--- 2.23.6-1/awscli/examples/s3/cp.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/cp.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,67 +3,67 @@
 The following ``cp`` command copies a single file to a specified
 bucket and key::
 
-    aws s3 cp test.txt s3://mybucket/test2.txt
+    aws s3 cp test.txt s3://amzn-s3-demo-bucket/test2.txt
 
 Output::
 
-    upload: test.txt to s3://mybucket/test2.txt
+    upload: test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 2: Copying a local file to S3 with an expiration date**
 
 The following ``cp`` command copies a single file to a specified
 bucket and key that expires at the specified ISO 8601 timestamp::
 
-    aws s3 cp test.txt s3://mybucket/test2.txt \
+    aws s3 cp test.txt s3://amzn-s3-demo-bucket/test2.txt \
         --expires 2014-10-01T20:30:00Z
 
 Output::
 
-    upload: test.txt to s3://mybucket/test2.txt
+    upload: test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 3: Copying a file from S3 to S3**
 
 The following ``cp`` command copies a single s3 object to a specified bucket and key::
 
-    aws s3 cp s3://mybucket/test.txt s3://mybucket/test2.txt
+    aws s3 cp s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket/test2.txt
 
 Output::
 
-    copy: s3://mybucket/test.txt to s3://mybucket/test2.txt
+    copy: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 4: Copying an S3 object to a local file**
 
 The following ``cp`` command copies a single object to a specified file locally::
 
-    aws s3 cp s3://mybucket/test.txt test2.txt
+    aws s3 cp s3://amzn-s3-demo-bucket/test.txt test2.txt
 
 Output::
 
-    download: s3://mybucket/test.txt to test2.txt
+    download: s3://amzn-s3-demo-bucket/test.txt to test2.txt
 
 **Example 5: Copying an S3 object from one bucket to another**
 
 The following ``cp`` command copies a single object to a specified bucket while retaining its original name::
 
-    aws s3 cp s3://mybucket/test.txt s3://amzn-s3-demo-bucket2/
+    aws s3 cp s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket2/
 
 Output::
 
-    copy: s3://mybucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
+    copy: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
 
 **Example 6: Recursively copying S3 objects to a local directory**
 
 When passed with the parameter ``--recursive``, the following ``cp`` command recursively copies all objects under a
-specified prefix and bucket to a specified directory.  In this example, the bucket ``mybucket`` has the objects
+specified prefix and bucket to a specified directory.  In this example, the bucket ``amzn-s3-demo-bucket`` has the objects
 ``test1.txt`` and ``test2.txt``::
 
-    aws s3 cp s3://mybucket . \
+    aws s3 cp s3://amzn-s3-demo-bucket . \
         --recursive
 
 Output::
 
-    download: s3://mybucket/test1.txt to test1.txt
-    download: s3://mybucket/test2.txt to test2.txt
+    download: s3://amzn-s3-demo-bucket/test1.txt to test1.txt
+    download: s3://amzn-s3-demo-bucket/test2.txt to test2.txt
 
 **Example 7: Recursively copying local files to S3**
 
@@ -71,51 +71,51 @@ When passed with the parameter ``--recur
 specified directory to a specified bucket and prefix while excluding some files by using an ``--exclude`` parameter.  In
 this example, the directory ``myDir`` has the files ``test1.txt`` and ``test2.jpg``::
 
-    aws s3 cp myDir s3://mybucket/ \
+    aws s3 cp myDir s3://amzn-s3-demo-bucket/ \
         --recursive \
         --exclude "*.jpg"
 
 Output::
 
-    upload: myDir/test1.txt to s3://mybucket/test1.txt
+    upload: myDir/test1.txt to s3://amzn-s3-demo-bucket/test1.txt
 
 **Example 8: Recursively copying S3 objects to another bucket**
 
 When passed with the parameter ``--recursive``, the following ``cp`` command recursively copies all objects under a
 specified bucket to another bucket while excluding some objects by using an ``--exclude`` parameter.  In this example,
-the bucket ``mybucket`` has the objects ``test1.txt`` and ``another/test1.txt``::
+the bucket ``amzn-s3-demo-bucket`` has the objects ``test1.txt`` and ``another/test1.txt``::
 
-    aws s3 cp s3://mybucket/ s3://amzn-s3-demo-bucket2/ \
+    aws s3 cp s3://amzn-s3-demo-bucket/ s3://amzn-s3-demo-bucket2/ \
         --recursive \
         --exclude "another/*"
 
 Output::
 
-    copy: s3://mybucket/test1.txt to s3://amzn-s3-demo-bucket2/test1.txt
+    copy: s3://amzn-s3-demo-bucket/test1.txt to s3://amzn-s3-demo-bucket2/test1.txt
 
 You can combine ``--exclude`` and ``--include`` options to copy only objects that match a pattern, excluding all others::
 
-    aws s3 cp s3://mybucket/logs/ s3://amzn-s3-demo-bucket2/logs/ \
+    aws s3 cp s3://amzn-s3-demo-bucket/logs/ s3://amzn-s3-demo-bucket2/logs/ \
         --recursive \
         --exclude "*" \
         --include "*.log"
 
 Output::
 
-    copy: s3://mybucket/logs/test/test.log to s3://amzn-s3-demo-bucket2/logs/test/test.log
-    copy: s3://mybucket/logs/test3.log to s3://amzn-s3-demo-bucket2/logs/test3.log
+    copy: s3://amzn-s3-demo-bucket/logs/test/test.log to s3://amzn-s3-demo-bucket2/logs/test/test.log
+    copy: s3://amzn-s3-demo-bucket/logs/test3.log to s3://amzn-s3-demo-bucket2/logs/test3.log
 
 **Example 9: Setting the Access Control List (ACL) while copying an S3 object**
 
 The following ``cp`` command copies a single object to a specified bucket and key while setting the ACL to
 ``public-read-write``::
 
-    aws s3 cp s3://mybucket/test.txt s3://mybucket/test2.txt \
+    aws s3 cp s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket/test2.txt \
         --acl public-read-write
 
 Output::
 
-    copy: s3://mybucket/test.txt to s3://mybucket/test2.txt
+    copy: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 Note that if you're using the ``--acl`` option, ensure that any associated IAM
 policies include the ``"s3:PutObjectAcl"`` action::
@@ -138,7 +138,7 @@ Output::
                         "s3:PutObjectAcl"
                     ],
                     "Resource": [
-                        "arn:aws:s3:::mybucket/*"
+                        "arn:aws:s3:::amzn-s3-demo-bucket/*"
                     ],
                     "Effect": "Allow",
                     "Sid": "Stmt1234567891234"
@@ -152,11 +152,11 @@ Output::
 The following ``cp`` command illustrates the use of the ``--grants`` option to grant read access to all users identified
 by URI and full control to a specific user identified by their Canonical ID::
 
-  aws s3 cp file.txt s3://mybucket/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=id=79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
+  aws s3 cp file.txt s3://amzn-s3-demo-bucket/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=id=79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
 
 Output::
 
-    upload: file.txt to s3://mybucket/file.txt
+    upload: file.txt to s3://amzn-s3-demo-bucket/file.txt
 
 **Example 11: Uploading a local file stream to S3**
 
@@ -164,13 +164,13 @@ Output::
 
 The following ``cp`` command uploads a local file stream from standard input to a specified bucket and key::
 
-    aws s3 cp - s3://mybucket/stream.txt
+    aws s3 cp - s3://amzn-s3-demo-bucket/stream.txt
 
 **Example 12: Uploading a local file stream that is larger than 50GB to S3**
 
 The following ``cp`` command uploads a 51GB local file stream from standard input to a specified bucket and key.  The ``--expected-size`` option must be provided, or the upload may fail when it reaches the default part limit of 10,000::
 
-    aws s3 cp - s3://mybucket/stream.txt --expected-size 54760833024
+    aws s3 cp - s3://amzn-s3-demo-bucket/stream.txt --expected-size 54760833024
 
 **Example 13: Downloading an S3 object as a local file stream**
 
@@ -178,7 +178,7 @@ The following ``cp`` command uploads a 5
 
 The following ``cp`` command downloads an S3 object locally as a stream to standard output. Downloading as a stream is not currently compatible with the ``--recursive`` parameter::
 
-    aws s3 cp s3://mybucket/stream.txt -
+    aws s3 cp s3://amzn-s3-demo-bucket/stream.txt -
 
 **Example 14: Uploading to an S3 access point**
 
diff -pruN 2.23.6-1/awscli/examples/s3/ls.rst 2.31.35-1/awscli/examples/s3/ls.rst
--- 2.23.6-1/awscli/examples/s3/ls.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/ls.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,19 +1,19 @@
 **Example 1: Listing all user owned buckets**
 
-The following ``ls`` command lists all of the bucket owned by the user.  In this example, the user owns the buckets ``mybucket`` and ``amzn-s3-demo-bucket2``.  The timestamp is the date the bucket was created, shown in your machine's time zone.  This date can change when making changes to your bucket, such as editing its bucket policy.  Note if  ``s3://`` is used for the path argument ``<S3Uri>``, it will list all of the buckets as well. ::
+The following ``ls`` command lists all of the bucket owned by the user.  In this example, the user owns the buckets ``amzn-s3-demo-bucket`` and ``amzn-s3-demo-bucket2``.  The timestamp is the date the bucket was created, shown in your machine's time zone.  This date can change when making changes to your bucket, such as editing its bucket policy.  Note if  ``s3://`` is used for the path argument ``<S3Uri>``, it will list all of the buckets as well. ::
 
     aws s3 ls
 
 Output::
 
-    2013-07-11 17:08:50 mybucket
+    2013-07-11 17:08:50 amzn-s3-demo-bucket
     2013-07-24 14:55:44 amzn-s3-demo-bucket2
     
 **Example 2: Listing all prefixes and objects in a bucket**
 
-The following ``ls`` command lists objects and common prefixes under a specified bucket and prefix.  In this example, the user owns the bucket ``mybucket`` with the objects ``test.txt`` and ``somePrefix/test.txt``.  The ``LastWriteTime`` and ``Length`` are arbitrary. Note that since the ``ls`` command has no interaction with the local filesystem, the ``s3://`` URI scheme is not required to resolve ambiguity and may be omitted. ::
+The following ``ls`` command lists objects and common prefixes under a specified bucket and prefix.  In this example, the user owns the bucket ``amzn-s3-demo-bucket`` with the objects ``test.txt`` and ``somePrefix/test.txt``.  The ``LastWriteTime`` and ``Length`` are arbitrary. Note that since the ``ls`` command has no interaction with the local filesystem, the ``s3://`` URI scheme is not required to resolve ambiguity and may be omitted. ::
 
-    aws s3 ls s3://mybucket
+    aws s3 ls s3://amzn-s3-demo-bucket
 
 Output::
 
@@ -24,7 +24,7 @@ Output::
 
 The following ``ls`` command lists objects and common prefixes under a specified bucket and prefix.  However, there are no objects nor common prefixes under the specified bucket and prefix. ::
 
-    aws s3 ls s3://mybucket/noExistPrefix
+    aws s3 ls s3://amzn-s3-demo-bucket/noExistPrefix
 
 Output::
 
@@ -34,7 +34,7 @@ Output::
 
 The following ``ls`` command will recursively list objects in a bucket.  Rather than showing ``PRE dirname/`` in the output, all the content in a bucket will be listed in order. ::
 
-    aws s3 ls s3://mybucket \
+    aws s3 ls s3://amzn-s3-demo-bucket \
         --recursive
 
 Output::
@@ -54,7 +54,7 @@ Output::
 
 The following ``ls`` command demonstrates the same command using the --human-readable and --summarize options. --human-readable displays file size in Bytes/MiB/KiB/GiB/TiB/PiB/EiB. --summarize displays the total number of objects and total size at the end of the result listing::
 
-    aws s3 ls s3://mybucket \
+    aws s3 ls s3://amzn-s3-demo-bucket \
         --recursive \
         --human-readable \
         --summarize
diff -pruN 2.23.6-1/awscli/examples/s3/mb.rst 2.31.35-1/awscli/examples/s3/mb.rst
--- 2.23.6-1/awscli/examples/s3/mb.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/mb.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,22 +1,22 @@
 **Example 1: Create a bucket**
 
-The following ``mb`` command creates a bucket.  In this example, the user makes the bucket ``mybucket``.  The bucket is
+The following ``mb`` command creates a bucket.  In this example, the user makes the bucket ``amzn-s3-demo-bucket``.  The bucket is
 created in the region specified in the user's configuration file::
 
-    aws s3 mb s3://mybucket
+    aws s3 mb s3://amzn-s3-demo-bucket
 
 Output::
 
-    make_bucket: s3://mybucket
+    make_bucket: s3://amzn-s3-demo-bucket
 
 **Example 2: Create a bucket in the specified region**
 
 The following ``mb`` command creates a bucket in a region specified by the ``--region`` parameter.  In this example, the
-user makes the bucket ``mybucket`` in the region ``us-west-1``::
+user makes the bucket ``amzn-s3-demo-bucket`` in the region ``us-west-1``::
 
-    aws s3 mb s3://mybucket \
+    aws s3 mb s3://amzn-s3-demo-bucket \
         --region us-west-1
 
 Output::
 
-    make_bucket: s3://mybucket
+    make_bucket: s3://amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3/mv.rst 2.31.35-1/awscli/examples/s3/mv.rst
--- 2.23.6-1/awscli/examples/s3/mv.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/mv.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,55 +2,55 @@
 
 The following ``mv`` command moves a single file to a specified bucket and key. ::
 
-    aws s3 mv test.txt s3://mybucket/test2.txt
+    aws s3 mv test.txt s3://amzn-s3-demo-bucket/test2.txt
 
 Output::
 
-    move: test.txt to s3://mybucket/test2.txt
+    move: test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 2: Move an object to the specified bucket and key**
 
 The following ``mv`` command moves a single s3 object to a specified bucket and key. ::
 
-    aws s3 mv s3://mybucket/test.txt s3://mybucket/test2.txt
+    aws s3 mv s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket/test2.txt
 
 Output::
 
-    move: s3://mybucket/test.txt to s3://mybucket/test2.txt
+    move: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 3: Move an S3 object to the local directory**
 
 The following ``mv`` command moves a single object to a specified file locally. ::
 
-    aws s3 mv s3://mybucket/test.txt test2.txt
+    aws s3 mv s3://amzn-s3-demo-bucket/test.txt test2.txt
 
 Output::
 
-    move: s3://mybucket/test.txt to test2.txt
+    move: s3://amzn-s3-demo-bucket/test.txt to test2.txt
 
 **Example 4: Move an object with it's original name to the specified bucket**
 
 The following ``mv`` command moves a single object to a specified bucket while retaining its original name::
 
-    aws s3 mv s3://mybucket/test.txt s3://amzn-s3-demo-bucket2/
+    aws s3 mv s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket2/
 
 Output::
 
-    move: s3://mybucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
+    move: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
 
 **Example 5: Move all objects and prefixes in a bucket to the local directory**
 
 When passed with the parameter ``--recursive``, the following ``mv`` command recursively moves all objects under a
-specified prefix and bucket to a specified directory.  In this example, the bucket ``mybucket`` has the objects
+specified prefix and bucket to a specified directory.  In this example, the bucket ``amzn-s3-demo-bucket`` has the objects
 ``test1.txt`` and ``test2.txt``. ::
 
-    aws s3 mv s3://mybucket . \
+    aws s3 mv s3://amzn-s3-demo-bucket . \
         --recursive
 
 Output::
 
-    move: s3://mybucket/test1.txt to test1.txt
-    move: s3://mybucket/test2.txt to test2.txt
+    move: s3://amzn-s3-demo-bucket/test1.txt to test1.txt
+    move: s3://amzn-s3-demo-bucket/test2.txt to test2.txt
 
 **Example 6: Move all objects and prefixes in a bucket to the local directory, except ``.jpg`` files**
 
@@ -58,7 +58,7 @@ When passed with the parameter ``--recur
 specified directory to a specified bucket and prefix while excluding some files by using an ``--exclude`` parameter. In
 this example, the directory ``myDir`` has the files ``test1.txt`` and ``test2.jpg``. ::
 
-    aws s3 mv myDir s3://mybucket/ \
+    aws s3 mv myDir s3://amzn-s3-demo-bucket/ \
         --recursive \
         --exclude "*.jpg"
 
@@ -70,39 +70,39 @@ Output::
 
 When passed with the parameter ``--recursive``, the following ``mv`` command recursively moves all objects under a
 specified bucket to another bucket while excluding some objects by using an ``--exclude`` parameter.  In this example,
-the bucket ``mybucket`` has the objects ``test1.txt`` and ``another/test1.txt``. ::
+the bucket ``amzn-s3-demo-bucket`` has the objects ``test1.txt`` and ``another/test1.txt``. ::
 
-    aws s3 mv s3://mybucket/ s3://amzn-s3-demo-bucket2/ \
+    aws s3 mv s3://amzn-s3-demo-bucket/ s3://amzn-s3-demo-bucket2/ \
         --recursive \
-        --exclude "mybucket/another/*"
+        --exclude "amzn-s3-demo-bucket/another/*"
 
 Output::
 
-    move: s3://mybucket/test1.txt to s3://amzn-s3-demo-bucket2/test1.txt
+    move: s3://amzn-s3-demo-bucket/test1.txt to s3://amzn-s3-demo-bucket2/test1.txt
 
 **Example 8: Move an object to the specified bucket and set the ACL**
 
 The following ``mv`` command moves a single object to a specified bucket and key while setting the ACL to
 ``public-read-write``. ::
 
-    aws s3 mv s3://mybucket/test.txt s3://mybucket/test2.txt \
+    aws s3 mv s3://amzn-s3-demo-bucket/test.txt s3://amzn-s3-demo-bucket/test2.txt \
         --acl public-read-write
 
 Output::
 
-    move: s3://mybucket/test.txt to s3://mybucket/test2.txt
+    move: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 9: Move a local file to the specified bucket and grant permissions**
 
 The following ``mv`` command illustrates the use of the ``--grants`` option to grant read access to all users and full
 control to a specific user identified by their email address. ::
 
-    aws s3 mv file.txt s3://mybucket/ \
+    aws s3 mv file.txt s3://amzn-s3-demo-bucket/ \
         --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=emailaddress=user@example.com
 
 Output::
 
-    move: file.txt to s3://mybucket/file.txt
+    move: file.txt to s3://amzn-s3-demo-bucket/file.txt
 
 **Example 10: Move a file to an S3 access point**
 
diff -pruN 2.23.6-1/awscli/examples/s3/rb.rst 2.31.35-1/awscli/examples/s3/rb.rst
--- 2.23.6-1/awscli/examples/s3/rb.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/rb.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,24 @@
 **Example 1: Delete a bucket**
 
-The following ``rb`` command removes a bucket.  In this example, the user's bucket is ``mybucket``.  Note that the bucket must be empty in order to remove::
+The following ``rb`` command removes a bucket.  In this example, the user's bucket is ``amzn-s3-demo-bucket``.  Note that the bucket must be empty in order to remove::
 
-    aws s3 rb s3://mybucket
+    aws s3 rb s3://amzn-s3-demo-bucket
 
 Output::
 
-    remove_bucket: mybucket
+    remove_bucket: amzn-s3-demo-bucket
 
 **Example 2: Force delete a bucket**
 
 The following ``rb`` command uses the ``--force`` parameter to first remove all of the objects in the bucket and then
-remove the bucket itself.  In this example, the user's bucket is ``mybucket`` and the objects in ``mybucket`` are
+remove the bucket itself.  In this example, the user's bucket is ``amzn-s3-demo-bucket`` and the objects in ``amzn-s3-demo-bucket`` are
 ``test1.txt`` and ``test2.txt``::
 
-    aws s3 rb s3://mybucket \
+    aws s3 rb s3://amzn-s3-demo-bucket \
         --force
 
 Output::
 
-    delete: s3://mybucket/test1.txt
-    delete: s3://mybucket/test2.txt
-    remove_bucket: mybucket
\ No newline at end of file
+    delete: s3://amzn-s3-demo-bucket/test1.txt
+    delete: s3://amzn-s3-demo-bucket/test2.txt
+    remove_bucket: amzn-s3-demo-bucket
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3/rm.rst 2.31.35-1/awscli/examples/s3/rm.rst
--- 2.23.6-1/awscli/examples/s3/rm.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/rm.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,54 +2,54 @@
 
 The following ``rm`` command deletes a single s3 object::
 
-    aws s3 rm s3://mybucket/test2.txt
+    aws s3 rm s3://amzn-s3-demo-bucket/test2.txt
 
 Output::
 
-    delete: s3://mybucket/test2.txt
+    delete: s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 2: Delete all contents in a bucket**
 
 The following ``rm`` command recursively deletes all objects under a specified bucket and prefix when passed with the
-parameter ``--recursive``.  In this example, the bucket ``mybucket`` contains the objects ``test1.txt`` and
+parameter ``--recursive``.  In this example, the bucket ``amzn-s3-demo-bucket`` contains the objects ``test1.txt`` and
 ``test2.txt``::
 
-    aws s3 rm s3://mybucket \
+    aws s3 rm s3://amzn-s3-demo-bucket \
         --recursive
 
 Output::
 
-    delete: s3://mybucket/test1.txt
-    delete: s3://mybucket/test2.txt
+    delete: s3://amzn-s3-demo-bucket/test1.txt
+    delete: s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 3: Delete all contents in a bucket, except ``.jpg`` files**
 
 
 The following ``rm`` command recursively deletes all objects under a specified bucket and prefix when passed with the
 parameter ``--recursive`` while excluding some objects by using an ``--exclude`` parameter.  In this example, the bucket
-``mybucket`` has the objects ``test1.txt`` and ``test2.jpg``::
+``amzn-s3-demo-bucket`` has the objects ``test1.txt`` and ``test2.jpg``::
 
-    aws s3 rm s3://mybucket/ \
+    aws s3 rm s3://amzn-s3-demo-bucket/ \
         --recursive \
         --exclude "*.jpg"
 
 Output::
 
-    delete: s3://mybucket/test1.txt
+    delete: s3://amzn-s3-demo-bucket/test1.txt
 
 **Example 4: Delete all contents in a bucket, except objects under the specified prefix**
 
 The following ``rm`` command recursively deletes all objects under a specified bucket and prefix when passed with the
 parameter ``--recursive`` while excluding all objects under a particular prefix by using an ``--exclude`` parameter.  In
-this example, the bucket ``mybucket`` has the objects ``test1.txt`` and ``another/test.txt``::
+this example, the bucket ``amzn-s3-demo-bucket`` has the objects ``test1.txt`` and ``another/test.txt``::
 
-    aws s3 rm s3://mybucket/ \
+    aws s3 rm s3://amzn-s3-demo-bucket/ \
         --recursive \
         --exclude "another/*"
 
 Output::
 
-    delete: s3://mybucket/test1.txt
+    delete: s3://amzn-s3-demo-bucket/test1.txt
 
 **Example 5: Delete an object from an S3 access point**
 
diff -pruN 2.23.6-1/awscli/examples/s3/sync.rst 2.31.35-1/awscli/examples/s3/sync.rst
--- 2.23.6-1/awscli/examples/s3/sync.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/sync.rst	2025-11-12 19:17:29.000000000 +0000
@@ -4,15 +4,15 @@ The following ``sync`` command syncs obj
 uploading the local files to S3.  A local file will require uploading if the size of the local file is different than
 the size of the S3 object, the last modified time of the local file is newer than the last modified time of the S3
 object, or the local file does not exist under the specified bucket and prefix.  In this example, the user syncs the
-bucket ``mybucket`` to the local current directory.  The local current directory contains the files ``test.txt`` and
-``test2.txt``.  The bucket ``mybucket`` contains no objects. ::
+bucket ``amzn-s3-demo-bucket`` to the local current directory.  The local current directory contains the files ``test.txt`` and
+``test2.txt``.  The bucket ``amzn-s3-demo-bucket`` contains no objects. ::
 
-    aws s3 sync . s3://mybucket
+    aws s3 sync . s3://amzn-s3-demo-bucket
 
 Output::
 
-    upload: test.txt to s3://mybucket/test.txt
-    upload: test2.txt to s3://mybucket/test2.txt
+    upload: test.txt to s3://amzn-s3-demo-bucket/test.txt
+    upload: test2.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 2: Sync all S3 objects from the specified S3 bucket to another bucket**
 
@@ -21,15 +21,15 @@ prefix and bucket by copying S3 objects.
 the last modified time of the source is newer than the last modified time of the destination, or the S3 object does not
 exist under the specified bucket and prefix destination. 
 
-In this example, the user syncs the bucket ``mybucket`` to the bucket ``amzn-s3-demo-bucket2``. The bucket ``mybucket`` contains the objects ``test.txt`` and ``test2.txt``. The bucket
+In this example, the user syncs the bucket ``amzn-s3-demo-bucket`` to the bucket ``amzn-s3-demo-bucket2``. The bucket ``amzn-s3-demo-bucket`` contains the objects ``test.txt`` and ``test2.txt``. The bucket
 ``amzn-s3-demo-bucket2`` contains no objects::
 
-    aws s3 sync s3://mybucket s3://amzn-s3-demo-bucket2
+    aws s3 sync s3://amzn-s3-demo-bucket s3://amzn-s3-demo-bucket2
 
 Output::
 
-    copy: s3://mybucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
-    copy: s3://mybucket/test2.txt to s3://amzn-s3-demo-bucket2/test2.txt
+    copy: s3://amzn-s3-demo-bucket/test.txt to s3://amzn-s3-demo-bucket2/test.txt
+    copy: s3://amzn-s3-demo-bucket/test2.txt to s3://amzn-s3-demo-bucket2/test2.txt
 
 **Example 3: Sync all S3 objects from the specified S3 bucket to the local directory**
 
@@ -38,62 +38,62 @@ downloading S3 objects. An S3 object wil
 local file, the last modified time of the S3 object is newer than the last modified time of the local file, or the S3
 object does not exist in the local directory. Take note that when objects are downloaded from S3, the last modified
 time of the local file is changed to the last modified time of the S3 object. In this example, the user syncs the
-bucket ``mybucket`` to the current local directory. The bucket ``mybucket`` contains the objects ``test.txt`` and
+bucket ``amzn-s3-demo-bucket`` to the current local directory. The bucket ``amzn-s3-demo-bucket`` contains the objects ``test.txt`` and
 ``test2.txt``.  The current local directory has no files::
 
-    aws s3 sync s3://mybucket .
+    aws s3 sync s3://amzn-s3-demo-bucket .
 
 Output::
 
-    download: s3://mybucket/test.txt to test.txt
-    download: s3://mybucket/test2.txt to test2.txt
+    download: s3://amzn-s3-demo-bucket/test.txt to test.txt
+    download: s3://amzn-s3-demo-bucket/test2.txt to test2.txt
 
 **Example 4: Sync all local objects to the specified bucket and delete all files that do not match**
 
 The following ``sync`` command syncs objects under a specified prefix and bucket to files in a local directory by
 uploading the local files to S3.  Because of the ``--delete`` parameter, any files existing under the
 specified prefix and bucket but not existing in the local directory will be deleted.  In this example, the user syncs
-the bucket ``mybucket`` to the local current directory.  The local current directory contains the files ``test.txt`` and
-``test2.txt``.  The bucket ``mybucket`` contains the object ``test3.txt``::
+the bucket ``amzn-s3-demo-bucket`` to the local current directory.  The local current directory contains the files ``test.txt`` and
+``test2.txt``.  The bucket ``amzn-s3-demo-bucket`` contains the object ``test3.txt``::
 
-    aws s3 sync . s3://mybucket \
+    aws s3 sync . s3://amzn-s3-demo-bucket \
         --delete
 
 Output::
 
-    upload: test.txt to s3://mybucket/test.txt
-    upload: test2.txt to s3://mybucket/test2.txt
-    delete: s3://mybucket/test3.txt
+    upload: test.txt to s3://amzn-s3-demo-bucket/test.txt
+    upload: test2.txt to s3://amzn-s3-demo-bucket/test2.txt
+    delete: s3://amzn-s3-demo-bucket/test3.txt
 
 **Example 5: Sync all local objects to the specified bucket except ``.jpg`` files**
 
 The following ``sync`` command syncs objects under a specified prefix and bucket to files in a local directory by
 uploading the local files to S3. Because of the ``--exclude`` parameter, all files matching the pattern
-existing both in S3 and locally will be excluded from the sync. In this example, the user syncs the bucket ``mybucket``
+existing both in S3 and locally will be excluded from the sync. In this example, the user syncs the bucket ``amzn-s3-demo-bucket``
 to the local current directory.  The local current directory contains the files ``test.jpg`` and ``test2.txt``.  The
-bucket ``mybucket`` contains the object ``test.jpg`` of a different size than the local ``test.jpg``::
+bucket ``amzn-s3-demo-bucket`` contains the object ``test.jpg`` of a different size than the local ``test.jpg``::
 
-    aws s3 sync . s3://mybucket \
+    aws s3 sync . s3://amzn-s3-demo-bucket \
         --exclude "*.jpg"
 
 Output::
 
-    upload: test2.txt to s3://mybucket/test2.txt
+    upload: test2.txt to s3://amzn-s3-demo-bucket/test2.txt
 
 **Example 6: Sync all local objects to the specified bucket except specified directory files**
 
 The following ``sync`` command syncs files under a local directory to objects under a specified prefix and bucket by
 downloading S3 objects.  This example uses the ``--exclude`` parameter flag to exclude a specified directory
 and S3 prefix from the ``sync`` command.  In this example, the user syncs the local current directory to the bucket
-``mybucket``.  The local current directory contains the files ``test.txt`` and ``another/test2.txt``.  The bucket
-``mybucket`` contains the objects ``another/test5.txt`` and ``test1.txt``::
+``amzn-s3-demo-bucket``.  The local current directory contains the files ``test.txt`` and ``another/test2.txt``.  The bucket
+``amzn-s3-demo-bucket`` contains the objects ``another/test5.txt`` and ``test1.txt``::
 
-    aws s3 sync s3://mybucket/ . \
+    aws s3 sync s3://amzn-s3-demo-bucket/ . \
         --exclude "*another/*"
 
 Output::
 
-    download: s3://mybucket/test1.txt to test1.txt
+    download: s3://amzn-s3-demo-bucket/test1.txt to test1.txt
 
 **Example 7: Sync all objects between buckets in different regions**
 
diff -pruN 2.23.6-1/awscli/examples/s3/website.rst 2.31.35-1/awscli/examples/s3/website.rst
--- 2.23.6-1/awscli/examples/s3/website.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3/website.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,10 @@
 **Configure an S3 bucket as a static website**
 
-The following command configures a bucket named ``my-bucket`` as a static website. The index document option specifies the file in ``my-bucket`` that visitors will be directed to when they navigate to the website URL. In this case, the bucket is in the us-west-2 region, so the site would appear at ``http://my-bucket.s3-website-us-west-2.amazonaws.com``. 
+The following command configures a bucket named ``amzn-s3-demo-bucket`` as a static website. The index document option specifies the file in ``amzn-s3-demo-bucket`` that visitors will be directed to when they navigate to the website URL. In this case, the bucket is in the us-west-2 region, so the site would appear at ``http://amzn-s3-demo-bucket.s3-website-us-west-2.amazonaws.com``. 
 
 All files in the bucket that appear on the static site must be configured to allow visitors to open them. File permissions are configured separately from the bucket website configuration. ::
 
-    aws s3 website s3://my-bucket/ \
+    aws s3 website s3://amzn-s3-demo-bucket/ \
         --index-document index.html \
         --error-document error.html
 
diff -pruN 2.23.6-1/awscli/examples/s3api/abort-multipart-upload.rst 2.31.35-1/awscli/examples/s3api/abort-multipart-upload.rst
--- 2.23.6-1/awscli/examples/s3api/abort-multipart-upload.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/abort-multipart-upload.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,9 @@
 **To abort the specified multipart upload**
 
-The following ``abort-multipart-upload`` command aborts a multipart upload for the key ``multipart/01`` in the bucket ``my-bucket``. ::
+The following ``abort-multipart-upload`` command aborts a multipart upload for the key ``multipart/01`` in the bucket ``amzn-s3-demo-bucket``. ::
 
     aws s3api abort-multipart-upload \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key multipart/01 \
         --upload-id dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R
 
diff -pruN 2.23.6-1/awscli/examples/s3api/complete-multipart-upload.rst 2.31.35-1/awscli/examples/s3api/complete-multipart-upload.rst
--- 2.23.6-1/awscli/examples/s3api/complete-multipart-upload.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/complete-multipart-upload.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command completes a multipart upload for the key ``multipart/01`` in the bucket ``my-bucket``::
+The following command completes a multipart upload for the key ``multipart/01`` in the bucket ``amzn-s3-demo-bucket``::
 
-  aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket my-bucket --key 'multipart/01' --upload-id dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R
+  aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key 'multipart/01' --upload-id dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R
 
 The upload ID required by this command is output by ``create-multipart-upload`` and can also be retrieved with ``list-multipart-uploads``.
 
@@ -31,7 +31,7 @@ Output::
 
   {
       "ETag": "\"3944a9f7a4faab7f78788ff6210f63f0-3\"",
-      "Bucket": "my-bucket",
-      "Location": "https://my-bucket.s3.amazonaws.com/multipart%2F01",
+      "Bucket": "amzn-s3-demo-bucket",
+      "Location": "https://amzn-s3-demo-bucket.s3.amazonaws.com/multipart%2F01",
       "Key": "multipart/01"
   }
diff -pruN 2.23.6-1/awscli/examples/s3api/create-bucket.rst 2.31.35-1/awscli/examples/s3api/create-bucket.rst
--- 2.23.6-1/awscli/examples/s3api/create-bucket.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/create-bucket.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,52 +1,52 @@
 **Example 1: To create a bucket**
 
-The following ``create-bucket`` example creates a bucket named ``my-bucket``::
+The following ``create-bucket`` example creates a bucket named ``amzn-s3-demo-bucket``::
 
     aws s3api create-bucket \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --region us-east-1
 
 Output::
 
     {
-        "Location": "/my-bucket"
+        "Location": "/amzn-s3-demo-bucket"
     }
 
 For more information, see `Creating a bucket <https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html>`__ in the *Amazon S3 User Guide*.
 
 **Example 2: To create a bucket with owner enforced**
 
-The following ``create-bucket`` example creates a bucket named ``my-bucket`` that uses the bucket owner enforced setting for S3 Object Ownership. ::
+The following ``create-bucket`` example creates a bucket named ``amzn-s3-demo-bucket`` that uses the bucket owner enforced setting for S3 Object Ownership. ::
 
     aws s3api create-bucket \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --region us-east-1 \
         --object-ownership BucketOwnerEnforced
 
 Output::
 
     {
-        "Location": "/my-bucket"
+        "Location": "/amzn-s3-demo-bucket"
     }
 
 For more information, see `Controlling ownership of objects and disabling ACLs <https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html>`__ in the *Amazon S3 User Guide*.
 
 **Example 3: To create a bucket outside of the ``us-east-1`` region**
 
-The following ``create-bucket`` example creates a bucket named ``my-bucket`` in the
+The following ``create-bucket`` example creates a bucket named ``amzn-s3-demo-bucket`` in the
 ``eu-west-1`` region. Regions outside of ``us-east-1`` require the appropriate
 ``LocationConstraint`` to be specified in order to create the bucket in the
 desired region. ::
 
     aws s3api create-bucket \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --region eu-west-1 \
         --create-bucket-configuration LocationConstraint=eu-west-1 
 
 Output::
 
     {
-        "Location": "http://my-bucket.s3.amazonaws.com/"
+        "Location": "http://amzn-s3-demo-bucket.s3.amazonaws.com/"
     }
 
 For more information, see `Creating a bucket <https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html>`__ in the *Amazon S3 User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/create-multipart-upload.rst 2.31.35-1/awscli/examples/s3api/create-multipart-upload.rst
--- 2.23.6-1/awscli/examples/s3api/create-multipart-upload.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/create-multipart-upload.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,13 @@
-The following command creates a multipart upload in the bucket ``my-bucket`` with the key ``multipart/01``::
+The following command creates a multipart upload in the bucket ``amzn-s3-demo-bucket`` with the key ``multipart/01``::
 
-  aws s3api create-multipart-upload --bucket my-bucket --key 'multipart/01'
+  aws s3api create-multipart-upload --bucket amzn-s3-demo-bucket --key 'multipart/01'
 
 Output::
 
   {
-      "Bucket": "my-bucket",
+      "Bucket": "amzn-s3-demo-bucket",
       "UploadId": "dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R",
       "Key": "multipart/01"
   }
 
-The completed file will be named ``01`` in a folder called ``multipart`` in the bucket ``my-bucket``. Save the upload ID, key and bucket name for use with the ``upload-part`` command.
\ No newline at end of file
+The completed file will be named ``01`` in a folder called ``multipart`` in the bucket ``amzn-s3-demo-bucket``. Save the upload ID, key and bucket name for use with the ``upload-part`` command.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-analytics-configuration.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-analytics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-analytics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-analytics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-bucket-analytics-configuration`` example removes the analytics configuration for the specified bucket and ID. ::
 
     aws s3api delete-bucket-analytics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-cors.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-cors.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-cors.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-cors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a Cross-Origin Resource Sharing configuration from a bucket named ``my-bucket``::
+The following command deletes a Cross-Origin Resource Sharing configuration from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-cors --bucket my-bucket
+  aws s3api delete-bucket-cors --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-encryption.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-encryption.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-encryption.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-encryption.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,6 +3,6 @@
 The following ``delete-bucket-encryption`` example deletes the server-side encryption configuration of the specified bucket. ::
 
     aws s3api delete-bucket-encryption \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-inventory-configuration.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-inventory-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-inventory-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-inventory-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-bucket-inventory-configuration`` example deletes the inventory configuration with ID ``1`` for the specified bucket. ::
 
     aws s3api delete-bucket-inventory-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-lifecycle.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-lifecycle.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-lifecycle.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-lifecycle.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a lifecycle configuration from a bucket named ``my-bucket``::
+The following command deletes a lifecycle configuration from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-lifecycle --bucket my-bucket
+  aws s3api delete-bucket-lifecycle --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-bucket-metrics-configuration`` example removes the metrics configuration for the specified bucket and ID. ::
 
     aws s3api delete-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-policy.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-policy.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-policy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-policy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a bucket policy from a bucket named ``my-bucket``::
+The following command deletes a bucket policy from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-policy --bucket my-bucket
+  aws s3api delete-bucket-policy --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-replication.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-replication.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-replication.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-replication.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a replication configuration from a bucket named ``my-bucket``::
+The following command deletes a replication configuration from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-replication --bucket my-bucket
+  aws s3api delete-bucket-replication --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-tagging.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a tagging configuration from a bucket named ``my-bucket``::
+The following command deletes a tagging configuration from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-tagging --bucket my-bucket
+  aws s3api delete-bucket-tagging --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket-website.rst 2.31.35-1/awscli/examples/s3api/delete-bucket-website.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket-website.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket-website.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a website configuration from a bucket named ``my-bucket``::
+The following command deletes a website configuration from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket-website --bucket my-bucket
+  aws s3api delete-bucket-website --bucket amzn-s3-demo-bucket
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-bucket.rst 2.31.35-1/awscli/examples/s3api/delete-bucket.rst
--- 2.23.6-1/awscli/examples/s3api/delete-bucket.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-bucket.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-The following command deletes a bucket named ``my-bucket``::
+The following command deletes a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-bucket --bucket my-bucket --region us-east-1
+  aws s3api delete-bucket --bucket amzn-s3-demo-bucket --region us-east-1
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-object-tagging.rst 2.31.35-1/awscli/examples/s3api/delete-object-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/delete-object-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-object-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``delete-object-tagging`` example deletes the tag with the specified key from the object ``doc1.rtf``. ::
 
     aws s3api delete-object-tagging \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-object.rst 2.31.35-1/awscli/examples/s3api/delete-object.rst
--- 2.23.6-1/awscli/examples/s3api/delete-object.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-object.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command deletes an object named ``test.txt`` from a bucket named ``my-bucket``::
+The following command deletes an object named ``test.txt`` from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-object --bucket my-bucket --key test.txt
+  aws s3api delete-object --bucket amzn-s3-demo-bucket --key test.txt
 
 If bucket versioning is enabled, the output will contain the version ID of the delete marker::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-objects.rst 2.31.35-1/awscli/examples/s3api/delete-objects.rst
--- 2.23.6-1/awscli/examples/s3api/delete-objects.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-objects.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command deletes an object from a bucket named ``my-bucket``::
+The following command deletes an object from a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api delete-objects --bucket my-bucket --delete file://delete.json
+  aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete file://delete.json
 
 ``delete.json`` is a JSON document in the current directory that specifies the object to delete::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/delete-public-access-block.rst 2.31.35-1/awscli/examples/s3api/delete-public-access-block.rst
--- 2.23.6-1/awscli/examples/s3api/delete-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/delete-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,6 +3,6 @@
 The following ``delete-public-access-block`` example removes the block public access configuration on the specified bucket. ::
 
     aws s3api delete-public-access-block \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-accelerate-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-accelerate-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-accelerate-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-accelerate-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-accelerate-configuration`` example retrieves the accelerate configuration for the specified bucket. ::
 
     aws s3api get-bucket-accelerate-configuration \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-acl.rst 2.31.35-1/awscli/examples/s3api/get-bucket-acl.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-acl.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the access control list for a bucket named ``my-bucket``::
+The following command retrieves the access control list for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-acl --bucket my-bucket
+  aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-analytics-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-analytics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-analytics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-analytics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-analytics-configuration`` example displays the analytics configuration for the specified bucket and ID. ::
 
     aws s3api get-bucket-analytics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-cors.rst 2.31.35-1/awscli/examples/s3api/get-bucket-cors.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-cors.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-cors.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the Cross-Origin Resource Sharing configuration for a bucket named ``my-bucket``::
+The following command retrieves the Cross-Origin Resource Sharing configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-cors --bucket my-bucket
+  aws s3api get-bucket-cors --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-encryption.rst 2.31.35-1/awscli/examples/s3api/get-bucket-encryption.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-encryption.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-encryption.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,9 @@
 **To retrieve the server-side encryption configuration for a bucket**
 
-The following ``get-bucket-encryption`` example retrieves the server-side encryption configuration for the bucket ``my-bucket``. ::
+The following ``get-bucket-encryption`` example retrieves the server-side encryption configuration for the bucket ``amzn-s3-demo-bucket``. ::
 
     aws s3api get-bucket-encryption \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-inventory-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-inventory-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-inventory-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-inventory-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-inventory-configuration`` example retrieves the inventory configuration for the specified bucket with ID ``1``. ::
 
     aws s3api get-bucket-inventory-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1
 
 Output::
@@ -14,7 +14,7 @@ Output::
             "Destination": {
                 "S3BucketDestination": {
                     "Format": "ORC",
-                    "Bucket": "arn:aws:s3:::my-bucket",
+                    "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket",
                     "AccountId": "123456789012"
                 }
             },
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-lifecycle-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-lifecycle-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-lifecycle-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-lifecycle-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the lifecycle configuration for a bucket named ``my-bucket``::
+The following command retrieves the lifecycle configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-lifecycle-configuration --bucket my-bucket
+  aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-lifecycle.rst 2.31.35-1/awscli/examples/s3api/get-bucket-lifecycle.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-lifecycle.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-lifecycle.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the lifecycle configuration for a bucket named ``my-bucket``::
+The following command retrieves the lifecycle configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-lifecycle --bucket my-bucket
+  aws s3api get-bucket-lifecycle --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-location.rst 2.31.35-1/awscli/examples/s3api/get-bucket-location.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-location.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-location.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the location constraint for a bucket named ``my-bucket``, if a constraint exists::
+The following command retrieves the location constraint for a bucket named ``amzn-s3-demo-bucket``, if a constraint exists::
 
-  aws s3api get-bucket-location --bucket my-bucket
+  aws s3api get-bucket-location --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-logging.rst 2.31.35-1/awscli/examples/s3api/get-bucket-logging.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-logging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-logging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,13 +3,13 @@
 The following ``get-bucket-logging`` example retrieves the logging status for the specified bucket. ::
 
     aws s3api get-bucket-logging \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
     {
         "LoggingEnabled": {
             "TargetPrefix": "",
-            "TargetBucket": "my-bucket-logs"
+            "TargetBucket": "amzn-s3-demo-bucket-logs"
               }
     }
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-metrics-configuration`` example displays the metrics configuration for the specified bucket and ID. ::
 
     aws s3api get-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-notification-configuration.rst 2.31.35-1/awscli/examples/s3api/get-bucket-notification-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-notification-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-notification-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the notification configuration for a bucket named ``my-bucket``::
+The following command retrieves the notification configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-notification-configuration --bucket my-bucket
+  aws s3api get-bucket-notification-configuration --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-notification.rst 2.31.35-1/awscli/examples/s3api/get-bucket-notification.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-notification.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-notification.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the notification configuration for a bucket named ``my-bucket``::
+The following command retrieves the notification configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-notification --bucket my-bucket
+  aws s3api get-bucket-notification --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-policy-status.rst 2.31.35-1/awscli/examples/s3api/get-bucket-policy-status.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-policy-status.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-policy-status.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,9 @@
 **To retrieve the policy status for a bucket indicating whether the bucket is public**
 
-The following ``get-bucket-policy-status`` example retrieves the policy status for the bucket ``my-bucket``. ::
+The following ``get-bucket-policy-status`` example retrieves the policy status for the bucket ``amzn-s3-demo-bucket``. ::
 
     aws s3api get-bucket-policy-status \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-policy.rst 2.31.35-1/awscli/examples/s3api/get-bucket-policy.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-policy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-policy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,11 @@
-The following command retrieves the bucket policy for a bucket named ``my-bucket``::
+The following command retrieves the bucket policy for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-policy --bucket my-bucket
+  aws s3api get-bucket-policy --bucket amzn-s3-demo-bucket
 
 Output::
 
   {
-      "Policy": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::my-bucket/*\"},{\"Sid\":\"\",\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::my-bucket/secret/*\"}]}"
+      "Policy": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::amzn-s3-demo-bucket/*\"},{\"Sid\":\"\",\"Effect\":\"Deny\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::amzn-s3-demo-bucket/secret/*\"}]}"
   }
 
 Get and put a bucket policy
@@ -16,9 +16,9 @@ make modifications to the file, and then
 apply the modified bucket policy.  To download the bucket policy to a file,
 you can run::
 
-  aws s3api get-bucket-policy --bucket mybucket --query Policy --output text > policy.json
+  aws s3api get-bucket-policy --bucket amzn-s3-demo-bucket --query Policy --output text > policy.json
 
 You can then modify the ``policy.json`` file as needed.  Finally you can apply
 this modified policy back to the S3 bucket by running::
 
-  aws s3api put-bucket-policy --bucket mybucket --policy file://policy.json
+  aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-replication.rst 2.31.35-1/awscli/examples/s3api/get-bucket-replication.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-replication.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-replication.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the replication configuration for a bucket named ``my-bucket``::
+The following command retrieves the replication configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-replication --bucket my-bucket
+  aws s3api get-bucket-replication --bucket amzn-s3-demo-bucket
 
 Output::
 
@@ -11,7 +11,7 @@ Output::
                   "Status": "Enabled",
                   "Prefix": "",
                   "Destination": {
-                      "Bucket": "arn:aws:s3:::my-bucket-backup",
+                      "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket-backup",
                       "StorageClass": "STANDARD"
                   },
                   "ID": "ZmUwNzE4ZmQ4tMjVhOS00MTlkLOGI4NDkzZTIWJjNTUtYTA1"
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-request-payment.rst 2.31.35-1/awscli/examples/s3api/get-bucket-request-payment.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-request-payment.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-request-payment.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-bucket-request-payment`` example retrieves the requester pays configuration for the specified bucket. ::
 
     aws s3api get-bucket-request-payment \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-tagging.rst 2.31.35-1/awscli/examples/s3api/get-bucket-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the tagging configuration for a bucket named ``my-bucket``::
+The following command retrieves the tagging configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-tagging --bucket my-bucket
+  aws s3api get-bucket-tagging --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-versioning.rst 2.31.35-1/awscli/examples/s3api/get-bucket-versioning.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-versioning.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-versioning.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the versioning configuration for a bucket named ``my-bucket``::
+The following command retrieves the versioning configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-versioning --bucket my-bucket
+  aws s3api get-bucket-versioning --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-bucket-website.rst 2.31.35-1/awscli/examples/s3api/get-bucket-website.rst
--- 2.23.6-1/awscli/examples/s3api/get-bucket-website.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-bucket-website.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the static website configuration for a bucket named ``my-bucket``::
+The following command retrieves the static website configuration for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-bucket-website --bucket my-bucket
+  aws s3api get-bucket-website --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-acl.rst 2.31.35-1/awscli/examples/s3api/get-object-acl.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-acl.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-acl.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves the access control list for an object in a bucket named ``my-bucket``::
+The following command retrieves the access control list for an object in a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-object-acl --bucket my-bucket --key index.html
+  aws s3api get-object-acl --bucket amzn-s3-demo-bucket --key index.html
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-attributes.rst 2.31.35-1/awscli/examples/s3api/get-object-attributes.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-attributes.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-attributes.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-attributes`` example retrieves metadata from the object ``doc1.rtf``. ::
 
     aws s3api get-object-attributes \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf \
         --object-attributes "StorageClass" "ETag" "ObjectSize"
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-legal-hold.rst 2.31.35-1/awscli/examples/s3api/get-object-legal-hold.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-legal-hold.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-legal-hold.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-legal-hold`` example retrieves the Legal Hold status for the specified object. ::
 
     aws s3api get-object-legal-hold \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-lock-configuration.rst 2.31.35-1/awscli/examples/s3api/get-object-lock-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-lock-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-lock-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-lock-configuration`` example retrieves the object lock configuration for the specified bucket. ::
 
     aws s3api get-object-lock-configuration \
-        --bucket my-bucket-with-object-lock
+        --bucket amzn-s3-demo-bucket-with-object-lock
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-retention.rst 2.31.35-1/awscli/examples/s3api/get-object-retention.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-retention.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-retention.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-retention`` example retrieves the object retention configuration for the specified object. ::
 
     aws s3api get-object-retention \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-tagging.rst 2.31.35-1/awscli/examples/s3api/get-object-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-object-tagging`` example retrieves the values for the specified key from the specified object. ::
 
     aws s3api get-object-tagging \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf
 
 Output::
@@ -20,7 +20,7 @@ Output::
 The following ``get-object-tagging`` example tries to retrieve the tag sets of the object ``doc2.rtf``, which has no tags. ::
 
     aws s3api get-object-tagging \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc2.rtf
 
 Output::
@@ -33,7 +33,7 @@ Output::
 The following ``get-object-tagging`` example retrieves the tag sets of the object ``doc3.rtf``, which has multiple tags. ::
 
     aws s3api get-object-tagging \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc3.rtf
 
 Output::
diff -pruN 2.23.6-1/awscli/examples/s3api/get-object-torrent.rst 2.31.35-1/awscli/examples/s3api/get-object-torrent.rst
--- 2.23.6-1/awscli/examples/s3api/get-object-torrent.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-object-torrent.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
-The following command creates a torrent for an object in a bucket named ``my-bucket``::
+The following command creates a torrent for an object in a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api get-object-torrent --bucket my-bucket --key large-video-file.mp4 large-video-file.torrent
+  aws s3api get-object-torrent --bucket amzn-s3-demo-bucket --key large-video-file.mp4 large-video-file.torrent
 
 The torrent file is saved locally in the current folder. Note that the output filename (``large-video-file.torrent``) is specified without an option name and must be the last argument in the command.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/get-public-access-block.rst 2.31.35-1/awscli/examples/s3api/get-public-access-block.rst
--- 2.23.6-1/awscli/examples/s3api/get-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/get-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``get-public-access-block`` example displays the block public access configuration for the specified bucket. ::
 
     aws s3api get-public-access-block \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/head-bucket.rst 2.31.35-1/awscli/examples/s3api/head-bucket.rst
--- 2.23.6-1/awscli/examples/s3api/head-bucket.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/head-bucket.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command verifies access to a bucket named ``my-bucket``::
+The following command verifies access to a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api head-bucket --bucket my-bucket
+  aws s3api head-bucket --bucket amzn-s3-demo-bucket
 
 If the bucket exists and you have access to it, no output is returned. Otherwise, an error message will be shown. For example::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/head-object.rst 2.31.35-1/awscli/examples/s3api/head-object.rst
--- 2.23.6-1/awscli/examples/s3api/head-object.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/head-object.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves metadata for an object in a bucket named ``my-bucket``::
+The following command retrieves metadata for an object in a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api head-object --bucket my-bucket --key index.html
+  aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-bucket-analytics-configurations.rst 2.31.35-1/awscli/examples/s3api/list-bucket-analytics-configurations.rst
--- 2.23.6-1/awscli/examples/s3api/list-bucket-analytics-configurations.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-bucket-analytics-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-bucket-analytics-configurations`` retrieves a list of analytics configurations for the specified bucket. ::
 
     aws s3api list-bucket-analytics-configurations \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-bucket-inventory-configurations.rst 2.31.35-1/awscli/examples/s3api/list-bucket-inventory-configurations.rst
--- 2.23.6-1/awscli/examples/s3api/list-bucket-inventory-configurations.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-bucket-inventory-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-bucket-inventory-configurations`` example lists the inventory configurations for the specified bucket. ::
 
     aws s3api list-bucket-inventory-configurations \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
@@ -14,7 +14,7 @@ Output::
                 "Destination": {
                     "S3BucketDestination": {
                         "Format": "ORC",
-                        "Bucket": "arn:aws:s3:::my-bucket",
+                        "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket",
                         "AccountId": "123456789012"
                     }
                 },
@@ -29,7 +29,7 @@ Output::
                 "Destination": {
                     "S3BucketDestination": {
                         "Format": "CSV",
-                        "Bucket": "arn:aws:s3:::my-bucket",
+                        "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket",
                         "AccountId": "123456789012"
                     }
                 },
diff -pruN 2.23.6-1/awscli/examples/s3api/list-bucket-metrics-configurations.rst 2.31.35-1/awscli/examples/s3api/list-bucket-metrics-configurations.rst
--- 2.23.6-1/awscli/examples/s3api/list-bucket-metrics-configurations.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-bucket-metrics-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-bucket-metrics-configurations`` example retrieves a list of metrics configurations for the specified bucket. ::
 
     aws s3api list-bucket-metrics-configurations \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-multipart-uploads.rst 2.31.35-1/awscli/examples/s3api/list-multipart-uploads.rst
--- 2.23.6-1/awscli/examples/s3api/list-multipart-uploads.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-multipart-uploads.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command lists all of the active multipart uploads for a bucket named ``my-bucket``::
+The following command lists all of the active multipart uploads for a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api list-multipart-uploads --bucket my-bucket
+  aws s3api list-multipart-uploads --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-object-versions.rst 2.31.35-1/awscli/examples/s3api/list-object-versions.rst
--- 2.23.6-1/awscli/examples/s3api/list-object-versions.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-object-versions.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command retrieves version information for an object in a bucket named ``my-bucket``::
+The following command retrieves version information for an object in a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api list-object-versions --bucket my-bucket --prefix index.html
+  aws s3api list-object-versions --bucket amzn-s3-demo-bucket --prefix index.html
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-objects-v2.rst 2.31.35-1/awscli/examples/s3api/list-objects-v2.rst
--- 2.23.6-1/awscli/examples/s3api/list-objects-v2.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-objects-v2.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``list-objects-v2`` example lists the objects in the specified bucket. ::
 
     aws s3api list-objects-v2 \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/list-parts.rst 2.31.35-1/awscli/examples/s3api/list-parts.rst
--- 2.23.6-1/awscli/examples/s3api/list-parts.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/list-parts.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command lists all of the parts that have been uploaded for a multipart upload with key ``multipart/01`` in the bucket ``my-bucket``::
+The following command lists all of the parts that have been uploaded for a multipart upload with key ``multipart/01`` in the bucket ``amzn-s3-demo-bucket``::
 
-  aws s3api list-parts --bucket my-bucket --key 'multipart/01' --upload-id dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R
+  aws s3api list-parts --bucket amzn-s3-demo-bucket --key 'multipart/01' --upload-id dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R
 
 Output::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-accelerate-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-accelerate-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-accelerate-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-accelerate-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-accelerate-configuration`` example enables the accelerate configuration for the specified bucket. ::
 
     aws s3api put-bucket-accelerate-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --accelerate-configuration Status=Enabled
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-analytics-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-analytics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-analytics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-analytics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-analytics-configuration`` example configures analytics for the specified bucket. ::
 
     aws s3api put-bucket-analytics-configuration \
-        --bucket my-bucket --id 1 \
+        --bucket amzn-s3-demo-bucket --id 1 \
         --analytics-configuration '{"Id": "1","StorageClassAnalysis": {}}'
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-encryption.rst 2.31.35-1/awscli/examples/s3api/put-bucket-encryption.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-encryption.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-encryption.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-encryption`` example sets AES256 encryption as the default for the specified bucket. ::
 
     aws s3api put-bucket-encryption \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-inventory-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-inventory-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-inventory-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-inventory-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,21 +1,21 @@
 **Example 1: To set an inventory configuration for a bucket**
 
-The following ``put-bucket-inventory-configuration`` example sets a weekly ORC-formatted inventory report for the bucket ``my-bucket``. ::
+The following ``put-bucket-inventory-configuration`` example sets a weekly ORC-formatted inventory report for the bucket ``amzn-s3-demo-bucket``. ::
 
     aws s3api put-bucket-inventory-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 1 \
-        --inventory-configuration '{"Destination": { "S3BucketDestination": { "AccountId": "123456789012", "Bucket": "arn:aws:s3:::my-bucket", "Format": "ORC" }}, "IsEnabled": true, "Id": "1", "IncludedObjectVersions": "Current", "Schedule": { "Frequency": "Weekly" }}'
+        --inventory-configuration '{"Destination": { "S3BucketDestination": { "AccountId": "123456789012", "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket", "Format": "ORC" }}, "IsEnabled": true, "Id": "1", "IncludedObjectVersions": "Current", "Schedule": { "Frequency": "Weekly" }}'
 
 This command produces no output.
 
 **Example 2: To set an inventory configuration for a bucket**
 
-The following ``put-bucket-inventory-configuration`` example sets a daily CSV-formatted inventory report for the bucket ``my-bucket``. ::
+The following ``put-bucket-inventory-configuration`` example sets a daily CSV-formatted inventory report for the bucket ``amzn-s3-demo-bucket``. ::
 
     aws s3api put-bucket-inventory-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 2 \
-        --inventory-configuration '{"Destination": { "S3BucketDestination": { "AccountId": "123456789012", "Bucket": "arn:aws:s3:::my-bucket", "Format": "CSV" }}, "IsEnabled": true, "Id": "2", "IncludedObjectVersions": "Current", "Schedule": { "Frequency": "Daily" }}'
+        --inventory-configuration '{"Destination": { "S3BucketDestination": { "AccountId": "123456789012", "Bucket": "arn:aws:s3:::amzn-s3-demo-bucket", "Format": "CSV" }}, "IsEnabled": true, "Id": "2", "IncludedObjectVersions": "Current", "Schedule": { "Frequency": "Daily" }}'
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-lifecycle-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-lifecycle-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-lifecycle-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-lifecycle-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command applies a lifecycle configuration to a bucket named ``my-bucket``::
+The following command applies a lifecycle configuration to a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration  file://lifecycle.json
+  aws s3api put-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --lifecycle-configuration  file://lifecycle.json
 
 The file ``lifecycle.json`` is a JSON document in the current folder that specifies two rules::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-lifecycle.rst 2.31.35-1/awscli/examples/s3api/put-bucket-lifecycle.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-lifecycle.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-lifecycle.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command applies a lifecycle configuration to the bucket ``my-bucket``::
+The following command applies a lifecycle configuration to the bucket ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-lifecycle --bucket my-bucket --lifecycle-configuration file://lifecycle.json
+  aws s3api put-bucket-lifecycle --bucket amzn-s3-demo-bucket --lifecycle-configuration file://lifecycle.json
 
 The file ``lifecycle.json`` is a JSON document in the current folder that specifies two rules::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-metrics-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-metrics-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-metrics-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-metrics-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-metrics-configuration`` example sets a metric configuration with ID 123 for the specified bucket. ::
 
     aws s3api put-bucket-metrics-configuration \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --id 123 \
         --metrics-configuration '{"Id": "123", "Filter": {"Prefix": "logs"}}'
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-notification-configuration.rst 2.31.35-1/awscli/examples/s3api/put-bucket-notification-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-notification-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-notification-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,45 +1,45 @@
-**To enable the specified notifications to a bucket**
-
-The following ``put-bucket-notification-configuration`` example applies a notification configuration to a bucket named ``my-bucket``. The file ``notification.json`` is a JSON document in the current folder that specifies an SNS topic and an event type to monitor. ::
-
-    aws s3api put-bucket-notification-configuration \
-        --bucket my-bucket \
-        --notification-configuration file://notification.json
-
-Contents of ``notification.json``::
-
-    {
-        "TopicConfigurations": [
-            {
-                "TopicArn": "arn:aws:sns:us-west-2:123456789012:s3-notification-topic",
-                "Events": [
-                    "s3:ObjectCreated:*"
-                ]
-            }
-        ]
-    }
-
-The SNS topic must have an IAM policy attached to it that allows Amazon S3 to publish to it. ::
-
-    {
-        "Version": "2008-10-17",
-        "Id": "example-ID",
-        "Statement": [
-            {
-                "Sid": "example-statement-ID",
-                "Effect": "Allow",
-                "Principal": {
-                    "Service": "s3.amazonaws.com"
-                },
-                "Action": [
-                    "SNS:Publish"
-                ],
-                "Resource": "arn:aws:sns:us-west-2:123456789012::s3-notification-topic",
-                "Condition": {
-                    "ArnLike": {
-                        "aws:SourceArn": "arn:aws:s3:*:*:my-bucket"
-                    }
-                }
-            }
-        ]
+**To enable the specified notifications to a bucket**
+
+The following ``put-bucket-notification-configuration`` example applies a notification configuration to a bucket named ``amzn-s3-demo-bucket``. The file ``notification.json`` is a JSON document in the current folder that specifies an SNS topic and an event type to monitor. ::
+
+    aws s3api put-bucket-notification-configuration \
+        --bucket amzn-s3-demo-bucket \
+        --notification-configuration file://notification.json
+
+Contents of ``notification.json``::
+
+    {
+        "TopicConfigurations": [
+            {
+                "TopicArn": "arn:aws:sns:us-west-2:123456789012:s3-notification-topic",
+                "Events": [
+                    "s3:ObjectCreated:*"
+                ]
+            }
+        ]
+    }
+
+The SNS topic must have an IAM policy attached to it that allows Amazon S3 to publish to it. ::
+
+    {
+        "Version": "2008-10-17",
+        "Id": "example-ID",
+        "Statement": [
+            {
+                "Sid": "example-statement-ID",
+                "Effect": "Allow",
+                "Principal": {
+                    "Service": "s3.amazonaws.com"
+                },
+                "Action": [
+                    "SNS:Publish"
+                ],
+                "Resource": "arn:aws:sns:us-west-2:123456789012::s3-notification-topic",
+                "Condition": {
+                    "ArnLike": {
+                        "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket"
+                    }
+                }
+            }
+        ]
     }
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-notification.rst 2.31.35-1/awscli/examples/s3api/put-bucket-notification.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-notification.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-notification.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The applies a notification configuration to a bucket named ``my-bucket``::
+The applies a notification configuration to a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-notification --bucket my-bucket --notification-configuration file://notification.json
+  aws s3api put-bucket-notification --bucket amzn-s3-demo-bucket --notification-configuration file://notification.json
 
 The file ``notification.json`` is a JSON document in the current folder that specifies an SNS topic and an event type to monitor::
 
@@ -26,10 +26,10 @@ The SNS topic must have an IAM policy at
      "Action": [
       "SNS:Publish"
      ],
-     "Resource": "arn:aws:sns:us-west-2:123456789012:my-bucket",
+     "Resource": "arn:aws:sns:us-west-2:123456789012:amzn-s3-demo-bucket",
      "Condition": {
         "ArnLike": {          
-        "aws:SourceArn": "arn:aws:s3:*:*:my-bucket"    
+        "aws:SourceArn": "arn:aws:s3:*:*:amzn-s3-demo-bucket"    
       }
      }
     }
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-request-payment.rst 2.31.35-1/awscli/examples/s3api/put-bucket-request-payment.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-request-payment.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-request-payment.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-bucket-request-payment`` example enables ``requester pays`` for the specified bucket. ::
 
     aws s3api put-bucket-request-payment \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --request-payment-configuration '{"Payer":"Requester"}'
 
 This command produces no output.
@@ -13,7 +13,7 @@ This command produces no output.
 The following ``put-bucket-request-payment`` example disables ``requester pays`` for the specified bucket. ::
 
     aws s3api put-bucket-request-payment \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --request-payment-configuration '{"Payer":"BucketOwner"}'
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-tagging.rst 2.31.35-1/awscli/examples/s3api/put-bucket-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The following command applies a tagging configuration to a bucket named ``my-bucket``::
+The following command applies a tagging configuration to a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-tagging --bucket my-bucket --tagging file://tagging.json
+  aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging file://tagging.json
 
 The file ``tagging.json`` is a JSON document in the current folder that specifies tags::
 
@@ -13,6 +13,6 @@ The file ``tagging.json`` is a JSON docu
      ]
   }
 
-Or apply a tagging configuration to ``my-bucket`` directly from the command line::
+Or apply a tagging configuration to ``amzn-s3-demo-bucket`` directly from the command line::
 
-  aws s3api put-bucket-tagging --bucket my-bucket --tagging 'TagSet=[{Key=organization,Value=marketing}]'
+  aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging 'TagSet=[{Key=organization,Value=marketing}]'
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-versioning.rst 2.31.35-1/awscli/examples/s3api/put-bucket-versioning.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-versioning.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-versioning.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,7 @@
-The following command enables versioning on a bucket named ``my-bucket``::
+The following command enables versioning on a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled
+  aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled
 
 The following command enables versioning, and uses an mfa code ::
 
-  aws s3api put-bucket-versioning --bucket my-bucket --versioning-configuration Status=Enabled --mfa "SERIAL 123456"
+  aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled --mfa "SERIAL 123456"
diff -pruN 2.23.6-1/awscli/examples/s3api/put-bucket-website.rst 2.31.35-1/awscli/examples/s3api/put-bucket-website.rst
--- 2.23.6-1/awscli/examples/s3api/put-bucket-website.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-bucket-website.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
-The applies a static website configuration to a bucket named ``my-bucket``::
+The applies a static website configuration to a bucket named ``amzn-s3-demo-bucket``::
 
-  aws s3api put-bucket-website --bucket my-bucket --website-configuration file://website.json
+  aws s3api put-bucket-website --bucket amzn-s3-demo-bucket --website-configuration file://website.json
 
 The file ``website.json`` is a JSON document in the current folder that specifies index and error pages for the website::
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-object-legal-hold.rst 2.31.35-1/awscli/examples/s3api/put-object-legal-hold.rst
--- 2.23.6-1/awscli/examples/s3api/put-object-legal-hold.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-object-legal-hold.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-object-legal-hold`` example sets a Legal Hold on the object ``doc1.rtf``. ::
 
     aws s3api put-object-legal-hold \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf \
         --legal-hold Status=ON
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-object-lock-configuration.rst 2.31.35-1/awscli/examples/s3api/put-object-lock-configuration.rst
--- 2.23.6-1/awscli/examples/s3api/put-object-lock-configuration.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-object-lock-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-object-lock-configuration`` example sets a 50-day object lock on the specified bucket. ::
 
     aws s3api put-object-lock-configuration \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 50 }}}'
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/put-object-retention.rst 2.31.35-1/awscli/examples/s3api/put-object-retention.rst
--- 2.23.6-1/awscli/examples/s3api/put-object-retention.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-object-retention.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-object-retention`` example sets an object retention configuration for the specified object until 2025-01-01. ::
 
     aws s3api put-object-retention \
-        --bucket my-bucket-with-object-lock \
+        --bucket amzn-s3-demo-bucket-with-object-lock \
         --key doc1.rtf \
         --retention '{ "Mode": "GOVERNANCE", "RetainUntilDate": "2025-01-01T00:00:00" }'
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-object-tagging.rst 2.31.35-1/awscli/examples/s3api/put-object-tagging.rst
--- 2.23.6-1/awscli/examples/s3api/put-object-tagging.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-object-tagging.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-object-tagging`` example sets a tag with the key ``designation`` and the value ``confidential`` on the specified object. ::
 
     aws s3api put-object-tagging \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf \
         --tagging '{"TagSet": [{ "Key": "designation", "Value": "confidential" }]}'
 
@@ -12,7 +12,7 @@ This command produces no output.
 The following ``put-object-tagging`` example sets multiple tags sets on the specified object. ::
 
     aws s3api put-object-tagging \
-        --bucket my-bucket-example \
+        --bucket amzn-s3-demo-bucket-example \
         --key doc3.rtf \
         --tagging '{"TagSet": [{ "Key": "designation", "Value": "confidential" }, { "Key": "department", "Value": "finance" }, { "Key": "team", "Value": "payroll" } ]}'
 
diff -pruN 2.23.6-1/awscli/examples/s3api/put-public-access-block.rst 2.31.35-1/awscli/examples/s3api/put-public-access-block.rst
--- 2.23.6-1/awscli/examples/s3api/put-public-access-block.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/put-public-access-block.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``put-public-access-block`` example sets a restrictive block public access configuration for the specified bucket. ::
 
     aws s3api put-public-access-block \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/select-object-content.rst 2.31.35-1/awscli/examples/s3api/select-object-content.rst
--- 2.23.6-1/awscli/examples/s3api/select-object-content.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/select-object-content.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``select-object-content`` example filters the object ``my-data-file.csv`` with the specified SQL statement and sends output to a file. ::
 
     aws s3api select-object-content \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key my-data-file.csv \
         --expression "select * from s3object limit 100" \
         --expression-type 'SQL' \
diff -pruN 2.23.6-1/awscli/examples/s3api/upload-part-copy.rst 2.31.35-1/awscli/examples/s3api/upload-part-copy.rst
--- 2.23.6-1/awscli/examples/s3api/upload-part-copy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/upload-part-copy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,9 +3,9 @@
 The following ``upload-part-copy`` example uploads a part by copying data from an existing object as a data source. ::
 
     aws s3api upload-part-copy \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key "Map_Data_June.mp4" \
-        --copy-source "my-bucket/copy_of_Map_Data_June.mp4" \
+        --copy-source "amzn-s3-demo-bucket/copy_of_Map_Data_June.mp4" \
         --part-number 1 \
         --upload-id "bq0tdE1CDpWQYRPLHuNG50xAT6pA5D.m_RiBy0ggOH6b13pVRY7QjvLlf75iFdJqp_2wztk5hvpUM2SesXgrzbehG5hViyktrfANpAD0NO.Nk3XREBqvGeZF6U3ipiSm"
 
diff -pruN 2.23.6-1/awscli/examples/s3api/upload-part.rst 2.31.35-1/awscli/examples/s3api/upload-part.rst
--- 2.23.6-1/awscli/examples/s3api/upload-part.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/upload-part.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
 The following command uploads the first part in a multipart upload initiated with the ``create-multipart-upload`` command::
 
-  aws s3api upload-part --bucket my-bucket --key 'multipart/01' --part-number 1 --body part01 --upload-id  "dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R"
+  aws s3api upload-part --bucket amzn-s3-demo-bucket --key 'multipart/01' --part-number 1 --body part01 --upload-id  "dfRtDYU0WWCCcH43C3WFbkRONycyCpTJJvxu2i5GYkZljF.Yxwh6XG7WfS2vC4to6HiV6Yjlx.cph0gtNBtJ8P3URCSbB7rjxI5iEwVDmgaXZOGgkk5nVTW16HOQ5l0R"
 
 The ``body`` option takes the name or path of a local file for upload (do not use the file:// prefix). The minimum part size is 5 MB. Upload ID is returned by ``create-multipart-upload`` and can also be retrieved with ``list-multipart-uploads``. Bucket and key are specified when you create the multipart upload.
 
diff -pruN 2.23.6-1/awscli/examples/s3api/wait/bucket-exists.rst 2.31.35-1/awscli/examples/s3api/wait/bucket-exists.rst
--- 2.23.6-1/awscli/examples/s3api/wait/bucket-exists.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/wait/bucket-exists.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,6 +3,6 @@
 The following ``wait bucket-exists`` example pauses and continues only after it can confirm that the specified bucket exists. ::
 
     aws s3api wait bucket-exists \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/wait/bucket-not-exists.rst 2.31.35-1/awscli/examples/s3api/wait/bucket-not-exists.rst
--- 2.23.6-1/awscli/examples/s3api/wait/bucket-not-exists.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/wait/bucket-not-exists.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,6 +3,6 @@
 The following ``wait bucket-not-exists`` example pauses and continues only after it can confirm that the specified bucket doesn't exist. ::
 
     aws s3api wait bucket-not-exists \
-        --bucket my-bucket
+        --bucket amzn-s3-demo-bucket
 
 This command produces no output.
diff -pruN 2.23.6-1/awscli/examples/s3api/wait/object-exists.rst 2.31.35-1/awscli/examples/s3api/wait/object-exists.rst
--- 2.23.6-1/awscli/examples/s3api/wait/object-exists.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/wait/object-exists.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``wait object-not-exists`` example pauses and continues only after it can confirm that the specified object (``--key``) in the specified bucket exists. ::
 
     aws s3api wait object-exists \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/s3api/wait/object-not-exists.rst 2.31.35-1/awscli/examples/s3api/wait/object-not-exists.rst
--- 2.23.6-1/awscli/examples/s3api/wait/object-not-exists.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/s3api/wait/object-not-exists.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,7 @@
 The following ``wait object-not-exists`` example pauses and continues only after it can confirm that the specified object (``--key``) in the specified bucket doesn't exist. ::
 
     aws s3api wait object-not-exists \
-        --bucket my-bucket \
+        --bucket amzn-s3-demo-bucket \
         --key doc1.rtf
 
 This command produces no output.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/securityhub/describe-hub.rst 2.31.35-1/awscli/examples/securityhub/describe-hub.rst
--- 2.23.6-1/awscli/examples/securityhub/describe-hub.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/securityhub/describe-hub.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,15 +1,17 @@
 **To get information about a hub resource**
 
-The following ``describe-hub`` example returns the subscription date for the specified hub resource. The hub resource is identified by its ARN. ::
+The following ``describe-hub`` example returns the subscription date and other configuration settings for the specified hub resource. The hub resource is identified by its ARN. ::
 
-    aws securityhub describe-hub \
+    aws securityhub describe-hub \
         --hub-arn "arn:aws:securityhub:us-west-1:123456789012:hub/default"
 
 Output::
 
     {
         "HubArn": "arn:aws:securityhub:us-west-1:123456789012:hub/default",
-        "SubscribedAt": "2019-11-19T23:15:10.046Z"
+        "SubscribedAt": "2019-11-19T23:15:10.046Z",
+        "AutoEnableControls": true,
+        "ControlFindingGenerator": "SECURITY_CONTROL"
     }
 
-For more information, see `AWS::SecurityHub::Hub <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-securityhub-hub.html>`__ in the *AWS CloudFormation User Guide*.
+For more information, see `AWS::SecurityHub::Hub <https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-securityhub-hub.html>`__ in the *AWS CloudFormation User Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/create-http-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/create-http-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/create-http-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/create-http-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To create an HTTP namespace**
+
+The following ``create-http-namespace`` example creates an HTTP namespace ``example.com``. ::
+
+    aws servicediscovery create-http-namespace \
+        --name example.com \
+        --creator-request-id example-request-id
+
+Output::
+
+    {
+        "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__ .
+
+For more information about creating a namespace, see `Creating an AWS Cloud Map namespace to group application services <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/create-public-dns-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/create-public-dns-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/create-public-dns-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/create-public-dns-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,18 @@
+**To create an public DNS namespace**
+
+The following ``create-public-dns-namespace`` example creates an public DNS namespace ``example.com``. ::
+
+    aws servicediscovery create-public-dns-namespace \
+        --name example-public-dns.com \
+        --creator-request-id example-public-request-id \
+        --properties DnsProperties={SOA={TTL=60}}
+
+Output::
+
+    {
+        "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``.
+
+For more information about creating a namespace, see `Creating an AWS Cloud Map namespace to group application services <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/create-service.rst 2.31.35-1/awscli/examples/servicediscovery/create-service.rst
--- 2.23.6-1/awscli/examples/servicediscovery/create-service.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/create-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,22 +1,23 @@
-**To create a service**
+**Example 1: To create a service using namespace ID**
 
 The following ``create-service`` example creates a service. ::
 
     aws servicediscovery create-service \
         --name myservice \
         --namespace-id  ns-ylexjili4cdxy3xm \
-        --dns-config "NamespaceId=ns-ylexjili4cdxy3xm,RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"
+        --dns-config "RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"
 
 Output::
 
     {
-            "Service": {
-            "Id": "srv-p5zdwlg5uvvzjita",
-            "Arn": "arn:aws:servicediscovery:us-west-2:803642222207:service/srv-p5zdwlg5uvvzjita",
+        "Service": {
+            "Id": "srv-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
             "Name": "myservice",
-            "NamespaceId": "ns-ylexjili4cdxy3xm",
+            "NamespaceId": "ns-abcd1234xmpl5678",
             "DnsConfig": {
-                "NamespaceId": "ns-ylexjili4cdxy3xm",
+                "NamespaceId": "ns-abcd1234xmpl5678",
                 "RoutingPolicy": "MULTIVALUE",
                 "DnsRecords": [
                     {
@@ -25,10 +26,49 @@ Output::
                     }
                 ]
             },
-            "CreateDate": 1587081768.334,
-            "CreatorRequestId": "567c1193-6b00-4308-bd57-ad38a8822d25"
+            "Type": "DNS_HTTP",
+            "CreateDate": "2025-08-18T13:45:31.023000-05:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678",
+            "CreatedByAccount": "123456789012"
         }
     }
 
-For more information, see `Creating services <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information, see `Creating an AWS Cloud Map service for an application component <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To create a service using namespace ARN**
+
+The following ``create-service`` example creates a service using a namespace ARN instead of namespace ID. Specifying a namespace ARN is necessary when creating a service in a shared namespace. ::
+
+    aws servicediscovery create-service \
+        --name myservice-arn \
+        --namespace-id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678 \
+        --dns-config "RoutingPolicy=MULTIVALUE,DnsRecords=[{Type=A,TTL=60}]"
+
+Output::
+
+    {
+        "Service": {
+            "Id": "srv-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Name": "myservice-arn",
+            "NamespaceId": "ns-abcd1234xmpl5678",
+            "DnsConfig": {
+                "NamespaceId": "ns-abcd1234xmpl5678",
+                "RoutingPolicy": "MULTIVALUE",
+                "DnsRecords": [
+                    {
+                        "Type": "A",
+                        "TTL": 60
+                    }
+                ]
+            },
+            "Type": "DNS_HTTP",
+            "CreateDate": "2025-08-18T13:45:31.023000-05:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678",
+            "CreatedByAccount": "123456789012"
+        }
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
 
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/delete-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/delete-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/delete-namespace.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/delete-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,17 +1,31 @@
-**To delete a namespace**
+**Example 1: To delete a namespace**
 
 The following ``delete-namespace`` example deletes a namespace. ::
 
     aws servicediscovery delete-namespace \
-        --id ns-ylexjili4cdxy3xm
+        --id ns-abcd1234xmpl5678
 
 Output::
 
     {
-        "OperationId": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k98y6drk"
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
     }
 
 To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__ .
 
-For more information, see `Deleting namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information, see `Deleting an AWS Cloud Map namespace <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
 
+**Example 2: To delete a namespace using namespace ARN**
+
+The following ``delete-namespace`` example deletes a namespace using its ARN. ::
+
+    aws servicediscovery delete-namespace \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+For more information, see `Deleting an AWS Cloud Map namespace <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/delete-service-attributes.rst 2.31.35-1/awscli/examples/servicediscovery/delete-service-attributes.rst
--- 2.23.6-1/awscli/examples/servicediscovery/delete-service-attributes.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/delete-service-attributes.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,23 @@
+**Example 1: To delete a service attribute**
+
+The following ``delete-service-attributes`` example deletes a service attribute with the key ``Port`` that is associated with the specified service. ::
+
+    aws servicediscovery delete-service-attributes \
+        --service-id srv-abcd1234xmpl5678 \
+        --attributes Port
+
+This command produces no output.
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To delete a service attribute using ARN**
+
+The following ``delete-service-attributes`` example deletes a service attribute using the service ARN. Specifying the ARN is necessary for deleting attributes associated with services created in namespaces shared with your account. ::
+
+    aws servicediscovery delete-service-attributes \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678 \
+        --attributes Port
+
+This command produces no output.
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/delete-service.rst 2.31.35-1/awscli/examples/servicediscovery/delete-service.rst
--- 2.23.6-1/awscli/examples/servicediscovery/delete-service.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/delete-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,21 @@
-**To delete a service**
+**Example 1: To delete a service**
 
 The following ``delete-service`` example deletes a service. ::
 
     aws servicediscovery delete-service \
-        --id srv-p5zdwlg5uvvzjita
+        --id srv-abcd1234xmpl5678
 
 This command produces no output.
 
-For more information, see `Deleting services <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information, see `Deleting an AWS Cloud Map service <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-services.html>`__ in the *AWS Cloud Map Developer Guide*.
 
+**Example 2: To delete a service using ARN**
+
+The following ``delete-service`` example deletes a service using its ARN. ::
+
+    aws servicediscovery delete-service \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678
+
+This command produces no output.
+
+For more information, see `Deleting an AWS Cloud Map service <https://docs.aws.amazon.com/cloud-map/latest/dg/deleting-services.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/deregister-instance.rst 2.31.35-1/awscli/examples/servicediscovery/deregister-instance.rst
--- 2.23.6-1/awscli/examples/servicediscovery/deregister-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/deregister-instance.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To deregister a service instance**
+**Example 1: To deregister a service instance**
 
 The following ``deregister-instance`` example deregisters a service instance. ::
 
@@ -12,7 +12,23 @@ Output::
         "OperationId": "4yejorelbukcjzpnr6tlmrghsjwpngf4-k98rnaiq"
     }
 
-To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__ .
+To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__.
 
 For more information, see `Deregistering service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/deregistering-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
 
+**Example 2: To deregister a service instance using service ARN for shared namespaces**
+
+The following ``deregister-instance`` example deregisters a service instance using a service ARN instead of service ID. Specifying an ARN is required when deregistering instances from services created in namespaces that are shared with your account. ::
+
+    aws servicediscovery deregister-instance \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita \
+        --instance-id web-server-01
+
+Output::
+
+    {
+        "OperationId": "gv4g5meo7ndmkqjrhpn39wk42xmpl"
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ and `Deregistering an AWS Cloud Map service instance <https://docs.aws.amazon.com/cloud-map/latest/dg/deregistering-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/discover-instances-revision.rst 2.31.35-1/awscli/examples/servicediscovery/discover-instances-revision.rst
--- 2.23.6-1/awscli/examples/servicediscovery/discover-instances-revision.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/discover-instances-revision.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**Example 1: To discover the revision of an instance**
+
+The following ``discover-instances-revision`` example discovers the increasing revision of an instance. ::
+
+    aws servicediscovery discover-instances-revision \
+        --namespace-name example.com \
+        --service-name myservice
+
+Output::
+
+    {
+        "InstancesRevision": 123456
+    }
+
+For more information, see `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To discover the revision of instances from a specific owner account**
+
+The following ``discover-instances-revision`` example discovers the revision of instances from a specific owner account. The owner-account parameter is necessary for instances in namespaces that are shared with your account. ::
+
+    aws servicediscovery discover-instances-revision \
+        --namespace-name shared-namespace \
+        --service-name shared-service \
+        --owner-account 123456789111
+
+Output::
+
+    {
+        "InstancesRevision": 1234567890
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ and `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/discover-instances.rst 2.31.35-1/awscli/examples/servicediscovery/discover-instances.rst
--- 2.23.6-1/awscli/examples/servicediscovery/discover-instances.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/discover-instances.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To discover registered instances**
+**Example 1: To discover registered instances**
 
 The following ``discover-instances`` example discovers registered instances. ::
 
@@ -22,6 +22,37 @@ Output::
                     "AWS_INSTANCE_PORT": "808"
                 }
             }
-        ]
+        ],
+        "InstancesRevision": 85648075627387284
     }
 
+For more information, see `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To discover instances from a specific owner account**
+
+The following ``discover-instances`` example discovers registered instances from a specific owner account. This parameter is necessary to discover instances in namespaces that are shared with your account. ::
+
+    aws servicediscovery discover-instances \
+        --namespace-name shared-namespace \
+        --service-name shared-service \
+        --owner-account 123456789111
+
+Output::
+
+    {
+        "Instances": [
+            {
+                "InstanceId": "shared-instance-1234",
+                "NamespaceName": "shared-namespace",
+                "ServiceName": "shared-service",
+                "HealthStatus": "HEALTHY",
+                "Attributes": {
+                    "AWS_INSTANCE_IPV4": "203.0.113.75",
+                    "AWS_INSTANCE_PORT": "80"
+                }
+            }
+        ],
+        "InstancesRevision": 1234567890
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ and `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-instance.rst 2.31.35-1/awscli/examples/servicediscovery/get-instance.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-instance.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-instance.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,50 @@
+**Example 1: To get the details of an instance**
+
+The following ``get-instance`` example gets the attributes of a service. ::
+
+    aws servicediscovery get-instance \
+        --service-id srv-e4anhexample0004
+        --instance-id i-abcd1234
+
+Output::
+
+    {  
+        "ResourceOwner": "123456789012", 
+        "Instance": {
+            "Id": "arn:aws:servicediscovery:us-west-2:111122223333;:service/srv-e4anhexample0004",
+            "Attributes": {
+                "AWS_INSTANCE_IPV4": "192.0.2.44",
+                "AWS_INSTANCE_PORT": "80",
+                "color": "green",
+                "region": "us-west-2",
+                "stage": "beta"
+            },
+            "CreatedByAccount": "123456789012"
+        }
+    }
+
+For more information, see `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get the details of an instance using service ARN for shared namespaces**
+
+The following ``get-instance`` example gets the attributes of an instance using a service ARN instead of service ID. Specifying an ARN is required when getting details of instances associated with namespaces that are shared with your account. The instance returned in this example was registered by account ``123456789111`` in a namespace owned by account ``123456789012``. ::
+
+    aws servicediscovery get-instance \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita \
+        --instance-id web-server-01
+
+Output::
+
+    {
+        "ResourceOwner": "123456789012",
+        "Instance": {
+            "Id": "web-server-01",
+            "Attributes": {
+                "AWS_INSTANCE_IPV4": "203.0.113.15",
+                "AWS_INSTANCE_PORT": "80"
+            },
+            "CreatedByAccount": "123456789111"
+        }
+    }
+
+For more information about cross-account namespace sharing, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-instances-health-status.rst 2.31.35-1/awscli/examples/servicediscovery/get-instances-health-status.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-instances-health-status.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-instances-health-status.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**Example 1: To get the health status of instances associated with a service**
+
+The following ``get-instances-health-status`` example gets the health status of instances associated with the specified service. ::
+
+    aws servicediscovery get-instances-health-status \
+        --service-id srv-e4anhexample0004
+
+Output::
+
+    {
+        "Status": {
+            "i-abcd1234": "HEALTHY",
+            "i-abcd1235": "UNHEALTHY"
+        }
+    }
+
+For more information, see `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get the health status of instances using service ARN for shared namespaces**
+
+The following ``get-instances-health-status`` example gets the health status of instances using a service ARN instead of service ID. Specifying an ARN is required when getting health status for instances associated with namespaces that are shared with the requester's account. ::
+
+    aws servicediscovery get-instances-health-status \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita
+
+Output::
+
+    {
+        "Status": {
+            "web-server-01": "HEALTHY",
+            "web-server-02": "UNHEALTHY"
+        }
+    }
+
+For more information, see `AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-instances.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/get-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,59 @@
+**Example 1: To get the details of a namespace**
+
+The following ``get-namespace`` example retrieves information about the specified namespace. ::
+
+    aws servicediscovery get-namespace \
+        --id ns-abcd1234xmpl5678
+
+Output::
+
+    {
+        "Namespace": {
+            "Id": "ns-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Name": "example-http.com",
+            "Type": "HTTP",
+            "Description": "Example.com AWS Cloud Map HTTP Namespace",
+            "Properties": {
+                "DnsProperties": {},
+                "HttpProperties": {
+                    "HttpName": "example-http.com"
+                }
+            },
+            "CreateDate": "2024-02-23T13:35:21.874000-06:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+        }
+    }
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get the details of a namespace using ARN**
+
+The following ``get-namespace`` example retrieves information about the specified namespace using its ARN. Specifying the ARN is necessary for retreiving details of a namespace shared with your account. ::
+
+    aws servicediscovery get-namespace \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678
+
+Output::
+
+    {
+        "Namespace": {
+            "Id": "ns-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Name": "example-http.com",
+            "Type": "HTTP",
+            "Description": "Example.com AWS Cloud Map HTTP Namespace",
+            "Properties": {
+                "DnsProperties": {},
+                "HttpProperties": {
+                    "HttpName": "example-http.com"
+                }
+            },
+            "CreateDate": "2024-02-23T13:35:21.874000-06:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+        }
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-operation.rst 2.31.35-1/awscli/examples/servicediscovery/get-operation.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-operation.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-operation.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,22 +1,49 @@
-**To get the result of an operation**
+**Example 1: To get the result of an operation**
 
-The following ``get-operation`` example gets the result of an operation. ::
+The following ``get-operation`` example gets the result of a namespace creation operation. ::
 
     aws servicediscovery get-operation \
-        --operation-id gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd
+        --operation-id abcd1234xmpl5678abcd1234xmpl5678-abcd1234
 
 Output::
 
     {
         "Operation": {
-            "Id": "gv4g5meo7ndmeh4fqskygvk23d2fijwa-k9302yzd",
+            "Id": "abcd1234xmpl5678abcd1234xmpl5678-abcd1234",
             "Type": "CREATE_NAMESPACE",
             "Status": "SUCCESS",
-            "CreateDate": 1587055860.121,
-            "UpdateDate": 1587055900.469,
+            "CreateDate": "2025-01-13T13:35:21.874000-06:00",
+            "UpdateDate": "2025-01-13T13:36:02.469000-06:00",
             "Targets": {
-                "NAMESPACE": "ns-ylexjili4cdxy3xm"
+                "NAMESPACE": "ns-abcd1234xmpl5678"
             }
         }
     }
 
+For more information, see `Creating an AWS Cloud Map namespace to group application services <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get an operation from a specific owner account**
+
+The following ``get-operation`` example gets the result of an operation associated with a specific namespace owner account. This parameter is necessary to get the result of operations associated with namespaces shared with your account. ::
+
+    aws servicediscovery get-operation \
+        --operation-id abcd1234xmpl5678abcd1234xmpl5678-abcd1234 \
+        --owner-account 123456789111
+
+Output::
+
+    {
+        "Operation": {
+            "Id": "abcd1234xmpl5678abcd1234xmpl5678-abcd1234",
+            "OwnerAccount": "123456789111",
+            "Type": "CREATE_NAMESPACE",
+            "Status": "SUCCESS",
+            "CreateDate": "2025-01-13T13:35:21.874000-06:00",
+            "UpdateDate": "2025-01-13T13:36:02.469000-06:00",
+            "Targets": {
+                "NAMESPACE": "ns-abcd1234xmpl5678"
+            }
+        }
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-service-attributes.rst 2.31.35-1/awscli/examples/servicediscovery/get-service-attributes.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-service-attributes.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-service-attributes.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,41 @@
+**Example 1: To get the attributes of a service**
+
+The following ``get-service-attributes`` example gets the attributes of a service. ::
+
+    aws servicediscovery get-service-attributes \
+        --service-id srv-abcd1234xmpl5678
+
+Output::
+
+    {
+        "ServiceAttributes": {
+            "ServiceArn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Attributes": {
+                "Port": "80"
+            }
+        }
+    }
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get the attributes of a service using ARN**
+
+The following ``get-service-attributes`` example gets the attributes of a service using its ARN. Specifying an ARN is necessary for getting attributes of a service created in a namespace shared with your account. ::
+
+    aws servicediscovery get-service-attributes \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678
+
+Output::
+
+    {
+        "ServiceAttributes": {
+            "ServiceArn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Attributes": {
+                "Port": "80"
+            }
+        }
+    }
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/get-service.rst 2.31.35-1/awscli/examples/servicediscovery/get-service.rst
--- 2.23.6-1/awscli/examples/servicediscovery/get-service.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/get-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,51 @@
+**Example 1: To get the settings of a service**
+
+The following ``get-service`` example gets the settings of a specified service. ::
+
+    aws servicediscovery get-service \
+        --id srv-abcd1234xmpl5678
+
+Output::
+
+    {
+        "Service": {
+            "Id": "srv-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Name": "test-service",
+            "NamespaceId": "ns-abcd1234xmpl5678",
+            "DnsConfig": {},
+            "Type": "HTTP",
+            "CreateDate": "2025-08-18T13:53:02.775000-05:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678",
+            "CreatedByAccount": "123456789012"
+        }
+    }
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To get the settings of a service using ARN**
+
+The following ``get-service`` example gets the settings of a specified service using its ARN. Specifying the ARN is necessary when retrieving information about a service created in a namespace that is shared with your account. The caller account ``123456789111`` created the service in a namespace shared by account ``123456789012``. ::
+
+    aws servicediscovery get-service \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678
+
+Output::
+
+    {
+        "Service": {
+            "Id": "srv-abcd1234xmpl5678",
+            "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678",
+            "ResourceOwner": "123456789012",
+            "Name": "test-service",
+            "NamespaceId": "ns-abcd1234xmpl5678",
+            "DnsConfig": {},
+            "Type": "HTTP",
+            "CreateDate": "2025-08-18T13:53:02.775000-05:00",
+            "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678",
+            "CreatedByAccount": "123456789111"
+        }
+    }
+
+For more information, see `Creating an AWS Cloud Map service for an application component <https://docs.aws.amazon.com/cloud-map/latest/dg/creating-services.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/list-instances.rst 2.31.35-1/awscli/examples/servicediscovery/list-instances.rst
--- 2.23.6-1/awscli/examples/servicediscovery/list-instances.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/list-instances.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To list service instances**
+**Example 1: To list service instances**
 
 The following ``list-instances`` example lists service instances. ::
 
@@ -14,10 +14,45 @@ Output::
                 "Attributes": {
                     "AWS_INSTANCE_IPV4": "172.2.1.3",
                     "AWS_INSTANCE_PORT": "808"
-                }
+                },
+                "CreatedByAccount": "123456789012"
+            }
+        ],
+        "ResourceOwner": "123456789012"
+    }
+
+For more information, see `Listing AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To list service instances using service ARN**
+
+The following ``list-instances`` example lists service instances using a service ARN instead of service ID. Specifying an ARN is required when listing instances associated with namespaces that are shared with your account. ::
+
+    aws servicediscovery list-instances \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita
+
+Output::
+
+    {
+        "ResourceOwner": "123456789012",
+        "Instances": [
+            {
+                "Id": "web-server-01",
+                "Attributes": {
+                    "AWS_INSTANCE_IPV4": "203.0.113.15",
+                    "AWS_INSTANCE_PORT": "80"
+                },
+                "CreatedByAccount": "123456789012"
+            },
+            {
+                "Id": "web-server-02",
+                "Attributes": {
+                    "AWS_INSTANCE_IPV4": "203.0.113.16",
+                    "AWS_INSTANCE_PORT": "80"
+                },
+                "CreatedByAccount": "123456789012"
             }
         ]
     }
 
-For more information, see `Viewing a list of service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information about cross-account namespace sharing, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`_ and `Listing AWS Cloud Map service instances <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
 
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/list-namespaces.rst 2.31.35-1/awscli/examples/servicediscovery/list-namespaces.rst
--- 2.23.6-1/awscli/examples/servicediscovery/list-namespaces.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/list-namespaces.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To list namespaces**
+**Example 1: To list namespaces**
 
 The following ``list-namespaces`` example lists namespaces. ::
 
@@ -9,50 +9,73 @@ Output::
     {
         "Namespaces": [
             {
-                "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-a3ccy2e7e3a7rile",
-                "CreateDate": 1585354387.357,
-                "Id": "ns-a3ccy2e7e3a7rile",
+                "Id": "ns-abcd1234xmpl5678",
+                "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678",
+                "ResourceOwner": "123456789012",
                 "Name": "local",
+                "Type": "DNS_PRIVATE",
                 "Properties": {
                     "DnsProperties": {
-                        "HostedZoneId": "Z06752353VBUDTC32S84S"
+                        "HostedZoneId": "Z06752353VBUDTC32S84S",
+                        "SOA": {}
                     },
                     "HttpProperties": {
                         "HttpName": "local"
                      }
                 },
-                "Type": "DNS_PRIVATE"
+                "CreateDate": "2023-07-17T13:37:27.872000-05:00"
             },
             {
-                "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-pocfyjtrsmwtvcxx",
-                "CreateDate": 1586468974.698,
-                "Description": "My second namespace",
-                "Id": "ns-pocfyjtrsmwtvcxx",
+                "Id": "ns-abcd1234xmpl9012",
+                "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl9012",
+                "ResourceOwner": "123456789012",
                 "Name": "My-second-namespace",
+                "Type": "HTTP",
+                "Description": "My second namespace",
                 "Properties": {
-                    "DnsProperties": {},
+                    "DnsProperties": {
+                        "SOA": {}
+                    },
                     "HttpProperties": {
                         "HttpName": "My-second-namespace"
                     }
                 },
-                "Type": "HTTP"
-            },
+                "CreateDate": "2023-11-14T10:35:47.840000-06:00"
+            }
+        ]
+    }
+
+For more information, see `Listing AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To list namespaces shared by other accounts**
+
+The following ``list-namespaces`` example lists namespaces that are shared with the caller account by other AWS accounts using the ``RESOURCE_OWNER`` filter. ::
+
+    aws servicediscovery list-namespaces \
+        --filters Name=RESOURCE_OWNER,Values=OTHER_ACCOUNTS,Condition=EQ
+
+Output::
+
+    {
+        "Namespaces": [
             {
-                "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-ylexjili4cdxy3xm",
-                "CreateDate": 1587055896.798,
-                "Id": "ns-ylexjili4cdxy3xm",
-                "Name": "example.com",
+                "Id": "ns-abcd1234xmpl5678",
+                "Arn": "arn:aws:servicediscovery:us-west-2:123456789111:namespace/ns-abcd1234xmpl5678",
+                "ResourceOwner": "123456789111",
+                "Name": "shared-namespace",
+                "Type": "HTTP",
+                "Description": "Namespace shared from another account",
                 "Properties": {
                     "DnsProperties": {
-                        "HostedZoneId": "Z09983722P0QME1B3KC8I"
+                        "SOA": {}
                     },
-                     "HttpProperties": {
-                         "HttpName": "example.com"
+                    "HttpProperties": {
+                        "HttpName": "shared-namespace"
                     }
                 },
-                "Type": "DNS_PRIVATE"
+                "CreateDate": "2025-01-13T13:35:21.874000-06:00"
             }
         ]
     }
 
-For more information, see `Viewing a list of namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
\ No newline at end of file
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/list-operations.rst 2.31.35-1/awscli/examples/servicediscovery/list-operations.rst
--- 2.23.6-1/awscli/examples/servicediscovery/list-operations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/list-operations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+**To list operations that meet the specified criteria**
+
+The following ``list-operations`` example lists operations that have a status of ``PENDING`` or ``SUCCESS``. ::
+
+    aws servicediscovery list-operations \
+        --service-id srv-e4anhexample0004 \
+        --filters Name=STATUS,Condition=IN,Values=PENDING,SUCCESS
+
+Output::
+
+    {
+        "Operations": [
+            {
+                "Id": "76yy8ovhpdz0plmjzbsnqgnrqvpv2qdt-kexample",
+                "Status": "SUCCESS"
+            },
+            {
+                "Id": "prysnyzpji3u2ciy45nke83x2zanl7yk-dexample",
+                "Status": "SUCCESS"
+            },
+            {
+                "Id": "ko4ekftir7kzlbechsh7xvcdgcpk66gh-7example",
+                "Status": "PENDING"
+            }
+        ]
+    }
+
+
+For more information, see `What is AWS Cloud Map? <https://docs.aws.amazon.com/cloud-map/latest/dg/what-is-cloud-map.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/list-services.rst 2.31.35-1/awscli/examples/servicediscovery/list-services.rst
--- 2.23.6-1/awscli/examples/servicediscovery/list-services.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/list-services.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To list services**
+**Example 1: To list services**
 
 The following ``list-services`` example lists services. ::
 
@@ -26,5 +26,33 @@ Output::
         ]
     }
 
-For more information, see `Viewing a list of services <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information, see `Listing AWS Cloud Map services in a namespace <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-services.html>`__ in the *AWS Cloud Map Developer Guide*.
 
+**Example 2: To list services created in shared namespaces**
+
+The following ``list-services`` example lists services that are created in namespaces shared with the caller account ``123456789012`` by other AWS accounts using the ``RESOURCE_OWNER`` filter. ::
+
+    aws servicediscovery list-services \
+        --filters Name=RESOURCE_OWNER,Values=OTHER_ACCOUNTS,Condition=EQ
+
+Output::
+
+    {
+        "Services": [
+            {
+                "Id": "srv-abcd1234xmpl5678",
+                "Arn": "arn:aws:servicediscovery:us-west-2:123456789111:service/srv-abcd1234xmpl5678",
+                "ResourceOwner": "123456789111",
+                "Name": "shared-service",
+                "NamespaceId": "ns-abcd1234xmpl5678",
+                "Type": "HTTP",
+                "Description": "Service in shared namespace",
+                "DnsConfig": {},
+                "CreateDate": "2025-01-13T13:35:21.874000-06:00",
+                "CreatorRequestId": "abcd1234-5678-90ab-cdef-xmpl12345678",
+                "CreatedByAccount": "123456789012"
+            }
+        ]
+    }
+
+For more information, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ and `Listing AWS Cloud Map services in a namespace <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-services.html>`__  in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/list-tags-for-resource.rst 2.31.35-1/awscli/examples/servicediscovery/list-tags-for-resource.rst
--- 2.23.6-1/awscli/examples/servicediscovery/list-tags-for-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/list-tags-for-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,23 @@
+**To list tags associated with the specified resource**
+
+The following ``list-tags-for-resource`` example lists tags for the specified resource. ::
+
+    aws servicediscovery list-tags-for-resource \
+        --resource-arn arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-e4anhexample0004
+
+Output::
+
+    {
+        "Tags": [
+            {
+                "Key": "Project",
+                "Value": "Zeta"
+            },
+            {
+                "Key": "Department",
+                "Value": "Engineering"
+            }
+        ]
+    }
+
+For more information, see `Tagging your AWS Cloud Map resources <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/register-instance.rst 2.31.35-1/awscli/examples/servicediscovery/register-instance.rst
--- 2.23.6-1/awscli/examples/servicediscovery/register-instance.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/register-instance.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-**To register a service instance**
+**Example 1: To register a service instance using service ID**
 
 The following ``register-instance`` example registers a service instance. ::
 
@@ -15,5 +15,21 @@ Output::
 
 To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__ .
 
-For more information, see `Registering instances <https://docs.aws.amazon.com/cloud-map/latest/dg/registering-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
+For more information about registering an instance, see `Registering a resource as an AWS Cloud Map service instance <https://docs.aws.amazon.com/cloud-map/latest/dg/registering-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
 
+**Example 2: To register a service instance using service ARN**
+
+The following ``register-instance`` example registers a service instance using a service ARN. Specifying the ARN is required when registering instances in services that are shared with your account. ::
+
+    aws servicediscovery register-instance \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita \
+        --instance-id web-server-01 \
+        --attributes=AWS_INSTANCE_IPV4=203.0.113.15,AWS_INSTANCE_PORT=80
+
+Output::
+
+    {
+        "OperationId": "gv4g5meo7ndmkqjrhpn39wk42xmpl"
+    }
+
+For more information about cross-account namespace sharing, see `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/tag-resource.rst 2.31.35-1/awscli/examples/servicediscovery/tag-resource.rst
--- 2.23.6-1/awscli/examples/servicediscovery/tag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/tag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To associate tags with the specified resource**
+
+The following ``tag-resource`` example associates a ``Department`` tag with the value ``Engineering`` with the specified namespace. ::
+
+    aws servicediscovery tag-resource \
+        --resource-arn arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-e4anhexample0004 \
+        --tags Key=Department, Value=Engineering
+
+This command produces no output.
+
+For more information, see `Tagging your AWS Cloud Map resources <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/untag-resource.rst 2.31.35-1/awscli/examples/servicediscovery/untag-resource.rst
--- 2.23.6-1/awscli/examples/servicediscovery/untag-resource.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/untag-resource.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,11 @@
+**To remove tags from the specified resource**
+
+The following ``untag-resource`` example removes a ``Department`` tag from the specified namespace. ::
+
+    aws servicediscovery untag-resource \
+        --resource-arn arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-e4anhexample0004 \
+        --tags Key=Department, Value=Engineering
+
+This command produces no output.
+
+For more information, see `Tagging your AWS Cloud Map resources <https://docs.aws.amazon.com/cloud-map/latest/dg/listing-instances.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-http-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/update-http-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-http-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-http-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**Example 1: To update an HTTP namespace**
+
+The following ``update-http-namespace`` example updates the specified HTTP namespace's description. ::
+
+    aws servicediscovery update-http-namespace \
+        --id ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``. For more information, see `get-operation <https://docs.aws.amazon.com/cli/latest/reference/servicediscovery/get-operation.html>`__ .
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update an HTTP namespace using ARN**
+
+The following ``update-http-namespace`` example updates the specified HTTP namespace using its ARN. ::
+
+    aws servicediscovery update-http-namespace \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-instance-custom-health-status.rst 2.31.35-1/awscli/examples/servicediscovery/update-instance-custom-health-status.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-instance-custom-health-status.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-instance-custom-health-status.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+**Example 1: To update a custom health check**
+
+The following ``update-instance-custom-health-status`` example updates the status of the custom health check for the specified service and example service instance to ``HEALTHY``. ::
+
+    aws servicediscovery update-instance-custom-health-status \
+        --service-id srv-e4anhexample0004 \
+        --instance-id example \
+        --status HEALTHY
+
+This command produces no output.
+
+For more information, see `AWS Cloud Map service health check configuration <https://docs.aws.amazon.com/cloud-map/latest/dg/services-health-checks.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update a custom health check using service ARN**
+
+The following ``update-instance-custom-health-status`` example updates the status of the custom health check using a service ARN. The ARN is required when updating health status for instances associated with namespaces that are shared with the your account. ::
+
+    aws servicediscovery update-instance-custom-health-status \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-p5zdwlg5uvvzjita \
+        --instance-id web-server-01 \
+        --status HEALTHY
+
+This command produces no output.
+
+For more information, see `AWS Cloud Map service health check configuration <https://docs.aws.amazon.com/cloud-map/latest/dg/services-health-checks.html>`__ and `Cross-account AWS Cloud Map namespace sharing <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-private-dns-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/update-private-dns-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-private-dns-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-private-dns-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**Example 1: To update a private DNS namespace using ID**
+
+The following ``update-private-dns-namespace`` example updates the description of a private DNS namespace using namespace ID. ::
+
+    aws servicediscovery update-private-dns-namespace \
+        --id ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``.
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update a private DNS namespace using ARN**
+
+The following ``update-private-dns-namespace`` example updates a private DNS namespace using its ARN. ::
+
+    aws servicediscovery update-private-dns-namespace \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-public-dns-namespace.rst 2.31.35-1/awscli/examples/servicediscovery/update-public-dns-namespace.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-public-dns-namespace.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-public-dns-namespace.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,35 @@
+**Example 1: To update a public DNS namespace using ID**
+
+The following ``update-public-dns-namespace`` example updates the description of a public DNS namespace using its ID. ::
+
+    aws servicediscovery update-public-dns-namespace \
+        --id ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``.
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update a public DNS namespace using ARN**
+
+The following ``update-public-dns-namespace`` example updates a public DNS namespace using its ARN. ::
+
+    aws servicediscovery update-public-dns-namespace \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcd1234xmpl5678 \
+        --updater-request-id abcd1234-5678-90ab-cdef-xmpl12345678 \
+        --namespace Description="The updated namespace description."
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+For more information, see `AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-service-attributes.rst 2.31.35-1/awscli/examples/servicediscovery/update-service-attributes.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-service-attributes.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-service-attributes.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,23 @@
+**Example 1: To update a service to add an attribute**
+
+The following ``update-service-attributes`` example updates the specified service to add a service attribute with a key ``Port`` and a value ``80``. ::
+
+    aws servicediscovery update-service-attributes \
+        --service-id srv-abcd1234xmpl5678 \
+        --attributes Port=80
+
+This command produces no output.
+
+For more information, see `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update a service attributes using ARN**
+
+The following ``update-service-attributes`` example updates a service using its ARN to add a service attribute. Specifying the ARN is necessary for adding attributes to services created in namespaces shared with your account. ::
+
+    aws servicediscovery update-service-attributes \
+        --service-id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678 \
+        --attributes Port=80
+
+This command produces no output.
+
+For more information, see  `AWS Cloud Map services <https://docs.aws.amazon.com/cloud-map/latest/dg/working-with-services.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/servicediscovery/update-service.rst 2.31.35-1/awscli/examples/servicediscovery/update-service.rst
--- 2.23.6-1/awscli/examples/servicediscovery/update-service.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/servicediscovery/update-service.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,33 @@
+**Example 1: To update a service**
+
+The following ``update-service`` example updates a service to update the ``DnsConfig`` and ``HealthCheckConfig`` settings. ::
+
+    aws servicediscovery update-service \
+        --id srv-abcd1234xmpl5678 \
+        --service "DnsConfig={DnsRecords=[{Type=A,TTL=60}]},HealthCheckConfig={Type=HTTP,ResourcePath=/,FailureThreshold=2}"
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+To confirm that the operation succeeded, you can run ``get-operation``.
+
+For more information about updating a service, see `Updating an AWS Cloud Map service <https://docs.aws.amazon.com/cloud-map/latest/dg/editing-services.html>`__ in the *AWS Cloud Map Developer Guide*.
+
+**Example 2: To update a service using ARN**
+
+The following ``update-service`` example updates a service using its ARN. Specifying an ARN is necessary for services that are created in namespaces shared with your account. ::
+
+    aws servicediscovery update-service \
+        --id arn:aws:servicediscovery:us-west-2:123456789012:service/srv-abcd1234xmpl5678 \
+        --service "DnsConfig={DnsRecords=[{Type=A,TTL=60}]},HealthCheckConfig={Type=HTTP,ResourcePath=/,FailureThreshold=2}"
+
+Output::
+
+    {
+        "OperationId": "abcd1234-5678-90ab-cdef-xmpl12345678"
+    }
+
+For more information about updating a service, see `Updating an AWS Cloud Map service <https://docs.aws.amazon.com/cloud-map/latest/dg/editing-services.html>`__ and `Shared AWS Cloud Map namespaces <https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html>`__ in the *AWS Cloud Map Developer Guide*.
diff -pruN 2.23.6-1/awscli/examples/ssm/put-parameter.rst 2.31.35-1/awscli/examples/ssm/put-parameter.rst
--- 2.23.6-1/awscli/examples/ssm/put-parameter.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/ssm/put-parameter.rst	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,7 @@ Output::
         "Tier": "Standard"
     }
 
-For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, 'Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
+For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, `Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
 
 **Example 2: To create an advanced parameter**
 
@@ -35,11 +35,11 @@ Output::
         "Tier": "Advanced"
     }
 
-For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, 'Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
+For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, `Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
 
 **Example 3: To convert a standard parameter to an advanced parameter**
 
-The following ``put-parameter`` example converts a existing standard parameter into an advanced parameter. ::
+The following ``put-parameter`` example converts an existing standard parameter into an advanced parameter. ::
 
     aws ssm put-parameter \
         --name "MyConvertedParameter" \
@@ -55,7 +55,7 @@ Output::
         "Tier": "Advanced"
     }
 
-For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, 'Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
+For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, `Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
 
 **Example 4: To create a parameter with a policy attached**
 
@@ -75,7 +75,7 @@ Output::
         "Tier": "Advanced"
     }
 
-For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, 'Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
+For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, `Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
 
 **Example 5: To add a policy to an existing parameter**
 
@@ -96,4 +96,4 @@ Output::
         "Tier": "Advanced"
     }
 
-For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, 'Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
+For more information, see `Create a Systems Manager parameter (AWS CLI) <https://docs.aws.amazon.com/systems-manager/latest/userguide/param-create-cli.html>`__, `Managing parameter tiers <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-advanced-parameters.html>`__, and `Working with parameter policies <https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-policies.html>`__ in the *AWS Systems Manager User Guide*.
\ No newline at end of file
diff -pruN 2.23.6-1/awscli/examples/verifiedpermissions/update-policy.rst 2.31.35-1/awscli/examples/verifiedpermissions/update-policy.rst
--- 2.23.6-1/awscli/examples/verifiedpermissions/update-policy.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/verifiedpermissions/update-policy.rst	2025-11-12 19:17:29.000000000 +0000
@@ -1,21 +1,22 @@
-**Example 1: To create a static policy**
+**To update a static policy**
 
-The following ``create-policy`` example creates a static policy with a policy scope that specifies both a principal and a resource. ::
+The following ``update-policy`` example modifies an existing static policy by updating its description and statement. ::
 
-    aws verifiedpermissions create-policy \
-        --definition file://definition.txt \
+    aws verifiedpermissions update-policy \
+        --policy-id SPEXAMPLEabcdefg111111 \
+        --definition file://updated-definition.txt \
         --policy-store-id PSEXAMPLEabcdefg111111
 
 The ``statement`` parameter takes a string representation of a JSON object. It contains embedded quotation marks (") within the outermost quotation mark pair. This requires you to convert the JSON to a string by preceding all embedded quotation marks with a backslash character ( \" ) and combining all lines into a single text line with no line breaks.
 
-Example strings can be displayed wrapped across multiple lines here for readability, but the operation requires the parameters be submitted as single line strings.
+You can display example strings wrapped across multiple lines for readability, but the operation requires the parameters to be submitted as single-line strings.
 
-Contents of file ``definition.txt``::
+Contents of file ``updated-definition.txt``::
 
     {
         "static": {
-            "description":  "Grant everyone of janeFriends UserGroup access to the vacationFolder Album",
-            "statement": "permit(principal in UserGroup::\"janeFriends\", action, resource in Album::\"vacationFolder\" );"
+            "description": "Updated policy to grant janeFriends UserGroup access to the vacationFolder Album with view action only",
+            "statement": "permit(principal in UserGroup::\"janeFriends\", action == Action::\"view\", resource in Album::\"vacationFolder\" );"
         }
     }
 
@@ -37,73 +38,4 @@ Output::
         }
     }
 
-**Example 2: To create a static policy that grants access to a resource to everyone**
-
-The following ``create-policy`` example creates a static policy with a policy scope that specifies only a resource. ::
-
-    aws verifiedpermissions create-policy \
-        --definition file://definition2.txt \
-        --policy-store-id PSEXAMPLEabcdefg111111
-
-Contents of file ``definition2.txt``::
-
-    {
-        "static": {
-            "description":  "Grant everyone access to the publicFolder Album",
-            "statement": "permit(principal, action, resource in Album::\"publicFolder\");"
-        }
-    }
-
-Output::
-
-    {
-        "createdDate": "2023-06-12T20:39:44.975897+00:00",
-        "lastUpdatedDate": "2023-06-12T20:39:44.975897+00:00",
-        "policyId": "PbfR73F8oh5MMfr9uRtFDB",
-        "policyStoreId": "PSEXAMPLEabcdefg222222",
-        "policyType": "STATIC",
-        "resource": {
-            "entityId": "publicFolder",
-            "entityType": "Album"
-        }
-    }
-
-**Example 3: To create a template-linked policy that is associated with the specified template**
-
-The following ``create-policy`` example creates a template-linked policy using the specified policy template and associates the specified principal to use with the new template-linked policy. ::
-
-    aws verifiedpermissions create-policy \
-        --definition file://definition2.txt \
-        --policy-store-id PSEXAMPLEabcdefg111111
-
-Contents of definition3.txt::
-
-    {
-        "templateLinked": {
-            "policyTemplateId": "PTEXAMPLEabcdefg111111",
-            "principal": {
-                "entityType": "User",
-                "entityId": "alice"
-            }
-        }
-    }
-
-Output::
-
-    {
-        "createdDate": "2023-06-12T20:49:51.490211+00:00",
-        "lastUpdatedDate": "2023-06-12T20:49:51.490211+00:00",
-        "policyId": "TPEXAMPLEabcdefg111111",
-        "policyStoreId": "PSEXAMPLEabcdefg111111",
-        "policyType": "TEMPLATE_LINKED",
-        "principal": {
-            "entityId": "alice",
-            "entityType": "User"
-        },
-        "resource": {
-            "entityId": "VacationPhoto94.jpg",
-            "entityType": "Photo"
-        }
-    }
-
-For more information about policies, see `Amazon Verified Permissions policies <https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies.html>`__ in the *Amazon Verified Permissions User Guide*.
\ No newline at end of file
+For more information about policies, see `Amazon Verified Permissions policies <https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies.html>`__ in the *Amazon Verified Permissions User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/create-resource-configuration.rst 2.31.35-1/awscli/examples/vpc-lattice/create-resource-configuration.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/create-resource-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/create-resource-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**To create a resource configuration**
+
+The following ``create-resource-configuration`` example creates a resource configuration that specifies a single IPv4 address. ::
+
+    aws vpc-lattice create-resource-configuration \
+        --name my-resource-config \
+        --type SINGLE \
+        --resource-gateway-identifier rgw-0bba03f3d56060135 \
+        --resource-configuration-definition 'ipResource={ipAddress=10.0.14.85}'
+
+Output::
+
+    {
+        "allowAssociationToShareableServiceNetwork": true,
+        "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-07129f3acded87625",
+        "id": "rcfg-07129f3acded87625",
+        "name": "my-resource-config",
+        "portRanges": [
+            "1-65535"
+        ],
+        "protocol": "TCP",
+        "resourceConfigurationDefinition": {
+            "ipResource": {
+                "ipAddress": "10.0.14.85"
+            }
+        },
+        "resourceGatewayId": "rgw-0bba03f3d56060135",
+        "status": "ACTIVE",
+        "type": "SINGLE"
+    }
+
+For more information, see `Resource configurations for VPC resources <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/create-resource-gateway.rst 2.31.35-1/awscli/examples/vpc-lattice/create-resource-gateway.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/create-resource-gateway.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/create-resource-gateway.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To create a resource gateway**
+
+The following ``create-resource-gateway`` example creates a resource gateway for the specified subnet. ::
+
+    aws vpc-lattice create-resource-gateway \ 
+        --name my-resource-gateway \
+        --vpc-identifier vpc-0bf4c2739bc05a69 \
+        --subnet-ids subnet-08e8943905b63a683
+
+Output::
+
+    {
+        "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourcegateway/rgw-0bba03f3d56060135",
+        "id": "rgw-0bba03f3d56060135",
+        "ipAddressType": "IPV4",
+        "name": "my-resource-gateway",
+        "securityGroupIds": [
+            "sg-087ffd596c5fe962c"
+        ],
+        "status": "ACTIVE",
+        "subnetIds": [
+            "subnet-08e8943905b63a683"
+        ],
+        "vpcIdentifier": "vpc-0bf4c2739bc05a694"
+    }
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-gateway.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/delete-resource-configuration.rst 2.31.35-1/awscli/examples/vpc-lattice/delete-resource-configuration.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/delete-resource-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/delete-resource-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,10 @@
+**To delete a resource configuration**
+
+The following ``delete-resource-configuration`` example deletes the specified resource configuration. ::
+
+    aws vpc-lattice delete-resource-configuration \
+        --resource-configuration-identifier rcfg-07129f3acded87625
+
+This command produces no output.
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/delete-resource-gateway.rst 2.31.35-1/awscli/examples/vpc-lattice/delete-resource-gateway.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/delete-resource-gateway.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/delete-resource-gateway.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,17 @@
+**To delete a resource gateway**
+
+The following ``delete-resource-gateway`` example deletes the specified resource gateway. ::
+
+    aws vpc-lattice delete-resource-gateway \
+        --resource-gateway-identifier rgw-0bba03f3d56060135
+
+Output::
+
+    {
+        "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourcegateway/rgw-0bba03f3d56060135",
+        "id": "rgw-0bba03f3d56060135",
+        "name": "my-resource-gateway",
+        "status": "DELETE_IN_PROGRESS"
+    }
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-gateway.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/get-resource-configuration.rst 2.31.35-1/awscli/examples/vpc-lattice/get-resource-configuration.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/get-resource-configuration.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/get-resource-configuration.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,32 @@
+**To get information about a resource configuration**
+
+The following ``get-resource-configuration`` example gets information about the specified resource configuration. ::
+
+    aws vpc-lattice get-resource-configuration \
+        --resource-configuration-identifier rcfg-07129f3acded87625
+
+Output::
+
+    {
+        "allowAssociationToShareableServiceNetwork": true,
+        "amazonManaged": false,
+        "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-07129f3acded87625",
+        "createdAt": "2025-02-01T00:57:35.871000+00:00",
+        "id": "rcfg-07129f3acded87625",
+        "lastUpdatedAt": "2025-02-01T00:57:46.874000+00:00",
+        "name": "my-resource-config",
+        "portRanges": [
+            "1-65535"
+        ],
+        "protocol": "TCP",
+        "resourceConfigurationDefinition": {
+            "ipResource": {
+                "ipAddress": "10.0.14.85"
+            }
+        },
+        "resourceGatewayId": "rgw-0bba03f3d56060135",
+        "status": "ACTIVE",
+        "type": "SINGLE"
+    }
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/get-resource-gateway.rst 2.31.35-1/awscli/examples/vpc-lattice/get-resource-gateway.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/get-resource-gateway.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/get-resource-gateway.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,27 @@
+**To get information about a resource gateway**
+
+The following ``get-resource-gateway`` example gets information about the specified resource gateway. ::
+
+    aws vpc-lattice get-resource-gateway \
+        --resource-gateway-identifier rgw-0bba03f3d56060135
+
+Output::
+
+    {
+        "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourcegateway/rgw-0bba03f3d56060135",
+        "createdAt": "2025-02-01T00:57:33.241000+00:00",
+        "id": "rgw-0bba03f3d56060135",
+        "ipAddressType": "IPV4",
+        "lastUpdatedAt": "2025-02-01T00:57:44.351000+00:00",
+        "name": "my-resource-gateway",
+        "securityGroupIds": [
+            "sg-087ffd596c5fe962c"
+        ],
+        "status": "ACTIVE",
+        "subnetIds": [
+            "subnet-08e8943905b63a683"
+        ],
+        "vpcId": "vpc-0bf4c2739bc05a694"
+    }
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-gateway.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/list-resource-configurations.rst 2.31.35-1/awscli/examples/vpc-lattice/list-resource-configurations.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/list-resource-configurations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/list-resource-configurations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+**To list your resource configurations**
+
+The following ``list-resource-configurations`` example lists your resource configurations. ::
+
+    aws vpc-lattice list-resource-configurations 
+
+Output::
+
+    {
+        "items": [
+            {
+                "amazonManaged": false,
+                "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-07129f3acded87625",
+                "createdAt": "2025-02-01T00:57:35.871000+00:00",
+                "id": "rcfg-07129f3acded87625",
+                "lastUpdatedAt": "2025-02-01T00:57:46.874000+00:00",
+                "name": "my-resource-config",
+                "resourceGatewayId": "rgw-0bba03f3d56060135",
+                "status": "ACTIVE",
+                "type": "SINGLE"
+            }
+        ]
+    }
+
+For more information, see `Resource configurations <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/list-resource-endpoint-associations.rst 2.31.35-1/awscli/examples/vpc-lattice/list-resource-endpoint-associations.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/list-resource-endpoint-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/list-resource-endpoint-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,24 @@
+**To list the VPC endpoint associations**
+
+The following ``list-resource-endpoint-associations`` example lists the VPC endpoints associated with the specified resource configuration. ::
+
+    aws vpc-lattice list-resource-endpoint-associations \
+        --resource-configuration-identifier rcfg-07129f3acded87625
+
+Output::
+
+    {
+        "items": [
+            {
+                "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceendpointassociation/rea-0956a7435baf89326",
+                "createdAt": "2025-02-01T00:57:38.998000+00:00",
+                "id": "rea-0956a7435baf89326",
+                "resourceConfigurationArn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-07129f3acded87625",
+                "resourceConfigurationId": "rcfg-07129f3acded87625",
+                "vpcEndpointId": "vpce-019b90d6f16d4f958",
+                "vpcEndpointOwner": "123456789012"
+            }
+        ]
+    }
+
+For more information, see `Manage associations for a VPC Lattice resource configuration <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration-associations.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/list-resource-gateways.rst 2.31.35-1/awscli/examples/vpc-lattice/list-resource-gateways.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/list-resource-gateways.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/list-resource-gateways.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,30 @@
+**To list your resource gateways**
+
+The following ``list-resource-gateways`` example lists your resource gateways. ::
+
+    aws vpc-lattice list-resource-gateways
+
+Output::
+
+    {
+        "items": [
+            {
+                "arn": "arn:aws:vpc-lattice:us-east-1:123456789012:resourcegateway/rgw-0bba03f3d56060135",
+                "createdAt": "2025-02-01T00:57:33.241000+00:00",
+                "id": "rgw-0bba03f3d56060135",
+                "ipAddressType": "IPV4",
+                "lastUpdatedAt": "2025-02-01T00:57:44.351000+00:00",
+                "name": "my-resource-gateway",
+                "seurityGroupIds": [
+                    "sg-087ffd596c5fe962c"
+                ],
+                "status": "ACTIVE",
+                "subnetIds": [
+                    "subnet-08e8943905b63a683"
+                ],
+                "vpcIdentifier": "vpc-0bf4c2739bc05a694"
+            }
+        ]
+    }
+
+For more information, see `Resource gateways in VPC Lattice <https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-gateway.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/vpc-lattice/list-service-network-vpc-endpoint-associations.rst 2.31.35-1/awscli/examples/vpc-lattice/list-service-network-vpc-endpoint-associations.rst
--- 2.23.6-1/awscli/examples/vpc-lattice/list-service-network-vpc-endpoint-associations.rst	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/examples/vpc-lattice/list-service-network-vpc-endpoint-associations.rst	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,22 @@
+**To list the VPC endpoint associations**
+
+The following ``list-service-network-vpc-endpoint-associations`` example lists the VPC endpoints associated with the specific service network. ::
+
+    aws vpc-lattice list-service-network-vpc-endpoint-associations \
+        --service-network-identifier sn-0808d1748faee0c1e
+
+Output::
+
+    {
+        "items": [
+            {
+                "createdAt": "2025-02-01T01:21:36.667000+00:00",
+                "serviceNetworkArn": "arn:aws:vpc-lattice:us-east-1:123456789012:servicenetwork/sn-0808d1748faee0c1e",
+                "state": "ACTIVE",
+                "vpcEndpointId": "vpce-0cc199f605eaeace7",
+                "vpcEndpointOwnerId": "123456789012"
+            }
+        ]
+    }
+
+For more information, see `Manage the associations for a VPC Lattice service network <https://docs.aws.amazon.com/vpc-lattice/latest/ug/service-network-associations.html>`__ in the *Amazon VPC Lattice User Guide*.
diff -pruN 2.23.6-1/awscli/examples/workspaces/describe-workspace-directories.rst 2.31.35-1/awscli/examples/workspaces/describe-workspace-directories.rst
--- 2.23.6-1/awscli/examples/workspaces/describe-workspace-directories.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/workspaces/describe-workspace-directories.rst	2025-11-12 19:17:29.000000000 +0000
@@ -28,7 +28,6 @@ Output::
                 "WorkspaceSecurityGroupId": "sg-0d89e927e5645d7c5",
                 "State": "REGISTERED",
                 "WorkspaceCreationProperties": {
-                    "EnableWorkDocs": false,
                     "EnableInternetAccess": false,
                     "UserEnabledAsLocalAdministrator": true,
                     "EnableMaintenanceMode": true
@@ -55,4 +54,4 @@ Output::
         ]
     }
 
-For more information, see `Manage directories for WorkSpaces <https://docs.aws.amazon.com/workspaces/latest/adminguide/manage-workspaces-directory.html>`__ in the *Amazon WorkSpaces Administration Guide*.
+For more information, see `Manage directories for WorkSpaces Personal <https://docs.aws.amazon.com/workspaces/latest/adminguide/manage-workspaces-directory.html>`__ in the *Amazon WorkSpaces Administration Guide*.
diff -pruN 2.23.6-1/awscli/examples/workspaces/register-workspace-directory.rst 2.31.35-1/awscli/examples/workspaces/register-workspace-directory.rst
--- 2.23.6-1/awscli/examples/workspaces/register-workspace-directory.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/examples/workspaces/register-workspace-directory.rst	2025-11-12 19:17:29.000000000 +0000
@@ -3,9 +3,8 @@
 The following ``register-workspace-directory`` example registers the specified directory for use with Amazon WorkSpaces. ::
 
     aws workspaces register-workspace-directory \
-        --directory-id d-926722edaf \
-        --no-enable-work-docs
+        --directory-id d-926722edaf
 
 This command produces no output.
 
-For more information, see `Register a directory with WorkSpaces <https://docs.aws.amazon.com/workspaces/latest/adminguide/register-deregister-directory.html>`__ in the *Amazon WorkSpaces Administration Guide*.
+For more information, see `Register an existing AWS Directory Service directory with WorkSpaces Personal <https://docs.aws.amazon.com/workspaces/latest/adminguide/register-deregister-directory.html>`__ in the *Amazon WorkSpaces Administration Guide*.
diff -pruN 2.23.6-1/awscli/formatter.py 2.31.35-1/awscli/formatter.py
--- 2.23.6-1/awscli/formatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/formatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,16 +14,14 @@ import logging
 from datetime import datetime
 
 from botocore.compat import json
-from botocore.utils import set_value_from_jmespath
 from botocore.paginate import PageIterator
+from botocore.utils import set_value_from_jmespath
 from ruamel.yaml import YAML
 
-from awscli.table import MultiTable, Styler, ColorizedStyler
-from awscli import text
-from awscli import compat
+from awscli import compat, text
+from awscli.table import ColorizedStyler, MultiTable, Styler
 from awscli.utils import json_encoder
 
-
 LOG = logging.getLogger(__name__)
 
 
@@ -31,7 +29,7 @@ def is_response_paginated(response):
     return isinstance(response, PageIterator)
 
 
-class Formatter(object):
+class Formatter:
     def __init__(self, args):
         self._args = args
 
@@ -60,7 +58,7 @@ class Formatter(object):
     def _flush_stream(self, stream):
         try:
             stream.flush()
-        except IOError:
+        except OSError:
             pass
 
 
@@ -71,6 +69,7 @@ class FullyBufferedFormatter(Formatter):
             # so that if anything wraps stdout we'll pick up those changes
             # (specifically colorama on windows wraps stdout).
             stream = self._get_default_stream()
+        compat.set_preferred_output_encoding(stream)
         # I think the interfaces between non-paginated
         # and paginated responses can still be cleaned up.
         if is_response_paginated(response):
@@ -78,10 +77,11 @@ class FullyBufferedFormatter(Formatter):
         else:
             response_data = response
         response_data = self._get_transformed_response_for_output(
-            response_data)
+            response_data
+        )
         try:
             self._format_response(command_name, response_data, stream)
-        except IOError as e:
+        except OSError:
             # If the reading end of our stdout stream has closed the file
             # we can just exit.
             pass
@@ -92,19 +92,23 @@ class FullyBufferedFormatter(Formatter):
 
 
 class JSONFormatter(FullyBufferedFormatter):
-
     def _format_response(self, command_name, response, stream):
         # For operations that have no response body (e.g. s3 put-object)
         # the response will be an empty string.  We don't want to print
         # that out to the user but other "falsey" values like an empty
         # dictionary should be printed.
         if response != {}:
-            json.dump(response, stream, indent=4, default=json_encoder,
-                    ensure_ascii=False)
+            json.dump(
+                response,
+                stream,
+                indent=4,
+                default=json_encoder,
+                ensure_ascii=False,
+            )
             stream.write('\n')
 
 
-class YAMLDumper(object):
+class YAMLDumper:
     def __init__(self):
         self._yaml = YAML(typ='safe')
         # Encoding is set to None because we handle the encoding by
@@ -157,6 +161,7 @@ class StreamedYAMLFormatter(Formatter):
     def __call__(self, command_name, response, stream=None):
         if stream is None:
             stream = self._get_default_stream()
+        compat.set_preferred_output_encoding(stream)
         response_stream = self._get_response_stream(response)
         for response in response_stream:
             try:
@@ -165,7 +170,7 @@ class StreamedYAMLFormatter(Formatter):
                 # response. We go with the latter so we can reuse our YAML
                 # dumper
                 self._yaml_dumper.dump([response], stream)
-            except IOError:
+            except OSError:
                 # If the reading end of our stdout stream has closed the file
                 # we can just exit.
                 return
@@ -178,7 +183,8 @@ class StreamedYAMLFormatter(Formatter):
     def _get_response_stream(self, response):
         if is_response_paginated(response):
             return compat.imap(
-                self._get_transformed_response_for_output, response)
+                self._get_transformed_response_for_output, response
+            )
         else:
             output = self._get_transformed_response_for_output(response)
             if output == {}:
@@ -196,19 +202,23 @@ class TableFormatter(FullyBufferedFormat
     using the output definition from the model.
 
     """
+
     def __init__(self, args, table=None):
         super(TableFormatter, self).__init__(args)
         if args.color == 'auto':
-            self.table = MultiTable(initial_section=False,
-                                    column_separator='|')
+            self.table = MultiTable(
+                initial_section=False, column_separator='|'
+            )
         elif args.color == 'off':
             styler = Styler()
-            self.table = MultiTable(initial_section=False,
-                                    column_separator='|', styler=styler)
+            self.table = MultiTable(
+                initial_section=False, column_separator='|', styler=styler
+            )
         elif args.color == 'on':
             styler = ColorizedStyler()
-            self.table = MultiTable(initial_section=False,
-                                    column_separator='|', styler=styler)
+            self.table = MultiTable(
+                initial_section=False, column_separator='|', styler=styler
+            )
         else:
             raise ValueError("Unknown color option: %s" % args.color)
 
@@ -216,7 +226,7 @@ class TableFormatter(FullyBufferedFormat
         if self._build_table(command_name, response):
             try:
                 self.table.render(stream)
-            except IOError:
+            except OSError:
                 # If they're piping stdout to another process which exits before
                 # we're done writing all of our output, we'll get an error about a
                 # closed pipe which we can safely ignore.
@@ -257,8 +267,9 @@ class TableFormatter(FullyBufferedFormat
             self.table.add_row_header(headers)
             self.table.add_row([current[k] for k in headers])
         for remaining in more:
-            self._build_table(remaining, current[remaining],
-                              indent_level=indent_level + 1)
+            self._build_table(
+                remaining, current[remaining], indent_level=indent_level + 1
+            )
 
     def _build_sub_table_from_list(self, current, indent_level, title):
         headers, more = self._group_scalar_keys_from_list(current)
@@ -266,8 +277,7 @@ class TableFormatter(FullyBufferedFormat
         first = True
         for element in current:
             if not first and more:
-                self.table.new_section(title,
-                                       indent_level=indent_level)
+                self.table.new_section(title, indent_level=indent_level)
                 self.table.add_row_header(headers)
             first = False
             # Use .get() to account for the fact that sometimes an element
@@ -278,8 +288,11 @@ class TableFormatter(FullyBufferedFormat
                 # be in every single element of the list, so we need to
                 # check this condition before recursing.
                 if remaining in element:
-                    self._build_table(remaining, element[remaining],
-                                    indent_level=indent_level + 1)
+                    self._build_table(
+                        remaining,
+                        element[remaining],
+                        indent_level=indent_level + 1,
+                    )
 
     def _scalar_type(self, element):
         return not isinstance(element, (list, dict))
@@ -315,7 +328,6 @@ class TableFormatter(FullyBufferedFormat
 
 
 class TextFormatter(Formatter):
-
     def __call__(self, command_name, response, stream=None):
         if stream is None:
             stream = self._get_default_stream()
@@ -331,9 +343,7 @@ class TextFormatter(Formatter):
                     for result_key in result_keys:
                         data = result_key.search(page)
                         set_value_from_jmespath(
-                            current,
-                            result_key.expression,
-                            data
+                            current, result_key.expression, data
                         )
                     self._format_response(current, stream)
                 if response.resume_token:
@@ -341,7 +351,8 @@ class TextFormatter(Formatter):
                     # if they want.
                     self._format_response(
                         {'NextToken': {'NextToken': response.resume_token}},
-                        stream)
+                        stream,
+                    )
             else:
                 self._remove_request_id(response)
                 self._format_response(response, stream)
diff -pruN 2.23.6-1/awscli/handlers.py 2.31.35-1/awscli/handlers.py
--- 2.23.6-1/awscli/handlers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/handlers.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,93 +16,119 @@ This is a collection of built in CLI ext
 registered with the event system.
 
 """
+
+from awscli.alias import register_alias_commands
 from awscli.argprocess import ParamShorthandParser
-from awscli.customizations.ec2instanceconnect import register_ec2_instance_connect_commands
-from awscli.paramfile import register_uri_param_handler
 from awscli.clidriver import no_pager_handler
 from awscli.customizations import datapipeline
 from awscli.customizations.addexamples import add_examples
 from awscli.customizations.argrename import register_arg_renames
 from awscli.customizations.assumerole import register_assume_role_provider
 from awscli.customizations.awslambda import register_lambda_create_function
+from awscli.customizations.binaryformat import add_binary_formatter
 from awscli.customizations.cliinput import register_cli_input_args
-from awscli.customizations.cloudformation import initialize as cloudformation_init
+from awscli.customizations.cloudformation import (
+    initialize as cloudformation_init,
+)
 from awscli.customizations.cloudfront import register as register_cloudfront
 from awscli.customizations.cloudsearch import initialize as cloudsearch_init
 from awscli.customizations.cloudsearchdomain import register_cloudsearchdomain
 from awscli.customizations.cloudtrail import initialize as cloudtrail_init
 from awscli.customizations.codeartifact import register_codeartifact_commands
 from awscli.customizations.codecommit import initialize as codecommit_init
-from awscli.customizations.codedeploy.codedeploy import initialize as \
-    codedeploy_init
+from awscli.customizations.codedeploy.codedeploy import (
+    initialize as codedeploy_init,
+)
 from awscli.customizations.configservice.getstatus import register_get_status
-from awscli.customizations.configservice.putconfigurationrecorder import \
-    register_modify_put_configuration_recorder
-from awscli.customizations.configservice.rename_cmd import \
-    register_rename_config
+from awscli.customizations.configservice.putconfigurationrecorder import (
+    register_modify_put_configuration_recorder,
+)
+from awscli.customizations.configservice.rename_cmd import (
+    register_rename_config,
+)
 from awscli.customizations.configservice.subscribe import register_subscribe
 from awscli.customizations.configure.configure import register_configure_cmd
+from awscli.customizations.devcommands import register_dev_commands
+from awscli.customizations.dlm.dlm import dlm_initialize
+from awscli.customizations.dsql import register_dsql_customizations
 from awscli.customizations.dynamodb.ddb import register_ddb
-from awscli.customizations.dynamodb.paginatorfix import \
-    register_dynamodb_paginator_fix
-from awscli.customizations.history import register_history_mode
-from awscli.customizations.history import register_history_commands
+from awscli.customizations.dynamodb.paginatorfix import (
+    register_dynamodb_paginator_fix,
+)
 from awscli.customizations.ec2.addcount import register_count_events
 from awscli.customizations.ec2.bundleinstance import register_bundleinstance
 from awscli.customizations.ec2.decryptpassword import ec2_add_priv_launch_key
+from awscli.customizations.ec2.paginate import register_ec2_page_size_injector
 from awscli.customizations.ec2.protocolarg import register_protocol_args
 from awscli.customizations.ec2.runinstances import register_runinstances
 from awscli.customizations.ec2.secgroupsimplify import register_secgroup
-from awscli.customizations.ec2.paginate import register_ec2_page_size_injector
+from awscli.customizations.ec2instanceconnect import (
+    register_ec2_instance_connect_commands,
+)
 from awscli.customizations.ecr import register_ecr_commands
 from awscli.customizations.ecr_public import register_ecr_public_commands
-from awscli.customizations.emr.emr import emr_initialize
-from awscli.customizations.emrcontainers import \
-    initialize as emrcontainers_initialize
-from awscli.customizations.eks import initialize as eks_initialize
 from awscli.customizations.ecs import initialize as ecs_initialize
+from awscli.customizations.eks import initialize as eks_initialize
+from awscli.customizations.emr.emr import emr_initialize
+from awscli.customizations.emrcontainers import (
+    initialize as emrcontainers_initialize,
+)
 from awscli.customizations.gamelift import register_gamelift_commands
-from awscli.customizations.generatecliskeleton import \
-    register_generate_cli_skeleton
+from awscli.customizations.generatecliskeleton import (
+    register_generate_cli_skeleton,
+)
 from awscli.customizations.globalargs import register_parse_global_args
+from awscli.customizations.history import (
+    register_history_commands,
+    register_history_mode,
+)
 from awscli.customizations.iamvirtmfa import IAMVMFAWrapper
-from awscli.customizations.iot import register_create_keys_and_cert_arguments
-from awscli.customizations.iot import register_create_keys_from_csr_arguments
+from awscli.customizations.iot import (
+    register_create_keys_and_cert_arguments,
+    register_create_keys_from_csr_arguments,
+)
 from awscli.customizations.iot_data import register_custom_endpoint_note
+from awscli.customizations.kinesis import (
+    register_kinesis_list_streams_pagination_backcompat,
+)
 from awscli.customizations.kms import register_fix_kms_create_grant_docs
-from awscli.customizations.dlm.dlm import dlm_initialize
-from awscli.customizations.opsworks import initialize as opsworks_init
+from awscli.customizations.lightsail import initialize as lightsail_initialize
+from awscli.customizations.logs import register_logs_commands
 from awscli.customizations.paginate import register_pagination
 from awscli.customizations.putmetricdata import register_put_metric_data
-from awscli.customizations.rds import register_rds_modify_split
-from awscli.customizations.rds import register_add_generate_db_auth_token
-from awscli.customizations.dsql import register_dsql_customizations
-from awscli.customizations.rekognition import register_rekognition_detect_labels
+from awscli.customizations.quicksight import (
+    register_quicksight_asset_bundle_customizations,
+)
+from awscli.customizations.rds import (
+    register_add_generate_db_auth_token,
+    register_rds_modify_split,
+)
+from awscli.customizations.rekognition import (
+    register_rekognition_detect_labels,
+)
 from awscli.customizations.removals import register_removals
 from awscli.customizations.route53 import register_create_hosted_zone_doc_fix
 from awscli.customizations.s3.s3 import s3_plugin_initialize
 from awscli.customizations.s3errormsg import register_s3_error_msg
-from awscli.customizations.timestampformat import register_timestamp_format
+from awscli.customizations.s3events import (
+    register_document_expires_string,
+    register_event_stream_arg,
+)
+from awscli.customizations.servicecatalog import (
+    register_servicecatalog_commands,
+)
 from awscli.customizations.sessendemail import register_ses_send_email
+from awscli.customizations.sessionmanager import register_ssm_session
 from awscli.customizations.sso import register_sso_commands
 from awscli.customizations.streamingoutputarg import add_streaming_output_arg
-from awscli.customizations.translate import register_translate_import_terminology
+from awscli.customizations.timestampformat import register_timestamp_format
 from awscli.customizations.toplevelbool import register_bool_params
+from awscli.customizations.translate import (
+    register_translate_import_terminology,
+)
 from awscli.customizations.waiters import register_add_waiters
-from awscli.customizations.opsworkscm import register_alias_opsworks_cm
-from awscli.customizations.servicecatalog import register_servicecatalog_commands
-from awscli.customizations.s3events import register_event_stream_arg, register_document_expires_string
-from awscli.customizations.sessionmanager import register_ssm_session
-from awscli.customizations.logs import register_logs_commands
-from awscli.customizations.devcommands import register_dev_commands
 from awscli.customizations.wizard.commands import register_wizard_commands
-from awscli.customizations.binaryformat import add_binary_formatter
-from awscli.customizations.lightsail import initialize as lightsail_initialize
-from awscli.alias import register_alias_commands
-from awscli.customizations.kinesis import \
-    register_kinesis_list_streams_pagination_backcompat
-from awscli.customizations.quicksight import \
-    register_quicksight_asset_bundle_customizations
+from awscli.paramfile import register_uri_param_handler
 
 
 def awscli_initialize(event_handlers):
@@ -114,23 +140,25 @@ def awscli_initialize(event_handlers):
     # The s3 error mesage needs to registered before the
     # generic error handler.
     register_s3_error_msg(event_handlers)
-#    # The following will get fired for every option we are
-#    # documenting.  It will attempt to add an example_fn on to
-#    # the parameter object if the parameter supports shorthand
-#    # syntax.  The documentation event handlers will then use
-#    # the examplefn to generate the sample shorthand syntax
-#    # in the docs.  Registering here should ensure that this
-#    # handler gets called first but it still feels a bit brittle.
-#    event_handlers.register('doc-option-example.*.*.*',
-#                            param_shorthand.add_example_fn)
-    event_handlers.register('doc-examples.*.*',
-                            add_examples)
+    #    # The following will get fired for every option we are
+    #    # documenting.  It will attempt to add an example_fn on to
+    #    # the parameter object if the parameter supports shorthand
+    #    # syntax.  The documentation event handlers will then use
+    #    # the examplefn to generate the sample shorthand syntax
+    #    # in the docs.  Registering here should ensure that this
+    #    # handler gets called first but it still feels a bit brittle.
+    #    event_handlers.register('doc-option-example.*.*.*',
+    #                            param_shorthand.add_example_fn)
+    event_handlers.register('doc-examples.*.*', add_examples)
     register_cli_input_args(event_handlers)
-    event_handlers.register('building-argument-table.*',
-                            add_streaming_output_arg)
+    event_handlers.register(
+        'building-argument-table.*', add_streaming_output_arg
+    )
     register_count_events(event_handlers)
-    event_handlers.register('building-argument-table.ec2.get-password-data',
-                            ec2_add_priv_launch_key)
+    event_handlers.register(
+        'building-argument-table.ec2.get-password-data',
+        ec2_add_priv_launch_key,
+    )
     register_parse_global_args(event_handlers)
     register_pagination(event_handlers)
     register_secgroup(event_handlers)
@@ -169,7 +197,6 @@ def awscli_initialize(event_handlers):
     register_get_status(event_handlers)
     register_rename_config(event_handlers)
     register_timestamp_format(event_handlers)
-    opsworks_init(event_handlers)
     register_lambda_create_function(event_handlers)
     register_fix_kms_create_grant_docs(event_handlers)
     register_create_hosted_zone_doc_fix(event_handlers)
@@ -179,15 +206,16 @@ def awscli_initialize(event_handlers):
     register_custom_endpoint_note(event_handlers)
     event_handlers.register(
         'building-argument-table.iot.create-keys-and-certificate',
-        register_create_keys_and_cert_arguments)
+        register_create_keys_and_cert_arguments,
+    )
     event_handlers.register(
         'building-argument-table.iot.create-certificate-from-csr',
-        register_create_keys_from_csr_arguments)
+        register_create_keys_from_csr_arguments,
+    )
     register_cloudfront(event_handlers)
     register_gamelift_commands(event_handlers)
     register_ec2_page_size_injector(event_handlers)
     cloudformation_init(event_handlers)
-    register_alias_opsworks_cm(event_handlers)
     register_servicecatalog_commands(event_handlers)
     register_translate_import_terminology(event_handlers)
     register_history_mode(event_handlers)
diff -pruN 2.23.6-1/awscli/help.py 2.31.35-1/awscli/help.py
--- 2.23.6-1/awscli/help.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/help.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,49 +12,73 @@
 # language governing permissions and limitations under the License.
 import logging
 import os
-import sys
 import platform
 import shlex
-from subprocess import Popen, PIPE
+import sys
+import tempfile
+import webbrowser
+from subprocess import PIPE, Popen
 
+from botocore.exceptions import ProfileNotFound
 from docutils.core import publish_string
-from docutils.writers import manpage
-
-from awscli.clidocs import ProviderDocumentEventHandler
-from awscli.clidocs import ServiceDocumentEventHandler
-from awscli.clidocs import OperationDocumentEventHandler
-from awscli.clidocs import TopicListerDocumentEventHandler
-from awscli.clidocs import TopicDocumentEventHandler
+from docutils.writers import (
+    html4css1,
+    manpage,
+)
+
+from awscli import (
+    _DEFAULT_BASE_REMOTE_URL,
+)
+from awscli.argparser import ArgTableArgParser
+from awscli.argprocess import ParamShorthandParser
 from awscli.bcdoc import docevents
 from awscli.bcdoc.restdoc import ReSTDocument
 from awscli.bcdoc.textwriter import TextWriter
-from awscli.argprocess import ParamShorthandParser
-from awscli.argparser import ArgTableArgParser
+from awscli.clidocs import (
+    OperationDocumentEventHandler,
+    ProviderDocumentEventHandler,
+    ServiceDocumentEventHandler,
+    TopicDocumentEventHandler,
+    TopicListerDocumentEventHandler,
+)
 from awscli.topictags import TopicTagDB
 from awscli.utils import ignore_ctrl_c
 
-
 LOG = logging.getLogger('awscli.help')
 
+REF_PATH = 'reference'
+TUT_PATH = 'tutorial'
+TOPIC_PATH = 'topic'
+
 
 class ExecutableNotFoundError(Exception):
     def __init__(self, executable_name):
-        super(ExecutableNotFoundError, self).__init__(
-            'Could not find executable named "%s"' % executable_name)
+        super().__init__(
+            f'Could not find executable named "{executable_name}"'
+        )
 
 
-def get_renderer():
+def get_renderer(help_output):
     """
     Return the appropriate HelpRenderer implementation for the
     current platform.
     """
+
     if platform.system() == 'Windows':
+        if help_output == "browser":
+            return WindowsBrowserHelpRenderer()
+        elif help_output == "url":
+            return WindowsPagingHelpRenderer()
         return WindowsHelpRenderer()
     else:
+        if help_output == "browser":
+            return PosixBrowserHelpRenderer()
+        elif help_output == "url":
+            return PosixPagingHelpRenderer()
         return PosixHelpRenderer()
 
 
-class PagingHelpRenderer(object):
+class HelpRenderer:
     """
     Interface for a help renderer.
 
@@ -62,9 +86,38 @@ class PagingHelpRenderer(object):
     a particular platform.
 
     """
+
     def __init__(self, output_stream=sys.stdout):
         self.output_stream = output_stream
 
+    def render(self, contents):
+        """
+        Each implementation of HelpRenderer must implement this
+        render method.
+        """
+        converted_content = self._convert_doc_content(contents)
+        self._send_output_to_destination(converted_content)
+
+    def _send_output_to_destination(self, output):
+        """
+        Each implementation of HelpRenderer must implement this
+        method.
+        """
+        raise NotImplementedError
+
+    def _popen(self, *args, **kwargs):
+        return Popen(*args, **kwargs)
+
+    def _convert_doc_content(self, contents):
+        return contents
+
+
+class PagingHelpRenderer(HelpRenderer):
+    """Interface for a help renderer.
+
+    This sends output to the pager.
+    """
+
     PAGER = None
     _DEFAULT_DOCUTILS_SETTINGS_OVERRIDES = {
         # The default for line length limit in docutils is 10,000. However,
@@ -85,13 +138,8 @@ class PagingHelpRenderer(object):
             pager = os.environ['PAGER']
         return shlex.split(pager)
 
-    def render(self, contents):
-        """
-        Each implementation of HelpRenderer must implement this
-        render method.
-        """
-        converted_content = self._convert_doc_content(contents)
-        self._send_output_to_pager(converted_content)
+    def _send_output_to_destination(self, output):
+        self._send_output_to_pager(output)
 
     def _send_output_to_pager(self, output):
         cmdline = self.get_pager_cmdline()
@@ -99,14 +147,48 @@ class PagingHelpRenderer(object):
         p = self._popen(cmdline, stdin=PIPE)
         p.communicate(input=output)
 
-    def _popen(self, *args, **kwargs):
-        return Popen(*args, **kwargs)
 
-    def _convert_doc_content(self, contents):
-        return contents
+class BrowserHelpRenderer(HelpRenderer):
+    """
+    Interface for a help renderer to a web browser.
+
+    The renderer is responsible for displaying the help content on
+    a particular platform.
+
+    """
+
+    def __init__(self, output_stream=sys.stdout):
+        self.output_stream = output_stream
+
+    _DEFAULT_DOCUTILS_SETTINGS_OVERRIDES = {
+        # The default for line length limit in docutils is 10,000. However,
+        # currently in the documentation, it inlines all possible enums in
+        # the JSON syntax which exceeds this limit for some EC2 commands
+        # and prevents the manpages from being generated.
+        # This is a temporary fix to allow the manpages for these commands
+        # to be rendered. Long term, we should avoid enumerating over all
+        # enums inline for the JSON syntax snippets.
+        'line_length_limit': 50_000
+    }
 
+    def _send_output_to_destination(self, output):
+        self._send_output_to_browser(output)
 
-class PosixHelpRenderer(PagingHelpRenderer):
+    def _send_output_to_browser(self, output):
+        html_file = tempfile.NamedTemporaryFile(
+            "wb", suffix=".html", delete=False
+        )
+        html_file.write(output)
+        html_file.close()
+
+        try:
+            print("Opening help file in the default browser.")
+            return webbrowser.open_new_tab(f'file://{html_file.name}')
+        except webbrowser.Error:
+            print('Failed to open browser:', file=sys.stderr)
+
+
+class PosixPagingHelpRenderer(PagingHelpRenderer):
     """
     Render help content on a Posix-like system.  This includes
     Linux and MacOS X.
@@ -114,29 +196,12 @@ class PosixHelpRenderer(PagingHelpRender
 
     PAGER = 'less -R'
 
-    def _convert_doc_content(self, contents):
-        settings_overrides = self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES.copy()
-        settings_overrides["report_level"] = 3
-        man_contents = publish_string(
-            contents, writer=manpage.Writer(),
-            settings_overrides=self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES,
-        )
-        if self._exists_on_path('groff'):
-            cmdline = ['groff', '-m', 'man', '-T', 'ascii']
-        elif self._exists_on_path('mandoc'):
-            cmdline = ['mandoc', '-T', 'ascii']
-        else:
-            raise ExecutableNotFoundError('groff or mandoc')
-        LOG.debug("Running command: %s", cmdline)
-        p3 = self._popen(cmdline, stdin=PIPE, stdout=PIPE, stderr=PIPE)
-        output = p3.communicate(input=man_contents)[0]
-        return output
-
     def _send_output_to_pager(self, output):
         cmdline = self.get_pager_cmdline()
         if not self._exists_on_path(cmdline[0]):
-            LOG.debug("Pager '%s' not found in PATH, printing raw help." %
-                      cmdline[0])
+            LOG.debug(
+                f"Pager '{cmdline[0]}' not found in PATH, printing raw help."
+            )
             self.output_stream.write(output.decode('utf-8') + "\n")
             self.output_stream.flush()
             return
@@ -159,21 +224,80 @@ class PosixHelpRenderer(PagingHelpRender
     def _exists_on_path(self, name):
         # Since we're only dealing with POSIX systems, we can
         # ignore things like PATHEXT.
-        return any([os.path.exists(os.path.join(p, name))
-                    for p in os.environ.get('PATH', '').split(os.pathsep)])
+        return any(
+            [
+                os.path.exists(os.path.join(p, name))
+                for p in os.environ.get('PATH', '').split(os.pathsep)
+            ]
+        )
 
 
-class WindowsHelpRenderer(PagingHelpRenderer):
-    """Render help content on a Windows platform."""
+class PosixHelpRenderer(PosixPagingHelpRenderer):
+    """
+    Render help content on a Posix-like system.  This includes
+    Linux and MacOS X.
+    """
+
+    def _convert_doc_content(self, contents):
+        settings_overrides = self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES.copy()
+        settings_overrides["report_level"] = 3
+        man_contents = publish_string(
+            contents,
+            writer=manpage.Writer(),
+            settings_overrides=self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES,
+        )
+        if self._exists_on_path('groff'):
+            cmdline = ['groff', '-m', 'man', '-T', 'ascii']
+        elif self._exists_on_path('mandoc'):
+            cmdline = ['mandoc', '-T', 'ascii']
+        else:
+            raise ExecutableNotFoundError('groff or mandoc')
+        LOG.debug("Running command: %s", cmdline)
+        p3 = self._popen(cmdline, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+        output = p3.communicate(input=man_contents)[0]
+        return output
 
-    PAGER = 'more'
+
+class PosixBrowserHelpRenderer(BrowserHelpRenderer):
+    """
+    Render help content in a browser on a Posix-like system.  This includes
+    Linux and MacOS X.
+    """
 
     def _convert_doc_content(self, contents):
-        text_output = publish_string(
-            contents, writer=TextWriter(),
+        settings_overrides = self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES.copy()
+        settings_overrides["report_level"] = 3
+        man_contents = publish_string(
+            contents,
+            writer=manpage.Writer(),
             settings_overrides=self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES,
         )
-        return text_output
+        if self._exists_on_path('groff'):
+            cmdline = ['groff', '-m', 'man', '-T', 'html']
+        elif self._exists_on_path('mandoc'):
+            cmdline = ['mandoc', '-T', 'html']
+        else:
+            raise ExecutableNotFoundError('groff or mandoc')
+        LOG.debug("Running command: %s", cmdline)
+        p3 = self._popen(cmdline, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+        output = p3.communicate(input=man_contents)[0]
+        return output
+
+    def _exists_on_path(self, name):
+        # Since we're only dealing with POSIX systems, we can
+        # ignore things like PATHEXT.
+        return any(
+            [
+                os.path.exists(os.path.join(p, name))
+                for p in os.environ.get('PATH', '').split(os.pathsep)
+            ]
+        )
+
+
+class WindowsPagingHelpRenderer(PagingHelpRenderer):
+    """Render help content on a Windows platform."""
+
+    PAGER = 'more'
 
     def _popen(self, *args, **kwargs):
         # Also set the shell value to True.  To get any of the
@@ -182,7 +306,31 @@ class WindowsHelpRenderer(PagingHelpRend
         return Popen(*args, **kwargs)
 
 
-class HelpCommand(object):
+class WindowsHelpRenderer(WindowsPagingHelpRenderer):
+    """Render help content on a Windows platform."""
+
+    def _convert_doc_content(self, contents):
+        text_output = publish_string(
+            contents,
+            writer=TextWriter(),
+            settings_overrides=self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES,
+        )
+        return text_output
+
+
+class WindowsBrowserHelpRenderer(BrowserHelpRenderer):
+    """Render help content in the browser on a Windows platform."""
+
+    def _convert_doc_content(self, contents):
+        text_output = publish_string(
+            contents,
+            writer=html4css1.Writer(),
+            settings_overrides=self._DEFAULT_DOCUTILS_SETTINGS_OVERRIDES,
+        )
+        return text_output
+
+
+class HelpCommand:
     """
     HelpCommand Interface
     ---------------------
@@ -237,8 +385,17 @@ class HelpCommand(object):
         self.arg_table = arg_table
         self._subcommand_table = {}
         self._related_items = []
-        self.renderer = get_renderer()
         self.doc = ReSTDocument(target='man')
+        self._base_remote_url = _DEFAULT_BASE_REMOTE_URL
+
+        try:
+            self._help_output_format = self.session.get_config_variable(
+                "cli_help_output"
+            )
+        except ProfileNotFound:
+            self._help_output_format = None
+
+        self.renderer = get_renderer(self._help_output_format)
 
     @property
     def event_class(self):
@@ -280,8 +437,9 @@ class HelpCommand(object):
             subcommand_parser = ArgTableArgParser({}, self.subcommand_table)
             parsed, remaining = subcommand_parser.parse_known_args(args)
             if getattr(parsed, 'subcommand', None) is not None:
-                return self.subcommand_table[parsed.subcommand](remaining,
-                                                                parsed_globals)
+                return self.subcommand_table[parsed.subcommand](
+                    remaining, parsed_globals
+                )
 
         # Create an event handler for a Provider Document
         instance = self.EventHandlerClass(self)
@@ -289,7 +447,10 @@ class HelpCommand(object):
         # We pass ourselves along so that we can, in turn, get passed
         # to all event handlers.
         docevents.generate_events(self.session, self)
-        self.renderer.render(self.doc.getvalue())
+        if self._help_output_format == 'url':
+            self.renderer.render(self.url.encode())
+        else:
+            self.renderer.render(self.doc.getvalue())
         instance.unregister()
 
 
@@ -299,12 +460,19 @@ class ProviderHelpCommand(HelpCommand):
     This is what is called when ``aws help`` is run.
 
     """
+
     EventHandlerClass = ProviderDocumentEventHandler
 
-    def __init__(self, session, command_table, arg_table,
-                 description, synopsis, usage):
-        HelpCommand.__init__(self, session, None,
-                             command_table, arg_table)
+    def __init__(
+        self,
+        session,
+        command_table,
+        arg_table,
+        description,
+        synopsis,
+        usage,
+    ):
+        HelpCommand.__init__(self, session, None, command_table, arg_table)
         self.description = description
         self.synopsis = synopsis
         self.help_usage = usage
@@ -321,6 +489,10 @@ class ProviderHelpCommand(HelpCommand):
         return 'aws'
 
     @property
+    def url(self):
+        return f"{self._base_remote_url}/index.html"
+
+    @property
     def subcommand_table(self):
         if self._subcommand_table is None:
             if self._topic_tag_db is None:
@@ -353,10 +525,10 @@ class ServiceHelpCommand(HelpCommand):
 
     EventHandlerClass = ServiceDocumentEventHandler
 
-    def __init__(self, session, obj, command_table, arg_table, name,
-                 event_class):
-        super(ServiceHelpCommand, self).__init__(session, obj, command_table,
-                                                 arg_table)
+    def __init__(
+        self, session, obj, command_table, arg_table, name, event_class
+    ):
+        super().__init__(session, obj, command_table, arg_table)
         self._name = name
         self._event_class = event_class
 
@@ -368,6 +540,10 @@ class ServiceHelpCommand(HelpCommand):
     def name(self):
         return self._name
 
+    @property
+    def url(self):
+        return f"{self._base_remote_url}/{REF_PATH}/{self.name}/index.html"
+
 
 class OperationHelpCommand(HelpCommand):
     """Implements operation level help.
@@ -376,10 +552,10 @@ class OperationHelpCommand(HelpCommand):
     e.g. ``aws ec2 describe-instances help``.
 
     """
+
     EventHandlerClass = OperationDocumentEventHandler
 
-    def __init__(self, session, operation_model, arg_table, name,
-                 event_class):
+    def __init__(self, session, operation_model, arg_table, name, event_class):
         HelpCommand.__init__(self, session, operation_model, None, arg_table)
         self.param_shorthand = ParamShorthandParser()
         self._name = name
@@ -393,12 +569,16 @@ class OperationHelpCommand(HelpCommand):
     def name(self):
         return self._name
 
+    @property
+    def url(self):
+        return f"{self._base_remote_url}/reference/{self.event_class.replace('.', '/')}.html"
+
 
 class TopicListerCommand(HelpCommand):
     EventHandlerClass = TopicListerDocumentEventHandler
 
     def __init__(self, session):
-        super(TopicListerCommand, self).__init__(session, None, {}, {})
+        super().__init__(session, None, {}, {})
 
     @property
     def event_class(self):
@@ -408,12 +588,16 @@ class TopicListerCommand(HelpCommand):
     def name(self):
         return 'topics'
 
+    @property
+    def url(self):
+        return f"{self._base_remote_url}/{TOPIC_PATH}/index.html"
+
 
 class TopicHelpCommand(HelpCommand):
     EventHandlerClass = TopicDocumentEventHandler
 
     def __init__(self, session, topic_name):
-        super(TopicHelpCommand, self).__init__(session, None, {}, {})
+        super().__init__(session, None, {}, {})
         self._topic_name = topic_name
 
     @property
@@ -423,3 +607,7 @@ class TopicHelpCommand(HelpCommand):
     @property
     def name(self):
         return self._topic_name
+
+    @property
+    def url(self):
+        return f"{self._base_remote_url}/{TOPIC_PATH}/{self.name}.html"
diff -pruN 2.23.6-1/awscli/logger.py 2.31.35-1/awscli/logger.py
--- 2.23.6-1/awscli/logger.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/logger.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,8 +17,21 @@ import awscrt.io
 LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
 
 
-def set_stream_logger(logger_name, log_level, stream=None,
-                      format_string=None):
+try:
+    # Initializing CRT logging isn't thread-safe, but setting/updating it is.
+    # So we always initialize logging when this module is imported so
+    # subsequent enable/disable CRT logging calls can safely assume it's
+    # already initialized.
+    awscrt.io.init_logging(awscrt.io.LogLevel.NoLogs, 'stderr')
+except RuntimeError:
+    # Calling `init_logging` more than once raises a Runtime exception.
+    # Even though normal usage shouldn't call it more than once in the
+    # case of multiple imports, we should still guard against it if
+    # something causes the module cache to be cleared between imports.
+    pass
+
+
+def set_stream_logger(logger_name, log_level, stream=None, format_string=None):
     """
     Convenience method to configure a stream logger.
 
@@ -78,8 +91,8 @@ def remove_stream_logger(logger_name):
 
 
 def enable_crt_logging():
-    awscrt.io.init_logging(awscrt.io.LogLevel.Debug, 'stderr')
+    awscrt.io.set_log_level(awscrt.io.LogLevel.Debug)
 
 
 def disable_crt_logging():
-    awscrt.io.init_logging(awscrt.io.LogLevel.NoLogs, 'stderr')
+    awscrt.io.set_log_level(awscrt.io.LogLevel.NoLogs)
diff -pruN 2.23.6-1/awscli/paramfile.py 2.31.35-1/awscli/paramfile.py
--- 2.23.6-1/awscli/paramfile.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/paramfile.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import copy
 import logging
 import os
-import copy
 
-from awscli.compat import compat_open
 from awscli import argprocess
+from awscli.compat import compat_open
 
 logger = logging.getLogger(__name__)
 
@@ -30,7 +30,7 @@ def register_uri_param_handler(session,
     session.register('load-cli-arg', handler)
 
 
-class URIArgumentHandler(object):
+class URIArgumentHandler:
     def __init__(self, prefixes):
         self._prefixes = prefixes
 
@@ -77,7 +77,7 @@ def get_paramfile(path, cases):
 
 
 def get_file(prefix, path, mode):
-    file_path = os.path.expandvars(os.path.expanduser(path[len(prefix):]))
+    file_path = os.path.expandvars(os.path.expanduser(path[len(prefix) :]))
     try:
         with compat_open(file_path, mode) as f:
             return f.read()
@@ -85,13 +85,15 @@ def get_file(prefix, path, mode):
         raise ResourceLoadingError(
             'Unable to load paramfile (%s), text contents could '
             'not be decoded.  If this is a binary file, please use the '
-            'fileb:// prefix instead of the file:// prefix.' % file_path)
-    except (OSError, IOError) as e:
-        raise ResourceLoadingError('Unable to load paramfile %s: %s' % (
-            path, e))
+            'fileb:// prefix instead of the file:// prefix.' % file_path
+        )
+    except OSError as e:
+        raise ResourceLoadingError(
+            'Unable to load paramfile %s: %s' % (path, e)
+        )
 
 
 LOCAL_PREFIX_MAP = {
     'file://': (get_file, {'mode': 'r'}),
     'fileb://': (get_file, {'mode': 'rb'}),
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/awscli/plugin.py 2.31.35-1/awscli/plugin.py
--- 2.23.6-1/awscli/plugin.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/plugin.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,9 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
-import os
 import logging
+import os
+import sys
 
 from botocore.hooks import HierarchicalEmitter
 
@@ -80,6 +80,9 @@ def _import_plugins(plugin_mapping):
 
 def _add_plugin_path_to_sys_path(plugin_path):
     for dirname in plugin_path.split(os.pathsep):
-        log.debug("Adding additional path from cli_legacy_plugin_path "
-                  "configuration: %s", dirname)
+        log.debug(
+            "Adding additional path from cli_legacy_plugin_path "
+            "configuration: %s",
+            dirname,
+        )
         sys.path.append(dirname)
diff -pruN 2.23.6-1/awscli/s3transfer/__init__.py 2.31.35-1/awscli/s3transfer/__init__.py
--- 2.23.6-1/awscli/s3transfer/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -123,6 +123,7 @@ transfer.  For example:
 
 
 """
+
 import concurrent.futures
 import functools
 import logging
@@ -134,13 +135,12 @@ import socket
 import string
 import threading
 
+import s3transfer.compat
 from botocore.compat import six  # noqa: F401
 from botocore.exceptions import IncompleteReadError
 from botocore.vendored.requests.packages.urllib3.exceptions import (
     ReadTimeoutError,
 )
-
-import s3transfer.compat
 from s3transfer.exceptions import RetriesExceededError, S3UploadFailedError
 
 __author__ = 'Amazon Web Services'
@@ -681,7 +681,6 @@ class TransferConfig:
 
 
 class S3Transfer:
-
     ALLOWED_DOWNLOAD_ARGS = [
         'VersionId',
         'SSECustomerAlgorithm',
@@ -823,8 +822,8 @@ class S3Transfer:
         for kwarg in actual:
             if kwarg not in allowed:
                 raise ValueError(
-                    "Invalid extra_args key '%s', "
-                    "must be one of: %s" % (kwarg, ', '.join(allowed))
+                    "Invalid extra_args key '{}', "
+                    "must be one of: {}".format(kwarg, ', '.join(allowed))
                 )
 
     def _ranged_download(
diff -pruN 2.23.6-1/awscli/s3transfer/bandwidth.py 2.31.35-1/awscli/s3transfer/bandwidth.py
--- 2.23.6-1/awscli/s3transfer/bandwidth.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/bandwidth.py	2025-11-12 19:17:29.000000000 +0000
@@ -30,9 +30,7 @@ class RequestExceededException(Exception
         """
         self.requested_amt = requested_amt
         self.retry_time = retry_time
-        msg = 'Request amount {} exceeded the amount available. Retry in {}'.format(
-            requested_amt, retry_time
-        )
+        msg = f'Request amount {requested_amt} exceeded the amount available. Retry in {retry_time}'
         super().__init__(msg)
 
 
diff -pruN 2.23.6-1/awscli/s3transfer/constants.py 2.31.35-1/awscli/s3transfer/constants.py
--- 2.23.6-1/awscli/s3transfer/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,12 +27,12 @@ ALLOWED_DOWNLOAD_ARGS = [
 ]
 
 FULL_OBJECT_CHECKSUM_ARGS = [
-     'ChecksumCRC32',
-     'ChecksumCRC32C',
-     'ChecksumCRC64NVME',
-     'ChecksumSHA1',
-     'ChecksumSHA256',
+    'ChecksumCRC32',
+    'ChecksumCRC32C',
+    'ChecksumCRC64NVME',
+    'ChecksumSHA1',
+    'ChecksumSHA256',
 ]
 
-USER_AGENT = 's3transfer/%s' % s3transfer.__version__
-PROCESS_USER_AGENT = '%s processpool' % USER_AGENT
+USER_AGENT = f's3transfer/{s3transfer.__version__}'
+PROCESS_USER_AGENT = f'{USER_AGENT} processpool'
diff -pruN 2.23.6-1/awscli/s3transfer/copies.py 2.31.35-1/awscli/s3transfer/copies.py
--- 2.23.6-1/awscli/s3transfer/copies.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/copies.py	2025-11-12 19:17:29.000000000 +0000
@@ -280,7 +280,7 @@ class CopySubmissionTask(SubmissionTask)
             raise TypeError(
                 'Expecting dictionary formatted: '
                 '{"Bucket": bucket_name, "Key": key} '
-                'but got %s or type %s.' % (copy_source, type(copy_source))
+                f'but got {copy_source} or type {type(copy_source)}.'
             )
 
     def _extra_upload_part_args(self, extra_args):
diff -pruN 2.23.6-1/awscli/s3transfer/crt.py 2.31.35-1/awscli/s3transfer/crt.py
--- 2.23.6-1/awscli/s3transfer/crt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/crt.py	2025-11-12 19:17:29.000000000 +0000
@@ -33,6 +33,7 @@ from awscrt.io import (
 )
 from awscrt.s3 import (
     S3Client,
+    S3FileIoOptions,
     S3RequestTlsMode,
     S3RequestType,
     S3ResponseError,
@@ -42,8 +43,8 @@ from botocore import UNSIGNED
 from botocore.compat import urlsplit
 from botocore.config import Config
 from botocore.exceptions import NoCredentialsError
+from botocore.useragent import register_feature_id
 from botocore.utils import ArnParser, InvalidArnException, is_s3express_bucket
-
 from s3transfer.constants import FULL_OBJECT_CHECKSUM_ARGS, MB
 from s3transfer.exceptions import TransferNotDoneError
 from s3transfer.futures import BaseTransferFuture, BaseTransferMeta
@@ -87,6 +88,7 @@ def create_s3_crt_client(
     part_size=8 * MB,
     use_ssl=True,
     verify=None,
+    fio_options=None,
 ):
     """
     :type region: str
@@ -130,6 +132,9 @@ def create_s3_crt_client(
         * path/to/cert/bundle.pem - A filename of the CA cert bundle to
             use. Specify this argument if you want to use a custom CA cert
             bundle instead of the default one on your system.
+
+    :type fio_options: Optional[dict]
+    :param fio_options: Kwargs to use to build an `awscrt.s3.S3FileIoOptions`.
     """
 
     event_loop_group = EventLoopGroup(num_threads)
@@ -153,6 +158,9 @@ def create_s3_crt_client(
     target_gbps = _get_crt_throughput_target_gbps(
         provided_throughput_target_bytes=target_throughput
     )
+    crt_fio_options = None
+    if fio_options:
+        crt_fio_options = S3FileIoOptions(**fio_options)
     return S3Client(
         bootstrap=bootstrap,
         region=region,
@@ -162,6 +170,7 @@ def create_s3_crt_client(
         tls_connection_options=tls_connection_options,
         throughput_target_gbps=target_gbps,
         enable_s3express=True,
+        fio_options=crt_fio_options,
     )
 
 
@@ -310,6 +319,7 @@ class CRTTransferManager:
         self._semaphore.release()
 
     def _submit_transfer(self, request_type, call_args):
+        register_feature_id('S3_TRANSFER')
         on_done_after_calls = [self._release_semaphore]
         coordinator = CRTTransferCoordinator(
             transfer_id=self._id_counter,
@@ -626,7 +636,7 @@ class CRTTransferCoordinator:
     """A helper class for managing CRTTransferFuture"""
 
     def __init__(
-            self, transfer_id=None, s3_request=None, exception_translator=None
+        self, transfer_id=None, s3_request=None, exception_translator=None
     ):
         self.transfer_id = transfer_id
         self._exception_translator = exception_translator
@@ -856,19 +866,26 @@ class S3ClientArgsCreator:
 
         arn_handler = _S3ArnParamHandler()
         if (
-            (accesspoint_arn_details := arn_handler.handle_arn(call_args.bucket))
-            and accesspoint_arn_details['region'] == ""
-        ):
+            accesspoint_arn_details := arn_handler.handle_arn(call_args.bucket)
+        ) and accesspoint_arn_details['region'] == "":
             # Configure our region to `*` to propogate in `x-amz-region-set`
             # for multi-region support in MRAP accesspoints.
+            # use_double_uri_encode and should_normalize_uri_path are defaulted to be True
+            # But SDK already encoded the URI, and it's for S3, so set both to False
             make_request_args['signing_config'] = AwsSigningConfig(
                 algorithm=AwsSigningAlgorithm.V4_ASYMMETRIC,
                 region="*",
+                use_double_uri_encode=False,
+                should_normalize_uri_path=False,
             )
             call_args.bucket = accesspoint_arn_details['resource_name']
         elif is_s3express_bucket(call_args.bucket):
+            # use_double_uri_encode and should_normalize_uri_path are defaulted to be True
+            # But SDK already encoded the URI, and it's for S3, so set both to False
             make_request_args['signing_config'] = AwsSigningConfig(
-                algorithm=AwsSigningAlgorithm.V4_S3EXPRESS
+                algorithm=AwsSigningAlgorithm.V4_S3EXPRESS,
+                use_double_uri_encode=False,
+                should_normalize_uri_path=False,
             )
         return make_request_args
 
@@ -918,6 +935,7 @@ class _S3ArnParamHandler:
     purposes. This should be safe to remove once we properly integrate auth
     resolution from Botocore into the CRT transfer integration.
     """
+
     _RESOURCE_REGEX = re.compile(
         r'^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$'
     )
@@ -938,9 +956,9 @@ class _S3ArnParamHandler:
             self._add_resource_type_and_name(arn_details)
             return arn_details
         except InvalidArnException:
-                pass
+            pass
         return None
-    
+
     def _add_resource_type_and_name(self, arn_details):
         match = self._RESOURCE_REGEX.match(arn_details['resource'])
         if match:
diff -pruN 2.23.6-1/awscli/s3transfer/download.py 2.31.35-1/awscli/s3transfer/download.py
--- 2.23.6-1/awscli/s3transfer/download.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/download.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,13 @@ import heapq
 import logging
 import threading
 
+from botocore.exceptions import ClientError
 from s3transfer.compat import seekable
-from s3transfer.exceptions import RetriesExceededError
+from s3transfer.exceptions import (
+    RetriesExceededError,
+    S3DownloadFailedError,
+    S3ValidationError,
+)
 from s3transfer.futures import IN_MEMORY_DOWNLOAD_TAG
 from s3transfer.tasks import SubmissionTask, Task
 from s3transfer.utils import (
@@ -307,9 +312,7 @@ class DownloadSubmissionTask(SubmissionT
             if download_manager_cls.is_compatible(fileobj, osutil):
                 return download_manager_cls
         raise RuntimeError(
-            'Output {} of type: {} is not supported.'.format(
-                fileobj, type(fileobj)
-            )
+            f'Output {fileobj} of type: {type(fileobj)} is not supported.'
         )
 
     def _submit(
@@ -348,17 +351,23 @@ class DownloadSubmissionTask(SubmissionT
         :param bandwidth_limiter: The bandwidth limiter to use when
             downloading streams
         """
-        if transfer_future.meta.size is None:
-            # If a size was not provided figure out the size for the
-            # user.
+        if (
+            transfer_future.meta.size is None
+            or transfer_future.meta.etag is None
+        ):
             response = client.head_object(
                 Bucket=transfer_future.meta.call_args.bucket,
                 Key=transfer_future.meta.call_args.key,
                 **transfer_future.meta.call_args.extra_args,
             )
+            # If a size was not provided figure out the size for the
+            # user.
             transfer_future.meta.provide_transfer_size(
                 response['ContentLength']
             )
+            # Provide an etag to ensure a stored object is not modified
+            # during a multipart download.
+            transfer_future.meta.provide_object_etag(response.get('ETag'))
 
         download_output_manager = self._get_download_output_manager_cls(
             transfer_future, osutil
@@ -481,9 +490,12 @@ class DownloadSubmissionTask(SubmissionT
                 part_size, i, num_parts
             )
 
-            # Inject the Range parameter to the parameters to be passed in
-            # as extra args
-            extra_args = {'Range': range_parameter}
+            # Inject extra parameters to be passed in as extra args
+            extra_args = {
+                'Range': range_parameter,
+            }
+            if transfer_future.meta.etag is not None:
+                extra_args['IfMatch'] = transfer_future.meta.etag
             extra_args.update(call_args.extra_args)
             finalize_download_invoker.increment()
             # Submit the ranged downloads
@@ -569,6 +581,10 @@ class GetObjectTask(Task):
                 response = client.get_object(
                     Bucket=bucket, Key=key, **extra_args
                 )
+                self._validate_content_range(
+                    extra_args.get('Range'),
+                    response.get('ContentRange'),
+                )
                 streaming_body = StreamReaderProgress(
                     response['Body'], callbacks
                 )
@@ -595,6 +611,15 @@ class GetObjectTask(Task):
                     else:
                         return
                 return
+            except ClientError as e:
+                error_code = e.response.get('Error', {}).get('Code')
+                if error_code == "PreconditionFailed":
+                    raise S3DownloadFailedError(
+                        f'Contents of stored object "{key}" in bucket '
+                        f'"{bucket}" did not match expected ETag.'
+                    )
+                else:
+                    raise
             except S3_RETRYABLE_DOWNLOAD_ERRORS as e:
                 logger.debug(
                     "Retrying exception caught (%s), "
@@ -617,6 +642,27 @@ class GetObjectTask(Task):
     def _handle_io(self, download_output_manager, fileobj, chunk, index):
         download_output_manager.queue_file_io_task(fileobj, chunk, index)
 
+    def _validate_content_range(self, requested_range, content_range):
+        if not requested_range or not content_range:
+            return
+        # Unparsed `ContentRange` looks like `bytes 0-8388607/39542919`,
+        # where `0-8388607` is the fetched range and `39542919` is
+        # the total object size.
+        response_range, total_size = content_range.split('/')
+        # Subtract `1` because range is 0-indexed.
+        final_byte = str(int(total_size) - 1)
+        # If it's the last part, the requested range will not include
+        # the final byte, eg `bytes=33554432-`.
+        if requested_range.endswith('-'):
+            requested_range += final_byte
+        # Request looks like `bytes=0-8388607`.
+        # Parsed response looks like `bytes 0-8388607`.
+        if requested_range[6:] != response_range[6:]:
+            raise S3ValidationError(
+                f"Requested range: `{requested_range[6:]}` does not match "
+                f"content range in response: `{response_range[6:]}`"
+            )
+
 
 class ImmediatelyWriteIOGetObjectTask(GetObjectTask):
     """GetObjectTask that immediately writes to the provided file object
@@ -752,7 +798,7 @@ class DeferQueue:
 
     def __init__(self):
         self._writes = []
-        self._pending_offsets = set()
+        self._pending_offsets = {}
         self._next_offset = 0
 
     def request_writes(self, offset, data):
@@ -768,23 +814,49 @@ class DeferQueue:
         each method call.
 
         """
-        if offset < self._next_offset:
+        if offset + len(data) <= self._next_offset:
             # This is a request for a write that we've already
             # seen.  This can happen in the event of a retry
             # where if we retry at at offset N/2, we'll requeue
             # offsets 0-N/2 again.
             return []
         writes = []
+        if offset < self._next_offset:
+            # This is a special case where the write request contains
+            # both seen AND unseen data. This can happen in the case
+            # that we queue part of a chunk due to an incomplete read,
+            # then pop the incomplete data for writing, then we receive the retry
+            # for the incomplete read which contains both the previously-seen
+            # partial chunk followed by the rest of the chunk (unseen).
+            #
+            # In this case, we discard the bytes of the data we've already
+            # queued before, and only queue the unseen bytes.
+            seen_bytes = self._next_offset - offset
+            data = data[seen_bytes:]
+            offset = self._next_offset
         if offset in self._pending_offsets:
-            # We've already queued this offset so this request is
-            # a duplicate.  In this case we should ignore
-            # this request and prefer what's already queued.
-            return []
-        heapq.heappush(self._writes, (offset, data))
-        self._pending_offsets.add(offset)
-        while self._writes and self._writes[0][0] == self._next_offset:
-            next_write = heapq.heappop(self._writes)
-            writes.append({'offset': next_write[0], 'data': next_write[1]})
-            self._pending_offsets.remove(next_write[0])
-            self._next_offset += len(next_write[1])
+            queued_data = self._pending_offsets[offset]
+            if len(data) <= len(queued_data):
+                # We already have a write request queued with the same offset
+                # with at least as much data that is present in this
+                # request. In this case we should ignore this request
+                # and prefer what's already queued.
+                return []
+            else:
+                # We have a write request queued with the same offset,
+                # but this request contains more data. This can happen
+                # in the case of a retried request due to an incomplete
+                # read, followed by a retry containing the full response
+                # body. In this case, we should overwrite the queued
+                # request with this one since it contains more data.
+                self._pending_offsets[offset] = data
+        else:
+            heapq.heappush(self._writes, offset)
+            self._pending_offsets[offset] = data
+        while self._writes and self._writes[0] == self._next_offset:
+            next_write_offset = heapq.heappop(self._writes)
+            next_write = self._pending_offsets[next_write_offset]
+            writes.append({'offset': next_write_offset, 'data': next_write})
+            del self._pending_offsets[next_write_offset]
+            self._next_offset += len(next_write)
         return writes
diff -pruN 2.23.6-1/awscli/s3transfer/exceptions.py 2.31.35-1/awscli/s3transfer/exceptions.py
--- 2.23.6-1/awscli/s3transfer/exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,10 @@ class S3UploadFailedError(Exception):
     pass
 
 
+class S3DownloadFailedError(Exception):
+    pass
+
+
 class InvalidSubscriberMethodError(Exception):
     pass
 
@@ -35,3 +39,7 @@ class FatalError(CancelledError):
     """A CancelledError raised from an error in the TransferManager"""
 
     pass
+
+
+class S3ValidationError(Exception):
+    pass
diff -pruN 2.23.6-1/awscli/s3transfer/futures.py 2.31.35-1/awscli/s3transfer/futures.py
--- 2.23.6-1/awscli/s3transfer/futures.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/futures.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,7 @@ import threading
 from collections import namedtuple
 from concurrent import futures
 
+from botocore.context import get_context
 from s3transfer.compat import MAXINT
 from s3transfer.exceptions import CancelledError, TransferNotDoneError
 from s3transfer.utils import FunctionContainer, TaskSemaphore
@@ -126,6 +127,7 @@ class TransferMeta(BaseTransferMeta):
         self._transfer_id = transfer_id
         self._size = None
         self._user_context = {}
+        self._etag = None
 
     @property
     def call_args(self):
@@ -147,6 +149,11 @@ class TransferMeta(BaseTransferMeta):
         """A dictionary that requesters can store data in"""
         return self._user_context
 
+    @property
+    def etag(self):
+        """The etag of the stored object for validating multipart downloads"""
+        return self._etag
+
     def provide_transfer_size(self, size):
         """A method to provide the size of a transfer request
 
@@ -156,6 +163,15 @@ class TransferMeta(BaseTransferMeta):
         """
         self._size = size
 
+    def provide_object_etag(self, etag):
+        """A method to provide the etag of a transfer request
+
+        By providing this value, the TransferManager will validate
+        multipart downloads by supplying an IfMatch parameter with
+        the etag as the value to GetObject requests.
+        """
+        self._etag = etag
+
 
 class TransferCoordinator:
     """A helper class for managing TransferFuture"""
@@ -175,9 +191,7 @@ class TransferCoordinator:
         self._failure_cleanups_lock = threading.Lock()
 
     def __repr__(self):
-        return '{}(transfer_id={})'.format(
-            self.__class__.__name__, self.transfer_id
-        )
+        return f'{self.__class__.__name__}(transfer_id={self.transfer_id})'
 
     @property
     def exception(self):
@@ -295,8 +309,8 @@ class TransferCoordinator:
         with self._lock:
             if self.done():
                 raise RuntimeError(
-                    'Unable to transition from done state %s to non-done '
-                    'state %s.' % (self.status, desired_state)
+                    f'Unable to transition from done state {self.status} to non-done '
+                    f'state {desired_state}.'
                 )
             self._status = desired_state
 
@@ -316,9 +330,7 @@ class TransferCoordinator:
         :returns: A future representing the submitted task
         """
         logger.debug(
-            "Submitting task {} to executor {} for transfer request: {}.".format(
-                task, executor, self.transfer_id
-            )
+            f"Submitting task {task} to executor {executor} for transfer request: {self.transfer_id}."
         )
         future = executor.submit(task, tag=tag)
         # Add this created future to the list of associated future just
@@ -400,7 +412,7 @@ class TransferCoordinator:
         # We do not want a callback interrupting the process, especially
         # in the failure cleanups. So log and catch, the exception.
         except Exception:
-            logger.debug("Exception raised in %s." % callback, exc_info=True)
+            logger.debug(f"Exception raised in {callback}.", exc_info=True)
 
 
 class BoundedExecutor:
@@ -471,7 +483,9 @@ class BoundedExecutor:
             semaphore.release, task.transfer_id, acquire_token
         )
         # Submit the task to the underlying executor.
-        future = ExecutorFuture(self._executor.submit(task))
+        # Pass the current context to ensure child threads persist the
+        # parent thread's context.
+        future = ExecutorFuture(self._executor.submit(task, get_context()))
         # Add the Semaphore.release() callback to the future such that
         # it is invoked once the future completes.
         future.add_done_callback(release_callback)
@@ -505,6 +519,7 @@ class ExecutorFuture:
             than concurrent.futures.Future.add_done_callback that requires
             a single argument for the future.
         """
+
         # The done callback for concurrent.futures.Future will always pass a
         # the future in as the only argument. So we need to create the
         # proper signature wrapper that will invoke the callback provided.
diff -pruN 2.23.6-1/awscli/s3transfer/manager.py 2.31.35-1/awscli/s3transfer/manager.py
--- 2.23.6-1/awscli/s3transfer/manager.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/manager.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,6 +15,7 @@ import logging
 import re
 import threading
 
+from botocore.useragent import register_feature_id
 from s3transfer.bandwidth import BandwidthLimiter, LeakyBucket
 from s3transfer.constants import (
     ALLOWED_DOWNLOAD_ARGS,
@@ -154,8 +155,8 @@ class TransferConfig:
         for attr, attr_val in self.__dict__.items():
             if attr_val is not None and attr_val <= 0:
                 raise ValueError(
-                    'Provided parameter %s of value %s must be greater than '
-                    '0.' % (attr, attr_val)
+                    f'Provided parameter {attr} of value {attr_val} must be greater than '
+                    '0.'
                 )
 
 
@@ -190,12 +191,12 @@ class TransferManager:
     ]
 
     ALLOWED_UPLOAD_ARGS = (
-            _ALLOWED_SHARED_ARGS
-            + [
-                'ChecksumType',
-                'MpuObjectSize',
-            ]
-            + FULL_OBJECT_CHECKSUM_ARGS
+        _ALLOWED_SHARED_ARGS
+        + [
+            'ChecksumType',
+            'MpuObjectSize',
+        ]
+        + FULL_OBJECT_CHECKSUM_ARGS
     )
 
     ALLOWED_COPY_ARGS = _ALLOWED_SHARED_ARGS + [
@@ -502,16 +503,16 @@ class TransferManager:
                 match = pattern.match(bucket)
                 if match:
                     raise ValueError(
-                        'TransferManager methods do not support %s '
-                        'resource. Use direct client calls instead.' % resource
+                        f'TransferManager methods do not support {resource} '
+                        'resource. Use direct client calls instead.'
                     )
 
     def _validate_all_known_args(self, actual, allowed):
         for kwarg in actual:
             if kwarg not in allowed:
                 raise ValueError(
-                    "Invalid extra_args key '%s', "
-                    "must be one of: %s" % (kwarg, ', '.join(allowed))
+                    "Invalid extra_args key '{}', "
+                    "must be one of: {}".format(kwarg, ', '.join(allowed))
                 )
 
     def _add_operation_defaults(self, extra_args):
@@ -524,6 +525,7 @@ class TransferManager:
     def _submit_transfer(
         self, call_args, submission_task_cls, extra_main_kwargs=None
     ):
+        register_feature_id('S3_TRANSFER')
         if not extra_main_kwargs:
             extra_main_kwargs = {}
 
diff -pruN 2.23.6-1/awscli/s3transfer/subscribers.py 2.31.35-1/awscli/s3transfer/subscribers.py
--- 2.23.6-1/awscli/s3transfer/subscribers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/subscribers.py	2025-11-12 19:17:29.000000000 +0000
@@ -33,14 +33,13 @@ class BaseSubscriber:
             subscriber_method = getattr(cls, 'on_' + subscriber_type)
             if not callable(subscriber_method):
                 raise InvalidSubscriberMethodError(
-                    'Subscriber method %s must be callable.'
-                    % subscriber_method
+                    f'Subscriber method {subscriber_method} must be callable.'
                 )
 
             if not accepts_kwargs(subscriber_method):
                 raise InvalidSubscriberMethodError(
-                    'Subscriber method %s must accept keyword '
-                    'arguments (**kwargs)' % subscriber_method
+                    f'Subscriber method {subscriber_method} must accept keyword '
+                    'arguments (**kwargs)'
                 )
 
     def on_queued(self, future, **kwargs):
diff -pruN 2.23.6-1/awscli/s3transfer/tasks.py 2.31.35-1/awscli/s3transfer/tasks.py
--- 2.23.6-1/awscli/s3transfer/tasks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/tasks.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 import copy
 import logging
 
+from botocore.context import start_as_current_context
 from s3transfer.utils import get_callbacks
 
 logger = logging.getLogger(__name__)
@@ -96,11 +97,7 @@ class Task:
         main_kwargs_to_display = self._get_kwargs_with_params_to_include(
             self._main_kwargs, params_to_display
         )
-        return '{}(transfer_id={}, {})'.format(
-            self.__class__.__name__,
-            self._transfer_coordinator.transfer_id,
-            main_kwargs_to_display,
-        )
+        return f'{self.__class__.__name__}(transfer_id={self._transfer_coordinator.transfer_id}, {main_kwargs_to_display})'
 
     @property
     def transfer_id(self):
@@ -122,32 +119,33 @@ class Task:
             filtered_kwargs[param] = value
         return filtered_kwargs
 
-    def __call__(self):
+    def __call__(self, ctx=None):
         """The callable to use when submitting a Task to an executor"""
-        try:
-            # Wait for all of futures this task depends on.
-            self._wait_on_dependent_futures()
-            # Gather up all of the main keyword arguments for main().
-            # This includes the immediately provided main_kwargs and
-            # the values for pending_main_kwargs that source from the return
-            # values from the task's dependent futures.
-            kwargs = self._get_all_main_kwargs()
-            # If the task is not done (really only if some other related
-            # task to the TransferFuture had failed) then execute the task's
-            # main() method.
-            if not self._transfer_coordinator.done():
-                return self._execute_main(kwargs)
-        except Exception as e:
-            self._log_and_set_exception(e)
-        finally:
-            # Run any done callbacks associated to the task no matter what.
-            for done_callback in self._done_callbacks:
-                done_callback()
-
-            if self._is_final:
-                # If this is the final task announce that it is done if results
-                # are waiting on its completion.
-                self._transfer_coordinator.announce_done()
+        with start_as_current_context(ctx):
+            try:
+                # Wait for all of futures this task depends on.
+                self._wait_on_dependent_futures()
+                # Gather up all of the main keyword arguments for main().
+                # This includes the immediately provided main_kwargs and
+                # the values for pending_main_kwargs that source from the return
+                # values from the task's dependent futures.
+                kwargs = self._get_all_main_kwargs()
+                # If the task is not done (really only if some other related
+                # task to the TransferFuture had failed) then execute the task's
+                # main() method.
+                if not self._transfer_coordinator.done():
+                    return self._execute_main(kwargs)
+            except Exception as e:
+                self._log_and_set_exception(e)
+            finally:
+                # Run any done callbacks associated to the task no matter what.
+                for done_callback in self._done_callbacks:
+                    done_callback()
+
+                if self._is_final:
+                    # If this is the final task announce that it is done if results
+                    # are waiting on its completion.
+                    self._transfer_coordinator.announce_done()
 
     def _execute_main(self, kwargs):
         # Do not display keyword args that should not be printed, especially
diff -pruN 2.23.6-1/awscli/s3transfer/upload.py 2.31.35-1/awscli/s3transfer/upload.py
--- 2.23.6-1/awscli/s3transfer/upload.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/upload.py	2025-11-12 19:17:29.000000000 +0000
@@ -557,9 +557,7 @@ class UploadSubmissionTask(SubmissionTas
             if upload_manager_cls.is_compatible(fileobj):
                 return upload_manager_cls
         raise RuntimeError(
-            'Input {} of type: {} is not supported.'.format(
-                fileobj, type(fileobj)
-            )
+            f'Input {fileobj} of type: {type(fileobj)} is not supported.'
         )
 
     def _submit(
@@ -691,7 +689,7 @@ class UploadSubmissionTask(SubmissionTas
                     'client': client,
                     'bucket': call_args.bucket,
                     'key': call_args.key,
-                    'extra_args':create_multipart_extra_args,
+                    'extra_args': create_multipart_extra_args,
                 },
             ),
         )
@@ -830,7 +828,7 @@ class UploadPartTask(Task):
                 UploadId=upload_id,
                 PartNumber=part_number,
                 Body=body,
-                **extra_args
+                **extra_args,
             )
         etag = response['ETag']
         part_metadata = {'ETag': etag, 'PartNumber': part_number}
diff -pruN 2.23.6-1/awscli/s3transfer/utils.py 2.31.35-1/awscli/s3transfer/utils.py
--- 2.23.6-1/awscli/s3transfer/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/s3transfer/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,6 @@ from collections import defaultdict
 from botocore.exceptions import IncompleteReadError, ReadTimeoutError
 from botocore.httpchecksum import DEFAULT_CHECKSUM_ALGORITHM, AwsChunkedWrapper
 from botocore.utils import is_s3express_bucket
-
 from s3transfer.compat import SOCKET_ERROR, fallocate, rename_file
 from s3transfer.constants import FULL_OBJECT_CHECKSUM_ARGS
 
@@ -32,8 +31,8 @@ MAX_PARTS = 10000
 # The maximum file size you can upload via S3 per request.
 # See: http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html
 # and: http://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html
-MAX_SINGLE_UPLOAD_SIZE = 5 * (1024 ** 3)
-MIN_UPLOAD_CHUNKSIZE = 5 * (1024 ** 2)
+MAX_SINGLE_UPLOAD_SIZE = 5 * (1024**3)
+MIN_UPLOAD_CHUNKSIZE = 5 * (1024**2)
 logger = logging.getLogger(__name__)
 
 
@@ -194,9 +193,7 @@ class FunctionContainer:
         self._kwargs = kwargs
 
     def __repr__(self):
-        return 'Function: {} with args {} and kwargs {}'.format(
-            self._func, self._args, self._kwargs
-        )
+        return f'Function: {self._func} with args {self._args} and kwargs {self._kwargs}'
 
     def __call__(self):
         return self._func(*self._args, **self._kwargs)
@@ -639,7 +636,7 @@ class TaskSemaphore:
         """
         logger.debug("Acquiring %s", tag)
         if not self._semaphore.acquire(blocking):
-            raise NoResourcesAvailable("Cannot acquire tag '%s'" % tag)
+            raise NoResourcesAvailable(f"Cannot acquire tag '{tag}'")
 
     def release(self, tag, acquire_token):
         """Release the semaphore
@@ -697,7 +694,7 @@ class SlidingWindowSemaphore(TaskSemapho
         try:
             if self._count == 0:
                 if not blocking:
-                    raise NoResourcesAvailable("Cannot acquire tag '%s'" % tag)
+                    raise NoResourcesAvailable(f"Cannot acquire tag '{tag}'")
                 else:
                     while self._count == 0:
                         self._condition.wait()
@@ -719,7 +716,7 @@ class SlidingWindowSemaphore(TaskSemapho
         self._condition.acquire()
         try:
             if tag not in self._tag_sequences:
-                raise ValueError("Attempted to release unknown tag: %s" % tag)
+                raise ValueError(f"Attempted to release unknown tag: {tag}")
             max_sequence = self._tag_sequences[tag]
             if self._lowest_sequence[tag] == sequence_number:
                 # We can immediately process this request and free up
@@ -746,7 +743,7 @@ class SlidingWindowSemaphore(TaskSemapho
             else:
                 raise ValueError(
                     "Attempted to release unknown sequence number "
-                    "%s for tag: %s" % (sequence_number, tag)
+                    f"{sequence_number} for tag: {tag}"
                 )
         finally:
             self._condition.release()
@@ -784,13 +781,13 @@ class ChunksizeAdjuster:
         if current_chunksize > self.max_size:
             logger.debug(
                 "Chunksize greater than maximum chunksize. "
-                "Setting to %s from %s." % (self.max_size, current_chunksize)
+                f"Setting to {self.max_size} from {current_chunksize}."
             )
             return self.max_size
         elif current_chunksize < self.min_size:
             logger.debug(
                 "Chunksize less than minimum chunksize. "
-                "Setting to %s from %s." % (self.min_size, current_chunksize)
+                f"Setting to {self.min_size} from {current_chunksize}."
             )
             return self.min_size
         else:
@@ -807,8 +804,7 @@ class ChunksizeAdjuster:
         if chunksize != current_chunksize:
             logger.debug(
                 "Chunksize would result in the number of parts exceeding the "
-                "maximum. Setting to %s from %s."
-                % (chunksize, current_chunksize)
+                f"maximum. Setting to {chunksize} from {current_chunksize}."
             )
 
         return chunksize
@@ -825,7 +821,7 @@ def add_s3express_defaults(bucket, extra
 
 
 def set_default_checksum_algorithm(extra_args):
-     """Set the default algorithm if not specified by the user."""
-     if any(checksum in extra_args for checksum in FULL_OBJECT_CHECKSUM_ARGS):
-         return
-     extra_args.setdefault("ChecksumAlgorithm", DEFAULT_CHECKSUM_ALGORITHM)
+    """Set the default algorithm if not specified by the user."""
+    if any(checksum in extra_args for checksum in FULL_OBJECT_CHECKSUM_ARGS):
+        return
+    extra_args.setdefault("ChecksumAlgorithm", DEFAULT_CHECKSUM_ALGORITHM)
diff -pruN 2.23.6-1/awscli/schema.py 2.31.35-1/awscli/schema.py
--- 2.23.6-1/awscli/schema.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/schema.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,7 +17,7 @@ class ParameterRequiredError(ValueError)
     pass
 
 
-class SchemaTransformer(object):
+class SchemaTransformer:
     """
     Transforms a custom argument parameter schema into an internal
     model representation so that it can be treated like a normal
@@ -63,6 +63,7 @@ class SchemaTransformer(object):
         $ aws foo bar --baz arg1=Value1,arg2=5 arg1=Value2
 
     """
+
     JSON_SCHEMA_TO_AWS_TYPES = {
         'object': 'structure',
         'array': 'list',
@@ -116,7 +117,8 @@ class SchemaTransformer(object):
         for key, value in schema['properties'].items():
             current_type_name = self._json_schema_to_aws_type(value)
             current_shape_name = self._shape_namer.new_shape_name(
-                current_type_name)
+                current_type_name
+            )
             members[key] = {'shape': current_shape_name}
             if value.get('required', False):
                 required_members.append(key)
@@ -161,7 +163,7 @@ class SchemaTransformer(object):
         return self.JSON_SCHEMA_TO_AWS_TYPES.get(type_name, type_name)
 
 
-class ShapeNameGenerator(object):
+class ShapeNameGenerator:
     def __init__(self):
         self._name_cache = defaultdict(int)
 
diff -pruN 2.23.6-1/awscli/shorthand.py 2.31.35-1/awscli/shorthand.py
--- 2.23.6-1/awscli/shorthand.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/shorthand.py	2025-11-12 19:17:29.000000000 +0000
@@ -38,6 +38,7 @@ necessary to maintain backwards compatib
 ``BackCompatVisitor`` class.
 
 """
+
 import re
 import string
 
@@ -47,7 +48,7 @@ from awscli.utils import is_document_typ
 _EOF = object()
 
 
-class _NamedRegex(object):
+class _NamedRegex:
     def __init__(self, name, regex_str):
         self.name = name
         self.regex = re.compile(regex_str, re.UNICODE)
@@ -57,25 +58,24 @@ class _NamedRegex(object):
 
 
 class ShorthandParseError(Exception):
-
     def _error_location(self):
         consumed, remaining, num_spaces = self.value, '', self.index
-        if '\n' in self.value[:self.index]:
+        if '\n' in self.value[: self.index]:
             # If there's newlines in the consumed expression, we want
             # to make sure we're only counting the spaces
             # from the last newline:
             # foo=bar,\n
             # bar==baz
             #     ^
-            last_newline = self.value[:self.index].rindex('\n')
+            last_newline = self.value[: self.index].rindex('\n')
             num_spaces = self.index - last_newline - 1
-        if '\n' in self.value[self.index:]:
+        if '\n' in self.value[self.index :]:
             # If there's newline in the remaining, divide value
             # into consumed and remainig
             # foo==bar,\n
             #     ^
             # bar=baz
-            next_newline = self.index + self.value[self.index:].index('\n')
+            next_newline = self.index + self.value[self.index :].index('\n')
             consumed = self.value[:next_newline]
             remaining = self.value[next_newline:]
         return '%s\n%s%s' % (consumed, (' ' * num_spaces) + '^', remaining)
@@ -91,10 +91,11 @@ class ShorthandParseSyntaxError(Shorthan
         super(ShorthandParseSyntaxError, self).__init__(msg)
 
     def _construct_msg(self):
-        msg = (
-            "Expected: '%s', received: '%s' for input:\n"
-            "%s"
-        ) % (self.expected, self.actual, self._error_location())
+        msg = ("Expected: '%s', received: '%s' for input:\n %s") % (
+            self.expected,
+            self.actual,
+            self._error_location(),
+        )
         return msg
 
 
@@ -119,7 +120,7 @@ class DocumentTypesNotSupportedError(Exc
     pass
 
 
-class ShorthandParser(object):
+class ShorthandParser:
     """Parses shorthand syntax in the CLI.
 
     Note that this parser does not rely on any JSON models to control
@@ -135,20 +136,14 @@ class ShorthandParser(object):
     _ESCAPED_COMMA = '(\\\\,)'
     _FIRST_VALUE = _NamedRegex(
         'first',
-        u'({escaped_comma}|[{start_word}])'
-        u'({escaped_comma}|[{follow_chars}])*'.format(
-            escaped_comma=_ESCAPED_COMMA,
-            start_word=_START_WORD,
-            follow_chars=_FIRST_FOLLOW_CHARS,
-        ))
+        f'({_ESCAPED_COMMA}|[{_START_WORD}])'
+        f'({_ESCAPED_COMMA}|[{_FIRST_FOLLOW_CHARS}])*',
+    )
     _SECOND_VALUE = _NamedRegex(
         'second',
-        u'({escaped_comma}|[{start_word}])'
-        u'({escaped_comma}|[{follow_chars}])*'.format(
-            escaped_comma=_ESCAPED_COMMA,
-            start_word=_START_WORD,
-            follow_chars=_SECOND_FOLLOW_CHARS,
-        ))
+        f'({_ESCAPED_COMMA}|[{_START_WORD}])'
+        f'({_ESCAPED_COMMA}|[{_SECOND_FOLLOW_CHARS}])*',
+    )
 
     def __init__(self):
         self._tokens = []
@@ -213,7 +208,7 @@ class ShorthandParser(object):
             if self._current() not in valid_chars:
                 break
             self._index += 1
-        return self._input_value[start:self._index]
+        return self._input_value[start : self._index]
 
     def _values(self):
         # values = csv-list / explicit-list / hash-literal
@@ -275,11 +270,15 @@ class ShorthandParser(object):
         return csv_list
 
     def _value(self):
-        result = self._FIRST_VALUE.match(self._input_value[self._index:])
+        result = self._FIRST_VALUE.match(self._input_value[self._index :])
         if result is not None:
             consumed = self._consume_matched_regex(result)
             processed = consumed.replace('\\,', ',').rstrip()
-            return self._resolve_paramfiles(processed) if self._should_resolve_paramfiles else processed
+            return (
+                self._resolve_paramfiles(processed)
+                if self._should_resolve_paramfiles
+                else processed
+            )
         return ''
 
     def _explicit_list(self):
@@ -339,7 +338,11 @@ class ShorthandParser(object):
         # val-escaped-single  = %x20-26 / %x28-7F / escaped-escape /
         #                       (escape single-quote)
         processed = self._consume_quoted(self._SINGLE_QUOTED, escaped_char="'")
-        return self._resolve_paramfiles(processed) if self._should_resolve_paramfiles else processed
+        return (
+            self._resolve_paramfiles(processed)
+            if self._should_resolve_paramfiles
+            else processed
+        )
 
     def _consume_quoted(self, regex, escaped_char=None):
         value = self._must_consume_regex(regex)[1:-1]
@@ -350,7 +353,11 @@ class ShorthandParser(object):
 
     def _double_quoted_value(self):
         processed = self._consume_quoted(self._DOUBLE_QUOTED, escaped_char='"')
-        return self._resolve_paramfiles(processed) if self._should_resolve_paramfiles else processed
+        return (
+            self._resolve_paramfiles(processed)
+            if self._should_resolve_paramfiles
+            else processed
+        )
 
     def _second_value(self):
         if self._current() == "'":
@@ -360,7 +367,11 @@ class ShorthandParser(object):
         else:
             consumed = self._must_consume_regex(self._SECOND_VALUE)
             processed = consumed.replace('\\,', ',').rstrip()
-            return self._resolve_paramfiles(processed) if self._should_resolve_paramfiles else processed
+            return (
+                self._resolve_paramfiles(processed)
+                if self._should_resolve_paramfiles
+                else processed
+            )
 
     def _resolve_paramfiles(self, val):
         if (paramfile := get_paramfile(val, LOCAL_PREFIX_MAP)) is not None:
@@ -371,27 +382,30 @@ class ShorthandParser(object):
         if consume_whitespace:
             self._consume_whitespace()
         if self._index >= len(self._input_value):
-            raise ShorthandParseSyntaxError(self._input_value, char,
-                                            'EOF', self._index)
+            raise ShorthandParseSyntaxError(
+                self._input_value, char, 'EOF', self._index
+            )
         actual = self._input_value[self._index]
         if actual != char:
-            raise ShorthandParseSyntaxError(self._input_value, char,
-                                            actual, self._index)
+            raise ShorthandParseSyntaxError(
+                self._input_value, char, actual, self._index
+            )
         self._index += 1
         if consume_whitespace:
             self._consume_whitespace()
 
     def _must_consume_regex(self, regex):
-        result = regex.match(self._input_value[self._index:])
+        result = regex.match(self._input_value[self._index :])
         if result is not None:
             return self._consume_matched_regex(result)
-        raise ShorthandParseSyntaxError(self._input_value, '<%s>' % regex.name,
-                                        '<none>', self._index)
+        raise ShorthandParseSyntaxError(
+            self._input_value, '<%s>' % regex.name, '<none>', self._index
+        )
 
     def _consume_matched_regex(self, result):
         start, end = result.span()
-        v = self._input_value[self._index+start:self._index+end]
-        self._index += (end - start)
+        v = self._input_value[self._index + start : self._index + end]
+        self._index += end - start
         return v
 
     def _current(self):
@@ -413,21 +427,23 @@ class ShorthandParser(object):
             self._index += 1
 
 
-class ModelVisitor(object):
+class ModelVisitor:
     def visit(self, params, model):
         self._visit({}, model, '', params)
 
     def _visit(self, parent, shape, name, value):
-        method = getattr(self, '_visit_%s' % shape.type_name,
-                         self._visit_scalar)
+        method = getattr(
+            self, '_visit_%s' % shape.type_name, self._visit_scalar
+        )
         method(parent, shape, name, value)
 
     def _visit_structure(self, parent, shape, name, value):
         if not isinstance(value, dict):
             return
         for member_name, member_shape in shape.members.items():
-            self._visit(value, member_shape, member_name,
-                        value.get(member_name))
+            self._visit(
+                value, member_shape, member_name, value.get(member_name)
+            )
 
     def _visit_list(self, parent, shape, name, value):
         if not isinstance(value, list):
@@ -453,8 +469,9 @@ class BackCompatVisitor(ModelVisitor):
             return
         for member_name, member_shape in shape.members.items():
             try:
-                self._visit(value, member_shape, member_name,
-                            value.get(member_name))
+                self._visit(
+                    value, member_shape, member_name, value.get(member_name)
+                )
             except DocumentTypesNotSupportedError:
                 # Catch and propagate the document type error to a better
                 # error message as when the original error is thrown there is
@@ -474,7 +491,8 @@ class BackCompatVisitor(ModelVisitor):
                 parent[name] = [value]
         else:
             return super(BackCompatVisitor, self)._visit_list(
-                parent, shape, name, value)
+                parent, shape, name, value
+            )
 
     def _visit_scalar(self, parent, shape, name, value):
         if value is None:
diff -pruN 2.23.6-1/awscli/table.py 2.31.35-1/awscli/table.py
--- 2.23.6-1/awscli/table.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/table.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
 import struct
+import sys
 import unicodedata
 
 import colorama
 
 from awscli.utils import is_a_tty
 
-
 # `autoreset` allows us to not have to sent reset sequences for every
 # string. `strip` lets us preserve color when redirecting.
 COLORAMA_KWARGS = {
@@ -35,28 +34,32 @@ def get_text_length(text):
     # * F(Fullwidth)
     # * W(Wide)
     text = str(text)
-    return sum(2 if unicodedata.east_asian_width(char) in 'WFA' else 1
-               for char in text)
+    return sum(
+        2 if unicodedata.east_asian_width(char) in 'WFA' else 1
+        for char in text
+    )
 
 
 def determine_terminal_width(default_width=80):
     # If we can't detect the terminal width, the default_width is returned.
     try:
-        from termios import TIOCGWINSZ
         from fcntl import ioctl
+        from termios import TIOCGWINSZ
     except ImportError:
         return default_width
     try:
-        height, width = struct.unpack('hhhh', ioctl(sys.stdout,
-                                                    TIOCGWINSZ, '\000' * 8))[0:2]
+        height, width = struct.unpack(
+            'hhhh', ioctl(sys.stdout, TIOCGWINSZ, '\000' * 8)
+        )[0:2]
     except Exception:
         return default_width
     else:
         return width
 
 
-def center_text(text, length=80, left_edge='|', right_edge='|',
-                text_length=None):
+def center_text(
+    text, length=80, left_edge='|', right_edge='|', text_length=None
+):
     """Center text with specified edge chars.
 
     You can pass in the length of the text as an arg, otherwise it is computed
@@ -77,15 +80,24 @@ def center_text(text, length=80, left_ed
     return final
 
 
-def align_left(text, length, left_edge='|', right_edge='|', text_length=None,
-               left_padding=2):
+def align_left(
+    text,
+    length,
+    left_edge='|',
+    right_edge='|',
+    text_length=None,
+    left_padding=2,
+):
     """Left align text."""
     # postcondition: get_text_length(returned_text) == length
     if text_length is None:
         text_length = get_text_length(text)
     computed_length = (
-        text_length + left_padding + \
-        get_text_length(left_edge) + get_text_length(right_edge))
+        text_length
+        + left_padding
+        + get_text_length(left_edge)
+        + get_text_length(right_edge)
+    )
     if length - computed_length >= 0:
         padding = left_padding
     else:
@@ -125,9 +137,10 @@ def convert_to_vertical_table(sections):
             sections[i] = new_section
 
 
-class IndentedStream(object):
-    def __init__(self, stream, indent_level, left_indent_char='|',
-                 right_indent_char='|'):
+class IndentedStream:
+    def __init__(
+        self, stream, indent_level, left_indent_char='|', right_indent_char='|'
+    ):
         self._stream = stream
         self._indent_level = indent_level
         self._left_indent_char = left_indent_char
@@ -146,7 +159,7 @@ class IndentedStream(object):
         return getattr(self._stream, attr)
 
 
-class Styler(object):
+class Styler:
     def style_title(self, text):
         return text
 
@@ -167,25 +180,39 @@ class ColorizedStyler(Styler):
     def style_title(self, text):
         # Originally bold + underline
         return text
-        #return colorama.Style.BOLD + text + colorama.Style.RESET_ALL
+        # return colorama.Style.BOLD + text + colorama.Style.RESET_ALL
 
     def style_header_column(self, text):
         # Originally underline
         return text
 
     def style_row_element(self, text):
-        return (colorama.Style.BRIGHT + colorama.Fore.BLUE +
-                text + colorama.Style.RESET_ALL)
+        return (
+            colorama.Style.BRIGHT
+            + colorama.Fore.BLUE
+            + text
+            + colorama.Style.RESET_ALL
+        )
 
     def style_indentation_char(self, text):
-        return (colorama.Style.DIM + colorama.Fore.YELLOW +
-                text + colorama.Style.RESET_ALL)
-
-
-class MultiTable(object):
-    def __init__(self, terminal_width=None, initial_section=True,
-                 column_separator='|', terminal=None,
-                 styler=None, auto_reformat=True):
+        return (
+            colorama.Style.DIM
+            + colorama.Fore.YELLOW
+            + text
+            + colorama.Style.RESET_ALL
+        )
+
+
+class MultiTable:
+    def __init__(
+        self,
+        terminal_width=None,
+        initial_section=True,
+        column_separator='|',
+        terminal=None,
+        styler=None,
+        auto_reformat=True,
+    ):
         self._auto_reformat = auto_reformat
         if initial_section:
             self._current_section = Section()
@@ -238,16 +265,22 @@ class MultiTable(object):
             return self._auto_reformat
 
     def _calculate_max_width(self):
-        max_width = max(s.total_width(padding=4, with_border=True,
-                                      outer_padding=s.indent_level)
-                        for s in self._sections)
+        max_width = max(
+            s.total_width(
+                padding=4, with_border=True, outer_padding=s.indent_level
+            )
+            for s in self._sections
+        )
         return max_width
 
     def _render_section(self, section, max_width, stream):
-        stream = IndentedStream(stream, section.indent_level,
-                                self._styler.style_indentation_char('|'),
-                                self._styler.style_indentation_char('|'))
-        max_width -= (section.indent_level * 2)
+        stream = IndentedStream(
+            stream,
+            section.indent_level,
+            self._styler.style_indentation_char('|'),
+            self._styler.style_indentation_char('|'),
+        )
+        max_width -= section.indent_level * 2
         self._render_title(section, max_width, stream)
         self._render_column_titles(section, max_width, stream)
         self._render_rows(section, max_width, stream)
@@ -258,8 +291,12 @@ class MultiTable(object):
         # bottom_border:  ----------------------------
         if section.title:
             title = self._styler.style_title(section.title)
-            stream.write(center_text(title, max_width, '|', '|',
-                                     get_text_length(section.title)) + '\n')
+            stream.write(
+                center_text(
+                    title, max_width, '|', '|', get_text_length(section.title)
+                )
+                + '\n'
+            )
             if not section.headers and not section.rows:
                 stream.write('+%s+' % ('-' * (max_width - 2)) + '\n')
 
@@ -268,8 +305,9 @@ class MultiTable(object):
             return
         # In order to render the column titles we need to know
         # the width of each of the columns.
-        widths = section.calculate_column_widths(padding=4,
-                                                 max_width=max_width)
+        widths = section.calculate_column_widths(
+            padding=4, max_width=max_width
+        )
         # TODO: Built a list instead of +=, it's more efficient.
         current = ''
         length_so_far = 0
@@ -283,9 +321,13 @@ class MultiTable(object):
                 first = False
             else:
                 left_edge = ''
-            current += center_text(text=stylized_header, length=width,
-                                   left_edge=left_edge, right_edge='|',
-                                   text_length=get_text_length(header))
+            current += center_text(
+                text=stylized_header,
+                length=width,
+                left_edge=left_edge,
+                right_edge='|',
+                text_length=get_text_length(header),
+            )
             length_so_far += width
         self._write_line_break(stream, widths)
         stream.write(current + '\n')
@@ -307,8 +349,9 @@ class MultiTable(object):
     def _render_rows(self, section, max_width, stream):
         if not section.rows:
             return
-        widths = section.calculate_column_widths(padding=4,
-                                                 max_width=max_width)
+        widths = section.calculate_column_widths(
+            padding=4, max_width=max_width
+        )
         if not widths:
             return
         self._write_line_break(stream, widths)
@@ -325,16 +368,19 @@ class MultiTable(object):
                 else:
                     left_edge = ''
                 stylized = self._styler.style_row_element(element)
-                current += align_left(text=stylized, length=width,
-                                      left_edge=left_edge,
-                                      right_edge=self._column_separator,
-                                      text_length=get_text_length(element))
+                current += align_left(
+                    text=stylized,
+                    length=width,
+                    left_edge=left_edge,
+                    right_edge=self._column_separator,
+                    text_length=get_text_length(element),
+                )
                 length_so_far += width
             stream.write(current + '\n')
         self._write_line_break(stream, widths)
 
 
-class Section(object):
+class Section:
     def __init__(self):
         self.title = ''
         self.headers = []
@@ -344,8 +390,10 @@ class Section(object):
         self._max_widths = []
 
     def __repr__(self):
-        return ("Section(title=%s, headers=%s, indent_level=%s, num_rows=%s)" %
-                (self.title, self.headers, self.indent_level, len(self.rows)))
+        return (
+            "Section(title=%s, headers=%s, indent_level=%s, num_rows=%s)"
+            % (self.title, self.headers, self.indent_level, len(self.rows))
+        )
 
     def calculate_column_widths(self, padding=0, max_width=None):
         # postcondition: sum(widths) == max_width
@@ -385,8 +433,13 @@ class Section(object):
         if with_border:
             total += border_padding
         total += outer_padding + outer_padding
-        return max(get_text_length(self.title) + border_padding + outer_padding +
-                   outer_padding, total)
+        return max(
+            get_text_length(self.title)
+            + border_padding
+            + outer_padding
+            + outer_padding,
+            total,
+        )
 
     def add_title(self, title):
         self.title = title
@@ -404,8 +457,10 @@ class Section(object):
         if self._num_cols is None:
             self._num_cols = len(row)
         if len(row) != self._num_cols:
-            raise ValueError("Row should have %s elements, instead "
-                             "it has %s" % (self._num_cols, len(row)))
+            raise ValueError(
+                "Row should have %s elements, instead "
+                "it has %s" % (self._num_cols, len(row))
+            )
         row = self._format_row(row)
         self.rows.append(row)
         self._update_max_widths(row)
@@ -418,4 +473,6 @@ class Section(object):
             self._max_widths = [get_text_length(el) for el in row]
         else:
             for i, el in enumerate(row):
-                self._max_widths[i] = max(get_text_length(el), self._max_widths[i])
+                self._max_widths[i] = max(
+                    get_text_length(el), self._max_widths[i]
+                )
diff -pruN 2.23.6-1/awscli/telemetry.py 2.31.35-1/awscli/telemetry.py
--- 2.23.6-1/awscli/telemetry.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/awscli/telemetry.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,311 @@
+# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import io
+import os
+import sqlite3
+import sys
+import threading
+import time
+import uuid
+from dataclasses import dataclass
+from functools import cached_property
+from pathlib import Path
+
+from botocore.compat import get_md5
+from botocore.exceptions import MD5UnavailableError
+from botocore.useragent import UserAgentComponent
+
+from awscli.compat import is_windows
+from awscli.utils import add_component_to_user_agent_extra
+
+_CACHE_DIR = Path.home() / '.aws' / 'cli' / 'cache'
+_DATABASE_FILENAME = 'session.db'
+_SESSION_LENGTH_SECONDS = 60 * 30
+_SESSION_ID_LENGTH = 12
+
+
+def _get_checksum():
+    hashlib_params = {"usedforsecurity": False}
+    try:
+        checksum = get_md5(**hashlib_params)
+    except MD5UnavailableError:
+        import hashlib
+
+        checksum = hashlib.sha256(**hashlib_params)
+    return checksum
+
+
+@dataclass
+class CLISessionData:
+    key: str
+    session_id: str
+    timestamp: int
+
+
+class CLISessionDatabaseConnection:
+    _CREATE_TABLE = """
+        CREATE TABLE IF NOT EXISTS session (
+          key TEXT PRIMARY KEY,
+          session_id TEXT NOT NULL,
+          timestamp INTEGER NOT NULL
+        )
+    """
+    _CREATE_HOST_ID_TABLE = """
+        CREATE TABLE IF NOT EXISTS host_id (
+          key INTEGER PRIMARY KEY,
+          id TEXT UNIQUE NOT NULL
+        )
+    """
+    _CHECK_HOST_ID = """
+        SELECT COUNT(*) FROM host_id
+    """
+    _INSERT_HOST_ID = """
+        INSERT OR IGNORE INTO host_id (
+            key, id
+        ) VALUES (?, ?)
+    """
+    _ENABLE_WAL = 'PRAGMA journal_mode=WAL'
+
+    def __init__(self, connection=None):
+        self._connection = connection or sqlite3.connect(
+            _CACHE_DIR / _DATABASE_FILENAME,
+            check_same_thread=False,
+            isolation_level=None,
+        )
+        self._ensure_cache_dir()
+        self._ensure_database_setup()
+
+    def execute(self, query, *parameters):
+        try:
+            return self._connection.execute(query, *parameters)
+        except sqlite3.OperationalError:
+            # Process timed out waiting for database lock.
+            # Return any empty `Cursor` object instead of
+            # raising an exception.
+            return sqlite3.Cursor(self._connection)
+
+    def _ensure_cache_dir(self):
+        _CACHE_DIR.mkdir(parents=True, exist_ok=True)
+
+    def _ensure_database_setup(self):
+        self._create_session_table()
+        self._create_host_id_table()
+        self._ensure_host_id()
+        self._try_to_enable_wal()
+
+    def _create_session_table(self):
+        self.execute(self._CREATE_TABLE)
+
+    def _create_host_id_table(self):
+        self.execute(self._CREATE_HOST_ID_TABLE)
+
+    def _ensure_host_id(self):
+        cur = self.execute(self._CHECK_HOST_ID)
+        host_id_ct = cur.fetchone()[0]
+        if host_id_ct == 0:
+            self.execute(
+                self._INSERT_HOST_ID,
+                # Hardcode `0` as primary key to ensure
+                # there's only ever 1 host id in the table.
+                (
+                    0,
+                    str(uuid.uuid4()),
+                ),
+            )
+
+    def _try_to_enable_wal(self):
+        try:
+            self.execute(self._ENABLE_WAL)
+        except sqlite3.Error:
+            # This is just a performance enhancement so it is optional. Not all
+            # systems will have a sqlite compiled with the WAL enabled.
+            pass
+
+
+class CLISessionDatabaseWriter:
+    _WRITE_RECORD = """
+        INSERT OR REPLACE INTO session (
+            key, session_id, timestamp
+        ) VALUES (?, ?, ?)
+    """
+
+    def __init__(self, connection):
+        self._connection = connection
+
+    def write(self, data):
+        self._connection.execute(
+            self._WRITE_RECORD,
+            (
+                data.key,
+                data.session_id,
+                data.timestamp,
+            ),
+        )
+
+
+class CLISessionDatabaseReader:
+    _READ_RECORD = """
+        SELECT *
+        FROM session
+        WHERE key = ?
+    """
+    _READ_HOST_ID = """
+        SELECT id
+        FROM host_id
+        WHERE key = 0
+    """
+
+    def __init__(self, connection):
+        self._connection = connection
+
+    def read(self, key):
+        cursor = self._connection.execute(self._READ_RECORD, (key,))
+        result = cursor.fetchone()
+        if result is None:
+            return
+        return CLISessionData(*result)
+
+    def read_host_id(self):
+        cursor = self._connection.execute(self._READ_HOST_ID)
+        return cursor.fetchone()[0]
+
+
+class CLISessionDatabaseSweeper:
+    _DELETE_RECORDS = """
+        DELETE FROM session
+        WHERE timestamp < ?
+    """
+
+    def __init__(self, connection):
+        self._connection = connection
+
+    def sweep(self, timestamp):
+        try:
+            self._connection.execute(self._DELETE_RECORDS, (timestamp,))
+        except Exception:
+            # This is just a background cleanup task. No need to
+            # handle it or direct to stderr.
+            return
+
+
+class CLISessionGenerator:
+    def generate_session_id(self, host_id, tty, timestamp):
+        return self._generate_checksum(host_id, tty, timestamp)
+
+    def generate_cache_key(self, host_id, tty):
+        return self._generate_checksum(host_id, tty)
+
+    def _generate_checksum(self, *args):
+        checksum = _get_checksum()
+        str_to_hash = ""
+        for arg in args:
+            if arg is not None:
+                str_to_hash += str(arg)
+        checksum.update(str_to_hash.encode('utf-8'))
+        return checksum.hexdigest()[:_SESSION_ID_LENGTH]
+
+
+class CLISessionOrchestrator:
+    def __init__(self, generator, writer, reader, sweeper):
+        self._generator = generator
+        self._writer = writer
+        self._reader = reader
+        self._sweeper = sweeper
+
+        self._sweep_cache()
+
+    @cached_property
+    def cache_key(self):
+        return self._generator.generate_cache_key(self._host_id, self._tty)
+
+    @cached_property
+    def _session_id(self):
+        return self._generator.generate_session_id(
+            self._host_id, self._tty, self._timestamp
+        )
+
+    @cached_property
+    def session_id(self):
+        if (cached_data := self._reader.read(self.cache_key)) is not None:
+            # Cache hit, but session id is expired. Generate new id and update.
+            if (
+                cached_data.timestamp + _SESSION_LENGTH_SECONDS
+                < self._timestamp
+            ):
+                cached_data.session_id = self._session_id
+            # Always update the timestamp to last used.
+            cached_data.timestamp = self._timestamp
+            self._writer.write(cached_data)
+            return cached_data.session_id
+        # Cache miss, generate and write new record.
+        session_id = self._session_id
+        session_data = CLISessionData(
+            self.cache_key, session_id, self._timestamp
+        )
+        self._writer.write(session_data)
+        return session_id
+
+    @cached_property
+    def _tty(self):
+        # os.ttyname is only available on Unix platforms.
+        if is_windows:
+            return
+        try:
+            return os.ttyname(sys.stdin.fileno())
+        except (OSError, io.UnsupportedOperation):
+            # Standard input was redirected to a pseudofile.
+            # This can happen when running tests on IDEs or
+            # running scripts with redirected input, etc.
+            return
+
+    @cached_property
+    def _host_id(self):
+        return self._reader.read_host_id()
+
+    @cached_property
+    def _timestamp(self):
+        return int(time.time())
+
+    def _sweep_cache(self):
+        t = threading.Thread(
+            target=self._sweeper.sweep,
+            args=(self._timestamp - _SESSION_LENGTH_SECONDS,),
+            daemon=True,
+        )
+        t.start()
+
+
+def _get_cli_session_orchestrator():
+    conn = CLISessionDatabaseConnection()
+    return CLISessionOrchestrator(
+        CLISessionGenerator(),
+        CLISessionDatabaseWriter(conn),
+        CLISessionDatabaseReader(conn),
+        CLISessionDatabaseSweeper(conn),
+    )
+
+
+def add_session_id_component_to_user_agent_extra(session, orchestrator=None):
+    try:
+        cli_session_orchestrator = (
+            orchestrator or _get_cli_session_orchestrator()
+        )
+        add_component_to_user_agent_extra(
+            session,
+            UserAgentComponent("sid", cli_session_orchestrator.session_id),
+        )
+    except Exception:
+        # Ideally, the AWS CLI should never throw if the session id
+        # can't be generated since it's not critical for users. Issues
+        # with session data should instead be caught server-side.
+        pass
diff -pruN 2.23.6-1/awscli/testutils.py 2.31.35-1/awscli/testutils.py
--- 2.23.6-1/awscli/testutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/testutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,37 +19,34 @@ package so that code that is not part of
 advantage of all the testing utilities we provide.
 
 """
-import os
-import sys
+
+import binascii
+import contextlib
 import copy
-import shutil
-import time
 import json
 import logging
-import tempfile
-import platform
-import contextlib
-import binascii
 import math
+import os
+import platform
+import shutil
+import sys
+import tempfile
+import time
+import unittest
 from pprint import pformat
-from subprocess import Popen, PIPE
+from subprocess import PIPE, Popen
 from unittest import mock
-import unittest
-
-from awscli.compat import BytesIO, StringIO
-
-from ruamel.yaml import YAML
 
-from botocore.session import Session
-from botocore.exceptions import ClientError
-from botocore.exceptions import WaiterError
 import botocore.loaders
 from botocore.awsrequest import AWSResponse
+from botocore.exceptions import ClientError, WaiterError
+from botocore.session import Session
+from ruamel.yaml import YAML
 
 import awscli.clidriver
-from awscli.plugin import load_plugins
 from awscli.clidriver import CLIDriver
-
+from awscli.compat import BytesIO, StringIO
+from awscli.plugin import load_plugins
 
 _LOADER = botocore.loaders.Loader()
 INTEG_LOG = logging.getLogger('awscli.tests.integration')
@@ -66,9 +63,12 @@ def skip_if_windows(reason):
             self.assertEqual(...)
 
     """
+
     def decorator(func):
         return unittest.skipIf(
-            platform.system() not in ['Darwin', 'Linux'], reason)(func)
+            platform.system() not in ['Darwin', 'Linux'], reason
+        )(func)
+
     return decorator
 
 
@@ -82,8 +82,10 @@ def if_windows(reason):
             self.assertEqual(...)
 
     """
+
     def decorator(func):
         return unittest.skipIf(platform.system() != 'Windows', reason)(func)
+
     return decorator
 
 
@@ -101,6 +103,7 @@ def create_clidriver():
 def get_aws_cmd():
     global AWS_CMD
     import awscli
+
     if AWS_CMD is None:
         # Try <repo>/bin/aws
         repo_root = os.path.dirname(os.path.abspath(awscli.__file__))
@@ -108,10 +111,12 @@ def get_aws_cmd():
         if not os.path.isfile(aws_cmd):
             aws_cmd = _search_path_for_cmd('aws')
             if aws_cmd is None:
-                raise ValueError('Could not find "aws" executable.  Either '
-                                 'make sure it is on your PATH, or you can '
-                                 'explicitly set this value using '
-                                 '"set_aws_cmd()"')
+                raise ValueError(
+                    'Could not find "aws" executable.  Either '
+                    'make sure it is on your PATH, or you can '
+                    'explicitly set this value using '
+                    '"set_aws_cmd()"'
+                )
         AWS_CMD = aws_cmd
     return AWS_CMD
 
@@ -197,15 +202,12 @@ def create_dir_bucket(session, name=None
     params = {
         'Bucket': bucket_name,
         'CreateBucketConfiguration': {
-            'Location': {
-                'Type': 'AvailabilityZone',
-                'Name': az
-            },
+            'Location': {'Type': 'AvailabilityZone', 'Name': az},
             'Bucket': {
                 'Type': 'Directory',
-                'DataRedundancy': 'SingleAvailabilityZone'
-            }
-        }
+                'DataRedundancy': 'SingleAvailabilityZone',
+            },
+        },
     }
     try:
         client.create_bucket(**params)
@@ -249,6 +251,7 @@ class BaseCLIDriverTest(unittest.TestCas
     This will load all the default plugins as well so it
     will simulate the behavior the user will see.
     """
+
     def setUp(self):
         self.environ = {
             'AWS_DATA_PATH': os.environ['AWS_DATA_PATH'],
@@ -280,23 +283,29 @@ class BaseAWSHelpOutputTest(BaseCLIDrive
 
     def assert_contains(self, contains):
         if contains not in self.renderer.rendered_contents:
-            self.fail("The expected contents:\n%s\nwere not in the "
-                      "actual rendered contents:\n%s" % (
-                          contains, self.renderer.rendered_contents))
+            self.fail(
+                "The expected contents:\n%s\nwere not in the "
+                "actual rendered contents:\n%s"
+                % (contains, self.renderer.rendered_contents)
+            )
 
     def assert_contains_with_count(self, contains, count):
         r_count = self.renderer.rendered_contents.count(contains)
         if r_count != count:
-            self.fail("The expected contents:\n%s\n, with the "
-                      "count:\n%d\nwere not in the actual rendered "
-                      " contents:\n%s\nwith count:\n%d" % (
-                          contains, count, self.renderer.rendered_contents, r_count))
+            self.fail(
+                "The expected contents:\n%s\n, with the "
+                "count:\n%d\nwere not in the actual rendered "
+                " contents:\n%s\nwith count:\n%d"
+                % (contains, count, self.renderer.rendered_contents, r_count)
+            )
 
     def assert_not_contains(self, contents):
         if contents in self.renderer.rendered_contents:
-            self.fail("The contents:\n%s\nwere not suppose to be in the "
-                      "actual rendered contents:\n%s" % (
-                          contents, self.renderer.rendered_contents))
+            self.fail(
+                "The contents:\n%s\nwere not suppose to be in the "
+                "actual rendered contents:\n%s"
+                % (contents, self.renderer.rendered_contents)
+            )
 
     def assert_text_order(self, *args, **kwargs):
         # First we need to find where the SYNOPSIS section starts.
@@ -309,15 +318,19 @@ class BaseAWSHelpOutputTest(BaseCLIDrive
         previous = arg_indices[0]
         for i, index in enumerate(arg_indices[1:], 1):
             if index == -1:
-                self.fail('The string %r was not found in the contents: %s'
-                          % (args[index], contents))
+                self.fail(
+                    'The string %r was not found in the contents: %s'
+                    % (args[index], contents)
+                )
             if index < previous:
-                self.fail('The string %r came before %r, but was suppose to come '
-                          'after it.\n%s' % (args[i], args[i - 1], contents))
+                self.fail(
+                    'The string %r came before %r, but was suppose to come '
+                    'after it.\n%s' % (args[i], args[i - 1], contents)
+                )
             previous = index
 
 
-class CapturedRenderer(object):
+class CapturedRenderer:
     def __init__(self):
         self.rendered_contents = ''
 
@@ -325,7 +338,7 @@ class CapturedRenderer(object):
         self.rendered_contents = contents.decode('utf-8')
 
 
-class CapturedOutput(object):
+class CapturedOutput:
     def __init__(self, stdout, stderr):
         self.stdout = stdout
         self.stderr = stderr
@@ -388,7 +401,9 @@ class BaseAWSCommandParamsTest(unittest.
         self.http_response = AWSResponse(None, 200, {}, None)
         self.error_http_response = AWSResponse(None, 400, {}, None)
         self.parsed_response = {}
-        self.make_request_patch = mock.patch('botocore.endpoint.Endpoint.make_request')
+        self.make_request_patch = mock.patch(
+            'botocore.endpoint.Endpoint.make_request'
+        )
         self.make_request_is_patched = False
         self.operations_called = []
         self.parsed_responses = None
@@ -424,7 +439,10 @@ class BaseAWSCommandParamsTest(unittest.
         if self.parsed_responses is not None:
             make_request_patch.side_effect = self._request_patch_side_effect
         else:
-            make_request_patch.return_value = (self.http_response, self.parsed_response)
+            make_request_patch.return_value = (
+                self.http_response,
+                self.parsed_response,
+            )
         self.make_request_is_patched = True
 
     def _request_patch_side_effect(self, *args, **kwargs):
@@ -436,8 +454,14 @@ class BaseAWSCommandParamsTest(unittest.
             http_response = self.error_http_response
         return http_response, parsed_response
 
-    def assert_params_for_cmd(self, cmd, params=None, expected_rc=0,
-                              stderr_contains=None, ignore_params=None):
+    def assert_params_for_cmd(
+        self,
+        cmd,
+        params=None,
+        expected_rc=0,
+        stderr_contains=None,
+        ignore_params=None,
+    ):
         stdout, stderr, rc = self.run_cmd(cmd, expected_rc)
         if stderr_contains is not None:
             self.assertIn(stderr_contains, stderr)
@@ -451,11 +475,12 @@ class BaseAWSCommandParamsTest(unittest.
                     except KeyError:
                         pass
             if params != last_kwargs:
-                self.fail("Actual params did not match expected params.\n"
-                          "Expected:\n\n"
-                          "%s\n"
-                          "Actual:\n\n%s\n" % (
-                              pformat(params), pformat(last_kwargs)))
+                self.fail(
+                    "Actual params did not match expected params.\n"
+                    "Expected:\n\n"
+                    "%s\n"
+                    "Actual:\n\n%s\n" % (pformat(params), pformat(last_kwargs))
+                )
         return stdout, stderr, rc
 
     def before_parameter_build(self, params, model, **kwargs):
@@ -468,7 +493,8 @@ class BaseAWSCommandParamsTest(unittest.
         event_emitter = self.driver.session.get_component('event_emitter')
         event_emitter.register('before-call', self.before_call)
         event_emitter.register_first(
-            'before-parameter-build.*.*', self.before_parameter_build)
+            'before-parameter-build.*.*', self.before_parameter_build
+        )
         if not isinstance(cmd, list):
             cmdlist = cmd.split()
         else:
@@ -478,10 +504,11 @@ class BaseAWSCommandParamsTest(unittest.
         stderr = captured.stderr.getvalue()
         stdout = captured.stdout.getvalue()
         self.assertEqual(
-            rc, expected_rc,
+            rc,
+            expected_rc,
             "Unexpected rc (expected: %s, actual: %s) for command: %s\n"
-            "stdout:\n%sstderr:\n%s" % (
-                expected_rc, rc, cmd, stdout, stderr))
+            "stdout:\n%sstderr:\n%s" % (expected_rc, rc, cmd, stdout, stderr),
+        )
         return stdout, stderr, rc
 
 
@@ -492,7 +519,7 @@ class BaseCLIWireResponseTest(unittest.T
             'AWS_DEFAULT_REGION': 'us-east-1',
             'AWS_ACCESS_KEY_ID': 'access_key',
             'AWS_SECRET_ACCESS_KEY': 'secret_key',
-            'AWS_CONFIG_FILE': ''
+            'AWS_CONFIG_FILE': '',
         }
         self.environ_patch = mock.patch('os.environ', self.environ)
         self.environ_patch.start()
@@ -502,7 +529,6 @@ class BaseCLIWireResponseTest(unittest.T
         self.driver = create_clidriver()
         self.entry_point = awscli.clidriver.AWSCLIEntryPoint(self.driver)
 
-
     def tearDown(self):
         self.environ_patch.stop()
         if self.send_is_patched:
@@ -514,9 +540,9 @@ class BaseCLIWireResponseTest(unittest.T
             self.send_patch.stop()
             self.send_is_patched = False
         send_patch = self.send_patch.start()
-        send_patch.return_value = mock.Mock(status_code=status_code,
-                                            headers=headers,
-                                            content=content)
+        send_patch.return_value = mock.Mock(
+            status_code=status_code, headers=headers, content=content
+        )
         self.send_is_patched = True
 
     def run_cmd(self, cmd, expected_rc=0):
@@ -532,14 +558,15 @@ class BaseCLIWireResponseTest(unittest.T
         stderr = captured.stderr.getvalue()
         stdout = captured.stdout.getvalue()
         self.assertEqual(
-            rc, expected_rc,
+            rc,
+            expected_rc,
             "Unexpected rc (expected: %s, actual: %s) for command: %s\n"
-            "stdout:\n%sstderr:\n%s" % (
-                expected_rc, rc, cmd, stdout, stderr))
+            "stdout:\n%sstderr:\n%s" % (expected_rc, rc, cmd, stdout, stderr),
+        )
         return stdout, stderr, rc
 
 
-class FileCreator(object):
+class FileCreator:
     def __init__(self):
         self.rootdir = tempfile.mkdtemp()
 
@@ -547,8 +574,9 @@ class FileCreator(object):
         if os.path.exists(self.rootdir):
             shutil.rmtree(self.rootdir)
 
-    def create_file(self, filename, contents, mtime=None, mode='w',
-                    encoding=None):
+    def create_file(
+        self, filename, contents, mtime=None, mode='w', encoding=None
+    ):
         """Creates a file in a tmpdir
 
         ``filename`` should be a relative path, e.g. "foo/bar/baz.txt"
@@ -611,7 +639,7 @@ class ProcessTerminatedError(Exception):
     pass
 
 
-class Result(object):
+class Result:
     def __init__(self, rc, stdout, stderr, memory_usage=None):
         self.rc = rc
         self.stdout = stdout
@@ -638,8 +666,14 @@ def _escape_quotes(command):
     return command
 
 
-def aws(command, collect_memory=False, env_vars=None,
-        wait_for_finish=True, input_data=None, input_file=None):
+def aws(
+    command,
+    collect_memory=False,
+    env_vars=None,
+    wait_for_finish=True,
+    input_data=None,
+    input_file=None,
+):
     """Run an aws command.
 
     This help function abstracts the differences of running the "aws"
@@ -687,8 +721,14 @@ def aws(command, collect_memory=False, e
         env = env_vars
     if input_file is None:
         input_file = PIPE
-    process = Popen(full_command, stdout=PIPE, stderr=PIPE, stdin=input_file,
-                    shell=True, env=env)
+    process = Popen(
+        full_command,
+        stdout=PIPE,
+        stderr=PIPE,
+        stdin=input_file,
+        shell=True,
+        env=env,
+    )
     if not wait_for_finish:
         return process
     memory = None
@@ -699,10 +739,12 @@ def aws(command, collect_memory=False, e
         stdout, stderr = process.communicate(**kwargs)
     else:
         stdout, stderr, memory = _wait_and_collect_mem(process)
-    return Result(process.returncode,
-                  stdout.decode(stdout_encoding),
-                  stderr.decode(stdout_encoding),
-                  memory)
+    return Result(
+        process.returncode,
+        stdout.decode(stdout_encoding),
+        stderr.decode(stdout_encoding),
+        memory,
+    )
 
 
 def get_stdout_encoding():
@@ -720,8 +762,9 @@ def _wait_and_collect_mem(process):
         get_memory = _get_memory_with_ps
     else:
         raise ValueError(
-            "Can't collect memory for process on platform %s." %
-            platform.system())
+            "Can't collect memory for process on platform %s."
+            % platform.system()
+        )
     memory = []
     while process.poll() is None:
         try:
@@ -758,6 +801,7 @@ class BaseS3CLICommand(unittest.TestCase
     and more streamlined.
 
     """
+
     _PUT_HEAD_SHARED_EXTRAS = [
         'SSECustomerAlgorithm',
         'SSECustomerKey',
@@ -803,8 +847,10 @@ class BaseS3CLICommand(unittest.TestCase
         # without necessarily printing the actual contents.
         self.assertEqual(len(actual_contents), len(expected_contents))
         if actual_contents != expected_contents:
-            self.fail("Contents for %s/%s do not match (but they "
-                      "have the same length)" % (bucket, key))
+            self.fail(
+                "Contents for %s/%s do not match (but they "
+                "have the same length)" % (bucket, key)
+            )
 
     def delete_public_access_block(self, bucket_name):
         client = self.create_client_for_bucket(bucket_name)
@@ -825,10 +871,7 @@ class BaseS3CLICommand(unittest.TestCase
 
     def put_object(self, bucket_name, key_name, contents='', extra_args=None):
         client = self.create_client_for_bucket(bucket_name)
-        call_args = {
-            'Bucket': bucket_name,
-            'Key': key_name, 'Body': contents
-        }
+        call_args = {'Bucket': bucket_name, 'Key': key_name, 'Body': contents}
         if extra_args is not None:
             call_args.update(extra_args)
         response = client.put_object(**call_args)
@@ -836,7 +879,8 @@ class BaseS3CLICommand(unittest.TestCase
         extra_head_params = {}
         if extra_args:
             extra_head_params = dict(
-                (k, v) for (k, v) in extra_args.items()
+                (k, v)
+                for (k, v) in extra_args.items()
                 if k in self._PUT_HEAD_SHARED_EXTRAS
             )
         self.wait_until_key_exists(
@@ -893,7 +937,8 @@ class BaseS3CLICommand(unittest.TestCase
         client = self.create_client_for_bucket(bucket_name)
         waiter = client.get_waiter('bucket_exists')
         consistency_waiter = ConsistencyWaiter(
-            min_successes=min_successes, delay_initial_poll=True)
+            min_successes=min_successes, delay_initial_poll=True
+        )
         consistency_waiter.wait(
             lambda: waiter.wait(Bucket=bucket_name) is None
         )
@@ -911,7 +956,8 @@ class BaseS3CLICommand(unittest.TestCase
     def key_exists(self, bucket_name, key_name, min_successes=3):
         try:
             self.wait_until_key_exists(
-                    bucket_name, key_name, min_successes=min_successes)
+                bucket_name, key_name, min_successes=min_successes
+            )
             return True
         except (ClientError, WaiterError):
             return False
@@ -919,7 +965,8 @@ class BaseS3CLICommand(unittest.TestCase
     def key_not_exists(self, bucket_name, key_name, min_successes=3):
         try:
             self.wait_until_key_not_exists(
-                    bucket_name, key_name, min_successes=min_successes)
+                bucket_name, key_name, min_successes=min_successes
+            )
             return True
         except (ClientError, WaiterError):
             return False
@@ -937,18 +984,28 @@ class BaseS3CLICommand(unittest.TestCase
         response = client.head_object(Bucket=bucket_name, Key=key_name)
         return response
 
-    def wait_until_key_exists(self, bucket_name, key_name, extra_params=None,
-                              min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=True)
-
-    def wait_until_key_not_exists(self, bucket_name, key_name, extra_params=None,
-                                  min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=False)
+    def wait_until_key_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=True
+        )
 
-    def _wait_for_key(self, bucket_name, key_name, extra_params=None,
-                      min_successes=3, exists=True):
+    def wait_until_key_not_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=False
+        )
+
+    def _wait_for_key(
+        self,
+        bucket_name,
+        key_name,
+        extra_params=None,
+        min_successes=3,
+        exists=True,
+    ):
         client = self.create_client_for_bucket(bucket_name)
         if exists:
             waiter = client.get_waiter('object_exists')
@@ -962,8 +1019,10 @@ class BaseS3CLICommand(unittest.TestCase
 
     def assert_no_errors(self, p):
         self.assertEqual(
-            p.rc, 0,
-            "Non zero rc (%s) received: %s" % (p.rc, p.stdout + p.stderr))
+            p.rc,
+            0,
+            "Non zero rc (%s) received: %s" % (p.rc, p.stdout + p.stderr),
+        )
         self.assertNotIn("Error:", p.stderr)
         self.assertNotIn("failed:", p.stderr)
         self.assertNotIn("client error", p.stderr)
@@ -975,7 +1034,7 @@ class StringIOWithFileNo(StringIO):
         return 0
 
 
-class EventCaptureHandler(object):
+class EventCaptureHandler:
     def __init__(self, handler=None):
         self._handler = handler
         self._called = False
@@ -994,7 +1053,7 @@ class ConsistencyWaiterException(Excepti
     pass
 
 
-class ConsistencyWaiter(object):
+class ConsistencyWaiter:
     """
     A waiter class for some check to reach a consistent state.
 
@@ -1010,8 +1069,14 @@ class ConsistencyWaiter(object):
     :param delay: The number of seconds to delay the next API call after a
     failed check call. Default of 5 seconds.
     """
-    def __init__(self, min_successes=1, max_attempts=20, delay=5,
-                 delay_initial_poll=False):
+
+    def __init__(
+        self,
+        min_successes=1,
+        max_attempts=20,
+        delay=5,
+        delay_initial_poll=False,
+    ):
         self.min_successes = min_successes
         self.max_attempts = max_attempts
         self.delay = delay
diff -pruN 2.23.6-1/awscli/text.py 2.31.35-1/awscli/text.py
--- 2.23.6-1/awscli/text.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/text.py	2025-11-12 19:17:29.000000000 +0000
@@ -34,15 +34,18 @@ def _format_list(item, identifier, strea
     if any(isinstance(el, dict) for el in item):
         all_keys = _all_scalar_keys(item)
         for element in item:
-            _format_text(element, stream=stream, identifier=identifier,
-                         scalar_keys=all_keys)
+            _format_text(
+                element,
+                stream=stream,
+                identifier=identifier,
+                scalar_keys=all_keys,
+            )
     elif any(isinstance(el, list) for el in item):
         scalar_elements, non_scalars = _partition_list(item)
         if scalar_elements:
             _format_scalar_list(scalar_elements, identifier, stream)
         for non_scalar in non_scalars:
-            _format_text(non_scalar, stream=stream,
-                         identifier=identifier)
+            _format_text(non_scalar, stream=stream, identifier=identifier)
     else:
         _format_scalar_list(item, identifier, stream)
 
@@ -61,8 +64,7 @@ def _partition_list(item):
 def _format_scalar_list(elements, identifier, stream):
     if identifier is not None:
         for item in elements:
-            stream.write('%s\t%s\n' % (identifier.upper(),
-                                       item))
+            stream.write('%s\t%s\n' % (identifier.upper(), item))
     else:
         # For a bare list, just print the contents.
         stream.write('\t'.join([str(item) for item in elements]))
@@ -77,8 +79,7 @@ def _format_dict(scalar_keys, item, iden
         stream.write('\t'.join(scalars))
         stream.write('\n')
     for new_identifier, non_scalar in non_scalars:
-        _format_text(item=non_scalar, stream=stream,
-                     identifier=new_identifier)
+        _format_text(item=non_scalar, stream=stream, identifier=new_identifier)
 
 
 def _all_scalar_keys(list_of_dicts):
diff -pruN 2.23.6-1/awscli/topics/config-vars.rst 2.31.35-1/awscli/topics/config-vars.rst
--- 2.23.6-1/awscli/topics/config-vars.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/topics/config-vars.rst	2025-11-12 19:17:29.000000000 +0000
@@ -422,8 +422,7 @@ These configuration variables control ho
     a single request, including the initial attempt.  For example,
     setting this value to 5 will result in a request being retried up to
     4 times.  If not provided, the number of retries will default to whatever
-    is modeled, which is typically 5 total attempts in the ``legacy`` retry mode,
-    and 3 in the ``standard`` and ``adaptive`` retry modes.
+    is modeled, which is 3 in the ``standard`` and ``adaptive`` retry modes.
 
 ``retry_mode``
     A string representing the type of retries the AWS CLI will perform.  Value
@@ -462,11 +461,20 @@ One option for UNIX systems is the ``LC_
 ``LC_ALL=en_US.UTF-8``, for instance, would give you a United States English
 locale which is compatible with unicode.
 
-To set encoding used for text files different from the locale, you can use
+To set the encoding that is used when reading from text files, you can use the
 ``AWS_CLI_FILE_ENCODING`` environment variable. For example, if you use Windows
 with default encoding ``CP1252``, setting ``AWS_CLI_FILE_ENCODING=UTF-8`` would
 make CLI ignore locale encoding and open text files using ``UTF-8``.
 
+To set the encoding used for the CLI's output, you can use the
+``AWS_CLI_OUTPUT_ENCODING`` environment variable. For example, if you use Windows
+with the default encoding ``CP1252``, setting ``AWS_CLI_OUTPUT_ENCODING=UTF-8``
+would make CLI ignore the locale encoding and format its output using ``UTF-8``.
+
+Refer to
+`Python's Standard Encodings documentation <https://docs.python.org/3/library/codecs.html#standard-encodings>`_
+for possible values for both settings.
+
 Pager
 -----
 
diff -pruN 2.23.6-1/awscli/topics/s3-config.rst 2.31.35-1/awscli/topics/s3-config.rst
--- 2.23.6-1/awscli/topics/s3-config.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/topics/s3-config.rst	2025-11-12 19:17:29.000000000 +0000
@@ -30,6 +30,8 @@ command set:
   size that the CLI uses for multipart transfers of individual files.
 * ``max_bandwidth`` - The maximum bandwidth that will be consumed for uploading
   and downloading data to and from Amazon S3.
+* ``io_chunksize`` - The maximum size of read parts that can be queued in-memory
+  to be written for a download.
 
 For experimental ``s3`` configuration values, see the the
 `Experimental Configuration Values <#experimental-configuration-values>`__
@@ -208,6 +210,26 @@ threads having to wait unnecessarily whi
 consumption and connection timeouts.
 
 
+io_chunksize
+------------
+
+**Default** - ``256KB``
+
+When a GET request is called for downloads, the response contains a file-like
+object that streams data fetched from S3. Chunks are read from the stream and
+queued in-memory for writes. ``io_chunksize`` configures the maximum size of
+elements in the IO queue. This value can be specified using the same semantics
+as ``multipart_threshold``, that is either as the number of bytes as an
+integer, or using a size suffix.
+
+Increasing this value may result in higher overall throughput by preventing
+blocking in cases where large objects are downloaded in environments where
+network speed exceeds disk write speed. It is recommended to only configure
+``io_chunksize`` if overall download throughput is constrained by writes.
+In cases where network IO is the bottleneck, it is recommended to configure
+``max_concurrent_requests`` instead.
+
+
 use_accelerate_endpoint
 -----------------------
 
@@ -360,6 +382,50 @@ adjustments mid-transfer command in orde
 requested bandwidth.
 
 
+should_stream
+-------------
+.. note::
+   This configuration option is only supported when the ``preferred_transfer_client``
+   configuration value is set to or resolves to ``crt``. The ``classic`` transfer
+   client does not support this configuration option.
+
+**Default** - ``false``
+
+If set to ``true``, the CRT client will skip buffering parts in-memory before
+sending PUT requests.
+
+
+disk_throughput
+---------------
+.. note::
+   This configuration option is only supported when the ``preferred_transfer_client``
+   configuration value is set to or resolves to ``crt``. The ``classic`` transfer
+   client does not support this configuration option.
+
+**Default** - ``10.0``
+
+The estimated target disk throughput. This value is only applied if
+``should_stream`` is set to ``true``. This value can be specified using
+the same semantics as ``target_throughput``, that is either as the
+number of bytes per second as an integer, or using a rate suffix.
+
+
+direct_io
+---------
+.. note::
+   This configuration option is only supported when the ``preferred_transfer_client``
+   configuration value is set to or resolves to ``crt``. The ``classic`` transfer
+   client does not support this configuration option.
+
+.. note::
+   This configuration option is only supported on Linux.
+
+**Default** - ``false``
+
+If set to ``true``, the CRT client will enable direct IO to bypass the OS
+cache when sending PUT requests. Enabling direct IO may be useful in cases
+where the disk IO outperforms the kernel cache.
+
 Experimental Configuration Values
 =================================
 
diff -pruN 2.23.6-1/awscli/topics/s3-faq.rst 2.31.35-1/awscli/topics/s3-faq.rst
--- 2.23.6-1/awscli/topics/s3-faq.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/topics/s3-faq.rst	2025-11-12 19:17:29.000000000 +0000
@@ -46,8 +46,8 @@ later to verify data integrity of downlo
     the same checksum algorithm will be used for all file uploads included in the command execution.
 
 For more information about verifying data integrity in Amazon S3, see
-`Checking object integrity in Amazon S3?
-<https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html/>`_ in the Amazon S3 User Guide.
+`Checking object integrity in Amazon S3
+<https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html>`_ in the Amazon S3 User Guide.
 
 Download
 ~~~~~~
@@ -63,5 +63,5 @@ retried.
     like ``aws s3api get-object``"
 
 For more information about verifying data integrity in Amazon S3, see
-`Checking object integrity in Amazon S3?
-<https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html/>`_ in the Amazon S3 User Guide.
\ No newline at end of file
+`Checking object integrity in Amazon S3
+<https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html>`_ in the Amazon S3 User Guide.
diff -pruN 2.23.6-1/awscli/topictags.py 2.31.35-1/awscli/topictags.py
--- 2.23.6-1/awscli/topictags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/topictags.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,12 +19,13 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 # IN THE SOFTWARE.
 #
-import os
 import json
+import os
+
 import docutils.core
 
 
-class TopicTagDB(object):
+class TopicTagDB:
     """This class acts like a database for the tags of all available topics.
 
     A tag is an element in a topic reStructured text file that contains
@@ -67,19 +68,25 @@ class TopicTagDB(object):
     that all tag values for a specific tag of a specific topic are unique.
     """
 
-    VALID_TAGS = ['category', 'description', 'title', 'related topic',
-                  'related command']
+    VALID_TAGS = [
+        'category',
+        'description',
+        'title',
+        'related topic',
+        'related command',
+    ]
 
     # The default directory to look for topics.
     TOPIC_DIR = os.path.join(
-        os.path.dirname(
-            os.path.abspath(__file__)), 'topics')
+        os.path.dirname(os.path.abspath(__file__)), 'topics'
+    )
 
     # The default JSON index to load.
     JSON_INDEX = os.path.join(TOPIC_DIR, 'topic-tags.json')
 
-    def __init__(self, tag_dictionary=None, index_file=JSON_INDEX,
-                 topic_dir=TOPIC_DIR):
+    def __init__(
+        self, tag_dictionary=None, index_file=JSON_INDEX, topic_dir=TOPIC_DIR
+    ):
         """
         :param index_file: The path to a specific JSON index to load.
             If nothing is specified it will default to the default JSON
@@ -121,7 +128,7 @@ class TopicTagDB(object):
 
     def load_json_index(self):
         """Loads a JSON file into the tag dictionary."""
-        with open(self.index_file, 'r') as f:
+        with open(self.index_file) as f:
             self._tag_dictionary = json.load(f)
 
     def save_to_json_index(self):
@@ -156,7 +163,7 @@ class TopicTagDB(object):
         :param topic_files: A list of paths to topics to scan into memory.
         """
         for topic_file in topic_files:
-            with open(topic_file, 'r') as f:
+            with open(topic_file) as f:
                 # Parse out the name of the topic
                 topic_name = self._find_topic_name(topic_file)
                 # Add the topic to the dictionary if it does not exist
@@ -164,7 +171,8 @@ class TopicTagDB(object):
                 topic_content = f.read()
                 # Record the tags and the values
                 self._add_tag_and_values_from_content(
-                    topic_name, topic_content)
+                    topic_name, topic_content
+                )
 
     def _find_topic_name(self, topic_src_file):
         # Get the name of each of these files
@@ -259,9 +267,9 @@ class TopicTagDB(object):
                     # no value constraints are provided or if the tag value
                     # falls in the allowed tag values.
                     if values is None or tag_value in values:
-                        self._add_key_values(query_dict,
-                                             key=tag_value,
-                                             values=[topic_name])
+                        self._add_key_values(
+                            query_dict, key=tag_value, values=[topic_name]
+                        )
         return query_dict
 
     def get_tag_value(self, topic_name, tag, default_value=None):
diff -pruN 2.23.6-1/awscli/utils.py 2.31.35-1/awscli/utils.py
--- 2.23.6-1/awscli/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/awscli/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,24 +10,31 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import base64
+import contextlib
 import csv
-import signal
 import datetime
-import contextlib
+import logging
 import os
 import re
+import signal
 import sys
-from subprocess import Popen, PIPE
-import logging
+from subprocess import PIPE, Popen
 
-from awscli.compat import get_stdout_text_writer
-from awscli.compat import get_popen_kwargs_for_pager_cmd
-from awscli.compat import StringIO
-from botocore.useragent import UserAgentComponent
-from botocore.utils import resolve_imds_endpoint_mode
-from botocore.utils import IMDSFetcher
-from botocore.utils import BadIMDSRequestError
 from botocore.configprovider import BaseProvider
+from botocore.useragent import UserAgentComponent
+from botocore.utils import (
+    BadIMDSRequestError,
+    IMDSFetcher,
+    original_ld_library_path,
+    resolve_imds_endpoint_mode,
+)
+
+from awscli.compat import (
+    StringIO,
+    get_popen_kwargs_for_pager_cmd,
+    get_stdout_text_writer,
+)
 
 logger = logging.getLogger(__name__)
 
@@ -128,12 +135,15 @@ class IMDSRegionProvider(BaseProvider):
 
     def _create_fetcher(self):
         metadata_timeout = self._session.get_config_variable(
-            'metadata_service_timeout')
+            'metadata_service_timeout'
+        )
         metadata_num_attempts = self._session.get_config_variable(
-            'metadata_service_num_attempts')
+            'metadata_service_num_attempts'
+        )
         imds_config = {
             'ec2_metadata_service_endpoint': self._session.get_config_variable(
-                'ec2_metadata_service_endpoint'),
+                'ec2_metadata_service_endpoint'
+            ),
             'ec2_metadata_service_endpoint_mode': resolve_imds_endpoint_mode(
                 self._session
             ),
@@ -175,13 +185,14 @@ class InstanceMetadataRegionFetcher(IMDS
             logger.debug(
                 "Max number of attempts exceeded (%s) when "
                 "attempting to retrieve data from metadata service.",
-                self._num_attempts
+                self._num_attempts,
             )
         except BadIMDSRequestError as e:
             logger.debug(
                 "Failed to retrieve a region from IMDS. "
                 "Region detection may not be supported from this endpoint: "
-                "%s", e.request.url
+                "%s",
+                e.request.url,
             )
         return None
 
@@ -190,7 +201,7 @@ class InstanceMetadataRegionFetcher(IMDS
         response = self._get_request(
             url_path=self._URL_PATH,
             retry_func=self._default_retry,
-            token=token
+            token=token,
         )
         availability_zone = response.text
         region = availability_zone[:-1]
@@ -219,7 +230,7 @@ def _split_with_quotes(value):
     try:
         parts = list(csv.reader(StringIO(value), escapechar='\\'))[0]
     except csv.Error:
-        raise ValueError("Bad csv value: %s" % value)
+        raise ValueError(f"Bad csv value: {value}")
     iter_parts = iter(parts)
     new_parts = []
     for part in iter_parts:
@@ -229,16 +240,19 @@ def _split_with_quotes(value):
         # Find an opening list bracket
         list_start = part.find('=[')
 
-        if list_start >= 0 and value.find(']') != -1 and \
-           (quote_char is None or part.find(quote_char) > list_start):
+        if (
+            list_start >= 0
+            and value.find(']') != -1
+            and (quote_char is None or part.find(quote_char) > list_start)
+        ):
             # This is a list, eat all the items until the end
             if ']' in part:
                 # Short circuit for only one item
                 new_chunk = part
             else:
                 new_chunk = _eat_items(value, iter_parts, part, ']')
-            list_items = _split_with_quotes(new_chunk[list_start + 2:-1])
-            new_chunk = new_chunk[:list_start + 1] + ','.join(list_items)
+            list_items = _split_with_quotes(new_chunk[list_start + 2 : -1])
+            new_chunk = new_chunk[: list_start + 1] + ','.join(list_items)
             new_parts.append(new_chunk)
             continue
         elif quote_char is None:
@@ -334,8 +348,11 @@ def is_document_type_container(shape):
 
 def is_streaming_blob_type(shape):
     """Check if the shape is a streaming blob type."""
-    return (shape and shape.type_name == 'blob' and
-            shape.serialization.get('streaming', False))
+    return (
+        shape
+        and shape.type_name == 'blob'
+        and shape.serialization.get('streaming', False)
+    )
 
 
 def is_tagged_union_type(shape):
@@ -356,11 +373,14 @@ def operation_uses_document_types(operat
 
 
 def json_encoder(obj):
-    """JSON encoder that formats datetimes as ISO8601 format."""
+    """JSON encoder that formats datetimes as ISO8601 format
+    and encodes bytes to UTF-8 Base64 string."""
     if isinstance(obj, datetime.datetime):
         return obj.isoformat()
+    elif isinstance(obj, bytes):
+        return base64.b64encode(obj).decode("utf-8")
     else:
-        return obj
+        raise TypeError('Encountered unrecognized type in JSON encoder.')
 
 
 @contextlib.contextmanager
@@ -373,34 +393,38 @@ def ignore_ctrl_c():
 
 
 def emit_top_level_args_parsed_event(session, args):
-    session.emit(
-        'top-level-args-parsed', parsed_args=args, session=session)
+    session.emit('top-level-args-parsed', parsed_args=args, session=session)
 
 
 def is_a_tty():
     try:
         return os.isatty(sys.stdout.fileno())
-    except Exception as e:
+    except Exception:
         return False
 
 
 def is_stdin_a_tty():
     try:
         return os.isatty(sys.stdin.fileno())
-    except Exception as e:
+    except Exception:
         return False
 
 
-class OutputStreamFactory(object):
-    def __init__(self, session, popen=None, environ=None,
-                 default_less_flags='FRX'):
+class OutputStreamFactory:
+    def __init__(
+        self, session, popen=None, environ=None, default_less_flags='FRX'
+    ):
         self._session = session
         self._popen = popen
         if popen is None:
             self._popen = Popen
         self._environ = environ
         if environ is None:
-            self._environ = os.environ.copy()
+            # When calling out to the system's pager, we want to avoid using
+            # shared libraries bundled with the AWS CLI so that the pager uses
+            # the system's shared libraries.
+            with original_ld_library_path():
+                self._environ = os.environ.copy()
         self._default_less_flags = default_less_flags
 
     def get_output_stream(self):
@@ -417,7 +441,7 @@ class OutputStreamFactory(object):
         process = LazyPager(self._popen, **popen_kwargs)
         try:
             yield process.stdin
-        except IOError:
+        except OSError:
             # Ignore IOError since this can commonly be raised when a pager
             # is closed abruptly and causes a broken pipe.
             pass
@@ -450,32 +474,6 @@ def write_exception(ex, outfile):
     outfile.write("\n")
 
 
-@contextlib.contextmanager
-def original_ld_library_path(env=None):
-    # See: https://pyinstaller.readthedocs.io/en/stable/runtime-information.html
-    # When running under pyinstaller, it will set an
-    # LD_LIBRARY_PATH to ensure it prefers its bundled version of libs.
-    # There are times where we don't want this behavior, for example when
-    # running a separate subprocess.
-    if env is None:
-        env = os.environ
-
-    value_to_put_back = env.get('LD_LIBRARY_PATH')
-    # The first case is where a user has exported an LD_LIBRARY_PATH
-    # in their env.  This will be mapped to LD_LIBRARY_PATH_ORIG.
-    if 'LD_LIBRARY_PATH_ORIG' in env:
-        env['LD_LIBRARY_PATH'] = env['LD_LIBRARY_PATH_ORIG']
-    else:
-        # Otherwise if they didn't set an LD_LIBRARY_PATH we just need
-        # to make sure this value is unset.
-        env.pop('LD_LIBRARY_PATH', None)
-    try:
-        yield
-    finally:
-        if value_to_put_back is not None:
-            env['LD_LIBRARY_PATH'] = value_to_put_back
-
-
 def dump_yaml_to_str(yaml, data):
     """Dump a Python object to a YAML-formatted string.
 
@@ -490,7 +488,7 @@ def dump_yaml_to_str(yaml, data):
     return stream.getvalue()
 
 
-class ShapeWalker(object):
+class ShapeWalker:
     def walk(self, shape, visitor):
         """Walk through and visit shapes for introspection
 
@@ -510,7 +508,7 @@ class ShapeWalker(object):
         if shape.name in stack:
             return
         stack.append(shape.name)
-        getattr(self, '_walk_%s' % shape.type_name, self._default_scalar_walk)(
+        getattr(self, f'_walk_{shape.type_name}', self._default_scalar_walk)(
             shape, visitor, stack
         )
         stack.pop()
@@ -535,14 +533,16 @@ class ShapeWalker(object):
         visitor.visit_shape(shape)
 
 
-class BaseShapeVisitor(object):
+class BaseShapeVisitor:
     """Visit shape encountered by ShapeWalker"""
+
     def visit_shape(self, shape):
         pass
 
 
 class ShapeRecordingVisitor(BaseShapeVisitor):
     """Record shapes visited by ShapeWalker"""
+
     def __init__(self):
         self.visited = []
 
@@ -558,12 +558,13 @@ def add_component_to_user_agent_extra(se
 
 def add_metadata_component_to_user_agent_extra(session, name, value=None):
     add_component_to_user_agent_extra(
-        session,
-        UserAgentComponent("md", name, value)
+        session, UserAgentComponent("md", name, value)
     )
 
 
 def add_command_lineage_to_user_agent_extra(session, lineage):
     # Only add a command lineage if one is not already present in the user agent extra.
     if not re.search(r'md\/command#[\w\.]*', session.user_agent_extra):
-        add_metadata_component_to_user_agent_extra(session, "command", ".".join(lineage))
+        add_metadata_component_to_user_agent_extra(
+            session, "command", ".".join(lineage)
+        )
diff -pruN 2.23.6-1/backends/build_system/__main__.py 2.31.35-1/backends/build_system/__main__.py
--- 2.23.6-1/backends/build_system/__main__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/__main__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,19 +13,21 @@
 import argparse
 import os
 import shutil
+
 from awscli_venv import AwsCliVenv
 from constants import (
-    ArtifactType,
     BUILD_DIR,
     INSTALL_DIRNAME,
+    ArtifactType,
 )
-from exe import ExeBuilder
 from install import (
     Installer,
     Uninstaller,
 )
 from validate_env import validate_env
 
+from exe import ExeBuilder
+
 
 def create_exe(aws_venv, build_dir):
     exe_workspace = os.path.join(build_dir, "exe")
diff -pruN 2.23.6-1/backends/build_system/awscli_venv.py 2.31.35-1/backends/build_system/awscli_venv.py
--- 2.23.6-1/backends/build_system/awscli_venv.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/awscli_venv.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,24 +10,24 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import json
-import subprocess
+import os
+import pathlib
 import site
+import subprocess
 import sys
-import pathlib
 
 from constants import (
-    ArtifactType,
-    DOWNLOAD_DEPS_BOOTSTRAP_LOCK,
-    PORTABLE_EXE_REQUIREMENTS_LOCK,
-    SYSTEM_SANDBOX_REQUIREMENTS_LOCK,
-    ROOT_DIR,
-    IS_WINDOWS,
     BIN_DIRNAME,
-    PYTHON_EXE_NAME,
     CLI_SCRIPTS,
     DISTRIBUTION_SOURCE_SANDBOX,
+    DOWNLOAD_DEPS_BOOTSTRAP_LOCK,
+    IS_WINDOWS,
+    PORTABLE_EXE_REQUIREMENTS_LOCK,
+    PYTHON_EXE_NAME,
+    ROOT_DIR,
+    SYSTEM_SANDBOX_REQUIREMENTS_LOCK,
+    ArtifactType,
 )
 from utils import Utils
 
@@ -138,15 +138,19 @@ class AwsCliVenv:
         # On windows the getsitepackages can return the root venv dir.
         # So instead of just taking the first entry, we need to take the
         # first entry that contains the string "site-packages" in the path.
-        site_path = [path for path in json.loads(
-            subprocess.check_output(
-                [
-                    self.python_exe,
-                    "-c",
-                    "import site, json; print(json.dumps(site.getsitepackages()))",
-                ]
+        site_path = [
+            path
+            for path in json.loads(
+                subprocess.check_output(
+                    [
+                        self.python_exe,
+                        "-c",
+                        "import site, json; print(json.dumps(site.getsitepackages()))",
+                    ]
+                )
+                .decode()
+                .strip()
             )
-            .decode()
-            .strip()
-        ) if "site-packages" in path][0]
+            if "site-packages" in path
+        ][0]
         return site_path
diff -pruN 2.23.6-1/backends/build_system/constants.py 2.31.35-1/backends/build_system/constants.py
--- 2.23.6-1/backends/build_system/constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ import sys
 from enum import Enum
 from pathlib import Path
 
-
 ROOT_DIR = Path(__file__).parents[2]
 BUILD_DIR = ROOT_DIR / "build"
 
@@ -34,10 +33,16 @@ LOCK_SUFFIX = "win-lock.txt" if IS_WINDO
 REQUIREMENTS_DIR = ROOT_DIR / "requirements"
 BOOTSTRAP_REQUIREMENTS = REQUIREMENTS_DIR / "bootstrap.txt"
 DOWNLOAD_DEPS_BOOTSTRAP = REQUIREMENTS_DIR / "download-deps" / "bootstrap.txt"
-DOWNLOAD_DEPS_BOOTSTRAP_LOCK = REQUIREMENTS_DIR / "download-deps" / f"bootstrap-{LOCK_SUFFIX}"
+DOWNLOAD_DEPS_BOOTSTRAP_LOCK = (
+    REQUIREMENTS_DIR / "download-deps" / f"bootstrap-{LOCK_SUFFIX}"
+)
 PORTABLE_EXE_REQUIREMENTS = REQUIREMENTS_DIR / "portable-exe-extras.txt"
-PORTABLE_EXE_REQUIREMENTS_LOCK = REQUIREMENTS_DIR / "download-deps" / f"portable-exe-{LOCK_SUFFIX}"
-SYSTEM_SANDBOX_REQUIREMENTS_LOCK = REQUIREMENTS_DIR / "download-deps" / f"system-sandbox-{LOCK_SUFFIX}"
+PORTABLE_EXE_REQUIREMENTS_LOCK = (
+    REQUIREMENTS_DIR / "download-deps" / f"portable-exe-{LOCK_SUFFIX}"
+)
+SYSTEM_SANDBOX_REQUIREMENTS_LOCK = (
+    REQUIREMENTS_DIR / "download-deps" / f"system-sandbox-{LOCK_SUFFIX}"
+)
 
 # Auto-complete index
 AC_INDEX = ROOT_DIR / "awscli" / "data" / "ac.index"
diff -pruN 2.23.6-1/backends/build_system/exe.py 2.31.35-1/backends/build_system/exe.py
--- 2.23.6-1/backends/build_system/exe.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/exe.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,14 @@
 import os
 from dataclasses import dataclass, field
 
-from constants import EXE_ASSETS_DIR, PYINSTALLER_DIR, DISTRIBUTION_SOURCE_EXE, PYINSTALLER_EXE_NAME
-from utils import Utils
 from awscli_venv import AwsCliVenv
+from constants import (
+    DISTRIBUTION_SOURCE_EXE,
+    EXE_ASSETS_DIR,
+    PYINSTALLER_DIR,
+    PYINSTALLER_EXE_NAME,
+)
+from utils import Utils
 
 
 @dataclass
@@ -51,12 +56,6 @@ class ExeBuilder:
             self._final_dist_dir,
             distribution_source=DISTRIBUTION_SOURCE_EXE,
         )
-        for distinfo in self._utils.glob(
-                '**/*.dist-info',
-                root=self._final_dist_dir
-        ):
-            self._utils.rmtree(os.path.join(self._final_dist_dir, distinfo))
-
 
     def _ensure_no_existing_build_dir(self):
         if self._utils.isdir(self._dist_dir):
diff -pruN 2.23.6-1/backends/build_system/install.py 2.31.35-1/backends/build_system/install.py
--- 2.23.6-1/backends/build_system/install.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/install.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,23 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import functools
+import os
 
-from constants import CLI_SCRIPTS
-from constants import IS_WINDOWS
-from constants import BIN_DIRNAME
-from constants import PYTHON_EXE_NAME
-from constants import ArtifactType
+from constants import (
+    BIN_DIRNAME,
+    CLI_SCRIPTS,
+    IS_WINDOWS,
+    PYTHON_EXE_NAME,
+    ArtifactType,
+)
 from utils import Utils
 
-
 WINDOWS_CMD_TEMPLATE = """@echo off
 {path} %*
 """
 
+
 class Uninstaller:
     def __init__(self, utils: Utils = None):
         if utils is None:
@@ -36,7 +38,9 @@ class Uninstaller:
             self._utils.rmtree(install_dir)
         for exe in CLI_SCRIPTS:
             exe_path = os.path.join(bin_dir, exe)
-            if self._utils.islink(exe_path) or self._utils.path_exists(exe_path):
+            if self._utils.islink(exe_path) or self._utils.path_exists(
+                exe_path
+            ):
                 self._utils.remove(exe_path)
 
 
@@ -78,7 +82,9 @@ class Installer:
 
     def _install_executables_on_windows(self, install_dir, bin_dir):
         filepath = os.path.join(bin_dir, "aws.cmd")
-        content = WINDOWS_CMD_TEMPLATE.format(path=os.path.join(install_dir, "aws.exe"))
+        content = WINDOWS_CMD_TEMPLATE.format(
+            path=os.path.join(install_dir, "aws.exe")
+        )
         self._utils.write_file(filepath, content)
 
     def _symlink_executables(self, install_dir, bin_dir):
diff -pruN 2.23.6-1/backends/build_system/utils.py 2.31.35-1/backends/build_system/utils.py
--- 2.23.6-1/backends/build_system/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,22 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import contextlib
+import glob
+import json
 import os
 import re
-import sys
 import shlex
-import glob
-import json
 import shutil
 import subprocess
+import sys
 import venv
-import contextlib
-from typing import List, Dict, Any, Optional, Callable
-
-from constants import ROOT_DIR
-from constants import IS_WINDOWS
-from constants import BOOTSTRAP_REQUIREMENTS
+from typing import Any, Callable, Dict, List, Optional
 
+from constants import BOOTSTRAP_REQUIREMENTS, IS_WINDOWS, ROOT_DIR
 
 PACKAGE_NAME = re.compile(r"(?P<name>[A-Za-z][A-Za-z0-9_\.\-]+)(?P<rest>.+)")
 CONSTRAINT = re.compile(r"(?P<comparison>[=\<\>]+)(?P<version>.+)")
@@ -47,7 +44,9 @@ class UnmetDependenciesException(Excepti
                 f"{package} (required: {required.constraints}) "
                 f"(version installed: {actual_version})\n"
             )
-            pip_install_command_args.append(f'{package}{required.string_constraints()}')
+            pip_install_command_args.append(
+                f'{package}{required.string_constraints()}'
+            )
 
         if reason:
             msg += f"\n{reason}\n"
@@ -100,7 +99,9 @@ class Requirement:
         if not match:
             raise RuntimeError(f"Unknown version specifier {constraint}")
         comparison, constraint_version = match.group('comparison', 'version')
-        version, constraint_version = self._normalize(version, constraint_version)
+        version, constraint_version = self._normalize(
+            version, constraint_version
+        )
 
         compare_fn = COMPARISONS.get(comparison)
         if not compare_fn:
@@ -120,7 +121,9 @@ class Requirement:
     def __eq__(self, other):
         if other is None:
             return False
-        return (self.name == other.name and self.constraints == other.constraints)
+        return (
+            self.name == other.name and self.constraints == other.constraints
+        )
 
     def string_constraints(self):
         return ','.join(self.constraints)
@@ -138,7 +141,7 @@ def parse_requirements(lines_list):
         if line.startswith('#'):
             continue
         if ' #' in line:
-            line = line[:line.find(' #')]
+            line = line[: line.find(' #')]
         if line.endswith('\\'):
             line = line[:-2].strip()
             try:
@@ -174,7 +177,7 @@ def get_install_requires():
         r"dependencies = \[([\s\S]+?)\]", re.MULTILINE
     )
     extract_dependencies_re = re.compile(r'"(.+)"')
-    with open(ROOT_DIR / "pyproject.toml", "r") as f:
+    with open(ROOT_DIR / "pyproject.toml") as f:
         data = f.read()
     raw_dependencies = dependency_block_re.findall(data)[0]
     dependencies = extract_dependencies_re.findall(raw_dependencies)
@@ -183,18 +186,15 @@ def get_install_requires():
 
 def get_flit_core_unmet_exception():
     in_venv = sys.prefix != sys.base_prefix
-    with open(BOOTSTRAP_REQUIREMENTS, 'r') as f:
-        flit_core_req = [
-            l for l in f.read().split('\n')
-            if 'flit_core' in l
-        ]
+    with open(BOOTSTRAP_REQUIREMENTS) as f:
+        flit_core_req = [l for l in f.read().split('\n') if 'flit_core' in l]
     return UnmetDependenciesException(
         [('flit_core', None, list(parse_requirements(flit_core_req))[0])],
         in_venv,
         reason=(
             'flit_core is needed ahead of time in order to parse the '
             'rest of the requirements.'
-        )
+        ),
     )
 
 
@@ -215,7 +215,7 @@ class Utils:
         os.symlink(src, dst)
 
     def read_file_lines(self, path: str) -> List[str]:
-        return open(path, "r").readlines()
+        return open(path).readlines()
 
     def write_file(self, path: str, content: str):
         with open(path, "w") as f:
@@ -248,7 +248,9 @@ class Utils:
 
     def update_metadata(self, dirname, **kwargs):
         print("Update metadata values %s" % kwargs)
-        metadata_file = os.path.join(dirname, "awscli", "data", "metadata.json")
+        metadata_file = os.path.join(
+            dirname, "awscli", "data", "metadata.json"
+        )
         with open(metadata_file) as f:
             metadata = json.load(f)
         for key, value in kwargs.items():
@@ -261,5 +263,7 @@ class Utils:
 
     def get_script_header(self, python_exe_path: str) -> str:
         if IS_WINDOWS:
-            return f'@echo off & "{python_exe_path}" -x "%~f0" %* & goto :eof\n'
+            return (
+                f'@echo off & "{python_exe_path}" -x "%~f0" %* & goto :eof\n'
+            )
         return f"#!{python_exe_path}\n"
diff -pruN 2.23.6-1/backends/build_system/validate_env.py 2.31.35-1/backends/build_system/validate_env.py
--- 2.23.6-1/backends/build_system/validate_env.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/build_system/validate_env.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,24 +10,24 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import importlib.metadata
 import re
 import sys
 from pathlib import Path
-import importlib.metadata
 
 from constants import (
     BOOTSTRAP_REQUIREMENTS,
     PORTABLE_EXE_REQUIREMENTS,
 )
-from utils import get_install_requires, parse_requirements
-from utils import UnmetDependenciesException
-
+from utils import (
+    UnmetDependenciesException,
+    get_install_requires,
+    parse_requirements,
+)
 
 ROOT = Path(__file__).parents[2]
 PYPROJECT = ROOT / "pyproject.toml"
-BUILD_REQS_RE = re.compile(
-    r"requires = \[([\s\S]+?)\]\s", re.MULTILINE
-)
+BUILD_REQS_RE = re.compile(r"requires = \[([\s\S]+?)\]\s", re.MULTILINE)
 EXTRACT_DEPENDENCIES_RE = re.compile(r'"(.+)"')
 
 
@@ -49,7 +49,7 @@ def _get_requires_list(target_artifact):
 
 
 def _parse_pyproject_requirements():
-    with open(PYPROJECT, 'r') as f:
+    with open(PYPROJECT) as f:
         data = f.read()
     raw_dependencies = BUILD_REQS_RE.findall(data)[0]
     dependencies = EXTRACT_DEPENDENCIES_RE.findall(raw_dependencies)
@@ -58,7 +58,7 @@ def _parse_pyproject_requirements():
 
 def _parse_requirements(requirements_file):
     requirements = []
-    with open(requirements_file, "r") as f:
+    with open(requirements_file) as f:
         for line in f.readlines():
             if not line.startswith(("-r", "#")):
                 requirements.append(line.strip())
@@ -76,8 +76,15 @@ def _get_unmet_dependencies(requirements
         try:
             actual_version = importlib.metadata.version(project_name)
         except importlib.metadata.PackageNotFoundError:
-            unmet.append((project_name, None, requirement))
-            continue
+            try:
+                # Packages built from source may have directory names
+                # that replace "." with "_".
+                actual_version = importlib.metadata.version(
+                    project_name.replace(".", "_")
+                )
+            except importlib.metadata.PackageNotFoundError:
+                unmet.append((project_name, None, requirement))
+                continue
         if not requirement.is_in_range(actual_version):
             unmet.append((project_name, actual_version, requirement))
     return unmet
diff -pruN 2.23.6-1/backends/pep517.py 2.31.35-1/backends/pep517.py
--- 2.23.6-1/backends/pep517.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/backends/pep517.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,15 +23,16 @@ this in-tree backend just proxies to fli
 is that it builds the auto-complete index and injects it into the wheel
 built by flit prior to returning.
 """
-import re
+
+import base64
 import contextlib
+import glob
 import hashlib
-import base64
 import os
-import glob
-import tarfile
+import re
 import shutil
 import sys
+import tarfile
 import zipfile
 from pathlib import Path
 
@@ -106,7 +107,7 @@ def get_requires_for_build_wheel(config_
         r"dependencies = \[([\s\S]+?)\]\s", re.MULTILINE
     )
     extract_dependencies_re = re.compile(r'"(.+)"')
-    with open(ROOT_DIR / "pyproject.toml", "r") as f:
+    with open(ROOT_DIR / "pyproject.toml") as f:
         data = f.read()
     raw_dependencies = dependency_block_re.findall(data)[0]
     dependencies = extract_dependencies_re.findall(raw_dependencies)
@@ -150,8 +151,9 @@ def _should_copy(path):
         return False
     return True
 
+
 def read_sdist_extras():
-    with open(ROOT_DIR / "pyproject.toml", "r") as f:
+    with open(ROOT_DIR / "pyproject.toml") as f:
         data = f.read()
     # This regex searches for the list content of sdist_extra_files
     # in the tool.awscli table within pyproject.toml.
@@ -175,7 +177,7 @@ def read_sdist_extras():
 
 
 def _rewrite_shebang(path):
-    with open(path, "r") as f:
+    with open(path) as f:
         lines = f.read().split("\n")
     # Rewrite shebang lines to be #!python to conform with PEP 427.
     if lines[0] == "#!/usr/bin/env python":
diff -pruN 2.23.6-1/bin/aws 2.31.35-1/bin/aws
--- 2.23.6-1/bin/aws	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/bin/aws	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import sys
 import os
+import sys
 
 if os.environ.get('LC_CTYPE', '') == 'UTF-8':
     os.environ['LC_CTYPE'] = 'en_US.UTF-8'
diff -pruN 2.23.6-1/bin/aws_completer 2.31.35-1/bin/aws_completer
--- 2.23.6-1/bin/aws_completer	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/bin/aws_completer	2025-11-12 19:17:29.000000000 +0000
@@ -12,6 +12,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
+
 if os.environ.get('LC_CTYPE', '') == 'UTF-8':
     os.environ['LC_CTYPE'] = 'en_US.UTF-8'
 from awscli.autocomplete.main import autocomplete
diff -pruN 2.23.6-1/configure 2.31.35-1/configure
--- 2.23.6-1/configure	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/configure	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for awscli 2.23.6.
+# Generated by GNU Autoconf 2.71 for awscli 2.31.35.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -607,8 +607,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='awscli'
 PACKAGE_TARNAME='awscli'
-PACKAGE_VERSION='2.23.6'
-PACKAGE_STRING='awscli 2.23.6'
+PACKAGE_VERSION='2.31.35'
+PACKAGE_STRING='awscli 2.31.35'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1255,7 +1255,7 @@ _ACEOF
 fi
 if $ac_init_version; then
   cat <<\_ACEOF
-awscli configure 2.23.6
+awscli configure 2.31.35
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1292,7 +1292,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by awscli $as_me 2.23.6, which was
+It was created by awscli $as_me 2.31.35, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -2668,7 +2668,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by awscli $as_me 2.23.6, which was
+This file was extended by awscli $as_me 2.31.35, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -2723,7 +2723,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-awscli config.status 2.23.6
+awscli config.status 2.31.35
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -pruN 2.23.6-1/configure.ac 2.31.35-1/configure.ac
--- 2.23.6-1/configure.ac	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/configure.ac	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 AC_CONFIG_MACRO_DIRS([m4])
-AC_INIT([awscli], [2.23.6])
+AC_INIT([awscli], [2.31.35])
 AC_CONFIG_SRCDIR([bin/aws])
 AM_PATH_PYTHON([3.8])
 
diff -pruN 2.23.6-1/debian/changelog 2.31.35-1/debian/changelog
--- 2.23.6-1/debian/changelog	2025-01-25 06:02:43.000000000 +0000
+++ 2.31.35-1/debian/changelog	2025-11-13 09:11:42.000000000 +0000
@@ -1,3 +1,11 @@
+awscli (2.31.35-1) unstable; urgency=medium
+
+  * New upstream version 2.31.35
+  * debian/patches: refreshed
+  * debian/patches: drop Drop-upper-python-cryptography-limit.patch
+
+ -- Thomas Bechtold <thomasbechtold@jpberlin.de>  Thu, 13 Nov 2025 10:11:42 +0100
+
 awscli (2.23.6-1) unstable; urgency=medium
 
   * New upstream version 2.23.6 (Closes: #1093979)
diff -pruN 2.23.6-1/debian/patches/0001-Fix-documentation-build.patch 2.31.35-1/debian/patches/0001-Fix-documentation-build.patch
--- 2.23.6-1/debian/patches/0001-Fix-documentation-build.patch	2025-01-25 06:02:43.000000000 +0000
+++ 2.31.35-1/debian/patches/0001-Fix-documentation-build.patch	2025-11-13 09:11:42.000000000 +0000
@@ -6,16 +6,14 @@ Subject: Fix documentation build
  doc/source/bootstrapdocs.py | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/doc/source/bootstrapdocs.py b/doc/source/bootstrapdocs.py
-index 830071a..612425b 100644
 --- a/doc/source/bootstrapdocs.py
 +++ b/doc/source/bootstrapdocs.py
-@@ -7,7 +7,7 @@ RST_GENERATION_SCRIPT = 'htmlgen'
- script_path = os.path.join(os.path.dirname(__file__),
-                            RST_GENERATION_SCRIPT)
+@@ -6,7 +6,7 @@
+ RST_GENERATION_SCRIPT = 'htmlgen'
+ script_path = os.path.join(os.path.dirname(__file__), RST_GENERATION_SCRIPT)
  os.environ['PATH'] += ':.'
--rc = subprocess.call("python "+ script_path, shell=True, env=os.environ)
-+rc = subprocess.call("python3 "+ script_path, shell=True, env=os.environ)
+-rc = subprocess.call("python " + script_path, shell=True, env=os.environ)
++rc = subprocess.call("python3 " + script_path, shell=True, env=os.environ)
  if rc != 0:
      sys.stderr.write("Failed to generate documentation!\n")
      sys.exit(2)
diff -pruN 2.23.6-1/debian/patches/Drop-upper-python-cryptography-limit.patch 2.31.35-1/debian/patches/Drop-upper-python-cryptography-limit.patch
--- 2.23.6-1/debian/patches/Drop-upper-python-cryptography-limit.patch	2025-01-25 06:02:43.000000000 +0000
+++ 2.31.35-1/debian/patches/Drop-upper-python-cryptography-limit.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-From: =?utf-8?q?Jeremy_B=C3=ADcha?= <jeremy.bicha@canonical.com>
-Date: Thu, 11 Jan 2024 14:03:04 -0500
-Subject: Drop upper python-cryptography limit
-
-https://bugs.debian.org/1060455
-
-Forwarded: https://github.com/aws/aws-cli/issues/5943
----
- pyproject.toml | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/pyproject.toml
-+++ b/pyproject.toml
-@@ -32,7 +32,7 @@
- dependencies = [
-     "colorama>=0.2.5,<0.4.7",
-     "docutils>=0.10,<0.20",
--    "cryptography>=40.0.0,<43.0.2",
-+    "cryptography>=40.0.0",
-     "ruamel.yaml>=0.15.0,<=0.17.21",
-     # ruamel.yaml only requires ruamel.yaml.clib for Python versions
-     # less than or equal to Python 3.10. In order to ensure we have
diff -pruN 2.23.6-1/debian/patches/series 2.31.35-1/debian/patches/series
--- 2.23.6-1/debian/patches/series	2025-01-25 06:02:43.000000000 +0000
+++ 2.31.35-1/debian/patches/series	2025-11-13 09:11:42.000000000 +0000
@@ -1,4 +1,3 @@
 0001-Fix-documentation-build.patch
 install-shell-helper-to-libexec.patch
-Drop-upper-python-cryptography-limit.patch
 update-embedded-six.py
diff -pruN 2.23.6-1/doc/README.rst 2.31.35-1/doc/README.rst
--- 2.23.6-1/doc/README.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/README.rst	2025-11-12 19:17:29.000000000 +0000
@@ -2,10 +2,9 @@
 Building The Documentation
 ==========================
 
-Before building the documentation, make sure you have Python 3.7,
-the awscli, and all the necessary dependencies installed.  You can
-install dependencies by using the requirements-docs.txt file at the
-root of this repo::
+Before building the documentation, ensure you have the AWS CLI and
+necessary dependencies installed.  You can install dependencies by
+using the requirements-docs.txt file at the root of this repo::
 
     pip install -r requirements-docs.txt
 
diff -pruN 2.23.6-1/doc/source/bootstrapdocs.py 2.31.35-1/doc/source/bootstrapdocs.py
--- 2.23.6-1/doc/source/bootstrapdocs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/bootstrapdocs.py	2025-11-12 19:17:29.000000000 +0000
@@ -4,10 +4,9 @@ import subprocess
 import sys
 
 RST_GENERATION_SCRIPT = 'htmlgen'
-script_path = os.path.join(os.path.dirname(__file__),
-                           RST_GENERATION_SCRIPT)
+script_path = os.path.join(os.path.dirname(__file__), RST_GENERATION_SCRIPT)
 os.environ['PATH'] += ':.'
-rc = subprocess.call("python "+ script_path, shell=True, env=os.environ)
+rc = subprocess.call("python " + script_path, shell=True, env=os.environ)
 if rc != 0:
     sys.stderr.write("Failed to generate documentation!\n")
     sys.exit(2)
diff -pruN 2.23.6-1/doc/source/conf.py 2.31.35-1/doc/source/conf.py
--- 2.23.6-1/doc/source/conf.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/conf.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 #
 # aws-cli documentation build configuration file, created by
 # sphinx-quickstart on Fri Feb  1 12:57:38 2013.
@@ -11,7 +10,9 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys, os
+import datetime
+import os
+import sys
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -23,30 +24,24 @@ import bootstrapdocs
 # -- General configuration -----------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
 
 # Add any Sphinx extension module names here, as strings. They can be extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['notfound.extension',]
+extensions = [
+    'notfound.extension',
+    'crosslinker',
+]
 notfound_context = {
     'title': 'Page not found',
     'body': '<h1>Page not found</h1>\n\n'
-            'Sorry, the page you requested could not be found.'
+    'Sorry, the page you requested could not be found.',
 }
 notfound_pagename = '_404'
 # notfound.extension changes all the relative links to links like
-# "/en/latest/_static/**" and we use "notfound_default_language" key
-# to change “en” to our path prefix
-notfound_default_language = os.environ.get(
-    'DOCS_STATIC_PATH',
-    'v2/documentation/api'
-)
-
-# For local 404.html testing uncomment lines below and put in local path
-# to the build folder on your disk
-
-# notfound_default_language = '<local path to build folder>/build'
-# notfound_default_version = 'html'
+# "/en/latest/_static/**" and we use "notfound_urls_prefix" key
+# to set our path prefix
+notfound_urls_prefix = '/v2/documentation/api/latest/'
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -55,14 +50,14 @@ templates_path = ['_templates']
 source_suffix = '.rst'
 
 # The encoding of source files.
-#source_encoding = 'utf-8-sig'
+# source_encoding = 'utf-8-sig'
 
 # The master toctree document.
 master_doc = 'index'
 
 # General information about the project.
-project = u'AWS CLI Command Reference'
-copyright = u'2018, Amazon Web Services'
+project = 'AWS CLI Command Reference'
+copyright = f'{datetime.datetime.now().year}, Amazon Web Services'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -71,49 +66,49 @@ copyright = u'2018, Amazon Web Services'
 # The short X.Y version.
 version = '2.0'
 # The full version, including alpha/beta/rc tags.
-release = '2.23.6'
+release = '2.31.35'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
-#language = None
+# language = None
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
 
 # Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
 exclude_patterns = ['examples']
 
 # The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
+# default_role = None
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+# add_function_parentheses = True
 
 # If true, the current module name will be prepended to all description
 # unit titles (such as .. function::).
-#add_module_names = True
+# add_module_names = True
 
 # If true, sectionauthor and moduleauthor directives will be shown in the
 # output. They are ignored by default.
-#show_authors = False
+# show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
 pygments_style = 'guzzle_sphinx_theme.GuzzleStyle'
-#pygments_style = 'sphinx'
+# pygments_style = 'sphinx'
 
 # A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
 
 
 # -- Options for HTML output ---------------------------------------------------
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-#html_theme = 'pyramid'
+# html_theme = 'pyramid'
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
@@ -123,23 +118,23 @@ pygments_style = 'guzzle_sphinx_theme.Gu
 #     }
 
 # Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = ['.']
+# html_theme_path = ['.']
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
 html_title = "AWS CLI %s Command Reference" % release
 
 # A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
-#html_logo = None
+# html_logo = None
 
 # The name of an image file (within the static path) to use as favicon of the
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 # pixels large.
-#html_favicon = None
+# html_favicon = None
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
@@ -148,50 +143,52 @@ html_static_path = ['_static']
 
 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 # using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# html_last_updated_fmt = '%b %d, %Y'
 
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
-#html_use_smartypants = True
+# html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
 html_sidebars = {
-  '**': ['sidebarlogo.html',
-         'localtoc.html',
-         'searchbox.html',
-         'feedback.html',
-         'userguide.html']
+    '**': [
+        'sidebarlogo.html',
+        'localtoc.html',
+        'searchbox.html',
+        'feedback.html',
+        'userguide.html',
+    ]
 }
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
 
 # If false, no module index is generated.
-#html_domain_indices = True
+# html_domain_indices = True
 
 # If false, no index is generated.
-#html_use_index = True
+# html_use_index = True
 
 # If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
 
 # If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
+# html_show_sourcelink = True
 
 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+# html_show_sphinx = True
 
 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
+# html_show_copyright = True
 
 # If true, an OpenSearch description file will be output, and all pages will
 # contain a <link> tag referring to it.  The value of this option must be the
 # base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
 
 # This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# html_file_suffix = None
 
 # Output file base name for HTML help builder.
 htmlhelp_basename = 'aws-clidoc'
@@ -219,46 +216,48 @@ html_theme_options = {
 }
 
 
-
 # -- Options for LaTeX output --------------------------------------------------
 
 latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
-
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
-
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
+    # The paper size ('letterpaper' or 'a4paper').
+    #'papersize': 'letterpaper',
+    # The font size ('10pt', '11pt' or '12pt').
+    #'pointsize': '10pt',
+    # Additional stuff for the LaTeX preamble.
+    #'preamble': '',
 }
 
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass [howto/manual]).
 latex_documents = [
-  ('index', 'aws-cli.tex', u'AWS CLI Documentation',
-   u'Amazon Web Services', 'manual'),
+    (
+        'index',
+        'aws-cli.tex',
+        'AWS CLI Documentation',
+        'Amazon Web Services',
+        'manual',
+    ),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
-#latex_logo = None
+# latex_logo = None
 
 # For "manual" documents, if this is true, then toplevel headings are parts,
 # not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
 
 # If true, show page references after internal links.
-#latex_show_pagerefs = False
+# latex_show_pagerefs = False
 
 # If true, show URL addresses after external links.
-#latex_show_urls = False
+# latex_show_urls = False
 
 # Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
 
 # If false, no module index is generated.
-#latex_domain_indices = True
+# latex_domain_indices = True
 
 
 # -- Options for manual page output --------------------------------------------
@@ -266,63 +265,121 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 
-man_pages = [('reference/index', 'aws', 'The main command', '', 1),
-             ('reference/autoscaling/index', 'aws-autoscaling',
-              'The autoscaling service', '', 1),
-             ('reference/cloudformation/index', 'aws-cloudformation',
-              'AWS CloudFormation', '', 1),
-             ('reference/cloudwatch/index', 'aws-cloudwatch',
-              'Amazon CloudWatch', '', 1),
-             ('reference/datapipeline/index', 'aws-datapipeline',
-              'AWS Data Pipeline', '', 1),
-             ('reference/directconnect/index', 'aws-directconnect',
-              'AWS Direct Connect', '', 1),
-             ('reference/dynamodb/index', 'aws-dynamodb',
-              'Amazon DynamoDB', '', 1),
-             ('reference/ec2/index', 'aws-ec2',
-              'Amazon Elastic Compute Cloud', '', 1),
-             ('reference/elasticache/index', 'aws-elasticache',
-              'Amazon ElastiCache', '', 1),
-             ('reference/elasticbeanstalk/index', 'aws-elasticbeanstalk',
-              'AWS Elastic Beanstalk', '', 1),
-             ('reference/elastictranscoder/index', 'aws-elastictranscoder',
-              'Amazon Elastic Transcoder', '', 1),
-             ('reference/elb/index', 'aws-elb',
-              'Elastic Load Balancing', '', 1),
-             ('reference/emr/index', 'aws-emr',
-              'Amazon Elastic MapReduce', '', 1),
-             ('reference/iam/index', 'aws-iam',
-              'AWS Identity and Access Management', '', 1),
-             ('reference/importexport/index', 'aws-importexport',
-              'AWS Import/Export', '', 1),
-             ('reference/opsworks/index', 'aws-opsworks',
-              'AWS OpsWorks', '', 1),
-             ('reference/rds/index', 'aws-rds',
-              'Amazon Relational Database Service', '', 1),
-             ('reference/redshift/index', 'aws-redshift',
-              'Amazon Redshift', '', 1),
-             ('reference/route53/index', 'aws-route53',
-              'Amazon Route 53', '', 1),
-             ('reference/s3/index', 'aws-s3',
-              'Amazon Simple Storage Service', '', 1),
-             ('reference/ses/index', 'aws-ses',
-              'Amazon Simple Email Service', '', 1),
-             ('reference/sns/index', 'aws-sns',
-              'Amazon Simple Notification Service', '', 1),
-             ('reference/sqs/index', 'aws-sqs',
-              'Amazon Simple Queue Service', '', 1),
-             ('reference/storagegateway/index', 'aws-storagegateway',
-              'AWS Storage Gateway', '', 1),
-             ('reference/sts/index', 'aws-sts',
-              'AWS Security Token Service', '', 1),
-             ('reference/support/index', 'aws-support',
-              'AWS Support', '', 1),
-             ('reference/swf/index', 'aws-swf',
-              'Amazon Simple Workflow Service', '', 1),
-             ]
+man_pages = [
+    ('reference/index', 'aws', 'The main command', '', 1),
+    (
+        'reference/autoscaling/index',
+        'aws-autoscaling',
+        'The autoscaling service',
+        '',
+        1,
+    ),
+    (
+        'reference/cloudformation/index',
+        'aws-cloudformation',
+        'AWS CloudFormation',
+        '',
+        1,
+    ),
+    (
+        'reference/cloudwatch/index',
+        'aws-cloudwatch',
+        'Amazon CloudWatch',
+        '',
+        1,
+    ),
+    (
+        'reference/datapipeline/index',
+        'aws-datapipeline',
+        'AWS Data Pipeline',
+        '',
+        1,
+    ),
+    (
+        'reference/directconnect/index',
+        'aws-directconnect',
+        'AWS Direct Connect',
+        '',
+        1,
+    ),
+    ('reference/dynamodb/index', 'aws-dynamodb', 'Amazon DynamoDB', '', 1),
+    ('reference/ec2/index', 'aws-ec2', 'Amazon Elastic Compute Cloud', '', 1),
+    (
+        'reference/elasticache/index',
+        'aws-elasticache',
+        'Amazon ElastiCache',
+        '',
+        1,
+    ),
+    (
+        'reference/elasticbeanstalk/index',
+        'aws-elasticbeanstalk',
+        'AWS Elastic Beanstalk',
+        '',
+        1,
+    ),
+    (
+        'reference/elastictranscoder/index',
+        'aws-elastictranscoder',
+        'Amazon Elastic Transcoder',
+        '',
+        1,
+    ),
+    ('reference/elb/index', 'aws-elb', 'Elastic Load Balancing', '', 1),
+    ('reference/emr/index', 'aws-emr', 'Amazon Elastic MapReduce', '', 1),
+    (
+        'reference/iam/index',
+        'aws-iam',
+        'AWS Identity and Access Management',
+        '',
+        1,
+    ),
+    (
+        'reference/importexport/index',
+        'aws-importexport',
+        'AWS Import/Export',
+        '',
+        1,
+    ),
+    (
+        'reference/rds/index',
+        'aws-rds',
+        'Amazon Relational Database Service',
+        '',
+        1,
+    ),
+    ('reference/redshift/index', 'aws-redshift', 'Amazon Redshift', '', 1),
+    ('reference/route53/index', 'aws-route53', 'Amazon Route 53', '', 1),
+    ('reference/s3/index', 'aws-s3', 'Amazon Simple Storage Service', '', 1),
+    ('reference/ses/index', 'aws-ses', 'Amazon Simple Email Service', '', 1),
+    (
+        'reference/sns/index',
+        'aws-sns',
+        'Amazon Simple Notification Service',
+        '',
+        1,
+    ),
+    ('reference/sqs/index', 'aws-sqs', 'Amazon Simple Queue Service', '', 1),
+    (
+        'reference/storagegateway/index',
+        'aws-storagegateway',
+        'AWS Storage Gateway',
+        '',
+        1,
+    ),
+    ('reference/sts/index', 'aws-sts', 'AWS Security Token Service', '', 1),
+    ('reference/support/index', 'aws-support', 'AWS Support', '', 1),
+    (
+        'reference/swf/index',
+        'aws-swf',
+        'Amazon Simple Workflow Service',
+        '',
+        1,
+    ),
+]
 
 # If true, show URL addresses after external links.
-#man_show_urls = False
+# man_show_urls = False
 
 
 # -- Options for Texinfo output ------------------------------------------------
@@ -334,10 +391,10 @@ texinfo_documents = []
 
 
 # Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
+# texinfo_appendices = []
 
 # If false, no module index is generated.
-#texinfo_domain_indices = True
+# texinfo_domain_indices = True
 
 # How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
+# texinfo_show_urls = 'footnote'
diff -pruN 2.23.6-1/doc/source/crosslinker.py 2.31.35-1/doc/source/crosslinker.py
--- 2.23.6-1/doc/source/crosslinker.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/doc/source/crosslinker.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,205 @@
+import os
+
+from sphinx.application import Sphinx
+
+import awscli.botocore.session
+import awscli.clidriver
+
+"""Generate apache rewrite rules for cross linking.
+
+Example:
+
+^/goto/cli2/acm-2015-12-08/AddTagsToCertificate$
+
+will redirect to the relative path
+
+/cli/latest/reference/acm/add-tags-to-certificate.html
+
+Usage
+=====
+
+Make sure you're in a venv with the correct versions of the AWS CLI v2 installed.
+It will be imported directly to generate the crosslinks.
+
+This is a Sphinx extension that gets run after all document updates have been
+executed and before the cleanup phase.
+"""
+
+
+class AWSCLICrossLinkGenerator:
+    # The name of the tool, this is what's
+    # used in the goto links: /goto/{toolname}/{operation}
+    TOOL_NAME = 'cli2'
+    BASE_URL = '/cli/latest/reference'
+    # The base url for your SDK service reference. This page
+    # is used as a fallback for goto links for unknown service
+    # uids and for the "catch-all" regex for the tool.
+    FALLBACK_BASE = '/cli/latest/reference/index.html'
+    # The url used for a specific service. This value
+    # must have one string placeholder value where the
+    # service_name can be placed.
+    SERVICE_BASE = '/cli/latest/reference/%s/index.html'
+
+    def __init__(self):
+        self._driver = awscli.clidriver.create_clidriver()
+        # Cache of service -> operation names
+        # The operation names are not xformed(), they're
+        # exactly as they're spelled in the API reference.
+        self._service_operations = {}
+        # Mapping of service name to boto class name.
+        self._service_class_names = {}
+        # Mapping of uid -> service_name
+        self._uid_mapping = {}
+        self._generate_mappings()
+
+    def _generate_mappings(self):
+        command_table = self._driver.create_help_command().command_table
+        for name, command in command_table.items():
+            if hasattr(command, '_UNDOCUMENTED'):
+                continue
+            if not hasattr(command, 'service_model'):
+                continue
+            uid = command.service_model.metadata.get('uid')
+            if uid is None:
+                continue
+            self._uid_mapping[uid] = name
+            ops_table = command.create_help_command().command_table
+            mapping = {}
+            for op_name, op_command in ops_table.items():
+                op_help = op_command.create_help_command()
+                mapping[op_help.obj.name] = op_name
+            self._service_operations[name] = mapping
+
+    def _generate_cross_link(self, service_name, operation_name):
+        if operation_name not in self._service_operations[service_name]:
+            return self.SERVICE_BASE % service_name
+        return '%s/%s/%s.html' % (
+            self.BASE_URL,
+            service_name,
+            self._service_operations[service_name][operation_name],
+        )
+
+    def _is_catchall_regex(self, parts):
+        # This is the catch-all regex used as a safety net
+        # for any requests to our tool that we don't understand.
+        # For example: /goto/aws-cli/(.*)
+        return len(parts) == 4 and parts[-1] == '(.*)'
+
+    def _is_service_catchall_regex(self, parts):
+        # This is the catch-all regex used for requests to a
+        # known service for an unknown operation/shape.
+        # For example: /goto/cli2/xray-2016-04-12/(.*)
+        return len(parts) == 5 and parts[-1] == '(.*)'
+
+    def generate_cross_link(self, link):
+        parts = link.split('/')
+        if len(parts) < 4:
+            return None
+        tool_name = parts[2]
+        if tool_name != self.TOOL_NAME:
+            return None
+        if self._is_catchall_regex(parts):
+            return self.FALLBACK_BASE
+        uid = parts[3]
+        if uid not in self._uid_mapping:
+            return self.FALLBACK_BASE
+        service_name = self._uid_mapping[uid]
+        if self._is_service_catchall_regex(parts):
+            return self.SERVICE_BASE % service_name
+        # At this point we know this is a valid cross-link
+        # for an operation we probably know about, so we can
+        # defer to the template method.
+        return self._generate_cross_link(
+            service_name=service_name,
+            operation_name=parts[-1],
+        )
+
+
+def create_goto_links_iter(session):
+    for service_name in session.get_available_services():
+        m = session.get_service_model(service_name)
+        uid = m.metadata.get('uid')
+        if uid is None:
+            continue
+        for operation_name in m.operation_names:
+            yield '/goto/{toolname}/%s/%s' % (uid, operation_name)
+        # We also want to yield a catch-all link for the service.
+        yield '/goto/{toolname}/%s/(.*)' % uid
+    # And a catch-all for the entire tool.
+    yield '/goto/{toolname}/(.*)'
+
+
+def create_rewrite_rule(incoming_link, redirect):
+    # Given an incoming_link (/goto/aws-cli/...) and the
+    # URL it should redirect to, generate the actual
+    # rewrite rule.
+    return 'RewriteRule ^%s$ %s [L,R,NE]\n' % (incoming_link, redirect)
+
+
+def generate_all_cross_links(session, out_file):
+    # links_iter: Generator of crosslinks to generate
+    linker = AWSCLICrossLinkGenerator()
+    # This gives us a list of tuples of
+    # (goto_link, redirect_link)
+    crosslinks = generate_tool_cross_links(session, linker)
+    # From there we need to convert that to the actual Rewrite rules.
+    lines = generate_conf_for_crosslinks(linker, crosslinks)
+    out_file.writelines(lines)
+
+
+def generate_conf_for_crosslinks(linker, crosslinks):
+    # These first two lines are saying that if the URL
+    # does not match the regex '/goto/(toolname)', then
+    # we should skip all the RewriteRules associated with
+    # that toolname.
+    # The way RewriteCond works is that if the condition
+    # evalutes to true, the immediately next RewriteRule
+    # is triggered.
+    lines = [
+        f'RewriteCond %{{REQUEST_URI}} !^\\/goto\\/{linker.TOOL_NAME}\\/.*$\n',
+        # The S=12345 means skip the next 12345 lines.  This
+        # rule is only triggered if the RewriteCond above
+        # evaluates to true.  Think of this as a fancy GOTO.
+        f'RewriteRule ".*" "-" [S={len(crosslinks)}]\n',
+    ]
+    for goto_link, redirect in crosslinks:
+        lines.append(create_rewrite_rule(goto_link, redirect))
+    return lines
+
+
+def generate_tool_cross_links(session, linker):
+    crosslinks = []
+    for link_template in create_goto_links_iter(session):
+        link_str = link_template.format(toolname=linker.TOOL_NAME)
+        result = linker.generate_cross_link(link_str)
+        if result is not None:
+            crosslinks.append((link_str, result))
+    return crosslinks
+
+
+def generate_crosslinks(app: Sphinx):
+    session = awscli.botocore.session.get_session()
+    out_path = os.path.join(
+        os.path.abspath(app.outdir), 'package.redirects.conf'
+    )
+    with open(out_path, 'w') as out_file:
+        generate_all_cross_links(session, out_file)
+
+    # Sphinx expects us to return an iterable of pages we want to create using
+    # their template/context system. We return an empty list since this extension
+    # does not create HTML pages via this system.
+    return []
+
+
+def setup(app: Sphinx):
+    # hook into the html-collect-pages event to guarantee all
+    # document writing/modification has been completed before
+    # generating crosslinks.
+    app.connect('html-collect-pages', generate_crosslinks)
+
+    return {
+        'version': '1.0',
+        'env_version': 1,
+        'parallel_read_safe': True,
+        'parallel_write_safe': True,
+    }
diff -pruN 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/layout.html 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/layout.html
--- 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/layout.html	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/layout.html	2025-11-12 19:17:29.000000000 +0000
@@ -5,7 +5,6 @@
   {{ super() }}
   <link rel="stylesheet" type="text/css" href="{{ pathto('_static/bootstrap.min.css', 1) }}" />
   <link rel="stylesheet" type="text/css" href="{{ pathto('_static/override.css', 1) }}" />
-  <script type="text/javascript" src="{{ pathto('_static/jquery-1.9.1.min.js', 1)}}"></script>
   <script src="/SdkStatic/sdk-priv.js" async="true"></script>
 {%- endblock %}
 
@@ -106,14 +105,7 @@
     </div>
   {%- endif %}
   <script type="text/javascript" src="https://media.amazonwebservices.com/js/sitecatalyst/s_code.min.js"></script>
-  <script type="text/javascript">
-  s.prop66 = 'AWS CLI';
-  s.eVar66 = 'D=c66';
-  s.prop65 = 'API Reference';
-  s.eVar65 = 'D=c65';
-  var s_code = s.t();
-  if (s_code) document.write(s_code);
-  </script>
+  <script type="text/javascript" src="{{ pathto('_static/analytics.js', 1) }}"></script>
 {%- endblock %}
 
 {%- block footer %}
diff -pruN 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/searchbox.html 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/searchbox.html
--- 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/searchbox.html	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/searchbox.html	2025-11-12 19:17:29.000000000 +0000
@@ -9,5 +9,5 @@
         <input type="hidden" name="area" value="default" />
     </form>
 </div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
+<script src="{{ pathto('_static/searchbox.js', 1) }}"></script>
 {%- endif %}
diff -pruN 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/analytics.js 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/analytics.js
--- 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/analytics.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/analytics.js	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,6 @@
+s.prop66 = 'AWS CLI';
+s.eVar66 = 'D=c66';
+s.prop65 = 'API Reference';
+s.eVar65 = 'D=c65';
+var s_code = s.t();
+if (s_code) document.write(s_code);
\ No newline at end of file
diff -pruN 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/jquery-1.9.1.min.js 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/jquery-1.9.1.min.js
--- 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/jquery-1.9.1.min.js	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/jquery-1.9.1.min.js	1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
- //@ sourceMappingURL=jquery.min.map
- */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
-  return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
-}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
diff -pruN 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/searchbox.js 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/searchbox.js
--- 2.23.6-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/searchbox.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/doc/source/guzzle_sphinx_theme/guzzle_sphinx_theme/static/searchbox.js	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1 @@
+document.getElementById('searchbox').style.display = "block";
\ No newline at end of file
diff -pruN 2.23.6-1/doc/source/htmlgen 2.31.35-1/doc/source/htmlgen
--- 2.23.6-1/doc/source/htmlgen	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/doc/source/htmlgen	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,9 @@
 #!/usr/bin/env python
+import argparse
+import json
 import os
 import sys
-import json
-import argparse
+
 import awscli.clidriver
 from awscli.help import PagingHelpRenderer
 
@@ -12,7 +13,6 @@ TOPIC_PATH = 'topic'
 
 
 class FileRenderer(PagingHelpRenderer):
-
     def __init__(self, file_path):
         self._file_path = file_path
 
@@ -23,8 +23,7 @@ class FileRenderer(PagingHelpRenderer):
 
 
 def do_operation(driver, service_path, operation_name, operation_command):
-    file_path = os.path.join(service_path,
-                             operation_name + '.rst')
+    file_path = os.path.join(service_path, operation_name + '.rst')
     help_command = operation_command.create_help_command()
     if help_command is None:
         # Do not document anything that does not have a help command.
@@ -34,8 +33,9 @@ def do_operation(driver, service_path, o
     help_command(None, None)
 
 
-def do_service(driver, ref_path, service_name, service_command,
-               is_top_level_service=True):
+def do_service(
+    driver, ref_path, service_name, service_command, is_top_level_service=True
+):
     if is_top_level_service:
         print('...%s' % service_name)
     service_path = os.path.join(ref_path, service_name)
@@ -57,21 +57,24 @@ def do_service(driver, ref_path, service
         # If the operation command has a subcommand table with commands
         # in it, treat it as a service command as opposed to an operation
         # command.
-        if (len(subcommand_table) > 0):
-            do_service(driver, service_path, operation_name,
-                       operation_command, False)
+        if len(subcommand_table) > 0:
+            do_service(
+                driver, service_path, operation_name, operation_command, False
+            )
         else:
-            do_operation(driver, service_path, operation_name,
-                         operation_command)
+            do_operation(
+                driver, service_path, operation_name, operation_command
+            )
+
 
 def do_topic(driver, topic_path, topic_help_command):
     print('...%s' % topic_help_command.name)
-    file_path = os.path.join(topic_path,
-                             topic_help_command.name + '.rst')
+    file_path = os.path.join(topic_path, topic_help_command.name + '.rst')
     topic_help_command.doc.target = 'html'
     topic_help_command.renderer = FileRenderer(file_path)
     topic_help_command(None, None)
 
+
 def do_provider(driver):
     help_command = driver.create_help_command()
     help_command.doc.target = 'html'
@@ -79,8 +82,9 @@ def do_provider(driver):
     help_command(None, None)
 
     topic_help_command = help_command.subcommand_table['topics']
-    topic_help_command.renderer = FileRenderer(os.path.join(TOPIC_PATH,
-                                                            'index.rst'))
+    topic_help_command.renderer = FileRenderer(
+        os.path.join(TOPIC_PATH, 'index.rst')
+    )
     topic_help_command.doc.target = 'html'
     help_command(['topics'], None)
     topics = help_command.subcommand_table
@@ -118,20 +122,22 @@ def build_service_list(tut_path, ref_pat
     for full_name, service_name in l:
         service_ref_path = os.path.join(ref_path, service_name)
         service_ref_path = os.path.join(service_ref_path, 'index')
-        fp.write('* :doc:`%s <..%s%s>`\n' % (full_name,
-                                             os.path.sep,
-                                             service_ref_path))
+        fp.write(f'* :doc:`{full_name} <..{os.path.sep}{service_ref_path}>`\n')
     fp.write('\n')
     fp.close()
 
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
-    parser.add_argument('-s', '--service',
-                        help='Name of service, or else all services')
-    parser.add_argument('-o', '--operations',
-                        help='Name of operations, or else all operations',
-                        nargs='*')
+    parser.add_argument(
+        '-s', '--service', help='Name of service, or else all services'
+    )
+    parser.add_argument(
+        '-o',
+        '--operations',
+        help='Name of operations, or else all operations',
+        nargs='*',
+    )
     args = parser.parse_args()
     driver = awscli.clidriver.create_clidriver()
     if not os.path.isdir(REF_PATH):
diff -pruN 2.23.6-1/docker/Dockerfile 2.31.35-1/docker/Dockerfile
--- 2.23.6-1/docker/Dockerfile	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/docker/Dockerfile	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,8 @@
-FROM public.ecr.aws/amazonlinux/amazonlinux:2 as installer
+FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as installer
 ARG EXE_FILENAME=awscli-exe-linux-x86_64.zip
 COPY $EXE_FILENAME .
-RUN yum update -y \
-  && yum install -y unzip \
+RUN dnf update -y \
+  && dnf install -y unzip \
   && unzip $EXE_FILENAME \
   # The --bin-dir is specified so that we can copy the
   # entire bin directory from the installer stage into
@@ -11,11 +11,12 @@ RUN yum update -y \
   # may be present in /usr/local/bin of the installer stage.
   && ./aws/install --bin-dir /aws-cli-bin/
 
-FROM public.ecr.aws/amazonlinux/amazonlinux:2
-RUN yum update -y \
-  && yum install -y less groff \
-  && yum clean all
+FROM public.ecr.aws/amazonlinux/amazonlinux:2023
+RUN dnf update -y \
+  && dnf install -y less groff findutils jq \
+  && dnf clean all
 COPY --from=installer /usr/local/aws-cli/ /usr/local/aws-cli/
 COPY --from=installer /aws-cli-bin/ /usr/local/bin/
 WORKDIR /aws
 ENTRYPOINT ["/usr/local/bin/aws"]
+
diff -pruN 2.23.6-1/exe/assets/THIRD_PARTY_LICENSES 2.31.35-1/exe/assets/THIRD_PARTY_LICENSES
--- 2.23.6-1/exe/assets/THIRD_PARTY_LICENSES	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/exe/assets/THIRD_PARTY_LICENSES	2025-11-12 19:17:29.000000000 +0000
@@ -1,21 +1,3 @@
-** cryptography 3.3.2; version 3.3.2 --
-https://github.com/pyca/cryptography/tree/3.3.2
-Copyright (c) Individual contributors.
-All rights reserved.
-
-This software is made available under the terms of *either* of the licenses
-found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made
-under the terms of *both* these licenses.
-
-The code used in the OpenSSL locking callback and OS random engine is derived
-from CPython, and is licensed under the terms of the PSF License Agreement.
-
-* For cryptography 3.3.2 see also this required NOTICE:
-    Copyright (c) Individual contributors.
-    All rights reserved.
-
-------
-
 ** botocore; version 2 -- https://github.com/boto/botocore/tree/v2
 Botocore
 Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
@@ -1046,37 +1028,6 @@ SOFTWARE.
 
 ------
 
-** cffi; version 1.14.0 --
-https://foss.heptapod.net/pypy/cffi/tree/branch/release-1.14
-© Copyright 2012-2018, Armin Rigo, Maciej Fijalkowski
-
-Except when otherwise stated (look for LICENSE files in directories or
-information at the beginning of each file) all software and
-documentation is licensed as follows:
-
-    The MIT License
-
-    Permission is hereby granted, free of charge, to any person
-    obtaining a copy of this software and associated documentation
-    files (the "Software"), to deal in the Software without
-    restriction, including without limitation the rights to use,
-    copy, modify, merge, publish, distribute, sublicense, and/or
-    sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-    DEALINGS IN THE SOFTWARE.
-
-------
-
 ** jmespath; version 0.9.4 --
 https://github.com/jmespath/jmespath.py/tree/0.9.4
 Copyright (c) 2013 Amazon.com, Inc. or its affiliates.  All Rights Reserved
diff -pruN 2.23.6-1/exe/pyinstaller/aws.spec 2.31.35-1/exe/pyinstaller/aws.spec
--- 2.23.6-1/exe/pyinstaller/aws.spec	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/exe/pyinstaller/aws.spec	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,6 @@
 # -*- mode: python -*-
+import platform
+import os
 
 block_cipher = None
 exe_name = 'aws'
@@ -13,6 +15,34 @@ aws_a = Analysis(['../../bin/aws'],
              win_no_prefer_redirects=False,
              win_private_assemblies=False,
              cipher=block_cipher)
+
+# Replace the Python.framework directory with a top-level Python executable
+# This is easier for our internal signing and notarization code,
+# since we're not signing via PyInstaller
+if platform.system() == "Darwin":
+    updated_binaries = []
+    for dest, src, typecode in aws_a.binaries:
+        # Look for the actual Python executable, regardless of the version
+        if dest.startswith('Python.framework/Versions/') and dest.endswith('/Python'):
+            # and move it to the top
+            dest = 'Python'
+        if dest.startswith('Python3.framework/Versions/') and dest.endswith('/Python3'):
+            # and move it to the top
+            dest = 'Python3'
+        updated_binaries.append((dest, src, typecode))
+    aws_a.binaries = updated_binaries
+
+    # Remove the symlinks and the Info.plist related to Python.framework
+    # since we're using the top-level executable above
+    updated_datas = []
+    for dest, src, typecode in aws_a.datas:
+        if (dest.startswith('Python.framework/') or (dest == 'Python' and typecode == 'SYMLINK')):
+            continue
+        if (dest.startswith('Python3.framework/') or (dest == 'Python3' and typecode == 'SYMLINK')):
+            continue
+        updated_datas.append((dest, src, typecode))
+    aws_a.datas = updated_datas
+
 aws_pyz = PYZ(aws_a.pure, aws_a.zipped_data, cipher=block_cipher)
 aws_exe = EXE(aws_pyz,
           aws_a.scripts,
@@ -23,7 +53,9 @@ aws_exe = EXE(aws_pyz,
           bootloader_ignore_signals=False,
           strip=False,
           upx=True,
-          console=True )
+          console=True,
+          contents_directory='.',
+          target_arch='universal2' if os.environ.get('BUILD_UNIVERSAL_BINARY') == '1' else None,)
 coll = COLLECT(aws_exe,
                aws_a.binaries,
                aws_a.zipfiles,
diff -pruN 2.23.6-1/exe/pyinstaller/aws_completer.spec 2.31.35-1/exe/pyinstaller/aws_completer.spec
--- 2.23.6-1/exe/pyinstaller/aws_completer.spec	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/exe/pyinstaller/aws_completer.spec	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,6 @@
 # -*- mode: python -*-
+import platform
+import os
 
 block_cipher = None
 exe_name = "aws_completer"
@@ -14,6 +16,34 @@ completer_a = Analysis(['../../bin/aws_c
              win_no_prefer_redirects=False,
              win_private_assemblies=False,
              cipher=block_cipher)
+
+# Replace the Python.framework directory with a top-level Python executable
+# This is easier for our internal signing and notarization code,
+# since we're not signing via PyInstaller
+if platform.system() == "Darwin":
+    updated_binaries = []
+    for dest, src, typecode in completer_a.binaries:
+        # Look for the actual Python executable, regardless of the version
+        if dest.startswith('Python.framework/Versions/') and dest.endswith('/Python'):
+            # and move it to the top
+            dest = 'Python'
+        elif dest.startswith('Python3.framework/Versions/') and dest.endswith('/Python3'):
+            # and move it to the top
+            dest = 'Python3'
+        updated_binaries.append((dest, src, typecode))
+    completer_a.binaries = updated_binaries
+
+    # Remove the symlinks and the Info.plist related to Python.framework
+    # since we're using the top-level executable above
+    updated_datas = []
+    for dest, src, typecode in completer_a.datas:
+        if (dest.startswith('Python.framework/') or (dest == 'Python' and typecode == 'SYMLINK')):
+            continue
+        elif (dest.startswith('Python3.framework/') or (dest == 'Python3' and typecode == 'SYMLINK')):
+            continue
+        updated_datas.append((dest, src, typecode))
+    completer_a.datas = updated_datas
+
 completer_pyz = PYZ(completer_a.pure, completer_a.zipped_data, cipher=block_cipher)
 completer_exe = EXE(completer_pyz,
           completer_a.scripts,
@@ -24,7 +54,9 @@ completer_exe = EXE(completer_pyz,
           bootloader_ignore_signals=False,
           strip=False,
           upx=True,
-          console=True)
+          console=True,
+          contents_directory='.',
+          target_arch='universal2' if os.environ.get('BUILD_UNIVERSAL_BINARY') == '1' else None,)
 coll = COLLECT(completer_exe,
                completer_a.binaries,
                completer_a.zipfiles,
diff -pruN 2.23.6-1/exe/pyinstaller/hook-awscli.py 2.31.35-1/exe/pyinstaller/hook-awscli.py
--- 2.23.6-1/exe/pyinstaller/hook-awscli.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/exe/pyinstaller/hook-awscli.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,5 @@
 from PyInstaller.utils import hooks
 
-
 hiddenimports = [
     'docutils',
     'urllib',
@@ -14,19 +13,22 @@ hiddenimports = [
     # NOTE: This can be removed once this hidden import issue related to
     # setuptools and PyInstaller is resolved:
     # https://github.com/pypa/setuptools/issues/1963
-    'pkg_resources.py2_warn'
+    'pkg_resources.py2_warn',
 ]
 
-imports_for_legacy_plugins = (
-    hooks.collect_submodules('http') +
-    hooks.collect_submodules('logging')
-)
+imports_for_legacy_plugins = hooks.collect_submodules(
+    'http'
+) + hooks.collect_submodules('logging')
 hiddenimports += imports_for_legacy_plugins
 
-alias_packages_plugins = (
-    hooks.collect_submodules('awscli.botocore') +
-    hooks.collect_submodules('awscli.s3transfer')
-)
+alias_packages_plugins = hooks.collect_submodules(
+    'awscli.botocore'
+) + hooks.collect_submodules('awscli.s3transfer')
 hiddenimports += alias_packages_plugins
 
 datas = hooks.collect_data_files('awscli')
+# prompt_toolkit uses its own metadata to determine
+# its version. So we need to bundle the package
+# metadata to avoid runtime errors.
+# https://github.com/aws/aws-cli/issues/9453
+datas += hooks.copy_metadata('prompt_toolkit')
diff -pruN 2.23.6-1/exe/tests/README.rst 2.31.35-1/exe/tests/README.rst
--- 2.23.6-1/exe/tests/README.rst	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/exe/tests/README.rst	2025-11-12 19:17:29.000000000 +0000
@@ -33,4 +33,3 @@ test file::
 
    $ shellcheck ../assets/install
    $ shellcheck install.bats
-
diff -pruN 2.23.6-1/macpkg/distribution.xml 2.31.35-1/macpkg/distribution.xml
--- 2.23.6-1/macpkg/distribution.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/macpkg/distribution.xml	2025-11-12 19:17:29.000000000 +0000
@@ -18,7 +18,7 @@
     ]]>
     </script>
     <domains enable_anywhere="true" enable_currentUserHome="true" enable_localSystem="true" />
-    <options customize="always" require-scripts="false" />
+    <options customize="always" require-scripts="false" hostArchitectures="x86_64,arm64" />
     <choices-outline>
       <line choice="default"/>
     </choices-outline>
diff -pruN 2.23.6-1/macpkg/resources/LICENSE.txt 2.31.35-1/macpkg/resources/LICENSE.txt
--- 2.23.6-1/macpkg/resources/LICENSE.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/macpkg/resources/LICENSE.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-Copyright 2012-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License"). You
 may not use this file except in compliance with the License. A copy of
diff -pruN 2.23.6-1/proposals/assets/contribution-guide/contribution-guide-flowchart.xml 2.31.35-1/proposals/assets/contribution-guide/contribution-guide-flowchart.xml
--- 2.23.6-1/proposals/assets/contribution-guide/contribution-guide-flowchart.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/proposals/assets/contribution-guide/contribution-guide-flowchart.xml	2025-11-12 19:17:29.000000000 +0000
@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<mxfile host="localhost" modified="2022-03-10T18:13:26.285Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0" etag="y4VaO2zyttq6k7T0c4Pc" version="12.4.8" type="device"><diagram id="DhkPtZorHgvnuvrJdU8F" name="Page-1">5V1bd5s4EP41ebQPIC7mMU2TNG3S9XGa7WZf9shGsakxcgHbcX79ChBXyTK2uThpzmkKg7hpvhl9mhmRC3C1eL314HL2gC3kXCiS9XoBPl8oCgDygPwXSraxRDZ1EEumnm1RWSZ4tN8QFUpUurIt5BcaBhg7gb0sCifYddEkKMig5+FNsdkLdop3XcIpYgSPE+iw0p+2Fcxi6UCTMvkXZE9nyZ1liR5ZwKQxFfgzaOFNTgSuL8CVh3EQby1er5AT9l7SL/F5NzuOpg/mITeocsIP9+vd0+jfx9727/m3H89o7Hyf9tKHC7bJGyOLdADdxV4ww1PsQuc6k37y8Mq1UHhZiexlbe4xXhKhTIS/UBBsqTbhKsBENAsWDj2KXu3gn/D0vkb3nunFwu3Pr/mdbbLjBt42d1K4+5w/lp0W7RXOGyLPXqAAeVTI9h3tzvDlcwLak7cIk7O9LWngIQcG9rqIDkhBNk3bpacOsU1uoUjUInogQc62LEgu4uOVN0H0vEyfZCP3IJko0jJf4xv1H3A3BZJyj+/mcH5z9fbrskcfeQ2dFX0JBgH+xl440A1V7QfQC6gegUkElu0RM7OxSwRuqHpRb66RF6BXYX8m/SJLaqljZEmnkk1meHriF2Z5oxtoe/UwIk8N3Sl5xeyeg7IuZMk0mVsanDsqoHhD6BBsuTBAn0LT8E/U28vE/fT76+8vs0fFv3U/vb0tle89dcBRnO4EkU7WZHMabt65AZyjSJ2IeEjagNww14Zz2gQvlg6xjwtws+ucMkZmcBluejO8GK/8on1b0J+l/mEzswPkL+EkbL4hwwSRLXP2SK+QM1EOoIRQrowyoOoFhasao21T4+BLknbjq6BngVKHb6P18/D2Yf756a+bb2/af5vRvxxjvMKLxcq1g/CpoWtFAwnxBOQf6Rkyjtr+ZOX7of2VNZJ5ZTnp9cdir+c0BMc+dlYBuvQm1LojabanRsbv4Xk67CkNKkY2jX2KSZXQjmZUwKjmO+5krDx23DtijD1MvfFAVcFlkTFkioL9ZtD04KvKRX+vNDbyct9y0C18CuDJsLQDPsdDQaThPBKEkGkaCqDENswSg4gftDEoyLzBvBoLU6VWWdigMgkr89h3TsL4ejN3krAXHOErU6D+e4WTAz0/Ut4laSAPlq/ZwTInG6dELiRkC6JKGKk5I2Xj8ilEFt97B1Mjug+KPiEe16+wg70IPxHGXmzHKYmgY09DhE3IY0S8LESSTebGl/TAwrasyE3x2EbRdXmYvgn43DP5DkZsKftBTAGks9xB5aGnBubAd2G7MZIj1Pe2O0dWFM2ozNJv7eDLahze3/dX58vVT9VjygnNviZlP6A4dndN3RXWhV8RM/TsMRmDQ6qOl8j1wzuH3bOKLuih3yvkB4yCuqHuNekJqKCgJ3mfntpm8t3yrnTnWN4lVNNe4qVwOLjQbTXNvJQkWEMBYrTLvBR2XnemzEsDFZlXSo4+MvNS1LaY1witbbT5cxlXaiGVGZfMcfKtUi6ZUcH79/CJGvIe/vrXz4fRtX37BOTrqTQcft08DXpKRQevtOTflaJX0Rvz76LeEJPvhzSk6kcvHBu8FMxQZS4+HKWOw+P4BxEdPyO2d4CtvxO2p7Hj+zPyO/UPB0be+IHbJG1aNXBb2aeIfEXep/DTx3o7TgUAsVOpL3LL7Q5d7RZAXUT+KwOICwxgsggS+euaAXTpeXCba7AMkeEL8CUV8aXlUcS01nVBa7IR3/1YBAr7M+fWnvwoI1hOEoYj2gZ7cxpaklZLixBzsjEc9T/WUFSavrQ69gi9YU5JD4jgP6EWUkgaqMJStcS7Ewf7WbsovvfBtCUmDnKrGV+ukz+XhG9XYzmoPQB0kjpYIn/nFw2pULRSNpU01L3HTBrDuyIZ/RzcJaWAd8DCfcBB+6ApmgzYqNc7q/tLGVLlaTYnV801BL0q+e3KXrbrn5c/l8rN+tv94/PTM7p8vdV7GmMvnFlrNBWqNEntDA2HTnQqF6NwGCm/YSOMlK0ENaRiILynlzPoO0Il7KUGJe/SM0BjEySRyeTAd+mHDHQVc9SIiIb5sIjvJARnB/mJeCpbltwN+Tk8kG+a5QoKjq9vOSgC2DrDjorZEpPPu//U/PcMACfHWU9xFSLYN+4qmEyNUa54bjgAYnAGlxJ6ziNpZkgVk2ay/rGSZly17S4ZrzlnNvRQz/tz8mZCG6kOX13pl3LhLHhlnVPV0lgiTe9mWnAkxa+HQIqUuXeuIHMmCy2yykPjnHKpAjop2tzFLBVgiNo3E+uUWTYZropA0YOFtZDx9J9Y8mR2ka50kVyU1tNJY5SLDxApeRDJgeNocWLKPScT7Fk28e/bcwm11eNXSiOUynEq7cZFZbZ2o+O1FAdSyWNo6/GORuQ/9lJSua2MnKn1ZVUZaEb8G6hF0Jn95Ej4WzeK1686s5VLWG5uraSo03O4zROd1PM0FIisxxuU45CA26EtxCG5r6OxXfwAo+QVjEszoBW+y0tUUZt0/Afy1eKsCDD7Zv6nRUfO15bEaOudFVc075WFMG/cK5f8pVktoliXv0ziTOcxfTiuTqKx+DNnpsBPNRntYKUHktleEsowlcaiSvw3Zd1JU6up6LL4PyA2cUwUTS9lIkzD6HPW1zRU0itKronTWd8jGpauqpHWNqxcwEmal9ZTnXP1Zg15CFmS20xEcJOU3YwP1M8n2wclHU7mF1WzzkrF4aH2tfKnLa4yOtHoiaW1hyDhhBG/6ucP2qqi7emlMsee2VwhrfBNd0z34BraDhxHCZd4yjdJllSezxdPDnfFGpszatUV8+ur3vnnKKp+eUKpHKFvywrVvVbY8DRN5QXY83YmjWjc5S4kRuwEP1lQPtk6NsGDt9/6xjFw7sepAE7m0whOf60CcpXEIOuwN6Cz9gY4hJaXpTWN3fo8bb04m0MvrhenNDYqcgxzGLSIG5eLZt6pEwRGaZJxBnUxCu9TDe07xROcm1GVYtT+XZ3T8szHf/8GGDUBUlUYL8H51o3Mm/Uy32ysr2Oa+sBM3sH3aFj9oMhH1XBHDtfhZanWFDXZpxeWRYEQJmTC6lsMq8ooqLrsQG0spK59OBomjIDvD5W3RcO0Mg3TmvsIGD/JcPynKEBdozLjBHkFdFwfqDZmEkZTn3oYcbOJglXcH8UvGgevXlFLZK1rN6mzU5a96/p95IRfBC+sGeKp/iwDvs3oUTY7jztorCaTWWa1dH+rk8+a1FCakKpyX82l9QftTU35xgWYTv7waVuhYvezmapBJb12NnOaprsN17e2gkPn6Kedzw/sUA/Zzf7SQ0wgsz+YAa7/Bw==</diagram></mxfile>
\ No newline at end of file
+<mxfile host="localhost" modified="2022-03-10T18:13:26.285Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0" etag="y4VaO2zyttq6k7T0c4Pc" version="12.4.8" type="device"><diagram id="DhkPtZorHgvnuvrJdU8F" name="Page-1">5V1bd5s4EP41ebQPIC7mMU2TNG3S9XGa7WZf9shGsakxcgHbcX79ChBXyTK2uThpzmkKg7hpvhl9mhmRC3C1eL314HL2gC3kXCiS9XoBPl8oCgDygPwXSraxRDZ1EEumnm1RWSZ4tN8QFUpUurIt5BcaBhg7gb0sCifYddEkKMig5+FNsdkLdop3XcIpYgSPE+iw0p+2Fcxi6UCTMvkXZE9nyZ1liR5ZwKQxFfgzaOFNTgSuL8CVh3EQby1er5AT9l7SL/F5NzuOpg/mITeocsIP9+vd0+jfx9727/m3H89o7Hyf9tKHC7bJGyOLdADdxV4ww1PsQuc6k37y8Mq1UHhZiexlbe4xXhKhTIS/UBBsqTbhKsBENAsWDj2KXu3gn/D0vkb3nunFwu3Pr/mdbbLjBt42d1K4+5w/lp0W7RXOGyLPXqAAeVTI9h3tzvDlcwLak7cIk7O9LWngIQcG9rqIDkhBNk3bpacOsU1uoUjUInogQc62LEgu4uOVN0H0vEyfZCP3IJko0jJf4xv1H3A3BZJyj+/mcH5z9fbrskcfeQ2dFX0JBgH+xl440A1V7QfQC6gegUkElu0RM7OxSwRuqHpRb66RF6BXYX8m/SJLaqljZEmnkk1meHriF2Z5oxtoe/UwIk8N3Sl5xeyeg7IuZMk0mVsanDsqoHhD6BBsuTBAn0LT8E/U28vE/fT76+8vs0fFv3U/vb0tle89dcBRnO4EkU7WZHMabt65AZyjSJ2IeEjagNww14Zz2gQvlg6xjwtws+ucMkZmcBluejO8GK/8on1b0J+l/mEzswPkL+EkbL4hwwSRLXP2SK+QM1EOoIRQrowyoOoFhasao21T4+BLknbjq6BngVKHb6P18/D2Yf756a+bb2/af5vRvxxjvMKLxcq1g/CpoWtFAwnxBOQf6Rkyjtr+ZOX7of2VNZJ5ZTnp9cdir+c0BMc+dlYBuvQm1LojabanRsbv4Xk67CkNKkY2jX2KSZXQjmZUwKjmO+5krDx23DtijD1MvfFAVcFlkTFkioL9ZtD04KvKRX+vNDbyct9y0C18CuDJsLQDPsdDQaThPBKEkGkaCqDENswSg4gftDEoyLzBvBoLU6VWWdigMgkr89h3TsL4ejN3krAXHOErU6D+e4WTAz0/Ut4laSAPlq/ZwTInG6dELiRkC6JKGKk5I2Xj8ilEFt97B1Mjug+KPiEe16+wg70IPxHGXmzHKYmgY09DhE3IY0S8LESSTebGl/TAwrasyE3x2EbRdXmYvgn43DP5DkZsKftBTAGks9xB5aGnBubAd2G7MZIj1Pe2O0dWFM2ozNJv7eDLahze3/dX58vVT9VjygnNviZlP6A4dndN3RXWhV8RM/TsMRmDQ6qOl8j1wzuH3bOKLuih3yvkB4yCuqHuNekJqKCgJ3mfntpm8t3yrnTnWN4lVNNe4qVwOLjQbTXNvJQkWEMBYrTLvBR2XnemzEsDFZlXSo4+MvNS1LaY1witbbT5cxlXaiGVGZfMcfKtUi6ZUcH79/CJGvIe/vrXz4fRtX37BOTrqTQcft08DXpKRQevtOTflaJX0Rvz76LeEJPvhzSk6kcvHBu8FMxQZS4+HKWOw+P4BxEdPyO2d4CtvxO2p7Hj+zPyO/UPB0be+IHbJG1aNXBb2aeIfEXep/DTx3o7TgUAsVOpL3LL7Q5d7RZAXUT+KwOICwxgsggS+euaAXTpeXCba7AMkeEL8CUV8aXlUcS01nVBa7IR3/1YBAr7M+fWnvwoI1hOEoYj2gZ7cxpaklZLixBzsjEc9T/WUFSavrQ69gi9YU5JD4jgP6EWUkgaqMJStcS7Ewf7WbsovvfBtCUmDnKrGV+ukz+XhG9XYzmoPQB0kjpYIn/nFw2pULRSNpU01L3HTBrDuyIZ/RzcJaWAd8DCfcBB+6ApmgzYqNc7q/tLGVLlaTYnV801BL0q+e3KXrbrn5c/l8rN+tv94/PTM7p8vdV7GmMvnFlrNBWqNEntDA2HTnQqF6NwGCm/YSOMlK0ENaRiILynlzPoO0Il7KUGJe/SM0BjEySRyeTAd+mHDHQVc9SIiIb5sIjvJARnB/mJeCpbltwN+Tk8kG+a5QoKjq9vOSgC2DrDjorZEpPPu//U/PcMACfHWU9xFSLYN+4qmEyNUa54bjgAYnAGlxJ6ziNpZkgVk2ay/rGSZly17S4ZrzlnNvRQz/tz8mZCG6kOX13pl3LhLHhlnVPV0lgiTe9mWnAkxa+HQIqUuXeuIHMmCy2yykPjnHKpAjop2tzFLBVgiNo3E+uUWTYZropA0YOFtZDx9J9Y8mR2ka50kVyU1tNJY5SLDxApeRDJgeNocWLKPScT7Fk28e/bcwm11eNXSiOUynEq7cZFZbZ2o+O1FAdSyWNo6/GORuQ/9lJSua2MnKn1ZVUZaEb8G6hF0Jn95Ej4WzeK1686s5VLWG5uraSo03O4zROd1PM0FIisxxuU45CA26EtxCG5r6OxXfwAo+QVjEszoBW+y0tUUZt0/Afy1eKsCDD7Zv6nRUfO15bEaOudFVc075WFMG/cK5f8pVktoliXv0ziTOcxfTiuTqKx+DNnpsBPNRntYKUHktleEsowlcaiSvw3Zd1JU6up6LL4PyA2cUwUTS9lIkzD6HPW1zRU0itKronTWd8jGpauqpHWNqxcwEmal9ZTnXP1Zg15CFmS20xEcJOU3YwP1M8n2wclHU7mF1WzzkrF4aH2tfKnLa4yOtHoiaW1hyDhhBG/6ucP2qqi7emlMsee2VwhrfBNd0z34BraDhxHCZd4yjdJllSezxdPDnfFGpszatUV8+ur3vnnKKp+eUKpHKFvywrVvVbY8DRN5QXY83YmjWjc5S4kRuwEP1lQPtk6NsGDt9/6xjFw7sepAE7m0whOf60CcpXEIOuwN6Cz9gY4hJaXpTWN3fo8bb04m0MvrhenNDYqcgxzGLSIG5eLZt6pEwRGaZJxBnUxCu9TDe07xROcm1GVYtT+XZ3T8szHf/8GGDUBUlUYL8H51o3Mm/Uy32ysr2Oa+sBM3sH3aFj9oMhH1XBHDtfhZanWFDXZpxeWRYEQJmTC6lsMq8ooqLrsQG0spK59OBomjIDvD5W3RcO0Mg3TmvsIGD/JcPynKEBdozLjBHkFdFwfqDZmEkZTn3oYcbOJglXcH8UvGgevXlFLZK1rN6mzU5a96/p95IRfBC+sGeKp/iwDvs3oUTY7jztorCaTWWa1dH+rk8+a1FCakKpyX82l9QftTU35xgWYTv7waVuhYvezmapBJb12NnOaprsN17e2gkPn6Kedzw/sUA/Zzf7SQ0wgsz+YAa7/Bw==</diagram></mxfile>
diff -pruN 2.23.6-1/proposals/contribution-guide.md 2.31.35-1/proposals/contribution-guide.md
--- 2.23.6-1/proposals/contribution-guide.md	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/proposals/contribution-guide.md	2025-11-12 19:17:29.000000000 +0000
@@ -48,7 +48,7 @@ GitHub issues are triaged regularly to d
 categorized and express a real and relevant problem or request. An answer is
 provided as soon as possible to acknowledge or resolve the issue. Feature
 requests are reviewed for general suitability and uniqueness. Users can vote for
-features via "reactions" on the issue. 
+features via "reactions" on the issue.
 
 #### Implementation stage
 
@@ -62,7 +62,7 @@ is provided to the contributor to improv
 Pull requests are selected for review opportunistically when the maintainers
 have decided that a change or feature should be incorporated. When a feature is
 selected for review it is added to an internal queue. This queue manages the
-prioritization of these features but is not visible to the community. 
+prioritization of these features but is not visible to the community.
 
 Pull requests are subjected to automated tests and checks which provide
 preliminary feedback. Once a pull request passes all automated tests and checks,
@@ -252,7 +252,7 @@ following criteria in descending order o
 A maintainer must select the issue from the queue with the current highest
 priority. The prioritization of issues in the queue is reviewed on a regular
 cadence and is ultimately decided based on the maintainers' discretion. See the
-[rationale](#rationale-reprioritize) for further discussion. 
+[rationale](#rationale-reprioritize) for further discussion.
 
 ### Review stage
 
@@ -305,7 +305,7 @@ contribution. The ready for review lane
 will be ordered in decreasing priority from top to bottom.
 
 [Figure 2](#figure-2) demonstrates an example project with contributions in
-various stages of completion. 
+various stages of completion.
 
 
 ## Managing the existing backlog
@@ -361,7 +361,7 @@ Pull requests are often made for problem
 small portion of the user base. An issue provides a mechanism to gather
 quantitative feedback in the form of "upvotes" through GitHub reactions to
 estimate the impact of the issue on the community.
- 
+
 We intend for issues to be a way to improve contributor confidence in both their
 contributions and the overall process. Draft pull requests can be used to
 demonstrate a potential implementation and get community feedback or interest
@@ -478,7 +478,7 @@ include (but are not limited to):
    also affect the behavior in other SDKs and must thus be made in coordination
    with internal teams.
 
-### Preliminary review criteria 
+### Preliminary review criteria
 
 The maintainers will use a set of criteria to move a pull request from the
 implementation to the ready for review stage, which may include (but are not
diff -pruN 2.23.6-1/pyproject.toml 2.31.35-1/pyproject.toml
--- 2.23.6-1/pyproject.toml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/pyproject.toml	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@ authors = [
 ]
 license = { file = "LICENSE.txt" }
 readme = "README.rst"
-requires-python = ">=3.8"
+requires-python = ">=3.9"
 classifiers = [
     "Development Status :: 5 - Production/Stable",
     "Intended Audience :: Developers",
@@ -23,32 +23,27 @@ classifiers = [
     "Programming Language :: Python",
     'Programming Language :: Python :: 3 :: Only',
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     'Programming Language :: Python :: 3.12',
+    "Programming Language :: Python :: 3.13",
 ]
 dependencies = [
     "colorama>=0.2.5,<0.4.7",
     "docutils>=0.10,<0.20",
-    "cryptography>=40.0.0,<43.0.2",
     "ruamel.yaml>=0.15.0,<=0.17.21",
     # ruamel.yaml only requires ruamel.yaml.clib for Python versions
     # less than or equal to Python 3.10. In order to ensure we have
     # a consistent dependency closure across all Python versions,
     # we explicitly include ruamel.yaml.clib as a dependency.
-    "ruamel.yaml.clib>=0.2.0,<=0.2.8",
-    "prompt-toolkit>=3.0.24,<3.0.39",
+    "ruamel.yaml.clib>=0.2.0,<=0.2.12",
+    "prompt-toolkit>=3.0.24,<3.0.52",
     "distro>=1.5.0,<1.9.0",
-    "awscrt==0.23.4",
+    "awscrt==0.28.4",
     "python-dateutil>=2.1,<=2.9.0",
     "jmespath>=0.7.1,<1.1.0",
     "urllib3>=1.25.4,<1.27",
-    # zipp>=3.21.0 dropped support for Python 3.8. In order to ensure
-    # we have a consistent dependency closure across all Python
-    # versions, we explicitly include zipp as a dependency.
-    "zipp<3.21.0",
 ]
 dynamic = ["version"]
 
@@ -165,6 +160,7 @@ exclude = [
     "venv",
 ]
 
+
 force-exclude = true
 
 # Format same as Black.
diff -pruN 2.23.6-1/requirements/bootstrap.txt 2.31.35-1/requirements/bootstrap.txt
--- 2.23.6-1/requirements/bootstrap.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/bootstrap.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,2 +1,2 @@
-pip>=22.0.0,<25.0.0
-flit_core>=3.7.1,<3.9.1
\ No newline at end of file
+pip>=22.0.0,<26.0.0
+flit_core>=3.7.1,<3.9.1
diff -pruN 2.23.6-1/requirements/download-deps/bootstrap-lock.txt 2.31.35-1/requirements/download-deps/bootstrap-lock.txt
--- 2.23.6-1/requirements/download-deps/bootstrap-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/bootstrap-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,8 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=requirements/download-deps/bootstrap-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements/download-deps/bootstrap.txt
+#    pip-compile --allow-unsafe --cert=None --client-cert=None --generate-hashes --index-url=None --output-file=requirements/download-deps/bootstrap-lock.txt --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements/download-deps/bootstrap.txt
 #
 
 # The following packages are considered to be unsafe in a requirements file:
@@ -10,13 +10,13 @@ flit-core==3.9.0 \
     --hash=sha256:72ad266176c4a3fcfab5f2930d76896059851240570ce9a98733b658cb786eba \
     --hash=sha256:7aada352fb0c7f5538c4fafeddf314d3a6a92ee8e2b1de70482329e42de70301
     # via -r requirements/bootstrap.txt
-pip==24.3.1 \
-    --hash=sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed \
-    --hash=sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99
+pip==25.3 \
+    --hash=sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343 \
+    --hash=sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd
     # via -r requirements/bootstrap.txt
-setuptools==71.1.0 \
-    --hash=sha256:032d42ee9fb536e33087fb66cac5f840eb9391ed05637b3f2a76a7c8fb477936 \
-    --hash=sha256:33874fdc59b3188304b2e7c80d9029097ea31627180896fb549c578ceb8a0855
+setuptools==78.1.1 \
+    --hash=sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561 \
+    --hash=sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d
     # via -r requirements/download-deps/bootstrap.txt
 wheel==0.38.4 \
     --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \
diff -pruN 2.23.6-1/requirements/download-deps/bootstrap-win-lock.txt 2.31.35-1/requirements/download-deps/bootstrap-win-lock.txt
--- 2.23.6-1/requirements/download-deps/bootstrap-win-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/bootstrap-win-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,24 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file='requirements\download-deps\bootstrap-win-lock.txt' --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'requirements\download-deps\bootstrap.txt'
+#    pip-compile --allow-unsafe --cert=None --client-cert=None --generate-hashes --index-url=None --output-file='requirements\download-deps\bootstrap-win-lock.txt' --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'requirements\download-deps\bootstrap.txt'
 #
 
 # The following packages are considered to be unsafe in a requirements file:
 flit-core==3.9.0 \
     --hash=sha256:72ad266176c4a3fcfab5f2930d76896059851240570ce9a98733b658cb786eba \
     --hash=sha256:7aada352fb0c7f5538c4fafeddf314d3a6a92ee8e2b1de70482329e42de70301
-    # via -r requirements\bootstrap.txt
-pip==24.3.1 \
-    --hash=sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed \
-    --hash=sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99
-    # via -r requirements\bootstrap.txt
-setuptools==71.1.0 \
-    --hash=sha256:032d42ee9fb536e33087fb66cac5f840eb9391ed05637b3f2a76a7c8fb477936 \
-    --hash=sha256:33874fdc59b3188304b2e7c80d9029097ea31627180896fb549c578ceb8a0855
-    # via -r requirements\download-deps\bootstrap.txt
+    # via -r D:/a/aws-cli/aws-cli/requirements/bootstrap.txt
+pip==25.3 \
+    --hash=sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343 \
+    --hash=sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd
+    # via -r D:/a/aws-cli/aws-cli/requirements/bootstrap.txt
+setuptools==78.1.1 \
+    --hash=sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561 \
+    --hash=sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d
+    # via -r D:/a/aws-cli/aws-cli/requirements/download-deps/bootstrap.txt
 wheel==0.38.4 \
     --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \
     --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8
-    # via -r requirements\download-deps\bootstrap.txt
+    # via -r D:/a/aws-cli/aws-cli/requirements/download-deps/bootstrap.txt
diff -pruN 2.23.6-1/requirements/download-deps/bootstrap.txt 2.31.35-1/requirements/download-deps/bootstrap.txt
--- 2.23.6-1/requirements/download-deps/bootstrap.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/bootstrap.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,3 +1,3 @@
-setuptools==71.1.0
+setuptools==78.1.1
 wheel==0.38.4
 -r ../bootstrap.txt
diff -pruN 2.23.6-1/requirements/download-deps/portable-exe-lock.txt 2.31.35-1/requirements/download-deps/portable-exe-lock.txt
--- 2.23.6-1/requirements/download-deps/portable-exe-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/portable-exe-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,8 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --generate-hashes --output-file=requirements/download-deps/portable-exe-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel pyproject.toml requirements/portable-exe-extras.txt
+#    pip-compile --cert=None --client-cert=None --generate-hashes --index-url=None --output-file=requirements/download-deps/portable-exe-lock.txt --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel pyproject.toml requirements/portable-exe-extras.txt
 #
 altgraph==0.17.4 \
     --hash=sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406 \
@@ -10,150 +10,52 @@ altgraph==0.17.4 \
     # via
     #   macholib
     #   pyinstaller
-awscrt==0.23.4 \
-    --hash=sha256:0a5f05a85cbc590f09e5b9ffc491dc40a816dd4b781529ceb54ffc2758ccce2e \
-    --hash=sha256:11bf89b0311133d7f3c755524994c70b67cccb570426f5ccf436732264aadc60 \
-    --hash=sha256:176c2e966ada70f59cc5a67cbba4f360aded9f335789959b8a4f522a1c994f11 \
-    --hash=sha256:1da3931ef8c4a7b67faa26332c05a300f89f6c1461bf50c9179b7b85bae1fd78 \
-    --hash=sha256:1f5db8dfce79742cf70e39f799a0713a4bf7f7d8acdbc67140892de666b82e3b \
-    --hash=sha256:22e77a517c432776f865d8965ab7d2f125aecab986234a1675995143fdd78560 \
-    --hash=sha256:254066219b11987e759f8d48b6368e45b5ecc3da298a8770f28d93a99c58c6cd \
-    --hash=sha256:2df0e1f6df3b6d2debc888e1b5937613ee770d3fcb3e670a9a2b0c06e2ccd0d8 \
-    --hash=sha256:3125368ece0d0370a7ea99056821eca9ec037aa33c94b66141b70c60fbe0910e \
-    --hash=sha256:343b794c8865ee0476411851f419abe56cf032df89f939d706dc02994f107444 \
-    --hash=sha256:3b09fbea37de1b24ba9ce80d7aa250fc67c7bf0b0d71e995fa512aa3bbb00eea \
-    --hash=sha256:3b719798a48f9e31847d8bba55fbf1d3ac4f154137f085fb3b0ff8bccb4f3c36 \
-    --hash=sha256:3c1a3c20753d8b6bb37ec584518ef0addb37cde2f5caebbbc8ecfbb7846e8983 \
-    --hash=sha256:3ef5212a3c3b0549b3b0e85507b7bbdfb891ff40ca4c597e92db07a0bf7b614a \
-    --hash=sha256:416c5a450a16beeb130304d4887d47ed11222c1baf0aa2ce90895366ddde500f \
-    --hash=sha256:42a0c676abc56a49601abab5549112d293c33094a37bc76d00aa8c1c28a276db \
-    --hash=sha256:4b3afd109aa36980695d71002c0bdeab2d71881a865915e6678a64362789553b \
-    --hash=sha256:502c2659a0f888a55fd5746ac6f0005d2c306f18dc05ec86ec0b004243509eb1 \
-    --hash=sha256:5143f090862834c833d31d27b14f5d6f8cd011282725efb370ef49ffcd76a200 \
-    --hash=sha256:584f97bd3d2e8ec55e9862084aa7c59538c09dab245a5fa0af793a331fc94275 \
-    --hash=sha256:5ed306c28eefd2364c9751912e5281a171f497721e5a990626d8412ed7135565 \
-    --hash=sha256:629642372b7e8c21dd5bbeaa14b650ac64e5a0197dd0a375238dc183be94e300 \
-    --hash=sha256:679f12dcf0e44a92819f421325261789f0d6b73f461026d27bd5dfbf5461a1d4 \
-    --hash=sha256:6b5f344112a06bd00557bd63b420c920a6066cc628829a3c729bd53c11946f86 \
-    --hash=sha256:7bc75a9f12bee3b8e5987616eab23b3c1af83609e8021e879bd0ad4ce2c561f9 \
-    --hash=sha256:93a03e45b7ac721f080475b2759c8ad822756563a6d22b8c225614efeef71740 \
-    --hash=sha256:96d4f40aa4279b1548cb1a0db60e7448501f051b8b48af8151c68e3d0d1cf7b0 \
-    --hash=sha256:a229d7a0cb4aeb5a450222bb93532c4b3c5aad1697e7952640078a102eaeb539 \
-    --hash=sha256:ab627f4b05e1b515ee36519e819ca06675a115af19eaafa2f12ab1b043a591b7 \
-    --hash=sha256:abf502e8e121af2fbf9b34ecea34dd24c6fc27a2195fad77f71d8156bd8ba64e \
-    --hash=sha256:b25e2ff209f1785c62dc125990f7079c4c39a1072ab7e82e5cd3a890dc8c0201 \
-    --hash=sha256:b487161450c911ab4429bf8eecf2f12021429eac3a9d5af424ffa9315dfb551e \
-    --hash=sha256:c6b743a125c2cda1a721dc65f4b97a101410660bb091698f2c28ecfec8a07c54 \
-    --hash=sha256:ca7811696fc7cc1fd5f2f940c8983b6f6583f31068ae384741441beafa37128b \
-    --hash=sha256:d187572b7ab7e14ed50c959566a63f7b79ba32a8140d711b335f92d1f8de2655 \
-    --hash=sha256:d8060e350efb2bbe8a25873d21ab302cb8d3f6eb35767d57f6dca6ba55bae7eb \
-    --hash=sha256:e16485ffbd917aa11fe394f23237be4592a5d3efd69d19ff4bacf1c629652452 \
-    --hash=sha256:ee47de681d9fe0876d1fc6a1110ba1fb37de51bcb6d2e226ff2a25c7e345f9da \
-    --hash=sha256:f16632a218a12bc6142bcc77f5e6c920b0b40beab414dbeec9826794f7c8475a \
-    --hash=sha256:fb3ad12008bb358b21ad021ef21a11c5960d871bb9aef95a5a639ce5548a54df
+awscrt==0.28.4 \
+    --hash=sha256:0024b3e26a5ce9ffc9a92533f0a62bd823e025465f3b90ad3dda2878a260171a \
+    --hash=sha256:046006703a7ed6278d5f80214c9aae02fc6b6a65a5f7ceb721becf9e1ad90604 \
+    --hash=sha256:08941fb1f603f1b7b722e8670f121ccf8f25a4073d2f92e3696ae763e309a39d \
+    --hash=sha256:08b884bb6809d22f80921feb0ae9353fea1a750109a18d02057b6bba742db439 \
+    --hash=sha256:13ed9b71a346146a89de85c173d007142416e6cc0358d7ca6b0d68dc1d159667 \
+    --hash=sha256:19adb9fa309111e20e1e850c876f093247ad084efdaa2dd654a15aef4b4bc637 \
+    --hash=sha256:1c6319d297d18ba7cf3c6a8f69f76fd22b949e4ea8a280eb2098a8d6ed0d25be \
+    --hash=sha256:1dd5dac3f761cb74c70c7feebf9f8dc96dc3b8db8248e5899bcbf34633d974a3 \
+    --hash=sha256:277af1c4e5ef666192bd04aea8c3afcbb26d7794594f6f7ba23d7285df5be65e \
+    --hash=sha256:43e1a88bec567e89eb398151ca6af389feb3a7f9b297141061fe759e65b43a52 \
+    --hash=sha256:4657eb947e214c8314d1b26df64e4f8c7c2f3b6817cebae00e3288a4bb1779c5 \
+    --hash=sha256:56e949e965a7668fe0bc6638edf88c009e44090216bb894a5ac758153b01757c \
+    --hash=sha256:5d95f06142634043dc5c9e20e8f7a16b710e32aa1ae3f42eebb3643cabbe4275 \
+    --hash=sha256:653f0c57f1f00cf526045ae2b76cd79f13cb751ed5400a545dcf44a9e5d0fa96 \
+    --hash=sha256:694c183bf2c3ef1d538caa5a73c007cddd841529bc43c6beeb02eb6a353094e6 \
+    --hash=sha256:6a8543c8637374a0963113663fe053c43868d091e5109bcdc1f14f79f780a6c7 \
+    --hash=sha256:726926408dea51284fc5f4ab112e797226d59c172bc58156e925099769cc4217 \
+    --hash=sha256:79217f918e02e02ef9ec6f2e77cdf5afc44a8c904840fe0f873d9116db1e8860 \
+    --hash=sha256:79d1cb861d017db8657a0fe0b4a02ddc60d596107e2e9e7816eaaca1afa30da4 \
+    --hash=sha256:7d4365d17bc44e24f861237e37c085aca89d22af756e6f1f5f05ffdc72c93737 \
+    --hash=sha256:7e0559ea770589958cdbed21f46d2ffdec2836ef43a00a4689d25205bb05cd22 \
+    --hash=sha256:86bb7612250925d49480a4648d30855d8f3d0e1dd8c322c586b4684847ff5d70 \
+    --hash=sha256:8bfbe9dae84acb76d05ffde64a85c06e71c05819890f4c28be3204c75e0d5c76 \
+    --hash=sha256:8f1aef999e0d48a4c3c2e6a713849392b883f918f4c1ce2b00d701c94c3252f8 \
+    --hash=sha256:9389743eb4c04d1fa0ed5448b4bc6c8283239ece9a9ff4145a5d41ddecd02d42 \
+    --hash=sha256:98dd46532ebb311123080c8df8805a94e66c02fa1b7d52d6d2f9abcf589c7f8b \
+    --hash=sha256:98deb64086f30454f791bd52aae2a2086d7896831b5966e8d22cb49b85758e4a \
+    --hash=sha256:a14b75f6c0cf79f2cb614c2459a492f8fed1836456e6488125652c9b2e7777aa \
+    --hash=sha256:a40aa941cf8201382986e4287c4fe51067a8bc2c78d9668937a6861cf14a54c6 \
+    --hash=sha256:b6d6de9172ef52ba1fb5cba12355bf6e845447a750a5214e9f57bf08aeeb6251 \
+    --hash=sha256:d1e205e53b08456f0f83210c20c674ebdef96e3e80f716d1bf4ad666db2c643b \
+    --hash=sha256:d2835094e92d0a3d1722d03afd54983115b2172d57581a664ad6a2af3d33c12c \
+    --hash=sha256:d419febaf110d8dbcfdcd7a37a74882a8fae68a6f96e40d7d53c93ef11fc9c70 \
+    --hash=sha256:d5b252bd5b30056b73827fdbc8d74d7d7af09e271b94ffca2cc3d96e625389ea \
+    --hash=sha256:dc11d00600888a690c1ad875759708a4d21bdf81b6c2032e0227687d27fca910 \
+    --hash=sha256:dd23b9bad57812d7b1d1de785e10a44e3352cf1f3c0e5bd7b678b27d93f482a4 \
+    --hash=sha256:e030f2036619d98e237a3561c8138b61fd4bf2f3f361d9f2e0b1112a8cd53d5b \
+    --hash=sha256:e20266fed25bd4198f59541b4343328479524042b781e810e8c6ad9c82a0420c \
+    --hash=sha256:e328d2afe68c772cae8cab23a210329ce1f434a1380fb585c2dba890cf08d3f1 \
+    --hash=sha256:e82b2ccd3caf1159d5a2ffea480eb5dbb0e9ea9baf4ac640d9fb86615ef22b9e
     # via awscli (pyproject.toml)
-cffi==1.17.1 \
-    --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
-    --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
-    --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \
-    --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
-    --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
-    --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
-    --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \
-    --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \
-    --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
-    --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
-    --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \
-    --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
-    --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
-    --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
-    --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
-    --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
-    --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
-    --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
-    --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
-    --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \
-    --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
-    --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
-    --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \
-    --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
-    --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
-    --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
-    --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \
-    --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \
-    --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
-    --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
-    --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
-    --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \
-    --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \
-    --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
-    --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
-    --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
-    --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
-    --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
-    --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
-    --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \
-    --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
-    --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \
-    --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
-    --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \
-    --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
-    --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \
-    --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
-    --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \
-    --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \
-    --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
-    --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
-    --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
-    --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
-    --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
-    --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
-    --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
-    --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
-    --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \
-    --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \
-    --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
-    --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \
-    --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
-    --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \
-    --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
-    --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
-    --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \
-    --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b
-    # via cryptography
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
     # via awscli (pyproject.toml)
-cryptography==43.0.1 \
-    --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
-    --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
-    --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
-    --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
-    --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
-    --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
-    --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
-    --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
-    --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \
-    --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
-    --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
-    --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
-    --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \
-    --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
-    --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
-    --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \
-    --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \
-    --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
-    --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
-    --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
-    --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
-    --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
-    --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
-    --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \
-    --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
-    --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
-    --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289
-    # via awscli (pyproject.toml)
 distro==1.8.0 \
     --hash=sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 \
     --hash=sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff
@@ -174,35 +76,33 @@ macholib==1.16.3 \
     --hash=sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 \
     --hash=sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c
     # via pyinstaller
-packaging==24.2 \
-    --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \
-    --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f
-    # via pyinstaller-hooks-contrib
-prompt-toolkit==3.0.38 \
-    --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \
-    --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f
-    # via awscli (pyproject.toml)
-pycparser==2.22 \
-    --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
-    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-    # via cffi
-pyinstaller==5.13.2 \
-    --hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
-    --hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
-    --hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
-    --hash=sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e \
-    --hash=sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6 \
-    --hash=sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade \
-    --hash=sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420 \
-    --hash=sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30 \
-    --hash=sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892 \
-    --hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
-    --hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
-    --hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
+packaging==25.0 \
+    --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \
+    --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f
+    # via
+    #   pyinstaller
+    #   pyinstaller-hooks-contrib
+prompt-toolkit==3.0.51 \
+    --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07 \
+    --hash=sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed
+    # via awscli (pyproject.toml)
+pyinstaller==6.11.1 \
+    --hash=sha256:0d6475559c4939f0735122989611d7f739ed3bf02f666ce31022928f7a7e4fda \
+    --hash=sha256:208c0ef6dab0837a0a273ea32d1a3619a208e3d1fe3fec3785eea71a77fd00ce \
+    --hash=sha256:2e8365276c5131c9bef98e358fbc305e4022db8bedc9df479629d6414021956a \
+    --hash=sha256:32c742a24fe65d0702958fadf4040f76de85859c26bec0008766e5dbabc5b68f \
+    --hash=sha256:35e6b8077d240600bb309ed68bb0b1453fd2b7ab740b66d000db7abae6244423 \
+    --hash=sha256:44e36172de326af6d4e7663b12f71dbd34e2e3e02233e181e457394423daaf03 \
+    --hash=sha256:491dfb4d9d5d1d9650d9507daec1ff6829527a254d8e396badd60a0affcb72ef \
+    --hash=sha256:6d12c45a29add78039066a53fb05967afaa09a672426072b13816fe7676abfc4 \
+    --hash=sha256:7ac83c0dc0e04357dab98c487e74ad2adb30e7eb186b58157a8faf46f1fa796f \
+    --hash=sha256:ad84abf465bcda363c1d54eafa76745d77b6a8a713778348377dc98d12a452f7 \
+    --hash=sha256:ddc0fddd75f07f7e423da1f0822e389a42af011f9589e0269b87e0d89aa48c1f \
+    --hash=sha256:e21c7806e34f40181e7606926a14579f848bfb1dc52cbca7eea66eccccbfe977
     # via -r requirements/portable-exe-extras.txt
-pyinstaller-hooks-contrib==2024.10 \
-    --hash=sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c \
-    --hash=sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10
+pyinstaller-hooks-contrib==2025.9 \
+    --hash=sha256:56e972bdaad4e9af767ed47d132362d162112260cbe488c9da7fee01f228a5a6 \
+    --hash=sha256:ccbfaa49399ef6b18486a165810155e5a8d4c59b41f20dc5da81af7482aaf038
     # via pyinstaller
 python-dateutil==2.9.0 \
     --hash=sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709 \
@@ -212,57 +112,53 @@ ruamel-yaml==0.17.21 \
     --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \
     --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af
     # via awscli (pyproject.toml)
-ruamel-yaml-clib==0.2.8 \
-    --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
-    --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
-    --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
-    --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
-    --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
-    --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
-    --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
-    --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
-    --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
-    --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
-    --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
-    --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
-    --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
-    --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
-    --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
-    --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
-    --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
-    --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
-    --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
-    --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
-    --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
-    --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
-    --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
-    --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
-    --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
-    --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
-    --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
-    --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
-    --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
-    --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
-    --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
-    --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
-    --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
-    --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
-    --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
-    --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
-    --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
-    --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
-    --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
-    --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
-    --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
-    --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
-    --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
-    --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
-    --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
-    --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
-    --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
-    --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
-    --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
-    --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
+ruamel-yaml-clib==0.2.12 \
+    --hash=sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b \
+    --hash=sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4 \
+    --hash=sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef \
+    --hash=sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5 \
+    --hash=sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3 \
+    --hash=sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632 \
+    --hash=sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6 \
+    --hash=sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7 \
+    --hash=sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680 \
+    --hash=sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf \
+    --hash=sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da \
+    --hash=sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6 \
+    --hash=sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a \
+    --hash=sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01 \
+    --hash=sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519 \
+    --hash=sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6 \
+    --hash=sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f \
+    --hash=sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd \
+    --hash=sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2 \
+    --hash=sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52 \
+    --hash=sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd \
+    --hash=sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d \
+    --hash=sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c \
+    --hash=sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6 \
+    --hash=sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb \
+    --hash=sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a \
+    --hash=sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969 \
+    --hash=sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28 \
+    --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \
+    --hash=sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e \
+    --hash=sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45 \
+    --hash=sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4 \
+    --hash=sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12 \
+    --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \
+    --hash=sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642 \
+    --hash=sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e \
+    --hash=sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285 \
+    --hash=sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed \
+    --hash=sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1 \
+    --hash=sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7 \
+    --hash=sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3 \
+    --hash=sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475 \
+    --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 \
+    --hash=sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76 \
+    --hash=sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987 \
+    --hash=sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df
     # via awscli (pyproject.toml)
 six==1.17.0 \
     --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
@@ -272,16 +168,14 @@ urllib3==1.26.20 \
     --hash=sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e \
     --hash=sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32
     # via awscli (pyproject.toml)
-wcwidth==0.2.13 \
-    --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \
-    --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5
+wcwidth==0.2.14 \
+    --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \
+    --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
     # via prompt-toolkit
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via
-    #   awscli (pyproject.toml)
-    #   importlib-metadata
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
+    # via importlib-metadata
 
 # WARNING: The following packages were not pinned, but pip requires them to be
 # pinned when the requirements file includes hashes and the requirement is not
diff -pruN 2.23.6-1/requirements/download-deps/portable-exe-win-lock.txt 2.31.35-1/requirements/download-deps/portable-exe-win-lock.txt
--- 2.23.6-1/requirements/download-deps/portable-exe-win-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/portable-exe-win-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,157 +1,59 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --generate-hashes --output-file='requirements\download-deps\portable-exe-win-lock.txt' --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'pyproject.toml' 'requirements\portable-exe-extras.txt'
+#    pip-compile --cert=None --client-cert=None --generate-hashes --index-url=None --output-file='requirements\download-deps\portable-exe-win-lock.txt' --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'pyproject.toml' 'requirements\portable-exe-extras.txt'
 #
 altgraph==0.17.4 \
     --hash=sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406 \
     --hash=sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff
     # via pyinstaller
-awscrt==0.23.4 \
-    --hash=sha256:0a5f05a85cbc590f09e5b9ffc491dc40a816dd4b781529ceb54ffc2758ccce2e \
-    --hash=sha256:11bf89b0311133d7f3c755524994c70b67cccb570426f5ccf436732264aadc60 \
-    --hash=sha256:176c2e966ada70f59cc5a67cbba4f360aded9f335789959b8a4f522a1c994f11 \
-    --hash=sha256:1da3931ef8c4a7b67faa26332c05a300f89f6c1461bf50c9179b7b85bae1fd78 \
-    --hash=sha256:1f5db8dfce79742cf70e39f799a0713a4bf7f7d8acdbc67140892de666b82e3b \
-    --hash=sha256:22e77a517c432776f865d8965ab7d2f125aecab986234a1675995143fdd78560 \
-    --hash=sha256:254066219b11987e759f8d48b6368e45b5ecc3da298a8770f28d93a99c58c6cd \
-    --hash=sha256:2df0e1f6df3b6d2debc888e1b5937613ee770d3fcb3e670a9a2b0c06e2ccd0d8 \
-    --hash=sha256:3125368ece0d0370a7ea99056821eca9ec037aa33c94b66141b70c60fbe0910e \
-    --hash=sha256:343b794c8865ee0476411851f419abe56cf032df89f939d706dc02994f107444 \
-    --hash=sha256:3b09fbea37de1b24ba9ce80d7aa250fc67c7bf0b0d71e995fa512aa3bbb00eea \
-    --hash=sha256:3b719798a48f9e31847d8bba55fbf1d3ac4f154137f085fb3b0ff8bccb4f3c36 \
-    --hash=sha256:3c1a3c20753d8b6bb37ec584518ef0addb37cde2f5caebbbc8ecfbb7846e8983 \
-    --hash=sha256:3ef5212a3c3b0549b3b0e85507b7bbdfb891ff40ca4c597e92db07a0bf7b614a \
-    --hash=sha256:416c5a450a16beeb130304d4887d47ed11222c1baf0aa2ce90895366ddde500f \
-    --hash=sha256:42a0c676abc56a49601abab5549112d293c33094a37bc76d00aa8c1c28a276db \
-    --hash=sha256:4b3afd109aa36980695d71002c0bdeab2d71881a865915e6678a64362789553b \
-    --hash=sha256:502c2659a0f888a55fd5746ac6f0005d2c306f18dc05ec86ec0b004243509eb1 \
-    --hash=sha256:5143f090862834c833d31d27b14f5d6f8cd011282725efb370ef49ffcd76a200 \
-    --hash=sha256:584f97bd3d2e8ec55e9862084aa7c59538c09dab245a5fa0af793a331fc94275 \
-    --hash=sha256:5ed306c28eefd2364c9751912e5281a171f497721e5a990626d8412ed7135565 \
-    --hash=sha256:629642372b7e8c21dd5bbeaa14b650ac64e5a0197dd0a375238dc183be94e300 \
-    --hash=sha256:679f12dcf0e44a92819f421325261789f0d6b73f461026d27bd5dfbf5461a1d4 \
-    --hash=sha256:6b5f344112a06bd00557bd63b420c920a6066cc628829a3c729bd53c11946f86 \
-    --hash=sha256:7bc75a9f12bee3b8e5987616eab23b3c1af83609e8021e879bd0ad4ce2c561f9 \
-    --hash=sha256:93a03e45b7ac721f080475b2759c8ad822756563a6d22b8c225614efeef71740 \
-    --hash=sha256:96d4f40aa4279b1548cb1a0db60e7448501f051b8b48af8151c68e3d0d1cf7b0 \
-    --hash=sha256:a229d7a0cb4aeb5a450222bb93532c4b3c5aad1697e7952640078a102eaeb539 \
-    --hash=sha256:ab627f4b05e1b515ee36519e819ca06675a115af19eaafa2f12ab1b043a591b7 \
-    --hash=sha256:abf502e8e121af2fbf9b34ecea34dd24c6fc27a2195fad77f71d8156bd8ba64e \
-    --hash=sha256:b25e2ff209f1785c62dc125990f7079c4c39a1072ab7e82e5cd3a890dc8c0201 \
-    --hash=sha256:b487161450c911ab4429bf8eecf2f12021429eac3a9d5af424ffa9315dfb551e \
-    --hash=sha256:c6b743a125c2cda1a721dc65f4b97a101410660bb091698f2c28ecfec8a07c54 \
-    --hash=sha256:ca7811696fc7cc1fd5f2f940c8983b6f6583f31068ae384741441beafa37128b \
-    --hash=sha256:d187572b7ab7e14ed50c959566a63f7b79ba32a8140d711b335f92d1f8de2655 \
-    --hash=sha256:d8060e350efb2bbe8a25873d21ab302cb8d3f6eb35767d57f6dca6ba55bae7eb \
-    --hash=sha256:e16485ffbd917aa11fe394f23237be4592a5d3efd69d19ff4bacf1c629652452 \
-    --hash=sha256:ee47de681d9fe0876d1fc6a1110ba1fb37de51bcb6d2e226ff2a25c7e345f9da \
-    --hash=sha256:f16632a218a12bc6142bcc77f5e6c920b0b40beab414dbeec9826794f7c8475a \
-    --hash=sha256:fb3ad12008bb358b21ad021ef21a11c5960d871bb9aef95a5a639ce5548a54df
+awscrt==0.28.4 \
+    --hash=sha256:0024b3e26a5ce9ffc9a92533f0a62bd823e025465f3b90ad3dda2878a260171a \
+    --hash=sha256:046006703a7ed6278d5f80214c9aae02fc6b6a65a5f7ceb721becf9e1ad90604 \
+    --hash=sha256:08941fb1f603f1b7b722e8670f121ccf8f25a4073d2f92e3696ae763e309a39d \
+    --hash=sha256:08b884bb6809d22f80921feb0ae9353fea1a750109a18d02057b6bba742db439 \
+    --hash=sha256:13ed9b71a346146a89de85c173d007142416e6cc0358d7ca6b0d68dc1d159667 \
+    --hash=sha256:19adb9fa309111e20e1e850c876f093247ad084efdaa2dd654a15aef4b4bc637 \
+    --hash=sha256:1c6319d297d18ba7cf3c6a8f69f76fd22b949e4ea8a280eb2098a8d6ed0d25be \
+    --hash=sha256:1dd5dac3f761cb74c70c7feebf9f8dc96dc3b8db8248e5899bcbf34633d974a3 \
+    --hash=sha256:277af1c4e5ef666192bd04aea8c3afcbb26d7794594f6f7ba23d7285df5be65e \
+    --hash=sha256:43e1a88bec567e89eb398151ca6af389feb3a7f9b297141061fe759e65b43a52 \
+    --hash=sha256:4657eb947e214c8314d1b26df64e4f8c7c2f3b6817cebae00e3288a4bb1779c5 \
+    --hash=sha256:56e949e965a7668fe0bc6638edf88c009e44090216bb894a5ac758153b01757c \
+    --hash=sha256:5d95f06142634043dc5c9e20e8f7a16b710e32aa1ae3f42eebb3643cabbe4275 \
+    --hash=sha256:653f0c57f1f00cf526045ae2b76cd79f13cb751ed5400a545dcf44a9e5d0fa96 \
+    --hash=sha256:694c183bf2c3ef1d538caa5a73c007cddd841529bc43c6beeb02eb6a353094e6 \
+    --hash=sha256:6a8543c8637374a0963113663fe053c43868d091e5109bcdc1f14f79f780a6c7 \
+    --hash=sha256:726926408dea51284fc5f4ab112e797226d59c172bc58156e925099769cc4217 \
+    --hash=sha256:79217f918e02e02ef9ec6f2e77cdf5afc44a8c904840fe0f873d9116db1e8860 \
+    --hash=sha256:79d1cb861d017db8657a0fe0b4a02ddc60d596107e2e9e7816eaaca1afa30da4 \
+    --hash=sha256:7d4365d17bc44e24f861237e37c085aca89d22af756e6f1f5f05ffdc72c93737 \
+    --hash=sha256:7e0559ea770589958cdbed21f46d2ffdec2836ef43a00a4689d25205bb05cd22 \
+    --hash=sha256:86bb7612250925d49480a4648d30855d8f3d0e1dd8c322c586b4684847ff5d70 \
+    --hash=sha256:8bfbe9dae84acb76d05ffde64a85c06e71c05819890f4c28be3204c75e0d5c76 \
+    --hash=sha256:8f1aef999e0d48a4c3c2e6a713849392b883f918f4c1ce2b00d701c94c3252f8 \
+    --hash=sha256:9389743eb4c04d1fa0ed5448b4bc6c8283239ece9a9ff4145a5d41ddecd02d42 \
+    --hash=sha256:98dd46532ebb311123080c8df8805a94e66c02fa1b7d52d6d2f9abcf589c7f8b \
+    --hash=sha256:98deb64086f30454f791bd52aae2a2086d7896831b5966e8d22cb49b85758e4a \
+    --hash=sha256:a14b75f6c0cf79f2cb614c2459a492f8fed1836456e6488125652c9b2e7777aa \
+    --hash=sha256:a40aa941cf8201382986e4287c4fe51067a8bc2c78d9668937a6861cf14a54c6 \
+    --hash=sha256:b6d6de9172ef52ba1fb5cba12355bf6e845447a750a5214e9f57bf08aeeb6251 \
+    --hash=sha256:d1e205e53b08456f0f83210c20c674ebdef96e3e80f716d1bf4ad666db2c643b \
+    --hash=sha256:d2835094e92d0a3d1722d03afd54983115b2172d57581a664ad6a2af3d33c12c \
+    --hash=sha256:d419febaf110d8dbcfdcd7a37a74882a8fae68a6f96e40d7d53c93ef11fc9c70 \
+    --hash=sha256:d5b252bd5b30056b73827fdbc8d74d7d7af09e271b94ffca2cc3d96e625389ea \
+    --hash=sha256:dc11d00600888a690c1ad875759708a4d21bdf81b6c2032e0227687d27fca910 \
+    --hash=sha256:dd23b9bad57812d7b1d1de785e10a44e3352cf1f3c0e5bd7b678b27d93f482a4 \
+    --hash=sha256:e030f2036619d98e237a3561c8138b61fd4bf2f3f361d9f2e0b1112a8cd53d5b \
+    --hash=sha256:e20266fed25bd4198f59541b4343328479524042b781e810e8c6ad9c82a0420c \
+    --hash=sha256:e328d2afe68c772cae8cab23a210329ce1f434a1380fb585c2dba890cf08d3f1 \
+    --hash=sha256:e82b2ccd3caf1159d5a2ffea480eb5dbb0e9ea9baf4ac640d9fb86615ef22b9e
     # via awscli (pyproject.toml)
-cffi==1.17.1 \
-    --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
-    --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
-    --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \
-    --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
-    --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
-    --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
-    --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \
-    --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \
-    --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
-    --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
-    --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \
-    --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
-    --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
-    --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
-    --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
-    --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
-    --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
-    --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
-    --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
-    --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \
-    --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
-    --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
-    --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \
-    --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
-    --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
-    --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
-    --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \
-    --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \
-    --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
-    --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
-    --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
-    --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \
-    --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \
-    --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
-    --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
-    --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
-    --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
-    --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
-    --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
-    --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \
-    --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
-    --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \
-    --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
-    --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \
-    --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
-    --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \
-    --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
-    --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \
-    --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \
-    --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
-    --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
-    --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
-    --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
-    --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
-    --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
-    --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
-    --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
-    --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \
-    --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \
-    --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
-    --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \
-    --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
-    --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \
-    --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
-    --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
-    --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \
-    --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b
-    # via cryptography
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
     # via awscli (pyproject.toml)
-cryptography==43.0.1 \
-    --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
-    --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
-    --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
-    --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
-    --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
-    --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
-    --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
-    --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
-    --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \
-    --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
-    --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
-    --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
-    --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \
-    --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
-    --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
-    --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \
-    --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \
-    --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
-    --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
-    --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
-    --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
-    --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
-    --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
-    --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \
-    --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
-    --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
-    --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289
-    # via awscli (pyproject.toml)
 distro==1.8.0 \
     --hash=sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 \
     --hash=sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff
@@ -163,44 +65,42 @@ docutils==0.19 \
 importlib-metadata==7.1.0 \
     --hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570 \
     --hash=sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2
-    # via -r requirements\portable-exe-extras.txt
+    # via -r D:/a/aws-cli/aws-cli/requirements/portable-exe-extras.txt
 jmespath==1.0.1 \
     --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
     --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
     # via awscli (pyproject.toml)
-packaging==24.2 \
-    --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \
-    --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f
-    # via pyinstaller-hooks-contrib
-pefile==2024.8.26 \
-    --hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
-    --hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
+packaging==25.0 \
+    --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \
+    --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f
+    # via
+    #   pyinstaller
+    #   pyinstaller-hooks-contrib
+pefile==2023.2.7 \
+    --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \
+    --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6
     # via pyinstaller
-prompt-toolkit==3.0.38 \
-    --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \
-    --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f
-    # via awscli (pyproject.toml)
-pycparser==2.22 \
-    --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
-    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-    # via cffi
-pyinstaller==5.13.2 \
-    --hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
-    --hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
-    --hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
-    --hash=sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e \
-    --hash=sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6 \
-    --hash=sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade \
-    --hash=sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420 \
-    --hash=sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30 \
-    --hash=sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892 \
-    --hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
-    --hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
-    --hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
-    # via -r requirements\portable-exe-extras.txt
-pyinstaller-hooks-contrib==2024.10 \
-    --hash=sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c \
-    --hash=sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10
+prompt-toolkit==3.0.51 \
+    --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07 \
+    --hash=sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed
+    # via awscli (pyproject.toml)
+pyinstaller==6.11.1 \
+    --hash=sha256:0d6475559c4939f0735122989611d7f739ed3bf02f666ce31022928f7a7e4fda \
+    --hash=sha256:208c0ef6dab0837a0a273ea32d1a3619a208e3d1fe3fec3785eea71a77fd00ce \
+    --hash=sha256:2e8365276c5131c9bef98e358fbc305e4022db8bedc9df479629d6414021956a \
+    --hash=sha256:32c742a24fe65d0702958fadf4040f76de85859c26bec0008766e5dbabc5b68f \
+    --hash=sha256:35e6b8077d240600bb309ed68bb0b1453fd2b7ab740b66d000db7abae6244423 \
+    --hash=sha256:44e36172de326af6d4e7663b12f71dbd34e2e3e02233e181e457394423daaf03 \
+    --hash=sha256:491dfb4d9d5d1d9650d9507daec1ff6829527a254d8e396badd60a0affcb72ef \
+    --hash=sha256:6d12c45a29add78039066a53fb05967afaa09a672426072b13816fe7676abfc4 \
+    --hash=sha256:7ac83c0dc0e04357dab98c487e74ad2adb30e7eb186b58157a8faf46f1fa796f \
+    --hash=sha256:ad84abf465bcda363c1d54eafa76745d77b6a8a713778348377dc98d12a452f7 \
+    --hash=sha256:ddc0fddd75f07f7e423da1f0822e389a42af011f9589e0269b87e0d89aa48c1f \
+    --hash=sha256:e21c7806e34f40181e7606926a14579f848bfb1dc52cbca7eea66eccccbfe977
+    # via -r D:/a/aws-cli/aws-cli/requirements/portable-exe-extras.txt
+pyinstaller-hooks-contrib==2025.9 \
+    --hash=sha256:56e972bdaad4e9af767ed47d132362d162112260cbe488c9da7fee01f228a5a6 \
+    --hash=sha256:ccbfaa49399ef6b18486a165810155e5a8d4c59b41f20dc5da81af7482aaf038
     # via pyinstaller
 python-dateutil==2.9.0 \
     --hash=sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709 \
@@ -214,57 +114,53 @@ ruamel-yaml==0.17.21 \
     --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \
     --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af
     # via awscli (pyproject.toml)
-ruamel-yaml-clib==0.2.8 \
-    --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
-    --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
-    --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
-    --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
-    --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
-    --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
-    --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
-    --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
-    --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
-    --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
-    --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
-    --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
-    --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
-    --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
-    --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
-    --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
-    --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
-    --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
-    --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
-    --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
-    --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
-    --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
-    --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
-    --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
-    --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
-    --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
-    --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
-    --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
-    --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
-    --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
-    --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
-    --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
-    --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
-    --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
-    --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
-    --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
-    --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
-    --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
-    --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
-    --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
-    --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
-    --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
-    --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
-    --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
-    --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
-    --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
-    --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
-    --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
-    --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
-    --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
+ruamel-yaml-clib==0.2.12 \
+    --hash=sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b \
+    --hash=sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4 \
+    --hash=sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef \
+    --hash=sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5 \
+    --hash=sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3 \
+    --hash=sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632 \
+    --hash=sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6 \
+    --hash=sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7 \
+    --hash=sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680 \
+    --hash=sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf \
+    --hash=sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da \
+    --hash=sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6 \
+    --hash=sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a \
+    --hash=sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01 \
+    --hash=sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519 \
+    --hash=sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6 \
+    --hash=sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f \
+    --hash=sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd \
+    --hash=sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2 \
+    --hash=sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52 \
+    --hash=sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd \
+    --hash=sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d \
+    --hash=sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c \
+    --hash=sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6 \
+    --hash=sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb \
+    --hash=sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a \
+    --hash=sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969 \
+    --hash=sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28 \
+    --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \
+    --hash=sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e \
+    --hash=sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45 \
+    --hash=sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4 \
+    --hash=sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12 \
+    --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \
+    --hash=sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642 \
+    --hash=sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e \
+    --hash=sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285 \
+    --hash=sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed \
+    --hash=sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1 \
+    --hash=sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7 \
+    --hash=sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3 \
+    --hash=sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475 \
+    --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 \
+    --hash=sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76 \
+    --hash=sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987 \
+    --hash=sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df
     # via awscli (pyproject.toml)
 six==1.17.0 \
     --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
@@ -274,16 +170,14 @@ urllib3==1.26.20 \
     --hash=sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e \
     --hash=sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32
     # via awscli (pyproject.toml)
-wcwidth==0.2.13 \
-    --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \
-    --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5
+wcwidth==0.2.14 \
+    --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \
+    --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
     # via prompt-toolkit
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via
-    #   awscli (pyproject.toml)
-    #   importlib-metadata
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
+    # via importlib-metadata
 
 # WARNING: The following packages were not pinned, but pip requires them to be
 # pinned when the requirements file includes hashes and the requirement is not
diff -pruN 2.23.6-1/requirements/download-deps/system-sandbox-lock.txt 2.31.35-1/requirements/download-deps/system-sandbox-lock.txt
--- 2.23.6-1/requirements/download-deps/system-sandbox-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/system-sandbox-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,153 +1,55 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --generate-hashes --output-file=requirements/download-deps/system-sandbox-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel pyproject.toml
+#    pip-compile --cert=None --client-cert=None --generate-hashes --index-url=None --output-file=requirements/download-deps/system-sandbox-lock.txt --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel pyproject.toml
 #
-awscrt==0.23.4 \
-    --hash=sha256:0a5f05a85cbc590f09e5b9ffc491dc40a816dd4b781529ceb54ffc2758ccce2e \
-    --hash=sha256:11bf89b0311133d7f3c755524994c70b67cccb570426f5ccf436732264aadc60 \
-    --hash=sha256:176c2e966ada70f59cc5a67cbba4f360aded9f335789959b8a4f522a1c994f11 \
-    --hash=sha256:1da3931ef8c4a7b67faa26332c05a300f89f6c1461bf50c9179b7b85bae1fd78 \
-    --hash=sha256:1f5db8dfce79742cf70e39f799a0713a4bf7f7d8acdbc67140892de666b82e3b \
-    --hash=sha256:22e77a517c432776f865d8965ab7d2f125aecab986234a1675995143fdd78560 \
-    --hash=sha256:254066219b11987e759f8d48b6368e45b5ecc3da298a8770f28d93a99c58c6cd \
-    --hash=sha256:2df0e1f6df3b6d2debc888e1b5937613ee770d3fcb3e670a9a2b0c06e2ccd0d8 \
-    --hash=sha256:3125368ece0d0370a7ea99056821eca9ec037aa33c94b66141b70c60fbe0910e \
-    --hash=sha256:343b794c8865ee0476411851f419abe56cf032df89f939d706dc02994f107444 \
-    --hash=sha256:3b09fbea37de1b24ba9ce80d7aa250fc67c7bf0b0d71e995fa512aa3bbb00eea \
-    --hash=sha256:3b719798a48f9e31847d8bba55fbf1d3ac4f154137f085fb3b0ff8bccb4f3c36 \
-    --hash=sha256:3c1a3c20753d8b6bb37ec584518ef0addb37cde2f5caebbbc8ecfbb7846e8983 \
-    --hash=sha256:3ef5212a3c3b0549b3b0e85507b7bbdfb891ff40ca4c597e92db07a0bf7b614a \
-    --hash=sha256:416c5a450a16beeb130304d4887d47ed11222c1baf0aa2ce90895366ddde500f \
-    --hash=sha256:42a0c676abc56a49601abab5549112d293c33094a37bc76d00aa8c1c28a276db \
-    --hash=sha256:4b3afd109aa36980695d71002c0bdeab2d71881a865915e6678a64362789553b \
-    --hash=sha256:502c2659a0f888a55fd5746ac6f0005d2c306f18dc05ec86ec0b004243509eb1 \
-    --hash=sha256:5143f090862834c833d31d27b14f5d6f8cd011282725efb370ef49ffcd76a200 \
-    --hash=sha256:584f97bd3d2e8ec55e9862084aa7c59538c09dab245a5fa0af793a331fc94275 \
-    --hash=sha256:5ed306c28eefd2364c9751912e5281a171f497721e5a990626d8412ed7135565 \
-    --hash=sha256:629642372b7e8c21dd5bbeaa14b650ac64e5a0197dd0a375238dc183be94e300 \
-    --hash=sha256:679f12dcf0e44a92819f421325261789f0d6b73f461026d27bd5dfbf5461a1d4 \
-    --hash=sha256:6b5f344112a06bd00557bd63b420c920a6066cc628829a3c729bd53c11946f86 \
-    --hash=sha256:7bc75a9f12bee3b8e5987616eab23b3c1af83609e8021e879bd0ad4ce2c561f9 \
-    --hash=sha256:93a03e45b7ac721f080475b2759c8ad822756563a6d22b8c225614efeef71740 \
-    --hash=sha256:96d4f40aa4279b1548cb1a0db60e7448501f051b8b48af8151c68e3d0d1cf7b0 \
-    --hash=sha256:a229d7a0cb4aeb5a450222bb93532c4b3c5aad1697e7952640078a102eaeb539 \
-    --hash=sha256:ab627f4b05e1b515ee36519e819ca06675a115af19eaafa2f12ab1b043a591b7 \
-    --hash=sha256:abf502e8e121af2fbf9b34ecea34dd24c6fc27a2195fad77f71d8156bd8ba64e \
-    --hash=sha256:b25e2ff209f1785c62dc125990f7079c4c39a1072ab7e82e5cd3a890dc8c0201 \
-    --hash=sha256:b487161450c911ab4429bf8eecf2f12021429eac3a9d5af424ffa9315dfb551e \
-    --hash=sha256:c6b743a125c2cda1a721dc65f4b97a101410660bb091698f2c28ecfec8a07c54 \
-    --hash=sha256:ca7811696fc7cc1fd5f2f940c8983b6f6583f31068ae384741441beafa37128b \
-    --hash=sha256:d187572b7ab7e14ed50c959566a63f7b79ba32a8140d711b335f92d1f8de2655 \
-    --hash=sha256:d8060e350efb2bbe8a25873d21ab302cb8d3f6eb35767d57f6dca6ba55bae7eb \
-    --hash=sha256:e16485ffbd917aa11fe394f23237be4592a5d3efd69d19ff4bacf1c629652452 \
-    --hash=sha256:ee47de681d9fe0876d1fc6a1110ba1fb37de51bcb6d2e226ff2a25c7e345f9da \
-    --hash=sha256:f16632a218a12bc6142bcc77f5e6c920b0b40beab414dbeec9826794f7c8475a \
-    --hash=sha256:fb3ad12008bb358b21ad021ef21a11c5960d871bb9aef95a5a639ce5548a54df
-    # via awscli (pyproject.toml)
-cffi==1.17.1 \
-    --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
-    --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
-    --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \
-    --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
-    --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
-    --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
-    --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \
-    --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \
-    --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
-    --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
-    --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \
-    --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
-    --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
-    --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
-    --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
-    --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
-    --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
-    --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
-    --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
-    --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \
-    --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
-    --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
-    --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \
-    --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
-    --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
-    --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
-    --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \
-    --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \
-    --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
-    --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
-    --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
-    --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \
-    --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \
-    --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
-    --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
-    --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
-    --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
-    --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
-    --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
-    --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \
-    --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
-    --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \
-    --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
-    --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \
-    --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
-    --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \
-    --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
-    --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \
-    --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \
-    --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
-    --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
-    --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
-    --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
-    --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
-    --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
-    --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
-    --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
-    --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \
-    --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \
-    --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
-    --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \
-    --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
-    --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \
-    --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
-    --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
-    --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \
-    --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b
-    # via cryptography
+awscrt==0.28.4 \
+    --hash=sha256:0024b3e26a5ce9ffc9a92533f0a62bd823e025465f3b90ad3dda2878a260171a \
+    --hash=sha256:046006703a7ed6278d5f80214c9aae02fc6b6a65a5f7ceb721becf9e1ad90604 \
+    --hash=sha256:08941fb1f603f1b7b722e8670f121ccf8f25a4073d2f92e3696ae763e309a39d \
+    --hash=sha256:08b884bb6809d22f80921feb0ae9353fea1a750109a18d02057b6bba742db439 \
+    --hash=sha256:13ed9b71a346146a89de85c173d007142416e6cc0358d7ca6b0d68dc1d159667 \
+    --hash=sha256:19adb9fa309111e20e1e850c876f093247ad084efdaa2dd654a15aef4b4bc637 \
+    --hash=sha256:1c6319d297d18ba7cf3c6a8f69f76fd22b949e4ea8a280eb2098a8d6ed0d25be \
+    --hash=sha256:1dd5dac3f761cb74c70c7feebf9f8dc96dc3b8db8248e5899bcbf34633d974a3 \
+    --hash=sha256:277af1c4e5ef666192bd04aea8c3afcbb26d7794594f6f7ba23d7285df5be65e \
+    --hash=sha256:43e1a88bec567e89eb398151ca6af389feb3a7f9b297141061fe759e65b43a52 \
+    --hash=sha256:4657eb947e214c8314d1b26df64e4f8c7c2f3b6817cebae00e3288a4bb1779c5 \
+    --hash=sha256:56e949e965a7668fe0bc6638edf88c009e44090216bb894a5ac758153b01757c \
+    --hash=sha256:5d95f06142634043dc5c9e20e8f7a16b710e32aa1ae3f42eebb3643cabbe4275 \
+    --hash=sha256:653f0c57f1f00cf526045ae2b76cd79f13cb751ed5400a545dcf44a9e5d0fa96 \
+    --hash=sha256:694c183bf2c3ef1d538caa5a73c007cddd841529bc43c6beeb02eb6a353094e6 \
+    --hash=sha256:6a8543c8637374a0963113663fe053c43868d091e5109bcdc1f14f79f780a6c7 \
+    --hash=sha256:726926408dea51284fc5f4ab112e797226d59c172bc58156e925099769cc4217 \
+    --hash=sha256:79217f918e02e02ef9ec6f2e77cdf5afc44a8c904840fe0f873d9116db1e8860 \
+    --hash=sha256:79d1cb861d017db8657a0fe0b4a02ddc60d596107e2e9e7816eaaca1afa30da4 \
+    --hash=sha256:7d4365d17bc44e24f861237e37c085aca89d22af756e6f1f5f05ffdc72c93737 \
+    --hash=sha256:7e0559ea770589958cdbed21f46d2ffdec2836ef43a00a4689d25205bb05cd22 \
+    --hash=sha256:86bb7612250925d49480a4648d30855d8f3d0e1dd8c322c586b4684847ff5d70 \
+    --hash=sha256:8bfbe9dae84acb76d05ffde64a85c06e71c05819890f4c28be3204c75e0d5c76 \
+    --hash=sha256:8f1aef999e0d48a4c3c2e6a713849392b883f918f4c1ce2b00d701c94c3252f8 \
+    --hash=sha256:9389743eb4c04d1fa0ed5448b4bc6c8283239ece9a9ff4145a5d41ddecd02d42 \
+    --hash=sha256:98dd46532ebb311123080c8df8805a94e66c02fa1b7d52d6d2f9abcf589c7f8b \
+    --hash=sha256:98deb64086f30454f791bd52aae2a2086d7896831b5966e8d22cb49b85758e4a \
+    --hash=sha256:a14b75f6c0cf79f2cb614c2459a492f8fed1836456e6488125652c9b2e7777aa \
+    --hash=sha256:a40aa941cf8201382986e4287c4fe51067a8bc2c78d9668937a6861cf14a54c6 \
+    --hash=sha256:b6d6de9172ef52ba1fb5cba12355bf6e845447a750a5214e9f57bf08aeeb6251 \
+    --hash=sha256:d1e205e53b08456f0f83210c20c674ebdef96e3e80f716d1bf4ad666db2c643b \
+    --hash=sha256:d2835094e92d0a3d1722d03afd54983115b2172d57581a664ad6a2af3d33c12c \
+    --hash=sha256:d419febaf110d8dbcfdcd7a37a74882a8fae68a6f96e40d7d53c93ef11fc9c70 \
+    --hash=sha256:d5b252bd5b30056b73827fdbc8d74d7d7af09e271b94ffca2cc3d96e625389ea \
+    --hash=sha256:dc11d00600888a690c1ad875759708a4d21bdf81b6c2032e0227687d27fca910 \
+    --hash=sha256:dd23b9bad57812d7b1d1de785e10a44e3352cf1f3c0e5bd7b678b27d93f482a4 \
+    --hash=sha256:e030f2036619d98e237a3561c8138b61fd4bf2f3f361d9f2e0b1112a8cd53d5b \
+    --hash=sha256:e20266fed25bd4198f59541b4343328479524042b781e810e8c6ad9c82a0420c \
+    --hash=sha256:e328d2afe68c772cae8cab23a210329ce1f434a1380fb585c2dba890cf08d3f1 \
+    --hash=sha256:e82b2ccd3caf1159d5a2ffea480eb5dbb0e9ea9baf4ac640d9fb86615ef22b9e
+    # via awscli (pyproject.toml)
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
     # via awscli (pyproject.toml)
-cryptography==43.0.1 \
-    --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
-    --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
-    --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
-    --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
-    --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
-    --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
-    --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
-    --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
-    --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \
-    --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
-    --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
-    --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
-    --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \
-    --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
-    --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
-    --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \
-    --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \
-    --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
-    --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
-    --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
-    --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
-    --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
-    --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
-    --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \
-    --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
-    --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
-    --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289
-    # via awscli (pyproject.toml)
 distro==1.8.0 \
     --hash=sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 \
     --hash=sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff
@@ -160,14 +62,10 @@ jmespath==1.0.1 \
     --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
     --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
     # via awscli (pyproject.toml)
-prompt-toolkit==3.0.38 \
-    --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \
-    --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f
-    # via awscli (pyproject.toml)
-pycparser==2.22 \
-    --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
-    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-    # via cffi
+prompt-toolkit==3.0.51 \
+    --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07 \
+    --hash=sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed
+    # via awscli (pyproject.toml)
 python-dateutil==2.9.0 \
     --hash=sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709 \
     --hash=sha256:cbf2f1da5e6083ac2fbfd4da39a25f34312230110440f424a14c7558bb85d82e
@@ -176,57 +74,53 @@ ruamel-yaml==0.17.21 \
     --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \
     --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af
     # via awscli (pyproject.toml)
-ruamel-yaml-clib==0.2.8 \
-    --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
-    --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
-    --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
-    --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
-    --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
-    --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
-    --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
-    --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
-    --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
-    --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
-    --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
-    --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
-    --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
-    --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
-    --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
-    --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
-    --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
-    --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
-    --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
-    --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
-    --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
-    --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
-    --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
-    --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
-    --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
-    --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
-    --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
-    --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
-    --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
-    --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
-    --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
-    --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
-    --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
-    --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
-    --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
-    --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
-    --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
-    --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
-    --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
-    --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
-    --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
-    --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
-    --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
-    --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
-    --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
-    --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
-    --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
-    --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
-    --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
-    --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
+ruamel-yaml-clib==0.2.12 \
+    --hash=sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b \
+    --hash=sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4 \
+    --hash=sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef \
+    --hash=sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5 \
+    --hash=sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3 \
+    --hash=sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632 \
+    --hash=sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6 \
+    --hash=sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7 \
+    --hash=sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680 \
+    --hash=sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf \
+    --hash=sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da \
+    --hash=sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6 \
+    --hash=sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a \
+    --hash=sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01 \
+    --hash=sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519 \
+    --hash=sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6 \
+    --hash=sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f \
+    --hash=sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd \
+    --hash=sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2 \
+    --hash=sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52 \
+    --hash=sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd \
+    --hash=sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d \
+    --hash=sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c \
+    --hash=sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6 \
+    --hash=sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb \
+    --hash=sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a \
+    --hash=sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969 \
+    --hash=sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28 \
+    --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \
+    --hash=sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e \
+    --hash=sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45 \
+    --hash=sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4 \
+    --hash=sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12 \
+    --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \
+    --hash=sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642 \
+    --hash=sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e \
+    --hash=sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285 \
+    --hash=sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed \
+    --hash=sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1 \
+    --hash=sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7 \
+    --hash=sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3 \
+    --hash=sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475 \
+    --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 \
+    --hash=sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76 \
+    --hash=sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987 \
+    --hash=sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df
     # via awscli (pyproject.toml)
 six==1.17.0 \
     --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
@@ -236,11 +130,7 @@ urllib3==1.26.20 \
     --hash=sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e \
     --hash=sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32
     # via awscli (pyproject.toml)
-wcwidth==0.2.13 \
-    --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \
-    --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5
+wcwidth==0.2.14 \
+    --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \
+    --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
     # via prompt-toolkit
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via awscli (pyproject.toml)
diff -pruN 2.23.6-1/requirements/download-deps/system-sandbox-win-lock.txt 2.31.35-1/requirements/download-deps/system-sandbox-win-lock.txt
--- 2.23.6-1/requirements/download-deps/system-sandbox-win-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/download-deps/system-sandbox-win-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,153 +1,55 @@
 #
-# This file is autogenerated by pip-compile with Python 3.12
+# This file is autogenerated by pip-compile with Python 3.13
 # by the following command:
 #
-#    pip-compile --generate-hashes --output-file='requirements\download-deps\system-sandbox-win-lock.txt' --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'pyproject.toml'
+#    pip-compile --cert=None --client-cert=None --generate-hashes --index-url=None --output-file='requirements\download-deps\system-sandbox-win-lock.txt' --pip-args=None --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel 'pyproject.toml'
 #
-awscrt==0.23.4 \
-    --hash=sha256:0a5f05a85cbc590f09e5b9ffc491dc40a816dd4b781529ceb54ffc2758ccce2e \
-    --hash=sha256:11bf89b0311133d7f3c755524994c70b67cccb570426f5ccf436732264aadc60 \
-    --hash=sha256:176c2e966ada70f59cc5a67cbba4f360aded9f335789959b8a4f522a1c994f11 \
-    --hash=sha256:1da3931ef8c4a7b67faa26332c05a300f89f6c1461bf50c9179b7b85bae1fd78 \
-    --hash=sha256:1f5db8dfce79742cf70e39f799a0713a4bf7f7d8acdbc67140892de666b82e3b \
-    --hash=sha256:22e77a517c432776f865d8965ab7d2f125aecab986234a1675995143fdd78560 \
-    --hash=sha256:254066219b11987e759f8d48b6368e45b5ecc3da298a8770f28d93a99c58c6cd \
-    --hash=sha256:2df0e1f6df3b6d2debc888e1b5937613ee770d3fcb3e670a9a2b0c06e2ccd0d8 \
-    --hash=sha256:3125368ece0d0370a7ea99056821eca9ec037aa33c94b66141b70c60fbe0910e \
-    --hash=sha256:343b794c8865ee0476411851f419abe56cf032df89f939d706dc02994f107444 \
-    --hash=sha256:3b09fbea37de1b24ba9ce80d7aa250fc67c7bf0b0d71e995fa512aa3bbb00eea \
-    --hash=sha256:3b719798a48f9e31847d8bba55fbf1d3ac4f154137f085fb3b0ff8bccb4f3c36 \
-    --hash=sha256:3c1a3c20753d8b6bb37ec584518ef0addb37cde2f5caebbbc8ecfbb7846e8983 \
-    --hash=sha256:3ef5212a3c3b0549b3b0e85507b7bbdfb891ff40ca4c597e92db07a0bf7b614a \
-    --hash=sha256:416c5a450a16beeb130304d4887d47ed11222c1baf0aa2ce90895366ddde500f \
-    --hash=sha256:42a0c676abc56a49601abab5549112d293c33094a37bc76d00aa8c1c28a276db \
-    --hash=sha256:4b3afd109aa36980695d71002c0bdeab2d71881a865915e6678a64362789553b \
-    --hash=sha256:502c2659a0f888a55fd5746ac6f0005d2c306f18dc05ec86ec0b004243509eb1 \
-    --hash=sha256:5143f090862834c833d31d27b14f5d6f8cd011282725efb370ef49ffcd76a200 \
-    --hash=sha256:584f97bd3d2e8ec55e9862084aa7c59538c09dab245a5fa0af793a331fc94275 \
-    --hash=sha256:5ed306c28eefd2364c9751912e5281a171f497721e5a990626d8412ed7135565 \
-    --hash=sha256:629642372b7e8c21dd5bbeaa14b650ac64e5a0197dd0a375238dc183be94e300 \
-    --hash=sha256:679f12dcf0e44a92819f421325261789f0d6b73f461026d27bd5dfbf5461a1d4 \
-    --hash=sha256:6b5f344112a06bd00557bd63b420c920a6066cc628829a3c729bd53c11946f86 \
-    --hash=sha256:7bc75a9f12bee3b8e5987616eab23b3c1af83609e8021e879bd0ad4ce2c561f9 \
-    --hash=sha256:93a03e45b7ac721f080475b2759c8ad822756563a6d22b8c225614efeef71740 \
-    --hash=sha256:96d4f40aa4279b1548cb1a0db60e7448501f051b8b48af8151c68e3d0d1cf7b0 \
-    --hash=sha256:a229d7a0cb4aeb5a450222bb93532c4b3c5aad1697e7952640078a102eaeb539 \
-    --hash=sha256:ab627f4b05e1b515ee36519e819ca06675a115af19eaafa2f12ab1b043a591b7 \
-    --hash=sha256:abf502e8e121af2fbf9b34ecea34dd24c6fc27a2195fad77f71d8156bd8ba64e \
-    --hash=sha256:b25e2ff209f1785c62dc125990f7079c4c39a1072ab7e82e5cd3a890dc8c0201 \
-    --hash=sha256:b487161450c911ab4429bf8eecf2f12021429eac3a9d5af424ffa9315dfb551e \
-    --hash=sha256:c6b743a125c2cda1a721dc65f4b97a101410660bb091698f2c28ecfec8a07c54 \
-    --hash=sha256:ca7811696fc7cc1fd5f2f940c8983b6f6583f31068ae384741441beafa37128b \
-    --hash=sha256:d187572b7ab7e14ed50c959566a63f7b79ba32a8140d711b335f92d1f8de2655 \
-    --hash=sha256:d8060e350efb2bbe8a25873d21ab302cb8d3f6eb35767d57f6dca6ba55bae7eb \
-    --hash=sha256:e16485ffbd917aa11fe394f23237be4592a5d3efd69d19ff4bacf1c629652452 \
-    --hash=sha256:ee47de681d9fe0876d1fc6a1110ba1fb37de51bcb6d2e226ff2a25c7e345f9da \
-    --hash=sha256:f16632a218a12bc6142bcc77f5e6c920b0b40beab414dbeec9826794f7c8475a \
-    --hash=sha256:fb3ad12008bb358b21ad021ef21a11c5960d871bb9aef95a5a639ce5548a54df
-    # via awscli (pyproject.toml)
-cffi==1.17.1 \
-    --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
-    --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
-    --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \
-    --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
-    --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
-    --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
-    --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \
-    --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \
-    --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
-    --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
-    --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \
-    --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
-    --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
-    --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
-    --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
-    --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
-    --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
-    --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
-    --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
-    --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \
-    --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
-    --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
-    --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \
-    --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
-    --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
-    --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
-    --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \
-    --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \
-    --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
-    --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
-    --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
-    --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \
-    --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \
-    --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
-    --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
-    --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
-    --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
-    --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
-    --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
-    --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \
-    --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
-    --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \
-    --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
-    --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \
-    --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
-    --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \
-    --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
-    --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \
-    --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \
-    --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
-    --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
-    --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
-    --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
-    --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
-    --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
-    --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
-    --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
-    --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \
-    --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \
-    --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
-    --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \
-    --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
-    --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \
-    --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
-    --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
-    --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \
-    --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b
-    # via cryptography
+awscrt==0.28.4 \
+    --hash=sha256:0024b3e26a5ce9ffc9a92533f0a62bd823e025465f3b90ad3dda2878a260171a \
+    --hash=sha256:046006703a7ed6278d5f80214c9aae02fc6b6a65a5f7ceb721becf9e1ad90604 \
+    --hash=sha256:08941fb1f603f1b7b722e8670f121ccf8f25a4073d2f92e3696ae763e309a39d \
+    --hash=sha256:08b884bb6809d22f80921feb0ae9353fea1a750109a18d02057b6bba742db439 \
+    --hash=sha256:13ed9b71a346146a89de85c173d007142416e6cc0358d7ca6b0d68dc1d159667 \
+    --hash=sha256:19adb9fa309111e20e1e850c876f093247ad084efdaa2dd654a15aef4b4bc637 \
+    --hash=sha256:1c6319d297d18ba7cf3c6a8f69f76fd22b949e4ea8a280eb2098a8d6ed0d25be \
+    --hash=sha256:1dd5dac3f761cb74c70c7feebf9f8dc96dc3b8db8248e5899bcbf34633d974a3 \
+    --hash=sha256:277af1c4e5ef666192bd04aea8c3afcbb26d7794594f6f7ba23d7285df5be65e \
+    --hash=sha256:43e1a88bec567e89eb398151ca6af389feb3a7f9b297141061fe759e65b43a52 \
+    --hash=sha256:4657eb947e214c8314d1b26df64e4f8c7c2f3b6817cebae00e3288a4bb1779c5 \
+    --hash=sha256:56e949e965a7668fe0bc6638edf88c009e44090216bb894a5ac758153b01757c \
+    --hash=sha256:5d95f06142634043dc5c9e20e8f7a16b710e32aa1ae3f42eebb3643cabbe4275 \
+    --hash=sha256:653f0c57f1f00cf526045ae2b76cd79f13cb751ed5400a545dcf44a9e5d0fa96 \
+    --hash=sha256:694c183bf2c3ef1d538caa5a73c007cddd841529bc43c6beeb02eb6a353094e6 \
+    --hash=sha256:6a8543c8637374a0963113663fe053c43868d091e5109bcdc1f14f79f780a6c7 \
+    --hash=sha256:726926408dea51284fc5f4ab112e797226d59c172bc58156e925099769cc4217 \
+    --hash=sha256:79217f918e02e02ef9ec6f2e77cdf5afc44a8c904840fe0f873d9116db1e8860 \
+    --hash=sha256:79d1cb861d017db8657a0fe0b4a02ddc60d596107e2e9e7816eaaca1afa30da4 \
+    --hash=sha256:7d4365d17bc44e24f861237e37c085aca89d22af756e6f1f5f05ffdc72c93737 \
+    --hash=sha256:7e0559ea770589958cdbed21f46d2ffdec2836ef43a00a4689d25205bb05cd22 \
+    --hash=sha256:86bb7612250925d49480a4648d30855d8f3d0e1dd8c322c586b4684847ff5d70 \
+    --hash=sha256:8bfbe9dae84acb76d05ffde64a85c06e71c05819890f4c28be3204c75e0d5c76 \
+    --hash=sha256:8f1aef999e0d48a4c3c2e6a713849392b883f918f4c1ce2b00d701c94c3252f8 \
+    --hash=sha256:9389743eb4c04d1fa0ed5448b4bc6c8283239ece9a9ff4145a5d41ddecd02d42 \
+    --hash=sha256:98dd46532ebb311123080c8df8805a94e66c02fa1b7d52d6d2f9abcf589c7f8b \
+    --hash=sha256:98deb64086f30454f791bd52aae2a2086d7896831b5966e8d22cb49b85758e4a \
+    --hash=sha256:a14b75f6c0cf79f2cb614c2459a492f8fed1836456e6488125652c9b2e7777aa \
+    --hash=sha256:a40aa941cf8201382986e4287c4fe51067a8bc2c78d9668937a6861cf14a54c6 \
+    --hash=sha256:b6d6de9172ef52ba1fb5cba12355bf6e845447a750a5214e9f57bf08aeeb6251 \
+    --hash=sha256:d1e205e53b08456f0f83210c20c674ebdef96e3e80f716d1bf4ad666db2c643b \
+    --hash=sha256:d2835094e92d0a3d1722d03afd54983115b2172d57581a664ad6a2af3d33c12c \
+    --hash=sha256:d419febaf110d8dbcfdcd7a37a74882a8fae68a6f96e40d7d53c93ef11fc9c70 \
+    --hash=sha256:d5b252bd5b30056b73827fdbc8d74d7d7af09e271b94ffca2cc3d96e625389ea \
+    --hash=sha256:dc11d00600888a690c1ad875759708a4d21bdf81b6c2032e0227687d27fca910 \
+    --hash=sha256:dd23b9bad57812d7b1d1de785e10a44e3352cf1f3c0e5bd7b678b27d93f482a4 \
+    --hash=sha256:e030f2036619d98e237a3561c8138b61fd4bf2f3f361d9f2e0b1112a8cd53d5b \
+    --hash=sha256:e20266fed25bd4198f59541b4343328479524042b781e810e8c6ad9c82a0420c \
+    --hash=sha256:e328d2afe68c772cae8cab23a210329ce1f434a1380fb585c2dba890cf08d3f1 \
+    --hash=sha256:e82b2ccd3caf1159d5a2ffea480eb5dbb0e9ea9baf4ac640d9fb86615ef22b9e
+    # via awscli (pyproject.toml)
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
     # via awscli (pyproject.toml)
-cryptography==43.0.1 \
-    --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
-    --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
-    --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
-    --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
-    --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
-    --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
-    --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
-    --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
-    --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \
-    --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
-    --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
-    --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
-    --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \
-    --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
-    --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
-    --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \
-    --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \
-    --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
-    --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
-    --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
-    --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
-    --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
-    --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
-    --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \
-    --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
-    --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
-    --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289
-    # via awscli (pyproject.toml)
 distro==1.8.0 \
     --hash=sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 \
     --hash=sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff
@@ -160,14 +62,10 @@ jmespath==1.0.1 \
     --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
     --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
     # via awscli (pyproject.toml)
-prompt-toolkit==3.0.38 \
-    --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \
-    --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f
-    # via awscli (pyproject.toml)
-pycparser==2.22 \
-    --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
-    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-    # via cffi
+prompt-toolkit==3.0.51 \
+    --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07 \
+    --hash=sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed
+    # via awscli (pyproject.toml)
 python-dateutil==2.9.0 \
     --hash=sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709 \
     --hash=sha256:cbf2f1da5e6083ac2fbfd4da39a25f34312230110440f424a14c7558bb85d82e
@@ -176,57 +74,53 @@ ruamel-yaml==0.17.21 \
     --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \
     --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af
     # via awscli (pyproject.toml)
-ruamel-yaml-clib==0.2.8 \
-    --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
-    --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
-    --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
-    --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
-    --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
-    --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
-    --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
-    --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
-    --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
-    --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
-    --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
-    --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
-    --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
-    --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
-    --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
-    --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
-    --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
-    --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
-    --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
-    --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
-    --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
-    --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
-    --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
-    --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
-    --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
-    --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
-    --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
-    --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
-    --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
-    --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
-    --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
-    --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
-    --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
-    --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
-    --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
-    --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
-    --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
-    --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
-    --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
-    --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
-    --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
-    --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
-    --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
-    --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
-    --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
-    --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
-    --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
-    --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
-    --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
-    --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
+ruamel-yaml-clib==0.2.12 \
+    --hash=sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b \
+    --hash=sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4 \
+    --hash=sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef \
+    --hash=sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5 \
+    --hash=sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3 \
+    --hash=sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632 \
+    --hash=sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6 \
+    --hash=sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7 \
+    --hash=sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680 \
+    --hash=sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf \
+    --hash=sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da \
+    --hash=sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6 \
+    --hash=sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a \
+    --hash=sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01 \
+    --hash=sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519 \
+    --hash=sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6 \
+    --hash=sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f \
+    --hash=sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd \
+    --hash=sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2 \
+    --hash=sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52 \
+    --hash=sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd \
+    --hash=sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d \
+    --hash=sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c \
+    --hash=sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6 \
+    --hash=sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb \
+    --hash=sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a \
+    --hash=sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969 \
+    --hash=sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28 \
+    --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \
+    --hash=sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e \
+    --hash=sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45 \
+    --hash=sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4 \
+    --hash=sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12 \
+    --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \
+    --hash=sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642 \
+    --hash=sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e \
+    --hash=sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285 \
+    --hash=sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed \
+    --hash=sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1 \
+    --hash=sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7 \
+    --hash=sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3 \
+    --hash=sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475 \
+    --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 \
+    --hash=sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76 \
+    --hash=sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987 \
+    --hash=sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df
     # via awscli (pyproject.toml)
 six==1.17.0 \
     --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
@@ -236,11 +130,7 @@ urllib3==1.26.20 \
     --hash=sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e \
     --hash=sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32
     # via awscli (pyproject.toml)
-wcwidth==0.2.13 \
-    --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \
-    --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5
+wcwidth==0.2.14 \
+    --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \
+    --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
     # via prompt-toolkit
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via awscli (pyproject.toml)
diff -pruN 2.23.6-1/requirements/portable-exe-extras.txt 2.31.35-1/requirements/portable-exe-extras.txt
--- 2.23.6-1/requirements/portable-exe-extras.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements/portable-exe-extras.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
-pyinstaller==5.13.2
+pyinstaller==6.11.1
 # pyinstaller takes a dependency on importlib_metadata,
 # conditional on the Python version. This generates lockfiles
 # that fail to install on some Python versions supported by v2.
diff -pruN 2.23.6-1/requirements-base-lock.txt 2.31.35-1/requirements-base-lock.txt
--- 2.23.6-1/requirements-base-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-base-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
 #    pip-compile --allow-unsafe --generate-hashes --output-file=requirements-base-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements-base.txt
diff -pruN 2.23.6-1/requirements-build-lock.txt 2.31.35-1/requirements-build-lock.txt
--- 2.23.6-1/requirements-build-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-build-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
 #    pip-compile --allow-unsafe --generate-hashes --output-file=requirements-build-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements-build-win.txt requirements-build.txt
@@ -10,53 +10,59 @@ altgraph==0.17.4 \
     # via
     #   macholib
     #   pyinstaller
-importlib-metadata==8.5.0 \
-    --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \
-    --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7
-    # via pyinstaller-hooks-contrib
+importlib-metadata==8.7.0 \
+    --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
+    --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+    # via
+    #   pyinstaller
+    #   pyinstaller-hooks-contrib
 macholib==1.16.3 \
     --hash=sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 \
     --hash=sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c
-    # via pyinstaller
-packaging==24.2 \
-    --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \
-    --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f
-    # via pyinstaller-hooks-contrib
+    # via
+    #   -r requirements-build.txt
+    #   pyinstaller
+packaging==25.0 \
+    --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \
+    --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f
+    # via
+    #   pyinstaller
+    #   pyinstaller-hooks-contrib
 pefile==2023.2.7 \
     --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \
     --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6
     # via -r requirements-build-win.txt
-pyinstaller==5.13.2 \
-    --hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
-    --hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
-    --hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
-    --hash=sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e \
-    --hash=sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6 \
-    --hash=sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade \
-    --hash=sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420 \
-    --hash=sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30 \
-    --hash=sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892 \
-    --hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
-    --hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
-    --hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
+pyinstaller==6.11.1 \
+    --hash=sha256:0d6475559c4939f0735122989611d7f739ed3bf02f666ce31022928f7a7e4fda \
+    --hash=sha256:208c0ef6dab0837a0a273ea32d1a3619a208e3d1fe3fec3785eea71a77fd00ce \
+    --hash=sha256:2e8365276c5131c9bef98e358fbc305e4022db8bedc9df479629d6414021956a \
+    --hash=sha256:32c742a24fe65d0702958fadf4040f76de85859c26bec0008766e5dbabc5b68f \
+    --hash=sha256:35e6b8077d240600bb309ed68bb0b1453fd2b7ab740b66d000db7abae6244423 \
+    --hash=sha256:44e36172de326af6d4e7663b12f71dbd34e2e3e02233e181e457394423daaf03 \
+    --hash=sha256:491dfb4d9d5d1d9650d9507daec1ff6829527a254d8e396badd60a0affcb72ef \
+    --hash=sha256:6d12c45a29add78039066a53fb05967afaa09a672426072b13816fe7676abfc4 \
+    --hash=sha256:7ac83c0dc0e04357dab98c487e74ad2adb30e7eb186b58157a8faf46f1fa796f \
+    --hash=sha256:ad84abf465bcda363c1d54eafa76745d77b6a8a713778348377dc98d12a452f7 \
+    --hash=sha256:ddc0fddd75f07f7e423da1f0822e389a42af011f9589e0269b87e0d89aa48c1f \
+    --hash=sha256:e21c7806e34f40181e7606926a14579f848bfb1dc52cbca7eea66eccccbfe977
     # via -r requirements-build.txt
-pyinstaller-hooks-contrib==2024.10 \
-    --hash=sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c \
-    --hash=sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10
+pyinstaller-hooks-contrib==2025.9 \
+    --hash=sha256:56e972bdaad4e9af767ed47d132362d162112260cbe488c9da7fee01f228a5a6 \
+    --hash=sha256:ccbfaa49399ef6b18486a165810155e5a8d4c59b41f20dc5da81af7482aaf038
     # via pyinstaller
 pywin32-ctypes==0.2.2 \
     --hash=sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60 \
     --hash=sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7
     # via -r requirements-build-win.txt
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
-setuptools==75.3.0 \
-    --hash=sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd \
-    --hash=sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686
+setuptools==80.9.0 \
+    --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \
+    --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c
     # via
     #   pyinstaller
     #   pyinstaller-hooks-contrib
diff -pruN 2.23.6-1/requirements-build.txt 2.31.35-1/requirements-build.txt
--- 2.23.6-1/requirements-build.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-build.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,5 @@
 # Requirements we need to run our build jobs for the installers.
 # We create the separation for cases where we're doing installation
 # from a local dependency directory instead of requirements.txt.
-PyInstaller==5.13.2
\ No newline at end of file
+PyInstaller==6.11.1
+macholib==1.16.3
diff -pruN 2.23.6-1/requirements-dev-lock.txt 2.31.35-1/requirements-dev-lock.txt
--- 2.23.6-1/requirements-dev-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-dev-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
 #    pip-compile --allow-unsafe --generate-hashes --output-file=requirements-dev-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements-build-win.txt requirements-dev.txt
@@ -16,23 +16,23 @@ attrs==23.2.0 \
     # via
     #   -r requirements-test.txt
     #   jsonschema
-build==0.7.0 \
-    --hash=sha256:1aaadcd69338252ade4f7ec1265e1a19184bf916d84c9b7df095f423948cb89f \
-    --hash=sha256:21b7ebbd1b22499c4dac536abc7606696ea4d909fd755e00f09f3c0f2c05e3c8
+build==1.0.0 \
+    --hash=sha256:49a60f212df4d9925727c2118e1cbe3abf30b393eff7d0e7287d2170eb36844d \
+    --hash=sha256:f4c7b45e70e2c345e673902253d435a9a7729ff09ab574924420cf120c60bcc9
     # via
     #   -r requirements-dev.txt
     #   pip-tools
-cachetools==5.5.0 \
-    --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292 \
-    --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a
+cachetools==6.2.0 \
+    --hash=sha256:1c76a8960c0041fcc21097e357f882197c79da0dbff766e7317890a65d7d8ba6 \
+    --hash=sha256:38b328c0889450f05f5e120f56ab68c8abaf424e1275522b138ffc93253f7e32
     # via tox
 chardet==5.2.0 \
     --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \
     --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970
     # via tox
-click==8.1.7 \
-    --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
-    --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
+click==8.1.8 \
+    --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
+    --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
     # via pip-tools
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
@@ -93,35 +93,34 @@ coverage[toml]==7.0.1 \
     # via
     #   -r requirements-test.txt
     #   pytest-cov
-distlib==0.3.9 \
-    --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \
-    --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403
+distlib==0.4.0 \
+    --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \
+    --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d
     # via virtualenv
-exceptiongroup==1.2.2 \
-    --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b \
-    --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc
+exceptiongroup==1.3.0 \
+    --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \
+    --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88
     # via pytest
 execnet==2.1.1 \
     --hash=sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc \
     --hash=sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3
     # via pytest-xdist
-filelock==3.16.1 \
-    --hash=sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 \
-    --hash=sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435
+filelock==3.19.1 \
+    --hash=sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58 \
+    --hash=sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d
     # via
     #   tox
     #   virtualenv
-importlib-metadata==8.5.0 \
-    --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \
-    --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7
-    # via pyinstaller-hooks-contrib
-importlib-resources==6.4.5 \
-    --hash=sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065 \
-    --hash=sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717
-    # via jsonschema
-iniconfig==2.0.0 \
-    --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
-    --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
+importlib-metadata==8.7.0 \
+    --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
+    --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+    # via
+    #   build
+    #   pyinstaller
+    #   pyinstaller-hooks-contrib
+iniconfig==2.1.0 \
+    --hash=sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7 \
+    --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760
     # via pytest
 jsonschema==4.7.2 \
     --hash=sha256:73764f461d61eb97a057c929368610a134d1d1fffd858acfe88864ee94f1f1d3 \
@@ -130,13 +129,16 @@ jsonschema==4.7.2 \
 macholib==1.16.3 \
     --hash=sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 \
     --hash=sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c
-    # via pyinstaller
+    # via
+    #   -r requirements-build.txt
+    #   pyinstaller
 packaging==24.1 \
     --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \
     --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124
     # via
     #   -r requirements-test.txt
     #   build
+    #   pyinstaller
     #   pyinstaller-hooks-contrib
     #   pyproject-api
     #   pytest
@@ -145,48 +147,50 @@ pefile==2023.2.7 \
     --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \
     --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6
     # via -r requirements-build-win.txt
-pep517==0.13.1 \
-    --hash=sha256:1b2fa2ffd3938bb4beffe5d6146cbcb2bda996a5a4da9f31abffd8b24e07b317 \
-    --hash=sha256:31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721
-    # via build
-pip-tools==7.0.0 \
-    --hash=sha256:6a2308712727c86cc8a6cedc0e6ba01232a337c706d63926d3789462ad083d06 \
-    --hash=sha256:ae185db747195c8ed011866c366279cbb64f7f8c1528e7a828f515bd2bb0b31b
+pip-tools==7.5.0 \
+    --hash=sha256:30639f50961bb09f49d22f4389e8d7d990709677c094ce1114186b1f2e9b5821 \
+    --hash=sha256:69758e4e5a65f160e315d74db46246fdbb30d549f1ed0c4236d057122c9b0f18
     # via -r requirements-test.txt
-platformdirs==4.3.6 \
-    --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \
-    --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb
+platformdirs==4.4.0 \
+    --hash=sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 \
+    --hash=sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf
     # via
     #   tox
     #   virtualenv
-pluggy==1.5.0 \
-    --hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \
-    --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
+pluggy==1.6.0 \
+    --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \
+    --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
     # via
     #   pytest
     #   tox
-pyinstaller==5.13.2 \
-    --hash=sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f \
-    --hash=sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6 \
-    --hash=sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d \
-    --hash=sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e \
-    --hash=sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6 \
-    --hash=sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade \
-    --hash=sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420 \
-    --hash=sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30 \
-    --hash=sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892 \
-    --hash=sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8 \
-    --hash=sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2 \
-    --hash=sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4
+pyinstaller==6.11.1 \
+    --hash=sha256:0d6475559c4939f0735122989611d7f739ed3bf02f666ce31022928f7a7e4fda \
+    --hash=sha256:208c0ef6dab0837a0a273ea32d1a3619a208e3d1fe3fec3785eea71a77fd00ce \
+    --hash=sha256:2e8365276c5131c9bef98e358fbc305e4022db8bedc9df479629d6414021956a \
+    --hash=sha256:32c742a24fe65d0702958fadf4040f76de85859c26bec0008766e5dbabc5b68f \
+    --hash=sha256:35e6b8077d240600bb309ed68bb0b1453fd2b7ab740b66d000db7abae6244423 \
+    --hash=sha256:44e36172de326af6d4e7663b12f71dbd34e2e3e02233e181e457394423daaf03 \
+    --hash=sha256:491dfb4d9d5d1d9650d9507daec1ff6829527a254d8e396badd60a0affcb72ef \
+    --hash=sha256:6d12c45a29add78039066a53fb05967afaa09a672426072b13816fe7676abfc4 \
+    --hash=sha256:7ac83c0dc0e04357dab98c487e74ad2adb30e7eb186b58157a8faf46f1fa796f \
+    --hash=sha256:ad84abf465bcda363c1d54eafa76745d77b6a8a713778348377dc98d12a452f7 \
+    --hash=sha256:ddc0fddd75f07f7e423da1f0822e389a42af011f9589e0269b87e0d89aa48c1f \
+    --hash=sha256:e21c7806e34f40181e7606926a14579f848bfb1dc52cbca7eea66eccccbfe977
     # via -r requirements-build.txt
-pyinstaller-hooks-contrib==2024.10 \
-    --hash=sha256:8a46655e5c5b0186b5e527399118a9b342f10513eb1425c483fa4f6d02e8800c \
-    --hash=sha256:ad47db0e153683b4151e10d231cb91f2d93c85079e78d76d9e0f57ac6c8a5e10
+pyinstaller-hooks-contrib==2025.9 \
+    --hash=sha256:56e972bdaad4e9af767ed47d132362d162112260cbe488c9da7fee01f228a5a6 \
+    --hash=sha256:ccbfaa49399ef6b18486a165810155e5a8d4c59b41f20dc5da81af7482aaf038
     # via pyinstaller
 pyproject-api==1.8.0 \
     --hash=sha256:3d7d347a047afe796fd5d1885b1e391ba29be7169bd2f102fcd378f04273d228 \
     --hash=sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496
     # via tox
+pyproject-hooks==1.2.0 \
+    --hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \
+    --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
+    # via
+    #   build
+    #   pip-tools
 pyrsistent==0.20.0 \
     --hash=sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f \
     --hash=sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e \
@@ -276,7 +280,6 @@ tomli==2.2.1 \
     # via
     #   build
     #   coverage
-    #   pep517
     #   pip-tools
     #   pyproject-api
     #   pytest
@@ -285,29 +288,33 @@ tox==4.4.12 \
     --hash=sha256:740f5209d0dec19451b951ee5b1cce4a207acdc7357af84dbc8ec35bcf2c454e \
     --hash=sha256:d4be558809d86fad13f4553976b0500352630a8fbfa39ea4b1ce3bd945ba680b
     # via -r requirements-dev.txt
-virtualenv==20.28.0 \
-    --hash=sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0 \
-    --hash=sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa
-    # via tox
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
+typing-extensions==4.15.0 \
+    --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
+    --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
     # via
-    #   importlib-metadata
-    #   importlib-resources
+    #   exceptiongroup
+    #   virtualenv
+virtualenv==20.34.0 \
+    --hash=sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026 \
+    --hash=sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a
+    # via tox
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
+    # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
 flit-core==3.9.0 \
     --hash=sha256:72ad266176c4a3fcfab5f2930d76896059851240570ce9a98733b658cb786eba \
     --hash=sha256:7aada352fb0c7f5538c4fafeddf314d3a6a92ee8e2b1de70482329e42de70301
     # via -r requirements-base.txt
-pip==24.3.1 \
-    --hash=sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed \
-    --hash=sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99
+pip==25.2 \
+    --hash=sha256:578283f006390f85bb6282dffb876454593d637f5d1be494b5202ce4877e71f2 \
+    --hash=sha256:6d67a2b4e7f14d8b31b8b52648866fa717f45a1eb70e83002f4331d07e953717
     # via pip-tools
-setuptools==75.3.0 \
-    --hash=sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd \
-    --hash=sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686
+setuptools==80.9.0 \
+    --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \
+    --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c
     # via
     #   pip-tools
     #   pyinstaller
diff -pruN 2.23.6-1/requirements-dev.txt 2.31.35-1/requirements-dev.txt
--- 2.23.6-1/requirements-dev.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-dev.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,6 @@
 -r requirements-base.txt
 tox==4.4.12
-build==0.7.0
-setuptools==71.1.0;python_version>="3.12"
+build==1.0.0
+setuptools==78.1.1;python_version>="3.12"
 -r requirements-test.txt
 -r requirements-build.txt
diff -pruN 2.23.6-1/requirements-docs-lock.txt 2.31.35-1/requirements-docs-lock.txt
--- 2.23.6-1/requirements-docs-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-docs-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,274 +1,148 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
 #    pip-compile --allow-unsafe --generate-hashes --output-file=requirements-docs-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel pyproject.toml requirements-docs.txt
 #
-alabaster==0.7.13 \
-    --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \
-    --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
-awscrt==0.23.4 \
-    --hash=sha256:0a5f05a85cbc590f09e5b9ffc491dc40a816dd4b781529ceb54ffc2758ccce2e \
-    --hash=sha256:11bf89b0311133d7f3c755524994c70b67cccb570426f5ccf436732264aadc60 \
-    --hash=sha256:176c2e966ada70f59cc5a67cbba4f360aded9f335789959b8a4f522a1c994f11 \
-    --hash=sha256:1da3931ef8c4a7b67faa26332c05a300f89f6c1461bf50c9179b7b85bae1fd78 \
-    --hash=sha256:1f5db8dfce79742cf70e39f799a0713a4bf7f7d8acdbc67140892de666b82e3b \
-    --hash=sha256:22e77a517c432776f865d8965ab7d2f125aecab986234a1675995143fdd78560 \
-    --hash=sha256:254066219b11987e759f8d48b6368e45b5ecc3da298a8770f28d93a99c58c6cd \
-    --hash=sha256:2df0e1f6df3b6d2debc888e1b5937613ee770d3fcb3e670a9a2b0c06e2ccd0d8 \
-    --hash=sha256:3125368ece0d0370a7ea99056821eca9ec037aa33c94b66141b70c60fbe0910e \
-    --hash=sha256:343b794c8865ee0476411851f419abe56cf032df89f939d706dc02994f107444 \
-    --hash=sha256:3b09fbea37de1b24ba9ce80d7aa250fc67c7bf0b0d71e995fa512aa3bbb00eea \
-    --hash=sha256:3b719798a48f9e31847d8bba55fbf1d3ac4f154137f085fb3b0ff8bccb4f3c36 \
-    --hash=sha256:3c1a3c20753d8b6bb37ec584518ef0addb37cde2f5caebbbc8ecfbb7846e8983 \
-    --hash=sha256:3ef5212a3c3b0549b3b0e85507b7bbdfb891ff40ca4c597e92db07a0bf7b614a \
-    --hash=sha256:416c5a450a16beeb130304d4887d47ed11222c1baf0aa2ce90895366ddde500f \
-    --hash=sha256:42a0c676abc56a49601abab5549112d293c33094a37bc76d00aa8c1c28a276db \
-    --hash=sha256:4b3afd109aa36980695d71002c0bdeab2d71881a865915e6678a64362789553b \
-    --hash=sha256:502c2659a0f888a55fd5746ac6f0005d2c306f18dc05ec86ec0b004243509eb1 \
-    --hash=sha256:5143f090862834c833d31d27b14f5d6f8cd011282725efb370ef49ffcd76a200 \
-    --hash=sha256:584f97bd3d2e8ec55e9862084aa7c59538c09dab245a5fa0af793a331fc94275 \
-    --hash=sha256:5ed306c28eefd2364c9751912e5281a171f497721e5a990626d8412ed7135565 \
-    --hash=sha256:629642372b7e8c21dd5bbeaa14b650ac64e5a0197dd0a375238dc183be94e300 \
-    --hash=sha256:679f12dcf0e44a92819f421325261789f0d6b73f461026d27bd5dfbf5461a1d4 \
-    --hash=sha256:6b5f344112a06bd00557bd63b420c920a6066cc628829a3c729bd53c11946f86 \
-    --hash=sha256:7bc75a9f12bee3b8e5987616eab23b3c1af83609e8021e879bd0ad4ce2c561f9 \
-    --hash=sha256:93a03e45b7ac721f080475b2759c8ad822756563a6d22b8c225614efeef71740 \
-    --hash=sha256:96d4f40aa4279b1548cb1a0db60e7448501f051b8b48af8151c68e3d0d1cf7b0 \
-    --hash=sha256:a229d7a0cb4aeb5a450222bb93532c4b3c5aad1697e7952640078a102eaeb539 \
-    --hash=sha256:ab627f4b05e1b515ee36519e819ca06675a115af19eaafa2f12ab1b043a591b7 \
-    --hash=sha256:abf502e8e121af2fbf9b34ecea34dd24c6fc27a2195fad77f71d8156bd8ba64e \
-    --hash=sha256:b25e2ff209f1785c62dc125990f7079c4c39a1072ab7e82e5cd3a890dc8c0201 \
-    --hash=sha256:b487161450c911ab4429bf8eecf2f12021429eac3a9d5af424ffa9315dfb551e \
-    --hash=sha256:c6b743a125c2cda1a721dc65f4b97a101410660bb091698f2c28ecfec8a07c54 \
-    --hash=sha256:ca7811696fc7cc1fd5f2f940c8983b6f6583f31068ae384741441beafa37128b \
-    --hash=sha256:d187572b7ab7e14ed50c959566a63f7b79ba32a8140d711b335f92d1f8de2655 \
-    --hash=sha256:d8060e350efb2bbe8a25873d21ab302cb8d3f6eb35767d57f6dca6ba55bae7eb \
-    --hash=sha256:e16485ffbd917aa11fe394f23237be4592a5d3efd69d19ff4bacf1c629652452 \
-    --hash=sha256:ee47de681d9fe0876d1fc6a1110ba1fb37de51bcb6d2e226ff2a25c7e345f9da \
-    --hash=sha256:f16632a218a12bc6142bcc77f5e6c920b0b40beab414dbeec9826794f7c8475a \
-    --hash=sha256:fb3ad12008bb358b21ad021ef21a11c5960d871bb9aef95a5a639ce5548a54df
+alabaster==0.7.16 \
+    --hash=sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65 \
+    --hash=sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92
+    # via sphinx
+awscrt==0.28.4 \
+    --hash=sha256:0024b3e26a5ce9ffc9a92533f0a62bd823e025465f3b90ad3dda2878a260171a \
+    --hash=sha256:046006703a7ed6278d5f80214c9aae02fc6b6a65a5f7ceb721becf9e1ad90604 \
+    --hash=sha256:08941fb1f603f1b7b722e8670f121ccf8f25a4073d2f92e3696ae763e309a39d \
+    --hash=sha256:08b884bb6809d22f80921feb0ae9353fea1a750109a18d02057b6bba742db439 \
+    --hash=sha256:13ed9b71a346146a89de85c173d007142416e6cc0358d7ca6b0d68dc1d159667 \
+    --hash=sha256:19adb9fa309111e20e1e850c876f093247ad084efdaa2dd654a15aef4b4bc637 \
+    --hash=sha256:1c6319d297d18ba7cf3c6a8f69f76fd22b949e4ea8a280eb2098a8d6ed0d25be \
+    --hash=sha256:1dd5dac3f761cb74c70c7feebf9f8dc96dc3b8db8248e5899bcbf34633d974a3 \
+    --hash=sha256:277af1c4e5ef666192bd04aea8c3afcbb26d7794594f6f7ba23d7285df5be65e \
+    --hash=sha256:43e1a88bec567e89eb398151ca6af389feb3a7f9b297141061fe759e65b43a52 \
+    --hash=sha256:4657eb947e214c8314d1b26df64e4f8c7c2f3b6817cebae00e3288a4bb1779c5 \
+    --hash=sha256:56e949e965a7668fe0bc6638edf88c009e44090216bb894a5ac758153b01757c \
+    --hash=sha256:5d95f06142634043dc5c9e20e8f7a16b710e32aa1ae3f42eebb3643cabbe4275 \
+    --hash=sha256:653f0c57f1f00cf526045ae2b76cd79f13cb751ed5400a545dcf44a9e5d0fa96 \
+    --hash=sha256:694c183bf2c3ef1d538caa5a73c007cddd841529bc43c6beeb02eb6a353094e6 \
+    --hash=sha256:6a8543c8637374a0963113663fe053c43868d091e5109bcdc1f14f79f780a6c7 \
+    --hash=sha256:726926408dea51284fc5f4ab112e797226d59c172bc58156e925099769cc4217 \
+    --hash=sha256:79217f918e02e02ef9ec6f2e77cdf5afc44a8c904840fe0f873d9116db1e8860 \
+    --hash=sha256:79d1cb861d017db8657a0fe0b4a02ddc60d596107e2e9e7816eaaca1afa30da4 \
+    --hash=sha256:7d4365d17bc44e24f861237e37c085aca89d22af756e6f1f5f05ffdc72c93737 \
+    --hash=sha256:7e0559ea770589958cdbed21f46d2ffdec2836ef43a00a4689d25205bb05cd22 \
+    --hash=sha256:86bb7612250925d49480a4648d30855d8f3d0e1dd8c322c586b4684847ff5d70 \
+    --hash=sha256:8bfbe9dae84acb76d05ffde64a85c06e71c05819890f4c28be3204c75e0d5c76 \
+    --hash=sha256:8f1aef999e0d48a4c3c2e6a713849392b883f918f4c1ce2b00d701c94c3252f8 \
+    --hash=sha256:9389743eb4c04d1fa0ed5448b4bc6c8283239ece9a9ff4145a5d41ddecd02d42 \
+    --hash=sha256:98dd46532ebb311123080c8df8805a94e66c02fa1b7d52d6d2f9abcf589c7f8b \
+    --hash=sha256:98deb64086f30454f791bd52aae2a2086d7896831b5966e8d22cb49b85758e4a \
+    --hash=sha256:a14b75f6c0cf79f2cb614c2459a492f8fed1836456e6488125652c9b2e7777aa \
+    --hash=sha256:a40aa941cf8201382986e4287c4fe51067a8bc2c78d9668937a6861cf14a54c6 \
+    --hash=sha256:b6d6de9172ef52ba1fb5cba12355bf6e845447a750a5214e9f57bf08aeeb6251 \
+    --hash=sha256:d1e205e53b08456f0f83210c20c674ebdef96e3e80f716d1bf4ad666db2c643b \
+    --hash=sha256:d2835094e92d0a3d1722d03afd54983115b2172d57581a664ad6a2af3d33c12c \
+    --hash=sha256:d419febaf110d8dbcfdcd7a37a74882a8fae68a6f96e40d7d53c93ef11fc9c70 \
+    --hash=sha256:d5b252bd5b30056b73827fdbc8d74d7d7af09e271b94ffca2cc3d96e625389ea \
+    --hash=sha256:dc11d00600888a690c1ad875759708a4d21bdf81b6c2032e0227687d27fca910 \
+    --hash=sha256:dd23b9bad57812d7b1d1de785e10a44e3352cf1f3c0e5bd7b678b27d93f482a4 \
+    --hash=sha256:e030f2036619d98e237a3561c8138b61fd4bf2f3f361d9f2e0b1112a8cd53d5b \
+    --hash=sha256:e20266fed25bd4198f59541b4343328479524042b781e810e8c6ad9c82a0420c \
+    --hash=sha256:e328d2afe68c772cae8cab23a210329ce1f434a1380fb585c2dba890cf08d3f1 \
+    --hash=sha256:e82b2ccd3caf1159d5a2ffea480eb5dbb0e9ea9baf4ac640d9fb86615ef22b9e
     # via awscli (pyproject.toml)
-babel==2.16.0 \
-    --hash=sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b \
-    --hash=sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316
-    # via sphinx
-certifi==2024.8.30 \
-    --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \
-    --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9
+babel==2.17.0 \
+    --hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \
+    --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
+    # via sphinx
+certifi==2025.10.5 \
+    --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \
+    --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43
     # via requests
-cffi==1.17.1 \
-    --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
-    --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
-    --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \
-    --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
-    --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
-    --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
-    --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \
-    --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \
-    --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
-    --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
-    --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \
-    --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
-    --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
-    --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
-    --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
-    --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
-    --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
-    --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
-    --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
-    --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \
-    --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
-    --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
-    --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \
-    --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
-    --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
-    --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
-    --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \
-    --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \
-    --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
-    --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
-    --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
-    --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \
-    --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \
-    --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
-    --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
-    --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
-    --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
-    --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
-    --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
-    --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \
-    --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
-    --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \
-    --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
-    --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \
-    --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
-    --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \
-    --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
-    --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \
-    --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \
-    --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
-    --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
-    --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
-    --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
-    --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
-    --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
-    --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
-    --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
-    --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \
-    --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \
-    --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
-    --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \
-    --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
-    --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \
-    --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
-    --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
-    --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \
-    --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b
-    # via cryptography
-charset-normalizer==3.4.0 \
-    --hash=sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621 \
-    --hash=sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6 \
-    --hash=sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8 \
-    --hash=sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912 \
-    --hash=sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c \
-    --hash=sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b \
-    --hash=sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d \
-    --hash=sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d \
-    --hash=sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95 \
-    --hash=sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e \
-    --hash=sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565 \
-    --hash=sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64 \
-    --hash=sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab \
-    --hash=sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be \
-    --hash=sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e \
-    --hash=sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907 \
-    --hash=sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0 \
-    --hash=sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2 \
-    --hash=sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62 \
-    --hash=sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62 \
-    --hash=sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23 \
-    --hash=sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc \
-    --hash=sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284 \
-    --hash=sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca \
-    --hash=sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455 \
-    --hash=sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858 \
-    --hash=sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b \
-    --hash=sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594 \
-    --hash=sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc \
-    --hash=sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db \
-    --hash=sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b \
-    --hash=sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea \
-    --hash=sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6 \
-    --hash=sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920 \
-    --hash=sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749 \
-    --hash=sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7 \
-    --hash=sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd \
-    --hash=sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99 \
-    --hash=sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242 \
-    --hash=sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee \
-    --hash=sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129 \
-    --hash=sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2 \
-    --hash=sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51 \
-    --hash=sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee \
-    --hash=sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8 \
-    --hash=sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b \
-    --hash=sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613 \
-    --hash=sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742 \
-    --hash=sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe \
-    --hash=sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3 \
-    --hash=sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5 \
-    --hash=sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631 \
-    --hash=sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7 \
-    --hash=sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 \
-    --hash=sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c \
-    --hash=sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea \
-    --hash=sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417 \
-    --hash=sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250 \
-    --hash=sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88 \
-    --hash=sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca \
-    --hash=sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa \
-    --hash=sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99 \
-    --hash=sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149 \
-    --hash=sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41 \
-    --hash=sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574 \
-    --hash=sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0 \
-    --hash=sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f \
-    --hash=sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d \
-    --hash=sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654 \
-    --hash=sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3 \
-    --hash=sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19 \
-    --hash=sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90 \
-    --hash=sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578 \
-    --hash=sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 \
-    --hash=sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1 \
-    --hash=sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51 \
-    --hash=sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719 \
-    --hash=sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236 \
-    --hash=sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a \
-    --hash=sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c \
-    --hash=sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade \
-    --hash=sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944 \
-    --hash=sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc \
-    --hash=sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6 \
-    --hash=sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6 \
-    --hash=sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27 \
-    --hash=sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6 \
-    --hash=sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2 \
-    --hash=sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12 \
-    --hash=sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf \
-    --hash=sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114 \
-    --hash=sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7 \
-    --hash=sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf \
-    --hash=sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d \
-    --hash=sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b \
-    --hash=sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed \
-    --hash=sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03 \
-    --hash=sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4 \
-    --hash=sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67 \
-    --hash=sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365 \
-    --hash=sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a \
-    --hash=sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748 \
-    --hash=sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b \
-    --hash=sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079 \
-    --hash=sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482
+charset-normalizer==3.4.3 \
+    --hash=sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91 \
+    --hash=sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0 \
+    --hash=sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154 \
+    --hash=sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601 \
+    --hash=sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884 \
+    --hash=sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07 \
+    --hash=sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c \
+    --hash=sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64 \
+    --hash=sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe \
+    --hash=sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f \
+    --hash=sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432 \
+    --hash=sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc \
+    --hash=sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa \
+    --hash=sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9 \
+    --hash=sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae \
+    --hash=sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19 \
+    --hash=sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d \
+    --hash=sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e \
+    --hash=sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4 \
+    --hash=sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7 \
+    --hash=sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312 \
+    --hash=sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92 \
+    --hash=sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31 \
+    --hash=sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c \
+    --hash=sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f \
+    --hash=sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99 \
+    --hash=sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b \
+    --hash=sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15 \
+    --hash=sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392 \
+    --hash=sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f \
+    --hash=sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8 \
+    --hash=sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491 \
+    --hash=sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0 \
+    --hash=sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc \
+    --hash=sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0 \
+    --hash=sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f \
+    --hash=sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a \
+    --hash=sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40 \
+    --hash=sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927 \
+    --hash=sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849 \
+    --hash=sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce \
+    --hash=sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14 \
+    --hash=sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05 \
+    --hash=sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c \
+    --hash=sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c \
+    --hash=sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a \
+    --hash=sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc \
+    --hash=sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34 \
+    --hash=sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9 \
+    --hash=sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096 \
+    --hash=sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14 \
+    --hash=sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30 \
+    --hash=sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b \
+    --hash=sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b \
+    --hash=sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942 \
+    --hash=sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db \
+    --hash=sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5 \
+    --hash=sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b \
+    --hash=sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce \
+    --hash=sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669 \
+    --hash=sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0 \
+    --hash=sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018 \
+    --hash=sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93 \
+    --hash=sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe \
+    --hash=sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049 \
+    --hash=sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a \
+    --hash=sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef \
+    --hash=sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2 \
+    --hash=sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca \
+    --hash=sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16 \
+    --hash=sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f \
+    --hash=sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb \
+    --hash=sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1 \
+    --hash=sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557 \
+    --hash=sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37 \
+    --hash=sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7 \
+    --hash=sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72 \
+    --hash=sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c \
+    --hash=sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9
     # via requests
 colorama==0.4.6 \
     --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
     --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
     # via awscli (pyproject.toml)
-cryptography==43.0.1 \
-    --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
-    --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
-    --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
-    --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
-    --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
-    --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
-    --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
-    --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
-    --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84 \
-    --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
-    --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
-    --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
-    --hash=sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2 \
-    --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
-    --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
-    --hash=sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365 \
-    --hash=sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96 \
-    --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
-    --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
-    --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
-    --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
-    --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
-    --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
-    --hash=sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172 \
-    --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
-    --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
-    --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289
-    # via awscli (pyproject.toml)
 distro==1.8.0 \
     --hash=sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8 \
     --hash=sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff
@@ -287,6 +161,10 @@ imagesize==1.4.1 \
     --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
     --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
     # via sphinx
+importlib-metadata==8.7.0 \
+    --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
+    --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+    # via sphinx
 jinja2==3.0.3 \
     --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \
     --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7
@@ -297,151 +175,168 @@ jmespath==1.0.1 \
     --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \
     --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe
     # via awscli (pyproject.toml)
-markupsafe==2.1.5 \
-    --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \
-    --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \
-    --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \
-    --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \
-    --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \
-    --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \
-    --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \
-    --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \
-    --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \
-    --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \
-    --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \
-    --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \
-    --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \
-    --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \
-    --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \
-    --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \
-    --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \
-    --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \
-    --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \
-    --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \
-    --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \
-    --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \
-    --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \
-    --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \
-    --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \
-    --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \
-    --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \
-    --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \
-    --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \
-    --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \
-    --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \
-    --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \
-    --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \
-    --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \
-    --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \
-    --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \
-    --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \
-    --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \
-    --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \
-    --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \
-    --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \
-    --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \
-    --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \
-    --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \
-    --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \
-    --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \
-    --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \
-    --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \
-    --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \
-    --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \
-    --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \
-    --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \
-    --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \
-    --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \
-    --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \
-    --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \
-    --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \
-    --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \
-    --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \
-    --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68
+markupsafe==3.0.3 \
+    --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
+    --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \
+    --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \
+    --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \
+    --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \
+    --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \
+    --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \
+    --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \
+    --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \
+    --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \
+    --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \
+    --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \
+    --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \
+    --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \
+    --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \
+    --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \
+    --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \
+    --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \
+    --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \
+    --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \
+    --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \
+    --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \
+    --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \
+    --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \
+    --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \
+    --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \
+    --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \
+    --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \
+    --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \
+    --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \
+    --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \
+    --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \
+    --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \
+    --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \
+    --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \
+    --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \
+    --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \
+    --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \
+    --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \
+    --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \
+    --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \
+    --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \
+    --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \
+    --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \
+    --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \
+    --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \
+    --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \
+    --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \
+    --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \
+    --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \
+    --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \
+    --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \
+    --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \
+    --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \
+    --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \
+    --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \
+    --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \
+    --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \
+    --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \
+    --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \
+    --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \
+    --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \
+    --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \
+    --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \
+    --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \
+    --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \
+    --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \
+    --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \
+    --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \
+    --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \
+    --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \
+    --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \
+    --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \
+    --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \
+    --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \
+    --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \
+    --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \
+    --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \
+    --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \
+    --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \
+    --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \
+    --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \
+    --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \
+    --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \
+    --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \
+    --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \
+    --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \
+    --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
+    --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
     # via jinja2
-packaging==24.2 \
-    --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \
-    --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f
-    # via sphinx
-prompt-toolkit==3.0.38 \
-    --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \
-    --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f
+packaging==25.0 \
+    --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \
+    --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f
+    # via sphinx
+prompt-toolkit==3.0.51 \
+    --hash=sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07 \
+    --hash=sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed
     # via awscli (pyproject.toml)
-pycparser==2.22 \
-    --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
-    --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
-    # via cffi
-pygments==2.18.0 \
-    --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \
-    --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a
+pygments==2.19.2 \
+    --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
+    --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
     # via sphinx
 python-dateutil==2.9.0 \
     --hash=sha256:78e73e19c63f5b20ffa567001531680d939dc042bf7850431877645523c66709 \
     --hash=sha256:cbf2f1da5e6083ac2fbfd4da39a25f34312230110440f424a14c7558bb85d82e
     # via awscli (pyproject.toml)
-pytz==2024.2 \
-    --hash=sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a \
-    --hash=sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725
-    # via babel
-requests==2.32.3 \
-    --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
-    --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
+requests==2.32.5 \
+    --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \
+    --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf
     # via sphinx
 ruamel-yaml==0.17.21 \
     --hash=sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7 \
     --hash=sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af
     # via awscli (pyproject.toml)
-ruamel-yaml-clib==0.2.8 \
-    --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
-    --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
-    --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
-    --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
-    --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
-    --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
-    --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
-    --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
-    --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
-    --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
-    --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
-    --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
-    --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
-    --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
-    --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
-    --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
-    --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
-    --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
-    --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
-    --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
-    --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
-    --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
-    --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
-    --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
-    --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
-    --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
-    --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
-    --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
-    --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
-    --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
-    --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
-    --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
-    --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
-    --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
-    --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
-    --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
-    --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
-    --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
-    --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
-    --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
-    --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
-    --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
-    --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
-    --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
-    --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
-    --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
-    --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
-    --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
-    --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
-    --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
+ruamel-yaml-clib==0.2.12 \
+    --hash=sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b \
+    --hash=sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4 \
+    --hash=sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef \
+    --hash=sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5 \
+    --hash=sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3 \
+    --hash=sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632 \
+    --hash=sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6 \
+    --hash=sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7 \
+    --hash=sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680 \
+    --hash=sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf \
+    --hash=sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da \
+    --hash=sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6 \
+    --hash=sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a \
+    --hash=sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01 \
+    --hash=sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519 \
+    --hash=sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6 \
+    --hash=sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f \
+    --hash=sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd \
+    --hash=sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2 \
+    --hash=sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52 \
+    --hash=sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd \
+    --hash=sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d \
+    --hash=sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c \
+    --hash=sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6 \
+    --hash=sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb \
+    --hash=sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a \
+    --hash=sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969 \
+    --hash=sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28 \
+    --hash=sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d \
+    --hash=sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e \
+    --hash=sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45 \
+    --hash=sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4 \
+    --hash=sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12 \
+    --hash=sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31 \
+    --hash=sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642 \
+    --hash=sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e \
+    --hash=sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285 \
+    --hash=sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed \
+    --hash=sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1 \
+    --hash=sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7 \
+    --hash=sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3 \
+    --hash=sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475 \
+    --hash=sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5 \
+    --hash=sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76 \
+    --hash=sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987 \
+    --hash=sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df
     # via
     #   awscli (pyproject.toml)
     #   ruamel-yaml
@@ -449,71 +344,55 @@ six==1.17.0 \
     --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
     --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81
     # via python-dateutil
-snowballstemmer==2.2.0 \
-    --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \
-    --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
-    # via sphinx
-sphinx==3.0.2 \
-    --hash=sha256:3145d87d0962366d4c5264c39094eae3f5788d01d4b1a12294051bfe4271d91b \
-    --hash=sha256:d7c6e72c6aa229caf96af82f60a0d286a1521d42496c226fe37f5a75dcfe2941
-    # via -r requirements-docs.txt
-sphinx-notfound-page==0.4 \
-    --hash=sha256:0105a40d8a305d3e1003630d8ee99296baa08cf2a4c1ce1db8d91fbbe78f90db \
-    --hash=sha256:609fd7cd7f9ea73c030f1b67a3f2bc90f60bff87b30026fbd2bcb19c7c59c484
-    # via -r requirements-docs.txt
-sphinxcontrib-applehelp==1.0.4 \
-    --hash=sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228 \
-    --hash=sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
-sphinxcontrib-devhelp==1.0.2 \
-    --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \
-    --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
-sphinxcontrib-htmlhelp==2.0.1 \
-    --hash=sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff \
-    --hash=sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903
+snowballstemmer==3.0.1 \
+    --hash=sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064 \
+    --hash=sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895
+    # via sphinx
+sphinx==6.2.0 \
+    --hash=sha256:9ef22c2941bc3d0ff080d25a797f7521fc317e857395c712ddde97a19d5bb440 \
+    --hash=sha256:ff1c2a1167bef9cdcd8ec71339e85fe10f26d4e9ef9382ef10b2687c876c936b
     # via
     #   -r requirements-docs.txt
-    #   sphinx
+    #   sphinx-notfound-page
+sphinx-notfound-page==1.1.0 \
+    --hash=sha256:835dc76ff7914577a1f58d80a2c8418fb6138c0932c8da8adce4d9096fbcd389 \
+    --hash=sha256:913e1754370bb3db201d9300d458a8b8b5fb22e9246a816643a819a9ea2b8067
+    # via -r requirements-docs.txt
+sphinxcontrib-applehelp==2.0.0 \
+    --hash=sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1 \
+    --hash=sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5
+    # via sphinx
+sphinxcontrib-devhelp==2.0.0 \
+    --hash=sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad \
+    --hash=sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2
+    # via sphinx
+sphinxcontrib-htmlhelp==2.1.0 \
+    --hash=sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 \
+    --hash=sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9
+    # via sphinx
 sphinxcontrib-jsmath==1.0.1 \
     --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \
     --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
-sphinxcontrib-qthelp==1.0.3 \
-    --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \
-    --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
-sphinxcontrib-serializinghtml==1.1.5 \
-    --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \
-    --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952
-    # via
-    #   -r requirements-docs.txt
-    #   sphinx
+    # via sphinx
+sphinxcontrib-qthelp==2.0.0 \
+    --hash=sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab \
+    --hash=sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb
+    # via sphinx
+sphinxcontrib-serializinghtml==2.0.0 \
+    --hash=sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 \
+    --hash=sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d
+    # via sphinx
 urllib3==1.26.20 \
     --hash=sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e \
     --hash=sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32
     # via
     #   awscli (pyproject.toml)
     #   requests
-wcwidth==0.2.13 \
-    --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \
-    --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5
+wcwidth==0.2.14 \
+    --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \
+    --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1
     # via prompt-toolkit
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via awscli (pyproject.toml)
-
-# The following packages are considered to be unsafe in a requirements file:
-setuptools==75.3.0 \
-    --hash=sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd \
-    --hash=sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686
-    # via sphinx
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
+    # via importlib-metadata
diff -pruN 2.23.6-1/requirements-docs.txt 2.31.35-1/requirements-docs.txt
--- 2.23.6-1/requirements-docs.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-docs.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,15 +1,3 @@
 Jinja2<3.1.0
-Sphinx==3.0.2
-sphinx-notfound-page==0.4
-# alabaster 0.7.14 dropped support for Sphinx<3.4
-# and Sphinx 3.0.2 bounds alabaster>=0.7,<0.8.
-alabaster==0.7.13
-# Latest versions of these packages support only
-# Sphinx>5, which we are not using. Set explicit pins
-# so we can continue to use Sphinx 3.
-sphinxcontrib-applehelp==1.0.4
-sphinxcontrib-devhelp==1.0.2
-sphinxcontrib-htmlhelp==2.0.1
-sphinxcontrib-jsmath==1.0.1
-sphinxcontrib-qthelp==1.0.3
-sphinxcontrib-serializinghtml==1.1.5
+Sphinx==6.2
+sphinx-notfound-page==1.1.0
diff -pruN 2.23.6-1/requirements-test-lock.txt 2.31.35-1/requirements-test-lock.txt
--- 2.23.6-1/requirements-test-lock.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-test-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.9
 # by the following command:
 #
 #    pip-compile --allow-unsafe --generate-hashes --output-file=requirements-test-lock.txt --unsafe-package=flit-core --unsafe-package=pip --unsafe-package=setuptools --unsafe-package=wheel requirements-test.txt
@@ -10,13 +10,13 @@ attrs==23.2.0 \
     # via
     #   -r requirements-test.txt
     #   jsonschema
-build==1.2.2.post1 \
-    --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5 \
-    --hash=sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7
+build==1.3.0 \
+    --hash=sha256:698edd0ea270bde950f53aed21f3a0135672206f3911e0176261a31e0e07b397 \
+    --hash=sha256:7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4
     # via pip-tools
-click==8.1.7 \
-    --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
-    --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
+click==8.1.8 \
+    --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \
+    --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a
     # via pip-tools
 coverage[toml]==7.0.1 \
     --hash=sha256:07bcfb1d8ac94af886b54e18a88b393f6a73d5959bb31e46644a02453c36e475 \
@@ -73,25 +73,21 @@ coverage[toml]==7.0.1 \
     # via
     #   -r requirements-test.txt
     #   pytest-cov
-exceptiongroup==1.2.2 \
-    --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b \
-    --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc
+exceptiongroup==1.3.0 \
+    --hash=sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10 \
+    --hash=sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88
     # via pytest
 execnet==2.1.1 \
     --hash=sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc \
     --hash=sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3
     # via pytest-xdist
-importlib-metadata==8.5.0 \
-    --hash=sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b \
-    --hash=sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7
+importlib-metadata==8.7.0 \
+    --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
+    --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
     # via build
-importlib-resources==6.4.5 \
-    --hash=sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065 \
-    --hash=sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717
-    # via jsonschema
-iniconfig==2.0.0 \
-    --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
-    --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
+iniconfig==2.1.0 \
+    --hash=sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7 \
+    --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760
     # via pytest
 jsonschema==4.7.2 \
     --hash=sha256:73764f461d61eb97a057c929368610a134d1d1fffd858acfe88864ee94f1f1d3 \
@@ -104,18 +100,20 @@ packaging==24.1 \
     #   -r requirements-test.txt
     #   build
     #   pytest
-pip-tools==7.0.0 \
-    --hash=sha256:6a2308712727c86cc8a6cedc0e6ba01232a337c706d63926d3789462ad083d06 \
-    --hash=sha256:ae185db747195c8ed011866c366279cbb64f7f8c1528e7a828f515bd2bb0b31b
+pip-tools==7.5.0 \
+    --hash=sha256:30639f50961bb09f49d22f4389e8d7d990709677c094ce1114186b1f2e9b5821 \
+    --hash=sha256:69758e4e5a65f160e315d74db46246fdbb30d549f1ed0c4236d057122c9b0f18
     # via -r requirements-test.txt
-pluggy==1.5.0 \
-    --hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \
-    --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
+pluggy==1.6.0 \
+    --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \
+    --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
     # via pytest
 pyproject-hooks==1.2.0 \
     --hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \
     --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
-    # via build
+    # via
+    #   build
+    #   pip-tools
 pyrsistent==0.20.0 \
     --hash=sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f \
     --hash=sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e \
@@ -203,21 +201,23 @@ tomli==2.2.1 \
     #   coverage
     #   pip-tools
     #   pytest
-zipp==3.20.2 \
-    --hash=sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350 \
-    --hash=sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29
-    # via
-    #   importlib-metadata
-    #   importlib-resources
+typing-extensions==4.15.0 \
+    --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
+    --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
+    # via exceptiongroup
+zipp==3.23.0 \
+    --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
+    --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
+    # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
-pip==24.3.1 \
-    --hash=sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed \
-    --hash=sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99
+pip==25.2 \
+    --hash=sha256:578283f006390f85bb6282dffb876454593d637f5d1be494b5202ce4877e71f2 \
+    --hash=sha256:6d67a2b4e7f14d8b31b8b52648866fa717f45a1eb70e83002f4331d07e953717
     # via pip-tools
-setuptools==75.3.0 \
-    --hash=sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd \
-    --hash=sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686
+setuptools==80.9.0 \
+    --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \
+    --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c
     # via pip-tools
 wheel==0.45.1 \
     --hash=sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729 \
diff -pruN 2.23.6-1/requirements-test.txt 2.31.35-1/requirements-test.txt
--- 2.23.6-1/requirements-test.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements-test.txt	2025-11-12 19:17:29.000000000 +0000
@@ -8,5 +8,5 @@ pytest==7.4.0
 coverage==7.0.1
 pytest-cov==4.1.0
 pytest-xdist==3.1.0
-pip-tools==7.0.0
+pip-tools==7.5.0
 packaging==24.1
diff -pruN 2.23.6-1/requirements.txt 2.31.35-1/requirements.txt
--- 2.23.6-1/requirements.txt	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/requirements.txt	2025-11-12 19:17:29.000000000 +0000
@@ -1 +1 @@
--r requirements-dev.txt
\ No newline at end of file
+-r requirements-dev.txt
diff -pruN 2.23.6-1/scripts/ci/install 2.31.35-1/scripts/ci/install
--- 2.23.6-1/scripts/ci/install	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/install	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,9 @@
 #!/usr/bin/env python
+import glob
 import os
+import shutil
 import sys
-import glob
 from subprocess import check_call
-import shutil
 
 _dname = os.path.dirname
 
@@ -14,13 +14,14 @@ os.chdir(REPO_ROOT)
 def run(command):
     return check_call(command, shell=True)
 
+
 if sys.version_info[:2] >= (3, 12):
     # Python 3.12+ no longer includes setuptools by default.
 
     # Setuptools 71+ now prefers already installed versions
     # of packaging _and_ broke the API for packaging<22.0.
     # We'll pin to match what's in requirements-dev.txt.
-    run("pip install setuptools==71.1.0 packaging==24.1")
+    run("pip install setuptools==78.1.1 packaging==24.1")
 
 run("python -m pip install --no-build-isolation -r requirements-dev-lock.txt")
 run(
diff -pruN 2.23.6-1/scripts/ci/install-benchmark 2.31.35-1/scripts/ci/install-benchmark
--- 2.23.6-1/scripts/ci/install-benchmark	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/install-benchmark	2025-11-12 19:17:29.000000000 +0000
@@ -10,33 +10,37 @@ perf testing.
 * Install dependencies
 
 """
+
 import os
 import shutil
 from subprocess import check_call
 
-
 GIT_OWNER = os.environ.get('GIT_OWNER', 'boto')
 # Using PERF_BRANCH instead of GIT_BRANCH because that value
 # is set by jenkins to the branch that's been checked out via
 # git.
 PERF_BRANCH = os.environ.get('PERF_BRANCH', 'develop')
 REPO_ROOT = os.path.dirname(
-    os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 WORKDIR = os.environ.get('PERF_WORKDIR', os.path.join(REPO_ROOT, 'workdir'))
 
 
 def clone_s3_transfer_repo():
     if os.path.isdir('s3transfer'):
         shutil.rmtree('s3transfer')
-    check_call('git clone https://github.com/%s/s3transfer.git' % GIT_OWNER,
-               shell=True)
+    check_call(
+        'git clone https://github.com/%s/s3transfer.git' % GIT_OWNER,
+        shell=True,
+    )
     check_call('cd s3transfer && git checkout %s' % PERF_BRANCH, shell=True)
 
 
 def pip_install_s3transfer_and_deps():
     check_call('cd s3transfer && pip install -e .', shell=True)
-    check_call('cd s3transfer && pip install -r requirements-dev.txt',
-               shell=True)
+    check_call(
+        'cd s3transfer && pip install -r requirements-dev.txt', shell=True
+    )
     check_call('pip install "caf>=0.1.0,<1.0.0"', shell=True)
     check_call('cd %s && pip install -e .' % REPO_ROOT, shell=True)
 
diff -pruN 2.23.6-1/scripts/ci/install-build-system 2.31.35-1/scripts/ci/install-build-system
--- 2.23.6-1/scripts/ci/install-build-system	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/install-build-system	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,10 @@
 #!/usr/bin/env python3
 import argparse
-import tarfile
-import tempfile
-import os
 import glob
+import os
 import shutil
-
+import tarfile
+import tempfile
 from pathlib import Path
 from subprocess import check_call
 
diff -pruN 2.23.6-1/scripts/ci/run-benchmark 2.31.35-1/scripts/ci/run-benchmark
--- 2.23.6-1/scripts/ci/run-benchmark	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/run-benchmark	2025-11-12 19:17:29.000000000 +0000
@@ -4,23 +4,25 @@
 As of now this benchmarks `cp` and `rm` with test cases for multiple 4kb files
 (default 10000 files) and a single large file (default 10gb, `cp` only).
 """
-import os
-import json
-from subprocess import check_call, Popen, PIPE
-from datetime import datetime
-import random
+
 import argparse
 import inspect
-import shutil
+import json
+import os
 import platform
+import random
+import shutil
+from datetime import datetime
+from subprocess import PIPE, Popen, check_call
 
-import awscli
 import s3transfer
 
+import awscli
 
 TEST_BUCKET = os.environ.get('PERF_TEST_BUCKET')
 REPO_ROOT = os.path.dirname(
-    os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 WORKDIR = os.environ.get('PERF_WORKDIR', os.path.join(REPO_ROOT, 'workdir'))
 MANY_FILES_DIR = 'many'
 LARGE_FILE_DIR = 'large'
@@ -44,14 +46,16 @@ def initialize_files(num_files, file_siz
     many_files_dir = os.path.join(WORKDIR, MANY_FILES_DIR)
     if not os.path.exists(many_files_dir):
         os.makedirs(many_files_dir)
-        run('caf gen --file-size 4kb --max-files %s --directory %s' %
-            (num_files, many_files_dir))
+        run(
+            f'caf gen --file-size 4kb --max-files {num_files} --directory {many_files_dir}'
+        )
 
     large_file_dir = os.path.join(WORKDIR, LARGE_FILE_DIR)
     if not os.path.exists(large_file_dir):
         os.makedirs(large_file_dir)
-        run('caf gen --file-size %s --max-files 1 --directory %s' %
-            (file_size, large_file_dir))
+        run(
+            f'caf gen --file-size {file_size} --max-files 1 --directory {large_file_dir}'
+        )
 
 
 def write_metadata_file(filename):
@@ -81,12 +85,21 @@ def _inject_package_info(package, metada
 
 def _get_git_version(package):
     dname = os.path.dirname(inspect.getfile(package))
-    git_sha = Popen(
-        'git rev-parse HEAD',
-        cwd=dname, shell=True, stdout=PIPE).communicate()[0].strip()
-    git_branch = Popen(
-        'git rev-parse --abbrev-ref HEAD',
-        cwd=dname, shell=True, stdout=PIPE).communicate()[0].strip()
+    git_sha = (
+        Popen('git rev-parse HEAD', cwd=dname, shell=True, stdout=PIPE)
+        .communicate()[0]
+        .strip()
+    )
+    git_branch = (
+        Popen(
+            'git rev-parse --abbrev-ref HEAD',
+            cwd=dname,
+            shell=True,
+            stdout=PIPE,
+        )
+        .communicate()[0]
+        .strip()
+    )
     return '%s (%s)' % (git_sha, git_branch)
 
 
@@ -115,24 +128,30 @@ def benchmark(bucket, results_dir, num_i
         results = os.path.join(results_dir, 'upload-10k-small')
         os.makedirs(results)
         benchmark_cp = os.path.join(perf_dir, 'benchmark-cp')
-        run(benchmark_cp + ' --recursive --num-iterations %s '
-            '--source %s --dest %s --result-dir %s --no-cleanup' % (
-                num_iterations, local_dir, s3_location, results))
+        run(
+            benchmark_cp + ' --recursive --num-iterations %s '
+            '--source %s --dest %s --result-dir %s --no-cleanup'
+            % (num_iterations, local_dir, s3_location, results)
+        )
 
         # 10k download
         results = os.path.join(results_dir, 'download-10k-small')
         os.makedirs(results)
-        run(benchmark_cp + ' --recursive --num-iterations %s '
-            '--source %s --dest %s --result-dir %s' % (
-                num_iterations, s3_location, local_dir, results))
+        run(
+            benchmark_cp + ' --recursive --num-iterations %s '
+            '--source %s --dest %s --result-dir %s'
+            % (num_iterations, s3_location, local_dir, results)
+        )
 
         # 10k rm
         results = os.path.join(results_dir, 'delete-10k-small')
         os.makedirs(results)
         benchmark_rm = os.path.join(perf_dir, 'benchmark-rm')
-        run(benchmark_rm + ' --recursive --num-iterations %s '
-            '--target %s --result-dir %s' % (
-                num_iterations, s3_location, results))
+        run(
+            benchmark_rm + ' --recursive --num-iterations %s '
+            '--target %s --result-dir %s'
+            % (num_iterations, s3_location, results)
+        )
     finally:
         # Note that the delete-10k-small benchmark restores
         # the files it's deleted once the script is finished.
@@ -146,16 +165,20 @@ def benchmark(bucket, results_dir, num_i
         # 10gb upload
         results = os.path.join(results_dir, 'upload-10gb')
         os.makedirs(results)
-        run(benchmark_cp + ' --recursive --num-iterations %s '
-            '--source %s --dest %s --result-dir %s --no-cleanup' % (
-                num_iterations, local_dir, s3_location, results))
+        run(
+            benchmark_cp + ' --recursive --num-iterations %s '
+            '--source %s --dest %s --result-dir %s --no-cleanup'
+            % (num_iterations, local_dir, s3_location, results)
+        )
 
         # 10gb download
         results = os.path.join(results_dir, 'download-10gb')
         os.makedirs(results)
-        run(benchmark_cp + ' --recursive --num-iterations %s '
-            '--source %s --dest %s --result-dir %s' % (
-                num_iterations, s3_location, local_dir, results))
+        run(
+            benchmark_cp + ' --recursive --num-iterations %s '
+            '--source %s --dest %s --result-dir %s'
+            % (num_iterations, s3_location, local_dir, results)
+        )
     finally:
         # Not benchmarking a single rm call since it's just a single call
         run('aws s3 rm --recursive ' + s3_location)
@@ -170,23 +193,32 @@ def s3_uri(value):
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument(
-        '-n', '--num-iterations', type=int, default=10,
-        help='The number of times to run each test.'
+        '-n',
+        '--num-iterations',
+        type=int,
+        default=10,
+        help='The number of times to run each test.',
     )
     parser.add_argument(
-        '-b', '--bucket', default=TEST_BUCKET, type=s3_uri,
+        '-b',
+        '--bucket',
+        default=TEST_BUCKET,
+        type=s3_uri,
         required=TEST_BUCKET is None,
         help='The bucket to use for testing as an s3 uri. This can also be '
-             'set by the environment variable PERF_TEST_BUCKET. If the '
-             'environment variable is not set, then this argument is required.'
+        'set by the environment variable PERF_TEST_BUCKET. If the '
+        'environment variable is not set, then this argument is required.',
     )
     parser.add_argument(
-        '--num-files', default=10000, type=int,
-        help='The number of files to use for the multiple file case.'
+        '--num-files',
+        default=10000,
+        type=int,
+        help='The number of files to use for the multiple file case.',
     )
     parser.add_argument(
-        '--large-file-size', default='10gb',
+        '--large-file-size',
+        default='10gb',
         help='The file size for the large file case. This can be in the form '
-             '10gb, 4kb, etc.'
+        '10gb, 4kb, etc.',
     )
     main(parser.parse_args())
diff -pruN 2.23.6-1/scripts/ci/run-build-system-tests 2.31.35-1/scripts/ci/run-build-system-tests
--- 2.23.6-1/scripts/ci/run-build-system-tests	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/run-build-system-tests	2025-11-12 19:17:29.000000000 +0000
@@ -2,7 +2,6 @@
 import argparse
 import os
 import sys
-
 from contextlib import contextmanager
 from pathlib import Path
 from subprocess import check_call
diff -pruN 2.23.6-1/scripts/ci/run-tests 2.31.35-1/scripts/ci/run-tests
--- 2.23.6-1/scripts/ci/run-tests	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/run-tests	2025-11-12 19:17:29.000000000 +0000
@@ -48,6 +48,10 @@ def process_args(args):
             f"--cov-config={os.path.join(REPO_ROOT, '.coveragerc')} "
             f"--cov-report xml "
         )
+    if args.junit_xml_path:
+        test_args += f'--junit-xml={args.junit_xml_path} '
+    if args.markers:
+        test_args += f'-m {args.markers} '
     test_args += '--numprocesses=auto --dist=loadfile --maxprocesses=4 '
     dirs = " ".join(args.test_dirs)
 
@@ -84,24 +88,33 @@ if __name__ == "__main__":
             "running tests. This allows you to run the tests against the "
             "current repository without have to install the package as a "
             "distribution."
-        )
+        ),
     )
     parser.add_argument(
         "--ignore",
         nargs='+',
         default=[],
-        help=(
-            "Ignore a test subdirectory. Can be specified multiple times."
-        )
+        help=("Ignore a test subdirectory. Can be specified multiple times."),
     )
     parser.add_argument(
         "--tests-path",
         default=None,
         type=os.path.abspath,
-        help=(
-            "Optional path to an alternate test directory to use."
-        )
+        help=("Optional path to an alternate test directory to use."),
     )
+    parser.add_argument(
+        "--junit-xml-path",
+        default=None,
+        type=os.path.abspath,
+        help="Optional path to output a JUnit XML result file to.",
+    )
+    parser.add_argument(
+        "-m",
+        "--markers",
+        default=None,
+        help="Run all tests decorated with the specified marker expression.",
+    )
+
     raw_args = parser.parse_args()
     test_runner, test_args, test_dirs = process_args(raw_args)
 
diff -pruN 2.23.6-1/scripts/ci/upload-benchmark 2.31.35-1/scripts/ci/upload-benchmark
--- 2.23.6-1/scripts/ci/upload-benchmark	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/ci/upload-benchmark	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,14 @@
 #!/usr/bin/env python
 """Script to upload benchmark results to an s3 location."""
-import os
+
 import argparse
+import os
 from datetime import datetime
 from subprocess import check_call
 
-
 REPO_ROOT = os.path.dirname(
-    os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 WORKDIR = os.environ.get('PERF_WORKDIR', os.path.join(REPO_ROOT, 'workdir'))
 DEFAULT_BUCKET = os.environ.get('PERF_RESULTS_BUCKET')
 DATE_FORMAT = "%Y-%m-%d-%H-%M-%S-"
@@ -17,9 +18,7 @@ def main(args):
     source = get_latest_results_directory(args.directory)
     run_id = source.split(os.sep)[-1]
     destination = '%s/%s' % (args.bucket, run_id)
-    check_call(
-        'aws s3 cp --recursive %s %s' % (source, destination),
-        shell=True)
+    check_call(f'aws s3 cp --recursive {source} {destination}', shell=True)
 
 
 def s3_uri(value):
@@ -54,15 +53,22 @@ def _is_result_dir_format(directory):
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument(
-        '-d', '--directory', default=os.path.join(WORKDIR, 'results'),
+        '-d',
+        '--directory',
+        default=os.path.join(WORKDIR, 'results'),
         help='A directory containing multiple test runs or a single test '
-             'run directory. If this is a directory with multiple test runs, '
-             'the latest will be uploaded.')
+        'run directory. If this is a directory with multiple test runs, '
+        'the latest will be uploaded.',
+    )
     parser.add_argument(
-        '-b', '--bucket', default=DEFAULT_BUCKET, type=s3_uri,
+        '-b',
+        '--bucket',
+        default=DEFAULT_BUCKET,
+        type=s3_uri,
         required=DEFAULT_BUCKET is None,
         help='An s3uri to upload the results to. This can also be set with '
-             'the environment variable PERF_RESULTS_BUCKET. If the '
-             'environment variable is not set, then this argument is '
-             'required.')
+        'the environment variable PERF_RESULTS_BUCKET. If the '
+        'environment variable is not set, then this argument is '
+        'required.',
+    )
     main(parser.parse_args())
diff -pruN 2.23.6-1/scripts/gen-ac-index 2.31.35-1/scripts/gen-ac-index
--- 2.23.6-1/scripts/gen-ac-index	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/gen-ac-index	2025-11-12 19:17:29.000000000 +0000
@@ -1,23 +1,26 @@
 #!/usr/bin/env python
-"""Generate the index used for the new auto-completion.
+"""Generate the index used for the new auto-completion."""
 
-"""
-import os
 import argparse
+import os
 
-from awscli.autocomplete import db
-from awscli.autocomplete import generator
+from awscli.autocomplete import db, generator
 
 
 def main():
     parser = argparse.ArgumentParser()
-    parser.add_argument('--include-builtin-index', action='store_true',
-                        help=("Also generate builtin index as well as the "
-                              "INDEX_LOCATION."))
-    parser.add_argument('--index-location', default=db.INDEX_FILE,
-                        help=(
-                            'Location to write the index file. '
-                            'Defaults to ' + db.INDEX_FILE))
+    parser.add_argument(
+        '--include-builtin-index',
+        action='store_true',
+        help=("Also generate builtin index as well as the INDEX_LOCATION."),
+    )
+    parser.add_argument(
+        '--index-location',
+        default=db.INDEX_FILE,
+        help=(
+            f'Location to write the index file. Defaults to {db.INDEX_FILE}'
+        ),
+    )
     args = parser.parse_args()
     index_dir = os.path.dirname(os.path.abspath(args.index_location))
     if not os.path.isdir(index_dir):
diff -pruN 2.23.6-1/scripts/gen-server-completions 2.31.35-1/scripts/gen-server-completions
--- 2.23.6-1/scripts/gen-server-completions	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/gen-server-completions	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,19 @@ if you want to see the generated complet
 files.
 
 """
+
 import argparse
 import json
-import sys
 import os
 import re
+import sys
 
 import botocore.session
 
-from awscli.autocomplete.autogen import ServerCompletionHeuristic
-from awscli.autocomplete.autogen import BasicSingularize
+from awscli.autocomplete.autogen import (
+    BasicSingularize,
+    ServerCompletionHeuristic,
+)
 
 # The awscli/__init__.py file sets the AWS_DATA_PATH env var, so as long
 # as we import from awscli we're ensured this env var exists.
@@ -37,8 +40,10 @@ def generate_completion_data(args):
         model = session.get_service_model(service_name)
         completion_data = gen.generate_completion_descriptions(model)
         out_filename = os.path.join(
-            BOTOCORE_DATA_PATH, service_name,
-            model.api_version, 'completions-1.json'
+            BOTOCORE_DATA_PATH,
+            service_name,
+            model.api_version,
+            'completions-1.json',
         )
         to_json = _pretty_json_dump(completion_data)
         if args.only_print:
diff -pruN 2.23.6-1/scripts/install 2.31.35-1/scripts/install
--- 2.23.6-1/scripts/install	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/install	2025-11-12 19:17:29.000000000 +0000
@@ -3,7 +3,6 @@
 # which doesn't have argparse.  Given that argparse is
 # a dependency that eventually gets installed, we could
 # try to bootstrap, but using optparse is just easier.
-from __future__ import print_function
 
 import optparse
 import os
@@ -13,19 +12,18 @@ import subprocess
 import sys
 import tarfile
 import tempfile
-
 from contextlib import contextmanager
 
 PACKAGES_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), 'packages')
-INSTALL_DIR = os.path.expanduser(os.path.join(
-    '~', '.local', 'lib', 'aws'))
+    os.path.dirname(os.path.abspath(__file__)), 'packages'
+)
+INSTALL_DIR = os.path.expanduser(os.path.join('~', '.local', 'lib', 'aws'))
 GTE_PY37 = sys.version_info[:2] >= (3, 7)
 UNSUPPORTED_PYTHON = (
-    (2,6),
-    (3,3),
-    (3,4),
-    (3,5),
+    (2, 6),
+    (3, 3),
+    (3, 4),
+    (3, 5),
 )
 INSTALL_ARGS = (
     '--no-binary :all: --no-build-isolation --no-cache-dir --no-index '
@@ -45,6 +43,7 @@ class PythonDeprecationWarning(Warning):
     Python version being used is scheduled to become unsupported
     in an future release. See warning for specifics.
     """
+
     pass
 
 
@@ -52,12 +51,10 @@ def _build_deprecations():
     py_27_params = {
         'date': 'July 15, 2021',
         'blog_link': 'https://aws.amazon.com/blogs/developer/announcing-end-'
-                     'of-support-for-python-2-7-in-aws-sdk-for-python-and-'
-                     'aws-cli-v1/'
-    }
-    return {
-        (2,7): py_27_params
+        'of-support-for-python-2-7-in-aws-sdk-for-python-and-'
+        'aws-cli-v1/',
     }
+    return {(2, 7): py_27_params}
 
 
 DEPRECATED_PYTHON = _build_deprecations()
@@ -75,13 +72,13 @@ def cd(dirname):
 
 def run(cmd):
     sys.stdout.write("Running cmd: %s\n" % cmd)
-    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE)
+    p = subprocess.Popen(
+        cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+    )
     stdout, stderr = p.communicate()
     if p.returncode != 0:
         output = (stdout + stderr).decode("utf-8")
-        raise BadRCError("Bad rc (%s) for cmd '%s': %s" % (
-            p.returncode, cmd, output))
+        raise BadRCError(f"Bad rc ({p.returncode}) for cmd '{cmd}': {output}")
     return stdout
 
 
@@ -123,15 +120,16 @@ def _create_virtualenv_external(location
         # We know that virtualenv is the only dir in this directory
         # so we can listdir()[0] it.
         with cd(os.listdir('.')[0]):
-            run(('%s virtualenv.py --no-download '
-                 '--python %s %s') % (sys.executable,
-                                      sys.executable,
-                                      location))
+            run(
+                ('%s virtualenv.py --no-download ' '--python %s %s')
+                % (sys.executable, sys.executable, location)
+            )
 
 
 def _get_package_tarball(package_dir, package_prefix):
-    package_filenames = sorted([p for p in os.listdir(package_dir)
-                                if p.startswith(package_prefix)])
+    package_filenames = sorted(
+        [p for p in os.listdir(package_dir) if p.startswith(package_prefix)]
+    )
     return package_filenames[-1]
 
 
@@ -145,8 +143,9 @@ def create_working_dir():
 
 
 def pip_install_packages(install_dir):
-    cli_tarball = [p for p in os.listdir(PACKAGES_DIR)
-                   if p.startswith('awscli')]
+    cli_tarball = [
+        p for p in os.listdir(PACKAGES_DIR) if p.startswith('awscli')
+    ]
     if len(cli_tarball) != 1:
         message = (
             "Multiple versions of the CLI were found in %s. Please clear "
@@ -161,8 +160,10 @@ def pip_install_packages(install_dir):
         _install_setup_deps(pip_script, '.')
 
     with cd(PACKAGES_DIR):
-        run('%s install %s --find-links file://%s %s' % (
-                pip_script, INSTALL_ARGS, PACKAGES_DIR, cli_tarball))
+        run(
+            '%s install %s --find-links file://%s %s'
+            % (pip_script, INSTALL_ARGS, PACKAGES_DIR, cli_tarball)
+        )
 
 
 def _install_setup_deps(pip_script, setup_package_dir):
@@ -172,15 +173,19 @@ def _install_setup_deps(pip_script, setu
     # so for now we're explicitly installing the one setup_requires package
     # we need.  This comes from python-dateutils.
     setuptools_scm_tarball = _get_package_tarball(
-        setup_package_dir, 'setuptools_scm')
-    run('%s install --no-binary :all: --no-cache-dir --no-index '
-        '--find-links file://%s %s' % (
-            pip_script, setup_package_dir, setuptools_scm_tarball))
-    wheel_tarball = _get_package_tarball(
-        setup_package_dir, 'wheel')
-    run('%s install --no-binary :all: --no-cache-dir --no-index '
-        '--find-links file://%s %s' % (
-            pip_script, setup_package_dir, wheel_tarball))
+        setup_package_dir, 'setuptools_scm'
+    )
+    run(
+        '%s install --no-binary :all: --no-cache-dir --no-index '
+        '--find-links file://%s %s'
+        % (pip_script, setup_package_dir, setuptools_scm_tarball)
+    )
+    wheel_tarball = _get_package_tarball(setup_package_dir, 'wheel')
+    run(
+        '%s install --no-binary :all: --no-cache-dir --no-index '
+        '--find-links file://%s %s'
+        % (pip_script, setup_package_dir, wheel_tarball)
+    )
 
 
 def create_symlink(real_location, symlink_name):
@@ -197,17 +202,25 @@ def create_symlink(real_location, symlin
 
 def main():
     parser = optparse.OptionParser()
-    parser.add_option('-i', '--install-dir', help="The location to install "
-                      "the AWS CLI.  The default value is ~/.local/lib/aws",
-                      default=INSTALL_DIR)
-    parser.add_option('-b', '--bin-location', help="If this argument is "
-                      "provided, then a symlink will be created at this "
-                      "location that points to the aws executable. "
-                      "This argument is useful if you want to put the aws "
-                      "executable somewhere already on your path, e.g. "
-                      "-b /usr/local/bin/aws.  This is an optional argument. "
-                      "If you do not provide this argument you will have to "
-                      "add INSTALL_DIR/bin to your PATH.")
+    parser.add_option(
+        '-i',
+        '--install-dir',
+        help="The location to install "
+        "the AWS CLI.  The default value is ~/.local/lib/aws",
+        default=INSTALL_DIR,
+    )
+    parser.add_option(
+        '-b',
+        '--bin-location',
+        help="If this argument is "
+        "provided, then a symlink will be created at this "
+        "location that points to the aws executable. "
+        "This argument is useful if you want to put the aws "
+        "executable somewhere already on your path, e.g. "
+        "-b /usr/local/bin/aws.  This is an optional argument. "
+        "If you do not provide this argument you will have to "
+        "add INSTALL_DIR/bin to your PATH.",
+    )
     py_version = sys.version_info[:2]
     if py_version in UNSUPPORTED_PYTHON:
         unsupported_python_msg = (
@@ -240,8 +253,9 @@ def main():
         create_install_structure(working_dir, opts.install_dir)
         pip_install_packages(opts.install_dir)
         real_location = os.path.join(opts.install_dir, bin_path(), 'aws')
-        if opts.bin_location and create_symlink(real_location,
-                                                opts.bin_location):
+        if opts.bin_location and create_symlink(
+            real_location, opts.bin_location
+        ):
             print("You can now run: %s --version" % opts.bin_location)
         else:
             print("You can now run: %s --version" % real_location)
diff -pruN 2.23.6-1/scripts/install_deps.py 2.31.35-1/scripts/install_deps.py
--- 2.23.6-1/scripts/install_deps.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/install_deps.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,10 @@
 import os
 
-from utils import cd, bin_path, run, virtualenv_enabled
+from utils import bin_path, cd, run, virtualenv_enabled
 
-INSTALL_ARGS = "--no-build-isolation --no-cache-dir --no-index --prefer-binary "
+INSTALL_ARGS = (
+    "--no-build-isolation --no-cache-dir --no-index --prefer-binary "
+)
 PINNED_PIP_VERSION = '24.0'
 SETUP_DEPS = ("setuptools-", "setuptools_scm", "wheel", "hatchling")
 
@@ -17,7 +19,8 @@ def get_package_tarball(package_dir, pac
     )
     if len(package_filenames) == 0:
         raise InstallationError(
-            "Unable to find local package starting with %s prefix." % package_prefix
+            "Unable to find local package starting with %s prefix."
+            % package_prefix
         )
     # We only expect a single package from the downloader
     return package_filenames[0]
@@ -41,7 +44,9 @@ def pip_install_packages(package_dir):
 
     # Setup pip to support modern setuptools calls
     pip_script = os.path.join(os.environ["VIRTUAL_ENV"], bin_path(), "pip")
-    local_python = os.path.join(os.environ["VIRTUAL_ENV"], bin_path(), "python")
+    local_python = os.path.join(
+        os.environ["VIRTUAL_ENV"], bin_path(), "python"
+    )
 
     # Windows can't replace a running pip.exe, so we need to work around
     run("%s -m pip install pip==%s" % (local_python, PINNED_PIP_VERSION))
diff -pruN 2.23.6-1/scripts/installers/make-docker 2.31.35-1/scripts/installers/make-docker
--- 2.23.6-1/scripts/installers/make-docker	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/make-docker	2025-11-12 19:17:29.000000000 +0000
@@ -1,19 +1,27 @@
 #!/usr/bin/env python
 """Script to build a Docker image of the AWS CLI"""
+
 import argparse
 import os
-import sys
 import shutil
+import sys
 from distutils.dir_util import copy_tree
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
-from utils import run, tmp_dir, cd, BadRCError, \
-                  extract_zip, update_metadata, save_to_zip
-
-
-ROOT = os.path.dirname(os.path.dirname(os.path.dirname(
-    os.path.abspath(__file__))))
+from utils import (
+    BadRCError,
+    cd,
+    extract_zip,
+    run,
+    save_to_zip,
+    tmp_dir,
+    update_metadata,
+)
+
+ROOT = os.path.dirname(
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 DOCKER_DIR = os.path.join(ROOT, 'docker')
 DIST_DIR = os.path.join(ROOT, 'dist')
 DEFAULT_EXE_ZIP = os.path.join(DIST_DIR, 'awscli-exe.zip')
@@ -52,8 +60,10 @@ def _make_build_context(build_context_di
 def _update_exe_metadata(exe):
     with tmp_dir() as tmp:
         extract_zip(exe, tmp)
-        update_metadata(os.path.join(tmp, 'aws', 'dist'),
-                        distribution_source=DISTRIBUTION_SOURCE)
+        update_metadata(
+            os.path.join(tmp, 'aws', 'dist'),
+            distribution_source=DISTRIBUTION_SOURCE,
+        )
         save_to_zip(tmp, exe)
 
 
@@ -63,15 +73,19 @@ def _copy_docker_dir_to_build_context(bu
 
 def _copy_exe_to_build_context(build_context_dir, exe):
     build_context_exe_path = os.path.join(
-        build_context_dir, os.path.basename(exe))
+        build_context_dir, os.path.basename(exe)
+    )
     shutil.copy(exe, build_context_exe_path)
 
 
 def _docker_build(build_context_dir, tags, exe_filename):
     with cd(build_context_dir):
         docker_build_cmd = [
-            'docker', 'build', '--build-arg',
-            f'EXE_FILENAME={exe_filename}', '.'
+            'docker',
+            'build',
+            '--build-arg',
+            f'EXE_FILENAME={exe_filename}',
+            '.',
         ]
         for tag in tags:
             docker_build_cmd.extend(['-t', tag])
@@ -94,7 +108,7 @@ def main():
         help=(
             'The name of the exe zip to build into the Docker image. By '
             'default the exe located at: %s' % DEFAULT_EXE_ZIP
-        )
+        ),
     )
     parser.add_argument(
         '--output',
@@ -102,7 +116,7 @@ def main():
         help=(
             'The name of the file to save the Docker image. By default, '
             'this will be saved at: %s' % DEFAULT_DOCKER_OUTPUT
-        )
+        ),
     )
     parser.add_argument(
         '--tags',
diff -pruN 2.23.6-1/scripts/installers/make-exe 2.31.35-1/scripts/installers/make-exe
--- 2.23.6-1/scripts/installers/make-exe	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/make-exe	2025-11-12 19:17:29.000000000 +0000
@@ -4,21 +4,22 @@
 This exe can then be wrapped in a platform specific installer for each
 supported platform.
 """
+
 import argparse
 import json
 import os
-import sys
 import shutil
+import sys
 from distutils.dir_util import copy_tree
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
-from utils import run, tmp_dir, update_metadata, save_to_zip, remove_dist_info
 from install_deps import install_packages
+from utils import run, save_to_zip, tmp_dir, update_metadata
 
-
-ROOT = os.path.dirname(os.path.dirname(os.path.dirname(
-    os.path.abspath(__file__))))
+ROOT = os.path.dirname(
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 EXE_DIR = os.path.join(ROOT, 'exe')
 PYINSTALLER_DIR = os.path.join(EXE_DIR, 'pyinstaller')
 ASSETS_DIR = os.path.join(EXE_DIR, 'assets')
@@ -42,15 +43,16 @@ def do_make_exe(workdir, exe_zipfile, ac
     aws_exe_build = pyinstaller('aws.spec')
     if ac_index:
         full_internal_ac_index_path = os.path.join(
-            aws_exe_build, AC_INDEX_INTERNAL_PATH)
+            aws_exe_build, AC_INDEX_INTERNAL_PATH
+        )
         copy_file(ac_index, full_internal_ac_index_path)
     copy_directory(aws_exe_build, output_exe_dist_dir)
     aws_complete_exe_build = pyinstaller('aws_completer.spec')
-    update_metadata(aws_complete_exe_build,
-                    distribution_source=DISTRIBUTION_SOURCE)
+    update_metadata(
+        aws_complete_exe_build, distribution_source=DISTRIBUTION_SOURCE
+    )
     copy_directory_contents_into(aws_complete_exe_build, output_exe_dist_dir)
     copy_directory_contents_into(ASSETS_DIR, exe_dir)
-    remove_dist_info(workdir)
     save_to_zip(workdir, exe_zipfile)
 
 
@@ -63,8 +65,7 @@ def delete_existing_exe_build():
 def pyinstaller(specfile):
     aws_spec_path = os.path.join(PYINSTALLER_DIR, specfile)
     print(run('pyinstaller %s' % (aws_spec_path), cwd=PYINSTALLER_DIR))
-    return os.path.join(
-        PYINSTALLER_DIR, 'dist', os.path.splitext(specfile)[0])
+    return os.path.join(PYINSTALLER_DIR, 'dist', os.path.splitext(specfile)[0])
 
 
 def copy_directory(src, dst):
@@ -101,7 +102,7 @@ def main():
             'The name of the file to save the exe zip. By default, '
             'this will be saved in "dist/%s" directory in the root of the '
             'awscli.' % DEFAULT_OUTPUT_ZIP
-        )
+        ),
     )
     parser.add_argument(
         '--no-cleanup',
@@ -124,16 +125,13 @@ def main():
     parser.add_argument(
         '--ac-index-path',
         default=None,
-        help=(
-            'Path to ac.index file to include in the exe.'
-        )
+        help=('Path to ac.index file to include in the exe.'),
     )
     args = parser.parse_args()
 
     output = os.path.abspath(args.output)
     if args.src_dir:
-        print(
-            'Installing dependencies from local directory: %s' % args.src_dir)
+        print(f'Installing dependencies from local directory: {args.src_dir}')
         install_packages(args.src_dir)
     else:
         run('pip install -r requirements-dev-lock.txt')
diff -pruN 2.23.6-1/scripts/installers/make-macpkg 2.31.35-1/scripts/installers/make-macpkg
--- 2.23.6-1/scripts/installers/make-macpkg	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/make-macpkg	2025-11-12 19:17:29.000000000 +0000
@@ -4,18 +4,19 @@
 This script assumes that an executable has been produced previously
 by the sibling script make-pyinstaller.
 """
+
 import argparse
 import os
-import sys
 import shutil
+import sys
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
-from utils import run, tmp_dir, extract_zip
-
+from utils import extract_zip, run, tmp_dir
 
-ROOT = os.path.dirname(os.path.dirname(os.path.dirname(
-    os.path.abspath(__file__))))
+ROOT = os.path.dirname(
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 PKG_DIR = os.path.join(ROOT, 'macpkg')
 SCRIPTS_DIR = os.path.join(PKG_DIR, 'scripts')
 RESOURCES_DIR = os.path.join(PKG_DIR, 'resources')
@@ -45,27 +46,30 @@ def stage_files(workdir):
 
 def do_make_pkg(workdir, pkg_name):
     version = get_version(workdir)
-    print(run(
-        (
-            'pkgbuild --identifier com.amazon.aws.cli2 '
-            '--root ./stage '
-            '--scripts %s '
-            '--version %s '
-            '%s'
-        ) % (SCRIPTS_DIR, version, TEMP_PKG_NAME),
-        cwd=workdir,
-    ))
-    with tmp_dir() as formatted_resource_dir:
-        render_resources(
-            formatted_resource_dir, RESOURCES_DIR, {'version': version})
-        print(run(
+    print(
+        run(
             (
-                'productbuild --distribution %s '
-                '--resources %s '
+                'pkgbuild --identifier com.amazon.aws.cli2 '
+                '--root ./stage '
+                '--scripts %s '
+                '--version %s '
                 '%s'
-            ) % (DISTRIBUTION_PATH, formatted_resource_dir, PKG_NAME),
+            )
+            % (SCRIPTS_DIR, version, TEMP_PKG_NAME),
             cwd=workdir,
-        ))
+        )
+    )
+    with tmp_dir() as formatted_resource_dir:
+        render_resources(
+            formatted_resource_dir, RESOURCES_DIR, {'version': version}
+        )
+        print(
+            run(
+                ('productbuild --distribution %s --resources %s %s')
+                % (DISTRIBUTION_PATH, formatted_resource_dir, PKG_NAME),
+                cwd=workdir,
+            )
+        )
     shutil.copyfile(os.path.join(workdir, PKG_NAME), pkg_name)
 
 
@@ -85,7 +89,7 @@ def render_resources(workdir, resource_d
             # variables and write it out to a filepath with the .tmpl
             # extension stripped.
             dst = os.path.join(workdir, filename[:-5])
-            with open(path, 'r') as f:
+            with open(path) as f:
                 content = f.read()
             formatted_content = content.format(**variables)
             with open(dst, 'w') as f:
@@ -104,7 +108,7 @@ def main():
         help=(
             'The output PKG name. By default, this will be '
             '"dist/%s" in the root of the awscli.' % PKG_NAME
-        )
+        ),
     )
     parser.add_argument(
         '--src-exe',
@@ -112,7 +116,7 @@ def main():
         help=(
             'The exe used to build the PKG. By default, this will be the'
             '"dist/%s" zipfile in the root of the awscli.' % EXE_ZIP_NAME
-        )
+        ),
     )
     args = parser.parse_args()
     output = os.path.abspath(args.output)
diff -pruN 2.23.6-1/scripts/installers/sign-exe 2.31.35-1/scripts/installers/sign-exe
--- 2.23.6-1/scripts/installers/sign-exe	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/sign-exe	2025-11-12 19:17:29.000000000 +0000
@@ -1,16 +1,17 @@
 #!/usr/bin/env python
 """Script to sign exe bundle"""
+
 import argparse
 import os
 import sys
 
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
-from utils import run, BadRCError
-
+from utils import BadRCError, run
 
-ROOT = os.path.dirname(os.path.dirname(os.path.dirname(
-    os.path.abspath(__file__))))
+ROOT = os.path.dirname(
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+)
 EXE_ZIP_NAME = 'awscli-exe.zip'
 SIGNATURE_FILENAME = EXE_ZIP_NAME + '.sig'
 
@@ -28,9 +29,7 @@ def _verify_gpg_installed():
 
 
 def _sign_exe_zip(exe_zipfile, signature_filename, key_name):
-    options = [
-        '--yes', '--output', signature_filename
-    ]
+    options = ['--yes', '--output', signature_filename]
     if key_name:
         options.extend(['--local-user', key_name])
     options = ' '.join(options)
@@ -45,7 +44,7 @@ def main():
         help=(
             'The output signature file. By default, this will be '
             '"dist/%s" in the root of the awscli.' % SIGNATURE_FILENAME
-        )
+        ),
     )
     parser.add_argument(
         '--exe',
@@ -53,7 +52,7 @@ def main():
         help=(
             'The exe zip to sign. By default, this will be the'
             '"dist/%s" zipfile in the root of the awscli.' % EXE_ZIP_NAME
-        )
+        ),
     )
     parser.add_argument(
         '--key-name',
@@ -61,7 +60,7 @@ def main():
             'The name of the key to use for signing. This corresponds to the '
             '--local-user option when running gpg. By default, the key used '
             'is your default private key in gpg.'
-        )
+        ),
     )
     args = parser.parse_args()
     sign_exe(args.exe, args.output, args.key_name)
@@ -69,4 +68,3 @@ def main():
 
 if __name__ == "__main__":
     main()
-
diff -pruN 2.23.6-1/scripts/installers/test-installer 2.31.35-1/scripts/installers/test-installer
--- 2.23.6-1/scripts/installers/test-installer	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/test-installer	2025-11-12 19:17:29.000000000 +0000
@@ -1,27 +1,30 @@
 #!/usr/bin/env python
 """Script to run smoke tests on aws cli packaged installers"""
+
 import argparse
-import sys
 import os
 import re
 import shutil
+import sys
 import tempfile
 
 SCRIPTS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 sys.path.append(SCRIPTS_DIR)
 
-from utils import run, tmp_dir, extract_zip
+from utils import extract_zip, run, tmp_dir
 
 REPO_ROOT = os.path.dirname(SCRIPTS_DIR)
 DIST_DIR = os.path.join(REPO_ROOT, 'dist')
 SMOKE_TEST_PATH = os.path.join(
-    REPO_ROOT, 'tests', 'integration', 'test_smoke.py')
+    REPO_ROOT, 'tests', 'integration', 'test_smoke.py'
+)
 UNINSTALL_MAC_PKG_PATH = os.path.join(
-    SCRIPTS_DIR, 'installers', 'uninstall-mac-pkg')
+    SCRIPTS_DIR, 'installers', 'uninstall-mac-pkg'
+)
 EXE_NAME = 'aws'
 
 
-class InstallerTester(object):
+class InstallerTester:
     DEFAULT_INSTALLER_LOCATION = None
 
     def __init__(self, installer_location=None):
@@ -79,9 +82,8 @@ class ExeTester(InstallerTester):
             extract_zip(self._installer_location, workdir)
             install_script = os.path.join(workdir, 'aws', 'install')
             run(
-                '%s --install-dir %s --bin-dir %s' % (
-                    install_script, install_dir, bin_dir
-                )
+                '%s --install-dir %s --bin-dir %s'
+                % (install_script, install_dir, bin_dir)
             )
 
     def cleanup(self):
@@ -92,7 +94,9 @@ class ExeTester(InstallerTester):
 
 
 class PkgTester(InstallerTester):
-    DEFAULT_INSTALLER_LOCATION = os.path.join(DIST_DIR, 'AWS-CLI-Installer.pkg')
+    DEFAULT_INSTALLER_LOCATION = os.path.join(
+        DIST_DIR, 'AWS-CLI-Installer.pkg'
+    )
     _PKG_ID = 'com.amazon.aws.cli2'
 
     def get_aws_cmd(self):
@@ -109,8 +113,9 @@ class PkgTester(InstallerTester):
         run('sudo %s %s uninstall' % (sys.executable, UNINSTALL_MAC_PKG_PATH))
 
     def __call__(self):
-        assert os.geteuid() == 0, \
-            'Mac PKG installer must be run as root (with sudo).'
+        assert (
+            os.geteuid() == 0
+        ), 'Mac PKG installer must be run as root (with sudo).'
         super(PkgTester, self).__call__()
 
 
@@ -121,20 +126,20 @@ def main():
     }
     parser = argparse.ArgumentParser(usage=__doc__)
     parser.add_argument(
-        '--installer-type', required=True,
+        '--installer-type',
+        required=True,
         choices=installer_to_tester_cls.keys(),
-        help='The type of installer to test'
+        help='The type of installer to test',
     )
     parser.add_argument(
         '--installer-path',
         help=(
             'The path to the installer to test. By default, installers are '
             'used from the dist directory.'
-        )
+        ),
     )
     args = parser.parse_args()
-    tester = installer_to_tester_cls[args.installer_type](
-        args.installer_path)
+    tester = installer_to_tester_cls[args.installer_type](args.installer_path)
     return tester()
 
 
diff -pruN 2.23.6-1/scripts/installers/uninstall-mac-pkg 2.31.35-1/scripts/installers/uninstall-mac-pkg
--- 2.23.6-1/scripts/installers/uninstall-mac-pkg	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/installers/uninstall-mac-pkg	2025-11-12 19:17:29.000000000 +0000
@@ -1,20 +1,17 @@
 #!/usr/bin/env python
 """Script to uninstall AWS CLI V2 Mac PKG"""
+
 import argparse
-import sys
 import os
 import re
+import sys
 from datetime import datetime
-from subprocess import check_output
-from subprocess import CalledProcessError
-from subprocess import PIPE
+from subprocess import PIPE, CalledProcessError, check_output
 
 SCRIPTS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 sys.path.append(SCRIPTS_DIR)
 
-from utils import run
-from utils import BadRCError
-
+from utils import BadRCError, run
 
 _PKG_ID = 'com.amazon.aws.cli2'
 _PKGUTIL_PATTERN = re.compile(
@@ -24,9 +21,10 @@ _PKGUTIL_PATTERN = re.compile(
         r'location:\s*(?P<location>.*?)\n'
         r'install-time:\s*(?P<install_time>.*?)\n'
     ),
-    re.X
+    re.X,
 )
 
+
 def uninstall():
     assert _is_installed(), 'Could not find AWS CLI installation.'
     assert os.geteuid() == 0, 'Script must be run as root (with sudo).'
@@ -58,7 +56,8 @@ def _get_root_dir():
 
 def _get_file_list(root):
     lines = run(
-        'pkgutil --only-files --files %s /' % _PKG_ID, echo=False).split('\n')
+        'pkgutil --only-files --files %s /' % _PKG_ID, echo=False
+    ).split('\n')
     pkg_file_list = [os.path.join(root, line) for line in lines if line]
     extra_files = _read_install_metadata(root)
     return pkg_file_list + extra_files
@@ -73,19 +72,20 @@ def _read_install_metadata(root):
     metadata_path = os.path.join(root, 'aws-cli', '.install-metadata')
     if not os.path.isfile(metadata_path):
         return []
-    extra_files = open(metadata_path, 'r').read()
+    extra_files = open(metadata_path).read()
     return extra_files.split('\n')[:-1]
 
 
 def _get_dir_list(root):
     lines = run(
-        'pkgutil --only-dirs --files %s /' % _PKG_ID, echo=False).split('\n')
+        'pkgutil --only-dirs --files %s /' % _PKG_ID, echo=False
+    ).split('\n')
     # Longer directory names are listed first to force them to come before
     # their parent directories. This ensures that child directories are
     # deleted before their parents.
     return sorted(
         [os.path.join(root, line) for line in lines if line],
-        key=lambda x: -len(x)
+        key=lambda x: -len(x),
     )
 
 
@@ -114,10 +114,14 @@ def check():
     lines = run('pkgutil --pkg-info %s /' % _PKG_ID, echo=False)
     output = _PKGUTIL_PATTERN.search(lines)
     root = os.path.join(output.group('volume'), output.group('location'))
-    print('Found AWS CLI version %s installed at %s' % (
-        output.group('version'), root))
-    print('Installed on %s' % datetime.fromtimestamp(
-        int(output.group('install_time'))))
+    print(
+        'Found AWS CLI version %s installed at %s'
+        % (output.group('version'), root)
+    )
+    print(
+        'Installed on %s'
+        % datetime.fromtimestamp(int(output.group('install_time')))
+    )
     command = 'sudo %s uninstall' % os.path.abspath(__file__)
     print('To uninstall run the command:')
     print(command)
@@ -133,11 +137,12 @@ def _is_installed():
 
 
 def _warn_missing_arg(print_help):
-
     # wrap `parser.print_help()` to return 1 so any callers don't receive
     # a potentially misleading 0 exit code from a failed call.
     def missing_arg_warning():
-        print('Missing input: script requires at least one positional argument\n')
+        print(
+            'Missing input: script requires at least one positional argument\n'
+        )
         print_help()
         return 1
 
@@ -152,12 +157,11 @@ def main():
         help=(
             'Check if the AWS CLI is currently installed from a PKG '
             'installer.'
-        )
+        ),
     )
     check_parser.set_defaults(func=check)
     uninstall_parser = subparsers.add_parser(
-        'uninstall',
-        help='Uninstall the AWS CLI installed from the Mac PKG'
+        'uninstall', help='Uninstall the AWS CLI installed from the Mac PKG'
     )
     uninstall_parser.set_defaults(func=uninstall)
 
diff -pruN 2.23.6-1/scripts/make-bundle 2.31.35-1/scripts/make-bundle
--- 2.23.6-1/scripts/make-bundle	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/make-bundle	2025-11-12 19:17:29.000000000 +0000
@@ -12,15 +12,15 @@ interface for those not familiar with th
 ecosystem.
 
 """
+
 import os
-import sys
-import subprocess
 import shutil
+import subprocess
+import sys
 import tempfile
 import zipfile
 from contextlib import contextmanager
 
-
 EXTRA_RUNTIME_DEPS = [
     # Use an up to date virtualenv/pip/setuptools on > 2.6.
     ('virtualenv', '16.7.8'),
@@ -36,7 +36,8 @@ PIP_DOWNLOAD_ARGS = '--no-binary :all:'
 # we're distributing a copy that works on all supported platforms.
 CONSTRAINTS_FILE = os.path.join(
     os.path.dirname(os.path.abspath(__file__)),
-    'assets', 'constraints-bundled.txt'
+    'assets',
+    'constraints-bundled.txt',
 )
 
 
@@ -56,13 +57,15 @@ def cd(dirname):
 
 def run(cmd):
     sys.stdout.write("Running cmd: %s\n" % cmd)
-    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE)
+    p = subprocess.Popen(
+        cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+    )
     stdout, stderr = p.communicate()
     rc = p.wait()
     if p.returncode != 0:
-        raise BadRCError("Bad rc (%s) for cmd '%s': %s" % (
-            rc, cmd, stderr + stdout))
+        raise BadRCError(
+            "Bad rc (%s) for cmd '%s': %s" % (rc, cmd, stderr + stdout)
+        )
     return stdout
 
 
@@ -80,17 +83,19 @@ def create_scratch_dir():
 def download_package_tarballs(dirname, packages):
     with cd(dirname):
         for package, package_version in packages:
-            run('%s -m pip download %s==%s %s' % (
-                sys.executable, package, package_version, PIP_DOWNLOAD_ARGS
-            ))
+            run(
+                '%s -m pip download %s==%s %s'
+                % (sys.executable, package, package_version, PIP_DOWNLOAD_ARGS)
+            )
 
 
 def download_cli_deps(scratch_dir):
-    awscli_dir = os.path.dirname(
-        os.path.dirname(os.path.abspath(__file__)))
+    awscli_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     with cd(scratch_dir):
-        run('pip download -c %s %s %s' % (
-            CONSTRAINTS_FILE, PIP_DOWNLOAD_ARGS, awscli_dir))
+        run(
+            'pip download -c %s %s %s'
+            % (CONSTRAINTS_FILE, PIP_DOWNLOAD_ARGS, awscli_dir)
+        )
 
 
 def _remove_cli_zip(scratch_dir):
@@ -100,20 +105,21 @@ def _remove_cli_zip(scratch_dir):
 
 
 def add_cli_sdist(scratch_dir):
-    awscli_dir = os.path.dirname(
-        os.path.dirname(os.path.abspath(__file__)))
+    awscli_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     if os.path.exists(os.path.join(awscli_dir, 'dist')):
         shutil.rmtree(os.path.join(awscli_dir, 'dist'))
     with cd(awscli_dir):
         run('%s setup.py sdist' % sys.executable)
         filename = os.listdir('dist')[0]
-        shutil.move(os.path.join('dist', filename),
-                    os.path.join(scratch_dir, filename))
+        shutil.move(
+            os.path.join('dist', filename), os.path.join(scratch_dir, filename)
+        )
 
 
 def create_bootstrap_script(scratch_dir):
     install_script = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)), 'install')
+        os.path.dirname(os.path.abspath(__file__)), 'install'
+    )
     shutil.copy(install_script, os.path.join(scratch_dir, 'install'))
 
 
@@ -135,11 +141,13 @@ def zip_dir(scratch_dir):
 def verify_preconditions():
     # The pip version looks like:
     # 'pip 1.4.1 from ....'
-    pip_version = run(
-        '%s -m pip --version' % sys.executable).strip().split()[1]
+    pip_version = (
+        run('%s -m pip --version' % sys.executable).strip().split()[1]
+    )
     # Virtualenv version just has the version string: '1.14.5\n'
     virtualenv_version = run(
-        '%s -m virtualenv --version' % sys.executable).strip()
+        '%s -m virtualenv --version' % sys.executable
+    ).strip()
     _min_version_required('9.0.1', pip_version, 'pip')
     _min_version_required('15.1.0', virtualenv_version, 'virtualenv')
 
@@ -152,8 +160,10 @@ def _min_version_required(min_version, a
     for min_version_part, actual_version_part in zip(min_split, actual_split):
         if int(actual_version_part) >= int(min_version_part):
             return
-    raise ValueError("%s requires at least version %s, but version %s was "
-                     "found." % (name, min_version, actual_version))
+    raise ValueError(
+        "%s requires at least version %s, but version %s was "
+        "found." % (name, min_version, actual_version)
+    )
 
 
 def main():
diff -pruN 2.23.6-1/scripts/make-global-opts-documentation 2.31.35-1/scripts/make-global-opts-documentation
--- 2.23.6-1/scripts/make-global-opts-documentation	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/make-global-opts-documentation	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,13 @@ every subcommand's help docs.
 
 import os
 
-from awscli.clidriver import create_clidriver
 from awscli.clidocs import (
-    EXAMPLES_DIR, GLOBAL_OPTIONS_FILE,
-    GLOBAL_OPTIONS_SYNOPSIS_FILE, GlobalOptionsDocumenter
+    EXAMPLES_DIR,
+    GLOBAL_OPTIONS_FILE,
+    GLOBAL_OPTIONS_SYNOPSIS_FILE,
+    GlobalOptionsDocumenter,
 )
+from awscli.clidriver import create_clidriver
 
 
 def main():
diff -pruN 2.23.6-1/scripts/new-change 2.31.35-1/scripts/new-change
--- 2.23.6-1/scripts/new-change	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/new-change	2025-11-12 19:17:29.000000000 +0000
@@ -36,28 +36,28 @@ You can then use the ``scripts/render-ch
 CHANGELOG.rst file.
 
 """
+
+import argparse
+import json
 import os
+import random
 import re
-import sys
-import json
 import string
-import random
-import tempfile
 import subprocess
-import argparse
-
+import sys
+import tempfile
 
 VALID_CHARS = set(string.ascii_letters + string.digits)
 CHANGES_DIR = os.path.join(
-    os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
-    '.changes'
+    os.path.dirname(os.path.dirname(os.path.abspath(__file__))), '.changes'
 )
 TEMPLATE = """\
 # Type should be one of: feature, bugfix, enhancement, api-change
 # feature: A larger feature or change in behavior, usually resulting in a
 #          minor version bump.
 # bugfix: Fixing a bug in an existing code path.
-# enhancement: Small change to an underlying implementation detail.
+# enhancement: An incremental improvement or a change to an underlying 
+           implementation detail.
 # api-change: Changes to a modeled API.
 type: {change_type}
 
@@ -90,7 +90,8 @@ def new_changelog_entry(args):
         parsed_values = get_values_from_editor(args)
     if has_empty_values(parsed_values):
         sys.stderr.write(
-            "Empty changelog values received, skipping entry creation.\n")
+            "Empty changelog values received, skipping entry creation.\n"
+        )
         return 1
     replace_issue_references(parsed_values, args.repo)
     write_new_change(parsed_values)
@@ -98,9 +99,11 @@ def new_changelog_entry(args):
 
 
 def has_empty_values(parsed_values):
-    return not (parsed_values.get('type') and
-                parsed_values.get('category') and
-                parsed_values.get('description'))
+    return not (
+        parsed_values.get('type')
+        and parsed_values.get('category')
+        and parsed_values.get('description')
+    )
 
 
 def all_values_provided(args):
@@ -131,9 +134,11 @@ def replace_issue_references(parsed, rep
 
     def linkify(match):
         number = match.group()[1:]
-        return (
-            '`%s <https://github.com/%s/issues/%s>`__' % (
-                match.group(), repo_name, number))
+        return '`%s <https://github.com/%s/issues/%s>`__' % (
+            match.group(),
+            repo_name,
+            number,
+        )
 
     new_description = re.sub('#\d+', linkify, description)
     parsed['description'] = new_description
@@ -151,13 +156,15 @@ def write_new_change(parsed_values):
     category = parsed_values['category']
     short_summary = ''.join(filter(lambda x: x in VALID_CHARS, category))
     filename = '{type_name}-{summary}'.format(
-        type_name=parsed_values['type'],
-        summary=short_summary)
+        type_name=parsed_values['type'], summary=short_summary
+    )
     possible_filename = os.path.join(
-        dirname, '%s-%s.json' % (filename, str(random.randint(1, 100000))))
+        dirname, '%s-%s.json' % (filename, str(random.randint(1, 100000)))
+    )
     while os.path.isfile(possible_filename):
         possible_filename = os.path.join(
-            dirname, '%s-%s.json' % (filename, str(random.randint(1, 100000))))
+            dirname, '%s-%s.json' % (filename, str(random.randint(1, 100000)))
+        )
     with open(possible_filename, 'w') as f:
         f.write(json.dumps(parsed_values, indent=2) + "\n")
 
@@ -198,15 +205,21 @@ def parse_filled_in_contents(contents):
 
 def main():
     parser = argparse.ArgumentParser()
-    parser.add_argument('-t', '--type', dest='change_type',
-                        default='', choices=('bugfix', 'feature',
-                                             'enhancement', 'api-change'))
-    parser.add_argument('-c', '--category', dest='category',
-                        default='')
-    parser.add_argument('-d', '--description', dest='description',
-                        default='')
-    parser.add_argument('-r', '--repo', default='aws/aws-cli',
-                        help='Optional repo name, e.g: aws/aws-cli')
+    parser.add_argument(
+        '-t',
+        '--type',
+        dest='change_type',
+        default='',
+        choices=('bugfix', 'feature', 'enhancement', 'api-change'),
+    )
+    parser.add_argument('-c', '--category', dest='category', default='')
+    parser.add_argument('-d', '--description', dest='description', default='')
+    parser.add_argument(
+        '-r',
+        '--repo',
+        default='aws/aws-cli',
+        help='Optional repo name, e.g: aws/aws-cli',
+    )
     args = parser.parse_args()
     sys.exit(new_changelog_entry(args))
 
diff -pruN 2.23.6-1/scripts/performance/README.md 2.31.35-1/scripts/performance/README.md
--- 2.23.6-1/scripts/performance/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/README.md	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,301 @@
+# AWS CLI Performance Benchmarks
+
+This document outlines details of the AWS CLI performance benchmarks,
+including how to run benchmarks and how to add your own.
+
+## Running the Benchmarks
+
+Our benchmark executor works by running all benchmarks defined in
+`benchmarks.json`. For each benchmark defined in this JSON file, it
+runs the command for a configurable number of iterations (default: 1)
+and benchmarks metrics such as memory usage, CPU utilization, and
+timings.
+
+The benchmark executor also stubs an HTTP client with mock responses
+defined in `benchmarks.json`. This ensures the timings produced in
+the results reflect only the AWS CLI and **not** external factors
+such as service latency or network throughput.
+
+### Example
+
+The following example command runs the benchmarks defined in `benchmarks.json`,
+and executes each command 2 times.
+
+`./run-benchmarks --num-iterations 2`
+
+An example output for this command is shown below.
+
+```json
+{
+   "results":[
+      {
+         "name":"s3.cp.upload",
+         "dimensions":[
+            {
+               "FileSize":"32MB"
+            },
+            {
+               "S3TransferClient":"Classic"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":0.2531106472015381,
+               "max_memory":76791808.0,
+               "max_cpu":5.0,
+               "p50_memory":51412992.0,
+               "p95_memory":75235328.0,
+               "p50_cpu":1.5,
+               "p95_cpu":2.4,
+               "first_client_invocation_time":0.24789667129516602
+            },
+            {
+               "total_time":0.17595314979553223,
+               "max_memory":76939264.0,
+               "max_cpu":6.2,
+               "p50_memory":52297728.0,
+               "p95_memory":75710464.0,
+               "p50_cpu":2.1,
+               "p95_cpu":2.5,
+               "first_client_invocation_time":0.17173004150390625
+            }
+         ]
+      },
+      {
+         "name":"s3.cp.upload",
+         "dimensions":[
+            {
+               "FileSize":"32MB"
+            },
+            {
+               "S3TransferClient":"CRT"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":0.7724411487579346,
+               "max_memory":81002496.0,
+               "max_cpu":4.1,
+               "p50_memory":78479360.0,
+               "p95_memory":80822272.0,
+               "p50_cpu":0.0,
+               "p95_cpu":2.4,
+               "first_client_invocation_time":0.17360806465148926
+            },
+            {
+               "total_time":0.6735439300537109,
+               "max_memory":80658432.0,
+               "max_cpu":5.2,
+               "p50_memory":78495744.0,
+               "p95_memory":80412672.0,
+               "p50_cpu":0.0,
+               "p95_cpu":2.4,
+               "first_client_invocation_time":0.17362713813781738
+            }
+         ]
+      },
+      {
+         "name":"s3.mv.upload",
+         "dimensions":[
+            {
+               "FileSize":"32MB"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":0.17440271377563477,
+               "max_memory":76972032.0,
+               "max_cpu":4.6,
+               "p50_memory":52166656.0,
+               "p95_memory":75776000.0,
+               "p50_cpu":2.1,
+               "p95_cpu":2.5,
+               "first_client_invocation_time":0.16981887817382812
+            },
+            {
+               "total_time":0.17231082916259766,
+               "max_memory":75825152.0,
+               "max_cpu":6.1,
+               "p50_memory":52199424.0,
+               "p95_memory":74842112.0,
+               "p50_cpu":2.1,
+               "p95_cpu":2.5,
+               "first_client_invocation_time":0.16803598403930664
+            }
+         ]
+      },
+      {
+         "name":"s3.mv.download",
+         "dimensions":[
+            {
+               "FileSize":"32MB"
+            },
+            {
+               "S3TransferClient":"Classic"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":0.17304229736328125,
+               "max_memory":76152832.0,
+               "max_cpu":4.0,
+               "p50_memory":52674560.0,
+               "p95_memory":74907648.0,
+               "p50_cpu":2.1,
+               "p95_cpu":2.4,
+               "first_client_invocation_time":0.16739511489868164
+            },
+            {
+               "total_time":0.16962409019470215,
+               "max_memory":76693504.0,
+               "max_cpu":4.9,
+               "p50_memory":52314112.0,
+               "p95_memory":75431936.0,
+               "p50_cpu":2.1,
+               "p95_cpu":2.6,
+               "first_client_invocation_time":0.16400408744812012
+            }
+         ]
+      },
+      {
+         "name":"s3.sync.upload",
+         "dimensions":[
+            {
+               "FileCount":"5,000"
+            },
+            {
+               "FileSize":"4KB"
+            },
+            {
+               "S3TransferClient":"Classic"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":11.370934963226318,
+               "max_memory":134578176.0,
+               "max_cpu":20.7,
+               "p50_memory":106397696.0,
+               "p95_memory":132235264.0,
+               "p50_cpu":2.4,
+               "p95_cpu":2.7,
+               "first_client_invocation_time":0.6362888813018799
+            },
+            {
+               "total_time":12.029011964797974,
+               "max_memory":134676480.0,
+               "max_cpu":18.6,
+               "p50_memory":105955328.0,
+               "p95_memory":131727360.0,
+               "p50_cpu":2.4,
+               "p95_cpu":2.7,
+               "first_client_invocation_time":0.6395571231842041
+            }
+         ]
+      },
+      {
+         "name":"s3.sync.upload",
+         "dimensions":[
+            {
+               "FileCount":"5,000"
+            },
+            {
+               "FileSize":"4KB"
+            },
+            {
+               "S3TransferClient":"CRT"
+            }
+         ],
+         "measurements":[
+            {
+               "total_time":90.28388690948486,
+               "max_memory":188809216.0,
+               "max_cpu":17.9,
+               "p50_memory":144375808.0,
+               "p95_memory":188792832.0,
+               "p50_cpu":0.0,
+               "p95_cpu":3.4,
+               "first_client_invocation_time":0.656865119934082
+            },
+            {
+               "total_time":84.99997591972351,
+               "max_memory":190808064.0,
+               "max_cpu":20.7,
+               "p50_memory":143917056.0,
+               "p95_memory":186728448.0,
+               "p50_cpu":0.0,
+               "p95_cpu":3.5,
+               "first_client_invocation_time":0.7549021244049072
+            }
+         ]
+      }
+   ]
+}
+```
+
+## Defining Your own Benchmarks for Local Performance Testing
+
+To create your own benchmark definitions, create a file on your machine containing
+a JSON-formatted list of benchmark definitions. Each benchmark definition supports
+the keys below. Each key is required unless specified otherwise.
+
+- `name` (string): The name of the benchmark.
+- `command` (list): The AWS CLI command to benchmark, including arguments.
+    - Each element of the list is a string component of the command.
+    - Example value: `["s3", "cp", "test_file", "s3://bucket/test_file", "--quiet"]`.
+- `dimensions` (list) **(optional)**: Used to specify additional dimensions for
+interpreting this metric.
+  - Each element in the list is an object with the following keys:
+    - `name` (string): Name of the dimensions
+    - `value` (string): Value of the dimension
+- `environment` (object) **(optional)**: Specifies settings for the environment to run
+the command in.
+  - The environment object supports the following keys:
+    - `file_literals` (list) **(optional)**: Specifies files that must be
+created before executing the benchmark. The files created will contain
+the specified contents.
+      - Each element is an object with the following keys:
+        - `name` (string): Name of the file to create
+        - `content` (string): The contents of the file.
+        - `mode` (string) **(optional)**: The write mode to use for writing the
+file contents.
+          - Default: `w`
+    - `files` (list) **(optional)**: Specifies the files that must be
+created before executing the benchmark. The files created will be filled with
+null bytes to achieve the specified size.
+      - Each element is an object with the following keys:
+        - `name` (string): Name of the file to create
+        - `size` (int): The size of the file to create in bytes.
+    - `file_dirs` (list) **(optional)**: Specifies the directories that must
+be created before executing the benchmark. The directories will be created
+and filled with the specified number of files, each of which will be filled
+with null bytes to achieve the specified file size.
+      - Each element is an object with the following keys:
+        - `name` (string): Name of the directory
+        - `file_count` (int): The number of files to create in the directory.
+        - `file_size` (int): The size of each file in the directory, in bytes.
+    - `config` (string) **(optional)**: The contents of the AWS config
+file to use for the benchmark execution.
+      - Default: `"[default]"`.
+      - Example value: `"[default]\ns3 =\n preferred_transfer_client = crt"`
+- `responses` (list) **(optional)**: A list of HTTP responses to stub from
+the service for each request made during command execution.
+  - Default: `[{{"headers": {}, "body": ""}]`
+  - Each element of the list is an object with the following keys:
+    - `status_code` (int) **(optional)**: The status code of the response.
+      - Default: `200`
+    - `headers` (object) **(optional)**: Used to specify the HTTP headers of
+the response. Each key-value pair corresponds to a single header name (key)
+and its value.
+      - Default: `{}`
+    - `body` (string | object) **(optional)**: The raw HTTP response body.
+      - Default: `""`
+      - If body is an object, it supports the following keys:
+        - `file` (string): The name of a file whose contents will be used as
+the response body. This can refer to files created under the `environment`
+definition.
+    - `instances` (int) **(optional)**: The total number of times to stub
+this response; this prevents the need to repeat the same response many times.
+      - Default: 1
+      - This is useful for commands such as `aws s3 sync`, that may execute many
+      HTTP requests with similar responses.
diff -pruN 2.23.6-1/scripts/performance/__init__.py 2.31.35-1/scripts/performance/__init__.py
--- 2.23.6-1/scripts/performance/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,33 @@
+class BaseBenchmarkSuite:
+    """
+    Base class for performance test suites. This class is used by
+    the performance test runner to gather, setup, and clean up
+    performance test cases. This class should be extended
+    to create performance test cases that can be run by the test runner.
+    """
+
+    def __init__(self):
+        self.name = self.__class__.__name__
+    def get_test_cases(self, args):
+        """
+        Returns a list of performance test cases. Each element of the returned
+        list is a generator that must generate at least args.num_iterations
+        definitions for the test case.
+        """
+        raise NotImplementedError()
+
+    def begin_iteration(self, case, workspace_path, assets_path, iteration):
+        """
+        Called before each iteration of benchmarking the specified performance
+        test case. This method should handle all necessary resource creation
+        and environment setup needed for the test case to execute.
+        """
+        pass
+
+    def end_iteration(self, case, iteration):
+        """
+        Called after each iteration of benchmarking the specified performance
+        test case. This method should handle all necessary teardown and cleanup
+        of all resources creating in begin_iteration.
+        """
+        pass
diff -pruN 2.23.6-1/scripts/performance/benchmark-cp 2.31.35-1/scripts/performance/benchmark-cp
--- 2.23.6-1/scripts/performance/benchmark-cp	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/performance/benchmark-cp	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-from benchmark_utils import summarize, clean
-from benchmark_utils import get_default_argparser, get_transfer_command
-from benchmark_utils import create_random_subfolder, benchmark_command
-
-
-def benchmark_cp(args):
-    destination = args.destination
-    if args.recursive:
-        destination = create_random_subfolder(destination)
-    command = 'cp %s %s' % (args.source, destination)
-    command = get_transfer_command(command, args.recursive, args.quiet)
-
-    def cleanup():
-        if not args.no_cleanup:
-            clean(destination, args.recursive)
-
-    benchmark_command(
-        command, args.benchmark_script,  args.summarize_script,
-        args.result_dir, args.num_iterations, args.dry_run,
-        cleanup=cleanup
-    )
-
-
-if __name__ == "__main__":
-    parser = get_default_argparser()
-    parser.add_argument(
-        '-s', '--source', required=True,
-        help='A local path or s3 path.'
-    )
-    parser.add_argument(
-        '-d', '--destination', required=True,
-        help='A local path or s3 path. A directory will be created in this '
-             'location to copy to in the case of a recursive transfer.'
-    )
-    benchmark_cp(parser.parse_args())
diff -pruN 2.23.6-1/scripts/performance/benchmark-mv 2.31.35-1/scripts/performance/benchmark-mv
--- 2.23.6-1/scripts/performance/benchmark-mv	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/performance/benchmark-mv	1970-01-01 00:00:00.000000000 +0000
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-from benchmark_utils import backup, copy, clean, get_default_argparser
-from benchmark_utils import create_random_subfolder, benchmark_command
-from benchmark_utils import get_transfer_command
-
-
-def benchmark_mv(args):
-    destination = args.destination
-    if args.recursive:
-        destination = create_random_subfolder(destination)
-    command = 'mv %s %s' % (args.source, destination)
-    command = get_transfer_command(command, args.recursive, args.quiet)
-    backup_path = backup(args.source, args.recursive)
-
-    def cleanup():
-        if not args.no_cleanup:
-            clean(destination, args.recursive)
-        clean(backup_path, args.recursive)
-
-    def upkeep():
-        clean(args.source, args.recursive)
-        copy(backup_path, args.source, args.recursive)
-
-    benchmark_command(
-        command, args.benchmark_script,  args.summarize_script,
-        args.result_dir, args.num_iterations, args.dry_run,
-        upkeep=upkeep,
-        cleanup=cleanup
-    )
-
-
-if __name__ == "__main__":
-    parser = get_default_argparser()
-    parser.add_argument(
-        '-s', '--source', required=True,
-        help='A local path or s3 path.'
-    )
-    parser.add_argument(
-        '-d', '--destination', required=True,
-        help='A local path or s3 path. A directory will be created in this '
-             'location to move to in the case of a recursive transfer.'
-    )
-    benchmark_mv(parser.parse_args())
diff -pruN 2.23.6-1/scripts/performance/benchmark-rm 2.31.35-1/scripts/performance/benchmark-rm
--- 2.23.6-1/scripts/performance/benchmark-rm	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/performance/benchmark-rm	1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-from benchmark_utils import benchmark_command, get_transfer_command
-from benchmark_utils import backup, copy, clean, get_default_argparser
-
-
-def benchmark_rm(args):
-    command = get_transfer_command(
-        'rm %s' % args.target, args.recursive, args.quiet)
-    backup_path = backup(args.target, args.recursive)
-
-    benchmark_command(
-        command, args.benchmark_script,  args.summarize_script,
-        args.result_dir, args.num_iterations, args.dry_run,
-        upkeep=lambda: copy(backup_path, args.target, args.recursive),
-        cleanup=lambda: clean(backup_path, args.recursive)
-    )
-
-
-if __name__ == "__main__":
-    parser = get_default_argparser()
-    parser.add_argument('-t', '--target', required=True, help='An S3 path.')
-    benchmark_rm(parser.parse_args())
diff -pruN 2.23.6-1/scripts/performance/benchmark_utils.py 2.31.35-1/scripts/performance/benchmark_utils.py
--- 2.23.6-1/scripts/performance/benchmark_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/performance/benchmark_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,251 +1,448 @@
-import s3transfer
+import json
+import math
 import os
-import subprocess
-import uuid
 import shutil
-import argparse
-import tempfile
+import sys
+import time
 
+import psutil
 
-def summarize(script, result_dir, summary_dir):
-    """Run the given summary script on every file in the given directory.
+from awscli.clidriver import AWSCLIEntryPoint, create_clidriver
+from scripts.performance import BaseBenchmarkSuite
+from scripts.performance.simple_stubbed_tests import (
+    JSONStubbedBenchmarkSuite,
+)
 
-    :param script: A summarization script that takes a list of csv files.
-    :param result_dir: A directory containing csv performance result files.
-    :param summary_dir: The directory to put the summary file in.
-    """
-    summarize_args = [script]
-    for f in os.listdir(result_dir):
-        path = os.path.join(result_dir, f)
-        if os.path.isfile(path):
-            summarize_args.append(path)
-
-    with open(os.path.join(summary_dir, 'summary.txt'), 'wb') as f:
-        subprocess.check_call(summarize_args, stdout=f)
-    with open(os.path.join(summary_dir, 'summary.json'), 'wb') as f:
-        summarize_args.extend(['--output-format', 'json'])
-        subprocess.check_call(summarize_args, stdout=f)
-
-
-def _get_s3transfer_performance_script(script_name):
-    """Retrieves an s3transfer performance script if available."""
-    s3transfer_directory = os.path.dirname(s3transfer.__file__)
-    s3transfer_directory = os.path.dirname(s3transfer_directory)
-    scripts_directory = 'scripts/performance'
-    scripts_directory = os.path.join(s3transfer_directory, scripts_directory)
-    script = os.path.join(scripts_directory, script_name)
-
-    if os.path.isfile(script):
-        return script
-    else:
-        return None
-
-
-def get_benchmark_script():
-    return _get_s3transfer_performance_script('benchmark')
-
-
-def get_summarize_script():
-    return _get_s3transfer_performance_script('summarize')
-
-
-def backup(source, recursive):
-    """Backup a given source to a temporary location.
-
-    :type source: str
-    :param source: A local path or s3 path to backup.
-
-    :type recursive: bool
-    :param recursive: if True, the source will be treated as a directory.
-    """
-    if source[:5] == 's3://':
-        parts = source.split('/')
-        parts.insert(3, str(uuid.uuid4()))
-        backup_path = '/'.join(parts)
-    else:
-        name = os.path.split(source)[-1]
-        temp_dir = tempfile.mkdtemp()
-        backup_path = os.path.join(temp_dir, name)
-
-    copy(source, backup_path, recursive)
-    return backup_path
-
-
-def copy(source, destination, recursive):
-    """Copy files from one location to another.
-
-    The source and destination must both be s3 paths or both be local paths.
-
-    :type source: str
-    :param source: A local path or s3 path to backup.
-
-    :type destination: str
-    :param destination: A local path or s3 path to backup the source to.
-
-    :type recursive: bool
-    :param recursive: if True, the source will be treated as a directory.
-    """
-    if 's3://' in [source[:5], destination[:5]]:
-        cp_args = ['aws', 's3', 'cp', source, destination, '--quiet']
-        if recursive:
-            cp_args.append('--recursive')
-        subprocess.check_call(cp_args)
-        return
-
-    if recursive:
-        shutil.copytree(source, destination)
-    else:
-        shutil.copy(source, destination)
-
-
-def clean(destination, recursive):
-    """Delete a file or directory either locally or on S3."""
-    if destination[:5] == 's3://':
-        rm_args = ['aws', 's3', 'rm', '--quiet', destination]
-        if recursive:
-            rm_args.append('--recursive')
-        subprocess.check_call(rm_args)
-    else:
-        if recursive:
-            shutil.rmtree(destination)
-        else:
-            os.remove(destination)
-
-
-def create_random_subfolder(destination):
-    """Create a random subdirectory in a given directory."""
-    folder_name = str(uuid.uuid4())
-    if destination.startswith('s3://'):
-        parts = destination.split('/')
-        parts.append(folder_name)
-        return '/'.join(parts)
-    else:
-        parts = list(os.path.split(destination))
-        parts.append(folder_name)
-        path = os.path.join(*parts)
-        os.makedirs(path)
-        return path
-
-
-def get_transfer_command(command, recursive, quiet):
-    """Get a full cli transfer command.
-
-    Performs common transformations, e.g. adding --quiet
-    """
-    cli_command = 'aws s3 ' + command
-
-    if recursive:
-        cli_command += ' --recursive'
-
-    if quiet:
-        cli_command += ' --quiet'
-    else:
-        print(cli_command)
-
-    return cli_command
-
-
-def benchmark_command(command, benchmark_script, summarize_script,
-                      output_dir, num_iterations, dry_run, upkeep=None,
-                      cleanup=None):
-    """Benchmark several runs of a long-running command.
-
-    :type command: str
-    :param command: The full aws cli command to benchmark
-
-    :type benchmark_script: str
-    :param benchmark_script: A benchmark script that takes a command to run
-        and outputs performance data to a file. This should be from s3transfer.
-
-    :type summarize_script: str
-    :param summarize_script:  A summarization script that the output of the
-        benchmark script. This should be from s3transfer.
-
-    :type output_dir: str
-    :param output_dir: The directory to output performance results to.
-
-    :type num_iterations: int
-    :param num_iterations: The number of times to run the benchmark on the
-        command.
-
-    :type dry_run: bool
-    :param dry_run: Whether or not to actually run the benchmarks.
-
-    :type upkeep: function that takes no arguments
-    :param upkeep: A function that is run after every iteration of the
-        benchmark process. This should be used for upkeep, such as restoring
-        files that were deleted as part of the command executing.
-
-    :type cleanup: function that takes no arguments
-    :param cleanup: A function that is run at the end of the benchmark
-        process or if there are any problems during the benchmark process.
-        It should be uses for the final cleanup, such as deleting files that
-        were created at some destination.
-    """
-    performance_dir = os.path.join(output_dir, 'performance')
-    if os.path.exists(performance_dir):
-        shutil.rmtree(performance_dir)
-    os.makedirs(performance_dir)
-
-    try:
-        for i in range(num_iterations):
-            out_file = 'performance%s.csv' % i
-            out_file = os.path.join(performance_dir, out_file)
-            benchmark_args = [
-                benchmark_script, command, '--output-file', out_file
-            ]
-            if not dry_run:
-                subprocess.check_call(benchmark_args)
-                if upkeep is not None:
-                    upkeep()
-
-        if not dry_run:
-            summarize(summarize_script, performance_dir, output_dir)
-    finally:
-        if not dry_run and cleanup is not None:
-            cleanup()
-
-
-def get_default_argparser():
-    """Get an ArgumentParser with all the base benchmark arguments added in."""
-    parser = argparse.ArgumentParser()
-    parser.add_argument(
-        '--no-cleanup', action='store_true', default=False,
-        help='Do not remove the destination after the tests complete.'
-    )
-    parser.add_argument(
-        '--recursive', action='store_true', default=False,
-        help='Indicates that this is a recursive transfer.'
-    )
-    benchmark_script = get_benchmark_script()
-    parser.add_argument(
-        '--benchmark-script', default=benchmark_script,
-        required=benchmark_script is None,
-        help=('The benchmark script to run the commands with. This should be '
-              'from s3transfer.')
-    )
-    summarize_script = get_summarize_script()
-    parser.add_argument(
-        '--summarize-script', default=summarize_script,
-        required=summarize_script is None,
-        help=('The summarize script to run the commands with. This should be '
-              'from s3transfer.')
-    )
-    parser.add_argument(
-        '-o', '--result-dir', default='results',
-        help='The directory to output performance results to. Existing '
-             'results will be deleted.'
-    )
-    parser.add_argument(
-        '--dry-run', default=False, action='store_true',
-        help='If set, commands will only be printed out, not executed.'
-    )
-    parser.add_argument(
-        '--quiet', default=False, action='store_true',
-        help='If set, output is suppressed.'
-    )
-    parser.add_argument(
-        '-n', '--num-iterations', default=1, type=int,
-        help='The number of times to run the test.'
-    )
-    return parser
+
+class Metric:
+    def __init__(self, description, unit, value):
+        self.description = description
+        self.unit = unit
+        self.value = value
+
+
+class BenchmarkResultsSerializer:
+    """
+    A class that serializes the execution results of a performance test case.
+    """
+
+    def __init__(self):
+        self._summarizer = Summarizer()
+        self._benchmark_results = {}
+
+    def add_execution_results(self, case, samples, execution_results):
+        """
+        Store a performance test case's execution result.
+        """
+        summarized_results = self._summarizer.summarize(
+            samples, execution_results
+        )
+        for metric, val in summarized_results.items():
+            key = f'{case["name"]}.{metric}'
+            if key not in self._benchmark_results:
+                self._benchmark_results[key] = {
+                    'name': key,
+                    'description': val.description,
+                    'unit': val.unit,
+                    'dimensions': case.get('dimensions', []),
+                    'measurements': [],
+                }
+            self._benchmark_results[key]['measurements'].append(val.value)
+
+    def get_processed_results(self):
+        """
+        Returns a list of dictionaries representing all stored execution
+        results. The key-value pairs will be converted to JSON and displayed as part
+        of the final output.
+        """
+        return list(self._benchmark_results.values())
+
+    def reset(self):
+        """
+        Resets the stored list of execution results.
+        """
+        self._benchmark_results.clear()
+
+
+class Summarizer:
+    DATA_INDEX_IN_ROW = {'time': 0, 'memory': 1, 'cpu': 2}
+
+    def __init__(self):
+        self._start_time = None
+        self._end_time = None
+        self._samples = []
+        self._sums = {
+            'memory': 0.0,
+            'cpu': 0.0,
+        }
+
+    def summarize(self, samples, worker_results):
+        """
+        Processes benchmark data from samples and the output of the benchmark
+        worker.
+        """
+        self._samples = samples
+        self._validate_samples(samples)
+        for idx, sample in enumerate(samples):
+            # If the sample is the first one, collect the start time.
+            if idx == 0:
+                self._start_time = self._get_time(sample)
+            self.process_data_sample(sample)
+        self._end_time = self._get_time(samples[-1])
+        metrics = self._finalize_processed_data_for_file(
+            samples, worker_results
+        )
+        return metrics
+
+    def _validate_samples(self, samples):
+        if not samples:
+            raise RuntimeError(
+                'Benchmark samples could not be processed. '
+                'The samples list is empty'
+            )
+
+    def process_data_sample(self, sample):
+        self._add_to_sums('memory', sample['memory'])
+        self._add_to_sums('cpu', sample['cpu'])
+
+    def _finalize_processed_data_for_file(self, samples, worker_results):
+        # compute percentiles
+        self._samples.sort(key=self._get_memory)
+        memory_p50 = self._compute_metric_percentile(50, 'memory')
+        memory_p95 = self._compute_metric_percentile(95, 'memory')
+        self._samples.sort(key=self._get_cpu)
+        cpu_p50 = self._compute_metric_percentile(50, 'cpu')
+        cpu_p95 = self._compute_metric_percentile(95, 'cpu')
+        max_memory = max(samples, key=self._get_memory)['memory']
+        max_cpu = max(samples, key=self._get_cpu)['cpu']
+        # format computed statistics
+        metrics = {
+            'mean.run.memory': Metric(
+                'Mean memory usage of a single command execution.',
+                'Bytes',
+                self._sums['memory'] / len(samples),
+            ),
+            'mean.run.cpu': Metric(
+                'Mean CPU usage of a single command execution.',
+                'Percent',
+                self._sums['cpu'] / len(samples),
+            ),
+            'peak.run.memory': Metric(
+                'Peak memory usage of a single command execution.',
+                'Bytes',
+                max_memory,
+            ),
+            'peak.run.cpu': Metric(
+                'Peak CPU usage of a single command execution.',
+                'Percent',
+                max_cpu,
+            ),
+            'p50.run.memory': Metric(
+                'p50 memory usage of a single command execution.',
+                'Bytes',
+                memory_p50,
+            ),
+            'p95.run.memory': Metric(
+                'p95 memory usage of a single command execution.',
+                'Bytes',
+                memory_p95,
+            ),
+            'p50.run.cpu': Metric(
+                'p50 CPU usage of a single command execution.',
+                'Percent',
+                cpu_p50,
+            ),
+            'p95.run.cpu': Metric(
+                'p95 CPU usage of a single command execution.',
+                'Percent',
+                cpu_p95,
+            ),
+            'run.time': Metric(
+                'Total running time of the Python process executing the CLI command.',
+                'Seconds',
+                worker_results['end_time'] - worker_results['start_time'],
+            ),
+            'pre.marshal.time': Metric(
+                'Elapsed time from the start of the Python process until just '
+                'before the HTTP request is created.',
+                'Seconds',
+                worker_results['first_client_invocation_time']
+                - worker_results['start_time'],
+            ),
+        }
+        # reset data state
+        self._samples.clear()
+        self._sums = self._sums.fromkeys(self._sums, 0.0)
+        return metrics
+
+    def _compute_metric_percentile(self, percentile, name):
+        num_samples = len(self._samples)
+        p_idx = math.ceil(percentile * num_samples / 100) - 1
+        return self._samples[p_idx][name]
+
+    def _get_time(self, sample):
+        return sample['time']
+
+    def _get_memory(self, sample):
+        return sample['memory']
+
+    def _get_cpu(self, sample):
+        return sample['cpu'] / 100
+
+    def _add_to_sums(self, name, data_point):
+        self._sums[name] += data_point
+
+
+class ProcessBenchmarker:
+    """
+    Periodically samples CPU and memory usage of a process given its pid.
+    These measurements are sampled until the process is no longer running.
+    """
+
+    def benchmark_process(self, pid, data_interval):
+        parent_pid = os.getpid()
+        try:
+            # Benchmark the process where the script is being run.
+            return self._run_benchmark(pid, data_interval)
+        except KeyboardInterrupt:
+            # If there is an interrupt, then try to clean everything up.
+            proc = psutil.Process(parent_pid)
+            procs = proc.children(recursive=True)
+
+            for child in procs:
+                child.terminate()
+
+            gone, alive = psutil.wait_procs(procs, timeout=1)
+            for child in alive:
+                child.kill()
+            raise
+
+    def _run_benchmark(self, pid, data_interval):
+        process_to_measure = psutil.Process(pid)
+        samples = []
+
+        while process_to_measure.is_running():
+            if process_to_measure.status() == psutil.STATUS_ZOMBIE:
+                break
+            time.sleep(data_interval)
+            try:
+                # Collect the memory and cpu usage.
+                memory_used = process_to_measure.memory_info().rss
+                cpu_percent = process_to_measure.cpu_percent()
+            except (
+                psutil.AccessDenied,
+                psutil.ZombieProcess,
+                psutil.NoSuchProcess,
+            ):
+                # Trying to get process information from a closed or
+                # zombie process will result in corresponding exceptions.
+                break
+            # Determine the lapsed time for bookkeeping
+            current_time = time.time()
+            samples.append(
+                {
+                    "time": current_time,
+                    "memory": memory_used,
+                    "cpu": cpu_percent,
+                }
+            )
+        return samples
+
+
+class BenchmarkHarness:
+    BENCHMARK_SUITES = [JSONStubbedBenchmarkSuite]
+
+    """
+    Orchestrates running benchmarks in isolated, configurable environments.
+    """
+
+    def __init__(self, results_processor=BenchmarkResultsSerializer()):
+        self._results_processor = results_processor
+
+    def _run_command_with_metric_hooks(self, cmd, out_file):
+        """
+        Runs a CLI command and logs CLI-specific metrics to a file.
+        """
+        first_client_invocation_time = None
+        start_time = time.time()
+        driver = create_clidriver()
+        event_emitter = driver.session.get_component('event_emitter')
+
+        def _log_invocation_time(params, request_signer, model, **kwargs):
+            nonlocal first_client_invocation_time
+            if first_client_invocation_time is None:
+                first_client_invocation_time = time.time()
+
+        event_emitter.register_last(
+            'before-call',
+            _log_invocation_time,
+            'benchmarks.log-invocation-time',
+        )
+
+        rc = AWSCLIEntryPoint(driver).main(cmd)
+        end_time = time.time()
+
+        # write the collected metrics to a file
+        with open(out_file, 'w') as metrics_f:
+            metrics_f.write(
+                json.dumps(
+                    {
+                        'return_code': rc,
+                        'start_time': start_time,
+                        'end_time': end_time,
+                        'first_client_invocation_time': first_client_invocation_time,
+                    }
+                )
+            )
+
+    def _run_isolated_benchmark(
+        self,
+        result_dir,
+        iteration,
+        benchmark,
+        suite,
+        process_benchmarker,
+        args,
+    ):
+        """
+        Runs a single iteration of one benchmark execution. Includes setting up
+        the environment, running the benchmarked execution, formatting
+        the results, and cleaning up the environment.
+        """
+        assets_path = os.path.join(result_dir, 'assets')
+        metrics_path = os.path.join(assets_path, 'metrics.json')
+        child_output_path = os.path.join(assets_path, 'output.txt')
+        child_err_path = os.path.join(assets_path, 'err.txt')
+
+        # setup for iteration of benchmark
+        suite.begin_iteration(benchmark, result_dir, assets_path, iteration)
+        os.chdir(result_dir)
+
+        # fork a child process to run the command on.
+        pid = os.fork()
+
+        try:
+            if pid == 0:
+                with (
+                    open(child_output_path, 'w') as out,
+                    open(child_err_path, 'w') as err,
+                ):
+                    if not args.debug_dir:
+                        # redirect standard output of the child process to a file
+                        os.dup2(out.fileno(), sys.stdout.fileno())
+                        os.dup2(err.fileno(), sys.stderr.fileno())
+                    else:
+                        with open(
+                            os.path.abspath(
+                                os.path.join(
+                                    args.debug_dir,
+                                    f'{benchmark["name"]}-{iteration}.txt',
+                                )
+                            ),
+                            'w',
+                        ) as f:
+                            with open(
+                                os.path.abspath(
+                                    os.path.join(
+                                        args.debug_dir,
+                                        f'{benchmark["name"]}-{iteration}-err.txt',
+                                    )
+                                ),
+                                'w',
+                            ) as f_err:
+                                os.dup2(f.fileno(), sys.stdout.fileno())
+                                os.dup2(f_err.fileno(), sys.stderr.fileno())
+                    # execute command on child process
+                    self._run_command_with_metric_hooks(
+                        benchmark['command'], metrics_path
+                    )
+                    # terminate the child process
+                    os._exit(0)
+
+            # benchmark child process from parent process until child becomes zombie
+            samples = process_benchmarker.benchmark_process(
+                pid, args.data_interval
+            )
+
+            # reap the child process and error on unsuccessful return codes
+            _, status = os.waitpid(pid, 0)
+            if status != 0:
+                raise RuntimeError(
+                    f'Child process execution failed: status code {status}'
+                )
+
+            # load child-collected metrics
+            if not os.path.exists(metrics_path):
+                raise RuntimeError(
+                    'Child process execution failed: output file not found.'
+                )
+            worker_results = json.load(open(metrics_path))
+
+            # raise error if CLI execution unsuccessful.
+            # this is different from the process return code checked above,
+            # because the process can succeed while the CLI execution failed
+            if (rc := worker_results['return_code']) != 0:
+                with open(child_err_path) as err:
+                    raise RuntimeError(
+                        f'CLI execution failed: return code {rc}.\n'
+                        f'Error: {err.read()}'
+                    )
+
+            # summarize benchmark results and process summary
+            return samples, worker_results
+        finally:
+            suite.end_iteration(benchmark, iteration)
+            shutil.rmtree(result_dir, ignore_errors=True)
+            os.makedirs(result_dir, 0o777)
+
+    def get_test_suites(self, args):
+        """
+        Returns all test suites that should be executed by the default
+        performance test runner.
+        """
+        return [suite() for suite in BenchmarkHarness.BENCHMARK_SUITES]
+
+    def run_benchmarks(self, cases, args):
+        """
+        Orchestrates benchmarking via the supplied list of performance test
+        cases.
+        """
+        summaries = {'results': []}
+        result_dir = args.result_dir
+        process_benchmarker = ProcessBenchmarker()
+
+        if os.path.exists(result_dir):
+            shutil.rmtree(result_dir)
+        os.makedirs(result_dir, 0o777)
+        try:
+            for suite, case in cases:
+                for idx in range(args.num_iterations):
+                    for cmd in case:
+                        samples, execution_results = (
+                            self._run_isolated_benchmark(
+                                result_dir,
+                                idx,
+                                cmd,
+                                suite,
+                                process_benchmarker,
+                                args,
+                            )
+                        )
+                        self._results_processor.add_execution_results(
+                            cmd, samples, execution_results
+                        )
+                summaries['results'].extend(
+                    self._results_processor.get_processed_results()
+                )
+                self._results_processor.reset()
+        finally:
+            # final cleanup
+            shutil.rmtree(result_dir, ignore_errors=True)
+        print(json.dumps(summaries, indent=2))
+
+    def run_benchmark_suite(self, suite: BaseBenchmarkSuite, args):
+        """
+        Orchestrates benchmarking a particular benchmark suite.
+        """
+        sequence_generators = suite.get_test_cases(args)
+        self.run_benchmarks(sequence_generators, args)
diff -pruN 2.23.6-1/scripts/performance/benchmarks.json 2.31.35-1/scripts/performance/benchmarks.json
--- 2.23.6-1/scripts/performance/benchmarks.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/benchmarks.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,307 @@
+[
+  {
+    "name": "s3.cp.upload",
+    "command": ["s3", "cp", "test_file", "s3://bucket/test_file", "--quiet"],
+    "dimensions": [
+      {"name": "FileSize", "value": "32MB"},
+      {"name": "S3TransferClient", "value": "Classic"}
+    ],
+    "environment": {
+      "files": [
+        {
+          "name": "test_file",
+          "size": 3.2e7
+        }
+      ],
+      "config": "[default]\ns3 =\n preferred_transfer_client = classic"
+    },
+    "responses": [
+      {
+        "body": "<InitiateMultipartUploadResult><Bucket>bucket</Bucket>  <Key>key</Key>  <UploadId>upload-id</UploadId></InitiateMultipartUploadResult>"
+      },
+      {
+        "headers": {"ETag": "etag"},
+        "instances": 4
+      },
+      {
+        "body": "<CompleteMultipartUploadResult><Bucket>bucket</Bucket>  <Key>key</Key>  <ETag>etag-123</ETag></CompleteMultipartUploadResult>"
+      }
+    ]
+  },
+  {
+    "name": "s3.mv.upload",
+    "command": ["s3", "mv", "test_file", "s3://bucket/test_file", "--quiet"],
+    "dimensions": [
+      {"name": "FileSize", "value": "32MB"},
+      {"name": "S3TransferClient", "value": "Classic"}
+    ],
+    "environment": {
+      "files": [
+        {
+          "name": "test_file",
+          "size": 3.2e7
+        }
+      ]
+    },
+    "responses": [
+      {
+        "headers": {},
+        "body": "<InitiateMultipartUploadResult><Bucket>bucket</Bucket>  <Key>key</Key>  <UploadId>upload-id</UploadId></InitiateMultipartUploadResult>"
+      },
+      {
+        "headers": {"ETag":  "etag"},
+        "instances": 4
+      },
+      {
+        "headers": {},
+        "body": "<CompleteMultipartUploadResult><Bucket>bucket</Bucket>  <Key>key</Key>  <ETag>etag-123</ETag></CompleteMultipartUploadResult>"
+      }
+    ]
+  },
+  {
+    "name": "s3.mv.download",
+    "command": ["s3", "mv", "s3://bucket/test_file123", "./test_file123", "--quiet"],
+    "dimensions": [
+      {"name": "FileSize", "value": "32MB"},
+      {"name": "S3TransferClient", "value": "Classic"}
+    ],
+    "environment": {
+      "config": "[default]\ns3 =\n preferred_transfer_client = classic"
+    },
+    "responses": [
+      {
+        "headers": {"Content-Length": "0", "Last-Modified": "Thu, 18 Oct 2018 23:00:00 GMT", "ETag": "etag-1"}
+      },
+      {
+        "headers": {"Content-Length": "7", "Last-Modified": "Thu, 18 Oct 2018 23:00:00 GMT", "ETag": "etag-1"},
+        "body": "content"
+      },
+      {}
+    ]
+  },
+  {
+    "name": "s3.sync.upload",
+    "command": ["s3", "sync", "./test_dir", "s3://bucket/test_dir", "--quiet"],
+    "dimensions": [
+      {"name": "FileCount", "value": "5,000"},
+      {"name": "FileSize", "value": "4KB"},
+      {"name": "S3TransferClient", "value": "Classic"}
+    ],
+    "environment": {
+      "file_dirs": [
+        {
+          "name": "test_dir",
+          "file_count": 5e3,
+          "file_size": 4e3
+        }
+      ],
+      "config": "[default]\ns3 =\n preferred_transfer_client = classic"
+    },
+    "responses": [
+      {
+        "body": "<ListBucketResult><Contents><LastModified>2015-12-08T18:26:43.000Z</LastModified>  <Key>key</Key>  <Size>100</Size>  </Contents>  <Prefix/></ListBucketResult>"
+      },
+      {
+        "headers": {"ETag": "etag"},
+        "instances": 5e3
+      }
+    ]
+  },
+  {
+    "name": "dynamodb.getitem",
+    "command": ["dynamodb", "get-item", "--table-name", "MyTable", "--key", "{\n \"Group\": {\"S\": \"Group1\"},\n \"Item\": {\"S\": \"Item1\"} }", "--return-consumed-capacity", "TOTAL"],
+    "environment": {
+      "file_literals": [
+        {
+          "name": "key.json",
+          "content": "{\n \"Group\": {\"S\": \"Group1\"},\n \"Item\": {\"S\": \"Item1\"} }"
+        }
+      ]
+    },
+    "responses": [
+      {
+        "body": "{\"ConsumedCapacity\": {\"CapacityUnits\": 0.5, \"TableName\": \"MyTable\"}, \"Item\": {\"Group\": {\"S\": \"Group1\"}, {\"Item\": {\"S\": \"Item1\"} }"
+      }
+    ]
+  },
+  {
+    "name": "dynamodb.batchgetitem",
+    "command": ["dynamodb", "batch-get-item", "--request-items", "file://request-items.json", "--return-consumed-capacity", "TOTAL", "--no-cli-pager"],
+    "environment": {
+      "file_literals": [
+        {
+          "name": "request-items.json",
+          "content": "{\"MyTable\": { \"Keys\": [ {\"Group\": {\"S\": \"Group1\"}, \"Item\": {\"S\": \"Item1\"}}, { \"Group\": {\"S\": \"Group1\"}, \"Item\": {\"S\": \"Item1\"} }, { \"Group\": {\"S\": \"Group1\"}, \"Item\": {\"S\": \"Item1\"} }],\"ProjectionExpression\":\"Genre\"}}"
+        }
+      ]
+    },
+    "responses": [
+      {
+        "body": "{\"Responses\": {\"MyTable\": [{\"Genre\": {\"S\": \"Genre1\"}}, {\"Genre\": {\"S\": \"Genre2\"}},{\"Genre\": {\"S\": \"Genre3\"}}]}, \"UnprocessedKeys\": {},\"ConsumedCapacity\": [{\"TableName\": \"MyTable\",\"CapacityUnits\": 1.5}]}"
+      }
+    ]
+  },
+  {
+    "name": "dynamodb.putitem",
+    "command": ["dynamodb", "put-item", "--table-name", "MyTable", "--item", "file://item.json", "--return-consumed-capacity", "TOTAL", "--return-item-collection-metrics", "SIZE", "--no-cli-pager"],
+    "environment": {
+      "file_literals": [
+        {
+          "name": "item.json",
+          "content": "{\"Group\": {\"S\": \"Group1\"},\"Item\": {\"S\": \"Item1\"},\"Category\": {\"S\": \"Category1\"}}"
+        }
+      ]
+    },
+    "responses": [
+      {
+        "body": "{\"ConsumedCapacity\": {\"TableName\": \"MyTable\",\"CapacityUnits\": 1.0}, \"ItemCollectionMetrics\": {\"ItemCollectionKey\": {\"Group\": {\"S\": \"Group1\"}}, \"SizeEstimateRangeGB\": [0.0, 1.0]}}"
+      }
+    ]
+  },
+  {
+    "name": "ddb.put",
+    "command": ["ddb", "put", "MyTable", "file://items.json"],
+    "dimensions": [
+      {"name": "ItemCount", "value": "10"}
+    ],
+    "environment": {
+      "file_literals": [
+        {
+          "name": "items.json",
+          "content": "[{\"Category\": \"Cat1\",\"Item\": \"Item1\",\"Group\": \"Group1\"}, {\"Category\": \"Cat1\",\"Item\": \"Item2\",\"Group\": \"Group2\"}, {\"Category\": \"Cat1\",\"Item\": \"Item3\",\"Group\": \"Group2\"}, {\"Category\": \"Cat2\",\"Item\": \"Item4\",\"Group\": \"Group3\"}, {\"Category\": \"Cat2\",\"Item\": \"Item5\",\"Group\": \"Group4\"}, {\"Category\": \"Cat3\",\"Item\": \"Item6\",\"Group\": \"Group5\"}, {\"Category\": \"Cat3\",\"Item\": \"Item7\",\"Group\": \"Group6\"}, {\"Category\": \"Cat3\",\"Item\": \"Item8\",\"Group\": \"Group6\"}, {\"Category\": \"Cat4\",\"Item\": \"Item9\",\"Group\": \"Group7\"}, {\"Category\": \"Cat4\",\"Item\": \"Item10\",\"Group\": \"Group4\"}]"
+        }
+      ]
+    },
+    "responses": [
+      {
+        "body": "{\"UnprocessedItems\":{}}"
+      }
+    ]
+  },
+  {
+    "name": "sts.assumerole",
+    "command": ["sts", "assume-role", "--role-arn", "arn:aws:iam::123456789012:role/role123", "--role-session-name", "role-session123"],
+    "responses": [
+      {
+        "body": "<AssumeRoleResponse xmlns=\"https://sts.amazonaws.com/doc/2011-06-15/\"> <AssumeRoleResult> <AssumedRoleUser> <Arn>arn:aws:sts::123456789012:assumed-role/role123/role-session123</Arn> <AssumedRoleId>id1234:role-session123</AssumedRoleId></AssumedRoleUser> <Credentials> <SecretAccessKey>accesskey</SecretAccessKey><SessionToken>token123</SessionToken><Expiration>2016-03-15T00:05:07Z</Expiration><AccessKeyId>acesskeyid123</AccessKeyId> </Credentials></AssumeRoleResult></AssumeRoleResponse>"
+      }
+    ]
+  },
+  {
+    "name": "sts.getcalleridentity",
+    "command": ["sts", "get-caller-identity"],
+    "responses": [
+      {
+        "body": "<GetCallerIdentityResponse xmlns=\"https://sts.amazonaws.com/doc/2011-06-15/\"> <GetCallerIdentityResult> <Arn>arn:aws:iam::123456789012:user/user123</Arn> <UserId>userid123</UserId> <Account>123456789012</Account> </GetCallerIdentityResult></GetCallerIdentityResponse>"
+      }
+    ]
+  },
+  {
+    "name": "sts.assumerolewithwebidentity",
+    "command": ["sts", "assume-role-with-web-identity", "--duration-seconds", "3600", "--role-session-name", "session-name", "--provider-id", "www.amazon.com", "--policy-arns", "arn=arn:aws:iam::123456789012:policy/q=webidentitypolicy1", "arn=arn:aws:iam::123456789012:policy/webidentitypolicy2", "--role-arn", "arn:aws:iam::123456789012:role/FederatedRole1", "--web-identity-token", "token-123"],
+    "responses": [
+      {
+        "body": "<AssumeRoleWithWebIdentityResponse xmlns=\"https://sts.amazonaws.com/doc/2011-06-15/\"> <AssumeRoleWithWebIdentityResult> <SubjectFromWebIdentityToken>amzn1.account.tokenvalue</SubjectFromWebIdentityToken> <Audience>client.12345.6789@email.address</Audience> <AssumedRoleUser> <Arn>arn:aws:sts::123456789012:assumed-role/FederatedRole1/session-name</Arn> <AssumedRoleId>roleid123:session-name</AssumedRoleId> </AssumedRoleUser> <Credentials> <SessionToken>session-token123</SessionToken> <SecretAccessKey>secret-access-key</SecretAccessKey> <Expiration>2014-10-24T23:00:23Z</Expiration> <AccessKeyId>access-key-id123</AccessKeyId></Credentials> <Provider>www.amazon.com</Provider></AssumeRoleWithWebIdentityResult></AssumeRoleWithWebIdentityResponse>"
+      }
+    ]
+  },
+  {
+    "name": "ec2.describetags",
+    "command": ["ec2", "describe-tags", "--filters", "Name=resource-id,Values=i-1234567890"],
+    "responses": [
+      {
+        "body": "<DescribeTagsResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\"> <requestId>EXAMPLE</requestId><tagSet> <item> <resourceId>i-1234567890</resourceId> <resourceType>instance</resourceType> <key>webserver</key> <value/> </item> <item> <resourceId>i-1234567890</resourceId> <resourceType>instance</resourceType> <key>stack</key> <value>Production</value> </item> <item> <resourceId>i-1234567890</resourceId> <resourceType>instance</resourceType> <key>database_server</key> <value/> </item> <item> <resourceId>i-1234567890</resourceId> <resourceType>instance</resourceType> <key>stack</key> <value>Test</value> </item> </tagSet></DescribeTagsResponse>"
+      }
+    ]
+  },
+  {
+    "name": "ec2.describeinstances",
+    "command": ["ec2", "describe-instances", "--instance-ids", "i-1234567890abcdef0"],
+    "responses": [
+      {
+        "body": "<DescribeInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\"> <requestId>8f7724cf-496f-496e-8fe3-example</requestId> <reservationSet> <item> <reservationId>r-1234567890abcdef0</reservationId> <ownerId>123456789012</ownerId> <groupSet/> <instancesSet> <item> <instanceId>i-1234567890abcdef0</instanceId> <imageId>ami-bff32ccc</imageId> <instanceState> <code>16</code> <name>running</name> </instanceState> <privateDnsName>ip-192-168-1-88.eu-west-1.compute.internal</privateDnsName> <dnsName>ec2-54-194-252-215.eu-west-1.compute.amazonaws.com</dnsName> <reason/> <keyName>my_keypair</keyName> <amiLaunchIndex>0</amiLaunchIndex> <productCodes/> <instanceType>t2.micro</instanceType> <launchTime>2018-05-08T16:46:19.000Z</launchTime> <placement> <availabilityZone>eu-west-1c</availabilityZone> <groupName/> <tenancy>default</tenancy> </placement> <monitoring> <state>disabled</state> </monitoring> <subnetId>subnet-56f5f633</subnetId> <vpcId>vpc-11112222</vpcId> <privateIpAddress>192.168.1.88</privateIpAddress> <ipAddress>54.194.252.215</ipAddress> <sourceDestCheck>true</sourceDestCheck> <groupSet> <item> <groupId>sg-e4076980</groupId> <groupName>SecurityGroup1</groupName> </item> </groupSet> <architecture>x86_64</architecture> <rootDeviceType>ebs</rootDeviceType> <rootDeviceName>/dev/xvda</rootDeviceName> <blockDeviceMapping> <item> <deviceName>/dev/xvda</deviceName> <ebs> <volumeId>vol-1234567890abcdef0</volumeId> <status>attached</status> <attachTime>2015-12-22T10:44:09.000Z</attachTime> <deleteOnTermination>true</deleteOnTermination> </ebs> </item> </blockDeviceMapping> <virtualizationType>hvm</virtualizationType> <clientToken>xMcwG14507example</clientToken> <tagSet> <item> <key>Name</key> <value>Server_1</value> </item> </tagSet> <hypervisor>xen</hypervisor> <networkInterfaceSet> <item> <networkInterfaceId>eni-551ba033</networkInterfaceId> <subnetId>subnet-56f5f633</subnetId> <vpcId>vpc-11112222</vpcId> <description>Primary network interface</description> <ownerId>123456789012</ownerId> <status>in-use</status> <macAddress>02:dd:2c:5e:01:69</macAddress> <privateIpAddress>192.168.1.88</privateIpAddress> <privateDnsName>ip-192-168-1-88.eu-west-1.compute.internal</privateDnsName> <sourceDestCheck>true</sourceDestCheck> <groupSet> <item> <groupId>sg-e4076980</groupId> <groupName>SecurityGroup1</groupName> </item> </groupSet> <attachment> <attachmentId>eni-attach-39697adc</attachmentId> <deviceIndex>0</deviceIndex> <status>attached</status> <attachTime>2018-05-08T16:46:19.000Z</attachTime> <deleteOnTermination>true</deleteOnTermination> </attachment> <association> <publicIp>54.194.252.215</publicIp> <publicDnsName>ec2-54-194-252-215.eu-west-1.compute.amazonaws.com</publicDnsName> <ipOwnerId>amazon</ipOwnerId> </association> <privateIpAddressesSet> <item> <privateIpAddress>192.168.1.88</privateIpAddress> <privateDnsName>ip-192-168-1-88.eu-west-1.compute.internal</privateDnsName> <primary>true</primary> <association> <publicIp>54.194.252.215</publicIp> <publicDnsName>ec2-54-194-252-215.eu-west-1.compute.amazonaws.com</publicDnsName> <ipOwnerId>amazon</ipOwnerId> </association> </item> </privateIpAddressesSet> <ipv6AddressesSet> <item> <ipv6Address>2001:db8:1234:1a2b::123</ipv6Address> </item> </ipv6AddressesSet> </item> </networkInterfaceSet> <iamInstanceProfile> <arn>arn:aws:iam::123456789012:instance-profile/AdminRole</arn> <id>ABCAJEDNCAA64SSD123AB</id> </iamInstanceProfile> <ebsOptimized>false</ebsOptimized> <cpuOptions> <coreCount>1</coreCount> <threadsPerCore>1</threadsPerCore> </cpuOptions> </item> </instancesSet> </item> </reservationSet> </DescribeInstancesResponse>"
+      }
+    ]
+  },
+  {
+    "name": "ec2.describevolumesmodifications",
+    "command": ["ec2", "describe-volumes-modifications", "--volume-ids", "vol-0123456789EXAMPLE"],
+    "responses": [
+      {
+        "body": "<DescribeVolumesModificationsResponse xmlns=\"http://ec2.amazonaws.com/doc/2016-11-15/\"> <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId> <volumeModificationSet> <item> <targetIops>10000</targetIops> <originalIops>300</originalIops> <modificationState>optimizing</modificationState> <targetSize>200</targetSize> <targetVolumeType>io1</targetVolumeType> <volumeId>vol-0123456789EXAMPLE</volumeId> <progress>40</progress> <startTime>2017-01-19T23:58:04.922Z</startTime> <originalSize>100</originalSize> <originalVolumeType>gp2</originalVolumeType> <originalMultiAttachEnabled>false</originalMultiAttachEnabled> <targetMultiAttachEnabled>true</targetMultiAttachEnabled> </item> </volumeModificationSet> </DescribeVolumesModificationsResponse>"
+      }
+    ]
+  },
+  {
+    "name": "ecs.describecontainerinstances",
+    "command": ["ecs", "describe-container-instances", "--cluster", "update", "--container-instances", "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE"],
+    "responses": [
+      {
+        "body": "{ \"containerInstances\": [ { \"agentConnected\": true, \"attributes\": [ { \"name\": \"com.amazonaws.ecs.capability.privileged-container\" }, { \"name\": \"com.amazonaws.ecs.capability.docker-remote-api.1.17\" }, { \"name\": \"com.amazonaws.ecs.capability.docker-remote-api.1.18\" }, { \"name\": \"com.amazonaws.ecs.capability.docker-remote-api.1.19\" }, { \"name\": \"com.amazonaws.ecs.capability.docker-remote-api.1.20\" }, { \"name\": \"com.amazonaws.ecs.capability.docker-remote-api.1.21\" }, { \"name\": \"com.amazonaws.ecs.capability.logging-driver.json-file\" }, { \"name\": \"com.amazonaws.ecs.capability.logging-driver.syslog\" }, { \"name\": \"com.amazonaws.ecs.capability.logging-driver.awslogs\" }, { \"name\": \"com.amazonaws.ecs.capability.ecr-auth\" } ], \"containerInstanceArn\": \"arn:aws:ecs:us-west-2:012345678910:container-instance/default/f9cc75bb-0c94-46b9-bf6d-49d320bc1551\", \"ec2InstanceId\": \"i-042f39dc\", \"pendingTasksCount\": 0, \"registeredResources\": [ { \"doubleValue\": 0, \"integerValue\": 1024, \"longValue\": 0, \"name\": \"CPU\", \"type\": \"INTEGER\" }, { \"doubleValue\": 0, \"integerValue\": 995, \"longValue\": 0, \"name\": \"MEMORY\", \"type\": \"INTEGER\" }, { \"doubleValue\": 0, \"integerValue\": 0, \"longValue\": 0, \"name\": \"PORTS\", \"stringSetValue\": [ \"22\", \"2376\", \"2375\", \"51678\" ], \"type\": \"STRINGSET\" }, { \"doubleValue\": 0, \"integerValue\": 0, \"longValue\": 0, \"name\": \"PORTS_UDP\", \"stringSetValue\": [], \"type\": \"STRINGSET\" } ], \"remainingResources\": [ { \"doubleValue\": 0, \"integerValue\": 1024, \"longValue\": 0, \"name\": \"CPU\", \"type\": \"INTEGER\" }, { \"doubleValue\": 0, \"integerValue\": 995, \"longValue\": 0, \"name\": \"MEMORY\", \"type\": \"INTEGER\" }, { \"doubleValue\": 0, \"integerValue\": 0, \"longValue\": 0, \"name\": \"PORTS\", \"stringSetValue\": [ \"22\", \"2376\", \"2375\", \"51678\" ], \"type\": \"STRINGSET\" }, { \"doubleValue\": 0, \"integerValue\": 0, \"longValue\": 0, \"name\": \"PORTS_UDP\", \"stringSetValue\": [], \"type\": \"STRINGSET\" } ], \"runningTasksCount\": 0, \"status\": \"ACTIVE\", \"version\": 850, \"versionInfo\": { \"agentHash\": \"0931217\", \"agentVersion\": \"1.9.0\", \"dockerVersion\": \"DockerVersion: 1.9.1\" } } ], \"failures\": [] }"
+      }
+    ]
+  },
+  {
+    "name": "ecs.describetasks",
+    "command": ["ecs", "describe-tasks", "--cluster", "default", "--tasks", "1dc5c17a-422b-4dc4-b493-371970c6c4d6"],
+    "responses": [
+      {
+        "body": "{ \"failures\": [], \"tasks\": [ { \"taskArn\": \"arn:aws:ecs:us-east-1:012345678910:task/1dc5c17a-422b-4dc4-b493-371970c6c4d6\", \"overrides\": { \"containerOverrides\": [ { \"name\": \"simple-app\" }, { \"name\": \"busybox\" } ] }, \"lastStatus\": \"RUNNING\", \"containerInstanceArn\": \"arn:aws:ecs:us-east-1:012345678910:container-instance/default/5991d8da-1d59-49d2-a31f-4230f9e73140\", \"createdAt\": 1476822811.295, \"version\": 0, \"clusterArn\": \"arn:aws:ecs:us-east-1:012345678910:cluster/default\", \"startedAt\": 1476822833.998, \"desiredStatus\": \"RUNNING\", \"taskDefinitionArn\": \"arn:aws:ecs:us-east-1:012345678910:task-definition/console-sample-app-dynamic-ports:1\", \"startedBy\": \"ecs-svc/9223370560032507596\", \"containers\": [ { \"containerArn\": \"arn:aws:ecs:us-east-1:012345678910:container/4df26bb4-f057-467b-a079-961675296e64\", \"taskArn\": \"arn:aws:ecs:us-east-1:012345678910:task/default/1dc5c17a-422b-4dc4-b493-371970c6c4d6\", \"lastStatus\": \"RUNNING\", \"name\": \"simple-app\", \"networkBindings\": [ { \"protocol\": \"tcp\", \"bindIP\": \"0.0.0.0\", \"containerPort\": 80, \"hostPort\": 32774 } ], \"runtimeId\": \"runtime-123\" }, { \"containerArn\": \"arn:aws:ecs:us-east-1:012345678910:container/e09064f7-7361-4c87-8ab9-8d073bbdbcb9\", \"taskArn\": \"arn:aws:ecs:us-east-1:012345678910:task/default/1dc5c17a-422b-4dc4-b493-371970c6c4d6\", \"lastStatus\": \"RUNNING\", \"name\": \"busybox\", \"networkBindings\": [] } ] } ] }"
+      }
+    ]
+  },
+  {
+    "name": "ecs.listcontainerinstances",
+    "command": ["ecs", "list-container-instances", "--cluster", "example"],
+    "responses": [
+      {
+        "body": "{ \"containerInstanceArns\": [ \"arn:aws:ecs:us-east-1:012345678910:container-instance/example/1eb22c8ab33149b397dc769f68cc1319\", \"arn:aws:ecs:us-east-1:012345678910:container-instance/example/5cf7e311a2b74d3882650353cf3b2214\" ] }"
+      }
+    ]
+  },
+  {
+    "name": "logs.putlogevents",
+    "command": ["logs", "put-log-events", "--log-group-name", "my-logs", "--log-stream-name", "20150601", "--log-events", "[\n  {\n    \"timestamp\": 1433190184356,\n    \"message\": \"Example Event 1\"\n  },\n  {\n    \"timestamp\": 1433190184358,\n    \"message\": \"Example Event 2\"\n  },\n  {\n    \"timestamp\": 1433190184360,\n    \"message\": \"Example Event 3\"\n  }\n]"],
+    "responses": [
+      {
+        "body": "{  \"nextSequenceToken\": \"token123\"}"
+      }
+    ]
+  },
+  {
+    "name": "logs.createloggroup",
+    "command": ["logs", "create-log-group", "--log-group-name", "my-logs"],
+    "responses": [
+      {
+        "body": ""
+      }
+    ]
+  },
+  {
+    "name": "cloudwatch.putmetricdata",
+    "command": ["cloudwatch", "put-metric-data", "--namespace", "Usage Metrics", "--metric-data", "[\n  {\n    \"MetricName\": \"New Posts\",\n    \"Timestamp\": \"Wednesday, June 12, 2013 8:28:20 PM\",\n    \"Value\": 0.50,\n    \"Unit\": \"Count\"\n  }\n]\n"],
+    "responses": [
+      {
+        "body": "<PutMetricDataOutput></PutMetricDataOutput>"
+      }
+    ]
+  },
+  {
+    "name": "cloudwatch.getmetricstatistics",
+    "command": ["cloudwatch", "get-metric-statistics", "--metric-name", "CPUUtilization", "--start-time", "2014-04-08T23:18:00Z", "--end-time", "2014-04-09T23:18:00Z", "--period", "3600", "--namespace", "AWS/EC2", "--statistics", "Maximum", "--dimensions", "Name=InstanceId,Value=i-abcdef"],
+    "responses": [
+      {
+        "body": "<GetMetricStatisticsOutput> <GetMetricStatisticsResult> <Datapoints> <Datapoint>\n         <Timestamp>2014-04-09T11:18:00Z</Timestamp>\n         <Maximum>44.79</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T20:18:00Z</Timestamp>\n         <Maximum>47.92</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T19:18:00Z</Timestamp>\n         <Maximum>50.85</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T09:18:00Z</Timestamp>\n         <Maximum>47.92</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T03:18:00Z</Timestamp>\n         <Maximum>76.84</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T21:18:00Z</Timestamp>\n         <Maximum>48.96</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T14:18:00Z</Timestamp>\n         <Maximum>47.92</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>\n     <Datapoint>\n         <Timestamp>2014-04-09T08:18:00Z</Timestamp>\n         <Maximum>47.92</Maximum>\n         <Unit>Percent</Unit>\n     </Datapoint>  </Datapoints> <Label>CPUUtilization</Label> </GetMetricStatisticsResult> </GetMetricStatisticsOutput> "
+      }
+    ]
+  },
+  {
+    "name": "cloudwatch.getmetricdata",
+    "command": ["cloudwatch", "get-metric-data", "--metric-data-queries", "[ { \"Id\": \"m3\", \"Expression\": \"(m1+m2)/300\", \"Label\": \"Avg Total IOPS\" }, { \"Id\": \"m1\", \"MetricStat\": { \"Metric\": { \"Namespace\": \"AWS/EC2\", \"MetricName\": \"EBSReadOps\", \"Dimensions\": [ { \"Name\": \"InstanceId\", \"Value\": \"i-abcdef\" } ] }, \"Period\": 300, \"Stat\": \"Sum\", \"Unit\": \"Count\" }, \"ReturnData\": false }, { \"Id\": \"m2\", \"MetricStat\": { \"Metric\": { \"Namespace\": \"AWS/EC2\", \"MetricName\": \"EBSWriteOps\", \"Dimensions\": [ { \"Name\": \"InstanceId\", \"Value\": \"i-abcdef\" } ] }, \"Period\": 300, \"Stat\": \"Sum\", \"Unit\": \"Count\" }, \"ReturnData\": false } ]", "--start-time", "2024-09-29T22:10:00Z", "--end-time", "2024-09-29T22:15:00Z"],
+    "responses": [
+      {
+        "body": "<GetMetricDataOutput> <GetMetricDataResult> <Messages></Messages> <MetricDataResults> <MetricDataResult> <Id>m3</Id> <Label>Avg Total IOPS</Label> <Timestamps><Timestamp>2024-09-29T22:10:00+00:00</Timestamp></Timestamps> <Values> <DatapointValue>96.85</DatapointValue> </Values> <StatusCode>Complete</StatusCode> </MetricDataResult> </MetricDataResults> </GetMetricDataResult> </GetMetricDataOutput>"
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/scripts/performance/perfcmp 2.31.35-1/scripts/performance/perfcmp
--- 2.23.6-1/scripts/performance/perfcmp	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/performance/perfcmp	1970-01-01 00:00:00.000000000 +0000
@@ -1,152 +0,0 @@
-#!/usr/bin/env python
-"""Compare 2 perf runs.
-
-To use, specify the local directories that contain
-the run information::
-
-    $ ./perfcmp /results/2016-01-01-1111/ /results/2016-01-01-2222/
-
-"""
-import os
-import json
-import argparse
-
-from colorama import Fore, Style
-from tabulate import tabulate
-
-
-class RunComparison(object):
-
-    MEMORY_FIELDS = ['average_memory', 'max_memory']
-    TIME_FIELDS = ['total_time']
-    # Fields that aren't memory or time fields, they require
-    # no special formatting.
-    OTHER_FIELDS = ['average_cpu']
-
-    def __init__(self, old_summary, new_summary):
-        self.old_summary = old_summary
-        self.new_summary = new_summary
-
-    def iter_field_names(self):
-        for field in self.TIME_FIELDS + self.MEMORY_FIELDS + self.OTHER_FIELDS:
-            yield field
-
-    def old(self, field):
-        value = self.old_summary[field]
-        return self._format(field, value)
-
-    def old_suffix(self, field):
-        value = self.old_summary[field]
-        return self._format_suffix(field, value)
-
-    def new_suffix(self, field):
-        value = self.new_summary[field]
-        return self._format_suffix(field, value)
-
-    def _format_suffix(self, field, value):
-        if field in self.TIME_FIELDS:
-            return 'sec'
-        elif field in self.OTHER_FIELDS:
-            return ''
-        else:
-            # The suffix depends on the actual value.
-            return self._human_readable_size(value)[1]
-
-    def old_stddev(self, field):
-        real_field = 'std_dev_%s' % field
-        return self.old(real_field)
-
-    def new(self, field):
-        value = self.new_summary[field]
-        return self._format(field, value)
-
-    def new_stddev(self, field):
-        real_field = 'std_dev_%s' % field
-        return self.new(real_field)
-
-    def _format(self, field, value):
-        if field.startswith('std_dev_'):
-            field = field[len('std_dev_'):]
-        if field in self.MEMORY_FIELDS:
-            return self._human_readable_size(value)[0]
-        elif field in self.TIME_FIELDS:
-            return '%-3.2f' % value
-        else:
-            return '%.2f' % value
-
-    def _human_readable_size(self, value):
-        hummanize_suffixes = ('KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB')
-        base = 1024
-        bytes_int = float(value)
-
-        if bytes_int == 1:
-            return '1 Byte'
-        elif bytes_int < base:
-            return '%d Bytes' % bytes_int
-
-        for i, suffix in enumerate(hummanize_suffixes):
-            unit = base ** (i+2)
-            if round((bytes_int / unit) * base) < base:
-                return ['%.2f' % (base * bytes_int / unit), suffix]
-
-    def diff_percent(self, field):
-        diff_percent = (
-            (self.new_summary[field] - self.old_summary[field]) /
-            float(self.old_summary[field])) * 100
-        return diff_percent
-
-
-def compare_runs(old_dir, new_dir):
-    for dirname in os.listdir(old_dir):
-        old_run_dir = os.path.join(old_dir, dirname)
-        new_run_dir = os.path.join(new_dir, dirname)
-        if not os.path.isdir(old_run_dir):
-            continue
-        old_summary = get_summary(old_run_dir)
-        new_summary = get_summary(new_run_dir)
-        comp = RunComparison(old_summary, new_summary)
-        header = [Style.BRIGHT + dirname + Style.RESET_ALL,
-                  Style.BRIGHT + 'old' + Style.RESET_ALL,
-                  # Numeric suffix (MiB, GiB, sec).
-                  '',
-                  'std_dev',
-                  Style.BRIGHT + 'new' + Style.RESET_ALL,
-                  # Numeric suffix (MiB, GiB, sec).
-                  '',
-                  'std_dev',
-                  Style.BRIGHT + 'delta' + Style.RESET_ALL]
-        rows = []
-        for field in comp.iter_field_names():
-            row = [field, comp.old(field), comp.old_suffix(field),
-                   comp.old_stddev(field), comp.new(field),
-                   comp.new_suffix(field), comp.new_stddev(field)]
-            diff_percent = comp.diff_percent(field)
-            diff_percent_str = '%.2f%%' % diff_percent
-            if diff_percent < 0:
-                diff_percent_str = (
-                    Fore.GREEN + diff_percent_str + Style.RESET_ALL)
-            else:
-                diff_percent_str = (
-                    Fore.RED + diff_percent_str + Style.RESET_ALL)
-            row.append(diff_percent_str)
-            rows.append(row)
-        print(tabulate(rows, headers=header, tablefmt='plain'))
-        print('')
-
-
-def get_summary(benchmark_dir):
-    summary_json = os.path.join(benchmark_dir, 'summary.json')
-    with open(summary_json) as f:
-        return json.load(f)
-
-
-def main():
-    parser = argparse.ArgumentParser(description='__doc__')
-    parser.add_argument('oldrunid', help='Path to old run idir')
-    parser.add_argument('newrunid', help='Local to new run dir')
-    args = parser.parse_args()
-    compare_runs(args.oldrunid, args.newrunid)
-
-
-if __name__ == '__main__':
-    main()
diff -pruN 2.23.6-1/scripts/performance/requirements-lock.txt 2.31.35-1/scripts/performance/requirements-lock.txt
--- 2.23.6-1/scripts/performance/requirements-lock.txt	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/requirements-lock.txt	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,25 @@
+#
+# This file is autogenerated by pip-compile with Python 3.8
+# by the following command:
+#
+#    pip-compile --allow-unsafe --config=pyproject.toml --generate-hashes --output-file=scripts/performance/requirements-lock.txt scripts/performance/requirements.txt
+#
+psutil==6.1.1 \
+    --hash=sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca \
+    --hash=sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377 \
+    --hash=sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468 \
+    --hash=sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3 \
+    --hash=sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603 \
+    --hash=sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac \
+    --hash=sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303 \
+    --hash=sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4 \
+    --hash=sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160 \
+    --hash=sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8 \
+    --hash=sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003 \
+    --hash=sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030 \
+    --hash=sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777 \
+    --hash=sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5 \
+    --hash=sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53 \
+    --hash=sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649 \
+    --hash=sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8
+    # via -r scripts/performance/requirements.txt
diff -pruN 2.23.6-1/scripts/performance/requirements.txt 2.31.35-1/scripts/performance/requirements.txt
--- 2.23.6-1/scripts/performance/requirements.txt	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/requirements.txt	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1 @@
+psutil==6.1.1
diff -pruN 2.23.6-1/scripts/performance/run-benchmarks 2.31.35-1/scripts/performance/run-benchmarks
--- 2.23.6-1/scripts/performance/run-benchmarks	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/run-benchmarks	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+import argparse
+import os
+
+from benchmark_utils import BenchmarkHarness
+
+_BENCHMARK_DEFINITIONS = os.path.join(
+    os.path.dirname(os.path.abspath(__file__)), 'benchmarks.json'
+)
+
+
+def _chunk_test_cases(test_cases, num_chunks, chunk_id):
+    chunks = [[] for _ in range(num_chunks)]
+    while test_cases:
+        for chunk in chunks:
+            if not test_cases:
+                break
+            chunk.append(test_cases.pop())
+    return chunks[chunk_id]
+
+
+def main():
+    harness = BenchmarkHarness()
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        '--benchmark-definitions',
+        default=_BENCHMARK_DEFINITIONS,
+        help=('The JSON file defining the commands to benchmark.'),
+    )
+    parser.add_argument(
+        '-o',
+        '--result-dir',
+        default=f'{os.getcwd()}/results',
+        help='The directory to output performance results to. Existing '
+        'results will be deleted.',
+    )
+    parser.add_argument(
+        '--data-interval',
+        default=0.001,
+        type=float,
+        help='The interval in seconds to poll for data points.',
+    )
+    parser.add_argument(
+        '--num-iterations',
+        default=1,
+        type=int,
+        help='The number of iterations to repeat the benchmark for.',
+    )
+    parser.add_argument(
+        '--debug-dir',
+        default=None,
+        help='If supplied, writes the output of the child process for each benchmark to a file in this directory.',
+    )
+    parser.add_argument(
+        "--num-chunks",
+        default=None,
+        type=int,
+        help=(
+            "If specified, the performance tests will be partitioned as evenly as possible into "
+            "this number of chunks, and only one chunk of tests will be run per execution of "
+            "this script. If chunk-id is specified, this arg must be specified. By default, no "
+            "partitioning will be done, and all performance tests will be run."
+        ),
+    )
+    parser.add_argument(
+        "--chunk-id",
+        default=None,
+        type=int,
+        help=(
+            "If specified, the performance tests will be partitioned as evenly as possible across "
+            "multiple chunks, and only the chunk corresponding to this chunk ID will be run per "
+            "execution of this script. If num-chunks is specified, this arg must be specified. "
+            "By default, no partitioning will be done, and all performance tests will be run."
+        ),
+    )
+    parsed_args = parser.parse_args()
+    if len([x for x in [parsed_args.num_chunks, parsed_args.chunk_id] if x is not None]) == 1:
+        parser.error(
+            "If --num-chunks or --chunk-id is specified, then both args must be specified."
+        )
+    if parsed_args.num_chunks is not None:
+        if parsed_args.num_chunks < 1:
+            parser.error("--num-chunks must be a positive integer.")
+        if (
+            parsed_args.chunk_id < 0
+            or parsed_args.chunk_id >= parsed_args.num_chunks
+        ):
+            parser.error(
+                "--chunk-id must be an integer between 0 (inclusive) and num-chunks (exclusive)."
+            )
+
+    test_suites = harness.get_test_suites(parsed_args)
+    test_cases = []
+    for suite in test_suites:
+        for case in suite.get_test_cases(parsed_args):
+            test_cases.append((suite, case))
+    if parsed_args.chunk_id is not None:
+        test_cases = _chunk_test_cases(
+            test_cases, parsed_args.num_chunks, parsed_args.chunk_id
+        )
+        harness.run_benchmarks(test_cases, parsed_args)
+    else:
+        harness.run_benchmarks(test_cases, parsed_args)
+
+
+if __name__ == "__main__":
+    main()
diff -pruN 2.23.6-1/scripts/performance/simple_stubbed_tests.py 2.31.35-1/scripts/performance/simple_stubbed_tests.py
--- 2.23.6-1/scripts/performance/simple_stubbed_tests.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/scripts/performance/simple_stubbed_tests.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,142 @@
+import json
+import os
+from unittest import mock
+
+from awscli.botocore.awsrequest import AWSResponse
+from awscli.compat import BytesIO
+from scripts.performance import BaseBenchmarkSuite
+
+
+class RawResponse(BytesIO):
+    """
+    A bytes-like streamable HTTP response representation.
+    """
+
+    def stream(self, **kwargs):
+        contents = self.read()
+        while contents:
+            yield contents
+            contents = self.read()
+
+
+class StubbedHTTPClient:
+    def _get_response(self, request):
+        response = self._responses.pop(0)
+        if isinstance(response, Exception):
+            raise response
+        return response
+
+    def setup(self):
+        urllib3_session_send = 'botocore.httpsession.URLLib3Session.send'
+        self._urllib3_patch = mock.patch(urllib3_session_send)
+        self._send = self._urllib3_patch.start()
+        self._send.side_effect = self._get_response
+        self._responses = []
+
+    def tear_down(self):
+        self._urllib3_patch.stop()
+
+    def add_response(self, body, headers, status_code):
+        response = AWSResponse(
+            url='http://169.254.169.254/',
+            status_code=status_code,
+            headers=headers,
+            raw=RawResponse(body.encode()),
+        )
+        self._responses.append(response)
+
+
+class JSONStubbedBenchmarkSuite(BaseBenchmarkSuite):
+    def __init__(self):
+        self._client = StubbedHTTPClient()
+        self._benchmark_results = {}
+
+    def _create_file_with_size(self, path, size):
+        """
+        Creates a full-access file in the given directory with the
+        specified name and size. The created file will be full of
+        null bytes to achieve the specified size.
+        """
+        with open(path, 'wb') as f:
+            os.chmod(path, 0o777)
+            size = int(size)
+            f.truncate(size)
+
+    def _create_file_dir(self, dir_path, file_count, size):
+        """
+        Creates a directory with the specified name. Also creates identical files
+        with the given size in the created directory. The number of identical files
+        to be created is specified by file_count. Each file will be full of
+        null bytes to achieve the specified size.
+        """
+        os.mkdir(dir_path, 0o777)
+        for i in range(int(file_count)):
+            file_path = os.path.join(dir_path, f'{i}')
+            self._create_file_with_size(file_path, size)
+
+    def _stub_responses(self, responses, client: StubbedHTTPClient):
+        """
+        Stubs the supplied HTTP client using the response instructions in the supplied
+        responses struct. Each instruction will generate one or more stubbed responses.
+        """
+        for response in responses:
+            body = response.get("body", "")
+            headers = response.get("headers", {})
+            status_code = response.get("status_code", 200)
+            # use the instances key to support duplicating responses a configured number of times
+            if "instances" in response:
+                for _ in range(int(response['instances'])):
+                    client.add_response(body, headers, status_code)
+            else:
+                client.add_response(body, headers, status_code)
+
+    def _get_env_vars(self, config_path):
+        return {
+            'AWS_CONFIG_FILE': config_path,
+            'AWS_DEFAULT_REGION': 'us-west-2',
+        }
+
+    def get_test_cases(self, args):
+        definitions = json.load(open(args.benchmark_definitions))
+
+        def generator(definition):
+            for iteration in range(args.num_iterations):
+                yield definition
+
+        return [generator(definition) for definition in definitions]
+
+    def begin_iteration(self, case, workspace_path, assets_path, iteration):
+        env = case.get('environment', {})
+        config_path = os.path.join(assets_path, 'config')
+        self._client.setup()
+        self._stub_responses(case.get('responses', []), self._client)
+        os.makedirs(os.path.dirname(config_path), mode=0o777, exist_ok=True)
+        with open(config_path, 'w') as f:
+            f.write(env.get('config', "[DEFAULT]"))
+            f.flush()
+        self._env_patch = mock.patch.dict(
+            'os.environ', self._get_env_vars(config_path)
+        )
+        self._env_patch.start()
+        if "files" in env:
+            for file_def in env['files']:
+                path = os.path.join(workspace_path, file_def['name'])
+                self._create_file_with_size(path, file_def['size'])
+        if "file_dirs" in env:
+            for file_dir_def in env['file_dirs']:
+                dir_path = os.path.join(workspace_path, file_dir_def['name'])
+                self._create_file_dir(
+                    dir_path,
+                    file_dir_def['file_count'],
+                    file_dir_def['file_size'],
+                )
+        if "file_literals" in env:
+            for file_lit in env['file_literals']:
+                path = os.path.join(workspace_path, file_lit['name'])
+                with open(path, file_lit.get('mode', 'w')) as f:
+                    os.chmod(path, 0o777)
+                    f.write(file_lit['content'])
+
+    def end_iteration(self, case, iteration):
+        self._client.tear_down()
+        self._env_patch.stop()
diff -pruN 2.23.6-1/scripts/regenerate-configure/Dockerfile 2.31.35-1/scripts/regenerate-configure/Dockerfile
--- 2.23.6-1/scripts/regenerate-configure/Dockerfile	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/regenerate-configure/Dockerfile	2025-11-12 19:17:29.000000000 +0000
@@ -23,4 +23,4 @@ RUN make
 RUN make install
 
 WORKDIR /build
-RUN autoreconf
\ No newline at end of file
+RUN autoreconf
diff -pruN 2.23.6-1/scripts/regenerate-configure/regenerate-configure 2.31.35-1/scripts/regenerate-configure/regenerate-configure
--- 2.23.6-1/scripts/regenerate-configure/regenerate-configure	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/regenerate-configure/regenerate-configure	2025-11-12 19:17:29.000000000 +0000
@@ -4,7 +4,6 @@ import re
 from pathlib import Path
 from subprocess import run
 
-
 ROOT = Path(__file__).parents[2]
 DOCKERFILE_PATH = ROOT / "scripts" / "regenerate-configure" / "Dockerfile"
 IMAGE_RE = re.compile(r"sha256:(?P<image>.*?)\s")
@@ -49,7 +48,7 @@ def _extract_configure_file(container_id
     dst = f"{ROOT}/configure"
     result = _docker(["cp", src, dst])
     _assert_success(result)
-    print(f"Replaced configure file")
+    print("Replaced configure file")
 
 
 def _cleanup_image_and_container(image, container_id):
@@ -84,7 +83,4 @@ if __name__ == "__main__":
         help="Do not clean up docker image and container. Useful for debugging.",
     )
     args = parser.parse_args()
-    main(
-        not args.no_cleanup,
-        args.dockerfile_path
-    )
+    main(not args.no_cleanup, args.dockerfile_path)
diff -pruN 2.23.6-1/scripts/regenerate-lock-files 2.31.35-1/scripts/regenerate-lock-files
--- 2.23.6-1/scripts/regenerate-lock-files	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/regenerate-lock-files	2025-11-12 19:17:29.000000000 +0000
@@ -14,15 +14,15 @@
 """This script is to programatically regenerate the requirements/*-lock.txt
 files. In order to run it you need to have pip-tools installed into the
 currently active virtual environment."""
+
 import argparse
-import sys
 import os
-from typing import List, ClassVar
-from pathlib import Path
+import sys
 from dataclasses import dataclass
+from pathlib import Path
+from typing import ClassVar, List
 
-from utils import run, BadRCError
-
+from utils import BadRCError, run
 
 ROOT = Path(__file__).parents[1]
 IS_WINDOWS = sys.platform == "win32"
@@ -93,7 +93,7 @@ class LockFileBuilder:
 
     def _overwrite_paths(self, output_path: Path):
         rel_output_path = os.path.relpath(output_path, self.build_directory)
-        with open(output_path, "r") as f:
+        with open(output_path) as f:
             content = f.read()
         # Overwrite absolute path in --output-file argument.
         content = content.replace(str(output_path), str(rel_output_path))
@@ -119,15 +119,15 @@ def show_files(build_directory: Path, in
 
 def show_file(path: Path):
     print(path)
-    with open(path, 'r') as f:
+    with open(path) as f:
         print(f.read())
 
 
 def main(
-        build_directory: Path,
-        should_show_files: bool,
-        include_sdist: bool,
-        include_base: bool
+    build_directory: Path,
+    should_show_files: bool,
+    include_sdist: bool,
+    include_base: bool,
 ):
     builder = LockFileBuilder(
         source_directory=ROOT,
@@ -204,13 +204,24 @@ if __name__ == "__main__":
         help=("Default base directory where output lock files to be written."),
     )
     parser.add_argument('--show-files', action='store_true')
-    parser.add_argument('--no-show-files', action='store_false', dest='show_files')
+    parser.add_argument(
+        '--no-show-files', action='store_false', dest='show_files'
+    )
     parser.set_defaults(show_files=False)
     parser.add_argument('--include-sdist', action='store_true')
-    parser.add_argument('--no-include-sdist', action='store_false', dest='include_sdist')
+    parser.add_argument(
+        '--no-include-sdist', action='store_false', dest='include_sdist'
+    )
     parser.set_defaults(include_sdist=True)
     parser.add_argument('--include-base', action='store_true')
-    parser.add_argument('--no-include-base', action='store_false', dest='include_base')
+    parser.add_argument(
+        '--no-include-base', action='store_false', dest='include_base'
+    )
     parser.set_defaults(include_base=False)
     args = parser.parse_args()
-    main(args.output_directory, args.show_files, args.include_sdist, args.include_base)
+    main(
+        args.output_directory,
+        args.show_files,
+        args.include_sdist,
+        args.include_base,
+    )
diff -pruN 2.23.6-1/scripts/utils.py 2.31.35-1/scripts/utils.py
--- 2.23.6-1/scripts/utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/scripts/utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,14 @@
 import contextlib
+import glob
 import json
 import os
 import platform
 import shutil
-import sys
 import subprocess
+import sys
 import tempfile
 import zipfile
-import glob
+
 
 class BadRCError(Exception):
     pass
@@ -31,8 +32,9 @@ def run(cmd, cwd=None, env=None, echo=Tr
     stdout, stderr = p.communicate()
     output = stdout.decode('utf-8') + stderr.decode('utf-8')
     if p.returncode != 0:
-        raise BadRCError("Bad rc (%s) for cmd '%s': %s" % (
-            p.returncode, cmd, output))
+        raise BadRCError(
+            "Bad rc (%s) for cmd '%s': %s" % (p.returncode, cmd, output)
+        )
     return output
 
 
@@ -93,13 +95,6 @@ def update_metadata(dirname, **kwargs):
         json.dump(metadata, f)
 
 
-def remove_dist_info(dirname):
-    with cd(dirname):
-        for distinfo in glob.glob("**/*.dist-info", recursive=True):
-            path = os.path.join(dirname, distinfo)
-            shutil.rmtree(path)
-
-
 def save_to_zip(dirname, zipfile_name):
     if zipfile_name.endswith('.zip'):
         zipfile_name = zipfile_name[:-4]
diff -pruN 2.23.6-1/tests/__init__.py 2.31.35-1/tests/__init__.py
--- 2.23.6-1/tests/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,14 +1,14 @@
 import asyncio
-import contextlib
-import dataclasses
-from io import BytesIO
 import base64
 import collections
+import contextlib
 import copy
+import dataclasses
 import os
 import sys
 import threading
 import time
+from io import BytesIO
 
 # Both nose and py.test will add the first parent directory it
 # encounters that does not have a __init__.py to the sys.path. In
@@ -20,16 +20,24 @@ import time
 if os.environ.get('TESTS_REMOVE_REPO_ROOT_FROM_PATH'):
     rootdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     sys.path = [
-        path for path in sys.path
+        path
+        for path in sys.path
         if not os.path.isdir(path) or not os.path.samefile(path, rootdir)
     ]
 
-import awscli
+import awscli  # noqa: I001
 from awscli.clidriver import create_clidriver, AWSCLIEntryPoint
 from awscli.compat import collections_abc
 from awscli.testutils import (
-    unittest, mock, capture_output, if_windows, skip_if_windows, create_bucket,
-    FileCreator, ConsistencyWaiter, create_dir_bucket
+    unittest,
+    mock,
+    capture_output,
+    if_windows,
+    skip_if_windows,
+    create_bucket,
+    FileCreator,
+    ConsistencyWaiter,
+    create_dir_bucket,
 )
 
 import botocore.awsrequest
@@ -54,20 +62,44 @@ from prompt_toolkit.input.ansi_escape_se
 # Botocore testing utilities that we want to preserve import statements for
 # in botocore specific tests.
 from tests.utils.botocore import (
-    assert_url_equal, create_session, random_chars, temporary_file,
-    patch_load_service_model, ALL_SERVICES, BaseEnvVar, BaseSessionTest,
-    BaseClientDriverTest, StubbedSession, ClientHTTPStubber, SessionHTTPStubber,
-    IntegerRefresher, FreezeTime, get_botocore_default_config_mapping
+    assert_url_equal,
+    create_session,
+    random_chars,
+    temporary_file,
+    patch_load_service_model,
+    ALL_SERVICES,
+    BaseEnvVar,
+    BaseSessionTest,
+    BaseClientDriverTest,
+    StubbedSession,
+    ClientHTTPStubber,
+    SessionHTTPStubber,
+    IntegerRefresher,
+    FreezeTime,
+    get_botocore_default_config_mapping,
 )
+
 # S3transfer testing utilities that we want to preserve import statements for
 # in s3transfer specific tests.
 from tests.utils.s3transfer import (
-     HAS_CRT, requires_crt, skip_if_using_serial_implementation,
-     random_bucket_name, assert_files_equal,
-     NonSeekableReader, NonSeekableWriter, StreamWithError,
-     RecordingSubscriber, FileSizeProvider, RecordingOSUtils,
-     RecordingExecutor, TransferCoordinatorWithInterrupt, BaseTaskTest,
-     BaseSubmissionTaskTest, BaseGeneralInterfaceTest, StubbedClientTest,
+    HAS_CRT,
+    requires_crt,
+    skip_if_using_serial_implementation,
+    random_bucket_name,
+    assert_files_equal,
+    NonSeekableReader,
+    NonSeekableWriter,
+    StreamWithError,
+    RecordingSubscriber,
+    FileSizeProvider,
+    ETagProvider,
+    RecordingOSUtils,
+    RecordingExecutor,
+    TransferCoordinatorWithInterrupt,
+    BaseTaskTest,
+    BaseSubmissionTaskTest,
+    BaseGeneralInterfaceTest,
+    StubbedClientTest,
 )
 
 # A shared loader to use for classes in this module. This allows us to
@@ -76,8 +108,9 @@ from tests.utils.s3transfer import (
 _LOADER = botocore.loaders.Loader()
 
 
-class CLIRunner(object):
+class CLIRunner:
     """Runs CLI commands in a stubbed environment"""
+
     def __init__(self, env=None, session_stubber=None):
         if env is None:
             env = self._get_default_env()
@@ -103,8 +136,7 @@ class CLIRunner(object):
         # future, but for now we are just replicating the logic in
         # this abstraction.
         cli_data_dir = os.path.join(
-            os.path.dirname(os.path.abspath(awscli.__file__)),
-            'data'
+            os.path.dirname(os.path.abspath(awscli.__file__)), 'data'
         )
         return {
             'AWS_DATA_PATH': cli_data_dir,
@@ -128,7 +160,7 @@ class CLIRunner(object):
         return runner_result
 
 
-class SessionStubber(object):
+class SessionStubber:
     def __init__(self):
         self.received_aws_requests = []
         self._responses = collections.deque()
@@ -136,13 +168,13 @@ class SessionStubber(object):
     def register(self, session):
         events = session.get_component('event_emitter')
         events.register_first(
-            'before-parameter-build.*.*', self._capture_aws_request,
-        )
-        events.register_last(
-            'request-created', self._capture_http_request
+            'before-parameter-build.*.*',
+            self._capture_aws_request,
         )
+        events.register_last('request-created', self._capture_http_request)
         events.register_first(
-            'before-send.*.*', self._return_queued_http_response,
+            'before-send.*.*',
+            self._return_queued_http_response,
         )
 
     def add_response(self, response):
@@ -151,8 +183,8 @@ class SessionStubber(object):
     def assert_no_remaining_responses(self):
         if len(self._responses) != 0:
             raise AssertionError(
-                "The following queued responses are remaining: %s" %
-                self._responses
+                "The following queued responses are remaining: %s"
+                % self._responses
             )
 
     def _capture_aws_request(self, params, model, context, **kwargs):
@@ -179,20 +211,22 @@ class SessionStubber(object):
         return response.on_http_request_sent(request)
 
 
-class BaseResponse(object):
+class BaseResponse:
     def on_http_request_sent(self, request):
         raise NotImplementedError('on_http_request_sent')
 
 
 class AWSResponse(BaseResponse):
-    def __init__(self, service_name, operation_name, parsed_response,
-                 validate=True):
+    def __init__(
+        self, service_name, operation_name, parsed_response, validate=True
+    ):
         self._service_name = service_name
         self._operation_name = operation_name
         self._parsed_response = parsed_response
         self._service_model = self._get_service_model()
         self._operation_model = self._service_model.operation_model(
-            self._operation_name)
+            self._operation_name
+        )
         if validate:
             self._validate_parsed_response()
 
@@ -202,8 +236,8 @@ class AWSResponse(BaseResponse):
     def __repr__(self):
         return (
             'AWSResponse(service_name=%r, operation_name=%r, '
-            'parsed_response=%r)' %
-            (self._service_name, self._operation_name, self._parsed_response)
+            'parsed_response=%r)'
+            % (self._service_name, self._operation_name, self._parsed_response)
         )
 
     def _get_service_model(self):
@@ -211,18 +245,19 @@ class AWSResponse(BaseResponse):
             service_name=self._service_name, type_name='service-2'
         )
         return botocore.model.ServiceModel(
-            loaded_service_model, service_name=self._service_name)
+            loaded_service_model, service_name=self._service_name
+        )
 
     def _validate_parsed_response(self):
         if self._operation_model.output_shape:
             botocore.validate.validate_parameters(
-                self._parsed_response, self._operation_model.output_shape)
+                self._parsed_response, self._operation_model.output_shape
+            )
 
     def _generate_http_response(self):
         serialized = self._reverse_serialize_parsed_response()
         return HTTPResponse(
-            headers=serialized['headers'],
-            body=serialized['body']
+            headers=serialized['headers'], body=serialized['body']
         )
 
     def _reverse_serialize_parsed_response(self):
@@ -243,7 +278,8 @@ class AWSResponse(BaseResponse):
         )
         self._operation_model.input_shape = self._operation_model.output_shape
         return serializer.serialize_to_request(
-            self._parsed_response, self._operation_model)
+            self._parsed_response, self._operation_model
+        )
 
 
 class HTTPResponse(BaseResponse):
@@ -262,7 +298,7 @@ class HTTPResponse(BaseResponse):
         return self
 
 
-class CLIRunnerResult(object):
+class CLIRunnerResult:
     def __init__(self, rc, stdout=None, stderr=None):
         self.rc = rc
         self.stdout = stdout
@@ -270,7 +306,7 @@ class CLIRunnerResult(object):
         self.aws_requests = []
 
 
-class AWSRequest(object):
+class AWSRequest:
     def __init__(self, service_name, operation_name, params):
         self.service_name = service_name
         self.operation_name = operation_name
@@ -278,23 +314,24 @@ class AWSRequest(object):
         self.http_requests = []
 
     def __repr__(self):
-        return (
-            'AWSRequest(service_name=%r, operation_name=%r, params=%r)' %
-            (self.service_name, self.operation_name, self.params)
+        return 'AWSRequest(service_name=%r, operation_name=%r, params=%r)' % (
+            self.service_name,
+            self.operation_name,
+            self.params,
         )
 
     def __eq__(self, other):
         return (
-            self.service_name == other.service_name and
-            self.operation_name == other.operation_name and
-            self.params == other.params
+            self.service_name == other.service_name
+            and self.operation_name == other.operation_name
+            and self.params == other.params
         )
 
     def __ne__(self, other):
         return not self.__eq__(other)
 
 
-class HTTPRequest(object):
+class HTTPRequest:
     def __init__(self, method, url, headers, body):
         self.method = method
         self.url = url
@@ -302,17 +339,19 @@ class HTTPRequest(object):
         self.body = body
 
     def __repr__(self):
-        return (
-            'HTTPRequest(method=%r, url=%r, headers=%r, body=%r)' %
-            (self.method, self.url, self.headers, self.body)
+        return 'HTTPRequest(method=%r, url=%r, headers=%r, body=%r)' % (
+            self.method,
+            self.url,
+            self.headers,
+            self.body,
         )
 
     def __eq__(self, other):
         return (
-            self.method == other.method and
-            self.url == other.url and
-            self.headers == other.headers and
-            self.body == other.body
+            self.method == other.method
+            and self.url == other.url
+            and self.headers == other.headers
+            and self.body == other.body
         )
 
     def __ne__(self, other):
@@ -347,9 +386,7 @@ class CaseInsensitiveDict(collections_ab
     def lower_items(self):
         """Like iteritems(), but with all lowercase keys."""
         return (
-            (lowerkey, keyval[1])
-            for (lowerkey, keyval)
-            in self._store.items()
+            (lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items()
         )
 
     def __eq__(self, other):
@@ -392,7 +429,8 @@ class PromptToolkitAppRunner:
         self._pre_run = pre_run
         self._done_rendering_event = threading.Event()
         self.app.after_render = prompt_toolkit.utils.Event(
-            self.app, self._notify_done_rendering)
+            self.app, self._notify_done_rendering
+        )
         self._done_completing_event = threading.Event()
 
     @contextlib.contextmanager
@@ -404,7 +442,8 @@ class PromptToolkitAppRunner:
 
         run_context = AppRunContext()
         thread = threading.Thread(
-            target=self._do_run_app, args=(target, args, run_context))
+            target=self._do_run_app, args=(target, args, run_context)
+        )
         try:
             thread.start()
             self._wait_until_app_is_done_updating()
@@ -417,9 +456,7 @@ class PromptToolkitAppRunner:
     def feed_input(self, *keys):
         for key in keys:
             self._done_rendering_event.clear()
-            self.app.input.send_text(
-                self._convert_key_to_vt100_data(key)
-            )
+            self.app.input.send_text(self._convert_key_to_vt100_data(key))
             self._wait_until_app_is_done_updating()
 
     def wait_for_completions_on_current_buffer(self):
@@ -469,8 +506,8 @@ class PromptToolkitAppRunner:
 
     def _current_buffer_has_completions(self):
         return (
-            self.app.current_buffer.complete_state and
-            self.app.current_buffer.complete_state.completions
+            self.app.current_buffer.complete_state
+            and self.app.current_buffer.complete_state.completions
         )
 
     def _app_is_exitable(self):
@@ -500,7 +537,8 @@ class S3Utils:
         self._region = region
         self._bucket_to_region = {}
         self._client = self._session.create_client(
-            's3', region_name=self._region)
+            's3', region_name=self._region
+        )
 
     def _create_client_for_bucket(self, bucket_name):
         region = self._bucket_to_region.get(bucket_name, self._region)
@@ -542,17 +580,15 @@ class S3Utils:
 
     def put_object(self, bucket_name, key_name, contents='', extra_args=None):
         client = self._create_client_for_bucket(bucket_name)
-        call_args = {
-            'Bucket': bucket_name,
-            'Key': key_name, 'Body': contents
-        }
+        call_args = {'Bucket': bucket_name, 'Key': key_name, 'Body': contents}
         if extra_args is not None:
             call_args.update(extra_args)
         response = client.put_object(**call_args)
         extra_head_params = {}
         if extra_args:
             extra_head_params = dict(
-                (k, v) for (k, v) in extra_args.items()
+                (k, v)
+                for (k, v) in extra_args.items()
                 if k in self._PUT_HEAD_SHARED_EXTRAS
             )
         self.wait_until_key_exists(
@@ -609,7 +645,8 @@ class S3Utils:
         client = self._create_client_for_bucket(bucket_name)
         waiter = client.get_waiter('bucket_exists')
         consistency_waiter = ConsistencyWaiter(
-            min_successes=min_successes, delay_initial_poll=True)
+            min_successes=min_successes, delay_initial_poll=True
+        )
         consistency_waiter.wait(
             lambda: waiter.wait(Bucket=bucket_name) is None
         )
@@ -627,7 +664,8 @@ class S3Utils:
     def key_exists(self, bucket_name, key_name, min_successes=3):
         try:
             self.wait_until_key_exists(
-                    bucket_name, key_name, min_successes=min_successes)
+                bucket_name, key_name, min_successes=min_successes
+            )
             return True
         except (ClientError, WaiterError):
             return False
@@ -635,15 +673,17 @@ class S3Utils:
     def key_not_exists(self, bucket_name, key_name, min_successes=3):
         try:
             self.wait_until_key_not_exists(
-                    bucket_name, key_name, min_successes=min_successes)
+                bucket_name, key_name, min_successes=min_successes
+            )
             return True
         except (ClientError, WaiterError):
             return False
 
     def list_multipart_uploads(self, bucket_name):
         client = self._create_client_for_bucket(bucket_name)
-        return client.list_multipart_uploads(
-            Bucket=bucket_name).get('Uploads', [])
+        return client.list_multipart_uploads(Bucket=bucket_name).get(
+            'Uploads', []
+        )
 
     def list_buckets(self):
         response = self._client.list_buckets()
@@ -662,18 +702,28 @@ class S3Utils:
         response = client.head_object(Bucket=bucket_name, Key=key_name)
         return response
 
-    def wait_until_key_exists(self, bucket_name, key_name, extra_params=None,
-                              min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=True)
-
-    def wait_until_key_not_exists(self, bucket_name, key_name,
-                                  extra_params=None, min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=False)
-
-    def _wait_for_key(self, bucket_name, key_name, extra_params=None,
-                      min_successes=3, exists=True):
+    def wait_until_key_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=True
+        )
+
+    def wait_until_key_not_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=False
+        )
+
+    def _wait_for_key(
+        self,
+        bucket_name,
+        key_name,
+        extra_params=None,
+        min_successes=3,
+        exists=True,
+    ):
         client = self._create_client_for_bucket(bucket_name)
         if exists:
             waiter = client.get_waiter('object_exists')
@@ -685,6 +735,7 @@ class S3Utils:
         for _ in range(min_successes):
             waiter.wait(**params)
 
+
 class PublicPrivateKeyLoader:
     def load_private_key_and_public_key(private_key_path, public_key_path):
         with open(private_key_path, 'rb') as f:
diff -pruN 2.23.6-1/tests/backends/build_system/conftest.py 2.31.35-1/tests/backends/build_system/conftest.py
--- 2.23.6-1/tests/backends/build_system/conftest.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/conftest.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,6 @@
 import sys
 from pathlib import Path
 
-
 ROOT = Path(__file__).parents[3]
 BACKENDS = ROOT / "backends"
 BUILD_SYSTEM = ROOT / "backends" / "build_system"
diff -pruN 2.23.6-1/tests/backends/build_system/functional/test_aws_cli_venv.py 2.31.35-1/tests/backends/build_system/functional/test_aws_cli_venv.py
--- 2.23.6-1/tests/backends/build_system/functional/test_aws_cli_venv.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/functional/test_aws_cli_venv.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,20 +12,18 @@
 # language governing permissions and limitations under the License.
 import contextlib
 import json
-import re
 import os
-import sys
 import pathlib
+import re
 import subprocess
+import sys
 
-import pytest
 import flit_core.buildapi
-
+import pytest
 from build_system.awscli_venv import AwsCliVenv
 from build_system.constants import ArtifactType
 
-from awscli.testutils import skip_if_windows
-from awscli.testutils import if_windows
+from awscli.testutils import if_windows, skip_if_windows
 from backends.build_system.constants import BIN_DIRNAME, PYTHON_EXE_NAME
 
 ROOT_DIR = pathlib.Path(__file__).parents[4]
@@ -59,11 +57,13 @@ class TestAwsCliVenv:
         dep = dep.rstrip("<=>")
         dep = dep.lower()
         dep = dep.replace("-", "_")
+        dep = dep.replace(".", "_")
         return dep
 
     def _normalize_dist_info_name(self, name: str) -> str:
         name = name.split("-")[0]
         name = name.lower()
+        name = name.replace(".", "_")
         return name
 
     def _get_install_requires(self):
@@ -77,7 +77,7 @@ class TestAwsCliVenv:
             r"dependencies = \[([\s\S]+?)\]", re.MULTILINE
         )
         extract_dependencies_re = re.compile(r'"(.+)"')
-        with open(ROOT_DIR / "pyproject.toml", "r") as f:
+        with open(ROOT_DIR / "pyproject.toml") as f:
             data = f.read()
         raw_dependencies = dependency_block_re.findall(data)[0]
         dependencies = extract_dependencies_re.findall(raw_dependencies)
@@ -88,17 +88,21 @@ class TestAwsCliVenv:
         return f"python{info[0]}.{info[1]}"
 
     def _site_packages_dir(self, venv_path: pathlib.PurePath) -> str:
-        site_path = [path for path in json.loads(
-            subprocess.check_output(
-                [
-                    venv_path / BIN_DIRNAME / PYTHON_EXE_NAME,
-                    "-c",
-                    "import site, json; print(json.dumps(site.getsitepackages()))",
-                ]
+        site_path = [
+            path
+            for path in json.loads(
+                subprocess.check_output(
+                    [
+                        venv_path / BIN_DIRNAME / PYTHON_EXE_NAME,
+                        "-c",
+                        "import site, json; print(json.dumps(site.getsitepackages()))",
+                    ]
+                )
+                .decode()
+                .strip()
             )
-            .decode()
-            .strip()
-        ) if "site-packages" in path][0]
+            if "site-packages" in path
+        ][0]
         return site_path
 
     @skip_if_windows("Posix virtualenv")
diff -pruN 2.23.6-1/tests/backends/build_system/functional/test_lock_files.py 2.31.35-1/tests/backends/build_system/functional/test_lock_files.py
--- 2.23.6-1/tests/backends/build_system/functional/test_lock_files.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/functional/test_lock_files.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,19 +1,18 @@
+import os
 import re
 import sys
-import os
-from subprocess import run
 from pathlib import Path
+from subprocess import run
 
 import pytest
 
-
 ROOT = Path(__file__).parents[4]
 REQUIREMENTS_PATH = ROOT / "requirements"
 REGENERATE_LOCK_FILE_SCRIPT_PATH = ROOT / "scripts" / "regenerate-lock-files"
 
 # Lockfiles are generated on the CANNONICAL_PYTHON_VERSION
 # These tests will be skipped on any other version of python.
-CANNONICAL_PYTHON_VERSION = "3.12"
+CANNONICAL_PYTHON_VERSION = "3.13"
 IS_CANNONICAL_PYTHON_VERSION = sys.version_info[0:2] == tuple(
     map(int, CANNONICAL_PYTHON_VERSION.split("."))
 )
@@ -28,8 +27,8 @@ def should_read_line(line):
 
 
 def read_lock_file(path):
-    with open(path, 'r') as f:
-        lines = f.read().split('\n')
+    with open(path) as f:
+        lines = f.read().strip('\n').split('\n')
 
     # Find source files
     source_files = get_source_files(lines)
@@ -38,10 +37,7 @@ def read_lock_file(path):
         dependencies.extend(get_dependency_names(source_file))
 
     # Filter out comments
-    lines = [
-        line for line in lines
-        if should_read_line(line)
-    ]
+    lines = [line for line in lines if should_read_line(line)]
 
     # Filter out transient dependencies, we only care about the ones explicitly
     # mentioned in the requirements files.
@@ -69,7 +65,7 @@ def get_requires_from_pyproject():
         r"dependencies = \[([\s\S]+?)\]\s", re.MULTILINE
     )
     extract_dependencies_re = re.compile(r'"(.+)"')
-    with open(ROOT / "pyproject.toml", "r") as f:
+    with open(ROOT / "pyproject.toml") as f:
         data = f.read()
     raw_dependencies = dependency_block_re.findall(data)[0]
     dependencies = extract_dependencies_re.findall(raw_dependencies)
@@ -78,7 +74,9 @@ def get_requires_from_pyproject():
 
 def get_dependency_names(filename):
     if not filename.endswith('.txt'):
-        return [get_name_component(dep) for dep in get_requires_from_pyproject()]
+        return [
+            get_name_component(dep) for dep in get_requires_from_pyproject()
+        ]
 
     dependencies = []
     filepath = ROOT / filename
@@ -91,21 +89,22 @@ def get_dependency_names(filename):
             if line.startswith('-r'):
                 directory = os.path.dirname(filepath)
                 new_filename = line.split(' ')[1]
-                new_full_filepath = os.path.abspath(os.path.join(directory, new_filename))
+                new_full_filepath = os.path.abspath(
+                    os.path.join(directory, new_filename)
+                )
                 dependencies.extend(get_dependency_names(new_full_filepath))
             else:
                 dependencies.append(get_name_component(line))
     return dependencies
 
 
-
 def get_source_files(lines):
     for line in lines:
         if 'pip-compile' and 'generate-hashes' in line:
             line = line[1:]
             files = [
-                part for part in
-                line.split(' ')
+                part
+                for part in line.split(' ')
                 if part and not part.startswith('--') and part != 'pip-compile'
             ]
             return files
@@ -129,7 +128,7 @@ def lockfile_paths(root):
 )
 def test_all_lock_files_are_generated_by_expected_python_version():
     for path in lockfile_paths(REQUIREMENTS_PATH):
-        with open(path, "r") as f:
+        with open(path) as f:
             content = f.read()
             assert f"Python {CANNONICAL_PYTHON_VERSION}" in content
 
@@ -165,4 +164,6 @@ def test_lock_files_are_up_to_date(tmpdi
     }
 
     for regenerated_file, original_file in lockfile_mapping.items():
-        assert read_lock_file(regenerated_file) == read_lock_file(original_file)
+        assert read_lock_file(regenerated_file) == read_lock_file(
+            original_file
+        )
diff -pruN 2.23.6-1/tests/backends/build_system/functional/test_utils.py 2.31.35-1/tests/backends/build_system/functional/test_utils.py
--- 2.23.6-1/tests/backends/build_system/functional/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/functional/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
-import sys
 import json
+import os
 import platform
+import sys
 from typing import List
 
 import pytest
+from build_system.utils import (
+    ParseError,
+    Requirement,
+    UnmetDependenciesException,
+    Utils,
+    parse_requirements,
+)
 
-from build_system.utils import Utils
-from build_system.utils import parse_requirements
-from build_system.utils import ParseError
-from build_system.utils import Requirement
-from build_system.utils import UnmetDependenciesException
-
-from tests.backends.build_system.markers import skip_if_windows, if_windows
+from tests.markers import if_windows, skip_if_windows
 
 
 @pytest.fixture
@@ -45,10 +46,6 @@ def utils():
         ),
         ("docutils>=0.10,<0.16", Requirement("docutils", ">=0.10", "<0.16")),
         (
-            "cryptography>=3.3.2,<37.0.0",
-            Requirement("cryptography", ">=3.3.2", "<37.0.0"),
-        ),
-        (
             "ruamel.yaml>=0.15.0,<=0.17.21",
             Requirement("ruamel.yaml", ">=0.15.0", "<=0.17.21"),
         ),
@@ -71,9 +68,15 @@ def utils():
             Requirement("jmespath", ">=0.7.1", "<1.1.0"),
         ),
         ("urllib3>=1.25.4,<1.27", Requirement("urllib3", ">=1.25.4", "<1.27")),
-        (["urllib3>=1.\\\\", "25.4,<1.27"], Requirement("urllib3", ">=1.25.4", "<1.27")),
+        (
+            ["urllib3>=1.\\\\", "25.4,<1.27"],
+            Requirement("urllib3", ">=1.25.4", "<1.27"),
+        ),
         ("#urllib3>=1.25.4,<1.27", None),
-        ("urllib3>=1.25.4,<1.27 #foobarbaz", Requirement("urllib3", ">=1.25.4", "<1.27")),
+        (
+            "urllib3>=1.25.4,<1.27 #foobarbaz",
+            Requirement("urllib3", ">=1.25.4", "<1.27"),
+        ),
         ("urllib3>=1.25.4,<1.27 ; python_version == 3.6", ParseError),
     ],
 )
@@ -160,9 +163,9 @@ class TestUtils:
         dst_path = tmp_path / "destination.txt"
 
         utils.copy_file(src_path, dst_path)
-        with open(src_path, "r") as f:
+        with open(src_path) as f:
             src = f.read()
-        with open(dst_path, "r") as f:
+        with open(dst_path) as f:
             dst = f.read()
 
         assert src == dst
@@ -176,7 +179,7 @@ class TestUtils:
 
         utils.copy_directory_contents_into(str(src_path), str(dst_path))
 
-        assert open((dst_path / "file"), "r").read() == "foo"
+        assert open(dst_path / "file").read() == "foo"
 
     def test_copy_directory(self, utils: Utils, tmp_path):
         src_path = tmp_path / "src"
@@ -187,7 +190,7 @@ class TestUtils:
         utils.copy_directory(src_path, dst_path)
 
         assert os.path.exists(dst_path)
-        assert open((dst_path / "file"), "r").read() == "foo"
+        assert open(dst_path / "file").read() == "foo"
 
     def test_update_metadata(self, utils: Utils, tmp_path):
         data_dir = tmp_path / "awscli" / "data"
@@ -197,7 +200,7 @@ class TestUtils:
 
         utils.update_metadata(tmp_path, key="value")
 
-        with open(metadata_path, "r") as f:
+        with open(metadata_path) as f:
             data = json.load(f)
         assert data == {"key": "value"}
 
@@ -250,14 +253,19 @@ class TestUtils:
 
 @pytest.fixture
 def unmet_error(request):
-    error = UnmetDependenciesException([
-        ('colorama', '1.0', Requirement('colorama', '>=2.0', '<3.0')),
-    ], **request.param)
+    error = UnmetDependenciesException(
+        [
+            ('colorama', '1.0', Requirement('colorama', '>=2.0', '<3.0')),
+        ],
+        **request.param,
+    )
     return str(error)
 
 
 class TestUnmetDependencies:
-    @pytest.mark.parametrize('unmet_error', [{'in_venv': False}], indirect=True)
+    @pytest.mark.parametrize(
+        'unmet_error', [{'in_venv': False}], indirect=True
+    )
     def test_in_error_message(self, unmet_error):
         assert (
             "colorama (required: ('>=2.0', '<3.0')) (version installed: 1.0)"
@@ -266,7 +274,9 @@ class TestUnmetDependencies:
             f"{sys.executable} -m pip install --prefer-binary 'colorama>=2.0,<3.0'"
         ) in unmet_error
 
-    @pytest.mark.parametrize('unmet_error', [{'in_venv': False}], indirect=True)
+    @pytest.mark.parametrize(
+        'unmet_error', [{'in_venv': False}], indirect=True
+    )
     def test_not_in_venv(self, unmet_error):
         assert 'We noticed you are not in a virtualenv.' in unmet_error
 
diff -pruN 2.23.6-1/tests/backends/build_system/integration/__init__.py 2.31.35-1/tests/backends/build_system/integration/__init__.py
--- 2.23.6-1/tests/backends/build_system/integration/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/integration/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import os
 import re
-import sys
 import shutil
-import venv
 import subprocess
-import os
-
+import sys
+import venv
 from pathlib import Path
 from typing import Dict
 
-
 IS_WINDOWS = sys.platform == "win32"
 BIN_DIRNAME = "Scripts" if IS_WINDOWS else "bin"
 PYTHON_EXE_NAME = "python.exe" if IS_WINDOWS else "python"
@@ -42,7 +40,7 @@ SYSTEM_SANDBOX_REQIREMENTS = (
 class BaseArtifactTest:
     def expected_cli_version(self):
         init_file_path = ROOT / "awscli" / "__init__.py"
-        version_file = open(init_file_path, "r").read()
+        version_file = open(init_file_path).read()
         version_match = re.search(
             r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M
         )
@@ -75,7 +73,9 @@ class BaseArtifactTest:
             if '__pycache__' in dirs:
                 failures.append(os.path.join(root, '__pycache__'))
 
-        assert failures == [], f"Expected no __pycache__ directories, found {failures}"
+        assert (
+            failures == []
+        ), f"Expected no __pycache__ directories, found {failures}"
 
     def assert_built_venv_is_correct(self, venv_dir):
         self.assert_venv_is_correct(venv_dir)
@@ -102,13 +102,6 @@ class BaseArtifactTest:
             "dist",
             "install",
         }
-        dist_dir = aws_dir / "dist"
-        dist_info_files = set(
-            f for f in os.listdir(dist_dir)
-            if '.dist-info' in f
-        )
-        assert dist_info_files == set(), \
-            f"Expected no dist-info files, found: {dist_info_files}"
 
         aws_exe = aws_dir / "dist" / "aws"
         self.assert_version_string_is_correct(aws_exe, "exe")
@@ -117,7 +110,9 @@ class BaseArtifactTest:
         self.assert_version_string_is_correct(exe_dir / CLI_SCRIPT_NAME, "exe")
 
     def assert_installed_venv_is_correct(self, exe_dir, lib_dir):
-        self.assert_version_string_is_correct(exe_dir / CLI_SCRIPT_NAME, "sandbox")
+        self.assert_version_string_is_correct(
+            exe_dir / CLI_SCRIPT_NAME, "sandbox"
+        )
         self.assert_venv_is_correct(lib_dir / "aws-cli")
 
 
diff -pruN 2.23.6-1/tests/backends/build_system/integration/test_build_system.py 2.31.35-1/tests/backends/build_system/integration/test_build_system.py
--- 2.23.6-1/tests/backends/build_system/integration/test_build_system.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/integration/test_build_system.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,8 +15,10 @@ import subprocess
 
 import pytest
 
-from tests.backends.build_system.integration import BaseArtifactTest
-from tests.backends.build_system.integration import VEnvWorkspace
+from tests.backends.build_system.integration import (
+    BaseArtifactTest,
+    VEnvWorkspace,
+)
 
 
 class TestBuildBackend(BaseArtifactTest):
@@ -46,7 +48,13 @@ class TestBuildBackendFailureCases:
         with pytest.raises(subprocess.CalledProcessError) as e:
             workspace.call_build_system("system-sandbox", download_deps=False)
         error_text = e.value.stdout.decode()
-        assert "No module named 'flit_core'" in error_text
+        possible_messages = [
+            "No module named 'flit_core'",
+            # Recent versions of pyproject-hooks started consuming
+            # ImportError messages and replacing it.
+            "Cannot import 'pep517'",
+        ]
+        assert any([msg in error_text for msg in possible_messages])
 
 
 class TestInstall(BaseArtifactTest):
diff -pruN 2.23.6-1/tests/backends/build_system/integration/test_makefile.py 2.31.35-1/tests/backends/build_system/integration/test_makefile.py
--- 2.23.6-1/tests/backends/build_system/integration/test_makefile.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/integration/test_makefile.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,10 @@
 import os
 
 from awscli.testutils import skip_if_windows
-from tests.backends.build_system.integration import BaseArtifactTest
-from tests.backends.build_system.integration import VEnvWorkspace
-
+from tests.backends.build_system.integration import (
+    BaseArtifactTest,
+    VEnvWorkspace,
+)
 
 WINDOWS_SKIP_REASON = "./configure tests do not run nativly on windows"
 
@@ -79,7 +80,7 @@ class TestMakeInstall(BaseArtifactTest):
         workspace.make(
             [
                 "install",
-                f"prefix=/install",
+                "prefix=/install",
             ],
             env={"DESTDIR": str(workspace.path)},
         )
diff -pruN 2.23.6-1/tests/backends/build_system/markers.py 2.31.35-1/tests/backends/build_system/markers.py
--- 2.23.6-1/tests/backends/build_system/markers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/markers.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,9 +0,0 @@
-import platform
-
-import pytest
-
-
-skip_if_windows = pytest.mark.skipif(platform.system() not in ['Darwin', 'Linux'],
-                                     reason="This test does not run on windows.")
-if_windows = pytest.mark.skipif(platform.system() in ['Darwin', 'Linux'],
-                                     reason="This test only runs on windows.")
diff -pruN 2.23.6-1/tests/backends/build_system/unit/test_exe.py 2.31.35-1/tests/backends/build_system/unit/test_exe.py
--- 2.23.6-1/tests/backends/build_system/unit/test_exe.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/unit/test_exe.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,12 @@
 import os
 
 import pytest
-
-from build_system.constants import PYINSTALLER_DIR
-from build_system.constants import EXE_ASSETS_DIR
-from build_system.constants import BIN_DIRNAME
-from build_system.constants import PYINSTALLER_EXE_NAME
+from build_system.constants import (
+    BIN_DIRNAME,
+    EXE_ASSETS_DIR,
+    PYINSTALLER_DIR,
+    PYINSTALLER_EXE_NAME,
+)
 from build_system.exe import ExeBuilder
 
 
@@ -120,12 +121,6 @@ class TestExe:
                 os.path.join("workspace", "aws", "dist"),
                 {"distribution_source": "source-exe"},
             ),
-            (
-                "glob",
-                "**/*.dist-info",
-                os.path.join("workspace", "aws", "dist"),
-                True
-            ),
         ]
 
     def test_build(self, fake_aws_cli_venv):
diff -pruN 2.23.6-1/tests/backends/build_system/unit/test_install.py 2.31.35-1/tests/backends/build_system/unit/test_install.py
--- 2.23.6-1/tests/backends/build_system/unit/test_install.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/build_system/unit/test_install.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,14 +1,12 @@
 import os
 import platform
-from typing import List, Any
+from typing import Any, List
 
 import pytest
+from build_system.install import Installer, Uninstaller
 
-
-from build_system.install import Installer
-from build_system.install import Uninstaller
 from backends.build_system.utils import Utils
-from tests.backends.build_system.markers import skip_if_windows, if_windows
+from tests.markers import if_windows, skip_if_windows
 
 
 class FakeUtils(Utils):
@@ -109,7 +107,11 @@ class TestInstaller:
                 os.path.join("build_dir", "exe", "aws", "dist"),
                 "lib_dir",
             ),
-            ("write_file", "bin_dir\\aws.cmd", "@echo off\nlib_dir\\aws.exe %*\n"),
+            (
+                "write_file",
+                "bin_dir\\aws.cmd",
+                "@echo off\nlib_dir\\aws.exe %*\n",
+            ),
         ]
 
     @skip_if_windows
diff -pruN 2.23.6-1/tests/backends/test_pep517.py 2.31.35-1/tests/backends/test_pep517.py
--- 2.23.6-1/tests/backends/test_pep517.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/backends/test_pep517.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import base64
+import hashlib
 import os
 import re
 import shutil
-import hashlib
-import base64
 from pathlib import Path
 
-import pytest
 import py
+import pytest
 
 import awscli
 import backends.pep517
@@ -114,7 +114,8 @@ def test_build_sdist(tmpdir, config_sett
     assert unpacked_sdist.join("tests", "__init__.py").check()
     assert unpacked_sdist.join("tests", "unit", "__init__.py").check()
     assert unpacked_sdist.join(
-        "tests", "backends", "build_system", "unit", "__init__.py").check()
+        "tests", "backends", "build_system", "unit", "__init__.py"
+    ).check()
     assert unpacked_sdist.join("tests", "__init__.py").check()
 
     # Make sure sdist will be buildable
@@ -122,7 +123,8 @@ def test_build_sdist(tmpdir, config_sett
     assert unpacked_sdist.join("Makefile.in").check()
     assert unpacked_sdist.join("requirements", "bootstrap.txt").check()
     assert unpacked_sdist.join(
-        "requirements", "download-deps", "bootstrap.txt").check()
+        "requirements", "download-deps", "bootstrap.txt"
+    ).check()
 
     # Make sure exe build files are added to the sdist
     assert unpacked_sdist.join("exe", "pyinstaller", "aws.spec")
@@ -244,7 +246,6 @@ def test_get_requires_for_build_wheel(co
     expected_requirements = [
         "colorama",
         "docutils",
-        "cryptography",
         "ruamel.yaml",
         "ruamel.yaml.clib",
         "prompt-toolkit",
@@ -253,7 +254,6 @@ def test_get_requires_for_build_wheel(co
         "python-dateutil",
         "jmespath",
         "urllib3",
-        "zipp",
     ]
     assert len(expected_requirements) == len(requirements)
     for expected_requirement in expected_requirements:
diff -pruN 2.23.6-1/tests/conftest.py 2.31.35-1/tests/conftest.py
--- 2.23.6-1/tests/conftest.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/conftest.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,10 @@
 import logging
 import platform
 
+import pytest
 from prompt_toolkit.application import create_app_session
 from prompt_toolkit.input import create_pipe_input
 from prompt_toolkit.output import DummyOutput
-import pytest
 
 import awscli.logger
 
@@ -42,7 +42,9 @@ def ptk_app_session():
     with create_pipe_input() as pipe_input:
         output = DummyOutput()
         try:
-            with create_app_session(input=pipe_input, output=output) as session:
+            with create_app_session(
+                input=pipe_input, output=output
+            ) as session:
                 yield session
         finally:
             pipe_input.close()
diff -pruN 2.23.6-1/tests/dependencies/test_closure.py 2.31.35-1/tests/dependencies/test_closure.py
--- 2.23.6-1/tests/dependencies/test_closure.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/dependencies/test_closure.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,8 +17,9 @@ import json
 import os
 import re
 import site
+from collections.abc import Iterator
 from pathlib import Path
-from typing import Dict, Iterator, List, Tuple
+from typing import Dict, List, Tuple
 
 import pytest
 from packaging.requirements import Requirement
@@ -35,7 +36,7 @@ def awscli_package():
 
 def parse_lockfile(lockfile: Path):
     requirements = {}
-    with open(lockfile, "r") as f:
+    with open(lockfile) as f:
         for line in f.readlines():
             match = _LOCKFILE_PATTERN.match(line)
             if not match:
@@ -95,15 +96,21 @@ class Package:
         # and explicitly provide the directory to avoid needing to use
         # MetaPathFinders and thus avoid this issue.
 
-        # Packages names may have a "-". These get converted to "_" for
+        # Package names may have a "-". These get converted to "_" for
         # their respective directory names in the site packages directory.
-        snake_case_name = name.replace("-", "_")
-        for sitepackages in site.getsitepackages():
-            for filename in os.listdir(sitepackages):
-                if fnmatch.fnmatch(filename, f"{snake_case_name}-*.dist-info"):
-                    return importlib.metadata.Distribution.at(
-                        os.path.join(sitepackages, filename)
-                    )
+        # Directory names may have a "_" in place of a "." if they were
+        # built from source. If the initial normalization fails to match,
+        # we try replacing "." with "_" in the package name.
+        for c in ['-', '.']:
+            snake_case_name = name.replace(c, "_")
+            for sitepackages in site.getsitepackages():
+                for filename in os.listdir(sitepackages):
+                    if fnmatch.fnmatch(
+                        filename, f"{snake_case_name}-*.dist-info"
+                    ):
+                        return importlib.metadata.Distribution.at(
+                            os.path.join(sitepackages, filename)
+                        )
         raise ValueError(
             f'Could not find .dist-info directory for {snake_case_name}'
         )
@@ -155,21 +162,17 @@ class TestDependencyClosure:
     def test_expected_runtime_dependencies(self, awscli_package):
         expected_dependencies = {
             "awscrt",
-            "cffi",
             "colorama",
-            "cryptography",
             "distro",
             "docutils",
             "jmespath",
             "prompt-toolkit",
-            "pycparser",
             "python-dateutil",
             "ruamel.yaml",
             "ruamel.yaml.clib",
             "six",
             "urllib3",
             "wcwidth",
-            "zipp",
         }
         actual_dependencies = set()
         for _, package in awscli_package.runtime_dependencies.walk():
@@ -181,8 +184,6 @@ class TestDependencyClosure:
 
     def test_expected_unbounded_runtime_dependencies(self, awscli_package):
         expected_unbounded_dependencies = {
-            "cffi",  # Transitive dependency from cryptography
-            "pycparser",  # Transitive dependency from cffi
             "six",  # Transitive dependency from python-dateutil
             "wcwidth",  # Transitive dependency from prompt-toolkit
         }
diff -pruN 2.23.6-1/tests/functional/apigateway/test_put_integration.py 2.31.35-1/tests/functional/apigateway/test_put_integration.py
--- 2.23.6-1/tests/functional/apigateway/test_put_integration.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/apigateway/test_put_integration.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestPutIntegration(BaseAWSCommandParamsTest):
-
     prefix = 'apigateway put-integration '
 
     def test_put_integration(self):
@@ -26,9 +25,11 @@ class TestPutIntegration(BaseAWSCommandP
         cmdline += '--integration-http-method GET '
         cmdline += '--uri https://api.endpoint.com'
         result = {
-            'restApiId': 'api-id', 'resourceId': 'resource-id',
-            'httpMethod': 'GET', 'type': 'HTTP',
+            'restApiId': 'api-id',
+            'resourceId': 'resource-id',
+            'httpMethod': 'GET',
+            'type': 'HTTP',
             'integrationHttpMethod': 'GET',
-            'uri': 'https://api.endpoint.com'
+            'uri': 'https://api.endpoint.com',
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/autocomplete/test_completer.py 2.31.35-1/tests/functional/autocomplete/test_completer.py
--- 2.23.6-1/tests/functional/autocomplete/test_completer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autocomplete/test_completer.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
-from awscli.autocomplete import parser, filters
+from awscli.autocomplete import filters, parser
+from awscli.autocomplete.completer import CompletionResult
 from awscli.autocomplete.local import basic, fetcher
 from awscli.clidriver import CLIDriver, create_clidriver
-from awscli.autocomplete.completer import CompletionResult
-
+from awscli.testutils import unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
@@ -24,244 +23,391 @@ class TestShorthandCompleter(unittest.Te
     def setUp(self):
         cli_driver = create_clidriver()
         self.cli_fetcher = fetcher.CliDriverFetcher(cli_driver)
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('codebuild', None),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [
+                        ('codebuild', None),
                         ('dynamodb', None),
                         ('s3', None),
                         ('ec2', None),
-                        ('cloudformation', None)],
-                'aws.codebuild': [('create-project', None)],
-                'aws.dynamodb': [('put-item', None)],
-                'aws.ec2': [('bundle-instance', None)],
-                'aws.cloudformation': [('deploy', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'output', 'debug'],
-                },
-                'aws.codebuild': {
-                    'create-project': [
-                        'source', 'secondary-sources'],
-                },
-                'aws.dynamodb': {
-                    'put-item': ['item'],
-                },
-                'aws.ec2': {
-                    'bundle-instance': ['storage']
-                },
-                'aws.cloudformation': {
-                    'deploy': ['capabilities']
-                }
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                        'output': ('output', 'string', 'aws', '', None, False,
-                                   False),
-                        'debug': ('debug', 'string', 'aws', '', None, False,
-                                  False),
-                    }
+                        ('cloudformation', None),
+                    ],
+                    'aws.codebuild': [('create-project', None)],
+                    'aws.dynamodb': [('put-item', None)],
+                    'aws.ec2': [('bundle-instance', None)],
+                    'aws.cloudformation': [('deploy', None)],
+                },
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'output', 'debug'],
+                    },
+                    'aws.codebuild': {
+                        'create-project': ['source', 'secondary-sources'],
+                    },
+                    'aws.dynamodb': {
+                        'put-item': ['item'],
+                    },
+                    'aws.ec2': {'bundle-instance': ['storage']},
+                    'aws.cloudformation': {'deploy': ['capabilities']},
+                },
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'output': (
+                                'output',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'debug': (
+                                'debug',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.codebuild': {
+                        'create-project': {
+                            'source': (
+                                'source',
+                                'structure',
+                                'create-project',
+                                'aws.codebuild.',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'secondary-sources': (
+                                'secondary-sources',
+                                'structure',
+                                'create-project',
+                                'aws.codebuild.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.dynamodb': {
+                        'put-item': {
+                            'item': (
+                                'item',
+                                'map',
+                                'put-item',
+                                'aws.dynamodb.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.ec2': {
+                        'bundle-instance': {
+                            'storage': (
+                                'storage',
+                                'structure',
+                                'bundle-instance',
+                                'aws.ec2.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.cloudformation': {
+                        'deploy': {
+                            'capabilities': (
+                                'capabilities',
+                                'list',
+                                'deploy',
+                                'aws.cloudformation.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
                 },
-                'aws.codebuild': {
-                    'create-project': {
-                        'source': (
-                            'source', 'structure', 'create-project',
-                            'aws.codebuild.', None, False, False),
-                        'secondary-sources': (
-                            'secondary-sources', 'structure', 'create-project',
-                            'aws.codebuild.', None, False, False)
-                    }
-                },
-                'aws.dynamodb': {
-                    'put-item': {
-                        'item': (
-                            'item', 'map', 'put-item',
-                            'aws.dynamodb.', None, False, False),
-                    }
-                },
-                'aws.ec2': {
-                    'bundle-instance': {
-                        'storage': (
-                            'storage', 'structure', 'bundle-instance',
-                            'aws.ec2.', None, False, False),
-                    }
-                },
-                'aws.cloudformation': {
-                    'deploy': {
-                        'capabilities': (
-                            'capabilities', 'list', 'deploy',
-                            'aws.cloudformation.', None, False, False),
-                    }
-                }
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.completer = basic.ShorthandCompleter(self.cli_fetcher)
 
-    def assert_command_generates_suggestions(self, command_line,
-                                             expected_suggestions):
+    def assert_command_generates_suggestions(
+        self, command_line, expected_suggestions
+    ):
         parsed = self.parser.parse(command_line)
         suggestions = self.completer.complete(parsed)
         if expected_suggestions is None:
             self.assertIsNone(suggestions)
         else:
-            displayed_suggestions = [x.display_text
-                                     for x in suggestions]
-            self.assertTrue(all([suggest in expected_suggestions
-                                 for suggest in displayed_suggestions]),
-                            command_line)
-            self.assertEqual(len(expected_suggestions),
-                             len(displayed_suggestions), command_line)
+            displayed_suggestions = [x.display_text for x in suggestions]
+            self.assertTrue(
+                all(
+                    [
+                        suggest in displayed_suggestions
+                        for suggest in expected_suggestions
+                    ]
+                ),
+                command_line,
+            )
 
     def test_return_none_if_it_does_not_have_shorthand_input(self):
         self.assert_command_generates_suggestions(
-            'aws codebuild create-project --region', None)
+            'aws codebuild create-project --region', None
+        )
 
     def test_return_suggestions_for_codebuild(self):
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source ',
             expected_suggestions=[
-                'type=', 'location=', 'gitCloneDepth=',
-                'gitSubmodulesConfig={', 'buildspec=',
-                'auth={', 'reportBuildStatus=', 'buildStatusConfig={',
-                'insecureSsl=', 'sourceIdentifier='])
+                'type=',
+                'location=',
+                'gitCloneDepth=',
+                'gitSubmodulesConfig={',
+                'buildspec=',
+                'auth={',
+                'reportBuildStatus=',
+                'buildStatusConfig={',
+                'insecureSsl=',
+                'sourceIdentifier=',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source foo --secondary-sources ',
             expected_suggestions=[
-                'type=', 'location=', 'gitCloneDepth=',
-                'gitSubmodulesConfig={', 'buildspec=',
-                'auth={', 'reportBuildStatus=', 'buildStatusConfig={',
-                'insecureSsl=', 'sourceIdentifier='])
+                'type=',
+                'location=',
+                'gitCloneDepth=',
+                'gitSubmodulesConfig={',
+                'buildspec=',
+                'auth={',
+                'reportBuildStatus=',
+                'buildStatusConfig={',
+                'insecureSsl=',
+                'sourceIdentifier=',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source bui',
-            expected_suggestions=['buildspec=', 'buildStatusConfig={'])
+            expected_suggestions=['buildspec=', 'buildStatusConfig={'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source auth=',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source auth={',
-            expected_suggestions=['type=', 'resource=', 'Autoclose brackets'])
+            expected_suggestions=['type=', 'resource=', 'Autoclose brackets'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source auth={type=',
-            expected_suggestions=['OAUTH', 'CODECONNECTIONS', 'SECRETS_MANAGER',
-                                  'Autoclose brackets'])
+            expected_suggestions=[
+                'OAUTH',
+                'CODECONNECTIONS',
+                'SECRETS_MANAGER',
+                'Autoclose brackets',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},reportBuildStatus=',
-            expected_suggestions=['true', 'false'])
+            expected_suggestions=['true', 'false'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},reportBuildStatus=t',
-            expected_suggestions=['true'])
+            expected_suggestions=['true'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},reportBuildStatus=q',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source auth={type=a},location=',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},location=foo,ty=',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},location="foo,ty',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},location=foo,type=',
             expected_suggestions=[
-                'CODECOMMIT', 'CODEPIPELINE', 'GITHUB',
-                'S3', 'BITBUCKET', 'GITHUB_ENTERPRISE', 'NO_SOURCE',
-                'GITLAB', 'GITLAB_SELF_MANAGED',])
+                'CODECOMMIT',
+                'CODEPIPELINE',
+                'GITHUB',
+                'S3',
+                'BITBUCKET',
+                'GITHUB_ENTERPRISE',
+                'NO_SOURCE',
+                'GITLAB',
+                'GITLAB_SELF_MANAGED',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project '
             '--source auth={type=a},location=foo,type=CO',
-            expected_suggestions=['CODECOMMIT', 'CODEPIPELINE'])
+            expected_suggestions=['CODECOMMIT', 'CODEPIPELINE'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source buildspec=foo,aut',
-            expected_suggestions=['auth={'])
+            expected_suggestions=['auth={'],
+        )
 
     def test_return_suggestions_for_dynamodb(self):
         self.assert_command_generates_suggestions(
-            'aws dynamodb put-item --item ',
-            expected_suggestions=None)
+            'aws dynamodb put-item --item ', expected_suggestions=None
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={',
             expected_suggestions=[
-                'S=', 'N=', 'B=', 'SS=[', 'NS=[', 'BS=[', 'M={', 'L=[',
-                'NULL=', 'BOOL=', 'Autoclose brackets'])
+                'S=',
+                'N=',
+                'B=',
+                'SS=[',
+                'NS=[',
+                'BS=[',
+                'M={',
+                'L=[',
+                'NULL=',
+                'BOOL=',
+                'Autoclose brackets',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={SS',
-            expected_suggestions=['SS=[', 'Autoclose brackets'])
+            expected_suggestions=['SS=[', 'Autoclose brackets'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={M={',
-            expected_suggestions=['Autoclose brackets'])
+            expected_suggestions=['Autoclose brackets'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={M={key1={',
             expected_suggestions=[
-                'S=', 'N=', 'B=', 'SS=[', 'NS=[', 'BS=[', 'M={', 'L=[',
-                'NULL=', 'BOOL=', 'Autoclose brackets'])
+                'S=',
+                'N=',
+                'B=',
+                'SS=[',
+                'NS=[',
+                'BS=[',
+                'M={',
+                'L=[',
+                'NULL=',
+                'BOOL=',
+                'Autoclose brackets',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={M={key1={M={key2={',
             expected_suggestions=[
-                'S=', 'N=', 'B=', 'SS=[', 'NS=[', 'BS=[', 'M={',
-                'L=[', 'NULL=', 'BOOL=', 'Autoclose brackets'])
+                'S=',
+                'N=',
+                'B=',
+                'SS=[',
+                'NS=[',
+                'BS=[',
+                'M={',
+                'L=[',
+                'NULL=',
+                'BOOL=',
+                'Autoclose brackets',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={M={key1={M={key2={B',
-            expected_suggestions=['B=', 'BS=[', 'BOOL=', 'Autoclose brackets'])
+            expected_suggestions=['B=', 'BS=[', 'BOOL=', 'Autoclose brackets'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={BS=[1,2',
-            expected_suggestions=['Autoclose brackets'])
+            expected_suggestions=['Autoclose brackets'],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={BS=[1,2],',
             expected_suggestions=[
-                'S=', 'N=', 'B=', 'SS=[', 'NS=[', 'M={', 'L=[',
-                'NULL=', 'BOOL=', 'Autoclose brackets'])
+                'S=',
+                'N=',
+                'B=',
+                'SS=[',
+                'NS=[',
+                'M={',
+                'L=[',
+                'NULL=',
+                'BOOL=',
+                'Autoclose brackets',
+            ],
+        )
 
         self.assert_command_generates_suggestions(
             'aws dynamodb put-item --item key={SS=[]}',
-            expected_suggestions=None)
+            expected_suggestions=None,
+        )
 
     def test_autoclose_brackets(self):
-        parsed = self.parser.parse('aws dynamodb put-item --item '
-                                   'key={M={key1={M={key2={BS=[1')
+        parsed = self.parser.parse(
+            'aws dynamodb put-item --item ' 'key={M={key1={M={key2={BS=[1'
+        )
         suggestions = self.completer.complete(parsed)
-        self.assertEqual(suggestions[-1].name,
-                         'key={M={key1={M={key2={BS=[1]}}}}}')
+        self.assertEqual(
+            suggestions[-1].name, 'key={M={key1={M={key2={BS=[1]}}}}}'
+        )
 
-        parsed = self.parser.parse('aws dynamodb put-item --item '
-                                   'key={M=[key1={M=[key2={BS=[1')
+        parsed = self.parser.parse(
+            'aws dynamodb put-item --item ' 'key={M=[key1={M=[key2={BS=[1'
+        )
         suggestions = self.completer.complete(parsed)
-        self.assertEqual(suggestions[-1].name,
-                         'key={M=[key1={M=[key2={BS=[1]}]}]}')
+        self.assertEqual(
+            suggestions[-1].name, 'key={M=[key1={M=[key2={BS=[1]}]}]}'
+        )
 
     def test_not_start_autocompletion_wo_trailing_space(self):
         parsed = self.parser.parse('aws ec2 bundle-instance --storage')
@@ -269,73 +415,80 @@ class TestShorthandCompleter(unittest.Te
         self.assertIsNone(suggestions)
 
     def test_un_closable_brackets(self):
-        parsed = self.parser.parse('aws dynamodb put-item --item '
-                                   'key={M={key1={M={key2=]{BS=[1')
+        parsed = self.parser.parse(
+            'aws dynamodb put-item --item ' 'key={M={key1={M={key2=]{BS=[1'
+        )
         suggestions = self.completer.complete(parsed)
         self.assertIsNone(suggestions)
 
     def test_fuzzy_search(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.fuzzy_filter
+            self.cli_fetcher, response_filter=filters.fuzzy_filter
         )
         self.assert_command_generates_suggestions(
             'aws codebuild create-project --source auth={type=a},'
             'location=foo,type=OI',
-            ['CODEPIPELINE', 'CODECOMMIT']
+            ['CODEPIPELINE', 'CODECOMMIT'],
         )
 
     def test_names_with_fuzzy_search(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.fuzzy_filter
+            self.cli_fetcher, response_filter=filters.fuzzy_filter
         )
         parsed = self.parser.parse(
-            'aws codebuild create-project --source buildspec=foo,at')
+            'aws codebuild create-project --source buildspec=foo,at'
+        )
         suggestions = self.completer.complete(parsed)
         names = [s.name for s in suggestions]
         display_text = [s.display_text for s in suggestions]
-        self.assertEqual(names, ['buildspec=foo,location=',
-                                 'buildspec=foo,buildStatusConfig={',
-                                 'buildspec=foo,reportBuildStatus=',
-                                 'buildspec=foo,auth={'])
-        self.assertEqual(display_text,
-                         ['location=',
-                          'buildStatusConfig={',
-                          'reportBuildStatus=',
-                          'auth={'])
+        self.assertEqual(
+            names,
+            [
+                'buildspec=foo,location=',
+                'buildspec=foo,buildStatusConfig={',
+                'buildspec=foo,reportBuildStatus=',
+                'buildspec=foo,auth={',
+            ],
+        )
+        self.assertEqual(
+            display_text,
+            [
+                'location=',
+                'buildStatusConfig={',
+                'reportBuildStatus=',
+                'auth={',
+            ],
+        )
 
     def test_names_with_startswith_search(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.startswith_filter
+            self.cli_fetcher, response_filter=filters.startswith_filter
         )
         parsed = self.parser.parse(
-            'aws codebuild create-project --source auth={},bui')
+            'aws codebuild create-project --source auth={},bui'
+        )
         suggestions = self.completer.complete(parsed)
         names = [s.name for s in suggestions]
         display_text = [s.display_text for s in suggestions]
-        self.assertEqual(names, ['auth={},buildspec=',
-                                 'auth={},buildStatusConfig={'])
-        self.assertEqual(display_text,
-                         ['buildspec=',
-                          'buildStatusConfig={'])
+        self.assertEqual(
+            names, ['auth={},buildspec=', 'auth={},buildStatusConfig={']
+        )
+        self.assertEqual(display_text, ['buildspec=', 'buildStatusConfig={'])
 
     def test_return_suggestions_for_global_arg_with_choices(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.startswith_filter
+            self.cli_fetcher, response_filter=filters.startswith_filter
         )
         parsed = self.parser.parse('aws --output ')
         suggestions = self.completer.complete(parsed)
         names = [s.name for s in suggestions]
-        self.assertEqual(names, ['json', 'text', 'table',
-                                 'yaml', 'yaml-stream'])
+        self.assertEqual(
+            names, ['json', 'text', 'table', 'yaml', 'yaml-stream']
+        )
 
     def test_not_return_suggestions_for_global_arg_wo_trailing_space(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.startswith_filter
+            self.cli_fetcher, response_filter=filters.startswith_filter
         )
         parsed = self.parser.parse('aws --output')
         suggestions = self.completer.complete(parsed)
@@ -343,8 +496,7 @@ class TestShorthandCompleter(unittest.Te
 
     def test_not_return_suggestions_for_global_arg_wo_choices(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.startswith_filter
+            self.cli_fetcher, response_filter=filters.startswith_filter
         )
         parsed = self.parser.parse('aws --debug ')
         suggestions = self.completer.complete(parsed)
@@ -352,65 +504,99 @@ class TestShorthandCompleter(unittest.Te
 
     def test_return_suggestions_for_list_of_enum(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.fuzzy_filter
+            self.cli_fetcher, response_filter=filters.fuzzy_filter
         )
         parsed = self.parser.parse('aws cloudformation deploy --capabilities ')
         suggestions = self.completer.complete(parsed)
         self.assertIn(
-            CompletionResult('CAPABILITY_IAM', 0,
-                             False, None, None, 'CAPABILITY_IAM'),
-            suggestions)
+            CompletionResult(
+                'CAPABILITY_IAM', 0, False, None, None, 'CAPABILITY_IAM'
+            ),
+            suggestions,
+        )
         self.assertIn(
-            CompletionResult('CAPABILITY_NAMED_IAM', 0,
-                             False, None, None, 'CAPABILITY_NAMED_IAM'),
-            suggestions)
+            CompletionResult(
+                'CAPABILITY_NAMED_IAM',
+                0,
+                False,
+                None,
+                None,
+                'CAPABILITY_NAMED_IAM',
+            ),
+            suggestions,
+        )
 
     def test_return_suggestions_for_list_of_enum_with_prefix(self):
         self.completer = basic.ShorthandCompleter(
-            self.cli_fetcher,
-            response_filter=filters.fuzzy_filter
+            self.cli_fetcher, response_filter=filters.fuzzy_filter
         )
         parsed = self.parser.parse(
-            'aws cloudformation deploy --capabilities ca')
+            'aws cloudformation deploy --capabilities ca'
+        )
         suggestions = self.completer.complete(parsed)
         self.assertIn(
-            CompletionResult('CAPABILITY_IAM', 0,
-                             False, None, None, 'CAPABILITY_IAM'),
-            suggestions)
+            CompletionResult(
+                'CAPABILITY_IAM', 0, False, None, None, 'CAPABILITY_IAM'
+            ),
+            suggestions,
+        )
         self.assertIn(
-            CompletionResult('CAPABILITY_NAMED_IAM', 0,
-                             False, None, None, 'CAPABILITY_NAMED_IAM'),
-            suggestions)
+            CompletionResult(
+                'CAPABILITY_NAMED_IAM',
+                0,
+                False,
+                None,
+                None,
+                'CAPABILITY_NAMED_IAM',
+            ),
+            suggestions,
+        )
 
 
 class TestModelIndexCompleter(unittest.TestCase):
     def setUp(self):
         cli_driver = CLIDriver()
         self.cli_fetcher = fetcher.CliDriverFetcher(cli_driver)
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'endpoint-url'],
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'endpoint-url': ('endpoint-url', 'string', 'aws', '',
-                                         None, False, False),
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                },
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'endpoint-url'],
+                    },
+                },
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'endpoint-url': (
+                                'endpoint-url',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     }
-                }
+                },
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.completer = basic.ModelIndexCompleter(
-            self.index, cli_driver_fetcher=self.cli_fetcher)
+            self.index, cli_driver_fetcher=self.cli_fetcher
+        )
 
     def test_returns_help_text_for_params_in_global_scope(self):
         parsed = self.parser.parse('aws --re')
@@ -422,39 +608,52 @@ class TestQueryCompleter(unittest.TestCa
     def setUp(self):
         cli_driver = CLIDriver()
         self.cli_fetcher = fetcher.CliDriverFetcher(cli_driver)
-        index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('ec2', None)],
-                'aws.ec2': [('describe-instances', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['query', 'output'],
-                },
-                'aws.ec2': {
-                    'describe-instances': [],
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'query': (
-                            'query', 'string', 'aws', '', None, False,
-                            False),
-                        'output': (
-                            'output', 'string', 'aws', '', None, False,
-                            False),
-                    }
+        index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [('ec2', None)],
+                    'aws.ec2': [('describe-instances', None)],
+                },
+                'arg_names': {
+                    '': {
+                        'aws': ['query', 'output'],
+                    },
+                    'aws.ec2': {
+                        'describe-instances': [],
+                    },
+                },
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'query': (
+                                'query',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'output': (
+                                'output',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.ec2': {'describe-instances': {}},
                 },
-                'aws.ec2': {
-                    'describe-instances': {}
-                }
             }
-        })
+        )
         self.parser = parser.CLIParser(index)
         self.completer = basic.QueryCompleter(
-            self.cli_fetcher, response_filter=filters.fuzzy_filter)
+            self.cli_fetcher, response_filter=filters.fuzzy_filter
+        )
 
     def _assert_in_completions(self, name, completions):
         self.assertIn(name, [completion.name for completion in completions])
@@ -469,43 +668,50 @@ class TestQueryCompleter(unittest.TestCa
 
     def test_complete_on_brackets(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations[].')
+            'aws ec2 describe-instances --query Reservations[].'
+        )
         completions = self.completer.complete(parsed)
         self._assert_in_completions('Reservations[].Groups', completions)
 
     def test_complete_on_brackets_with_content(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations[65].')
+            'aws ec2 describe-instances --query Reservations[65].'
+        )
         completions = self.completer.complete(parsed)
         self._assert_in_completions('Reservations[65].Groups', completions)
 
     def test_filter_completions(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations[65].id')
+            'aws ec2 describe-instances --query Reservations[65].id'
+        )
         completions = self.completer.complete(parsed)
         self._assert_in_completions('Reservations[65].OwnerId', completions)
         self._assert_not_in_completions('Reservations[65].Groups', completions)
 
     def test_not_run_wo_cli_fetcher(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations[65].id')
+            'aws ec2 describe-instances --query Reservations[65].id'
+        )
         completer = basic.QueryCompleter()
         self.assertIsNone(completer.complete(parsed))
 
     def test_return_empty_list_when_query_invalid(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations{65].id')
+            'aws ec2 describe-instances --query Reservations{65].id'
+        )
         completions = self.completer.complete(parsed)
         self.assertEqual([], completions)
 
     def test_return_empty_list_if_output_is_list_and_expression_is_field(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations.')
+            'aws ec2 describe-instances --query Reservations.'
+        )
         completions = self.completer.complete(parsed)
         self.assertEqual([], completions)
 
     def test_return_empty_list_if_output_is_list_and_last_child_is_field(self):
         parsed = self.parser.parse(
-            'aws ec2 describe-instances --query Reservations[0].Groups.')
+            'aws ec2 describe-instances --query Reservations[0].Groups.'
+        )
         completions = self.completer.complete(parsed)
         self.assertEqual([], completions)
diff -pruN 2.23.6-1/tests/functional/autocomplete/test_completion_files.py 2.31.35-1/tests/functional/autocomplete/test_completion_files.py
--- 2.23.6-1/tests/functional/autocomplete/test_completion_files.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autocomplete/test_completion_files.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli import clidriver
-from jsonschema import Draft4Validator
 import pytest
+from jsonschema import Draft4Validator
 
+from awscli import clidriver
 
 COMPLETIONS_SCHEMA = {
     "type": "object",
@@ -35,8 +35,8 @@ COMPLETIONS_SCHEMA = {
                     },
                 },
                 "required": ["operation", "resourceIdentifier"],
-                "additionalProperties": False
-            }
+                "additionalProperties": False,
+            },
         },
         "operations": {
             "type": "object",
@@ -58,17 +58,17 @@ COMPLETIONS_SCHEMA = {
                                     },
                                     "resourceName": {"type": "string"},
                                     "resourceIdentifier": {"type": "string"},
-                                }
-                            }
+                                },
+                            },
                         }
                     },
                     "required": ["completions"],
                     "additionalProperties": False,
-                }
-            }
-        }
+                },
+            },
+        },
     },
-    "additionalProperties": False
+    "additionalProperties": False,
 }
 
 
@@ -81,13 +81,15 @@ def get_models_with_completions():
         service_model = loader.load_service_model(service_name, 'service-2')
         api_version = service_model['metadata']['apiVersion']
         completions = loader.load_service_model(
-            service_name, 'completions-1', api_version)
+            service_name, 'completions-1', api_version
+        )
         models.append((service_model, completions))
     return models
 
 
 @pytest.mark.parametrize(
-    "service_model, completions", get_models_with_completions())
+    "service_model, completions", get_models_with_completions()
+)
 def test_verify_generated_completions_are_valid(service_model, completions):
     _validate_schema(completions)
     # Validate that every operation named in the completions
diff -pruN 2.23.6-1/tests/functional/autocomplete/test_generator.py 2.31.35-1/tests/functional/autocomplete/test_generator.py
--- 2.23.6-1/tests/functional/autocomplete/test_generator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autocomplete/test_generator.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,9 +14,9 @@ import glob
 import os
 import tempfile
 
-from awscli.testutils import unittest
 from awscli.autocomplete import generator
 from awscli.autocomplete.local import model
+from awscli.testutils import unittest
 
 
 class TestCanGenerateEntireIndex(unittest.TestCase):
@@ -57,14 +57,15 @@ class TestCanGenerateEntireIndex(unittes
         self.assertIn('ec2', commands)
         self.assertIn('s3', commands)
         self.assertIn('s3api', commands)
-        global_args = self.model_index.arg_names(lineage=[],
-                                                 command_name='aws')
+        global_args = self.model_index.arg_names(
+            lineage=[], command_name='aws'
+        )
         self.assertIn('region', global_args)
         self.assertIn('endpoint-url', global_args)
 
         single_arg = self.model_index.get_argument_data(
-            lineage=[], command_name='aws',
-            arg_name='output')
+            lineage=[], command_name='aws', arg_name='output'
+        )
         self.assertEqual(single_arg.argname, 'output')
         self.assertEqual(single_arg.command, 'aws')
         self.assertEqual(single_arg.parent, '')
diff -pruN 2.23.6-1/tests/functional/autocomplete/test_main.py 2.31.35-1/tests/functional/autocomplete/test_main.py
--- 2.23.6-1/tests/functional/autocomplete/test_main.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autocomplete/test_main.py	2025-11-12 19:17:29.000000000 +0000
@@ -26,8 +26,10 @@ def test_smoke_test_completer():
 
     completions = _autocomplete('aws dynamodb describe-tab')
     completion_strings = [c.name for c in completions]
-    assert all(completion.startswith('describe-table')
-               for completion in completion_strings)
+    assert all(
+        completion.startswith('describe-table')
+        for completion in completion_strings
+    )
 
 
 def _autocomplete(command_line):
diff -pruN 2.23.6-1/tests/functional/autocomplete/test_server_index.py 2.31.35-1/tests/functional/autocomplete/test_server_index.py
--- 2.23.6-1/tests/functional/autocomplete/test_server_index.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autocomplete/test_server_index.py	2025-11-12 19:17:29.000000000 +0000
@@ -2,9 +2,9 @@ import os
 
 from awscli import clidriver
 from awscli.autocomplete import db, generator
+from awscli.autocomplete.local.indexer import ModelIndexer
 from awscli.autocomplete.serverside import model
 from awscli.autocomplete.serverside.indexer import APICallIndexer
-from awscli.autocomplete.local.indexer import ModelIndexer
 from awscli.testutils import unittest
 
 
@@ -19,12 +19,15 @@ class TestCanGenerateServerIndex(unittes
     def setUpClass(cls):
         cls.db_connection = db.DatabaseConnection(":memory:")
         index_generator = generator.IndexGenerator(
-            [ModelIndexer(cls.db_connection),
-             APICallIndexer(cls.db_connection)],
+            [
+                ModelIndexer(cls.db_connection),
+                APICallIndexer(cls.db_connection),
+            ],
         )
         driver = clidriver.create_clidriver()
-        driver.session.register('building-command-table.main',
-                                _ddb_only_command_table)
+        driver.session.register(
+            'building-command-table.main', _ddb_only_command_table
+        )
         index_generator.generate_index(driver)
 
     def test_can_query_model_from_index(self):
@@ -32,37 +35,55 @@ class TestCanGenerateServerIndex(unittes
         # We'll query a few lookups to ensure that we indexed them
         # correctly.
         result = lookup.get_server_completion_data(
-            ['aws', 'dynamodb'], 'delete-table', 'table-name')
+            ['aws', 'dynamodb'], 'delete-table', 'table-name'
+        )
         self.assertEqual(
             result,
-            {'completions': [
-                {'jp_expr': 'TableNames[]',
-                 'operation': 'list_tables',
-                 'parameters': {},
-                 'service': 'dynamodb'}]}
+            {
+                'completions': [
+                    {
+                        'jp_expr': 'TableNames[]',
+                        'operation': 'list_tables',
+                        'parameters': {},
+                        'service': 'dynamodb',
+                    }
+                ]
+            },
         )
         result = lookup.get_server_completion_data(
-            ['aws', 'dynamodb'], 'update-global-table', 'global-table-name')
+            ['aws', 'dynamodb'], 'update-global-table', 'global-table-name'
+        )
         self.assertEqual(
             result,
-            {'completions': [
-                {'jp_expr': 'GlobalTables[].GlobalTableName',
-                 'operation': 'list_global_tables',
-                 'parameters': {},
-                 'service': 'dynamodb'}]}
+            {
+                'completions': [
+                    {
+                        'jp_expr': 'GlobalTables[].GlobalTableName',
+                        'operation': 'list_global_tables',
+                        'parameters': {},
+                        'service': 'dynamodb',
+                    }
+                ]
+            },
         )
 
     def test_returns_none_if_no_lookup_data_found(self):
         lookup = model.DBCompletionLookup(self.db_connection)
         self.assertIsNone(
             lookup.get_server_completion_data(
-                ['aws', 'dynamodb'], 'delete-table', 'unknown-param'))
+                ['aws', 'dynamodb'], 'delete-table', 'unknown-param'
+            )
+        )
         self.assertIsNone(
             lookup.get_server_completion_data(
-                ['aws', 'dynamodb'], 'unknown-operation', 'foo'))
+                ['aws', 'dynamodb'], 'unknown-operation', 'foo'
+            )
+        )
         self.assertIsNone(
             lookup.get_server_completion_data(
-                ['aws', 'unknown-service'], 'unknown-operation', 'foo'))
+                ['aws', 'unknown-service'], 'unknown-operation', 'foo'
+            )
+        )
 
 
 class TestCanHandleNoCompletionData(unittest.TestCase):
@@ -80,22 +101,27 @@ class TestCanHandleNoCompletionData(unit
 
     def test_no_errors_when_missing_completion_data(self):
         index_generator = generator.IndexGenerator(
-            [ModelIndexer(self.db_connection),
-             APICallIndexer(self.db_connection)],
+            [
+                ModelIndexer(self.db_connection),
+                APICallIndexer(self.db_connection),
+            ],
         )
         driver = clidriver.create_clidriver()
         # We're going to remove the CLI data path from the loader.
         # This will result in the loader not being able to find any
         # completion data, which allows us to verify the behavior when
         # there's no completion data.
-        driver.session.register('building-command-table.main',
-                                _ddb_only_command_table)
-        driver.session.register('building-command-table.dynamodb',
-                                self._disable_cli_loaders)
+        driver.session.register(
+            'building-command-table.main', _ddb_only_command_table
+        )
+        driver.session.register(
+            'building-command-table.dynamodb', self._disable_cli_loaders
+        )
         index_generator.generate_index(driver)
         # We shouldn't get any data now because we couldn't load
         # completion data.
         lookup = model.DBCompletionLookup(self.db_connection)
         result = lookup.get_server_completion_data(
-            ['aws', 'dynamodb'], 'delete-table', 'table-name')
+            ['aws', 'dynamodb'], 'delete-table', 'table-name'
+        )
         self.assertIsNone(result)
diff -pruN 2.23.6-1/tests/functional/autoprompt/test_autoprompt.py 2.31.35-1/tests/functional/autoprompt/test_autoprompt.py
--- 2.23.6-1/tests/functional/autoprompt/test_autoprompt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autoprompt/test_autoprompt.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,9 @@
 import os
+
 import pytest
 
 from awscli.clidriver import create_clidriver
-from awscli.testutils import mock, FileCreator
+from awscli.testutils import FileCreator, mock
 
 
 def set_up(config, env_var):
@@ -14,8 +15,9 @@ def set_up(config, env_var):
         'AWS_SECRET_ACCESS_KEY': 'secret_key',
         'AWS_CONFIG_FILE': '',
     }
-    environ = set_config_file_contents(environ=environ, config=config,
-                                       files=files)
+    environ = set_config_file_contents(
+        environ=environ, config=config, files=files
+    )
     environ = set_env_var(environ=environ, env_var=env_var)
     environ_patch = mock.patch('os.environ', environ)
     environ_patch.start()
@@ -24,15 +26,10 @@ def set_up(config, env_var):
 
 
 def set_config_file_contents(environ, files, config=None):
-    config_contents = ('')
+    config_contents = ''
     if config is not None:
-        config_contents = (
-            '[default]\n'
-            f'cli_auto_prompt = {config}\n'
-        )
-    environ['AWS_CONFIG_FILE'] = files.create_file(
-        'config', config_contents
-    )
+        config_contents = '[default]\n' f'cli_auto_prompt = {config}\n'
+    environ['AWS_CONFIG_FILE'] = files.create_file('config', config_contents)
     return environ
 
 
@@ -54,7 +51,7 @@ def set_env_var(environ, env_var=None):
         (None, 'on', 'on'),
         (None, 'off', 'off'),
         (None, None, 'off'),
-    ]
+    ],
 )
 def test_autoprompt_config_provider(config, env_var, expected_result):
     try:
diff -pruN 2.23.6-1/tests/functional/autoprompt/test_doc.py 2.31.35-1/tests/functional/autoprompt/test_doc.py
--- 2.23.6-1/tests/functional/autoprompt/test_doc.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autoprompt/test_doc.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.clidriver import create_clidriver
 from awscli.autocomplete import parser
 from awscli.autoprompt.doc import DocsGetter
-from awscli.testutils import unittest, mock
-
+from awscli.clidriver import create_clidriver
+from awscli.testutils import mock, unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
@@ -22,26 +21,35 @@ class TestDocsGetter(unittest.TestCase):
     def setUp(self):
         self.driver = create_clidriver()
         self.docs_getter = DocsGetter(self.driver)
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('ec2', None)],
-                'aws.ec2': [('describe-instances', None)],
-            },
-            'arg_names': {
-                '': {'aws': ['region']},
-                'aws.ec2': {'describe-instances': []},
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                    }
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [('ec2', None)],
+                    'aws.ec2': [('describe-instances', None)],
+                },
+                'arg_names': {
+                    '': {'aws': ['region']},
+                    'aws.ec2': {'describe-instances': []},
+                },
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.ec2': {'describe-instances': {}},
                 },
-                'aws.ec2': {'describe-instances': {}}
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
 
     def test_get_service_command_docs(self):
diff -pruN 2.23.6-1/tests/functional/autoprompt/test_prompttoolkit.py 2.31.35-1/tests/functional/autoprompt/test_prompttoolkit.py
--- 2.23.6-1/tests/functional/autoprompt/test_prompttoolkit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autoprompt/test_prompttoolkit.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,16 +17,17 @@ import awscrt.io
 import pytest
 from prompt_toolkit.keys import Keys
 
-from awscli.autocomplete.main import create_autocompleter
-from awscli.autocomplete import generator, filters, parser, db
+from awscli.autocomplete import db, filters, generator, parser
 from awscli.autocomplete.local import indexer, model
-from awscli.clidriver import create_clidriver
+from awscli.autocomplete.main import create_autocompleter
 from awscli.autoprompt.factory import PromptToolkitFactory
+from awscli.autoprompt.history import HistoryDriver
 from awscli.autoprompt.prompttoolkit import (
-    PromptToolkitCompleter, PromptToolkitPrompter
+    PromptToolkitCompleter,
+    PromptToolkitPrompter,
 )
-from awscli.autoprompt.history import HistoryDriver
-from awscli.testutils import mock, FileCreator, cd
+from awscli.clidriver import create_clidriver
+from awscli.testutils import FileCreator, cd, mock
 from tests import PromptToolkitAppRunner
 
 
@@ -43,8 +44,9 @@ def _generate_index_if_needed(db_connect
             [indexer.ModelIndexer(db_connection)],
         )
         driver = create_clidriver()
-        driver.session.register('building-command-table.main',
-                                _cloudwatch_only_command_table)
+        driver.session.register(
+            'building-command-table.main', _cloudwatch_only_command_table
+        )
         index_generator.generate_index(driver)
 
 
@@ -79,18 +81,18 @@ def history_file(files):
         'commands': [
             'accessanalyzer update-findings',
             'cloudwatch describe-alarms',
-            's3 ls'
-        ]
+            's3 ls',
+        ],
     }
-    return files.create_file(
-        'prompt_history.json', json.dumps(history))
+    return files.create_file('prompt_history.json', json.dumps(history))
 
 
 @pytest.fixture
 def prompter(model_index, history_file, ptk_app_session):
     cli_parser = parser.CLIParser(model.ModelIndex(model_index))
     completion_source = create_autocompleter(
-        model_index, response_filter=filters.fuzzy_filter)
+        model_index, response_filter=filters.fuzzy_filter
+    )
     completer = PromptToolkitCompleter(completion_source)
     history_driver = HistoryDriver(history_file)
     driver = create_clidriver()
@@ -107,8 +109,7 @@ def prompter(model_index, history_file,
 
 @pytest.fixture
 def app_runner(prompter):
-    return PromptToolkitAppRunner(
-        app=prompter.app, pre_run=prompter.pre_run)
+    return PromptToolkitAppRunner(app=prompter.app, pre_run=prompter.pre_run)
 
 
 class BasicPromptToolkitTest:
@@ -138,29 +139,35 @@ class TestPromptToolkitPrompterBuffer:
     previously been known to produce unexpected behavior.
 
     """
+
     @pytest.mark.parametrize(
         'args,expected_input_buffer_text',
         [
             (['cloudwatch', 'fake'], 'cloudwatch fake '),
             (['cloudwatch'], 'cloudwatch '),
             (['cloud'], 'cloud'),
-            (['s3', 'mv', '/path/to/file/1', 's3://path/to/file/2'],
-             's3 mv /path/to/file/1 s3://path/to/file/2 '),
+            (
+                ['s3', 'mv', '/path/to/file/1', 's3://path/to/file/2'],
+                's3 mv /path/to/file/1 s3://path/to/file/2 ',
+            ),
             (['s3', 'ls'], 's3 ls '),
             (['cloudwatch', 'desc'], 'cloudwatch desc'),
             (['s3', 'ls '], 's3 ls '),
-            (['cloudwatch', 'fake', '--output'],
-             'cloudwatch fake --output '),
-            (['cloudwatch', 'describe-alarms', '--output'],
-             'cloudwatch describe-alarms --output '),
+            (['cloudwatch', 'fake', '--output'], 'cloudwatch fake --output '),
+            (
+                ['cloudwatch', 'describe-alarms', '--output'],
+                'cloudwatch describe-alarms --output ',
+            ),
             ([' '], ' '),
-        ]
+        ],
     )
     def test_input_buffer_initialization(
-            self, prompter, args, expected_input_buffer_text):
+        self, prompter, args, expected_input_buffer_text
+    ):
         prompter.args = args
         app_runner = PromptToolkitAppRunner(
-            app=prompter.app, pre_run=prompter.pre_run)
+            app=prompter.app, pre_run=prompter.pre_run
+        )
         with app_runner.run_app_in_thread():
             actual_input_text = prompter.input_buffer.document.text
             assert actual_input_text == expected_input_buffer_text
@@ -169,7 +176,8 @@ class TestPromptToolkitPrompterBuffer:
         original_args = ['iam', 'create-role', '--description', 'With spaces']
         prompter.args = original_args
         with app_runner.run_app_in_thread(
-                target=prompter.prompt_for_args, args=(original_args,)) as ctx:
+            target=prompter.prompt_for_args, args=(original_args,)
+        ) as ctx:
             assert prompter.input_buffer.document.text == (
                 "iam create-role --description 'With spaces' "
             )
@@ -184,8 +192,12 @@ class TestPromptToolkitDocBuffer(BasicPr
         assert not app.show_doc
 
     def assert_doc_panel_cursor_position(self, app, expected_row):
-        assert app.layout.get_buffer_by_name(
-            'doc_buffer').document.cursor_position_row == expected_row
+        assert (
+            app.layout.get_buffer_by_name(
+                'doc_buffer'
+            ).document.cursor_position_row
+            == expected_row
+        )
 
     def test_doc_buffer_not_shown_on_start_and_not_focusable(self, app_runner):
         with app_runner.run_app_in_thread():
@@ -211,24 +223,28 @@ class TestPromptToolkitDocBuffer(BasicPr
             self.assert_current_buffer(app_runner.app, 'input_buffer')
 
     def test_doc_buffer_keeps_position_if_content_dont_change(
-            self, prompter, app_runner):
+        self, prompter, app_runner
+    ):
         prompter.args = ['cloudwatch', 'describe-alarms']
         with app_runner.run_app_in_thread():
             # Open the doc panel, focus on it, and go to its top
             app_runner.feed_input(Keys.F3, Keys.F2, 'g')
             self.assert_doc_panel_cursor_position(
-                app_runner.app, expected_row=0)
+                app_runner.app, expected_row=0
+            )
             # Move three rows down
             app_runner.feed_input('j', 'j', 'j')
             self.assert_doc_panel_cursor_position(
-                app_runner.app, expected_row=3)
+                app_runner.app, expected_row=3
+            )
             # Focus on the input buffer
             app_runner.feed_input('q')
             # Add parameters to the currently inputted command
             app_runner.feed_input('--alarm-names')
             # The doc position should not have moved
             self.assert_doc_panel_cursor_position(
-                app_runner.app, expected_row=3)
+                app_runner.app, expected_row=3
+            )
 
     @pytest.mark.parametrize(
         'args,expected_docs',
@@ -238,14 +254,17 @@ class TestPromptToolkitDocBuffer(BasicPr
             (['cloudwatch'], 'Amazon CloudWatch'),
             (['cloudwatch', 'fake'], 'Amazon CloudWatch'),
             (['cloudwatch', 'describe-alarms '], 'Retrieves the specified'),
-            (['cloudwatch', 'describe-alarms', '--alarm-names'],
-             'The names of the alarms'),
-        ]
+            (
+                ['cloudwatch', 'describe-alarms', '--alarm-names'],
+                'The names of the alarms',
+            ),
+        ],
     )
     def test_doc_panel_content(self, prompter, args, expected_docs):
         prompter.args = args
         app_runner = PromptToolkitAppRunner(
-            app=prompter.app, pre_run=prompter.pre_run)
+            app=prompter.app, pre_run=prompter.pre_run
+        )
         with app_runner.run_app_in_thread():
             assert expected_docs in prompter.doc_buffer.document.text
 
@@ -262,7 +281,8 @@ class TestHistoryMode(BasicPromptToolkit
         assert actual == expected
 
     def test_history_mode_disabled_on_start_and_switched_by_control_R(
-            self, app_runner):
+        self, app_runner
+    ):
         with app_runner.run_app_in_thread():
             self.assert_history_mode_is_disabled(app_runner.app)
             app_runner.feed_input(Keys.ControlR)
@@ -271,30 +291,30 @@ class TestHistoryMode(BasicPromptToolkit
             self.assert_history_mode_is_disabled(app_runner.app)
 
     def test_choose_and_disable_history_mode_with_enter(
-            self, app_runner, prompter):
+        self, app_runner, prompter
+    ):
         prompter.args = ['s3']
         with app_runner.run_app_in_thread():
             self.assert_history_mode_is_disabled(app_runner.app)
             app_runner.feed_input(Keys.ControlR)
             self.assert_history_mode_is_enabled(app_runner.app)
             app_runner.feed_input(Keys.Down)
-            self.assert_selected_history_completion(
-                app_runner.app, 's3 ls')
+            self.assert_selected_history_completion(app_runner.app, 's3 ls')
             app_runner.feed_input(Keys.Enter)
             self.assert_history_mode_is_disabled(app_runner.app)
             self.assert_current_buffer(app_runner.app, 'input_buffer')
             self.assert_current_buffer_text(app_runner.app, 's3 ls')
 
     def test_choose_and_disable_history_mode_with_space(
-            self, app_runner, prompter):
+        self, app_runner, prompter
+    ):
         prompter.args = ['s3']
         with app_runner.run_app_in_thread():
             self.assert_history_mode_is_disabled(app_runner.app)
             app_runner.feed_input(Keys.ControlR)
             self.assert_history_mode_is_enabled(app_runner.app)
             app_runner.feed_input(Keys.Down)
-            self.assert_selected_history_completion(
-                app_runner.app, 's3 ls')
+            self.assert_selected_history_completion(app_runner.app, 's3 ls')
             app_runner.feed_input(' ')
             self.assert_history_mode_is_disabled(app_runner.app)
             self.assert_current_buffer(app_runner.app, 'input_buffer')
@@ -306,8 +326,9 @@ class TestCompletions(BasicPromptToolkit
         prompter.args = ['c']
         with app_runner.run_app_in_thread():
             app_runner.wait_for_completions_on_current_buffer()
-            first_completion = app_runner.app.current_buffer.\
-                complete_state.completions[0]
+            first_completion = (
+                app_runner.app.current_buffer.complete_state.completions[0]
+            )
             assert 'Amazon CloudWatch' in first_completion.display_meta_text
 
     def test_switch_to_multicolumn_mode(self, app_runner, prompter):
@@ -322,7 +343,8 @@ class TestCompletions(BasicPromptToolkit
 
 class TestHelpPanel(BasicPromptToolkitTest):
     def test_help_panel_disabled_on_start_and_appear_on_F1(
-            self, app_runner, prompter):
+        self, app_runner, prompter
+    ):
         with app_runner.run_app_in_thread():
             assert not app_runner.app.show_help
             app_runner.feed_input(Keys.F1)
@@ -330,8 +352,7 @@ class TestHelpPanel(BasicPromptToolkitTe
             app_runner.feed_input(Keys.F1)
             assert not app_runner.app.show_help
 
-    def test_show_correct_help_panel(
-            self, app_runner, prompter):
+    def test_show_correct_help_panel(self, app_runner, prompter):
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F1)
             self.assert_buffer_is_visible(app_runner.app, 'help_input')
@@ -343,8 +364,7 @@ class TestHelpPanel(BasicPromptToolkitTe
             self.assert_buffer_is_visible(app_runner.app, 'help_doc')
             self.assert_buffer_is_not_visible(app_runner.app, 'help_input')
 
-    def test_toolbar_hides_when_help_panel_visible(
-            self, app_runner, prompter):
+    def test_toolbar_hides_when_help_panel_visible(self, app_runner, prompter):
         with app_runner.run_app_in_thread():
             self.assert_buffer_is_visible(app_runner.app, 'toolbar_input')
             app_runner.feed_input(Keys.F1)
@@ -354,25 +374,23 @@ class TestHelpPanel(BasicPromptToolkitTe
 
 class TestDebugPanel(BasicPromptToolkitTest):
     def test_debug_panel_not_visible_in_non_debug_mode(
-            self, app_runner, prompter):
+        self, app_runner, prompter
+    ):
         with app_runner.run_app_in_thread():
             self.assert_buffer_is_not_visible(app_runner.app, 'debug_buffer')
 
-    def test_debug_panel_visible_in_debug_mode(
-            self, app_runner, prompter):
+    def test_debug_panel_visible_in_debug_mode(self, app_runner, prompter):
         prompter.app.debug = True
         with app_runner.run_app_in_thread():
             self.assert_buffer_is_visible(app_runner.app, 'debug_buffer')
 
-    def test_open_save_dialog_on_control_s(
-            self, app_runner, prompter):
+    def test_open_save_dialog_on_control_s(self, app_runner, prompter):
         prompter.app.debug = True
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.ControlS)
             self.assert_current_buffer_text(app_runner.app, 'prompt_debug.log')
 
-    def test_can_save_log_file(
-            self, app_runner, prompter, files):
+    def test_can_save_log_file(self, app_runner, prompter, files):
         prompter.app.debug = True
         log_file_path = files.full_path('prompt_debug.log')
         with cd(files.rootdir):
@@ -381,8 +399,7 @@ class TestDebugPanel(BasicPromptToolkitT
                 app_runner.feed_input(Keys.Enter)
         assert os.path.exists(log_file_path)
 
-    def test_can_switch_focus_between_panels(
-            self, app_runner, prompter):
+    def test_can_switch_focus_between_panels(self, app_runner, prompter):
         prompter.app.debug = True
         with app_runner.run_app_in_thread():
             self.assert_current_buffer(app_runner.app, 'input_buffer')
@@ -391,15 +408,17 @@ class TestDebugPanel(BasicPromptToolkitT
             app_runner.feed_input(Keys.F2)
             self.assert_current_buffer(app_runner.app, 'input_buffer')
 
-    @mock.patch('awscrt.io.init_logging')
+    @mock.patch('awscrt.io.set_log_level')
     def test_debug_mode_does_not_allow_crt_logging(
-            self, mock_init_logging, app_runner, prompter):
+        self, mock_init_logging, app_runner, prompter
+    ):
         args = ['cloudwatch', 'describe-alarms', '--debug']
         with app_runner.run_app_in_thread(
-                target=prompter.prompt_for_args, args=(args,)):
+            target=prompter.prompt_for_args, args=(args,)
+        ):
             assert app_runner.app.debug
         mock_init_logging.assert_called_with(
-            awscrt.io.LogLevel.NoLogs, 'stderr'
+            awscrt.io.LogLevel.NoLogs,
         )
 
 
@@ -416,7 +435,8 @@ class TestOutputPanel(BasicPromptToolkit
             self.assert_buffer_is_not_visible(app_runner.app, 'output_buffer')
 
     def test_output_panel_and_doc_panel_can_be_visible_together(
-            self, app_runner):
+        self, app_runner
+    ):
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F5)
             self.assert_buffer_is_visible(app_runner.app, 'output_buffer')
diff -pruN 2.23.6-1/tests/functional/autoscale/test_terminate_instance_in_autoscaling_group.py 2.31.35-1/tests/functional/autoscale/test_terminate_instance_in_autoscaling_group.py
--- 2.23.6-1/tests/functional/autoscale/test_terminate_instance_in_autoscaling_group.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/autoscale/test_terminate_instance_in_autoscaling_group.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,23 +15,26 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestTerminateInstanceInAutoscalingGroup(BaseAWSCommandParamsTest):
-
     PREFIX = 'autoscaling terminate-instance-in-auto-scaling-group'
 
     def test_true(self):
         cmdline = self.PREFIX
         cmdline += ' --instance-id i-12345678'
         cmdline += ' --should-decrement-desired-capacity'
-        params = {'InstanceId': 'i-12345678',
-                  'ShouldDecrementDesiredCapacity': True}
+        params = {
+            'InstanceId': 'i-12345678',
+            'ShouldDecrementDesiredCapacity': True,
+        }
         self.assert_params_for_cmd(cmdline, params)
 
     def test_false(self):
         cmdline = self.PREFIX
         cmdline += ' --instance-id i-12345678'
         cmdline += ' --no-should-decrement-desired-capacity'
-        params = {'InstanceId': 'i-12345678',
-                  'ShouldDecrementDesiredCapacity': False}
+        params = {
+            'InstanceId': 'i-12345678',
+            'ShouldDecrementDesiredCapacity': False,
+        }
         self.assert_params_for_cmd(cmdline, params)
 
     def test_last_arg_wins(self):
@@ -41,6 +44,8 @@ class TestTerminateInstanceInAutoscaling
         cmdline += ' --no-should-decrement-desired-capacity'
         # Since the --no-should-decrement-desired-capacity was
         # was added last, it wins.
-        params = {'InstanceId': 'i-12345678',
-                  'ShouldDecrementDesiredCapacity': False}
+        params = {
+            'InstanceId': 'i-12345678',
+            'ShouldDecrementDesiredCapacity': False,
+        }
         self.assert_params_for_cmd(cmdline, params)
diff -pruN 2.23.6-1/tests/functional/awslambda/test_function.py 2.31.35-1/tests/functional/awslambda/test_function.py
--- 2.23.6-1/tests/functional/awslambda/test_function.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/awslambda/test_function.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,17 +14,14 @@ import os
 import zipfile
 from contextlib import closing
 
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class BaseLambdaTests(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(BaseLambdaTests, self).setUp()
         self.files = FileCreator()
-        self.temp_file = self.files.create_file(
-            'foo', 'mycontents')
+        self.temp_file = self.files.create_file('foo', 'mycontents')
         self.zip_file = os.path.join(self.files.rootdir, 'foo.zip')
         with closing(zipfile.ZipFile(self.zip_file, 'w')) as f:
             f.write(self.temp_file)
@@ -37,7 +34,6 @@ class BaseLambdaTests(BaseAWSCommandPara
 
 
 class TestCreateFunction(BaseLambdaTests):
-
     prefix = 'lambda create-function'
 
     def test_create_function_with_file(self):
@@ -50,7 +46,7 @@ class TestCreateFunction(BaseLambdaTests
             'Runtime': 'myruntime',
             'Role': 'myrole',
             'Handler': 'myhandler',
-            'Code': {'ZipFile': self.zip_file_contents}
+            'Code': {'ZipFile': self.zip_file_contents},
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -64,9 +60,11 @@ class TestCreateFunction(BaseLambdaTests
             'Runtime': 'myruntime',
             'Role': 'myrole',
             'Handler': 'myhandler',
-            'Code': {'S3Bucket': 'mybucket',
-                     'S3Key': 'mykey',
-                     'S3ObjectVersion': 'vs'}
+            'Code': {
+                'S3Bucket': 'mybucket',
+                'S3Key': 'mykey',
+                'S3ObjectVersion': 'vs',
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -81,10 +79,12 @@ class TestCreateFunction(BaseLambdaTests
             'Runtime': 'myruntime',
             'Role': 'myrole',
             'Handler': 'myhandler',
-            'Code': {'S3Bucket': 'mybucket',
-                     'S3Key': 'mykey',
-                     'S3ObjectVersion': 'vs',
-                     'ZipFile': self.zip_file_contents}
+            'Code': {
+                'S3Bucket': 'mybucket',
+                'S3Key': 'mykey',
+                'S3ObjectVersion': 'vs',
+                'ZipFile': self.zip_file_contents,
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -95,8 +95,9 @@ class TestCreateFunction(BaseLambdaTests
         cmdline += ' --code S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs,'
         cmdline += 'ZipFile=foo'
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=252)
-        self.assertIn('ZipFile cannot be provided as part of the --code',
-                      stderr)
+        self.assertIn(
+            'ZipFile cannot be provided as part of the --code', stderr
+        )
 
     def test_create_function_with_invalid_file_contents(self):
         cmdline = self.prefix
@@ -121,7 +122,6 @@ class TestCreateFunction(BaseLambdaTests
 
 
 class TestPublishLayerVersion(BaseLambdaTests):
-
     prefix = 'lambda publish-layer-version'
 
     def test_publish_layer_version_with_file(self):
@@ -130,7 +130,7 @@ class TestPublishLayerVersion(BaseLambda
         cmdline += ' --zip-file fileb://%s' % self.zip_file
         result = {
             'LayerName': 'mylayer',
-            'Content': {'ZipFile': self.zip_file_contents}
+            'Content': {'ZipFile': self.zip_file_contents},
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -141,9 +141,11 @@ class TestPublishLayerVersion(BaseLambda
         cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs'
         result = {
             'LayerName': 'mylayer',
-            'Content': {'S3Bucket': 'mybucket',
-                        'S3Key': 'mykey',
-                        'S3ObjectVersion': 'vs'}
+            'Content': {
+                'S3Bucket': 'mybucket',
+                'S3Key': 'mykey',
+                'S3ObjectVersion': 'vs',
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -155,10 +157,12 @@ class TestPublishLayerVersion(BaseLambda
         cmdline += ' --zip-file fileb://%s' % self.zip_file
         result = {
             'LayerName': 'mylayer',
-            'Content': {'S3Bucket': 'mybucket',
-                        'S3Key': 'mykey',
-                        'S3ObjectVersion': 'vs',
-                        'ZipFile': self.zip_file_contents}
+            'Content': {
+                'S3Bucket': 'mybucket',
+                'S3Key': 'mykey',
+                'S3ObjectVersion': 'vs',
+                'ZipFile': self.zip_file_contents,
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -169,8 +173,9 @@ class TestPublishLayerVersion(BaseLambda
         cmdline += ' S3Bucket=mybucket,S3Key=mykey,S3ObjectVersion=vs,'
         cmdline += 'ZipFile=foo'
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=252)
-        self.assertIn('ZipFile cannot be provided as part of the --content',
-                      stderr)
+        self.assertIn(
+            'ZipFile cannot be provided as part of the --content', stderr
+        )
 
     def test_publish_layer_version_with_invalid_file_contents(self):
         cmdline = self.prefix
@@ -193,7 +198,6 @@ class TestPublishLayerVersion(BaseLambda
 
 
 class TestUpdateFunctionCode(BaseLambdaTests):
-
     prefix = 'lambda update-function-code'
 
     def test_not_using_fileb_prefix(self):
diff -pruN 2.23.6-1/tests/functional/botocore/__init__.py 2.31.35-1/tests/functional/botocore/__init__.py
--- 2.23.6-1/tests/functional/botocore/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,6 +14,7 @@ import os
 import uuid
 
 import botocore
+
 from tests import BaseEnvVar
 
 _ORIGINAL = os.environ.copy()
@@ -31,7 +32,8 @@ _CREDENTIAL_ENV_VARS = [
 ]
 
 TEST_MODELS_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), 'models',
+    os.path.dirname(os.path.abspath(__file__)),
+    'models',
 )
 
 
@@ -52,7 +54,7 @@ def _create_functional_test_loader():
 
 class FunctionalSessionTest(BaseEnvVar):
     def setUp(self, **environ):
-        super(FunctionalSessionTest, self).setUp()
+        super().setUp()
         self.environ['AWS_ACCESS_KEY_ID'] = 'access_key'
         self.environ['AWS_SECRET_ACCESS_KEY'] = 'secret_key'
         self.environ['AWS_CONFIG_FILE'] = 'no-exist-foo'
diff -pruN 2.23.6-1/tests/functional/botocore/configured_endpoint_urls/test_configured_endpoint_url.py 2.31.35-1/tests/functional/botocore/configured_endpoint_urls/test_configured_endpoint_url.py
--- 2.23.6-1/tests/functional/botocore/configured_endpoint_urls/test_configured_endpoint_url.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/configured_endpoint_urls/test_configured_endpoint_url.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,12 +15,12 @@ import json
 from pathlib import Path
 from unittest import mock
 
-import pytest
-
 import botocore.configprovider
 import botocore.utils
+import pytest
 from botocore.compat import urlsplit
 from botocore.config import Config
+
 from tests import ClientHTTPStubber
 
 ENDPOINT_TESTDATA_FILE = Path(__file__).parent / "profile-tests.json"
diff -pruN 2.23.6-1/tests/functional/botocore/csm/test_monitoring.py 2.31.35-1/tests/functional/botocore/csm/test_monitoring.py
--- 2.23.6-1/tests/functional/botocore/csm/test_monitoring.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/csm/test_monitoring.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,15 +18,13 @@ import os
 import socket
 import threading
 
-import pytest
-
-from tests import mock, temporary_file
-from tests import ClientHTTPStubber
-from botocore import xform_name
-import botocore.session
 import botocore.config
 import botocore.exceptions
+import botocore.session
+import pytest
+from botocore import xform_name
 
+from tests import ClientHTTPStubber, mock, temporary_file
 
 logger = logging.getLogger(__name__)
 
@@ -43,7 +41,10 @@ class NonRetryableException(Exception):
 
 
 EXPECTED_EXCEPTIONS_THROWN = (
-    botocore.exceptions.ClientError, NonRetryableException, RetryableException)
+    botocore.exceptions.ClientError,
+    NonRetryableException,
+    RetryableException,
+)
 
 
 def _load_test_cases():
@@ -84,14 +85,15 @@ def _configured_session(case_configurati
         'AWS_SECRET_ACCESS_KEY': 'secret-key',
         'AWS_DEFAULT_REGION': case_configuration['region'],
         'AWS_DATA_PATH': DATA_DIR,
-        'AWS_CSM_PORT': listener_port
+        'AWS_CSM_PORT': listener_port,
     }
     if 'sessionToken' in case_configuration:
         environ['AWS_SESSION_TOKEN'] = case_configuration['sessionToken']
     environ.update(case_configuration['environmentVariables'])
     with temporary_file('w') as f:
         _setup_shared_config(
-            f, case_configuration['sharedConfigFile'], environ)
+            f, case_configuration['sharedConfigFile'], environ
+        )
         with mock.patch('os.environ', environ):
             session = botocore.session.Session()
             if 'maxRetries' in case_configuration:
@@ -102,21 +104,23 @@ def _configured_session(case_configurati
 def _setup_shared_config(fileobj, shared_config_options, environ):
     fileobj.write('[default]\n')
     for key, value in shared_config_options.items():
-        fileobj.write('%s = %s\n' % (key, value))
+        fileobj.write(f'{key} = {value}\n')
     fileobj.flush()
     environ['AWS_CONFIG_FILE'] = fileobj.name
 
 
 def _setup_max_retry_attempts(session, case_configuration):
     config = botocore.config.Config(
-        retries={'max_attempts': case_configuration['maxRetries'] + 1})
+        retries={'max_attempts': case_configuration['maxRetries'] + 1}
+    )
     session.set_default_client_config(config)
 
 
 def _run_test_case(case):
     with MonitoringListener() as listener:
         with _configured_session(
-                case['configuration'], listener.port) as session:
+            case['configuration'], listener.port
+        ) as session:
             for api_call in case['apiCalls']:
                 _make_api_call(session, api_call)
     assert listener.received_events == case['expectedMonitoringEvents']
@@ -124,7 +128,8 @@ def _run_test_case(case):
 
 def _make_api_call(session, api_call):
     client = session.create_client(
-        api_call['serviceId'].lower().replace(' ', ''))
+        api_call['serviceId'].lower().replace(' ', '')
+    )
     operation_name = api_call['operationName']
     client_method = getattr(client, xform_name(operation_name))
     with _stubbed_http_layer(client, api_call['attemptResponses']):
@@ -146,8 +151,7 @@ def _add_stubbed_responses(stubber, atte
         if 'sdkException' in attempt_response:
             sdk_exception = attempt_response['sdkException']
             _add_sdk_exception(
-                stubber, sdk_exception['message'],
-                sdk_exception['isRetryable']
+                stubber, sdk_exception['message'], sdk_exception['isRetryable']
             )
         else:
             _add_stubbed_response(stubber, attempt_response)
@@ -166,7 +170,7 @@ def _add_stubbed_response(stubber, attem
     if 'errorCode' in attempt_response:
         error = {
             '__type': attempt_response['errorCode'],
-            'message': attempt_response['errorMessage']
+            'message': attempt_response['errorMessage'],
         }
         content = json.dumps(error).encode('utf-8')
     else:
diff -pruN 2.23.6-1/tests/functional/botocore/docs/__init__.py 2.31.35-1/tests/functional/botocore/docs/__init__.py
--- 2.23.6-1/tests/functional/botocore/docs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-from botocore.session import get_session
 from botocore.docs.service import ServiceDocumenter
+from botocore.session import get_session
+
+from tests import unittest
 
 
 class BaseDocsFunctionalTest(unittest.TestCase):
@@ -28,7 +29,7 @@ class BaseDocsFunctionalTest(unittest.Te
         for line in lines:
             self.assertIn(line, contents)
             beginning = contents.find(line)
-            contents = contents[(beginning + len(line)):]
+            contents = contents[(beginning + len(line)) :]
 
     def assert_not_contains_line(self, line, contents):
         contents = contents.decode('utf-8')
@@ -40,8 +41,11 @@ class BaseDocsFunctionalTest(unittest.Te
             self.assertNotIn(line, contents)
 
     def get_title_section_for(self, service_name):
-        contents = ServiceDocumenter(
-            service_name, self._session).document_service().decode('utf-8')
+        contents = (
+            ServiceDocumenter(service_name, self._session)
+            .document_service()
+            .decode('utf-8')
+        )
         start_of_table_of_contents = 'Table of Contents'
         start_index = contents.find(start_of_table_of_contents)
         contents = contents[:start_index]
@@ -50,18 +54,19 @@ class BaseDocsFunctionalTest(unittest.Te
 
     def get_method_document_block(self, operation_name, contents):
         contents = contents.decode('utf-8')
-        start_method_document = '  .. py:method:: %s(' % operation_name
+        start_method_document = f'  .. py:method:: {operation_name}('
         start_index = contents.find(start_method_document)
         self.assertNotEqual(start_index, -1, 'Method is not found in contents')
         contents = contents[start_index:]
         end_index = contents.find(
-            '  .. py:method::', len(start_method_document))
+            '  .. py:method::', len(start_method_document)
+        )
         contents = contents[:end_index]
         return contents.encode('utf-8')
 
     def get_parameter_document_block(self, param_name, contents):
         contents = contents.decode('utf-8')
-        start_param_document = '    :type %s:' % param_name
+        start_param_document = f'    :type {param_name}:'
         start_index = contents.find(start_param_document)
         self.assertNotEqual(start_index, -1, 'Param is not found in contents')
         contents = contents[start_index:]
@@ -70,35 +75,38 @@ class BaseDocsFunctionalTest(unittest.Te
         return contents.encode('utf-8')
 
     def get_parameter_documentation_from_service(
-            self, service_name, method_name, param_name):
+        self, service_name, method_name, param_name
+    ):
         contents = ServiceDocumenter(
-            service_name, self._session).document_service()
-        method_contents = self.get_method_document_block(
-            method_name, contents)
-        return self.get_parameter_document_block(
-            param_name, method_contents)
+            service_name, self._session
+        ).document_service()
+        method_contents = self.get_method_document_block(method_name, contents)
+        return self.get_parameter_document_block(param_name, method_contents)
 
     def get_docstring_for_method(self, service_name, method_name):
         contents = ServiceDocumenter(
-            service_name, self._session).document_service()
-        method_contents = self.get_method_document_block(
-            method_name, contents)
+            service_name, self._session
+        ).document_service()
+        method_contents = self.get_method_document_block(method_name, contents)
         return method_contents
 
     def assert_is_documented_as_autopopulated_param(
-            self, service_name, method_name, param_name, doc_string=None):
+        self, service_name, method_name, param_name, doc_string=None
+    ):
         contents = ServiceDocumenter(
-            service_name, self._session).document_service()
-        method_contents = self.get_method_document_block(
-            method_name, contents)
+            service_name, self._session
+        ).document_service()
+        method_contents = self.get_method_document_block(method_name, contents)
 
         # Ensure it is not in the example.
-        self.assert_not_contains_line('%s=\'string\'' % param_name,
-                                      method_contents)
+        self.assert_not_contains_line(
+            f'{param_name}=\'string\'', method_contents
+        )
 
         # Ensure it is in the params.
         param_contents = self.get_parameter_document_block(
-            param_name, method_contents)
+            param_name, method_contents
+        )
 
         # Ensure it is not labeled as required.
         self.assert_not_contains_line('REQUIRED', param_contents)
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_alias.py 2.31.35-1/tests/functional/botocore/docs/test_alias.py
--- 2.23.6-1/tests/functional/botocore/docs/test_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,7 +18,8 @@ class TestAliasesDocumented(BaseDocsFunc
     def test_all_aliases_are_documented_correctly(self):
         for case in ALIAS_CASES:
             content = self.get_docstring_for_method(
-                case['service'], case['operation']).decode('utf-8')
+                case['service'], case['operation']
+            ).decode('utf-8')
             new_name = case['new_name']
             original_name = case['original_name']
             param_name_template = ':param %s:'
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_autoscaling.py 2.31.35-1/tests/functional/botocore/docs/test_autoscaling.py
--- 2.23.6-1/tests/functional/botocore/docs/test_autoscaling.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_autoscaling.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,5 +16,6 @@ from tests.functional.botocore.docs impo
 class TestAutoscalingDocs(BaseDocsFunctionalTest):
     def test_documents_encoding_of_user_data(self):
         docs = self.get_parameter_documentation_from_service(
-            'autoscaling', 'create_launch_configuration', 'UserData')
+            'autoscaling', 'create_launch_configuration', 'UserData'
+        )
         self.assertIn('base64 encoded automatically', docs.decode('utf-8'))
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_ec2.py 2.31.35-1/tests/functional/botocore/docs/test_ec2.py
--- 2.23.6-1/tests/functional/botocore/docs/test_ec2.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_ec2.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,23 +16,29 @@ from tests.functional.botocore.docs impo
 class TestEc2Docs(BaseDocsFunctionalTest):
     def test_documents_encoding_of_user_data(self):
         docs = self.get_parameter_documentation_from_service(
-            'ec2', 'run_instances', 'UserData')
+            'ec2', 'run_instances', 'UserData'
+        )
         self.assertIn('base64 encoded automatically', docs.decode('utf-8'))
 
     def test_copy_snapshot_presigned_url_is_autopopulated(self):
         self.assert_is_documented_as_autopopulated_param(
             service_name='ec2',
             method_name='copy_snapshot',
-            param_name='PresignedUrl')
+            param_name='PresignedUrl',
+        )
 
     def test_copy_snapshot_destination_region_is_autopopulated(self):
         self.assert_is_documented_as_autopopulated_param(
             service_name='ec2',
             method_name='copy_snapshot',
-            param_name='DestinationRegion')
+            param_name='DestinationRegion',
+        )
 
     def test_idempotency_documented(self):
-        content = self.get_docstring_for_method('ec2', 'purchase_scheduled_instances')
+        content = self.get_docstring_for_method(
+            'ec2', 'purchase_scheduled_instances'
+        )
         # Client token should have had idempotentcy autopopulated doc appended
-        self.assert_contains_line('This field is autopopulated if not provided',
-                                  content)
+        self.assert_contains_line(
+            'This field is autopopulated if not provided', content
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_glacier.py 2.31.35-1/tests/functional/botocore/docs/test_glacier.py
--- 2.23.6-1/tests/functional/botocore/docs/test_glacier.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_glacier.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,10 +19,12 @@ class TestGlacierDocs(BaseDocsFunctional
             service_name='glacier',
             method_name='abort_multipart_upload',
             param_name='accountId',
-            doc_string='Note: this parameter is set to "-"')
+            doc_string='Note: this parameter is set to "-"',
+        )
 
     def test_checksum(self):
         self.assert_is_documented_as_autopopulated_param(
             service_name='glacier',
             method_name='upload_archive',
-            param_name='checksum')
+            param_name='checksum',
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_lex.py 2.31.35-1/tests/functional/botocore/docs/test_lex.py
--- 2.23.6-1/tests/functional/botocore/docs/test_lex.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_lex.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,13 +18,16 @@ class TestLexDocs(BaseDocsFunctionalTest
 
     def test_jsonheader_docs(self):
         docs = self.get_docstring_for_method('lex-runtime', 'post_content')
-        self.assert_contains_lines_in_order([
-            '**Request Syntax**',
-            'sessionAttributes=%s,' % self.TYPE_STRING,
-            ':type sessionAttributes: JSON serializable',
-            '**Response Syntax**',
-            '\'slots\': %s,' % self.TYPE_STRING,
-            '\'sessionAttributes\': %s' % self.TYPE_STRING,
-            '**slots** (JSON serializable)',
-            '**sessionAttributes** (JSON serializable)'
-        ], docs)
+        self.assert_contains_lines_in_order(
+            [
+                '**Request Syntax**',
+                f'sessionAttributes={self.TYPE_STRING},',
+                ':type sessionAttributes: JSON serializable',
+                '**Response Syntax**',
+                f'\'slots\': {self.TYPE_STRING},',
+                f'\'sessionAttributes\': {self.TYPE_STRING}',
+                '**slots** (JSON serializable)',
+                '**sessionAttributes** (JSON serializable)',
+            ],
+            docs,
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_s3.py 2.31.35-1/tests/functional/botocore/docs/test_s3.py
--- 2.23.6-1/tests/functional/botocore/docs/test_s3.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_s3.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,50 +10,67 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests.functional.botocore.docs import BaseDocsFunctionalTest
 from botocore.docs.service import ServiceDocumenter
 
+from tests.functional.botocore.docs import BaseDocsFunctionalTest
+
 
 class TestS3Docs(BaseDocsFunctionalTest):
     def test_auto_populates_sse_customer_key_md5(self):
         self.assert_is_documented_as_autopopulated_param(
             service_name='s3',
             method_name='put_object',
-            param_name='SSECustomerKeyMD5')
+            param_name='SSECustomerKeyMD5',
+        )
 
     def test_auto_populates_copy_source_sse_customer_key_md5(self):
         self.assert_is_documented_as_autopopulated_param(
             service_name='s3',
             method_name='copy_object',
-            param_name='CopySourceSSECustomerKeyMD5')
+            param_name='CopySourceSSECustomerKeyMD5',
+        )
 
     def test_hides_content_md5_when_impossible_to_provide(self):
-        modified_methods = ['delete_objects', 'put_bucket_acl',
-                            'put_bucket_cors', 'put_bucket_lifecycle',
-                            'put_bucket_logging', 'put_bucket_policy',
-                            'put_bucket_notification', 'put_bucket_tagging',
-                            'put_bucket_replication', 'put_bucket_website',
-                            'put_bucket_request_payment', 'put_object_acl',
-                            'put_bucket_versioning']
+        modified_methods = [
+            'delete_objects',
+            'put_bucket_acl',
+            'put_bucket_cors',
+            'put_bucket_lifecycle',
+            'put_bucket_logging',
+            'put_bucket_policy',
+            'put_bucket_notification',
+            'put_bucket_tagging',
+            'put_bucket_replication',
+            'put_bucket_website',
+            'put_bucket_request_payment',
+            'put_object_acl',
+            'put_bucket_versioning',
+        ]
         service_contents = ServiceDocumenter(
-            's3', self._session).document_service()
+            's3', self._session
+        ).document_service()
         for method_name in modified_methods:
             method_contents = self.get_method_document_block(
-                method_name, service_contents)
-            self.assertNotIn('ContentMD5=\'string\'',
-                             method_contents.decode('utf-8'))
+                method_name, service_contents
+            )
+            self.assertNotIn(
+                'ContentMD5=\'string\'', method_contents.decode('utf-8')
+            )
 
     def test_copy_source_documented_as_union_type(self):
-        content  = self.get_docstring_for_method('s3', 'copy_object')
+        content = self.get_docstring_for_method('s3', 'copy_object')
         dict_form = (
-            "{'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}")
+            "{'Bucket': 'string', 'Key': 'string', 'VersionId': 'string'}"
+        )
         self.assert_contains_line(
-            "CopySource='string' or %s" % dict_form, content)
+            f"CopySource='string' or {dict_form}", content
+        )
 
     def test_copy_source_param_docs_also_modified(self):
-        content  = self.get_docstring_for_method('s3', 'copy_object')
+        content = self.get_docstring_for_method('s3', 'copy_object')
         param_docs = self.get_parameter_document_block('CopySource', content)
         # We don't want to overspecify the test, so I've picked
         # an arbitrary line from the customized docs.
         self.assert_contains_line(
-            "You can also provide this value as a dictionary", param_docs)
+            "You can also provide this value as a dictionary", param_docs
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/docs/test_streaming_body.py 2.31.35-1/tests/functional/botocore/docs/test_streaming_body.py
--- 2.23.6-1/tests/functional/botocore/docs/test_streaming_body.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/docs/test_streaming_body.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,26 +11,31 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from botocore import xform_name
-from tests.functional.botocore.docs import BaseDocsFunctionalTest
 from botocore.docs.service import ServiceDocumenter
 
+from tests.functional.botocore.docs import BaseDocsFunctionalTest
+
 
 class TestStreamingBodyDocumentation(BaseDocsFunctionalTest):
-
     def test_all_streaming_body_are_properly_documented(self):
         for service in self._session.get_available_services():
             client = self._session.create_client(
-                service, region_name='us-east-1',
-                aws_access_key_id='foo', aws_secret_access_key='bar')
+                service,
+                region_name='us-east-1',
+                aws_access_key_id='foo',
+                aws_secret_access_key='bar',
+            )
             service_model = client.meta.service_model
             for operation in service_model.operation_names:
                 operation_model = service_model.operation_model(operation)
                 if operation_model.has_streaming_output:
                     self.assert_streaming_body_is_properly_documented(
-                        service, xform_name(operation))
+                        service, xform_name(operation)
+                    )
 
     def assert_streaming_body_is_properly_documented(self, service, operation):
         service_docs = ServiceDocumenter(
-            service, self._session).document_service()
+            service, self._session
+        ).document_service()
         method_docs = self.get_method_document_block(operation, service_docs)
         self.assert_contains_line('StreamingBody', method_docs)
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/accessanalyzer/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/accessanalyzer/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/accessanalyzer/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/accessanalyzer/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/account/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/account/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/account/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/account/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -286,17 +286,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -318,17 +307,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +328,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -382,17 +349,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -414,17 +370,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -446,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,18 +412,28 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://account-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -500,43 +444,53 @@
                             }
                         ]
                     },
-                    "url": "https://account-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://account.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://account-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://account.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://account.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/acm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/acm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/acm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/acm/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/acm-pca/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/acm-pca/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/acm-pca/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/acm-pca/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/aiops/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/aiops/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/aiops/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/aiops/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://aiops.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/amp/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/amp/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/amp/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/amp/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/amplify/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/amplify/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/amplify/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/amplify/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -391,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -415,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -439,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -463,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/amplifybackend/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/amplifybackend/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/amplifybackend/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/amplifybackend/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/amplifyuibuilder/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/amplifyuibuilder/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/amplifyuibuilder/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/amplifyuibuilder/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/apigateway/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/apigateway/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/apigateway/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/apigateway/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,28 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/apigatewaymanagementapi/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/apigatewaymanagementapi/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/apigatewaymanagementapi/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/apigatewaymanagementapi/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/apigatewayv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/apigatewayv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/apigatewayv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/apigatewayv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,28 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appconfig/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appconfig/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appconfig/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appconfig/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appconfigdata/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appconfigdata/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appconfigdata/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appconfigdata/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appfabric/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appfabric/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appfabric/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appfabric/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appflow/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appflow/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appflow/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appflow/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appintegrations/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appintegrations/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appintegrations/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appintegrations/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/application-autoscaling/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/application-autoscaling/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/application-autoscaling/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/application-autoscaling/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/application-insights/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/application-insights/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/application-insights/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/application-insights/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/application-signals/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/application-signals/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/application-signals/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/application-signals/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://application-signals.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/applicationcostprofiler/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/applicationcostprofiler/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/applicationcostprofiler/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/applicationcostprofiler/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appmesh/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appmesh/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appmesh/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appmesh/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -677,17 +677,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -701,17 +690,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -725,17 +703,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -749,17 +716,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/apprunner/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/apprunner/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/apprunner/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/apprunner/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appstream/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appstream/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appstream/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appstream/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -339,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -363,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -387,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/appsync/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/appsync/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/appsync/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/appsync/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/apptest/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/apptest/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/apptest/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/apptest/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://apptest.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/arc-region-switch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/arc-region-switch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/arc-region-switch/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/arc-region-switch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,336 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://arc-region-switch.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        },
+        {
+            "documentation": "Control plane operation with DualStack in us-west-2 routes to us-east-1 DualStack endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation with endpoint set in us-east-1 routes to provided endpoint",
+            "expect": {
+                "endpoint": {
+                    "url": "https://amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseControlPlaneEndpoint": true,
+                "Endpoint": "https://amazonaws.com"
+            }
+        },
+        {
+            "documentation": "Control plane operation with endpoint set in us-west-2 routes to provided endpoint",
+            "expect": {
+                "endpoint": {
+                    "url": "https://amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseControlPlaneEndpoint": true,
+                "Endpoint": "https://amazonaws.com"
+            }
+        },
+        {
+            "documentation": "Control plane operation in us-west-2 (standard partition) routes to us-east-1",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation in cn-north-1 (China partition) routes to cn-north-1 with China DNS suffix",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-north-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation in cn-northwest-1 (China partition) routes to cn-north-1 with China DNS suffix",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-north-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation in us-gov-west-1 (GovCloud partition) routes to us-gov-west-1 with GovCloud DNS suffix",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation in us-gov-east-1 (GovCloud partition) routes to us-gov-west-1 with GovCloud DNS suffix",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseControlPlaneEndpoint": true
+            }
+        },
+        {
+            "documentation": "Control plane operation with FIPS in us-west-2 routes to us-east-1 FIPS endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseControlPlaneEndpoint": true,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Control plane operation with FIPS in us-east-1 routes to us-east-1 FIPS endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1",
+                                "signingName": "arc-region-switch"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-region-switch-control-plane-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseControlPlaneEndpoint": true,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Control plane operation with FIPS in CN returns an error",
+            "expect": {
+                "error": "Invalid Configuration: FIPS is not supported in this partition"
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseControlPlaneEndpoint": true,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Control plane operation with endpoint set using FIPS in us-east-1 errors",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseControlPlaneEndpoint": true,
+                "UseFIPS": true,
+                "Endpoint": "https://amazonaws.com"
+            }
+        },
+        {
+            "documentation": "Control plane operation with endpoint set using FIPS in us-west-2 routes to provided endpoint",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseControlPlaneEndpoint": true,
+                "UseFIPS": true,
+                "Endpoint": "https://amazonaws.com"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/arc-zonal-shift/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/arc-zonal-shift/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/arc-zonal-shift/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/arc-zonal-shift/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/artifact/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/artifact/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/artifact/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/artifact/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -286,17 +286,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -318,17 +307,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +328,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -382,17 +349,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -414,17 +370,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -446,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,18 +412,28 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://artifact-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -500,43 +444,53 @@
                             }
                         ]
                     },
-                    "url": "https://artifact-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://artifact.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://artifact-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://artifact.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://artifact.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/athena/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/athena/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/athena/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/athena/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/auditmanager/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/auditmanager/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/auditmanager/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/auditmanager/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -300,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -324,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -348,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -372,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/autoscaling/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/autoscaling/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/autoscaling/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/autoscaling/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -482,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -506,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -530,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -554,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/autoscaling-plans/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/autoscaling-plans/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/autoscaling-plans/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/autoscaling-plans/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -404,6 +404,19 @@
             }
         },
         {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://autoscaling-plans.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -417,29 +430,29 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://autoscaling-plans-fips.us-gov-east-1.api.aws"
+                    "url": "https://autoscaling-plans.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://autoscaling-plans-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://autoscaling-plans-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-gov-east-1",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
@@ -456,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/b2bi/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/b2bi/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/b2bi/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/b2bi/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/backup/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/backup/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/backup/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/backup/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/backup-gateway/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/backup-gateway/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/backup-gateway/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/backup-gateway/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -430,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -454,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -502,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/backupsearch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/backupsearch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/backupsearch/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/backupsearch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -26,14 +26,6 @@
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search-fips.us-east-1.api.aws"
                 }
             },
@@ -46,14 +38,6 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search.us-east-1.api.aws"
                 }
             },
@@ -66,14 +50,6 @@
             "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "cn-northwest-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
@@ -86,14 +62,6 @@
             "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "cn-northwest-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
@@ -106,14 +74,6 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-gov-west-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search-fips.us-gov-west-1.api.aws"
                 }
             },
@@ -126,14 +86,6 @@
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-gov-west-1"
-                            }
-                        ]
-                    },
                     "url": "https://backup-search.us-gov-west-1.api.aws"
                 }
             },
@@ -142,166 +94,6 @@
                 "UseFIPS": false
             }
         },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://backup-search.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
         {
             "documentation": "Missing region",
             "expect": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/batch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/batch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/batch/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/batch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-dashboards/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-dashboards/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-dashboards/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-dashboards/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,153 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-dashboards.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-pricing-calculator/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-pricing-calculator/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-pricing-calculator/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-pricing-calculator/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -143,166 +143,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://bcm-pricing-calculator.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-recommended-actions/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-recommended-actions/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bcm-recommended-actions/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bcm-recommended-actions/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,153 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://bcm-recommended-actions.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agent/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agent/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agent/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agent/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agent-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agent-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agent-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agent-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore-control/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore-control/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore-control/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-agentcore-control/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://bedrock-agentcore-control.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-data-automation-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/bedrock-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/bedrock-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/billing/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/billing/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/billing/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/billing/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -23,6 +23,17 @@
             }
         },
         {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -39,7 +50,29 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
@@ -59,7 +92,29 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -79,7 +134,29 @@
             },
             "params": {
                 "Region": "cn-northwest-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing-fips.cn-northwest-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
@@ -99,7 +176,29 @@
             },
             "params": {
                 "Region": "cn-northwest-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing.cn-northwest-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -119,7 +218,29 @@
             },
             "params": {
                 "Region": "us-gov-west-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing-fips.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
@@ -139,11 +260,33 @@
             },
             "params": {
                 "Region": "us-gov-west-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -159,11 +302,12 @@
             },
             "params": {
                 "Region": "us-iso-east-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -179,11 +323,12 @@
             },
             "params": {
                 "Region": "us-iso-east-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -199,11 +344,12 @@
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -219,11 +365,12 @@
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -239,11 +386,12 @@
             },
             "params": {
                 "Region": "eu-isoe-west-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -259,11 +407,12 @@
             },
             "params": {
                 "Region": "eu-isoe-west-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -279,11 +428,12 @@
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -299,7 +449,50 @@
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing-fips.eusc-de-east-1.amazonaws.eu"
+                }
+            },
+            "params": {
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://billing.eusc-de-east-1.amazonaws.eu"
+                }
+            },
+            "params": {
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/billingconductor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/billingconductor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/billingconductor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/billingconductor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -188,17 +188,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -212,17 +201,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -236,17 +214,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -260,17 +227,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/braket/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/braket/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/braket/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/braket/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -196,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -220,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -244,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -268,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/budgets/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/budgets/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/budgets/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/budgets/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,32 +1,51 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "budgets",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://budgets.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.api.aws"
                 }
             },
             "params": {
@@ -39,7 +58,15 @@
             "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.us-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.amazonaws.com"
                 }
             },
             "params": {
@@ -52,6 +79,14 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://budgets.us-east-1.api.aws"
                 }
             },
@@ -69,7 +104,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -84,75 +118,76 @@
             }
         },
         {
-            "documentation": "For region aws-cn-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
                     },
-                    "url": "https://budgets.amazonaws.com.cn"
+                    "url": "https://budgets-fips.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "aws-cn-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://budgets-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
@@ -161,101 +196,66 @@
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://budgets-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://budgets.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://budgets.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region aws-iso-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
-                                "signingRegion": "us-iso-east-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://budgets.c2s.ic.gov"
+                    "url": "https://budgets.eusc-de-east-1.api.amazonwebservices.eu"
                 }
             },
             "params": {
-                "Region": "aws-iso-global",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.c2s.ic.gov"
                 }
             },
             "params": {
@@ -265,17 +265,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,7 +272,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "us-iso-east-1"
                             }
                         ]
@@ -298,103 +286,107 @@
             }
         },
         {
-            "documentation": "For region aws-iso-b-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "us-isob-east-1"
                             }
                         ]
                     },
-                    "url": "https://budgets.global.sc2s.sgov.gov"
+                    "url": "https://budgets-fips.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "aws-iso-b-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
                 "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://budgets-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets.global.sc2s.sgov.gov"
                 }
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
-                                "signingRegion": "us-isob-east-1"
+                                "signingRegion": "eu-isoe-west-1"
                             }
                         ]
                     },
-                    "url": "https://budgets.global.sc2s.sgov.gov"
+                    "url": "https://budgets.global.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
-                                "signingRegion": "eu-isoe-west-1"
+                                "signingRegion": "us-isof-south-1"
                             }
                         ]
                     },
-                    "url": "https://budgets.global.cloud.adc-e.uk"
+                    "url": "https://budgets-fips.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
+                "Region": "us-isof-south-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
@@ -406,7 +398,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "budgets",
                                 "signingRegion": "us-isof-south-1"
                             }
                         ]
@@ -421,54 +412,87 @@
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets-fips.amazonaws.com"
                 }
             },
             "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets.api.aws"
+                }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://budgets.amazonaws.com"
+                }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ce/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ce/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ce/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ce/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,50 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "ce",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://ce.us-east-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://ce-fips.us-east-1.api.aws"
                 }
             },
@@ -39,6 +58,14 @@
             "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://ce-fips.us-east-1.amazonaws.com"
                 }
             },
@@ -52,6 +79,14 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://ce.us-east-1.api.aws"
                 }
             },
@@ -69,7 +104,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "ce",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -84,75 +118,76 @@
             }
         },
         {
-            "documentation": "For region aws-cn-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "ce",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
                     },
-                    "url": "https://ce.cn-northwest-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "aws-cn-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://ce-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://ce-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce-fips.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "ce",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
@@ -161,208 +196,303 @@
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce-fips.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce-fips.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.eusc-de-east-1.api.amazonwebservices.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce-fips.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.eu-isoe-west-1.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "Region": "us-isof-south-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ce.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://ce.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chatbot/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chatbot/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chatbot/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chatbot/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -188,17 +188,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -212,17 +201,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -236,17 +214,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -260,17 +227,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-identity/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-identity/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-identity/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-identity/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-media-pipelines/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-media-pipelines/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-media-pipelines/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-media-pipelines/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-meetings/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-meetings/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-meetings/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-meetings/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-messaging/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-messaging/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-messaging/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-messaging/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-voice/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-voice/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/chime-sdk-voice/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/chime-sdk-voice/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cleanrooms/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cleanrooms/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cleanrooms/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cleanrooms/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cleanroomsml/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cleanroomsml/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cleanroomsml/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cleanroomsml/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloud9/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloud9/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloud9/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloud9/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudcontrol/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudcontrol/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudcontrol/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudcontrol/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/clouddirectory/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/clouddirectory/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/clouddirectory/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/clouddirectory/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudformation/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudformation/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudformation/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudformation/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudfront/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudfront/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudfront/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudfront/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,54 +1,51 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "cloudfront",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://cloudfront.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region aws-global with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "cloudfront",
                                 "signingRegion": "us-east-1"
                             }
                         ]
                     },
-                    "url": "https://cloudfront-fips.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "aws-global",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://cloudfront-fips.us-east-1.api.aws"
+                    "url": "https://cloudfront-fips.global.api.aws"
                 }
             },
             "params": {
@@ -65,7 +62,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "cloudfront",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -83,7 +79,15 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.global.api.aws"
                 }
             },
             "params": {
@@ -100,7 +104,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "cloudfront",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -115,75 +118,76 @@
             }
         },
         {
-            "documentation": "For region aws-cn-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "cloudfront",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
                     },
-                    "url": "https://cloudfront.cn-northwest-1.amazonaws.com.cn"
+                    "url": "https://cloudfront-fips.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "aws-cn-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://cloudfront-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront-fips.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "cloudfront",
                                 "signingRegion": "cn-northwest-1"
                             }
                         ]
@@ -192,79 +196,108 @@
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront-fips.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront-fips.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront-fips.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.c2s.ic.gov"
                 }
             },
             "params": {
@@ -274,21 +307,18 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.c2s.ic.gov"
                 }
             },
             "params": {
@@ -298,102 +328,171 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.sc2s.sgov.gov"
+                }
             },
             "params": {
                 "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.sc2s.sgov.gov"
                 }
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://cloudfront.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-isof-south-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.csp.hci.ic.gov"
                 }
             },
             "params": {
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront-fips.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://cloudfront.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudhsm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudhsm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudhsm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudhsm/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudhsmv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudhsmv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudhsmv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudhsmv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -430,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -454,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -502,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudsearch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudsearch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudsearch/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudsearch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudsearchdomain/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudsearchdomain/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudsearchdomain/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudsearchdomain/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudtrail/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudtrail/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudtrail/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudtrail/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudtrail-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudtrail-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudtrail-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudtrail-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudwatch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudwatch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cloudwatch/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cloudwatch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,250 +1,49 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-northeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ap-southeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.eu-west-3.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.me-south-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.sa-east-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "sa-east-1",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-east-1.amazonaws.com"
+                    "url": "https://monitoring-fips.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
@@ -261,123 +60,71 @@
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-east-2.amazonaws.com"
+                    "url": "https://monitoring.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-2",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-west-1.amazonaws.com"
+                    "url": "https://monitoring.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring-fips.us-west-1.amazonaws.com"
+                    "url": "https://monitoring-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring-fips.us-west-2.amazonaws.com"
+                    "url": "https://monitoring-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-east-1.api.aws"
+                    "url": "https://monitoring.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -391,280 +138,185 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://monitoring-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-gov-east-1.amazonaws.com"
+                    "url": "https://monitoring.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-gov-east-1.amazonaws.com"
+                    "url": "https://monitoring-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-gov-west-1.amazonaws.com"
+                    "url": "https://monitoring.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-gov-west-1.amazonaws.com"
+                    "url": "https://monitoring-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://monitoring-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-gov-east-1.api.aws"
+                    "url": "https://monitoring.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://monitoring-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-iso-west-1.c2s.ic.gov"
+                    "url": "https://monitoring.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-west-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://monitoring-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://monitoring.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://monitoring.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://monitoring-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://monitoring.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://monitoring.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://monitoring.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codeartifact/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codeartifact/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codeartifact/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codeartifact/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -313,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -337,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -361,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -385,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codebuild/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codebuild/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codebuild/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codebuild/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codecommit/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codecommit/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codecommit/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codecommit/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codeconnections/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codeconnections/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codeconnections/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codeconnections/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codedeploy/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codedeploy/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codedeploy/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codedeploy/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguru-reviewer/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguru-reviewer/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguru-reviewer/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguru-reviewer/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguru-security/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguru-security/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguru-security/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguru-security/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguruprofiler/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguruprofiler/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codeguruprofiler/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codeguruprofiler/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codepipeline/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codepipeline/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codepipeline/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codepipeline/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codestar-connections/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codestar-connections/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codestar-connections/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codestar-connections/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/codestar-notifications/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/codestar-notifications/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/codestar-notifications/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/codestar-notifications/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-identity/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-identity/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-identity/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-identity/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -339,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -363,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -387,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-idp/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-idp/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-idp/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-idp/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -625,17 +625,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -649,17 +638,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -673,17 +651,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -697,17 +664,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-sync/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-sync/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cognito-sync/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cognito-sync/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/comprehend/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/comprehend/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/comprehend/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/comprehend/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,28 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/comprehendmedical/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/comprehendmedical/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/comprehendmedical/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/comprehendmedical/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/compute-optimizer/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/compute-optimizer/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/compute-optimizer/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/compute-optimizer/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/config/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/config/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/config/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/config/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -300,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -324,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -348,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -372,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connect-contact-lens/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connect-contact-lens/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connect-contact-lens/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connect-contact-lens/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -248,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -272,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -296,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -320,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcampaigns/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcampaigns/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcampaigns/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcampaigns/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -196,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -220,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -244,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -268,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcampaignsv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcampaignsv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcampaignsv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcampaignsv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcases/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcases/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connectcases/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connectcases/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/connectparticipant/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/connectparticipant/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/connectparticipant/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/connectparticipant/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/controlcatalog/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/controlcatalog/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/controlcatalog/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/controlcatalog/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/controltower/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/controltower/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/controltower/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/controltower/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -378,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -402,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -426,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -450,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cost-optimization-hub/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cost-optimization-hub/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cost-optimization-hub/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cost-optimization-hub/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/cur/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/cur/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/cur/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/cur/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/customer-profiles/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/customer-profiles/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/customer-profiles/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/customer-profiles/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/databrew/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/databrew/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/databrew/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/databrew/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -430,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -454,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -502,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dataexchange/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dataexchange/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dataexchange/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dataexchange/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/datapipeline/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/datapipeline/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/datapipeline/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/datapipeline/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,28 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/datasync/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/datasync/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/datasync/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/datasync/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dax/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dax/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dax/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dax/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -326,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -374,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -398,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/deadline/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/deadline/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/deadline/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/deadline/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/detective/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/detective/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/detective/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/detective/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,211 +1,75 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.eu-south-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.eu-west-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.eu-west-2.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-west-2",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.eu-west-3.amazonaws.com"
+                    "url": "https://detective-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.me-south-1.amazonaws.com"
+                    "url": "https://api.detective-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
+                "Region": "us-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.sa-east-1.amazonaws.com"
+                    "url": "https://detective.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "sa-east-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
@@ -222,400 +86,240 @@
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-east-1.amazonaws.com"
+                    "url": "https://api.detective-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-east-2.amazonaws.com"
+                    "url": "https://api.detective-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-east-2.amazonaws.com"
+                    "url": "https://api.detective.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-west-1.amazonaws.com"
+                    "url": "https://api.detective.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-west-1.amazonaws.com"
+                    "url": "https://api.detective-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-west-2.amazonaws.com"
+                    "url": "https://api.detective.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-west-2.amazonaws.com"
+                    "url": "https://api.detective-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-east-1.api.aws"
+                    "url": "https://api.detective.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://api.detective-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://api.detective.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.cn-north-1.amazonaws.com.cn"
+                    "url": "https://api.detective-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-gov-east-1.amazonaws.com"
+                    "url": "https://api.detective.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://api.detective-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-gov-west-1.amazonaws.com"
+                    "url": "https://api.detective.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-gov-west-1.amazonaws.com"
+                    "url": "https://detective-fips.us-gov-west-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-gov-west-1",
                 "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://api.detective-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.detective.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://detective.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.detective.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://api.detective.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/devicefarm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/devicefarm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/devicefarm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/devicefarm/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/devops-guru/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/devops-guru/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/devops-guru/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/devops-guru/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/directconnect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/directconnect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/directconnect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/directconnect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/discovery/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/discovery/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/discovery/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/discovery/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dlm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dlm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dlm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dlm/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dms/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dms/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dms/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dms/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -560,28 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -608,28 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/docdb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/docdb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/docdb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/docdb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/docdb-elastic/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/docdb-elastic/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/docdb-elastic/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/docdb-elastic/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/drs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/drs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/drs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/drs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ds/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ds/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ds/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ds/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ds-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ds-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ds-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ds-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dsql/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dsql/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dsql/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dsql/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://dsql.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dynamodb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dynamodb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dynamodb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dynamodb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -569,183 +569,1544 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-iso-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://dynamodb.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://example.com"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://example.com"
                 }
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
             "params": {
-                "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
             "params": {
-                "Region": "us-isob-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
                 }
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
             "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
                 "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
                 "UseFIPS": false,
                 "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
                 }
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
             "params": {
                 "UseFIPS": false,
                 "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
             "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
                 "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
                 "UseFIPS": true,
                 "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
             "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
                 "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
                 "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "Missing region",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
-                "error": "Invalid Configuration: Missing Region"
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=disabled, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
             "params": {
-                "AccountId": "012345678901",
                 "UseFIPS": true,
                 "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
             "params": {
-                "AccountId": "012345678901",
                 "UseFIPS": true,
                 "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
             "params": {
-                "AccountId": "012345678901",
                 "UseFIPS": false,
                 "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
@@ -755,20 +2116,171 @@
                 {
                     "builtInParams": {
                         "SDK::Endpoint": "https://example.com",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "AccountId": "012345678901",
                 "UseFIPS": false,
                 "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with empty account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
@@ -778,56 +2290,461 @@
                 {
                     "builtInParams": {
                         "SDK::Endpoint": "https://example.com",
-                        "AWS::Auth::AccountId": ""
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "SDK::Endpoint": "https://example.com",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
                 "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=required, Region=us-east-1, Endpoint=https://example.com}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For region local with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
                 "error": "Invalid Configuration: FIPS and local endpoint are not supported"
             },
             "params": {
-                "Region": "local",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For region local with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
                 "error": "Invalid Configuration: FIPS and local endpoint are not supported"
             },
             "params": {
-                "Region": "local",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For region local with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
                 "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
             },
             "params": {
-                "Region": "local",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For region local with account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -846,20 +2763,24 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "local",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "local",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For region local with empty account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -878,39 +2799,1788 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "local",
-                        "AWS::Auth::AccountId": ""
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "local",
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For AccountIdEndpointMode required and no AccountId set",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=local}",
             "expect": {
-                "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded."
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
-                        "AWS::Region": "us-east-1",
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=disabled, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "disabled",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
                         "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountIdEndpointMode": "required"
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and local endpoint are not supported"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "local",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=required, Region=local}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "dynamodb",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "http://localhost:8000"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "required",
+                "Region": "local"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb-fips.us-east-1.api.aws"
@@ -920,22 +4590,24 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
                         "AWS::UseFIPS": true,
-                        "AWS::UseDualStack": true
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
@@ -945,47 +4617,521 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseFIPS": true
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode preferred, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.api.aws"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::Auth::AccountIdEndpointMode": "preferred",
-                        "AWS::UseFIPS": true
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
                 "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "error": "Credentials-sourced account ID parameter is invalid"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode required, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
@@ -995,166 +5141,1409 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::Auth::AccountIdEndpointMode": "required",
-                        "AWS::UseFIPS": true
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
                 "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-east-1.api.aws"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.api.aws"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseDualStack": true
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-east-1.api.aws"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseDualStack": true
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode preferred, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-east-1.api.aws"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
                 }
             },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
-                "AccountIdEndpointMode": "preferred",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode disabled, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-east-1.api.aws"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
-                "AccountIdEndpointMode": "disabled",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode required, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb.us-east-1.api.aws"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
                 "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode preferred, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://012345678901.ddb.us-east-1.amazonaws.com"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
                 }
             },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://111111111111.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Credentials-sourced account ID parameter is invalid"
+            },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
                 "UseDualStack": false,
-                "AccountIdEndpointMode": "preferred"
+                "AccountId": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode required, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://012345678901.ddb.us-east-1.amazonaws.com"
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.api.aws"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://333333333333.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "metricValues": [
+                            "O"
+                        ]
+                    },
+                    "url": "https://222222222222.ddb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=required, Region=us-east-1}",
+            "expect": {
+                "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "required",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
                         "AWS::Auth::AccountIdEndpointMode": "required"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
                 "UseDualStack": false,
-                "AccountIdEndpointMode": "required"
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with account ID available, AccountIdEndpointMode disabled, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "required"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=required, Region=cn-north-1}",
+            "expect": {
+                "error": "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "required",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "ListTables"
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=disabled, Region=us-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-east-1.amazonaws.com"
@@ -1164,116 +6553,646 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
                         "AWS::Auth::AccountIdEndpointMode": "disabled"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
                 "UseDualStack": false,
-                "AccountIdEndpointMode": "disabled"
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region us-east-1 with empty account ID, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
             "expect": {
-                "error": "Credentials-sourced account ID parameter is invalid"
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "us-east-1",
-                        "AWS::Auth::AccountId": " "
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
-                        "AWS::Region": "cn-north-1",
-                        "AWS::Auth::AccountId": "012345678901",
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
                         "AWS::UseFIPS": true,
-                        "AWS::UseDualStack": true
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
                     },
-                    "operationName": "ListTables"
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
                 }
             ],
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://dynamodb-fips.us-east-1.amazonaws.com"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
-                        "AWS::Region": "cn-north-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseFIPS": true
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
                     },
-                    "operationName": "ListTables"
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
                 }
             ],
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.api.aws"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": true,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "disabled"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=disabled, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "disabled",
+                "Region": "us-east-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
             "operationInputs": [
                 {
                     "builtInParams": {
                         "AWS::Region": "cn-north-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseDualStack": true
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
@@ -1283,65 +7202,135 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "cn-north-1",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
-                    "operationName": "ListTables"
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
                 }
             ],
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, AccountIdEndpointMode preferred, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
                 "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, AccountIdEndpointMode disabled, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
-                "AccountIdEndpointMode": "disabled",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with account ID available, AccountIdEndpointMode required, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "AccountId": "012345678901",
-                "AccountIdEndpointMode": "required",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region cn-north-1 with empty account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
@@ -1351,68 +7340,340 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "cn-north-1",
-                        "AWS::Auth::AccountId": ""
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
             "expect": {
                 "endpoint": {
-                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://dynamodb-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
                 }
             },
             "operationInputs": [
                 {
                     "builtInParams": {
-                        "AWS::Region": "us-iso-east-1",
-                        "AWS::Auth::AccountId": "012345678901",
-                        "AWS::UseFIPS": true
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
-                    "operationName": "ListTables"
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
                 }
             ],
             "params": {
-                "Region": "us-iso-east-1",
-                "AccountId": "012345678901",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=cn-north-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.api.aws.ic.gov"
+                }
+            },
+            "params": {
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.api.aws.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
@@ -1422,20 +7683,24 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-iso-east-1",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-iso-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with empty account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
@@ -1445,62 +7710,478 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-iso-east-1",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-iso-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.api.aws.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.api.aws.ic.gov"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-iso-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-iso-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-iso-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.api.aws.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with account ID available, FIPS enabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.api.aws.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-iso-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=us-iso-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-iso-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with account ID available, FIPS enabled, and DualStack disabled",
+            "documentation": "{UseFIPS=true, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with account ID available, FIPS disabled, and DualStack enabled",
+            "documentation": "{UseFIPS=false, UseDualStack=true, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": true,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
@@ -1510,20 +8191,162 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-gov-east-1",
-                        "AWS::Auth::AccountId": "012345678901"
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-gov-east-1",
-                "AccountId": "012345678901",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-gov-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "111111111111",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-west-2:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-west-2:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with empty account ID available, FIPS disabled, and DualStack disabled",
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=111111111111, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, ResourceArnList=[arn:aws:s3:us-east-1:333333333333:stream/testStream], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountId": "111111111111",
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "ResourceArnList": [
+                    "arn:aws:s3:us-east-1:333333333333:stream/testStream"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountId=, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
             "expect": {
                 "endpoint": {
                     "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
@@ -1533,16 +8356,365 @@
                 {
                     "builtInParams": {
                         "AWS::Region": "us-gov-east-1",
-                        "AWS::Auth::AccountId": ""
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountId": "",
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
                     },
                     "operationName": "ListTables"
                 }
             ],
             "params": {
-                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
                 "AccountId": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-gov-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-west-2:222222222222:table/table_name, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-gov-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-west-2:222222222222:table/table_name",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:s3:us-west-2:222222222222:stream/testStream, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-gov-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "DescribeTable",
+                    "operationParams": {
+                        "TableName": "arn:aws:s3:us-west-2:222222222222:stream/testStream"
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:s3:us-west-2:222222222222:stream/testStream",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "",
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=true, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=true, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-gov-east-1",
+                        "AWS::UseFIPS": false,
+                        "AWS::UseDualStack": false,
+                        "AWS::Auth::AccountIdEndpointMode": "preferred"
+                    },
+                    "operationName": "BatchGetItem",
+                    "operationParams": {
+                        "RequestItems": {
+                            "arn:aws:dynamodb:us-east-1:333333333333:table/table_name": {
+                                "Keys": [
+                                    {
+                                        "pk": {
+                                            "S": "value"
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            ],
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, ResourceArn=arn:aws:dynamodb:us-east-1:222222222222:table/table_name, ResourceArnList=[arn:aws:dynamodb:us-east-1:333333333333:table/table_name], AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "ResourceArn": "arn:aws:dynamodb:us-east-1:222222222222:table/table_name",
+                "ResourceArnList": [
+                    "arn:aws:dynamodb:us-east-1:333333333333:table/table_name"
+                ],
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{UseFIPS=false, UseDualStack=false, AccountIdEndpointMode=preferred, Region=us-gov-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://dynamodb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "AccountIdEndpointMode": "preferred",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://dynamodb.eu-west-1.api.aws, Region=eu-west-1}",
+            "expect": {
+                "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html"
+            },
+            "params": {
+                "Endpoint": "https://dynamodb.eu-west-1.api.aws",
+                "Region": "eu-west-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://dynamodb.us-west-2.api.aws, Region=us-west-2}",
+            "expect": {
+                "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html"
+            },
+            "params": {
+                "Endpoint": "https://dynamodb.us-west-2.api.aws",
+                "Region": "us-west-2"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://dynamodb.cn-north-1.api.amazonwebservices.com.cn, Region=cn-north-1}",
+            "expect": {
+                "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html"
+            },
+            "params": {
+                "Endpoint": "https://dynamodb.cn-north-1.api.amazonwebservices.com.cn",
+                "Region": "cn-north-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://dynamodb.us-gov-east-1.api.aws, Region=us-gov-east-1}",
+            "expect": {
+                "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html"
+            },
+            "params": {
+                "Endpoint": "https://dynamodb.us-gov-east-1.api.aws",
+                "Region": "us-gov-east-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://dynamodb.us-east-1.api.aws, Region=us-east-1}",
+            "expect": {
+                "error": "Endpoint override is not supported for dual-stack endpoints. Please enable dual-stack functionality by enabling the configuration. For more details, see: https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html"
+            },
+            "params": {
+                "Endpoint": "https://dynamodb.us-east-1.api.aws",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://111111111111.ddb.us-east-1.api.aws, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://111111111111.ddb.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Endpoint": "https://111111111111.ddb.us-east-1.api.aws",
+                "Region": "us-east-1"
+            }
+        },
+        {
+            "documentation": "{Endpoint=https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.api.aws, Region=us-east-1}",
+            "expect": {
+                "endpoint": {
+                    "url": "https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.api.aws"
+                }
+            },
+            "params": {
+                "Endpoint": "https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.api.aws",
+                "Region": "us-east-1"
             }
         }
     ],
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/dynamodbstreams/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/dynamodbstreams/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/dynamodbstreams/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/dynamodbstreams/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,259 +1,75 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-northeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ap-southeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-west-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-west-2.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.eu-west-3.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-west-3",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region local with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "dynamodb",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
-                    "url": "http://localhost:8000"
+                    "url": "https://streams-dynamodb-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "local",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.me-south-1.amazonaws.com"
+                    "url": "https://streams.dynamodb-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
+                "Region": "us-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.sa-east-1.amazonaws.com"
+                    "url": "https://streams-dynamodb.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "sa-east-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
@@ -270,97 +86,45 @@
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-east-2.amazonaws.com"
+                    "url": "https://streams-dynamodb-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.us-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb-fips.us-east-1.amazonaws.com"
+                    "url": "https://streams.dynamodb-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-east-1.api.aws"
+                    "url": "https://streams-dynamodb.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -374,267 +138,185 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://streams.dynamodb-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://streams.dynamodb.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://streams.dynamodb.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-gov-east-1.amazonaws.com"
+                    "url": "https://streams.dynamodb-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-gov-west-1.amazonaws.com"
+                    "url": "https://streams.dynamodb.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-gov-west-1.amazonaws.com"
+                    "url": "https://streams.dynamodb-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb-fips.us-gov-east-1.api.aws"
+                    "url": "https://streams.dynamodb.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-gov-east-1.api.aws"
+                    "url": "https://streams.dynamodb-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://streams.dynamodb.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://streams.dynamodb-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://streams.dynamodb.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://streams-dynamodb-fips.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://streams.dynamodb-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://streams.dynamodb.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://streams-dynamodb.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://streams.dynamodb.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ebs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ebs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ebs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ebs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ec2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ec2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ec2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ec2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -599,17 +599,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -623,17 +612,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -647,17 +625,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -671,17 +638,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ec2-instance-connect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ec2-instance-connect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ec2-instance-connect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ec2-instance-connect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ecr/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ecr/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ecr/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ecr/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -14,6 +14,19 @@
             }
         },
         {
+            "documentation": "For region af-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.af-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "af-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -27,6 +40,19 @@
             }
         },
         {
+            "documentation": "For region ap-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -40,6 +66,19 @@
             }
         },
         {
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-northeast-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -53,6 +92,19 @@
             }
         },
         {
+            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-northeast-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -66,6 +118,19 @@
             }
         },
         {
+            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-northeast-3.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-3",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -79,6 +144,45 @@
             }
         },
         {
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-south-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.ap-south-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-south-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-south-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-south-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-south-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -92,6 +196,19 @@
             }
         },
         {
+            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -105,6 +222,19 @@
             }
         },
         {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -118,6 +248,97 @@
             }
         },
         {
+            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-3.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-3",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-4 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.ap-southeast-4.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-4",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-4 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-4.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-4",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-5 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.ap-southeast-5.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-5",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-5 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-5.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-5",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-7 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.ap-southeast-7.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-7",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-7 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ap-southeast-7.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-7",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -131,6 +352,45 @@
             }
         },
         {
+            "documentation": "For region ca-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ca-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ca-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ca-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.ca-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ca-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ca-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.ca-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ca-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -144,6 +404,45 @@
             }
         },
         {
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-central-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.eu-central-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-central-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-central-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-central-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-central-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -157,6 +456,19 @@
             }
         },
         {
+            "documentation": "For region eu-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-north-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -170,6 +482,45 @@
             }
         },
         {
+            "documentation": "For region eu-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-south-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.eu-south-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-south-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-south-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-south-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-south-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -183,6 +534,19 @@
             }
         },
         {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -196,6 +560,19 @@
             }
         },
         {
+            "documentation": "For region eu-west-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-west-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-west-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -209,6 +586,71 @@
             }
         },
         {
+            "documentation": "For region eu-west-3 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.eu-west-3.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-west-3",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region il-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.il-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "il-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region il-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.il-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "il-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region me-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr.me-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "me-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region me-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.me-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "me-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -222,6 +664,19 @@
             }
         },
         {
+            "documentation": "For region me-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.me-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "me-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -235,6 +690,19 @@
             }
         },
         {
+            "documentation": "For region sa-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.sa-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "sa-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -261,6 +729,32 @@
             }
         },
         {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -287,6 +781,32 @@
             }
         },
         {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr-fips.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -313,6 +833,32 @@
             }
         },
         {
+            "documentation": "For region us-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.us-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr-fips.us-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -339,28 +885,28 @@
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-fips.us-east-1.api.aws"
+                    "url": "https://ecr.us-west-2.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
+                "Region": "us-west-2",
+                "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr.us-east-1.api.aws"
+                    "url": "https://ecr-fips.us-west-2.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
+                "Region": "us-west-2",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
@@ -378,6 +924,19 @@
             }
         },
         {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -391,6 +950,19 @@
             }
         },
         {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -417,42 +989,55 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://api.ecr.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-gov-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr.us-gov-east-1.amazonaws.com"
+                    "url": "https://ecr-fips.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-gov-east-1",
-                "UseFIPS": false,
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ecr-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://ecr.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ecr-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-gov-east-1",
                 "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
@@ -482,28 +1067,28 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-fips.us-gov-east-1.api.aws"
+                    "url": "https://ecr.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr.us-gov-east-1.api.aws"
+                    "url": "https://ecr-fips.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
@@ -534,17 +1119,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +1132,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +1145,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +1158,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ecr-public/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ecr-public/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ecr-public/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ecr-public/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,54 +1,67 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-public-fips.us-east-1.api.aws"
+                    "url": "https://api.ecr-public.us-east-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-public-fips.us-east-1.amazonaws.com"
+                    "url": "https://ecr-public.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.ecr-public.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-public.us-east-1.api.aws"
+                    "url": "https://api.ecr-public-fips.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false,
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.ecr-public.us-east-1.amazonaws.com"
+                    "url": "https://api.ecr-public-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false,
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
@@ -157,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ecs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ecs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ecs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ecs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/efs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/efs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/efs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/efs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,721 +1,286 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region af-south-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-northeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-3 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-northeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ap-southeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-3 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ap-southeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-3",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.eu-north-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-north-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.eu-south-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "eu-south-1",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-south-1.amazonaws.com"
+                    "url": "https://efs-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
+                "Region": "us-east-1",
                 "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-west-1.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
+                "Region": "us-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.eu-west-2.amazonaws.com"
+                    "url": "https://efs.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "eu-west-2",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.eu-west-3.amazonaws.com"
+                    "url": "https://elasticfilesystem.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
+                "Region": "us-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.eu-west-3.amazonaws.com"
+                    "url": "https://efs-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.me-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.me-south-1.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "me-south-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.sa-east-1.amazonaws.com"
+                    "url": "https://efs.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "sa-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.sa-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-east-1.amazonaws.com"
+                    "url": "https://elasticfilesystem.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-east-1.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-east-2.amazonaws.com"
+                    "url": "https://elasticfilesystem.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-east-2",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-east-2.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-2",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-west-1.amazonaws.com"
+                    "url": "https://elasticfilesystem.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-west-1.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-west-2.amazonaws.com"
+                    "url": "https://elasticfilesystem.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "us-isob-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-west-2.amazonaws.com"
+                    "url": "https://elasticfilesystem-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.cn-north-1.amazonaws.com.cn"
+                    "url": "https://elasticfilesystem.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://elasticfilesystem-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.cn-northwest-1.amazonaws.com.cn"
+                    "url": "https://elasticfilesystem.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "cn-northwest-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.cn-northwest-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://efs-fips.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -729,179 +294,32 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://efs.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://elasticfilesystem.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://elasticfilesystem.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://elasticfilesystem-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/eks/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/eks/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/eks/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/eks/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elastic-inference/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elastic-inference/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elastic-inference/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elastic-inference/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,379 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.elastic-inference.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elasticache/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elasticache/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elasticache/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elasticache/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elasticbeanstalk/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elasticbeanstalk/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elasticbeanstalk/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elasticbeanstalk/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elastictranscoder/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elastictranscoder/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elastictranscoder/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elastictranscoder/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -248,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -272,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -296,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -320,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/elbv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/elbv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/elbv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/elbv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/emr/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/emr/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/emr/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/emr/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/emr-containers/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/emr-containers/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/emr-containers/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/emr-containers/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/emr-serverless/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/emr-serverless/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/emr-serverless/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/emr-serverless/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/entityresolution/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/entityresolution/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/entityresolution/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/entityresolution/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/es/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/es/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/es/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/es/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/events/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/events/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/events/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/events/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,19 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://events.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -469,32 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://events.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://events-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -534,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
@@ -816,15 +733,107 @@
             }
         },
         {
-            "documentation": "Valid EndpointId with DualStack enabled and partition does not support DualStack",
+            "documentation": "legacy fips endpoint @ us-gov-east-1",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://events.us-gov-east-1.amazonaws.com"
+                }
             },
             "params": {
-                "EndpointId": "abc123.456def",
+                "Region": "us-gov-east-1",
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "legacy non-fips endpoint @ us-gov-east-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Dualstack fips endpoint @ us-gov-east-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
                 "UseDualStack": true,
-                "UseFIPS": false,
-                "Region": "us-isob-east-1"
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Dualstack non-fips endpoint @ us-gov-east-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "legacy fips endpoint @ us-gov-west-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "legacy non-fips endpoint @ us-gov-west-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Dualstack fips endpoint @ us-gov-west-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseDualStack": true,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Dualstack non-fips endpoint @ us-gov-west-1",
+            "expect": {
+                "endpoint": {
+                    "url": "https://events.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseDualStack": true,
+                "UseFIPS": false
             }
         }
     ],
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/evidently/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/evidently/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/evidently/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/evidently/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -261,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -285,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -309,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -333,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/evs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/evs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/evs/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/evs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://evs.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/finspace/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/finspace/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/finspace/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/finspace/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/finspace-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/finspace-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/finspace-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/finspace-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/firehose/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/firehose/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/firehose/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/firehose/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,28 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/fis/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/fis/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/fis/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/fis/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/fms/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/fms/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/fms/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/fms/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -690,17 +690,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -714,17 +703,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -738,17 +716,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -762,17 +729,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/forecast/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/forecast/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/forecast/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/forecast/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -300,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -324,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -348,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -372,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/forecastquery/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/forecastquery/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/forecastquery/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/forecastquery/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -300,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -324,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -348,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -372,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/frauddetector/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/frauddetector/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/frauddetector/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/frauddetector/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/fsx/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/fsx/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/fsx/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/fsx/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/gamelift/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/gamelift/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/gamelift/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/gamelift/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -430,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -454,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -502,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/gameliftstreams/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/gameliftstreams/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/gameliftstreams/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/gameliftstreams/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://gameliftstreams.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-maps/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-maps/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-maps/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-maps/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -141,7 +141,7 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://maps.geo-fips.us-gov-west-1.us-gov.api.aws/v2"
+                    "url": "https://maps.geo-fips.us-gov-west-1.api.aws/v2"
                 }
             },
             "params": {
@@ -154,7 +154,7 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://maps.geo-fips.us-gov-west-1.us-gov.amazonaws.com/v2"
+                    "url": "https://maps.geo-fips.us-gov-west-1.amazonaws.com/v2"
                 }
             },
             "params": {
@@ -167,7 +167,7 @@
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://maps.geo.us-gov-west-1.us-gov.api.aws/v2"
+                    "url": "https://maps.geo.us-gov-west-1.api.aws/v2"
                 }
             },
             "params": {
@@ -180,7 +180,7 @@
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://maps.geo.us-gov-west-1.us-gov.amazonaws.com/v2"
+                    "url": "https://maps.geo.us-gov-west-1.amazonaws.com/v2"
                 }
             },
             "params": {
@@ -190,17 +190,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -214,17 +203,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -238,17 +216,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -262,17 +229,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -286,17 +242,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -310,17 +255,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -334,49 +268,53 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://geo-maps-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-maps-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-maps.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://geo-maps-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-maps.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-maps.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-places/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-places/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-places/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-places/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -141,7 +141,7 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://places.geo-fips.us-gov-west-1.us-gov.api.aws/v2"
+                    "url": "https://places.geo-fips.us-gov-west-1.api.aws/v2"
                 }
             },
             "params": {
@@ -154,7 +154,7 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://places.geo-fips.us-gov-west-1.us-gov.amazonaws.com/v2"
+                    "url": "https://places.geo-fips.us-gov-west-1.amazonaws.com/v2"
                 }
             },
             "params": {
@@ -167,7 +167,7 @@
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://places.geo.us-gov-west-1.us-gov.api.aws/v2"
+                    "url": "https://places.geo.us-gov-west-1.api.aws/v2"
                 }
             },
             "params": {
@@ -180,7 +180,7 @@
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://places.geo.us-gov-west-1.us-gov.amazonaws.com/v2"
+                    "url": "https://places.geo.us-gov-west-1.amazonaws.com/v2"
                 }
             },
             "params": {
@@ -190,17 +190,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -214,17 +203,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -238,17 +216,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -262,17 +229,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -286,17 +242,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -310,17 +255,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -334,49 +268,53 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://geo-places-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-places-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-places.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://geo-places-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-places.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-places.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-routes/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-routes/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/geo-routes/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/geo-routes/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -190,17 +190,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -214,17 +203,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -238,17 +216,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -262,17 +229,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -286,17 +242,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -310,17 +255,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -334,49 +268,53 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://geo-routes-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-routes-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-routes.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://geo-routes-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://geo-routes.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://geo-routes.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/glacier/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/glacier/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/glacier/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/glacier/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/globalaccelerator/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/globalaccelerator/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/globalaccelerator/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/globalaccelerator/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/glue/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/glue/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/glue/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/glue/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/grafana/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/grafana/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/grafana/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/grafana/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/greengrass/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/greengrass/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/greengrass/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/greengrass/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -370,17 +370,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -394,17 +383,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -418,17 +396,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -442,17 +409,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/greengrassv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/greengrassv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/greengrassv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/greengrassv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -370,17 +370,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -394,17 +383,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -418,17 +396,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -442,17 +409,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/groundstation/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/groundstation/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/groundstation/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/groundstation/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -313,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -337,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -361,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -385,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/guardduty/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/guardduty/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/guardduty/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/guardduty/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/health/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/health/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/health/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/health/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -214,17 +214,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -238,17 +227,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -262,17 +240,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -286,17 +253,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/healthlake/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/healthlake/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/healthlake/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/healthlake/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iam/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iam/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iam/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iam/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,54 +1,51 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://iam.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region aws-global with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-east-1"
                             }
                         ]
                     },
-                    "url": "https://iam-fips.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "aws-global",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam-fips.us-east-1.api.aws"
+                    "url": "https://iam-fips.global.api.aws"
                 }
             },
             "params": {
@@ -65,7 +62,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -83,7 +79,15 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://iam.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.global.api.aws"
                 }
             },
             "params": {
@@ -100,7 +104,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-east-1"
                             }
                         ]
@@ -115,239 +118,143 @@
             }
         },
         {
-            "documentation": "For region aws-cn-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "cn-north-1"
+                                "signingRegion": "cn-northwest-1"
                             }
                         ]
                     },
-                    "url": "https://iam.cn-north-1.amazonaws.com.cn"
+                    "url": "https://iam-fips.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "aws-cn-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "cn-north-1"
+                                "signingRegion": "cn-northwest-1"
                             }
                         ]
                     },
-                    "url": "https://iam.cn-north-1.amazonaws.com.cn"
+                    "url": "https://iam-fips.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region aws-us-gov-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "cn-north-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-gov.amazonaws.com"
+                    "url": "https://iam.global.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "aws-us-gov-global",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region aws-us-gov-global with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "cn-north-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-gov.amazonaws.com"
+                    "url": "https://iam.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "aws-us-gov-global",
-                "UseFIPS": true,
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-gov.amazonaws.com"
+                    "url": "https://iam-fips.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://iam.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-gov.amazonaws.com"
+                    "url": "https://iam.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region aws-iso-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-iso-east-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "aws-iso-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
                     "url": "https://iam-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
@@ -358,17 +265,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,7 +272,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-iso-east-1"
                             }
                         ]
@@ -391,103 +286,107 @@
             }
         },
         {
-            "documentation": "For region aws-iso-b-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-isob-east-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://iam-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "aws-iso-b-global",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
                 "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://iam-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam-fips.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "us-isob-east-1"
+                                "signingRegion": "eu-isoe-west-1"
                             }
                         ]
                     },
-                    "url": "https://iam.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://iam.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
-                                "signingRegion": "eu-isoe-west-1"
+                                "signingRegion": "us-isof-south-1"
                             }
                         ]
                     },
-                    "url": "https://iam.eu-isoe-west-1.cloud.adc-e.uk"
+                    "url": "https://iam-fips.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
+                "Region": "us-isof-south-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
@@ -499,7 +398,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "iam",
                                 "signingRegion": "us-isof-south-1"
                             }
                         ]
@@ -514,54 +412,87 @@
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.us-gov.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.us-gov.amazonaws.com"
                 }
             },
             "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.us-gov.api.aws"
+                }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://iam.us-gov.amazonaws.com"
+                }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/identitystore/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/identitystore/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/identitystore/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/identitystore/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -339,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -363,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -387,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/imagebuilder/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/imagebuilder/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/imagebuilder/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/imagebuilder/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector-scan/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector-scan/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector-scan/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector-scan/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/inspector2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/inspector2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -391,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -415,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -439,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -463,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/internetmonitor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/internetmonitor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/internetmonitor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/internetmonitor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/invoicing/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/invoicing/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/invoicing/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/invoicing/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -143,166 +143,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://invoicing.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iot/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iot/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iot/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iot/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-jobs-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-jobs-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-jobs-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-jobs-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-managed-integrations/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-managed-integrations/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iot-managed-integrations/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iot-managed-integrations/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://api.iotmanagedintegrations.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotanalytics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotanalytics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotanalytics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotanalytics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -248,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -272,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -296,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -320,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotdeviceadvisor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotdeviceadvisor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotdeviceadvisor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotdeviceadvisor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -196,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -220,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -244,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -268,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotevents/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotevents/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotevents/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotevents/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -313,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -337,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -361,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -385,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotevents-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotevents-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotevents-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotevents-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotfleethub/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotfleethub/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotfleethub/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotfleethub/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,509 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://api.fleethub.iot.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotfleetwise/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotfleetwise/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotfleetwise/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotfleetwise/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotsecuretunneling/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotsecuretunneling/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotsecuretunneling/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotsecuretunneling/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -833,28 +833,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -881,28 +859,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotsitewise/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotsitewise/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotsitewise/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotsitewise/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotthingsgraph/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotthingsgraph/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotthingsgraph/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotthingsgraph/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iottwinmaker/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iottwinmaker/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iottwinmaker/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iottwinmaker/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/iotwireless/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/iotwireless/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/iotwireless/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/iotwireless/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ivs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ivs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ivs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ivs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ivs-realtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ivs-realtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ivs-realtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ivs-realtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ivschat/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ivschat/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ivschat/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ivschat/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kafka/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kafka/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kafka/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kafka/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kafkaconnect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kafkaconnect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kafkaconnect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kafkaconnect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kendra/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kendra/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kendra/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kendra/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/keyspaces/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/keyspaces/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/keyspaces/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/keyspaces/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/keyspacesstreams/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/keyspacesstreams/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/keyspacesstreams/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/keyspacesstreams/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://cassandra-streams.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
@@ -784,19 +740,6 @@
             }
         },
         {
-            "documentation": "Dual Stack not supported region.",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true,
-                "StreamARN": "arn:aws-iso:kinesis:us-iso-west-1:123456789012:stream/testStream",
-                "OperationType": "control"
-            }
-        },
-        {
             "documentation": "OperationType not set",
             "expect": {
                 "error": "Operation Type is not set. Please contact service team for resolution."
@@ -1160,19 +1103,6 @@
             }
         },
         {
-            "documentation": "Dual Stack not supported region.",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true,
-                "ConsumerARN": "arn:aws-iso:kinesis:us-iso-west-1:123456789012:stream/testStream/consumer/test-consumer:1525898737",
-                "OperationType": "control"
-            }
-        },
-        {
             "documentation": "OperationType not set",
             "expect": {
                 "error": "Operation Type is not set. Please contact service team for resolution."
@@ -1567,19 +1497,6 @@
             }
         },
         {
-            "documentation": "ResourceARN as StreamARN test: Dual Stack not supported region.",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true,
-                "ResourceARN": "arn:aws-iso:kinesis:us-iso-west-1:123456789012:stream/testStream",
-                "OperationType": "control"
-            }
-        },
-        {
             "documentation": "ResourceARN as StreamARN test: OperationType not set",
             "expect": {
                 "error": "Operation Type is not set. Please contact service team for resolution."
@@ -1931,19 +1848,6 @@
             }
         },
         {
-            "documentation": "ResourceARN as ConsumerARN test: Dual Stack not supported region.",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true,
-                "ResourceARN": "arn:aws-iso:kinesis:us-iso-west-1:123456789012:stream/testStream/consumer/test-consumer:1525898737",
-                "OperationType": "control"
-            }
-        },
-        {
             "documentation": "ResourceARN as ConsumerARN test: OperationType not set",
             "expect": {
                 "error": "Operation Type is not set. Please contact service team for resolution."
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-archived-media/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-archived-media/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-archived-media/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-archived-media/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-media/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-media/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-media/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-media/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-signaling/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-signaling/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-signaling/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-signaling/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-webrtc-storage/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-webrtc-storage/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesis-video-webrtc-storage/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesis-video-webrtc-storage/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisanalytics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisanalytics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisanalytics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisanalytics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisanalyticsv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisanalyticsv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisanalyticsv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisanalyticsv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisvideo/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisvideo/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kinesisvideo/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kinesisvideo/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/kms/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/kms/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/kms/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/kms/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -794,28 +794,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -842,28 +820,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lakeformation/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lakeformation/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lakeformation/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lakeformation/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lambda/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lambda/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lambda/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lambda/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -820,17 +820,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -844,17 +833,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -868,17 +846,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -892,17 +859,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/launch-wizard/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/launch-wizard/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/launch-wizard/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/launch-wizard/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lex-models/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lex-models/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lex-models/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lex-models/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lex-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lex-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lex-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lex-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,42 +1,42 @@
 {
     "testCases": [
         {
-            "documentation": "For region eu-central-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex-fips.eu-central-1.api.aws"
+                    "url": "https://runtime.lex.ap-northeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.eu-central-1.amazonaws.com"
+                    "url": "https://runtime.lex.ap-southeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "ap-southeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.eu-central-1.api.aws"
+                    "url": "https://runtime.lex.ap-southeast-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -48,99 +48,21 @@
             },
             "params": {
                 "Region": "eu-central-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex-fips.us-west-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime-fips.lex.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex.us-west-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseDualStack": true,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex-fips.eu-west-2.api.aws"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime-fips.lex.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.eu-west-2.api.aws"
+                    "url": "https://runtime.lex.eu-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-2",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -152,151 +74,138 @@
             },
             "params": {
                 "Region": "eu-west-2",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex-fips.eu-west-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.eu-west-1.amazonaws.com"
+                    "url": "https://runtime.lex.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.eu-west-1.api.aws"
+                    "url": "https://runtime-fips.lex.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.eu-west-1.amazonaws.com"
+                    "url": "https://runtime.lex.us-west-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex-fips.ap-northeast-1.api.aws"
+                    "url": "https://runtime-fips.lex.us-west-2.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-west-2",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-northeast-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.ap-northeast-1.amazonaws.com"
+                    "url": "https://runtime.lex-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-northeast-1.api.aws"
+                    "url": "https://runtime.lex.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-northeast-1.amazonaws.com"
+                    "url": "https://runtime.lex-fips.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "ap-northeast-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex-fips.us-gov-west-1.api.aws"
+                    "url": "https://runtime.lex-fips.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.us-gov-west-1.amazonaws.com"
+                    "url": "https://runtime.lex.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.us-gov-west-1.api.aws"
+                    "url": "https://runtime.lex.cn-north-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -308,177 +217,151 @@
             },
             "params": {
                 "Region": "us-gov-west-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime.lex-fips.ap-southeast-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": true,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://runtime-fips.lex.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-southeast-1.api.aws"
+                    "url": "https://runtime-fips.lex.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-southeast-1.amazonaws.com"
+                    "url": "https://runtime.lex-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-southeast-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex-fips.ap-southeast-2.api.aws"
+                    "url": "https://runtime-fips.lex.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-southeast-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.ap-southeast-2.amazonaws.com"
+                    "url": "https://runtime.lex.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-southeast-2.api.aws"
+                    "url": "https://runtime.lex.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.ap-southeast-2.amazonaws.com"
+                    "url": "https://runtime.lex-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "ap-southeast-2",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex-fips.us-east-1.api.aws"
+                    "url": "https://runtime.lex.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime-fips.lex.us-east-1.amazonaws.com"
+                    "url": "https://runtime.lex-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.us-east-1.api.aws"
+                    "url": "https://runtime.lex.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://runtime.lex.us-east-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false,
-                "UseFIPS": false
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": false,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -489,8 +372,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": true,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -501,10 +384,16 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
                 "UseFIPS": false,
+                "UseDualStack": true,
                 "Endpoint": "https://example.com"
             }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lexv2-models/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lexv2-models/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lexv2-models/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lexv2-models/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lexv2-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lexv2-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lexv2-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lexv2-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager-linux-subscriptions/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager-linux-subscriptions/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager-linux-subscriptions/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager-linux-subscriptions/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager-user-subscriptions/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager-user-subscriptions/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/license-manager-user-subscriptions/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/license-manager-user-subscriptions/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lightsail/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lightsail/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lightsail/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lightsail/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -326,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -374,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -398,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/location/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/location/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/location/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/location/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/logs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/logs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/logs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/logs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutequipment/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutequipment/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutequipment/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutequipment/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutmetrics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutmetrics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutmetrics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutmetrics/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,418 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutmetrics.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutvision/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutvision/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/lookoutvision/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/lookoutvision/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,392 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://lookoutvision.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/m2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/m2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/m2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/m2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/machinelearning/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/machinelearning/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/machinelearning/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/machinelearning/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/macie2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/macie2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/macie2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/macie2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mailmanager/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mailmanager/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mailmanager/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mailmanager/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/managedblockchain/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/managedblockchain/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/managedblockchain/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/managedblockchain/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/managedblockchain-query/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/managedblockchain-query/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/managedblockchain-query/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/managedblockchain-query/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-agreement/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-agreement/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-agreement/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-agreement/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-catalog/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-catalog/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-catalog/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-catalog/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-deployment/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-deployment/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-deployment/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-deployment/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-entitlement/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-entitlement/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-entitlement/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-entitlement/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,16 +1,36 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-east-1.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
@@ -43,7 +63,7 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-east-1.api.aws"
+                    "url": "https://entitlement-marketplace.us-east-1.api.aws"
                 }
             },
             "params": {
@@ -53,267 +73,250 @@
             }
         },
         {
-            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement-marketplace.cn-northwest-1.amazonaws.com.cn"
+                    "url": "https://entitlement.marketplace.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "cn-northwest-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://entitlement.marketplace-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://entitlement.marketplace-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://entitlement-marketplace.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.cn-north-1.amazonaws.com.cn"
+                    "url": "https://entitlement-marketplace.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.us-gov-east-1.api.aws"
+                    "url": "https://entitlement.marketplace-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://entitlement.marketplace.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-gov-east-1.api.aws"
+                    "url": "https://entitlement.marketplace-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-gov-east-1.amazonaws.com"
+                    "url": "https://entitlement.marketplace.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://entitlement.marketplace-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://entitlement.marketplace.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://entitlement.marketplace-fips.eu-isoe-west-1.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://entitlement.marketplace.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://entitlement.marketplace-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://entitlement.marketplace.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "Region": "us-isof-south-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://entitlement.marketplace-fips.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://entitlement.marketplace.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://entitlement.marketplace-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://entitlement.marketplace.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://entitlement.marketplace.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-reporting/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-reporting/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplace-reporting/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplace-reporting/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplacecommerceanalytics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplacecommerceanalytics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/marketplacecommerceanalytics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/marketplacecommerceanalytics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediaconnect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediaconnect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediaconnect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediaconnect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediaconvert/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediaconvert/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediaconvert/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediaconvert/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/medialive/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/medialive/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/medialive/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/medialive/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,28 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackage/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackage/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackage/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackage/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,28 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackage-vod/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackage-vod/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackage-vod/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackage-vod/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -339,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -363,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -387,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackagev2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackagev2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediapackagev2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediapackagev2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediastore/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediastore/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediastore/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediastore/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -261,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -285,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -309,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -333,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediastore-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediastore-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediastore-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediastore-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -261,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -285,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -309,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -333,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mediatailor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mediatailor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mediatailor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mediatailor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/medical-imaging/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/medical-imaging/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/medical-imaging/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/medical-imaging/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/memorydb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/memorydb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/memorydb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/memorydb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -387,17 +387,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +400,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -435,17 +413,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -459,17 +426,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/meteringmarketplace/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/meteringmarketplace/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/meteringmarketplace/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/meteringmarketplace/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,396 +1,312 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.ap-northeast-2.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.ap-northeast-3.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.ap-south-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "ap-south-1",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.ap-southeast-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.ap-southeast-2.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
+                "Region": "us-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.ap-southeast-3.amazonaws.com"
+                    "url": "https://metering-marketplace.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "ap-southeast-3",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.ca-central-1.amazonaws.com"
+                    "url": "https://metering.marketplace.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "ca-central-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-central-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-north-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-south-1.amazonaws.com"
+                    "url": "https://metering-marketplace.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "eu-south-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-west-1.amazonaws.com"
+                    "url": "https://metering.marketplace.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "eu-west-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-west-2.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.eu-west-3.amazonaws.com"
+                    "url": "https://metering.marketplace.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.me-south-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.sa-east-1.amazonaws.com"
+                    "url": "https://metering.marketplace.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "sa-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.us-east-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.us-east-2.amazonaws.com"
+                    "url": "https://metering.marketplace.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-east-2",
+                "Region": "us-isob-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.us-west-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-west-1",
-                "UseFIPS": false,
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.us-west-2.amazonaws.com"
+                    "url": "https://metering.marketplace.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-east-1.amazonaws.com"
+                    "url": "https://metering.marketplace-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.us-east-1.api.aws"
+                    "url": "https://metering.marketplace.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://metering.marketplace-fips.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://metering.marketplace-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metering.marketplace.cn-north-1.api.amazonwebservices.com.cn"
+                    "url": "https://metering-marketplace.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -404,192 +320,6 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://metering.marketplace.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mgh/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mgh/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mgh/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mgh/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mgn/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mgn/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mgn/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mgn/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/migration-hub-refactor-spaces/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/migration-hub-refactor-spaces/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/migration-hub-refactor-spaces/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/migration-hub-refactor-spaces/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhub-config/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhub-config/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhub-config/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhub-config/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhuborchestrator/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhuborchestrator/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhuborchestrator/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhuborchestrator/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhubstrategy/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhubstrategy/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/migrationhubstrategy/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/migrationhubstrategy/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mpa/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mpa/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mpa/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mpa/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mpa.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mq/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mq/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mq/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mq/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mturk/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mturk/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mturk/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mturk/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,32 @@
 {
     "testCases": [
         {
+            "documentation": "For region sandbox with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-sandbox.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "sandbox",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -9,8 +35,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
@@ -22,8 +48,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
@@ -35,25 +61,168 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://mturk-requester.us-east-1.amazonaws.com"
+                    "url": "https://mturk-requester-fips.cn-north-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://mturk-requester.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
@@ -61,8 +230,21 @@
             },
             "params": {
                 "Region": "us-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
                 "UseFIPS": false,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -73,8 +255,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": true,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -85,10 +267,16 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
                 "UseFIPS": false,
+                "UseDualStack": true,
                 "Endpoint": "https://example.com"
             }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/mwaa/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/mwaa/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/mwaa/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/mwaa/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -339,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -363,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -387,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -411,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/neptune/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/neptune/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/neptune/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/neptune/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/neptunedata/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/neptunedata/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/neptunedata/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/neptunedata/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/network-firewall/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/network-firewall/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/network-firewall/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/network-firewall/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/networkflowmonitor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/networkflowmonitor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/networkflowmonitor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/networkflowmonitor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://networkflowmonitor.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/networkmanager/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/networkmanager/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/networkmanager/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/networkmanager/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,32 +1,51 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "networkmanager",
-                                "signingRegion": "us-west-2"
-                            }
-                        ]
-                    },
-                    "url": "https://networkmanager.us-west-2.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-west-2"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.us-west-2.api.aws"
                 }
             },
             "params": {
@@ -39,7 +58,15 @@
             "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-west-2"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.us-west-2.amazonaws.com"
                 }
             },
             "params": {
@@ -52,7 +79,15 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-west-2"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-west-2.api.aws"
                 }
             },
             "params": {
@@ -69,7 +104,6 @@
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "networkmanager",
                                 "signingRegion": "us-west-2"
                             }
                         ]
@@ -84,285 +118,381 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region aws-us-gov-global with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "networkmanager",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://networkmanager.us-gov-west-1.amazonaws.com"
+                    "url": "https://networkmanager-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "aws-us-gov-global",
-                "UseFIPS": false,
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingName": "networkmanager",
-                                "signingRegion": "us-gov-west-1"
+                                "signingRegion": "us-isob-east-1"
                             }
                         ]
                     },
-                    "url": "https://networkmanager.us-gov-west-1.amazonaws.com"
+                    "url": "https://networkmanager-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "Region": "us-isof-south-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://networkmanager.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://networkmanager.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/networkmonitor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/networkmonitor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/networkmonitor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/networkmonitor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/notifications/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/notifications/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/notifications/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/notifications/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://notifications.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/notificationscontacts/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/notificationscontacts/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/notificationscontacts/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/notificationscontacts/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -143,166 +143,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-iso-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isob-east-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "eu-isoe-west-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
-                            }
-                        ]
-                    },
-                    "url": "https://notifications-contacts.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/oam/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/oam/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/oam/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/oam/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/observabilityadmin/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/observabilityadmin/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/observabilityadmin/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/observabilityadmin/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/odb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/odb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/odb/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/odb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://odb.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/omics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/omics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/omics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/omics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/opensearch/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/opensearch/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/opensearch/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/opensearch/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/opensearchserverless/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/opensearchserverless/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/opensearchserverless/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/opensearchserverless/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/opsworks/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/opsworks/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/opsworks/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/opsworks/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,496 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.eu-west-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.sa-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/opsworkscm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/opsworkscm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/opsworkscm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/opsworkscm/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,418 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://opsworks-cm.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/organizations/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/organizations/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/organizations/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/organizations/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -334,17 +334,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -358,17 +347,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/osis/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/osis/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/osis/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/osis/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/outposts/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/outposts/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/outposts/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/outposts/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,28 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/panorama/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/panorama/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/panorama/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/panorama/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/partnercentral-selling/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/partnercentral-selling/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/partnercentral-selling/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/partnercentral-selling/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://partnercentral-selling.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/payment-cryptography/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/payment-cryptography/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/payment-cryptography/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/payment-cryptography/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/payment-cryptography-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/payment-cryptography-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/payment-cryptography-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/payment-cryptography-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pca-connector-ad/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pca-connector-ad/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pca-connector-ad/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pca-connector-ad/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pca-connector-scep/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pca-connector-scep/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pca-connector-scep/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pca-connector-scep/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pcs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pcs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pcs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pcs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize-events/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize-events/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize-events/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize-events/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/personalize-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/personalize-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pi/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pi/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pi/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pi/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -430,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -454,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -502,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -326,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +339,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -374,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -398,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-email/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-email/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-email/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-email/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,55 +1,55 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint-fips.us-gov-east-1.api.aws"
+                    "url": "https://sms-voice.pinpoint-fips.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://sms-voice.pinpoint-fips.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-gov-east-1.api.aws"
+                    "url": "https://sms-voice.pinpoint.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-gov-east-1.amazonaws.com"
+                    "url": "https://sms-voice.pinpoint.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -61,8 +61,8 @@
             },
             "params": {
                 "Region": "cn-north-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
@@ -74,8 +74,8 @@
             },
             "params": {
                 "Region": "cn-north-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
@@ -87,8 +87,8 @@
             },
             "params": {
                 "Region": "cn-north-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
@@ -100,119 +100,86 @@
             },
             "params": {
                 "Region": "cn-north-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://sms-voice.pinpoint-fips.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://sms-voice.pinpoint-fips.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint-fips.us-east-1.api.aws"
+                    "url": "https://sms-voice.pinpoint.us-gov-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint-fips.us-east-1.amazonaws.com"
+                    "url": "https://sms-voice.pinpoint.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-east-1.api.aws"
+                    "url": "https://sms-voice.pinpoint-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-east-1.amazonaws.com"
+                    "url": "https://sms-voice.pinpoint.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseDualStack": true,
-                "UseFIPS": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -224,45 +191,47 @@
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseDualStack": false,
-                "UseFIPS": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://sms-voice.pinpoint.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseDualStack": true,
-                "UseFIPS": false
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://sms-voice.pinpoint.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false,
-                "UseFIPS": false
+                "Endpoint": "https://example.com"
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
                     "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": false,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -273,8 +242,8 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": false,
                 "UseFIPS": true,
+                "UseDualStack": false,
                 "Endpoint": "https://example.com"
             }
         },
@@ -285,10 +254,16 @@
             },
             "params": {
                 "Region": "us-east-1",
-                "UseDualStack": true,
                 "UseFIPS": false,
+                "UseDualStack": true,
                 "Endpoint": "https://example.com"
             }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice-v2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice-v2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice-v2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pinpoint-sms-voice-v2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pipes/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pipes/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pipes/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pipes/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/polly/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/polly/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/polly/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/polly/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/pricing/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/pricing/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/pricing/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/pricing/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -170,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -194,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -218,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -242,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/privatenetworks/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/privatenetworks/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/privatenetworks/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/privatenetworks/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,314 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://private-networks.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/proton/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/proton/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/proton/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/proton/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -209,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -233,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -257,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -281,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/qapps/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/qapps/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/qapps/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/qapps/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/qconnect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/qconnect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/qconnect/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/qconnect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/qldb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/qldb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/qldb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/qldb/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,483 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://qldb.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/qldb-session/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/qldb-session/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/qldb-session/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/qldb-session/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,470 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://session.qldb.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/quicksight/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/quicksight/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/quicksight/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/quicksight/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ram/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ram/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ram/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ram/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rbin/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rbin/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rbin/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rbin/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rds/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rds/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rds/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rds/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rds-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rds-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rds-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rds-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -547,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -571,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -595,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -619,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift-data/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift-data/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift-data/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift-data/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift-serverless/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift-serverless/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/redshift-serverless/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/redshift-serverless/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -287,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -311,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -335,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -359,17 +326,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rekognition/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rekognition/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rekognition/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rekognition/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -391,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -415,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -439,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -463,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/repostspace/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/repostspace/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/repostspace/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/repostspace/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/resiliencehub/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/resiliencehub/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/resiliencehub/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/resiliencehub/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -404,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -428,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -452,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -476,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/resource-explorer-2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/resource-explorer-2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/resource-explorer-2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/resource-explorer-2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/resource-groups/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/resource-groups/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/resource-groups/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/resource-groups/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/resourcegroupstaggingapi/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/resourcegroupstaggingapi/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/resourcegroupstaggingapi/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/resourcegroupstaggingapi/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -469,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -493,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -517,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/robomaker/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/robomaker/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/robomaker/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/robomaker/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,405 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://robomaker.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rolesanywhere/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rolesanywhere/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rolesanywhere/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rolesanywhere/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -391,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -415,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -439,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -463,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -334,17 +334,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -358,17 +347,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-cluster/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-cluster/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-cluster/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-cluster/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-control-config/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-control-config/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-control-config/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-control-config/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,31 +1,50 @@
 {
     "testCases": [
         {
-            "documentation": "For region aws-global with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "route53-recovery-control-config",
-                                "signingRegion": "us-west-2"
-                            }
-                        ]
-                    },
-                    "url": "https://route53-recovery-control-config.us-west-2.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "aws-global",
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
             "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://route53-recovery-control-config-fips.us-east-1.api.aws"
                 }
             },
@@ -39,6 +58,14 @@
             "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
                     "url": "https://route53-recovery-control-config-fips.us-east-1.amazonaws.com"
                 }
             },
@@ -52,7 +79,15 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-west-2"
+                            }
+                        ]
+                    },
+                    "url": "https://arc-recovery-control-config.us-west-2.api.aws"
                 }
             },
             "params": {
@@ -65,7 +100,15 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-west-2"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-west-2.amazonaws.com"
                 }
             },
             "params": {
@@ -75,254 +118,381 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.cn-north-1.api.amazonwebservices.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.cn-north-1.amazonaws.com.cn"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "cn-northwest-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-gov-east-1.api.aws"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-gov-east-1.amazonaws.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-iso-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isob-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.eu-isoe-west-1.cloud.adc-e.uk"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-iso-east-1.c2s.ic.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eu-isoe-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "Region": "us-isof-south-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://route53-recovery-control-config.us-isob-east-1.sc2s.sgov.gov"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config-fips.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-gov-west-1"
+                            }
+                        ]
+                    },
+                    "url": "https://route53-recovery-control-config.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-readiness/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-readiness/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53-recovery-readiness/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53-recovery-readiness/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53domains/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53domains/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53domains/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53domains/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53profiles/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53profiles/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53profiles/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53profiles/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/route53resolver/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/route53resolver/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/route53resolver/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/route53resolver/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -482,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -506,28 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -541,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rtbfabric/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rtbfabric/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rtbfabric/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rtbfabric/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,330 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.cn-northwest-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.cn-northwest-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.eusc-de-east-1.amazonaws.eu"
+                }
+            },
+            "params": {
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.eusc-de-east-1.amazonaws.eu"
+                }
+            },
+            "params": {
+                "Region": "eusc-de-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.eu-isoe-west-1.cloud.adc-e.uk"
+                }
+            },
+            "params": {
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.eu-isoe-west-1.cloud.adc-e.uk"
+                }
+            },
+            "params": {
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isof-south-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-isof-south-1.csp.hci.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isof-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric-fips.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://rtbfabric.us-gov-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/rum/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/rum/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/rum/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/rum/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -274,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -298,17 +287,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -322,17 +300,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -346,17 +313,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/s3/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/s3/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/s3/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/s3/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -7883,6 +7883,123 @@
             }
         },
         {
+            "documentation": "Data Plane with short zone name china region",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--abcd-ab1--x-s3.s3express-abcd-ab1.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "mybucket--abcd-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short zone name with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--abcd-ab1--xa-s3.s3express-abcd-ab1.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "myaccesspoint--abcd-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short zone name with AP china region",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--abcd-ab1--xa-s3.s3express-abcd-ab1.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "myaccesspoint--abcd-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with short zone names (13 chars)",
             "expect": {
                 "endpoint": {
@@ -7922,6 +8039,45 @@
             }
         },
         {
+            "documentation": "Data Plane with short zone names (13 chars) with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-test-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with medium zone names (14 chars)",
             "expect": {
                 "endpoint": {
@@ -7961,6 +8117,45 @@
             }
         },
         {
+            "documentation": "Data Plane with medium zone names (14 chars) with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-test1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with long zone names (20 chars)",
             "expect": {
                 "endpoint": {
@@ -8000,6 +8195,45 @@
             }
         },
         {
+            "documentation": "Data Plane with long zone names (20 chars)",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-test1-long1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with short zone fips",
             "expect": {
                 "endpoint": {
@@ -8040,6 +8274,100 @@
             }
         },
         {
+            "documentation": "Data Plane with short zone fips china region",
+            "expect": {
+                "error": "Partition does not support FIPS"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "mybucket--test-ab1--x-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "mybucket--test-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short zone fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-ab1--xa-s3.s3express-fips-test-ab1.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short zone fips with AP china region",
+            "expect": {
+                "error": "Partition does not support FIPS"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with short zone (13 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8080,6 +8408,46 @@
             }
         },
         {
+            "documentation": "Data Plane with short zone (13 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-fips-test-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with medium zone (14 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8120,6 +8488,46 @@
             }
         },
         {
+            "documentation": "Data Plane with medium zone (14 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-fips-test1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with long zone (20 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8160,6 +8568,46 @@
             }
         },
         {
+            "documentation": "Data Plane with long zone (20 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-fips-test1-long1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with long AZ",
             "expect": {
                 "endpoint": {
@@ -8199,6 +8647,45 @@
             }
         },
         {
+            "documentation": "Data Plane with long AZ with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-az1--xa-s3.s3express-test1-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data Plane with long AZ fips",
             "expect": {
                 "endpoint": {
@@ -8239,6 +8726,46 @@
             }
         },
         {
+            "documentation": "Data Plane with long AZ fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-az1--xa-s3.s3express-fips-test1-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Control plane with short AZ bucket",
             "expect": {
                 "endpoint": {
@@ -8278,6 +8805,45 @@
             }
         },
         {
+            "documentation": "Control plane with short AZ bucket china region",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://s3express-control.cn-north-1.amazonaws.com.cn/mybucket--test-ab1--x-s3"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "CreateBucket",
+                    "operationParams": {
+                        "Bucket": "mybucket--test-ab1--x-s3"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "mybucket--test-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": false
+            }
+        },
+        {
             "documentation": "Control plane with short AZ bucket and fips",
             "expect": {
                 "endpoint": {
@@ -8318,6 +8884,33 @@
             }
         },
         {
+            "documentation": "Control plane with short AZ bucket and fips china region",
+            "expect": {
+                "error": "Partition does not support FIPS"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "CreateBucket",
+                    "operationParams": {
+                        "Bucket": "mybucket--test-ab1--x-s3"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "cn-north-1",
+                "Bucket": "mybucket--test-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": false
+            }
+        },
+        {
             "documentation": "Control plane without bucket",
             "expect": {
                 "endpoint": {
@@ -8416,6 +9009,33 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with short AZ with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-usw2-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with short zone (13 chars)",
             "expect": {
                 "endpoint": {
@@ -8443,6 +9063,33 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with short zone (13 chars) with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-test-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with short AZ fips",
             "expect": {
                 "endpoint": {
@@ -8470,6 +9117,33 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with short AZ fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-fips-usw2-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with short zone (13 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8497,6 +9171,33 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with short zone (13 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-fips-test-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with long AZ",
             "expect": {
                 "endpoint": {
@@ -8525,6 +9226,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with long AZ with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-az1--xa-s3.s3express-test1-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with medium zone(14 chars)",
             "expect": {
                 "endpoint": {
@@ -8553,6 +9282,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with medium zone(14 chars) with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-test1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with long zone(20 chars)",
             "expect": {
                 "endpoint": {
@@ -8581,6 +9338,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with long zone(20 chars) with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-test1-long1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with long AZ fips",
             "expect": {
                 "endpoint": {
@@ -8609,6 +9394,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with long AZ fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-az1--xa-s3.s3express-fips-test1-az1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-az1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with medium zone (14 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8637,6 +9450,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with medium zone (14 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-fips-test1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Data Plane sigv4 auth with long zone (20 chars) fips",
             "expect": {
                 "endpoint": {
@@ -8665,6 +9506,34 @@
             }
         },
         {
+            "documentation": "Data Plane sigv4 auth with long zone (20 chars) fips with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-fips-test1-long1-zone-ab1.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
             "documentation": "Control Plane host override",
             "expect": {
                 "endpoint": {
@@ -8694,6 +9563,35 @@
             }
         },
         {
+            "documentation": "Control Plane host override with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.custom.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": true,
+                "Endpoint": "https://custom.com"
+            }
+        },
+        {
             "documentation": "Control Plane host override no bucket",
             "expect": {
                 "endpoint": {
@@ -8762,6 +9660,46 @@
             }
         },
         {
+            "documentation": "Data plane host override non virtual session auth with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://10.0.0.1/myaccesspoint--usw2-az1--xa-s3"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "SDK::Endpoint": "https://10.0.0.1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "Endpoint": "https://10.0.0.1"
+            }
+        },
+        {
             "documentation": "Control Plane host override ip",
             "expect": {
                 "endpoint": {
@@ -8791,6 +9729,35 @@
             }
         },
         {
+            "documentation": "Control Plane host override ip with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://10.0.0.1/myaccesspoint--usw2-az1--xa-s3"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": true,
+                "Endpoint": "https://10.0.0.1"
+            }
+        },
+        {
             "documentation": "Data plane host override",
             "expect": {
                 "endpoint": {
@@ -8831,6 +9798,46 @@
             }
         },
         {
+            "documentation": "Data plane host override with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.custom.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "SDK::Endpoint": "https://custom.com"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "Endpoint": "https://custom.com"
+            }
+        },
+        {
             "documentation": "bad format error",
             "expect": {
                 "error": "Unrecognized S3Express bucket name format."
@@ -8857,6 +9864,32 @@
             }
         },
         {
+            "documentation": "bad AP format error",
+            "expect": {
+                "error": "Unrecognized S3Express bucket name format."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--usaz1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "myaccesspoint--usaz1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "bad format error no session auth",
             "expect": {
                 "error": "Unrecognized S3Express bucket name format."
@@ -8884,30 +9917,30 @@
             }
         },
         {
-            "documentation": "dual-stack error",
+            "documentation": "bad AP format error no session auth",
             "expect": {
-                "error": "S3Express does not support Dual-stack."
+                "error": "Unrecognized S3Express bucket name format."
             },
             "operationInputs": [
                 {
                     "builtInParams": {
-                        "AWS::Region": "us-east-1",
-                        "AWS::UseDualStack": true
+                        "AWS::Region": "us-east-1"
                     },
                     "operationName": "GetObject",
                     "operationParams": {
-                        "Bucket": "mybucket--test-ab1--x-s3",
+                        "Bucket": "myaccesspoint--usaz1--xa-s3",
                         "Key": "key"
                     }
                 }
             ],
             "params": {
                 "Region": "us-east-1",
-                "Bucket": "mybucket--test-ab1--x-s3",
+                "Bucket": "myaccesspoint--usaz1--xa-s3",
                 "UseFIPS": false,
-                "UseDualStack": true,
+                "UseDualStack": false,
                 "Accelerate": false,
-                "UseS3ExpressControlEndpoint": false
+                "UseS3ExpressControlEndpoint": false,
+                "DisableS3ExpressSessionAuth": true
             }
         },
         {
@@ -8938,6 +9971,33 @@
             }
         },
         {
+            "documentation": "accelerate error with AP",
+            "expect": {
+                "error": "S3Express does not support S3 Accelerate."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::S3::Accelerate": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "myaccesspoint--test-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": true,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "Data plane bucket format error",
             "expect": {
                 "error": "S3Express bucket name is not a valid virtual hostable name."
@@ -8964,6 +10024,32 @@
             }
         },
         {
+            "documentation": "Data plane AP format error",
+            "expect": {
+                "error": "S3Express bucket name is not a valid virtual hostable name."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "my.myaccesspoint--test-ab1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "my.myaccesspoint--test-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
             "documentation": "host override data plane bucket error session auth",
             "expect": {
                 "error": "S3Express bucket name is not a valid virtual hostable name."
@@ -8991,6 +10077,33 @@
             }
         },
         {
+            "documentation": "host override data plane AP error session auth",
+            "expect": {
+                "error": "S3Express bucket name is not a valid virtual hostable name."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "SDK::Endpoint": "https://custom.com"
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "my.myaccesspoint--usw2-az1--xa-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "my.myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "Endpoint": "https://custom.com"
+            }
+        },
+        {
             "documentation": "host override data plane bucket error",
             "expect": {
                 "error": "S3Express bucket name is not a valid virtual hostable name."
@@ -9004,6 +10117,1280 @@
                 "Endpoint": "https://custom.com",
                 "DisableS3ExpressSessionAuth": true
             }
+        },
+        {
+            "documentation": "host override data plane AP error",
+            "expect": {
+                "error": "S3Express bucket name is not a valid virtual hostable name."
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "my.myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Accelerate": false,
+                "Endpoint": "https://custom.com",
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Control plane without bucket and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://s3express-control.dualstack.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "ListDirectoryBuckets"
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": false
+            }
+        },
+        {
+            "documentation": "Control plane without bucket, fips and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://s3express-control-fips.dualstack.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "ListDirectoryBuckets"
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true,
+                "DisableS3ExpressSessionAuth": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short AZ and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az1--x-s3.s3express-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "mybucket--usw2-az1--x-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with short AZ and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az1--x-s3.s3express-fips-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-west-2",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetObject",
+                    "operationParams": {
+                        "Bucket": "mybucket--usw2-az1--x-s3",
+                        "Key": "key"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with short AZ and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az1--x-s3.s3express-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with short AZ and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az1--x-s3.s3express-fips-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az12--x-s3.s3express-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az12--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az12--x-s3.s3express-fips-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az12--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az12--x-s3.s3express-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az12--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with 9-char zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--usw2-az12--x-s3.s3express-fips-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--usw2-az12--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with 13-char zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test-zone-ab1--x-s3.s3express-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with 13-char zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test-zone-ab1--x-s3.s3express-fips-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with 13-char zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test-zone-ab1--x-s3.s3express-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with 13-char zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test-zone-ab1--x-s3.s3express-fips-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with 14-char zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-zone-ab1--x-s3.s3express-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with 14-char zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-zone-ab1--x-s3.s3express-fips-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with 14-char zone and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-zone-ab1--x-s3.s3express-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with 14-char zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-zone-ab1--x-s3.s3express-fips-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with long zone (20 cha) and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-long1-zone-ab1--x-s3.s3express-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-long1-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with long zone (20 char) and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-long1-zone-ab1--x-s3.s3express-fips-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-long1-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with long zone (20 char) and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-long1-zone-ab1--x-s3.s3express-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-long1-zone-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with long zone (20 char) and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://mybucket--test1-long1-zone-ab1--x-s3.s3express-fips-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "mybucket--test1-long1-zone-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Control plane and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://s3express-control-fips.dualstack.us-east-1.amazonaws.com/mybucket--test-ab1--x-s3"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true,
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "CreateBucket",
+                    "operationParams": {
+                        "Bucket": "mybucket--test-ab1--x-s3"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "mybucket--test-ab1--x-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true
+            }
+        },
+        {
+            "documentation": "Data plane with zone and dualstack and AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data plane with zone and FIPS with dualstack and AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-fips-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with zone and dualstack and AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane AP sigv4 auth with zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az1--xa-s3.s3express-fips-usw2-az1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with zone (9 char) and AP with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az12--xa-s3.s3express-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az12--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with zone (9 char) and FIPS with AP and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az12--xa-s3.s3express-fips-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az12--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with (9 char) zone and dualstack with AP",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az12--xa-s3.s3express-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az12--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Access Point sigv4 auth with (9 char) zone and FIPS with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--usw2-az12--xa-s3.s3express-fips-usw2-az12.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--usw2-az12--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with zone (13 char) and AP with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with zone (13 char) and AP with FIPS and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-fips-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with (13 char) zone with AP and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with (13 char) zone with AP and FIPS and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test-zone-ab1--xa-s3.s3express-fips-test-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with (14 char) zone and AP with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with (14 char) zone and AP with FIPS and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-fips-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane sigv4 auth with (14 char) zone and AP with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with (14 char) zone and AP with FIPS and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-zone-ab1--xa-s3.s3express-fips-test1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data Plane with (20 char) zone and AP with dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data Plane with (20 char) zone and AP with FIPS and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4-s3express",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-fips-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": false
+            }
+        },
+        {
+            "documentation": "Data plane AP with sigv4 and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Data plane AP sigv4 with fips and dualstack",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-west-2",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://myaccesspoint--test1-long1-zone-ab1--xa-s3.s3express-fips-test1-long1-zone-ab1.dualstack.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "Bucket": "myaccesspoint--test1-long1-zone-ab1--xa-s3",
+                "UseFIPS": true,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "DisableS3ExpressSessionAuth": true
+            }
+        },
+        {
+            "documentation": "Control plane with dualstack and bucket",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ],
+                        "backend": "S3Express"
+                    },
+                    "url": "https://s3express-control.dualstack.us-east-1.amazonaws.com/mybucket--test-ab1--x-s3"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "CreateBucket",
+                    "operationParams": {
+                        "Bucket": "mybucket--test-ab1--x-s3"
+                    }
+                }
+            ],
+            "params": {
+                "Region": "us-east-1",
+                "Bucket": "mybucket--test-ab1--x-s3",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Accelerate": false,
+                "UseS3ExpressControlEndpoint": true
+            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/s3control/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/s3control/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/s3control/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/s3control/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -455,27 +455,7 @@
         {
             "documentation": "gov cloud with fips@cn-north-1",
             "expect": {
-                "endpoint": {
-                    "headers": {
-                        "x-amz-account-id": [
-                            "123456789012"
-                        ],
-                        "x-amz-outpost-id": [
-                            "op-01234567890123456"
-                        ]
-                    },
-                    "properties": {
-                        "authSchemes": [
-                            {
-                                "name": "sigv4",
-                                "signingName": "s3-outposts",
-                                "signingRegion": "cn-north-1",
-                                "disableDoubleEncoding": true
-                            }
-                        ]
-                    },
-                    "url": "https://s3-outposts-fips.cn-north-1.amazonaws.com.cn"
-                }
+                "error": "Partition does not support FIPS"
             },
             "operationInputs": [
                 {
@@ -2740,17 +2720,6 @@
             "expect": {
                 "error": "AccountId must only contain a-z, A-Z, 0-9 and `-`."
             },
-            "operationInputs": [
-                {
-                    "builtInParams": {
-                        "AWS::Region": "us-east-1"
-                    },
-                    "operationName": "ListRegionalBuckets",
-                    "operationParams": {
-                        "AccountId": "/?invalid&not-host*label"
-                    }
-                }
-            ],
             "params": {
                 "AccountId": "/?invalid&not-host*label",
                 "Region": "us-east-1",
@@ -2896,18 +2865,6 @@
             "expect": {
                 "error": "AccountId must only contain a-z, A-Z, 0-9 and `-`."
             },
-            "operationInputs": [
-                {
-                    "builtInParams": {
-                        "AWS::Region": "us-east-1",
-                        "SDK::Endpoint": "https://beta.example.com"
-                    },
-                    "operationName": "ListRegionalBuckets",
-                    "operationParams": {
-                        "AccountId": "/?invalid&not-host*label"
-                    }
-                }
-            ],
             "params": {
                 "Region": "us-east-1",
                 "Endpoint": "https://beta.example.com",
@@ -3044,18 +3001,6 @@
             "expect": {
                 "error": "AccountId must only contain a-z, A-Z, 0-9 and `-`."
             },
-            "operationInputs": [
-                {
-                    "builtInParams": {
-                        "AWS::Region": "us-east-2"
-                    },
-                    "operationName": "ListRegionalBuckets",
-                    "operationParams": {
-                        "OutpostId": "op-123",
-                        "AccountId": "/?invalid&not-host*label"
-                    }
-                }
-            ],
             "params": {
                 "AccountId": "/?invalid&not-host*label",
                 "OutpostId": "op-123",
@@ -3249,12 +3194,12 @@
                     "operationName": "ListRegionalBuckets",
                     "operationParams": {
                         "OutpostId": "op-123",
-                        "AccountId": "0123456789012"
+                        "AccountId": "012345678912"
                     }
                 }
             ],
             "params": {
-                "AccountId": "0123456789012",
+                "AccountId": "012345678912",
                 "OutpostId": "op-123",
                 "Region": "cn-north-1",
                 "RequiresAccountId": true,
@@ -3275,12 +3220,12 @@
                     "operationName": "ListRegionalBuckets",
                     "operationParams": {
                         "OutpostId": "?outpost/invalid+",
-                        "AccountId": "0123456789012"
+                        "AccountId": "012345678912"
                     }
                 }
             ],
             "params": {
-                "AccountId": "0123456789012",
+                "AccountId": "012345678912",
                 "OutpostId": "?outpost/invalid+",
                 "Region": "us-west-1",
                 "RequiresAccountId": true,
@@ -3291,11 +3236,11 @@
         {
             "documentation": "bucket ARN with mismatched accountId",
             "expect": {
-                "error": "Invalid ARN: the accountId specified in the ARN (`999999`) does not match the parameter (`0123456789012`)"
+                "error": "Invalid ARN: the accountId specified in the ARN (`999999`) does not match the parameter (`012345678912`)"
             },
             "params": {
                 "Bucket": "arn:aws:s3-outposts:us-west-2:999999:outpost:op-01234567890123456:bucket:mybucket",
-                "AccountId": "0123456789012",
+                "AccountId": "012345678912",
                 "Region": "us-west-2",
                 "RequiresAccountId": true,
                 "UseDualStack": false,
@@ -3772,6 +3717,1708 @@
                 "UseFIPS": false,
                 "UseDualStack": true
             }
+        },
+        {
+            "documentation": "Tagging on express bucket routed to s3express-control",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Tagging on express ap routed to s3express-control",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Tagging on express bucket routed to s3express-control FIPS when FIPS enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Tagging on express bucket cn routed to s3express-control china endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "AccountId": "871317572157",
+                "Region": "cn-north-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Tagging on express bucket cn routed to s3express-control china endpoint with FIPS",
+            "expect": {
+                "error": "Partition does not support FIPS"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws-cn:s3express:cn-north-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "AccountId": "871317572157",
+                "Region": "cn-north-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Tagging on express bucket with custom endpoint routed to custom endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://my-endpoint.express-control.s3.aws.dev"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Tagging on express access point with custom endpoint routed to custom endpoint",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://my-endpoint.express-control.s3.aws.dev"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:accesspoint/crachlintest--use1-az4--xa-s3",
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Tagging on express bucket with dualstack and custom endpoint fails",
+            "expect": {
+                "error": "Invalid Configuration: DualStack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "TagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "Tags": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "UntagResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157",
+                        "TagKeys": []
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "ListTagsForResource",
+                    "operationParams": {
+                        "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "ResourceArn": "arn:aws:s3express:us-east-1:871317572157:bucket/crachlintest--use1-az4--x-s3",
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "PutAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control for List",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "UseS3ExpressControlEndpoint": true,
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control for FIPS",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "PutAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control for FIPS for List",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "UseS3ExpressControlEndpoint": true,
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control for china region",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "PutAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "DeleteAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "AccountId": "871317572157",
+                "Region": "cn-north-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to s3express-control for china region for List",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "cn-north-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://s3express-control.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1"
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "cn-north-1",
+                "UseS3ExpressControlEndpoint": true,
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Error when Access Point APIs on express bucket routed to s3express-control for china and FIPS",
+            "expect": {
+                "error": "Partition does not support FIPS"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "PutAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "cn-north-1",
+                        "AWS::UseFIPS": true
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "cn-north-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "Error Access Point APIs on express bucket routed to s3express-control invalid zone",
+            "expect": {
+                "error": "Unrecognized S3Express Access Point name format."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "Bucket": "mybucket-garbage-zone-garbage-zone",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "PutAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPointScope",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1"
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint-garbage-zone--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccessPointName": "myaccesspoint-garbage-zone--xa-s3",
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to custom endpoint if provided",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://my-endpoint.express-control.s3.aws.dev"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Access Point APIs on express bucket routed to custom endpoint if provided for List",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "s3express",
+                                "signingRegion": "us-east-1",
+                                "disableDoubleEncoding": true
+                            }
+                        ]
+                    },
+                    "url": "https://my-endpoint.express-control.s3.aws.dev"
+                }
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev"
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "UseS3ExpressControlEndpoint": true,
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "RequiresAccountId": true,
+                "UseDualStack": false,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Error on Access Point APIs on express bucket for dual stack",
+            "expect": {
+                "error": "S3Express does not support Dual-stack."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Error Access Point APIs on express bucket for dual stack for List",
+            "expect": {
+                "error": "S3Express does not support Dual-stack."
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "UseS3ExpressControlEndpoint": true,
+                "RequiresAccountId": true,
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Error on Access Point APIs on express bucket for custom endpoint and dual stack",
+            "expect": {
+                "error": "Invalid Configuration: DualStack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "CreateAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "Bucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157",
+                        "Scope": {
+                            "Prefixes": [],
+                            "Permissions": []
+                        }
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "DeleteAccessPoint",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "PutAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157",
+                        "Policy": "my-policy"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "DeleteAccessPointPolicy",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                },
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "GetAccessPointPolicyStatus",
+                    "operationParams": {
+                        "Name": "myaccesspoint--abcd-ab1--xa-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "AccessPointName": "myaccesspoint--abcd-ab1--xa-s3",
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "Region": "us-east-1",
+                "RequiresAccountId": true,
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Error Access Point APIs on express bucket for custom endpoint and dual stack for List",
+            "expect": {
+                "error": "Invalid Configuration: DualStack and custom endpoint are not supported"
+            },
+            "operationInputs": [
+                {
+                    "builtInParams": {
+                        "AWS::Region": "us-east-1",
+                        "SDK::Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                        "AWS::UseDualStack": true
+                    },
+                    "operationName": "ListAccessPointsForDirectoryBuckets",
+                    "operationParams": {
+                        "DirectoryBucket": "mybucket--abcd-ab1--x-s3",
+                        "AccountId": "871317572157"
+                    }
+                }
+            ],
+            "params": {
+                "AccountId": "871317572157",
+                "Region": "us-east-1",
+                "UseS3ExpressControlEndpoint": true,
+                "Endpoint": "https://my-endpoint.express-control.s3.aws.dev",
+                "RequiresAccountId": true,
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/s3outposts/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/s3outposts/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/s3outposts/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/s3outposts/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/s3tables/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/s3tables/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/s3tables/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/s3tables/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/s3vectors/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/s3vectors/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/s3vectors/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/s3vectors/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://s3vectors.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -433,7 +433,7 @@
             "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.sagemaker.us-gov-west-1.amazonaws.com"
+                    "url": "https://api-fips.sagemaker.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
@@ -459,7 +459,7 @@
             "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://api.sagemaker.us-gov-east-1.amazonaws.com"
+                    "url": "https://api-fips.sagemaker.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,28 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-a2i-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-a2i-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-a2i-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-a2i-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-edge/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-edge/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-edge/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-edge/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-featurestore-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-featurestore-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-featurestore-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-featurestore-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-geospatial/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-geospatial/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-geospatial/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-geospatial/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-metrics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-metrics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-metrics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-metrics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,42 +1,354 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metrics.sagemaker-fips.us-east-1.api.aws"
+                    "url": "https://metrics.sagemaker.af-south-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "af-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-northeast-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-northeast-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-northeast-3.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-3",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-south-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-south-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-south-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-south-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-southeast-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-southeast-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-southeast-3.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-3",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-4 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ap-southeast-4.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-4",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.ca-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ca-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ca-central-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.ca-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ca-central-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ca-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metrics.sagemaker-fips.us-east-1.amazonaws.com"
+                    "url": "https://metrics.sagemaker.ca-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "ca-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ca-west-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.ca-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ca-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://metrics.sagemaker.us-east-1.api.aws"
+                    "url": "https://metrics.sagemaker.eu-central-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "eu-central-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-central-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-central-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-central-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-north-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-south-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-south-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-south-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-south-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.eu-west-3.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-west-3",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region il-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.il-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "il-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region me-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.me-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "me-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.me-south-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "me-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.sa-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "sa-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
@@ -53,6 +365,123 @@
             }
         },
         {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.us-east-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.us-east-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.us-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.us-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics-fips.sagemaker.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://metrics.sagemaker.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -157,17 +586,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +599,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +612,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +625,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-runtime/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-runtime/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sagemaker-runtime/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sagemaker-runtime/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,28 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/savingsplans/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/savingsplans/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/savingsplans/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/savingsplans/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -49,19 +49,6 @@
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://savingsplans.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -188,17 +175,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -212,17 +188,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -236,17 +201,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -260,17 +214,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -323,21 +266,88 @@
             }
         },
         {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        },
+        {
+            "documentation": "For region not set with FIPS disabled and DualStack enabled",
             "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "savingsplans",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://savingsplans.global.api.aws"
+                }
+            },
+            "params": {
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "savingsplans",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://savingsplans.global.api.aws"
+                }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false,
                 "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "Missing region",
+            "documentation": "For region us-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "error": "Invalid Configuration: Missing Region"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingName": "savingsplans",
+                                "signingRegion": "us-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://savingsplans.global.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-1",
+                "UseDualStack": true,
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Commercial region with custom SDK endpoint",
+            "expect": {
+                "endpoint": {
+                    "url": "https://custom.example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseDualStack": false,
+                "UseFIPS": false,
+                "Endpoint": "https://custom.example.com"
             }
         }
     ],
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/scheduler/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/scheduler/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/scheduler/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/scheduler/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/schemas/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/schemas/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/schemas/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/schemas/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/secretsmanager/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/secretsmanager/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/secretsmanager/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/secretsmanager/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,28 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/security-ir/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/security-ir/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/security-ir/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/security-ir/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -95,102 +95,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir-fips.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir.eu-isoe-west-1.cloud.adc-e.uk"
-                }
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir-fips.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": true
-            }
-        },
-        {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://security-ir.us-isof-south-1.csp.hci.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false
-            }
-        },
-        {
             "documentation": "Missing region",
             "expect": {
                 "error": "Invalid Configuration: Missing Region"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/securityhub/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/securityhub/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/securityhub/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/securityhub/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/securitylake/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/securitylake/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/securitylake/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/securitylake/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/serverlessrepo/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/serverlessrepo/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/serverlessrepo/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/serverlessrepo/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/service-quotas/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/service-quotas/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/service-quotas/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/service-quotas/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -456,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -480,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -504,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -528,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/servicecatalog/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/servicecatalog/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/servicecatalog/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/servicecatalog/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/servicecatalog-appregistry/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/servicecatalog-appregistry/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/servicecatalog-appregistry/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/servicecatalog-appregistry/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/servicediscovery/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/servicediscovery/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/servicediscovery/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/servicediscovery/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -543,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -567,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ses/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ses/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ses/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ses/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sesv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sesv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sesv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sesv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -443,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -467,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -491,17 +469,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -515,17 +482,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -635,7 +591,7 @@
                             }
                         ]
                     },
-                    "url": "https://abc123.456def.endpoints.email.api.aws"
+                    "url": "https://abc123.456def.endpoints.email.global.api.aws"
                 }
             },
             "params": {
@@ -740,17 +696,6 @@
                 "Region": "us-east-1",
                 "Endpoint": "https://example.com"
             }
-        },
-        {
-            "documentation": "Valid EndpointId with DualStack enabled and partition does not support DualStack",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "EndpointId": "abc123.456def",
-                "UseDualStack": true,
-                "Region": "us-isob-east-1"
-            }
         }
     ],
     "version": "1.0"
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/shield/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/shield/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/shield/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/shield/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -219,17 +219,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -243,17 +232,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -267,17 +245,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -291,17 +258,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/signer/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/signer/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/signer/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/signer/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/simspaceweaver/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/simspaceweaver/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/simspaceweaver/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/simspaceweaver/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sms/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sms/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sms/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sms/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,639 +0,0 @@
-{
-    "testCases": [
-        {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.eu-west-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.me-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.sa-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "sa-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.cn-northwest-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-northwest-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-gov-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-gov-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-gov-west-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-iso-east-1.c2s.ic.gov"
-                }
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms-fips.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://sms.us-isob-east-1.sc2s.sgov.gov"
-                }
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://example.com"
-                }
-            },
-            "params": {
-                "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "Missing region",
-            "expect": {
-                "error": "Invalid Configuration: Missing Region"
-            }
-        }
-    ],
-    "version": "1.0"
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/snow-device-management/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/snow-device-management/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/snow-device-management/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/snow-device-management/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/snowball/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/snowball/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/snowball/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/snowball/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -664,17 +664,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -688,17 +677,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -712,17 +690,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -736,17 +703,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sns/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sns/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sns/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sns/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/socialmessaging/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/socialmessaging/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/socialmessaging/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/socialmessaging/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sqs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sqs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sqs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sqs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-contacts/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-contacts/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-contacts/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-contacts/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-guiconnect/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-guiconnect/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-guiconnect/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-guiconnect/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,270 @@
+{
+    "testCases": [
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.cn-north-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.cn-north-1.amazonaws.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-north-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-gov-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-gov-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-gov-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-iso-east-1.c2s.ic.gov"
+                }
+            },
+            "params": {
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ssm-guiconnect.us-isob-east-1.sc2s.sgov.gov"
+                }
+            },
+            "params": {
+                "Region": "us-isob-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "UseFIPS": false,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
+            "expect": {
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false,
+                "UseDualStack": true,
+                "Endpoint": "https://example.com"
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-incidents/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-incidents/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-incidents/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-incidents/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -352,17 +352,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -376,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -400,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -424,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-quicksetup/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-quicksetup/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-quicksetup/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-quicksetup/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-sap/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-sap/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/ssm-sap/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/ssm-sap/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sso/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sso/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sso/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sso/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -404,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -428,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -452,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -476,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sso-admin/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sso-admin/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sso-admin/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sso-admin/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -465,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -489,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sso-oidc/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sso-oidc/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sso-oidc/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sso-oidc/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -404,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -428,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -452,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -476,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/stepfunctions/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/stepfunctions/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/stepfunctions/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/stepfunctions/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -534,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -558,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -582,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -606,17 +573,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/storagegateway/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/storagegateway/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/storagegateway/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/storagegateway/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/sts/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/sts/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/sts/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/sts/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -556,17 +556,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +569,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -604,17 +582,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -628,17 +595,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/supplychain/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/supplychain/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/supplychain/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/supplychain/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/support/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/support/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/support/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/support/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -303,17 +303,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -327,17 +316,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -382,17 +360,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -406,17 +373,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/support-app/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/support-app/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/support-app/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/support-app/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/swf/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/swf/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/swf/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/swf/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,250 +1,49 @@
 {
     "testCases": [
         {
-            "documentation": "For region af-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with region not set and fips disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.af-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "af-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-east-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-east-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-northeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-northeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-northeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-northeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-northeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-southeast-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-southeast-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ap-southeast-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ap-southeast-3.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ap-southeast-3",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region ca-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.ca-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "ca-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-central-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-central-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-north-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-south-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-south-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-west-1.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "eu-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region eu-west-3 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.eu-west-3.amazonaws.com"
+                    "url": "https://example.com"
                 }
             },
             "params": {
-                "Region": "eu-west-3",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
             }
         },
         {
-            "documentation": "For region me-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://swf.me-south-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
             },
             "params": {
-                "Region": "me-south-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
             }
         },
         {
-            "documentation": "For region sa-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
             "expect": {
-                "endpoint": {
-                    "url": "https://swf.sa-east-1.amazonaws.com"
-                }
+                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
             },
             "params": {
-                "Region": "sa-east-1",
+                "Endpoint": "https://example.com",
                 "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-east-1.amazonaws.com"
+                    "url": "https://swf-fips.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
@@ -261,123 +60,71 @@
             }
         },
         {
-            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-east-2.amazonaws.com"
+                    "url": "https://swf.us-east-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-2",
+                "Region": "us-east-1",
                 "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-east-2 with FIPS enabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf-fips.us-east-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-east-2",
-                "UseFIPS": true,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-west-1.amazonaws.com"
+                    "url": "https://swf.us-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "us-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf-fips.us-west-1.amazonaws.com"
+                    "url": "https://swf-fips.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
-                "UseDualStack": false
-            }
-        },
-        {
-            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.us-west-2.amazonaws.com"
-                }
-            },
-            "params": {
-                "Region": "us-west-2",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-west-2 with FIPS enabled and DualStack disabled",
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf-fips.us-west-2.amazonaws.com"
+                    "url": "https://swf-fips.cn-northwest-1.amazonaws.com.cn"
                 }
             },
             "params": {
-                "Region": "us-west-2",
+                "Region": "cn-northwest-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf-fips.us-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-east-1.api.aws"
+                    "url": "https://swf.cn-northwest-1.api.amazonwebservices.com.cn"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "cn-northwest-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack disabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.cn-north-1.amazonaws.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": false
-            }
-        },
-        {
             "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -391,280 +138,185 @@
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf-fips.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region cn-north-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf-fips.cn-north-1.amazonaws.com.cn"
+                    "url": "https://swf-fips.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "cn-north-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region cn-north-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf.cn-north-1.api.amazonwebservices.com.cn"
-                }
-            },
-            "params": {
-                "Region": "cn-north-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-gov-east-1.amazonaws.com"
+                    "url": "https://swf.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-gov-east-1.amazonaws.com"
+                    "url": "https://swf-fips.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-gov-west-1.amazonaws.com"
+                    "url": "https://swf.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-gov-west-1.amazonaws.com"
+                    "url": "https://swf-fips.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-west-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "endpoint": {
-                    "url": "https://swf-fips.us-gov-east-1.api.aws"
-                }
-            },
-            "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-gov-east-1.api.aws"
+                    "url": "https://swf.us-isob-east-1.sc2s.sgov.gov"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-isob-east-1",
                 "UseFIPS": false,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://swf-fips.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
+                "Region": "eu-isoe-west-1",
+                "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-west-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-iso-west-1.c2s.ic.gov"
+                    "url": "https://swf.eu-isoe-west-1.cloud.adc-e.uk"
                 }
             },
             "params": {
-                "Region": "us-iso-west-1",
+                "Region": "eu-isoe-west-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://swf-fips.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://swf.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-isof-south-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://swf-fips.us-gov-west-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://swf-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://swf.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://swf-fips.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For custom endpoint with region not set and fips disabled and dualstack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://example.com"
+                    "url": "https://swf.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips enabled and dualstack disabled",
-            "expect": {
-                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
-                "UseDualStack": false,
-                "Endpoint": "https://example.com"
-            }
-        },
-        {
-            "documentation": "For custom endpoint with fips disabled and dualstack enabled",
-            "expect": {
-                "error": "Invalid Configuration: Dualstack and custom endpoint are not supported"
-            },
-            "params": {
-                "Region": "us-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true,
-                "Endpoint": "https://example.com"
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/synthetics/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/synthetics/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/synthetics/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/synthetics/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -521,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -545,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -569,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -593,17 +560,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/taxsettings/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/taxsettings/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/taxsettings/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/taxsettings/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -286,17 +286,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -318,17 +307,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -350,17 +328,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -382,17 +349,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -414,17 +370,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -446,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "eu-isoe-west-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region eu-isoe-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -478,18 +412,28 @@
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "us-isof-south-1"
+                            }
+                        ]
+                    },
+                    "url": "https://tax-fips.us-isof-south-1.csp.hci.ic.gov"
+                }
             },
             "params": {
                 "Region": "us-isof-south-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
@@ -500,43 +444,53 @@
                             }
                         ]
                     },
-                    "url": "https://tax-fips.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://tax.us-isof-south-1.csp.hci.ic.gov"
                 }
             },
             "params": {
                 "Region": "us-isof-south-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region eusc-de-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "properties": {
+                        "authSchemes": [
+                            {
+                                "name": "sigv4",
+                                "signingRegion": "eusc-de-east-1"
+                            }
+                        ]
+                    },
+                    "url": "https://tax-fips.eusc-de-east-1.amazonaws.eu"
+                }
             },
             "params": {
-                "Region": "us-isof-south-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "Region": "eusc-de-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isof-south-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region eusc-de-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
                     "properties": {
                         "authSchemes": [
                             {
                                 "name": "sigv4",
-                                "signingRegion": "us-isof-south-1"
+                                "signingRegion": "eusc-de-east-1"
                             }
                         ]
                     },
-                    "url": "https://tax.us-isof-south-1.csp.hci.ic.gov"
+                    "url": "https://tax.eusc-de-east-1.amazonaws.eu"
                 }
             },
             "params": {
-                "Region": "us-isof-south-1",
+                "Region": "eusc-de-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/textract/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/textract/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/textract/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/textract/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -391,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -415,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -439,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -463,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-influxdb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-influxdb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-influxdb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-influxdb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-query/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-query/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-query/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-query/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,28 +1,145 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-east-1.api.aws"
+                    "url": "https://query.timestream.ap-northeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.ap-northeast-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-east-1.amazonaws.com"
+                    "url": "https://query.timestream.ap-south-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.ap-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.ap-southeast-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.ap-southeast-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.eu-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.eu-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.eu-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.eu-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.us-east-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
@@ -30,7 +147,7 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream.us-east-1.api.aws"
+                    "url": "https://timestream-query.us-east-1.api.aws"
                 }
             },
             "params": {
@@ -40,19 +157,110 @@
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream.us-east-1.amazonaws.com"
+                    "url": "https://timestream-query-fips.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.us-east-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query-fips.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query.us-west-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-query-fips.us-west-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://query.timestream-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
             "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -105,138 +313,146 @@
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-gov-east-1.api.aws"
+                    "url": "https://query.timestream.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-gov-east-1.amazonaws.com"
+                    "url": "https://query.timestream.us-gov-west-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream.us-gov-east-1.api.aws"
+                    "url": "https://timestream-query.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
+                "Region": "us-gov-west-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream.us-gov-east-1.amazonaws.com"
+                    "url": "https://timestream-query.us-gov-west-1.api.aws"
                 }
             },
             "params": {
-                "Region": "us-gov-east-1",
-                "UseFIPS": false,
-                "UseDualStack": false
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://timestream-query.us-gov-east-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-east-1",
                 "UseFIPS": true,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://query.timestream.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-east-1",
                 "UseFIPS": true,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://timestream-query.us-gov-east-1.api.aws"
+                }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-east-1",
                 "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream.us-iso-east-1.c2s.ic.gov"
+                    "url": "https://query.timestream.us-gov-east-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-iso-east-1",
+                "Region": "us-gov-east-1",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
+                "endpoint": {
+                    "url": "https://query.timestream-fips.us-iso-east-1.c2s.ic.gov"
+                }
             },
             "params": {
-                "Region": "us-isob-east-1",
+                "Region": "us-iso-east-1",
                 "UseFIPS": true,
-                "UseDualStack": true
+                "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://query.timestream-fips.us-isob-east-1.sc2s.sgov.gov"
+                    "url": "https://query.timestream.us-iso-east-1.c2s.ic.gov"
                 }
             },
             "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
+                "Region": "us-iso-east-1",
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
+            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
+                "endpoint": {
+                    "url": "https://query.timestream-fips.us-isob-east-1.sc2s.sgov.gov"
+                }
             },
             "params": {
                 "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
+                "UseFIPS": true,
+                "UseDualStack": false
             }
         },
         {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-write/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-write/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/timestream-write/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/timestream-write/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,28 +1,145 @@
 {
     "testCases": [
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream-fips.us-east-1.api.aws"
+                    "url": "https://ingest.timestream.ap-northeast-1.amazonaws.com"
                 }
             },
             "params": {
-                "Region": "us-east-1",
-                "UseFIPS": true,
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-northeast-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.ap-northeast-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-northeast-1",
+                "UseFIPS": false,
                 "UseDualStack": true
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream-fips.us-east-1.amazonaws.com"
+                    "url": "https://ingest.timestream.ap-south-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-south-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.ap-south-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-south-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.ap-southeast-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region ap-southeast-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.ap-southeast-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "ap-southeast-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.eu-central-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-central-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.eu-central-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-central-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.eu-west-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region eu-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.eu-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "eu-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.us-east-1.amazonaws.com"
                 }
             },
             "params": {
                 "Region": "us-east-1",
-                "UseFIPS": true,
+                "UseFIPS": false,
                 "UseDualStack": false
             }
         },
@@ -30,7 +147,7 @@
             "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream.us-east-1.api.aws"
+                    "url": "https://timestream-ingest.us-east-1.api.aws"
                 }
             },
             "params": {
@@ -40,19 +157,110 @@
             }
         },
         {
-            "documentation": "For region us-east-1 with FIPS disabled and DualStack disabled",
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream.us-east-1.amazonaws.com"
+                    "url": "https://timestream-ingest-fips.us-east-1.api.aws"
                 }
             },
             "params": {
                 "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.us-east-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": false
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-2 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest-fips.us-east-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-2",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream.us-west-2.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
                 "UseFIPS": false,
                 "UseDualStack": false
             }
         },
         {
+            "documentation": "For region us-west-2 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.us-west-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-west-2 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest-fips.us-west-2.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-west-2",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://ingest.timestream-fips.us-east-1.amazonaws.com"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true,
+                "UseDualStack": false
+            }
+        },
+        {
             "documentation": "For region cn-north-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
@@ -131,10 +339,36 @@
             }
         },
         {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false,
+                "UseDualStack": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://timestream-ingest.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true,
+                "UseDualStack": true
+            }
+        },
+        {
             "documentation": "For region us-gov-east-1 with FIPS enabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream-fips.us-gov-east-1.api.aws"
+                    "url": "https://timestream-ingest.us-gov-east-1.api.aws"
                 }
             },
             "params": {
@@ -160,7 +394,7 @@
             "documentation": "For region us-gov-east-1 with FIPS disabled and DualStack enabled",
             "expect": {
                 "endpoint": {
-                    "url": "https://ingest.timestream.us-gov-east-1.api.aws"
+                    "url": "https://timestream-ingest.us-gov-east-1.api.aws"
                 }
             },
             "params": {
@@ -183,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +456,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/tnb/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/tnb/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/tnb/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/tnb/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/transcribe/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/transcribe/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/transcribe/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/transcribe/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -495,17 +495,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -519,28 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -554,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/transfer/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/transfer/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/transfer/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/transfer/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/translate/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/translate/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/translate/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/translate/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -417,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -441,28 +430,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -476,17 +443,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/trustedadvisor/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/trustedadvisor/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/trustedadvisor/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/trustedadvisor/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/verifiedpermissions/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/verifiedpermissions/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/verifiedpermissions/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/verifiedpermissions/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/voice-id/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/voice-id/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/voice-id/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/voice-id/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/vpc-lattice/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/vpc-lattice/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/vpc-lattice/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/vpc-lattice/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/waf/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/waf/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/waf/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/waf/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -219,17 +219,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -243,17 +232,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -267,17 +245,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -291,17 +258,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/waf-regional/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/waf-regional/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/waf-regional/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/waf-regional/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -755,17 +755,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -779,17 +768,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -803,17 +781,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -827,17 +794,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/wafv2/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/wafv2/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/wafv2/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/wafv2/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -755,17 +755,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -779,17 +768,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -803,17 +781,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -827,17 +794,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/wellarchitected/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/wellarchitected/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/wellarchitected/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/wellarchitected/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -378,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -402,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -426,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -450,17 +417,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/wisdom/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/wisdom/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/wisdom/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/wisdom/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -222,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -246,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -270,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -294,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workdocs/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workdocs/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workdocs/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workdocs/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -235,17 +235,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -259,17 +248,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -283,17 +261,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -307,17 +274,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workmail/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workmail/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workmail/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workmail/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workmailmessageflow/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workmailmessageflow/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workmailmessageflow/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workmailmessageflow/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -365,17 +365,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -389,17 +378,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -413,17 +391,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -437,17 +404,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For custom endpoint with region set and fips disabled and dualstack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-instances/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-instances/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-instances/endpoint-tests-1.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-instances/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,105 @@
+{
+    "testCases": [
+        {
+            "documentation": "For custom endpoint with region not set and fips disabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://example.com"
+                }
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For custom endpoint with fips enabled",
+            "expect": {
+                "error": "Invalid Configuration: FIPS and custom endpoint are not supported"
+            },
+            "params": {
+                "Endpoint": "https://example.com",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances-fips.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-east-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances.us-east-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-east-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances-fips.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region cn-northwest-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances.cn-northwest-1.api.amazonwebservices.com.cn"
+                }
+            },
+            "params": {
+                "Region": "cn-northwest-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS enabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances-fips.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": true
+            }
+        },
+        {
+            "documentation": "For region us-gov-west-1 with FIPS disabled and DualStack enabled",
+            "expect": {
+                "endpoint": {
+                    "url": "https://workspaces-instances.us-gov-west-1.api.aws"
+                }
+            },
+            "params": {
+                "Region": "us-gov-west-1",
+                "UseFIPS": false
+            }
+        },
+        {
+            "documentation": "Missing region",
+            "expect": {
+                "error": "Invalid Configuration: Missing Region"
+            }
+        }
+    ],
+    "version": "1.0"
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-thin-client/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-thin-client/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-thin-client/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-thin-client/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -157,17 +157,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -181,17 +170,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -205,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -229,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-web/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-web/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/workspaces-web/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/workspaces-web/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -183,17 +183,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -207,17 +196,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -231,17 +209,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -255,17 +222,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/endpoint-rules/xray/endpoint-tests-1.json 2.31.35-1/tests/functional/botocore/endpoint-rules/xray/endpoint-tests-1.json
--- 2.23.6-1/tests/functional/botocore/endpoint-rules/xray/endpoint-tests-1.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/endpoint-rules/xray/endpoint-tests-1.json	2025-11-12 19:17:29.000000000 +0000
@@ -508,17 +508,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -532,17 +521,6 @@
             }
         },
         {
-            "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-iso-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-iso-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -556,17 +534,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack enabled",
-            "expect": {
-                "error": "FIPS and DualStack are enabled, but this partition does not support one or both"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": true,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS enabled and DualStack disabled",
             "expect": {
                 "endpoint": {
@@ -580,17 +547,6 @@
             }
         },
         {
-            "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack enabled",
-            "expect": {
-                "error": "DualStack is enabled but this partition does not support DualStack"
-            },
-            "params": {
-                "Region": "us-isob-east-1",
-                "UseFIPS": false,
-                "UseDualStack": true
-            }
-        },
-        {
             "documentation": "For region us-isob-east-1 with FIPS disabled and DualStack disabled",
             "expect": {
                 "endpoint": {
diff -pruN 2.23.6-1/tests/functional/botocore/leak/test_resource_leaks.py 2.31.35-1/tests/functional/botocore/leak/test_resource_leaks.py
--- 2.23.6-1/tests/functional/botocore/leak/test_resource_leaks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/leak/test_resource_leaks.py	2025-11-12 19:17:29.000000000 +0000
@@ -83,8 +83,7 @@ class TestDoesNotLeakMemory(BaseClientDr
         self.record_memory()
         # 500 waiters in batches of 50.
         for _ in range(10):
-            self.cmd(
-                'create_multiple_waiters', '50', 's3', 'bucket_exists')
+            self.cmd('create_multiple_waiters', '50', 's3', 'bucket_exists')
             self.cmd('free_waiters')
         self.record_memory()
         start, end = self.memory_samples
@@ -109,8 +108,7 @@ class TestDoesNotLeakMemory(BaseClientDr
         self.record_memory()
         # 500 waiters in batches of 50.
         for _ in range(10):
-            self.cmd(
-                'create_multiple_paginators', '50', 's3', 'list_objects')
+            self.cmd('create_multiple_paginators', '50', 's3', 'list_objects')
             self.cmd('free_paginators')
         self.record_memory()
         start, end = self.memory_samples
diff -pruN 2.23.6-1/tests/functional/botocore/models/endpoints.json 2.31.35-1/tests/functional/botocore/models/endpoints.json
--- 2.23.6-1/tests/functional/botocore/models/endpoints.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/models/endpoints.json	2025-11-12 19:17:29.000000000 +0000
@@ -1441,38 +1441,6 @@
           }
         }
       },
-      "opsworks" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
-        }
-      },
-      "opsworks-cm" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
-        }
-      },
       "organizations" : {
         "endpoints" : {
           "aws-global" : {
@@ -1862,25 +1830,6 @@
         },
         "isRegionalized" : false
       },
-      "sms" : {
-        "endpoints" : {
-          "ap-northeast-1" : { },
-          "ap-northeast-2" : { },
-          "ap-south-1" : { },
-          "ap-southeast-1" : { },
-          "ap-southeast-2" : { },
-          "ca-central-1" : { },
-          "eu-central-1" : { },
-          "eu-west-1" : { },
-          "eu-west-2" : { },
-          "eu-west-3" : { },
-          "sa-east-1" : { },
-          "us-east-1" : { },
-          "us-east-2" : { },
-          "us-west-1" : { },
-          "us-west-2" : { }
-        }
-      },
       "snowball" : {
         "endpoints" : {
           "ap-northeast-1" : { },
@@ -2519,12 +2468,6 @@
           "cn-northwest-1" : { }
         }
       },
-      "sms" : {
-        "endpoints" : {
-          "cn-north-1" : { },
-          "cn-northwest-1" : { }
-        }
-      },
       "snowball" : {
         "endpoints" : {
           "cn-north-1" : { }
@@ -2867,11 +2810,6 @@
           }
         }
       },
-      "sms" : {
-        "endpoints" : {
-          "us-gov-west-1" : { }
-        }
-      },
       "snowball" : {
         "endpoints" : {
           "us-gov-west-1" : { }
diff -pruN 2.23.6-1/tests/functional/botocore/models/test-protocol-list/2020-08-20/service-2.json 2.31.35-1/tests/functional/botocore/models/test-protocol-list/2020-08-20/service-2.json
--- 2.23.6-1/tests/functional/botocore/models/test-protocol-list/2020-08-20/service-2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/models/test-protocol-list/2020-08-20/service-2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,45 @@
+{
+  "version": "2.0",
+  "metadata": {
+      "apiVersion": "2018-08-31",
+      "endpointPrefix": "fooendpoint",
+      "jsonVersion": "1.1",
+      "protocol":"rest-xml",
+      "protocols":[
+        "rest-json",
+        "rest-xml"
+      ],
+      "serviceId": "TPLService",
+      "serviceFullName": "TestProtocolListService",
+      "signatureVersion": "v4",
+      "signingName": "test-protocol-list",
+      "targetPrefix": "test-protol-list"
+  },
+  "operations": {
+      "TestProtocolSelection": {
+          "name": "TestProtocolSelection",
+          "http": {
+              "method": "POST",
+              "requestUri": "/"
+          },
+          "input": {"shape": "TestProtocolSelectionRequest"},
+          "output": {"shape": "TestProtocolSelectionResponse"}
+      }
+  },
+  "shapes": {
+      "TestProtocolSelectionRequest": {
+          "type": "structure",
+          "members": {
+              "Foo": {"shape": "String"}
+          }
+      },
+      "TestProtocolSelectionResponse": {
+          "type": "structure",
+          "required": ["Endpoints"],
+          "members": {
+              "Bar": {"shape": "String"}
+          }
+      },
+      "String": {"type": "string"}
+  }
+}
diff -pruN 2.23.6-1/tests/functional/botocore/retries/test_bucket.py 2.31.35-1/tests/functional/botocore/retries/test_bucket.py
--- 2.23.6-1/tests/functional/botocore/retries/test_bucket.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/retries/test_bucket.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,14 +1,15 @@
 import random
-import time
 import threading
-from tests import unittest
+import time
 
 from botocore.retries import bucket
 
+from tests import unittest
+
 
 class InstrumentedTokenBucket(bucket.TokenBucket):
     def _acquire(self, amount, block):
-        rval = super(InstrumentedTokenBucket, self)._acquire(amount, block)
+        rval = super()._acquire(amount, block)
         assert self._current_capacity >= 0
         return rval
 
@@ -36,7 +37,8 @@ class TestTokenBucketThreading(unittest.
         min_rate = 0.1
         max_rate = 1
         token_bucket = bucket.TokenBucket(
-            min_rate=min_rate, max_rate=max_rate,
+            min_rate=min_rate,
+            max_rate=max_rate,
             clock=self.create_clock(),
         )
         # First we'll set the max_rate to 0.1 (min_rate).  This means that
@@ -80,12 +82,15 @@ class TestTokenBucketThreading(unittest.
         all_threads = []
         for _ in range(2):
             all_threads.append(
-                threading.Thread(target=self.randomly_set_max_rate,
-                                 args=(token_bucket, 30, 200))
+                threading.Thread(
+                    target=self.randomly_set_max_rate,
+                    args=(token_bucket, 30, 200),
+                )
             )
         for _ in range(10):
-            t = threading.Thread(target=self.acquire_in_loop,
-                                 args=(token_bucket,))
+            t = threading.Thread(
+                target=self.acquire_in_loop, args=(token_bucket,)
+            )
             self.acquisitions_by_thread[t.name] = 0
             all_threads.append(t)
         for thread in all_threads:
diff -pruN 2.23.6-1/tests/functional/botocore/retries/test_quota.py 2.31.35-1/tests/functional/botocore/retries/test_quota.py
--- 2.23.6-1/tests/functional/botocore/retries/test_quota.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/retries/test_quota.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,11 @@
 import random
-import time
 import threading
-from tests import unittest
+import time
 
 from botocore.retries import quota
 
+from tests import unittest
+
 
 class TestRetryQuota(unittest.TestCase):
     def setUp(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_account_id_endpoints.py 2.31.35-1/tests/functional/botocore/test_account_id_endpoints.py
--- 2.23.6-1/tests/functional/botocore/test_account_id_endpoints.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_account_id_endpoints.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,281 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import pytest
+from botocore.config import Config
+from botocore.exceptions import EndpointResolutionError
+
+from tests import ClientHTTPStubber, patch_load_service_model
+from tests.functional.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
+
+FAKE_RULESET = {
+    "version": "1.0",
+    "parameters": {
+        "AccountId": {
+            "type": "String",
+            "builtIn": "AWS::Auth::AccountId",
+            "documentation": "The AWS account ID used for the request, eg. `123456789012`.",
+        },
+        "AccountIdEndpointMode": {
+            "type": "String",
+            "builtIn": "AWS::Auth::AccountIdEndpointMode",
+            "documentation": "The behavior for account ID based endpoint routing, eg. `preferred`.",
+        },
+    },
+    "rules": [
+        {
+            "documentation": "Template account ID into the URI when account ID is set and AccountIdEndpointMode is "
+            "set to preferred.",
+            "conditions": [
+                {"fn": "isSet", "argv": [{"ref": "AccountId"}]},
+                {"fn": "isSet", "argv": [{"ref": "AccountIdEndpointMode"}]},
+                {
+                    "fn": "stringEquals",
+                    "argv": [{"ref": "AccountIdEndpointMode"}, "preferred"],
+                },
+            ],
+            "endpoint": {
+                "url": "https://{AccountId}.otherservice.us-west-2.amazonaws.com"
+            },
+            "type": "endpoint",
+        },
+        {
+            "documentation": "Do not template account ID into the URI when AccountIdEndpointMode is set to disabled.",
+            "conditions": [
+                {"fn": "isSet", "argv": [{"ref": "AccountId"}]},
+                {"fn": "isSet", "argv": [{"ref": "AccountIdEndpointMode"}]},
+                {
+                    "fn": "stringEquals",
+                    "argv": [{"ref": "AccountIdEndpointMode"}, "disabled"],
+                },
+            ],
+            "endpoint": {
+                "url": "https://otherservice.us-west-2.amazonaws.com/"
+            },
+            "type": "endpoint",
+        },
+        {
+            "documentation": "Raise an error when account ID is unset but AccountIdEndpointMode is set to required.",
+            "conditions": [
+                {
+                    "fn": "not",
+                    "argv": [{"fn": "isSet", "argv": [{"ref": "AccountId"}]}],
+                },
+                {"fn": "isSet", "argv": [{"ref": "AccountIdEndpointMode"}]},
+                {
+                    "fn": "stringEquals",
+                    "argv": [{"ref": "AccountIdEndpointMode"}, "required"],
+                },
+            ],
+            "error": "AccountIdEndpointMode is required but no AccountID was provided",
+            "type": "error",
+        },
+        {
+            "documentation": "Template account ID into the URI when account ID is set and AccountIdEndpointMode is "
+            "set to required.",
+            "conditions": [
+                {"fn": "isSet", "argv": [{"ref": "AccountId"}]},
+                {"fn": "isSet", "argv": [{"ref": "AccountIdEndpointMode"}]},
+                {
+                    "fn": "stringEquals",
+                    "argv": [{"ref": "AccountIdEndpointMode"}, "required"],
+                },
+            ],
+            "endpoint": {
+                "url": "https://{AccountId}.otherservice.us-west-2.amazonaws.com"
+            },
+            "type": "endpoint",
+        },
+        {
+            "documentation": "Fallback when AccountID is unset but AccountIdEndpointMode is set to preferred.",
+            "conditions": [
+                {
+                    "fn": "not",
+                    "argv": [{"fn": "isSet", "argv": [{"ref": "AccountId"}]}],
+                },
+                {"fn": "isSet", "argv": [{"ref": "AccountIdEndpointMode"}]},
+                {
+                    "fn": "stringEquals",
+                    "argv": [{"ref": "AccountIdEndpointMode"}, "preferred"],
+                },
+            ],
+            "endpoint": {
+                "url": "https://otherservice.us-west-2.amazonaws.com/"
+            },
+            "type": "endpoint",
+        },
+    ],
+}
+
+FAKE_SERVICE_MODEL = {
+    "version": "2.0",
+    "documentation": "",
+    "metadata": {
+        "apiVersion": "2020-02-02",
+        "endpointPrefix": "otherservice",
+        "protocol": "rest-xml",
+        "serviceFullName": "Other Service",
+        "serviceId": "Other Service",
+        "signatureVersion": "v4",
+        "signingName": "otherservice",
+        "uid": "otherservice-2020-02-02",
+    },
+    "operations": {
+        "MockOperation": {
+            "name": "MockOperation",
+            "http": {"method": "GET", "requestUri": "/"},
+            "input": {"shape": "MockOperationRequest"},
+            "documentation": "",
+        },
+    },
+    "shapes": {
+        "MockOpParam": {
+            "type": "string",
+        },
+        "MockOperationRequest": {
+            "type": "structure",
+            "required": ["MockOpParam"],
+            "members": {
+                "MockOpParam": {
+                    "shape": "MockOpParam",
+                    "documentation": "",
+                    "location": "uri",
+                    "locationName": "param",
+                },
+            },
+        },
+    },
+}
+
+
+@pytest.mark.parametrize(
+    "account_id_endpoint_mode, expected_endpoint, expected_error, account_id_in_url",
+    [
+        # Test case for 'preferred' mode: Account ID is in the URL
+        (
+            'preferred',
+            'https://123456789012.otherservice.us-west-2.amazonaws.com/',
+            None,
+            True,
+        ),
+        # Test case for 'disabled' mode: Account ID is not in the URL
+        (
+            'disabled',
+            'https://otherservice.us-west-2.amazonaws.com/',
+            None,
+            False,
+        ),
+        # Test case for 'required' mode: Error is raised due to missing Account ID
+        (
+            'required',
+            None,
+            'AccountIdEndpointMode is required but no AccountID was provided',
+            False,
+        ),
+    ],
+)
+def test_account_id_endpoint_resolution(
+    account_id_endpoint_mode,
+    expected_endpoint,
+    expected_error,
+    account_id_in_url,
+    patched_session,
+    monkeypatch,
+):
+    account_id = '123456789012'
+    patch_load_service_model(
+        patched_session, monkeypatch, FAKE_SERVICE_MODEL, FAKE_RULESET
+    )
+
+    if account_id_endpoint_mode != 'required':
+        monkeypatch.setenv('AWS_ACCOUNT_ID', account_id)
+
+    client = patched_session.create_client(
+        'otherservice',
+        region_name='us-west-2',
+        config=Config(account_id_endpoint_mode=account_id_endpoint_mode),
+    )
+
+    # If we expect an error, assert that the error is raised
+    if expected_error:
+        with pytest.raises(EndpointResolutionError) as exc_info:
+            with ClientHTTPStubber(client, strict=True) as http_stubber:
+                http_stubber.add_response()
+                client.mock_operation(MockOpParam='mock-op-param-value')
+        assert str(exc_info.value) == expected_error
+    else:
+        # If no error is expected, verify the endpoint resolution
+        with ClientHTTPStubber(client, strict=True) as http_stubber:
+            http_stubber.add_response(status=200, body=b'{}')
+            client.mock_operation(MockOpParam='mock-op-param-value')
+            request = http_stubber.requests[0]
+
+            if account_id_in_url:
+                assert (
+                    account_id in request.url
+                ), f"Account ID should be in the URL, but it's not: {request.url}"
+            else:
+                assert (
+                    account_id not in request.url
+                ), f"Account ID should not be in the URL, but it is: {request.url}"
+            assert (
+                request.url == expected_endpoint
+            ), f"Expected endpoint '{expected_endpoint}', but got: {request.url}"
+
+
+@pytest.mark.parametrize(
+    "account_id, account_id_endpoint_mode, expected_feature_ids",
+    [
+        # Feature IDs:
+        #   ACCOUNT_ID_MODE_PREFERRED -> P
+        #   ACCOUNT_ID_MODE_DISABLED  -> Q
+        #   ACCOUNT_ID_MODE_REQUIRED  -> R
+        #   RESOLVED_ACCOUNT_ID       -> T
+        ('123456789012', 'preferred', ['P', 'T']),
+        ('123456789012', 'disabled', ['Q', 'T']),
+        ('123456789012', 'required', ['R', 'T']),
+        (None, 'preferred', ['P']),
+        ('', 'preferred', ['P']),
+    ],
+)
+def test_user_agent_has_account_id_endpoint_feature_ids(
+    patched_session,
+    monkeypatch,
+    account_id,
+    account_id_endpoint_mode,
+    expected_feature_ids,
+):
+    if account_id is not None:
+        monkeypatch.setenv('AWS_ACCOUNT_ID', account_id)
+    else:
+        monkeypatch.delenv('AWS_ACCOUNT_ID', raising=False)
+
+    patch_load_service_model(
+        patched_session, monkeypatch, FAKE_SERVICE_MODEL, FAKE_RULESET
+    )
+
+    client = patched_session.create_client(
+        'otherservice',
+        region_name='us-west-2',
+        config=Config(account_id_endpoint_mode=account_id_endpoint_mode),
+    )
+
+    with ClientHTTPStubber(client, strict=True) as http_stubber:
+        http_stubber.add_response()
+        client.mock_operation(MockOpParam='mock-op-param-value')
+    ua_string = get_captured_ua_strings(http_stubber)[0]
+    feature_list = parse_registered_feature_ids(ua_string)
+    assert all(item in feature_list for item in expected_feature_ids)
diff -pruN 2.23.6-1/tests/functional/botocore/test_alias.py 2.31.35-1/tests/functional/botocore/test_alias.py
--- 2.23.6-1/tests/functional/botocore/test_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
-
 import botocore.session
-from botocore.stub import Stubber
+import pytest
 from botocore.exceptions import ParamValidationError
-
+from botocore.stub import Stubber
 
 ALIAS_CASES = [
     {
@@ -23,7 +21,7 @@ ALIAS_CASES = [
         'operation': 'describe_flow_logs',
         'original_name': 'Filter',
         'new_name': 'Filters',
-        'parameter_value': [{'Name': 'traffic-type', 'Values': ['ACCEPT']}]
+        'parameter_value': [{'Name': 'traffic-type', 'Values': ['ACCEPT']}],
     },
     {
         'service': 'cloudsearchdomain',
@@ -31,7 +29,7 @@ ALIAS_CASES = [
         'original_name': 'return',
         'new_name': 'returnFields',
         'parameter_value': '_all_fields',
-        'extra_args': {'query': 'foo'}
+        'extra_args': {'query': 'foo'},
     },
     {
         'service': 'logs',
@@ -42,9 +40,9 @@ ALIAS_CASES = [
         'extra_args': {
             'logGroupName': 'name',
             'to': 10,
-            'destination': 'mybucket'
-        }
-    }
+            'destination': 'mybucket',
+        },
+    },
 ]
 
 
@@ -62,8 +60,11 @@ def test_can_use_original_name(case):
 
 def _can_use_parameter_in_client_call(session, case, use_alias=True):
     client = session.create_client(
-        case['service'], region_name='us-east-1',
-        aws_access_key_id='foo', aws_secret_access_key='bar')
+        case['service'],
+        region_name='us-east-1',
+        aws_access_key_id='foo',
+        aws_secret_access_key='bar',
+    )
 
     stubber = Stubber(client)
     stubber.activate()
@@ -80,7 +81,8 @@ def _can_use_parameter_in_client_call(se
         getattr(client, operation)(**params)
     except ParamValidationError as e:
         raise AssertionError(
-            'Expecting %s to be valid parameter for %s.%s but received '
-            '%s.' % (
-                case['new_name'], case['service'], case['operation'], e)
+            'Expecting {} to be valid parameter for {}.{} but received '
+            '{}.'.format(
+                case['new_name'], case['service'], case['operation'], e
+            )
         )
diff -pruN 2.23.6-1/tests/functional/botocore/test_apigateway.py 2.31.35-1/tests/functional/botocore/test_apigateway.py
--- 2.23.6-1/tests/functional/botocore/test_apigateway.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_apigateway.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,10 +15,9 @@ from tests import BaseSessionTest, Clien
 
 class TestApiGateway(BaseSessionTest):
     def setUp(self):
-        super(TestApiGateway, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            'apigateway', self.region)
+        self.client = self.session.create_client('apigateway', self.region)
         self.http_stubber = ClientHTTPStubber(self.client)
 
     def test_get_export(self):
@@ -26,7 +25,7 @@ class TestApiGateway(BaseSessionTest):
             'restApiId': 'foo',
             'stageName': 'bar',
             'exportType': 'swagger',
-            'accepts': 'application/yaml'
+            'accepts': 'application/yaml',
         }
 
         self.http_stubber.add_response(body=b'{}')
@@ -34,13 +33,15 @@ class TestApiGateway(BaseSessionTest):
             self.client.get_export(**params)
             request = self.http_stubber.requests[0]
             self.assertEqual(request.method, 'GET')
-            self.assertEqual(request.headers.get('Accept'), b'application/yaml')
+            self.assertEqual(
+                request.headers.get('Accept'), b'application/yaml'
+            )
 
     def test_defaults_accept(self):
         params = {
             'restApiId': 'foo',
             'stageName': 'bar',
-            'exportType': 'swagger'
+            'exportType': 'swagger',
         }
 
         self.http_stubber.add_response(body=b'{}')
@@ -48,4 +49,6 @@ class TestApiGateway(BaseSessionTest):
             self.client.get_export(**params)
             request = self.http_stubber.requests[0]
             self.assertEqual(request.method, 'GET')
-            self.assertEqual(request.headers.get('Accept'), b'application/json')
+            self.assertEqual(
+                request.headers.get('Accept'), b'application/json'
+            )
diff -pruN 2.23.6-1/tests/functional/botocore/test_auth_config.py 2.31.35-1/tests/functional/botocore/test_auth_config.py
--- 2.23.6-1/tests/functional/botocore/test_auth_config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_auth_config.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.config import Config
+from botocore.handlers import get_bearer_auth_supported_services
+
 from tests import create_session, mock
 
 # In the future, a service may have a list of credentials requirements where one
@@ -20,6 +21,14 @@ from tests import create_session, mock
 # auth but fall back to sigv4 if a token isn't available. There's currently no way to do
 # this in botocore, so this test ensures we handle this gracefully when the need arises.
 
+# Some services (such as Bedrock) have customizations that bypass this limitation
+# by manually assigning a signer when credentials are unavailable. To avoid
+# false positives, we filter these services out of the tests below.
+
+# Some services (such as Bedrock) have customizations that bypass this limitation
+# by manually assigning a signer when credentials are unavailable. To avoid
+# false positives, we filter these services out of the tests below.
+
 
 # The dictionary's value here needs to be hashable to be added to the set below; any
 # new auth types with multiple requirements should be added in a comma-separated list
@@ -30,6 +39,11 @@ AUTH_TYPE_REQUIREMENTS = {
     'smithy.api#noAuth': 'none',
 }
 
+# Services with a `signing_name` that are known to have
+# customizations for handling mixed authentication methods.
+KNOWN_MIXED_AUTH_SERVICES = get_bearer_auth_supported_services()
+KNOWN_MIXED_AUTH_SCHEMES = {'aws.auth#sigv4', 'smithy.api#httpBearerAuth'}
+
 
 def _all_test_cases():
     session = create_session()
@@ -41,7 +55,12 @@ def _all_test_cases():
 
     for service in services:
         service_model = session.get_service_model(service)
+        signing_name = service_model.signing_name
         auth_config = service_model.metadata.get('auth', {})
+        if signing_name in KNOWN_MIXED_AUTH_SERVICES:
+            if set(auth_config) == KNOWN_MIXED_AUTH_SCHEMES:
+                # Skip service due to known mixed auth configurations.
+                continue
         if auth_config:
             auth_services.append([service, auth_config])
         for operation in service_model.operation_names:
@@ -120,4 +139,4 @@ def test_sigv4a_signing_region_set_confi
     with mock.patch('os.environ', environ_mock):
         session = create_session()
         s3 = session.create_client('s3', config=client_config)
-        assert s3.meta.config.sigv4a_signing_region_set == expected
\ No newline at end of file
+        assert s3.meta.config.sigv4a_signing_region_set == expected
diff -pruN 2.23.6-1/tests/functional/botocore/test_bearer_auth.py 2.31.35-1/tests/functional/botocore/test_bearer_auth.py
--- 2.23.6-1/tests/functional/botocore/test_bearer_auth.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_bearer_auth.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,255 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import botocore
+import pytest
+from botocore.config import Config
+
+from tests import ClientHTTPStubber, patch_load_service_model
+from tests.functional.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
+
+MOCK_SERVICE_MODEL = {
+    "version": "2.0",
+    "metadata": {
+        "apiVersion": "2020-02-02",
+        "endpointPrefix": "mock-bearer-service",
+        "jsonVersion": "1.1",
+        "protocol": "rest-json",
+        "protocols": ["rest-json"],
+        "serviceFullName": "Mock Bearer Service",
+        "serviceId": "Bearer Service",
+        "signatureVersion": "v4",
+        "signingName": "bearer-service",
+        "uid": "bearer-service-2020-02-02",
+        "auth": ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+    },
+    "operations": {
+        "MockOperation": {
+            "name": "MockOperation",
+            "http": {"method": "GET", "requestUri": "/"},
+            "input": {"shape": "MockOperationRequest"},
+            "documentation": "",
+        },
+    },
+    "shapes": {
+        "MockOpParam": {
+            "type": "string",
+        },
+        "MockOperationRequest": {
+            "type": "structure",
+            "required": ["MockOpParam"],
+            "members": {
+                "MockOpParam": {
+                    "shape": "MockOpParam",
+                    "documentation": "",
+                    "location": "uri",
+                    "locationName": "param",
+                },
+            },
+        },
+    },
+}
+
+MOCK_RULESET = {
+    "version": "1.0",
+    "parameters": {},
+    "rules": [
+        {
+            "conditions": [],
+            "endpoint": {
+                "url": "https://bearer-service.us-west-2.amazonaws.com/"
+            },
+            "type": "endpoint",
+        },
+    ],
+}
+
+
+def mocked_supported_services():
+    return {"bearer-service"}
+
+
+@pytest.fixture(autouse=True)
+def patch_supported_services(monkeypatch):
+    monkeypatch.setattr(
+        "botocore.handlers.get_bearer_auth_supported_services",
+        mocked_supported_services,
+    )
+
+
+@pytest.mark.parametrize(
+    "env_vars",
+    [
+        {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+        {
+            "AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token",
+            "AWS_AUTH_SCHEME_PREFERENCE": "sigv4,httpBearerAuth",
+        },
+    ],
+    ids=["valid_token", "token_overrides_auth_scheme_preference"],
+)
+def test_service_uses_bearer_auth(monkeypatch, patched_session, env_vars):
+    for key, value in env_vars.items():
+        monkeypatch.setenv(key, value)
+
+    patch_load_service_model(
+        patched_session, monkeypatch, MOCK_SERVICE_MODEL, MOCK_RULESET
+    )
+
+    client = patched_session.create_client(
+        "bearer-service",
+        region_name="us-west-2",
+    )
+    with ClientHTTPStubber(client) as http_stubber:
+        http_stubber.add_response()
+        client.mock_operation(MockOpParam="mock-op-param-value")
+        request = http_stubber.requests[0]
+        auth_header = request.headers.get("Authorization")
+        assert auth_header == b"Bearer bearer-service-token"
+
+
+@pytest.mark.parametrize(
+    "env_vars, config",
+    [
+        ({}, None),
+        ({"AWS_BEARER_TOKEN_FOO_SERVICE": "foo-service-token"}, None),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(signature_version="v4"),
+        ),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(auth_scheme_preference="sigv4"),
+        ),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(signature_version=botocore.UNSIGNED),
+        ),
+    ],
+    ids=[
+        "no_token_configured",
+        "invalid_token",
+        "signature_version_config_override",
+        "auth_scheme_preference_config_override",
+        "botocore_unsigned_config_override",
+    ],
+)
+def test_service_does_not_use_bearer_auth(
+    monkeypatch, patched_session, env_vars, config
+):
+    for key, value in env_vars.items():
+        monkeypatch.setenv(key, value)
+
+    patch_load_service_model(
+        patched_session, monkeypatch, MOCK_SERVICE_MODEL, MOCK_RULESET
+    )
+    client = patched_session.create_client(
+        "bearer-service",
+        region_name="us-west-2",
+        config=config,
+    )
+    with ClientHTTPStubber(client) as http_stubber:
+        http_stubber.add_response()
+        client.mock_operation(MockOpParam="mock-op-param-value")
+        request = http_stubber.requests[0]
+        auth_header = request.headers.get("Authorization")
+        assert not (auth_header and auth_header.startswith(b"Bearer"))
+
+
+@pytest.mark.parametrize(
+    "env_vars",
+    [
+        {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+        {
+            "AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token",
+            "AWS_AUTH_SCHEME_PREFERENCE": "sigv4,httpBearerAuth",
+        },
+    ],
+    ids=["valid_token", "token_overrides_auth_scheme_preference"],
+)
+def test_user_agent_has_bearer_service_env_vars_feature_id(
+    monkeypatch, patched_session, env_vars
+):
+    for key, value in env_vars.items():
+        monkeypatch.setenv(key, value)
+
+    patch_load_service_model(
+        patched_session, monkeypatch, MOCK_SERVICE_MODEL, MOCK_RULESET
+    )
+
+    client = patched_session.create_client(
+        "bearer-service",
+        region_name="us-west-2",
+    )
+
+    with ClientHTTPStubber(client) as http_stubber:
+        http_stubber.add_response()
+        client.mock_operation(MockOpParam="mock-op-param-value")
+
+    ua_string = get_captured_ua_strings(http_stubber)[0]
+    feature_ids = parse_registered_feature_ids(ua_string)
+
+    assert "3" in feature_ids
+
+
+@pytest.mark.parametrize(
+    "env_vars, config",
+    [
+        ({"AWS_BEARER_TOKEN_FOO_SERVICE": "foo-service-token"}, None),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(signature_version="v4"),
+        ),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(auth_scheme_preference="sigv4"),
+        ),
+        (
+            {"AWS_BEARER_TOKEN_BEARER_SERVICE": "bearer-service-token"},
+            Config(signature_version=botocore.UNSIGNED),
+        ),
+    ],
+    ids=[
+        "invalid_token",
+        "signature_version_config_override",
+        "auth_scheme_preference_config_override",
+        "botocore_unsigned_config_override",
+    ],
+)
+def test_user_agent_does_not_have_bearer_service_env_vars_feature_id(
+    monkeypatch, patched_session, env_vars, config
+):
+    for key, value in env_vars.items():
+        monkeypatch.setenv(key, value)
+
+    patch_load_service_model(
+        patched_session, monkeypatch, MOCK_SERVICE_MODEL, MOCK_RULESET
+    )
+
+    client = patched_session.create_client(
+        "bearer-service",
+        region_name="us-west-2",
+        config=config,
+    )
+
+    with ClientHTTPStubber(client) as http_stubber:
+        http_stubber.add_response()
+        client.mock_operation(MockOpParam="mock-op-param-value")
+
+    ua_string = get_captured_ua_strings(http_stubber)[0]
+    feature_ids = parse_registered_feature_ids(ua_string)
+
+    assert "3" not in feature_ids
diff -pruN 2.23.6-1/tests/functional/botocore/test_bedrock_runtime.py 2.31.35-1/tests/functional/botocore/test_bedrock_runtime.py
--- 2.23.6-1/tests/functional/botocore/test_bedrock_runtime.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_bedrock_runtime.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,29 @@
+# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
+ # may not use this file except in compliance with the License. A copy of
+ # the License is located at
+ #
+ # http://aws.amazon.com/apache2.0/
+ #
+ # or in the "license" file accompanying this file. This file is
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+ # ANY KIND, either express or implied. See the License for the specific
+ # language governing permissions and limitations under the License.
+ 
+from tests import BaseSessionTest
+ 
+ 
+class TestBedrock(BaseSessionTest):
+    def test_invoke_model_with_bidirectional_stream(self):
+        """InvokeModelWithBidirectionalStream operation removed due to h2 requirement"""
+        bedrock_runtime_client = self.session.create_client('bedrock-runtime', 'us-west-2')
+        try:
+            bedrock_runtime_client.invoke_model_with_bidirectional_stream()
+        except AttributeError:
+            pass
+        else:
+            self.fail(
+                'invoke_model_with_bidirectional_stream shouldn\'t be available on the '
+                'bedrock-runtime client.'
+            )
diff -pruN 2.23.6-1/tests/functional/botocore/test_client.py 2.31.35-1/tests/functional/botocore/test_client.py
--- 2.23.6-1/tests/functional/botocore/test_client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_client.py	2025-11-12 19:17:29.000000000 +0000
@@ -2,6 +2,7 @@ import unittest
 
 import botocore
 
+
 class TestCreateClients(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
@@ -16,4 +17,5 @@ class TestCreateClients(unittest.TestCas
     def test_client_raises_exception_invalid_region(self):
         with self.assertRaisesRegex(ValueError, ('invalid region name')):
             self.session.create_client(
-                'cloudformation', region_name='invalid region name')
+                'cloudformation', region_name='invalid region name'
+            )
diff -pruN 2.23.6-1/tests/functional/botocore/test_client_class_names.py 2.31.35-1/tests/functional/botocore/test_client_class_names.py
--- 2.23.6-1/tests/functional/botocore/test_client_class_names.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_client_class_names.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
-
 import botocore.session
-
+import pytest
 
 REGION = 'us-east-1'
 
@@ -50,7 +48,6 @@ SERVICE_TO_CLASS_NAME = {
     'lambda': 'Lambda',
     'logs': 'CloudWatchLogs',
     'machinelearning': 'MachineLearning',
-    'opsworks': 'OpsWorks',
     'rds': 'RDS',
     'redshift': 'Redshift',
     'route53': 'Route53',
@@ -65,9 +62,10 @@ SERVICE_TO_CLASS_NAME = {
     'sts': 'STS',
     'support': 'Support',
     'swf': 'SWF',
-    'workspaces': 'WorkSpaces'
+    'workspaces': 'WorkSpaces',
 }
 
+
 @pytest.mark.parametrize("service_name", SERVICE_TO_CLASS_NAME)
 def test_client_has_correct_class_name(service_name):
     session = botocore.session.get_session()
diff -pruN 2.23.6-1/tests/functional/botocore/test_client_metadata.py 2.31.35-1/tests/functional/botocore/test_client_metadata.py
--- 2.23.6-1/tests/functional/botocore/test_client_metadata.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_client_metadata.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import botocore.session
+
 from tests import unittest
 
-import botocore.session
 
 class TestClientMeta(unittest.TestCase):
     def setUp(self):
@@ -23,8 +24,9 @@ class TestClientMeta(unittest.TestCase):
         self.assertEqual(client.meta.region_name, 'us-west-2')
 
     def test_endpoint_url_on_meta(self):
-        client = self.session.create_client('s3', 'us-west-2',
-                                            endpoint_url='https://foo')
+        client = self.session.create_client(
+            's3', 'us-west-2', endpoint_url='https://foo'
+        )
         self.assertEqual(client.meta.endpoint_url, 'https://foo')
 
     def test_client_has_standard_partition_on_meta(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_cloudformation.py 2.31.35-1/tests/functional/botocore/test_cloudformation.py
--- 2.23.6-1/tests/functional/botocore/test_cloudformation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_cloudformation.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,12 +15,12 @@ from tests.functional.botocore.docs impo
 
 class TestCloudFormationDocs(BaseDocsFunctionalTest):
     def test_get_template_response_documented_as_dict(self):
-        content = self.get_docstring_for_method('cloudformation', 'get_template')
+        content = self.get_docstring_for_method(
+            'cloudformation', 'get_template'
+        )
         # String return type should be gone
-        self.assert_not_contains_line(
-            "(*string*) --", content)
+        self.assert_not_contains_line("(*string*) --", content)
         # Check for template body returning a dict
-        self.assert_contains_line(
-            "(*dict*) --", content)
+        self.assert_contains_line("(*dict*) --", content)
         # Check the specifics of the returned dict
         self.assert_contains_line('{}', content)
diff -pruN 2.23.6-1/tests/functional/botocore/test_cloudsearchdomain.py 2.31.35-1/tests/functional/botocore/test_cloudsearchdomain.py
--- 2.23.6-1/tests/functional/botocore/test_cloudsearchdomain.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_cloudsearchdomain.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,10 +15,11 @@ from tests import BaseSessionTest, Clien
 
 class TestCloudsearchdomain(BaseSessionTest):
     def setUp(self):
-        super(TestCloudsearchdomain, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.client = self.session.create_client(
-            'cloudsearchdomain', self.region)
+            'cloudsearchdomain', self.region
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
 
     def test_search(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_cognito_idp.py 2.31.35-1/tests/functional/botocore/test_cognito_idp.py
--- 2.23.6-1/tests/functional/botocore/test_cognito_idp.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_cognito_idp.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,54 +12,42 @@
 # language governing permissions and limitations under the License.
 import pytest
 
-from tests import create_session, mock, ClientHTTPStubber
-
+from tests import ClientHTTPStubber, create_session, mock
 
 OPERATION_PARAMS = {
     'change_password': {
         'PreviousPassword': 'myoldbadpassword',
         'ProposedPassword': 'mynewgoodpassword',
-        'AccessToken': 'foobar'
+        'AccessToken': 'foobar',
     },
     'confirm_forgot_password': {
         'ClientId': 'foo',
         'Username': 'myusername',
         'ConfirmationCode': 'thisismeforreal',
-        'Password': 'whydowesendpasswordsviaemail'
+        'Password': 'whydowesendpasswordsviaemail',
     },
     'confirm_sign_up': {
         'ClientId': 'foo',
         'Username': 'myusername',
-        'ConfirmationCode': 'ireallydowanttosignup'
-    },
-    'delete_user': {
-        'AccessToken': 'foobar'
+        'ConfirmationCode': 'ireallydowanttosignup',
     },
+    'delete_user': {'AccessToken': 'foobar'},
     'delete_user_attributes': {
         'UserAttributeNames': ['myattribute'],
-        'AccessToken': 'foobar'
-    },
-    'forgot_password': {
-        'ClientId': 'foo',
-        'Username': 'myusername'
-    },
-    'get_user': {
-        'AccessToken': 'foobar'
+        'AccessToken': 'foobar',
     },
+    'forgot_password': {'ClientId': 'foo', 'Username': 'myusername'},
+    'get_user': {'AccessToken': 'foobar'},
     'get_user_attribute_verification_code': {
         'AttributeName': 'myattribute',
-        'AccessToken': 'foobar'
-    },
-    'resend_confirmation_code': {
-        'ClientId': 'foo',
-        'Username': 'myusername'
+        'AccessToken': 'foobar',
     },
+    'resend_confirmation_code': {'ClientId': 'foo', 'Username': 'myusername'},
     'set_user_settings': {
         'AccessToken': 'randomtoken',
-        'MFAOptions': [{
-            'DeliveryMedium': 'SMS',
-            'AttributeName': 'someattributename'
-        }]
+        'MFAOptions': [
+            {'DeliveryMedium': 'SMS', 'AttributeName': 'someattributename'}
+        ],
     },
     'sign_up': {
         'ClientId': 'foo',
@@ -67,20 +55,20 @@ OPERATION_PARAMS = {
         'Password': 'mysupersecurepassword',
     },
     'update_user_attributes': {
-        'UserAttributes': [{
-            'Name': 'someattributename',
-            'Value': 'newvalue'
-        }],
-        'AccessToken': 'foobar'
+        'UserAttributes': [{'Name': 'someattributename', 'Value': 'newvalue'}],
+        'AccessToken': 'foobar',
     },
     'verify_user_attribute': {
         'AttributeName': 'someattributename',
         'Code': 'someverificationcode',
-        'AccessToken': 'foobar'
+        'AccessToken': 'foobar',
     },
 }
 
-@pytest.mark.parametrize("operation_name, parameters", OPERATION_PARAMS.items())
+
+@pytest.mark.parametrize(
+    "operation_name, parameters", OPERATION_PARAMS.items()
+)
 def test_unsigned_operations(operation_name, parameters):
     environ = {
         'AWS_ACCESS_KEY_ID': 'access_key',
@@ -101,6 +89,6 @@ def test_unsigned_operations(operation_n
             operation(**parameters)
             request = http_stubber.requests[0]
 
-        assert 'authorization' not in request.headers, (
-            'authorization header found in unsigned operation'
-        )
+        assert (
+            'authorization' not in request.headers
+        ), 'authorization header found in unsigned operation'
diff -pruN 2.23.6-1/tests/functional/botocore/test_compress.py 2.31.35-1/tests/functional/botocore/test_compress.py
--- 2.23.6-1/tests/functional/botocore/test_compress.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_compress.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,10 +14,14 @@
 import gzip
 
 import pytest
-
 from botocore.compress import COMPRESSION_MAPPING
 from botocore.config import Config
+
 from tests import ALL_SERVICES, ClientHTTPStubber, patch_load_service_model
+from tests.functional.botocore.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
 
 FAKE_MODEL = {
     "version": "2.0",
@@ -127,3 +131,24 @@ def test_compression(patched_session, mo
         serialized_body = f"{additional_params}&{serialized_params}"
         actual_body = gzip.decompress(http_stubber.requests[0].body)
         assert serialized_body.encode('utf-8') == actual_body
+
+
+def test_user_agent_has_gzip_feature_id(patched_session, monkeypatch):
+    patch_load_service_model(
+        patched_session, monkeypatch, FAKE_MODEL, FAKE_RULESET
+    )
+    client = patched_session.create_client(
+        "otherservice",
+        region_name="us-west-2",
+        config=Config(request_min_compression_size_bytes=100),
+    )
+    with ClientHTTPStubber(client, strict=True) as http_stubber:
+        http_stubber.add_response(status=200, body=b"<response/>")
+        params_list = [
+            {"MockOpParam": f"MockOpParamValue{i}"} for i in range(1, 21)
+        ]
+        # The mock operation registers `'GZIP_REQUEST_COMPRESSION': 'L'`
+        client.mock_operation(MockOpParamList=params_list)
+    ua_string = get_captured_ua_strings(http_stubber)[0]
+    feature_list = parse_registered_feature_ids(ua_string)
+    assert 'L' in feature_list
diff -pruN 2.23.6-1/tests/functional/botocore/test_context_params.py 2.31.35-1/tests/functional/botocore/test_context_params.py
--- 2.23.6-1/tests/functional/botocore/test_context_params.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_context_params.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 
 import pytest
-
 from botocore.config import Config
+
 from tests import ClientHTTPStubber, mock, patch_load_service_model
 
 # fake rulesets compatible with all fake service models below
@@ -476,6 +476,7 @@ def test_dynamic_context_param_sent_to_e
     else:
         mock_resolve_endpoint.assert_called_once_with(Region='us-east-1')
 
+
 def test_dynamic_context_param_from_event_handler_sent_to_endpoint_resolver(
     monkeypatch,
     patched_session,
@@ -487,10 +488,12 @@ def test_dynamic_context_param_from_even
         FAKE_MODEL_WITH_DYNAMIC_CONTEXT_PARAM,
         FAKE_RULESET_WITH_DYNAMIC_CONTEXT_PARAM,
     )
+
     # event handler for provide-client-params that modifies the value of the
     # MockOpParam parameter
     def change_param(params, **kwargs):
         params['MockOpParam'] = 'mock-op-param-value-2'
+
     client = patched_session.create_client(
         'otherservice', region_name='us-east-1'
     )
diff -pruN 2.23.6-1/tests/functional/botocore/test_credentials.py 2.31.35-1/tests/functional/botocore/test_credentials.py
--- 2.23.6-1/tests/functional/botocore/test_credentials.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_credentials.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,43 +11,64 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import json
-import uuid
-import threading
-import os
 import math
-import time
-import tempfile
+import os
 import shutil
-from datetime import datetime, timedelta
 import sys
+import tempfile
+import threading
+import time
+import uuid
+from datetime import datetime, timedelta, timezone
+from unittest.mock import patch
 
 import pytest
-from dateutil.tz import tzlocal
-from botocore.exceptions import CredentialRetrievalError
-
-from tests import (
-    mock, unittest, IntegerRefresher, BaseEnvVar, BaseSessionTest, random_chars
-)
-from tests import temporary_file, StubbedSession, SessionHTTPStubber
 from botocore import UNSIGNED
-from botocore.credentials import EnvProvider, ContainerProvider
-from botocore.credentials import InstanceMetadataProvider
-from botocore.credentials import Credentials, ReadOnlyCredentials
-from botocore.credentials import AssumeRoleProvider, ProfileProviderBuilder
-from botocore.credentials import CanonicalNameCredentialSourcer
-from botocore.credentials import DeferredRefreshableCredentials
-from botocore.credentials import create_credential_resolver
-from botocore.credentials import JSONFileCache
-from botocore.credentials import SSOProvider
 from botocore.config import Config
+from botocore.credentials import (
+    AssumeRoleProvider,
+    CanonicalNameCredentialSourcer,
+    ContainerProvider,
+    Credentials,
+    DeferredRefreshableCredentials,
+    EnvProvider,
+    InstanceMetadataProvider,
+    JSONFileCache,
+    ProfileProviderBuilder,
+    ReadOnlyCredentials,
+    SSOProvider,
+    create_credential_resolver,
+)
+from botocore.exceptions import (
+    CredentialRetrievalError,
+    InfiniteLoopConfigError,
+    InvalidConfigError,
+)
 from botocore.session import Session
-from botocore.exceptions import InvalidConfigError, InfiniteLoopConfigError
 from botocore.stub import Stubber
 from botocore.tokens import SSOTokenProvider
 from botocore.utils import datetime2timestamp
+from dateutil.tz import tzlocal
 
-TIME_IN_ONE_HOUR = datetime.utcnow() + timedelta(hours=1)
-TIME_IN_SIX_MONTHS = datetime.utcnow() + timedelta(hours=4320)
+from tests import (
+    BaseEnvVar,
+    ClientHTTPStubber,
+    BaseSessionTest,
+    IntegerRefresher,
+    SessionHTTPStubber,
+    StubbedSession,
+    mock,
+    random_chars,
+    temporary_file,
+    unittest,
+)
+from tests.functional.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
+
+TIME_IN_ONE_HOUR = datetime.now(tz=timezone.utc) + timedelta(hours=1)
+TIME_IN_SIX_MONTHS = datetime.now(tz=timezone.utc) + timedelta(hours=4320)
 
 
 class TestCredentialRefreshRaces(unittest.TestCase):
@@ -95,16 +116,16 @@ class TestCredentialRefreshRaces(unittes
 
     def test_has_no_race_conditions(self):
         creds = IntegerRefresher(
-            creds_last_for=2,
-            advisory_refresh=1,
-            mandatory_refresh=0
+            creds_last_for=2, advisory_refresh=1, mandatory_refresh=0
         )
+
         def _run_in_thread(collected):
             for _ in range(4000):
                 frozen = creds.get_frozen_credentials()
-                collected.append((frozen.access_key,
-                                  frozen.secret_key,
-                                  frozen.token))
+                collected.append(
+                    (frozen.access_key, frozen.secret_key, frozen.token)
+                )
+
         start = time.time()
         self.assert_consistent_credentials_seen(creds, _run_in_thread)
         end = time.time()
@@ -112,39 +133,41 @@ class TestCredentialRefreshRaces(unittes
         # So, for example, if execution time took 6.1 seconds, then
         # we should see a maximum number of refreshes being (6 / 2.0) + 1 = 4
         max_calls_allowed = math.ceil((end - start) / 2.0) + 1
-        self.assertTrue(creds.refresh_counter <= max_calls_allowed,
-                        "Too many cred refreshes, max: %s, actual: %s, "
-                        "time_delta: %.4f" % (max_calls_allowed,
-                                              creds.refresh_counter,
-                                              (end - start)))
+        self.assertTrue(
+            creds.refresh_counter <= max_calls_allowed,
+            f"Too many cred refreshes, max: {max_calls_allowed}, actual: {creds.refresh_counter}, "
+            f"time_delta: {end - start:.4f}",
+        )
 
     def test_no_race_for_immediate_advisory_expiration(self):
         creds = IntegerRefresher(
-            creds_last_for=1,
-            advisory_refresh=1,
-            mandatory_refresh=0
+            creds_last_for=1, advisory_refresh=1, mandatory_refresh=0
         )
+
         def _run_in_thread(collected):
             for _ in range(100):
                 frozen = creds.get_frozen_credentials()
-                collected.append((frozen.access_key,
-                                  frozen.secret_key,
-                                  frozen.token))
+                collected.append(
+                    (frozen.access_key, frozen.secret_key, frozen.token)
+                )
+
         self.assert_consistent_credentials_seen(creds, _run_in_thread)
 
     def test_no_race_for_initial_refresh_of_deferred_refreshable(self):
         def get_credentials():
             expiry_time = (
-                datetime.now(tzlocal()) + timedelta(hours=24)).isoformat()
+                datetime.now(tzlocal()) + timedelta(hours=24)
+            ).isoformat()
             return {
                 'access_key': 'my-access-key',
                 'secret_key': 'my-secret-key',
                 'token': 'my-token',
-                'expiry_time': expiry_time
+                'expiry_time': expiry_time,
             }
 
         deferred_creds = DeferredRefreshableCredentials(
-            get_credentials, 'fixed')
+            get_credentials, 'fixed'
+        )
 
         def _run_in_thread(collected):
             frozen = deferred_creds.get_frozen_credentials()
@@ -155,7 +178,7 @@ class TestCredentialRefreshRaces(unittes
 
 class BaseAssumeRoleTest(BaseEnvVar):
     def setUp(self):
-        super(BaseAssumeRoleTest, self).setUp()
+        super().setUp()
         self.tempdir = tempfile.mkdtemp()
         self.config_file = os.path.join(self.tempdir, 'config')
         self.environ['AWS_CONFIG_FILE'] = self.config_file
@@ -163,7 +186,7 @@ class BaseAssumeRoleTest(BaseEnvVar):
 
     def tearDown(self):
         shutil.rmtree(self.tempdir)
-        super(BaseAssumeRoleTest, self).tearDown()
+        super().tearDown()
 
     def some_future_time(self):
         timeobj = datetime.now(tzlocal())
@@ -178,21 +201,24 @@ class BaseAssumeRoleTest(BaseEnvVar):
                 'AccessKeyId': credentials.access_key,
                 'SecretAccessKey': credentials.secret_key,
                 'SessionToken': credentials.token,
-                'Expiration': expiration
+                'Expiration': expiration,
             },
             'AssumedRoleUser': {
                 'AssumedRoleId': 'myroleid',
-                'Arn': 'arn:aws:iam::1234567890:user/myuser'
-            }
+                'Arn': 'arn:aws:iam::1234567890:user/myuser',
+            },
         }
 
         return response
 
     def create_random_credentials(self):
         return Credentials(
-            'fake-%s' % random_chars(15),
-            'fake-%s' % random_chars(35),
-            'fake-%s' % random_chars(45)
+            f'fake-{random_chars(15)}',
+            f'fake-{random_chars(35)}',
+            f'fake-{random_chars(45)}',
+            # The account_id gets resolved from the
+            # Arn in create_assume_role_response().
+            account_id='1234567890',
         )
 
     def assert_creds_equal(self, c1, c2):
@@ -211,7 +237,7 @@ class BaseAssumeRoleTest(BaseEnvVar):
 
 class TestAssumeRole(BaseAssumeRoleTest):
     def setUp(self):
-        super(TestAssumeRole, self).setUp()
+        super().setUp()
         self.environ['AWS_ACCESS_KEY_ID'] = 'access_key'
         self.environ['AWS_SECRET_ACCESS_KEY'] = 'secret_key'
 
@@ -225,9 +251,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
         credential_process = os.path.join(
             current_dir, 'utils', 'credentialprocess.py'
         )
-        self.credential_process = '%s %s' % (
-            sys.executable, credential_process
-        )
+        self.credential_process = f'{sys.executable} {credential_process}'
 
     def mock_provider(self, provider_cls):
         mock_instance = mock.Mock(spec=provider_cls)
@@ -253,10 +277,13 @@ class TestAssumeRole(BaseAssumeRoleTest)
             client_creator=self.mock_client_creator,
             cache={},
             profile_name=profile,
-            credential_sourcer=CanonicalNameCredentialSourcer([
-                self.env_provider, self.container_provider,
-                self.metadata_provider
-            ]),
+            credential_sourcer=CanonicalNameCredentialSourcer(
+                [
+                    self.env_provider,
+                    self.container_provider,
+                    self.metadata_provider,
+                ]
+            ),
             profile_provider_builder=ProfileProviderBuilder(
                 session,
                 sso_token_cache=sso_token_cache,
@@ -272,7 +299,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
             'env': self.env_provider,
             'iam-role': self.metadata_provider,
             'container-role': self.container_provider,
-            'assume-role': assume_role_provider
+            'assume-role': assume_role_provider,
         }
         for name, provider in replacements.items():
             try:
@@ -283,9 +310,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
 
             resolver.providers[index] = provider
 
-        session.register_component(
-            'credential_provider', resolver
-        )
+        session.register_component('credential_provider', resolver)
         return session, stubber
 
     def test_assume_role(self):
@@ -470,7 +495,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
             'role_arn = arn:aws:iam::123456789:role/RoleA\n'
             'source_profile = B\n'
             '[profile B]\n'
-            'credential_process = %s\n' % self.credential_process
+            f'credential_process = {self.credential_process}\n'
         )
         self.write_config(config)
 
@@ -503,7 +528,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
             'source_profile = B\n'
             '[profile B]\n'
             'role_arn = arn:aws:iam::123456789:role/RoleB\n'
-            'web_identity_token_file = %s\n' % token_path
+            f'web_identity_token_file = {token_path}\n'
         )
         self.write_config(config)
 
@@ -544,7 +569,7 @@ class TestAssumeRole(BaseAssumeRoleTest)
             'role_arn = arn:aws:iam::123456789:role/RoleA\n'
             'source_profile = B\n'
             '[profile B]\n'
-            'web_identity_token_file = %s\n' % token_path
+            f'web_identity_token_file = {token_path}\n'
         )
         self.write_config(config)
 
@@ -559,7 +584,9 @@ class TestAssumeRole(BaseAssumeRoleTest)
         token_cache_key = 'f395038c92f1828cbb3991d2d6152d326b895606'
         cached_token = {
             'accessToken': 'a.token',
-            'expiresAt': self.some_future_time(),
+            'expiresAt': self.some_future_time().strftime(
+                "%Y-%m-%dT%H:%M:%SZ"
+            ),
         }
         temp_cache = JSONFileCache(self.tempdir)
         temp_cache[token_cache_key] = cached_token
@@ -755,10 +782,30 @@ class TestAssumeRole(BaseAssumeRoleTest)
         self.assert_creds_equal(creds, expected_creds)
         self.assertEqual(self.actual_client_region, 'cn-north-1')
 
+    def test_assume_role_resolves_account_id(self):
+        config = (
+            '[profile A]\n'
+            'role_arn = arn:aws:iam::1234567890:role/RoleA\n'
+            'source_profile = B\n\n'
+            '[profile B]\n'
+            'aws_access_key_id = foo\n'
+            'aws_secret_access_key = bar\n'
+        )
+        self.write_config(config)
+        expected_creds = self.create_random_credentials()
+        response = self.create_assume_role_response(expected_creds)
+
+        session, stubber = self.create_session(profile='A')
+        stubber.add_response('assume_role', response)
+
+        actual_creds = session.get_credentials()
+        self.assert_creds_equal(actual_creds, expected_creds)
+        self.assertEqual(actual_creds.account_id, '1234567890')
+
 
 class TestAssumeRoleWithWebIdentity(BaseAssumeRoleTest):
     def setUp(self):
-        super(TestAssumeRoleWithWebIdentity, self).setUp()
+        super().setUp()
         self.token_file = os.path.join(self.tempdir, 'token.jwt')
         self.write_token('totally.a.token')
 
@@ -774,9 +821,7 @@ class TestAssumeRoleWithWebIdentity(Base
         session = StubbedSession(**kwargs)
         stubber = session.stub('sts')
         stubber.add_response(
-            'assume_role_with_web_identity',
-            response,
-            expected_params
+            'assume_role_with_web_identity', response, expected_params
         )
         stubber.activate()
         actual_creds = session.get_credentials()
@@ -788,8 +833,8 @@ class TestAssumeRoleWithWebIdentity(Base
             '[profile A]\n'
             'role_arn = arn:aws:iam::123456789:role/RoleA\n'
             'role_session_name = sname\n'
-            'web_identity_token_file = %s\n'
-        ) % self.token_file
+            f'web_identity_token_file = {self.token_file}\n'
+        )
         self.write_config(config)
         expected_params = {
             'RoleArn': 'arn:aws:iam::123456789:role/RoleA',
@@ -799,10 +844,7 @@ class TestAssumeRoleWithWebIdentity(Base
         self.assert_session_credentials(expected_params, profile='A')
 
     def test_assume_role_env_vars(self):
-        config = (
-            '[profile B]\n'
-            'region = us-west-2\n'
-        )
+        config = '[profile B]\n' 'region = us-west-2\n'
         self.write_config(config)
         self.environ['AWS_ROLE_ARN'] = 'arn:aws:iam::123456789:role/RoleB'
         self.environ['AWS_WEB_IDENTITY_TOKEN_FILE'] = self.token_file
@@ -820,8 +862,8 @@ class TestAssumeRoleWithWebIdentity(Base
             '[profile A]\n'
             'role_arn = arn:aws:iam::123456789:role/RoleA\n'
             'role_session_name = aname\n'
-            'web_identity_token_file = %s\n'
-        ) % self.token_file
+            f'web_identity_token_file = {self.token_file}\n'
+        )
         self.write_config(config)
 
         different_token = os.path.join(self.tempdir, str(uuid.uuid4()))
@@ -844,9 +886,7 @@ class TestProcessProvider(unittest.TestC
         credential_process = os.path.join(
             current_dir, 'utils', 'credentialprocess.py'
         )
-        self.credential_process = '%s %s' % (
-            sys.executable, credential_process
-        )
+        self.credential_process = f'{sys.executable} {credential_process}'
         self.environ = os.environ.copy()
         self.environ_patch = mock.patch('os.environ', self.environ)
         self.environ_patch.start()
@@ -855,10 +895,7 @@ class TestProcessProvider(unittest.TestC
         self.environ_patch.stop()
 
     def test_credential_process(self):
-        config = (
-            '[profile processcreds]\n'
-            'credential_process = %s\n'
-        )
+        config = '[profile processcreds]\n' 'credential_process = %s\n'
         config = config % self.credential_process
         with temporary_file('w') as f:
             f.write(config)
@@ -901,7 +938,6 @@ class TestProcessProvider(unittest.TestC
 
 
 class TestInstanceMetadataFetcher(BaseSessionTest):
-
     @mock.patch('botocore.httpsession.URLLib3Session.send')
     def test_imds_use_truncated_user_agent(self, send):
         self.session.user_agent_version = '24.0'
@@ -1055,3 +1091,523 @@ class SSOSessionTest(BaseEnvVar):
             }
         }
         stubber.add_response(body=json.dumps(response).encode('utf-8'))
+
+
+@pytest.mark.parametrize(
+    "environ_vars,fake_credentials,patches,expected_feature_id",
+    [
+        # Test case 1: IMDS credentials
+        (
+            {},
+            {},
+            [
+                patch(
+                    "botocore.utils.InstanceMetadataFetcher.retrieve_iam_role_credentials",
+                    return_value={
+                        "role_name": "FAKEROLE",
+                        "access_key": "FAKEACCESSKEY",
+                        "secret_key": "FAKESECRET",
+                        "token": "FAKETOKEN",
+                        "expiry_time": "2099-01-01T00:00:00Z",
+                    },
+                ),
+                patch(
+                    "botocore.credentials.ContainerProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.ConfigProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.SharedCredentialProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+            ],
+            '0',
+        ),
+        # Test case 2: HTTP credentials (container)
+        (
+            {
+                'AWS_CONTAINER_CREDENTIALS_FULL_URI': 'http://localhost/foo',
+                'AWS_CONTAINER_AUTHORIZATION_TOKEN': 'Basic auth-token',
+            },
+            {},
+            [
+                patch(
+                    "botocore.credentials.ContainerMetadataFetcher.retrieve_full_uri",
+                    return_value={
+                        "AccessKeyId": "FAKEACCESSKEY",
+                        "SecretAccessKey": "FAKESECRET",
+                        "Token": "FAKETOKEN",
+                        "Expiration": "2099-01-01T00:00:00Z",
+                        "AccountId": "01234567890",
+                    },
+                ),
+                patch(
+                    "botocore.credentials.ConfigProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.SharedCredentialProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+            ],
+            'z',
+        ),
+        # Test case 3: Credentials set via Environment variables
+        (
+            {
+                'AWS_ACCESS_KEY_ID': 'FAKEACCESSKEY',
+                'AWS_SECRET_ACCESS_KEY': 'FAKESECRET',
+                'AWS_SESSION_TOKEN': 'FAKETOKEN',
+            },
+            {},
+            [],
+            'g',
+        ),
+        # Test case 4: Credentials set via code
+        (
+            {},
+            {
+                'aws_access_key_id': 'FAKEACCESSKEY',
+                'aws_secret_access_key': 'FAKESECRET',
+                'aws_session_token': 'FAKETOKEN',
+            },
+            [],
+            'e',
+        ),
+        # Test case 5: Credentials set with Boto2 config
+        (
+            {},
+            {},
+            [
+                patch(
+                    "botocore.configloader.raw_config_parse",
+                    return_value={
+                        "Credentials": {
+                            "aws_access_key_id": "FAKEACCESSKEY",
+                            "aws_secret_access_key": "FAKESECRETKEY",
+                        }
+                    },
+                ),
+                patch(
+                    "botocore.credentials.ConfigProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.SharedCredentialProvider.load",
+                    return_value=None,
+                ),
+                                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+            ],
+            'x',
+        ),
+        # Test case 6: Credentials set via process provider
+        (
+            {},
+            {},
+            [
+                patch(
+                    "botocore.credentials.ProcessProvider._retrieve_credentials_using",
+                    return_value={
+                        'access_key': "FAKEACCESSKEY",
+                        'secret_key': "FAKESECRETKEY",
+                        'token': "FAKETOKEN",
+                    },
+                ),
+                patch(
+                    "botocore.credentials.ProcessProvider._credential_process",
+                    return_value="Mock_credential_process",
+                ),
+                patch(
+                    "botocore.credentials.ContainerProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.ConfigProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.SharedCredentialProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+            ],
+            ['v', 'w'],
+        ),
+    ],
+)
+def test_user_agent_feature_ids(
+    environ_vars,
+    fake_credentials,
+    patches,
+    expected_feature_id,
+    monkeypatch,
+    patched_session,
+):
+    for var, value in environ_vars.items():
+        monkeypatch.setenv(var, value)
+
+    for patch_obj in patches:
+        patch_obj.start()
+
+    try:
+        client = patched_session.create_client(
+            "s3", region_name="us-east-1", **fake_credentials
+        )
+        _assert_feature_ids_in_ua(client, expected_feature_id)
+    finally:
+        for patch_obj in patches:
+            patch_obj.stop()
+
+
+@pytest.mark.parametrize(
+    "creds_env_var,creds_file_content,patches,expected_feature_id",
+    [
+        (
+            'AWS_SHARED_CREDENTIALS_FILE',
+            '[default]\naws_access_key_id = FAKEACCESSKEY\naws_secret_access_key = FAKESECRET',
+            [
+                patch(
+                    "botocore.credentials.AssumeRoleProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+            ],
+            'n',
+        ),
+        (
+            'AWS_CONFIG_FILE',
+            '[default]\naws_access_key_id = FAKEACCESSKEY\naws_secret_access_key = FAKESECRET',
+            [
+                patch(
+                    "botocore.credentials.AssumeRoleProvider.load",
+                    return_value=None,
+                ),
+                patch(
+                    "botocore.credentials.EnvProvider.load", return_value=None
+                ),
+                patch(
+                    "botocore.credentials.SharedCredentialProvider.load",
+                    return_value=None,
+                ),
+            ],
+            'n',
+        ),
+    ],
+)
+def test_user_agent_has_file_based_feature_ids(
+    creds_env_var,
+    creds_file_content,
+    patches,
+    expected_feature_id,
+    tmp_path,
+    monkeypatch,
+):
+    credentials_file = tmp_path / "creds"
+    credentials_file.write_text(creds_file_content)
+    monkeypatch.setenv(creds_env_var, str(credentials_file))
+
+    for patch_obj in patches:
+        patch_obj.start()
+
+    try:
+        session = Session()
+        client = session.create_client("s3", region_name="us-east-1")
+        _assert_feature_ids_in_ua(client, expected_feature_id)
+    finally:
+        for patch_obj in patches:
+            patch_obj.stop()
+
+
+def _assert_feature_ids_in_ua(client, expected_feature_ids):
+    """Helper to test feature IDs appear in user agent for multiple calls."""
+    with ClientHTTPStubber(client, strict=True) as http_stubber:
+        http_stubber.add_response()
+        http_stubber.add_response()
+        client.list_buckets()
+        client.list_buckets()
+
+    ua_strings = get_captured_ua_strings(http_stubber)
+    for ua_string in ua_strings:
+        feature_list = parse_registered_feature_ids(ua_string)
+        for expected_id in expected_feature_ids:
+            assert expected_id in feature_list
+
+
+@patch("botocore.credentials.CachedCredentialFetcher._load_from_cache")
+@patch("botocore.credentials.SSOProvider._load_sso_config")
+@patch(
+    "botocore.credentials.AssumeRoleWithWebIdentityProvider.load",
+    return_value=None,
+)
+@patch("botocore.credentials.AssumeRoleProvider.load", return_value=None)
+@patch("botocore.credentials.EnvProvider.load", return_value=None)
+def test_user_agent_has_sso_legacy_credentials_feature_id(
+    _unused_mock_env_load,
+    _unused_mock_shared_load,
+    _unused_mock_config_load,
+    mock_load_sso_config,
+    mock_load_sso_credentials,
+    monkeypatch,
+    patched_session,
+):
+    fake_fetcher_kwargs = {
+        'sso_start_url': "https://test.awsapps.com/start",
+        'sso_region': "us-east-1",
+        'sso_role_name': "Administrator",
+        'sso_account_id': "1234567890",
+    }
+    fake_response = {
+        "ProviderType": "sso",
+        "Credentials": {
+            "role_name": "FAKEROLE",
+            "AccessKeyId": "FAKEACCESSKEY",
+            "SecretAccessKey": "FAKESECRET",
+            "SessionToken": "FAKETOKEN",
+            "Expiration": "2099-01-01T00:00:00Z",
+        },
+    }
+
+    mock_load_sso_config.return_value = fake_fetcher_kwargs
+    client_one = patched_session.create_client("s3", region_name="us-east-1")
+    mock_load_sso_credentials.return_value = fake_response
+
+    _assert_feature_ids_in_ua(client_one, ['t', 'u'])
+
+
+@patch("botocore.credentials.CachedCredentialFetcher._load_from_cache")
+@patch("botocore.credentials.SSOProvider._load_sso_config")
+@patch(
+    "botocore.credentials.AssumeRoleWithWebIdentityProvider.load",
+    return_value=None,
+)
+@patch("botocore.credentials.AssumeRoleProvider.load", return_value=None)
+@patch("botocore.credentials.EnvProvider.load", return_value=None)
+def test_user_agent_has_sso_credentials_feature_id(
+    _unused_mock_env_load,
+    _unused_mock_shared_load,
+    _unused_mock_config_load,
+    mock_load_sso_config,
+    mock_load_sso_credentials,
+    monkeypatch,
+    patched_session,
+):
+    fake_fetcher_kwargs = {
+        'sso_session': 'sample_test',
+        'sso_start_url': "https://test.awsapps.com/start",
+        'sso_region': "us-east-1",
+        'sso_role_name': "Administrator",
+        'sso_account_id': "1234567890",
+    }
+    fake_response = {
+        "ProviderType": "sso",
+        "Credentials": {
+            "role_name": "FAKEROLE",
+            "AccessKeyId": "FAKEACCESSKEY",
+            "SecretAccessKey": "FAKESECRET",
+            "SessionToken": "FAKETOKEN",
+            "Expiration": "2099-01-01T00:00:00Z",
+        },
+    }
+
+    mock_load_sso_config.return_value = fake_fetcher_kwargs
+    client_one = patched_session.create_client("s3", region_name="us-east-1")
+    mock_load_sso_credentials.return_value = fake_response
+
+    _assert_feature_ids_in_ua(client_one, ['r', 's'])
+
+
+@pytest.mark.parametrize(
+    "config_content,env_vars,expected_source_features,expected_provider_feature",
+    [
+        # Test Case 1: Assume Role with source profile
+        (
+            '''[profile assume-role-test]
+role_arn = arn:aws:iam::123456789012:role/test-role
+source_profile = base
+
+[profile base]
+aws_access_key_id = FAKEACCESSKEY
+aws_secret_access_key = FAKESECRET''',
+            {},
+            [
+                'n',  # CREDENTIALS_PROFILE
+                'o',  # CREDENTIALS_PROFILE_SOURCE_PROFILE
+            ],
+            'i',  # CREDENTIALS_STS_ASSUME_ROLE
+        ),
+        # Test Case 2: Assume Role with named provider
+        (
+            '''[profile assume-role-test]
+role_arn = arn:aws:iam::123456789012:role/test-role
+credential_source = Environment''',
+            {
+                'AWS_ACCESS_KEY_ID': 'FAKEACCESSKEY',
+                'AWS_SECRET_ACCESS_KEY': 'FAKESECRET',
+            },
+            [
+                'g',  # CREDENTIALS_ENV_VARS
+                'p',  # CREDENTIALS_PROFILE_NAMED_PROVIDER
+            ],
+            'i',  # CREDENTIALS_STS_ASSUME_ROLE
+        ),
+    ],
+)
+def test_user_agent_has_assume_role_feature_ids(
+    config_content,
+    env_vars,
+    expected_source_features,
+    expected_provider_feature,
+    tmp_path,
+):
+    session = _create_assume_role_session(config_content, tmp_path)
+
+    # Set env vars if needed
+    with patch.dict(os.environ, env_vars, clear=True):
+        with SessionHTTPStubber(session) as stubber:
+            s3 = session.create_client('s3', region_name='us-east-1')
+            _add_assume_role_http_response(stubber, with_web_identity=False)
+            stubber.add_response()
+            stubber.add_response()
+            s3.list_buckets()
+            s3.list_buckets()
+
+    ua_strings = get_captured_ua_strings(stubber)
+    _assert_deferred_credential_feature_ids(
+        ua_strings, expected_source_features, expected_provider_feature
+    )
+
+
+@pytest.mark.parametrize(
+    "config_content,env_vars,expected_source_features,expected_provider_feature",
+    [
+        # Test Case 1: Assume Role with Web Identity through config profile
+        (
+            '''[profile assume-role-test]
+role_arn = arn:aws:iam::123456789012:role/test-role
+web_identity_token_file = {token_file}''',
+            {},
+            ['q'],  # CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN
+            'k',  # CREDENTIALS_STS_ASSUME_ROLE_WEB_ID
+        ),
+        # Test Case 2: Assume Role with Web Identity through env vars
+        (
+            '',
+            {
+                'AWS_ROLE_ARN': 'arn:aws:iam::123456789012:role/test-role',
+                'AWS_WEB_IDENTITY_TOKEN_FILE': '{token_file}',
+                'AWS_ROLE_SESSION_NAME': 'test-session',
+            },
+            ['h'],  # CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN
+            'k',  # CREDENTIALS_STS_ASSUME_ROLE_WEB_ID
+        ),
+    ],
+)
+def test_user_agent_has_assume_role_with_web_identity_feature_ids(
+    config_content,
+    env_vars,
+    expected_source_features,
+    expected_provider_feature,
+    tmp_path,
+):
+    token_file = tmp_path / 'token.jwt'
+    token_file.write_text('fake-jwt-token')
+    if 'AWS_WEB_IDENTITY_TOKEN_FILE' in env_vars:
+        env_vars['AWS_WEB_IDENTITY_TOKEN_FILE'] = str(token_file)
+    elif config_content and 'web_identity_token_file' in config_content:
+        config_content = config_content.replace(
+            '{token_file}', str(token_file)
+        )
+
+    session = _create_assume_role_session(config_content, tmp_path)
+
+    # Set env vars if needed
+    with patch.dict(os.environ, env_vars, clear=True):
+        with SessionHTTPStubber(session) as stubber:
+            s3 = session.create_client('s3', region_name='us-east-1')
+            _add_assume_role_http_response(stubber, with_web_identity=True)
+            stubber.add_response()
+            stubber.add_response()
+            s3.list_buckets()
+            s3.list_buckets()
+
+    ua_strings = get_captured_ua_strings(stubber)
+    _assert_deferred_credential_feature_ids(
+        ua_strings, expected_source_features, expected_provider_feature
+    )
+
+
+def _create_assume_role_session(config_content, tmp_path):
+    if config_content:
+        config_file = tmp_path / 'config'
+        config_file.write_text(config_content)
+        session = Session(profile='assume-role-test')
+        session.set_config_variable('config_file', str(config_file))
+    else:
+        session = Session()
+    return session
+
+
+def _add_assume_role_http_response(stubber, with_web_identity):
+    """Add HTTP response for AssumeRole or AssumeRoleWithWebIdentity call with proper credentials"""
+    expiration = (datetime.now(timezone.utc) + timedelta(hours=1)).strftime(
+        '%Y-%m-%dT%H:%M:%SZ'
+    )
+    method_name = (
+        'AssumeRoleWithWebIdentity' if with_web_identity else 'AssumeRole'
+    )
+    body = (
+        f'<{method_name}Response>'
+        f'  <{method_name}Result>'
+        '    <AssumedRoleUser>'
+        '      <Arn>arn:aws:sts::123456789012:user</Arn>'
+        '      <AssumedRoleId>AKID:test-session-123</AssumedRoleId>'
+        '    </AssumedRoleUser>'
+        '    <Credentials>'
+        f'      <AccessKeyId>FAKEASSUMEROLEKEY</AccessKeyId>'
+        f'      <SecretAccessKey>FAKEASSUMEROLSECRET</SecretAccessKey>'
+        '      <SessionToken>FAKETOKEN</SessionToken>'
+        f'      <Expiration>{expiration}</Expiration>'
+        '    </Credentials>'
+        f'  </{method_name}Result>'
+        f'</{method_name}Response>'
+    )
+    stubber.add_response(body=body.encode('utf-8'))
+
+
+def _assert_deferred_credential_feature_ids(
+    ua_strings,
+    expected_source_features,
+    expected_provider_feature,
+):
+    """Helper to assert feature IDs for deferred credential provider tests"""
+    assert len(ua_strings) == 3
+
+    # Request to fetch credentials should only register feature ids for the credential source
+    credential_source_feature_list = parse_registered_feature_ids(
+        ua_strings[0]
+    )
+    for feature in expected_source_features:
+        assert feature in credential_source_feature_list
+    assert expected_provider_feature not in credential_source_feature_list
+
+    # Original operation request should register feature ids for both the credential source and the provider
+    for i in [1, 2]:
+        operation_feature_list = parse_registered_feature_ids(ua_strings[i])
+        for feature in expected_source_features:
+            assert feature in operation_feature_list
+        assert expected_provider_feature in operation_feature_list
diff -pruN 2.23.6-1/tests/functional/botocore/test_discovery.py 2.31.35-1/tests/functional/botocore/test_discovery.py
--- 2.23.6-1/tests/functional/botocore/test_discovery.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_discovery.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,19 +12,22 @@
 # language governing permissions and limitations under the License.
 import os
 
-from tests import ClientHTTPStubber, temporary_file
-from tests.functional.botocore import FunctionalSessionTest
-
 import botocore
-from botocore.config import Config
 from botocore.compat import json
+from botocore.config import Config
 from botocore.discovery import EndpointDiscoveryRequired
-from botocore.exceptions import ClientError, InvalidEndpointDiscoveryConfigurationError
+from botocore.exceptions import (
+    ClientError,
+    InvalidEndpointDiscoveryConfigurationError,
+)
+
+from tests import ClientHTTPStubber, temporary_file
+from tests.functional.botocore import FunctionalSessionTest
 
 
 class TestEndpointDiscovery(FunctionalSessionTest):
     def setUp(self):
-        super(TestEndpointDiscovery, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
 
     def create_client(
@@ -32,7 +35,7 @@ class TestEndpointDiscovery(FunctionalSe
         service_name='dynamodb',
         region=None,
         config=None,
-        endpoint_url=None
+        endpoint_url=None,
     ):
         if region is None:
             region = self.region
@@ -45,10 +48,12 @@ class TestEndpointDiscovery(FunctionalSe
 
     def add_describe_endpoints_response(self, stubber, discovered_endpoint):
         response = {
-            'Endpoints': [{
-                'Address': discovered_endpoint,
-                'CachePeriodInMinutes': 1,
-            }]
+            'Endpoints': [
+                {
+                    'Address': discovered_endpoint,
+                    'CachePeriodInMinutes': 1,
+                }
+            ]
         }
         response_body = json.dumps(response).encode()
         stubber.add_response(status=200, body=response_body)
@@ -56,8 +61,7 @@ class TestEndpointDiscovery(FunctionalSe
 
     def set_endpoint_discovery_config_file(self, fileobj, config_val):
         fileobj.write(
-            '[default]\n'
-            'endpoint_discovery_enabled=%s\n' % config_val
+            '[default]\n' f'endpoint_discovery_enabled={config_val}\n'
         )
         fileobj.flush()
         self.environ['AWS_CONFIG_FILE'] = fileobj.name
@@ -70,8 +74,7 @@ class TestEndpointDiscovery(FunctionalSe
     def assert_discovery_skipped(self, stubber, operation):
         self.assertEqual(len(stubber.requests), 1)
         self.assertEqual(
-            stubber.requests[0].headers.get('X-Amz-Target'),
-            operation
+            stubber.requests[0].headers.get('X-Amz-Target'), operation
         )
 
     def assert_endpoint_used(self, actual_url, expected_url):
@@ -87,7 +90,6 @@ class TestEndpointDiscovery(FunctionalSe
             self.assert_endpoint_discovery_used(stubber, discovered_endpoint)
 
     def test_endpoint_discovery_with_invalid_endpoint(self):
-        discovered_endpoint = 'https://discovered.domain'
         response = {
             'Error': {
                 'Code': 'InvalidEndpointException',
@@ -120,7 +122,9 @@ class TestEndpointDiscovery(FunctionalSe
 
     def test_endpoint_discovery_default_required_endpoint(self):
         discovered_endpoint = "https://discovered.domain"
-        client, http_stubber = self.create_client(service_name="test-discovery-endpoint")
+        client, http_stubber = self.create_client(
+            service_name="test-discovery-endpoint"
+        )
         with http_stubber as stubber:
             self.add_describe_endpoints_response(stubber, discovered_endpoint)
             client.test_discovery_required(Foo="bar")
@@ -156,8 +160,7 @@ class TestEndpointDiscovery(FunctionalSe
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_required(Foo="bar")
             self.assert_discovery_skipped(
-                stubber,
-                b"test-discovery-endpoint.TestDiscoveryRequired"
+                stubber, b"test-discovery-endpoint.TestDiscoveryRequired"
             )
             self.assert_endpoint_used(stubber.requests[0].url, endpoint)
 
@@ -167,14 +170,13 @@ class TestEndpointDiscovery(FunctionalSe
         client, http_stubber = self.create_client(
             service_name="test-discovery-endpoint",
             config=config,
-            endpoint_url=endpoint
+            endpoint_url=endpoint,
         )
         with http_stubber as stubber:
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_required(Foo="bar")
             self.assert_discovery_skipped(
-                stubber,
-                b"test-discovery-endpoint.TestDiscoveryRequired"
+                stubber, b"test-discovery-endpoint.TestDiscoveryRequired"
             )
             self.assert_endpoint_used(stubber.requests[0].url, endpoint)
 
@@ -184,14 +186,13 @@ class TestEndpointDiscovery(FunctionalSe
         client, http_stubber = self.create_client(
             service_name="test-discovery-endpoint",
             config=config,
-            endpoint_url=endpoint
+            endpoint_url=endpoint,
         )
         with http_stubber as stubber:
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_required(Foo="bar")
             self.assert_discovery_skipped(
-                stubber,
-                b"test-discovery-endpoint.TestDiscoveryRequired"
+                stubber, b"test-discovery-endpoint.TestDiscoveryRequired"
             )
             self.assert_endpoint_used(stubber.requests[0].url, endpoint)
 
@@ -204,8 +205,7 @@ class TestEndpointDiscovery(FunctionalSe
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_optional(Foo="bar")
             self.assert_discovery_skipped(
-                stubber,
-                b"test-discovery-endpoint.TestDiscoveryOptional"
+                stubber, b"test-discovery-endpoint.TestDiscoveryOptional"
             )
             self.assert_endpoint_used(stubber.requests[0].url, endpoint)
 
@@ -215,7 +215,7 @@ class TestEndpointDiscovery(FunctionalSe
         client, http_stubber = self.create_client(
             service_name="test-discovery-endpoint",
             config=config,
-            endpoint_url=endpoint
+            endpoint_url=endpoint,
         )
         with http_stubber as stubber:
             stubber.add_response(status=200, body=b'{}')
@@ -227,7 +227,9 @@ class TestEndpointDiscovery(FunctionalSe
             self.assert_endpoint_used(stubber.requests[0].url, endpoint)
 
     def test_endpoint_discovery_default_optional_endpoint(self):
-        client, http_stubber = self.create_client(service_name="test-discovery-endpoint")
+        client, http_stubber = self.create_client(
+            service_name="test-discovery-endpoint"
+        )
         with http_stubber as stubber:
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_optional(Foo="bar")
@@ -282,8 +284,7 @@ class TestEndpointDiscovery(FunctionalSe
             stubber.add_response(status=200, body=b'{}')
             client.test_discovery_optional(Foo="bar")
             self.assert_discovery_skipped(
-                stubber,
-                b"test-discovery-endpoint.TestDiscoveryOptional"
+                stubber, b"test-discovery-endpoint.TestDiscoveryOptional"
             )
 
     def test_endpoint_discovery_optional_with_env_var_enabled(self):
@@ -315,9 +316,13 @@ class TestEndpointDiscovery(FunctionalSe
                 service_name="test-discovery-endpoint"
             )
             with http_stubber as stubber:
-                self.add_describe_endpoints_response(stubber, discovered_endpoint)
+                self.add_describe_endpoints_response(
+                    stubber, discovered_endpoint
+                )
                 client.test_discovery_required(Foo="bar")
-                self.assert_endpoint_discovery_used(stubber, discovered_endpoint)
+                self.assert_endpoint_discovery_used(
+                    stubber, discovered_endpoint
+                )
 
     def test_endpoint_discovery_with_config_file_enabled_lowercase(self):
         with temporary_file('w') as f:
@@ -327,9 +332,13 @@ class TestEndpointDiscovery(FunctionalSe
                 service_name="test-discovery-endpoint"
             )
             with http_stubber as stubber:
-                self.add_describe_endpoints_response(stubber, discovered_endpoint)
+                self.add_describe_endpoints_response(
+                    stubber, discovered_endpoint
+                )
                 client.test_discovery_required(Foo="bar")
-                self.assert_endpoint_discovery_used(stubber, discovered_endpoint)
+                self.assert_endpoint_discovery_used(
+                    stubber, discovered_endpoint
+                )
 
     def test_endpoint_discovery_with_config_file_disabled(self):
         with temporary_file('w') as f:
@@ -338,7 +347,9 @@ class TestEndpointDiscovery(FunctionalSe
             client, http_stubber = self.create_client(
                 service_name="test-discovery-endpoint"
             )
-            self.add_describe_endpoints_response(http_stubber, discovered_endpoint)
+            self.add_describe_endpoints_response(
+                http_stubber, discovered_endpoint
+            )
             with self.assertRaises(EndpointDiscoveryRequired):
                 client.test_discovery_required(Foo="bar")
 
@@ -350,6 +361,10 @@ class TestEndpointDiscovery(FunctionalSe
                 service_name="test-discovery-endpoint"
             )
             with http_stubber as stubber:
-                self.add_describe_endpoints_response(stubber, discovered_endpoint)
+                self.add_describe_endpoints_response(
+                    stubber, discovered_endpoint
+                )
                 client.test_discovery_required(Foo="bar")
-                self.assert_endpoint_discovery_used(stubber, discovered_endpoint)
+                self.assert_endpoint_discovery_used(
+                    stubber, discovered_endpoint
+                )
diff -pruN 2.23.6-1/tests/functional/botocore/test_docdb.py 2.31.35-1/tests/functional/botocore/test_docdb.py
--- 2.23.6-1/tests/functional/botocore/test_docdb.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_docdb.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,15 +13,14 @@
 from contextlib import contextmanager
 
 import botocore.session
-from tests import BaseSessionTest, ClientHTTPStubber
 from botocore.stub import Stubber
-from tests import unittest
 
+from tests import BaseSessionTest, ClientHTTPStubber, unittest
 
-class TestDocDBPresignUrlInjection(BaseSessionTest):
 
+class TestDocDBPresignUrlInjection(BaseSessionTest):
     def setUp(self):
-        super(TestDocDBPresignUrlInjection, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('docdb', 'us-west-2')
         self.http_stubber = ClientHTTPStubber(self.client)
 
@@ -35,7 +34,7 @@ class TestDocDBPresignUrlInjection(BaseS
             'Engine': 'docdb',
             'SourceRegion': 'us-east-1',
             'MasterUsername': 'master',
-            'MasterUserPassword': 'mypassword'
+            'MasterUserPassword': 'mypassword',
         }
         response_body = (
             b'<CreateDBClusterResponse>'
@@ -53,7 +52,7 @@ class TestDocDBPresignUrlInjection(BaseS
         params = {
             'SourceDBClusterSnapshotIdentifier': 'source-db',
             'TargetDBClusterSnapshotIdentifier': 'target-db',
-            'SourceRegion': 'us-east-1'
+            'SourceRegion': 'us-east-1',
         }
         response_body = (
             b'<CopyDBClusterSnapshotResponse>'
diff -pruN 2.23.6-1/tests/functional/botocore/test_dsql.py 2.31.35-1/tests/functional/botocore/test_dsql.py
--- 2.23.6-1/tests/functional/botocore/test_dsql.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_dsql.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import datetime
-import pytest
 
+import botocore.auth
+import pytest
 from dateutil.tz import tzutc
 
-import botocore.auth
 from tests import FreezeTime
 
 HOSTNAME = "peccy.dsql.us-east-1.on.aws"
diff -pruN 2.23.6-1/tests/functional/botocore/test_dynamodb.py 2.31.35-1/tests/functional/botocore/test_dynamodb.py
--- 2.23.6-1/tests/functional/botocore/test_dynamodb.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_dynamodb.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import BaseSessionTest, ClientHTTPStubber
-
-from botocore.config import Config
 from botocore.compat import json
+from botocore.config import Config
+
+from tests import BaseSessionTest, ClientHTTPStubber
 
 
 class TestDynamoDBEndpointDiscovery(BaseSessionTest):
     def setUp(self):
-        super(TestDynamoDBEndpointDiscovery, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.config = Config(endpoint_discovery_enabled=True)
         self.create_client()
@@ -32,10 +32,12 @@ class TestDynamoDBEndpointDiscovery(Base
     def test_dynamodb_endpoint_discovery_enabled(self):
         discovered_endpoint = 'https://discovered.domain'
         response = {
-            'Endpoints': [{
-                'Address': discovered_endpoint,
-                'CachePeriodInMinutes': 1,
-            }]
+            'Endpoints': [
+                {
+                    'Address': discovered_endpoint,
+                    'CachePeriodInMinutes': 1,
+                }
+            ]
         }
         response_body = json.dumps(response).encode()
         with self.http_stubber as stubber:
diff -pruN 2.23.6-1/tests/functional/botocore/test_ec2.py 2.31.35-1/tests/functional/botocore/test_ec2.py
--- 2.23.6-1/tests/functional/botocore/test_ec2.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_ec2.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,11 @@
 # language governing permissions and limitations under the License.
 import datetime
 
-from tests import mock, unittest, ClientHTTPStubber, BaseSessionTest
-from botocore.compat import parse_qs, urlparse
-from botocore.stub import Stubber, ANY
 import botocore.session
+from botocore.compat import parse_qs, urlparse
+from botocore.stub import ANY, Stubber
+
+from tests import BaseSessionTest, ClientHTTPStubber, mock, unittest
 
 
 class TestIdempotencyToken(unittest.TestCase):
@@ -23,8 +24,7 @@ class TestIdempotencyToken(unittest.Test
         self.function_name = 'purchase_scheduled_instances'
         self.region = 'us-west-2'
         self.session = botocore.session.get_session()
-        self.client = self.session.create_client(
-            'ec2', self.region)
+        self.client = self.session.create_client('ec2', self.region)
         self.stubber = Stubber(self.client)
         self.service_response = {}
         self.params_seen = []
@@ -33,7 +33,8 @@ class TestIdempotencyToken(unittest.Test
         self.client.meta.events.register_first(
             'before-call.*.*',
             self.collect_params,
-            unique_id='TestIdempotencyToken')
+            unique_id='TestIdempotencyToken',
+        )
 
     def collect_params(self, model, params, *args, **kwargs):
         self.params_seen.extend(params['body'].keys())
@@ -41,40 +42,46 @@ class TestIdempotencyToken(unittest.Test
     def test_provided_idempotency_token(self):
         expected_params = {
             'PurchaseRequests': [
-                {'PurchaseToken': 'foo',
-                 'InstanceCount': 123}],
-            'ClientToken': ANY
+                {'PurchaseToken': 'foo', 'InstanceCount': 123}
+            ],
+            'ClientToken': ANY,
         }
         self.stubber.add_response(
-            self.function_name, self.service_response, expected_params)
+            self.function_name, self.service_response, expected_params
+        )
 
         with self.stubber:
             self.client.purchase_scheduled_instances(
-                PurchaseRequests=[{'PurchaseToken': 'foo',
-                                   'InstanceCount': 123}],
-                ClientToken='foobar')
+                PurchaseRequests=[
+                    {'PurchaseToken': 'foo', 'InstanceCount': 123}
+                ],
+                ClientToken='foobar',
+            )
             self.assertIn('ClientToken', self.params_seen)
 
     def test_insert_idempotency_token(self):
         expected_params = {
             'PurchaseRequests': [
-                {'PurchaseToken': 'foo',
-                 'InstanceCount': 123}],
+                {'PurchaseToken': 'foo', 'InstanceCount': 123}
+            ],
         }
 
         self.stubber.add_response(
-            self.function_name, self.service_response, expected_params)
+            self.function_name, self.service_response, expected_params
+        )
 
         with self.stubber:
             self.client.purchase_scheduled_instances(
-                PurchaseRequests=[{'PurchaseToken': 'foo',
-                                   'InstanceCount': 123}])
+                PurchaseRequests=[
+                    {'PurchaseToken': 'foo', 'InstanceCount': 123}
+                ]
+            )
             self.assertIn('ClientToken', self.params_seen)
 
 
 class TestCopySnapshotCustomization(BaseSessionTest):
     def setUp(self):
-        super(TestCopySnapshotCustomization, self).setUp()
+        super().setUp()
         self.session = botocore.session.get_session()
         self.client = self.session.create_client('ec2', 'us-east-1')
         self.http_stubber = ClientHTTPStubber(self.client)
@@ -87,14 +94,15 @@ class TestCopySnapshotCustomization(Base
         )
         self.now = datetime.datetime(2011, 9, 9, 23, 36)
         self.datetime_patch = mock.patch.object(
-            botocore.auth.datetime, 'datetime',
-            mock.Mock(wraps=datetime.datetime)
+            botocore.auth.datetime,
+            'datetime',
+            mock.Mock(wraps=datetime.datetime),
         )
         self.mocked_datetime = self.datetime_patch.start()
         self.mocked_datetime.utcnow.return_value = self.now
 
     def tearDown(self):
-        super(TestCopySnapshotCustomization, self).tearDown()
+        super().tearDown()
         self.datetime_patch.stop()
 
     def add_copy_snapshot_response(self, snapshot_id):
diff -pruN 2.23.6-1/tests/functional/botocore/test_endpoint_rulesets.py 2.31.35-1/tests/functional/botocore/test_endpoint_rulesets.py
--- 2.23.6-1/tests/functional/botocore/test_endpoint_rulesets.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_endpoint_rulesets.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,6 @@ from functools import lru_cache
 from pathlib import Path
 
 import pytest
-
 from botocore import xform_name
 from botocore.config import Config
 from botocore.endpoint_provider import EndpointProvider
@@ -27,6 +26,7 @@ from botocore.exceptions import (
 )
 from botocore.loaders import Loader
 from botocore.parsers import ResponseParserError
+
 from tests import ClientHTTPStubber
 
 ENDPOINT_TESTDATA_DIR = Path(__file__).parent / 'endpoint-rules'
@@ -48,13 +48,13 @@ def partitions():
     return LOADER.load_data('partitions')
 
 
-@lru_cache()
+@lru_cache
 def get_endpoint_tests_for_service(service_name):
     file_path = ENDPOINT_TESTDATA_DIR / service_name / 'endpoint-tests-1.json'
     if not file_path.is_file():
         raise FileNotFoundError(
             f'Cannot find endpoint tests file for "{service_name}" at '
-            'path {file_path}'
+            f'path {file_path}'
         )
     with file_path.open('r') as f:
         return json.load(f)
@@ -170,11 +170,6 @@ def iter_e2e_test_cases_that_produce(end
             expected_object = test['expect']
             if endpoints and 'endpoint' in expected_object:
                 expected_endpoint = expected_object['endpoint']
-                expected_props = expected_endpoint.get('properties', {})
-                expected_authschemes = [
-                    auth_scheme['name']
-                    for auth_scheme in expected_props.get('authSchemes', [])
-                ]
                 yield pytest.param(
                     service_name,
                     op_name,
diff -pruN 2.23.6-1/tests/functional/botocore/test_endpoints.py 2.31.35-1/tests/functional/botocore/test_endpoints.py
--- 2.23.6-1/tests/functional/botocore/test_endpoints.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_endpoints.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.session import get_session
 from botocore.utils import CLIENT_NAME_TO_HYPHENIZED_SERVICE_ID_OVERRIDES
 
-
 ENDPOINT_PREFIX_OVERRIDE = {
     # entry in endpoints.json -> actual endpoint prefix.
     # The autoscaling-* services actually send requests to the
@@ -82,11 +80,13 @@ def _computed_endpoint_prefixes():
         # Check for an override where we know that an entry
         # in the endpoints.json actually maps to a different endpoint
         # prefix.
-        endpoint_prefix = ENDPOINT_PREFIX_OVERRIDE.get(endpoint_prefix,
-                                                       endpoint_prefix)
+        endpoint_prefix = ENDPOINT_PREFIX_OVERRIDE.get(
+            endpoint_prefix, endpoint_prefix
+        )
         yield endpoint_prefix
 
 
+@pytest.mark.validates_models
 @pytest.mark.parametrize("endpoint_prefix", _computed_endpoint_prefixes())
 def test_endpoint_matches_service(known_endpoint_prefixes, endpoint_prefix):
     # We need to cross check all computed endpoints against our
@@ -103,6 +103,7 @@ def _available_services():
     return sorted(loader.list_available_services('service-2'))
 
 
+@pytest.mark.validates_models
 @pytest.mark.parametrize("service_name", _available_services())
 def test_client_name_matches_hyphenized_service_id(service_name):
     """Generates tests for each service to verify that the computed service
diff -pruN 2.23.6-1/tests/functional/botocore/test_eventbridge.py 2.31.35-1/tests/functional/botocore/test_eventbridge.py
--- 2.23.6-1/tests/functional/botocore/test_eventbridge.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_eventbridge.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,9 @@
 import json
 
 import pytest
-
 from botocore.config import Config
 from botocore.exceptions import InvalidEndpointConfigurationError
+
 from tests import BaseSessionTest, ClientHTTPStubber
 
 
@@ -18,7 +18,9 @@ class TestClientEvents(BaseSessionTest):
         client = self.session.create_client("events", region, **kwargs)
         return client
 
-    def create_stubbed_eventbridge_client(self, with_default_responses=False, **kwargs):
+    def create_stubbed_eventbridge_client(
+        self, with_default_responses=False, **kwargs
+    ):
         client = self.create_eventbridge_client(**kwargs)
         http_stubber = ClientHTTPStubber(client)
         http_stubber.start()
@@ -45,7 +47,9 @@ class TestClientEvents(BaseSessionTest):
     def _assert_multi_region_endpoint(self, request, endpoint_id, suffix=None):
         if suffix is None:
             suffix = "amazonaws.com"
-        assert request.url == f"https://{endpoint_id}.endpoint.events.{suffix}/"
+        assert (
+            request.url == f"https://{endpoint_id}.endpoint.events.{suffix}/"
+        )
 
     def _assert_sigv4a_headers(self, request):
         assert request.headers["x-amz-region-set"] == b"*"
@@ -65,7 +69,10 @@ class TestClientEvents(BaseSessionTest):
         )
         with stubber:
             client.put_events(**self._default_put_events_args())
-        assert stubber.requests[0].url == "https://events.us-east-1.amazonaws.com/"
+        assert (
+            stubber.requests[0].url
+            == "https://events.us-east-1.amazonaws.com/"
+        )
         assert b"EndpointId" not in stubber.requests[0].body
 
     def test_put_event_default_endpoint_explicit_configs(self):
@@ -78,7 +85,10 @@ class TestClientEvents(BaseSessionTest):
         )
         with stubber:
             client.put_events(**self._default_put_events_args())
-        assert stubber.requests[0].url == "https://events.us-east-1.amazonaws.com/"
+        assert (
+            stubber.requests[0].url
+            == "https://events.us-east-1.amazonaws.com/"
+        )
         assert b"EndpointId" not in stubber.requests[0].body
 
     def test_put_event_endpoint_id(self):
@@ -213,7 +223,10 @@ class TestClientEvents(BaseSessionTest):
 
         with stubber:
             client.put_events(**default_args)
-        assert stubber.requests[0].url == "https://events-fips.us-east-1.amazonaws.com/"
+        assert (
+            stubber.requests[0].url
+            == "https://events-fips.us-east-1.amazonaws.com/"
+        )
 
     def test_put_events_endpoint_id_fips(self):
         config = Config(use_dualstack_endpoint=False, use_fips_endpoint=True)
@@ -235,7 +248,9 @@ class TestClientEvents(BaseSessionTest):
 
         with stubber:
             client.put_events(**default_args)
-        assert stubber.requests[0].url == "https://events-fips.us-east-1.api.aws/"
+        assert (
+            stubber.requests[0].url == "https://events-fips.us-east-1.api.aws/"
+        )
 
     def test_put_events_endpoint_id_dualstack_fips(self):
         config = Config(use_dualstack_endpoint=True, use_fips_endpoint=True)
@@ -247,8 +262,9 @@ class TestClientEvents(BaseSessionTest):
 
         with pytest.raises(InvalidEndpointConfigurationError) as e:
             client.put_events(EndpointId=endpoint_id, **default_args)
-        assert "FIPS is not supported with EventBridge multi-region endpoints" in str(
-            e.value
+        assert (
+            "FIPS is not supported with EventBridge multi-region endpoints"
+            in str(e.value)
         )
 
     def test_put_events_default_gov_endpoint(self):
@@ -260,7 +276,10 @@ class TestClientEvents(BaseSessionTest):
 
         with stubber:
             client.put_events(**default_args)
-        assert stubber.requests[0].url == "https://events.us-iso-east-1.c2s.ic.gov/"
+        assert (
+            stubber.requests[0].url
+            == "https://events.us-iso-east-1.c2s.ic.gov/"
+        )
 
     def test_put_events_endpoint_id_gov(self):
         client, stubber = self.create_stubbed_eventbridge_client(
diff -pruN 2.23.6-1/tests/functional/botocore/test_events.py 2.31.35-1/tests/functional/botocore/test_events.py
--- 2.23.6-1/tests/functional/botocore/test_events.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_events.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, BaseSessionTest
+from tests import BaseSessionTest, mock
 
 
-class RecordingHandler(object):
+class RecordingHandler:
     def __init__(self):
         self.recorded_events = []
 
@@ -23,50 +23,55 @@ class RecordingHandler(object):
 
 class TestClientEvents(BaseSessionTest):
     def setUp(self):
-        super(TestClientEvents, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            'ec2', self.region)
+        self.client = self.session.create_client('ec2', self.region)
 
     def test_emit_response_received(self):
         recording_handler = RecordingHandler()
         self.client.meta.events.register(
-            'response-received.ec2.DescribeRegions', recording_handler.record)
+            'response-received.ec2.DescribeRegions', recording_handler.record
+        )
         with mock.patch(
-                'botocore.httpsession.URLLib3Session.send') as mock_send:
+            'botocore.httpsession.URLLib3Session.send'
+        ) as mock_send:
             response_body = (
                 b'<?xml version="1.0" ?>'
                 b'<DescribeRegionsResponse xmlns="">'
                 b'</DescribeRegionsResponse>'
             )
             mock_send.return_value = mock.Mock(
-                status_code=200, headers={}, content=response_body)
+                status_code=200, headers={}, content=response_body
+            )
             self.client.describe_regions()
         self.assertEqual(
             recording_handler.recorded_events,
             [
-                ('response-received.ec2.DescribeRegions',
-                 {
-                     'exception': None,
-                     'response_dict': {
-                         'body': response_body,
-                         'headers': {},
-                         'context': mock.ANY,
-                         'status_code': 200
-                     },
-                     'parsed_response': {
-                         'ResponseMetadata': mock.ANY},
-                     'context': mock.ANY
-                 })
-            ]
+                (
+                    'response-received.ec2.DescribeRegions',
+                    {
+                        'exception': None,
+                        'response_dict': {
+                            'body': response_body,
+                            'headers': {},
+                            'context': mock.ANY,
+                            'status_code': 200,
+                        },
+                        'parsed_response': {'ResponseMetadata': mock.ANY},
+                        'context': mock.ANY,
+                    },
+                )
+            ],
         )
 
     def test_emit_response_received_for_exception(self):
         recording_handler = RecordingHandler()
         self.client.meta.events.register(
-            'response-received.ec2.DescribeRegions', recording_handler.record)
+            'response-received.ec2.DescribeRegions', recording_handler.record
+        )
         with mock.patch(
-                'botocore.httpsession.URLLib3Session.send') as mock_send:
+            'botocore.httpsession.URLLib3Session.send'
+        ) as mock_send:
             raised_exception = RuntimeError('Unexpected exception')
             mock_send.side_effect = raised_exception
             with self.assertRaises(RuntimeError):
@@ -74,12 +79,14 @@ class TestClientEvents(BaseSessionTest):
         self.assertEqual(
             recording_handler.recorded_events,
             [
-                ('response-received.ec2.DescribeRegions',
-                 {
-                     'exception': raised_exception,
-                     'response_dict': None,
-                     'parsed_response': None,
-                     'context': mock.ANY
-                 })
-            ]
+                (
+                    'response-received.ec2.DescribeRegions',
+                    {
+                        'exception': raised_exception,
+                        'response_dict': None,
+                        'parsed_response': None,
+                        'context': mock.ANY,
+                    },
+                )
+            ],
         )
diff -pruN 2.23.6-1/tests/functional/botocore/test_h2_required.py 2.31.35-1/tests/functional/botocore/test_h2_required.py
--- 2.23.6-1/tests/functional/botocore/test_h2_required.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_h2_required.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.session import get_session
 
 _H2_REQUIRED = object()
@@ -20,8 +19,11 @@ _KNOWN_SERVICES = {
     'qbusiness': ['Chat'],
     'kinesis': ['SubscribeToShard'],
     'lexv2-runtime': ['StartConversation'],
+     # Added only to keep a record of this feature being incompatible
+     'bedrock-runtime': ['InvokeModelWithBidirectionalStream'],
 }
 
+
 def _all_test_cases():
     session = get_session()
     loader = session.get_component('data_loader')
@@ -32,7 +34,9 @@ def _all_test_cases():
 
     for service in services:
         service_model = session.get_service_model(service)
-        h2_config = service_model.metadata.get('protocolSettings', {}).get('h2')
+        h2_config = service_model.metadata.get('protocolSettings', {}).get(
+            'h2'
+        )
         if h2_config == 'required':
             h2_services.append(service)
         elif h2_config == 'eventstream':
@@ -47,16 +51,18 @@ def _all_test_cases():
 H2_SERVICES, H2_OPERATIONS = _all_test_cases()
 
 
+@pytest.mark.validates_models
 @pytest.mark.parametrize("h2_service", H2_SERVICES)
 def test_all_uses_of_h2_are_known(h2_service):
     # Validates that a service that requires HTTP 2 for all operations is known
-    message = 'Found unknown HTTP 2 service: %s' % h2_service
+    message = f'Found unknown HTTP 2 service: {h2_service}'
     assert _KNOWN_SERVICES.get(h2_service) is _H2_REQUIRED, message
 
 
+@pytest.mark.validates_models
 @pytest.mark.parametrize("h2_service, operation", H2_OPERATIONS)
 def test_all_h2_operations_are_known(h2_service, operation):
     # Validates that an operation that requires HTTP 2 is known
     known_operations = _KNOWN_SERVICES.get(h2_service, [])
-    message = 'Found unknown HTTP 2 operation: %s.%s' % (h2_service, operation)
+    message = f'Found unknown HTTP 2 operation: {h2_service}.{operation}'
     assert operation in known_operations, message
diff -pruN 2.23.6-1/tests/functional/botocore/test_history.py 2.31.35-1/tests/functional/botocore/test_history.py
--- 2.23.6-1/tests/functional/botocore/test_history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_history.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,8 @@
 from contextlib import contextmanager
 
+from botocore.history import BaseHistoryHandler, get_global_history_recorder
+
 from tests import BaseSessionTest, ClientHTTPStubber
-from botocore.history import BaseHistoryHandler
-from botocore.history import get_global_history_recorder
 
 
 class RecordingHandler(BaseHistoryHandler):
@@ -14,26 +14,25 @@ class RecordingHandler(BaseHistoryHandle
 
 
 class TestRecordStatementsInjections(BaseSessionTest):
-
     def setUp(self):
-        super(TestRecordStatementsInjections, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('s3', 'us-west-2')
         self.http_stubber = ClientHTTPStubber(self.client)
         self.s3_response_body = (
-            '<ListAllMyBucketsResult '
-            '    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
-            '  <Owner>'
-            '    <ID>d41d8cd98f00b204e9800998ecf8427e</ID>'
-            '    <DisplayName>foo</DisplayName>'
-            '  </Owner>'
-            '  <Buckets>'
-            '    <Bucket>'
-            '      <Name>bar</Name>'
-            '      <CreationDate>1912-06-23T22:57:02.000Z</CreationDate>'
-            '    </Bucket>'
-            '  </Buckets>'
-            '</ListAllMyBucketsResult>'
-        ).encode('utf-8')
+            b'<ListAllMyBucketsResult '
+            b'    xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
+            b'  <Owner>'
+            b'    <ID>d41d8cd98f00b204e9800998ecf8427e</ID>'
+            b'    <DisplayName>foo</DisplayName>'
+            b'  </Owner>'
+            b'  <Buckets>'
+            b'    <Bucket>'
+            b'      <Name>bar</Name>'
+            b'      <CreationDate>1912-06-23T22:57:02.000Z</CreationDate>'
+            b'    </Bucket>'
+            b'  </Buckets>'
+            b'</ListAllMyBucketsResult>'
+        )
         self.recording_handler = RecordingHandler()
         history_recorder = get_global_history_recorder()
         history_recorder.enable()
@@ -41,8 +40,7 @@ class TestRecordStatementsInjections(Bas
 
     def _get_all_events_of_type(self, event_type):
         recorded_calls = self.recording_handler.recorded_calls
-        matching = [call for call in recorded_calls
-                    if call[0] == event_type]
+        matching = [call for call in recorded_calls if call[0] == event_type]
         return matching
 
     def test_does_record_api_call(self):
@@ -54,11 +52,10 @@ class TestRecordStatementsInjections(Bas
         self.assertEqual(len(api_call_events), 1)
         event = api_call_events[0]
         event_type, payload, source = event
-        self.assertEqual(payload, {
-                'operation': u'ListBuckets',
-                'params': {},
-                'service': 's3'
-        })
+        self.assertEqual(
+            payload,
+            {'operation': 'ListBuckets', 'params': {}, 'service': 's3'},
+        )
         self.assertEqual(source, 'BOTOCORE')
 
     def test_does_record_http_request(self):
@@ -72,13 +69,17 @@ class TestRecordStatementsInjections(Bas
         event_type, payload, source = event
 
         method = payload['method']
-        self.assertEqual(method, u'GET')
+        self.assertEqual(method, 'GET')
 
         # The header values vary too much per request to verify them here.
         # Instead just check the presense of each expected header.
         headers = payload['headers']
-        for expected_header in ['Authorization', 'User-Agent', 'X-Amz-Date',
-                                'X-Amz-Content-SHA256']:
+        for expected_header in [
+            'Authorization',
+            'User-Agent',
+            'X-Amz-Date',
+            'X-Amz-Content-SHA256',
+        ]:
             self.assertIn(expected_header, headers)
 
         body = payload['body']
@@ -102,13 +103,15 @@ class TestRecordStatementsInjections(Bas
         event = http_response_events[0]
         event_type, payload, source = event
 
-        self.assertEqual(payload, {
+        self.assertEqual(
+            payload,
+            {
                 'status_code': 200,
                 'headers': {},
                 'streaming': False,
                 'body': self.s3_response_body,
-                'context': {'operation_name': 'ListBuckets'}
-            }
+                'context': {'operation_name': 'ListBuckets'},
+            },
         )
         self.assertEqual(source, 'BOTOCORE')
 
@@ -118,7 +121,8 @@ class TestRecordStatementsInjections(Bas
             self.client.list_buckets()
 
         parsed_response_events = self._get_all_events_of_type(
-            'PARSED_RESPONSE')
+            'PARSED_RESPONSE'
+        )
         self.assertEqual(len(parsed_response_events), 1)
         event = parsed_response_events[0]
         event_type, payload, source = event
@@ -128,10 +132,10 @@ class TestRecordStatementsInjections(Bas
         # assert the interesting bits since mock can only assert if the args
         # all match exactly.
         owner = payload['Owner']
-        self.assertEqual(owner, {
-            'DisplayName': 'foo',
-            'ID': 'd41d8cd98f00b204e9800998ecf8427e'
-        })
+        self.assertEqual(
+            owner,
+            {'DisplayName': 'foo', 'ID': 'd41d8cd98f00b204e9800998ecf8427e'},
+        )
 
         buckets = payload['Buckets']
         self.assertEqual(len(buckets), 1)
@@ -139,8 +143,7 @@ class TestRecordStatementsInjections(Bas
         self.assertEqual(bucket['Name'], 'bar')
 
         metadata = payload['ResponseMetadata']
-        self.assertEqual(metadata, {
-            'HTTPHeaders': {},
-            'HTTPStatusCode': 200,
-            'RetryAttempts': 0
-        })
+        self.assertEqual(
+            metadata,
+            {'HTTPHeaders': {}, 'HTTPStatusCode': 200, 'RetryAttempts': 0},
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/test_httpchecksum.py 2.31.35-1/tests/functional/botocore/test_httpchecksum.py
--- 2.23.6-1/tests/functional/botocore/test_httpchecksum.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_httpchecksum.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,14 @@
 
 
 import pytest
-
+from botocore.config import Config
 from botocore.exceptions import FlexibleChecksumError
+
 from tests import ClientHTTPStubber, patch_load_service_model
+from tests.functional.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
 
 TEST_CHECKSUM_SERVICE_MODEL = {
     "version": "2.0",
@@ -148,7 +153,7 @@ TEST_CHECKSUM_RULESET = {
 }
 
 
-def setup_test_client(patched_session, monkeypatch):
+def setup_test_client(patched_session, monkeypatch, config=None):
     patch_load_service_model(
         patched_session,
         monkeypatch,
@@ -156,8 +161,7 @@ def setup_test_client(patched_session, m
         TEST_CHECKSUM_RULESET,
     )
     return patched_session.create_client(
-        "testservice",
-        region_name="us-west-2",
+        "testservice", region_name="us-west-2", config=config
     )
 
 
@@ -523,4 +527,90 @@ def test_unsuccessful_streaming_response
             response_headers[f'x-amz-checksum-{checksum_algorithm.lower()}'],
             expected_checksum,
         )
-        assert str(expected_error.value) == error_msg
\ No newline at end of file
+        assert str(expected_error.value) == error_msg
+
+
+def _checksum_user_agent_feature_id_cases():
+    request_payload = "Hello world"
+    return [
+        (None, None, None, request_payload, ["W", "b", "Z"]),
+        (
+            "CRC32",
+            "when_required",
+            "when_required",
+            request_payload,
+            ["U", "a", "c"],
+        ),
+        (
+            "SHA1",
+            "when_supported",
+            "when_supported",
+            request_payload,
+            ["X", "Z", "b"],
+        ),
+        (
+            "SHA256",
+            "when_supported",
+            "when_required",
+            request_payload,
+            ["Y", "Z", "c"],
+        ),
+        (
+            "SHA1",
+            "when_required",
+            "when_supported",
+            request_payload,
+            ["X", "a", "b"],
+        ),
+        (
+            "CRC32C",
+            None,
+            None,
+            request_payload,
+            ["V", "Z", 'b'],
+        ),
+        (
+            "CRC64NVME",
+            None,
+            "when_required",
+            request_payload,
+            ["W", "Z", "c"],
+        ),
+    ]
+
+
+@pytest.mark.parametrize(
+    "checksum_algorithm, checksum_calculation, checksum_validation, request_payload, expected_feature_ids",
+    _checksum_user_agent_feature_id_cases(),
+)
+def test_user_agent_has_checksum_request_feature_id(
+    patched_session,
+    monkeypatch,
+    checksum_algorithm,
+    checksum_calculation,
+    checksum_validation,
+    request_payload,
+    expected_feature_ids,
+):
+    client = setup_test_client(
+        patched_session,
+        monkeypatch,
+        config=Config(
+            request_checksum_calculation=checksum_calculation,
+            response_checksum_validation=checksum_validation,
+        ),
+    )
+
+    with ClientHTTPStubber(client, strict=True) as http_stubber:
+        http_stubber.add_response(
+            status=200,
+            body=b"<response/>",
+        )
+        operation_kwargs = {"body": request_payload}
+        if checksum_algorithm:
+            operation_kwargs["checksumAlgorithm"] = checksum_algorithm
+        client.http_checksum_streaming_operation(**operation_kwargs)
+    ua_string = get_captured_ua_strings(http_stubber)[0]
+    feature_list = parse_registered_feature_ids(ua_string)
+    for feature_id in expected_feature_ids:
+        assert feature_id in feature_list
diff -pruN 2.23.6-1/tests/functional/botocore/test_importexport.py 2.31.35-1/tests/functional/botocore/test_importexport.py
--- 2.23.6-1/tests/functional/botocore/test_importexport.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_importexport.py	2025-11-12 19:17:29.000000000 +0000
@@ -39,13 +39,13 @@ class TestImportexport(BaseSessionTest):
             b"</CancelJobOutput>"
         )
 
-        # Confirm we've ignored the model signatureVersion and chosen v4
-        assert client.meta.config.signature_version == "v4"
+        # Note that client.meta.config.signature_version still returns "v2"
+        # since the "choose-signer" hook doesn't run until later
         with stubber:
             stubber.add_response(body=importexport_response)
             client.cancel_job(JobId="12345")
 
-        # Validate we actually signed with sigv4
+        # So validate we actually signed with sigv4
         auth_header = stubber.requests[0].headers.get('Authorization', '')
         assert auth_header.startswith(b"AWS4-HMAC-SHA256")
         assert b"aws4_request" in auth_header
diff -pruN 2.23.6-1/tests/functional/botocore/test_iot_data.py 2.31.35-1/tests/functional/botocore/test_iot_data.py
--- 2.23.6-1/tests/functional/botocore/test_iot_data.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_iot_data.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import sys
-from tests import unittest, mock, BaseSessionTest
 
 from botocore.exceptions import UnsupportedTLSVersionWarning
 
+from tests import BaseSessionTest, mock, unittest
+
 
 class TestOpensslVersion(BaseSessionTest):
     def test_incompatible_openssl_version(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_kinesis.py 2.31.35-1/tests/functional/botocore/test_kinesis.py
--- 2.23.6-1/tests/functional/botocore/test_kinesis.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_kinesis.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,12 +14,13 @@ import json
 import time
 from base64 import b64decode
 from uuid import uuid4
-from tests import unittest, BaseSessionTest, ClientHTTPStubber
+
+from tests import BaseSessionTest, ClientHTTPStubber, unittest
 
 
 class TestKinesisListStreams(BaseSessionTest):
     def setUp(self):
-        super(TestKinesisListStreams, self).setUp()
+        super().setUp()
         self.stream_name = "kinesis-test-stream"
         self.region = "us-east-1"
         self.client = self.session.create_client("kinesis", self.region)
@@ -38,15 +39,15 @@ class TestKinesisListStreams(BaseSession
         unique_data = str(uuid4())
         with self.http_stubber as stub:
             self.client.put_record(
-                StreamName=self.stream_name, PartitionKey="foo", Data=unique_data
+                StreamName=self.stream_name,
+                PartitionKey="foo",
+                Data=unique_data,
             )
             self.assertEqual(len(stub.requests), 1)
             request = json.loads(stub.requests[0].body.decode("utf-8"))
             self.assertEqual(request["StreamName"], self.stream_name)
             self.assertEqual(request["PartitionKey"], "foo")
-            self.assert_base64encoded_str_equals(
-                request["Data"], unique_data
-            )
+            self.assert_base64encoded_str_equals(request["Data"], unique_data)
 
     def test_can_put_records_single_blob(self):
         unique_data = str(uuid4())
@@ -62,9 +63,7 @@ class TestKinesisListStreams(BaseSession
 
             record = request["Records"][0]
             self.assertEqual(record["PartitionKey"], "foo")
-            self.assert_base64encoded_str_equals(
-                record["Data"], unique_data
-            )
+            self.assert_base64encoded_str_equals(record["Data"], unique_data)
 
     def test_can_put_records_multiple_blob(self):
         with self.http_stubber as stub:
diff -pruN 2.23.6-1/tests/functional/botocore/test_lex.py 2.31.35-1/tests/functional/botocore/test_lex.py
--- 2.23.6-1/tests/functional/botocore/test_lex.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_lex.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,12 @@
 # language governing permissions and limitations under the License.
 from datetime import datetime
 
-from tests import mock, BaseSessionTest, ClientHTTPStubber
+from tests import BaseSessionTest, ClientHTTPStubber, mock
 
 
 class TestLex(BaseSessionTest):
     def setUp(self):
-        super(TestLex, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.client = self.session.create_client('lex-runtime', self.region)
         self.http_stubber = ClientHTTPStubber(self.client)
@@ -28,7 +28,7 @@ class TestLex(BaseSessionTest):
             'botAlias': 'bar',
             'userId': 'baz',
             'contentType': 'application/octet-stream',
-            'inputStream': b''
+            'inputStream': b'',
         }
 
         timestamp = datetime(2017, 3, 22, 0, 0)
@@ -60,7 +60,6 @@ class TestLex(BaseSessionTest):
 
 
 class TestLexV2(BaseSessionTest):
-
     def test_start_conversation(self):
         """StartConversation operation removed due to h2 requirement"""
         lexv2 = self.session.create_client('lexv2-runtime', 'us-west-2')
diff -pruN 2.23.6-1/tests/functional/botocore/test_loaders.py 2.31.35-1/tests/functional/botocore/test_loaders.py
--- 2.23.6-1/tests/functional/botocore/test_loaders.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_loaders.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,8 @@ import os
 import shutil
 
 from botocore import loaders
-from tests import unittest, temporary_file
+
+from tests import temporary_file, unittest
 
 
 class TestLoaderAllowsDataPathOverride(unittest.TestCase):
@@ -28,10 +29,11 @@ class TestLoaderAllowsDataPathOverride(u
 
     def test_can_override_session(self):
         with temporary_file('w') as f:
-            # We're going to override _retry.json in 
+            # We're going to override _retry.json in
             # botocore/data by setting our own data directory.
             override_name = self.create_file(
-                f, contents='{"foo": "bar"}', name='_retry.json')
+                f, contents='{"foo": "bar"}', name='_retry.json'
+            )
             new_data_path = os.path.dirname(override_name)
             loader = loaders.create_loader(search_path_string=new_data_path)
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_machinelearning.py 2.31.35-1/tests/functional/botocore/test_machinelearning.py
--- 2.23.6-1/tests/functional/botocore/test_machinelearning.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_machinelearning.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,10 +15,11 @@ from tests import BaseSessionTest, Clien
 
 class TestMachineLearning(BaseSessionTest):
     def setUp(self):
-        super(TestMachineLearning, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.client = self.session.create_client(
-            'machinelearning', self.region)
+            'machinelearning', self.region
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
 
     def test_predict(self):
@@ -28,7 +29,7 @@ class TestMachineLearning(BaseSessionTes
             self.client.predict(
                 MLModelId='ml-foo',
                 Record={'Foo': 'Bar'},
-                PredictEndpoint=custom_endpoint
+                PredictEndpoint=custom_endpoint,
             )
             sent_request = self.http_stubber.requests[0]
             self.assertEqual(sent_request.url, custom_endpoint)
diff -pruN 2.23.6-1/tests/functional/botocore/test_model_backcompat.py 2.31.35-1/tests/functional/botocore/test_model_backcompat.py
--- 2.23.6-1/tests/functional/botocore/test_model_backcompat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_model_backcompat.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 import os
 
 from botocore.session import Session
+
 from tests import ClientHTTPStubber
 from tests.functional.botocore import TEST_MODELS_DIR
 
@@ -43,17 +44,22 @@ def test_old_model_continues_to_work():
     # 'custom-acm' to ensure we're loading our version of the model and
     # not the built in one.
     client = session.create_client(
-        'custom-acm', region_name='us-west-2',
-        aws_access_key_id='foo', aws_secret_access_key='bar',
+        'custom-acm',
+        region_name='us-west-2',
+        aws_access_key_id='foo',
+        aws_secret_access_key='bar',
     )
     with ClientHTTPStubber(client) as stubber:
         stubber.add_response(
             url='https://acm.us-west-2.amazonaws.com/',
-            headers={'x-amzn-RequestId': 'abcd',
-                     'Date': 'Fri, 26 Oct 2018 01:46:30 GMT',
-                     'Content-Length': '29',
-                     'Content-Type': 'application/x-amz-json-1.1'},
-            body=b'{"CertificateSummaryList":[]}')
+            headers={
+                'x-amzn-RequestId': 'abcd',
+                'Date': 'Fri, 26 Oct 2018 01:46:30 GMT',
+                'Content-Length': '29',
+                'Content-Type': 'application/x-amz-json-1.1',
+            },
+            body=b'{"CertificateSummaryList":[]}',
+        )
         response = client.list_certificates()
         assert response == {
             'CertificateSummaryList': [],
@@ -62,10 +68,12 @@ def test_old_model_continues_to_work():
                     'content-length': '29',
                     'content-type': 'application/x-amz-json-1.1',
                     'date': 'Fri, 26 Oct 2018 01:46:30 GMT',
-                    'x-amzn-requestid': 'abcd'},
+                    'x-amzn-requestid': 'abcd',
+                },
                 'HTTPStatusCode': 200,
                 'RequestId': 'abcd',
-                'RetryAttempts': 0}
+                'RetryAttempts': 0,
+            },
         }
 
     # Also verify we can use the paginators as well.
diff -pruN 2.23.6-1/tests/functional/botocore/test_model_completeness.py 2.31.35-1/tests/functional/botocore/test_model_completeness.py
--- 2.23.6-1/tests/functional/botocore/test_model_completeness.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_model_completeness.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.loaders import Loader
 
 LOADER = Loader()
diff -pruN 2.23.6-1/tests/functional/botocore/test_modeled_exceptions.py 2.31.35-1/tests/functional/botocore/test_modeled_exceptions.py
--- 2.23.6-1/tests/functional/botocore/test_modeled_exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_modeled_exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,12 @@
 # language governing permissions and limitations under the License.
 from contextlib import contextmanager
 
-from tests import unittest, BaseSessionTest, ClientHTTPStubber
+from tests import BaseSessionTest, ClientHTTPStubber, unittest
 
 
 class TestModeledExceptions(BaseSessionTest):
     def setUp(self):
-        super(TestModeledExceptions, self).setUp()
+        super().setUp()
         self.region = "us-east-1"
 
     def _create_client(self, service):
@@ -59,7 +59,7 @@ class TestModeledExceptions(BaseSessionT
                 template = {
                     'TemplateName': 'foobar',
                     'SubjectPart': 'foo',
-                    'TextPart': 'bar'
+                    'TextPart': 'bar',
                 }
                 ses.create_template(Template=template)
             self.assertEqual(assertion_context.exception.response, response)
diff -pruN 2.23.6-1/tests/functional/botocore/test_models_directory.py 2.31.35-1/tests/functional/botocore/test_models_directory.py
--- 2.23.6-1/tests/functional/botocore/test_models_directory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_models_directory.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import pytest
 
 import botocore.session
+import pytest
 
 
 @pytest.fixture
@@ -27,8 +27,13 @@ def _available_services():
 
 @pytest.mark.parametrize("service", _available_services())
 def test_models_contain_only_known_file_types(service, loader):
-    known_types = {"completions-1", "endpoint-rule-set-1",
-                   "paginators-1", "service-2", "waiters-2"}
+    known_types = {
+        "completions-1",
+        "endpoint-rule-set-1",
+        "paginators-1",
+        "service-2",
+        "waiters-2",
+    }
     api_version = loader.determine_latest_version(service, "service-2")
     service_dir = os.path.join(loader.BUILTIN_DATA_PATH, service, api_version)
     for model_file in os.listdir(service_dir):
@@ -47,7 +52,9 @@ def test_models_contain_no_blocklisted_s
         assert service not in services
 
 
-@pytest.mark.parametrize(("service","type_name"), [("autoscaling","waiters-2")])
+@pytest.mark.parametrize(
+    ("service", "type_name"), [("autoscaling", "waiters-2")]
+)
 def test_service_contains_no_unexpected_file_type(service, type_name, loader):
     assert service not in loader.list_available_services(type_name)
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_mturk.py 2.31.35-1/tests/functional/botocore/test_mturk.py
--- 2.23.6-1/tests/functional/botocore/test_mturk.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_mturk.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,20 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from botocore.stub import Stubber
+
 from tests import BaseSessionTest
 
 
 class TestMturk(BaseSessionTest):
     def setUp(self):
-        super(TestMturk, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            'mturk', self.region)
+        self.client = self.session.create_client('mturk', self.region)
         self.stubber = Stubber(self.client)
         self.stubber.activate()
 
     def tearDown(self):
-        super(TestMturk, self).tearDown()
+        super().tearDown()
         self.stubber.deactivate()
 
     def test_list_hits_aliased(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_neptune.py 2.31.35-1/tests/functional/botocore/test_neptune.py
--- 2.23.6-1/tests/functional/botocore/test_neptune.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_neptune.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,15 +13,14 @@
 from contextlib import contextmanager
 
 import botocore.session
-from tests import BaseSessionTest, ClientHTTPStubber
 from botocore.stub import Stubber
-from tests import unittest
 
+from tests import BaseSessionTest, ClientHTTPStubber, unittest
 
-class TestNeptunePresignUrlInjection(BaseSessionTest):
 
+class TestNeptunePresignUrlInjection(BaseSessionTest):
     def setUp(self):
-        super(TestNeptunePresignUrlInjection, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('neptune', 'us-west-2')
         self.http_stubber = ClientHTTPStubber(self.client)
 
@@ -33,7 +32,7 @@ class TestNeptunePresignUrlInjection(Bas
         params = {
             'DBClusterIdentifier': 'my-cluster',
             'Engine': 'neptune',
-            'SourceRegion': 'us-east-1'
+            'SourceRegion': 'us-east-1',
         }
         response_body = (
             b'<CreateDBClusterResponse>'
@@ -51,7 +50,7 @@ class TestNeptunePresignUrlInjection(Bas
         params = {
             'SourceDBClusterSnapshotIdentifier': 'source-db',
             'TargetDBClusterSnapshotIdentifier': 'target-db',
-            'SourceRegion': 'us-east-1'
+            'SourceRegion': 'us-east-1',
         }
         response_body = (
             b'<CopyDBClusterSnapshotResponse>'
diff -pruN 2.23.6-1/tests/functional/botocore/test_paginate.py 2.31.35-1/tests/functional/botocore/test_paginate.py
--- 2.23.6-1/tests/functional/botocore/test_paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,43 +10,42 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from math import ceil
 from datetime import datetime
+from math import ceil
 
 import pytest
-
-from tests import random_chars
-from tests import BaseSessionTest
-from botocore.stub import Stubber, StubAssertionError
 from botocore.paginate import TokenDecoder, TokenEncoder
+from botocore.stub import StubAssertionError, Stubber
+
+from tests import BaseSessionTest, random_chars
 
 
 class TestRDSPagination(BaseSessionTest):
     def setUp(self):
-        super(TestRDSPagination, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            'rds', self.region)
+        self.client = self.session.create_client('rds', self.region)
         self.stubber = Stubber(self.client)
 
     def test_can_specify_zero_marker(self):
         service_response = {
             'LogFileData': 'foo',
             'Marker': '2',
-            'AdditionalDataPending': True
+            'AdditionalDataPending': True,
         }
         expected_params = {
             'DBInstanceIdentifier': 'foo',
             'LogFileName': 'bar',
             'NumberOfLines': 2,
-            'Marker': '0'
+            'Marker': '0',
         }
         function_name = 'download_db_log_file_portion'
 
         # The stubber will assert that the function is called with the expected
         # parameters.
         self.stubber.add_response(
-            function_name, service_response, expected_params)
+            function_name, service_response, expected_params
+        )
         self.stubber.activate()
 
         try:
@@ -55,10 +54,8 @@ class TestRDSPagination(BaseSessionTest)
                 DBInstanceIdentifier='foo',
                 LogFileName='bar',
                 NumberOfLines=2,
-                PaginationConfig={
-                    'StartingToken': '0',
-                    'MaxItems': 3
-                }).build_full_result()
+                PaginationConfig={'StartingToken': '0', 'MaxItems': 3},
+            ).build_full_result()
             self.assertEqual(result['LogFileData'], 'foo')
             self.assertIn('NextToken', result)
         except StubAssertionError as e:
@@ -67,17 +64,21 @@ class TestRDSPagination(BaseSessionTest)
 
 class TestAutoscalingPagination(BaseSessionTest):
     def setUp(self):
-        super(TestAutoscalingPagination, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.client = self.session.create_client(
-            'autoscaling', self.region, aws_secret_access_key='foo',
-            aws_access_key_id='bar', aws_session_token='baz'
+            'autoscaling',
+            self.region,
+            aws_secret_access_key='foo',
+            aws_access_key_id='bar',
+            aws_session_token='baz',
         )
         self.stubber = Stubber(self.client)
         self.stubber.activate()
 
-    def _setup_scaling_pagination(self, page_size=200, max_items=100,
-                                 total_items=600):
+    def _setup_scaling_pagination(
+        self, page_size=200, max_items=100, total_items=600
+    ):
         """
         Add to the stubber to test paginating describe_scaling_activities.
 
@@ -121,9 +122,7 @@ class TestAutoscalingPagination(BaseSess
 
             # Copying the page here isn't necessary because it is about to
             # be blown away anyway.
-            self.stubber.add_response(
-                'describe_scaling_activities', page
-            )
+            self.stubber.add_response('describe_scaling_activities', page)
 
             previous_next_token = next_token
 
@@ -132,13 +131,15 @@ class TestAutoscalingPagination(BaseSess
         page = []
         date = datetime.now()
         for _ in range(page_size):
-            page.append({
-                'AutoScalingGroupName': 'test',
-                'ActivityId': random_chars(10),
-                'Cause': 'test',
-                'StartTime': date,
-                'StatusCode': '200',
-            })
+            page.append(
+                {
+                    'AutoScalingGroupName': 'test',
+                    'ActivityId': random_chars(10),
+                    'Cause': 'test',
+                    'StartTime': date,
+                    'StatusCode': '200',
+                }
+            )
         return {'Activities': page}
 
     def test_repeated_build_full_results(self):
@@ -146,9 +147,7 @@ class TestAutoscalingPagination(BaseSess
         max_items = 100
         total_items = 600
         self._setup_scaling_pagination(
-            max_items=max_items,
-            total_items=total_items,
-            page_size=200
+            max_items=max_items, total_items=total_items, page_size=200
         )
         paginator = self.client.get_paginator('describe_scaling_activities')
         conf = {'MaxItems': max_items}
@@ -173,28 +172,35 @@ class TestAutoscalingPagination(BaseSess
 
 class TestCloudwatchLogsPagination(BaseSessionTest):
     def setUp(self):
-        super(TestCloudwatchLogsPagination, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.client = self.session.create_client(
-            'logs', self.region, aws_secret_access_key='foo',
-            aws_access_key_id='bar', aws_session_token='baz'
+            'logs',
+            self.region,
+            aws_secret_access_key='foo',
+            aws_access_key_id='bar',
+            aws_session_token='baz',
         )
         self.stubber = Stubber(self.client)
         self.stubber.activate()
 
     def test_token_with_triple_underscores(self):
         response = {
-            'events': [{
-                'logStreamName': 'foobar',
-                'timestamp': 1560195817,
-                'message': 'a thing happened',
-                'ingestionTime': 1560195817,
-                'eventId': 'foo',
-            }],
-            'searchedLogStreams': [{
-                'logStreamName': 'foobar',
-                'searchedCompletely': False,
-            }],
+            'events': [
+                {
+                    'logStreamName': 'foobar',
+                    'timestamp': 1560195817,
+                    'message': 'a thing happened',
+                    'ingestionTime': 1560195817,
+                    'eventId': 'foo',
+                }
+            ],
+            'searchedLogStreams': [
+                {
+                    'logStreamName': 'foobar',
+                    'searchedCompletely': False,
+                }
+            ],
         }
         group_name = 'foo'
         token = 'foo___bar'
@@ -224,7 +230,7 @@ class TestCloudwatchLogsPagination(BaseS
         {'foo': ['bar', b'baz']},
         {'foo': b'\xff'},
         {'foo': {'bar': b'baz', 'bin': [b'bam']}},
-    )
+    ),
 )
 def test_token_encoding(token_dict):
     encoded = TokenEncoder().encode(token_dict)
diff -pruN 2.23.6-1/tests/functional/botocore/test_paginator_config.py 2.31.35-1/tests/functional/botocore/test_paginator_config.py
--- 2.23.6-1/tests/functional/botocore/test_paginator_config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_paginator_config.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,16 +12,22 @@
 # language governing permissions and limitations under the License.
 import string
 
-import pytest
+import botocore.session
 import jmespath
+import pytest
 from jmespath.exceptions import JMESPathError
 
-import botocore.session
-
-
 KNOWN_PAGE_KEYS = set(
-    ['input_token', 'py_input_token', 'output_token', 'result_key',
-     'limit_key', 'more_results', 'non_aggregate_keys'])
+    [
+        'input_token',
+        'py_input_token',
+        'output_token',
+        'result_key',
+        'limit_key',
+        'more_results',
+        'non_aggregate_keys',
+    ]
+)
 MEMBER_NAME_CHARS = set(string.ascii_letters + string.digits)
 # The goal here should be to remove all of these by updating the paginators
 # to reference all the extra output keys. Nothing should ever be added to this
@@ -34,7 +40,10 @@ KNOWN_EXTRA_OUTPUT_KEYS = [
     'athena.GetQueryResults.ResultSet',
     'cloudfront.ListCloudFrontOriginAccessIdentities.CloudFrontOriginAccessIdentityList',
     'cloudfront.ListDistributions.DistributionList',
+    'cloudfront.ListDistributionsByConnectionMode.DistributionList',
     'cloudfront.ListInvalidations.InvalidationList',
+    'cloudfront.ListInvalidationsForDistributionTenant.InvalidationList',
+    'cloudfront.ListOriginAccessControls.OriginAccessControlList',
     'cloudfront.ListPublicKeys.PublicKeyList',
     'cloudfront.ListStreamingDistributions.StreamingDistributionList',
     'cloudfront.ListKeyValueStores.KeyValueStoreList',
@@ -108,9 +117,6 @@ KNOWN_EXTRA_OUTPUT_KEYS = [
     's3.ListParts.UploadId',
     's3.ListParts.AbortRuleId',
     's3.ListParts.RequestCharged',
-    'sms.GetReplicationRuns.replicationJob',
-    'sms.GetServers.lastModifiedOn',
-    'sms.GetServers.serverCatalogStatus',
     'storagegateway.DescribeTapeRecoveryPoints.GatewayARN',
     'storagegateway.DescribeVTLDevices.GatewayARN',
     'storagegateway.ListVolumes.GatewayARN',
@@ -122,6 +128,10 @@ KNOWN_EXTRA_OUTPUT_KEYS = [
     'xray.GetTraceSummaries.TracesProcessedCount',
     'xray.GetTraceSummaries.ApproximateTime',
 ]
+KNOWN_PAGINATORS_WITH_INTEGER_OUTPUTS = (
+    ('dynamodb', 'Query'),
+    ('dynamodb', 'Scan'),
+)
 
 
 def _pagination_configs():
@@ -130,54 +140,57 @@ def _pagination_configs():
     services = loader.list_available_services('paginators-1')
     for service_name in services:
         service_model = session.get_service_model(service_name)
-        page_config = loader.load_service_model(service_name,
-                                                'paginators-1')
+        page_config = loader.load_service_model(service_name, 'paginators-1')
         for op_name, single_config in page_config['pagination'].items():
-            yield (
-                op_name,
-                single_config,
-                service_model
-            )
+            yield (op_name, single_config, service_model)
 
+
+@pytest.mark.validates_models
 @pytest.mark.parametrize(
-    "operation_name, page_config, service_model",
-    _pagination_configs()
+    "operation_name, page_config, service_model", _pagination_configs()
 )
 def test_lint_pagination_configs(operation_name, page_config, service_model):
     _validate_known_pagination_keys(page_config)
-    _valiate_result_key_exists(page_config)
+    _validate_result_key_exists(page_config)
     _validate_referenced_operation_exists(operation_name, service_model)
     _validate_operation_has_output(operation_name, service_model)
     _validate_input_keys_match(operation_name, page_config, service_model)
     _validate_output_keys_match(operation_name, page_config, service_model)
+    _validate_new_numeric_keys(operation_name, page_config, service_model)
 
 
 def _validate_known_pagination_keys(page_config):
     for key in page_config:
         if key not in KNOWN_PAGE_KEYS:
-            raise AssertionError("Unknown key '%s' in pagination config: %s"
-                                 % (key, page_config))
+            raise AssertionError(
+                f"Unknown key '{key}' in pagination config: {page_config}"
+            )
 
 
-def _valiate_result_key_exists(page_config):
+def _validate_result_key_exists(page_config):
     if 'result_key' not in page_config:
-        raise AssertionError("Required key 'result_key' is missing "
-                             "from pagination config: %s" % page_config)
+        raise AssertionError(
+            "Required key 'result_key' is missing "
+            f"from pagination config: {page_config}"
+        )
 
 
 def _validate_referenced_operation_exists(operation_name, service_model):
     if operation_name not in service_model.operation_names:
-        raise AssertionError("Pagination config refers to operation that "
-                             "does not exist: %s" % operation_name)
+        raise AssertionError(
+            "Pagination config refers to operation that "
+            f"does not exist: {operation_name}"
+        )
 
 
 def _validate_operation_has_output(operation_name, service_model):
     op_model = service_model.operation_model(operation_name)
     output = op_model.output_shape
     if output is None or not output.members:
-        raise AssertionError("Pagination config refers to operation "
-                             "that does not have any output: %s"
-                             % operation_name)
+        raise AssertionError(
+            "Pagination config refers to operation "
+            f"that does not have any output: {operation_name}"
+        )
 
 
 def _validate_input_keys_match(operation_name, page_config, service_model):
@@ -185,19 +198,26 @@ def _validate_input_keys_match(operation
     if not isinstance(input_tokens, list):
         input_tokens = [input_tokens]
     valid_input_names = service_model.operation_model(
-        operation_name).input_shape.members
+        operation_name
+    ).input_shape.members
     for token in input_tokens:
         if token not in valid_input_names:
-            raise AssertionError("input_token '%s' refers to a non existent "
-                                 "input member for operation: %s"
-                                 % (token, operation_name))
+            raise AssertionError(
+                f"input_token '{token}' refers to a non existent "
+                f"input member for operation: {operation_name}"
+            )
     if 'limit_key' in page_config:
         limit_key = page_config['limit_key']
         if limit_key not in valid_input_names:
-            raise AssertionError("limit_key '%s' refers to a non existent "
-                                 "input member for operation: %s, valid keys: "
-                                 "%s" % (limit_key, operation_name,
-                                         ', '.join(list(valid_input_names))))
+            raise AssertionError(
+                "limit_key '{}' refers to a non existent "
+                "input member for operation: {}, valid keys: "
+                "{}".format(
+                    limit_key,
+                    operation_name,
+                    ', '.join(list(valid_input_names)),
+                )
+            )
 
 
 def _validate_output_keys_match(operation_name, page_config, service_model):
@@ -215,30 +235,55 @@ def _validate_output_keys_match(operatio
             _validate_jmespath_compiles(output_key)
         else:
             if output_key not in output_members:
-                raise AssertionError("Pagination key '%s' refers to an output "
-                                     "member that does not exist: %s" % (
-                                         key_name, output_key))
+                raise AssertionError(
+                    f"Pagination key '{key_name}' refers to an output "
+                    f"member that does not exist: {output_key}"
+                )
             output_members.remove(output_key)
 
     for member in list(output_members):
-        key = "%s.%s.%s" % (service_model.service_name,
-                            operation_name,
-                            member)
+        key = f"{service_model.service_name}.{operation_name}.{member}"
         if key in KNOWN_EXTRA_OUTPUT_KEYS:
             output_members.remove(member)
 
     if output_members:
         for member in output_members:
-            key = "%s.%s.%s" % (service_model.service_name,
-                                operation_name,
-                                member)
+            key = f"{service_model.service_name}.{operation_name}.{member}"
             with open('/tmp/blah', 'a') as f:
-                f.write("'%s',\n" % key)
-        raise AssertionError("There are member names in the output shape of "
-                             "%s that are not accounted for in the pagination "
-                             "config for service %s: %s" % (
-                                 operation_name, service_model.service_name,
-                                 ', '.join(output_members)))
+                f.write(f"'{key}',\n")
+        raise AssertionError(
+            "There are member names in the output shape of "
+            "{} that are not accounted for in the pagination "
+            "config for service {}: {}".format(
+                operation_name,
+                service_model.service_name,
+                ', '.join(output_members),
+            )
+        )
+
+
+def _validate_new_numeric_keys(operation_name, page_config, service_model):
+    output_shape = service_model.operation_model(operation_name).output_shape
+    for key in _get_list_value(page_config, 'result_key'):
+        current_shape = output_shape
+        if '.' in key:  # result_key is a JMESPath expression
+            for part in key.split('.'):
+                current_shape = current_shape.members[part]
+        elif key in output_shape.members:
+            current_shape = output_shape.members[key]
+
+        if (
+            getattr(current_shape, 'type_name', None) == 'integer'
+            and (service_model.service_name, operation_name)
+            not in KNOWN_PAGINATORS_WITH_INTEGER_OUTPUTS
+        ):
+            raise AssertionError(
+                f'There is a new operation {operation_name} for service '
+                f'{service_model.service_name} that is configured to sum '
+                'integer outputs across pages. Verify that this behavior is '
+                'correct before allow-listing, since whether or not it is '
+                'appropriate to sum depends on the subject matter.'
+            )
 
 
 def _looks_like_jmespath(expression):
@@ -251,9 +296,10 @@ def _validate_jmespath_compiles(expressi
     try:
         jmespath.compile(expression)
     except JMESPathError as e:
-        raise AssertionError("Invalid JMESPath expression used "
-                             "in pagination config: %s\nerror: %s"
-                             % (expression, e))
+        raise AssertionError(
+            "Invalid JMESPath expression used "
+            f"in pagination config: {expression}\nerror: {e}"
+        )
 
 
 def _get_all_page_output_keys(page_config):
diff -pruN 2.23.6-1/tests/functional/botocore/test_protocol_selection.py 2.31.35-1/tests/functional/botocore/test_protocol_selection.py
--- 2.23.6-1/tests/functional/botocore/test_protocol_selection.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_protocol_selection.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,67 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+from unittest.mock import patch
+
+from botocore.parsers import RestJSONParser
+from botocore.session import Session
+from botocore.utils import PRIORITY_ORDERED_SUPPORTED_PROTOCOLS
+from tests import ClientHTTPStubber
+from tests.functional.botocore import TEST_MODELS_DIR
+
+
+def test_correct_protocol_selection():
+    # This test ensures that botocore can properly resolve a protocol and
+    # apply that to both the serializer and parser.  The logic for protocol
+    # selection is deserialized for picking the serializer and parser, so
+    # we add this test to make sure that in at least a simple circumstance
+    # where a protocol is selected that is not the same as the "protocol"
+    # trait, that we can properly create and use a serializer/parser.
+    session = Session()
+    loader = session.get_component('data_loader')
+    loader.search_paths.insert(0, TEST_MODELS_DIR)
+
+    client = session.create_client(
+        'test-protocol-list',
+        region_name='us-west-2',
+        aws_access_key_id='foo',
+        aws_secret_access_key='bar',
+    )
+
+    # This test would not be effective if the `protocol` trait was ever
+    # a higher priority protocol than the resolved protocol as it would
+    # pass even if a client's resolved parser was based on the `protocol`
+    # trait instead of the resolved protocol
+    service_model = client.meta.service_model
+    assert PRIORITY_ORDERED_SUPPORTED_PROTOCOLS.index(
+        service_model.protocol
+    ) > PRIORITY_ORDERED_SUPPORTED_PROTOCOLS.index(
+        service_model.resolved_protocol
+    )
+
+    original_do_parse = RestJSONParser._do_parse
+
+    def tracking_do_parse(self, *args, **kwargs):
+        called['was_called'] = True
+        return original_do_parse(self, *args, **kwargs)
+
+    with patch("botocore.parsers.RestJSONParser._do_parse", tracking_do_parse):
+        called = {'was_called': False}
+        with ClientHTTPStubber(client) as stubber:
+            stubber.add_response(
+                body=b'{"Bar": "Baz"}',
+            )
+            response = client.test_protocol_selection(Foo="input")
+            assert response['Bar'] == 'Baz'
+        assert called[
+            'was_called'
+        ], "_do_parse was not called on RestJSONParser as expected"
diff -pruN 2.23.6-1/tests/functional/botocore/test_public_apis.py 2.31.35-1/tests/functional/botocore/test_public_apis.py
--- 2.23.6-1/tests/functional/botocore/test_public_apis.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_public_apis.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,11 @@
 from collections import defaultdict
 
 import pytest
-
-from tests import mock, ClientHTTPStubber
-from botocore.session import Session
-from botocore.exceptions import NoCredentialsError
 from botocore import xform_name
+from botocore.exceptions import NoCredentialsError
+from botocore.session import Session
 
+from tests import ClientHTTPStubber, mock
 
 REGIONS = defaultdict(lambda: 'us-east-1')
 PUBLIC_API_TESTS = {
@@ -26,15 +25,20 @@ PUBLIC_API_TESTS = {
         "GetId": {"IdentityPoolId": "region:1234"},
         "GetOpenIdToken": {"IdentityId": "region:1234"},
         "UnlinkIdentity": {
-            "IdentityId": "region:1234", "Logins": {}, "LoginsToRemove": []},
+            "IdentityId": "region:1234",
+            "Logins": {},
+            "LoginsToRemove": [],
+        },
         "GetCredentialsForIdentity": {"IdentityId": "region:1234"},
     },
     "sts": {
         "AssumeRoleWithSaml": {
-            "PrincipalArn": "a"*20, "RoleArn": "a"*20, "SAMLAssertion": "abcd",
+            "PrincipalArn": "a" * 20,
+            "RoleArn": "a" * 20,
+            "SAMLAssertion": "abcd",
         },
         "AssumeRoleWithWebIdentity": {
-            "RoleArn": "a"*20,
+            "RoleArn": "a" * 20,
             "RoleSessionName": "foo",
             "WebIdentityToken": "abcd",
         },
diff -pruN 2.23.6-1/tests/functional/botocore/test_qbusiness.py 2.31.35-1/tests/functional/botocore/test_qbusiness.py
--- 2.23.6-1/tests/functional/botocore/test_qbusiness.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_qbusiness.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.session import get_session
 
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_rds.py 2.31.35-1/tests/functional/botocore/test_rds.py
--- 2.23.6-1/tests/functional/botocore/test_rds.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_rds.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,9 +14,8 @@ from tests import BaseSessionTest, Clien
 
 
 class TestRDSPresignUrlInjection(BaseSessionTest):
-
     def setUp(self):
-        super(TestRDSPresignUrlInjection, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('rds', 'us-west-2')
         self.http_stubber = ClientHTTPStubber(self.client)
 
@@ -28,12 +27,12 @@ class TestRDSPresignUrlInjection(BaseSes
         params = {
             'SourceDBSnapshotIdentifier': 'source-db',
             'TargetDBSnapshotIdentifier': 'target-db',
-            'SourceRegion': 'us-east-1'
+            'SourceRegion': 'us-east-1',
         }
         response_body = (
-                    b'<CopyDBSnapshotResponse>'
-                    b'<CopyDBSnapshotResult></CopyDBSnapshotResult>'
-                    b'</CopyDBSnapshotResponse>'
+            b'<CopyDBSnapshotResponse>'
+            b'<CopyDBSnapshotResult></CopyDBSnapshotResult>'
+            b'</CopyDBSnapshotResponse>'
         )
         self.http_stubber.add_response(body=response_body)
         with self.http_stubber:
@@ -45,7 +44,7 @@ class TestRDSPresignUrlInjection(BaseSes
         params = {
             'SourceDBInstanceIdentifier': 'source-db',
             'DBInstanceIdentifier': 'target-db',
-            'SourceRegion': 'us-east-1'
+            'SourceRegion': 'us-east-1',
         }
         response_body = (
             b'<CreateDBInstanceReadReplicaResponse>'
@@ -72,14 +71,16 @@ class TestRDSPresignUrlInjection(BaseSes
         )
         self.http_stubber.add_response(body=response_body)
         with self.http_stubber:
-            self.client.start_db_instance_automated_backups_replication(**params)
+            self.client.start_db_instance_automated_backups_replication(
+                **params
+            )
             sent_request = self.http_stubber.requests[0]
             self.assert_presigned_url_injected_in_request(sent_request.body)
 
 
 class TestRDS(BaseSessionTest):
     def setUp(self):
-        super(TestRDS, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('rds', 'us-west-2')
 
     def test_generate_db_auth_token(self):
@@ -87,7 +88,8 @@ class TestRDS(BaseSessionTest):
         port = 3306
         username = 'mySQLUser'
         auth_token = self.client.generate_db_auth_token(
-            DBHostname=hostname, Port=port, DBUsername=username)
+            DBHostname=hostname, Port=port, DBUsername=username
+        )
 
         endpoint_url = 'host.us-east-1.rds.amazonaws.com:3306'
         self.assertIn(endpoint_url, auth_token)
diff -pruN 2.23.6-1/tests/functional/botocore/test_regions.py 2.31.35-1/tests/functional/botocore/test_regions.py
--- 2.23.6-1/tests/functional/botocore/test_regions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_regions.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.client import ClientEndpointBridge
-from botocore.exceptions import NoRegionError
 from botocore.compat import urlparse
+from botocore.exceptions import NoRegionError
 
-from tests import mock, BaseSessionTest, ClientHTTPStubber
-
+from tests import BaseSessionTest, ClientHTTPStubber, mock
 
 # NOTE: sqs endpoint updated to be the CN in the SSL cert because
 # a bug in python2.6 prevents subjectAltNames from being parsed
@@ -64,7 +62,7 @@ KNOWN_REGIONS = {
         'streams.dynamodb': 'streams.dynamodb.ap-northeast-1.amazonaws.com',
         'sts': 'sts.ap-northeast-1.amazonaws.com',
         'swf': 'swf.ap-northeast-1.amazonaws.com',
-        'workspaces': 'workspaces.ap-northeast-1.amazonaws.com'
+        'workspaces': 'workspaces.ap-northeast-1.amazonaws.com',
     },
     'ap-southeast-1': {
         'autoscaling': 'autoscaling.ap-southeast-1.amazonaws.com',
@@ -96,7 +94,7 @@ KNOWN_REGIONS = {
         'streams.dynamodb': 'streams.dynamodb.ap-southeast-1.amazonaws.com',
         'sts': 'sts.ap-southeast-1.amazonaws.com',
         'swf': 'swf.ap-southeast-1.amazonaws.com',
-        'workspaces': 'workspaces.ap-southeast-1.amazonaws.com'
+        'workspaces': 'workspaces.ap-southeast-1.amazonaws.com',
     },
     'ap-southeast-2': {
         'autoscaling': 'autoscaling.ap-southeast-2.amazonaws.com',
@@ -131,11 +129,9 @@ KNOWN_REGIONS = {
         'streams.dynamodb': 'streams.dynamodb.ap-southeast-2.amazonaws.com',
         'sts': 'sts.ap-southeast-2.amazonaws.com',
         'swf': 'swf.ap-southeast-2.amazonaws.com',
-        'workspaces': 'workspaces.ap-southeast-2.amazonaws.com'
-    },
-    'aws-us-gov-global': {
-        'iam': 'iam.us-gov.amazonaws.com'
+        'workspaces': 'workspaces.ap-southeast-2.amazonaws.com',
     },
+    'aws-us-gov-global': {'iam': 'iam.us-gov.amazonaws.com'},
     'cn-north-1': {
         'autoscaling': 'autoscaling.cn-north-1.amazonaws.com.cn',
         'cloudformation': 'cloudformation.cn-north-1.amazonaws.com.cn',
@@ -158,7 +154,7 @@ KNOWN_REGIONS = {
         'storagegateway': 'storagegateway.cn-north-1.amazonaws.com.cn',
         'streams.dynamodb': 'streams.dynamodb.cn-north-1.amazonaws.com.cn',
         'sts': 'sts.cn-north-1.amazonaws.com.cn',
-        'swf': 'swf.cn-north-1.amazonaws.com.cn'
+        'swf': 'swf.cn-north-1.amazonaws.com.cn',
     },
     'eu-central-1': {
         'autoscaling': 'autoscaling.eu-central-1.amazonaws.com',
@@ -188,7 +184,7 @@ KNOWN_REGIONS = {
         'storagegateway': 'storagegateway.eu-central-1.amazonaws.com',
         'streams.dynamodb': 'streams.dynamodb.eu-central-1.amazonaws.com',
         'sts': 'sts.eu-central-1.amazonaws.com',
-        'swf': 'swf.eu-central-1.amazonaws.com'
+        'swf': 'swf.eu-central-1.amazonaws.com',
     },
     'eu-west-1': {
         'apigateway': 'apigateway.eu-west-1.amazonaws.com',
@@ -232,17 +228,11 @@ KNOWN_REGIONS = {
         'streams.dynamodb': 'streams.dynamodb.eu-west-1.amazonaws.com',
         'sts': 'sts.eu-west-1.amazonaws.com',
         'swf': 'swf.eu-west-1.amazonaws.com',
-        'workspaces': 'workspaces.eu-west-1.amazonaws.com'
-    },
-    'fips-us-gov-west-1': {
-        's3': 's3-fips.us-gov-west-1.amazonaws.com'
-    },
-    'local': {
-        'dynamodb': 'http://localhost:8000'
-    },
-    's3-external-1': {
-        's3': 's3-external-1.amazonaws.com'
+        'workspaces': 'workspaces.eu-west-1.amazonaws.com',
     },
+    'fips-us-gov-west-1': {'s3': 's3-fips.us-gov-west-1.amazonaws.com'},
+    'local': {'dynamodb': 'http://localhost:8000'},
+    's3-external-1': {'s3': 's3-external-1.amazonaws.com'},
     'sa-east-1': {
         'autoscaling': 'autoscaling.sa-east-1.amazonaws.com',
         'cloudformation': 'cloudformation.sa-east-1.amazonaws.com',
@@ -266,7 +256,7 @@ KNOWN_REGIONS = {
         'storagegateway': 'storagegateway.sa-east-1.amazonaws.com',
         'streams.dynamodb': 'streams.dynamodb.sa-east-1.amazonaws.com',
         'sts': 'sts.sa-east-1.amazonaws.com',
-        'swf': 'swf.sa-east-1.amazonaws.com'
+        'swf': 'swf.sa-east-1.amazonaws.com',
     },
     'us-east-1': {
         'apigateway': 'apigateway.us-east-1.amazonaws.com',
@@ -306,7 +296,6 @@ KNOWN_REGIONS = {
         'machinelearning': 'machinelearning.us-east-1.amazonaws.com',
         'mobileanalytics': 'mobileanalytics.us-east-1.amazonaws.com',
         'monitoring': 'monitoring.us-east-1.amazonaws.com',
-        'opsworks': 'opsworks.us-east-1.amazonaws.com',
         'rds': 'rds.us-east-1.amazonaws.com',
         'redshift': 'redshift.us-east-1.amazonaws.com',
         'route53': 'route53.amazonaws.com',
@@ -322,7 +311,7 @@ KNOWN_REGIONS = {
         'support': 'support.us-east-1.amazonaws.com',
         'swf': 'swf.us-east-1.amazonaws.com',
         'workspaces': 'workspaces.us-east-1.amazonaws.com',
-        'waf': 'waf.amazonaws.com'
+        'waf': 'waf.amazonaws.com',
     },
     'us-gov-west-1': {
         'autoscaling': 'autoscaling.us-gov-west-1.amazonaws.com',
@@ -344,7 +333,7 @@ KNOWN_REGIONS = {
         'sns': 'sns.us-gov-west-1.amazonaws.com',
         'sqs': 'sqs.us-gov-west-1.amazonaws.com',
         'sts': 'sts.us-gov-west-1.amazonaws.com',
-        'swf': 'swf.us-gov-west-1.amazonaws.com'
+        'swf': 'swf.us-gov-west-1.amazonaws.com',
     },
     'us-west-1': {
         'autoscaling': 'autoscaling.us-west-1.amazonaws.com',
@@ -374,7 +363,7 @@ KNOWN_REGIONS = {
         'storagegateway': 'storagegateway.us-west-1.amazonaws.com',
         'streams.dynamodb': 'streams.dynamodb.us-west-1.amazonaws.com',
         'sts': 'sts.us-west-1.amazonaws.com',
-        'swf': 'swf.us-west-1.amazonaws.com'
+        'swf': 'swf.us-west-1.amazonaws.com',
     },
     'us-west-2': {
         'apigateway': 'apigateway.us-west-2.amazonaws.com',
@@ -418,8 +407,8 @@ KNOWN_REGIONS = {
         'streams.dynamodb': 'streams.dynamodb.us-west-2.amazonaws.com',
         'sts': 'sts.us-west-2.amazonaws.com',
         'swf': 'swf.us-west-2.amazonaws.com',
-        'workspaces': 'workspaces.us-west-2.amazonaws.com'
-    }
+        'workspaces': 'workspaces.us-west-2.amazonaws.com',
+    },
 }
 
 
@@ -433,7 +422,7 @@ KNOWN_AWS_PARTITION_WIDE = {
     'route53': 'https://route53.amazonaws.com',
     's3': 'https://s3.amazonaws.com',
     'sts': 'https://sts.amazonaws.com',
-    'iam': 'https://iam.amazonaws.com'
+    'iam': 'https://iam.amazonaws.com',
 }
 
 
@@ -445,10 +434,10 @@ def _known_endpoints_by_region():
 
 @pytest.mark.parametrize(
     "service_name, region_name, expected_endpoint",
-    _known_endpoints_by_region()
+    _known_endpoints_by_region(),
 )
 def test_single_service_region_endpoint(
-        patched_session, service_name, region_name, expected_endpoint
+    patched_session, service_name, region_name, expected_endpoint
 ):
     # Verify the actual values from the partition files.  While
     # TestEndpointHeuristics verified the generic functionality given any
@@ -456,13 +445,12 @@ def test_single_service_region_endpoint(
     # fixed list of known endpoints.  This list doesn't need to be kept 100% up
     # to date, but serves as a basis for regressions as the endpoint data
     # logic evolves.
-    resolver = patched_session._get_internal_component(
-        'endpoint_resolver')
+    resolver = patched_session._get_internal_component('endpoint_resolver')
     bridge = ClientEndpointBridge(resolver, None, None)
     result = bridge.resolve(service_name, region_name)
     scheme = urlparse(expected_endpoint).scheme
     if not scheme:
-        expected_endpoint = 'https://%s' % expected_endpoint
+        expected_endpoint = f'https://{expected_endpoint}'
     assert result['endpoint_url'] == expected_endpoint
 
 
@@ -479,8 +467,7 @@ def test_all_s3_endpoints_have_s3v4(patc
 
 
 @pytest.mark.parametrize(
-    "service_name, expected_endpoint",
-    KNOWN_AWS_PARTITION_WIDE.items()
+    "service_name, expected_endpoint", KNOWN_AWS_PARTITION_WIDE.items()
 )
 def test_single_service_partition_endpoint(
     patched_session, service_name, expected_endpoint
@@ -498,9 +485,8 @@ def test_non_partition_endpoint_requires
 
 
 class TestEndpointResolution(BaseSessionTest):
-
     def setUp(self):
-        super(TestEndpointResolution, self).setUp()
+        super().setUp()
         self.xml_response = (
             b'<?xml version="1.0" encoding="UTF-8"?>\n\n'
             b'<ListRolesResponse '
@@ -510,7 +496,9 @@ class TestEndpointResolution(BaseSession
         )
 
     def create_stubbed_client(self, service_name, region_name, **kwargs):
-        client = self.session.create_client(service_name, region_name, **kwargs)
+        client = self.session.create_client(
+            service_name, region_name, **kwargs
+        )
         http_stubber = ClientHTTPStubber(client)
         http_stubber.start()
         return client, http_stubber
@@ -520,8 +508,7 @@ class TestEndpointResolution(BaseSession
         stubber.add_response()
         client.list_buckets()
         self.assertEqual(
-            stubber.requests[0].url,
-            'https://s3.us-east-2.amazonaws.com/'
+            stubber.requests[0].url, 'https://s3.us-east-2.amazonaws.com/'
         )
 
     def test_regionalized_client_with_unknown_region(self):
@@ -531,8 +518,7 @@ class TestEndpointResolution(BaseSession
         # Validate we don't fall back to partition endpoint for
         # regionalized services.
         self.assertEqual(
-            stubber.requests[0].url,
-            'https://s3.not-real.amazonaws.com/'
+            stubber.requests[0].url, 'https://s3.not-real.amazonaws.com/'
         )
 
     def test_unregionalized_client_endpoint_resolution(self):
diff -pruN 2.23.6-1/tests/functional/botocore/test_response_shadowing.py 2.31.35-1/tests/functional/botocore/test_response_shadowing.py
--- 2.23.6-1/tests/functional/botocore/test_response_shadowing.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_response_shadowing.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,8 +17,7 @@ from tests import ALL_SERVICES
 
 def _all_service_error_shapes():
     for service_model in ALL_SERVICES:
-        for shape in service_model.error_shapes:
-            yield shape
+        yield from service_model.error_shapes
 
 
 def _all_operations():
@@ -31,9 +30,9 @@ def _assert_not_shadowed(key, shape):
     if not shape:
         return
 
-    assert key not in shape.members, (
-        f'Found shape "{shape.name}" that shadows the botocore response key "{key}"'
-    )
+    assert (
+        key not in shape.members
+    ), f'Found shape "{shape.name}" that shadows the botocore response key "{key}"'
 
 
 @pytest.mark.parametrize("operation_output_shape", _all_operations())
diff -pruN 2.23.6-1/tests/functional/botocore/test_retry.py 2.31.35-1/tests/functional/botocore/test_retry.py
--- 2.23.6-1/tests/functional/botocore/test_retry.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_retry.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,26 +12,32 @@
 # language governing permissions and limitations under the License.
 import contextlib
 import json
-from tests import BaseSessionTest, mock, ClientHTTPStubber
 
-from botocore.exceptions import ClientError
 from botocore.config import Config
+from botocore.exceptions import ClientError
+
+from tests import BaseSessionTest, ClientHTTPStubber, mock
+from tests.functional.botocore.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
 
 
 class TestRetry(BaseSessionTest):
     def setUp(self):
-        super(TestRetry, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
         self.sleep_patch = mock.patch('time.sleep')
         self.sleep_patch.start()
 
     def tearDown(self):
-        super(TestRetry, self).tearDown()
+        super().tearDown()
         self.sleep_patch.stop()
 
     @contextlib.contextmanager
-    def assert_will_retry_n_times(self, client, num_retries,
-                                  status=500, body=b'{}'):
+    def assert_will_retry_n_times(
+        self, client, num_retries, status=500, body=b'{}'
+    ):
         num_responses = num_retries + 1
         if not isinstance(body, bytes):
             body = json.dumps(body).encode('utf-8')
@@ -39,36 +45,51 @@ class TestRetry(BaseSessionTest):
             for _ in range(num_responses):
                 http_stubber.add_response(status=status, body=body)
             with self.assertRaisesRegex(
-                    ClientError, 'reached max retries: %s' % num_retries):
+                ClientError, f'reached max retries: {num_retries}'
+            ):
                 yield
             self.assertEqual(len(http_stubber.requests), num_responses)
 
-    def create_client_with_retry_config(self, service, retry_mode='standard',
-                                        max_attempts=None):
+    def _get_feature_id_lists_from_retries(self, client):
+        with ClientHTTPStubber(client) as http_stubber:
+            # Add two failed responses followed by a success
+            http_stubber.add_response(status=502, body=b'{}')
+            http_stubber.add_response(status=502, body=b'{}')
+            http_stubber.add_response(status=200, body=b'{}')
+            client.list_tables()
+        ua_strings = get_captured_ua_strings(http_stubber)
+        return [
+            parse_registered_feature_ids(ua_string) for ua_string in ua_strings
+        ]
+
+    def create_client_with_retry_config(
+        self, service, retry_mode='standard', max_attempts=None
+    ):
         retries = {'mode': retry_mode}
         if max_attempts is not None:
             retries['max_attempts'] = max_attempts
         client = self.session.create_client(
-            service, self.region, config=Config(retries=retries))
+            service, self.region, config=Config(retries=retries)
+        )
         return client
 
     def test_can_override_only_max_attempts(self):
         client = self.session.create_client(
-            'dynamodb', self.region, config=Config(
-                retries={'max_attempts': 2}))
+            'dynamodb', self.region, config=Config(retries={'max_attempts': 2})
+        )
         with self.assert_will_retry_n_times(client, 1):
             client.list_tables()
 
     def test_do_not_attempt_retries(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', max_attempts=1)
+            'dynamodb', max_attempts=1
+        )
         with self.assert_will_retry_n_times(client, 0):
             client.list_tables()
 
     def test_setting_max_attempts_does_not_set_for_other_clients(self):
         # Make one client with max attempts configured.
-        self.create_client_with_retry_config(
-            'dynamodb', max_attempts=1)
+        self.create_client_with_retry_config('dynamodb', max_attempts=1)
 
         # Make another client that has no custom retry configured.
         client = self.session.create_client('codecommit', self.region)
@@ -79,7 +100,8 @@ class TestRetry(BaseSessionTest):
 
     def test_set_max_attempts_on_session(self):
         self.session.set_default_client_config(
-            Config(retries={'max_attempts': 2}))
+            Config(retries={'max_attempts': 2})
+        )
         # Max attempts should be inherited from the session.
         client = self.session.create_client('codecommit', self.region)
         with self.assert_will_retry_n_times(client, 1):
@@ -87,48 +109,53 @@ class TestRetry(BaseSessionTest):
 
     def test_can_clobber_max_attempts_on_session(self):
         self.session.set_default_client_config(
-            Config(retries={'max_attempts': 5}))
+            Config(retries={'max_attempts': 5})
+        )
         # Max attempts should override the session's configured max attempts.
         client = self.session.create_client(
-            'codecommit', self.region, config=Config(
-                retries={'max_attempts': 3}))
+            'codecommit',
+            self.region,
+            config=Config(retries={'max_attempts': 3}),
+        )
         with self.assert_will_retry_n_times(client, 2):
             client.list_repositories()
 
     def test_standard_mode_has_default_3_retries(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard')
+            'dynamodb', retry_mode='standard'
+        )
         with self.assert_will_retry_n_times(client, 2):
             client.list_tables()
 
     def test_standard_mode_can_configure_max_attempts(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard', max_attempts=5)
+            'dynamodb', retry_mode='standard', max_attempts=5
+        )
         with self.assert_will_retry_n_times(client, 4):
             client.list_tables()
 
     def test_no_retry_needed_standard_mode(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard')
+            'dynamodb', retry_mode='standard'
+        )
         with ClientHTTPStubber(client) as http_stubber:
             http_stubber.add_response(status=200, body=b'{}')
             client.list_tables()
 
     def test_standard_mode_retry_throttling_error(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard')
-        error_body = {
-            "__type": "ThrottlingException",
-            "message": "Error"
-        }
-        with self.assert_will_retry_n_times(client, 2,
-                                            status=400,
-                                            body=error_body):
+            'dynamodb', retry_mode='standard'
+        )
+        error_body = {"__type": "ThrottlingException", "message": "Error"}
+        with self.assert_will_retry_n_times(
+            client, 2, status=400, body=error_body
+        ):
             client.list_tables()
 
     def test_standard_mode_retry_transient_error(self):
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard')
+            'dynamodb', retry_mode='standard'
+        )
         with self.assert_will_retry_n_times(client, 2, status=502):
             client.list_tables()
 
@@ -136,7 +163,8 @@ class TestRetry(BaseSessionTest):
         # Quota of 500 / 5 retry costs == 100 retry attempts
         # 100 retry attempts / 2 retries per API call == 50 client calls
         client = self.create_client_with_retry_config(
-            'dynamodb', retry_mode='standard')
+            'dynamodb', retry_mode='standard'
+        )
         for i in range(50):
             with self.assert_will_retry_n_times(client, 2, status=502):
                 client.list_tables()
@@ -149,3 +177,19 @@ class TestRetry(BaseSessionTest):
         self.assertTrue(
             e.exception.response['ResponseMetadata'].get('RetryQuotaReached')
         )
+
+    def test_user_agent_has_standard_mode_feature_id(self):
+        client = self.create_client_with_retry_config(
+            'dynamodb', retry_mode='standard'
+        )
+        feature_lists = self._get_feature_id_lists_from_retries(client)
+        # Confirm all requests register `'RETRY_MODE_STANDARD': 'E'`
+        assert all('E' in feature_list for feature_list in feature_lists)
+
+    def test_user_agent_has_adaptive_mode_feature_id(self):
+        client = self.create_client_with_retry_config(
+            'dynamodb', retry_mode='adaptive'
+        )
+        feature_lists = self._get_feature_id_lists_from_retries(client)
+        # Confirm all requests register `'RETRY_MODE_ADAPTIVE': 'F'`
+        assert all('F' in feature_list for feature_list in feature_lists)
diff -pruN 2.23.6-1/tests/functional/botocore/test_route53.py 2.31.35-1/tests/functional/botocore/test_route53.py
--- 2.23.6-1/tests/functional/botocore/test_route53.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_route53.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, BaseSessionTest, ClientHTTPStubber
-
 import botocore.session
 from botocore.stub import Stubber
 
+from tests import BaseSessionTest, ClientHTTPStubber, unittest
+
+
 class TestRoute53Pagination(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
@@ -25,7 +26,7 @@ class TestRoute53Pagination(unittest.Tes
             'HostedZones': [],
             'Marker': '',
             'IsTruncated': True,
-            'MaxItems': '1'
+            'MaxItems': '1',
         }
         self.operation_name = 'list_hosted_zones'
         self.final_params = {}
@@ -38,7 +39,8 @@ class TestRoute53Pagination(unittest.Tes
         # because the stubber asserts on the same event first, we don't see
         # the modified value meaning we need to use a custom handler
         self.client.meta.events.register_last(
-            'before-parameter-build', self._store_final_params,
+            'before-parameter-build',
+            self._store_final_params,
         )
 
         self.stubber.add_response(self.operation_name, self.response)
@@ -53,7 +55,7 @@ class TestRoute53Pagination(unittest.Tes
         self.stubber.add_response(self.operation_name, self.response)
         paginator = self.client.get_paginator('list_hosted_zones')
         with self.stubber:
-            config={'PageSize': 1}
+            config = {'PageSize': 1}
             results = list(paginator.paginate(PaginationConfig=config))
             self.assertTrue(len(results) >= 0)
 
@@ -63,14 +65,16 @@ class TestRoute53Pagination(unittest.Tes
         self.stubber.add_response(self.operation_name, self.response)
         paginator = self.client.get_paginator('list_hosted_zones')
         with self.stubber:
-            config={'PageSize': '1'}
+            config = {'PageSize': '1'}
             results = list(paginator.paginate(PaginationConfig=config))
             self.assertTrue(len(results) >= 0)
 
-class TestRoute53EndpointResolution(BaseSessionTest):
 
+class TestRoute53EndpointResolution(BaseSessionTest):
     def create_stubbed_client(self, service_name, region_name, **kwargs):
-        client = self.session.create_client(service_name, region_name, **kwargs)
+        client = self.session.create_client(
+            service_name, region_name, **kwargs
+        )
         http_stubber = ClientHTTPStubber(client)
         http_stubber.start()
         http_stubber.add_response()
diff -pruN 2.23.6-1/tests/functional/botocore/test_rpc_v2_cbor.py 2.31.35-1/tests/functional/botocore/test_rpc_v2_cbor.py
--- 2.23.6-1/tests/functional/botocore/test_rpc_v2_cbor.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_rpc_v2_cbor.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,90 @@
+# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+from tests import ClientHTTPStubber, patch_load_service_model
+from tests.functional.botocore.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
+
+MOCK_SERVICE_MODEL = {
+    "version": "1.0",
+    "documentation": "",
+    "metadata": {
+        "apiVersion": "2020-02-02",
+        "endpointPrefix": "mockservice",
+        "protocols": ["smithy-rpc-v2-cbor"],
+        "protocol": "smithy-rpc-v2-cbor",
+        "serviceFullName": "Mock Service",
+        "serviceId": "mockservice",
+        "signatureVersion": "v4",
+        "signingName": "mockservice",
+        "targetPrefix": "mockservice",
+        "uid": "mockservice-2020-02-02",
+    },
+    "operations": {
+        "MockOperation": {
+            "name": "MockOperation",
+            "http": {"method": "GET", "requestUri": "/"},
+            "input": {"shape": "MockOperationRequest"},
+            "documentation": "",
+        },
+    },
+    "shapes": {
+        "MockOpParam": {
+            "type": "string",
+        },
+        "MockOperationRequest": {
+            "type": "structure",
+            "required": ["MockOpParam"],
+            "members": {
+                "MockOpParam": {
+                    "shape": "MockOpParam",
+                    "documentation": "",
+                    "location": "uri",
+                    "locationName": "param",
+                },
+            },
+        },
+    },
+}
+
+MOCK_RULESET = {
+    "version": "1.0",
+    "parameters": {},
+    "rules": [
+        {
+            "conditions": [],
+            "endpoint": {
+                "url": "https://mockservice.us-west-2.amazonaws.com/"
+            },
+            "type": "endpoint",
+        },
+    ],
+}
+
+
+def test_user_agent_has_cbor_feature_id(patched_session, monkeypatch):
+    patch_load_service_model(
+        patched_session, monkeypatch, MOCK_SERVICE_MODEL, MOCK_RULESET
+    )
+    client = patched_session.create_client(
+        'mockservice', region_name='us-west-2'
+    )
+    with ClientHTTPStubber(client) as stub_client:
+        stub_client.add_response()
+        # The mock CBOR operation registers `'PROTOCOL_RPC_V2_CBOR': 'M'`
+        client.mock_operation(MockOpParam='mock-op-param-value')
+    ua_string = get_captured_ua_strings(stub_client)[0]
+    feature_list = parse_registered_feature_ids(ua_string)
+    assert 'M' in feature_list
diff -pruN 2.23.6-1/tests/functional/botocore/test_s3.py 2.31.35-1/tests/functional/botocore/test_s3.py
--- 2.23.6-1/tests/functional/botocore/test_s3.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_s3.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,7 +12,19 @@
 # language governing permissions and limitations under the License.
 import re
 
+import botocore.session
 import pytest
+from botocore import UNSIGNED
+from botocore.compat import datetime, parse_qs, urlsplit
+from botocore.config import Config
+from botocore.exceptions import (
+    ClientError,
+    ConnectionError,
+    ParamValidationError,
+    UnsupportedS3AccesspointConfigurationError,
+    UnsupportedS3ConfigurationError,
+)
+from botocore.loaders import Loader
 from dateutil.tz import tzutc
 
 from tests import (
@@ -21,22 +33,11 @@ from tests import (
     FreezeTime,
     create_session,
     mock,
-    temporary_file, unittest,
+    temporary_file,
+    unittest,
 )
 from tests.utils.botocore import get_checksum_cls
 
-import botocore.session
-from botocore.config import Config
-from botocore.compat import datetime, parse_qs, urlsplit
-from botocore.exceptions import (
-    ParamValidationError, ClientError,
-    UnsupportedS3ConfigurationError,
-    UnsupportedS3AccesspointConfigurationError,
-)
-from botocore.loaders import Loader
-from botocore import UNSIGNED
-
-
 DATE = datetime.datetime(2021, 8, 27, 0, 0, 0)
 
 
@@ -45,16 +46,16 @@ class TestS3BucketValidation(unittest.Te
         session = botocore.session.get_session()
         s3 = session.create_client('s3')
         with self.assertRaises(ParamValidationError):
-            s3.put_object(Bucket='adfgasdfadfs/bucket/name',
-                          Key='foo', Body=b'asdf')
+            s3.put_object(
+                Bucket='adfgasdfadfs/bucket/name', Key='foo', Body=b'asdf'
+            )
 
 
 class BaseS3OperationTest(BaseSessionTest):
     def setUp(self):
-        super(BaseS3OperationTest, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            's3', self.region)
+        self.client = self.session.create_client('s3', self.region)
         self.http_stubber = ClientHTTPStubber(self.client)
 
 
@@ -73,7 +74,7 @@ class BaseS3ClientConfigurationTest(Base
     )
 
     def setUp(self):
-        super(BaseS3ClientConfigurationTest, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
 
     def _get_auth_regex(self, auth_header):
@@ -112,9 +113,7 @@ class BaseS3ClientConfigurationTest(Base
         self.assertEqual(actual_endpoint, expected_endpoint)
 
     def create_s3_client(self, **kwargs):
-        client_kwargs = {
-            'region_name': self.region
-        }
+        client_kwargs = {'region_name': self.region}
         client_kwargs.update(kwargs)
         return self.session.create_client('s3', **client_kwargs)
 
@@ -132,86 +131,72 @@ class TestS3ClientConfigResolution(BaseS
     def test_client_s3_dualstack_handles_uppercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_dualstack_endpoint = True'
+                f, '[default]\n' 's3 = \n' '    use_dualstack_endpoint = True'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['use_dualstack_endpoint'], True)
+                client.meta.config.s3['use_dualstack_endpoint'], True
+            )
 
     def test_client_s3_dualstack_handles_lowercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_dualstack_endpoint = true'
+                f, '[default]\n' 's3 = \n' '    use_dualstack_endpoint = true'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['use_dualstack_endpoint'], True)
+                client.meta.config.s3['use_dualstack_endpoint'], True
+            )
 
     def test_client_s3_accelerate_handles_uppercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_accelerate_endpoint = True'
+                f, '[default]\n' 's3 = \n' '    use_accelerate_endpoint = True'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['use_accelerate_endpoint'], True)
+                client.meta.config.s3['use_accelerate_endpoint'], True
+            )
 
     def test_client_s3_accelerate_handles_lowercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_accelerate_endpoint = true'
+                f, '[default]\n' 's3 = \n' '    use_accelerate_endpoint = true'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['use_accelerate_endpoint'], True)
+                client.meta.config.s3['use_accelerate_endpoint'], True
+            )
 
     def test_client_payload_signing_enabled_handles_uppercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    payload_signing_enabled = True'
+                f, '[default]\n' 's3 = \n' '    payload_signing_enabled = True'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['payload_signing_enabled'], True)
+                client.meta.config.s3['payload_signing_enabled'], True
+            )
 
     def test_client_payload_signing_enabled_handles_lowercase_true(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    payload_signing_enabled = true'
+                f, '[default]\n' 's3 = \n' '    payload_signing_enabled = true'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['payload_signing_enabled'], True)
+                client.meta.config.s3['payload_signing_enabled'], True
+            )
 
     def test_includes_unmodeled_s3_config_vars(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    unmodeled = unmodeled_val'
+                f, '[default]\n' 's3 = \n' '    unmodeled = unmodeled_val'
             )
             client = self.create_s3_client()
             self.assertEqual(
-                client.meta.config.s3['unmodeled'], 'unmodeled_val')
+                client.meta.config.s3['unmodeled'], 'unmodeled_val'
+            )
 
     def test_mixed_modeled_and_unmodeled_config_vars(self):
         with temporary_file('w') as f:
@@ -220,15 +205,15 @@ class TestS3ClientConfigResolution(BaseS
                 '[default]\n'
                 's3 = \n'
                 '    payload_signing_enabled = true\n'
-                '    unmodeled = unmodeled_val'
+                '    unmodeled = unmodeled_val',
             )
             client = self.create_s3_client()
             self.assertEqual(
                 client.meta.config.s3,
                 {
                     'payload_signing_enabled': True,
-                    'unmodeled': 'unmodeled_val'
-                }
+                    'unmodeled': 'unmodeled_val',
+                },
             )
 
     def test_use_arn_region(self):
@@ -238,38 +223,31 @@ class TestS3ClientConfigResolution(BaseS
             client.meta.config.s3,
             {
                 'use_arn_region': True,
-            }
+            },
         )
 
     def test_use_arn_region_config_var(self):
         with temporary_file('w') as f:
-            self.set_config_file(
-                f,
-                '[default]\n'
-                's3_use_arn_region = true'
-            )
+            self.set_config_file(f, '[default]\n' 's3_use_arn_region = true')
             client = self.create_s3_client()
             self.assertEqual(
                 client.meta.config.s3,
                 {
                     'use_arn_region': True,
-                }
+                },
             )
 
     def test_use_arn_region_nested_config_var(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_arn_region = true'
+                f, '[default]\n' 's3 = \n' '    use_arn_region = true'
             )
             client = self.create_s3_client()
             self.assertEqual(
                 client.meta.config.s3,
                 {
                     'use_arn_region': True,
-                }
+                },
             )
 
     def test_use_arn_region_is_case_insensitive(self):
@@ -279,58 +257,48 @@ class TestS3ClientConfigResolution(BaseS
             client.meta.config.s3,
             {
                 'use_arn_region': True,
-            }
+            },
         )
 
     def test_use_arn_region_env_var_overrides_config_var(self):
         self.environ['AWS_S3_USE_ARN_REGION'] = 'false'
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_arn_region = true'
+                f, '[default]\n' 's3 = \n' '    use_arn_region = true'
             )
             client = self.create_s3_client()
         self.assertEqual(
             client.meta.config.s3,
             {
                 'use_arn_region': False,
-            }
+            },
         )
 
     def test_client_config_use_arn_region_overrides_env_var(self):
         self.environ['AWS_S3_USE_ARN_REGION'] = 'true'
         client = self.create_s3_client(
-            config=Config(
-                s3={'use_arn_region': False}
-            )
+            config=Config(s3={'use_arn_region': False})
         )
         self.assertEqual(
             client.meta.config.s3,
             {
                 'use_arn_region': False,
-            }
+            },
         )
 
     def test_client_config_use_arn_region_overrides_config_var(self):
         with temporary_file('w') as f:
             self.set_config_file(
-                f,
-                '[default]\n'
-                's3 = \n'
-                '    use_arn_region = true'
+                f, '[default]\n' 's3 = \n' '    use_arn_region = true'
             )
             client = self.create_s3_client(
-                config=Config(
-                    s3={'use_arn_region': False}
-                )
+                config=Config(s3={'use_arn_region': False})
             )
         self.assertEqual(
             client.meta.config.s3,
             {
                 'use_arn_region': False,
-            }
+            },
         )
 
     def test_client_region_defaults_to_aws_global(self):
@@ -347,11 +315,8 @@ class TestS3ClientConfigResolution(BaseS
 
 
 class TestS3Copy(BaseS3OperationTest):
-
     def create_s3_client(self, **kwargs):
-        client_kwargs = {
-            'region_name': self.region
-        }
+        client_kwargs = {'region_name': self.region}
         client_kwargs.update(kwargs)
         return self.session.create_client('s3', **client_kwargs)
 
@@ -472,7 +437,7 @@ class TestS3200ErrorResponse(BaseS3Opera
 
 class TestAccesspointArn(BaseS3ClientConfigurationTest):
     def setUp(self):
-        super(TestAccesspointArn, self).setUp()
+        super().setUp()
         self.client, self.http_stubber = self.create_stubbed_s3_client()
 
     def create_stubbed_s3_client(self, **kwargs):
@@ -481,12 +446,14 @@ class TestAccesspointArn(BaseS3ClientCon
         http_stubber.start()
         return client, http_stubber
 
-    def assert_expected_copy_source_header(self,
-                                           http_stubber, expected_copy_source):
+    def assert_expected_copy_source_header(
+        self, http_stubber, expected_copy_source
+    ):
         request = self.http_stubber.requests[0]
         self.assertIn('x-amz-copy-source', request.headers)
         self.assertEqual(
-            request.headers['x-amz-copy-source'], expected_copy_source)
+            request.headers['x-amz-copy-source'], expected_copy_source
+        )
 
     def add_copy_object_response(self, http_stubber):
         http_stubber.add_response(
@@ -501,23 +468,17 @@ class TestAccesspointArn(BaseS3ClientCon
         self.assertEqual(request.headers.get(header_key), expected_value)
 
     def test_missing_account_id_in_arn(self):
-        accesspoint_arn = (
-            'arn:aws:s3:us-west-2::accesspoint:myendpoint'
-        )
+        accesspoint_arn = 'arn:aws:s3:us-west-2::accesspoint:myendpoint'
         with self.assertRaises(botocore.exceptions.ParamValidationError):
             self.client.list_objects(Bucket=accesspoint_arn)
 
     def test_missing_accesspoint_name_in_arn(self):
-        accesspoint_arn = (
-            'arn:aws:s3:us-west-2:123456789012:accesspoint'
-        )
+        accesspoint_arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint'
         with self.assertRaises(botocore.exceptions.ParamValidationError):
             self.client.list_objects(Bucket=accesspoint_arn)
 
     def test_accesspoint_includes_asterisk(self):
-        accesspoint_arn = (
-            'arn:aws:s3:us-west-2:123456789012:accesspoint:*'
-        )
+        accesspoint_arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint:*'
         with self.assertRaises(botocore.exceptions.ParamValidationError):
             self.client.list_objects(Bucket=accesspoint_arn)
 
@@ -533,7 +494,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
         )
         self.client, http_stubber = self.create_stubbed_s3_client(
-            endpoint_url='https://custom.com')
+            endpoint_url='https://custom.com'
+        )
         http_stubber.add_response()
         self.client.list_objects(Bucket=accesspoint_arn)
         expected_endpoint = 'myendpoint-123456789012.custom.com'
@@ -545,7 +507,8 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, http_stubber = self.create_stubbed_s3_client(
             endpoint_url='https://custom.com',
-            config=Config(s3={'use_dualstack_endpoint': True}))
+            config=Config(s3={'use_dualstack_endpoint': True}),
+        )
         http_stubber.add_response()
         self.client.list_objects(Bucket=accesspoint_arn)
         expected_endpoint = 'myendpoint-123456789012.custom.com'
@@ -556,10 +519,11 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            config=Config(s3={'use_accelerate_endpoint': True}))
+            config=Config(s3={'use_accelerate_endpoint': True})
+        )
         with self.assertRaises(
-                botocore.exceptions.
-                UnsupportedS3AccesspointConfigurationError):
+            botocore.exceptions.UnsupportedS3AccesspointConfigurationError
+        ):
             self.client.list_objects(Bucket=accesspoint_arn)
 
     def test_accesspoint_arn_cross_partition(self):
@@ -567,10 +531,11 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            region_name='cn-north-1')
+            region_name='cn-north-1'
+        )
         with self.assertRaises(
-                botocore.exceptions.
-                UnsupportedS3AccesspointConfigurationError):
+            botocore.exceptions.UnsupportedS3AccesspointConfigurationError
+        ):
             self.client.list_objects(Bucket=accesspoint_arn)
 
     def test_accesspoint_arn_cross_partition_use_client_region(self):
@@ -579,11 +544,11 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, _ = self.create_stubbed_s3_client(
             region_name='cn-north-1',
-            config=Config(s3={'use_accelerate_endpoint': True})
+            config=Config(s3={'use_accelerate_endpoint': True}),
         )
         with self.assertRaises(
-                botocore.exceptions.
-                UnsupportedS3AccesspointConfigurationError):
+            botocore.exceptions.UnsupportedS3AccesspointConfigurationError
+        ):
             self.client.list_objects(Bucket=accesspoint_arn)
 
     def test_signs_with_arn_region(self):
@@ -591,7 +556,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name='us-east-1')
+            region_name='us-east-1'
+        )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=accesspoint_arn)
         self.assert_signing_region(self.http_stubber.requests[0], 'us-west-2')
@@ -602,7 +568,7 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
             region_name='us-east-1',
-            config=Config(s3={'use_arn_region': False})
+            config=Config(s3={'use_arn_region': False}),
         )
         self.http_stubber.add_response()
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
@@ -613,11 +579,11 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            region_name='us-east-1',
-            config=Config(signature_version='s3v4')
+            region_name='us-east-1', config=Config(signature_version='s3v4')
         )
         url = self.client.generate_presigned_url(
-            'get_object', {'Bucket': accesspoint_arn, 'Key': 'mykey'})
+            'get_object', {'Bucket': accesspoint_arn, 'Key': 'mykey'}
+        )
         self.assert_signing_region_in_url(url, 'us-west-2')
 
     def test_presign_signs_with_client_region_when_use_arn_region_false(self):
@@ -628,7 +594,7 @@ class TestAccesspointArn(BaseS3ClientCon
             region_name='us-east-1',
             config=Config(
                 signature_version='s3v4', s3={'use_arn_region': False}
-            )
+            ),
         )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.client.generate_presigned_url(
@@ -650,7 +616,7 @@ class TestAccesspointArn(BaseS3ClientCon
             expected_copy_source=(
                 b'arn%3Aaws%3As3%3Aus-west-2%3A123456789012%3Aaccesspoint%3A'
                 b'myendpoint/object/myprefix/myobject'
-            )
+            ),
         )
 
     def test_copy_source_str_with_accesspoint_arn_and_version_id(self):
@@ -668,13 +634,12 @@ class TestAccesspointArn(BaseS3ClientCon
             expected_copy_source=(
                 b'arn%3Aaws%3As3%3Aus-west-2%3A123456789012%3Aaccesspoint%3A'
                 b'myendpoint/object/myprefix/myobject?versionId=myversionid'
-            )
+            ),
         )
 
     def test_copy_source_dict_with_accesspoint_arn(self):
         copy_source = {
-            'Bucket':
-                'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint',
+            'Bucket': 'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint',
             'Key': 'myprefix/myobject',
         }
         self.client, self.http_stubber = self.create_stubbed_s3_client()
@@ -687,15 +652,14 @@ class TestAccesspointArn(BaseS3ClientCon
             expected_copy_source=(
                 b'arn%3Aaws%3As3%3Aus-west-2%3A123456789012%3Aaccesspoint%3A'
                 b'myendpoint/object/myprefix/myobject'
-            )
+            ),
         )
 
     def test_copy_source_dict_with_accesspoint_arn_and_version_id(self):
         copy_source = {
-            'Bucket':
-                'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint',
+            'Bucket': 'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint',
             'Key': 'myprefix/myobject',
-            'VersionId': 'myversionid'
+            'VersionId': 'myversionid',
         }
         self.client, self.http_stubber = self.create_stubbed_s3_client()
         self.add_copy_object_response(self.http_stubber)
@@ -707,7 +671,7 @@ class TestAccesspointArn(BaseS3ClientCon
             expected_copy_source=(
                 b'arn%3Aaws%3As3%3Aus-west-2%3A123456789012%3Aaccesspoint%3A'
                 b'myendpoint/object/myprefix/myobject?versionId=myversionid'
-            )
+            ),
         )
 
     def test_basic_outpost_arn(self):
@@ -716,7 +680,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'op-01234567890123456:accesspoint:myaccesspoint'
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name='us-east-1')
+            region_name='us-east-1'
+        )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=outpost_arn)
         request = self.http_stubber.requests[0]
@@ -737,8 +702,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'op-01234567890123456:accesspoint:myaccesspoint'
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            endpoint_url='https://custom.com',
-            region_name='us-east-1')
+            endpoint_url='https://custom.com', region_name='us-east-1'
+        )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=outpost_arn)
         request = self.http_stubber.requests[0]
@@ -758,7 +723,9 @@ class TestAccesspointArn(BaseS3ClientCon
             'myaccesspoint-123456789012.op-01234567890123456.'
             's3-outposts.us-west-2.amazonaws.com'
         )
-        expected_credentials = '20210827%2Fus-west-2%2Fs3-outposts%2Faws4_request'
+        expected_credentials = (
+            '20210827%2Fus-west-2%2Fs3-outposts%2Faws4_request'
+        )
         expected_signature = (
             'a944fbe2bfbae429f922746546d1c6f890649c88ba7826bd1d258ac13f327e09'
         )
@@ -767,8 +734,10 @@ class TestAccesspointArn(BaseS3ClientCon
             outpost_arn, 'us-west-2', config=config
         )
         self._assert_presigned_url(
-            presigned_url, expected_url,
-            expected_signature, expected_credentials
+            presigned_url,
+            expected_url,
+            expected_signature,
+            expected_credentials,
         )
 
     def test_outpost_arn_presigned_url_with_use_arn_region(self):
@@ -780,7 +749,9 @@ class TestAccesspointArn(BaseS3ClientCon
             'myaccesspoint-123456789012.op-01234567890123456.'
             's3-outposts.us-west-2.amazonaws.com'
         )
-        expected_credentials = '20210827%2Fus-west-2%2Fs3-outposts%2Faws4_request'
+        expected_credentials = (
+            '20210827%2Fus-west-2%2Fs3-outposts%2Faws4_request'
+        )
         expected_signature = (
             'a944fbe2bfbae429f922746546d1c6f890649c88ba7826bd1d258ac13f327e09'
         )
@@ -788,14 +759,16 @@ class TestAccesspointArn(BaseS3ClientCon
             signature_version='s3v4',
             s3={
                 'use_arn_region': True,
-            }
+            },
         )
         presigned_url = self._get_presigned_url(
             outpost_arn, 'us-west-2', config=config
         )
         self._assert_presigned_url(
-            presigned_url, expected_url,
-            expected_signature, expected_credentials
+            presigned_url,
+            expected_url,
+            expected_signature,
+            expected_credentials,
         )
 
     def test_outpost_arn_presigned_url_cross_region_arn(self):
@@ -807,7 +780,9 @@ class TestAccesspointArn(BaseS3ClientCon
             'myaccesspoint-123456789012.op-01234567890123456.'
             's3-outposts.us-east-1.amazonaws.com'
         )
-        expected_credentials = '20210827%2Fus-east-1%2Fs3-outposts%2Faws4_request'
+        expected_credentials = (
+            '20210827%2Fus-east-1%2Fs3-outposts%2Faws4_request'
+        )
         expected_signature = (
             '7f93df0b81f80e590d95442d579bd6cf749a35ff4bbdc6373fa669b89c7fce4e'
         )
@@ -815,14 +790,16 @@ class TestAccesspointArn(BaseS3ClientCon
             signature_version='s3v4',
             s3={
                 'use_arn_region': True,
-            }
+            },
         )
         presigned_url = self._get_presigned_url(
             outpost_arn, 'us-west-2', config=config
         )
         self._assert_presigned_url(
-            presigned_url, expected_url,
-            expected_signature, expected_credentials
+            presigned_url,
+            expected_url,
+            expected_signature,
+            expected_credentials,
         )
 
     def test_outpost_arn_with_s3_accelerate(self):
@@ -831,7 +808,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'op-01234567890123456:accesspoint:myaccesspoint'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            config=Config(s3={'use_accelerate_endpoint': True}))
+            config=Config(s3={'use_accelerate_endpoint': True})
+        )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.client.list_objects(Bucket=outpost_arn)
 
@@ -841,14 +819,13 @@ class TestAccesspointArn(BaseS3ClientCon
             'op-01234567890123456:accesspoint:myaccesspoint'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            config=Config(s3={'use_dualstack_endpoint': True}))
+            config=Config(s3={'use_dualstack_endpoint': True})
+        )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.client.list_objects(Bucket=outpost_arn)
 
     def test_incorrect_outpost_format(self):
-        outpost_arn = (
-            'arn:aws:s3-outposts:us-west-2:123456789012:outpost'
-        )
+        outpost_arn = 'arn:aws:s3-outposts:us-west-2:123456789012:outpost'
         with self.assertRaises(botocore.exceptions.ParamValidationError):
             self.client.list_objects(Bucket=outpost_arn)
 
@@ -889,7 +866,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'accesspoint/myBanner'
         )
         self.client, _ = self.create_stubbed_s3_client(
-            config=Config(s3={'use_dualstack_endpoint': True}))
+            config=Config(s3={'use_dualstack_endpoint': True})
+        )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.client.list_objects(Bucket=s3_object_lambda_arn)
 
@@ -900,7 +878,7 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, _ = self.create_stubbed_s3_client(
             region_name='fips-us-gov-west-1',
-            config=Config(s3={'use_arn_region': False})
+            config=Config(s3={'use_arn_region': False}),
         )
         expected_exception = UnsupportedS3AccesspointConfigurationError
         with self.assertRaises(expected_exception):
@@ -928,7 +906,7 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
             region_name='us-east-1',
-            config=Config(s3={'use_arn_region': False})
+            config=Config(s3={'use_arn_region': False}),
         )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=s3_object_lambda_arn)
@@ -946,7 +924,8 @@ class TestAccesspointArn(BaseS3ClientCon
             'accesspoint/myBanner'
         )
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name='us-east-1')
+            region_name='us-east-1'
+        )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=s3_object_lambda_arn)
         request = self.http_stubber.requests[0]
@@ -965,7 +944,9 @@ class TestAccesspointArn(BaseS3ClientCon
             'arn:aws:s3-outposts:us-gov-east-1:123456789012:outpost:'
             'op-01234567890123456:accesspoint:myaccesspoint'
         )
-        self.client, _ = self.create_stubbed_s3_client(region_name="fips-east-1")
+        self.client, _ = self.create_stubbed_s3_client(
+            region_name="fips-east-1"
+        )
         expected_exception = UnsupportedS3AccesspointConfigurationError
         with self.assertRaises(expected_exception):
             self.client.list_objects(Bucket=outpost_arn)
@@ -977,7 +958,7 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, _ = self.create_stubbed_s3_client(
             region_name='fips-us-gov-west-1',
-            config=Config(s3={'use_arn_region': False})
+            config=Config(s3={'use_arn_region': False}),
         )
         expected_exception = UnsupportedS3AccesspointConfigurationError
         with self.assertRaises(expected_exception):
@@ -985,7 +966,8 @@ class TestAccesspointArn(BaseS3ClientCon
 
     def test_accesspoint_fips_raise_if_fips_in_arn(self):
         s3_accesspoint_arn = (
-            "arn:aws-us-gov:s3:fips-us-gov-west-1:123456789012:" "accesspoint:myendpoint"
+            "arn:aws-us-gov:s3:fips-us-gov-west-1:123456789012:"
+            "accesspoint:myendpoint"
         )
         self.client, _ = self.create_stubbed_s3_client(
             region_name="fips-us-gov-west-1",
@@ -1000,7 +982,7 @@ class TestAccesspointArn(BaseS3ClientCon
         )
         self.client, _ = self.create_stubbed_s3_client(
             region_name='aws-global',
-            config=Config(s3={'use_arn_region': False})
+            config=Config(s3={'use_arn_region': False}),
         )
         expected_exception = UnsupportedS3AccesspointConfigurationError
         with self.assertRaises(expected_exception):
@@ -1009,15 +991,14 @@ class TestAccesspointArn(BaseS3ClientCon
         # It shouldn't raise if use_arn_region is True
         self.client, self.http_stubber = self.create_stubbed_s3_client(
             region_name='s3-external-1',
-            config=Config(s3={'use_arn_region': True})
+            config=Config(s3={'use_arn_region': True}),
         )
 
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=s3_accesspoint_arn)
         request = self.http_stubber.requests[0]
         expected_endpoint = (
-            'myendpoint-123456789012.s3-accesspoint.'
-            'us-east-1.amazonaws.com'
+            'myendpoint-123456789012.s3-accesspoint.' 'us-east-1.amazonaws.com'
         )
         self.assert_endpoint(request, expected_endpoint)
 
@@ -1031,17 +1012,25 @@ class TestAccesspointArn(BaseS3ClientCon
         self.client.list_objects(Bucket=s3_accesspoint_arn)
         request = self.http_stubber.requests[0]
         expected_endpoint = (
-            'myendpoint-123456789012.s3-accesspoint.'
-            'us-east-1.amazonaws.com'
+            'myendpoint-123456789012.s3-accesspoint.' 'us-east-1.amazonaws.com'
         )
         self.assert_endpoint(request, expected_endpoint)
 
     def test_mrap_arn_with_client_regions(self):
         mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         region_tests = [
-            ('us-east-1', 'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com'),
-            ('us-west-2', 'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com'),
-            ('aws-global', 'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com'),
+            (
+                'us-east-1',
+                'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com',
+            ),
+            (
+                'us-west-2',
+                'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com',
+            ),
+            (
+                'aws-global',
+                'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com',
+            ),
         ]
         for region, expected in region_tests:
             self._assert_mrap_endpoint(mrap_arn, region, expected)
@@ -1054,14 +1043,8 @@ class TestAccesspointArn(BaseS3ClientCon
     def test_mrap_arn_with_invalid_s3_configs(self):
         mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         config_tests = [
-            (
-              'us-west-2',
-              Config(s3={'use_dualstack_endpoint': True})
-            ),
-            (
-              'us-west-2',
-              Config(s3={'use_accelerate_endpoint': True})
-            )
+            ('us-west-2', Config(s3={'use_dualstack_endpoint': True})),
+            ('us-west-2', Config(s3={'use_accelerate_endpoint': True})),
         ]
         for region, config in config_tests:
             self._assert_mrap_config_failure(mrap_arn, region, config=config)
@@ -1081,7 +1064,9 @@ class TestAccesspointArn(BaseS3ClientCon
         mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         config = Config(s3={'s3_disable_multiregion_access_points': False})
         expected = 'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com'
-        self._assert_mrap_endpoint(mrap_arn, 'us-west-2', expected, config=config)
+        self._assert_mrap_endpoint(
+            mrap_arn, 'us-west-2', expected, config=config
+        )
 
     def test_global_arn_without_mrap_suffix(self):
         global_arn_tests = [
@@ -1113,18 +1098,24 @@ class TestAccesspointArn(BaseS3ClientCon
         mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         config = Config(s3={'s3_disable_multiregion_access_points': False})
         expected_url = 'mfzwi23gnjvgw.mrap.accesspoint.s3-global.amazonaws.com'
-        self._assert_mrap_presigned_url(mrap_arn, 'us-west-2', expected_url, config=config)
+        self._assert_mrap_presigned_url(
+            mrap_arn, 'us-west-2', expected_url, config=config
+        )
 
     def test_mrap_presigned_url_disabled(self):
         mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         config = Config(s3={'s3_disable_multiregion_access_points': True})
-        self._assert_mrap_config_presigned_failure(mrap_arn, 'us-west-2', config)
+        self._assert_mrap_config_presigned_failure(
+            mrap_arn, 'us-west-2', config
+        )
 
     def _assert_mrap_config_failure(self, arn, region, config):
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name=region, config=config)
-        with self.assertRaises(botocore.exceptions.
-                UnsupportedS3AccesspointConfigurationError):
+            region_name=region, config=config
+        )
+        with self.assertRaises(
+            botocore.exceptions.UnsupportedS3AccesspointConfigurationError
+        ):
             self.client.list_objects(Bucket=arn)
 
     @FreezeTime(botocore.auth.datetime, date=DATE)
@@ -1134,12 +1125,10 @@ class TestAccesspointArn(BaseS3ClientCon
             endpoint_url=endpoint_url,
             config=config,
             aws_access_key_id='ACCESS_KEY_ID',
-            aws_secret_access_key='SECRET_ACCESS_KEY'
+            aws_secret_access_key='SECRET_ACCESS_KEY',
         )
         presigned_url = self.client.generate_presigned_url(
-            'get_object',
-            Params={'Bucket': arn, 'Key': 'obj'},
-            ExpiresIn=900
+            'get_object', Params={'Bucket': arn, 'Key': 'obj'}, ExpiresIn=900
         )
         return presigned_url
 
@@ -1148,7 +1137,7 @@ class TestAccesspointArn(BaseS3ClientCon
         presigned_url,
         expected_url,
         expected_signature,
-        expected_credentials
+        expected_credentials,
     ):
         url_parts = urlsplit(presigned_url)
         assert url_parts.netloc == expected_url
@@ -1157,7 +1146,6 @@ class TestAccesspointArn(BaseS3ClientCon
         assert expected_signature == query_parts['X-Amz-Signature']
         assert expected_credentials in query_parts['X-Amz-Credential']
 
-
     def _assert_mrap_presigned_url(
         self, arn, region, expected, endpoint_url=None, config=None
     ):
@@ -1171,19 +1159,21 @@ class TestAccesspointArn(BaseS3ClientCon
 
     def _assert_mrap_config_presigned_failure(self, arn, region, config):
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name=region, config=config)
-        with self.assertRaises(botocore.exceptions.
-                UnsupportedS3AccesspointConfigurationError):
+            region_name=region, config=config
+        )
+        with self.assertRaises(
+            botocore.exceptions.UnsupportedS3AccesspointConfigurationError
+        ):
             self.client.generate_presigned_url(
-                'get_object',
-                Params={'Bucket': arn, 'Key': 'test_object'}
+                'get_object', Params={'Bucket': arn, 'Key': 'test_object'}
             )
 
     def _assert_mrap_endpoint(
         self, arn, region, expected, endpoint_url=None, config=None
     ):
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name=region, endpoint_url=endpoint_url, config=config)
+            region_name=region, endpoint_url=endpoint_url, config=config
+        )
         self.http_stubber.add_response()
         self.client.list_objects(Bucket=arn)
         request = self.http_stubber.requests[0]
@@ -1198,51 +1188,52 @@ class TestAccesspointArn(BaseS3ClientCon
         )
 
 
-
 class TestOnlyAsciiCharsAllowed(BaseS3OperationTest):
     def test_validates_non_ascii_chars_trigger_validation_error(self):
         self.http_stubber.add_response()
         with self.http_stubber:
             with self.assertRaises(ParamValidationError):
                 self.client.put_object(
-                    Bucket='foo', Key='bar', Metadata={
-                        'goodkey': 'good', 'non-ascii': u'\u2713'})
+                    Bucket='foo',
+                    Key='bar',
+                    Metadata={'goodkey': 'good', 'non-ascii': '\u2713'},
+                )
 
 
 class TestS3GetBucketLifecycle(BaseS3OperationTest):
     def test_multiple_transitions_returns_one(self):
         response_body = (
-            '<?xml version="1.0" ?>'
-            '<LifecycleConfiguration xmlns="http://s3.amazonaws.'
-            'com/doc/2006-03-01/">'
-            '	<Rule>'
-            '		<ID>transitionRule</ID>'
-            '		<Prefix>foo</Prefix>'
-            '		<Status>Enabled</Status>'
-            '		<Transition>'
-            '			<Days>40</Days>'
-            '			<StorageClass>STANDARD_IA</StorageClass>'
-            '		</Transition>'
-            '		<Transition>'
-            '			<Days>70</Days>'
-            '			<StorageClass>GLACIER</StorageClass>'
-            '		</Transition>'
-            '	</Rule>'
-            '	<Rule>'
-            '		<ID>noncurrentVersionRule</ID>'
-            '		<Prefix>bar</Prefix>'
-            '		<Status>Enabled</Status>'
-            '		<NoncurrentVersionTransition>'
-            '			<NoncurrentDays>40</NoncurrentDays>'
-            '			<StorageClass>STANDARD_IA</StorageClass>'
-            '		</NoncurrentVersionTransition>'
-            '		<NoncurrentVersionTransition>'
-            '			<NoncurrentDays>70</NoncurrentDays>'
-            '			<StorageClass>GLACIER</StorageClass>'
-            '		</NoncurrentVersionTransition>'
-            '	</Rule>'
-            '</LifecycleConfiguration>'
-        ).encode('utf-8')
+            b'<?xml version="1.0" ?>'
+            b'<LifecycleConfiguration xmlns="http://s3.amazonaws.'
+            b'com/doc/2006-03-01/">'
+            b'	<Rule>'
+            b'		<ID>transitionRule</ID>'
+            b'		<Prefix>foo</Prefix>'
+            b'		<Status>Enabled</Status>'
+            b'		<Transition>'
+            b'			<Days>40</Days>'
+            b'			<StorageClass>STANDARD_IA</StorageClass>'
+            b'		</Transition>'
+            b'		<Transition>'
+            b'			<Days>70</Days>'
+            b'			<StorageClass>GLACIER</StorageClass>'
+            b'		</Transition>'
+            b'	</Rule>'
+            b'	<Rule>'
+            b'		<ID>noncurrentVersionRule</ID>'
+            b'		<Prefix>bar</Prefix>'
+            b'		<Status>Enabled</Status>'
+            b'		<NoncurrentVersionTransition>'
+            b'			<NoncurrentDays>40</NoncurrentDays>'
+            b'			<StorageClass>STANDARD_IA</StorageClass>'
+            b'		</NoncurrentVersionTransition>'
+            b'		<NoncurrentVersionTransition>'
+            b'			<NoncurrentDays>70</NoncurrentDays>'
+            b'			<StorageClass>GLACIER</StorageClass>'
+            b'		</NoncurrentVersionTransition>'
+            b'	</Rule>'
+            b'</LifecycleConfiguration>'
+        )
         s3 = self.session.create_client('s3')
         with ClientHTTPStubber(s3) as http_stubber:
             http_stubber.add_response(body=response_body)
@@ -1251,11 +1242,11 @@ class TestS3GetBucketLifecycle(BaseS3Ope
         # transitions provided.
         self.assertEqual(
             response['Rules'][0]['Transition'],
-            {'Days': 40, 'StorageClass': 'STANDARD_IA'}
+            {'Days': 40, 'StorageClass': 'STANDARD_IA'},
         )
         self.assertEqual(
             response['Rules'][1]['NoncurrentVersionTransition'],
-            {'NoncurrentDays': 40, 'StorageClass': 'STANDARD_IA'}
+            {'NoncurrentDays': 40, 'StorageClass': 'STANDARD_IA'},
         )
 
 
@@ -1276,21 +1267,25 @@ class TestS3PutObject(BaseS3OperationTes
         # We are unsure of what exactly causes the response to be mangled
         # but we expect it to be how 100 continues are handled.
         non_xml_content = (
-            'x-amz-id-2: foo\r\n'
-            'x-amz-request-id: bar\n'
-            'Date: Tue, 06 Oct 2015 03:20:38 GMT\r\n'
-            'ETag: "a6d856bc171fc6aa1b236680856094e2"\r\n'
-            'Content-Length: 0\r\n'
-            'Server: AmazonS3\r\n'
-        ).encode('utf-8')
+            b'x-amz-id-2: foo\r\n'
+            b'x-amz-request-id: bar\n'
+            b'Date: Tue, 06 Oct 2015 03:20:38 GMT\r\n'
+            b'ETag: "a6d856bc171fc6aa1b236680856094e2"\r\n'
+            b'Content-Length: 0\r\n'
+            b'Server: AmazonS3\r\n'
+        )
         s3 = self.session.create_client('s3')
         with ClientHTTPStubber(s3) as http_stubber:
             http_stubber.add_response(status=500, body=non_xml_content)
             http_stubber.add_response()
-            response = s3.put_object(Bucket='mybucket', Key='mykey', Body=b'foo')
+            response = s3.put_object(
+                Bucket='mybucket', Key='mykey', Body=b'foo'
+            )
             # The first response should have been retried even though the xml is
             # invalid and eventually return the 200 response.
-            self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 200)
+            self.assertEqual(
+                response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
             self.assertEqual(len(http_stubber.requests), 2)
 
 
@@ -1340,7 +1335,8 @@ class TestWriteGetObjectResponse(BaseS3C
         regions = ['us-west-2', 'us-east-1']
         for region in regions:
             self.client, self.http_stubber = self.create_stubbed_s3_client(
-                region_name=region)
+                region_name=region
+            )
             self.http_stubber.add_response()
             self.client.write_get_object_response(
                 RequestRoute='endpoint-io.a1c1d5c7',
@@ -1351,13 +1347,14 @@ class TestWriteGetObjectResponse(BaseS3C
             self.assert_signing_region(request, region)
             expected_endpoint = (
                 'endpoint-io.a1c1d5c7.s3-object-lambda.'
-                '%s.amazonaws.com' % region
+                f'{region}.amazonaws.com'
             )
             self.assert_endpoint(request, expected_endpoint)
 
     def test_endpoint_redirection_fails_with_custom_endpoint(self):
         self.client, self.http_stubber = self.create_stubbed_s3_client(
-            region_name='us-west-2', endpoint_url="https://example.com")
+            region_name='us-west-2', endpoint_url="https://example.com"
+        )
         self.http_stubber.add_response()
         self.client.write_get_object_response(
             RequestRoute='endpoint-io.a1c1d5c7',
@@ -1384,9 +1381,10 @@ class TestWriteGetObjectResponse(BaseS3C
 
 class TestS3SigV4(BaseS3OperationTest):
     def setUp(self):
-        super(TestS3SigV4, self).setUp()
+        super().setUp()
         self.client = self.session.create_client(
-            's3', self.region, config=Config(signature_version='s3v4'))
+            's3', self.region, config=Config(signature_version='s3v4')
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
         self.http_stubber.add_response()
 
@@ -1410,6 +1408,26 @@ class TestS3SigV4(BaseS3OperationTest):
         body = self.http_stubber.requests[0].body.read()
         self.assertIn(b"x-amz-checksum-crc64nvme:LF4AWqlYyh8", body)
 
+    def test_trailing_checksum_set_with_content_length_removes_header(self):
+        with self.http_stubber:
+            self.client.put_object(
+                Bucket="foo", Key="bar", Body="baz", ContentLength=123
+            )
+        sent_headers = self.get_sent_headers()
+        self.assertEqual(sent_headers["Content-Encoding"], b"aws-chunked")
+        self.assertEqual(sent_headers["Transfer-Encoding"], b"chunked")
+        self.assertEqual(
+            sent_headers["X-Amz-Trailer"], b"x-amz-checksum-crc64nvme"
+        )
+        self.assertEqual(sent_headers["X-Amz-Decoded-Content-Length"], b"3")
+        self.assertEqual(
+            sent_headers["x-amz-content-sha256"],
+            b"STREAMING-UNSIGNED-PAYLOAD-TRAILER",
+        )
+        body = self.http_stubber.requests[0].body.read()
+        self.assertIn(b"x-amz-checksum-crc64nvme:LF4AWqlYyh8", body)
+        self.assertNotIn("Content-Length", sent_headers)
+
     def test_trailing_checksum_set_empty_body(self):
         with self.http_stubber:
             self.client.put_object(Bucket='foo', Key='bar', Body='')
@@ -1469,10 +1487,11 @@ class TestS3SigV4(BaseS3OperationTest):
         # We do not support payload signing for streaming so the `payload_signing_enabled`
         # config has no effect here.
         config = Config(
-            signature_version='s3v4',
-            s3={'payload_signing_enabled': True})
+            signature_version='s3v4', s3={'payload_signing_enabled': True}
+        )
         self.client = self.session.create_client(
-            's3', self.region, config=config)
+            's3', self.region, config=config
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
         self.http_stubber.add_response()
         with self.http_stubber:
@@ -1491,7 +1510,8 @@ class TestS3SigV4(BaseS3OperationTest):
             s3={'payload_signing_enabled': False},
         )
         self.client = self.session.create_client(
-            's3', self.region, config=config)
+            's3', self.region, config=config
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
         self.http_stubber.add_response()
         with self.http_stubber:
@@ -1555,14 +1575,24 @@ class TestS3SigV4(BaseS3OperationTest):
 
 
 class TestCanSendIntegerHeaders(BaseSessionTest):
-
     def test_int_values_with_sigv4(self):
         s3 = self.session.create_client(
-            's3', config=Config(signature_version='s3v4'))
+            "s3",
+            config=Config(
+                signature_version="s3v4",
+                request_checksum_calculation="when_required",
+            ),
+        )
         with ClientHTTPStubber(s3) as http_stubber:
             http_stubber.add_response()
-            s3.upload_part(Bucket='foo', Key='bar', Body=b'foo',
-                           UploadId='bar', PartNumber=1, ContentLength=3)
+            s3.upload_part(
+                Bucket='foo',
+                Key='bar',
+                Body=b'foo',
+                UploadId='bar',
+                PartNumber=1,
+                ContentLength=3,
+            )
             headers = http_stubber.requests[0].headers
             # Verify that the request integer value of 3 has been converted to
             # string '3'.  This also means we've made it pass the signer which
@@ -1572,12 +1602,15 @@ class TestCanSendIntegerHeaders(BaseSess
 
 class TestRegionRedirect(BaseS3OperationTest):
     def setUp(self):
-        super(TestRegionRedirect, self).setUp()
+        super().setUp()
         self.client = self.session.create_client(
-            's3', 'us-west-2', config=Config(
+            's3',
+            'us-west-2',
+            config=Config(
                 signature_version='s3v4',
                 s3={'addressing_style': 'path'},
-            ))
+            ),
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
 
         self.redirect_response = {
@@ -1594,7 +1627,7 @@ class TestRegionRedirect(BaseS3Operation
                 b'    <Bucket>foo</Bucket>'
                 b'    <Endpoint>foo.s3.eu-central-1.amazonaws.com</Endpoint>'
                 b'</Error>'
-            )
+            ),
         }
         self.bad_signing_region_response = {
             'status': 400,
@@ -1609,7 +1642,7 @@ class TestRegionRedirect(BaseS3Operation
                 b'  <RequestId>BD9AA1730D454E39</RequestId>'
                 b'  <HostId></HostId>'
                 b'</Error>'
-            )
+            ),
         }
         self.success_response = {
             'status': 200,
@@ -1624,7 +1657,7 @@ class TestRegionRedirect(BaseS3Operation
                 b'    <EncodingType>url</EncodingType>'
                 b'    <IsTruncated>false</IsTruncated>'
                 b'</ListBucketResult>'
-            )
+            ),
         }
 
     def test_region_redirect(self):
@@ -1635,12 +1668,14 @@ class TestRegionRedirect(BaseS3Operation
         self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 200)
         self.assertEqual(len(self.http_stubber.requests), 2)
 
-        initial_url = ('https://s3.us-west-2.amazonaws.com/foo'
-                       '?encoding-type=url')
+        initial_url = (
+            'https://s3.us-west-2.amazonaws.com/foo' '?encoding-type=url'
+        )
         self.assertEqual(self.http_stubber.requests[0].url, initial_url)
 
-        fixed_url = ('https://s3.eu-central-1.amazonaws.com/foo'
-                     '?encoding-type=url')
+        fixed_url = (
+            'https://s3.eu-central-1.amazonaws.com/foo' '?encoding-type=url'
+        )
         self.assertEqual(self.http_stubber.requests[1].url, fixed_url)
 
     def test_region_redirect_cache(self):
@@ -1653,22 +1688,25 @@ class TestRegionRedirect(BaseS3Operation
             second_response = self.client.list_objects(Bucket='foo')
 
         self.assertEqual(
-            first_response['ResponseMetadata']['HTTPStatusCode'], 200)
+            first_response['ResponseMetadata']['HTTPStatusCode'], 200
+        )
         self.assertEqual(
-            second_response['ResponseMetadata']['HTTPStatusCode'], 200)
+            second_response['ResponseMetadata']['HTTPStatusCode'], 200
+        )
 
         self.assertEqual(len(self.http_stubber.requests), 3)
-        initial_url = ('https://s3.us-west-2.amazonaws.com/foo'
-                       '?encoding-type=url')
+        initial_url = (
+            'https://s3.us-west-2.amazonaws.com/foo' '?encoding-type=url'
+        )
         self.assertEqual(self.http_stubber.requests[0].url, initial_url)
 
-        fixed_url = ('https://s3.eu-central-1.amazonaws.com/foo'
-                     '?encoding-type=url')
+        fixed_url = (
+            'https://s3.eu-central-1.amazonaws.com/foo' '?encoding-type=url'
+        )
         self.assertEqual(self.http_stubber.requests[1].url, fixed_url)
         self.assertEqual(self.http_stubber.requests[2].url, fixed_url)
 
     def test_resign_request_with_region_when_needed(self):
-
         # Create a client with no explicit configuration so we can
         # verify the default behavior.
         client = self.session.create_client('s3', 'us-west-2')
@@ -1677,15 +1715,19 @@ class TestRegionRedirect(BaseS3Operation
             http_stubber.add_response(**self.success_response)
             first_response = client.list_objects(Bucket='foo')
             self.assertEqual(
-                first_response['ResponseMetadata']['HTTPStatusCode'], 200)
+                first_response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
 
             self.assertEqual(len(http_stubber.requests), 2)
-            initial_url = ('https://foo.s3.us-west-2.amazonaws.com/'
-                           '?encoding-type=url')
+            initial_url = (
+                'https://foo.s3.us-west-2.amazonaws.com/' '?encoding-type=url'
+            )
             self.assertEqual(http_stubber.requests[0].url, initial_url)
 
-            fixed_url = ('https://foo.s3.eu-central-1.amazonaws.com/'
-                         '?encoding-type=url')
+            fixed_url = (
+                'https://foo.s3.eu-central-1.amazonaws.com/'
+                '?encoding-type=url'
+            )
             self.assertEqual(http_stubber.requests[1].url, fixed_url)
 
     def test_resign_request_in_us_east_1(self):
@@ -1699,13 +1741,15 @@ class TestRegionRedirect(BaseS3Operation
             http_stubber.add_response(headers=region_headers)
             http_stubber.add_response()
             response = client.head_object(Bucket='foo', Key='bar')
-            self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 200)
+            self.assertEqual(
+                response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
 
             self.assertEqual(len(http_stubber.requests), 4)
-            initial_url = ('https://foo.s3.us-east-1.amazonaws.com/bar')
+            initial_url = 'https://foo.s3.us-east-1.amazonaws.com/bar'
             self.assertEqual(http_stubber.requests[0].url, initial_url)
 
-            fixed_url = ('https://foo.s3.eu-central-1.amazonaws.com/bar')
+            fixed_url = 'https://foo.s3.eu-central-1.amazonaws.com/bar'
             self.assertEqual(http_stubber.requests[-1].url, fixed_url)
 
     def test_resign_request_in_us_east_1_fails(self):
@@ -1720,7 +1764,7 @@ class TestRegionRedirect(BaseS3Operation
             http_stubber.add_response(headers=region_headers)
             # The final request still fails with a 400.
             http_stubber.add_response(status=400)
-            with self.assertRaises(ClientError) as e:
+            with self.assertRaises(ClientError):
                 client.head_object(Bucket='foo', Key='bar')
             self.assertEqual(len(http_stubber.requests), 4)
 
@@ -1734,14 +1778,15 @@ class TestRegionRedirect(BaseS3Operation
                 self.client.list_objects(Bucket=accesspoint_arn)
             except self.client.exceptions.ClientError as e:
                 self.assertEqual(
-                    e.response['Error']['Code'], 'PermanentRedirect')
+                    e.response['Error']['Code'], 'PermanentRedirect'
+                )
             else:
                 self.fail('PermanentRedirect error should have been raised')
 
 
 class TestFipsRegionRedirect(BaseS3OperationTest):
     def setUp(self):
-        super(TestFipsRegionRedirect, self).setUp()
+        super().setUp()
         self.client = self.session.create_client(
             "s3",
             "fips-us-west-2",
@@ -1823,8 +1868,12 @@ class TestFipsRegionRedirect(BaseS3Opera
             first_response = self.client.list_objects(Bucket="foo")
             second_response = self.client.list_objects(Bucket="foo")
 
-        self.assertEqual(first_response["ResponseMetadata"]["HTTPStatusCode"], 200)
-        self.assertEqual(second_response["ResponseMetadata"]["HTTPStatusCode"], 200)
+        self.assertEqual(
+            first_response["ResponseMetadata"]["HTTPStatusCode"], 200
+        )
+        self.assertEqual(
+            second_response["ResponseMetadata"]["HTTPStatusCode"], 200
+        )
 
         self.assertEqual(len(self.http_stubber.requests), 3)
         initial_url = (
@@ -1839,7 +1888,6 @@ class TestFipsRegionRedirect(BaseS3Opera
         self.assertEqual(self.http_stubber.requests[2].url, fixed_url)
 
     def test_fips_resign_request_with_region_when_needed(self):
-
         # Create a client with no explicit configuration so we can
         # verify the default behavior.
         client = self.session.create_client("s3", "fips-us-west-2")
@@ -1847,14 +1895,20 @@ class TestFipsRegionRedirect(BaseS3Opera
             http_stubber.add_response(**self.bad_signing_region_response)
             http_stubber.add_response(**self.success_response)
             first_response = client.list_objects(Bucket="foo")
-            self.assertEqual(first_response["ResponseMetadata"]["HTTPStatusCode"], 200)
+            self.assertEqual(
+                first_response["ResponseMetadata"]["HTTPStatusCode"], 200
+            )
 
             self.assertEqual(len(http_stubber.requests), 2)
-            initial_url = "https://foo.s3-fips.us-west-2.amazonaws.com/" "?encoding-type=url"
+            initial_url = (
+                "https://foo.s3-fips.us-west-2.amazonaws.com/"
+                "?encoding-type=url"
+            )
             self.assertEqual(http_stubber.requests[0].url, initial_url)
 
             fixed_url = (
-                "https://foo.s3-fips.us-west-1.amazonaws.com/" "?encoding-type=url"
+                "https://foo.s3-fips.us-west-1.amazonaws.com/"
+                "?encoding-type=url"
             )
             self.assertEqual(http_stubber.requests[1].url, fixed_url)
 
@@ -1869,7 +1923,9 @@ class TestFipsRegionRedirect(BaseS3Opera
             http_stubber.add_response(headers=region_headers)
             http_stubber.add_response()
             response = client.head_object(Bucket="foo", Key="bar")
-            self.assertEqual(response["ResponseMetadata"]["HTTPStatusCode"], 200)
+            self.assertEqual(
+                response["ResponseMetadata"]["HTTPStatusCode"], 200
+            )
 
             self.assertEqual(len(http_stubber.requests), 4)
             initial_url = "https://foo.s3-fips.us-east-1.amazonaws.com/bar"
@@ -1896,12 +1952,16 @@ class TestFipsRegionRedirect(BaseS3Opera
 
     def test_fips_no_region_redirect_for_accesspoint(self):
         self.http_stubber.add_response(**self.redirect_response)
-        accesspoint_arn = "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint"
+        accesspoint_arn = (
+            "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint"
+        )
         with self.http_stubber:
             try:
                 self.client.list_objects(Bucket=accesspoint_arn)
             except self.client.exceptions.ClientError as e:
-                self.assertEqual(e.response["Error"]["Code"], "PermanentRedirect")
+                self.assertEqual(
+                    e.response["Error"]["Code"], "PermanentRedirect"
+                )
             else:
                 self.fail("PermanentRedirect error should have been raised")
 
@@ -1920,11 +1980,8 @@ class TestGeneratePresigned(BaseS3Operat
         config = Config(signature_version=botocore.UNSIGNED)
         client = self.session.create_client('s3', self.region, config=config)
         url = client.generate_presigned_url(
-            ClientMethod='get_object',
-            Params={
-                'Bucket': 'foo',
-                'Key': 'bar'
-            })
+            ClientMethod='get_object', Params={'Bucket': 'foo', 'Key': 'bar'}
+        )
         self.assertEqual(url, 'https://foo.s3.us-west-2.amazonaws.com/bar')
 
     def test_generate_unauthed_post(self):
@@ -1933,7 +1990,7 @@ class TestGeneratePresigned(BaseS3Operat
         parts = client.generate_presigned_post(Bucket='foo', Key='bar')
         expected = {
             'fields': {'key': 'bar'},
-            'url': 'https://foo.s3.us-west-2.amazonaws.com/'
+            'url': 'https://foo.s3.us-west-2.amazonaws.com/',
         }
         self.assertEqual(parts, expected)
 
@@ -1972,94 +2029,121 @@ class TestGeneratePresigned(BaseS3Operat
                 'Bucket': 'mybucket',
                 'Key': 'mykey',
                 'SSECustomerKey': 'a' * 32,
-                'SSECustomerAlgorithm': 'AES256'
-            }
+                'SSECustomerAlgorithm': 'AES256',
+            },
         )
         # The md5 of the sse-c key will be injected when parameters are
         # built so it should show up in the presigned url as well.
-        self.assertIn(
-            'x-amz-server-side-encryption-customer-key-md5&', url
-        )
+        self.assertIn('x-amz-server-side-encryption-customer-key-md5&', url)
 
     def test_presign_s3_accelerate(self):
-        config = Config(signature_version=botocore.UNSIGNED,
-                        s3={'use_accelerate_endpoint': True})
+        config = Config(
+            signature_version=botocore.UNSIGNED,
+            s3={'use_accelerate_endpoint': True},
+        )
         client = self.session.create_client('s3', 'us-east-1', config=config)
         url = client.generate_presigned_url(
             ClientMethod='get_object',
-            Params={'Bucket': 'mybucket', 'Key': 'mykey'}
+            Params={'Bucket': 'mybucket', 'Key': 'mykey'},
         )
         # The url should be the accelerate endpoint
         self.assertEqual(
-            'https://mybucket.s3-accelerate.amazonaws.com/mykey', url)
+            'https://mybucket.s3-accelerate.amazonaws.com/mykey', url
+        )
 
     def test_presign_s3_accelerate_fails_with_fips(self):
         config = Config(
-            signature_version=botocore.UNSIGNED, s3={"use_accelerate_endpoint": True}
+            signature_version=botocore.UNSIGNED,
+            s3={"use_accelerate_endpoint": True},
+        )
+        client = self.session.create_client(
+            "s3", "fips-us-east-1", config=config
         )
-        client = self.session.create_client("s3", "fips-us-east-1", config=config)
         expected_exception = UnsupportedS3ConfigurationError
         with self.assertRaisesRegex(
             expected_exception, "Accelerate cannot be used with FIPS"
         ):
             client.generate_presigned_url(
-                ClientMethod="get_object", Params={"Bucket": "mybucket", "Key": "mykey"}
+                ClientMethod="get_object",
+                Params={"Bucket": "mybucket", "Key": "mykey"},
             )
 
     def test_presign_post_s3_accelerate(self):
-        config = Config(signature_version=botocore.UNSIGNED,
-                        s3={'use_accelerate_endpoint': True})
+        config = Config(
+            signature_version=botocore.UNSIGNED,
+            s3={'use_accelerate_endpoint': True},
+        )
         client = self.session.create_client('s3', 'us-east-1', config=config)
-        parts = client.generate_presigned_post(
-            Bucket='mybucket', Key='mykey')
+        parts = client.generate_presigned_post(Bucket='mybucket', Key='mykey')
         # The url should be the accelerate endpoint
         expected = {
             'fields': {'key': 'mykey'},
-            'url': 'https://mybucket.s3-accelerate.amazonaws.com/'
+            'url': 'https://mybucket.s3-accelerate.amazonaws.com/',
         }
         self.assertEqual(parts, expected)
 
 
-
 def _checksum_test_cases():
-    yield ('put_bucket_tagging',
-            {"Bucket": "foo", "Tagging":{"TagSet":[]}})
-    yield ('put_bucket_lifecycle',
-            {"Bucket": "foo", "LifecycleConfiguration":{"Rules":[]}})
-    yield ('put_bucket_lifecycle_configuration',
-            {"Bucket": "foo", "LifecycleConfiguration":{"Rules":[]}})
-    yield ('put_bucket_cors',
-            {"Bucket": "foo", "CORSConfiguration":{"CORSRules": []}})
-    yield ('delete_objects',
-            {"Bucket": "foo", "Delete": {"Objects": [{"Key": "bar"}]}})
-    yield ('put_bucket_replication',
-            {"Bucket": "foo",
-             "ReplicationConfiguration": {"Role":"", "Rules": []}})
-    yield ('put_bucket_acl',
-            {"Bucket": "foo", "AccessControlPolicy":{}})
-    yield ('put_bucket_logging',
-            {"Bucket": "foo",
-             "BucketLoggingStatus":{}})
-    yield ('put_bucket_notification',
-            {"Bucket": "foo", "NotificationConfiguration":{}})
-    yield ('put_bucket_policy',
-            {"Bucket": "foo", "Policy": "<bucket-policy>"})
-    yield ('put_bucket_request_payment',
-            {"Bucket": "foo", "RequestPaymentConfiguration":{"Payer": ""}})
-    yield ('put_bucket_versioning',
-            {"Bucket": "foo", "VersioningConfiguration":{}})
-    yield ('put_bucket_website',
-            {"Bucket": "foo",
-             "WebsiteConfiguration":{}})
-    yield ('put_object_acl',
-            {"Bucket": "foo", "Key": "bar", "AccessControlPolicy":{}})
-    yield ('put_object_legal_hold',
-            {"Bucket": "foo", "Key": "bar", "LegalHold":{"Status": "ON"}})
-    yield ('put_object_retention',
-            {"Bucket": "foo", "Key": "bar",
-             "Retention":{"RetainUntilDate":"2020-11-05"}})
-    yield ('put_object_lock_configuration',
-            {"Bucket": "foo", "ObjectLockConfiguration":{}})
+    yield ('put_bucket_tagging', {"Bucket": "foo", "Tagging": {"TagSet": []}})
+    yield (
+        'put_bucket_lifecycle',
+        {"Bucket": "foo", "LifecycleConfiguration": {"Rules": []}},
+    )
+    yield (
+        'put_bucket_lifecycle_configuration',
+        {"Bucket": "foo", "LifecycleConfiguration": {"Rules": []}},
+    )
+    yield (
+        'put_bucket_cors',
+        {"Bucket": "foo", "CORSConfiguration": {"CORSRules": []}},
+    )
+    yield (
+        'delete_objects',
+        {"Bucket": "foo", "Delete": {"Objects": [{"Key": "bar"}]}},
+    )
+    yield (
+        'put_bucket_replication',
+        {
+            "Bucket": "foo",
+            "ReplicationConfiguration": {"Role": "", "Rules": []},
+        },
+    )
+    yield ('put_bucket_acl', {"Bucket": "foo", "AccessControlPolicy": {}})
+    yield ('put_bucket_logging', {"Bucket": "foo", "BucketLoggingStatus": {}})
+    yield (
+        'put_bucket_notification',
+        {"Bucket": "foo", "NotificationConfiguration": {}},
+    )
+    yield ('put_bucket_policy', {"Bucket": "foo", "Policy": "<bucket-policy>"})
+    yield (
+        'put_bucket_request_payment',
+        {"Bucket": "foo", "RequestPaymentConfiguration": {"Payer": ""}},
+    )
+    yield (
+        'put_bucket_versioning',
+        {"Bucket": "foo", "VersioningConfiguration": {}},
+    )
+    yield ('put_bucket_website', {"Bucket": "foo", "WebsiteConfiguration": {}})
+    yield (
+        'put_object_acl',
+        {"Bucket": "foo", "Key": "bar", "AccessControlPolicy": {}},
+    )
+    yield (
+        'put_object_legal_hold',
+        {"Bucket": "foo", "Key": "bar", "LegalHold": {"Status": "ON"}},
+    )
+    yield (
+        'put_object_retention',
+        {
+            "Bucket": "foo",
+            "Key": "bar",
+            "Retention": {"RetainUntilDate": "2020-11-05"},
+        },
+    )
+    yield (
+        'put_object_lock_configuration',
+        {"Bucket": "foo", "ObjectLockConfiguration": {}},
+    )
 
 
 accesspoint_arn = "arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint"
@@ -2075,7 +2159,9 @@ accesspoint_cross_region_arn_gov = (
 
 
 @pytest.mark.parametrize("operation, operation_kwargs", _checksum_test_cases())
-def test_checksums_included_in_expected_operations(operation, operation_kwargs):
+def test_checksums_included_in_expected_operations(
+    operation, operation_kwargs
+):
     """Validate expected calls include Content-MD5 header"""
     client = _create_s3_client()
     with ClientHTTPStubber(client) as stub:
@@ -2106,281 +2192,500 @@ def test_checksum_content_encoding(conte
         assert request_headers["Content-Encoding"] == expected_header
 
 
+@mock.patch('botocore.endpoint.URLLib3Session.send')
+@mock.patch('botocore.client.apply_request_checksum')
+def test_retries_reuse_request_checksum(
+    mock_apply_request_checksum, mock_urllib3_session_send
+):
+    # Force retry behavior.
+    mock_urllib3_session_send.side_effect = ConnectionError(error='Fake error')
+    op_kwargs = {
+        "Bucket": "mybucket",
+        "Key": "mykey",
+        "Body": b"foo",
+        "ChecksumAlgorithm": "CRC32",
+    }
+    s3 = _create_s3_client(
+        retries={
+            'max_attempts': 2,
+        }
+    )
+    with pytest.raises(ConnectionError):
+        s3.put_object(**op_kwargs)
+    # Ensure sending request was retried.
+    assert mock_urllib3_session_send.call_count == 2
+    # But request checksum was only calculated once.
+    assert mock_apply_request_checksum.call_count == 1
+
+
 def _s3_addressing_test_cases():
     # The default behavior for DNS compatible buckets
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 expected_url='https://bucket.s3.us-west-2.amazonaws.com/key')
-    yield dict(region='us-east-1', bucket='bucket', key='key',
-                 expected_url='https://bucket.s3.us-east-1.amazonaws.com/key')
-    yield dict(region='us-west-1', bucket='bucket', key='key',
-                 expected_url='https://bucket.s3.us-west-1.amazonaws.com/key')
-    yield dict(region='us-west-1', bucket='bucket', key='key',
-                 is_secure=False,
-                 expected_url='http://bucket.s3.us-west-1.amazonaws.com/key')
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        expected_url='https://bucket.s3.us-west-2.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-1',
+        bucket='bucket',
+        key='key',
+        expected_url='https://bucket.s3.us-west-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-1',
+        bucket='bucket',
+        key='key',
+        is_secure=False,
+        expected_url='http://bucket.s3.us-west-1.amazonaws.com/key',
+    )
 
     # Virtual host addressing is independent of signature version.
-    yield dict(region='aws-global', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url='https://bucket.s3.amazonaws.com/key')
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url=(
-                     'https://bucket.s3.us-west-2.amazonaws.com/key'))
-    yield dict(region='us-east-1', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url='https://bucket.s3.us-east-1.amazonaws.com/key')
-    yield dict(region='us-west-1', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url=(
-                     'https://bucket.s3.us-west-1.amazonaws.com/key'))
-    yield dict(region='us-west-1', bucket='bucket', key='key',
-                 signature_version='s3v4', is_secure=False,
-                 expected_url=(
-                     'http://bucket.s3.us-west-1.amazonaws.com/key'))
-    yield dict(
-        region='us-west-1', bucket='bucket-with-num-1', key='key',
-        signature_version='s3v4', is_secure=False,
-        expected_url='http://bucket-with-num-1.s3.us-west-1.amazonaws.com/key')
+    yield dict(
+        region='aws-global',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url=('https://bucket.s3.us-west-2.amazonaws.com/key'),
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url=('https://bucket.s3.us-west-1.amazonaws.com/key'),
+    )
+    yield dict(
+        region='us-west-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        is_secure=False,
+        expected_url=('http://bucket.s3.us-west-1.amazonaws.com/key'),
+    )
+    yield dict(
+        region='us-west-1',
+        bucket='bucket-with-num-1',
+        key='key',
+        signature_version='s3v4',
+        is_secure=False,
+        expected_url='http://bucket-with-num-1.s3.us-west-1.amazonaws.com/key',
+    )
 
     # Regions outside of the 'aws' partition.
     # These should still default to virtual hosted addressing
     # unless explicitly configured otherwise.
-    yield dict(region='cn-north-1', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url=(
-                     'https://bucket.s3.cn-north-1.amazonaws.com.cn/key'))
+    yield dict(
+        region='cn-north-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url=('https://bucket.s3.cn-north-1.amazonaws.com.cn/key'),
+    )
     # If the request is unsigned, we should have the default
     # fix_s3_host behavior which is to use virtual hosting where
     # possible but fall back to path style when needed.
-    yield dict(region='cn-north-1', bucket='bucket', key='key',
-                 signature_version=UNSIGNED,
-                 expected_url=(
-                     'https://bucket.s3.cn-north-1.amazonaws.com.cn/key'))
-    yield dict(region='cn-north-1', bucket='bucket.dot', key='key',
-                 signature_version=UNSIGNED,
-                 expected_url=(
-                     'https://s3.cn-north-1.amazonaws.com.cn/bucket.dot/key'))
+    yield dict(
+        region='cn-north-1',
+        bucket='bucket',
+        key='key',
+        signature_version=UNSIGNED,
+        expected_url=('https://bucket.s3.cn-north-1.amazonaws.com.cn/key'),
+    )
+    yield dict(
+        region='cn-north-1',
+        bucket='bucket.dot',
+        key='key',
+        signature_version=UNSIGNED,
+        expected_url=('https://s3.cn-north-1.amazonaws.com.cn/bucket.dot/key'),
+    )
 
     # And of course you can explicitly specify which style to use.
     virtual_hosting = {'addressing_style': 'virtual'}
-    yield dict(region='cn-north-1', bucket='bucket', key='key',
-                 signature_version=UNSIGNED,
-                 s3_config=virtual_hosting,
-                 expected_url=(
-                     'https://bucket.s3.cn-north-1.amazonaws.com.cn/key'))
+    yield dict(
+        region='cn-north-1',
+        bucket='bucket',
+        key='key',
+        signature_version=UNSIGNED,
+        s3_config=virtual_hosting,
+        expected_url=('https://bucket.s3.cn-north-1.amazonaws.com.cn/key'),
+    )
     path_style = {'addressing_style': 'path'}
-    yield dict(region='cn-north-1', bucket='bucket', key='key',
-                 signature_version=UNSIGNED,
-                 s3_config=path_style,
-                 expected_url=(
-                     'https://s3.cn-north-1.amazonaws.com.cn/bucket/key'))
+    yield dict(
+        region='cn-north-1',
+        bucket='bucket',
+        key='key',
+        signature_version=UNSIGNED,
+        s3_config=path_style,
+        expected_url=('https://s3.cn-north-1.amazonaws.com.cn/bucket/key'),
+    )
 
     # If you don't have a DNS compatible bucket, we use path style.
     yield dict(
-        region='aws-global', bucket='bucket.dot', key='key',
-        expected_url='https://s3.amazonaws.com/bucket.dot/key')
+        region='aws-global',
+        bucket='bucket.dot',
+        key='key',
+        expected_url='https://s3.amazonaws.com/bucket.dot/key',
+    )
     yield dict(
-        region='us-west-2', bucket='bucket.dot', key='key',
-        expected_url='https://s3.us-west-2.amazonaws.com/bucket.dot/key')
+        region='us-west-2',
+        bucket='bucket.dot',
+        key='key',
+        expected_url='https://s3.us-west-2.amazonaws.com/bucket.dot/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket.dot', key='key',
-        expected_url='https://s3.us-east-1.amazonaws.com/bucket.dot/key')
+        region='us-east-1',
+        bucket='bucket.dot',
+        key='key',
+        expected_url='https://s3.us-east-1.amazonaws.com/bucket.dot/key',
+    )
     yield dict(
-        region='us-east-1', bucket='BucketName', key='key',
-        expected_url='https://s3.us-east-1.amazonaws.com/BucketName/key')
+        region='us-east-1',
+        bucket='BucketName',
+        key='key',
+        expected_url='https://s3.us-east-1.amazonaws.com/BucketName/key',
+    )
     yield dict(
-        region='us-west-1', bucket='bucket_name', key='key',
-        expected_url='https://s3.us-west-1.amazonaws.com/bucket_name/key')
+        region='us-west-1',
+        bucket='bucket_name',
+        key='key',
+        expected_url='https://s3.us-west-1.amazonaws.com/bucket_name/key',
+    )
     yield dict(
-        region='us-west-1', bucket='-bucket-name', key='key',
-        expected_url='https://s3.us-west-1.amazonaws.com/-bucket-name/key')
+        region='us-west-1',
+        bucket='-bucket-name',
+        key='key',
+        expected_url='https://s3.us-west-1.amazonaws.com/-bucket-name/key',
+    )
     yield dict(
-        region='us-west-1', bucket='bucket-name-', key='key',
-        expected_url='https://s3.us-west-1.amazonaws.com/bucket-name-/key')
+        region='us-west-1',
+        bucket='bucket-name-',
+        key='key',
+        expected_url='https://s3.us-west-1.amazonaws.com/bucket-name-/key',
+    )
     yield dict(
-        region='us-west-1', bucket='aa', key='key',
-        expected_url='https://s3.us-west-1.amazonaws.com/aa/key')
+        region='us-west-1',
+        bucket='aa',
+        key='key',
+        expected_url='https://s3.us-west-1.amazonaws.com/aa/key',
+    )
     yield dict(
-        region='us-west-1', bucket='a'*64, key='key',
-        expected_url=('https://s3.us-west-1.amazonaws.com/%s/key' % ('a' * 64))
+        region='us-west-1',
+        bucket='a' * 64,
+        key='key',
+        expected_url=(
+            'https://s3.us-west-1.amazonaws.com/%s/key' % ('a' * 64)
+        ),
     )
 
     # Custom endpoint url should always be used.
     yield dict(
         customer_provided_endpoint='https://my-custom-s3/',
-        bucket='foo', key='bar',
-        expected_url='https://my-custom-s3/foo/bar')
+        bucket='foo',
+        key='bar',
+        expected_url='https://my-custom-s3/foo/bar',
+    )
     yield dict(
         customer_provided_endpoint='https://my-custom-s3/',
-        bucket='bucket.dots', key='bar',
-        expected_url='https://my-custom-s3/bucket.dots/bar')
+        bucket='bucket.dots',
+        key='bar',
+        expected_url='https://my-custom-s3/bucket.dots/bar',
+    )
     # Doesn't matter what region you specify, a custom endpoint url always
     # wins.
     yield dict(
         customer_provided_endpoint='https://my-custom-s3/',
-        region='us-west-2', bucket='foo', key='bar',
-        expected_url='https://my-custom-s3/foo/bar')
+        region='us-west-2',
+        bucket='foo',
+        key='bar',
+        expected_url='https://my-custom-s3/foo/bar',
+    )
 
     # Explicitly configuring "virtual" addressing_style.
     virtual_hosting = {'addressing_style': 'virtual'}
     yield dict(
-        region='aws-global', bucket='bucket', key='key',
+        region='aws-global',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.amazonaws.com/key')
+        expected_url='https://bucket.s3.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key')
+        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key',
+    )
     yield dict(
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.us-west-2.amazonaws.com/key')
+        expected_url='https://bucket.s3.us-west-2.amazonaws.com/key',
+    )
     yield dict(
-        region='eu-central-1', bucket='bucket', key='key',
+        region='eu-central-1',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.eu-central-1.amazonaws.com/key')
+        expected_url='https://bucket.s3.eu-central-1.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
         customer_provided_endpoint='https://foo.amazonaws.com',
-        expected_url='https://bucket.foo.amazonaws.com/key')
+        expected_url='https://bucket.foo.amazonaws.com/key',
+    )
     yield dict(
-        region='unknown', bucket='bucket', key='key',
+        region='unknown',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.unknown.amazonaws.com/key')
+        expected_url='https://bucket.s3.unknown.amazonaws.com/key',
+    )
 
     # Test us-gov with virtual addressing.
     yield dict(
-        region='us-gov-west-1', bucket='bucket', key='key',
+        region='us-gov-west-1',
+        bucket='bucket',
+        key='key',
         s3_config=virtual_hosting,
-        expected_url='https://bucket.s3.us-gov-west-1.amazonaws.com/key')
+        expected_url='https://bucket.s3.us-gov-west-1.amazonaws.com/key',
+    )
 
     # Test path style addressing.
     path_style = {'addressing_style': 'path'}
     yield dict(
-        region='aws-global', bucket='bucket', key='key',
+        region='aws-global',
+        bucket='bucket',
+        key='key',
         s3_config=path_style,
-        expected_url='https://s3.amazonaws.com/bucket/key')
+        expected_url='https://s3.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=path_style,
-        expected_url='https://s3.us-east-1.amazonaws.com/bucket/key')
+        expected_url='https://s3.us-east-1.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=path_style,
         customer_provided_endpoint='https://foo.amazonaws.com/',
-        expected_url='https://foo.amazonaws.com/bucket/key')
+        expected_url='https://foo.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='unknown', bucket='bucket', key='key',
+        region='unknown',
+        bucket='bucket',
+        key='key',
         s3_config=path_style,
-        expected_url='https://s3.unknown.amazonaws.com/bucket/key')
+        expected_url='https://s3.unknown.amazonaws.com/bucket/key',
+    )
 
     # S3 accelerate
     use_accelerate = {'use_accelerate_endpoint': True}
     yield dict(
-        region='aws-global', bucket='bucket', key='key',
+        region='aws-global',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate,
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate,
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
     yield dict(
         # region is ignored with S3 accelerate.
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate,
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
     # Provided endpoints still get recognized as accelerate endpoints.
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         customer_provided_endpoint='https://s3-accelerate.amazonaws.com',
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         customer_provided_endpoint='http://s3-accelerate.amazonaws.com',
-        expected_url='http://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='http://bucket.s3-accelerate.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        s3_config=use_accelerate, is_secure=False,
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        s3_config=use_accelerate,
+        is_secure=False,
         # Note we're using http://  because is_secure=False.
-        expected_url='http://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='http://bucket.s3-accelerate.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # s3-accelerate must be the first part of the url.
         customer_provided_endpoint='https://foo.s3-accelerate.amazonaws.com',
-        expected_url='https://foo.s3-accelerate.amazonaws.com/bucket/key')
+        expected_url='https://foo.s3-accelerate.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # The endpoint must be an Amazon endpoint.
         customer_provided_endpoint='https://s3-accelerate.notamazon.com',
-        expected_url='https://s3-accelerate.notamazon.com/bucket/key')
+        expected_url='https://s3-accelerate.notamazon.com/bucket/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # Extra components must be whitelisted.
         customer_provided_endpoint='https://s3-accelerate.foo.amazonaws.com',
-        expected_url='https://s3-accelerate.foo.amazonaws.com/bucket/key')
+        expected_url='https://s3-accelerate.foo.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='unknown', bucket='bucket', key='key',
+        region='unknown',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate,
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
     # Use virtual even if path is specified for s3 accelerate because
     # path style will not work with S3 accelerate.
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        s3_config={'use_accelerate_endpoint': True,
-                   'addressing_style': 'path'},
-        expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        s3_config={
+            'use_accelerate_endpoint': True,
+            'addressing_style': 'path',
+        },
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
 
     # S3 dual stack endpoints.
     use_dualstack = {'use_dualstack_endpoint': True}
     yield dict(
-        region=None, bucket='bucket', key='key',
+        region=None,
+        bucket='bucket',
+        key='key',
         s3_config=use_dualstack,
         # Uses us-east-1 for no region set.
-        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key')
+        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key',
+    )
     yield dict(
-        region='aws-global', bucket='bucket', key='key',
+        region='aws-global',
+        bucket='bucket',
+        key='key',
         s3_config=use_dualstack,
         # The aws-global pseudo region does not support dualstack and should
         # be resolved to us-east-1.
         expected_url=(
-            "https://bucket.s3.dualstack.us-east-1.amazonaws.com/key"))
+            "https://bucket.s3.dualstack.us-east-1.amazonaws.com/key"
+        ),
+    )
     yield dict(
-        region=None, bucket='bucket', key='key',
-        s3_config=use_dualstack, signature_version='s3v4',
-        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key')
+        region=None,
+        bucket='bucket',
+        key='key',
+        s3_config=use_dualstack,
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key',
+    )
     yield dict(
-        region='aws-global', bucket='bucket', key='key',
-        s3_config=use_dualstack, signature_version='s3v4',
+        region='aws-global',
+        bucket='bucket',
+        key='key',
+        s3_config=use_dualstack,
+        signature_version='s3v4',
         # The aws-global pseudo region does not support dualstack and should
         # be resolved to us-east-1.
-        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key')
+        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        s3_config=use_dualstack,
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        s3_config=use_dualstack,
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        s3_config=use_dualstack, signature_version='s3v4',
-        expected_url='https://bucket.s3.dualstack.us-east-1.amazonaws.com/key')
-    yield dict(
-        region='us-west-2', bucket='bucket', key='key',
-        s3_config=use_dualstack, signature_version='s3v4',
-        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key')
-    yield dict(
-        region='unknown', bucket='bucket', key='key',
-        s3_config=use_dualstack, signature_version='s3v4',
-        expected_url='https://bucket.s3.dualstack.unknown.amazonaws.com/key')
+        region='unknown',
+        bucket='bucket',
+        key='key',
+        s3_config=use_dualstack,
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.dualstack.unknown.amazonaws.com/key',
+    )
     # Non DNS compatible buckets use path style for dual stack.
     yield dict(
-        region='us-west-2', bucket='bucket.dot', key='key',
+        region='us-west-2',
+        bucket='bucket.dot',
+        key='key',
         s3_config=use_dualstack,
         # Still default to virtual hosted when possible.
         expected_url=(
-            'https://s3.dualstack.us-west-2.amazonaws.com/bucket.dot/key'))
+            'https://s3.dualstack.us-west-2.amazonaws.com/bucket.dot/key'
+        ),
+    )
     # Supports is_secure (use_ssl=False in create_client()).
     yield dict(
-        region='us-west-2', bucket='bucket.dot', key='key', is_secure=False,
+        region='us-west-2',
+        bucket='bucket.dot',
+        key='key',
+        is_secure=False,
         s3_config=use_dualstack,
         # Still default to virtual hosted when possible.
         expected_url=(
-            'http://s3.dualstack.us-west-2.amazonaws.com/bucket.dot/key'))
+            'http://s3.dualstack.us-west-2.amazonaws.com/bucket.dot/key'
+        ),
+    )
 
     # Is path style is requested, we should use it, even if the bucket is
     # DNS compatible.
@@ -2389,10 +2694,13 @@ def _s3_addressing_test_cases():
         'addressing_style': 'path',
     }
     yield dict(
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         s3_config=force_path_style,
         # Still default to virtual hosted when possible.
-        expected_url='https://s3.dualstack.us-west-2.amazonaws.com/bucket/key')
+        expected_url='https://s3.dualstack.us-west-2.amazonaws.com/bucket/key',
+    )
 
     # Accelerate + dual stack
     use_accelerate_dualstack = {
@@ -2400,161 +2708,224 @@ def _s3_addressing_test_cases():
         'use_dualstack_endpoint': True,
     }
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate_dualstack,
         expected_url=(
-            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
     yield dict(
         # Region is ignored with S3 accelerate.
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate_dualstack,
         expected_url=(
-            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
     # Only s3-accelerate overrides a customer endpoint.
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=use_dualstack,
         customer_provided_endpoint='https://s3-accelerate.amazonaws.com',
-        expected_url=(
-            'https://bucket.s3-accelerate.amazonaws.com/key'))
+        expected_url=('https://bucket.s3-accelerate.amazonaws.com/key'),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # Dualstack is whitelisted.
         customer_provided_endpoint=(
-            'https://s3-accelerate.dualstack.amazonaws.com'),
+            'https://s3-accelerate.dualstack.amazonaws.com'
+        ),
         expected_url=(
-            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # Even whitelisted parts cannot be duplicated.
         customer_provided_endpoint=(
-            'https://s3-accelerate.dualstack.dualstack.amazonaws.com'),
+            'https://s3-accelerate.dualstack.dualstack.amazonaws.com'
+        ),
         expected_url=(
             'https://s3-accelerate.dualstack.dualstack'
-            '.amazonaws.com/bucket/key'))
+            '.amazonaws.com/bucket/key'
+        ),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # More than two extra parts is not allowed.
         customer_provided_endpoint=(
             'https://s3-accelerate.dualstack.dualstack.dualstack'
-            '.amazonaws.com'),
+            '.amazonaws.com'
+        ),
         expected_url=(
             'https://s3-accelerate.dualstack.dualstack.dualstack.amazonaws.com'
-            '/bucket/key'))
+            '/bucket/key'
+        ),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         # Extra components must be whitelisted.
         customer_provided_endpoint='https://s3-accelerate.foo.amazonaws.com',
-        expected_url='https://s3-accelerate.foo.amazonaws.com/bucket/key')
+        expected_url='https://s3-accelerate.foo.amazonaws.com/bucket/key',
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        s3_config=use_accelerate_dualstack, is_secure=False,
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        s3_config=use_accelerate_dualstack,
+        is_secure=False,
         # Note we're using http://  because is_secure=False.
         expected_url=(
-            'http://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'http://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
     # Use virtual even if path is specified for s3 accelerate because
     # path style will not work with S3 accelerate.
     use_accelerate_dualstack['addressing_style'] = 'path'
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config=use_accelerate_dualstack,
         expected_url=(
-            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
 
     # Access-point arn cases
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'use_arn_region': True},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='myendpoint/key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='myendpoint/key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/myendpoint/key'
-        )
+        ),
     )
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='foo/myendpoint/key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='foo/myendpoint/key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/foo/myendpoint/key'
-        )
+        ),
     )
     yield dict(
         # Note: The access-point arn has us-west-2 and the client's region is
         # us-east-1, for the defauldict the access-point arn region is used.
-        region='us-east-1', bucket=accesspoint_arn, key='key',
+        region='us-east-1',
+        bucket=accesspoint_arn,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='s3-external-1', bucket=accesspoint_arn, key='key',
+        region='s3-external-1',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'use_arn_region': True},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
 
     yield dict(
-        region='aws-global', bucket=accesspoint_arn, key='key',
+        region='aws-global',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'use_arn_region': True},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='unknown', bucket=accesspoint_arn, key='key',
+        region='unknown',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'use_arn_region': True},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='cn-north-1', bucket=accesspoint_arn_cn, key='key',
+        region='cn-north-1',
+        bucket=accesspoint_arn_cn,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'cn-north-1.amazonaws.com.cn/key'
-        )
+        ),
     )
     yield dict(
-        region='cn-northwest-1', bucket=accesspoint_arn_cn, key='key',
+        region='cn-northwest-1',
+        bucket=accesspoint_arn_cn,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'cn-north-1.amazonaws.com.cn/key'
-        )
+        ),
     )
     yield dict(
-        region='us-gov-west-1', bucket=accesspoint_arn_gov, key='key',
+        region='us-gov-west-1',
+        bucket=accesspoint_arn_gov,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-gov-west-1.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='fips-us-gov-west-1', bucket=accesspoint_arn_gov, key='key',
+        region='fips-us-gov-west-1',
+        bucket=accesspoint_arn_gov,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint-fips.'
             'us-gov-west-1.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='fips-us-gov-west-1', bucket=accesspoint_arn_gov, key='key',
+        region='fips-us-gov-west-1',
+        bucket=accesspoint_arn_gov,
+        key='key',
         s3_config={'use_arn_region': False},
         expected_url=(
             "https://myendpoint-123456789012.s3-accesspoint-fips."
@@ -2595,37 +2966,46 @@ def _s3_addressing_test_cases():
     )
 
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key', is_secure=False,
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
+        is_secure=False,
         expected_url=(
             'http://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     # Dual-stack with access-point arn
     yield dict(
         # Note: The access-point arn has us-west-2 and the client's region is
         # us-east-1, for the defauldict the access-point arn region is used.
-        region='us-east-1', bucket=accesspoint_arn, key='key',
+        region='us-east-1',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={
             'use_dualstack_endpoint': True,
         },
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.dualstack.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='us-gov-west-1', bucket=accesspoint_arn_gov, key='key',
+        region='us-gov-west-1',
+        bucket=accesspoint_arn_gov,
+        key='key',
         s3_config={
             'use_dualstack_endpoint': True,
         },
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.dualstack.'
             'us-gov-west-1.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='fips-us-gov-west-1', bucket=accesspoint_arn_gov, key='key',
+        region='fips-us-gov-west-1',
+        bucket=accesspoint_arn_gov,
+        key='key',
         s3_config={
             'use_arn_region': True,
             'use_dualstack_endpoint': True,
@@ -2633,80 +3013,104 @@ def _s3_addressing_test_cases():
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint-fips.dualstack.'
             'us-gov-west-1.amazonaws.com/key'
-        )
+        ),
     )
     # None of the various s3 settings related to paths should affect what
     # endpoint to use when an access-point is provided.
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'addressing_style': 'auto'},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'addressing_style': 'virtual'},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         s3_config={'addressing_style': 'path'},
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
 
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        expected_url=(
-            'https://bucket.s3.us-east-1.amazonaws.com/key'))
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        expected_url=('https://bucket.s3.us-east-1.amazonaws.com/key'),
+    )
     yield dict(
-        region='us-west-2', bucket='bucket', key='key',
-        expected_url=(
-            'https://bucket.s3.us-west-2.amazonaws.com/key'))
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        expected_url=('https://bucket.s3.us-west-2.amazonaws.com/key'),
+    )
     yield dict(
-        region=None, bucket='bucket', key='key',
-        expected_url=(
-            'https://bucket.s3.amazonaws.com/key'))
+        region=None,
+        bucket='bucket',
+        key='key',
+        expected_url=('https://bucket.s3.amazonaws.com/key'),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config={
             'use_dualstack_endpoint': True,
         },
         expected_url=(
-            'https://bucket.s3.dualstack.us-east-1.amazonaws.com/key'))
+            'https://bucket.s3.dualstack.us-east-1.amazonaws.com/key'
+        ),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config={
             'use_accelerate_endpoint': True,
         },
-        expected_url=(
-            'https://bucket.s3-accelerate.amazonaws.com/key'))
+        expected_url=('https://bucket.s3-accelerate.amazonaws.com/key'),
+    )
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
         s3_config={
             'use_accelerate_endpoint': True,
             'use_dualstack_endpoint': True,
         },
         expected_url=(
-            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'))
+            'https://bucket.s3-accelerate.dualstack.amazonaws.com/key'
+        ),
+    )
 
     s3_object_lambda_arn_gov = (
         'arn:aws-us-gov:s3-object-lambda:us-gov-west-1:'
         '123456789012:accesspoint:mybanner'
     )
     yield dict(
-        region='fips-us-gov-west-1', bucket=s3_object_lambda_arn_gov, key='key',
+        region='fips-us-gov-west-1',
+        bucket=s3_object_lambda_arn_gov,
+        key='key',
         expected_url=(
             'https://mybanner-123456789012.s3-object-lambda-fips.'
             'us-gov-west-1.amazonaws.com/key'
-        )
+        ),
     )
     yield dict(
         region="us-gov-west-1",
@@ -2749,12 +3153,14 @@ def _s3_addressing_test_cases():
         "123456789012:accesspoint:mybanner"
     )
     yield dict(
-        region='aws-global', bucket=s3_object_lambda_arn, key='key',
+        region='aws-global',
+        bucket=s3_object_lambda_arn,
+        key='key',
         s3_config={'use_arn_region': True},
         expected_url=(
             'https://mybanner-123456789012.s3-object-lambda.'
             'us-east-1.amazonaws.com/key'
-        )
+        ),
     )
 
 
@@ -2825,7 +3231,7 @@ def _verify_expected_endpoint_url(
     customer_provided_endpoint=None,
     expected_url=None,
     signature_version=None,
-    use_fips_endpoint=None
+    use_fips_endpoint=None,
 ):
     s3 = _create_s3_client(
         region=region,
@@ -2876,6 +3282,7 @@ def _create_s3_client(
     s3_config=None,
     signature_version='s3v4',
     use_fips_endpoint=None,
+    retries=None,
 ):
     environ = {}
     with mock.patch('os.environ', environ):
@@ -2889,103 +3296,171 @@ def _create_s3_client(
             signature_version=signature_version,
             s3=s3_config,
             use_fips_endpoint=use_fips_endpoint,
+            retries=retries,
+        )
+        s3 = session.create_client(
+            's3',
+            region_name=region,
+            use_ssl=is_secure,
+            config=config,
+            endpoint_url=endpoint_url,
         )
-        s3 = session.create_client('s3', region_name=region, use_ssl=is_secure,
-                                   config=config,
-                                   endpoint_url=endpoint_url)
         return s3
 
 
-
 def _addressing_for_presigned_url_test_cases():
+    yield dict(
+        region=None,
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.amazonaws.com/key',
+    )
+    yield dict(
+        region='aws-global',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.us-east-1.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        s3_config={'addressing_style': 'path'},
+        expected_url='https://s3.us-east-1.amazonaws.com/bucket/key',
+    )
 
-    yield dict(region=None, bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.amazonaws.com/key')
-    yield dict(region='aws-global', bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.amazonaws.com/key')
-    yield dict(region='us-east-1', bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.us-east-1.amazonaws.com/key')
-    yield dict(region='us-east-1', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url='https://bucket.s3.us-east-1.amazonaws.com/key')
-    yield dict(region='us-east-1', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 s3_config={'addressing_style': 'path'},
-                 expected_url='https://s3.us-east-1.amazonaws.com/bucket/key')
-
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.us-west-2.amazonaws.com/key')
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url='https://bucket.s3.us-west-2.amazonaws.com/key')
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 s3_config={'addressing_style': 'path'},
-                 expected_url='https://s3.us-west-2.amazonaws.com/bucket/key')
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.us-west-2.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.us-west-2.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        s3_config={'addressing_style': 'path'},
+        expected_url='https://s3.us-west-2.amazonaws.com/bucket/key',
+    )
 
     # An 's3v4' only region.
-    yield dict(region='us-east-2', bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.us-east-2.amazonaws.com/key')
-    yield dict(region='us-east-2', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 expected_url='https://bucket.s3.us-east-2.amazonaws.com/key')
-    yield dict(region='us-east-2', bucket='bucket', key='key',
-                 signature_version='s3v4',
-                 s3_config={'addressing_style': 'path'},
-                 expected_url='https://s3.us-east-2.amazonaws.com/bucket/key')
+    yield dict(
+        region='us-east-2',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.us-east-2.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-2',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        expected_url='https://bucket.s3.us-east-2.amazonaws.com/key',
+    )
+    yield dict(
+        region='us-east-2',
+        bucket='bucket',
+        key='key',
+        signature_version='s3v4',
+        s3_config={'addressing_style': 'path'},
+        expected_url='https://s3.us-east-2.amazonaws.com/bucket/key',
+    )
 
     # Dualstack endpoints
     yield dict(
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         signature_version=None,
         s3_config={'use_dualstack_endpoint': True},
-        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key')
+        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key',
+    )
     yield dict(
-        region='us-west-2', bucket='bucket', key='key',
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
         signature_version='s3v4',
         s3_config={'use_dualstack_endpoint': True},
-        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key')
+        expected_url='https://bucket.s3.dualstack.us-west-2.amazonaws.com/key',
+    )
 
     # Accelerate
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version=None,
-                 s3_config={'use_accelerate_endpoint': True},
-                 expected_url='https://bucket.s3-accelerate.amazonaws.com/key')
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        s3_config={'use_accelerate_endpoint': True},
+        expected_url='https://bucket.s3-accelerate.amazonaws.com/key',
+    )
 
     # A region that we don't know about.
-    yield dict(region='boto-west-1', bucket='bucket', key='key',
-                 signature_version=None,
-                 expected_url='https://bucket.s3.boto-west-1.amazonaws.com/key')
+    yield dict(
+        region='boto-west-1',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        expected_url='https://bucket.s3.boto-west-1.amazonaws.com/key',
+    )
 
     # Customer provided URL results in us leaving the host untouched.
-    yield dict(region='us-west-2', bucket='bucket', key='key',
-                 signature_version=None,
-                 customer_provided_endpoint='https://foo.com/',
-                 expected_url='https://foo.com/bucket/key')
+    yield dict(
+        region='us-west-2',
+        bucket='bucket',
+        key='key',
+        signature_version=None,
+        customer_provided_endpoint='https://foo.com/',
+        expected_url='https://foo.com/bucket/key',
+    )
 
     # Access-point
     yield dict(
-        region='us-west-2', bucket=accesspoint_arn, key='key',
+        region='us-west-2',
+        bucket=accesspoint_arn,
+        key='key',
         expected_url=(
             'https://myendpoint-123456789012.s3-accesspoint.'
             'us-west-2.amazonaws.com/key'
-        )
+        ),
     )
 
     # Use us-east-1 regional endpoint configuration cases
-    us_east_1_regional_endpoint = {
-        'us_east_1_regional_endpoint': 'regional'
-    }
+    us_east_1_regional_endpoint = {'us_east_1_regional_endpoint': 'regional'}
     yield dict(
-        region='us-east-1', bucket='bucket', key='key',
-        s3_config=us_east_1_regional_endpoint, signature_version='s3v4',
-        expected_url=(
-            'https://bucket.s3.us-east-1.amazonaws.com/key'))
+        region='us-east-1',
+        bucket='bucket',
+        key='key',
+        s3_config=us_east_1_regional_endpoint,
+        signature_version='s3v4',
+        expected_url=('https://bucket.s3.us-east-1.amazonaws.com/key'),
+    )
     # Bucket names that contain dots or are otherwise not virtual host style
     # compatible should always resolve to a regional endpoint.
     # https://github.com/boto/botocore/issues/2798
@@ -2998,7 +3473,9 @@ def _addressing_for_presigned_url_test_c
     )
 
 
-@pytest.mark.parametrize("test_case", _addressing_for_presigned_url_test_cases())
+@pytest.mark.parametrize(
+    "test_case", _addressing_for_presigned_url_test_cases()
+)
 def test_addressing_for_presigned_urls(test_case):
     # Here we're just focusing on the addressing mode used for presigned URLs.
     # We special case presigned URLs due to backward compatibility.
@@ -3006,19 +3483,29 @@ def test_addressing_for_presigned_urls(t
 
 
 def _verify_presigned_url_addressing(
-    region=None, bucket='bucket', key='key', s3_config=None, is_secure=True,
-    customer_provided_endpoint=None, expected_url=None, signature_version=None
+    region=None,
+    bucket='bucket',
+    key='key',
+    s3_config=None,
+    is_secure=True,
+    customer_provided_endpoint=None,
+    expected_url=None,
+    signature_version=None,
 ):
-    s3 = _create_s3_client(region=region, is_secure=is_secure,
-                           endpoint_url=customer_provided_endpoint,
-                           s3_config=s3_config,
-                           signature_version=signature_version)
+    s3 = _create_s3_client(
+        region=region,
+        is_secure=is_secure,
+        endpoint_url=customer_provided_endpoint,
+        s3_config=s3_config,
+        signature_version=signature_version,
+    )
     url = s3.generate_presigned_url(
-        'get_object', {'Bucket': bucket, 'Key': key})
+        'get_object', {'Bucket': bucket, 'Key': key}
+    )
     # We're not trying to verify the params for URL presigning,
     # those are tested elsewhere.  We just care about the hostname/path.
     parts = urlsplit(url)
-    actual = '%s://%s%s' % parts[:3]
+    actual = '{}://{}{}'.format(*parts[:3])
     assert actual == expected_url
 
 
@@ -3031,7 +3518,8 @@ class TestRequestPayerObjectTagging(Base
         self.assertIn('x-amz-request-payer', request.headers)
 
     def test_can_provide_request_payer_put_tagging(self):
-        self._assert_request_payer_header('put_object_tagging',
+        self._assert_request_payer_header(
+            'put_object_tagging',
             Bucket='bucket',
             Key='key',
             RequestPayer='requester',
@@ -3039,7 +3527,8 @@ class TestRequestPayerObjectTagging(Base
         )
 
     def test_can_provide_request_payer_get_tagging(self):
-        self._assert_request_payer_header('get_object_tagging',
+        self._assert_request_payer_header(
+            'get_object_tagging',
             Bucket='bucket',
             Key='key',
             RequestPayer='requester',
@@ -3057,11 +3546,9 @@ class TestS3XMLPayloadEscape(BaseS3Opera
     def test_escape_keys_in_xml_delete_objects(self):
         self.http_stubber.add_response()
         with self.http_stubber:
-            response = self.client.delete_objects(
+            self.client.delete_objects(
                 Bucket='mybucket',
-                Delete={
-                    'Objects': [{'Key': 'some\r\n\rkey'}]
-                },
+                Delete={'Objects': [{'Key': 'some\r\n\rkey'}]},
             )
         request = self.http_stubber.requests[0]
         self.assertNotIn(b'\r\n\r', request.body)
@@ -3071,14 +3558,16 @@ class TestS3XMLPayloadEscape(BaseS3Opera
     def test_escape_keys_in_xml_put_bucket_lifecycle_configuration(self):
         self.http_stubber.add_response()
         with self.http_stubber:
-            response = self.client.put_bucket_lifecycle_configuration(
+            self.client.put_bucket_lifecycle_configuration(
                 Bucket='mybucket',
                 LifecycleConfiguration={
-                    'Rules': [{
-                        'Prefix': 'my\r\n\rprefix',
-                        'Status': 'ENABLED',
-                    }]
-                }
+                    'Rules': [
+                        {
+                            'Prefix': 'my\r\n\rprefix',
+                            'Status': 'ENABLED',
+                        }
+                    ]
+                },
             )
         request = self.http_stubber.requests[0]
         self.assertNotIn(b'my\r\n\rprefix', request.body)
diff -pruN 2.23.6-1/tests/functional/botocore/test_s3_control.py 2.31.35-1/tests/functional/botocore/test_s3_control.py
--- 2.23.6-1/tests/functional/botocore/test_s3_control.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_s3_control.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,20 +10,20 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, mock, BaseSessionTest, create_session
-
-from botocore.config import Config
 from botocore.awsrequest import AWSResponse
+from botocore.config import Config
+
+from tests import BaseSessionTest, create_session, mock, unittest
 
 
 class S3ControlOperationTest(BaseSessionTest):
     def setUp(self):
-        super(S3ControlOperationTest, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            's3control', self.region)
+        self.client = self.session.create_client('s3control', self.region)
         self.session_send_patch = mock.patch(
-            'botocore.endpoint.Endpoint._send')
+            'botocore.endpoint.Endpoint._send'
+        )
         self.http_session_send_mock = self.session_send_patch.start()
         self.http_response = mock.Mock(spec=AWSResponse)
         self.http_response.status_code = 200
@@ -40,8 +40,11 @@ class S3ControlOperationTest(BaseSession
         self.assertEqual(self.http_session_send_mock.call_count, 1)
         request = self.http_session_send_mock.call_args_list[0][0][0]
 
-        self.assertTrue(request.url.startswith(
-            'https://123.s3-control.us-west-2.amazonaws.com'))
+        self.assertTrue(
+            request.url.startswith(
+                'https://123.s3-control.us-west-2.amazonaws.com'
+            )
+        )
 
     def test_does_not_remove_account_id_from_headers(self):
         self.client.get_public_access_block(AccountId='123')
@@ -54,13 +57,16 @@ class S3ControlOperationTest(BaseSession
         # Re-create the client with the use_dualstack_endpoint configuration
         # option set to True.
         self.client = self.session.create_client(
-            's3control', self.region, config=Config(
-                s3={'use_dualstack_endpoint': True}
-            )
+            's3control',
+            self.region,
+            config=Config(s3={'use_dualstack_endpoint': True}),
         )
         self.client.get_public_access_block(AccountId='123')
 
         self.assertEqual(self.http_session_send_mock.call_count, 1)
         request = self.http_session_send_mock.call_args_list[0][0][0]
-        self.assertTrue(request.url.startswith(
-            'https://123.s3-control.dualstack.us-west-2.amazonaws.com'))
+        self.assertTrue(
+            request.url.startswith(
+                'https://123.s3-control.dualstack.us-west-2.amazonaws.com'
+            )
+        )
diff -pruN 2.23.6-1/tests/functional/botocore/test_s3_control_redirects.py 2.31.35-1/tests/functional/botocore/test_s3_control_redirects.py
--- 2.23.6-1/tests/functional/botocore/test_s3_control_redirects.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_s3_control_redirects.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,20 +14,18 @@ import re
 from contextlib import contextmanager
 
 import pytest
-
-from tests import unittest, mock, BaseSessionTest, ClientHTTPStubber
-
 from botocore import exceptions
+from botocore.awsrequest import AWSResponse
+from botocore.compat import urlsplit
+from botocore.config import Config
 from botocore.exceptions import (
-    UnsupportedS3ControlArnError,
     InvalidHostLabelError,
     ParamValidationError,
+    UnsupportedS3ControlArnError,
 )
 from botocore.session import Session
-from botocore.compat import urlsplit
-from botocore.config import Config
-from botocore.awsrequest import AWSResponse
 
+from tests import BaseSessionTest, ClientHTTPStubber, mock, unittest
 
 ACCESSPOINT_ARN_TEST_CASES = [
     # Outpost accesspoint arn test cases
@@ -45,7 +43,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -58,7 +56,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -66,7 +64,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
         'config': {'s3': {'use_arn_region': False}},
         'assertions': {
             'exception': 'UnsupportedS3ControlConfigurationError',
-        }
+        },
     },
     {
         'arn': 'arn:aws-cn:s3-outposts:cn-north-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -74,7 +72,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
         'config': {'s3': {'use_arn_region': True}},
         'assertions': {
             'exception': 'UnsupportedS3ControlConfigurationError',
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -87,7 +85,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -100,15 +98,15 @@ ACCESSPOINT_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
-       'arn': 'arn:aws-us-gov:s3-outposts:fips-us-gov-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
-       'region': 'fips-us-gov-east-1',
-       'config': {'s3': {'use_arn_region': True}},
-       'assertions': {
-           'exception': 'UnsupportedS3ControlArnError',
-       }
+        'arn': 'arn:aws-us-gov:s3-outposts:fips-us-gov-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
+        'region': 'fips-us-gov-east-1',
+        'config': {'s3': {'use_arn_region': True}},
+        'assertions': {
+            'exception': 'UnsupportedS3ControlArnError',
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -121,7 +119,7 @@ ACCESSPOINT_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:accesspoint:myaccesspoint',
@@ -140,25 +138,25 @@ ACCESSPOINT_ARN_TEST_CASES = [
         'config': {'s3': {'use_accelerate_endpoint': True}},
         'assertions': {
             'exception': 'UnsupportedS3ControlConfigurationError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:myaccesspoint',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
 ]
 
@@ -176,7 +174,7 @@ BUCKET_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -189,7 +187,7 @@ BUCKET_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -197,7 +195,7 @@ BUCKET_ARN_TEST_CASES = [
         'config': {'s3': {'use_arn_region': False}},
         'assertions': {
             'exception': 'UnsupportedS3ControlConfigurationError',
-        }
+        },
     },
     {
         'arn': 'arn:aws-cn:s3-outposts:cn-north-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -205,7 +203,7 @@ BUCKET_ARN_TEST_CASES = [
         'config': {'s3': {'use_arn_region': True}},
         'assertions': {
             'exception': 'UnsupportedS3ControlConfigurationError',
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -218,7 +216,7 @@ BUCKET_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -231,7 +229,7 @@ BUCKET_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:fips-us-gov-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -239,7 +237,7 @@ BUCKET_ARN_TEST_CASES = [
         'config': {'s3': {'use_arn_region': True}},
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -252,7 +250,7 @@ BUCKET_ARN_TEST_CASES = [
                 'x-amz-outpost-id': 'op-01234567890123456',
                 'x-amz-account-id': '123456789012',
             },
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:bucket:mybucket',
@@ -271,25 +269,25 @@ BUCKET_ARN_TEST_CASES = [
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:bucket',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
     {
         'arn': 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:bucket',
         'assertions': {
             'exception': 'UnsupportedS3ControlArnError',
-        }
+        },
     },
 ]
 
@@ -378,11 +376,9 @@ def _assert_test_case(test_case, client,
         exception_cls = getattr(exceptions, assertions['exception'])
         if exception_raised is None:
             raise RuntimeError(
-                'Expected exception "%s" was not raised' % exception_cls
+                f'Expected exception "{exception_cls}" was not raised'
             )
-        error_msg = (
-            'Expected exception "%s", got "%s"'
-        ) % (exception_cls, type(exception_raised))
+        error_msg = f'Expected exception "{exception_cls}", got "{type(exception_raised)}"'
         assert isinstance(exception_raised, exception_cls), error_msg
     else:
         assert len(stubber.requests) == 1
diff -pruN 2.23.6-1/tests/functional/botocore/test_s3express.py 2.31.35-1/tests/functional/botocore/test_s3express.py
--- 2.23.6-1/tests/functional/botocore/test_s3express.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_s3express.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,14 @@
 # language governing permissions and limitations under the License.
 import datetime
 
-import pytest
-from dateutil.tz import tzutc
-
 import botocore.session
+import pytest
 from botocore.auth import S3ExpressAuth
 from botocore.awsrequest import AWSRequest
 from botocore.credentials import Credentials, RefreshableCredentials
 from botocore.utils import S3ExpressIdentityCache
+from dateutil.tz import tzutc
+
 from tests import ClientHTTPStubber, mock
 
 ACCESS_KEY = "AKIDEXAMPLE"
diff -pruN 2.23.6-1/tests/functional/botocore/test_service_alias.py 2.31.35-1/tests/functional/botocore/test_service_alias.py
--- 2.23.6-1/tests/functional/botocore/test_service_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_service_alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
-
 import botocore.session
+import pytest
 from botocore.handlers import SERVICE_NAME_ALIASES
 
-
 CLIENT_KWARGS = {
     "region_name": "us-east-1",
     "aws_access_key_id": "foo",
@@ -25,7 +23,7 @@ CLIENT_KWARGS = {
 
 def _service_alias_test_cases():
     session = botocore.session.get_session()
-    for (alias, name) in SERVICE_NAME_ALIASES.items():
+    for alias, name in SERVICE_NAME_ALIASES.items():
         yield session, name, alias
 
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_service_names.py 2.31.35-1/tests/functional/botocore/test_service_names.py
--- 2.23.6-1/tests/functional/botocore/test_service_names.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_service_names.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,6 @@
 import re
 
 import pytest
-
 from botocore.session import get_session
 
 BLOCKLIST = []
@@ -23,11 +22,13 @@ BLOCKLIST = []
 # blacklist above to be given an exception.
 VALID_NAME_REGEX = re.compile(
     (
-        '[a-z]'           # Starts with a letter
-        '[a-z0-9]*'       # Followed by any number of letters or digits
+        '[a-z]'  # Starts with a letter
+        '[a-z0-9]*'  # Followed by any number of letters or digits
         '(-[a-z0-9]+)*$'  # Dashes are allowed as long as they aren't
-                          # consecutive or at the end
-    ), re.M)
+        # consecutive or at the end
+    ),
+    re.M,
+)
 VALID_NAME_EXPLANATION = (
     'Service names must be made up entirely of lowercase alphanumeric '
     'characters and dashes. The name must start with a letter and may not end '
diff -pruN 2.23.6-1/tests/functional/botocore/test_session.py 2.31.35-1/tests/functional/botocore/test_session.py
--- 2.23.6-1/tests/functional/botocore/test_session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_session.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, unittest, temporary_file
-
 import botocore.session
 from botocore.exceptions import ProfileNotFound
 
+from tests import mock, temporary_file, unittest
+
 
 class TestSession(unittest.TestCase):
     def setUp(self):
@@ -39,14 +39,15 @@ class TestSession(unittest.TestCase):
     def test_env_var_precedence_for_region(self):
         self.environ['AWS_REGION'] = 'from_aws_region'
         self.environ['AWS_DEFAULT_REGION'] = 'from_aws_default_region'
-        self.assertEqual(self.session.get_config_variable('region'),
-                         'from_aws_region')
+        self.assertEqual(
+            self.session.get_config_variable('region'), 'from_aws_region'
+        )
 
     def test_credentials_with_profile_precedence(self):
         self.environ['AWS_PROFILE'] = 'from_env_var'
-        self.session.set_config_variable('profile',  'from_session_instance')
+        self.session.set_config_variable('profile', 'from_session_instance')
         try:
-            creds = self.session.get_credentials()
+            self.session.get_credentials()
         except ProfileNotFound as e:
             self.assertNotIn('from_env_var', str(e))
             self.assertIn('from_session_instance', str(e))
@@ -69,8 +70,9 @@ class TestSession(unittest.TestCase):
                 'aws_secret_access_key=shared_creds_sak\n'
             )
             f.flush()
-            self.session.set_config_variable('profile',
-                                             'from_session_instance')
+            self.session.set_config_variable(
+                'profile', 'from_session_instance'
+            )
             creds = self.session.get_credentials()
             self.assertEqual(creds.access_key, 'shared_creds_akid')
             self.assertEqual(creds.secret_key, 'shared_creds_sak')
@@ -88,9 +90,7 @@ class TestSession(unittest.TestCase):
             # (env vars, set when creating a session, etc.) that profile
             # must exist.  So we need to create an empty profile
             # matching the value from AWS_PROFILE.
-            f.write(
-                '[myprofile]\n'
-            )
+            f.write('[myprofile]\n')
             f.flush()
             self.environ['AWS_ACCESS_KEY_ID'] = 'env_var_akid'
             self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_var_sak'
diff -pruN 2.23.6-1/tests/functional/botocore/test_six_imports.py 2.31.35-1/tests/functional/botocore/test_six_imports.py
--- 2.23.6-1/tests/functional/botocore/test_six_imports.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_six_imports.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,9 @@
-import os
-import botocore
 import ast
+import os
 
+import botocore
 import pytest
 
-
 ROOTDIR = os.path.dirname(botocore.__file__)
 
 
@@ -24,7 +23,7 @@ def test_no_bare_six_imports(filename):
     with open(filename) as f:
         contents = f.read()
         parsed = ast.parse(contents, filename)
-        checker = SixImportChecker(filename).visit(parsed)
+        SixImportChecker(filename).visit(parsed)
 
 
 class SixImportChecker(ast.NodeVisitor):
@@ -36,19 +35,19 @@ class SixImportChecker(ast.NodeVisitor):
             if getattr(alias, 'name', '') == 'six':
                 line = self._get_line_content(self.filename, node.lineno)
                 raise AssertionError(
-                    "A bare 'import six' was found in %s:\n"
-                    "\n%s: %s\n"
-                    "Please use 'from botocore.compat import six' instead" %
-                    (self.filename, node.lineno, line))
+                    f"A bare 'import six' was found in {self.filename}:\n"
+                    f"\n{node.lineno}: {line}\n"
+                    "Please use 'from botocore.compat import six' instead"
+                )
 
     def visit_ImportFrom(self, node):
         if node.module == 'six':
             line = self._get_line_content(self.filename, node.lineno)
             raise AssertionError(
-                "A bare 'from six import ...' was found in %s:\n"
-                "\n%s:%s\n"
-                "Please use 'from botocore.compat import six' instead" %
-                (self.filename, node.lineno, line))
+                f"A bare 'from six import ...' was found in {self.filename}:\n"
+                f"\n{node.lineno}:{line}\n"
+                "Please use 'from botocore.compat import six' instead"
+            )
 
     def _get_line_content(self, filename, lineno):
         with open(filename) as f:
diff -pruN 2.23.6-1/tests/functional/botocore/test_six_threading.py 2.31.35-1/tests/functional/botocore/test_six_threading.py
--- 2.23.6-1/tests/functional/botocore/test_six_threading.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_six_threading.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,6 +1,7 @@
 """
 Regression test for six issue #98 (https://github.com/benjaminp/six/issues/98)
 """
+
 import sys
 import threading
 import time
@@ -9,7 +10,6 @@ from botocore.vendored import six
 
 from tests import mock
 
-
 _original_setattr = six.moves.__class__.__setattr__
 
 
@@ -24,16 +24,14 @@ def _reload_six():
     # Issue #98 is caused by a race condition in six._LazyDescr.__get__
     # which is only called once per moved module. Reload six so all the
     # moved modules are reset.
-    if sys.version_info < (3, 0):
-        reload(six)
-    else:
-        import importlib
-        importlib.reload(six)
+    import importlib
+
+    importlib.reload(six)
 
 
 class _ExampleThread(threading.Thread):
     def __init__(self):
-        super(_ExampleThread, self).__init__()
+        super().__init__()
         self.daemon = False
         self.exc_info = None
 
@@ -49,8 +47,10 @@ class _ExampleThread(threading.Thread):
 
 def test_six_thread_safety():
     _reload_six()
-    with mock.patch('botocore.vendored.six.moves.__class__.__setattr__',
-               wraps=_wrapped_setattr):
+    with mock.patch(
+        'botocore.vendored.six.moves.__class__.__setattr__',
+        wraps=_wrapped_setattr,
+    ):
         threads = []
         for i in range(2):
             t = _ExampleThread()
diff -pruN 2.23.6-1/tests/functional/botocore/test_socialmessaging.py 2.31.35-1/tests/functional/botocore/test_socialmessaging.py
--- 2.23.6-1/tests/functional/botocore/test_socialmessaging.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_socialmessaging.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore import xform_name
 from botocore.session import get_session
 
@@ -33,7 +32,7 @@ def _get_all_xform_operations():
 
 XFORM_OPERATIONS = _get_all_xform_operations()
 
-
+@pytest.mark.validates_models
 @pytest.mark.parametrize("operation, replacement", XFORM_OPERATIONS)
 def test_known_replacements(operation, replacement):
     # Validates that if a replacement shows up in the lowercased version of an
diff -pruN 2.23.6-1/tests/functional/botocore/test_sts.py 2.31.35-1/tests/functional/botocore/test_sts.py
--- 2.23.6-1/tests/functional/botocore/test_sts.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_sts.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,26 +10,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from datetime import datetime
 import re
+from datetime import datetime
 
-from tests import BaseSessionTest
-from tests import mock
-from tests import assert_url_equal
-from tests import ClientHTTPStubber
 from botocore.config import Config
 from botocore.stub import Stubber
 
+from tests import BaseSessionTest, ClientHTTPStubber, assert_url_equal, mock
 
 _V4_SIGNING_REGION_REGEX = re.compile(
-    r'AWS4-HMAC-SHA256 '
-    r'Credential=\w+/\d+/(?P<signing_region>[a-z0-9-]+)/'
+    r'AWS4-HMAC-SHA256 ' r'Credential=\w+/\d+/(?P<signing_region>[a-z0-9-]+)/'
 )
 
 
 class TestSTSPresignedUrl(BaseSessionTest):
     def setUp(self):
-        super(TestSTSPresignedUrl, self).setUp()
+        super().setUp()
         self.client = self.session.create_client('sts', 'us-west-2')
         # Makes sure that no requests will go through
         self.stubber = Stubber(self.client)
@@ -54,23 +50,25 @@ class TestSTSPresignedUrl(BaseSessionTes
 
 
 class TestSTSEndpoints(BaseSessionTest):
-    def create_sts_client(self, region, endpoint_url=None, use_ssl=True,
-                          config=None):
+    def create_sts_client(
+        self, region, endpoint_url=None, use_ssl=True, config=None
+    ):
         return self.session.create_client(
-            'sts', region_name=region, endpoint_url=endpoint_url,
-            use_ssl=use_ssl, config=config
+            'sts',
+            region_name=region,
+            endpoint_url=endpoint_url,
+            use_ssl=use_ssl,
+            config=config,
         )
 
     def set_sts_regional_for_config_file(self, fileobj, config_val):
-        fileobj.write(
-            '[default]\n'
-            'sts_regional_endpoints=%s\n' % config_val
-        )
+        fileobj.write('[default]\n' f'sts_regional_endpoints={config_val}\n')
         fileobj.flush()
         self.environ['AWS_CONFIG_FILE'] = fileobj.name
 
-    def assert_request_sent(self, sts, expected_url,
-                            expected_signing_region=None):
+    def assert_request_sent(
+        self, sts, expected_url, expected_signing_region=None
+    ):
         body = (
             b'<GetCallerIdentityResponse>'
             b'  <GetCallerIdentityResult>'
@@ -91,7 +89,7 @@ class TestSTSEndpoints(BaseSessionTest):
             if expected_signing_region:
                 self.assertEqual(
                     self._get_signing_region(captured_request),
-                    expected_signing_region
+                    expected_signing_region,
                 )
 
     def _get_signing_region(self, request):
@@ -104,7 +102,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts.us-west-2.amazonaws.com/',
-            expected_signing_region='us-west-2'
+            expected_signing_region='us-west-2',
         )
 
     def test_fips_endpoint(self):
@@ -112,7 +110,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts-fips.us-west-2.amazonaws.com/',
-            expected_signing_region='us-west-2'
+            expected_signing_region='us-west-2',
         )
 
     def test_dualstack_endpoint(self):
@@ -121,7 +119,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts.us-west-2.api.aws/',
-            expected_signing_region='us-west-2'
+            expected_signing_region='us-west-2',
         )
 
     def test_nonaws_partition_region(self):
@@ -129,7 +127,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts.cn-north-1.amazonaws.com.cn/',
-            expected_signing_region='cn-north-1'
+            expected_signing_region='cn-north-1',
         )
 
     def test_global_region_with_regional_configured(self):
@@ -137,7 +135,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts.amazonaws.com/',
-            expected_signing_region='us-east-1'
+            expected_signing_region='us-east-1',
         )
 
     def test_client_for_unknown_region(self):
@@ -145,7 +143,7 @@ class TestSTSEndpoints(BaseSessionTest):
         self.assert_request_sent(
             sts,
             expected_url='https://sts.not-real.amazonaws.com/',
-            expected_signing_region='not-real'
+            expected_signing_region='not-real',
         )
 
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_stub.py 2.31.35-1/tests/functional/botocore/test_stub.py
--- 2.23.6-1/tests/functional/botocore/test_stub.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_stub.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import botocore.config
-from tests import unittest
-
 import botocore
+import botocore.client
+import botocore.config
 import botocore.session
 import botocore.stub as stub
+from botocore.exceptions import (
+    ClientError,
+    ParamValidationError,
+    StubAssertionError,
+    StubResponseError,
+    UnStubbedResponseError,
+)
 from botocore.stub import Stubber
-from botocore.exceptions import StubResponseError, ClientError, \
-    StubAssertionError, UnStubbedResponseError
-from botocore.exceptions import ParamValidationError
-import botocore.client
+
+from tests import unittest
 
 
 class TestStubber(unittest.TestCase):
@@ -28,10 +32,11 @@ class TestStubber(unittest.TestCase):
         session = botocore.session.get_session()
         config = botocore.config.Config(
             signature_version=botocore.UNSIGNED,
-            s3={'addressing_style': 'path'}
+            s3={'addressing_style': 'path'},
         )
         self.client = session.create_client(
-            's3', region_name='us-east-1', config=config)
+            's3', region_name='us-east-1', config=config
+        )
         self.stubber = Stubber(self.client)
 
     def test_stubber_returns_response(self):
@@ -52,13 +57,15 @@ class TestStubber(unittest.TestCase):
     def test_activated_stubber_errors_with_no_registered_stubs(self):
         self.stubber.activate()
         # Params one per line for readability.
-        with self.assertRaisesRegex(UnStubbedResponseError,
-                                    "Unexpected API Call"):
+        with self.assertRaisesRegex(
+            UnStubbedResponseError, "Unexpected API Call"
+        ):
             self.client.list_objects(
                 Bucket='asdfasdfasdfasdf',
                 Delimiter='asdfasdfasdfasdf',
                 Prefix='asdfasdfasdfasdf',
-                EncodingType='url')
+                EncodingType='url',
+            )
 
     def test_stubber_errors_when_stubs_are_used_up(self):
         self.stubber.add_response('list_objects', {})
@@ -72,7 +79,8 @@ class TestStubber(unittest.TestCase):
         error_code = "AccessDenied"
         error_message = "Access Denied"
         self.stubber.add_client_error(
-            'list_objects', error_code, error_message)
+            'list_objects', error_code, error_message
+        )
         self.stubber.activate()
 
         with self.assertRaises(ClientError):
@@ -80,8 +88,7 @@ class TestStubber(unittest.TestCase):
 
     def test_can_add_expected_params_to_client_error(self):
         self.stubber.add_client_error(
-            'list_objects', 'Error', 'error',
-            expected_params={'Bucket': 'foo'}
+            'list_objects', 'Error', 'error', expected_params={'Bucket': 'foo'}
         )
         self.stubber.activate()
         with self.assertRaises(ClientError):
@@ -89,8 +96,7 @@ class TestStubber(unittest.TestCase):
 
     def test_can_expected_param_fails_in_client_error(self):
         self.stubber.add_client_error(
-            'list_objects', 'Error', 'error',
-            expected_params={'Bucket': 'foo'}
+            'list_objects', 'Error', 'error', expected_params={'Bucket': 'foo'}
         )
         self.stubber.activate()
         # We expect an AssertionError instead of a ClientError
@@ -103,7 +109,8 @@ class TestStubber(unittest.TestCase):
         service_response = {}
         expected_params = {'Bucket': 'foo'}
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
         self.stubber.activate()
         # This should be called successfully with no errors being thrown
         # for mismatching expected params.
@@ -114,11 +121,11 @@ class TestStubber(unittest.TestCase):
         service_response = {}
         expected_params = {'Bucket': 'bar'}
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
         self.stubber.activate()
         # This should call should raise an for mismatching expected params.
-        with self.assertRaisesRegex(StubResponseError,
-                                    "{'Bucket': 'bar'},\n"):
+        with self.assertRaisesRegex(StubResponseError, "{'Bucket': 'bar'},\n"):
             self.client.list_objects(Bucket='foo')
 
     def test_expected_params_mixed_with_errors_responses(self):
@@ -126,13 +133,15 @@ class TestStubber(unittest.TestCase):
         error_code = "AccessDenied"
         error_message = "Access Denied"
         self.stubber.add_client_error(
-            'list_objects', error_code, error_message)
+            'list_objects', error_code, error_message
+        )
 
         # Add a response with incorrect expected params
         service_response = {}
         expected_params = {'Bucket': 'bar'}
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
 
         self.stubber.activate()
 
@@ -149,7 +158,8 @@ class TestStubber(unittest.TestCase):
         expected_params = {'Bucket': 'bar'}
 
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
 
         self.stubber.activate()
         # Throw an error for unexpected parameters
@@ -166,7 +176,8 @@ class TestStubber(unittest.TestCase):
         expected_params = {'Buck': 'bar'}
 
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
 
         self.stubber.activate()
         # Throw an error for invalid parameters
@@ -178,9 +189,11 @@ class TestStubber(unittest.TestCase):
         expected_params = {'Bucket': stub.ANY}
 
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
 
         try:
             with self.stubber:
@@ -194,9 +207,11 @@ class TestStubber(unittest.TestCase):
         expected_params = {'Bucket': stub.ANY, 'Key': 'foo.txt'}
 
         self.stubber.add_response(
-            'head_object', service_response, expected_params)
+            'head_object', service_response, expected_params
+        )
         self.stubber.add_response(
-            'head_object', service_response, expected_params)
+            'head_object', service_response, expected_params
+        )
 
         try:
             with self.stubber:
@@ -212,13 +227,15 @@ class TestStubber(unittest.TestCase):
             'Key': 'bar.txt',
             'Metadata': {
                 'MyMeta': stub.ANY,
-            }
+            },
         }
 
         self.stubber.add_response(
-            'put_object', service_response, expected_params)
+            'put_object', service_response, expected_params
+        )
         self.stubber.add_response(
-            'put_object', service_response, expected_params)
+            'put_object', service_response, expected_params
+        )
 
         try:
             with self.stubber:
@@ -227,18 +244,19 @@ class TestStubber(unittest.TestCase):
                     Key='bar.txt',
                     Metadata={
                         'MyMeta': 'Foo',
-                    }
+                    },
                 )
                 self.client.put_object(
                     Bucket='foo',
                     Key='bar.txt',
                     Metadata={
                         'MyMeta': 'Bar',
-                    }
+                    },
                 )
         except StubAssertionError:
             self.fail(
-                "stub.ANY failed to ignore nested parameter for validation.")
+                "stub.ANY failed to ignore nested parameter for validation."
+            )
 
     def test_ANY_repr(self):
         self.assertEqual(repr(stub.ANY), '<ANY>')
@@ -248,7 +266,8 @@ class TestStubber(unittest.TestCase):
         expected_params = {'Buck': None}
 
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
 
         self.stubber.activate()
         # Throw an error for invalid parameters
@@ -261,29 +280,29 @@ class TestStubber(unittest.TestCase):
             'Bucket': 'mybucket',
             'Prefix': 'myprefix',
             'Delimiter': '/',
-            'EncodingType': 'url'
+            'EncodingType': 'url',
         }
         self.stubber.add_response(
-            'list_objects', service_response, expected_params)
+            'list_objects', service_response, expected_params
+        )
         try:
             with self.stubber:
                 self.client.list_objects(**expected_params)
         except StubAssertionError:
             self.fail(
-                "Stubber inappropriately raised error for same parameters.")
+                "Stubber inappropriately raised error for same parameters."
+            )
 
     def test_no_stub_for_presign_url(self):
         try:
             with self.stubber:
                 url = self.client.generate_presigned_url(
                     ClientMethod='get_object',
-                    Params={
-                        'Bucket': 'mybucket',
-                        'Key': 'mykey'
-                    }
+                    Params={'Bucket': 'mybucket', 'Key': 'mykey'},
                 )
                 self.assertEqual(
-                    url, 'https://s3.us-east-1.amazonaws.com/mybucket/mykey')
+                    url, 'https://s3.us-east-1.amazonaws.com/mybucket/mykey'
+                )
         except StubResponseError:
             self.fail(
                 'Stubbed responses should not be required for generating '
@@ -297,14 +316,12 @@ class TestStubber(unittest.TestCase):
             'Prefix': 'myprefix',
         }
         self.stubber.add_response(
-            'list_objects', desired_response, expected_params)
+            'list_objects', desired_response, expected_params
+        )
         with self.stubber:
             url = self.client.generate_presigned_url(
                 ClientMethod='get_object',
-                Params={
-                    'Bucket': 'myotherbucket',
-                    'Key': 'myotherkey'
-                }
+                Params={'Bucket': 'myotherbucket', 'Key': 'myotherkey'},
             )
             expected_url = (
                 'https://s3.us-east-1.amazonaws.com/myotherbucket/myotherkey'
@@ -318,7 +335,8 @@ class TestStubber(unittest.TestCase):
         error_code = "NoSuchBucket"
         error_message = "The specified bucket does not exist"
         self.stubber.add_client_error(
-            'get_bucket_location', error_code, error_message)
+            'get_bucket_location', error_code, error_message
+        )
         self.stubber.activate()
 
         with self.assertRaises(ClientError):
@@ -326,8 +344,7 @@ class TestStubber(unittest.TestCase):
 
     def test_parse_get_bucket_location_returns_response(self):
         service_response = {"LocationConstraint": "us-west-2"}
-        self.stubber.add_response('get_bucket_location',service_response)
+        self.stubber.add_response('get_bucket_location', service_response)
         self.stubber.activate()
         response = self.client.get_bucket_location(Bucket='foo')
         self.assertEqual(response, service_response)
-
diff -pruN 2.23.6-1/tests/functional/botocore/test_supported_protocols.py 2.31.35-1/tests/functional/botocore/test_supported_protocols.py
--- 2.23.6-1/tests/functional/botocore/test_supported_protocols.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_supported_protocols.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,72 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import pytest
+from botocore.args import PRIORITY_ORDERED_SUPPORTED_PROTOCOLS
+from botocore.session import get_session
+
+
+def _multi_protocol_test_cases():
+    session = get_session()
+    loader = session.get_component('data_loader')
+    services = loader.list_available_services('service-2')
+    multi_protocol_services = []
+    supported_protocols = []
+    for service in services:
+        service_model = session.get_service_model(service)
+        if 'protocols' in service_model.metadata:
+            multi_protocol_services.append(service)
+            supported_protocols.append(
+                service_model.metadata.get('protocols', [])
+            )
+    return list(zip(multi_protocol_services, supported_protocols))
+
+
+def _single_protocol_test_cases():
+    session = get_session()
+    loader = session.get_component('data_loader')
+    services = loader.list_available_services('service-2')
+    single_protocol_services = []
+    supported_protocol = []
+    for service in services:
+        service_model = session.get_service_model(service)
+        if 'protocols' not in service_model.metadata:
+            single_protocol_services.append(service)
+            supported_protocol.append(service_model.metadata.get('protocol'))
+    return list(zip(single_protocol_services, supported_protocol))
+
+
+@pytest.mark.validates_models
+@pytest.mark.parametrize(
+    "service_name, supported_protocols",
+    _multi_protocol_test_cases(),
+)
+def test_services_with_protocols_trait_have_supported_protocol(
+    service_name, supported_protocols
+):
+    message = f"No protocols supported for service {service_name}"
+    assert any(
+        protocol in PRIORITY_ORDERED_SUPPORTED_PROTOCOLS
+        for protocol in supported_protocols
+    ), message
+
+
+@pytest.mark.validates_models
+@pytest.mark.parametrize(
+    "service_name, supported_protocol",
+    _single_protocol_test_cases(),
+)
+def test_services_without_protocols_trait_have_supported_protocol(
+    service_name, supported_protocol
+):
+    message = f"Service protocol not supported for {service_name}"
+    assert supported_protocol in PRIORITY_ORDERED_SUPPORTED_PROTOCOLS, message
diff -pruN 2.23.6-1/tests/functional/botocore/test_tagged_unions_unknown.py 2.31.35-1/tests/functional/botocore/test_tagged_unions_unknown.py
--- 2.23.6-1/tests/functional/botocore/test_tagged_unions_unknown.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_tagged_unions_unknown.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from botocore.session import Session
+
 from tests import unittest
 
 
diff -pruN 2.23.6-1/tests/functional/botocore/test_useragent.py 2.31.35-1/tests/functional/botocore/test_useragent.py
--- 2.23.6-1/tests/functional/botocore/test_useragent.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_useragent.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,36 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import logging
+import time
+from concurrent import futures
 from itertools import product
 
 import pytest
-
 from botocore import __version__ as botocore_version
 from botocore.config import Config
+
 from tests import ClientHTTPStubber
 
 
+def get_captured_ua_strings(stubber):
+    """Get captured request-level user agent strings from stubber.
+
+    :type stubber: tests.BaseHTTPStubber
+    """
+    return [req.headers['User-Agent'].decode() for req in stubber.requests]
+
+
+def parse_registered_feature_ids(ua_string):
+    """Parse registered feature ids in user agent string.
+
+    :type ua_string: str
+    :rtype: list[str]
+    """
+    ua_fields = ua_string.split(' ')
+    feature_field = [field for field in ua_fields if field.startswith('m/')][0]
+    return feature_field[2:].split(',')
+
+
 class UACapHTTPStubber(ClientHTTPStubber):
     """
     Wrapper for ClientHTTPStubber that captures UA header from one request.
@@ -195,6 +216,93 @@ def test_user_agent_appid_gets_sanitized
     assert 'app/1234-' in uafields
 
 
+def test_user_agent_has_registered_feature_id(patched_session):
+    client_s3 = patched_session.create_client('s3')
+    with UACapHTTPStubber(client_s3) as stub_client:
+        paginator = client_s3.get_paginator('list_buckets')
+        # The `paginate()` method registers `'PAGINATOR': 'C'`
+        for _ in paginator.paginate():
+            pass
+    uafields = stub_client.captured_ua_string.split(' ')
+    feature_field = [field for field in uafields if field.startswith('m/')][0]
+    feature_list = feature_field[2:].split(',')
+    assert 'C' in feature_list
+
+
+def test_registered_feature_ids_dont_bleed_between_requests(patched_session):
+    client_s3 = patched_session.create_client('s3')
+    with UACapHTTPStubber(client_s3) as stub_client:
+        waiter = client_s3.get_waiter('bucket_exists')
+        # The `wait()` method registers `'WAITER': 'B'`
+        waiter.wait(Bucket='mybucket')
+    uafields = stub_client.captured_ua_string.split(' ')
+    feature_field = [field for field in uafields if field.startswith('m/')][0]
+    feature_list = feature_field[2:].split(',')
+    assert 'B' in feature_list
+
+    with UACapHTTPStubber(client_s3) as stub_client:
+        paginator = client_s3.get_paginator('list_buckets')
+        # The `paginate()` method registers `'PAGINATOR': 'C'`
+        for _ in paginator.paginate():
+            pass
+    uafields = stub_client.captured_ua_string.split(' ')
+    feature_field = [field for field in uafields if field.startswith('m/')][0]
+    feature_list = feature_field[2:].split(',')
+    assert 'C' in feature_list
+    assert 'B' not in feature_list
+
+
+def test_registered_feature_ids_dont_bleed_across_threads(patched_session):
+    client_s3 = patched_session.create_client('s3')
+    # The client stubber isn't thread-safe because it mutates the client's
+    # event system. This boolean is a workaround that ensures the paginator
+    # worker's thread spawns at the same time, but does not actually execute
+    # its job until the waiter thread finishes first and resets client state.
+    waiter_done = False
+
+    def wait(client, features):
+        with UACapHTTPStubber(client) as stub_client:
+            waiter = client.get_waiter('bucket_exists')
+            # The `wait()` method registers `'WAITER': 'B'`
+            waiter.wait(Bucket='mybucket')
+        uafields = stub_client.captured_ua_string.split(' ')
+        feature_field = [
+            field for field in uafields if field.startswith('m/')
+        ][0]
+        features.extend(feature_field[2:].split(','))
+        nonlocal waiter_done
+        waiter_done = True
+
+    def paginate(client, features):
+        nonlocal waiter_done
+        while not waiter_done:
+            time.sleep(0.5)
+        with UACapHTTPStubber(client) as stub_client:
+            paginator = client.get_paginator('list_buckets')
+            # The `paginate()` method registers `'PAGINATOR': 'C'`
+            for _ in paginator.paginate():
+                pass
+        uafields = stub_client.captured_ua_string.split(' ')
+        feature_field = [
+            field for field in uafields if field.startswith('m/')
+        ][0]
+        features.extend(feature_field[2:].split(','))
+
+    waiter_features = []
+    paginator_features = []
+    with futures.ThreadPoolExecutor(max_workers=2) as executor:
+        waiter_future = executor.submit(wait, client_s3, waiter_features)
+        paginator_future = executor.submit(
+            paginate, client_s3, paginator_features
+        )
+        waiter_future.result()
+        paginator_future.result()
+    assert 'B' in waiter_features
+    assert 'C' not in waiter_features
+    assert 'C' in paginator_features
+    assert 'B' not in paginator_features
+
+
 def test_awscli_v2_user_agent(patched_session):
     # emulate behavior from awscli.clidriver._set_user_agent_for_session
     patched_session.user_agent_name = 'aws-cli'
@@ -210,15 +318,13 @@ def test_awscli_v2_user_agent(patched_se
         client_s3.list_buckets()
     # The user agent string should start with "aws-cli/1.1.1" from the setting
     # above, followed by Botocore's version info as metadata ("md/...").
-    assert stub_client.captured_ua_string.startswith(
-        f'aws-cli/2.2.2 '
-    )
+    assert stub_client.captured_ua_string.startswith('aws-cli/2.2.2 ')
     assert stub_client.captured_ua_string.endswith(
         ' md/installer#source md/prompt#off md/command#service-name.op-name'
     )
     # The regular User-Agent header components for platform, language, ...
     # should also be present:
-    assert ' ua/2.0 ' in stub_client.captured_ua_string
+    assert ' ua/2.1 ' in stub_client.captured_ua_string
     assert ' os/' in stub_client.captured_ua_string
     assert ' lang/' in stub_client.captured_ua_string
     assert ' cfg/' in stub_client.captured_ua_string
diff -pruN 2.23.6-1/tests/functional/botocore/test_utils.py 2.31.35-1/tests/functional/botocore/test_utils.py
--- 2.23.6-1/tests/functional/botocore/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,19 +11,23 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import tempfile
 import shutil
-from tests import unittest, mock
+import tempfile
 
-from botocore.exceptions import (ConnectionClosedError, HTTPClientError,
-                                InvalidIMDSEndpointError)
+from botocore.exceptions import (
+    ConnectionClosedError,
+    HTTPClientError,
+    InvalidIMDSEndpointError,
+)
 from botocore.utils import FileWebIdentityTokenLoader, InstanceMetadataFetcher
 from urllib3.exceptions import LocationParseError
 
+from tests import mock, unittest
+
 
 class TestFileWebIdentityTokenLoader(unittest.TestCase):
     def setUp(self):
-        super(TestFileWebIdentityTokenLoader, self).setUp()
+        super().setUp()
         self.tempdir = tempfile.mkdtemp()
         self.token = 'totally.a.token'
         self.token_file = os.path.join(self.tempdir, 'token.jwt')
@@ -31,7 +35,7 @@ class TestFileWebIdentityTokenLoader(uni
 
     def tearDown(self):
         shutil.rmtree(self.tempdir)
-        super(TestFileWebIdentityTokenLoader, self).tearDown()
+        super().tearDown()
 
     def write_token(self, token, path=None):
         if path is None:
@@ -47,17 +51,23 @@ class TestFileWebIdentityTokenLoader(uni
 
 class TestInstanceMetadataFetcher(unittest.TestCase):
     def test_catch_retryable_http_errors(self):
-        with mock.patch('botocore.httpsession.URLLib3Session.send') as send_mock:
+        with mock.patch(
+            'botocore.httpsession.URLLib3Session.send'
+        ) as send_mock:
             fetcher = InstanceMetadataFetcher()
             send_mock.side_effect = ConnectionClosedError(endpoint_url="foo")
             creds = fetcher.retrieve_iam_role_credentials()
         self.assertEqual(send_mock.call_count, 2)
         for call_instance in send_mock.call_args_list:
-            self.assertTrue(call_instance[0][0].url.startswith(fetcher.get_base_url()))
+            self.assertTrue(
+                call_instance[0][0].url.startswith(fetcher.get_base_url())
+            )
         self.assertEqual(creds, {})
 
     def test_catch_invalid_imds_error(self):
-        with mock.patch('botocore.httpsession.URLLib3Session.send') as send_mock:
+        with mock.patch(
+            'botocore.httpsession.URLLib3Session.send'
+        ) as send_mock:
             fetcher = InstanceMetadataFetcher()
             e = LocationParseError(location="foo")
             send_mock.side_effect = HTTPClientError(error=e)
diff -pruN 2.23.6-1/tests/functional/botocore/test_waiter_config.py 2.31.35-1/tests/functional/botocore/test_waiter_config.py
--- 2.23.6-1/tests/functional/botocore/test_waiter_config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/test_waiter_config.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import botocore.session
 import jmespath
-from jsonschema import Draft4Validator
-
 import pytest
-
-import botocore.session
 from botocore.exceptions import UnknownServiceError
 from botocore.utils import ArgumentGenerator
-
+from jsonschema import Draft4Validator
 
 WAITER_SCHEMA = {
     "type": "object",
@@ -29,20 +26,14 @@ WAITER_SCHEMA = {
             "additionalProperties": {
                 "type": "object",
                 "properties": {
-                    "type": {
-                        "type": "string",
-                        "enum": ["api"]
-                    },
+                    "type": {"type": "string", "enum": ["api"]},
                     "operation": {"type": "string"},
                     "description": {"type": "string"},
                     "delay": {
                         "type": "number",
                         "minimum": 0,
                     },
-                    "maxAttempts": {
-                        "type": "integer",
-                        "minimum": 1
-                    },
+                    "maxAttempts": {"type": "integer", "minimum": 1},
                     "acceptors": {
                         "type": "array",
                         "items": {
@@ -50,37 +41,38 @@ WAITER_SCHEMA = {
                             "properties": {
                                 "state": {
                                     "type": "string",
-                                    "enum": ["success", "retry", "failure"]
+                                    "enum": ["success", "retry", "failure"],
                                 },
                                 "matcher": {
                                     "type": "string",
                                     "enum": [
-                                        "path", "pathAll", "pathAny",
-                                        "status", "error"
-                                    ]
+                                        "path",
+                                        "pathAll",
+                                        "pathAny",
+                                        "status",
+                                        "error",
+                                    ],
                                 },
                                 "argument": {"type": "string"},
                                 "expected": {
                                     "oneOf": [
                                         {"type": "string"},
                                         {"type": "number"},
-                                        {"type": "boolean"}
+                                        {"type": "boolean"},
                                     ]
-                                }
+                                },
                             },
-                            "required": [
-                                "state", "matcher", "expected"
-                            ],
-                            "additionalProperties": False
-                        }
-                    }
+                            "required": ["state", "matcher", "expected"],
+                            "additionalProperties": False,
+                        },
+                    },
                 },
                 "required": ["operation", "delay", "maxAttempts", "acceptors"],
-                "additionalProperties": False
-            }
-        }
+                "additionalProperties": False,
+            },
+        },
     },
-    "additionalProperties": False
+    "additionalProperties": False,
 }
 
 
@@ -89,14 +81,12 @@ def _waiter_configs():
     validator = Draft4Validator(WAITER_SCHEMA)
     for service_name in session.get_available_services():
         client = session.create_client(service_name, 'us-east-1')
-        service_model = client.meta.service_model
         try:
             # We use the loader directly here because we need the entire
             # json document, not just the portions exposed (either
             # internally or externally) by the WaiterModel class.
             loader = session.get_component('data_loader')
-            waiter_model = loader.load_service_model(
-                service_name, 'waiters-2')
+            waiter_model = loader.load_service_model(service_name, 'waiters-2')
         except UnknownServiceError:
             # The service doesn't have waiters
             continue
@@ -122,25 +112,25 @@ def _lint_single_waiter(client, waiter_n
         # * matcher has a known value
         acceptors = waiter.config.acceptors
     except Exception as e:
-        raise AssertionError("Could not create waiter '%s': %s"
-                             % (waiter_name, e))
+        raise AssertionError(f"Could not create waiter '{waiter_name}': {e}")
     operation_name = waiter.config.operation
     # Needs to reference an existing operation name.
     if operation_name not in service_model.operation_names:
-        raise AssertionError("Waiter config references unknown "
-                             "operation: %s" % operation_name)
+        raise AssertionError(
+            "Waiter config references unknown " f"operation: {operation_name}"
+        )
     # Needs to have at least one acceptor.
     if not waiter.config.acceptors:
-        raise AssertionError("Waiter config must have at least "
-                             "one acceptor state: %s" % waiter.name)
+        raise AssertionError(
+            "Waiter config must have at least "
+            f"one acceptor state: {waiter.name}"
+        )
     op_model = service_model.operation_model(operation_name)
     for acceptor in acceptors:
         _validate_acceptor(acceptor, op_model, waiter.name)
 
     if not waiter.name.isalnum():
-        raise AssertionError(
-            "Waiter name %s is not alphanumeric." % waiter_name
-        )
+        raise AssertionError(f"Waiter name {waiter_name} is not alphanumeric.")
 
 
 def _validate_schema(validator, waiter_json):
@@ -155,23 +145,24 @@ def _validate_acceptor(acceptor, op_mode
         # The JMESPath expression should have the potential to match something
         # in the response shape.
         output_shape = op_model.output_shape
-        assert output_shape is not None, (
-            "Waiter '%s' has JMESPath expression with no output shape: %s"
-            % (waiter_name, op_model))
+        assert (
+            output_shape is not None
+        ), f"Waiter '{waiter_name}' has JMESPath expression with no output shape: {op_model}"
         # We want to check if the JMESPath expression makes sense.
         # To do this, we'll generate sample output and evaluate the
         # JMESPath expression against the output.  We'll then
         # check a few things about this returned search result.
         search_result = _search_jmespath_expression(expression, op_model)
         if search_result is None:
-            raise AssertionError("JMESPath expression did not match "
-                                 "anything for waiter '%s': %s"
-                                 % (waiter_name, expression))
+            raise AssertionError(
+                "JMESPath expression did not match "
+                f"anything for waiter '{waiter_name}': {expression}"
+            )
         if acceptor.matcher in ['pathAll', 'pathAny']:
-            assert isinstance(search_result, list), \
-                    ("Attempted to use '%s' matcher in waiter '%s' "
-                     "with non list result in JMESPath expression: %s"
-                     % (acceptor.matcher, waiter_name, expression))
+            assert isinstance(search_result, list), (
+                f"Attempted to use '{acceptor.matcher}' matcher in waiter '{waiter_name}' "
+                f"with non list result in JMESPath expression: {expression}"
+            )
 
 
 def _search_jmespath_expression(expression, op_model):
diff -pruN 2.23.6-1/tests/functional/botocore/utils/credentialprocess.py 2.31.35-1/tests/functional/botocore/utils/credentialprocess.py
--- 2.23.6-1/tests/functional/botocore/utils/credentialprocess.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/botocore/utils/credentialprocess.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,24 +11,29 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 """This is a dummy implementation of a credential provider process."""
+
 import argparse
 import json
 
 
 def main():
     parser = argparse.ArgumentParser()
-    parser.add_argument('--raise-error', action='store_true', help=(
-        'If set, this will cause the process to return a non-zero exit code '
-        'and print to stderr.'
-    ))
+    parser.add_argument(
+        '--raise-error',
+        action='store_true',
+        help=(
+            'If set, this will cause the process to return a non-zero exit code '
+            'and print to stderr.'
+        ),
+    )
     args = parser.parse_args()
     if args.raise_error:
         raise Exception('Failed to fetch credentials.')
-    print(json.dumps({
-        'AccessKeyId': 'spam',
-        'SecretAccessKey': 'eggs',
-        'Version': 1
-    }))
+    print(
+        json.dumps(
+            {'AccessKeyId': 'spam', 'SecretAccessKey': 'eggs', 'Version': 1}
+        )
+    )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_create_stack.py 2.31.35-1/tests/functional/cloudformation/test_create_stack.py
--- 2.23.6-1/tests/functional/cloudformation/test_create_stack.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_create_stack.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestCreateStack(BaseAWSCommandParamsTest):
-
     prefix = 'cloudformation create-stack'
 
     def test_basic_create_stack(self):
@@ -29,11 +28,14 @@ class TestCreateStack(BaseAWSCommandPara
         cmdline += ' --stack-name test-stack --template-url http://foo'
         cmdline += ' --parameters ParameterKey=foo,ParameterValue=bar'
         cmdline += ' ParameterKey=foo2,ParameterValue=bar2'
-        result = {'StackName': 'test-stack', 'TemplateURL': 'http://foo',
-                  'Parameters': [
-                      {'ParameterKey': 'foo', 'ParameterValue': 'bar'},
-                      {'ParameterKey': 'foo2', 'ParameterValue': 'bar2'},
-                  ]}
+        result = {
+            'StackName': 'test-stack',
+            'TemplateURL': 'http://foo',
+            'Parameters': [
+                {'ParameterKey': 'foo', 'ParameterValue': 'bar'},
+                {'ParameterKey': 'foo2', 'ParameterValue': 'bar2'},
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_create_stack_for_csv_params_escaping(self):
@@ -42,9 +44,13 @@ class TestCreateStack(BaseAWSCommandPara
         cmdline = self.prefix
         cmdline += ' --stack-name test-stack --template-url http://foo'
         cmdline += r' --parameters ParameterKey=foo,ParameterValue=one\,two'
-        result = {'StackName': 'test-stack', 'TemplateURL': 'http://foo',
-                  'Parameters': [{'ParameterKey': 'foo',
-                                  'ParameterValue': 'one,two'}]}
+        result = {
+            'StackName': 'test-stack',
+            'TemplateURL': 'http://foo',
+            'Parameters': [
+                {'ParameterKey': 'foo', 'ParameterValue': 'one,two'}
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_create_stack_for_csv_with_quoting(self):
@@ -52,14 +58,21 @@ class TestCreateStack(BaseAWSCommandPara
         cmdline += ' --stack-name test-stack --template-url http://foo'
         # Note how we're quoting the value of parameter_value.
         cmdline += ' --parameters ParameterKey=foo,ParameterValue="one,two"'
-        result = {'StackName': 'test-stack', 'TemplateURL': 'http://foo',
-                  'Parameters': [{'ParameterKey': 'foo',
-                                  'ParameterValue': 'one,two'}]}
+        result = {
+            'StackName': 'test-stack',
+            'TemplateURL': 'http://foo',
+            'Parameters': [
+                {'ParameterKey': 'foo', 'ParameterValue': 'one,two'}
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_can_handle_empty_parameters(self):
         cmdline = self.prefix
         cmdline += ' --stack-name test --parameters --template-url http://foo'
-        result = {'StackName': 'test', 'TemplateURL': 'http://foo',
-                  'Parameters': []}
+        result = {
+            'StackName': 'test',
+            'TemplateURL': 'http://foo',
+            'Parameters': [],
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_deploy.py 2.31.35-1/tests/functional/cloudformation/test_deploy.py
--- 2.23.6-1/tests/functional/cloudformation/test_deploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_deploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,7 @@
 # language governing permissions and limitations under the License.
 import json
 
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class TestDeployCommand(BaseAWSCommandParamsTest):
@@ -24,8 +23,12 @@ class TestDeployCommand(BaseAWSCommandPa
             # First it checks to see if a stack with that name exists. So
             # we fake a response indicating that the stack exists and is in
             # an OK state.
-            {'Stacks': {'StackName': 'Stack',
-                        'StackStatus': 'UPDATE_COMPLETE'}},
+            {
+                'Stacks': {
+                    'StackName': 'Stack',
+                    'StackStatus': 'UPDATE_COMPLETE',
+                }
+            },
             # Now it creates a changeset, so we fake a response with an ID.
             {'Id': 'FakeChangeSetId'},
             # This fakes a failed response from the waiter because the
@@ -37,15 +40,14 @@ class TestDeployCommand(BaseAWSCommandPa
                     'The submitted information didn\'t contain changes. '
                     'Submit different information to create a change set.'
                 ),
-                'ExecutionStatus': 'UNAVAILABLE'
+                'ExecutionStatus': 'UNAVAILABLE',
             },
         ]
         # The template is inspected before we make any of the calls so it
         # needs to have valid JSON content.
         path = self.files.create_file('template.json', '{}')
         self.command = (
-            'cloudformation deploy --template-file %s '
-            '--stack-name Stack'
+            'cloudformation deploy --template-file %s ' '--stack-name Stack'
         ) % path
 
     def tearDown(self):
@@ -80,8 +82,7 @@ class TestDeployCommandParameterOverride
         }'''
         path = self.files.create_file('template.json', template)
         self.command = (
-            'cloudformation deploy --template-file %s '
-            '--stack-name Stack '
+            'cloudformation deploy --template-file %s ' '--stack-name Stack '
         ) % path
 
     def _assert_parameters_parsed(self):
@@ -89,8 +90,8 @@ class TestDeployCommandParameterOverride
             self.operations_called[1][1]['Parameters'],
             [
                 {'ParameterKey': 'Key1', 'ParameterValue': 'Value1'},
-                {'ParameterKey': 'Key2', 'ParameterValue': 'Value2'}
-            ]
+                {'ParameterKey': 'Key2', 'ParameterValue': 'Value2'},
+            ],
         )
 
     def create_json_file(self, filename, data):
@@ -109,10 +110,12 @@ class TestDeployCommandParameterOverride
         self._assert_parameters_parsed()
 
     def test_parameter_overrides_from_inline_cf_like_json(self):
-        cf_like_json = ('[{"ParameterKey":"Key1",'
-                        '"ParameterValue":"Value1"},'
-                        '{"ParameterKey":"Key2",'
-                        '"ParameterValue":"Value2"}]')
+        cf_like_json = (
+            '[{"ParameterKey":"Key1",'
+            '"ParameterValue":"Value1"},'
+            '{"ParameterKey":"Key2",'
+            '"ParameterValue":"Value2"}]'
+        )
         self.command += ' --parameter-overrides %s' % cf_like_json
         self.run_cmd(self.command)
         self._assert_parameters_parsed()
@@ -120,7 +123,7 @@ class TestDeployCommandParameterOverride
     def test_parameter_overrides_from_cf_like_json_file(self):
         cf_like_json = [
             {'ParameterKey': 'Key1', 'ParameterValue': 'Value1'},
-            {'ParameterKey': 'Key2', 'ParameterValue': 'Value2'}
+            {'ParameterKey': 'Key2', 'ParameterValue': 'Value2'},
         ]
         path = self.create_json_file('param.json', cf_like_json)
         self.command += ' --parameter-overrides file://%s' % path
@@ -128,18 +131,16 @@ class TestDeployCommandParameterOverride
         self._assert_parameters_parsed()
 
     def test_parameter_overrides_from_inline_codepipeline_like_json(self):
-        codepipeline_like_json = ('{"Parameters":{"Key1":"Value1",'
-                                  '"Key2":"Value2"}}')
+        codepipeline_like_json = (
+            '{"Parameters":{"Key1":"Value1",' '"Key2":"Value2"}}'
+        )
         self.command += ' --parameter-overrides %s' % codepipeline_like_json
         self.run_cmd(self.command)
         self._assert_parameters_parsed()
 
     def test_parameter_overrides_from_codepipeline_like_json_file(self):
         codepipeline_like_json = {
-            'Parameters': {
-                'Key1': 'Value1',
-                'Key2': 'Value2'
-            }
+            'Parameters': {'Key1': 'Value1', 'Key2': 'Value2'}
         }
         path = self.create_json_file('param.json', codepipeline_like_json)
         self.command += ' --parameter-overrides file://%s' % path
@@ -158,23 +159,18 @@ class TestDeployCommandParameterOverride
             {
                 'ParameterKey': 'Key1',
                 'ParameterValue': 'Value1',
-                'RedundantKey': 'RedundantValue'
+                'RedundantKey': 'RedundantValue',
             },
-            {
-                'ParameterKey': 'Key2',
-                'ParameterValue': 'Value2'
-            }
+            {'ParameterKey': 'Key2', 'ParameterValue': 'Value2'},
         ]
         path = self.create_json_file('param.json', invalid_cf_like_json)
         self.command += ' --parameter-overrides file://%s' % path
         _, err, _ = self.run_cmd(self.command, expected_rc=252)
-        self.assertTrue('JSON passed to --parameter-overrides must be'
-                        in err)
+        self.assertTrue('JSON passed to --parameter-overrides must be' in err)
 
     def test_parameter_overrides_from_invalid_json(self):
         cf_like_json = {'SomeKey': [{'RedundantKey': 'RedundantValue'}]}
         path = self.create_json_file('param.json', cf_like_json)
         self.command += ' --parameter-overrides file://%s' % path
         _, err, _ = self.run_cmd(self.command, expected_rc=252)
-        self.assertTrue('JSON passed to --parameter-overrides must be'
-                        in err)
+        self.assertTrue('JSON passed to --parameter-overrides must be' in err)
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_describe_stacks.py 2.31.35-1/tests/functional/cloudformation/test_describe_stacks.py
--- 2.23.6-1/tests/functional/cloudformation/test_describe_stacks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_describe_stacks.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDescribeStacks(BaseAWSCommandParamsTest):
-
     prefix = 'cloudformation describe-stacks '
 
     def test_can_single_argument(self):
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_package.py 2.31.35-1/tests/functional/cloudformation/test_package.py
--- 2.23.6-1/tests/functional/cloudformation/test_package.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_package.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,22 +12,23 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+import os
 import shutil
 import tempfile
-import os
 import zipfile
+from unittest import TestCase
 
 import pytest
 
-from unittest import TestCase
-from awscli.customizations.cloudformation.artifact_exporter import make_zip
+from awscli.customizations.cloudformation.artifact_exporter import (
+    Template,
+    make_zip,
+)
 from awscli.customizations.cloudformation.yamlhelper import yaml_dump
-from awscli.customizations.cloudformation.artifact_exporter import Template
 from awscli.testutils import skip_if_windows
 
 
 class TestPackageZipFiles(TestCase):
-
     def setUp(self):
         self.rootdir = tempfile.mkdtemp()
         self.ziproot = os.path.join(self.rootdir, "zipcontents")
@@ -53,7 +54,9 @@ class TestPackageZipFiles(TestCase):
         os.symlink(data_file, link_name)
 
         # Zip up the contents of folder `ziproot` which contains the symlink
-        zipfile_path = make_zip(os.path.join(self.rootdir, "archive"), self.ziproot)
+        zipfile_path = make_zip(
+            os.path.join(self.rootdir, "archive"), self.ziproot
+        )
 
         # Now verify that the zipfile includes contents of the data file we created
         myzip = zipfile.ZipFile(zipfile_path)
@@ -67,8 +70,7 @@ class TestPackageZipFiles(TestCase):
 
 def _generate_template_cases():
     test_case_path = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)),
-        'deploy_templates'
+        os.path.dirname(os.path.abspath(__file__)), 'deploy_templates'
     )
     cases = []
     for case in os.listdir(test_case_path):
@@ -76,25 +78,24 @@ def _generate_template_cases():
         cases.append(
             (
                 os.path.join(case_path, 'input.yml'),
-                os.path.join(case_path, 'output.yml')
-             )
+                os.path.join(case_path, 'output.yml'),
+            )
         )
     return cases
 
 
 @pytest.mark.parametrize(
-    'input_template,output_template', _generate_template_cases())
+    'input_template,output_template', _generate_template_cases()
+)
 def test_known_templates(input_template, output_template):
     template = Template(input_template, os.getcwd(), None)
     exported = template.export()
     result = yaml_dump(exported)
-    expected = open(output_template, 'r').read()
+    expected = open(output_template).read()
 
     assert result == expected, (
         '\nAcutal template:\n'
         '%s'
         '\nDiffers from expected template:\n'
-        '%s' % (
-            result, expected
-        )
+        '%s' % (result, expected)
     )
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_register_type.py 2.31.35-1/tests/functional/cloudformation/test_register_type.py
--- 2.23.6-1/tests/functional/cloudformation/test_register_type.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_register_type.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestRegisterType(BaseAWSCommandParamsTest):
-
     prefix = 'cloudformation register-type'
 
     def test_schema_handler_package_during_register_url(self):
@@ -23,6 +22,6 @@ class TestRegisterType(BaseAWSCommandPar
         cmdline += '--schema-handler-package s3://bucket-name/my-organization-resource_name.zip'
         result = {
             'TypeName': 'test-type-name',
-            'SchemaHandlerPackage': 's3://bucket-name/my-organization-resource_name.zip'
+            'SchemaHandlerPackage': 's3://bucket-name/my-organization-resource_name.zip',
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/cloudformation/test_update_stack.py 2.31.35-1/tests/functional/cloudformation/test_update_stack.py
--- 2.23.6-1/tests/functional/cloudformation/test_update_stack.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudformation/test_update_stack.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestUpdateStack(BaseAWSCommandParamsTest):
-
     prefix = 'cloudformation update-stack'
 
     def test_stack_policy_during_update_url(self):
@@ -23,6 +22,6 @@ class TestUpdateStack(BaseAWSCommandPara
         cmdline += '--stack-policy-during-update-url http://foo'
         result = {
             'StackName': 'test-stack',
-            'StackPolicyDuringUpdateURL': 'http://foo'
+            'StackPolicyDuringUpdateURL': 'http://foo',
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/cloudfront/test_create_distribution.py 2.31.35-1/tests/functional/cloudfront/test_create_distribution.py
--- 2.23.6-1/tests/functional/cloudfront/test_create_distribution.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudfront/test_create_distribution.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestCreateDistribution(BaseAWSCommandParamsTest):
-
     prefix = 'cloudfront create-distribution '
 
     def test_origin_domain_name_with_custom_domain(self):
@@ -23,19 +22,21 @@ class TestCreateDistribution(BaseAWSComm
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{
-                        'CustomOriginConfig': mock.ANY,
-                        'DomainName': 'foo.com',
-                        'Id': mock.ANY,
-                        'OriginPath': '',
-                    }]
+                    'Items': [
+                        {
+                            'CustomOriginConfig': mock.ANY,
+                            'DomainName': 'foo.com',
+                            'Id': mock.ANY,
+                            'OriginPath': '',
+                        }
+                    ],
                 },
                 'CallerReference': mock.ANY,
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
-                },
-            }
+            },
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
@@ -45,73 +46,81 @@ class TestCreateDistribution(BaseAWSComm
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{
-                        'S3OriginConfig': mock.ANY,
-                        'DomainName': 'foo.s3.amazonaws.com',
-                        'Id': mock.ANY,
-                        'OriginPath': '',
-                    }]
+                    'Items': [
+                        {
+                            'S3OriginConfig': mock.ANY,
+                            'DomainName': 'foo.s3.amazonaws.com',
+                            'Id': mock.ANY,
+                            'OriginPath': '',
+                        }
+                    ],
                 },
                 'CallerReference': mock.ANY,
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
-                },
-            }
+            },
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
     def test_s3_domain_with_default_root_object(self):
-        cmdline = (self.prefix + '--origin-domain-name foo.s3.amazonaws.com '
-                   + '--default-root-object index.html')
+        cmdline = (
+            self.prefix
+            + '--origin-domain-name foo.s3.amazonaws.com '
+            + '--default-root-object index.html'
+        )
         result = {
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{
-                        'S3OriginConfig': mock.ANY,
-                        'DomainName': 'foo.s3.amazonaws.com',
-                        'Id': mock.ANY,
-                        'OriginPath': '',
-                    }]
+                    'Items': [
+                        {
+                            'S3OriginConfig': mock.ANY,
+                            'DomainName': 'foo.s3.amazonaws.com',
+                            'Id': mock.ANY,
+                            'OriginPath': '',
+                        }
+                    ],
                 },
                 'CallerReference': mock.ANY,
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
                 'DefaultRootObject': 'index.html',
-                },
-            }
+            },
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
     def test_distribution_config(self):
         # To demonstrate the original --distribution-config still works
-        cmdline = self.prefix + ('--distribution-config '
+        cmdline = self.prefix + (
+            '--distribution-config '
             'Origins={Quantity=1,Items=[{Id=foo,DomainName=bar}]},'
             'DefaultCacheBehavior={'
-                'TargetOriginId=foo,'
-                'ForwardedValues={QueryString=False,Cookies={Forward=none}},'
-                'TrustedSigners={Enabled=True,Quantity=0},'
-                'ViewerProtocolPolicy=allow-all,'
-                'MinTTL=0'
-                '},'
+            'TargetOriginId=foo,'
+            'ForwardedValues={QueryString=False,Cookies={Forward=none}},'
+            'TrustedSigners={Enabled=True,Quantity=0},'
+            'ViewerProtocolPolicy=allow-all,'
+            'MinTTL=0'
+            '},'
             'CallerReference=abcd,'
             'Enabled=True,'
             'Comment='
-            )
+        )
         result = {
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}]
+                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}],
                 },
                 'CallerReference': 'abcd',
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
-                },
-            }
+            },
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
@@ -119,7 +128,8 @@ class TestCreateDistribution(BaseAWSComm
         self.assert_params_for_cmd(
             self.prefix + '--distribution-config {} --origin-domain-name a.us',
             expected_rc=252,
-            stderr_contains='cannot be specified when one of the following')
+            stderr_contains='cannot be specified when one of the following',
+        )
 
     def test_no_input(self):
         self.run_cmd(self.prefix, expected_rc=252)
diff -pruN 2.23.6-1/tests/functional/cloudfront/test_create_invalidation.py 2.31.35-1/tests/functional/cloudfront/test_create_invalidation.py
--- 2.23.6-1/tests/functional/cloudfront/test_create_invalidation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudfront/test_create_invalidation.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestCreateInvalidation(BaseAWSCommandParamsTest):
-
     prefix = 'cloudfront create-invalidation --distribution-id my_id '
 
     def test_invalidation_batch_only(self):
@@ -25,8 +24,8 @@ class TestCreateInvalidation(BaseAWSComm
             'InvalidationBatch': {
                 'Paths': {'Items': ['foo.txt', 'bar.txt'], 'Quantity': 2},
                 'CallerReference': 'ab',
-                },
-            }
+            },
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_paths_only(self):
@@ -36,8 +35,8 @@ class TestCreateInvalidation(BaseAWSComm
             'InvalidationBatch': {
                 'Paths': {'Items': ['index.html', 'foo.txt'], 'Quantity': 2},
                 'CallerReference': mock.ANY,
-                },
-            }
+            },
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
diff -pruN 2.23.6-1/tests/functional/cloudfront/test_get_distribution_config.py 2.31.35-1/tests/functional/cloudfront/test_get_distribution_config.py
--- 2.23.6-1/tests/functional/cloudfront/test_get_distribution_config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudfront/test_get_distribution_config.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestGetDistributionConfig(BaseAWSCommandParamsTest):
-
     prefix = 'cloudfront get-distribution-config'
 
     def test_get_distribution_config(self):
diff -pruN 2.23.6-1/tests/functional/cloudfront/test_sign.py 2.31.35-1/tests/functional/cloudfront/test_sign.py
--- 2.23.6-1/tests/functional/cloudfront/test_sign.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudfront/test_sign.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,9 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.compat import urlparse, parse_qs
+from botocore.compat import parse_qs, urlparse
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest, FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator, mock
 
 
 class TestSign(BaseAWSCommandParamsTest):
@@ -52,7 +52,7 @@ class TestSign(BaseAWSCommandParamsTest)
         files = FileCreator()
         self.private_key_file = files.create_file('foo.pem', self.private_key)
         self.addCleanup(files.remove_all)
-        super(TestSign, self).setUp()
+        super().setUp()
 
     def assertDesiredUrl(self, url, base, params):
         self.assertEqual(len(url.splitlines()), 1, "Expects only 1 line")
@@ -62,8 +62,11 @@ class TestSign(BaseAWSCommandParamsTest)
 
     def test_canned_policy(self):
         cmdline = (
-            self.prefix + '--private-key file://' + self.private_key_file +
-            ' --date-less-than 2016-1-1')
+            self.prefix
+            + '--private-key file://'
+            + self.private_key_file
+            + ' --date-less-than 2016-1-1'
+        )
         expected_signature = (
             "UiEmtMsInU-gXoa1O7-bTRJmZ~ocphB0ONMxyEHs2r8Y9dwzeB~DkbgzPMX3jbdb"
             "wIwVX3f4VcY4HBLdPSkbF~D6KbUlxPw1ju8mlXeu2C436XxZdrJrrJaiEDaTpKsl"
@@ -74,14 +77,20 @@ class TestSign(BaseAWSCommandParamsTest)
         )
         expected_params = {
             'Key-Pair-Id': ['my_id'],
-            'Expires': ['1451606400'], 'Signature': [expected_signature]}
+            'Expires': ['1451606400'],
+            'Signature': [expected_signature],
+        }
         self.assertDesiredUrl(
-            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params)
+            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params
+        )
 
     def test_custom_policy(self):
         cmdline = (
-            self.prefix + '--private-key file://' + self.private_key_file +
-            ' --date-less-than 2016-1-1 --ip-address 12.34.56.78')
+            self.prefix
+            + '--private-key file://'
+            + self.private_key_file
+            + ' --date-less-than 2016-1-1 --ip-address 12.34.56.78'
+        )
         expected_signature = (
             "Vw-WG18WJJXim7YSGWS-zW~XmFB9MjCDOvgC~2Gz-1wiMQzCrXzYYbSE7-aF6JGO"
             "Ob5ewArpMqmu2g5mohnqgieZX1NY6IOteDoXYgqaNj1DafHWQD6UJ3IKVfkxISU9"
@@ -92,6 +101,104 @@ class TestSign(BaseAWSCommandParamsTest)
         )
         expected_params = {
             'Key-Pair-Id': ['my_id'],
-            'Policy': [mock.ANY], 'Signature': [expected_signature]}
+            'Policy': [mock.ANY],
+            'Signature': [expected_signature],
+        }
         self.assertDesiredUrl(
-            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params)
+            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params
+        )
+
+
+class TestSignPKCS8(BaseAWSCommandParamsTest):
+    # A private key only for testing purpose.
+    private_key = (
+        '-----BEGIN PRIVATE KEY-----\n'
+        'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDiVR5JIogE3iKq\n'
+        'buYalyKO3vmRnOxf7OU6/8WPma8wpWltb4d67HRBxeUvNugGq0uwinoPDfwF74zG\n'
+        'hOKeGrDPLVAbekPzYv1SnB/ppy+nvojDew72xgW56ii9X+Jk83f0TGNTmC7sBvcc\n'
+        'kqz3T/aX23NU0faCW5bl6fiW+HVUHZe/aE4nHqhorHiDXlvTV6wpjEWS6Xyf7ll+\n'
+        'Jvf4eXg7GqTGTGKsB0jE/xPKdVbnQD67fkJOdaAKTQKanY1UF2SS5Nx6NcBxbcCR\n'
+        'Va4myn1JOeQDyHcIXb4NmBx3m21eJSotrJYmD9LTs16mB4wi21lvimALwKxZHjvV\n'
+        'p58xKyyJAgMBAAECggEAFtKPdb96KMd/hmEdaeQAk5iPYOwKd9fK+6qL8OGF5Wlg\n'
+        'mqzq4+3RAUrjw+GM/xMp1Dj6euclmTGhJ+mBcoDtgE6o68Rl8rZyJfDhVO3LY+ZW\n'
+        'IyQXC7JHJIqkpgfzq8tTNrq3L1hCrwE6zNJLh7qz+nciB5UOfvGeYzu3Gf4e0qbi\n'
+        'rlStPa7Gi4Oc0EO/51YRjU3IpXjFRvcsqBtV95XA96hPo2ice0KMcrWPF9Kai8bQ\n'
+        '0sE+wv+YbgIsbwmnHntdd7Sfxx2jPjXeEgh/ncoXCMYfQueSAHQ/EQBWkofhUeB5\n'
+        'oEuQlS5b3D1t3aSKr2o7vrMtu1UWhabu0u+Db/r6gQKBgQD7DKJk0Ow2JBaoM7vV\n'
+        'UucuLWLaY4MG4a1YDlHPl6zmD1OioKrQw2h/m2SalYfxM8BjPbR9eesyDv55HQnR\n'
+        'ptC1SBNxH7dCwWqCeD1jNVoJP8VkBDPRiNaLz68wYkrtfiXCa0DYbewbdrEFDaIk\n'
+        'IErrRzxSWTSNE8Y1YA3ka6MiaQKBgQDmy7TdLa0tyYwY30DmLmS4WUZglJZKrT/0\n'
+        'd9UTz7KJek7P9BNZAe8yotVrxO2di+8W85GAVQBexeISrEW6ZK6GHGz949fJmbvq\n'
+        'QOU/6TgE01AL0nUZF2QKbdAleonlR/WB9IpZTQf/ZI1HmUV0QL3nCrs9OoFbzx4E\n'
+        'GfjbCmQ1IQKBgFOlZgZJRirT42ivtAnj0XslTCaPuXx1fRg1zTRpyQXuXWN2PPPJ\n'
+        '5+t8jwyifeTz5UorqROVp7PKIyefcUIVXrzIAxJSCvGHGEHYZjvD7vfd85rbe5h5\n'
+        'C2MSE8D/Pw/aVCJvMe/q0Bxmc5zHahq3V78EwSh+6G+JAyWNl5Nf+b7hAoGBAM1Z\n'
+        'PGB7DpYpuLw8j9r+NmGMFUFDk4F4KupSYMTSzPDjYRJIAZr1TKWKGkhcHGtMIXwT\n'
+        'VUeQ2dZ5TM/+dcAFav8qdZNk0Q+v+HHSMeeuk0g/1/3c0JF1rW5WDJf8MotNflSV\n'
+        'hy8zicUj60xkRFbOb+kNNFGjJ4vPec5+aVxDH6vhAoGBAI3RsJZXYUL9PhakrsVp\n'
+        '71N+JbNxvw8L9b2VL6ecLNMtPcG5ddFaMhc+kQZap6vAZXauft1fzvAO3fMKNJXm\n'
+        'yvtM2CEYzVd8lFqA8xETa/FgelkFjB5gkiq4EDIuX6mFStkskKUfRHHrb0ATKHSl\n'
+        'YvT60qFc4be2Mfyzt+CuGhYi\n'
+        '-----END PRIVATE KEY-----\n'
+    )
+    prefix = 'cloudfront sign --key-pair-id my_id --url http://example.com/hi '
+
+    def setUp(self):
+        files = FileCreator()
+        self.private_key_file = files.create_file('foo.pem', self.private_key)
+        self.addCleanup(files.remove_all)
+        super().setUp()
+
+    def assertDesiredUrl(self, url, base, params):
+        self.assertEqual(len(url.splitlines()), 1, "Expects only 1 line")
+        self.assertTrue(url.startswith(base), "URL mismatch")
+        url = url.strip()  # Otherwise the last param contains a trailing CRLF
+        self.assertEqual(parse_qs(urlparse(url).query), params)
+
+    def test_canned_policy(self):
+        cmdline = (
+            self.prefix
+            + '--private-key file://'
+            + self.private_key_file
+            + ' --date-less-than 2016-1-1'
+        )
+        expected_signature = (
+            "cIOcUXezjLknta66EiRX7rk3viXv20F01OwZa1X2QWxhnWnBVno~mg0Gcyfzvfgo"
+            "-oXCvZC3bdsfTJXiBcnC1XyxCxBa03bouAae4A0ajP4ey~TKKwPHikOmu2Rc1NEu"
+            "-c6wr8DbMZrm~1WIWG4kFG1jhSRoEk2W82NkGEh4xEPq3gaNjQPfF7zIAwcZUUkg"
+            "GkIbT-cQ5UZ6rTqTiFGdXD2z8kjulgmtu8Quo6hplch~9ltmKTOt9blswd6hMfCM"
+            "NJ~tUj77j8fz968adb9w43jBtl~~5seb8ys01cg5IGWV44LKMWaLmEgzWQAjg-Jg"
+            "9wx-HYwuqH4Klds03WZzRQ__"
+        )
+        expected_params = {
+            'Key-Pair-Id': ['my_id'],
+            'Expires': ['1451606400'],
+            'Signature': [expected_signature],
+        }
+        self.assertDesiredUrl(
+            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params
+        )
+
+    def test_custom_policy(self):
+        cmdline = (
+            self.prefix
+            + '--private-key file://'
+            + self.private_key_file
+            + ' --date-less-than 2016-1-1 --ip-address 12.34.56.78'
+        )
+        expected_signature = (
+            "beEwE8ZmSX71e79a5dxupiE0zHxahe1IFzuTExKxV0InQnKFlT0wj0tardAlGKFL"
+            "LdX9HMGiVjIjvMBdUZQJ-9mMXBtFsQ5nLDEoRH29H8AATzaf4Nx4n29XtVp-jPVF"
+            "GFtmdaGJedjJRMV-IzBQcJ19VPl3R8t3Fp~8eP9-P8KpvkJXH2UvJ2H8nMBt2Ogv"
+            "brCT2hl~91UtEOgmxeA6twWNpziH0uEdpDOHgnYer5ScdFoo02rPjRXIqPuQcjwP"
+            "T2wu~A5T~zomcghjMcIdLeJeS9nscTkjON69xBB-t4lclK3mfzsXTumcx-FzLgOB"
+            "bP2Z1d~ZU6X0rkeL~w1BlQ__"
+        )
+        expected_params = {
+            'Key-Pair-Id': ['my_id'],
+            'Policy': [mock.ANY],
+            'Signature': [expected_signature],
+        }
+        self.assertDesiredUrl(
+            self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params
+        )
diff -pruN 2.23.6-1/tests/functional/cloudfront/test_update_distribution.py 2.31.35-1/tests/functional/cloudfront/test_update_distribution.py
--- 2.23.6-1/tests/functional/cloudfront/test_update_distribution.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudfront/test_update_distribution.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestUpdateDistribution(BaseAWSCommandParamsTest):
-
     prefix = 'cloudfront update-distribution --id myid '
 
     def test_default_root_object(self):
@@ -25,7 +24,7 @@ class TestUpdateDistribution(BaseAWSComm
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}]
+                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}],
                 },
                 'CallerReference': 'abcd',
                 'Comment': '',
@@ -33,59 +32,62 @@ class TestUpdateDistribution(BaseAWSComm
                 'DefaultCacheBehavior': {
                     'TargetOriginId': 'foo',
                     'ForwardedValues': {
-                        'QueryString': True, 'Cookies': {'Forward': 'none'}},
+                        'QueryString': True,
+                        'Cookies': {'Forward': 'none'},
+                    },
                     'TrustedSigners': {'Enabled': True, 'Quantity': 0},
                     'ViewerProtocolPolicy': 'allow-all',
                     'MinTTL': 0,
-                    },
                 },
-            }
+            },
+        }
         result = {
             'DistributionConfig': {
                 'DefaultRootObject': 'index.html',
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}]
+                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}],
                 },
                 'CallerReference': 'abcd',
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
-                },
+            },
             'Id': 'myid',
             'IfMatch': '__etag__',
-            }
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
     def test_distribution_config(self):
         # To demonstrate the original --distribution-config still works
-        cmdline = self.prefix + ('--distribution-config '
+        cmdline = self.prefix + (
+            '--distribution-config '
             'Origins={Quantity=1,Items=[{Id=foo,DomainName=bar}]},'
             'DefaultCacheBehavior={'
-                'TargetOriginId=foo,'
-                'ForwardedValues={QueryString=False,Cookies={Forward=none}},'
-                'TrustedSigners={Enabled=True,Quantity=0},'
-                'ViewerProtocolPolicy=allow-all,'
-                'MinTTL=0'
-                '},'
+            'TargetOriginId=foo,'
+            'ForwardedValues={QueryString=False,Cookies={Forward=none}},'
+            'TrustedSigners={Enabled=True,Quantity=0},'
+            'ViewerProtocolPolicy=allow-all,'
+            'MinTTL=0'
+            '},'
             'CallerReference=abcd,'
             'Enabled=True,'
             'Comment='
-            )
+        )
         result = {
             'DistributionConfig': {
                 'Origins': {
                     'Quantity': 1,
-                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}]
+                    'Items': [{'Id': 'foo', 'DomainName': 'bar'}],
                 },
                 'CallerReference': 'abcd',
                 'Comment': '',
                 'Enabled': True,
                 'DefaultCacheBehavior': mock.ANY,
-                },
+            },
             'Id': 'myid',
-            }
+        }
         self.run_cmd(cmdline)
         self.assertEqual(self.last_kwargs, result)
 
@@ -93,7 +95,8 @@ class TestUpdateDistribution(BaseAWSComm
         self.assert_params_for_cmd(
             self.prefix + '--distribution-config {} --default-root-object foo',
             expected_rc=252,
-            stderr_contains='cannot be specified when one of the following')
+            stderr_contains='cannot be specified when one of the following',
+        )
 
     def test_no_input(self):
         self.run_cmd(self.prefix, expected_rc=252)
diff -pruN 2.23.6-1/tests/functional/cloudsearch/test_cloudsearch.py 2.31.35-1/tests/functional/cloudsearch/test_cloudsearch.py
--- 2.23.6-1/tests/functional/cloudsearch/test_cloudsearch.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudsearch/test_cloudsearch.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestCloudSearchDefineExpression(BaseAWSCommandParamsTest):
-
     prefix = 'cloudsearch define-expression'
 
     def test_flattened(self):
@@ -25,13 +24,12 @@ class TestCloudSearchDefineExpression(Ba
         cmdline += ' --expression 10'
         result = {
             'DomainName': 'abc123',
-            'Expression': {'ExpressionName': 'foo',
-                           'ExpressionValue': '10'}}
+            'Expression': {'ExpressionName': 'foo', 'ExpressionValue': '10'},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestCloudSearchDefineIndexField(BaseAWSCommandParamsTest):
-
     prefix = 'cloudsearch define-index-field'
 
     def test_flattened(self):
@@ -44,11 +42,16 @@ class TestCloudSearchDefineIndexField(Ba
         cmdline += ' --source-field fieldname123'
         result = {
             'DomainName': 'abc123',
-            'IndexField': {'IndexFieldName': 'foo',
-                           'IndexFieldType': 'int',
-                           'IntOptions': {'DefaultValue': 10,
-                                          'SearchEnabled': False,
-                                          'SourceField': 'fieldname123'}}}
+            'IndexField': {
+                'IndexFieldName': 'foo',
+                'IndexFieldType': 'int',
+                'IntOptions': {
+                    'DefaultValue': 10,
+                    'SearchEnabled': False,
+                    'SourceField': 'fieldname123',
+                },
+            },
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_latlon(self):
@@ -65,5 +68,10 @@ class TestCloudSearchDefineIndexField(Ba
                 'IndexFieldName': 'foo',
                 'IndexFieldType': 'latlon',
                 'LatLonOptions': {
-                    'DefaultValue': '10', 'SearchEnabled': False, 'SourceField': 'fieldname123'}}}
+                    'DefaultValue': '10',
+                    'SearchEnabled': False,
+                    'SourceField': 'fieldname123',
+                },
+            },
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/cloudtrail/__init__.py 2.31.35-1/tests/functional/cloudtrail/__init__.py
--- 2.23.6-1/tests/functional/cloudtrail/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudtrail/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 
 import os
 
+
 def get_private_key_path():
     return os.path.join(
         os.path.dirname(os.path.realpath(__file__)),
diff -pruN 2.23.6-1/tests/functional/cloudtrail/test_validation.py 2.31.35-1/tests/functional/cloudtrail/test_validation.py
--- 2.23.6-1/tests/functional/cloudtrail/test_validation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudtrail/test_validation.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,30 @@
 import gzip
 
 from botocore.exceptions import ClientError
-from tests.unit.customizations.cloudtrail.test_validation import \
-    create_scenario, TEST_TRAIL_ARN, START_DATE, END_DATE, VALID_TEST_KEY, \
-    DigestProvider, MockDigestProvider, TEST_ACCOUNT_ID
-from awscli.testutils import mock, BaseAWSCommandParamsTest
-from awscli.customizations.cloudtrail.validation import DigestTraverser, \
-    DATE_FORMAT, format_display_date, S3ClientProvider
-from awscli.compat import BytesIO
 from botocore.handlers import parse_get_bucket_location
 
-RETRIEVER_FUNCTION = 'awscli.customizations.cloudtrail.validation.create_digest_traverser'
+from awscli.compat import BytesIO
+from awscli.customizations.cloudtrail.validation import (
+    DATE_FORMAT,
+    DigestTraverser,
+    S3ClientProvider,
+    format_display_date,
+)
+from awscli.testutils import BaseAWSCommandParamsTest, mock
+from tests.unit.customizations.cloudtrail.test_validation import (
+    END_DATE,
+    START_DATE,
+    TEST_ACCOUNT_ID,
+    TEST_TRAIL_ARN,
+    VALID_TEST_KEY,
+    DigestProvider,
+    MockDigestProvider,
+    create_scenario,
+)
+
+RETRIEVER_FUNCTION = (
+    'awscli.customizations.cloudtrail.validation.create_digest_traverser'
+)
 START_TIME_ARG = START_DATE.strftime(DATE_FORMAT)
 END_TIME_ARG = END_DATE.strftime(DATE_FORMAT)
 
@@ -35,18 +49,33 @@ def _gz_compress(data):
     return out.getvalue()
 
 
-def _setup_mock_traverser(mock_create_digest_traverser, key_provider,
-                          digest_provider, validator):
-    def mock_create(trail_arn, cloudtrail_client, s3_client_provider,
-                    organization_client, trail_source_region,
-                    bucket, prefix, on_missing, on_invalid, on_gap,
-                    account_id):
+def _setup_mock_traverser(
+    mock_create_digest_traverser, key_provider, digest_provider, validator
+):
+    def mock_create(
+        trail_arn,
+        cloudtrail_client,
+        s3_client_provider,
+        organization_client,
+        trail_source_region,
+        bucket,
+        prefix,
+        on_missing,
+        on_invalid,
+        on_gap,
+        account_id,
+    ):
         bucket = bucket or '1'
         return DigestTraverser(
-            digest_provider=digest_provider, starting_bucket=bucket,
-            starting_prefix=prefix, public_key_provider=key_provider,
-            digest_validator=validator, on_invalid=on_invalid, on_gap=on_gap,
-            on_missing=on_missing)
+            digest_provider=digest_provider,
+            starting_bucket=bucket,
+            starting_prefix=prefix,
+            public_key_provider=key_provider,
+            digest_validator=validator,
+            on_invalid=on_invalid,
+            on_gap=on_gap,
+            on_missing=on_missing,
+        )
 
     mock_create_digest_traverser.side_effect = mock_create
 
@@ -56,30 +85,37 @@ class BaseCloudTrailCommandTest(BaseAWSC
         super(BaseCloudTrailCommandTest, self).setUp()
         # We need to remove this handler to ensure that we can mock out the
         # get_bucket_location operation.
-        self.driver.session.unregister('after-call.s3.GetBucketLocation',
-                                       parse_get_bucket_location)
+        self.driver.session.unregister(
+            'after-call.s3.GetBucketLocation', parse_get_bucket_location
+        )
         self._logs = [
-            {'hashValue': '44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a',
-             'oldestEventTime': '2015-08-16T22:36:54Z',
-             's3Object': 'key1',
-             'hashAlgorithm': 'SHA-256',
-             's3Bucket': '1',
-             'newestEventTime': '2015-08-16T22:36:54Z',
-             '_raw_value': '{}'},
-            {'hashValue': '7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b',
-             'oldestEventTime': '2015-08-16T22:54:56Z',
-             's3Object': 'key2',
-             'hashAlgorithm': 'SHA-256',
-             's3Bucket': '1',
-             'newestEventTime': '2015-08-16T22:55:49Z',
-             '_raw_value': '{"foo":"bar"}'},
-            {'hashValue': '5b1070294963f40cb5b3c7a05d3fbaf7ffe4e5d226632026e39cfeb32d349c0c',
-             'oldestEventTime': '2015-08-16T21:54:59Z',
-             's3Object': 'key3',
-             'hashAlgorithm': 'SHA-256',
-             's3Bucket': '1',
-             'newestEventTime': '2015-08-16T21:54:59Z',
-             '_raw_value': '{"baz":"qux"}'}
+            {
+                'hashValue': '44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a',
+                'oldestEventTime': '2015-08-16T22:36:54Z',
+                's3Object': 'key1',
+                'hashAlgorithm': 'SHA-256',
+                's3Bucket': '1',
+                'newestEventTime': '2015-08-16T22:36:54Z',
+                '_raw_value': '{}',
+            },
+            {
+                'hashValue': '7a38bf81f383f69433ad6e900d35b3e2385593f76a7b7ab5d4355b8ba41ee24b',
+                'oldestEventTime': '2015-08-16T22:54:56Z',
+                's3Object': 'key2',
+                'hashAlgorithm': 'SHA-256',
+                's3Bucket': '1',
+                'newestEventTime': '2015-08-16T22:55:49Z',
+                '_raw_value': '{"foo":"bar"}',
+            },
+            {
+                'hashValue': '5b1070294963f40cb5b3c7a05d3fbaf7ffe4e5d226632026e39cfeb32d349c0c',
+                'oldestEventTime': '2015-08-16T21:54:59Z',
+                's3Object': 'key3',
+                'hashAlgorithm': 'SHA-256',
+                's3Bucket': '1',
+                'newestEventTime': '2015-08-16T21:54:59Z',
+                '_raw_value': '{"baz":"qux"}',
+            },
         ]
 
 
@@ -96,84 +132,133 @@ class TestCloudTrailCommand(BaseCloudTra
     def test_verbose_output_shows_happy_case(self):
         self.parsed_responses = [
             {'LocationConstraint': 'us-east-1'},
-            {'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value']))}
+            {'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value']))},
         ]
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link'], [[], [self._logs[0]]])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time %s "
-             "--region us-east-1 --verbose")
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 0)
-        self.assertIn('Digest file\ts3://1/%s\tvalid'
-                      % digest_provider.digests[0], stdout)
+            ['gap', 'link'], [[], [self._logs[0]]]
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time %s "
+                "--region us-east-1 --verbose"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tvalid' % digest_provider.digests[0],
+            stdout,
+        )
 
     def test_verbose_output_shows_valid_digests(self):
-        key_provider, digest_provider, validator = create_scenario(
-            ['gap'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
+        key_provider, digest_provider, validator = create_scenario(['gap'], [])
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s --verbose"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 0)
-        self.assertIn('Digest file\ts3://1/%s\tvalid'
-                      % digest_provider.digests[0], stdout)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tvalid' % digest_provider.digests[0],
+            stdout,
+        )
 
     def test_warns_when_digest_deleted(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'missing', 'link', 'missing'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
+            ['gap', 'missing', 'link', 'missing'], []
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s --verbose"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
-        self.assertIn('Digest file\ts3://1/%s\tINVALID: not found'
-                      % digest_provider.digests[1], stderr)
-        self.assertIn('Digest file\ts3://1/%s\tINVALID: not found'
-                      % digest_provider.digests[3], stderr)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tINVALID: not found'
+            % digest_provider.digests[1],
+            stderr,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tINVALID: not found'
+            % digest_provider.digests[3],
+            stderr,
+        )
 
     def test_warns_when_no_digests_in_gap(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'gap'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
+            ['gap', 'gap'], []
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time '%s'"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 0)
-        self.assertIn(('No log files were delivered by CloudTrail between '
-                       '2014-08-10T00:00:00Z and 2014-08-10T01:00:00Z'), stderr)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            (
+                'No log files were delivered by CloudTrail between '
+                '2014-08-10T00:00:00Z and 2014-08-10T01:00:00Z'
+            ),
+            stderr,
+        )
 
     def test_warns_when_digest_invalid(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'invalid', 'link'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
+            ['gap', 'invalid', 'link'], []
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
         self.assertIn('invalid error', stderr)
         self.assertIn(
             'Results requested for %s to ' % format_display_date(START_DATE),
-            stdout)
-        self.assertIn('2/3 digest files valid, 1/3 digest files INVALID',
-                      stdout)
+            stdout,
+        )
+        self.assertIn(
+            '2/3 digest files valid, 1/3 digest files INVALID', stdout
+        )
 
     def test_shows_successful_summary(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time %s "
-             "--end-time %s --verbose")
-            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG), 0)
-        self.assertIn(('Results requested for 2014-08-10T00:00:00Z to '
-                       '2015-08-10T00:00:00Z'), stdout)
+            ['gap', 'link'], []
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time %s "
+                "--end-time %s --verbose"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            (
+                'Results requested for 2014-08-10T00:00:00Z to '
+                '2015-08-10T00:00:00Z'
+            ),
+            stdout,
+        )
         self.assertIn('2/2 digest files valid', stdout)
         self.assertIn(
             'Results found for 2014-08-10T01:00:00Z to 2014-08-10T02:30:00Z',
-            stdout)
+            stdout,
+        )
 
     def test_warns_when_no_digests_after_start_date(self):
         key_provider = mock.Mock()
@@ -181,15 +266,22 @@ class TestCloudTrailCommand(BaseCloudTra
         digest_provider = mock.Mock()
         digest_provider.load_digest_keys_in_range.return_value = []
         validator = mock.Mock()
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ('cloudtrail validate-logs --trail-arn %s --start-time %s '
-             '--end-time %s') % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG),
-            0)
-        self.assertIn('Results requested for %s to %s\nNo digests found'
-                      % (format_display_date(START_DATE),
-                         format_display_date(END_DATE)), stdout)
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                'cloudtrail validate-logs --trail-arn %s --start-time %s '
+                '--end-time %s'
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            'Results requested for %s to %s\nNo digests found'
+            % (format_display_date(START_DATE), format_display_date(END_DATE)),
+            stdout,
+        )
 
     def test_warns_when_no_digests_found_in_range(self):
         key_provider = mock.Mock()
@@ -197,89 +289,128 @@ class TestCloudTrailCommand(BaseCloudTra
         digest_provider = mock.Mock()
         digest_provider.load_digest_keys_in_range.return_value = []
         validator = mock.Mock()
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time '%s' "
-             "--end-time '%s'")
-            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG), 0)
-        self.assertIn('Results requested for %s to %s\nNo digests found'
-                      % (format_display_date(START_DATE),
-                         format_display_date(END_DATE)), stdout)
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time '%s' "
+                "--end-time '%s'"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            'Results requested for %s to %s\nNo digests found'
+            % (format_display_date(START_DATE), format_display_date(END_DATE)),
+            stdout,
+        )
 
     def test_warns_when_no_valid_digests_found_in_range(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['invalid'], [])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time '%s' "
-             "--end-time '%s'")
-            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG), 1)
+            ['invalid'], []
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time '%s' "
+                "--end-time '%s'"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG, END_TIME_ARG),
+            1,
+        )
         self.assertIn(
             'Results requested for %s to %s\nNo valid digests found in range'
-            % (format_display_date(START_DATE),
-               format_display_date(END_DATE)), stdout)
+            % (format_display_date(START_DATE), format_display_date(END_DATE)),
+            stdout,
+        )
 
     def test_fails_and_warns_when_log_hash_is_invalid(self):
         key_provider, digest_provider, validator = create_scenario(
-            ['gap'], [[self._logs[0]]])
+            ['gap'], [[self._logs[0]]]
+        )
         self.parsed_responses = [
             {'LocationConstraint': ''},
-            {'Body': BytesIO(_gz_compress('does not match'))}
+            {'Body': BytesIO(_gz_compress('does not match'))},
         ]
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time "
-             "--region us-east-1 '%s'") % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time "
+                "--region us-east-1 '%s'"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
         self.assertIn(
-            'Log file\ts3://1/key1\tINVALID: hash value doesn\'t match', stderr)
+            'Log file\ts3://1/key1\tINVALID: hash value doesn\'t match', stderr
+        )
 
     def test_validates_valid_log_files(self):
         key_provider, digest_provider, validator = create_scenario(
             ['gap', 'link', 'link'],
-            [[self._logs[2]], [], [self._logs[0], self._logs[1]]])
+            [[self._logs[2]], [], [self._logs[0], self._logs[1]]],
+        )
         self.parsed_responses = [
             {'LocationConstraint': ''},
             {'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value']))},
             {'Body': BytesIO(_gz_compress(self._logs[1]['_raw_value']))},
             {'Body': BytesIO(_gz_compress(self._logs[2]['_raw_value']))},
         ]
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s --verbose"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 0)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            0,
+        )
         self.assertIn('s3://1/key1', stdout)
         self.assertIn('s3://1/key2', stdout)
         self.assertIn('s3://1/key3', stdout)
 
     def test_ensures_start_time_before_end_time(self):
         stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time 2015-01-01 "
-             "--end-time 2014-01-01"), 252)
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time 2015-01-01 "
+                "--end-time 2014-01-01"
+            ),
+            252,
+        )
         self.assertIn('start-time must occur before end-time', stderr)
 
     def test_fails_when_digest_not_from_same_location_as_json_contents(self):
         key_name = END_TIME_ARG + '.json.gz'
-        digest = {'digestPublicKeyFingerprint': 'a',
-                  'digestS3Bucket': 'not_same',
-                  'digestS3Object': key_name,
-                  'previousDigestSignature': '...',
-                  'digestStartTime': '...',
-                  'digestEndTime': '...'}
+        digest = {
+            'digestPublicKeyFingerprint': 'a',
+            'digestS3Bucket': 'not_same',
+            'digestS3Object': key_name,
+            'previousDigestSignature': '...',
+            'digestStartTime': '...',
+            'digestEndTime': '...',
+        }
         digest_provider = mock.Mock()
         digest_provider.load_digest_keys_in_range.return_value = [key_name]
         digest_provider.fetch_digest.return_value = (digest, key_name)
-        _setup_mock_traverser(self._mock_traverser, mock.Mock(),
-                              digest_provider, mock.Mock())
+        _setup_mock_traverser(
+            self._mock_traverser, mock.Mock(), digest_provider, mock.Mock()
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
         self.assertIn(
-            ('Digest file\ts3://1/%s\tINVALID: has been moved from its '
-             'original location' % key_name), stderr)
+            (
+                'Digest file\ts3://1/%s\tINVALID: has been moved from its '
+                'original location' % key_name
+            ),
+            stderr,
+        )
 
     def test_fails_when_digest_is_missing_keys_before_validation(self):
         digest = {}
@@ -287,65 +418,96 @@ class TestCloudTrailCommand(BaseCloudTra
         key_name = END_TIME_ARG + '.json.gz'
         digest_provider.load_digest_keys_in_range.return_value = [key_name]
         digest_provider.fetch_digest.return_value = (digest, key_name)
-        _setup_mock_traverser(self._mock_traverser, mock.Mock(),
-                              digest_provider, mock.Mock())
+        _setup_mock_traverser(
+            self._mock_traverser, mock.Mock(), digest_provider, mock.Mock()
+        )
         stdout, stderr, rc = self.run_cmd(
             "cloudtrail validate-logs --trail-arn %s --start-time %s"
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
         self.assertIn(
             'Digest file\ts3://1/%s\tINVALID: invalid format' % key_name,
-            stderr)
+            stderr,
+        )
 
     def test_fails_when_digest_metadata_is_missing(self):
         key = MockDigestProvider([]).get_key_at_position(1)
         self.parsed_responses = [
             {'LocationConstraint': ''},
             {'Contents': [{'Key': key}]},
-            {'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value'])),
-             'Metadata': {}},
+            {
+                'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value'])),
+                'Metadata': {},
+            },
         ]
         s3_client_provider = S3ClientProvider(self.driver.session, 'us-east-1')
         digest_provider = DigestProvider(
-            s3_client_provider, TEST_ACCOUNT_ID, 'foo', 'us-east-1')
+            s3_client_provider, TEST_ACCOUNT_ID, 'foo', 'us-east-1'
+        )
         key_provider = mock.Mock()
         key_provider.get_public_keys.return_value = {
             'a': {'Value': VALID_TEST_KEY}
         }
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, mock.Mock())
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time %s "
-             "--region us-east-1") % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, mock.Mock()
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time %s "
+                "--region us-east-1"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            1,
+        )
         self.assertIn(
             'Digest file\ts3://1/%s\tINVALID: signature verification failed'
-            % key, stderr)
+            % key,
+            stderr,
+        )
 
     def test_follows_trails_when_bucket_changes(self):
         self.parsed_responses = [
             {'LocationConstraint': 'us-east-1'},
             {'Body': BytesIO(_gz_compress(self._logs[0]['_raw_value']))},
             {'LocationConstraint': 'us-west-2'},
-            {'LocationConstraint': 'eu-west-1'}
+            {'LocationConstraint': 'eu-west-1'},
         ]
         key_provider, digest_provider, validator = create_scenario(
             ['gap', 'bucket_change', 'link', 'bucket_change', 'link'],
-            [[], [self._logs[0]], [], [], []])
-        _setup_mock_traverser(self._mock_traverser, key_provider,
-                              digest_provider, validator)
-        stdout, stderr, rc = self.run_cmd(
-            ("cloudtrail validate-logs --trail-arn %s --start-time %s "
-             "--region us-east-1 --verbose")
-            % (TEST_TRAIL_ARN, START_TIME_ARG), 0)
-        self.assertIn('Digest file\ts3://3/%s\tvalid'
-                      % digest_provider.digests[0], stdout)
-        self.assertIn('Digest file\ts3://2/%s\tvalid'
-                      % digest_provider.digests[1], stdout)
-        self.assertIn('Digest file\ts3://2/%s\tvalid'
-                      % digest_provider.digests[2], stdout)
-        self.assertIn('Digest file\ts3://1/%s\tvalid'
-                      % digest_provider.digests[3], stdout)
-        self.assertIn('Digest file\ts3://1/%s\tvalid'
-                      % digest_provider.digests[4], stdout)
+            [[], [self._logs[0]], [], [], []],
+        )
+        _setup_mock_traverser(
+            self._mock_traverser, key_provider, digest_provider, validator
+        )
+        stdout, stderr, rc = self.run_cmd(
+            (
+                "cloudtrail validate-logs --trail-arn %s --start-time %s "
+                "--region us-east-1 --verbose"
+            )
+            % (TEST_TRAIL_ARN, START_TIME_ARG),
+            0,
+        )
+        self.assertIn(
+            'Digest file\ts3://3/%s\tvalid' % digest_provider.digests[0],
+            stdout,
+        )
+        self.assertIn(
+            'Digest file\ts3://2/%s\tvalid' % digest_provider.digests[1],
+            stdout,
+        )
+        self.assertIn(
+            'Digest file\ts3://2/%s\tvalid' % digest_provider.digests[2],
+            stdout,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tvalid' % digest_provider.digests[3],
+            stdout,
+        )
+        self.assertIn(
+            'Digest file\ts3://1/%s\tvalid' % digest_provider.digests[4],
+            stdout,
+        )
 
 
 class TestCloudTrailCommandWithMissingLogs(BaseCloudTrailCommandTest):
@@ -353,19 +515,28 @@ class TestCloudTrailCommandWithMissingLo
     behavior of BaseAWSCommandParamsTest. Instead of returning responses from
     a queue, we want to raise a ClientError.
     """
+
     def test_fails_and_warns_when_log_is_deleted(self):
         # Override the default request patching because we need to
         # raise a ClientError exception.
         key_provider, digest_provider, validator = create_scenario(
-            ['gap'], [[self._logs[0]]])
+            ['gap'], [[self._logs[0]]]
+        )
         with mock.patch(RETRIEVER_FUNCTION) as mock_create_digest_traverser:
-            _setup_mock_traverser(mock_create_digest_traverser,
-                                  key_provider, digest_provider, validator)
+            _setup_mock_traverser(
+                mock_create_digest_traverser,
+                key_provider,
+                digest_provider,
+                validator,
+            )
             stdout, stderr, rc = self.run_cmd(
                 "cloudtrail validate-logs --trail-arn %s --start-time '%s'"
-                % (TEST_TRAIL_ARN, START_TIME_ARG), 1)
+                % (TEST_TRAIL_ARN, START_TIME_ARG),
+                1,
+            )
             self.assertIn(
-                'Log file\ts3://1/key1\tINVALID: not found\n\n', stderr)
+                'Log file\ts3://1/key1\tINVALID: not found\n\n', stderr
+            )
 
     def patch_make_request(self):
         """Override the default request patching because we need to
@@ -374,5 +545,5 @@ class TestCloudTrailCommandWithMissingLo
         self.make_request_is_patched = True
         make_request_patch = self.make_request_patch.start()
         make_request_patch.side_effect = ClientError(
-            {'Error': {'Code': 'NoSuchKey', 'Message': 'foo'}},
-            'GetObject')
+            {'Error': {'Code': 'NoSuchKey', 'Message': 'foo'}}, 'GetObject'
+        )
diff -pruN 2.23.6-1/tests/functional/cloudtrail/test_verifyqueryresults.py 2.31.35-1/tests/functional/cloudtrail/test_verifyqueryresults.py
--- 2.23.6-1/tests/functional/cloudtrail/test_verifyqueryresults.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudtrail/test_verifyqueryresults.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,14 +1,15 @@
-from io import BytesIO
-import json
 import binascii
 import copy
 import hashlib
+import json
 import os
+from io import BytesIO
 
 from awscrt.crypto import RSASignatureAlgorithm
 
 from awscli.testutils import BaseAWSCommandParamsTest
 from tests import PublicPrivateKeyLoader
+
 from . import get_private_key_path, get_public_key_path
 
 SAMPLE_PUBLIC_KEY_FINGERPRINT = "67b9fa73676d86966b449dd677850753"
@@ -27,7 +28,9 @@ SAMPLE_HASH_VALUE = (
 )
 SAMPLE_SIGNING_FILE = {
     "region": "us-east-1",
-    "files": [{"fileHashValue": SAMPLE_HASH_VALUE, "fileName": "result_1.csv.gz"}],
+    "files": [
+        {"fileHashValue": SAMPLE_HASH_VALUE, "fileName": "result_1.csv.gz"}
+    ],
     "hashAlgorithm": "SHA-256",
     "publicKeyFingerprint": "fingerprint",
     "signatureAlgorithm": "SHA256withRSA",
@@ -45,21 +48,24 @@ class TestVerifyQueryResults(BaseAWSComm
             public_key,
             private_key,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
 
         sign_file = copy.deepcopy(SAMPLE_SIGNING_FILE)
         signature = private_key.sign(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256(SAMPLE_HASH_VALUE.encode()).digest()
+            digest=hashlib.sha256(SAMPLE_HASH_VALUE.encode()).digest(),
         )
         sign_file["hashSignature"] = binascii.hexlify(signature).decode()
 
         self.parsed_responses = [
             {"Body": BytesIO(json.dumps(sign_file).encode("utf-8"))},
             {"Body": BytesIO(b"file")},
-            {"PublicKeyList": [{"Fingerprint": "fingerprint", "Value": public_key}]},
+            {
+                "PublicKeyList": [
+                    {"Fingerprint": "fingerprint", "Value": public_key}
+                ]
+            },
         ]
 
         stdout, stderr, rc = self.run_cmd(
@@ -67,17 +73,25 @@ class TestVerifyQueryResults(BaseAWSComm
             f" --s3-prefix={SAMPLE_S3_EXPORT_FILE_PREFIX} "
         )
 
-        self.assertIn("Successfully validated sign and query result files\n", stdout)
+        self.assertIn(
+            "Successfully validated sign and query result files\n", stdout
+        )
         self.assertEqual(self.operations_called[0][0].name, "GetObject")
-        self.assertEqual(self.operations_called[0][1]["Bucket"], SAMPLE_S3_BUCKET_NAME)
         self.assertEqual(
-            self.operations_called[0][1]["Key"], "lake-export-prefix/result_sign.json"
+            self.operations_called[0][1]["Bucket"], SAMPLE_S3_BUCKET_NAME
+        )
+        self.assertEqual(
+            self.operations_called[0][1]["Key"],
+            "lake-export-prefix/result_sign.json",
         )
 
         self.assertEqual(self.operations_called[1][0].name, "GetObject")
-        self.assertEqual(self.operations_called[1][1]["Bucket"], SAMPLE_S3_BUCKET_NAME)
         self.assertEqual(
-            self.operations_called[1][1]["Key"], "lake-export-prefix/result_1.csv.gz"
+            self.operations_called[1][1]["Bucket"], SAMPLE_S3_BUCKET_NAME
+        )
+        self.assertEqual(
+            self.operations_called[1][1]["Key"],
+            "lake-export-prefix/result_1.csv.gz",
         )
 
         self.assertEqual(self.operations_called[2][0].name, "ListPublicKeys")
@@ -88,12 +102,11 @@ class TestVerifyQueryResults(BaseAWSComm
             public_key,
             private_key,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
         signature = private_key.sign(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256("123".encode()).digest()
+            digest=hashlib.sha256(b"123").digest(),
         )
 
         sign_file["hashSignature"] = binascii.hexlify(signature).decode()
@@ -101,7 +114,11 @@ class TestVerifyQueryResults(BaseAWSComm
         self.parsed_responses = [
             {"Body": BytesIO(json.dumps(sign_file).encode("utf-8"))},
             {"Body": BytesIO(b"file")},
-            {"PublicKeyList": [{"Fingerprint": "fingerprint", "Value": public_key}]},
+            {
+                "PublicKeyList": [
+                    {"Fingerprint": "fingerprint", "Value": public_key}
+                ]
+            },
         ]
 
         stdout, stderr, rc = self.run_cmd(
@@ -116,13 +133,16 @@ class TestVerifyQueryResults(BaseAWSComm
             public_key,
             _,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
         self.parsed_responses = [
             {"Body": BytesIO(b"123")},
             {"Body": BytesIO(b"file")},
-            {"PublicKeyList": [{"Fingerprint": "fingerprint", "Value": public_key}]},
+            {
+                "PublicKeyList": [
+                    {"Fingerprint": "fingerprint", "Value": public_key}
+                ]
+            },
         ]
 
         stdout, stderr, rc = self.run_cmd(
@@ -139,8 +159,12 @@ class TestVerifyQueryResults(BaseAWSComm
         self.assertNotIn("testurl", self.last_request_dict["url"])
 
     def test_invalid_parameter_both_empty(self):
-        stdout, stderr, rc = self.run_cmd("cloudtrail verify-query-results ", 252)
-        self.assertIn("Require parameter --s3-bucket or --local-export-path.", stderr)
+        stdout, stderr, rc = self.run_cmd(
+            "cloudtrail verify-query-results ", 252
+        )
+        self.assertIn(
+            "Require parameter --s3-bucket or --local-export-path.", stderr
+        )
         self.assertEqual(len(self.operations_called), 0)
 
     def test_invalid_parameter_both_provided(self):
@@ -163,19 +187,22 @@ class TestVerifyQueryResults(BaseAWSComm
             public_key,
             private_key,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
         signature = private_key.sign(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256(SAMPLE_HASH_VALUE.encode()).digest()
+            digest=hashlib.sha256(SAMPLE_HASH_VALUE.encode()).digest(),
         )
         sign_file["hashSignature"] = binascii.hexlify(signature).decode()
 
         self.parsed_responses = [
             {"Body": BytesIO(json.dumps(sign_file).encode("utf-8"))},
             {"Body": BytesIO(b"123")},
-            {"PublicKeyList": [{"Fingerprint": "fingerprint", "Value": public_key}]},
+            {
+                "PublicKeyList": [
+                    {"Fingerprint": "fingerprint", "Value": public_key}
+                ]
+            },
         ]
 
         stdout, stderr, rc = self.run_cmd(
@@ -183,7 +210,9 @@ class TestVerifyQueryResults(BaseAWSComm
             f" --s3-prefix={SAMPLE_S3_EXPORT_FILE_PREFIX} ",
             255,
         )
-        self.assertIn("has inconsistent hash value with hash value recorded", stderr)
+        self.assertIn(
+            "has inconsistent hash value with hash value recorded", stderr
+        )
 
         self.assertEqual(self.operations_called[0][0].name, "GetObject")
         self.assertEqual(self.operations_called[1][0].name, "GetObject")
@@ -207,7 +236,9 @@ class TestVerifyQueryResults(BaseAWSComm
         stdout, stderr, rc = self.run_cmd(
             f"cloudtrail verify-query-results --local-export-path={local_export_file_path}"
         )
-        self.assertIn("Successfully validated sign and query result files\n", stdout)
+        self.assertIn(
+            "Successfully validated sign and query result files\n", stdout
+        )
 
         self.assertEqual(self.operations_called[0][0].name, "ListPublicKeys")
         self.assertEqual(len(self.operations_called), 1)
@@ -232,5 +263,7 @@ class TestVerifyQueryResults(BaseAWSComm
             f" --endpoint-url=https://testurl/ "
         )
 
-        self.assertIn("Successfully validated sign and query result files\n", stdout)
+        self.assertIn(
+            "Successfully validated sign and query result files\n", stdout
+        )
         self.assertEqual(self.last_request_dict["url"], "https://testurl/")
diff -pruN 2.23.6-1/tests/functional/cloudwatch/test_put_metric_data.py 2.31.35-1/tests/functional/cloudwatch/test_put_metric_data.py
--- 2.23.6-1/tests/functional/cloudwatch/test_put_metric_data.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/cloudwatch/test_put_metric_data.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,29 +23,37 @@ class TestPutMetricData(BaseAWSCommandPa
 
     expected_output = {
         'MetricData': [
-            {'MetricName': 'FreeMemoryBytes',
-             'Unit': 'Bytes',
-             'Timestamp': '2013-08-22T10:58:12.283Z',
-             'Value': decimal.Decimal("9130160128")}],
-        'Namespace': '"Foo/Bar"'}
+            {
+                'MetricName': 'FreeMemoryBytes',
+                'Unit': 'Bytes',
+                'Timestamp': '2013-08-22T10:58:12.283Z',
+                'Value': decimal.Decimal("9130160128"),
+            }
+        ],
+        'Namespace': '"Foo/Bar"',
+    }
 
     def test_using_json(self):
-        args = ('--namespace "Foo/Bar" '
-                '--metric-data [{"MetricName":"FreeMemoryBytes",'
-                '"Unit":"Bytes",'
-                '"Timestamp":"2013-08-22T10:58:12.283Z",'
-                '"Value":9130160128}]')
+        args = (
+            '--namespace "Foo/Bar" '
+            '--metric-data [{"MetricName":"FreeMemoryBytes",'
+            '"Unit":"Bytes",'
+            '"Timestamp":"2013-08-22T10:58:12.283Z",'
+            '"Value":9130160128}]'
+        )
         cmdline = self.prefix + args
         self.assert_params_for_cmd(cmdline, self.expected_output)
 
     def test_using_promoted_params(self):
         # This is equivalent to the json version in test_using_json
         # above.
-        args = ('--namespace "Foo/Bar" '
-                '--metric-name FreeMemoryBytes '
-                '--unit Bytes '
-                '--timestamp 2013-08-22T10:58:12.283Z '
-                '--value 9130160128')
+        args = (
+            '--namespace "Foo/Bar" '
+            '--metric-name FreeMemoryBytes '
+            '--unit Bytes '
+            '--timestamp 2013-08-22T10:58:12.283Z '
+            '--value 9130160128'
+        )
         cmdline = self.prefix + args
         self.assert_params_for_cmd(cmdline, self.expected_output)
 
@@ -59,15 +67,18 @@ class TestPutMetricData(BaseAWSCommandPa
         cmdline = self.prefix + args
         expected = {
             'MetricData': [
-                {'MetricName': 'PageViewCount',
-                 'StatisticValues': {
-                     'Maximum': decimal.Decimal('5'),
-                     'Minimum': decimal.Decimal('2'),
-                     'SampleCount': decimal.Decimal('3'),
-                     'Sum': decimal.Decimal('11')},
-                 'Timestamp': '2014-02-14T12:00:00.000Z'}
+                {
+                    'MetricName': 'PageViewCount',
+                    'StatisticValues': {
+                        'Maximum': decimal.Decimal('5'),
+                        'Minimum': decimal.Decimal('2'),
+                        'SampleCount': decimal.Decimal('3'),
+                        'Sum': decimal.Decimal('11'),
+                    },
+                    'Timestamp': '2014-02-14T12:00:00.000Z',
+                }
             ],
-            'Namespace': 'MyService'
+            'Namespace': 'MyService',
         }
         self.assert_params_for_cmd(cmdline, expected)
 
@@ -80,11 +91,13 @@ class TestPutMetricData(BaseAWSCommandPa
         )
         cmdline = self.prefix + args
         expected = {
-            'MetricData': [{
-                'MetricName': 'Foo',
-                'Value': decimal.Decimal('5'),
-                'StorageResolution': 1
-            }],
-            'Namespace': 'Bar'
+            'MetricData': [
+                {
+                    'MetricName': 'Foo',
+                    'Value': decimal.Decimal('5'),
+                    'StorageResolution': 1,
+                }
+            ],
+            'Namespace': 'Bar',
         }
         self.assert_params_for_cmd(cmdline, expected)
diff -pruN 2.23.6-1/tests/functional/codeartifact/test_codeartifact_login.py 2.31.35-1/tests/functional/codeartifact/test_codeartifact_login.py
--- 2.23.6-1/tests/functional/codeartifact/test_codeartifact_login.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/codeartifact/test_codeartifact_login.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,22 @@
 import copy
 import os
 import platform
+import re
 import subprocess
 import time
-import re
-
 from configparser import RawConfigParser
 from io import StringIO
 from urllib.parse import urlsplit
 
 from botocore.utils import parse_timestamp
 
-from tests import CLIRunner, AWSRequest, AWSResponse
-from awscli.testutils import unittest, FileCreator, mock
 from awscli.compat import urlparse
 from awscli.customizations.codeartifact.login import CodeArtifactLogin
+from awscli.testutils import FileCreator, mock, unittest
+from tests import AWSRequest, AWSResponse, CLIRunner
 
 
 class TestCodeArtifactLogin(unittest.TestCase):
-
     prefix = ['codeartifact', 'login']
 
     def setUp(self):
@@ -59,8 +57,9 @@ class TestCodeArtifactLogin(unittest.Tes
         self.subprocess_check_output_patch = mock.patch(
             'subprocess.check_output'
         )
-        self.subprocess_check_out_mock = \
+        self.subprocess_check_out_mock = (
             self.subprocess_check_output_patch.start()
+        )
         self.cli_runner = CLIRunner()
 
     def tearDown(self):
@@ -70,27 +69,32 @@ class TestCodeArtifactLogin(unittest.Tes
         self.subprocess_patch.stop()
         self.file_creator.remove_all()
 
-    def _setup_cmd(self, tool,
-                   include_domain_owner=False,
-                   dry_run=False,
-                   include_endpoint_type=False,
-                   include_duration_seconds=False,
-                   include_namespace=False):
+    def _setup_cmd(
+        self,
+        tool,
+        include_domain_owner=False,
+        dry_run=False,
+        include_endpoint_type=False,
+        include_duration_seconds=False,
+        include_namespace=False,
+    ):
         package_format = CodeArtifactLogin.TOOL_MAP[tool]['package_format']
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=package_format,
-                repository=self.repository
-            )
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{package_format}/{self.repository}/'
+        )
 
         cmdline = copy.copy(self.prefix)
-        cmdline.extend([
-            '--domain', self.domain,
-            '--repository', self.repository,
-            '--tool', tool,
-        ])
+        cmdline.extend(
+            [
+                '--domain',
+                self.domain,
+                '--repository',
+                self.repository,
+                '--tool',
+                tool,
+            ]
+        )
 
         if include_domain_owner:
             cmdline.extend(['--domain-owner', self.domain_owner])
@@ -113,15 +117,15 @@ class TestCodeArtifactLogin(unittest.Tes
                 operation_name='GetAuthorizationToken',
                 parsed_response={
                     "authorizationToken": self.auth_token,
-                    "expiration": self.expiration_as_datetime
-                }
+                    "expiration": self.expiration_as_datetime,
+                },
             )
         )
         self.cli_runner.add_response(
             AWSResponse(
                 service_name='codeartifact',
                 operation_name='GetRepositoryEndpoint',
-                parsed_response={"repositoryEndpoint": self.endpoint}
+                parsed_response={"repositoryEndpoint": self.endpoint},
             )
         )
 
@@ -130,14 +134,20 @@ class TestCodeArtifactLogin(unittest.Tes
     def _get_swift_commands(self, scope=None, token=None):
         commands = []
         set_registry_command = [
-            'swift', 'package-registry', 'set', self.endpoint
+            'swift',
+            'package-registry',
+            'set',
+            self.endpoint,
         ]
         if scope is not None:
             set_registry_command.extend(['--scope', scope])
         commands.append(set_registry_command)
 
         login_registry_command = [
-            'swift', 'package-registry', 'login', f'{self.endpoint}login'
+            'swift',
+            'package-registry',
+            'login',
+            f'{self.endpoint}login',
         ]
         if token is not None:
             login_registry_command.extend(['--token', token])
@@ -153,11 +163,17 @@ class TestCodeArtifactLogin(unittest.Tes
         commands = []
         commands.append(
             [
-                'nuget', 'sources', 'add',
-                '-name', self.nuget_source_name,
-                '-source', nuget_index_url,
-                '-username', 'aws',
-                '-password', self.auth_token
+                'nuget',
+                'sources',
+                'add',
+                '-name',
+                self.nuget_source_name,
+                '-source',
+                nuget_index_url,
+                '-username',
+                'aws',
+                '-password',
+                self.auth_token,
             ]
         )
         return commands
@@ -170,36 +186,36 @@ class TestCodeArtifactLogin(unittest.Tes
         commands = []
         commands.append(
             [
-                'dotnet', 'nuget', 'add', 'source', nuget_index_url,
-                '--name', self.nuget_source_name,
-                '--username', 'aws',
-                '--password', self.auth_token
+                'dotnet',
+                'nuget',
+                'add',
+                'source',
+                nuget_index_url,
+                '--name',
+                self.nuget_source_name,
+                '--username',
+                'aws',
+                '--password',
+                self.auth_token,
             ]
         )
         return commands
 
     def _get_npm_commands(self, **kwargs):
-        npm_cmd = 'npm.cmd' \
-            if platform.system().lower() == 'windows' else 'npm'
+        npm_cmd = (
+            'npm.cmd' if platform.system().lower() == 'windows' else 'npm'
+        )
 
         repo_uri = urlsplit(self.endpoint)
-        always_auth_config = '//{}{}:always-auth'.format(
-            repo_uri.netloc, repo_uri.path
-        )
-        auth_token_config = '//{}{}:_authToken'.format(
-            repo_uri.netloc, repo_uri.path
-        )
+        always_auth_config = f'//{repo_uri.netloc}{repo_uri.path}:always-auth'
+        auth_token_config = f'//{repo_uri.netloc}{repo_uri.path}:_authToken'
 
         scope = kwargs.get('scope')
-        registry = '{}:registry'.format(scope) if scope else 'registry'
+        registry = f'{scope}:registry' if scope else 'registry'
 
         commands = []
-        commands.append(
-            [npm_cmd, 'config', 'set', registry, self.endpoint]
-        )
-        commands.append(
-            [npm_cmd, 'config', 'set', always_auth_config, 'true']
-        )
+        commands.append([npm_cmd, 'config', 'set', registry, self.endpoint])
+        commands.append([npm_cmd, 'config', 'set', always_auth_config, 'true'])
         commands.append(
             [npm_cmd, 'config', 'set', auth_token_config, self.auth_token]
         )
@@ -213,7 +229,7 @@ class TestCodeArtifactLogin(unittest.Tes
             scheme=repo_uri.scheme,
             auth_token=self.auth_token,
             netloc=repo_uri.netloc,
-            path=repo_uri.path
+            path=repo_uri.path,
         )
 
         return [['pip', 'config', 'set', 'global.index-url', pip_index_url]]
@@ -230,8 +246,7 @@ repository: {repository_endpoint}
 username: aws
 password: {auth_token}'''
         default_pypi_rc = default_pypi_rc_fmt.format(
-            repository_endpoint=self.endpoint,
-            auth_token=self.auth_token
+            repository_endpoint=self.endpoint, auth_token=self.auth_token
         )
 
         pypi_rc = RawConfigParser()
@@ -268,23 +283,23 @@ password: {auth_token}'''
 
     def _assert_expiration_printed_to_stdout(self, stdout):
         self.assertEqual(
-            self.expiration_as_datetime.strftime(
-                "%Y-%m-%d %H:%M:%S"), stdout.split("at ")[1][0:19]
+            self.expiration_as_datetime.strftime("%Y-%m-%d %H:%M:%S"),
+            stdout.split("at ")[1][0:19],
         )
 
     def _assert_operations_called(
-        self, package_format, result,
-        include_domain_owner=False, include_duration_seconds=False,
-        include_endpoint_type=False
+        self,
+        package_format,
+        result,
+        include_domain_owner=False,
+        include_duration_seconds=False,
+        include_endpoint_type=False,
     ):
-
-        get_auth_token_kwargs = {
-            'domain': self.domain
-        }
+        get_auth_token_kwargs = {'domain': self.domain}
         get_repo_endpoint_kwargs = {
             'domain': self.domain,
             'repository': self.repository,
-            'format': package_format
+            'format': package_format,
         }
 
         if include_domain_owner:
@@ -309,28 +324,24 @@ password: {auth_token}'''
                     service_name='codeartifact',
                     operation_name='GetRepositoryEndpoint',
                     params=get_repo_endpoint_kwargs,
-                )
-            ]
+                ),
+            ],
         )
 
     def _assert_subprocess_execution(self, commands):
         expected_calls = [
-            mock.call(
-                command,
-                capture_output=True,
-                check=True
-            ) for command in commands
+            mock.call(command, capture_output=True, check=True)
+            for command in commands
         ]
-        self.subprocess_mock.assert_has_calls(
-            expected_calls, any_order=True
-        )
+        self.subprocess_mock.assert_has_calls(expected_calls, any_order=True)
 
     def _assert_subprocess_check_output_execution(self, commands):
         expected_calls = [
             mock.call(
                 command,
                 stderr=subprocess.PIPE,
-            ) for command in commands
+            )
+            for command in commands
         ]
         self.subprocess_check_out_mock.assert_has_calls(
             expected_calls, any_order=True
@@ -352,8 +363,7 @@ password: {auth_token}'''
         index_servers = pypi_rc.get('distutils', 'index-servers')
         index_servers = [
             index_server.strip()
-            for index_server
-            in index_servers.split('\n')
+            for index_server in index_servers.split('\n')
             if index_server.strip() != ''
         ]
         self.assertIn(server, index_servers)
@@ -374,11 +384,13 @@ password: {auth_token}'''
             self.assertEqual(pypi_rc.get(server, 'password'), password)
 
     def _assert_netrc_has_expected_content(self):
-        with open(self.test_netrc_path, 'r') as f:
+        with open(self.test_netrc_path) as f:
             actual_contents = f.read()
 
         hostname = urlparse.urlparse(self.endpoint).hostname
-        expected_contents = f'machine {hostname} login token password {self.auth_token}\n'
+        expected_contents = (
+            f'machine {hostname} login token password {self.auth_token}\n'
+        )
         self.assertEqual(expected_contents, actual_contents)
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
@@ -400,9 +412,7 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='swift', result=result)
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_swift_commands()
-        )
+        self._assert_subprocess_execution(self._get_swift_commands())
         self._assert_netrc_has_expected_content()
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', False)
@@ -411,7 +421,9 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='swift', result=result)
-        self._assert_dry_run_execution(self._get_swift_commands(), result.stdout)
+        self._assert_dry_run_execution(
+            self._get_swift_commands(), result.stdout
+        )
         self.assertFalse(os.path.exists(self.test_netrc_path))
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
@@ -420,8 +432,10 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='swift', result=result,
-            include_domain_owner=True, include_duration_seconds=False
+            package_format='swift',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=False,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
@@ -434,24 +448,29 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='swift', result=result,
-            include_domain_owner=True, include_duration_seconds=False
+            package_format='swift',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=False,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_swift_commands()
-        )
+        self._assert_subprocess_execution(self._get_swift_commands())
         self._assert_netrc_has_expected_content()
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
     def test_swift_login_with_domain_owner_duration_macos(self):
-        cmdline = self._setup_cmd(tool='swift', include_domain_owner=True,
-                                  include_duration_seconds=True)
+        cmdline = self._setup_cmd(
+            tool='swift',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='swift', result=result,
-            include_domain_owner=True, include_duration_seconds=True
+            package_format='swift',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
@@ -460,18 +479,21 @@ password: {auth_token}'''
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', False)
     def test_swift_login_with_domain_owner_duration_non_macos(self):
-        cmdline = self._setup_cmd(tool='swift', include_domain_owner=True,
-                                  include_duration_seconds=True)
+        cmdline = self._setup_cmd(
+            tool='swift',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='swift', result=result,
-            include_domain_owner=True, include_duration_seconds=True
+            package_format='swift',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_swift_commands()
-        )
+        self._assert_subprocess_execution(self._get_swift_commands())
         self._assert_netrc_has_expected_content()
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', False)
@@ -492,14 +514,18 @@ password: {auth_token}'''
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
     def test_swift_login_with_domain_owner_duration_dry_run(self):
         cmdline = self._setup_cmd(
-            tool='swift', include_domain_owner=True,
-            include_duration_seconds=True, dry_run=True
+            tool='swift',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+            dry_run=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='swift', result=result, include_domain_owner=True,
-            include_duration_seconds=True
+            package_format='swift',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_dry_run_execution(
             self._get_swift_commands(token=self.auth_token), result.stdout
@@ -507,22 +533,20 @@ password: {auth_token}'''
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
     def test_swift_login_with_namespace_macos(self):
-        cmdline = self._setup_cmd(
-            tool='swift', include_namespace=True
-        )
+        cmdline = self._setup_cmd(tool='swift', include_namespace=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='swift', result=result)
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
-            self._get_swift_commands(scope=self.namespace, token=self.auth_token)
+            self._get_swift_commands(
+                scope=self.namespace, token=self.auth_token
+            )
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', False)
     def test_swift_login_with_namespace_non_macos(self):
-        cmdline = self._setup_cmd(
-            tool='swift', include_namespace=True
-        )
+        cmdline = self._setup_cmd(tool='swift', include_namespace=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='swift', result=result)
@@ -541,7 +565,8 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='swift', result=result)
         self._assert_dry_run_execution(
-            self._get_swift_commands(scope=self.namespace),result.stdout)
+            self._get_swift_commands(scope=self.namespace), result.stdout
+        )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', False)
     def test_swift_login_with_namespace_with_endpoint_type(self):
@@ -550,7 +575,9 @@ password: {auth_token}'''
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='swift', result=result, include_endpoint_type=True)
+        self._assert_operations_called(
+            package_format='swift', result=result, include_endpoint_type=True
+        )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
             self._get_swift_commands(scope=self.namespace)
@@ -564,8 +591,12 @@ password: {auth_token}'''
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='swift', result=result, include_endpoint_type=True,
-                                       include_domain_owner=True)
+        self._assert_operations_called(
+            package_format='swift',
+            result=result,
+            include_endpoint_type=True,
+            include_domain_owner=True,
+        )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
             self._get_swift_commands(token=self.auth_token)
@@ -577,23 +608,17 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='nuget', result=result)
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_nuget_commands()
-        )
+        self._assert_subprocess_execution(self._get_nuget_commands())
 
     def test_nuget_login_with_domain_owner_without_duration_seconds(self):
         cmdline = self._setup_cmd(tool='nuget', include_domain_owner=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='nuget',
-            include_domain_owner=True,
-            result=result
+            package_format='nuget', include_domain_owner=True, result=result
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_nuget_commands()
-        )
+        self._assert_subprocess_execution(self._get_nuget_commands())
 
     def test_nuget_login_without_domain_owner_with_duration_seconds(self):
         cmdline = self._setup_cmd(tool='nuget', include_duration_seconds=True)
@@ -602,18 +627,16 @@ password: {auth_token}'''
         self._assert_operations_called(
             package_format='nuget',
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_nuget_commands()
-        )
+        self._assert_subprocess_execution(self._get_nuget_commands())
 
     def test_nuget_login_with_domain_owner_duration_sections(self):
         cmdline = self._setup_cmd(
             tool='nuget',
             include_domain_owner=True,
-            include_duration_seconds=True
+            include_duration_seconds=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -621,19 +644,17 @@ password: {auth_token}'''
             package_format='nuget',
             include_domain_owner=True,
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_nuget_commands()
-        )
+        self._assert_subprocess_execution(self._get_nuget_commands())
 
     def test_nuget_login_with_domain_owner_duration_endpoint_type(self):
         cmdline = self._setup_cmd(
             tool='nuget',
             include_domain_owner=True,
             include_duration_seconds=True,
-            include_endpoint_type=True
+            include_endpoint_type=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -642,12 +663,10 @@ password: {auth_token}'''
             include_domain_owner=True,
             include_duration_seconds=True,
             include_endpoint_type=True,
-            result=result
+            result=result,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_nuget_commands()
-        )
+        self._assert_subprocess_execution(self._get_nuget_commands())
 
     def test_nuget_login_without_domain_owner_dry_run(self):
         cmdline = self._setup_cmd(tool='nuget', dry_run=True)
@@ -655,8 +674,7 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='nuget', result=result)
         self._assert_dry_run_execution(
-            self._get_nuget_commands(),
-            result.stdout
+            self._get_nuget_commands(), result.stdout
         )
 
     def test_nuget_login_with_domain_owner_dry_run(self):
@@ -666,13 +684,10 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='nuget',
-            include_domain_owner=True,
-            result=result
+            package_format='nuget', include_domain_owner=True, result=result
         )
         self._assert_dry_run_execution(
-            self._get_nuget_commands(),
-            result.stdout
+            self._get_nuget_commands(), result.stdout
         )
 
     def test_nuget_login_with_duration_seconds_dry_run(self):
@@ -684,17 +699,18 @@ password: {auth_token}'''
         self._assert_operations_called(
             package_format='nuget',
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_dry_run_execution(
-            self._get_nuget_commands(),
-            result.stdout
+            self._get_nuget_commands(), result.stdout
         )
 
     def test_nuget_login_with_domain_owner_duration_seconds_dry_run(self):
         cmdline = self._setup_cmd(
-            tool='nuget', include_domain_owner=True,
-            include_duration_seconds=True, dry_run=True
+            tool='nuget',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+            dry_run=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -702,18 +718,21 @@ password: {auth_token}'''
             package_format='nuget',
             include_domain_owner=True,
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_dry_run_execution(
-            self._get_nuget_commands(),
-            result.stdout
+            self._get_nuget_commands(), result.stdout
         )
 
-    def test_nuget_login_with_domain_owner_duration_seconds_with_endpoint_type_dryrun(self):
+    def test_nuget_login_with_domain_owner_duration_seconds_with_endpoint_type_dryrun(
+        self,
+    ):
         cmdline = self._setup_cmd(
-            tool='nuget', include_domain_owner=True,
+            tool='nuget',
+            include_domain_owner=True,
             include_duration_seconds=True,
-            dry_run=True, include_endpoint_type=True
+            dry_run=True,
+            include_endpoint_type=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -722,11 +741,10 @@ password: {auth_token}'''
             include_domain_owner=True,
             include_duration_seconds=True,
             include_endpoint_type=True,
-            result=result
+            result=result,
         )
         self._assert_dry_run_execution(
-            self._get_nuget_commands(),
-            result.stdout
+            self._get_nuget_commands(), result.stdout
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
@@ -736,20 +754,20 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='nuget', result=result)
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_dotnet_commands()
-        )
+        self._assert_subprocess_execution(self._get_dotnet_commands())
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
-    def test_dotnet_login_without_domain_owner_without_duration_seconds_with_endpoint_type(self):
+    def test_dotnet_login_without_domain_owner_without_duration_seconds_with_endpoint_type(
+        self,
+    ):
         cmdline = self._setup_cmd(tool='dotnet', include_endpoint_type=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='nuget', result=result, include_endpoint_type=True)
-        self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_dotnet_commands()
+        self._assert_operations_called(
+            package_format='nuget', result=result, include_endpoint_type=True
         )
+        self._assert_expiration_printed_to_stdout(result.stdout)
+        self._assert_subprocess_execution(self._get_dotnet_commands())
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_with_domain_owner_without_duration_seconds(self):
@@ -757,14 +775,10 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='nuget',
-            include_domain_owner=True,
-            result=result
+            package_format='nuget', include_domain_owner=True, result=result
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_dotnet_commands()
-        )
+        self._assert_subprocess_execution(self._get_dotnet_commands())
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_without_domain_owner_with_duration_seconds(self):
@@ -774,19 +788,17 @@ password: {auth_token}'''
         self._assert_operations_called(
             package_format='nuget',
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_dotnet_commands()
-        )
+        self._assert_subprocess_execution(self._get_dotnet_commands())
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_with_domain_owner_duration_sections(self):
         cmdline = self._setup_cmd(
             tool='dotnet',
             include_domain_owner=True,
-            include_duration_seconds=True
+            include_duration_seconds=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -794,12 +806,10 @@ password: {auth_token}'''
             package_format='nuget',
             include_domain_owner=True,
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
-        self._assert_subprocess_execution(
-            self._get_dotnet_commands()
-        )
+        self._assert_subprocess_execution(self._get_dotnet_commands())
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_without_domain_owner_dry_run(self):
@@ -808,8 +818,7 @@ password: {auth_token}'''
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='nuget', result=result)
         self._assert_dry_run_execution(
-            self._get_dotnet_commands(),
-            result.stdout
+            self._get_dotnet_commands(), result.stdout
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
@@ -820,13 +829,10 @@ password: {auth_token}'''
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='nuget',
-            include_domain_owner=True,
-            result=result
+            package_format='nuget', include_domain_owner=True, result=result
         )
         self._assert_dry_run_execution(
-            self._get_dotnet_commands(),
-            result.stdout
+            self._get_dotnet_commands(), result.stdout
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
@@ -839,18 +845,19 @@ password: {auth_token}'''
         self._assert_operations_called(
             package_format='nuget',
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_dry_run_execution(
-            self._get_dotnet_commands(),
-            result.stdout
+            self._get_dotnet_commands(), result.stdout
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_with_domain_owner_duration_seconds_dry_run(self):
         cmdline = self._setup_cmd(
-            tool='dotnet', include_domain_owner=True,
-            include_duration_seconds=True, dry_run=True
+            tool='dotnet',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+            dry_run=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
@@ -858,11 +865,10 @@ password: {auth_token}'''
             package_format='nuget',
             include_domain_owner=True,
             include_duration_seconds=True,
-            result=result
+            result=result,
         )
         self._assert_dry_run_execution(
-            self._get_dotnet_commands(),
-            result.stdout
+            self._get_dotnet_commands(), result.stdout
         )
 
     _NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT = b"""\
@@ -880,32 +886,36 @@ to an 'HTTPS' source."""
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_dotnet_login_sources_listed_with_extra_non_list_text(self):
-
-        self.subprocess_check_output_patch.return_value = \
+        self.subprocess_check_output_patch.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        )
 
         cmdline = self._setup_cmd(tool='dotnet')
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='nuget', result=result)
-        commands = [[
-            'dotnet', 'nuget', 'list', 'source', '--format', 'detailed'
-        ]]
+        commands = [
+            ['dotnet', 'nuget', 'list', 'source', '--format', 'detailed']
+        ]
         self._assert_subprocess_check_output_execution(commands)
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
-    def test_dotnet_login_sources_listed_with_extra_non_list_text_with_endpoint_type(self):
-
-        self.subprocess_check_output_patch.return_value = \
+    def test_dotnet_login_sources_listed_with_extra_non_list_text_with_endpoint_type(
+        self,
+    ):
+        self.subprocess_check_output_patch.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        )
 
         cmdline = self._setup_cmd(tool='dotnet', include_endpoint_type=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='nuget', result=result, include_endpoint_type=True)
-        commands = [[
-            'dotnet', 'nuget', 'list', 'source', '--format', 'detailed'
-        ]]
+        self._assert_operations_called(
+            package_format='nuget', result=result, include_endpoint_type=True
+        )
+        commands = [
+            ['dotnet', 'nuget', 'list', 'source', '--format', 'detailed']
+        ]
         self._assert_subprocess_check_output_execution(commands)
 
     def test_npm_login_without_domain_owner(self):
@@ -931,12 +941,10 @@ to an 'HTTPS' source."""
         exit code. This is to make sure that login ignores that error and all
         other commands executes successfully.
         """
+
         def side_effect(command, capture_output, check):
             if any('always-auth' in arg for arg in command):
-                raise subprocess.CalledProcessError(
-                    returncode=1,
-                    cmd=command
-                )
+                raise subprocess.CalledProcessError(returncode=1, cmd=command)
 
             return mock.DEFAULT
 
@@ -952,32 +960,43 @@ to an 'HTTPS' source."""
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='npm', result=result,
-            include_domain_owner=True, include_duration_seconds=False
+            package_format='npm',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=False,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(self._get_npm_commands())
 
     def test_npm_login_with_domain_owner_endpoint_type(self):
-        cmdline = self._setup_cmd(tool='npm', include_domain_owner=True, include_endpoint_type=True)
+        cmdline = self._setup_cmd(
+            tool='npm', include_domain_owner=True, include_endpoint_type=True
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='npm', result=result,
-            include_domain_owner=True, include_duration_seconds=False,
-            include_endpoint_type=True
+            package_format='npm',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=False,
+            include_endpoint_type=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(self._get_npm_commands())
 
     def test_npm_login_with_domain_owner_duration(self):
-        cmdline = self._setup_cmd(tool='npm', include_domain_owner=True,
-                                  include_duration_seconds=True)
+        cmdline = self._setup_cmd(
+            tool='npm',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='npm', result=result,
-            include_domain_owner=True, include_duration_seconds=True
+            package_format='npm',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(self._get_npm_commands())
@@ -994,15 +1013,13 @@ to an 'HTTPS' source."""
         self._assert_dry_run_execution(self._get_npm_commands(), result.stdout)
 
     def test_npm_login_with_namespace(self):
-        cmdline = self._setup_cmd(
-            tool='npm', include_namespace=True
-        )
+        cmdline = self._setup_cmd(tool='npm', include_namespace=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='npm', result=result)
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(
-            self._get_npm_commands(scope='@{}'.format(self.namespace))
+            self._get_npm_commands(scope=f'@{self.namespace}')
         )
 
     def test_npm_login_with_namespace_dry_run(self):
@@ -1013,20 +1030,23 @@ to an 'HTTPS' source."""
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(package_format='npm', result=result)
         self._assert_dry_run_execution(
-            self._get_npm_commands(scope='@{}'.format(self.namespace)),
-            result.stdout
+            self._get_npm_commands(scope=f'@{self.namespace}'), result.stdout
         )
 
     def test_npm_login_with_namespace_endpoint_type_dry_run(self):
         cmdline = self._setup_cmd(
-            tool='npm', include_namespace=True, dry_run=True, include_endpoint_type=True
+            tool='npm',
+            include_namespace=True,
+            dry_run=True,
+            include_endpoint_type=True,
         )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='npm', result=result, include_endpoint_type=True)
+        self._assert_operations_called(
+            package_format='npm', result=result, include_endpoint_type=True
+        )
         self._assert_dry_run_execution(
-            self._get_npm_commands(scope='@{}'.format(self.namespace)),
-            result.stdout
+            self._get_npm_commands(scope=f'@{self.namespace}'), result.stdout
         )
 
     def test_pip_login_without_domain_owner(self):
@@ -1055,25 +1075,37 @@ to an 'HTTPS' source."""
         self._assert_subprocess_execution(self._get_pip_commands())
 
     def test_pip_login_with_domain_owner_duration(self):
-        cmdline = self._setup_cmd(tool='pip', include_domain_owner=True,
-                                  include_duration_seconds=True)
+        cmdline = self._setup_cmd(
+            tool='pip',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='pypi', result=result, include_domain_owner=True,
-            include_duration_seconds=True
+            package_format='pypi',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(self._get_pip_commands())
 
     def test_pip_login_with_domain_owner_duration_endpoint_type(self):
-        cmdline = self._setup_cmd(tool='pip', include_domain_owner=True,
-                                  include_duration_seconds=True, include_endpoint_type=True)
+        cmdline = self._setup_cmd(
+            tool='pip',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+            include_endpoint_type=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='pypi', result=result, include_domain_owner=True,
-            include_duration_seconds=True, include_endpoint_type=True
+            package_format='pypi',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
+            include_endpoint_type=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
         self._assert_subprocess_execution(self._get_pip_commands())
@@ -1100,7 +1132,8 @@ to an 'HTTPS' source."""
 
     def test_pip_login_with_namespace_dry_run(self):
         cmdline = self._setup_cmd(
-            tool='pip', include_namespace=True, dry_run=True)
+            tool='pip', include_namespace=True, dry_run=True
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 255)
         self._assert_operations_called(package_format='pypi', result=result)
@@ -1110,10 +1143,7 @@ to an 'HTTPS' source."""
 
     def test_pip_login_command_failed_auth_token_redacted(self):
         def side_effect(command, capture_output, check):
-            raise subprocess.CalledProcessError(
-                returncode=1,
-                cmd=command
-            )
+            raise subprocess.CalledProcessError(returncode=1, cmd=command)
 
         self.subprocess_mock.side_effect = side_effect
         cmdline = self._setup_cmd(tool='pip')
@@ -1123,7 +1153,7 @@ to an 'HTTPS' source."""
             "Command '['pip', 'config', 'set', 'global.index-url',"
             " 'https://aws:******@domain-domain-owner.codeartifact.aws.a2z.com/pypi/repository/simple/']'"
             " returned non-zero exit status 1.",
-            result.stderr
+            result.stderr,
         )
 
     def test_twine_login_without_domain_owner(self):
@@ -1140,7 +1170,7 @@ to an 'HTTPS' source."""
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_without_domain_owner_dry_run(self):
@@ -1154,21 +1184,25 @@ to an 'HTTPS' source."""
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_without_domain_owner_dry_run_endpoint_type(self):
-        cmdline = self._setup_cmd(tool='twine', dry_run=True, include_endpoint_type=True)
+        cmdline = self._setup_cmd(
+            tool='twine', dry_run=True, include_endpoint_type=True
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
-        self._assert_operations_called(package_format='pypi', result=result, include_endpoint_type=True)
+        self._assert_operations_called(
+            package_format='pypi', result=result, include_endpoint_type=True
+        )
         self.assertFalse(os.path.exists(self.test_pypi_rc_path))
         self._assert_pypi_rc_has_expected_content(
             pypi_rc_str=self._get_twine_commands(),
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_with_domain_owner(self):
@@ -1188,17 +1222,22 @@ to an 'HTTPS' source."""
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_with_domain_owner_duration(self):
-        cmdline = self._setup_cmd(tool='twine', include_domain_owner=True,
-                                  include_duration_seconds=True)
+        cmdline = self._setup_cmd(
+            tool='twine',
+            include_domain_owner=True,
+            include_duration_seconds=True,
+        )
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 0)
         self._assert_operations_called(
-            package_format='pypi', result=result, include_domain_owner=True,
-            include_duration_seconds=True
+            package_format='pypi',
+            result=result,
+            include_domain_owner=True,
+            include_duration_seconds=True,
         )
         self._assert_expiration_printed_to_stdout(result.stdout)
 
@@ -1210,7 +1249,7 @@ to an 'HTTPS' source."""
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_with_domain_owner_dry_run(self):
@@ -1228,13 +1267,11 @@ to an 'HTTPS' source."""
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_twine_login_with_namespace(self):
-        cmdline = self._setup_cmd(
-            tool='twine', include_namespace=True
-        )
+        cmdline = self._setup_cmd(tool='twine', include_namespace=True)
         result = self.cli_runner.run(cmdline)
         self.assertEqual(result.rc, 255)
         self._assert_operations_called(package_format='pypi', result=result)
diff -pruN 2.23.6-1/tests/functional/configservice/test_put_configuration_recorder.py 2.31.35-1/tests/functional/configservice/test_put_configuration_recorder.py
--- 2.23.6-1/tests/functional/configservice/test_put_configuration_recorder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configservice/test_put_configuration_recorder.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,23 +20,14 @@ class TestPutConfigurationRecorder(BaseA
         cmdline = self.prefix + ' --configuration-recorder'
         cmdline += ' name=myrecorder,roleARN=myarn'
         result = {
-            'ConfigurationRecorder': {
-                'name': 'myrecorder',
-                'roleARN': 'myarn'
-            }
+            'ConfigurationRecorder': {'name': 'myrecorder', 'roleARN': 'myarn'}
         }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_no_configuration_recorder(self):
         stdout, stderr, rc = self.run_cmd(self.prefix, expected_rc=252)
-        self.assertIn(
-            'required',
-            stderr
-        )
-        self.assertIn(
-            '--configuration-recorder',
-            stderr
-        )
+        self.assertIn('required', stderr)
+        self.assertIn('--configuration-recorder', stderr)
 
     def test_configuration_recorder_with_recording_group(self):
         cmdline = self.prefix + ' --configuration-recorder'
@@ -50,8 +41,8 @@ class TestPutConfigurationRecorder(BaseA
                 'roleARN': 'myarn',
                 'recordingGroup': {
                     'allSupported': True,
-                    'resourceTypes': ['AWS::EC2::Volume', 'AWS::EC2::VPC']
-                }
+                    'resourceTypes': ['AWS::EC2::Volume', 'AWS::EC2::VPC'],
+                },
             }
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/configservice/test_subscribe.py 2.31.35-1/tests/functional/configservice/test_subscribe.py
--- 2.23.6-1/tests/functional/configservice/test_subscribe.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configservice/test_subscribe.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest
 from awscli.customizations.configservice.subscribe import S3BucketHelper
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestSubscribe(BaseAWSCommandParamsTest):
@@ -26,7 +26,7 @@ class TestSubscribe(BaseAWSCommandParams
             {},  # PutDeliveryChannel
             {},  # StartConfigurationRecorder
             {'ConfigurationRecorders': {}},  # DescribeConfigurationRecorders
-            {'DeliveryChannels': {}}  # DescribeDeliveryChannels
+            {'DeliveryChannels': {}},  # DescribeDeliveryChannels
         ]
 
     def test_subscribe_when_bucket_exists_and_new_sns_topic(self):
@@ -42,31 +42,40 @@ class TestSubscribe(BaseAWSCommandParams
             list_of_parameters_called.append(operation_called[1])
 
         self.assertEqual(
-            list_of_operation_names_called, [
+            list_of_operation_names_called,
+            [
                 'HeadBucket',
                 'CreateTopic',
                 'PutConfigurationRecorder',
                 'PutDeliveryChannel',
                 'StartConfigurationRecorder',
                 'DescribeConfigurationRecorders',
-                'DescribeDeliveryChannels'
-            ]
+                'DescribeDeliveryChannels',
+            ],
         )
         self.assertEqual(
-            list_of_parameters_called, [
+            list_of_parameters_called,
+            [
                 {'Bucket': 'mybucket'},  # S3 HeadBucket
                 {'Name': 'mytopic'},  # SNS CreateTopic
-                {'ConfigurationRecorder': {  # PutConfigurationRecorder
-                    'name': 'default', 'roleARN': 'myrole'}},
-                {'DeliveryChannel': {  # PutDeliveryChannel
-                    'name': 'default',
-                    's3BucketName': 'mybucket',
-                    'snsTopicARN': 'my-topic-arn'}},
+                {
+                    'ConfigurationRecorder': {  # PutConfigurationRecorder
+                        'name': 'default',
+                        'roleARN': 'myrole',
+                    }
+                },
+                {
+                    'DeliveryChannel': {  # PutDeliveryChannel
+                        'name': 'default',
+                        's3BucketName': 'mybucket',
+                        'snsTopicARN': 'my-topic-arn',
+                    }
+                },
                 # StartConfigurationRecorder
                 {'ConfigurationRecorderName': 'default'},
                 {},  # DescribeConfigurationRecorders
-                {}  # DescribeDeliveryChannels
-            ]
+                {},  # DescribeDeliveryChannels
+            ],
         )
 
     def test_subscribe_when_bucket_exists_and_sns_topic_arn_provided(self):
@@ -83,35 +92,45 @@ class TestSubscribe(BaseAWSCommandParams
             list_of_parameters_called.append(operation_called[1])
 
         self.assertEqual(
-            list_of_operation_names_called, [
+            list_of_operation_names_called,
+            [
                 'HeadBucket',
                 'PutConfigurationRecorder',
                 'PutDeliveryChannel',
                 'StartConfigurationRecorder',
                 'DescribeConfigurationRecorders',
-                'DescribeDeliveryChannels'
-            ]
+                'DescribeDeliveryChannels',
+            ],
         )
         self.assertEqual(
-            list_of_parameters_called, [
+            list_of_parameters_called,
+            [
                 {'Bucket': 'mybucket'},  # S3 HeadBucket
-                {'ConfigurationRecorder': {  # PutConfigurationRecorder
-                    'name': 'default', 'roleARN': 'myrole'}},
-                {'DeliveryChannel': {  # PutDeliveryChannel
-                    'name': 'default',
-                    's3BucketName': 'mybucket',
-                    'snsTopicARN': 'arn:mytopic'}},
+                {
+                    'ConfigurationRecorder': {  # PutConfigurationRecorder
+                        'name': 'default',
+                        'roleARN': 'myrole',
+                    }
+                },
+                {
+                    'DeliveryChannel': {  # PutDeliveryChannel
+                        'name': 'default',
+                        's3BucketName': 'mybucket',
+                        'snsTopicARN': 'arn:mytopic',
+                    }
+                },
                 # StartConfigurationRecorder
                 {'ConfigurationRecorderName': 'default'},
                 {},  # DescribeConfigurationRecorders
-                {}  # DescribeDeliveryChannels
-            ]
+                {},  # DescribeDeliveryChannels
+            ],
         )
 
     def test_subscribe_when_bucket_needs_to_be_created(self):
         # TODO: fix this patch when we have a better way to stub out responses
-        with mock.patch('botocore.endpoint.Endpoint._send') as \
-                http_session_send_patch:
+        with mock.patch(
+            'botocore.endpoint.Endpoint._send'
+        ) as http_session_send_patch:
             # Mock for HeadBucket request
             head_bucket_response = mock.Mock()
             head_bucket_response.status_code = 404
@@ -125,7 +144,8 @@ class TestSubscribe(BaseAWSCommandParams
             create_bucket_response.headers = {}
 
             http_session_send_patch.side_effect = [
-                head_bucket_response, create_bucket_response
+                head_bucket_response,
+                create_bucket_response,
             ]
 
             s3_client = self.driver.session.create_client('s3')
diff -pruN 2.23.6-1/tests/functional/configure/test_addmodel.py 2.31.35-1/tests/functional/configure/test_addmodel.py
--- 2.23.6-1/tests/functional/configure/test_addmodel.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configure/test_addmodel.py	2025-11-12 19:17:29.000000000 +0000
@@ -32,17 +32,17 @@ class TestAddModel(BaseAWSCommandParamsT
                 "endpointPrefix": 'myservice',
             },
             "operations": {},
-            "shapes": {}
+            "shapes": {},
         }
         self.service_unicode_definition = {
             "version": "2.0",
             "metadata": {
                 "apiVersion": '2015-12-02',
                 "endpointPrefix": 'myservice',
-                "keyWithUnicode": u'\u2713'
+                "keyWithUnicode": '\u2713',
             },
             "operations": {},
-            "shapes": {}
+            "shapes": {},
         }
 
     def tearDown(self):
@@ -51,34 +51,55 @@ class TestAddModel(BaseAWSCommandParamsT
 
     def test_add_model(self):
         cmdline = self.prefix + ' --service-model %s' % json.dumps(
-            self.service_definition, separators=(',', ':'))
+            self.service_definition, separators=(',', ':')
+        )
         self.run_cmd(cmdline)
 
         # Ensure that the model exists in the correct location.
         self.assertTrue(
-            os.path.exists(os.path.join(
-                self.customer_data_root, 'myservice', '2015-12-02',
-                'service-2.json')))
+            os.path.exists(
+                os.path.join(
+                    self.customer_data_root,
+                    'myservice',
+                    '2015-12-02',
+                    'service-2.json',
+                )
+            )
+        )
 
     def test_add_model_with_unicode(self):
         cmdline = self.prefix + ' --service-model %s' % json.dumps(
-            self.service_unicode_definition, separators=(',', ':'))
+            self.service_unicode_definition, separators=(',', ':')
+        )
         self.run_cmd(cmdline)
 
         # Ensure that the model exists in the correct location.
         self.assertTrue(
-            os.path.exists(os.path.join(
-                self.customer_data_root, 'myservice', '2015-12-02',
-                'service-2.json')))
+            os.path.exists(
+                os.path.join(
+                    self.customer_data_root,
+                    'myservice',
+                    '2015-12-02',
+                    'service-2.json',
+                )
+            )
+        )
 
     def test_add_model_with_service_name(self):
         cmdline = self.prefix + ' --service-model %s' % json.dumps(
-            self.service_definition, separators=(',', ':'))
+            self.service_definition, separators=(',', ':')
+        )
         cmdline += ' --service-name override-name'
         self.run_cmd(cmdline)
 
         # Ensure that the model exists in the correct location.
         self.assertTrue(
-            os.path.exists(os.path.join(
-                self.customer_data_root, 'override-name', '2015-12-02',
-                'service-2.json')))
+            os.path.exists(
+                os.path.join(
+                    self.customer_data_root,
+                    'override-name',
+                    '2015-12-02',
+                    'service-2.json',
+                )
+            )
+        )
diff -pruN 2.23.6-1/tests/functional/configure/test_configure.py 2.31.35-1/tests/functional/configure/test_configure.py
--- 2.23.6-1/tests/functional/configure/test_configure.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configure/test_configure.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from awscli.clidriver import AWSCLIEntryPoint
+from awscli.customizations.configure.configure import ConfigureCommand
 from awscli.testutils import (
-    mock,
-    unittest,
     BaseAWSCommandParamsTest,
-    create_clidriver,
     FileCreator,
+    create_clidriver,
+    mock,
+    unittest,
 )
-from awscli.clidriver import AWSCLIEntryPoint
-from awscli.customizations.configure.configure import ConfigureCommand
 
 
 class TestConfigureCommand(BaseAWSCommandParamsTest):
@@ -40,7 +40,7 @@ class TestConfigureCommand(BaseAWSComman
         self.entry_point = AWSCLIEntryPoint(self.driver)
 
     def get_config_file_contents(self):
-        with open(self.config_filename, "r") as f:
+        with open(self.config_filename) as f:
             return f.read()
 
     def test_list_command(self):
@@ -57,7 +57,7 @@ class TestConfigureCommand(BaseAWSComman
         stdout, _, _ = self.run_cmd("configure list")
         self.assertRegex(stdout, r"access_key.+config-file")
         self.assertRegex(stdout, r"secret_key.+config-file")
-        self.assertRegex(stdout, r"region\s+us-west-2\s+config-file")
+        self.assertRegex(stdout, r"region\s+:\sus-west-2\s+:\sconfig-file")
 
     def test_get_command(self):
         self.set_config_file_contents(
@@ -132,9 +132,8 @@ class TestConfigureCommand(BaseAWSComman
     def test_set_with_config_file_no_exist(self):
         self.run_cmd("configure set region us-west-1")
         self.assertEqual(
-            "[default]\n"
-            "region = us-west-1\n",
-            self.get_config_file_contents()
+            "[default]\n" "region = us-west-1\n",
+            self.get_config_file_contents(),
         )
 
     def test_set_with_a_url(self):
@@ -142,8 +141,7 @@ class TestConfigureCommand(BaseAWSComman
             "configure set endpoint http://www.example.com",
         )
         self.assertEqual(
-            "[default]\n"
-            "endpoint = http://www.example.com\n",
+            "[default]\n" "endpoint = http://www.example.com\n",
             self.get_config_file_contents(),
         )
 
@@ -153,21 +151,16 @@ class TestConfigureCommand(BaseAWSComman
 
         self.run_cmd("configure set region us-west-1")
         self.assertEqual(
-            "[default]\n"
-            "region = us-west-1\n",
-            self.get_config_file_contents()
+            "[default]\n" "region = us-west-1\n",
+            self.get_config_file_contents(),
         )
 
     def test_set_with_updating_value(self):
-        self.set_config_file_contents(
-            "[default]\n"
-            "region = us-west-2\n"
-        )
+        self.set_config_file_contents("[default]\n" "region = us-west-2\n")
         self.run_cmd("configure set region us-west-1")
         self.assertEqual(
-            "[default]\n"
-            "region = us-west-1\n",
-            self.get_config_file_contents()
+            "[default]\n" "region = us-west-1\n",
+            self.get_config_file_contents(),
         )
 
     def test_set_with_profile_spaces(self):
@@ -182,8 +175,7 @@ class TestConfigureCommand(BaseAWSComman
             ]
         )
         self.assertEqual(
-            "[profile 'test with spaces']\n"
-            "region = us-west-1\n",
+            "[profile 'test with spaces']\n" "region = us-west-1\n",
             self.get_config_file_contents(),
         )
 
@@ -199,9 +191,7 @@ class TestConfigureCommand(BaseAWSComman
             ]
         )
         self.assertEqual(
-            "[profile 'space test']\n"
-            "un =\n"
-            "    known = us-west-1\n",
+            "[profile 'space test']\n" "un =\n" "    known = us-west-1\n",
             self.get_config_file_contents(),
         )
 
@@ -215,8 +205,7 @@ class TestConfigureCommand(BaseAWSComman
             ]
         )
         self.assertEqual(
-            "[profile 'test with spaces']\n"
-            "region = us-west-1\n",
+            "[profile 'test with spaces']\n" "region = us-west-1\n",
             self.get_config_file_contents(),
         )
 
@@ -225,8 +214,7 @@ class TestConfigureCommand(BaseAWSComman
             "configure set region us-west-1 --profile testing",
         )
         self.assertEqual(
-            "[profile testing]\n"
-            "region = us-west-1\n",
+            "[profile testing]\n" "region = us-west-1\n",
             self.get_config_file_contents(),
         )
 
@@ -235,8 +223,7 @@ class TestConfigureCommand(BaseAWSComman
             "configure set profile.testing.region us-west-2",
         )
         self.assertEqual(
-            "[profile testing]\n"
-            "region = us-west-2\n",
+            "[profile testing]\n" "region = us-west-2\n",
             self.get_config_file_contents(),
         )
 
@@ -245,9 +232,7 @@ class TestConfigureCommand(BaseAWSComman
             "configure set default.s3.signature_version s3v4",
         )
         self.assertEqual(
-            "[default]\n"
-            "s3 =\n"
-            "    signature_version = s3v4\n",
+            "[default]\n" "s3 =\n" "    signature_version = s3v4\n",
             self.get_config_file_contents(),
         )
 
@@ -273,9 +258,7 @@ class TestConfigureCommand(BaseAWSComman
 
     def test_set_with_new_profile(self):
         self.set_config_file_contents(
-            "[default]\n"
-            "s3 =\n"
-            "    signature_version = s3v4\n"
+            "[default]\n" "s3 =\n" "    signature_version = s3v4\n"
         )
         self.run_cmd(
             "configure set profile.dev.s3.signature_version s3v4",
@@ -292,24 +275,19 @@ class TestConfigureCommand(BaseAWSComman
 
     def test_override_existing_value(self):
         self.set_config_file_contents(
-            "[default]\n" "s3 =\n"
-            "    signature_version = v4\n"
+            "[default]\n" "s3 =\n" "    signature_version = v4\n"
         )
         self.run_cmd(
             "configure set default.s3.signature_version NEWVALUE",
         )
         self.assertEqual(
-            "[default]\n"
-            "s3 =\n"
-            "    signature_version = NEWVALUE\n",
+            "[default]\n" "s3 =\n" "    signature_version = NEWVALUE\n",
             self.get_config_file_contents(),
         )
 
     def test_get_nested_attribute(self):
         self.set_config_file_contents(
-            "[default]\n"
-            "s3 =\n"
-            "    signature_version = v4\n"
+            "[default]\n" "s3 =\n" "    signature_version = v4\n"
         )
         stdout, _, _ = self.run_cmd(
             "configure get default.s3.signature_version"
diff -pruN 2.23.6-1/tests/functional/configure/test_sso.py 2.31.35-1/tests/functional/configure/test_sso.py
--- 2.23.6-1/tests/functional/configure/test_sso.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configure/test_sso.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from unittest.mock import patch
+
 from awscli.customizations.configure.sso import ConfigureSSOCommand
 from awscli.testutils import BaseAWSCommandParamsTest, mock
 from tests.functional.sso import BaseSSOTest
-from unittest.mock import patch
 
 
 class TestConfigureSSO(BaseAWSCommandParamsTest):
@@ -26,7 +27,6 @@ class TestConfigureSSO(BaseAWSCommandPar
 
 
 class TestConfigureSSOCommand(BaseSSOTest):
-
     def setUp(self):
         super().setUp()
 
@@ -59,7 +59,9 @@ class TestConfigureSSOCommand(BaseSSOTes
         )
 
         self.profile_prompt = patch.object(
-            ConfigureSSOCommand, '_prompt_for_profile', return_value='my-profile',
+            ConfigureSSOCommand,
+            '_prompt_for_profile',
+            return_value='my-profile',
         )
 
         self.registration_args_prompt.start()
@@ -97,12 +99,15 @@ class TestConfigureSSOCommand(BaseSSOTes
         )
 
         # The lack of a session_name should trigger the device flow
-        with patch.object(ConfigureSSOCommand,
-                          '_prompt_for_sso_registration_args',
-                          return_value={
-                              'session_name': None,
-                              'sso_region': 'us-east-1',
-                              'start_url': 'https://identitycenter.amazonaws.com/ssoins-1234'}):
+        with patch.object(
+            ConfigureSSOCommand,
+            '_prompt_for_sso_registration_args',
+            return_value={
+                'session_name': None,
+                'sso_region': 'us-east-1',
+                'start_url': 'https://identitycenter.amazonaws.com/ssoins-1234',
+            },
+        ):
             self.run_cmd('configure sso')
 
     @patch('botocore.session.Session.create_client')
diff -pruN 2.23.6-1/tests/functional/configured_endpoint_urls/test_configured_endpoint_url.py 2.31.35-1/tests/functional/configured_endpoint_urls/test_configured_endpoint_url.py
--- 2.23.6-1/tests/functional/configured_endpoint_urls/test_configured_endpoint_url.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/configured_endpoint_urls/test_configured_endpoint_url.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,8 @@ from pathlib import Path
 
 import pytest
 
-from tests import CLIRunner
 from awscli.compat import urlparse
-
+from tests import CLIRunner
 
 ENDPOINT_TESTDATA_FILE = Path(__file__).parent / "profile-tests.json"
 
@@ -57,13 +56,15 @@ def create_cases():
                 ),
             },
             marks=pytest.mark.skipif(
-               'ignore_configured_endpoint_urls' in (
-                    test_suite['client_configs']
-                    .get(test_case_data['client_config'], {})
+                'ignore_configured_endpoint_urls'
+                in (
+                    test_suite['client_configs'].get(
+                        test_case_data['client_config'], {}
+                    )
                 ),
-               reason="Parameter not supported on the command line"
+                reason="Parameter not supported on the command line",
             ),
-            id=test_case_data['name']
+            id=test_case_data['name'],
         )
 
 
@@ -100,13 +101,11 @@ SERVICE_TO_OPERATION = {'s3api': 'list-b
 
 
 class TestConfiguredEndpointUrl:
-    def assert_endpoint_used(
-        self, cli_runner_result, test_case
-    ):
-
+    def assert_endpoint_used(self, cli_runner_result, test_case):
         aws_request = cli_runner_result.aws_requests[0]
-        assert test_case['expected_endpoint_url'] == \
-            _normalize_endpoint(aws_request.http_requests[0].url)
+        assert test_case['expected_endpoint_url'] == _normalize_endpoint(
+            aws_request.http_requests[0].url
+        )
 
     def _create_command(self, test_case):
         service = test_case['service']
@@ -117,13 +116,14 @@ class TestConfiguredEndpointUrl:
             service,
             SERVICE_TO_OPERATION[service],
             '--profile',
-            f'{test_case["profile"]}'
+            f'{test_case["profile"]}',
         ]
 
         if test_case['client_args'].get('endpoint_url', None):
-            cmd.extend([
+            cmd.extend(
+                [
                     '--endpoint-url',
-                    f'{test_case["client_args"]["endpoint_url"]}'
+                    f'{test_case["client_args"]["endpoint_url"]}',
                 ]
             )
 
diff -pruN 2.23.6-1/tests/functional/datapipeline/test_get_pipeline_definition.py 2.31.35-1/tests/functional/datapipeline/test_get_pipeline_definition.py
--- 2.23.6-1/tests/functional/datapipeline/test_get_pipeline_definition.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/datapipeline/test_get_pipeline_definition.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,14 +14,11 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestGetPipelineDefinition(BaseAWSCommandParamsTest):
-
     prefix = 'datapipeline get-pipeline-definition '
 
     def test_renamed_object_query_arg(self):
         # --version is renamed to --pipeline-version so we don't
         # conflict with the global --version argument.
         cmdline = self.prefix + '--pipeline-id foo --pipeline-version latest'
-        expected = {
-            'pipelineId': 'foo', 'version': 'latest'
-        }
+        expected = {'pipelineId': 'foo', 'version': 'latest'}
         self.assert_params_for_cmd(cmdline, expected)
diff -pruN 2.23.6-1/tests/functional/datapipeline/test_list_runs.py 2.31.35-1/tests/functional/datapipeline/test_list_runs.py
--- 2.23.6-1/tests/functional/datapipeline/test_list_runs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/datapipeline/test_list_runs.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,13 +21,15 @@ class TestDataPipelineQueryObjects(BaseA
     def _generate_pipeline_objects(self, object_ids):
         objects = []
         for object_id in object_ids:
-            objects.append({
-                'id': object_id,
-                'name': object_id,
-                'fields': [
-                    {'key': '@componentParent', 'stringValue': object_id}
-                ]
-            })
+            objects.append(
+                {
+                    'id': object_id,
+                    'name': object_id,
+                    'fields': [
+                        {'key': '@componentParent', 'stringValue': object_id}
+                    ],
+                }
+            )
         return objects
 
     def test_list_more_than_one_hundred_runs(self):
@@ -35,7 +37,9 @@ class TestDataPipelineQueryObjects(BaseA
         end_date = '2017-10-26T00:37:21'
         pipeline_id = 'pipeline-id'
         args = '--pipeline-id %s --start-interval %s,%s' % (
-            pipeline_id, start_date, end_date
+            pipeline_id,
+            start_date,
+            end_date,
         )
         command = self.prefix + args
         object_ids = ['object-id-%s' % i for i in range(150)]
@@ -45,46 +49,55 @@ class TestDataPipelineQueryObjects(BaseA
             {
                 'ids': object_ids[:100],
                 'hasMoreResults': True,
-                'marker': 'marker'
-            },
-            {
-                'ids': object_ids[100:],
-                'hasMoreResults': False
+                'marker': 'marker',
             },
+            {'ids': object_ids[100:], 'hasMoreResults': False},
             {'pipelineObjects': objects[:100]},
-            {'pipelineObjects': objects[100:]}
+            {'pipelineObjects': objects[100:]},
         ]
 
         self.run_cmd(command, expected_rc=0)
 
         query = {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                'operator': {
-                    'type': 'BETWEEN',
-                    'values': [start_date, end_date]
+            'selectors': [
+                {
+                    'fieldName': '@actualStartTime',
+                    'operator': {
+                        'type': 'BETWEEN',
+                        'values': [start_date, end_date],
+                    },
                 }
-            }]
+            ]
         }
 
         expected_operations_called = [
-            ('QueryObjects', {
-                'pipelineId': pipeline_id,
-                'query': query, 'sphere': 'INSTANCE'
-            }),
-            ('QueryObjects', {
-                'pipelineId': pipeline_id,
-                'marker': 'marker', 'query': query, 'sphere': 'INSTANCE'
-            }),
-            ('DescribeObjects', {
-                'objectIds': object_ids[:100],
-                'pipelineId': pipeline_id
-            }),
-            ('DescribeObjects', {
-                'objectIds': object_ids[100:],
-                'pipelineId': pipeline_id
-            })
+            (
+                'QueryObjects',
+                {
+                    'pipelineId': pipeline_id,
+                    'query': query,
+                    'sphere': 'INSTANCE',
+                },
+            ),
+            (
+                'QueryObjects',
+                {
+                    'pipelineId': pipeline_id,
+                    'marker': 'marker',
+                    'query': query,
+                    'sphere': 'INSTANCE',
+                },
+            ),
+            (
+                'DescribeObjects',
+                {'objectIds': object_ids[:100], 'pipelineId': pipeline_id},
+            ),
+            (
+                'DescribeObjects',
+                {'objectIds': object_ids[100:], 'pipelineId': pipeline_id},
+            ),
+        ]
+        operations_called = [
+            (op.name, params) for op, params in self.operations_called
         ]
-        operations_called = [(op.name, params)
-                             for op, params in self.operations_called]
         self.assertEqual(expected_operations_called, operations_called)
diff -pruN 2.23.6-1/tests/functional/datapipeline/test_query_objects.py 2.31.35-1/tests/functional/datapipeline/test_query_objects.py
--- 2.23.6-1/tests/functional/datapipeline/test_query_objects.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/datapipeline/test_query_objects.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,16 +21,23 @@ class TestDataPipelineQueryObjects(BaseA
     def test_renamed_object_query_arg(self):
         # --query is renamed to --objects-query so we don't
         # conflict with the global --query argument.
-        args = ('--pipeline-id foo '
-                '--sphere INSTANCE '
-                '--objects-query {"selectors":[{"fieldName":"@status",'
-                '"operator":{"type":"EQ","values":["RUNNING"]}}]}')
+        args = (
+            '--pipeline-id foo '
+            '--sphere INSTANCE '
+            '--objects-query {"selectors":[{"fieldName":"@status",'
+            '"operator":{"type":"EQ","values":["RUNNING"]}}]}'
+        )
         cmdline = self.prefix + args
         expected = {
             'pipelineId': 'foo',
-            'query': {'selectors': [{'fieldName': '@status',
-                                     'operator': {'type': 'EQ',
-                                                  'values': ['RUNNING']}}]},
-            'sphere': 'INSTANCE'
+            'query': {
+                'selectors': [
+                    {
+                        'fieldName': '@status',
+                        'operator': {'type': 'EQ', 'values': ['RUNNING']},
+                    }
+                ]
+            },
+            'sphere': 'INSTANCE',
         }
         self.assert_params_for_cmd(cmdline, expected)
diff -pruN 2.23.6-1/tests/functional/ddb/test_ddb.py 2.31.35-1/tests/functional/ddb/test_ddb.py
--- 2.23.6-1/tests/functional/ddb/test_ddb.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ddb/test_ddb.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,6 +18,6 @@ class TestDDB(BaseAWSCommandParamsTest):
         _, stderr, _ = self.run_cmd('ddb', expected_rc=252)
         expected = (
             "usage: aws [options] ddb <subcommand> "
-            "[parameters]\naws: error: too few arguments"
+            "[parameters]\naws: [ERROR]: too few arguments"
         )
         self.assertIn(expected, stderr)
diff -pruN 2.23.6-1/tests/functional/ddb/test_put.py 2.31.35-1/tests/functional/ddb/test_put.py
--- 2.23.6-1/tests/functional/ddb/test_put.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ddb/test_put.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,8 +25,9 @@ class TestPut(BaseAWSCommandParamsTest):
         super(TestPut, self).setUp()
         self.parsed_response = {}
         self.tempdir = tempfile.mkdtemp()
-        self.original_tag_handlers = yaml.YAML(typ='safe').constructor\
-            .yaml_constructors.copy()
+        self.original_tag_handlers = yaml.YAML(
+            typ='safe'
+        ).constructor.yaml_constructors.copy()
 
     def tearDown(self):
         super(TestPut, self).tearDown()
@@ -40,7 +41,8 @@ class TestPut(BaseAWSCommandParamsTest):
         # in self.original_tag_handlers to ensure we handle binary and
         # float types correctly.
         yaml.YAML(typ='safe').constructor.yaml_constructors.update(
-            self.original_tag_handlers)
+            self.original_tag_handlers
+        )
 
     def assert_yaml_response_equal(self, response, expected):
         with self.assertRaises(ValueError):
@@ -55,16 +57,12 @@ class TestPut(BaseAWSCommandParamsTest):
             'ReturnConsumedCapacity': 'NONE',
             'Item': {"foo": {"S": "bar"}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
         operations_called = [o[0].name for o in self.operations_called]
         self.assertEqual(operations_called, ['PutItem'])
 
     def test_batch_write(self):
-        command = [
-            'ddb', 'put', 'mytable', '[{foo: bar}, {foo: bar}]'
-        ]
+        command = ['ddb', 'put', 'mytable', '[{foo: bar}, {foo: bar}]']
         expected_params = {
             'ReturnConsumedCapacity': 'NONE',
             'RequestItems': {
@@ -72,24 +70,20 @@ class TestPut(BaseAWSCommandParamsTest):
                     {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
                     {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
                 ]
-            }
+            },
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
         operations_called = [o[0].name for o in self.operations_called]
         self.assertEqual(operations_called, ['BatchWriteItem'])
 
     def test_batch_write_multiple_batches(self):
         items = ', '.join(["{foo: bar}" for _ in range(40)])
-        command = [
-            'ddb', 'put', 'mytable', '[%s]' % items
-        ]
+        command = ['ddb', 'put', 'mytable', '[%s]' % items]
         self.run_cmd(command, expected_rc=0)
         operations_called = [o[0].name for o in self.operations_called]
-        self.assertEqual(operations_called, [
-            'BatchWriteItem', 'BatchWriteItem'
-        ])
+        self.assertEqual(
+            operations_called, ['BatchWriteItem', 'BatchWriteItem']
+        )
 
         first_params = self.operations_called[0][1]
         num_items = len(first_params['RequestItems']['mytable'])
@@ -104,27 +98,34 @@ class TestPut(BaseAWSCommandParamsTest):
     def test_batch_write_unprocessed_items(self):
         self.parsed_responses = [
             {
-                'UnprocessedItems': {'mytable': [
-                    {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
-                ]}
+                'UnprocessedItems': {
+                    'mytable': [
+                        {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
+                    ]
+                }
             },
             {
-                'UnprocessedItems': {'mytable': [
-                    {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
-                ]}
+                'UnprocessedItems': {
+                    'mytable': [
+                        {'PutRequest': {'Item': {'foo': {'S': 'bar'}}}},
+                    ]
+                }
             },
             {},
         ]
 
         items = ', '.join(["{foo: bar}" for _ in range(40)])
-        command = [
-            'ddb', 'put', 'mytable', '[%s]' % items
-        ]
+        command = ['ddb', 'put', 'mytable', '[%s]' % items]
         self.run_cmd(command, expected_rc=0)
         operations_called = [o[0].name for o in self.operations_called]
-        self.assertEqual(operations_called, [
-            'BatchWriteItem', 'BatchWriteItem', 'BatchWriteItem',
-        ])
+        self.assertEqual(
+            operations_called,
+            [
+                'BatchWriteItem',
+                'BatchWriteItem',
+                'BatchWriteItem',
+            ],
+        )
 
         first_params = self.operations_called[0][1]
         num_items = len(first_params['RequestItems']['mytable'])
@@ -140,8 +141,12 @@ class TestPut(BaseAWSCommandParamsTest):
 
     def test_put_with_condition(self):
         command = [
-            'ddb', 'put', 'mytable', '{foo: bar}',
-            '--condition', 'attribute_exists(foo)',
+            'ddb',
+            'put',
+            'mytable',
+            '{foo: bar}',
+            '--condition',
+            'attribute_exists(foo)',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -150,14 +155,16 @@ class TestPut(BaseAWSCommandParamsTest):
             'ExpressionAttributeNames': {'#n0': 'foo'},
             'Item': {"foo": {"S": "bar"}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
 
     def test_batch_write_with_condition(self):
         command = [
-            'ddb', 'put', 'mytable', '[{foo: bar}, {foo: bar}]',
-            '--condition', 'attribute_exists(foo)',
+            'ddb',
+            'put',
+            'mytable',
+            '[{foo: bar}, {foo: bar}]',
+            '--condition',
+            'attribute_exists(foo)',
         ]
         _, stderr, _ = self.assert_params_for_cmd(command, expected_rc=252)
         self.assertIn('--condition is not supported', stderr)
@@ -173,9 +180,7 @@ class TestPut(BaseAWSCommandParamsTest):
             'ReturnConsumedCapacity': 'NONE',
             'Item': {"foo": {"S": "bar"}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
 
     def test_load_items_from_stdin(self):
         command = ['ddb', 'put', 'mytable', '-']
@@ -185,9 +190,7 @@ class TestPut(BaseAWSCommandParamsTest):
             'Item': {"foo": {"S": "bar"}},
         }
         with capture_input(b'{foo: bar}'):
-            self.assert_params_for_cmd(
-                command, expected_params, expected_rc=0
-            )
+            self.assert_params_for_cmd(command, expected_params, expected_rc=0)
 
     def test_put_bytes(self):
         command = ['ddb', 'put', 'mytable', '{foo: !!binary "4pyT"}']
@@ -196,9 +199,7 @@ class TestPut(BaseAWSCommandParamsTest):
             'ReturnConsumedCapacity': 'NONE',
             'Item': {"foo": {"B": b'\xe2\x9c\x93'}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
 
     def test_put_int(self):
         command = ['ddb', 'put', 'mytable', '{foo: 1}']
@@ -207,9 +208,7 @@ class TestPut(BaseAWSCommandParamsTest):
             'ReturnConsumedCapacity': 'NONE',
             'Item': {"foo": {"N": "1"}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
 
     def test_put_float(self):
         command = ['ddb', 'put', 'mytable', '{foo: 1.1}']
@@ -218,6 +217,4 @@ class TestPut(BaseAWSCommandParamsTest):
             'ReturnConsumedCapacity': 'NONE',
             'Item': {"foo": {"N": "1.1"}},
         }
-        self.assert_params_for_cmd(
-            command, expected_params, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected_params, expected_rc=0)
diff -pruN 2.23.6-1/tests/functional/ddb/test_select.py 2.31.35-1/tests/functional/ddb/test_select.py
--- 2.23.6-1/tests/functional/ddb/test_select.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ddb/test_select.py	2025-11-12 19:17:29.000000000 +0000
@@ -27,7 +27,7 @@ class BaseSelectTest(BaseAWSCommandParam
 
 class TestSelect(BaseSelectTest):
     def setUp(self):
-        super(TestSelect, self).setUp()
+        super().setUp()
         self.parsed_response = {
             "Count": 1,
             "Items": [{"foo": {"S": "spam"}}],
@@ -54,16 +54,14 @@ class TestSelect(BaseSelectTest):
             "Items": [{"foo": {"N": "2"}}],
             "ScannedCount": 1,
         }
-        command = [
-            'ddb', 'select', 'mytable', '--key-condition', 'foo = 1'
-        ]
+        command = ['ddb', 'select', 'mytable', '--key-condition', 'foo = 1']
         expected_params = {
             'TableName': 'mytable',
             'ReturnConsumedCapacity': 'NONE',
             'ConsistentRead': True,
             'KeyConditionExpression': '#n0 = :n1',
             'ExpressionAttributeNames': {'#n0': 'foo'},
-            'ExpressionAttributeValues': {':n1': {'N': '1'}}
+            'ExpressionAttributeValues': {':n1': {'N': '1'}},
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -86,9 +84,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_select_with_projection(self):
-        command = [
-            'ddb', 'select', 'mytable', '--projection', 'foo'
-        ]
+        command = ['ddb', 'select', 'mytable', '--projection', 'foo']
         expected_params = {
             'TableName': 'mytable',
             'ReturnConsumedCapacity': 'NONE',
@@ -108,7 +104,11 @@ class TestSelect(BaseSelectTest):
             "ScannedCount": 1,
         }
         command = [
-            'ddb', 'select', 'mytable', '--filter', 'foo BETWEEN 1 AND 3'
+            'ddb',
+            'select',
+            'mytable',
+            '--filter',
+            'foo BETWEEN 1 AND 3',
         ]
 
         expected_params = {
@@ -120,7 +120,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeValues': {
                 ':n1': {'N': '1'},
                 ':n2': {'N': '3'},
-            }
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -129,7 +129,11 @@ class TestSelect(BaseSelectTest):
 
     def test_filter_with_function(self):
         command = [
-            'ddb', 'select', 'mytable', '--filter', 'contains(foo, "bar")'
+            'ddb',
+            'select',
+            'mytable',
+            '--filter',
+            'contains(foo, "bar")',
         ]
 
         expected_params = {
@@ -140,7 +144,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeNames': {'#n0': 'foo'},
             'ExpressionAttributeValues': {
                 ':n1': {'S': 'bar'},
-            }
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -148,9 +152,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_filter_with_set(self):
-        command = [
-            'ddb', 'select', 'mytable', '--filter', 'foo = {1, 2, 3}'
-        ]
+        command = ['ddb', 'select', 'mytable', '--filter', 'foo = {1, 2, 3}']
 
         expected_params = {
             'TableName': 'mytable',
@@ -160,7 +162,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeNames': {'#n0': 'foo'},
             'ExpressionAttributeValues': {
                 ':n1': {'NS': ['1', '2', '3']},
-            }
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -168,9 +170,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_filter_with_bytes(self):
-        command = [
-            'ddb', 'select', 'mytable', '--filter', 'foo <> b"4pyT"'
-        ]
+        command = ['ddb', 'select', 'mytable', '--filter', 'foo <> b"4pyT"']
 
         expected_params = {
             'TableName': 'mytable',
@@ -181,7 +181,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeValues': {
                 # This will be base64 encoded during serialization
                 ':n1': {'B': b'\xe2\x9c\x93'},
-            }
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -190,7 +190,11 @@ class TestSelect(BaseSelectTest):
 
     def test_filter_with_list(self):
         command = [
-            'ddb', 'select', 'mytable', '--filter', 'foo <> [-1, 2, "3"]'
+            'ddb',
+            'select',
+            'mytable',
+            '--filter',
+            'foo <> [-1, 2, "3"]',
         ]
 
         expected_params = {
@@ -200,10 +204,14 @@ class TestSelect(BaseSelectTest):
             'FilterExpression': '#n0 <> :n1',
             'ExpressionAttributeNames': {'#n0': 'foo'},
             'ExpressionAttributeValues': {
-                ':n1': {'L': [
-                    {'N': '-1'}, {'N': '2'}, {'S': '3'},
-                ]},
-            }
+                ':n1': {
+                    'L': [
+                        {'N': '-1'},
+                        {'N': '2'},
+                        {'S': '3'},
+                    ]
+                },
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -211,9 +219,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_filter_with_map(self):
-        command = [
-            'ddb', 'select', 'mytable', '--filter', 'foo <> {"bar": 4}'
-        ]
+        command = ['ddb', 'select', 'mytable', '--filter', 'foo <> {"bar": 4}']
 
         expected_params = {
             'TableName': 'mytable',
@@ -223,7 +229,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeNames': {'#n0': 'foo'},
             'ExpressionAttributeValues': {
                 ':n1': {'M': {"bar": {"N": "4"}}},
-            }
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected_params, expected_rc=0
@@ -231,9 +237,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_select_with_attributes_all(self):
-        command = [
-            'ddb', 'select', 'mytable', '--attributes', 'ALL'
-        ]
+        command = ['ddb', 'select', 'mytable', '--attributes', 'ALL']
         expected_params = {
             'TableName': 'mytable',
             'ReturnConsumedCapacity': 'NONE',
@@ -247,8 +251,13 @@ class TestSelect(BaseSelectTest):
 
     def test_select_with_attributes_all_projected(self):
         command = [
-            'ddb', 'select', 'mytable', '--attributes', 'ALL_PROJECTED',
-            '--index-name', 'myindex',
+            'ddb',
+            'select',
+            'mytable',
+            '--attributes',
+            'ALL_PROJECTED',
+            '--index-name',
+            'myindex',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -267,9 +276,7 @@ class TestSelect(BaseSelectTest):
             "Count": 1,
             "ScannedCount": 1,
         }
-        command = [
-            'ddb', 'select', 'mytable', '--attributes', 'COUNT'
-        ]
+        command = ['ddb', 'select', 'mytable', '--attributes', 'COUNT']
         expected_params = {
             'TableName': 'mytable',
             'ReturnConsumedCapacity': 'NONE',
@@ -283,7 +290,10 @@ class TestSelect(BaseSelectTest):
 
     def test_select_consistent_read(self):
         command = [
-            'ddb', 'select', 'mytable', '--consistent-read',
+            'ddb',
+            'select',
+            'mytable',
+            '--consistent-read',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -297,7 +307,10 @@ class TestSelect(BaseSelectTest):
 
     def test_select_no_consistent_read(self):
         command = [
-            'ddb', 'select', 'mytable', '--no-consistent-read',
+            'ddb',
+            'select',
+            'mytable',
+            '--no-consistent-read',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -311,7 +324,10 @@ class TestSelect(BaseSelectTest):
 
     def test_select_no_return_consumed_capacity(self):
         command = [
-            'ddb', 'select', 'mytable', '--no-return-consumed-capacity',
+            'ddb',
+            'select',
+            'mytable',
+            '--no-return-consumed-capacity',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -325,7 +341,10 @@ class TestSelect(BaseSelectTest):
 
     def test_select_return_consumed_capacity(self):
         command = [
-            'ddb', 'select', 'mytable', '--return-consumed-capacity',
+            'ddb',
+            'select',
+            'mytable',
+            '--return-consumed-capacity',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -339,8 +358,12 @@ class TestSelect(BaseSelectTest):
 
     def test_select_return_consumed_capacity_with_index(self):
         command = [
-            'ddb', 'select', 'mytable', '--return-consumed-capacity',
-            '--index-name', 'myindex',
+            'ddb',
+            'select',
+            'mytable',
+            '--return-consumed-capacity',
+            '--index-name',
+            'myindex',
         ]
         expected_params = {
             'TableName': 'mytable',
@@ -354,9 +377,7 @@ class TestSelect(BaseSelectTest):
         self.assert_yaml_response_equal(stdout, self.parsed_response)
 
     def test_select_with_query(self):
-        command = [
-            'ddb', 'select', 'mytable', '--query', 'Items'
-        ]
+        command = ['ddb', 'select', 'mytable', '--query', 'Items']
         expected_params = {
             'TableName': 'mytable',
             'ReturnConsumedCapacity': 'NONE',
@@ -405,10 +426,15 @@ class TestSelect(BaseSelectTest):
             'ScannedCount': 1,
         }
         command = [
-            'ddb', 'select', 'laptops',
-            '--projection', 'name, price',
-            '--filter', 'price < 3000',
-            '--key-condition', 'name = "macbook"',
+            'ddb',
+            'select',
+            'laptops',
+            '--projection',
+            'name, price',
+            '--filter',
+            'price < 3000',
+            '--key-condition',
+            'name = "macbook"',
         ]
         expected = {
             'TableName': 'laptops',
@@ -426,8 +452,7 @@ class TestSelect(BaseSelectTest):
             'ExpressionAttributeValues': {
                 ':n3': {'N': '3000'},
                 ':n5': {'S': 'macbook'},
-            }
-
+            },
         }
         stdout, _, _ = self.assert_params_for_cmd(
             command, expected, expected_rc=0
@@ -436,14 +461,19 @@ class TestSelect(BaseSelectTest):
     def test_select_project_complex_identifier(self):
         self.parsed_response = {
             'Count': 1,
-            'Items': [{
-                'name': {'S': 'spam n eggs'},
-                'ingredients': {'L': [{'M': {'name': {'S': 'spam'}}}]},
-            }]
+            'Items': [
+                {
+                    'name': {'S': 'spam n eggs'},
+                    'ingredients': {'L': [{'M': {'name': {'S': 'spam'}}}]},
+                }
+            ],
         }
         command = [
-            'ddb', 'select', 'recipes',
-            '--projection', 'name, ingredients[8].name',
+            'ddb',
+            'select',
+            'recipes',
+            '--projection',
+            'name, ingredients[8].name',
         ]
         expected = {
             'TableName': 'recipes',
@@ -454,11 +484,9 @@ class TestSelect(BaseSelectTest):
                 '#n0': 'name',
                 '#n1': 'ingredients',
                 '#n2': 'name',
-            }
+            },
         }
-        self.assert_params_for_cmd(
-            command, expected, expected_rc=0
-        )
+        self.assert_params_for_cmd(command, expected, expected_rc=0)
 
     def test_select_unsupported_output(self):
         unsupported_output = ['json', 'table', 'text', 'yaml-stream']
@@ -466,20 +494,22 @@ class TestSelect(BaseSelectTest):
             with self.subTest(output):
                 cmdline = f'ddb select mytable --output {output}'
                 stdout, _, _ = self.assert_params_for_cmd(
-                    cmdline, expected_rc=252,
+                    cmdline,
+                    expected_rc=252,
                     stderr_contains=f'{output} output format is not supported for ddb commands',
                 )
 
     def test_select_parsing_error_rc(self):
         cmdline = 'ddb select mytable --filter a=?!f'
         stdout, _, _ = self.assert_params_for_cmd(
-            cmdline, expected_rc=252,
+            cmdline,
+            expected_rc=252,
         )
 
 
 class TestSelectPagination(BaseSelectTest):
     def setUp(self):
-        super(TestSelectPagination, self).setUp()
+        super().setUp()
         self.parsed_responses = [
             {
                 "Count": 1,
@@ -495,24 +525,17 @@ class TestSelectPagination(BaseSelectTes
         ]
 
     def test_select_paginates(self):
-        command = [
-            'ddb', 'select', 'mytable'
-        ]
+        command = ['ddb', 'select', 'mytable']
         stdout, _, _ = self.run_cmd(command, expected_rc=0)
         expected_response = {
             'Count': 2,
-            'Items': [
-                {'foo': 1},
-                {'foo': 2}
-            ],
-            'ScannedCount': 2
+            'Items': [{'foo': 1}, {'foo': 2}],
+            'ScannedCount': 2,
         }
         self.assert_yaml_response_equal(stdout, expected_response)
 
     def test_no_paginate(self):
-        command = [
-            'ddb', 'select', 'mytable', '--no-paginate'
-        ]
+        command = ['ddb', 'select', 'mytable', '--no-paginate']
         stdout, _, _ = self.run_cmd(command, expected_rc=0)
         expected_response = {
             "Count": 1,
@@ -524,15 +547,18 @@ class TestSelectPagination(BaseSelectTes
 
     def test_no_paginate_with_paging_params_set(self):
         command = [
-            'ddb', 'select', 'mytable', '--no-paginate', '--max-items', '1'
+            'ddb',
+            'select',
+            'mytable',
+            '--no-paginate',
+            '--max-items',
+            '1',
         ]
         _, stderr, _ = self.run_cmd(command, expected_rc=252)
         self.assertIn('Cannot specify --no-paginate along with ', stderr)
 
     def test_max_items(self):
-        command = [
-            'ddb', 'select', 'mytable', '--max-items', '1'
-        ]
+        command = ['ddb', 'select', 'mytable', '--max-items', '1']
         stdout, _, _ = self.run_cmd(command, expected_rc=0)
         expected_response = {
             'Count': 1,
@@ -547,9 +573,7 @@ class TestSelectPagination(BaseSelectTes
         self.assert_yaml_response_equal(stdout, expected_response)
 
     def test_page_size(self):
-        command = [
-            'ddb', 'select', 'mytable', '--page-size', '1'
-        ]
+        command = ['ddb', 'select', 'mytable', '--page-size', '1']
         stdout, _, _ = self.run_cmd(command, expected_rc=0)
         params = self.operations_called[1][1]
         expected_initial_params = {
@@ -563,22 +587,24 @@ class TestSelectPagination(BaseSelectTes
 
         expected_response = {
             'Count': 2,
-            'Items': [
-                {'foo': 1},
-                {'foo': 2}
-            ],
-            'ScannedCount': 2
+            'Items': [{'foo': 1}, {'foo': 2}],
+            'ScannedCount': 2,
         }
         self.assert_yaml_response_equal(stdout, expected_response)
 
     def test_starting_token(self):
-        self.parsed_responses = [{
-            "Count": 1,
-            "Items": [{"foo": {"N": "2"}}],
-            "ScannedCount": 1,
-        }]
+        self.parsed_responses = [
+            {
+                "Count": 1,
+                "Items": [{"foo": {"N": "2"}}],
+                "ScannedCount": 1,
+            }
+        ]
         command = [
-            'ddb', 'select', 'mytable', '--starting-token',
+            'ddb',
+            'select',
+            'mytable',
+            '--starting-token',
             'eyJFeGNsdXNpdmVTdGFydEtleSI6IHsiZm9vIjogeyJOIjogIjEifX19',
         ]
         expected_params = {
@@ -591,11 +617,8 @@ class TestSelectPagination(BaseSelectTes
             command, expected_params, expected_rc=0
         )
         expected_response = {
-            'Count': 0,
-            'Items': [
-                {'foo': 2}
-            ],
-            'ScannedCount': 0
+            'Count': 1,
+            'Items': [{'foo': 2}],
+            'ScannedCount': 1,
         }
         self.assert_yaml_response_equal(stdout, expected_response)
-
diff -pruN 2.23.6-1/tests/functional/dependencies/test_colorama.py 2.31.35-1/tests/functional/dependencies/test_colorama.py
--- 2.23.6-1/tests/functional/dependencies/test_colorama.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/dependencies/test_colorama.py	2025-11-12 19:17:29.000000000 +0000
@@ -2,14 +2,12 @@ import os
 import sys
 from contextlib import contextmanager
 
-from awscli.testutils import unittest, skip_if_windows
-from awscli.testutils import capture_output
+import colorama
+from colorama import Back, Fore
+
 from awscli.compat import StringIO
 from awscli.table import COLORAMA_KWARGS
-
-import colorama
-from colorama import Fore
-from colorama import Back
+from awscli.testutils import capture_output, skip_if_windows, unittest
 
 
 @skip_if_windows('Posix color code tests')
@@ -69,16 +67,21 @@ class TestPosix(unittest.TestCase):
 
     def test_colorama_auto_resets(self):
         with self.colorama_text() as captured:
-             content = Fore.RED + 'foo'
-             sys.stdout.write(content)
-             sys.stdout.write('bar')
+            content = Fore.RED + 'foo'
+            sys.stdout.write(content)
+            sys.stdout.write('bar')
         # Since auto-reset is enabled each call to write should end with the
         # reset code. And foo should start with the red foreground code. This
         # also depends on the strip=False behavior to pass on windows.
-        self.assertEqual(captured.stdout.getvalue(),
-                         '%sfoo%sbar%s' % (self._ANSI_FORE_RED,
-                                           self._ANSI_RESET_ALL,
-                                           self._ANSI_RESET_ALL))
+        self.assertEqual(
+            captured.stdout.getvalue(),
+            '%sfoo%sbar%s'
+            % (
+                self._ANSI_FORE_RED,
+                self._ANSI_RESET_ALL,
+                self._ANSI_RESET_ALL,
+            ),
+        )
 
     def test_colorama_does_not_strip(self):
         # Strip is set to False which means that it doesn't remove ansi codes
@@ -86,14 +89,16 @@ class TestPosix(unittest.TestCase):
         with self.colorama_text() as captured:
             content = Fore.BLUE + 'foo'
             sys.stdout.write(content)
-            self.assertEqual(captured.stdout.getvalue(),
-                             '%sfoo%s' % (self._ANSI_FORE_BLUE,
-                                          self._ANSI_RESET_ALL))
+            self.assertEqual(
+                captured.stdout.getvalue(),
+                '%sfoo%s' % (self._ANSI_FORE_BLUE, self._ANSI_RESET_ALL),
+            )
 
     def test_colorama_does_not_strip_non_tty(self):
         with self.colorama_text(tty=False) as captured:
             content = Fore.BLUE + 'foo'
             sys.stdout.write(content)
-            self.assertEqual(captured.stdout.getvalue(),
-                             '%sfoo%s' % (self._ANSI_FORE_BLUE,
-                                          self._ANSI_RESET_ALL))
+            self.assertEqual(
+                captured.stdout.getvalue(),
+                '%sfoo%s' % (self._ANSI_FORE_BLUE, self._ANSI_RESET_ALL),
+            )
diff -pruN 2.23.6-1/tests/functional/docs/test_examples.py 2.31.35-1/tests/functional/docs/test_examples.py
--- 2.23.6-1/tests/functional/docs/test_examples.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/docs/test_examples.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,20 +21,19 @@ at the man output, we look one step befo
 (it's easier to verify).
 
 """
+
 import os
 import re
 import shlex
+
 import docutils.nodes
 import docutils.parsers.rst
 import docutils.utils
-
 import pytest
 
-from awscli.argparser import MainArgParser
-from awscli.argparser import ServiceArgParser
+from awscli.argparser import MainArgParser, ServiceArgParser
 from awscli.testutils import BaseAWSHelpOutputTest, create_clidriver
 
-
 # Mapping of command names to subcommands that have examples in their help
 # output.  This isn't mean to be an exhaustive list, but should help catch
 # things like command table renames, virtual commands, etc.
@@ -45,13 +44,19 @@ COMMAND_EXAMPLES = {
     'ec2': ['run-instances', 'start-instances', 'stop-instances'],
     'swf': ['deprecate-domain', 'describe-domain'],
     'sqs': ['create-queue', 'get-queue-attributes'],
-    'emr': ['add-steps', 'create-default-roles', 'describe-cluster', 'schedule-hbase-backup'],
-    'opsworks': ['register'],
+    'emr': [
+        'add-steps',
+        'create-default-roles',
+        'describe-cluster',
+        'schedule-hbase-backup',
+    ],
 }
 _dname = os.path.dirname
 EXAMPLES_DIR = os.path.join(
     _dname(_dname(_dname(_dname(os.path.abspath(__file__))))),
-    'awscli', 'examples')
+    'awscli',
+    'examples',
+)
 
 ALLOWED_FILENAME_CHAR_REGEX = re.compile(r'([a-z0-9_\-\.]*$)')
 HTTP_LINK_REGEX = re.compile(r'`.+?<http://')
@@ -59,7 +64,7 @@ HTTP_LINK_REGEX = re.compile(r'`.+?<http
 
 # Used so that docutils doesn't write errors to stdout/stderr.
 # We're collecting and reporting these via AssertionErrors messages.
-class NoopWriter(object):
+class NoopWriter:
     def write(self, *args, **kwargs):
         pass
 
@@ -84,6 +89,9 @@ def _get_all_doc_examples():
     for root, _, filenames in os.walk(EXAMPLES_DIR):
         for filename in filenames:
             full_path = os.path.join(root, filename)
+            if filename.startswith('.'):
+                # Ignore hidden files as it starts with "."
+                continue
             if not filename.endswith('.rst'):
                 other_doc_examples.append(full_path)
                 continue
@@ -113,10 +121,7 @@ def command_validator():
     return CommandValidator(driver)
 
 
-@pytest.mark.parametrize(
-    "command, subcommand",
-    EXAMPLE_COMMAND_TESTS
-)
+@pytest.mark.parametrize("command, subcommand", EXAMPLE_COMMAND_TESTS)
 def test_examples(command, subcommand):
     t = _ExampleTests(methodName='noop_test')
     t.setUp()
@@ -128,10 +133,7 @@ def test_examples(command, subcommand):
 
 
 @pytest.mark.filterwarnings('ignore::DeprecationWarning')
-@pytest.mark.parametrize(
-    "example_file",
-    RST_DOC_EXAMPLES
-)
+@pytest.mark.parametrize("example_file", RST_DOC_EXAMPLES)
 def test_rst_doc_examples(command_validator, example_file):
     verify_has_only_ascii_chars(example_file)
     verify_is_valid_rst(example_file)
@@ -146,7 +148,8 @@ def verify_no_http_links(filename):
     if match:
         error_line_number = line_num(contents, match.span()[0])
         error_line = extract_error_line(
-            contents, match.span()[0], match.span()[1])
+            contents, match.span()[0], match.span()[1]
+        )
         marker_idx = error_line.find('http://') - 1
         marker_line = (" " * marker_idx) + '^'
         raise AssertionError(
@@ -165,13 +168,14 @@ def verify_has_only_ascii_chars(filename
             # message.
             offset = e.start
             spread = 20
-            bad_text = bytes_content[offset-spread:e.start+spread]
+            bad_text = bytes_content[offset - spread : e.start + spread]
             underlined = ' ' * spread + '^'
             error_text = '\n'.join([bad_text, underlined])
             line_number = bytes_content[:offset].count(b'\n') + 1
             raise AssertionError(
                 "Non ascii characters found in the examples file %s, line %s:"
-                "\n\n%s\n" % (filename, line_number, error_text))
+                "\n\n%s\n" % (filename, line_number, error_text)
+            )
 
 
 def verify_is_valid_rst(filename):
@@ -186,7 +190,8 @@ def parse_rst(filename):
     parser = docutils.parsers.rst.Parser()
     components = (docutils.parsers.rst.Parser,)
     settings = docutils.frontend.OptionParser(
-        components=components).get_default_values()
+        components=components
+    ).get_default_values()
     document = docutils.utils.new_document('<cli-example>', settings=settings)
     errors = []
 
@@ -206,7 +211,7 @@ def parse_rst(filename):
 def _make_error_msg(filename, errors):
     with open(filename) as f:
         lines = f.readlines()
-    relative_name = filename[len(EXAMPLES_DIR) + 1:]
+    relative_name = filename[len(EXAMPLES_DIR) + 1 :]
     failure_message = [
         'The file "%s" contains invalid RST: ' % relative_name,
         '',
@@ -241,17 +246,18 @@ def find_all_cli_commands(filename):
     return visitor.cli_commands
 
 
-class CommandValidator(object):
+class CommandValidator:
     def __init__(self, driver):
         self.driver = driver
         help_command = self.driver.create_help_command()
         self._service_command_table = help_command.command_table
         self._global_arg_table = help_command.arg_table
         self._main_parser = MainArgParser(
-            self._service_command_table, driver.session.user_agent(),
+            self._service_command_table,
+            driver.session.user_agent(),
             'Some description',
             self._global_arg_table,
-            prog="aws"
+            prog="aws",
         )
 
     def validate_cli_command(self, command, filename):
@@ -272,19 +278,20 @@ class CommandValidator(object):
             )
         # Strip off the 'aws ' part and break it out into a list.
         parsed_args, remaining = self._parse_next_command(
-            filename, command, command_parts, self._main_parser)
+            filename, command, command_parts, self._main_parser
+        )
         # We know the service is good.  Parse the operation.
         cmd = self._service_command_table[parsed_args.command]
         cmd_table = cmd.create_help_command().command_table
-        service_parser = ServiceArgParser(operations_table=cmd_table,
-                                          service_name=parsed_args.command)
+        service_parser = ServiceArgParser(
+            operations_table=cmd_table, service_name=parsed_args.command
+        )
         self._parse_next_command(filename, command, remaining, service_parser)
 
     def _parse_next_command(self, filename, original_cmd, args_list, parser):
         # Strip off the 'aws ' part and break it out into a list.
         errors = []
-        parser._print_message = lambda message, file: errors.append(
-            message)
+        parser._print_message = lambda message, file: errors.append(message)
         try:
             parsed_args, remaining = parser.parse_known_args(args_list)
             return parsed_args, remaining
@@ -313,10 +320,7 @@ class CollectCLICommands(docutils.nodes.
         pass
 
 
-@pytest.mark.parametrize(
-    "example_file",
-    RST_DOC_EXAMPLES + OTHER_DOC_EXAMPLES
-)
+@pytest.mark.parametrize("example_file", RST_DOC_EXAMPLES + OTHER_DOC_EXAMPLES)
 def test_example_file_name(example_file):
     filename = example_file.split(os.sep)[-1]
     _assert_file_is_rst_or_txt(example_file)
diff -pruN 2.23.6-1/tests/functional/docs/test_help_output.py 2.31.35-1/tests/functional/docs/test_help_output.py
--- 2.23.6-1/tests/functional/docs/test_help_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/docs/test_help_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,15 +21,75 @@ at the man output, we look one step befo
 (it's easier to verify).
 
 """
+
 import os
 
-from awscli.testutils import BaseAWSHelpOutputTest
-from awscli.testutils import FileCreator
-from awscli.testutils import mock
-from tests import CLIRunner
-from awscli.compat import StringIO
+import pytest
 
 from awscli.alias import AliasLoader
+from awscli.compat import StringIO
+from awscli.testutils import (
+    BaseAWSHelpOutputTest,
+    CapturedRenderer,
+    FileCreator,
+    mock,
+)
+from tests import CLIRunner
+
+COMMAND_ARGS_TEST_DATA = [
+    {
+        'command_args': ["ec2", "create-launch-template-version", "help"],
+        'expected_url_suffix': "/reference/ec2/create-launch-template-version.html",
+    },
+    {
+        'command_args': ["help"],
+        'expected_url_suffix': "/index.html",
+    },
+    {
+        'command_args': ["s3", "help"],
+        'expected_url_suffix': "/reference/s3/index.html",
+    },
+]
+
+
+def create_cases():
+    for test_data in COMMAND_ARGS_TEST_DATA:
+        yield pytest.param(test_data, id="-".join(test_data['command_args']))
+
+
+def runner(config_file=None):
+    runner = CLIRunner()
+
+    # Add the PATH to the environment variables so that that posix help
+    # renderers can find either the groff or mandoc executables required to
+    # render the help pages for posix environments
+    if "PATH" in os.environ:
+        runner.env["PATH"] = os.environ["PATH"]
+
+    if config_file is not None:
+        runner.env['AWS_CONFIG_FILE'] = config_file
+
+    return runner
+
+
+@pytest.fixture
+def runner_url():
+    file_creator = FileCreator()
+    return runner(
+        file_creator.create_file(
+            'config', '[default]\n' 'cli_help_output = url\n'
+        )
+    )
+
+
+@pytest.fixture
+def runner_browser():
+    file_creator = FileCreator()
+    return runner(
+        file_creator.create_file(
+            'config', '[default]\n' 'cli_help_output = browser\n'
+        )
+    )
 
 
 class TestHelpOutput(BaseAWSHelpOutputTest):
@@ -40,7 +100,8 @@ class TestHelpOutput(BaseAWSHelpOutputTe
         self.assert_contains('***\naws\n***')
         self.assert_contains(
             'The AWS Command Line Interface is a unified tool '
-            'to manage your AWS services.')
+            'to manage your AWS services.'
+        )
         self.assert_contains('Use *aws help topics* to view')
         # Verify we see the docs for top level params, so pick
         # a few representative types of params.
@@ -115,19 +176,17 @@ class TestHelpOutput(BaseAWSHelpOutputTe
         self.assert_text_order(
             '-------\nGeneral\n-------',
             '--\nS3\n--',
-            starting_from='Available Topics'
+            starting_from='Available Topics',
         )
         # Make sure that the topic elements elements show up as well.
-        self.assert_contains(
-            '* return-codes: Describes'
-        )
+        self.assert_contains('* return-codes: Describes')
         # Make sure the topic elements are underneath the categories as well
         # and they get added to each category they fall beneath
         self.assert_text_order(
             '-------\nGeneral\n-------',
             '* return-codes: Describes',
             '--\nS3\n--',
-            starting_from='-------\nGeneral\n-------'
+            starting_from='-------\nGeneral\n-------',
         )
 
     def test_topic_help_command(self):
@@ -158,20 +217,28 @@ class TestHelpOutput(BaseAWSHelpOutputTe
         self.assert_text_order(
             '--image-id <value>',
             '[--key-name <value>]',
-            '[--security-groups <value>]', starting_from='Synopsis')
+            '[--security-groups <value>]',
+            starting_from='Synopsis',
+        )
 
     def test_service_operation_order(self):
         self.driver.main(['ec2', 'help'])
         self.assert_text_order(
             'activate-license',
             'allocate-address',
-            'assign-private-ip-addresses', starting_from='Available Commands')
+            'assign-private-ip-addresses',
+            starting_from='Available Commands',
+        )
 
     def test_top_level_args_order(self):
         self.driver.main(['help'])
         self.assert_text_order(
-            'autoscaling\n', 'cloudformation\n', 'elb\n', 'swf\n',
-            starting_from='Available Services')
+            'autoscaling\n',
+            'cloudformation\n',
+            'elb\n',
+            'swf\n',
+            starting_from='Available Services',
+        )
 
     def test_examples_in_operation_help(self):
         self.driver.main(['ec2', 'run-instances', 'help'])
@@ -212,7 +279,9 @@ class TestRemoveDeprecatedCommands(BaseA
         self.assertEqual(cr, 252)
         # We should see an error message complaining about
         # an invalid choice because the operation has been removed.
-        self.assertIn('argument operation: Invalid choice', stderr.getvalue())
+        self.assertIn(
+            'argument operation: Found invalid choice', stderr.getvalue()
+        )
 
     def test_ses_deprecated_commands(self):
         self.driver.main(['ses', 'help'])
@@ -221,27 +290,28 @@ class TestRemoveDeprecatedCommands(BaseA
         self.assert_not_contains('verify-email-address')
 
         self.assert_command_does_not_exist(
-            'ses', 'list-verified-email-addresses')
-        self.assert_command_does_not_exist(
-            'ses', 'delete-verified-email-address')
+            'ses', 'list-verified-email-addresses'
+        )
         self.assert_command_does_not_exist(
-            'ses', 'verify-email-address')
+            'ses', 'delete-verified-email-address'
+        )
+        self.assert_command_does_not_exist('ses', 'verify-email-address')
 
     def test_ec2_import_export(self):
         self.driver.main(['ec2', 'help'])
         self.assert_not_contains('import-instance')
         self.assert_not_contains('import-volume')
-        self.assert_command_does_not_exist(
-            'ec2', 'import-instance')
-        self.assert_command_does_not_exist(
-            'ec2', 'import-volume')
+        self.assert_command_does_not_exist('ec2', 'import-instance')
+        self.assert_command_does_not_exist('ec2', 'import-volume')
 
     def test_boolean_param_documented(self):
-        self.driver.main(['autoscaling',
-                          'terminate-instance-in-auto-scaling-group', 'help'])
+        self.driver.main(
+            ['autoscaling', 'terminate-instance-in-auto-scaling-group', 'help']
+        )
         self.assert_contains(
-            ('``--should-decrement-desired-capacity`` | '
-             '``--no-should-decrement-desired-capacity`` (boolean)'))
+            '``--should-decrement-desired-capacity`` | '
+            '``--no-should-decrement-desired-capacity`` (boolean)'
+        )
 
     def test_streaming_output_arg(self):
         self.driver.main(['s3api', 'get-object', 'help'])
@@ -348,6 +418,7 @@ class TestParamRename(BaseAWSHelpOutputT
         self.assert_not_contains('no-no-reboot')
         self.assert_contains('--reboot')
 
+
 class TestCustomCommandDocsFromFile(BaseAWSHelpOutputTest):
     def test_description_from_rst_file(self):
         # The description for the configure command
@@ -359,30 +430,6 @@ class TestCustomCommandDocsFromFile(Base
         self.assert_contains('metadata_service_num_attempts')
         self.assert_contains('aws_access_key_id')
 
-class TestEnumDocsArentDuplicated(BaseAWSHelpOutputTest):
-    def test_enum_docs_arent_duplicated(self):
-        # Test for: https://github.com/aws/aws-cli/issues/609
-        # What's happening is if you have a list param that has
-        # an enum, we document it as:
-        # a|b|c|d   a|b|c|d
-        # Except we show all of the possible enum params twice.
-        # Each enum param should only occur once.  The ideal documentation
-        # should be:
-        #
-        # string1 string2
-        #
-        # Where each value is one of:
-        #     value1
-        #     value2
-        self.driver.main(['cloudformation', 'list-stacks', 'help'])
-        # "CREATE_IN_PROGRESS" is a enum value, and should only
-        # appear once in the help output.
-        contents = self.renderer.rendered_contents
-        self.assertTrue(contents.count("CREATE_IN_PROGRESS") == 1,
-                        ("Enum param was only suppose to be appear once in "
-                         "rendered doc output, appeared: %s" %
-                         contents.count("CREATE_IN_PROGRESS")))
-
 
 class TestParametersCanBeHidden(BaseAWSHelpOutputTest):
     def mark_as_undocumented(self, argument_table, **kwargs):
@@ -391,8 +438,9 @@ class TestParametersCanBeHidden(BaseAWSH
     def test_hidden_params_are_not_documented(self):
         # We're going to demonstrate hiding a parameter.
         # --device
-        self.driver.session.register('building-argument-table',
-                                     self.mark_as_undocumented)
+        self.driver.session.register(
+            'building-argument-table', self.mark_as_undocumented
+        )
         self.driver.main(['kinesis', 'get-shard-iterator', 'help'])
         self.assert_not_contains('--starting-sequence-number')
 
@@ -402,11 +450,14 @@ class TestCanDocumentAsRequired(BaseAWSH
         # This param is already marked as required, but to be
         # explicit this is repeated here to make it more clear.
         def doc_as_required(argument_table, **kwargs):
-            arg = argument_table['volume-arns']
-        self.driver.session.register('building-argument-table',
-                                     doc_as_required)
-        self.driver.main(['storagegateway', 'describe-cached-iscsi-volumes',
-                          'help'])
+            arg = argument_table['volume-arns']  # noqa: F841
+
+        self.driver.session.register(
+            'building-argument-table', doc_as_required
+        )
+        self.driver.main(
+            ['storagegateway', 'describe-cached-iscsi-volumes', 'help']
+        )
         self.assert_not_contains('[--volume-arns <value>]')
 
 
@@ -433,7 +484,8 @@ class TestRoute53CreateHostedZone(BaseAW
         self.driver.main(['route53', 'create-hosted-zone', 'help'])
         # Ensure that the proper casing is used for this command's docs.
         self.assert_contains(
-            'do **not** include ``PrivateZone`` in this input structure')
+            'do **not** include ``PrivateZone`` in this input structure'
+        )
 
 
 class TestIotData(BaseAWSHelpOutputTest):
@@ -442,30 +494,32 @@ class TestIotData(BaseAWSHelpOutputTest)
         # Ensure the note is in help page.
         self.assert_contains(
             'The default endpoints (intended for testing purposes only) can be found at '
-            'https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints')
+            'https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints'
+        )
 
     def test_operation_help_command_has_note(self):
         self.driver.main(['iot-data', 'get-thing-shadow', 'help'])
         # Ensure the note is in help page.
         self.assert_contains(
             'The default endpoints (intended for testing purposes only) can be found at '
-            'https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints')
+            'https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints'
+        )
 
 
 class TestAliases(BaseAWSHelpOutputTest):
     def setUp(self):
-        super(TestAliases, self).setUp()
+        super().setUp()
         self.files = FileCreator()
         self.alias_file = self.files.create_file('alias', '[toplevel]\n')
         self.driver.alias_loader = AliasLoader(self.alias_file)
 
     def tearDown(self):
-        super(TestAliases, self).tearDown()
+        super().tearDown()
         self.files.remove_all()
 
     def add_alias(self, alias_name, alias_value):
         with open(self.alias_file, 'a+') as f:
-            f.write('%s = %s\n' % (alias_name, alias_value))
+            f.write(f'{alias_name} = {alias_value}\n')
 
     def test_alias_not_in_main_help(self):
         self.add_alias('my-alias', 'ec2 describe-regions')
@@ -480,10 +534,30 @@ class TestStreamingOutputHelp(BaseAWSHel
         self.assert_contains('<outfile>')
 
 
+class TestUrlOutputHelp:
+    @pytest.mark.parametrize(
+        "test_case",
+        create_cases(),
+    )
+    @mock.patch('awscli.help.get_renderer')
+    def test_docs_prints_url(self, mock_get_renderer, test_case, runner_url):
+        renderer = CapturedRenderer()
+        mock_get_renderer.return_value = renderer
+
+        runner_url.run(test_case['command_args'])
+        assert (
+            "https://awscli.amazonaws.com/v2/documentation/api/"
+            in renderer.rendered_contents
+        )
+        assert test_case['expected_url_suffix'] in renderer.rendered_contents
+
+
 # Use this test class for "help" cases that require the default renderer
 # (i.e. renderer from get_render()) instead of a mocked version.
 class TestHelpOutputDefaultRenderer:
-    def test_line_lengths_do_not_break_create_launch_template_version_cmd(self):
+    def test_line_lengths_do_not_break_create_launch_template_version_cmd(
+        self,
+    ):
         runner = CLIRunner()
         # Add the PATH to the environment variables so that that posix help
         # renderers can find either the groff or mandoc executables required to
@@ -493,3 +567,17 @@ class TestHelpOutputDefaultRenderer:
 
         result = runner.run(["ec2", "create-launch-template-version", "help"])
         assert 'exceeds the line-length-limit' not in result.stderr
+
+
+@pytest.mark.skip("Cross-test interaction with CLIRunner mocking os.environ")
+class TestHelpOutputBrowserRenderer:
+    @pytest.mark.parametrize("test_case", create_cases())
+    @mock.patch("awscli.help.webbrowser.open_new_tab")
+    def test_docs_opens_browser(
+        self, mock_open_new_tab, test_case, runner_browser
+    ):
+        runner_result = runner_browser.run(test_case['command_args'])
+        assert (
+            "Opening help file in the default browser." in runner_result.stdout
+        )
+        mock_open_new_tab.assert_called_once()
diff -pruN 2.23.6-1/tests/functional/dsql/test_generate_db_auth_token.py 2.31.35-1/tests/functional/dsql/test_generate_db_auth_token.py
--- 2.23.6-1/tests/functional/dsql/test_generate_db_auth_token.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/dsql/test_generate_db_auth_token.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,13 @@
 # language governing permissions and limitations under the License.
 import datetime
 
+from botocore.compat import parse_qs, urlparse
 from dateutil.tz import tzutc
-from botocore.compat import urlparse, parse_qs
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class BaseTestGenerateDBConnectAuthToken(BaseAWSCommandParamsTest):
-
     hostname = 'test.dsql.us-east-1.on.aws'
 
     def _urlparse(self, url):
@@ -43,7 +42,6 @@ class BaseTestGenerateDBConnectAuthToken
 
 
 class TestGenerateDBConnectAuthToken(BaseTestGenerateDBConnectAuthToken):
-
     prefix = 'dsql generate-db-connect-auth-token'
 
     def test_generate_simple_token(self):
@@ -56,17 +54,20 @@ class TestGenerateDBConnectAuthToken(Bas
             stdout, _, _ = self.run_cmd(command, expected_rc=0)
 
         # Expected hashes are always the same as session variables come from the BaseAwsCommandParamsTest class
-        expected = ('test.dsql.us-east-1.on.aws/?'
-                    'Action=DbConnect&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential='
-                    'access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request&'
-                    'X-Amz-Date=20241107T173933Z&X-Amz-Expires=900&'
-                    'X-Amz-SignedHeaders=host&X-Amz-Signature='
-                    'e319d85380261f643d78a558f76257f05aacea758a6ccd42a2510e2ae0854a47')
+        expected = (
+            'test.dsql.us-east-1.on.aws/?'
+            'Action=DbConnect&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential='
+            'access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request&'
+            'X-Amz-Date=20241107T173933Z&X-Amz-Expires=900&'
+            'X-Amz-SignedHeaders=host&X-Amz-Signature='
+            'e319d85380261f643d78a558f76257f05aacea758a6ccd42a2510e2ae0854a47'
+        )
 
         # A scheme needs to be appended to the beginning or urlsplit may fail
         # on certain systems.
         self.assert_url_equal(
-            'https://' + stdout.strip('\n'), 'https://' + expected)
+            'https://' + stdout.strip('\n'), 'https://' + expected
+        )
 
     def test_missing_hostname_raises_exception(self):
         region = "us-east-1"
@@ -83,7 +84,6 @@ class TestGenerateDBConnectAuthToken(Bas
 
 
 class TestGenerateDBConnectAdminAuthToken(BaseTestGenerateDBConnectAuthToken):
-
     prefix = 'dsql generate-db-connect-admin-auth-token'
 
     def test_generate_simple_token(self):
@@ -96,13 +96,16 @@ class TestGenerateDBConnectAdminAuthToke
             stdout, _, _ = self.run_cmd(command, expected_rc=0)
 
         # Expected hashes are always the same as session variables come from the BaseAwsCommandParamsTest class
-        expected = ('test.dsql.us-east-1.on.aws/?'
-                    'Action=DbConnectAdmin&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential='
-                    'access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request'
-                    '&X-Amz-Date=20241107T173933Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&'
-                    'X-Amz-Signature=a08adc4c84a490014ce374b90c98ba9ed015b77b451c0d9f9fb3f8ca8c6f9c36')
+        expected = (
+            'test.dsql.us-east-1.on.aws/?'
+            'Action=DbConnectAdmin&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential='
+            'access_key%2F20241107%2Fus-east-1%2Fdsql%2Faws4_request'
+            '&X-Amz-Date=20241107T173933Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&'
+            'X-Amz-Signature=a08adc4c84a490014ce374b90c98ba9ed015b77b451c0d9f9fb3f8ca8c6f9c36'
+        )
 
         # A scheme needs to be appended to the beginning or urlsplit may fail
         # on certain systems.
         self.assert_url_equal(
-            'https://' + stdout.strip('\n'), 'https://' + expected)
+            'https://' + stdout.strip('\n'), 'https://' + expected
+        )
diff -pruN 2.23.6-1/tests/functional/dynamodb/test_pagination.py 2.31.35-1/tests/functional/dynamodb/test_pagination.py
--- 2.23.6-1/tests/functional/dynamodb/test_pagination.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/dynamodb/test_pagination.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,13 +23,13 @@ class TestPagination(BaseAWSCommandParam
             "Count": 1,
             "ScannedCount": 1,
             "ConsumedCapacity": 1,
-            "LastEvaluatedKey": {"Key": {"B":"MjEzNw=="}}
+            "LastEvaluatedKey": {"Key": {"B": "MjEzNw=="}},
         }
         self.second_response = {
             "Items": [],
             "Count": 0,
             "ScannedCount": 1,
-            "ConsumedCapacity": 1
+            "ConsumedCapacity": 1,
         }
 
     def test_scan_pagination_binary_last_evaluated_key(self):
diff -pruN 2.23.6-1/tests/functional/ec2/test_associate_address.py 2.31.35-1/tests/functional/ec2/test_associate_address.py
--- 2.23.6-1/tests/functional/ec2/test_associate_address.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_associate_address.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestAssociateAddress(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 associate-address'
 
     def test_basic(self):
@@ -31,10 +30,12 @@ class TestAssociateAddress(BaseAWSComman
         cmdline += ' --public-ip 192.168.0.0'
         cmdline += ' --allocation-id eipalloc-12345678'
         cmdline += ' --allow-reassociation'
-        result = {'InstanceId': 'i-12345678',
-                  'PublicIp': '192.168.0.0',
-                  'AllowReassociation': True,
-                  'AllocationId': 'eipalloc-12345678'}
+        result = {
+            'InstanceId': 'i-12345678',
+            'PublicIp': '192.168.0.0',
+            'AllowReassociation': True,
+            'AllocationId': 'eipalloc-12345678',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/ec2/test_attach_internet_gateway.py 2.31.35-1/tests/functional/ec2/test_attach_internet_gateway.py
--- 2.23.6-1/tests/functional/ec2/test_attach_internet_gateway.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_attach_internet_gateway.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,15 +15,13 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestAttachInternetGateway(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 attach-internet-gateway'
 
     def test_both_params(self):
         cmdline = self.prefix
         cmdline += ' --vpc-id vpc-12345678'
         cmdline += ' --internet-gateway-id igw-12345678'
-        result = {'VpcId': 'vpc-12345678',
-                  'InternetGatewayId': 'igw-12345678'}
+        result = {'VpcId': 'vpc-12345678', 'InternetGatewayId': 'igw-12345678'}
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/ec2/test_bundle_instance.py 2.31.35-1/tests/functional/ec2/test_bundle_instance.py
--- 2.23.6-1/tests/functional/ec2/test_bundle_instance.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_bundle_instance.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,18 +15,18 @@ import base64
 import datetime
 
 import awscli.customizations.ec2.bundleinstance
-from awscli.testutils import mock, BaseAWSCommandParamsTest
 from awscli.compat import StringIO
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestBundleInstance(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 bundle-instance'
 
     POLICY = (
         b'{"expiration": "2013-08-10T00:00:00.000000Z",'
         b'"conditions": [{"bucket": "mybucket"},{"acl": '
-        b'"ec2-bundle-read"},["starts-with", "$key", "foobar"]]}')
+        b'"ec2-bundle-read"},["starts-with", "$key", "foobar"]]}'
+    )
     POLICY_SIGNATURE = 'ynxybUMv9YuGbPl7HZ8AFJW/2t0='
 
     def setUp(self):
@@ -37,8 +37,9 @@ class TestBundleInstance(BaseAWSCommandP
         # don't what the policy or its signature to change each time
         # we run the test.
         self.datetime_patcher = mock.patch.object(
-            awscli.customizations.ec2.bundleinstance.datetime, 'datetime',
-            mock.Mock(wraps=datetime.datetime)
+            awscli.customizations.ec2.bundleinstance.datetime,
+            'datetime',
+            mock.Mock(wraps=datetime.datetime),
         )
         mocked_datetime = self.datetime_patcher.start()
         mocked_datetime.utcnow.return_value = datetime.datetime(2013, 8, 9)
@@ -52,43 +53,53 @@ class TestBundleInstance(BaseAWSCommandP
         args += ' --owner-sak wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
         args += ' --bucket mybucket --prefix foobar'
         args_list = (self.prefix + args).split()
-        result =  {'InstanceId': 'i-12345678',
-                   'Storage': {
-                       'S3': {
-                           'Bucket': 'mybucket',
-                           'Prefix': 'foobar',
-                           'AWSAccessKeyId': 'AKIAIOSFODNN7EXAMPLE',
-                           'UploadPolicy': self.POLICY,
-                           'UploadPolicySignature': self.POLICY_SIGNATURE}
-                       }
-                   }
+        result = {
+            'InstanceId': 'i-12345678',
+            'Storage': {
+                'S3': {
+                    'Bucket': 'mybucket',
+                    'Prefix': 'foobar',
+                    'AWSAccessKeyId': 'AKIAIOSFODNN7EXAMPLE',
+                    'UploadPolicy': self.POLICY,
+                    'UploadPolicySignature': self.POLICY_SIGNATURE,
+                }
+            },
+        }
         self.assert_params_for_cmd(args_list, result)
 
-
     def test_policy_provided(self):
         policy = '{"notarealpolicy":true}'
-        base64policy = base64.encodebytes(policy.encode('latin-1')).strip().decode('utf-8')
+        base64policy = (
+            base64.encodebytes(policy.encode('latin-1'))
+            .strip()
+            .decode('utf-8')
+        )
         policy_signature = 'a5SmoLOxoM0MHpOdC25nE7KIafg='
         args = ' --instance-id i-12345678 --owner-akid AKIAIOSFODNN7EXAMPLE'
         args += ' --owner-sak wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
         args += ' --bucket mybucket --prefix foobar --policy %s' % base64policy
         args_list = (self.prefix + args).split()
-        result =  {'InstanceId': 'i-12345678',
-                   'Storage': {
-                       'S3': {
-                           'Bucket': 'mybucket',
-                           'Prefix': 'foobar',
-                           'AWSAccessKeyId': 'AKIAIOSFODNN7EXAMPLE',
-                           'UploadPolicy': b'{"notarealpolicy":true}',
-                           'UploadPolicySignature': policy_signature}
-                       }
-                   }
+        result = {
+            'InstanceId': 'i-12345678',
+            'Storage': {
+                'S3': {
+                    'Bucket': 'mybucket',
+                    'Prefix': 'foobar',
+                    'AWSAccessKeyId': 'AKIAIOSFODNN7EXAMPLE',
+                    'UploadPolicy': b'{"notarealpolicy":true}',
+                    'UploadPolicySignature': policy_signature,
+                }
+            },
+        }
         self.assert_params_for_cmd(args_list, result)
 
     def test_both(self):
         captured = StringIO()
         json = """{"S3":{"Bucket":"foobar","Prefix":"fiebaz"}}"""
-        args = ' --instance-id i-12345678 --owner-akid blah --owner-sak blah --storage %s' % json
+        args = (
+            ' --instance-id i-12345678 --owner-akid blah --owner-sak blah --storage %s'
+            % json
+        )
         args_list = (self.prefix + args).split()
         _, stderr, _ = self.assert_params_for_cmd(args_list, expected_rc=252)
         self.assertIn('Mixing the --storage option', stderr)
diff -pruN 2.23.6-1/tests/functional/ec2/test_create_image.py 2.31.35-1/tests/functional/ec2/test_create_image.py
--- 2.23.6-1/tests/functional/ec2/test_create_image.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_create_image.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDescribeInstances(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 create-image'
 
     def test_renamed_reboot_arg(self):
@@ -24,6 +23,10 @@ class TestDescribeInstances(BaseAWSComma
         # --reboot is a customized renamed arg.  Verifying it still
         # gets mapped as 'NoReboot': 'false'.
         cmdline += ' --reboot'
-        result = {'InstanceId': 'i-12345678', 'Description': 'foo',
-                  'Name': 'bar', 'NoReboot': False}
+        result = {
+            'InstanceId': 'i-12345678',
+            'Description': 'foo',
+            'Name': 'bar',
+            'NoReboot': False,
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/ec2/test_create_network_acl_entry.py 2.31.35-1/tests/functional/ec2/test_create_network_acl_entry.py
--- 2.23.6-1/tests/functional/ec2/test_create_network_acl_entry.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_create_network_acl_entry.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestCreateNetworkACLEntry(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 create-network-acl-entry'
 
     def test_tcp(self):
@@ -27,13 +26,15 @@ class TestCreateNetworkACLEntry(BaseAWSC
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '6',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '6',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_udp(self):
@@ -45,13 +46,15 @@ class TestCreateNetworkACLEntry(BaseAWSC
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '17',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '17',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_icmp(self):
@@ -63,13 +66,15 @@ class TestCreateNetworkACLEntry(BaseAWSC
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '1',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '1',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_all(self):
@@ -81,13 +86,15 @@ class TestCreateNetworkACLEntry(BaseAWSC
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '-1',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '-1',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_number(self):
@@ -99,12 +106,13 @@ class TestCreateNetworkACLEntry(BaseAWSC
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '99',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '99',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
-
diff -pruN 2.23.6-1/tests/functional/ec2/test_create_tags.py 2.31.35-1/tests/functional/ec2/test_create_tags.py
--- 2.23.6-1/tests/functional/ec2/test_create_tags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_create_tags.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,10 @@
 # language governing permissions and limitations under the License.
 import sys
 
-from awscli.testutils import unittest
-from awscli.testutils import BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, unittest
 
 
 class TestCreateTags(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 create-tags'
 
     def test_create_tag_normal(self):
@@ -26,5 +24,6 @@ class TestCreateTags(BaseAWSCommandParam
         cmdline += ' --resources i-12345678 --tags Key=Name,Value=bar'
         result = {
             'Resources': ['i-12345678'],
-            'Tags': [{'Key': 'Name', 'Value': 'bar'}]}
+            'Tags': [{'Key': 'Name', 'Value': 'bar'}],
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/ec2/test_describe_instance_attribute.py 2.31.35-1/tests/functional/ec2/test_describe_instance_attribute.py
--- 2.23.6-1/tests/functional/ec2/test_describe_instance_attribute.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_describe_instance_attribute.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import unittest
 
+from awscli.testutils import BaseAWSCommandParamsTest
+
 
 class TestDescribeInstanceAttribute(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 describe-instance-attribute'
 
     def test_both_params(self):
         cmdline = self.prefix
         cmdline += ' --instance-id i-12345678'
         cmdline += ' --attribute blockDeviceMapping'
-        result = {'InstanceId': 'i-12345678',
-                  'Attribute': 'blockDeviceMapping'}
+        result = {
+            'InstanceId': 'i-12345678',
+            'Attribute': 'blockDeviceMapping',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/ec2/test_describe_instances.py 2.31.35-1/tests/functional/ec2/test_describe_instances.py
--- 2.23.6-1/tests/functional/ec2/test_describe_instances.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_describe_instances.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDescribeInstances(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 describe-instances'
 
     def test_no_params(self):
@@ -47,8 +46,7 @@ class TestDescribeInstances(BaseAWSComma
         cmdline = self.prefix + args
         result = {
             'Filters': [
-                {'Name': 'group-name',
-                 'Values': ['foobar']},
+                {'Name': 'group-name', 'Values': ['foobar']},
             ],
         }
         self.assert_params_for_cmd(cmdline, result)
@@ -58,8 +56,7 @@ class TestDescribeInstances(BaseAWSComma
         cmdline = self.prefix + args
         result = {
             'Filters': [
-                {'Name': 'group-name',
-                 'Values': ['foobar']},
+                {'Name': 'group-name', 'Values': ['foobar']},
             ],
         }
         self.assert_params_for_cmd(cmdline, result)
@@ -69,37 +66,38 @@ class TestDescribeInstances(BaseAWSComma
         cmdline = self.prefix + args
         result = {
             'Filters': [
-                {'Name': 'group-name',
-                 'Values': ['foobar', 'fiebaz']},
+                {'Name': 'group-name', 'Values': ['foobar', 'fiebaz']},
             ],
         }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_multiple_filters(self):
-        args = (' --filters Name=group-name,Values=foobar '
-                'Name=instance-id,Values=i-12345')
+        args = (
+            ' --filters Name=group-name,Values=foobar '
+            'Name=instance-id,Values=i-12345'
+        )
         cmdline = self.prefix + args
         result = {
             'Filters': [
-                {'Name': 'group-name',
-                 'Values': ['foobar']},
-                {'Name': 'instance-id',
-                 'Values': ['i-12345']},
+                {'Name': 'group-name', 'Values': ['foobar']},
+                {'Name': 'instance-id', 'Values': ['i-12345']},
             ],
         }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_multiple_filters_alternate(self):
         cmdlist = 'ec2 describe-instances'.split()
-        cmdlist.extend(['--filters',
-                        'Name = group-name, Values= foobar',
-                        'Name=instance-id,Values=i-12345'])
+        cmdlist.extend(
+            [
+                '--filters',
+                'Name = group-name, Values= foobar',
+                'Name=instance-id,Values=i-12345',
+            ]
+        )
         result = {
             'Filters': [
-                {'Name': 'group-name',
-                 'Values': ['foobar']},
-                {'Name': 'instance-id',
-                 'Values': ['i-12345']},
+                {'Name': 'group-name', 'Values': ['foobar']},
+                {'Name': 'instance-id', 'Values': ['i-12345']},
             ],
         }
         self.assert_params_for_cmd(cmdlist, result)
diff -pruN 2.23.6-1/tests/functional/ec2/test_describe_snapshots.py 2.31.35-1/tests/functional/ec2/test_describe_snapshots.py
--- 2.23.6-1/tests/functional/ec2/test_describe_snapshots.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_describe_snapshots.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDescribeSnapshots(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 describe-snapshots'
 
     def test_max_results_set_by_default(self):
@@ -29,9 +28,9 @@ class TestDescribeSnapshots(BaseAWSComma
 
     def test_max_results_not_set_with_filter(self):
         command = self.prefix + ' --filters Name=snapshot-id,Values=snap-snap'
-        params = {'Filters': [{
-            'Name': 'snapshot-id', 'Values': ['snap-snap']
-        }]}
+        params = {
+            'Filters': [{'Name': 'snapshot-id', 'Values': ['snap-snap']}]
+        }
         self.assert_params_for_cmd(command, params)
 
     def test_max_results_not_overwritten(self):
diff -pruN 2.23.6-1/tests/functional/ec2/test_describe_volumes.py 2.31.35-1/tests/functional/ec2/test_describe_volumes.py
--- 2.23.6-1/tests/functional/ec2/test_describe_volumes.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_describe_volumes.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,10 @@
 import json
 import shutil
 
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class TestDescribeVolumes(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 describe-volumes'
 
     def setUp(self):
@@ -55,7 +53,8 @@ class TestDescribeVolumes(BaseAWSCommand
     def test_max_results_with_cli_input_json(self):
         params = {'VolumeIds': ['vol-12345']}
         file_path = self.file_creator.create_file(
-            'params.json', json.dumps(params))
+            'params.json', json.dumps(params)
+        )
 
         command = self.prefix + ' --cli-input-json file://%s' % file_path
         self.assert_params_for_cmd(command, params)
diff -pruN 2.23.6-1/tests/functional/ec2/test_get_password_data.py 2.31.35-1/tests/functional/ec2/test_get_password_data.py
--- 2.23.6-1/tests/functional/ec2/test_get_password_data.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_get_password_data.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,27 +11,30 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import os
 
+from awscli.testutils import BaseAWSCommandParamsTest
 
-PASSWORD_DATA = ("GWDnuoj/7pbMQkg125E8oGMUVCI+r98sGbFFl8SX+dEYxMZzz+byYwwjvyg8i"
-                 "SGKaLuLTIWatWopVu5cMWDKH65U4YFL2g3LqyajBrCFnuSE1piTeS/rPQpoSv"
-                 "BN5FGj9HWqNrglWAJgh9OZNSGgpEojBenL/0rwSpDWL7f/f52M5doYA6q+v0y"
-                 "gEoi1Wq6hcmrBfyA4seW1RlKgnUru5Y9oc1hFHi53E3b1EkjGqCsCemVUwumB"
-                 "j8uwCLJRaMcqrCxK1smtAsiSqk0Jk9jpN2vcQgnMPypEdmEEXyWHwq55fjy6c"
-                 "h+sqYcwumIL5QcFW2JQ5+XBEoFhC66gOsAXow==")
+PASSWORD_DATA = (
+    "GWDnuoj/7pbMQkg125E8oGMUVCI+r98sGbFFl8SX+dEYxMZzz+byYwwjvyg8i"
+    "SGKaLuLTIWatWopVu5cMWDKH65U4YFL2g3LqyajBrCFnuSE1piTeS/rPQpoSv"
+    "BN5FGj9HWqNrglWAJgh9OZNSGgpEojBenL/0rwSpDWL7f/f52M5doYA6q+v0y"
+    "gEoi1Wq6hcmrBfyA4seW1RlKgnUru5Y9oc1hFHi53E3b1EkjGqCsCemVUwumB"
+    "j8uwCLJRaMcqrCxK1smtAsiSqk0Jk9jpN2vcQgnMPypEdmEEXyWHwq55fjy6c"
+    "h+sqYcwumIL5QcFW2JQ5+XBEoFhC66gOsAXow=="
+)
 
 
 class TestGetPasswordData(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 get-password-data'
 
     def setUp(self):
         super(TestGetPasswordData, self).setUp()
-        self.parsed_response = {'InstanceId': 'i-12345678',
-                                'Timestamp': '2013-07-27T18:29:23.000Z',
-                                'PasswordData': PASSWORD_DATA}
+        self.parsed_response = {
+            'InstanceId': 'i-12345678',
+            'Timestamp': '2013-07-27T18:29:23.000Z',
+            'PasswordData': PASSWORD_DATA,
+        }
 
     def test_no_priv_launch_key(self):
         args = ' --instance-id i-12345678'
@@ -45,15 +48,16 @@ class TestGetPasswordData(BaseAWSCommand
     def test_nonexistent_priv_launch_key(self):
         args = ' --instance-id i-12345678 --priv-launch-key foo.pem'
         cmdline = self.prefix + args
-        error_msg = self.assert_params_for_cmd(
-            cmdline, expected_rc=255)[1]
-        self.assertIn('priv-launch-key should be a path to '
-                      'the local SSH private key file used '
-                      'to launch the instance.\n', error_msg)
+        error_msg = self.assert_params_for_cmd(cmdline, expected_rc=255)[1]
+        self.assertIn(
+            'priv-launch-key should be a path to '
+            'the local SSH private key file used '
+            'to launch the instance.\n',
+            error_msg,
+        )
 
     def test_priv_launch_key(self):
-        key_path = os.path.join(os.path.dirname(__file__),
-                                'testcli.pem')
+        key_path = os.path.join(os.path.dirname(__file__), 'testcli.pem')
         args = ' --instance-id i-12345678 --priv-launch-key %s' % key_path
         cmdline = self.prefix + args
         result = {'InstanceId': 'i-12345678'}
diff -pruN 2.23.6-1/tests/functional/ec2/test_modify_image_attribute.py 2.31.35-1/tests/functional/ec2/test_modify_image_attribute.py
--- 2.23.6-1/tests/functional/ec2/test_modify_image_attribute.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_modify_image_attribute.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestModifyInstanceAttribute(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 modify-image-attribute'
 
     def test_one(self):
@@ -23,22 +22,26 @@ class TestModifyInstanceAttribute(BaseAW
         cmdline += ' --image-id ami-d00dbeef'
         cmdline += ' --operation-type add'
         cmdline += ' --user-ids 0123456789012'
-        result = {'ImageId': 'ami-d00dbeef',
-                  'OperationType': 'add',
-                  'UserIds': ['0123456789012']}
+        result = {
+            'ImageId': 'ami-d00dbeef',
+            'OperationType': 'add',
+            'UserIds': ['0123456789012'],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_two(self):
         cmdline = self.prefix
         cmdline += ' --image-id ami-d00dbeef'
-        cmdline += (' --launch-permission {"Add":[{"UserId":"123456789012"}],'
-                    '"Remove":[{"Group":"all"}]}')
+        cmdline += (
+            ' --launch-permission {"Add":[{"UserId":"123456789012"}],'
+            '"Remove":[{"Group":"all"}]}'
+        )
         result = {
             'ImageId': 'ami-d00dbeef',
             'LaunchPermission': {
                 'Add': [{'UserId': '123456789012'}],
                 'Remove': [{'Group': 'all'}],
-            }
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -47,8 +50,9 @@ class TestModifyInstanceAttribute(BaseAW
         cmdline += ' --image-id ami-d00dbeef'
         cmdline += ' --launch-permission THISISNOTJSON'
         # The arg name should be in the error message.
-        self.assert_params_for_cmd(cmdline, expected_rc=252,
-                                   stderr_contains='launch-permission')
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=252, stderr_contains='launch-permission'
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/functional/ec2/test_modify_instance_attribute.py 2.31.35-1/tests/functional/ec2/test_modify_instance_attribute.py
--- 2.23.6-1/tests/functional/ec2/test_modify_instance_attribute.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_modify_instance_attribute.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,20 +15,21 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestModifyInstanceAttribute(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 modify-instance-attribute '
 
     def setUp(self):
         super(TestModifyInstanceAttribute, self).setUp()
         self.expected_result = {
             'InstanceId': 'i-1234',
-            'InstanceInitiatedShutdownBehavior': {'Value': 'terminate'}
+            'InstanceInitiatedShutdownBehavior': {'Value': 'terminate'},
         }
 
     def test_json_version(self):
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
-        cmdline += '--instance-initiated-shutdown-behavior {"Value":"terminate"}'
+        cmdline += (
+            '--instance-initiated-shutdown-behavior {"Value":"terminate"}'
+        )
         self.assert_params_for_cmd(cmdline, self.expected_result)
 
     def test_shorthand_version(self):
@@ -51,16 +52,14 @@ class TestModifyInstanceAttribute(BaseAW
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--ebs-optimized Value=true'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': True}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': True}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_boolean_value_is_top_level_false(self):
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--ebs-optimized Value=false'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': False}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': False}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_boolean_value_in_top_level_true_json(self):
@@ -69,32 +68,28 @@ class TestModifyInstanceAttribute(BaseAW
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--ebs-optimized {"Value":true}'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': True}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': True}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_boolean_value_is_top_level_false_json(self):
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--ebs-optimized {"Value":false}'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': False}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': False}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_boolean_param_top_level_true_no_value(self):
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--ebs-optimized'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': True}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': True}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_boolean_param_top_level_false_no_value(self):
         cmdline = self.prefix
         cmdline += '--instance-id i-1234 '
         cmdline += '--no-ebs-optimized'
-        result = {'InstanceId': 'i-1234',
-                  'EbsOptimized': {'Value': False}}
+        result = {'InstanceId': 'i-1234', 'EbsOptimized': {'Value': False}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_mix_value_non_value_boolean_param(self):
@@ -103,8 +98,9 @@ class TestModifyInstanceAttribute(BaseAW
         # Can't mix non-value + value version of the arg.
         cmdline += '--no-ebs-optimized '
         cmdline += '--ebs-optimized Value=true'
-        self.assert_params_for_cmd(cmdline, expected_rc=252,
-                                    stderr_contains='Cannot specify both')
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=252, stderr_contains='Cannot specify both'
+        )
 
     def test_mix_non_value_bools_not_allowed(self):
         cmdline = self.prefix
@@ -112,8 +108,9 @@ class TestModifyInstanceAttribute(BaseAW
         # Can't mix non-value + value version of the arg.
         cmdline += '--no-ebs-optimized '
         cmdline += '--ebs-optimized '
-        self.assert_params_for_cmd(cmdline, expected_rc=252,
-                                    stderr_contains='Cannot specify both')
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=252, stderr_contains='Cannot specify both'
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/functional/ec2/test_replace_network_acl_entry.py 2.31.35-1/tests/functional/ec2/test_replace_network_acl_entry.py
--- 2.23.6-1/tests/functional/ec2/test_replace_network_acl_entry.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_replace_network_acl_entry.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestReplaceNetworkACLEntry(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 replace-network-acl-entry'
 
     def test_tcp(self):
@@ -27,13 +26,15 @@ class TestReplaceNetworkACLEntry(BaseAWS
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '6',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '6',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_udp(self):
@@ -45,13 +46,15 @@ class TestReplaceNetworkACLEntry(BaseAWS
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '17',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '17',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_icmp(self):
@@ -63,13 +66,15 @@ class TestReplaceNetworkACLEntry(BaseAWS
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '1',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '1',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_all(self):
@@ -81,13 +86,15 @@ class TestReplaceNetworkACLEntry(BaseAWS
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '-1',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '-1',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_number(self):
@@ -99,12 +106,13 @@ class TestReplaceNetworkACLEntry(BaseAWS
         cmdline += ' --ingress'
         cmdline += ' --port-range From=22,To=22'
         cmdline += ' --cidr-block 0.0.0.0/0'
-        result = {'NetworkAclId': 'acl-12345678',
-                  'RuleNumber': 100,
-                  'Protocol': '99',
-                  'RuleAction': 'allow',
-                  'Egress': False,
-                  'CidrBlock': '0.0.0.0/0',
-                  'PortRange': {'From': 22, 'To': 22}}
+        result = {
+            'NetworkAclId': 'acl-12345678',
+            'RuleNumber': 100,
+            'Protocol': '99',
+            'RuleAction': 'allow',
+            'Egress': False,
+            'CidrBlock': '0.0.0.0/0',
+            'PortRange': {'From': 22, 'To': 22},
+        }
         self.assert_params_for_cmd(cmdline, result)
-
diff -pruN 2.23.6-1/tests/functional/ec2/test_run_instances.py 2.31.35-1/tests/functional/ec2/test_run_instances.py
--- 2.23.6-1/tests/functional/ec2/test_run_instances.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_run_instances.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.compat import compat_open
-
-from awscli.testutils import temporary_file
-from awscli.testutils import BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, temporary_file
 
 
 class TestRunInstances(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 run-instances'
 
     def assert_run_instances_call(self, args, result):
@@ -26,47 +23,38 @@ class TestRunInstances(BaseAWSCommandPar
         else:
             args_list = self.prefix.split() + args
         self.assert_params_for_cmd(
-            args_list, result, ignore_params=['ClientToken'])
+            args_list, result, ignore_params=['ClientToken']
+        )
 
     def test_no_count(self):
         args = ' --image-id ami-foobar'
-        result = {
-            'ImageId': 'ami-foobar',
-            'MaxCount': 1,
-            'MinCount': 1
-        }
+        result = {'ImageId': 'ami-foobar', 'MaxCount': 1, 'MinCount': 1}
         self.assert_run_instances_call(args, result)
 
     def test_count_scalar(self):
         args = ' --image-id ami-foobar --count 2'
-        result = {
-            'ImageId': 'ami-foobar',
-            'MaxCount': 2,
-            'MinCount': 2
-        }
+        result = {'ImageId': 'ami-foobar', 'MaxCount': 2, 'MinCount': 2}
         self.assert_run_instances_call(args, result)
 
     def test_user_data(self):
-        data = u'\u0039'
+        data = '\u0039'
         with temporary_file('r+') as tmp:
             with compat_open(tmp.name, 'w') as f:
                 f.write(data)
                 f.flush()
                 args = ' --image-id foo --user-data file://%s' % f.name
-                result = {'ImageId': 'foo',
-                          'MaxCount': 1,
-                          'MinCount': 1,
-                          # base64 encoded content of utf-8 encoding of data.
-                          'UserData': 'OQ=='}
+                result = {
+                    'ImageId': 'foo',
+                    'MaxCount': 1,
+                    'MinCount': 1,
+                    # base64 encoded content of utf-8 encoding of data.
+                    'UserData': 'OQ==',
+                }
             self.assert_run_instances_call(args, result)
 
     def test_count_range(self):
         args = ' --image-id ami-foobar --count 5:10'
-        result = {
-            'ImageId': 'ami-foobar',
-            'MaxCount': 10,
-            'MinCount': 5
-        }
+        result = {'ImageId': 'ami-foobar', 'MaxCount': 10, 'MinCount': 5}
         self.assert_run_instances_call(args, result)
 
     def test_count_in_json_only(self):
@@ -89,15 +77,15 @@ class TestRunInstances(BaseAWSCommandPar
         # (note the space between ``'`` and ``[``)
         args_list.append('--block-device-mapping')
         args_list.append(
-            ' [{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":20}}]')
+            ' [{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":20}}]'
+        )
         result = {
             'BlockDeviceMappings': [
-                {'DeviceName': '/dev/sda1',
-                 'Ebs': {'VolumeSize': 20}},
+                {'DeviceName': '/dev/sda1', 'Ebs': {'VolumeSize': 20}},
             ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args_list, result)
 
@@ -108,11 +96,16 @@ class TestRunInstances(BaseAWSCommandPar
         result = {
             'ImageId': 'ami-foobar',
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'PrivateIpAddresses': [
-                     {'Primary': False, 'PrivateIpAddress': '10.0.2.106'}]}],
+                {
+                    'DeviceIndex': 0,
+                    'PrivateIpAddresses': [
+                        {'Primary': False, 'PrivateIpAddress': '10.0.2.106'}
+                    ],
+                }
+            ],
             'MaxCount': 1,
-            'MinCount': 1}
+            'MinCount': 1,
+        }
         self.assert_run_instances_call(args, result)
 
     def test_secondary_ip_address_with_subnet(self):
@@ -121,12 +114,17 @@ class TestRunInstances(BaseAWSCommandPar
         result = {
             'ImageId': 'ami-foobar',
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'SubnetId': 'subnet-12345678',
-                 'PrivateIpAddresses': [
-                     {'Primary': False, 'PrivateIpAddress': '10.0.2.106'}]}],
+                {
+                    'DeviceIndex': 0,
+                    'SubnetId': 'subnet-12345678',
+                    'PrivateIpAddresses': [
+                        {'Primary': False, 'PrivateIpAddress': '10.0.2.106'}
+                    ],
+                }
+            ],
             'MaxCount': 1,
-            'MinCount': 1}
+            'MinCount': 1,
+        }
         self.assert_run_instances_call(args, result)
 
     def test_secondary_ip_addresses(self):
@@ -135,23 +133,29 @@ class TestRunInstances(BaseAWSCommandPar
         result = {
             'ImageId': 'ami-foobar',
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'PrivateIpAddresses': [
-                     {'Primary': False, 'PrivateIpAddress': u'10.0.2.106'},
-                     {'Primary': False, 'PrivateIpAddress': u'10.0.2.107'}]}],
+                {
+                    'DeviceIndex': 0,
+                    'PrivateIpAddresses': [
+                        {'Primary': False, 'PrivateIpAddress': '10.0.2.106'},
+                        {'Primary': False, 'PrivateIpAddress': '10.0.2.107'},
+                    ],
+                }
+            ],
             'MaxCount': 1,
-            'MinCount': 1}
+            'MinCount': 1,
+        }
         self.assert_run_instances_call(args, result)
 
     def test_secondary_ip_address_count(self):
         args = ' --image-id ami-foobar --count 1 '
         args += '--secondary-private-ip-address-count 4'
         result = {
-            'NetworkInterfaces': [{'DeviceIndex': 0,
-                                   'SecondaryPrivateIpAddressCount': 4}],
+            'NetworkInterfaces': [
+                {'DeviceIndex': 0, 'SecondaryPrivateIpAddressCount': 4}
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -159,12 +163,16 @@ class TestRunInstances(BaseAWSCommandPar
         args = ' --image-id ami-foobar --count 1 --subnet subnet-12345678 '
         args += '--secondary-private-ip-address-count 4'
         result = {
-            'NetworkInterfaces': [{'DeviceIndex': 0,
-                                   'SubnetId': 'subnet-12345678',
-                                   'SecondaryPrivateIpAddressCount': 4}],
+            'NetworkInterfaces': [
+                {
+                    'DeviceIndex': 0,
+                    'SubnetId': 'subnet-12345678',
+                    'SecondaryPrivateIpAddressCount': 4,
+                }
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -173,13 +181,15 @@ class TestRunInstances(BaseAWSCommandPar
         args += '--associate-public-ip-address'
         result = {
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'AssociatePublicIpAddress': True,
-                 'SubnetId': 'subnet-12345678'},
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'SubnetId': 'subnet-12345678',
+                },
             ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -188,13 +198,15 @@ class TestRunInstances(BaseAWSCommandPar
         args += '--associate-public-ip-address --subnet-id subnet-12345678'
         result = {
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'AssociatePublicIpAddress': True,
-                 'SubnetId': 'subnet-12345678'}
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'SubnetId': 'subnet-12345678',
+                }
             ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -203,11 +215,16 @@ class TestRunInstances(BaseAWSCommandPar
         args += '--no-associate-public-ip-address'
         result = {
             'ImageId': 'ami-foobar',
-            'NetworkInterfaces': [{'AssociatePublicIpAddress': False,
-                                   'DeviceIndex': 0,
-                                   'SubnetId': 'subnet-12345678'}],
+            'NetworkInterfaces': [
+                {
+                    'AssociatePublicIpAddress': False,
+                    'DeviceIndex': 0,
+                    'SubnetId': 'subnet-12345678',
+                }
+            ],
             'MaxCount': 1,
-            'MinCount': 1}
+            'MinCount': 1,
+        }
         self.assert_run_instances_call(args, result)
 
     def test_subnet_alone(self):
@@ -216,7 +233,7 @@ class TestRunInstances(BaseAWSCommandPar
             'SubnetId': 'subnet-12345678',
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -226,14 +243,16 @@ class TestRunInstances(BaseAWSCommandPar
         args += '--associate-public-ip-address --subnet-id subnet-12345678'
         result = {
             'NetworkInterfaces': [
-                {'DeviceIndex': 0,
-                 'AssociatePublicIpAddress': True,
-                 'SubnetId': 'subnet-12345678',
-                 'Groups': ['sg-12345678']}
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'SubnetId': 'subnet-12345678',
+                    'Groups': ['sg-12345678'],
+                }
             ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -244,7 +263,7 @@ class TestRunInstances(BaseAWSCommandPar
             'SecurityGroupIds': ['sg-12345678'],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -253,17 +272,19 @@ class TestRunInstances(BaseAWSCommandPar
         args += '--private-ip-address 10.0.0.200 '
         args += '--associate-public-ip-address --subnet-id subnet-12345678'
         result = {
-            'NetworkInterfaces': [{
-                'DeviceIndex': 0,
-                'AssociatePublicIpAddress': True,
-                'SubnetId': 'subnet-12345678',
-                'PrivateIpAddresses': [
-                    {'PrivateIpAddress': '10.0.0.200',
-                     'Primary': True}],
-            }],
+            'NetworkInterfaces': [
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'SubnetId': 'subnet-12345678',
+                    'PrivateIpAddresses': [
+                        {'PrivateIpAddress': '10.0.0.200', 'Primary': True}
+                    ],
+                }
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -274,7 +295,7 @@ class TestRunInstances(BaseAWSCommandPar
             'PrivateIpAddress': '10.0.0.200',
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, result)
 
@@ -282,14 +303,16 @@ class TestRunInstances(BaseAWSCommandPar
         args = ' --associate-public-ip-address'
         args += ' --ipv6-address-count 5 --image-id ami-foobar --count 1'
         expected = {
-            'NetworkInterfaces': [{
-                'DeviceIndex': 0,
-                'AssociatePublicIpAddress': True,
-                'Ipv6AddressCount': 5
-            }],
+            'NetworkInterfaces': [
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'Ipv6AddressCount': 5,
+                }
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, expected)
 
@@ -297,14 +320,16 @@ class TestRunInstances(BaseAWSCommandPar
         args = ' --associate-public-ip-address --count 1'
         args += ' --ipv6-addresses Ipv6Address=::1 --image-id ami-foobar '
         expected = {
-            'NetworkInterfaces': [{
-                'DeviceIndex': 0,
-                'AssociatePublicIpAddress': True,
-                'Ipv6Addresses': [{'Ipv6Address': '::1'}]
-            }],
+            'NetworkInterfaces': [
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'Ipv6Addresses': [{'Ipv6Address': '::1'}],
+                }
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
         self.assert_run_instances_call(args, expected)
 
@@ -312,13 +337,15 @@ class TestRunInstances(BaseAWSCommandPar
         args = ' --associate-public-ip-address'
         args += ' --enable-primary-ipv6 --image-id ami-foobar --count 1'
         expected = {
-            'NetworkInterfaces': [{
-                'DeviceIndex': 0,
-                'AssociatePublicIpAddress': True,
-                'PrimaryIpv6': True
-            }],
+            'NetworkInterfaces': [
+                {
+                    'DeviceIndex': 0,
+                    'AssociatePublicIpAddress': True,
+                    'PrimaryIpv6': True,
+                }
+            ],
             'ImageId': 'ami-foobar',
             'MaxCount': 1,
-            'MinCount': 1
+            'MinCount': 1,
         }
-        self.assert_run_instances_call(args, expected)
\ No newline at end of file
+        self.assert_run_instances_call(args, expected)
diff -pruN 2.23.6-1/tests/functional/ec2/test_security_group_operations.py 2.31.35-1/tests/functional/ec2/test_security_group_operations.py
--- 2.23.6-1/tests/functional/ec2/test_security_group_operations.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/test_security_group_operations.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,116 +15,190 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestAuthorizeSecurityGroupIngress(BaseAWSCommandParamsTest):
-
     prefix = 'ec2 authorize-security-group-ingress '
 
     def test_simple_cidr(self):
         args = self.prefix + (
-            '--group-name foobar --protocol tcp --port 22-25 --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                  'IpPermissions': [{'FromPort': 22, 'IpProtocol': 'tcp',
-                                      'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
-                                      'ToPort': 25}]}
+            '--group-name foobar --protocol tcp --port 22-25 --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'FromPort': 22,
+                    'IpProtocol': 'tcp',
+                    'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
+                    'ToPort': 25,
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_all_port(self):
         args = self.prefix + (
-            '--group-name foobar --protocol tcp --port all --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                   'IpPermissions': [{'FromPort': -1, 'IpProtocol': 'tcp',
-                                       'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
-                                       'ToPort': -1}]}
+            '--group-name foobar --protocol tcp --port all --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'FromPort': -1,
+                    'IpProtocol': 'tcp',
+                    'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
+                    'ToPort': -1,
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_icmp_echo_request(self):
         # This corresponds to a from port of 8 and a to port of -1, i.e
         # --port 8--1.
         args = self.prefix + (
-            '--group-name foobar --protocol tcp --port 8--1 --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                  'IpPermissions': [{'FromPort': 8, 'IpProtocol': 'tcp',
-                                      'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
-                                      'ToPort': -1}]}
+            '--group-name foobar --protocol tcp --port 8--1 --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'FromPort': 8,
+                    'IpProtocol': 'tcp',
+                    'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
+                    'ToPort': -1,
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_all_protocol(self):
         args = self.prefix + (
-            '--group-name foobar --protocol all --port all --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                   # This is correct, the expected value is the *string*
-                   # '-1'.  This is because the IpProtocol is modeled
-                   # as a string.
-                   'IpPermissions': [{'FromPort': -1, 'IpProtocol': '-1',
-                                       'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
-                                       'ToPort': -1}]}
+            '--group-name foobar --protocol all --port all --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            # This is correct, the expected value is the *string*
+            # '-1'.  This is because the IpProtocol is modeled
+            # as a string.
+            'IpPermissions': [
+                {
+                    'FromPort': -1,
+                    'IpProtocol': '-1',
+                    'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
+                    'ToPort': -1,
+                }
+            ],
+        }
 
         self.assert_params_for_cmd(args, result)
 
     def test_numeric_protocol(self):
         args = self.prefix + (
-            '--group-name foobar --protocol 200 --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                   'IpPermissions': [{'IpProtocol': '200', 'IpRanges':
-                                       [{'CidrIp': '0.0.0.0/0'}]}]}
+            '--group-name foobar --protocol 200 --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {'IpProtocol': '200', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_negative_one_protocol(self):
         args = self.prefix + (
-            '--group-name foobar --protocol -1 --cidr 0.0.0.0/0')
-        result = {'GroupName': 'foobar',
-                   'IpPermissions': [{'IpProtocol': '-1', 'IpRanges':
-                                       [{'CidrIp': '0.0.0.0/0'}]}]}
+            '--group-name foobar --protocol -1 --cidr 0.0.0.0/0'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {'IpProtocol': '-1', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_classic_group(self):
         args = self.prefix + (
             '--group-name foobar --protocol udp '
-            '--source-group fiebaz --group-owner 11111111')
-        result = {'GroupName': 'foobar',
-                   'IpPermissions': [{'IpProtocol': 'udp', 'UserIdGroupPairs':
-                                       [{'GroupName': 'fiebaz', 'UserId':
-                                         '11111111'}]}]}
+            '--source-group fiebaz --group-owner 11111111'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'IpProtocol': 'udp',
+                    'UserIdGroupPairs': [
+                        {'GroupName': 'fiebaz', 'UserId': '11111111'}
+                    ],
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_vpc_group(self):
         args = self.prefix + (
-            '--group-name foobar --protocol icmp --source-group sg-12345678')
-        result = {'GroupName': 'foobar',
-                  'IpPermissions': [{'IpProtocol': 'icmp', 'UserIdGroupPairs':
-                                      [{'GroupId': 'sg-12345678'}]}]}
+            '--group-name foobar --protocol icmp --source-group sg-12345678'
+        )
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'IpProtocol': 'icmp',
+                    'UserIdGroupPairs': [{'GroupId': 'sg-12345678'}],
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_IpPermissions(self):
         json = (
             '[{"FromPort":8000,"ToPort":9000,'
-            '"IpProtocol":"tcp","IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]')
+            '"IpProtocol":"tcp","IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]'
+        )
         args = self.prefix + '--group-name foobar --ip-permissions %s' % json
-        result = {'GroupName': 'foobar',
-                   'IpPermissions': [{'FromPort': 8000, 'ToPort': 9000,
-                                      'IpProtocol': 'tcp', 'IpRanges':
-                                      [{'CidrIp': '192.168.100.0/24'}]}]}
+        result = {
+            'GroupName': 'foobar',
+            'IpPermissions': [
+                {
+                    'FromPort': 8000,
+                    'ToPort': 9000,
+                    'IpProtocol': 'tcp',
+                    'IpRanges': [{'CidrIp': '192.168.100.0/24'}],
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_IpPermissions_with_group_id(self):
         json = (
             '[{"FromPort":8000,"ToPort":9000,"IpProtocol":"tcp",'
-            '"IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]')
-        args = self.prefix + '--group-id sg-12345678 --ip-permissions %s' % json
-        result = {'GroupId': 'sg-12345678',
-                  'IpPermissions': [{'FromPort': 8000, 'ToPort': 9000,
-                                     'IpProtocol': 'tcp', 'IpRanges':
-                                     [{'CidrIp': '192.168.100.0/24'}]}]}
+            '"IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]'
+        )
+        args = (
+            self.prefix + '--group-id sg-12345678 --ip-permissions %s' % json
+        )
+        result = {
+            'GroupId': 'sg-12345678',
+            'IpPermissions': [
+                {
+                    'FromPort': 8000,
+                    'ToPort': 9000,
+                    'IpProtocol': 'tcp',
+                    'IpRanges': [{'CidrIp': '192.168.100.0/24'}],
+                }
+            ],
+        }
         self.assert_params_for_cmd(args, result)
 
     def test_both(self):
         json = (
             '[{"FromPort":8000,"ToPort":9000,"IpProtocol":"tcp",'
-            '"IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]')
-        args = self.prefix + '--group-name foobar --port 100 --ip-permissions %s' % json
+            '"IpRanges":[{"CidrIp":"192.168.100.0/24"}]}]'
+        )
+        args = (
+            self.prefix
+            + '--group-name foobar --port 100 --ip-permissions %s' % json
+        )
         self.assert_params_for_cmd(args, expected_rc=252)
 
 
-
 class TestRevokeSecurityGroupIngress(TestAuthorizeSecurityGroupIngress):
-
     prefix = 'ec2 revoke-security-group-ingress '
diff -pruN 2.23.6-1/tests/functional/ec2/testcli.pem 2.31.35-1/tests/functional/ec2/testcli.pem
--- 2.23.6-1/tests/functional/ec2/testcli.pem	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2/testcli.pem	2025-11-12 19:17:29.000000000 +0000
@@ -20,4 +20,4 @@ u/A0F5L1h0PNZ8MpQIj/7/TZmiYgBuCz9USy4GeU
 iTp+6qrfIV578LouwtHOhNOzwcyJCoWooSOcfh6CmKvFAQKBgH+6tVQi9Tj4Ig15HueURVVeiPVn
 L9MPiR4unUsPz6OevoNsRaDkj7XDFBuMiFPGoXoyL9SedSSFw+oRxcPi4YMMvsZNC0yxOnj2Qe8z
 V1Xgvb+rlN6NEIlPcscxE2F8gu1zIan/lXLMEXMr9hAAaGqS/JSALzt6XcoHwzEGnTrH
------END RSA PRIVATE KEY-----
\ No newline at end of file
+-----END RSA PRIVATE KEY-----
diff -pruN 2.23.6-1/tests/functional/ec2instanceconnect/__init__.py 2.31.35-1/tests/functional/ec2instanceconnect/__init__.py
--- 2.23.6-1/tests/functional/ec2instanceconnect/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2instanceconnect/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the "license" file accompanying this file. This file is
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/tests/functional/ec2instanceconnect/test_opentunnel.py 2.31.35-1/tests/functional/ec2instanceconnect/test_opentunnel.py
--- 2.23.6-1/tests/functional/ec2instanceconnect/test_opentunnel.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2instanceconnect/test_opentunnel.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 import concurrent.futures
 import contextlib
 import ctypes
+import datetime
 import os
 import queue
 import socket
@@ -20,24 +21,33 @@ import struct
 import sys
 import threading
 import time
-import urllib.parse
 import traceback
-from typing import Optional, Callable, Union
+import urllib.parse
+from typing import Callable, Optional, Union
 from unittest import mock
-import datetime
 
-from dateutil.tz import tzutc
 import awscrt
 import pytest
-from awscrt.http import HttpRequest, HttpProxyOptions
+from awscrt.http import HttpProxyOptions, HttpRequest
 from awscrt.io import ClientBootstrap, SocketOptions, TlsConnectionOptions
-from awscrt.websocket import OnConnectionSetupData, OnConnectionShutdownData, OnIncomingFramePayloadData, \
-    OnIncomingFrameCompleteData, IncomingFrame, Opcode, OnSendFrameCompleteData, OnIncomingFrameBeginData
-from awscli.customizations.ec2instanceconnect.websocket import WebsocketManager
+from awscrt.websocket import (
+    IncomingFrame,
+    OnConnectionSetupData,
+    OnConnectionShutdownData,
+    OnIncomingFrameBeginData,
+    OnIncomingFrameCompleteData,
+    OnIncomingFramePayloadData,
+    OnSendFrameCompleteData,
+    Opcode,
+)
+from dateutil.tz import tzutc
 
 from awscli.compat import is_windows
-from awscli.customizations.ec2instanceconnect.websocket import BaseWebsocketIO
-from tests import SessionStubber, AWSRequest, CLIRunner, HTTPResponse
+from awscli.customizations.ec2instanceconnect.websocket import (
+    BaseWebsocketIO,
+    WebsocketManager,
+)
+from tests import AWSRequest, CLIRunner, HTTPResponse, SessionStubber
 
 STDIN_QUEUE = queue.Queue()
 STDOUT_QUEUE = queue.Queue()
@@ -45,7 +55,6 @@ SHUTDOWN_SENTINEL = object()
 
 
 class StubStdinStdoutIO(BaseWebsocketIO):
-
     def has_data_to_read(self):
         return not STDIN_QUEUE.empty()
 
@@ -68,7 +77,6 @@ def assert_stdout_empty():
 
 
 class MockCRTWebsocket(threading.Thread):
-
     def __init__(self):
         super().__init__()
         self.url = None
@@ -87,22 +95,30 @@ class MockCRTWebsocket(threading.Thread)
         self._shutdown_exception = None
 
     def connect(
-            self,
-            *,
-            host: str,
-            port: Optional[int] = None,
-            handshake_request: HttpRequest,
-            bootstrap: Optional[ClientBootstrap] = None,
-            socket_options: Optional[SocketOptions] = None,
-            tls_connection_options: Optional[TlsConnectionOptions] = None,
-            proxy_options: Optional[HttpProxyOptions] = None,
-            manage_read_window: bool = False,
-            initial_read_window: Optional[int] = None,
-            on_connection_setup: Callable[[OnConnectionSetupData], None],
-            on_connection_shutdown: Optional[Callable[[OnConnectionShutdownData], None]] = None,
-            on_incoming_frame_begin: Optional[Callable[[OnIncomingFrameBeginData], None]] = None,
-            on_incoming_frame_payload: Optional[Callable[[OnIncomingFramePayloadData], None]] = None,
-            on_incoming_frame_complete: Optional[Callable[[OnIncomingFrameCompleteData], None]] = None,
+        self,
+        *,
+        host: str,
+        port: Optional[int] = None,
+        handshake_request: HttpRequest,
+        bootstrap: Optional[ClientBootstrap] = None,
+        socket_options: Optional[SocketOptions] = None,
+        tls_connection_options: Optional[TlsConnectionOptions] = None,
+        proxy_options: Optional[HttpProxyOptions] = None,
+        manage_read_window: bool = False,
+        initial_read_window: Optional[int] = None,
+        on_connection_setup: Callable[[OnConnectionSetupData], None],
+        on_connection_shutdown: Optional[
+            Callable[[OnConnectionShutdownData], None]
+        ] = None,
+        on_incoming_frame_begin: Optional[
+            Callable[[OnIncomingFrameBeginData], None]
+        ] = None,
+        on_incoming_frame_payload: Optional[
+            Callable[[OnIncomingFramePayloadData], None]
+        ] = None,
+        on_incoming_frame_complete: Optional[
+            Callable[[OnIncomingFrameCompleteData], None]
+        ] = None,
     ):
         self.url = host + handshake_request.path
 
@@ -128,12 +144,14 @@ class MockCRTWebsocket(threading.Thread)
 
     # Appends data to the client_input_queue, which will represent the client sending data to the websocket
     def send_frame_from_client(
-            self,
-            opcode: Opcode,
-            payload: Optional[Union[str, bytes, bytearray, memoryview]] = None,
-            *,
-            fin: bool = True,
-            on_complete: Optional[Callable[[OnSendFrameCompleteData], None]] = None,
+        self,
+        opcode: Opcode,
+        payload: Optional[Union[str, bytes, bytearray, memoryview]] = None,
+        *,
+        fin: bool = True,
+        on_complete: Optional[
+            Callable[[OnSendFrameCompleteData], None]
+        ] = None,
     ):
         if opcode == Opcode.BINARY:
             data = OnSendFrameCompleteData()
@@ -141,24 +159,33 @@ class MockCRTWebsocket(threading.Thread)
             if len(payload) > 0:
                 self.client_input_queue.put(payload)
 
-    def add_shutdown_from_server(self, shutdown_reason=None, shutdown_exception=None):
+    def add_shutdown_from_server(
+        self, shutdown_reason=None, shutdown_exception=None
+    ):
         self._server_input_queue.put(SHUTDOWN_SENTINEL)
         self._shutdown_reason = shutdown_reason
         self._shutdown_exception = shutdown_exception
 
     def run(self):
         while not self._shutdown_event.is_set():
-
             if not self._server_input_queue.empty():
                 data_in_bytes = self._server_input_queue.get()
                 if data_in_bytes == SHUTDOWN_SENTINEL:
                     self._shutdown_event.set()
                 else:
-                    incoming_frame = IncomingFrame(opcode=Opcode.BINARY, payload_length=len(data_in_bytes), fin=True)
-                    payload_data = OnIncomingFramePayloadData(frame=incoming_frame, data=data_in_bytes)
+                    incoming_frame = IncomingFrame(
+                        opcode=Opcode.BINARY,
+                        payload_length=len(data_in_bytes),
+                        fin=True,
+                    )
+                    payload_data = OnIncomingFramePayloadData(
+                        frame=incoming_frame, data=data_in_bytes
+                    )
                     self._on_incoming_frame_payload(payload_data)
 
-                    complete_data = OnIncomingFrameCompleteData(frame=incoming_frame)
+                    complete_data = OnIncomingFrameCompleteData(
+                        frame=incoming_frame
+                    )
                     self._on_incoming_frame_complete(complete_data)
 
         if self._shutdown_reason:
@@ -166,14 +193,22 @@ class MockCRTWebsocket(threading.Thread)
             packed_shutdown_code = struct.pack(">H", shutdown_code)
             encoded_shutdown_reason = self._shutdown_reason.encode()
             data_in_bytes = packed_shutdown_code + encoded_shutdown_reason
-            incoming_frame = IncomingFrame(opcode=Opcode.CLOSE, payload_length=len(data_in_bytes), fin=True)
-            payload_data = OnIncomingFramePayloadData(frame=incoming_frame, data=data_in_bytes)
+            incoming_frame = IncomingFrame(
+                opcode=Opcode.CLOSE,
+                payload_length=len(data_in_bytes),
+                fin=True,
+            )
+            payload_data = OnIncomingFramePayloadData(
+                frame=incoming_frame, data=data_in_bytes
+            )
             self._on_incoming_frame_payload(payload_data)
 
             complete_data = OnIncomingFrameCompleteData(frame=incoming_frame)
             self._on_incoming_frame_complete(complete_data)
 
-        self._on_connection_shutdown(OnConnectionShutdownData(exception=self._shutdown_exception))
+        self._on_connection_shutdown(
+            OnConnectionShutdownData(exception=self._shutdown_exception)
+        )
 
 
 @pytest.fixture
@@ -207,7 +242,7 @@ def io_patch():
     new_websocket_io = StubStdinStdoutIO
     return mock.patch(
         f"awscli.customizations.ec2instanceconnect.websocket.{io_to_patch}",
-        new=new_websocket_io
+        new=new_websocket_io,
     )
 
 
@@ -218,7 +253,9 @@ def mock_crt_websocket():
 
 @pytest.fixture
 def connect_patch(mock_crt_websocket):
-    return mock.patch("awscrt.websocket.connect", new=mock_crt_websocket.connect)
+    return mock.patch(
+        "awscrt.websocket.connect", new=mock_crt_websocket.connect
+    )
 
 
 @pytest.fixture
@@ -250,9 +287,13 @@ def request_params_for_describe_instance
 def dns_name():
     return "eice-123.ec2-instance-connect-endpoint.us-west-2.amazonaws.com"
 
+
 @pytest.fixture
 def fips_dns_name():
-    return "eice-123.fips.ec2-instance-connect-endpoint.us-west-2.amazonaws.com"
+    return (
+        "eice-123.fips.ec2-instance-connect-endpoint.us-west-2.amazonaws.com"
+    )
+
 
 @pytest.fixture
 def describe_eice_response(dns_name, fips_dns_name):
@@ -271,6 +312,7 @@ def describe_eice_response(dns_name, fip
     </DescribeInstanceConnectEndpointsResponse>
     """
 
+
 @pytest.fixture
 def describe_eice_response_without_fips_dns(dns_name, fips_dns_name):
     return f"""
@@ -287,6 +329,7 @@ def describe_eice_response_without_fips_
     </DescribeInstanceConnectEndpointsResponse>
     """
 
+
 @pytest.fixture
 def describe_eice_response_empty_fips_dns(dns_name, fips_dns_name):
     return f"""
@@ -304,9 +347,23 @@ def describe_eice_response_empty_fips_dn
     </DescribeInstanceConnectEndpointsResponse>
     """
 
+
 @pytest.fixture
 def request_params_for_describe_eice():
-    return {'Filters': [{'Name': 'state', 'Values': ['create-complete']}, {'Name': 'vpc-id', 'Values': ['vpc-123']}]}
+    return {
+        'Filters': [
+            {
+                'Name': 'state',
+                'Values': [
+                    'create-complete',
+                    'update-in-progress',
+                    'update-failed',
+                    'update-complete',
+                ],
+            },
+            {'Name': 'vpc-id', 'Values': ['vpc-123']},
+        ]
+    }
 
 
 @pytest.fixture
@@ -319,15 +376,19 @@ def datetime_utcnow_patch():
 
 @pytest.fixture
 def run_listener_cmd_in_thread_executor(
-        cli_runner, mock_crt_websocket, connect_patch, io_patch
-    ):
+    cli_runner, mock_crt_websocket, connect_patch, io_patch
+):
     stop_event = threading.Event()
-    with mock.patch.object(WebsocketManager, 'RUNNING', new_callable=mock.PropertyMock) as websocket_join:
+    with mock.patch.object(
+        WebsocketManager, 'RUNNING', new_callable=mock.PropertyMock
+    ) as websocket_join:
         websocket_join.return_value = stop_event
         with connect_patch, io_patch:
             with concurrent.futures.ThreadPoolExecutor() as executor:
+
                 def submit_run_command(cmdline):
                     return executor.submit(cli_runner.run, cmdline)
+
                 yield submit_run_command
                 stop_event.set()
 
@@ -342,11 +403,11 @@ def connect_to_listener(listener_future)
         time.sleep(0.2)
         try:
             return socket.create_connection(("localhost", 3333), timeout=5)
-        except (ConnectionError, OSError) as e:
+        except (ConnectionError, OSError):
             tracebacks += f'Traceback from attempt {attempts}:\n{traceback.format_exc()}\n'
             if attempts == max_attempts:
                 retry_connection = False
-        except Exception as e:
+        except Exception:
             tracebacks += f'Traceback from attempt {attempts}:\n{traceback.format_exc()}\n'
             retry_connection = False
     msg = (
@@ -381,28 +442,59 @@ def assert_url(dns_name, url):
 
 
 class TestOpenTunnel:
-
+    @pytest.mark.parametrize(
+        "endpoint_state",
+        [
+            "create-complete",
+            "update-in-progress",
+            "update-failed",
+            "update-complete",
+        ],
+    )
     def test_single_connection_mode(
-            self,
-            cli_runner,
-            mock_crt_websocket,
-            connect_patch,
-            io_patch,
-            describe_instance_response,
-            dns_name,
-            describe_eice_response,
-            request_params_for_describe_instance,
-            request_params_for_describe_eice,
-            datetime_utcnow_patch,
+        self,
+        cli_runner,
+        mock_crt_websocket,
+        connect_patch,
+        io_patch,
+        describe_instance_response,
+        dns_name,
+        fips_dns_name,
+        request_params_for_describe_instance,
+        request_params_for_describe_eice,
+        datetime_utcnow_patch,
+        endpoint_state,
     ):
         cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "false"
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--max-tunnel-duration", "1"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--max-tunnel-duration",
+            "1",
         ]
+
+        # Create endpoint response with the specified state
+        describe_eice_response_with_state = f"""
+        <DescribeInstanceConnectEndpointsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
+            <instanceConnectEndpointSet>
+                <item>
+                    <dnsName>{dns_name}</dnsName>
+                    <fipsDnsName>{fips_dns_name}</fipsDnsName>
+                    <instanceConnectEndpointId>eice-123</instanceConnectEndpointId>
+                    <state>{endpoint_state}</state>
+                    <subnetId>subnet-123</subnetId>
+                    <vpcId>vpc-123</vpcId>
+                </item>
+            </instanceConnectEndpointSet>
+        </DescribeInstanceConnectEndpointsResponse>
+        """
+
         cli_runner.add_response(HTTPResponse(body=describe_instance_response))
-        cli_runner.add_response(HTTPResponse(body=describe_eice_response))
+        cli_runner.add_response(
+            HTTPResponse(body=describe_eice_response_with_state)
+        )
 
         test_server_input = b"Test Server Output"
         mock_crt_websocket.add_output_from_server(test_server_input)
@@ -414,14 +506,16 @@ class TestOpenTunnel:
         assert 0 == result.rc
         assert pop_stdout_content() == test_server_input
         assert_stdout_empty()
-        # Order of the query params on the url mater because of sigv4
-        assert "eice-123.ec2-instance-connect-endpoint.us-west-2.amazonaws.com/openTunnel?" \
-               "instanceConnectEndpointId=eice-123&remotePort=22&privateIpAddress=10.0.0.0&" \
-               "maxTunnelDuration=1&X-Amz-Algorithm=AWS4-HMAC-SHA256&" \
-               "X-Amz-Credential=access_key%2F20200101%2Fus-west-2%2Fec2-instance-connect%2Faws4_request&" \
-               "X-Amz-Date=20200101T010101Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&" \
-               "X-Amz-Signature=3a56740422a5b9aebd22d860b7a30c729e459a6f71a83bc0de3a2b44b7353f28" == \
-               mock_crt_websocket.url
+        # Order of the query params on the url matter because of sigv4
+        assert (
+            "eice-123.ec2-instance-connect-endpoint.us-west-2.amazonaws.com/openTunnel?"
+            "instanceConnectEndpointId=eice-123&remotePort=22&privateIpAddress=10.0.0.0&"
+            "maxTunnelDuration=1&X-Amz-Algorithm=AWS4-HMAC-SHA256&"
+            "X-Amz-Credential=access_key%2F20200101%2Fus-west-2%2Fec2-instance-connect%2Faws4_request&"
+            "X-Amz-Date=20200101T010101Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&"
+            "X-Amz-Signature=3a56740422a5b9aebd22d860b7a30c729e459a6f71a83bc0de3a2b44b7353f28"
+            == mock_crt_websocket.url
+        )
         assert_url(dns_name, mock_crt_websocket.url)
         assert result.aws_requests == [
             AWSRequest(
@@ -433,23 +527,28 @@ class TestOpenTunnel:
                 service_name='ec2',
                 operation_name='DescribeInstanceConnectEndpoints',
                 params=request_params_for_describe_eice,
-            )
+            ),
         ]
 
     def test_single_connection_mode_with_no_describe_calls(
-            self,
-            cli_runner,
-            mock_crt_websocket,
-            connect_patch,
-            io_patch,
-            dns_name,
+        self,
+        cli_runner,
+        mock_crt_websocket,
+        connect_patch,
+        io_patch,
+        dns_name,
     ):
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--private-ip-address", "10.0.0.0",
-            "--instance-connect-endpoint-id", "eice-123",
-            "--instance-connect-endpoint-dns-name", dns_name,
-            "--max-tunnel-duration", "1"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--private-ip-address",
+            "10.0.0.0",
+            "--instance-connect-endpoint-id",
+            "eice-123",
+            "--instance-connect-endpoint-dns-name",
+            dns_name,
+            "--max-tunnel-duration",
+            "1",
         ]
 
         test_server_input = b"Test Server Output"
@@ -465,19 +564,24 @@ class TestOpenTunnel:
         assert_url(dns_name, mock_crt_websocket.url)
         assert result.aws_requests == []
 
-
     def test_multiple_connection_mode(
-            self,
-            run_listener_cmd_in_thread_executor,
-            mock_crt_websocket,
+        self,
+        run_listener_cmd_in_thread_executor,
+        mock_crt_websocket,
     ):
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--private-ip-address", "10.0.0.0",
-            "--instance-connect-endpoint-id", "eice-123",
-            "--instance-connect-endpoint-dns-name", "test",
-            "--local-port", "3333"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--private-ip-address",
+            "10.0.0.0",
+            "--instance-connect-endpoint-id",
+            "eice-123",
+            "--instance-connect-endpoint-dns-name",
+            "test",
+            "--local-port",
+            "3333",
         ]
         future = run_listener_cmd_in_thread_executor(cmdline)
         # Retry several times since it can take few ms to set up everything
@@ -492,25 +596,35 @@ class TestOpenTunnel:
             test_client_input = b"Test Client Input"
             # Writing to the TCP Conn should ensure a frame is sent with that data
             s.sendall(test_client_input)
-            client_input_sent_to_websocket = mock_crt_websocket.client_input_queue.get(timeout=5)
+            client_input_sent_to_websocket = (
+                mock_crt_websocket.client_input_queue.get(timeout=5)
+            )
             assert test_client_input == client_input_sent_to_websocket
 
             mock_crt_websocket.add_shutdown_from_server()
 
     def test_command_uses_fips_endpoint_to_connect(
-            self, cli_runner, mock_crt_websocket, connect_patch, io_patch, describe_instance_response,
-            fips_dns_name, describe_eice_response,
+        self,
+        cli_runner,
+        mock_crt_websocket,
+        connect_patch,
+        io_patch,
+        describe_instance_response,
+        fips_dns_name,
+        describe_eice_response,
     ):
         cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "true"
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--max-tunnel-duration", "1"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--max-tunnel-duration",
+            "1",
         ]
         cli_runner.add_response(HTTPResponse(body=describe_instance_response))
         cli_runner.add_response(HTTPResponse(body=describe_eice_response))
 
-
         test_server_input = b"Test Server Output"
         mock_crt_websocket.add_output_from_server(test_server_input)
         mock_crt_websocket.add_shutdown_from_server()
@@ -522,18 +636,25 @@ class TestOpenTunnel:
         assert_url(fips_dns_name, mock_crt_websocket.url)
 
     def test_command_returns_shutdown_reason(
-            self, cli_runner, mock_crt_websocket, connect_patch, io_patch
+        self, cli_runner, mock_crt_websocket, connect_patch, io_patch
     ):
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--private-ip-address", "10.0.0.0",
-            "--instance-connect-endpoint-id", "eice-123",
-            "--instance-connect-endpoint-dns-name", "test"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--private-ip-address",
+            "10.0.0.0",
+            "--instance-connect-endpoint-id",
+            "eice-123",
+            "--instance-connect-endpoint-dns-name",
+            "test",
         ]
 
         shutdown_reason = "Test Shutdown"
-        mock_crt_websocket.add_shutdown_from_server(shutdown_reason=shutdown_reason)
+        mock_crt_websocket.add_shutdown_from_server(
+            shutdown_reason=shutdown_reason
+        )
 
         with connect_patch, io_patch:
             result = cli_runner.run(cmdline)
@@ -542,18 +663,25 @@ class TestOpenTunnel:
         assert shutdown_reason in result.stderr
 
     def test_command_returns_shutdown_exception(
-            self, cli_runner, mock_crt_websocket, connect_patch, io_patch
+        self, cli_runner, mock_crt_websocket, connect_patch, io_patch
     ):
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--private-ip-address", "10.0.0.0",
-            "--instance-connect-endpoint-id", "eice-123",
-            "--instance-connect-endpoint-dns-name", "test"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--private-ip-address",
+            "10.0.0.0",
+            "--instance-connect-endpoint-id",
+            "eice-123",
+            "--instance-connect-endpoint-dns-name",
+            "test",
         ]
 
         shutdown_exception_message = "Test Shutdown Error"
-        mock_crt_websocket.add_shutdown_from_server(shutdown_exception=RuntimeError(shutdown_exception_message))
+        mock_crt_websocket.add_shutdown_from_server(
+            shutdown_exception=RuntimeError(shutdown_exception_message)
+        )
 
         with connect_patch, io_patch:
             result = cli_runner.run(cmdline)
@@ -561,45 +689,61 @@ class TestOpenTunnel:
         assert 255 == result.rc
         assert shutdown_exception_message in result.stderr
 
-    @pytest.mark.parametrize("cli_input,expected", [
-        # Customer must provide instance id or private ip
-        (
+    @pytest.mark.parametrize(
+        "cli_input,expected",
+        [
+            # Customer must provide instance id or private ip
+            (
                 [
-                    "ec2-instance-connect", "open-tunnel",
-                    "--instance-connect-endpoint-id", "eice-123",
-                    "--instance-connect-endpoint-dns-name", "test"
+                    "ec2-instance-connect",
+                    "open-tunnel",
+                    "--instance-connect-endpoint-id",
+                    "eice-123",
+                    "--instance-connect-endpoint-dns-name",
+                    "test",
                 ],
-                "Specify an instance id or private ip"
-        ),
-        # Customer must define eice id when dns name is provided
-        (
+                "Specify an instance id or private ip",
+            ),
+            # Customer must define eice id when dns name is provided
+            (
                 [
-                    "ec2-instance-connect", "open-tunnel",
-                    "--instance-id", "i-123",
-                    "--instance-connect-endpoint-dns-name", "test"
+                    "ec2-instance-connect",
+                    "open-tunnel",
+                    "--instance-id",
+                    "i-123",
+                    "--instance-connect-endpoint-dns-name",
+                    "test",
                 ],
-                "Specify an instance connect endpoint id"
-        ),
-        # Customer must define eice id when private ip is provided
-        (
+                "Specify an instance connect endpoint id",
+            ),
+            # Customer must define eice id when private ip is provided
+            (
                 [
-                    "ec2-instance-connect", "open-tunnel",
-                    "--instance-id", "i-123",
-                    "--private-ip-address", "0.0.0.0"
+                    "ec2-instance-connect",
+                    "open-tunnel",
+                    "--instance-id",
+                    "i-123",
+                    "--private-ip-address",
+                    "0.0.0.0",
                 ],
-                "Specify an instance connect endpoint id"
-        ),
-        # Customer must use provide local port when using command in isatty mode
-        (
+                "Specify an instance connect endpoint id",
+            ),
+            # Customer must use provide local port when using command in isatty mode
+            (
                 [
-                    "ec2-instance-connect", "open-tunnel",
-                    "--instance-id", "i-123"
+                    "ec2-instance-connect",
+                    "open-tunnel",
+                    "--instance-id",
+                    "i-123",
                 ],
-                "This command does not support interactive mode"
-        )
-    ])
+                "This command does not support interactive mode",
+            ),
+        ],
+    )
     @mock.patch("sys.stdin")
-    def test_command_fails_when_invalid_input(self, mock_stdin, cli_runner, cli_input, expected):
+    def test_command_fails_when_invalid_input(
+        self, mock_stdin, cli_runner, cli_input, expected
+    ):
         mock_stdin.isatty.return_value = True
         result = cli_runner.run(cli_input)
 
@@ -607,11 +751,16 @@ class TestOpenTunnel:
         assert expected in result.stderr
 
     @pytest.mark.parametrize("duration", ["-1", "0", "3601"])
-    def test_command_fails_when_using_invalid_max_tunnel_duration(self, cli_runner, duration):
+    def test_command_fails_when_using_invalid_max_tunnel_duration(
+        self, cli_runner, duration
+    ):
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--max-tunnel-duration", duration
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--max-tunnel-duration",
+            duration,
         ]
         result = cli_runner.run(cmdline)
 
@@ -619,16 +768,24 @@ class TestOpenTunnel:
         assert "Invalid max connection timeout specified" in result.stderr
 
     def test_command_fails_when_no_fips_endpoint_available_to_connect(
-            self, cli_runner, describe_instance_response, describe_eice_response_without_fips_dns,
+        self,
+        cli_runner,
+        describe_instance_response,
+        describe_eice_response_without_fips_dns,
     ):
         cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "true"
         cmdline = [
-            "ec2-instance-connect", "open-tunnel",
-            "--instance-id", "i-123",
-            "--max-tunnel-duration", "1"
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--max-tunnel-duration",
+            "1",
         ]
         cli_runner.add_response(HTTPResponse(body=describe_instance_response))
-        cli_runner.add_response(HTTPResponse(body=describe_eice_response_without_fips_dns))
+        cli_runner.add_response(
+            HTTPResponse(body=describe_eice_response_without_fips_dns)
+        )
 
         result = cli_runner.run(cmdline)
 
@@ -636,18 +793,26 @@ class TestOpenTunnel:
         assert "Unable to find FIPS Endpoint" in result.stderr
 
     def test_command_fails_when_empty_fips_endpoint_available_to_connect(
-                self, cli_runner, describe_instance_response, describe_eice_response_empty_fips_dns,
-        ):
-            cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "true"
-            cmdline = [
-                "ec2-instance-connect", "open-tunnel",
-                "--instance-id", "i-123",
-                "--max-tunnel-duration", "1"
-            ]
-            cli_runner.add_response(HTTPResponse(body=describe_instance_response))
-            cli_runner.add_response(HTTPResponse(body=describe_eice_response_empty_fips_dns))
+        self,
+        cli_runner,
+        describe_instance_response,
+        describe_eice_response_empty_fips_dns,
+    ):
+        cli_runner.env["AWS_USE_FIPS_ENDPOINT"] = "true"
+        cmdline = [
+            "ec2-instance-connect",
+            "open-tunnel",
+            "--instance-id",
+            "i-123",
+            "--max-tunnel-duration",
+            "1",
+        ]
+        cli_runner.add_response(HTTPResponse(body=describe_instance_response))
+        cli_runner.add_response(
+            HTTPResponse(body=describe_eice_response_empty_fips_dns)
+        )
 
-            result = cli_runner.run(cmdline)
+        result = cli_runner.run(cmdline)
 
-            assert 253 == result.rc
-            assert "Unable to find FIPS Endpoint" in result.stderr
+        assert 253 == result.rc
+        assert "Unable to find FIPS Endpoint" in result.stderr
diff -pruN 2.23.6-1/tests/functional/ec2instanceconnect/test_ssh.py 2.31.35-1/tests/functional/ec2instanceconnect/test_ssh.py
--- 2.23.6-1/tests/functional/ec2instanceconnect/test_ssh.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ec2instanceconnect/test_ssh.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import os
+import sys
 from unittest import mock
 
-import os
 import pytest
-import sys
 
-from tests import SessionStubber, AWSRequest, CLIRunner, HTTPResponse
+from tests import AWSRequest, CLIRunner, HTTPResponse, SessionStubber
 
 
 @pytest.fixture
@@ -40,7 +40,8 @@ def aws_config_file(tmp_path):
             b'[profile test-fips]\n'
             b'use_fips_endpoint=true\n'
             b'aws_access_key_id=access_key\n'
-            b'aws_secret_access_key=secret_key\n')
+            b'aws_secret_access_key=secret_key\n'
+        )
         return config_file
 
 
@@ -148,7 +149,9 @@ def describe_no_ip_instance_response():
 
 @pytest.fixture
 def send_ssh_public_key_response():
-    return b'{"RequestId":"01adeb55-3f80-4736-b789-d57feb69691d","Success":true}'
+    return (
+        b'{"RequestId":"01adeb55-3f80-4736-b789-d57feb69691d","Success":true}'
+    )
 
 
 @pytest.fixture
@@ -157,7 +160,7 @@ def request_params_for_describe_instance
 
 
 def get_describe_eice_response():
-    return f"""
+    return """
     <DescribeInstanceConnectEndpointsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
         <instanceConnectEndpointSet>
             <item>
@@ -173,17 +176,76 @@ def get_describe_eice_response():
     """
 
 
+def get_describe_eice_response_with_state(state):
+    return f"""
+    <DescribeInstanceConnectEndpointsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
+        <instanceConnectEndpointSet>
+            <item>
+                <dnsName>dns.com</dnsName>
+                <fipsDnsName>fips.dns.com</fipsDnsName>
+                <instanceConnectEndpointId>eice-123</instanceConnectEndpointId>
+                <state>{state}</state>
+                <subnetId>subnet-123</subnetId>
+                <vpcId>vpc-123</vpcId>
+            </item>
+        </instanceConnectEndpointSet>
+    </DescribeInstanceConnectEndpointsResponse>
+    """
+
+
+def get_describe_eice_response_create_complete():
+    return get_describe_eice_response_with_state("create-complete")
+
+
+def get_describe_eice_response_update_in_progress():
+    return get_describe_eice_response_with_state("update-in-progress")
+
+
+def get_describe_eice_response_update_complete():
+    return get_describe_eice_response_with_state("update-complete")
+
+
+def get_describe_eice_response_update_failed():
+    return get_describe_eice_response_with_state("update-failed")
+
+
 @pytest.fixture
 def describe_eice_response():
     return get_describe_eice_response()
 
 
 def get_request_params_for_describe_eice():
-    return {'Filters': [{'Name': 'state', 'Values': ['create-complete']}, {'Name': 'vpc-id', 'Values': ['vpc-123']}]}
+    return {
+        'Filters': [
+            {
+                'Name': 'state',
+                'Values': [
+                    'create-complete',
+                    'update-in-progress',
+                    'update-failed',
+                    'update-complete',
+                ],
+            },
+            {'Name': 'vpc-id', 'Values': ['vpc-123']},
+        ]
+    }
 
 
 def get_request_params_for_describe_eice_with_eice_id():
-    return {'Filters': [{'Name': 'state', 'Values': ['create-complete']}], 'InstanceConnectEndpointIds': ['eice-12345']}
+    return {
+        'Filters': [
+            {
+                'Name': 'state',
+                'Values': [
+                    'create-complete',
+                    'update-in-progress',
+                    'update-failed',
+                    'update-complete',
+                ],
+            }
+        ],
+        'InstanceConnectEndpointIds': ['eice-12345'],
+    }
 
 
 class TestSSHCommand:
@@ -195,364 +257,629 @@ class TestSSHCommand:
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    '-o', 'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
-                          '--private-ip-address 10.0.0.0 --remote-port 22 '
-                          '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: connect by instance id + key'
+                id='Open-Tunnel: connect by instance id + key',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice_with_eice_id(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--eice-options", "endpointId=eice-12345",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--eice-options",
+                    "endpointId=eice-12345",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: connect to specific EICE'
+                id='Open-Tunnel: connect to specific EICE',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--eice-options", "endpointId=eice-12345,dnsName=dns.domain.com",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--eice-options",
+                    "endpointId=eice-12345,dnsName=dns.domain.com",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-12345 --instance-connect-endpoint-dns-name dns.domain.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id="Open-Tunnel: connect by eice id + domain"
+                id="Open-Tunnel: connect by eice id + domain",
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--eice-options", "maxTunnelDuration=61",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--eice-options",
+                    "maxTunnelDuration=61",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com '
                     '--max-tunnel-duration 61',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id="Open-Tunnel: allow customer to define maxTunnelDuration"
+                id="Open-Tunnel: allow customer to define maxTunnelDuration",
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--ssh-port", "24",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--ssh-port",
+                    "24",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '24', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '24',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 24 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id="Open-Tunnel: allow customer to define ssh port"
+                id="Open-Tunnel: allow customer to define ssh port",
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--os-user", "new-user",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--os-user",
+                    "new-user",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'new-user@10.0.0.0'
+                    'new-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: allow customer to define ssh user'
+                id='Open-Tunnel: allow customer to define ssh user',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-id", "i-123",
-                    "--local-forwarding", "8080:localhost:9090",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-id",
+                    "i-123",
+                    "--local-forwarding",
+                    "8080:localhost:9090",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    '-L', '8080:localhost:9090',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-L',
+                    '8080:localhost:9090',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: allow customer to local-forwarding'
+                id='Open-Tunnel: allow customer to local-forwarding',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--region", "us-east-2",
-                    "--profile", "test-profile"
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--region",
+                    "us-east-2",
+                    "--profile",
+                    "test-profile",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 --region us-east-2 --profile test-profile '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: pass global parameters to sub-command'
+                id='Open-Tunnel: pass global parameters to sub-command',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--connection-type", "eice"
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--connection-type",
+                    "eice",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
                     '-o',
                     'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
                     '--private-ip-address 10.0.0.0 --remote-port 22 '
                     '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: select private IP when connection type eice'
+                id='Open-Tunnel: select private IP when connection type eice',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--profile", "test-fips",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--profile",
+                    "test-fips",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    '-o', 'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
-                          '--private-ip-address 10.0.0.0 --remote-port 22 --profile test-fips '
-                          '--instance-connect-endpoint-id eice-123 '
-                          '--instance-connect-endpoint-dns-name fips.dns.com',
-                    'ec2-user@10.0.0.0'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 --profile test-fips '
+                    '--instance-connect-endpoint-id eice-123 '
+                    '--instance-connect-endpoint-dns-name fips.dns.com',
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: connect by instance id + key to fips endpoint'
+                id='Open-Tunnel: connect by instance id + key to fips endpoint',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--eice-options", "maxTunnelDuration=61",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--eice-options",
+                    "maxTunnelDuration=61",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    '-o', 'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
-                          '--private-ip-address 10.0.0.0 --remote-port 22 '
-                          '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com '
-                          '--max-tunnel-duration 61',
-                    'ec2-user@10.0.0.0'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com '
+                    '--max-tunnel-duration 61',
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Open-Tunnel: use private ip and eice when eice options defined without connection-type'
+                id='Open-Tunnel: use private ip and eice when eice options defined without connection-type',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 get_describe_eice_response(),
                 get_request_params_for_describe_eice(),
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--connection-type", "eice",
-                    "--instance-ip", "1.10.10.10",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--connection-type",
+                    "eice",
+                    "--instance-ip",
+                    "1.10.10.10",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    '-o', 'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
-                          '--private-ip-address 1.10.10.10 --remote-port 22 '
-                          '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-                    'ec2-user@1.10.10.10'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 1.10.10.10 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@1.10.10.10',
                 ],
-                id='Open-Tunnel: use provided ip'
+                id='Open-Tunnel: use provided ip',
+            ),
+            pytest.param(
+                get_describe_private_instance_response(),
+                get_describe_eice_response_create_complete(),
+                get_request_params_for_describe_eice(),
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                ],
+                [
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@10.0.0.0',
+                ],
+                id='Open-Tunnel: connect via eice in create-complete',
+            ),
+            pytest.param(
+                get_describe_private_instance_response(),
+                get_describe_eice_response_update_in_progress(),
+                get_request_params_for_describe_eice(),
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                ],
+                [
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@10.0.0.0',
+                ],
+                id='Open-Tunnel: connect via eice in update-in-progress',
+            ),
+            pytest.param(
+                get_describe_private_instance_response(),
+                get_describe_eice_response_update_complete(),
+                get_request_params_for_describe_eice(),
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                ],
+                [
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@10.0.0.0',
+                ],
+                id='Open-Tunnel: connect via eice in update-complete',
+            ),
+            pytest.param(
+                get_describe_private_instance_response(),
+                get_describe_eice_response_update_failed(),
+                get_request_params_for_describe_eice(),
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                ],
+                [
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    '-o',
+                    'ProxyCommand=aws ec2-instance-connect open-tunnel --instance-id i-123 '
+                    '--private-ip-address 10.0.0.0 --remote-port 22 '
+                    '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                    'ec2-user@10.0.0.0',
+                ],
+                id='Open-Tunnel: connect via eice in update-failed',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--ssh-port", "24",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--ssh-port",
+                    "24",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '24', '-i', '/tmp/ssh-file',
-                    'ec2-user@11.11.11.11'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '24',
+                    '-i',
+                    '/tmp/ssh-file',
+                    'ec2-user@11.11.11.11',
                 ],
-                id='Public: connect to public IP'
+                id='Public: connect to public IP',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--instance-ip", "10.0.0.1",
-                    "--connection-type", "direct",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--instance-ip",
+                    "10.0.0.1",
+                    "--connection-type",
+                    "direct",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    'ec2-user@10.0.0.1'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    'ec2-user@10.0.0.1',
                 ],
-                id='Public: connect to provided ip address'
+                id='Public: connect to provided ip address',
             ),
-
             pytest.param(
                 get_describe_public_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--connection-type", "direct",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--connection-type",
+                    "direct",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    'ec2-user@11.11.11.11'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    'ec2-user@11.11.11.11',
                 ],
-                id='Public: use public when connection-type direct'
+                id='Public: use public when connection-type direct',
             ),
-
             pytest.param(
                 get_describe_private_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--connection-type", "direct",
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--connection-type",
+                    "direct",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    'ec2-user@10.0.0.0'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    'ec2-user@10.0.0.0',
                 ],
-                id='Public: use private ip since no public ip when connection-type direct'
+                id='Public: use private ip since no public ip when connection-type direct',
             ),
-
             pytest.param(
                 get_describe_ipv6_instance_response(),
                 None,
                 None,
                 [
-                    "ec2-instance-connect", "ssh",
-                    "--instance-id", "i-123",
-                    "--private-key-file", "/tmp/ssh-file",
-                    "--connection-type", "direct"
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-123",
+                    "--private-key-file",
+                    "/tmp/ssh-file",
+                    "--connection-type",
+                    "direct",
                 ],
                 [
-                    'ssh', '-o', 'ServerAliveInterval=5',
-                    '-p', '22', '-i', '/tmp/ssh-file',
-                    'ec2-user@2600:1f10:4f8e:db01:73f5:6b9d:c0da:1c27'
+                    'ssh',
+                    '-o',
+                    'ServerAliveInterval=5',
+                    '-p',
+                    '22',
+                    '-i',
+                    '/tmp/ssh-file',
+                    'ec2-user@2600:1f10:4f8e:db01:73f5:6b9d:c0da:1c27',
                 ],
-                id='Public: IPv6: use ipv6 when connection-type direct and no IPv4 address'
+                id='Public: IPv6: use ipv6 when connection-type direct and no IPv4 address',
             ),
-        ])
+        ],
+    )
     @mock.patch("shutil.which")
     @mock.patch("subprocess.call")
     @mock.patch.object(sys, 'argv', ['aws'])
-    def test_successful_ssh_for_instance(self, mock_subproc_call, mock_which, cli_runner,
-                                         request_params_for_describe_instance,
-                                         describe_instance_response, describe_eice_response,
-                                         request_params_for_describe_eice, cli_input, expected_ssh_command):
+    def test_successful_ssh_for_instance(
+        self,
+        mock_subproc_call,
+        mock_which,
+        cli_runner,
+        request_params_for_describe_instance,
+        describe_instance_response,
+        describe_eice_response,
+        request_params_for_describe_eice,
+        cli_input,
+        expected_ssh_command,
+    ):
         mock_which.return_value = "ssh"
         mock_subproc_call.return_value = 0
         cli_runner.add_response(HTTPResponse(body=describe_instance_response))
@@ -585,18 +912,33 @@ class TestSSHCommand:
     @mock.patch("shutil.which")
     @mock.patch("subprocess.call")
     @mock.patch.object(sys, 'argv', ['aws.cmd'])
-    def test_valid_input_without_ssh_key(self, mock_subproc_call, mock_which, cli_runner, describe_eice_response,
-                                         describe_private_instance_response, send_ssh_public_key_response):
+    def test_valid_input_without_ssh_key(
+        self,
+        mock_subproc_call,
+        mock_which,
+        cli_runner,
+        describe_eice_response,
+        describe_private_instance_response,
+        send_ssh_public_key_response,
+    ):
         mock_which.return_value = '/some/path/to/ssh'
         mock_subproc_call.return_value = 0
-        cli_runner.add_response(HTTPResponse(body=describe_private_instance_response))
+        cli_runner.add_response(
+            HTTPResponse(body=describe_private_instance_response)
+        )
         cli_runner.add_response(HTTPResponse(body=describe_eice_response))
-        cli_runner.add_response(HTTPResponse(body=send_ssh_public_key_response))
+        cli_runner.add_response(
+            HTTPResponse(body=send_ssh_public_key_response)
+        )
 
-        result = cli_runner.run([
-            "ec2-instance-connect", "ssh",
-            "--instance-id", "i-04997c129f59becde",
-        ])
+        result = cli_runner.run(
+            [
+                "ec2-instance-connect",
+                "ssh",
+                "--instance-id",
+                "i-04997c129f59becde",
+            ]
+        )
 
         assert 0 == result.rc
         assert mock_subproc_call.called
@@ -618,239 +960,313 @@ class TestSSHCommand:
             ),
         ]
         mock_which.assert_called_once_with('ssh')
-        mock_subproc_call.assert_called_once_with([
-            '/some/path/to/ssh', '-o', 'ServerAliveInterval=5',
-            '-p', '22', '-i', mock.ANY,
-            '-o',
-            'ProxyCommand=aws.cmd ec2-instance-connect open-tunnel --instance-id i-04997c129f59becde '
-            '--private-ip-address 10.0.0.0 --remote-port 22 '
-            '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
-            'ec2-user@10.0.0.0'
-        ])
-
-    def test_no_ip_on_instance(self, cli_runner, describe_no_ip_instance_response):
-        cli_runner.add_response(HTTPResponse(body=describe_no_ip_instance_response))
-
-        result = cli_runner.run([
-            "ec2-instance-connect", "ssh",
-            "--instance-id", "i-04997c129f59becde",
-            "--private-key-file", "/tmp/ssh-file",
-        ])
-
-        assert 252 == result.rc
-        assert 'Unable to find any IP address on the instance to connect to.' in result.stderr
-
-    def test_command_fails_when_eice_connection_type_and_no_private_ip(
-            self, cli_runner, describe_no_ip_instance_response):
-        cli_runner.add_response(HTTPResponse(body=describe_no_ip_instance_response))
-
-        result = cli_runner.run([
-            "ec2-instance-connect", "ssh",
-            "--instance-id", "i-04997c129f59becde",
-            "--private-key-file", "/tmp/ssh-file",
-            "--connection-type", "eice"
-        ])
-
-        assert 252 == result.rc
-        assert 'Unable to find any IP address on the instance to connect to.' in result.stderr
-
-    @pytest.mark.parametrize("cli_input,expected_error_code,expected", [
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-            ],
-            252,
-            "the following arguments are required: --instance-id",
-            id="Failure: Customer must provide instance-id"
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--connection-type", "test",
-            ],
-            252,
-            "argument --connection-type: Invalid choice, valid choices are:",
-            id='Failure: Customer must provide connection-type when IP defined'
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--connection-type", "direct",
-                "--eice-options", "endpointId=eice-12345"
-            ],
-            252,
-            "eice-options can't be specified when connection type is direct.",
-            id='Failure: Customer can not use connection-type direct with eice-id'
-        ),
-
-        pytest.param(
+        mock_subproc_call.assert_called_once_with(
             [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--connection-type", "direct",
-                "--eice-options", "dnsName=test.com"
-            ],
-            252,
-            "eice-options can't be specified when connection type is direct.",
-            id='Failure: Customer can not use connection-type direct with eice-dns-name'
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--connection-type", "direct",
-                "--eice-options", "maxTunnelDuration=12"
-            ],
-            252,
-            "eice-options can't be specified when connection type is direct.",
-            id='Failure: Customer can not use connection-type direct with maxTunnelDuration'
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "dnsName=test"
-            ],
-            252,
-            "When specifying dnsName, you must specify endpointId.",
-            id='Failure: Customer must define eice-id when eice-dns provided'
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--ssh-port", "ab"
-            ],
-            255,
-            "invalid literal for int() with base 10",
-            id='Failure: port must be int'
-        ),
-
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "maxTunnelDuration=ab"
-            ],
-            255,
-            'invalid literal for int() with base 10',
-            id='Failure: maxTunnelDuration must be int'
-        ),
+                '/some/path/to/ssh',
+                '-o',
+                'ServerAliveInterval=5',
+                '-p',
+                '22',
+                '-i',
+                mock.ANY,
+                '-o',
+                'ProxyCommand=aws.cmd ec2-instance-connect open-tunnel --instance-id i-04997c129f59becde '
+                '--private-ip-address 10.0.0.0 --remote-port 22 '
+                '--instance-connect-endpoint-id eice-123 --instance-connect-endpoint-dns-name dns.com',
+                'ec2-user@10.0.0.0',
+            ]
+        )
 
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--instance-ip", "10.0.0.1"
-            ],
-            252,
-            'When specifying instance-ip, you must specify connection-type.',
-            id='Failure: Customer must define connection-type when ip define instead of Instance ID'
-        ),
+    def test_no_ip_on_instance(
+        self, cli_runner, describe_no_ip_instance_response
+    ):
+        cli_runner.add_response(
+            HTTPResponse(body=describe_no_ip_instance_response)
+        )
 
-        pytest.param(
+        result = cli_runner.run(
             [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "a-12345"
-            ],
-            252,
-            'The specified instance ID is invalid.',
-            id='Failure: Customer provide valid Instance ID'
-        ),
+                "ec2-instance-connect",
+                "ssh",
+                "--instance-id",
+                "i-04997c129f59becde",
+                "--private-key-file",
+                "/tmp/ssh-file",
+            ]
+        )
 
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12+3:4;5"
-            ],
-            252,
-            'The specified instance ID is invalid.',
-            id='Failure: Customer provide valid Instance ID without special characters'
-        ),
+        assert 252 == result.rc
+        assert (
+            'Unable to find any IP address on the instance to connect to.'
+            in result.stderr
+        )
 
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "endpointId=aeice-12345"
-            ],
-            252,
-            'The specified endpointId is invalid.',
-            id='Failure: Customer must define valid EICE ID'
-        ),
+    def test_command_fails_when_eice_connection_type_and_no_private_ip(
+        self, cli_runner, describe_no_ip_instance_response
+    ):
+        cli_runner.add_response(
+            HTTPResponse(body=describe_no_ip_instance_response)
+        )
 
-        pytest.param(
+        result = cli_runner.run(
             [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "endpointId=eice-12;3:4+5-"
-            ],
-            252,
-            'The specified endpointId is invalid.',
-            id='Failure: Customer must define valid EICE ID without special characters'
-        ),
+                "ec2-instance-connect",
+                "ssh",
+                "--instance-id",
+                "i-04997c129f59becde",
+                "--private-key-file",
+                "/tmp/ssh-file",
+                "--connection-type",
+                "eice",
+            ]
+        )
 
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "endpointId=eice-12345,dnsName=dns.domain.+com",
-            ],
-            252,
-            'The specified dnsName is invalid.',
-            id='Failure: Customer must define valid EICE dnsName without special characters'
-        ),
+        assert 252 == result.rc
+        assert (
+            'Unable to find any IP address on the instance to connect to.'
+            in result.stderr
+        )
 
-        pytest.param(
-            [
-                "ec2-instance-connect", "ssh",
-                "--instance-id", "i-12345",
-                "--eice-options", "test=123"
-            ],
-            252,
-            'Unknown parameter in input',
-            id="Failure: Customer must define allowed eice options"
-        ),
-    ])
-    def test_command_fails_when_invalid_input(self, cli_runner, cli_input, expected_error_code, expected):
+    @pytest.mark.parametrize(
+        "cli_input,expected_error_code,expected",
+        [
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                ],
+                252,
+                "the following arguments are required: --instance-id",
+                id="Failure: Customer must provide instance-id",
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--connection-type",
+                    "test",
+                ],
+                252,
+                "argument --connection-type: Found invalid choice 'test'",
+                id='Failure: Customer must provide connection-type when IP defined',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--connection-type",
+                    "direct",
+                    "--eice-options",
+                    "endpointId=eice-12345",
+                ],
+                252,
+                "eice-options can't be specified when connection type is direct.",
+                id='Failure: Customer can not use connection-type direct with eice-id',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--connection-type",
+                    "direct",
+                    "--eice-options",
+                    "dnsName=test.com",
+                ],
+                252,
+                "eice-options can't be specified when connection type is direct.",
+                id='Failure: Customer can not use connection-type direct with eice-dns-name',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--connection-type",
+                    "direct",
+                    "--eice-options",
+                    "maxTunnelDuration=12",
+                ],
+                252,
+                "eice-options can't be specified when connection type is direct.",
+                id='Failure: Customer can not use connection-type direct with maxTunnelDuration',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "dnsName=test",
+                ],
+                252,
+                "When specifying dnsName, you must specify endpointId.",
+                id='Failure: Customer must define eice-id when eice-dns provided',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--ssh-port",
+                    "ab",
+                ],
+                255,
+                "invalid literal for int() with base 10",
+                id='Failure: port must be int',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "maxTunnelDuration=ab",
+                ],
+                255,
+                'invalid literal for int() with base 10',
+                id='Failure: maxTunnelDuration must be int',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--instance-ip",
+                    "10.0.0.1",
+                ],
+                252,
+                'When specifying instance-ip, you must specify connection-type.',
+                id='Failure: Customer must define connection-type when ip define instead of Instance ID',
+            ),
+            pytest.param(
+                ["ec2-instance-connect", "ssh", "--instance-id", "a-12345"],
+                252,
+                'The specified instance ID is invalid.',
+                id='Failure: Customer provide valid Instance ID',
+            ),
+            pytest.param(
+                ["ec2-instance-connect", "ssh", "--instance-id", "i-12+3:4;5"],
+                252,
+                'The specified instance ID is invalid.',
+                id='Failure: Customer provide valid Instance ID without special characters',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "endpointId=aeice-12345",
+                ],
+                252,
+                'The specified endpointId is invalid.',
+                id='Failure: Customer must define valid EICE ID',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "endpointId=eice-12;3:4+5-",
+                ],
+                252,
+                'The specified endpointId is invalid.',
+                id='Failure: Customer must define valid EICE ID without special characters',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "endpointId=eice-12345,dnsName=dns.domain.+com",
+                ],
+                252,
+                'The specified dnsName is invalid.',
+                id='Failure: Customer must define valid EICE dnsName without special characters',
+            ),
+            pytest.param(
+                [
+                    "ec2-instance-connect",
+                    "ssh",
+                    "--instance-id",
+                    "i-12345",
+                    "--eice-options",
+                    "test=123",
+                ],
+                252,
+                'Unknown parameter in input',
+                id="Failure: Customer must define allowed eice options",
+            ),
+        ],
+    )
+    def test_command_fails_when_invalid_input(
+        self, cli_runner, cli_input, expected_error_code, expected
+    ):
         result = cli_runner.run(cli_input)
 
         assert expected_error_code == result.rc
         assert expected in result.stderr
 
     @pytest.mark.parametrize("duration", ["-1", "0", "3601"])
-    def test_command_fails_when_using_invalid_max_tunnel_duration(self, cli_runner, duration):
+    def test_command_fails_when_using_invalid_max_tunnel_duration(
+        self, cli_runner, duration
+    ):
         cmdline = [
-            "ec2-instance-connect", "ssh",
-            "--instance-id", "i-123",
-            "--eice-options", f"maxTunnelDuration={duration}"
+            "ec2-instance-connect",
+            "ssh",
+            "--instance-id",
+            "i-123",
+            "--eice-options",
+            f"maxTunnelDuration={duration}",
         ]
         result = cli_runner.run(cmdline)
 
         assert 252 == result.rc
-        assert "Invalid value specified for maxTunnelDuration. Value must be greater than 1 and less than 3600." \
-               in result.stderr
+        assert (
+            "Invalid value specified for maxTunnelDuration. Value must be greater than 1 and less than 3600."
+            in result.stderr
+        )
 
     @mock.patch("shutil.which")
     @mock.patch.object(sys, 'argv', ['aws'])
-    def test_command_error_when_ssh_not_available(self, mock_which, cli_runner,
-                                                  describe_public_instance_response,
-                                                  request_params_for_describe_instance):
+    def test_command_error_when_ssh_not_available(
+        self,
+        mock_which,
+        cli_runner,
+        describe_public_instance_response,
+        request_params_for_describe_instance,
+    ):
         mock_which.return_value = None
-        cli_runner.add_response(HTTPResponse(body=describe_public_instance_response))
+        cli_runner.add_response(
+            HTTPResponse(body=describe_public_instance_response)
+        )
 
-        result = cli_runner.run([
-            "ec2-instance-connect", "ssh",
-            "--instance-id", "i-123",
-            "--private-key-file", "/tmp/ssh-file",
-        ])
+        result = cli_runner.run(
+            [
+                "ec2-instance-connect",
+                "ssh",
+                "--instance-id",
+                "i-123",
+                "--private-key-file",
+                "/tmp/ssh-file",
+            ]
+        )
 
         assert 253 == result.rc
         assert 'SSH not available.' in result.stderr
diff -pruN 2.23.6-1/tests/functional/ecr/test_get_login_password.py 2.31.35-1/tests/functional/ecr/test_get_login_password.py
--- 2.23.6-1/tests/functional/ecr/test_get_login_password.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ecr/test_get_login_password.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,7 +23,7 @@ class TestGetLoginPasswordCommand(BaseAW
                     {
                         "authorizationToken": "Zm9vOmJhcg==",
                         "proxyEndpoint": "1235.ecr.us-east-1.io",
-                        "expiresAt": "2015-10-16T00:00:00Z"
+                        "expiresAt": "2015-10-16T00:00:00Z",
                     }
                 ]
             },
diff -pruN 2.23.6-1/tests/functional/ecr_public/__init__.py 2.31.35-1/tests/functional/ecr_public/__init__.py
--- 2.23.6-1/tests/functional/ecr_public/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ecr_public/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the 'license' file accompanying this file. This file is
 # distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/tests/functional/ecr_public/test_get_login_password.py 2.31.35-1/tests/functional/ecr_public/test_get_login_password.py
--- 2.23.6-1/tests/functional/ecr_public/test_get_login_password.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ecr_public/test_get_login_password.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,7 +21,7 @@ class TestGetLoginPasswordCommand(BaseAW
             {
                 'authorizationData': {
                     "authorizationToken": "Zm9vOmJhcg==",
-                    "expiresAt": "2015-10-16T00:00:00Z"
+                    "expiresAt": "2015-10-16T00:00:00Z",
                 }
             },
         ]
diff -pruN 2.23.6-1/tests/functional/ecs/test_deploy.py 2.31.35-1/tests/functional/ecs/test_deploy.py
--- 2.23.6-1/tests/functional/ecs/test_deploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ecs/test_deploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,23 +13,26 @@
 
 import json
 
+from awscli.customizations.ecs.deploy import (
+    MAX_WAIT_MIN,
+    TIMEOUT_BUFFER_MIN,
+    CodeDeployer,
+)
+from awscli.customizations.ecs.filehelpers import (
+    get_app_name,
+    get_deploy_group_name,
+)
 from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
-from awscli.customizations.ecs.deploy import (CodeDeployer,
-                                              MAX_WAIT_MIN,
-                                              TIMEOUT_BUFFER_MIN)
-from awscli.customizations.ecs.filehelpers import (get_app_name,
-                                                   get_deploy_group_name)
 
 
 class TestDeployCommand(BaseAWSCommandParamsTest):
-
     PREFIX = 'ecs deploy '
 
     TASK_DEFINITION_JSON = {
         "family": "test",
         "containerDefinitions": [],
         "cpu": "256",
-        "memory": '512'
+        "memory": '512',
     }
 
     JSON_APPSPEC = """
@@ -73,18 +76,20 @@ class TestDeployCommand(BaseAWSCommandPa
 
     APPSPEC_DICT = {
         "version": 0.0,
-        "resources": [{
-            "TestService": {
-                "type": "AWS::ECS::Service",
-                "properties": {
-                    "taskDefinition": "arn:aws:ecs::123:task-definition:1",
-                    "loadBalancerInfo": {
-                        "containerName": "web",
-                        "containerPort": 80
-                    }
+        "resources": [
+            {
+                "TestService": {
+                    "type": "AWS::ECS::Service",
+                    "properties": {
+                        "taskDefinition": "arn:aws:ecs::123:task-definition:1",
+                        "loadBalancerInfo": {
+                            "containerName": "web",
+                            "containerPort": 80,
+                        },
+                    },
                 }
             }
-        }]
+        ],
     }
 
     def setUp(self):
@@ -92,37 +97,48 @@ class TestDeployCommand(BaseAWSCommandPa
         # setup required values
         files = FileCreator()
         self.task_def_file = files.create_file(
-            'taskDef.json', json.dumps(self.TASK_DEFINITION_JSON), mode='w')
+            'taskDef.json', json.dumps(self.TASK_DEFINITION_JSON), mode='w'
+        )
         self.appspec_file = files.create_file(
-            'appspec.yaml', self.YAML_APPSPEC, mode='w')
+            'appspec.yaml', self.YAML_APPSPEC, mode='w'
+        )
         self.appspec_file_json = files.create_file(
-            'appspec.json', self.JSON_APPSPEC, mode='w')
+            'appspec.json', self.JSON_APPSPEC, mode='w'
+        )
         self.service_name = 'serviceTest'
         self.service_arn = 'arn:aws:ecs:::service/serviceTest'
         # setup default optional values
         self.cluster_name = 'default'
         self.cluster_arn = 'arn:aws:ecs:::cluster/default'
         self.application_name = get_app_name(
-            self.service_name, self.cluster_name, None)
+            self.service_name, self.cluster_name, None
+        )
         self.deployment_group_name = get_deploy_group_name(
-            self.service_name, self.cluster_name, None)
+            self.service_name, self.cluster_name, None
+        )
         # setup test response resources
         self.missing_properties_appspec = files.create_file(
-            'appspec_bad.yaml', self.BAD_APPSPEC, mode='w')
-        self.task_definition_arn = \
+            'appspec_bad.yaml', self.BAD_APPSPEC, mode='w'
+        )
+        self.task_definition_arn = (
             'arn:aws:ecs::1234567890:task-definition\\test:2'
+        )
         self.deployment_id = 'd-1234567XX'
         self.mock_deployer = CodeDeployer(None, self.APPSPEC_DICT)
         self.mock_deployer.update_task_def_arn(self.task_definition_arn)
-        self.expected_stdout = ("Successfully registered new ECS task "
-                                "definition " + self.task_definition_arn + "\n"
-                                "Successfully created deployment " +
-                                self.deployment_id + "\n"
-                                "Waiting for " + self.deployment_id +
-                                " to succeed (will wait up to 30 minutes)..."
-                                "\nSuccessfully deployed "
-                                + self.task_definition_arn + " to service '"
-                                + self.service_name + "'\n")
+        self.expected_stdout = (
+            "Successfully registered new ECS task "
+            "definition " + self.task_definition_arn + "\n"
+            "Successfully created deployment " + self.deployment_id + "\n"
+            "Waiting for "
+            + self.deployment_id
+            + " to succeed (will wait up to 30 minutes)..."
+            "\nSuccessfully deployed "
+            + self.task_definition_arn
+            + " to service '"
+            + self.service_name
+            + "'\n"
+        )
 
     def tearDown(self):
         super(TestDeployCommand, self).tearDown()
@@ -133,24 +149,29 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --task-definition ' + self.task_def_file
         cmdline += ' --codedeploy-appspec ' + self.appspec_file
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                self.application_name, self.deployment_group_name)
+                self.application_name, self.deployment_group_name
+            )
+        )
 
         self.parsed_responses = self._get_parsed_responses(
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name)
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+        )
 
         expected_params = self._get_expected_params(
-                                    self.service_name,
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name,
-                                    expected_create_deployment_params)
+            self.service_name,
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+            expected_create_deployment_params,
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, self.expected_stdout)
 
@@ -161,24 +182,29 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --task-definition ' + self.task_def_file
         cmdline += ' --codedeploy-appspec ' + self.appspec_file
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                self.application_name, self.deployment_group_name)
+                self.application_name, self.deployment_group_name
+            )
+        )
 
         self.parsed_responses = self._get_parsed_responses(
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name)
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+        )
 
         expected_params = self._get_expected_params(
-                                    self.service_arn,
-                                    self.cluster_arn,
-                                    self.application_name,
-                                    self.deployment_group_name,
-                                    expected_create_deployment_params)
+            self.service_arn,
+            self.cluster_arn,
+            self.application_name,
+            self.deployment_group_name,
+            expected_create_deployment_params,
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, self.expected_stdout)
 
@@ -188,24 +214,29 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --task-definition ' + self.task_def_file
         cmdline += ' --codedeploy-appspec ' + self.appspec_file_json
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                self.application_name, self.deployment_group_name)
+                self.application_name, self.deployment_group_name
+            )
+        )
 
         self.parsed_responses = self._get_parsed_responses(
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name)
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+        )
 
         expected_params = self._get_expected_params(
-                                    self.service_name,
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name,
-                                    expected_create_deployment_params)
+            self.service_name,
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+            expected_create_deployment_params,
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, self.expected_stdout)
 
@@ -215,9 +246,11 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --task-definition ' + self.task_def_file
         cmdline += ' --codedeploy-appspec ' + self.appspec_file
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                self.application_name, self.deployment_group_name)
+                self.application_name, self.deployment_group_name
+            )
+        )
 
         custom_deployment_grp_response = {
             'deploymentGroupInfo': {
@@ -225,47 +258,55 @@ class TestDeployCommand(BaseAWSCommandPa
                 'deploymentGroupName': self.deployment_group_name,
                 'computePlatform': 'ECS',
                 'blueGreenDeploymentConfiguration': {
-                    'deploymentReadyOption': {
-                        'waitTimeInMinutes': 5
-                    },
+                    'deploymentReadyOption': {'waitTimeInMinutes': 5},
                     'terminateBlueInstancesOnDeploymentSuccess': {
                         'terminationWaitTimeInMinutes': 60
-                    }
+                    },
                 },
-                'ecsServices': [{
-                    'serviceName': self.service_name,
-                    'clusterName': self.cluster_name
-                }]
+                'ecsServices': [
+                    {
+                        'serviceName': self.service_name,
+                        'clusterName': self.cluster_name,
+                    }
+                ],
             }
         }
         custom_timeout = str(60 + 5 + TIMEOUT_BUFFER_MIN)
 
         self.parsed_responses = self._get_parsed_responses(
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name)
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+        )
 
         self.parsed_responses[2] = custom_deployment_grp_response
 
         expected_params = self._get_expected_params(
-                                    self.service_name,
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name,
-                                    expected_create_deployment_params)
-
-        expected_stdout = ("Successfully registered new ECS task "
-                           "definition " + self.task_definition_arn + "\n"
-                           "Successfully created deployment " +
-                           self.deployment_id + "\n"
-                           "Waiting for " + self.deployment_id +
-                           " to succeed (will wait up to " + custom_timeout
-                           + " minutes)...\nSuccessfully deployed "
-                           + self.task_definition_arn + " to service '"
-                           + self.service_name + "'\n")
+            self.service_name,
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+            expected_create_deployment_params,
+        )
+
+        expected_stdout = (
+            "Successfully registered new ECS task "
+            "definition " + self.task_definition_arn + "\n"
+            "Successfully created deployment " + self.deployment_id + "\n"
+            "Waiting for "
+            + self.deployment_id
+            + " to succeed (will wait up to "
+            + custom_timeout
+            + " minutes)...\nSuccessfully deployed "
+            + self.task_definition_arn
+            + " to service '"
+            + self.service_name
+            + "'\n"
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, expected_stdout)
 
@@ -275,9 +316,11 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --task-definition ' + self.task_def_file
         cmdline += ' --codedeploy-appspec ' + self.appspec_file
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                self.application_name, self.deployment_group_name)
+                self.application_name, self.deployment_group_name
+            )
+        )
 
         custom_deployment_grp_response = {
             'deploymentGroupInfo': {
@@ -285,47 +328,55 @@ class TestDeployCommand(BaseAWSCommandPa
                 'deploymentGroupName': self.deployment_group_name,
                 'computePlatform': 'ECS',
                 'blueGreenDeploymentConfiguration': {
-                    'deploymentReadyOption': {
-                        'waitTimeInMinutes': 90
-                    },
+                    'deploymentReadyOption': {'waitTimeInMinutes': 90},
                     'terminateBlueInstancesOnDeploymentSuccess': {
                         'terminationWaitTimeInMinutes': 300
-                    }
+                    },
                 },
-                'ecsServices': [{
-                    'serviceName': self.service_name,
-                    'clusterName': self.cluster_name
-                }]
+                'ecsServices': [
+                    {
+                        'serviceName': self.service_name,
+                        'clusterName': self.cluster_name,
+                    }
+                ],
             }
         }
         max_timeout = str(MAX_WAIT_MIN)
 
         self.parsed_responses = self._get_parsed_responses(
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name)
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+        )
 
         self.parsed_responses[2] = custom_deployment_grp_response
 
         expected_params = self._get_expected_params(
-                                    self.service_name,
-                                    self.cluster_name,
-                                    self.application_name,
-                                    self.deployment_group_name,
-                                    expected_create_deployment_params)
-
-        expected_stdout = ("Successfully registered new ECS task "
-                           "definition " + self.task_definition_arn + "\n"
-                           "Successfully created deployment " +
-                           self.deployment_id + "\n"
-                           "Waiting for " + self.deployment_id +
-                           " to succeed (will wait up to " + max_timeout
-                           + " minutes)...\nSuccessfully deployed "
-                           + self.task_definition_arn + " to service '"
-                           + self.service_name + "'\n")
+            self.service_name,
+            self.cluster_name,
+            self.application_name,
+            self.deployment_group_name,
+            expected_create_deployment_params,
+        )
+
+        expected_stdout = (
+            "Successfully registered new ECS task "
+            "definition " + self.task_definition_arn + "\n"
+            "Successfully created deployment " + self.deployment_id + "\n"
+            "Waiting for "
+            + self.deployment_id
+            + " to succeed (will wait up to "
+            + max_timeout
+            + " minutes)...\nSuccessfully deployed "
+            + self.task_definition_arn
+            + " to service '"
+            + self.service_name
+            + "'\n"
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, expected_stdout)
 
@@ -343,19 +394,27 @@ class TestDeployCommand(BaseAWSCommandPa
         cmdline += ' --codedeploy-deployment-group ' + custom_dgp
         cmdline += ' --cluster ' + custom_cluster
 
-        expected_create_deployment_params = \
+        expected_create_deployment_params = (
             self.mock_deployer._get_create_deploy_request(
-                custom_app, custom_dgp)
+                custom_app, custom_dgp
+            )
+        )
 
         self.parsed_responses = self._get_parsed_responses(
-            custom_cluster, custom_app, custom_dgp)
+            custom_cluster, custom_app, custom_dgp
+        )
 
         expected_params = self._get_expected_params(
-            self.service_name, custom_cluster, custom_app,
-            custom_dgp, expected_create_deployment_params)
+            self.service_name,
+            custom_cluster,
+            custom_app,
+            custom_dgp,
+            expected_create_deployment_params,
+        )
 
         stdout, _, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 0)
+            cmdline, expected_params, 0
+        )
 
         self.assertEqual(stdout, self.expected_stdout)
 
@@ -367,17 +426,20 @@ class TestDeployCommand(BaseAWSCommandPa
 
         self.parsed_responses = [
             {
-                'services': [{
-                    'serviceArn': self.service_arn,
-                    'serviceName': self.service_name,
-                    'clusterArn': 'arn:aws:ecs:::cluster/' + self.cluster_name
-                }]
+                'services': [
+                    {
+                        'serviceArn': self.service_arn,
+                        'serviceName': self.service_name,
+                        'clusterArn': 'arn:aws:ecs:::cluster/'
+                        + self.cluster_name,
+                    }
+                ]
             },
             {
                 'application': {
                     'applicationId': '876uyh6-45tdfg',
                     'applicationName': self.application_name,
-                    'computePlatform': 'ECS'
+                    'computePlatform': 'ECS',
                 }
             },
             {
@@ -386,26 +448,26 @@ class TestDeployCommand(BaseAWSCommandPa
                     'deploymentGroupName': self.deployment_group_name,
                     'computePlatform': 'ECS',
                     'blueGreenDeploymentConfiguration': {
-                        'deploymentReadyOption': {
-                            'waitTimeInMinutes': 5
-                        },
+                        'deploymentReadyOption': {'waitTimeInMinutes': 5},
                         'terminateBlueInstancesOnDeploymentSuccess': {
                             'terminationWaitTimeInMinutes': 10
-                        }
+                        },
                     },
-                    'ecsServices': [{
-                        'serviceName': self.service_name,
-                        'clusterName': self.cluster_name
-                    }]
+                    'ecsServices': [
+                        {
+                            'serviceName': self.service_name,
+                            'clusterName': self.cluster_name,
+                        }
+                    ],
                 }
             },
             {
                 'taskDefinition': {
                     'taskDefinitionArn': self.task_definition_arn,
                     'family': 'test',
-                    'containerDefinitions': []
+                    'containerDefinitions': [],
                 }
-            }
+            },
         ]
 
         expected_params = [
@@ -413,34 +475,39 @@ class TestDeployCommand(BaseAWSCommandPa
                 'operation': 'DescribeServices',
                 'params': {
                     'cluster': self.cluster_name,
-                    'services': [self.service_name]
-                }
+                    'services': [self.service_name],
+                },
             },
             {
                 'operation': 'GetApplication',
-                'params': {'applicationName': self.application_name}
+                'params': {'applicationName': self.application_name},
             },
             {
                 'operation': 'GetDeploymentGroup',
                 'params': {
                     'applicationName': self.application_name,
-                    'deploymentGroupName': self.deployment_group_name
-                }
+                    'deploymentGroupName': self.deployment_group_name,
+                },
             },
             {
                 'operation': 'RegisterTaskDefinition',
-                'params': self.TASK_DEFINITION_JSON
-            }
+                'params': self.TASK_DEFINITION_JSON,
+            },
         ]
 
-        expected_stdout = ("Successfully registered new ECS task "
-                           "definition " + self.task_definition_arn + "\n")
-
-        expected_stderr = ("\nError: Resource 'properties' must "
-                           "include property 'taskDefinition'\n")
+        expected_stdout = (
+            "Successfully registered new ECS task "
+            "definition " + self.task_definition_arn + "\n"
+        )
+
+        expected_stderr = (
+            "\nError: Resource 'properties' must "
+            "include property 'taskDefinition'\n"
+        )
 
         stdout, stderr, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 255)
+            cmdline, expected_params, 255
+        )
 
         self.assertEqual(stdout, expected_stdout)
         self.assertEqual(stderr, expected_stderr)
@@ -453,17 +520,20 @@ class TestDeployCommand(BaseAWSCommandPa
 
         self.parsed_responses = [
             {
-                'services': [{
-                    'serviceArn': self.service_arn,
-                    'serviceName': self.service_name,
-                    'clusterArn': 'arn:aws:ecs:::cluster/' + self.cluster_name
-                }]
+                'services': [
+                    {
+                        'serviceArn': self.service_arn,
+                        'serviceName': self.service_name,
+                        'clusterArn': 'arn:aws:ecs:::cluster/'
+                        + self.cluster_name,
+                    }
+                ]
             },
             {
                 'application': {
                     'applicationId': '876uyh6-45tdfg',
                     'applicationName': self.application_name,
-                    'computePlatform': 'Server'
+                    'computePlatform': 'Server',
                 }
             },
             {
@@ -471,12 +541,14 @@ class TestDeployCommand(BaseAWSCommandPa
                     'applicationName': self.application_name,
                     'deploymentGroupName': self.deployment_group_name,
                     'computePlatform': 'ECS',
-                    'ecsServices': [{
-                        'serviceName': self.service_name,
-                        'clusterName': self.cluster_name
-                    }]
+                    'ecsServices': [
+                        {
+                            'serviceName': self.service_name,
+                            'clusterName': self.cluster_name,
+                        }
+                    ],
                 }
-            }
+            },
         ]
 
         expected_params = [
@@ -484,33 +556,38 @@ class TestDeployCommand(BaseAWSCommandPa
                 'operation': 'DescribeServices',
                 'params': {
                     'cluster': self.cluster_name,
-                    'services': [self.service_name]
-                }
+                    'services': [self.service_name],
+                },
             },
             {
                 'operation': 'GetApplication',
-                'params': {'applicationName': self.application_name}
+                'params': {'applicationName': self.application_name},
             },
             {
                 'operation': 'GetDeploymentGroup',
                 'params': {
                     'applicationName': self.application_name,
-                    'deploymentGroupName': self.deployment_group_name
-                }
-            }
+                    'deploymentGroupName': self.deployment_group_name,
+                },
+            },
         ]
 
-        expected_stderr = ("\nError: Application '" + self.application_name +
-                           "' must support 'ECS' compute platform\n")
+        expected_stderr = (
+            "\nError: Application '"
+            + self.application_name
+            + "' must support 'ECS' compute platform\n"
+        )
 
         stdout, stderr, _ = self.assert_params_list_for_cmd(
-            cmdline, expected_params, 255)
+            cmdline, expected_params, 255
+        )
 
         self.assertEqual('', stdout)
         self.assertEqual(expected_stderr, stderr)
 
-    def assert_params_list_for_cmd(self, cmd, params, expected_rc=0,
-                                   stderr_contains=None):
+    def assert_params_list_for_cmd(
+        self, cmd, params, expected_rc=0, stderr_contains=None
+    ):
         stdout, stderr, rc = self.run_cmd(cmd, expected_rc)
         if stderr_contains is not None:
             self.assertIn(stderr_contains, stderr)
@@ -518,63 +595,69 @@ class TestDeployCommand(BaseAWSCommandPa
         self.assertEqual(len(self.operations_called), len(params))
         for i, param in enumerate(params):
             self.assertEqual(
-                self.operations_called[i][0].name, param['operation'])
-            self.assertEqual(
-                self.operations_called[i][1], param['params'])
+                self.operations_called[i][0].name, param['operation']
+            )
+            self.assertEqual(self.operations_called[i][1], param['params'])
 
         return stdout, stderr, rc
 
-    def _get_expected_params(self, service_name, cluster_name, app_name,
-                             dgp_name, create_deployment_params):
+    def _get_expected_params(
+        self,
+        service_name,
+        cluster_name,
+        app_name,
+        dgp_name,
+        create_deployment_params,
+    ):
         return [
             {
                 'operation': 'DescribeServices',
                 'params': {
                     'cluster': cluster_name,
-                    'services': [service_name]
-                }
+                    'services': [service_name],
+                },
             },
             {
                 'operation': 'GetApplication',
-                'params': {'applicationName': app_name}
+                'params': {'applicationName': app_name},
             },
             {
                 'operation': 'GetDeploymentGroup',
                 'params': {
                     'applicationName': app_name,
-                    'deploymentGroupName': dgp_name
-                }
+                    'deploymentGroupName': dgp_name,
+                },
             },
             {
                 'operation': 'RegisterTaskDefinition',
-                'params': self.TASK_DEFINITION_JSON
+                'params': self.TASK_DEFINITION_JSON,
             },
             {
                 'operation': 'CreateDeployment',
-                'params': create_deployment_params
+                'params': create_deployment_params,
             },
             {
                 'operation': 'GetDeployment',
-                'params': {
-                    'deploymentId': self.deployment_id
-                }
-            }
+                'params': {'deploymentId': self.deployment_id},
+            },
         ]
 
     def _get_parsed_responses(self, cluster_name, app_name, dgp_name):
         return [
             {
-                'services': [{
-                    'serviceArn': self.service_arn,
-                    'serviceName': self.service_name,
-                    'clusterArn': 'arn:aws:ecs:::cluster/' + cluster_name
-                }]
+                'services': [
+                    {
+                        'serviceArn': self.service_arn,
+                        'serviceName': self.service_name,
+                        'clusterArn': 'arn:aws:ecs:::cluster/' + cluster_name,
+                    }
+                ]
             },
             {
                 'application': {
                     'applicationId': '876uyh6-45tdfg',
                     'applicationName': app_name,
-                    'computePlatform': 'ECS'
+                    'computePlatform': 'ECS',
                 }
             },
             {
@@ -583,33 +666,31 @@ class TestDeployCommand(BaseAWSCommandPa
                     'deploymentGroupName': dgp_name,
                     'computePlatform': 'ECS',
                     'blueGreenDeploymentConfiguration': {
-                        'deploymentReadyOption': {
-                            'waitTimeInMinutes': 5
-                        },
+                        'deploymentReadyOption': {'waitTimeInMinutes': 5},
                         'terminateBlueInstancesOnDeploymentSuccess': {
                             'terminationWaitTimeInMinutes': 10
-                        }
+                        },
                     },
-                    'ecsServices': [{
-                        'serviceName': self.service_name,
-                        'clusterName': cluster_name
-                    }]
+                    'ecsServices': [
+                        {
+                            'serviceName': self.service_name,
+                            'clusterName': cluster_name,
+                        }
+                    ],
                 }
             },
             {
                 'taskDefinition': {
                     'taskDefinitionArn': self.task_definition_arn,
                     'family': 'test',
-                    'containerDefinitions': []
+                    'containerDefinitions': [],
                 }
             },
-            {
-                'deploymentId': self.deployment_id
-            },
+            {'deploymentId': self.deployment_id},
             {
                 'deploymentInfo': {
                     'applicationName': app_name,
-                    'status': 'Succeeded'
+                    'status': 'Succeeded',
                 }
-            }
+            },
         ]
diff -pruN 2.23.6-1/tests/functional/ecs/test_execute_command.py 2.31.35-1/tests/functional/ecs/test_execute_command.py
--- 2.23.6-1/tests/functional/ecs/test_execute_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ecs/test_execute_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,94 +13,105 @@
 import errno
 import json
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest, BaseAWSHelpOutputTest
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    mock,
+)
 
 
 class TestExecuteCommand(BaseAWSCommandParamsTest):
-
     @mock.patch('awscli.customizations.ecs.executecommand.check_call')
     def test_execute_command_success(self, mock_check_call):
-        cmdline = 'ecs execute-command --cluster someCluster ' \
-                  '--task someTaskId ' \
-                  '--interactive --command ls ' \
-                  '--region us-west-2'
+        cmdline = (
+            'ecs execute-command --cluster someCluster '
+            '--task someTaskId '
+            '--interactive --command ls '
+            '--region us-west-2'
+        )
         mock_check_call.return_value = 0
-        self.parsed_responses = [{
-            "containerName": "someContainerName",
-            "containerArn": "someContainerArn",
-            "taskArn": "someTaskArn",
-            "session": {"sessionId": "session-id",
-                        "tokenValue": "token-value",
-                        "streamUrl": "stream-url"},
-            "clusterArn": "someCluster",
-            "interactive": "true"
-        }, {
-            "failures": [],
-            "tasks": [
-                {
-                    "clusterArn": "ecs/someCLuster",
-                    "desiredStatus": "RUNNING",
-                    "createdAt": "1611619514.46",
-                    "taskArn": "someTaskArn",
-                    "containers": [
-                        {
-                            "containerArn": "ecs/someContainerArn",
-                            "taskArn": "ecs/someTaskArn",
-                            "name": "someContainerName",
-                            "managedAgents": [
-                                {
-                                    "reason": "Execute Command Agent started",
-                                    "lastStatus": "RUNNING",
-                                    "lastStartedAt": "1611619528.272",
-                                    "name": "ExecuteCommandAgent"
-                                }
-                            ],
-                            "runtimeId": "someRuntimeId"
-                        },
-                        {
-                            "containerArn": "ecs/dummyContainerArn",
-                            "taskArn": "ecs/someTaskArn",
-                            "name": "dummyContainerName",
-                            "managedAgents": [
-                                {
-                                    "reason": "Execute Command Agent started",
-                                    "lastStatus": "RUNNING",
-                                    "lastStartedAt": "1611619528.272",
-                                    "name": "ExecuteCommandAgent"
-                                }
-                            ],
-                            "runtimeId": "dummyRuntimeId"
-                        }
-                    ],
-                    "lastStatus": "RUNNING",
-                    "enableExecuteCommand": "true"
-                }
-            ]
-        }]
+        self.parsed_responses = [
+            {
+                "containerName": "someContainerName",
+                "containerArn": "someContainerArn",
+                "taskArn": "someTaskArn",
+                "session": {
+                    "sessionId": "session-id",
+                    "tokenValue": "token-value",
+                    "streamUrl": "stream-url",
+                },
+                "clusterArn": "someCluster",
+                "interactive": "true",
+            },
+            {
+                "failures": [],
+                "tasks": [
+                    {
+                        "clusterArn": "ecs/someCLuster",
+                        "desiredStatus": "RUNNING",
+                        "createdAt": "1611619514.46",
+                        "taskArn": "someTaskArn",
+                        "containers": [
+                            {
+                                "containerArn": "ecs/someContainerArn",
+                                "taskArn": "ecs/someTaskArn",
+                                "name": "someContainerName",
+                                "managedAgents": [
+                                    {
+                                        "reason": "Execute Command Agent started",
+                                        "lastStatus": "RUNNING",
+                                        "lastStartedAt": "1611619528.272",
+                                        "name": "ExecuteCommandAgent",
+                                    }
+                                ],
+                                "runtimeId": "someRuntimeId",
+                            },
+                            {
+                                "containerArn": "ecs/dummyContainerArn",
+                                "taskArn": "ecs/someTaskArn",
+                                "name": "dummyContainerName",
+                                "managedAgents": [
+                                    {
+                                        "reason": "Execute Command Agent started",
+                                        "lastStatus": "RUNNING",
+                                        "lastStartedAt": "1611619528.272",
+                                        "name": "ExecuteCommandAgent",
+                                    }
+                                ],
+                                "runtimeId": "dummyRuntimeId",
+                            },
+                        ],
+                        "lastStatus": "RUNNING",
+                        "enableExecuteCommand": "true",
+                    }
+                ],
+            },
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'ExecuteCommand'
-                         )
+        self.assertEqual(self.operations_called[0][0].name, 'ExecuteCommand')
         actual_response = json.loads(mock_check_call.call_args[0][0][1])
         self.assertEqual(
-            {"sessionId": "session-id",
-             "tokenValue": "token-value",
-             "streamUrl": "stream-url"},
-            actual_response
+            {
+                "sessionId": "session-id",
+                "tokenValue": "token-value",
+                "streamUrl": "stream-url",
+            },
+            actual_response,
         )
 
     @mock.patch('awscli.customizations.ecs.executecommand.check_call')
     def test_execute_command_fails(self, mock_check_call):
-        cmdline = 'ecs execute-command --cluster someCluster ' \
-                  '--task someTaskId ' \
-                  '--interactive --command ls ' \
-                  '--region us-west-2'
+        cmdline = (
+            'ecs execute-command --cluster someCluster '
+            '--task someTaskId '
+            '--interactive --command ls '
+            '--region us-west-2'
+        )
         mock_check_call.side_effect = OSError(errno.ENOENT, 'some error')
         self.run_cmd(cmdline, expected_rc=255)
 
 
 class TestHelpOutput(BaseAWSHelpOutputTest):
-
     def test_execute_command_output(self):
         self.driver.main(['ecs', 'execute-command', 'help'])
         self.assert_contains('Output\n======\n\nNone')
diff -pruN 2.23.6-1/tests/functional/eks/test_get_token.py 2.31.35-1/tests/functional/eks/test_get_token.py
--- 2.23.6-1/tests/functional/eks/test_get_token.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/test_get_token.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,12 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import base64
-from datetime import datetime
 import json
 import os
+from datetime import datetime
 
-from awscli.testutils import mock
-from awscli.testutils import BaseAWSCommandParamsTest
 from awscli.compat import urlparse
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestGetTokenCommand(BaseAWSCommandParamsTest):
@@ -36,7 +35,6 @@ class TestGetTokenCommand(BaseAWSCommand
         response, _, _ = self.run_cmd(cmd)
         return json.loads(response)
 
-
     def assert_url_correct(
         self,
         response,
@@ -115,7 +113,8 @@ class TestGetTokenCommand(BaseAWSCommand
         cmd += ' --query apiVersion'
         response = self.run_get_token(cmd)
         self.assertEqual(
-            response, "client.authentication.k8s.io/v1beta1",
+            response,
+            "client.authentication.k8s.io/v1beta1",
         )
 
     @mock.patch('awscli.customizations.eks.get_token.datetime')
@@ -150,7 +149,7 @@ class TestGetTokenCommand(BaseAWSCommand
         self.assert_url_correct(
             response,
             expected_endpoint='sts.us-west-2.amazonaws.com',
-            expected_signing_region='us-west-2'
+            expected_signing_region='us-west-2',
         )
 
     def test_url_with_arn(self):
@@ -247,7 +246,10 @@ class TestGetTokenCommand(BaseAWSCommand
             "client.authentication.k8s.io/v1beta1",
         )
 
-        self.assertEqual(stderr, "",)
+        self.assertEqual(
+            stderr,
+            "",
+        )
 
     def test_api_version_discovery_v1(self):
         self.set_kubernetes_exec_info('v1')
diff -pruN 2.23.6-1/tests/functional/eks/test_kubeconfig.py 2.31.35-1/tests/functional/eks/test_kubeconfig.py
--- 2.23.6-1/tests/functional/eks/test_kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/test_kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,65 +17,65 @@ import tempfile
 
 from botocore.compat import OrderedDict
 
+from awscli.customizations.eks.kubeconfig import (
+    Kubeconfig,
+    KubeconfigInaccessableError,
+    KubeconfigLoader,
+    KubeconfigValidator,
+    KubeconfigWriter,
+    _get_new_kubeconfig_content,
+)
 from awscli.testutils import mock, unittest
 from tests.functional.eks.test_util import get_testdata
-from awscli.customizations.eks.kubeconfig import (_get_new_kubeconfig_content,
-                                                  KubeconfigWriter,
-                                                  KubeconfigLoader,
-                                                  KubeconfigValidator,
-                                                  Kubeconfig,
-                                                  KubeconfigInaccessableError)
+
+
 class TestKubeconfigWriter(unittest.TestCase):
     def setUp(self):
         self._writer = KubeconfigWriter()
 
     def test_write_order(self):
-        content = OrderedDict([
-            ("current-context", "context"),
-            ("apiVersion", "v1")
-        ])
+        content = OrderedDict(
+            [("current-context", "context"), ("apiVersion", "v1")]
+        )
         file_to_write = tempfile.NamedTemporaryFile(mode='w').name
         self.addCleanup(os.remove, file_to_write)
 
         config = Kubeconfig(file_to_write, content)
         self._writer.write_kubeconfig(config)
 
-        with open(file_to_write, 'r') as stream:
-            self.assertMultiLineEqual(stream.read(),
-                                      "current-context: context\n"
-                                      "apiVersion: v1\n")
+        with open(file_to_write) as stream:
+            self.assertMultiLineEqual(
+                stream.read(), "current-context: context\n" "apiVersion: v1\n"
+            )
+
     def test_write_makedirs(self):
-        content = OrderedDict([
-            ("current-context", "context"),
-            ("apiVersion", "v1")
-        ])
+        content = OrderedDict(
+            [("current-context", "context"), ("apiVersion", "v1")]
+        )
         containing_dir = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, containing_dir)
-        config_path = os.path.join(containing_dir,
-                                   "dir1",
-                                   "dir2",
-                                   "dir3")
+        config_path = os.path.join(containing_dir, "dir1", "dir2", "dir3")
 
         config = Kubeconfig(config_path, content)
         self._writer.write_kubeconfig(config)
 
-        with open(config_path, 'r') as stream:
-            self.assertMultiLineEqual(stream.read(),
-                                      "current-context: context\n"
-                                      "apiVersion: v1\n")
+        with open(config_path) as stream:
+            self.assertMultiLineEqual(
+                stream.read(), "current-context: context\n" "apiVersion: v1\n"
+            )
 
     def test_write_directory(self):
-        content = OrderedDict([
-            ("current-context", "context"),
-            ("apiVersion", "v1")
-        ])
+        content = OrderedDict(
+            [("current-context", "context"), ("apiVersion", "v1")]
+        )
         containing_dir = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, containing_dir)
 
         config = Kubeconfig(containing_dir, content)
-        self.assertRaises(KubeconfigInaccessableError,
-                          self._writer.write_kubeconfig,
-                          config)
+        self.assertRaises(
+            KubeconfigInaccessableError, self._writer.write_kubeconfig, config
+        )
+
 
 class TestKubeconfigLoader(unittest.TestCase):
     def setUp(self):
@@ -96,53 +96,64 @@ class TestKubeconfigLoader(unittest.Test
         """
         old_path = os.path.abspath(get_testdata(config))
         new_path = os.path.join(self._temp_directory, config)
-        shutil.copy2(old_path,
-                     new_path)
+        shutil.copy2(old_path, new_path)
         return new_path
 
     def test_load_simple(self):
         simple_path = self._clone_config("valid_simple")
-        content = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("server", "simple")
-                    ])),
-                    ("name", "simple")
-                ])
-            ]),
-            ("contexts", None),
-            ("current-context", "simple"),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", None)
-        ])
+        content = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict([("server", "simple")]),
+                                ),
+                                ("name", "simple"),
+                            ]
+                        )
+                    ],
+                ),
+                ("contexts", None),
+                ("current-context", "simple"),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", None),
+            ]
+        )
         loaded_config = self._loader.load_kubeconfig(simple_path)
         self.assertEqual(loaded_config.content, content)
-        self._validator.validate_config.assert_called_with(Kubeconfig(simple_path,content))
+        self._validator.validate_config.assert_called_with(
+            Kubeconfig(simple_path, content)
+        )
 
     def test_load_noexist(self):
-        no_exist_path = os.path.join(self._temp_directory,
-                                     "this_does_not_exist")
+        no_exist_path = os.path.join(
+            self._temp_directory, "this_does_not_exist"
+        )
         loaded_config = self._loader.load_kubeconfig(no_exist_path)
-        self.assertEqual(loaded_config.content,
-                         _get_new_kubeconfig_content())
+        self.assertEqual(loaded_config.content, _get_new_kubeconfig_content())
         self._validator.validate_config.assert_called_with(
-            Kubeconfig(no_exist_path, _get_new_kubeconfig_content()))
+            Kubeconfig(no_exist_path, _get_new_kubeconfig_content())
+        )
 
     def test_load_empty(self):
         empty_path = self._clone_config("valid_empty_existing")
         loaded_config = self._loader.load_kubeconfig(empty_path)
-        self.assertEqual(loaded_config.content,
-                         _get_new_kubeconfig_content())
+        self.assertEqual(loaded_config.content, _get_new_kubeconfig_content())
         self._validator.validate_config.assert_called_with(
-            Kubeconfig(empty_path,
-                       _get_new_kubeconfig_content()))
+            Kubeconfig(empty_path, _get_new_kubeconfig_content())
+        )
 
     def test_load_directory(self):
         current_directory = self._temp_directory
-        self.assertRaises(KubeconfigInaccessableError,
-                          self._loader.load_kubeconfig,
-                          current_directory)
-        self._validator.validate_config.assert_not_called()
\ No newline at end of file
+        self.assertRaises(
+            KubeconfigInaccessableError,
+            self._loader.load_kubeconfig,
+            current_directory,
+        )
+        self._validator.validate_config.assert_not_called()
diff -pruN 2.23.6-1/tests/functional/eks/test_update_kubeconfig.py 2.31.35-1/tests/functional/eks/test_update_kubeconfig.py
--- 2.23.6-1/tests/functional/eks/test_update_kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/test_update_kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,16 +21,18 @@ from botocore.session import get_session
 from awscli.customizations.eks.exceptions import EKSClusterError
 from awscli.customizations.eks.kubeconfig import (
     KubeconfigCorruptedError,
-    KubeconfigInaccessableError
+    KubeconfigInaccessableError,
 )
 from awscli.customizations.eks.update_kubeconfig import UpdateKubeconfigCommand
-from awscli.testutils import mock, unittest, capture_output
+from awscli.testutils import capture_output, mock, unittest
 from tests.functional.eks.test_util import (
-    describe_cluster_response,
+    assume_role_response,
     describe_cluster_creating_response,
-    get_testdata
+    describe_cluster_response,
+    get_testdata,
 )
 
+
 def sanitize_output(output):
     """
     Trims output and removes all lines after a line starting with warning.
@@ -46,10 +48,12 @@ def sanitize_output(output):
             to_return += '\n'
     return to_return.strip()
 
+
 def build_environment(entries):
-    """ Build an environment variable from a list of strings. """
+    """Build an environment variable from a list of strings."""
     return os.path.pathsep.join(entries)
 
+
 class TestUpdateKubeconfig(unittest.TestCase):
     def setUp(self):
         self.create_client_patch = mock.patch(
@@ -63,6 +67,15 @@ class TestUpdateKubeconfig(unittest.Test
         self.client.describe_cluster.return_value = describe_cluster_response()
         self.mock_create_client.return_value = self.client
 
+        # Set up the sts_client_mock
+        self.sts_client_mock = mock.Mock()
+        self.sts_client_mock.assume_role.return_value = assume_role_response()
+
+        # Ensure the mock_create_client correctly returns the appropriate mock
+        self.mock_create_client.side_effect = lambda service_name, **kwargs: (
+            self.sts_client_mock if service_name == "sts" else self.client
+        )
+
         self.command = UpdateKubeconfigCommand(self.session)
         self.maxDiff = None
 
@@ -76,9 +89,8 @@ class TestUpdateKubeconfig(unittest.Test
         """
         with open(get_testdata(file)) as f:
             self.assertMultiLineEqual(
-                    sanitize_output(captured.stdout.getvalue()),
-                    f.read().strip()
-                )
+                sanitize_output(captured.stdout.getvalue()), f.read().strip()
+            )
 
     def _get_temp_config(self, config):
         """
@@ -99,11 +111,9 @@ class TestUpdateKubeconfig(unittest.Test
         self.addCleanup(shutil.rmtree, self._temp_directory)
         if files is not None:
             for file in files:
-                shutil.copy2(get_testdata(file),
-                            self._get_temp_config(file))
+                shutil.copy2(get_testdata(file), self._get_temp_config(file))
         return self._temp_directory
 
-
     def build_temp_environment_variable(self, configs):
         """
         Generate a string which is an environment variable
@@ -113,8 +123,9 @@ class TestUpdateKubeconfig(unittest.Test
         to put in the environment variable
         :type configs: list
         """
-        return build_environment([self._get_temp_config(config)
-                                  for config in configs])
+        return build_environment(
+            [self._get_temp_config(config) for config in configs]
+        )
 
     def assert_config_state(self, config_name, correct_output_name):
         """
@@ -132,13 +143,16 @@ class TestUpdateKubeconfig(unittest.Test
         """
         with open(self._get_temp_config(config_name)) as file1:
             with open(get_testdata(correct_output_name)) as file2:
-                self.assertMultiLineEqual(file1.read().strip(),
-                                          file2.read().strip())
-
+                self.assertMultiLineEqual(
+                    file1.read().strip(), file2.read().strip()
+                )
 
-    def assert_cmd_dry(self, passed_config,
-                       env_variable_configs,
-                       default_config=os.path.join(".kube", "config")):
+    def assert_cmd_dry(
+        self,
+        passed_config,
+        env_variable_configs,
+        default_config=os.path.join(".kube", "config"),
+    ):
         """
         Run update-kubeconfig using dry-run,
         assert_cmd_dry runs directly referencing the testdata directory,
@@ -170,20 +184,26 @@ class TestUpdateKubeconfig(unittest.Test
         with capture_output() as captured:
             with mock.patch.dict(os.environ, {'KUBECONFIG': env_variable}):
                 with mock.patch(
-                        "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
-                        get_testdata(default_config)):
+                    "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
+                    get_testdata(default_config),
+                ):
                     self.command(args, None)
 
         self.mock_create_client.assert_called_once_with('eks')
-        self.client \
-            .describe_cluster.assert_called_once_with(name='ExampleCluster')
+        self.client.describe_cluster.assert_called_once_with(
+            name='ExampleCluster'
+        )
 
         return captured
 
-    def assert_cmd(self, configs, passed_config,
-                   env_variable_configs,
-                   default_config=os.path.join(".kube", "config"),
-                   verbose=False):
+    def assert_cmd(
+        self,
+        configs,
+        passed_config,
+        env_variable_configs,
+        default_config=os.path.join(".kube", "config"),
+        verbose=False,
+    ):
         """
         Run update-kubeconfig in a temp directory,
         This directory will have copies of all testdata files whose names
@@ -217,12 +237,14 @@ class TestUpdateKubeconfig(unittest.Test
         with mock.patch.dict(os.environ, {'KUBECONFIG': env_variable}):
             with mock.patch(
                 "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
-                            self._get_temp_config(default_config)):
+                self._get_temp_config(default_config),
+            ):
                 self.command(args, None)
 
         self.mock_create_client.assert_called_once_with('eks')
-        self.client\
-            .describe_cluster.assert_called_once_with(name='ExampleCluster')
+        self.client.describe_cluster.assert_called_once_with(
+            name='ExampleCluster'
+        )
 
     def test_dry_run_new(self):
         passed = "new_config"
@@ -261,14 +283,18 @@ class TestUpdateKubeconfig(unittest.Test
         self.assert_config_state("new_config", "output_single")
 
     def test_use_environment(self):
-        configs = ['invalid_string_clusters',
-                   'valid_empty_existing',
-                   'valid_existing']
+        configs = [
+            'invalid_string_clusters',
+            'valid_empty_existing',
+            'valid_existing',
+        ]
         passed = None
-        environment = ['does_not_exist',
-                       'invalid_string_clusters',
-                       'valid_empty_existing',
-                       'valid_existing']
+        environment = [
+            'does_not_exist',
+            'invalid_string_clusters',
+            'valid_empty_existing',
+            'valid_existing',
+        ]
 
         self.assert_cmd(configs, passed, environment)
         self.assert_config_state("does_not_exist", "output_single")
@@ -283,39 +309,48 @@ class TestUpdateKubeconfig(unittest.Test
         self.assert_config_state("valid_existing", "output_combined")
 
     def test_all_corrupted(self):
-        configs = ["invalid_string_cluster_entry",
-                   "invalid_string_contexts",
-                   "invalid_text"]
+        configs = [
+            "invalid_string_cluster_entry",
+            "invalid_string_contexts",
+            "invalid_text",
+        ]
         passed = None
-        environment = ["invalid_string_cluster_entry",
-                       "invalid_string_contexts",
-                       "invalid_text"]
+        environment = [
+            "invalid_string_cluster_entry",
+            "invalid_string_contexts",
+            "invalid_text",
+        ]
 
         with self.assertRaises(KubeconfigCorruptedError):
             self.assert_cmd(configs, passed, environment)
 
     def test_all_but_one_corrupted(self):
-        configs = ["valid_existing",
-                   "invalid_string_cluster_entry",
-                   "invalid_string_contexts",
-                   "invalid_text"]
+        configs = [
+            "valid_existing",
+            "invalid_string_cluster_entry",
+            "invalid_string_contexts",
+            "invalid_text",
+        ]
         passed = None
-        environment = ["valid_existing",
-                       "invalid_string_cluster_entry",
-                       "invalid_string_contexts",
-                       "invalid_text"]
+        environment = [
+            "valid_existing",
+            "invalid_string_cluster_entry",
+            "invalid_string_contexts",
+            "invalid_text",
+        ]
 
         self.assert_cmd(configs, passed, environment)
         self.assert_config_state("valid_existing", 'output_combined')
 
     def test_corrupted_and_missing(self):
-        configs = ["invalid_string_clusters",
-                   "invalid_string_users"]
+        configs = ["invalid_string_clusters", "invalid_string_users"]
         passed = None
-        environment = ["invalid_string_clusters",
-                       "does_not_exist",
-                       "does_not_exist2",
-                       "invalid_string_users"]
+        environment = [
+            "invalid_string_clusters",
+            "does_not_exist",
+            "does_not_exist2",
+            "invalid_string_users",
+        ]
 
         with self.assertRaises(KubeconfigCorruptedError):
             self.assert_cmd(configs, passed, environment)
@@ -332,39 +367,42 @@ class TestUpdateKubeconfig(unittest.Test
         configs = ["valid_existing"]
 
         self.initialize_tempfiles(configs)
-        env_variable = build_environment([
-            "",
-            self._get_temp_config("valid_existing")
-        ])
+        env_variable = build_environment(
+            ["", self._get_temp_config("valid_existing")]
+        )
         args = ["--name", "ExampleCluster"]
 
         with mock.patch.dict(os.environ, {'KUBECONFIG': env_variable}):
             with mock.patch(
                 "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
-                            self._get_temp_config("default_temp")):
+                self._get_temp_config("default_temp"),
+            ):
                 self.command(args, None)
 
         self.mock_create_client.assert_called_once_with('eks')
-        self.client\
-            .describe_cluster.assert_called_once_with(name='ExampleCluster')
+        self.client.describe_cluster.assert_called_once_with(
+            name='ExampleCluster'
+        )
         self.assert_config_state("valid_existing", "output_combined")
 
     def test_environmemt_all_empty(self):
         configs = ["valid_existing"]
 
         self.initialize_tempfiles(configs)
-        env_variable = build_environment(["", ""," ", "\t",""])
+        env_variable = build_environment(["", "", " ", "\t", ""])
         args = ["--name", "ExampleCluster"]
 
         with mock.patch.dict(os.environ, {'KUBECONFIG': env_variable}):
             with mock.patch(
                 "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
-                            self._get_temp_config("default_temp")):
+                self._get_temp_config("default_temp"),
+            ):
                 self.command(args, None)
 
         self.mock_create_client.assert_called_once_with('eks')
-        self.client\
-            .describe_cluster.assert_called_once_with(name='ExampleCluster')
+        self.client.describe_cluster.assert_called_once_with(
+            name='ExampleCluster'
+        )
         self.assert_config_state("default_temp", "output_single")
 
     def test_default_path_directory(self):
@@ -388,9 +426,7 @@ class TestUpdateKubeconfig(unittest.Test
     def test_update_existing_environment(self):
         configs = ["valid_old_data"]
         passed = None
-        environment = ["valid_old_data",
-                       "output_combined",
-                       "output_single"]
+        environment = ["valid_old_data", "output_combined", "output_single"]
 
         self.assert_cmd(configs, passed, environment)
         self.assert_config_state("valid_old_data", "output_combined")
@@ -399,8 +435,9 @@ class TestUpdateKubeconfig(unittest.Test
         configs = ["output_combined"]
         passed = "output_combined"
         environment = []
-        self.client.describe_cluster =\
-            mock.Mock(return_value=describe_cluster_creating_response())
+        self.client.describe_cluster = mock.Mock(
+            return_value=describe_cluster_creating_response()
+        )
         with self.assertRaises(EKSClusterError):
             self.assert_cmd(configs, passed, environment)
 
@@ -410,7 +447,9 @@ class TestUpdateKubeconfig(unittest.Test
         environment = []
 
         self.assert_cmd(configs, passed, environment)
-        self.assert_config_state("valid_changed_ordering", "output_combined_changed_ordering")
+        self.assert_config_state(
+            "valid_changed_ordering", "output_combined_changed_ordering"
+        )
 
     def test_update_old_api_version(self):
         configs = ["valid_old_api_version"]
@@ -418,4 +457,73 @@ class TestUpdateKubeconfig(unittest.Test
         environment = []
 
         self.assert_cmd(configs, passed, environment)
-        self.assert_config_state("valid_old_api_version", "valid_old_api_version_updated")
+        self.assert_config_state(
+            "valid_old_api_version", "valid_old_api_version_updated"
+        )
+
+    def test_assume_role(self):
+        """
+        Test that assume_role_arn is handled correctly when provided.
+        """
+        configs = ["valid_existing"]
+        self.initialize_tempfiles(configs)
+
+        # Include the --assume-role-arn argument
+        args = [
+            "--name",
+            "ExampleCluster",
+            "--assume-role-arn",
+            "arn:aws:iam::123456789012:role/test-role",
+        ]
+
+        # Mock environment variables and paths
+        kubeconfig_path = self._get_temp_config("valid_existing")
+        default_path = self._get_temp_config("default_temp")
+
+        with mock.patch.dict(os.environ, {'KUBECONFIG': kubeconfig_path}):
+            with mock.patch(
+                "awscli.customizations.eks.update_kubeconfig.DEFAULT_PATH",
+                default_path,
+            ):
+                self.command(args, None)
+
+        # Verify that assume_role was called with the correct parameters
+        self.sts_client_mock.assume_role.assert_called_once_with(
+            RoleArn="arn:aws:iam::123456789012:role/test-role",
+            RoleSessionName="EKSDescribeClusterSession",
+        )
+
+        # Verify that the EKS client was created with the assumed credentials
+        self.mock_create_client.assert_any_call(
+            "eks",
+            aws_access_key_id="test-access-key",
+            aws_secret_access_key="test-secret-key",
+            aws_session_token="test-session-token",
+        )
+
+        # Verify that the cluster was described
+        self.client.describe_cluster.assert_called_once_with(
+            name="ExampleCluster"
+        )
+
+        # Assert the configuration state
+        self.assert_config_state("valid_existing", "output_combined")
+
+    def test_no_assume_role(self):
+        """
+        Test that assume_role_arn is not used when not provided.
+        """
+        configs = ["valid_existing"]
+        passed = "valid_existing"
+        environment = []
+
+        self.client.describe_cluster = mock.Mock(
+            return_value=describe_cluster_response()
+        )
+        self.assert_cmd(configs, passed, environment)
+
+        # Verify that assume_role was not called
+        self.mock_create_client.assert_called_once_with("eks")
+        self.client.describe_cluster.assert_called_once_with(
+            name="ExampleCluster"
+        )
diff -pruN 2.23.6-1/tests/functional/eks/test_util.py 2.31.35-1/tests/functional/eks/test_util.py
--- 2.23.6-1/tests/functional/eks/test_util.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/test_util.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,9 @@
 
 import os
 
-
 EXAMPLE_NAME = "ExampleCluster"
 
+
 def get_testdata(file_name):
     """Get the path of a specific fixture"""
     return os.path.join(
@@ -27,11 +27,7 @@ def get_testdata(file_name):
 
 def list_cluster_response():
     """Get an example list_cluster call (For mocking)"""
-    return {
-        "clusters": [
-            EXAMPLE_NAME
-        ]
-    }
+    return {"clusters": [EXAMPLE_NAME]}
 
 
 def describe_cluster_response():
@@ -49,19 +45,18 @@ def describe_cluster_response():
                 "subnetIds": [
                     "subnet-00000000000000000",
                     "subnet-00000000000000001",
-                    "subnet-00000000000000002"
+                    "subnet-00000000000000002",
                 ],
                 "vpcId": "vpc-00000000000000000",
-                "securityGroupIds": [
-                    "sg-00000000000000000"
-                ]
+                "securityGroupIds": ["sg-00000000000000000"],
             },
             "version": "1.10",
             "arn": "arn:aws:eks:region:111222333444:cluster/" + EXAMPLE_NAME,
-            "createdAt": 1500000000.000
+            "createdAt": 1500000000.000,
         }
     }
 
+
 def describe_cluster_response_outpost_cluster():
     """Get an example describe_cluster call (For mocking)"""
     return {
@@ -77,12 +72,10 @@ def describe_cluster_response_outpost_cl
                 "subnetIds": [
                     "subnet-00000000000000000",
                     "subnet-00000000000000001",
-                    "subnet-00000000000000002"
+                    "subnet-00000000000000002",
                 ],
                 "vpcId": "vpc-00000000000000000",
-                "securityGroupIds": [
-                    "sg-00000000000000000"
-                ]
+                "securityGroupIds": ["sg-00000000000000000"],
             },
             "version": "1.10",
             "arn": "arn:aws:eks:region:111222333444:cluster/" + EXAMPLE_NAME,
@@ -92,10 +85,11 @@ def describe_cluster_response_outpost_cl
                 "outpostArns": [
                     "arn:aws:outposts:us-west-2:111222333444:outpost/op-00000000000000000"
                 ],
-            }
+            },
         }
     }
 
+
 def describe_cluster_no_status_response():
     """Get an example describe_cluster call (For mocking)"""
     return {
@@ -110,19 +104,18 @@ def describe_cluster_no_status_response(
                 "subnetIds": [
                     "subnet-00000000000000000",
                     "subnet-00000000000000001",
-                    "subnet-00000000000000002"
+                    "subnet-00000000000000002",
                 ],
                 "vpcId": "vpc-00000000000000000",
-                "securityGroupIds": [
-                    "sg-00000000000000000"
-                ]
+                "securityGroupIds": ["sg-00000000000000000"],
             },
             "version": "1.10",
             "arn": "arn:aws:eks:region:111222333444:cluster/" + EXAMPLE_NAME,
-            "createdAt": 1500000000.000
+            "createdAt": 1500000000.000,
         }
     }
 
+
 def describe_cluster_creating_response():
     """Get an example describe_cluster call during creation"""
     return {
@@ -135,16 +128,14 @@ def describe_cluster_creating_response()
                 "subnetIds": [
                     "subnet-00000000000000000",
                     "subnet-00000000000000001",
-                    "subnet-00000000000000002"
+                    "subnet-00000000000000002",
                 ],
                 "vpcId": "vpc-00000000000000000",
-                "securityGroupIds": [
-                    "sg-00000000000000000"
-                ]
+                "securityGroupIds": ["sg-00000000000000000"],
             },
             "version": "1.10",
             "arn": "arn:aws:eks:region:111222333444:cluster/" + EXAMPLE_NAME,
-            "createdAt": 1500000000.000
+            "createdAt": 1500000000.000,
         }
     }
 
@@ -164,15 +155,23 @@ def describe_cluster_deleting_response()
                 "subnetIds": [
                     "subnet-00000000000000000",
                     "subnet-00000000000000001",
-                    "subnet-00000000000000002"
+                    "subnet-00000000000000002",
                 ],
                 "vpcId": "vpc-00000000000000000",
-                "securityGroupIds": [
-                    "sg-00000000000000000"
-                ]
+                "securityGroupIds": ["sg-00000000000000000"],
             },
             "version": "1.10",
             "arn": "arn:aws:eks:region:111222333444:cluster/" + EXAMPLE_NAME,
-            "createdAt": 1500000000.000
+            "createdAt": 1500000000.000,
+        }
+    }
+
+
+def assume_role_response():
+    return {
+        "Credentials": {
+            "AccessKeyId": "test-access-key",
+            "SecretAccessKey": "test-secret-key",
+            "SessionToken": "test-session-token",
         }
     }
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_cluster_entry 2.31.35-1/tests/functional/eks/testdata/invalid_string_cluster_entry
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_cluster_entry	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_cluster_entry	2025-11-12 19:17:29.000000000 +0000
@@ -22,4 +22,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_clusters 2.31.35-1/tests/functional/eks/testdata/invalid_string_clusters
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_clusters	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_clusters	2025-11-12 19:17:29.000000000 +0000
@@ -21,4 +21,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_context_entry 2.31.35-1/tests/functional/eks/testdata/invalid_string_context_entry
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_context_entry	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_context_entry	2025-11-12 19:17:29.000000000 +0000
@@ -22,4 +22,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_contexts 2.31.35-1/tests/functional/eks/testdata/invalid_string_contexts
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_contexts	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_contexts	2025-11-12 19:17:29.000000000 +0000
@@ -21,4 +21,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_user_entry 2.31.35-1/tests/functional/eks/testdata/invalid_string_user_entry
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_user_entry	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_user_entry	2025-11-12 19:17:29.000000000 +0000
@@ -13,4 +13,4 @@ current-context: arn:aws:eks:us-west-2:1
 kind: Config
 preferences: {}
 users:
-- String
\ No newline at end of file
+- String
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_string_users 2.31.35-1/tests/functional/eks/testdata/invalid_string_users
--- 2.23.6-1/tests/functional/eks/testdata/invalid_string_users	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_string_users	2025-11-12 19:17:29.000000000 +0000
@@ -13,4 +13,3 @@ current-context: arn:aws:eks:us-west-2:1
 kind: Config
 preferences: {}
 users: String
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/invalid_text 2.31.35-1/tests/functional/eks/testdata/invalid_text
--- 2.23.6-1/tests/functional/eks/testdata/invalid_text	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/invalid_text	2025-11-12 19:17:29.000000000 +0000
@@ -1,2 +1,2 @@
 This is not a yaml file
-This is a text document which should not be parsed
\ No newline at end of file
+This is a text document which should not be parsed
diff -pruN 2.23.6-1/tests/functional/eks/testdata/output_combined 2.31.35-1/tests/functional/eks/testdata/output_combined
--- 2.23.6-1/tests/functional/eks/testdata/output_combined	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/output_combined	2025-11-12 19:17:29.000000000 +0000
@@ -49,4 +49,3 @@ users:
       - --output
       - json
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_bad_cluster 2.31.35-1/tests/functional/eks/testdata/valid_bad_cluster
--- 2.23.6-1/tests/functional/eks/testdata/valid_bad_cluster	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_bad_cluster	2025-11-12 19:17:29.000000000 +0000
@@ -22,4 +22,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_bad_context 2.31.35-1/tests/functional/eks/testdata/valid_bad_context
--- 2.23.6-1/tests/functional/eks/testdata/valid_bad_context	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_bad_context	2025-11-12 19:17:29.000000000 +0000
@@ -22,4 +22,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_bad_context2 2.31.35-1/tests/functional/eks/testdata/valid_bad_context2
--- 2.23.6-1/tests/functional/eks/testdata/valid_bad_context2	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_bad_context2	2025-11-12 19:17:29.000000000 +0000
@@ -24,4 +24,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_bad_user 2.31.35-1/tests/functional/eks/testdata/valid_bad_user
--- 2.23.6-1/tests/functional/eks/testdata/valid_bad_user	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_bad_user	2025-11-12 19:17:29.000000000 +0000
@@ -24,4 +24,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_bad_user2 2.31.35-1/tests/functional/eks/testdata/valid_bad_user2
--- 2.23.6-1/tests/functional/eks/testdata/valid_bad_user2	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_bad_user2	2025-11-12 19:17:29.000000000 +0000
@@ -14,5 +14,3 @@ kind: Config
 preferences: {}
 users:
 - name: arn:aws:eks:us-west-2:111222333444:cluster/Existing
-
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_existing 2.31.35-1/tests/functional/eks/testdata/valid_existing
--- 2.23.6-1/tests/functional/eks/testdata/valid_existing	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_existing	2025-11-12 19:17:29.000000000 +0000
@@ -27,4 +27,3 @@ users:
       - --output
       - json
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_no_cluster 2.31.35-1/tests/functional/eks/testdata/valid_no_cluster
--- 2.23.6-1/tests/functional/eks/testdata/valid_no_cluster	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_no_cluster	2025-11-12 19:17:29.000000000 +0000
@@ -20,5 +20,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_no_context 2.31.35-1/tests/functional/eks/testdata/valid_no_context
--- 2.23.6-1/tests/functional/eks/testdata/valid_no_context	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_no_context	2025-11-12 19:17:29.000000000 +0000
@@ -20,4 +20,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_no_current_context 2.31.35-1/tests/functional/eks/testdata/valid_no_current_context
--- 2.23.6-1/tests/functional/eks/testdata/valid_no_current_context	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_no_current_context	2025-11-12 19:17:29.000000000 +0000
@@ -24,4 +24,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_no_user 2.31.35-1/tests/functional/eks/testdata/valid_no_user
--- 2.23.6-1/tests/functional/eks/testdata/valid_no_user	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_no_user	2025-11-12 19:17:29.000000000 +0000
@@ -12,4 +12,3 @@ contexts:
 current-context: arn:aws:eks:us-west-2:111222333444:cluster/Existing
 kind: Config
 preferences: {}
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_null_cluster 2.31.35-1/tests/functional/eks/testdata/valid_null_cluster
--- 2.23.6-1/tests/functional/eks/testdata/valid_null_cluster	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_null_cluster	2025-11-12 19:17:29.000000000 +0000
@@ -21,4 +21,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_null_context 2.31.35-1/tests/functional/eks/testdata/valid_null_context
--- 2.23.6-1/tests/functional/eks/testdata/valid_null_context	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_null_context	2025-11-12 19:17:29.000000000 +0000
@@ -21,4 +21,3 @@ users:
       - --cluster-name
       - Existing
       command: aws
-
diff -pruN 2.23.6-1/tests/functional/eks/testdata/valid_null_user 2.31.35-1/tests/functional/eks/testdata/valid_null_user
--- 2.23.6-1/tests/functional/eks/testdata/valid_null_user	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eks/testdata/valid_null_user	2025-11-12 19:17:29.000000000 +0000
@@ -13,4 +13,3 @@ current-context: arn:aws:eks:us-west-2:1
 users: null
 kind: Config
 preferences: {}
-
diff -pruN 2.23.6-1/tests/functional/elasticache/test_create_cache_cluster.py 2.31.35-1/tests/functional/elasticache/test_create_cache_cluster.py
--- 2.23.6-1/tests/functional/elasticache/test_create_cache_cluster.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elasticache/test_create_cache_cluster.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,68 +20,80 @@ class TestCreateCacheCluster(BaseAWSComm
     prefix = 'elasticache create-cache-cluster '
 
     def test_create_cache_cluster(self):
-        args = ('--cache-cluster-id cachecluster-us-east-1c '
-                '--num-cache-nodes 1 '
-                '--cache-node-type cache.m1.small '
-                '--engine memcached '
-                '--engine-version 1.4.5 '
-                '--cache-security-group-names group1 group2 '
-                '--preferred-availability-zone us-east-1c '
-                '--auto-minor-version-upgrade '
-                '--preferred-maintenance-window fri:08:00-fri:09:00')
+        args = (
+            '--cache-cluster-id cachecluster-us-east-1c '
+            '--num-cache-nodes 1 '
+            '--cache-node-type cache.m1.small '
+            '--engine memcached '
+            '--engine-version 1.4.5 '
+            '--cache-security-group-names group1 group2 '
+            '--preferred-availability-zone us-east-1c '
+            '--auto-minor-version-upgrade '
+            '--preferred-maintenance-window fri:08:00-fri:09:00'
+        )
         cmdline = self.prefix + args
-        result = {'AutoMinorVersionUpgrade': True,
-                  'CacheClusterId': 'cachecluster-us-east-1c',
-                  'CacheNodeType': 'cache.m1.small',
-                  'CacheSecurityGroupNames': ['group1', 'group2'],
-                  'Engine': 'memcached',
-                  'EngineVersion': '1.4.5',
-                  'NumCacheNodes': 1,
-                  'PreferredAvailabilityZone': 'us-east-1c',
-                  'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00'}
+        result = {
+            'AutoMinorVersionUpgrade': True,
+            'CacheClusterId': 'cachecluster-us-east-1c',
+            'CacheNodeType': 'cache.m1.small',
+            'CacheSecurityGroupNames': ['group1', 'group2'],
+            'Engine': 'memcached',
+            'EngineVersion': '1.4.5',
+            'NumCacheNodes': 1,
+            'PreferredAvailabilityZone': 'us-east-1c',
+            'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_create_cache_cluster_no_auto_minor_upgrade(self):
-        args = ('--cache-cluster-id cachecluster-us-east-1c '
-                '--num-cache-nodes 1 '
-                '--cache-node-type cache.m1.small '
-                '--engine memcached '
-                '--engine-version 1.4.5 '
-                '--cache-security-group-names group1 group2 '
-                '--preferred-availability-zone us-east-1c '
-                '--no-auto-minor-version-upgrade '
-                '--preferred-maintenance-window fri:08:00-fri:09:00')
+        args = (
+            '--cache-cluster-id cachecluster-us-east-1c '
+            '--num-cache-nodes 1 '
+            '--cache-node-type cache.m1.small '
+            '--engine memcached '
+            '--engine-version 1.4.5 '
+            '--cache-security-group-names group1 group2 '
+            '--preferred-availability-zone us-east-1c '
+            '--no-auto-minor-version-upgrade '
+            '--preferred-maintenance-window fri:08:00-fri:09:00'
+        )
         cmdline = self.prefix + args
-        result = {'AutoMinorVersionUpgrade': False,
-                  'CacheClusterId': 'cachecluster-us-east-1c',
-                  'CacheNodeType': 'cache.m1.small',
-                  'CacheSecurityGroupNames': ['group1', 'group2'],
-                  'Engine': 'memcached',
-                  'EngineVersion': '1.4.5',
-                  'NumCacheNodes': 1,
-                  'PreferredAvailabilityZone': 'us-east-1c',
-                  'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00'}
+        result = {
+            'AutoMinorVersionUpgrade': False,
+            'CacheClusterId': 'cachecluster-us-east-1c',
+            'CacheNodeType': 'cache.m1.small',
+            'CacheSecurityGroupNames': ['group1', 'group2'],
+            'Engine': 'memcached',
+            'EngineVersion': '1.4.5',
+            'NumCacheNodes': 1,
+            'PreferredAvailabilityZone': 'us-east-1c',
+            'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_minor_upgrade_arg_not_specified(self):
-        args = ('--cache-cluster-id cachecluster-us-east-1c '
-                '--num-cache-nodes 1 '
-                '--cache-node-type cache.m1.small '
-                '--engine memcached '
-                '--engine-version 1.4.5 '
-                '--cache-security-group-names group1 group2 '
-                '--preferred-availability-zone us-east-1c '
-                '--preferred-maintenance-window fri:08:00-fri:09:00')
+        args = (
+            '--cache-cluster-id cachecluster-us-east-1c '
+            '--num-cache-nodes 1 '
+            '--cache-node-type cache.m1.small '
+            '--engine memcached '
+            '--engine-version 1.4.5 '
+            '--cache-security-group-names group1 group2 '
+            '--preferred-availability-zone us-east-1c '
+            '--preferred-maintenance-window fri:08:00-fri:09:00'
+        )
         cmdline = self.prefix + args
         # Note how if neither '--auto-minor-version-upgrade' nor
         # '--no-auto-minor-version-upgrade' is specified, then
         # AutoMinorVersionUpgrade is not in the result dict.
-        result = {'CacheClusterId': 'cachecluster-us-east-1c',
-                  'CacheNodeType': 'cache.m1.small',
-                  'CacheSecurityGroupNames': ['group1', 'group2'],
-                  'Engine': 'memcached',
-                  'EngineVersion': '1.4.5',
-                  'NumCacheNodes': 1,
-                  'PreferredAvailabilityZone': 'us-east-1c',
-                  'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00'}
+        result = {
+            'CacheClusterId': 'cachecluster-us-east-1c',
+            'CacheNodeType': 'cache.m1.small',
+            'CacheSecurityGroupNames': ['group1', 'group2'],
+            'Engine': 'memcached',
+            'EngineVersion': '1.4.5',
+            'NumCacheNodes': 1,
+            'PreferredAvailabilityZone': 'us-east-1c',
+            'PreferredMaintenanceWindow': 'fri:08:00-fri:09:00',
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/elasticache/test_create_replication_group.py 2.31.35-1/tests/functional/elasticache/test_create_replication_group.py
--- 2.23.6-1/tests/functional/elasticache/test_create_replication_group.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elasticache/test_create_replication_group.py	2025-11-12 19:17:29.000000000 +0000
@@ -30,7 +30,7 @@ class TestCreateReplicationGroup(BaseAWS
         params = {
             'ReplicationGroupId': self.GROUP_ID,
             'ReplicationGroupDescription': self.GROUP_DESCRIPTION,
-            'PreferredCacheClusterAZs': [self.PREFERRED_AZ]
+            'PreferredCacheClusterAZs': [self.PREFERRED_AZ],
         }
         self.assert_params_for_cmd(cmdline, params)
 
@@ -41,6 +41,6 @@ class TestCreateReplicationGroup(BaseAWS
         params = {
             'ReplicationGroupId': self.GROUP_ID,
             'ReplicationGroupDescription': self.GROUP_DESCRIPTION,
-            'PreferredCacheClusterAZs': [self.PREFERRED_AZ]
+            'PreferredCacheClusterAZs': [self.PREFERRED_AZ],
         }
         self.assert_params_for_cmd(cmdline, params)
diff -pruN 2.23.6-1/tests/functional/elasticbeanstalk/test_create_application.py 2.31.35-1/tests/functional/elasticbeanstalk/test_create_application.py
--- 2.23.6-1/tests/functional/elasticbeanstalk/test_create_application.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elasticbeanstalk/test_create_application.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,16 +11,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest, unittest
 import sys
 
+from awscli.testutils import BaseAWSCommandParamsTest, unittest
+
 
 class TestUpdateConfigurationTemplate(BaseAWSCommandParamsTest):
-
     prefix = 'elasticbeanstalk create-application'
 
     def test_ascii(self):
         cmdline = self.prefix
         cmdline += ' --application-name FooBar'
-        result = {'ApplicationName': 'FooBar',}
+        result = {
+            'ApplicationName': 'FooBar',
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/elasticbeanstalk/test_update_configuration_template.py 2.31.35-1/tests/functional/elasticbeanstalk/test_update_configuration_template.py
--- 2.23.6-1/tests/functional/elasticbeanstalk/test_update_configuration_template.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elasticbeanstalk/test_update_configuration_template.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import os
 
+from awscli.testutils import BaseAWSCommandParamsTest
+
 
 class TestUpdateConfigurationTemplate(BaseAWSCommandParamsTest):
-
     prefix = 'elasticbeanstalk update-configuration-template'
 
     def test_file(self):
-        data_path = os.path.join(os.path.dirname(__file__),
-                                 'new_keypair_config.json')
+        data_path = os.path.join(
+            os.path.dirname(__file__), 'new_keypair_config.json'
+        )
         cmdline = self.prefix
         cmdline += ' --application-name FooBar'
         cmdline += ' --template-name x86_64_m1_medium_config'
@@ -32,10 +33,16 @@ class TestUpdateConfigurationTemplate(Ba
             'TemplateName': 'x86_64_m1_medium_config',
             'Description': 'This_is_a_test',
             'OptionSettings': [
-                {'Namespace': 'aws:autoscaling:launchconfiguration',
-                 'OptionName': 'EC2KeyName',
-                 'Value': 'webapps'},
-                {'Namespace': 'aws:elasticbeanstalk:container:tomcat:jvmoptions',
-                 'OptionName': 'Xms',
-                 'Value': '1256m'}]}
+                {
+                    'Namespace': 'aws:autoscaling:launchconfiguration',
+                    'OptionName': 'EC2KeyName',
+                    'Value': 'webapps',
+                },
+                {
+                    'Namespace': 'aws:elasticbeanstalk:container:tomcat:jvmoptions',
+                    'OptionName': 'Xms',
+                    'Value': '1256m',
+                },
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/elb/test_configure_health_check.py 2.31.35-1/tests/functional/elb/test_configure_health_check.py
--- 2.23.6-1/tests/functional/elb/test_configure_health_check.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elb/test_configure_health_check.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,39 +15,46 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestConfigureHealthCheck(BaseAWSCommandParamsTest):
-
     prefix = 'elb configure-health-check'
 
     def test_shorthand_basic(self):
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb'
-        cmdline += (' --health-check Target=HTTP:80/weather/us/wa/seattle,'
-                    'Interval=300,Timeout=60,UnhealthyThreshold=5,'
-                    'HealthyThreshold=9')
+        cmdline += (
+            ' --health-check Target=HTTP:80/weather/us/wa/seattle,'
+            'Interval=300,Timeout=60,UnhealthyThreshold=5,'
+            'HealthyThreshold=9'
+        )
         result = {
             'HealthCheck': {
                 'HealthyThreshold': 9,
                 'Interval': 300,
                 'Target': 'HTTP:80/weather/us/wa/seattle',
                 'Timeout': 60,
-                'UnhealthyThreshold': 5},
-            'LoadBalancerName': 'my-lb'}
+                'UnhealthyThreshold': 5,
+            },
+            'LoadBalancerName': 'my-lb',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_json(self):
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb '
-        cmdline += ('--health-check {"Target":"HTTP:80/weather/us/wa/seattle'
-                    '?a=b","Interval":300,"Timeout":60,'
-                    '"UnhealthyThreshold":5,"HealthyThreshold":9}')
+        cmdline += (
+            '--health-check {"Target":"HTTP:80/weather/us/wa/seattle'
+            '?a=b","Interval":300,"Timeout":60,'
+            '"UnhealthyThreshold":5,"HealthyThreshold":9}'
+        )
         result = {
             'HealthCheck': {
                 'HealthyThreshold': 9,
                 'Interval': 300,
                 'Target': 'HTTP:80/weather/us/wa/seattle?a=b',
                 'Timeout': 60,
-                'UnhealthyThreshold': 5},
-            'LoadBalancerName': 'my-lb'}
+                'UnhealthyThreshold': 5,
+            },
+            'LoadBalancerName': 'my-lb',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_shorthand_with_multiple_equals_for_value(self):
@@ -64,6 +71,8 @@ class TestConfigureHealthCheck(BaseAWSCo
                 'Interval': 300,
                 'Target': 'HTTP:80/weather/us/wa/seattle?a=b',
                 'Timeout': 60,
-                'UnhealthyThreshold': 5},
-            'LoadBalancerName': 'my-lb'}
+                'UnhealthyThreshold': 5,
+            },
+            'LoadBalancerName': 'my-lb',
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/elb/test_deregister_instances_from_load_balancer.py 2.31.35-1/tests/functional/elb/test_deregister_instances_from_load_balancer.py
--- 2.23.6-1/tests/functional/elb/test_deregister_instances_from_load_balancer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elb/test_deregister_instances_from_load_balancer.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDeregisterInstancesFromLoadBalancer(BaseAWSCommandParamsTest):
-
     prefix = 'elb deregister-instances-from-load-balancer'
 
     def test_shorthand(self):
@@ -25,7 +24,7 @@ class TestDeregisterInstancesFromLoadBal
             'Instances': [
                 {'InstanceId': 'id1'},
                 {'InstanceId': 'id2'},
-                {'InstanceId': 'id3'}
-            ]
+                {'InstanceId': 'id3'},
+            ],
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/elb/test_describe_instance_health.py 2.31.35-1/tests/functional/elb/test_describe_instance_health.py
--- 2.23.6-1/tests/functional/elb/test_describe_instance_health.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elb/test_describe_instance_health.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestDescribeInstanceHealth(BaseAWSCommandParamsTest):
-
     prefix = 'elb describe-instance-health'
 
     def test_shorthand(self):
@@ -25,7 +24,7 @@ class TestDescribeInstanceHealth(BaseAWS
             'Instances': [
                 {'InstanceId': 'id1'},
                 {'InstanceId': 'id2'},
-                {'InstanceId': 'id3'}
-            ]
+                {'InstanceId': 'id3'},
+            ],
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/elb/test_register_instances_with_load_balancer.py 2.31.35-1/tests/functional/elb/test_register_instances_with_load_balancer.py
--- 2.23.6-1/tests/functional/elb/test_register_instances_with_load_balancer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elb/test_register_instances_with_load_balancer.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,35 +11,37 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest, EventCaptureHandler
 import os
 
+from awscli.testutils import BaseAWSCommandParamsTest, EventCaptureHandler
 
 TWO_INSTANCE_EXPECTED = {
     'LoadBalancerName': 'my-lb',
-    'Instances': [{'InstanceId': 'i-12345678'},
-                  {'InstanceId': 'i-87654321'}]
+    'Instances': [{'InstanceId': 'i-12345678'}, {'InstanceId': 'i-87654321'}],
 }
 
 
 class TestRegisterInstancesWithLoadBalancer(BaseAWSCommandParamsTest):
-
     prefix = 'elb register-instances-with-load-balancer'
 
     def test_one_instance(self):
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb'
         cmdline += ' --instances {"InstanceId":"i-12345678"}'
-        result = {'LoadBalancerName': 'my-lb',
-                  'Instances': [{'InstanceId': 'i-12345678'}]}
+        result = {
+            'LoadBalancerName': 'my-lb',
+            'Instances': [{'InstanceId': 'i-12345678'}],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_shorthand(self):
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb'
         cmdline += ' --instances i-12345678'
-        result = {'LoadBalancerName': 'my-lb',
-                  'Instances': [{'InstanceId': 'i-12345678'}]}
+        result = {
+            'LoadBalancerName': 'my-lb',
+            'Instances': [{'InstanceId': 'i-12345678'}],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_two_instance(self):
@@ -57,16 +59,16 @@ class TestRegisterInstancesWithLoadBalan
         self.assert_params_for_cmd(cmdline, TWO_INSTANCE_EXPECTED)
 
     def test_two_instance_from_file(self):
-        data_path = os.path.join(os.path.dirname(__file__),
-                                 'test.json')
+        data_path = os.path.join(os.path.dirname(__file__), 'test.json')
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb'
         cmdline += ' --instances file://%s' % data_path
         self.assert_params_for_cmd(cmdline, TWO_INSTANCE_EXPECTED)
 
     def test_json_file_with_spaces(self):
-        data_path = os.path.join(os.path.dirname(__file__),
-                                 'test_with_spaces.json')
+        data_path = os.path.join(
+            os.path.dirname(__file__), 'test_with_spaces.json'
+        )
         cmdline = self.prefix
         cmdline += ' --load-balancer-name my-lb'
         cmdline += ' --instances file://%s' % data_path
diff -pruN 2.23.6-1/tests/functional/elb/test_remove_tags.py 2.31.35-1/tests/functional/elb/test_remove_tags.py
--- 2.23.6-1/tests/functional/elb/test_remove_tags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/elb/test_remove_tags.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestRemoveTags(BaseAWSCommandParamsTest):
-
     prefix = 'elb remove-tags'
 
     def test_shorthand(self):
@@ -22,9 +21,6 @@ class TestRemoveTags(BaseAWSCommandParam
         command += ' --tags bar baz'
         expected_params = {
             'LoadBalancerNames': ['foo'],
-            'Tags': [
-                {'Key': 'bar'},
-                {'Key': 'baz'}
-            ]
+            'Tags': [{'Key': 'bar'}, {'Key': 'baz'}],
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/emrcontainers/conftest.py 2.31.35-1/tests/functional/emrcontainers/conftest.py
--- 2.23.6-1/tests/functional/emrcontainers/conftest.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/emrcontainers/conftest.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,192 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import pytest
+
+from awscli.customizations.emrcontainers.base36 import Base36
+from awscli.customizations.emrcontainers.constants import (
+    SERVICE_ACCOUNT_NAMING,
+    ServiceAccount,
+)
+from tests import CLIRunner, SessionStubber
+
+
+@pytest.fixture
+def session_stubber():
+    return SessionStubber()
+
+
+@pytest.fixture
+def region():
+    return "us-west-2"
+
+
+@pytest.fixture
+def cli_runner(session_stubber, region):
+    cli_runner = CLIRunner(session_stubber=session_stubber)
+    cli_runner.env["AWS_DEFAULT_REGION"] = region
+    return cli_runner
+
+
+@pytest.fixture
+def account_id():
+    return "123456789012"
+
+
+@pytest.fixture
+def cluster_name():
+    return "test-cluster"
+
+
+@pytest.fixture
+def namespace():
+    return "test"
+
+
+@pytest.fixture
+def role_name():
+    return "myrole"
+
+
+@pytest.fixture
+def role_arn(account_id, role_name):
+    return f"arn:aws:iam::{account_id}:role/{role_name}"
+
+
+@pytest.fixture
+def base36_encoded_role_name(role_name):
+    return Base36().encode(role_name)
+
+
+## StartJobRun expected service accounts
+@pytest.fixture
+def start_job_run_service_accounts(account_id, base36_encoded_role_name):
+    emr_spark_components = ["client", "driver", "executor"]
+    return [
+        SERVICE_ACCOUNT_NAMING
+        % {
+            "FRAMEWORK": "spark",
+            "COMPONENT": component,
+            "AWS_ACCOUNT_ID": account_id,
+            "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+        }
+        for component in emr_spark_components
+    ]
+
+
+## InteractiveEndpoint expected service accounts
+@pytest.fixture
+def interactive_endpoint_service_accounts(
+    account_id, base36_encoded_role_name
+):
+    emr_spark_components = ["jeg", "jeg-kernel", "session"]
+    return [
+        SERVICE_ACCOUNT_NAMING
+        % {
+            "FRAMEWORK": "spark",
+            "COMPONENT": component,
+            "AWS_ACCOUNT_ID": account_id,
+            "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+        }
+        for component in emr_spark_components
+    ]
+
+
+## SparkOperator expected service accounts
+@pytest.fixture
+def spark_operator_service_accounts(account_id, base36_encoded_role_name):
+    emr_spark_operator_components = ["driver", "executor"]
+    spark_operator_service_accounts = [
+        ServiceAccount.SPARK_OPERATOR_SERVICE_ACCOUNT.value
+    ]
+    spark_operator_service_accounts.extend(
+        [
+            SERVICE_ACCOUNT_NAMING
+            % {
+                "FRAMEWORK": "spark",
+                "COMPONENT": component,
+                "AWS_ACCOUNT_ID": account_id,
+                "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+            }
+            for component in emr_spark_operator_components
+        ]
+    )
+    return spark_operator_service_accounts
+
+
+## FlinkOperator expected service accounts
+@pytest.fixture
+def flink_operator_service_accounts(account_id, base36_encoded_role_name):
+    emr_flink_operator_components = ["jobmanager", "taskmanager"]
+    flink_operator_service_accounts = [
+        ServiceAccount.FLINK_OPERATOR_SERVICE_ACCOUNT.value
+    ]
+    flink_operator_service_accounts.extend(
+        [
+            SERVICE_ACCOUNT_NAMING
+            % {
+                "FRAMEWORK": "flink",
+                "COMPONENT": component,
+                "AWS_ACCOUNT_ID": account_id,
+                "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
+            }
+            for component in emr_flink_operator_components
+        ]
+    )
+    return flink_operator_service_accounts
+
+
+## Livy expected service accounts
+@pytest.fixture
+def livy_service_accounts():
+    return [
+        ServiceAccount.LIVY_SERVICE_ACCOUNT.value,
+        ServiceAccount.LIVY_SPARK_SERVICE_ACCOUNT.value,
+    ]
+
+
+@pytest.fixture
+def create_pod_identity_association_response():
+    return b'{"association": {"associationId": "a-12345678", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy"}}'
+
+
+@pytest.fixture
+def describe_cluster_response():
+    return b'{"cluster": {"arn": "arn:aws:eks:us-west-2:123456789012:cluster/test-cluster"}}'
+
+
+@pytest.fixture
+def list_pod_identity_association_response():
+    return [
+        b'{"associations":[{"associationId": "1", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy1"}]}',
+        b'{"associations":[{"associationId": "2", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy2"}]}',
+        b'{"associations":[{"associationId": "3", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy3"}]}',
+    ]
+
+
+@pytest.fixture
+def delete_pod_identity_association_response():
+    return [
+        b'{"association": {"association_id": "1", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy1"}}',
+        b'{"association": {"association_id": "2", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy2"}}',
+        b'{"association": {"association_id": "3", "clusterName": "test-cluster", "namespace": "namespace", "serviceAccount":"dummy3"}}',
+    ]
+
+
+@pytest.fixture
+def create_pod_identity_association_already_exists_error_response():
+    return b'{"Code": "ResourceInUseException","Message": "An error occurred (ResourceInUseException) when calling the CreatePodIdentityAssociation operation: Association already exists: a-1"}'
+
+
+@pytest.fixture
+def create_pod_identity_association_other_error_response():
+    return b'{"Code": "InvliadRequestException","Message": "Bad Request!"}'
diff -pruN 2.23.6-1/tests/functional/emrcontainers/test_create_role_associations.py 2.31.35-1/tests/functional/emrcontainers/test_create_role_associations.py
--- 2.23.6-1/tests/functional/emrcontainers/test_create_role_associations.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/emrcontainers/test_create_role_associations.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,614 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+from tests import HTTPResponse
+
+
+class TestCreateRoleAssociationsCommand:
+    def assert_call_matches(
+        self, aws_request, service_account, cluster_name, namespace, role_arn
+    ):
+        assert aws_request.service_name == "eks"
+        assert aws_request.operation_name == "CreatePodIdentityAssociation"
+        assert aws_request.params["clusterName"] == cluster_name
+        assert aws_request.params["namespace"] == namespace
+        assert aws_request.params["roleArn"] == role_arn
+        assert aws_request.params["serviceAccount"] == service_account
+
+    def assert_roll_back(self, aws_request, cluster_name, associationId):
+        assert aws_request.service_name == "eks"
+        assert aws_request.operation_name == "DeletePodIdentityAssociation"
+        assert aws_request.params["clusterName"] == cluster_name
+        assert aws_request.params["associationId"] == associationId
+
+    # Use case: Expect to return create pod identity association results for start job run
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with start job run service accounts
+    def test_create_role_associations_for_start_job_run(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        start_job_run_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests) == len(start_job_run_service_accounts) + 1
+        )
+        for i in range(len(start_job_run_service_accounts)):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                start_job_run_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for interactive endpoint
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with interactive endpoint service accounts
+    def test_create_role_associations_for_interactive_endpoint(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        interactive_endpoint_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "interactive_endpoint",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests)
+            == len(interactive_endpoint_service_accounts) + 1
+        )
+        for i in range(len(interactive_endpoint_service_accounts)):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                interactive_endpoint_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for spark operator
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with spark operator service accounts
+    def test_create_role_associations_for_spark_operator(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        spark_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "spark_operator",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests)
+            == len(spark_operator_service_accounts) + 1
+        )
+        for i in range(len(spark_operator_service_accounts)):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                spark_operator_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for spark operator with operator namespace
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with spark operator service accounts in correct namespaces
+    def test_create_role_associations_for_spark_operator_namespace(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        spark_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "spark_operator",
+                "--operator-namespace",
+                "spark-operator",
+            ]
+        )
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests)
+            == len(spark_operator_service_accounts) + 1
+        )
+        for i in range(len(spark_operator_service_accounts)):
+            ns = "spark-operator" if i == 0 else namespace
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                spark_operator_service_accounts[i],
+                cluster_name,
+                ns,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for flink operator
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with flink operator service accounts
+    def test_create_role_associations_for_flink_operator(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        flink_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "flink_operator",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests)
+            == len(flink_operator_service_accounts) + 1
+        )
+        for i in range(len(flink_operator_service_accounts)):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                flink_operator_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for flink operator with operator namespaces
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with flink operator service accounts in correct namespace
+    def test_create_role_associations_for_flink_operator_namespace(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        flink_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "flink_operator",
+                "--operator-namespace",
+                "flink-operator",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert (
+            len(result.aws_requests)
+            == len(flink_operator_service_accounts) + 1
+        )
+        for i in range(len(flink_operator_service_accounts)):
+            ns = "flink-operator" if i == 0 else namespace
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                flink_operator_service_accounts[i],
+                cluster_name,
+                ns,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for livy
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with livy service accounts
+    def test_create_role_associations_for_livy(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        livy_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "livy",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert len(result.aws_requests) == len(livy_service_accounts) + 1
+        for i in range(len(livy_service_accounts)):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                livy_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for livy with controller namespace
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with livy service accounts in correct namespace
+    def test_create_role_associations_for_livy_namespace(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        livy_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "livy",
+                "--operator-namespace",
+                "livy",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert len(result.aws_requests) == len(livy_service_accounts) + 1
+        for i in range(len(livy_service_accounts)):
+            ns = "livy" if i == 0 else namespace
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                livy_service_accounts[i],
+                cluster_name,
+                ns,
+                role_arn,
+            )
+
+    # Use case: Expect to return create pod identity association results for customer input service accounts
+    # Expected results: Operation is performed by client
+    # to create pod identity associations with customer input service accounts
+    def test_create_role_associations_for_customer_service_account(
+        self,
+        cli_runner,
+        role_arn,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_response,
+        spark_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--service-account",
+                "test_sa",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert len(result.aws_requests) == 2
+        self.assert_call_matches(
+            result.aws_requests[1],
+            "test_sa",
+            cluster_name,
+            namespace,
+            role_arn,
+        )
+
+    # Use case: Expect to return ResourceInUse exception and do nothing on already existed associations
+    # Expected results: Association creations are skipped
+    def test_create_role_associations_already_exists_for_start_job_run(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        create_pod_identity_association_already_exists_error_response,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(
+                body=create_pod_identity_association_already_exists_error_response,
+                status_code=409,
+            )
+        )
+        cli_runner.add_response(
+            HTTPResponse(
+                body=create_pod_identity_association_already_exists_error_response,
+                status_code=409,
+            )
+        )
+        cli_runner.add_response(
+            HTTPResponse(
+                body=create_pod_identity_association_already_exists_error_response,
+                status_code=409,
+            )
+        )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+            ]
+        )
+        components = ["client", "driver", "executor"]
+        expected_out = ""
+        for component in components:
+            expected_out += (
+                "Skipping pod identity association creation because pod identity association already exists for service "
+                + f"account emr-containers-sa-spark-{component}-123456789012-16o0gwny3p and role myrole in namespace test: "
+                + "An error occurred (ResourceInUseException) when calling the "
+                + "CreatePodIdentityAssociation operation: Association already exists: a-1\n"
+            )
+        assert result.stderr == expected_out
+
+    # Use case: Expect to return error exception and rollback on created associations in the same call
+    # Expected results: Associations are rolled back
+    def test_create_role_associations_error_rollback_for_start_job_run(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        start_job_run_service_accounts,
+        role_arn,
+        create_pod_identity_association_response,
+        create_pod_identity_association_other_error_response,
+        delete_pod_identity_association_response,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=create_pod_identity_association_response)
+        )
+        cli_runner.add_response(
+            HTTPResponse(
+                body=create_pod_identity_association_other_error_response,
+                status_code=400,
+            )
+        )
+        for i in range(2):
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "create-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        for i in range(3):
+            self.assert_call_matches(
+                result.aws_requests[i + 1],
+                start_job_run_service_accounts[i],
+                cluster_name,
+                namespace,
+                role_arn,
+            )
+        for i in range(2):
+            self.assert_roll_back(
+                result.aws_requests[i + 4], cluster_name, "a-12345678"
+            )
diff -pruN 2.23.6-1/tests/functional/emrcontainers/test_delete_role_associations.py 2.31.35-1/tests/functional/emrcontainers/test_delete_role_associations.py
--- 2.23.6-1/tests/functional/emrcontainers/test_delete_role_associations.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/emrcontainers/test_delete_role_associations.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,603 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+from tests import HTTPResponse
+
+
+class TestDeleteRoleAssociationsCommand:
+    def assert_list_call_matches(
+        self, aws_request, service_account, cluster_name, namespace
+    ):
+        assert aws_request.service_name == "eks"
+        assert aws_request.operation_name == "ListPodIdentityAssociations"
+        assert aws_request.params["clusterName"] == cluster_name
+        assert aws_request.params["namespace"] == namespace
+        assert aws_request.params["serviceAccount"] == service_account
+
+    def assert_delete_call_matches(
+        self, aws_request, cluster_name, association_id
+    ):
+        assert aws_request.service_name == "eks"
+        assert aws_request.operation_name == "DeletePodIdentityAssociation"
+        assert aws_request.params["clusterName"] == cluster_name
+        assert aws_request.params["associationId"] == association_id
+
+    # Use case: Expect to return delete pod identity association results for start job run
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with start job run service accounts
+    def test_delete_role_associations_for_start_job_run(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        start_job_run_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(start_job_run_service_accounts) * 2) + 1
+        )
+        for i in range(len(start_job_run_service_accounts)):
+            request_idx += 1
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                start_job_run_service_accounts[i],
+                cluster_name,
+                namespace,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for interactive endpoint
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with interactive endpoint service accounts
+    def test_delete_role_associations_for_interactive_endpoint(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        interactive_endpoint_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "interactive_endpoint",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(interactive_endpoint_service_accounts) * 2) + 1
+        )
+        for i in range(len(interactive_endpoint_service_accounts)):
+            request_idx += 1
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                interactive_endpoint_service_accounts[i],
+                cluster_name,
+                namespace,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for spark operator
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with spark operator service accounts
+    def test_delete_role_associations_for_spark_operator(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        spark_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "spark_operator",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(spark_operator_service_accounts) * 2) + 1
+        )
+        for i in range(len(spark_operator_service_accounts)):
+            request_idx += 1
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                spark_operator_service_accounts[i],
+                cluster_name,
+                namespace,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for spark operator with operator namespace
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with spark operator service accounts in correct namespaces
+    def test_delete_role_associations_for_spark_operator_namespace(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        spark_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "spark_operator",
+                "--operator-namespace",
+                "spark-operator",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(spark_operator_service_accounts) * 2) + 1
+        )
+        for i in range(len(spark_operator_service_accounts)):
+            request_idx += 1
+            ns = "spark-operator" if i == 0 else namespace
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                spark_operator_service_accounts[i],
+                cluster_name,
+                ns,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for flink operator
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with flink operator service accounts
+    def test_delete_role_associations_for_flink_operator(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        flink_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "flink_operator",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(flink_operator_service_accounts) * 2) + 1
+        )
+        for i in range(len(flink_operator_service_accounts)):
+            request_idx += 1
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                flink_operator_service_accounts[i],
+                cluster_name,
+                namespace,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for flink operator with operator namespaces
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with flink operator service accounts in correct namespace
+    def test_delete_role_associations_for_flink_operator_namespace(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        flink_operator_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(3):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "flink_operator",
+                "--operator-namespace",
+                "flink-operator",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert (
+            len(result.aws_requests)
+            == (len(flink_operator_service_accounts) * 2) + 1
+        )
+        for i in range(len(flink_operator_service_accounts)):
+            request_idx += 1
+            ns = "flink-operator" if i == 0 else namespace
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                flink_operator_service_accounts[i],
+                cluster_name,
+                ns,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for livy
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with livy service accounts
+    def test_delete_role_associations_for_livy(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        livy_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(2):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "livy",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert len(result.aws_requests) == (len(livy_service_accounts) * 2) + 1
+        for i in range(len(livy_service_accounts)):
+            request_idx += 1
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                livy_service_accounts[i],
+                cluster_name,
+                namespace,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for livy with controller namespace
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with livy service accounts in correct namespace
+    def test_delete_role_associations_for_livy_namespace(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+        livy_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        for i in range(2):
+            cli_runner.add_response(
+                HTTPResponse(body=list_pod_identity_association_response[i])
+            )
+            cli_runner.add_response(
+                HTTPResponse(body=delete_pod_identity_association_response[i])
+            )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--type",
+                "livy",
+                "--operator-namespace",
+                "livy",
+            ]
+        )
+
+        request_idx = 0
+        assert result.aws_requests[request_idx].service_name == "eks"
+        assert (
+            result.aws_requests[request_idx].operation_name
+            == "DescribeCluster"
+        )
+        assert len(result.aws_requests) == (len(livy_service_accounts) * 2) + 1
+        for i in range(len(livy_service_accounts)):
+            request_idx += 1
+            ns = "livy" if i == 0 else namespace
+            self.assert_list_call_matches(
+                result.aws_requests[request_idx],
+                livy_service_accounts[i],
+                cluster_name,
+                ns,
+            )
+            request_idx += 1
+            self.assert_delete_call_matches(
+                result.aws_requests[request_idx], cluster_name, str(i + 1)
+            )
+
+    # Use case: Expect to return delete pod identity association results for customer input service accounts
+    # Expected results: Operation is performed by client
+    # to delete pod identity associations with customer input service accounts
+    def test_delete_role_associations_for_customer_service_account(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        list_pod_identity_association_response,
+        delete_pod_identity_association_response,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(
+            HTTPResponse(body=list_pod_identity_association_response[0])
+        )
+        cli_runner.add_response(
+            HTTPResponse(body=delete_pod_identity_association_response[0])
+        )
+
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+                "--service-account-name",
+                "test_sa",
+            ]
+        )
+
+        assert result.aws_requests[0].service_name == "eks"
+        assert result.aws_requests[0].operation_name == "DescribeCluster"
+        assert len(result.aws_requests) == 3
+        self.assert_list_call_matches(
+            result.aws_requests[1], "test_sa", cluster_name, namespace
+        )
+        self.assert_delete_call_matches(
+            result.aws_requests[2], cluster_name, "1"
+        )
+
+    # Use case: Expect to do nothing on deletion when resource not found but print warning message
+    # Expected results: Association deletions are skipped
+    def test_delete_role_associations_already_exists_for_start_job_run(
+        self,
+        cli_runner,
+        cluster_name,
+        namespace,
+        role_name,
+        describe_cluster_response,
+        start_job_run_service_accounts,
+    ):
+        cli_runner.add_response(HTTPResponse(body=describe_cluster_response))
+        cli_runner.add_response(HTTPResponse(body=[]))
+        cli_runner.add_response(HTTPResponse(body=[]))
+        cli_runner.add_response(HTTPResponse(body=[]))
+        result = cli_runner.run(
+            [
+                "emr-containers",
+                "delete-role-associations",
+                "--cluster-name",
+                cluster_name,
+                "--namespace",
+                namespace,
+                "--role-name",
+                role_name,
+            ]
+        )
+
+        expected_out = ""
+        for service_account in start_job_run_service_accounts:
+            expected_out += (
+                f"Skipping deletion as no pod identity association found for service account {service_account} "
+                f"and role {role_name} in namespace {namespace}\n"
+            )
+        assert result.stderr == expected_out
diff -pruN 2.23.6-1/tests/functional/eventbridge/test_put_events.py 2.31.35-1/tests/functional/eventbridge/test_put_events.py
--- 2.23.6-1/tests/functional/eventbridge/test_put_events.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/eventbridge/test_put_events.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestPutEventsCommand(BaseAWSCommandParamsTest):
-
     def run_put_events(self, cmd):
         response, _, _ = self.run_cmd(cmd)
         return response
diff -pruN 2.23.6-1/tests/functional/firehose/test_put_record_batch.py 2.31.35-1/tests/functional/firehose/test_put_record_batch.py
--- 2.23.6-1/tests/functional/firehose/test_put_record_batch.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/firehose/test_put_record_batch.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestPutRecordBatch(BaseAWSCommandParamsTest):
-
     prefix = 'firehose put-record-batch'
 
     def test_shorthand(self):
@@ -22,6 +21,6 @@ class TestPutRecordBatch(BaseAWSCommandP
         command += ' --records Zm9v YmFy'
         params = {
             'DeliveryStreamName': 'foo',
-            'Records': [{'Data': b'foo'}, {'Data': b'bar'}]
+            'Records': [{'Data': b'foo'}, {'Data': b'bar'}],
         }
         self.assert_params_for_cmd(command, params)
diff -pruN 2.23.6-1/tests/functional/gamelift/test_get_game_session_log.py 2.31.35-1/tests/functional/gamelift/test_get_game_session_log.py
--- 2.23.6-1/tests/functional/gamelift/test_get_game_session_log.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/gamelift/test_get_game_session_log.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,11 @@
 # language governing permissions and limitations under the License.
 import os
 
-from awscli.testutils import BaseAWSCommandParamsTest, FileCreator, mock
 from awscli.compat import BytesIO
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator, mock
 
 
 class TestGetGameSessionLog(BaseAWSCommandParamsTest):
-
     prefix = 'gamelift get-game-session-log'
 
     def setUp(self):
@@ -25,7 +24,8 @@ class TestGetGameSessionLog(BaseAWSComma
         self.files = FileCreator()
         self.filename = os.path.join(self.files.rootdir, 'myfile')
         self.urlopen_patch = mock.patch(
-            'awscli.customizations.gamelift.getlog.urlopen')
+            'awscli.customizations.gamelift.getlog.urlopen'
+        )
         self.contents = b'My Contents'
         self.urlopen_mock = self.urlopen_patch.start()
         self.urlopen_mock.return_value = BytesIO(self.contents)
@@ -44,10 +44,10 @@ class TestGetGameSessionLog(BaseAWSComma
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(
-            self.operations_called[0][0].name, 'GetGameSessionLogUrl')
+            self.operations_called[0][0].name, 'GetGameSessionLogUrl'
+        )
         self.assertEqual(
-            self.operations_called[0][1],
-            {'GameSessionId': 'mysession'}
+            self.operations_called[0][1], {'GameSessionId': 'mysession'}
         )
 
         # Ensure the contents were saved to the file
@@ -59,5 +59,5 @@ class TestGetGameSessionLog(BaseAWSComma
         self.assertIn(
             'Successfully downloaded log archive for game session '
             'mysession to %s' % self.filename,
-            stdout
+            stdout,
         )
diff -pruN 2.23.6-1/tests/functional/gamelift/test_upload_build.py 2.31.35-1/tests/functional/gamelift/test_upload_build.py
--- 2.23.6-1/tests/functional/gamelift/test_upload_build.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/gamelift/test_upload_build.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
+
 from awscli.testutils import BaseAWSCommandParamsTest, FileCreator, mock
 
 
 class TestUploadBuild(BaseAWSCommandParamsTest):
-
     prefix = 'gamelift upload-build'
 
     def setUp(self):
@@ -34,14 +34,15 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
-             'UploadCredentials': {
-                'AccessKeyId': 'myaccesskey',
-                'SecretAccessKey': 'mysecretkey',
-                'SessionToken': 'mytoken'}},
-            {}
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
+                'UploadCredentials': {
+                    'AccessKeyId': 'myaccesskey',
+                    'SecretAccessKey': 'mysecretkey',
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
         ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=0)
@@ -51,26 +52,27 @@ class TestUploadBuild(BaseAWSCommandPara
         self.assertEqual(self.operations_called[0][0].name, 'CreateBuild')
         self.assertEqual(
             self.operations_called[0][1],
-            {'Name': 'mybuild', 'Version': 'myversion'}
+            {'Name': 'mybuild', 'Version': 'myversion'},
         )
 
         # Second the credentials are requested.
         self.assertEqual(
-            self.operations_called[1][0].name, 'RequestUploadCredentials')
-        self.assertEqual(
-            self.operations_called[1][1], {'BuildId': 'myid'})
+            self.operations_called[1][0].name, 'RequestUploadCredentials'
+        )
+        self.assertEqual(self.operations_called[1][1], {'BuildId': 'myid'})
 
         # The build is then uploaded to S3.
         self.assertEqual(self.operations_called[2][0].name, 'PutObject')
         self.assertEqual(
             self.operations_called[2][1],
-            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'}
+            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'},
         )
 
         # Check the output of the command.
         self.assertIn(
             'Successfully uploaded %s to AWS GameLift' % self.files.rootdir,
-            stdout)
+            stdout,
+        )
         self.assertIn('Build ID: myid', stdout)
 
     def test_upload_build_with_operating_system_param(self):
@@ -82,14 +84,15 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
-             'UploadCredentials': {
-                'AccessKeyId': 'myaccesskey',
-                'SecretAccessKey': 'mysecretkey',
-                'SessionToken': 'mytoken'}},
-            {}
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
+                'UploadCredentials': {
+                    'AccessKeyId': 'myaccesskey',
+                    'SecretAccessKey': 'mysecretkey',
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
         ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=0)
@@ -99,27 +102,31 @@ class TestUploadBuild(BaseAWSCommandPara
         self.assertEqual(self.operations_called[0][0].name, 'CreateBuild')
         self.assertEqual(
             self.operations_called[0][1],
-            {'Name': 'mybuild', 'Version': 'myversion',
-             'OperatingSystem': 'WINDOWS_2012'}
+            {
+                'Name': 'mybuild',
+                'Version': 'myversion',
+                'OperatingSystem': 'WINDOWS_2012',
+            },
         )
 
         # Second the credentials are requested.
         self.assertEqual(
-            self.operations_called[1][0].name, 'RequestUploadCredentials')
-        self.assertEqual(
-            self.operations_called[1][1], {'BuildId': 'myid'})
+            self.operations_called[1][0].name, 'RequestUploadCredentials'
+        )
+        self.assertEqual(self.operations_called[1][1], {'BuildId': 'myid'})
 
         # The build is then uploaded to S3.
         self.assertEqual(self.operations_called[2][0].name, 'PutObject')
         self.assertEqual(
             self.operations_called[2][1],
-            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'}
+            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'},
         )
 
         # Check the output of the command.
         self.assertIn(
             'Successfully uploaded %s to AWS GameLift' % self.files.rootdir,
-            stdout)
+            stdout,
+        )
         self.assertIn('Build ID: myid', stdout)
 
     def test_upload_build_with_empty_directory(self):
@@ -129,15 +136,16 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
-             'UploadCredentials': {
-                'AccessKeyId': 'myaccesskey',
-                'SecretAccessKey': 'mysecretkey',
-                'SessionToken': 'mytoken'}},
-            {}
-            ]
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
+                'UploadCredentials': {
+                    'AccessKeyId': 'myaccesskey',
+                    'SecretAccessKey': 'mysecretkey',
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
+        ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
 
@@ -145,7 +153,8 @@ class TestUploadBuild(BaseAWSCommandPara
             'Fail to upload %s. '
             'The build root directory is empty or does not exist.\n'
             % self.files.rootdir,
-            stderr)
+            stderr,
+        )
 
     def test_upload_build_with_nonexistent_directory(self):
         dir_not_exist = os.path.join(self.files.rootdir, 'does_not_exist')
@@ -156,15 +165,16 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
-             'UploadCredentials': {
-                'AccessKeyId': 'myaccesskey',
-                'SecretAccessKey': 'mysecretkey',
-                'SessionToken': 'mytoken'}},
-            {}
-            ]
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
+                'UploadCredentials': {
+                    'AccessKeyId': 'myaccesskey',
+                    'SecretAccessKey': 'mysecretkey',
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
+        ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
 
@@ -172,7 +182,8 @@ class TestUploadBuild(BaseAWSCommandPara
             'Fail to upload %s. '
             'The build root directory is empty or does not exist.\n'
             % dir_not_exist,
-            stderr)
+            stderr,
+        )
 
     def test_upload_build_with_nonprovided_directory(self):
         cmdline = self.prefix
@@ -181,23 +192,24 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
-             'UploadCredentials': {
-                'AccessKeyId': 'myaccesskey',
-                'SecretAccessKey': 'mysecretkey',
-                'SessionToken': 'mytoken'}},
-            {}
-            ]
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
+                'UploadCredentials': {
+                    'AccessKeyId': 'myaccesskey',
+                    'SecretAccessKey': 'mysecretkey',
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
+        ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=255)
 
         self.assertIn(
             'Fail to upload %s. '
-            'The build root directory is empty or does not exist.\n'
-            % '""',
-            stderr)
+            'The build root directory is empty or does not exist.\n' % '""',
+            stderr,
+        )
 
     def test_upload_build_with_server_sdk_version_param(self):
         self.files.create_file('tmpfile', 'Some contents')
@@ -208,14 +220,15 @@ class TestUploadBuild(BaseAWSCommandPara
 
         self.parsed_responses = [
             {'Build': {'BuildId': 'myid'}},
-            {'StorageLocation': {
-                'Bucket': 'mybucket',
-                'Key': 'mykey'},
+            {
+                'StorageLocation': {'Bucket': 'mybucket', 'Key': 'mykey'},
                 'UploadCredentials': {
                     'AccessKeyId': 'myaccesskey',
                     'SecretAccessKey': 'mysecretkey',
-                    'SessionToken': 'mytoken'}},
-            {}
+                    'SessionToken': 'mytoken',
+                },
+            },
+            {},
         ]
 
         stdout, stderr, rc = self.run_cmd(cmdline, expected_rc=0)
@@ -225,25 +238,29 @@ class TestUploadBuild(BaseAWSCommandPara
         self.assertEqual(self.operations_called[0][0].name, 'CreateBuild')
         self.assertEqual(
             self.operations_called[0][1],
-            {'Name': 'mybuild', 'Version': 'myversion',
-             'ServerSdkVersion': '4.0.2'}
+            {
+                'Name': 'mybuild',
+                'Version': 'myversion',
+                'ServerSdkVersion': '4.0.2',
+            },
         )
 
         # Second the credentials are requested.
         self.assertEqual(
-            self.operations_called[1][0].name, 'RequestUploadCredentials')
-        self.assertEqual(
-            self.operations_called[1][1], {'BuildId': 'myid'})
+            self.operations_called[1][0].name, 'RequestUploadCredentials'
+        )
+        self.assertEqual(self.operations_called[1][1], {'BuildId': 'myid'})
 
         # The build is then uploaded to S3.
         self.assertEqual(self.operations_called[2][0].name, 'PutObject')
         self.assertEqual(
             self.operations_called[2][1],
-            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'}
+            {'Body': mock.ANY, 'Bucket': 'mybucket', 'Key': 'mykey'},
         )
 
         # Check the output of the command.
         self.assertIn(
             'Successfully uploaded %s to AWS GameLift' % self.files.rootdir,
-            stdout)
+            stdout,
+        )
         self.assertIn('Build ID: myid', stdout)
diff -pruN 2.23.6-1/tests/functional/history/__init__.py 2.31.35-1/tests/functional/history/__init__.py
--- 2.23.6-1/tests/functional/history/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/history/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,8 +15,12 @@ import uuid
 from botocore.history import HistoryRecorder
 
 from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import mock, create_clidriver, FileCreator
-from awscli.testutils import BaseAWSCommandParamsTest
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    create_clidriver,
+    mock,
+)
 
 
 class BaseHistoryCommandParamsTest(BaseAWSCommandParamsTest):
@@ -25,14 +29,13 @@ class BaseHistoryCommandParamsTest(BaseA
         super(BaseHistoryCommandParamsTest, self).setUp()
         self.history_recorder = history_recorder
         self.files = FileCreator()
-        config_contents = (
-            '[default]\n'
-            'cli_history = enabled'
-        )
+        config_contents = '[default]\n' 'cli_history = enabled'
         self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
-            'config', config_contents)
+            'config', config_contents
+        )
         self.environ['AWS_CLI_HISTORY_FILE'] = self.files.create_file(
-            'history.db', '')
+            'history.db', ''
+        )
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
 
@@ -48,14 +51,17 @@ class BaseHistoryCommandParamsTest(BaseA
         # botocore.get_global_history_recorder as the objects are already
         # instantiated as so we have to individually patch each one of these...
         self._apply_history_recorder_patch(
-            'awscli.clidriver', history_recorder)
+            'awscli.clidriver', history_recorder
+        )
         self._apply_history_recorder_patch(
-            'awscli.customizations.history', history_recorder)
+            'awscli.customizations.history', history_recorder
+        )
         return history_recorder
 
     def _apply_history_recorder_patch(self, module, history_recorder):
         patch_history_recorder = mock.patch(
-            module + '.HISTORY_RECORDER', history_recorder)
+            module + '.HISTORY_RECORDER', history_recorder
+        )
         patch_history_recorder.start()
         self.addCleanup(patch_history_recorder.stop)
 
diff -pruN 2.23.6-1/tests/functional/history/test_db.py 2.31.35-1/tests/functional/history/test_db.py
--- 2.23.6-1/tests/functional/history/test_db.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/history/test_db.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,27 +10,28 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import threading
 import json
 import re
+import threading
 
-from awscli.compat import queue
-from awscli.customizations.history.db import DatabaseConnection
-from awscli.customizations.history.db import RecordBuilder
-from awscli.customizations.history.db import DatabaseRecordWriter
-from awscli.customizations.history.db import DatabaseRecordReader
-from awscli.customizations.history.db import DatabaseHistoryHandler
+from awscli.compat import queue, sqlite3
+from awscli.customizations.history.db import (
+    DatabaseConnection,
+    DatabaseHistoryHandler,
+    DatabaseRecordReader,
+    DatabaseRecordWriter,
+    RecordBuilder,
+)
 from awscli.testutils import unittest
-from awscli.compat import sqlite3
 from tests import CaseInsensitiveDict
 
 
-class ThreadedRecordWriter(object):
+class ThreadedRecordWriter:
     def __init__(self, writer):
         self._read_q = queue.Queue()
         self._thread = threading.Thread(
-            target=self._threaded_record_writer,
-            args=(writer,))
+            target=self._threaded_record_writer, args=(writer,)
+        )
 
     def _threaded_record_writer(self, writer):
         while True:
@@ -74,8 +75,7 @@ class BaseThreadedDatabaseWriter(BaseDat
         super(BaseThreadedDatabaseWriter, self).tearDown()
 
 
-@unittest.skipIf(sqlite3 is None,
-                 "sqlite3 not supported in this python")
+@unittest.skipIf(sqlite3 is None, "sqlite3 not supported in this python")
 class TestMultithreadedDatabaseWriter(BaseThreadedDatabaseWriter):
     def _write_records(self, thread_number, records):
         t = self.threads[thread_number]
@@ -86,33 +86,39 @@ class TestMultithreadedDatabaseWriter(Ba
         thread_count = 10
         self.start_n_threads(thread_count)
         for i in range(thread_count):
-            self._write_records(i, [
-                {
-                    'command_id': 'command',
-                    'event_type': 'API_CALL',
-                    'payload': i,
-                    'source': 'TEST',
-                    'timestamp': 1234
-                }, {
-                    'command_id': 'command',
-                    'event_type': 'HTTP_REQUEST',
-                    'payload': i,
-                    'source': 'TEST',
-                    'timestamp': 1234
-                }, {
-                    'command_id': 'command',
-                    'event_type': 'HTTP_RESPONSE',
-                    'payload': i,
-                    'source': 'TEST',
-                    'timestamp': 1234
-                }, {
-                    'command_id': 'command',
-                    'event_type': 'PARSED_RESPONSE',
-                    'payload': i,
-                    'source': 'TEST',
-                    'timestamp': 1234
-                }
-            ])
+            self._write_records(
+                i,
+                [
+                    {
+                        'command_id': 'command',
+                        'event_type': 'API_CALL',
+                        'payload': i,
+                        'source': 'TEST',
+                        'timestamp': 1234,
+                    },
+                    {
+                        'command_id': 'command',
+                        'event_type': 'HTTP_REQUEST',
+                        'payload': i,
+                        'source': 'TEST',
+                        'timestamp': 1234,
+                    },
+                    {
+                        'command_id': 'command',
+                        'event_type': 'HTTP_RESPONSE',
+                        'payload': i,
+                        'source': 'TEST',
+                        'timestamp': 1234,
+                    },
+                    {
+                        'command_id': 'command',
+                        'event_type': 'PARSED_RESPONSE',
+                        'payload': i,
+                        'source': 'TEST',
+                        'timestamp': 1234,
+                    },
+                ],
+            )
         for t in self.threads:
             t.close()
         thread_id_to_request_id = {}
@@ -132,8 +138,7 @@ class TestMultithreadedDatabaseWriter(Ba
         self.assertEqual(records, 4 * thread_count)
 
 
-@unittest.skipIf(sqlite3 is None,
-                 "sqlite3 not supported in this python")
+@unittest.skipIf(sqlite3 is None, "sqlite3 not supported in this python")
 class TestDatabaseRecordWriter(BaseDatabaseTest):
     def test_does_create_table(self):
         cursor = self.connection.execute(
@@ -150,7 +155,7 @@ class TestDatabaseRecordWriter(BaseDatab
             'source': 'TEST',
             'event_type': 'foo',
             'payload': {"foo": "bar"},
-            'timestamp': 1234
+            'timestamp': 1234,
         }
         writer.write_record(known_record_fields)
 
@@ -177,7 +182,7 @@ class TestDatabaseRecordWriter(BaseDatab
             'source': 'TEST',
             'event_type': 'foo',
             'payload': '',
-            'timestamp': 1234
+            'timestamp': 1234,
         }
         records_to_write = 40
         for _ in range(records_to_write):
@@ -188,8 +193,7 @@ class TestDatabaseRecordWriter(BaseDatab
         self.assertEqual(num_records[0], records_to_write)
 
 
-@unittest.skipIf(sqlite3 is None,
-                 "sqlite3 not supported in this python")
+@unittest.skipIf(sqlite3 is None, "sqlite3 not supported in this python")
 class TestDatabaseRecordReader(BaseDatabaseTest):
     def _write_sequence_of_records(self, writer, records):
         for record in records:
@@ -207,48 +211,55 @@ class TestDatabaseRecordReader(BaseDatab
 
     def test_can_read_record(self):
         writer = DatabaseRecordWriter(self.connection)
-        self._write_sequence_of_records(writer, [
-            {
-                'command_id': 'command a',
-                'source': 'TEST',
-                'event_type': 'foo',
-                'payload': '',
-                'timestamp': 3
-            },
-            {
-                'command_id': 'command a',
-                'source': 'TEST',
-                'event_type': 'bar',
-                'payload': '',
-                'timestamp': 1
-            },
-            {
-                'command_id': 'command a',
-                'source': 'TEST',
-                'event_type': 'baz',
-                'payload': '',
-                'timestamp': 4
-            }
-        ])
-        self._write_sequence_of_records(writer, [
-            {
-                'command_id': 'command b',
-                'source': 'TEST',
-                'event_type': 'qux',
-                'payload': '',
-                'timestamp': 2
-            },
-            {
-                'command_id': 'command b',
-                'source': 'TEST',
-                'event_type': 'zip',
-                'payload': '',
-                'timestamp': 6
-            }
-        ])
+        self._write_sequence_of_records(
+            writer,
+            [
+                {
+                    'command_id': 'command a',
+                    'source': 'TEST',
+                    'event_type': 'foo',
+                    'payload': '',
+                    'timestamp': 3,
+                },
+                {
+                    'command_id': 'command a',
+                    'source': 'TEST',
+                    'event_type': 'bar',
+                    'payload': '',
+                    'timestamp': 1,
+                },
+                {
+                    'command_id': 'command a',
+                    'source': 'TEST',
+                    'event_type': 'baz',
+                    'payload': '',
+                    'timestamp': 4,
+                },
+            ],
+        )
+        self._write_sequence_of_records(
+            writer,
+            [
+                {
+                    'command_id': 'command b',
+                    'source': 'TEST',
+                    'event_type': 'qux',
+                    'payload': '',
+                    'timestamp': 2,
+                },
+                {
+                    'command_id': 'command b',
+                    'source': 'TEST',
+                    'event_type': 'zip',
+                    'payload': '',
+                    'timestamp': 6,
+                },
+            ],
+        )
         reader = DatabaseRecordReader(self.connection)
         cursor = self.connection.execute(
-            'select id from records where event_type = "foo" limit 1')
+            'select id from records where event_type = "foo" limit 1'
+        )
         identifier = cursor.fetchone()['id']
 
         # This should select only the three records from writer_a since we
@@ -262,46 +273,52 @@ class TestDatabaseRecordReader(BaseDatab
 
     def test_can_read_most_recent_records(self):
         writer = DatabaseRecordWriter(self.connection)
-        self._write_sequence_of_records(writer, [
-            {
-                'command_id': 'command a',
-                'source': 'TEST',
-                'event_type': 'foo',
-                'payload': '',
-                'timestamp': 3
-            },
-            {
-                'command_id': 'command a',
-                'source': 'TEST',
-                'event_type': 'bar',
-                'payload': '',
-                'timestamp': 1
-            }
-        ])
-        self._write_sequence_of_records(writer, [
-            {
-                'command_id': 'command b',
-                'source': 'TEST',
-                'event_type': 'baz',
-                'payload': '',
-                'timestamp': 2
-            }
-        ])
+        self._write_sequence_of_records(
+            writer,
+            [
+                {
+                    'command_id': 'command a',
+                    'source': 'TEST',
+                    'event_type': 'foo',
+                    'payload': '',
+                    'timestamp': 3,
+                },
+                {
+                    'command_id': 'command a',
+                    'source': 'TEST',
+                    'event_type': 'bar',
+                    'payload': '',
+                    'timestamp': 1,
+                },
+            ],
+        )
+        self._write_sequence_of_records(
+            writer,
+            [
+                {
+                    'command_id': 'command b',
+                    'source': 'TEST',
+                    'event_type': 'baz',
+                    'payload': '',
+                    'timestamp': 2,
+                }
+            ],
+        )
 
         # Since the foo and bar events were written by the writer_a they all
         # share an id. foo was written at time 3 which makes it the most
         # recent, so when we call get_latest_records we should get the
         # foo and bar records only.
         reader = DatabaseRecordReader(self.connection)
-        records = set([record['event_type'] for record
-                       in reader.iter_latest_records()])
+        records = set(
+            [record['event_type'] for record in reader.iter_latest_records()]
+        )
         self.assertEqual(set(['foo', 'bar']), records)
 
 
 class TestDatabaseHistoryHandler(unittest.TestCase):
     UUID_PATTERN = re.compile(
-        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$',
-        re.I
+        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', re.I
     )
 
     def setUp(self):
@@ -309,7 +326,8 @@ class TestDatabaseHistoryHandler(unittes
         self.writer = DatabaseRecordWriter(connection=self.db)
         self.record_builder = RecordBuilder()
         self.handler = DatabaseHistoryHandler(
-            writer=self.writer, record_builder=self.record_builder)
+            writer=self.writer, record_builder=self.record_builder
+        )
 
     def _get_last_record(self):
         record = self.db.execute('SELECT * FROM records').fetchone()
@@ -372,11 +390,7 @@ class TestDatabaseHistoryHandler(unittes
 
     def test_can_emit_api_call_record(self):
         # API_CALL records have a dictionary based payload
-        payload = {
-            'service': 's3',
-            'operation': 'ListBuckets',
-            'params': {}
-        }
+        payload = {'service': 's3', 'operation': 'ListBuckets', 'params': {}}
         self.handler.emit('API_CALL', payload, 'BOTOCORE')
         record = self._get_last_record()
         self._assert_record_has_command_id(record)
@@ -395,16 +409,13 @@ class TestDatabaseHistoryHandler(unittes
                 "Handler": "mod.fn",
                 "Role": "foobar",
                 "Runtime": "python3",
-                "Code": {
-                    "ZipFile": b'zipfile binary content \xfe\xed'
-                }
-            }
+                "Code": {"ZipFile": b'zipfile binary content \xfe\xed'},
+            },
         }
         self.handler.emit('API_CALL', payload, 'BOTOCORE')
         record = self._get_last_record()
         parsed_payload = payload.copy()
-        parsed_payload['params']['Code']['ZipFile'] = \
-            '<Byte sequence>'
+        parsed_payload['params']['Code']['ZipFile'] = '<Byte sequence>'
         self._assert_record_has_command_id(record)
         self._assert_has_request_id(record)
         self._assert_expected_event_type('API_CALL', record)
@@ -416,14 +427,14 @@ class TestDatabaseHistoryHandler(unittes
         # blob, however it will all be utf-8 valid since the binary fields
         # from the api call will have been b64 encoded.
         payload = {
-            'url': ('https://lambda.us-west-2.amazonaws.com/2015-03-31/'
-                    'functions'),
+            'url': (
+                'https://lambda.us-west-2.amazonaws.com/2015-03-31/'
+                'functions'
+            ),
             'method': 'POST',
-            'headers': CaseInsensitiveDict({
-                'foo': 'bar'
-            }),
+            'headers': CaseInsensitiveDict({'foo': 'bar'}),
             'body': b'body with no invalid utf-8 bytes in it',
-            'streaming': False
+            'streaming': False,
         }
         self.handler.emit('HTTP_REQUEST', payload, 'BOTOCORE')
         record = self._get_last_record()
@@ -440,11 +451,9 @@ class TestDatabaseHistoryHandler(unittes
         # will not contain any non-unicode characters
         payload = {
             'status_code': 200,
-            'headers': CaseInsensitiveDict({
-                'foo': 'bar'
-            }),
+            'headers': CaseInsensitiveDict({'foo': 'bar'}),
             'body': b'body with no invalid utf-8 bytes in it',
-            'streaming': False
+            'streaming': False,
         }
         self.handler.emit('HTTP_RESPONSE', payload, 'BOTOCORE')
         record = self._get_last_record()
@@ -459,15 +468,9 @@ class TestDatabaseHistoryHandler(unittes
     def test_can_emit_parsed_response_record(self):
         payload = {
             "Count": 1,
-            "Items": [
-                {
-                    "strkey": {
-                        "S": "string"
-                    }
-                }
-            ],
+            "Items": [{"strkey": {"S": "string"}}],
             "ScannedCount": 1,
-            "ConsumedCapacity": None
+            "ConsumedCapacity": None,
         }
         self.handler.emit('PARSED_RESPONSE', payload, 'BOTOCORE')
         record = self._get_last_record()
@@ -480,15 +483,9 @@ class TestDatabaseHistoryHandler(unittes
         # PARSED_RESPONSE can also contain raw bytes
         payload = {
             "Count": 1,
-            "Items": [
-                {
-                    "bitkey": {
-                        "B": b"binary data \xfe\xed"
-                    }
-                }
-            ],
+            "Items": [{"bitkey": {"B": b"binary data \xfe\xed"}}],
             "ScannedCount": 1,
-            "ConsumedCapacity": None
+            "ConsumedCapacity": None,
         }
         self.handler.emit('PARSED_RESPONSE', payload, 'BOTOCORE')
         record = self._get_last_record()
@@ -500,9 +497,7 @@ class TestDatabaseHistoryHandler(unittes
         self._assert_expected_source('BOTOCORE', record)
 
     def test_does_not_mutate_dict(self):
-        payload = {
-            "bitkey": b"binary data \xfe\xed"
-        }
+        payload = {"bitkey": b"binary data \xfe\xed"}
         copy_payload = payload.copy()
         self.handler.emit('test', payload, 'BOTOCORE')
         self.assertEqual(payload, copy_payload)
diff -pruN 2.23.6-1/tests/functional/history/test_list.py 2.31.35-1/tests/functional/history/test_list.py
--- 2.23.6-1/tests/functional/history/test_list.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/history/test_list.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,8 @@
 # language governing permissions and limitations under the License.
 from awscli.clidriver import AWSCLIEntryPoint
 from awscli.compat import ensure_text_type
-
-from tests.functional.history import BaseHistoryCommandParamsTest
 from awscli.testutils import create_clidriver
+from tests.functional.history import BaseHistoryCommandParamsTest
 
 
 class TestListCommand(BaseHistoryCommandParamsTest):
@@ -27,7 +26,7 @@ class TestListCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
@@ -54,7 +53,7 @@ class TestListCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
@@ -70,15 +69,15 @@ class TestListCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             },
             {
                 "UserId": "foo",
                 "Account": "bar",
-                "Arn": "arn:aws:iam::1234567:user/baz"
-            }
+                "Arn": "arn:aws:iam::1234567:user/baz",
+            },
         ]
         _, _, rc = self.run_cmd('ec2 describe-regions', expected_rc=0)
         self.history_recorder.record('CLI_RC', rc, 'CLI')
diff -pruN 2.23.6-1/tests/functional/history/test_show.py 2.31.35-1/tests/functional/history/test_show.py
--- 2.23.6-1/tests/functional/history/test_show.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/history/test_show.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,9 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests.functional.history import BaseHistoryCommandParamsTest
-
 from awscli.clidriver import AWSCLIEntryPoint
 from awscli.testutils import create_clidriver, mock
+from tests.functional.history import BaseHistoryCommandParamsTest
 
 
 class TestShowCommand(BaseHistoryCommandParamsTest):
@@ -23,7 +22,7 @@ class TestShowCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
@@ -48,7 +47,7 @@ class TestShowCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
@@ -65,14 +64,15 @@ class TestShowCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
         ]
         self.run_cmd('ec2 describe-regions', expected_rc=0)
         stdout, _, _ = self.run_cmd(
-            'history show --include CLI_ARGUMENTS', expected_rc=0)
+            'history show --include CLI_ARGUMENTS', expected_rc=0
+        )
         # Make sure the CLI version was not included because of the filter.
         #
         # The show command writes the history out as binary to the attached
@@ -87,14 +87,15 @@ class TestShowCommand(BaseHistoryCommand
                 "Regions": [
                     {
                         "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                        "RegionName": "ap-south-1",
                     },
                 ]
             }
         ]
         self.run_cmd('ec2 describe-regions', expected_rc=0)
         stdout, _, _ = self.run_cmd(
-            'history show --exclude CLI_ARGUMENTS', expected_rc=0)
+            'history show --exclude CLI_ARGUMENTS', expected_rc=0
+        )
         # Make sure the API call was not included because of the filter,
         # but all other events such as the version are included.
         #
diff -pruN 2.23.6-1/tests/functional/iam/test_create_open_id_connect_provider.py 2.31.35-1/tests/functional/iam/test_create_open_id_connect_provider.py
--- 2.23.6-1/tests/functional/iam/test_create_open_id_connect_provider.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/iam/test_create_open_id_connect_provider.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestCreateOpenIDConnectProvider(BaseAWSCommandParamsTest):
-
     prefix = 'iam create-open-id-connect-provider'
 
     def test_create_open_id_connect_provider(self):
@@ -24,6 +23,6 @@ class TestCreateOpenIDConnectProvider(Ba
 
         result = {
             'Url': 'https://example.com',
-            'ThumbprintList': ['990F4193972F2BECF12DDEDA5237F9C952F20D9E']
+            'ThumbprintList': ['990F4193972F2BECF12DDEDA5237F9C952F20D9E'],
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/iam/test_create_virtual_mfa_device.py 2.31.35-1/tests/functional/iam/test_create_virtual_mfa_device.py
--- 2.23.6-1/tests/functional/iam/test_create_virtual_mfa_device.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/iam/test_create_virtual_mfa_device.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import os
 
+from awscli.testutils import BaseAWSCommandParamsTest
+
 
 class TestCreateVirtualMFADevice(BaseAWSCommandParamsTest):
-
     prefix = 'iam create-virtual-mfa-device'
 
     def setUp(self):
@@ -24,12 +24,13 @@ class TestCreateVirtualMFADevice(BaseAWS
         self.parsed_response = {
             'ResponseMetadata': {
                 'HTTPStatusCode': 200,
-                'RequestId': 'requset-id'
+                'RequestId': 'requset-id',
             },
             "VirtualMFADevice": {
                 "Base32StringSeed": (
                     "VFpYTVc2V1lIUFlFRFczSVhLUlpRUTJRVFdUSFRNRDNTQ0c3"
-                    "TkZDUVdQWDVETlNWM0IyUENaQVpWTEpQTlBOTA=="),
+                    "TkZDUVdQWDVETlNWM0IyUENaQVpWTEpQTlBOTA=="
+                ),
                 "SerialNumber": "arn:aws:iam::419278470775:mfa/fiebaz",
                 "QRCodePNG": (
                     "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAIAAAAHjs1qAAAFi"
@@ -74,12 +75,13 @@ class TestCreateVirtualMFADevice(BaseAWS
                     "R3EVwF8FdBHcR3EVwF8Fd5F/+AgASajf850wfAAAAAElFTkSu"
                     "QmCC"
                 ),
-            }
+            },
         }
 
     def getpath(self, filename):
-        return os.path.join(os.path.abspath(os.path.dirname(__file__)),
-                            filename)
+        return os.path.join(
+            os.path.abspath(os.path.dirname(__file__)), filename
+        )
 
     def remove_file_if_exists(self, filename):
         if os.path.isfile(filename):
@@ -91,7 +93,8 @@ class TestCreateVirtualMFADevice(BaseAWS
         cmdline = self.prefix
         cmdline += ' --virtual-mfa-device-name fiebaz'
         cmdline += (
-            ' --outfile %s --bootstrap-method Base32StringSeed' % outfile)
+            ' --outfile %s --bootstrap-method Base32StringSeed' % outfile
+        )
         result = {"VirtualMFADeviceName": 'fiebaz'}
         self.assert_params_for_cmd(cmdline, result)
         self.assertTrue(os.path.exists(outfile))
@@ -145,7 +148,8 @@ class TestCreateVirtualMFADevice(BaseAWS
             },
             'ResponseMetadata': {
                 'HTTPStatusCode': 409,
-                'RequestId': 'requset-id'}
+                'RequestId': 'requset-id',
+            },
         }
         self.http_response.status_code = 409
         cmdline = self.prefix
@@ -155,4 +159,5 @@ class TestCreateVirtualMFADevice(BaseAWS
         self.assert_params_for_cmd(
             cmdline,
             stderr_contains=self.parsed_response['Error']['Message'],
-            expected_rc=254)
+            expected_rc=254,
+        )
diff -pruN 2.23.6-1/tests/functional/iam/test_list_access_keys.py 2.31.35-1/tests/functional/iam/test_list_access_keys.py
--- 2.23.6-1/tests/functional/iam/test_list_access_keys.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/iam/test_list_access_keys.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestListAccessKeys(BaseAWSCommandParamsTest):
-
     prefix = 'iam list-access-keys'
 
     def test_list_access_keys_with_no_paginate(self):
diff -pruN 2.23.6-1/tests/functional/iot/test_outfile.py 2.31.35-1/tests/functional/iot/test_outfile.py
--- 2.23.6-1/tests/functional/iot/test_outfile.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/iot/test_outfile.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 import os
 
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
+
 
 class TestOutFileQueryArguments(BaseAWSCommandParamsTest):
     def setUp(self):
@@ -29,8 +30,8 @@ class TestOutFileQueryArguments(BaseAWSC
             'certificatePem': 'cert...',
             'ResponseMetadata': {
                 'HTTPStatusCode': 200,
-                'RequestId': 'request-id'
-            }
+                'RequestId': 'request-id',
+            },
         }
         outfile = self.files.full_path('cert.pem')
         cmdline = 'iot create-certificate-from-csr'
@@ -44,14 +45,11 @@ class TestOutFileQueryArguments(BaseAWSC
     def test_saves_files_for_create_keys_and_cert(self):
         self.parsed_response = {
             'certificatePem': 'cert...',
-            'keyPair': {
-                'PublicKey': 'public',
-                'PrivateKey': 'private'
-            },
+            'keyPair': {'PublicKey': 'public', 'PrivateKey': 'private'},
             'ResponseMetadata': {
                 'HTTPStatusCode': 200,
-                'RequestId': 'request-id'
-            }
+                'RequestId': 'request-id',
+            },
         }
         out_cert = self.files.full_path('cert.pem')
         out_pub = self.files.full_path('key_rsa.pub')
@@ -77,8 +75,8 @@ class TestOutFileQueryArguments(BaseAWSC
             'Error': {'Code': 'v1', 'Message': 'v2', 'Type': 'v3'},
             'ResponseMetadata': {
                 'HTTPStatusCode': 403,
-                'RequestId': 'request-id'
-            }
+                'RequestId': 'request-id',
+            },
         }
         self.http_response.status_code = 403
         cmdline = 'iot create-certificate-from-csr'
@@ -88,7 +86,8 @@ class TestOutFileQueryArguments(BaseAWSC
         self.assert_params_for_cmd(
             cmdline,
             stderr_contains=self.parsed_response['Error']['Message'],
-            expected_rc=254)
+            expected_rc=254,
+        )
 
     def test_ensures_file_is_writable_before_sending(self):
         outfile = os.sep.join(['', 'does', 'not', 'exist_', 'file.txt'])
@@ -99,4 +98,5 @@ class TestOutFileQueryArguments(BaseAWSC
         self.assert_params_for_cmd(
             cmdline,
             stderr_contains='Unable to write to file: ',
-            expected_rc=252)
+            expected_rc=252,
+        )
diff -pruN 2.23.6-1/tests/functional/kinesis/test_list_streams.py 2.31.35-1/tests/functional/kinesis/test_list_streams.py
--- 2.23.6-1/tests/functional/kinesis/test_list_streams.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/kinesis/test_list_streams.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestListStreams(BaseAWSCommandParamsTest):
-
     prefix = ['kinesis', 'list-streams']
 
     def test_exclusive_start_stream_name_disables_auto_pagination(self):
diff -pruN 2.23.6-1/tests/functional/kinesis/test_remove_operations.py 2.31.35-1/tests/functional/kinesis/test_remove_operations.py
--- 2.23.6-1/tests/functional/kinesis/test_remove_operations.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/kinesis/test_remove_operations.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,5 +15,5 @@ from tests import CLIRunner
 
 def test_subscribe_to_shard_removed():
     result = CLIRunner().run(['kinesis', 'subscribe-to-shard', 'help'])
-    expected_error = 'argument operation: Invalid choice, valid choices are:'
+    expected_error = "argument operation: Found invalid choice 'subscribe-to-shard'"
     assert expected_error in result.stderr
diff -pruN 2.23.6-1/tests/functional/lex/test_remove_operations.py 2.31.35-1/tests/functional/lex/test_remove_operations.py
--- 2.23.6-1/tests/functional/lex/test_remove_operations.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/lex/test_remove_operations.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,5 +15,5 @@ from tests import CLIRunner
 
 def test_start_conversation_removed():
     result = CLIRunner().run(['lexv2-runtime', 'start-conversation', 'help'])
-    expected_error = 'argument operation: Invalid choice, valid choices are:'
+    expected_error = "argument operation: Found invalid choice 'start-conversation'"
     assert expected_error in result.stderr
diff -pruN 2.23.6-1/tests/functional/lightsail/test_push_container_image.py 2.31.35-1/tests/functional/lightsail/test_push_container_image.py
--- 2.23.6-1/tests/functional/lightsail/test_push_container_image.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/lightsail/test_push_container_image.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,13 +12,16 @@
 # language governing permissions and limitations under the License.
 import errno
 import json
-import awscli
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest, BaseAWSHelpOutputTest
+import awscli
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    mock,
+)
 
 
 class TestPushContainerImageTest(BaseAWSCommandParamsTest):
-
     def get_push_container_command(self, extra_params):
         cmd = (
             'lightsail '
@@ -32,8 +35,10 @@ class TestPushContainerImageTest(BaseAWS
         return cmd
 
     def assert_expected_input_options(self, mock_subprocess_run):
-        self.assertEqual(['lightsailctl', '--plugin', '--input-stdin'],
-                         mock_subprocess_run.call_args[0][0])
+        self.assertEqual(
+            ['lightsailctl', '--plugin', '--input-stdin'],
+            mock_subprocess_run.call_args[0][0],
+        )
 
     def assert_expected_input_version(self, actual_input_version):
         self.assertEqual('1', actual_input_version)
@@ -48,34 +53,37 @@ class TestPushContainerImageTest(BaseAWS
                 'image': 'hello:latest',
                 'label': 'david16',
             },
-            actual_payload
+            actual_payload,
         )
 
-    def assert_expected_configuration(self,
-                                      configuration_payload,
-                                      **expected_options):
+    def assert_expected_configuration(
+        self, configuration_payload, **expected_options
+    ):
         for option, value in expected_options.items():
             self.assertEqual(configuration_payload[option], value)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
-    def test_start_lightsailctl_failed(
-            self, mock_subprocess_run):
-        cmdline = 'lightsail ' \
-                  '--region us-west-2 ' \
-                  '--endpoint-url https://override.custom.endpoint.com ' \
-                  'push-container-image ' \
-                  '--service-name=dyservicev3 ' \
-                  '--label david16  '
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
+    def test_start_lightsailctl_failed(self, mock_subprocess_run):
+        cmdline = (
+            'lightsail '
+            '--region us-west-2 '
+            '--endpoint-url https://override.custom.endpoint.com '
+            'push-container-image '
+            '--service-name=dyservicev3 '
+            '--label david16  '
+        )
         mock_subprocess_run.side_effect = OSError(errno.ENOENT, 'some error')
         response = self.run_cmd(cmdline, expected_rc=252)
         self.assertEqual(response[2], 252)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
-    def test_start_lightsailctl_success(
-            self, mock_subprocess_run):
-
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
+    def test_start_lightsailctl_success(self, mock_subprocess_run):
         cmdline = self.get_push_container_command(None)
 
         mock_subprocess_run.return_value = 0
@@ -83,26 +91,27 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           debug=False,
-                                           paginate=True,
-                                           region='us-east-1',
-                                           doNotSignRequest=False,
-                                           readTimeout=60,
-                                           connectTimeout=60,
-                                           cliVersion=awscli.__version__)
+        self.assert_expected_configuration(
+            actual_input['configuration'],
+            debug=False,
+            paginate=True,
+            region='us-east-1',
+            doNotSignRequest=False,
+            readTimeout=60,
+            connectTimeout=60,
+            cliVersion=awscli.__version__,
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
-    def test_start_lightsailctl_with_region_success(
-            self, mock_subprocess_run):
-
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
+    def test_start_lightsailctl_with_region_success(self, mock_subprocess_run):
         cmdline = self.get_push_container_command('--region us-west-2')
 
         mock_subprocess_run.return_value = 0
@@ -110,23 +119,21 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           region='us-west-2')
+        self.assert_expected_configuration(
+            actual_input['configuration'], region='us-west-2'
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
-    def test_start_lightsailctl_with_url_success(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--endpoint-url https://test.amazon.com '
-        )
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
+    def test_start_lightsailctl_with_url_success(self, mock_subprocess_run):
+        extra_param = '--endpoint-url https://test.amazon.com '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -134,23 +141,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           endpoint='https://test.amazon.com')
+        self.assert_expected_configuration(
+            actual_input['configuration'], endpoint='https://test.amazon.com'
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_no_verify_ssl_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--no-verify-ssl '
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--no-verify-ssl '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -158,23 +165,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           doNotVerifySSL=True)
+        self.assert_expected_configuration(
+            actual_input['configuration'], doNotVerifySSL=True
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_no_sign_request_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--no-sign-request '
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--no-sign-request '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -182,23 +189,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           doNotSignRequest=True)
+        self.assert_expected_configuration(
+            actual_input['configuration'], doNotSignRequest=True
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_no_paginate_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--no-paginate '
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--no-paginate '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -206,23 +213,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           paginate=False)
+        self.assert_expected_configuration(
+            actual_input['configuration'], paginate=False
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_output_json_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--output json'
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--output json'
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -230,23 +237,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           output='json')
+        self.assert_expected_configuration(
+            actual_input['configuration'], output='json'
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_read_timeout_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--cli-read-timeout 70 '
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--cli-read-timeout 70 '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -254,23 +261,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           readTimeout=70)
+        self.assert_expected_configuration(
+            actual_input['configuration'], readTimeout=70
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_con_timeout_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--cli-connect-timeout 80 '
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--cli-connect-timeout 80 '
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -278,23 +285,23 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           connectTimeout=80)
+        self.assert_expected_configuration(
+            actual_input['configuration'], connectTimeout=80
+        )
         self.assertEqual(response[2], 0)
 
-    @mock.patch('awscli.customizations.lightsail.'
-                'push_container_image.subprocess.run')
+    @mock.patch(
+        'awscli.customizations.lightsail.'
+        'push_container_image.subprocess.run'
+    )
     def test_start_lightsailctl_with_cabundle_ssuccess(
-            self, mock_subprocess_run):
-
-        extra_param = (
-            '--ca-bundle testPEM'
-        )
+        self, mock_subprocess_run
+    ):
+        extra_param = '--ca-bundle testPEM'
         cmdline = self.get_push_container_command(extra_param)
 
         mock_subprocess_run.return_value = 0
@@ -302,18 +309,17 @@ class TestPushContainerImageTest(BaseAWS
 
         self.assert_expected_input_options(mock_subprocess_run)
 
-        actual_input = json.loads(
-            mock_subprocess_run.call_args[1]['input'])
+        actual_input = json.loads(mock_subprocess_run.call_args[1]['input'])
         self.assert_expected_input_version(actual_input['inputVersion'])
         self.assert_expected_operation(actual_input['operation'])
         self.assert_expected_payload(actual_input['payload'])
-        self.assert_expected_configuration(actual_input['configuration'],
-                                           caBundle='testPEM')
+        self.assert_expected_configuration(
+            actual_input['configuration'], caBundle='testPEM'
+        )
         self.assertEqual(response[2], 0)
 
 
 class TestHelpOutput(BaseAWSHelpOutputTest):
-
     def test_lightsailctl_output(self):
         self.driver.main(['lightsail', 'push-container-image', 'help'])
         self.assert_contains('push-container-image')
diff -pruN 2.23.6-1/tests/functional/logs/test_startlivetail.py 2.31.35-1/tests/functional/logs/test_startlivetail.py
--- 2.23.6-1/tests/functional/logs/test_startlivetail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/logs/test_startlivetail.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestStartLiveTailCommand(BaseAWSCommandParamsTest):
diff -pruN 2.23.6-1/tests/functional/logs/test_tail.py 2.31.35-1/tests/functional/logs/test_tail.py
--- 2.23.6-1/tests/functional/logs/test_tail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/logs/test_tail.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,7 @@ from datetime import datetime
 
 from dateutil import tz
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestTailCommand(BaseAWSCommandParamsTest):
@@ -49,13 +49,13 @@ class TestTailCommand(BaseAWSCommandPara
             params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-                'startTime': mock.ANY
-            }
+                'startTime': mock.ANY,
+            },
         )
         self.assertEqual(
             stdout,
-            '%s %s %s' % (
-                self.formatted_log_timestamp, self.stream_name, self.message)
+            '%s %s %s'
+            % (self.formatted_log_timestamp, self.stream_name, self.message),
         )
 
     def test_tail_paginated(self):
@@ -70,7 +70,7 @@ class TestTailCommand(BaseAWSCommandPara
                         'ingestionTime': self.response_log_timestamp,
                     }
                 ],
-                'nextToken': 'token'
+                'nextToken': 'token',
             },
             {
                 "events": [
@@ -82,36 +82,34 @@ class TestTailCommand(BaseAWSCommandPara
                         'ingestionTime': self.response_log_timestamp,
                     }
                 ],
-            }
+            },
         ]
         stdout, _, _ = self.run_cmd('logs tail %s' % self.group_name)
         self.assertEqual(len(self.operations_called), 2)
-        self.assertEqual(
-            self.operations_called[0][0].name, 'FilterLogEvents')
+        self.assertEqual(self.operations_called[0][0].name, 'FilterLogEvents')
         self.assertEqual(
             self.operations_called[0][1],
             {
                 'logGroupName': 'mygroup',
                 'interleaved': True,
                 'startTime': mock.ANY,
-            }
+            },
         )
-        self.assertEqual(
-            self.operations_called[1][0].name, 'FilterLogEvents')
+        self.assertEqual(self.operations_called[1][0].name, 'FilterLogEvents')
         self.assertEqual(
             self.operations_called[1][1],
             {
                 'logGroupName': 'mygroup',
                 'interleaved': True,
                 'startTime': mock.ANY,
-                'nextToken': 'token'
-            }
+                'nextToken': 'token',
+            },
         )
         self.assertEqual(
             stdout,
-            '%s %s %s' % (
-                self.formatted_log_timestamp, self.stream_name,
-                self.message) * 2
+            '%s %s %s'
+            % (self.formatted_log_timestamp, self.stream_name, self.message)
+            * 2,
         )
 
     def test_tail_with_follow(self):
@@ -137,32 +135,39 @@ class TestTailCommand(BaseAWSCommandPara
                         'ingestionTime': self.response_log_timestamp,
                     }
                 ],
-            }
+            },
         ]
         with mock.patch('time.sleep') as mock_sleep:
             mock_sleep.side_effect = [None, KeyboardInterrupt]
             stdout, _, _ = self.run_cmd(
-                'logs tail %s --follow' % self.group_name)
+                'logs tail %s --follow' % self.group_name
+            )
             self.assertEqual(
                 stdout,
-                '%s %s %s' % (
-                    self.formatted_log_timestamp, self.stream_name,
-                    self.message) * 2
+                '%s %s %s'
+                % (
+                    self.formatted_log_timestamp,
+                    self.stream_name,
+                    self.message,
+                )
+                * 2,
             )
 
     def test_tail_defaults_to_10m(self):
         datetime_mock = mock.Mock(wraps=datetime)
         datetime_mock.utcnow = mock.Mock(
-            return_value=datetime(1970, 1, 1, 0, 10, 1, tzinfo=tz.tzutc()))
-        with mock.patch('awscli.customizations.logs.tail.datetime',
-                        new=datetime_mock):
+            return_value=datetime(1970, 1, 1, 0, 10, 1, tzinfo=tz.tzutc())
+        )
+        with mock.patch(
+            'awscli.customizations.logs.tail.datetime', new=datetime_mock
+        ):
             self.assert_params_for_cmd(
                 'logs tail %s' % self.group_name,
                 params={
                     'logGroupName': self.group_name,
                     'interleaved': True,
                     'startTime': 1000,
-                }
+                },
             )
 
     def test_tail_with_since(self):
@@ -171,23 +176,25 @@ class TestTailCommand(BaseAWSCommandPara
             params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-                'startTime': 1000
-            }
+                'startTime': 1000,
+            },
         )
 
     def test_tail_with_relative_since(self):
         datetime_mock = mock.Mock(wraps=datetime)
         datetime_mock.utcnow = mock.Mock(
-            return_value=datetime(1970, 1, 1, 0, 0, 2, tzinfo=tz.tzutc()))
-        with mock.patch('awscli.customizations.logs.tail.datetime',
-                        new=datetime_mock):
+            return_value=datetime(1970, 1, 1, 0, 0, 2, tzinfo=tz.tzutc())
+        )
+        with mock.patch(
+            'awscli.customizations.logs.tail.datetime', new=datetime_mock
+        ):
             self.assert_params_for_cmd(
                 'logs tail %s --since 1s' % self.group_name,
                 params={
                     'logGroupName': self.group_name,
                     'interleaved': True,
                     'startTime': 1000,
-                }
+                },
             )
 
     def test_tail_with_filter_pattern(self):
@@ -197,58 +204,61 @@ class TestTailCommand(BaseAWSCommandPara
                 'logGroupName': self.group_name,
                 'interleaved': True,
                 'startTime': mock.ANY,
-                'filterPattern': 'Pattern'
-            }
+                'filterPattern': 'Pattern',
+            },
         )
 
     def test_tail_with_short_format(self):
         stdout, _, _ = self.run_cmd(
-            'logs tail %s --format short' % self.group_name)
+            'logs tail %s --format short' % self.group_name
+        )
         self.assertEqual(
             stdout,
-            '%s %s' % (self.formatted_short_log_timestamp, self.message)
+            '%s %s' % (self.formatted_short_log_timestamp, self.message),
         )
 
     def test_tail_with_color_on(self):
         stdout, _, _ = self.run_cmd(
-            'logs tail %s --color on' % self.group_name)
+            'logs tail %s --color on' % self.group_name
+        )
         self.assertEqual(
             stdout,
-            "\x1b[32m%s\x1b[0m \x1b[36m%s\x1b[0m %s" % (
-                self.formatted_log_timestamp, self.stream_name, self.message)
+            "\x1b[32m%s\x1b[0m \x1b[36m%s\x1b[0m %s"
+            % (self.formatted_log_timestamp, self.stream_name, self.message),
         )
 
     def test_tail_with_color_off(self):
         stdout, _, _ = self.run_cmd(
-            'logs tail %s --color off' % self.group_name)
+            'logs tail %s --color off' % self.group_name
+        )
         self.assertEqual(
             stdout,
-            "%s %s %s" % (
-                self.formatted_log_timestamp, self.stream_name, self.message)
+            "%s %s %s"
+            % (self.formatted_log_timestamp, self.stream_name, self.message),
         )
 
     def test_tail_no_color_when_tty(self):
         with mock.patch(
-                'awscli.customizations.logs.tail.is_a_tty') as mock_is_a_tty:
+            'awscli.customizations.logs.tail.is_a_tty'
+        ) as mock_is_a_tty:
             mock_is_a_tty.return_value = True
-            stdout, _, _ = self.run_cmd(
-                'logs tail %s' % self.group_name)
+            stdout, _, _ = self.run_cmd('logs tail %s' % self.group_name)
         self.assertEqual(
             stdout,
-            "\x1b[32m%s\x1b[0m \x1b[36m%s\x1b[0m %s" % (
-                self.formatted_log_timestamp, self.stream_name, self.message)
+            "\x1b[32m%s\x1b[0m \x1b[36m%s\x1b[0m %s"
+            % (self.formatted_log_timestamp, self.stream_name, self.message),
         )
 
     def test_tail_with_log_stream_names(self):
         self.assert_params_for_cmd(
-            'logs tail %s --log-stream-names foo-stream bar-stream' %
-            self.group_name,
+            'logs tail %s --log-stream-names foo-stream bar-stream'
+            % self.group_name,
             params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
                 'startTime': mock.ANY,
-                'logStreamNames': ['foo-stream', 'bar-stream']
-            }
+                'logStreamNames': ['foo-stream', 'bar-stream'],
+            },
         )
 
     def test_tail_with_log_stream_name_prefix(self):
@@ -258,6 +268,6 @@ class TestTailCommand(BaseAWSCommandPara
                 'logGroupName': self.group_name,
                 'interleaved': True,
                 'startTime': mock.ANY,
-                'logStreamNamePrefix': 'foo'
-            }
+                'logStreamNamePrefix': 'foo',
+            },
         )
diff -pruN 2.23.6-1/tests/functional/machinelearning/test_predict.py 2.31.35-1/tests/functional/machinelearning/test_predict.py
--- 2.23.6-1/tests/functional/machinelearning/test_predict.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/machinelearning/test_predict.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,14 +14,15 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestPredict(BaseAWSCommandParamsTest):
-
     prefix = 'machinelearning predict'
 
     def test_renamed_reboot_arg(self):
         cmdline = self.prefix
         cmdline += ' --ml-model-id ml-foo --record Foo=Bar,Biz=Baz'
         cmdline += ' --predict-endpoint https://myendpoint.amazonaws.com'
-        result = {'MLModelId': 'ml-foo',
-                  'Record': {'Foo': 'Bar', 'Biz': 'Baz'},
-                  'PredictEndpoint': 'https://myendpoint.amazonaws.com'}
+        result = {
+            'MLModelId': 'ml-foo',
+            'Record': {'Foo': 'Bar', 'Biz': 'Baz'},
+            'PredictEndpoint': 'https://myendpoint.amazonaws.com',
+        }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/mgn/test_start_cutover.py 2.31.35-1/tests/functional/mgn/test_start_cutover.py
--- 2.23.6-1/tests/functional/mgn/test_start_cutover.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/mgn/test_start_cutover.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,18 +18,14 @@ class TestStartCutover(BaseAWSCommandPar
     SOURCE_SERVER_ID = 'a' * 50
 
     def test_accepts_old_argname(self):
-        cmdline = (
-            f'{self.PREFIX} --source-server-i-ds {self.SOURCE_SERVER_ID}'
-        )
+        cmdline = f'{self.PREFIX} --source-server-i-ds {self.SOURCE_SERVER_ID}'
         params = {
             'sourceServerIDs': [self.SOURCE_SERVER_ID],
         }
         self.assert_params_for_cmd(cmdline, params)
 
     def test_accepts_fixed_param_name(self):
-        cmdline = (
-            f'{self.PREFIX} --source-server-ids {self.SOURCE_SERVER_ID}'
-        )
+        cmdline = f'{self.PREFIX} --source-server-ids {self.SOURCE_SERVER_ID}'
         params = {
             'sourceServerIDs': [self.SOURCE_SERVER_ID],
         }
diff -pruN 2.23.6-1/tests/functional/opsworks/__init__.py 2.31.35-1/tests/functional/opsworks/__init__.py
--- 2.23.6-1/tests/functional/opsworks/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/__init__.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,12 +0,0 @@
-# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/tests/functional/opsworks/create_layer_attributes.json 2.31.35-1/tests/functional/opsworks/create_layer_attributes.json
--- 2.23.6-1/tests/functional/opsworks/create_layer_attributes.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/create_layer_attributes.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-{"RubygemsVersion": "1.8.24",
- "RailsStack": "apache_passenger",
- "RubyVersion": "1.9.3",
- "BundlerVersion": "1.2.3",
- "PassengerVersion": "3.0.17",
- "ManageBundler": "true"
-}
diff -pruN 2.23.6-1/tests/functional/opsworks/test_create_instance.py 2.31.35-1/tests/functional/opsworks/test_create_instance.py
--- 2.23.6-1/tests/functional/opsworks/test_create_instance.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/test_create_instance.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-import awscli.clidriver
-
-
-class TestCreateInstance(BaseAWSCommandParamsTest):
-
-    prefix = 'opsworks create-instance'
-
-    def test_simple(self):
-        cmdline = self.prefix
-        cmdline += ' --stack-id f623987f-6303-4bba-a38e-63073e85c726'
-        cmdline += ' --layer-ids cb27894d-35f3-4435-b422-6641a785fa4a'
-        cmdline += ' --instance-type c1.medium'
-        cmdline += ' --hostname aws-client-instance'
-        result = {'StackId': 'f623987f-6303-4bba-a38e-63073e85c726',
-                  'Hostname': 'aws-client-instance',
-                  'LayerIds': ['cb27894d-35f3-4435-b422-6641a785fa4a'],
-                  'InstanceType': 'c1.medium'}
-        self.assert_params_for_cmd(cmdline, result)
-
-
-if __name__ == "__main__":
-    unittest.main()
diff -pruN 2.23.6-1/tests/functional/opsworks/test_create_layer.py 2.31.35-1/tests/functional/opsworks/test_create_layer.py
--- 2.23.6-1/tests/functional/opsworks/test_create_layer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/test_create_layer.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-import unittest
-from awscli.testutils import BaseAWSCommandParamsTest
-import os
-import awscli.clidriver
-
-
-class TestCreateLayer(BaseAWSCommandParamsTest):
-
-    prefix = 'opsworks create-layer'
-
-    def test_attributes_file(self):
-        data_path = os.path.join(os.path.dirname(__file__),
-                                 'create_layer_attributes.json')
-        cmdline = self.prefix
-        cmdline += ' --stack-id 35959772-cd1e-4082-8346-79096d4179f2'
-        cmdline += ' --type rails-app'
-        cmdline += ' --name Rails_App_Server'
-        cmdline += ' --enable-auto-healing'
-        cmdline += ' --attributes file://%s' % data_path
-        cmdline += ' --shortname foo'
-        result = {'StackId': '35959772-cd1e-4082-8346-79096d4179f2',
-                  'Type': 'rails-app',
-                  'Name': 'Rails_App_Server',
-                  'EnableAutoHealing': True,
-                  'Shortname': 'foo',
-                  'Attributes': {"RubygemsVersion": "1.8.24",
-                                 "RailsStack": "apache_passenger",
-                                 "RubyVersion": "1.9.3",
-                                 "BundlerVersion": "1.2.3",
-                                 "PassengerVersion": "3.0.17",
-                                 "ManageBundler": "true",
-                                 }
-                  }
-        self.assert_params_for_cmd(cmdline, result)
-
-
-if __name__ == "__main__":
-    unittest.main()
diff -pruN 2.23.6-1/tests/functional/opsworks/test_create_stack.py 2.31.35-1/tests/functional/opsworks/test_create_stack.py
--- 2.23.6-1/tests/functional/opsworks/test_create_stack.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/test_create_stack.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-import os
-import awscli.clidriver
-
-
-class TestCreateStack(BaseAWSCommandParamsTest):
-
-    prefix = 'opsworks create-stack'
-
-    def test_attributes_file(self):
-        cmdline = self.prefix
-        cmdline += ' --service-role-arn arn-blahblahblah'
-        cmdline += ' --name FooStack'
-        cmdline += ' --stack-region us-west-2'
-        cmdline += ' --default-instance-profile-arn arn-foofoofoo'
-        result = {'ServiceRoleArn': 'arn-blahblahblah',
-                  'Name': 'FooStack',
-                  'Region': 'us-west-2',
-                  'DefaultInstanceProfileArn': 'arn-foofoofoo'
-                  }
-        self.assert_params_for_cmd(cmdline, result)
-
-
-if __name__ == "__main__":
-    unittest.main()
diff -pruN 2.23.6-1/tests/functional/opsworks/test_describe_layers.py 2.31.35-1/tests/functional/opsworks/test_describe_layers.py
--- 2.23.6-1/tests/functional/opsworks/test_describe_layers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworks/test_describe_layers.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-import awscli.clidriver
-
-
-class TestDescribeLayers(BaseAWSCommandParamsTest):
-
-    prefix = 'opsworks describe-layers'
-
-    def test_both_params(self):
-        cmdline = self.prefix
-        cmdline += ' --stack-id 35959772-cd1e-4082-8346-79096d4179f2'
-        result = {'StackId': '35959772-cd1e-4082-8346-79096d4179f2'}
-        self.assert_params_for_cmd(cmdline, result)
-
-
-if __name__ == "__main__":
-    unittest.main()
diff -pruN 2.23.6-1/tests/functional/opsworkscm/__init__.py 2.31.35-1/tests/functional/opsworkscm/__init__.py
--- 2.23.6-1/tests/functional/opsworkscm/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworkscm/__init__.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,12 +0,0 @@
-# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/tests/functional/opsworkscm/test_alias.py 2.31.35-1/tests/functional/opsworkscm/test_alias.py
--- 2.23.6-1/tests/functional/opsworkscm/test_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/opsworkscm/test_alias.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-
-
-class TestOpsworksCMRenamed(BaseAWSCommandParamsTest):
-    def test_alias(self):
-        # This service was aliased, both should work
-        self.run_cmd('opsworks-cm describe-servers', expected_rc=0)
-        self.run_cmd('opsworkscm describe-servers', expected_rc=0)
diff -pruN 2.23.6-1/tests/functional/quicksight/test_assetbundle_parameters.py 2.31.35-1/tests/functional/quicksight/test_assetbundle_parameters.py
--- 2.23.6-1/tests/functional/quicksight/test_assetbundle_parameters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/quicksight/test_assetbundle_parameters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class BaseQuickSightAssetBundleTest(BaseAWSCommandParamsTest):
     def setUp(self):
         super(BaseQuickSightAssetBundleTest, self).setUp()
         self.files = FileCreator()
-        self.temp_file = self.files.create_file(
-            'foo', 'mycontents')
+        self.temp_file = self.files.create_file('foo', 'mycontents')
         with open(self.temp_file, 'rb') as f:
             self.temp_file_bytes = f.read()
 
@@ -29,13 +27,17 @@ class BaseQuickSightAssetBundleTest(Base
 
 
 class TestStartAssetBundleImportJob(BaseQuickSightAssetBundleTest):
-    prefix = 'quicksight start-asset-bundle-import-job ' \
-             '--aws-account-id 123456789012 ' \
-             '--asset-bundle-import-job-id import-job-1 '
+    prefix = (
+        'quicksight start-asset-bundle-import-job '
+        '--aws-account-id 123456789012 '
+        '--asset-bundle-import-job-id import-job-1 '
+    )
 
     def test_can_provide_source_body_as_top_level_param(self):
         cmdline = self.prefix
-        cmdline += f' --asset-bundle-import-source-bytes fileb://{self.temp_file}'
+        cmdline += (
+            f' --asset-bundle-import-source-bytes fileb://{self.temp_file}'
+        )
         result = {
             'AwsAccountId': '123456789012',
             'AssetBundleImportJobId': 'import-job-1',
diff -pruN 2.23.6-1/tests/functional/rds/__init__.py 2.31.35-1/tests/functional/rds/__init__.py
--- 2.23.6-1/tests/functional/rds/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/rds/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,4 +10,3 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-
diff -pruN 2.23.6-1/tests/functional/rds/test_describe_db_log_files.py 2.31.35-1/tests/functional/rds/test_describe_db_log_files.py
--- 2.23.6-1/tests/functional/rds/test_describe_db_log_files.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/rds/test_describe_db_log_files.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,9 +19,7 @@ class TestDescribeDBLogFiles(BaseAWSComm
     prefix = 'rds describe-db-log-files '
 
     def test_add_option(self):
-        args = ('--file-last-written 10 '
-                '--db-instance-identifier foo')
+        args = '--file-last-written 10 ' '--db-instance-identifier foo'
         cmdline = self.prefix + args
-        result = {'DBInstanceIdentifier': 'foo',
-                  'FileLastWritten': 10}
+        result = {'DBInstanceIdentifier': 'foo', 'FileLastWritten': 10}
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/rds/test_generate_db_auth_token.py 2.31.35-1/tests/functional/rds/test_generate_db_auth_token.py
--- 2.23.6-1/tests/functional/rds/test_generate_db_auth_token.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/rds/test_generate_db_auth_token.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,13 @@
 # language governing permissions and limitations under the License.
 import datetime
 
+from botocore.compat import parse_qs, urlparse
 from dateutil.tz import tzutc
-from botocore.compat import urlparse, parse_qs
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestGenerateDBAuthToken(BaseAWSCommandParamsTest):
-
     prefix = 'rds generate-db-auth-token'
 
     def _urlparse(self, url):
@@ -64,4 +63,5 @@ class TestGenerateDBAuthToken(BaseAWSCom
         )
 
         self.assert_url_equal(
-            'https://' + stdout.strip('\n'), 'https://' + expected)
+            'https://' + stdout.strip('\n'), 'https://' + expected
+        )
diff -pruN 2.23.6-1/tests/functional/rds/test_modify_option_group.py 2.31.35-1/tests/functional/rds/test_modify_option_group.py
--- 2.23.6-1/tests/functional/rds/test_modify_option_group.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/rds/test_modify_option_group.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,38 +23,47 @@ class TestAddOptionGroup(BaseAWSCommandP
     prefix = 'rds add-option-to-option-group '
 
     def test_add_option(self):
-        args = ('--option-group-name myoptiongroup2 '
-                '--options {"OptionName":"TDE"}')
+        args = (
+            '--option-group-name myoptiongroup2 '
+            '--options {"OptionName":"TDE"}'
+        )
         cmdline = self.prefix + args
-        result = {'OptionsToInclude': [{'OptionName': 'TDE'}],
-                  'OptionGroupName': 'myoptiongroup2'}
+        result = {
+            'OptionsToInclude': [{'OptionName': 'TDE'}],
+            'OptionGroupName': 'myoptiongroup2',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_option_to_remove_is_not_allowed(self):
-        args = ('--option-group-name myoptiongroup2 '
-                '--options-to-remove foo')
+        args = '--option-group-name myoptiongroup2 ' '--options-to-remove foo'
         cmdline = self.prefix + args
         self.assert_params_for_cmd(
-            cmdline, expected_rc=252,
-            stderr_contains='Unknown options: --options-to-remove')
+            cmdline,
+            expected_rc=252,
+            stderr_contains='Unknown options: --options-to-remove',
+        )
 
 
 class TestRemoveOptionGroup(BaseAWSCommandParamsTest):
-
     prefix = 'rds remove-option-from-option-group '
 
     def test_remove_options(self):
-        args = ('--option-group-name myoptiongroup2 '
-                '--options TDE')
+        args = '--option-group-name myoptiongroup2 ' '--options TDE'
         cmdline = self.prefix + args
-        result = {'OptionsToRemove': ['TDE'],
-                  'OptionGroupName': 'myoptiongroup2'}
+        result = {
+            'OptionsToRemove': ['TDE'],
+            'OptionGroupName': 'myoptiongroup2',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_option_to_add_is_not_allowed(self):
-        args = ('--option-group-name myoptiongroup2 '
-                '--options-to-include {"OptionName":"TDE"}')
+        args = (
+            '--option-group-name myoptiongroup2 '
+            '--options-to-include {"OptionName":"TDE"}'
+        )
         cmdline = self.prefix + args
         self.assert_params_for_cmd(
-            cmdline, expected_rc=252,
-            stderr_contains='Unknown options: --options-to-include')
+            cmdline,
+            expected_rc=252,
+            stderr_contains='Unknown options: --options-to-include',
+        )
diff -pruN 2.23.6-1/tests/functional/rekognition/test_image_parameters.py 2.31.35-1/tests/functional/rekognition/test_image_parameters.py
--- 2.23.6-1/tests/functional/rekognition/test_image_parameters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/rekognition/test_image_parameters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class BaseRekognitionTest(BaseAWSCommandParamsTest):
     def setUp(self):
         super(BaseRekognitionTest, self).setUp()
         self.files = FileCreator()
-        self.temp_file = self.files.create_file(
-            'foo', 'mycontents')
+        self.temp_file = self.files.create_file('foo', 'mycontents')
         with open(self.temp_file, 'rb') as f:
             self.temp_file_bytes = f.read()
 
@@ -29,7 +27,6 @@ class BaseRekognitionTest(BaseAWSCommand
 
 
 class TestCompareFaces(BaseRekognitionTest):
-
     prefix = 'rekognition compare-faces'
 
     def test_image_file_does_populate_bytes_param(self):
@@ -57,91 +54,70 @@ class TestCompareFaces(BaseRekognitionTe
 
 
 class TestDetectFaces(BaseRekognitionTest):
-
     prefix = 'rekognition detect-faces'
 
     def test_image_file_does_populate_bytes_param(self):
         cmdline = self.prefix
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
-        result = {
-            'Image': {'Bytes': self.temp_file_bytes}
-        }
+        result = {'Image': {'Bytes': self.temp_file_bytes}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_image_bytes_still_works(self):
         cmdline = self.prefix
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestDetectLabels(BaseRekognitionTest):
-
     prefix = 'rekognition detect-labels'
 
     def test_image_file_does_populate_bytes_param(self):
         cmdline = self.prefix
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
-        result = {
-            'Image': {'Bytes': self.temp_file_bytes}
-        }
+        result = {'Image': {'Bytes': self.temp_file_bytes}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_image_bytes_still_works(self):
         cmdline = self.prefix
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestDetectModerationLabels(BaseRekognitionTest):
-
     prefix = 'rekognition detect-moderation-labels'
 
     def test_image_file_does_populate_bytes_param(self):
         cmdline = self.prefix
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
-        result = {
-            'Image': {'Bytes': self.temp_file_bytes}
-        }
+        result = {'Image': {'Bytes': self.temp_file_bytes}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_image_bytes_still_works(self):
         cmdline = self.prefix
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestDetectText(BaseRekognitionTest):
-
     prefix = 'rekognition detect-text'
 
     def test_image_file_does_populate_bytes_param(self):
         cmdline = self.prefix
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
-        result = {
-            'Image': {'Bytes': self.temp_file_bytes}
-        }
+        result = {'Image': {'Bytes': self.temp_file_bytes}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_image_bytes_still_works(self):
         cmdline = self.prefix
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestIndexFaces(BaseRekognitionTest):
-
     prefix = 'rekognition index-faces'
 
     def test_image_file_does_populate_bytes_param(self):
@@ -150,7 +126,7 @@ class TestIndexFaces(BaseRekognitionTest
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
         result = {
             'CollectionId': 'foobar',
-            'Image': {'Bytes': self.temp_file_bytes}
+            'Image': {'Bytes': self.temp_file_bytes},
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -158,36 +134,27 @@ class TestIndexFaces(BaseRekognitionTest
         cmdline = self.prefix
         cmdline += ' --collection-id foobar'
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'CollectionId': 'foobar',
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'CollectionId': 'foobar', 'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestRecognizeCelebrities(BaseRekognitionTest):
-
     prefix = 'rekognition recognize-celebrities'
 
     def test_image_file_does_populate_bytes_param(self):
         cmdline = self.prefix
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
-        result = {
-            'Image': {'Bytes': self.temp_file_bytes}
-        }
+        result = {'Image': {'Bytes': self.temp_file_bytes}}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_image_bytes_still_works(self):
         cmdline = self.prefix
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
 
 
 class TestSearchFacesByImage(BaseRekognitionTest):
-
     prefix = 'rekognition search-faces-by-image'
 
     def test_image_file_does_populate_bytes_param(self):
@@ -196,7 +163,7 @@ class TestSearchFacesByImage(BaseRekogni
         cmdline += ' --image-bytes fileb://%s' % self.temp_file
         result = {
             'CollectionId': 'foobar',
-            'Image': {'Bytes': self.temp_file_bytes}
+            'Image': {'Bytes': self.temp_file_bytes},
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -204,8 +171,5 @@ class TestSearchFacesByImage(BaseRekogni
         cmdline = self.prefix
         cmdline += ' --collection-id foobar'
         cmdline += ' --image Bytes=Zm9vYmFy'
-        result = {
-            'CollectionId': 'foobar',
-            'Image': {'Bytes': b'foobar'}
-        }
+        result = {'CollectionId': 'foobar', 'Image': {'Bytes': b'foobar'}}
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/route53/test_list_resource_record_sets.py 2.31.35-1/tests/functional/route53/test_list_resource_record_sets.py
--- 2.23.6-1/tests/functional/route53/test_list_resource_record_sets.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/route53/test_list_resource_record_sets.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,33 +15,39 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestGetHostedZone(BaseAWSCommandParamsTest):
-
     prefix = 'route53 list-resource-record-sets'
 
     def test_no_pagination_args(self):
         args = ' --hosted-zone-id /hostedzone/ZD3IYMVP1KDDM'
         cmdline = self.prefix + args
         self.assert_params_for_cmd(
-            cmdline, {'HostedZoneId': 'ZD3IYMVP1KDDM'}, expected_rc=0)
+            cmdline, {'HostedZoneId': 'ZD3IYMVP1KDDM'}, expected_rc=0
+        )
 
     def test_with_max_items_pagination(self):
         args = ' --hosted-zone-id /hostedzone/ZD3IYMVP1KDDM --max-items 1'
         cmdline = self.prefix + args
         # We don't map to the service's max-items
         self.assert_params_for_cmd(
-            cmdline, {'HostedZoneId': 'ZD3IYMVP1KDDM'}, expected_rc=0)
+            cmdline, {'HostedZoneId': 'ZD3IYMVP1KDDM'}, expected_rc=0
+        )
 
     def test_with_max_override_starting_args(self):
         args = (
             ' --hosted-zone-id /hostedzone/ZD3IYMVP1KDDM'
             ' --max-items 1'
-            ' --start-record-name foo')
+            ' --start-record-name foo'
+        )
         cmdline = self.prefix + args
         # Here we _should_ be mapping to the service's arguments
         # because --start-record-name triggered the disabling of
         # pagination.
         self.assert_params_for_cmd(
-            cmdline, {'HostedZoneId': 'ZD3IYMVP1KDDM',
-                      'StartRecordName': 'foo',
-                      'MaxItems': '1'},
-            expected_rc=0)
+            cmdline,
+            {
+                'HostedZoneId': 'ZD3IYMVP1KDDM',
+                'StartRecordName': 'foo',
+                'MaxItems': '1',
+            },
+            expected_rc=0,
+        )
diff -pruN 2.23.6-1/tests/functional/route53/test_resource_id.py 2.31.35-1/tests/functional/route53/test_resource_id.py
--- 2.23.6-1/tests/functional/route53/test_resource_id.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/route53/test_resource_id.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,19 +12,19 @@
 # language governing permissions and limitations under the License.
 from awscli.testutils import BaseAWSCommandParamsTest
 
-
-CHANGEBATCH_JSON = ('{"Comment":"string","Changes":['
-                    '{"Action":"CREATE","ResourceRecordSet":{'
-                    '"Name":"test-foo.bar.com",'
-                    '"Type":"CNAME",'
-                    '"TTL":300,'
-                    '"ResourceRecords":['
-                    '{"Value":"foo-bar-com"}'
-                    ']}}]}')
+CHANGEBATCH_JSON = (
+    '{"Comment":"string","Changes":['
+    '{"Action":"CREATE","ResourceRecordSet":{'
+    '"Name":"test-foo.bar.com",'
+    '"Type":"CNAME",'
+    '"TTL":300,'
+    '"ResourceRecords":['
+    '{"Value":"foo-bar-com"}'
+    ']}}]}'
+)
 
 
 class TestGetHostedZone(BaseAWSCommandParamsTest):
-
     prefix = 'route53 get-hosted-zone'
 
     def setUp(self):
@@ -34,18 +34,18 @@ class TestGetHostedZone(BaseAWSCommandPa
         args = ' --id /hostedzone/ZD3IYMVP1KDDM'
         cmdline = self.prefix + args
         self.assert_params_for_cmd(
-            cmdline, {'Id': 'ZD3IYMVP1KDDM'}, expected_rc=0)
+            cmdline, {'Id': 'ZD3IYMVP1KDDM'}, expected_rc=0
+        )
 
     def test_short_resource_id(self):
         args = ' --id ZD3IYMVP1KDDM'
         cmdline = self.prefix + args
         self.assert_params_for_cmd(
-            cmdline, {'Id': 'ZD3IYMVP1KDDM'},
-            expected_rc=0)
+            cmdline, {'Id': 'ZD3IYMVP1KDDM'}, expected_rc=0
+        )
 
 
 class TestChangeResourceRecord(BaseAWSCommandParamsTest):
-
     prefix = 'route53 change-resource-record-sets'
 
     def setUp(self):
@@ -66,21 +66,16 @@ class TestChangeResourceRecord(BaseAWSCo
                             "Name": "test-foo.bar.com",
                             "Type": "CNAME",
                             "TTL": 300,
-                            "ResourceRecords": [
-                                {
-                                    "Value": "foo-bar-com"
-                                }
-                            ]
-                        }
+                            "ResourceRecords": [{"Value": "foo-bar-com"}],
+                        },
                     }
-                ]
-            }
+                ],
+            },
         }
         self.assert_params_for_cmd(cmdline, expected, expected_rc=0)
 
 
 class TestGetChange(BaseAWSCommandParamsTest):
-
     prefix = 'route53 get-change'
 
     def setUp(self):
@@ -100,7 +95,6 @@ class TestGetChange(BaseAWSCommandParams
 
 
 class TestReusableDelegationSet(BaseAWSCommandParamsTest):
-
     prefix = 'route53 get-reusable-delegation-set'
 
     def setUp(self):
@@ -109,18 +103,19 @@ class TestReusableDelegationSet(BaseAWSC
     def test_full_resource_id(self):
         args = ' --id /delegationset/N9INWVYQ6Q0FN'
         cmdline = self.prefix + args
-        self.assert_params_for_cmd(cmdline, {'Id': 'N9INWVYQ6Q0FN'},
-                                    expected_rc=0)
+        self.assert_params_for_cmd(
+            cmdline, {'Id': 'N9INWVYQ6Q0FN'}, expected_rc=0
+        )
 
     def test_short_resource_id(self):
         args = ' --id N9INWVYQ6Q0FN'
         cmdline = self.prefix + args
-        self.assert_params_for_cmd(cmdline, {'Id': 'N9INWVYQ6Q0FN'},
-                                    expected_rc=0)
+        self.assert_params_for_cmd(
+            cmdline, {'Id': 'N9INWVYQ6Q0FN'}, expected_rc=0
+        )
 
 
 class TestMaxItems(BaseAWSCommandParamsTest):
-
     prefix = 'route53 list-resource-record-sets'
 
     def test_full_resource_id(self):
diff -pruN 2.23.6-1/tests/functional/route53domains/test_view_billing.py 2.31.35-1/tests/functional/route53domains/test_view_billing.py
--- 2.23.6-1/tests/functional/route53domains/test_view_billing.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/route53domains/test_view_billing.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,19 +14,14 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestViewBilling(BaseAWSCommandParamsTest):
-
     prefix = 'route53domains view-billing'
 
     def test_accepts_start_time(self):
         command = self.prefix + ' --start-time 2'
-        expected_params = {
-            'Start': '2'
-        }
+        expected_params = {'Start': '2'}
         self.assert_params_for_cmd(command, expected_params)
 
     def test_accepts_end_time(self):
         command = self.prefix + ' --end-time 2'
-        expected_params = {
-            'End': '2'
-        }
+        expected_params = {'End': '2'}
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/s3/__init__.py 2.31.35-1/tests/functional/s3/__init__.py
--- 2.23.6-1/tests/functional/s3/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,11 +15,18 @@ import os
 from awscrt.s3 import S3Request
 from botocore.awsrequest import AWSResponse
 
-from tests import CLIRunner, SessionStubber, HTTPResponse
 from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import unittest, create_clidriver, temporary_file, mock
-from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
-from awscli.compat import urlparse, BytesIO
+from awscli.compat import BytesIO, urlparse
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    create_clidriver,
+    mock,
+    temporary_file,
+    unittest,
+)
+from tests import CLIRunner, HTTPResponse, SessionStubber
+
 
 class BaseS3TransferCommandTest(BaseAWSCommandParamsTest):
     def setUp(self):
@@ -29,11 +36,7 @@ class BaseS3TransferCommandTest(BaseAWSC
 
     def init_clidriver(self):
         with temporary_file('w') as f:
-            f.write(
-                '[default]\n'
-                's3 =\n'
-                '  max_concurrent_requests = 1\n'
-            )
+            f.write('[default]\n' 's3 =\n' '  max_concurrent_requests = 1\n')
             f.flush()
             self.environ['AWS_CONFIG_FILE'] = f.name
             self.driver = create_clidriver()
@@ -49,7 +52,8 @@ class BaseS3TransferCommandTest(BaseAWSC
             for operation_called in self.operations_called
         ]
         self.assertEqual(
-            actual_operations_with_params, expected_operations_with_params)
+            actual_operations_with_params, expected_operations_with_params
+        )
 
     def assert_in_operations_called(self, expected_operation_with_params):
         actual_operations_with_params = [
@@ -61,15 +65,15 @@ class BaseS3TransferCommandTest(BaseAWSC
                 return
         self.fail(
             'Expected request: %s does not match any of the actual requests '
-            'made: %s' % (
-                expected_operation_with_params, actual_operations_with_params
-            )
+            'made: %s'
+            % (expected_operation_with_params, actual_operations_with_params)
         )
 
     def head_object_response(self, **override_kwargs):
         response = {
             'ContentLength': 100,
-            'LastModified': '00:00:00Z'
+            'LastModified': '00:00:00Z',
+            'ETag': '"foo-1"',
         }
         response.update(override_kwargs)
         return response
@@ -80,21 +84,16 @@ class BaseS3TransferCommandTest(BaseAWSC
             content = {
                 'Key': key,
                 'LastModified': '00:00:00Z',
-                'Size': 100
+                'Size': 100,
+                'ETag': '"foo-1"',
             }
             if override_kwargs:
                 content.update(override_kwargs)
             contents.append(content)
-        return {
-            'Contents': contents,
-            'CommonPrefixes': []
-        }
+        return {'Contents': contents, 'CommonPrefixes': []}
 
     def get_object_response(self):
-        return {
-            'ETag': '"foo-1"',
-            'Body': BytesIO(b'foo')
-        }
+        return {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')}
 
     def copy_object_response(self):
         return self.empty_response()
@@ -103,24 +102,16 @@ class BaseS3TransferCommandTest(BaseAWSC
         return self.empty_response()
 
     def create_mpu_response(self, upload_id):
-        return {
-            'UploadId': upload_id
-        }
+        return {'UploadId': upload_id}
 
     def upload_part_copy_response(self):
-        return {
-            'CopyPartResult': {
-                'ETag': '"etag"'
-            }
-        }
+        return {'CopyPartResult': {'ETag': '"etag"'}}
 
     def complete_mpu_response(self):
         return self.empty_response()
 
     def get_object_tagging_response(self, tags):
-        return {
-            'TagSet': [{'Key': k, 'Value': v} for k, v in tags.items()]
-        }
+        return {'TagSet': [{'Key': k, 'Value': v} for k, v in tags.items()]}
 
     def put_object_tagging_response(self):
         return 'PutObjectTagging', self.empty_response()
@@ -163,15 +154,13 @@ class BaseS3TransferCommandTest(BaseAWSC
         params.update(override_kwargs)
         return 'GetObject', params
 
-    def copy_object_request(self, source_bucket, source_key, bucket, key,
-                            **override_kwargs):
+    def copy_object_request(
+        self, source_bucket, source_key, bucket, key, **override_kwargs
+    ):
         params = {
             'Bucket': bucket,
             'Key': key,
-            'CopySource': {
-                'Bucket': source_bucket,
-                'Key': source_key
-            }
+            'CopySource': {'Bucket': source_bucket, 'Key': source_key},
         }
         params.update(override_kwargs)
         return 'CopyObject', params
@@ -192,35 +181,35 @@ class BaseS3TransferCommandTest(BaseAWSC
         params.update(override_kwargs)
         return 'CreateMultipartUpload', params
 
-    def upload_part_copy_request(self, source_bucket, source_key, bucket, key,
-                                 upload_id, **override_kwargs):
+    def upload_part_copy_request(
+        self,
+        source_bucket,
+        source_key,
+        bucket,
+        key,
+        upload_id,
+        **override_kwargs,
+    ):
         params = {
             'Bucket': bucket,
             'Key': key,
-            'CopySource': {
-                'Bucket': source_bucket,
-                'Key': source_key
-            },
+            'CopySource': {'Bucket': source_bucket, 'Key': source_key},
             'UploadId': upload_id,
-
         }
         params.update(override_kwargs)
         return 'UploadPartCopy', params
 
-    def complete_mpu_request(self, bucket, key, upload_id, num_parts,
-                             **override_kwargs):
+    def complete_mpu_request(
+        self, bucket, key, upload_id, num_parts, **override_kwargs
+    ):
         parts = []
         for i in range(num_parts):
-            parts.append(
-                {
-                    'ETag': '"etag"', 'PartNumber': i + 1
-                }
-            )
+            parts.append({'ETag': '"etag"', 'PartNumber': i + 1})
         params = {
             'Bucket': bucket,
             'Key': key,
             'UploadId': upload_id,
-            'MultipartUpload': {'Parts': parts}
+            'MultipartUpload': {'Parts': parts},
         }
         params.update(override_kwargs)
         return 'CompleteMultipartUpload', params
@@ -236,10 +225,8 @@ class BaseS3TransferCommandTest(BaseAWSC
             'Bucket': bucket,
             'Key': key,
             'Tagging': {
-                'TagSet': [
-                    {'Key': k, 'Value': v} for k, v in tags.items()
-                ],
-            }
+                'TagSet': [{'Key': k, 'Value': v} for k, v in tags.items()],
+            },
         }
 
     def no_such_key_error_response(self):
@@ -281,9 +268,11 @@ class BaseS3CLIRunnerTest(unittest.TestC
 
         self.config_files = FileCreator()
         self.config_filename = os.path.join(
-            self.config_files.rootdir, 'config')
+            self.config_files.rootdir, 'config'
+        )
         self.set_config_file_contents(
-            self.cli_runner.env, self.config_filename)
+            self.cli_runner.env, self.config_filename
+        )
 
     def tearDown(self):
         self.config_files.remove_all()
@@ -405,25 +394,28 @@ class BaseS3CLIRunnerTest(unittest.TestC
     def assert_no_remaining_botocore_responses(self):
         self.session_stubber.assert_no_remaining_responses()
 
-    def assert_operations_to_endpoints(self, cli_runner_result,
-                                       expected_operations_to_endpoints):
+    def assert_operations_to_endpoints(
+        self, cli_runner_result, expected_operations_to_endpoints
+    ):
         actual_operations_to_endpoints = []
         for aws_request in cli_runner_result.aws_requests:
             actual_operations_to_endpoints.append(
                 (
                     aws_request.operation_name,
-                    urlparse.urlparse(aws_request.http_requests[0].url).netloc
+                    urlparse.urlparse(aws_request.http_requests[0].url).netloc,
                 )
             )
         self.assertEqual(
-            actual_operations_to_endpoints, expected_operations_to_endpoints)
+            actual_operations_to_endpoints, expected_operations_to_endpoints
+        )
 
     def run_command(self, cmdline):
         result = self.cli_runner.run(cmdline)
         self.assertEqual(
-            result.rc, 0,
+            result.rc,
+            0,
             f'Expected rc of 0 instead got {result.rc} '
-            f'with stderr message: {result.stderr}'
+            f'with stderr message: {result.stderr}',
         )
         return result
 
@@ -433,8 +425,9 @@ class BaseCRTTransferClientTest(BaseS3CL
         super(BaseCRTTransferClientTest, self).setUp()
         self.crt_client_patch = mock.patch('s3transfer.crt.S3Client')
         self.mock_crt_client = self.crt_client_patch.start()
-        self.mock_crt_client.return_value.make_request.side_effect = \
+        self.mock_crt_client.return_value.make_request.side_effect = (
             self.simulate_make_request_side_effect
+        )
         self.files = FileCreator()
         self.expected_download_content = b'content'
 
@@ -482,8 +475,7 @@ class BaseCRTTransferClientTest(BaseS3CL
 
     def assert_crt_client_region(self, expected_region):
         self.assertEqual(
-            self.mock_crt_client.call_args[1]['region'],
-            expected_region
+            self.mock_crt_client.call_args[1]['region'], expected_region
         )
 
     def assert_crt_client_has_no_credential_provider(self):
@@ -492,26 +484,30 @@ class BaseCRTTransferClientTest(BaseS3CL
         )
 
     def assert_crt_make_request_call(
-            self, make_request_call, expected_type, expected_host,
-            expected_path, expected_http_method=None,
-            expected_send_filepath=None,
-            expected_recv_startswith=None,
-            expected_body_content=None):
+        self,
+        make_request_call,
+        expected_type,
+        expected_host,
+        expected_path,
+        expected_http_method=None,
+        expected_send_filepath=None,
+        expected_recv_startswith=None,
+        expected_body_content=None,
+    ):
         make_request_kwargs = make_request_call[1]
+        self.assertEqual(make_request_kwargs['type'], expected_type)
         self.assertEqual(
-            make_request_kwargs['type'], expected_type)
-        self.assertEqual(
-            make_request_kwargs['request'].headers.get('host'),
-            expected_host
+            make_request_kwargs['request'].headers.get('host'), expected_host
         )
-        self.assertEqual(
-            make_request_kwargs['request'].path, expected_path)
+        self.assertEqual(make_request_kwargs['request'].path, expected_path)
         if expected_http_method:
             self.assertEqual(
-                make_request_kwargs['request'].method, expected_http_method)
+                make_request_kwargs['request'].method, expected_http_method
+            )
         if expected_send_filepath:
             self.assertEqual(
-                make_request_kwargs['send_filepath'], expected_send_filepath)
+                make_request_kwargs['send_filepath'], expected_send_filepath
+            )
         if expected_recv_startswith:
             # The s3transfer/crt implementation has the CRT client download
             # to a temporary file before moving it to the correct location.
@@ -524,10 +520,11 @@ class BaseCRTTransferClientTest(BaseS3CL
             self.assertTrue(
                 make_request_kwargs['recv_filepath'].startswith(
                     expected_recv_startswith
-                ), (
+                ),
+                (
                     f"{make_request_kwargs['recv_filepath']} does not "
                     f"start with {expected_recv_startswith}"
-                )
+                ),
             )
         if expected_body_content is not None:
             # Note: The underlying CRT awscrt.io.InputStream does not expose
@@ -536,7 +533,7 @@ class BaseCRTTransferClientTest(BaseS3CL
             # to use a public interface if a public interface is ever exposed.
             self.assertEqual(
                 make_request_kwargs['request'].body_stream._stream.read(),
-                expected_body_content
+                expected_body_content,
             )
 
 
diff -pruN 2.23.6-1/tests/functional/s3/test_cp_command.py 2.31.35-1/tests/functional/s3/test_cp_command.py
--- 2.23.6-1/tests/functional/s3/test_cp_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_cp_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,17 +13,18 @@
 # language governing permissions and limitations under the License.
 import os
 
-from awscrt.s3 import S3RequestType, S3RequestTlsMode
+from awscrt.s3 import S3RequestTlsMode, S3RequestType
 
-from awscli.customizations.s3.utils import relative_path
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import capture_input, mock
 from awscli.compat import BytesIO, OrderedDict
+from awscli.customizations.s3.utils import relative_path
+from awscli.testutils import BaseAWSCommandParamsTest, capture_input, mock
 from tests.functional.s3 import (
-    BaseS3TransferCommandTest, BaseS3CLIRunnerTest, BaseCRTTransferClientTest
+    BaseCRTTransferClientTest,
+    BaseS3CLIRunnerTest,
+    BaseS3TransferCommandTest,
 )
 
-MB = 1024 ** 2
+MB = 1024**2
 
 
 class BufferedBytesIO(BytesIO):
@@ -40,19 +41,27 @@ class TestCPCommand(BaseCPCommandTest):
     def test_operations_used_in_upload(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
         cmdline = '%s %s s3://bucket/key.txt' % (self.prefix, full_path)
-        self.parsed_responses = [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is PutObject.
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
 
     def test_key_name_added_when_only_bucket_provided(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
         cmdline = '%s %s s3://bucket/' % (self.prefix, full_path)
-        self.parsed_responses = [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is PutObject.
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertEqual(self.operations_called[0][1]['Key'], 'foo.txt')
         self.assertEqual(self.operations_called[0][1]['Bucket'], 'bucket')
@@ -62,10 +71,14 @@ class TestCPCommand(BaseCPCommandTest):
         # Here we're saying s3://bucket instead of s3://bucket/
         # This should still work the same as if we added the trailing slash.
         cmdline = '%s %s s3://bucket' % (self.prefix, full_path)
-        self.parsed_responses = [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is PutObject.
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertEqual(self.operations_called[0][1]['Key'], 'foo.txt')
         self.assertEqual(self.operations_called[0][1]['Bucket'], 'bucket')
@@ -79,53 +92,73 @@ class TestCPCommand(BaseCPCommandTest):
         self.assertIn(
             f'(dryrun) upload: {relative_path(full_path)} to '
             f's3://bucket/key.txt',
-            stdout
+            stdout,
         )
 
     def test_error_on_same_line_as_status(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
         cmdline = f'{self.prefix} {full_path} s3://bucket-not-exist/key.txt'
         self.http_response.status_code = 400
-        self.parsed_responses = [{'Error': {
-                                  'Code': 'BucketNotExists',
-                                  'Message': 'Bucket does not exist'}}]
+        self.parsed_responses = [
+            {
+                'Error': {
+                    'Code': 'BucketNotExists',
+                    'Message': 'Bucket does not exist',
+                }
+            }
+        ]
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=1)
         self.assertIn(
             f'upload failed: {relative_path(full_path)} to '
             's3://bucket-not-exist/key.txt An error',
-            stderr
+            stderr,
         )
 
     def test_upload_grants(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --grants read=id=foo '
-                   'full=id=bar readacl=id=biz writeacl=id=baz' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = (
+            '%s %s s3://bucket/key.txt --grants read=id=foo '
+            'full=id=bar readacl=id=biz writeacl=id=baz'
+            % (self.prefix, full_path)
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is PutObject.
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertDictEqual(
             self.operations_called[0][1],
-            {'Key': u'key.txt', 'Bucket': u'bucket', 'GrantRead': u'id=foo',
-             'GrantFullControl': u'id=bar', 'GrantReadACP': u'id=biz',
-             'GrantWriteACP': u'id=baz', 'ContentType': u'text/plain',
-             'Body': mock.ANY, 'ChecksumAlgorithm': 'CRC64NVME'}
+            {
+                'Key': 'key.txt',
+                'Bucket': 'bucket',
+                'GrantRead': 'id=foo',
+                'GrantFullControl': 'id=bar',
+                'GrantReadACP': 'id=biz',
+                'GrantWriteACP': 'id=baz',
+                'ContentType': 'text/plain',
+                'Body': mock.ANY,
+                'ChecksumAlgorithm': 'CRC64NVME',
+            },
         )
 
     def test_upload_expires(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --expires 90' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --expires 90' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is PutObject.
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertEqual(self.operations_called[0][1]['Key'], 'key.txt')
         self.assertEqual(self.operations_called[0][1]['Bucket'], 'bucket')
@@ -133,13 +166,17 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_upload_standard_ia(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --storage-class STANDARD_IA' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --storage-class STANDARD_IA' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         args = self.operations_called[0][1]
         self.assertEqual(args['Key'], 'key.txt')
@@ -148,13 +185,17 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_upload_onezone_ia(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --storage-class ONEZONE_IA' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --storage-class ONEZONE_IA' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         args = self.operations_called[0][1]
         self.assertEqual(args['Key'], 'key.txt')
@@ -163,13 +204,17 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_upload_intelligent_tiering(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --storage-class INTELLIGENT_TIERING' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = (
+            '%s %s s3://bucket/key.txt --storage-class INTELLIGENT_TIERING'
+            % (self.prefix, full_path)
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         args = self.operations_called[0][1]
         self.assertEqual(args['Key'], 'key.txt')
@@ -178,13 +223,17 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_upload_glacier(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --storage-class GLACIER' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --storage-class GLACIER' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         args = self.operations_called[0][1]
         self.assertEqual(args['Key'], 'key.txt')
@@ -193,13 +242,17 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_upload_deep_archive(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = ('%s %s s3://bucket/key.txt --storage-class DEEP_ARCHIVE' %
-                   (self.prefix, full_path))
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --storage-class DEEP_ARCHIVE' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         args = self.operations_called[0][1]
         self.assertEqual(args['Key'], 'key.txt')
@@ -208,14 +261,22 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_operations_used_in_download_file(self):
         self.parsed_responses = [
-            {"ContentLength": "100", "LastModified": "00:00:00Z"},
+            {
+                "ContentLength": "100",
+                "LastModified": "00:00:00Z",
+                'ETag': '"foo-1"',
+            },
             {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')},
         ]
-        cmdline = '%s s3://bucket/key.txt %s' % (self.prefix,
-                                                 self.files.rootdir)
+        cmdline = '%s s3://bucket/key.txt %s' % (
+            self.prefix,
+            self.files.rootdir,
+        )
         self.run_cmd(cmdline, expected_rc=0)
         # The only operations we should have called are HeadObject/GetObject.
-        self.assertEqual(len(self.operations_called), 2, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
 
@@ -224,11 +285,15 @@ class TestCPCommand(BaseCPCommandTest):
             {'ETag': '"foo-1"', 'Contents': [], 'CommonPrefixes': []},
         ]
         cmdline = '%s s3://bucket/key.txt %s --recursive' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.run_cmd(cmdline, expected_rc=0)
         # We called ListObjectsV2 but had no objects to download, so
         # we only have a single ListObjectsV2 operation being called.
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
 
     def test_dryrun_download(self):
@@ -238,29 +303,37 @@ class TestCPCommand(BaseCPCommandTest):
         stdout, _, _ = self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('HeadObject', {
-                    'Bucket': 'bucket',
-                    'Key': 'key.txt',
-                })
+                (
+                    'HeadObject',
+                    {
+                        'Bucket': 'bucket',
+                        'Key': 'key.txt',
+                    },
+                )
             ]
         )
         self.assertIn(
             f'(dryrun) download: s3://bucket/key.txt to '
             f'{relative_path(target)}',
-            stdout
+            stdout,
         )
 
     def test_website_redirect_ignore_paramfile(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % \
-            (self.prefix, full_path, 'http://someserver')
-        self.parsed_responses = [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % (
+            self.prefix,
+            full_path,
+            'http://someserver',
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         # Make sure that the specified web address is used as opposed to the
         # contents of the web address.
         self.assertEqual(
             self.operations_called[0][1]['WebsiteRedirectLocation'],
-            'http://someserver'
+            'http://someserver',
         )
 
     def test_dryrun_copy(self):
@@ -271,15 +344,18 @@ class TestCPCommand(BaseCPCommandTest):
         stdout, _, _ = self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('HeadObject', {
-                    'Bucket': 'bucket',
-                    'Key': 'key.txt',
-                })
+                (
+                    'HeadObject',
+                    {
+                        'Bucket': 'bucket',
+                        'Key': 'key.txt',
+                    },
+                )
             ]
         )
         self.assertIn(
             '(dryrun) copy: s3://bucket/key.txt to s3://bucket/key2.txt',
-            stdout
+            stdout,
         )
 
     def test_metadata_copy(self):
@@ -287,15 +363,19 @@ class TestCPCommand(BaseCPCommandTest):
             {"ContentLength": "100", "LastModified": "00:00:00Z"},
             {'ETag': '"foo-1"'},
         ]
-        cmdline = ('%s s3://bucket/key.txt s3://bucket/key2.txt'
-                   ' --metadata KeyName=Value' % self.prefix)
+        cmdline = (
+            '%s s3://bucket/key.txt s3://bucket/key2.txt'
+            ' --metadata KeyName=Value' % self.prefix
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 2,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
-        self.assertEqual(self.operations_called[1][1]['Metadata'],
-                         {'KeyName': 'Value'})
+        self.assertEqual(
+            self.operations_called[1][1]['Metadata'], {'KeyName': 'Value'}
+        )
 
     def test_metadata_copy_with_put_object(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
@@ -303,57 +383,74 @@ class TestCPCommand(BaseCPCommandTest):
             {"ContentLength": "100", "LastModified": "00:00:00Z"},
             {'ETag': '"foo-1"'},
         ]
-        cmdline = ('%s %s s3://bucket/key2.txt'
-                   ' --metadata KeyName=Value' % (self.prefix, full_path))
+        cmdline = '%s %s s3://bucket/key2.txt' ' --metadata KeyName=Value' % (
+            self.prefix,
+            full_path,
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[0][1]['Metadata'],
-                         {'KeyName': 'Value'})
+        self.assertEqual(
+            self.operations_called[0][1]['Metadata'], {'KeyName': 'Value'}
+        )
 
     def test_metadata_copy_with_multipart_upload(self):
-        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024 ** 2))
+        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024**2))
         self.parsed_responses = [
             {'UploadId': 'foo'},
             {'ETag': '"foo-1"'},
             {'ETag': '"foo-2"'},
-            {}
+            {},
         ]
-        cmdline = ('%s %s s3://bucket/key2.txt'
-                   ' --metadata KeyName=Value' % (self.prefix, full_path))
+        cmdline = '%s %s s3://bucket/key2.txt' ' --metadata KeyName=Value' % (
+            self.prefix,
+            full_path,
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 4,
-                         self.operations_called)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'CreateMultipartUpload')
-        self.assertEqual(self.operations_called[0][1]['Metadata'],
-                         {'KeyName': 'Value'})
+        self.assertEqual(
+            len(self.operations_called), 4, self.operations_called
+        )
+        self.assertEqual(
+            self.operations_called[0][0].name, 'CreateMultipartUpload'
+        )
+        self.assertEqual(
+            self.operations_called[0][1]['Metadata'], {'KeyName': 'Value'}
+        )
 
     def test_metadata_directive_copy(self):
         self.parsed_responses = [
             {"ContentLength": "100", "LastModified": "00:00:00Z"},
             {'ETag': '"foo-1"'},
         ]
-        cmdline = ('%s s3://bucket/key.txt s3://bucket/key2.txt'
-                   ' --metadata-directive REPLACE' % self.prefix)
+        cmdline = (
+            '%s s3://bucket/key.txt s3://bucket/key2.txt'
+            ' --metadata-directive REPLACE' % self.prefix
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 2,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
-        self.assertEqual(self.operations_called[1][1]['MetadataDirective'],
-                         'REPLACE')
+        self.assertEqual(
+            self.operations_called[1][1]['MetadataDirective'], 'REPLACE'
+        )
 
     def test_no_metadata_directive_for_non_copy(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket --metadata-directive REPLACE' % \
-            (self.prefix, full_path)
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket --metadata-directive REPLACE' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertNotIn('MetadataDirective', self.operations_called[0][1])
 
@@ -361,7 +458,8 @@ class TestCPCommand(BaseCPCommandTest):
         full_path = self.files.create_file('foo.txt', 'mycontent')
         cmdline = '%s %s s3://bucket/key.txt' % (self.prefix, full_path)
         self.parsed_responses = [
-            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         with mock.patch('mimetypes.guess_type') as mock_guess_type:
             # This should throw a UnicodeDecodeError.
             mock_guess_type.side_effect = lambda x: b'\xe2'.decode('ascii')
@@ -374,8 +472,12 @@ class TestCPCommand(BaseCPCommandTest):
         full_path = self.files.create_file('foo.txt', '')
         cmdline = '%s s3://bucket/key.txt %s' % (self.prefix, full_path)
         self.parsed_responses = [
-            {"ContentLength": "100", "LastModified": "00:00:00Z"},
-            {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')}
+            {
+                "ContentLength": "100",
+                "LastModified": "00:00:00Z",
+                "ETag": '"foo-1"',
+            },
+            {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')},
         ]
         with mock.patch('os.utime') as mock_utime:
             mock_utime.side_effect = OSError(1, '')
@@ -386,19 +488,27 @@ class TestCPCommand(BaseCPCommandTest):
         self.parsed_responses = [
             {
                 'Contents': [
-                    {'Key': 'foo/bar.txt', 'ContentLength': '100',
-                     'LastModified': '00:00:00Z',
-                     'StorageClass': 'GLACIER',
-                     'Size': 100},
+                    {
+                        'Key': 'foo/bar.txt',
+                        'ContentLength': '100',
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'GLACIER',
+                        'Size': 100,
+                        'ETag': '"foo-1"',
+                    },
                 ],
-                'CommonPrefixes': []
+                'CommonPrefixes': [],
             },
             {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')},
         ]
-        cmdline = '%s s3://bucket/foo %s --recursive --force-glacier-transfer'\
-                  % (self.prefix, self.files.rootdir)
+        cmdline = (
+            '%s s3://bucket/foo %s --recursive --force-glacier-transfer'
+            % (self.prefix, self.files.rootdir)
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 2, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
 
@@ -406,27 +516,37 @@ class TestCPCommand(BaseCPCommandTest):
         self.parsed_responses = [
             {
                 'Contents': [
-                    {'Key': 'foo/bar.txt', 'ContentLength': '100',
-                     'LastModified': '00:00:00Z',
-                     'StorageClass': 'GLACIER',
-                     'Size': 100},
+                    {
+                        'Key': 'foo/bar.txt',
+                        'ContentLength': '100',
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'GLACIER',
+                        'Size': 100,
+                    },
                 ],
-                'CommonPrefixes': []
+                'CommonPrefixes': [],
             }
         ]
         cmdline = '%s s3://bucket/foo %s --recursive' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertIn('GLACIER', stderr)
 
     def test_warns_on_glacier_incompatible_operation(self):
         self.parsed_responses = [
-            {'ContentLength': '100', 'LastModified': '00:00:00Z',
-             'StorageClass': 'GLACIER'},
+            {
+                'ContentLength': '100',
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'GLACIER',
+            },
         ]
-        cmdline = ('%s s3://bucket/key.txt .' % self.prefix)
+        cmdline = '%s s3://bucket/key.txt .' % self.prefix
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier incompatible.
@@ -436,10 +556,13 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_warns_on_deep_arhive_incompatible_operation(self):
         self.parsed_responses = [
-            {'ContentLength': '100', 'LastModified': '00:00:00Z',
-             'StorageClass': 'DEEP_ARCHIVE'},
+            {
+                'ContentLength': '100',
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'DEEP_ARCHIVE',
+            },
         ]
-        cmdline = ('%s s3://bucket/key.txt .' % self.prefix)
+        cmdline = '%s s3://bucket/key.txt .' % self.prefix
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier
@@ -450,11 +573,13 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_warns_on_glacier_incompatible_operation_for_multipart_file(self):
         self.parsed_responses = [
-            {'ContentLength': str(20 * (1024 ** 2)),
-             'LastModified': '00:00:00Z',
-             'StorageClass': 'GLACIER'},
+            {
+                'ContentLength': str(20 * (1024**2)),
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'GLACIER',
+            },
         ]
-        cmdline = ('%s s3://bucket/key.txt .' % self.prefix)
+        cmdline = '%s s3://bucket/key.txt .' % self.prefix
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier incompatible.
@@ -464,11 +589,13 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_warns_on_deep_archive_incompatible_op_for_multipart_file(self):
         self.parsed_responses = [
-            {'ContentLength': str(20 * (1024 ** 2)),
-             'LastModified': '00:00:00Z',
-             'StorageClass': 'DEEP_ARCHIVE'},
+            {
+                'ContentLength': str(20 * (1024**2)),
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'DEEP_ARCHIVE',
+            },
         ]
-        cmdline = ('%s s3://bucket/key.txt .' % self.prefix)
+        cmdline = '%s s3://bucket/key.txt .' % self.prefix
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier
@@ -479,12 +606,15 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_turn_off_glacier_warnings(self):
         self.parsed_responses = [
-            {'ContentLength': str(20 * (1024 ** 2)),
-             'LastModified': '00:00:00Z',
-             'StorageClass': 'GLACIER'},
+            {
+                'ContentLength': str(20 * (1024**2)),
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'GLACIER',
+            },
         ]
         cmdline = (
-            '%s s3://bucket/key.txt . --ignore-glacier-warnings' % self.prefix)
+            '%s s3://bucket/key.txt . --ignore-glacier-warnings' % self.prefix
+        )
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=0)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier incompatible.
@@ -494,12 +624,15 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_turn_off_glacier_warnings_for_deep_archive(self):
         self.parsed_responses = [
-            {'ContentLength': str(20 * (1024 ** 2)),
-             'LastModified': '00:00:00Z',
-             'StorageClass': 'DEEP_ARCHIVE'},
+            {
+                'ContentLength': str(20 * (1024**2)),
+                'LastModified': '00:00:00Z',
+                'StorageClass': 'DEEP_ARCHIVE',
+            },
         ]
         cmdline = (
-                '%s s3://bucket/key.txt . --ignore-glacier-warnings' % self.prefix)
+            '%s s3://bucket/key.txt . --ignore-glacier-warnings' % self.prefix
+        )
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=0)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier incompatible.
@@ -509,34 +642,42 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_cp_with_sse_flag(self):
         full_path = self.files.create_file('foo.txt', 'contents')
-        cmdline = (
-            '%s %s s3://bucket/key.txt --sse' % (
-                self.prefix, full_path))
+        cmdline = '%s %s s3://bucket/key.txt --sse' % (self.prefix, full_path)
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertDictEqual(
             self.operations_called[0][1],
-            {'Key': 'key.txt', 'Bucket': 'bucket',
-             'ChecksumAlgorithm': 'CRC64NVME',
-             'ContentType': 'text/plain', 'Body': mock.ANY,
-             'ServerSideEncryption': 'AES256'}
+            {
+                'Key': 'key.txt',
+                'Bucket': 'bucket',
+                'ChecksumAlgorithm': 'CRC64NVME',
+                'ContentType': 'text/plain',
+                'Body': mock.ANY,
+                'ServerSideEncryption': 'AES256',
+            },
         )
 
     def test_cp_with_sse_c_flag(self):
         full_path = self.files.create_file('foo.txt', 'contents')
-        cmdline = (
-            '%s %s s3://bucket/key.txt --sse-c --sse-c-key foo' % (
-                self.prefix, full_path))
+        cmdline = '%s %s s3://bucket/key.txt --sse-c --sse-c-key foo' % (
+            self.prefix,
+            full_path,
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertDictEqual(
             self.operations_called[0][1],
-            {'Key': 'key.txt', 'Bucket': 'bucket',
-             'ChecksumAlgorithm': 'CRC64NVME',
-             'ContentType': 'text/plain', 'Body': mock.ANY,
-             'SSECustomerAlgorithm': 'AES256', 'SSECustomerKey': 'foo'}
+            {
+                'Key': 'key.txt',
+                'Bucket': 'bucket',
+                'ChecksumAlgorithm': 'CRC64NVME',
+                'ContentType': 'text/plain',
+                'Body': mock.ANY,
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'foo',
+            },
         )
 
     def test_cp_with_sse_c_fileb(self):
@@ -549,16 +690,16 @@ class TestCPCommand(BaseCPCommandTest):
         with open(key_path, 'wb') as f:
             f.write(key_contents)
         cmdline = (
-            '%s %s s3://bucket/key.txt --sse-c --sse-c-key fileb://%s' % (
-                self.prefix, file_path, key_path
-            )
+            '%s %s s3://bucket/key.txt --sse-c --sse-c-key fileb://%s'
+            % (self.prefix, file_path, key_path)
         )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
 
         expected_args = {
-            'Key': 'key.txt', 'Bucket': 'bucket',
+            'Key': 'key.txt',
+            'Bucket': 'bucket',
             'ChecksumAlgorithm': 'CRC64NVME',
             'ContentType': 'text/plain',
             'Body': mock.ANY,
@@ -575,7 +716,7 @@ class TestCPCommand(BaseCPCommandTest):
                 "ContentLength": 4,
                 "ETag": '"d3b07384d113edec49eaa6238ad5ff00"',
                 "Metadata": {},
-                "ContentType": "binary/octet-stream"
+                "ContentType": "binary/octet-stream",
             },
             {
                 "AcceptRanges": "bytes",
@@ -584,9 +725,9 @@ class TestCPCommand(BaseCPCommandTest):
                 "ContentLength": 4,
                 "ETag": '"d3b07384d113edec49eaa6238ad5ff00"',
                 "LastModified": "Tue, 12 Jul 2016 21:26:07 GMT",
-                "Body": BytesIO(b'foo\n')
+                "Body": BytesIO(b'foo\n'),
             },
-            {}
+            {},
         ]
 
         file_path = self.files.create_file('foo.txt', '')
@@ -599,9 +740,8 @@ class TestCPCommand(BaseCPCommandTest):
             f.write(key_contents)
         cmdline = (
             '%s s3://bucket-one/key.txt s3://bucket/key.txt '
-            '--sse-c-copy-source --sse-c-copy-source-key fileb://%s' % (
-                self.prefix, key_path
-            )
+            '--sse-c-copy-source --sse-c-copy-source-key fileb://%s'
+            % (self.prefix, key_path)
         )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 2)
@@ -609,34 +749,37 @@ class TestCPCommand(BaseCPCommandTest):
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
 
         expected_args = {
-            'Key': 'key.txt', 'Bucket': 'bucket',
-            'CopySource': {
-                'Bucket': 'bucket-one',
-                'Key': 'key.txt'
-            },
+            'Key': 'key.txt',
+            'Bucket': 'bucket',
+            'CopySource': {'Bucket': 'bucket-one', 'Key': 'key.txt'},
             'CopySourceSSECustomerAlgorithm': 'AES256',
             'CopySourceSSECustomerKey': key_contents,
         }
         self.assertDictEqual(self.operations_called[1][1], expected_args)
 
-
     # Note ideally the kms sse with a key id would be integration tests
     # However, you cannot delete kms keys so there would be no way to clean
     # up the tests
     def test_cp_upload_with_sse_kms_and_key_id(self):
         full_path = self.files.create_file('foo.txt', 'contents')
         cmdline = (
-            '%s %s s3://bucket/key.txt --sse aws:kms --sse-kms-key-id foo' % (
-                self.prefix, full_path))
+            '%s %s s3://bucket/key.txt --sse aws:kms --sse-kms-key-id foo'
+            % (self.prefix, full_path)
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertDictEqual(
             self.operations_called[0][1],
-            {'Key': 'key.txt', 'Bucket': 'bucket',
-             'ChecksumAlgorithm': 'CRC64NVME',
-             'ContentType': 'text/plain', 'Body': mock.ANY,
-             'SSEKMSKeyId': 'foo', 'ServerSideEncryption': 'aws:kms'}
+            {
+                'Key': 'key.txt',
+                'Bucket': 'bucket',
+                'ChecksumAlgorithm': 'CRC64NVME',
+                'ContentType': 'text/plain',
+                'Body': mock.ANY,
+                'SSEKMSKeyId': 'foo',
+                'ServerSideEncryption': 'aws:kms',
+            },
         )
 
     def test_cp_upload_large_file_with_sse_kms_and_key_id(self):
@@ -644,36 +787,42 @@ class TestCPCommand(BaseCPCommandTest):
             {'UploadId': 'foo'},  # CreateMultipartUpload
             {'ETag': '"foo"'},  # UploadPart
             {'ETag': '"foo"'},  # UploadPart
-            {}  # CompleteMultipartUpload
+            {},  # CompleteMultipartUpload
         ]
-        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024 ** 2))
+        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024**2))
         cmdline = (
             '%s %s s3://bucket/key.txt --copy-props none '
-            '--sse aws:kms --sse-kms-key-id foo' % (
-                self.prefix, full_path))
+            '--sse aws:kms --sse-kms-key-id foo' % (self.prefix, full_path)
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 4)
 
         # We are only really concerned that the CreateMultipartUpload
         # used the KMS key id.
         self.assertEqual(
-            self.operations_called[0][0].name, 'CreateMultipartUpload')
+            self.operations_called[0][0].name, 'CreateMultipartUpload'
+        )
         self.assertDictEqual(
             self.operations_called[0][1],
-            {'Key': 'key.txt', 'Bucket': 'bucket',
-             'ChecksumAlgorithm': 'CRC64NVME',
-             'ContentType': 'text/plain',
-             'SSEKMSKeyId': 'foo', 'ServerSideEncryption': 'aws:kms'}
+            {
+                'Key': 'key.txt',
+                'Bucket': 'bucket',
+                'ChecksumAlgorithm': 'CRC64NVME',
+                'ContentType': 'text/plain',
+                'SSEKMSKeyId': 'foo',
+                'ServerSideEncryption': 'aws:kms',
+            },
         )
 
     def test_cp_copy_with_sse_kms_and_key_id(self):
         self.parsed_responses = [
             {'ContentLength': 5, 'LastModified': '00:00:00Z'},  # HeadObject
-            {}  # CopyObject
+            {},  # CopyObject
         ]
         cmdline = (
             '%s s3://bucket/key1.txt s3://bucket/key2.txt '
-            '--sse aws:kms --sse-kms-key-id foo' % self.prefix)
+            '--sse aws:kms --sse-kms-key-id foo' % self.prefix
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 2)
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
@@ -682,38 +831,43 @@ class TestCPCommand(BaseCPCommandTest):
             {
                 'Key': 'key2.txt',
                 'Bucket': 'bucket',
-                'CopySource': {
-                    'Bucket': 'bucket',
-                    'Key': 'key1.txt'
-                },
+                'CopySource': {'Bucket': 'bucket', 'Key': 'key1.txt'},
                 'SSEKMSKeyId': 'foo',
-                'ServerSideEncryption': 'aws:kms'
-            }
+                'ServerSideEncryption': 'aws:kms',
+            },
         )
 
     def test_cp_copy_large_file_with_sse_kms_and_key_id(self):
         self.parsed_responses = [
-            {'ContentLength': 10 * (1024 ** 2),
-             'LastModified': '00:00:00Z'},  # HeadObject
+            {
+                'ContentLength': 10 * (1024**2),
+                'LastModified': '00:00:00Z',
+            },  # HeadObject
             {'UploadId': 'foo'},  # CreateMultipartUpload
             {'CopyPartResult': {'ETag': '"foo"'}},  # UploadPartCopy
             {'CopyPartResult': {'ETag': '"foo"'}},  # UploadPartCopy
-            {}  # CompleteMultipartUpload
+            {},  # CompleteMultipartUpload
         ]
         cmdline = (
             '%s s3://bucket/key1.txt s3://bucket/key2.txt --copy-props none '
-            '--sse aws:kms --sse-kms-key-id foo' % self.prefix)
+            '--sse aws:kms --sse-kms-key-id foo' % self.prefix
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(len(self.operations_called), 5)
 
         # We are only really concerned that the CreateMultipartUpload
         # used the KMS key id.
         self.assertEqual(
-            self.operations_called[1][0].name, 'CreateMultipartUpload')
+            self.operations_called[1][0].name, 'CreateMultipartUpload'
+        )
         self.assertDictEqual(
             self.operations_called[1][1],
-            {'Key': 'key2.txt', 'Bucket': 'bucket',
-             'SSEKMSKeyId': 'foo', 'ServerSideEncryption': 'aws:kms'}
+            {
+                'Key': 'key2.txt',
+                'Bucket': 'bucket',
+                'SSEKMSKeyId': 'foo',
+                'ServerSideEncryption': 'aws:kms',
+            },
         )
 
     def test_cannot_use_recursive_with_stream(self):
@@ -721,20 +875,19 @@ class TestCPCommand(BaseCPCommandTest):
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=252)
         self.assertIn(
             'Streaming currently is only compatible with non-recursive cp '
-            'commands', stderr)
+            'commands',
+            stderr,
+        )
 
     def test_upload_unicode_path(self):
         self.parsed_responses = [
-            {'ContentLength': 10,
-             'LastModified': '00:00:00Z'},  # HeadObject
-            {'ETag': '"foo"'}  # PutObject
+            {'ContentLength': 10, 'LastModified': '00:00:00Z'},  # HeadObject
+            {'ETag': '"foo"'},  # PutObject
         ]
-        command = u's3 cp s3://bucket/\u2603 s3://bucket/\u2713'
+        command = 's3 cp s3://bucket/\u2603 s3://bucket/\u2713'
         stdout, stderr, rc = self.run_cmd(command, expected_rc=0)
 
-        success_message = (
-            u'copy: s3://bucket/\u2603 to s3://bucket/\u2713'
-        )
+        success_message = 'copy: s3://bucket/\u2603 to s3://bucket/\u2713'
         self.assertIn(success_message, stdout)
 
         progress_message = 'Completed 10 Bytes'
@@ -742,13 +895,15 @@ class TestCPCommand(BaseCPCommandTest):
 
     def test_cp_with_error_and_warning_permissions(self):
         command = "s3 cp %s s3://bucket/foo.txt"
-        self.parsed_responses = [{
-            'Error': {
-                'Code': 'NoSuchBucket',
-                'Message': 'The specified bucket does not exist',
-                'BucketName': 'bucket'
+        self.parsed_responses = [
+            {
+                'Error': {
+                    'Code': 'NoSuchBucket',
+                    'Message': 'The specified bucket does not exist',
+                    'BucketName': 'bucket',
+                }
             }
-        }]
+        ]
         self.http_response.status_code = 404
 
         full_path = self.files.create_file('foo.txt', 'bar')
@@ -758,8 +913,8 @@ class TestCPCommand(BaseCPCommandTest):
         # on all OSes so it has to be patched.
         # TODO: find another method to test this behavior without patching.
         with mock.patch(
-                'awscli.customizations.s3.filegenerator.get_file_stat',
-                return_value=(None, None)
+            'awscli.customizations.s3.filegenerator.get_file_stat',
+            return_value=(None, None),
         ):
             _, stderr, rc = self.run_cmd(command % full_path, expected_rc=1)
         self.assertIn('upload failed', stderr)
@@ -770,57 +925,86 @@ class TestCPCommand(BaseCPCommandTest):
         cmdline = f'{self.prefix} {full_path} s3://bucket/key.txt --checksum-algorithm CRC32'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32')
+        self.assertEqual(
+            self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32'
+        )
 
     def test_upload_with_checksum_algorithm_crc32c(self):
         full_path = self.files.create_file('foo.txt', 'contents')
         cmdline = f'{self.prefix} {full_path} s3://bucket/key.txt --checksum-algorithm CRC32C'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32C')
+        self.assertEqual(
+            self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32C'
+        )
 
     def test_upload_with_checksum_algorithm_crc64nvme(self):
         full_path = self.files.create_file('foo.txt', 'contents')
         cmdline = f'{self.prefix} {full_path} s3://bucket/key.txt --checksum-algorithm CRC64NVME'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC64NVME')
+        self.assertEqual(
+            self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC64NVME'
+        )
 
     def test_multipart_upload_with_checksum_algorithm_crc32(self):
-        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024 ** 2))
+        full_path = self.files.create_file('foo.txt', 'a' * 10 * (1024**2))
         self.parsed_responses = [
             {'UploadId': 'foo'},
             {'ETag': 'foo-e1', 'ChecksumCRC32': 'foo-1'},
             {'ETag': 'foo-e2', 'ChecksumCRC32': 'foo-2'},
-            {}
+            {},
         ]
-        cmdline = ('%s %s s3://bucket/key2.txt'
-                   ' --checksum-algorithm CRC32' % (self.prefix, full_path))
+        cmdline = (
+            '%s %s s3://bucket/key2.txt'
+            ' --checksum-algorithm CRC32' % (self.prefix, full_path)
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 4, self.operations_called)
-        self.assertEqual(self.operations_called[0][0].name, 'CreateMultipartUpload')
-        self.assertEqual(self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32')
+        self.assertEqual(
+            len(self.operations_called), 4, self.operations_called
+        )
+        self.assertEqual(
+            self.operations_called[0][0].name, 'CreateMultipartUpload'
+        )
+        self.assertEqual(
+            self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32'
+        )
         self.assertEqual(self.operations_called[1][0].name, 'UploadPart')
-        self.assertEqual(self.operations_called[1][1]['ChecksumAlgorithm'], 'CRC32')
-        self.assertEqual(self.operations_called[3][0].name, 'CompleteMultipartUpload')
-        self.assertIn({'ETag': 'foo-e1', 'ChecksumCRC32': 'foo-1', 'PartNumber': mock.ANY},
-                      self.operations_called[3][1]['MultipartUpload']['Parts'])
-        self.assertIn({'ETag': 'foo-e2', 'ChecksumCRC32': 'foo-2', 'PartNumber': mock.ANY},
-                      self.operations_called[3][1]['MultipartUpload']['Parts'])
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumAlgorithm'], 'CRC32'
+        )
+        self.assertEqual(
+            self.operations_called[3][0].name, 'CompleteMultipartUpload'
+        )
+        self.assertIn(
+            {
+                'ETag': 'foo-e1',
+                'ChecksumCRC32': 'foo-1',
+                'PartNumber': mock.ANY,
+            },
+            self.operations_called[3][1]['MultipartUpload']['Parts'],
+        )
+        self.assertIn(
+            {
+                'ETag': 'foo-e2',
+                'ChecksumCRC32': 'foo-2',
+                'PartNumber': mock.ANY,
+            },
+            self.operations_called[3][1]['MultipartUpload']['Parts'],
+        )
 
     def test_copy_with_checksum_algorithm_crc32(self):
         self.parsed_responses = [
             self.head_object_response(),
             # Mocked CopyObject response with a CRC32 checksum specified
-            {
-                'ETag': 'foo-1',
-                'ChecksumCRC32': 'Tq0H4g=='
-            }
+            {'ETag': 'foo-1', 'ChecksumCRC32': 'Tq0H4g=='},
         ]
         cmdline = f'{self.prefix} s3://bucket1/key.txt s3://bucket2/key.txt --checksum-algorithm CRC32'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumAlgorithm'], 'CRC32')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumAlgorithm'], 'CRC32'
+        )
 
     def test_download_with_checksum_mode_crc32(self):
         self.parsed_responses = [
@@ -829,13 +1013,15 @@ class TestCPCommand(BaseCPCommandTest):
             {
                 'ETag': 'foo-1',
                 'ChecksumCRC32': 'Tq0H4g==',
-                'Body': BytesIO(b'foo')
-            }
+                'Body': BytesIO(b'foo'),
+            },
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumMode'], 'ENABLED')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumMode'], 'ENABLED'
+        )
 
     def test_download_with_checksum_mode_crc32c(self):
         self.parsed_responses = [
@@ -844,21 +1030,23 @@ class TestCPCommand(BaseCPCommandTest):
             {
                 'ETag': 'foo-1',
                 'ChecksumCRC32C': 'checksum',
-                'Body': BytesIO(b'foo')
-            }
+                'Body': BytesIO(b'foo'),
+            },
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumMode'], 'ENABLED')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumMode'], 'ENABLED'
+        )
 
 
 class TestStreamingCPCommand(BaseAWSCommandParamsTest):
     def test_streaming_upload(self):
         command = "s3 cp - s3://bucket/streaming.txt"
-        self.parsed_responses = [{
-            'ETag': '"c8afdb36c52cf4727836669019e69222"'
-        }]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
 
         binary_stdin = BufferedBytesIO(b'foo\n')
         with mock.patch('sys.stdin', binary_stdin):
@@ -870,7 +1058,7 @@ class TestStreamingCPCommand(BaseAWSComm
             'Bucket': 'bucket',
             'Key': 'streaming.txt',
             'ChecksumAlgorithm': 'CRC64NVME',
-            'Body': mock.ANY
+            'Body': mock.ANY,
         }
 
         self.assertEqual(model.name, 'PutObject')
@@ -878,9 +1066,9 @@ class TestStreamingCPCommand(BaseAWSComm
 
     def test_streaming_upload_with_expected_size(self):
         command = "s3 cp - s3://bucket/streaming.txt --expected-size 4"
-        self.parsed_responses = [{
-            'ETag': '"c8afdb36c52cf4727836669019e69222"'
-        }]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
 
         binary_stdin = BufferedBytesIO(b'foo\n')
         with mock.patch('sys.stdin', binary_stdin):
@@ -892,7 +1080,7 @@ class TestStreamingCPCommand(BaseAWSComm
             'Bucket': 'bucket',
             'Key': 'streaming.txt',
             'ChecksumAlgorithm': 'CRC64NVME',
-            'Body': mock.ANY
+            'Body': mock.ANY,
         }
 
         self.assertEqual(model.name, 'PutObject')
@@ -900,13 +1088,15 @@ class TestStreamingCPCommand(BaseAWSComm
 
     def test_streaming_upload_error(self):
         command = "s3 cp - s3://bucket/streaming.txt"
-        self.parsed_responses = [{
-            'Error': {
-                'Code': 'NoSuchBucket',
-                'Message': 'The specified bucket does not exist',
-                'BucketName': 'bucket'
+        self.parsed_responses = [
+            {
+                'Error': {
+                    'Code': 'NoSuchBucket',
+                    'Message': 'The specified bucket does not exist',
+                    'BucketName': 'bucket',
+                }
             }
-        }]
+        ]
         self.http_response.status_code = 404
 
         binary_stdin = BufferedBytesIO(b'foo\n')
@@ -921,9 +1111,9 @@ class TestStreamingCPCommand(BaseAWSComm
 
     def test_streaming_upload_when_stdin_unavailable(self):
         command = "s3 cp - s3://bucket/streaming.txt"
-        self.parsed_responses = [{
-            'ETag': '"c8afdb36c52cf4727836669019e69222"'
-        }]
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
 
         with mock.patch('sys.stdin', None):
             _, stderr, _ = self.run_cmd(command, expected_rc=1)
@@ -942,7 +1132,7 @@ class TestStreamingCPCommand(BaseAWSComm
                 "ContentLength": 4,
                 "ETag": '"d3b07384d113edec49eaa6238ad5ff00"',
                 "Metadata": {},
-                "ContentType": "binary/octet-stream"
+                "ContentType": "binary/octet-stream",
             },
             {
                 "AcceptRanges": "bytes",
@@ -951,8 +1141,8 @@ class TestStreamingCPCommand(BaseAWSComm
                 "ContentLength": 4,
                 "ETag": '"d3b07384d113edec49eaa6238ad5ff00"',
                 "LastModified": "Tue, 12 Jul 2016 21:26:07 GMT",
-                "Body": BytesIO(b'foo\n')
-            }
+                "Body": BytesIO(b'foo\n'),
+            },
         ]
 
         stdout, stderr, rc = self.run_cmd(command)
@@ -966,13 +1156,15 @@ class TestStreamingCPCommand(BaseAWSComm
 
     def test_streaming_download_error(self):
         command = "s3 cp s3://bucket/streaming.txt -"
-        self.parsed_responses = [{
-            'Error': {
-                'Code': 'NoSuchBucket',
-                'Message': 'The specified bucket does not exist',
-                'BucketName': 'bucket'
+        self.parsed_responses = [
+            {
+                'Error': {
+                    'Code': 'NoSuchBucket',
+                    'Message': 'The specified bucket does not exist',
+                    'BucketName': 'bucket',
+                }
             }
-        }]
+        ]
         self.http_response.status_code = 404
 
         _, stderr, _ = self.run_cmd(command, expected_rc=1)
@@ -990,152 +1182,189 @@ class TestCpCommandWithRequesterPayer(Ba
 
     def test_single_upload(self):
         full_path = self.files.create_file('myfile', 'mycontent')
-        cmdline = (
-            '%s %s s3://mybucket/mykey --request-payer' % (
-                self.prefix, full_path
-            )
+        cmdline = '%s %s s3://mybucket/mykey --request-payer' % (
+            self.prefix,
+            full_path,
         )
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('PutObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'ChecksumAlgorithm': 'CRC64NVME',
-                    'RequestPayer': 'requester',
-                    'Body': mock.ANY,
-                })
+                (
+                    'PutObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'ChecksumAlgorithm': 'CRC64NVME',
+                        'RequestPayer': 'requester',
+                        'Body': mock.ANY,
+                    },
+                )
             ]
         )
 
     def test_multipart_upload(self):
-        full_path = self.files.create_file('myfile', 'a' * 10 * (1024 ** 2))
-        cmdline = (
-            '%s %s s3://mybucket/mykey --request-payer' % (
-                self.prefix, full_path))
+        full_path = self.files.create_file('myfile', 'a' * 10 * (1024**2))
+        cmdline = '%s %s s3://mybucket/mykey --request-payer' % (
+            self.prefix,
+            full_path,
+        )
 
         self.parsed_responses = [
-            {'UploadId': 'myid'},      # CreateMultipartUpload
-            {'ETag': '"myetag"'},      # UploadPart
-            {'ETag': '"myetag"'},      # UploadPart
-            {}                         # CompleteMultipartUpload
+            {'UploadId': 'myid'},  # CreateMultipartUpload
+            {'ETag': '"myetag"'},  # UploadPart
+            {'ETag': '"myetag"'},  # UploadPart
+            {},  # CompleteMultipartUpload
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('CreateMultipartUpload', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'ChecksumAlgorithm': 'CRC64NVME',
-                    'RequestPayer': 'requester',
-                }),
-                ('UploadPart', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'ChecksumAlgorithm': 'CRC64NVME',
-                    'RequestPayer': 'requester',
-                    'UploadId': 'myid',
-                    'PartNumber': mock.ANY,
-                    'Body': mock.ANY,
-                }),
-                ('UploadPart', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'ChecksumAlgorithm': 'CRC64NVME',
-                    'RequestPayer': 'requester',
-                    'UploadId': 'myid',
-                    'PartNumber': mock.ANY,
-                    'Body': mock.ANY,
-
-                }),
-                ('CompleteMultipartUpload', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'RequestPayer': 'requester',
-                    'UploadId': 'myid',
-                    'MultipartUpload': {'Parts': [
-                        {'ETag': '"myetag"', 'PartNumber': 1},
-                        {'ETag': '"myetag"', 'PartNumber': 2}]
-                    }
-                })
+                (
+                    'CreateMultipartUpload',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'ChecksumAlgorithm': 'CRC64NVME',
+                        'RequestPayer': 'requester',
+                    },
+                ),
+                (
+                    'UploadPart',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'ChecksumAlgorithm': 'CRC64NVME',
+                        'RequestPayer': 'requester',
+                        'UploadId': 'myid',
+                        'PartNumber': mock.ANY,
+                        'Body': mock.ANY,
+                    },
+                ),
+                (
+                    'UploadPart',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'ChecksumAlgorithm': 'CRC64NVME',
+                        'RequestPayer': 'requester',
+                        'UploadId': 'myid',
+                        'PartNumber': mock.ANY,
+                        'Body': mock.ANY,
+                    },
+                ),
+                (
+                    'CompleteMultipartUpload',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'RequestPayer': 'requester',
+                        'UploadId': 'myid',
+                        'MultipartUpload': {
+                            'Parts': [
+                                {'ETag': '"myetag"', 'PartNumber': 1},
+                                {'ETag': '"myetag"', 'PartNumber': 2},
+                            ]
+                        },
+                    },
+                ),
             ]
         )
 
     def test_recursive_upload(self):
         self.files.create_file('myfile', 'mycontent')
-        cmdline = (
-            '%s %s s3://mybucket/ --request-payer --recursive' % (
-                self.prefix, self.files.rootdir
-            )
+        cmdline = '%s %s s3://mybucket/ --request-payer --recursive' % (
+            self.prefix,
+            self.files.rootdir,
         )
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('PutObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'myfile',
-                    'ChecksumAlgorithm': 'CRC64NVME',
-                    'RequestPayer': 'requester',
-                    'Body': mock.ANY,
-                })
+                (
+                    'PutObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'myfile',
+                        'ChecksumAlgorithm': 'CRC64NVME',
+                        'RequestPayer': 'requester',
+                        'Body': mock.ANY,
+                    },
+                )
             ]
         )
 
     def test_single_download(self):
         cmdline = '%s s3://mybucket/mykey %s --request-payer' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.parsed_responses = [
             self.head_object_response(),
-            self.get_object_response()
+            self.get_object_response(),
         ]
 
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
                 self.head_object_request(
-                    'mybucket', 'mykey', RequestPayer='requester'),
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
                 self.get_object_request(
-                    'mybucket', 'mykey', RequestPayer='requester'),
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
             ]
         )
 
     def test_ranged_download(self):
         cmdline = '%s s3://mybucket/mykey %s --request-payer' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.parsed_responses = [
-            self.head_object_response(ContentLength=10 * (1024 ** 2)),
+            self.head_object_response(ContentLength=10 * (1024**2)),
+            self.get_object_response(),
             self.get_object_response(),
-            self.get_object_response()
         ]
 
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
                 self.head_object_request(
-                    'mybucket', 'mykey', RequestPayer='requester'),
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
                 self.get_object_request(
-                    'mybucket', 'mykey', Range=mock.ANY,
-                    RequestPayer='requester'),
+                    'mybucket',
+                    'mykey',
+                    Range=mock.ANY,
+                    RequestPayer='requester',
+                    IfMatch='"foo-1"',
+                ),
                 self.get_object_request(
-                    'mybucket', 'mykey', Range=mock.ANY,
-                    RequestPayer='requester'),
+                    'mybucket',
+                    'mykey',
+                    Range=mock.ANY,
+                    RequestPayer='requester',
+                    IfMatch='"foo-1"',
+                ),
             ]
         )
 
     def test_recursive_download(self):
         cmdline = '%s s3://mybucket/ %s --request-payer --recursive' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.parsed_responses = [
             self.list_objects_response(['mykey']),
-            self.get_object_response()
+            self.get_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
                 self.list_objects_request(
-                    'mybucket', RequestPayer='requester'),
+                    'mybucket', RequestPayer='requester'
+                ),
                 self.get_object_request(
-                    'mybucket', 'mykey', RequestPayer='requester')
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
             ]
         )
 
@@ -1154,9 +1383,12 @@ class TestCpCommandWithRequesterPayer(Ba
                     'sourcebucket', 'sourcekey', RequestPayer='requester'
                 ),
                 self.copy_object_request(
-                    'sourcebucket', 'sourcekey', 'mybucket', 'mykey',
-                    RequestPayer='requester'
-                )
+                    'sourcebucket',
+                    'sourcekey',
+                    'mybucket',
+                    'mykey',
+                    RequestPayer='requester',
+                ),
             ]
         )
 
@@ -1167,7 +1399,7 @@ class TestCpCommandWithRequesterPayer(Ba
         cmdline += ' --request-payer'
         upload_id = 'id'
         self.parsed_responses = [
-            self.head_object_response(ContentLength=10 * (1024 ** 2)),
+            self.head_object_response(ContentLength=10 * (1024**2)),
             self.create_mpu_response(upload_id),
             self.upload_part_copy_response(),
             self.upload_part_copy_response(),
@@ -1177,20 +1409,38 @@ class TestCpCommandWithRequesterPayer(Ba
         self.assert_operations_called(
             [
                 self.head_object_request(
-                    'sourcebucket', 'sourcekey', RequestPayer='requester'),
+                    'sourcebucket', 'sourcekey', RequestPayer='requester'
+                ),
                 self.create_mpu_request(
-                    'mybucket', 'mykey', RequestPayer='requester'),
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
                 self.upload_part_copy_request(
-                    'sourcebucket', 'sourcekey', 'mybucket', 'mykey',
-                    upload_id, PartNumber=mock.ANY, RequestPayer='requester',
-                    CopySourceRange=mock.ANY),
+                    'sourcebucket',
+                    'sourcekey',
+                    'mybucket',
+                    'mykey',
+                    upload_id,
+                    PartNumber=mock.ANY,
+                    RequestPayer='requester',
+                    CopySourceRange=mock.ANY,
+                ),
                 self.upload_part_copy_request(
-                    'sourcebucket', 'sourcekey', 'mybucket', 'mykey',
-                    upload_id, PartNumber=mock.ANY, RequestPayer='requester',
-                    CopySourceRange=mock.ANY),
+                    'sourcebucket',
+                    'sourcekey',
+                    'mybucket',
+                    'mykey',
+                    upload_id,
+                    PartNumber=mock.ANY,
+                    RequestPayer='requester',
+                    CopySourceRange=mock.ANY,
+                ),
                 self.complete_mpu_request(
-                    'mybucket', 'mykey', upload_id, num_parts=2,
-                    RequestPayer='requester')
+                    'mybucket',
+                    'mykey',
+                    upload_id,
+                    num_parts=2,
+                    RequestPayer='requester',
+                ),
             ]
         )
 
@@ -1201,16 +1451,21 @@ class TestCpCommandWithRequesterPayer(Ba
         cmdline += ' --recursive'
         self.parsed_responses = [
             self.list_objects_response(['mykey']),
-            self.copy_object_response()
+            self.copy_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
                 self.list_objects_request(
-                    'sourcebucket', RequestPayer='requester'),
+                    'sourcebucket', RequestPayer='requester'
+                ),
                 self.copy_object_request(
-                    'sourcebucket', 'mykey', 'mybucket', 'mykey',
-                    RequestPayer='requester')
+                    'sourcebucket',
+                    'mykey',
+                    'mybucket',
+                    'mykey',
+                    RequestPayer='requester',
+                ),
             ]
         )
 
@@ -1219,19 +1474,24 @@ class TestCpCommandWithRequesterPayer(Ba
         cmdline += ' s3://sourcebucket/mykey s3://mybucket/mykey'
         cmdline += ' --request-payer'
         self.parsed_responses = [
-            self.head_object_response(
-                ContentLength=self.multipart_threshold
-            ),
-            self.get_object_tagging_response({})
+            self.head_object_response(ContentLength=self.multipart_threshold),
+            self.get_object_tagging_response({}),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(
-            self.create_mpu_request('mybucket', 'mykey',
-                                    RequestPayer='requester')
+            self.create_mpu_request(
+                'mybucket', 'mykey', RequestPayer='requester'
+            )
         )
         self.assert_in_operations_called(
-            ('GetObjectTagging', {'Bucket': 'sourcebucket', 'Key': 'mykey',
-                                  'RequestPayer': 'requester'})
+            (
+                'GetObjectTagging',
+                {
+                    'Bucket': 'sourcebucket',
+                    'Key': 'mykey',
+                    'RequestPayer': 'requester',
+                },
+            )
         )
 
     def test_mp_copy_object_with_tags_exceed_2k(self):
@@ -1239,28 +1499,41 @@ class TestCpCommandWithRequesterPayer(Ba
         cmdline += ' s3://sourcebucket/mykey s3://mybucket/mykey'
         cmdline += ' --request-payer'
         self.parsed_responses = [
-            self.head_object_response(
-                ContentLength=self.multipart_threshold
-            ),
+            self.head_object_response(ContentLength=self.multipart_threshold),
             self.get_object_tagging_response(
                 tags={'tag-key': 'value' * (2 * 1024)}
-            )
+            ),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(
-            self.create_mpu_request('mybucket', 'mykey',
-                                    RequestPayer='requester')
+            self.create_mpu_request(
+                'mybucket', 'mykey', RequestPayer='requester'
+            )
         )
         self.assert_in_operations_called(
-            ('GetObjectTagging', {'Bucket': 'sourcebucket', 'Key': 'mykey',
-                                  'RequestPayer': 'requester'})
+            (
+                'GetObjectTagging',
+                {
+                    'Bucket': 'sourcebucket',
+                    'Key': 'mykey',
+                    'RequestPayer': 'requester',
+                },
+            )
         )
         self.assert_in_operations_called(
-            ('PutObjectTagging',
-             {'Bucket': 'mybucket', 'Key': 'mykey',
-              'Tagging': {'TagSet': [{'Key': 'tag-key',
-                                      'Value': 'value' * (2 * 1024)}]},
-              'RequestPayer': 'requester'})
+            (
+                'PutObjectTagging',
+                {
+                    'Bucket': 'mybucket',
+                    'Key': 'mykey',
+                    'Tagging': {
+                        'TagSet': [
+                            {'Key': 'tag-key', 'Value': 'value' * (2 * 1024)}
+                        ]
+                    },
+                    'RequestPayer': 'requester',
+                },
+            )
         )
 
 
@@ -1278,9 +1551,7 @@ class TestAccesspointCPCommand(BaseCPCom
         cmdline += ' s3://%s/mykey' % self.accesspoint_arn
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
-            [
-                self.put_object_request(self.accesspoint_arn, 'mykey')
-            ]
+            [self.put_object_request(self.accesspoint_arn, 'mykey')]
         )
 
     def test_recusive_upload(self):
@@ -1291,9 +1562,7 @@ class TestAccesspointCPCommand(BaseCPCom
         cmdline += ' --recursive'
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
-            [
-                self.put_object_request(self.accesspoint_arn, 'myfile')
-            ]
+            [self.put_object_request(self.accesspoint_arn, 'myfile')]
         )
 
     def test_download(self):
@@ -1343,8 +1612,11 @@ class TestAccesspointCPCommand(BaseCPCom
             [
                 self.head_object_request(self.accesspoint_arn, 'mykey'),
                 self.copy_object_request(
-                    self.accesspoint_arn, 'mykey', accesspoint_arn_dest,
-                    'mykey'),
+                    self.accesspoint_arn,
+                    'mykey',
+                    accesspoint_arn_dest,
+                    'mykey',
+                ),
             ]
         )
 
@@ -1363,39 +1635,34 @@ class TestAccesspointCPCommand(BaseCPCom
             [
                 self.list_objects_request(self.accesspoint_arn),
                 self.copy_object_request(
-                    self.accesspoint_arn, 'mykey', accesspoint_arn_dest,
-                    'mykey'),
+                    self.accesspoint_arn,
+                    'mykey',
+                    accesspoint_arn_dest,
+                    'mykey',
+                ),
             ]
         )
 
     def test_accepts_mrap_arns(self):
-        mrap_arn = (
-            'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
-        )
+        mrap_arn = 'arn:aws:s3::123456789012:accesspoint:mfzwi23gnjvgw.mrap'
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = self.prefix
         cmdline += ' %s' % filename
         cmdline += ' s3://%s/mykey' % mrap_arn
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
-            [
-                self.put_object_request(mrap_arn, 'mykey')
-            ]
+            [self.put_object_request(mrap_arn, 'mykey')]
         )
 
     def test_accepts_mrap_arns_with_slash(self):
-        mrap_arn = (
-            'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap'
-        )
+        mrap_arn = 'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap'
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = self.prefix
         cmdline += ' %s' % filename
         cmdline += ' s3://%s/mykey' % mrap_arn
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
-            [
-                self.put_object_request(mrap_arn, 'mykey')
-            ]
+            [self.put_object_request(mrap_arn, 'mykey')]
         )
 
 
@@ -1407,19 +1674,21 @@ class BaseCopyPropsCpCommandTest(BaseCPC
         self.target_bucket = 'target-bucket'
         self.target_key = 'target-key'
         self.multipart_threshold = 8 * MB
-        self.tags = OrderedDict([
-            ('tag-key', 'tag-value'),
-            ('tag-key2', 'tag-value2'),
-        ])
+        self.tags = OrderedDict(
+            [
+                ('tag-key', 'tag-value'),
+                ('tag-key2', 'tag-value2'),
+            ]
+        )
         self.urlencoded_tags = 'tag-key=tag-value&tag-key2=tag-value2'
-        self.tags_over_2k = {
-            'tag-key': 'value' * (2 * 1024)
-        }
+        self.tags_over_2k = {'tag-key': 'value' * (2 * 1024)}
 
     def get_s3_cp_copy_command(self, copy_props=None):
         cmdline = self.prefix + 's3://%s/%s s3://%s/%s' % (
-            self.source_bucket, self.source_key, self.target_bucket,
-            self.target_key
+            self.source_bucket,
+            self.source_key,
+            self.target_bucket,
+            self.target_key,
         )
         if copy_props:
             cmdline += ' --copy-props %s' % copy_props
@@ -1427,14 +1696,21 @@ class BaseCopyPropsCpCommandTest(BaseCPC
 
     def get_recursive_s3_copy_command(self, copy_props=None):
         cmdline = self.prefix + 's3://%s/ s3://%s/ --recursive' % (
-            self.source_bucket, self.target_bucket,
+            self.source_bucket,
+            self.target_bucket,
         )
         if copy_props:
             cmdline += ' --copy-props %s' % copy_props
         return cmdline
 
-    def copy_object_request(self, source_bucket=None, source_key=None,
-                            bucket=None, key=None, **override_kwargs):
+    def copy_object_request(
+        self,
+        source_bucket=None,
+        source_key=None,
+        bucket=None,
+        key=None,
+        **override_kwargs,
+    ):
         if source_bucket is None:
             source_bucket = self.source_bucket
         if source_key is None:
@@ -1464,7 +1740,7 @@ class BaseCopyPropsCpCommandTest(BaseCPC
             'ContentLanguage': 'content-language',
             'ContentType': 'content-type',
             'Expires': 'Tue, 07 Jan 2020 20:40:03 GMT',
-            'Metadata': {'key': 'value'}
+            'Metadata': {'key': 'value'},
         }
 
     def get_object_tagging_request(self, bucket=None, key=None):
@@ -1473,9 +1749,8 @@ class BaseCopyPropsCpCommandTest(BaseCPC
         if key is None:
             key = self.source_key
         return super(
-            BaseCopyPropsCpCommandTest, self).get_object_tagging_request(
-                bucket, key
-        )
+            BaseCopyPropsCpCommandTest, self
+        ).get_object_tagging_request(bucket, key)
 
     def put_object_tagging_request(self, bucket=None, key=None, tags=None):
         if bucket is None:
@@ -1485,9 +1760,8 @@ class BaseCopyPropsCpCommandTest(BaseCPC
         if tags is None:
             tags = {}
         return super(
-            BaseCopyPropsCpCommandTest, self).put_object_tagging_request(
-                bucket=bucket, key=key, tags=tags
-        )
+            BaseCopyPropsCpCommandTest, self
+        ).put_object_tagging_request(bucket=bucket, key=key, tags=tags)
 
 
 class TestCopyPropsNoneCpCommand(BaseCopyPropsCpCommandTest):
@@ -1500,8 +1774,7 @@ class TestCopyPropsNoneCpCommand(BaseCop
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(
             self.copy_object_request(
-                MetadataDirective='REPLACE',
-                TaggingDirective='REPLACE'
+                MetadataDirective='REPLACE', TaggingDirective='REPLACE'
             )
         )
 
@@ -1537,9 +1810,7 @@ class TestCopyPropsMetadataDirectiveCpCo
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(
-            self.copy_object_request(
-                TaggingDirective='REPLACE'
-            )
+            self.copy_object_request(TaggingDirective='REPLACE')
         )
 
     def test_copy_object_overrides_with_cmdline_props(self):
@@ -1560,7 +1831,8 @@ class TestCopyPropsMetadataDirectiveCpCo
 
     def test_recursive_copy_object(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         self.parsed_responses = [
             self.list_objects_response(keys=[self.source_key]),
             self.copy_object_response(),
@@ -1576,7 +1848,8 @@ class TestCopyPropsMetadataDirectiveCpCo
 
     def test_recursive_copy_object_overrides_with_cmdline_props(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         cmdline += ' --metadata key=val-from-cmdline'
         self.parsed_responses = [
             self.list_objects_response(keys=[self.source_key]),
@@ -1591,14 +1864,14 @@ class TestCopyPropsMetadataDirectiveCpCo
         expected_extra_args['Metadata'] = {'key': 'val-from-cmdline'}
         self.assert_in_operations_called(
             self.copy_object_request(
-                key=self.source_key,
-                **expected_extra_args
+                key=self.source_key, **expected_extra_args
             )
         )
 
     def test_recursive_copy_maps_additional_head_object_headers(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         cmdline += ' --metadata key=val-from-cmdline'
         cmdline += ' --request-payer requester'
         self.parsed_responses = [
@@ -1620,7 +1893,7 @@ class TestCopyPropsMetadataDirectiveCpCo
         self.parsed_responses = [
             self.head_object_response(
                 ContentLength=self.multipart_threshold,
-                **self.all_metadata_directive_props()
+                **self.all_metadata_directive_props(),
             ),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
@@ -1634,7 +1907,7 @@ class TestCopyPropsMetadataDirectiveCpCo
         self.parsed_responses = [
             self.head_object_response(
                 ContentLength=self.multipart_threshold,
-                **self.all_metadata_directive_props()
+                **self.all_metadata_directive_props(),
             ),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
@@ -1646,7 +1919,8 @@ class TestCopyPropsMetadataDirectiveCpCo
 
     def test_recursive_mp_copy(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         self.parsed_responses = [
             self.list_objects_response(
                 keys=[self.source_key],
@@ -1663,7 +1937,8 @@ class TestCopyPropsMetadataDirectiveCpCo
 
     def test_recursive_mp_copy_object_with_prop_overrides(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         cmdline += ' --content-type content-type-from-cmdline'
         self.parsed_responses = [
             self.list_objects_response(
@@ -1676,19 +1951,17 @@ class TestCopyPropsMetadataDirectiveCpCo
         expected_extra_args = self.all_metadata_directive_props()
         expected_extra_args['ContentType'] = 'content-type-from-cmdline'
         self.assert_in_operations_called(
-            self.create_mpu_request(
-                key=self.source_key, **expected_extra_args
-            )
+            self.create_mpu_request(key=self.source_key, **expected_extra_args)
         )
 
     def test_recursive_mp_copy_maps_additional_head_object_headers(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         cmdline += ' --request-payer requester'
         self.parsed_responses = [
             self.list_objects_response(
-                keys=[self.source_key],
-                Size=self.multipart_threshold
+                keys=[self.source_key], Size=self.multipart_threshold
             ),
             self.head_object_response(),
         ] + self.mp_copy_responses()
@@ -1703,13 +1976,13 @@ class TestCopyPropsMetadataDirectiveCpCo
 
     def test_fails_when_head_object_fails(self):
         cmdline = self.get_recursive_s3_copy_command(
-            copy_props='metadata-directive')
+            copy_props='metadata-directive'
+        )
         self.parsed_responses = [
             self.list_objects_response(
-                keys=[self.source_key],
-                Size=self.multipart_threshold
+                keys=[self.source_key], Size=self.multipart_threshold
             ),
-            self.no_such_key_error_response()
+            self.no_such_key_error_response(),
         ]
         self.set_http_status_codes([200, 404])
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=1)
@@ -1792,8 +2065,7 @@ class TestCopyPropsDefaultCpCommand(Base
         expected_extra_args['MetadataDirective'] = 'REPLACE'
         self.assert_in_operations_called(
             self.copy_object_request(
-                key=self.source_key,
-                **expected_extra_args
+                key=self.source_key, **expected_extra_args
             )
         )
 
@@ -1802,9 +2074,9 @@ class TestCopyPropsDefaultCpCommand(Base
         self.parsed_responses = [
             self.head_object_response(
                 ContentLength=self.multipart_threshold,
-                **self.all_metadata_directive_props()
+                **self.all_metadata_directive_props(),
             ),
-            self.get_object_tagging_response(tags=self.tags)
+            self.get_object_tagging_response(tags=self.tags),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         expected_extra_args = self.all_metadata_directive_props()
@@ -1819,9 +2091,9 @@ class TestCopyPropsDefaultCpCommand(Base
         self.parsed_responses = [
             self.head_object_response(
                 ContentLength=self.multipart_threshold,
-                **self.all_metadata_directive_props()
+                **self.all_metadata_directive_props(),
             ),
-            self.get_object_tagging_response(tags=self.tags)
+            self.get_object_tagging_response(tags=self.tags),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         expected_extra_args = self.all_metadata_directive_props()
@@ -1835,19 +2107,23 @@ class TestCopyPropsDefaultCpCommand(Base
         cmdline = self.get_s3_cp_copy_command(copy_props='default')
         self.parsed_responses = [
             self.head_object_response(ContentLength=self.multipart_threshold),
-            self.get_object_tagging_response(tags={})
+            self.get_object_tagging_response(tags={}),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(self.create_mpu_request())
 
     def test_mp_copy_object_tags_exceed_2k(self):
         cmdline = self.get_s3_cp_copy_command(copy_props='default')
-        self.parsed_responses = [
-            self.head_object_response(ContentLength=self.multipart_threshold),
-            self.get_object_tagging_response(tags=self.tags_over_2k)
-        ] + self.mp_copy_responses() + [
-            self.put_object_tagging_response()
-        ]
+        self.parsed_responses = (
+            [
+                self.head_object_response(
+                    ContentLength=self.multipart_threshold
+                ),
+                self.get_object_tagging_response(tags=self.tags_over_2k),
+            ]
+            + self.mp_copy_responses()
+            + [self.put_object_tagging_response()]
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(self.create_mpu_request())
         self.assert_in_operations_called(
@@ -1861,15 +2137,13 @@ class TestCopyPropsDefaultCpCommand(Base
                 keys=[self.source_key], Size=self.multipart_threshold
             ),
             self.head_object_response(**self.all_metadata_directive_props()),
-            self.get_object_tagging_response(tags=self.tags)
+            self.get_object_tagging_response(tags=self.tags),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         expected_extra_args = self.all_metadata_directive_props()
         expected_extra_args['Tagging'] = self.urlencoded_tags
         self.assert_in_operations_called(
-            self.create_mpu_request(
-                key=self.source_key, **expected_extra_args
-            )
+            self.create_mpu_request(key=self.source_key, **expected_extra_args)
         )
 
     def test_recursive_mp_copy_object_with_prop_overrides(self):
@@ -1880,32 +2154,33 @@ class TestCopyPropsDefaultCpCommand(Base
                 keys=[self.source_key], Size=self.multipart_threshold
             ),
             self.head_object_response(**self.all_metadata_directive_props()),
-            self.get_object_tagging_response(tags=self.tags)
+            self.get_object_tagging_response(tags=self.tags),
         ] + self.mp_copy_responses()
         self.run_cmd(cmdline, expected_rc=0)
         expected_extra_args = self.all_metadata_directive_props()
         expected_extra_args['CacheControl'] = 'cache-control-from-cmdline'
         expected_extra_args['Tagging'] = self.urlencoded_tags
         self.assert_in_operations_called(
-            self.create_mpu_request(
-                key=self.source_key, **expected_extra_args
-            )
+            self.create_mpu_request(key=self.source_key, **expected_extra_args)
         )
 
     def test_recursive_mp_copy_tags_exceed_2k(self):
         cmdline = self.get_recursive_s3_copy_command(copy_props='default')
-        self.parsed_responses = [
-            self.list_objects_response(
-                keys=[self.source_key], Size=self.multipart_threshold
-            ),
-            self.head_object_response(),
-            self.get_object_tagging_response(tags=self.tags_over_2k)
-        ] + self.mp_copy_responses() + [
-            self.put_object_tagging_response()
-        ]
+        self.parsed_responses = (
+            [
+                self.list_objects_response(
+                    keys=[self.source_key], Size=self.multipart_threshold
+                ),
+                self.head_object_response(),
+                self.get_object_tagging_response(tags=self.tags_over_2k),
+            ]
+            + self.mp_copy_responses()
+            + [self.put_object_tagging_response()]
+        )
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_in_operations_called(
-            self.create_mpu_request(key=self.source_key))
+            self.create_mpu_request(key=self.source_key)
+        )
         self.assert_in_operations_called(
             self.put_object_tagging_request(
                 key=self.source_key, tags=self.tags_over_2k
@@ -1916,10 +2191,9 @@ class TestCopyPropsDefaultCpCommand(Base
         cmdline = self.get_recursive_s3_copy_command(copy_props='default')
         self.parsed_responses = [
             self.list_objects_response(
-                keys=[self.source_key],
-                Size=self.multipart_threshold
+                keys=[self.source_key], Size=self.multipart_threshold
             ),
-            self.no_such_key_error_response()
+            self.no_such_key_error_response(),
         ]
         self.set_http_status_codes([200, 404])
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=1)
@@ -1929,7 +2203,7 @@ class TestCopyPropsDefaultCpCommand(Base
         cmdline = self.get_s3_cp_copy_command(copy_props='default')
         self.parsed_responses = [
             self.head_object_response(ContentLength=self.multipart_threshold),
-            self.access_denied_error_response()
+            self.access_denied_error_response(),
         ]
         self.set_http_status_codes([200, 403])
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=1)
@@ -1937,13 +2211,19 @@ class TestCopyPropsDefaultCpCommand(Base
 
     def test_fails_and_cleans_up_when_put_tagging_object_fails(self):
         cmdline = self.get_s3_cp_copy_command(copy_props='default')
-        self.parsed_responses = [
-            self.head_object_response(ContentLength=self.multipart_threshold),
-            self.get_object_tagging_response(self.tags_over_2k),
-        ] + self.mp_copy_responses() + [
-            self.access_denied_error_response(),
-            self.delete_object_response()
-        ]
+        self.parsed_responses = (
+            [
+                self.head_object_response(
+                    ContentLength=self.multipart_threshold
+                ),
+                self.get_object_tagging_response(self.tags_over_2k),
+            ]
+            + self.mp_copy_responses()
+            + [
+                self.access_denied_error_response(),
+                self.delete_object_response(),
+            ]
+        )
         self.set_http_status_codes(
             [
                 200,  # HeadObject
@@ -1964,13 +2244,19 @@ class TestCopyPropsDefaultCpCommand(Base
     def test_clean_up_uses_requester_payer(self):
         cmdline = self.get_s3_cp_copy_command(copy_props='default')
         cmdline += ' --request-payer requester'
-        self.parsed_responses = [
-            self.head_object_response(ContentLength=self.multipart_threshold),
-            self.get_object_tagging_response(self.tags_over_2k),
-        ] + self.mp_copy_responses() + [
-            self.access_denied_error_response(),
-            self.delete_object_response()
-        ]
+        self.parsed_responses = (
+            [
+                self.head_object_response(
+                    ContentLength=self.multipart_threshold
+                ),
+                self.get_object_tagging_response(self.tags_over_2k),
+            ]
+            + self.mp_copy_responses()
+            + [
+                self.access_denied_error_response(),
+                self.delete_object_response(),
+            ]
+        )
         self.set_http_status_codes(
             [
                 200,  # HeadObject
@@ -1986,9 +2272,7 @@ class TestCopyPropsDefaultCpCommand(Base
         self.assertIn('AccessDenied', stderr)
         self.assert_in_operations_called(
             self.delete_object_request(
-                self.target_bucket,
-                self.target_key,
-                RequestPayer='requester'
+                self.target_bucket, self.target_key, RequestPayer='requester'
             )
         )
 
@@ -2011,7 +2295,8 @@ class TestCpSourceRegion(BaseS3CLIRunner
         self.target_bucket = 'bucket'
         self.target_region = self.region
         self.expected_target_endpoint = self.get_virtual_s3_host(
-            self.target_bucket, self.target_region)
+            self.target_bucket, self.target_region
+        )
         self.source_bucket = 'sourcebucket'
         self.source_region = 'af-south-1'
         self.expected_source_endpoint = self.get_virtual_s3_host(
@@ -2021,11 +2306,14 @@ class TestCpSourceRegion(BaseS3CLIRunner
 
     def test_respects_source_region_for_single_copy(self):
         cmdline = [
-            's3', 'cp',
+            's3',
+            'cp',
             f's3://{self.source_bucket}/key',
             f's3://{self.target_bucket}/',
-            '--source-region', self.source_region,
-            '--region', self.target_region,
+            '--source-region',
+            self.source_region,
+            '--region',
+            self.target_region,
         ]
         self.add_botocore_head_object_response()
         self.add_botocore_copy_object_response()
@@ -2035,18 +2323,21 @@ class TestCpSourceRegion(BaseS3CLIRunner
             cli_runner_result=result,
             expected_operations_to_endpoints=[
                 ('HeadObject', self.expected_source_endpoint),
-                ('CopyObject', self.expected_target_endpoint)
-            ]
+                ('CopyObject', self.expected_target_endpoint),
+            ],
         )
 
     def test_respects_source_region_for_recursive_copy(self):
         cmdline = [
-            's3', 'cp',
+            's3',
+            'cp',
             f's3://{self.source_bucket}/',
             f's3://{self.target_bucket}/',
-            '--source-region', self.source_region,
-            '--region', self.target_region,
-            '--recursive'
+            '--source-region',
+            self.source_region,
+            '--region',
+            self.target_region,
+            '--recursive',
         ]
         self.add_botocore_list_objects_response(['key'])
         self.add_botocore_copy_object_response()
@@ -2057,21 +2348,25 @@ class TestCpSourceRegion(BaseS3CLIRunner
             expected_operations_to_endpoints=[
                 ('ListObjectsV2', self.expected_source_endpoint),
                 ('CopyObject', self.expected_target_endpoint),
-            ]
+            ],
         )
 
     def test_respects_source_region_for_copying_mp_object_tags(self):
         cmdline = [
-            's3', 'cp',
+            's3',
+            'cp',
             f's3://{self.source_bucket}/key',
             f's3://{self.target_bucket}/',
-            '--source-region', self.source_region,
-            '--region', self.target_region,
+            '--source-region',
+            self.source_region,
+            '--region',
+            self.target_region,
         ]
         large_tag_value = 'value' * (2 * 1024)
         self.add_botocore_head_object_response(size=self.multipart_threshold)
         self.add_botocore_get_object_tagging_response(
-            tags={'tag': large_tag_value})
+            tags={'tag': large_tag_value}
+        )
         self.add_botocore_create_multipart_upload_response()
         self.add_botocore_upload_part_copy_response()
         self.add_botocore_complete_multipart_upload_response()
@@ -2088,20 +2383,24 @@ class TestCpSourceRegion(BaseS3CLIRunner
                 ('UploadPartCopy', self.expected_target_endpoint),
                 ('CompleteMultipartUpload', self.expected_target_endpoint),
                 ('PutObjectTagging', self.expected_target_endpoint),
-            ]
+            ],
         )
 
     def test_respects_source_region_for_recursive_mp_copy(self):
         cmdline = [
-            's3', 'cp',
+            's3',
+            'cp',
             f's3://{self.source_bucket}/',
             f's3://{self.target_bucket}/',
-            '--source-region', self.source_region,
-            '--region', self.target_region,
+            '--source-region',
+            self.source_region,
+            '--region',
+            self.target_region,
             '--recursive',
         ]
         self.add_botocore_list_objects_response(
-            ['key'], size=self.multipart_threshold)
+            ['key'], size=self.multipart_threshold
+        )
         self.add_botocore_head_object_response(size=self.multipart_threshold)
         self.add_botocore_get_object_tagging_response()
         self.add_botocore_create_multipart_upload_response()
@@ -2119,15 +2418,14 @@ class TestCpSourceRegion(BaseS3CLIRunner
                 ('CreateMultipartUpload', self.expected_target_endpoint),
                 ('UploadPartCopy', self.expected_target_endpoint),
                 ('CompleteMultipartUpload', self.expected_target_endpoint),
-            ]
+            ],
         )
 
+
 class TestCpWithCRTClient(BaseCRTTransferClientTest):
     def test_upload_using_crt_client(self):
         filename = self.files.create_file('myfile', 'mycontent')
-        cmdline = [
-            's3', 'cp', filename, 's3://bucket/key'
-        ]
+        cmdline = ['s3', 'cp', filename, 's3://bucket/key']
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
         self.assertEqual(len(crt_requests), 1)
@@ -2143,7 +2441,11 @@ class TestCpWithCRTClient(BaseCRTTransfe
         filename1 = self.files.create_file('myfile1', 'mycontent')
         filename2 = self.files.create_file('myfile2', 'mycontent')
         cmdline = [
-            's3', 'cp', self.files.rootdir, 's3://bucket/', '--recursive'
+            's3',
+            'cp',
+            self.files.rootdir,
+            's3://bucket/',
+            '--recursive',
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2165,9 +2467,7 @@ class TestCpWithCRTClient(BaseCRTTransfe
 
     def test_download_using_crt_client(self):
         filename = os.path.join(self.files.rootdir, 'myfile')
-        cmdline = [
-            's3', 'cp', 's3://bucket/key', filename
-        ]
+        cmdline = ['s3', 'cp', 's3://bucket/key', filename]
         self.add_botocore_head_object_response()
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2182,7 +2482,11 @@ class TestCpWithCRTClient(BaseCRTTransfe
 
     def test_recursive_download_using_crt_client(self):
         cmdline = [
-            's3', 'cp', 's3://bucket/', self.files.rootdir, '--recursive'
+            's3',
+            'cp',
+            's3://bucket/',
+            self.files.rootdir,
+            '--recursive',
         ]
         self.add_botocore_list_objects_response(['key1', 'key2'])
         self.run_command(cmdline)
@@ -2204,9 +2508,7 @@ class TestCpWithCRTClient(BaseCRTTransfe
         )
 
     def test_does_not_use_crt_client_for_copies(self):
-        cmdline = [
-            's3', 'cp', 's3://bucket/key', 's3://otherbucket/'
-        ]
+        cmdline = ['s3', 'cp', 's3://bucket/key', 's3://otherbucket/']
         self.add_botocore_head_object_response()
         self.add_botocore_copy_object_response()
         self.run_command(cmdline)
@@ -2214,9 +2516,7 @@ class TestCpWithCRTClient(BaseCRTTransfe
         self.assert_no_remaining_botocore_responses()
 
     def test_streaming_upload_using_crt_client(self):
-        cmdline = [
-            's3', 'cp', '-', 's3://bucket/key'
-        ]
+        cmdline = ['s3', 'cp', '-', 's3://bucket/key']
         with mock.patch('sys.stdin', BufferedBytesIO(b'foo')):
             self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2230,9 +2530,7 @@ class TestCpWithCRTClient(BaseCRTTransfe
         )
 
     def test_streaming_download_using_crt_client(self):
-        cmdline = [
-            's3', 'cp', 's3://bucket/key', '-'
-        ]
+        cmdline = ['s3', 'cp', 's3://bucket/key', '-']
         result = self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
         self.assertEqual(len(crt_requests), 1)
@@ -2249,7 +2547,12 @@ class TestCpWithCRTClient(BaseCRTTransfe
     def test_respects_region_parameter(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key', '--region', 'us-west-1',
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--region',
+            'us-west-1',
         ]
         self.run_command(cmdline)
         self.assert_crt_client_region('us-west-1')
@@ -2266,8 +2569,12 @@ class TestCpWithCRTClient(BaseCRTTransfe
     def test_respects_endpoint_url_parameter(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key',
-            '--endpoint-url', 'https://my.endpoint.com'
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--endpoint-url',
+            'https://my.endpoint.com',
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2281,14 +2588,18 @@ class TestCpWithCRTClient(BaseCRTTransfe
         )
         self.assertEqual(
             self.mock_crt_client.call_args[1]['tls_mode'],
-            S3RequestTlsMode.ENABLED
+            S3RequestTlsMode.ENABLED,
         )
 
     def test_can_disable_ssl_using_endpoint_url_parameter(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key',
-            '--endpoint-url', 'http://my.endpoint.com'
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--endpoint-url',
+            'http://my.endpoint.com',
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2302,13 +2613,17 @@ class TestCpWithCRTClient(BaseCRTTransfe
         )
         self.assertEqual(
             self.mock_crt_client.call_args[1]['tls_mode'],
-            S3RequestTlsMode.DISABLED
+            S3RequestTlsMode.DISABLED,
         )
 
     def test_respects_no_sign_request_parameter(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key', '--no-sign-request'
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--no-sign-request',
         ]
         self.run_command(cmdline)
         self.assert_crt_client_has_no_credential_provider()
@@ -2322,12 +2637,21 @@ class TestCpWithCRTClient(BaseCRTTransfe
         )
 
     @mock.patch('s3transfer.crt.ClientTlsContext')
-    def test_respects_ca_bundle_parameter(self, mock_client_tls_context_options):
+    def test_respects_ca_bundle_parameter(
+        self, mock_client_tls_context_options
+    ):
         filename = self.files.create_file('myfile', 'mycontent')
         fake_ca_contents = b"fake ca content"
-        ca_bundle = self.files.create_file('fake_ca', fake_ca_contents, mode='wb')
+        ca_bundle = self.files.create_file(
+            'fake_ca', fake_ca_contents, mode='wb'
+        )
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key', '--ca-bundle', ca_bundle
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--ca-bundle',
+            ca_bundle,
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -2336,11 +2660,19 @@ class TestCpWithCRTClient(BaseCRTTransfe
         self.assertEqual(tls_context_options.ca_buffer, fake_ca_contents)
 
     @mock.patch('s3transfer.crt.ClientTlsContext')
-    def test_respects_ca_bundle_parameter_no_verify(self, mock_client_tls_context_options):
+    def test_respects_ca_bundle_parameter_no_verify(
+        self, mock_client_tls_context_options
+    ):
         filename = self.files.create_file('myfile', 'mycontent')
         ca_bundle = self.files.create_file('fake_ca', 'mycontent')
         cmdline = [
-            's3', 'cp', filename, 's3://bucket/key', '--ca-bundle', ca_bundle, '--no-verify-ssl'
+            's3',
+            'cp',
+            filename,
+            's3://bucket/key',
+            '--ca-bundle',
+            ca_bundle,
+            '--no-verify-ssl',
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
diff -pruN 2.23.6-1/tests/functional/s3/test_ls_command.py 2.31.35-1/tests/functional/s3/test_ls_command.py
--- 2.23.6-1/tests/functional/s3/test_ls_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_ls_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,14 +15,25 @@ from dateutil import parser, tz
 
 from tests.functional.s3 import BaseS3TransferCommandTest
 
-class TestLSCommand(BaseS3TransferCommandTest):
 
+class TestLSCommand(BaseS3TransferCommandTest):
     def test_operations_used_in_recursive_list(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "foo/bar.txt", "Size": 100,
-             "LastModified": time_utc}]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --recursive', expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --recursive', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # We should not be calling the args with any delimiter because we
         # want a recursive listing.
@@ -33,7 +44,10 @@ class TestLSCommand(BaseS3TransferComman
         # is specific to your tzinfo, so shift the timezone to your local's.
         time_local = parser.parse(time_utc).astimezone(tz.tzlocal())
         self.assertEqual(
-            stdout, '%s        100 foo/bar.txt\n'%time_local.strftime('%Y-%m-%d %H:%M:%S'))
+            stdout,
+            '%s        100 foo/bar.txt\n'
+            % time_local.strftime('%Y-%m-%d %H:%M:%S'),
+        )
 
     def test_errors_out_with_extra_arguments(self):
         stderr = self.run_cmd('s3 ls --extra-argument-foo', expected_rc=252)[1]
@@ -48,10 +62,21 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_operations_use_page_size(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "foo/bar.txt", "Size": 100,
-             "LastModified": time_utc}]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --page-size 8', expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --page-size 8', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # We should not be calling the args with any delimiter because we
         # want a recursive listing.
@@ -62,10 +87,21 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_operations_use_page_size_recursive(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "foo/bar.txt", "Size": 100,
-             "LastModified": time_utc}]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --page-size 8 --recursive', expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --page-size 8 --recursive', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # We should not be calling the args with any delimiter because we
         # want a recursive listing.
@@ -78,23 +114,35 @@ class TestLSCommand(BaseS3TransferComman
     def test_success_rc_has_prefixes_and_objects(self):
         time_utc = "2014-01-09T20:45:49.000Z"
         self.parsed_responses = [
-            {"CommonPrefixes": [{"Prefix": "foo/"}],
-             "Contents": [{"Key": "foo/bar.txt", "Size": 100,
-                           "LastModified": time_utc}]}
+            {
+                "CommonPrefixes": [{"Prefix": "foo/"}],
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ],
+            }
         ]
         self.run_cmd('s3 ls s3://bucket/foo', expected_rc=0)
 
     def test_success_rc_has_only_prefixes(self):
-        self.parsed_responses = [
-            {"CommonPrefixes": [{"Prefix": "foo/"}]}
-        ]
+        self.parsed_responses = [{"CommonPrefixes": [{"Prefix": "foo/"}]}]
         self.run_cmd('s3 ls s3://bucket/foo', expected_rc=0)
 
     def test_success_rc_has_only_objects(self):
         time_utc = "2014-01-09T20:45:49.000Z"
         self.parsed_responses = [
-            {"Contents": [{"Key": "foo/bar.txt", "Size": 100,
-             "LastModified": time_utc}]}
+            {
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ]
+            }
         ]
         self.run_cmd('s3 ls s3://bucket/foo', expected_rc=0)
 
@@ -104,10 +152,17 @@ class TestLSCommand(BaseS3TransferComman
         # if there are no results on the second page because there were
         # results in previous pages.
         self.parsed_responses = [
-            {"CommonPrefixes": [{"Prefix": "foo/"}],
-             "Contents": [{"Key": "foo/bar.txt", "Size": 100,
-                           "LastModified": time_utc}]},
-            {}
+            {
+                "CommonPrefixes": [{"Prefix": "foo/"}],
+                "Contents": [
+                    {
+                        "Key": "foo/bar.txt",
+                        "Size": 100,
+                        "LastModified": time_utc,
+                    }
+                ],
+            },
+            {},
         ]
         self.run_cmd('s3 ls s3://bucket/foo', expected_rc=0)
 
@@ -124,15 +179,46 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_human_readable_file_size(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "onebyte.txt", "Size": 1, "LastModified": time_utc},
-            {"Key": "onekilobyte.txt", "Size": 1024, "LastModified": time_utc},
-            {"Key": "onemegabyte.txt", "Size": 1024 ** 2, "LastModified": time_utc},
-            {"Key": "onegigabyte.txt", "Size": 1024 ** 3, "LastModified": time_utc},
-            {"Key": "oneterabyte.txt", "Size": 1024 ** 4, "LastModified": time_utc},
-            {"Key": "onepetabyte.txt", "Size": 1024 ** 5, "LastModified": time_utc} ]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --human-readable',
-                                    expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "onebyte.txt",
+                        "Size": 1,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onekilobyte.txt",
+                        "Size": 1024,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onemegabyte.txt",
+                        "Size": 1024**2,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onegigabyte.txt",
+                        "Size": 1024**3,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "oneterabyte.txt",
+                        "Size": 1024**4,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onepetabyte.txt",
+                        "Size": 1024**5,
+                        "LastModified": time_utc,
+                    },
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --human-readable', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # Time is stored in UTC timezone, but the actual time displayed
         # is specific to your tzinfo, so shift the timezone to your local's.
@@ -147,14 +233,46 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_summarize(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "onebyte.txt", "Size": 1, "LastModified": time_utc},
-            {"Key": "onekilobyte.txt", "Size": 1024, "LastModified": time_utc},
-            {"Key": "onemegabyte.txt", "Size": 1024 ** 2, "LastModified": time_utc},
-            {"Key": "onegigabyte.txt", "Size": 1024 ** 3, "LastModified": time_utc},
-            {"Key": "oneterabyte.txt", "Size": 1024 ** 4, "LastModified": time_utc},
-            {"Key": "onepetabyte.txt", "Size": 1024 ** 5, "LastModified": time_utc} ]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --summarize', expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "onebyte.txt",
+                        "Size": 1,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onekilobyte.txt",
+                        "Size": 1024,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onemegabyte.txt",
+                        "Size": 1024**2,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onegigabyte.txt",
+                        "Size": 1024**3,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "oneterabyte.txt",
+                        "Size": 1024**4,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onepetabyte.txt",
+                        "Size": 1024**5,
+                        "LastModified": time_utc,
+                    },
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --summarize', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # Time is stored in UTC timezone, but the actual time displayed
         # is specific to your tzinfo, so shift the timezone to your local's.
@@ -165,14 +283,46 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_summarize_with_human_readable(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "onebyte.txt", "Size": 1, "LastModified": time_utc},
-            {"Key": "onekilobyte.txt", "Size": 1024, "LastModified": time_utc},
-            {"Key": "onemegabyte.txt", "Size": 1024 ** 2, "LastModified": time_utc},
-            {"Key": "onegigabyte.txt", "Size": 1024 ** 3, "LastModified": time_utc},
-            {"Key": "oneterabyte.txt", "Size": 1024 ** 4, "LastModified": time_utc},
-            {"Key": "onepetabyte.txt", "Size": 1024 ** 5, "LastModified": time_utc} ]}]
-        stdout, _, _ = self.run_cmd('s3 ls s3://bucket/ --human-readable --summarize', expected_rc=0)
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "onebyte.txt",
+                        "Size": 1,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onekilobyte.txt",
+                        "Size": 1024,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onemegabyte.txt",
+                        "Size": 1024**2,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onegigabyte.txt",
+                        "Size": 1024**3,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "oneterabyte.txt",
+                        "Size": 1024**4,
+                        "LastModified": time_utc,
+                    },
+                    {
+                        "Key": "onepetabyte.txt",
+                        "Size": 1024**5,
+                        "LastModified": time_utc,
+                    },
+                ],
+            }
+        ]
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://bucket/ --human-readable --summarize', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         # Time is stored in UTC timezone, but the actual time displayed
         # is specific to your tzinfo, so shift the timezone to your local's.
@@ -183,55 +333,87 @@ class TestLSCommand(BaseS3TransferComman
 
     def test_requester_pays(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "onebyte.txt", "Size": 1, "LastModified": time_utc},
-        ]}]
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "onebyte.txt",
+                        "Size": 1,
+                        "LastModified": time_utc,
+                    },
+                ],
+            }
+        ]
         command = 's3 ls s3://mybucket/foo/ --request-payer requester'
-        self.assert_params_for_cmd(command, {
-            'Bucket': 'mybucket', 'Delimiter': '/',
-            'RequestPayer': 'requester', 'EncodingType': 'url',
-            'Prefix': 'foo/'
-        })
+        self.assert_params_for_cmd(
+            command,
+            {
+                'Bucket': 'mybucket',
+                'Delimiter': '/',
+                'RequestPayer': 'requester',
+                'EncodingType': 'url',
+                'Prefix': 'foo/',
+            },
+        )
 
     def test_requester_pays_with_no_args(self):
         time_utc = "2014-01-09T20:45:49.000Z"
-        self.parsed_responses = [{"CommonPrefixes": [], "Contents": [
-            {"Key": "onebyte.txt", "Size": 1, "LastModified": time_utc},
-        ]}]
-        command = 's3 ls s3://mybucket/foo/ --request-payer'
-        self.assert_params_for_cmd(command, {
-            'Bucket': 'mybucket', 'Delimiter': '/',
-            'RequestPayer': 'requester', 'EncodingType': 'url',
-            'Prefix': 'foo/'
-        })
-
-    def test_accesspoint_arn(self):
         self.parsed_responses = [
-            self.list_objects_response(['bar.txt'])
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "onebyte.txt",
+                        "Size": 1,
+                        "LastModified": time_utc,
+                    },
+                ],
+            }
         ]
-        arn = (
-            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        command = 's3 ls s3://mybucket/foo/ --request-payer'
+        self.assert_params_for_cmd(
+            command,
+            {
+                'Bucket': 'mybucket',
+                'Delimiter': '/',
+                'RequestPayer': 'requester',
+                'EncodingType': 'url',
+                'Prefix': 'foo/',
+            },
         )
+
+    def test_accesspoint_arn(self):
+        self.parsed_responses = [self.list_objects_response(['bar.txt'])]
+        arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
         self.run_cmd('s3 ls s3://%s' % arn, expected_rc=0)
         call_args = self.operations_called[0][1]
         self.assertEqual(call_args['Bucket'], arn)
 
     def test_list_buckets_uses_bucket_name_prefix(self):
-        stdout, _, _ = self.run_cmd('s3 ls --bucket-name-prefix myprefix', expected_rc=0)
+        stdout, _, _ = self.run_cmd(
+            's3 ls --bucket-name-prefix myprefix', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         self.assertEqual(call_args['Prefix'], 'myprefix')
 
     def test_list_buckets_uses_bucket_region(self):
-        stdout, _, _ = self.run_cmd('s3 ls --bucket-region us-west-1', expected_rc=0)
+        stdout, _, _ = self.run_cmd(
+            's3 ls --bucket-region us-west-1', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         self.assertEqual(call_args['BucketRegion'], 'us-west-1')
 
     def test_list_objects_ignores_bucket_name_prefix(self):
-        stdout, _, _ = self.run_cmd('s3 ls s3://mybucket --bucket-name-prefix myprefix', expected_rc=0)
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://mybucket --bucket-name-prefix myprefix', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         self.assertEqual(call_args['Prefix'], '')
 
     def test_list_objects_ignores_bucket_region(self):
-        stdout, _, _ = self.run_cmd('s3 ls s3://mybucket --bucket-region us-west-1', expected_rc=0)
+        stdout, _, _ = self.run_cmd(
+            's3 ls s3://mybucket --bucket-region us-west-1', expected_rc=0
+        )
         call_args = self.operations_called[0][1]
         self.assertNotIn('BucketRegion', call_args)
diff -pruN 2.23.6-1/tests/functional/s3/test_mb_command.py 2.31.35-1/tests/functional/s3/test_mb_command.py
--- 2.23.6-1/tests/functional/s3/test_mb_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_mb_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestMBCommand(BaseAWSCommandParamsTest):
-
     prefix = 's3 mb '
 
     def test_make_bucket(self):
@@ -29,17 +28,13 @@ class TestMBCommand(BaseAWSCommandParams
         self.parsed_responses = [{'Location': 'us-west-2'}]
         expected_params = {
             'Bucket': 'bucket',
-            'CreateBucketConfiguration': {
-                'LocationConstraint': 'us-west-2'
-            }
+            'CreateBucketConfiguration': {'LocationConstraint': 'us-west-2'},
         }
         self.assert_params_for_cmd(command, expected_params)
 
     def test_location_constraint_not_added_on_us_east_1(self):
         command = self.prefix + 's3://bucket --region us-east-1'
-        expected_params = {
-            'Bucket': 'bucket'
-        }
+        expected_params = {'Bucket': 'bucket'}
         self.assert_params_for_cmd(command, expected_params)
 
     def test_nonzero_exit_if_invalid_path_provided(self):
diff -pruN 2.23.6-1/tests/functional/s3/test_mv_command.py 2.31.35-1/tests/functional/s3/test_mv_command.py
--- 2.23.6-1/tests/functional/s3/test_mv_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_mv_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,13 +17,14 @@ from awscrt.s3 import S3RequestType
 
 from awscli.compat import BytesIO
 from awscli.testutils import mock
+from tests import requires_crt
 from tests.functional.s3 import (
-    BaseS3TransferCommandTest, BaseCRTTransferClientTest
+    BaseCRTTransferClientTest,
+    BaseS3TransferCommandTest,
 )
-from tests import requires_crt
 
-class TestMvCommand(BaseS3TransferCommandTest):
 
+class TestMvCommand(BaseS3TransferCommandTest):
     prefix = 's3 mv '
 
     def test_cant_mv_object_onto_itself(self):
@@ -45,91 +46,122 @@ class TestMvCommand(BaseS3TransferComman
         stdout, _, _ = self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('HeadObject', {
-                    'Bucket': 'bucket',
-                    'Key': 'key.txt',
-                })
+                (
+                    'HeadObject',
+                    {
+                        'Bucket': 'bucket',
+                        'Key': 'key.txt',
+                    },
+                )
             ]
         )
         self.assertIn(
             '(dryrun) move: s3://bucket/key.txt to s3://bucket/key2.txt',
-            stdout
+            stdout,
         )
 
     def test_website_redirect_ignore_paramfile(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % \
-            (self.prefix, full_path, 'http://someserver')
-        self.parsed_responses = [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % (
+            self.prefix,
+            full_path,
+            'http://someserver',
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         # Make sure that the specified web address is used as opposed to the
         # contents of the web address.
         self.assertEqual(
             self.operations_called[0][1]['WebsiteRedirectLocation'],
-            'http://someserver'
+            'http://someserver',
         )
 
     def test_metadata_directive_copy(self):
         self.parsed_responses = [
             {"ContentLength": "100", "LastModified": "00:00:00Z"},
             {'ETag': '"foo-1"'},
-            {'ETag': '"foo-2"'}
+            {'ETag': '"foo-2"'},
         ]
-        cmdline = ('%s s3://bucket/key.txt s3://bucket/key2.txt'
-                   ' --metadata-directive REPLACE' % self.prefix)
+        cmdline = (
+            '%s s3://bucket/key.txt s3://bucket/key2.txt'
+            ' --metadata-directive REPLACE' % self.prefix
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 3,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 3, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
         self.assertEqual(self.operations_called[2][0].name, 'DeleteObject')
-        self.assertEqual(self.operations_called[1][1]['MetadataDirective'],
-                         'REPLACE')
+        self.assertEqual(
+            self.operations_called[1][1]['MetadataDirective'], 'REPLACE'
+        )
 
     def test_no_metadata_directive_for_non_copy(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket --metadata-directive REPLACE' % \
-            (self.prefix, full_path)
-        self.parsed_responses = \
-            [{'ETag': '"c8afdb36c52cf4727836669019e69222"'}]
+        cmdline = '%s %s s3://bucket --metadata-directive REPLACE' % (
+            self.prefix,
+            full_path,
+        )
+        self.parsed_responses = [
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+        ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 1,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
         self.assertNotIn('MetadataDirective', self.operations_called[0][1])
 
     def test_download_move_with_request_payer(self):
         cmdline = '%s s3://mybucket/mykey %s --request-payer' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
 
         self.parsed_responses = [
             # Response for HeadObject
-            {"ContentLength": 100, "LastModified": "00:00:00Z"},
+            {
+                "ContentLength": 100,
+                "LastModified": "00:00:00Z",
+                "ETag": '"foo-1"',
+            },
             # Response for GetObject
             {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')},
             # Response for DeleteObject
-            {}
+            {},
         ]
 
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('HeadObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'RequestPayer': 'requester',
-                }),
-                ('GetObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'RequestPayer': 'requester',
-                }),
-                ('DeleteObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'RequestPayer': 'requester',
-                })
+                (
+                    'HeadObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'RequestPayer': 'requester',
+                    },
+                ),
+                (
+                    'GetObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'RequestPayer': 'requester',
+                    },
+                ),
+                (
+                    'DeleteObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'RequestPayer': 'requester',
+                    },
+                ),
             ]
         )
 
@@ -147,12 +179,18 @@ class TestMvCommand(BaseS3TransferComman
         self.assert_operations_called(
             [
                 self.head_object_request(
-                    'sourcebucket', 'sourcekey', RequestPayer='requester'),
+                    'sourcebucket', 'sourcekey', RequestPayer='requester'
+                ),
                 self.copy_object_request(
-                    'sourcebucket', 'sourcekey', 'mybucket', 'mykey',
-                    RequestPayer='requester'),
+                    'sourcebucket',
+                    'sourcekey',
+                    'mybucket',
+                    'mykey',
+                    RequestPayer='requester',
+                ),
                 self.delete_object_request(
-                    'sourcebucket', 'sourcekey', RequestPayer='requester')
+                    'sourcebucket', 'sourcekey', RequestPayer='requester'
+                ),
             ]
         )
 
@@ -166,15 +204,14 @@ class TestMvCommand(BaseS3TransferComman
         metadata = {'tag-key': 'tag-value'}
         self.parsed_responses = [
             self.head_object_response(
-                Metadata=metadata,
-                ContentLength=8 * 1024 ** 2
+                Metadata=metadata, ContentLength=8 * 1024**2
             ),
             self.get_object_tagging_response(large_tag_set),
             self.create_mpu_response(upload_id),
             self.upload_part_copy_response(),
             self.complete_mpu_response(),
             self.put_object_tagging_response(),
-            self.delete_object_response()
+            self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
@@ -183,14 +220,19 @@ class TestMvCommand(BaseS3TransferComman
                 self.get_object_tagging_request('sourcebucket', 'sourcekey'),
                 self.create_mpu_request('bucket', 'key', Metadata=metadata),
                 self.upload_part_copy_request(
-                    'sourcebucket', 'sourcekey', 'bucket', 'key', upload_id,
-                    CopySourceRange=mock.ANY, PartNumber=1,
+                    'sourcebucket',
+                    'sourcekey',
+                    'bucket',
+                    'key',
+                    upload_id,
+                    CopySourceRange=mock.ANY,
+                    PartNumber=1,
                 ),
                 self.complete_mpu_request('bucket', 'key', upload_id, 1),
                 self.put_object_tagging_request(
                     'bucket', 'key', large_tag_set
                 ),
-                self.delete_object_request('sourcebucket', 'sourcekey')
+                self.delete_object_request('sourcebucket', 'sourcekey'),
             ]
         )
 
@@ -204,8 +246,7 @@ class TestMvCommand(BaseS3TransferComman
         metadata = {'tag-key': 'tag-value'}
         self.parsed_responses = [
             self.head_object_response(
-                Metadata=metadata,
-                ContentLength=8 * 1024 ** 2
+                Metadata=metadata, ContentLength=8 * 1024**2
             ),
             self.get_object_tagging_response(large_tag_set),
             self.create_mpu_response(upload_id),
@@ -232,14 +273,19 @@ class TestMvCommand(BaseS3TransferComman
                 self.get_object_tagging_request('sourcebucket', 'sourcekey'),
                 self.create_mpu_request('bucket', 'key', Metadata=metadata),
                 self.upload_part_copy_request(
-                    'sourcebucket', 'sourcekey', 'bucket', 'key', upload_id,
-                    CopySourceRange=mock.ANY, PartNumber=1,
+                    'sourcebucket',
+                    'sourcekey',
+                    'bucket',
+                    'key',
+                    upload_id,
+                    CopySourceRange=mock.ANY,
+                    PartNumber=1,
                 ),
                 self.complete_mpu_request('bucket', 'key', upload_id, 1),
                 self.put_object_tagging_request(
                     'bucket', 'key', large_tag_set
                 ),
-                self.delete_object_request('bucket', 'key')
+                self.delete_object_request('bucket', 'key'),
             ]
         )
 
@@ -248,7 +294,9 @@ class TestMvCommand(BaseS3TransferComman
         cmdline = f'{self.prefix} {full_path} s3://bucket/key.txt --checksum-algorithm CRC32'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32')
+        self.assertEqual(
+            self.operations_called[0][1]['ChecksumAlgorithm'], 'CRC32'
+        )
 
     def test_download_with_checksum_mode_crc32(self):
         self.parsed_responses = [
@@ -257,21 +305,26 @@ class TestMvCommand(BaseS3TransferComman
             {
                 'ETag': 'foo-1',
                 'ChecksumCRC32': 'checksum',
-                'Body': BytesIO(b'foo')
+                'Body': BytesIO(b'foo'),
             },
-            self.delete_object_response()
+            self.delete_object_response(),
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumMode'], 'ENABLED')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumMode'], 'ENABLED'
+        )
 
 
 class TestMvWithCRTClient(BaseCRTTransferClientTest):
     def test_upload_move_using_crt_client(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'mv', filename, 's3://bucket/key',
+            's3',
+            'mv',
+            filename,
+            's3://bucket/key',
         ]
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -287,9 +340,7 @@ class TestMvWithCRTClient(BaseCRTTransfe
 
     def test_download_move_using_crt_client(self):
         filename = os.path.join(self.files.rootdir, 'myfile')
-        cmdline = [
-            's3', 'mv', 's3://bucket/key', filename
-        ]
+        cmdline = ['s3', 'mv', 's3://bucket/key', filename]
         self.add_botocore_head_object_response()
         self.add_botocore_delete_object_response()
         result = self.cli_runner.run(cmdline)
@@ -306,9 +357,7 @@ class TestMvWithCRTClient(BaseCRTTransfe
         self.assert_no_remaining_botocore_responses()
 
     def test_does_not_use_crt_client_for_copy_moves(self):
-        cmdline = [
-            's3', 'mv', 's3://bucket/key', 's3://otherbucket/'
-        ]
+        cmdline = ['s3', 'mv', 's3://bucket/key', 's3://otherbucket/']
         self.add_botocore_head_object_response()
         self.add_botocore_copy_object_response()
         self.add_botocore_delete_object_response()
@@ -316,8 +365,8 @@ class TestMvWithCRTClient(BaseCRTTransfe
         self.assertEqual(self.get_crt_make_request_calls(), [])
         self.assert_no_remaining_botocore_responses()
 
-class TestMvCommandWithValidateSameS3Paths(BaseS3TransferCommandTest):
 
+class TestMvCommandWithValidateSameS3Paths(BaseS3TransferCommandTest):
     prefix = 's3 mv '
 
     def assert_validates_cannot_mv_onto_itself(self, cmd):
@@ -331,8 +380,9 @@ class TestMvCommandWithValidateSameS3Pat
             self.delete_object_response(),
         ]
         self.run_cmd(cmd, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 3,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 3, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[1][0].name, 'CopyObject')
         self.assertEqual(self.operations_called[2][0].name, 'DeleteObject')
@@ -347,126 +397,140 @@ class TestMvCommandWithValidateSameS3Pat
         self.assertIn('warning: Provided s3 paths may resolve', stderr)
 
     def test_cant_mv_object_onto_itself_access_point_arn(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key "
-                   "--validate-same-s3-paths")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key "
+            "--validate-same-s3-paths"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_access_point_arn_as_source(self):
-        cmdline = (f"{self.prefix}s3://arn:aws:s3:us-west-2:123456789012:"
-                   "accesspoint/myaccesspoint/key "
-                   "s3://bucket/key "
-                   "--validate-same-s3-paths")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://arn:aws:s3:us-west-2:123456789012:"
+            "accesspoint/myaccesspoint/key "
+            "s3://bucket/key "
+            "--validate-same-s3-paths"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_access_point_arn_with_env_var(self):
         self.environ['AWS_CLI_S3_MV_VALIDATE_SAME_S3_PATHS'] = 'true'
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_access_point_arn_base_key(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/ "
-                   "--validate-same-s3-paths")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/ "
+            "--validate-same-s3-paths"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_access_point_arn_base_prefix(self):
-        cmdline = (f"{self.prefix}s3://bucket/prefix/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/prefix/ "
-                   "--validate-same-s3-paths")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://bucket/prefix/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/prefix/ "
+            "--validate-same-s3-paths"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_access_point_alias(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://myaccesspoint-foobar-s3alias/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://myaccesspoint-foobar-s3alias/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {"Account": "123456789012"},
-            {"Bucket": "bucket"}
+            {"Bucket": "bucket"},
         ]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_cant_mv_object_onto_itself_outpost_access_point_arn(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
-                   "op-foobar/accesspoint/myaccesspoint/key "
-                   "--validate-same-s3-paths")
-        self.parsed_responses = [
-            {"Bucket": "bucket"}
-        ]
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
+            "op-foobar/accesspoint/myaccesspoint/key "
+            "--validate-same-s3-paths"
+        )
+        self.parsed_responses = [{"Bucket": "bucket"}]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_outpost_access_point_alias_raises_error(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://myaccesspoint-foobar--op-s3/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://myaccesspoint-foobar--op-s3/key "
+            "--validate-same-s3-paths"
+        )
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
         self.assertIn("Can't resolve underlying bucket name", stderr)
 
     def test_cant_mv_object_onto_itself_mrap_arn(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {
-                "AccessPoints": [{
-                    "Alias": "foobar.mrap",
-                    "Regions": [
-                        {"Bucket": "differentbucket"},
-                        {"Bucket": "bucket"}
-                    ]
-                }]
+                "AccessPoints": [
+                    {
+                        "Alias": "foobar.mrap",
+                        "Regions": [
+                            {"Bucket": "differentbucket"},
+                            {"Bucket": "bucket"},
+                        ],
+                    }
+                ]
             }
         ]
         self.assert_validates_cannot_mv_onto_itself(cmdline)
 
     def test_get_mrap_buckets_raises_if_alias_not_found(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {
-                "AccessPoints": [{
-                    "Alias": "baz.mrap",
-                    "Regions": [
-                        {"Bucket": "differentbucket"},
-                        {"Bucket": "bucket"}
-                    ]
-                }]
+                "AccessPoints": [
+                    {
+                        "Alias": "baz.mrap",
+                        "Regions": [
+                            {"Bucket": "differentbucket"},
+                            {"Bucket": "bucket"},
+                        ],
+                    }
+                ]
             }
         ]
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
         self.assertEqual(
             "\nCouldn't find multi-region access point with alias foobar.mrap "
             "in account 123456789012\n",
-            stderr
+            stderr,
         )
 
     def test_mv_works_if_access_point_arn_resolves_to_different_bucket(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {"Bucket": "differentbucket"},
             self.head_object_response(),
@@ -474,17 +538,20 @@ class TestMvCommandWithValidateSameS3Pat
             self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 4,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 4, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'GetAccessPoint')
         self.assertEqual(self.operations_called[1][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[2][0].name, 'CopyObject')
         self.assertEqual(self.operations_called[3][0].name, 'DeleteObject')
 
     def test_mv_works_if_access_point_alias_resolves_to_different_bucket(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://myaccesspoint-foobar-s3alias/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://myaccesspoint-foobar-s3alias/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {"Account": "123456789012"},
             {"Bucket": "differentbucket"},
@@ -493,19 +560,26 @@ class TestMvCommandWithValidateSameS3Pat
             self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 5,
-                         self.operations_called)
-        self.assertEqual(self.operations_called[0][0].name, 'GetCallerIdentity')
+        self.assertEqual(
+            len(self.operations_called), 5, self.operations_called
+        )
+        self.assertEqual(
+            self.operations_called[0][0].name, 'GetCallerIdentity'
+        )
         self.assertEqual(self.operations_called[1][0].name, 'GetAccessPoint')
         self.assertEqual(self.operations_called[2][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[3][0].name, 'CopyObject')
         self.assertEqual(self.operations_called[4][0].name, 'DeleteObject')
 
-    def test_mv_works_if_outpost_access_point_arn_resolves_to_different_bucket(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
-                   "op-foobar/accesspoint/myaccesspoint/key "
-                   "--validate-same-s3-paths")
+    def test_mv_works_if_outpost_access_point_arn_resolves_to_different_bucket(
+        self,
+    ):
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
+            "op-foobar/accesspoint/myaccesspoint/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {"Bucket": "differentbucket"},
             self.head_object_response(),
@@ -513,8 +587,9 @@ class TestMvCommandWithValidateSameS3Pat
             self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 4,
-                         self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 4, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'GetAccessPoint')
         self.assertEqual(self.operations_called[1][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[2][0].name, 'CopyObject')
@@ -522,79 +597,102 @@ class TestMvCommandWithValidateSameS3Pat
 
     @requires_crt
     def test_mv_works_if_mrap_arn_resolves_to_different_bucket(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key "
+            "--validate-same-s3-paths"
+        )
         self.parsed_responses = [
             {
-                "AccessPoints": [{
-                    "Alias": "foobar.mrap",
-                    "Regions": [
-                        {"Bucket": "differentbucket"},
-                    ]
-                }]
+                "AccessPoints": [
+                    {
+                        "Alias": "foobar.mrap",
+                        "Regions": [
+                            {"Bucket": "differentbucket"},
+                        ],
+                    }
+                ]
             },
             self.head_object_response(),
             self.copy_object_response(),
             self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 4,
-                         self.operations_called)
-        self.assertEqual(self.operations_called[0][0].name, 'ListMultiRegionAccessPoints')
+        self.assertEqual(
+            len(self.operations_called), 4, self.operations_called
+        )
+        self.assertEqual(
+            self.operations_called[0][0].name, 'ListMultiRegionAccessPoints'
+        )
         self.assertEqual(self.operations_called[1][0].name, 'HeadObject')
         self.assertEqual(self.operations_called[2][0].name, 'CopyObject')
         self.assertEqual(self.operations_called[3][0].name, 'DeleteObject')
 
     def test_skips_validation_if_keys_are_different_accesspoint_arn(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key2 "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key2 "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     def test_skips_validation_if_prefixes_are_different_accesspoint_arn(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/prefix/ "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/prefix/ "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     def test_skips_validation_if_keys_are_different_accesspoint_alias(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://myaccesspoint-foobar-s3alias/key2 "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://myaccesspoint-foobar-s3alias/key2 "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     def test_skips_validation_if_keys_are_different_outpost_arn(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
-                   "op-foobar/accesspoint/myaccesspoint/key2 "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost/"
+            "op-foobar/accesspoint/myaccesspoint/key2 "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     def test_skips_validation_if_keys_are_different_outpost_alias(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://myaccesspoint-foobar--op-s3/key2 "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://myaccesspoint-foobar--op-s3/key2 "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     @requires_crt
     def test_skips_validation_if_keys_are_different_mrap_arn(self):
-        cmdline = (f"{self.prefix} s3://bucket/key "
-                   "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key2 "
-                   "--validate-same-s3-paths")
+        cmdline = (
+            f"{self.prefix} s3://bucket/key "
+            "s3://arn:aws:s3::123456789012:accesspoint/foobar.mrap/key2 "
+            "--validate-same-s3-paths"
+        )
         self.assert_runs_mv_without_validation(cmdline)
 
     def test_raises_warning_if_validation_not_set(self):
-        cmdline = (f"{self.prefix}s3://bucket/key "
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key")
+        cmdline = (
+            f"{self.prefix}s3://bucket/key "
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key"
+        )
         self.assert_raises_warning(cmdline)
 
     def test_raises_warning_if_validation_not_set_source(self):
-        cmdline = (f"{self.prefix}"
-                   "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
-                   "myaccesspoint/key "
-                   "s3://bucket/key")
+        cmdline = (
+            f"{self.prefix}"
+            "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/"
+            "myaccesspoint/key "
+            "s3://bucket/key"
+        )
         self.assert_raises_warning(cmdline)
diff -pruN 2.23.6-1/tests/functional/s3/test_presign_command.py 2.31.35-1/tests/functional/s3/test_presign_command.py
--- 2.23.6-1/tests/functional/s3/test_presign_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_presign_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,14 @@
 import datetime
 
 from botocore.compat import urlsplit
-from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import BaseAWSCommandParamsTest, mock, temporary_file
-from awscli.testutils import create_clidriver
 
+from awscli.clidriver import AWSCLIEntryPoint
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    create_clidriver,
+    mock,
+    temporary_file,
+)
 
 # Values used to fix time.time() and datetime.datetime.utcnow()
 # so we know the exact values of the signatures generated.
@@ -24,18 +28,16 @@ FROZEN_TIMESTAMP = 1471305652
 DEFAULT_EXPIRES = 3600
 FROZEN_TIME = mock.Mock(return_value=FROZEN_TIMESTAMP)
 FROZEN_DATETIME = mock.Mock(
-    return_value=datetime.datetime(2016, 8, 18, 14, 33, 3, 0))
+    return_value=datetime.datetime(2016, 8, 18, 14, 33, 3, 0)
+)
 
 
 class TestPresignCommand(BaseAWSCommandParamsTest):
-
     prefix = 's3 presign '
 
     def enable_addressing_mode_in_config(self, fileobj, mode):
         fileobj.write(
-            "[default]\n"
-            "s3 =\n"
-            "    addressing_style = %s\n" % mode
+            "[default]\n" "s3 =\n" "    addressing_style = %s\n" % mode
         )
         fileobj.flush()
         self.environ['AWS_CONFIG_FILE'] = fileobj.name
@@ -43,11 +45,7 @@ class TestPresignCommand(BaseAWSCommandP
         self.entry_point = AWSCLIEntryPoint(self.driver)
 
     def enable_sigv4_from_config_file(self, fileobj):
-        fileobj.write(
-            "[default]\n"
-            "s3 =\n"
-            "    signature_version = s3v4\n"
-        )
+        fileobj.write("[default]\n" "s3 =\n" "    signature_version = s3v4\n")
         fileobj.flush()
         self.environ['AWS_CONFIG_FILE'] = fileobj.name
         self.driver = create_clidriver()
@@ -84,79 +82,92 @@ class TestPresignCommand(BaseAWSCommandP
 
     def test_generates_a_url(self):
         stdout = self.get_presigned_url_for_cmd(
-            self.prefix + 's3://bucket/key')
+            self.prefix + 's3://bucket/key'
+        )
 
         self.assert_presigned_url_matches(
-            stdout, {
+            stdout,
+            {
                 'hostname': 'bucket.s3.us-east-1.amazonaws.com',
                 'path': '/key',
                 'query_params': {
                     'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                     'X-Amz-Credential': (
                         'access_key%2F20160818%2Fus-east-1'
-                        '%2Fs3%2Faws4_request'),
+                        '%2Fs3%2Faws4_request'
+                    ),
                     'X-Amz-Date': '20160818T143303Z',
                     'X-Amz-Expires': '3600',
                     'X-Amz-Signature': (
                         '1297528058f2c8b89cfa52c6a47d6c54890700a1da2470'
-                        '2b06d53e774c0acc95'),
+                        '2b06d53e774c0acc95'
+                    ),
                     'X-Amz-SignedHeaders': 'host',
-                }
-            }
+                },
+            },
         )
 
     def test_handles_non_dns_compatible_buckets(self):
         stdout = self.get_presigned_url_for_cmd(
-            self.prefix + 's3://bucket.dots/key')
+            self.prefix + 's3://bucket.dots/key'
+        )
 
         self.assert_presigned_url_matches(
-            stdout, {
+            stdout,
+            {
                 'hostname': 's3.us-east-1.amazonaws.com',
                 'path': '/bucket.dots/key',
                 'query_params': {
                     'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                     'X-Amz-Credential': (
                         'access_key%2F20160818%2Fus-east-1'
-                        '%2Fs3%2Faws4_request'),
+                        '%2Fs3%2Faws4_request'
+                    ),
                     'X-Amz-Date': '20160818T143303Z',
                     'X-Amz-Expires': '3600',
                     'X-Amz-Signature': (
                         '5a032639cabfe3db0b4b87ba3b12c29f5e42fe74cbba8'
-                        'a0eb69bfb30c6e2d277'),
+                        'a0eb69bfb30c6e2d277'
+                    ),
                     'X-Amz-SignedHeaders': 'host',
-                }
-            }
+                },
+            },
         )
 
     def test_handles_expires_in(self):
         expires_in = 1000
         stdout = self.get_presigned_url_for_cmd(
-            self.prefix + 's3://bucket/key --expires-in %s' % expires_in)
+            self.prefix + 's3://bucket/key --expires-in %s' % expires_in
+        )
 
         self.assert_presigned_url_matches(
-            stdout, {
+            stdout,
+            {
                 'hostname': 'bucket.s3.us-east-1.amazonaws.com',
                 'path': '/key',
                 'query_params': {
                     'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                     'X-Amz-Credential': (
                         'access_key%2F20160818%2Fus-east-1'
-                        '%2Fs3%2Faws4_request'),
+                        '%2Fs3%2Faws4_request'
+                    ),
                     'X-Amz-Date': '20160818T143303Z',
-                    'X-Amz-Expires': '{}'.format(expires_in),
+                    'X-Amz-Expires': f'{expires_in}',
                     'X-Amz-Signature': (
                         '865fb61b021c3bf406c40d41353f584835fff1f158cf1b'
-                        '3e6ec06260ecbb8937'),
+                        '3e6ec06260ecbb8937'
+                    ),
                     'X-Amz-SignedHeaders': 'host',
-                }
-            }
+                },
+            },
         )
 
     def test_handles_sigv4(self):
         with temporary_file('w') as f:
             self.enable_sigv4_from_config_file(f)
             stdout = self.get_presigned_url_for_cmd(
-                self.prefix + 's3://bucket/key')
+                self.prefix + 's3://bucket/key'
+            )
 
         expected = {
             'hostname': 'bucket.s3.us-east-1.amazonaws.com',
@@ -164,63 +175,69 @@ class TestPresignCommand(BaseAWSCommandP
             'query_params': {
                 'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                 'X-Amz-Credential': (
-                    'access_key%2F20160818%2Fus-east-1'
-                    '%2Fs3%2Faws4_request'),
+                    'access_key%2F20160818%2Fus-east-1' '%2Fs3%2Faws4_request'
+                ),
                 'X-Amz-Date': '20160818T143303Z',
                 'X-Amz-Expires': '3600',
                 'X-Amz-Signature': (
                     '1297528058f2c8b89cfa52c6a47d6c548907'
                     '00a1da24702b06d53e774c0acc95'
                 ),
-                'X-Amz-SignedHeaders': 'host'
-            }
+                'X-Amz-SignedHeaders': 'host',
+            },
         }
         self.assert_presigned_url_matches(stdout, expected)
 
     def test_s3_prefix_not_needed(self):
         # Consistent with the 'ls' command.
-        stdout = self.get_presigned_url_for_cmd(
-            self.prefix + 'bucket/key')
+        stdout = self.get_presigned_url_for_cmd(self.prefix + 'bucket/key')
 
         self.assert_presigned_url_matches(
-            stdout, {
+            stdout,
+            {
                 'hostname': 'bucket.s3.us-east-1.amazonaws.com',
                 'path': '/key',
                 'query_params': {
                     'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                     'X-Amz-Credential': (
                         'access_key%2F20160818%2Fus-east-1'
-                        '%2Fs3%2Faws4_request'),
+                        '%2Fs3%2Faws4_request'
+                    ),
                     'X-Amz-Date': '20160818T143303Z',
                     'X-Amz-Expires': '3600',
                     'X-Amz-Signature': (
                         '1297528058f2c8b89cfa52c6a47d6c54890700a1da2470'
-                        '2b06d53e774c0acc95'),
+                        '2b06d53e774c0acc95'
+                    ),
                     'X-Amz-SignedHeaders': 'host',
-                }
-            }
+                },
+            },
         )
 
     def test_can_support_addressing_mode_config(self):
         with temporary_file('w') as f:
             self.enable_addressing_mode_in_config(f, 'path')
             stdout = self.get_presigned_url_for_cmd(
-                self.prefix + 's3://bucket/key')
+                self.prefix + 's3://bucket/key'
+            )
         self.assert_presigned_url_matches(
-            stdout, {
+            stdout,
+            {
                 'hostname': 's3.us-east-1.amazonaws.com',
                 'path': '/bucket/key',
                 'query_params': {
                     'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
                     'X-Amz-Credential': (
                         'access_key%2F20160818%2Fus-east-1'
-                        '%2Fs3%2Faws4_request'),
+                        '%2Fs3%2Faws4_request'
+                    ),
                     'X-Amz-Date': '20160818T143303Z',
                     'X-Amz-Expires': '3600',
                     'X-Amz-Signature': (
                         'c6dab3560db76aded03e6268338ddb0a6dec00ebc82d6e'
-                        '7abdc305529fcaba74'),
+                        '7abdc305529fcaba74'
+                    ),
                     'X-Amz-SignedHeaders': 'host',
-                }
-            }
+                },
+            },
         )
diff -pruN 2.23.6-1/tests/functional/s3/test_rb_command.py 2.31.35-1/tests/functional/s3/test_rb_command.py
--- 2.23.6-1/tests/functional/s3/test_rb_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_rb_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestRb(BaseAWSCommandParamsTest):
-
     prefix = 's3 rb '
 
     def test_rb(self):
@@ -32,15 +31,19 @@ class TestRb(BaseAWSCommandParamsTest):
 
     def test_rb_force_non_empty_bucket(self):
         command = self.prefix + 's3://bucket --force'
-        self.parsed_responses = [{
-            'Contents': [
-                {
-                    'Key': 'foo',
-                    'Size': 100,
-                    'LastModified': '2016-03-01T23:50:13.000Z'
-                }
-            ]
-        }, {}, {}]
+        self.parsed_responses = [
+            {
+                'Contents': [
+                    {
+                        'Key': 'foo',
+                        'Size': 100,
+                        'LastModified': '2016-03-01T23:50:13.000Z',
+                    }
+                ]
+            },
+            {},
+            {},
+        ]
         self.run_cmd(command)
         self.assertEqual(len(self.operations_called), 3)
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
diff -pruN 2.23.6-1/tests/functional/s3/test_rm_command.py 2.31.35-1/tests/functional/s3/test_rm_command.py
--- 2.23.6-1/tests/functional/s3/test_rm_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_rm_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,8 @@
 from awscrt.s3 import S3RequestType
 
 from tests.functional.s3 import (
-    BaseS3TransferCommandTest, BaseCRTTransferClientTest
+    BaseCRTTransferClientTest,
+    BaseS3TransferCommandTest,
 )
 
 
@@ -25,33 +26,31 @@ class TestRmCommand(BaseS3TransferComman
         self.run_cmd(cmdline, expected_rc=0)
         # The only operation we should have called is DeleteObject.
         self.assertEqual(
-            len(self.operations_called), 1, self.operations_called)
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'DeleteObject')
 
     def test_dryrun_delete(self):
         self.parsed_responses = [self.head_object_response()]
-        cmdline = (
-            f'{self.prefix} s3://bucket/key.txt --dryrun'
-        )
+        cmdline = f'{self.prefix} s3://bucket/key.txt --dryrun'
         stdout, _, _ = self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called([])
-        self.assertIn(
-            '(dryrun) delete: s3://bucket/key.txt',
-            stdout
-        )
+        self.assertIn('(dryrun) delete: s3://bucket/key.txt', stdout)
 
     def test_delete_with_request_payer(self):
         cmdline = '%s s3://mybucket/mykey --request-payer' % self.prefix
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('DeleteObject', {
-                    'Bucket': 'mybucket',
-                    'Key': 'mykey',
-                    'RequestPayer': 'requester'
-                })
+                (
+                    'DeleteObject',
+                    {
+                        'Bucket': 'mybucket',
+                        'Key': 'mykey',
+                        'RequestPayer': 'requester',
+                    },
+                )
             ]
-
         )
 
     def test_recursive_delete_with_requests(self):
@@ -64,19 +63,18 @@ class TestRmCommand(BaseS3TransferComman
         self.assert_operations_called(
             [
                 self.list_objects_request(
-                    'mybucket', RequestPayer='requester'),
+                    'mybucket', RequestPayer='requester'
+                ),
                 self.delete_object_request(
-                    'mybucket', 'mykey', RequestPayer='requester'),
+                    'mybucket', 'mykey', RequestPayer='requester'
+                ),
             ]
-
         )
 
 
 class TestRmWithCRTClient(BaseCRTTransferClientTest):
     def test_delete_using_crt_client(self):
-        cmdline = [
-            's3', 'rm', 's3://bucket/key'
-        ]
+        cmdline = ['s3', 'rm', 's3://bucket/key']
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
         self.assertEqual(len(crt_requests), 1)
@@ -85,13 +83,11 @@ class TestRmWithCRTClient(BaseCRTTransfe
             expected_type=S3RequestType.DEFAULT,
             expected_host=self.get_virtual_s3_host('bucket'),
             expected_path='/key',
-            expected_http_method='DELETE'
+            expected_http_method='DELETE',
         )
 
     def test_recursive_delete_using_crt_client(self):
-        cmdline = [
-            's3', 'rm', 's3://bucket/', '--recursive'
-        ]
+        cmdline = ['s3', 'rm', 's3://bucket/', '--recursive']
         self.add_botocore_list_objects_response(['key1', 'key2'])
         self.run_command(cmdline)
         crt_requests = self.get_crt_make_request_calls()
@@ -101,12 +97,12 @@ class TestRmWithCRTClient(BaseCRTTransfe
             expected_type=S3RequestType.DEFAULT,
             expected_host=self.get_virtual_s3_host('bucket'),
             expected_path='/key1',
-            expected_http_method='DELETE'
+            expected_http_method='DELETE',
         )
         self.assert_crt_make_request_call(
             crt_requests[1],
             expected_type=S3RequestType.DEFAULT,
             expected_host=self.get_virtual_s3_host('bucket'),
             expected_path='/key2',
-            expected_http_method='DELETE'
+            expected_http_method='DELETE',
         )
diff -pruN 2.23.6-1/tests/functional/s3/test_s3_object_lambda.py 2.31.35-1/tests/functional/s3/test_s3_object_lambda.py
--- 2.23.6-1/tests/functional/s3/test_s3_object_lambda.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_s3_object_lambda.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestObjectLambdaHandling(BaseAWSCommandParamsTest):
-
     prefixes = [
         's3 ls s3://{object_lambda_arn}',
         's3 cp s3://{object_lambda_arn} .',
@@ -29,27 +28,33 @@ class TestObjectLambdaHandling(BaseAWSCo
     ]
 
     def test_object_lambda_arn_with_colon_raises_exception(self):
-        object_lambda_arn = ('arn:aws:s3-object-lambda:us-west-2:123456789012:'
-                             'accesspoint:my-accesspoint')
+        object_lambda_arn = (
+            'arn:aws:s3-object-lambda:us-west-2:123456789012:'
+            'accesspoint:my-accesspoint'
+        )
         object_lambda_arn_with_key = '%s/my-key' % object_lambda_arn
         for prefix in self.prefixes:
             cmdline = prefix.format(object_lambda_arn=object_lambda_arn)
             _, stderr, _ = self.run_cmd(cmdline, 252)
             self.assertIn('s3 commands do not support', stderr)
             cmdline = prefix.format(
-                object_lambda_arn=object_lambda_arn_with_key)
+                object_lambda_arn=object_lambda_arn_with_key
+            )
             _, stderr, _ = self.run_cmd(cmdline, 252)
             self.assertIn('s3 commands do not support', stderr)
 
     def test_object_lambda_arn_with_slash_raises_exception(self):
-        object_lambda_arn = ('arn:aws:s3-object-lambda:us-west-2:123456789012:'
-                             'accesspoint/my-accesspoint')
+        object_lambda_arn = (
+            'arn:aws:s3-object-lambda:us-west-2:123456789012:'
+            'accesspoint/my-accesspoint'
+        )
         object_lambda_arn_with_key = '%s/my-key' % object_lambda_arn
         for prefix in self.prefixes:
             cmdline = prefix.format(object_lambda_arn=object_lambda_arn)
             _, stderr, _ = self.run_cmd(cmdline, 252)
             self.assertIn('s3 commands do not support', stderr)
             cmdline = prefix.format(
-                object_lambda_arn=object_lambda_arn_with_key)
+                object_lambda_arn=object_lambda_arn_with_key
+            )
             _, stderr, _ = self.run_cmd(cmdline, 252)
             self.assertIn('s3 commands do not support', stderr)
diff -pruN 2.23.6-1/tests/functional/s3/test_sync_command.py 2.31.35-1/tests/functional/s3/test_sync_command.py
--- 2.23.6-1/tests/functional/s3/test_sync_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_sync_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,36 +13,44 @@
 import os
 
 from awscrt.s3 import S3RequestType
+
 from awscli.compat import BytesIO
 from awscli.customizations.s3.utils import relative_path
-from awscli.testutils import mock, cd
+from awscli.testutils import cd, mock
 from tests.functional.s3 import (
-    BaseS3TransferCommandTest, BaseS3CLIRunnerTest, BaseCRTTransferClientTest
+    BaseCRTTransferClientTest,
+    BaseS3CLIRunnerTest,
+    BaseS3TransferCommandTest,
 )
 
-class TestSyncCommand(BaseS3TransferCommandTest):
 
+class TestSyncCommand(BaseS3TransferCommandTest):
     prefix = 's3 sync '
 
     def test_website_redirect_ignore_paramfile(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % \
-            (self.prefix, self.files.rootdir, 'http://someserver')
+        cmdline = '%s %s s3://bucket/key.txt --website-redirect %s' % (
+            self.prefix,
+            self.files.rootdir,
+            'http://someserver',
+        )
         self.parsed_responses = [
             {"CommonPrefixes": [], "Contents": []},
-            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'},
         ]
         self.run_cmd(cmdline, expected_rc=0)
 
         # The only operations we should have called are ListObjectsV2/PutObject.
-        self.assertEqual(len(self.operations_called), 2, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'PutObject')
         # Make sure that the specified web address is used as opposed to the
         # contents of the web address when uploading the object
         self.assertEqual(
             self.operations_called[1][1]['WebsiteRedirectLocation'],
-            'http://someserver'
+            'http://someserver',
         )
 
     def test_no_recursive_option(self):
@@ -53,9 +61,7 @@ class TestSyncCommand(BaseS3TransferComm
     def test_sync_from_non_existant_directory(self):
         non_existant_directory = os.path.join(self.files.rootdir, 'fakedir')
         cmdline = '%s %s s3://bucket/' % (self.prefix, non_existant_directory)
-        self.parsed_responses = [
-            {"CommonPrefixes": [], "Contents": []}
-        ]
+        self.parsed_responses = [{"CommonPrefixes": [], "Contents": []}]
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=255)
         self.assertIn('does not exist', stderr)
 
@@ -64,71 +70,100 @@ class TestSyncCommand(BaseS3TransferComm
         non_existant_directory = os.path.join(self.files.rootdir, 'fakedir')
         cmdline = '%s s3://bucket/ %s' % (self.prefix, non_existant_directory)
         self.parsed_responses = [
-            {"CommonPrefixes": [], "Contents": [
-                {"Key": key, "Size": 3,
-                 "LastModified": "2014-01-09T20:45:49.000Z"}]},
-            {'ETag': '"c8afdb36c52cf4727836669019e69222-"',
-             'Body': BytesIO(b'foo')}
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": key,
+                        "Size": 3,
+                        "LastModified": "2014-01-09T20:45:49.000Z",
+                        "ETag": '"c8afdb36c52cf4727836669019e69222-"',
+                    }
+                ],
+            },
+            {
+                'ETag': '"c8afdb36c52cf4727836669019e69222-"',
+                'Body': BytesIO(b'foo'),
+            },
         ]
         self.run_cmd(cmdline, expected_rc=0)
         # Make sure the file now exists.
         self.assertTrue(
-            os.path.exists(os.path.join(non_existant_directory, key)))
+            os.path.exists(os.path.join(non_existant_directory, key))
+        )
 
     def test_dryrun_sync(self):
         self.parsed_responses = [
             self.list_objects_response([]),
         ]
         full_path = self.files.create_file('file.txt', 'mycontent')
-        cmdline = (
-            f'{self.prefix} {self.files.rootdir} s3://bucket/ --dryrun'
-        )
+        cmdline = f'{self.prefix} {self.files.rootdir} s3://bucket/ --dryrun'
         stdout, _, _ = self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
-                ('ListObjectsV2', {
-                    'Bucket': 'bucket',
-                    'Prefix': '',
-                }),
+                (
+                    'ListObjectsV2',
+                    {
+                        'Bucket': 'bucket',
+                        'Prefix': '',
+                    },
+                ),
             ]
         )
         self.assertIn(
             f'(dryrun) upload: {relative_path(full_path)} to '
             f's3://bucket/file.txt',
-            stdout
+            stdout,
         )
 
     def test_glacier_sync_with_force_glacier(self):
         self.parsed_responses = [
             {
                 'Contents': [
-                    {'Key': 'foo/bar.txt', 'ContentLength': '100',
-                     'LastModified': '00:00:00Z',
-                     'StorageClass': 'GLACIER',
-                     'Size': 100},
+                    {
+                        'Key': 'foo/bar.txt',
+                        'ContentLength': '100',
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'GLACIER',
+                        'Size': 100,
+                        'ETag': '"foo-1"',
+                    },
                 ],
-                'CommonPrefixes': []
+                'CommonPrefixes': [],
             },
             {'ETag': '"foo-1"', 'Body': BytesIO(b'foo')},
         ]
         cmdline = '%s s3://bucket/foo %s --force-glacier-transfer' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(len(self.operations_called), 2, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
 
     def test_handles_glacier_incompatible_operations(self):
         self.parsed_responses = [
-            {'Contents': [
-                {'Key': 'foo', 'Size': 100,
-                 'LastModified': '00:00:00Z', 'StorageClass': 'GLACIER'},
-                {'Key': 'bar', 'Size': 100,
-                 'LastModified': '00:00:00Z', 'StorageClass': 'DEEP_ARCHIVE'}
-            ]}
+            {
+                'Contents': [
+                    {
+                        'Key': 'foo',
+                        'Size': 100,
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'GLACIER',
+                    },
+                    {
+                        'Key': 'bar',
+                        'Size': 100,
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'DEEP_ARCHIVE',
+                    },
+                ]
+            }
         ]
-        cmdline = '%s s3://bucket/ %s' % (
-            self.prefix, self.files.rootdir)
+        cmdline = '%s s3://bucket/ %s' % (self.prefix, self.files.rootdir)
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=2)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier and glacier
@@ -141,15 +176,27 @@ class TestSyncCommand(BaseS3TransferComm
 
     def test_turn_off_glacier_warnings(self):
         self.parsed_responses = [
-            {'Contents': [
-                {'Key': 'foo', 'Size': 100,
-                 'LastModified': '00:00:00Z', 'StorageClass': 'GLACIER'},
-                {'Key': 'bar', 'Size': 100,
-                 'LastModified': '00:00:00Z', 'StorageClass': 'DEEP_ARCHIVE'}
-            ]}
+            {
+                'Contents': [
+                    {
+                        'Key': 'foo',
+                        'Size': 100,
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'GLACIER',
+                    },
+                    {
+                        'Key': 'bar',
+                        'Size': 100,
+                        'LastModified': '00:00:00Z',
+                        'StorageClass': 'DEEP_ARCHIVE',
+                    },
+                ]
+            }
         ]
         cmdline = '%s s3://bucket/ %s --ignore-glacier-warnings' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=0)
         # There should not have been a download attempted because the
         # operation was skipped because it is glacier incompatible.
@@ -160,39 +207,47 @@ class TestSyncCommand(BaseS3TransferComm
     def test_warning_on_invalid_timestamp(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
 
-        cmdline = '%s %s s3://bucket/key.txt' % \
-                  (self.prefix, self.files.rootdir)
+        cmdline = '%s %s s3://bucket/key.txt' % (
+            self.prefix,
+            self.files.rootdir,
+        )
         self.parsed_responses = [
             {"CommonPrefixes": [], "Contents": []},
-            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'},
         ]
         # Patch get_file_stat to return a value indicating that an invalid
         # timestamp was loaded. It is impossible to set an invalid timestamp
         # on all OSes so it has to be patched.
         # TODO: find another method to test this behavior without patching.
         with mock.patch(
-                'awscli.customizations.s3.filegenerator.get_file_stat',
-                return_value=(None, None)
+            'awscli.customizations.s3.filegenerator.get_file_stat',
+            return_value=(None, None),
         ):
             self.run_cmd(cmdline, expected_rc=2)
 
         # We should still have put the object
-        self.assertEqual(len(self.operations_called), 2, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 2, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'PutObject')
 
     def test_sync_with_delete_on_downloads(self):
         full_path = self.files.create_file('foo.txt', 'mycontent')
         cmdline = '%s s3://bucket %s --delete' % (
-            self.prefix, self.files.rootdir)
+            self.prefix,
+            self.files.rootdir,
+        )
         self.parsed_responses = [
             {"CommonPrefixes": [], "Contents": []},
-            {'ETag': '"c8afdb36c52cf4727836669019e69222"'}
+            {'ETag': '"c8afdb36c52cf4727836669019e69222"'},
         ]
         self.run_cmd(cmdline, expected_rc=0)
 
         # The only operations we should have called are ListObjectsV2.
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
 
         self.assertFalse(os.path.exists(full_path))
@@ -203,10 +258,11 @@ class TestSyncCommand(BaseS3TransferComm
     # the behaviour should be the same: skip the file and emit a warning.
     #
     # This test covers the case where a ValueError is emitted.
-    def test_sync_skips_over_files_deleted_between_listing_and_transfer_valueerror(self):
+    def test_sync_skips_over_files_deleted_between_listing_and_transfer_valueerror(
+        self,
+    ):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket/' % (
-            self.prefix, self.files.rootdir)
+        cmdline = '%s %s s3://bucket/' % (self.prefix, self.files.rootdir)
 
         # FileGenerator.list_files should skip over files that cause an
         # IOError to be raised because they are missing when we try to
@@ -215,22 +271,26 @@ class TestSyncCommand(BaseS3TransferComm
         def side_effect(_):
             os.remove(full_path)
             raise ValueError()
+
         with mock.patch(
-                'awscli.customizations.s3.filegenerator.get_file_stat',
-                side_effect=side_effect
-                ):
+            'awscli.customizations.s3.filegenerator.get_file_stat',
+            side_effect=side_effect,
+        ):
             self.run_cmd(cmdline, expected_rc=2)
 
         # We should not call PutObject because the file was deleted
         # before we could transfer it
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
 
     # This test covers the case where an OSError is emitted.
-    def test_sync_skips_over_files_deleted_between_listing_and_transfer_oserror(self):
+    def test_sync_skips_over_files_deleted_between_listing_and_transfer_oserror(
+        self,
+    ):
         full_path = self.files.create_file('foo.txt', 'mycontent')
-        cmdline = '%s %s s3://bucket/' % (
-            self.prefix, self.files.rootdir)
+        cmdline = '%s %s s3://bucket/' % (self.prefix, self.files.rootdir)
 
         # FileGenerator.list_files should skip over files that cause an
         # OSError to be raised because they are missing when we try to
@@ -238,20 +298,24 @@ class TestSyncCommand(BaseS3TransferComm
         def side_effect(_):
             os.remove(full_path)
             raise OSError()
+
         with mock.patch(
-                'awscli.customizations.s3.filegenerator.get_file_stat',
-                side_effect=side_effect
-                ):
+            'awscli.customizations.s3.filegenerator.get_file_stat',
+            side_effect=side_effect,
+        ):
             self.run_cmd(cmdline, expected_rc=2)
 
         # We should not call PutObject because the file was deleted
         # before we could transfer it
-        self.assertEqual(len(self.operations_called), 1, self.operations_called)
+        self.assertEqual(
+            len(self.operations_called), 1, self.operations_called
+        )
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
 
     def test_request_payer(self):
         cmdline = '%s s3://sourcebucket/ s3://mybucket --request-payer' % (
-            self.prefix)
+            self.prefix
+        )
         self.parsed_responses = [
             # Response for ListObjects on source bucket
             self.list_objects_response(['mykey']),
@@ -263,12 +327,18 @@ class TestSyncCommand(BaseS3TransferComm
         self.assert_operations_called(
             [
                 self.list_objects_request(
-                    'sourcebucket', RequestPayer='requester'),
+                    'sourcebucket', RequestPayer='requester'
+                ),
                 self.list_objects_request(
-                    'mybucket', RequestPayer='requester'),
+                    'mybucket', RequestPayer='requester'
+                ),
                 self.copy_object_request(
-                    'sourcebucket', 'mykey', 'mybucket', 'mykey',
-                    RequestPayer='requester')
+                    'sourcebucket',
+                    'mykey',
+                    'mybucket',
+                    'mykey',
+                    RequestPayer='requester',
+                ),
             ]
         )
 
@@ -281,17 +351,20 @@ class TestSyncCommand(BaseS3TransferComm
             self.list_objects_response([]),
             # Response for ListObjects on destination bucket
             self.list_objects_response(['key-to-delete']),
-            self.delete_object_response()
+            self.delete_object_response(),
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
             [
                 self.list_objects_request(
-                    'sourcebucket', RequestPayer='requester'),
+                    'sourcebucket', RequestPayer='requester'
+                ),
                 self.list_objects_request(
-                    'mybucket', RequestPayer='requester'),
+                    'mybucket', RequestPayer='requester'
+                ),
                 self.delete_object_request(
-                    'mybucket', 'key-to-delete', RequestPayer='requester'),
+                    'mybucket', 'key-to-delete', RequestPayer='requester'
+                ),
             ]
         )
 
@@ -310,7 +383,7 @@ class TestSyncCommand(BaseS3TransferComm
         self.assert_operations_called(
             [
                 self.list_objects_request(accesspoint_arn),
-                self.get_object_request(accesspoint_arn, 'mykey')
+                self.get_object_request(accesspoint_arn, 'mykey'),
             ]
         )
 
@@ -323,7 +396,7 @@ class TestSyncCommand(BaseS3TransferComm
         large_tag_set = {'tag-key': 'val' * 3000}
         metadata = {'tag-key': 'tag-value'}
         self.parsed_responses = [
-            self.list_objects_response(keys=['key'], Size=8 * 1024 ** 2),
+            self.list_objects_response(keys=['key'], Size=8 * 1024**2),
             self.list_objects_response(keys=[]),
             self.head_object_response(
                 Metadata=metadata,
@@ -343,8 +416,13 @@ class TestSyncCommand(BaseS3TransferComm
                 self.get_object_tagging_request('sourcebucket', 'key'),
                 self.create_mpu_request('bucket', 'key', Metadata=metadata),
                 self.upload_part_copy_request(
-                    'sourcebucket', 'key', 'bucket', 'key', upload_id,
-                    CopySourceRange=mock.ANY, PartNumber=1,
+                    'sourcebucket',
+                    'key',
+                    'bucket',
+                    'key',
+                    upload_id,
+                    CopySourceRange=mock.ANY,
+                    PartNumber=1,
                 ),
                 self.complete_mpu_request('bucket', 'key', upload_id, 1),
                 self.put_object_tagging_request(
@@ -358,7 +436,9 @@ class TestSyncCommand(BaseS3TransferComm
         cmdline = f'{self.prefix} {self.files.rootdir} s3://bucket/ --checksum-algorithm SHA1'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumAlgorithm'], 'SHA1')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumAlgorithm'], 'SHA1'
+        )
 
     def test_copy_with_checksum_algorithm_update_sha1(self):
         cmdline = f'{self.prefix} s3://src-bucket/ s3://dest-bucket/ --checksum-algorithm SHA1'
@@ -370,17 +450,15 @@ class TestSyncCommand(BaseS3TransferComm
                         'Key': 'mykey',
                         'LastModified': '00:00:00Z',
                         'Size': 100,
-                        'ChecksumAlgorithm': 'SHA1'
+                        'ChecksumAlgorithm': 'SHA1',
                     }
                 ],
-                'CommonPrefixes': []
+                'CommonPrefixes': [],
             },
             # Response for ListObjects on destination bucket
             self.list_objects_response([]),
             # Response for CopyObject
-            {
-                'ChecksumSHA1': 'sha1-checksum'
-            }
+            {'ChecksumSHA1': 'sha1-checksum'},
         ]
         self.run_cmd(cmdline, expected_rc=0)
         self.assert_operations_called(
@@ -388,16 +466,14 @@ class TestSyncCommand(BaseS3TransferComm
                 self.list_objects_request('src-bucket'),
                 self.list_objects_request('dest-bucket'),
                 (
-                    'CopyObject', {
-                        'CopySource': {
-                            'Bucket': 'src-bucket',
-                            'Key': 'mykey'
-                        },
+                    'CopyObject',
+                    {
+                        'CopySource': {'Bucket': 'src-bucket', 'Key': 'mykey'},
                         'Bucket': 'dest-bucket',
                         'Key': 'mykey',
-                        'ChecksumAlgorithm': 'SHA1'
-                    }
-                )
+                        'ChecksumAlgorithm': 'SHA1',
+                    },
+                ),
             ]
         )
 
@@ -406,7 +482,9 @@ class TestSyncCommand(BaseS3TransferComm
         cmdline = f'{self.prefix} {self.files.rootdir} s3://bucket/ --checksum-algorithm SHA256'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[1][0].name, 'PutObject')
-        self.assertEqual(self.operations_called[1][1]['ChecksumAlgorithm'], 'SHA256')
+        self.assertEqual(
+            self.operations_called[1][1]['ChecksumAlgorithm'], 'SHA256'
+        )
 
     def test_download_with_checksum_mode_sha1(self):
         self.parsed_responses = [
@@ -415,14 +493,16 @@ class TestSyncCommand(BaseS3TransferComm
             {
                 'ETag': 'foo-1',
                 'ChecksumSHA1': 'checksum',
-                'Body': BytesIO(b'foo')
-            }
+                'Body': BytesIO(b'foo'),
+            },
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertIn(('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items())
+        self.assertIn(
+            ('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items()
+        )
 
     def test_download_with_checksum_mode_sha256(self):
         self.parsed_responses = [
@@ -431,14 +511,16 @@ class TestSyncCommand(BaseS3TransferComm
             {
                 'ETag': 'foo-1',
                 'ChecksumSHA256': 'checksum',
-                'Body': BytesIO(b'foo')
-            }
+                'Body': BytesIO(b'foo'),
+            },
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertIn(('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items())
+        self.assertIn(
+            ('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items()
+        )
 
     def test_download_with_checksum_mode_crc64nvme(self):
         self.parsed_responses = [
@@ -447,22 +529,30 @@ class TestSyncCommand(BaseS3TransferComm
             {
                 'ETag': 'foo-1',
                 'ChecksumCRC64NVME': 'checksum',
-                'Body': BytesIO(b'foo')
-            }
+                'Body': BytesIO(b'foo'),
+            },
         ]
         cmdline = f'{self.prefix} s3://bucket/foo {self.files.rootdir} --checksum-mode ENABLED'
         self.run_cmd(cmdline, expected_rc=0)
         self.assertEqual(self.operations_called[0][0].name, 'ListObjectsV2')
         self.assertEqual(self.operations_called[1][0].name, 'GetObject')
-        self.assertIn(('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items())
+        self.assertIn(
+            ('ChecksumMode', 'ENABLED'), self.operations_called[1][1].items()
+        )
 
 
 class TestSyncSourceRegion(BaseS3CLIRunnerTest):
     def test_respects_source_region(self):
         source_region = 'af-south-1'
         cmdline = [
-            's3', 'sync', 's3://sourcebucket/', 's3://bucket/',
-            '--region', self.region, '--source-region', source_region
+            's3',
+            'sync',
+            's3://sourcebucket/',
+            's3://bucket/',
+            '--region',
+            self.region,
+            '--source-region',
+            source_region,
         ]
         self.add_botocore_list_objects_response(['key'])
         self.add_botocore_list_objects_response([])
@@ -472,13 +562,19 @@ class TestSyncSourceRegion(BaseS3CLIRunn
         self.assert_operations_to_endpoints(
             cli_runner_result=result,
             expected_operations_to_endpoints=[
-                ('ListObjectsV2',
-                 self.get_virtual_s3_host('sourcebucket', source_region)),
-                ('ListObjectsV2',
-                 self.get_virtual_s3_host('bucket', self.region)),
-                ('CopyObject',
-                 self.get_virtual_s3_host('bucket', self.region))
-            ]
+                (
+                    'ListObjectsV2',
+                    self.get_virtual_s3_host('sourcebucket', source_region),
+                ),
+                (
+                    'ListObjectsV2',
+                    self.get_virtual_s3_host('bucket', self.region),
+                ),
+                (
+                    'CopyObject',
+                    self.get_virtual_s3_host('bucket', self.region),
+                ),
+            ],
         )
 
 
@@ -486,7 +582,10 @@ class TestSyncWithCRTClient(BaseCRTTrans
     def test_upload_sync_using_crt_client(self):
         filename = self.files.create_file('myfile', 'mycontent')
         cmdline = [
-            's3', 'sync', self.files.rootdir, 's3://bucket/',
+            's3',
+            'sync',
+            self.files.rootdir,
+            's3://bucket/',
         ]
         self.add_botocore_list_objects_response([])
         self.run_command(cmdline)
@@ -502,7 +601,10 @@ class TestSyncWithCRTClient(BaseCRTTrans
 
     def test_download_sync_using_crt_client(self):
         cmdline = [
-            's3', 'sync', 's3://bucket/', self.files.rootdir,
+            's3',
+            'sync',
+            's3://bucket/',
+            self.files.rootdir,
         ]
         self.add_botocore_list_objects_response(['key'])
         self.run_command(cmdline)
@@ -519,7 +621,11 @@ class TestSyncWithCRTClient(BaseCRTTrans
     def test_upload_sync_with_delete_using_crt_client(self):
         filename = self.files.create_file('a-file', 'mycontent')
         cmdline = [
-            's3', 'sync', self.files.rootdir, 's3://bucket/', '--delete'
+            's3',
+            'sync',
+            self.files.rootdir,
+            's3://bucket/',
+            '--delete',
         ]
         self.add_botocore_list_objects_response(['delete-this'])
         self.run_command(cmdline)
@@ -537,13 +643,17 @@ class TestSyncWithCRTClient(BaseCRTTrans
             expected_type=S3RequestType.DEFAULT,
             expected_host=self.get_virtual_s3_host('bucket'),
             expected_path='/delete-this',
-            expected_http_method='DELETE'
+            expected_http_method='DELETE',
         )
 
     def test_download_sync_with_delete_using_crt_client(self):
         self.files.create_file('delete-this', 'content')
         cmdline = [
-            's3', 'sync', 's3://bucket/', self.files.rootdir, '--delete'
+            's3',
+            'sync',
+            's3://bucket/',
+            self.files.rootdir,
+            '--delete',
         ]
         self.add_botocore_list_objects_response(['key'])
         self.run_command(cmdline)
@@ -559,9 +669,7 @@ class TestSyncWithCRTClient(BaseCRTTrans
         self.assertFalse(os.path.exists('delete-this'))
 
     def test_does_not_use_crt_client_for_copy_syncs(self):
-        cmdline = [
-            's3', 'sync', 's3://bucket/', 's3://otherbucket/'
-        ]
+        cmdline = ['s3', 'sync', 's3://bucket/', 's3://otherbucket/']
         self.add_botocore_list_objects_response(['key'])
         self.add_botocore_list_objects_response([])
         self.add_botocore_copy_object_response()
@@ -569,34 +677,58 @@ class TestSyncWithCRTClient(BaseCRTTrans
         self.assertEqual(self.get_crt_make_request_calls(), [])
         self.assert_no_remaining_botocore_responses()
 
+
 class TestSyncCommandWithS3Express(BaseS3TransferCommandTest):
     prefix = 's3 sync '
 
     def test_incompatible_with_sync_upload(self):
-        cmdline = '%s %s s3://testdirectorybucket--usw2-az1--x-s3/' % (self.prefix, self.files.rootdir)
+        cmdline = '%s %s s3://testdirectorybucket--usw2-az1--x-s3/' % (
+            self.prefix,
+            self.files.rootdir,
+        )
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
-        self.assertIn('Cannot use sync command with a directory bucket.', stderr)
+        self.assertIn(
+            'Cannot use sync command with a directory bucket.', stderr
+        )
 
     def test_incompatible_with_sync_download(self):
-        cmdline = '%s s3://testdirectorybucket--usw2-az1--x-s3/ %s' % (self.prefix, self.files.rootdir)
+        cmdline = '%s s3://testdirectorybucket--usw2-az1--x-s3/ %s' % (
+            self.prefix,
+            self.files.rootdir,
+        )
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
-        self.assertIn('Cannot use sync command with a directory bucket.', stderr)
+        self.assertIn(
+            'Cannot use sync command with a directory bucket.', stderr
+        )
 
     def test_incompatible_with_sync_copy(self):
-        cmdline = '%s s3://bucket/ s3://testdirectorybucket--usw2-az1--x-s3/' % self.prefix
+        cmdline = (
+            '%s s3://bucket/ s3://testdirectorybucket--usw2-az1--x-s3/'
+            % self.prefix
+        )
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
-        self.assertIn('Cannot use sync command with a directory bucket.', stderr)
+        self.assertIn(
+            'Cannot use sync command with a directory bucket.', stderr
+        )
 
     def test_incompatible_with_sync_with_delete(self):
-        cmdline = '%s s3://bucket/ s3://testdirectorybucket--usw2-az1--x-s3/ --delete' % self.prefix
+        cmdline = (
+            '%s s3://bucket/ s3://testdirectorybucket--usw2-az1--x-s3/ --delete'
+            % self.prefix
+        )
         stderr = self.run_cmd(cmdline, expected_rc=252)[1]
-        self.assertIn('Cannot use sync command with a directory bucket.', stderr)
+        self.assertIn(
+            'Cannot use sync command with a directory bucket.', stderr
+        )
 
-    def test_compatible_with_sync_with_local_directory_like_directory_bucket(self):
-        self.parsed_responses = [
-            {'Contents': []}
-        ]
-        cmdline = '%s s3://bucket/ testdirectorybucket--usw2-az1--x-s3/' % self.prefix
+    def test_compatible_with_sync_with_local_directory_like_directory_bucket(
+        self,
+    ):
+        self.parsed_responses = [{'Contents': []}]
+        cmdline = (
+            '%s s3://bucket/ testdirectorybucket--usw2-az1--x-s3/'
+            % self.prefix
+        )
         with cd(self.files.rootdir):
             _, stderr, _ = self.run_cmd(cmdline)
         # Just asserting that command validated and made an API call
diff -pruN 2.23.6-1/tests/functional/s3/test_website_command.py 2.31.35-1/tests/functional/s3/test_website_command.py
--- 2.23.6-1/tests/functional/s3/test_website_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3/test_website_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,28 +11,31 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import re
 
+from awscli.testutils import BaseAWSCommandParamsTest
 
-class TestWebsiteCommand(BaseAWSCommandParamsTest):
 
+class TestWebsiteCommand(BaseAWSCommandParamsTest):
     prefix = 's3 website '
 
     def test_index_document(self):
         cmdline = self.prefix + 's3://mybucket --index-document index.html'
         result = {
-            'WebsiteConfiguration':
-                {'IndexDocument': {'Suffix': 'index.html'}},
-                 'Bucket': u'mybucket'}
+            'WebsiteConfiguration': {
+                'IndexDocument': {'Suffix': 'index.html'}
+            },
+            'Bucket': 'mybucket',
+        }
 
         self.assert_params_for_cmd(cmdline, result)
 
     def test_error_document(self):
         cmdline = self.prefix + 's3://mybucket --error-document mykey'
         result = {
-            'WebsiteConfiguration': {
-                'ErrorDocument': {'Key': 'mykey'}}, 'Bucket': u'mybucket'}
+            'WebsiteConfiguration': {'ErrorDocument': {'Key': 'mykey'}},
+            'Bucket': 'mybucket',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/s3api/test_get_object.py 2.31.35-1/tests/functional/s3api/test_get_object.py
--- 2.23.6-1/tests/functional/s3api/test_get_object.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_get_object.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,16 +11,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.compat import StringIO
 import os
 import re
 
 import awscli.clidriver
+from awscli.compat import StringIO
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestGetObject(BaseAWSCommandParamsTest):
-
     prefix = 's3api get-object'
 
     def setUp(self):
@@ -37,9 +36,10 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' --key mykey'
         cmdline += ' outfile'
         self.addCleanup(self.remove_file_if_exists, 'outfile')
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'ChecksumMode': 'ENABLED',
-                                              'Key': 'mykey'})
+        self.assert_params_for_cmd(
+            cmdline,
+            {'Bucket': 'mybucket', 'ChecksumMode': 'ENABLED', 'Key': 'mykey'},
+        )
 
     def test_range(self):
         cmdline = self.prefix
@@ -48,10 +48,15 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' --range bytes=0-499'
         cmdline += ' outfile'
         self.addCleanup(self.remove_file_if_exists, 'outfile')
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                              'ChecksumMode': 'ENABLED',
-                                              'Key': 'mykey',
-                                              'Range': 'bytes=0-499'})
+        self.assert_params_for_cmd(
+            cmdline,
+            {
+                'Bucket': 'mybucket',
+                'ChecksumMode': 'ENABLED',
+                'Key': 'mykey',
+                'Range': 'bytes=0-499',
+            },
+        )
 
     def test_response_headers(self):
         cmdline = self.prefix
@@ -62,13 +67,14 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' outfile'
         self.addCleanup(self.remove_file_if_exists, 'outfile')
         self.assert_params_for_cmd(
-            cmdline, {
+            cmdline,
+            {
                 'Bucket': 'mybucket',
                 'ChecksumMode': 'ENABLED',
                 'Key': 'mykey',
                 'ResponseCacheControl': 'No-cache',
-                'ResponseContentEncoding': 'x-gzip'
-            }
+                'ResponseContentEncoding': 'x-gzip',
+            },
         )
 
     def test_streaming_output_arg_with_error_response(self):
@@ -77,9 +83,7 @@ class TestGetObject(BaseAWSCommandParams
         # it would propogate a KeyError so we want to ensure
         # this case is handled.
         self.parsed_response = {
-            'Error': {
-                'Code': 'AuthError', 'Message': 'SomeError'
-            }
+            'Error': {'Code': 'AuthError', 'Message': 'SomeError'}
         }
         cmdline = self.prefix
         cmdline += ' --bucket mybucket'
@@ -87,7 +91,9 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' outfile'
         self.addCleanup(self.remove_file_if_exists, 'outfile')
         self.assert_params_for_cmd(
-            cmdline, {'Bucket': 'mybucket', 'ChecksumMode': 'ENABLED', 'Key': 'mykey'})
+            cmdline,
+            {'Bucket': 'mybucket', 'ChecksumMode': 'ENABLED', 'Key': 'mykey'},
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/functional/s3api/test_list_objects.py 2.31.35-1/tests/functional/s3api/test_list_objects.py
--- 2.23.6-1/tests/functional/s3api/test_list_objects.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_list_objects.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import base64
 import json
 
+from awscli.testutils import BaseAWSCommandParamsTest
 
-class TestListObjects(BaseAWSCommandParamsTest):
 
+class TestListObjects(BaseAWSCommandParamsTest):
     prefix = 's3api list-objects'
 
     def setUp(self):
@@ -27,8 +27,9 @@ class TestListObjects(BaseAWSCommandPara
     def test_simple(self):
         cmdline = self.prefix
         cmdline += ' --bucket mybucket'
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline, {'Bucket': 'mybucket', 'EncodingType': 'url'}
+        )
 
     def test_max_items(self):
         cmdline = self.prefix
@@ -36,8 +37,9 @@ class TestListObjects(BaseAWSCommandPara
         # The max-items is a customization and therefore won't
         # show up in the result params.
         cmdline += ' --max-items 100'
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline, {'Bucket': 'mybucket', 'EncodingType': 'url'}
+        )
 
     def test_page_size(self):
         cmdline = self.prefix
@@ -45,9 +47,10 @@ class TestListObjects(BaseAWSCommandPara
         # The max-items is a customization and therefore won't
         # show up in the result params.
         cmdline += ' --page-size 100'
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'MaxKeys': 100,
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline,
+            {'Bucket': 'mybucket', 'MaxKeys': 100, 'EncodingType': 'url'},
+        )
 
     def test_starting_token(self):
         # We don't need to test this in depth because botocore
@@ -59,15 +62,17 @@ class TestListObjects(BaseAWSCommandPara
         token = base64.b64encode(json.dumps(token).encode('utf-8'))
         token = token.decode('utf-8')
         cmdline += ' --starting-token %s' % token
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'Marker': 'foo',
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline,
+            {'Bucket': 'mybucket', 'Marker': 'foo', 'EncodingType': 'url'},
+        )
 
     def test_no_paginate(self):
         cmdline = self.prefix
         cmdline += ' --bucket mybucket --no-paginate'
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline, {'Bucket': 'mybucket', 'EncodingType': 'url'}
+        )
 
     def test_max_keys_can_be_specified(self):
         cmdline = self.prefix
@@ -75,18 +80,22 @@ class TestListObjects(BaseAWSCommandPara
         # but for back-compat reasons if a user specifies this,
         # we will automatically see this and turn auto-pagination off.
         cmdline += ' --bucket mybucket --max-keys 1'
-        self.assert_params_for_cmd(cmdline, {'Bucket': 'mybucket',
-                                             'MaxKeys': 1,
-                                             'EncodingType': 'url'})
+        self.assert_params_for_cmd(
+            cmdline,
+            {'Bucket': 'mybucket', 'MaxKeys': 1, 'EncodingType': 'url'},
+        )
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(self.operations_called[0][0].name, 'ListObjects')
 
     def test_pagination_params_cannot_be_supplied_with_no_paginate(self):
-        cmdline = self.prefix + ' --bucket mybucket --no-paginate ' \
-                                '--max-items 100'
+        cmdline = (
+            self.prefix + ' --bucket mybucket --no-paginate ' '--max-items 100'
+        )
         self.assert_params_for_cmd(
-            cmdline, expected_rc=252,
+            cmdline,
+            expected_rc=252,
             stderr_contains="Cannot specify "
-                            "--no-paginate along with pagination arguments: "
-                            "--max-items")
+            "--no-paginate along with pagination arguments: "
+            "--max-items",
+        )
diff -pruN 2.23.6-1/tests/functional/s3api/test_put_bucket_tagging.py 2.31.35-1/tests/functional/s3api/test_put_bucket_tagging.py
--- 2.23.6-1/tests/functional/s3api/test_put_bucket_tagging.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_put_bucket_tagging.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import re
 import copy
+import re
 
 from awscli.testutils import BaseAWSCommandParamsTest
 
-
 # file is gone in python3, so instead IOBase must be used.
 # Given this test module is the only place that cares about
 # this type check, we do the check directly in this test module.
@@ -24,6 +23,7 @@ try:
     file_type = file
 except NameError:
     import io
+
     file_type = io.IOBase
 
 
@@ -31,7 +31,6 @@ TAGSET = """{"TagSet":[{"Key":"key1","Va
 
 
 class TestPutBucketTagging(BaseAWSCommandParamsTest):
-
     prefix = 's3api put-bucket-tagging'
 
     def setUp(self):
@@ -49,7 +48,7 @@ class TestPutBucketTagging(BaseAWSComman
                     {'Key': 'key1', 'Value': 'value1'},
                     {'Key': 'key2', 'Value': 'value2'},
                 ]
-            }
+            },
         }
         self.assert_params_for_cmd(cmdline, expected)
 
diff -pruN 2.23.6-1/tests/functional/s3api/test_put_object.py 2.31.35-1/tests/functional/s3api/test_put_object.py
--- 2.23.6-1/tests/functional/s3api/test_put_object.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_put_object.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import copy
 import os
 import re
-import copy
-
-from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 # file is gone in python3, so instead IOBase must be used.
 # Given this test module is the only place that cares about
@@ -26,18 +25,19 @@ try:
     file_type = file
 except NameError:
     import io
+
     file_type = io.IOBase
 
 
 class TestPutObject(BaseAWSCommandParamsTest):
-
     maxDiff = None
     prefix = 's3api put-object'
 
     def setUp(self):
         super(TestPutObject, self).setUp()
-        self.file_path = os.path.join(os.path.dirname(__file__),
-                                      'test_put_object_data')
+        self.file_path = os.path.join(
+            os.path.dirname(__file__), 'test_put_object_data'
+        )
         self.files = FileCreator()
 
     def tearDown(self):
@@ -49,13 +49,11 @@ class TestPutObject(BaseAWSCommandParams
         cmdline += ' --bucket mybucket'
         cmdline += ' --key mykey'
         cmdline += ' --body %s' % self.file_path
-        result = {'uri_params': {'Bucket': 'mybucket',
-                                 'Key': 'mykey'},
-                  'headers': {'Expect': '100-continue'}}
-        expected = {
-            'Bucket': 'mybucket',
-            'Key': 'mykey'
+        result = {
+            'uri_params': {'Bucket': 'mybucket', 'Key': 'mykey'},
+            'headers': {'Expect': '100-continue'},
         }
+        expected = {'Bucket': 'mybucket', 'Key': 'mykey'}
         self.assert_params_for_cmd(cmdline, expected, ignore_params=['Body'])
         self.assertEqual(self.last_kwargs['Body'].name, self.file_path)
 
@@ -72,7 +70,7 @@ class TestPutObject(BaseAWSCommandParams
             'Bucket': 'mybucket',
             'ContentEncoding': 'x-gzip',
             'ContentType': 'text/plain',
-            'Key': 'mykey'
+            'Key': 'mykey',
         }
         self.assert_params_for_cmd(cmdline, expected, ignore_params=['Body'])
         self.assertEqual(self.last_kwargs['Body'].name, self.file_path)
@@ -87,7 +85,7 @@ class TestPutObject(BaseAWSCommandParams
             'ACL': 'public-read',
             'Bucket': 'mybucket',
             'Key': 'mykey',
-            'WebsiteRedirectLocation': 'http://www.example.com/'
+            'WebsiteRedirectLocation': 'http://www.example.com/',
         }
         self.assert_params_for_cmd(cmdline, expected)
 
@@ -105,7 +103,7 @@ class TestPutObject(BaseAWSCommandParams
             'Key': 'mykey',
             'SSECustomerAlgorithm': 'AES256',
             'SSECustomerKey': 'wg==',  # Note the key gets base64 encoded.
-            'SSECustomerKeyMD5': 'ZGXa0dMXUr4/MoPo9w/u9w=='
+            'SSECustomerKeyMD5': 'ZGXa0dMXUr4/MoPo9w/u9w==',
         }
         self.assert_params_for_cmd(cmdline, expected)
 
diff -pruN 2.23.6-1/tests/functional/s3api/test_put_object_data 2.31.35-1/tests/functional/s3api/test_put_object_data
--- 2.23.6-1/tests/functional/s3api/test_put_object_data	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_put_object_data	2025-11-12 19:17:29.000000000 +0000
@@ -1 +1 @@
-This is a test.
\ No newline at end of file
+This is a test.
diff -pruN 2.23.6-1/tests/functional/s3api/test_select_object_content.py 2.31.35-1/tests/functional/s3api/test_select_object_content.py
--- 2.23.6-1/tests/functional/s3api/test_select_object_content.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3api/test_select_object_content.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,15 +12,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import tempfile
 import shutil
+import tempfile
 
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import BaseAWSHelpOutputTest
+from awscli.testutils import BaseAWSCommandParamsTest, BaseAWSHelpOutputTest
 
 
 class TestGetObject(BaseAWSCommandParamsTest):
-
     prefix = ['s3api', 'select-object-content']
 
     def setUp(self):
@@ -36,11 +34,23 @@ class TestGetObject(BaseAWSCommandParams
         yield {'Records': {'Payload': b'a,b,c,d\n'}}
         # These next two events are ignored because they aren't
         # "Records".
-        yield {'Progress': {'Details': {'BytesScanned': 1048576,
-                                        'BytesProcessed': 37748736}}}
+        yield {
+            'Progress': {
+                'Details': {
+                    'BytesScanned': 1048576,
+                    'BytesProcessed': 37748736,
+                }
+            }
+        }
         yield {'Records': {'Payload': b'e,f,g,h\n'}}
-        yield {'Stats': {'Details': {'BytesProcessed': 62605400,
-                                     'BytesScanned': 1662276}}}
+        yield {
+            'Stats': {
+                'Details': {
+                    'BytesProcessed': 62605400,
+                    'BytesScanned': 1662276,
+                }
+            }
+        }
         yield {'End': {}}
 
     def test_can_stream_to_file(self):
@@ -51,14 +61,15 @@ class TestGetObject(BaseAWSCommandParams
         cmdline.extend(['--expression', 'SELECT * FROM S3Object'])
         cmdline.extend(['--expression-type', 'SQL'])
         cmdline.extend(['--request-progress', 'Enabled=True'])
-        cmdline.extend(['--input-serialization',
-                        '{"CSV": {}, "CompressionType": "GZIP"}'])
+        cmdline.extend(
+            ['--input-serialization', '{"CSV": {}, "CompressionType": "GZIP"}']
+        )
         cmdline.extend(['--output-serialization', '{"CSV": {}}'])
         cmdline.extend([filename])
 
         expected_params = {
             'Bucket': 'mybucket',
-            'Key': u'mykey',
+            'Key': 'mykey',
             'Expression': 'SELECT * FROM S3Object',
             'ExpressionType': 'SQL',
             'InputSerialization': {'CSV': {}, 'CompressionType': 'GZIP'},
@@ -67,12 +78,9 @@ class TestGetObject(BaseAWSCommandParams
         }
         stdout = self.assert_params_for_cmd(cmdline, expected_params)[0]
         self.assertEqual(stdout, '')
-        with open(filename, 'r') as f:
+        with open(filename) as f:
             contents = f.read()
-            self.assertEqual(contents, (
-                'a,b,c,d\n'
-                'e,f,g,h\n'
-            ))
+            self.assertEqual(contents, ('a,b,c,d\n' 'e,f,g,h\n'))
 
     def test_errors_are_propagated(self):
         self.http_response.status_code = 400
@@ -83,18 +91,25 @@ class TestGetObject(BaseAWSCommandParams
             }
         }
         cmdline = self.prefix + [
-            '--bucket', 'mybucket',
-            '--key', 'mykey',
-            '--expression', 'SELECT * FROM S3Object',
-            '--expression-type', 'SQL',
-            '--request-progress', 'Enabled=True',
-            '--input-serialization', '{"CSV": {}, "CompressionType": "GZIP"}',
-            '--output-serialization', '{"CSV": {}}',
+            '--bucket',
+            'mybucket',
+            '--key',
+            'mykey',
+            '--expression',
+            'SELECT * FROM S3Object',
+            '--expression-type',
+            'SQL',
+            '--request-progress',
+            'Enabled=True',
+            '--input-serialization',
+            '{"CSV": {}, "CompressionType": "GZIP"}',
+            '--output-serialization',
+            '{"CSV": {}}',
             os.path.join(self._tempdir, 'outfile'),
         ]
         expected_params = {
             'Bucket': 'mybucket',
-            'Key': u'mykey',
+            'Key': 'mykey',
             'Expression': 'SELECT * FROM S3Object',
             'ExpressionType': 'SQL',
             'InputSerialization': {'CSV': {}, 'CompressionType': 'GZIP'},
@@ -102,11 +117,13 @@ class TestGetObject(BaseAWSCommandParams
             'RequestProgress': {'Enabled': True},
         }
         self.assert_params_for_cmd(
-            cmd=cmdline, params=expected_params,
+            cmd=cmdline,
+            params=expected_params,
             expected_rc=254,
             stderr_contains=(
                 'An error occurred (CastFailed) when '
-                'calling the SelectObjectContent operation'),
+                'calling the SelectObjectContent operation'
+            ),
         )
 
 
@@ -116,8 +133,7 @@ class TestHelpOutput(BaseAWSHelpOutputTe
         # We don't want to be super picky because the wording may change
         # We just want to verify the Output section was customized.
         self.assert_contains(
-            'Output\n======\n'
-            'This command generates no output'
+            'Output\n======\n' 'This command generates no output'
         )
         self.assert_not_contains('[outfile')
         self.assert_contains('outfile')
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_copy.py 2.31.35-1/tests/functional/s3transfer/test_copy.py
--- 2.23.6-1/tests/functional/s3transfer/test_copy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_copy.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,9 @@
 # language governing permissions and limitations under the License.
 from botocore.exceptions import ClientError
 from botocore.stub import Stubber
-
 from s3transfer.manager import TransferConfig, TransferManager
 from s3transfer.utils import MIN_UPLOAD_CHUNKSIZE
+
 from tests import BaseGeneralInterfaceTest, FileSizeProvider
 
 
@@ -84,7 +84,6 @@ class BaseCopyTest(BaseGeneralInterfaceT
         expected_create_mpu_params=None,
         expected_complete_mpu_params=None,
     ):
-
         # Add all responses needed to do the copy of the object.
         # Should account for both ranged and nonranged downloads.
         stubbed_responses = self.create_stubbed_responses()[1:]
@@ -97,9 +96,9 @@ class BaseCopyTest(BaseGeneralInterfaceT
 
         # Add the expected create multipart upload params.
         if expected_create_mpu_params:
-            stubbed_responses[0][
-                'expected_params'
-            ] = expected_create_mpu_params
+            stubbed_responses[0]['expected_params'] = (
+                expected_create_mpu_params
+            )
 
         # Add any expected copy parameters.
         if expected_copy_params:
@@ -111,9 +110,9 @@ class BaseCopyTest(BaseGeneralInterfaceT
 
         # Add the expected complete multipart upload params.
         if expected_complete_mpu_params:
-            stubbed_responses[-1][
-                'expected_params'
-            ] = expected_complete_mpu_params
+            stubbed_responses[-1]['expected_params'] = (
+                expected_complete_mpu_params
+            )
 
         # Add the responses to the stubber.
         for stubbed_response in stubbed_responses:
@@ -353,7 +352,7 @@ class TestMultipartCopy(BaseCopyTest):
         ]
 
     def add_get_head_response_with_default_expected_params(
-            self, extra_expected_params=None
+        self, extra_expected_params=None
     ):
         expected_params = {
             'Bucket': 'mysourcebucket',
@@ -366,7 +365,7 @@ class TestMultipartCopy(BaseCopyTest):
         self.stubber.add_response(**response)
 
     def add_create_multipart_response_with_default_expected_params(
-            self, extra_expected_params=None
+        self, extra_expected_params=None
     ):
         expected_params = {'Bucket': self.bucket, 'Key': self.key}
         if extra_expected_params:
@@ -376,7 +375,7 @@ class TestMultipartCopy(BaseCopyTest):
         self.stubber.add_response(**response)
 
     def add_upload_part_copy_responses_with_default_expected_params(
-            self, extra_expected_params=None
+        self, extra_expected_params=None
     ):
         ranges = [
             'bytes=0-5242879',
@@ -397,10 +396,10 @@ class TestMultipartCopy(BaseCopyTest):
             if extra_expected_params:
                 if 'ChecksumAlgorithm' in extra_expected_params:
                     name = extra_expected_params['ChecksumAlgorithm']
-                    checksum_member = 'Checksum%s' % name.upper()
+                    checksum_member = f'Checksum{name.upper()}'
                     response = upload_part_response['service_response']
                     response['CopyPartResult'][checksum_member] = 'sum%s==' % (
-                            i + 1
+                        i + 1
                     )
                 else:
                     expected_params.update(extra_expected_params)
@@ -409,7 +408,7 @@ class TestMultipartCopy(BaseCopyTest):
             self.stubber.add_response(**upload_part_response)
 
     def add_complete_multipart_response_with_default_expected_params(
-            self, extra_expected_params=None
+        self, extra_expected_params=None
     ):
         expected_params = {
             'Bucket': self.bucket,
@@ -497,7 +496,6 @@ class TestMultipartCopy(BaseCopyTest):
     def _add_params_to_expected_params(
         self, add_copy_kwargs, operation_types, new_params
     ):
-
         expected_params_to_update = []
         for operation_type in operation_types:
             add_copy_kwargs_key = 'expected_' + operation_type + '_params'
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_crt.py 2.31.35-1/tests/functional/s3transfer/test_crt.py
--- 2.23.6-1/tests/functional/s3transfer/test_crt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_crt.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,8 +17,8 @@ import time
 from concurrent.futures import Future
 
 from botocore.session import Session
-
 from s3transfer.subscribers import BaseSubscriber
+
 from tests import (
     HAS_CRT,
     FileCreator,
@@ -31,7 +31,6 @@ from tests import (
 
 if HAS_CRT:
     import awscrt
-
     import s3transfer.crt
 
 
@@ -69,7 +68,9 @@ class TestCRTTransferManager(unittest.Te
         self.region = 'us-west-2'
         self.bucket = "test_bucket"
         self.s3express_bucket = 's3expressbucket--usw2-az5--x-s3'
-        self.mrap_accesspoint = 'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap'
+        self.mrap_accesspoint = (
+            'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap'
+        )
         self.mrap_bucket = 'mfzwi23gnjvgw.mrap'
         self.key = "test_key"
         self.expected_content = b'my content'
@@ -79,12 +80,12 @@ class TestCRTTransferManager(unittest.Te
             'myfile', self.expected_content, mode='wb'
         )
         self.expected_path = "/" + self.bucket + "/" + self.key
-        self.expected_host = "s3.%s.amazonaws.com" % (self.region)
-        self.expected_s3express_host = (
-            f'{self.s3express_bucket}.s3express-usw2-az5.us-west-2.amazonaws.com'
-        )
+        self.expected_host = f"s3.{self.region}.amazonaws.com"
+        self.expected_s3express_host = f'{self.s3express_bucket}.s3express-usw2-az5.us-west-2.amazonaws.com'
         self.expected_s3express_path = f'/{self.key}'
-        self.expected_mrap_host = f'{self.mrap_bucket}.accesspoint.s3-global.amazonaws.com'
+        self.expected_mrap_host = (
+            f'{self.mrap_bucket}.accesspoint.s3-global.amazonaws.com'
+        )
         self.expected_mrap_path = f"/{self.key}"
         self.s3_request = mock.Mock(awscrt.s3.S3Request)
         self.s3_crt_client = mock.Mock(awscrt.s3.S3Client)
@@ -145,9 +146,7 @@ class TestCRTTransferManager(unittest.Te
                 self.assertNotIn(expected_missing_header.lower(), header_names)
 
     def _assert_expected_s3express_request(
-        self,
-        make_request_kwargs,
-        expected_http_method='GET'
+        self, make_request_kwargs, expected_http_method='GET'
     ):
         self._assert_expected_crt_http_request(
             make_request_kwargs["request"],
@@ -158,13 +157,17 @@ class TestCRTTransferManager(unittest.Te
         self.assertIn('signing_config', make_request_kwargs)
         self.assertEqual(
             make_request_kwargs['signing_config'].algorithm,
-            awscrt.auth.AwsSigningAlgorithm.V4_S3EXPRESS
+            awscrt.auth.AwsSigningAlgorithm.V4_S3EXPRESS,
+        )
+        self.assertFalse(
+            make_request_kwargs['signing_config'].use_double_uri_encode,
+        )
+        self.assertFalse(
+            make_request_kwargs['signing_config'].should_normalize_uri_path,
         )
 
     def _assert_expected_mrap_request(
-        self,
-        make_request_kwargs,
-        expected_http_method='GET'
+        self, make_request_kwargs, expected_http_method='GET'
     ):
         self._assert_expected_crt_http_request(
             make_request_kwargs["request"],
@@ -175,10 +178,14 @@ class TestCRTTransferManager(unittest.Te
         self.assertIn('signing_config', make_request_kwargs)
         self.assertEqual(
             make_request_kwargs['signing_config'].algorithm,
-            awscrt.auth.AwsSigningAlgorithm.V4_ASYMMETRIC
+            awscrt.auth.AwsSigningAlgorithm.V4_ASYMMETRIC,
         )
-        self.assertEqual(
-            make_request_kwargs['signing_config'].region, "*"
+        self.assertEqual(make_request_kwargs['signing_config'].region, "*")
+        self.assertFalse(
+            make_request_kwargs['signing_config'].use_double_uri_encode,
+        )
+        self.assertFalse(
+            make_request_kwargs['signing_config'].should_normalize_uri_path,
         )
 
     def _assert_subscribers_called(self, expected_future=None):
@@ -404,24 +411,30 @@ class TestCRTTransferManager(unittest.Te
 
     def test_upload_with_s3express(self):
         future = self.transfer_manager.upload(
-            self.filename, self.s3express_bucket, self.key, {},
-            [self.record_subscriber]
+            self.filename,
+            self.s3express_bucket,
+            self.key,
+            {},
+            [self.record_subscriber],
         )
         future.result()
         self._assert_expected_s3express_request(
             self.s3_crt_client.make_request.call_args[1],
-            expected_http_method='PUT'
+            expected_http_method='PUT',
         )
 
     def test_upload_with_mrap(self):
         future = self.transfer_manager.upload(
-            self.filename, self.mrap_accesspoint, self.key, {},
-            [self.record_subscriber]
+            self.filename,
+            self.mrap_accesspoint,
+            self.key,
+            {},
+            [self.record_subscriber],
         )
         future.result()
         self._assert_expected_mrap_request(
             self.s3_crt_client.make_request.call_args[1],
-            expected_http_method='PUT'
+            expected_http_method='PUT',
         )
 
     def test_upload_with_full_checksum(self):
@@ -559,24 +572,30 @@ class TestCRTTransferManager(unittest.Te
 
     def test_download_with_s3express(self):
         future = self.transfer_manager.download(
-            self.s3express_bucket, self.key, self.filename, {},
-            [self.record_subscriber]
+            self.s3express_bucket,
+            self.key,
+            self.filename,
+            {},
+            [self.record_subscriber],
         )
         future.result()
         self._assert_expected_s3express_request(
             self.s3_crt_client.make_request.call_args[1],
-            expected_http_method='GET'
+            expected_http_method='GET',
         )
 
     def test_download_with_mrap(self):
         future = self.transfer_manager.download(
-            self.mrap_accesspoint, self.key, self.filename, {},
-            [self.record_subscriber]
+            self.mrap_accesspoint,
+            self.key,
+            self.filename,
+            {},
+            [self.record_subscriber],
         )
         future.result()
         self._assert_expected_mrap_request(
             self.s3_crt_client.make_request.call_args[1],
-            expected_http_method='GET'
+            expected_http_method='GET',
         )
 
     def test_delete(self):
@@ -610,7 +629,7 @@ class TestCRTTransferManager(unittest.Te
         future.result()
         self._assert_expected_s3express_request(
             self.s3_crt_client.make_request.call_args[1],
-            expected_http_method='DELETE'
+            expected_http_method='DELETE',
         )
 
     def test_blocks_when_max_requests_processes_reached(self):
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_delete.py 2.31.35-1/tests/functional/s3transfer/test_delete.py
--- 2.23.6-1/tests/functional/s3transfer/test_delete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_delete.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from s3transfer.manager import TransferManager
+
 from tests import BaseGeneralInterfaceTest
 
 
 class TestDeleteObject(BaseGeneralInterfaceTest):
-
     __test__ = True
 
     def setUp(self):
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_download.py 2.31.35-1/tests/functional/s3transfer/test_download.py
--- 2.23.6-1/tests/functional/s3transfer/test_download.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_download.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,12 +19,17 @@ import time
 from io import BytesIO
 
 from botocore.exceptions import ClientError
-
 from s3transfer.compat import SOCKET_ERROR
-from s3transfer.exceptions import RetriesExceededError
+from s3transfer.exceptions import (
+    RetriesExceededError,
+    S3DownloadFailedError,
+    S3ValidationError,
+)
 from s3transfer.manager import TransferConfig, TransferManager
+
 from tests import (
     BaseGeneralInterfaceTest,
+    ETagProvider,
     FileSizeProvider,
     NonSeekableWriter,
     RecordingOSUtils,
@@ -48,6 +53,7 @@ class BaseDownloadTest(BaseGeneralInterf
         # Initialize some default arguments
         self.bucket = 'mybucket'
         self.key = 'mykey'
+        self.etag = 'myetag'
         self.extra_args = {}
         self.subscribers = []
 
@@ -84,7 +90,10 @@ class BaseDownloadTest(BaseGeneralInterf
         return [
             {
                 'method': 'head_object',
-                'service_response': {'ContentLength': len(self.content)},
+                'service_response': {
+                    'ContentLength': len(self.content),
+                    'ETag': self.etag,
+                },
             },
             {
                 'method': 'get_object',
@@ -104,7 +113,7 @@ class BaseDownloadTest(BaseGeneralInterf
         self.stubber.add_response(**head_response)
 
     def add_successful_get_object_responses(
-        self, expected_params=None, expected_ranges=None
+        self, expected_params=None, expected_ranges=None, extras=None
     ):
         # Add all get_object responses needed to complete the download.
         # Should account for both ranged and nonranged downloads.
@@ -116,9 +125,11 @@ class BaseDownloadTest(BaseGeneralInterf
                     expected_params
                 )
                 if expected_ranges:
-                    stubbed_response['expected_params'][
-                        'Range'
-                    ] = expected_ranges[i]
+                    stubbed_response['expected_params']['Range'] = (
+                        expected_ranges[i]
+                    )
+                if extras:
+                    stubbed_response['service_response'].update(extras[i])
             self.stubber.add_response(**stubbed_response)
 
     def add_n_retryable_get_object_responses(self, n, num_reads=0):
@@ -141,7 +152,7 @@ class BaseDownloadTest(BaseGeneralInterf
         # Make sure the file exists
         self.assertTrue(os.path.exists(self.filename))
         # Make sure the random temporary file does not exist
-        possible_matches = glob.glob('%s*' % self.filename + os.extsep)
+        possible_matches = glob.glob(f'{self.filename}*' + os.extsep)
         self.assertEqual(possible_matches, [])
 
     def test_download_for_fileobj(self):
@@ -201,7 +212,7 @@ class BaseDownloadTest(BaseGeneralInterf
             future.result()
         # Make sure the actual file and the temporary do not exist
         # by globbing for the file and any of its extensions
-        possible_matches = glob.glob('%s*' % self.filename)
+        possible_matches = glob.glob(f'{self.filename}*')
         self.assertEqual(possible_matches, [])
 
     def test_download_with_nonexistent_directory(self):
@@ -290,11 +301,14 @@ class BaseDownloadTest(BaseGeneralInterf
         ]
         self.assertEqual(-3, progress_byte_amts[1])
 
-    def test_can_provide_file_size(self):
+    def test_can_provide_file_size_and_etag(self):
         self.add_successful_get_object_responses()
 
         call_kwargs = self.create_call_kwargs()
-        call_kwargs['subscribers'] = [FileSizeProvider(len(self.content))]
+        call_kwargs['subscribers'] = [
+            FileSizeProvider(len(self.content)),
+            ETagProvider(self.etag),
+        ]
 
         future = self.manager.download(**call_kwargs)
         future.result()
@@ -469,7 +483,10 @@ class TestRangedDownload(BaseDownloadTes
         return [
             {
                 'method': 'head_object',
-                'service_response': {'ContentLength': len(self.content)},
+                'service_response': {
+                    'ContentLength': len(self.content),
+                    'ETag': self.etag,
+                },
             },
             {
                 'method': 'get_object',
@@ -500,9 +517,12 @@ class TestRangedDownload(BaseDownloadTes
             'RequestPayer': 'requester',
         }
         expected_ranges = ['bytes=0-3', 'bytes=4-7', 'bytes=8-']
+        stubbed_ranges = ['bytes 0-3/10', 'bytes 4-7/10', 'bytes 8-9/10']
         self.add_head_object_response(expected_params)
         self.add_successful_get_object_responses(
-            expected_params, expected_ranges
+            {**expected_params, 'IfMatch': self.etag},
+            expected_ranges,
+            [{"ContentRange": r} for r in stubbed_ranges],
         )
 
         future = self.manager.download(
@@ -524,6 +544,98 @@ class TestRangedDownload(BaseDownloadTes
         expected_ranges = ['bytes=0-3', 'bytes=4-7', 'bytes=8-']
         self.add_head_object_response(expected_params)
         self.add_successful_get_object_responses(
+            {**expected_params, 'IfMatch': self.etag}, expected_ranges
+        )
+
+        future = self.manager.download(
+            self.bucket, self.key, self.filename, self.extra_args
+        )
+        future.result()
+
+        # Ensure that the contents are correct
+        with open(self.filename, 'rb') as f:
+            self.assertEqual(self.content, f.read())
+
+    def test_download_raises_if_content_range_mismatch(self):
+        expected_params = {
+            'Bucket': self.bucket,
+            'Key': self.key,
+        }
+        expected_ranges = ['bytes=0-3', 'bytes=4-7', 'bytes=8-']
+        # Note that the final retrieved range should be `bytes 8-9/10`.
+        stubbed_ranges = ['bytes 0-3/10', 'bytes 4-7/10', 'bytes 7-8/10']
+        self.add_head_object_response(expected_params)
+        self.add_successful_get_object_responses(
+            {**expected_params, 'IfMatch': self.etag},
+            expected_ranges,
+            [{"ContentRange": r} for r in stubbed_ranges],
+        )
+
+        future = self.manager.download(
+            self.bucket, self.key, self.filename, self.extra_args
+        )
+        with self.assertRaises(S3ValidationError) as e:
+            future.result()
+        self.assertIn('does not match content range', str(e.exception))
+
+    def test_download_raises_if_etag_validation_fails(self):
+        expected_params = {
+            'Bucket': self.bucket,
+            'Key': self.key,
+        }
+        expected_ranges = ['bytes=0-3', 'bytes=4-7']
+        self.add_head_object_response(expected_params)
+
+        # Add successful GetObject responses for the first 2 requests.
+        for i, stubbed_response in enumerate(
+            self.create_stubbed_responses()[1:3]
+        ):
+            stubbed_response['expected_params'] = copy.deepcopy(
+                {**expected_params, 'IfMatch': self.etag}
+            )
+            stubbed_response['expected_params']['Range'] = expected_ranges[i]
+            self.stubber.add_response(**stubbed_response)
+
+        # Simulate ETag validation failure by adding a
+        # client error for the last GetObject request.
+        self.stubber.add_client_error(
+            method='get_object',
+            service_error_code='PreconditionFailed',
+            service_message=(
+                'At least one of the pre-conditions you specified did not hold'
+            ),
+            http_status_code=412,
+        )
+
+        future = self.manager.download(
+            self.bucket, self.key, self.filename, self.extra_args
+        )
+        with self.assertRaises(S3DownloadFailedError) as e:
+            future.result()
+        self.assertIn('did not match expected ETag', str(e.exception))
+
+        # Ensure no data is written to disk.
+        self.assertFalse(os.path.exists(self.filename))
+
+    def test_download_without_etag(self):
+        expected_params = {
+            'Bucket': self.bucket,
+            'Key': self.key,
+        }
+        expected_ranges = ['bytes=0-3', 'bytes=4-7', 'bytes=8-']
+
+        # Stub HeadObject response with no ETag
+        head_object_response = {
+            'method': 'head_object',
+            'service_response': {
+                'ContentLength': len(self.content),
+            },
+            'expected_params': expected_params,
+        }
+        self.stubber.add_response(**head_object_response)
+
+        # This asserts that IfMatch isn't in the GetObject requests.
+        self.add_successful_get_object_responses(
             expected_params, expected_ranges
         )
 
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_manager.py 2.31.35-1/tests/functional/s3transfer/test_manager.py
--- 2.23.6-1/tests/functional/s3transfer/test_manager.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_manager.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,10 @@
 from io import BytesIO
 
 from botocore.awsrequest import create_request_object
-
 from s3transfer.exceptions import CancelledError, FatalError
 from s3transfer.futures import BaseExecutor
 from s3transfer.manager import TransferConfig, TransferManager
+
 from tests import StubbedClientTest, mock, skip_if_using_serial_implementation
 
 
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_upload.py 2.31.35-1/tests/functional/s3transfer/test_upload.py
--- 2.23.6-1/tests/functional/s3transfer/test_upload.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_upload.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,10 +21,10 @@ from botocore.client import Config
 from botocore.exceptions import ClientError
 from botocore.httpchecksum import DEFAULT_CHECKSUM_ALGORITHM
 from botocore.stub import ANY
-
 from s3transfer.manager import TransferConfig, TransferManager
 from s3transfer.upload import UploadSubmissionTask
 from s3transfer.utils import ChunksizeAdjuster
+
 from tests import (
     BaseGeneralInterfaceTest,
     NonSeekableReader,
@@ -94,7 +94,7 @@ class BaseUploadTest(BaseGeneralInterfac
                 data=params['Body'],
             )
             self.client.meta.events.emit(
-                'request-created.s3.%s' % model.name,
+                f'request-created.s3.{model.name}',
                 request=request,
                 operation_name=model.name,
             )
@@ -468,7 +468,7 @@ class TestMultipartUpload(BaseUploadTest
     ):
         if bucket is None:
             bucket = self.bucket
-        
+
         num_parts = 3
         parts = []
         for part_num in range(1, num_parts + 1):
diff -pruN 2.23.6-1/tests/functional/s3transfer/test_utils.py 2.31.35-1/tests/functional/s3transfer/test_utils.py
--- 2.23.6-1/tests/functional/s3transfer/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/s3transfer/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,7 @@ import socket
 import tempfile
 
 from s3transfer.utils import OSUtils
+
 from tests import skip_if_windows, unittest
 
 
diff -pruN 2.23.6-1/tests/functional/servicecatalog/test_generate_createproduct.py 2.31.35-1/tests/functional/servicecatalog/test_generate_createproduct.py
--- 2.23.6-1/tests/functional/servicecatalog/test_generate_createproduct.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/servicecatalog/test_generate_createproduct.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,51 +14,43 @@
 
 import os
 
-from awscli.customizations.servicecatalog.utils \
-    import get_s3_path
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.customizations.servicecatalog.utils import get_s3_path
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestGenerateProduct(BaseAWSCommandParamsTest):
     prefix = "servicecatalog generate product "
 
     def get_expected_result(self):
-        expected_url = 'https://s3.amazonaws.com/{0}/{1}'.\
-                            format(self.bucket_name,
-                                   get_s3_path(self.template_path))
-
-        return {'Description': self.product_description,
-                'Distributor': self.product_distributor,
-                'IdempotencyToken': mock.ANY,
-                'Name': self.product_name,
-                'Owner': self.product_owner,
-                'ProductType': self.product_type,
-                'ProvisioningArtifactParameters': {
-                    'Description': self.provisioning_artifact_description,
-                    'Info': {'LoadTemplateFromURL': expected_url},
-                    'Name': self.provisioning_artifact_name,
-                    'Type': self.provisioning_artifact_type},
-                'SupportDescription': self.support_description,
-                'SupportEmail': self.support_email,
-                'Tags': [
-                    {
-                        "Value": "value1",
-                        "Key": "key1"
-                    },
-                    {
-                        "Value": "value2",
-                        "Key": "key2"
-                    },
-                    {
-                        "Value": "value3",
-                        "Key": "key3"
-                    }
-                ]}
+        expected_url = f'https://s3.amazonaws.com/{self.bucket_name}/{get_s3_path(self.template_path)}'
+
+        return {
+            'Description': self.product_description,
+            'Distributor': self.product_distributor,
+            'IdempotencyToken': mock.ANY,
+            'Name': self.product_name,
+            'Owner': self.product_owner,
+            'ProductType': self.product_type,
+            'ProvisioningArtifactParameters': {
+                'Description': self.provisioning_artifact_description,
+                'Info': {'LoadTemplateFromURL': expected_url},
+                'Name': self.provisioning_artifact_name,
+                'Type': self.provisioning_artifact_type,
+            },
+            'SupportDescription': self.support_description,
+            'SupportEmail': self.support_email,
+            'Tags': [
+                {"Value": "value1", "Key": "key1"},
+                {"Value": "value2", "Key": "key2"},
+                {"Value": "value3", "Key": "key3"},
+            ],
+        }
 
     def init_params(self):
         self.obj_key = 'development-environment.template'
-        self.template_path = os.path.join(os.path.dirname(__file__),
-                                          self.obj_key)
+        self.template_path = os.path.join(
+            os.path.dirname(__file__), self.obj_key
+        )
         self.bucket_name = 'bucket_name'
         self.product_name = 'prod_name'
         self.tags = 'Key=key1,Value=value1  Key=key2,Value=value2 \
@@ -87,14 +79,20 @@ class TestGenerateProduct(BaseAWSCommand
         if self.product_type:
             cmd_line += ' --product-type %s' % self.product_type
         if self.provisioning_artifact_name:
-            cmd_line += ' --provisioning-artifact-name %s' \
-                        % self.provisioning_artifact_name
+            cmd_line += (
+                ' --provisioning-artifact-name %s'
+                % self.provisioning_artifact_name
+            )
         if self.provisioning_artifact_description:
-            cmd_line += ' --provisioning-artifact-description %s' \
-                        % self.provisioning_artifact_description
+            cmd_line += (
+                ' --provisioning-artifact-description %s'
+                % self.provisioning_artifact_description
+            )
         if self.provisioning_artifact_type:
-            cmd_line += ' --provisioning-artifact-type %s' \
-                        % self.provisioning_artifact_type
+            cmd_line += (
+                ' --provisioning-artifact-type %s'
+                % self.provisioning_artifact_type
+            )
         cmd_line += ' --product-description %s' % self.product_description
         cmd_line += ' --product-distributor %s' % self.product_distributor
         cmd_line += ' --support-description %s' % self.support_description
@@ -109,69 +107,62 @@ class TestGenerateProduct(BaseAWSCommand
         self.cmd_line = self.build_cmd_line()
         expected_result = self.get_expected_result()
 
-        self.assert_params_for_cmd(self.cmd_line,
-                                   expected_result,
-                                   expected_rc=0)
+        self.assert_params_for_cmd(
+            self.cmd_line, expected_result, expected_rc=0
+        )
 
     def test_generate_product_success_unicode(self):
-        self.product_name = u'\u05d1\u05e8\u05d9\u05e6\u05e7\u05dc\u05d4'
-        self.support_description = u'\u00fd\u00a9\u0194\u0292'
+        self.product_name = '\u05d1\u05e8\u05d9\u05e6\u05e7\u05dc\u05d4'
+        self.support_description = '\u00fd\u00a9\u0194\u0292'
 
         self.cmd_line = self.build_cmd_line()
         expected_result = self.get_expected_result()
 
-        self.assert_params_for_cmd(self.cmd_line,
-                                   expected_result,
-                                   expected_rc=0)
+        self.assert_params_for_cmd(
+            self.cmd_line, expected_result, expected_rc=0
+        )
 
     def test_generate_product_invalid_path(self):
         self.template_path = os.path.join('invalid', 'template', 'file')
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=255,
-            stderr_contains='cannot be found'
+            self.cmd_line, expected_rc=255, stderr_contains='cannot be found'
         )
 
     def test_generate_product_missing_file_path(self):
         self.template_path = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--file-path')
+            self.cmd_line, expected_rc=252, stderr_contains='--file-path'
+        )
 
     def test_generate_product_missing_bucket_name(self):
         self.bucket_name = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--bucket-name')
+            self.cmd_line, expected_rc=252, stderr_contains='--bucket-name'
+        )
 
     def test_generate_product_missing_product_type(self):
         self.product_type = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--product-type')
+            self.cmd_line, expected_rc=252, stderr_contains='--product-type'
+        )
 
     def test_generate_product_missing_product_name(self):
         self.product_name = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--product-name')
+            self.cmd_line, expected_rc=252, stderr_contains='--product-name'
+        )
 
     def test_generate_product_missing_product_owner(self):
         self.product_owner = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--product-owner')
+            self.cmd_line, expected_rc=252, stderr_contains='--product-owner'
+        )
 
     def test_generate_product_missing_provisioning_artifact_name(self):
         self.provisioning_artifact_name = None
@@ -179,7 +170,8 @@ class TestGenerateProduct(BaseAWSCommand
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-name')
+            stderr_contains='--provisioning-artifact-name',
+        )
 
     def test_generate_product_missing_provisioning_artifact_description(self):
         self.provisioning_artifact_description = None
@@ -187,7 +179,8 @@ class TestGenerateProduct(BaseAWSCommand
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-description')
+            stderr_contains='--provisioning-artifact-description',
+        )
 
     def test_generate_product_missing_provisioning_artifact_type(self):
         self.provisioning_artifact_type = None
@@ -195,7 +188,8 @@ class TestGenerateProduct(BaseAWSCommand
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-type')
+            stderr_contains='--provisioning-artifact-type',
+        )
 
     def test_invalid_product_type(self):
         self.product_type = 'invalid-product-type'
@@ -204,7 +198,8 @@ class TestGenerateProduct(BaseAWSCommand
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--product-type: Invalid choice')
+            stderr_contains='--product-type: Found invalid choice',
+        )
 
     def test_generate_product_invalid_provisioning_artifact_type(self):
         self.provisioning_artifact_type = 'invalid_provisioning type'
@@ -213,4 +208,5 @@ class TestGenerateProduct(BaseAWSCommand
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-type: Invalid choice')
+            stderr_contains='--provisioning-artifact-type: Found invalid choice',
+        )
diff -pruN 2.23.6-1/tests/functional/servicecatalog/test_generate_createprovisioningartifact.py 2.31.35-1/tests/functional/servicecatalog/test_generate_createprovisioningartifact.py
--- 2.23.6-1/tests/functional/servicecatalog/test_generate_createprovisioningartifact.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/servicecatalog/test_generate_createprovisioningartifact.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,34 +14,31 @@
 
 import os
 
-from awscli.customizations.servicecatalog.utils \
-    import get_s3_path
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.customizations.servicecatalog.utils import get_s3_path
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class TestGenerateProvisioningArtifact(BaseAWSCommandParamsTest):
     prefix = "servicecatalog generate provisioning-artifact "
 
     def get_expected_result(self):
-        expected_url = 'https://s3.amazonaws.com/{0}/{1}'. \
-            format(self.bucket_name, get_s3_path(self.template_path))
+        expected_url = f'https://s3.amazonaws.com/{self.bucket_name}/{get_s3_path(self.template_path)}'
         return {
             'IdempotencyToken': mock.ANY,
             'Parameters': {
                 'Description': self.provisioning_artifact_description,
-                'Info': {
-                    'LoadTemplateFromURL': expected_url
-                },
+                'Info': {'LoadTemplateFromURL': expected_url},
                 'Name': self.provisioning_artifact_name,
-                'Type': self.provisioning_artifact_type
+                'Type': self.provisioning_artifact_type,
             },
-            'ProductId': self.product_id
+            'ProductId': self.product_id,
         }
 
     def init_params(self):
         self.obj_key = 'development-environment.template'
-        self.template_path = os.path.join(os.path.dirname(__file__),
-                                          self.obj_key)
+        self.template_path = os.path.join(
+            os.path.dirname(__file__), self.obj_key
+        )
         self.bucket_name = 'bucket_name'
         self.provisioning_artifact_name = 'prov_art_name'
         self.provisioning_artifact_description = 'prov_art_desc'
@@ -55,14 +52,20 @@ class TestGenerateProvisioningArtifact(B
         if self.bucket_name:
             cmd_line += ' --bucket-name %s' % self.bucket_name
         if self.provisioning_artifact_name:
-            cmd_line += ' --provisioning-artifact-name %s' \
-                        % self.provisioning_artifact_name
+            cmd_line += (
+                ' --provisioning-artifact-name %s'
+                % self.provisioning_artifact_name
+            )
         if self.provisioning_artifact_description:
-            cmd_line += ' --provisioning-artifact-description %s' \
-                        % self.provisioning_artifact_description
+            cmd_line += (
+                ' --provisioning-artifact-description %s'
+                % self.provisioning_artifact_description
+            )
         if self.provisioning_artifact_type:
-            cmd_line += ' --provisioning-artifact-type %s' \
-                        % self.provisioning_artifact_type
+            cmd_line += (
+                ' --provisioning-artifact-type %s'
+                % self.provisioning_artifact_type
+            )
         if self.product_id:
             cmd_line += ' --product-id %s' % self.product_id
         return cmd_line
@@ -75,27 +78,26 @@ class TestGenerateProvisioningArtifact(B
         self.cmd_line = self.build_cmd_line()
         expected_result = self.get_expected_result()
 
-        self.assert_params_for_cmd(self.cmd_line,
-                                   expected_result,
-                                   expected_rc=0)
+        self.assert_params_for_cmd(
+            self.cmd_line, expected_result, expected_rc=0
+        )
 
     def test_generate_provisioning_artifact_success_unicode(self):
-        self.provisioning_artifact_name = u'\u05d1\u05e8\u05d9\u05e6\u05e7'
-        self.provisioning_artifact_description = u'\u00fd\u00a9\u0194\u0292'
+        self.provisioning_artifact_name = '\u05d1\u05e8\u05d9\u05e6\u05e7'
+        self.provisioning_artifact_description = '\u00fd\u00a9\u0194\u0292'
         self.cmd_line = self.build_cmd_line()
         expected_result = self.get_expected_result()
 
-        self.assert_params_for_cmd(self.cmd_line,
-                                   expected_result,
-                                   expected_rc=0)
+        self.assert_params_for_cmd(
+            self.cmd_line, expected_result, expected_rc=0
+        )
 
     def test_generate_provisioning_artifact_invalid_path(self):
         self.template_path = os.path.join('invalid', 'template', 'file')
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=255,
-            stderr_contains='cannot be found')
+            self.cmd_line, expected_rc=255, stderr_contains='cannot be found'
+        )
 
     def test_generate_provisioning_artifact_invalid_pa_type(self):
         self.provisioning_artifact_type = 'invalid_provisioning type'
@@ -103,23 +105,22 @@ class TestGenerateProvisioningArtifact(B
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-type: Invalid choice')
+            stderr_contains='--provisioning-artifact-type: Found invalid choice',
+        )
 
     def test_generate_provisioning_artifact_missing_file_path(self):
         self.template_path = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--file-path')
+            self.cmd_line, expected_rc=252, stderr_contains='--file-path'
+        )
 
     def test_generate_provisioning_artifact_missing_bucket_name(self):
         self.bucket_name = None
         self.cmd_line = self.build_cmd_line()
         self.assert_params_for_cmd(
-            self.cmd_line,
-            expected_rc=252,
-            stderr_contains='--bucket-name')
+            self.cmd_line, expected_rc=252, stderr_contains='--bucket-name'
+        )
 
     def test_generate_provisioning_artifact_missing_pa_name(self):
         self.provisioning_artifact_name = None
@@ -127,7 +128,8 @@ class TestGenerateProvisioningArtifact(B
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-name')
+            stderr_contains='--provisioning-artifact-name',
+        )
 
     def test_generate_provisioning_artifact_missing_pa_description(self):
         self.provisioning_artifact_description = None
@@ -135,7 +137,8 @@ class TestGenerateProvisioningArtifact(B
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-description')
+            stderr_contains='--provisioning-artifact-description',
+        )
 
     def test_generate_provisioning_artifact_missing_pa_type(self):
         self.provisioning_artifact_type = None
@@ -143,4 +146,5 @@ class TestGenerateProvisioningArtifact(B
         self.assert_params_for_cmd(
             self.cmd_line,
             expected_rc=252,
-            stderr_contains='--provisioning-artifact-type')
+            stderr_contains='--provisioning-artifact-type',
+        )
diff -pruN 2.23.6-1/tests/functional/ses/test_create_custom_verification_email_template.py 2.31.35-1/tests/functional/ses/test_create_custom_verification_email_template.py
--- 2.23.6-1/tests/functional/ses/test_create_custom_verification_email_template.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ses/test_create_custom_verification_email_template.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,6 @@ class TestCreateCustomVerificationEmailT
             'TemplateSubject': self.template_subject,
             'TemplateContent': self.template_content,
             'SuccessRedirectionURL': self.success_redirection_url,
-            'FailureRedirectionURL': self.failure_redirection_url
+            'FailureRedirectionURL': self.failure_redirection_url,
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/ses/test_send_email.py 2.31.35-1/tests/functional/ses/test_send_email.py
--- 2.23.6-1/tests/functional/ses/test_send_email.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ses/test_send_email.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,83 +15,109 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestSendEmail(BaseAWSCommandParamsTest):
-
     prefix = 'ses send-email'
 
     def test_plain_text(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie@baz.com --text This_is_the_message')
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie@baz.com --text This_is_the_message'
+        )
         args_list = (self.prefix + args).split()
         result = {
             'Source': 'foo@bar.com',
             'Destination': {'ToAddresses': ['fie@baz.com']},
-            'Message': {'Body': {'Text': {'Data': 'This_is_the_message'}},
-                        'Subject': {'Data': 'This_is_a_test'}}}
+            'Message': {
+                'Body': {'Text': {'Data': 'This_is_the_message'}},
+                'Subject': {'Data': 'This_is_a_test'},
+            },
+        }
         self.assert_params_for_cmd(args_list, result)
 
     def test_plain_text_multiple_to(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie1@baz.com fie2@baz.com --text This_is_the_message')
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie1@baz.com fie2@baz.com --text This_is_the_message'
+        )
         args_list = (self.prefix + args).split()
-        result = {'Source': 'foo@bar.com',
-                  'Destination': {
-                      'ToAddresses': ['fie1@baz.com', 'fie2@baz.com']},
-                  'Message': {
-                      'Body': {'Text': {'Data': 'This_is_the_message'}},
-                      'Subject': {'Data': 'This_is_a_test'}}}
+        result = {
+            'Source': 'foo@bar.com',
+            'Destination': {'ToAddresses': ['fie1@baz.com', 'fie2@baz.com']},
+            'Message': {
+                'Body': {'Text': {'Data': 'This_is_the_message'}},
+                'Subject': {'Data': 'This_is_a_test'},
+            },
+        }
 
         self.assert_params_for_cmd(args_list, result)
 
     def test_plain_text_multiple_cc(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie1@baz.com fie2@baz.com --text This_is_the_message'
-                ' --cc fie3@baz.com fie4@baz.com')
-        args_list = (self.prefix + args).split()
-        result = {'Source': 'foo@bar.com',
-                  'Destination': {
-                      'CcAddresses': ['fie3@baz.com', 'fie4@baz.com'],
-                      'ToAddresses': ['fie1@baz.com', 'fie2@baz.com']},
-                  'Message': {
-                      'Body': {'Text': {'Data': 'This_is_the_message'}},
-                      'Subject': {'Data': 'This_is_a_test'}}}
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie1@baz.com fie2@baz.com --text This_is_the_message'
+            ' --cc fie3@baz.com fie4@baz.com'
+        )
+        args_list = (self.prefix + args).split()
+        result = {
+            'Source': 'foo@bar.com',
+            'Destination': {
+                'CcAddresses': ['fie3@baz.com', 'fie4@baz.com'],
+                'ToAddresses': ['fie1@baz.com', 'fie2@baz.com'],
+            },
+            'Message': {
+                'Body': {'Text': {'Data': 'This_is_the_message'}},
+                'Subject': {'Data': 'This_is_a_test'},
+            },
+        }
 
         self.assert_params_for_cmd(args_list, result)
 
     def test_plain_text_multiple_bcc(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie1@baz.com fie2@baz.com --text This_is_the_message'
-                ' --cc fie3@baz.com fie4@baz.com'
-                ' --bcc fie5@baz.com fie6@baz.com')
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie1@baz.com fie2@baz.com --text This_is_the_message'
+            ' --cc fie3@baz.com fie4@baz.com'
+            ' --bcc fie5@baz.com fie6@baz.com'
+        )
         args_list = (self.prefix + args).split()
 
         result = {
             'Source': 'foo@bar.com',
-            'Destination': {'BccAddresses': ['fie5@baz.com', 'fie6@baz.com'],
-                            'CcAddresses': ['fie3@baz.com', 'fie4@baz.com'],
-                            'ToAddresses': ['fie1@baz.com', 'fie2@baz.com']},
+            'Destination': {
+                'BccAddresses': ['fie5@baz.com', 'fie6@baz.com'],
+                'CcAddresses': ['fie3@baz.com', 'fie4@baz.com'],
+                'ToAddresses': ['fie1@baz.com', 'fie2@baz.com'],
+            },
             'Message': {
                 'Body': {'Text': {'Data': 'This_is_the_message'}},
-                'Subject': {'Data': 'This_is_a_test'}}}
+                'Subject': {'Data': 'This_is_a_test'},
+            },
+        }
 
         self.assert_params_for_cmd(args_list, result)
 
     def test_html_text(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie@baz.com --html This_is_the_html_message')
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie@baz.com --html This_is_the_html_message'
+        )
         args_list = (self.prefix + args).split()
         result = {
             'Source': 'foo@bar.com',
             'Destination': {'ToAddresses': ['fie@baz.com']},
-            'Message': {'Subject': {'Data': 'This_is_a_test'},
-                        'Body': {
-                            'Html': {'Data': 'This_is_the_html_message'}}}}
+            'Message': {
+                'Subject': {'Data': 'This_is_a_test'},
+                'Body': {'Html': {'Data': 'This_is_the_html_message'}},
+            },
+        }
 
         self.assert_params_for_cmd(args_list, result)
 
     def test_html_both(self):
-        args = (' --subject This_is_a_test --from foo@bar.com'
-                ' --to fie@baz.com --html This_is_the_html_message'
-                ' --text This_is_the_text_message')
+        args = (
+            ' --subject This_is_a_test --from foo@bar.com'
+            ' --to fie@baz.com --html This_is_the_html_message'
+            ' --text This_is_the_text_message'
+        )
         args_list = (self.prefix + args).split()
         result = {
             'Source': 'foo@bar.com',
@@ -100,39 +126,49 @@ class TestSendEmail(BaseAWSCommandParams
                 'Subject': {'Data': 'This_is_a_test'},
                 'Body': {
                     'Text': {'Data': 'This_is_the_text_message'},
-                    'Html': {'Data': 'This_is_the_html_message'}}}}
+                    'Html': {'Data': 'This_is_the_html_message'},
+                },
+            },
+        }
         self.assert_params_for_cmd(args_list, result)
 
     def test_using_json(self):
-        args = (' --message {"Subject":{"Data":"This_is_a_test"},'
-                '"Body":{"Text":{"Data":"This_is_the_message"}}}'
-                ' --from foo@bar.com'
-                ' --destination {"ToAddresses":["fie@baz.com"]}')
-        args_list = (self.prefix + args).split()
-        result = {'Destination': {'ToAddresses': ['fie@baz.com']},
-                  'Message': {
-                      'Subject': {
-                          'Data': 'This_is_a_test'},
-                      'Body': {
-                          'Text': {'Data': 'This_is_the_message'}}},
-                  'Source': 'foo@bar.com'}
+        args = (
+            ' --message {"Subject":{"Data":"This_is_a_test"},'
+            '"Body":{"Text":{"Data":"This_is_the_message"}}}'
+            ' --from foo@bar.com'
+            ' --destination {"ToAddresses":["fie@baz.com"]}'
+        )
+        args_list = (self.prefix + args).split()
+        result = {
+            'Destination': {'ToAddresses': ['fie@baz.com']},
+            'Message': {
+                'Subject': {'Data': 'This_is_a_test'},
+                'Body': {'Text': {'Data': 'This_is_the_message'}},
+            },
+            'Source': 'foo@bar.com',
+        }
 
         self.assert_params_for_cmd(args_list, result)
 
     def test_both_destination_and_to(self):
-        args = (' --message {"Subject":{"Data":"This_is_a_test"},'
-                '"Body":{"Text":{"Data":"This_is_the_message"}}}'
-                ' --from foo@bar.com'
-                ' --destination {"ToAddresses":["fie@baz.com"]}'
-                ' --to fie2@baz.com')
+        args = (
+            ' --message {"Subject":{"Data":"This_is_a_test"},'
+            '"Body":{"Text":{"Data":"This_is_the_message"}}}'
+            ' --from foo@bar.com'
+            ' --destination {"ToAddresses":["fie@baz.com"]}'
+            ' --to fie2@baz.com'
+        )
         args_list = (self.prefix + args).split()
         self.run_cmd(args_list, expected_rc=252)
 
     def test_both_message_and_text(self):
-        args = (' --message {"Subject":{"Data":"This_is_a_test"},'
-                '"Body":{"Text":{"Data":"This_is_the_message"}}}'
-                ' --from foo@bar.com'
-                ' --destination {"ToAddresses":["fie@baz.com"]}'
-                ' --text This_is_another_body')
+        args = (
+            ' --message {"Subject":{"Data":"This_is_a_test"},'
+            '"Body":{"Text":{"Data":"This_is_the_message"}}}'
+            ' --from foo@bar.com'
+            ' --destination {"ToAddresses":["fie@baz.com"]}'
+            ' --text This_is_another_body'
+        )
         args_list = (self.prefix + args).split()
         self.run_cmd(args_list, expected_rc=252)
diff -pruN 2.23.6-1/tests/functional/ses/test_update_custom_verification_email_template.py 2.31.35-1/tests/functional/ses/test_update_custom_verification_email_template.py
--- 2.23.6-1/tests/functional/ses/test_update_custom_verification_email_template.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ses/test_update_custom_verification_email_template.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,6 @@ class TestUpdateCustomVerificationEmailT
             'TemplateSubject': self.template_subject,
             'TemplateContent': self.template_content,
             'SuccessRedirectionURL': self.success_redirection_url,
-            'FailureRedirectionURL': self.failure_redirection_url
+            'FailureRedirectionURL': self.failure_redirection_url,
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/sesv2/test_create_custom_verification_email_template.py 2.31.35-1/tests/functional/sesv2/test_create_custom_verification_email_template.py
--- 2.23.6-1/tests/functional/sesv2/test_create_custom_verification_email_template.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sesv2/test_create_custom_verification_email_template.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,6 @@ class TestCreateCustomVerificationEmailT
             'TemplateSubject': self.template_subject,
             'TemplateContent': self.template_content,
             'SuccessRedirectionURL': self.success_redirection_url,
-            'FailureRedirectionURL': self.failure_redirection_url
+            'FailureRedirectionURL': self.failure_redirection_url,
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/sesv2/test_put_account_details.py 2.31.35-1/tests/functional/sesv2/test_put_account_details.py
--- 2.23.6-1/tests/functional/sesv2/test_put_account_details.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sesv2/test_put_account_details.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestPutAccountDetails(BaseAWSCommandParamsTest):
-
     prefix = 'sesv2 put-account-details'
 
     def test_put_account_details(self):
@@ -26,6 +25,6 @@ class TestPutAccountDetails(BaseAWSComma
         result = {
             'WebsiteURL': 'https://example.com',
             'MailType': 'MARKETING',
-            'UseCaseDescription': 'Description'
+            'UseCaseDescription': 'Description',
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/sesv2/test_update_custom_verification_email_template.py 2.31.35-1/tests/functional/sesv2/test_update_custom_verification_email_template.py
--- 2.23.6-1/tests/functional/sesv2/test_update_custom_verification_email_template.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sesv2/test_update_custom_verification_email_template.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,6 @@ class TestUpdateCustomVerificationEmailT
             'TemplateSubject': self.template_subject,
             'TemplateContent': self.template_content,
             'SuccessRedirectionURL': self.success_redirection_url,
-            'FailureRedirectionURL': self.failure_redirection_url
+            'FailureRedirectionURL': self.failure_redirection_url,
         }
         self.assert_params_for_cmd(cmdline, result)
diff -pruN 2.23.6-1/tests/functional/sns/test_create_platform_application.py 2.31.35-1/tests/functional/sns/test_create_platform_application.py
--- 2.23.6-1/tests/functional/sns/test_create_platform_application.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sns/test_create_platform_application.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,7 +15,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestCreatePlatformApplication(BaseAWSCommandParamsTest):
-
     prefix = 'sns create-platform-application'
 
     def test_gcm_shorthand(self):
@@ -25,10 +24,14 @@ class TestCreatePlatformApplication(Base
         cmdline += ' --attributes '
         cmdline += 'PlatformCredential=foo,'
         cmdline += 'PlatformPrincipal=bar'
-        result = {'Name': 'gcmpushapp',
-                  'Platform': 'GCM',
-                  'Attributes': {'PlatformCredential': 'foo',
-                                 'PlatformPrincipal': 'bar'}}
+        result = {
+            'Name': 'gcmpushapp',
+            'Platform': 'GCM',
+            'Attributes': {
+                'PlatformCredential': 'foo',
+                'PlatformPrincipal': 'bar',
+            },
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_gcm_json(self):
@@ -36,14 +39,17 @@ class TestCreatePlatformApplication(Base
         cmdline += ' --name gcmpushapp'
         cmdline += ' --platform GCM'
         cmdline += ' --attributes '
-        cmdline += ('{"PlatformCredential":"AIzaSyClE2lcV2zEKTLYYo645zfk2jhQPFeyxDo",'
-                    '"PlatformPrincipal":"There+is+no+principal+for+GCM"}')
+        cmdline += (
+            '{"PlatformCredential":"AIzaSyClE2lcV2zEKTLYYo645zfk2jhQPFeyxDo",'
+            '"PlatformPrincipal":"There+is+no+principal+for+GCM"}'
+        )
         result = {
             'Name': 'gcmpushapp',
             'Platform': 'GCM',
             'Attributes': {
-              'PlatformCredential': 'AIzaSyClE2lcV2zEKTLYYo645zfk2jhQPFeyxDo',
-              'PlatformPrincipal': 'There+is+no+principal+for+GCM'}
+                'PlatformCredential': 'AIzaSyClE2lcV2zEKTLYYo645zfk2jhQPFeyxDo',
+                'PlatformPrincipal': 'There+is+no+principal+for+GCM',
+            },
         }
         self.assert_params_for_cmd(cmdline, result)
 
diff -pruN 2.23.6-1/tests/functional/sqs/test_add_permission.py 2.31.35-1/tests/functional/sqs/test_add_permission.py
--- 2.23.6-1/tests/functional/sqs/test_add_permission.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_add_permission.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestAddPermission(BaseAWSCommandParamsTest):
-
     prefix = 'sqs add-permission'
     queue_url = 'https://queue.amazonaws.com/4444/testcli'
 
@@ -26,10 +25,12 @@ class TestAddPermission(BaseAWSCommandPa
         cmdline += ' --aws-account-ids 888888888888'
         cmdline += ' --actions SendMessage'
         cmdline += ' --label FooBarLabel'
-        result = {'QueueUrl': self.queue_url,
-                  'Actions': ['SendMessage'],
-                  'AWSAccountIds': ['888888888888'],
-                  'Label': 'FooBarLabel'}
+        result = {
+            'QueueUrl': self.queue_url,
+            'Actions': ['SendMessage'],
+            'AWSAccountIds': ['888888888888'],
+            'Label': 'FooBarLabel',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_multiple_accounts(self):
@@ -38,10 +39,12 @@ class TestAddPermission(BaseAWSCommandPa
         cmdline += ' --aws-account-ids 888888888888 999999999999'
         cmdline += ' --actions SendMessage'
         cmdline += ' --label FooBarLabel'
-        result = {'QueueUrl': self.queue_url,
-                  'Actions': ['SendMessage'],
-                  'AWSAccountIds': ['888888888888', '999999999999'],
-                  'Label': 'FooBarLabel'}
+        result = {
+            'QueueUrl': self.queue_url,
+            'Actions': ['SendMessage'],
+            'AWSAccountIds': ['888888888888', '999999999999'],
+            'Label': 'FooBarLabel',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_multiple_actions(self):
@@ -50,10 +53,12 @@ class TestAddPermission(BaseAWSCommandPa
         cmdline += ' --aws-account-ids 888888888888'
         cmdline += ' --actions SendMessage ReceiveMessage'
         cmdline += ' --label FooBarLabel'
-        result = {'QueueUrl': self.queue_url,
-                  'Actions': ['SendMessage', 'ReceiveMessage'],
-                  'AWSAccountIds': ['888888888888'],
-                  'Label': 'FooBarLabel'}
+        result = {
+            'QueueUrl': self.queue_url,
+            'Actions': ['SendMessage', 'ReceiveMessage'],
+            'AWSAccountIds': ['888888888888'],
+            'Label': 'FooBarLabel',
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/sqs/test_change_message_visibility.py 2.31.35-1/tests/functional/sqs/test_change_message_visibility.py
--- 2.23.6-1/tests/functional/sqs/test_change_message_visibility.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_change_message_visibility.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestChangeMessageVisibility(BaseAWSCommandParamsTest):
-
     prefix = 'sqs change-message-visibility'
     queue_url = 'https://queue.amazonaws.com/4444/testcli'
     receipt_handle = 'abcedfghijklmnopqrstuvwxyz'
@@ -26,9 +25,11 @@ class TestChangeMessageVisibility(BaseAW
         cmdline += ' --queue-url %s' % self.queue_url
         cmdline += ' --receipt-handle %s' % self.receipt_handle
         cmdline += ' --visibility-timeout 30'
-        result = {'QueueUrl': self.queue_url,
-                  'ReceiptHandle': self.receipt_handle,
-                  'VisibilityTimeout': 30}
+        result = {
+            'QueueUrl': self.queue_url,
+            'ReceiptHandle': self.receipt_handle,
+            'VisibilityTimeout': 30,
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/sqs/test_create_queue.py 2.31.35-1/tests/functional/sqs/test_create_queue.py
--- 2.23.6-1/tests/functional/sqs/test_create_queue.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_create_queue.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestCreateQueue(BaseAWSCommandParamsTest):
-
     prefix = 'sqs create-queue'
     queue_name = 'foobar'
 
diff -pruN 2.23.6-1/tests/functional/sqs/test_get_queue_attributes.py 2.31.35-1/tests/functional/sqs/test_get_queue_attributes.py
--- 2.23.6-1/tests/functional/sqs/test_get_queue_attributes.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_get_queue_attributes.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestGetQueueAttributes(BaseAWSCommandParamsTest):
-
     prefix = 'sqs get-queue-attributes'
     queue_url = 'https://queue.amazonaws.com/4444/testcli'
 
@@ -28,22 +27,25 @@ class TestGetQueueAttributes(BaseAWSComm
     def test_all(self):
         cmdline = self.prefix + ' --queue-url %s' % self.queue_url
         cmdline += ' --attribute-names All'
-        result = {'QueueUrl': self.queue_url,
-                  'AttributeNames': ['All']}
+        result = {'QueueUrl': self.queue_url, 'AttributeNames': ['All']}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_one(self):
         cmdline = self.prefix + ' --queue-url %s' % self.queue_url
         cmdline += ' --attribute-names VisibilityTimeout'
-        result = {'QueueUrl': self.queue_url,
-                  'AttributeNames': ['VisibilityTimeout']}
+        result = {
+            'QueueUrl': self.queue_url,
+            'AttributeNames': ['VisibilityTimeout'],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_two(self):
         cmdline = self.prefix + ' --queue-url %s' % self.queue_url
         cmdline += ' --attribute-names VisibilityTimeout QueueArn'
-        result = {'QueueUrl': self.queue_url,
-                  'AttributeNames': ['VisibilityTimeout', 'QueueArn']}
+        result = {
+            'QueueUrl': self.queue_url,
+            'AttributeNames': ['VisibilityTimeout', 'QueueArn'],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/sqs/test_list_queues.py 2.31.35-1/tests/functional/sqs/test_list_queues.py
--- 2.23.6-1/tests/functional/sqs/test_list_queues.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_list_queues.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestListQueues(BaseAWSCommandParamsTest):
-
     prefix = 'sqs list-queues'
 
     def test_no_param(self):
diff -pruN 2.23.6-1/tests/functional/sqs/test_purge_queue.py 2.31.35-1/tests/functional/sqs/test_purge_queue.py
--- 2.23.6-1/tests/functional/sqs/test_purge_queue.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_purge_queue.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestPurgeQueue(BaseAWSCommandParamsTest):
-
     prefix = 'sqs purge-queue'
 
     def test_simple(self):
diff -pruN 2.23.6-1/tests/functional/sqs/test_set_queue_attributes.py 2.31.35-1/tests/functional/sqs/test_set_queue_attributes.py
--- 2.23.6-1/tests/functional/sqs/test_set_queue_attributes.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sqs/test_set_queue_attributes.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,28 +11,30 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
 import awscli.clidriver
+from awscli.testutils import BaseAWSCommandParamsTest
 
 
 class TestSetQueueAttributes(BaseAWSCommandParamsTest):
-
     prefix = 'sqs set-queue-attributes'
     queue_url = 'https://queue.amazonaws.com/4444/testcli'
 
     def test_one(self):
         cmdline = self.prefix + ' --queue-url %s' % self.queue_url
         cmdline += ' --attributes {"VisibilityTimeout":"15"}'
-        result = {'QueueUrl': self.queue_url,
-                  'Attributes': {
-                      'VisibilityTimeout': '15'}}
+        result = {
+            'QueueUrl': self.queue_url,
+            'Attributes': {'VisibilityTimeout': '15'},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_shorthand(self):
         cmdline = self.prefix + ' --queue-url %s' % self.queue_url
         cmdline += ' --attributes VisibilityTimeout=15'
-        result = {'QueueUrl': self.queue_url,
-                  'Attributes': {'VisibilityTimeout': '15'}}
+        result = {
+            'QueueUrl': self.queue_url,
+            'Attributes': {'VisibilityTimeout': '15'},
+        }
         self.assert_params_for_cmd(cmdline, result)
 
 
diff -pruN 2.23.6-1/tests/functional/ssm/test_start_session.py 2.31.35-1/tests/functional/ssm/test_start_session.py
--- 2.23.6-1/tests/functional/ssm/test_start_session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/ssm/test_start_session.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,17 @@
 import errno
 import json
 
-from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import BaseAWSHelpOutputTest
-from awscli.testutils import create_clidriver, mock, temporary_file
 from botocore.exceptions import ProfileNotFound
 
+from awscli.clidriver import AWSCLIEntryPoint
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    create_clidriver,
+    mock,
+    temporary_file,
+)
+
 
 class TestSessionManager(BaseAWSCommandParamsTest):
     @mock.patch('awscli.customizations.sessionmanager.check_call')
@@ -71,10 +76,10 @@ class TestSessionManager(BaseAWSCommandP
         expected_env.update({ssm_env_name: json.dumps(expected_response)})
 
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'StartSession')
-        self.assertEqual(self.operations_called[0][1],
-                         {'Target': 'instance-id'})
+        self.assertEqual(self.operations_called[0][0].name, 'StartSession')
+        self.assertEqual(
+            self.operations_called[0][1], {'Target': 'instance-id'}
+        )
 
         mock_check_call.assert_called_once_with(
             [
@@ -95,8 +100,7 @@ class TestSessionManager(BaseAWSCommandP
         self, mock_check_output, mock_check_call
     ):
         cmdline = (
-            "ssm start-session --target instance-id "
-            "--profile user_profile"
+            "ssm start-session --target instance-id " "--profile user_profile"
         )
         mock_check_call.return_value = 0
         mock_check_output.return_value = "1.2.500.0\n"
@@ -144,10 +148,10 @@ class TestSessionManager(BaseAWSCommandP
             self.entry_point = AWSCLIEntryPoint(self.driver)
             self.run_cmd(cmdline, expected_rc=0)
 
-        self.assertEqual(self.operations_called[0][0].name,
-                         'StartSession')
-        self.assertEqual(self.operations_called[0][1],
-                         {'Target': 'instance-id'})
+        self.assertEqual(self.operations_called[0][0].name, 'StartSession')
+        self.assertEqual(
+            self.operations_called[0][1], {'Target': 'instance-id'}
+        )
         mock_check_call.assert_called_once_with(
             [
                 "session-manager-plugin",
@@ -203,10 +207,10 @@ class TestSessionManager(BaseAWSCommandP
             self.entry_point = AWSCLIEntryPoint(self.driver)
             self.run_cmd(cmdline, expected_rc=0)
 
-        self.assertEqual(self.operations_called[0][0].name,
-                         'StartSession')
-        self.assertEqual(self.operations_called[0][1],
-                         {'Target': 'instance-id'})
+        self.assertEqual(self.operations_called[0][0].name, 'StartSession')
+        self.assertEqual(
+            self.operations_called[0][1], {'Target': 'instance-id'}
+        )
         mock_check_call.assert_called_once_with(
             [
                 "session-manager-plugin",
@@ -259,10 +263,10 @@ class TestSessionManager(BaseAWSCommandP
             self.entry_point = AWSCLIEntryPoint(self.driver)
             self.run_cmd(cmdline, expected_rc=0)
 
-        self.assertEqual(self.operations_called[0][0].name,
-                         'StartSession')
-        self.assertEqual(self.operations_called[0][1],
-                         {'Target': 'instance-id'})
+        self.assertEqual(self.operations_called[0][0].name, 'StartSession')
+        self.assertEqual(
+            self.operations_called[0][1], {'Target': 'instance-id'}
+        )
         mock_check_call.assert_called_once_with(
             [
                 "session-manager-plugin",
@@ -278,8 +282,7 @@ class TestSessionManager(BaseAWSCommandP
 
     def test_start_session_with_user_profile_not_exist(self):
         cmdline = (
-            "ssm start-session --target instance-id "
-            "--profile user_profile"
+            "ssm start-session --target instance-id " "--profile user_profile"
         )
         with temporary_file('w') as f:
             f.write(
@@ -301,7 +304,7 @@ class TestSessionManager(BaseAWSCommandP
             except ProfileNotFound as e:
                 self.assertIn(
                     'The config profile (user_profile) could not be found',
-                    str(e)
+                    str(e),
                 )
 
     @mock.patch('awscli.customizations.sessionmanager.check_call')
@@ -318,15 +321,11 @@ class TestSessionManager(BaseAWSCommandP
             }
         ]
         self.run_cmd(cmdline, expected_rc=255)
-        self.assertEqual(
-            self.operations_called[0][0].name, "StartSession"
-        )
+        self.assertEqual(self.operations_called[0][0].name, "StartSession")
         self.assertEqual(
             self.operations_called[0][1], {"Target": "instance-id"}
         )
-        self.assertEqual(
-            self.operations_called[1][0].name, "TerminateSession"
-        )
+        self.assertEqual(self.operations_called[1][0].name, "TerminateSession")
         self.assertEqual(
             self.operations_called[1][1], {"SessionId": "session-id"}
         )
@@ -346,14 +345,14 @@ class TestSessionManager(BaseAWSCommandP
             }
         ]
         self.run_cmd(cmdline, expected_rc=255)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'StartSession')
-        self.assertEqual(self.operations_called[0][1],
-                         {'Target': 'instance-id'})
-        self.assertEqual(self.operations_called[1][0].name,
-                         'TerminateSession')
-        self.assertEqual(self.operations_called[1][1],
-                         {'SessionId': 'session-id'})
+        self.assertEqual(self.operations_called[0][0].name, 'StartSession')
+        self.assertEqual(
+            self.operations_called[0][1], {'Target': 'instance-id'}
+        )
+        self.assertEqual(self.operations_called[1][0].name, 'TerminateSession')
+        self.assertEqual(
+            self.operations_called[1][1], {'SessionId': 'session-id'}
+        )
 
 
 class TestHelpOutput(BaseAWSHelpOutputTest):
diff -pruN 2.23.6-1/tests/functional/sso/__init__.py 2.31.35-1/tests/functional/sso/__init__.py
--- 2.23.6-1/tests/functional/sso/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sso/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,11 +14,13 @@ import time
 import uuid
 
 from awscli.clidriver import AWSCLIEntryPoint
-from awscli.customizations.sso.utils import OpenBrowserHandler, AuthCodeFetcher
-from awscli.testutils import create_clidriver
-from awscli.testutils import FileCreator
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import mock
+from awscli.customizations.sso.utils import AuthCodeFetcher, OpenBrowserHandler
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    create_clidriver,
+    mock,
+)
 
 
 class BaseSSOTest(BaseAWSCommandParamsTest):
@@ -37,7 +39,7 @@ class BaseSSOTest(BaseAWSCommandParamsTe
         self.token_cache_dir = self.files.full_path('token-cache')
         self.token_cache_dir_patch = mock.patch(
             'awscli.customizations.sso.utils.SSO_TOKEN_DIR',
-            self.token_cache_dir
+            self.token_cache_dir,
         )
         self.token_cache_dir_patch.start()
         self.open_browser_mock = mock.Mock(spec=OpenBrowserHandler)
@@ -48,14 +50,13 @@ class BaseSSOTest(BaseAWSCommandParamsTe
         self.open_browser_patch.start()
 
         self.fetcher_mock = mock.Mock(spec=AuthCodeFetcher)
-        self.fetcher_mock.return_value.redirect_uri_without_port.return_value = (
-            'http://127.0.0.1/oauth/callback'
-        )
+        self.fetcher_mock.return_value.redirect_uri_without_port.return_value = 'http://127.0.0.1/oauth/callback'
         self.fetcher_mock.return_value.redirect_uri_with_port.return_value = (
             'http://127.0.0.1:55555/oauth/callback'
         )
         self.fetcher_mock.return_value.get_auth_code_and_state.return_value = (
-            "abc", "00000000-0000-0000-0000-000000000000"
+            "abc",
+            "00000000-0000-0000-0000-000000000000",
         )
         self.auth_code_fetcher_patch = mock.patch(
             'awscli.customizations.sso.utils.AuthCodeFetcher',
@@ -80,8 +81,9 @@ class BaseSSOTest(BaseAWSCommandParamsTe
         self.uuid_patch.stop()
         self.token_cache_dir_patch.stop()
 
-    def add_oidc_device_responses(self, access_token,
-                                  include_register_response=True):
+    def add_oidc_device_responses(
+        self, access_token, include_register_response=True
+    ):
         responses = [
             # StartDeviceAuthorization response
             {
@@ -103,7 +105,7 @@ class BaseSSOTest(BaseAWSCommandParamsTe
                 'expiresIn': self.expires_in,
                 'tokenType': 'Bearer',
                 'accessToken': access_token,
-            }
+            },
         ]
         if include_register_response:
             responses.insert(
@@ -112,12 +114,13 @@ class BaseSSOTest(BaseAWSCommandParamsTe
                     'clientSecretExpiresAt': self.expiration_time,
                     'clientId': 'device-client-id',
                     'clientSecret': 'device-client-secret',
-                }
+                },
             )
         self.parsed_responses = responses
 
-    def add_oidc_auth_code_responses(self, access_token,
-                                     include_register_response=True):
+    def add_oidc_auth_code_responses(
+        self, access_token, include_register_response=True
+    ):
         responses = [
             # CreateToken responses
             {
@@ -133,7 +136,7 @@ class BaseSSOTest(BaseAWSCommandParamsTe
                     'clientSecretExpiresAt': self.expiration_time,
                     'clientId': 'auth-client-id',
                     'clientSecret': 'auth-client-secret',
-                }
+                },
             )
         self.parsed_responses = responses
 
@@ -141,10 +144,10 @@ class BaseSSOTest(BaseAWSCommandParamsTe
         self.assertIn(expected_region, self.last_request_dict['url'])
 
     def assert_device_browser_handler_called_with(
-            self,
-            userCode,
-            verificationUri,
-            verificationUriComplete,
+        self,
+        userCode,
+        verificationUri,
+        verificationUriComplete,
     ):
         # assert_called_with is matching the __init__ parameters instead of
         # __call__, so verify the arguments we're interested in this way
@@ -152,7 +155,9 @@ class BaseSSOTest(BaseAWSCommandParamsTe
         _, kwargs = self.open_browser_mock.return_value.call_args
         self.assertEqual(userCode, kwargs['userCode'])
         self.assertEqual(verificationUri, kwargs['verificationUri'])
-        self.assertEqual(verificationUriComplete, kwargs['verificationUriComplete'])
+        self.assertEqual(
+            verificationUriComplete, kwargs['verificationUriComplete']
+        )
 
     def assert_auth_browser_handler_called_with(self, expected_scopes):
         # The endpoint is subject to the endpoint rules, and the
diff -pruN 2.23.6-1/tests/functional/sso/test_login.py 2.31.35-1/tests/functional/sso/test_login.py
--- 2.23.6-1/tests/functional/sso/test_login.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sso/test_login.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,20 +25,20 @@ class TestLoginCommand(BaseSSOTest):
     )
 
     def assert_cache_contains_registration(
-            self,
-            start_url,
-            session_name,
-            scopes,
-            expected_client_id):
+        self, start_url, session_name, scopes, expected_client_id
+    ):
         cached_files = os.listdir(self.token_cache_dir)
 
         cached_registration_filename = self._get_cached_registration_filename(
-            start_url, session_name, scopes)
+            start_url, session_name, scopes
+        )
 
         self.assertIn(cached_registration_filename, cached_files)
         self.assertEqual(
-            self._get_cached_response(cached_registration_filename)['clientId'],
-            expected_client_id
+            self._get_cached_response(cached_registration_filename)[
+                'clientId'
+            ],
+            expected_client_id,
         )
 
     def assert_cache_contains_token(
@@ -57,10 +57,12 @@ class TestLoginCommand(BaseSSOTest):
         self.assertIn(cached_token_filename, cached_files)
         self.assertEqual(
             self._get_cached_response(cached_token_filename)['accessToken'],
-            expected_token
+            expected_token,
         )
 
-    def _get_cached_registration_filename(self, start_url, session_name, scopes):
+    def _get_cached_registration_filename(
+        self, start_url, session_name, scopes
+    ):
         args = {
             'tool': 'botocore',
             'startUrl': start_url,
@@ -79,14 +81,14 @@ class TestLoginCommand(BaseSSOTest):
 
     def _get_cached_response(self, token_filename):
         token_path = os.path.join(self.token_cache_dir, token_filename)
-        with open(token_path, 'r') as f:
+        with open(token_path) as f:
             cached_response = json.loads(f.read())
             return cached_response
 
     def assert_cache_token_expiration_time_format_is_correct(self):
         token_filename = self._get_cached_token_filename(self.start_url, None)
         token_path = os.path.join(self.token_cache_dir, token_filename)
-        with open(token_path, 'r') as f:
+        with open(token_path) as f:
             cached_response = json.loads(f.read())
             self.assertIsNotNone(
                 self._TIMESTAMP_FORMAT_PATTERN.match(
@@ -104,8 +106,7 @@ class TestLoginCommand(BaseSSOTest):
             'https://sso.verify',
         )
         self.assert_cache_contains_token(
-            start_url=self.start_url,
-            expected_token=self.access_token
+            start_url=self.start_url, expected_token=self.access_token
         )
 
     def test_login_implicit_device(self):
@@ -120,8 +121,7 @@ class TestLoginCommand(BaseSSOTest):
             'https://sso.verify',
         )
         self.assert_cache_contains_token(
-            start_url=self.start_url,
-            expected_token=self.access_token
+            start_url=self.start_url, expected_token=self.access_token
         )
 
     def test_login_device_no_browser(self):
@@ -131,8 +131,7 @@ class TestLoginCommand(BaseSSOTest):
         self.open_browser_mock.assert_not_called()
         self.assert_used_expected_sso_region(expected_region=self.sso_region)
         self.assert_cache_contains_token(
-            start_url=self.start_url,
-            expected_token=self.access_token
+            start_url=self.start_url, expected_token=self.access_token
         )
 
     def test_login_auth_no_browser(self):
@@ -147,12 +146,12 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='auth-client-id'
+            expected_client_id='auth-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
             expected_token=self.access_token,
-            session_name='test-session'
+            session_name='test-session',
         )
 
     def test_login_device_forces_refresh(self):
@@ -161,7 +160,8 @@ class TestLoginCommand(BaseSSOTest):
         # The register response from the first login should have been
         # cached.
         self.add_oidc_device_responses(
-            'new.token', include_register_response=False)
+            'new.token', include_register_response=False
+        )
         self.run_cmd('sso login --use-device-code')
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -176,17 +176,19 @@ class TestLoginCommand(BaseSSOTest):
         # The register response from the first login should have been
         # cached.
         self.add_oidc_auth_code_responses(
-            'new.token', include_register_response=False)
+            'new.token', include_register_response=False
+        )
         self.run_cmd('sso login')
         self.assert_cache_contains_token(
             start_url=self.start_url,
             expected_token='new.token',
-            session_name='test-session'
+            session_name='test-session',
         )
 
     def test_login_auth_after_device_forces_refresh(self):
         self.set_config_file_content(
-            content=self.get_sso_session_config('test-session'))
+            content=self.get_sso_session_config('test-session')
+        )
         self.add_oidc_device_responses(self.access_token)
         self.run_cmd('sso login --use-device-code')
         # The register response from the first login should have been
@@ -197,37 +199,36 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='auth-client-id'
+            expected_client_id='auth-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
             expected_token='new.token',
-            session_name='test-session'
+            session_name='test-session',
         )
 
     def test_login_device_no_sso_configuration(self):
         self.set_config_file_content(content='')
-        _, stderr, _ = self.run_cmd('sso login --use-device-code',
-                                    expected_rc=253)
+        _, stderr, _ = self.run_cmd(
+            'sso login --use-device-code', expected_rc=253
+        )
         self.assertIn(
-            'Missing the following required SSO configuration',
-            stderr
+            'Missing the following required SSO configuration', stderr
         )
 
     def test_login_auth_no_sso_configuration(self):
         self.set_config_file_content(content='')
         _, stderr, _ = self.run_cmd('sso login', expected_rc=253)
         self.assertIn(
-            'Missing the following required SSO configuration',
-            stderr
+            'Missing the following required SSO configuration', stderr
         )
 
     def test_login_device_minimal_sso_configuration(self):
         content = (
             '[default]\n'
-            'sso_start_url={start_url}\n'
-            'sso_region={sso_region}\n'
-        ).format(start_url=self.start_url, sso_region=self.sso_region)
+            f'sso_start_url={self.start_url}\n'
+            f'sso_region={self.sso_region}\n'
+        )
         self.set_config_file_content(content=content)
         self.add_oidc_device_responses(self.access_token)
         self.run_cmd('sso login')
@@ -238,22 +239,17 @@ class TestLoginCommand(BaseSSOTest):
             'https://sso.verify',
         )
         self.assert_cache_contains_token(
-            start_url=self.start_url,
-            expected_token=self.access_token
+            start_url=self.start_url, expected_token=self.access_token
         )
 
     def test_login_device_partially_missing_sso_configuration(self):
-        content = (
-            '[default]\n'
-            'sso_start_url=%s\n' % self.start_url
-        )
+        content = '[default]\n' 'sso_start_url=%s\n' % self.start_url
         self.set_config_file_content(content=content)
         _, stderr, _ = self.run_cmd(
             'sso login --use-device-code', expected_rc=253
         )
         self.assertIn(
-            'Missing the following required SSO configuration',
-            stderr
+            'Missing the following required SSO configuration', stderr
         )
         self.assertIn('sso_region', stderr)
         self.assertNotIn('sso_start_url', stderr)
@@ -265,8 +261,7 @@ class TestLoginCommand(BaseSSOTest):
         self.run_cmd('sso login --use-device-code')
         self.assert_used_expected_sso_region(expected_region=self.sso_region)
         self.assert_cache_contains_token(
-            start_url=self.start_url,
-            expected_token=self.access_token
+            start_url=self.start_url, expected_token=self.access_token
         )
         self.assert_cache_token_expiration_time_format_is_correct()
 
@@ -285,7 +280,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='device-client-id'
+            expected_client_id='device-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -304,7 +299,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='auth-client-id'
+            expected_client_id='auth-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -314,7 +309,8 @@ class TestLoginCommand(BaseSSOTest):
 
     def test_login_device_sso_with_explicit_sso_session_arg(self):
         content = self.get_sso_session_config(
-            'test-session', include_profile=False)
+            'test-session', include_profile=False
+        )
         self.set_config_file_content(content=content)
         self.add_oidc_device_responses(self.access_token)
         self.run_cmd('sso login --sso-session test-session --use-device-code')
@@ -328,7 +324,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='device-client-id'
+            expected_client_id='device-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -338,7 +334,8 @@ class TestLoginCommand(BaseSSOTest):
 
     def test_login_auth_sso_with_explicit_sso_session_arg(self):
         content = self.get_sso_session_config(
-            'test-session', include_profile=False)
+            'test-session', include_profile=False
+        )
         self.set_config_file_content(content=content)
         self.add_oidc_auth_code_responses(self.access_token)
         self.run_cmd('sso login --sso-session test-session')
@@ -348,7 +345,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='auth-client-id'
+            expected_client_id='auth-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -372,7 +369,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='device-client-id'
+            expected_client_id='device-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -395,7 +392,7 @@ class TestLoginCommand(BaseSSOTest):
             start_url=self.start_url,
             session_name='test-session',
             scopes=self.registration_scopes,
-            expected_client_id='auth-client-id'
+            expected_client_id='auth-client-id',
         )
         self.assert_cache_contains_token(
             start_url=self.start_url,
@@ -407,72 +404,58 @@ class TestLoginCommand(BaseSSOTest):
         self.assertEqual(params.get('scopes'), self.registration_scopes)
 
     def test_login_sso_session_missing_config(self):
-        content = (
-            f'[default]\n'
-            f'sso_session=test\n'
-            f'[sso-session test]\n'
-        )
+        content = '[default]\n' 'sso_session=test\n' '[sso-session test]\n'
         self.set_config_file_content(content=content)
         _, stderr, _ = self.run_cmd('sso login', expected_rc=253)
         self.assertIn(
-            'SSO configuration values: sso_start_url, sso_region',
-            stderr
+            'SSO configuration values: sso_start_url, sso_region', stderr
         )
 
     def test_login_sso_session_missing(self):
-        content = (
-            f'[default]\n'
-            f'sso_session=test\n'
-        )
+        content = '[default]\n' 'sso_session=test\n'
         self.set_config_file_content(content=content)
         _, stderr, _ = self.run_cmd('sso login', expected_rc=253)
         self.assertIn('sso-session does not exist: "test"', stderr)
 
     def test_login_auth_sso_no_authorization_code_throws_error(self):
         self.fetcher_mock.return_value.get_auth_code_and_state.return_value = (
-            None, None
+            None,
+            None,
         )
         content = self.get_sso_session_config('test-session')
         self.set_config_file_content(content=content)
         self.add_oidc_auth_code_responses(self.access_token)
 
-        _, stderr, _ = self.run_cmd(
-            'sso login', expected_rc=255
-        )
-        self.assertIn(
-            'Failed to retrieve an authorization code.',
-            stderr
-        )
+        _, stderr, _ = self.run_cmd('sso login', expected_rc=255)
+        self.assertIn('Failed to retrieve an authorization code.', stderr)
 
     def test_login_auth_sso_state_mismatch_throws_error(self):
         self.fetcher_mock.return_value.get_auth_code_and_state.return_value = (
-            "abc", '00000000-0000-0000-0000-000000000001'
+            "abc",
+            '00000000-0000-0000-0000-000000000001',
         )
         content = self.get_sso_session_config('test-session')
         self.set_config_file_content(content=content)
         self.add_oidc_auth_code_responses(self.access_token)
 
-        _, stderr, _ = self.run_cmd(
-            'sso login', expected_rc=255
-        )
-        self.assertIn(
-            'State parameter does not match expected value.',
-            stderr
-        )
+        _, stderr, _ = self.run_cmd('sso login', expected_rc=255)
+        self.assertIn('State parameter does not match expected value.', stderr)
 
     def test_login_device_no_extra_user_agent(self):
         self.add_oidc_device_responses(self.access_token)
         self.run_cmd('sso login --use-device-code')
-        self.assertNotIn('md/sso#auth',
-                         self.last_request_dict['headers']['User-Agent'])
+        self.assertNotIn(
+            'md/sso#auth', self.last_request_dict['headers']['User-Agent']
+        )
 
     def test_login_auth_includes_extra_user_agent(self):
         content = self.get_sso_session_config('test-session')
         self.set_config_file_content(content=content)
         self.add_oidc_auth_code_responses(self.access_token)
         self.run_cmd('sso login')
-        self.assertIn('md/sso#auth',
-                      self.last_request_dict['headers']['User-Agent'])
+        self.assertIn(
+            'md/sso#auth', self.last_request_dict['headers']['User-Agent']
+        )
 
     @mock.patch('botocore.session.Session.create_client')
     def test_login_custom_ca(self, create_client_patch):
@@ -480,13 +463,10 @@ class TestLoginCommand(BaseSSOTest):
         # but it does get far enough to verify that the internal SSO-OIDC
         # client is created with the custom CA bundle
         self.run_cmd(
-            'sso login --ca-bundle /path/to/ca/bundle.pem',
-            expected_rc=255
+            'sso login --ca-bundle /path/to/ca/bundle.pem', expected_rc=255
         )
         create_client_patch.assert_called_once_with(
-            'sso-oidc',
-            config=mock.ANY,
-            verify='/path/to/ca/bundle.pem'
+            'sso-oidc', config=mock.ANY, verify='/path/to/ca/bundle.pem'
         )
 
     @mock.patch('botocore.session.Session.create_client')
@@ -494,10 +474,7 @@ class TestLoginCommand(BaseSSOTest):
         # Profile and mock responses aren't wired up so this fails with 255,
         # but it does get far enough to verify that the internal SSO-OIDC
         # client is created with verify=False
-        self.run_cmd(
-            'sso login --no-verify-ssl',
-            expected_rc=255
-        )
+        self.run_cmd('sso login --no-verify-ssl', expected_rc=255)
         create_client_patch.assert_called_once_with(
             'sso-oidc',
             config=mock.ANY,
diff -pruN 2.23.6-1/tests/functional/sso/test_logout.py 2.31.35-1/tests/functional/sso/test_logout.py
--- 2.23.6-1/tests/functional/sso/test_logout.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/sso/test_logout.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,13 +22,13 @@ class TestLogoutCommand(BaseSSOTest):
         super(TestLogoutCommand, self).setUp()
         self.logout_token_cache_dir_patch = mock.patch(
             'awscli.customizations.sso.logout.SSO_TOKEN_DIR',
-            self.token_cache_dir
+            self.token_cache_dir,
         )
         self.logout_token_cache_dir_patch.start()
         self.aws_creds_cache_dir = self.files.full_path('aws-creds-cache')
         self.aws_creds_cache_dir_patch = mock.patch(
             'awscli.customizations.sso.logout.AWS_CREDS_CACHE_DIR',
-            self.aws_creds_cache_dir
+            self.aws_creds_cache_dir,
         )
         self.aws_creds_cache_dir_patch.start()
 
@@ -54,7 +54,7 @@ class TestLogoutCommand(BaseSSOTest):
                 'AccessKeyId': 'access-key',
                 'SecretAccessKey': 'secret-key',
                 "SessionToken": 'session-token',
-                "Expiration": '2020-01-23T20:48:59UTC'
+                "Expiration": '2020-01-23T20:48:59UTC',
             },
         }
         if from_sso:
@@ -89,9 +89,11 @@ class TestLogoutCommand(BaseSSOTest):
 
     def test_logout_ignores_non_sso_tokens(self):
         registration_token = os.path.join(
-            self.token_cache_dir, 'botocore-client-id.json')
+            self.token_cache_dir, 'botocore-client-id.json'
+        )
         self.files.create_file(
-            registration_token, json.dumps({'clientId': 'myid'}))
+            registration_token, json.dumps({'clientId': 'myid'})
+        )
         self.run_cmd('sso logout')
         self.assert_file_exists(registration_token)
 
diff -pruN 2.23.6-1/tests/functional/test_alias.py 2.31.35-1/tests/functional/test_alias.py
--- 2.23.6-1/tests/functional/test_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,16 @@
 import os
 
 from awscli.alias import AliasLoader, register_alias_commands
-from awscli.testutils import skip_if_windows
-from awscli.testutils import FileCreator
-from awscli.testutils import BaseAWSCommandParamsTest
 from awscli.customizations.commands import BasicCommand
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    skip_if_windows,
+)
 
 
 # We need to test that aliases work with custom BasicCommand,
-# but the actual custom commands in the CLI can be complex and 
+# but the actual custom commands in the CLI can be complex and
 # don't want the alias tests to fail if they are updated with new API
 # calls they invoke.  This custom command is a simple wrapper to the
 # aws resourcegroupstaggingapi get-resources command.
@@ -54,10 +56,10 @@ class TestAliases(BaseAWSCommandParamsTe
         # injector so we can swap in our own version that points to a
         # test file.
         self.event_emitter.unregister(
-            'building-command-table', unique_id='cli-alias-injector')
+            'building-command-table', unique_id='cli-alias-injector'
+        )
         register_alias_commands(
-            self.event_emitter,
-            alias_filename=self.alias_file
+            self.event_emitter, alias_filename=self.alias_file
         )
 
     def tearDown(self):
@@ -68,8 +70,9 @@ class TestAliases(BaseAWSCommandParamsTe
         with open(self.alias_file, 'a+') as f:
             f.write('%s = %s\n' % (alias_name, alias_value))
 
-    def assert_single_operation_called(self, cmdline,
-                                       service_name, operation_name, params):
+    def assert_single_operation_called(
+        self, cmdline, service_name, operation_name, params
+    ):
         self.assert_params_for_cmd(cmdline, params)
         operations_called = self.operations_called
         self.assertEqual(len(operations_called), 1)
@@ -92,7 +95,8 @@ class TestAliases(BaseAWSCommandParamsTe
 
     def test_subcommand_alias_with_additonal_params(self):
         self.add_alias(
-            'my-alias', 'ec2 describe-regions --region-names us-east-1')
+            'my-alias', 'ec2 describe-regions --region-names us-east-1'
+        )
         cmdline = 'my-alias'
         self.assert_single_operation_called(
             cmdline,
@@ -114,13 +118,14 @@ class TestAliases(BaseAWSCommandParamsTe
     def test_subcommand_alias_with_global_params(self):
         self.add_alias(
             'my-alias',
-            'ec2 describe-regions --query Regions[].RegionName --output text')
+            'ec2 describe-regions --query Regions[].RegionName --output text',
+        )
         self.parsed_responses = [
             {
                 'Regions': [
                     {
                         'Endpoint': 'ec2.us-east-1.amazonaws.com',
-                        'RegionName': 'us-east-1'
+                        'RegionName': 'us-east-1',
                     }
                 ]
             }
@@ -129,8 +134,7 @@ class TestAliases(BaseAWSCommandParamsTe
         stdout, _, _ = self.assert_params_for_cmd(cmdline, {})
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(
-            self.operations_called[0][0].service_model.service_name,
-            'ec2'
+            self.operations_called[0][0].service_model.service_name, 'ec2'
         )
         self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')
         self.assertEqual(stdout.strip(), 'us-east-1')
@@ -142,7 +146,7 @@ class TestAliases(BaseAWSCommandParamsTe
                 'Regions': [
                     {
                         'Endpoint': 'ec2.us-east-1.amazonaws.com',
-                        'RegionName': 'us-east-1'
+                        'RegionName': 'us-east-1',
                     }
                 ]
             }
@@ -153,8 +157,7 @@ class TestAliases(BaseAWSCommandParamsTe
         stdout, _, _ = self.assert_params_for_cmd(cmdline, {})
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(
-            self.operations_called[0][0].service_model.service_name,
-            'ec2'
+            self.operations_called[0][0].service_model.service_name, 'ec2'
         )
         self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')
         self.assertEqual(stdout.strip(), 'us-east-1')
@@ -166,7 +169,7 @@ class TestAliases(BaseAWSCommandParamsTe
                 'Regions': [
                     {
                         'Endpoint': 'ec2.us-east-1.amazonaws.com',
-                        'RegionName': 'us-east-1'
+                        'RegionName': 'us-east-1',
                     }
                 ]
             }
@@ -177,8 +180,7 @@ class TestAliases(BaseAWSCommandParamsTe
         stdout, _, _ = self.assert_params_for_cmd(cmdline, {})
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(
-            self.operations_called[0][0].service_model.service_name,
-            'ec2'
+            self.operations_called[0][0].service_model.service_name, 'ec2'
         )
         self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')
         self.assertEqual(stdout.strip(), 'us-east-1')
@@ -202,8 +204,7 @@ class TestAliases(BaseAWSCommandParamsTe
 
     def test_alias_chaining(self):
         self.add_alias('base-alias', 'ec2 describe-regions')
-        self.add_alias(
-            'wrapper-alias', 'base-alias --region-names us-east-1')
+        self.add_alias('wrapper-alias', 'base-alias --region-names us-east-1')
         cmdline = 'wrapper-alias'
         self.assert_single_operation_called(
             cmdline,
@@ -216,14 +217,15 @@ class TestAliases(BaseAWSCommandParamsTe
         self.add_alias('base-alias', 'ec2 describe-regions')
         self.add_alias(
             'wrapper-alias',
-            'base-alias --query Regions[].RegionName --output text')
+            'base-alias --query Regions[].RegionName --output text',
+        )
         cmdline = 'wrapper-alias'
         self.parsed_responses = [
             {
                 'Regions': [
                     {
                         'Endpoint': 'ec2.us-east-1.amazonaws.com',
-                        'RegionName': 'us-east-1'
+                        'RegionName': 'us-east-1',
                     }
                 ]
             }
@@ -231,8 +233,7 @@ class TestAliases(BaseAWSCommandParamsTe
         stdout, _, _ = self.assert_params_for_cmd(cmdline, {})
         self.assertEqual(len(self.operations_called), 1)
         self.assertEqual(
-            self.operations_called[0][0].service_model.service_name,
-            'ec2'
+            self.operations_called[0][0].service_model.service_name, 'ec2'
         )
         self.assertEqual(self.operations_called[0][0].name, 'DescribeRegions')
         self.assertEqual(stdout.strip(), 'us-east-1')
@@ -284,7 +285,9 @@ class TestAliases(BaseAWSCommandParamsTe
     def test_can_shadow_subcommand_alias(self):
         with open(self.alias_file, 'a+') as f:
             f.write('[command ec2]\n')
-            f.write('describe-regions = describe-regions --region-names us-west-2\n')
+            f.write(
+                'describe-regions = describe-regions --region-names us-west-2\n'
+            )
 
         cmdline = 'ec2 describe-regions'
         self.assert_single_operation_called(
@@ -313,13 +316,16 @@ class TestAliases(BaseAWSCommandParamsTe
     def test_can_extend_subcommand_internal_aliases(self):
         with open(self.alias_file, 'a+') as f:
             f.write('[command ec2]\n')
-            f.write('regions = describe-regions '
-                    '--query Regions[].RegionName\n')
+            f.write(
+                'regions = describe-regions ' '--query Regions[].RegionName\n'
+            )
         cmdline = 'ec2 regions --region-names us-west-2'
         self.assert_single_operation_called(
             cmdline,
-            service_name='ec2', operation_name='DescribeRegions',
-            params={'RegionNames': ['us-west-2']})
+            service_name='ec2',
+            operation_name='DescribeRegions',
+            params={'RegionNames': ['us-west-2']},
+        )
 
     def test_operation_level_external_alias(self):
         directory_to_make = os.path.join(self.files.rootdir, 'newdir')
@@ -332,9 +338,11 @@ class TestAliases(BaseAWSCommandParamsTe
     def test_can_create_bag_of_options_alias(self):
         with open(self.alias_file, 'a+') as f:
             f.write('[command cloudformation list-stacks]\n')
-            f.write('created = --stack-status-filter CREATE_COMPLETE '
-                    '--query StackSummaries[].[StackName,StackStatus] '
-                    '--output text\n')
+            f.write(
+                'created = --stack-status-filter CREATE_COMPLETE '
+                '--query StackSummaries[].[StackName,StackStatus] '
+                '--output text\n'
+            )
 
         cmdline = 'cloudformation list-stacks created'
         self.assert_single_operation_called(
@@ -353,7 +361,8 @@ class TestAliases(BaseAWSCommandParamsTe
                 '[command cloudformation list-stacks]\n'
                 'created = --stack-status-filter CREATE_COMPLETE '
                 '--query StackSummaries[].[StackName,StackStatus] '
-                '--output text\n')
+                '--output text\n'
+            )
 
         cmdline = 'cfn stacks created'
         self.assert_single_operation_called(
@@ -378,14 +387,19 @@ class TestAliases(BaseAWSCommandParamsTe
         # those values with the params specified in the alias definition.
         cmdline = (
             'resourcegroupstaggingapi get-resources mysvc '
-            '--resource-type-filters ecs')
+            '--resource-type-filters ecs'
+        )
         self.assert_single_operation_called(
             cmdline,
             service_name='resourcegroupstaggingapi',
             operation_name='GetResources',
-            params={'TagFilters': [{'Key': 'foo', 'Values': ['bar']},
-                                   {'Key': 'bar', 'Values': ['baz']}],
-                    'ResourceTypeFilters': ['ecs']},
+            params={
+                'TagFilters': [
+                    {'Key': 'foo', 'Values': ['bar']},
+                    {'Key': 'bar', 'Values': ['baz']},
+                ],
+                'ResourceTypeFilters': ['ecs'],
+            },
         )
 
     def test_can_handle_bag_of_options_with_required_args(self):
@@ -405,31 +419,33 @@ class TestAliases(BaseAWSCommandParamsTe
             'iam create-user test-user',
             service_name='iam',
             operation_name='CreateUser',
-            params={'UserName': 'test-user'}
+            params={'UserName': 'test-user'},
         )
 
     def test_can_handle_bag_of_options_with_custom_command(self):
         self.event_emitter.register(
             'building-command-table.resourcegroupstaggingapi',
-            CustomTestCommand.add_command)
+            CustomTestCommand.add_command,
+        )
         with open(self.alias_file, 'a+') as f:
             f.write('[command resourcegroupstaggingapi resources]\n')
-            f.write(f'mycluster = --resource-types ecs:cluster\n')
+            f.write('mycluster = --resource-types ecs:cluster\n')
         cmdline = 'resourcegroupstaggingapi resources mycluster'
         self.assert_single_operation_called(
             cmdline,
             service_name='resourcegroupstaggingapi',
             operation_name='GetResources',
-            params={'ResourceTypeFilters': ['ecs:cluster']}
+            params={'ResourceTypeFilters': ['ecs:cluster']},
         )
 
     def test_can_handle_custom_bag_of_options_and_overrides(self):
         self.event_emitter.register(
             'building-command-table.resourcegroupstaggingapi',
-            CustomTestCommand.add_command)
+            CustomTestCommand.add_command,
+        )
         with open(self.alias_file, 'a+') as f:
             f.write('[command resourcegroupstaggingapi resources]\n')
-            f.write(f'mycluster = --resource-types ecs:cluster\n')
+            f.write('mycluster = --resource-types ecs:cluster\n')
         cmdline = 'resourcegroupstaggingapi resources mycluster --tags foo=bar'
         # We should merge the cmdline params from the 'mycluster' alias along
         # with the explicitly provided --tags option from cmdline args.
@@ -437,8 +453,10 @@ class TestAliases(BaseAWSCommandParamsTe
             cmdline,
             service_name='resourcegroupstaggingapi',
             operation_name='GetResources',
-            params={'ResourceTypeFilters': ['ecs:cluster'],
-                    'TagFilters': [{'Key': 'foo', 'Values': ['bar']}]},
+            params={
+                'ResourceTypeFilters': ['ecs:cluster'],
+                'TagFilters': [{'Key': 'foo', 'Values': ['bar']}],
+            },
         )
 
     def test_can_handle_multiple_bag_of_options(self):
@@ -466,8 +484,11 @@ class TestAliases(BaseAWSCommandParamsTe
             cmdline,
             service_name='ecs',
             operation_name='DescribeTasks',
-            params={'cluster': 'mycluster', 'tasks': ['foo'],
-                    'include': ['TAGS']},
+            params={
+                'cluster': 'mycluster',
+                'tasks': ['foo'],
+                'include': ['TAGS'],
+            },
         )
 
     def test_can_invoke_custom_test_command(self):
@@ -476,12 +497,15 @@ class TestAliases(BaseAWSCommandParamsTe
         # the test command implementation is wrong.
         self.event_emitter.register(
             'building-command-table.resourcegroupstaggingapi',
-            CustomTestCommand.add_command)
+            CustomTestCommand.add_command,
+        )
         cmdline = 'resourcegroupstaggingapi resources --resource-types ecs --tags foo=bar'
         self.assert_single_operation_called(
             cmdline,
             service_name='resourcegroupstaggingapi',
             operation_name='GetResources',
-            params={'ResourceTypeFilters': ['ecs'],
-                    'TagFilters': [{'Key': 'foo', 'Values': ['bar']}]},
+            params={
+                'ResourceTypeFilters': ['ecs'],
+                'TagFilters': [{'Key': 'foo', 'Values': ['bar']}],
+            },
         )
diff -pruN 2.23.6-1/tests/functional/test_args.py 2.31.35-1/tests/functional/test_args.py
--- 2.23.6-1/tests/functional/test_args.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_args.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,21 +11,21 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import create_clidriver
-from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    create_clidriver,
+)
 
 
 class TestArgsResolution(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestArgsResolution, self).setUp()
         self.files = FileCreator()
-        config_contents = (
-            '[profile bar]\n'
-            'region = us-west-2\n'
-        )
+        config_contents = '[profile bar]\n' 'region = us-west-2\n'
         self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
-            'myconfig', config_contents)
+            'myconfig', config_contents
+        )
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
 
diff -pruN 2.23.6-1/tests/functional/test_clidriver.py 2.31.35-1/tests/functional/test_clidriver.py
--- 2.23.6-1/tests/functional/test_clidriver.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_clidriver.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,22 +14,22 @@ import os
 import re
 import shutil
 
-from tests import RawResponse
-
 import botocore
 
-from awscli.testutils import mock, BaseCLIDriverTest, FileCreator
 from awscli.clidriver import create_clidriver
+from awscli.testutils import BaseCLIDriverTest, FileCreator, mock
+from tests import RawResponse
 
 
-class RegionCapture(object):
+class RegionCapture:
     def __init__(self):
         self.region = None
 
     def __call__(self, request, **kwargs):
         url = request.url
-        region = re.match(
-            r'https://.*?\.(.*?)\.amazonaws\.com', url).groups(1)[0]
+        region = re.match(r'https://.*?\.(.*?)\.amazonaws\.com', url).groups(
+            1
+        )[0]
         self.region = region
 
 
@@ -56,7 +56,7 @@ class TestSession(BaseCLIDriverTest):
             url='http://169.254.169.254/',
             status_code=status_code,
             headers={},
-            raw=RawResponse(body)
+            raw=RawResponse(body),
         )
         self._responses.append(response)
 
@@ -72,8 +72,7 @@ class TestSession(BaseCLIDriverTest):
         # Once a region is fetched form the IMDS server we need to mock an
         # XML response from ec2 so that the CLI driver doesn't throw an error
         # during parsing.
-        self.add_response(
-            b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
+        self.add_response(b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
         capture = RegionCapture()
         self.session.register('before-send.ec2.*', capture)
         self.driver.main(['ec2', 'describe-instances'])
@@ -91,27 +90,28 @@ class TestSession(BaseCLIDriverTest):
         # Once a region is fetched form the IMDS server we need to mock an
         # XML response from ec2 so that the CLI driver doesn't throw an error
         # during parsing.
-        self.add_response(
-            b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
+        self.add_response(b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
         capture = RegionCapture()
         self.session.register('before-send.ec2.*', capture)
         self.driver.main(['ec2', 'describe-instances'])
         self.assertEqual(capture.region, 'us-mars-2')
 
     def test_user_agent_in_request(self):
-        self.add_response(
-            b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
+        self.add_response(b'<?xml version="1.0" ?><foo><bar>text</bar></foo>')
         self.driver.main(['ec2', 'describe-instances'])
         self.assertTrue('User-Agent' in self._send.call_args[0][0].headers)
         self.assertTrue(
-            'aws-cli' in
-            self._send.call_args[0][0].headers['User-Agent'].decode('utf-8'))
+            'aws-cli'
+            in self._send.call_args[0][0].headers['User-Agent'].decode('utf-8')
+        )
         self.assertTrue(
-            'md/installer' in
-            self._send.call_args[0][0].headers['User-Agent'].decode('utf-8'))
+            'md/installer'
+            in self._send.call_args[0][0].headers['User-Agent'].decode('utf-8')
+        )
         self.assertTrue(
-            'md/command' in
-            self._send.call_args[0][0].headers['User-Agent'].decode('utf-8'))
+            'md/command'
+            in self._send.call_args[0][0].headers['User-Agent'].decode('utf-8')
+        )
 
 
 class TestPlugins(BaseCLIDriverTest):
@@ -122,8 +122,10 @@ class TestPlugins(BaseCLIDriverTest):
             self.files.rootdir, 'site-packages'
         )
         self.plugin_module_name = 'add_awscli_cmd_plugin'
-        self.plugin_filename = os.path.join(
-            os.path.dirname(__file__), self.plugin_module_name) + '.py'
+        self.plugin_filename = (
+            os.path.join(os.path.dirname(__file__), self.plugin_module_name)
+            + '.py'
+        )
         self.setup_plugin_site_packages()
 
     def setup_plugin_site_packages(self):
@@ -148,26 +150,24 @@ class TestPlugins(BaseCLIDriverTest):
         self.create_config(
             '[plugins]\n'
             'cli_legacy_plugin_path = %s\n'
-            'myplugin = %s\n' % (
-                self.plugins_site_packages, self.plugin_module_name)
+            'myplugin = %s\n'
+            % (self.plugins_site_packages, self.plugin_module_name)
         )
         clidriver = create_clidriver()
         self.assert_plugin_loaded(clidriver)
 
     def test_plugins_are_not_loaded_when_path_specified(self):
         self.create_config(
-            '[plugins]\n'
-            'myplugin = %s\n' % self.plugin_module_name
+            '[plugins]\n' 'myplugin = %s\n' % self.plugin_module_name
         )
         clidriver = create_clidriver()
         self.assert_plugin_not_loaded(clidriver)
 
     def test_looks_in_all_specified_paths(self):
-        nonexistent_dir = os.path.join(
-            self.files.rootdir, 'no-exist'
-        )
+        nonexistent_dir = os.path.join(self.files.rootdir, 'no-exist')
         plugin_path = os.pathsep.join(
-            [nonexistent_dir, self.plugins_site_packages])
+            [nonexistent_dir, self.plugins_site_packages]
+        )
         self.create_config(
             '[plugins]\n'
             'cli_legacy_plugin_path = %s\n'
diff -pruN 2.23.6-1/tests/functional/test_cliinput.py 2.31.35-1/tests/functional/test_cliinput.py
--- 2.23.6-1/tests/functional/test_cliinput.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_cliinput.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,7 @@
 # language governing permissions and limitations under the License.
 import os
 
-from awscli.testutils import \
-    BaseAWSCommandParamsTest, FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 from awscli.utils import dump_yaml_to_str
 
 
@@ -38,8 +37,9 @@ class TestCLIInputJSON(BaseCLIInputArgum
         cmdline = (
             's3api head-object --cli-input-json file://%s'
         ) % self.input_file
-        self.assert_params_for_cmd(cmdline, params={'Bucket': 'bucket',
-                                                    'Key': 'key'})
+        self.assert_params_for_cmd(
+            cmdline, params={'Bucket': 'bucket', 'Key': 'key'}
+        )
 
     def test_cli_input_json_can_override_param(self):
         cmdline = (
@@ -53,18 +53,18 @@ class TestCLIInputJSON(BaseCLIInputArgum
             's3api head-object --cli-input-json '
             '{"Bucket":"bucket","Key":"key"}'
         )
-        self.assert_params_for_cmd(cmdline, params={'Bucket': 'bucket',
-                                                    'Key': 'key'})
+        self.assert_params_for_cmd(
+            cmdline, params={'Bucket': 'bucket', 'Key': 'key'}
+        )
 
     def test_cli_input_json_missing_required(self):
         # Check that the operation properly throws an error if the json is
         # missing any required arguments and the argument is not on the
         # command line.
-        cmdline = (
-            's3api head-object --cli-input-json {"Key":"foo"}'
+        cmdline = 's3api head-object --cli-input-json {"Key":"foo"}'
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=252, stderr_contains='Missing'
         )
-        self.assert_params_for_cmd(cmdline, expected_rc=252,
-                                   stderr_contains='Missing')
 
     def test_cli_input_json_has_extra_unknown_args(self):
         # Check that the operation properly throws an error if the json
@@ -73,15 +73,18 @@ class TestCLIInputJSON(BaseCLIInputArgum
             's3api head-object --cli-input-json '
             '{"Bucket":"bucket","Key":"key","Foo":"bar"}'
         )
-        self.assert_params_for_cmd(cmdline, expected_rc=252,
-                                   stderr_contains='Unknown')
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=252, stderr_contains='Unknown'
+        )
 
 
 class TestCLIInputYAML(BaseCLIInputArgumentTest):
     def test_input_yaml(self):
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
-            'Bucket: test-bucket\nEncodingType: url'
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
+            'Bucket: test-bucket\nEncodingType: url',
         ]
         self.assert_params_for_cmd(
             command, {'Bucket': 'test-bucket', 'EncodingType': 'url'}
@@ -89,15 +92,19 @@ class TestCLIInputYAML(BaseCLIInputArgum
 
     def test_unknown_params_in_input(self):
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
-            'Bucket: test-bucket\nFoo: bar'
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
+            'Bucket: test-bucket\nFoo: bar',
         ]
         self.run_cmd(command, expected_rc=252)
 
     def test_required_params_missing(self):
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
-            'EncodingType: url'
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
+            'EncodingType: url',
         ]
         self.run_cmd(command, expected_rc=252)
 
@@ -106,8 +113,10 @@ class TestCLIInputYAML(BaseCLIInputArgum
             'input.yml', 'Bucket: test-bucket\nEncodingType: url'
         )
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
-            'file://%s' % filename
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
+            'file://%s' % filename,
         ]
         self.assert_params_for_cmd(
             command, {'Bucket': 'test-bucket', 'EncodingType': 'url'}
@@ -120,15 +129,20 @@ class TestCLIInputYAML(BaseCLIInputArgum
             'Body': b'foo',
         }
         command = [
-            's3api', 'put-object', '--cli-input-yaml', dump_yaml_to_str(self.yaml, expected_args)
+            's3api',
+            'put-object',
+            '--cli-input-yaml',
+            dump_yaml_to_str(self.yaml, expected_args),
         ]
         self.run_cmd(command)
         self.assertEqual(self.last_kwargs['Body'].getvalue(), b'foo')
 
     def test_input_yaml_ignores_comments(self):
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
-            'Bucket: test-bucket # Some comment\nEncodingType: url'
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
+            'Bucket: test-bucket # Some comment\nEncodingType: url',
         ]
         self.assert_params_for_cmd(
             command, {'Bucket': 'test-bucket', 'EncodingType': 'url'}
@@ -136,20 +150,31 @@ class TestCLIInputYAML(BaseCLIInputArgum
 
     def test_errors_when_both_yaml_and_json_provided(self):
         command = [
-            's3api', 'list-objects-v2', '--cli-input-yaml',
+            's3api',
+            'list-objects-v2',
+            '--cli-input-yaml',
             'Bucket: test-bucket # Some comment\nEncodingType: url',
-            '--cli-input-json', '{"Bucket":"bucket","Key":"key"}'
+            '--cli-input-json',
+            '{"Bucket":"bucket","Key":"key"}',
         ]
         self.assert_params_for_cmd(
-            command, expected_rc=252,
-            stderr_contains='Only one --cli-input- parameter may be specified.'
+            command,
+            expected_rc=252,
+            stderr_contains='Only one --cli-input- parameter may be specified.',
         )
 
+
 class TestBinaryInput(BaseCLIInputArgumentTest):
     def test_converts_base64_to_binary_in_base64_mode(self):
         command = [
-            'kms', 'encrypt', '--cli-binary-format', 'base64',
-            '--key-id', 'test', '--plaintext', 'Zm9v'
+            'kms',
+            'encrypt',
+            '--cli-binary-format',
+            'base64',
+            '--key-id',
+            'test',
+            '--plaintext',
+            'Zm9v',
         ]
         params = {
             'KeyId': 'test',
@@ -159,8 +184,14 @@ class TestBinaryInput(BaseCLIInputArgume
 
     def test_preserved_input_value_in_raw_in_base64_out_mode(self):
         command = [
-            'kms', 'encrypt', '--cli-binary-format', 'raw-in-base64-out',
-            '--key-id', 'test', '--plaintext', 'Zm9v'
+            'kms',
+            'encrypt',
+            '--cli-binary-format',
+            'raw-in-base64-out',
+            '--key-id',
+            'test',
+            '--plaintext',
+            'Zm9v',
         ]
         params = {
             'KeyId': 'test',
diff -pruN 2.23.6-1/tests/functional/test_document_types.py 2.31.35-1/tests/functional/test_document_types.py
--- 2.23.6-1/tests/functional/test_document_types.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_document_types.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,8 +17,10 @@ import os
 from botocore.loaders import Loader
 
 from awscli.testutils import (
-    create_clidriver, FileCreator, BaseAWSCommandParamsTest,
-    BaseAWSHelpOutputTest
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    FileCreator,
+    create_clidriver,
 )
 
 # NOTE: Typically, the functional tests reuse preexisting models. However
@@ -42,14 +44,11 @@ DOCTYPE_MODEL = {
     "operations": {
         "DescribeResource": {
             "name": "DescribeResource",
-            "http": {
-                "method": "POST",
-                "requestUri": "/"
-            },
+            "http": {"method": "POST", "requestUri": "/"},
             "input": {"shape": "DescribeResourceShape"},
             "output": {"shape": "DescribeResourceShape"},
             "errors": [],
-            "documentation": "<p>Describes resource.</p>"
+            "documentation": "<p>Describes resource.</p>",
         }
     },
     "shapes": {
@@ -62,27 +61,24 @@ DOCTYPE_MODEL = {
                 "MapOfDocTypesParam": {"shape": "MapOfDocTypes"},
                 "NestedListsOfDocTypesParam": {
                     "shape": "NestedListsOfDocTypes"
-                }
-            }
+                },
+            },
         },
         "DocType": {
             "type": "structure",
             "members": {},
             "document": True,
-            "documentation": "<p>Document type</p>"
-        },
-        "ListOfDocTypes": {
-            "type": "list",
-            "member": {"shape": "DocType"}
+            "documentation": "<p>Document type</p>",
         },
+        "ListOfDocTypes": {"type": "list", "member": {"shape": "DocType"}},
         "MapOfDocTypes": {
             "type": "map",
             "key": {"shape": "String"},
-            "value": {"shape": "DocType"}
+            "value": {"shape": "DocType"},
         },
         "NestedListsOfDocTypes": {
             "type": "list",
-            "member": {"shape": "ListOfDocTypes"}
+            "member": {"shape": "ListOfDocTypes"},
         },
         "Mixed": {
             "type": "structure",
@@ -91,13 +87,14 @@ DOCTYPE_MODEL = {
                 "StringMember": {"shape": "String"},
                 "ListOfDocTypes": {"shape": "ListOfDocTypes"},
                 "MapOfDocTypes": {"shape": "MapOfDocTypes"},
-                "NestedListsOfDocTypes": {"shape": "NestedListsOfDocTypes"}
+                "NestedListsOfDocTypes": {"shape": "NestedListsOfDocTypes"},
             },
             "documentation": (
-                "<p>Structure with modeled and document type parameter</p>"),
+                "<p>Structure with modeled and document type parameter</p>"
+            ),
         },
-        "String": {"type": "string"}
-    }
+        "String": {"type": "string"},
+    },
 }
 
 
@@ -106,7 +103,7 @@ def _add_doctype_service_model(file_crea
         model = DOCTYPE_MODEL
     file_creator.create_file(
         os.path.join('doctype', '2011-06-15', 'service-2.json'),
-        json.dumps(model)
+        json.dumps(model),
     )
     data_path = session.get_config_variable('data_path').split(os.pathsep)
     loader = Loader()
@@ -124,8 +121,9 @@ class TestDocumentTypeIO(BaseAWSCommandP
         super(TestDocumentTypeIO, self).tearDown()
         self.files.remove_all()
 
-    def assert_raises_shorthand_syntax_error(self, cmdline,
-                                             stderr_contains=None):
+    def assert_raises_shorthand_syntax_error(
+        self, cmdline, stderr_contains=None
+    ):
         _, stderr, _ = self.run_cmd(cmdline, expected_rc=252)
         if stderr_contains:
             self.assertIn(stderr_contains, stderr)
@@ -139,34 +137,44 @@ class TestDocumentTypeIO(BaseAWSCommandP
 
     def test_can_provide_json_for_doc_type(self):
         cmdline = [
-            'doctype', 'describe-resource', '--doc-type-param',
-            '{"foo":"bar"}'
+            'doctype',
+            'describe-resource',
+            '--doc-type-param',
+            '{"foo":"bar"}',
         ]
         self.assert_params_for_cmd(
-            cmdline, params={'DocTypeParam': {"foo": "bar"}})
+            cmdline, params={'DocTypeParam': {"foo": "bar"}}
+        )
 
     def test_can_provide_json_for_doc_type_with_scalar_value(self):
         cmdline = [
-            'doctype', 'describe-resource', '--doc-type-param',
-            '"json-string"'
+            'doctype',
+            'describe-resource',
+            '--doc-type-param',
+            '"json-string"',
         ]
         self.assert_params_for_cmd(
-            cmdline, params={'DocTypeParam': 'json-string'})
+            cmdline, params={'DocTypeParam': 'json-string'}
+        )
 
     def test_can_provide_json_for_doc_type_in_list(self):
         cmdline = [
-            'doctype', 'describe-resource', '--list-of-doc-types-param',
-            '["foo", {"bar": "baz"}, 1, null]'
+            'doctype',
+            'describe-resource',
+            '--list-of-doc-types-param',
+            '["foo", {"bar": "baz"}, 1, null]',
         ]
         self.assert_params_for_cmd(
             cmdline,
-            params={'ListOfDocTypesParam': ["foo", {"bar": "baz"}, 1, None]}
+            params={'ListOfDocTypesParam': ["foo", {"bar": "baz"}, 1, None]},
         )
 
     def test_can_provide_json_for_doc_type_in_map(self):
         cmdline = [
-            'doctype', 'describe-resource', '--map-of-doc-types-param',
-            '{"key1": "foo", "key2": {"bar": "baz"}, "key3": 1}'
+            'doctype',
+            'describe-resource',
+            '--map-of-doc-types-param',
+            '{"key1": "foo", "key2": {"bar": "baz"}, "key3": 1}',
         ]
         self.assert_params_for_cmd(
             cmdline,
@@ -174,16 +182,17 @@ class TestDocumentTypeIO(BaseAWSCommandP
                 'MapOfDocTypesParam': {
                     "key1": "foo",
                     "key2": {"bar": "baz"},
-                    "key3": 1
+                    "key3": 1,
                 }
-            }
+            },
         )
 
     def test_can_provide_json_for_doc_type_in_nested_list(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--nested-lists-of-doc-types-param',
-            '[["foo", {"bar": "baz"}, 1, null]]'
+            '[["foo", {"bar": "baz"}, 1, null]]',
         ]
         self.assert_params_for_cmd(
             cmdline,
@@ -191,12 +200,13 @@ class TestDocumentTypeIO(BaseAWSCommandP
                 'NestedListsOfDocTypesParam': [
                     ["foo", {"bar": "baz"}, 1, None]
                 ]
-            }
+            },
         )
 
     def test_can_provide_json_for_nested_doc_type(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             (
                 '{'
@@ -206,7 +216,7 @@ class TestDocumentTypeIO(BaseAWSCommandP
                 '       "key1": "foo", "key2": {"bar": "baz"}, "key3": 1},'
                 '   "NestedListsOfDocTypes":[["foo", {"bar": "baz"}, 1, null]]'
                 '}'
-            )
+            ),
         ]
         self.assert_params_for_cmd(
             cmdline,
@@ -217,67 +227,78 @@ class TestDocumentTypeIO(BaseAWSCommandP
                     'MapOfDocTypes': {
                         "key1": "foo",
                         "key2": {"bar": "baz"},
-                        "key3": 1
+                        "key3": 1,
                     },
-                    'NestedListsOfDocTypes': [["foo", {"bar": "baz"}, 1, None]]
+                    'NestedListsOfDocTypes': [
+                        ["foo", {"bar": "baz"}, 1, None]
+                    ],
                 }
-            }
+            },
         )
 
     def test_shorthand_not_supported_for_doc_type_argument(self):
         cmdline = [
-            'doctype', 'describe-resource',
-            '--doc-type-param', 'foo=1',
+            'doctype',
+            'describe-resource',
+            '--doc-type-param',
+            'foo=1',
         ]
         self.assert_raises_shorthand_syntax_error(
             cmdline,
             stderr_contains=(
                 "Error parsing parameter '--doc-type-param': Invalid JSON"
-            )
+            ),
         )
 
     def test_shorthand_not_supported_for_doc_type_in_list(self):
         cmdline = [
-            'doctype', 'describe-resource',
-            '--list-of-doc-types-param', 'bar,1,null',
+            'doctype',
+            'describe-resource',
+            '--list-of-doc-types-param',
+            'bar,1,null',
         ]
         self.assert_raises_shorthand_syntax_error(
             cmdline,
             stderr_contains=(
                 "Error parsing parameter '--list-of-doc-types-param': "
                 "Invalid JSON"
-            )
+            ),
         )
 
     def test_shorthand_not_supported_for_doc_type_in_map(self):
         cmdline = [
-            'doctype', 'describe-resource',
-            '--map-of-doc-types-param', 'key1={foo=bar}',
+            'doctype',
+            'describe-resource',
+            '--map-of-doc-types-param',
+            'key1={foo=bar}',
         ]
         self.assert_raises_shorthand_syntax_error(
             cmdline,
             stderr_contains=(
                 "Error parsing parameter '--map-of-doc-types-param': "
                 "Invalid JSON"
-            )
+            ),
         )
 
     def test_shorthand_not_supported_for_doc_type_in_nested_list(self):
         cmdline = [
-            'doctype', 'describe-resource',
-            '--nested-lists-of-doc-types-param', '[bar,1,null],[foo,2]',
+            'doctype',
+            'describe-resource',
+            '--nested-lists-of-doc-types-param',
+            '[bar,1,null],[foo,2]',
         ]
         self.assert_raises_shorthand_syntax_error(
             cmdline,
             stderr_contains=(
                 "Error parsing parameter '--nested-lists-of-doc-types-param': "
                 "Invalid JSON"
-            )
+            ),
         )
 
     def test_shorthand_not_supported_for_nested_doc_type(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             'DocType={foo=bar}',
         ]
@@ -285,12 +306,13 @@ class TestDocumentTypeIO(BaseAWSCommandP
             cmdline,
             stderr_contains=self.nested_doctype_shorthand_error(
                 '--modeled-mixed-with-doc-type-param', member_name='DocType'
-            )
+            ),
         )
 
     def test_shorthand_not_supported_for_nested_doc_type_in_list(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             'ListOfDocTypes=[{foo=bar}]',
         ]
@@ -298,13 +320,14 @@ class TestDocumentTypeIO(BaseAWSCommandP
             cmdline,
             stderr_contains=self.nested_doctype_shorthand_error(
                 '--modeled-mixed-with-doc-type-param',
-                member_name='ListOfDocTypes'
-            )
+                member_name='ListOfDocTypes',
+            ),
         )
 
     def test_shorthand_not_supported_for_nested_doc_type_in_map(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             'MapOfDocTypes={key={foo=bar}}',
         ]
@@ -312,13 +335,14 @@ class TestDocumentTypeIO(BaseAWSCommandP
             cmdline,
             stderr_contains=self.nested_doctype_shorthand_error(
                 '--modeled-mixed-with-doc-type-param',
-                member_name='MapOfDocTypes'
-            )
+                member_name='MapOfDocTypes',
+            ),
         )
 
     def test_shorthand_not_supported_for_nested_doc_type_in_nested_list(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             'NestedListsOfDocTypes=[[{foo=bar}]]',
         ]
@@ -326,13 +350,14 @@ class TestDocumentTypeIO(BaseAWSCommandP
             cmdline,
             stderr_contains=self.nested_doctype_shorthand_error(
                 '--modeled-mixed-with-doc-type-param',
-                member_name='NestedListsOfDocTypes'
-            )
+                member_name='NestedListsOfDocTypes',
+            ),
         )
 
     def test_can_use_shorthand_if_only_modeled_members_used(self):
         cmdline = [
-            'doctype', 'describe-resource',
+            'doctype',
+            'describe-resource',
             '--modeled-mixed-with-doc-type-param',
             'StringMember=str-val',
         ]
@@ -342,13 +367,11 @@ class TestDocumentTypeIO(BaseAWSCommandP
                 'ModeledMixedWithDocTypeParam': {
                     'StringMember': 'str-val',
                 }
-            }
+            },
         )
 
     def test_can_generate_cli_skeleton(self):
-        cmdline = [
-            'doctype', 'describe-resource', '--generate-cli-skeleton'
-        ]
+        cmdline = ['doctype', 'describe-resource', '--generate-cli-skeleton']
         stdout, _, _ = self.run_cmd(cmdline)
         skeleton_output = json.loads(stdout)
         self.assertEqual(
@@ -360,12 +383,12 @@ class TestDocumentTypeIO(BaseAWSCommandP
                     'StringMember': '',
                     'ListOfDocTypes': [{}],
                     'MapOfDocTypes': {'KeyName': {}},
-                    'NestedListsOfDocTypes': [[{}]]
+                    'NestedListsOfDocTypes': [[{}]],
                 },
                 'ListOfDocTypesParam': [{}],
                 'MapOfDocTypesParam': {'KeyName': {}},
-                'NestedListsOfDocTypesParam': [[{}]]
-            }
+                'NestedListsOfDocTypesParam': [[{}]],
+            },
         )
 
 
@@ -380,8 +403,7 @@ class TestDocTypesHelp(BaseAWSHelpOutput
         self.files.remove_all()
 
     def run_help(self):
-        self.driver.main(
-            ['doctype', 'describe-resource', 'help'])
+        self.driver.main(['doctype', 'describe-resource', 'help'])
 
     def filter_params_in_model(self, include_params):
         model = copy.deepcopy(DOCTYPE_MODEL)
@@ -395,9 +417,7 @@ class TestDocTypesHelp(BaseAWSHelpOutput
 
     def assert_has_document_value_in_json_syntax(self, parameter):
         self.assert_text_order(
-            'JSON Syntax::',
-            '{...}',
-            starting_from=parameter
+            'JSON Syntax::', '{...}', starting_from=parameter
         )
 
     def assert_no_shorthand_syntax(self):
@@ -423,30 +443,36 @@ class TestDocTypesHelp(BaseAWSHelpOutput
         self.filter_params_in_model(include_params=['DocTypeParam'])
         self.run_help()
         self.assert_has_document_value_in_json_syntax(
-            parameter='--doc-type-param')
+            parameter='--doc-type-param'
+        )
 
     def test_json_syntax_for_doc_type_in_list(self):
         self.filter_params_in_model(include_params=['ListOfDocTypesParam'])
         self.run_help()
         self.assert_has_document_value_in_json_syntax(
-            parameter='--list-of-doc-types-param')
+            parameter='--list-of-doc-types-param'
+        )
 
     def test_json_syntax_for_doc_type_in_map(self):
         self.filter_params_in_model(include_params=['MapOfDocTypesParam'])
         self.run_help()
         self.assert_has_document_value_in_json_syntax(
-            parameter='--map-of-doc-types-param')
+            parameter='--map-of-doc-types-param'
+        )
 
     def test_json_syntax_for_doc_type_in_nested_list(self):
         self.filter_params_in_model(
-            include_params=['NestedListsOfDocTypesParam'])
+            include_params=['NestedListsOfDocTypesParam']
+        )
         self.run_help()
         self.assert_has_document_value_in_json_syntax(
-            parameter='--nested-lists-of-doc-types-param')
+            parameter='--nested-lists-of-doc-types-param'
+        )
 
     def test_json_syntax_for_nested_doc_type(self):
         self.filter_params_in_model(
-            include_params=['ModeledMixedWithDocTypeParam'])
+            include_params=['ModeledMixedWithDocTypeParam']
+        )
         self.run_help()
         self.assert_text_order(
             'JSON Syntax::',
@@ -454,7 +480,7 @@ class TestDocTypesHelp(BaseAWSHelpOutput
             '"ListOfDocTypes": [',
             '"MapOfDocTypes": {"string": {...}',
             '"NestedListsOfDocTypes": [',
-            starting_from='--modeled-mixed-with-doc-type-param'
+            starting_from='--modeled-mixed-with-doc-type-param',
         )
 
     def test_shorthand_not_documented_for_doc_type_argument(self):
@@ -474,18 +500,20 @@ class TestDocTypesHelp(BaseAWSHelpOutput
 
     def test_shorthand_not_documented_for_doc_type_in_nested_list(self):
         self.filter_params_in_model(
-            include_params=['NestedListsOfDocTypesParam'])
+            include_params=['NestedListsOfDocTypesParam']
+        )
         self.run_help()
         self.assert_no_shorthand_syntax()
 
     def test_documents_shorthand_for_only_modeled_members(self):
         self.filter_params_in_model(
-            include_params=['ModeledMixedWithDocTypeParam'])
+            include_params=['ModeledMixedWithDocTypeParam']
+        )
         self.run_help()
         self.assert_text_order(
             'Shorthand Syntax::',
             'StringMember=string',
-            starting_from='--modeled-mixed-with-doc-type-param'
+            starting_from='--modeled-mixed-with-doc-type-param',
         )
         self.assert_not_contains('DocTypeParam=')
         self.assert_not_contains('ListOfDocTypesParam=')
diff -pruN 2.23.6-1/tests/functional/test_generatecliskeleton.py 2.31.35-1/tests/functional/test_generatecliskeleton.py
--- 2.23.6-1/tests/functional/test_generatecliskeleton.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_generatecliskeleton.py	2025-11-12 19:17:29.000000000 +0000
@@ -105,23 +105,24 @@ class TestGenerateCliSkeletonOutput(Base
         skeleton_output = json.loads(stdout)
         self.assertIn('Regions', skeleton_output)
         self.assertEqual(
-            skeleton_output['Regions'][0]['RegionName'], 'RegionName')
-        self.assertEqual(
-            skeleton_output['Regions'][0]['Endpoint'], 'Endpoint')
+            skeleton_output['Regions'][0]['RegionName'], 'RegionName'
+        )
+        self.assertEqual(skeleton_output['Regions'][0]['Endpoint'], 'Endpoint')
 
     def test_can_pass_in_input_parameters(self):
         cmdline = 'ec2 describe-regions --generate-cli-skeleton output '
         cmdline += ' --region-names us-east-1'
         stdout, _, _ = self.assert_params_for_cmd(
-            cmdline, {'RegionNames': ['us-east-1']})
+            cmdline, {'RegionNames': ['us-east-1']}
+        )
 
         # Make sure the output has the proper mocked response as well.
         skeleton_output = json.loads(stdout)
         self.assertIn('Regions', skeleton_output)
         self.assertEqual(
-            skeleton_output['Regions'][0]['RegionName'], 'RegionName')
-        self.assertEqual(
-            skeleton_output['Regions'][0]['Endpoint'], 'Endpoint')
+            skeleton_output['Regions'][0]['RegionName'], 'RegionName'
+        )
+        self.assertEqual(skeleton_output['Regions'][0]['Endpoint'], 'Endpoint')
 
     def test_when_no_output_shape(self):
         cmdline = 'ec2 attach-internet-gateway '
@@ -129,7 +130,8 @@ class TestGenerateCliSkeletonOutput(Base
         cmdline += '--generate-cli-skeleton output'
         stdout, _, _ = self.assert_params_for_cmd(
             cmdline,
-            {'InternetGatewayId': 'igw-c0a643a9', 'VpcId': 'vpc-a01106'})
+            {'InternetGatewayId': 'igw-c0a643a9', 'VpcId': 'vpc-a01106'},
+        )
         # There should be no output as the command has no output shape
         self.assertEqual('', stdout)
 
@@ -140,7 +142,7 @@ class TestGenerateCliSkeletonOutput(Base
         # The CreationDate has the type of timestamp
         self.assertEqual(
             skeleton_output['Buckets'][0]['CreationDate'],
-            '1970-01-01T00:00:00'
+            '1970-01-01T00:00:00',
         )
 
     def test_can_handle_lists_with_strings_that_have_a_min_length(self):
diff -pruN 2.23.6-1/tests/functional/test_globals.py 2.31.35-1/tests/functional/test_globals.py
--- 2.23.6-1/tests/functional/test_globals.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_globals.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,12 @@
 import os
 import unittest
 
-from awscli.testutils import create_clidriver
 from awscli.clidocs import (
-    GLOBAL_OPTIONS_FILE, GLOBAL_OPTIONS_SYNOPSIS_FILE,
-    GlobalOptionsDocumenter
+    GLOBAL_OPTIONS_FILE,
+    GLOBAL_OPTIONS_SYNOPSIS_FILE,
+    GlobalOptionsDocumenter,
 )
+from awscli.testutils import create_clidriver
 
 
 class TestGlobalOptionsDocumenter(unittest.TestCase):
@@ -15,9 +16,9 @@ class TestGlobalOptionsDocumenter(unitte
         self.globals = GlobalOptionsDocumenter(self.help_command)
 
     def test_doc_global_options_match_saved_content(self):
-        with open(GLOBAL_OPTIONS_FILE, 'r') as f:
+        with open(GLOBAL_OPTIONS_FILE) as f:
             self.assertEqual(self.globals.doc_global_options(), f.read())
 
     def test_doc_global_synopsis_match_saved_content(self):
-        with open(GLOBAL_OPTIONS_SYNOPSIS_FILE, 'r') as f:
+        with open(GLOBAL_OPTIONS_SYNOPSIS_FILE) as f:
             self.assertEqual(self.globals.doc_global_synopsis(), f.read())
diff -pruN 2.23.6-1/tests/functional/test_no_event_streams.py 2.31.35-1/tests/functional/test_no_event_streams.py
--- 2.23.6-1/tests/functional/test_no_event_streams.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_no_event_streams.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import pytest
 from botocore.model import OperationModel
 
 from awscli.clidriver import create_clidriver
 
-
 # Excluded commands must be registered in awscli/customizations/removals.py
-_ALLOWED_COMMANDS = [
-    's3api select-object-content'
-]
+_ALLOWED_COMMANDS = ['s3api select-object-content']
 
 
+@pytest.mark.validates_models
 def test_no_event_stream_unless_allowed():
     driver = create_clidriver()
     help_command = driver.create_help_command()
@@ -33,8 +32,10 @@ def test_no_event_stream_unless_allowed(
                 model = op_help.obj
                 if isinstance(model, OperationModel):
                     full_command = '%s %s' % (command_name, sub_name)
-                    if model.has_event_stream_input or \
-                            model.has_event_stream_output:
+                    if (
+                        model.has_event_stream_input
+                        or model.has_event_stream_output
+                    ):
                         if full_command in _ALLOWED_COMMANDS:
                             continue
                         supported_commands = '\n'.join(_ALLOWED_COMMANDS)
diff -pruN 2.23.6-1/tests/functional/test_output.py 2.31.35-1/tests/functional/test_output.py
--- 2.23.6-1/tests/functional/test_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,9 +15,14 @@ import json
 import ruamel.yaml as yaml
 
 from awscli.clidriver import AWSCLIEntryPoint
-from awscli.testutils import skip_if_windows, if_windows
-from awscli.testutils import mock, create_clidriver, FileCreator
-from awscli.testutils import BaseAWSCommandParamsTest
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    create_clidriver,
+    if_windows,
+    mock,
+    skip_if_windows,
+)
 
 
 class TestOutput(BaseAWSCommandParamsTest):
@@ -36,8 +41,8 @@ class TestOutput(BaseAWSCommandParamsTes
         self.parsed_response = {
             "Regions": [
                 {
-                        "Endpoint": "ec2.ap-south-1.amazonaws.com",
-                        "RegionName": "ap-south-1"
+                    "Endpoint": "ec2.ap-south-1.amazonaws.com",
+                    "RegionName": "ap-south-1",
                 },
             ]
         }
@@ -56,16 +61,15 @@ class TestOutput(BaseAWSCommandParamsTes
 
     def write_cli_pager_config(self, pager):
         config_file = self.files.create_file(
-            'config',
-            '[default]\n'
-            'cli_pager = %s\n' % pager
+            'config', '[default]\n' 'cli_pager = %s\n' % pager
         )
         self.environ['AWS_CONFIG_FILE'] = config_file
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
 
-    def assert_content_to_pager(self, expected_pager, expected_content,
-                                expected_less_flags=None):
+    def assert_content_to_pager(
+        self, expected_pager, expected_content, expected_less_flags=None
+    ):
         actual_pager = self.mock_popen.call_args[1]['args']
         if isinstance(actual_pager, list):
             actual_pager = ' '.join(actual_pager)
@@ -89,8 +93,7 @@ class TestOutput(BaseAWSCommandParamsTes
     def test_outputs_to_pager(self):
         self.run_cmd(self.cmdline)
         self.assert_content_to_pager(
-            expected_pager=mock.ANY,
-            expected_content=self.expected_content
+            expected_pager=mock.ANY, expected_content=self.expected_content
         )
 
     def test_does_not_output_to_pager_if_not_tty(self):
@@ -105,7 +108,7 @@ class TestOutput(BaseAWSCommandParamsTes
         self.assert_content_to_pager(
             expected_pager='less',
             expected_content=self.expected_content,
-            expected_less_flags='FRX'
+            expected_less_flags='FRX',
         )
 
     @if_windows('more is only used for windows')
@@ -180,7 +183,7 @@ class TestOutput(BaseAWSCommandParamsTes
         self.assert_content_to_pager(
             expected_pager='less',
             expected_content=self.expected_content,
-            expected_less_flags='S'
+            expected_less_flags='S',
         )
 
     def test_raises_exception_when_pager_cannot_be_opened(self):
@@ -201,87 +204,50 @@ class TestYAMLStream(BaseAWSCommandParam
 
     def test_yaml_stream_single_response(self):
         cmdline = 'dynamodb list-tables --output yaml-stream --no-paginate'
-        self.parsed_responses = [
-            {
-                'TableNames': [
-                    'MyTable'
-                ]
-            }
-        ]
+        self.parsed_responses = [{'TableNames': ['MyTable']}]
         stdout, _, _ = self.run_cmd(cmdline)
-        self.assert_yaml_response_equal(
-            stdout,
-            [
-                {'TableNames': ['MyTable']}
-            ]
-        )
+        self.assert_yaml_response_equal(stdout, [{'TableNames': ['MyTable']}])
 
     def test_yaml_stream_paginated_response(self):
         cmdline = 'dynamodb list-tables --output yaml-stream'
         self.parsed_responses = [
-            {
-                'TableNames': [
-                    'MyTable'
-                ],
-                'LastEvaluatedTableName': 'MyTable'
-            },
-            {
-                'TableNames': [
-                    'MyTable2'
-                ]
-            },
+            {'TableNames': ['MyTable'], 'LastEvaluatedTableName': 'MyTable'},
+            {'TableNames': ['MyTable2']},
         ]
         stdout, _, _ = self.run_cmd(cmdline)
         self.assert_yaml_response_equal(
             stdout,
             [
                 {
-                    'TableNames': [
-                        'MyTable'
-                    ],
-                    'LastEvaluatedTableName': 'MyTable'
-                },
-                {
-                    'TableNames': [
-                        'MyTable2'
-                    ]
+                    'TableNames': ['MyTable'],
+                    'LastEvaluatedTableName': 'MyTable',
                 },
-            ]
+                {'TableNames': ['MyTable2']},
+            ],
         )
 
     def test_yaml_stream_removes_response_metadata(self):
         cmdline = 'dynamodb list-tables --output yaml-stream --no-paginate'
         self.parsed_responses = [
             {
-                'TableNames': [
-                    'MyTable'
-                ],
-                'ResponseMetadata': {'RequestId': 'id'}
+                'TableNames': ['MyTable'],
+                'ResponseMetadata': {'RequestId': 'id'},
             }
         ]
         stdout, _, _ = self.run_cmd(cmdline)
-        self.assert_yaml_response_equal(
-            stdout,
-            [
-                {'TableNames': ['MyTable']}
-            ]
-        )
+        self.assert_yaml_response_equal(stdout, [{'TableNames': ['MyTable']}])
 
     def test_yaml_stream_removes_response_metadata_for_all_responses(self):
         cmdline = 'dynamodb list-tables --output yaml-stream'
         self.parsed_responses = [
             {
-                'TableNames': [
-                    'MyTable'
-                ],
+                'TableNames': ['MyTable'],
                 'LastEvaluatedTableName': 'MyTable',
-                'ResponseMetadata': {'RequestId': 'id'}
+                'ResponseMetadata': {'RequestId': 'id'},
             },
             {
-                'TableNames': [
-                    'MyTable2'
-                ],
-                'ResponseMetadata': {'RequestId': 'id2'}
+                'TableNames': ['MyTable2'],
+                'ResponseMetadata': {'RequestId': 'id2'},
             },
         ]
         stdout, _, _ = self.run_cmd(cmdline)
@@ -289,17 +255,11 @@ class TestYAMLStream(BaseAWSCommandParam
             stdout,
             [
                 {
-                    'TableNames': [
-                        'MyTable'
-                    ],
-                    'LastEvaluatedTableName': 'MyTable'
-                },
-                {
-                    'TableNames': [
-                        'MyTable2'
-                    ]
+                    'TableNames': ['MyTable'],
+                    'LastEvaluatedTableName': 'MyTable',
                 },
-            ]
+                {'TableNames': ['MyTable2']},
+            ],
         )
 
     def test_yaml_stream_uses_query(self):
@@ -307,51 +267,23 @@ class TestYAMLStream(BaseAWSCommandParam
             'dynamodb list-tables --output yaml-stream --no-paginate '
             '--query TableNames'
         )
-        self.parsed_responses = [
-            {
-                'TableNames': [
-                    'MyTable'
-                ]
-            }
-        ]
+        self.parsed_responses = [{'TableNames': ['MyTable']}]
         stdout, _, _ = self.run_cmd(cmdline)
-        self.assert_yaml_response_equal(
-            stdout,
-            [
-                ['MyTable']
-            ]
-        )
+        self.assert_yaml_response_equal(stdout, [['MyTable']])
 
     def test_yaml_stream_uses_query_across_each_response(self):
         cmdline = (
             'dynamodb list-tables --output yaml-stream --query TableNames'
         )
         self.parsed_responses = [
-            {
-                'TableNames': [
-                    'MyTable'
-                ],
-                'LastEvaluatedTableName': 'MyTable'
-            },
-            {
-                'TableNames': [
-                    'MyTable2'
-                ]
-            },
+            {'TableNames': ['MyTable'], 'LastEvaluatedTableName': 'MyTable'},
+            {'TableNames': ['MyTable2']},
         ]
         stdout, _, _ = self.run_cmd(cmdline)
-        self.assert_yaml_response_equal(
-            stdout,
-            [
-                ['MyTable'],
-                ['MyTable2']
-            ]
-        )
+        self.assert_yaml_response_equal(stdout, [['MyTable'], ['MyTable2']])
 
     def test_yaml_stream_with_empty_response(self):
-        cmdline = (
-            's3api delete-bucket --bucket mybucket --output yaml-stream'
-        )
+        cmdline = 's3api delete-bucket --bucket mybucket --output yaml-stream'
         self.parsed_responses = [{}]
         stdout, _, _ = self.run_cmd(cmdline)
         self.assertEqual(stdout, '')
diff -pruN 2.23.6-1/tests/functional/test_paramfile.py 2.31.35-1/tests/functional/test_paramfile.py
--- 2.23.6-1/tests/functional/test_paramfile.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_paramfile.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,8 +13,8 @@
 import logging
 import os
 
-from awscli.testutils import mock, FileCreator, BaseAWSCommandParamsTest
 from awscli.clidriver import create_clidriver
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator, mock
 
 logger = logging.getLogger(__name__)
 
@@ -29,31 +29,31 @@ class BaseTestCLIFollowParamFile(BaseAWS
         super(BaseTestCLIFollowParamFile, self).tearDown()
         self.files.remove_all()
 
-    def assert_param_expansion_is_correct(self, provided_param, expected_param):
+    def assert_param_expansion_is_correct(
+        self, provided_param, expected_param
+    ):
         cmd = '%s %s' % (self.prefix, provided_param)
         # We do not care about the return code here. All that is of interest
         # is what happened to the arguments before they were passed to botocore
         # which we get from the params={} key. For binary types we will fail in
         # python 3 with an rc of 255 and get an rc of 0 in python 2 where it
         # can't tell the difference, so we pass ANY here to ignore the rc.
-        self.assert_params_for_cmd(cmd,
-                                   params={'FunctionName': expected_param},
-                                   expected_rc=mock.ANY)
+        self.assert_params_for_cmd(
+            cmd, params={'FunctionName': expected_param}, expected_rc=mock.ANY
+        )
 
 
 class TestCLIFollowParamFileDefault(BaseTestCLIFollowParamFile):
     def test_does_not_prefixes_when_none_in_param(self):
         self.assert_param_expansion_is_correct(
-            provided_param='foobar',
-            expected_param='foobar'
+            provided_param='foobar', expected_param='foobar'
         )
 
     def test_does_use_file_prefix(self):
         path = self.files.create_file('foobar.txt', 'file content')
         param = 'file://%s' % path
         self.assert_param_expansion_is_correct(
-            provided_param=param,
-            expected_param='file content'
+            provided_param=param, expected_param='file content'
         )
 
     def test_does_use_fileb_prefix(self):
@@ -63,30 +63,27 @@ class TestCLIFollowParamFileDefault(Base
         path = self.files.create_file('foobar.txt', b'file content', mode='wb')
         param = 'fileb://%s' % path
         self.assert_param_expansion_is_correct(
-            provided_param=param,
-            expected_param=b'file content'
+            provided_param=param, expected_param=b'file content'
         )
 
 
 class TestCLIUseEncodingFromEnv(BaseTestCLIFollowParamFile):
-
     def setUp(self):
         super(TestCLIUseEncodingFromEnv, self).setUp()
         self.path = self.files.create_file(
-            'foobar.txt', '經理', encoding='utf-8')
+            'foobar.txt', '經理', encoding='utf-8'
+        )
 
     def test_does_use_encoding_utf8(self):
         self.environ['AWS_CLI_FILE_ENCODING'] = 'utf-8'
         param = 'file://%s' % self.path
         self.assert_param_expansion_is_correct(
-            provided_param=param,
-            expected_param='經理'
+            provided_param=param, expected_param='經理'
         )
 
     def test_does_use_encoding_cp1251(self):
         self.environ['AWS_CLI_FILE_ENCODING'] = 'cp1251'
         param = 'file://%s' % self.path
         self.assert_param_expansion_is_correct(
-            provided_param=param,
-            expected_param='з¶“зђ†'
+            provided_param=param, expected_param='з¶“зђ†'
         )
diff -pruN 2.23.6-1/tests/functional/test_shadowing.py 2.31.35-1/tests/functional/test_shadowing.py
--- 2.23.6-1/tests/functional/test_shadowing.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_shadowing.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,9 +25,9 @@ def _generate_command_tests():
             yield command_name, sub_help.command_table, top_level_params
 
 
+@pytest.mark.validates_models
 @pytest.mark.parametrize(
-    "command_name, command_table, builtins",
-    _generate_command_tests()
+    "command_name, command_table, builtins", _generate_command_tests()
 )
 def test_no_shadowed_builtins(command_name, command_table, builtins):
     """Verify no command params are shadowed or prefixed by the built in param.
@@ -64,6 +64,7 @@ def test_no_shadowed_builtins(command_na
                 # Then we are shadowing or prefixing a top level argument
                 errors.append(
                     'Shadowing/Prefixing a top level option: '
-                    '%s.%s.%s' % (command_name, sub_name, arg_name))
+                    '%s.%s.%s' % (command_name, sub_name, arg_name)
+                )
     if errors:
         raise AssertionError('\n' + '\n'.join(errors))
diff -pruN 2.23.6-1/tests/functional/test_streaming_output.py 2.31.35-1/tests/functional/test_streaming_output.py
--- 2.23.6-1/tests/functional/test_streaming_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_streaming_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.compat import BytesIO
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class TestStreamingOutput(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestStreamingOutput, self).setUp()
         self.files = FileCreator()
@@ -33,12 +31,12 @@ class TestStreamingOutput(BaseAWSCommand
         )
         self.parsed_response = {
             'ContentType': 'video/webm',
-            'Payload': BytesIO(b'testbody')
+            'Payload': BytesIO(b'testbody'),
         }
         outpath = self.files.full_path('outfile')
         params = {
             'StartSelector': {'StartSelectorType': 'EARLIEST'},
-            'StreamName': 'test-stream'
+            'StreamName': 'test-stream',
         }
         self.assert_params_for_cmd(cmdline % outpath, params)
         with open(outpath, 'rb') as outfile:
diff -pruN 2.23.6-1/tests/functional/test_table.py 2.31.35-1/tests/functional/test_table.py
--- 2.23.6-1/tests/functional/test_table.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_table.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,22 +14,17 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestColor(BaseAWSCommandParamsTest):
-
     def test_pipe_color(self):
         command = "s3api list-buckets --output table --color on"
         self.parsed_response = {
-            "Owner": {
-                "DisplayName": "foo",
-                "ID": "bar"
-            },
+            "Owner": {"DisplayName": "foo", "ID": "bar"},
             "Buckets": [
                 {
                     "CreationDate": "2016-06-15T16:49:44.000Z",
-                    "Name": "foo-bucket"
+                    "Name": "foo-bucket",
                 }
-            ]
+            ],
         }
         stdout, stderr, rc = self.run_cmd(command, 0)
         # `\x1b` is the ANSI color prefix character.
         self.assertIn('\x1b', stdout)
-
diff -pruN 2.23.6-1/tests/functional/test_telemetry.py 2.31.35-1/tests/functional/test_telemetry.py
--- 2.23.6-1/tests/functional/test_telemetry.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/functional/test_telemetry.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,324 @@
+# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import sqlite3
+from unittest.mock import MagicMock, PropertyMock, patch
+
+import pytest
+from botocore.exceptions import MD5UnavailableError
+from botocore.session import Session
+
+from awscli.telemetry import (
+    CLISessionData,
+    CLISessionDatabaseConnection,
+    CLISessionDatabaseReader,
+    CLISessionDatabaseSweeper,
+    CLISessionDatabaseWriter,
+    CLISessionGenerator,
+    CLISessionOrchestrator,
+    add_session_id_component_to_user_agent_extra,
+)
+from tests.markers import skip_if_windows
+
+
+@pytest.fixture
+def session_conn():
+    conn = CLISessionDatabaseConnection(
+        connection=sqlite3.connect(
+            # Use an in-memory db for testing.
+            ':memory:',
+            check_same_thread=False,
+            isolation_level=None,
+        ),
+    )
+    # Write an initial record.
+    conn.execute(
+        """
+            INSERT OR REPLACE INTO session (
+                key, session_id, timestamp
+            ) VALUES ('first_key', 'first_id', 5555555555)
+        """
+    )
+    # Overwrite host id with deterministic value for testing.
+    conn.execute(
+        """
+            INSERT OR REPLACE INTO host_id (
+                key, id
+            ) VALUES (0, 'my-hostname')
+        """
+    )
+    return conn
+
+
+@pytest.fixture
+def session_writer(session_conn):
+    return CLISessionDatabaseWriter(session_conn)
+
+
+@pytest.fixture
+def session_reader(session_conn):
+    return CLISessionDatabaseReader(session_conn)
+
+
+@pytest.fixture
+def session_sweeper(session_conn):
+    return CLISessionDatabaseSweeper(session_conn)
+
+
+@pytest.fixture
+def session_generator():
+    return CLISessionGenerator()
+
+
+@pytest.fixture
+def expired_data(session_writer, session_reader, session_sweeper):
+    # Write an expired record.
+    session_writer.write(
+        CLISessionData(
+            key='expired_key',
+            session_id='expired_id',
+            timestamp=1000000000,
+        )
+    )
+    # Ensure expired record exists.
+    assert session_reader.read('expired_key') is not None
+    yield
+    # Ensure cleanup after test is run.
+    session_sweeper.sweep(1000000001)
+
+
+class TestCLISessionDatabaseConnection:
+    def test_ensure_database_setup(self, session_conn):
+        cursor = session_conn.execute(
+            """
+                SELECT name
+                FROM sqlite_master
+                WHERE type='table';
+            """
+        )
+        assert cursor.fetchall() == [('session',), ('host_id',)]
+
+    def test_timeout_does_not_raise_exception(self, session_conn):
+        test_query = """
+            SELECT name
+            FROM sqlite_master
+            WHERE type='table'
+            AND name='session';
+        """
+
+        class FakeConnection(sqlite3.Connection):
+            def execute(self, query, *parameters):
+                # Simulate timeout by always raising.
+                if query == test_query:
+                    raise sqlite3.OperationalError()
+                # Mock host id count query.
+                cur = MagicMock()
+                cur.fetchone.return_value = (1,)
+                return cur
+
+        fake_conn = CLISessionDatabaseConnection(FakeConnection(":memory:"))
+        cursor = fake_conn.execute(test_query)
+        assert cursor.fetchall() == []
+
+
+class TestCLISessionDatabaseWriter:
+    def test_write(self, session_writer, session_reader, session_sweeper):
+        session_writer.write(
+            CLISessionData(
+                key='new-key',
+                session_id='new-id',
+                timestamp=1000000000,
+            )
+        )
+        session_data = session_reader.read('new-key')
+        assert session_data.key == 'new-key'
+        assert session_data.session_id == 'new-id'
+        assert session_data.timestamp == 1000000000
+        session_sweeper.sweep(1000000001)
+
+
+class TestCLISessionDatabaseReader:
+    def test_read(self, session_reader):
+        session_data = session_reader.read('first_key')
+        assert session_data.key == 'first_key'
+        assert session_data.session_id == 'first_id'
+        assert session_data.timestamp == 5555555555
+
+    def test_read_nonexistent_record(self, session_reader):
+        session_data = session_reader.read('bad_key')
+        assert session_data is None
+
+    def test_read_host_id(self, session_reader):
+        host_id = session_reader.read_host_id()
+        assert host_id == 'my-hostname'
+
+
+class TestCLISessionDatabaseSweeper:
+    def test_sweep(self, expired_data, session_reader, session_sweeper):
+        session_sweeper.sweep(1000000001)
+        swept_data = session_reader.read('expired_key')
+        assert swept_data is None
+
+    def test_sweep_not_expired(
+        self, expired_data, session_reader, session_sweeper
+    ):
+        session_sweeper.sweep(1000000000)
+        swept_data = session_reader.read('expired_key')
+        assert swept_data is not None
+
+    def test_sweep_never_raises(self, session_sweeper):
+        # Normally this would raise `sqlite3.ProgrammingError`,
+        # but the `sweep` method catches bare exceptions.
+        session_sweeper.sweep({'bad': 'input'})
+
+
+class TestCLISessionGenerator:
+    def test_generate_session_id(self, session_generator):
+        session_id = session_generator.generate_session_id(
+            'my-hostname',
+            'my-tty',
+            1000000000,
+        )
+        assert session_id == 'd949713b13ee'
+
+    def test_generate_cache_key(self, session_generator):
+        cache_key = session_generator.generate_cache_key(
+            'my-hostname',
+            'my-tty',
+        )
+        assert cache_key == 'b1ca2be0ffac'
+
+    @patch('awscli.telemetry.get_md5')
+    def test_checksum_fips_fallback(self, patched_get_md5, session_generator):
+        patched_get_md5.side_effect = MD5UnavailableError()
+        session_id = session_generator.generate_session_id(
+            'my-hostname',
+            'my-tty',
+            1000000000,
+        )
+        assert session_id == '183b154db015'
+
+
+@skip_if_windows
+@patch('sys.stdin')
+@patch('time.time', return_value=5555555555)
+@patch('os.ttyname', return_value='my-tty')
+class TestCLISessionOrchestrator:
+    def test_session_id_gets_cached(
+        self,
+        patched_tty_name,
+        patched_time,
+        patched_stdin,
+        session_sweeper,
+        session_generator,
+        session_reader,
+        session_writer,
+    ):
+        patched_stdin.fileno.return_value = None
+        orchestrator = CLISessionOrchestrator(
+            session_generator, session_writer, session_reader, session_sweeper
+        )
+        assert orchestrator.session_id == '881cea8546fa'
+
+        session_data = session_reader.read(orchestrator.cache_key)
+        assert session_data.key == orchestrator.cache_key
+        assert session_data.session_id == orchestrator.session_id
+        assert session_data.timestamp == 5555555555
+
+    def test_cached_session_id_updated_if_expired(
+        self,
+        patched_tty_name,
+        patched_time,
+        patched_stdin,
+        session_sweeper,
+        session_generator,
+        session_reader,
+        session_writer,
+    ):
+        patched_stdin.fileno.return_value = None
+
+        # First, generate and cache a session id.
+        orchestrator_1 = CLISessionOrchestrator(
+            session_generator, session_writer, session_reader, session_sweeper
+        )
+        session_id_1 = orchestrator_1.session_id
+        session_data_1 = session_reader.read(orchestrator_1.cache_key)
+        assert session_data_1.session_id == session_id_1
+
+        # Update the timestamp and get the new session id.
+        patched_time.return_value = 7777777777
+        orchestrator_2 = CLISessionOrchestrator(
+            session_generator, session_writer, session_reader, session_sweeper
+        )
+        session_id_2 = orchestrator_2.session_id
+        session_data_2 = session_reader.read(orchestrator_2.cache_key)
+
+        # Cache key should be the same.
+        assert session_data_2.key == session_data_1.key
+        # Session id and timestamp should be updated.
+        assert session_data_2.session_id == session_id_2
+        assert session_data_2.session_id != session_data_1.session_id
+        assert session_data_2.timestamp == 7777777777
+        assert session_data_2.timestamp != session_data_1.timestamp
+
+    def test_cached_session_id_not_updated_if_valid(
+        self,
+        patched_tty_name,
+        patched_time,
+        patched_stdin,
+        session_sweeper,
+        session_generator,
+        session_reader,
+        session_writer,
+    ):
+        patched_stdin.fileno.return_value = None
+
+        # First, generate and cache a session id.
+        orchestrator_1 = CLISessionOrchestrator(
+            session_generator, session_writer, session_reader, session_sweeper
+        )
+        session_id_1 = orchestrator_1.session_id
+        session_data_1 = session_reader.read(orchestrator_1.cache_key)
+        assert session_data_1.session_id == session_id_1
+
+        # Update the timestamp.
+        patched_time.return_value = 5555555556
+        orchestrator_2 = CLISessionOrchestrator(
+            session_generator, session_writer, session_reader, session_sweeper
+        )
+        session_id_2 = orchestrator_2.session_id
+        session_data_2 = session_reader.read(orchestrator_2.cache_key)
+
+        # Cache key should be the same.
+        assert session_data_2.key == session_data_1.key
+        # Session id should not be updated.
+        assert session_data_2.session_id == session_id_2
+        assert session_data_2.session_id == session_data_1.session_id
+        # Only timestamp should be updated.
+        assert session_data_2.timestamp == 5555555556
+        assert session_data_2.timestamp != session_data_1.timestamp
+
+
+def test_add_session_id_component_to_user_agent_extra():
+    session = MagicMock(Session)
+    session.user_agent_extra = ''
+    orchestrator = MagicMock(CLISessionOrchestrator)
+    orchestrator.session_id = 'my-session-id'
+    add_session_id_component_to_user_agent_extra(session, orchestrator)
+    assert session.user_agent_extra == 'sid/my-session-id'
+
+
+def test_entrypoint_catches_bare_exceptions():
+    mock_orchestrator = MagicMock(CLISessionOrchestrator)
+    type(mock_orchestrator).session_id = PropertyMock(side_effect=Exception)
+    session = MagicMock(Session)
+    add_session_id_component_to_user_agent_extra(session, mock_orchestrator)
diff -pruN 2.23.6-1/tests/functional/test_timeformat.py 2.31.35-1/tests/functional/test_timeformat.py
--- 2.23.6-1/tests/functional/test_timeformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_timeformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,22 +10,28 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import json
 import datetime
+import json
+
 from dateutil.tz import tzlocal
-from awscli.testutils import FileCreator, BaseCLIWireResponseTest
-from awscli.clidriver import create_clidriver, AWSCLIEntryPoint
+
+from awscli.clidriver import AWSCLIEntryPoint, create_clidriver
+from awscli.testutils import BaseCLIWireResponseTest, FileCreator
 
 
 class TestCLITimestampParser(BaseCLIWireResponseTest):
     def setUp(self):
         super(TestCLITimestampParser, self).setUp()
         self.files = FileCreator()
-        self.wire_response = json.dumps({
-            'builds': [{
-                'startTime': 0,
-            }]
-        }).encode('utf-8')
+        self.wire_response = json.dumps(
+            {
+                'builds': [
+                    {
+                        'startTime': 0,
+                    }
+                ]
+            }
+        ).encode('utf-8')
         self.command = ['codebuild', 'batch-get-builds', '--ids', 'foo']
         self.patch_send(content=self.wire_response)
 
@@ -35,12 +41,15 @@ class TestCLITimestampParser(BaseCLIWire
 
     def test_iso(self):
         self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
-            'iso',
-            '[default]\ncli_timestamp_format = iso8601\n')
+            'iso', '[default]\ncli_timestamp_format = iso8601\n'
+        )
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
-        expected_time = datetime.datetime.fromtimestamp(0).replace(
-            tzinfo=tzlocal()).isoformat()
+        expected_time = (
+            datetime.datetime.fromtimestamp(0)
+            .replace(tzinfo=tzlocal())
+            .isoformat()
+        )
 
         stdout, _, _ = self.run_cmd(self.command)
         json_response = json.loads(stdout)
@@ -49,8 +58,8 @@ class TestCLITimestampParser(BaseCLIWire
 
     def test_none(self):
         self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
-            'none',
-            '[default]\ncli_timestamp_format = wire\n')
+            'none', '[default]\ncli_timestamp_format = wire\n'
+        )
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
         expected_time = 0
@@ -63,8 +72,11 @@ class TestCLITimestampParser(BaseCLIWire
     def test_default(self):
         self.driver = create_clidriver()
         self.entry_point = AWSCLIEntryPoint(self.driver)
-        expected_time = datetime.datetime.fromtimestamp(0).replace(
-            tzinfo=tzlocal()).isoformat()
+        expected_time = (
+            datetime.datetime.fromtimestamp(0)
+            .replace(tzinfo=tzlocal())
+            .isoformat()
+        )
 
         stdout, _, _ = self.run_cmd(self.command)
         json_response = json.loads(stdout)
diff -pruN 2.23.6-1/tests/functional/test_useragent.py 2.31.35-1/tests/functional/test_useragent.py
--- 2.23.6-1/tests/functional/test_useragent.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_useragent.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,9 @@
 from awscli import __version__ as awscli_version
 from tests import CLIRunner
+from tests.functional.botocore.test_useragent import (
+    get_captured_ua_strings,
+    parse_registered_feature_ids,
+)
 
 
 def assert_expected_user_agent(result, service, operation):
@@ -10,7 +14,7 @@ def assert_expected_user_agent(result, s
     assert ' md/arch#' in ua_string
     assert ' md/prompt#off' in ua_string
     assert f' md/command#{service}.{operation}' in ua_string
-    assert ' ua/2.0 ' in ua_string
+    assert ' ua/2.1 ' in ua_string
     assert ' os/' in ua_string
     assert ' lang/python' in ua_string
     assert ' cfg/' in ua_string
@@ -31,3 +35,6 @@ def test_user_agent_for_customization():
     operation = 'ls'
     result = cli_runner.run([service, operation])
     assert_expected_user_agent(result, service, operation)
+    ua_string = result.aws_requests[0].http_requests[0].headers['User-Agent']
+    feature_list = parse_registered_feature_ids(ua_string)
+    assert 'C' in feature_list
diff -pruN 2.23.6-1/tests/functional/test_utils.py 2.31.35-1/tests/functional/test_utils.py
--- 2.23.6-1/tests/functional/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,7 @@
+import codecs
 import os
-import tempfile
 import shutil
-import codecs
+import tempfile
 
 from awscli.testutils import unittest
 from awscli.utils import write_exception
@@ -22,7 +22,5 @@ class TestWriteException(unittest.TestCa
             write_exception(ex, outfile)
             outfile.seek(0)
 
-            expected_output = (
-                "\n%s\n" % error_message
-            )
+            expected_output = "\n%s\n" % error_message
             self.assertEqual(outfile.read(), expected_output)
diff -pruN 2.23.6-1/tests/functional/translate/test_import_terminology.py 2.31.35-1/tests/functional/translate/test_import_terminology.py
--- 2.23.6-1/tests/functional/translate/test_import_terminology.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/translate/test_import_terminology.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,19 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class TestImortTerminology(BaseAWSCommandParamsTest):
-
     prefix = 'translate import-terminology'
 
     def setUp(self):
         super(TestImortTerminology, self).setUp()
         self.files = FileCreator()
-        self.temp_file = self.files.create_file(
-            'foo', 'mycontents')
+        self.temp_file = self.files.create_file('foo', 'mycontents')
         with open(self.temp_file, 'rb') as f:
             self.temp_file_contents = f.read()
 
@@ -70,7 +67,7 @@ class TestImortTerminology(BaseAWSComman
             "File cannot be provided as part of the '--terminology-data' "
             "argument. Please use the '--data-file' option instead to specify "
             "a file.",
-            stderr
+            stderr,
         )
 
     def test_import_terminology_with_no_file(self):
diff -pruN 2.23.6-1/tests/functional/translate/test_translate_document.py 2.31.35-1/tests/functional/translate/test_translate_document.py
--- 2.23.6-1/tests/functional/translate/test_translate_document.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/translate/test_translate_document.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import FileCreator
+from awscli.testutils import BaseAWSCommandParamsTest, FileCreator
 
 
 class TestTranslateDocument(BaseAWSCommandParamsTest):
@@ -35,7 +34,10 @@ class TestTranslateDocument(BaseAWSComma
         cmdline += " --document ContentType=datatype"
         cmdline += " --document-content fileb://%s" % self.temp_file
         result = {
-            "Document": {"Content": self.temp_file_contents, "ContentType": "datatype"},
+            "Document": {
+                "Content": self.temp_file_contents,
+                "ContentType": "datatype",
+            },
             "SourceLanguageCode": "FOO",
             "TargetLanguageCode": "BAR",
         }
@@ -47,7 +49,9 @@ class TestTranslateDocument(BaseAWSComma
         cmdline += " --target-language-code BAR"
         cmdline += " --document Content=data,ContentType=datatype"
 
-        stdout, stderr, rc = self.assert_params_for_cmd(cmdline, expected_rc=252)
+        stdout, stderr, rc = self.assert_params_for_cmd(
+            cmdline, expected_rc=252
+        )
         self.assertIn(
             "the following arguments are required: --document-content", stderr
         )
@@ -59,7 +63,9 @@ class TestTranslateDocument(BaseAWSComma
         cmdline += " --document Content=data,ContentType=datatype"
         cmdline += " --document-content fileb://%s" % self.temp_file
 
-        stdout, stderr, rc = self.assert_params_for_cmd(cmdline, expected_rc=252)
+        stdout, stderr, rc = self.assert_params_for_cmd(
+            cmdline, expected_rc=252
+        )
         self.assertIn(
             "Content cannot be provided as a part of the '--document' "
             "argument. Please use the '--document-content' option instead to "
diff -pruN 2.23.6-1/tests/functional/wizards/test_command.py 2.31.35-1/tests/functional/wizards/test_command.py
--- 2.23.6-1/tests/functional/wizards/test_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/wizards/test_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import tempfile
 import shutil
+import tempfile
 
-from awscli.testutils import BaseAWSCommandParamsTest, mock, cd
-from awscli.testutils import BaseAWSHelpOutputTest
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    cd,
+    mock,
+)
 
 
 class TestRunWizard(BaseAWSCommandParamsTest):
@@ -26,8 +30,7 @@ class TestRunWizard(BaseAWSCommandParams
             os.mkdir('iam')
         self.parsed_responses = [{"Roles": []}]
         self.root_dir_patch = mock.patch(
-            'awscli.customizations.wizard.loader.WIZARD_SPEC_DIR',
-            self.tempdir
+            'awscli.customizations.wizard.loader.WIZARD_SPEC_DIR', self.tempdir
         )
         self.root_dir_patch.start()
 
@@ -55,8 +58,7 @@ class TestRunWizard(BaseAWSCommandParams
                 '        PathPrefix: "{myprefix}"\n'
             )
         stdout, _, _ = self.assert_params_for_cmd(
-            'iam wizard test-wizard',
-            params={'PathPrefix': '/foo/'}
+            'iam wizard test-wizard', params={'PathPrefix': '/foo/'}
         )
         self.assertEqual(self.operations_called[0][0].name, 'ListRoles')
 
diff -pruN 2.23.6-1/tests/functional/wizards/test_loader.py 2.31.35-1/tests/functional/wizards/test_loader.py
--- 2.23.6-1/tests/functional/wizards/test_loader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/wizards/test_loader.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
 from awscli.customizations.wizard import loader
+from awscli.testutils import unittest
 
 
 class TestLoader(unittest.TestCase):
diff -pruN 2.23.6-1/tests/functional/workspaces/test_reboot_workspaces.py 2.31.35-1/tests/functional/workspaces/test_reboot_workspaces.py
--- 2.23.6-1/tests/functional/workspaces/test_reboot_workspaces.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/workspaces/test_reboot_workspaces.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestRebootWorkspaces(BaseAWSCommandParamsTest):
-
     prefix = 'workspaces reboot-workspaces'
 
     def test_shorthand(self):
@@ -23,7 +22,7 @@ class TestRebootWorkspaces(BaseAWSComman
             'RebootWorkspaceRequests': [
                 {"WorkspaceId": "id1"},
                 {"WorkspaceId": "id2"},
-                {"WorkspaceId": "id3"}
+                {"WorkspaceId": "id3"},
             ]
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/workspaces/test_rebuild_workspaces.py 2.31.35-1/tests/functional/workspaces/test_rebuild_workspaces.py
--- 2.23.6-1/tests/functional/workspaces/test_rebuild_workspaces.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/workspaces/test_rebuild_workspaces.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestRebuildWorkspaces(BaseAWSCommandParamsTest):
-
     prefix = 'workspaces rebuild-workspaces'
 
     def test_shorthand(self):
@@ -23,7 +22,7 @@ class TestRebuildWorkspaces(BaseAWSComma
             'RebuildWorkspaceRequests': [
                 {"WorkspaceId": "id1"},
                 {"WorkspaceId": "id2"},
-                {"WorkspaceId": "id3"}
+                {"WorkspaceId": "id3"},
             ]
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/functional/workspaces/test_terminate_workspaces.py 2.31.35-1/tests/functional/workspaces/test_terminate_workspaces.py
--- 2.23.6-1/tests/functional/workspaces/test_terminate_workspaces.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/functional/workspaces/test_terminate_workspaces.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ from awscli.testutils import BaseAWSComm
 
 
 class TestTerminateWorkspaces(BaseAWSCommandParamsTest):
-
     prefix = 'workspaces terminate-workspaces'
 
     def test_shorthand(self):
@@ -23,7 +22,7 @@ class TestTerminateWorkspaces(BaseAWSCom
             'TerminateWorkspaceRequests': [
                 {"WorkspaceId": "id1"},
                 {"WorkspaceId": "id2"},
-                {"WorkspaceId": "id3"}
+                {"WorkspaceId": "id3"},
             ]
         }
         self.assert_params_for_cmd(command, expected_params)
diff -pruN 2.23.6-1/tests/integration/botocore/test_apigateway.py 2.31.35-1/tests/integration/botocore/test_apigateway.py
--- 2.23.6-1/tests/integration/botocore/test_apigateway.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_apigateway.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,11 +12,11 @@
 # language governing permissions and limitations under the License.
 import time
 
-from tests import unittest
-
 import botocore.session
 from botocore import exceptions
 
+from tests import unittest
+
 
 class TestApigateway(unittest.TestCase):
     def setUp(self):
@@ -33,7 +33,8 @@ class TestApigateway(unittest.TestCase):
         except exceptions.ClientError as e:
             if e.response['Error']['Code'] == 'TooManyRequestsException':
                 raise unittest.SkipTest(
-                    "Hit API gateway throttle limit, skipping test.")
+                    "Hit API gateway throttle limit, skipping test."
+                )
             raise
         return api_id
 
@@ -55,15 +56,16 @@ class TestApigateway(unittest.TestCase):
 
     def test_put_integration(self):
         # The only resource on a brand new api is the path. So use that ID.
-        path_resource_id = self.client.get_resources(
-            restApiId=self.api_id)['items'][0]['id']
+        path_resource_id = self.client.get_resources(restApiId=self.api_id)[
+            'items'
+        ][0]['id']
 
         # Create a method for the resource.
         self.client.put_method(
             restApiId=self.api_id,
             resourceId=path_resource_id,
             httpMethod='GET',
-            authorizationType='None'
+            authorizationType='None',
         )
 
         # Put an integration on the method.
@@ -73,7 +75,7 @@ class TestApigateway(unittest.TestCase):
             httpMethod='GET',
             type='HTTP',
             integrationHttpMethod='GET',
-            uri='https://api.endpoint.com'
+            uri='https://api.endpoint.com',
         )
         # Assert the response was successful by checking the integration type
         self.assertEqual(response['type'], 'HTTP')
diff -pruN 2.23.6-1/tests/integration/botocore/test_client.py 2.31.35-1/tests/integration/botocore/test_client.py
--- 2.23.6-1/tests/integration/botocore/test_client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_client.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import datetime
 import io
 import logging
-import datetime
-from tests import unittest, random_chars
 
 import botocore.session
 from botocore.client import ClientError
 from botocore.exceptions import EndpointConnectionError
 
+from tests import random_chars, unittest
+
 
 # This is really a combination of testing the debug logging mechanism
 # as well as the response wire log, which theoretically could be
@@ -26,7 +27,6 @@ from botocore.exceptions import Endpoint
 # which integration test module this code should live in, so I picked
 # the client module.
 class TestResponseLog(unittest.TestCase):
-
     def test_debug_log_contains_headers_and_body(self):
         # This test just verifies that the response headers/body
         # are in the debug log.  It's an integration test so that
@@ -49,7 +49,8 @@ class TestAcceptedDateTimeFormats(unitte
 
     def test_accepts_datetime_object(self):
         response = self.client.list_clusters(
-            CreatedAfter=datetime.datetime.now())
+            CreatedAfter=datetime.datetime.now()
+        )
         self.assertIn('Clusters', response)
 
     def test_accepts_epoch_format(self):
@@ -58,17 +59,20 @@ class TestAcceptedDateTimeFormats(unitte
 
     def test_accepts_iso_8601_unaware(self):
         response = self.client.list_clusters(
-            CreatedAfter='2014-01-01T00:00:00')
+            CreatedAfter='2014-01-01T00:00:00'
+        )
         self.assertIn('Clusters', response)
 
     def test_accepts_iso_8601_utc(self):
         response = self.client.list_clusters(
-            CreatedAfter='2014-01-01T00:00:00Z')
+            CreatedAfter='2014-01-01T00:00:00Z'
+        )
         self.assertIn('Clusters', response)
 
     def test_accepts_iso_8701_local(self):
         response = self.client.list_clusters(
-            CreatedAfter='2014-01-01T00:00:00-08:00')
+            CreatedAfter='2014-01-01T00:00:00-08:00'
+        )
         self.assertIn('Clusters', response)
 
 
@@ -78,14 +82,17 @@ class TestClientErrors(unittest.TestCase
 
     def test_region_mentioned_in_invalid_region(self):
         client = self.session.create_client(
-            'cloudformation', region_name='us-east-999')
-        with self.assertRaisesRegex(EndpointConnectionError,
-                                    'Could not connect to the endpoint URL'):
+            'cloudformation', region_name='us-east-999'
+        )
+        with self.assertRaisesRegex(
+            EndpointConnectionError, 'Could not connect to the endpoint URL'
+        ):
             client.list_stacks()
 
     def test_client_modeled_exception(self):
         client = self.session.create_client(
-            'dynamodb', region_name='us-west-2')
+            'dynamodb', region_name='us-west-2'
+        )
         with self.assertRaises(client.exceptions.ResourceNotFoundException):
             client.describe_table(TableName="NonexistentTable")
 
@@ -105,9 +112,11 @@ class TestClientErrors(unittest.TestCase
 
     def test_can_catch_client_exceptions_across_two_different_clients(self):
         client = self.session.create_client(
-            'dynamodb', region_name='us-west-2')
+            'dynamodb', region_name='us-west-2'
+        )
         client2 = self.session.create_client(
-            'dynamodb', region_name='us-west-2')
+            'dynamodb', region_name='us-west-2'
+        )
         with self.assertRaises(client2.exceptions.ResourceNotFoundException):
             client.describe_table(TableName="NonexistentTable")
 
@@ -121,8 +130,9 @@ class TestClientMeta(unittest.TestCase):
         self.assertEqual(client.meta.region_name, 'us-west-2')
 
     def test_endpoint_url_on_meta(self):
-        client = self.session.create_client('s3', 'us-west-2',
-                                            endpoint_url='https://foo')
+        client = self.session.create_client(
+            's3', 'us-west-2', endpoint_url='https://foo'
+        )
         self.assertEqual(client.meta.endpoint_url, 'https://foo')
 
 
@@ -131,15 +141,13 @@ class TestClientInjection(unittest.TestC
         self.session = botocore.session.get_session()
 
     def test_can_inject_client_methods(self):
-
         def extra_client_method(self, name):
             return name
 
         def inject_client_method(class_attributes, **kwargs):
             class_attributes['extra_client_method'] = extra_client_method
 
-        self.session.register('creating-client-class.s3',
-                              inject_client_method)
+        self.session.register('creating-client-class.s3', inject_client_method)
 
         client = self.session.create_client('s3', 'us-west-2')
 
@@ -151,8 +159,9 @@ class TestMixedEndpointCasing(unittest.T
     def setUp(self):
         self.url = 'https://EC2.US-WEST-2.amazonaws.com/'
         self.session = botocore.session.get_session()
-        self.client = self.session.create_client('ec2', 'us-west-2',
-                                                 endpoint_url=self.url)
+        self.client = self.session.create_client(
+            'ec2', 'us-west-2', endpoint_url=self.url
+        )
 
     def test_sigv4_is_correct_when_mixed_endpoint_casing(self):
         res = self.client.describe_regions()
diff -pruN 2.23.6-1/tests/integration/botocore/test_client_http.py 2.31.35-1/tests/integration/botocore/test_client_http.py
--- 2.23.6-1/tests/integration/botocore/test_client_http.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_client_http.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,24 +1,29 @@
+import contextlib
 import select
 import socket
-import contextlib
-import threading
 import socketserver
-from http.server import BaseHTTPRequestHandler
-from tests import mock, unittest
+import threading
 from contextlib import contextmanager
+from http.server import BaseHTTPRequestHandler
 
 import botocore.session
 from botocore.config import Config
 from botocore.exceptions import (
-    ConnectTimeoutError, ReadTimeoutError, EndpointConnectionError,
-    ConnectionClosedError, ClientError, ProxyConnectionError
+    ClientError,
+    ConnectionClosedError,
+    ConnectTimeoutError,
+    EndpointConnectionError,
+    ProxyConnectionError,
+    ReadTimeoutError,
 )
 
+from tests import mock, unittest
+
 
 class TestClientHTTPBehavior(unittest.TestCase):
     def setUp(self):
         self.port = unused_port()
-        self.localhost = 'http://localhost:%s/' % self.port
+        self.localhost = f'http://localhost:{self.port}/'
         self.session = botocore.session.get_session()
         # We need to set fake credentials to ensure credentials aren't searched
         # for which might make additional API calls (assume role, etc).
@@ -26,7 +31,7 @@ class TestClientHTTPBehavior(unittest.Te
 
     @unittest.skip('Test has suddenly become extremely flakey.')
     def test_can_proxy_https_request_with_auth(self):
-        proxy_url = 'http://user:pass@localhost:%s/' % self.port
+        proxy_url = f'http://user:pass@localhost:{self.port}/'
         config = Config(proxies={'https': proxy_url}, region_name='us-west-1')
         client = self.session.create_client('ec2', config=config)
 
@@ -46,11 +51,11 @@ class TestClientHTTPBehavior(unittest.Te
 
     @unittest.skip('Proxy cannot connect to service when run in CodeBuild.')
     def test_proxy_request_includes_host_header(self):
-        proxy_url = 'http://user:pass@localhost:%s/' % self.port
+        proxy_url = f'http://user:pass@localhost:{self.port}/'
         config = Config(
             proxies={'https': proxy_url},
             proxies_config={'proxy_use_forwarding_for_https': True},
-            region_name='us-west-1'
+            region_name='us-west-1',
         )
         environ = {'BOTO_EXPERIMENTAL__ADD_PROXY_HOST_HEADER': "True"}
         self.environ_patch = mock.patch('os.environ', environ)
@@ -73,7 +78,9 @@ class TestClientHTTPBehavior(unittest.Te
                 self.end_headers()
 
                 remote_host, remote_port = self.path.split(':')
-                remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                remote_socket = socket.socket(
+                    socket.AF_INET, socket.SOCK_STREAM
+                )
                 remote_socket.connect((remote_host, int(remote_port)))
 
                 self._tunnel(self.request, remote_socket)
@@ -94,15 +101,15 @@ class TestClientHTTPBehavior(unittest.Te
         finally:
             self.environ_patch.stop()
 
-
     def _read_timeout_server(self):
         config = Config(
             read_timeout=0.1,
             retries={'max_attempts': 1},
             region_name='us-weast-2',
         )
-        client = self.session.create_client('ec2', endpoint_url=self.localhost,
-                                            config=config)
+        client = self.session.create_client(
+            'ec2', endpoint_url=self.localhost, config=config
+        )
         client_call_ended_event = threading.Event()
 
         class FakeEC2(SimpleHandler):
@@ -137,8 +144,9 @@ class TestClientHTTPBehavior(unittest.Te
             retries={'max_attempts': 1},
             region_name='us-weast-2',
         )
-        client = self.session.create_client('ec2', endpoint_url=self.localhost,
-                                            config=config)
+        client = self.session.create_client(
+            'ec2', endpoint_url=self.localhost, config=config
+        )
         server_bound_event = threading.Event()
         client_call_ended_event = threading.Event()
 
@@ -159,15 +167,17 @@ class TestClientHTTPBehavior(unittest.Te
     def test_invalid_host_gaierror(self):
         config = Config(retries={'max_attempts': 1}, region_name='us-weast-1')
         endpoint = 'https://ec2.us-weast-1.amazonaws.com/'
-        client = self.session.create_client('ec2', endpoint_url=endpoint,
-                                            config=config)
+        client = self.session.create_client(
+            'ec2', endpoint_url=endpoint, config=config
+        )
         with self.assertRaises(EndpointConnectionError):
             client.describe_regions()
 
     def test_bad_status_line(self):
         config = Config(retries={'max_attempts': 1}, region_name='us-weast-2')
-        client = self.session.create_client('ec2', endpoint_url=self.localhost,
-                                            config=config)
+        client = self.session.create_client(
+            'ec2', endpoint_url=self.localhost, config=config
+        )
 
         class BadStatusHandler(BaseHTTPRequestHandler):
             event = threading.Event()
diff -pruN 2.23.6-1/tests/integration/botocore/test_cloudformation.py 2.31.35-1/tests/integration/botocore/test_cloudformation.py
--- 2.23.6-1/tests/integration/botocore/test_cloudformation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_cloudformation.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, random_chars
-
 import botocore.session
 from botocore.exceptions import ClientError
 
+from tests import random_chars, unittest
+
 
 class TestCloudformation(unittest.TestCase):
     def setUp(self):
@@ -26,7 +26,8 @@ class TestCloudformation(unittest.TestCa
         # it handles the case when a stack does not exist.
         with self.assertRaises(ClientError):
             self.client.get_template(
-                StackName='does-not-exist-%s' % random_chars(10))
+                StackName=f'does-not-exist-{random_chars(10)}'
+            )
 
 
 if __name__ == '__main__':
diff -pruN 2.23.6-1/tests/integration/botocore/test_cloudwatch.py 2.31.35-1/tests/integration/botocore/test_cloudwatch.py
--- 2.23.6-1/tests/integration/botocore/test_cloudwatch.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_cloudwatch.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,36 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import pytest
+
+import botocore.session
+
+
+def test_ambiguous_error_parsing():
+    # We map errors from services to modeled errors based on the error code, but
+    # cloudwatch has two errors that are both modeled to the `ResourceNotFound`
+    # code: `DashboardNotFoundError` and `ResourceNotFound`.  Botocore picks the one
+    # that is defined later, which in this case is `ResourceNotFound`.  This test
+    # ensures that we continue to select the latter error going forward.
+    session = botocore.session.get_session()
+    cloudwatch = session.create_client('cloudwatch', region_name='us-west-2')
+    with pytest.raises(cloudwatch.exceptions.ResourceNotFound) as exception:
+        cloudwatch.get_dashboard(
+            DashboardName='dashboard-which-does-not-exist'
+        )
+
+    error_response = exception.value.response['Error']
+    assert error_response['Type'] == 'Sender'
+    assert error_response['Code'] == 'ResourceNotFound'
+    assert (
+        exception.value.response['ResponseMetadata']['HTTPStatusCode'] == 404
+    )
diff -pruN 2.23.6-1/tests/integration/botocore/test_cognito_identity.py 2.31.35-1/tests/integration/botocore/test_cognito_identity.py
--- 2.23.6-1/tests/integration/botocore/test_cognito_identity.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_cognito_identity.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,26 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, random_chars
-
 import botocore.session
 
+from tests import random_chars, unittest
+
 
 class TestCognitoIdentity(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
-        self.client = self.session.create_client('cognito-identity', 'us-east-1')
+        self.client = self.session.create_client(
+            'cognito-identity', 'us-east-1'
+        )
 
     def test_can_create_and_delete_identity_pool(self):
-        pool_name = 'test%s' % random_chars(10)
+        pool_name = f'test{random_chars(10)}'
         response = self.client.create_identity_pool(
-            IdentityPoolName=pool_name, AllowUnauthenticatedIdentities=True)
-        self.client.delete_identity_pool(IdentityPoolId=response['IdentityPoolId'])
+            IdentityPoolName=pool_name, AllowUnauthenticatedIdentities=True
+        )
+        self.client.delete_identity_pool(
+            IdentityPoolId=response['IdentityPoolId']
+        )
 
 
 if __name__ == '__main__':
diff -pruN 2.23.6-1/tests/integration/botocore/test_credentials.py 2.31.35-1/tests/integration/botocore/test_credentials.py
--- 2.23.6-1/tests/integration/botocore/test_credentials.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_credentials.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,25 +10,24 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import json
 import os
-import tempfile
 import shutil
-import json
+import tempfile
 import time
 from uuid import uuid4
 
-from botocore.session import Session
 from botocore.exceptions import ClientError
-from tests import BaseEnvVar, temporary_file, random_chars, mock
+from botocore.session import Session
 
+from tests import BaseEnvVar, mock, random_chars, temporary_file
 
 S3_READ_POLICY_ARN = 'arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess'
 
 
 class TestCredentialPrecedence(BaseEnvVar):
-
     def setUp(self):
-        super(TestCredentialPrecedence, self).setUp()
+        super().setUp()
 
         # Set the config file to something that doesn't exist so
         # that we don't accidentally load a config.
@@ -42,9 +41,11 @@ class TestCredentialPrecedence(BaseEnvVa
         """
         kwargs['session_vars'] = {
             'credentials_file': (
-                None, None,
+                None,
+                None,
                 os.path.join(os.path.dirname(__file__), 'test-credentials'),
-                None)
+                None,
+            )
         }
 
         return Session(*args, **kwargs)
@@ -68,11 +69,16 @@ class TestCredentialPrecedence(BaseEnvVa
         # take precedence.
         s = self.create_session(profile='test')
 
-        client = s.create_client('s3', aws_access_key_id='code',
-                                 aws_secret_access_key='code-secret')
+        s.create_client(
+            's3', aws_access_key_id='code', aws_secret_access_key='code-secret'
+        )
 
         credentials_cls.assert_called_with(
-            access_key='code', secret_key='code-secret', token=mock.ANY)
+            access_key='code',
+            secret_key='code-secret',
+            token=mock.ANY,
+            account_id=mock.ANY,
+        )
 
     def test_profile_env_vs_code(self):
         # If the profile is set both by the env var and by code,
@@ -93,11 +99,16 @@ class TestCredentialPrecedence(BaseEnvVa
         os.environ['AWS_SECRET_ACCESS_KEY'] = 'secret'
         s = self.create_session()
 
-        client = s.create_client('s3', aws_access_key_id='code',
-                                 aws_secret_access_key='code-secret')
+        s.create_client(
+            's3', aws_access_key_id='code', aws_secret_access_key='code-secret'
+        )
 
         credentials_cls.assert_called_with(
-            access_key='code', secret_key='code-secret', token=mock.ANY)
+            access_key='code',
+            secret_key='code-secret',
+            token=mock.ANY,
+            account_id=mock.ANY,
+        )
 
     def test_access_secret_env_vs_profile_code(self):
         # If access/secret keys are set in the environment, but then a
@@ -118,9 +129,11 @@ class TestCredentialPrecedence(BaseEnvVa
 
     def test_honors_aws_shared_credentials_file_env_var(self):
         with temporary_file('w') as f:
-            f.write('[default]\n'
-                    'aws_access_key_id=custom1\n'
-                    'aws_secret_access_key=custom2\n')
+            f.write(
+                '[default]\n'
+                'aws_access_key_id=custom1\n'
+                'aws_secret_access_key=custom2\n'
+            )
             f.flush()
             os.environ['AWS_SHARED_CREDENTIALS_FILE'] = f.name
             s = Session()
@@ -134,7 +147,7 @@ class TestAssumeRoleCredentials(BaseEnvV
     def setUp(self):
         self.env_original = os.environ.copy()
         self.environ_copy = os.environ.copy()
-        super(TestAssumeRoleCredentials, self).setUp()
+        super().setUp()
         os.environ = self.environ_copy
         # The tests rely on manipulating AWS_CONFIG_FILE,
         # but we also need to make sure we don't accidentally
@@ -154,16 +167,14 @@ class TestAssumeRoleCredentials(BaseEnvV
             "Statement": [
                 {
                     "Effect": "Allow",
-                    "Principal": {
-                        "AWS": "arn:aws:iam::%s:root" % account_id
-                    },
-                    "Action": "sts:AssumeRole"
+                    "Principal": {"AWS": f"arn:aws:iam::{account_id}:root"},
+                    "Action": "sts:AssumeRole",
                 }
-            ]
+            ],
         }
 
     def tearDown(self):
-        super(TestAssumeRoleCredentials, self).tearDown()
+        super().tearDown()
         shutil.rmtree(self.tempdir)
         os.environ = self.env_original.copy()
 
@@ -173,15 +184,15 @@ class TestAssumeRoleCredentials(BaseEnvV
     def create_role(self, policy_document, policy_arn=None):
         name = self.random_name()
         response = self.iam.create_role(
-            RoleName=name,
-            AssumeRolePolicyDocument=json.dumps(policy_document)
+            RoleName=name, AssumeRolePolicyDocument=json.dumps(policy_document)
         )
         self.addCleanup(self.iam.delete_role, RoleName=name)
         if policy_arn:
             self.iam.attach_role_policy(RoleName=name, PolicyArn=policy_arn)
             self.addCleanup(
-                self.iam.detach_role_policy, RoleName=name,
-                PolicyArn=policy_arn
+                self.iam.detach_role_policy,
+                RoleName=name,
+                PolicyArn=policy_arn,
             )
         return response['Role']
 
@@ -191,13 +202,9 @@ class TestAssumeRoleCredentials(BaseEnvV
         self.addCleanup(self.iam.delete_user, UserName=name)
 
         for arn in policy_arns:
-            self.iam.attach_user_policy(
-                UserName=name,
-                PolicyArn=arn
-            )
+            self.iam.attach_user_policy(UserName=name, PolicyArn=arn)
             self.addCleanup(
-                self.iam.detach_user_policy,
-                UserName=name, PolicyArn=arn
+                self.iam.detach_user_policy, UserName=name, PolicyArn=arn
             )
 
         return user
@@ -206,28 +213,40 @@ class TestAssumeRoleCredentials(BaseEnvV
         creds = self.iam.create_access_key(UserName=user_name)['AccessKey']
         self.addCleanup(
             self.iam.delete_access_key,
-            UserName=user_name, AccessKeyId=creds['AccessKeyId']
+            UserName=user_name,
+            AccessKeyId=creds['AccessKeyId'],
         )
         return creds
 
-    def wait_for_assume_role(self, role_arn, access_key, secret_key,
-                             token=None, attempts=30, delay=10,
-                             success_delay=1,
-                             num_success=4):
+    def wait_for_assume_role(
+        self,
+        role_arn,
+        access_key,
+        secret_key,
+        token=None,
+        attempts=30,
+        delay=10,
+        success_delay=1,
+        num_success=4,
+    ):
         for _ in range(num_success):
             creds = self._wait_for_assume_role(
-                role_arn, access_key, secret_key, token, attempts, delay)
+                role_arn, access_key, secret_key, token, attempts, delay
+            )
             time.sleep(success_delay)
         return creds
 
-    def _wait_for_assume_role(self, role_arn, access_key, secret_key,
-                              token, attempts, delay):
+    def _wait_for_assume_role(
+        self, role_arn, access_key, secret_key, token, attempts, delay
+    ):
         # "Why not use the policy simulator?" you might ask. The answer is
         # that the policy simulator will return success far before you can
         # actually make the calls.
         client = self.parent_session.create_client(
-            'sts', aws_access_key_id=access_key,
-            aws_secret_access_key=secret_key, aws_session_token=token
+            'sts',
+            aws_access_key_id=access_key,
+            aws_secret_access_key=secret_key,
+            aws_session_token=token,
         )
         attempts_remaining = attempts
         role_session_name = random_chars(10)
@@ -235,7 +254,8 @@ class TestAssumeRoleCredentials(BaseEnvV
             attempts_remaining -= 1
             try:
                 result = client.assume_role(
-                    RoleArn=role_arn, RoleSessionName=role_session_name)
+                    RoleArn=role_arn, RoleSessionName=role_session_name
+                )
                 return result['Credentials']
             except ClientError as e:
                 code = e.response.get('Error', {}).get('Code')
@@ -244,7 +264,7 @@ class TestAssumeRoleCredentials(BaseEnvV
                 else:
                     raise
 
-        raise Exception("Unable to assume role %s" % role_arn)
+        raise Exception(f"Unable to assume role {role_arn}")
 
     def create_assume_policy(self, role_arn):
         policy_document = {
@@ -253,14 +273,13 @@ class TestAssumeRoleCredentials(BaseEnvV
                 {
                     "Effect": "Allow",
                     "Resource": role_arn,
-                    "Action": "sts:AssumeRole"
+                    "Action": "sts:AssumeRole",
                 }
-            ]
+            ],
         }
         name = self.random_name()
         response = self.iam.create_policy(
-            PolicyName=name,
-            PolicyDocument=json.dumps(policy_document)
+            PolicyName=name, PolicyDocument=json.dumps(policy_document)
         )
         self.addCleanup(
             self.iam.delete_policy, PolicyArn=response['Policy']['Arn']
@@ -311,8 +330,10 @@ class TestAssumeRoleCredentials(BaseEnvV
             'role_arn = %s\n'
         )
         config = config % (
-            user_creds['AccessKeyId'], user_creds['SecretAccessKey'],
-            middle_role['Arn'], final_role['Arn']
+            user_creds['AccessKeyId'],
+            user_creds['SecretAccessKey'],
+            middle_role['Arn'],
+            final_role['Arn'],
         )
         with open(self.config_file, 'w') as f:
             f.write(config)
diff -pruN 2.23.6-1/tests/integration/botocore/test_ec2.py 2.31.35-1/tests/integration/botocore/test_ec2.py
--- 2.23.6-1/tests/integration/botocore/test_ec2.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_ec2.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,26 +10,30 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
 import itertools
 
 import botocore.session
 from botocore.exceptions import ClientError
 
+from tests import unittest
+
 
 class TestEC2(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
         self.client = self.session.create_client(
-            'ec2', region_name='us-west-2')
+            'ec2', region_name='us-west-2'
+        )
 
     def test_can_make_request(self):
         # Basic smoke test to ensure we can talk to ec2.
         result = self.client.describe_availability_zones()
         zones = list(
-            sorted(a['ZoneName'] for a in result['AvailabilityZones']))
+            sorted(a['ZoneName'] for a in result['AvailabilityZones'])
+        )
         self.assertTrue(
-            set(['us-west-2a', 'us-west-2b', 'us-west-2c']).issubset(zones))
+            set(['us-west-2a', 'us-west-2b', 'us-west-2c']).issubset(zones)
+        )
 
     def test_get_console_output_handles_error(self):
         # Want to ensure the underlying ClientError is propogated
@@ -42,12 +46,14 @@ class TestEC2Pagination(unittest.TestCas
     def setUp(self):
         self.session = botocore.session.get_session()
         self.client = self.session.create_client(
-            'ec2', region_name='us-west-2')
+            'ec2', region_name='us-west-2'
+        )
 
     def test_can_paginate(self):
         # Using an operation that we know will paginate.
         paginator = self.client.get_paginator(
-            'describe_reserved_instances_offerings')
+            'describe_reserved_instances_offerings'
+        )
         pages = paginator.paginate()
         results = list(itertools.islice(pages, 0, 3))
         self.assertEqual(len(results), 3)
@@ -56,7 +62,8 @@ class TestEC2Pagination(unittest.TestCas
     def test_can_paginate_with_page_size(self):
         # Using an operation that we know will paginate.
         paginator = self.client.get_paginator(
-            'describe_reserved_instances_offerings')
+            'describe_reserved_instances_offerings'
+        )
         pages = paginator.paginate(PaginationConfig={'PageSize': 1})
         results = list(itertools.islice(pages, 0, 3))
         self.assertEqual(len(results), 3)
@@ -69,7 +76,8 @@ class TestEC2Pagination(unittest.TestCas
     def test_can_fall_back_to_old_starting_token(self):
         # Using an operation that we know will paginate.
         paginator = self.client.get_paginator(
-            'describe_reserved_instances_offerings')
+            'describe_reserved_instances_offerings'
+        )
         pages = paginator.paginate(PaginationConfig={'NextToken': 'None___1'})
 
         try:
diff -pruN 2.23.6-1/tests/integration/botocore/test_elastictranscoder.py 2.31.35-1/tests/integration/botocore/test_elastictranscoder.py
--- 2.23.6-1/tests/integration/botocore/test_elastictranscoder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_elastictranscoder.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import unittest, random_chars
-
 import botocore.session
 
+from tests import random_chars, unittest
+
 DEFAULT_ROLE_POLICY = """\
 {"Statement": [
     {
@@ -28,31 +28,31 @@ DEFAULT_ROLE_POLICY = """\
 ]}
 """
 
+
 class TestElasticTranscoder(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
         self.client = self.session.create_client(
-            'elastictranscoder', 'us-east-1')
+            'elastictranscoder', 'us-east-1'
+        )
         self.s3_client = self.session.create_client('s3', 'us-east-1')
         self.iam_client = self.session.create_client('iam', 'us-east-1')
 
     def create_bucket(self):
-        bucket_name = 'ets-bucket-1-%s' % random_chars(50)
+        bucket_name = f'ets-bucket-1-{random_chars(50)}'
         self.s3_client.create_bucket(Bucket=bucket_name)
         waiter = self.s3_client.get_waiter('bucket_exists')
         waiter.wait(Bucket=bucket_name)
-        self.addCleanup(
-            self.s3_client.delete_bucket, Bucket=bucket_name)
+        self.addCleanup(self.s3_client.delete_bucket, Bucket=bucket_name)
         return bucket_name
 
     def create_iam_role(self):
-        role_name = 'ets-role-name-1-%s' % random_chars(10)
+        role_name = f'ets-role-name-1-{random_chars(10)}'
         parsed = self.iam_client.create_role(
-            RoleName=role_name,
-            AssumeRolePolicyDocument=DEFAULT_ROLE_POLICY)
+            RoleName=role_name, AssumeRolePolicyDocument=DEFAULT_ROLE_POLICY
+        )
         arn = parsed['Role']['Arn']
-        self.addCleanup(
-            self.iam_client.delete_role, RoleName=role_name)
+        self.addCleanup(self.iam_client.delete_role, RoleName=role_name)
         return arn
 
     def test_list_streams(self):
@@ -69,13 +69,20 @@ class TestElasticTranscoder(unittest.Tes
         input_bucket = self.create_bucket()
         output_bucket = self.create_bucket()
         role = self.create_iam_role()
-        pipeline_name = 'botocore-test-create-%s' % random_chars(10)
+        pipeline_name = f'botocore-test-create-{random_chars(10)}'
 
         parsed = self.client.create_pipeline(
-            InputBucket=input_bucket, OutputBucket=output_bucket,
-            Role=role, Name=pipeline_name,
-            Notifications={'Progressing': '', 'Completed': '',
-                           'Warning': '', 'Error': ''})
+            InputBucket=input_bucket,
+            OutputBucket=output_bucket,
+            Role=role,
+            Name=pipeline_name,
+            Notifications={
+                'Progressing': '',
+                'Completed': '',
+                'Warning': '',
+                'Error': '',
+            },
+        )
         pipeline_id = parsed['Pipeline']['Id']
         self.addCleanup(self.client.delete_pipeline, Id=pipeline_id)
         self.assertIn('Pipeline', parsed)
diff -pruN 2.23.6-1/tests/integration/botocore/test_emr.py 2.31.35-1/tests/integration/botocore/test_emr.py
--- 2.23.6-1/tests/integration/botocore/test_emr.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_emr.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,19 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import botocore.session
 import pytest
+from botocore.exceptions import OperationNotPageableError
+from botocore.paginate import PageIterator
 
 from tests import unittest
 
-import botocore.session
-from botocore.paginate import PageIterator
-from botocore.exceptions import OperationNotPageableError
-
 
 @pytest.fixture()
 def botocore_session():
     return botocore.session.get_session()
 
+
 @pytest.mark.parametrize(
     "region",
     [
@@ -34,8 +34,8 @@ def botocore_session():
         'ap-southeast-2',
         'sa-east-1',
         'eu-west-1',
-        'eu-central-1'
-    ]
+        'eu-central-1',
+    ],
 )
 def test_emr_endpoints_work_with_py26(botocore_session, region):
     # Verify that we can talk to all currently supported EMR endpoints.
diff -pruN 2.23.6-1/tests/integration/botocore/test_glacier.py 2.31.35-1/tests/integration/botocore/test_glacier.py
--- 2.23.6-1/tests/integration/botocore/test_glacier.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_glacier.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,10 @@
 # language governing permissions and limitations under the License.
 import io
 
-from tests import unittest
-
-from botocore.exceptions import ClientError
 import botocore.session
+from botocore.exceptions import ClientError
+
+from tests import unittest
 
 
 class TestGlacier(unittest.TestCase):
@@ -47,26 +47,31 @@ class TestGlacier(unittest.TestCase):
 
     def test_can_upload_archive(self):
         body = io.BytesIO(b"bytes content")
-        response = self.client.upload_archive(vaultName=self.VAULT_NAME,
-                                              archiveDescription='test upload',
-                                              body=body)
+        response = self.client.upload_archive(
+            vaultName=self.VAULT_NAME,
+            archiveDescription='test upload',
+            body=body,
+        )
         self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 201)
         archive_id = response['archiveId']
-        response = self.client.delete_archive(vaultName=self.VAULT_NAME,
-                                              archiveId=archive_id)
+        response = self.client.delete_archive(
+            vaultName=self.VAULT_NAME, archiveId=archive_id
+        )
         self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 204)
 
     def test_can_upload_archive_from_bytes(self):
-        response = self.client.upload_archive(vaultName=self.VAULT_NAME,
-                                              archiveDescription='test upload',
-                                              body=b'bytes body')
+        response = self.client.upload_archive(
+            vaultName=self.VAULT_NAME,
+            archiveDescription='test upload',
+            body=b'bytes body',
+        )
         self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 201)
         archive_id = response['archiveId']
-        response = self.client.delete_archive(vaultName=self.VAULT_NAME,
-                                              archiveId=archive_id)
+        response = self.client.delete_archive(
+            vaultName=self.VAULT_NAME, archiveId=archive_id
+        )
         self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 204)
 
 
 if __name__ == '__main__':
     unittest.main()
-
diff -pruN 2.23.6-1/tests/integration/botocore/test_loaders.py 2.31.35-1/tests/integration/botocore/test_loaders.py
--- 2.23.6-1/tests/integration/botocore/test_loaders.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_loaders.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-from tests import mock, unittest
 
 import botocore.session
 
+from tests import mock, unittest
+
 
 # Basic sanity checks for loader functionality.
 # We're not using BaseEnvVar here because we don't actually
@@ -40,26 +41,33 @@ class TestLoaderBasicFunctionality(unitt
         # We don't want an exact check, as this list changes over time.
         # We just need a basic sanity check.
         available_services = self.loader.list_available_services(
-            type_name='service-2')
+            type_name='service-2'
+        )
         self.assertIn('ec2', available_services)
         self.assertIn('s3', available_services)
 
     def test_can_determine_latest_version(self):
         api_versions = self.loader.list_api_versions(
-            service_name='ec2', type_name='service-2')
+            service_name='ec2', type_name='service-2'
+        )
         self.assertEqual(
             self.loader.determine_latest_version(
-                service_name='ec2', type_name='service-2'),
-            max(api_versions))
+                service_name='ec2', type_name='service-2'
+            ),
+            max(api_versions),
+        )
 
     def test_can_load_service_model(self):
         waiters = self.loader.load_service_model(
-            service_name='ec2', type_name='waiters-2')
+            service_name='ec2', type_name='waiters-2'
+        )
         self.assertIn('waiters', waiters)
 
     def test_can_load_data(self):
         api_version = self.loader.determine_latest_version(
-            service_name='ec2', type_name='service-2')
+            service_name='ec2', type_name='service-2'
+        )
         data = self.loader.load_data(
-            os.path.join('ec2', api_version, 'service-2'))
+            os.path.join('ec2', api_version, 'service-2')
+        )
         self.assertIn('metadata', data)
diff -pruN 2.23.6-1/tests/integration/botocore/test_rds.py 2.31.35-1/tests/integration/botocore/test_rds.py
--- 2.23.6-1/tests/integration/botocore/test_rds.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_rds.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
 import itertools
 
 import botocore.session
 
+from tests import unittest
+
 
 class TestRDSPagination(unittest.TestCase):
     def setUp(self):
@@ -24,7 +25,8 @@ class TestRDSPagination(unittest.TestCas
     def test_can_paginate_reserved_instances(self):
         # Using an operation that we know will paginate.
         paginator = self.client.get_paginator(
-            'describe_reserved_db_instances_offerings')
+            'describe_reserved_db_instances_offerings'
+        )
         generator = paginator.paginate()
         results = list(itertools.islice(generator, 0, 3))
         self.assertEqual(len(results), 3)
@@ -32,7 +34,8 @@ class TestRDSPagination(unittest.TestCas
 
     def test_can_paginate_orderable_db(self):
         paginator = self.client.get_paginator(
-            'describe_orderable_db_instance_options')
+            'describe_orderable_db_instance_options'
+        )
         generator = paginator.paginate(Engine='mysql')
         results = list(itertools.islice(generator, 0, 2))
         self.assertEqual(len(results), 2)
diff -pruN 2.23.6-1/tests/integration/botocore/test_route53.py 2.31.35-1/tests/integration/botocore/test_route53.py
--- 2.23.6-1/tests/integration/botocore/test_route53.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_route53.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-
 import botocore.session
 from botocore.exceptions import ClientError
 
+from tests import unittest
+
 
 class TestRoute53Pagination(unittest.TestCase):
     def setUp(self):
@@ -35,13 +35,15 @@ class TestRoute53Pagination(unittest.Tes
         # a ClientError is acceptable. In this case, the Hosted Zone specified
         # does not exist.
         with self.assertRaises(ClientError):
-            results = list(paginator.paginate(
-                PaginationConfig={
-                    'MaxItems': '1',
-                    'StartingToken': 'my.domain.name.'
-                },
-                HostedZoneId="foo"
-            ))
+            results = list(
+                paginator.paginate(
+                    PaginationConfig={
+                        'MaxItems': '1',
+                        'StartingToken': 'my.domain.name.',
+                    },
+                    HostedZoneId="foo",
+                )
+            )
             self.assertTrue(len(results) >= 0)
 
 
diff -pruN 2.23.6-1/tests/integration/botocore/test_s3.py 2.31.35-1/tests/integration/botocore/test_s3.py
--- 2.23.6-1/tests/integration/botocore/test_s3.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_s3.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2012-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"). You
@@ -11,34 +10,37 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import (
-    unittest, temporary_file, random_chars, ClientHTTPStubber,
-    ConsistencyWaiter,
-)
+import logging
 import os
-import time
-from collections import defaultdict
-import tempfile
 import shutil
+import tempfile
 import threading
-import logging
-from tarfile import TarFile
+import time
+from collections import defaultdict
 from contextlib import closing
 from io import BytesIO
+from tarfile import TarFile
 
-import pytest
-import urllib3
-
-from botocore.endpoint import Endpoint
-from botocore.exceptions import ConnectionClosedError
-from botocore.compat import zip_longest, OrderedDict
-import botocore.session
 import botocore.auth
 import botocore.credentials
+import botocore.session
+import pytest
+import urllib3
+from botocore.compat import OrderedDict, zip_longest
 from botocore.config import Config
-from botocore.exceptions import ClientError, WaiterError
+from botocore.endpoint import Endpoint
+from botocore.exceptions import ClientError, ConnectionClosedError, WaiterError
 from botocore.httpsession import DEFAULT_CA_BUNDLE
 
+from tests import (
+    ClientHTTPStubber,
+    ConsistencyWaiter,
+    random_chars,
+    temporary_file,
+    unittest,
+)
+
+
 def random_bucketname():
     return 'botocoretest-' + random_chars(50)
 
@@ -49,20 +51,23 @@ _DEFAULT_REGION = 'us-west-2'
 
 
 def http_get(url):
-    http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
-                               ca_certs=DEFAULT_CA_BUNDLE)
+    http = urllib3.PoolManager(
+        cert_reqs='CERT_REQUIRED', ca_certs=DEFAULT_CA_BUNDLE
+    )
     response = http.request('GET', url)
     return response
 
 
 def http_post(url, data, files):
-    http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',
-                               ca_certs=DEFAULT_CA_BUNDLE)
+    http = urllib3.PoolManager(
+        cert_reqs='CERT_REQUIRED', ca_certs=DEFAULT_CA_BUNDLE
+    )
     merged_data = OrderedDict()
     merged_data.update(data)
     merged_data.update(files)
     response = http.request(
-        'POST', url,
+        'POST',
+        url,
         fields=merged_data,
     )
     return response
@@ -90,8 +95,7 @@ def setup_module():
 
 
 def clear_out_bucket(bucket, region, delete_bucket=False):
-    s3 = botocore.session.get_session().create_client(
-        's3', region_name=region)
+    s3 = botocore.session.get_session().create_client('s3', region_name=region)
     # Ensure the bucket exists before attempting to wipe it out
     exists_waiter = s3.get_waiter('bucket_exists')
     exists_waiter.wait(Bucket=bucket)
@@ -105,7 +109,7 @@ def clear_out_bucket(bucket, region, del
         for _ in range(5):
             try:
                 s3.delete_bucket(Bucket=bucket)
-                break
+                return
             except s3.exceptions.NoSuchBucket:
                 exists_waiter.wait(Bucket=bucket)
             except Exception as e:
@@ -113,12 +117,17 @@ def clear_out_bucket(bucket, region, del
                 # delete a bucket.  We'll let the waiter make
                 # the final call as to whether the bucket was able
                 # to be deleted.
-                LOG.debug("delete_bucket() raised an exception: %s",
-                          e, exc_info=True)
+                LOG.debug(
+                    "delete_bucket() raised an exception: %s", e, exc_info=True
+                )
                 not_exists_waiter = s3.get_waiter('bucket_not_exists')
-                not_exists_waiter.wait(Bucket=bucket)
-            except WaiterError:
-                continue
+                try:
+                    not_exists_waiter.wait(Bucket=bucket)
+                    return
+                except WaiterError:
+                    continue
+        # If all attempts to delete the bucket fail, we still need to raise an error
+        raise RuntimeError(f"Bucket {bucket} still exists after attempted deletion.")
 
 
 def teardown_module():
@@ -126,7 +135,6 @@ def teardown_module():
 
 
 class BaseS3ClientTest(unittest.TestCase):
-
     DEFAULT_DELAY = 5
 
     def setUp(self):
@@ -138,15 +146,17 @@ class BaseS3ClientTest(unittest.TestCase
 
     def assert_status_code(self, response, status_code):
         self.assertEqual(
-            response['ResponseMetadata']['HTTPStatusCode'],
-            status_code
+            response['ResponseMetadata']['HTTPStatusCode'], status_code
         )
 
     def create_bucket(self, region_name, bucket_name=None, client=None):
         bucket_client = client or self.client
         if bucket_name is None:
             bucket_name = random_bucketname()
-        bucket_kwargs = {'Bucket': bucket_name, 'ObjectOwnership': 'ObjectWriter'}
+        bucket_kwargs = {
+            'Bucket': bucket_name,
+            'ObjectOwnership': 'ObjectWriter',
+        }
         if region_name != 'us-east-1':
             bucket_kwargs['CreateBucketConfiguration'] = {
                 'LocationConstraint': region_name,
@@ -155,8 +165,8 @@ class BaseS3ClientTest(unittest.TestCase
         self.assert_status_code(response, 200)
         waiter = bucket_client.get_waiter('bucket_exists')
         consistency_waiter = ConsistencyWaiter(
-            min_successes=3, delay=self.DEFAULT_DELAY,
-            delay_initial_poll=True)
+            min_successes=3, delay=self.DEFAULT_DELAY, delay_initial_poll=True
+        )
         consistency_waiter.wait(
             lambda: waiter.wait(Bucket=bucket_name) is None
         )
@@ -168,8 +178,8 @@ class BaseS3ClientTest(unittest.TestCase
         for _ in range(num_attempts):
             try:
                 self.client.put_object(
-                    Bucket=self.bucket_name, Key=key_name,
-                    Body=body)
+                    Bucket=self.bucket_name, Key=key_name, Body=body
+                )
                 break
             except self.client.exceptions.NoSuchBucket:
                 time.sleep(self.DEFAULT_DELAY)
@@ -180,18 +190,28 @@ class BaseS3ClientTest(unittest.TestCase
         self.addCleanup(shutil.rmtree, tempdir)
         return tempdir
 
-    def wait_until_key_exists(self, bucket_name, key_name, extra_params=None,
-                              min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=True)
-
-    def wait_until_key_not_exists(self, bucket_name, key_name, extra_params=None,
-                                  min_successes=3):
-        self._wait_for_key(bucket_name, key_name, extra_params,
-                           min_successes, exists=False)
+    def wait_until_key_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=True
+        )
+
+    def wait_until_key_not_exists(
+        self, bucket_name, key_name, extra_params=None, min_successes=3
+    ):
+        self._wait_for_key(
+            bucket_name, key_name, extra_params, min_successes, exists=False
+        )
 
-    def _wait_for_key(self, bucket_name, key_name, extra_params=None,
-                      min_successes=3, exists=True):
+    def _wait_for_key(
+        self,
+        bucket_name,
+        key_name,
+        extra_params=None,
+        min_successes=3,
+        exists=True,
+    ):
         if exists:
             waiter = self.client.get_waiter('object_exists')
         else:
@@ -211,27 +231,33 @@ class BaseS3ClientTest(unittest.TestCase
     def wait_until_versioning_enabled(self, bucket, min_successes=3):
         waiter = ConsistencyWaiter(
             min_successes=min_successes,
-            delay=self.DEFAULT_DELAY, delay_initial_poll=True)
+            delay=self.DEFAULT_DELAY,
+            delay_initial_poll=True,
+        )
         waiter.wait(self._check_bucket_versioning, bucket)
 
 
 class TestS3BaseWithBucket(BaseS3ClientTest):
     def setUp(self):
-        super(TestS3BaseWithBucket, self).setUp()
+        super().setUp()
         self.caught_exceptions = []
 
     def create_multipart_upload(self, key_name):
         parsed = self.client.create_multipart_upload(
-            Bucket=self.bucket_name, Key=key_name)
+            Bucket=self.bucket_name, Key=key_name
+        )
         upload_id = parsed['UploadId']
         self.addCleanup(
             self.client.abort_multipart_upload,
             UploadId=upload_id,
-            Bucket=self.bucket_name, Key=key_name)
+            Bucket=self.bucket_name,
+            Key=key_name,
+        )
 
     def abort_multipart_upload(self, bucket_name, key, upload_id):
         self.client.abort_multipart_upload(
-            UploadId=upload_id, Bucket=self.bucket_name, Key=key)
+            UploadId=upload_id, Bucket=self.bucket_name, Key=key
+        )
 
     def delete_object(self, key, bucket_name):
         response = self.client.delete_object(Bucket=bucket_name, Key=key)
@@ -247,14 +273,16 @@ class TestS3BaseWithBucket(BaseS3ClientT
         except Exception as e:
             self.caught_exceptions.append(e)
 
-    def assert_num_uploads_found(self, operation, num_uploads,
-                                 max_items=None, num_attempts=5):
+    def assert_num_uploads_found(
+        self, operation, num_uploads, max_items=None, num_attempts=5
+    ):
         amount_seen = None
         paginator = self.client.get_paginator(operation)
         for _ in range(num_attempts):
-            pages = paginator.paginate(Bucket=self.bucket_name,
-                                       PaginationConfig={
-                                           'MaxItems': max_items})
+            pages = paginator.paginate(
+                Bucket=self.bucket_name,
+                PaginationConfig={'MaxItems': max_items},
+            )
             iterators = pages.result_key_iters()
             self.assertEqual(len(iterators), 2)
             self.assertEqual(iterators[0].result_key.expression, 'Uploads')
@@ -269,8 +297,9 @@ class TestS3BaseWithBucket(BaseS3ClientT
             else:
                 # Sleep and try again.
                 time.sleep(2)
-        self.fail("Expected to see %s uploads, instead saw: %s" % (
-            num_uploads, amount_seen))
+        self.fail(
+            f"Expected to see {num_uploads} uploads, instead saw: {amount_seen}"
+        )
 
     def create_client(self):
         return self.session.create_client('s3', self.region)
@@ -278,24 +307,27 @@ class TestS3BaseWithBucket(BaseS3ClientT
     def assert_can_put_object(self, body):
         client = self.create_client()
         response = client.put_object(
-            Bucket=self.bucket_name, Key='foo',
-            Body=body)
+            Bucket=self.bucket_name, Key='foo', Body=body
+        )
         self.assert_status_code(response, 200)
         self.addCleanup(
-            client.delete_object, Bucket=self.bucket_name, Key='foo')
+            client.delete_object, Bucket=self.bucket_name, Key='foo'
+        )
 
 
 class TestS3Buckets(TestS3BaseWithBucket):
     def setUp(self):
-        super(TestS3Buckets, self).setUp()
+        super().setUp()
 
     def test_can_make_request(self):
         # Basic smoke test to ensure we can talk to s3.
         result = self.client.list_buckets()
         # Can't really assume anything about whether or not they have buckets,
         # but we can assume something about the structure of the response.
-        self.assertEqual(sorted(list(result.keys())),
-                         ['Buckets', 'Owner', 'ResponseMetadata'])
+        self.assertEqual(
+            sorted(list(result.keys())),
+            ['Buckets', 'Owner', 'ResponseMetadata'],
+        )
 
     def test_can_get_bucket_location(self):
         result = self.client.get_bucket_location(Bucket=self.bucket_name)
@@ -304,73 +336,72 @@ class TestS3Buckets(TestS3BaseWithBucket
 
 
 class TestS3Objects(TestS3BaseWithBucket):
-
     def increment_auth(self, request, **kwargs):
         self.auth_paths.append(request.auth_path)
 
     def test_can_delete_urlencoded_object(self):
         key_name = 'a+b/foo'
         self.create_object(key_name=key_name)
-        bucket_contents = self.client.list_objects(
-            Bucket=self.bucket_name)['Contents']
+        bucket_contents = self.client.list_objects(Bucket=self.bucket_name)[
+            'Contents'
+        ]
         self.assertEqual(len(bucket_contents), 1)
         self.assertEqual(bucket_contents[0]['Key'], 'a+b/foo')
 
         subdir_contents = self.client.list_objects(
-            Bucket=self.bucket_name, Prefix='a+b')['Contents']
+            Bucket=self.bucket_name, Prefix='a+b'
+        )['Contents']
         self.assertEqual(len(subdir_contents), 1)
         self.assertEqual(subdir_contents[0]['Key'], 'a+b/foo')
 
         response = self.client.delete_object(
-            Bucket=self.bucket_name, Key=key_name)
+            Bucket=self.bucket_name, Key=key_name
+        )
         self.assert_status_code(response, 204)
 
     @pytest.mark.slow
     def test_can_paginate(self):
         for i in range(5):
-            key_name = 'key%s' % i
+            key_name = f'key{i}'
             self.create_object(key_name)
         # Eventual consistency.
         time.sleep(3)
         paginator = self.client.get_paginator('list_objects')
-        generator = paginator.paginate(MaxKeys=1,
-                                       Bucket=self.bucket_name)
+        generator = paginator.paginate(MaxKeys=1, Bucket=self.bucket_name)
         responses = list(generator)
         self.assertEqual(len(responses), 5, responses)
-        key_names = [el['Contents'][0]['Key']
-                     for el in responses]
+        key_names = [el['Contents'][0]['Key'] for el in responses]
         self.assertEqual(key_names, ['key0', 'key1', 'key2', 'key3', 'key4'])
 
     @pytest.mark.slow
     def test_can_paginate_with_page_size(self):
         for i in range(5):
-            key_name = 'key%s' % i
+            key_name = f'key{i}'
             self.create_object(key_name)
         # Eventual consistency.
         time.sleep(3)
         paginator = self.client.get_paginator('list_objects')
-        generator = paginator.paginate(PaginationConfig={'PageSize': 1},
-                                       Bucket=self.bucket_name)
+        generator = paginator.paginate(
+            PaginationConfig={'PageSize': 1}, Bucket=self.bucket_name
+        )
         responses = list(generator)
         self.assertEqual(len(responses), 5, responses)
         data = [r for r in responses]
-        key_names = [el['Contents'][0]['Key']
-                     for el in data]
+        key_names = [el['Contents'][0]['Key'] for el in data]
         self.assertEqual(key_names, ['key0', 'key1', 'key2', 'key3', 'key4'])
 
     @pytest.mark.slow
     def test_result_key_iters(self):
         for i in range(5):
-            key_name = 'key/%s/%s' % (i, i)
+            key_name = f'key/{i}/{i}'
             self.create_object(key_name)
-            key_name2 = 'key/%s' % i
+            key_name2 = f'key/{i}'
             self.create_object(key_name2)
         time.sleep(3)
         paginator = self.client.get_paginator('list_objects')
-        generator = paginator.paginate(MaxKeys=2,
-                                       Prefix='key/',
-                                       Delimiter='/',
-                                       Bucket=self.bucket_name)
+        generator = paginator.paginate(
+            MaxKeys=2, Prefix='key/', Delimiter='/', Bucket=self.bucket_name
+        )
         iterators = generator.result_key_iters()
         response = defaultdict(list)
         key_names = [i.result_key for i in iterators]
@@ -386,12 +417,11 @@ class TestS3Objects(TestS3BaseWithBucket
         self.create_object('foobarbaz', body='body contents')
         time.sleep(3)
 
-        data = self.client.get_object(
-            Bucket=self.bucket_name, Key='foobarbaz')
+        data = self.client.get_object(Bucket=self.bucket_name, Key='foobarbaz')
         self.assertEqual(data['Body'].read().decode('utf-8'), 'body contents')
 
     def test_can_put_large_string_body_on_new_bucket(self):
-        body = '*' * (5 * (1024 ** 2))
+        body = '*' * (5 * (1024**2))
         self.assert_can_put_object(body)
 
     def test_can_put_object_bytearray(self):
@@ -402,7 +432,8 @@ class TestS3Objects(TestS3BaseWithBucket
     def test_get_object_stream_wrapper(self):
         self.create_object('foobarbaz', body='body contents')
         response = self.client.get_object(
-            Bucket=self.bucket_name, Key='foobarbaz')
+            Bucket=self.bucket_name, Key='foobarbaz'
+        )
         body = response['Body']
         # Am able to set a socket timeout
         body.set_socket_timeout(10)
@@ -420,17 +451,20 @@ class TestS3Objects(TestS3BaseWithBucket
         self.create_multipart_upload('bar/key2')
 
         # Verify when we have MaxItems=None, we get back all 8 uploads.
-        self.assert_num_uploads_found('list_multipart_uploads',
-                                      max_items=None, num_uploads=8)
+        self.assert_num_uploads_found(
+            'list_multipart_uploads', max_items=None, num_uploads=8
+        )
 
         # Verify when we have MaxItems=1, we get back 1 upload.
-        self.assert_num_uploads_found('list_multipart_uploads',
-                                      max_items=1, num_uploads=1)
+        self.assert_num_uploads_found(
+            'list_multipart_uploads', max_items=1, num_uploads=1
+        )
 
         paginator = self.client.get_paginator('list_multipart_uploads')
         # Works similar with build_full_result()
-        pages = paginator.paginate(PaginationConfig={'MaxItems': 1},
-                                   Bucket=self.bucket_name)
+        pages = paginator.paginate(
+            PaginationConfig={'MaxItems': 1}, Bucket=self.bucket_name
+        )
         full_result = pages.build_full_result()
         self.assertEqual(len(full_result['Uploads']), 1)
 
@@ -442,26 +476,30 @@ class TestS3Objects(TestS3BaseWithBucket
         paginator = self.client.get_paginator('list_objects')
         # First do it without a max keys so we're operating on a single page of
         # results.
-        pages = paginator.paginate(PaginationConfig={'MaxItems': 1},
-                                   Bucket=self.bucket_name)
+        pages = paginator.paginate(
+            PaginationConfig={'MaxItems': 1}, Bucket=self.bucket_name
+        )
         first = pages.build_full_result()
         t1 = first['NextToken']
 
         pages = paginator.paginate(
             PaginationConfig={'MaxItems': 1, 'StartingToken': t1},
-            Bucket=self.bucket_name)
+            Bucket=self.bucket_name,
+        )
         second = pages.build_full_result()
         t2 = second['NextToken']
 
         pages = paginator.paginate(
             PaginationConfig={'MaxItems': 1, 'StartingToken': t2},
-            Bucket=self.bucket_name)
+            Bucket=self.bucket_name,
+        )
         third = pages.build_full_result()
         t3 = third['NextToken']
 
         pages = paginator.paginate(
             PaginationConfig={'MaxItems': 1, 'StartingToken': t3},
-            Bucket=self.bucket_name)
+            Bucket=self.bucket_name,
+        )
         fourth = pages.build_full_result()
 
         self.assertEqual(first['Contents'][-1]['Key'], 'a')
@@ -471,13 +509,12 @@ class TestS3Objects(TestS3BaseWithBucket
 
     def test_unicode_key_put_list(self):
         # Verify we can upload a key with a unicode char and list it as well.
-        key_name = u'\u2713'
+        key_name = '\u2713'
         self.create_object(key_name)
         parsed = self.client.list_objects(Bucket=self.bucket_name)
         self.assertEqual(len(parsed['Contents']), 1)
         self.assertEqual(parsed['Contents'][0]['Key'], key_name)
-        parsed = self.client.get_object(
-            Bucket=self.bucket_name, Key=key_name)
+        parsed = self.client.get_object(Bucket=self.bucket_name, Key=key_name)
         self.assertEqual(parsed['Body'].read().decode('utf-8'), 'foo')
 
     def test_unicode_system_character(self):
@@ -490,8 +527,9 @@ class TestS3Objects(TestS3BaseWithBucket
         self.assertEqual(len(parsed['Contents']), 1)
         self.assertEqual(parsed['Contents'][0]['Key'], key_name)
 
-        parsed = self.client.list_objects(Bucket=self.bucket_name,
-                                          EncodingType='url')
+        parsed = self.client.list_objects(
+            Bucket=self.bucket_name, EncodingType='url'
+        )
         self.assertEqual(len(parsed['Contents']), 1)
         self.assertEqual(parsed['Contents'][0]['Key'], 'foo%08')
 
@@ -505,8 +543,9 @@ class TestS3Objects(TestS3BaseWithBucket
         self.assertEqual(len(parsed['Contents']), 1)
         self.assertEqual(parsed['Contents'][0]['Key'], key_name)
 
-        parsed = self.client.list_objects_v2(Bucket=self.bucket_name,
-                                          EncodingType='url')
+        parsed = self.client.list_objects_v2(
+            Bucket=self.bucket_name, EncodingType='url'
+        )
         self.assertEqual(len(parsed['Contents']), 1)
         self.assertEqual(parsed['Contents'][0]['Key'], 'foo%08')
 
@@ -520,8 +559,9 @@ class TestS3Objects(TestS3BaseWithBucket
         self.assertEqual(len(parsed['Versions']), 1)
         self.assertEqual(parsed['Versions'][0]['Key'], key_name)
 
-        parsed = self.client.list_object_versions(Bucket=self.bucket_name,
-                                          EncodingType='url')
+        parsed = self.client.list_object_versions(
+            Bucket=self.bucket_name, EncodingType='url'
+        )
         self.assertEqual(len(parsed['Versions']), 1)
         self.assertEqual(parsed['Versions'][0]['Key'], 'foo%03')
 
@@ -532,13 +572,15 @@ class TestS3Objects(TestS3BaseWithBucket
         # This test depends on auth_path, which is only added in virtual host
         # style requests.
         config = Config(s3={'addressing_style': 'virtual'})
-        self.client = self.session.create_client('s3', self.region,
-                                                 config=config)
+        self.client = self.session.create_client(
+            's3', self.region, config=config
+        )
         self.create_object(key_name='foo1')
         threads = []
         for i in range(10):
-            t = threading.Thread(target=self.create_object_catch_exceptions,
-                                 args=('foo%s' % i,))
+            t = threading.Thread(
+                target=self.create_object_catch_exceptions, args=(f'foo{i}',)
+            )
             t.daemon = True
             threads.append(t)
         for thread in threads:
@@ -546,28 +588,31 @@ class TestS3Objects(TestS3BaseWithBucket
         for thread in threads:
             thread.join()
         self.assertEqual(
-            self.caught_exceptions, [],
-            "Unexpectedly caught exceptions: %s" % self.caught_exceptions)
+            self.caught_exceptions,
+            [],
+            f"Unexpectedly caught exceptions: {self.caught_exceptions}",
+        )
         self.assertEqual(
-            len(set(self.auth_paths)), 10,
-            "Expected 10 unique auth paths, instead received: %s" %
-            (self.auth_paths))
+            len(set(self.auth_paths)),
+            10,
+            f"Expected 10 unique auth paths, instead received: {self.auth_paths}",
+        )
 
     def test_non_normalized_key_paths(self):
         # The create_object method has assertEqual checks for 200 status.
         self.create_object('key./././name')
-        bucket_contents = self.client.list_objects(
-            Bucket=self.bucket_name)['Contents']
+        bucket_contents = self.client.list_objects(Bucket=self.bucket_name)[
+            'Contents'
+        ]
         self.assertEqual(len(bucket_contents), 1)
         self.assertEqual(bucket_contents[0]['Key'], 'key./././name')
 
 
 class TestS3Regions(BaseS3ClientTest):
     def setUp(self):
-        super(TestS3Regions, self).setUp()
+        super().setUp()
         self.region = 'us-west-2'
-        self.client = self.session.create_client(
-            's3', region_name=self.region)
+        self.client = self.session.create_client('s3', region_name=self.region)
 
     def test_reset_stream_on_redirects(self):
         # Create a bucket in a non classic region.
@@ -578,28 +623,26 @@ class TestS3Regions(BaseS3ClientTest):
         with open(filename, 'wb') as f:
             f.write(b'foo' * 1024)
         with open(filename, 'rb') as f:
-            self.client.put_object(
-                Bucket=bucket_name, Key='foo', Body=f)
+            self.client.put_object(Bucket=bucket_name, Key='foo', Body=f)
 
-        data = self.client.get_object(
-            Bucket=bucket_name, Key='foo')
+        data = self.client.get_object(Bucket=bucket_name, Key='foo')
         self.assertEqual(data['Body'].read(), b'foo' * 1024)
 
 
 class TestS3Copy(TestS3BaseWithBucket):
-
     def test_copy_with_quoted_char(self):
         key_name = 'a+b/foo'
         self.create_object(key_name=key_name)
 
         key_name2 = key_name + 'bar'
         self.client.copy_object(
-            Bucket=self.bucket_name, Key=key_name2,
-            CopySource='%s/%s' % (self.bucket_name, key_name))
+            Bucket=self.bucket_name,
+            Key=key_name2,
+            CopySource=f'{self.bucket_name}/{key_name}',
+        )
 
         # Now verify we can retrieve the copied object.
-        data = self.client.get_object(
-            Bucket=self.bucket_name, Key=key_name2)
+        data = self.client.get_object(Bucket=self.bucket_name, Key=key_name2)
         self.assertEqual(data['Body'].read().decode('utf-8'), 'foo')
 
     def test_copy_with_query_string(self):
@@ -608,12 +651,13 @@ class TestS3Copy(TestS3BaseWithBucket):
 
         key_name2 = key_name + 'bar'
         self.client.copy_object(
-            Bucket=self.bucket_name, Key=key_name2,
-            CopySource='%s/%s' % (self.bucket_name, key_name))
+            Bucket=self.bucket_name,
+            Key=key_name2,
+            CopySource=f'{self.bucket_name}/{key_name}',
+        )
 
         # Now verify we can retrieve the copied object.
-        data = self.client.get_object(
-            Bucket=self.bucket_name, Key=key_name2)
+        data = self.client.get_object(Bucket=self.bucket_name, Key=key_name2)
         self.assertEqual(data['Body'].read().decode('utf-8'), 'foo')
 
     def test_can_copy_with_dict_form(self):
@@ -622,13 +666,13 @@ class TestS3Copy(TestS3BaseWithBucket):
 
         key_name2 = key_name + 'bar'
         self.client.copy_object(
-            Bucket=self.bucket_name, Key=key_name2,
-            CopySource={'Bucket': self.bucket_name,
-                        'Key': key_name})
+            Bucket=self.bucket_name,
+            Key=key_name2,
+            CopySource={'Bucket': self.bucket_name, 'Key': key_name},
+        )
 
         # Now verify we can retrieve the copied object.
-        data = self.client.get_object(
-            Bucket=self.bucket_name, Key=key_name2)
+        data = self.client.get_object(Bucket=self.bucket_name, Key=key_name2)
         self.assertEqual(data['Body'].read().decode('utf-8'), 'foo')
 
     def test_copy_with_s3_metadata(self):
@@ -636,15 +680,16 @@ class TestS3Copy(TestS3BaseWithBucket):
         self.create_object(key_name=key_name)
         copied_key = 'copied.txt'
         parsed = self.client.copy_object(
-            Bucket=self.bucket_name, Key=copied_key,
-            CopySource='%s/%s' % (self.bucket_name, key_name),
+            Bucket=self.bucket_name,
+            Key=copied_key,
+            CopySource=f'{self.bucket_name}/{key_name}',
             MetadataDirective='REPLACE',
-            Metadata={"mykey": "myvalue", "mykey2": "myvalue2"})
+            Metadata={"mykey": "myvalue", "mykey2": "myvalue2"},
+        )
         self.assert_status_code(parsed, 200)
 
 
 class BaseS3PresignTest(BaseS3ClientTest):
-
     def setup_bucket(self):
         self.key = 'myobject'
         self.create_object(key_name=self.key)
@@ -652,44 +697,54 @@ class BaseS3PresignTest(BaseS3ClientTest
 
 class TestS3PresignUsStandard(BaseS3PresignTest):
     def setUp(self):
-        super(TestS3PresignUsStandard, self).setUp()
+        super().setUp()
         self.region = 'us-east-1'
         self.client_config = Config(region_name=self.region)
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
         self.bucket_name = self.create_bucket(self.region)
         self.setup_bucket()
 
     def test_presign_with_existing_query_string_values(self):
         content_disposition = 'attachment; filename=foo.txt;'
         presigned_url = self.client.generate_presigned_url(
-            'get_object', Params={
-                'Bucket': self.bucket_name, 'Key': self.key,
-                'ResponseContentDisposition': content_disposition})
+            'get_object',
+            Params={
+                'Bucket': self.bucket_name,
+                'Key': self.key,
+                'ResponseContentDisposition': content_disposition,
+            },
+        )
         response = http_get(presigned_url)
-        self.assertEqual(response.headers['Content-Disposition'],
-                         content_disposition)
+        self.assertEqual(
+            response.headers['Content-Disposition'], content_disposition
+        )
         self.assertEqual(response.data, b'foo')
 
     def test_presign_sigv4(self):
         self.client_config.signature_version = 's3v4'
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
         presigned_url = self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key})
+            'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key}
+        )
         self.assertTrue(
             presigned_url.startswith(
-                'https://%s.s3.us-east-1.amazonaws.com/%s' % (
-                    self.bucket_name, self.key)),
+                f'https://{self.bucket_name}.s3.us-east-1.amazonaws.com/{self.key}'
+            ),
             "Host was suppose to be the us-east-1 endpoint, instead "
-            "got: %s" % presigned_url)
+            f"got: {presigned_url}",
+        )
         # Try to retrieve the object using the presigned url.
         self.assertEqual(http_get(presigned_url).data, b'foo')
 
     def test_presign_post_sigv4(self):
         self.client_config.signature_version = 's3v4'
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
 
         # Create some of the various supported conditions.
         conditions = [
@@ -703,8 +758,8 @@ class TestS3PresignUsStandard(BaseS3Pres
 
         # Retrieve the args for the presigned post.
         post_args = self.client.generate_presigned_post(
-            self.bucket_name, self.key, Fields=fields,
-            Conditions=conditions)
+            self.bucket_name, self.key, Fields=fields, Conditions=conditions
+        )
 
         # Make sure that the form can be posted successfully.
         files = {'file': ('baz', 'some data')}
@@ -712,22 +767,23 @@ class TestS3PresignUsStandard(BaseS3Pres
         # Make sure the correct endpoint is being used
         self.assertTrue(
             post_args['url'].startswith(
-                'https://%s.s3.us-east-1.amazonaws.com/' % self.bucket_name),
+                f'https://{self.bucket_name}.s3.us-east-1.amazonaws.com/'
+            ),
             "Host was suppose to use us-east-1 endpoint, instead "
-            "got: %s" % post_args['url'])
+            "got: {}".format(post_args['url']),
+        )
 
-        r = http_post(post_args['url'], data=post_args['fields'],
-                      files=files)
+        r = http_post(post_args['url'], data=post_args['fields'], files=files)
         self.assertEqual(r.status, 204)
 
 
 class TestS3PresignNonUsStandard(BaseS3PresignTest):
-
     def setUp(self):
-        super(TestS3PresignNonUsStandard, self).setUp()
+        super().setUp()
         self.client_config = Config(region_name=self.region)
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
         self.setup_bucket()
 
     def test_presign_sigv4(self):
@@ -740,23 +796,27 @@ class TestS3PresignNonUsStandard(BaseS3P
         self.client_config.signature_version = 's3v4'
         self.client_config.s3 = {'addressing_style': 'path'}
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
         presigned_url = self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key})
+            'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key}
+        )
 
         self.assertTrue(
             presigned_url.startswith(
-                'https://s3.us-west-2.amazonaws.com/%s/%s' % (
-                    self.bucket_name, self.key)),
+                f'https://s3.us-west-2.amazonaws.com/{self.bucket_name}/{self.key}'
+            ),
             "Host was suppose to be the us-west-2 endpoint, instead "
-            "got: %s" % presigned_url)
+            f"got: {presigned_url}",
+        )
         # Try to retrieve the object using the presigned url.
         self.assertEqual(http_get(presigned_url).data, b'foo')
 
     def test_presign_post_sigv4(self):
         self.client_config.signature_version = 's3v4'
         self.client = self.session.create_client(
-            's3', config=self.client_config)
+            's3', config=self.client_config
+        )
 
         # Create some of the various supported conditions.
         conditions = [
@@ -770,7 +830,8 @@ class TestS3PresignNonUsStandard(BaseS3P
 
         # Retrieve the args for the presigned post.
         post_args = self.client.generate_presigned_post(
-            self.bucket_name, self.key, Fields=fields, Conditions=conditions)
+            self.bucket_name, self.key, Fields=fields, Conditions=conditions
+        )
 
         # Make sure that the form can be posted successfully.
         files = {'file': ('baz', 'some data')}
@@ -778,17 +839,18 @@ class TestS3PresignNonUsStandard(BaseS3P
         # Make sure the correct endpoint is being used
         self.assertTrue(
             post_args['url'].startswith(
-                'https://%s.s3.us-west-2.amazonaws.com/' % self.bucket_name),
-            "Host was suppose to use DNS style, instead "
-            "got: %s" % post_args['url'])
+                f'https://{self.bucket_name}.s3.us-west-2.amazonaws.com/'
+            ),
+            "Host was suppose to use DNS style, instead " "got: {}".format(
+                post_args['url']
+            ),
+        )
 
-        r = http_post(post_args['url'], data=post_args['fields'],
-                      files=files)
+        r = http_post(post_args['url'], data=post_args['fields'], files=files)
         self.assertEqual(r.status, 204)
 
 
 class TestCreateBucketInOtherRegion(TestS3BaseWithBucket):
-
     def test_bucket_in_other_region(self):
         # This verifies expect 100-continue behavior.  We previously
         # had a bug where we did not support this behavior and trying to
@@ -800,8 +862,8 @@ class TestCreateBucketInOtherRegion(Test
             f.flush()
             with open(f.name, 'rb') as body_file:
                 response = client.put_object(
-                    Bucket=self.bucket_name,
-                    Key='foo.txt', Body=body_file)
+                    Bucket=self.bucket_name, Key='foo.txt', Body=body_file
+                )
             self.assert_status_code(response, 200)
 
     def test_bucket_in_other_region_using_http(self):
@@ -811,16 +873,17 @@ class TestCreateBucketInOtherRegion(Test
             f.flush()
             with open(f.name, 'rb') as body_file:
                 response = client.put_object(
-                    Bucket=self.bucket_name,
-                    Key='foo.txt', Body=body_file)
+                    Bucket=self.bucket_name, Key='foo.txt', Body=body_file
+                )
             self.assert_status_code(response, 200)
 
 
 class TestS3SigV4Client(BaseS3ClientTest):
     def setUp(self):
-        super(TestS3SigV4Client, self).setUp()
+        super().setUp()
         self.client = self.session.create_client(
-            's3', self.region, config=Config(signature_version='s3v4'))
+            's3', self.region, config=Config(signature_version='s3v4')
+        )
         self.http_stubber = ClientHTTPStubber(self.client)
 
     def test_can_get_bucket_location(self):
@@ -839,28 +902,30 @@ class TestS3SigV4Client(BaseS3ClientTest
         self.http_stubber.responses.append(exception)
         self.http_stubber.responses.append(None)
         with self.http_stubber:
-            response = self.client.put_object(Bucket=self.bucket_name,
-                                              Key='foo.txt', Body=body)
+            response = self.client.put_object(
+                Bucket=self.bucket_name, Key='foo.txt', Body=body
+            )
             self.assert_status_code(response, 200)
 
     @pytest.mark.slow
     def test_paginate_list_objects_unicode(self):
         key_names = [
-            u'non-ascii-key-\xe4\xf6\xfc-01.txt',
-            u'non-ascii-key-\xe4\xf6\xfc-02.txt',
-            u'non-ascii-key-\xe4\xf6\xfc-03.txt',
-            u'non-ascii-key-\xe4\xf6\xfc-04.txt',
+            'non-ascii-key-\xe4\xf6\xfc-01.txt',
+            'non-ascii-key-\xe4\xf6\xfc-02.txt',
+            'non-ascii-key-\xe4\xf6\xfc-03.txt',
+            'non-ascii-key-\xe4\xf6\xfc-04.txt',
         ]
         for key in key_names:
-            response = self.client.put_object(Bucket=self.bucket_name,
-                                              Key=key, Body='')
+            response = self.client.put_object(
+                Bucket=self.bucket_name, Key=key, Body=''
+            )
             self.assert_status_code(response, 200)
 
         list_objs_paginator = self.client.get_paginator('list_objects')
         key_refs = []
-        for response in list_objs_paginator.paginate(Bucket=self.bucket_name,
-                                                     PaginationConfig={
-                                                         'PageSize': 2}):
+        for response in list_objs_paginator.paginate(
+            Bucket=self.bucket_name, PaginationConfig={'PageSize': 2}
+        ):
             for content in response['Contents']:
                 key_refs.append(content['Key'])
 
@@ -869,21 +934,22 @@ class TestS3SigV4Client(BaseS3ClientTest
     @pytest.mark.slow
     def test_paginate_list_objects_safe_chars(self):
         key_names = [
-            u'-._~safe-chars-key-01.txt',
-            u'-._~safe-chars-key-02.txt',
-            u'-._~safe-chars-key-03.txt',
-            u'-._~safe-chars-key-04.txt',
+            '-._~safe-chars-key-01.txt',
+            '-._~safe-chars-key-02.txt',
+            '-._~safe-chars-key-03.txt',
+            '-._~safe-chars-key-04.txt',
         ]
         for key in key_names:
-            response = self.client.put_object(Bucket=self.bucket_name,
-                                              Key=key, Body='')
+            response = self.client.put_object(
+                Bucket=self.bucket_name, Key=key, Body=''
+            )
             self.assert_status_code(response, 200)
 
         list_objs_paginator = self.client.get_paginator('list_objects')
         key_refs = []
-        for response in list_objs_paginator.paginate(Bucket=self.bucket_name,
-                                                     PaginationConfig={
-                                                         'PageSize': 2}):
+        for response in list_objs_paginator.paginate(
+            Bucket=self.bucket_name, PaginationConfig={'PageSize': 2}
+        ):
             for content in response['Contents']:
                 key_refs.append(content['Key'])
 
@@ -898,7 +964,9 @@ class TestS3SigV4Client(BaseS3ClientTest
         upload_id = response['UploadId']
         self.addCleanup(
             self.client.abort_multipart_upload,
-            Bucket=self.bucket_name, Key=key, UploadId=upload_id
+            Bucket=self.bucket_name,
+            Key=key,
+            UploadId=upload_id,
         )
 
         response = self.client.list_multipart_uploads(
@@ -914,8 +982,11 @@ class TestS3SigV4Client(BaseS3ClientTest
         # Ensure we get no sigv4 errors when we send
         # metadata with consecutive spaces.
         response = self.client.put_object(
-            Bucket=self.bucket_name, Key='foo.txt',
-            Body=b'foobar', Metadata={'foo': '  multi    spaces  '})
+            Bucket=self.bucket_name,
+            Key='foo.txt',
+            Body=b'foobar',
+            Metadata={'foo': '  multi    spaces  '},
+        )
         self.assert_status_code(response, 200)
 
     def test_bad_request_on_invalid_credentials(self):
@@ -923,14 +994,15 @@ class TestS3SigV4Client(BaseS3ClientTest
         # to verify we get the 400 response.
         # In order to test we need a key that actually
         # exists so we use the properly configured self.client.
-        self.client.put_object(Bucket=self.bucket_name,
-                               Key='foo.txt',
-                               Body=b'asdfasdf')
+        self.client.put_object(
+            Bucket=self.bucket_name, Key='foo.txt', Body=b'asdfasdf'
+        )
         # Now we create a client with a bad session token
         # which should give us a 400 response.
         creds = self.session.get_credentials()
         client = self.session.create_client(
-            's3', self.region,
+            's3',
+            self.region,
             config=Config(signature_version='s3v4'),
             aws_access_key_id=creds.access_key,
             aws_secret_access_key=creds.secret_key,
@@ -955,30 +1027,44 @@ class TestSSEKeyParamValidation(BaseS3Cl
         # one with str/unicode.  Then verify we can GetObject() both
         # objects.
         self.client.put_object(
-            Bucket=self.bucket_name, Key='foo.txt',
-            Body=BytesIO(b'mycontents'), SSECustomerAlgorithm='AES256',
-            SSECustomerKey=key_bytes)
-        self.addCleanup(self.client.delete_object,
-                        Bucket=self.bucket_name, Key='foo.txt')
+            Bucket=self.bucket_name,
+            Key='foo.txt',
+            Body=BytesIO(b'mycontents'),
+            SSECustomerAlgorithm='AES256',
+            SSECustomerKey=key_bytes,
+        )
+        self.addCleanup(
+            self.client.delete_object, Bucket=self.bucket_name, Key='foo.txt'
+        )
         self.client.put_object(
-            Bucket=self.bucket_name, Key='foo2.txt',
-            Body=BytesIO(b'mycontents2'), SSECustomerAlgorithm='AES256',
-            SSECustomerKey=key_str)
-        self.addCleanup(self.client.delete_object,
-                        Bucket=self.bucket_name, Key='foo2.txt')
+            Bucket=self.bucket_name,
+            Key='foo2.txt',
+            Body=BytesIO(b'mycontents2'),
+            SSECustomerAlgorithm='AES256',
+            SSECustomerKey=key_str,
+        )
+        self.addCleanup(
+            self.client.delete_object, Bucket=self.bucket_name, Key='foo2.txt'
+        )
 
         self.assertEqual(
-            self.client.get_object(Bucket=self.bucket_name,
-                                   Key='foo.txt',
-                                   SSECustomerAlgorithm='AES256',
-                                   SSECustomerKey=key_bytes)['Body'].read(),
-            b'mycontents')
+            self.client.get_object(
+                Bucket=self.bucket_name,
+                Key='foo.txt',
+                SSECustomerAlgorithm='AES256',
+                SSECustomerKey=key_bytes,
+            )['Body'].read(),
+            b'mycontents',
+        )
         self.assertEqual(
-            self.client.get_object(Bucket=self.bucket_name,
-                                   Key='foo2.txt',
-                                   SSECustomerAlgorithm='AES256',
-                                   SSECustomerKey=key_str)['Body'].read(),
-            b'mycontents2')
+            self.client.get_object(
+                Bucket=self.bucket_name,
+                Key='foo2.txt',
+                SSECustomerAlgorithm='AES256',
+                SSECustomerKey=key_str,
+            )['Body'].read(),
+            b'mycontents2',
+        )
 
     def test_make_request_with_sse_copy_source(self):
         encrypt_key = 'a' * 32
@@ -986,33 +1072,42 @@ class TestSSEKeyParamValidation(BaseS3Cl
 
         # Upload the object using one encrypt key
         self.client.put_object(
-            Bucket=self.bucket_name, Key='foo.txt',
-            Body=BytesIO(b'mycontents'), SSECustomerAlgorithm='AES256',
-            SSECustomerKey=encrypt_key)
-        self.addCleanup(self.client.delete_object,
-                        Bucket=self.bucket_name, Key='foo.txt')
+            Bucket=self.bucket_name,
+            Key='foo.txt',
+            Body=BytesIO(b'mycontents'),
+            SSECustomerAlgorithm='AES256',
+            SSECustomerKey=encrypt_key,
+        )
+        self.addCleanup(
+            self.client.delete_object, Bucket=self.bucket_name, Key='foo.txt'
+        )
 
         # Copy the object using the original encryption key as the copy source
         # and encrypt with a new encryption key.
         self.client.copy_object(
             Bucket=self.bucket_name,
-            CopySource=self.bucket_name+'/foo.txt',
-            Key='bar.txt', CopySourceSSECustomerAlgorithm='AES256',
+            CopySource=self.bucket_name + '/foo.txt',
+            Key='bar.txt',
+            CopySourceSSECustomerAlgorithm='AES256',
             CopySourceSSECustomerKey=encrypt_key,
             SSECustomerAlgorithm='AES256',
-            SSECustomerKey=other_encrypt_key
+            SSECustomerKey=other_encrypt_key,
+        )
+        self.addCleanup(
+            self.client.delete_object, Bucket=self.bucket_name, Key='bar.txt'
         )
-        self.addCleanup(self.client.delete_object,
-                        Bucket=self.bucket_name, Key='bar.txt')
 
         # Download the object using the new encryption key.
         # The content should not have changed.
         self.assertEqual(
             self.client.get_object(
-                Bucket=self.bucket_name, Key='bar.txt',
+                Bucket=self.bucket_name,
+                Key='bar.txt',
                 SSECustomerAlgorithm='AES256',
-                SSECustomerKey=other_encrypt_key)['Body'].read(),
-            b'mycontents')
+                SSECustomerKey=other_encrypt_key,
+            )['Body'].read(),
+            b'mycontents',
+        )
 
 
 class TestS3UTF8Headers(BaseS3ClientTest):
@@ -1020,29 +1115,33 @@ class TestS3UTF8Headers(BaseS3ClientTest
         bucket_name = _SHARED_BUCKET
         body = BytesIO(b"Hello world!")
         response = self.client.put_object(
-            Bucket=bucket_name, Key="foo.txt", Body=body,
-            ContentDisposition="attachment; filename=5小時接力起跑.jpg;")
+            Bucket=bucket_name,
+            Key="foo.txt",
+            Body=body,
+            ContentDisposition="attachment; filename=5小時接力起跑.jpg;",
+        )
         self.assert_status_code(response, 200)
-        self.addCleanup(self.client.delete_object,
-                        Bucket=bucket_name, Key="foo.txt")
+        self.addCleanup(
+            self.client.delete_object, Bucket=bucket_name, Key="foo.txt"
+        )
 
 
 class TestSupportedPutObjectBodyTypes(TestS3BaseWithBucket):
     def test_can_put_unicode_content(self):
-        self.assert_can_put_object(body=u'\u2713')
+        self.assert_can_put_object(body='\u2713')
 
     def test_can_put_non_ascii_bytes(self):
-        self.assert_can_put_object(body=u'\u2713'.encode('utf-8'))
+        self.assert_can_put_object(body='\u2713'.encode())
 
     def test_can_put_arbitrary_binary_data(self):
-        body = os.urandom(5 * (1024 ** 2))
+        body = os.urandom(5 * (1024**2))
         self.assert_can_put_object(body)
 
     def test_can_put_binary_file(self):
         tempdir = self.make_tempdir()
         filename = os.path.join(tempdir, 'foo')
         with open(filename, 'wb') as f:
-            f.write(u'\u2713'.encode('utf-8'))
+            f.write('\u2713'.encode())
         with open(filename, 'rb') as binary_file:
             self.assert_can_put_object(body=binary_file)
 
@@ -1075,23 +1174,28 @@ class TestSupportedPutObjectBodyTypes(Te
 class TestSupportedPutObjectBodyTypesSigv4(TestSupportedPutObjectBodyTypes):
     def create_client(self):
         client_config = Config(signature_version='s3v4')
-        return self.session.create_client('s3', self.region,
-                                          config=client_config)
+        return self.session.create_client(
+            's3', self.region, config=client_config
+        )
 
 
 class TestAutoS3Addressing(BaseS3ClientTest):
     def setUp(self):
-        super(TestAutoS3Addressing, self).setUp()
+        super().setUp()
         self.addressing_style = 'auto'
         self.client = self.create_client()
 
     def create_client(self, signature_version='s3v4'):
         return self.session.create_client(
-            's3', region_name=self.region,
-            config=Config(s3={
-                'addressing_style': self.addressing_style,
-                'signature_version': signature_version
-            }))
+            's3',
+            region_name=self.region,
+            config=Config(
+                s3={
+                    'addressing_style': self.addressing_style,
+                    'signature_version': signature_version,
+                }
+            ),
+        )
 
     def test_can_list_buckets(self):
         response = self.client.list_buckets()
@@ -1099,54 +1203,58 @@ class TestAutoS3Addressing(BaseS3ClientT
 
     def test_can_make_bucket_and_put_object(self):
         response = self.client.put_object(
-            Bucket=self.bucket_name, Key='foo', Body='contents')
-        self.assertEqual(
-            response['ResponseMetadata']['HTTPStatusCode'], 200)
+            Bucket=self.bucket_name, Key='foo', Body='contents'
+        )
+        self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 200)
 
     def test_can_make_bucket_and_put_object_with_sigv4(self):
         self.region = 'eu-central-1'
         self.client = self.create_client()
         bucket_name = self.create_bucket(self.region)
         response = self.client.put_object(
-            Bucket=bucket_name, Key='foo', Body='contents')
-        self.assertEqual(
-            response['ResponseMetadata']['HTTPStatusCode'], 200)
+            Bucket=bucket_name, Key='foo', Body='contents'
+        )
+        self.assertEqual(response['ResponseMetadata']['HTTPStatusCode'], 200)
 
 
 class TestS3VirtualAddressing(TestAutoS3Addressing):
     def setUp(self):
-        super(TestS3VirtualAddressing, self).setUp()
+        super().setUp()
         self.addressing_style = 'virtual'
         self.client = self.create_client()
 
 
 class TestS3PathAddressing(TestAutoS3Addressing):
     def setUp(self):
-        super(TestS3PathAddressing, self).setUp()
+        super().setUp()
         self.addressing_style = 'path'
         self.client = self.create_client()
 
 
 class TestRegionRedirect(BaseS3ClientTest):
     def setUp(self):
-        super(TestRegionRedirect, self).setUp()
+        super().setUp()
         self.bucket_region = self.region
         self.client_region = 'eu-central-1'
 
         self.client = self.session.create_client(
-            's3', region_name=self.client_region,
-            config=Config(signature_version='s3v4'))
+            's3',
+            region_name=self.client_region,
+            config=Config(signature_version='s3v4'),
+        )
 
         self.bucket_client = self.session.create_client(
-            's3', region_name=self.bucket_region,
-            config=Config(signature_version='s3v4')
+            's3',
+            region_name=self.bucket_region,
+            config=Config(signature_version='s3v4'),
         )
 
     def test_region_redirects(self):
         try:
             response = self.client.list_objects(Bucket=self.bucket_name)
             self.assertEqual(
-                response['ResponseMetadata']['HTTPStatusCode'], 200)
+                response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
         except ClientError as e:
             error = e.response['Error'].get('Code', None)
             if error == 'PermanentRedirect':
@@ -1156,10 +1264,12 @@ class TestRegionRedirect(BaseS3ClientTes
         try:
             response = self.client.list_objects(Bucket=self.bucket_name)
             self.assertEqual(
-                response['ResponseMetadata']['HTTPStatusCode'], 200)
+                response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
             second_response = self.client.list_objects(Bucket=self.bucket_name)
             self.assertEqual(
-                second_response['ResponseMetadata']['HTTPStatusCode'], 200)
+                second_response['ResponseMetadata']['HTTPStatusCode'], 200
+            )
         except ClientError as e:
             error = e.response['Error'].get('Code', None)
             if error == 'PermanentRedirect':
@@ -1174,14 +1284,16 @@ class TestRegionRedirect(BaseS3ClientTes
     def test_redirects_head_object(self):
         key = 'foo'
         self.bucket_client.put_object(
-            Bucket=self.bucket_name, Key=key, Body='bar')
+            Bucket=self.bucket_name, Key=key, Body='bar'
+        )
         self.wait_until_key_exists(self.bucket_name, key)
         try:
             response = self.client.head_object(
-                Bucket=self.bucket_name, Key=key)
+                Bucket=self.bucket_name, Key=key
+            )
             self.assertEqual(response.get('ContentLength'), len(key))
         except ClientError as e:
-            self.fail("S3 Client failed to redirect Head Object: %s" % e)
+            self.fail(f"S3 Client failed to redirect Head Object: {e}")
 
 
 class TestBucketWithVersions(BaseS3ClientTest):
@@ -1213,7 +1325,7 @@ class TestBucketWithVersions(BaseS3Clien
             self.client.delete_object,
             Bucket=bucket,
             Key=key,
-            VersionId=response['VersionId']
+            VersionId=response['VersionId'],
         )
         self.wait_until_key_exists(bucket, key)
 
@@ -1227,7 +1339,7 @@ class TestBucketWithVersions(BaseS3Clien
             self.client.delete_object,
             Bucket=bucket,
             Key=key,
-            VersionId=response['VersionId']
+            VersionId=response['VersionId'],
         )
         # Object does not exist anymore.
         with self.assertRaises(ClientError):
diff -pruN 2.23.6-1/tests/integration/botocore/test_session.py 2.31.35-1/tests/integration/botocore/test_session.py
--- 2.23.6-1/tests/integration/botocore/test_session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_session.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-
 import botocore.session
 
+from tests import unittest
+
 
 class TestCanChangeParsing(unittest.TestCase):
     def setUp(self):
@@ -29,8 +29,10 @@ class TestCanChangeParsing(unittest.Test
         s3 = self.session.create_client('s3', 'us-west-2')
         parsed = s3.list_buckets()
         dates = [bucket['CreationDate'] for bucket in parsed['Buckets']]
-        self.assertTrue(all(isinstance(date, str) for date in dates),
-                        "Expected all str types but instead got: %s" % dates)
+        self.assertTrue(
+            all(isinstance(date, str) for date in dates),
+            f"Expected all str types but instead got: {dates}",
+        )
 
     def test_maps_service_name_when_overriden(self):
         ses = self.session.get_service_model('ses')
diff -pruN 2.23.6-1/tests/integration/botocore/test_smoke.py 2.31.35-1/tests/integration/botocore/test_smoke.py
--- 2.23.6-1/tests/integration/botocore/test_smoke.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_smoke.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,103 +10,96 @@ Otherwise, the ``REGION`` variable speci
 to use and all the services in SMOKE_TESTS/ERROR_TESTS will be tested.
 
 """
+
+import logging
 import os
-from pprint import pformat
 import warnings
-import logging
+from pprint import pformat
 
+import botocore.session
 import pytest
-
-from tests import ClientHTTPStubber
 from botocore import xform_name
-import botocore.session
 from botocore.client import ClientError
 from botocore.exceptions import ConnectionClosedError
 
+from tests import ClientHTTPStubber
 
 # Mapping of service -> api calls to try.
 # Each api call is a dict of OperationName->params.
 # Empty params means that the operation will be called with no params.  This is
 # used as a quick verification that we can successfully make calls to services.
 SMOKE_TESTS = {
- 'acm': {'ListCertificates': {}},
- 'apigateway': {'GetRestApis': {}},
- 'application-autoscaling': {
-     'DescribeScalableTargets': {
-         'ServiceNamespace': 'ecs'
-     }},
- 'autoscaling': {'DescribeAccountLimits': {},
-                 'DescribeAdjustmentTypes': {}},
- 'cloudformation': {'DescribeStacks': {},
-                    'ListStacks': {}},
- 'cloudfront': {'ListDistributions': {},
-                'ListStreamingDistributions': {}},
- 'cloudhsmv2': {'DescribeBackups': {}},
- 'cloudsearch': {'DescribeDomains': {},
-                 'ListDomainNames': {}},
- 'cloudtrail': {'DescribeTrails': {}},
- 'cloudwatch': {'ListMetrics': {}},
- 'codecommit': {'ListRepositories': {}},
- 'codedeploy': {'ListApplications': {}},
- 'codepipeline': {'ListActionTypes': {}},
- 'cognito-identity': {'ListIdentityPools': {'MaxResults': 1}},
- 'cognito-sync': {'ListIdentityPoolUsage': {}},
- 'config': {'DescribeDeliveryChannels': {}},
- 'datapipeline': {'ListPipelines': {}},
- 'devicefarm': {'ListProjects': {}},
- 'directconnect': {'DescribeConnections': {}},
- 'ds': {'DescribeDirectories': {}},
- 'dynamodb': {'ListTables': {}},
- 'dynamodbstreams': {'ListStreams': {}},
- 'ec2': {'DescribeRegions': {},
-         'DescribeInstances': {}},
-  'ecr': {'DescribeRepositories': {}},
- 'ecs': {'DescribeClusters': {}},
- 'elasticache': {'DescribeCacheClusters': {}},
- 'elasticbeanstalk': {'DescribeApplications': {}},
- 'elastictranscoder': {'ListPipelines': {}},
- 'elb': {'DescribeLoadBalancers': {}},
- 'emr': {'ListClusters': {}},
- 'es': {'ListDomainNames': {}},
- 'events': {'ListRules': {}},
-  'firehose': {'ListDeliveryStreams': {}},
- 'gamelift': {'ListBuilds': {}},
- 'glacier': {'ListVaults': {}},
- 'iam': {'ListUsers': {}},
- # Does not work with session credentials so
- # importexport tests are not run.
- #'importexport': {'ListJobs': {}},
- 'importexport': {},
- 'inspector': {'DescribeCrossAccountAccessRole': {}},
- 'iot': {'DescribeEndpoint': {}},
- 'kinesis': {'ListStreams': {}},
- 'kms': {'ListKeys': {}},
- 'lambda': {'ListFunctions': {}},
- 'logs': {'DescribeLogGroups': {}},
- # 'opsworks': {'DescribeStacks': {}},
- 'rds': {'DescribeDBInstances': {}},
- 'redshift': {'DescribeClusters': {}},
- 'route53': {'ListHostedZones': {}},
- 'route53domains': {'ListDomains': {}},
- 's3': {'ListBuckets': {}},
- 'sdb': {'ListDomains': {}},
- 'ses': {'ListIdentities': {}},
- 'shield': {'GetSubscriptionState': {}},
- 'sns': {'ListTopics': {}},
- 'sqs': {'ListQueues': {}},
- 'ssm': {'ListDocuments': {}},
- 'storagegateway': {'ListGateways': {}},
- # sts tests would normally go here, but
- # there aren't any calls you can make when
- # using session credentials so we don't run any
- # sts tests.
- 'sts': {},
- #'sts': {'GetSessionToken': {}},
- # Subscription needed for support API calls.
- 'support': {},
- 'swf': {'ListDomains': {'registrationStatus': 'REGISTERED'}},
- 'waf': {'ListWebACLs': {'Limit': 1}},
- 'workspaces': {'DescribeWorkspaces': {}},
+    'acm': {'ListCertificates': {}},
+    'apigateway': {'GetRestApis': {}},
+    'application-autoscaling': {
+        'DescribeScalableTargets': {'ServiceNamespace': 'ecs'}
+    },
+    'autoscaling': {
+        'DescribeAccountLimits': {},
+        'DescribeAdjustmentTypes': {},
+    },
+    'cloudformation': {'DescribeStacks': {}, 'ListStacks': {}},
+    'cloudfront': {'ListDistributions': {}, 'ListStreamingDistributions': {}},
+    'cloudhsmv2': {'DescribeBackups': {}},
+    'cloudtrail': {'DescribeTrails': {}},
+    'cloudwatch': {'ListMetrics': {}},
+    'codecommit': {'ListRepositories': {}},
+    'codedeploy': {'ListApplications': {}},
+    'codepipeline': {'ListActionTypes': {}},
+    'cognito-identity': {'ListIdentityPools': {'MaxResults': 1}},
+    'cognito-sync': {'ListIdentityPoolUsage': {}},
+    'config': {'DescribeDeliveryChannels': {}},
+    'datapipeline': {'ListPipelines': {}},
+    'devicefarm': {'ListProjects': {}},
+    'directconnect': {'DescribeConnections': {}},
+    'ds': {'DescribeDirectories': {}},
+    'dynamodb': {'ListTables': {}},
+    'dynamodbstreams': {'ListStreams': {}},
+    'ec2': {'DescribeRegions': {}, 'DescribeInstances': {}},
+    'ecr': {'DescribeRepositories': {}},
+    'ecs': {'DescribeClusters': {}},
+    'elasticache': {'DescribeCacheClusters': {}},
+    'elasticbeanstalk': {'DescribeApplications': {}},
+    'elastictranscoder': {'ListPipelines': {}},
+    'elb': {'DescribeLoadBalancers': {}},
+    'emr': {'ListClusters': {}},
+    'es': {'ListDomainNames': {}},
+    'events': {'ListRules': {}},
+    'firehose': {'ListDeliveryStreams': {}},
+    'gamelift': {'ListBuilds': {}},
+    'glacier': {'ListVaults': {}},
+    'iam': {'ListUsers': {}},
+    # Does not work with session credentials so
+    # importexport tests are not run.
+    #'importexport': {'ListJobs': {}},
+    'importexport': {},
+    'iot': {'DescribeEndpoint': {}},
+    'kinesis': {'ListStreams': {}},
+    'kms': {'ListKeys': {}},
+    'lambda': {'ListFunctions': {}},
+    'logs': {'DescribeLogGroups': {}},
+    'rds': {'DescribeDBInstances': {}},
+    'redshift': {'DescribeClusters': {}},
+    'route53': {'ListHostedZones': {}},
+    'route53domains': {'ListDomains': {}},
+    's3': {'ListBuckets': {}},
+    'sdb': {'ListDomains': {}},
+    'ses': {'ListIdentities': {}},
+    'shield': {'GetSubscriptionState': {}},
+    'sns': {'ListTopics': {}},
+    'sqs': {'ListQueues': {}},
+    'ssm': {'ListDocuments': {}},
+    # sts tests would normally go here, but
+    # there aren't any calls you can make when
+    # using session credentials so we don't run any
+    # sts tests.
+    'sts': {},
+    #'sts': {'GetSessionToken': {}},
+    # Subscription needed for support API calls.
+    'support': {},
+    'swf': {'ListDomains': {'registrationStatus': 'REGISTERED'}},
+    'waf': {'ListWebACLs': {'Limit': 1}},
+    'workspaces': {'DescribeWorkspaces': {}},
 }
 
 
@@ -118,25 +111,31 @@ ERROR_TESTS = {
     'application-autoscaling': {
         'DescribeScalableTargets': {
             'ServiceNamespace': 'fake-service-namespace'
-        }},
-    'autoscaling': {'CreateLaunchConfiguration': {
-        'LaunchConfigurationName': 'foo',
-        'ImageId': 'ami-12345678',
-        'InstanceType': 'm1.small',
-        }},
-    'cloudformation': {'CreateStack': {
-        'StackName': 'fake',
-        'TemplateURL': 'http://s3.amazonaws.com/foo/bar',
-        }},
+        }
+    },
+    'autoscaling': {
+        'CreateLaunchConfiguration': {
+            'LaunchConfigurationName': 'foo',
+            'ImageId': 'ami-12345678',
+            'InstanceType': 'm1.small',
+        }
+    },
+    'cloudformation': {
+        'CreateStack': {
+            'StackName': 'fake',
+            'TemplateURL': 'http://s3.amazonaws.com/foo/bar',
+        }
+    },
     'cloudfront': {'GetDistribution': {'Id': 'fake-id'}},
     'cloudhsmv2': {'ListTags': {'ResourceId': 'fake-id'}},
-    'cloudsearch': {'DescribeIndexFields': {'DomainName': 'fakedomain'}},
     'cloudtrail': {'DeleteTrail': {'Name': 'fake-trail'}},
-    'cloudwatch': {'SetAlarmState': {
-        'AlarmName': 'abc',
-        'StateValue': 'mno',
-        'StateReason': 'xyz',
-        }},
+    'cloudwatch': {
+        'SetAlarmState': {
+            'AlarmName': 'abc',
+            'StateValue': 'mno',
+            'StateReason': 'xyz',
+        }
+    },
     'logs': {'GetLogEvents': {'logGroupName': 'a', 'logStreamName': 'b'}},
     'codecommit': {'ListBranches': {'repositoryName': 'fake-repo'}},
     'codedeploy': {'GetDeployment': {'deploymentId': 'fake-id'}},
@@ -145,20 +144,22 @@ ERROR_TESTS = {
     'cognito-sync': {'DescribeIdentityPoolUsage': {'IdentityPoolId': 'fake'}},
     'config': {
         'GetResourceConfigHistory': {'resourceType': '', 'resourceId': 'fake'},
-        },
+    },
     'datapipeline': {'GetPipelineDefinition': {'pipelineId': 'fake'}},
-    'devicefarm': {'GetDevice': {'arn': 'arn:aws:devicefarm:REGION::device:f'}},
+    'devicefarm': {
+        'GetDevice': {'arn': 'arn:aws:devicefarm:REGION::device:f'}
+    },
     'directconnect': {'DescribeConnections': {'connectionId': 'fake'}},
     'ds': {'CreateDirectory': {'Name': 'n', 'Password': 'p', 'Size': '1'}},
     'dynamodb': {'DescribeTable': {'TableName': 'fake'}},
-    'dynamodbstreams': {'DescribeStream': {'StreamArn': 'x'*37}},
+    'dynamodbstreams': {'DescribeStream': {'StreamArn': 'x' * 37}},
     'ec2': {'DescribeInstances': {'InstanceIds': ['i-12345678']}},
     'ecs': {'StopTask': {'task': 'fake'}},
     'efs': {'DeleteFileSystem': {'FileSystemId': 'fake'}},
     'elasticache': {'DescribeCacheClusters': {'CacheClusterId': 'fake'}},
     'elasticbeanstalk': {
         'DescribeEnvironmentResources': {'EnvironmentId': 'x'},
-        },
+    },
     'elb': {'DescribeLoadBalancers': {'LoadBalancerNames': ['fake']}},
     'elastictranscoder': {'ReadJob': {'Id': 'fake'}},
     'emr': {'DescribeCluster': {'ClusterId': 'fake'}},
@@ -169,7 +170,6 @@ ERROR_TESTS = {
     'kinesis': {'DescribeStream': {'StreamName': 'fake'}},
     'kms': {'GetKeyPolicy': {'KeyId': 'fake', 'PolicyName': 'fake'}},
     'lambda': {'Invoke': {'FunctionName': 'fake'}},
-    # 'opsworks': {'DescribeLayers': {'StackId': 'fake'}},
     'rds': {'DescribeDBInstances': {'DBInstanceIdentifier': 'fake'}},
     'redshift': {'DescribeClusters': {'ClusterIdentifier': 'fake'}},
     'route53': {'GetHostedZone': {'Id': 'fake'}},
@@ -180,18 +180,20 @@ ERROR_TESTS = {
     'sns': {
         'ConfirmSubscription': {'TopicArn': 'a', 'Token': 'b'},
         'Publish': {'Message': 'hello', 'TopicArn': 'fake'},
-        },
+    },
     'sqs': {'GetQueueUrl': {'QueueName': 'fake'}},
     'ssm': {'GetDocument': {'Name': 'fake'}},
-    'storagegateway': {'ListVolumes': {'GatewayARN': 'x'*50}},
+    'storagegateway': {'ListVolumes': {'GatewayARN': 'x' * 50}},
     'sts': {'GetFederationToken': {'Name': 'fake', 'Policy': 'fake'}},
-    'support': {'CreateCase': {
-        'subject': 'x',
-        'communicationBody': 'x',
-        'categoryCode': 'x',
-        'serviceCode': 'x',
-        'severityCode': 'low',
-        }},
+    'support': {
+        'CreateCase': {
+            'subject': 'x',
+            'communicationBody': 'x',
+            'categoryCode': 'x',
+            'serviceCode': 'x',
+            'severityCode': 'low',
+        }
+    },
     'swf': {'DescribeDomain': {'name': 'fake'}},
     'waf': {'GetWebACL': {'WebACLId': 'fake'}},
     'workspaces': {'DescribeWorkspaces': {'DirectoryId': 'fake-directory-id'}},
@@ -201,7 +203,6 @@ REGION = 'us-east-1'
 REGION_OVERRIDES = {
     'devicefarm': 'us-west-2',
     'efs': 'us-west-2',
-    'inspector': 'us-west-2',
 }
 MAX_RETRIES = 8
 logger = logging.getLogger(__name__)
@@ -240,8 +241,9 @@ def _list_services(dict_entries):
     if 'AWS_SMOKE_TEST_SERVICES' not in os.environ:
         return dict_entries.keys()
     else:
-        wanted_services = os.environ.get(
-            'AWS_SMOKE_TEST_SERVICES', '').split(',')
+        wanted_services = os.environ.get('AWS_SMOKE_TEST_SERVICES', '').split(
+            ','
+        )
         return [key for key in dict_entries if key in wanted_services]
 
 
@@ -264,7 +266,9 @@ def _error_tests():
             yield service_name, operation_name, kwargs
 
 
-@pytest.mark.parametrize("service_name, operation_name, kwargs", _smoke_tests())
+@pytest.mark.parametrize(
+    "service_name, operation_name, kwargs", _smoke_tests()
+)
 def test_can_make_request_with_client(
     botocore_session, service_name, operation_name, kwargs
 ):
@@ -279,23 +283,29 @@ def test_can_make_request_with_client(
         for warning in caught_warnings:
             # we are explicitly ignoring this deprecation warning that is introduced in Python 3.12+
             # until the deprecated call is removed
-            if "datetime.datetime.utcnow() is deprecated" not in str(warning.message):
+            if "datetime.datetime.utcnow() is deprecated" not in str(
+                warning.message
+            ):
                 unexpected_warnings.append(warning)
         assert len(unexpected_warnings) == 0, err_msg
         assert 'Errors' not in response
 
 
-@pytest.mark.parametrize("service_name, operation_name, kwargs", _error_tests())
+@pytest.mark.parametrize(
+    "service_name, operation_name, kwargs", _error_tests()
+)
 def test_can_make_request_and_understand_errors_with_client(
     botocore_session, service_name, operation_name, kwargs
 ):
     client = _get_client(botocore_session, service_name)
     method = getattr(client, xform_name(operation_name))
     with pytest.raises(ClientError):
-        response = method(**kwargs)
+        method(**kwargs)
 
 
-@pytest.mark.parametrize("service_name, operation_name, kwargs", _smoke_tests())
+@pytest.mark.parametrize(
+    "service_name, operation_name, kwargs", _smoke_tests()
+)
 def test_client_can_retry_request_properly(
     botocore_session, service_name, operation_name, kwargs
 ):
@@ -305,9 +315,11 @@ def test_client_can_retry_request_proper
     with ClientHTTPStubber(client, strict=False) as http_stubber:
         http_stubber.responses.append(exception)
         try:
-            response = operation(**kwargs)
+            operation(**kwargs)
         except ClientError as e:
-            assert False, ('Request was not retried properly, '
-                           'received error:\n%s' % pformat(e))
+            assert False, (
+                'Request was not retried properly, '
+                f'received error:\n{pformat(e)}'
+            )
         # Ensure we used the stubber as we're not using it in strict mode
         assert len(http_stubber.responses) == 0, 'Stubber was not used!'
diff -pruN 2.23.6-1/tests/integration/botocore/test_sts.py 2.31.35-1/tests/integration/botocore/test_sts.py
--- 2.23.6-1/tests/integration/botocore/test_sts.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_sts.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-
 import botocore.session
 from botocore.exceptions import ClientError
 
+from tests import unittest
+
+
 class TestSTS(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
@@ -32,11 +33,14 @@ class TestSTS(unittest.TestCase):
         # that you can send an STS request to a regionalized endpoint
         # by making a call with the explicitly wrong region name
         sts = self.session.create_client(
-            'sts', region_name='ap-southeast-1',
-            endpoint_url='https://sts.us-west-2.amazonaws.com')
+            'sts',
+            region_name='ap-southeast-1',
+            endpoint_url='https://sts.us-west-2.amazonaws.com',
+        )
         self.assertEqual(sts.meta.region_name, 'ap-southeast-1')
-        self.assertEqual(sts.meta.endpoint_url,
-                         'https://sts.us-west-2.amazonaws.com')
+        self.assertEqual(
+            sts.meta.endpoint_url, 'https://sts.us-west-2.amazonaws.com'
+        )
         # Signing error will be thrown with the incorrect region name included.
-        with self.assertRaisesRegex(ClientError, 'ap-southeast-1') as e:
+        with self.assertRaisesRegex(ClientError, 'ap-southeast-1'):
             sts.get_session_token()
diff -pruN 2.23.6-1/tests/integration/botocore/test_utils.py 2.31.35-1/tests/integration/botocore/test_utils.py
--- 2.23.6-1/tests/integration/botocore/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
-
 import botocore.session
+import pytest
 from botocore.utils import ArgumentGenerator
 
 
@@ -32,8 +31,12 @@ def _all_inputs():
                 yield input_shape, service_name, operation_name
 
 
-@pytest.mark.parametrize("input_shape, service_name, operation_name", _all_inputs())
-def test_can_generate_all_inputs(generator, input_shape, service_name, operation_name):
+@pytest.mark.parametrize(
+    "input_shape, service_name, operation_name", _all_inputs()
+)
+def test_can_generate_all_inputs(
+    generator, input_shape, service_name, operation_name
+):
     generated = generator.generate_skeleton(input_shape)
     # Do some basic sanity checks to make sure the generated shape
     # looks right.  We're mostly just ensuring that the generate_skeleton
diff -pruN 2.23.6-1/tests/integration/botocore/test_waiters.py 2.31.35-1/tests/integration/botocore/test_waiters.py
--- 2.23.6-1/tests/integration/botocore/test_waiters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/botocore/test_waiters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
-
-from tests import unittest, random_chars
-
 import botocore.session
+import pytest
 from botocore.exceptions import WaiterError
 
+from tests import random_chars, unittest
+
 
 @pytest.mark.slow
 class TestWaiterForDynamoDB(unittest.TestCase):
@@ -25,14 +24,18 @@ class TestWaiterForDynamoDB(unittest.Tes
         self.client = self.session.create_client('dynamodb', 'us-west-2')
 
     def test_create_table_and_wait(self):
-        table_name = 'botocoretest-%s' % random_chars(10)
+        table_name = f'botocoretest-{random_chars(10)}'
         self.client.create_table(
             TableName=table_name,
-            ProvisionedThroughput={"ReadCapacityUnits": 5,
-                                   "WriteCapacityUnits": 5},
+            ProvisionedThroughput={
+                "ReadCapacityUnits": 5,
+                "WriteCapacityUnits": 5,
+            },
             KeySchema=[{"AttributeName": "foo", "KeyType": "HASH"}],
-            AttributeDefinitions=[{"AttributeName": "foo",
-                                   "AttributeType": "S"}])
+            AttributeDefinitions=[
+                {"AttributeName": "foo", "AttributeType": "S"}
+            ],
+        )
         self.addCleanup(self.client.delete_table, TableName=table_name)
         waiter = self.client.get_waiter('table_exists')
         waiter.wait(TableName=table_name)
@@ -56,7 +59,8 @@ class TestMatchersWithErrors(unittest.Te
     def setUp(self):
         self.session = botocore.session.get_session()
         self.client = self.session.create_client(
-            'ec2', region_name='us-west-2')
+            'ec2', region_name='us-west-2'
+        )
 
     def test_dont_search_on_error_responses(self):
         """Test that InstanceExists can handle a nonexistent instance."""
diff -pruN 2.23.6-1/tests/integration/customizations/history/test_show.py 2.31.35-1/tests/integration/customizations/history/test_show.py
--- 2.23.6-1/tests/integration/customizations/history/test_show.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/history/test_show.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@
 import os
 import re
 
-from awscli.testutils import aws, unittest, FileCreator
+from awscli.testutils import FileCreator, aws, unittest
 
 
 class TestShow(unittest.TestCase):
@@ -21,16 +21,14 @@ class TestShow(unittest.TestCase):
         self.files = FileCreator()
         self.environ = os.environ.copy()
         self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
-            'config', (
-                '[default]\n'
-                'cli_history = enabled'
-            )
+            'config', ('[default]\n' 'cli_history = enabled')
         )
         self.environ['AWS_DEFAULT_PROFILE'] = 'default'
         self.environ['AWS_DEFAULT_REGION'] = 'us-west-2'
         self.environ['AWS_STS_REGIONAL_ENDPOINTS'] = 'regional'
         self.environ['AWS_CLI_HISTORY_FILE'] = os.path.join(
-            self.files.rootdir, 'history.db')
+            self.files.rootdir, 'history.db'
+        )
 
     def tearDown(self):
         self.files.remove_all()
@@ -45,8 +43,10 @@ class TestShow(unittest.TestCase):
             self.assertIn(line, contents)
             new_pos = contents.find(line)
             if new_pos < current_pos:
-                self.fail('Line: "%s" should have came after line: "%s"' % (
-                    line, prev_line))
+                self.fail(
+                    'Line: "%s" should have came after line: "%s"'
+                    % (line, prev_line)
+                )
             prev_line = line
             current_pos = new_pos
 
@@ -90,7 +90,7 @@ class TestShow(unittest.TestCase):
                 'parsed to: {',
                 '    "Error": {',
                 'AWS CLI command exited',
-                'with return code: 254'
+                'with return code: 254',
             ],
-            uncolored_content
+            uncolored_content,
         )
diff -pruN 2.23.6-1/tests/integration/customizations/s3/__init__.py 2.31.35-1/tests/integration/customizations/s3/__init__.py
--- 2.23.6-1/tests/integration/customizations/s3/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/s3/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,9 +16,9 @@ import pytest
 @pytest.mark.usefixtures('clean_shared_buckets')
 class BaseS3IntegrationTest:
     def assert_no_errors(self, p):
-        assert p.rc == 0, (
-            f'Non zero rc ({p.rc}) received: {p.stdout + p.stderr}'
-        )
+        assert (
+            p.rc == 0
+        ), f'Non zero rc ({p.rc}) received: {p.stdout + p.stderr}'
         assert 'Error:' not in p.stderr
         assert 'failed:' not in p.stderr
         assert 'client error' not in p.stderr
diff -pruN 2.23.6-1/tests/integration/customizations/s3/conftest.py 2.31.35-1/tests/integration/customizations/s3/conftest.py
--- 2.23.6-1/tests/integration/customizations/s3/conftest.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/s3/conftest.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import botocore.session
 import pytest
 
-import botocore.session
-from awscli.testutils import random_chars, FileCreator
+from awscli.testutils import FileCreator, random_chars
 from tests import S3Utils
 
 
@@ -86,11 +86,16 @@ def shared_non_dns_compatible_us_east_1_
 
 
 @pytest.fixture
-def clean_shared_buckets(s3_utils, shared_bucket, shared_copy_bucket,
-                         shared_cross_region_bucket,
-                         shared_non_dns_compatible_bucket,
-                         shared_non_dns_compatible_us_east_1_bucket,
-                         shared_dir_bucket, shared_copy_dir_bucket,):
+def clean_shared_buckets(
+    s3_utils,
+    shared_bucket,
+    shared_copy_bucket,
+    shared_cross_region_bucket,
+    shared_non_dns_compatible_bucket,
+    shared_non_dns_compatible_us_east_1_bucket,
+    shared_dir_bucket,
+    shared_copy_dir_bucket,
+):
     s3_utils.remove_all_objects(shared_bucket)
     s3_utils.remove_all_objects(shared_copy_bucket)
     s3_utils.remove_all_objects(shared_cross_region_bucket)
diff -pruN 2.23.6-1/tests/integration/customizations/s3/test_filegenerator.py 2.31.35-1/tests/integration/customizations/s3/test_filegenerator.py
--- 2.23.6-1/tests/integration/customizations/s3/test_filegenerator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/s3/test_filegenerator.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,15 +17,15 @@
 # variables to communicate with s3 as these are integration tests.  Therefore,
 # only tests that use sessions are included as integration tests.
 
-import os
 import itertools
+import os
 
+import botocore.session
 import pytest
 
 from awscli.customizations.s3.filegenerator import FileGenerator, FileStat
-import botocore.session
-from tests.unit.customizations.s3 import compare_files
 from tests.integration.customizations.s3 import BaseS3IntegrationTest
+from tests.unit.customizations.s3 import compare_files
 
 
 @pytest.fixture(scope='module')
@@ -34,8 +34,8 @@ def s3_client(region):
     # Use the datetime and and blob parsing of the CLI
     factory = session.get_component('response_parser_factory')
     factory.set_parser_defaults(
-        blob_parser=lambda x: x,
-        timestamp_parser=lambda x: x)
+        blob_parser=lambda x: x, timestamp_parser=lambda x: x
+    )
     return session.create_client('s3', region_name=region)
 
 
@@ -53,13 +53,14 @@ def s3_files(shared_bucket, s3_utils):
         bucket_name=shared_bucket, key_name='another_directory/'
     )
     s3_utils.put_object(
-        bucket_name=shared_bucket, key_name=f'another_directory/{key2}',
-        contents=string2
+        bucket_name=shared_bucket,
+        key_name=f'another_directory/{key2}',
+        contents=string2,
     )
     return [
         f'{shared_bucket}/{key1}',
         f'{shared_bucket}/another_directory/',
-        f'{shared_bucket}/another_directory/{key2}'
+        f'{shared_bucket}/another_directory/{key2}',
     ]
 
 
@@ -69,18 +70,24 @@ class TestS3FileGenerator(BaseS3Integrat
         # Generate a single s3 file
         # Note: Size and last update are not tested because s3 generates them.
         #
-        input_s3_file = {'src': {'path': s3_files[0], 'type': 's3'},
-                         'dest': {'path': 'text1.txt', 'type': 'local'},
-                         'dir_op': False, 'use_src_name': False}
+        input_s3_file = {
+            'src': {'path': s3_files[0], 'type': 's3'},
+            'dest': {'path': 'text1.txt', 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         expected_file_size = 15
-        result_list = list(
-            FileGenerator(s3_client, '').call(input_s3_file))
-        file_stat = FileStat(src=s3_files[0], dest='text1.txt',
-                             compare_key='text1.txt',
-                             size=expected_file_size,
-                             last_update=result_list[0].last_update,
-                             src_type='s3',
-                             dest_type='local', operation_name='')
+        result_list = list(FileGenerator(s3_client, '').call(input_s3_file))
+        file_stat = FileStat(
+            src=s3_files[0],
+            dest='text1.txt',
+            compare_key='text1.txt',
+            size=expected_file_size,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         expected_list = [file_stat]
         assert len(result_list) == 1
@@ -92,25 +99,33 @@ class TestS3FileGenerator(BaseS3Integrat
         # zero size files are ignored.
         # Note: Size and last update are not tested because s3 generates them.
         #
-        input_s3_file = {'src': {'path': shared_bucket + '/', 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': True, 'use_src_name': True}
-        result_list = list(
-            FileGenerator(s3_client, '').call(input_s3_file))
-        file_stat = FileStat(src=s3_files[2],
-                             dest='another_directory' + os.sep + 'text2.txt',
-                             compare_key='another_directory/text2.txt',
-                             size=21,
-                             last_update=result_list[0].last_update,
-                             src_type='s3',
-                             dest_type='local', operation_name='')
-        file_stat2 = FileStat(src=s3_files[0],
-                              dest='text1.txt',
-                              compare_key='text1.txt',
-                              size=15,
-                              last_update=result_list[1].last_update,
-                              src_type='s3',
-                              dest_type='local', operation_name='')
+        input_s3_file = {
+            'src': {'path': shared_bucket + '/', 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
+        result_list = list(FileGenerator(s3_client, '').call(input_s3_file))
+        file_stat = FileStat(
+            src=s3_files[2],
+            dest='another_directory' + os.sep + 'text2.txt',
+            compare_key='another_directory/text2.txt',
+            size=21,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
+        file_stat2 = FileStat(
+            src=s3_files[0],
+            dest='text1.txt',
+            compare_key='text1.txt',
+            size=15,
+            last_update=result_list[1].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         expected_result = [file_stat, file_stat2]
         assert len(result_list) == 2
@@ -123,11 +138,15 @@ class TestS3FileGenerator(BaseS3Integrat
         # the directory itself is included because it is a delete command
         # Note: Size and last update are not tested because s3 generates them.
         #
-        input_s3_file = {'src': {'path': shared_bucket + '/', 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': True, 'use_src_name': True}
+        input_s3_file = {
+            'src': {'path': shared_bucket + '/', 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         result_list = list(
-            FileGenerator(s3_client, 'delete').call(input_s3_file))
+            FileGenerator(s3_client, 'delete').call(input_s3_file)
+        )
 
         file_stat1 = FileStat(
             src=shared_bucket + '/another_directory/',
@@ -136,7 +155,9 @@ class TestS3FileGenerator(BaseS3Integrat
             size=0,
             last_update=result_list[0].last_update,
             src_type='s3',
-            dest_type='local', operation_name='delete')
+            dest_type='local',
+            operation_name='delete',
+        )
         file_stat2 = FileStat(
             src=s3_files[2],
             dest='another_directory' + os.sep + 'text2.txt',
@@ -144,7 +165,9 @@ class TestS3FileGenerator(BaseS3Integrat
             size=21,
             last_update=result_list[1].last_update,
             src_type='s3',
-            dest_type='local', operation_name='delete')
+            dest_type='local',
+            operation_name='delete',
+        )
         file_stat3 = FileStat(
             src=s3_files[0],
             dest='text1.txt',
@@ -152,7 +175,9 @@ class TestS3FileGenerator(BaseS3Integrat
             size=15,
             last_update=result_list[2].last_update,
             src_type='s3',
-            dest_type='local', operation_name='delete')
+            dest_type='local',
+            operation_name='delete',
+        )
 
         expected_list = [file_stat1, file_stat2, file_stat3]
         assert len(result_list) == 3
@@ -161,20 +186,27 @@ class TestS3FileGenerator(BaseS3Integrat
         compare_files(result_list[2], expected_list[2])
 
     def test_page_size(self, s3_client, shared_bucket, s3_files):
-        input_s3_file = {'src': {'path': shared_bucket + '/', 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': True, 'use_src_name': True}
-        file_gen = FileGenerator(s3_client, '',
-                                 page_size=1).call(input_s3_file)
+        input_s3_file = {
+            'src': {'path': shared_bucket + '/', 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
+        file_gen = FileGenerator(s3_client, '', page_size=1).call(
+            input_s3_file
+        )
         limited_file_gen = itertools.islice(file_gen, 1)
         result_list = list(limited_file_gen)
-        file_stat = FileStat(src=s3_files[2],
-                             dest='another_directory' + os.sep + 'text2.txt',
-                             compare_key='another_directory/text2.txt',
-                             size=21,
-                             last_update=result_list[0].last_update,
-                             src_type='s3',
-                             dest_type='local', operation_name='')
+        file_stat = FileStat(
+            src=s3_files[2],
+            dest='another_directory' + os.sep + 'text2.txt',
+            compare_key='another_directory/text2.txt',
+            size=21,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         # Ensure only one item is returned from ``ListObjects``
         assert len(result_list) == 1
         compare_files(result_list[0], file_stat)
diff -pruN 2.23.6-1/tests/integration/customizations/s3/test_plugin.py 2.31.35-1/tests/integration/customizations/s3/test_plugin.py
--- 2.23.6-1/tests/integration/customizations/s3/test_plugin.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/s3/test_plugin.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"). You
@@ -15,30 +14,33 @@
 # The following tests are performed to ensure that the commands work.
 # It does not check every possible parameter that can be thrown as
 # those are checked by tests in other classes
+import contextlib
+import copy
 import datetime
 import os
 import platform
-import contextlib
-import time
 import re
-import stat
 import signal
 import socket
+import stat
 import tempfile
-import copy
+import time
 
-from dateutil.tz import tzutc
 import pytest
+from dateutil.tz import tzutc
 
 from awscli.compat import BytesIO, urlopen
-from awscli.testutils import unittest, get_stdout_encoding
-from awscli.testutils import skip_if_windows
-from awscli.testutils import aws as _aws
-from awscli.testutils import random_chars, random_bucket_name
 from awscli.customizations.s3.transferconfig import DEFAULTS
+from awscli.testutils import aws as _aws
+from awscli.testutils import (
+    get_stdout_encoding,
+    random_bucket_name,
+    random_chars,
+    skip_if_windows,
+    unittest,
+)
 from tests.integration.customizations.s3 import BaseS3IntegrationTest
 
-
 _NON_EXISTENT_BUCKET = random_bucket_name()
 
 
@@ -47,14 +49,14 @@ def symlink_files(files):
     nested_dir = os.path.join(files.rootdir, 'realfiles')
     os.mkdir(nested_dir)
     sample_file = files.create_file(
-        os.path.join(nested_dir, 'foo.txt'),
-        contents='foo.txt contents'
+        os.path.join(nested_dir, 'foo.txt'), contents='foo.txt contents'
     )
     # Create a symlink to foo.txt.
     os.symlink(sample_file, os.path.join(files.rootdir, 'a-goodsymlink'))
     # Create a bad symlink.
     os.symlink(
-        'non-existent-file', os.path.join(files.rootdir, 'b-badsymlink'))
+        'non-existent-file', os.path.join(files.rootdir, 'b-badsymlink')
+    )
     # Create a symlink to directory where foo.txt is.
     os.symlink(nested_dir, os.path.join(files.rootdir, 'c-goodsymlink'))
 
@@ -67,9 +69,7 @@ def config_with_profile(session, files):
         f.write(
             "[profile testprofile]\n"
             "aws_access_key_id=%s\n"
-            "aws_secret_access_key=%s\n" % (
-                creds.access_key,
-                creds.secret_key)
+            "aws_secret_access_key=%s\n" % (creds.access_key, creds.secret_key)
         )
         if creds.token is not None:
             f.write("aws_session_token=%s\n" % creds.token)
@@ -93,7 +93,7 @@ def _get_config_contents(session):
     if config_file:
         config_path = os.path.expanduser(os.path.expandvars(config_file))
         if os.path.exists(config_path):
-            with open(config_path, 'r') as f:
+            with open(config_path) as f:
                 return f.read()
     return ''
 
@@ -123,14 +123,25 @@ def cd(directory):
         os.chdir(original)
 
 
-def aws(command, collect_memory=False, env_vars=None, wait_for_finish=True,
-        input_data=None, input_file=None):
+def aws(
+    command,
+    collect_memory=False,
+    env_vars=None,
+    wait_for_finish=True,
+    input_data=None,
+    input_file=None,
+):
     if not env_vars:
         env_vars = os.environ.copy()
         env_vars['AWS_DEFAULT_REGION'] = "us-west-2"
-    return _aws(command, collect_memory=collect_memory, env_vars=env_vars,
-                wait_for_finish=wait_for_finish, input_data=input_data,
-                input_file=input_file)
+    return _aws(
+        command,
+        collect_memory=collect_memory,
+        env_vars=env_vars,
+        wait_for_finish=wait_for_finish,
+        input_data=input_data,
+        input_file=input_file,
+    )
 
 
 def wait_for_process_exit(process, timeout=60):
@@ -142,8 +153,10 @@ def wait_for_process_exit(process, timeo
         time.sleep(1)
     else:
         process.kill()
-        raise AssertionError("CLI did not exist within %s seconds of "
-                             "receiving a Ctrl+C" % timeout)
+        raise AssertionError(
+            "CLI did not exist within %s seconds of "
+            "receiving a Ctrl+C" % timeout
+        )
 
 
 def configure_preferred_transfer_client(value):
@@ -152,8 +165,10 @@ def configure_preferred_transfer_client(
 
 def _running_on_rhel():
     return (
-        hasattr(platform, 'linux_distribution') and
-        platform.linux_distribution()[0] == 'Red Hat Enterprise Linux Server')
+        hasattr(platform, 'linux_distribution')
+        and platform.linux_distribution()[0]
+        == 'Red Hat Enterprise Linux Server'
+    )
 
 
 @pytest.mark.parametrize(
@@ -168,22 +183,24 @@ class BaseParameterizedS3ClientTest(Base
 
 
 class TestMoveCommand(BaseParameterizedS3ClientTest):
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_mv_local_to_s3(self, s3_bucket, files, s3_utils, request):
         shared_bucket = request.getfixturevalue(s3_bucket)
         full_path = files.create_file('foo.txt', 'this is foo.txt')
-        p = aws('s3 mv %s s3://%s/foo.txt' % (full_path,
-                                              shared_bucket))
+        p = aws('s3 mv %s s3://%s/foo.txt' % (full_path, shared_bucket))
         self.assert_no_errors(p)
         # When we move an object, the local file is gone:
         assert not os.path.exists(full_path)
         # And now resides in s3.
         s3_utils.assert_key_contents_equal(
-            shared_bucket, 'foo.txt', 'this is foo.txt')
+            shared_bucket, 'foo.txt', 'this is foo.txt'
+        )
 
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_mv_s3_to_local(self, s3_bucket, files, s3_utils, request):
         shared_bucket = request.getfixturevalue(s3_bucket)
         s3_utils.put_object(shared_bucket, 'foo.txt', 'this is foo.txt')
@@ -192,16 +209,20 @@ class TestMoveCommand(BaseParameterizedS
         p = aws('s3 mv s3://%s/foo.txt %s' % (shared_bucket, full_path))
         self.assert_no_errors(p)
         assert os.path.exists(full_path)
-        with open(full_path, 'r') as f:
+        with open(full_path) as f:
             assert f.read() == 'this is foo.txt'
         # The s3 file should not be there anymore.
         assert s3_utils.key_not_exists(shared_bucket, key_name='foo.txt')
 
-    @pytest.mark.parametrize('s3_bucket, copy_s3_bucket', [
-        ('shared_bucket', 'shared_copy_bucket'),
-        ('shared_bucket', 'shared_copy_dir_bucket'),
-        ('shared_dir_bucket', 'shared_copy_dir_bucket'),
-        ('shared_dir_bucket', 'shared_copy_bucket')])
+    @pytest.mark.parametrize(
+        's3_bucket, copy_s3_bucket',
+        [
+            ('shared_bucket', 'shared_copy_bucket'),
+            ('shared_bucket', 'shared_copy_dir_bucket'),
+            ('shared_dir_bucket', 'shared_copy_dir_bucket'),
+            ('shared_dir_bucket', 'shared_copy_bucket'),
+        ],
+    )
     def test_mv_s3_to_s3(self, s3_bucket, copy_s3_bucket, s3_utils, request):
         from_bucket = request.getfixturevalue(s3_bucket)
         to_bucket = request.getfixturevalue(copy_s3_bucket)
@@ -220,22 +241,25 @@ class TestMoveCommand(BaseParameterizedS
         assert s3_utils.key_not_exists(from_bucket, key_name=from_key)
 
     @pytest.mark.slow
-    def test_mv_s3_to_s3_multipart(self, s3_utils, shared_bucket,
-                                   shared_copy_bucket):
+    def test_mv_s3_to_s3_multipart(
+        self, s3_utils, shared_bucket, shared_copy_bucket
+    ):
         from_bucket = shared_bucket
         to_bucket = shared_copy_bucket
         file_contents = BytesIO(b'abcd' * (1024 * 1024 * 10))
         s3_utils.put_object(from_bucket, 'foo.txt', file_contents)
 
-        p = aws('s3 mv s3://%s/foo.txt s3://%s/foo.txt' % (from_bucket,
-                                                           to_bucket))
+        p = aws(
+            's3 mv s3://%s/foo.txt s3://%s/foo.txt' % (from_bucket, to_bucket)
+        )
         self.assert_no_errors(p)
         s3_utils.assert_key_contents_equal(to_bucket, 'foo.txt', file_contents)
         # And verify that the object no longer exists in the from_bucket.
         assert s3_utils.key_not_exists(from_bucket, key_name='foo.txt')
 
-    def test_mv_s3_to_s3_multipart_recursive(self, s3_utils, shared_bucket,
-                                             shared_copy_bucket):
+    def test_mv_s3_to_s3_multipart_recursive(
+        self, s3_utils, shared_bucket, shared_copy_bucket
+    ):
         from_bucket = shared_bucket
         to_bucket = shared_copy_bucket
 
@@ -244,8 +268,9 @@ class TestMoveCommand(BaseParameterizedS
         s3_utils.put_object(from_bucket, 'largefile', large_file_contents)
         s3_utils.put_object(from_bucket, 'smallfile', small_file_contents)
 
-        p = aws('s3 mv s3://%s/ s3://%s/ --recursive' % (from_bucket,
-                                                         to_bucket))
+        p = aws(
+            's3 mv s3://%s/ s3://%s/ --recursive' % (from_bucket, to_bucket)
+        )
         self.assert_no_errors(p)
         # Nothing's in the from_bucket.
         assert s3_utils.key_not_exists(from_bucket, key_name='largefile')
@@ -256,13 +281,16 @@ class TestMoveCommand(BaseParameterizedS
         assert s3_utils.key_exists(to_bucket, key_name='smallfile')
 
         # And the contents are what we expect.
-        s3_utils.assert_key_contents_equal(to_bucket, 'smallfile',
-                                           small_file_contents)
-        s3_utils.assert_key_contents_equal(to_bucket, 'largefile',
-                                           large_file_contents)
+        s3_utils.assert_key_contents_equal(
+            to_bucket, 'smallfile', small_file_contents
+        )
+        s3_utils.assert_key_contents_equal(
+            to_bucket, 'largefile', large_file_contents
+        )
 
-    def test_mv_s3_to_s3_with_sig4(self, s3_utils, shared_bucket,
-                                   shared_cross_region_bucket):
+    def test_mv_s3_to_s3_with_sig4(
+        self, s3_utils, shared_bucket, shared_cross_region_bucket
+    ):
         to_region = 'eu-central-1'
         from_region = 'us-west-2'
 
@@ -273,10 +301,10 @@ class TestMoveCommand(BaseParameterizedS
         file_contents = 'hello'
         s3_utils.put_object(from_bucket, file_name, file_contents)
 
-        p = aws('s3 mv s3://{0}/{4} s3://{1}/{4} '
-                '--source-region {2} --region {3}'
-                .format(from_bucket, to_bucket, from_region, to_region,
-                        file_name))
+        p = aws(
+            f's3 mv s3://{from_bucket}/{file_name} s3://{to_bucket}/{file_name} '
+            f'--source-region {from_region} --region {to_region}'
+        )
         self.assert_no_errors(p)
 
         assert s3_utils.key_not_exists(from_bucket, file_name)
@@ -286,14 +314,16 @@ class TestMoveCommand(BaseParameterizedS
         # 40MB will force a multipart upload.
         file_contents = BytesIO(b'abcd' * (1024 * 1024 * 10))
         foo_txt = files.create_file(
-            'foo.txt', file_contents.getvalue().decode('utf-8'))
+            'foo.txt', file_contents.getvalue().decode('utf-8')
+        )
         p = aws('s3 mv %s s3://%s/foo.txt' % (foo_txt, shared_bucket))
         self.assert_no_errors(p)
         # When we move an object, the local file is gone:
         assert not os.path.exists(foo_txt)
         # And now resides in s3.
         s3_utils.assert_key_contents_equal(
-            shared_bucket, 'foo.txt', file_contents)
+            shared_bucket, 'foo.txt', file_contents
+        )
 
         # Now verify we can download this file.
         p = aws('s3 mv s3://%s/foo.txt %s' % (shared_bucket, foo_txt))
@@ -306,27 +336,32 @@ class TestMoveCommand(BaseParameterizedS
         p = aws(f's3 mv {full_path} s3://{_NON_EXISTENT_BUCKET}/foo.txt')
         assert p.rc == 1
 
-    def test_cant_move_file_onto_itself_small_file(self, s3_utils,
-                                                   shared_bucket):
+    def test_cant_move_file_onto_itself_small_file(
+        self, s3_utils, shared_bucket
+    ):
         # We don't even need a remote file in this case.  We can
         # immediately validate that we can't move a file onto itself.
         s3_utils.put_object(shared_bucket, key_name='key.txt', contents='foo')
-        p = aws('s3 mv s3://%s/key.txt s3://%s/key.txt' %
-                (shared_bucket, shared_bucket))
+        p = aws(
+            's3 mv s3://%s/key.txt s3://%s/key.txt'
+            % (shared_bucket, shared_bucket)
+        )
         assert p.rc == 252
         assert 'Cannot mv a file onto itself' in p.stderr
 
-    def test_cant_move_large_file_onto_itself(self, s3_utils,
-                                              shared_bucket):
+    def test_cant_move_large_file_onto_itself(self, s3_utils, shared_bucket):
         # At the API level, you can multipart copy an object onto itself,
         # but a mv command doesn't make sense because a mv is just a
         # cp + an rm of the src file.  We should be consistent and
         # not allow large files to be mv'd onto themselves.
         file_contents = BytesIO(b'a' * (1024 * 1024 * 10))
-        s3_utils.put_object(shared_bucket, key_name='key.txt',
-                            contents=file_contents)
-        p = aws('s3 mv s3://%s/key.txt s3://%s/key.txt' %
-                (shared_bucket, shared_bucket))
+        s3_utils.put_object(
+            shared_bucket, key_name='key.txt', contents=file_contents
+        )
+        p = aws(
+            's3 mv s3://%s/key.txt s3://%s/key.txt'
+            % (shared_bucket, shared_bucket)
+        )
         assert p.rc == 252
         assert 'Cannot mv a file onto itself' in p.stderr
 
@@ -351,8 +386,9 @@ class TestRm(BaseParameterizedS3ClientTe
         # And verify it's gone.
         assert s3_utils.key_not_exists(shared_bucket, key_name='foo\r.txt')
 
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_rm_with_page_size(self, s3_bucket, s3_utils, request):
         shared_bucket = request.getfixturevalue(s3_bucket)
         s3_utils.put_object(shared_bucket, 'foo.txt', contents='hello world')
@@ -365,8 +401,9 @@ class TestRm(BaseParameterizedS3ClientTe
 
 
 class TestCp(BaseParameterizedS3ClientTest):
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_cp_to_and_from_s3(self, s3_bucket, files, s3_utils, request):
         # This tests the ability to put a single file in s3
         # move it to a different bucket.
@@ -383,7 +420,8 @@ class TestCp(BaseParameterizedS3ClientTe
         contents = s3_utils.get_key_contents(shared_bucket, key_name='foo.txt')
         assert contents == 'this is foo.txt'
         content_type = s3_utils.content_type_for_key(
-            shared_bucket, key_name='foo.txt')
+            shared_bucket, key_name='foo.txt'
+        )
         assert content_type == 'text/plain'
 
         # Make a new name for the file and copy it locally.
@@ -391,7 +429,7 @@ class TestCp(BaseParameterizedS3ClientTe
         p = aws('s3 cp s3://%s/foo.txt %s' % (shared_bucket, full_path))
         self.assert_no_errors(p)
 
-        with open(full_path, 'r') as f:
+        with open(full_path) as f:
             assert f.read() == 'this is foo.txt'
 
     def test_cp_without_trailing_slash(self, files, s3_utils, shared_bucket):
@@ -410,15 +448,17 @@ class TestCp(BaseParameterizedS3ClientTe
         assert contents == 'this is foo.txt'
 
     @pytest.mark.slow
-    def test_cp_s3_s3_multipart(self, s3_utils, shared_bucket,
-                                shared_copy_bucket):
+    def test_cp_s3_s3_multipart(
+        self, s3_utils, shared_bucket, shared_copy_bucket
+    ):
         from_bucket = shared_bucket
         to_bucket = shared_copy_bucket
         file_contents = BytesIO(b'abcd' * (1024 * 1024 * 10))
         s3_utils.put_object(from_bucket, 'foo.txt', file_contents)
 
-        p = aws('s3 cp s3://%s/foo.txt s3://%s/foo.txt' %
-                (from_bucket, to_bucket))
+        p = aws(
+            's3 cp s3://%s/foo.txt s3://%s/foo.txt' % (from_bucket, to_bucket)
+        )
         self.assert_no_errors(p)
         s3_utils.assert_key_contents_equal(to_bucket, 'foo.txt', file_contents)
         assert s3_utils.key_exists(from_bucket, key_name='foo.txt')
@@ -431,30 +471,37 @@ class TestCp(BaseParameterizedS3ClientTe
         # We should have correctly guessed the content type based on the
         # filename extension.
         content_type = s3_utils.content_type_for_key(
-            shared_bucket, key_name='bar.jpeg')
+            shared_bucket, key_name='bar.jpeg'
+        )
         assert content_type == 'image/jpeg'
 
     def test_download_large_file(self, files, s3_utils, shared_bucket):
         # This will force a multipart download.
         foo_contents = BytesIO(b'abcd' * (1024 * 1024 * 10))
-        s3_utils.put_object(shared_bucket, key_name='foo.txt',
-                            contents=foo_contents)
+        s3_utils.put_object(
+            shared_bucket, key_name='foo.txt', contents=foo_contents
+        )
         local_foo_txt = files.full_path('foo.txt')
         p = aws('s3 cp s3://%s/foo.txt %s' % (shared_bucket, local_foo_txt))
         self.assert_no_errors(p)
         assert os.path.getsize(local_foo_txt) == len(foo_contents.getvalue())
 
     @skip_if_windows('SIGINT not supported on Windows.')
-    def test_download_ctrl_c_does_not_hang(self, files, s3_utils,
-                                           shared_bucket):
+    def test_download_ctrl_c_does_not_hang(
+        self, files, s3_utils, shared_bucket
+    ):
         foo_contents = BytesIO(b'abcd' * (1024 * 1024 * 40))
-        s3_utils.put_object(shared_bucket, key_name='foo.txt',
-                            contents=foo_contents)
+        s3_utils.put_object(
+            shared_bucket, key_name='foo.txt', contents=foo_contents
+        )
         local_foo_txt = files.full_path('foo.txt')
         # --quiet is added to make sure too much output is not communicated
         # to the PIPE, causing a deadlock when not consumed.
-        process = aws('s3 cp s3://%s/foo.txt %s --quiet' %
-                      (shared_bucket, local_foo_txt), wait_for_finish=False)
+        process = aws(
+            's3 cp s3://%s/foo.txt %s --quiet'
+            % (shared_bucket, local_foo_txt),
+            wait_for_finish=False,
+        )
         # Give it some time to start up and enter it's main task loop.
         time.sleep(3)
         # The process has 60 seconds to finish after being sent a Ctrl+C,
@@ -481,8 +528,10 @@ class TestCp(BaseParameterizedS3ClientTe
                 f.write(b'a' * 1024 * 1024)
         # --quiet is added to make sure too much output is not communicated
         # to the PIPE, causing a deadlock when not consumed.
-        process = aws('s3 cp %s s3://%s/ --quiet' % (foo_txt, shared_bucket),
-                      wait_for_finish=False)
+        process = aws(
+            's3 cp %s s3://%s/ --quiet' % (foo_txt, shared_bucket),
+            wait_for_finish=False,
+        )
         time.sleep(3)
         # The process has 60 seconds to finish after being sent a Ctrl+C,
         # otherwise the test fails.
@@ -511,45 +560,55 @@ class TestCp(BaseParameterizedS3ClientTe
         assert p.rc == 1
         expected_err_msg = (
             'An error occurred (404) when calling the '
-            'HeadObject operation: Key "foo.txt" does not exist')
+            'HeadObject operation: Key "foo.txt" does not exist'
+        )
         assert expected_err_msg in p.stderr
 
-    def test_download_encrypted_kms_object(self, s3_utils, files,
-                                           shared_cross_region_bucket):
+    def test_download_encrypted_kms_object(
+        self, s3_utils, files, shared_cross_region_bucket
+    ):
         bucket_name = shared_cross_region_bucket
         extra_args = {
             'ServerSideEncryption': 'aws:kms',
-            'SSEKMSKeyId': 'alias/aws/s3'
+            'SSEKMSKeyId': 'alias/aws/s3',
         }
         object_name = 'foo.txt'
         contents = 'this is foo.txt'
-        s3_utils.put_object(bucket_name, object_name, contents,
-                            extra_args=extra_args)
+        s3_utils.put_object(
+            bucket_name, object_name, contents, extra_args=extra_args
+        )
         local_filename = files.full_path('foo.txt')
-        p = aws('s3 cp s3://%s/%s %s --region eu-central-1' %
-                (bucket_name, object_name, local_filename))
+        p = aws(
+            's3 cp s3://%s/%s %s --region eu-central-1'
+            % (bucket_name, object_name, local_filename)
+        )
         assert p.rc == 0
         # Assert that the file was downloaded properly.
-        with open(local_filename, 'r') as f:
+        with open(local_filename) as f:
             assert f.read() == contents
 
     def test_download_empty_object(self, files, s3_utils, shared_bucket):
         object_name = 'empty-object'
         s3_utils.put_object(shared_bucket, object_name, '')
         local_filename = files.full_path('empty.txt')
-        p = aws('s3 cp s3://%s/%s %s' % (
-            shared_bucket, object_name, local_filename))
+        p = aws(
+            's3 cp s3://%s/%s %s'
+            % (shared_bucket, object_name, local_filename)
+        )
         assert p.rc == 0
         # Assert that the file was downloaded and has no content.
-        with open(local_filename, 'r') as f:
+        with open(local_filename) as f:
             assert f.read() == ''
 
-    def test_website_redirect_ignore_paramfile(self, files, s3_utils,
-                                               shared_bucket):
+    def test_website_redirect_ignore_paramfile(
+        self, files, s3_utils, shared_bucket
+    ):
         foo_txt = files.create_file('foo.txt', 'bar')
         website_redirect = 'http://someserver'
-        p = aws('s3 cp %s s3://%s/foo.txt --website-redirect %s' %
-                (foo_txt, shared_bucket, website_redirect))
+        p = aws(
+            's3 cp %s s3://%s/foo.txt --website-redirect %s'
+            % (foo_txt, shared_bucket, website_redirect)
+        )
         self.assert_no_errors(p)
 
         # Ensure that the web address is used as opposed to the contents
@@ -557,8 +616,9 @@ class TestCp(BaseParameterizedS3ClientTe
         response = s3_utils.head_object(shared_bucket, 'foo.txt')
         assert response['WebsiteRedirectLocation'] == website_redirect
 
-    def test_copy_large_file_signature_v4(self, s3_utils, files,
-                                          shared_cross_region_bucket):
+    def test_copy_large_file_signature_v4(
+        self, s3_utils, files, shared_cross_region_bucket
+    ):
         # Just verify that we can upload a large file to a region
         # that uses signature version 4.
         bucket_name = shared_cross_region_bucket
@@ -568,8 +628,9 @@ class TestCp(BaseParameterizedS3ClientTe
             for i in range(num_mb):
                 f.write(b'a' * 1024 * 1024)
 
-        p = aws('s3 cp %s s3://%s/ --region eu-central-1' % (
-            foo_txt, bucket_name))
+        p = aws(
+            's3 cp %s s3://%s/ --region eu-central-1' % (foo_txt, bucket_name)
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(bucket_name, key_name='foo.txt')
 
@@ -578,8 +639,10 @@ class TestCp(BaseParameterizedS3ClientTe
         # For comparing expires timestamp.
         key = random_chars(6)
         filename = files.create_file(key, contents='')
-        p = aws('s3 cp %s s3://%s/%s --metadata keyname=value' %
-                (filename, shared_bucket, key))
+        p = aws(
+            's3 cp %s s3://%s/%s --metadata keyname=value'
+            % (filename, shared_bucket, key)
+        )
         self.assert_no_errors(p)
         response = s3_utils.head_object(shared_bucket, key)
         # These values should have the metadata of the source object
@@ -596,12 +659,15 @@ class TestCp(BaseParameterizedS3ClientTe
             'ContentEncoding': 'foo',
             'ContentLanguage': 'foo',
             'CacheControl': '90',
-            'Expires': '0'
+            'Expires': '0',
         }
-        s3_utils.put_object(shared_bucket, original_key, contents='foo',
-                            extra_args=metadata)
-        p = aws('s3 cp s3://%s/%s s3://%s/%s' %
-                (shared_bucket, original_key, shared_bucket, new_key))
+        s3_utils.put_object(
+            shared_bucket, original_key, contents='foo', extra_args=metadata
+        )
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s'
+            % (shared_bucket, original_key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
         response = s3_utils.head_object(shared_bucket, new_key)
         # These values should have the metadata of the source object
@@ -615,8 +681,10 @@ class TestCp(BaseParameterizedS3ClientTe
         # Use REPLACE to wipe out all of the metadata when copying to a new
         # key.
         new_key = '%s-c' % random_chars(6)
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --metadata-directive REPLACE' %
-                (shared_bucket, original_key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --metadata-directive REPLACE'
+            % (shared_bucket, original_key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
         response = s3_utils.head_object(shared_bucket, new_key)
         # Make sure all of the original metadata is gone.
@@ -626,9 +694,11 @@ class TestCp(BaseParameterizedS3ClientTe
         # Use REPLACE to wipe out all of the metadata but include a new
         # metadata value.
         new_key = '%s-d' % random_chars(6)
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --metadata-directive REPLACE '
-                '--content-type bar' %
-                (shared_bucket, original_key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --metadata-directive REPLACE '
+            '--content-type bar'
+            % (shared_bucket, original_key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
         response = s3_utils.head_object(shared_bucket, new_key)
         # Make sure the content type metadata is included
@@ -639,8 +709,9 @@ class TestCp(BaseParameterizedS3ClientTe
 
     def test_cp_with_request_payer(self, files, s3_utils, shared_bucket):
         foo_txt = files.create_file('foo.txt', 'this is foo.txt')
-        p = aws('s3 cp %s s3://%s/mykey --request-payer' % (
-                foo_txt, shared_bucket))
+        p = aws(
+            's3 cp %s s3://%s/mykey --request-payer' % (foo_txt, shared_bucket)
+        )
 
         # From the S3 API, the only way to for sure know that request payer is
         # working is to set up a bucket with request payer and have another
@@ -675,18 +746,22 @@ class TestSync(BaseParameterizedS3Client
             filenames.append(
                 files.create_file('foo +%06d' % i, contents='', mtime=mtime)
             )
-        p = aws('s3 sync %s s3://%s/ --page-size 2' %
-                (files.rootdir, shared_bucket))
+        p = aws(
+            's3 sync %s s3://%s/ --page-size 2'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         time.sleep(1)
-        p2 = aws('s3 sync %s s3://%s/ --page-size 2'
-                 % (files.rootdir, shared_bucket))
+        p2 = aws(
+            's3 sync %s s3://%s/ --page-size 2'
+            % (files.rootdir, shared_bucket)
+        )
         assert 'upload:' not in p2.stdout
         assert '' == p2.stdout
 
-    def test_s3_to_s3_sync_with_plus_char_paginate(self, files, s3_utils,
-                                                   shared_bucket,
-                                                   shared_copy_bucket):
+    def test_s3_to_s3_sync_with_plus_char_paginate(
+        self, files, s3_utils, shared_bucket, shared_copy_bucket
+    ):
         keynames = []
         for i in range(4):
             keyname = 'foo+%d' % i
@@ -701,14 +776,18 @@ class TestSync(BaseParameterizedS3Client
         for key in keynames:
             assert s3_utils.key_exists(bucket_name, key)
 
-        p = aws('s3 sync s3://%s/ s3://%s/ --page-size 2' %
-                (bucket_name, bucket_name_2))
+        p = aws(
+            's3 sync s3://%s/ s3://%s/ --page-size 2'
+            % (bucket_name, bucket_name_2)
+        )
         self.assert_no_errors(p)
         for key in keynames:
             assert s3_utils.key_exists(bucket_name_2, key)
 
-        p2 = aws('s3 sync s3://%s/ s3://%s/ --page-size 2' %
-                 (bucket_name, bucket_name_2))
+        p2 = aws(
+            's3 sync s3://%s/ s3://%s/ --page-size 2'
+            % (bucket_name, bucket_name_2)
+        )
         assert 'copy:' not in p2.stdout
         assert '' == p2.stdout
 
@@ -747,9 +826,9 @@ class TestSync(BaseParameterizedS3Client
         # The files should be back now.
         assert os.path.isfile(foo_txt)
         assert os.path.isfile(bar_txt)
-        with open(foo_txt, 'r') as f:
+        with open(foo_txt) as f:
             assert f.read() == 'foo contents'
-        with open(bar_txt, 'r') as f:
+        with open(bar_txt) as f:
             assert f.read() == 'bar contents'
 
     def test_sync_to_nonexistent_bucket(self, files):
@@ -768,8 +847,9 @@ class TestSync(BaseParameterizedS3Client
         assert 'failed' not in p.stderr
         assert s3_utils.key_exists(shared_bucket, 'bar.txt')
 
-    def test_sync_with_delete_option_with_same_prefix(self, files,
-                                                      shared_bucket):
+    def test_sync_with_delete_option_with_same_prefix(
+        self, files, shared_bucket
+    ):
         # Test for issue 440 (https://github.com/aws/aws-cli/issues/440)
         # First, we need to create a directory structure that has a dir with
         # the same prefix as some of the files:
@@ -781,8 +861,9 @@ class TestSync(BaseParameterizedS3Client
         # create test/foo.txt
         nested_dir = os.path.join(files.rootdir, 'test')
         os.mkdir(nested_dir)
-        files.create_file(os.path.join(nested_dir, 'foo.txt'),
-                          contents='foo.txt contents')
+        files.create_file(
+            os.path.join(nested_dir, 'foo.txt'), contents='foo.txt contents'
+        )
         # Then create test-123.txt, test-321.txt, test.txt.
         files.create_file('test-123.txt', 'test-123.txt contents')
         files.create_file('test-321.txt', 'test-321.txt contents')
@@ -799,8 +880,10 @@ class TestSync(BaseParameterizedS3Client
         # with the --delete flag we should *not* see any output, the
         # sync operation should determine that nothing is different and
         # therefore do nothing.  We can just use --dryrun to show the issue.
-        p = aws('s3 sync s3://%s/ %s --dryrun --delete' % (
-            shared_bucket, files.rootdir))
+        p = aws(
+            's3 sync s3://%s/ %s --dryrun --delete'
+            % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
         # These assertion methods will give better error messages than just
         # checking if the output is empty.
@@ -808,9 +891,9 @@ class TestSync(BaseParameterizedS3Client
         assert 'delete:' not in p.stdout
         assert '' == p.stdout
 
-    def test_sync_with_delete_across_sig4_regions(self, files, s3_utils,
-                                                  shared_bucket,
-                                                  shared_cross_region_bucket):
+    def test_sync_with_delete_across_sig4_regions(
+        self, files, s3_utils, shared_bucket, shared_cross_region_bucket
+    ):
         src_region = 'us-west-2'
         dst_region = 'eu-central-1'
 
@@ -820,8 +903,10 @@ class TestSync(BaseParameterizedS3Client
         src_key_name = 'hello.txt'
         files.create_file(src_key_name, contents='hello')
 
-        p = aws('s3 sync %s s3://%s --region %s' %
-                (files.rootdir, src_bucket, src_region))
+        p = aws(
+            's3 sync %s s3://%s --region %s'
+            % (files.rootdir, src_bucket, src_region)
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(src_bucket, src_key_name)
 
@@ -830,15 +915,19 @@ class TestSync(BaseParameterizedS3Client
         dst_key_name = 'goodbye.txt'
         files.create_file(dst_key_name, contents='goodbye')
 
-        p = aws('s3 sync %s s3://%s --region %s' %
-                (files.rootdir, dst_bucket, dst_region))
+        p = aws(
+            's3 sync %s s3://%s --region %s'
+            % (files.rootdir, dst_bucket, dst_region)
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(dst_bucket, dst_key_name)
         assert s3_utils.key_not_exists(dst_bucket, src_key_name)
 
-        p = aws('s3 sync --delete s3://%s s3://%s '
-                '--source-region %s --region %s' %
-                (src_bucket, dst_bucket, src_region, dst_region))
+        p = aws(
+            's3 sync --delete s3://%s s3://%s '
+            '--source-region %s --region %s'
+            % (src_bucket, dst_bucket, src_region, dst_region)
+        )
         self.assert_no_errors(p)
 
         assert s3_utils.key_exists(src_bucket, src_key_name)
@@ -847,90 +936,115 @@ class TestSync(BaseParameterizedS3Client
         assert s3_utils.key_not_exists(dst_bucket, dst_key_name)
 
     def test_sync_delete_locally(self, files, s3_utils, shared_bucket):
-        file_to_delete = files.create_file(
-            'foo.txt', contents='foo contents')
+        file_to_delete = files.create_file('foo.txt', contents='foo contents')
         s3_utils.put_object(shared_bucket, 'bar.txt', contents='bar contents')
 
-        p = aws('s3 sync s3://%s/ %s --delete' % (
-            shared_bucket, files.rootdir))
+        p = aws(
+            's3 sync s3://%s/ %s --delete' % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
 
         # Make sure the uploaded file got downloaded and the previously
         # existing local file got deleted
-        assert os.path.exists(
-            os.path.join(files.rootdir, 'bar.txt'))
+        assert os.path.exists(os.path.join(files.rootdir, 'bar.txt'))
         assert not os.path.exists(file_to_delete)
 
 
 class TestSourceRegion(BaseParameterizedS3ClientTest):
-    def test_cp_region(self, files, s3_utils, shared_non_dns_compatible_bucket,
-                       shared_non_dns_compatible_us_east_1_bucket):
+    def test_cp_region(
+        self,
+        files,
+        s3_utils,
+        shared_non_dns_compatible_bucket,
+        shared_non_dns_compatible_us_east_1_bucket,
+    ):
         src_region = 'us-west-2'
         src_bucket = shared_non_dns_compatible_bucket
         dest_region = 'us-east-1'
         dest_bucket = shared_non_dns_compatible_us_east_1_bucket
         files.create_file('foo.txt', 'foo')
-        p = aws('s3 sync %s s3://%s/ --region %s' %
-                (files.rootdir, src_bucket, src_region))
+        p = aws(
+            's3 sync %s s3://%s/ --region %s'
+            % (files.rootdir, src_bucket, src_region)
+        )
         self.assert_no_errors(p)
-        p2 = aws('s3 cp s3://%s/ s3://%s/ --region %s --source-region %s '
-                 '--recursive' %
-                 (src_bucket, dest_bucket, dest_region,
-                  src_region))
+        p2 = aws(
+            's3 cp s3://%s/ s3://%s/ --region %s --source-region %s '
+            '--recursive' % (src_bucket, dest_bucket, dest_region, src_region)
+        )
         assert p2.rc == 0, p2.stdout
         assert s3_utils.key_exists(dest_bucket, 'foo.txt')
 
-    def test_sync_region(self, files, s3_utils,
-                         shared_non_dns_compatible_bucket,
-                         shared_non_dns_compatible_us_east_1_bucket):
+    def test_sync_region(
+        self,
+        files,
+        s3_utils,
+        shared_non_dns_compatible_bucket,
+        shared_non_dns_compatible_us_east_1_bucket,
+    ):
         src_region = 'us-west-2'
         src_bucket = shared_non_dns_compatible_bucket
         dest_region = 'us-east-1'
         dest_bucket = shared_non_dns_compatible_us_east_1_bucket
         files.create_file('foo.txt', 'foo')
-        p = aws('s3 sync %s s3://%s/ --region %s' %
-                (files.rootdir, src_bucket, src_region))
+        p = aws(
+            's3 sync %s s3://%s/ --region %s'
+            % (files.rootdir, src_bucket, src_region)
+        )
         self.assert_no_errors(p)
-        p2 = aws('s3 sync s3://%s/ s3://%s/ --region %s --source-region %s ' %
-                 (src_bucket, dest_bucket, dest_region,
-                  src_region))
+        p2 = aws(
+            's3 sync s3://%s/ s3://%s/ --region %s --source-region %s '
+            % (src_bucket, dest_bucket, dest_region, src_region)
+        )
         assert p2.rc == 0, p2.stdout
         assert s3_utils.key_exists(dest_bucket, 'foo.txt')
 
-    def test_mv_region(self, files, s3_utils, shared_non_dns_compatible_bucket,
-                       shared_non_dns_compatible_us_east_1_bucket):
+    def test_mv_region(
+        self,
+        files,
+        s3_utils,
+        shared_non_dns_compatible_bucket,
+        shared_non_dns_compatible_us_east_1_bucket,
+    ):
         src_region = 'us-west-2'
         src_bucket = shared_non_dns_compatible_bucket
         dest_region = 'us-east-1'
         dest_bucket = shared_non_dns_compatible_us_east_1_bucket
         files.create_file('foo.txt', 'foo')
-        p = aws('s3 sync %s s3://%s/ --region %s' %
-                (files.rootdir, src_bucket, src_region))
+        p = aws(
+            's3 sync %s s3://%s/ --region %s'
+            % (files.rootdir, src_bucket, src_region)
+        )
         self.assert_no_errors(p)
-        p2 = aws('s3 mv s3://%s/ s3://%s/ --region %s --source-region %s '
-                 '--recursive' %
-                 (src_bucket, dest_bucket, dest_region,
-                  src_region))
+        p2 = aws(
+            's3 mv s3://%s/ s3://%s/ --region %s --source-region %s '
+            '--recursive' % (src_bucket, dest_bucket, dest_region, src_region)
+        )
         assert p2.rc == 0, p2.stdout
         assert s3_utils.key_exists(dest_bucket, 'foo.txt')
         assert s3_utils.key_not_exists(src_bucket, 'foo.txt')
 
-    def test_mv_large_file_region(self, files, s3_utils,
-                                  shared_non_dns_compatible_bucket,
-                                  shared_non_dns_compatible_us_east_1_bucket):
+    def test_mv_large_file_region(
+        self,
+        files,
+        s3_utils,
+        shared_non_dns_compatible_bucket,
+        shared_non_dns_compatible_us_east_1_bucket,
+    ):
         src_region = 'us-west-2'
         src_bucket = shared_non_dns_compatible_bucket
         dest_region = 'us-east-1'
         dest_bucket = shared_non_dns_compatible_us_east_1_bucket
         foo_txt = files.create_file('foo.txt', 'a' * 1024 * 1024 * 10)
-        p = aws('s3 cp %s s3://%s/foo.txt --region %s' %
-                (foo_txt, src_bucket, src_region))
+        p = aws(
+            's3 cp %s s3://%s/foo.txt --region %s'
+            % (foo_txt, src_bucket, src_region)
+        )
         self.assert_no_errors(p)
 
         p2 = aws(
-            's3 mv s3://%s/foo.txt s3://%s/ --region %s --source-region %s ' %
-            (src_bucket, dest_bucket, dest_region,
-             src_region)
+            's3 mv s3://%s/foo.txt s3://%s/ --region %s --source-region %s '
+            % (src_bucket, dest_bucket, dest_region, src_region)
         )
         self.assert_no_errors(p2)
         assert s3_utils.key_exists(dest_bucket, 'foo.txt')
@@ -986,10 +1100,11 @@ class TestUnableToWriteToFile(BaseParame
         if os.geteuid() == 0:
             pytest.skip('Cannot completely remove write access as root user.')
         os.chmod(files.rootdir, 0o444)
-        s3_utils.put_object(shared_bucket, 'foo.txt',
-                            contents='Hello world')
-        p = aws('s3 cp s3://%s/foo.txt %s' % (
-            shared_bucket, os.path.join(files.rootdir, 'foo.txt')))
+        s3_utils.put_object(shared_bucket, 'foo.txt', contents='Hello world')
+        p = aws(
+            's3 cp s3://%s/foo.txt %s'
+            % (shared_bucket, os.path.join(files.rootdir, 'foo.txt'))
+        )
         assert p.rc == 1
         assert 'download failed' in p.stderr
 
@@ -1003,11 +1118,12 @@ class TestUnableToWriteToFile(BaseParame
         # This will result in a test error because we won't follow
         # the temporary redirect for the newly created bucket.
         contents = BytesIO(b'a' * 10 * 1024 * 1024)
-        s3_utils.put_object(shared_bucket, 'foo.txt',
-                            contents=contents)
+        s3_utils.put_object(shared_bucket, 'foo.txt', contents=contents)
         os.chmod(files.rootdir, 0o444)
-        p = aws('s3 cp s3://%s/foo.txt %s' % (
-            shared_bucket, os.path.join(files.rootdir, 'foo.txt')))
+        p = aws(
+            's3 cp s3://%s/foo.txt %s'
+            % (shared_bucket, os.path.join(files.rootdir, 'foo.txt'))
+        )
         assert p.rc == 1
         assert 'download failed' in p.stderr
 
@@ -1017,58 +1133,70 @@ class TestSymlinks(BaseParameterizedS3Cl
     """
     This class test the ability to follow or not follow symlinks.
     """
-    def test_no_follow_symlinks(self, files, s3_utils, symlink_files,
-                                shared_bucket):
-        p = aws('s3 sync %s s3://%s/ --no-follow-symlinks' % (
-            files.rootdir, shared_bucket))
+
+    def test_no_follow_symlinks(
+        self, files, s3_utils, symlink_files, shared_bucket
+    ):
+        p = aws(
+            's3 sync %s s3://%s/ --no-follow-symlinks'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_not_exists(shared_bucket, 'a-goodsymlink')
         assert s3_utils.key_not_exists(shared_bucket, 'b-badsymlink')
         assert s3_utils.key_not_exists(shared_bucket, 'c-goodsymlink/foo.txt')
         contents = s3_utils.get_key_contents(
-            shared_bucket, 'realfiles/foo.txt')
+            shared_bucket, 'realfiles/foo.txt'
+        )
         assert contents == 'foo.txt contents'
 
-    def test_follow_symlinks(self, files, s3_utils, symlink_files,
-                             shared_bucket):
+    def test_follow_symlinks(
+        self, files, s3_utils, symlink_files, shared_bucket
+    ):
         # Get rid of the bad symlink first.
         os.remove(os.path.join(files.rootdir, 'b-badsymlink'))
-        p = aws('s3 sync %s s3://%s/ --follow-symlinks' %
-                (files.rootdir, shared_bucket))
+        p = aws(
+            's3 sync %s s3://%s/ --follow-symlinks'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         contents = s3_utils.get_key_contents(shared_bucket, 'a-goodsymlink')
         assert contents == 'foo.txt contents'
         assert s3_utils.key_not_exists(shared_bucket, 'b-badsymlink')
         contents = s3_utils.get_key_contents(
-            shared_bucket, 'c-goodsymlink/foo.txt')
+            shared_bucket, 'c-goodsymlink/foo.txt'
+        )
         assert contents == 'foo.txt contents'
         contents = s3_utils.get_key_contents(
-            shared_bucket, 'realfiles/foo.txt')
+            shared_bucket, 'realfiles/foo.txt'
+        )
         assert contents == 'foo.txt contents'
 
-    def test_follow_symlinks_default(self, files, s3_utils, symlink_files,
-                                     shared_bucket):
+    def test_follow_symlinks_default(
+        self, files, s3_utils, symlink_files, shared_bucket
+    ):
         # Get rid of the bad symlink first.
         os.remove(os.path.join(files.rootdir, 'b-badsymlink'))
-        p = aws('s3 sync %s s3://%s/' %
-                (files.rootdir, shared_bucket))
+        p = aws('s3 sync %s s3://%s/' % (files.rootdir, shared_bucket))
         self.assert_no_errors(p)
         contents = s3_utils.get_key_contents(shared_bucket, 'a-goodsymlink')
         assert contents == 'foo.txt contents'
         assert s3_utils.key_not_exists(shared_bucket, 'b-badsymlink')
         contents = s3_utils.get_key_contents(
-            shared_bucket, 'c-goodsymlink/foo.txt')
+            shared_bucket, 'c-goodsymlink/foo.txt'
+        )
         assert contents == 'foo.txt contents'
         contents = s3_utils.get_key_contents(
-            shared_bucket, 'realfiles/foo.txt')
+            shared_bucket, 'realfiles/foo.txt'
+        )
         assert contents == 'foo.txt contents'
 
     def test_bad_symlink(self, files, symlink_files, shared_bucket):
         p = aws('s3 sync %s s3://%s/' % (files.rootdir, shared_bucket))
         assert p.rc == 2, p.stderr
         warning_msg = (
-            'warning: Skipping file %s. File does not exist.' %
-            os.path.join(files.rootdir, 'b-badsymlink')
+            'warning: Skipping file %s. File does not exist.'
+            % os.path.join(files.rootdir, 'b-badsymlink')
         )
         assert warning_msg in p.stderr
 
@@ -1079,12 +1207,16 @@ class TestUnicode(BaseParameterizedS3Cli
     unicode characters in both keyname and from those generated for both
     uploading and downloading files.
     """
+
     def test_cp(self, files, shared_bucket):
         local_example1_txt = files.create_file(
-            u'\u00e9xample.txt', 'example1 contents')
-        s3_example1_txt = 's3://%s/%s' % (shared_bucket,
-                                          os.path.basename(local_example1_txt))
-        local_example2_txt = files.full_path(u'\u00e9xample2.txt')
+            '\u00e9xample.txt', 'example1 contents'
+        )
+        s3_example1_txt = 's3://%s/%s' % (
+            shared_bucket,
+            os.path.basename(local_example1_txt),
+        )
+        local_example2_txt = files.full_path('\u00e9xample2.txt')
 
         p = aws('s3 cp %s %s' % (local_example1_txt, s3_example1_txt))
         self.assert_no_errors(p)
@@ -1096,19 +1228,25 @@ class TestUnicode(BaseParameterizedS3Cli
             assert f.read() == b'example1 contents'
 
     def test_recursive_cp(self, files, shared_bucket):
-        local_example1_txt = files.create_file(u'\u00e9xample.txt',
-                                               'example1 contents')
-        local_example2_txt = files.create_file(u'\u00e9xample2.txt',
-                                               'example2 contents')
-        p = aws('s3 cp %s s3://%s --recursive --quiet' % (
-            files.rootdir, shared_bucket))
+        local_example1_txt = files.create_file(
+            '\u00e9xample.txt', 'example1 contents'
+        )
+        local_example2_txt = files.create_file(
+            '\u00e9xample2.txt', 'example2 contents'
+        )
+        p = aws(
+            's3 cp %s s3://%s --recursive --quiet'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
 
         os.remove(local_example1_txt)
         os.remove(local_example2_txt)
 
-        p = aws('s3 cp s3://%s %s --recursive --quiet' % (
-            shared_bucket, files.rootdir))
+        p = aws(
+            's3 cp s3://%s %s --recursive --quiet'
+            % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
         assert open(local_example1_txt).read() == 'example1 contents'
         assert open(local_example2_txt).read() == 'example2 contents'
@@ -1149,8 +1287,9 @@ class TestLs(BaseS3IntegrationTest):
         # There should be no stdout if we can't find the bucket.
         assert p.stdout == ''
 
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_ls_with_prefix(self, s3_bucket, s3_utils, request):
         shared_bucket = request.getfixturevalue(s3_bucket)
         s3_utils.put_object(shared_bucket, 'foo.txt', 'contents')
@@ -1163,8 +1302,9 @@ class TestLs(BaseS3IntegrationTest):
         assert '8 foo' in p.stdout
         assert '8 bar.txt' in p.stdout
 
-    @pytest.mark.parametrize('s3_bucket', [
-        'shared_bucket', 'shared_dir_bucket'])
+    @pytest.mark.parametrize(
+        's3_bucket', ['shared_bucket', 'shared_dir_bucket']
+    )
     def test_ls_recursive(self, s3_bucket, s3_utils, request):
         shared_bucket = request.getfixturevalue(s3_bucket)
         s3_utils.put_object(shared_bucket, 'foo.txt', 'contents')
@@ -1210,6 +1350,7 @@ class TestMbRb(BaseS3IntegrationTest):
     """
     Tests primarily using ``rb`` and ``mb`` command.
     """
+
     def test_mb_rb(self, s3_utils):
         bucket_name = random_bucket_name()
         p = aws('s3 mb s3://%s' % bucket_name)
@@ -1235,6 +1376,7 @@ class TestOutput(BaseParameterizedS3Clie
     This ensures that arguments that affect output i.e. ``--quiet`` and
     ``--only-show-errors`` behave as expected.
     """
+
     def test_normal_output(self, files, shared_bucket):
         foo_txt = files.create_file('foo.txt', 'foo contents')
 
@@ -1260,8 +1402,9 @@ class TestOutput(BaseParameterizedS3Clie
         foo_txt = files.create_file('foo.txt', 'foo contents')
 
         # Copy file into bucket.
-        p = aws('s3 cp %s s3://%s/ --only-show-errors' % (foo_txt,
-                                                          shared_bucket))
+        p = aws(
+            's3 cp %s s3://%s/ --only-show-errors' % (foo_txt, shared_bucket)
+        )
         assert p.rc == 0
         # Check that nothing was printed to stdout.
         assert '' == p.stdout
@@ -1301,13 +1444,16 @@ class TestOutput(BaseParameterizedS3Clie
         foo_txt = files.create_file('foo.txt', 'foo contents')
 
         # Copy file into bucket.
-        p = aws(f's3 cp {foo_txt} s3://{_NON_EXISTENT_BUCKET}/ --only-show-errors')
+        p = aws(
+            f's3 cp {foo_txt} s3://{_NON_EXISTENT_BUCKET}/ --only-show-errors'
+        )
         # Check that there were errors and that the error was print to stderr.
         assert p.rc == 1
         assert 'upload failed' in p.stderr
 
-    def test_error_and_success_output_only_show_errors(self, files, s3_utils,
-                                                       shared_bucket):
+    def test_error_and_success_output_only_show_errors(
+        self, files, s3_utils, shared_bucket
+    ):
         # Create one file.
         files.create_file('f', 'foo contents')
 
@@ -1318,8 +1464,10 @@ class TestOutput(BaseParameterizedS3Clie
         # longer than 1024 bytes which is not allowed in s3.
         long_prefix = 'd' * 1022
 
-        p = aws('s3 cp %s s3://%s/%s/ --only-show-errors --recursive'
-                % (files.rootdir, shared_bucket, long_prefix))
+        p = aws(
+            's3 cp %s s3://%s/%s/ --only-show-errors --recursive'
+            % (files.rootdir, shared_bucket, long_prefix)
+        )
 
         # Check that there was at least one error.
         assert p.rc == 1
@@ -1338,6 +1486,7 @@ class TestDryrun(BaseParameterizedS3Clie
     """
     This ensures that dryrun works.
     """
+
     def test_dryrun(self, files, s3_utils, shared_bucket):
         foo_txt = files.create_file('foo.txt', 'foo contents')
 
@@ -1398,9 +1547,13 @@ class TestMemoryUtilization(BaseS3Integr
         if peak_memory > max_mem_allowed:
             failure_message = (
                 'Exceeded max memory allowed (%s MB) for command '
-                '"%s": %s MB' % (self.max_mem_allowed / 1024.0 / 1024.0,
-                                 full_command,
-                                 peak_memory / 1024.0 / 1024.0))
+                '"%s": %s MB'
+                % (
+                    self.max_mem_allowed / 1024.0 / 1024.0,
+                    full_command,
+                    peak_memory / 1024.0 / 1024.0,
+                )
+            )
             self.fail(failure_message)
 
     def test_transfer_single_large_file(self, files, shared_bucket):
@@ -1414,19 +1567,23 @@ class TestMemoryUtilization(BaseS3Integr
 
         # Verify downloading it back down obeys memory utilization.
         download_full_command = 's3 mv s3://%s/foo.txt %s' % (
-            shared_bucket, foo_txt)
+            shared_bucket,
+            foo_txt,
+        )
         p = aws(download_full_command, collect_memory=True)
         self.assert_no_errors(p)
-        self.assert_max_memory_used(p, self.max_mem_allowed,
-                                    download_full_command)
+        self.assert_max_memory_used(
+            p, self.max_mem_allowed, download_full_command
+        )
 
     # Some versions of RHEL allocate memory in a way where free'd memory isn't
     # given back to the OS.  We haven't seen behavior as bad as RHEL's to the
     # point where this test fails on other distros, so for now we're disabling
     # the test on RHEL until we come up with a better way to collect
     # memory usage.
-    @unittest.skipIf(_running_on_rhel(),
-                     'Streaming memory tests no supported on RHEL.')
+    @unittest.skipIf(
+        _running_on_rhel(), 'Streaming memory tests no supported on RHEL.'
+    )
     def test_stream_large_file(self, files, shared_bucket):
         """
         This tests to ensure that streaming files for both uploads and
@@ -1457,7 +1614,9 @@ class TestMemoryUtilization(BaseS3Integr
 
         # Now perform a streaming download of the file.
         full_command = 's3 cp s3://%s/foo.txt - > %s' % (
-            shared_bucket, foo_txt)
+            shared_bucket,
+            foo_txt,
+        )
         p = aws(full_command, collect_memory=True)
         self.assert_no_errors(p)
         # Use the usual bar for maximum memory usage since a streaming
@@ -1470,7 +1629,8 @@ class TestWebsiteConfiguration(BaseS3Int
     def test_create_website_index_configuration(self, s3_utils, shared_bucket):
         # Supply only --index-document argument.
         full_command = 's3 website %s --index-document index.html' % (
-            shared_bucket)
+            shared_bucket
+        )
         p = aws(full_command)
         assert p.rc == 0
         self.assert_no_errors(p)
@@ -1481,11 +1641,14 @@ class TestWebsiteConfiguration(BaseS3Int
         assert 'RoutingRules' not in parsed
         assert 'RedirectAllRequestsTo' not in parsed
 
-    def test_create_website_index_and_error_configuration(self, s3_utils,
-                                                          shared_bucket):
+    def test_create_website_index_and_error_configuration(
+        self, s3_utils, shared_bucket
+    ):
         # Supply both --index-document and --error-document arguments.
-        p = aws('s3 website %s --index-document index.html '
-                '--error-document error.html' % shared_bucket)
+        p = aws(
+            's3 website %s --index-document index.html '
+            '--error-document error.html' % shared_bucket
+        )
         assert p.rc == 0
         self.assert_no_errors(p)
         # Verify we have a bucket website configured.
@@ -1510,15 +1673,18 @@ class TestIncludeExcludeFilters(BasePara
         self.assert_no_errors(p)
         assert '(dryrun) upload:' in p.stdout
 
-        p2 = aws("s3 cp %s s3://random-bucket-name/ --dryrun --exclude '*'"
-                 % full_path)
+        p2 = aws(
+            "s3 cp %s s3://random-bucket-name/ --dryrun --exclude '*'"
+            % full_path
+        )
         self.assert_no_files_would_be_uploaded(p2)
 
     def test_explicitly_exclude_single_file(self, files):
         full_path = files.create_file('foo.txt', 'this is foo.txt')
-        p = aws('s3 cp %s s3://random-bucket-name/'
-                ' --dryrun --exclude foo.txt'
-                % full_path)
+        p = aws(
+            's3 cp %s s3://random-bucket-name/'
+            ' --dryrun --exclude foo.txt' % full_path
+        )
         self.assert_no_files_would_be_uploaded(p)
 
     def test_cwd_doesnt_matter(self, files):
@@ -1535,21 +1701,25 @@ class TestIncludeExcludeFilters(BasePara
         # create test/foo.txt
         nested_dir = os.path.join(files.rootdir, 'test')
         os.mkdir(nested_dir)
-        files.create_file(os.path.join(nested_dir, 'foo.txt'),
-                          contents='foo.txt contents')
+        files.create_file(
+            os.path.join(nested_dir, 'foo.txt'), contents='foo.txt contents'
+        )
         # Then create test-123.txt, test-321.txt, test.txt.
         files.create_file('test-123.txt', 'test-123.txt contents')
         files.create_file('test-321.txt', 'test-321.txt contents')
         files.create_file('test.txt', 'test.txt contents')
         # An --exclude test* should exclude everything here.
-        p = aws("s3 cp %s s3://random-bucket-name/ --dryrun --exclude '*' "
-                "--recursive" % files.rootdir)
+        p = aws(
+            "s3 cp %s s3://random-bucket-name/ --dryrun --exclude '*' "
+            "--recursive" % files.rootdir
+        )
         self.assert_no_files_would_be_uploaded(p)
 
         # We can include the test directory though.
-        p = aws("s3 cp %s s3://random-bucket-name/ --dryrun "
-                "--exclude '*' --include 'test/*' --recursive"
-                % files.rootdir)
+        p = aws(
+            "s3 cp %s s3://random-bucket-name/ --dryrun "
+            "--exclude '*' --include 'test/*' --recursive" % files.rootdir
+        )
         self.assert_no_errors(p)
         assert re.search(r'\(dryrun\) upload:.*test/foo.txt.*', p.stdout)
 
@@ -1558,17 +1728,21 @@ class TestIncludeExcludeFilters(BasePara
         s3_utils.put_object(shared_bucket, key_name='foo.txt')
         s3_utils.put_object(shared_bucket, key_name='bar.txt')
         s3_utils.put_object(shared_bucket, key_name='baz.jpg')
-        p = aws("s3 rm s3://%s/ --dryrun --exclude '*' --recursive"
-                % shared_bucket)
+        p = aws(
+            "s3 rm s3://%s/ --dryrun --exclude '*' --recursive" % shared_bucket
+        )
         self.assert_no_files_would_be_uploaded(p)
 
         p = aws(
             "s3 rm s3://%s/ --dryrun --exclude '*.jpg' --exclude '*.txt' "
-            "--recursive" % shared_bucket)
+            "--recursive" % shared_bucket
+        )
         self.assert_no_files_would_be_uploaded(p)
 
-        p = aws("s3 rm s3://%s/ --dryrun --exclude '*.txt' --recursive"
-                % shared_bucket)
+        p = aws(
+            "s3 rm s3://%s/ --dryrun --exclude '*.txt' --recursive"
+            % shared_bucket
+        )
         self.assert_no_errors(p)
         assert re.search(r'\(dryrun\) delete:.*baz.jpg.*', p.stdout)
         assert 'bar.txt' not in p.stdout
@@ -1591,8 +1765,10 @@ class TestIncludeExcludeFilters(BasePara
         #
         # If we now run --exclude '*.py' --delete, then we should *not*
         # delete bar.py and the remote side.
-        p = aws("s3 sync %s s3://%s/ --exclude '*.py' --delete" % (
-            files.rootdir, shared_bucket))
+        p = aws(
+            "s3 sync %s s3://%s/ --exclude '*.py' --delete"
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(shared_bucket, key_name='bar.py'), (
             "The --delete flag was not applied to the receiving "
@@ -1600,8 +1776,9 @@ class TestIncludeExcludeFilters(BasePara
             " was excluded."
         )
 
-    def test_exclude_filter_with_relative_path(self, files, s3_utils,
-                                               shared_bucket):
+    def test_exclude_filter_with_relative_path(
+        self, files, s3_utils, shared_bucket
+    ):
         # Same test as test_exclude_filter_with_delete, except we don't
         # use an absolute path on the source dir.
         files.create_file('foo.txt', 'contents')
@@ -1614,8 +1791,9 @@ class TestIncludeExcludeFilters(BasePara
         try:
             os.chdir(files.rootdir)
             # Note how we're using "." for the source directory.
-            p = aws("s3 sync . s3://%s/ --exclude '*.py' --delete"
-                    % shared_bucket)
+            p = aws(
+                "s3 sync . s3://%s/ --exclude '*.py' --delete" % shared_bucket
+            )
         finally:
             os.chdir(cwd)
         self.assert_no_errors(p)
@@ -1627,51 +1805,55 @@ class TestIncludeExcludeFilters(BasePara
 
     def test_filter_s3_with_prefix(self, files, s3_utils, shared_bucket):
         s3_utils.put_object(shared_bucket, key_name='temp/test')
-        p = aws('s3 cp s3://%s/temp/ %s --recursive --exclude test --dryrun'
-                % (shared_bucket, files.rootdir))
+        p = aws(
+            's3 cp s3://%s/temp/ %s --recursive --exclude test --dryrun'
+            % (shared_bucket, files.rootdir)
+        )
         self.assert_no_files_would_be_uploaded(p)
 
     def test_filter_no_resync(self, files, s3_utils, shared_bucket):
         # This specifically tests for the issue described here:
         # https://github.com/aws/aws-cli/issues/794
         dir_name = os.path.join(files.rootdir, 'temp')
-        files.create_file(os.path.join(dir_name, 'test.txt'),
-                          contents='foo')
+        files.create_file(os.path.join(dir_name, 'test.txt'), contents='foo')
         # Sync a local directory to an s3 prefix.
         p = aws('s3 sync %s s3://%s/temp' % (dir_name, shared_bucket))
         self.assert_no_errors(p)
         assert s3_utils.key_exists(shared_bucket, key_name='temp/test.txt')
 
         # Nothing should be synced down if filters are used.
-        p = aws("s3 sync s3://%s/temp %s --exclude '*' --include test.txt"
-                % (shared_bucket, dir_name))
+        p = aws(
+            "s3 sync s3://%s/temp %s --exclude '*' --include test.txt"
+            % (shared_bucket, dir_name)
+        )
         self.assert_no_files_would_be_uploaded(p)
 
 
 class TestFileWithSpaces(BaseParameterizedS3ClientTest):
     def test_upload_download_file_with_spaces(self, files, shared_bucket):
         filename = files.create_file('with space.txt', 'contents')
-        p = aws('s3 cp %s s3://%s/ --recursive' % (files.rootdir,
-                                                   shared_bucket))
+        p = aws(
+            's3 cp %s s3://%s/ --recursive' % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         os.remove(filename)
         # Now download the file back down locally.
-        p = aws('s3 cp s3://%s/ %s --recursive' % (shared_bucket,
-                                                   files.rootdir))
+        p = aws(
+            's3 cp s3://%s/ %s --recursive' % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
         assert os.listdir(files.rootdir)[0] == 'with space.txt'
 
     def test_sync_file_with_spaces(self, files, shared_bucket):
-        files.create_file('with space.txt',
-                          'contents', mtime=time.time() - 300)
-        p = aws('s3 sync %s s3://%s/' % (files.rootdir,
-                                         shared_bucket))
+        files.create_file(
+            'with space.txt', 'contents', mtime=time.time() - 300
+        )
+        p = aws('s3 sync %s s3://%s/' % (files.rootdir, shared_bucket))
         self.assert_no_errors(p)
         time.sleep(1)
         # Now syncing again should *not* trigger any uploads (i.e we should
         # get nothing on stdout).
-        p2 = aws('s3 sync %s s3://%s/' % (files.rootdir,
-                                          shared_bucket))
+        p2 = aws('s3 sync %s s3://%s/' % (files.rootdir, shared_bucket))
         assert p2.stdout == ''
         assert p2.stderr == ''
         assert p2.rc == 0
@@ -1682,8 +1864,10 @@ class TestStreams(BaseParameterizedS3Cli
         """
         This tests uploading a small stream from stdin.
         """
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=b'This is a test')
+        p = aws(
+            's3 cp - s3://%s/stream' % shared_bucket,
+            input_data=b'This is a test',
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(shared_bucket, 'stream')
         contents = s3_utils.get_key_contents(shared_bucket, 'stream')
@@ -1693,10 +1877,9 @@ class TestStreams(BaseParameterizedS3Cli
         """
         This tests being able to upload unicode from stdin.
         """
-        unicode_str = u'\u00e9 This is a test'
+        unicode_str = '\u00e9 This is a test'
         byte_str = unicode_str.encode('utf-8')
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=byte_str)
+        p = aws('s3 cp - s3://%s/stream' % shared_bucket, input_data=byte_str)
         self.assert_no_errors(p)
         assert s3_utils.key_exists(shared_bucket, 'stream')
         contents = s3_utils.get_key_contents(shared_bucket, 'stream')
@@ -1708,10 +1891,11 @@ class TestStreams(BaseParameterizedS3Cli
         The data has some unicode in it to avoid having to do a separate
         multipart upload test just for unicode.
         """
-        data = u'\u00e9bcd' * (1024 * 1024 * 10)
+        data = '\u00e9bcd' * (1024 * 1024 * 10)
         data_encoded = data.encode('utf-8')
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=data_encoded)
+        p = aws(
+            's3 cp - s3://%s/stream' % shared_bucket, input_data=data_encoded
+        )
         self.assert_no_errors(p)
         assert s3_utils.key_exists(shared_bucket, 'stream')
         contents = s3_utils.get_key_contents(shared_bucket, 'stream')
@@ -1721,8 +1905,10 @@ class TestStreams(BaseParameterizedS3Cli
         """
         This tests downloading a small stream from stdout.
         """
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=b'This is a test')
+        p = aws(
+            's3 cp - s3://%s/stream' % shared_bucket,
+            input_data=b'This is a test',
+        )
         self.assert_no_errors(p)
 
         p = aws('s3 cp s3://%s/stream -' % shared_bucket)
@@ -1733,10 +1919,11 @@ class TestStreams(BaseParameterizedS3Cli
         """
         This tests downloading a small unicode stream from stdout.
         """
-        data = u'\u00e9 This is a test'
+        data = '\u00e9 This is a test'
         data_encoded = data.encode('utf-8')
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=data_encoded)
+        p = aws(
+            's3 cp - s3://%s/stream' % shared_bucket, input_data=data_encoded
+        )
         self.assert_no_errors(p)
 
         # Downloading the unicode stream to standard out.
@@ -1752,10 +1939,11 @@ class TestStreams(BaseParameterizedS3Cli
         """
         # First lets upload some data via streaming since
         # its faster and we do not have to write to a file!
-        data = u'\u00e9bcd' * (1024 * 1024 * 10)
+        data = '\u00e9bcd' * (1024 * 1024 * 10)
         data_encoded = data.encode('utf-8')
-        p = aws('s3 cp - s3://%s/stream' % shared_bucket,
-                input_data=data_encoded)
+        p = aws(
+            's3 cp - s3://%s/stream' % shared_bucket, input_data=data_encoded
+        )
 
         # Download the unicode stream to standard out.
         p = aws('s3 cp s3://%s/stream -' % shared_bucket)
@@ -1773,20 +1961,28 @@ class TestLSWithProfile(BaseS3Integratio
 
 class TestNoSignRequests(BaseParameterizedS3ClientTest):
     def test_no_sign_request(self, files, s3_utils, shared_bucket, region):
-        s3_utils.put_object(shared_bucket, 'foo', contents='bar',
-                            extra_args={'ACL': 'public-read-write'})
+        s3_utils.put_object(
+            shared_bucket,
+            'foo',
+            contents='bar',
+            extra_args={'ACL': 'public-read-write'},
+        )
         env_vars = os.environ.copy()
         env_vars['AWS_ACCESS_KEY_ID'] = 'foo'
         env_vars['AWS_SECRET_ACCESS_KEY'] = 'bar'
-        p = aws('s3 cp s3://%s/foo %s/ --region %s' %
-                (shared_bucket, files.rootdir, region),
-                env_vars=env_vars)
+        p = aws(
+            's3 cp s3://%s/foo %s/ --region %s'
+            % (shared_bucket, files.rootdir, region),
+            env_vars=env_vars,
+        )
         # Should have credential issues
         assert p.rc == 1
 
-        p = aws('s3 cp s3://%s/foo %s/ --region %s --no-sign-request' %
-                (shared_bucket, files.rootdir, region),
-                env_vars=env_vars)
+        p = aws(
+            's3 cp s3://%s/foo %s/ --region %s --no-sign-request'
+            % (shared_bucket, files.rootdir, region),
+            env_vars=env_vars,
+        )
         # Should be able to download the file when not signing the request.
         self.assert_no_errors(p)
 
@@ -1800,31 +1996,37 @@ class TestHonorsEndpointUrl(BaseParamete
         # be in the debug logs.  The other alternative is to actually
         # watch what connections are made in the process, which is not
         # easy.
-        p = aws('s3 ls s3://dnscompat/ '
-                '--endpoint-url http://localhost:51515 '
-                '--debug')
+        p = aws(
+            's3 ls s3://dnscompat/ '
+            '--endpoint-url http://localhost:51515 '
+            '--debug'
+        )
         debug_logs = p.stderr
         original_hostname = 'dnscompat.s3.amazonaws.com'
         expected = 'localhost'
-        assert original_hostname not in debug_logs, (
-            '--endpoint-url is being ignored in s3 commands.')
+        assert (
+            original_hostname not in debug_logs
+        ), '--endpoint-url is being ignored in s3 commands.'
         assert expected in debug_logs
 
 
 class TestSSERelatedParams(BaseParameterizedS3ClientTest):
-    def download_and_assert_kms_object_integrity(self, bucket, key, contents,
-                                                 files, s3_utils):
+    def download_and_assert_kms_object_integrity(
+        self, bucket, key, contents, files, s3_utils
+    ):
         s3_utils.wait_until_key_exists(bucket, key)
         # Ensure the kms object can be download it by downloading it
         # with --sse aws:kms is enabled to ensure sigv4 is used on the
         # download, as it is required for kms.
         download_filename = os.path.join(files.rootdir, 'tmp', key)
-        p = aws('s3 cp s3://%s/%s %s --sse aws:kms' % (
-            bucket, key, download_filename))
+        p = aws(
+            's3 cp s3://%s/%s %s --sse aws:kms'
+            % (bucket, key, download_filename)
+        )
         self.assert_no_errors(p)
 
         assert os.path.isfile(download_filename)
-        with open(download_filename, 'r') as f:
+        with open(download_filename) as f:
             assert f.read() == contents
 
     def test_sse_upload(self, files, s3_utils, shared_bucket):
@@ -1833,8 +2035,10 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload the file using AES256
-        p = aws('s3 cp %s s3://%s/%s --sse AES256' % (
-            file_name, shared_bucket, key))
+        p = aws(
+            's3 cp %s s3://%s/%s --sse AES256'
+            % (file_name, shared_bucket, key)
+        )
         self.assert_no_errors(p)
 
         # Ensure the file was uploaded correctly
@@ -1846,8 +2050,10 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload the file using AES256
-        p = aws('s3 cp %s s3://%s/%s --sse AES256' % (
-            file_name, shared_bucket, key))
+        p = aws(
+            's3 cp %s s3://%s/%s --sse AES256'
+            % (file_name, shared_bucket, key)
+        )
         self.assert_no_errors(p)
 
         # Ensure the file was uploaded correctly
@@ -1859,12 +2065,15 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload the file using KMS
-        p = aws('s3 cp %s s3://%s/%s --sse aws:kms' % (
-            file_name, shared_bucket, key))
+        p = aws(
+            's3 cp %s s3://%s/%s --sse aws:kms'
+            % (file_name, shared_bucket, key)
+        )
         self.assert_no_errors(p)
 
         self.download_and_assert_kms_object_integrity(
-            shared_bucket, key, contents, files, s3_utils)
+            shared_bucket, key, contents, files, s3_utils
+        )
 
     def test_large_file_sse_kms_upload(self, files, s3_utils, shared_bucket):
         key = 'foo.txt'
@@ -1872,11 +2081,14 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload the file using KMS
-        p = aws('s3 cp %s s3://%s/%s --sse aws:kms' % (
-            file_name, shared_bucket, key))
+        p = aws(
+            's3 cp %s s3://%s/%s --sse aws:kms'
+            % (file_name, shared_bucket, key)
+        )
         self.assert_no_errors(p)
         self.download_and_assert_kms_object_integrity(
-            shared_bucket, key, contents, files, s3_utils)
+            shared_bucket, key, contents, files, s3_utils
+        )
 
     def test_sse_copy(self, s3_utils, shared_bucket):
         key = 'foo.txt'
@@ -1885,8 +2097,10 @@ class TestSSERelatedParams(BaseParameter
         s3_utils.put_object(shared_bucket, key, contents)
 
         # Copy the file using AES256
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --sse AES256' % (
-            shared_bucket, key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --sse AES256'
+            % (shared_bucket, key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
 
         # Ensure the file was copied correctly
@@ -1904,8 +2118,10 @@ class TestSSERelatedParams(BaseParameter
         self.assert_no_errors(p)
 
         # Copy the file using AES256
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --sse AES256' % (
-            shared_bucket, key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --sse AES256'
+            % (shared_bucket, key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
 
         # Ensure the file was copied correctly
@@ -1918,11 +2134,14 @@ class TestSSERelatedParams(BaseParameter
         s3_utils.put_object(shared_bucket, key, contents)
 
         # Copy the file using KMS
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --sse aws:kms' % (
-            shared_bucket, key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --sse aws:kms'
+            % (shared_bucket, key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
         self.download_and_assert_kms_object_integrity(
-            shared_bucket, key, contents, files, s3_utils)
+            shared_bucket, key, contents, files, s3_utils
+        )
 
     def test_large_file_sse_kms_copy(self, files, s3_utils, shared_bucket):
         key = 'foo.txt'
@@ -1936,11 +2155,14 @@ class TestSSERelatedParams(BaseParameter
         self.assert_no_errors(p)
 
         # Copy the file using KMS
-        p = aws('s3 cp s3://%s/%s s3://%s/%s --sse aws:kms' % (
-            shared_bucket, key, shared_bucket, new_key))
+        p = aws(
+            's3 cp s3://%s/%s s3://%s/%s --sse aws:kms'
+            % (shared_bucket, key, shared_bucket, new_key)
+        )
         self.assert_no_errors(p)
         self.download_and_assert_kms_object_integrity(
-            shared_bucket, key, contents, files, s3_utils)
+            shared_bucket, key, contents, files, s3_utils
+        )
 
     def test_smoke_sync_sse(self, files, s3_utils, shared_bucket):
         key = 'foo.txt'
@@ -1948,14 +2170,18 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload sync
-        p = aws('s3 sync %s s3://%s/foo/ --sse AES256' % (
-            files.rootdir, shared_bucket))
+        p = aws(
+            's3 sync %s s3://%s/foo/ --sse AES256'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
         s3_utils.wait_until_key_exists(shared_bucket, 'foo/foo.txt')
 
         # Copy sync
-        p = aws('s3 sync s3://%s/foo/ s3://%s/bar/ --sse AES256' % (
-            shared_bucket, shared_bucket))
+        p = aws(
+            's3 sync s3://%s/foo/ s3://%s/bar/ --sse AES256'
+            % (shared_bucket, shared_bucket)
+        )
         self.assert_no_errors(p)
         s3_utils.wait_until_key_exists(shared_bucket, 'bar/foo.txt')
 
@@ -1963,12 +2189,14 @@ class TestSSERelatedParams(BaseParameter
         os.remove(file_name)
 
         # Download sync
-        p = aws('s3 sync s3://%s/bar/ %s --sse AES256' % (
-            shared_bucket, files.rootdir))
+        p = aws(
+            's3 sync s3://%s/bar/ %s --sse AES256'
+            % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
 
         assert os.path.isfile(file_name)
-        with open(file_name, 'r') as f:
+        with open(file_name) as f:
             assert f.read() == contents
 
     def test_smoke_sync_sse_kms(self, files, shared_bucket):
@@ -1977,166 +2205,223 @@ class TestSSERelatedParams(BaseParameter
         file_name = files.create_file(key, contents)
 
         # Upload sync
-        p = aws('s3 sync %s s3://%s/foo/ --sse aws:kms' % (
-            files.rootdir, shared_bucket))
+        p = aws(
+            's3 sync %s s3://%s/foo/ --sse aws:kms'
+            % (files.rootdir, shared_bucket)
+        )
         self.assert_no_errors(p)
 
         # Copy sync
-        p = aws('s3 sync s3://%s/foo/ s3://%s/bar/ --sse aws:kms' % (
-            shared_bucket, shared_bucket))
+        p = aws(
+            's3 sync s3://%s/foo/ s3://%s/bar/ --sse aws:kms'
+            % (shared_bucket, shared_bucket)
+        )
         self.assert_no_errors(p)
 
         # Remove the original file
         os.remove(file_name)
 
         # Download sync
-        p = aws('s3 sync s3://%s/bar/ %s --sse aws:kms' % (
-            shared_bucket, files.rootdir))
+        p = aws(
+            's3 sync s3://%s/bar/ %s --sse aws:kms'
+            % (shared_bucket, files.rootdir)
+        )
         self.assert_no_errors(p)
 
         assert os.path.isfile(file_name)
-        with open(file_name, 'r') as f:
+        with open(file_name) as f:
             assert f.read() == contents
 
 
 class TestSSECRelatedParams(BaseParameterizedS3ClientTest):
     def download_and_assert_sse_c_object_integrity(
-            self, bucket, key, encrypt_key, contents, files, s3_utils):
-        s3_utils.wait_until_key_exists(bucket, key,
-                                       {'SSECustomerKey': encrypt_key,
-                                        'SSECustomerAlgorithm': 'AES256'})
+        self, bucket, key, encrypt_key, contents, files, s3_utils
+    ):
+        s3_utils.wait_until_key_exists(
+            bucket,
+            key,
+            {'SSECustomerKey': encrypt_key, 'SSECustomerAlgorithm': 'AES256'},
+        )
         download_filename = os.path.join(files.rootdir, 'tmp', key)
-        p = aws('s3 cp s3://%s/%s %s --sse-c AES256 --sse-c-key %s' % (
-            bucket, key, download_filename, encrypt_key))
+        p = aws(
+            's3 cp s3://%s/%s %s --sse-c AES256 --sse-c-key %s'
+            % (bucket, key, download_filename, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         assert os.path.isfile(download_filename)
-        with open(download_filename, 'r') as f:
+        with open(download_filename) as f:
             assert f.read() == contents
 
-    def test_sse_c_upload_and_download(self, files, s3_utils, encrypt_key,
-                                       shared_bucket):
+    def test_sse_c_upload_and_download(
+        self, files, s3_utils, encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         contents = 'contents'
         file_name = files.create_file(key, contents)
 
         # Upload the file using SSE-C
-        p = aws('s3 cp %s s3://%s --sse-c AES256 --sse-c-key %s' % (
-            file_name, shared_bucket, encrypt_key))
+        p = aws(
+            's3 cp %s s3://%s --sse-c AES256 --sse-c-key %s'
+            % (file_name, shared_bucket, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         self.download_and_assert_sse_c_object_integrity(
-            shared_bucket, key, encrypt_key, contents, files, s3_utils)
+            shared_bucket, key, encrypt_key, contents, files, s3_utils
+        )
 
-    def test_can_delete_single_sse_c_object(self, s3_utils, encrypt_key,
-                                            shared_bucket):
+    def test_can_delete_single_sse_c_object(
+        self, s3_utils, encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         contents = 'contents'
         s3_utils.put_object(
-            shared_bucket, key, contents,
+            shared_bucket,
+            key,
+            contents,
             extra_args={
                 'SSECustomerKey': encrypt_key,
-                'SSECustomerAlgorithm': 'AES256'
-            }
+                'SSECustomerAlgorithm': 'AES256',
+            },
         )
         p = aws('s3 rm s3://%s/%s' % (shared_bucket, key))
         self.assert_no_errors(p)
         assert not s3_utils.key_exists(shared_bucket, key)
 
-    def test_sse_c_upload_and_download_large_file(self, files, s3_utils,
-                                                  encrypt_key, shared_bucket):
+    def test_sse_c_upload_and_download_large_file(
+        self, files, s3_utils, encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         contents = 'a' * (10 * (1024 * 1024))
         file_name = files.create_file(key, contents)
 
         # Upload the file using SSE-C
-        p = aws('s3 cp %s s3://%s --sse-c AES256 --sse-c-key %s' % (
-            file_name, shared_bucket, encrypt_key))
+        p = aws(
+            's3 cp %s s3://%s --sse-c AES256 --sse-c-key %s'
+            % (file_name, shared_bucket, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         self.download_and_assert_sse_c_object_integrity(
-            shared_bucket, key, encrypt_key, contents, files, s3_utils)
+            shared_bucket, key, encrypt_key, contents, files, s3_utils
+        )
 
-    def test_sse_c_copy(self, files, s3_utils, encrypt_key, other_encrypt_key,
-                        shared_bucket):
+    def test_sse_c_copy(
+        self, files, s3_utils, encrypt_key, other_encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         new_key = 'bar.txt'
         contents = 'contents'
         file_name = files.create_file(key, contents)
 
         # Upload the file using SSE-C
-        p = aws('s3 cp %s s3://%s --sse-c AES256 --sse-c-key %s' % (
-            file_name, shared_bucket, encrypt_key))
+        p = aws(
+            's3 cp %s s3://%s --sse-c AES256 --sse-c-key %s'
+            % (file_name, shared_bucket, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         # Copy the file using SSE-C and a new encryption key
         p = aws(
             's3 cp s3://%s/%s s3://%s/%s --sse-c AES256 --sse-c-key %s '
-            '--sse-c-copy-source AES256 --sse-c-copy-source-key %s' % (
-                shared_bucket, key, shared_bucket, new_key, other_encrypt_key,
-                encrypt_key))
+            '--sse-c-copy-source AES256 --sse-c-copy-source-key %s'
+            % (
+                shared_bucket,
+                key,
+                shared_bucket,
+                new_key,
+                other_encrypt_key,
+                encrypt_key,
+            )
+        )
         self.assert_no_errors(p)
         self.download_and_assert_sse_c_object_integrity(
-            shared_bucket, new_key, other_encrypt_key, contents, files,
-            s3_utils)
+            shared_bucket,
+            new_key,
+            other_encrypt_key,
+            contents,
+            files,
+            s3_utils,
+        )
 
-    def test_sse_c_copy_large_file(self, files, s3_utils, encrypt_key,
-                                   other_encrypt_key, shared_bucket):
+    def test_sse_c_copy_large_file(
+        self, files, s3_utils, encrypt_key, other_encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         new_key = 'bar.txt'
         contents = 'a' * (10 * (1024 * 1024))
         file_name = files.create_file(key, contents)
 
         # Upload the file using SSE-C
-        p = aws('s3 cp %s s3://%s --sse-c AES256 --sse-c-key %s' % (
-            file_name, shared_bucket, encrypt_key))
+        p = aws(
+            's3 cp %s s3://%s --sse-c AES256 --sse-c-key %s'
+            % (file_name, shared_bucket, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         # Copy the file using SSE-C and a new encryption key
         p = aws(
             's3 cp s3://%s/%s s3://%s/%s --sse-c AES256 --sse-c-key %s '
-            '--sse-c-copy-source AES256 --sse-c-copy-source-key %s' % (
-                shared_bucket, key, shared_bucket, new_key, other_encrypt_key,
-                encrypt_key))
+            '--sse-c-copy-source AES256 --sse-c-copy-source-key %s'
+            % (
+                shared_bucket,
+                key,
+                shared_bucket,
+                new_key,
+                other_encrypt_key,
+                encrypt_key,
+            )
+        )
         self.assert_no_errors(p)
         self.download_and_assert_sse_c_object_integrity(
-            shared_bucket, new_key, other_encrypt_key, contents, files,
-            s3_utils)
+            shared_bucket,
+            new_key,
+            other_encrypt_key,
+            contents,
+            files,
+            s3_utils,
+        )
 
-    def test_smoke_sync_sse_c(self, files, encrypt_key, other_encrypt_key,
-                              shared_bucket):
+    def test_smoke_sync_sse_c(
+        self, files, encrypt_key, other_encrypt_key, shared_bucket
+    ):
         key = 'foo.txt'
         contents = 'contents'
         file_name = files.create_file(key, contents)
 
         # Upload sync
-        p = aws('s3 sync %s s3://%s/foo/ --sse-c AES256 --sse-c-key %s' % (
-            files.rootdir, shared_bucket, encrypt_key))
+        p = aws(
+            's3 sync %s s3://%s/foo/ --sse-c AES256 --sse-c-key %s'
+            % (files.rootdir, shared_bucket, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         # Copy sync
-        p = aws('s3 sync s3://%s/foo/ s3://%s/bar/ --sse-c AES256 '
-                '--sse-c-key %s --sse-c-copy-source AES256 '
-                '--sse-c-copy-source-key %s' % (
-                    shared_bucket, shared_bucket, other_encrypt_key,
-                    encrypt_key))
+        p = aws(
+            's3 sync s3://%s/foo/ s3://%s/bar/ --sse-c AES256 '
+            '--sse-c-key %s --sse-c-copy-source AES256 '
+            '--sse-c-copy-source-key %s'
+            % (shared_bucket, shared_bucket, other_encrypt_key, encrypt_key)
+        )
         self.assert_no_errors(p)
 
         # Remove the original file
         os.remove(file_name)
 
         # Download sync
-        p = aws('s3 sync s3://%s/bar/ %s --sse-c AES256 --sse-c-key %s' % (
-            shared_bucket, files.rootdir, other_encrypt_key))
+        p = aws(
+            's3 sync s3://%s/bar/ %s --sse-c AES256 --sse-c-key %s'
+            % (shared_bucket, files.rootdir, other_encrypt_key)
+        )
         self.assert_no_errors(p)
 
         assert os.path.isfile(file_name)
-        with open(file_name, 'r') as f:
+        with open(file_name) as f:
             assert f.read() == contents
 
 
 class TestPresignCommand(BaseS3IntegrationTest):
-
     def test_can_retrieve_presigned_url(self, s3_utils, shared_bucket):
         original_contents = b'this is foo.txt'
         s3_utils.put_object(shared_bucket, 'foo.txt', original_contents)
diff -pruN 2.23.6-1/tests/integration/customizations/test_codecommit.py 2.31.35-1/tests/integration/customizations/test_codecommit.py
--- 2.23.6-1/tests/integration/customizations/test_codecommit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/test_codecommit.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,33 +11,38 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import awscli
 import os
-
 from datetime import datetime
 
-from awscli.compat import StringIO
-from botocore.session import Session
+from botocore.awsrequest import AWSRequest
 from botocore.credentials import Credentials
+from botocore.session import Session
+
+import awscli
+from awscli.clidriver import AWSCLIEntryPoint, create_clidriver
+from awscli.compat import StringIO
 from awscli.customizations.codecommit import CodeCommitGetCommand
-from awscli.testutils import mock, unittest, StringIOWithFileNo
-from botocore.awsrequest import AWSRequest
-from awscli.clidriver import create_clidriver, AWSCLIEntryPoint
+from awscli.testutils import StringIOWithFileNo, mock, unittest
 
 
 class TestCodeCommitCredentialHelper(unittest.TestCase):
-
-    PROTOCOL_HOST_PATH = ('protocol=https\n'
-                          'host=git-codecommit.us-east-1.amazonaws.com\n'
-                          'path=/v1/repos/myrepo')
-
-    FIPS_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                               'host=git-codecommit-fips.us-east-1.amazonaws.com\n'
-                               'path=/v1/repos/myrepo')
-
-    VPC_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                              'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit.us-east-1.vpce.amazonaws.com\n'
-                              'path=/v1/repos/myrepo')
+    PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=git-codecommit.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    FIPS_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=git-codecommit-fips.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    VPC_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit.us-east-1.vpce.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
 
     def setUp(self):
         self.orig_id = os.environ.get('AWS_ACCESS_KEY_ID')
@@ -65,10 +70,13 @@ class TestCodeCommitCredentialHelper(uni
         rc = entry_point.main('codecommit credential-helper get'.split())
         output = stdout_mock.getvalue().strip()
         self.assertEqual(
-            ('username=foo\n'
-             'password=20101008T000000Z'
-             '7dc259e2d505af354a1219b9bcd784bd384dc706efa0d9aefc571f214be4c89c'),
-             output)
+            (
+                'username=foo\n'
+                'password=20101008T000000Z'
+                '7dc259e2d505af354a1219b9bcd784bd384dc706efa0d9aefc571f214be4c89c'
+            ),
+            output,
+        )
         self.assertEqual(0, rc)
 
     @mock.patch('sys.stdin', StringIO(FIPS_PROTOCOL_HOST_PATH))
@@ -81,10 +89,13 @@ class TestCodeCommitCredentialHelper(uni
         rc = entry_point.main('codecommit credential-helper get'.split())
         output = stdout_mock.getvalue().strip()
         self.assertEqual(
-            ('username=foo\n'
-             'password=20101008T000000Z'
-             '500037cb3514b3fe01ebcda7c80973f5b4c0d8199a7a6563b85fd6edf272d460'),
-             output)
+            (
+                'username=foo\n'
+                'password=20101008T000000Z'
+                '500037cb3514b3fe01ebcda7c80973f5b4c0d8199a7a6563b85fd6edf272d460'
+            ),
+            output,
+        )
         self.assertEqual(0, rc)
 
     @mock.patch('sys.stdin', StringIO(VPC_PROTOCOL_HOST_PATH))
@@ -97,10 +108,13 @@ class TestCodeCommitCredentialHelper(uni
         rc = entry_point.main('codecommit credential-helper get'.split())
         output = stdout_mock.getvalue().strip()
         self.assertEqual(
-            ('username=foo\n'
-             'password=20101008T000000Z'
-             '9ed987cc6336c3de2d9f06b9236c7a9fd76b660b080db15983290e636dbfbd6b'),
-             output)
+            (
+                'username=foo\n'
+                'password=20101008T000000Z'
+                '9ed987cc6336c3de2d9f06b9236c7a9fd76b660b080db15983290e636dbfbd6b'
+            ),
+            output,
+        )
         self.assertEqual(0, rc)
 
 
diff -pruN 2.23.6-1/tests/integration/customizations/test_generatecliskeleton.py 2.31.35-1/tests/integration/customizations/test_generatecliskeleton.py
--- 2.23.6-1/tests/integration/customizations/test_generatecliskeleton.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/test_generatecliskeleton.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import contextlib
-import os
 import json
 import logging
+import os
 
 import pytest
 from ruamel.yaml import YAML
@@ -21,6 +21,7 @@ from ruamel.yaml import YAML
 from awscli.clidriver import create_clidriver
 from awscli.testutils import mock
 
+
 # NOTE: This should be a standalone pytest fixture.  However, fixtures cannot
 # be used outside of other fixtures or test cases, and it is needed by
 # get_all_cli_skeleton_commands to generate the parameterization cases.
@@ -46,10 +47,12 @@ def clean_environ():
     with patch_environ():
         yield
 
+
 @pytest.fixture
 def yaml_safe_loader():
     return YAML(typ="safe", pure=True)
 
+
 def get_all_cli_skeleton_commands():
     skeleton_commands = []
     with patch_environ():
diff -pruN 2.23.6-1/tests/integration/customizations/test_waiters.py 2.31.35-1/tests/integration/customizations/test_waiters.py
--- 2.23.6-1/tests/integration/customizations/test_waiters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/customizations/test_waiters.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,10 @@
 # language governing permissions and limitations under the License.
 import random
 
+import botocore.session
 import pytest
 
-import botocore.session
-from awscli.testutils import unittest, aws, random_chars
+from awscli.testutils import aws, random_chars, unittest
 
 
 class TestDynamoDBWait(unittest.TestCase):
@@ -29,17 +29,22 @@ class TestDynamoDBWait(unittest.TestCase
         table_name = 'awscliddb-%s' % random_chars(10)
         self.client.create_table(
             TableName=table_name,
-            ProvisionedThroughput={"ReadCapacityUnits": 5,
-                                   "WriteCapacityUnits": 5},
+            ProvisionedThroughput={
+                "ReadCapacityUnits": 5,
+                "WriteCapacityUnits": 5,
+            },
             KeySchema=[{"AttributeName": "foo", "KeyType": "HASH"}],
-            AttributeDefinitions=[{"AttributeName": "foo",
-                                   "AttributeType": "S"}])
+            AttributeDefinitions=[
+                {"AttributeName": "foo", "AttributeType": "S"}
+            ],
+        )
         self.addCleanup(self.client.delete_table, TableName=table_name)
 
         # Wait for the table to be active.
         p = aws(
-            'dynamodb wait table-exists --table-name %s --region us-west-2' %
-            table_name)
+            'dynamodb wait table-exists --table-name %s --region us-west-2'
+            % table_name
+        )
         self.assertEqual(p.rc, 0)
 
         # Make sure the table is active.
diff -pruN 2.23.6-1/tests/integration/s3transfer/__init__.py 2.31.35-1/tests/integration/s3transfer/__init__.py
--- 2.23.6-1/tests/integration/s3transfer/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,9 @@
 import botocore
 import botocore.session
 from botocore.exceptions import WaiterError
-
 from s3transfer.manager import TransferManager
 from s3transfer.subscribers import BaseSubscriber
+
 from tests import FileCreator, S3Utils, random_bucket_name, unittest
 
 
diff -pruN 2.23.6-1/tests/integration/s3transfer/test_copy.py 2.31.35-1/tests/integration/s3transfer/test_copy.py
--- 2.23.6-1/tests/integration/s3transfer/test_copy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/test_copy.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from s3transfer.manager import TransferConfig
+
 from tests import RecordingSubscriber
 from tests.integration.s3transfer import BaseTransferManagerIntegTest
 
diff -pruN 2.23.6-1/tests/integration/s3transfer/test_crt.py 2.31.35-1/tests/integration/s3transfer/test_crt.py
--- 2.23.6-1/tests/integration/s3transfer/test_crt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/test_crt.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,9 +16,9 @@ import os
 from uuid import uuid4
 
 from botocore.exceptions import ClientError
-
 from s3transfer.subscribers import BaseSubscriber
 from s3transfer.utils import OSUtils
+
 from tests import (
     HAS_CRT,
     NonSeekableReader,
@@ -29,9 +29,8 @@ from tests import (
 from tests.integration.s3transfer import BaseTransferManagerIntegTest
 
 if HAS_CRT:
-    from awscrt.exceptions import AwsCrtError
-
     import s3transfer.crt
+    from awscrt.exceptions import AwsCrtError
 
 
 class RecordingSubscriber(BaseSubscriber):
@@ -511,6 +510,6 @@ class TestCRTS3Transfers(BaseTransferMan
             future.result()
             self.assertEqual(err.name, 'AWS_ERROR_S3_CANCELED')
 
-        possible_matches = glob.glob('%s*' % download_path)
+        possible_matches = glob.glob(f'{download_path}*')
         self.assertEqual(possible_matches, [])
         self._assert_subscribers_called()
diff -pruN 2.23.6-1/tests/integration/s3transfer/test_download.py 2.31.35-1/tests/integration/s3transfer/test_download.py
--- 2.23.6-1/tests/integration/s3transfer/test_download.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/test_download.py	2025-11-12 19:17:29.000000000 +0000
@@ -17,6 +17,7 @@ import time
 from concurrent.futures import CancelledError
 
 from s3transfer.manager import TransferConfig
+
 from tests import (
     NonSeekableWriter,
     RecordingSubscriber,
@@ -98,7 +99,7 @@ class TestDownload(BaseTransferManagerIn
                     future.cancel()
                     raise RuntimeError(
                         "Download transfer did not start after waiting for "
-                        "%s seconds." % timeout
+                        f"{timeout} seconds."
                     )
                 # Raise an exception which should cause the preceding
                 # download to cancel and exit quickly
@@ -115,9 +116,7 @@ class TestDownload(BaseTransferManagerIn
         self.assertLess(
             actual_time_to_exit,
             max_allowed_exit_time,
-            "Failed to exit under {}. Instead exited in {}.".format(
-                max_allowed_exit_time, actual_time_to_exit
-            ),
+            f"Failed to exit under {max_allowed_exit_time}. Instead exited in {actual_time_to_exit}.",
         )
 
         # Make sure the future was cancelled because of the KeyboardInterrupt
@@ -126,7 +125,7 @@ class TestDownload(BaseTransferManagerIn
 
         # Make sure the actual file and the temporary do not exist
         # by globbing for the file and any of its extensions
-        possible_matches = glob.glob('%s*' % download_path)
+        possible_matches = glob.glob(f'{download_path}*')
         self.assertEqual(possible_matches, [])
 
     @skip_if_using_serial_implementation(
@@ -174,9 +173,7 @@ class TestDownload(BaseTransferManagerIn
         self.assertLess(
             end_time - start_time,
             max_allowed_exit_time,
-            "Failed to exit under {}. Instead exited in {}.".format(
-                max_allowed_exit_time, end_time - start_time
-            ),
+            f"Failed to exit under {max_allowed_exit_time}. Instead exited in {end_time - start_time}.",
         )
 
         # Make sure at least one of the futures got cancelled
@@ -186,7 +183,7 @@ class TestDownload(BaseTransferManagerIn
 
         # For the transfer that did get cancelled, make sure the temporary
         # file got removed.
-        possible_matches = glob.glob('%s*' % future.meta.call_args.fileobj)
+        possible_matches = glob.glob(f'{future.meta.call_args.fileobj}*')
         self.assertEqual(possible_matches, [])
 
     def test_progress_subscribers_on_download(self):
@@ -284,5 +281,5 @@ class TestDownload(BaseTransferManagerIn
         except Exception as e:
             self.fail(
                 'Should have been able to download to /dev/null but received '
-                'following exception %s' % e
+                f'following exception {e}'
             )
diff -pruN 2.23.6-1/tests/integration/s3transfer/test_s3transfer.py 2.31.35-1/tests/integration/s3transfer/test_s3transfer.py
--- 2.23.6-1/tests/integration/s3transfer/test_s3transfer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/test_s3transfer.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,9 +18,9 @@ import string
 import tempfile
 import threading
 
+import s3transfer
 from botocore.client import Config
 
-import s3transfer
 from tests.integration.s3transfer import BaseTransferManagerIntegTest
 
 
@@ -31,9 +31,7 @@ def assert_files_equal(first, second):
     second_md5 = md5_checksum(second)
     if first_md5 != second_md5:
         raise AssertionError(
-            "Files are not equal: {}(md5={}) != {}(md5={})".format(
-                first, first_md5, second, second_md5
-            )
+            f"Files are not equal: {first}(md5={first_md5}) != {second}(md5={second_md5})"
         )
 
 
diff -pruN 2.23.6-1/tests/integration/s3transfer/test_upload.py 2.31.35-1/tests/integration/s3transfer/test_upload.py
--- 2.23.6-1/tests/integration/s3transfer/test_upload.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/s3transfer/test_upload.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,8 +16,8 @@ from concurrent.futures import Cancelled
 from io import BytesIO
 
 from botocore.config import Config
-
 from s3transfer.manager import TransferConfig
+
 from tests import (
     NonSeekableReader,
     RecordingSubscriber,
@@ -94,7 +94,7 @@ class TestUpload(BaseTransferManagerInte
                     future.cancel()
                     raise RuntimeError(
                         "Download transfer did not start after waiting for "
-                        "%s seconds." % timeout
+                        f"{timeout} seconds."
                     )
                 # Raise an exception which should cause the preceding
                 # download to cancel and exit quickly
@@ -111,9 +111,7 @@ class TestUpload(BaseTransferManagerInte
         self.assertLess(
             actual_time_to_exit,
             max_allowed_exit_time,
-            "Failed to exit under {}. Instead exited in {}.".format(
-                max_allowed_exit_time, actual_time_to_exit
-            ),
+            f"Failed to exit under {max_allowed_exit_time}. Instead exited in {actual_time_to_exit}.",
         )
 
         try:
@@ -175,9 +173,7 @@ class TestUpload(BaseTransferManagerInte
         self.assertLess(
             end_time - start_time,
             max_allowed_exit_time,
-            "Failed to exit under {}. Instead exited in {}.".format(
-                max_allowed_exit_time, end_time - start_time
-            ),
+            f"Failed to exit under {max_allowed_exit_time}. Instead exited in {end_time - start_time}.",
         )
 
         # Make sure at least one of the futures got cancelled
diff -pruN 2.23.6-1/tests/integration/test_assume_role.py 2.31.35-1/tests/integration/test_assume_role.py
--- 2.23.6-1/tests/integration/test_assume_role.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/test_assume_role.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import json
 import os
 import shutil
 import tempfile
-import json
 import time
 
-from botocore.session import Session
 from botocore.exceptions import ClientError
+from botocore.session import Session
 
-from awscli.testutils import unittest, aws, random_chars
+from awscli.testutils import aws, random_chars, unittest
 
 S3_READ_POLICY_ARN = 'arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess'
 
@@ -42,12 +42,10 @@ class TestAssumeRoleCredentials(unittest
             "Statement": [
                 {
                     "Effect": "Allow",
-                    "Principal": {
-                        "AWS": "arn:aws:iam::%s:root" % account_id
-                    },
-                    "Action": "sts:AssumeRole"
+                    "Principal": {"AWS": "arn:aws:iam::%s:root" % account_id},
+                    "Action": "sts:AssumeRole",
                 }
-            ]
+            ],
         }
 
     def tearDown(self):
@@ -60,15 +58,15 @@ class TestAssumeRoleCredentials(unittest
     def create_role(self, policy_document, policy_arn=None):
         name = self.random_name()
         response = self.iam.create_role(
-            RoleName=name,
-            AssumeRolePolicyDocument=json.dumps(policy_document)
+            RoleName=name, AssumeRolePolicyDocument=json.dumps(policy_document)
         )
         self.addCleanup(self.iam.delete_role, RoleName=name)
         if policy_arn:
             self.iam.attach_role_policy(RoleName=name, PolicyArn=policy_arn)
             self.addCleanup(
-                self.iam.detach_role_policy, RoleName=name,
-                PolicyArn=policy_arn
+                self.iam.detach_role_policy,
+                RoleName=name,
+                PolicyArn=policy_arn,
             )
         return response['Role']
 
@@ -78,13 +76,9 @@ class TestAssumeRoleCredentials(unittest
         self.addCleanup(self.iam.delete_user, UserName=name)
 
         for arn in policy_arns:
-            self.iam.attach_user_policy(
-                UserName=name,
-                PolicyArn=arn
-            )
+            self.iam.attach_user_policy(UserName=name, PolicyArn=arn)
             self.addCleanup(
-                self.iam.detach_user_policy,
-                UserName=name, PolicyArn=arn
+                self.iam.detach_user_policy, UserName=name, PolicyArn=arn
             )
 
         return user
@@ -93,19 +87,29 @@ class TestAssumeRoleCredentials(unittest
         creds = self.iam.create_access_key(UserName=user_name)['AccessKey']
         self.addCleanup(
             self.iam.delete_access_key,
-            UserName=user_name, AccessKeyId=creds['AccessKeyId']
+            UserName=user_name,
+            AccessKeyId=creds['AccessKeyId'],
         )
         return creds
 
-    def wait_for_assume_role(self, role_arn, access_key, secret_key,
-                             token=None, attempts=30, delay=10,
-                             num_success_needed=3):
+    def wait_for_assume_role(
+        self,
+        role_arn,
+        access_key,
+        secret_key,
+        token=None,
+        attempts=30,
+        delay=10,
+        num_success_needed=3,
+    ):
         # "Why not use the policy simulator?" you might ask. The answer is
         # that the policy simulator will return success far before you can
         # actually make the calls.
         client = self.parent_session.create_client(
-            'sts', aws_access_key_id=access_key,
-            aws_secret_access_key=secret_key, aws_session_token=token
+            'sts',
+            aws_access_key_id=access_key,
+            aws_secret_access_key=secret_key,
+            aws_session_token=token,
         )
         attempts_remaining = attempts
         role_session_name = random_chars(10)
@@ -113,7 +117,8 @@ class TestAssumeRoleCredentials(unittest
         while attempts_remaining > 0:
             try:
                 result = client.assume_role(
-                    RoleArn=role_arn, RoleSessionName=role_session_name)
+                    RoleArn=role_arn, RoleSessionName=role_session_name
+                )
                 num_success += 1
                 if num_success == num_success_needed:
                     return result['Credentials']
@@ -133,14 +138,13 @@ class TestAssumeRoleCredentials(unittest
                 {
                     "Effect": "Allow",
                     "Resource": role_arn,
-                    "Action": "sts:AssumeRole"
+                    "Action": "sts:AssumeRole",
                 }
-            ]
+            ],
         }
         name = self.random_name()
         response = self.iam.create_policy(
-            PolicyName=name,
-            PolicyDocument=json.dumps(policy_document)
+            PolicyName=name, PolicyDocument=json.dumps(policy_document)
         )
         self.addCleanup(
             self.iam.delete_policy, PolicyArn=response['Policy']['Arn']
@@ -188,8 +192,10 @@ class TestAssumeRoleCredentials(unittest
             'role_arn = %s\n'
         )
         config = config % (
-            user_creds['AccessKeyId'], user_creds['SecretAccessKey'],
-            middle_role['Arn'], final_role['Arn']
+            user_creds['AccessKeyId'],
+            user_creds['SecretAccessKey'],
+            middle_role['Arn'],
+            final_role['Arn'],
         )
         with open(self.config_file, 'w') as f:
             f.write(config)
diff -pruN 2.23.6-1/tests/integration/test_cli.py 2.31.35-1/tests/integration/test_cli.py
--- 2.23.6-1/tests/integration/test_cli.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/test_cli.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,19 +10,24 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import time
-import signal
 import os
-import tempfile
-import random
 import re
 import shutil
+import signal
+import tempfile
+import time
 
 import botocore.session
-from awscli.testutils import unittest, aws, BaseS3CLICommand
-from awscli.testutils import temporary_file
-from awscli.testutils import skip_if_windows
+
 from awscli.clidriver import create_clidriver
+from awscli.testutils import (
+    BaseS3CLICommand,
+    aws,
+    random_bucket_name,
+    skip_if_windows,
+    temporary_file,
+    unittest,
+)
 
 
 class TestBasicCommandFunctionality(unittest.TestCase):
@@ -33,11 +38,11 @@ class TestBasicCommandFunctionality(unit
     """
 
     def put_object(
-        self, 
-        bucket, 
-        key, 
-        content, 
-        extra_args=None, 
+        self,
+        bucket,
+        key,
+        content,
+        extra_args=None,
     ):
         session = botocore.session.get_session()
         client = session.create_client('s3', 'us-east-1')
@@ -45,10 +50,7 @@ class TestBasicCommandFunctionality(unit
         time.sleep(5)
         client.delete_public_access_block(Bucket=bucket)
         self.addCleanup(client.delete_bucket, Bucket=bucket)
-        call_args = {
-            'Bucket': bucket,
-            'Key': key, 'Body': content
-        }
+        call_args = {'Bucket': bucket, 'Key': key, 'Body': content}
         if extra_args is not None:
             call_args.update(extra_args)
         client.put_object(**call_args)
@@ -66,8 +68,7 @@ class TestBasicCommandFunctionality(unit
         p = aws('help')
         self.assertEqual(p.rc, 0)
         self.assertIn('AWS', p.stdout)
-        self.assertRegex(
-            p.stdout, r'The\s+AWS\s+Command\s+Line\s+Interface')
+        self.assertRegex(p.stdout, r'The\s+AWS\s+Command\s+Line\s+Interface')
 
     def test_service_help_output(self):
         p = aws('ec2 help')
@@ -82,15 +83,16 @@ class TestBasicCommandFunctionality(unit
         # For now we're making the test less strict about formatting, but
         # we eventually should update this test to check exactly for
         # 'The describe-instances operation'.
-        self.assertRegex(p.stdout, r'\s+Describes\s+the\s+specified\s+instances')
+        self.assertRegex(
+            p.stdout, r'\s+Describes\s+the\s+specified\s+instances'
+        )
 
     def test_topic_list_help_output(self):
         p = aws('help topics')
         self.assertEqual(p.rc, 0)
         self.assertRegex(p.stdout, r'\s+AWS\s+CLI\s+Topic\s+Guide')
         self.assertRegex(
-            p.stdout,
-            r'\s+This\s+is\s+the\s+AWS\s+CLI\s+Topic\s+Guide'
+            p.stdout, r'\s+This\s+is\s+the\s+AWS\s+CLI\s+Topic\s+Guide'
         )
 
     def test_topic_help_output(self):
@@ -98,8 +100,7 @@ class TestBasicCommandFunctionality(unit
         self.assertEqual(p.rc, 0)
         self.assertRegex(p.stdout, r'\s+AWS\s+CLI\s+Return\s+Codes')
         self.assertRegex(
-            p.stdout,
-            r'These\s+are\s+the\s+following\s+return\s+codes'
+            p.stdout, r'These\s+are\s+the\s+following\s+return\s+codes'
         )
 
     def test_operation_help_with_required_arg(self):
@@ -133,24 +134,30 @@ class TestBasicCommandFunctionality(unit
 
     def test_param_shorthand(self):
         p = aws(
-            'ec2 describe-instances --filters Name=instance-id,Values=i-123')
+            'ec2 describe-instances --filters Name=instance-id,Values=i-123'
+        )
         self.assertEqual(p.rc, 0)
         self.assertIn('Reservations', p.json)
 
     def test_param_json(self):
         p = aws(
             'ec2 describe-instances --filters '
-            '\'{"Name": "instance-id", "Values": ["i-123"]}\'')
+            '\'{"Name": "instance-id", "Values": ["i-123"]}\''
+        )
         self.assertEqual(p.rc, 0, p.stdout + p.stderr)
         self.assertIn('Reservations', p.json)
 
     def test_param_with_bad_json(self):
         p = aws(
             'ec2 describe-instances --filters '
-            '\'{"Name": "bad-filter", "Values": ["i-123"]}\'')
+            '\'{"Name": "bad-filter", "Values": ["i-123"]}\''
+        )
         self.assertEqual(p.rc, 254)
-        self.assertIn("The filter 'bad-filter' is invalid", p.stderr,
-                      "stdout: %s, stderr: %s" % (p.stdout, p.stderr))
+        self.assertIn(
+            "The filter 'bad-filter' is invalid",
+            p.stderr,
+            f"stdout: {p.stdout}, stderr: {p.stderr}",
+        )
 
     def test_param_with_file(self):
         d = tempfile.mkdtemp()
@@ -159,20 +166,21 @@ class TestBasicCommandFunctionality(unit
         with open(param_file, 'w') as f:
             f.write('[{"Name": "instance-id", "Values": ["i-123"]}]')
         self.addCleanup(os.remove, param_file)
-        p = aws('ec2 describe-instances --filters file://%s' % param_file)
+        p = aws(f'ec2 describe-instances --filters file://{param_file}')
         self.assertEqual(p.rc, 0)
         self.assertIn('Reservations', p.json)
 
     def test_streaming_output_operation(self):
         d = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, d)
-        bucket_name = 'clistream' + str(
-            int(time.time())) + str(random.randint(1, 100))
+        bucket_name = random_bucket_name('clistream')
 
-        self.put_object(bucket=bucket_name, key='foobar',
-                        content='foobar contents')
-        p = aws('s3api get-object --bucket %s --key foobar %s' % (
-            bucket_name, os.path.join(d, 'foobar')))
+        self.put_object(
+            bucket=bucket_name, key='foobar', content='foobar contents'
+        )
+        p = aws(
+            f's3api get-object --bucket {bucket_name} --key foobar {os.path.join(d, "foobar")}'
+        )
         self.assertEqual(p.rc, 0)
         with open(os.path.join(d, 'foobar')) as f:
             contents = f.read()
@@ -186,19 +194,26 @@ class TestBasicCommandFunctionality(unit
         env_vars['AWS_ACCESS_KEY_ID'] = 'foo'
         env_vars['AWS_SECRET_ACCESS_KEY'] = 'bar'
 
-        bucket_name = 'nosign' + str(
-            int(time.time())) + str(random.randint(1, 100))
-        self.put_object(bucket_name, 'foo', content='bar',
-                        extra_args={'ACL': 'public-read-write'})
+        bucket_name = random_bucket_name('nosign')
+        self.put_object(
+            bucket_name,
+            'foo',
+            content='bar',
+            extra_args={'ACL': 'public-read-write'},
+        )
 
-        p = aws('s3api get-object --bucket %s --key foo %s' % (
-            bucket_name, os.path.join(d, 'foo')), env_vars=env_vars)
+        p = aws(
+            f's3api get-object --bucket {bucket_name} --key foo {os.path.join(d, "foo")}',
+            env_vars=env_vars,
+        )
         # Should have credential issues.
         self.assertEqual(p.rc, 254)
 
-        p = aws('s3api get-object --bucket %s --key foo '
-                '%s --no-sign-request' % (bucket_name, os.path.join(d, 'foo')),
-                env_vars=env_vars)
+        p = aws(
+            f's3api get-object --bucket {bucket_name} --key foo '
+            f'{os.path.join(d, "foo")} --no-sign-request',
+            env_vars=env_vars,
+        )
 
         # Should be able to download the file when not signing.
         self.assertEqual(p.rc, 0)
@@ -210,15 +225,15 @@ class TestBasicCommandFunctionality(unit
     def test_no_paginate_arg(self):
         d = tempfile.mkdtemp()
         self.addCleanup(shutil.rmtree, d)
-        bucket_name = 'nopaginate' + str(
-            int(time.time())) + str(random.randint(1, 100))
+        bucket_name = random_bucket_name('nopaginate')
 
-        self.put_object(bucket=bucket_name, key='foobar',
-                        content='foobar contents')
-        p = aws('s3api list-objects --bucket %s --no-paginate' % bucket_name)
+        self.put_object(
+            bucket=bucket_name, key='foobar', content='foobar contents'
+        )
+        p = aws(f's3api list-objects --bucket {bucket_name} --no-paginate')
         self.assertEqual(p.rc, 0, p.stdout + p.stderr)
 
-        p = aws('s3api list-objects --bucket %s' % bucket_name)
+        p = aws(f's3api list-objects --bucket {bucket_name}')
         self.assertEqual(p.rc, 0, p.stdout + p.stderr)
 
     def test_top_level_options_debug(self):
@@ -233,24 +248,33 @@ class TestBasicCommandFunctionality(unit
 
     def test_help_usage_top_level(self):
         p = aws('')
-        self.assertIn('usage: aws [options] <command> '
-                      '<subcommand> [<subcommand> ...] [parameters]', p.stderr)
-        self.assertIn('aws: error', p.stderr)
+        self.assertIn(
+            'usage: aws [options] <command> '
+            '<subcommand> [<subcommand> ...] [parameters]',
+            p.stderr,
+        )
+        self.assertIn('aws: [ERROR]', p.stderr)
 
     def test_help_usage_service_level(self):
         p = aws('ec2')
-        self.assertIn('usage: aws [options] <command> '
-                      '<subcommand> [<subcommand> ...] [parameters]', p.stderr)
-        # python3: aws: error: the following arguments are required: operation
-        # python2: aws: error: too few arguments
+        self.assertIn(
+            'usage: aws [options] <command> '
+            '<subcommand> [<subcommand> ...] [parameters]',
+            p.stderr,
+        )
+        # python3: aws: [ERROR]: the following arguments are required: operation
+        # python2: aws: [ERROR]: too few arguments
         # We don't care too much about the specific error message, as long
         # as it says we have a parse error.
-        self.assertIn('aws: error', p.stderr)
+        self.assertIn('aws: [ERROR]', p.stderr)
 
     def test_help_usage_operation_level(self):
         p = aws('ec2 start-instances')
-        self.assertIn('usage: aws [options] <command> '
-                      '<subcommand> [<subcommand> ...] [parameters]', p.stderr)
+        self.assertIn(
+            'usage: aws [options] <command> '
+            '<subcommand> [<subcommand> ...] [parameters]',
+            p.stderr,
+        )
 
     def test_unknown_argument(self):
         p = aws('ec2 describe-instances --filterss')
@@ -279,21 +303,19 @@ class TestBasicCommandFunctionality(unit
         # change based on the system they are invoked.
         # Example: "aws-cli/2.15.45 Python/3.11.3 Darwin/22.6.0 source/x86_64"
         user_agent_regex = (
-            r'aws-cli/\d+\.\d+\.\d+ ' # aws-cli/2.15.45
-            r'Python/\d+\.\d+\.\d+ ' # Python/3.11.3
-            r'.+/.+? ' # Darwin/22.6.0
-            r'.+/.+\n' # source/x86_64
-        )
-        self.assertTrue(
-            re.fullmatch(user_agent_regex, version_output)
+            r'aws-cli/\d+\.\d+\.\d+ '  # aws-cli/2.15.45
+            r'Python/\d+\.\d+\.\d+ '  # Python/3.11.3
+            r'.+/.+? '  # Darwin/22.6.0
+            r'.+/.+\n'  # source/x86_64
         )
+        self.assertTrue(re.fullmatch(user_agent_regex, version_output))
 
     def test_version_with_exec_env(self):
         base_env_vars = os.environ.copy()
         base_env_vars['AWS_EXECUTION_ENV'] = 'an_execution_env'
         p = aws('--version', env_vars=base_env_vars)
         version_output = p.stdout
-        self.assertTrue(f' exec-env/an_execution_env' in version_output)
+        self.assertTrue(' exec-env/an_execution_env' in version_output)
 
     def test_traceback_printed_when_debug_on(self):
         p = aws('ec2 describe-instances --filters BADKEY=foo --debug')
@@ -408,16 +430,18 @@ class TestCommandLineage(unittest.TestCa
 # the BaseS3CLICommand has a lot of utility functions that help
 # with this.
 class TestGlobalArgs(BaseS3CLICommand):
-
     def test_endpoint_url(self):
-        p = aws('s3api list-objects --bucket dnscompat '
-                '--endpoint-url http://localhost:51515 '
-                '--debug')
+        p = aws(
+            's3api list-objects --bucket dnscompat '
+            '--endpoint-url http://localhost:51515 '
+            '--debug'
+        )
         debug_logs = p.stderr
         original_hostname = 'dnscompat.s3.amazonaws.com'
         expected = 'localhost'
-        self.assertNotIn(original_hostname, debug_logs,
-                         '--endpoint-url is being ignored.')
+        self.assertNotIn(
+            original_hostname, debug_logs, '--endpoint-url is being ignored.'
+        )
         self.assertIn(expected, debug_logs)
 
     def test_no_pagination(self):
@@ -425,8 +449,10 @@ class TestGlobalArgs(BaseS3CLICommand):
         self.put_object(bucket_name, 'foo.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo2.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo3.txt', contents=b'bar')
-        p = aws('s3api list-objects --bucket %s '
-                '--no-paginate --output json' % bucket_name)
+        p = aws(
+            f's3api list-objects --bucket {bucket_name} '
+            '--no-paginate --output json'
+        )
         # A really simple way to check that --no-paginate was
         # honored is to see if we have all the mirrored input
         # arguments in the response json.  These normally aren't
@@ -441,8 +467,10 @@ class TestGlobalArgs(BaseS3CLICommand):
         self.put_object(bucket_name, 'foo.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo2.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo3.txt', contents=b'bar')
-        p = aws('s3api list-objects --bucket %s '
-                '--max-keys 1 --no-paginate --output json' % bucket_name)
+        p = aws(
+            f's3api list-objects --bucket {bucket_name} '
+            '--max-keys 1 --no-paginate --output json'
+        )
         self.assert_no_errors(p)
         response_json = p.json
         self.assertEqual(len(response_json['Contents']), 1)
@@ -452,8 +480,10 @@ class TestGlobalArgs(BaseS3CLICommand):
         self.put_object(bucket_name, 'foo.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo2.txt', contents=b'bar')
         self.put_object(bucket_name, 'foo3.txt', contents=b'bar')
-        p = aws('s3api list-objects --bucket %s '
-                '--max-items 1 --output json' % bucket_name)
+        p = aws(
+            f's3api list-objects --bucket {bucket_name} '
+            '--max-items 1 --output json'
+        )
         self.assert_no_errors(p)
         response_json = p.json
         self.assertEqual(len(response_json['Contents']), 1)
@@ -461,31 +491,41 @@ class TestGlobalArgs(BaseS3CLICommand):
     def test_query(self):
         bucket_name = self.create_bucket()
         self.put_object(bucket_name, 'foo.txt', contents=b'bar')
-        p = aws('s3api list-objects --bucket %s '
-                '--query Contents[].Key --output json' % bucket_name)
+        p = aws(
+            f's3api list-objects --bucket {bucket_name} '
+            '--query Contents[].Key --output json'
+        )
         self.assert_no_errors(p)
         response_json = p.json
         self.assertEqual(response_json, ['foo.txt'])
 
     def test_no_sign_requests(self):
         bucket_name = self.create_bucket()
-        self.put_object(bucket_name, 'public', contents=b'bar',
-                        extra_args={'ACL': 'public-read'})
+        self.put_object(
+            bucket_name,
+            'public',
+            contents=b'bar',
+            extra_args={'ACL': 'public-read'},
+        )
         self.put_object(bucket_name, 'private', contents=b'bar')
         env = os.environ.copy()
         # Set the env vars to bad values so if we do actually
         # try to sign the request, we'll get an auth error.
         env['AWS_ACCESS_KEY_ID'] = 'foo'
         env['AWS_SECRET_ACCESS_KEY'] = 'bar'
-        p = aws('s3api head-object --bucket %s --key public --no-sign-request'
-                % bucket_name, env_vars=env)
+        p = aws(
+            f's3api head-object --bucket {bucket_name} --key public --no-sign-request',
+            env_vars=env,
+        )
         self.assert_no_errors(p)
         self.assertIn('ETag', p.json)
 
         # Should fail because we're not signing the request but the object is
         # private.
-        p = aws('s3api head-object --bucket %s --key private --no-sign-request'
-                % bucket_name, env_vars=env)
+        p = aws(
+            f's3api head-object --bucket {bucket_name} --key private --no-sign-request',
+            env_vars=env,
+        )
         self.assertEqual(p.rc, 254)
 
     def test_profile_arg_has_precedence_over_env_vars(self):
@@ -510,8 +550,9 @@ class TestGlobalArgs(BaseS3CLICommand):
                 'aws_secret_access_key=prob\n'
             )
             f.flush()
-            p = aws('configure list --profile from_argument',
-                    env_vars=env_vars)
+            p = aws(
+                'configure list --profile from_argument', env_vars=env_vars
+            )
             # 1. We should see the profile name being set.
             self.assertIn('from_argument', p.stdout)
             # 2. The creds should be proa/prob, which come
@@ -542,8 +583,9 @@ class TestGlobalArgs(BaseS3CLICommand):
             env_vars['AWS_PROFILE'] = 'from_env_var'
             # If we specify the --profile argument, that
             # value should win over the AWS_PROFILE env var.
-            p = aws('configure list --profile from_argument',
-                    env_vars=env_vars)
+            p = aws(
+                'configure list --profile from_argument', env_vars=env_vars
+            )
             # 1. We should see the profile name being set.
             self.assertIn('from_argument', p.stdout)
             # 2. The creds should be profa/profb, which come
diff -pruN 2.23.6-1/tests/integration/test_ec2.py 2.31.35-1/tests/integration/test_ec2.py
--- 2.23.6-1/tests/integration/test_ec2.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/test_ec2.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, aws
+from awscli.testutils import aws, unittest
 
 
 class TestDescribeInstances(unittest.TestCase):
diff -pruN 2.23.6-1/tests/integration/test_smoke.py 2.31.35-1/tests/integration/test_smoke.py
--- 2.23.6-1/tests/integration/test_smoke.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/integration/test_smoke.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import re
+import json
 import os
+import re
 import time
-import json
 
 import pytest
 
@@ -21,7 +21,9 @@ from awscli.testutils import aws
 
 INTEG_TESTS_DIR = os.path.dirname(os.path.abspath(__file__))
 
-with open(os.path.join(INTEG_TESTS_DIR, "smoke-tests.json"), "r") as definitions_file:
+with open(
+    os.path.join(INTEG_TESTS_DIR, "smoke-tests.json")
+) as definitions_file:
     SMOKE_TESTS = json.load(definitions_file)
 COMMANDS = [" ".join(cmd) for cmd in SMOKE_TESTS["Commands"]]
 ERROR_COMMANDS = [" ".join(cmd) for cmd in SMOKE_TESTS["ErrorCommands"]]
@@ -55,8 +57,9 @@ def test_display_error_message(cmd):
     result = _aws(cmd, target_rc=254)
     assert result.rc == 254
     error_message = re.compile(
-        r'An error occurred \(.+\) when calling the \w+ operation: \w+')
-    match = error_message.search(result.stderr)
-    assert match, (
-        f'Error message was not displayed for command "{cmd}": {result.stderr}'
+        r'An error occurred \(.+\) when calling the \w+ operation: \w+'
     )
+    match = error_message.search(result.stderr)
+    assert (
+        match
+    ), f'Error message was not displayed for command "{cmd}": {result.stderr}'
diff -pruN 2.23.6-1/tests/markers.py 2.31.35-1/tests/markers.py
--- 2.23.6-1/tests/markers.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/markers.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,12 @@
+import platform
+
+import pytest
+
+skip_if_windows = pytest.mark.skipif(
+    platform.system() not in ['Darwin', 'Linux'],
+    reason="This test does not run on windows.",
+)
+if_windows = pytest.mark.skipif(
+    platform.system() in ['Darwin', 'Linux'],
+    reason="This test only runs on windows.",
+)
diff -pruN 2.23.6-1/tests/unit/autocomplete/__init__.py 2.31.35-1/tests/unit/autocomplete/__init__.py
--- 2.23.6-1/tests/unit/autocomplete/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -49,8 +49,9 @@ class InMemoryIndex(model.ModelIndex):
 
     def arg_names(self, lineage, command_name, positional_arg=False):
         parent = '.'.join(lineage)
-        arg_names = self.index['arg_names'].get(parent, {}).get(
-            command_name, [])
+        arg_names = (
+            self.index['arg_names'].get(parent, {}).get(command_name, [])
+        )
         filtered_arg_names = []
         for arg_name in arg_names:
             arg_data = self.get_argument_data(lineage, command_name, arg_name)
@@ -60,15 +61,18 @@ class InMemoryIndex(model.ModelIndex):
 
     def get_argument_data(self, lineage, command_name, arg_name):
         parent = '.'.join(lineage)
-        arg_data = self.index['arg_data'].get(parent, {}).get(
-            command_name, {}).get(arg_name)
+        arg_data = (
+            self.index['arg_data']
+            .get(parent, {})
+            .get(command_name, {})
+            .get(arg_name)
+        )
         if arg_data is not None:
             return model.CLIArgument(*arg_data)
 
     def get_global_arg_data(self, lineage=[], command_name='aws'):
         parent = '.'.join(lineage)
-        arg_data = self.index['arg_data'].get(parent, {}).get(
-            command_name, {})
+        arg_data = self.index['arg_data'].get(parent, {}).get(command_name, {})
         results = []
         for _, value in arg_data.items():
             results.append(model.CLIArgument(*value))
diff -pruN 2.23.6-1/tests/unit/autocomplete/local/test_fetcher.py 2.31.35-1/tests/unit/autocomplete/local/test_fetcher.py
--- 2.23.6-1/tests/unit/autocomplete/local/test_fetcher.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/local/test_fetcher.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest, mock
-
 from awscli.autocomplete.local.fetcher import CliDriverFetcher
+from awscli.testutils import mock, unittest
 
 
 class FakeDriver:
@@ -45,7 +44,8 @@ class TestCliDriverFetcher(unittest.Test
 
     def test_get_argument_documentation(self):
         help_text = self.fetcher.get_argument_documentation(
-            ['aws', 'ec2'], 'describe-instances', 'instance-ids')
+            ['aws', 'ec2'], 'describe-instances', 'instance-ids'
+        )
         self.assertEqual(help_text, 'arg doc')
 
     def test_get_global_arg_documentation(self):
@@ -54,5 +54,6 @@ class TestCliDriverFetcher(unittest.Test
 
     def test_get_operational_model(self):
         operational_model = self.fetcher.get_operation_model(
-            ['aws', 'ec2'], 'describe-instances')
+            ['aws', 'ec2'], 'describe-instances'
+        )
         self.assertEqual(operational_model, 'fake_operational_model')
diff -pruN 2.23.6-1/tests/unit/autocomplete/local/test_indexer.py 2.31.35-1/tests/unit/autocomplete/local/test_indexer.py
--- 2.23.6-1/tests/unit/autocomplete/local/test_indexer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/local/test_indexer.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,13 @@
 # language governing permissions and limitations under the License.
 import os
 import shutil
-
-from awscli.testutils import unittest, mock
-from awscli.autocomplete import db
-from awscli.autocomplete.local import indexer, model
 import tempfile
 
 from botocore.session import Session
 
+from awscli.autocomplete import db
+from awscli.autocomplete.local import indexer, model
+from awscli.testutils import mock, unittest
 
 # Quick note about these tests.  sqlite3 is used as the data store for the
 # index cache.  When testing this we have two options.  We can either invoke
@@ -38,7 +37,8 @@ from botocore.session import Session
 # contents of the index.  Once this schema has stabilized we could go in and
 # write tests that work at the sqlite3 layer.
 
-class DummyCommand(object):
+
+class DummyCommand:
     def __init__(self, command_name, subcommand_table=None, arg_table=None):
         self.name = command_name
         if subcommand_table is None:
@@ -56,9 +56,16 @@ class DummyCommand(object):
         return help_command
 
 
-class DummyArg(object):
-    def __init__(self, name, cli_type_name='string', nargs=None,
-                 positional_arg=False, required=False, help_text=''):
+class DummyArg:
+    def __init__(
+        self,
+        name,
+        cli_type_name='string',
+        nargs=None,
+        positional_arg=False,
+        required=False,
+        help_text='',
+    ):
         self.name = name
         self.cli_type_name = cli_type_name
         self.nargs = nargs
@@ -87,20 +94,21 @@ class BaseIndexerTest(unittest.TestCase)
                             arg_table={
                                 'instance-ids': DummyArg('instance-ids'),
                                 'filters': DummyArg(
-                                    'filters', 'list', nargs='+'),
-                            }
+                                    'filters', 'list', nargs='+'
+                                ),
+                            },
                         ),
                         'run-instances': DummyCommand('run-instances'),
-                    }
+                    },
                 ),
                 's3': DummyCommand(
                     command_name='s3',
                     subcommand_table={
                         'list-objects': DummyCommand('list-objects'),
                         'put-object': DummyCommand('put-object'),
-                    }
-                )
-            }
+                    },
+                ),
+            },
         )
         # Ideally we just use ':memory:', but that's for
         # a specific sqlite3 connection so we'd have to
@@ -126,8 +134,7 @@ class TestCanRetrieveCommands(BaseIndexe
     def test_can_retrieve_top_level_commands(self):
         self.indexer.generate_index(self.aws_command)
         self.assertEqual(
-            set(self.query.command_names(lineage=['aws'])),
-            set(['ec2', 's3'])
+            set(self.query.command_names(lineage=['aws'])), set(['ec2', 's3'])
         )
 
     def test_can_retrieve_operation_names(self):
@@ -147,8 +154,11 @@ class TestCanRetrieveCommands(BaseIndexe
     def test_can_retrieve_service_params(self):
         self.indexer.generate_index(self.aws_command)
         self.assertEqual(
-            set(self.query.arg_names(lineage=['aws', 'ec2'],
-                                     command_name='describe-instances')),
+            set(
+                self.query.arg_names(
+                    lineage=['aws', 'ec2'], command_name='describe-instances'
+                )
+            ),
             set(['instance-ids', 'filters']),
         )
 
@@ -163,8 +173,11 @@ class TestCanRetrieveCommands(BaseIndexe
         # 's3' version should have no params because we didn't add an arg
         # table.
         self.assertEqual(
-            set(self.query.arg_names(lineage=['aws', 's3'],
-                                     command_name='describe-instances')),
+            set(
+                self.query.arg_names(
+                    lineage=['aws', 's3'], command_name='describe-instances'
+                )
+            ),
             set([]),
         )
 
@@ -172,8 +185,7 @@ class TestCanRetrieveCommands(BaseIndexe
         # Service commands don't have arguments.
         self.indexer.generate_index(self.aws_command)
         self.assertEqual(
-            set(self.query.arg_names(lineage=['aws'],
-                                     command_name='ec2')),
+            set(self.query.arg_names(lineage=['aws'], command_name='ec2')),
             set([]),
         )
 
@@ -213,7 +225,6 @@ class TestCanRetrieveCommands(BaseIndexe
 
 
 class TestCanCreateModelIndexer(unittest.TestCase):
-
     def test_can_create_model_indexer(self):
         index = indexer.create_model_indexer('/tmp/a/b/c/d')
         self.assertIsInstance(index, indexer.ModelIndexer)
@@ -227,9 +238,9 @@ class TestGeneratesIndex(BaseIndexerTest
     def test_generates_indexes_for_tables(self):
         self.indexer.generate_index(self.aws_command)
         index_info = 'SELECT name from pragma_index_info("%s");'
-        index = self.db_conn.execute(
-            index_info % 'parent_index').fetchall()
+        index = self.db_conn.execute(index_info % 'parent_index').fetchall()
         self.assertEqual([('parent',)], index)
         index = self.db_conn.execute(
-            index_info % 'parent_command_index').fetchall()
+            index_info % 'parent_command_index'
+        ).fetchall()
         self.assertEqual([('parent',), ('command',)], index)
diff -pruN 2.23.6-1/tests/unit/autocomplete/serverside/custom_completers/ddb/test_autocomplete.py 2.31.35-1/tests/unit/autocomplete/serverside/custom_completers/ddb/test_autocomplete.py
--- 2.23.6-1/tests/unit/autocomplete/serverside/custom_completers/ddb/test_autocomplete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/serverside/custom_completers/ddb/test_autocomplete.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,53 +10,83 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-from awscli.autocomplete.completer import CompletionResult
 from awscli.autocomplete import parser
-from awscli.autocomplete.serverside.custom_completers.ddb.autocomplete import TableNameCompleter
+from awscli.autocomplete.completer import CompletionResult
+from awscli.autocomplete.serverside.custom_completers.ddb.autocomplete import (
+    TableNameCompleter,
+)
+from awscli.testutils import mock, unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
 class TestTableNameCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('ddb', None)],
-                'aws.ddb': [('put', None), ('select', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'profile'],
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [('ddb', None)],
+                    'aws.ddb': [('put', None), ('select', None)],
                 },
-                'aws.ddb': {
-                    'put': ['table_name'],
-                    'select': ['table_name']
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'profile': ('profile', 'string', 'aws', '',
-                                         None, False, False),
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                    }
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'profile'],
+                    },
+                    'aws.ddb': {
+                        'put': ['table_name'],
+                        'select': ['table_name'],
+                    },
                 },
-                'aws.ddb': {
-                    'put': {
-                        'table_name': (
-                            'table_name', 'string',
-                            'put', 'aws.ddb.', None, True, False),
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'profile': (
+                                'profile',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     },
-                    'select': {
-                        'table_name': (
-                            'table_name', 'string',
-                            'select', 'aws.ddb.', None, True, False),
+                    'aws.ddb': {
+                        'put': {
+                            'table_name': (
+                                'table_name',
+                                'string',
+                                'put',
+                                'aws.ddb.',
+                                None,
+                                True,
+                                False,
+                            ),
+                        },
+                        'select': {
+                            'table_name': (
+                                'table_name',
+                                'string',
+                                'select',
+                                'aws.ddb.',
+                                None,
+                                True,
+                                False,
+                            ),
+                        },
                     },
-                }
+                },
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.mock_client = mock.Mock()
         self.mock_create_client = mock.Mock()
@@ -65,51 +95,38 @@ class TestTableNameCompleter(unittest.Te
 
     def test_complete_table_name(self):
         self.mock_client.list_tables.return_value = {
-            'TableNames': [
-                'tablename',
-                'mytable'
-            ]
+            'TableNames': ['tablename', 'mytable']
         }
         parsed = self.parser.parse('aws ddb select ')
         results = self.completer.complete(parsed)
         self.assertEqual(
             results,
-            [CompletionResult('tablename', 0),
-             CompletionResult('mytable', 0)]
+            [CompletionResult('tablename', 0), CompletionResult('mytable', 0)],
         )
 
     def test_complete_table_name_with_put(self):
         self.mock_client.list_tables.return_value = {
-            'TableNames': [
-                'tablename',
-                'mytable'
-            ]
+            'TableNames': ['tablename', 'mytable']
         }
         parsed = self.parser.parse('aws ddb put ')
         results = self.completer.complete(parsed)
         self.assertEqual(
             results,
-            [CompletionResult('tablename', 0),
-             CompletionResult('mytable', 0)]
+            [CompletionResult('tablename', 0), CompletionResult('mytable', 0)],
         )
 
     def test_complete_group_name_filters_startswith(self):
         self.mock_client.list_tables.return_value = {
-            'TableNames': [
-                'tablename',
-                'mytable'
-            ]
+            'TableNames': ['tablename', 'mytable']
         }
         parsed = self.parser.parse('aws ddb select my')
         results = self.completer.complete(parsed)
-        self.assertEqual(
-            results,
-            [CompletionResult('mytable', -2)]
-        )
+        self.assertEqual(results, [CompletionResult('mytable', -2)])
 
     def test_complete_group_name_handles_errors(self):
         self.mock_client.list_tables.side_effect = Exception(
-            "Something went wrong.")
+            "Something went wrong."
+        )
         parsed = self.parser.parse('aws ddb select ')
         results = self.completer.complete(parsed)
         self.assertEqual(results, [])
@@ -117,7 +134,9 @@ class TestTableNameCompleter(unittest.Te
     def test_client_created_with_region_and_profiles_from_parsed(self):
         self.mock_client.list_tables.return_value = {'TableNames': []}
         parsed = self.parser.parse(
-            'aws --profile foo --region us-west-2 ddb select ')
+            'aws --profile foo --region us-west-2 ddb select '
+        )
         self.completer.complete(parsed)
         self.mock_create_client.create_client.assert_called_with(
-            'dynamodb', parsed_profile='foo', parsed_region='us-west-2')
+            'dynamodb', parsed_profile='foo', parsed_region='us-west-2'
+        )
diff -pruN 2.23.6-1/tests/unit/autocomplete/serverside/custom_completers/logs/test_autocomplete.py 2.31.35-1/tests/unit/autocomplete/serverside/custom_completers/logs/test_autocomplete.py
--- 2.23.6-1/tests/unit/autocomplete/serverside/custom_completers/logs/test_autocomplete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/serverside/custom_completers/logs/test_autocomplete.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,47 +10,71 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-from awscli.autocomplete.completer import CompletionResult
 from awscli.autocomplete import parser
-from awscli.autocomplete.serverside.custom_completers.logs.autocomplete import GroupNameCompleter
+from awscli.autocomplete.completer import CompletionResult
+from awscli.autocomplete.serverside.custom_completers.logs.autocomplete import (
+    GroupNameCompleter,
+)
+from awscli.testutils import mock, unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
 class TestGroupNameCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('logs', None)],
-                'aws.logs': [('tail', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'profile'],
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [('logs', None)],
+                    'aws.logs': [('tail', None)],
                 },
-                'aws.logs': {
-                    'tail': ['group_name'],
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'profile': ('profile', 'string', 'aws', '',
-                                         None, False, False),
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                    }
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'profile'],
+                    },
+                    'aws.logs': {
+                        'tail': ['group_name'],
+                    },
                 },
-                'aws.logs': {
-                    'tail': {
-                        'group_name': (
-                            'group_name', 'string',
-                            'tail', 'aws.logs.', None, True, False),
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'profile': (
+                                'profile',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.logs': {
+                        'tail': {
+                            'group_name': (
+                                'group_name',
+                                'string',
+                                'tail',
+                                'aws.logs.',
+                                None,
+                                True,
+                                False,
+                            ),
+                        },
                     },
-                }
+                },
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.mock_client = mock.Mock()
         self.mock_create_client = mock.Mock()
@@ -68,8 +92,7 @@ class TestGroupNameCompleter(unittest.Te
         results = self.completer.complete(parsed)
         self.assertEqual(
             results,
-            [CompletionResult('group', 0),
-             CompletionResult('mygroup', 0)]
+            [CompletionResult('group', 0), CompletionResult('mygroup', 0)],
         )
 
     def test_complete_group_name_filters_startswith(self):
@@ -81,14 +104,12 @@ class TestGroupNameCompleter(unittest.Te
         }
         parsed = self.parser.parse('aws logs tail my')
         results = self.completer.complete(parsed)
-        self.assertEqual(
-            results,
-            [CompletionResult('mygroup', -2)]
-        )
+        self.assertEqual(results, [CompletionResult('mygroup', -2)])
 
     def test_complete_group_name_handles_errors(self):
         self.mock_client.describe_log_groups.side_effect = Exception(
-            "Something went wrong.")
+            "Something went wrong."
+        )
         parsed = self.parser.parse('aws logs tail ')
         results = self.completer.complete(parsed)
         self.assertEqual(results, [])
@@ -96,7 +117,9 @@ class TestGroupNameCompleter(unittest.Te
     def test_client_created_with_region_and_profiles_from_parsed(self):
         self.mock_client.describe_log_groups.return_value = {'logGroups': []}
         parsed = self.parser.parse(
-            'aws --profile foo --region us-west-2 logs tail ')
+            'aws --profile foo --region us-west-2 logs tail '
+        )
         self.completer.complete(parsed)
         self.mock_create_client.create_client.assert_called_with(
-            'logs', parsed_profile='foo', parsed_region='us-west-2')
+            'logs', parsed_profile='foo', parsed_region='us-west-2'
+        )
diff -pruN 2.23.6-1/tests/unit/autocomplete/serverside/test_servercomp.py 2.31.35-1/tests/unit/autocomplete/serverside/test_servercomp.py
--- 2.23.6-1/tests/unit/autocomplete/serverside/test_servercomp.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/serverside/test_servercomp.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-from awscli.autocomplete.serverside.servercomp import ServerSideCompleter
-from awscli.autocomplete.serverside.servercomp import LazyClientCreator
-from awscli.autocomplete.completer import CompletionResult
+import botocore.client
+
 from awscli.autocomplete import parser
+from awscli.autocomplete.completer import CompletionResult
+from awscli.autocomplete.serverside.servercomp import (
+    LazyClientCreator,
+    ServerSideCompleter,
+)
+from awscli.testutils import mock, unittest
 from tests.unit.autocomplete import InMemoryIndex
 
-import botocore.client
-
 
-class FakeCompletionLookup(object):
+class FakeCompletionLookup:
     def __init__(self, completion_data):
         self.completion_data = completion_data
 
@@ -34,57 +36,95 @@ class FakeCompletionLookup(object):
 
 class TestServerSideAutocompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('ec2', None), ('iam', None), ('s3', None)],
-                'aws.iam': [
-                    ('delete-user-policy', None),
-                    ('delete-user', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'endpoint-url', 'profile'],
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [('ec2', None), ('iam', None), ('s3', None)],
+                    'aws.iam': [
+                        ('delete-user-policy', None),
+                        ('delete-user', None),
+                    ],
                 },
-                'aws.iam': {
-                    'delete-user-policy': ['policy-name'],
-                    'delete-user': ['user-name'],
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'endpoint-url': ('endpoint-url', 'string', 'aws', '',
-                                         None, False, False),
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                        'profile': ('profile', 'string', 'aws', '', None, False,
-                                   False),
-                    }
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'endpoint-url', 'profile'],
+                    },
+                    'aws.iam': {
+                        'delete-user-policy': ['policy-name'],
+                        'delete-user': ['user-name'],
+                    },
                 },
-                'aws.iam': {
-                    'delete-user-policy': {
-                        'policy-name': (
-                            'policy-name', 'string', 'delete-user-policy',
-                            'aws.iam.', None, False, False),
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'endpoint-url': (
+                                'endpoint-url',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'profile': (
+                                'profile',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     },
-                    'delete-user': {
-                        'user-name': (
-                            'user-name', 'string', 'delete-user', 'aws.iam.',
-                            None, False, False),
-                    }
-                }
+                    'aws.iam': {
+                        'delete-user-policy': {
+                            'policy-name': (
+                                'policy-name',
+                                'string',
+                                'delete-user-policy',
+                                'aws.iam.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        },
+                        'delete-user': {
+                            'user-name': (
+                                'user-name',
+                                'string',
+                                'delete-user',
+                                'aws.iam.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        },
+                    },
+                },
             }
-        })
+        )
         key = (('aws', 'iam'), 'delete-user-policy', 'policy-name')
         self.completion_data = {
             key: {
-                'completions': [{
-                    "parameters": {},
-                    "service": "iam",
-                    "operation": "list_policies",
-                    "jp_expr": "Policies[].PolicyName",
-                }]
+                'completions': [
+                    {
+                        "parameters": {},
+                        "service": "iam",
+                        "operation": "list_policies",
+                        "jp_expr": "Policies[].PolicyName",
+                    }
+                ]
             }
         }
         self.parser = parser.CLIParser(self.index)
@@ -92,8 +132,9 @@ class TestServerSideAutocompleter(unitte
         self.mock_create_client = mock.Mock()
         self.mock_create_client.create_client.return_value = self.mock_client
         self.completion_lookup = FakeCompletionLookup(self.completion_data)
-        self.completer = ServerSideCompleter(self.completion_lookup,
-                                             self.mock_create_client)
+        self.completer = ServerSideCompleter(
+            self.completion_lookup, self.mock_create_client
+        )
 
     def test_does_not_complete_if_unparsed_items(self):
         parsed = self.parser.parse('aws foo ')
@@ -113,35 +154,46 @@ class TestServerSideAutocompleter(unitte
 
     def test_can_prefix_match_results(self):
         self.mock_client.list_policies.return_value = {
-            'Policies': [{'PolicyName': 'a1'}, {'PolicyName': 'b1'},
-                         {'PolicyName': 'a2'}, {'PolicyName': 'b2'}],
+            'Policies': [
+                {'PolicyName': 'a1'},
+                {'PolicyName': 'b1'},
+                {'PolicyName': 'a2'},
+                {'PolicyName': 'b2'},
+            ],
         }
         parsed = self.parser.parse(
-            'aws iam delete-user-policy --policy-name a')
+            'aws iam delete-user-policy --policy-name a'
+        )
         results = self.completer.complete(parsed)
         self.assertEqual(
-            results,
-            [CompletionResult('a1', -1), CompletionResult('a2', -1)]
+            results, [CompletionResult('a1', -1), CompletionResult('a2', -1)]
         )
 
     def test_returns_all_results_when_current_fragment_empty(self):
         self.mock_client.list_policies.return_value = {
-            'Policies': [{'PolicyName': 'a1'}, {'PolicyName': 'b1'},
-                         {'PolicyName': 'a2'}, {'PolicyName': 'b2'}],
+            'Policies': [
+                {'PolicyName': 'a1'},
+                {'PolicyName': 'b1'},
+                {'PolicyName': 'a2'},
+                {'PolicyName': 'b2'},
+            ],
         }
         parsed = self.parser.parse('aws iam delete-user-policy --policy-name ')
         results = self.completer.complete(parsed)
         self.assertEqual(
             results,
-            [CompletionResult('a1', 0),
-             CompletionResult('b1', 0),
-             CompletionResult('a2', 0),
-             CompletionResult('b2', 0)],
+            [
+                CompletionResult('a1', 0),
+                CompletionResult('b1', 0),
+                CompletionResult('a2', 0),
+                CompletionResult('b2', 0),
+            ],
         )
 
     def test_returns_empty_list_on_client_error(self):
         self.mock_client.list_policies.side_effect = Exception(
-            "Something went wrong.")
+            "Something went wrong."
+        )
         parsed = self.parser.parse('aws iam delete-user-policy --policy-name ')
         results = self.completer.complete(parsed)
         self.assertEqual(results, [])
@@ -155,9 +207,11 @@ class TestServerSideAutocompleter(unitte
         self.assertEqual(results, [])
 
     def test_region_and_profile_passed_to_create_client(self):
-        parsed = self.parser.parse('aws iam delete-user-policy '
-                                   '--region us-west-2 --profile profile1 '
-                                   '--policy-name ')
+        parsed = self.parser.parse(
+            'aws iam delete-user-policy '
+            '--region us-west-2 --profile profile1 '
+            '--policy-name '
+        )
         self.completer.complete(parsed)
         self.mock_create_client.create_client.assert_called_with(
             'iam', parsed_profile='profile1', parsed_region='us-west-2'
@@ -167,16 +221,22 @@ class TestServerSideAutocompleter(unitte
 class TestLazyClientCreator(unittest.TestCase):
     def test_can_create_client(self):
         creator = LazyClientCreator()
-        client = creator.create_client('iam', aws_access_key_id='foo',
-                                       aws_secret_access_key='bar',
-                                       region_name='us-west-2')
+        client = creator.create_client(
+            'iam',
+            aws_access_key_id='foo',
+            aws_secret_access_key='bar',
+            region_name='us-west-2',
+        )
         self.assertIsInstance(client, botocore.client.BaseClient)
         # Sanity check it's an IAM client.
         self.assertTrue(hasattr(client, 'list_users'))
         # Verify we can create another client.
-        new_client = creator.create_client('iam', aws_access_key_id='foo',
-                                           aws_secret_access_key='bar',
-                                           region_name='us-west-2')
+        new_client = creator.create_client(
+            'iam',
+            aws_access_key_id='foo',
+            aws_secret_access_key='bar',
+            region_name='us-west-2',
+        )
         self.assertIsInstance(new_client, botocore.client.BaseClient)
 
     def test_can_use_session_cache(self):
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_autogen.py 2.31.35-1/tests/unit/autocomplete/test_autogen.py
--- 2.23.6-1/tests/unit/autocomplete/test_autogen.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_autogen.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
 from copy import deepcopy
-from awscli.autocomplete.autogen import ServerCompletionHeuristic
+
 from botocore.model import ServiceModel
 
+from awscli.autocomplete.autogen import ServerCompletionHeuristic
+from awscli.testutils import unittest
 
 # To make these tests more realistic, a stripped down version of the ACM
 # service is included as part of these tests.  There are a few extra
@@ -415,7 +416,6 @@ MODEL_WITH_STRING_LIST = {
 
 
 class TestCanGenerateCompletions(unittest.TestCase):
-
     maxDiff = None
 
     def setUp(self):
@@ -424,37 +424,49 @@ class TestCanGenerateCompletions(unittes
 
     def test_can_generate_resource_descriptions(self):
         resources = self.heuristic.generate_completion_descriptions(
-            self.service_model)['resources']
+            self.service_model
+        )['resources']
         self.assertEqual(
-            resources, {
+            resources,
+            {
                 'Certificate': {
                     'operation': 'ListCertificates',
                     'resourceIdentifier': {
                         'CertificateArn': (
-                            'CertificateSummaryList[].CertificateArn')
-                    }
+                            'CertificateSummaryList[].CertificateArn'
+                        )
+                    },
                 }
-             }
+            },
         )
 
     def test_can_generate_operations(self):
         # This model is chosen specifically because there's only
         # one resource we generate.  This makes the assertions easier.
         operations = self.heuristic.generate_completion_descriptions(
-            self.service_model)['operations']
+            self.service_model
+        )['operations']
         completion_param = {
             'CertificateArn': {
                 'completions': [
-                    {'parameters': {},
-                     'resourceIdentifier': 'CertificateArn',
-                     'resourceName': 'Certificate'}
+                    {
+                        'parameters': {},
+                        'resourceIdentifier': 'CertificateArn',
+                        'resourceName': 'Certificate',
+                    }
                 ]
             }
         }
         self.assertEqual(
             list(sorted(operations)),
-            ['DeleteCertificate', 'DescribeCertificate', 'ExportCertificate',
-             'GetCertificate', 'ImportCertificate'])
+            [
+                'DeleteCertificate',
+                'DescribeCertificate',
+                'ExportCertificate',
+                'GetCertificate',
+                'ImportCertificate',
+            ],
+        )
         for op in operations.values():
             self.assertEqual(op, completion_param)
 
@@ -463,42 +475,65 @@ class TestCanGenerateCompletions(unittes
         # Swap ListCertificates for DescribeCertificates.
         # We should still be able to generate auto-completion data.
         model['operations']['DescribeCertificates'] = model['operations'].pop(
-            'ListCertificates')
+            'ListCertificates'
+        )
         service_model = ServiceModel(model)
         completion_data = self.heuristic.generate_completion_descriptions(
-            service_model)
+            service_model
+        )
         # Ensure we're using the swapped 'DescribeCertificates' operation.
         self.assertEqual(
-             completion_data['resources']['Certificate']['operation'],
-            'DescribeCertificates'
+            completion_data['resources']['Certificate']['operation'],
+            'DescribeCertificates',
         )
         self.assertEqual(
             list(sorted(completion_data['operations'])),
-            ['DeleteCertificate', 'DescribeCertificate', 'ExportCertificate',
-             'GetCertificate', 'ImportCertificate'])
+            [
+                'DeleteCertificate',
+                'DescribeCertificate',
+                'ExportCertificate',
+                'GetCertificate',
+                'ImportCertificate',
+            ],
+        )
 
     def test_can_generate_string_list_completions(self):
         service_model = ServiceModel(MODEL_WITH_STRING_LIST)
         completion_data = self.heuristic.generate_completion_descriptions(
-            service_model)
+            service_model
+        )
         expected = {
             'version': '1.0',
             'operations': {
                 'DeleteNamedQuery': {
                     'NamedQueryId': {
-                        'completions': [{'parameters': {},
-                                         'resourceIdentifier': 'NamedQueryId',
-                                         'resourceName': 'NamedQuery'}]}},
+                        'completions': [
+                            {
+                                'parameters': {},
+                                'resourceIdentifier': 'NamedQueryId',
+                                'resourceName': 'NamedQuery',
+                            }
+                        ]
+                    }
+                },
                 'GetNamedQuery': {
                     'NamedQueryId': {
-                        'completions': [{'parameters': {},
-                                         'resourceIdentifier': 'NamedQueryId',
-                                         'resourceName': 'NamedQuery'}]}}
+                        'completions': [
+                            {
+                                'parameters': {},
+                                'resourceIdentifier': 'NamedQueryId',
+                                'resourceName': 'NamedQuery',
+                            }
+                        ]
+                    }
+                },
             },
             'resources': {
-                'NamedQuery': {'operation': 'ListNamedQueries',
-                               'resourceIdentifier': {
-                                   'NamedQueryId': 'NamedQueryIds[]'}}}
+                'NamedQuery': {
+                    'operation': 'ListNamedQueries',
+                    'resourceIdentifier': {'NamedQueryId': 'NamedQueryIds[]'},
+                }
+            },
         }
         self.assertEqual(completion_data, expected)
 
@@ -506,26 +541,28 @@ class TestCanGenerateCompletions(unittes
         model_dict = deepcopy(BASIC_MODEL)
         # We're going to mark an input param of ListCertificates as required.
         model_dict['shapes']['ListCertificatesRequest']['required'] = [
-            'CertificateStatuses']
+            'CertificateStatuses'
+        ]
         # We also have to have an operation reference this
         service_model = ServiceModel(model_dict)
         completion_data = self.heuristic.generate_completion_descriptions(
-            service_model, prune_completions=False)
+            service_model, prune_completions=False
+        )
         resources = completion_data['resources']
         self.assertEqual(
-            resources, {
+            resources,
+            {
                 'Certificate': {
                     'operation': 'ListCertificates',
                     'inputParameters': ['CertificateStatuses'],
                     'resourceIdentifier': {
                         'CertificateArn': (
-                            'CertificateSummaryList[].CertificateArn'),
-                        'DomainName': (
-                            'CertificateSummaryList[].DomainName'
-                        )
-                    }
+                            'CertificateSummaryList[].CertificateArn'
+                        ),
+                        'DomainName': ('CertificateSummaryList[].DomainName'),
+                    },
                 }
-             }
+            },
         )
 
     def test_remove_operations_with_required_params(self):
@@ -539,7 +576,7 @@ class TestCanGenerateCompletions(unittes
                 },
                 'DeleteFooBarThing': {
                     'input': {'shape': 'DeleteFooBarThingRequest'},
-                }
+                },
             },
             'shapes': {
                 'DeleteFooBarThingRequest': {
@@ -547,7 +584,7 @@ class TestCanGenerateCompletions(unittes
                     'members': {
                         'RequiredParam': {'shape': 'String'},
                         'FooBarThing': {'shape': 'String'},
-                    }
+                    },
                 },
                 'ListFooBarThingsRequest': {
                     'members': {
@@ -560,18 +597,19 @@ class TestCanGenerateCompletions(unittes
                     'type': 'structure',
                     'members': {
                         'FooBarThings': {'shape': 'FooBarThingList'},
-                    }
+                    },
                 },
                 'FooBarThingList': {
                     'type': 'list',
-                    'member': {'shape': 'String'}
+                    'member': {'shape': 'String'},
                 },
                 'String': {'type': 'string'},
-            }
+            },
         }
         service_model = ServiceModel(custom_model)
         completion_data = self.heuristic.generate_completion_descriptions(
-            service_model)
+            service_model
+        )
         # The operations dict should be empty because the FooBarThing has
         # a required parameter and we don't support that yet.
         self.assertEqual(completion_data['operations'], {})
@@ -585,7 +623,7 @@ class TestCanGenerateCompletions(unittes
                 },
                 'DeleteFooBarThing': {
                     'input': {'shape': 'DeleteFooBarThingRequest'},
-                }
+                },
             },
             'shapes': {
                 'DeleteFooBarThingRequest': {
@@ -593,13 +631,13 @@ class TestCanGenerateCompletions(unittes
                     'members': {
                         'FooBarThingId': {'shape': 'String'},
                         'FooBarThingArn': {'shape': 'String'},
-                    }
+                    },
                 },
                 'ListFooBarThingsResponse': {
                     'type': 'structure',
                     'members': {
                         'FooBarThings': {'shape': 'FooBarThingList'},
-                    }
+                    },
                 },
                 'FooBarThingList': {
                     'type': 'list',
@@ -615,21 +653,24 @@ class TestCanGenerateCompletions(unittes
                         # However it doesn't accept a "Name", so this
                         # identifier will be pruned from the response.
                         'FooBarThingPruneId': {'shape': 'String'},
-                    }
+                    },
                 },
                 'String': {'type': 'string'},
-            }
+            },
         }
         service_model = ServiceModel(custom_model)
         completion_data = self.heuristic.generate_completion_descriptions(
-            service_model)
+            service_model
+        )
         self.assertEqual(
             completion_data['resources'],
-             {'FooBarThing': {
-                 'operation': 'ListFooBarThings',
-                 'resourceIdentifier': {
-                     'FooBarThingArn': 'FooBarThings[].FooBarThingArn',
-                     'FooBarThingId': 'FooBarThings[].FooBarThingId'
-                 }}
-             }
+            {
+                'FooBarThing': {
+                    'operation': 'ListFooBarThings',
+                    'resourceIdentifier': {
+                        'FooBarThingArn': 'FooBarThings[].FooBarThingArn',
+                        'FooBarThingId': 'FooBarThings[].FooBarThingId',
+                    },
+                }
+            },
         )
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_completer.py 2.31.35-1/tests/unit/autocomplete/test_completer.py
--- 2.23.6-1/tests/unit/autocomplete/test_completer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_completer.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,11 +14,10 @@ import os
 
 from prompt_toolkit.completion import Completion
 
-from awscli.testutils import unittest, mock
 from awscli.autocomplete import completer, parser
-from awscli.autocomplete.local import basic
 from awscli.autocomplete.completer import CompletionResult
-
+from awscli.autocomplete.local import basic
+from awscli.testutils import mock, unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
@@ -30,13 +29,11 @@ class TestAutoCompleter(unittest.TestCas
 
     def test_delegates_to_autocompleters(self):
         mock_complete = mock.Mock(spec=completer.BaseCompleter)
-        expected = [
-            CompletionResult('ec2', -1),
-            CompletionResult('ecs', -1)
-        ]
+        expected = [CompletionResult('ec2', -1), CompletionResult('ecs', -1)]
         mock_complete.complete.return_value = expected
         auto_complete = completer.AutoCompleter(
-            self.parser, completers=[mock_complete])
+            self.parser, completers=[mock_complete]
+        )
 
         results = auto_complete.autocomplete('aws e')
         self.assertEqual(results, expected)
@@ -48,14 +45,12 @@ class TestAutoCompleter(unittest.TestCas
         second = mock.Mock(spec=completer.BaseCompleter)
 
         first.complete.return_value = None
-        expected = [
-            CompletionResult('ec2', -1),
-            CompletionResult('ecs', -1)
-        ]
+        expected = [CompletionResult('ec2', -1), CompletionResult('ecs', -1)]
         second.complete.return_value = expected
 
         auto_complete = completer.AutoCompleter(
-            self.parser, completers=[first, second])
+            self.parser, completers=[first, second]
+        )
         self.assertEqual(auto_complete.autocomplete('aws e'), expected)
 
         first.complete.assert_called_with(self.parsed_result)
@@ -69,7 +64,8 @@ class TestAutoCompleter(unittest.TestCas
         second.complete.return_value = None
 
         auto_complete = completer.AutoCompleter(
-            self.parser, completers=[first, second])
+            self.parser, completers=[first, second]
+        )
         self.assertEqual(auto_complete.autocomplete('aws e'), [])
 
         first.complete.assert_called_with(self.parsed_result)
@@ -83,10 +79,10 @@ class TestAutoCompleter(unittest.TestCas
         second.complete.return_value = [CompletionResult('ecs', -1)]
 
         auto_complete = completer.AutoCompleter(
-            self.parser, completers=[first, second])
+            self.parser, completers=[first, second]
+        )
         self.assertEqual(
-            auto_complete.autocomplete('aws e'),
-            [CompletionResult('ec2', -1)]
+            auto_complete.autocomplete('aws e'), [CompletionResult('ec2', -1)]
         )
 
         first.complete.assert_called_with(self.parsed_result)
@@ -101,73 +97,128 @@ class TestAutoCompleter(unittest.TestCas
         self.assertEqual(
             help_text,
             'A token to specify where to start paginating.  This is the'
-            'NextToken from a previously truncated response.'
+            'NextToken from a previously truncated response.',
         )
 
 
 class TestModelIndexCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [('ec2', 'Amazon Elastic Compute Cloud'),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [
+                        ('ec2', 'Amazon Elastic Compute Cloud'),
                         ('ecs', 'Amazon EC2 Container Registry'),
                         ('s3', 'Amazon Simple Storage Service'),
-                        ('s3api', 'Amazon Simple Storage Service')],
-                'aws.ec2': [('describe-instances', None)],
-                'aws.s3api': [('get-object', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['region', 'endpoint-url'],
-                },
-                'aws.ec2': {
-                    'describe-instances': [
-                        'instance-ids', 'reserve', 'positional'],
+                        ('s3api', 'Amazon Simple Storage Service'),
+                    ],
+                    'aws.ec2': [('describe-instances', None)],
+                    'aws.s3api': [('get-object', None)],
                 },
-                'aws.s3api': {
-                    'get-object': ['outfile', 'bucket', 'key'],
+                'arg_names': {
+                    '': {
+                        'aws': ['region', 'endpoint-url'],
+                    },
+                    'aws.ec2': {
+                        'describe-instances': [
+                            'instance-ids',
+                            'reserve',
+                            'positional',
+                        ],
+                    },
+                    'aws.s3api': {
+                        'get-object': ['outfile', 'bucket', 'key'],
+                    },
                 },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'endpoint-url': ('endpoint-url', 'string', 'aws', '',
-                                         None, False, False),
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
-                    }
-                },
-                'aws.ec2': {
-                    'describe-instances': {
-                        'instance-ids': (
-                            'instance-ids', 'string', 'describe-instances',
-                            'aws.ec2.', None, False, False),
-                        'reserve': (
-                            'reserve', 'string', 'describe-instances',
-                            'aws.ec2.', None, False, False),
-                        'positional': (
-                            'positional', 'string', 'describe-instances',
-                            'aws.ec2.', None, True, False),
-                    }
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'endpoint-url': (
+                                'endpoint-url',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.ec2': {
+                        'describe-instances': {
+                            'instance-ids': (
+                                'instance-ids',
+                                'string',
+                                'describe-instances',
+                                'aws.ec2.',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'reserve': (
+                                'reserve',
+                                'string',
+                                'describe-instances',
+                                'aws.ec2.',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'positional': (
+                                'positional',
+                                'string',
+                                'describe-instances',
+                                'aws.ec2.',
+                                None,
+                                True,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.s3api': {
+                        'get-object': {
+                            'outfile': (
+                                'outfile',
+                                'string',
+                                'get-object',
+                                'aws.s3api.',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'bucket': (
+                                'bucket',
+                                'string',
+                                'get-object',
+                                'aws.s3api.',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'key': (
+                                'key',
+                                'string',
+                                'get-object',
+                                'aws.s3api.',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
                 },
-                'aws.s3api': {
-                    'get-object': {
-                        'outfile': (
-                            'outfile', 'string', 'get-object', 'aws.s3api.',
-                            None,
-                            False, False),
-                        'bucket': (
-                            'bucket', 'string', 'get-object', 'aws.s3api.',
-                            None,
-                            False, False),
-                        'key': (
-                            'key', 'string', 'get-object', 'aws.s3api.', None,
-                            False, False),
-                    }
-                }
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.completer = basic.ModelIndexCompleter(self.index)
 
@@ -204,50 +255,97 @@ class TestModelIndexCompleter(unittest.T
     def test_can_autocomplete_global_param(self):
         parsed = self.parser.parse('aws --re')
         self.assertEqual(
-            self.completer.complete(parsed),
-            [CompletionResult('--region', -4)]
+            self.completer.complete(parsed), [CompletionResult('--region', -4)]
         )
 
     def test_can_autocomplete_dashes(self):
         parsed = self.parser.parse('aws --')
-        self.assertTrue(
-            len(self.completer.complete(parsed)) > 0
-        )
+        self.assertTrue(len(self.completer.complete(parsed)) > 0)
 
     def test_keep_suggesting_if_there_are_longer_completions(self):
         parsed = self.parser.parse('aws s3')
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('s3', -2, False, None,
-                              'Amazon Simple Storage Service', ),
-             CompletionResult('s3api', -2, False, None,
-                              'Amazon Simple Storage Service', )]
+            [
+                CompletionResult(
+                    's3',
+                    -2,
+                    False,
+                    None,
+                    'Amazon Simple Storage Service',
+                ),
+                CompletionResult(
+                    's3api',
+                    -2,
+                    False,
+                    None,
+                    'Amazon Simple Storage Service',
+                ),
+            ],
         )
 
     def test_retain_option_order_on_dashes(self):
-        parsed = self.parser.parse('aws ec2 describe-instances --region '
-                                   'us-west-2 --')
+        parsed = self.parser.parse(
+            'aws ec2 describe-instances --region ' 'us-west-2 --'
+        )
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('--instance-ids', -2, False, 'string',),
-             CompletionResult('--reserve', -2, False, 'string',),
-             CompletionResult('--endpoint-url', -2, False, 'string',)]
+            [
+                CompletionResult(
+                    '--instance-ids',
+                    -2,
+                    False,
+                    'string',
+                ),
+                CompletionResult(
+                    '--reserve',
+                    -2,
+                    False,
+                    'string',
+                ),
+                CompletionResult(
+                    '--endpoint-url',
+                    -2,
+                    False,
+                    'string',
+                ),
+            ],
         )
 
     def test_can_combine_global_and_command_params(self):
         parsed = self.parser.parse('aws ec2 describe-instances --r')
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('--reserve', -3, False, 'string', ),
-             CompletionResult('--region', -3, False, 'string', )]
+            [
+                CompletionResult(
+                    '--reserve',
+                    -3,
+                    False,
+                    'string',
+                ),
+                CompletionResult(
+                    '--region',
+                    -3,
+                    False,
+                    'string',
+                ),
+            ],
         )
 
     def test_not_suggest_entered_options(self):
-        parsed = self.parser.parse('aws ec2 describe-instances '
-                                   '--region us-west-2 --re')
+        parsed = self.parser.parse(
+            'aws ec2 describe-instances ' '--region us-west-2 --re'
+        )
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('--reserve', -4, False, 'string', )]
+            [
+                CompletionResult(
+                    '--reserve',
+                    -4,
+                    False,
+                    'string',
+                )
+            ],
         )
 
     def test_no_autocompletions_if_nothing_matches(self):
@@ -260,77 +358,117 @@ class TestModelIndexCompleter(unittest.T
 
     def test_get_documentation_if_fetcher_provided(self):
         fake_cli_fetcher = mock.Mock()
-        fake_cli_fetcher.get_argument_documentation.\
-            return_value = '<p>Arg doc</p>'
-        fake_cli_fetcher.get_global_arg_documentation\
-            .return_value = '<p>Global arg doc</p>'
+        fake_cli_fetcher.get_argument_documentation.return_value = (
+            '<p>Arg doc</p>'
+        )
+        fake_cli_fetcher.get_global_arg_documentation.return_value = (
+            '<p>Global arg doc</p>'
+        )
         completer = basic.ModelIndexCompleter(self.index, fake_cli_fetcher)
         parsed = self.parser.parse('aws ec2 describe-instances --r')
         self.assertEqual(
             completer.complete(parsed),
-            [CompletionResult('--reserve', -3, False, 'string', 'Arg doc'),
-             CompletionResult('--region', -3, False, 'string', 'Global arg doc')]
+            [
+                CompletionResult('--reserve', -3, False, 'string', 'Arg doc'),
+                CompletionResult(
+                    '--region', -3, False, 'string', 'Global arg doc'
+                ),
+            ],
         )
 
     def test_return_service_full_name(self):
         parsed = self.parser.parse('aws ec')
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('ec2', -2, False, None,
-                              'Amazon Elastic Compute Cloud', None),
-             CompletionResult('ecs', -2, False, None,
-                              'Amazon EC2 Container Registry', None)]
+            [
+                CompletionResult(
+                    'ec2',
+                    -2,
+                    False,
+                    None,
+                    'Amazon Elastic Compute Cloud',
+                    None,
+                ),
+                CompletionResult(
+                    'ecs',
+                    -2,
+                    False,
+                    None,
+                    'Amazon EC2 Container Registry',
+                    None,
+                ),
+            ],
         )
 
     def test_can_handle_outfile(self):
         parsed = self.parser.parse('aws s3api get-object filename ')
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('--bucket', 0, False, 'string', None, None),
-             CompletionResult('--key', 0, False, 'string', None, None),
-             CompletionResult('--endpoint-url', 0, False, 'string', None, None),
-             CompletionResult('--region', 0, False, 'string', None, None)]
+            [
+                CompletionResult('--bucket', 0, False, 'string', None, None),
+                CompletionResult('--key', 0, False, 'string', None, None),
+                CompletionResult(
+                    '--endpoint-url', 0, False, 'string', None, None
+                ),
+                CompletionResult('--region', 0, False, 'string', None, None),
+            ],
         )
 
     def test_can_handle_outfile_with_options(self):
-        parsed = self.parser.parse('aws s3api get-object --bucket foo '
-                                   'filename --region us-west-2 ')
+        parsed = self.parser.parse(
+            'aws s3api get-object --bucket foo ' 'filename --region us-west-2 '
+        )
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('--key', 0, False, 'string', None, None),
-             CompletionResult('--endpoint-url', 0, False, 'string', None, None)]
+            [
+                CompletionResult('--key', 0, False, 'string', None, None),
+                CompletionResult(
+                    '--endpoint-url', 0, False, 'string', None, None
+                ),
+            ],
         )
 
     def test_can_suggest_outfile(self):
-        parsed = self.parser.parse('aws s3api get-object --bucket foo '
-                                   '--key bar --region us-west-2 ')
+        parsed = self.parser.parse(
+            'aws s3api get-object --bucket foo '
+            '--key bar --region us-west-2 '
+        )
         self.assertEqual(
             self.completer.complete(parsed),
-            [CompletionResult('outfile', 0, False, 'string',
-                              None, 'outfile (required)'),
-             CompletionResult('--endpoint-url', 0, False, 'string', None, None)]
+            [
+                CompletionResult(
+                    'outfile', 0, False, 'string', None, 'outfile (required)'
+                ),
+                CompletionResult(
+                    '--endpoint-url', 0, False, 'string', None, None
+                ),
+            ],
         )
 
 
 class TestRegionCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': ['aws'],
-                'aws': []
-            },
-            'arg_names': {
-                '': {'aws': ['region']}
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'region': ('region', 'string', 'aws', '', None, False,
-                                   False),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {'': ['aws'], 'aws': []},
+                'arg_names': {'': {'aws': ['region']}},
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'region': (
+                                'region',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     }
-                }
+                },
             }
-        })
+        )
         self.parser = parser.CLIParser(self.index)
         self.completer = basic.RegionCompleter()
 
@@ -344,9 +482,13 @@ class TestRegionCompleter(unittest.TestC
 
     def test_autocompletes_if_matches(self):
         parsed = self.parser.parse('aws --region us-west-')
-        self.assertEqual(list(self.completer.complete(parsed)),
-                         [CompletionResult('us-west-1', 0, False),
-                          CompletionResult('us-west-2', 0, False)])
+        self.assertEqual(
+            list(self.completer.complete(parsed)),
+            [
+                CompletionResult('us-west-1', 0, False),
+                CompletionResult('us-west-2', 0, False),
+            ],
+        )
 
     def test_not_autocomplete_wo_trailing_space(self):
         parsed = self.parser.parse('aws --region')
@@ -359,23 +501,27 @@ class TestRegionCompleter(unittest.TestC
 
 class TestProfileCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': ['aws'],
-                'aws': []
-            },
-            'arg_names': {
-                '': {'aws': ['profile']}
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'profile': ('profile', 'string', 'aws', '', None, False,
-                                   False),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {'': ['aws'], 'aws': []},
+                'arg_names': {'': {'aws': ['profile']}},
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'profile': (
+                                'profile',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     }
-                }
+                },
             }
-        })
+        )
         fake_session = mock.Mock()
         fake_session.available_profiles = ['default', 'profile1', 'profile2']
         self.parser = parser.CLIParser(self.index)
@@ -399,34 +545,42 @@ class TestProfileCompleter(unittest.Test
 
     def test_autocompletes_if_matches(self):
         parsed = self.parser.parse('aws --profile prof')
-        self.assertEqual(list(self.completer.complete(parsed)),
-                         [CompletionResult('profile1', 0, False),
-                          CompletionResult('profile2', 0, False)])
+        self.assertEqual(
+            list(self.completer.complete(parsed)),
+            [
+                CompletionResult('profile1', 0, False),
+                CompletionResult('profile2', 0, False),
+            ],
+        )
 
 
 class TestFilePathCompleter(unittest.TestCase):
     def setUp(self):
-        self.index = InMemoryIndex({
-            'command_names': {
-                '': ['aws'],
-                'aws': []
-            },
-            'arg_names': {
-                '': {'aws': ['profile']}
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'profile': ('profile', 'string', 'aws', '', None, False,
-                                   False),
+        self.index = InMemoryIndex(
+            {
+                'command_names': {'': ['aws'], 'aws': []},
+                'arg_names': {'': {'aws': ['profile']}},
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'profile': (
+                                'profile',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
                     }
-                }
+                },
             }
-        })
+        )
         fake_completer = mock.Mock()
         fake_completer.get_completions.return_value = [
             Completion(text='', display=[('', 'file')]),
-            Completion(text='', display=[('', 'folder/')])
+            Completion(text='', display=[('', 'folder/')]),
         ]
         self.parser = parser.CLIParser(self.index)
         self.completer = basic.FilePathCompleter(path_completer=fake_completer)
@@ -437,13 +591,19 @@ class TestFilePathCompleter(unittest.Tes
 
     def test_complete_lonely_tilda_with_slash(self):
         parsed = self.parser.parse('aws --profile file://~')
-        self.assertEqual(list(self.completer.complete(parsed)),
-                         [CompletionResult('file://~%s' % os.sep, 0, False)])
+        self.assertEqual(
+            list(self.completer.complete(parsed)),
+            [CompletionResult('file://~%s' % os.sep, 0, False)],
+        )
 
     def test_complete_pass_correct_prefix(self):
         parsed = self.parser.parse('aws --profile fileb://')
         self.assertEqual(
             list(self.completer.complete(parsed)),
-            [CompletionResult('fileb://file', 0, False, None, None, 'file'),
-             CompletionResult('fileb://folder/', 0, False, None, None, 'folder/')]
+            [
+                CompletionResult('fileb://file', 0, False, None, None, 'file'),
+                CompletionResult(
+                    'fileb://folder/', 0, False, None, None, 'folder/'
+                ),
+            ],
         )
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_db.py 2.31.35-1/tests/unit/autocomplete/test_db.py
--- 2.23.6-1/tests/unit/autocomplete/test_db.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_db.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
 from awscli.autocomplete.db import DatabaseConnection
+from awscli.testutils import mock, unittest
 
 
 class TestDatabaseConnection(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_filters.py 2.31.35-1/tests/unit/autocomplete/test_filters.py
--- 2.23.6-1/tests/unit/autocomplete/test_filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,9 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-
-from awscli.autocomplete.completer import CompletionResult
-
 from awscli.autocomplete import filters
+from awscli.autocomplete.completer import CompletionResult
+from awscli.testutils import mock, unittest
 
 
 class TestFilters(unittest.TestCase):
@@ -22,48 +20,51 @@ class TestFilters(unittest.TestCase):
         self.completions = [
             CompletionResult('version'),
             CompletionResult('foo', display_text='Help text'),
-            CompletionResult('various text')
+            CompletionResult('various text'),
         ]
 
     def _assert_filter_response_as_expected(
-            self, response_filter, user_input, expected_output):
+        self, response_filter, user_input, expected_output
+    ):
         output = response_filter(user_input, self.completions)
         self.assertEqual(output, expected_output)
 
     def test_fuzzy_filter(self):
         self._assert_filter_response_as_expected(
-            filters.fuzzy_filter, 'ro',
-            [
-                CompletionResult('various text'),
-                CompletionResult('version')
-            ]
+            filters.fuzzy_filter,
+            'ro',
+            [CompletionResult('various text'), CompletionResult('version')],
         )
         self._assert_filter_response_as_expected(
-            filters.fuzzy_filter, 'et',
+            filters.fuzzy_filter,
+            'et',
             [
                 CompletionResult('various text'),
                 CompletionResult('foo', display_text='Help text'),
-            ]
+            ],
         )
         self._assert_filter_response_as_expected(
-            filters.fuzzy_filter, 'vs',
+            filters.fuzzy_filter,
+            'vs',
             [
                 CompletionResult('version'),
                 CompletionResult('various text'),
-            ]
+            ],
         )
 
     def test_startswith_filter(self):
         self._assert_filter_response_as_expected(
-            filters.startswith_filter, 'He',
+            filters.startswith_filter,
+            'He',
             [
                 CompletionResult('foo', display_text='Help text'),
-            ]
+            ],
         )
         self._assert_filter_response_as_expected(
-            filters.startswith_filter, 'v',
+            filters.startswith_filter,
+            'v',
             [
                 CompletionResult('version'),
                 CompletionResult('various text'),
-            ]
+            ],
         )
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_generator.py 2.31.35-1/tests/unit/autocomplete/test_generator.py
--- 2.23.6-1/tests/unit/autocomplete/test_generator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_generator.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
 from awscli.autocomplete import generator
 from awscli.autocomplete.local import indexer
 from awscli.clidriver import CLIDriver
+from awscli.testutils import mock, unittest
 
 
 class TestGenerateCompletionIndex(unittest.TestCase):
-
     def test_use_high_level_generator_for_index_creation(self):
         model_index = mock.Mock(spec=indexer.ModelIndexer)
         clidriver = mock.Mock(spec=CLIDriver)
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_main.py 2.31.35-1/tests/unit/autocomplete/test_main.py
--- 2.23.6-1/tests/unit/autocomplete/test_main.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_main.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.autocomplete import main, completer
+from awscli.autocomplete import completer, main
 
 
 def test_can_create_completer():
diff -pruN 2.23.6-1/tests/unit/autocomplete/test_parser.py 2.31.35-1/tests/unit/autocomplete/test_parser.py
--- 2.23.6-1/tests/unit/autocomplete/test_parser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autocomplete/test_parser.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,11 +15,10 @@ from functools import partial
 
 import pytest
 
-from awscli.testutils import unittest
 from awscli.autocomplete import parser
+from awscli.testutils import unittest
 from tests.unit.autocomplete import InMemoryIndex
 
-
 # This models an 'aws ec2 stop-instances' command
 # along with the 'region', 'endpoint-url', and 'debug' global params.
 SAMPLE_MODEL = InMemoryIndex(
@@ -40,98 +39,194 @@ SAMPLE_MODEL = InMemoryIndex(
             'aws.s3api': {
                 'get-object': ['outfile', 'bucket', 'key'],
             },
-            'aws.logs': {
-                'tail': ['group_name', 'filter-pattern']
-            }
+            'aws.logs': {'tail': ['group_name', 'filter-pattern']},
         },
         'command_names': {
             '': [('aws', None)],
-            'aws': [('ec2', None), ('logs', None),
-                    ('s3api', None), ('s3', None)],
+            'aws': [
+                ('ec2', None),
+                ('logs', None),
+                ('s3api', None),
+                ('s3', None),
+            ],
             'aws.ec2': [('stop-instances', None)],
             'aws.logs': [('tail', None)],
             'aws.s3': [('cp', None)],
-            'aws.s3api': [('get-object', None)]
+            'aws.s3api': [('get-object', None)],
         },
         'arg_data': {
             '': {
                 'aws': {
-                    'debug': ('debug', 'boolean', 'aws', '', None, False,
-                              False),
-                    'endpoint-url': ('endpoint-url', 'string', 'aws', '', None,
-                                     False, False),
-                    'region': ('region', 'string', 'aws', '', None, False,
-                               False),
+                    'debug': (
+                        'debug',
+                        'boolean',
+                        'aws',
+                        '',
+                        None,
+                        False,
+                        False,
+                    ),
+                    'endpoint-url': (
+                        'endpoint-url',
+                        'string',
+                        'aws',
+                        '',
+                        None,
+                        False,
+                        False,
+                    ),
+                    'region': (
+                        'region',
+                        'string',
+                        'aws',
+                        '',
+                        None,
+                        False,
+                        False,
+                    ),
                 }
             },
             'aws.ec2': {
                 'stop-instances': {
                     'instance-ids': (
-                        'instance-ids', 'string', 'stop-instances', 'aws.ec2.',
-                        '*', False, False),
+                        'instance-ids',
+                        'string',
+                        'stop-instances',
+                        'aws.ec2.',
+                        '*',
+                        False,
+                        False,
+                    ),
                     'foo-arg': (
-                        'foo-arg', 'string', 'stop-instances', 'aws.ec2', None,
-                        False, False),
+                        'foo-arg',
+                        'string',
+                        'stop-instances',
+                        'aws.ec2',
+                        None,
+                        False,
+                        False,
+                    ),
                     'positional': (
-                        'positional', 'string', 'stop-instances', 'aws.ec2',
-                        None, True, False),
+                        'positional',
+                        'string',
+                        'stop-instances',
+                        'aws.ec2',
+                        None,
+                        True,
+                        False,
+                    ),
                 }
             },
             'aws.logs': {
                 'tail': {
                     'group_name': (
-                        'group_name', 'string', 'tail', 'aws.logs.', None,
-                        True, False),
+                        'group_name',
+                        'string',
+                        'tail',
+                        'aws.logs.',
+                        None,
+                        True,
+                        False,
+                    ),
                     'filter-pattern': (
-                        'filter-pattern', 'string', 'tail', 'aws.logs', None,
-                        False, False),
+                        'filter-pattern',
+                        'string',
+                        'tail',
+                        'aws.logs',
+                        None,
+                        False,
+                        False,
+                    ),
                 }
             },
             'aws.s3': {
                 'cp': {
                     'bucket': (
-                        'bucket', 'string', 'cp', 'aws.s3.', None,
-                        False, False),
+                        'bucket',
+                        'string',
+                        'cp',
+                        'aws.s3.',
+                        None,
+                        False,
+                        False,
+                    ),
                     'key': (
-                        'key', 'string', 'cp', 'aws.s3.', None,
-                        False, False),
+                        'key',
+                        'string',
+                        'cp',
+                        'aws.s3.',
+                        None,
+                        False,
+                        False,
+                    ),
                 }
             },
             'aws.s3api': {
                 'get-object': {
                     'outfile': (
-                        'outfile', 'string', 'get-object', 'aws.s3api.', None,
-                        False, False),
+                        'outfile',
+                        'string',
+                        'get-object',
+                        'aws.s3api.',
+                        None,
+                        False,
+                        False,
+                    ),
                     'bucket': (
-                        'bucket', 'string', 'get-object', 'aws.s3api.', None,
-                        False, False),
+                        'bucket',
+                        'string',
+                        'get-object',
+                        'aws.s3api.',
+                        None,
+                        False,
+                        False,
+                    ),
                     'key': (
-                        'key', 'string', 'get-object', 'aws.s3api.', None,
-                        False, False),
+                        'key',
+                        'string',
+                        'get-object',
+                        'aws.s3api.',
+                        None,
+                        False,
+                        False,
+                    ),
                 }
-            }
-        }
+            },
+        },
     },
 )
 
+
 @pytest.mark.parametrize(
     'command_line',
     [
-        ('aws ec2 stop-instances '
-         '--instance-ids i-123 i-124 --foo-arg value --debug '
-         '--endpoint-url https://foo '),
-        ('aws --debug ec2 stop-instances '
-         '--instance-ids i-123 i-124 --foo-arg value '
-         '--endpoint-url https://foo '),
-        ('aws --endpoint-url https://foo --debug ec2 stop-instances '
-         '--instance-ids i-123 i-124 --foo-arg value '),
-        ('aws ec2 --debug --endpoint-url https://foo stop-instances '
-         '--instance-ids i-123 i-124 --foo-arg value '),
-        ('aws ec2 stop-instances --debug --endpoint-url https://foo '
-         '--instance-ids i-123 i-124 --foo-arg value '),
-        ('aws ec2 --endpoint-url https://foo stop-instances --debug '
-         '--instance-ids i-123 i-124 --foo-arg value '),
-    ]
+        (
+            'aws ec2 stop-instances '
+            '--instance-ids i-123 i-124 --foo-arg value --debug '
+            '--endpoint-url https://foo '
+        ),
+        (
+            'aws --debug ec2 stop-instances '
+            '--instance-ids i-123 i-124 --foo-arg value '
+            '--endpoint-url https://foo '
+        ),
+        (
+            'aws --endpoint-url https://foo --debug ec2 stop-instances '
+            '--instance-ids i-123 i-124 --foo-arg value '
+        ),
+        (
+            'aws ec2 --debug --endpoint-url https://foo stop-instances '
+            '--instance-ids i-123 i-124 --foo-arg value '
+        ),
+        (
+            'aws ec2 stop-instances --debug --endpoint-url https://foo '
+            '--instance-ids i-123 i-124 --foo-arg value '
+        ),
+        (
+            'aws ec2 --endpoint-url https://foo stop-instances --debug '
+            '--instance-ids i-123 i-124 --foo-arg value '
+        ),
+    ],
 )
 def test_can_handle_arbitrary_ordering(command_line):
     # This test verifies that parse to the same result given a command
@@ -140,8 +235,7 @@ def test_can_handle_arbitrary_ordering(c
     expected = parser.ParsedResult(
         current_command='stop-instances',
         global_params={'debug': True, 'endpoint-url': 'https://foo'},
-        parsed_params={'instance-ids': ['i-123', 'i-124'],
-                       'foo-arg': 'value'},
+        parsed_params={'instance-ids': ['i-123', 'i-124'], 'foo-arg': 'value'},
         lineage=['aws', 'ec2'],
         current_fragment='',
     )
@@ -153,8 +247,11 @@ def _assert_parses_to(command_line, expe
     result = p.parse(command_line)
     for key, value in vars(expected).items():
         actual = getattr(result, key)
-        assert getattr(result, key) == value, (
-            '%r != %r for attribute: %r' % (actual, value, key))
+        assert getattr(result, key) == value, '%r != %r for attribute: %r' % (
+            actual,
+            value,
+            key,
+        )
 
 
 def _generate_command_chunks():
@@ -162,9 +259,7 @@ def _generate_command_chunks():
         'aws ec2 stop-instances --instance-ids i-123 i-124 '
         '--foo-arg value --debug --endpoint-url https://foo'
     )
-    return [
-        command_line[:i] for i in range(1, len(command_line))
-    ]
+    return [command_line[:i] for i in range(1, len(command_line))]
 
 
 @pytest.mark.parametrize("chunk", _generate_command_chunks())
@@ -201,8 +296,7 @@ class TestCanParseCLICommand(unittest.Te
 
     def create_parser(self, return_first_command_match=False):
         return parser.CLIParser(
-            SAMPLE_MODEL,
-            return_first_command_match=return_first_command_match
+            SAMPLE_MODEL, return_first_command_match=return_first_command_match
         )
 
     def assert_parsed_results_equal(self, actual, **expected):
@@ -210,8 +304,11 @@ class TestCanParseCLICommand(unittest.Te
         # parsed.
         for key, value in expected.items():
             actual_value = getattr(actual, key)
-            self.assertEqual(actual_value, value, '%r != %r (attr: %r)'
-                             % (actual_value, value, key))
+            self.assertEqual(
+                actual_value,
+                value,
+                '%r != %r (attr: %r)' % (actual_value, value, key),
+            )
 
     def assert_parsed_s3api_result_correct(self, result):
         self.assert_parsed_results_equal(
@@ -220,7 +317,7 @@ class TestCanParseCLICommand(unittest.Te
             parsed_params={
                 'outfile': 'filename',
                 'bucket': 'myBucket',
-                'key': 'foo'
+                'key': 'foo',
             },
             lineage=['aws', 's3api'],
             unparsed_items=[],
@@ -252,47 +349,49 @@ class TestCanParseCLICommand(unittest.Te
         )
 
     def test_can_parse_operation_command_accepts_single_value_arg(self):
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --foo-arg bar ')
+        result = self.cli_parser.parse('aws ec2 stop-instances --foo-arg bar ')
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
             global_params={},
             parsed_params={'foo-arg': 'bar'},
-            lineage=['aws', 'ec2']
+            lineage=['aws', 'ec2'],
         )
 
     def test_can_parse_operation_command_with_param(self):
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --instance-ids i-1 ')
+            'aws ec2 stop-instances --instance-ids i-1 '
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
             global_params={},
             parsed_params={'instance-ids': ['i-1']},
-            lineage=['aws', 'ec2']
+            lineage=['aws', 'ec2'],
         )
 
     def test_can_parse_bool_param(self):
         result = self.cli_parser.parse(
-            'aws --debug ec2 stop-instances --instance-ids i-1 ')
+            'aws --debug ec2 stop-instances --instance-ids i-1 '
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
             global_params={'debug': True},
             parsed_params={'instance-ids': ['i-1']},
-            lineage=['aws', 'ec2']
+            lineage=['aws', 'ec2'],
         )
 
     def test_can_parse_bool_param_in_any_location(self):
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --instance-ids i-1 --debug')
+            'aws ec2 stop-instances --instance-ids i-1 --debug'
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
             global_params={'debug': True},
             parsed_params={'instance-ids': ['i-1']},
-            lineage=['aws', 'ec2']
+            lineage=['aws', 'ec2'],
         )
 
     def test_can_parse_operation_command(self):
@@ -302,7 +401,7 @@ class TestCanParseCLICommand(unittest.Te
             current_command='stop-instances',
             global_params={},
             parsed_params={},
-            lineage=['aws', 'ec2']
+            lineage=['aws', 'ec2'],
         )
 
     def test_can_parse_service_command(self):
@@ -326,7 +425,8 @@ class TestCanParseCLICommand(unittest.Te
 
     def test_ignores_unknown_args(self):
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --unknown-arg bar')
+            'aws ec2 stop-instances --unknown-arg bar'
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -368,7 +468,8 @@ class TestCanParseCLICommand(unittest.Te
 
     def test_can_consume_one_or_more_nargs(self):
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --instance-ids i-1 i-2 i-3 ')
+            'aws ec2 stop-instances --instance-ids i-1 i-2 i-3 '
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -380,22 +481,33 @@ class TestCanParseCLICommand(unittest.Te
         model = copy.deepcopy(SAMPLE_MODEL)
         nargs_one_or_more = '?'
         model.index['arg_data']['aws.ec2']['stop-instances']['foo-arg'] = (
-            'foo-arg', 'string',
-            'stop-instances', 'aws.ec2', nargs_one_or_more, False, False)
+            'foo-arg',
+            'string',
+            'stop-instances',
+            'aws.ec2',
+            nargs_one_or_more,
+            False,
+            False,
+        )
         p = parser.CLIParser(model)
         self.assertEqual(
-            p.parse(
-                'aws ec2 stop-instances --foo-arg --debug'
-            ).parsed_params['foo-arg'], None)
+            p.parse('aws ec2 stop-instances --foo-arg --debug').parsed_params[
+                'foo-arg'
+            ],
+            None,
+        )
         self.assertEqual(
             p.parse(
                 'aws ec2 stop-instances --foo-arg bar --debug'
-            ).parsed_params['foo-arg'], 'bar')
+            ).parsed_params['foo-arg'],
+            'bar',
+        )
 
     def test_truncates_line_based_on_location(self):
         # The 22nd index cuts off right after `stop-instances`.
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --instance-ids i-1 i-2 i-3', 22)
+            'aws ec2 stop-instances --instance-ids i-1 i-2 i-3', 22
+        )
         # We should not have parsed the 'instance-ids'.
         self.assert_parsed_results_equal(
             result,
@@ -439,8 +551,7 @@ class TestCanParseCLICommand(unittest.Te
         )
 
     def test_current_fragment_can_be_option(self):
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --inst')
+        result = self.cli_parser.parse('aws ec2 stop-instances --inst')
         # We should not have parsed the 'instance-ids'.
         self.assert_parsed_results_equal(
             result,
@@ -451,8 +562,7 @@ class TestCanParseCLICommand(unittest.Te
         )
 
     def test_option_not_preserved_when_space_separated(self):
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --inst ')
+        result = self.cli_parser.parse('aws ec2 stop-instances --inst ')
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -463,8 +573,7 @@ class TestCanParseCLICommand(unittest.Te
         )
 
     def test_can_have_unparsed_option_with_current_fragment(self):
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --inst foo')
+        result = self.cli_parser.parse('aws ec2 stop-instances --inst foo')
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -479,8 +588,7 @@ class TestCanParseCLICommand(unittest.Te
         # auto-completion, but we still need to decided where
         # we should put the 'foo' value.  I think it makes the
         # most sense to put this under "unparsed_items".
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --inst foo ')
+        result = self.cli_parser.parse('aws ec2 stop-instances --inst foo ')
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -491,8 +599,7 @@ class TestCanParseCLICommand(unittest.Te
         )
 
     def test_can_handle_multiple_unknown_options(self):
-        result = self.cli_parser.parse(
-            'aws ec2 stop-instances --inst --foo ')
+        result = self.cli_parser.parse('aws ec2 stop-instances --inst --foo ')
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -508,7 +615,7 @@ class TestCanParseCLICommand(unittest.Te
             result,
             current_command='aws',
             current_fragment='',
-            unparsed_items=['ec', 'stop-insta']
+            unparsed_items=['ec', 'stop-insta'],
         )
 
     def test_can_handle_error_cases_gracefully(self):
@@ -516,7 +623,8 @@ class TestCanParseCLICommand(unittest.Te
         # It would normally generate a parser error.  We should make sure
         # we handle this gracefully.
         result = self.cli_parser.parse(
-            'aws ec2 stop-instances --foo-arg a b --')
+            'aws ec2 stop-instances --foo-arg a b --'
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='stop-instances',
@@ -634,15 +742,12 @@ class TestCanParseCLICommand(unittest.Te
     def test_parse_positional_with_option(self):
         result = self.cli_parser.parse(
             'aws logs tail mygroup --filter-pattern pat',
-            )
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='tail',
             current_param='filter-pattern',
-            parsed_params={
-                'filter-pattern': None,
-                'group_name': 'mygroup'
-            },
+            parsed_params={'filter-pattern': None, 'group_name': 'mygroup'},
             lineage=['aws', 'logs'],
             current_fragment='pat',
             unparsed_items=[],
@@ -651,7 +756,7 @@ class TestCanParseCLICommand(unittest.Te
     def test_parse_positional_with_option_before(self):
         result = self.cli_parser.parse(
             'aws logs tail --filter-pattern pattern mygroup',
-            )
+        )
         self.assert_parsed_results_equal(
             result,
             current_command='tail',
@@ -667,7 +772,7 @@ class TestCanParseCLICommand(unittest.Te
     def test_parse_outfile_option_in_the_beginning(self):
         result = self.cli_parser.parse(
             'aws s3api get-object filename --bucket myBucket --key foo ',
-            )
+        )
         self.assert_parsed_s3api_result_correct(result)
 
     def test_parse_outfile_option_in_the_middle(self):
@@ -712,5 +817,6 @@ class TestParseState(unittest.TestCase):
         state.current_command = 'describe-instances'
         self.assertEqual(state.current_command, 'describe-instances')
         self.assertEqual(state.lineage, ['aws', 'ec2'])
-        self.assertEqual(state.full_lineage,
-                         ['aws', 'ec2', 'describe-instances'])
+        self.assertEqual(
+            state.full_lineage, ['aws', 'ec2', 'describe-instances']
+        )
diff -pruN 2.23.6-1/tests/unit/autoprompt/__init__.py 2.31.35-1/tests/unit/autoprompt/__init__.py
--- 2.23.6-1/tests/unit/autoprompt/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -9,4 +9,4 @@
 # or in the "license" file accompanying this file. This file is
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
\ No newline at end of file
+# language governing permissions and limitations under the License.
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_core.py 2.31.35-1/tests/unit/autoprompt/test_core.py
--- 2.23.6-1/tests/unit/autoprompt/test_core.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_core.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,8 @@ from collections import namedtuple
 
 import pytest
 
-from awscli.clidriver import create_clidriver
 from awscli.autoprompt import core
+from awscli.clidriver import create_clidriver
 from awscli.customizations.exceptions import ParamValidationError
 from awscli.testutils import mock, unittest
 
@@ -24,15 +24,16 @@ class TestCLIAutoPrompt(unittest.TestCas
     def setUp(self):
         self.driver = mock.Mock()
         self.prompter = mock.Mock(spec=core.AutoPrompter)
-        self.prompt_driver = core.AutoPromptDriver(self.driver,
-                                                   prompter=self.prompter)
+        self.prompt_driver = core.AutoPromptDriver(
+            self.driver, prompter=self.prompter
+        )
 
     def test_throw_error_if_both_args_specified(self):
         args = ['--cli-auto-prompt', '--no-cli-auto-prompt']
         self.assertRaises(
             ParamValidationError,
             self.prompt_driver.validate_auto_prompt_args_are_mutually_exclusive,
-            args
+            args,
         )
 
 
@@ -49,11 +50,14 @@ def _generate_auto_prompt_resolve_cases(
     # or --cli-auto-prompt overrides can be specified.
     # TestCLIAutoPrompt.test_throw_error_if_both_args_specified tests
     # that these command line overrides are mutually exclusive.
-    Case = namedtuple('Case', [
-        'args',
-        'config_variable',
-        'expected_result',
-    ])
+    Case = namedtuple(
+        'Case',
+        [
+            'args',
+            'config_variable',
+            'expected_result',
+        ],
+    )
     return [
         Case([], 'off', 'off'),
         Case([], 'on', 'on'),
@@ -73,8 +77,7 @@ def _generate_auto_prompt_resolve_cases(
 @pytest.mark.parametrize('case', _generate_auto_prompt_resolve_cases())
 def test_auto_prompt_resolve_mode(case):
     driver = create_clidriver()
-    driver.session.set_config_variable('cli_auto_prompt',
-                                       case.config_variable)
+    driver.session.set_config_variable('cli_auto_prompt', case.config_variable)
     prompter = mock.Mock(spec=core.AutoPrompter)
     prompt_driver = core.AutoPromptDriver(driver, prompter=prompter)
     result = prompt_driver.resolve_mode(args=case.args)
@@ -98,7 +101,8 @@ class TestAutoPrompter(unittest.TestCase
         prompter.prompt_for_args = lambda x: x
         driver.arg_table = []
         self.auto_prompter = core.AutoPrompter(
-            completion_source, driver, prompter)
+            completion_source, driver, prompter
+        )
 
     def test_auto_prompter_returns_args(self):
         original_args = ['aws', 'ec2', 'help']
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_doc.py 2.31.35-1/tests/unit/autoprompt/test_doc.py
--- 2.23.6-1/tests/unit/autoprompt/test_doc.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_doc.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 import textwrap
 
-from awscli.clidriver import create_clidriver
 from awscli.autoprompt.doc import DocsGetter
+from awscli.clidriver import create_clidriver
 from awscli.testutils import mock, unittest
 
 
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_factory.py 2.31.35-1/tests/unit/autoprompt/test_factory.py
--- 2.23.6-1/tests/unit/autoprompt/test_factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from prompt_toolkit.buffer import Buffer
-from prompt_toolkit.completion import DummyCompleter, Completer
+from prompt_toolkit.completion import Completer, DummyCompleter
 from prompt_toolkit.layout import Window
 from prompt_toolkit.widgets import SearchToolbar
 
 from awscli.autoprompt.factory import (
-    PromptToolkitKeyBindings, PromptToolkitFactory, CLIPromptBuffer
+    CLIPromptBuffer,
+    PromptToolkitFactory,
+    PromptToolkitKeyBindings,
 )
 from awscli.autoprompt.history import HistoryCompleter
 from awscli.testutils import mock, unittest
@@ -69,7 +71,8 @@ class TestPromptToolkitFactory(unittest.
 
     def test_can_create_layout_with_input_buffer_callback_specified(self):
         layout = self.factory.create_layout(
-            on_input_buffer_text_changed=self.dummy_callback)
+            on_input_buffer_text_changed=self.dummy_callback
+        )
         self.assertIsNotNone(layout.container)
 
     def test_can_create_layout_with_input_buffer_container_specified(self):
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_filters.py 2.31.35-1/tests/unit/autoprompt/test_filters.py
--- 2.23.6-1/tests/unit/autoprompt/test_filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,20 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest
 from awscli.autoprompt.filters import (
-    search_input_has_focus, help_section_visible, doc_window_has_focus,
-    doc_section_visible, is_history_mode, is_multi_column, is_one_column,
-    input_buffer_has_focus
+    doc_section_visible,
+    doc_window_has_focus,
+    help_section_visible,
+    input_buffer_has_focus,
+    is_history_mode,
+    is_multi_column,
+    is_one_column,
+    search_input_has_focus,
 )
+from awscli.testutils import mock, unittest
 
 
 class TestFilters(unittest.TestCase):
-
     @mock.patch('awscli.autoprompt.filters.get_app')
     def test_search_input_has_focus(self, get_app):
         app = mock.Mock()
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_history.py 2.31.35-1/tests/unit/autoprompt/test_history.py
--- 2.23.6-1/tests/unit/autoprompt/test_history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_history.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import json
-
 import os
 import shutil
 import tempfile
@@ -19,12 +18,10 @@ import tempfile
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.completion import Completion
 from prompt_toolkit.document import Document
-from prompt_toolkit.history import History
 from prompt_toolkit.formatted_text import FormattedText
+from prompt_toolkit.history import History
 
-from awscli.autoprompt.history import (
-    HistoryCompleter, HistoryDriver
-)
+from awscli.autoprompt.history import HistoryCompleter, HistoryDriver
 from awscli.testutils import mock, unittest
 
 
@@ -32,9 +29,10 @@ class TestHistoryCompleter(unittest.Test
     def setUp(self):
         self.strings = [
             'chime associate-phone-number-with-user',
-            'opsworks-cm associate-node',
             'deploy add-tags-to-on-premises-instances',
             's3 ls',
+            'ecs get-task-protection',
+            'ecr get-lifecycle-policy-preview',
         ]
         self.buffer = mock.Mock(spec=Buffer)
         history = mock.Mock(spec=History)
@@ -47,32 +45,60 @@ class TestHistoryCompleter(unittest.Test
         strings = self.completer.get_completions(document)
         self.assertEqual(
             list(strings),
-            [Completion(text='s3 ls', start_position=0,
-                        display=FormattedText([('', 's3 ls')])),
-             Completion(text='deploy add-tags-to-on-premises-instances',
-                        start_position=0, display=FormattedText([('',
-                        'deploy add-tags-to-on-premises-instances')])),
-             Completion(text='opsworks-cm associate-node',
-                        start_position=0, display=FormattedText(
-                        [('', 'opsworks-cm associate-node')])),
-             Completion(text='chime associate-phone-number-with-user',
-                        start_position=0, display=FormattedText([('',
-                        'chime associate-phone-number-with-user')]))
-            ]
+            [
+                Completion(
+                    text='ecr get-lifecycle-policy-preview',
+                    start_position=0,
+                    display=FormattedText(
+                        [('', 'ecr get-lifecycle-policy-preview')]
+                    ),
+                ),
+                Completion(
+                    text='ecs get-task-protection',
+                    start_position=0,
+                    display=FormattedText([('', 'ecs get-task-protection')]),
+                ),
+                Completion(
+                    text='s3 ls',
+                    start_position=0,
+                    display=FormattedText([('', 's3 ls')]),
+                ),
+                Completion(
+                    text='deploy add-tags-to-on-premises-instances',
+                    start_position=0,
+                    display=FormattedText(
+                        [('', 'deploy add-tags-to-on-premises-instances')]
+                    ),
+                ),
+                Completion(
+                    text='chime associate-phone-number-with-user',
+                    start_position=0,
+                    display=FormattedText(
+                        [('', 'chime associate-phone-number-with-user')]
+                    ),
+                ),
+            ],
         )
 
     def test_get_completions_with_fuzzy_search(self):
-        document = Document('omine')
+        document = Document('ecgpr')
         strings = self.completer.get_completions(document)
         self.assertEqual(
             list(strings),
-            [Completion(text='opsworks-cm associate-node',
-                        start_position=-5, display=FormattedText(
-                        [('', 'opsworks-cm associate-node')])),
-             Completion(text='deploy add-tags-to-on-premises-instances',
-                        start_position=-5, display=FormattedText([('',
-                        'deploy add-tags-to-on-premises-instances')]))
-            ]
+            [
+                Completion(
+                    text='ecs get-task-protection',
+                    start_position=-5,
+                    display=FormattedText([('', 'ecs get-task-protection')]),
+                ),
+                Completion(
+                    text='ecr get-lifecycle-policy-preview',
+                    start_position=-5,
+                    display=FormattedText(
+                        [('', 'ecr get-lifecycle-policy-preview')]
+                    ),
+                ),
+            ],
         )
 
     def test_show_newest_duplicated_command(self):
@@ -80,7 +106,7 @@ class TestHistoryCompleter(unittest.Test
             'chime associate-phone-number-with-user',
             's3 ls',
             's3api list-buckets',
-            's3 ls'
+            's3 ls',
         ]
         history = mock.Mock(spec=History)
         history.get_strings.return_value = strings
@@ -90,16 +116,25 @@ class TestHistoryCompleter(unittest.Test
         response = self.completer.get_completions(document)
         self.assertEqual(
             list(response),
-            [Completion(text='s3 ls',
-                        start_position=0, display=FormattedText(
-                        [('', 's3 ls')])),
-             Completion(text='s3api list-buckets',
-                        start_position=0, display=FormattedText([('',
-                        's3api list-buckets')])),
-             Completion(text='chime associate-phone-number-with-user',
-                        start_position=0, display=FormattedText([('',
-                        'chime associate-phone-number-with-user')]))
-            ]
+            [
+                Completion(
+                    text='s3 ls',
+                    start_position=0,
+                    display=FormattedText([('', 's3 ls')]),
+                ),
+                Completion(
+                    text='s3api list-buckets',
+                    start_position=0,
+                    display=FormattedText([('', 's3api list-buckets')]),
+                ),
+                Completion(
+                    text='chime associate-phone-number-with-user',
+                    start_position=0,
+                    display=FormattedText(
+                        [('', 'chime associate-phone-number-with-user')]
+                    ),
+                ),
+            ],
         )
 
 
@@ -114,11 +149,10 @@ class TestHistoryDriver(unittest.TestCas
 
     def test_store_string(self):
         self.history_driver.store_string('aws ec2 describe-instances')
-        with open(self.filename, 'r') as f:
+        with open(self.filename) as f:
             history = json.load(f)
         self.assertEqual(
-            history,
-            {'version': 1, 'commands': ['aws ec2 describe-instances']}
+            history, {'version': 1, 'commands': ['aws ec2 describe-instances']}
         )
 
     def test_creates_folder_and_file(self):
@@ -135,10 +169,11 @@ class TestHistoryDriver(unittest.TestCas
         commands = history_driver.load_history_strings()
         self.assertEqual(
             list(commands),
-            ['aws dynamodb create-table',
-             'aws s3 ls',
-             'aws ec2 describe-instances'
-             ]
+            [
+                'aws dynamodb create-table',
+                'aws s3 ls',
+                'aws ec2 describe-instances',
+            ],
         )
 
     def test_keep_last_max_commands(self):
@@ -146,11 +181,9 @@ class TestHistoryDriver(unittest.TestCas
         history_driver.store_string('aws ec2 describe-instances')
         history_driver.store_string('aws s3 ls')
         history_driver.store_string('aws dynamodb create-table')
-        with open(self.filename, 'r') as f:
+        with open(self.filename) as f:
             commands = json.load(f)['commands']
-        self.assertEqual(
-            commands, ['aws s3 ls', 'aws dynamodb create-table']
-        )
+        self.assertEqual(commands, ['aws s3 ls', 'aws dynamodb create-table'])
 
     @mock.patch('awscli.autoprompt.history.FileHistory')
     def test_handle_io_errors(self, file_history_mock):
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_logger.py 2.31.35-1/tests/unit/autoprompt/test_logger.py
--- 2.23.6-1/tests/unit/autoprompt/test_logger.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_logger.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,16 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import contextlib
-import logging
 import io
+import logging
 
 from prompt_toolkit.buffer import Buffer
-from awscli.autoprompt.logger import PromptToolkitHandler
 
+from awscli.autoprompt.logger import PromptToolkitHandler
 from awscli.testutils import mock, unittest
 
 
 class TestPromptToolkitHandler(unittest.TestCase):
-
     @mock.patch('awscli.autoprompt.logger.get_app')
     def test_can_log_to_prompter(self, get_app):
         handler = PromptToolkitHandler()
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_output.py 2.31.35-1/tests/unit/autoprompt/test_output.py
--- 2.23.6-1/tests/unit/autoprompt/test_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,56 +12,67 @@
 # language governing permissions and limitations under the License.
 import json
 
-from awscli.clidriver import create_clidriver
 from awscli.autocomplete import parser
 from awscli.autoprompt.output import OutputGetter
-
+from awscli.clidriver import create_clidriver
 from awscli.testutils import unittest
 from tests.unit.autocomplete import InMemoryIndex
 
 
 class TestOutputGetter(unittest.TestCase):
     def setUp(self):
-        index = InMemoryIndex({
-            'command_names': {
-                '': [('aws', None)],
-                'aws': [
-                    ('s3api', 'Amazon Simple Storage Service'),
-                    ('ec2', None)
-                ],
-                'aws.s3api': [('get-object', None)],
-                'aws.ec2': [('bundle-instance', None)],
-            },
-            'arg_names': {
-                '': {
-                    'aws': ['query', 'output'],
-                },
-                'aws.s3api': {
-                    'get-object': [],
-                },
-                'aws.ec2': {
-                    'bundle-instance': [],
-                },
-            },
-            'arg_data': {
-                '': {
-                    'aws': {
-                        'query': (
-                            'query', 'string', 'aws', '', None, False,
-                            False),
-                        'output': (
-                            'output', 'string', 'aws', '', None, False,
-                            False),
-                    }
-                },
-                'aws.s3api': {
-                    'get-object': {}
-                },
-                'aws.ec2': {
-                    'bundle-instance': {},
+        index = InMemoryIndex(
+            {
+                'command_names': {
+                    '': [('aws', None)],
+                    'aws': [
+                        ('s3api', 'Amazon Simple Storage Service'),
+                        ('ec2', None),
+                    ],
+                    'aws.s3api': [('get-object', None)],
+                    'aws.ec2': [('bundle-instance', None)],
+                },
+                'arg_names': {
+                    '': {
+                        'aws': ['query', 'output'],
+                    },
+                    'aws.s3api': {
+                        'get-object': [],
+                    },
+                    'aws.ec2': {
+                        'bundle-instance': [],
+                    },
+                },
+                'arg_data': {
+                    '': {
+                        'aws': {
+                            'query': (
+                                'query',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                            'output': (
+                                'output',
+                                'string',
+                                'aws',
+                                '',
+                                None,
+                                False,
+                                False,
+                            ),
+                        }
+                    },
+                    'aws.s3api': {'get-object': {}},
+                    'aws.ec2': {
+                        'bundle-instance': {},
+                    },
                 },
             }
-        })
+        )
         self.parser = parser.CLIParser(index)
         self.driver = create_clidriver()
         self.driver.session.set_config_variable('output', 'json')
@@ -123,7 +134,9 @@ class TestOutputGetter(unittest.TestCase
         self.assertNotIn('omap', content)
 
     def test_yaml_output_can_parse_datetime(self):
-        parsed = self.parser.parse('aws ec2 bundle-instance --output yaml '
-                                   '--query BundleTask.StartTime')
+        parsed = self.parser.parse(
+            'aws ec2 bundle-instance --output yaml '
+            '--query BundleTask.StartTime'
+        )
         content = self.base_output_getter.get_output(parsed)
         self.assertEqual('"1970-01-01T00:00:00"\n', content)
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_prompttoolkit.py 2.31.35-1/tests/unit/autoprompt/test_prompttoolkit.py
--- 2.23.6-1/tests/unit/autoprompt/test_prompttoolkit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_prompttoolkit.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,13 +12,14 @@
 # language governing permissions and limitations under the License.
 import logging
 
-from prompt_toolkit.completion import Completion, CompleteEvent
+from prompt_toolkit.completion import CompleteEvent, Completion
 from prompt_toolkit.document import Document
 
 from awscli.autocomplete.completer import CompletionResult
 from awscli.autoprompt.logger import PromptToolkitHandler
 from awscli.autoprompt.prompttoolkit import (
-    PromptToolkitCompleter, loggers_handler_switcher
+    PromptToolkitCompleter,
+    loggers_handler_switcher,
 )
 from awscli.testutils import mock, unittest
 
@@ -28,10 +29,12 @@ class TestPromptToolkitCompleter(unittes
         self.completion_source = mock.Mock()
         self.completion_source.autocomplete = mock.Mock()
 
-    def assert_completions_match_expected(self, actual_completions,
-                                          expected_completion_objects):
+    def assert_completions_match_expected(
+        self, actual_completions, expected_completion_objects
+    ):
         expected_completions = (
-            completion for completion in expected_completion_objects)
+            completion for completion in expected_completion_objects
+        )
         for actual, expected in zip(actual_completions, expected_completions):
             self.assertEqual(actual.text, expected.text)
             self.assertEqual(actual.start_position, expected.start_position)
@@ -40,47 +43,52 @@ class TestPromptToolkitCompleter(unittes
     def test_get_completions(self):
         expected_completion_objects = [
             Completion('create-image', 0, 'create-image', ''),
-            Completion('describe-instances', 0, 'describe-instances', '')
+            Completion('describe-instances', 0, 'describe-instances', ''),
         ]
         self.completion_source.autocomplete.return_value = [
             CompletionResult('create-image'),
-            CompletionResult('describe-instances')
+            CompletionResult('describe-instances'),
         ]
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
     def test_get_completions_has_no_completions(self):
         self.completion_source.autocomplete.return_value = []
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
         self.assertRaises(StopIteration, lambda: next(actual_completions))
 
     def test_get_completions_sorted_by_required(self):
         expected_completion_objects = [
             Completion('--name', 0, '--name (required)', ''),
             Completion('--instance-id', 0, '--instance-id (required)', ''),
-            Completion('--debug', 0, '--debug', '')
+            Completion('--debug', 0, '--debug', ''),
         ]
         self.completion_source.autocomplete.return_value = [
             CompletionResult('--debug', required=False),
             CompletionResult('--name', required=True),
-            CompletionResult('--instance-id', required=True)
+            CompletionResult('--instance-id', required=True),
         ]
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
     def test_get_completions_with_auto_prompt_overrides_filtered_out(self):
         expected_completion_objects = [
             Completion('--name', 0, '--name (required)', ''),
             Completion('--instance-id', 0, '--instance-id (required)', ''),
-            Completion('--debug', 0, '--debug', '')
+            Completion('--debug', 0, '--debug', ''),
         ]
         self.completion_source.autocomplete.return_value = [
             CompletionResult('--debug', required=False),
@@ -90,35 +98,39 @@ class TestPromptToolkitCompleter(unittes
             CompletionResult('--no-cli-auto-prompt', required=False),
         ]
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
     def test_get_completions_with_duplicates_removed(self):
         expected_completion_objects = [
             Completion('--name', 0, '--name (required)', ''),
             Completion('--instance-id', 0, '--instance-id (required)', ''),
-            Completion('--debug', 0, '--debug', '')
+            Completion('--debug', 0, '--debug', ''),
         ]
         self.completion_source.autocomplete.return_value = [
             CompletionResult('--debug', required=False),
             CompletionResult('--debug', required=False),
             CompletionResult('--name', required=True),
             CompletionResult('--name', required=True),
-            CompletionResult('--instance-id', required=True)
+            CompletionResult('--instance-id', required=True),
         ]
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
     def test_get_completions_with_overrides_and_duplicates_removed(self):
         expected_completion_objects = [
             Completion('--name', 0, '--name (required)', ''),
             Completion('--instance-id', 0, '--instance-id (required)', ''),
-            Completion('--debug', 0, '--debug', '')
+            Completion('--debug', 0, '--debug', ''),
         ]
         self.completion_source.autocomplete.return_value = [
             CompletionResult('--debug', required=False),
@@ -130,34 +142,58 @@ class TestPromptToolkitCompleter(unittes
             CompletionResult('--no-cli-auto-prompt', required=False),
         ]
         self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
     def test_get_completions_with_display_meta(self):
         expected_completion_objects = [
-            Completion('--name', 0, '--name (required)',
-                       '[string] A name for the new image.'),
-            Completion('--instance-id', 0, '--instance-id (required)',
-                       '[string] The ID of the instance.'),
-            Completion('--debug', 0, '--debug',
-                       '[boolean] Turn on debug logging.')
-        ]
-        self.completion_source.autocomplete.return_value = [
-            CompletionResult('--debug', required=False, cli_type_name='string',
-                             help_text='The ID of the instance.'),
-            CompletionResult('--name', required=True, cli_type_name='string',
-                             help_text='A name for the new image.'),
-            CompletionResult('--instance-id', required=True,
-                             cli_type_name='boolean',
-                             help_text='Turn on debug logging.')
-        ]
-        self.completer = PromptToolkitCompleter(self.completion_source)
-        actual_completions = self.completer.get_completions(Document(),
-                                                            CompleteEvent())
-        self.assert_completions_match_expected(actual_completions,
-                                               expected_completion_objects)
+            Completion(
+                '--name',
+                0,
+                '--name (required)',
+                '[string] A name for the new image.',
+            ),
+            Completion(
+                '--instance-id',
+                0,
+                '--instance-id (required)',
+                '[string] The ID of the instance.',
+            ),
+            Completion(
+                '--debug', 0, '--debug', '[boolean] Turn on debug logging.'
+            ),
+        ]
+        self.completion_source.autocomplete.return_value = [
+            CompletionResult(
+                '--debug',
+                required=False,
+                cli_type_name='string',
+                help_text='The ID of the instance.',
+            ),
+            CompletionResult(
+                '--name',
+                required=True,
+                cli_type_name='string',
+                help_text='A name for the new image.',
+            ),
+            CompletionResult(
+                '--instance-id',
+                required=True,
+                cli_type_name='boolean',
+                help_text='Turn on debug logging.',
+            ),
+        ]
+        self.completer = PromptToolkitCompleter(self.completion_source)
+        actual_completions = self.completer.get_completions(
+            Document(), CompleteEvent()
+        )
+        self.assert_completions_match_expected(
+            actual_completions, expected_completion_objects
+        )
 
 
 class TestLoggersHandlerSwitcher(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/autoprompt/test_widgets.py 2.31.35-1/tests/unit/autoprompt/test_widgets.py
--- 2.23.6-1/tests/unit/autoprompt/test_widgets.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/autoprompt/test_widgets.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,10 @@
 from prompt_toolkit.buffer import Buffer
 from prompt_toolkit.formatted_text import FormattedText
 from prompt_toolkit.layout import (
-    HSplit, Window, ConditionalContainer, FloatContainer
+    ConditionalContainer,
+    FloatContainer,
+    HSplit,
+    Window,
 )
 from prompt_toolkit.widgets import Dialog
 
@@ -122,8 +125,9 @@ class TestDebugPanelWidget(unittest.Test
     def test_can_create_float_container_with_correct_bindings(self):
         widget = widgets.DebugPanelWidget()
         self.assertIsInstance(widget.float_container, FloatContainer)
-        key_bindings = widget.float_container.key_bindings.\
-                                get_bindings_starting_with_keys('')
+        key_bindings = widget.float_container.key_bindings.get_bindings_starting_with_keys(
+            ''
+        )
         self.assertEqual(len(key_bindings), 1)
         self.assertEqual(key_bindings[0].keys, ('c-s',))
 
@@ -135,28 +139,39 @@ class TestFormatTextProcessor(unittest.T
     def test_can_apply_transformation(self):
         text_input = mock.Mock()
         text_input.fragments = [('', '<style fg="black">[tab]</style>text1')]
-        transformed_text = \
-            self.format_text_processor.apply_transformation(text_input)
+        transformed_text = self.format_text_processor.apply_transformation(
+            text_input
+        )
         actual_fragments = transformed_text.fragments
-        expected_fragments = FormattedText([('fg:black', '[tab]'),
-                                            ('', 'text1')])
+        expected_fragments = FormattedText(
+            [('fg:black', '[tab]'), ('', 'text1')]
+        )
         self.assertEqual(actual_fragments, expected_fragments)
 
     def test_can_apply_transformation_on_multiple_tags(self):
         text_input = mock.Mock()
         text_input.fragments = [
-            ('',
-             ('<style fg="black">[tab]</style>text1'
-              '<style fg="red">[up]</style>text2'
-              '<style fg="blue">[down]</style>text3')
-        )]
-        transformed_text = \
-            self.format_text_processor.apply_transformation(text_input)
+            (
+                '',
+                (
+                    '<style fg="black">[tab]</style>text1'
+                    '<style fg="red">[up]</style>text2'
+                    '<style fg="blue">[down]</style>text3'
+                ),
+            )
+        ]
+        transformed_text = self.format_text_processor.apply_transformation(
+            text_input
+        )
         actual_fragments = transformed_text.fragments
         expected_fragments = FormattedText(
             [
-                ('fg:black', '[tab]'), ('', 'text1'),
-                ('fg:red', '[up]'), ('', 'text2'),
-                ('fg:blue', '[down]'), ('', 'text3')
-            ])
+                ('fg:black', '[tab]'),
+                ('', 'text1'),
+                ('fg:red', '[up]'),
+                ('', 'text2'),
+                ('fg:blue', '[down]'),
+                ('', 'text3'),
+            ]
+        )
         self.assertEqual(actual_fragments, expected_fragments)
diff -pruN 2.23.6-1/tests/unit/bcdoc/test_docstringparser.py 2.31.35-1/tests/unit/bcdoc/test_docstringparser.py
--- 2.23.6-1/tests/unit/bcdoc/test_docstringparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/bcdoc/test_docstringparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,10 +20,9 @@
 # IN THE SOFTWARE.
 import unittest
 
-from awscli.testutils import mock
-
 import awscli.bcdoc.docstringparser as parser
 from awscli.bcdoc.restdoc import ReSTDocument
+from awscli.testutils import mock
 
 
 class TestDocStringParser(unittest.TestCase):
@@ -46,18 +45,16 @@ class TestDocStringParser(unittest.TestC
     def test_nested_lists(self):
         html = "<ul><li>Wello</li><ul><li>Horld</li></ul></ul>"
         result = self.parse(html)
-        self.assert_contains_exact_lines_in_order(result, [
-            b'* Wello',
-            b'  * Horld'
-        ])
+        self.assert_contains_exact_lines_in_order(
+            result, [b'* Wello', b'  * Horld']
+        )
 
     def test_nested_lists_with_extra_white_space(self):
         html = "<ul> <li> Wello</li><ul> <li> Horld</li></ul></ul>"
         result = self.parse(html)
-        self.assert_contains_exact_lines_in_order(result, [
-            b'* Wello',
-            b'  * Horld'
-        ])
+        self.assert_contains_exact_lines_in_order(
+            result, [b'* Wello', b'  * Horld']
+        )
 
 
 class TestHTMLTree(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/bcdoc/test_document.py 2.31.35-1/tests/unit/bcdoc/test_document.py
--- 2.23.6-1/tests/unit/bcdoc/test_document.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/bcdoc/test_document.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,11 +21,11 @@
 # IN THE SOFTWARE.
 #
 import unittest
-from awscli.bcdoc.restdoc import ReSTDocument, DocumentStructure
 
+from awscli.bcdoc.restdoc import DocumentStructure, ReSTDocument
 
-class TestReSTDocument(unittest.TestCase):
 
+class TestReSTDocument(unittest.TestCase):
     def _write_array(self, doc, arr):
         for elt in arr:
             doc.write(elt)
@@ -79,7 +79,8 @@ class TestReSTDocument(unittest.TestCase
         doc = ReSTDocument()
         doc.hrefs['foo'] = 'https://example.com/'
         self.assertEqual(
-            doc.getvalue(), b'\n\n.. _foo: https://example.com/\n')
+            doc.getvalue(), b'\n\n.. _foo: https://example.com/\n'
+        )
 
 
 class TestDocumentStructure(unittest.TestCase):
@@ -102,25 +103,24 @@ class TestDocumentStructure(unittest.Tes
         self.assertEqual(section.name, 'mysection')
 
         # Ensure we can get the section.
-        self.assertEqual(
-            self.doc_structure.get_section('mysection'), section)
+        self.assertEqual(self.doc_structure.get_section('mysection'), section)
 
         # Ensure the path is correct
         self.assertEqual(section.path, ['mydoc', 'mysection'])
 
         # Ensure some of the necessary attributes are passed to the
         # the section.
-        self.assertEqual(section.style.indentation,
-                         self.doc_structure.style.indentation)
-        self.assertEqual(section.translation_map,
-                         self.doc_structure.translation_map)
-        self.assertEqual(section.hrefs,
-                         self.doc_structure.hrefs)
+        self.assertEqual(
+            section.style.indentation, self.doc_structure.style.indentation
+        )
+        self.assertEqual(
+            section.translation_map, self.doc_structure.translation_map
+        )
+        self.assertEqual(section.hrefs, self.doc_structure.hrefs)
 
     def test_delete_section(self):
         section = self.doc_structure.add_new_section('mysection')
-        self.assertEqual(
-            self.doc_structure.get_section('mysection'), section)
+        self.assertEqual(self.doc_structure.get_section('mysection'), section)
         self.doc_structure.delete_section('mysection')
         with self.assertRaises(KeyError):
             section.get_section('mysection')
@@ -128,7 +128,8 @@ class TestDocumentStructure(unittest.Tes
     def test_create_sections_at_instantiation(self):
         sections = ['intro', 'middle', 'end']
         self.doc_structure = DocumentStructure(
-            self.name, section_names=sections)
+            self.name, section_names=sections
+        )
         # Ensure the sections are attached to the new document structure.
         for section_name in sections:
             section = self.doc_structure.get_section(section_name)
@@ -160,14 +161,14 @@ class TestDocumentStructure(unittest.Tes
         self.doc_structure.add_new_section('mysection')
         self.doc_structure.add_new_section('mysection2')
         self.assertEqual(
-            self.doc_structure.available_sections,
-            ['mysection', 'mysection2']
+            self.doc_structure.available_sections, ['mysection', 'mysection2']
         )
 
     def test_context(self):
         context = {'Foo': 'Bar'}
         section = self.doc_structure.add_new_section(
-            'mysection', context=context)
+            'mysection', context=context
+        )
         self.assertEqual(section.context, context)
 
         # Make sure if context is not specified it is empty.
diff -pruN 2.23.6-1/tests/unit/bcdoc/test_style.py 2.31.35-1/tests/unit/bcdoc/test_style.py
--- 2.23.6-1/tests/unit/bcdoc/test_style.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/bcdoc/test_style.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,12 +21,12 @@
 # IN THE SOFTWARE.
 #
 import unittest
-from awscli.bcdoc.style import ReSTStyle
+
 from awscli.bcdoc.restdoc import ReSTDocument
+from awscli.bcdoc.style import ReSTStyle
 
 
 class TestStyle(unittest.TestCase):
-
     def test_spaces(self):
         style = ReSTStyle(None, 4)
         self.assertEqual(style.spaces(), '')
@@ -86,7 +86,7 @@ class TestStyle(unittest.TestCase):
         style.h1('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n*************\nfoobar fiebaz\n*************\n\n'
+            b'\n\n*************\nfoobar fiebaz\n*************\n\n',
         )
 
     def test_h2(self):
@@ -94,7 +94,7 @@ class TestStyle(unittest.TestCase):
         style.h2('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n=============\nfoobar fiebaz\n=============\n\n'
+            b'\n\n=============\nfoobar fiebaz\n=============\n\n',
         )
 
     def test_h3(self):
@@ -102,14 +102,15 @@ class TestStyle(unittest.TestCase):
         style.h3('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n-------------\nfoobar fiebaz\n-------------\n\n'
+            b'\n\n-------------\nfoobar fiebaz\n-------------\n\n',
         )
 
     def test_ref(self):
         style = ReSTStyle(ReSTDocument())
         style.ref('foobar', 'http://foo.bar.com')
-        self.assertEqual(style.doc.getvalue(),
-                b':doc:`foobar <http://foo.bar.com>`')
+        self.assertEqual(
+            style.doc.getvalue(), b':doc:`foobar <http://foo.bar.com>`'
+        )
 
     def test_examples(self):
         style = ReSTStyle(ReSTDocument())
@@ -122,29 +123,25 @@ class TestStyle(unittest.TestCase):
     def test_codeblock(self):
         style = ReSTStyle(ReSTDocument())
         style.codeblock('foobar')
-        self.assertEqual(style.doc.getvalue(),
-                         b'::\n\n  foobar\n\n\n')
+        self.assertEqual(style.doc.getvalue(), b'::\n\n  foobar\n\n\n')
 
     def test_important(self):
         style = ReSTStyle(ReSTDocument())
         style.start_important()
         style.end_important()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. warning::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. warning::\n\n  \n\n')
 
     def test_note(self):
         style = ReSTStyle(ReSTDocument())
         style.start_note()
         style.end_note()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. note::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. note::\n\n  \n\n')
 
     def test_danger(self):
         style = ReSTStyle(ReSTDocument())
         style.start_danger()
         style.end_danger()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. danger::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. danger::\n\n  \n\n')
 
     def test_toctree_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -154,7 +151,7 @@ class TestStyle(unittest.TestCase):
         style.tocitem('bar')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n.. toctree::\n  :maxdepth: 1\n  :titlesonly:\n\n  foo\n  bar\n'
+            b'\n.. toctree::\n  :maxdepth: 1\n  :titlesonly:\n\n  foo\n  bar\n',
         )
 
     def test_toctree_man(self):
@@ -163,8 +160,7 @@ class TestStyle(unittest.TestCase):
         style.toctree()
         style.tocitem('foo')
         style.tocitem('bar')
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n\n* foo\n\n\n* bar\n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n\n* foo\n\n\n* bar\n\n')
 
     def test_hidden_toctree_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -174,7 +170,7 @@ class TestStyle(unittest.TestCase):
         style.hidden_tocitem('bar')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n.. toctree::\n  :maxdepth: 1\n  :hidden:\n\n  foo\n  bar\n'
+            b'\n.. toctree::\n  :maxdepth: 1\n  :hidden:\n\n  foo\n  bar\n',
         )
 
     def test_hidden_toctree_non_html(self):
@@ -183,9 +179,7 @@ class TestStyle(unittest.TestCase):
         style.hidden_toctree()
         style.hidden_tocitem('foo')
         style.hidden_tocitem('bar')
-        self.assertEqual(
-            style.doc.getvalue(), b''
-        )
+        self.assertEqual(style.doc.getvalue(), b'')
 
     def test_href_link(self):
         style = ReSTStyle(ReSTDocument())
@@ -193,8 +187,7 @@ class TestStyle(unittest.TestCase):
         style.doc.write('example')
         style.end_a()
         self.assertEqual(
-            style.doc.getvalue(),
-            b'`example <http://example.org>`__ '
+            style.doc.getvalue(), b'`example <http://example.org>`__ '
         )
 
     def test_escape_href_link(self):
@@ -204,17 +197,14 @@ class TestStyle(unittest.TestCase):
         style.end_a()
         self.assertEqual(
             style.doc.getvalue(),
-            b'`foo\\: the next bar <http://example.org>`__ '
+            b'`foo\\: the next bar <http://example.org>`__ ',
         )
 
     def test_handle_no_text_hrefs(self):
         style = ReSTStyle(ReSTDocument())
         style.start_a(attrs=[('href', 'http://example.org')])
         style.end_a()
-        self.assertEqual(
-            style.doc.getvalue(),
-            b'`<http://example.org>`__ '
-        )
+        self.assertEqual(style.doc.getvalue(), b'`<http://example.org>`__ ')
 
     def test_sphinx_reference_label_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -253,24 +243,25 @@ class TestStyle(unittest.TestCase):
     def test_table_of_contents_with_title_and_depth(self):
         style = ReSTStyle(ReSTDocument())
         style.table_of_contents(title='Foo', depth=2)
-        self.assertEqual(style.doc.getvalue(),
-                         b'.. contents:: Foo\n   :depth: 2\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'.. contents:: Foo\n   :depth: 2\n'
+        )
 
     def test_sphinx_py_class(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_class('FooClass')
         style.end_sphinx_py_class()
         self.assertEqual(
-            style.doc.getvalue(),
-            b'\n\n.. py:class:: FooClass\n\n  \n\n'
+            style.doc.getvalue(), b'\n\n.. py:class:: FooClass\n\n  \n\n'
         )
 
     def test_sphinx_py_method(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_method('method')
         style.end_sphinx_py_method()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. py:method:: method\n\n  \n\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'\n\n.. py:method:: method\n\n  \n\n'
+        )
 
     def test_sphinx_py_method_with_params(self):
         style = ReSTStyle(ReSTDocument())
@@ -278,14 +269,16 @@ class TestStyle(unittest.TestCase):
         style.end_sphinx_py_method()
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n.. py:method:: method(foo=None)\n\n  \n\n')
+            b'\n\n.. py:method:: method(foo=None)\n\n  \n\n',
+        )
 
     def test_sphinx_py_attr(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_attr('Foo')
         style.end_sphinx_py_attr()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. py:attribute:: Foo\n\n  \n\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'\n\n.. py:attribute:: Foo\n\n  \n\n'
+        )
 
     def test_write_py_doc_string(self):
         style = ReSTStyle(ReSTDocument())
@@ -332,15 +325,17 @@ class TestStyle(unittest.TestCase):
         style.doc.handle_data('bar')
         style.end_li()
 
-        self.assertEqual(style.doc.getvalue(),
-                         b"\n\n\n* foo\n\n\n  \n  * bar\n  ")
+        self.assertEqual(
+            style.doc.getvalue(), b"\n\n\n* foo\n\n\n  \n  * bar\n  "
+        )
 
     def test_external_link(self):
         style = ReSTStyle(ReSTDocument())
         style.doc.target = 'html'
         style.external_link('MyLink', 'http://example.com/foo')
-        self.assertEqual(style.doc.getvalue(),
-                         b'`MyLink <http://example.com/foo>`_')
+        self.assertEqual(
+            style.doc.getvalue(), b'`MyLink <http://example.com/foo>`_'
+        )
 
     def test_external_link_in_man_page(self):
         style = ReSTStyle(ReSTDocument())
@@ -352,10 +347,7 @@ class TestStyle(unittest.TestCase):
         style = ReSTStyle(ReSTDocument())
         style.doc.target = 'html'
         style.internal_link('MyLink', '/index')
-        self.assertEqual(
-            style.doc.getvalue(),
-            b':doc:`MyLink </index>`'
-        )
+        self.assertEqual(style.doc.getvalue(), b':doc:`MyLink </index>`')
 
     def test_internal_link_in_man_page(self):
         style = ReSTStyle(ReSTDocument())
diff -pruN 2.23.6-1/tests/unit/botocore/__init__.py 2.31.35-1/tests/unit/botocore/__init__.py
--- 2.23.6-1/tests/unit/botocore/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import copy
+
 from tests import unittest
 
 
 class BaseResponseTest(unittest.TestCase):
-    def assert_response_with_subset_metadata(self, actual_response,
-                                             expected_response):
+    def assert_response_with_subset_metadata(
+        self, actual_response, expected_response
+    ):
         """
         Compares two parsed service responses. For ResponseMetadata, it will
         only assert that the expected is a proper subset of the actual. This
@@ -37,5 +39,8 @@ class BaseResponseTest(unittest.TestCase
         """
         Asserts that a dictionary is a proper subset of another.
         """
-        self.assertTrue(all((k in superset and superset[k] == v)
-                            for k, v in subset.items()))
+        self.assertTrue(
+            all(
+                (k in superset and superset[k] == v) for k, v in subset.items()
+            )
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/auth/test_auth_trait.py 2.31.35-1/tests/unit/botocore/auth/test_auth_trait.py
--- 2.23.6-1/tests/unit/botocore/auth/test_auth_trait.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/auth/test_auth_trait.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-
-from botocore.auth import BaseSigner, resolve_auth_type
+import pytest
+from botocore.auth import (
+    BaseSigner,
+    resolve_auth_scheme_preference,
+    resolve_auth_type,
+)
 from botocore.exceptions import (
     UnknownSignatureVersionError,
     UnsupportedSignatureVersionError,
 )
+
 from tests import mock, unittest
 
 
@@ -39,4 +44,34 @@ class TestAuthTraitResolution(unittest.T
 
     def test_no_known_auth_type(self):
         with self.assertRaises(UnsupportedSignatureVersionError):
-            resolve_auth_type([])
\ No newline at end of file
+            resolve_auth_type([])
+
+
+@pytest.mark.parametrize(
+    "preference_list, auth_options, expected",
+    [
+        (['sigv4', 'httpBearerAuth'], ['smithy.api#httpBearerAuth'], 'bearer'),
+        (['noAuth', 'sigv4'], ['aws.auth#sigv4'], 'v4'),
+        (['foo', 'httpBearerAuth'], ['smithy.api#httpBearerAuth'], 'bearer'),
+        (['noAuth', 'sigv4'], ['smithy.api#noAuth'], 'none'),
+        (['foo'], ['aws.auth#sigv4', 'smithy.api#httpBearerAuth'], 'v4'),
+    ],
+)
+def test_resolve_auth_scheme_preference(
+    preference_list, auth_options, expected
+):
+    assert (
+        resolve_auth_scheme_preference(preference_list, auth_options)
+        == expected
+    )
+
+
+@pytest.mark.parametrize(
+    "preference_list, auth_options",
+    [(['foo'], ['aws.auth#invalidAuth']), (['foo'], [])],
+)
+def test_resolve_auth_scheme_preference_unsupported(
+    preference_list, auth_options
+):
+    with pytest.raises(UnsupportedSignatureVersionError):
+        resolve_auth_scheme_preference(preference_list, auth_options)
diff -pruN 2.23.6-1/tests/unit/botocore/auth/test_signers.py 2.31.35-1/tests/unit/botocore/auth/test_signers.py
--- 2.23.6-1/tests/unit/botocore/auth/test_signers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/auth/test_signers.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,17 +12,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, unittest
+import base64
 import datetime
 import io
-import time
-import base64
 import json
+import time
 
 import botocore.auth
 import botocore.credentials
-from botocore.compat import HTTPHeaders, urlsplit, parse_qs
 from botocore.awsrequest import AWSRequest
+from botocore.compat import HTTPHeaders, parse_qs, urlsplit
+
+from tests import mock, unittest
 
 
 class BaseTestWithFixedDate(unittest.TestCase):
@@ -38,22 +39,22 @@ class BaseTestWithFixedDate(unittest.Tes
 
 
 class TestSigV2(unittest.TestCase):
-
     maxDiff = None
 
     def setUp(self):
         access_key = 'foo'
         secret_key = 'bar'
-        self.credentials = botocore.credentials.Credentials(access_key,
-                                                            secret_key)
+        self.credentials = botocore.credentials.Credentials(
+            access_key, secret_key
+        )
         self.signer = botocore.auth.SigV2Auth(self.credentials)
         self.time_patcher = mock.patch.object(
-            botocore.auth.time, 'gmtime',
-            mock.Mock(wraps=time.gmtime)
+            botocore.auth.time, 'gmtime', mock.Mock(wraps=time.gmtime)
         )
         mocked_time = self.time_patcher.start()
         mocked_time.return_value = time.struct_time(
-            [2014, 6, 20, 8, 40, 23, 4, 171, 0])
+            [2014, 6, 20, 8, 40, 23, 4, 171, 0]
+        )
 
     def tearDown(self):
         self.time_patcher.stop()
@@ -62,23 +63,26 @@ class TestSigV2(unittest.TestCase):
         request = mock.Mock()
         request.url = '/'
         request.method = 'POST'
-        params = {'Foo': u'\u2713'}
+        params = {'Foo': '\u2713'}
         result = self.signer.calc_signature(request, params)
         self.assertEqual(
-            result, ('Foo=%E2%9C%93',
-                     u'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='))
+            result,
+            ('Foo=%E2%9C%93', 'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='),
+        )
 
     def test_fields(self):
         request = AWSRequest()
         request.url = '/'
         request.method = 'POST'
-        request.data = {'Foo': u'\u2713'}
+        request.data = {'Foo': '\u2713'}
         self.signer.add_auth(request)
         self.assertEqual(request.data['AWSAccessKeyId'], 'foo')
-        self.assertEqual(request.data['Foo'], u'\u2713')
+        self.assertEqual(request.data['Foo'], '\u2713')
         self.assertEqual(request.data['Timestamp'], '2014-06-20T08:40:23Z')
-        self.assertEqual(request.data['Signature'],
-                         u'Tiecw+t51tok4dTT8B4bg47zxHEM/KcD55f2/x6K22o=')
+        self.assertEqual(
+            request.data['Signature'],
+            'Tiecw+t51tok4dTT8B4bg47zxHEM/KcD55f2/x6K22o=',
+        )
         self.assertEqual(request.data['SignatureMethod'], 'HmacSHA256')
         self.assertEqual(request.data['SignatureVersion'], '2')
 
@@ -88,38 +92,41 @@ class TestSigV2(unittest.TestCase):
         request.url = '/'
         request.method = 'POST'
         params = {
-            'Foo': u'\u2713',
-            'Signature': u'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='
+            'Foo': '\u2713',
+            'Signature': 'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q=',
         }
         result = self.signer.calc_signature(request, params)
         self.assertEqual(
-            result, ('Foo=%E2%9C%93',
-                     u'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='))
+            result,
+            ('Foo=%E2%9C%93', 'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='),
+        )
 
     def test_get(self):
         request = AWSRequest()
         request.url = '/'
         request.method = 'GET'
-        request.params = {'Foo': u'\u2713'}
+        request.params = {'Foo': '\u2713'}
         self.signer.add_auth(request)
         self.assertEqual(request.params['AWSAccessKeyId'], 'foo')
-        self.assertEqual(request.params['Foo'], u'\u2713')
+        self.assertEqual(request.params['Foo'], '\u2713')
         self.assertEqual(request.params['Timestamp'], '2014-06-20T08:40:23Z')
-        self.assertEqual(request.params['Signature'],
-                         u'Un97klqZCONP65bA1+Iv4H3AcB2I40I4DBvw5ZERFPw=')
+        self.assertEqual(
+            request.params['Signature'],
+            'Un97klqZCONP65bA1+Iv4H3AcB2I40I4DBvw5ZERFPw=',
+        )
         self.assertEqual(request.params['SignatureMethod'], 'HmacSHA256')
         self.assertEqual(request.params['SignatureVersion'], '2')
 
 
 class TestSigV3(unittest.TestCase):
-
     maxDiff = None
 
     def setUp(self):
         self.access_key = 'access_key'
         self.secret_key = 'secret_key'
-        self.credentials = botocore.credentials.Credentials(self.access_key,
-                                                            self.secret_key)
+        self.credentials = botocore.credentials.Credentials(
+            self.access_key, self.secret_key
+        )
         self.auth = botocore.auth.SigV3Auth(self.credentials)
         self.date_mock = mock.patch('botocore.auth.formatdate')
         self.formatdate = self.date_mock.start()
@@ -135,12 +142,16 @@ class TestSigV3(unittest.TestCase):
         self.auth.add_auth(request)
         self.assertEqual(
             request.headers['X-Amzn-Authorization'],
-            ('AWS3-HTTPS AWSAccessKeyId=access_key,Algorithm=HmacSHA256,'
-             'Signature=M245fo86nVKI8rLpH4HgWs841sBTUKuwciiTpjMDgPs='))
+            (
+                'AWS3-HTTPS AWSAccessKeyId=access_key,Algorithm=HmacSHA256,'
+                'Signature=M245fo86nVKI8rLpH4HgWs841sBTUKuwciiTpjMDgPs='
+            ),
+        )
 
     def test_resign_with_token(self):
         credentials = botocore.credentials.Credentials(
-            access_key='foo', secret_key='bar', token='baz')
+            access_key='foo', secret_key='bar', token='baz'
+        )
         auth = botocore.auth.SigV3Auth(credentials)
         request = AWSRequest()
         request.headers['Date'] = 'Thu, 17 Nov 2005 18:49:58 GMT'
@@ -151,21 +162,21 @@ class TestSigV3(unittest.TestCase):
         # Resigning the request shouldn't change the authorization
         # header.
         auth.add_auth(request)
-        self.assertEqual(request.headers.get_all('X-Amzn-Authorization'),
-                         [original_auth])
+        self.assertEqual(
+            request.headers.get_all('X-Amzn-Authorization'), [original_auth]
+        )
 
 
 class TestS3SigV4Auth(BaseTestWithFixedDate):
-
     AuthClass = botocore.auth.S3SigV4Auth
     maxDiff = None
 
     def setUp(self):
-        super(TestS3SigV4Auth, self).setUp()
+        super().setUp()
         self.credentials = botocore.credentials.Credentials(
-            access_key='foo', secret_key='bar', token='baz')
-        self.auth = self.AuthClass(
-            self.credentials, 'ec2', 'eu-central-1')
+            access_key='foo', secret_key='bar', token='baz'
+        )
+        self.auth = self.AuthClass(self.credentials, 'ec2', 'eu-central-1')
         self.request = AWSRequest(data=io.BytesIO(b"foo bar baz"))
         self.request.method = 'PUT'
         self.request.url = 'https://s3.eu-central-1.amazonaws.com/'
@@ -174,33 +185,35 @@ class TestS3SigV4Auth(BaseTestWithFixedD
         self.s3_config = {}
         self.client_config.s3 = self.s3_config
 
-        self.request.context = {
-            'client_config': self.client_config
-        }
+        self.request.context = {'client_config': self.client_config}
 
     def test_resign_with_content_hash(self):
         self.auth.add_auth(self.request)
         original_auth = self.request.headers['Authorization']
 
         self.auth.add_auth(self.request)
-        self.assertEqual(self.request.headers.get_all('Authorization'),
-                         [original_auth])
+        self.assertEqual(
+            self.request.headers.get_all('Authorization'), [original_auth]
+        )
 
     def test_signature_is_not_normalized(self):
         request = AWSRequest()
         request.url = 'https://s3.amazonaws.com/bucket/foo/./bar/../bar'
         request.method = 'GET'
-        credentials = botocore.credentials.Credentials('access_key',
-                                                       'secret_key')
+        credentials = botocore.credentials.Credentials(
+            'access_key', 'secret_key'
+        )
         auth = self.AuthClass(credentials, 's3', 'us-east-1')
         auth.add_auth(request)
         self.assertTrue(
-            request.headers['Authorization'].startswith('AWS4-HMAC-SHA256'))
+            request.headers['Authorization'].startswith('AWS4-HMAC-SHA256')
+        )
 
     def test_query_string_params_in_urls(self):
         if not hasattr(self.AuthClass, 'canonical_query_string'):
-            raise unittest.SkipTest('%s does not expose interim steps' %
-                                    self.AuthClass.__name__)
+            raise unittest.SkipTest(
+                f'{self.AuthClass.__name__} does not expose interim steps'
+            )
 
         request = AWSRequest()
         request.url = (
@@ -216,26 +229,31 @@ class TestS3SigV4Auth(BaseTestWithFixedD
         cqs = self.auth.canonical_query_string(request)
         self.assertEqual('marker=%C3%A4%C3%B6%C3%BC-01.txt&prefix=', cqs)
 
-    def _test_blacklist_header(self, header, value):
+    def _test_blocklist_header(self, header, value):
         request = AWSRequest()
         request.url = 'https://s3.amazonaws.com/bucket/foo'
         request.method = 'PUT'
         request.headers[header] = value
-        credentials = botocore.credentials.Credentials('access_key',
-                                                       'secret_key')
+        credentials = botocore.credentials.Credentials(
+            'access_key', 'secret_key'
+        )
         auth = self.AuthClass(credentials, 's3', 'us-east-1')
         auth.add_auth(request)
         self.assertNotIn(header, request.headers['Authorization'])
 
-    def test_blacklist_expect_headers(self):
-        self._test_blacklist_header('expect', '100-continue')
+    def test_blocklist_expect_headers(self):
+        self._test_blocklist_header('expect', '100-continue')
+
+    def test_blocklist_trace_id(self):
+        self._test_blocklist_header(
+            'x-amzn-trace-id', 'Root=foo;Parent=bar;Sampleid=1'
+        )
 
-    def test_blacklist_trace_id(self):
-        self._test_blacklist_header('x-amzn-trace-id',
-                                    'Root=foo;Parent=bar;Sampleid=1')
+    def test_blocklist_user_agent_header(self):
+        self._test_blocklist_header('user-agent', 'botocore/1.4.11')
 
-    def test_blacklist_headers(self):
-        self._test_blacklist_header('user-agent', 'botocore/1.4.11')
+    def test_blocklist_transfer_encoding_header(self):
+        self._test_blocklist_header('transfer-encoding', 'chunked')
 
     def test_uses_sha256_if_config_value_is_true(self):
         self.client_config.s3['payload_signing_enabled'] = True
@@ -318,11 +336,11 @@ class TestS3SigV4Auth(BaseTestWithFixedD
 class TestSigV4(unittest.TestCase):
     def setUp(self):
         self.credentials = botocore.credentials.Credentials(
-            access_key='foo', secret_key='bar')
+            access_key='foo', secret_key='bar'
+        )
 
     def create_signer(self, service_name='myservice', region='us-west-2'):
-        auth = botocore.auth.SigV4Auth(
-            self.credentials, service_name, region)
+        auth = botocore.auth.SigV4Auth(self.credentials, service_name, region)
         return auth
 
     def test_canonical_query_string(self):
@@ -338,9 +356,11 @@ class TestSigV4(unittest.TestCase):
         auth = self.create_signer('cloudsearchdomain', 'us-west-2')
         actual = auth.canonical_query_string(request)
         # Here 'q' should come before 'q.options'.
-        expected = ("format=sdk&pretty=true&q=George%20Lucas&q.options=%7B%22"
-                    "defaultOperator%22%3A%20%22and%22%2C%20%22fields%22%3A%5B"
-                    "%22directors%5E10%22%5D%7D")
+        expected = (
+            "format=sdk&pretty=true&q=George%20Lucas&q.options=%7B%22"
+            "defaultOperator%22%3A%20%22and%22%2C%20%22fields%22%3A%5B"
+            "%22directors%5E10%22%5D%7D"
+        )
         self.assertEqual(actual, expected)
 
     def test_thread_safe_timestamp(self):
@@ -355,8 +375,10 @@ class TestSigV4(unittest.TestCase):
         request.method = 'GET'
         auth = self.create_signer('cloudsearchdomain', 'us-west-2')
         with mock.patch.object(
-                botocore.auth.datetime, 'datetime',
-                mock.Mock(wraps=datetime.datetime)) as mock_datetime:
+            botocore.auth.datetime,
+            'datetime',
+            mock.Mock(wraps=datetime.datetime),
+        ) as mock_datetime:
             original_utcnow = datetime.datetime(2014, 1, 1, 0, 0)
 
             mock_datetime.utcnow.return_value = original_utcnow
@@ -368,7 +390,8 @@ class TestSigV4(unittest.TestCase):
             self.assertIn('20140101', request.headers['Authorization'])
             # Now suppose the utc time becomes the next day all of a sudden
             mock_datetime.utcnow.return_value = datetime.datetime(
-                2014, 1, 2, 0, 0)
+                2014, 1, 2, 0, 0
+            )
             # Smaller methods like the canonical request and string_to_sign
             # should  have the timestamp attached to the request in their
             # body and not what the time is now mocked as. This is to ensure
@@ -383,27 +406,29 @@ class TestSigV4(unittest.TestCase):
 
     def test_payload_is_binary_file(self):
         request = AWSRequest()
-        request.data = io.BytesIO(u'\u2713'.encode('utf-8'))
+        request.data = io.BytesIO('\u2713'.encode())
         request.url = 'https://amazonaws.com'
         auth = self.create_signer()
         payload = auth.payload(request)
         self.assertEqual(
             payload,
-            '1dabba21cdad44541f6b15796f8d22978fc7ea10c46aeceeeeb66c23b3ac7604')
+            '1dabba21cdad44541f6b15796f8d22978fc7ea10c46aeceeeeb66c23b3ac7604',
+        )
 
     def test_payload_is_bytes_type(self):
         request = AWSRequest()
-        request.data = u'\u2713'.encode('utf-8')
+        request.data = '\u2713'.encode()
         request.url = 'https://amazonaws.com'
         auth = self.create_signer()
         payload = auth.payload(request)
         self.assertEqual(
             payload,
-            '1dabba21cdad44541f6b15796f8d22978fc7ea10c46aeceeeeb66c23b3ac7604')
+            '1dabba21cdad44541f6b15796f8d22978fc7ea10c46aeceeeeb66c23b3ac7604',
+        )
 
     def test_payload_not_signed_if_disabled_in_context(self):
         request = AWSRequest()
-        request.data = u'\u2713'.encode('utf-8')
+        request.data = '\u2713'.encode()
         request.url = 'https://amazonaws.com'
         request.context['payload_signing_enabled'] = False
         auth = self.create_signer()
@@ -412,7 +437,7 @@ class TestSigV4(unittest.TestCase):
 
     def test_content_sha256_set_if_payload_signing_disabled(self):
         request = AWSRequest()
-        request.data = io.BytesIO(u'\u2713'.encode('utf-8'))
+        request.data = io.BytesIO('\u2713'.encode())
         request.url = 'https://amazonaws.com'
         request.context['payload_signing_enabled'] = False
         request.method = 'PUT'
@@ -473,14 +498,14 @@ class TestSigV4(unittest.TestCase):
 
 
 class TestSigV4Resign(BaseTestWithFixedDate):
-
     maxDiff = None
     AuthClass = botocore.auth.SigV4Auth
 
     def setUp(self):
-        super(TestSigV4Resign, self).setUp()
+        super().setUp()
         self.credentials = botocore.credentials.Credentials(
-            access_key='foo', secret_key='bar', token='baz')
+            access_key='foo', secret_key='bar', token='baz'
+        )
         self.auth = self.AuthClass(self.credentials, 'ec2', 'us-west-2')
         self.request = AWSRequest()
         self.request.method = 'PUT'
@@ -492,16 +517,18 @@ class TestSigV4Resign(BaseTestWithFixedD
         original_auth = self.request.headers['Authorization']
 
         self.auth.add_auth(self.request)
-        self.assertEqual(self.request.headers.get_all('Authorization'),
-                         [original_auth])
+        self.assertEqual(
+            self.request.headers.get_all('Authorization'), [original_auth]
+        )
 
     def test_sigv4_without_date(self):
         self.auth.add_auth(self.request)
         original_auth = self.request.headers['Authorization']
 
         self.auth.add_auth(self.request)
-        self.assertEqual(self.request.headers.get_all('Authorization'),
-                         [original_auth])
+        self.assertEqual(
+            self.request.headers.get_all('Authorization'), [original_auth]
+        )
 
 
 class BasePresignTest(unittest.TestCase):
@@ -516,26 +543,29 @@ class BasePresignTest(unittest.TestCase)
 
 
 class TestSigV4Presign(BasePresignTest):
-
     maxDiff = None
     AuthClass = botocore.auth.SigV4QueryAuth
 
     def setUp(self):
         self.access_key = 'access_key'
         self.secret_key = 'secret_key'
-        self.credentials = botocore.credentials.Credentials(self.access_key,
-                                                            self.secret_key)
+        self.credentials = botocore.credentials.Credentials(
+            self.access_key, self.secret_key
+        )
         self.service_name = 'myservice'
         self.region_name = 'myregion'
         self.auth = self.AuthClass(
-            self.credentials, self.service_name, self.region_name, expires=60)
+            self.credentials, self.service_name, self.region_name, expires=60
+        )
         self.datetime_patcher = mock.patch.object(
-            botocore.auth.datetime, 'datetime',
-            mock.Mock(wraps=datetime.datetime)
+            botocore.auth.datetime,
+            'datetime',
+            mock.Mock(wraps=datetime.datetime),
         )
         mocked_datetime = self.datetime_patcher.start()
         mocked_datetime.utcnow.return_value = datetime.datetime(
-            2014, 1, 1, 0, 0)
+            2014, 1, 1, 0, 0
+        )
 
     def tearDown(self):
         self.datetime_patcher.stop()
@@ -548,14 +578,20 @@ class TestSigV4Presign(BasePresignTest):
         query_string = self.get_parsed_query_string(request)
         self.assertEqual(
             query_string,
-            {'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
-             'X-Amz-Credential': ('access_key/20140101/myregion/'
-                                  'myservice/aws4_request'),
-             'X-Amz-Date': '20140101T000000Z',
-             'X-Amz-Expires': '60',
-             'X-Amz-Signature': ('c70e0bcdb4cd3ee324f71c78195445b878'
-                                 '8315af0800bbbdbbb6d05a616fb84c'),
-             'X-Amz-SignedHeaders': 'host'})
+            {
+                'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
+                'X-Amz-Credential': (
+                    'access_key/20140101/myregion/' 'myservice/aws4_request'
+                ),
+                'X-Amz-Date': '20140101T000000Z',
+                'X-Amz-Expires': '60',
+                'X-Amz-Signature': (
+                    'c70e0bcdb4cd3ee324f71c78195445b878'
+                    '8315af0800bbbdbbb6d05a616fb84c'
+                ),
+                'X-Amz-SignedHeaders': 'host',
+            },
+        )
 
     def test_operation_params_before_auth_params(self):
         # The spec is picky about this.
@@ -564,8 +600,7 @@ class TestSigV4Presign(BasePresignTest):
         request.url = 'https://ec2.us-east-1.amazonaws.com/?Action=MyOperation'
         self.auth.add_auth(request)
         # Verify auth params come after the existing params.
-        self.assertIn(
-            '?Action=MyOperation&X-Amz', request.url)
+        self.assertIn('?Action=MyOperation&X-Amz', request.url)
 
     def test_operation_params_before_auth_params_in_body(self):
         request = AWSRequest()
@@ -575,8 +610,7 @@ class TestSigV4Presign(BasePresignTest):
         self.auth.add_auth(request)
         # Same situation, the params from request.data come before the auth
         # params in the query string.
-        self.assertIn(
-            '?Action=MyOperation&X-Amz', request.url)
+        self.assertIn('?Action=MyOperation&X-Amz', request.url)
 
     def test_presign_with_spaces_in_param(self):
         request = AWSRequest()
@@ -598,11 +632,13 @@ class TestSigV4Presign(BasePresignTest):
 
     def test_s3_sigv4_presign(self):
         auth = botocore.auth.S3SigV4QueryAuth(
-            self.credentials, self.service_name, self.region_name, expires=60)
+            self.credentials, self.service_name, self.region_name, expires=60
+        )
         request = AWSRequest()
         request.method = 'GET'
         request.url = (
-            'https://s3.us-west-2.amazonaws.com/mybucket/keyname/.bar')
+            'https://s3.us-west-2.amazonaws.com/mybucket/keyname/.bar'
+        )
         auth.add_auth(request)
         query_string = self.get_parsed_query_string(request)
         # We use a different payload:
@@ -610,26 +646,34 @@ class TestSigV4Presign(BasePresignTest):
         # which will result in a different X-Amz-Signature:
         self.assertEqual(
             query_string,
-            {'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
-             'X-Amz-Credential': ('access_key/20140101/myregion/'
-                                  'myservice/aws4_request'),
-             'X-Amz-Date': '20140101T000000Z',
-             'X-Amz-Expires': '60',
-             'X-Amz-Signature': ('ac1b8b9e47e8685c5c963d75e35e8741d55251'
-                                 'cd955239cc1efad4dc7201db66'),
-             'X-Amz-SignedHeaders': 'host'})
+            {
+                'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
+                'X-Amz-Credential': (
+                    'access_key/20140101/myregion/' 'myservice/aws4_request'
+                ),
+                'X-Amz-Date': '20140101T000000Z',
+                'X-Amz-Expires': '60',
+                'X-Amz-Signature': (
+                    'ac1b8b9e47e8685c5c963d75e35e8741d55251'
+                    'cd955239cc1efad4dc7201db66'
+                ),
+                'X-Amz-SignedHeaders': 'host',
+            },
+        )
 
     def test_presign_with_security_token(self):
         self.credentials.token = 'security-token'
         auth = botocore.auth.S3SigV4QueryAuth(
-            self.credentials, self.service_name, self.region_name, expires=60)
+            self.credentials, self.service_name, self.region_name, expires=60
+        )
         request = AWSRequest()
         request.method = 'GET'
         request.url = 'https://ec2.us-east-1.amazonaws.com/'
         auth.add_auth(request)
         query_string = self.get_parsed_query_string(request)
         self.assertEqual(
-            query_string['X-Amz-Security-Token'], 'security-token')
+            query_string['X-Amz-Security-Token'], 'security-token'
+        )
 
     def test_presign_where_body_is_json_bytes(self):
         request = AWSRequest()
@@ -641,14 +685,16 @@ class TestSigV4Presign(BasePresignTest):
         expected_query_string = {
             'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
             'X-Amz-Credential': (
-                'access_key/20140101/myregion/myservice/aws4_request'),
+                'access_key/20140101/myregion/myservice/aws4_request'
+            ),
             'X-Amz-Expires': '60',
             'X-Amz-Date': '20140101T000000Z',
             'X-Amz-Signature': (
                 '8e1d372d168d532313ce6df8f64a7dc51d'
-                'e6f312a9cfba6e5b345d8a771e839c'),
+                'e6f312a9cfba6e5b345d8a771e839c'
+            ),
             'X-Amz-SignedHeaders': 'host',
-            'Param': 'value'
+            'Param': 'value',
         }
         self.assertEqual(query_string, expected_query_string)
 
@@ -662,14 +708,16 @@ class TestSigV4Presign(BasePresignTest):
         expected_query_string = {
             'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
             'X-Amz-Credential': (
-                'access_key/20140101/myregion/myservice/aws4_request'),
+                'access_key/20140101/myregion/myservice/aws4_request'
+            ),
             'X-Amz-Expires': '60',
             'X-Amz-Date': '20140101T000000Z',
             'X-Amz-Signature': (
                 '8e1d372d168d532313ce6df8f64a7dc51d'
-                'e6f312a9cfba6e5b345d8a771e839c'),
+                'e6f312a9cfba6e5b345d8a771e839c'
+            ),
             'X-Amz-SignedHeaders': 'host',
-            'Param': 'value'
+            'Param': 'value',
         }
         self.assertEqual(query_string, expected_query_string)
 
@@ -691,7 +739,8 @@ class BaseS3PresignPostTest(unittest.Tes
         self.access_key = 'access_key'
         self.secret_key = 'secret_key'
         self.credentials = botocore.credentials.Credentials(
-            self.access_key, self.secret_key)
+            self.access_key, self.secret_key
+        )
 
         self.service_name = 'myservice'
         self.region_name = 'myregion'
@@ -704,7 +753,7 @@ class BaseS3PresignPostTest(unittest.Tes
                 {"acl": "public-read"},
                 {"bucket": self.bucket},
                 ["starts-with", "$key", self.key],
-            ]
+            ],
         }
         self.fields = {
             'key': self.key,
@@ -712,7 +761,7 @@ class BaseS3PresignPostTest(unittest.Tes
         }
 
         self.request = AWSRequest()
-        self.request.url = 'https://s3.amazonaws.com/%s' % self.bucket
+        self.request.url = f'https://s3.amazonaws.com/{self.bucket}'
         self.request.method = 'POST'
 
         self.request.context['s3-presign-post-fields'] = self.fields
@@ -721,16 +770,19 @@ class BaseS3PresignPostTest(unittest.Tes
 
 class TestS3SigV4Post(BaseS3PresignPostTest):
     def setUp(self):
-        super(TestS3SigV4Post, self).setUp()
+        super().setUp()
         self.auth = botocore.auth.S3SigV4PostAuth(
-            self.credentials, self.service_name, self.region_name)
+            self.credentials, self.service_name, self.region_name
+        )
         self.datetime_patcher = mock.patch.object(
-            botocore.auth.datetime, 'datetime',
-            mock.Mock(wraps=datetime.datetime)
+            botocore.auth.datetime,
+            'datetime',
+            mock.Mock(wraps=datetime.datetime),
         )
         mocked_datetime = self.datetime_patcher.start()
         mocked_datetime.utcnow.return_value = datetime.datetime(
-            2014, 1, 1, 0, 0)
+            2014, 1, 1, 0, 0
+        )
 
     def tearDown(self):
         self.datetime_patcher.stop()
@@ -741,36 +793,43 @@ class TestS3SigV4Post(BaseS3PresignPostT
         self.assertEqual(result_fields['x-amz-algorithm'], 'AWS4-HMAC-SHA256')
         self.assertEqual(
             result_fields['x-amz-credential'],
-            'access_key/20140101/myregion/myservice/aws4_request')
-        self.assertEqual(
-            result_fields['x-amz-date'],
-            '20140101T000000Z')
+            'access_key/20140101/myregion/myservice/aws4_request',
+        )
+        self.assertEqual(result_fields['x-amz-date'], '20140101T000000Z')
 
-        result_policy = json.loads(base64.b64decode(
-            result_fields['policy']).decode('utf-8'))
-        self.assertEqual(result_policy['expiration'],
-                         '2007-12-01T12:00:00.000Z')
+        result_policy = json.loads(
+            base64.b64decode(result_fields['policy']).decode('utf-8')
+        )
+        self.assertEqual(
+            result_policy['expiration'], '2007-12-01T12:00:00.000Z'
+        )
         self.assertEqual(
             result_policy['conditions'],
-            [{"acl": "public-read"}, {"bucket": "mybucket"},
-             ["starts-with", "$key", "mykey"],
-             {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
-             {"x-amz-credential":
-              "access_key/20140101/myregion/myservice/aws4_request"},
-             {"x-amz-date": "20140101T000000Z"}])
+            [
+                {"acl": "public-read"},
+                {"bucket": "mybucket"},
+                ["starts-with", "$key", "mykey"],
+                {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
+                {
+                    "x-amz-credential": "access_key/20140101/myregion/myservice/aws4_request"
+                },
+                {"x-amz-date": "20140101T000000Z"},
+            ],
+        )
         self.assertIn('x-amz-signature', result_fields)
 
     def test_presign_post_with_security_token(self):
         self.credentials.token = 'my-token'
         self.auth = botocore.auth.S3SigV4PostAuth(
-            self.credentials, self.service_name, self.region_name)
+            self.credentials, self.service_name, self.region_name
+        )
         self.auth.add_auth(self.request)
         result_fields = self.request.context['s3-presign-post-fields']
         self.assertEqual(result_fields['x-amz-security-token'], 'my-token')
 
     def test_empty_fields_and_policy(self):
         self.request = AWSRequest()
-        self.request.url = 'https://s3.amazonaws.com/%s' % self.bucket
+        self.request.url = f'https://s3.amazonaws.com/{self.bucket}'
         self.request.method = 'POST'
         self.auth.add_auth(self.request)
 
@@ -778,17 +837,21 @@ class TestS3SigV4Post(BaseS3PresignPostT
         self.assertEqual(result_fields['x-amz-algorithm'], 'AWS4-HMAC-SHA256')
         self.assertEqual(
             result_fields['x-amz-credential'],
-            'access_key/20140101/myregion/myservice/aws4_request')
-        self.assertEqual(
-            result_fields['x-amz-date'],
-            '20140101T000000Z')
+            'access_key/20140101/myregion/myservice/aws4_request',
+        )
+        self.assertEqual(result_fields['x-amz-date'], '20140101T000000Z')
 
-        result_policy = json.loads(base64.b64decode(
-            result_fields['policy']).decode('utf-8'))
+        result_policy = json.loads(
+            base64.b64decode(result_fields['policy']).decode('utf-8')
+        )
         self.assertEqual(
             result_policy['conditions'],
-            [{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
-             {"x-amz-credential":
-              "access_key/20140101/myregion/myservice/aws4_request"},
-             {"x-amz-date": "20140101T000000Z"}])
+            [
+                {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
+                {
+                    "x-amz-credential": "access_key/20140101/myregion/myservice/aws4_request"
+                },
+                {"x-amz-date": "20140101T000000Z"},
+            ],
+        )
         self.assertIn('x-amz-signature', result_fields)
diff -pruN 2.23.6-1/tests/unit/botocore/auth/test_sigv4.py 2.31.35-1/tests/unit/botocore/auth/test_sigv4.py
--- 2.23.6-1/tests/unit/botocore/auth/test_sigv4.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/auth/test_sigv4.py	2025-11-12 19:17:29.000000000 +0000
@@ -22,22 +22,22 @@ placed in ./aws4_testsuite, and we're us
 generate testcases based on these files.
 
 """
-import os
-import logging
-import io
+
 import datetime
+import io
+import logging
+import os
 import re
 from http.server import BaseHTTPRequestHandler
-from botocore.compat import urlsplit, parse_qsl
 
-import pytest
-
-from tests import FreezeTime
 import botocore.auth
 import botocore.crt.auth
+import pytest
 from botocore.awsrequest import AWSRequest
+from botocore.compat import parse_qsl, urlsplit
 from botocore.credentials import Credentials
 
+from tests import FreezeTime
 
 SECRET_KEY = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"
 ACCESS_KEY = 'AKIDEXAMPLE'
@@ -46,7 +46,8 @@ SERVICE = 'service'
 REGION = 'us-east-1'
 
 TESTSUITE_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), 'aws4_testsuite')
+    os.path.dirname(os.path.abspath(__file__)), 'aws4_testsuite'
+)
 
 # The following tests are not run.  Each test has a comment as
 # to why the test is being ignored.
@@ -78,7 +79,7 @@ class RawHTTPRequest(BaseHTTPRequestHand
 
 
 def generate_test_cases():
-    for (dirpath, dirnames, filenames) in os.walk(TESTSUITE_DIR):
+    for dirpath, dirnames, filenames in os.walk(TESTSUITE_DIR):
         if not any(f.endswith('.req') for f in filenames):
             continue
 
@@ -121,7 +122,7 @@ def create_request_from_raw_request(raw_
     # so we need decode this into utf-8.
     if isinstance(raw.path, str):
         raw.path = raw.path.encode('iso-8859-1').decode('utf-8')
-    url = 'https://%s%s' % (host, raw.path)
+    url = f'https://{host}{raw.path}'
     if '?' in url:
         split_url = urlsplit(url)
         params = dict(parse_qsl(split_url.query))
@@ -138,22 +139,35 @@ def _test_signature_version_4(test_case)
 
     auth = botocore.auth.SigV4Auth(test_case.credentials, SERVICE, REGION)
     actual_canonical_request = auth.canonical_request(request)
-    actual_string_to_sign = auth.string_to_sign(request,
-                                                actual_canonical_request)
+    actual_string_to_sign = auth.string_to_sign(
+        request, actual_canonical_request
+    )
     auth.add_auth(request)
     actual_auth_header = request.headers['Authorization']
 
     # Some stuff only works right when you go through auth.add_auth()
     # So don't assert the interim steps unless the end result was wrong.
     if actual_auth_header != test_case.authorization_header:
-        assert_equal(actual_canonical_request, test_case.canonical_request,
-                     test_case.raw_request, 'canonical_request')
+        assert_equal(
+            actual_canonical_request,
+            test_case.canonical_request,
+            test_case.raw_request,
+            'canonical_request',
+        )
 
-        assert_equal(actual_string_to_sign, test_case.string_to_sign,
-                     test_case.raw_request, 'string_to_sign')
+        assert_equal(
+            actual_string_to_sign,
+            test_case.string_to_sign,
+            test_case.raw_request,
+            'string_to_sign',
+        )
 
-        assert_equal(actual_auth_header, test_case.authorization_header,
-                     test_case.raw_request, 'authheader')
+        assert_equal(
+            actual_auth_header,
+            test_case.authorization_header,
+            test_case.raw_request,
+            'authheader',
+        )
 
 
 def _test_crt_signature_version_4(test_case):
@@ -163,44 +177,51 @@ def _test_crt_signature_version_4(test_c
     # Use CRT logging to diagnose interim steps (canonical request, etc)
     # import awscrt.io
     # awscrt.io.init_logging(awscrt.io.LogLevel.Trace, 'stdout')
-    auth = botocore.crt.auth.CrtSigV4Auth(test_case.credentials,
-                                          SERVICE, REGION)
+    auth = botocore.crt.auth.CrtSigV4Auth(
+        test_case.credentials, SERVICE, REGION
+    )
     auth.add_auth(request)
     actual_auth_header = request.headers['Authorization']
-    assert_equal(actual_auth_header, test_case.authorization_header,
-                 test_case.raw_request, 'authheader')
+    assert_equal(
+        actual_auth_header,
+        test_case.authorization_header,
+        test_case.raw_request,
+        'authheader',
+    )
 
 
 def assert_equal(actual, expected, raw_request, part):
     if actual != expected:
-        message = "The %s did not match" % part
-        message += "\nACTUAL:%r !=\nEXPECT:%r" % (actual, expected)
-        message += '\nThe raw request was:\n%s' % raw_request
+        message = f"The {part} did not match"
+        message += f"\nACTUAL:{actual!r} !=\nEXPECT:{expected!r}"
+        message += f'\nThe raw request was:\n{raw_request}'
         raise AssertionError(message)
 
 
-class SignatureTestCase(object):
+class SignatureTestCase:
     def __init__(self, test_case):
-        filepath = os.path.join(TESTSUITE_DIR, test_case,
-                                os.path.basename(test_case))
+        filepath = os.path.join(
+            TESTSUITE_DIR, test_case, os.path.basename(test_case)
+        )
         # We're using io.open() because we need to open these files with
         # a specific encoding, and in 2.x io.open is the best way to do this.
-        self.raw_request = io.open(filepath + '.req',
-                                   encoding='utf-8').read()
-        self.canonical_request = io.open(
-            filepath + '.creq',
-            encoding='utf-8').read().replace('\r', '')
-        self.string_to_sign = io.open(
-            filepath + '.sts',
-            encoding='utf-8').read().replace('\r', '')
-        self.authorization_header = io.open(
-            filepath + '.authz',
-            encoding='utf-8').read().replace('\r', '')
-        self.signed_request = io.open(filepath + '.sreq',
-                                      encoding='utf-8').read()
+        self.raw_request = open(filepath + '.req', encoding='utf-8').read()
+        self.canonical_request = (
+            open(filepath + '.creq', encoding='utf-8').read().replace('\r', '')
+        )
+        self.string_to_sign = (
+            open(filepath + '.sts', encoding='utf-8').read().replace('\r', '')
+        )
+        self.authorization_header = (
+            open(filepath + '.authz', encoding='utf-8')
+            .read()
+            .replace('\r', '')
+        )
+        self.signed_request = open(filepath + '.sreq', encoding='utf-8').read()
 
         token_pattern = r'^x-amz-security-token:(.*)$'
-        token_match = re.search(token_pattern, self.canonical_request,
-                                re.MULTILINE)
+        token_match = re.search(
+            token_pattern, self.canonical_request, re.MULTILINE
+        )
         token = token_match.group(1) if token_match else None
         self.credentials = Credentials(ACCESS_KEY, SECRET_KEY, token)
diff -pruN 2.23.6-1/tests/unit/botocore/cbor/decode-error-tests.json 2.31.35-1/tests/unit/botocore/cbor/decode-error-tests.json
--- 2.23.6-1/tests/unit/botocore/cbor/decode-error-tests.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/cbor/decode-error-tests.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,282 @@
+[
+  {
+    "description": "TestDecode_InvalidArgument - map/2 - arg len 2 greater than remaining buf len",
+    "input": "b900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - tag/1 - arg len 1 greater than remaining buf len",
+    "input": "d8",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - major7/float64 - incomplete float64 at end of buf",
+    "input": "fb00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - negint/4 - arg len 4 greater than remaining buf len",
+    "input": "3a000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - negint/8 - arg len 8 greater than remaining buf len",
+    "input": "3b00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - string/4 - arg len 4 greater than remaining buf len",
+    "input": "7a000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - map/1 - arg len 1 greater than remaining buf len",
+    "input": "b8",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - map/4 - arg len 4 greater than remaining buf len",
+    "input": "ba000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - tag/2 - arg len 2 greater than remaining buf len",
+    "input": "d900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - uint/1 - arg len 1 greater than remaining buf len",
+    "input": "18",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - string/1 - arg len 1 greater than remaining buf len",
+    "input": "78",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - string/8 - arg len 8 greater than remaining buf len",
+    "input": "7b00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - string/2 - arg len 2 greater than remaining buf len",
+    "input": "7900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - list/2 - arg len 2 greater than remaining buf len",
+    "input": "9900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - slice/1 - arg len 1 greater than remaining buf len",
+    "input": "58",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - slice/4 - arg len 4 greater than remaining buf len",
+    "input": "5a000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - slice/8 - arg len 8 greater than remaining buf len",
+    "input": "5b00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - negint/? - unexpected minor value 31",
+    "input": "3f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - tag/8 - arg len 8 greater than remaining buf len",
+    "input": "db00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - uint/2 - arg len 2 greater than remaining buf len",
+    "input": "1900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - uint/8 - arg len 8 greater than remaining buf len",
+    "input": "1b00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - negint/2 - arg len 2 greater than remaining buf len",
+    "input": "3900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - negint/1 - arg len 1 greater than remaining buf len",
+    "input": "38",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - list/8 - arg len 8 greater than remaining buf len",
+    "input": "9b00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - tag/4 - arg len 4 greater than remaining buf len",
+    "input": "da000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - major7/float32 - incomplete float32 at end of buf",
+    "input": "fa000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - uint/4 - arg len 4 greater than remaining buf len",
+    "input": "1a000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - slice/2 - arg len 2 greater than remaining buf len",
+    "input": "5900",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - list/4 - arg len 4 greater than remaining buf len",
+    "input": "9a000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - tag/? - unexpected minor value 31",
+    "input": "df",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - major7/? - unexpected minor value 31",
+    "input": "ff",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - uint/? - unexpected minor value 31",
+    "input": "1f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - list/1 - arg len 1 greater than remaining buf len",
+    "input": "98",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidArgument - map/8 - arg len 8 greater than remaining buf len",
+    "input": "bb00000000000000",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidList - [] / eof after head - unexpected end of payload",
+    "input": "81",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidList - [] / invalid item - arg len 1 greater than remaining buf len",
+    "input": "8118",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidList - [_ ] / no break - expected break marker",
+    "input": "9f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidList - [_ ] / invalid item - arg len 1 greater than remaining buf len",
+    "input": "9f18",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {} / invalid key - slice len 1 greater than remaining buf len",
+    "input": "a17801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {} / invalid value - arg len 1 greater than remaining buf len",
+    "input": "a163666f6f18",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {_ } / no break - expected break marker",
+    "input": "bf",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {_ } / invalid key - slice len 1 greater than remaining buf len",
+    "input": "bf7801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {_ } / invalid value - arg len 1 greater than remaining buf len",
+    "input": "bf63666f6f18",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidMap - {} / eof after head - unexpected end of payload",
+    "input": "a1",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - slice/1, not enough bytes - slice len 1 greater than remaining buf len",
+    "input": "5801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - slice/?, nested indefinite - nested indefinite slice",
+    "input": "5f5f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - string/?, no break - expected break marker",
+    "input": "7f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - string/?, nested indefinite - nested indefinite slice",
+    "input": "7f7f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - string/?, invalid nested definite - decode subslice: slice len 1 greater than remaining buf len",
+    "input": "7f7801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - slice/?, no break - expected break marker",
+    "input": "5f",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - slice/?, invalid nested major - unexpected major type 3 in indefinite slice",
+    "input": "5f60",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - slice/?, invalid nested definite - decode subslice: slice len 1 greater than remaining buf len",
+    "input": "5f5801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - string/1, not enough bytes - slice len 1 greater than remaining buf len",
+    "input": "7801",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidSlice - string/?, invalid nested major - unexpected major type 2 in indefinite slice",
+    "input": "7f40",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidTag - invalid value - arg len 1 greater than remaining buf len",
+    "input": "c118",
+    "error": true
+  },
+  {
+    "description": "TestDecode_InvalidTag - eof - unexpected end of payload",
+    "input": "c1",
+    "error": true
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/cbor/decode-success-tests.json 2.31.35-1/tests/unit/botocore/cbor/decode-success-tests.json
--- 2.23.6-1/tests/unit/botocore/cbor/decode-success-tests.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/cbor/decode-success-tests.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1528 @@
+[
+  {
+    "description": "atomic - uint/0/max",
+    "input": "17",
+    "expect": {
+      "uint": 23
+    }
+  },
+  {
+    "description": "atomic - uint/2/min",
+    "input": "190000",
+    "expect": {
+      "uint": 0
+    }
+  },
+  {
+    "description": "atomic - uint/8/min",
+    "input": "1b0000000000000000",
+    "expect": {
+      "uint": 0
+    }
+  },
+  {
+    "description": "atomic - negint/1/min",
+    "input": "3800",
+    "expect": {
+      "negint": -1
+    }
+  },
+  {
+    "description": "atomic - negint/2/min",
+    "input": "390000",
+    "expect": {
+      "negint": -1
+    }
+  },
+  {
+    "description": "atomic - false",
+    "input": "f4",
+    "expect": {
+      "bool": false
+    }
+  },
+  {
+    "description": "atomic - uint/1/min",
+    "input": "1800",
+    "expect": {
+      "uint": 0
+    }
+  },
+  {
+    "description": "atomic - negint/8/min",
+    "input": "3b0000000000000000",
+    "expect": {
+      "negint": -1
+    }
+  },
+  {
+    "description": "atomic - float64/+Inf",
+    "input": "fb7ff0000000000000",
+    "expect": {
+      "float64": 9218868437227405312
+    }
+  },
+  {
+    "description": "atomic - uint/4/min",
+    "input": "1a00000000",
+    "expect": {
+      "uint": 0
+    }
+  },
+  {
+    "description": "atomic - null",
+    "input": "f6",
+    "expect": {
+      "null": {}
+    }
+  },
+  {
+    "description": "atomic - negint/2/max",
+    "input": "39ffff",
+    "expect": {
+      "negint": -65536
+    }
+  },
+  {
+    "description": "atomic - negint/8/max",
+    "input": "3bfffffffffffffffe",
+    "expect": {
+      "negint": -18446744073709551615
+    }
+  },
+  {
+    "description": "atomic - float32/1.625",
+    "input": "fa3fd00000",
+    "expect": {
+      "float32": 1070596096
+    }
+  },
+  {
+    "description": "atomic - uint/0/min",
+    "input": "00",
+    "expect": {
+      "uint": 0
+    }
+  },
+  {
+    "description": "atomic - uint/1/max",
+    "input": "18ff",
+    "expect": {
+      "uint": 255
+    }
+  },
+  {
+    "description": "atomic - uint/8/max",
+    "input": "1bffffffffffffffff",
+    "expect": {
+      "uint": 18446744073709551615
+    }
+  },
+  {
+    "description": "atomic - negint/1/max",
+    "input": "38ff",
+    "expect": {
+      "negint": -256
+    }
+  },
+  {
+    "description": "atomic - negint/4/min",
+    "input": "3a00000000",
+    "expect": {
+      "negint": -1
+    }
+  },
+  {
+    "description": "atomic - float64/1.625",
+    "input": "fb3ffa000000000000",
+    "expect": {
+      "float64": 4609997168567123968
+    }
+  },
+  {
+    "description": "atomic - uint/2/max",
+    "input": "19ffff",
+    "expect": {
+      "uint": 65535
+    }
+  },
+  {
+    "description": "atomic - negint/0/max",
+    "input": "37",
+    "expect": {
+      "negint": -24
+    }
+  },
+  {
+    "description": "atomic - negint/4/max",
+    "input": "3affffffff",
+    "expect": {
+      "negint": -4294967296
+    }
+  },
+  {
+    "description": "atomic - uint/4/max",
+    "input": "1affffffff",
+    "expect": {
+      "uint": 4294967295
+    }
+  },
+  {
+    "description": "atomic - negint/0/min",
+    "input": "20",
+    "expect": {
+      "negint": -1
+    }
+  },
+  {
+    "description": "atomic - true",
+    "input": "f5",
+    "expect": {
+      "bool": true
+    }
+  },
+  {
+    "description": "atomic - float32/+Inf",
+    "input": "fa7f800000",
+    "expect": {
+      "float32": 2139095040
+    }
+  },
+  {
+    "description": "definite slice - len = 0",
+    "input": "40",
+    "expect": {
+      "bytestring": []
+    }
+  },
+  {
+    "description": "definite slice - len \u003e 0",
+    "input": "43666f6f",
+    "expect": {
+      "bytestring": [
+        102,
+        111,
+        111
+      ]
+    }
+  },
+  {
+    "description": "definite string - len = 0",
+    "input": "60",
+    "expect": {
+      "string": ""
+    }
+  },
+  {
+    "description": "definite string - len \u003e 0",
+    "input": "63666f6f",
+    "expect": {
+      "string": "foo"
+    }
+  },
+  {
+    "description": "indefinite slice - len = 0",
+    "input": "5fff",
+    "expect": {
+      "bytestring": []
+    }
+  },
+  {
+    "description": "indefinite slice - len = 0, explicit",
+    "input": "5f40ff",
+    "expect": {
+      "bytestring": []
+    }
+  },
+  {
+    "description": "indefinite slice - len = 0, len \u003e 0",
+    "input": "5f4043666f6fff",
+    "expect": {
+      "bytestring": [
+        102,
+        111,
+        111
+      ]
+    }
+  },
+  {
+    "description": "indefinite slice - len \u003e 0, len = 0",
+    "input": "5f43666f6f40ff",
+    "expect": {
+      "bytestring": [
+        102,
+        111,
+        111
+      ]
+    }
+  },
+  {
+    "description": "indefinite slice - len \u003e 0, len \u003e 0",
+    "input": "5f43666f6f43666f6fff",
+    "expect": {
+      "bytestring": [
+        102,
+        111,
+        111,
+        102,
+        111,
+        111
+      ]
+    }
+  },
+  {
+    "description": "indefinite string - len = 0",
+    "input": "7fff",
+    "expect": {
+      "string": ""
+    }
+  },
+  {
+    "description": "indefinite string - len = 0, explicit",
+    "input": "7f60ff",
+    "expect": {
+      "string": ""
+    }
+  },
+  {
+    "description": "indefinite string - len = 0, len \u003e 0",
+    "input": "7f6063666f6fff",
+    "expect": {
+      "string": "foo"
+    }
+  },
+  {
+    "description": "indefinite string - len \u003e 0, len = 0",
+    "input": "7f63666f6f60ff",
+    "expect": {
+      "string": "foo"
+    }
+  },
+  {
+    "description": "indefinite string - len \u003e 0, len \u003e 0",
+    "input": "7f63666f6f63666f6fff",
+    "expect": {
+      "string": "foofoo"
+    }
+  },
+  {
+    "description": "list - [float64]",
+    "input": "81fb7ff0000000000000",
+    "expect": {
+      "list": [
+        {
+          "float64": 9218868437227405312
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/4/min]",
+    "input": "9f3a00000000ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/1/min]",
+    "input": "811800",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/4/min]",
+    "input": "9f1a00000000ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/0/max]",
+    "input": "8117",
+    "expect": {
+      "list": [
+        {
+          "uint": 23
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/1/max]",
+    "input": "8118ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 255
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/2/min]",
+    "input": "81390000",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/8/min]",
+    "input": "813b0000000000000000",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/2/min]",
+    "input": "9f190000ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/0/min]",
+    "input": "8100",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/0/min]",
+    "input": "8120",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/0/max]",
+    "input": "8137",
+    "expect": {
+      "list": [
+        {
+          "negint": -24
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/1/min]",
+    "input": "813800",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/1/max]",
+    "input": "8138ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -256
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/4/max]",
+    "input": "813affffffff",
+    "expect": {
+      "list": [
+        {
+          "negint": -4294967296
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/4/max]",
+    "input": "9f1affffffffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 4294967295
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/0/max]",
+    "input": "9f37ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -24
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/2/min]",
+    "input": "81190000",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ false]",
+    "input": "9ff4ff",
+    "expect": {
+      "list": [
+        {
+          "bool": false
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ float32]",
+    "input": "9ffa7f800000ff",
+    "expect": {
+      "list": [
+        {
+          "float32": 2139095040
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/1/max]",
+    "input": "9f38ffff",
+    "expect": {
+      "list": [
+        {
+          "negint": -256
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/8/max]",
+    "input": "811bffffffffffffffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 18446744073709551615
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/4/min]",
+    "input": "813a00000000",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/8/max]",
+    "input": "813bfffffffffffffffe",
+    "expect": {
+      "list": [
+        {
+          "negint": -18446744073709551615
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/2/min]",
+    "input": "9f390000ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/4/max]",
+    "input": "9f3affffffffff",
+    "expect": {
+      "list": [
+        {
+          "negint": -4294967296
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ true]",
+    "input": "9ff5ff",
+    "expect": {
+      "list": [
+        {
+          "bool": true
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ null]",
+    "input": "9ff6ff",
+    "expect": {
+      "list": [
+        {
+          "null": {}
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/8/min]",
+    "input": "811b0000000000000000",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [null]",
+    "input": "81f6",
+    "expect": {
+      "list": [
+        {
+          "null": {}
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/1/min]",
+    "input": "9f1800ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/1/max]",
+    "input": "9f18ffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 255
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/2/max]",
+    "input": "9f19ffffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 65535
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/8/min]",
+    "input": "9f1b0000000000000000ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/8/min]",
+    "input": "9f3b0000000000000000ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ float64]",
+    "input": "9ffb7ff0000000000000ff",
+    "expect": {
+      "list": [
+        {
+          "float64": 9218868437227405312
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/4/min]",
+    "input": "811a00000000",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [true]",
+    "input": "81f5",
+    "expect": {
+      "list": [
+        {
+          "bool": true
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [float32]",
+    "input": "81fa7f800000",
+    "expect": {
+      "list": [
+        {
+          "float32": 2139095040
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/0/min]",
+    "input": "9f00ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 0
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/0/max]",
+    "input": "9f17ff",
+    "expect": {
+      "list": [
+        {
+          "uint": 23
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ uint/8/max]",
+    "input": "9f1bffffffffffffffffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 18446744073709551615
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/1/min]",
+    "input": "9f3800ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/2/max]",
+    "input": "9f39ffffff",
+    "expect": {
+      "list": [
+        {
+          "negint": -65536
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/2/max]",
+    "input": "8119ffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 65535
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [negint/2/max]",
+    "input": "8139ffff",
+    "expect": {
+      "list": [
+        {
+          "negint": -65536
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [false]",
+    "input": "81f4",
+    "expect": {
+      "list": [
+        {
+          "bool": false
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/0/min]",
+    "input": "9f20ff",
+    "expect": {
+      "list": [
+        {
+          "negint": -1
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [_ negint/8/max]",
+    "input": "9f3bfffffffffffffffeff",
+    "expect": {
+      "list": [
+        {
+          "negint": -18446744073709551615
+        }
+      ]
+    }
+  },
+  {
+    "description": "list - [uint/4/max]",
+    "input": "811affffffff",
+    "expect": {
+      "list": [
+        {
+          "uint": 4294967295
+        }
+      ]
+    }
+  },
+  {
+    "description": "map - {uint/0/min}",
+    "input": "a163666f6f00",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/4/max}",
+    "input": "a163666f6f1affffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 4294967295
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/0/min}",
+    "input": "a163666f6f20",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ float32}",
+    "input": "bf63666f6ffa7f800000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "float32": 2139095040
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {false}",
+    "input": "a163666f6ff4",
+    "expect": {
+      "map": {
+        "foo": {
+          "bool": false
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {float32}",
+    "input": "a163666f6ffa7f800000",
+    "expect": {
+      "map": {
+        "foo": {
+          "float32": 2139095040
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/0/max}",
+    "input": "bf63666f6f17ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 23
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/2/min}",
+    "input": "bf63666f6f390000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ false}",
+    "input": "bf63666f6ff4ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "bool": false
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/8/min}",
+    "input": "a163666f6f1b0000000000000000",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/0/max}",
+    "input": "bf63666f6f37ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -24
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ null}",
+    "input": "bf63666f6ff6ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "null": {}
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/1/min}",
+    "input": "a163666f6f1800",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/1/min}",
+    "input": "bf63666f6f1800ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/8/max}",
+    "input": "bf63666f6f1bffffffffffffffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 18446744073709551615
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/0/min}",
+    "input": "bf63666f6f20ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/1/min}",
+    "input": "bf63666f6f3800ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/1/max}",
+    "input": "bf63666f6f38ffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -256
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/2/max}",
+    "input": "bf63666f6f39ffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -65536
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/4/min}",
+    "input": "bf63666f6f3a00000000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ true}",
+    "input": "bf63666f6ff5ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "bool": true
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/2/max}",
+    "input": "a163666f6f19ffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 65535
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/8/max}",
+    "input": "a163666f6f1bffffffffffffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 18446744073709551615
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/0/max}",
+    "input": "a163666f6f37",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -24
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/1/max}",
+    "input": "a163666f6f38ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -256
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/2/max}",
+    "input": "a163666f6f39ffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -65536
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/4/min}",
+    "input": "a163666f6f3a00000000",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/8/max}",
+    "input": "a163666f6f3bfffffffffffffffe",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -18446744073709551615
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {float64}",
+    "input": "a163666f6ffb7ff0000000000000",
+    "expect": {
+      "map": {
+        "foo": {
+          "float64": 9218868437227405312
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/0/min}",
+    "input": "bf63666f6f00ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/4/min}",
+    "input": "bf63666f6f1a00000000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/8/min}",
+    "input": "bf63666f6f1b0000000000000000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/1/max}",
+    "input": "a163666f6f18ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 255
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/2/min}",
+    "input": "a163666f6f390000",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/8/min}",
+    "input": "a163666f6f3b0000000000000000",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {true}",
+    "input": "a163666f6ff5",
+    "expect": {
+      "map": {
+        "foo": {
+          "bool": true
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/2/min}",
+    "input": "bf63666f6f190000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/8/min}",
+    "input": "bf63666f6f3b0000000000000000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/8/max}",
+    "input": "bf63666f6f3bfffffffffffffffeff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -18446744073709551615
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/0/max}",
+    "input": "a163666f6f17",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 23
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/4/max}",
+    "input": "a163666f6f3affffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -4294967296
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {null}",
+    "input": "a163666f6ff6",
+    "expect": {
+      "map": {
+        "foo": {
+          "null": {}
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/4/max}",
+    "input": "bf63666f6f1affffffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 4294967295
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ float64}",
+    "input": "bf63666f6ffb7ff0000000000000ff",
+    "expect": {
+      "map": {
+        "foo": {
+          "float64": 9218868437227405312
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/2/min}",
+    "input": "a163666f6f190000",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {uint/4/min}",
+    "input": "a163666f6f1a00000000",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 0
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {negint/1/min}",
+    "input": "a163666f6f3800",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -1
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/1/max}",
+    "input": "bf63666f6f18ffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 255
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ uint/2/max}",
+    "input": "bf63666f6f19ffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "uint": 65535
+        }
+      }
+    }
+  },
+  {
+    "description": "map - {_ negint/4/max}",
+    "input": "bf63666f6f3affffffffff",
+    "expect": {
+      "map": {
+        "foo": {
+          "negint": -4294967296
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 0/min",
+    "input": "c001",
+    "expect": {
+      "tag": {
+        "id": 0,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 1/min",
+    "input": "d80001",
+    "expect": {
+      "tag": {
+        "id": 0,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 1/max",
+    "input": "d8ff01",
+    "expect": {
+      "tag": {
+        "id": 255,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 4/min",
+    "input": "da0000000001",
+    "expect": {
+      "tag": {
+        "id": 0,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 8/min",
+    "input": "db000000000000000001",
+    "expect": {
+      "tag": {
+        "id": 0,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 0/max",
+    "input": "d701",
+    "expect": {
+      "tag": {
+        "id": 23,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 2/min",
+    "input": "d9000001",
+    "expect": {
+      "tag": {
+        "id": 0,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 2/max",
+    "input": "d9ffff01",
+    "expect": {
+      "tag": {
+        "id": 65535,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 4/max",
+    "input": "daffffffff01",
+    "expect": {
+      "tag": {
+        "id": 4294967295,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  },
+  {
+    "description": "tag - 8/max",
+    "input": "dbffffffffffffffff01",
+    "expect": {
+      "tag": {
+        "id": 18446744073709551615,
+        "value": {
+          "uint": 1
+        }
+      }
+    }
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/cbor/test_cbor_decoding.py 2.31.35-1/tests/unit/botocore/cbor/test_cbor_decoding.py
--- 2.23.6-1/tests/unit/botocore/cbor/test_cbor_decoding.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/cbor/test_cbor_decoding.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,131 @@
+import json
+import os
+import struct
+
+import pytest
+from botocore.parsers import ResponseParserError, RpcV2CBORParser
+
+IGNORE_CASES = [
+    # We ignore all the tag tests since none of them are supported tags in AWS.
+    # The majority of these aren't even defined tags in CBOR and just test that we
+    # can properly parse the number
+    'tag - 0/min',
+    'tag - 1/min',
+    'tag - 2/min',
+    'tag - 4/min',
+    'tag - 8/min',
+    'tag - 0/max',
+    'tag - 1/max',
+    'tag - 2/max',
+    'tag - 4/max',
+    'tag - 8/max',
+    # We are expected to drop keys with null values, which is the opposite of the
+    # assertion in these two map tests
+    'map - {_ null}',
+    'map - {null}',
+]
+
+TEST_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)))
+
+
+@pytest.fixture(scope="module")
+def parser():
+    return RpcV2CBORParser()
+
+
+def _get_cbor_decoding_success_tests():
+    success_test_file_name = os.path.join(
+        TEST_DIR, 'decode-success-tests.json'
+    )
+    success_test_data = json.load(open(success_test_file_name))
+    for case in success_test_data:
+        if case['description'] in IGNORE_CASES:
+            continue
+        yield case['description'], case['input'], case['expect']
+
+
+def _get_cbor_decoding_error_tests():
+    error_test_file_name = os.path.join(TEST_DIR, 'decode-error-tests.json')
+    error_test_data = json.load(open(error_test_file_name))
+    for case in error_test_data:
+        yield case['description'], case['input'], case['error']
+
+
+@pytest.mark.parametrize(
+    "json_description, input, expect", _get_cbor_decoding_success_tests()
+)
+def test_cbor_decoding_success(json_description, input, expect, parser):
+    stream = parser.get_peekable_stream_from_bytes(bytearray.fromhex(input))
+    parsed = parser.parse_data_item(stream)
+    _assert_expected_value(parsed, expect)
+
+
+@pytest.mark.parametrize(
+    "json_description, input, error", _get_cbor_decoding_error_tests()
+)
+def test_cbor_decoding_error(json_description, input, error, parser):
+    stream = parser.get_peekable_stream_from_bytes(bytearray.fromhex(input))
+    with pytest.raises(ResponseParserError):
+        parser.parse_data_item(stream)
+
+
+def assert_null(actual):
+    assert actual is None
+
+
+def assert_bytestring(actual, value):
+    assert actual == bytes(value)
+
+
+def assert_list(actual, value):
+    assert isinstance(actual, list)
+    for act_val, exp_val in zip(actual, value):
+        _assert_expected_value(act_val, exp_val)
+
+
+def assert_map(actual, value):
+    assert isinstance(actual, dict)
+    for key, val in value.items():
+        assert key in actual
+        _assert_expected_value(actual[key], val)
+
+
+def assert_tag(actual, value):
+    assert actual.tag == value['id']
+    assert actual.value == value['value']['uint']
+
+
+def assert_float(actual, expected_key, value):
+    struct_format = '<f' if expected_key == 'float32' else '<d'
+    packed_value = struct.pack(
+        '<I' if expected_key == 'float32' else '<Q', value
+    )
+    unpacked_value = struct.unpack(struct_format, packed_value)[0]
+    assert actual == unpacked_value
+
+
+def assert_default(actual, value):
+    assert actual == value
+
+
+ASSERTION_MAP = {
+    'null': assert_null,
+    'undefined': assert_null,
+    'bytestring': assert_bytestring,
+    'list': assert_list,
+    'map': assert_map,
+    'tag': assert_tag,
+    'float32': assert_float,
+    'float64': assert_float,
+}
+
+
+def _assert_expected_value(actual, expected):
+    for expected_key, value in expected.items():
+        assertion_func = ASSERTION_MAP.get(expected_key, assert_default)
+        if expected_key in ['null']:
+            assertion_func(actual)
+        elif expected_key in ['float32', 'float64']:
+            assertion_func(actual, expected_key, value)
+        else:
+            assertion_func(actual, value)
diff -pruN 2.23.6-1/tests/unit/botocore/cfg/aws_config_nested_bad 2.31.35-1/tests/unit/botocore/cfg/aws_config_nested_bad
--- 2.23.6-1/tests/unit/botocore/cfg/aws_config_nested_bad	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/cfg/aws_config_nested_bad	2025-11-12 19:17:29.000000000 +0000
@@ -6,4 +6,3 @@ s3 =
 cloudwatch =
     signature_version = v4
 region=us-west-2
-
diff -pruN 2.23.6-1/tests/unit/botocore/conftest.py 2.31.35-1/tests/unit/botocore/conftest.py
--- 2.23.6-1/tests/unit/botocore/conftest.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/conftest.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,23 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import pytest
+from botocore.context import ClientContext, reset_context, set_context
+
+
+@pytest.fixture
+def client_context():
+    ctx = ClientContext()
+    token = set_context(ctx)
+    yield ctx
+    reset_context(token)
diff -pruN 2.23.6-1/tests/unit/botocore/crt/auth/test_crt_signers.py 2.31.35-1/tests/unit/botocore/crt/auth/test_crt_signers.py
--- 2.23.6-1/tests/unit/botocore/crt/auth/test_crt_signers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/crt/auth/test_crt_signers.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,9 @@
 import botocore.crt.auth
 
 from tests.unit.botocore.auth.test_signers import (
-    TestS3SigV4Auth, TestSigV4Presign, TestSigV4Resign
+    TestS3SigV4Auth,
+    TestSigV4Presign,
+    TestSigV4Resign,
 )
 
 
diff -pruN 2.23.6-1/tests/unit/botocore/data/endpoints/test-cases/account-id.json 2.31.35-1/tests/unit/botocore/data/endpoints/test-cases/account-id.json
--- 2.23.6-1/tests/unit/botocore/data/endpoints/test-cases/account-id.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/data/endpoints/test-cases/account-id.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,47 @@
+{
+  "version": "1.0",
+  "testCases": [
+    {
+      "documentation": "Test case for basic AccountID templating",
+      "params": {
+        "AccountId": "123456789001",
+        "AccountIdEndpointMode": "preferred"
+      },
+      "expect": {
+        "endpoint": {
+          "url": "https://123456789001.amazonaws.com"
+        }
+      }
+    },
+    {
+      "documentation": "Test case where AccountID is set but AccountIdEndpointMode is set to disabled",
+      "params": {
+        "AccountId": "123456789001",
+        "AccountIdEndpointMode": "disabled"
+      },
+      "expect": {
+        "endpoint": {
+          "url": "https://amazonaws.com"
+        }
+      }
+    },
+    {
+      "documentation": "Test case where AccountID is unset but AccountIdEndpointMode is set to required",
+      "params": {
+        "AccountIdEndpointMode": "required"
+      },
+      "expect": {
+        "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded"
+      }
+    },
+    {
+      "documentation": "Test case where AccountID and AccountIdEndpointMode are unset",
+      "params": {},
+      "expect": {
+        "endpoint": {
+          "url": "https://amazonaws.com"
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/data/endpoints/valid-rules/account-id.json 2.31.35-1/tests/unit/botocore/data/endpoints/valid-rules/account-id.json
--- 2.23.6-1/tests/unit/botocore/data/endpoints/valid-rules/account-id.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/data/endpoints/valid-rules/account-id.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,130 @@
+{
+  "version": "1.0",
+  "parameters": {
+    "AccountId": {
+      "type": "String",
+      "builtIn": "AWS::Auth::AccountId",
+      "documentation": "The AWS account ID used in the endpoint for a request, eg. `123456789012`."
+    },
+    "AccountIdEndpointMode": {
+      "type": "String",
+      "builtIn": "AWS::Auth::AccountIdEndpointMode",
+      "documentation": "The behavior for account ID based endpoint routing, eg. `preferred`."
+    }
+  },
+  "rules": [
+    {
+      "documentation": "Template account ID into the URI when account ID is set and AccountIdEndpointMode is set to preferred.",
+      "conditions": [
+        {
+          "fn": "isSet",
+          "argv": [
+            {
+              "ref": "AccountId"
+            }
+          ]
+        },
+        {
+          "fn": "isSet",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            }
+          ]
+        },
+        {
+          "fn": "stringEquals",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            },
+            "preferred"
+          ]
+        }
+      ],
+      "endpoint": {
+        "url": "https://{AccountId}.amazonaws.com"
+      },
+      "type": "endpoint"
+    },
+    {
+      "documentation": "Do not template account ID into the URI when AccountIdEndpointMode is set to disabled.",
+      "conditions": [
+        {
+          "fn": "isSet",
+          "argv": [
+            {
+              "ref": "AccountId"
+            }
+          ]
+        },
+        {
+          "fn": "isSet",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            }
+          ]
+        },
+        {
+          "fn": "stringEquals",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            },
+            "disabled"
+          ]
+        }
+      ],
+      "endpoint": {
+        "url": "https://amazonaws.com"
+      },
+      "type": "endpoint"
+    },
+    {
+      "documentation": "Raise an error when account ID is unset but AccountIdEndpointMode is set to required.",
+      "conditions": [
+        {
+          "fn": "not",
+          "argv": [
+            {
+              "fn": "isSet",
+              "argv": [
+                {
+                  "ref": "AccountId"
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "fn": "isSet",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            }
+          ]
+        },
+        {
+          "fn": "stringEquals",
+          "argv": [
+            {
+              "ref": "AccountIdEndpointMode"
+            },
+            "required"
+          ]
+        }
+      ],
+      "error": "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded",
+      "type": "error"
+    },
+    {
+      "documentation": "Fallback when AccountID and AccountIdEndpointMode are unset",
+      "conditions": [],
+      "endpoint": {
+        "url": "https://amazonaws.com"
+      },
+      "type": "endpoint"
+    }
+  ]
+}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/docs/__init__.py 2.31.35-1/tests/unit/botocore/docs/__init__.py
--- 2.23.6-1/tests/unit/botocore/docs/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,35 +10,39 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import json
-import tempfile
+import os
 import shutil
+import tempfile
 
-from botocore.docs.bcdoc.restdoc import DocumentStructure
-
-from tests import get_botocore_default_config_mapping, mock, unittest
-from botocore.compat import OrderedDict
-from botocore.hooks import HierarchicalEmitter
-from botocore.model import ServiceModel, OperationModel
 from botocore.client import ClientCreator
+from botocore.compat import OrderedDict
 from botocore.configprovider import ConfigValueStore
+from botocore.docs.bcdoc.restdoc import DocumentStructure
+from botocore.hooks import HierarchicalEmitter
 from botocore.loaders import Loader
+from botocore.model import OperationModel, ServiceModel
+
+from tests import get_botocore_default_config_mapping, mock, unittest
 
 
 class BaseDocsTest(unittest.TestCase):
     def setUp(self):
         self.root_dir = tempfile.mkdtemp()
         self.version_dirs = os.path.join(
-            self.root_dir, 'myservice', '2014-01-01')
+            self.root_dir, 'myservice', '2014-01-01'
+        )
         os.makedirs(self.version_dirs)
         self.model_file = os.path.join(self.version_dirs, 'service-2.json')
         self.waiter_model_file = os.path.join(
-            self.version_dirs, 'waiters-2.json')
+            self.version_dirs, 'waiters-2.json'
+        )
         self.paginator_model_file = os.path.join(
-            self.version_dirs, 'paginators-1.json')
+            self.version_dirs, 'paginators-1.json'
+        )
         self.example_model_file = os.path.join(
-            self.version_dirs, 'examples-1.json')
+            self.version_dirs, 'examples-1.json'
+        )
 
         self.json_model = {}
         self.nested_json_model = {}
@@ -98,15 +102,17 @@ class BaseDocsTest(unittest.TestCase):
             'hostname': 'foo.us-east-1',
             'partition': 'aws',
             'endpointName': 'us-east-1',
-            'signatureVersions': ['v4']
+            'signatureVersions': ['v4'],
         }
 
         default_config_mapping = get_botocore_default_config_mapping()
         self.creator = ClientCreator(
-            loader=self.loader, endpoint_resolver=endpoint_resolver,
-            user_agent='user-agent', event_emitter=self.events,
+            loader=self.loader,
+            endpoint_resolver=endpoint_resolver,
+            user_agent='user-agent',
+            event_emitter=self.events,
             exceptions_factory=mock.Mock(),
-            config_store=ConfigValueStore(mapping=default_config_mapping)
+            config_store=ConfigValueStore(mapping=default_config_mapping),
         )
 
         self.client = self.creator.create_client('myservice', 'us-east-1')
@@ -126,19 +132,17 @@ class BaseDocsTest(unittest.TestCase):
                 'SampleOperation': {
                     'name': 'SampleOperation',
                     'input': {'shape': 'SampleOperationInputOutput'},
-                    'output': {'shape': 'SampleOperationInputOutput'}
+                    'output': {'shape': 'SampleOperationInputOutput'},
                 }
             },
             'shapes': {
                 'SampleOperationInputOutput': {
                     'type': 'structure',
-                    'members': OrderedDict()
+                    'members': OrderedDict(),
                 },
-                'String': {
-                    'type': 'string'
-                }
+                'String': {'type': 'string'},
             },
-            'documentation':'AWS MyService Description'
+            'documentation': 'AWS MyService Description',
         }
 
         self.waiter_json_model = {
@@ -149,17 +153,21 @@ class BaseDocsTest(unittest.TestCase):
                     "operation": "SampleOperation",
                     "maxAttempts": 40,
                     "acceptors": [
-                        {"expected": "complete",
-                         "matcher": "pathAll",
-                         "state": "success",
-                         "argument": "Biz"},
-                        {"expected": "failed",
-                         "matcher": "pathAny",
-                         "state": "failure",
-                         "argument": "Biz"}
-                    ]
+                        {
+                            "expected": "complete",
+                            "matcher": "pathAll",
+                            "state": "success",
+                            "argument": "Biz",
+                        },
+                        {
+                            "expected": "failed",
+                            "matcher": "pathAny",
+                            "state": "failure",
+                            "argument": "Biz",
+                        },
+                    ],
                 }
-            }
+            },
         }
 
         self.paginator_json_model = {
@@ -168,7 +176,7 @@ class BaseDocsTest(unittest.TestCase):
                     "input_token": "NextResult",
                     "output_token": "NextResult",
                     "limit_key": "MaxResults",
-                    "result_key": "Biz"
+                    "result_key": "Biz",
                 }
             }
         }
@@ -176,35 +184,38 @@ class BaseDocsTest(unittest.TestCase):
         self.example_json_model = {
             "version": 1,
             "examples": {
-                "SampleOperation": [{
-                    "id": "sample-id",
-                    "title": "sample-title",
-                    "description": "Sample Description.",
-                    "input": OrderedDict([
-                        ("Biz", "foo"),
-                    ]),
-                    "comments": {
-                        "input": {
-                            "Biz": "bar"
+                "SampleOperation": [
+                    {
+                        "id": "sample-id",
+                        "title": "sample-title",
+                        "description": "Sample Description.",
+                        "input": OrderedDict(
+                            [
+                                ("Biz", "foo"),
+                            ]
+                        ),
+                        "comments": {
+                            "input": {"Biz": "bar"},
                         },
                     }
-                }]
-            }
+                ]
+            },
         }
 
     def build_models(self):
         self.service_model = ServiceModel(self.json_model)
         self.operation_model = OperationModel(
             self.json_model['operations']['SampleOperation'],
-            self.service_model
+            self.service_model,
         )
 
     def add_shape(self, shape):
         shape_name = list(shape.keys())[0]
         self.json_model['shapes'][shape_name] = shape[shape_name]
 
-    def add_shape_to_params(self, param_name, shape_name, documentation=None,
-                            is_required=False):
+    def add_shape_to_params(
+        self, param_name, shape_name, documentation=None, is_required=False
+    ):
         params_shape = self.json_model['shapes']['SampleOperationInputOutput']
         member = {'shape': shape_name}
         if documentation is not None:
@@ -231,7 +242,7 @@ class BaseDocsTest(unittest.TestCase):
         for line in lines:
             self.assertIn(line, contents)
             beginning = contents.find(line)
-            contents = contents[(beginning + len(line)):]
+            contents = contents[(beginning + len(line)) :]
 
     def assert_not_contains_line(self, line):
         contents = self.doc_structure.flush_structure().decode('utf-8')
diff -pruN 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_docstringparser.py 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_docstringparser.py
--- 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_docstringparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_docstringparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,11 +18,11 @@
 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 # IN THE SOFTWARE.
-from tests import mock, unittest
-
 import botocore.docs.bcdoc.docstringparser as parser
 from botocore.docs.bcdoc.restdoc import ReSTDocument
 
+from tests import mock, unittest
+
 
 class TestDocStringParser(unittest.TestCase):
     def parse(self, html):
@@ -44,18 +44,16 @@ class TestDocStringParser(unittest.TestC
     def test_nested_lists(self):
         html = "<ul><li>Wello</li><ul><li>Horld</li></ul></ul>"
         result = self.parse(html)
-        self.assert_contains_exact_lines_in_order(result, [
-            b'* Wello',
-            b'  * Horld'
-        ])
+        self.assert_contains_exact_lines_in_order(
+            result, [b'* Wello', b'  * Horld']
+        )
 
     def test_nested_lists_with_extra_white_space(self):
         html = "<ul> <li> Wello</li><ul> <li> Horld</li></ul></ul>"
         result = self.parse(html)
-        self.assert_contains_exact_lines_in_order(result, [
-            b'* Wello',
-            b'  * Horld'
-        ])
+        self.assert_contains_exact_lines_in_order(
+            result, [b'* Wello', b'  * Horld']
+        )
 
 
 class TestHTMLTree(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_document.py 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_document.py
--- 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_document.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_document.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,12 +20,12 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 # IN THE SOFTWARE.
 #
+from botocore.docs.bcdoc.restdoc import DocumentStructure, ReSTDocument
+
 from tests import unittest
-from botocore.docs.bcdoc.restdoc import ReSTDocument, DocumentStructure
 
 
 class TestReSTDocument(unittest.TestCase):
-
     def test_write(self):
         doc = ReSTDocument()
         doc.write('foo')
@@ -52,7 +52,8 @@ class TestReSTDocument(unittest.TestCase
         doc = ReSTDocument()
         doc.hrefs['foo'] = 'https://example.com/'
         self.assertEqual(
-            doc.getvalue(), b'\n\n.. _foo: https://example.com/\n')
+            doc.getvalue(), b'\n\n.. _foo: https://example.com/\n'
+        )
 
 
 class TestDocumentStructure(unittest.TestCase):
@@ -75,25 +76,24 @@ class TestDocumentStructure(unittest.Tes
         self.assertEqual(section.name, 'mysection')
 
         # Ensure we can get the section.
-        self.assertEqual(
-            self.doc_structure.get_section('mysection'), section)
+        self.assertEqual(self.doc_structure.get_section('mysection'), section)
 
         # Ensure the path is correct
         self.assertEqual(section.path, ['mydoc', 'mysection'])
 
         # Ensure some of the necessary attributes are passed to the
         # the section.
-        self.assertEqual(section.style.indentation,
-                         self.doc_structure.style.indentation)
-        self.assertEqual(section.translation_map,
-                         self.doc_structure.translation_map)
-        self.assertEqual(section.hrefs,
-                         self.doc_structure.hrefs)
+        self.assertEqual(
+            section.style.indentation, self.doc_structure.style.indentation
+        )
+        self.assertEqual(
+            section.translation_map, self.doc_structure.translation_map
+        )
+        self.assertEqual(section.hrefs, self.doc_structure.hrefs)
 
     def test_delete_section(self):
         section = self.doc_structure.add_new_section('mysection')
-        self.assertEqual(
-            self.doc_structure.get_section('mysection'), section)
+        self.assertEqual(self.doc_structure.get_section('mysection'), section)
         self.doc_structure.delete_section('mysection')
         with self.assertRaises(KeyError):
             section.get_section('mysection')
@@ -101,7 +101,8 @@ class TestDocumentStructure(unittest.Tes
     def test_create_sections_at_instantiation(self):
         sections = ['intro', 'middle', 'end']
         self.doc_structure = DocumentStructure(
-            self.name, section_names=sections)
+            self.name, section_names=sections
+        )
         # Ensure the sections are attached to the new document structure.
         for section_name in sections:
             section = self.doc_structure.get_section(section_name)
@@ -133,14 +134,14 @@ class TestDocumentStructure(unittest.Tes
         self.doc_structure.add_new_section('mysection')
         self.doc_structure.add_new_section('mysection2')
         self.assertEqual(
-            self.doc_structure.available_sections,
-            ['mysection', 'mysection2']
+            self.doc_structure.available_sections, ['mysection', 'mysection2']
         )
 
     def test_context(self):
         context = {'Foo': 'Bar'}
         section = self.doc_structure.add_new_section(
-            'mysection', context=context)
+            'mysection', context=context
+        )
         self.assertEqual(section.context, context)
 
         # Make sure if context is not specified it is empty.
diff -pruN 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_style.py 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_style.py
--- 2.23.6-1/tests/unit/botocore/docs/bcdoc/test_style.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/bcdoc/test_style.py	2025-11-12 19:17:29.000000000 +0000
@@ -20,13 +20,13 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 # IN THE SOFTWARE.
 #
-from tests import unittest
-from botocore.docs.bcdoc.style import ReSTStyle
 from botocore.docs.bcdoc.restdoc import ReSTDocument
+from botocore.docs.bcdoc.style import ReSTStyle
 
+from tests import unittest
 
-class TestStyle(unittest.TestCase):
 
+class TestStyle(unittest.TestCase):
     def test_spaces(self):
         style = ReSTStyle(None, 4)
         self.assertEqual(style.spaces(), '')
@@ -86,27 +86,31 @@ class TestStyle(unittest.TestCase):
         style.h1('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n*************\nfoobar fiebaz\n*************\n\n')
+            b'\n\n*************\nfoobar fiebaz\n*************\n\n',
+        )
 
     def test_h2(self):
         style = ReSTStyle(ReSTDocument())
         style.h2('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n=============\nfoobar fiebaz\n=============\n\n')
+            b'\n\n=============\nfoobar fiebaz\n=============\n\n',
+        )
 
     def test_h3(self):
         style = ReSTStyle(ReSTDocument())
         style.h3('foobar fiebaz')
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n-------------\nfoobar fiebaz\n-------------\n\n')
+            b'\n\n-------------\nfoobar fiebaz\n-------------\n\n',
+        )
 
     def test_ref(self):
         style = ReSTStyle(ReSTDocument())
         style.ref('foobar', 'http://foo.bar.com')
-        self.assertEqual(style.doc.getvalue(),
-                         b':doc:`foobar <http://foo.bar.com>`')
+        self.assertEqual(
+            style.doc.getvalue(), b':doc:`foobar <http://foo.bar.com>`'
+        )
 
     def test_examples(self):
         style = ReSTStyle(ReSTDocument())
@@ -119,29 +123,25 @@ class TestStyle(unittest.TestCase):
     def test_codeblock(self):
         style = ReSTStyle(ReSTDocument())
         style.codeblock('foobar')
-        self.assertEqual(style.doc.getvalue(),
-                         b'::\n\n  foobar\n\n\n')
+        self.assertEqual(style.doc.getvalue(), b'::\n\n  foobar\n\n\n')
 
     def test_important(self):
         style = ReSTStyle(ReSTDocument())
         style.start_important()
         style.end_important()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. warning::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. warning::\n\n  \n\n')
 
     def test_note(self):
         style = ReSTStyle(ReSTDocument())
         style.start_note()
         style.end_note()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. note::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. note::\n\n  \n\n')
 
     def test_danger(self):
         style = ReSTStyle(ReSTDocument())
         style.start_danger()
         style.end_danger()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. danger::\n\n  \n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n.. danger::\n\n  \n\n')
 
     def test_toctree_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -163,8 +163,7 @@ class TestStyle(unittest.TestCase):
         style.toctree()
         style.tocitem('foo')
         style.tocitem('bar')
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n\n* foo\n\n\n* bar\n\n')
+        self.assertEqual(style.doc.getvalue(), b'\n\n\n* foo\n\n\n* bar\n\n')
 
     def test_hidden_toctree_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -186,9 +185,7 @@ class TestStyle(unittest.TestCase):
         style.hidden_toctree()
         style.hidden_tocitem('foo')
         style.hidden_tocitem('bar')
-        self.assertEqual(
-            style.doc.getvalue(),
-            b'')
+        self.assertEqual(style.doc.getvalue(), b'')
 
     def test_href_link(self):
         style = ReSTStyle(ReSTDocument())
@@ -196,8 +193,7 @@ class TestStyle(unittest.TestCase):
         style.doc.write('example')
         style.end_a()
         self.assertEqual(
-            style.doc.getvalue(),
-            b'`example <http://example.org>`__ '
+            style.doc.getvalue(), b'`example <http://example.org>`__ '
         )
 
     def test_escape_href_link(self):
@@ -207,14 +203,14 @@ class TestStyle(unittest.TestCase):
         style.end_a()
         self.assertEqual(
             style.doc.getvalue(),
-            b'`foo\\: the next bar <http://example.org>`__ ')
+            b'`foo\\: the next bar <http://example.org>`__ ',
+        )
 
     def test_handle_no_text_hrefs(self):
         style = ReSTStyle(ReSTDocument())
         style.start_a(attrs=[('href', 'http://example.org')])
         style.end_a()
-        self.assertEqual(style.doc.getvalue(),
-                         b'`<http://example.org>`__ ')
+        self.assertEqual(style.doc.getvalue(), b'`<http://example.org>`__ ')
 
     def test_sphinx_reference_label_html(self):
         style = ReSTStyle(ReSTDocument())
@@ -253,22 +249,25 @@ class TestStyle(unittest.TestCase):
     def test_table_of_contents_with_title_and_depth(self):
         style = ReSTStyle(ReSTDocument())
         style.table_of_contents(title='Foo', depth=2)
-        self.assertEqual(style.doc.getvalue(),
-                         b'.. contents:: Foo\n   :depth: 2\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'.. contents:: Foo\n   :depth: 2\n'
+        )
 
     def test_sphinx_py_class(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_class('FooClass')
         style.end_sphinx_py_class()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. py:class:: FooClass\n\n  \n\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'\n\n.. py:class:: FooClass\n\n  \n\n'
+        )
 
     def test_sphinx_py_method(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_method('method')
         style.end_sphinx_py_method()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. py:method:: method\n\n  \n\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'\n\n.. py:method:: method\n\n  \n\n'
+        )
 
     def test_sphinx_py_method_with_params(self):
         style = ReSTStyle(ReSTDocument())
@@ -276,14 +275,16 @@ class TestStyle(unittest.TestCase):
         style.end_sphinx_py_method()
         self.assertEqual(
             style.doc.getvalue(),
-            b'\n\n.. py:method:: method(foo=None)\n\n  \n\n')
+            b'\n\n.. py:method:: method(foo=None)\n\n  \n\n',
+        )
 
     def test_sphinx_py_attr(self):
         style = ReSTStyle(ReSTDocument())
         style.start_sphinx_py_attr('Foo')
         style.end_sphinx_py_attr()
-        self.assertEqual(style.doc.getvalue(),
-                         b'\n\n.. py:attribute:: Foo\n\n  \n\n')
+        self.assertEqual(
+            style.doc.getvalue(), b'\n\n.. py:attribute:: Foo\n\n  \n\n'
+        )
 
     def test_write_py_doc_string(self):
         style = ReSTStyle(ReSTDocument())
@@ -293,7 +294,9 @@ class TestStyle(unittest.TestCase):
             'returns: None'
         )
         style.write_py_doc_string(docstring)
-        self.assertEqual(style.doc.getvalue(), (docstring + '\n').encode('latin-1'))
+        self.assertEqual(
+            style.doc.getvalue(), (docstring + '\n').encode('latin-1')
+        )
 
     def test_new_line(self):
         style = ReSTStyle(ReSTDocument())
@@ -330,15 +333,17 @@ class TestStyle(unittest.TestCase):
         style.doc.handle_data('bar')
         style.end_li()
 
-        self.assertEqual(style.doc.getvalue(),
-                         b"\n\n\n* foo\n\n\n  \n  * bar\n  ")
+        self.assertEqual(
+            style.doc.getvalue(), b"\n\n\n* foo\n\n\n  \n  * bar\n  "
+        )
 
     def test_external_link(self):
         style = ReSTStyle(ReSTDocument())
         style.doc.target = 'html'
         style.external_link('MyLink', 'http://example.com/foo')
-        self.assertEqual(style.doc.getvalue(),
-                         b'`MyLink <http://example.com/foo>`_')
+        self.assertEqual(
+            style.doc.getvalue(), b'`MyLink <http://example.com/foo>`_'
+        )
 
     def test_external_link_in_man_page(self):
         style = ReSTStyle(ReSTDocument())
@@ -350,10 +355,7 @@ class TestStyle(unittest.TestCase):
         style = ReSTStyle(ReSTDocument())
         style.doc.target = 'html'
         style.internal_link('MyLink', '/index')
-        self.assertEqual(
-            style.doc.getvalue(),
-            b':doc:`MyLink </index>`'
-        )
+        self.assertEqual(style.doc.getvalue(), b':doc:`MyLink </index>`')
 
     def test_internal_link_in_man_page(self):
         style = ReSTStyle(ReSTDocument())
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_client.py 2.31.35-1/tests/unit/botocore/docs/test_client.py
--- 2.23.6-1/tests/unit/botocore/docs/test_client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_client.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from botocore.docs.client import ClientDocumenter, ClientExceptionsDocumenter
+
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.docs.client import ClientDocumenter
-from botocore.docs.client import ClientExceptionsDocumenter
 
 
 class TestClientDocumenter(BaseDocsTest):
     def setUp(self):
-        super(TestClientDocumenter, self).setUp()
+        super().setUp()
         exception_shape = {
             'SomeException': {
                 'exception': True,
                 'type': 'structure',
-                'members': {
-                    'Message': {'shape': 'String'}
-                },
+                'members': {'Message': {'shape': 'String'}},
             }
         }
         self.add_shape(exception_shape)
@@ -35,43 +33,45 @@ class TestClientDocumenter(BaseDocsTest)
 
     def test_document_client(self):
         self.client_documenter.document_client(self.doc_structure)
-        self.assert_contains_lines_in_order([
-            '======',
-            'Client',
-            '======',
-            '.. py:class:: MyService.Client',
-            '  A low-level client representing AWS MyService',
-            '  AWS MyService Description',
-            '    client = session.create_client(\'myservice\')',
-            '  These are the available methods:',
-            '  *   :py:meth:`~MyService.Client.can_paginate`',
-            '  *   :py:meth:`~MyService.Client.get_paginator`',
-            '  *   :py:meth:`~MyService.Client.get_waiter`',
-            '  *   :py:meth:`~MyService.Client.sample_operation`',
-            '  .. py:method:: can_paginate(operation_name)',
-            '  .. py:method:: get_paginator(operation_name)',
-            '  .. py:method:: get_waiter(waiter_name)',
-            '  .. py:method:: sample_operation(**kwargs)',
-            '    **Request Syntax**',
-            '    ::',
-            '      response = client.sample_operation(',
-            '          Biz=\'string\'',
-            '      )',
-            '    :type Biz: string',
-            '    :param Biz:',
-            '    :rtype: dict',
-            '    :returns:',
-            '      **Response Syntax**',
-            '      ::',
-            '        {',
-            '            \'Biz\': \'string\'',
-            '        }',
-            '      **Response Structure**',
-            '      - *(dict) --*',
-            '        - **Biz** *(string) --*',
-            '**Exceptions**',
-            '*     :py:class:`MyService.Client.exceptions.SomeException`',
-        ])
+        self.assert_contains_lines_in_order(
+            [
+                '======',
+                'Client',
+                '======',
+                '.. py:class:: MyService.Client',
+                '  A low-level client representing AWS MyService',
+                '  AWS MyService Description',
+                '    client = session.create_client(\'myservice\')',
+                '  These are the available methods:',
+                '  *   :py:meth:`~MyService.Client.can_paginate`',
+                '  *   :py:meth:`~MyService.Client.get_paginator`',
+                '  *   :py:meth:`~MyService.Client.get_waiter`',
+                '  *   :py:meth:`~MyService.Client.sample_operation`',
+                '  .. py:method:: can_paginate(operation_name)',
+                '  .. py:method:: get_paginator(operation_name)',
+                '  .. py:method:: get_waiter(waiter_name)',
+                '  .. py:method:: sample_operation(**kwargs)',
+                '    **Request Syntax**',
+                '    ::',
+                '      response = client.sample_operation(',
+                '          Biz=\'string\'',
+                '      )',
+                '    :type Biz: string',
+                '    :param Biz:',
+                '    :rtype: dict',
+                '    :returns:',
+                '      **Response Syntax**',
+                '      ::',
+                '        {',
+                '            \'Biz\': \'string\'',
+                '        }',
+                '      **Response Structure**',
+                '      - *(dict) --*',
+                '        - **Biz** *(string) --*',
+                '**Exceptions**',
+                '*     :py:class:`MyService.Client.exceptions.SomeException`',
+            ]
+        )
 
 
 class TestClientExceptionsDocumenter(BaseDocsTest):
@@ -82,50 +82,52 @@ class TestClientExceptionsDocumenter(Bas
     def test_no_modeled_exceptions(self):
         self.setup_documenter()
         self.exceptions_documenter.document_exceptions(self.doc_structure)
-        self.assert_contains_lines_in_order([
-            '=================',
-            'Client Exceptions',
-            '=================',
-            'Client exceptions are available',
-            'This client has no modeled exception classes.',
-        ])
+        self.assert_contains_lines_in_order(
+            [
+                '=================',
+                'Client Exceptions',
+                '=================',
+                'Client exceptions are available',
+                'This client has no modeled exception classes.',
+            ]
+        )
 
     def test_modeled_exceptions(self):
         exception_shape = {
             'SomeException': {
                 'exception': True,
                 'type': 'structure',
-                'members': {
-                    'Message': {'shape': 'String'}
-                },
+                'members': {'Message': {'shape': 'String'}},
             }
         }
         self.add_shape(exception_shape)
         self.setup_documenter()
         self.exceptions_documenter.document_exceptions(self.doc_structure)
-        self.assert_contains_lines_in_order([
-            '=================',
-            'Client Exceptions',
-            '=================',
-            'Client exceptions are available',
-            'The available client exceptions are:',
-            '* :py:class:`MyService.Client.exceptions.SomeException`',
-            '.. py:class:: MyService.Client.exceptions.SomeException',
-            '**Example** ::',
-            'except client.exceptions.SomeException as e:',
-            '.. py:attribute:: response',
-            '**Syntax**',
-            '{',
-            "'Message': 'string',",
-            "'Error': {",
-            "'Code': 'string',",
-            "'Message': 'string'",
-            '}',
-            '}',
-            '**Structure**',
-            '- *(dict) --*',
-            '- **Message** *(string) --* ',
-            '- **Error** *(dict) --* ',
-            '- **Code** *(string) --* ',
-            '- **Message** *(string) --* ',
-        ])
+        self.assert_contains_lines_in_order(
+            [
+                '=================',
+                'Client Exceptions',
+                '=================',
+                'Client exceptions are available',
+                'The available client exceptions are:',
+                '* :py:class:`MyService.Client.exceptions.SomeException`',
+                '.. py:class:: MyService.Client.exceptions.SomeException',
+                '**Example** ::',
+                'except client.exceptions.SomeException as e:',
+                '.. py:attribute:: response',
+                '**Syntax**',
+                '{',
+                "'Message': 'string',",
+                "'Error': {",
+                "'Code': 'string',",
+                "'Message': 'string'",
+                '}',
+                '}',
+                '**Structure**',
+                '- *(dict) --*',
+                '- **Message** *(string) --* ',
+                '- **Error** *(dict) --* ',
+                '- **Code** *(string) --* ',
+                '- **Message** *(string) --* ',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_docs.py 2.31.35-1/tests/unit/botocore/docs/test_docs.py
--- 2.23.6-1/tests/unit/botocore/docs/test_docs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_docs.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,26 +14,29 @@ import os
 import shutil
 import tempfile
 
+from botocore.docs import generate_docs
+from botocore.session import get_session
+
 from tests import mock
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.session import get_session
-from botocore.docs import generate_docs
 
 
 class TestGenerateDocs(BaseDocsTest):
     def setUp(self):
-        super(TestGenerateDocs, self).setUp()
+        super().setUp()
         self.docs_root = tempfile.mkdtemp()
         self.loader_patch = mock.patch(
-            'botocore.session.create_loader', return_value=self.loader)
+            'botocore.session.create_loader', return_value=self.loader
+        )
         self.available_service_patch = mock.patch(
             'botocore.session.Session.get_available_services',
-            return_value=['myservice'])
+            return_value=['myservice'],
+        )
         self.loader_patch.start()
         self.available_service_patch.start()
 
     def tearDown(self):
-        super(TestGenerateDocs, self).tearDown()
+        super().tearDown()
         shutil.rmtree(self.docs_root)
         self.loader_patch.stop()
         self.available_service_patch.stop()
@@ -44,13 +47,15 @@ class TestGenerateDocs(BaseDocsTest):
         generate_docs(self.docs_root, session)
 
         reference_services_path = os.path.join(
-            self.docs_root, 'reference', 'services')
+            self.docs_root, 'reference', 'services'
+        )
         reference_service_path = os.path.join(
-            reference_services_path, 'myservice.rst')
+            reference_services_path, 'myservice.rst'
+        )
         self.assertTrue(os.path.exists(reference_service_path))
 
         # Make sure the rst file has some the expected contents.
-        with open(reference_service_path, 'r') as f:
+        with open(reference_service_path) as f:
             contents = f.read()
             self.assertIn('AWS MyService', contents)
             self.assertIn('Client', contents)
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_docstring.py 2.31.35-1/tests/unit/botocore/docs/test_docstring.py
--- 2.23.6-1/tests/unit/botocore/docs/test_docstring.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_docstring.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, mock
-from botocore.docs.docstring import LazyLoadedDocstring
-from botocore.docs.docstring import ClientMethodDocstring
-from botocore.docs.docstring import WaiterDocstring
-from botocore.docs.docstring import PaginatorDocstring
+from botocore.docs.docstring import (
+    ClientMethodDocstring,
+    LazyLoadedDocstring,
+    PaginatorDocstring,
+    WaiterDocstring,
+)
+
+from tests import mock, unittest
 
 
 class MockedLazyLoadedDocstring(LazyLoadedDocstring):
     def __init__(self, *args, **kwargs):
-        super(MockedLazyLoadedDocstring, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self.mocked_writer_method = mock.Mock()
 
     def _write_docstring(self, *args, **kwargs):
@@ -34,19 +37,22 @@ class TestLazyLoadedDocstring(unittest.T
     def test_expandtabs(self):
         docstring = MockedLazyLoadedDocstring()
         docstring.mocked_writer_method.side_effect = (
-            lambda section: section.write('foo\t'))
+            lambda section: section.write('foo\t')
+        )
         self.assertEqual('foo ', docstring.expandtabs(1))
 
     def test_str(self):
         docstring = MockedLazyLoadedDocstring()
         docstring.mocked_writer_method.side_effect = (
-            lambda section: section.write('foo'))
+            lambda section: section.write('foo')
+        )
         self.assertEqual('foo', str(docstring))
 
     def test_repr(self):
         docstring = MockedLazyLoadedDocstring()
         docstring.mocked_writer_method.side_effect = (
-            lambda section: section.write('foo'))
+            lambda section: section.write('foo')
+        )
         self.assertEqual('foo', repr(docstring))
 
     def test_is_lazy_loaded(self):
@@ -63,14 +69,15 @@ class TestLazyLoadedDocstring(unittest.T
         str(docstring)
         # The mock.ANY represents the DocumentStructure that is filled out.
         docstring.mocked_writer_method.assert_called_with(
-            mock.ANY, *args, **kwargs)
+            mock.ANY, *args, **kwargs
+        )
 
 
 class TestClientMethodDocstring(unittest.TestCase):
     def test_use_correct_docstring_writer(self):
         with mock.patch(
-                'botocore.docs.docstring'
-                '.document_model_driven_method') as mock_writer:
+            'botocore.docs.docstring' '.document_model_driven_method'
+        ) as mock_writer:
             docstring = ClientMethodDocstring()
             str(docstring)
             self.assertTrue(mock_writer.called)
@@ -79,8 +86,8 @@ class TestClientMethodDocstring(unittest
 class TestWaiterDocstring(unittest.TestCase):
     def test_use_correct_docstring_writer(self):
         with mock.patch(
-                'botocore.docs.docstring'
-                '.document_wait_method') as mock_writer:
+            'botocore.docs.docstring' '.document_wait_method'
+        ) as mock_writer:
             docstring = WaiterDocstring()
             str(docstring)
             self.assertTrue(mock_writer.called)
@@ -89,8 +96,8 @@ class TestWaiterDocstring(unittest.TestC
 class TestPaginatorDocstring(unittest.TestCase):
     def test_use_correct_docstring_writer(self):
         with mock.patch(
-                'botocore.docs.docstring'
-                '.document_paginate_method') as mock_writer:
+            'botocore.docs.docstring' '.document_paginate_method'
+        ) as mock_writer:
             docstring = PaginatorDocstring()
             str(docstring)
             self.assertTrue(mock_writer.called)
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_example.py 2.31.35-1/tests/unit/botocore/docs/test_example.py
--- 2.23.6-1/tests/unit/botocore/docs/test_example.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_example.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,413 +10,509 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from botocore.docs.example import (
+    RequestExampleDocumenter,
+    ResponseExampleDocumenter,
+)
+from botocore.docs.utils import DocumentedShape
+from botocore.hooks import HierarchicalEmitter
+
 from tests import mock
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.hooks import HierarchicalEmitter
-from botocore.docs.example import ResponseExampleDocumenter
-from botocore.docs.example import RequestExampleDocumenter
-from botocore.docs.utils import DocumentedShape
 
 
 class BaseExampleDocumenterTest(BaseDocsTest):
     def setUp(self):
-        super(BaseExampleDocumenterTest, self).setUp()
+        super().setUp()
         self.event_emitter = HierarchicalEmitter()
         self.request_example = RequestExampleDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
         self.response_example = ResponseExampleDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
 
 
 class TestDocumentDefaultValue(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentDefaultValue, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call'
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo=\'string\'',
+                '  )',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo=\'string\'',
-            '  )'
-        ])
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
+        )
+        self.assert_contains_lines_in_order(
+            ['::', '  {', '      \'Foo\': \'string\'', '  }']
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': \'string\'',
-            '  }'
-        ])
 
 
 class TestDocumentNoMembers(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentNoMembers, self).setUp()
+        super().setUp()
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call'
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            ['::', '  response = myclient.call()']
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call()'
-        ])
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {}'
-        ])
+        self.assert_contains_lines_in_order(['::', '  {}'])
 
 
 class TestTraverseAndDocumentShape(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestTraverseAndDocumentShape, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
         self.event_emitter = mock.Mock()
         self.request_example = RequestExampleDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
         self.response_example = ResponseExampleDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
 
     def test_events_emitted_response_example(self):
         self.response_example.traverse_and_document_shape(
             section=self.doc_structure,
-            shape=self.operation_model.input_shape, history=[]
+            shape=self.operation_model.input_shape,
+            history=[],
         )
         structure_section = self.doc_structure.get_section('structure-value')
         print(self.event_emitter.emit.call_args_list[0][1]['section'].name)
         self.assertEqual(
             self.event_emitter.emit.call_args_list,
-            [mock.call('docs.response-example.myservice.SampleOperation.Foo',
-                       section=structure_section.get_section(
-                           'Foo').get_section('member-value')),
-             mock.call(('docs.response-example.myservice.SampleOperation'
-                        '.complete-section'), section=self.doc_structure)]
+            [
+                mock.call(
+                    'docs.response-example.myservice.SampleOperation.Foo',
+                    section=structure_section.get_section('Foo').get_section(
+                        'member-value'
+                    ),
+                ),
+                mock.call(
+                    (
+                        'docs.response-example.myservice.SampleOperation'
+                        '.complete-section'
+                    ),
+                    section=self.doc_structure,
+                ),
+            ],
         )
 
     def test_events_emitted_request_example(self):
         self.request_example.traverse_and_document_shape(
             section=self.doc_structure,
-            shape=self.operation_model.input_shape, history=[]
+            shape=self.operation_model.input_shape,
+            history=[],
         )
         structure_section = self.doc_structure.get_section('structure-value')
         self.assertEqual(
             self.event_emitter.emit.call_args_list,
-            [mock.call('docs.request-example.myservice.SampleOperation.Foo',
-                       section=structure_section.get_section(
-                           'Foo').get_section('member-value')),
-             mock.call(('docs.request-example.myservice.SampleOperation'
-                        '.complete-section'), section=self.doc_structure)]
+            [
+                mock.call(
+                    'docs.request-example.myservice.SampleOperation.Foo',
+                    section=structure_section.get_section('Foo').get_section(
+                        'member-value'
+                    ),
+                ),
+                mock.call(
+                    (
+                        'docs.request-example.myservice.SampleOperation'
+                        '.complete-section'
+                    ),
+                    section=self.doc_structure,
+                ),
+            ],
         )
 
 
 class TestDocumentEnumValue(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentEnumValue, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'EnumString': {
-                'type': 'string',
-                'enum': [
-                    'foo',
-                    'bar'
-                ]
-            }}
+            {'EnumString': {'type': 'string', 'enum': ['foo', 'bar']}}
         )
         self.add_shape_to_params('Foo', 'EnumString', 'This describes foo.')
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call'
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo=\'foo\'|\'bar\'',
+                '  )',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo=\'foo\'|\'bar\'',
-            '  )'
-        ])
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
+        )
+        self.assert_contains_lines_in_order(
+            ['::', '  {', '      \'Foo\': \'foo\'|\'bar\'', '  }']
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': \'foo\'|\'bar\'',
-            '  }'
-        ])
 
 
 class TestDocumentMultipleDefaultValues(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentMultipleDefaultValues, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
-        self.add_shape_to_params('Bar', 'String', 'This describes bar.',
-                                 is_required=True)
+        self.add_shape_to_params(
+            'Bar', 'String', 'This describes bar.', is_required=True
+        )
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call'
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo=\'string\',',
+                '      Bar=\'string\'',
+                '  )',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo=\'string\',',
-            '      Bar=\'string\'',
-            '  )'
-        ])
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': \'string\',',
+                '      \'Bar\': \'string\'',
+                '  }',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': \'string\',',
-            '      \'Bar\': \'string\'',
-            '  }'
-        ])
 
 
 class TestDocumentInclude(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentInclude, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
         self.include_params = [
             DocumentedShape(
-                name='Baz', type_name='integer',
-                documentation='This describes baz.'
+                name='Baz',
+                type_name='integer',
+                documentation='This describes baz.',
             )
         ]
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
             prefix='response = myclient.call',
-            include=self.include_params
+            include=self.include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo=\'string\',',
+                '      Baz=123',
+                '  )',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo=\'string\',',
-            '      Baz=123',
-            '  )'
-        ])
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            include=self.include_params
+            self.doc_structure,
+            self.operation_model.input_shape,
+            include=self.include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': \'string\',',
+                '      \'Baz\': 123',
+                '  }',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': \'string\',',
-            '      \'Baz\': 123',
-            '  }'
-        ])
 
 
 class TestDocumentExclude(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentExclude, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
-        self.add_shape_to_params('Bar', 'String', 'This describes bar.',
-                                 is_required=True)
+        self.add_shape_to_params(
+            'Bar', 'String', 'This describes bar.', is_required=True
+        )
         self.exclude_params = ['Foo']
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
+            self.doc_structure,
+            self.operation_model.input_shape,
             prefix='response = myclient.call',
-            exclude=self.exclude_params
+            exclude=self.exclude_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Bar=\'string\'',
+                '  )',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Bar=\'string\'',
-            '  )'
-        ])
         self.assert_not_contains_line('      Foo=\'string\'')
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            exclude=self.exclude_params
+            self.doc_structure,
+            self.operation_model.input_shape,
+            exclude=self.exclude_params,
+        )
+        self.assert_contains_lines_in_order(
+            ['::', '  {', '      \'Bar\': \'string\'', '  }']
         )
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Bar\': \'string\'',
-            '  }'
-        ])
         self.assert_not_contains_line('\'Foo\': \'string\',')
 
 
 class TestDocumentList(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentList, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'List': {
-                'type': 'list',
-                'member': {'shape': 'String',
-                           'documentation': 'A string element'}}})
+            {
+                'List': {
+                    'type': 'list',
+                    'member': {
+                        'shape': 'String',
+                        'documentation': 'A string element',
+                    },
+                }
+            }
+        )
         self.add_shape_to_params('Foo', 'List', 'This describes the list.')
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call')
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo=[',
-            '          \'string\',',
-            '      ]',
-            '  )'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo=[',
+                '          \'string\',',
+                '      ]',
+                '  )',
+            ]
+        )
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': [',
-            '          \'string\',',
-            '      ]',
-            '  }'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': [',
+                '          \'string\',',
+                '      ]',
+                '  }',
+            ]
+        )
 
 
 class TestDocumentMap(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentMap, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Map': {
-                'type': 'map',
-                'key': {'shape': 'String'},
-                'value': {'shape': 'String'}}})
+            {
+                'Map': {
+                    'type': 'map',
+                    'key': {'shape': 'String'},
+                    'value': {'shape': 'String'},
+                }
+            }
+        )
         self.add_shape_to_params('Foo', 'Map', 'This describes the map.')
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call')
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo={',
-            '          \'string\': \'string\'',
-            '      }',
-            '  )'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo={',
+                '          \'string\': \'string\'',
+                '      }',
+                '  )',
+            ]
+        )
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': {',
-            '          \'string\': \'string\'',
-            '      }',
-            '  }'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': {',
+                '          \'string\': \'string\'',
+                '      }',
+                '  }',
+            ]
+        )
 
 
 class TestDocumentStructure(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentStructure, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Structure': {
-                'type': 'structure',
-                'members': {
-                    'Member': {'shape': 'String',
-                               'documentation': 'This is its member.'}}}})
+            {
+                'Structure': {
+                    'type': 'structure',
+                    'members': {
+                        'Member': {
+                            'shape': 'String',
+                            'documentation': 'This is its member.',
+                        }
+                    },
+                }
+            }
+        )
         self.add_shape_to_params(
-            'Foo', 'Structure', 'This describes the structure.')
+            'Foo', 'Structure', 'This describes the structure.'
+        )
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call')
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo={',
-            '          \'Member\': \'string\'',
-            '      }',
-            '  )'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo={',
+                '          \'Member\': \'string\'',
+                '      }',
+                '  )',
+            ]
+        )
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': {',
-            '          \'Member\': \'string\'',
-            '      }',
-            '  }'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': {',
+                '          \'Member\': \'string\'',
+                '      }',
+                '  }',
+            ]
+        )
 
 
 class TestDocumentRecursiveShape(BaseExampleDocumenterTest):
     def setUp(self):
-        super(TestDocumentRecursiveShape, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Structure': {
-                'type': 'structure',
-                'members': {
-                    'Foo': {
-                        'shape': 'Structure',
-                        'documentation': 'This is a recursive structure.'}}}})
+            {
+                'Structure': {
+                    'type': 'structure',
+                    'members': {
+                        'Foo': {
+                            'shape': 'Structure',
+                            'documentation': 'This is a recursive structure.',
+                        }
+                    },
+                }
+            }
+        )
         self.add_shape_to_params(
-            'Foo', 'Structure', 'This describes the structure.')
+            'Foo', 'Structure', 'This describes the structure.'
+        )
 
     def test_request_example(self):
         self.request_example.document_example(
-            self.doc_structure, self.operation_model.input_shape,
-            prefix='response = myclient.call')
-        self.assert_contains_lines_in_order([
-            '::',
-            '  response = myclient.call(',
-            '      Foo={',
-            '          \'Foo\': {\'... recursive ...\'}',
-            '      }',
-            '  )'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            prefix='response = myclient.call',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  response = myclient.call(',
+                '      Foo={',
+                '          \'Foo\': {\'... recursive ...\'}',
+                '      }',
+                '  )',
+            ]
+        )
 
     def test_response_example(self):
         self.response_example.document_example(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '::',
-            '  {',
-            '      \'Foo\': {',
-            '          \'Foo\': {\'... recursive ...\'}',
-            '      }',
-            '  }'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '::',
+                '  {',
+                '      \'Foo\': {',
+                '          \'Foo\': {\'... recursive ...\'}',
+                '      }',
+                '  }',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_method.py 2.31.35-1/tests/unit/botocore/docs/test_method.py
--- 2.23.6-1/tests/unit/botocore/docs/test_method.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_method.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,19 +10,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from botocore.docs.method import (
+    document_custom_method,
+    document_custom_signature,
+    document_model_driven_method,
+    document_model_driven_signature,
+    get_instance_public_methods,
+)
+from botocore.docs.utils import DocumentedShape
+from botocore.hooks import HierarchicalEmitter
+
 from tests import unittest
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.hooks import HierarchicalEmitter
-from botocore.docs.method import document_model_driven_signature
-from botocore.docs.method import document_custom_signature
-from botocore.docs.method import document_custom_method
-from botocore.docs.method import document_model_driven_method
-from botocore.docs.method import get_instance_public_methods
-from botocore.docs.utils import DocumentedShape
 
 
 class TestGetInstanceMethods(unittest.TestCase):
-    class MySampleClass(object):
+    class MySampleClass:
         def _internal_method(self):
             pass
 
@@ -35,41 +38,48 @@ class TestGetInstanceMethods(unittest.Te
         self.assertEqual(len(instance_methods), 1)
         self.assertIn('public_method', instance_methods)
         self.assertEqual(
-            instance.public_method, instance_methods['public_method'])
+            instance.public_method, instance_methods['public_method']
+        )
 
 
 class TestDocumentModelDrivenSignature(BaseDocsTest):
     def setUp(self):
-        super(TestDocumentModelDrivenSignature, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String')
         self.add_shape_to_params('Bar', 'String', is_required=True)
         self.add_shape_to_params('Baz', 'String')
 
     def test_document_signature(self):
         document_model_driven_signature(
-            self.doc_structure, 'my_method', self.operation_model)
-        self.assert_contains_line(
-            '.. py:method:: my_method(**kwargs)')
+            self.doc_structure, 'my_method', self.operation_model
+        )
+        self.assert_contains_line('.. py:method:: my_method(**kwargs)')
 
     def test_document_signature_exclude_all_kwargs(self):
         exclude_params = ['Foo', 'Bar', 'Baz']
         document_model_driven_signature(
-            self.doc_structure, 'my_method', self.operation_model,
-            exclude=exclude_params)
-        self.assert_contains_line(
-            '.. py:method:: my_method()')
+            self.doc_structure,
+            'my_method',
+            self.operation_model,
+            exclude=exclude_params,
+        )
+        self.assert_contains_line('.. py:method:: my_method()')
 
     def test_document_signature_exclude_and_include(self):
         exclude_params = ['Foo', 'Bar', 'Baz']
         include_params = [
             DocumentedShape(
-                name='Biz', type_name='integer', documentation='biz docs')
+                name='Biz', type_name='integer', documentation='biz docs'
+            )
         ]
         document_model_driven_signature(
-            self.doc_structure, 'my_method', self.operation_model,
-            include=include_params, exclude=exclude_params)
-        self.assert_contains_line(
-            '.. py:method:: my_method(**kwargs)')
+            self.doc_structure,
+            'my_method',
+            self.operation_model,
+            include=include_params,
+            exclude=exclude_params,
+        )
+        self.assert_contains_line('.. py:method:: my_method(**kwargs)')
 
 
 class TestDocumentCustomSignature(BaseDocsTest):
@@ -78,9 +88,11 @@ class TestDocumentCustomSignature(BaseDo
 
     def test_document_signature(self):
         document_custom_signature(
-            self.doc_structure, 'my_method', self.sample_method)
+            self.doc_structure, 'my_method', self.sample_method
+        )
         self.assert_contains_line(
-            '.. py:method:: my_method(foo, bar=\'bar\', baz=None)')
+            '.. py:method:: my_method(foo, bar=\'bar\', baz=None)'
+        )
 
 
 class TestDocumentCustomMethod(BaseDocsTest):
@@ -94,241 +106,275 @@ class TestDocumentCustomMethod(BaseDocsT
 
     def test_document_custom_signature(self):
         document_custom_method(
-            self.doc_structure, 'my_method', self.custom_method)
-        self.assert_contains_lines_in_order([
-            '.. py:method:: my_method(foo)',
-            '  This is a custom method',
-            '  :type foo: string',
-            '  :param foo: The foo parameter'
-        ])
+            self.doc_structure, 'my_method', self.custom_method
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: my_method(foo)',
+                '  This is a custom method',
+                '  :type foo: string',
+                '  :param foo: The foo parameter',
+            ]
+        )
 
 
 class TestDocumentModelDrivenMethod(BaseDocsTest):
     def setUp(self):
-        super(TestDocumentModelDrivenMethod, self).setUp()
+        super().setUp()
         self.event_emitter = HierarchicalEmitter()
         self.add_shape_to_params('Bar', 'String')
 
     def test_default(self):
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
         )
         cross_ref_link = (
             'See also: `AWS API Documentation '
             '<https://docs.aws.amazon.com/goto/WebAPI'
             '/myservice-2014-01-01/SampleOperation>'
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo(**kwargs)',
-            '  This describes the foo method.',
-            cross_ref_link,
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo(',
-            '        Bar=\'string\'',
-            '    )',
-            '  :type Bar: string',
-            '  :param Bar:',
-            '  :rtype: dict',
-            '  :returns:',
-            '    **Response Syntax**',
-            '    ::',
-            '      {',
-            '          \'Bar\': \'string\'',
-            '      }',
-            '    **Response Structure**',
-            '    - *(dict) --*',
-            '      - **Bar** *(string) --*'
-        ])
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo(**kwargs)',
+                '  This describes the foo method.',
+                cross_ref_link,
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo(',
+                '        Bar=\'string\'',
+                '    )',
+                '  :type Bar: string',
+                '  :param Bar:',
+                '  :rtype: dict',
+                '  :returns:',
+                '    **Response Syntax**',
+                '    ::',
+                '      {',
+                '          \'Bar\': \'string\'',
+                '      }',
+                '    **Response Structure**',
+                '    - *(dict) --*',
+                '      - **Bar** *(string) --*',
+            ]
+        )
 
     def test_no_input_output_shape(self):
         del self.json_model['operations']['SampleOperation']['input']
         del self.json_model['operations']['SampleOperation']['output']
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo()',
+                '  This describes the foo method.',
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo()',
+                '  :returns: None',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo()',
-            '  This describes the foo method.',
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo()',
-            '  :returns: None',
-        ])
 
     def test_include_input(self):
         include_params = [
             DocumentedShape(
-                name='Biz', type_name='string', documentation='biz docs')
+                name='Biz', type_name='string', documentation='biz docs'
+            )
         ]
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
             example_prefix='response = client.foo',
-            include_input=include_params
+            include_input=include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo(**kwargs)',
+                '  This describes the foo method.',
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo(',
+                '        Bar=\'string\',',
+                '        Biz=\'string\'',
+                '    )',
+                '  :type Bar: string',
+                '  :param Bar:',
+                '  :type Biz: string',
+                '  :param Biz: biz docs',
+                '  :rtype: dict',
+                '  :returns:',
+                '    **Response Syntax**',
+                '    ::',
+                '      {',
+                '          \'Bar\': \'string\'',
+                '      }',
+                '    **Response Structure**',
+                '    - *(dict) --*',
+                '      - **Bar** *(string) --*',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo(**kwargs)',
-            '  This describes the foo method.',
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo(',
-            '        Bar=\'string\',',
-            '        Biz=\'string\'',
-            '    )',
-            '  :type Bar: string',
-            '  :param Bar:',
-            '  :type Biz: string',
-            '  :param Biz: biz docs',
-            '  :rtype: dict',
-            '  :returns:',
-            '    **Response Syntax**',
-            '    ::',
-            '      {',
-            '          \'Bar\': \'string\'',
-            '      }',
-            '    **Response Structure**',
-            '    - *(dict) --*',
-            '      - **Bar** *(string) --*'
-        ])
 
     def test_include_output(self):
         include_params = [
             DocumentedShape(
-                name='Biz', type_name='string', documentation='biz docs')
+                name='Biz', type_name='string', documentation='biz docs'
+            )
         ]
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
             example_prefix='response = client.foo',
-            include_output=include_params
+            include_output=include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo(**kwargs)',
+                '  This describes the foo method.',
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo(',
+                '        Bar=\'string\'',
+                '    )',
+                '  :type Bar: string',
+                '  :param Bar:',
+                '  :rtype: dict',
+                '  :returns:',
+                '    **Response Syntax**',
+                '    ::',
+                '      {',
+                '          \'Bar\': \'string\'',
+                '          \'Biz\': \'string\'',
+                '      }',
+                '    **Response Structure**',
+                '    - *(dict) --*',
+                '      - **Bar** *(string) --*',
+                '      - **Biz** *(string) --*',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo(**kwargs)',
-            '  This describes the foo method.',
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo(',
-            '        Bar=\'string\'',
-            '    )',
-            '  :type Bar: string',
-            '  :param Bar:',
-            '  :rtype: dict',
-            '  :returns:',
-            '    **Response Syntax**',
-            '    ::',
-            '      {',
-            '          \'Bar\': \'string\'',
-            '          \'Biz\': \'string\'',
-            '      }',
-            '    **Response Structure**',
-            '    - *(dict) --*',
-            '      - **Bar** *(string) --*',
-            '      - **Biz** *(string) --*'
-        ])
 
     def test_exclude_input(self):
         self.add_shape_to_params('Biz', 'String')
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
             example_prefix='response = client.foo',
-            exclude_input=['Bar']
+            exclude_input=['Bar'],
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo(**kwargs)',
+                '  This describes the foo method.',
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo(',
+                '        Biz=\'string\'',
+                '    )',
+                '  :type Biz: string',
+                '  :param Biz:',
+                '  :rtype: dict',
+                '  :returns:',
+                '    **Response Syntax**',
+                '    ::',
+                '      {',
+                '          \'Bar\': \'string\'',
+                '          \'Biz\': \'string\'',
+                '      }',
+                '    **Response Structure**',
+                '    - *(dict) --*',
+                '      - **Bar** *(string) --*',
+                '      - **Biz** *(string) --*',
+            ]
+        )
+        self.assert_not_contains_lines(
+            [':param Bar: string', 'Bar=\'string\'']
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo(**kwargs)',
-            '  This describes the foo method.',
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo(',
-            '        Biz=\'string\'',
-            '    )',
-            '  :type Biz: string',
-            '  :param Biz:',
-            '  :rtype: dict',
-            '  :returns:',
-            '    **Response Syntax**',
-            '    ::',
-            '      {',
-            '          \'Bar\': \'string\'',
-            '          \'Biz\': \'string\'',
-            '      }',
-            '    **Response Structure**',
-            '    - *(dict) --*',
-            '      - **Bar** *(string) --*',
-            '      - **Biz** *(string) --*'
-        ])
-        self.assert_not_contains_lines([
-            ':param Bar: string',
-            'Bar=\'string\''
-        ])
 
     def test_exclude_output(self):
         self.add_shape_to_params('Biz', 'String')
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
             example_prefix='response = client.foo',
-            exclude_output=['Bar']
+            exclude_output=['Bar'],
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '.. py:method:: foo(**kwargs)',
+                '  This describes the foo method.',
+                '  **Request Syntax**',
+                '  ::',
+                '    response = client.foo(',
+                '        Bar=\'string\'',
+                '        Biz=\'string\'',
+                '    )',
+                '  :type Biz: string',
+                '  :param Biz:',
+                '  :rtype: dict',
+                '  :returns:',
+                '    **Response Syntax**',
+                '    ::',
+                '      {',
+                '          \'Biz\': \'string\'',
+                '      }',
+                '    **Response Structure**',
+                '    - *(dict) --*',
+                '      - **Biz** *(string) --*',
+            ]
+        )
+        self.assert_not_contains_lines(
+            [
+                '\'Bar\': \'string\'',
+                '- **Bar** *(string) --*',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '.. py:method:: foo(**kwargs)',
-            '  This describes the foo method.',
-            '  **Request Syntax**',
-            '  ::',
-            '    response = client.foo(',
-            '        Bar=\'string\'',
-            '        Biz=\'string\'',
-            '    )',
-            '  :type Biz: string',
-            '  :param Biz:',
-            '  :rtype: dict',
-            '  :returns:',
-            '    **Response Syntax**',
-            '    ::',
-            '      {',
-            '          \'Biz\': \'string\'',
-            '      }',
-            '    **Response Structure**',
-            '    - *(dict) --*',
-            '      - **Biz** *(string) --*'
-        ])
-        self.assert_not_contains_lines([
-            '\'Bar\': \'string\'',
-            '- **Bar** *(string) --*',
-        ])
 
     def test_streaming_body_in_output(self):
         self.add_shape_to_params('Body', 'Blob')
         self.json_model['shapes']['Blob'] = {'type': 'blob'}
-        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = \
+        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = (
             'Body'
+        )
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
         )
         self.assert_contains_line('**Body** (:class:`.StreamingBody`)')
 
     def test_event_stream_body_in_output(self):
         self.add_shape_to_params('Payload', 'EventStream')
-        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = \
+        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = (
             'Payload'
+        )
         self.json_model['shapes']['EventStream'] = {
             'type': 'structure',
             'eventstream': True,
-            'members': {'Event': {'shape': 'Event'}}
+            'members': {'Event': {'shape': 'Event'}},
         }
         self.json_model['shapes']['Event'] = {
             'type': 'structure',
@@ -338,63 +384,73 @@ class TestDocumentModelDrivenMethod(Base
                     'shape': 'EventFields',
                     'eventpayload': True,
                 }
-            }
+            },
         }
         self.json_model['shapes']['EventFields'] = {
             'type': 'structure',
-            'members': {
-                'Field': {'shape': 'EventField'}
-            }
+            'members': {'Field': {'shape': 'EventField'}},
         }
         self.json_model['shapes']['EventField'] = {'type': 'blob'}
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
+        )
+        self.assert_contains_lines_in_order(
+            [
+                "this operation contains an :class:`.EventStream`",
+                "'Payload': EventStream({",
+                "'Event': {",
+                "'Fields': {",
+                "'Field': b'bytes'",
+                "**Payload** (:class:`.EventStream`)",
+                "**Event** *(dict)",
+                "**Fields** *(dict)",
+                "**Field** *(bytes)",
+            ]
         )
-        self.assert_contains_lines_in_order([
-            "this operation contains an :class:`.EventStream`",
-            "'Payload': EventStream({",
-            "'Event': {",
-            "'Fields': {",
-            "'Field': b'bytes'",
-            "**Payload** (:class:`.EventStream`)",
-            "**Event** *(dict)",
-            "**Fields** *(dict)",
-            "**Field** *(bytes)",
-        ])
 
     def test_streaming_body_in_input(self):
         del self.json_model['operations']['SampleOperation']['output']
         self.add_shape_to_params('Body', 'Blob')
         self.json_model['shapes']['Blob'] = {'type': 'blob'}
-        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = \
+        self.json_model['shapes']['SampleOperationInputOutput']['payload'] = (
             'Body'
+        )
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
         )
         # The line in the example
         self.assert_contains_line('Body=b\'bytes\'|file')
         # The line in the parameter description
         self.assert_contains_line(
-            ':type Body: bytes or seekable file-like object')
+            ':type Body: bytes or seekable file-like object'
+        )
 
     def test_deprecated(self):
         self.json_model['operations']['SampleOperation']['deprecated'] = True
         document_model_driven_method(
-            self.doc_structure, 'foo', self.operation_model,
+            self.doc_structure,
+            'foo',
+            self.operation_model,
             event_emitter=self.event_emitter,
             method_description='This describes the foo method.',
-            example_prefix='response = client.foo'
+            example_prefix='response = client.foo',
         )
         # The line in the example
-        self.assert_contains_lines_in_order([
-            '  .. danger::',
-            '        This operation is deprecated and may not function as '
-            'expected. This operation should not be used going forward and is '
-            'only kept for the purpose of backwards compatiblity.'
-        ])
+        self.assert_contains_lines_in_order(
+            [
+                '  .. danger::',
+                '        This operation is deprecated and may not function as '
+                'expected. This operation should not be used going forward and is '
+                'only kept for the purpose of backwards compatiblity.',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_paginator.py 2.31.35-1/tests/unit/botocore/docs/test_paginator.py
--- 2.23.6-1/tests/unit/botocore/docs/test_paginator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_paginator.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests.unit.botocore.docs import BaseDocsTest
 from botocore.docs.paginator import PaginatorDocumenter
 from botocore.paginate import PaginatorModel
 
+from tests.unit.botocore.docs import BaseDocsTest
+
 
 class TestPaginatorDocumenter(BaseDocsTest):
     def setUp(self):
-        super(TestPaginatorDocumenter, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Biz', 'String')
         self.extra_setup()
 
@@ -25,64 +26,71 @@ class TestPaginatorDocumenter(BaseDocsTe
         self.setup_client()
         paginator_model = PaginatorModel(self.paginator_json_model)
         self.paginator_documenter = PaginatorDocumenter(
-            client=self.client, service_paginator_model=paginator_model)
+            client=self.client, service_paginator_model=paginator_model
+        )
 
     def test_document_paginators(self):
-        self.paginator_documenter.document_paginators(
-            self.doc_structure)
-        self.assert_contains_lines_in_order([
-            '==========',
-            'Paginators',
-            '==========',
-            'The available paginators are:',
-            '* :py:class:`MyService.Paginator.SampleOperation`',
-            '.. py:class:: MyService.Paginator.SampleOperation',
-            '  ::',
-            '    paginator = client.get_paginator(\'sample_operation\')',
-            '  .. py:method:: paginate(**kwargs)',
-            ('    Creates an iterator that will paginate through responses'
-             ' from :py:meth:`MyService.Client.sample_operation`.'),
-            '    **Request Syntax**',
-            '    ::',
-            '      response_iterator = paginator.paginate(',
-            '          Biz=\'string\',',
-            '          PaginationConfig={',
-            '              \'MaxItems\': 123,',
-            '              \'PageSize\': 123,',
-            '              \'StartingToken\': \'string\'',
-            '          }',
-            '      )',
-            '    :type Biz: string',
-            '    :param Biz:',
-            '    :type PaginationConfig: dict',
-            '    :param PaginationConfig:',
-            ('      A dictionary that provides parameters to '
-             'control pagination.'),
-            '      - **MaxItems** *(integer) --*',
-            '      - **PageSize** *(integer) --*',
-            '      - **StartingToken** *(string) --*',
-            '    :rtype: dict',
-            '    :returns:',
-            '      **Response Syntax**',
-            '      ::',
-            '        {',
-            '            \'Biz\': \'string\',',
-            '            \'NextToken\': \'string\'',
-            '        }',
-            '      **Response Structure**',
-            '      - *(dict) --*',
-            '        - **Biz** *(string) --*',
-            '        - **NextToken** *(string) --*'
-        ])
+        self.paginator_documenter.document_paginators(self.doc_structure)
+        self.assert_contains_lines_in_order(
+            [
+                '==========',
+                'Paginators',
+                '==========',
+                'The available paginators are:',
+                '* :py:class:`MyService.Paginator.SampleOperation`',
+                '.. py:class:: MyService.Paginator.SampleOperation',
+                '  ::',
+                '    paginator = client.get_paginator(\'sample_operation\')',
+                '  .. py:method:: paginate(**kwargs)',
+                (
+                    '    Creates an iterator that will paginate through responses'
+                    ' from :py:meth:`MyService.Client.sample_operation`.'
+                ),
+                '    **Request Syntax**',
+                '    ::',
+                '      response_iterator = paginator.paginate(',
+                '          Biz=\'string\',',
+                '          PaginationConfig={',
+                '              \'MaxItems\': 123,',
+                '              \'PageSize\': 123,',
+                '              \'StartingToken\': \'string\'',
+                '          }',
+                '      )',
+                '    :type Biz: string',
+                '    :param Biz:',
+                '    :type PaginationConfig: dict',
+                '    :param PaginationConfig:',
+                (
+                    '      A dictionary that provides parameters to '
+                    'control pagination.'
+                ),
+                '      - **MaxItems** *(integer) --*',
+                '      - **PageSize** *(integer) --*',
+                '      - **StartingToken** *(string) --*',
+                '    :rtype: dict',
+                '    :returns:',
+                '      **Response Syntax**',
+                '      ::',
+                '        {',
+                '            \'Biz\': \'string\',',
+                '            \'NextToken\': \'string\'',
+                '        }',
+                '      **Response Structure**',
+                '      - *(dict) --*',
+                '        - **Biz** *(string) --*',
+                '        - **NextToken** *(string) --*',
+            ]
+        )
 
     def test_no_page_size_if_no_limit_key(self):
         paginator = self.paginator_json_model["pagination"]
         operation = paginator["SampleOperation"]
         del operation["limit_key"]
 
-        self.paginator_documenter.document_paginators(
-            self.doc_structure)
-        self.assert_not_contains_lines([
-            '              \'PageSize\': 123,',
-            '      - **PageSize** *(integer) --*',
-        ])
+        self.paginator_documenter.document_paginators(self.doc_structure)
+        self.assert_not_contains_lines(
+            [
+                '              \'PageSize\': 123,',
+                '      - **PageSize** *(integer) --*',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_params.py 2.31.35-1/tests/unit/botocore/docs/test_params.py
--- 2.23.6-1/tests/unit/botocore/docs/test_params.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_params.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,302 +10,406 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from botocore.docs.params import (
+    RequestParamsDocumenter,
+    ResponseParamsDocumenter,
+)
+from botocore.docs.utils import DocumentedShape
+from botocore.hooks import HierarchicalEmitter
+
 from tests import mock
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.hooks import HierarchicalEmitter
-from botocore.docs.params import RequestParamsDocumenter
-from botocore.docs.params import ResponseParamsDocumenter
-from botocore.docs.utils import DocumentedShape
 
 
 class BaseParamsDocumenterTest(BaseDocsTest):
     def setUp(self):
-        super(BaseParamsDocumenterTest, self).setUp()
+        super().setUp()
         self.event_emitter = HierarchicalEmitter()
         self.request_params = RequestParamsDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
         self.response_params = ResponseParamsDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
 
 
 class TestDocumentDefaultValue(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentDefaultValue, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: string',
-            ':param Foo: This describes foo.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [':type Foo: string', ':param Foo: This describes foo.']
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(string) --* This describes foo.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            ['- *(dict) --*', '  - **Foo** *(string) --* This describes foo.']
+        )
 
 
 class TestTraverseAndDocumentShape(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestTraverseAndDocumentShape, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
         self.event_emitter = mock.Mock()
         self.request_params = RequestParamsDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
         self.response_params = ResponseParamsDocumenter(
-            service_id='myservice', operation_name='SampleOperation',
-            event_emitter=self.event_emitter)
+            service_id='myservice',
+            operation_name='SampleOperation',
+            event_emitter=self.event_emitter,
+        )
 
     def test_events_emitted_response_params(self):
         self.response_params.traverse_and_document_shape(
             section=self.doc_structure,
-            shape=self.operation_model.input_shape, history=[]
+            shape=self.operation_model.input_shape,
+            history=[],
         )
         self.assertEqual(
             self.event_emitter.emit.call_args_list,
-            [mock.call('docs.response-params.myservice.SampleOperation.Foo',
-                       section=self.doc_structure.get_section('Foo')),
-             mock.call(('docs.response-params.myservice.SampleOperation'
-                        '.complete-section'), section=self.doc_structure)]
+            [
+                mock.call(
+                    'docs.response-params.myservice.SampleOperation.Foo',
+                    section=self.doc_structure.get_section('Foo'),
+                ),
+                mock.call(
+                    (
+                        'docs.response-params.myservice.SampleOperation'
+                        '.complete-section'
+                    ),
+                    section=self.doc_structure,
+                ),
+            ],
         )
 
     def test_events_emitted_request_params(self):
         self.request_params.traverse_and_document_shape(
             section=self.doc_structure,
-            shape=self.operation_model.input_shape, history=[]
+            shape=self.operation_model.input_shape,
+            history=[],
         )
         self.assertEqual(
             self.event_emitter.emit.call_args_list,
-            [mock.call('docs.request-params.myservice.SampleOperation.Foo',
-                       section=self.doc_structure.get_section('Foo')),
-             mock.call(('docs.request-params.myservice.SampleOperation'
-                        '.complete-section'), section=self.doc_structure)]
+            [
+                mock.call(
+                    'docs.request-params.myservice.SampleOperation.Foo',
+                    section=self.doc_structure.get_section('Foo'),
+                ),
+                mock.call(
+                    (
+                        'docs.request-params.myservice.SampleOperation'
+                        '.complete-section'
+                    ),
+                    section=self.doc_structure,
+                ),
+            ],
         )
 
 
 class TestDocumentMultipleDefaultValues(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentMultipleDefaultValues, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
-        self.add_shape_to_params('Bar', 'String', 'This describes bar.',
-                                 is_required=True)
+        self.add_shape_to_params(
+            'Bar', 'String', 'This describes bar.', is_required=True
+        )
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: string',
-            ':param Foo: This describes foo.',
-            ':type Bar: string',
-            ':param Bar: **[REQUIRED]** This describes bar.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: string',
+                ':param Foo: This describes foo.',
+                ':type Bar: string',
+                ':param Bar: **[REQUIRED]** This describes bar.',
+            ]
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(string) --* This describes foo.',
-            '  - **Bar** *(string) --* This describes bar.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                '  - **Foo** *(string) --* This describes foo.',
+                '  - **Bar** *(string) --* This describes bar.',
+            ]
+        )
 
 
 class TestDocumentInclude(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentInclude, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
         self.include_params = [
             DocumentedShape(
-                name='Baz', type_name='integer',
-                documentation='This describes baz.'
+                name='Baz',
+                type_name='integer',
+                documentation='This describes baz.',
             )
         ]
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape,
-            include=self.include_params
+            self.doc_structure,
+            self.operation_model.input_shape,
+            include=self.include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: string',
+                ':param Foo: This describes foo.',
+                ':type Baz: int',
+                ':param Baz: This describes baz.',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            ':type Foo: string',
-            ':param Foo: This describes foo.',
-            ':type Baz: int',
-            ':param Baz: This describes baz.'
-        ])
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape,
-            include=self.include_params
+            self.doc_structure,
+            self.operation_model.input_shape,
+            include=self.include_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                '  - **Foo** *(string) --* This describes foo.',
+                '  - **Baz** *(integer) --* This describes baz.',
+            ]
         )
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(string) --* This describes foo.',
-            '  - **Baz** *(integer) --* This describes baz.'
-        ])
 
 
 class TestDocumentExclude(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentExclude, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Foo', 'String', 'This describes foo.')
-        self.add_shape_to_params('Bar', 'String', 'This describes bar.',
-                                 is_required=True)
+        self.add_shape_to_params(
+            'Bar', 'String', 'This describes bar.', is_required=True
+        )
         self.exclude_params = ['Foo']
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape,
-            exclude=self.exclude_params)
-        self.assert_contains_lines_in_order([
-            ':type Bar: string',
-            ':param Bar: **[REQUIRED]** This describes bar.'
-        ])
-        self.assert_not_contains_lines([
-            ':type Foo: string',
-            ':param Foo: This describes foo.'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            exclude=self.exclude_params,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Bar: string',
+                ':param Bar: **[REQUIRED]** This describes bar.',
+            ]
+        )
+        self.assert_not_contains_lines(
+            [':type Foo: string', ':param Foo: This describes foo.']
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape,
-            exclude=self.exclude_params)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Bar** *(string) --* This describes bar.'
-        ])
+            self.doc_structure,
+            self.operation_model.input_shape,
+            exclude=self.exclude_params,
+        )
+        self.assert_contains_lines_in_order(
+            ['- *(dict) --*', '  - **Bar** *(string) --* This describes bar.']
+        )
         self.assert_not_contains_line(
-            '  - **Foo** *(string) --* This describes foo.')
+            '  - **Foo** *(string) --* This describes foo.'
+        )
 
 
 class TestDocumentList(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentList, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'List': {
-                'type': 'list',
-                'member': {'shape': 'String',
-                           'documentation': 'A string element'}}})
+            {
+                'List': {
+                    'type': 'list',
+                    'member': {
+                        'shape': 'String',
+                        'documentation': 'A string element',
+                    },
+                }
+            }
+        )
         self.add_shape_to_params(
-            'Foo', 'List',
-            'This describes the list. Each element of this list is a string.')
+            'Foo',
+            'List',
+            'This describes the list. Each element of this list is a string.',
+        )
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: list',
-            ':param Foo: This describes the list.',
-            '  - *(string) --* A string element'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: list',
+                ':param Foo: This describes the list.',
+                '  - *(string) --* A string element',
+            ]
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            ('  - **Foo** *(list) --* This describes the list. '
-             'Each element of this list is a string.'),
-            '    - *(string) --* A string element'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                (
+                    '  - **Foo** *(list) --* This describes the list. '
+                    'Each element of this list is a string.'
+                ),
+                '    - *(string) --* A string element',
+            ]
+        )
 
 
 class TestDocumentMap(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentMap, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Map': {
-                'type': 'map',
-                'key': {'shape': 'String'},
-                'value': {'shape': 'String'}}})
+            {
+                'Map': {
+                    'type': 'map',
+                    'key': {'shape': 'String'},
+                    'value': {'shape': 'String'},
+                }
+            }
+        )
         self.add_shape_to_params('Foo', 'Map', 'This describes the map.')
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: dict',
-            ':param Foo: This describes the map.',
-            '  - *(string) --*',
-            '    - *(string) --*'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: dict',
+                ':param Foo: This describes the map.',
+                '  - *(string) --*',
+                '    - *(string) --*',
+            ]
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(dict) --* This describes the map.',
-            '    - *(string) --*',
-            '      - *(string) --*'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                '  - **Foo** *(dict) --* This describes the map.',
+                '    - *(string) --*',
+                '      - *(string) --*',
+            ]
+        )
 
 
 class TestDocumentStructure(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentStructure, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Structure': {
-                'type': 'structure',
-                'members': {
-                    'Member': {'shape': 'String',
-                               'documentation': 'This is its member.'}}}})
+            {
+                'Structure': {
+                    'type': 'structure',
+                    'members': {
+                        'Member': {
+                            'shape': 'String',
+                            'documentation': 'This is its member.',
+                        }
+                    },
+                }
+            }
+        )
         self.add_shape_to_params(
-            'Foo', 'Structure', 'This describes the structure.')
+            'Foo', 'Structure', 'This describes the structure.'
+        )
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: dict',
-            ':param Foo: This describes the structure.',
-            '  - **Member** *(string) --* This is its member.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: dict',
+                ':param Foo: This describes the structure.',
+                '  - **Member** *(string) --* This is its member.',
+            ]
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(dict) --* This describes the structure.',
-            '    - **Member** *(string) --* This is its member.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                '  - **Foo** *(dict) --* This describes the structure.',
+                '    - **Member** *(string) --* This is its member.',
+            ]
+        )
 
 
 class TestDocumentRecursiveShape(BaseParamsDocumenterTest):
     def setUp(self):
-        super(TestDocumentRecursiveShape, self).setUp()
+        super().setUp()
         self.add_shape(
-            {'Structure': {
-                'type': 'structure',
-                'members': {
-                    'Foo': {
-                        'shape': 'Structure',
-                        'documentation': 'This is a recursive structure.'}}}})
+            {
+                'Structure': {
+                    'type': 'structure',
+                    'members': {
+                        'Foo': {
+                            'shape': 'Structure',
+                            'documentation': 'This is a recursive structure.',
+                        }
+                    },
+                }
+            }
+        )
         self.add_shape_to_params(
-            'Foo', 'Structure', 'This describes the structure.')
+            'Foo', 'Structure', 'This describes the structure.'
+        )
 
     def test_request_params(self):
         self.request_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            ':type Foo: dict',
-            ':param Foo: This describes the structure.',
-            '  - **Foo** *(dict) --* This is a recursive structure.'
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                ':type Foo: dict',
+                ':param Foo: This describes the structure.',
+                '  - **Foo** *(dict) --* This is a recursive structure.',
+            ]
+        )
 
     def test_response_params(self):
         self.response_params.document_params(
-            self.doc_structure, self.operation_model.input_shape)
-        self.assert_contains_lines_in_order([
-            '- *(dict) --*',
-            '  - **Foo** *(dict) --* This is a recursive structure.',
-        ])
+            self.doc_structure, self.operation_model.input_shape
+        )
+        self.assert_contains_lines_in_order(
+            [
+                '- *(dict) --*',
+                '  - **Foo** *(dict) --* This is a recursive structure.',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_service.py 2.31.35-1/tests/unit/botocore/docs/test_service.py
--- 2.23.6-1/tests/unit/botocore/docs/test_service.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_service.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,26 +12,27 @@
 # language governing permissions and limitations under the License.
 import os
 
+from botocore.docs.service import ServiceDocumenter
+from botocore.session import get_session
+
 from tests import mock
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.session import get_session
-from botocore.docs.service import ServiceDocumenter
 
 
 class TestServiceDocumenter(BaseDocsTest):
     def setUp(self):
-        super(TestServiceDocumenter, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Biz', 'String')
         self.setup_client()
-        with mock.patch('botocore.session.create_loader',
-                        return_value=self.loader):
+        with mock.patch(
+            'botocore.session.create_loader', return_value=self.loader
+        ):
             session = get_session()
-            self.service_documenter = ServiceDocumenter(
-                'myservice', session)
+            self.service_documenter = ServiceDocumenter('myservice', session)
 
     def test_document_service(self):
         # Note that not everything will be included as it is just
-        # a smoke test to make sure all of the main parts are inluded.
+        # a smoke test to make sure all the main parts are included.
         contents = self.service_documenter.document_service().decode('utf-8')
         lines = [
             '*********',
@@ -66,7 +67,7 @@ class TestServiceDocumenter(BaseDocsTest
             'Waiters',
             '=======',
             '.. py:class:: MyService.Waiter.SampleOperationComplete',
-            '  .. py:method:: wait(**kwargs)'
+            '  .. py:method:: wait(**kwargs)',
         ]
         for line in lines:
             self.assertIn(line, contents)
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_sharedexample.py 2.31.35-1/tests/unit/botocore/docs/test_sharedexample.py
--- 2.23.6-1/tests/unit/botocore/docs/test_sharedexample.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_sharedexample.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,170 +11,140 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from botocore.compat import OrderedDict
+from botocore.docs.sharedexample import (
+    SharedExampleDocumenter,
+    document_shared_examples,
+)
+
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.docs.sharedexample import SharedExampleDocumenter, \
-    document_shared_examples
 
 
 class TestDocumentSharedExamples(BaseDocsTest):
     def setUp(self):
-        super(TestDocumentSharedExamples, self).setUp()
-        self.add_shape({
-            "foo": {
-                "type": "string"
-            }
-        })
-        self.add_shape({
-            "nested": {"type": "string"}
-        })
-        self.add_shape({
-            "other": {
-                "type": "structure",
-                "members": {"nested": {"shape": "nested"}}
-            }
-        })
-        self.add_shape({
-            "aloha": {
-                "type": "list",
-                "member": {"shape": "other"}
+        super().setUp()
+        self.add_shape({"foo": {"type": "string"}})
+        self.add_shape({"nested": {"type": "string"}})
+        self.add_shape(
+            {
+                "other": {
+                    "type": "structure",
+                    "members": {"nested": {"shape": "nested"}},
+                }
             }
-        })
+        )
+        self.add_shape(
+            {"aloha": {"type": "list", "member": {"shape": "other"}}}
+        )
         self.add_shape_to_params('foo', 'foo')
         self.add_shape_to_params('aloha', 'aloha')
-        self._examples = [{
+        self._examples = [
+            {
                 "id": "sample-id",
                 "title": "sample-title",
                 "description": "Sample Description.",
-                "input": OrderedDict([
-                    ("aloha", [
-                        "other",
-                        {
-                            "nested": "fun!"
-                        }
-                    ]),
-                    ("foo", "bar"),
-                ]),
-                "output": OrderedDict([
-                    ("foo", "baz"),
-                ]),
+                "input": OrderedDict(
+                    [
+                        ("aloha", ["other", {"nested": "fun!"}]),
+                        ("foo", "bar"),
+                    ]
+                ),
+                "output": OrderedDict(
+                    [
+                        ("foo", "baz"),
+                    ]
+                ),
                 "comments": {
-                    "input": {
-                        "aloha": "mahalo"
-                    },
-                    "output": {
-                        "foo": "Sample Comment"
-                    }
-                }
+                    "input": {"aloha": "mahalo"},
+                    "output": {"foo": "Sample Comment"},
+                },
             }
         ]
 
     def test_default(self):
         document_shared_examples(
-            self.doc_structure, self.operation_model,
-            'response = client.foo', self._examples)
-        self.assert_contains_lines_in_order([
-            "**Examples**",
-            "Sample Description.",
-            "::",
-            "  response = client.foo(",
-            "      # mahalo",
-            "      aloha=[",
-            "          'other',",
-            "          {",
-            "              'nested': 'fun!',",
-            "          },",
-            "      ],",
-            "      foo='bar',",
-            "  )",
-            "  print(response)",
-            "Expected Output:",
-            "::",
-            "  {",
-            "      # Sample Comment",
-            "      'foo': 'baz',",
-            "      'ResponseMetadata': {",
-            "          '...': '...',",
-            "      },",
-            "  }",
-        ])
+            self.doc_structure,
+            self.operation_model,
+            'response = client.foo',
+            self._examples,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                "**Examples**",
+                "Sample Description.",
+                "::",
+                "  response = client.foo(",
+                "      # mahalo",
+                "      aloha=[",
+                "          'other',",
+                "          {",
+                "              'nested': 'fun!',",
+                "          },",
+                "      ],",
+                "      foo='bar',",
+                "  )",
+                "  print(response)",
+                "Expected Output:",
+                "::",
+                "  {",
+                "      # Sample Comment",
+                "      'foo': 'baz',",
+                "      'ResponseMetadata': {",
+                "          '...': '...',",
+                "      },",
+                "  }",
+            ]
+        )
 
 
 class TestSharedExampleDocumenter(BaseDocsTest):
     def setUp(self):
-        super(TestSharedExampleDocumenter, self).setUp()
+        super().setUp()
         self.documenter = SharedExampleDocumenter()
 
     def test_is_input(self):
         self.add_shape_to_params('foo', 'String')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': 'bar'
-                }
-            },
+            example={'input': {'foo': 'bar'}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo='bar'",
-            ")"
-        ])
+        self.assert_contains_lines_in_order(["foo.bar(", "    foo='bar'", ")"])
 
     def test_dict_example(self):
-        self.add_shape({
-            'bar': {
-                "type": "structure",
-                "members": {
-                    "bar": {"shape": "String"}
+        self.add_shape(
+            {
+                'bar': {
+                    "type": "structure",
+                    "members": {"bar": {"shape": "String"}},
                 }
             }
-        })
+        )
         self.add_shape_to_params('foo', 'bar')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': {'bar': 'baz'}
-                }
-            },
+            example={'input': {'foo': {'bar': 'baz'}}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            ["foo.bar(", "    foo={", "        'bar': 'baz',", "    },", ")"]
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo={",
-            "        'bar': 'baz',",
-            "    },",
-            ")"
-        ])
 
     def test_list_example(self):
-        self.add_shape({
-            "foo": {
-                "type": "list",
-                "member": {"shape": "String"}
-            }
-        })
+        self.add_shape(
+            {"foo": {"type": "list", "member": {"shape": "String"}}}
+        )
         self.add_shape_to_params('foo', 'foo')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': ['bar']
-                }
-            },
+            example={'input': {'foo': ['bar']}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            ["foo.bar(", "    foo=[", "        'bar',", "    ],", ")"]
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo=[",
-            "        'bar',",
-            "    ],",
-            ")"
-        ])
 
     def test_can_handle_no_input_key(self):
         self.add_shape_to_params('foo', 'String')
@@ -182,139 +152,99 @@ class TestSharedExampleDocumenter(BaseDo
             example={},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            ")"
-        ])
+        self.assert_contains_lines_in_order(["foo.bar(", ")"])
 
     def test_unicode_string_example(self):
         self.add_shape_to_params('foo', 'String')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': u'bar'
-                }
-            },
+            example={'input': {'foo': 'bar'}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo='bar'",
-            ")"
-        ])
+        self.assert_contains_lines_in_order(["foo.bar(", "    foo='bar'", ")"])
 
     def test_timestamp_example(self):
-        self.add_shape({
-            'foo': {'type': 'timestamp'}
-        })
+        self.add_shape({'foo': {'type': 'timestamp'}})
         self.add_shape_to_params('foo', 'foo')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': 'Fri, 20 Nov 2015 21:13:12 GMT'
-                }
-            },
+            example={'input': {'foo': 'Fri, 20 Nov 2015 21:13:12 GMT'}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                "foo.bar(",
+                "    foo=datetime(2015, 11, 20, 21, 13, 12, 4, 324, 0)",
+                ")",
+            ]
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo=datetime(2015, 11, 20, 21, 13, 12, 4, 324, 0)",
-            ")"
-        ])
 
     def test_map_example(self):
-        self.add_shape({
-            "baz": {"type": "string"}
-        })
-        self.add_shape({
-            'bar': {
-                "type": "map",
-                "key": {"shape": "baz"},
-                "value": {"shape": "baz"}
+        self.add_shape({"baz": {"type": "string"}})
+        self.add_shape(
+            {
+                'bar': {
+                    "type": "map",
+                    "key": {"shape": "baz"},
+                    "value": {"shape": "baz"},
+                }
             }
-        })
+        )
         self.add_shape_to_params('foo', 'bar')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': {'bar': 'baz'}
-                }
-            },
+            example={'input': {'foo': {'bar': 'baz'}}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            ["foo.bar(", "    foo={", "        'bar': 'baz',", "    },", ")"]
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    foo={",
-            "        'bar': 'baz',",
-            "    },",
-            ")"
-        ])
 
     def test_add_comment(self):
         self.add_shape_to_params('foo', 'String')
         self.documenter.document_shared_example(
             example={
-                'input': {
-                    'foo': 'bar'
-                },
-                'comments': {
-                    'input': {
-                        'foo': 'baz'
-                    }
-                }
+                'input': {'foo': 'bar'},
+                'comments': {'input': {'foo': 'baz'}},
             },
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            ["foo.bar(", "    # baz", "    foo='bar',", ")"]
         )
-        self.assert_contains_lines_in_order([
-            "foo.bar(",
-            "    # baz",
-            "    foo='bar',",
-            ")"
-        ])
 
     def test_unicode_exammple(self):
         self.add_shape_to_params('foo', 'String')
         self.documenter.document_shared_example(
-            example={
-                'input': {
-                    'foo': u'\u2713'
-                }
-            },
+            example={'input': {'foo': '\u2713'}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            ["foo.bar(", "    foo='\u2713'", ")"]
         )
-        self.assert_contains_lines_in_order([
-            u"foo.bar(",
-            u"    foo='\u2713'",
-            u")"
-        ])
 
     def test_escape_character_example(self):
         self.add_shape_to_params('foo', 'String')
         self.documenter.document_shared_example(
-            example={
-                'output': {
-                    'foo': 'good\n\rintentions!\n\r'
-                }
-            },
+            example={'output': {'foo': 'good\n\rintentions!\n\r'}},
             prefix='foo.bar',
             section=self.doc_structure,
-            operation_model=self.operation_model
+            operation_model=self.operation_model,
+        )
+        self.assert_contains_lines_in_order(
+            [
+                "Expected Output:",
+                "  {",
+                "      'foo': 'good\\n\\rintentions!\\n\\r',",
+                "  }",
+            ]
         )
-        self.assert_contains_lines_in_order([
-            "Expected Output:",
-            "  {",
-            "      'foo': 'good\\n\\rintentions!\\n\\r',",
-            "  }",
-        ])
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_utils.py 2.31.35-1/tests/unit/botocore/docs/test_utils.py
--- 2.23.6-1/tests/unit/botocore/docs/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from botocore.docs.utils import (
+    AppendParamDocumentation,
+    AutoPopulatedParam,
+    HideParamFromOperations,
+    escape_controls,
+    get_official_service_name,
+    py_default,
+    py_type_name,
+)
+
 from tests import unittest
 from tests.unit.botocore.docs import BaseDocsTest
-from botocore.docs.utils import py_type_name
-from botocore.docs.utils import py_default
-from botocore.docs.utils import get_official_service_name
-from botocore.docs.utils import AutoPopulatedParam
-from botocore.docs.utils import HideParamFromOperations
-from botocore.docs.utils import AppendParamDocumentation
-from botocore.docs.utils import escape_controls
 
 
 class TestPythonTypeName(unittest.TestCase):
@@ -87,35 +90,39 @@ class TestPythonDefault(unittest.TestCas
 
 class TestGetOfficialServiceName(BaseDocsTest):
     def setUp(self):
-        super(TestGetOfficialServiceName, self).setUp()
-        self.service_model.metadata = {
-            'serviceFullName': 'Official Name'
-        }
+        super().setUp()
+        self.service_model.metadata = {'serviceFullName': 'Official Name'}
 
     def test_no_short_name(self):
-        self.assertEqual('Official Name',
-                         get_official_service_name(self.service_model))
+        self.assertEqual(
+            'Official Name', get_official_service_name(self.service_model)
+        )
 
     def test_aws_short_name(self):
         self.service_model.metadata['serviceAbbreviation'] = 'AWS Foo'
-        self.assertEqual('Official Name (Foo)',
-                         get_official_service_name(self.service_model))
+        self.assertEqual(
+            'Official Name (Foo)',
+            get_official_service_name(self.service_model),
+        )
 
     def test_amazon_short_name(self):
         self.service_model.metadata['serviceAbbreviation'] = 'Amazon Foo'
-        self.assertEqual('Official Name (Foo)',
-                         get_official_service_name(self.service_model))
+        self.assertEqual(
+            'Official Name (Foo)',
+            get_official_service_name(self.service_model),
+        )
 
     def test_short_name_in_official_name(self):
         self.service_model.metadata['serviceFullName'] = 'The Foo Service'
         self.service_model.metadata['serviceAbbreviation'] = 'Amazon Foo'
-        self.assertEqual('The Foo Service',
-                         get_official_service_name(self.service_model))
+        self.assertEqual(
+            'The Foo Service', get_official_service_name(self.service_model)
+        )
 
 
 class TestAutopopulatedParam(BaseDocsTest):
     def setUp(self):
-        super(TestAutopopulatedParam, self).setUp()
+        super().setUp()
         self.name = 'MyMember'
         self.param = AutoPopulatedParam(self.name)
 
@@ -123,9 +130,9 @@ class TestAutopopulatedParam(BaseDocsTes
         section = self.doc_structure.add_new_section(self.name)
         section.add_new_section('param-documentation')
         self.param.document_auto_populated_param(
-            'docs.request-params', self.doc_structure)
-        self.assert_contains_line(
-            'this parameter is automatically populated')
+            'docs.request-params', self.doc_structure
+        )
+        self.assert_contains_line('this parameter is automatically populated')
 
     def test_request_param_required(self):
         section = self.doc_structure.add_new_section(self.name)
@@ -133,10 +140,10 @@ class TestAutopopulatedParam(BaseDocsTes
         section.add_new_section('param-documentation')
         is_required_section.write('**[REQUIRED]**')
         self.param.document_auto_populated_param(
-            'docs.request-params', self.doc_structure)
+            'docs.request-params', self.doc_structure
+        )
         self.assert_not_contains_line('**[REQUIRED]**')
-        self.assert_contains_line(
-            'this parameter is automatically populated')
+        self.assert_contains_line('this parameter is automatically populated')
 
     def test_non_default_param_description(self):
         description = 'This is a custom description'
@@ -144,7 +151,8 @@ class TestAutopopulatedParam(BaseDocsTes
         section = self.doc_structure.add_new_section(self.name)
         section.add_new_section('param-documentation')
         self.param.document_auto_populated_param(
-            'docs.request-params', self.doc_structure)
+            'docs.request-params', self.doc_structure
+        )
         self.assert_contains_line(description)
 
     def test_request_example(self):
@@ -154,15 +162,18 @@ class TestAutopopulatedParam(BaseDocsTes
         section.write(example)
         self.assert_contains_line(example)
         self.param.document_auto_populated_param(
-            'docs.request-example', self.doc_structure)
+            'docs.request-example', self.doc_structure
+        )
         self.assert_not_contains_line(example)
 
     def test_param_not_in_section_request_param(self):
         self.doc_structure.add_new_section('Foo')
         self.param.document_auto_populated_param(
-            'docs.request-params', self.doc_structure)
+            'docs.request-params', self.doc_structure
+        )
         self.assertEqual(
-            '', self.doc_structure.flush_structure().decode('utf-8'))
+            '', self.doc_structure.flush_structure().decode('utf-8')
+        )
 
     def test_param_not_in_section_request_example(self):
         top_section = self.doc_structure.add_new_section('structure-value')
@@ -171,42 +182,46 @@ class TestAutopopulatedParam(BaseDocsTes
         section.write(example)
         self.assert_contains_line(example)
         self.param.document_auto_populated_param(
-            'docs.request-example', self.doc_structure)
+            'docs.request-example', self.doc_structure
+        )
         self.assert_contains_line(example)
 
 
 class TestHideParamFromOperations(BaseDocsTest):
     def setUp(self):
-        super(TestHideParamFromOperations, self).setUp()
+        super().setUp()
         self.name = 'MyMember'
         self.param = HideParamFromOperations(
-            's3', self.name, ['SampleOperation'])
+            's3', self.name, ['SampleOperation']
+        )
 
     def test_hides_params_from_doc_string(self):
         section = self.doc_structure.add_new_section(self.name)
-        param_signature = ':param %s: ' % self.name
+        param_signature = f':param {self.name}: '
         section.write(param_signature)
         self.assert_contains_line(param_signature)
         self.param.hide_param(
             'docs.request-params.s3.SampleOperation.complete-section',
-            self.doc_structure)
+            self.doc_structure,
+        )
         self.assert_not_contains_line(param_signature)
 
     def test_hides_param_from_example(self):
         structure = self.doc_structure.add_new_section('structure-value')
         section = structure.add_new_section(self.name)
-        example = '%s: \'string\'' % self.name
+        example = f'{self.name}: \'string\''
         section.write(example)
         self.assert_contains_line(example)
         self.param.hide_param(
             'docs.request-example.s3.SampleOperation.complete-section',
-            self.doc_structure)
+            self.doc_structure,
+        )
         self.assert_not_contains_line(example)
 
 
 class TestAppendParamDocumentation(BaseDocsTest):
     def setUp(self):
-        super(TestAppendParamDocumentation, self).setUp()
+        super().setUp()
         self.name = 'MyMember'
         self.param = AppendParamDocumentation(self.name, 'hello!')
 
@@ -215,7 +230,8 @@ class TestAppendParamDocumentation(BaseD
         param_section = section.add_new_section('param-documentation')
         param_section.writeln('foo')
         self.param.append_documentation(
-            'docs.request-params', self.doc_structure)
+            'docs.request-params', self.doc_structure
+        )
         self.assert_contains_line('foo\n')
         self.assert_contains_line('hello!')
 
@@ -224,4 +240,3 @@ class TestEscapeControls(unittest.TestCa
     def test_escapes_controls(self):
         escaped = escape_controls('\na\rb\tc\fd\be')
         self.assertEqual(escaped, '\\na\\rb\\tc\\fd\\be')
-
diff -pruN 2.23.6-1/tests/unit/botocore/docs/test_waiter.py 2.31.35-1/tests/unit/botocore/docs/test_waiter.py
--- 2.23.6-1/tests/unit/botocore/docs/test_waiter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/docs/test_waiter.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,51 +10,60 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests.unit.botocore.docs import BaseDocsTest
 from botocore.docs.waiter import WaiterDocumenter
 from botocore.waiter import WaiterModel
 
+from tests.unit.botocore.docs import BaseDocsTest
+
 
 class TestWaiterDocumenter(BaseDocsTest):
     def setUp(self):
-        super(TestWaiterDocumenter, self).setUp()
+        super().setUp()
         self.add_shape_to_params('Biz', 'String')
         self.setup_client()
         waiter_model = WaiterModel(self.waiter_json_model)
         self.waiter_documenter = WaiterDocumenter(
-            client=self.client, service_waiter_model=waiter_model)
+            client=self.client, service_waiter_model=waiter_model
+        )
 
     def test_document_waiters(self):
-        self.waiter_documenter.document_waiters(
-            self.doc_structure)
-        self.assert_contains_lines_in_order([
-            '=======',
-            'Waiters',
-            '=======',
-            'The available waiters are:',
-            '* :py:class:`MyService.Waiter.SampleOperationComplete`',
-            '.. py:class:: MyService.Waiter.SampleOperationComplete',
-            '  ::',
-            '    waiter = client.get_waiter(\'sample_operation_complete\')',
-            '  .. py:method:: wait(**kwargs)',
-            ('    Polls :py:meth:`MyService.Client.sample_operation` '
-             'every 15 seconds until a successful state is reached. An error '
-             'is returned after 40 failed checks.'),
-            '    **Request Syntax**',
-            '    ::',
-            '      waiter.wait(',
-            '          Biz=\'string\'',
-            '      )',
-            '    :type Biz: string',
-            '    :param Biz:',
-            '    :type WaiterConfig: dict',
-            '    :param WaiterConfig:',
-            ('A dictionary that provides parameters to control waiting '
-             'behavior.'),
-            '     - **Delay** *(integer) --*',
-            ('        The amount of time in seconds to wait between attempts. '
-             'Default: 15'),
-            '      - **MaxAttempts** *(integer) --*',
-            '        The maximum number of attempts to be made. Default: 40',
-            '    :returns: None'
-        ])
+        self.waiter_documenter.document_waiters(self.doc_structure)
+        self.assert_contains_lines_in_order(
+            [
+                '=======',
+                'Waiters',
+                '=======',
+                'The available waiters are:',
+                '* :py:class:`MyService.Waiter.SampleOperationComplete`',
+                '.. py:class:: MyService.Waiter.SampleOperationComplete',
+                '  ::',
+                '    waiter = client.get_waiter(\'sample_operation_complete\')',
+                '  .. py:method:: wait(**kwargs)',
+                (
+                    '    Polls :py:meth:`MyService.Client.sample_operation` '
+                    'every 15 seconds until a successful state is reached. An error '
+                    'is returned after 40 failed checks.'
+                ),
+                '    **Request Syntax**',
+                '    ::',
+                '      waiter.wait(',
+                '          Biz=\'string\'',
+                '      )',
+                '    :type Biz: string',
+                '    :param Biz:',
+                '    :type WaiterConfig: dict',
+                '    :param WaiterConfig:',
+                (
+                    'A dictionary that provides parameters to control waiting '
+                    'behavior.'
+                ),
+                '     - **Delay** *(integer) --*',
+                (
+                    '        The amount of time in seconds to wait between attempts. '
+                    'Default: 15'
+                ),
+                '      - **MaxAttempts** *(integer) --*',
+                '        The maximum number of attempts to be made. Default: 40',
+                '    :returns: None',
+            ]
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/ec2.json 2.31.35-1/tests/unit/botocore/protocols/input/ec2.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/ec2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/ec2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,531 +1,1218 @@
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "EmptyInputAndEmptyOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty input serializes no extra query params",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EmptyInputAndEmptyOutput&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
     },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          },
-          "Bar": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "Ec2QueryEndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EndpointOperation&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "host": "foo.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
     },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Foo": "val1",
-          "Bar": "val2"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Structure with locationName and queryName applied to members",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "HostLabelInput": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryEndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "HostLabelInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EndpointWithHostLabelOperation&Version=2020-01-08&Label=bar",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
     },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          },
-          "Bar": {
-            "shape": "StringType",
-            "locationName": "barLocationName"
-          },
-          "Yuck": {
-            "shape": "StringType",
-            "locationName": "yuckLocationName",
-            "queryName": "yuckQueryName"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
+    {
+        "description": "Test cases for HostWithPathOperation operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "Ec2QueryHostWithPath",
+                "given": {
+                    "name": "HostWithPathOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Custom endpoints supplied by users can have paths",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/custom/",
+                    "body": "Action=HostWithPathOperation&Version=2020-01-08",
+                    "host": "example.com/custom"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com/custom"
     },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Foo": "val1",
-          "Bar": "val2",
-          "Yuck": "val3"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&BarLocationName=val2&yuckQueryName=val3"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Nested structure members",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
+    {
+        "description": "Test cases for NestedStructures operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "NestedStructuresInput": {
+                "type": "structure",
+                "members": {
+                    "Nested": {
+                        "shape": "StructArg"
+                    }
+                }
+            },
+            "StructArg": {
+                "type": "structure",
+                "members": {
+                    "StringArg": {
+                        "shape": "String"
+                    },
+                    "OtherArg": {
+                        "shape": "Boolean"
+                    },
+                    "RecursiveArg": {
+                        "shape": "StructArg"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2NestedStructures",
+                "given": {
+                    "name": "NestedStructures",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "NestedStructuresInput"
+                    },
+                    "documentation": "<p>This test serializes nested and recursive structure members.</p>"
+                },
+                "description": "Serializes nested structures using dots",
+                "params": {
+                    "Nested": {
+                        "StringArg": "foo",
+                        "OtherArg": true,
+                        "RecursiveArg": {
+                            "StringArg": "baz"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=NestedStructures&Version=2020-01-08&Nested.StringArg=foo&Nested.OtherArg=true&Nested.RecursiveArg.StringArg=baz",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
     },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "StructArg": {
-            "shape": "StructType",
-            "locationName": "Struct"
-          }
-        }
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-          "ScalarArg": {
-            "shape": "StringType",
-            "locationName": "Scalar"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "Ec2QueryNoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request payload or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=NoInputAndOutput&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
     },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "StructArg": {
-            "ScalarArg": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Struct.Scalar=foo"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List types",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_ec2Query",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_ec2Query",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the ec2Query protocol.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            }
+        ]
     },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListArg": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "Strings"
-        }
-      },
-      "Strings": {
-        "type": "string"
-      }
+    {
+        "description": "Test cases for QueryIdempotencyTokenAutoFill operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryIdempotencyTokenAutoFillInput": {
+                "type": "structure",
+                "members": {
+                    "token": {
+                        "shape": "String",
+                        "idempotencyToken": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2ProtocolIdempotencyTokenAutoFill",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Automatically adds idempotency token when not set",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&Token=00000000-0000-4000-8000-000000000000",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2ProtocolIdempotencyTokenAutoFillIsSet",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Uses the given idempotency token as-is",
+                "params": {
+                    "token": "00000000-0000-4000-8000-000000000123"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&Token=00000000-0000-4000-8000-000000000123",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
     },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": [
-            "foo",
-            "bar",
-            "baz"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListArg.1=foo&ListArg.2=bar&ListArg.3=baz"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List with location name applied to member",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
+    {
+        "description": "Test cases for QueryLists operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryListsInput": {
+                "type": "structure",
+                "members": {
+                    "ListArg": {
+                        "shape": "StringList"
+                    },
+                    "ComplexListArg": {
+                        "shape": "GreetingList"
+                    },
+                    "ListArgWithXmlNameMember": {
+                        "shape": "ListWithXmlName"
+                    },
+                    "ListArgWithXmlName": {
+                        "shape": "ListWithXmlName",
+                        "locationName": "Hi"
+                    },
+                    "NestedWithList": {
+                        "shape": "NestedStructWithList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "GreetingList": {
+                "type": "list",
+                "member": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "ListWithXmlName": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "NestedStructWithList": {
+                "type": "structure",
+                "members": {
+                    "ListArg": {
+                        "shape": "StringList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2Lists",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Serializes query lists. All EC2 lists are flattened.",
+                "params": {
+                    "ListArg": [
+                        "foo",
+                        "bar",
+                        "baz"
+                    ],
+                    "ComplexListArg": [
+                        {
+                            "hi": "hello"
+                        },
+                        {
+                            "hi": "hola"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&ListArg.1=foo&ListArg.2=bar&ListArg.3=baz&ComplexListArg.1.Hi=hello&ComplexListArg.2.Hi=hola",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "Ec2EmptyQueryLists",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Does not serialize empty query lists.",
+                "params": {
+                    "ListArg": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "Ec2ListArgWithXmlNameMember",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "An xmlName trait in the member of a list has no effect on the list serialization.",
+                "params": {
+                    "ListArgWithXmlNameMember": [
+                        "A",
+                        "B"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&ListArgWithXmlNameMember.1=A&ListArgWithXmlNameMember.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "Ec2ListMemberWithXmlName",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Changes the name of the list using the xmlName trait",
+                "params": {
+                    "ListArgWithXmlName": [
+                        "A",
+                        "B"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&Hi.1=A&Hi.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "Ec2ListNestedStructWithList",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Nested structure with a list member",
+                "params": {
+                    "NestedWithList": {
+                        "ListArg": [
+                            "A",
+                            "B"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&NestedWithList.ListArg.1=A&NestedWithList.ListArg.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
     },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListArg": {
-            "shape": "ListType",
-            "locationName": "ListMemberName"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "LocationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
+    {
+        "description": "Test cases for QueryTimestamps operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryTimestampsInput": {
+                "type": "structure",
+                "members": {
+                    "normalFormat": {
+                        "shape": "Timestamp"
+                    },
+                    "epochMember": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochTarget": {
+                        "shape": "EpochSeconds"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2TimestampsInput",
+                "given": {
+                    "name": "QueryTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryTimestampsInput"
+                    },
+                    "documentation": "<p>This test serializes timestamps.</p> <ol> <li>Timestamps are serialized as RFC 3339 date-time values by default.</li> <li>A timestampFormat trait on a member changes the format.</li> <li>A timestampFormat trait on the shape targeted by the member changes the format.</li> </ol>"
+                },
+                "description": "Serializes timestamps",
+                "params": {
+                    "normalFormat": 1422172800,
+                    "epochMember": 1422172800,
+                    "epochTarget": 1422172800
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryTimestamps&Version=2020-01-08&NormalFormat=2015-01-25T08%3A00%3A00Z&EpochMember=1422172800&EpochTarget=1422172800",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
     },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": [
-            "a",
-            "b",
-            "c"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListMemberName.1=a&ListMemberName.2=b&ListMemberName.3=c"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List with locationName and queryName",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListArg": {
-            "shape": "ListType",
-            "locationName": "ListMemberName",
-            "queryName": "ListQueryName"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "LocationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": [
-            "a",
-            "b",
-            "c"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListQueryName.1=a&ListQueryName.2=b&ListQueryName.3=c"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Base64 encoded Blobs",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "BlobArg": {
-            "shape": "BlobType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BlobArg": "foo"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&BlobArg=Zm9v"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp values",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800,
-          "TimeCustom": 1422172800,
-          "TimeFormat": 1422172800
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&TimeArg=2015-01-25T08%3A00%3A00Z&TimeCustom=1422172800&TimeFormat=1422172800"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Idempotency token auto fill",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Token": {
-            "shape": "StringType",
-            "idempotencyToken": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Token": "abc123"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Token=abc123"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Token=00000000-0000-4000-8000-000000000000"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Endpoint host trait",
-    "metadata": {
-      "protocol": "ec2",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://service.region.amazonaws.com",
-    "shapes": {
-      "StaticInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "MemberRefInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType",
-            "hostLabel": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "StaticOp",
-          "input": {
-            "shape": "StaticInputShape"
-          },
-          "endpoint":{
-              "hostPrefix": "data-"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=StaticOp&Version=2014-01-01&Name=myname",
-          "host": "data-service.region.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "MemberRefOp",
-          "input": {
-            "shape": "MemberRefInputShape"
-          },
-          "endpoint":{
-              "hostPrefix": "foo-{Name}."
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=MemberRefOp&Version=2014-01-01&Name=myname",
-          "host": "foo-myname.service.region.amazonaws.com"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for SimpleInputParams operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "SimpleInputParamsInput": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    },
+                    "Bar": {
+                        "shape": "String"
+                    },
+                    "Baz": {
+                        "shape": "Boolean"
+                    },
+                    "Bam": {
+                        "shape": "Integer"
+                    },
+                    "FloatValue": {
+                        "shape": "Float"
+                    },
+                    "Boo": {
+                        "shape": "Double"
+                    },
+                    "Qux": {
+                        "shape": "Blob"
+                    },
+                    "FooEnum": {
+                        "shape": "FooEnum"
+                    },
+                    "HasQueryName": {
+                        "shape": "String"
+                    },
+                    "HasQueryAndXmlName": {
+                        "shape": "String",
+                        "locationName": "hasQueryAndXmlName"
+                    },
+                    "UsesXmlName": {
+                        "shape": "String",
+                        "locationName": "usesXmlName"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2SimpleInputParamsStrings",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes strings",
+                "params": {
+                    "Foo": "val1",
+                    "Bar": "val2"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Bar=val2",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2SimpleInputParamsStringAndBooleanTrue",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes booleans that are true",
+                "params": {
+                    "Foo": "val1",
+                    "Baz": true
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Baz=true",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2SimpleInputParamsStringsAndBooleanFalse",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes booleans that are false",
+                "params": {
+                    "Baz": false
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Baz=false",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2SimpleInputParamsInteger",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes integers",
+                "params": {
+                    "Bam": 10
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Bam=10",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2SimpleInputParamsFloat",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes floats",
+                "params": {
+                    "Boo": 10.8
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Boo=10.8",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2SimpleInputParamsBlob",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Blobs are base64 encoded in the query string",
+                "params": {
+                    "Qux": "value"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Qux=dmFsdWU%3D",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2Enums",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes enums in the query string",
+                "params": {
+                    "FooEnum": "Foo"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FooEnum=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2Query",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes query using ec2QueryName trait.",
+                "params": {
+                    "HasQueryName": "Hi"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&HasQueryName=Hi",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2QueryIsPreferred",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "ec2QueryName trait is preferred over xmlName.",
+                "params": {
+                    "HasQueryAndXmlName": "Hi"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&HasQueryAndXmlName=Hi",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2XmlNameIsUppercased",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "xmlName is used with the ec2 protocol, but the first character is uppercased",
+                "params": {
+                    "UsesXmlName": "Hi"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&UsesXmlName=Hi",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "FloatValue": "NaN",
+                    "Boo": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=NaN&Boo=NaN",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "FloatValue": "Infinity",
+                    "Boo": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=Infinity&Boo=Infinity",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "FloatValue": "-Infinity",
+                    "Boo": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=-Infinity&Boo=-Infinity",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/json.json 2.31.35-1/tests/unit/botocore/protocols/input/json.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/json.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/json.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,906 +1,2366 @@
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "body": "{\"Name\": \"myname\"}",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp values",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "rfc822",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800,
-          "TimeCustom": 1422172800,
-          "TimeFormat": 1422172800
-        },
-        "serialized": {
-          "body": "{\"TimeArg\": 1422172800, \"TimeCustom\": \"Sun, 25 Jan 2015 08:00:00 GMT\", \"TimeFormat\": \"Sun, 25 Jan 2015 08:00:00 GMT\"}",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Base64 encoded Blobs",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "BlobArg": {
-            "shape": "BlobType"
-          },
-          "BlobMap": {
-            "shape": "BlobMapType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      },
-      "BlobMapType": {
-        "type": "map",
-        "key": {"shape": "StringType"},
-        "value": {"shape": "BlobType"}
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BlobArg": "foo"
-        },
-        "serialized": {
-          "body": "{\"BlobArg\": \"Zm9v\"}",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BlobMap": {
-            "key1": "foo",
-            "key2": "bar"
-          }
-        },
-        "serialized": {
-          "body": "{\"BlobMap\": {\"key1\": \"Zm9v\", \"key2\": \"YmFy\"}}",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Nested blobs",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListOfStructures"
-          }
-        }
-      },
-      "ListOfStructures": {
-        "type": "list",
-        "member": {
-          "shape": "BlobType"
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": ["foo", "bar"]
-        },
-        "serialized": {
-          "body": "{\"ListParam\": [\"Zm9v\", \"YmFy\"]}",
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          }
-        }
-      }
-    ]
-  },
-  {
-    "description": "Recursive shapes",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          }
-        }
-      },
-      "RecursiveStructType": {
-        "type": "structure",
-        "members": {
-          "NoRecurse": {
-            "shape": "StringType"
-          },
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          },
-          "RecursiveList": {
-            "shape": "RecursiveListType"
-          },
-          "RecursiveMap": {
-            "shape": "RecursiveMapType"
-          }
-        }
-      },
-      "RecursiveListType": {
-        "type": "list",
-        "member": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "RecursiveMapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "NoRecurse": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "NoRecurse": "foo"
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "RecursiveStruct": {
-                "RecursiveStruct": {
-                  "NoRecurse": "foo"
-                }
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "NoRecurse": "bar"
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"NoRecurse\": \"bar\"}]}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "RecursiveStruct": {
-                  "NoRecurse": "bar"
-                }
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"RecursiveStruct\": {\"NoRecurse\": \"bar\"}}]}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveMap": {
-              "foo": {
-                "NoRecurse": "foo"
-              },
-              "bar": {
-                "NoRecurse": "bar"
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "body": "{\"RecursiveStruct\": {\"RecursiveMap\": {\"foo\": {\"NoRecurse\": \"foo\"}, \"bar\": {\"NoRecurse\": \"bar\"}}}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Empty maps",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "Map": {}
-        },
-        "serialized": {
-          "body": "{\"Map\": {}}",
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Idempotency token auto fill",
-    "metadata": {
-      "protocol": "json",
-      "apiVersion": "2014-01-01",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Token": {
-            "shape": "StringType",
-            "idempotencyToken": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Token": "abc123"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {},
-          "body": "{\"Token\": \"abc123\"}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {},
-          "body": "{\"Token\": \"00000000-0000-4000-8000-000000000000\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Endpoint host trait static prefix",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "clientEndpoint": "https://service.region.amazonaws.com",
-    "shapes": {
-      "StaticInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "MemberRefInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType",
-            "hostLabel": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "StaticOp",
-          "input": {
-            "shape": "StaticInputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "endpoint":{
-              "hostPrefix": "data-"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.StaticOp",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"Name\": \"myname\"}",
-          "host": "data-service.region.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "MemberRefOp",
-          "input": {
-            "shape": "MemberRefInputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "endpoint":{
-              "hostPrefix": "foo-{Name}."
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.MemberRefOp",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"Name\": \"myname\"}",
-          "host": "foo-myname.service.region.amazonaws.com"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes document with standalone primitive type in a JSON request.",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-            "inlineDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": "foo"
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": \"foo\"}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": 123
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": 123}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": 1.2
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": 1.2}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": true
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": true}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": ""
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": \"\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes inline document in a JSON request.",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-            "inlineDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "inlineDocument": {"foo": "bar"}
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"inlineDocument\": {\"foo\": \"bar\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes aggregate documents in a JSON request.",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.1",
-      "targetPrefix": "com.amazonaws.foo"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-            "parentDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "parentDocument": {
-              "str": "test",
-              "num": 123,
-              "float": 1.2,
-              "bool": true,
-              "null": "",
-              "document": {"foo": false},
-              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
-          }
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"parentDocument\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName",
-          "http": {
-            "method": "POST"
-          }
-        },
-        "params": {
-          "parentDocument": [
-              "test",
-              123,
-              1.2,
-              true,
-              "",
-              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
-              ["foo", false]
-          ]
-        },
-        "serialized": {
-          "headers": {
-            "X-Amz-Target": "com.amazonaws.foo.OperationName",
-            "Content-Type": "application/x-amz-json-1.1"
-          },
-          "uri": "/",
-          "body": "{\"parentDocument\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for EmptyOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "sends_requests_to_slash",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Sends requests to /",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.EmptyOperation"
+                    }
+                }
+            },
+            {
+                "id": "includes_x_amz_target_and_content_type",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Includes X-Amz-Target header and Content-Type",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.EmptyOperation"
+                    }
+                }
+            },
+            {
+                "id": "json_1_1_client_sends_empty_payload_for_no_input_shape",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Clients must always send an empty JSON object payload for\noperations with no input (that is, `{}`). While AWS service\nimplementations support requests with no payload or requests\nthat send `{}`, always sending `{}` from the client is\npreferred for forward compatibility in case input is ever\nadded to an operation.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.EmptyOperation"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson11EndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.EndpointOperation"
+                    },
+                    "host": "foo.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "HostLabelInput": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11EndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "HostLabelInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"label\": \"bar\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.EndpointWithHostLabelOperation"
+                    },
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for HostWithPathOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson11HostWithPath",
+                "given": {
+                    "name": "HostWithPathOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Custom endpoints supplied by users can have paths",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/custom/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.HostWithPathOperation"
+                    },
+                    "host": "example.com/custom"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com/custom"
+    },
+    {
+        "description": "Test cases for JsonEnums operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "JsonEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11Enums",
+                "given": {
+                    "name": "JsonEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"fooEnum1\": \"Foo\",\n    \"fooEnum2\": \"0\",\n    \"fooEnum3\": \"1\",\n    \"fooEnumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumSet\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumMap\": {\n        \"hi\": \"Foo\",\n        \"zero\": \"0\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonEnums"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonIntEnums operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "JsonIntEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11IntEnums",
+                "given": {
+                    "name": "JsonIntEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonIntEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes intEnums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"intEnum1\": 1,\n    \"intEnum2\": 2,\n    \"intEnum3\": 3,\n    \"intEnumList\": [\n        1,\n        2\n    ],\n    \"intEnumSet\": [\n        1,\n        2\n    ],\n    \"intEnumMap\": {\n        \"a\": 1,\n        \"b\": 2\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonIntEnums"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "UnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                },
+                "documentation": "<p>A shared structure that contains a single union member.</p>"
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11SerializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a string union value",
+                "params": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a boolean union value",
+                "params": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a number union value",
+                "params": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a blob union value",
+                "params": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a timestamp union value",
+                "params": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an enum union value",
+                "params": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a list union value",
+                "params": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a map union value",
+                "params": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SerializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure union value",
+                "params": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonUnions"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for KitchenSinkOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "KitchenSink": {
+                "type": "structure",
+                "members": {
+                    "Blob": {
+                        "shape": "Blob"
+                    },
+                    "Boolean": {
+                        "shape": "Boolean"
+                    },
+                    "Double": {
+                        "shape": "Double"
+                    },
+                    "EmptyStruct": {
+                        "shape": "EmptyStruct"
+                    },
+                    "Float": {
+                        "shape": "Float"
+                    },
+                    "HttpdateTimestamp": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "Integer": {
+                        "shape": "Integer"
+                    },
+                    "Iso8601Timestamp": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "JsonValue": {
+                        "shape": "JsonValue",
+                        "jsonvalue": true
+                    },
+                    "ListOfLists": {
+                        "shape": "ListOfListOfStrings"
+                    },
+                    "ListOfMapsOfStrings": {
+                        "shape": "ListOfMapsOfStrings"
+                    },
+                    "ListOfStrings": {
+                        "shape": "ListOfStrings"
+                    },
+                    "ListOfStructs": {
+                        "shape": "ListOfStructs"
+                    },
+                    "Long": {
+                        "shape": "Long"
+                    },
+                    "MapOfListsOfStrings": {
+                        "shape": "MapOfListsOfStrings"
+                    },
+                    "MapOfMaps": {
+                        "shape": "MapOfMapOfStrings"
+                    },
+                    "MapOfStrings": {
+                        "shape": "MapOfStrings"
+                    },
+                    "MapOfStructs": {
+                        "shape": "MapOfStructs"
+                    },
+                    "RecursiveList": {
+                        "shape": "ListOfKitchenSinks"
+                    },
+                    "RecursiveMap": {
+                        "shape": "MapOfKitchenSinks"
+                    },
+                    "RecursiveStruct": {
+                        "shape": "KitchenSink"
+                    },
+                    "SimpleStruct": {
+                        "shape": "SimpleStruct"
+                    },
+                    "String": {
+                        "shape": "String"
+                    },
+                    "StructWithJsonName": {
+                        "shape": "StructWithJsonName"
+                    },
+                    "Timestamp": {
+                        "shape": "Timestamp"
+                    },
+                    "UnixTimestamp": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "EmptyStruct": {
+                "type": "structure",
+                "members": {}
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "JsonValue": {
+                "type": "string"
+            },
+            "ListOfListOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "ListOfStrings"
+                }
+            },
+            "ListOfMapsOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "MapOfStrings"
+                }
+            },
+            "ListOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "ListOfStructs": {
+                "type": "list",
+                "member": {
+                    "shape": "SimpleStruct"
+                }
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "MapOfListsOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "ListOfStrings"
+                }
+            },
+            "MapOfMapOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "MapOfStrings"
+                }
+            },
+            "MapOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "MapOfStructs": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "SimpleStruct"
+                }
+            },
+            "ListOfKitchenSinks": {
+                "type": "list",
+                "member": {
+                    "shape": "KitchenSink"
+                }
+            },
+            "MapOfKitchenSinks": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "KitchenSink"
+                }
+            },
+            "SimpleStruct": {
+                "type": "structure",
+                "members": {
+                    "Value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StructWithJsonName": {
+                "type": "structure",
+                "members": {
+                    "Value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "serializes_string_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes string shapes",
+                "params": {
+                    "String": "abc xyz"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"String\":\"abc xyz\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_string_shapes_with_jsonvalue_trait",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes string shapes with jsonvalue trait",
+                "params": {
+                    "JsonValue": "{\"string\":\"value\",\"number\":1234.5,\"boolTrue\":true,\"boolFalse\":false,\"array\":[1,2,3,4],\"object\":{\"key\":\"value\"},\"null\":null}"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"JsonValue\":\"{\\\"string\\\":\\\"value\\\",\\\"number\\\":1234.5,\\\"boolTrue\\\":true,\\\"boolFalse\\\":false,\\\"array\\\":[1,2,3,4],\\\"object\\\":{\\\"key\\\":\\\"value\\\"},\\\"null\\\":null}\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_integer_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes integer shapes",
+                "params": {
+                    "Integer": 1234
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Integer\":1234}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_long_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes long shapes",
+                "params": {
+                    "Long": 999999999999
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Long\":999999999999}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_float_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes float shapes",
+                "params": {
+                    "Float": 1234.5
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Float\":1234.5}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_double_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes double shapes",
+                "params": {
+                    "Double": 1234.5
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Double\":1234.5}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_blob_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes blob shapes",
+                "params": {
+                    "Blob": "binary-value"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Blob\":\"YmluYXJ5LXZhbHVl\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_boolean_shapes_true",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes boolean shapes (true)",
+                "params": {
+                    "Boolean": true
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Boolean\":true}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_boolean_shapes_false",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes boolean shapes (false)",
+                "params": {
+                    "Boolean": false
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Boolean\":false}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_timestamp_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes timestamp shapes",
+                "params": {
+                    "Timestamp": 946845296
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Timestamp\":946845296}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_timestamp_shapes_with_iso8601_timestampformat",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes timestamp shapes with iso8601 timestampFormat",
+                "params": {
+                    "Iso8601Timestamp": 946845296
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Iso8601Timestamp\":\"2000-01-02T20:34:56Z\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_timestamp_shapes_with_httpdate_timestampformat",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes timestamp shapes with httpdate timestampFormat",
+                "params": {
+                    "HttpdateTimestamp": 946845296
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"HttpdateTimestamp\":\"Sun, 02 Jan 2000 20:34:56 GMT\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_timestamp_shapes_with_unixtimestamp_timestampformat",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes timestamp shapes with unixTimestamp timestampFormat",
+                "params": {
+                    "UnixTimestamp": 946845296
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"UnixTimestamp\":946845296}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes list shapes",
+                "params": {
+                    "ListOfStrings": [
+                        "abc",
+                        "mno",
+                        "xyz"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"ListOfStrings\":[\"abc\",\"mno\",\"xyz\"]}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_empty_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes empty list shapes",
+                "params": {
+                    "ListOfStrings": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"ListOfStrings\":[]}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_list_of_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes list of map shapes",
+                "params": {
+                    "ListOfMapsOfStrings": [
+                        {
+                            "foo": "bar"
+                        },
+                        {
+                            "abc": "xyz"
+                        },
+                        {
+                            "red": "blue"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"ListOfMapsOfStrings\":[{\"foo\":\"bar\"},{\"abc\":\"xyz\"},{\"red\":\"blue\"}]}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_list_of_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes list of structure shapes",
+                "params": {
+                    "ListOfStructs": [
+                        {
+                            "Value": "abc"
+                        },
+                        {
+                            "Value": "mno"
+                        },
+                        {
+                            "Value": "xyz"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"ListOfStructs\":[{\"Value\":\"abc\"},{\"Value\":\"mno\"},{\"Value\":\"xyz\"}]}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_list_of_recursive_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes list of recursive structure shapes",
+                "params": {
+                    "RecursiveList": [
+                        {
+                            "RecursiveList": [
+                                {
+                                    "RecursiveList": [
+                                        {
+                                            "Integer": 123
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"RecursiveList\":[{\"RecursiveList\":[{\"RecursiveList\":[{\"Integer\":123}]}]}]}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes map shapes",
+                "params": {
+                    "MapOfStrings": {
+                        "abc": "xyz",
+                        "mno": "hjk"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"MapOfStrings\":{\"abc\":\"xyz\",\"mno\":\"hjk\"}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_empty_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes empty map shapes",
+                "params": {
+                    "MapOfStrings": {}
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"MapOfStrings\":{}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_map_of_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes map of list shapes",
+                "params": {
+                    "MapOfListsOfStrings": {
+                        "abc": [
+                            "abc",
+                            "xyz"
+                        ],
+                        "mno": [
+                            "xyz",
+                            "abc"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"MapOfListsOfStrings\":{\"abc\":[\"abc\",\"xyz\"],\"mno\":[\"xyz\",\"abc\"]}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_map_of_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes map of structure shapes",
+                "params": {
+                    "MapOfStructs": {
+                        "key1": {
+                            "Value": "value-1"
+                        },
+                        "key2": {
+                            "Value": "value-2"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"MapOfStructs\":{\"key1\":{\"Value\":\"value-1\"},\"key2\":{\"Value\":\"value-2\"}}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_map_of_recursive_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes map of recursive structure shapes",
+                "params": {
+                    "RecursiveMap": {
+                        "key1": {
+                            "RecursiveMap": {
+                                "key2": {
+                                    "RecursiveMap": {
+                                        "key3": {
+                                            "Boolean": false
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"RecursiveMap\":{\"key1\":{\"RecursiveMap\":{\"key2\":{\"RecursiveMap\":{\"key3\":{\"Boolean\":false}}}}}}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes structure shapes",
+                "params": {
+                    "SimpleStruct": {
+                        "Value": "abc"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"SimpleStruct\":{\"Value\":\"abc\"}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_structure_members_with_locationname_traits",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes structure members with locationName traits",
+                "params": {
+                    "StructWithJsonName": {
+                        "Value": "some-value"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"StructWithJsonName\":{\"Value\":\"some-value\"}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_empty_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes empty structure shapes",
+                "params": {
+                    "SimpleStruct": {}
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"SimpleStruct\":{}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_structure_which_have_no_members",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes structure which have no members",
+                "params": {
+                    "EmptyStruct": {}
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"EmptyStruct\":{}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "serializes_recursive_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Serializes recursive structure shapes",
+                "params": {
+                    "String": "top-value",
+                    "Boolean": false,
+                    "RecursiveStruct": {
+                        "String": "nested-value",
+                        "Boolean": true,
+                        "RecursiveList": [
+                            {
+                                "String": "string-only"
+                            },
+                            {
+                                "RecursiveStruct": {
+                                    "MapOfStrings": {
+                                        "color": "red",
+                                        "size": "large"
+                                    }
+                                }
+                            }
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"String\":\"top-value\",\"Boolean\":false,\"RecursiveStruct\":{\"String\":\"nested-value\",\"Boolean\":true,\"RecursiveList\":[{\"String\":\"string-only\"},{\"RecursiveStruct\":{\"MapOfStrings\":{\"color\":\"red\",\"size\":\"large\"}}}]}}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.KitchenSinkOperation"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NullOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "NullOperationInputOutput": {
+                "type": "structure",
+                "members": {
+                    "string": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11StructuresDontSerializeNullValues",
+                "given": {
+                    "name": "NullOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "NullOperationInputOutput"
+                    }
+                },
+                "description": "Null structure values are dropped",
+                "params": {
+                    "string": null
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.NullOperation"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OperationWithOptionalInputOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "OperationWithOptionalInputOutputInput": {
+                "type": "structure",
+                "members": {
+                    "Value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "can_call_operation_with_no_input_or_output",
+                "given": {
+                    "name": "OperationWithOptionalInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "OperationWithOptionalInputOutputInput"
+                    }
+                },
+                "description": "Can call operations with no input or output",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.OperationWithOptionalInputOutput"
+                    }
+                }
+            },
+            {
+                "id": "can_call_operation_with_optional_input",
+                "given": {
+                    "name": "OperationWithOptionalInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "OperationWithOptionalInputOutputInput"
+                    }
+                },
+                "description": "Can invoke operations with optional input",
+                "params": {
+                    "Value": "Hi"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"Value\":\"Hi\"}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.OperationWithOptionalInputOutput"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutAndGetInlineDocuments operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "PutAndGetInlineDocumentsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "inlineDocument": {
+                        "shape": "Document"
+                    }
+                }
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "PutAndGetInlineDocumentsInput",
+                "given": {
+                    "name": "PutAndGetInlineDocuments",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutAndGetInlineDocumentsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes an inline document as part of the payload.</p>"
+                },
+                "description": "Serializes inline documents in a JSON request.",
+                "params": {
+                    "inlineDocument": {
+                        "foo": "bar"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"inlineDocument\": {\"foo\": \"bar\"}\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.PutAndGetInlineDocuments"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_awsJson1_1",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsJson1_1",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsJson1_1 protocol.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11SupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"doubleValue\": \"NaN\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.SimpleScalarProperties"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"doubleValue\": \"Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.SimpleScalarProperties"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11SupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"doubleValue\": \"-Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.SimpleScalarProperties"
+                    }
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/json_1_0-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/input/json_1_0-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/json_1_0-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/json_1_0-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,50 @@
+[
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2020-07-14",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblejsonrpc10",
+            "jsonVersion": "1.0",
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "serviceFullName": "QueryCompatibleJsonRpc10",
+            "serviceId": "Query Compatible JSON RPC 10",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleJsonRpc10",
+            "targetPrefix": "QueryCompatibleJsonRpc10",
+            "uid": "query-compatible-json-rpc-10-2020-07-14"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "QueryCompatibleAwsJson10CborSendsQueryModeHeader",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true
+                },
+                "description": "Clients for query-compatible services MUST send the x-amzn-query-mode header.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "QueryCompatibleJsonRpc10.QueryCompatibleOperation",
+                        "x-amzn-query-mode": "true"
+                    }
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/json_1_0.json 2.31.35-1/tests/unit/botocore/protocols/input/json_1_0.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/json_1_0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/json_1_0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,878 @@
+[
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10EmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "EmptyInputAndEmptyOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Clients must always send an empty object if input is modeled.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.EmptyInputAndEmptyOutput"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson10EndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "host": "foo.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "EndpointWithHostLabelOperationInput": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10EndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "EndpointWithHostLabelOperationInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\"label\": \"bar\"}",
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for HostWithPathOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson10HostWithPath",
+                "given": {
+                    "name": "HostWithPathOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Custom endpoints supplied by users can have paths",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/custom/",
+                    "body": "{}",
+                    "host": "example.com/custom"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com/custom"
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "JsonUnionsInput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                }
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "intEnumValue": {
+                        "shape": "IntegerEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10SerializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a string union value",
+                "params": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a boolean union value",
+                "params": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a number union value",
+                "params": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a blob union value",
+                "params": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a timestamp union value",
+                "params": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an enum union value",
+                "params": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeIntEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an intEnum union value",
+                "params": {
+                    "contents": {
+                        "intEnumValue": 1
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"intEnumValue\": 1\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a list union value",
+                "params": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a map union value",
+                "params": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SerializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "JsonUnionsInput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure union value",
+                "params": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.JsonUnions"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson10MustAlwaysSendEmptyJsonPayload",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Clients must always send an empty JSON object payload for\noperations with no input (that is, `{}`). While AWS service\nimplementations support requests with no payload or requests\nthat send `{}`, always sending `{}` from the client is\npreferred for forward compatibility in case input is ever\nadded to an operation.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.NoInputAndNoOutput"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson10NoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "A client should always send and empty JSON object payload.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.NoInputAndOutput"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_awsJson1_0",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsJson1_0",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsJson1_0 protocol.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesInput": {
+                "type": "structure",
+                "members": {
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10SupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"doubleValue\": \"NaN\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.SimpleScalarProperties"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"doubleValue\": \"Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.SimpleScalarProperties"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10SupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"doubleValue\": \"-Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "X-Amz-Target": "JsonRpc10.SimpleScalarProperties"
+                    }
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/query.json 2.31.35-1/tests/unit/botocore/protocols/input/query.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/query.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/query.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,1002 +1,1611 @@
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          },
-          "Bar": {
-            "shape": "StringType"
-          },
-          "Baz": {
-            "shape": "BooleanType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Foo": "val1",
-          "Bar": "val2"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Baz": true
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Baz=true"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Baz": false
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Baz=false"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Nested structure members",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "StructArg": {
-            "shape": "StructType"
-          }
-        }
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-          "ScalarArg": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "StructArg": {
-            "ScalarArg": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&StructArg.ScalarArg=foo"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List types",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListArg": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "Strings"
-        }
-      },
-      "Strings": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": [
-            "foo",
-            "bar",
-            "baz"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListArg.member.1=foo&ListArg.member.2=bar&ListArg.member.3=baz"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": []
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListArg="
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened list",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ScalarArg": {
-            "shape": "StringType"
-          },
-          "ListArg": {
-            "shape": "ListType"
-          },
-          "NamedListArg": {
-            "shape": "NamedListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        },
-        "flattened": true
-      },
-      "NamedListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "Foo"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ScalarArg": "foo",
-          "ListArg": [
-            "a",
-            "b",
-            "c"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ScalarArg=foo&ListArg.1=a&ListArg.2=b&ListArg.3=c"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "NamedListArg": [
-            "a"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Foo.1=a"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize flattened map type",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "MapArg": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "MapArg": {
-            "key1": "val1",
-            "key2": "val2"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&MapArg.1.key=key1&MapArg.1.value=val1&MapArg.2.key=key2&MapArg.2.value=val2"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Non flattened list with LocationName",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListArg": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListArg": [
-            "a",
-            "b",
-            "c"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ListArg.item.1=a&ListArg.item.2=b&ListArg.item.3=c"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened list with LocationName",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ScalarArg": {
-            "shape": "StringType"
-          },
-          "ListArg": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "ListArgLocation"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ScalarArg": "foo",
-          "ListArg": [
-            "a",
-            "b",
-            "c"
-          ]
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&ScalarArg=foo&ListArgLocation.1=a&ListArgLocation.2=b&ListArgLocation.3=c"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize map type",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "MapArg": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "MapArg": {
-            "key1": "val1",
-            "key2": "val2"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&MapArg.entry.1.key=key1&MapArg.entry.1.value=val1&MapArg.entry.2.key=key2&MapArg.entry.2.value=val2"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize map type with locationName",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "MapArg": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType",
-          "locationName": "TheKey"
-        },
-        "value": {
-          "shape": "StringType",
-          "locationName": "TheValue"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "MapArg": {
-            "key1": "val1",
-            "key2": "val2"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&MapArg.entry.1.TheKey=key1&MapArg.entry.1.TheValue=val1&MapArg.entry.2.TheKey=key2&MapArg.entry.2.TheValue=val2"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Base64 encoded Blobs",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "BlobArg": {
-            "shape": "BlobType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BlobArg": "foo"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&BlobArg=Zm9v"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp values",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800,
-          "TimeCustom": 1422172800,
-          "TimeFormat": 1422172800
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&TimeArg=2015-01-25T08%3A00%3A00Z&TimeCustom=1422172800&TimeFormat=1422172800"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Recursive shapes",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          }
-        }
-      },
-      "RecursiveStructType": {
-        "type": "structure",
-        "members": {
-          "NoRecurse": {
-            "shape": "StringType"
-          },
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          },
-          "RecursiveList": {
-            "shape": "RecursiveListType"
-          },
-          "RecursiveMap": {
-            "shape": "RecursiveMapType"
-          }
-        }
-      },
-      "RecursiveListType": {
-        "type": "list",
-        "member": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "RecursiveMapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "NoRecurse": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.NoRecurse=foo"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "NoRecurse": "foo"
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveStruct.NoRecurse=foo"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "RecursiveStruct": {
-                "RecursiveStruct": {
-                  "NoRecurse": "foo"
-                }
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveStruct.RecursiveStruct.RecursiveStruct.NoRecurse=foo"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "NoRecurse": "bar"
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveList.member.1.NoRecurse=foo&RecursiveStruct.RecursiveList.member.2.NoRecurse=bar"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "RecursiveStruct": {
-                  "NoRecurse": "bar"
-                }
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveList.member.1.NoRecurse=foo&RecursiveStruct.RecursiveList.member.2.RecursiveStruct.NoRecurse=bar"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveMap": {
-              "foo": {
-                "NoRecurse": "foo"
-              },
-              "bar": {
-                "NoRecurse": "bar"
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveMap.entry.1.key=foo&RecursiveStruct.RecursiveMap.entry.1.value.NoRecurse=foo&RecursiveStruct.RecursiveMap.entry.2.key=bar&RecursiveStruct.RecursiveMap.entry.2.value.NoRecurse=bar"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Idempotency token auto fill",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Token": {
-            "shape": "StringType",
-            "idempotencyToken": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Token": "abc123"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Token=abc123"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=OperationName&Version=2014-01-01&Token=00000000-0000-4000-8000-000000000000"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Endpoint host trait",
-    "metadata": {
-      "protocol": "query",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://service.region.amazonaws.com",
-    "shapes": {
-      "StaticInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "MemberRefInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType",
-            "hostLabel": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "StaticOp",
-          "input": {
-            "shape": "StaticInputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "endpoint":{
-              "hostPrefix": "data-"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=StaticOp&Version=2014-01-01&Name=myname",
-          "host": "data-service.region.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "MemberRefOp",
-          "input": {
-            "shape": "MemberRefInputShape"
-          },
-          "http": {
-            "method": "POST"
-          },
-          "endpoint":{
-              "hostPrefix": "foo-{Name}."
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/",
-          "headers": {
-              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
-          },
-          "body": "Action=MemberRefOp&Version=2014-01-01&Name=myname",
-          "host": "foo-myname.service.region.amazonaws.com"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "EmptyInputAndEmptyOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty input serializes no extra query params",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EmptyInputAndEmptyOutput&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsQueryEndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EndpointOperation&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "host": "foo.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "HostLabelInput": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsQueryEndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "HostLabelInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=EndpointWithHostLabelOperation&Version=2020-01-08&label=bar",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for HostWithPathOperation operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "QueryHostWithPath",
+                "given": {
+                    "name": "HostWithPathOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Custom endpoints supplied by users can have paths",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/custom/",
+                    "body": "Action=HostWithPathOperation&Version=2020-01-08",
+                    "host": "example.com/custom"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com/custom"
+    },
+    {
+        "description": "Test cases for NestedStructures operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "NestedStructuresInput": {
+                "type": "structure",
+                "members": {
+                    "Nested": {
+                        "shape": "StructArg"
+                    }
+                }
+            },
+            "StructArg": {
+                "type": "structure",
+                "members": {
+                    "StringArg": {
+                        "shape": "String"
+                    },
+                    "OtherArg": {
+                        "shape": "Boolean"
+                    },
+                    "RecursiveArg": {
+                        "shape": "StructArg"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "NestedStructures",
+                "given": {
+                    "name": "NestedStructures",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "NestedStructuresInput"
+                    },
+                    "documentation": "<p>This test serializes nested and recursive structure members.</p>"
+                },
+                "description": "Serializes nested structures using dots",
+                "params": {
+                    "Nested": {
+                        "StringArg": "foo",
+                        "OtherArg": true,
+                        "RecursiveArg": {
+                            "StringArg": "baz"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=NestedStructures&Version=2020-01-08&Nested.StringArg=foo&Nested.OtherArg=true&Nested.RecursiveArg.StringArg=baz",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "QueryNoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no additional query params",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=NoInputAndNoOutput&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "NoInputAndOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryNoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "NoInputAndOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request payload or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=NoInputAndOutput&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_awsQuery",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendsGzipAndIgnoresHttpProvidedEncoding_awsQuery",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is NOT in the Content-Encoding header since HTTP binding\ntraits are ignored in the awsQuery protocol.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryIdempotencyTokenAutoFill operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryIdempotencyTokenAutoFillInput": {
+                "type": "structure",
+                "members": {
+                    "token": {
+                        "shape": "String",
+                        "idempotencyToken": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryProtocolIdempotencyTokenAutoFill",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Automatically adds idempotency token when not set",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&token=00000000-0000-4000-8000-000000000000",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QueryProtocolIdempotencyTokenAutoFillIsSet",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Uses the given idempotency token as-is",
+                "params": {
+                    "token": "00000000-0000-4000-8000-000000000123"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryIdempotencyTokenAutoFill&Version=2020-01-08&token=00000000-0000-4000-8000-000000000123",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryLists operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryListsInput": {
+                "type": "structure",
+                "members": {
+                    "ListArg": {
+                        "shape": "StringList"
+                    },
+                    "ComplexListArg": {
+                        "shape": "GreetingList"
+                    },
+                    "FlattenedListArg": {
+                        "shape": "StringList",
+                        "flattened": true
+                    },
+                    "ListArgWithXmlNameMember": {
+                        "shape": "ListWithXmlName"
+                    },
+                    "FlattenedListArgWithXmlName": {
+                        "shape": "ListWithXmlName",
+                        "flattened": true,
+                        "locationName": "Hi"
+                    },
+                    "NestedWithList": {
+                        "shape": "NestedStructWithList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "GreetingList": {
+                "type": "list",
+                "member": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "ListWithXmlName": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "NestedStructWithList": {
+                "type": "structure",
+                "members": {
+                    "ListArg": {
+                        "shape": "StringList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryLists",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Serializes query lists",
+                "params": {
+                    "ListArg": [
+                        "foo",
+                        "bar",
+                        "baz"
+                    ],
+                    "ComplexListArg": [
+                        {
+                            "hi": "hello"
+                        },
+                        {
+                            "hi": "hola"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&ListArg.member.1=foo&ListArg.member.2=bar&ListArg.member.3=baz&ComplexListArg.member.1.hi=hello&ComplexListArg.member.2.hi=hola",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "EmptyQueryLists",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Serializes empty query lists",
+                "params": {
+                    "ListArg": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&ListArg=",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "FlattenedQueryLists",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Flattens query lists by repeating the member name and removing the member element",
+                "params": {
+                    "FlattenedListArg": [
+                        "A",
+                        "B"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&FlattenedListArg.1=A&FlattenedListArg.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryListArgWithXmlNameMember",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Changes the member of lists using xmlName trait",
+                "params": {
+                    "ListArgWithXmlNameMember": [
+                        "A",
+                        "B"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&ListArgWithXmlNameMember.item.1=A&ListArgWithXmlNameMember.item.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryFlattenedListArgWithXmlName",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Changes the name of flattened lists using xmlName trait on the structure member",
+                "params": {
+                    "FlattenedListArgWithXmlName": [
+                        "A",
+                        "B"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&Hi.1=A&Hi.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryNestedStructWithList",
+                "given": {
+                    "name": "QueryLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryListsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex lists.</p>"
+                },
+                "description": "Nested structure with a list member",
+                "params": {
+                    "NestedWithList": {
+                        "ListArg": [
+                            "A",
+                            "B"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryLists&Version=2020-01-08&NestedWithList.ListArg.member.1=A&NestedWithList.ListArg.member.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryMaps operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryMapsInput": {
+                "type": "structure",
+                "members": {
+                    "MapArg": {
+                        "shape": "StringMap"
+                    },
+                    "RenamedMapArg": {
+                        "shape": "StringMap",
+                        "locationName": "Foo"
+                    },
+                    "ComplexMapArg": {
+                        "shape": "ComplexMap"
+                    },
+                    "MapWithXmlMemberName": {
+                        "shape": "MapWithXmlName"
+                    },
+                    "FlattenedMap": {
+                        "shape": "StringMap",
+                        "flattened": true
+                    },
+                    "FlattenedMapWithXmlName": {
+                        "shape": "MapWithXmlName",
+                        "flattened": true,
+                        "locationName": "Hi"
+                    },
+                    "MapOfLists": {
+                        "shape": "MapOfLists"
+                    },
+                    "NestedStructWithMap": {
+                        "shape": "NestedStructWithMap"
+                    }
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "ComplexMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "MapWithXmlName": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V"
+                }
+            },
+            "MapOfLists": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringList"
+                }
+            },
+            "NestedStructWithMap": {
+                "type": "structure",
+                "members": {
+                    "MapArg": {
+                        "shape": "StringMap"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "QuerySimpleQueryMaps",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes query maps",
+                "params": {
+                    "MapArg": {
+                        "bar": "Bar",
+                        "foo": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&MapArg.entry.1.key=bar&MapArg.entry.1.value=Bar&MapArg.entry.2.key=foo&MapArg.entry.2.value=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QuerySimpleQueryMapsWithXmlName",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes query maps and uses xmlName",
+                "params": {
+                    "RenamedMapArg": {
+                        "foo": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&Foo.entry.1.key=foo&Foo.entry.1.value=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryComplexQueryMaps",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes complex query maps",
+                "params": {
+                    "ComplexMapArg": {
+                        "bar": {
+                            "hi": "Bar"
+                        },
+                        "foo": {
+                            "hi": "Foo"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&ComplexMapArg.entry.1.key=bar&ComplexMapArg.entry.1.value.hi=Bar&ComplexMapArg.entry.2.key=foo&ComplexMapArg.entry.2.value.hi=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryEmptyQueryMaps",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Does not serialize empty query maps",
+                "params": {
+                    "MapArg": {}
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryQueryMapWithMemberXmlName",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes query maps where the member has an xmlName trait",
+                "params": {
+                    "MapWithXmlMemberName": {
+                        "bar": "Bar",
+                        "foo": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&MapWithXmlMemberName.entry.1.K=bar&MapWithXmlMemberName.entry.1.V=Bar&MapWithXmlMemberName.entry.2.K=foo&MapWithXmlMemberName.entry.2.V=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryFlattenedQueryMaps",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes flattened query maps",
+                "params": {
+                    "FlattenedMap": {
+                        "bar": "Bar",
+                        "foo": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&FlattenedMap.1.key=bar&FlattenedMap.1.value=Bar&FlattenedMap.2.key=foo&FlattenedMap.2.value=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryFlattenedQueryMapsWithXmlName",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes flattened query maps that use an xmlName",
+                "params": {
+                    "FlattenedMapWithXmlName": {
+                        "bar": "Bar",
+                        "foo": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&Hi.1.K=bar&Hi.1.V=Bar&Hi.2.K=foo&Hi.2.V=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryQueryMapOfLists",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes query map of lists",
+                "params": {
+                    "MapOfLists": {
+                        "bar": [
+                            "C",
+                            "D"
+                        ],
+                        "foo": [
+                            "A",
+                            "B"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&MapOfLists.entry.1.key=bar&MapOfLists.entry.1.value.member.1=C&MapOfLists.entry.1.value.member.2=D&MapOfLists.entry.2.key=foo&MapOfLists.entry.2.value.member.1=A&MapOfLists.entry.2.value.member.2=B",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            },
+            {
+                "id": "QueryNestedStructWithMap",
+                "given": {
+                    "name": "QueryMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryMapsInput"
+                    },
+                    "documentation": "<p>This test serializes simple and complex maps.</p>"
+                },
+                "description": "Serializes nested struct with map member",
+                "params": {
+                    "NestedStructWithMap": {
+                        "MapArg": {
+                            "bar": "Bar",
+                            "foo": "Foo"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryMaps&Version=2020-01-08&NestedStructWithMap.MapArg.entry.1.key=bar&NestedStructWithMap.MapArg.entry.1.value=Bar&NestedStructWithMap.MapArg.entry.2.key=foo&NestedStructWithMap.MapArg.entry.2.value=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryTimestamps operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "QueryTimestampsInput": {
+                "type": "structure",
+                "members": {
+                    "normalFormat": {
+                        "shape": "Timestamp"
+                    },
+                    "epochMember": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochTarget": {
+                        "shape": "EpochSeconds"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryTimestampsInput",
+                "given": {
+                    "name": "QueryTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "QueryTimestampsInput"
+                    },
+                    "documentation": "<p>This test serializes timestamps.</p> <ol> <li>Timestamps are serialized as RFC 3339 date-time values by default.</li> <li>A timestampFormat trait on a member changes the format.</li> <li>A timestampFormat trait on the shape targeted by the member changes the format.</li> </ol>"
+                },
+                "description": "Serializes timestamps",
+                "params": {
+                    "normalFormat": 1422172800,
+                    "epochMember": 1422172800,
+                    "epochTarget": 1422172800
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=QueryTimestamps&Version=2020-01-08&normalFormat=2015-01-25T08%3A00%3A00Z&epochMember=1422172800&epochTarget=1422172800",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleInputParams operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "SimpleInputParamsInput": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    },
+                    "Bar": {
+                        "shape": "String"
+                    },
+                    "Baz": {
+                        "shape": "Boolean"
+                    },
+                    "Bam": {
+                        "shape": "Integer"
+                    },
+                    "FloatValue": {
+                        "shape": "Float"
+                    },
+                    "Boo": {
+                        "shape": "Double"
+                    },
+                    "Qux": {
+                        "shape": "Blob"
+                    },
+                    "FooEnum": {
+                        "shape": "FooEnum"
+                    },
+                    "IntegerEnum": {
+                        "shape": "IntegerEnum"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "QuerySimpleInputParamsStrings",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes strings",
+                "params": {
+                    "Foo": "val1",
+                    "Bar": "val2"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Bar=val2",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QuerySimpleInputParamsStringAndBooleanTrue",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes booleans that are true",
+                "params": {
+                    "Foo": "val1",
+                    "Baz": true
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Foo=val1&Baz=true",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QuerySimpleInputParamsStringsAndBooleanFalse",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes booleans that are false",
+                "params": {
+                    "Baz": false
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Baz=false",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QuerySimpleInputParamsInteger",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes integers",
+                "params": {
+                    "Bam": 10
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Bam=10",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QuerySimpleInputParamsFloat",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes floats",
+                "params": {
+                    "Boo": 10.8
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Boo=10.8",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QuerySimpleInputParamsBlob",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Blobs are base64 encoded in the query string",
+                "params": {
+                    "Qux": "value"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&Qux=dmFsdWU%3D",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QueryEnums",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes enums in the query string",
+                "params": {
+                    "FooEnum": "Foo"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FooEnum=Foo",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "QueryIntEnums",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Serializes intEnums in the query string",
+                "params": {
+                    "IntegerEnum": 1
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&IntegerEnum=1",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "AwsQuerySupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "FloatValue": "NaN",
+                    "Boo": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=NaN&Boo=NaN",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "AwsQuerySupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "FloatValue": "Infinity",
+                    "Boo": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=Infinity&Boo=Infinity",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "AwsQuerySupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleInputParams",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleInputParamsInput"
+                    },
+                    "documentation": "<p>This test serializes strings, numbers, and boolean values.</p>"
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "FloatValue": "-Infinity",
+                    "Boo": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/",
+                    "body": "Action=SimpleInputParams&Version=2020-01-08&FloatValue=-Infinity&Boo=-Infinity",
+                    "headers": {
+                        "Content-Type": "application/x-www-form-urlencoded"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/rest-json.json 2.31.35-1/tests/unit/botocore/protocols/input/rest-json.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/rest-json.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/rest-json.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,2194 +1,6117 @@
 [
-  {
-    "description": "No parameters",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {},
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobs"
-          },
-          "name": "OperationName"
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobs",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "URI parameter only with no location name",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo"
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/foo",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "URI parameter only with location name",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "PipelineId"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Foo": "bar"
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/bar",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Querystring list of strings",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Items": {
-            "shape": "StringList",
-            "location": "querystring",
-            "locationName": "item"
-          }
-        }
-      },
-      "StringList": {
-        "type": "list",
-        "member": {
-          "shape": "String"
-        }
-      },
-      "String": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Items": ["value1", "value2"]
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?item=value1&item=value2",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "String to string maps in querystring",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri"
-          },
-          "QueryDoc": {
-            "shape": "MapStringStringType",
-            "location": "querystring"
-          }
-        }
-      },
-      "MapStringStringType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo",
-          "QueryDoc": {
-            "bar": "baz",
-            "fizz": "buzz"
-          }
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/foo?bar=baz&fizz=buzz",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "String to string list maps in querystring",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri"
-          },
-          "QueryDoc": {
-            "shape": "MapStringStringListType",
-            "location": "querystring"
-          }
-        }
-      },
-      "MapStringStringListType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringListType"
-        }
-      },
-      "StringListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "id",
-          "QueryDoc": {
-            "foo": ["bar", "baz"],
-            "fizz": ["buzz", "pop"]
-          }
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/id?foo=bar&foo=baz&fizz=buzz&fizz=pop",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Boolean in querystring",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "BoolQuery": {
-            "shape": "BoolType",
-            "location": "querystring",
-            "locationName": "bool-query"
-          }
-        }
-      },
-      "BoolType": {
-        "type": "boolean"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BoolQuery": true
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?bool-query=true",
-          "headers": {}
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BoolQuery": false
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?bool-query=false",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "URI parameter and querystring params",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "PipelineId"
-          },
-          "Ascending": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "Ascending"
-          },
-          "PageToken": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "PageToken"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo",
-          "Ascending": "true",
-          "PageToken": "bar"
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "URI parameter, querystring params and JSON body",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "PipelineId"
-          },
-          "Ascending": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "Ascending"
-          },
-          "PageToken": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "PageToken"
-          },
-          "Config": {
-            "shape": "StructType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-          "A": {
-            "shape": "StringType"
-          },
-          "B": {
-            "shape": "StringType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo",
-          "Ascending": "true",
-          "PageToken": "bar",
-          "Config": {
-            "A": "one",
-            "B": "two"
-          }
-        },
-        "serialized": {
-          "body": "{\"Config\": {\"A\": \"one\", \"B\": \"two\"}}",
-          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "URI parameter, querystring params, headers and JSON body",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "PipelineId"
-          },
-          "Ascending": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "Ascending"
-          },
-          "Checksum": {
-            "shape": "StringType",
-            "location": "header",
-            "locationName": "x-amz-checksum"
-          },
-          "PageToken": {
-            "shape": "StringType",
-            "location": "querystring",
-            "locationName": "PageToken"
-          },
-          "Config": {
-            "shape": "StructType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-          "A": {
-            "shape": "StringType"
-          },
-          "B": {
-            "shape": "StringType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo",
-          "Ascending": "true",
-          "Checksum": "12345",
-          "PageToken": "bar",
-          "Config": {
-            "A": "one",
-            "B": "two"
-          }
-        },
-        "serialized": {
-          "body": "{\"Config\": {\"A\": \"one\", \"B\": \"two\"}}",
-          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
-          "headers": {
-            "x-amz-checksum": "12345"
-          }
-        }
-      }
-    ]
-  },
-  {
-    "description": "Streaming payload",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "vaultName": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "vaultName"
-          },
-          "checksum": {
-            "shape": "StringType",
-            "location": "header",
-            "locationName": "x-amz-sha256-tree-hash"
-          },
-          "body": {
-            "shape": "Stream"
-          }
+    {
+        "description": "Test cases for AllQueryStringTypes operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "AllQueryStringTypesInput": {
+                "type": "structure",
+                "members": {
+                    "queryString": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "String"
+                    },
+                    "queryStringList": {
+                        "shape": "StringList",
+                        "location": "querystring",
+                        "locationName": "StringList"
+                    },
+                    "queryStringSet": {
+                        "shape": "StringSet",
+                        "location": "querystring",
+                        "locationName": "StringSet"
+                    },
+                    "queryByte": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Byte"
+                    },
+                    "queryShort": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Short"
+                    },
+                    "queryInteger": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Integer"
+                    },
+                    "queryIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "querystring",
+                        "locationName": "IntegerList"
+                    },
+                    "queryIntegerSet": {
+                        "shape": "IntegerSet",
+                        "location": "querystring",
+                        "locationName": "IntegerSet"
+                    },
+                    "queryLong": {
+                        "shape": "Long",
+                        "location": "querystring",
+                        "locationName": "Long"
+                    },
+                    "queryFloat": {
+                        "shape": "Float",
+                        "location": "querystring",
+                        "locationName": "Float"
+                    },
+                    "queryDouble": {
+                        "shape": "Double",
+                        "location": "querystring",
+                        "locationName": "Double"
+                    },
+                    "queryDoubleList": {
+                        "shape": "DoubleList",
+                        "location": "querystring",
+                        "locationName": "DoubleList"
+                    },
+                    "queryBoolean": {
+                        "shape": "Boolean",
+                        "location": "querystring",
+                        "locationName": "Boolean"
+                    },
+                    "queryBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "querystring",
+                        "locationName": "BooleanList"
+                    },
+                    "queryTimestamp": {
+                        "shape": "Timestamp",
+                        "location": "querystring",
+                        "locationName": "Timestamp"
+                    },
+                    "queryTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "querystring",
+                        "locationName": "TimestampList"
+                    },
+                    "queryEnum": {
+                        "shape": "FooEnum",
+                        "location": "querystring",
+                        "locationName": "Enum"
+                    },
+                    "queryEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "querystring",
+                        "locationName": "EnumList"
+                    },
+                    "queryIntegerEnum": {
+                        "shape": "IntegerEnum",
+                        "location": "querystring",
+                        "locationName": "IntegerEnum"
+                    },
+                    "queryIntegerEnumList": {
+                        "shape": "IntegerEnumList",
+                        "location": "querystring",
+                        "locationName": "IntegerEnumList"
+                    },
+                    "queryParamsMapOfStringList": {
+                        "shape": "StringListMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "IntegerSet": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "DoubleList": {
+                "type": "list",
+                "member": {
+                    "shape": "Double"
+                }
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "StringListMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringList"
+                }
+            }
         },
-        "required": [
-          "vaultName"
+        "cases": [
+            {
+                "id": "RestJsonAllQueryStringTypes",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Serializes query string parameters with all supported types",
+                "params": {
+                    "queryString": "Hello there",
+                    "queryStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "queryStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "queryByte": 1,
+                    "queryShort": 2,
+                    "queryInteger": 3,
+                    "queryIntegerList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryIntegerSet": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryLong": 4,
+                    "queryFloat": 1.1,
+                    "queryDouble": 1.1,
+                    "queryDoubleList": [
+                        1.1,
+                        2.1,
+                        3.1
+                    ],
+                    "queryBoolean": true,
+                    "queryBooleanList": [
+                        true,
+                        false,
+                        true
+                    ],
+                    "queryTimestamp": 1,
+                    "queryTimestampList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryEnum": "Foo",
+                    "queryEnumList": [
+                        "Foo",
+                        "Baz",
+                        "Bar"
+                    ],
+                    "queryIntegerEnum": 1,
+                    "queryIntegerEnumList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryParamsMapOfStringList": {
+                        "String": [
+                            "Hello there"
+                        ],
+                        "StringList": [
+                            "a",
+                            "b",
+                            "c"
+                        ],
+                        "StringSet": [
+                            "a",
+                            "b",
+                            "c"
+                        ],
+                        "Byte": [
+                            "1"
+                        ],
+                        "Short": [
+                            "2"
+                        ],
+                        "Integer": [
+                            "3"
+                        ],
+                        "IntegerList": [
+                            "1",
+                            "2",
+                            "3"
+                        ],
+                        "IntegerSet": [
+                            "1",
+                            "2",
+                            "3"
+                        ],
+                        "Long": [
+                            "4"
+                        ],
+                        "Float": [
+                            "1.1"
+                        ],
+                        "Double": [
+                            "1.1"
+                        ],
+                        "DoubleList": [
+                            "1.1",
+                            "2.1",
+                            "3.1"
+                        ],
+                        "Boolean": [
+                            "true"
+                        ],
+                        "BooleanList": [
+                            "true",
+                            "false",
+                            "true"
+                        ],
+                        "Timestamp": [
+                            "1970-01-01T00:00:01Z"
+                        ],
+                        "TimestampList": [
+                            "1970-01-01T00:00:01Z",
+                            "1970-01-01T00:00:02Z",
+                            "1970-01-01T00:00:03Z"
+                        ],
+                        "Enum": [
+                            "Foo"
+                        ],
+                        "EnumList": [
+                            "Foo",
+                            "Baz",
+                            "Bar"
+                        ],
+                        "IntegerEnum": [
+                            "1"
+                        ],
+                        "IntegerEnumList": [
+                            "1",
+                            "2",
+                            "3"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?String=Hello%20there&StringList=a&StringList=b&StringList=c&StringSet=a&StringSet=b&StringSet=c&Byte=1&Short=2&Integer=3&IntegerList=1&IntegerList=2&IntegerList=3&IntegerSet=1&IntegerSet=2&IntegerSet=3&Long=4&Float=1.1&Double=1.1&DoubleList=1.1&DoubleList=2.1&DoubleList=3.1&Boolean=true&BooleanList=true&BooleanList=false&BooleanList=true&Timestamp=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A02Z&TimestampList=1970-01-01T00%3A00%3A03Z&Enum=Foo&EnumList=Foo&EnumList=Baz&EnumList=Bar&IntegerEnum=1&IntegerEnumList=1&IntegerEnumList=2&IntegerEnumList=3",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonQueryStringMap",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Handles query string maps",
+                "params": {
+                    "queryParamsMapOfStringList": {
+                        "QueryParamsStringKeyA": [
+                            "Foo"
+                        ],
+                        "QueryParamsStringKeyB": [
+                            "Bar"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?QueryParamsStringKeyA=Foo&QueryParamsStringKeyB=Bar",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonQueryStringEscaping",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Handles escaping all required characters in the query string.",
+                "params": {
+                    "queryString": " %:/?#[]@!$&'()*+,;=😹",
+                    "queryParamsMapOfStringList": {
+                        "String": [
+                            " %:/?#[]@!$&'()*+,;=😹"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?String=%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSupportsNaNFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling NaN float query values.",
+                "params": {
+                    "queryFloat": "NaN",
+                    "queryDouble": "NaN",
+                    "queryParamsMapOfStringList": {
+                        "Float": [
+                            "NaN"
+                        ],
+                        "Double": [
+                            "NaN"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=NaN&Double=NaN",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling Infinity float query values.",
+                "params": {
+                    "queryFloat": "Infinity",
+                    "queryDouble": "Infinity",
+                    "queryParamsMapOfStringList": {
+                        "Float": [
+                            "Infinity"
+                        ],
+                        "Double": [
+                            "Infinity"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=Infinity&Double=Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling -Infinity float query values.",
+                "params": {
+                    "queryFloat": "-Infinity",
+                    "queryDouble": "-Infinity",
+                    "queryParamsMapOfStringList": {
+                        "Float": [
+                            "-Infinity"
+                        ],
+                        "Double": [
+                            "-Infinity"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=-Infinity&Double=-Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonZeroAndFalseQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Query values of 0 and false are serialized",
+                "params": {
+                    "queryInteger": 0,
+                    "queryBoolean": false,
+                    "queryParamsMapOfStringList": {
+                        "Integer": [
+                            "0"
+                        ],
+                        "Boolean": [
+                            "false"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Integer=0&Boolean=false",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for ConstantAndVariableQueryString operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ConstantAndVariableQueryStringInput": {
+                "type": "structure",
+                "members": {
+                    "baz": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "baz"
+                    },
+                    "maybeSet": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "maybeSet"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonConstantAndVariableQueryStringMissingOneValue",
+                "given": {
+                    "name": "ConstantAndVariableQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantAndVariableQueryString?foo=bar",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantAndVariableQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).</p>"
+                },
+                "description": "Mixes constant and variable query string parameters",
+                "params": {
+                    "baz": "bam"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonConstantAndVariableQueryStringAllValues",
+                "given": {
+                    "name": "ConstantAndVariableQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantAndVariableQueryString?foo=bar",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantAndVariableQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).</p>"
+                },
+                "description": "Mixes constant and variable query string parameters",
+                "params": {
+                    "baz": "bam",
+                    "maybeSet": "yes"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam&maybeSet=yes",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for ConstantQueryString operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ConstantQueryStringInput": {
+                "type": "structure",
+                "required": [
+                    "hello"
+                ],
+                "members": {
+                    "hello": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "hello"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonConstantQueryString",
+                "given": {
+                    "name": "ConstantQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantQueryString/{hello}?foo=bar&hello",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named &quot;hello&quot; should in no way conflict with the label, <code>{hello}</code>.</p>"
+                },
+                "description": "Includes constant query string parameters",
+                "params": {
+                    "hello": "hi"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantQueryString/hi?foo=bar&hello",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentType operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "documentValue": {
+                        "shape": "Document"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentTypeInputWithObject",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes document types as part of the JSON request payload with no escaping.",
+                "params": {
+                    "stringValue": "string",
+                    "documentValue": {
+                        "foo": "bar"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentType",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": {\n        \"foo\": \"bar\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "DocumentInputWithString",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes document types using a string.",
+                "params": {
+                    "stringValue": "string",
+                    "documentValue": "hello"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentType",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": \"hello\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "DocumentInputWithNumber",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes document types using a number.",
+                "params": {
+                    "stringValue": "string",
+                    "documentValue": 10
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentType",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": 10\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "DocumentInputWithBoolean",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes document types using a boolean.",
+                "params": {
+                    "stringValue": "string",
+                    "documentValue": true
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentType",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": true\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "DocumentInputWithList",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes document types using a list.",
+                "params": {
+                    "stringValue": "string",
+                    "documentValue": [
+                        true,
+                        "hi",
+                        [
+                            1,
+                            2
+                        ],
+                        {
+                            "foo": {
+                                "baz": [
+                                    3,
+                                    4
+                                ]
+                            }
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentType",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": [\n        true,\n        \"hi\",\n        [\n            1,\n            2\n        ],\n        {\n            \"foo\": {\n                \"baz\": [\n                    3,\n                    4\n                ]\n            }\n        }\n    ]\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentTypeAsMapValue operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeAsMapValueInputOutput": {
+                "type": "structure",
+                "members": {
+                    "docValuedMap": {
+                        "shape": "DocumentValuedMap"
+                    }
+                }
+            },
+            "DocumentValuedMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Document"
+                }
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentTypeAsMapValueInput",
+                "given": {
+                    "name": "DocumentTypeAsMapValue",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsMapValue",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeAsMapValueInputOutput"
+                    },
+                    "documentation": "<p>This example serializes documents as the value of maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a map that uses documents as the value.",
+                "params": {
+                    "docValuedMap": {
+                        "foo": {
+                            "f": 1,
+                            "o": 2
+                        },
+                        "bar": [
+                            "b",
+                            "a",
+                            "r"
+                        ],
+                        "baz": "BAZ"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentTypeAsMapValue",
+                    "body": "{\n    \"docValuedMap\": {\n        \"foo\": { \"f\": 1, \"o\": 2 },\n        \"bar\": [ \"b\", \"a\", \"r\" ],\n        \"baz\": \"BAZ\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentTypeAsPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeAsPayloadInputOutput": {
+                "type": "structure",
+                "members": {
+                    "documentValue": {
+                        "shape": "Document"
+                    }
+                },
+                "payload": "documentValue"
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentTypeAsPayloadInput",
+                "given": {
+                    "name": "DocumentTypeAsPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeAsPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as the entire HTTP payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a document as the target of the httpPayload trait.",
+                "params": {
+                    "documentValue": {
+                        "foo": "bar"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentTypeAsPayload",
+                    "body": "{\n    \"foo\": \"bar\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "DocumentTypeAsPayloadInputString",
+                "given": {
+                    "name": "DocumentTypeAsPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "DocumentTypeAsPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as the entire HTTP payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a document as the target of the httpPayload trait using a string.",
+                "params": {
+                    "documentValue": "hello"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/DocumentTypeAsPayload",
+                    "body": "\"hello\"",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EmptyInputAndEmptyOutput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "EmptyInputAndEmptyOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Clients should not serialize a JSON payload when no parameters\nare given that are sent in the body. A service will tolerate\nclients that omit a payload or that send a JSON object.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EmptyInputAndEmptyOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonEndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EndpointOperation",
+                        "responseCode": 200
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EndpointOperation",
+                    "body": "",
+                    "host": "foo.example.com"
+                }
+            }
         ],
-        "payload": "body"
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "Stream": {
-        "type": "blob",
-        "streaming": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/vaults/{vaultName}/archives"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "vaultName": "name",
-          "checksum": "foo",
-          "body": "contents"
-        },
-        "serialized": {
-          "body": "contents",
-          "uri": "/2014-01-01/vaults/name/archives",
-          "headers": {
-            "x-amz-sha256-tree-hash": "foo"
-          }
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize blobs in body",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType",
-            "location": "uri",
-            "locationName": "Foo"
-          },
-          "Bar": {"shape": "BlobType"}
-        },
-        "required": [
-          "Foo"
-        ]
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/{Foo}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Foo": "foo_name",
-          "Bar": "Blob param"
-        },
-        "serialized": {
-          "body": "{\"Bar\": \"QmxvYiBwYXJhbQ==\"}",
-          "uri": "/2014-01-01/foo_name"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob payload",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        }
-      },
-      "FooShape": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "payload": "foo"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": "bar"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "bar",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "payload": "foo"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Structure payload",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        }
-      },
-      "FooShape": {
-        "locationName": "foo",
-        "type": "structure",
-        "members": {
-          "baz": {
-            "shape": "BazShape"
-          }
-        }
-      },
-      "BazShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "payload": "foo"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": {
-            "baz": "bar"
-          }
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "{\"baz\": \"bar\"}",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "payload": "foo"
-          },
-          "name": "OperationName"
-        },
-        "params": {},
-        "serialized": {
-          "method": "POST",
-          "body": "{}",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Omits null query params, but serializes empty strings",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "location":"querystring",
-            "locationName":"param-name",
-            "shape": "Foo"
-          }
-        }
-      },
-      "Foo": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "OperationName",
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "input": { "shape": "InputShape" }
-        },
-        "params": { "foo": null },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/path"
-        }
-      },
-      {
-        "given": {
-          "name": "OperationName",
-          "http": {
-            "method": "POST",
-            "requestUri": "/path?abc=mno"
-          },
-          "input": { "shape": "InputShape" }
-        },
-        "params": { "foo": "" },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/path?abc=mno&param-name="
-        }
-      }
-    ]
-  },
-  {
-    "description": "Recursive shapes",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          }
-        }
-      },
-      "RecursiveStructType": {
-        "type": "structure",
-        "members": {
-          "NoRecurse": {
-            "shape": "StringType"
-          },
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          },
-          "RecursiveList": {
-            "shape": "RecursiveListType"
-          },
-          "RecursiveMap": {
-            "shape": "RecursiveMapType"
-          }
-        }
-      },
-      "RecursiveListType": {
-        "type": "list",
-        "member": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "RecursiveMapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "NoRecurse": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/path" ,
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "NoRecurse": "foo"
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "RecursiveStruct": {
-                "RecursiveStruct": {
-                  "NoRecurse": "foo"
-                }
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "NoRecurse": "bar"
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"NoRecurse\": \"bar\"}]}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "RecursiveStruct": {
-                  "NoRecurse": "bar"
-                }
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"RecursiveStruct\": {\"NoRecurse\": \"bar\"}}]}}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveMap": {
-              "foo": {
-                "NoRecurse": "foo"
-              },
-              "bar": {
-                "NoRecurse": "bar"
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"RecursiveStruct\": {\"RecursiveMap\": {\"foo\": {\"NoRecurse\": \"foo\"}, \"bar\": {\"NoRecurse\": \"bar\"}}}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp values",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeArgInHeader": {
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timearg"
-          },
-          "TimeArgInQuery": {
-            "shape": "TimestampType",
-            "location": "querystring",
-            "locationName": "TimeQuery"
-          },
-          "TimeCustom": {
-            "timestampFormat": "iso8601",
-            "shape": "TimestampType"
-          },
-          "TimeCustomInHeader": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timecustom-header"
-          },
-          "TimeCustomInQuery": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "querystring",
-            "locationName": "TimeCustomQuery"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatRfcType"
-          },
-          "TimeFormatInHeader": {
-            "shape": "TimestampFormatUnixType",
-            "location": "header",
-            "locationName": "x-amz-timeformat-header"
-          },
-          "TimeFormatInQuery": {
-            "shape": "TimestampFormatUnixType",
-            "location": "querystring",
-            "locationName": "TimeFormatQuery"
-          }
-        }
-      },
-      "TimestampFormatRfcType": {
-        "timestampFormat": "rfc822",
-        "type": "timestamp"
-      },
-      "TimestampFormatUnixType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800,
-          "TimeArgInQuery": 1422172800,
-          "TimeArgInHeader": 1422172800,
-          "TimeCustom": 1422172800,
-          "TimeCustomInQuery": 1422172800,
-          "TimeCustomInHeader": 1422172800,
-          "TimeFormat": 1422172800,
-          "TimeFormatInQuery": 1422172800,
-          "TimeFormatInHeader": 1422172800
-        },
-        "serialized": {
-          "uri": "/path?TimeQuery=2015-01-25T08%3A00%3A00Z&TimeCustomQuery=1422172800&TimeFormatQuery=1422172800",
-          "headers": {
-            "x-amz-timearg": "Sun, 25 Jan 2015 08:00:00 GMT",
-            "x-amz-timecustom-header": "1422172800",
-            "x-amz-timeformat-header": "1422172800"
-          },
-          "body": "{\"TimeArg\": 1422172800, \"TimeCustom\": \"2015-01-25T08:00:00Z\", \"TimeFormat\": \"Sun, 25 Jan 2015 08:00:00 GMT\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Named locations in JSON body",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType",
-            "locationName": "timestamp_location"
-          }
-        }
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"timestamp_location\": 1422172800}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "String payload",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        }
-      },
-      "FooShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "payload": "foo"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": "bar"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "bar",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Idempotency token auto fill",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Token": {
-            "shape": "StringType",
-            "idempotencyToken": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Token": "abc123"
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"Token\": \"abc123\"}"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "{\"Token\": \"00000000-0000-4000-8000-000000000000\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "JSON value trait",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Attr": {
-            "shape": "StringType",
-              "jsonvalue": true,
-              "location": "header",
-              "locationName": "X-Amz-Foo"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Attr": {"Foo":"Bar"}
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
-          "body": ""
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Endpoint host trait",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://service.region.amazonaws.com",
-    "shapes": {
-      "StaticInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "MemberRefInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType",
-            "hostLabel": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "StaticOp",
-          "input": {
-            "shape": "StaticInputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "endpoint":{
-              "hostPrefix": "data-"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "{\"Name\": \"myname\"}",
-          "host": "data-service.region.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "MemberRefOp",
-          "input": {
-            "shape": "MemberRefInputShape"
-          },
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "endpoint":{
-              "hostPrefix": "foo-{Name}."
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "{\"Name\": \"myname\"}",
-          "host": "foo-myname.service.region.amazonaws.com"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes document with standalone primitive as part of the JSON request payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "documentValue": {
-            "shape": "DocumentType"
-          }
-        }
-      },
-      "DocumentType": {
-        "type": "structure",
-        "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": "foo"
-        },
-        "serialized": {
-          "body": "{\"documentValue\": \"foo\"}",
-          "uri": "/InlineDocument"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": 123
-        },
-        "serialized": {
-          "body": "{\"documentValue\": 123}",
-          "uri": "/InlineDocument"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": 1.2
-        },
-        "serialized": {
-          "body": "{\"documentValue\": 1.2}",
-          "uri": "/InlineDocument"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": true
-        },
-        "serialized": {
-          "body": "{\"documentValue\": true}",
-          "uri": "/InlineDocument"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": ""
-        },
-        "serialized": {
-          "body": "{\"documentValue\": \"\"}",
-          "uri": "/InlineDocument"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes inline documents as part of the JSON request payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "documentValue": {
-            "shape": "DocumentType"
-          }
-        }
-      },
-      "DocumentType": {
-        "type": "structure",
-        "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": {"foo": "bar"}
-        },
-        "serialized": {
-          "body": "{\"documentValue\": {\"foo\": \"bar\"}}",
-          "uri": "/InlineDocument"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes aggregate documents as part of the JSON request payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "documentValue": {
-            "shape": "DocumentType"
-          }
-        }
-      },
-      "DocumentType": {
-        "type": "structure",
-        "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": {
-              "str": "test",
-              "num": 123,
-              "float": 1.2,
-              "bool": true,
-              "null": "",
-              "document": {"foo": false},
-              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
-          }
-        },
-        "serialized": {
-          "body": "{\"documentValue\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}",
-          "uri": "/InlineDocument"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/InlineDocument"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "documentValue": [
-              "test",
-              123,
-              1.2,
-              true,
-              "",
-              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
-              ["foo", false]
-          ]
-        },
-        "serialized": {
-          "body": "{\"documentValue\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}",
-          "uri": "/InlineDocument"
-        }
-      }
-    ]
-      },
-  {
-    "description": "Content-Type and JSON body",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://rest-json-test.amazonaws.com",
-    "shapes":{
-      "Integer":{
-        "type":"integer"
-      },
-      "String":{"type":"string"},
-      "Blob":{"type":"blob"},
-      "NoPayloadRequest":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "testId":{
-            "shape":"TestId",
-            "documentation":"<p> The unique ID for a test. </p>",
-            "location":"header",
-            "locationName":"x-amz-test-id"
-          }
-        },
-        "documentation":"<p> The request structure for a no payload request. </p>"
-      },
-      "TestId":{
-        "type":"string",
-        "max":8,
-        "min":3,
-        "pattern":"t-[a-z0-9-]+"
-      },
-      "TestConfig":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "timeout":{
-            "shape":"Integer",
-            "documentation":"<p> Timeout in seconds </p>"
-          }
-        }
-      },
-      "PayloadConfig":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "data":{
-            "shape":"Integer",
-            "documentation":"<p> Numerical data </p>"
-          }
-        }
-      },
-      "TestBodyRequest":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "testConfig":{
-            "shape":"TestConfig",
-            "documentation":"<p> Content to post </p>"
-          },
-          "testId":{
-            "shape":"TestId",
-            "documentation":"<p> Optional test identifier </p>",
-            "location":"header",
-            "locationName":"x-amz-test-id"
-          }
-        },
-        "documentation":"<p> The request structure for a test body request. </p>"
-      },
-      "TestPayloadRequest":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "payloadConfig":{
-            "shape":"PayloadConfig",
-            "documentation":"<p> Payload to post </p>"
-          },
-          "testId":{
-            "shape":"TestId",
-            "documentation":"<p> Optional test identifier </p>",
-            "location":"header",
-            "locationName":"x-amz-test-id"
-          }
-        },
-        "documentation":"<p> The request structure for a payload request. </p>",
-        "payload":"payloadConfig"
-      },
-      "TestBlobPayloadRequest":{
-        "type":"structure",
-        "required":[],
-        "members":{
-          "data":{
-            "shape":"Blob",
-            "documentation":"<p> Blob payload to post </p>"
-          },
-          "contentType":{
-            "shape":"String",
-            "documentation":"<p> Optional content-type header </p>",
-            "location":"header",
-            "locationName":"Content-Type"
-          }
-        },
-        "documentation":"<p> The request structure for a blob payload request. </p>",
-        "payload":"data"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "TestBody",
-          "input": {
-            "shape": "TestBodyRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/body"
-          }
-        },
-        "params": {
-          "testConfig": {
-            "timeout": 10
-          },
-          "testId": "t-12345"
-        },
-        "serialized": {
-          "uri": "/body",
-          "body": "{\"testConfig\": {\"timeout\": 10}}",
-          "headers": {
-            "x-amz-test-id": "t-12345",
-            "Content-Type": "application/json"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestBodyNoParams",
-          "input": {
-            "shape": "TestBodyRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/body"
-          }
-        },
-        "params": {},
-        "serialized": {
-          "uri": "/body",
-          "body": "{}",
-          "headers": {
-            "Content-Type": "application/json"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestPayloadNoParams",
-          "input": {
-            "shape": "TestPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/payload"
-          }
-        },
-        "params": {},
-        "serialized": {
-          "uri": "/payload",
-          "body": "{}",
-          "headers": {
-            "Content-Type": "application/json"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestPayload",
-          "input": {
-            "shape": "TestPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/payload"
-          }
-        },
-        "params": {
-          "payloadConfig": {
-            "data": 25
-          },
-          "testId": "t-12345"
-        },
-        "serialized": {
-          "uri": "/payload",
-          "body": "{\"data\": 25}",
-          "headers": {
-            "x-amz-test-id": "t-12345",
-            "Content-Type": "application/json"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestPayloadNoBody",
-          "input": {
-            "shape": "TestPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/payload"
-          }
-        },
-        "params": {
-          "testId": "t-12345"
-        },
-        "serialized": {
-          "uri": "/payload",
-          "body": "{}",
-          "headers": {
-            "x-amz-test-id": "t-12345",
-            "Content-Type": "application/json"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestBlobPayload",
-          "input": {
-            "shape": "TestBlobPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/blob-payload"
-          }
-        },
-        "params": {
-          "data": "1234",
-          "contentType": "image/jpg"
-        },
-        "serialized": {
-          "uri": "/blob-payload",
-          "body": "1234",
-          "headers": {
-            "Content-Type": "image/jpg"
-          },
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestBlobPayloadNoContentType",
-          "input": {
-            "shape": "TestBlobPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/blob-payload"
-          }
-        },
-        "params": {
-          "data": "1234"
-        },
-        "serialized": {
-          "uri": "/blob-payload",
-          "body": "1234",
-          "forbidHeaders": ["Content-Length"],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "TestBlobPayloadNoParams",
-          "input": {
-            "shape": "TestBlobPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/blob-payload"
-          }
-        },
-        "params": {},
-        "serialized": {
-          "uri": "/blob-payload",
-          "body": "",
-          "headers": {},
-          "forbidHeaders": [
-            "Content-Type"
-          ],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "NoPayload",
-          "input": {
-            "shape": "NoPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/no-payload"
-          }
-        },
-        "params": {},
-        "serialized": {
-          "uri": "/no-payload",
-          "body": "",
-          "forbidHeaders": [
-            "Content-Type",
-            "Content-Length"
-          ],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "NoPayloadWithHeader",
-          "input": {
-            "shape": "NoPayloadRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/no-payload"
-          }
-        },
-        "params": {
-          "testId": "t-12345"
-        },
-        "serialized": {
-          "uri": "/no-payload",
-          "body": "",
-          "headers": {
-              "x-amz-test-id": "t-12345"
-          },
-          "forbidHeaders": [
-            "Content-Type",
-            "Content-Length"
-          ],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "NoPayloadGET",
-          "input": {
-            "shape": "NoPayloadRequest"
-          },
-          "http": {
-            "method": "GET",
-            "requestUri": "/no-payload"
-          }
-        },
-        "params": {},
-        "serialized": {
-          "uri": "/no-payload",
-          "body": "",
-          "forbidHeaders": [
-            "Content-Type",
-            "Content-Length"
-          ],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "NoPayloadWithHeaderGET",
-          "input": {
-            "shape": "NoPayloadRequest"
-          },
-          "http": {
-            "method": "GET",
-            "requestUri": "/no-payload"
-          }
-        },
-        "params": {
-          "testId": "t-12345"
-        },
-        "serialized": {
-          "uri": "/no-payload",
-          "body": "",
-          "headers": {
-              "x-amz-test-id": "t-12345"
-          },
-          "forbidHeaders": [
-            "Content-Type",
-            "Content-Length"
-          ],
-          "host": "rest-json-test.amazonaws.com"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List in header",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://rest-json-test.amazonaws.com",
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape",
-            "location": "header",
-            "locationName": "x-amz-list-param"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "EnumType"
-        }
-      },
-      "EnumType": {
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/example"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/2014-01-01/example",
-          "headers": {
-            "x-amz-list-param": "one,two,three"
-          }
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/example"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": []
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/2014-01-01/example",
-          "headers": {},
-          "forbidHeaders": ["x-amz-list-param"]
-        }
-      }
-    ]
-  }
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HostLabelInput": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonEndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EndpointWithHostLabelOperation",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HostLabelInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EndpointWithHostLabelOperation",
+                    "body": "{\"label\": \"bar\"}",
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for HostWithPathOperation operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonHostWithPath",
+                "given": {
+                    "name": "HostWithPathOperation",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HostWithPathOperation",
+                        "responseCode": 200
+                    }
+                },
+                "description": "Custom endpoints supplied by users can have paths",
+                "params": {},
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/custom/HostWithPathOperation",
+                    "body": "",
+                    "host": "example.com/custom"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com/custom"
+    },
+    {
+        "description": "Test cases for HttpChecksumRequired operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpChecksumRequiredInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpChecksumRequired",
+                "given": {
+                    "name": "HttpChecksumRequired",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpChecksumRequired",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpChecksumRequiredInputOutput"
+                    },
+                    "documentation": "<p>This example tests httpChecksumRequired trait</p>",
+                    "httpChecksumRequired": true
+                },
+                "description": "Adds Content-MD5 header",
+                "params": {
+                    "foo": "base64 encoded md5 checksum"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/HttpChecksumRequired",
+                    "body": "{\n    \"foo\":\"base64 encoded md5 checksum\"\n}\n",
+                    "headers": {
+                        "Content-MD5": "iB0/3YSo7maijL0IGOgA9g==",
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpEnumPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EnumPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "StringEnum"
+                    }
+                },
+                "payload": "payload"
+            },
+            "StringEnum": {
+                "type": "string",
+                "enum": [
+                    "enumvalue"
+                ]
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonEnumPayloadRequest",
+                "given": {
+                    "name": "HttpEnumPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EnumPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "EnumPayloadInput"
+                    }
+                },
+                "params": {
+                    "payload": "enumvalue"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EnumPayload",
+                    "body": "enumvalue",
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadTraits operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadTraitsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "blob": {
+                        "shape": "Blob"
+                    }
+                },
+                "payload": "blob"
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadTraitsWithBlob",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no JSON document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes a blob in the HTTP payload",
+                "params": {
+                    "foo": "Foo",
+                    "blob": "blobby blob blob"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/HttpPayloadTraits",
+                    "body": "blobby blob blob",
+                    "headers": {
+                        "Content-Type": "application/octet-stream",
+                        "X-Foo": "Foo"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpPayloadTraitsWithNoBlobBody",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no JSON document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes an empty blob in the HTTP payload",
+                "params": {
+                    "foo": "Foo"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/HttpPayloadTraits",
+                    "body": "",
+                    "headers": {
+                        "X-Foo": "Foo"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithStructure operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "NestedPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "NestedPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    },
+                    "name": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadWithStructure",
+                "given": {
+                    "name": "HttpPayloadWithStructure",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithStructure",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithStructureInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a structure in the payload.</p> <p>Note that serializing a structure changes the wrapper element name to match the targeted structure.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload",
+                "params": {
+                    "nested": {
+                        "greeting": "hello",
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithStructure",
+                    "body": "{\n    \"greeting\": \"hello\",\n    \"name\": \"Phreddy\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithUnion operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithUnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "UnionPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "UnionPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadWithUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a union in the payload.",
+                "params": {
+                    "nested": {
+                        "greeting": "hello"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithUnion",
+                    "body": "{\n    \"greeting\": \"hello\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpPayloadWithUnsetUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "No payload is sent if the union has no value.",
+                "params": {},
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithUnion",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPrefixHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPrefixHeadersInput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-foo"
+                    },
+                    "fooMap": {
+                        "shape": "StringMap",
+                        "location": "headers",
+                        "locationName": "x-foo-"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPrefixHeadersArePresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Adds headers by prefix",
+                "params": {
+                    "foo": "Foo",
+                    "fooMap": {
+                        "abc": "Abc value",
+                        "def": "Def value"
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo": "Foo",
+                        "x-foo-abc": "Abc value",
+                        "x-foo-def": "Def value"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonHttpPrefixHeadersAreNotPresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "No prefix headers are serialized because the value is not present",
+                "params": {
+                    "foo": "Foo",
+                    "fooMap": {}
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonHttpPrefixEmptyHeaders",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Serialize prefix headers were the value is present but empty",
+                "params": {
+                    "fooMap": {
+                        "abc": ""
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo-abc": ""
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithFloatLabels operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithFloatLabelsInput": {
+                "type": "structure",
+                "required": [
+                    "float",
+                    "double"
+                ],
+                "members": {
+                    "float": {
+                        "shape": "Float",
+                        "location": "uri",
+                        "locationName": "float"
+                    },
+                    "double": {
+                        "shape": "Double",
+                        "location": "uri",
+                        "locationName": "double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonSupportsNaNFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling NaN float label values.",
+                "params": {
+                    "float": "NaN",
+                    "double": "NaN"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/NaN/NaN",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling Infinity float label values.",
+                "params": {
+                    "float": "Infinity",
+                    "double": "Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/Infinity/Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling -Infinity float label values.",
+                "params": {
+                    "float": "-Infinity",
+                    "double": "-Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/-Infinity/-Infinity",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithGreedyLabelInPath operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithGreedyLabelInPathInput": {
+                "type": "structure",
+                "required": [
+                    "foo",
+                    "baz"
+                ],
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "foo"
+                    },
+                    "baz": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "baz"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpRequestWithGreedyLabelInPath",
+                "given": {
+                    "name": "HttpRequestWithGreedyLabelInPath",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithGreedyLabelInPathInput"
+                    }
+                },
+                "description": "Serializes greedy labels and normal labels",
+                "params": {
+                    "foo": "hello/escape",
+                    "baz": "there/guy"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithGreedyLabelInPath/foo/hello%2Fescape/baz/there/guy",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithLabels operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithLabelsInput": {
+                "type": "structure",
+                "required": [
+                    "string",
+                    "short",
+                    "integer",
+                    "long",
+                    "float",
+                    "double",
+                    "boolean",
+                    "timestamp"
+                ],
+                "members": {
+                    "string": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "string"
+                    },
+                    "short": {
+                        "shape": "Integer",
+                        "location": "uri",
+                        "locationName": "short"
+                    },
+                    "integer": {
+                        "shape": "Integer",
+                        "location": "uri",
+                        "locationName": "integer"
+                    },
+                    "long": {
+                        "shape": "Long",
+                        "location": "uri",
+                        "locationName": "long"
+                    },
+                    "float": {
+                        "shape": "Float",
+                        "location": "uri",
+                        "locationName": "float"
+                    },
+                    "double": {
+                        "shape": "Double",
+                        "location": "uri",
+                        "locationName": "double"
+                    },
+                    "boolean": {
+                        "shape": "Boolean",
+                        "documentation": "<p>Serialized in the path as true or false.</p>",
+                        "location": "uri",
+                        "locationName": "boolean"
+                    },
+                    "timestamp": {
+                        "shape": "Timestamp",
+                        "documentation": "<p>Note that this member has no format, so it's serialized as an RFC 3399 date-time.</p>",
+                        "location": "uri",
+                        "locationName": "timestamp"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonInputWithHeadersAndAllParams",
+                "given": {
+                    "name": "HttpRequestWithLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsInput"
+                    },
+                    "documentation": "<p>The example tests how requests are serialized when there's no input payload but there are HTTP labels.</p>"
+                },
+                "description": "Sends a GET request that uses URI label bindings",
+                "params": {
+                    "string": "string",
+                    "short": 1,
+                    "integer": 2,
+                    "long": 3,
+                    "float": 4.1,
+                    "double": 5.1,
+                    "boolean": true,
+                    "timestamp": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabels/string/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonHttpRequestLabelEscaping",
+                "given": {
+                    "name": "HttpRequestWithLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsInput"
+                    },
+                    "documentation": "<p>The example tests how requests are serialized when there's no input payload but there are HTTP labels.</p>"
+                },
+                "description": "Sends a GET request that uses URI label bindings",
+                "params": {
+                    "string": " %:/?#[]@!$&'()*+,;=😹",
+                    "short": 1,
+                    "integer": 2,
+                    "long": 3,
+                    "float": 4.1,
+                    "double": 5.1,
+                    "boolean": true,
+                    "timestamp": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabels/%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithLabelsAndTimestampFormat operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithLabelsAndTimestampFormatInput": {
+                "type": "structure",
+                "required": [
+                    "memberEpochSeconds",
+                    "memberHttpDate",
+                    "memberDateTime",
+                    "defaultFormat",
+                    "targetEpochSeconds",
+                    "targetHttpDate",
+                    "targetDateTime"
+                ],
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "uri",
+                        "locationName": "memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "uri",
+                        "locationName": "memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "uri",
+                        "locationName": "memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "uri",
+                        "locationName": "defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "uri",
+                        "locationName": "targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "uri",
+                        "locationName": "targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "uri",
+                        "locationName": "targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpRequestWithLabelsAndTimestampFormat",
+                "given": {
+                    "name": "HttpRequestWithLabelsAndTimestampFormat",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsAndTimestampFormatInput"
+                    },
+                    "documentation": "<p>The example tests how requests serialize different timestamp formats in the URI path.</p>"
+                },
+                "description": "Serializes different timestamp formats in URI labels",
+                "params": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabelsAndTimestampFormat/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z/2019-12-16T23%3A48%3A18Z/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithRegexLiteral operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithRegexLiteralInput": {
+                "type": "structure",
+                "required": [
+                    "str"
+                ],
+                "members": {
+                    "str": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "str"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonToleratesRegexCharsInSegments",
+                "given": {
+                    "name": "HttpRequestWithRegexLiteral",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ReDosLiteral/{str}/(a+)+",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithRegexLiteralInput"
+                    }
+                },
+                "description": "Path matching is not broken by regex expressions in literal segments",
+                "params": {
+                    "str": "abc"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ReDosLiteral/abc/(a+)+",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpStringPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "StringPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "String"
+                    }
+                },
+                "payload": "payload"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonStringPayloadRequest",
+                "given": {
+                    "name": "HttpStringPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "StringPayloadInput"
+                    }
+                },
+                "params": {
+                    "payload": "rawstring"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/StringPayload",
+                    "body": "rawstring",
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for InputAndOutputWithHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InputAndOutputWithHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "headerString": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-String"
+                    },
+                    "headerByte": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Byte"
+                    },
+                    "headerShort": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Short"
+                    },
+                    "headerInteger": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Integer"
+                    },
+                    "headerLong": {
+                        "shape": "Long",
+                        "location": "header",
+                        "locationName": "X-Long"
+                    },
+                    "headerFloat": {
+                        "shape": "Float",
+                        "location": "header",
+                        "locationName": "X-Float"
+                    },
+                    "headerDouble": {
+                        "shape": "Double",
+                        "location": "header",
+                        "locationName": "X-Double"
+                    },
+                    "headerTrueBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean1"
+                    },
+                    "headerFalseBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean2"
+                    },
+                    "headerStringList": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-StringList"
+                    },
+                    "headerStringSet": {
+                        "shape": "StringSet",
+                        "location": "header",
+                        "locationName": "X-StringSet"
+                    },
+                    "headerIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "header",
+                        "locationName": "X-IntegerList"
+                    },
+                    "headerBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "header",
+                        "locationName": "X-BooleanList"
+                    },
+                    "headerTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "header",
+                        "locationName": "X-TimestampList"
+                    },
+                    "headerEnum": {
+                        "shape": "FooEnum",
+                        "location": "header",
+                        "locationName": "X-Enum"
+                    },
+                    "headerEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "header",
+                        "locationName": "X-EnumList"
+                    },
+                    "headerIntegerEnum": {
+                        "shape": "IntegerEnum",
+                        "location": "header",
+                        "locationName": "X-IntegerEnum"
+                    },
+                    "headerIntegerEnumList": {
+                        "shape": "IntegerEnumList",
+                        "location": "header",
+                        "locationName": "X-IntegerEnumList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonInputAndOutputWithStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with string header bindings",
+                "params": {
+                    "headerString": "Hello",
+                    "headerStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "headerStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-String": "Hello",
+                        "X-StringList": "a, b, c",
+                        "X-StringSet": "a, b, c"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithQuotedStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with string list header bindings that require quoting",
+                "params": {
+                    "headerStringList": [
+                        "b,c",
+                        "\"def\"",
+                        "a"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-StringList": "\"b,c\", \"\\\"def\\\"\", a"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithNumericHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with numeric header bindings",
+                "params": {
+                    "headerByte": 1,
+                    "headerShort": 123,
+                    "headerInteger": 123,
+                    "headerLong": 123,
+                    "headerFloat": 1.1,
+                    "headerDouble": 1.1,
+                    "headerIntegerList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Byte": "1",
+                        "X-Double": "1.1",
+                        "X-Float": "1.1",
+                        "X-Integer": "123",
+                        "X-IntegerList": "1, 2, 3",
+                        "X-Long": "123",
+                        "X-Short": "123"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithBooleanHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with boolean header bindings",
+                "params": {
+                    "headerTrueBool": true,
+                    "headerFalseBool": false,
+                    "headerBooleanList": [
+                        true,
+                        false,
+                        true
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Boolean1": "true",
+                        "X-Boolean2": "false",
+                        "X-BooleanList": "true, false, true"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithTimestampHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with timestamp header bindings",
+                "params": {
+                    "headerTimestampList": [
+                        1576540098,
+                        1576540098
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with enum header bindings",
+                "params": {
+                    "headerEnum": "Foo",
+                    "headerEnumList": [
+                        "Foo",
+                        "Bar",
+                        "Baz"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Enum": "Foo",
+                        "X-EnumList": "Foo, Bar, Baz"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithIntEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with intEnum header bindings",
+                "params": {
+                    "headerIntegerEnum": 1,
+                    "headerIntegerEnumList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-IntegerEnum": "1",
+                        "X-IntegerEnumList": "1, 2, 3"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNaNFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling NaN float header values.",
+                "params": {
+                    "headerFloat": "NaN",
+                    "headerDouble": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "NaN",
+                        "X-Float": "NaN"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling Infinity float header values.",
+                "params": {
+                    "headerFloat": "Infinity",
+                    "headerDouble": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "Infinity",
+                        "X-Float": "Infinity"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling -Infinity float header values.",
+                "params": {
+                    "headerFloat": "-Infinity",
+                    "headerDouble": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "-Infinity",
+                        "X-Float": "-Infinity"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonBlobs operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonBlobsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonBlobs",
+                "given": {
+                    "name": "JsonBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonBlobs",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonBlobsInputOutput"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "params": {
+                    "data": "value"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonBlobs",
+                    "body": "{\n    \"data\": \"dmFsdWU=\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonEnums operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonEnums",
+                "given": {
+                    "name": "JsonEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonEnums",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonEnums",
+                    "body": "{\n    \"fooEnum1\": \"Foo\",\n    \"fooEnum2\": \"0\",\n    \"fooEnum3\": \"1\",\n    \"fooEnumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumSet\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumMap\": {\n        \"hi\": \"Foo\",\n        \"zero\": \"0\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonIntEnums operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonIntEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "integerEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "integerEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "integerEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonIntEnums",
+                "given": {
+                    "name": "JsonIntEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonIntEnums",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonIntEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes intEnums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes intEnums as integers",
+                "params": {
+                    "integerEnum1": 1,
+                    "integerEnum2": 2,
+                    "integerEnum3": 3,
+                    "integerEnumList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "integerEnumSet": [
+                        1,
+                        2
+                    ],
+                    "integerEnumMap": {
+                        "abc": 1,
+                        "def": 2
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonIntEnums",
+                    "body": "{\n    \"integerEnum1\": 1,\n    \"integerEnum2\": 2,\n    \"integerEnum3\": 3,\n    \"integerEnumList\": [\n        1,\n        2,\n        3\n    ],\n    \"integerEnumSet\": [\n        1,\n        2\n    ],\n    \"integerEnumMap\": {\n        \"abc\": 1,\n        \"def\": 2\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonLists operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonListsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonLists",
+                "given": {
+                    "name": "JsonLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonLists",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonListsInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal JSON lists.</li> <li>Normal JSON sets.</li> <li>JSON lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes JSON lists",
+                "params": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonLists",
+                    "body": "{\n    \"stringList\": [\n        \"foo\",\n        \"bar\"\n    ],\n    \"stringSet\": [\n        \"foo\",\n        \"bar\"\n    ],\n    \"integerList\": [\n        1,\n        2\n    ],\n    \"booleanList\": [\n        true,\n        false\n    ],\n    \"timestampList\": [\n        1398796238,\n        1398796238\n    ],\n    \"enumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"intEnumList\": [\n        1,\n        2\n    ],\n    \"nestedStringList\": [\n        [\n            \"foo\",\n            \"bar\"\n        ],\n        [\n            \"baz\",\n            \"qux\"\n        ]\n    ],\n    \"myStructureList\": [\n        {\n            \"value\": \"1\",\n            \"other\": \"2\"\n        },\n        {\n            \"value\": \"3\",\n            \"other\": \"4\"\n        }\n    ]\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonListsEmpty",
+                "given": {
+                    "name": "JsonLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonLists",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonListsInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal JSON lists.</li> <li>Normal JSON sets.</li> <li>JSON lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes empty JSON lists",
+                "params": {
+                    "stringList": []
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonLists",
+                    "body": "{\n    \"stringList\": []\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonMaps operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonMapsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "denseStructMap": {
+                        "shape": "DenseStructMap"
+                    },
+                    "denseNumberMap": {
+                        "shape": "DenseNumberMap"
+                    },
+                    "denseBooleanMap": {
+                        "shape": "DenseBooleanMap"
+                    },
+                    "denseStringMap": {
+                        "shape": "DenseStringMap"
+                    },
+                    "denseSetMap": {
+                        "shape": "DenseSetMap"
+                    }
+                }
+            },
+            "DenseStructMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "DenseNumberMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Integer"
+                }
+            },
+            "DenseBooleanMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Boolean"
+                }
+            },
+            "DenseStringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "DenseSetMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringSet"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonMaps",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Serializes JSON maps",
+                "params": {
+                    "denseStructMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonMaps",
+                    "body": "{\n    \"denseStructMap\": {\n        \"foo\": {\n            \"hi\": \"there\"\n        },\n        \"baz\": {\n            \"hi\": \"bye\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializesZeroValuesInMaps",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Ensure that 0 and false are sent over the wire in all maps and lists",
+                "params": {
+                    "denseNumberMap": {
+                        "x": 0
+                    },
+                    "denseBooleanMap": {
+                        "x": false
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonMaps",
+                    "body": "{\n    \"denseNumberMap\": {\n        \"x\": 0\n    },\n    \"denseBooleanMap\": {\n        \"x\": false\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializesDenseSetMap",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "A request that contains a dense map of sets.",
+                "params": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonMaps",
+                    "body": "{\n    \"denseSetMap\": {\n        \"x\": [],\n        \"y\": [\"a\", \"b\"]\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonTimestamps operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonTimestampsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonTimestamps",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "params": {
+                    "normal": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"normal\": 1398796238\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "params": {
+                    "dateTime": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"dateTime\": \"2014-04-29T18:30:38Z\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "params": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"dateTimeOnTarget\": \"2014-04-29T18:30:38Z\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "params": {
+                    "epochSeconds": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"epochSeconds\": 1398796238\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "params": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"epochSecondsOnTarget\": 1398796238\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "params": {
+                    "httpDate": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"httpDate\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "params": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/JsonTimestamps",
+                    "body": "{\n    \"httpDateOnTarget\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "UnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                },
+                "documentation": "<p>A shared structure that contains a single union member.</p>"
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    },
+                    "renamedStructureValue": {
+                        "shape": "RenamedGreeting"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "RenamedGreeting": {
+                "type": "structure",
+                "members": {
+                    "salutation": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonSerializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a string union value",
+                "params": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a boolean union value",
+                "params": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a number union value",
+                "params": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a blob union value",
+                "params": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a timestamp union value",
+                "params": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an enum union value",
+                "params": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a list union value",
+                "params": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a map union value",
+                "params": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure union value",
+                "params": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSerializeRenamedStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a renamed structure union value",
+                "params": {
+                    "contents": {
+                        "renamedStructureValue": {
+                            "salutation": "hello!"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/JsonUnions",
+                    "body": "{\n    \"contents\": {\n        \"renamedStructureValue\": {\n            \"salutation\": \"hello!\"\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for MediaTypeHeader operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "MediaTypeHeaderInput": {
+                "type": "structure",
+                "members": {
+                    "json": {
+                        "shape": "JsonValue",
+                        "jsonvalue": true,
+                        "location": "header",
+                        "locationName": "X-Json"
+                    }
+                }
+            },
+            "JsonValue": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "MediaTypeHeaderInputBase64",
+                "given": {
+                    "name": "MediaTypeHeader",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/MediaTypeHeader",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "MediaTypeHeaderInput"
+                    },
+                    "documentation": "<p>This example ensures that mediaType strings are base64 encoded in headers.</p>"
+                },
+                "description": "Headers that target strings with a mediaType are base64 encoded",
+                "params": {
+                    "json": "true"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/MediaTypeHeader",
+                    "body": "",
+                    "headers": {
+                        "X-Json": "dHJ1ZQ=="
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonNoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndNoOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload. When clients do not need to\nserialize any data in the payload, they should omit a payload\naltogether.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NoInputAndNoOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonNoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndOutputOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload. When clients do not need to\nserialize any data in the payload, they should omit a payload\naltogether.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NoInputAndOutputOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NullAndEmptyHeadersClient operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NullAndEmptyHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-A"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-B"
+                    },
+                    "c": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-C"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonNullAndEmptyHeaders",
+                "given": {
+                    "name": "NullAndEmptyHeadersClient",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/NullAndEmptyHeadersClient",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "NullAndEmptyHeadersIO"
+                    },
+                    "documentation": "<p>Null headers are not sent over the wire, empty headers are serialized to &quot;&quot;</p>"
+                },
+                "description": "Do not send null values, but do send empty strings and empty lists over the wire in headers",
+                "params": {
+                    "a": null,
+                    "b": "",
+                    "c": []
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/NullAndEmptyHeadersClient",
+                    "body": "",
+                    "headers": {
+                        "X-B": "",
+                        "X-C": ""
+                    },
+                    "forbidHeaders": [
+                        "X-A"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OmitsNullSerializesEmptyString operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "OmitsNullSerializesEmptyStringInput": {
+                "type": "structure",
+                "members": {
+                    "nullValue": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "Null"
+                    },
+                    "emptyString": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "Empty"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonOmitsNullQuery",
+                "given": {
+                    "name": "OmitsNullSerializesEmptyString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/OmitsNullSerializesEmptyString",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "OmitsNullSerializesEmptyStringInput"
+                    },
+                    "documentation": "<p>Omits null, but serializes empty string value.</p>"
+                },
+                "description": "Omits null query values",
+                "params": {
+                    "nullValue": null
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/OmitsNullSerializesEmptyString",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonSerializesEmptyQueryValue",
+                "given": {
+                    "name": "OmitsNullSerializesEmptyString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/OmitsNullSerializesEmptyString",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "OmitsNullSerializesEmptyStringInput"
+                    },
+                    "documentation": "<p>Omits null, but serializes empty string value.</p>"
+                },
+                "description": "Serializes empty query strings",
+                "params": {
+                    "emptyString": ""
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/OmitsNullSerializesEmptyString?Empty=",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OmitsSerializingEmptyLists operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "OmitsSerializingEmptyListsInput": {
+                "type": "structure",
+                "members": {
+                    "queryStringList": {
+                        "shape": "StringList",
+                        "location": "querystring",
+                        "locationName": "StringList"
+                    },
+                    "queryIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "querystring",
+                        "locationName": "IntegerList"
+                    },
+                    "queryDoubleList": {
+                        "shape": "DoubleList",
+                        "location": "querystring",
+                        "locationName": "DoubleList"
+                    },
+                    "queryBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "querystring",
+                        "locationName": "BooleanList"
+                    },
+                    "queryTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "querystring",
+                        "locationName": "TimestampList"
+                    },
+                    "queryEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "querystring",
+                        "locationName": "EnumList"
+                    },
+                    "queryIntegerEnumList": {
+                        "shape": "IntegerEnumList",
+                        "location": "querystring",
+                        "locationName": "IntegerEnumList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "DoubleList": {
+                "type": "list",
+                "member": {
+                    "shape": "Double"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonOmitsEmptyListQueryValues",
+                "given": {
+                    "name": "OmitsSerializingEmptyLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/OmitsSerializingEmptyLists",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "OmitsSerializingEmptyListsInput"
+                    },
+                    "documentation": "<p>Omits serializing empty lists. Because empty strings are serilized as <code>Foo=</code>, empty lists cannot also be serialized as <code>Foo=</code> and instead must be omitted.</p>"
+                },
+                "description": "Supports omitting empty lists.",
+                "params": {
+                    "queryStringList": [],
+                    "queryIntegerList": [],
+                    "queryDoubleList": [],
+                    "queryBooleanList": [],
+                    "queryTimestampList": [],
+                    "queryEnumList": [],
+                    "queryIntegerEnumList": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/OmitsSerializingEmptyLists",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PostUnionWithJsonName operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "PostUnionWithJsonNameInput": {
+                "type": "structure",
+                "members": {
+                    "value": {
+                        "shape": "UnionWithJsonName"
+                    }
+                }
+            },
+            "UnionWithJsonName": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "locationName": "FOO"
+                    },
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "baz": {
+                        "shape": "String",
+                        "locationName": "_baz"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "PostUnionWithJsonNameRequest1",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PostUnionWithJsonNameInput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "params": {
+                    "value": {
+                        "foo": "hi"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/PostUnionWithJsonName",
+                    "body": "{\n    \"value\": {\n        \"FOO\": \"hi\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "PostUnionWithJsonNameRequest2",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PostUnionWithJsonNameInput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "params": {
+                    "value": {
+                        "baz": "hi"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/PostUnionWithJsonName",
+                    "body": "{\n    \"value\": {\n        \"_baz\": \"hi\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "PostUnionWithJsonNameRequest3",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PostUnionWithJsonNameInput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "params": {
+                    "value": {
+                        "bar": "hi"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/PostUnionWithJsonName",
+                    "body": "{\n    \"value\": {\n        \"bar\": \"hi\"\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "Content-Encoding"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_restJson1",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/requestcompression/putcontentwithencoding",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/requestcompression/putcontentwithencoding",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendedGzipAfterProvidedEncoding_restJson1",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/requestcompression/putcontentwithencoding",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is in the Content-Encoding header before the\nrequest compression encoding from the HTTP binding.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/requestcompression/putcontentwithencoding",
+                    "headers": {
+                        "Content-Encoding": "custom, gzip"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryIdempotencyTokenAutoFill operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryIdempotencyTokenAutoFillInput": {
+                "type": "structure",
+                "members": {
+                    "token": {
+                        "shape": "String",
+                        "idempotencyToken": true,
+                        "location": "querystring",
+                        "locationName": "token"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonQueryIdempotencyTokenAutoFill",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/QueryIdempotencyTokenAutoFill",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Automatically adds idempotency token when not set",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonQueryIdempotencyTokenAutoFillIsSet",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/QueryIdempotencyTokenAutoFill",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Uses the given idempotency token as-is",
+                "params": {
+                    "token": "00000000-0000-4000-8000-000000000000"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryParamsAsStringListMap operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryParamsAsStringListMapInput": {
+                "type": "structure",
+                "members": {
+                    "qux": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "corge"
+                    },
+                    "foo": {
+                        "shape": "StringListMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringListMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringList"
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonQueryParamsStringListMap",
+                "given": {
+                    "name": "QueryParamsAsStringListMap",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringListMap",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryParamsAsStringListMapInput"
+                    }
+                },
+                "description": "Serialize query params from map of list strings",
+                "params": {
+                    "qux": "named",
+                    "foo": {
+                        "baz": [
+                            "bar",
+                            "qux"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/StringListMap?corge=named&baz=bar&baz=qux",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryPrecedence operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryPrecedenceInput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "bar"
+                    },
+                    "baz": {
+                        "shape": "StringMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonQueryPrecedence",
+                "given": {
+                    "name": "QueryPrecedence",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/Precedence",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryPrecedenceInput"
+                    }
+                },
+                "description": "Prefer named query parameters when serializing",
+                "params": {
+                    "foo": "named",
+                    "baz": {
+                        "bar": "fromMap",
+                        "qux": "alsoFromMap"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/Precedence?bar=named&qux=alsoFromMap",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "RecursiveShapesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonRecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/RecursiveShapes",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "RecursiveShapesInputOutput"
+                    },
+                    "documentation": "<p>Recursive shapes</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes recursive structures",
+                "params": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/RecursiveShapes",
+                    "body": "{\n    \"nested\": {\n        \"foo\": \"Foo1\",\n        \"nested\": {\n            \"bar\": \"Bar1\",\n            \"recursiveMember\": {\n                \"foo\": \"Foo2\",\n                \"nested\": {\n                    \"bar\": \"Bar2\"\n                }\n            }\n        }\n    }\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonSimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "foo": "Foo",
+                    "stringValue": "string",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"trueBooleanValue\": true,\n    \"falseBooleanValue\": false,\n    \"byteValue\": 1,\n    \"shortValue\": 2,\n    \"integerValue\": 3,\n    \"longValue\": 4,\n    \"floatValue\": 5.5,\n    \"DoubleDribble\": 6.5\n}",
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonDoesntSerializeNullStructureValues",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Rest Json should not serialize null structure values",
+                "params": {
+                    "stringValue": null
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"DoubleDribble\": \"NaN\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"DoubleDribble\": \"Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"DoubleDribble\": \"-Infinity\"\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestBodyStructure operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TestBodyStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "testId": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-amz-test-id"
+                    },
+                    "testConfig": {
+                        "shape": "TestConfig"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "TestConfig": {
+                "type": "structure",
+                "members": {
+                    "timeout": {
+                        "shape": "Integer"
+                    }
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonTestBodyStructure",
+                "given": {
+                    "name": "TestBodyStructure",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/body",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestBodyStructureInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a structure in the HTTP body.</p> <p>It should ensure Content-Type: application/json is used in all requests and that an &quot;empty&quot; body is an empty JSON document ({}).</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure",
+                "params": {
+                    "testConfig": {
+                        "timeout": 10
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/body",
+                    "body": "{\"testConfig\":\n    {\"timeout\": 10}\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpWithEmptyBody",
+                "given": {
+                    "name": "TestBodyStructure",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/body",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestBodyStructureInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a structure in the HTTP body.</p> <p>It should ensure Content-Type: application/json is used in all requests and that an &quot;empty&quot; body is an empty JSON document ({}).</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an empty structure in the body",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/body",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestGetNoInputNoPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonHttpGetWithNoInput",
+                "given": {
+                    "name": "TestGetNoInputNoPayload",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/no_input_no_payload",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This example GET operation has no input and serializes a request without a HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.</p>"
+                },
+                "description": "Serializes a GET request for an operation with no input, and therefore no modeled body",
+                "params": {},
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/no_input_no_payload",
+                    "body": "",
+                    "forbidHeaders": [
+                        "Content-Type",
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestGetNoPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TestNoPayloadInputOutput": {
+                "type": "structure",
+                "members": {
+                    "testId": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Amz-Test-Id"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpGetWithNoModeledBody",
+                "given": {
+                    "name": "TestGetNoPayload",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/no_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestNoPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example GET operation serializes a request without a modeled HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.</p>"
+                },
+                "description": "Serializes a GET request with no modeled body",
+                "params": {},
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/no_payload",
+                    "body": "",
+                    "forbidHeaders": [
+                        "Content-Length",
+                        "Content-Type"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpGetWithHeaderMemberNoModeledBody",
+                "given": {
+                    "name": "TestGetNoPayload",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/no_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestNoPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example GET operation serializes a request without a modeled HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Length, Content-Type) to operations that semantically cannot produce an HTTP body.</p>"
+                },
+                "description": "Serializes a GET request with header member but no modeled body",
+                "params": {
+                    "testId": "t-12345"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/no_payload",
+                    "body": "",
+                    "headers": {
+                        "X-Amz-Test-Id": "t-12345"
+                    },
+                    "forbidHeaders": [
+                        "Content-Length",
+                        "Content-Type"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestPayloadBlob operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TestPayloadBlobInputOutput": {
+                "type": "structure",
+                "members": {
+                    "contentType": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "Content-Type"
+                    },
+                    "data": {
+                        "shape": "Blob"
+                    }
+                },
+                "payload": "data"
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpWithEmptyBlobPayload",
+                "given": {
+                    "name": "TestPayloadBlob",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/blob_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestPayloadBlobInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a payload targeting a blob.</p> <p>The Blob shape is not structured content and we cannot make assumptions about what data will be sent. This test ensures only a generic &quot;Content-Type: application/octet-stream&quot; header is used, and that we are not treating an empty body as an empty JSON document.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload targeting an empty blob",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/blob_payload",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestJsonTestPayloadBlob",
+                "given": {
+                    "name": "TestPayloadBlob",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/blob_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestPayloadBlobInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a payload targeting a blob.</p> <p>The Blob shape is not structured content and we cannot make assumptions about what data will be sent. This test ensures only a generic &quot;Content-Type: application/octet-stream&quot; header is used, and that we are not treating an empty body as an empty JSON document.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload targeting a blob",
+                "params": {
+                    "contentType": "image/jpg",
+                    "data": "1234"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/blob_payload",
+                    "body": "1234",
+                    "headers": {
+                        "Content-Type": "image/jpg"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestPayloadStructure operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TestPayloadStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "testId": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-amz-test-id"
+                    },
+                    "payloadConfig": {
+                        "shape": "PayloadConfig"
+                    }
+                },
+                "payload": "payloadConfig"
+            },
+            "String": {
+                "type": "string"
+            },
+            "PayloadConfig": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Integer"
+                    }
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpWithEmptyStructurePayload",
+                "given": {
+                    "name": "TestPayloadStructure",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestPayloadStructureInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a payload targeting a structure.</p> <p>This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload targeting an empty structure",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/payload",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonTestPayloadStructure",
+                "given": {
+                    "name": "TestPayloadStructure",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestPayloadStructureInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a payload targeting a structure.</p> <p>This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload targeting a structure",
+                "params": {
+                    "payloadConfig": {
+                        "data": 25
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/payload",
+                    "body": "{\"data\": 25\n}",
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpWithHeadersButNoPayload",
+                "given": {
+                    "name": "TestPayloadStructure",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestPayloadStructureInputOutput"
+                    },
+                    "documentation": "<p>This example operation serializes a payload targeting a structure.</p> <p>This enforces the same requirements as TestBodyStructure but with the body specified by the @httpPayload trait.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes an request with header members but no payload",
+                "params": {
+                    "testId": "t-12345"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/payload",
+                    "body": "{}",
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Amz-Test-Id": "t-12345"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestPostNoInputNoPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonHttpPostWithNoInput",
+                "given": {
+                    "name": "TestPostNoInputNoPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/no_input_no_payload",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This example POST operation has no input and serializes a request without a HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled input.</p>"
+                },
+                "description": "Serializes a POST request for an operation with no input, and therefore no modeled body",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/no_input_no_payload",
+                    "body": "",
+                    "forbidHeaders": [
+                        "Content-Type"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TestPostNoPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TestNoPayloadInputOutput": {
+                "type": "structure",
+                "members": {
+                    "testId": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Amz-Test-Id"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPostWithNoModeledBody",
+                "given": {
+                    "name": "TestPostNoPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/no_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestNoPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example POST operation serializes a request without a modeled HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled payload.</p>"
+                },
+                "description": "Serializes a POST request with no modeled body",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/no_payload",
+                    "body": "",
+                    "forbidHeaders": [
+                        "Content-Type"
+                    ]
+                }
+            },
+            {
+                "id": "RestJsonHttpWithPostHeaderMemberNoModeledBody",
+                "given": {
+                    "name": "TestPostNoPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/no_payload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TestNoPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example POST operation serializes a request without a modeled HTTP body.</p> <p>These tests are to ensure we do not attach a body or related headers (Content-Type) to a POST operation with no modeled payload.</p>"
+                },
+                "description": "Serializes a POST request with header member but no modeled body",
+                "params": {
+                    "testId": "t-12345"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/no_payload",
+                    "body": "",
+                    "headers": {
+                        "X-Amz-Test-Id": "t-12345"
+                    },
+                    "forbidHeaders": [
+                        "Content-Type"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TimestampFormatHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TimestampFormatHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "header",
+                        "locationName": "X-memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "header",
+                        "locationName": "X-memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "header",
+                        "locationName": "X-memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "header",
+                        "locationName": "X-defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "header",
+                        "locationName": "X-targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "header",
+                        "locationName": "X-targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "header",
+                        "locationName": "X-targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonTimestampFormatHeaders",
+                "given": {
+                    "name": "TimestampFormatHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/TimestampFormatHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TimestampFormatHeadersIO"
+                    },
+                    "documentation": "<p>This example tests how timestamp request and response headers are serialized.</p>"
+                },
+                "description": "Tests how timestamp request headers are serialized",
+                "params": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/TimestampFormatHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-memberDateTime": "2019-12-16T23:48:18Z",
+                        "X-memberEpochSeconds": "1576540098",
+                        "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-targetDateTime": "2019-12-16T23:48:18Z",
+                        "X-targetEpochSeconds": "1576540098",
+                        "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for UnitInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonUnitInputAndOutput",
+                "given": {
+                    "name": "UnitInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/UnitInputAndOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This test is similar to NoInputAndNoOutput, but uses explicit Unit types.</p>"
+                },
+                "description": "A unit type input serializes no payload. When clients do not\nneed to serialize any data in the payload, they should omit\na payload altogether.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/UnitInputAndOutput",
+                    "body": ""
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/rest-xml.json 2.31.35-1/tests/unit/botocore/protocols/input/rest-xml.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/rest-xml.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/rest-xml.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,1976 +1,5771 @@
 [
-  {
-    "description": "Basic XML serialization",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          },
-          "Description": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Name": "foo",
-          "Description": "bar"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><Name>foo</Name><Description>bar</Description></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "PUT",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Name": "foo",
-          "Description": "bar"
-        },
-        "serialized": {
-          "method": "PUT",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><Name>foo</Name><Description>bar</Description></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "name": "OperationName"
-        },
-        "params": {},
-        "serialized": {
-          "method": "GET",
-          "body": "",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize other scalar types",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "First": {
-            "shape": "BoolType"
-          },
-          "Second": {
-            "shape": "BoolType"
-          },
-          "Third": {
-            "shape": "FloatType"
-          },
-          "Fourth": {
-            "shape": "IntegerType"
-          }
-        }
-      },
-      "BoolType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "IntegerType": {
-        "type": "integer"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "First": true,
-          "Second": false,
-          "Third": 1.2,
-          "Fourth": 3
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><First>true</First><Second>false</Second><Third>1.2</Third><Fourth>3</Fourth></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Nested structures",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "SubStructure": {
-            "shape": "SubStructure"
-          },
-          "Description": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "SubStructure": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          },
-          "Bar": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "SubStructure": {
-            "Foo": "a",
-            "Bar": "b"
-          },
-          "Description": "baz"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure><Foo>a</Foo><Bar>b</Bar></SubStructure><Description>baz</Description></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "SubStructure": {
-            "Foo": "a",
-            "Bar": null
-          },
-          "Description": "baz"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure><Foo>a</Foo></SubStructure><Description>baz</Description></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Nested structures",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "SubStructure": {
-            "shape": "SubStructure"
-          },
-          "Description": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "SubStructure": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          },
-          "Bar": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "SubStructure": {},
-          "Description": "baz"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure /><Description>baz</Description></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Non flattened lists",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><ListParam><member>one</member><member>two</member><member>three</member></ListParam></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Non flattened lists with locationName",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape",
-            "locationName": "AlternateName"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "NotMember"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><AlternateName><NotMember>one</NotMember><NotMember>two</NotMember><NotMember>three</NotMember></AlternateName></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened lists",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><ListParam>one</ListParam><ListParam>two</ListParam><ListParam>three</ListParam></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened lists with locationName",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape",
-            "locationName": "item"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><item>one</item><item>two</item><item>three</item></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "List of structures",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape",
-            "locationName": "item"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "SingleFieldStruct"
-        },
-        "flattened": true
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "SingleFieldStruct": {
-        "type": "structure",
-        "members": {
-          "Element": {
-            "shape": "StringType",
-            "locationName": "value"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            {
-              "Element": "one"
-            },
-            {
-              "Element": "two"
-            },
-            {
-              "Element": "three"
-            }
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><item><value>one</value></item><item><value>two</value></item><item><value>three</value></item></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob shapes",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "StructureParam": {
-            "shape": "StructureShape"
-          }
-        }
-      },
-      "StructureShape": {
-        "type": "structure",
-        "members": {
-          "b": {
-            "shape": "BShape"
-          }
-        }
-      },
-      "BShape": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "StructureParam": {
-            "b": "foo"
-          }
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><StructureParam><b>Zm9v</b></StructureParam></OperationRequest>",
-          "uri": "/2014-01-01/hostedzone",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp shapes",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeArgInHeader": {
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timearg"
-          },
-          "TimeArgInQuery": {
-            "shape": "TimestampType",
-            "location": "querystring",
-            "locationName": "TimeQuery"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeCustomInHeader": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timecustom-header"
-          },
-          "TimeCustomInQuery": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "querystring",
-            "locationName": "TimeCustomQuery"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatRfcType"
-          },
-          "TimeFormatInHeader": {
-            "shape": "TimestampFormatUnixType",
-            "location": "header",
-            "locationName": "x-amz-timeformat-header"
-          },
-          "TimeFormatInQuery": {
-            "shape": "TimestampFormatUnixType",
-            "location": "querystring",
-            "locationName": "TimeFormatQuery"
-          }
-        }
-      },
-      "TimestampFormatRfcType": {
-        "timestampFormat": "rfc822",
-        "type": "timestamp"
-      },
-      "TimestampFormatUnixType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/hostedzone"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "TimestampStructure",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "TimeArg": 1422172800,
-          "TimeArgInQuery": 1422172800,
-          "TimeArgInHeader": 1422172800,
-          "TimeCustom": 1422172800,
-          "TimeCustomInQuery": 1422172800,
-          "TimeCustomInHeader": 1422172800,
-          "TimeFormat": 1422172800,
-          "TimeFormatInQuery": 1422172800,
-          "TimeFormatInHeader": 1422172800
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<TimestampStructure xmlns=\"https://foo/\"><TimeArg>2015-01-25T08:00:00Z</TimeArg><TimeCustom>Sun, 25 Jan 2015 08:00:00 GMT</TimeCustom><TimeFormat>Sun, 25 Jan 2015 08:00:00 GMT</TimeFormat></TimestampStructure>",
-          "uri": "/2014-01-01/hostedzone?TimeQuery=2015-01-25T08%3A00%3A00Z&TimeCustomQuery=1422172800&TimeFormatQuery=1422172800",
-          "headers": {
-            "x-amz-timearg": "Sun, 25 Jan 2015 08:00:00 GMT",
-            "x-amz-timecustom-header": "1422172800",
-            "x-amz-timeformat-header": "1422172800"
-          }
-        }
-      }
-    ]
-  },
-  {
-    "description": "Header maps",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        }
-      },
-      "FooShape": {
-        "type": "map",
-        "location": "headers",
-        "locationName": "x-foo-",
-        "key": {
-          "shape": "FooKeyValue"
-        },
-        "value": {
-          "shape": "FooKeyValue"
-        }
-      },
-      "FooKeyValue": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": {
-            "a": "b",
-            "c": "d"
-          }
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/",
-          "headers": {
-            "x-foo-a": "b",
-            "x-foo-c": "d"
-          }
-        }
-      }
-    ]
-  },
-  {
-    "description": "Querystring list of strings",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Items": {
-            "shape": "StringList",
-            "location": "querystring",
-            "locationName": "item"
-          }
-        }
-      },
-      "StringList": {
-        "type": "list",
-        "member": {
-          "shape": "String"
-        }
-      },
-      "String": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Items": ["value1", "value2"]
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?item=value1&item=value2",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "String to string maps in querystring",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri"
-          },
-          "QueryDoc": {
-            "shape": "MapStringStringType",
-            "location": "querystring"
-          }
-        }
-      },
-      "MapStringStringType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "foo",
-          "QueryDoc": {
-            "bar": "baz",
-            "fizz": "buzz"
-          }
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/foo?bar=baz&fizz=buzz",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "String to string list maps in querystring",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "PipelineId": {
-            "shape": "StringType",
-            "location": "uri"
-          },
-          "QueryDoc": {
-            "shape": "MapStringStringListType",
-            "location": "querystring"
-          }
-        }
-      },
-      "MapStringStringListType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringListType"
-        }
-      },
-      "StringListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "PipelineId": "id",
-          "QueryDoc": {
-            "foo": ["bar", "baz"],
-            "fizz": ["buzz", "pop"]
-          }
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/2014-01-01/jobsByPipeline/id?foo=bar&foo=baz&fizz=buzz&fizz=pop",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "Boolean in querystring",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "BoolQuery": {
-            "shape": "BoolType",
-            "location": "querystring",
-            "locationName": "bool-query"
-          }
-        }
-      },
-      "BoolType": {
-        "type": "boolean"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BoolQuery": true
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?bool-query=true",
-          "headers": {}
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "BoolQuery": false
-        },
-        "serialized": {
-          "body": "",
-          "uri": "/path?bool-query=false",
-          "headers": {}
-        }
-      }
-    ]
-  },
-  {
-    "description": "String payload",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        },
-        "payload": "foo"
-      },
-      "FooShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": "bar"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "bar",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob payload",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        },
-        "payload": "foo"
-      },
-      "FooShape": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": "bar"
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "bar",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Structure payload",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "FooShape"
-          }
-        },
-        "payload": "foo"
-      },
-      "FooShape": {
-        "locationName": "foo",
-        "type": "structure",
-        "members": {
-          "baz": {
-            "shape": "BazShape"
-          }
-        }
-      },
-      "BazShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": {
-            "baz": "bar"
-          }
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<foo><baz>bar</baz></foo>",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {},
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": {}
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<foo />",
-          "uri": "/"
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "foo": null
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "XML Attribute",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Grant": {
-            "shape": "Grant"
-          }
-        },
-        "payload": "Grant"
-      },
-      "Grant": {
-        "type": "structure",
-        "locationName": "Grant",
-        "members": {
-          "Grantee": {
-            "shape": "Grantee"
-          }
-        }
-      },
-      "Grantee": {
-        "type": "structure",
-        "members": {
-          "Type": {
-            "shape": "Type",
-            "locationName": "xsi:type",
-            "xmlAttribute": true
-          },
-          "EmailAddress": {
-            "shape": "StringType"
-          }
-        },
-        "xmlNamespace": {
-          "prefix": "xsi",
-          "uri":"http://www.w3.org/2001/XMLSchema-instance"
-        }
-      },
-      "Type": {
-        "type": "string"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Grant": {
-            "Grantee": {
-              "EmailAddress": "foo@example.com",
-              "Type": "CanonicalUser"
-            }
-          }
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "<Grant><Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"><EmailAddress>foo@example.com</EmailAddress></Grantee></Grant>",
-          "uri": "/"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Greedy keys",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Bucket": {
-            "shape": "BucketShape",
-            "location": "uri"
-          },
-          "Key": {
-            "shape": "KeyShape",
-            "location": "uri"
-          }
-        }
-      },
-      "BucketShape": {
-        "type": "string"
-      },
-      "KeyShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "GET",
-            "requestUri": "/{Bucket}/{Key+}"
-          },
-          "input": {
-            "shape": "InputShape"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Key": "testing /123",
-          "Bucket": "my/bucket"
-        },
-        "serialized": {
-          "method": "GET",
-          "body": "",
-          "uri": "/my%2Fbucket/testing%20/123"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Omits null query params, but serializes empty strings",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "location":"querystring",
-            "locationName":"param-name",
-            "shape": "Foo"
-          }
-        }
-      },
-      "Foo": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "OperationName",
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "input": { "shape": "InputShape" }
-        },
-        "params": { "foo": null },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/path"
-        }
-      },
-      {
-        "given": {
-          "name": "OperationName",
-          "http": {
-            "method": "POST",
-            "requestUri": "/path?abc=mno"
-          },
-          "input": { "shape": "InputShape" }
-        },
-        "params": { "foo": "" },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/path?abc=mno&param-name="
-        }
-      }
-    ]
-  },
-  {
-    "description": "Recursive shapes",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          }
-        }
-      },
-      "RecursiveStructType": {
-        "type": "structure",
-        "members": {
-          "NoRecurse": {
-            "shape": "StringType"
-          },
-          "RecursiveStruct": {
-            "shape": "RecursiveStructType"
-          },
-          "RecursiveList": {
-            "shape": "RecursiveListType"
-          },
-          "RecursiveMap": {
-            "shape": "RecursiveMapType"
-          }
-        }
-      },
-      "RecursiveListType": {
-        "type": "list",
-        "member": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "RecursiveMapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "RecursiveStructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "NoRecurse": "foo"
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></OperationRequest>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "NoRecurse": "foo"
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></RecursiveStruct></OperationRequest>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveStruct": {
-              "RecursiveStruct": {
-                "RecursiveStruct": {
-                  "NoRecurse": "foo"
-                }
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveStruct><RecursiveStruct><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></RecursiveStruct></RecursiveStruct></RecursiveStruct></OperationRequest>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "NoRecurse": "bar"
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveList><member><NoRecurse>foo</NoRecurse></member><member><NoRecurse>bar</NoRecurse></member></RecursiveList></RecursiveStruct></OperationRequest>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveList": [
-              {
-                "NoRecurse": "foo"
-              },
-              {
-                "RecursiveStruct": {
-                  "NoRecurse": "bar"
-                }
-              }
-            ]
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveList><member><NoRecurse>foo</NoRecurse></member><member><RecursiveStruct><NoRecurse>bar</NoRecurse></RecursiveStruct></member></RecursiveList></RecursiveStruct></OperationRequest>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "RecursiveStruct": {
-            "RecursiveMap": {
-              "foo": {
-                "NoRecurse": "foo"
-              },
-              "bar": {
-                "NoRecurse": "bar"
-              }
-            }
-          }
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveMap><entry><key>foo</key><value><NoRecurse>foo</NoRecurse></value></entry><entry><key>bar</key><value><NoRecurse>bar</NoRecurse></value></entry></RecursiveMap></RecursiveStruct></OperationRequest>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Idempotency token auto fill",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Token": {
-            "shape": "StringType",
-            "idempotencyToken": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Token": "abc123"
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "<InputShape><Token>abc123</Token></InputShape>"
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": "<InputShape><Token>00000000-0000-4000-8000-000000000000</Token></InputShape>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "JSON value trait",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "Attr": {
-            "shape": "StringType",
-            "jsonvalue": true,
-            "location": "header",
-            "locationName": "X-Amz-Foo"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "Attr": {"Foo":"Bar"}
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
-          "body": ""
-        }
-      },
-      {
-        "given": {
-          "input": {
-            "shape": "InputShape"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "name": "OperationName"
-        },
-        "params": {
-        },
-        "serialized": {
-          "uri": "/path",
-          "headers": {},
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Endpoint host trait",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "clientEndpoint": "https://service.region.amazonaws.com",
-    "shapes": {
-      "StaticInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "MemberRefInputShape": {
-        "type": "structure",
-        "members": {
-          "Name": {
-            "shape": "StringType",
-            "hostLabel": true
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "name": "StaticOp",
-          "input": {
-            "shape": "StaticInputShape",
-            "locationName": "StaticOpRequest"
-          },
-          "http": {
-            "method": "POST",
-            "requestUri": "/path"
-          },
-          "endpoint":{
-              "hostPrefix": "data-"
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<StaticOpRequest><Name>myname</Name></StaticOpRequest>",
-          "host": "data-service.region.amazonaws.com"
-        }
-      },
-      {
-        "given": {
-          "name": "MemberRefOp",
-          "input": {
-            "shape": "MemberRefInputShape",
-            "locationName": "MemberRefOpRequest"
-          },
-          "http": {
-            "method": "GET",
-            "requestUri": "/path"
-          },
-          "endpoint":{
-              "hostPrefix": "foo-{Name}."
-          }
-        },
-        "params": {
-          "Name": "myname"
-        },
-        "serialized": {
-          "uri": "/path",
-          "body": "<MemberRefOpRequest><Name>myname</Name></MemberRefOpRequest>",
-          "host": "foo-myname.service.region.amazonaws.com"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List in header",
-    "metadata": {
-      "protocol": "rest-xml",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "InputShape": {
-        "type": "structure",
-        "members": {
-          "ListParam": {
-            "shape": "ListShape",
-            "location": "header",
-            "locationName": "x-amz-list-param"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "EnumType"
-        }
-      },
-      "EnumType": {
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/example"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": [
-            "one",
-            "two",
-            "three"
-          ]
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/2014-01-01/example",
-          "headers": {
-            "x-amz-list-param": "one,two,three"
-          }
-        }
-      },
-      {
-        "given": {
-          "http": {
-            "method": "POST",
-            "requestUri": "/2014-01-01/example"
-          },
-          "input": {
-            "shape": "InputShape",
-            "locationName": "OperationRequest",
-            "xmlNamespace": {"uri": "https://foo/"}
-          },
-          "name": "OperationName"
-        },
-        "params": {
-          "ListParam": []
-        },
-        "serialized": {
-          "method": "POST",
-          "body": "",
-          "uri": "/2014-01-01/example",
-          "headers": {},
-          "forbidHeaders": ["x-amz-list-param"]
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for AllQueryStringTypes operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "AllQueryStringTypesInput": {
+                "type": "structure",
+                "members": {
+                    "queryString": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "String"
+                    },
+                    "queryStringList": {
+                        "shape": "StringList",
+                        "location": "querystring",
+                        "locationName": "StringList"
+                    },
+                    "queryStringSet": {
+                        "shape": "StringSet",
+                        "location": "querystring",
+                        "locationName": "StringSet"
+                    },
+                    "queryByte": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Byte"
+                    },
+                    "queryShort": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Short"
+                    },
+                    "queryInteger": {
+                        "shape": "Integer",
+                        "location": "querystring",
+                        "locationName": "Integer"
+                    },
+                    "queryIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "querystring",
+                        "locationName": "IntegerList"
+                    },
+                    "queryIntegerSet": {
+                        "shape": "IntegerSet",
+                        "location": "querystring",
+                        "locationName": "IntegerSet"
+                    },
+                    "queryLong": {
+                        "shape": "Long",
+                        "location": "querystring",
+                        "locationName": "Long"
+                    },
+                    "queryFloat": {
+                        "shape": "Float",
+                        "location": "querystring",
+                        "locationName": "Float"
+                    },
+                    "queryDouble": {
+                        "shape": "Double",
+                        "location": "querystring",
+                        "locationName": "Double"
+                    },
+                    "queryDoubleList": {
+                        "shape": "DoubleList",
+                        "location": "querystring",
+                        "locationName": "DoubleList"
+                    },
+                    "queryBoolean": {
+                        "shape": "Boolean",
+                        "location": "querystring",
+                        "locationName": "Boolean"
+                    },
+                    "queryBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "querystring",
+                        "locationName": "BooleanList"
+                    },
+                    "queryTimestamp": {
+                        "shape": "Timestamp",
+                        "location": "querystring",
+                        "locationName": "Timestamp"
+                    },
+                    "queryTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "querystring",
+                        "locationName": "TimestampList"
+                    },
+                    "queryEnum": {
+                        "shape": "FooEnum",
+                        "location": "querystring",
+                        "locationName": "Enum"
+                    },
+                    "queryEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "querystring",
+                        "locationName": "EnumList"
+                    },
+                    "queryIntegerEnum": {
+                        "shape": "IntegerEnum",
+                        "location": "querystring",
+                        "locationName": "IntegerEnum"
+                    },
+                    "queryIntegerEnumList": {
+                        "shape": "IntegerEnumList",
+                        "location": "querystring",
+                        "locationName": "IntegerEnumList"
+                    },
+                    "queryParamsMapOfStrings": {
+                        "shape": "StringMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "IntegerSet": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "DoubleList": {
+                "type": "list",
+                "member": {
+                    "shape": "Double"
+                }
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AllQueryStringTypes",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Serializes query string parameters with all supported types",
+                "params": {
+                    "queryString": "Hello there",
+                    "queryStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "queryStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "queryByte": 1,
+                    "queryShort": 2,
+                    "queryInteger": 3,
+                    "queryIntegerList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryIntegerSet": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryLong": 4,
+                    "queryFloat": 1.1,
+                    "queryDouble": 1.1,
+                    "queryDoubleList": [
+                        1.1,
+                        2.1,
+                        3.1
+                    ],
+                    "queryBoolean": true,
+                    "queryBooleanList": [
+                        true,
+                        false,
+                        true
+                    ],
+                    "queryTimestamp": 1,
+                    "queryTimestampList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "queryEnum": "Foo",
+                    "queryEnumList": [
+                        "Foo",
+                        "Baz",
+                        "Bar"
+                    ],
+                    "queryIntegerEnum": 1,
+                    "queryIntegerEnumList": [
+                        1,
+                        2
+                    ]
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?String=Hello%20there&StringList=a&StringList=b&StringList=c&StringSet=a&StringSet=b&StringSet=c&Byte=1&Short=2&Integer=3&IntegerList=1&IntegerList=2&IntegerList=3&IntegerSet=1&IntegerSet=2&IntegerSet=3&Long=4&Float=1.1&Double=1.1&DoubleList=1.1&DoubleList=2.1&DoubleList=3.1&Boolean=true&BooleanList=true&BooleanList=false&BooleanList=true&Timestamp=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A01Z&TimestampList=1970-01-01T00%3A00%3A02Z&TimestampList=1970-01-01T00%3A00%3A03Z&Enum=Foo&EnumList=Foo&EnumList=Baz&EnumList=Bar&IntegerEnum=1&IntegerEnumList=1&IntegerEnumList=2",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlQueryStringMap",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Handles query string maps",
+                "params": {
+                    "queryParamsMapOfStrings": {
+                        "QueryParamsStringKeyA": "Foo",
+                        "QueryParamsStringKeyB": "Bar"
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?QueryParamsStringKeyA=Foo&QueryParamsStringKeyB=Bar",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlQueryStringEscaping",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Handles escaping all required characters in the query string.",
+                "params": {
+                    "queryString": " %:/?#[]@!$&'()*+,;=😹"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?String=%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsNaNFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling NaN float query values.",
+                "params": {
+                    "queryFloat": "NaN",
+                    "queryDouble": "NaN"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=NaN&Double=NaN",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling Infinity float query values.",
+                "params": {
+                    "queryFloat": "Infinity",
+                    "queryDouble": "Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=Infinity&Double=Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Supports handling -Infinity float query values.",
+                "params": {
+                    "queryFloat": "-Infinity",
+                    "queryDouble": "-Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Float=-Infinity&Double=-Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlZeroAndFalseQueryValues",
+                "given": {
+                    "name": "AllQueryStringTypes",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/AllQueryStringTypesInput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "AllQueryStringTypesInput"
+                    },
+                    "documentation": "<p>This example uses all query string types.</p>"
+                },
+                "description": "Query values of 0 and false are serialized",
+                "params": {
+                    "queryInteger": 0,
+                    "queryBoolean": false
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/AllQueryStringTypesInput?Integer=0&Boolean=false",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for BodyWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "BodyWithXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName"
+                    }
+                },
+                "locationName": "Ahoy"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "BodyWithXmlName",
+                "given": {
+                    "name": "BodyWithXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/BodyWithXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "BodyWithXmlNameInputOutput",
+                        "locationName": "BodyWithXmlNameRequest"
+                    },
+                    "documentation": "<p>The following example serializes a body that uses an XML name, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload using a wrapper name based on the xmlName",
+                "params": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/BodyWithXmlName",
+                    "body": "<Ahoy><nested><name>Phreddy</name></nested></Ahoy>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for ConstantAndVariableQueryString operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ConstantAndVariableQueryStringInput": {
+                "type": "structure",
+                "members": {
+                    "baz": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "baz"
+                    },
+                    "maybeSet": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "maybeSet"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "ConstantAndVariableQueryStringMissingOneValue",
+                "given": {
+                    "name": "ConstantAndVariableQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantAndVariableQueryString?foo=bar",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantAndVariableQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).</p>"
+                },
+                "description": "Mixes constant and variable query string parameters",
+                "params": {
+                    "baz": "bam"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam",
+                    "body": ""
+                }
+            },
+            {
+                "id": "ConstantAndVariableQueryStringAllValues",
+                "given": {
+                    "name": "ConstantAndVariableQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantAndVariableQueryString?foo=bar",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantAndVariableQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses fixed query string params and variable query string params. The fixed query string parameters and variable parameters must both be serialized (implementations may need to merge them together).</p>"
+                },
+                "description": "Mixes constant and variable query string parameters",
+                "params": {
+                    "baz": "bam",
+                    "maybeSet": "yes"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantAndVariableQueryString?foo=bar&baz=bam&maybeSet=yes",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for ConstantQueryString operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ConstantQueryStringInput": {
+                "type": "structure",
+                "required": [
+                    "hello"
+                ],
+                "members": {
+                    "hello": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "hello"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "ConstantQueryString",
+                "given": {
+                    "name": "ConstantQueryString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/ConstantQueryString/{hello}?foo=bar&hello",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "ConstantQueryStringInput"
+                    },
+                    "documentation": "<p>This example uses a constant query string parameters and a label. This simply tests that labels and query string parameters are compatible. The fixed query string parameter named &quot;hello&quot; should in no way conflict with the label, <code>{hello}</code>.</p>"
+                },
+                "description": "Includes constant query string parameters",
+                "params": {
+                    "hello": "hi"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/ConstantQueryString/hi?foo=bar&hello",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputInput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "EmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EmptyInputAndEmptyOutput",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "EmptyInputAndEmptyOutputInput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty input serializes no payload",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EmptyInputAndEmptyOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EndpointOperation operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestXmlEndpointTrait",
+                "given": {
+                    "name": "EndpointOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EndpointOperation",
+                        "responseCode": 200
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EndpointOperation",
+                    "body": "",
+                    "host": "foo.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelHeaderOperation operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HostLabelHeaderInput": {
+                "type": "structure",
+                "required": [
+                    "accountId"
+                ],
+                "members": {
+                    "accountId": {
+                        "shape": "String",
+                        "hostLabel": true,
+                        "location": "header",
+                        "locationName": "X-Amz-Account-Id"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlEndpointTraitWithHostLabelAndHttpBinding",
+                "given": {
+                    "name": "EndpointWithHostLabelHeaderOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EndpointWithHostLabelHeaderOperation",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HostLabelHeaderInput"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "{accountId}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input. The label must also\nbe serialized in into any other location it is bound to, such\nas the body or in this case an http header.",
+                "params": {
+                    "accountId": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EndpointWithHostLabelHeaderOperation",
+                    "body": "",
+                    "headers": {
+                        "X-Amz-Account-Id": "bar"
+                    },
+                    "host": "bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for EndpointWithHostLabelOperation operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EndpointWithHostLabelOperationRequest": {
+                "type": "structure",
+                "required": [
+                    "label"
+                ],
+                "members": {
+                    "label": {
+                        "shape": "String",
+                        "hostLabel": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlEndpointTraitWithHostLabel",
+                "given": {
+                    "name": "EndpointWithHostLabelOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EndpointWithHostLabelOperation",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "EndpointWithHostLabelOperationRequest",
+                        "locationName": "EndpointWithHostLabelOperationRequest"
+                    },
+                    "endpoint": {
+                        "hostPrefix": "foo.{label}."
+                    }
+                },
+                "description": "Operations can prepend to the given host if they define the\nendpoint trait, and can use the host label trait to define\nfurther customization based on user input.",
+                "params": {
+                    "label": "bar"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EndpointWithHostLabelOperation",
+                    "body": "<EndpointWithHostLabelOperationRequest>\n    <label>bar</label>\n</EndpointWithHostLabelOperationRequest>\n",
+                    "host": "foo.bar.example.com"
+                }
+            }
+        ],
+        "clientEndpoint": "https://example.com"
+    },
+    {
+        "description": "Test cases for FlattenedXmlMap operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FlattenedXmlMapRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FooEnumMap",
+                        "flattened": true
+                    }
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "FlattenedXmlMap",
+                "given": {
+                    "name": "FlattenedXmlMap",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FlattenedXmlMap",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "FlattenedXmlMapRequest",
+                        "locationName": "FlattenedXmlMapRequest"
+                    },
+                    "documentation": "<p>Flattened maps</p>"
+                },
+                "description": "Serializes flattened XML maps in requests",
+                "params": {
+                    "myMap": {
+                        "foo": "Foo",
+                        "baz": "Baz"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/FlattenedXmlMap",
+                    "body": "<FlattenedXmlMapRequest>\n    <myMap>\n        <key>foo</key>\n        <value>Foo</value>\n    </myMap>\n    <myMap>\n        <key>baz</key>\n        <value>Baz</value>\n    </myMap>\n</FlattenedXmlMapRequest>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMapWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FlattenedXmlMapWithXmlNameRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FlattenedXmlMapWithXmlNameInputOutputMap",
+                        "flattened": true,
+                        "locationName": "KVP"
+                    }
+                }
+            },
+            "FlattenedXmlMapWithXmlNameInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "FlattenedXmlMapWithXmlName",
+                "given": {
+                    "name": "FlattenedXmlMapWithXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FlattenedXmlMapWithXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "FlattenedXmlMapWithXmlNameRequest",
+                        "locationName": "FlattenedXmlMapWithXmlNameRequest"
+                    },
+                    "documentation": "<p>Flattened maps with @xmlName</p>"
+                },
+                "description": "Serializes flattened XML maps in requests that have xmlName on members",
+                "params": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/FlattenedXmlMapWithXmlName",
+                    "body": "<FlattenedXmlMapWithXmlNameRequest>\n    <KVP>\n        <K>a</K>\n        <V>A</V>\n    </KVP>\n    <KVP>\n        <K>b</K>\n        <V>B</V>\n    </KVP>\n</FlattenedXmlMapWithXmlNameRequest>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpEnumPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EnumPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "StringEnum"
+                    }
+                },
+                "payload": "payload"
+            },
+            "StringEnum": {
+                "type": "string",
+                "enum": [
+                    "enumvalue"
+                ]
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlEnumPayloadRequest",
+                "given": {
+                    "name": "HttpEnumPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EnumPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "EnumPayloadInput"
+                    }
+                },
+                "params": {
+                    "payload": "enumvalue"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/EnumPayload",
+                    "body": "enumvalue",
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadTraits operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadTraitsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "blob": {
+                        "shape": "Blob"
+                    }
+                },
+                "payload": "blob"
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadTraitsWithBlob",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no XML document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes a blob in the HTTP payload",
+                "params": {
+                    "foo": "Foo",
+                    "blob": "blobby blob blob"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/HttpPayloadTraits",
+                    "body": "blobby blob blob",
+                    "headers": {
+                        "X-Foo": "Foo"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "HttpPayloadTraitsWithNoBlobBody",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no XML document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes an empty blob in the HTTP payload",
+                "params": {
+                    "foo": "Foo"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/HttpPayloadTraits",
+                    "body": "",
+                    "headers": {
+                        "X-Foo": "Foo"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithMemberXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithMemberXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName",
+                        "locationName": "Hola"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithMemberXmlName",
+                "given": {
+                    "name": "HttpPayloadWithMemberXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithMemberXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithMemberXmlNameInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML name on the member, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper name based on member xmlName",
+                "params": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithMemberXmlName",
+                    "body": "<Hola><name>Phreddy</name></Hola>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithStructure operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "NestedPayload",
+                        "locationName": "NestedPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "NestedPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    },
+                    "name": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithStructure",
+                "given": {
+                    "name": "HttpPayloadWithStructure",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithStructure",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithStructureInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a structure in the payload.</p> <p>Note that serializing a structure changes the wrapper element name to match the targeted structure.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload",
+                "params": {
+                    "nested": {
+                        "greeting": "hello",
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithStructure",
+                    "body": "<NestedPayload>\n    <greeting>hello</greeting>\n    <name>Phreddy</name>\n</NestedPayload>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithUnion operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithUnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "UnionPayload",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "UnionPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlHttpPayloadWithUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a union in the payload.",
+                "params": {
+                    "nested": {
+                        "greeting": "hello"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithUnion",
+                    "body": "<UnionPayload>\n    <greeting>hello</greeting>\n</UnionPayload>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RestXmlHttpPayloadWithUnsetUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "No payload is sent if the union has no value.",
+                "params": {},
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithUnion",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlName",
+                "given": {
+                    "name": "HttpPayloadWithXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithXmlNameInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML name, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper name based on xmlName",
+                "params": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithXmlName",
+                    "body": "<Hello><name>Phreddy</name></Hello>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNamespaceInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlNamespace",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlNamespace": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlNamespace",
+                "given": {
+                    "name": "HttpPayloadWithXmlNamespace",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlNamespace",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithXmlNamespaceInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML namespace.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper with an XML namespace",
+                "params": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithXmlNamespace",
+                    "body": "<PayloadWithXmlNamespace xmlns=\"http://foo.com\">\n    <name>Phreddy</name>\n</PayloadWithXmlNamespace>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlNamespaceAndPrefix operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNamespaceAndPrefixInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlNamespaceAndPrefix",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlNamespaceAndPrefix": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "xmlNamespace": {
+                    "prefix": "baz",
+                    "uri": "http://foo.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlNamespaceAndPrefix",
+                "given": {
+                    "name": "HttpPayloadWithXmlNamespaceAndPrefix",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlNamespaceAndPrefix",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPayloadWithXmlNamespaceAndPrefixInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML namespace.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper with an XML namespace",
+                "params": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/HttpPayloadWithXmlNamespaceAndPrefix",
+                    "body": "<PayloadWithXmlNamespaceAndPrefix xmlns:baz=\"http://foo.com\">\n    <name>Phreddy</name>\n</PayloadWithXmlNamespaceAndPrefix>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPrefixHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPrefixHeadersInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-foo"
+                    },
+                    "fooMap": {
+                        "shape": "FooPrefixHeaders",
+                        "location": "headers",
+                        "locationName": "x-foo-"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "FooPrefixHeaders": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPrefixHeadersArePresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInputOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Adds headers by prefix",
+                "params": {
+                    "foo": "Foo",
+                    "fooMap": {
+                        "abc": "Abc value",
+                        "def": "Def value"
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo": "Foo",
+                        "x-foo-abc": "Abc value",
+                        "x-foo-def": "Def value"
+                    }
+                }
+            },
+            {
+                "id": "HttpPrefixHeadersAreNotPresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInputOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "No prefix headers are serialized because the value is not present",
+                "params": {
+                    "foo": "Foo",
+                    "fooMap": {}
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "HttpPrefixEmptyHeaders",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpPrefixHeadersInputOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Serialize prefix headers were the value is present but empty",
+                "params": {
+                    "fooMap": {
+                        "abc": ""
+                    }
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpPrefixHeaders",
+                    "body": "",
+                    "headers": {
+                        "x-foo-abc": ""
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithFloatLabels operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithFloatLabelsInput": {
+                "type": "structure",
+                "required": [
+                    "float",
+                    "double"
+                ],
+                "members": {
+                    "float": {
+                        "shape": "Float",
+                        "location": "uri",
+                        "locationName": "float"
+                    },
+                    "double": {
+                        "shape": "Double",
+                        "location": "uri",
+                        "locationName": "double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlSupportsNaNFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling NaN float label values.",
+                "params": {
+                    "float": "NaN",
+                    "double": "NaN"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/NaN/NaN",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling Infinity float label values.",
+                "params": {
+                    "float": "Infinity",
+                    "double": "Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/Infinity/Infinity",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatLabels",
+                "given": {
+                    "name": "HttpRequestWithFloatLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/FloatHttpLabels/{float}/{double}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithFloatLabelsInput"
+                    }
+                },
+                "description": "Supports handling -Infinity float label values.",
+                "params": {
+                    "float": "-Infinity",
+                    "double": "-Infinity"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/FloatHttpLabels/-Infinity/-Infinity",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithGreedyLabelInPath operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithGreedyLabelInPathInput": {
+                "type": "structure",
+                "required": [
+                    "foo",
+                    "baz"
+                ],
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "foo"
+                    },
+                    "baz": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "baz"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpRequestWithGreedyLabelInPath",
+                "given": {
+                    "name": "HttpRequestWithGreedyLabelInPath",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithGreedyLabelInPath/foo/{foo}/baz/{baz+}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithGreedyLabelInPathInput"
+                    }
+                },
+                "description": "Serializes greedy labels and normal labels",
+                "params": {
+                    "foo": "hello",
+                    "baz": "there/guy"
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithGreedyLabelInPath/foo/hello/baz/there/guy",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithLabels operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithLabelsInput": {
+                "type": "structure",
+                "required": [
+                    "string",
+                    "short",
+                    "integer",
+                    "long",
+                    "float",
+                    "double",
+                    "boolean",
+                    "timestamp"
+                ],
+                "members": {
+                    "string": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "string"
+                    },
+                    "short": {
+                        "shape": "Integer",
+                        "location": "uri",
+                        "locationName": "short"
+                    },
+                    "integer": {
+                        "shape": "Integer",
+                        "location": "uri",
+                        "locationName": "integer"
+                    },
+                    "long": {
+                        "shape": "Long",
+                        "location": "uri",
+                        "locationName": "long"
+                    },
+                    "float": {
+                        "shape": "Float",
+                        "location": "uri",
+                        "locationName": "float"
+                    },
+                    "double": {
+                        "shape": "Double",
+                        "location": "uri",
+                        "locationName": "double"
+                    },
+                    "boolean": {
+                        "shape": "Boolean",
+                        "documentation": "<p>Serialized in the path as true or false.</p>",
+                        "location": "uri",
+                        "locationName": "boolean"
+                    },
+                    "timestamp": {
+                        "shape": "Timestamp",
+                        "documentation": "<p>Note that this member has no format, so it's serialized as an RFC 3399 date-time.</p>",
+                        "location": "uri",
+                        "locationName": "timestamp"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "InputWithHeadersAndAllParams",
+                "given": {
+                    "name": "HttpRequestWithLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsInput"
+                    },
+                    "documentation": "<p>The example tests how requests are serialized when there's no input payload but there are HTTP labels.</p>"
+                },
+                "description": "Sends a GET request that uses URI label bindings",
+                "params": {
+                    "string": "string",
+                    "short": 1,
+                    "integer": 2,
+                    "long": 3,
+                    "float": 4.1,
+                    "double": 5.1,
+                    "boolean": true,
+                    "timestamp": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabels/string/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            },
+            {
+                "id": "HttpRequestLabelEscaping",
+                "given": {
+                    "name": "HttpRequestWithLabels",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabels/{string}/{short}/{integer}/{long}/{float}/{double}/{boolean}/{timestamp}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsInput"
+                    },
+                    "documentation": "<p>The example tests how requests are serialized when there's no input payload but there are HTTP labels.</p>"
+                },
+                "description": "Sends a GET request that uses URI label bindings",
+                "params": {
+                    "string": " %:/?#[]@!$&'()*+,;=😹",
+                    "short": 1,
+                    "integer": 2,
+                    "long": 3,
+                    "float": 4.1,
+                    "double": 5.1,
+                    "boolean": true,
+                    "timestamp": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabels/%20%25%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%F0%9F%98%B9/1/2/3/4.1/5.1/true/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpRequestWithLabelsAndTimestampFormat operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpRequestWithLabelsAndTimestampFormatInput": {
+                "type": "structure",
+                "required": [
+                    "memberEpochSeconds",
+                    "memberHttpDate",
+                    "memberDateTime",
+                    "defaultFormat",
+                    "targetEpochSeconds",
+                    "targetHttpDate",
+                    "targetDateTime"
+                ],
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "uri",
+                        "locationName": "memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "uri",
+                        "locationName": "memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "uri",
+                        "locationName": "memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "uri",
+                        "locationName": "defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "uri",
+                        "locationName": "targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "uri",
+                        "locationName": "targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "uri",
+                        "locationName": "targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpRequestWithLabelsAndTimestampFormat",
+                "given": {
+                    "name": "HttpRequestWithLabelsAndTimestampFormat",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpRequestWithLabelsAndTimestampFormat/{memberEpochSeconds}/{memberHttpDate}/{memberDateTime}/{defaultFormat}/{targetEpochSeconds}/{targetHttpDate}/{targetDateTime}",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "HttpRequestWithLabelsAndTimestampFormatInput"
+                    },
+                    "documentation": "<p>The example tests how requests serialize different timestamp formats in the URI path.</p>"
+                },
+                "description": "Serializes different timestamp formats in URI labels",
+                "params": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/HttpRequestWithLabelsAndTimestampFormat/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z/2019-12-16T23%3A48%3A18Z/1576540098/Mon%2C%2016%20Dec%202019%2023%3A48%3A18%20GMT/2019-12-16T23%3A48%3A18Z",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpStringPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "StringPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "String"
+                    }
+                },
+                "payload": "payload"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlStringPayloadRequest",
+                "given": {
+                    "name": "HttpStringPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "StringPayloadInput"
+                    }
+                },
+                "params": {
+                    "payload": "rawstring"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/StringPayload",
+                    "body": "rawstring",
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for InputAndOutputWithHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InputAndOutputWithHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "headerString": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-String"
+                    },
+                    "headerByte": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Byte"
+                    },
+                    "headerShort": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Short"
+                    },
+                    "headerInteger": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Integer"
+                    },
+                    "headerLong": {
+                        "shape": "Long",
+                        "location": "header",
+                        "locationName": "X-Long"
+                    },
+                    "headerFloat": {
+                        "shape": "Float",
+                        "location": "header",
+                        "locationName": "X-Float"
+                    },
+                    "headerDouble": {
+                        "shape": "Double",
+                        "location": "header",
+                        "locationName": "X-Double"
+                    },
+                    "headerTrueBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean1"
+                    },
+                    "headerFalseBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean2"
+                    },
+                    "headerStringList": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-StringList"
+                    },
+                    "headerStringSet": {
+                        "shape": "StringSet",
+                        "location": "header",
+                        "locationName": "X-StringSet"
+                    },
+                    "headerIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "header",
+                        "locationName": "X-IntegerList"
+                    },
+                    "headerBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "header",
+                        "locationName": "X-BooleanList"
+                    },
+                    "headerTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "header",
+                        "locationName": "X-TimestampList"
+                    },
+                    "headerEnum": {
+                        "shape": "FooEnum",
+                        "location": "header",
+                        "locationName": "X-Enum"
+                    },
+                    "headerEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "header",
+                        "locationName": "X-EnumList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "InputAndOutputWithStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with string header bindings",
+                "params": {
+                    "headerString": "Hello",
+                    "headerStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "headerStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-String": "Hello",
+                        "X-StringList": "a, b, c",
+                        "X-StringSet": "a, b, c"
+                    }
+                }
+            },
+            {
+                "id": "InputAndOutputWithNumericHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with numeric header bindings",
+                "params": {
+                    "headerByte": 1,
+                    "headerShort": 123,
+                    "headerInteger": 123,
+                    "headerLong": 123,
+                    "headerFloat": 1.1,
+                    "headerDouble": 1.1,
+                    "headerIntegerList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Byte": "1",
+                        "X-Double": "1.1",
+                        "X-Float": "1.1",
+                        "X-Integer": "123",
+                        "X-IntegerList": "1, 2, 3",
+                        "X-Long": "123",
+                        "X-Short": "123"
+                    }
+                }
+            },
+            {
+                "id": "InputAndOutputWithBooleanHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with boolean header bindings",
+                "params": {
+                    "headerTrueBool": true,
+                    "headerFalseBool": false,
+                    "headerBooleanList": [
+                        true,
+                        false,
+                        true
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Boolean1": "true",
+                        "X-Boolean2": "false",
+                        "X-BooleanList": "true, false, true"
+                    }
+                }
+            },
+            {
+                "id": "InputAndOutputWithTimestampHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with timestamp header bindings",
+                "params": {
+                    "headerTimestampList": [
+                        1576540098,
+                        1576540098
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            },
+            {
+                "id": "InputAndOutputWithEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests requests with enum header bindings",
+                "params": {
+                    "headerEnum": "Foo",
+                    "headerEnumList": [
+                        "Foo",
+                        "Bar",
+                        "Baz"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Enum": "Foo",
+                        "X-EnumList": "Foo, Bar, Baz"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsNaNFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling NaN float header values.",
+                "params": {
+                    "headerFloat": "NaN",
+                    "headerDouble": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "NaN",
+                        "X-Float": "NaN"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling Infinity float header values.",
+                "params": {
+                    "headerFloat": "Infinity",
+                    "headerDouble": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "Infinity",
+                        "X-Float": "Infinity"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatHeaderInputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling -Infinity float header values.",
+                "params": {
+                    "headerFloat": "-Infinity",
+                    "headerDouble": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/InputAndOutputWithHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-Double": "-Infinity",
+                        "X-Float": "-Infinity"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NestedXmlMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NestedXmlMapsRequest": {
+                "type": "structure",
+                "members": {
+                    "nestedMap": {
+                        "shape": "NestedMap"
+                    },
+                    "flatNestedMap": {
+                        "shape": "NestedMap",
+                        "flattened": true
+                    }
+                }
+            },
+            "NestedMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnumMap"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "NestedXmlMapRequest",
+                "given": {
+                    "name": "NestedXmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "NestedXmlMapsRequest",
+                        "locationName": "NestedXmlMapsRequest"
+                    }
+                },
+                "description": "Tests requests with nested maps.",
+                "params": {
+                    "nestedMap": {
+                        "foo": {
+                            "bar": "Bar"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NestedXmlMaps",
+                    "body": "<NestedXmlMapsRequest>\n    <nestedMap>\n        <entry>\n            <key>foo</key>\n            <value>\n                <entry>\n                    <key>bar</key>\n                    <value>Bar</value>\n                </entry>\n            </value>\n        </entry>\n    </nestedMap>\n</NestedXmlMapsRequest>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "FlatNestedXmlMapRequest",
+                "given": {
+                    "name": "NestedXmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "NestedXmlMapsRequest",
+                        "locationName": "NestedXmlMapsRequest"
+                    }
+                },
+                "description": "Tests requests with nested flat maps. Since maps can only be\nflattened when they're structure members, only the outer map is flat.",
+                "params": {
+                    "flatNestedMap": {
+                        "foo": {
+                            "bar": "Bar"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NestedXmlMaps",
+                    "body": "<NestedXmlMapsRequest>\n    <flatNestedMap>\n        <key>foo</key>\n        <value>\n            <entry>\n                <key>bar</key>\n                <value>Bar</value>\n            </entry>\n        </value>\n    </flatNestedMap>\n</NestedXmlMapsRequest>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NestedXmlMapWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NestedXmlMapWithXmlNameRequest": {
+                "type": "structure",
+                "members": {
+                    "nestedXmlMapWithXmlNameMap": {
+                        "shape": "NestedXmlMapWithXmlNameMap"
+                    }
+                }
+            },
+            "NestedXmlMapWithXmlNameMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "OuterKey"
+                },
+                "value": {
+                    "shape": "NestedXmlMapWithXmlNameInnerMap"
+                }
+            },
+            "NestedXmlMapWithXmlNameInnerMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "InnerKey"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "InnerValue"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "NestedXmlMapWithXmlNameSerializes",
+                "given": {
+                    "name": "NestedXmlMapWithXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMapWithXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "NestedXmlMapWithXmlNameRequest",
+                        "locationName": "NestedXmlMapWithXmlNameRequest"
+                    },
+                    "documentation": "<p>Nested Xml Maps with key/values with @xmlName</p>"
+                },
+                "description": "Serializes nested XML Maps in requests that have xmlName on members",
+                "params": {
+                    "nestedXmlMapWithXmlNameMap": {
+                        "foo": {
+                            "bar": "Baz",
+                            "fizz": "Buzz"
+                        },
+                        "qux": {
+                            "foobar": "Bar",
+                            "fizzbuzz": "Buzz"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NestedXmlMapWithXmlName",
+                    "body": "    <NestedXmlMapWithXmlNameRequest>\n        <nestedXmlMapWithXmlNameMap>\n            <entry>\n                <OuterKey>foo</OuterKey>\n                <value>\n                    <entry>\n                        <InnerKey>bar</InnerKey>\n                        <InnerValue>Baz</InnerValue>\n                    </entry>\n                    <entry>\n                        <InnerKey>fizz</InnerKey>\n                        <InnerValue>Buzz</InnerValue>\n                    </entry>\n                </value>\n            </entry>\n            <entry>\n                <OuterKey>qux</OuterKey>\n                <value>\n                    <entry>\n                        <InnerKey>foobar</InnerKey>\n                        <InnerValue>Bar</InnerValue>\n                    </entry>\n                    <entry>\n                        <InnerKey>fizzbuzz</InnerKey>\n                        <InnerValue>Buzz</InnerValue>\n                    </entry>\n                </value>\n            </entry>\n        </nestedXmlMapWithXmlNameMap>\n    </NestedXmlMapWithXmlNameRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "NoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndNoOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NoInputAndNoOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "NoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndOutputOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No input serializes no payload",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/NoInputAndOutputOutput",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NullAndEmptyHeadersClient operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NullAndEmptyHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-A"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-B"
+                    },
+                    "c": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-C"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "NullAndEmptyHeaders",
+                "given": {
+                    "name": "NullAndEmptyHeadersClient",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/NullAndEmptyHeadersClient",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "NullAndEmptyHeadersIO"
+                    },
+                    "documentation": "<p>Null headers are not sent over the wire, empty headers are serialized to &quot;&quot;</p>"
+                },
+                "description": "Do not send null values, but do send empty strings and empty lists over the wire in headers",
+                "params": {
+                    "a": null,
+                    "b": "",
+                    "c": []
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/NullAndEmptyHeadersClient",
+                    "body": "",
+                    "headers": {
+                        "X-B": "",
+                        "X-C": ""
+                    },
+                    "forbidHeaders": [
+                        "X-A"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OmitsNullSerializesEmptyString operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "OmitsNullSerializesEmptyStringInput": {
+                "type": "structure",
+                "members": {
+                    "nullValue": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "Null"
+                    },
+                    "emptyString": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "Empty"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlOmitsNullQuery",
+                "given": {
+                    "name": "OmitsNullSerializesEmptyString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/OmitsNullSerializesEmptyString",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "OmitsNullSerializesEmptyStringInput"
+                    },
+                    "documentation": "<p>Omits null, but serializes empty string value.</p>"
+                },
+                "description": "Omits null query values",
+                "params": {
+                    "nullValue": null
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/OmitsNullSerializesEmptyString",
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSerializesEmptyString",
+                "given": {
+                    "name": "OmitsNullSerializesEmptyString",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/OmitsNullSerializesEmptyString",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "OmitsNullSerializesEmptyStringInput"
+                    },
+                    "documentation": "<p>Omits null, but serializes empty string value.</p>"
+                },
+                "description": "Serializes empty query strings",
+                "params": {
+                    "emptyString": ""
+                },
+                "serialized": {
+                    "method": "GET",
+                    "uri": "/OmitsNullSerializesEmptyString?Empty=",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutWithContentEncoding operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "PutWithContentEncodingInput": {
+                "type": "structure",
+                "members": {
+                    "encoding": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "Content-Encoding"
+                    },
+                    "data": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "SDKAppliedContentEncoding_restXml",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/requestcompression/putcontentwithencoding",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput",
+                        "locationName": "PutWithContentEncodingRequest"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header.",
+                "params": {
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/requestcompression/putcontentwithencoding",
+                    "headers": {
+                        "Content-Encoding": "gzip"
+                    }
+                }
+            },
+            {
+                "id": "SDKAppendedGzipAfterProvidedEncoding_restXml",
+                "given": {
+                    "name": "PutWithContentEncoding",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/requestcompression/putcontentwithencoding",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "PutWithContentEncodingInput",
+                        "locationName": "PutWithContentEncodingRequest"
+                    },
+                    "requestcompression": {
+                        "encodings": [
+                            "gzip"
+                        ]
+                    }
+                },
+                "description": "Compression algorithm encoding is appended to the Content-Encoding header, and the\nuser-provided content-encoding is in the Content-Encoding header before the\nrequest compression encoding from the HTTP binding.\n",
+                "params": {
+                    "encoding": "custom",
+                    "data": "RjCEL3kBwqPivZUXGiyA5JCujtWgJAkKRlnTEsNYfBRGOS0f7LT6R3bCSOXeJ4auSHzQ4BEZZTklUyj5\n1HEojihShQC2jkQJrNdGOZNSW49yRO0XbnGmeczUHbZqZRelLFKW4xjru9uTuB8lFCtwoGgciFsgqTF8\n5HYcoqINTRxuAwGuRUMoNO473QT0BtCQoKUkAyVaypG0hBZdGNoJhunBfW0d3HWTYlzz9pXElyZhq3C1\n2PDB17GEoOYXmTxDecysmPOdo5z6T0HFhujfeJFIQQ8dirmXcG4F3v0bZdf6AZ3jsiVh6RnEXIPxPbOi\ngIXDWTMUr4Pg3f2LdYCM01eAb2qTdgsEN0MUDhEIfn68I2tnWvcozyUFpg1ez6pyWP8ssWVfFrckREIM\nMb0cTUVqSVSM8bnFiF9SoXM6ZoGMKfX1mT708OYk7SqZ1JlCTkecDJDoR5ED2q2MWKUGR6jjnEV0GtD8\nWJO6AcF0DptY9Hk16Bav3z6c5FeBvrGDrxTFVgRUk8SychzjrcqJ4qskwN8rL3zslC0oqobQRnLFOvwJ\nprSzBIwdH2yAuxokXAdVRa1u9NGNRvfWJfKkwbbVz8yV76RUF9KNhAUmwyYDrLnxNj8ROl8B7dv8Gans\n7Bit52wcdiJyjBW1pAodB7zqqVwtBx5RaSpF7kEMXexYXp9N0J1jlXzdeg5Wgg4pO7TJNr2joiPVAiFf\nefwMMCNBkYx2z7cRxVxCJZMXXzxSKMGgdTN24bJ5UgE0TxyV52RC0wGWG49S1x5jGrvmxKCIgYPs0w3Z\n0I3XcdB0WEj4x4xRztB9Cx2Mc4qFYQdzS9kOioAgNBti1rBySZ8lFZM2zqxvBsJTTJsmcKPr1crqiXjM\noVWdM4ObOO6QA7Pu4c1hT68CrTmbcecjFcxHkgsqdixnFtN6keMGL9Z2YMjZOjYYzbUEwLJqUVWalkIB\nBkgBRqZpzxx5nB5t0qDH35KjsfKM5cinQaFoRq9y9Z82xdCoKZOsUbxZkk1kVmy1jPDCBhkhixkc5PKS\nFoSKTbeK7kuCEZCtR9OfF2k2MqbygGFsFu2sgb1Zn2YdDbaRwRGeaLhswta09UNSMUo8aTixgoYVHxwy\nvraLB6olPSPegeLOnmBeWyKmEfPdbpdGm4ev4vA2AUFuLIeFz0LkCSN0NgQMrr8ALEm1UNpJLReg1ZAX\nzZh7gtQTZUaBVdMJokaJpLk6FPxSA6zkwB5TegSqhrFIsmvpY3VNWmTUq7H0iADdh3dRQ8Is97bTsbwu\nvAEOjh4FQ9wPSFzEtcSJeYQft5GfWYPisDImjjvHVFshFFkNy2nN18pJmhVPoJc456tgbdfEIdGhIADC\n6UPcSSzE1FxlPpILqZrp3i4NvvKoiOa4a8tnALd2XRHHmsvALn2Wmfu07b86gZlu4yOyuUFNoWI6tFvd\nbHnqSJYNQlFESv13gJw609DBzNnrIgBGYBAcDRrIGAnflRKwVDUnDFrUQmE8xNG6jRlyb1p2Y2RrfBtG\ncKqhuGNiT2DfxpY89ektZ98waPhJrFEPJToNH8EADzBorh3T0h4YP1IeLmaI7SOxeuVrk1kjRqMK0rUB\nlUJgJNtCE35jCyoHMwPQlyi78ZaVv8COVQ24zcGpw0MTy6JUsDzAC3jLNY6xCb40SZV9XzG7nWvXA5Ej\nYC1gTXxF4AtFexIdDZ4RJbtYMyXt8LsEJerwwpkfqvDwsiFuqYC6vIn9RoZO5kI0F35XtUITDQYKZ4eq\nWBV0itxTyyR5Rp6g30pZEmEqOusDaIh96CEmHpOBYAQZ7u1QTfzRdysIGMpzbx5gj9Dxm2PO1glWzY7P\nlVqQiBlXSGDOkBkrB6SkiAxknt9zsPdTTsf3r3nid4hdiPrZmGWNgjOO1khSxZSzBdltrCESNnQmlnP5\nZOHA0eSYXwy8j4od5ZmjA3IpFOEPW2MutMbxIbJpg5dIx2x7WxespftenRLgl3CxcpPDcnb9w8LCHBg7\nSEjrEer6Y8wVLFWsQiv6nTdCPZz9cGqwgtCaiHRy8lTWFgdfWd397vw9rduGld3uUFeFRGjYrphqEmHi\nhiG0GhE6wRFVUsGJtvOCYkVREvbEdxPFeJvlAvOcs9HKbtptlTusvYB86vR2bNcIY4f5JZu2X6sGa354\n7LRk0ps2zqYjat3hMR7XDC8KiKceBteFsXoDjfVxTYKelpedTxqWAafrKhaoAVuNM98PSnkuIWGzjSUC\nNsDJTt6vt1D1afBVPWVmnQ7ZQdtEtLIEwAWYjemAztreELIr1E9fPEILm1Ke4KctP9I0I72Dh4eylNZD\n0DEr2Hg7cWFckuZ0Av5d0IPRARXikEGDHl8uh12TXL9v2Uh0ZVSJMEYvxGSbZvkWz8TjWSk3hKA2a7GL\nJm3Ho7e1C34gE1XRGcEthxvURxt4OKBqN3ZNaMIuDTWinoQAutMcUqtm4MoL7RGPiCHUrvTwQPSirsmA\nQmOEu8nOpnP77Fivh9jLGx5ta7nL6jrsWUsBqiN1lzpdPYLRR4mUIAj6sNWiDEk4pkbHSMEcqbWw6Zl7\npsEyPDHalCNhWMA3RSK3skURzQDZ0oBV5W7vjVIZ4d3uCKsk6zrzEI9u5mx7p9RdNKodXfzqYt0ULdtc\n3RW0hIfw2KvrO3BD2QrtgAkfrFBGVvlJSUoh0MvLz8DeXxfuiuq9Ttu7wvsqVI4Piah6WNEXtHHGPJO3\nGhc75Bnv2To4VS2v8rmyKAPIIVTuYBHZN6sZ4FhFzbrslCIdk0eadaU60naqiNWU3CsxplIYGyeThmJ7\n9u4h6Y2OmiPZjFPS2bAzwgAozYTVefII9aEaWZ0hxHZeu1FW7r79dkdO73ZqRfas9u8Z7LLBPCw5pV0F\n5I0pHDgNb6MogoxF4NZJfVtIX1vCHhhVLrXjrYNJU2fD9Fw8kT8Ie2HDBJnqAvYKmryQ1r9ulo3Me3rH\nq9s2Y5uCDxu9iQNhnpwIm57WYGFeqd2fnQeY2IziD3Jgx0KSrmOH0jgi0RwJyfGXaORPq3bQQqljuACo\nkO6io9t5VI8PbNxSHTRbtYiPciUslbT0g7SpCLrRPOBRJ4DDk56pjghpeoUagJ5xJ4wjBzBuXnAGkNnP\nTfpiuz2r3oSBAi8sB9wiYK2z9sp4gZyQsqdVNzAEgKatOxBRBmJCBYpjO98ZQrF83XApPpfFg0ujB2PW\n1iYF9NkgwIKB5oB6KVTOmSKJk11mVermPgeugHbzdd2zUP6fP8fWbhseqk2t8ahGvqjs2CDHFIWXl5jc\nfCknbykE3ANt7lnAfJQ2ddduLGiqrX4HWx6jcWw08Es6BkleO0IDbaWrb95d5isvFlzJsf0TyDIXF4uq\nbBDCi0XPWqtRJ2iqmnJa2GbBe9GmAOWMkBFSilMyC4sR395WSDpD56fx0NGoU6cHrRu9xF2Bgh7RGSfl\nch2GXEeE02fDpSHFNvJBlOEqqfkIX6oCa6KY9NThqeIjYsT184XR2ZI7akXRaw1gMOGpk4FmUxk6WIuX\n4ei1SLQgSdl7OEdRtJklZ76eFrMbkJQ2TDhu8f7mVuiy53GUMIvCrP9xYGZGmCIDm2e4U2BDi3F7C5xK\n3bDZXwlQp6z4BSqTy2OVEWxXUJfjPMOL5Mc7AvDeKtxAS73pVIv0HgHIa4NBAdC7uLG0zXuu1FF6z2XY\nyUhk03fMZhYe7vVxsul3WE7U01fuN8z2y0eKwBW1RFBE1eKIaR9Y01sIWQWbSrfHfDrdZiElhmhHehfs\n0EfrR4sLYdQshJuvhTeKGJDaEhtPQwwJ9mUYGtuCL9RozWx1XI4bHNlzBTW0BVokYiJGlPe7wdxNzJD7\nJgS7Lwv6jGKngVf86imGZyzqwiteWFPdNUoWdTvUPSMO5xIUK9mo5QpwbBOAmyYzVq42o3Qs90N9khEV\nU36LB99fw8PtGHH5wsCHshfauwnNPj0blGXzke0kQ4JNCVH7Jtn0Y0aeejkSxFtwtxoYs6zHl1Lxxpsd\nsw5vBy49CEtoltDW367lVAwDjWdx20msGB7qJCkEDrzu7EXSO22782QX9NBRcN9ppX0C25I0FMA4Wnhz\n9zIpiXRrsTH35jzM8Cjt4EVLGNU3O0HuEvAer3cENnMJtngdrT86ox3fihMQbiuy4Bh4DEcP5in2VjbT\n3qbnoCNvOi8Fmmf7KlGlWAOceL5OHVE5lljjQEMzEQOCEgrk5mDKgwSBJQBNauIDSC1a5iEQjB8Xxp4C\nqeKyyWY9IOntNrtU5ny4lNprHJd36dKFeBLKcGCOvgHBXdOZloMF0YTRExw7hreEO9IoTGVHJ4teWsNr\nHdtagUHjkeZkdMMfnUGNv5aBNtFMqhcZH6EitEa9lGPkKBbJpoom3u8D8EHSIF1H5EZqqx9TLY5hWAIG\nPwJ4qwkpCGw5rCLVrjw7ARKukIFzNULANqjHUMcJ002TlUosJM4xJ4aAgckpLVGOGuPDhGAAexEcQmbg\nUsZdmqQrtuVUyyLteLbLbqtR6CTlcAIwY3xyMCmPgyefE0FEUODBoxQtRUuYTL9RC5o1sYb2PvcxUQfb\niJFi2CAl99pAzcckU2qVCxniARslIxM5pmMRGsQX9ZzYAfZrbg6ce6S74I8UMlgRQ2QVyvUjKKOE6IrJ\nLng370emHfe5m6LZULD5YiZutkD5ipjL2Bz77DvTE5kNPUhuoKBcTJcUgytfXAKUTWOcRKNlq0GImrxM\nJfr7AWbLFFNKGLeTrVDBwpcokJCv0zcOKWe8fd2xkeXkZTdmM66IgM27cyYmtQ6YF26Kd0qrWJeVZJV9\n3fyLYYvKN5csbRY2BHoYE5ERARRW65IrpkXMf48OrCXMtDIP0Z7wxI9DiTeKKeH4uuguhCJnwzR3WxLA\nVU6eBJEd7ZjS6JA83w7decq8uDI7LGKjcz1FySp3B7fE9DkHRGXxbsL7Fjar6vW2mAv8CuvI20B6jctp\n2yLDs24sPfB3sSxrrlhbuT1m6DZqiN0dl6umKx7NGZhmOTVGr20jfcxhqPQwTJfd7kel4rvxip4BqkvT\n7STy8knJ2BXGyJeNgwo1PXUZRDVy0LCTsSF1RFuRZe8cktHl9lgw8ntdPn1pVFL0MwJkJfdXBNUp5gNv\n50FTkrpo1t6wq4CVbcfj2XOrOzvBUzNH26sXGABI1gGxCdp2jEZrHgqQaWIaTJVTuguZhxqDvdYsrwFW\nYN58uuNcKHIrGdRSigyZInwQDYk0pjcqdSeU0WVU3Y9htzZBR7XRaCJr5YTZvq7fwermb5tuwb37lPLq\nB2IGg0iftkVbXaSyfCwVaRbfLBb88so0QqpmJGirFu8FcDiXOV1zTr8yW9XLdYQuUjh43xrXLdgsuYff\nCagInUk1eU1aLjVZoJRsNmStmOEpAqlYMwTvx7w6j2f421Cxr5cNZBIVlAxlXN2QiDqJ9v3sHhHkTanc\nlQuH8ptUyX8qncpBuXXBn7cSez9N0EoxCBl1GHUagbjstgJo4gzLvTmVIY6MiWYOBitzNUHfyqKwtKUr\nVoSCdZcGeA9lHUPA7PUprRRaT3m1hGKPyshtVS2ikG48w3oVerln1N1qGdtz46gZCrndw3LZ1B362RfW\nzDPuXbpsyLsRMTt1Rz1oKHRXp3iE41hkhQH6pxlvyCW2INnHt5XU8zRamOB3oW0udOhMpQFDjRkOcy06\nb4t0QTHvoRqmBna3WXzIMZyeK3GChF5eF8oDXRbjhk7BB6YKCgqwWUzEJ5K47HMSlhFkBUjaPRjdGM0z\nzOMwhW6b1NvSwP7XM1P5yi1oPvOspts1vr29SXqrMMrBhVogeodWyd69NqrO4jkyBxKmlXifoTowpfiY\n2cUCE0XMZqxUN39LCP09JqZifaEcBEo3mgtm1tWu5QR2GNq7UyQf4RIPSDOpDCAtwoPhRgdT1lJdcj4U\nlnH0wrJ8Uwu7c08L7ErnIrDATqCrOjpSbzGP1xHENABYONC4TknFPrJ8pe40A8fzGT0qBw9mAM1SKcHO\nfoiLcMC9AjHTqJzDG3xplSLPG9or2rMeq7Fzp9r0y7uJRMxgg51EbjfvYlH466A3ggvL2WQlDXjJqPW3\nBJGWAWDNN9LK8f46bADKPxakpkx23S9O47rGSXfDhVSIZsDympxWX1UOzWwMZRHkofVeKqizgbKkGgUT\nWykE9gRoRAOd9wfHZDYKa9i0LaPDiaUMvnU1gdBIqIoiVsdJ9swX47oxvMtOxtcS0zlD6llDkBuIiU5g\nPwRCYmtkkb25c8iRJXwGFPjI1wJ34I1z1ENicPdosPiUe9ZC2jnXIKzEdv01x2ER7DNDF3yxOwOhxNxI\nGqsmC92j25UQQFu9ZstOZ28AoCkuOYs0Uycm5u8jR1T39dMBwrko09rC65ENLnsxM8oebmyFCPiGJ1ED\n5Xqc9qZ237f1OnETAoEOwqUSvrdPTv56U7hV91EMTyC812MLQpr2710E3VVpsUCUMNhIxdt7UXZ1UNFb\njgzpZLXnf4DHrv6B7kq6UI50KMxcw1HZE2GpODfUTzNFLaqdrvzxKe5eUWdcojBaRbD4fFdVYJTElYDH\nNNVh6ofkoeWcs9CWGFmSBe0T4K8phFeygQg0prKMELNEy6qENzVtG9ZDcqj3a7L6ZLtvq50anWp7fAVu\nfwz55g4iM2Z2fA0pnwHDL7tt67zTxGITvsnJsZSpeq1EQsZcwtkBV9liu7Rl7jiVT1IIRtchB8TsTiaA\nwVHIQQ9RIOTiPQdKNqi1kC9iGlUqWK93gblNWlBw1eYB9Wk8FQogutwTf0caNMx8D4nPbANcmOOlskIy\nzALh15OlTrWnhP95rf08AN2J026zDE2DUF9k0eCevYBQIDjqKNW4XCZnjbHoIcKzbY5VzPbMs3ZyMz8K\nSucBmgPg6wrSK5ykbkapS5vuqvXc9GbjQJ8bPNzoxoWGyjbZvDs2OBrIqBmcQb2DLJ8v38McQ4mC4UsS\njf4PyfSCtpk274QZjvLCZbLiCBxQegk7jUU0NmTFJAcYCxd9xMWdlFkiszcltT2YzwuFFz7iA6aa4n5L\nHpBNfUA01GcAi1aCMYhmooS4zSlYcSOZkovMz36U3Fd9WtqIEOJLi7HMgHQDgNMdK6DTzAdHQtxerxVF\nHJnPrfNVG7270r3bp0bPnLNYLhObbAn6zqSAUeLtI2Y4KJDjBKCAh2vvYGbu0e2REYJWRj7MkGevsSSy\nb1kCXLt6tKGWAb7lt5c0xyJgUIJW7pdtnwgT0ZCa24BecCAwNnG5U2EwQbcjZGsFxqNGfaemd3oFEhES\nBaE0Fxms9UKTnMafu8wvZ2xymMrUduuRzOjDeX7oD5YsLC88V8CGMLxbbxIpt94KGykbr6e7L0R4oZl1\ntKMgFwQ2p9Txdbp0Y293LcsJymKizqI0F2xEp7y4SmWOJqHZtsbz80wVV9nv41CvtfxuSoGZJ5cNB7pI\nBgzNcQCeH3Jt0RaGGwboxxpuFbzilmkMFXxJm87tD4WNgu01nHfGCKeQcySEBZpVfJgi6sDFJ8uWnvKm\n9mPLHurtWzEfKqUEa1iC71bXjw5wrvhv9BYW8JSUELHmDquftQyKdq0DZXhULMHGQLf4e95WIaoA14LL\nbThz77kuhKULPTu2MNrBUKGorurhGugo5gs4ZUezSsUOe3KxYdrFMdGgny1GgTxMSMTp2RAZytKjv4kQ\nVx7XgzvpQLIbDjUPAkJv6lScwIRq1W3Ne0Rh0V6Bmn6U5uIuWnJjULmbaQiSODj3z0mAZvak0mSWIGwT\nTX83HztcC4W7e1f6a1thmcc5K61Icehla2hBELWPpixTkyC4eEVmk9Rq0m0ZXtx0JX2ZQXqXDEyePyMe\nJ70sdSzXk72zusqhY4yuOMGgbYNHqxOToK6NxujR7e4dV3Wk5JnSUthym8scjcPeCiKDNY4cHfTMnDXJ\n9zLVy01LtNKYpJ1s8FxVxigmxQNKEbIamxhx6yqwGC4aiISVOOUEjvNOdaUfXfUsE6jEwtwxyGxjlRK1\ncLyxXttq4QWN6PehgHv7jXykzPjInbEysebFvvPOOMdunmJvcCNMSvjUda8fL6xfGo0FDrLg8XZipd6S\noPVdYtyIM1Dg40KbBA3JuumPYtXuJaHrZnjZmdnM5OVo4ZNxktfCVT0c6bnD4bAeyn4bYt1ZPaX6hQHh\nJtvNYfpD0ONYlmqKuToQAMlz52Fh6bj45EbX89L5eLlSpWeyBlGotzriB0EPlclrGi5l2B5oPb1aB1ag\nyyYuu44l0F1oOVYnBIZsxIsHVITxi9lEuVPFkWASOUNuVQXfM4n5hxWR9qtuKnIcPsvbJsv1U10XlKh3\nKisqPhHU15xrCLr5gwFxPUKiNTLUBrkzgBOHXPVsHcLCiSD0YU56TRGfvEom43TWUKPPfl9Z54tgVQuT\njCRlaljAzeniQIcbbHZnn3f0HxbDG3DFYqWSxNrXabHhRsIOhhUHSPENyhGSTVO5t0XX5CdMspJPCd02\n3Oqv32ccbUK4O3YH6LEvp0WO3kSl5n50odVkI9B0i0iq4UPFGMkM8bEQJbgJoOH71P10vtdevJFQE4g2\nyhimiM53ZJRWgSZveHtENZc0Gjo0F9eioak9BnPpY1QxAFPC817svuhEstcU69bLCA4D1rO5R8AuIIBq\nyQJcifFLvbpAEYTLKJqysZrU8EEl3TSdC13A9hZvk4NC8VGEDAxcNrKw313dZp17kZPO5HSd1y6sljAW\nA9M1d6FMYV5SlBWf3WZNCUPS7qKNlda2YBsC6IUVB363f5RLGQOQHwbaijBSRCkrVoRxBHtc0Bd5J9V9\nP5uMTXkpZOxRcCQvImGgcmGuxxLb5zTqfS2xu7v3Sf3IIesSt9tVzcEcdbEvLGVJkLk4mb3G30DbIbri\nPZ09JkweDvMaQ3bxT2nfkz3Ilihkw9jqikkCCCz7E8h6z6KbhQErEW9VzJZzMCgJsyPjFam6iNwpe07S\nhyOvNVw2t9wpzL5xM11DvVzQwDaWEytNRHzDBs4KwEtpI2IpjUyVZHSwA0UGqqkzoCgrJFlNOvPlXqcS\nIcREouUIBmuttkrhPWJtSxOOgpsdvBR3kTOzAXNzSKxoaBAb0c5SDMUc6FIyGA8x5wg5DkUgjFUUodEt\nOYaB2VHVePW9mxHeBTdKWLzJow4ZZvjnoBuVigXljKCNh137ckV2y3Yg3Xi4UzJEI2V5Rw9AfnMs7xUw\nVHOFCg189maD3bmZAe7b4eaGZhyy4HVKjqCXmIH7vsEjRvbnfB0SQxxpuqBDJbHNCtW4vM643ZQQBVPP\na7oXSQIq9w2dHp0A7dtkocCZdQp9FKR9XdJAFIbVSHzIF1ZogeZlc0pXuNE0tagvD57xwDRFkAuoQyMu\nYDdZasXrpSmEE5UjHVkyYsISn8QsfXurzDybX468aoRoks654jjmRY5zi1oB8TcMdC2c3sicNaqfeuhd\nH1nPX7l4RpdqWMR7gGx9slXtG8S3KxpOi4qCD7yg3saD66nun4dzksQURoTUdXyrJR5UpHsfIlTF1aJa\nMdXyQtQnrkl00TeghQd00rRFZsCnhi0qrCSKiBfB2EVrd9RPpbgwJGZHuIQecdBmNetc2ylSEClqVBPR\nGOPPIxrnswEZjmnS0jxKW9VSM1QVxSPJnPFswCqT95SoKD6CP4xdX28WIUGiNaIKodXXJHEIsXBCxLsr\nPwWPCtoplC6hhpKmW5dQo92iCTyY2KioKzO8XR6FKm6qonMKVEwQNtlYE9c97KMtEnp25VOdMP46SQXS\nYsSVp7vm8LP87VYI8SOKcW3s2oedYFtt45rvDzoTF0GmS6wELQ9uo98HhjQAI1Dt91cgjJOwygNmLoZE\nX5K2zQiNA163uMCl5xzaBqY4YTL0wgALg3IFdYSp0RFYLWdt6IxoGI1tnoxcjlUEPo5eGIc3mS3SmaLn\nOdumfUQQ4Jgmgaa5anUVQsfBDrlAN5oaX7O0JO71SSPSWiHBsT9WIPy2J1Cace9ZZLRxblFPSXcvsuHh\nhvnhWQltEDAe7MgvkFQ8lGVFa8jhzijoF9kLmMhMILSzYnfXnZPNP7TlAAwlLHK1RqlpHskJqb6CPpGP\nQvOAhEMsM3zJ2KejZx0esxkjxA0ZufVvGAMN3vTUMplQaF4RiQkp9fzBXf3CMk01dWjOMMIEXTeKzIQe\nEcffzjixWU9FpAyGp2rVl4ETRgqljOGw4UgK31r0ZIEGnH0xGz1FtbW1OcQM008JVujRqulCucEMmntr\n"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/requestcompression/putcontentwithencoding",
+                    "headers": {
+                        "Content-Encoding": "custom, gzip"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryIdempotencyTokenAutoFill operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryIdempotencyTokenAutoFillInput": {
+                "type": "structure",
+                "members": {
+                    "token": {
+                        "shape": "String",
+                        "idempotencyToken": true,
+                        "location": "querystring",
+                        "locationName": "token"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryIdempotencyTokenAutoFill",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/QueryIdempotencyTokenAutoFill",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Automatically adds idempotency token when not set",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000",
+                    "body": ""
+                }
+            },
+            {
+                "id": "QueryIdempotencyTokenAutoFillIsSet",
+                "given": {
+                    "name": "QueryIdempotencyTokenAutoFill",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/QueryIdempotencyTokenAutoFill",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryIdempotencyTokenAutoFillInput"
+                    },
+                    "documentation": "<p>Automatically adds idempotency tokens.</p>"
+                },
+                "description": "Uses the given idempotency token as-is",
+                "params": {
+                    "token": "00000000-0000-4000-8000-000000000000"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/QueryIdempotencyTokenAutoFill?token=00000000-0000-4000-8000-000000000000",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryParamsAsStringListMap operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryParamsAsStringListMapInput": {
+                "type": "structure",
+                "members": {
+                    "qux": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "corge"
+                    },
+                    "foo": {
+                        "shape": "StringListMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringListMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringList"
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlQueryParamsStringListMap",
+                "given": {
+                    "name": "QueryParamsAsStringListMap",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringListMap",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryParamsAsStringListMapInput"
+                    }
+                },
+                "description": "Serialize query params from map of list strings",
+                "params": {
+                    "qux": "named",
+                    "foo": {
+                        "baz": [
+                            "bar",
+                            "qux"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/StringListMap?corge=named&baz=bar&baz=qux",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryPrecedence operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "QueryPrecedenceInput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "querystring",
+                        "locationName": "bar"
+                    },
+                    "baz": {
+                        "shape": "StringMap",
+                        "location": "querystring"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlQueryPrecedence",
+                "given": {
+                    "name": "QueryPrecedence",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/Precedence",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "QueryPrecedenceInput"
+                    }
+                },
+                "description": "Prefer named query parameters when serializing",
+                "params": {
+                    "foo": "named",
+                    "baz": {
+                        "bar": "fromMap",
+                        "qux": "alsoFromMap"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/Precedence?bar=named&qux=alsoFromMap",
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "RecursiveShapesRequest": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/RecursiveShapes",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "RecursiveShapesRequest",
+                        "locationName": "RecursiveShapesRequest"
+                    },
+                    "documentation": "<p>Recursive shapes</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes recursive structures",
+                "params": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/RecursiveShapes",
+                    "body": "<RecursiveShapesRequest>\n    <nested>\n        <foo>Foo1</foo>\n        <nested>\n            <bar>Bar1</bar>\n            <recursiveMember>\n                <foo>Foo2</foo>\n                <nested>\n                    <bar>Bar2</bar>\n                </nested>\n            </recursiveMember>\n        </nested>\n    </nested>\n</RecursiveShapesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesRequest": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "SimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "foo": "Foo",
+                    "stringValue": "string",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <stringValue>string</stringValue>\n    <trueBooleanValue>true</trueBooleanValue>\n    <falseBooleanValue>false</falseBooleanValue>\n    <byteValue>1</byteValue>\n    <shortValue>2</shortValue>\n    <integerValue>3</integerValue>\n    <longValue>4</longValue>\n    <floatValue>5.5</floatValue>\n    <DoubleDribble>6.5</DoubleDribble>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesWithEscapedCharacter",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string with escaping",
+                "params": {
+                    "foo": "Foo",
+                    "stringValue": "<string>"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <stringValue>&lt;string&gt;</stringValue>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesWithWhiteSpace",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string containing white space",
+                "params": {
+                    "foo": "Foo",
+                    "stringValue": "  string with white    space  "
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <stringValue>  string with white    space  </stringValue>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesPureWhiteSpace",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string containing exclusively whitespace",
+                "params": {
+                    "foo": "Foo",
+                    "stringValue": "   "
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <stringValue>   </stringValue>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <floatValue>NaN</floatValue>\n    <DoubleDribble>NaN</DoubleDribble>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <floatValue>Infinity</floatValue>\n    <DoubleDribble>Infinity</DoubleDribble>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "SimpleScalarPropertiesRequest",
+                        "locationName": "SimpleScalarPropertiesRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling -Infinity float values.",
+                "params": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/SimpleScalarProperties",
+                    "body": "<SimpleScalarPropertiesRequest>\n    <floatValue>-Infinity</floatValue>\n    <DoubleDribble>-Infinity</DoubleDribble>\n</SimpleScalarPropertiesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TimestampFormatHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TimestampFormatHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "header",
+                        "locationName": "X-memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "header",
+                        "locationName": "X-memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "header",
+                        "locationName": "X-memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "header",
+                        "locationName": "X-defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "header",
+                        "locationName": "X-targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "header",
+                        "locationName": "X-targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "header",
+                        "locationName": "X-targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "TimestampFormatHeaders",
+                "given": {
+                    "name": "TimestampFormatHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/TimestampFormatHeaders",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "TimestampFormatHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how timestamp request and response headers are serialized.</p>"
+                },
+                "description": "Tests how timestamp request headers are serialized",
+                "params": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/TimestampFormatHeaders",
+                    "body": "",
+                    "headers": {
+                        "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-memberDateTime": "2019-12-16T23:48:18Z",
+                        "X-memberEpochSeconds": "1576540098",
+                        "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-targetDateTime": "2019-12-16T23:48:18Z",
+                        "X-targetEpochSeconds": "1576540098",
+                        "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlAttributes operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlAttributesRequest": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "attr": {
+                        "shape": "String",
+                        "locationName": "test",
+                        "xmlAttribute": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlAttributes",
+                "given": {
+                    "name": "XmlAttributes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlAttributes",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlAttributesRequest",
+                        "locationName": "XmlAttributesRequest"
+                    },
+                    "documentation": "<p>This example serializes an XML attributes on synthesized document.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes XML attributes on the synthesized document",
+                "params": {
+                    "foo": "hi",
+                    "attr": "test"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlAttributes",
+                    "body": "<XmlAttributesRequest test=\"test\">\n    <foo>hi</foo>\n</XmlAttributesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlAttributesWithEscaping",
+                "given": {
+                    "name": "XmlAttributes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlAttributes",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlAttributesRequest",
+                        "locationName": "XmlAttributesRequest"
+                    },
+                    "documentation": "<p>This example serializes an XML attributes on synthesized document.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes XML attributes with escaped characters on the synthesized document",
+                "params": {
+                    "foo": "hi",
+                    "attr": "<test&mock>"
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlAttributes",
+                    "body": "<XmlAttributesRequest test=\"&lt;test&amp;mock&gt;\">\n    <foo>hi</foo>\n</XmlAttributesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlAttributesOnPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlAttributesOnPayloadRequest": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "XmlAttributesPayloadRequest",
+                        "locationName": "payload"
+                    }
+                },
+                "payload": "payload"
+            },
+            "XmlAttributesPayloadRequest": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "attr": {
+                        "shape": "String",
+                        "locationName": "test",
+                        "xmlAttribute": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlAttributesOnPayload",
+                "given": {
+                    "name": "XmlAttributesOnPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlAttributesOnPayload",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlAttributesOnPayloadRequest"
+                    },
+                    "documentation": "<p>This example serializes an XML attributes on a document targeted by httpPayload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes XML attributes on the synthesized document",
+                "params": {
+                    "payload": {
+                        "foo": "hi",
+                        "attr": "test"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlAttributesOnPayload",
+                    "body": "<XmlAttributesPayloadRequest test=\"test\">\n    <foo>hi</foo>\n</XmlAttributesPayloadRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlBlobs operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlBlobsRequest": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlBlobs",
+                "given": {
+                    "name": "XmlBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlBlobs",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlBlobsRequest",
+                        "locationName": "XmlBlobsRequest"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "params": {
+                    "data": "value"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlBlobs",
+                    "body": "<XmlBlobsRequest>\n    <data>dmFsdWU=</data>\n</XmlBlobsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyLists operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyListsRequest": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    },
+                    "flattenedStructureList": {
+                        "shape": "StructureList",
+                        "flattened": true
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyLists",
+                "given": {
+                    "name": "XmlEmptyLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEmptyLists",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlEmptyListsRequest",
+                        "locationName": "XmlEmptyListsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes Empty XML lists",
+                "params": {
+                    "stringList": [],
+                    "stringSet": []
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlEmptyLists",
+                    "body": "<XmlEmptyListsRequest>\n        <stringList></stringList>\n        <stringSet></stringSet>\n</XmlEmptyListsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyMapsRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyMaps",
+                "given": {
+                    "name": "XmlEmptyMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlEmptyMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlEmptyMapsRequest",
+                        "locationName": "XmlEmptyMapsRequest"
+                    }
+                },
+                "description": "Serializes Empty XML maps",
+                "params": {
+                    "myMap": {}
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlEmptyMaps",
+                    "body": "<XmlEmptyMapsRequest>\n    <myMap></myMap>\n</XmlEmptyMapsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyStrings operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyStringsRequest": {
+                "type": "structure",
+                "members": {
+                    "emptyString": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyStrings",
+                "given": {
+                    "name": "XmlEmptyStrings",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEmptyStrings",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlEmptyStringsRequest",
+                        "locationName": "XmlEmptyStringsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes xml empty strings",
+                "params": {
+                    "emptyString": ""
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlEmptyStrings",
+                    "body": "<XmlEmptyStringsRequest>\n    <emptyString></emptyString>\n</XmlEmptyStringsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEnums operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEnumsRequest": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEnums",
+                "given": {
+                    "name": "XmlEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEnums",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlEnumsRequest",
+                        "locationName": "XmlEnumsRequest"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlEnums",
+                    "body": "<XmlEnumsRequest>\n    <fooEnum1>Foo</fooEnum1>\n    <fooEnum2>0</fooEnum2>\n    <fooEnum3>1</fooEnum3>\n    <fooEnumList>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumList>\n    <fooEnumSet>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumSet>\n    <fooEnumMap>\n        <entry>\n            <key>hi</key>\n            <value>Foo</value>\n        </entry>\n        <entry>\n            <key>zero</key>\n            <value>0</value>\n        </entry>\n    </fooEnumMap>\n</XmlEnumsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlIntEnums operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlIntEnumsRequest": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlIntEnums",
+                "given": {
+                    "name": "XmlIntEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlIntEnums",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlIntEnumsRequest",
+                        "locationName": "XmlIntEnumsRequest"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlIntEnums",
+                    "body": "<XmlIntEnumsRequest>\n    <intEnum1>1</intEnum1>\n    <intEnum2>2</intEnum2>\n    <intEnum3>3</intEnum3>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <intEnumSet>\n        <member>1</member>\n        <member>2</member>\n    </intEnumSet>\n    <intEnumMap>\n        <entry>\n            <key>a</key>\n            <value>1</value>\n        </entry>\n        <entry>\n            <key>b</key>\n            <value>2</value>\n        </entry>\n    </intEnumMap>\n</XmlIntEnumsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlLists operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlListsRequest": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    },
+                    "flattenedStructureList": {
+                        "shape": "StructureList",
+                        "flattened": true
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlLists",
+                "given": {
+                    "name": "XmlLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlLists",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlListsRequest",
+                        "locationName": "XmlListsRequest"
+                    },
+                    "documentation": "<p>This test case serializes XML lists for the following cases for both input and output:</p> <ol> <li>Normal XML lists.</li> <li>Normal XML sets.</li> <li>XML lists of lists.</li> <li>XML lists with @xmlName on its members</li> <li>Flattened XML lists.</li> <li>Flattened XML lists with @xmlName.</li> <li>Flattened XML lists with @xmlNamespace.</li> <li>Lists of structures.</li> <li>Flattened XML list of structures</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Tests for XML list serialization",
+                "params": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "renamedListMembers": [
+                        "foo",
+                        "bar"
+                    ],
+                    "flattenedList": [
+                        "hi",
+                        "bye"
+                    ],
+                    "flattenedList2": [
+                        "yep",
+                        "nope"
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ],
+                    "flattenedStructureList": [
+                        {
+                            "a": "5",
+                            "b": "6"
+                        },
+                        {
+                            "a": "7",
+                            "b": "8"
+                        }
+                    ]
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlLists",
+                    "body": "<XmlListsRequest>\n    <stringList>\n        <member>foo</member>\n        <member>bar</member>\n    </stringList>\n    <stringSet>\n        <member>foo</member>\n        <member>bar</member>\n    </stringSet>\n    <integerList>\n        <member>1</member>\n        <member>2</member>\n    </integerList>\n    <booleanList>\n        <member>true</member>\n        <member>false</member>\n    </booleanList>\n    <timestampList>\n        <member>2014-04-29T18:30:38Z</member>\n        <member>2014-04-29T18:30:38Z</member>\n    </timestampList>\n    <enumList>\n        <member>Foo</member>\n        <member>0</member>\n    </enumList>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <nestedStringList>\n        <member>\n            <member>foo</member>\n            <member>bar</member>\n        </member>\n        <member>\n            <member>baz</member>\n            <member>qux</member>\n        </member>\n    </nestedStringList>\n    <renamed>\n        <item>foo</item>\n        <item>bar</item>\n    </renamed>\n    <flattenedList>hi</flattenedList>\n    <flattenedList>bye</flattenedList>\n    <customName>yep</customName>\n    <customName>nope</customName>\n    <myStructureList>\n        <item>\n            <value>1</value>\n            <other>2</other>\n        </item>\n        <item>\n            <value>3</value>\n            <other>4</other>\n        </item>\n    </myStructureList>\n    <flattenedStructureList>\n        <value>5</value>\n        <other>6</other>\n    </flattenedStructureList>\n    <flattenedStructureList>\n        <value>7</value>\n        <other>8</other>\n    </flattenedStructureList>\n</XmlListsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapsRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlMaps",
+                "given": {
+                    "name": "XmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMaps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlMapsRequest",
+                        "locationName": "XmlMapsRequest"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Tests for XML map serialization",
+                "params": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlMaps",
+                    "body": "<XmlMapsRequest>\n    <myMap>\n        <entry>\n            <key>foo</key>\n            <value>\n                <hi>there</hi>\n            </value>\n        </entry>\n        <entry>\n            <key>baz</key>\n            <value>\n                <hi>bye</hi>\n            </value>\n        </entry>\n    </myMap>\n</XmlMapsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMapsXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapsXmlNameRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsXmlNameInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsXmlNameInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "Attribute"
+                },
+                "value": {
+                    "shape": "GreetingStruct",
+                    "locationName": "Setting"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlMapsXmlName",
+                "given": {
+                    "name": "XmlMapsXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMapsXmlName",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlMapsXmlNameRequest",
+                        "locationName": "XmlMapsXmlNameRequest"
+                    }
+                },
+                "description": "Serializes XML maps that have xmlName on members",
+                "params": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlMapsXmlName",
+                    "body": "<XmlMapsXmlNameRequest>\n    <myMap>\n        <entry>\n            <Attribute>foo</Attribute>\n            <Setting>\n                <hi>there</hi>\n            </Setting>\n        </entry>\n        <entry>\n            <Attribute>baz</Attribute>\n            <Setting>\n                <hi>bye</hi>\n            </Setting>\n        </entry>\n    </myMap>\n</XmlMapsXmlNameRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMapWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapWithXmlNamespaceRequest": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapWithXmlNamespaceInputOutputMap",
+                        "locationName": "KVP",
+                        "xmlNamespace": "https://the-member.example.com"
+                    }
+                }
+            },
+            "XmlMapWithXmlNamespaceInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K",
+                    "xmlNamespace": "https://the-key.example.com"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V",
+                    "xmlNamespace": "https://the-value.example.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlXmlMapWithXmlNamespace",
+                "given": {
+                    "name": "XmlMapWithXmlNamespace",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMapWithXmlNamespace",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlMapWithXmlNamespaceRequest",
+                        "locationName": "XmlMapWithXmlNamespaceRequest"
+                    },
+                    "documentation": "<p>Maps with @xmlNamespace and @xmlName</p>"
+                },
+                "description": "Serializes XML maps in requests that have xmlNamespace and xmlName on members",
+                "params": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlMapWithXmlNamespace",
+                    "body": "<XmlMapWithXmlNamespaceRequest>\n    <KVP xmlns=\"https://the-member.example.com\">\n        <entry>\n            <K xmlns=\"https://the-key.example.com\">a</K>\n            <V xmlns=\"https://the-value.example.com\">A</V>\n        </entry>\n        <entry>\n            <K xmlns=\"https://the-key.example.com\">b</K>\n            <V xmlns=\"https://the-value.example.com\">B</V>\n        </entry>\n    </KVP>\n</XmlMapWithXmlNamespaceRequest>",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlNamespaces operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlNamespacesRequest": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "XmlNamespaceNested"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "XmlNamespaceNested": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "xmlNamespace": {
+                            "prefix": "baz",
+                            "uri": "http://baz.com"
+                        }
+                    },
+                    "values": {
+                        "shape": "XmlNamespacedList",
+                        "xmlNamespace": "http://qux.com"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "String": {
+                "type": "string"
+            },
+            "XmlNamespacedList": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "http://bux.com"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlNamespaces",
+                "given": {
+                    "name": "XmlNamespaces",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlNamespaces",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlNamespacesRequest",
+                        "locationName": "XmlNamespacesRequest"
+                    }
+                },
+                "description": "Serializes XML namespaces",
+                "params": {
+                    "nested": {
+                        "foo": "Foo",
+                        "values": [
+                            "Bar",
+                            "Baz"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlNamespaces",
+                    "body": "<XmlNamespacesRequest xmlns=\"http://foo.com\">\n    <nested xmlns=\"http://foo.com\">\n        <foo xmlns:baz=\"http://baz.com\">Foo</foo>\n        <values xmlns=\"http://qux.com\">\n            <member xmlns=\"http://bux.com\">Bar</member>\n            <member xmlns=\"http://bux.com\">Baz</member>\n        </values>\n    </nested>\n</XmlNamespacesRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlTimestamps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlTimestampsRequest": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlTimestamps",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "params": {
+                    "normal": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <normal>2014-04-29T18:30:38Z</normal>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "params": {
+                    "dateTime": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <dateTime>2014-04-29T18:30:38Z</dateTime>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "params": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <dateTimeOnTarget>2014-04-29T18:30:38Z</dateTimeOnTarget>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "params": {
+                    "epochSeconds": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <epochSeconds>1398796238</epochSeconds>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "params": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <epochSecondsOnTarget>1398796238</epochSecondsOnTarget>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "params": {
+                    "httpDate": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <httpDate>Tue, 29 Apr 2014 18:30:38 GMT</httpDate>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlTimestampsRequest",
+                        "locationName": "XmlTimestampsRequest"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "params": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/XmlTimestamps",
+                    "body": "<XmlTimestampsRequest>\n    <httpDateOnTarget>Tue, 29 Apr 2014 18:30:38 GMT</httpDateOnTarget>\n</XmlTimestampsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlUnions operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlUnionsRequest": {
+                "type": "structure",
+                "members": {
+                    "unionValue": {
+                        "shape": "XmlUnionShape"
+                    }
+                }
+            },
+            "XmlUnionShape": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    },
+                    "unionValue": {
+                        "shape": "XmlUnionShape"
+                    },
+                    "structValue": {
+                        "shape": "XmlNestedUnionStruct"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "XmlNestedUnionStruct": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlUnionsWithStructMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlUnionsRequest",
+                        "locationName": "XmlUnionsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union struct member",
+                "params": {
+                    "unionValue": {
+                        "structValue": {
+                            "stringValue": "string",
+                            "booleanValue": true,
+                            "byteValue": 1,
+                            "shortValue": 2,
+                            "integerValue": 3,
+                            "longValue": 4,
+                            "floatValue": 5.5,
+                            "doubleValue": 6.5
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlUnions",
+                    "body": "<XmlUnionsRequest>\n    <unionValue>\n       <structValue>\n          <stringValue>string</stringValue>\n          <booleanValue>true</booleanValue>\n          <byteValue>1</byteValue>\n          <shortValue>2</shortValue>\n          <integerValue>3</integerValue>\n          <longValue>4</longValue>\n          <floatValue>5.5</floatValue>\n          <doubleValue>6.5</doubleValue>\n       </structValue>\n    </unionValue>\n</XmlUnionsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlUnionsWithStringMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlUnionsRequest",
+                        "locationName": "XmlUnionsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "serialize union string member",
+                "params": {
+                    "unionValue": {
+                        "stringValue": "some string"
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlUnions",
+                    "body": "<XmlUnionsRequest>\n   <unionValue>\n      <stringValue>some string</stringValue>\n   </unionValue>\n</XmlUnionsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlUnionsWithBooleanMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlUnionsRequest",
+                        "locationName": "XmlUnionsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union boolean member",
+                "params": {
+                    "unionValue": {
+                        "booleanValue": true
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlUnions",
+                    "body": "<XmlUnionsRequest>\n   <unionValue>\n      <booleanValue>true</booleanValue>\n   </unionValue>\n</XmlUnionsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            },
+            {
+                "id": "XmlUnionsWithUnionMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "input": {
+                        "shape": "XmlUnionsRequest",
+                        "locationName": "XmlUnionsRequest"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union member",
+                "params": {
+                    "unionValue": {
+                        "unionValue": {
+                            "booleanValue": true
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "PUT",
+                    "uri": "/XmlUnions",
+                    "body": "<XmlUnionsRequest>\n   <unionValue>\n      <unionValue>\n         <booleanValue>true</booleanValue>\n      </unionValue>\n   </unionValue>\n</XmlUnionsRequest>\n",
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    }
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-non-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-non-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-non-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-non-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,50 @@
+[
+    {
+        "description": "Test cases for NonQueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2025-06-20",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "endpointPrefix": "nonquerycompatiblerpcv2protocol",
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "serviceFullName": "NonQueryCompatibleRpcV2Protocol",
+            "serviceId": "Non Query Compatible RpcV2 Protocol",
+            "signatureVersion": "v4",
+            "signingName": "NonQueryCompatibleRpcV2Protocol",
+            "targetPrefix": "NonQueryCompatibleRpcV2Protocol",
+            "uid": "non-query-compatible-rpcv2-protocol-2025-06-20"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "NonQueryCompatibleRpcV2CborForbidsQueryModeHeader",
+                "given": {
+                    "name": "NonQueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true
+                },
+                "description": "The query mode header MUST NOT be set on non-query-compatible services.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/NonQueryCompatibleRpcV2Protocol/operation/NonQueryCompatibleOperation",
+                    "body": "",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "forbidHeaders": [
+                        "x-amzn-query-mode"
+                    ]
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,53 @@
+[
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2025-06-20",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblerpcv2protocol",
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "serviceFullName": "QueryCompatibleRpcV2Protocol",
+            "serviceId": "Query Compatible RpcV2 Protocol",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleRpcV2Protocol",
+            "targetPrefix": "QueryCompatibleRpcV2Protocol",
+            "uid": "query-compatible-rpcv2-protocol-2025-06-20"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "QueryCompatibleRpcV2CborSendsQueryModeHeader",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true
+                },
+                "description": "Clients for query-compatible services MUST send the x-amzn-query-mode header.",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/QueryCompatibleRpcV2Protocol/operation/QueryCompatibleOperation",
+                    "body": "",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor",
+                        "x-amzn-query-mode": "true"
+                    },
+                    "forbidHeaders": [
+                        "Content-Type",
+                        "X-Amz-Target"
+                    ]
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor.json 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor.json
--- 2.23.6-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/input/smithy-rpc-v2-cbor.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,988 @@
+[
+    {
+        "description": "Test cases for EmptyInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "EmptyStructure": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "empty_input",
+                "given": {
+                    "name": "EmptyInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "EmptyStructure"
+                    }
+                },
+                "description": "When Input structure is empty we write CBOR equivalent of {}",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/EmptyInputOutput",
+                    "body": "v/8=",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "forbidHeaders": [
+                        "X-Amz-Target"
+                    ],
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "no_input",
+                "given": {
+                    "name": "NoInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Body is empty and no Content-Type header if no input",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/NoInputOutput",
+                    "body": "",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "forbidHeaders": [
+                        "Content-Type",
+                        "X-Amz-Target"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OptionalInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "SimpleStructure": {
+                "type": "structure",
+                "members": {
+                    "value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "optional_input",
+                "given": {
+                    "name": "OptionalInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleStructure"
+                    }
+                },
+                "description": "When input is empty we write CBOR equivalent of {}",
+                "params": {},
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/OptionalInputOutput",
+                    "body": "v/8=",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "forbidHeaders": [
+                        "X-Amz-Target"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RecursiveShapesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborRecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RecursiveShapesInputOutput"
+                    }
+                },
+                "description": "Serializes recursive structures",
+                "params": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RecursiveShapes",
+                    "body": "v2ZuZXN0ZWS/Y2Zvb2RGb28xZm5lc3RlZL9jYmFyZEJhcjFvcmVjdXJzaXZlTWVtYmVyv2Nmb29kRm9vMmZuZXN0ZWS/Y2JhcmRCYXIy//////8=",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RpcV2CborDenseMaps operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RpcV2CborDenseMapsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "denseStructMap": {
+                        "shape": "DenseStructMap"
+                    },
+                    "denseNumberMap": {
+                        "shape": "DenseNumberMap"
+                    },
+                    "denseBooleanMap": {
+                        "shape": "DenseBooleanMap"
+                    },
+                    "denseStringMap": {
+                        "shape": "DenseStringMap"
+                    },
+                    "denseSetMap": {
+                        "shape": "DenseSetMap"
+                    }
+                }
+            },
+            "DenseStructMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "DenseNumberMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Integer"
+                }
+            },
+            "DenseBooleanMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Boolean"
+                }
+            },
+            "DenseStringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "DenseSetMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringSet"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborMaps",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Serializes maps",
+                "params": {
+                    "denseStructMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps",
+                    "body": "oW5kZW5zZVN0cnVjdE1hcKJjZm9voWJoaWV0aGVyZWNiYXqhYmhpY2J5ZQ==",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborSerializesZeroValuesInMaps",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Ensure that 0 and false are sent over the wire in all maps and lists",
+                "params": {
+                    "denseNumberMap": {
+                        "x": 0
+                    },
+                    "denseBooleanMap": {
+                        "x": false
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps",
+                    "body": "om5kZW5zZU51bWJlck1hcKFheABvZGVuc2VCb29sZWFuTWFwoWF49A==",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborSerializesDenseSetMap",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "A request that contains a dense map of sets.",
+                "params": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborDenseMaps",
+                    "body": "oWtkZW5zZVNldE1hcKJheIBheYJhYWFi",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RpcV2CborLists operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RpcV2CborListInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "structureList": {
+                        "shape": "StructureList"
+                    },
+                    "blobList": {
+                        "shape": "BlobList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember"
+                }
+            },
+            "BlobList": {
+                "type": "list",
+                "member": {
+                    "shape": "Blob"
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String"
+                    },
+                    "b": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborLists",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes RpcV2 Cbor lists",
+                "params": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ],
+                    "blobList": [
+                        "foo",
+                        "bar"
+                    ]
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborLists",
+                    "body": "v2pzdHJpbmdMaXN0gmNmb29jYmFyaXN0cmluZ1NldIJjZm9vY2JhcmtpbnRlZ2VyTGlzdIIBAmtib29sZWFuTGlzdIL19G10aW1lc3RhbXBMaXN0gsH7QdTX+/OAAADB+0HU1/vzgAAAaGVudW1MaXN0gmNGb29hMGtpbnRFbnVtTGlzdIIBAnBuZXN0ZWRTdHJpbmdMaXN0goJjZm9vY2JhcoJjYmF6Y3F1eG1zdHJ1Y3R1cmVMaXN0gqJhYWExYWJhMqJhYWEzYWJhNGhibG9iTGlzdIJDZm9vQ2Jhcv8=",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborListsEmpty",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes empty JSON lists",
+                "params": {
+                    "stringList": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborLists",
+                    "body": "v2pzdHJpbmdMaXN0n///",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborListsEmptyUsingDefiniteLength",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes empty JSON definite length lists",
+                "params": {
+                    "stringList": []
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/RpcV2CborLists",
+                    "body": "oWpzdHJpbmdMaXN0gA==",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "SimpleScalarStructure": {
+                "type": "structure",
+                "members": {
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborSimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Serializes simple scalar properties",
+                "params": {
+                    "byteValue": 5,
+                    "doubleValue": 1.889,
+                    "falseBooleanValue": false,
+                    "floatValue": 7.625,
+                    "integerValue": 256,
+                    "longValue": 9873,
+                    "shortValue": 9898,
+                    "stringValue": "simple",
+                    "trueBooleanValue": true,
+                    "blobValue": "foo"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/SimpleScalarProperties",
+                    "body": "v2lieXRlVmFsdWUFa2RvdWJsZVZhbHVl+z/+OVgQYk3TcWZhbHNlQm9vbGVhblZhbHVl9GpmbG9hdFZhbHVl+kD0AABsaW50ZWdlclZhbHVlGQEAaWxvbmdWYWx1ZRkmkWpzaG9ydFZhbHVlGSaqa3N0cmluZ1ZhbHVlZnNpbXBsZXB0cnVlQm9vbGVhblZhbHVl9WlibG9iVmFsdWVDZm9v/w==",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborClientDoesntSerializeNullStructureValues",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "RpcV2 Cbor should not serialize null structure values",
+                "params": {
+                    "stringValue": null
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/SimpleScalarProperties",
+                    "body": "v/8=",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "params": {
+                    "doubleValue": "NaN",
+                    "floatValue": "NaN"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/SimpleScalarProperties",
+                    "body": "v2tkb3VibGVWYWx1Zft/+AAAAAAAAGpmbG9hdFZhbHVl+n/AAAD/",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "doubleValue": "Infinity",
+                    "floatValue": "Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/SimpleScalarProperties",
+                    "body": "v2tkb3VibGVWYWx1Zft/8AAAAAAAAGpmbG9hdFZhbHVl+n+AAAD/",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "input": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "params": {
+                    "doubleValue": "-Infinity",
+                    "floatValue": "-Infinity"
+                },
+                "serialized": {
+                    "method": "POST",
+                    "uri": "/service/RpcV2Protocol/operation/SimpleScalarProperties",
+                    "body": "v2tkb3VibGVWYWx1Zfv/8AAAAAAAAGpmbG9hdFZhbHVl+v+AAAD/",
+                    "headers": {
+                        "Accept": "application/cbor",
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "requireHeaders": [
+                        "Content-Length"
+                    ]
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/input/ec2.json 2.31.35-1/tests/unit/botocore/protocols/legacy/input/ec2.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/input/ec2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/input/ec2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,531 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          },
+          "Bar": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Foo": "val1",
+          "Bar": "val2"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Structure with locationName and queryName applied to members",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          },
+          "Bar": {
+            "shape": "StringType",
+            "locationName": "barLocationName"
+          },
+          "Yuck": {
+            "shape": "StringType",
+            "locationName": "yuckLocationName",
+            "queryName": "yuckQueryName"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Foo": "val1",
+          "Bar": "val2",
+          "Yuck": "val3"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&BarLocationName=val2&yuckQueryName=val3"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Nested structure members",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "StructArg": {
+            "shape": "StructType",
+            "locationName": "Struct"
+          }
+        }
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+          "ScalarArg": {
+            "shape": "StringType",
+            "locationName": "Scalar"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "StructArg": {
+            "ScalarArg": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Struct.Scalar=foo"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List types",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListArg": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "Strings"
+        }
+      },
+      "Strings": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": [
+            "foo",
+            "bar",
+            "baz"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListArg.1=foo&ListArg.2=bar&ListArg.3=baz"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List with location name applied to member",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListArg": {
+            "shape": "ListType",
+            "locationName": "ListMemberName"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "LocationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": [
+            "a",
+            "b",
+            "c"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListMemberName.1=a&ListMemberName.2=b&ListMemberName.3=c"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List with locationName and queryName",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListArg": {
+            "shape": "ListType",
+            "locationName": "ListMemberName",
+            "queryName": "ListQueryName"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "LocationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": [
+            "a",
+            "b",
+            "c"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListQueryName.1=a&ListQueryName.2=b&ListQueryName.3=c"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Base64 encoded Blobs",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "BlobArg": {
+            "shape": "BlobType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BlobArg": "foo"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&BlobArg=Zm9v"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp values",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800,
+          "TimeCustom": 1422172800,
+          "TimeFormat": 1422172800
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&TimeArg=2015-01-25T08%3A00%3A00Z&TimeCustom=1422172800&TimeFormat=1422172800"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Idempotency token auto fill",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Token": {
+            "shape": "StringType",
+            "idempotencyToken": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Token": "abc123"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Token=abc123"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Token=00000000-0000-4000-8000-000000000000"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Endpoint host trait",
+    "metadata": {
+      "protocol": "ec2",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://service.region.amazonaws.com",
+    "shapes": {
+      "StaticInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "MemberRefInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType",
+            "hostLabel": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "StaticOp",
+          "input": {
+            "shape": "StaticInputShape"
+          },
+          "endpoint":{
+              "hostPrefix": "data-"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=StaticOp&Version=2014-01-01&Name=myname",
+          "host": "data-service.region.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "MemberRefOp",
+          "input": {
+            "shape": "MemberRefInputShape"
+          },
+          "endpoint":{
+              "hostPrefix": "foo-{Name}."
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=MemberRefOp&Version=2014-01-01&Name=myname",
+          "host": "foo-myname.service.region.amazonaws.com"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/input/json.json 2.31.35-1/tests/unit/botocore/protocols/legacy/input/json.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/input/json.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/input/json.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,906 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "body": "{\"Name\": \"myname\"}",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp values",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "rfc822",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800,
+          "TimeCustom": 1422172800,
+          "TimeFormat": 1422172800
+        },
+        "serialized": {
+          "body": "{\"TimeArg\": 1422172800, \"TimeCustom\": \"Sun, 25 Jan 2015 08:00:00 GMT\", \"TimeFormat\": \"Sun, 25 Jan 2015 08:00:00 GMT\"}",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Base64 encoded Blobs",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "BlobArg": {
+            "shape": "BlobType"
+          },
+          "BlobMap": {
+            "shape": "BlobMapType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      },
+      "BlobMapType": {
+        "type": "map",
+        "key": {"shape": "StringType"},
+        "value": {"shape": "BlobType"}
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BlobArg": "foo"
+        },
+        "serialized": {
+          "body": "{\"BlobArg\": \"Zm9v\"}",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BlobMap": {
+            "key1": "foo",
+            "key2": "bar"
+          }
+        },
+        "serialized": {
+          "body": "{\"BlobMap\": {\"key1\": \"Zm9v\", \"key2\": \"YmFy\"}}",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Nested blobs",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListOfStructures"
+          }
+        }
+      },
+      "ListOfStructures": {
+        "type": "list",
+        "member": {
+          "shape": "BlobType"
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": ["foo", "bar"]
+        },
+        "serialized": {
+          "body": "{\"ListParam\": [\"Zm9v\", \"YmFy\"]}",
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          }
+        }
+      }
+    ]
+  },
+  {
+    "description": "Recursive shapes",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          }
+        }
+      },
+      "RecursiveStructType": {
+        "type": "structure",
+        "members": {
+          "NoRecurse": {
+            "shape": "StringType"
+          },
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          },
+          "RecursiveList": {
+            "shape": "RecursiveListType"
+          },
+          "RecursiveMap": {
+            "shape": "RecursiveMapType"
+          }
+        }
+      },
+      "RecursiveListType": {
+        "type": "list",
+        "member": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "RecursiveMapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "NoRecurse": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "NoRecurse": "foo"
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "RecursiveStruct": {
+                "RecursiveStruct": {
+                  "NoRecurse": "foo"
+                }
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "NoRecurse": "bar"
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"NoRecurse\": \"bar\"}]}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "RecursiveStruct": {
+                  "NoRecurse": "bar"
+                }
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"RecursiveStruct\": {\"NoRecurse\": \"bar\"}}]}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveMap": {
+              "foo": {
+                "NoRecurse": "foo"
+              },
+              "bar": {
+                "NoRecurse": "bar"
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "body": "{\"RecursiveStruct\": {\"RecursiveMap\": {\"foo\": {\"NoRecurse\": \"foo\"}, \"bar\": {\"NoRecurse\": \"bar\"}}}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Empty maps",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "Map": {}
+        },
+        "serialized": {
+          "body": "{\"Map\": {}}",
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Idempotency token auto fill",
+    "metadata": {
+      "protocol": "json",
+      "apiVersion": "2014-01-01",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Token": {
+            "shape": "StringType",
+            "idempotencyToken": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Token": "abc123"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {},
+          "body": "{\"Token\": \"abc123\"}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {},
+          "body": "{\"Token\": \"00000000-0000-4000-8000-000000000000\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Endpoint host trait static prefix",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "clientEndpoint": "https://service.region.amazonaws.com",
+    "shapes": {
+      "StaticInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "MemberRefInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType",
+            "hostLabel": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "StaticOp",
+          "input": {
+            "shape": "StaticInputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "endpoint":{
+              "hostPrefix": "data-"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.StaticOp",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"Name\": \"myname\"}",
+          "host": "data-service.region.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "MemberRefOp",
+          "input": {
+            "shape": "MemberRefInputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "endpoint":{
+              "hostPrefix": "foo-{Name}."
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.MemberRefOp",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"Name\": \"myname\"}",
+          "host": "foo-myname.service.region.amazonaws.com"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes document with standalone primitive type in a JSON request.",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+            "inlineDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": "foo"
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": \"foo\"}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": 123
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": 123}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": 1.2
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": 1.2}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": true
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": true}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": ""
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": \"\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes inline document in a JSON request.",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+            "inlineDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "inlineDocument": {"foo": "bar"}
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"inlineDocument\": {\"foo\": \"bar\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes aggregate documents in a JSON request.",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.1",
+      "targetPrefix": "com.amazonaws.foo"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+            "parentDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "parentDocument": {
+              "str": "test",
+              "num": 123,
+              "float": 1.2,
+              "bool": true,
+              "null": "",
+              "document": {"foo": false},
+              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
+          }
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"parentDocument\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName",
+          "http": {
+            "method": "POST"
+          }
+        },
+        "params": {
+          "parentDocument": [
+              "test",
+              123,
+              1.2,
+              true,
+              "",
+              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
+              ["foo", false]
+          ]
+        },
+        "serialized": {
+          "headers": {
+            "X-Amz-Target": "com.amazonaws.foo.OperationName",
+            "Content-Type": "application/x-amz-json-1.1"
+          },
+          "uri": "/",
+          "body": "{\"parentDocument\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/input/query.json 2.31.35-1/tests/unit/botocore/protocols/legacy/input/query.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/input/query.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/input/query.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1002 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          },
+          "Bar": {
+            "shape": "StringType"
+          },
+          "Baz": {
+            "shape": "BooleanType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Foo": "val1",
+          "Bar": "val2"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Baz": true
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Baz=true"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Baz": false
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Baz=false"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Nested structure members",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "StructArg": {
+            "shape": "StructType"
+          }
+        }
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+          "ScalarArg": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "StructArg": {
+            "ScalarArg": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&StructArg.ScalarArg=foo"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List types",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListArg": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "Strings"
+        }
+      },
+      "Strings": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": [
+            "foo",
+            "bar",
+            "baz"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListArg.member.1=foo&ListArg.member.2=bar&ListArg.member.3=baz"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": []
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListArg="
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened list",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ScalarArg": {
+            "shape": "StringType"
+          },
+          "ListArg": {
+            "shape": "ListType"
+          },
+          "NamedListArg": {
+            "shape": "NamedListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        },
+        "flattened": true
+      },
+      "NamedListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "Foo"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ScalarArg": "foo",
+          "ListArg": [
+            "a",
+            "b",
+            "c"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ScalarArg=foo&ListArg.1=a&ListArg.2=b&ListArg.3=c"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "NamedListArg": [
+            "a"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Foo.1=a"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize flattened map type",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "MapArg": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "MapArg": {
+            "key1": "val1",
+            "key2": "val2"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&MapArg.1.key=key1&MapArg.1.value=val1&MapArg.2.key=key2&MapArg.2.value=val2"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Non flattened list with LocationName",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListArg": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListArg": [
+            "a",
+            "b",
+            "c"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ListArg.item.1=a&ListArg.item.2=b&ListArg.item.3=c"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened list with LocationName",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ScalarArg": {
+            "shape": "StringType"
+          },
+          "ListArg": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "ListArgLocation"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ScalarArg": "foo",
+          "ListArg": [
+            "a",
+            "b",
+            "c"
+          ]
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&ScalarArg=foo&ListArgLocation.1=a&ListArgLocation.2=b&ListArgLocation.3=c"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize map type",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "MapArg": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "MapArg": {
+            "key1": "val1",
+            "key2": "val2"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&MapArg.entry.1.key=key1&MapArg.entry.1.value=val1&MapArg.entry.2.key=key2&MapArg.entry.2.value=val2"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize map type with locationName",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "MapArg": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType",
+          "locationName": "TheKey"
+        },
+        "value": {
+          "shape": "StringType",
+          "locationName": "TheValue"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "MapArg": {
+            "key1": "val1",
+            "key2": "val2"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&MapArg.entry.1.TheKey=key1&MapArg.entry.1.TheValue=val1&MapArg.entry.2.TheKey=key2&MapArg.entry.2.TheValue=val2"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Base64 encoded Blobs",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "BlobArg": {
+            "shape": "BlobType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BlobArg": "foo"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&BlobArg=Zm9v"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp values",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800,
+          "TimeCustom": 1422172800,
+          "TimeFormat": 1422172800
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&TimeArg=2015-01-25T08%3A00%3A00Z&TimeCustom=1422172800&TimeFormat=1422172800"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Recursive shapes",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          }
+        }
+      },
+      "RecursiveStructType": {
+        "type": "structure",
+        "members": {
+          "NoRecurse": {
+            "shape": "StringType"
+          },
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          },
+          "RecursiveList": {
+            "shape": "RecursiveListType"
+          },
+          "RecursiveMap": {
+            "shape": "RecursiveMapType"
+          }
+        }
+      },
+      "RecursiveListType": {
+        "type": "list",
+        "member": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "RecursiveMapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "NoRecurse": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.NoRecurse=foo"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "NoRecurse": "foo"
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveStruct.NoRecurse=foo"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "RecursiveStruct": {
+                "RecursiveStruct": {
+                  "NoRecurse": "foo"
+                }
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveStruct.RecursiveStruct.RecursiveStruct.NoRecurse=foo"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "NoRecurse": "bar"
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveList.member.1.NoRecurse=foo&RecursiveStruct.RecursiveList.member.2.NoRecurse=bar"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "RecursiveStruct": {
+                  "NoRecurse": "bar"
+                }
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveList.member.1.NoRecurse=foo&RecursiveStruct.RecursiveList.member.2.RecursiveStruct.NoRecurse=bar"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveMap": {
+              "foo": {
+                "NoRecurse": "foo"
+              },
+              "bar": {
+                "NoRecurse": "bar"
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&RecursiveStruct.RecursiveMap.entry.1.key=foo&RecursiveStruct.RecursiveMap.entry.1.value.NoRecurse=foo&RecursiveStruct.RecursiveMap.entry.2.key=bar&RecursiveStruct.RecursiveMap.entry.2.value.NoRecurse=bar"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Idempotency token auto fill",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Token": {
+            "shape": "StringType",
+            "idempotencyToken": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Token": "abc123"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Token=abc123"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=OperationName&Version=2014-01-01&Token=00000000-0000-4000-8000-000000000000"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Endpoint host trait",
+    "metadata": {
+      "protocol": "query",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://service.region.amazonaws.com",
+    "shapes": {
+      "StaticInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "MemberRefInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType",
+            "hostLabel": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "StaticOp",
+          "input": {
+            "shape": "StaticInputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "endpoint":{
+              "hostPrefix": "data-"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=StaticOp&Version=2014-01-01&Name=myname",
+          "host": "data-service.region.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "MemberRefOp",
+          "input": {
+            "shape": "MemberRefInputShape"
+          },
+          "http": {
+            "method": "POST"
+          },
+          "endpoint":{
+              "hostPrefix": "foo-{Name}."
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/",
+          "headers": {
+              "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
+          },
+          "body": "Action=MemberRefOp&Version=2014-01-01&Name=myname",
+          "host": "foo-myname.service.region.amazonaws.com"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/input/rest-json.json 2.31.35-1/tests/unit/botocore/protocols/legacy/input/rest-json.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/input/rest-json.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/input/rest-json.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,2191 @@
+[
+  {
+    "description": "No parameters",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {},
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobs"
+          },
+          "name": "OperationName"
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobs",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "URI parameter only with no location name",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo"
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/foo",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "URI parameter only with location name",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "PipelineId"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Foo": "bar"
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/bar",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Querystring list of strings",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Items": {
+            "shape": "StringList",
+            "location": "querystring",
+            "locationName": "item"
+          }
+        }
+      },
+      "StringList": {
+        "type": "list",
+        "member": {
+          "shape": "String"
+        }
+      },
+      "String": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Items": ["value1", "value2"]
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?item=value1&item=value2",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "String to string maps in querystring",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri"
+          },
+          "QueryDoc": {
+            "shape": "MapStringStringType",
+            "location": "querystring"
+          }
+        }
+      },
+      "MapStringStringType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo",
+          "QueryDoc": {
+            "bar": "baz",
+            "fizz": "buzz"
+          }
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/foo?bar=baz&fizz=buzz",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "String to string list maps in querystring",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri"
+          },
+          "QueryDoc": {
+            "shape": "MapStringStringListType",
+            "location": "querystring"
+          }
+        }
+      },
+      "MapStringStringListType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringListType"
+        }
+      },
+      "StringListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "id",
+          "QueryDoc": {
+            "foo": ["bar", "baz"],
+            "fizz": ["buzz", "pop"]
+          }
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/id?foo=bar&foo=baz&fizz=buzz&fizz=pop",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Boolean in querystring",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "BoolQuery": {
+            "shape": "BoolType",
+            "location": "querystring",
+            "locationName": "bool-query"
+          }
+        }
+      },
+      "BoolType": {
+        "type": "boolean"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BoolQuery": true
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?bool-query=true",
+          "headers": {}
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BoolQuery": false
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?bool-query=false",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "URI parameter and querystring params",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "PipelineId"
+          },
+          "Ascending": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "Ascending"
+          },
+          "PageToken": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "PageToken"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo",
+          "Ascending": "true",
+          "PageToken": "bar"
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "URI parameter, querystring params and JSON body",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "PipelineId"
+          },
+          "Ascending": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "Ascending"
+          },
+          "PageToken": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "PageToken"
+          },
+          "Config": {
+            "shape": "StructType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+          "A": {
+            "shape": "StringType"
+          },
+          "B": {
+            "shape": "StringType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo",
+          "Ascending": "true",
+          "PageToken": "bar",
+          "Config": {
+            "A": "one",
+            "B": "two"
+          }
+        },
+        "serialized": {
+          "body": "{\"Config\": {\"A\": \"one\", \"B\": \"two\"}}",
+          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "URI parameter, querystring params, headers and JSON body",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "PipelineId"
+          },
+          "Ascending": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "Ascending"
+          },
+          "Checksum": {
+            "shape": "StringType",
+            "location": "header",
+            "locationName": "x-amz-checksum"
+          },
+          "PageToken": {
+            "shape": "StringType",
+            "location": "querystring",
+            "locationName": "PageToken"
+          },
+          "Config": {
+            "shape": "StructType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+          "A": {
+            "shape": "StringType"
+          },
+          "B": {
+            "shape": "StringType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo",
+          "Ascending": "true",
+          "Checksum": "12345",
+          "PageToken": "bar",
+          "Config": {
+            "A": "one",
+            "B": "two"
+          }
+        },
+        "serialized": {
+          "body": "{\"Config\": {\"A\": \"one\", \"B\": \"two\"}}",
+          "uri": "/2014-01-01/jobsByPipeline/foo?Ascending=true&PageToken=bar",
+          "headers": {
+            "x-amz-checksum": "12345"
+          }
+        }
+      }
+    ]
+  },
+  {
+    "description": "Streaming payload",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "vaultName": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "vaultName"
+          },
+          "checksum": {
+            "shape": "StringType",
+            "location": "header",
+            "locationName": "x-amz-sha256-tree-hash"
+          },
+          "body": {
+            "shape": "Stream"
+          }
+        },
+        "required": [
+          "vaultName"
+        ],
+        "payload": "body"
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "Stream": {
+        "type": "blob",
+        "streaming": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/vaults/{vaultName}/archives"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "vaultName": "name",
+          "checksum": "foo",
+          "body": "contents"
+        },
+        "serialized": {
+          "body": "contents",
+          "uri": "/2014-01-01/vaults/name/archives",
+          "headers": {
+            "x-amz-sha256-tree-hash": "foo"
+          }
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize blobs in body",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType",
+            "location": "uri",
+            "locationName": "Foo"
+          },
+          "Bar": {"shape": "BlobType"}
+        },
+        "required": [
+          "Foo"
+        ]
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/{Foo}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Foo": "foo_name",
+          "Bar": "Blob param"
+        },
+        "serialized": {
+          "body": "{\"Bar\": \"QmxvYiBwYXJhbQ==\"}",
+          "uri": "/2014-01-01/foo_name"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob payload",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        }
+      },
+      "FooShape": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "payload": "foo"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": "bar"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "bar",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "payload": "foo"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Structure payload",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        }
+      },
+      "FooShape": {
+        "locationName": "foo",
+        "type": "structure",
+        "members": {
+          "baz": {
+            "shape": "BazShape"
+          }
+        }
+      },
+      "BazShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "payload": "foo"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": {
+            "baz": "bar"
+          }
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "{\"baz\": \"bar\"}",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "payload": "foo"
+          },
+          "name": "OperationName"
+        },
+        "params": {},
+        "serialized": {
+          "method": "POST",
+          "body": "{}",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Omits null query params, but serializes empty strings",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "location":"querystring",
+            "locationName":"param-name",
+            "shape": "Foo"
+          }
+        }
+      },
+      "Foo": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "OperationName",
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "input": { "shape": "InputShape" }
+        },
+        "params": { "foo": null },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/path"
+        }
+      },
+      {
+        "given": {
+          "name": "OperationName",
+          "http": {
+            "method": "POST",
+            "requestUri": "/path?abc=mno"
+          },
+          "input": { "shape": "InputShape" }
+        },
+        "params": { "foo": "" },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/path?abc=mno&param-name="
+        }
+      }
+    ]
+  },
+  {
+    "description": "Recursive shapes",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          }
+        }
+      },
+      "RecursiveStructType": {
+        "type": "structure",
+        "members": {
+          "NoRecurse": {
+            "shape": "StringType"
+          },
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          },
+          "RecursiveList": {
+            "shape": "RecursiveListType"
+          },
+          "RecursiveMap": {
+            "shape": "RecursiveMapType"
+          }
+        }
+      },
+      "RecursiveListType": {
+        "type": "list",
+        "member": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "RecursiveMapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "NoRecurse": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/path" ,
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "NoRecurse": "foo"
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "RecursiveStruct": {
+                "RecursiveStruct": {
+                  "NoRecurse": "foo"
+                }
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"RecursiveStruct\": {\"NoRecurse\": \"foo\"}}}}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "NoRecurse": "bar"
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"NoRecurse\": \"bar\"}]}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "RecursiveStruct": {
+                  "NoRecurse": "bar"
+                }
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"RecursiveList\": [{\"NoRecurse\": \"foo\"}, {\"RecursiveStruct\": {\"NoRecurse\": \"bar\"}}]}}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveMap": {
+              "foo": {
+                "NoRecurse": "foo"
+              },
+              "bar": {
+                "NoRecurse": "bar"
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"RecursiveStruct\": {\"RecursiveMap\": {\"foo\": {\"NoRecurse\": \"foo\"}, \"bar\": {\"NoRecurse\": \"bar\"}}}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp values",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeArgInHeader": {
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timearg"
+          },
+          "TimeArgInQuery": {
+            "shape": "TimestampType",
+            "location": "querystring",
+            "locationName": "TimeQuery"
+          },
+          "TimeCustom": {
+            "timestampFormat": "iso8601",
+            "shape": "TimestampType"
+          },
+          "TimeCustomInHeader": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timecustom-header"
+          },
+          "TimeCustomInQuery": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "querystring",
+            "locationName": "TimeCustomQuery"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatRfcType"
+          },
+          "TimeFormatInHeader": {
+            "shape": "TimestampFormatUnixType",
+            "location": "header",
+            "locationName": "x-amz-timeformat-header"
+          },
+          "TimeFormatInQuery": {
+            "shape": "TimestampFormatUnixType",
+            "location": "querystring",
+            "locationName": "TimeFormatQuery"
+          }
+        }
+      },
+      "TimestampFormatRfcType": {
+        "timestampFormat": "rfc822",
+        "type": "timestamp"
+      },
+      "TimestampFormatUnixType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800,
+          "TimeArgInQuery": 1422172800,
+          "TimeArgInHeader": 1422172800,
+          "TimeCustom": 1422172800,
+          "TimeCustomInQuery": 1422172800,
+          "TimeCustomInHeader": 1422172800,
+          "TimeFormat": 1422172800,
+          "TimeFormatInQuery": 1422172800,
+          "TimeFormatInHeader": 1422172800
+        },
+        "serialized": {
+          "uri": "/path?TimeQuery=2015-01-25T08%3A00%3A00Z&TimeCustomQuery=1422172800&TimeFormatQuery=1422172800",
+          "headers": {
+            "x-amz-timearg": "Sun, 25 Jan 2015 08:00:00 GMT",
+            "x-amz-timecustom-header": "1422172800",
+            "x-amz-timeformat-header": "1422172800"
+          },
+          "body": "{\"TimeArg\": 1422172800, \"TimeCustom\": \"2015-01-25T08:00:00Z\", \"TimeFormat\": \"Sun, 25 Jan 2015 08:00:00 GMT\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Named locations in JSON body",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType",
+            "locationName": "timestamp_location"
+          }
+        }
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"timestamp_location\": 1422172800}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "String payload",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        }
+      },
+      "FooShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "payload": "foo"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": "bar"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "bar",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Idempotency token auto fill",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Token": {
+            "shape": "StringType",
+            "idempotencyToken": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Token": "abc123"
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"Token\": \"abc123\"}"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "{\"Token\": \"00000000-0000-4000-8000-000000000000\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "JSON value trait",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Attr": {
+            "shape": "StringType",
+              "jsonvalue": true,
+              "location": "header",
+              "locationName": "X-Amz-Foo"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Attr": {"Foo":"Bar"}
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
+          "body": ""
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Endpoint host trait",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://service.region.amazonaws.com",
+    "shapes": {
+      "StaticInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "MemberRefInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType",
+            "hostLabel": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "StaticOp",
+          "input": {
+            "shape": "StaticInputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "endpoint":{
+              "hostPrefix": "data-"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "{\"Name\": \"myname\"}",
+          "host": "data-service.region.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "MemberRefOp",
+          "input": {
+            "shape": "MemberRefInputShape"
+          },
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "endpoint":{
+              "hostPrefix": "foo-{Name}."
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "{\"Name\": \"myname\"}",
+          "host": "foo-myname.service.region.amazonaws.com"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes document with standalone primitive as part of the JSON request payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "documentValue": {
+            "shape": "DocumentType"
+          }
+        }
+      },
+      "DocumentType": {
+        "type": "structure",
+        "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": "foo"
+        },
+        "serialized": {
+          "body": "{\"documentValue\": \"foo\"}",
+          "uri": "/InlineDocument"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": 123
+        },
+        "serialized": {
+          "body": "{\"documentValue\": 123}",
+          "uri": "/InlineDocument"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": 1.2
+        },
+        "serialized": {
+          "body": "{\"documentValue\": 1.2}",
+          "uri": "/InlineDocument"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": true
+        },
+        "serialized": {
+          "body": "{\"documentValue\": true}",
+          "uri": "/InlineDocument"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": ""
+        },
+        "serialized": {
+          "body": "{\"documentValue\": \"\"}",
+          "uri": "/InlineDocument"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes inline documents as part of the JSON request payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "documentValue": {
+            "shape": "DocumentType"
+          }
+        }
+      },
+      "DocumentType": {
+        "type": "structure",
+        "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": {"foo": "bar"}
+        },
+        "serialized": {
+          "body": "{\"documentValue\": {\"foo\": \"bar\"}}",
+          "uri": "/InlineDocument"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes aggregate documents as part of the JSON request payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "documentValue": {
+            "shape": "DocumentType"
+          }
+        }
+      },
+      "DocumentType": {
+        "type": "structure",
+        "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": {
+              "str": "test",
+              "num": 123,
+              "float": 1.2,
+              "bool": true,
+              "null": "",
+              "document": {"foo": false},
+              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
+          }
+        },
+        "serialized": {
+          "body": "{\"documentValue\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}",
+          "uri": "/InlineDocument"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/InlineDocument"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "documentValue": [
+              "test",
+              123,
+              1.2,
+              true,
+              "",
+              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
+              ["foo", false]
+          ]
+        },
+        "serialized": {
+          "body": "{\"documentValue\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}",
+          "uri": "/InlineDocument"
+        }
+      }
+    ]
+      },
+  {
+    "description": "Content-Type and JSON body",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://rest-json-test.amazonaws.com",
+    "shapes":{
+      "Integer":{
+        "type":"integer"
+      },
+      "String":{"type":"string"},
+      "Blob":{"type":"blob"},
+      "NoPayloadRequest":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "testId":{
+            "shape":"TestId",
+            "documentation":"<p> The unique ID for a test. </p>",
+            "location":"header",
+            "locationName":"x-amz-test-id"
+          }
+        },
+        "documentation":"<p> The request structure for a no payload request. </p>"
+      },
+      "TestId":{
+        "type":"string",
+        "max":8,
+        "min":3,
+        "pattern":"t-[a-z0-9-]+"
+      },
+      "TestConfig":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "timeout":{
+            "shape":"Integer",
+            "documentation":"<p> Timeout in seconds </p>"
+          }
+        }
+      },
+      "PayloadConfig":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "data":{
+            "shape":"Integer",
+            "documentation":"<p> Numerical data </p>"
+          }
+        }
+      },
+      "TestBodyRequest":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "testConfig":{
+            "shape":"TestConfig",
+            "documentation":"<p> Content to post </p>"
+          },
+          "testId":{
+            "shape":"TestId",
+            "documentation":"<p> Optional test identifier </p>",
+            "location":"header",
+            "locationName":"x-amz-test-id"
+          }
+        },
+        "documentation":"<p> The request structure for a test body request. </p>"
+      },
+      "TestPayloadRequest":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "payloadConfig":{
+            "shape":"PayloadConfig",
+            "documentation":"<p> Payload to post </p>"
+          },
+          "testId":{
+            "shape":"TestId",
+            "documentation":"<p> Optional test identifier </p>",
+            "location":"header",
+            "locationName":"x-amz-test-id"
+          }
+        },
+        "documentation":"<p> The request structure for a payload request. </p>",
+        "payload":"payloadConfig"
+      },
+      "TestBlobPayloadRequest":{
+        "type":"structure",
+        "required":[],
+        "members":{
+          "data":{
+            "shape":"Blob",
+            "documentation":"<p> Blob payload to post </p>"
+          },
+          "contentType":{
+            "shape":"String",
+            "documentation":"<p> Optional content-type header </p>",
+            "location":"header",
+            "locationName":"Content-Type"
+          }
+        },
+        "documentation":"<p> The request structure for a blob payload request. </p>",
+        "payload":"data"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "TestBody",
+          "input": {
+            "shape": "TestBodyRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/body"
+          }
+        },
+        "params": {
+          "testConfig": {
+            "timeout": 10
+          },
+          "testId": "t-12345"
+        },
+        "serialized": {
+          "uri": "/body",
+          "body": "{\"testConfig\": {\"timeout\": 10}}",
+          "headers": {
+            "x-amz-test-id": "t-12345",
+            "Content-Type": "application/json"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestBodyNoParams",
+          "input": {
+            "shape": "TestBodyRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/body"
+          }
+        },
+        "params": {},
+        "serialized": {
+          "uri": "/body",
+          "body": "{}",
+          "headers": {
+            "Content-Type": "application/json"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestPayloadNoParams",
+          "input": {
+            "shape": "TestPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/payload"
+          }
+        },
+        "params": {},
+        "serialized": {
+          "uri": "/payload",
+          "body": "{}",
+          "headers": {
+            "Content-Type": "application/json"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestPayload",
+          "input": {
+            "shape": "TestPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/payload"
+          }
+        },
+        "params": {
+          "payloadConfig": {
+            "data": 25
+          },
+          "testId": "t-12345"
+        },
+        "serialized": {
+          "uri": "/payload",
+          "body": "{\"data\": 25}",
+          "headers": {
+            "x-amz-test-id": "t-12345",
+            "Content-Type": "application/json"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestPayloadNoBody",
+          "input": {
+            "shape": "TestPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/payload"
+          }
+        },
+        "params": {
+          "testId": "t-12345"
+        },
+        "serialized": {
+          "uri": "/payload",
+          "body": "{}",
+          "headers": {
+            "x-amz-test-id": "t-12345",
+            "Content-Type": "application/json"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestBlobPayload",
+          "input": {
+            "shape": "TestBlobPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/blob-payload"
+          }
+        },
+        "params": {
+          "data": "1234",
+          "contentType": "image/jpg"
+        },
+        "serialized": {
+          "uri": "/blob-payload",
+          "body": "1234",
+          "headers": {
+            "Content-Type": "image/jpg"
+          },
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestBlobPayloadNoContentType",
+          "input": {
+            "shape": "TestBlobPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/blob-payload"
+          }
+        },
+        "params": {
+          "data": "1234"
+        },
+        "serialized": {
+          "uri": "/blob-payload",
+          "body": "1234",
+          "forbidHeaders": ["Content-Length"],
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "TestBlobPayloadNoParams",
+          "input": {
+            "shape": "TestBlobPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/blob-payload"
+          }
+        },
+        "params": {},
+        "serialized": {
+          "uri": "/blob-payload",
+          "body": "",
+          "headers": {"Content-Type": "application/octet-stream"},
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "NoPayload",
+          "input": {
+            "shape": "NoPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/no-payload"
+          }
+        },
+        "params": {},
+        "serialized": {
+          "uri": "/no-payload",
+          "body": "",
+          "forbidHeaders": [
+            "Content-Type",
+            "Content-Length"
+          ],
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "NoPayloadWithHeader",
+          "input": {
+            "shape": "NoPayloadRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/no-payload"
+          }
+        },
+        "params": {
+          "testId": "t-12345"
+        },
+        "serialized": {
+          "uri": "/no-payload",
+          "body": "",
+          "headers": {
+              "x-amz-test-id": "t-12345"
+          },
+          "forbidHeaders": [
+            "Content-Type",
+            "Content-Length"
+          ],
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "NoPayloadGET",
+          "input": {
+            "shape": "NoPayloadRequest"
+          },
+          "http": {
+            "method": "GET",
+            "requestUri": "/no-payload"
+          }
+        },
+        "params": {},
+        "serialized": {
+          "uri": "/no-payload",
+          "body": "",
+          "forbidHeaders": [
+            "Content-Type",
+            "Content-Length"
+          ],
+          "host": "rest-json-test.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "NoPayloadWithHeaderGET",
+          "input": {
+            "shape": "NoPayloadRequest"
+          },
+          "http": {
+            "method": "GET",
+            "requestUri": "/no-payload"
+          }
+        },
+        "params": {
+          "testId": "t-12345"
+        },
+        "serialized": {
+          "uri": "/no-payload",
+          "body": "",
+          "headers": {
+              "x-amz-test-id": "t-12345"
+          },
+          "forbidHeaders": [
+            "Content-Type",
+            "Content-Length"
+          ],
+          "host": "rest-json-test.amazonaws.com"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List in header",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://rest-json-test.amazonaws.com",
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape",
+            "location": "header",
+            "locationName": "x-amz-list-param"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "EnumType"
+        }
+      },
+      "EnumType": {
+        "type": "string",
+        "enum": ["one", "two", "three"]
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/example"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/2014-01-01/example",
+          "headers": {
+            "x-amz-list-param": "one,two,three"
+          }
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/example"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": []
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/2014-01-01/example",
+          "headers": {},
+          "forbidHeaders": ["x-amz-list-param"]
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/input/rest-xml.json 2.31.35-1/tests/unit/botocore/protocols/legacy/input/rest-xml.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/input/rest-xml.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/input/rest-xml.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1976 @@
+[
+  {
+    "description": "Basic XML serialization",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          },
+          "Description": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Name": "foo",
+          "Description": "bar"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><Name>foo</Name><Description>bar</Description></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "PUT",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Name": "foo",
+          "Description": "bar"
+        },
+        "serialized": {
+          "method": "PUT",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><Name>foo</Name><Description>bar</Description></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "name": "OperationName"
+        },
+        "params": {},
+        "serialized": {
+          "method": "GET",
+          "body": "",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize other scalar types",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "First": {
+            "shape": "BoolType"
+          },
+          "Second": {
+            "shape": "BoolType"
+          },
+          "Third": {
+            "shape": "FloatType"
+          },
+          "Fourth": {
+            "shape": "IntegerType"
+          }
+        }
+      },
+      "BoolType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "IntegerType": {
+        "type": "integer"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "First": true,
+          "Second": false,
+          "Third": 1.2,
+          "Fourth": 3
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><First>true</First><Second>false</Second><Third>1.2</Third><Fourth>3</Fourth></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Nested structures",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "SubStructure": {
+            "shape": "SubStructure"
+          },
+          "Description": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "SubStructure": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          },
+          "Bar": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "SubStructure": {
+            "Foo": "a",
+            "Bar": "b"
+          },
+          "Description": "baz"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure><Foo>a</Foo><Bar>b</Bar></SubStructure><Description>baz</Description></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "SubStructure": {
+            "Foo": "a",
+            "Bar": null
+          },
+          "Description": "baz"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure><Foo>a</Foo></SubStructure><Description>baz</Description></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Nested structures",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "SubStructure": {
+            "shape": "SubStructure"
+          },
+          "Description": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "SubStructure": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          },
+          "Bar": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "SubStructure": {},
+          "Description": "baz"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><SubStructure /><Description>baz</Description></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Non flattened lists",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><ListParam><member>one</member><member>two</member><member>three</member></ListParam></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Non flattened lists with locationName",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape",
+            "locationName": "AlternateName"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "NotMember"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><AlternateName><NotMember>one</NotMember><NotMember>two</NotMember><NotMember>three</NotMember></AlternateName></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened lists",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><ListParam>one</ListParam><ListParam>two</ListParam><ListParam>three</ListParam></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened lists with locationName",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape",
+            "locationName": "item"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><item>one</item><item>two</item><item>three</item></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "List of structures",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape",
+            "locationName": "item"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "SingleFieldStruct"
+        },
+        "flattened": true
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "SingleFieldStruct": {
+        "type": "structure",
+        "members": {
+          "Element": {
+            "shape": "StringType",
+            "locationName": "value"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            {
+              "Element": "one"
+            },
+            {
+              "Element": "two"
+            },
+            {
+              "Element": "three"
+            }
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><item><value>one</value></item><item><value>two</value></item><item><value>three</value></item></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob shapes",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "StructureParam": {
+            "shape": "StructureShape"
+          }
+        }
+      },
+      "StructureShape": {
+        "type": "structure",
+        "members": {
+          "b": {
+            "shape": "BShape"
+          }
+        }
+      },
+      "BShape": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "StructureParam": {
+            "b": "foo"
+          }
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><StructureParam><b>Zm9v</b></StructureParam></OperationRequest>",
+          "uri": "/2014-01-01/hostedzone",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp shapes",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeArgInHeader": {
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timearg"
+          },
+          "TimeArgInQuery": {
+            "shape": "TimestampType",
+            "location": "querystring",
+            "locationName": "TimeQuery"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeCustomInHeader": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timecustom-header"
+          },
+          "TimeCustomInQuery": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "querystring",
+            "locationName": "TimeCustomQuery"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatRfcType"
+          },
+          "TimeFormatInHeader": {
+            "shape": "TimestampFormatUnixType",
+            "location": "header",
+            "locationName": "x-amz-timeformat-header"
+          },
+          "TimeFormatInQuery": {
+            "shape": "TimestampFormatUnixType",
+            "location": "querystring",
+            "locationName": "TimeFormatQuery"
+          }
+        }
+      },
+      "TimestampFormatRfcType": {
+        "timestampFormat": "rfc822",
+        "type": "timestamp"
+      },
+      "TimestampFormatUnixType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/hostedzone"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "TimestampStructure",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "TimeArg": 1422172800,
+          "TimeArgInQuery": 1422172800,
+          "TimeArgInHeader": 1422172800,
+          "TimeCustom": 1422172800,
+          "TimeCustomInQuery": 1422172800,
+          "TimeCustomInHeader": 1422172800,
+          "TimeFormat": 1422172800,
+          "TimeFormatInQuery": 1422172800,
+          "TimeFormatInHeader": 1422172800
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<TimestampStructure xmlns=\"https://foo/\"><TimeArg>2015-01-25T08:00:00Z</TimeArg><TimeCustom>Sun, 25 Jan 2015 08:00:00 GMT</TimeCustom><TimeFormat>Sun, 25 Jan 2015 08:00:00 GMT</TimeFormat></TimestampStructure>",
+          "uri": "/2014-01-01/hostedzone?TimeQuery=2015-01-25T08%3A00%3A00Z&TimeCustomQuery=1422172800&TimeFormatQuery=1422172800",
+          "headers": {
+            "x-amz-timearg": "Sun, 25 Jan 2015 08:00:00 GMT",
+            "x-amz-timecustom-header": "1422172800",
+            "x-amz-timeformat-header": "1422172800"
+          }
+        }
+      }
+    ]
+  },
+  {
+    "description": "Header maps",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        }
+      },
+      "FooShape": {
+        "type": "map",
+        "location": "headers",
+        "locationName": "x-foo-",
+        "key": {
+          "shape": "FooKeyValue"
+        },
+        "value": {
+          "shape": "FooKeyValue"
+        }
+      },
+      "FooKeyValue": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": {
+            "a": "b",
+            "c": "d"
+          }
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/",
+          "headers": {
+            "x-foo-a": "b",
+            "x-foo-c": "d"
+          }
+        }
+      }
+    ]
+  },
+  {
+    "description": "Querystring list of strings",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Items": {
+            "shape": "StringList",
+            "location": "querystring",
+            "locationName": "item"
+          }
+        }
+      },
+      "StringList": {
+        "type": "list",
+        "member": {
+          "shape": "String"
+        }
+      },
+      "String": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Items": ["value1", "value2"]
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?item=value1&item=value2",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "String to string maps in querystring",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri"
+          },
+          "QueryDoc": {
+            "shape": "MapStringStringType",
+            "location": "querystring"
+          }
+        }
+      },
+      "MapStringStringType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "foo",
+          "QueryDoc": {
+            "bar": "baz",
+            "fizz": "buzz"
+          }
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/foo?bar=baz&fizz=buzz",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "String to string list maps in querystring",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "PipelineId": {
+            "shape": "StringType",
+            "location": "uri"
+          },
+          "QueryDoc": {
+            "shape": "MapStringStringListType",
+            "location": "querystring"
+          }
+        }
+      },
+      "MapStringStringListType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringListType"
+        }
+      },
+      "StringListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/2014-01-01/jobsByPipeline/{PipelineId}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "PipelineId": "id",
+          "QueryDoc": {
+            "foo": ["bar", "baz"],
+            "fizz": ["buzz", "pop"]
+          }
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/2014-01-01/jobsByPipeline/id?foo=bar&foo=baz&fizz=buzz&fizz=pop",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "Boolean in querystring",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "BoolQuery": {
+            "shape": "BoolType",
+            "location": "querystring",
+            "locationName": "bool-query"
+          }
+        }
+      },
+      "BoolType": {
+        "type": "boolean"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BoolQuery": true
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?bool-query=true",
+          "headers": {}
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "BoolQuery": false
+        },
+        "serialized": {
+          "body": "",
+          "uri": "/path?bool-query=false",
+          "headers": {}
+        }
+      }
+    ]
+  },
+  {
+    "description": "String payload",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        },
+        "payload": "foo"
+      },
+      "FooShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": "bar"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "bar",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob payload",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        },
+        "payload": "foo"
+      },
+      "FooShape": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": "bar"
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "bar",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Structure payload",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "FooShape"
+          }
+        },
+        "payload": "foo"
+      },
+      "FooShape": {
+        "locationName": "foo",
+        "type": "structure",
+        "members": {
+          "baz": {
+            "shape": "BazShape"
+          }
+        }
+      },
+      "BazShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": {
+            "baz": "bar"
+          }
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<foo><baz>bar</baz></foo>",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {},
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": {}
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<foo />",
+          "uri": "/"
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "foo": null
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "XML Attribute",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Grant": {
+            "shape": "Grant"
+          }
+        },
+        "payload": "Grant"
+      },
+      "Grant": {
+        "type": "structure",
+        "locationName": "Grant",
+        "members": {
+          "Grantee": {
+            "shape": "Grantee"
+          }
+        }
+      },
+      "Grantee": {
+        "type": "structure",
+        "members": {
+          "Type": {
+            "shape": "Type",
+            "locationName": "xsi:type",
+            "xmlAttribute": true
+          },
+          "EmailAddress": {
+            "shape": "StringType"
+          }
+        },
+        "xmlNamespace": {
+          "prefix": "xsi",
+          "uri":"http://www.w3.org/2001/XMLSchema-instance"
+        }
+      },
+      "Type": {
+        "type": "string"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Grant": {
+            "Grantee": {
+              "EmailAddress": "foo@example.com",
+              "Type": "CanonicalUser"
+            }
+          }
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "<Grant><Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"CanonicalUser\"><EmailAddress>foo@example.com</EmailAddress></Grantee></Grant>",
+          "uri": "/"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Greedy keys",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Bucket": {
+            "shape": "BucketShape",
+            "location": "uri"
+          },
+          "Key": {
+            "shape": "KeyShape",
+            "location": "uri"
+          }
+        }
+      },
+      "BucketShape": {
+        "type": "string"
+      },
+      "KeyShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "GET",
+            "requestUri": "/{Bucket}/{Key+}"
+          },
+          "input": {
+            "shape": "InputShape"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Key": "testing /123",
+          "Bucket": "my/bucket"
+        },
+        "serialized": {
+          "method": "GET",
+          "body": "",
+          "uri": "/my%2Fbucket/testing%20/123"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Omits null query params, but serializes empty strings",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "location":"querystring",
+            "locationName":"param-name",
+            "shape": "Foo"
+          }
+        }
+      },
+      "Foo": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "OperationName",
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "input": { "shape": "InputShape" }
+        },
+        "params": { "foo": null },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/path"
+        }
+      },
+      {
+        "given": {
+          "name": "OperationName",
+          "http": {
+            "method": "POST",
+            "requestUri": "/path?abc=mno"
+          },
+          "input": { "shape": "InputShape" }
+        },
+        "params": { "foo": "" },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/path?abc=mno&param-name="
+        }
+      }
+    ]
+  },
+  {
+    "description": "Recursive shapes",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          }
+        }
+      },
+      "RecursiveStructType": {
+        "type": "structure",
+        "members": {
+          "NoRecurse": {
+            "shape": "StringType"
+          },
+          "RecursiveStruct": {
+            "shape": "RecursiveStructType"
+          },
+          "RecursiveList": {
+            "shape": "RecursiveListType"
+          },
+          "RecursiveMap": {
+            "shape": "RecursiveMapType"
+          }
+        }
+      },
+      "RecursiveListType": {
+        "type": "list",
+        "member": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "RecursiveMapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "RecursiveStructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "NoRecurse": "foo"
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></OperationRequest>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "NoRecurse": "foo"
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></RecursiveStruct></OperationRequest>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveStruct": {
+              "RecursiveStruct": {
+                "RecursiveStruct": {
+                  "NoRecurse": "foo"
+                }
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveStruct><RecursiveStruct><RecursiveStruct><NoRecurse>foo</NoRecurse></RecursiveStruct></RecursiveStruct></RecursiveStruct></RecursiveStruct></OperationRequest>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "NoRecurse": "bar"
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveList><member><NoRecurse>foo</NoRecurse></member><member><NoRecurse>bar</NoRecurse></member></RecursiveList></RecursiveStruct></OperationRequest>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveList": [
+              {
+                "NoRecurse": "foo"
+              },
+              {
+                "RecursiveStruct": {
+                  "NoRecurse": "bar"
+                }
+              }
+            ]
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveList><member><NoRecurse>foo</NoRecurse></member><member><RecursiveStruct><NoRecurse>bar</NoRecurse></RecursiveStruct></member></RecursiveList></RecursiveStruct></OperationRequest>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "RecursiveStruct": {
+            "RecursiveMap": {
+              "foo": {
+                "NoRecurse": "foo"
+              },
+              "bar": {
+                "NoRecurse": "bar"
+              }
+            }
+          }
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<OperationRequest xmlns=\"https://foo/\"><RecursiveStruct><RecursiveMap><entry><key>foo</key><value><NoRecurse>foo</NoRecurse></value></entry><entry><key>bar</key><value><NoRecurse>bar</NoRecurse></value></entry></RecursiveMap></RecursiveStruct></OperationRequest>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Idempotency token auto fill",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Token": {
+            "shape": "StringType",
+            "idempotencyToken": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Token": "abc123"
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "<InputShape><Token>abc123</Token></InputShape>"
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": "<InputShape><Token>00000000-0000-4000-8000-000000000000</Token></InputShape>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "JSON value trait",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "Attr": {
+            "shape": "StringType",
+            "jsonvalue": true,
+            "location": "header",
+            "locationName": "X-Amz-Foo"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "Attr": {"Foo":"Bar"}
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
+          "body": ""
+        }
+      },
+      {
+        "given": {
+          "input": {
+            "shape": "InputShape"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "name": "OperationName"
+        },
+        "params": {
+        },
+        "serialized": {
+          "uri": "/path",
+          "headers": {},
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Endpoint host trait",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "clientEndpoint": "https://service.region.amazonaws.com",
+    "shapes": {
+      "StaticInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "MemberRefInputShape": {
+        "type": "structure",
+        "members": {
+          "Name": {
+            "shape": "StringType",
+            "hostLabel": true
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "name": "StaticOp",
+          "input": {
+            "shape": "StaticInputShape",
+            "locationName": "StaticOpRequest"
+          },
+          "http": {
+            "method": "POST",
+            "requestUri": "/path"
+          },
+          "endpoint":{
+              "hostPrefix": "data-"
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<StaticOpRequest><Name>myname</Name></StaticOpRequest>",
+          "host": "data-service.region.amazonaws.com"
+        }
+      },
+      {
+        "given": {
+          "name": "MemberRefOp",
+          "input": {
+            "shape": "MemberRefInputShape",
+            "locationName": "MemberRefOpRequest"
+          },
+          "http": {
+            "method": "GET",
+            "requestUri": "/path"
+          },
+          "endpoint":{
+              "hostPrefix": "foo-{Name}."
+          }
+        },
+        "params": {
+          "Name": "myname"
+        },
+        "serialized": {
+          "uri": "/path",
+          "body": "<MemberRefOpRequest><Name>myname</Name></MemberRefOpRequest>",
+          "host": "foo-myname.service.region.amazonaws.com"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List in header",
+    "metadata": {
+      "protocol": "rest-xml",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "InputShape": {
+        "type": "structure",
+        "members": {
+          "ListParam": {
+            "shape": "ListShape",
+            "location": "header",
+            "locationName": "x-amz-list-param"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "EnumType"
+        }
+      },
+      "EnumType": {
+        "type": "string",
+        "enum": ["one", "two", "three"]
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/example"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": [
+            "one",
+            "two",
+            "three"
+          ]
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/2014-01-01/example",
+          "headers": {
+            "x-amz-list-param": "one,two,three"
+          }
+        }
+      },
+      {
+        "given": {
+          "http": {
+            "method": "POST",
+            "requestUri": "/2014-01-01/example"
+          },
+          "input": {
+            "shape": "InputShape",
+            "locationName": "OperationRequest",
+            "xmlNamespace": {"uri": "https://foo/"}
+          },
+          "name": "OperationName"
+        },
+        "params": {
+          "ListParam": []
+        },
+        "serialized": {
+          "method": "POST",
+          "body": "",
+          "uri": "/2014-01-01/example",
+          "headers": {},
+          "forbidHeaders": ["x-amz-list-param"]
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/output/ec2.json 2.31.35-1/tests/unit/botocore/protocols/legacy/output/ec2.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/output/ec2.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/output/ec2.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,612 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType",
+            "locationName": "FooNum"
+          },
+          "FalseBool": {
+            "shape": "BooleanType"
+          },
+          "TrueBool": {
+            "shape": "BooleanType"
+          },
+          "Float": {
+            "shape": "FloatType"
+          },
+          "Double": {
+            "shape": "DoubleType"
+          },
+          "Long": {
+            "shape": "LongType"
+          },
+          "Char": {
+            "shape": "CharType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "DoubleType": {
+        "type": "double"
+      },
+      "LongType": {
+        "type": "long"
+      },
+      "CharType": {
+        "type": "character"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Str": "myname",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><RequestId>request-id</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Blob": {
+            "shape": "BlobType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Blob": "value"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Blob>dmFsdWU=</Blob><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><ListMember><member>abc</member><member>123</member></ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List with custom member name",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><ListMember><item>abc</item><item>123</item></ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened List",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType",
+            "flattened": true
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><ListMember>abc</ListMember><ListMember>123</ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Normal map",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StructureType"
+        }
+      },
+      "StructureType": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": {
+              "foo": "bar"
+            },
+            "baz": {
+              "foo": "bam"
+            }
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened map",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "MapType",
+            "flattened": true
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Named map",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "MapType",
+            "flattened": true
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType",
+          "locationName": "foo"
+        },
+        "value": {
+          "shape": "StringType",
+          "locationName": "bar"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Map><foo>qux</foo><bar>bar</bar></Map><Map><foo>baz</foo><bar>bam</bar></Map><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Empty string",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Foo": ""
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Foo/><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp members",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          },
+          "StructMember": {
+            "shape": "TimeContainer"
+          }
+        }
+      },
+      "TimeContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "TimestampType"
+          },
+          "bar": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "TimeArg": 1398796238,
+          "TimeCustom": 1398796238,
+          "TimeFormat": 1398796238,
+          "StructMember": {
+            "foo": 1398796238,
+            "bar": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions",
+    "metadata": {
+      "protocol": "ec2"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "OtherExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+              "shape": "StringType"
+          }
+        }
+      },
+      "StatusShape": {
+        "type": "integer"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<Response><Errors><Error><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<Response><Errors><Error><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<Response><Errors><Error><Code>UndefinedShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/output/json.json 2.31.35-1/tests/unit/botocore/protocols/legacy/output/json.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/output/json.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/output/json.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,824 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType"
+          },
+          "FalseBool": {
+            "shape": "BooleanType"
+          },
+          "TrueBool": {
+            "shape": "BooleanType"
+          },
+          "Float": {
+            "shape": "FloatType"
+          },
+          "Double": {
+            "shape": "DoubleType"
+          },
+          "Long": {
+            "shape": "LongType"
+          },
+          "Char": {
+            "shape": "CharType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "DoubleType": {
+        "type": "double"
+      },
+      "LongType": {
+        "type": "long"
+      },
+      "CharType": {
+        "type": "character"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Str": "myname",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"Str\": \"myname\", \"Num\": 123, \"FalseBool\": false, \"TrueBool\": true, \"Float\": 1.2, \"Double\": 1.3, \"Long\": 200, \"Char\": \"a\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob members",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "BlobMember": {
+            "shape": "BlobType"
+          },
+          "StructMember": {
+            "shape": "BlobContainer"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      },
+      "BlobContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "BlobType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "BlobMember": "hi!",
+          "StructMember": {
+            "foo": "there!"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"BlobMember\": \"aGkh\", \"StructMember\": {\"foo\": \"dGhlcmUh\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp members",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          },
+          "StructMember": {
+            "shape": "TimeContainer"
+          }
+        }
+      },
+      "TimeContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "TimestampType"
+          },
+          "bar": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "iso8601",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "TimeArg": 1398796238,
+          "TimeCustom": 1398796238,
+          "TimeFormat": 1398796238,
+          "StructMember": {
+            "foo": 1398796238,
+            "bar": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"TimeArg\": 1398796238, \"TimeCustom\": \"Tue, 29 Apr 2014 18:30:38 GMT\", \"TimeFormat\": \"2014-04-29T18:30:38+00:00\", \"StructMember\": {\"foo\": 1398796238, \"bar\": \"2014-04-29T18:30:38+00:00\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType"
+          },
+          "ListMemberMap": {
+            "shape": "ListTypeMap"
+          },
+          "ListMemberStruct": {
+            "shape": "ListTypeStruct"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "ListTypeMap": {
+        "type": "list",
+        "member": {
+          "shape": "MapType"
+        }
+      },
+      "ListTypeStruct": {
+        "type": "list",
+        "member": {
+          "shape": "StructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+        }
+      },
+      "MapType": {
+        "type": "string",
+        "key": { "shape": "StringType" },
+        "value": { "shape": "StringType" }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["a", "b"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"ListMember\": [\"a\", \"b\"]}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["a", null],
+          "ListMemberMap": [{}, null, null, {}],
+          "ListMemberStruct": [{}, null, null, {}]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"ListMember\": [\"a\", null], \"ListMemberMap\": [{}, null, null, {}], \"ListMemberStruct\": [{}, null, null, {}]}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Maps",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "MapMember": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "NumberList"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "NumberList": {
+        "type": "list",
+        "member": {
+          "shape": "IntegerType"
+        }
+      },
+      "IntegerType": {
+        "type": "integer"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "MapMember": {
+            "a": [1, 2],
+            "b": [3, 4]
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"MapMember\": {\"a\": [1, 2], \"b\": [3, 4]}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Ignores extra data",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "StrType": {
+            "shape": "StrType"
+          }
+        }
+      },
+      "StrType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {},
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"foo\": \"bar\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "RPC JSON Event Stream",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "Payload": {"shape": "EventStream"},
+            "InitialResponse": {"shape": "StringType"}
+        }
+      },
+      "EventStream": {
+          "type": "structure",
+          "eventstream": true,
+          "members": {
+              "TypeA": {"shape": "TypeAEvent"},
+              "TypeB": {"shape": "TypeBEvent"}
+          }
+      },
+      "TypeAEvent": {
+          "type": "structure",
+          "event": true,
+          "members": {
+              "Payload": {
+                  "shape": "BlobType",
+                  "eventpayload": true
+              }
+          }
+      },
+      "TypeBEvent": {
+          "type": "structure",
+          "event": true,
+          "members": {
+              "Details": {
+                  "shape": "Details",
+                  "eventpayload": true
+              }
+          }
+      },
+      "Details": {
+          "type": "structure",
+          "members": {
+              "StringField": {"shape": "StringType"},
+              "IntegerField": {"shape": "IntegerType"}
+          }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "InitialResponse": "sometext",
+          "Payload": [
+              {
+                  "TypeA": {"Payload": "somebytes"}
+              },
+              {
+                  "TypeB": {
+                      "Details": {
+                          "StringField": "somestring",
+                          "IntegerField": 123
+                      }
+                  }
+              }
+          ]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "AAAAfgAAAE/Fo93GDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcAEGluaXRpYWwtcmVzcG9uc2UNOmNvbnRlbnQtdHlwZQcACXRleHQvanNvbnsiSW5pdGlhbFJlc3BvbnNlIjogInNvbWV0ZXh0In32mCSDAAAAbAAAAFPLgkVrDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVBDTpjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1zb21lYnl0ZXMesj2HAAAAhgAAAEQqNR/SDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVCDTpjb250ZW50LXR5cGUHAAl0ZXh0L2pzb257IlN0cmluZ0ZpZWxkIjogInNvbWVzdHJpbmciLCAiSW50ZWdlckZpZWxkIjogMTIzfffGN30="
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Code": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "OtherExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+              "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody",
+          "Code": "OtherExceptionShape",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "{ \"__type\": \"ExceptionShape\", \"Code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "{ \"__type\": \"OtherExceptionShape\", \"Code\": \"ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "{ \"__type\": \"UndefinedShape\", \"Code\": \"ExceptionShape\", \"BodyMember\": \"mybody\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions with jsonVersion 1.0",
+    "metadata": {
+      "protocol": "json",
+      "jsonVersion": "1.0"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "{ \"__type\": \"FooPrefix#ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize document with standalone primitive type in a JSON response",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "inlineDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": "foo"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": \"foo\"}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": 123
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": 123}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": 1.2
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": 1.2}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": true
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": true}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": ""
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": \"\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize inline document in a JSON response",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "inlineDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "inlineDocument": {"foo": "bar"}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"inlineDocument\": {\"foo\": \"bar\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serialize aggregate documents in a JSON response",
+    "metadata": {
+      "protocol": "json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "parentDocument": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "parentDocument": {
+              "str": "test",
+              "num": 123,
+              "float": 1.2,
+              "bool": true,
+              "null": "",
+              "document": {"foo": false},
+              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"parentDocument\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "parentDocument": [
+              "test",
+              123,
+              1.2,
+              true,
+              "",
+              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
+              ["foo", false]
+          ]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"parentDocument\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/output/query.json 2.31.35-1/tests/unit/botocore/protocols/legacy/output/query.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/output/query.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/output/query.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,932 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType",
+            "locationName": "FooNum"
+          },
+          "FalseBool": {
+            "shape": "BooleanType"
+          },
+          "TrueBool": {
+            "shape": "BooleanType"
+          },
+          "Float": {
+            "shape": "FloatType"
+          },
+          "Double": {
+            "shape": "DoubleType"
+          },
+          "Long": {
+            "shape": "LongType"
+          },
+          "Char": {
+            "shape": "CharType"
+          },
+          "Timestamp": {
+            "shape": "TimestampType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "DoubleType": {
+        "type": "double"
+      },
+      "LongType": {
+        "type": "long"
+      },
+      "CharType": {
+        "type": "character"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Str": "myname",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a",
+          "Timestamp": 1422172800
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResult><ResponseMetadata><RequestId>request-id</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Not all members in response",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Str": "myname"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Str>myname</Str></OperationNameResult><ResponseMetadata><RequestId>request-id</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Blob": {
+            "shape": "BlobType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Blob": "value"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Blob>dmFsdWU=</Blob></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><ListMember><member>abc</member><member>123</member></ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List with custom member name",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><ListMember><item>abc</item><item>123</item></ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened List",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "flattened": true,
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><ListMember>abc</ListMember><ListMember>123</ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened single element list",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "flattened": true,
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><ListMember>abc</ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List of structures",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "List": {
+            "shape": "ListOfStructs"
+          }
+        }
+      },
+      "ListOfStructs": {
+        "type": "list",
+        "member": {
+          "shape": "StructureShape"
+        }
+      },
+      "StructureShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringShape"
+          },
+          "Bar": {
+            "shape": "StringShape"
+          },
+          "Baz": {
+            "shape": "StringShape"
+          }
+        }
+      },
+      "StringShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "List": [{"Foo": "firstfoo", "Bar": "firstbar", "Baz": "firstbaz"}, {"Foo": "secondfoo", "Bar": "secondbar", "Baz": "secondbaz"}]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><List><member><Foo>firstfoo</Foo><Bar>firstbar</Bar><Baz>firstbaz</Baz></member><member><Foo>secondfoo</Foo><Bar>secondbar</Bar><Baz>secondbaz</Baz></member></List></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened list of structures",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "resultWrapper": "OperationNameResult",
+        "members": {
+          "List": {
+            "shape": "ListOfStructs"
+          }
+        }
+      },
+      "ListOfStructs": {
+        "type": "list",
+        "flattened": true,
+        "member": {
+          "shape": "StructureShape"
+        }
+      },
+      "StructureShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringShape"
+          },
+          "Bar": {
+            "shape": "StringShape"
+          },
+          "Baz": {
+            "shape": "StringShape"
+          }
+        }
+      },
+      "StringShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "List": [{"Foo": "firstfoo", "Bar": "firstbar", "Baz": "firstbaz"}, {"Foo": "secondfoo", "Bar": "secondbar", "Baz": "secondbaz"}]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><List><Foo>firstfoo</Foo><Bar>firstbar</Bar><Baz>firstbaz</Baz></List><List><Foo>secondfoo</Foo><Bar>secondbar</Bar><Baz>secondbaz</Baz></List></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened list with location name",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "List": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "flattened": true,
+        "member": {
+          "shape": "StringShape",
+          "locationName": "NamedList"
+        }
+      },
+      "StringShape": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "List": ["a", "b"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><NamedList>a</NamedList><NamedList>b</NamedList></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Normal map",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+            "shape": "StringType"
+        },
+        "value": {
+            "shape": "StructType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "StructType": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "StringType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": {
+              "foo": "bar"
+            },
+            "baz": {
+              "foo": "bam"
+            }
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08\"><OperationNameResult><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened map",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap",
+            "flattened": true
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+            "shape": "StringType"
+        },
+        "value": {
+            "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened map in shape definition",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap",
+            "locationName": "Attribute"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+            "shape": "StringType",
+            "locationName": "Name"
+        },
+        "value": {
+            "shape": "StringType",
+            "locationName": "Value"
+        },
+        "flattened": true,
+        "locationName": "Attribute"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Attribute><Name>qux</Name><Value>bar</Value></Attribute></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Named map",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "flattened": true,
+        "key": {
+          "locationName": "foo",
+          "shape": "StringType"
+        },
+        "value": {
+          "locationName": "bar",
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Map><foo>qux</foo><bar>bar</bar></Map><Map><foo>baz</foo><bar>bam</bar></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Empty string",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Foo": ""
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><Foo/></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp members",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          },
+          "StructMember": {
+            "shape": "TimeContainer"
+          }
+        }
+      },
+      "TimeContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "TimestampType"
+          },
+          "bar": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "resultWrapper": "OperationNameResult",
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "TimeArg": 1398796238,
+          "TimeCustom": 1398796238,
+          "TimeFormat": 1398796238,
+          "StructMember": {
+            "foo": 1398796238,
+            "bar": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><OperationNameResult><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResult></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions",
+    "metadata": {
+      "protocol": "query"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "OtherExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {},
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>UndefinedShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/output/rest-json.json 2.31.35-1/tests/unit/botocore/protocols/legacy/output/rest-json.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/output/rest-json.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/output/rest-json.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1312 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ImaHeader": {
+            "shape": "HeaderShape"
+          },
+          "ImaHeaderLocation": {
+            "shape": "HeaderShape",
+            "locationName": "X-Foo"
+          },
+          "Status": {
+            "shape": "StatusShape",
+            "location": "statusCode"
+          },
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType"
+          },
+          "FalseBool": {
+            "shape": "BooleanType"
+          },
+          "TrueBool": {
+            "shape": "BooleanType"
+          },
+          "Float": {
+            "shape": "FloatType"
+          },
+          "Double": {
+            "shape": "DoubleType"
+          },
+          "Long": {
+            "shape": "LongType"
+          },
+          "Char": {
+            "shape": "CharType"
+          }
+        }
+      },
+      "HeaderShape": {
+        "type": "string",
+        "location": "header"
+      },
+      "StatusShape": {
+        "type": "integer"
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "DoubleType": {
+        "type": "double"
+      },
+      "LongType": {
+        "type": "long"
+      },
+      "CharType": {
+        "type": "character"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Status": 200,
+          "Str": "myname",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "{\"Str\": \"myname\", \"Num\": 123, \"FalseBool\": false, \"TrueBool\": true, \"Float\": 1.2, \"Double\": 1.3, \"Long\": 200, \"Char\": \"a\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob members",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "BlobMember": {
+            "shape": "BlobType"
+          },
+          "StructMember": {
+            "shape": "BlobContainer"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      },
+      "BlobContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "BlobType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "BlobMember": "hi!",
+          "StructMember": {
+            "foo": "there!"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"BlobMember\": \"aGkh\", \"StructMember\": {\"foo\": \"dGhlcmUh\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp members",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeArgInHeader": {
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timearg"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeCustomInHeader": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timecustom"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          },
+          "TimeFormatInHeader": {
+            "shape": "TimestampFormatType",
+            "location": "header",
+            "locationName": "x-amz-timeformat"
+          },
+          "StructMember": {
+            "shape": "TimeContainer"
+          }
+        }
+      },
+      "TimeContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "TimestampType"
+          },
+          "bar": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "iso8601",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "TimeArg": 1398796238,
+          "TimeArgInHeader": 1398796238,
+          "TimeCustom": 1398796238,
+          "TimeCustomInHeader": 1398796238,
+          "TimeFormat": 1398796238,
+          "TimeFormatInHeader": 1398796238,
+          "StructMember": {
+            "foo": 1398796238,
+            "bar": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "x-amz-timearg": "Tue, 29 Apr 2014 18:30:38 GMT",
+            "x-amz-timecustom": "1398796238",
+            "x-amz-timeformat": "2014-04-29T18:30:38+00:00"
+          },
+          "body": "{\"TimeArg\": 1398796238, \"TimeCustom\": \"Tue, 29 Apr 2014 18:30:38 GMT\", \"TimeFormat\": \"2014-04-29T18:30:38+00:00\", \"StructMember\": {\"foo\": 1398796238, \"bar\": \"2014-04-29T18:30:38+00:00\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["a", "b"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"ListMember\": [\"a\", \"b\"]}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists with structure member",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListType"
+          }
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "SingleStruct"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "SingleStruct": {
+        "type": "structure",
+        "members": {
+            "Foo": {
+              "shape": "StringType"
+            }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": [{"Foo": "a"}, {"Foo": "b"}]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"ListMember\": [{\"Foo\": \"a\"}, {\"Foo\": \"b\"}]}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Maps",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "MapMember": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "ListType"
+        }
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "IntegerType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "MapMember": {
+            "a": [1, 2],
+            "b": [3, 4]
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"MapMember\": {\"a\": [1, 2], \"b\": [3, 4]}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Complex Map Values",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "MapMember": {
+            "shape": "MapType"
+          }
+        }
+      },
+      "MapType": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "TimeType"
+        }
+      },
+      "TimeType": {
+        "type": "timestamp"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "MapMember": {
+            "a": 1398796238,
+            "b": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"MapMember\": {\"a\": 1398796238, \"b\": 1398796238}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Ignores extra data",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "StrType": {
+            "shape": "StrType"
+          }
+        }
+      },
+      "StrType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {},
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"foo\": \"bar\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Ignores undefined output",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {},
+    "cases": [
+      {
+        "given": {
+          "name": "OperationName"
+        },
+        "result": {},
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "OK"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Supports header maps",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "AllHeaders": {
+            "shape": "HeaderMap",
+            "location": "headers"
+          },
+          "PrefixedHeaders": {
+            "shape": "HeaderMap",
+            "location": "headers",
+            "locationName": "X-"
+          }
+        }
+      },
+      "HeaderMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "AllHeaders": {
+            "Content-Length": "10",
+            "x-Foo": "bar",
+            "X-bam": "boo"
+          },
+          "PrefixedHeaders": {
+            "Foo": "bar",
+            "bam": "boo"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "Content-Length": "10",
+            "x-Foo": "bar",
+            "X-bam": "boo"
+          },
+          "body": "{}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "JSON payload",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "payload": "Data",
+        "members": {
+          "Header": {
+            "shape": "StringType",
+            "location": "header",
+            "locationName": "X-Foo"
+          },
+          "Data": {
+            "shape": "BodyStructure"
+          }
+        }
+      },
+      "BodyStructure": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Header": "baz",
+          "Data": {
+            "Foo": "abc"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "X-Foo": "baz"
+          },
+          "body": "{\"Foo\": \"abc\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Streaming payload",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "payload": "Stream",
+        "members": {
+          "Stream": {
+            "shape": "Stream"
+          }
+        }
+      },
+      "Stream": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Stream": "abc"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "abc"
+        }
+      }
+    ]
+  },
+  {
+    "description": "JSON value trait",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Attr": {
+            "shape": "StringType",
+              "jsonvalue": true,
+              "location": "header",
+              "locationName": "X-Amz-Foo"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Attr": {"Foo":"Bar"}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "ImaHeader": {
+            "shape": "HeaderShape"
+          },
+          "ImaHeaderLocation": {
+            "shape": "HeaderShape",
+            "locationName": "X-Foo"
+          },
+          "Status": {
+            "shape": "StatusShape",
+            "location": "statusCode"
+          },
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "OtherExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+            "BodyMember": {
+                "shape": "StringType"
+            }
+        }
+      },
+      "HeaderShape": {
+        "type": "string",
+        "location": "header"
+      },
+      "StatusShape": {
+        "type": "integer"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Status": 400,
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Errortype": "ExceptionShape"
+          },
+          "body": "{\"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Status": 400,
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "{ \"code\": \"ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Status": 400,
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Errortype": "ExceptionShape"
+          },
+          "body": "{ \"code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+            "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Errortype": "OtherExceptionShape"
+          },
+          "body": "{ \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+            "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "{ \"code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Errortype": "UndefinedShape"
+          },
+          "body": "{ \"BodyMember\": \"mybody\"}"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "{ \"code\": \"UndefinedShape\", \"BodyMember\": \"mybody\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes document with standalone primitive as part of the JSON response payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "documentValue": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": "foo"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": \"foo\"}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": 123
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": 123}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": 1.2
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": 1.2}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": true
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": true}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": ""
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": \"\"}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes inline documents as part of the JSON response payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "documentValue": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": {"foo": "bar"}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": {\"foo\": \"bar\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Serializes aggregate documents as part of the JSON response payload with no escaping.",
+    "metadata": {
+      "protocol": "rest-json",
+      "apiVersion": "2014-01-01"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "documentValue": {
+                "shape": "DocumentType"
+            }
+        }
+      },
+      "DocumentType": {
+          "type": "structure",
+          "document": true
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": {
+              "str": "test",
+              "num": 123,
+              "float": 1.2,
+              "bool": true,
+              "null": "",
+              "document": {"foo": false},
+              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "documentValue": [
+              "test",
+              123,
+              1.2,
+              true,
+              "",
+              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
+              ["foo", false]
+          ]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"documentValue\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Tagged Unions",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "UnionMember": {
+            "shape": "UnionType"
+          }
+        }
+      },
+      "UnionType": {
+        "type": "structure",
+        "members": {
+          "S":{"shape":"StringType"},
+          "L": {"shape": "ListType"}
+        },
+        "union": true
+      },
+      "ListType": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "UnionMember": {"S":  "mystring"}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"UnionMember\": {\"S\": \"mystring\"}}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "UnionMember": {"L":  ["a", "b"]}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"UnionMember\": {\"L\": [\"a\", \"b\"]}}"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "UnionMember": {"SDK_UNKNOWN_MEMBER":  {"name": "SomeUnknownMember"}}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "{\"UnionMember\": {\"SomeUnknownMember\": \"foo\"}}"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List in header",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape",
+            "location": "header",
+            "locationName": "x-amz-list-member"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "EnumType"
+        }
+      },
+      "EnumType": {
+        "type": "string",
+        "enum": ["one", "two", "three"]
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["one", "two", "three"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+              "x-amz-list-member": " one,two , three "
+          },
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Number in header",
+    "metadata": {
+      "protocol": "rest-json"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "IntegerMember": {
+            "shape": "IntegerShape",
+            "location": "header",
+            "locationName": "x-amz-integer-member"
+          },
+          "LongMember": {
+            "shape": "LongShape",
+            "location": "header",
+            "locationName": "x-amz-long-member"
+          }
+        }
+      },
+      "IntegerShape": {
+        "type": "integer"
+      },
+      "LongShape": {
+        "type": "long"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "IntegerMember": 123,
+          "LongMember": 200
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+              "x-amz-integer-member": "123",
+              "x-amz-long-member": "200"
+          },
+          "body": ""
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/legacy/output/rest-xml.json 2.31.35-1/tests/unit/botocore/protocols/legacy/output/rest-xml.json
--- 2.23.6-1/tests/unit/botocore/protocols/legacy/output/rest-xml.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/legacy/output/rest-xml.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1273 @@
+[
+  {
+    "description": "Scalar members",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ImaHeader": {
+            "shape": "HeaderShape"
+          },
+          "ImaHeaderLocation": {
+            "shape": "HeaderShape",
+            "locationName": "X-Foo"
+          },
+          "Str": {
+            "shape": "StringType"
+          },
+          "Num": {
+            "shape": "IntegerType",
+            "locationName": "FooNum"
+          },
+          "FalseBool": {
+            "shape": "BooleanType"
+          },
+          "TrueBool": {
+            "shape": "BooleanType"
+          },
+          "Float": {
+            "shape": "FloatType"
+          },
+          "Double": {
+            "shape": "DoubleType"
+          },
+          "Long": {
+            "shape": "LongType"
+          },
+          "Char": {
+            "shape": "CharType"
+          },
+          "Timestamp": {
+            "shape": "TimestampType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "FloatType": {
+        "type": "float"
+      },
+      "DoubleType": {
+        "type": "double"
+      },
+      "LongType": {
+        "type": "long"
+      },
+      "CharType": {
+        "type": "character"
+      },
+      "HeaderShape": {
+        "type": "string",
+        "location": "header"
+      },
+      "StatusShape": {
+        "type": "integer",
+        "location": "statusCode"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Str": "myname",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a",
+          "Timestamp": 1422172800
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "<OperationNameResponse><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResponse>"
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Str": "",
+          "Num": 123,
+          "FalseBool": false,
+          "TrueBool": true,
+          "Float": 1.2,
+          "Double": 1.3,
+          "Long": 200,
+          "Char": "a",
+          "Timestamp": 1422172800
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc"
+          },
+          "body": "<OperationNameResponse><Str></Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Blob",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Blob": {
+            "shape": "BlobType"
+          }
+        }
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Blob": "value"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><Blob>dmFsdWU=</Blob></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Lists",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><ListMember><member>abc</member><member>123</member></ListMember></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "List with custom member name",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "StringType",
+          "locationName": "item"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><ListMember><item>abc</item><item>123</item></ListMember></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened List",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "StringList",
+            "flattened": true
+          }
+        }
+      },
+      "StringList": {
+        "type": "list",
+        "member": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["abc", "123"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><ListMember>abc</ListMember><ListMember>123</ListMember></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Normal map",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "SingleStructure"
+        }
+      },
+      "SingleStructure": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": {
+              "foo": "bar"
+            },
+            "baz": {
+              "foo": "bam"
+            }
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Flattened map",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap",
+            "flattened": true
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType"
+        },
+        "value": {
+          "shape": "StringType"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Named map",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Map": {
+            "shape": "StringMap"
+          }
+        }
+      },
+      "StringMap": {
+        "type": "map",
+        "key": {
+          "shape": "StringType",
+          "locationName": "foo"
+        },
+        "value": {
+          "shape": "StringType",
+          "locationName": "bar"
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Map": {
+            "qux": "bar",
+            "baz": "bam"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResult><Map><entry><foo>qux</foo><bar>bar</bar></entry><entry><foo>baz</foo><bar>bam</bar></entry></Map></OperationNameResult>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "XML payload",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "payload": "Data",
+        "members": {
+          "Header": {
+            "shape": "StringType",
+            "location": "header",
+            "locationName": "X-Foo"
+          },
+          "Data": {
+            "shape": "SingleStructure"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "SingleStructure": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          }
+        }
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Header": "baz",
+          "Data": {
+            "Foo": "abc"
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "X-Foo": "baz"
+          },
+          "body": "<OperationNameResponse><Foo>abc</Foo></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Streaming payload",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "payload": "Stream",
+        "members": {
+          "Stream": {
+            "shape": "BlobStream"
+          }
+        }
+      },
+      "BlobStream": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Stream": "abc"
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "abc"
+        }
+      }
+    ]
+  },
+  {
+    "description": "Scalar members in headers",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Str": {
+            "locationName": "x-str",
+            "shape": "StringHeaderType"
+          },
+          "Integer": {
+            "locationName": "x-int",
+            "shape": "IntegerHeaderType"
+          },
+          "TrueBool": {
+            "locationName": "x-true-bool",
+            "shape": "BooleanHeaderType"
+          },
+          "FalseBool": {
+            "locationName": "x-false-bool",
+            "shape": "BooleanHeaderType"
+          },
+          "Float": {
+            "locationName": "x-float",
+            "shape": "FloatHeaderType"
+          },
+          "Double": {
+            "locationName": "x-double",
+            "shape": "DoubleHeaderType"
+          },
+          "Long": {
+            "locationName": "x-long",
+            "shape": "LongHeaderType"
+          },
+          "Char": {
+            "locationName": "x-char",
+            "shape": "CharHeaderType"
+          },
+          "Timestamp": {
+            "locationName": "x-timestamp",
+            "shape": "TimestampHeaderType"
+          }
+        }
+      },
+      "StringHeaderType": {
+        "location": "header",
+        "type": "string"
+      },
+      "IntegerHeaderType": {
+        "location": "header",
+        "type": "integer"
+      },
+      "BooleanHeaderType": {
+        "location": "header",
+        "type": "boolean"
+      },
+      "FloatHeaderType": {
+        "location": "header",
+        "type": "float"
+      },
+      "DoubleHeaderType": {
+        "location": "header",
+        "type": "double"
+      },
+      "LongHeaderType": {
+        "location": "header",
+        "type": "long"
+      },
+      "CharHeaderType": {
+        "location": "header",
+        "type": "character"
+      },
+      "TimestampHeaderType": {
+        "location": "header",
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Str": "string",
+          "Integer": 1,
+          "TrueBool": true,
+          "FalseBool": false,
+          "Float": 1.5,
+          "Double": 1.5,
+          "Long": 100,
+          "Char": "a",
+          "Timestamp": 1422172800
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "x-str": "string",
+            "x-int": "1",
+            "x-true-bool": "true",
+            "x-false-bool": "false",
+            "x-float": "1.5",
+            "x-double": "1.5",
+            "x-long": "100",
+            "x-char": "a",
+            "x-timestamp": "Sun, 25 Jan 2015 08:00:00 GMT"
+          },
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Empty string",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Foo": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Foo": ""
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "<OperationNameResponse><Foo/><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "JSON value trait",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "Attr": {
+            "shape": "StringType",
+              "jsonvalue": true,
+              "location": "header",
+              "locationName": "X-Amz-Foo"
+          }
+        }
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Attr": {"Foo":"Bar"}
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Timestamp members",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "TimeArg": {
+            "shape": "TimestampType"
+          },
+          "TimeArgInHeader": {
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timearg"
+          },
+          "TimeCustom": {
+            "timestampFormat": "rfc822",
+            "shape": "TimestampType"
+          },
+          "TimeCustomInHeader": {
+            "timestampFormat": "unixTimestamp",
+            "shape": "TimestampType",
+            "location": "header",
+            "locationName": "x-amz-timecustom"
+          },
+          "TimeFormat": {
+            "shape": "TimestampFormatType"
+          },
+          "TimeFormatInHeader": {
+            "shape": "TimestampFormatType",
+            "location": "header",
+            "locationName": "x-amz-timeformat"
+          },
+          "StructMember": {
+            "shape": "TimeContainer"
+          }
+        }
+      },
+      "TimeContainer": {
+        "type": "structure",
+        "members": {
+          "foo": {
+            "shape": "TimestampType"
+          },
+          "bar": {
+            "shape": "TimestampFormatType"
+          }
+        }
+      },
+      "TimestampFormatType": {
+        "timestampFormat": "unixTimestamp",
+        "type": "timestamp"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "TimeArg": 1398796238,
+          "TimeArgInHeader": 1398796238,
+          "TimeCustom": 1398796238,
+          "TimeCustomInHeader": 1398796238,
+          "TimeFormat": 1398796238,
+          "TimeFormatInHeader": 1398796238,
+          "StructMember": {
+            "foo": 1398796238,
+            "bar": 1398796238
+          }
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+            "x-amz-timearg": "Tue, 29 Apr 2014 18:30:38 GMT",
+            "x-amz-timecustom": "1398796238",
+            "x-amz-timeformat": "1398796238"
+          },
+          "body": "<OperationNameResponse><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResponse>"
+        }
+      }
+    ]
+  },
+  {
+    "description": "REST XML Event Stream",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+            "Payload": {"shape": "EventStream"}
+        },
+        "payload": "Payload"
+      },
+      "EventStream": {
+          "type": "structure",
+          "eventstream": true,
+          "members": {
+              "TypeA": {"shape": "TypeAEvent"},
+              "TypeB": {"shape": "TypeBEvent"},
+              "TypeC": {"shape": "TypeCEvent"}
+          }
+      },
+      "TypeAEvent": {
+          "type": "structure",
+          "event": true,
+          "members": {
+              "Payload": {
+                  "shape": "BlobType",
+                  "eventpayload": true
+              }
+          }
+      },
+      "TypeBEvent": {
+          "type": "structure",
+          "event": true,
+          "members": {
+              "Details": {
+                  "shape": "Details",
+                  "eventpayload": true
+              }
+          }
+      },
+      "TypeCEvent": {
+          "type": "structure",
+          "event": true,
+          "members": {
+              "Details": {
+                  "shape": "Details",
+                  "eventpayload": true
+              },
+              "Boolean": {
+                  "shape": "BooleanType",
+                  "eventheader": true
+              },
+              "Integer": {
+                  "shape": "IntegerType",
+                  "eventheader": true
+              },
+              "Blob": {
+                  "shape": "BlobType",
+                  "eventheader": true
+              },
+              "String": {
+                  "shape": "StringType",
+                  "eventheader": true
+              },
+              "Timestamp": {
+                  "shape": "TimestampType",
+                  "eventheader": true
+              }
+          }
+      },
+      "Details": {
+          "type": "structure",
+          "members": {
+              "StringField": {"shape": "StringType"},
+              "IntegerField": {"shape": "IntegerType"}
+          }
+      },
+      "StringType": {
+        "type": "string"
+      },
+      "IntegerType": {
+        "type": "integer"
+      },
+      "BooleanType": {
+        "type": "boolean"
+      },
+      "TimestampType": {
+        "type": "timestamp"
+      },
+      "BlobType": {
+        "type": "blob"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Payload": [
+              {
+                  "TypeA": {"Payload": "somebytes"}
+              },
+              {
+                  "TypeB": {
+                      "Details": {
+                          "StringField": "somestring",
+                          "IntegerField": 123
+                      }
+                  }
+              }
+          ]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "AAAAbAAAAFPLgkVrDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVBDTpjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1zb21lYnl0ZXMesj2HAAAAsAAAAEOaMMdXDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVCDTpjb250ZW50LXR5cGUHAAh0ZXh0L3htbDxUeXBlQiB4bWxucz0iIj48U3RyaW5nRmllbGQ+c29tZXN0cmluZzwvU3RyaW5nRmllbGQ+PEludGVnZXJGaWVsZD4xMjM8L0ludGVnZXJGaWVsZD48L1R5cGVCPiwthPo="
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Payload": [
+              {
+                  "TypeC": {
+                      "Boolean": true,
+                      "Integer": 123,
+                      "Blob": "someblob",
+                      "String": "somestring",
+                      "Timestamp": 1422172800,
+                      "Details": {
+                          "StringField": "somestring",
+                          "IntegerField": 123
+                      }
+                  }
+              }
+          ]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": "AAABAQAAAJBjEbY4DTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVDDTpjb250ZW50LXR5cGUHAAh0ZXh0L3htbAdCb29sZWFuAAdJbnRlZ2VyBAAAAHsEQmxvYgYACHNvbWVibG9iBlN0cmluZwcACnNvbWVzdHJpbmcJVGltZXN0YW1wCAAAAUsgGsQAPERldGFpbHMgeG1sbnM9IiI+PFN0cmluZ0ZpZWxkPnNvbWVzdHJpbmc8L1N0cmluZ0ZpZWxkPjxJbnRlZ2VyRmllbGQ+MTIzPC9JbnRlZ2VyRmllbGQ+PC9EZXRhaWxzPhGUvKo="
+        }
+      },
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "Payload": []
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {},
+          "body": ""
+        }
+      }
+    ]
+  },
+  {
+    "description": "Modeled exceptions",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "ExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "ImaHeader": {
+            "shape": "HeaderShape"
+          },
+          "ImaHeaderLocation": {
+            "shape": "HeaderShape",
+            "locationName": "X-Foo"
+          },
+          "Status": {
+            "shape": "StatusShape",
+            "location": "statusCode"
+          },
+          "BodyMember": {
+            "shape": "StringType"
+          },
+          "Message": {
+            "shape": "StringType"
+          }
+        }
+      },
+      "OtherExceptionShape": {
+        "exception": true,
+        "type": "structure",
+        "members": {
+          "BodyMember": {
+              "shape": "StringType"
+          }
+        }
+      },
+      "HeaderShape": {
+        "type": "string",
+        "location": "header"
+      },
+      "StatusShape": {
+        "type": "integer"
+      },
+      "StringType": {
+        "type": "string"
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "ImaHeader": "test",
+          "ImaHeaderLocation": "abc",
+          "Status": 400,
+          "BodyMember": "mybody",
+          "Message": "mymessage"
+        },
+        "errorCode": "ExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Requestid": "foo-id"
+          },
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {
+          "BodyMember": "mybody"
+        },
+        "errorCode": "OtherExceptionShape",
+        "errorMessage": "mymessage",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Requestid": "foo-id"
+          },
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      },
+      {
+        "given": {
+          "errors": [
+            {"shape": "ExceptionShape"}
+          ],
+          "name": "OperationName"
+        },
+        "error": {},
+        "errorCode": "UndefinedShape",
+        "response": {
+          "status_code": 400,
+          "headers": {
+            "ImaHeader": "test",
+            "X-Foo": "abc",
+            "X-Amzn-Requestid": "foo-id"
+          },
+          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>UndefinedShape</Code><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
+        }
+      }
+    ]
+  },
+  {
+      "description": "Unions",
+      "metadata": {
+          "protocol": "rest-xml"
+      },
+      "shapes": {
+          "OutputShape": {
+              "type": "structure",
+              "members": {
+                  "UnionMember": {
+                      "shape": "UnionType"
+                  }
+              }
+          },
+          "UnionType": {
+              "type": "structure",
+              "members": {
+                  "S":{"shape":"StringType"},
+                  "L": {"shape": "ListType"}
+              },
+              "union": true
+          },
+          "ListType": {
+              "type": "list",
+              "member": {
+                  "shape": "StringType"
+              }
+          },
+          "StringType": {
+              "type": "string"
+          }
+      },
+      "cases": [
+          {
+              "given": {
+                  "output": {
+                      "shape": "OutputShape"
+                  },
+                  "name": "OperationName"
+              },
+              "result": {
+                  "UnionMember": {"S":  "string value"}
+              },
+              "response": {
+                  "status_code": 200,
+                  "headers": {},
+                  "body": "<OperationNameResponse><UnionMember><S>string value</S></UnionMember></OperationNameResponse>"
+              }
+          },
+          {
+              "given": {
+                  "output": {
+                      "shape": "OutputShape"
+                  },
+                  "name": "OperationName"
+              },
+              "result": {
+                  "UnionMember": {"L":  ["a", "b"]}
+              },
+              "response": {
+                  "status_code": 200,
+                  "headers": {},
+                  "body": "<OperationNameResponse><UnionMember><L><member>a</member><member>b</member></L></UnionMember></OperationNameResponse>"
+              }
+          },
+          {
+              "given": {
+                  "output": {
+                      "shape": "OutputShape"
+                  },
+                  "name": "OperationName"
+              },
+              "result": {
+                  "UnionMember": {"SDK_UNKNOWN_MEMBER":  {"name": "SomeUnknownMember"}}
+              },
+              "response": {
+                  "status_code": 200,
+                  "headers": {},
+                  "body": "<OperationNameResponse><UnionMember><SomeUnknownMember>foo</SomeUnknownMember></UnionMember></OperationNameResponse>"
+              }
+          }
+      ]
+  },
+  {
+    "description": "List in header",
+    "metadata": {
+      "protocol": "rest-xml"
+    },
+    "shapes": {
+      "OutputShape": {
+        "type": "structure",
+        "members": {
+          "ListMember": {
+            "shape": "ListShape",
+            "location": "header",
+            "locationName": "x-amz-list-member"
+          }
+        }
+      },
+      "ListShape": {
+        "type": "list",
+        "member": {
+          "shape": "EnumType"
+        }
+      },
+      "EnumType": {
+        "type": "string",
+        "enum": ["one", "two", "three"]
+      }
+    },
+    "cases": [
+      {
+        "given": {
+          "output": {
+            "shape": "OutputShape"
+          },
+          "name": "OperationName"
+        },
+        "result": {
+          "ListMember": ["one", "two", "three"]
+        },
+        "response": {
+          "status_code": 200,
+          "headers": {
+              "x-amz-list-member": " one,two , three "
+          },
+          "body": ""
+        }
+      }
+    ]
+  }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/ec2.json 2.31.35-1/tests/unit/botocore/protocols/output/ec2.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/ec2.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/ec2.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,612 +1,1847 @@
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType",
-            "locationName": "FooNum"
-          },
-          "FalseBool": {
-            "shape": "BooleanType"
-          },
-          "TrueBool": {
-            "shape": "BooleanType"
-          },
-          "Float": {
-            "shape": "FloatType"
-          },
-          "Double": {
-            "shape": "DoubleType"
-          },
-          "Long": {
-            "shape": "LongType"
-          },
-          "Char": {
-            "shape": "CharType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "DoubleType": {
-        "type": "double"
-      },
-      "LongType": {
-        "type": "long"
-      },
-      "CharType": {
-        "type": "character"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Str": "myname",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><RequestId>request-id</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Blob": {
-            "shape": "BlobType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Blob": "value"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Blob>dmFsdWU=</Blob><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><ListMember><member>abc</member><member>123</member></ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List with custom member name",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><ListMember><item>abc</item><item>123</item></ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened List",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType",
-            "flattened": true
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><ListMember>abc</ListMember><ListMember>123</ListMember><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Normal map",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StructureType"
-        }
-      },
-      "StructureType": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": {
-              "foo": "bar"
-            },
-            "baz": {
-              "foo": "bam"
-            }
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened map",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "MapType",
-            "flattened": true
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Named map",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "MapType",
-            "flattened": true
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType",
-          "locationName": "foo"
-        },
-        "value": {
-          "shape": "StringType",
-          "locationName": "bar"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Map><foo>qux</foo><bar>bar</bar></Map><Map><foo>baz</foo><bar>bam</bar></Map><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Empty string",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Foo": ""
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Foo/><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp members",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          },
-          "StructMember": {
-            "shape": "TimeContainer"
-          }
-        }
-      },
-      "TimeContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "TimestampType"
-          },
-          "bar": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "TimeArg": 1398796238,
-          "TimeCustom": 1398796238,
-          "TimeFormat": 1398796238,
-          "StructMember": {
-            "foo": 1398796238,
-            "bar": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions",
-    "metadata": {
-      "protocol": "ec2"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "OtherExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-              "shape": "StringType"
-          }
-        }
-      },
-      "StatusShape": {
-        "type": "integer"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<Response><Errors><Error><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<Response><Errors><Error><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<Response><Errors><Error><Code>UndefinedShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></Errors></Response>"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for DatetimeOffsets operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "DatetimeOffsetsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryDateTimeWithNegativeOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<DatetimeOffsetsResponse xmlns=\"https://example.com/\">\n    <datetime>2019-12-16T22:48:18-01:00</datetime>\n    <requestId>requestid</requestId>\n</DatetimeOffsetsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2QueryDateTimeWithPositiveOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<DatetimeOffsetsResponse xmlns=\"https://example.com/\">\n    <datetime>2019-12-17T00:48:18+01:00</datetime>\n    <requestId>requestid</requestId>\n</DatetimeOffsetsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<EmptyInputAndEmptyOutputResponse xmlns=\"https://example.com/\">\n    <requestId>requestid</requestId>\n</EmptyInputAndEmptyOutputResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryDateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<FractionalSecondsResponse xmlns=\"https://example.com/\">\n    <datetime>2000-01-02T20:34:56.123Z</datetime>\n    <requestId>requestid</requestId>\n</FractionalSecondsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "GreetingWithErrorsOutput": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2GreetingWithErrors",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "GreetingWithErrorsOutput"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>"
+                },
+                "description": "Ensures that operations with errors successfully know how to deserialize the successful response",
+                "result": {
+                    "greeting": "Hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<GreetingWithErrorsResponse xmlns=\"https://example.com/\">\n    <greeting>Hello</greeting>\n    <requestId>requestid</requestId>\n</GreetingWithErrorsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2InvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>",
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple XML errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<Response>\n    <Errors>\n        <Error>\n            <Code>InvalidGreeting</Code>\n            <Message>Hi</Message>\n        </Error>\n    </Errors>\n    <RequestID>foo-id</RequestID>\n</Response>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2ComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>",
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<Response>\n    <Errors>\n        <Error>\n            <Code>ComplexError</Code>\n            <Message>Hi</Message>\n            <TopLevel>Top level</TopLevel>\n            <Nested>\n                <Foo>bar</Foo>\n            </Nested>\n        </Error>\n    </Errors>\n    <RequestID>foo-id</RequestID>\n</Response>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for IgnoresWrappingXmlName operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "IgnoresWrappingXmlNameOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "IgnoreMe"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2IgnoresWrappingXmlName",
+                "given": {
+                    "name": "IgnoresWrappingXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "IgnoresWrappingXmlNameOutput"
+                    },
+                    "documentation": "<p>The xmlName trait on the output structure is ignored in AWS Query.</p> <p>The wrapping element is always operation name + &quot;Response&quot;.</p>"
+                },
+                "description": "The xmlName trait on the output structure is ignored in the ec2 protocol",
+                "result": {
+                    "foo": "bar"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<IgnoresWrappingXmlNameResponse xmlns=\"https://example.com/\">\n    <foo>bar</foo>\n    <requestId>requestid</requestId>\n</IgnoresWrappingXmlNameResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "NoInputAndOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2QueryNoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request payload or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<NoInputAndOutputResponse xmlns=\"https://example.com/\">\n    <requestId>requestid</requestId>\n</NoInputAndOutputResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveXmlShapes operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "RecursiveXmlShapesOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveXmlShapesOutputNested1"
+                    }
+                }
+            },
+            "RecursiveXmlShapesOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveXmlShapesOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveXmlShapesOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveXmlShapesOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2RecursiveShapes",
+                "given": {
+                    "name": "RecursiveXmlShapes",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RecursiveXmlShapesOutput"
+                    },
+                    "documentation": "<p>Recursive shapes</p>"
+                },
+                "description": "Serializes recursive structures",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<RecursiveXmlShapesResponse xmlns=\"https://example.com/\">\n    <nested>\n        <foo>Foo1</foo>\n        <nested>\n            <bar>Bar1</bar>\n            <recursiveMember>\n                <foo>Foo2</foo>\n                <nested>\n                    <bar>Bar2</bar>\n                </nested>\n            </recursiveMember>\n        </nested>\n    </nested>\n    <requestId>requestid</requestId>\n</RecursiveXmlShapesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarXmlProperties operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "SimpleScalarXmlPropertiesOutput": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "emptyStringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2SimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "stringValue": "string",
+                    "emptyStringValue": "",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <stringValue>string</stringValue>\n    <emptyStringValue/>\n    <trueBooleanValue>true</trueBooleanValue>\n    <falseBooleanValue>false</falseBooleanValue>\n    <byteValue>1</byteValue>\n    <shortValue>2</shortValue>\n    <integerValue>3</integerValue>\n    <longValue>4</longValue>\n    <floatValue>5.5</floatValue>\n    <DoubleDribble>6.5</DoubleDribble>\n    <requestId>requestid</requestId>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsNaNFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <floatValue>NaN</floatValue>\n    <DoubleDribble>NaN</DoubleDribble>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <floatValue>Infinity</floatValue>\n    <DoubleDribble>Infinity</DoubleDribble>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2QuerySupportsNegativeInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <floatValue>-Infinity</floatValue>\n    <DoubleDribble>-Infinity</DoubleDribble>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlBlobs operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlBlobsOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlBlobs",
+                "given": {
+                    "name": "XmlBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "result": {
+                    "data": "value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlBlobsResponse xmlns=\"https://example.com/\">\n    <data>dmFsdWU=</data>\n    <requestId>requestid</requestId>\n</XmlBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyBlobs operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlBlobsOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlEmptyBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    }
+                },
+                "description": "Empty blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlEmptyBlobsResponse xmlns=\"https://example.com/\">\n    <data></data>\n    <requestId>requestid</requestId>\n</XmlEmptyBlobsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlEmptySelfClosedBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    }
+                },
+                "description": "Empty self closed blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlEmptyBlobsResponse xmlns=\"https://example.com/\">\n    <data/>\n    <requestId>requestid</requestId>\n</XmlEmptyBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyLists operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlListsOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlEmptyLists",
+                "given": {
+                    "name": "XmlEmptyLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlListsOutput"
+                    }
+                },
+                "description": "Deserializes empty XML lists",
+                "result": {
+                    "stringList": [],
+                    "stringSet": []
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyListsResponse xmlns=\"https://example.com/\">\n  <stringList/>\n  <stringSet></stringSet>\n</XmlEmptyListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEnums operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlEnumsOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlEnums",
+                "given": {
+                    "name": "XmlEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlEnumsOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>"
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlEnumsResponse xmlns=\"https://example.com/\">\n    <fooEnum1>Foo</fooEnum1>\n    <fooEnum2>0</fooEnum2>\n    <fooEnum3>1</fooEnum3>\n    <fooEnumList>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumList>\n    <fooEnumSet>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumSet>\n    <fooEnumMap>\n        <entry>\n            <key>hi</key>\n            <value>Foo</value>\n        </entry>\n        <entry>\n            <key>zero</key>\n            <value>0</value>\n        </entry>\n    </fooEnumMap>\n    <requestId>requestid</requestId>\n</XmlEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlIntEnums operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlIntEnumsOutput": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlIntEnums",
+                "given": {
+                    "name": "XmlIntEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlIntEnumsOutput"
+                    },
+                    "documentation": "<p>This example serializes intEnums as top level properties, in lists, sets, and maps.</p>"
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlIntEnumsResponse xmlns=\"https://example.com/\">\n    <intEnum1>1</intEnum1>\n    <intEnum2>2</intEnum2>\n    <intEnum3>3</intEnum3>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <intEnumSet>\n        <member>1</member>\n        <member>2</member>\n    </intEnumSet>\n    <intEnumMap>\n        <entry>\n            <key>a</key>\n            <value>1</value>\n        </entry>\n        <entry>\n            <key>b</key>\n            <value>2</value>\n        </entry>\n    </intEnumMap>\n    <requestId>requestid</requestId>\n</XmlIntEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlLists operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlListsOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlLists",
+                "given": {
+                    "name": "XmlLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlListsOutput"
+                    },
+                    "documentation": "<p>This test case serializes XML lists for the following cases for both input and output:</p> <ol> <li>Normal XML lists.</li> <li>Normal XML sets.</li> <li>XML lists of lists.</li> <li>XML lists with @xmlName on its members</li> <li>Flattened XML lists.</li> <li>Flattened XML lists with @xmlName.</li> <li>Flattened XML lists with @xmlNamespace.</li> <li>Lists of structures.</li> </ol>"
+                },
+                "description": "Tests for XML list serialization",
+                "result": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "renamedListMembers": [
+                        "foo",
+                        "bar"
+                    ],
+                    "flattenedList": [
+                        "hi",
+                        "bye"
+                    ],
+                    "flattenedList2": [
+                        "yep",
+                        "nope"
+                    ],
+                    "flattenedListWithMemberNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "flattenedListWithNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlListsResponse xmlns=\"https://example.com/\">\n    <stringList>\n        <member>foo</member>\n        <member>bar</member>\n    </stringList>\n    <stringSet>\n        <member>foo</member>\n        <member>bar</member>\n    </stringSet>\n    <integerList>\n        <member>1</member>\n        <member>2</member>\n    </integerList>\n    <booleanList>\n        <member>true</member>\n        <member>false</member>\n    </booleanList>\n    <timestampList>\n        <member>2014-04-29T18:30:38Z</member>\n        <member>2014-04-29T18:30:38Z</member>\n    </timestampList>\n    <enumList>\n        <member>Foo</member>\n        <member>0</member>\n    </enumList>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <nestedStringList>\n        <member>\n            <member>foo</member>\n            <member>bar</member>\n        </member>\n        <member>\n            <member>baz</member>\n            <member>qux</member>\n        </member>\n    </nestedStringList>\n    <renamed>\n        <item>foo</item>\n        <item>bar</item>\n    </renamed>\n    <flattenedList>hi</flattenedList>\n    <flattenedList>bye</flattenedList>\n    <customName>yep</customName>\n    <customName>nope</customName>\n    <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">a</flattenedListWithMemberNamespace>\n    <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">b</flattenedListWithMemberNamespace>\n    <flattenedListWithNamespace>a</flattenedListWithNamespace>\n    <flattenedListWithNamespace>b</flattenedListWithNamespace>\n    <myStructureList>\n        <item>\n            <value>1</value>\n            <other>2</other>\n        </item>\n        <item>\n            <value>3</value>\n            <other>4</other>\n        </item>\n    </myStructureList>\n    <requestId>requestid</requestId>\n</XmlListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlNamespaces operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlNamespacesOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "XmlNamespaceNested"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "XmlNamespaceNested": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "xmlNamespace": {
+                            "prefix": "baz",
+                            "uri": "http://baz.com"
+                        }
+                    },
+                    "values": {
+                        "shape": "XmlNamespacedList",
+                        "xmlNamespace": "http://qux.com"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "String": {
+                "type": "string"
+            },
+            "XmlNamespacedList": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "http://bux.com"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlNamespaces",
+                "given": {
+                    "name": "XmlNamespaces",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlNamespacesOutput"
+                    }
+                },
+                "description": "Serializes XML namespaces",
+                "result": {
+                    "nested": {
+                        "foo": "Foo",
+                        "values": [
+                            "Bar",
+                            "Baz"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlNamespacesResponse xmlns=\"https://example.com/\">\n    <nested>\n        <foo xmlns:baz=\"http://baz.com\">Foo</foo>\n        <values xmlns=\"http://qux.com\">\n            <member xmlns=\"http://bux.com\">Bar</member>\n            <member xmlns=\"http://bux.com\">Baz</member>\n        </values>\n    </nested>\n    <requestId>requestid</requestId>\n</XmlNamespacesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlTimestamps operation",
+        "metadata": {
+            "protocol": "ec2",
+            "protocols": [
+                "ec2"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlTimestampsOutput": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "Ec2XmlTimestamps",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "result": {
+                    "normal": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <normal>2014-04-29T18:30:38Z</normal>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "result": {
+                    "dateTime": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <dateTime>2014-04-29T18:30:38Z</dateTime>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "result": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <dateTimeOnTarget>2014-04-29T18:30:38Z</dateTimeOnTarget>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "result": {
+                    "epochSeconds": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <epochSeconds>1398796238</epochSeconds>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "result": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <epochSecondsOnTarget>1398796238</epochSecondsOnTarget>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "result": {
+                    "httpDate": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <httpDate>Tue, 29 Apr 2014 18:30:38 GMT</httpDate>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "Ec2XmlTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "result": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml;charset=UTF-8"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <httpDateOnTarget>Tue, 29 Apr 2014 18:30:38 GMT</httpDateOnTarget>\n    <requestId>requestid</requestId>\n</XmlTimestampsResponse>\n"
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/json.json 2.31.35-1/tests/unit/botocore/protocols/output/json.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/json.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/json.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,824 +1,2326 @@
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType"
-          },
-          "FalseBool": {
-            "shape": "BooleanType"
-          },
-          "TrueBool": {
-            "shape": "BooleanType"
-          },
-          "Float": {
-            "shape": "FloatType"
-          },
-          "Double": {
-            "shape": "DoubleType"
-          },
-          "Long": {
-            "shape": "LongType"
-          },
-          "Char": {
-            "shape": "CharType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "DoubleType": {
-        "type": "double"
-      },
-      "LongType": {
-        "type": "long"
-      },
-      "CharType": {
-        "type": "character"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Str": "myname",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"Str\": \"myname\", \"Num\": 123, \"FalseBool\": false, \"TrueBool\": true, \"Float\": 1.2, \"Double\": 1.3, \"Long\": 200, \"Char\": \"a\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob members",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "BlobMember": {
-            "shape": "BlobType"
-          },
-          "StructMember": {
-            "shape": "BlobContainer"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      },
-      "BlobContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "BlobType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "BlobMember": "hi!",
-          "StructMember": {
-            "foo": "there!"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"BlobMember\": \"aGkh\", \"StructMember\": {\"foo\": \"dGhlcmUh\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp members",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          },
-          "StructMember": {
-            "shape": "TimeContainer"
-          }
-        }
-      },
-      "TimeContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "TimestampType"
-          },
-          "bar": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "iso8601",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "TimeArg": 1398796238,
-          "TimeCustom": 1398796238,
-          "TimeFormat": 1398796238,
-          "StructMember": {
-            "foo": 1398796238,
-            "bar": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"TimeArg\": 1398796238, \"TimeCustom\": \"Tue, 29 Apr 2014 18:30:38 GMT\", \"TimeFormat\": \"2014-04-29T18:30:38+00:00\", \"StructMember\": {\"foo\": 1398796238, \"bar\": \"2014-04-29T18:30:38+00:00\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType"
-          },
-          "ListMemberMap": {
-            "shape": "ListTypeMap"
-          },
-          "ListMemberStruct": {
-            "shape": "ListTypeStruct"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "ListTypeMap": {
-        "type": "list",
-        "member": {
-          "shape": "MapType"
-        }
-      },
-      "ListTypeStruct": {
-        "type": "list",
-        "member": {
-          "shape": "StructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-        }
-      },
-      "MapType": {
-        "type": "string",
-        "key": { "shape": "StringType" },
-        "value": { "shape": "StringType" }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["a", "b"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"ListMember\": [\"a\", \"b\"]}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["a", null],
-          "ListMemberMap": [{}, null, null, {}],
-          "ListMemberStruct": [{}, null, null, {}]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"ListMember\": [\"a\", null], \"ListMemberMap\": [{}, null, null, {}], \"ListMemberStruct\": [{}, null, null, {}]}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Maps",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "MapMember": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "NumberList"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "NumberList": {
-        "type": "list",
-        "member": {
-          "shape": "IntegerType"
-        }
-      },
-      "IntegerType": {
-        "type": "integer"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "MapMember": {
-            "a": [1, 2],
-            "b": [3, 4]
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"MapMember\": {\"a\": [1, 2], \"b\": [3, 4]}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Ignores extra data",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "StrType": {
-            "shape": "StrType"
-          }
-        }
-      },
-      "StrType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {},
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"foo\": \"bar\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "RPC JSON Event Stream",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "Payload": {"shape": "EventStream"},
-            "InitialResponse": {"shape": "StringType"}
-        }
-      },
-      "EventStream": {
-          "type": "structure",
-          "eventstream": true,
-          "members": {
-              "TypeA": {"shape": "TypeAEvent"},
-              "TypeB": {"shape": "TypeBEvent"}
-          }
-      },
-      "TypeAEvent": {
-          "type": "structure",
-          "event": true,
-          "members": {
-              "Payload": {
-                  "shape": "BlobType",
-                  "eventpayload": true
-              }
-          }
-      },
-      "TypeBEvent": {
-          "type": "structure",
-          "event": true,
-          "members": {
-              "Details": {
-                  "shape": "Details",
-                  "eventpayload": true
-              }
-          }
-      },
-      "Details": {
-          "type": "structure",
-          "members": {
-              "StringField": {"shape": "StringType"},
-              "IntegerField": {"shape": "IntegerType"}
-          }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "InitialResponse": "sometext",
-          "Payload": [
-              {
-                  "TypeA": {"Payload": "somebytes"}
-              },
-              {
-                  "TypeB": {
-                      "Details": {
-                          "StringField": "somestring",
-                          "IntegerField": 123
-                      }
-                  }
-              }
-          ]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "AAAAfgAAAE/Fo93GDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcAEGluaXRpYWwtcmVzcG9uc2UNOmNvbnRlbnQtdHlwZQcACXRleHQvanNvbnsiSW5pdGlhbFJlc3BvbnNlIjogInNvbWV0ZXh0In32mCSDAAAAbAAAAFPLgkVrDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVBDTpjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1zb21lYnl0ZXMesj2HAAAAhgAAAEQqNR/SDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVCDTpjb250ZW50LXR5cGUHAAl0ZXh0L2pzb257IlN0cmluZ0ZpZWxkIjogInNvbWVzdHJpbmciLCAiSW50ZWdlckZpZWxkIjogMTIzfffGN30="
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Code": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "OtherExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-              "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody",
-          "Code": "OtherExceptionShape",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "{ \"__type\": \"ExceptionShape\", \"Code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "{ \"__type\": \"OtherExceptionShape\", \"Code\": \"ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "{ \"__type\": \"UndefinedShape\", \"Code\": \"ExceptionShape\", \"BodyMember\": \"mybody\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions with jsonVersion 1.0",
-    "metadata": {
-      "protocol": "json",
-      "jsonVersion": "1.0"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "{ \"__type\": \"FooPrefix#ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize document with standalone primitive type in a JSON response",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "inlineDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": "foo"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": \"foo\"}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": 123
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": 123}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": 1.2
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": 1.2}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": true
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": true}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": ""
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": \"\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize inline document in a JSON response",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "inlineDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "inlineDocument": {"foo": "bar"}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"inlineDocument\": {\"foo\": \"bar\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serialize aggregate documents in a JSON response",
-    "metadata": {
-      "protocol": "json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "parentDocument": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "parentDocument": {
-              "str": "test",
-              "num": 123,
-              "float": 1.2,
-              "bool": true,
-              "null": "",
-              "document": {"foo": false},
-              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"parentDocument\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "parentDocument": [
-              "test",
-              123,
-              1.2,
-              true,
-              "",
-              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
-              ["foo", false]
-          ]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"parentDocument\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for DatetimeOffsets operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "DatetimeOffsetsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11DateTimeWithNegativeOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "      {\n          \"datetime\": \"2019-12-16T22:48:18-01:00\"\n      }\n"
+                }
+            },
+            {
+                "id": "AwsJson11DateTimeWithPositiveOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "      {\n          \"datetime\": \"2019-12-17T00:48:18+01:00\"\n      }\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "handles_empty_output_shape",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "When no output is defined, the service is expected to return\nan empty payload, however, client must ignore a JSON payload\nif one is returned. This ensures that if output is added later,\nthen it will not break the client.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "handles_unexpected_json_output",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "This client-only test builds on handles_empty_output_shape,\nby including unexpected fields in the JSON. A client\nneeds to ignore JSON output that is empty or that contains\nJSON object data.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"foo\": true\n}"
+                }
+            },
+            {
+                "id": "json_1_1_service_responds_with_no_payload",
+                "given": {
+                    "name": "EmptyOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "When no output is defined, the service is expected to return\nan empty payload. Despite the lack of a payload, the service\nis expected to always send a Content-Type header. Clients must\nhandle cases where a service returns a JSON object and where\na service returns no JSON at all.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11DateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "      {\n          \"datetime\": \"2000-01-02T20:34:56.123Z\"\n      }\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11InvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple JSON errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"InvalidGreeting\",\n    \"Message\": \"Hi\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11ComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "description": "Parses a complex error with no message member",
+                "errorCode": "ComplexError",
+                "error": {
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"ComplexError\",\n    \"TopLevel\": \"Top level\",\n    \"Nested\": {\n        \"Foo\": \"bar\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11EmptyComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {},
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"ComplexError\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "FooError": {
+                "type": "structure",
+                "members": {},
+                "documentation": "<p>This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.</p>",
+                "exception": true,
+                "fault": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11FooErrorUsingXAmznErrorType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorUsingXAmznErrorTypeWithUri",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorUsingCode",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"code\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorUsingCodeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.restjson#FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorUsingCodeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorWithDunderType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorWithDunderTypeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.restjson#FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11FooErrorWithDunderTypeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonEnums operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "JsonEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11Enums",
+                "given": {
+                    "name": "JsonEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"fooEnum1\": \"Foo\",\n    \"fooEnum2\": \"0\",\n    \"fooEnum3\": \"1\",\n    \"fooEnumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumSet\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumMap\": {\n        \"hi\": \"Foo\",\n        \"zero\": \"0\"\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonIntEnums operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "JsonIntEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11IntEnums",
+                "given": {
+                    "name": "JsonIntEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonIntEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes intEnums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amz-Target": "JsonProtocol.JsonIntEnums"
+                    },
+                    "body": "{\n    \"intEnum1\": 1,\n    \"intEnum2\": 2,\n    \"intEnum3\": 3,\n    \"intEnumList\": [\n        1,\n        2\n    ],\n    \"intEnumSet\": [\n        1,\n        2\n    ],\n    \"intEnumMap\": {\n        \"a\": 1,\n        \"b\": 2\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "UnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                },
+                "documentation": "<p>A shared structure that contains a single union member.</p>"
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11DeserializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a string union value",
+                "result": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a boolean union value",
+                "result": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a number union value",
+                "result": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a blob union value",
+                "result": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a timestamp union value",
+                "result": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes an enum union value",
+                "result": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a list union value",
+                "result": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a map union value",
+                "result": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a structure union value",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson11DeserializeIgnoreType",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Ignores an unrecognized __type property",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"__type\": \"aws.protocoltests.json10#MyUnion\",\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for KitchenSinkOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "KitchenSink": {
+                "type": "structure",
+                "members": {
+                    "Blob": {
+                        "shape": "Blob"
+                    },
+                    "Boolean": {
+                        "shape": "Boolean"
+                    },
+                    "Double": {
+                        "shape": "Double"
+                    },
+                    "EmptyStruct": {
+                        "shape": "EmptyStruct"
+                    },
+                    "Float": {
+                        "shape": "Float"
+                    },
+                    "HttpdateTimestamp": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "Integer": {
+                        "shape": "Integer"
+                    },
+                    "Iso8601Timestamp": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "JsonValue": {
+                        "shape": "JsonValue",
+                        "jsonvalue": true
+                    },
+                    "ListOfLists": {
+                        "shape": "ListOfListOfStrings"
+                    },
+                    "ListOfMapsOfStrings": {
+                        "shape": "ListOfMapsOfStrings"
+                    },
+                    "ListOfStrings": {
+                        "shape": "ListOfStrings"
+                    },
+                    "ListOfStructs": {
+                        "shape": "ListOfStructs"
+                    },
+                    "Long": {
+                        "shape": "Long"
+                    },
+                    "MapOfListsOfStrings": {
+                        "shape": "MapOfListsOfStrings"
+                    },
+                    "MapOfMaps": {
+                        "shape": "MapOfMapOfStrings"
+                    },
+                    "MapOfStrings": {
+                        "shape": "MapOfStrings"
+                    },
+                    "MapOfStructs": {
+                        "shape": "MapOfStructs"
+                    },
+                    "RecursiveList": {
+                        "shape": "ListOfKitchenSinks"
+                    },
+                    "RecursiveMap": {
+                        "shape": "MapOfKitchenSinks"
+                    },
+                    "RecursiveStruct": {
+                        "shape": "KitchenSink"
+                    },
+                    "SimpleStruct": {
+                        "shape": "SimpleStruct"
+                    },
+                    "String": {
+                        "shape": "String"
+                    },
+                    "StructWithJsonName": {
+                        "shape": "StructWithJsonName"
+                    },
+                    "Timestamp": {
+                        "shape": "Timestamp"
+                    },
+                    "UnixTimestamp": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "EmptyStruct": {
+                "type": "structure",
+                "members": {}
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "JsonValue": {
+                "type": "string"
+            },
+            "ListOfListOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "ListOfStrings"
+                }
+            },
+            "ListOfMapsOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "MapOfStrings"
+                }
+            },
+            "ListOfStrings": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "ListOfStructs": {
+                "type": "list",
+                "member": {
+                    "shape": "SimpleStruct"
+                }
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "MapOfListsOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "ListOfStrings"
+                }
+            },
+            "MapOfMapOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "MapOfStrings"
+                }
+            },
+            "MapOfStrings": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "MapOfStructs": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "SimpleStruct"
+                }
+            },
+            "ListOfKitchenSinks": {
+                "type": "list",
+                "member": {
+                    "shape": "KitchenSink"
+                }
+            },
+            "MapOfKitchenSinks": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "KitchenSink"
+                }
+            },
+            "SimpleStruct": {
+                "type": "structure",
+                "members": {
+                    "Value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StructWithJsonName": {
+                "type": "structure",
+                "members": {
+                    "Value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "parses_operations_with_empty_json_bodies",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses operations with empty JSON bodies",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "parses_string_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses string shapes",
+                "result": {
+                    "String": "string-value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"String\":\"string-value\"}"
+                }
+            },
+            {
+                "id": "parses_integer_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses integer shapes",
+                "result": {
+                    "Integer": 1234
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Integer\":1234}"
+                }
+            },
+            {
+                "id": "parses_long_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses long shapes",
+                "result": {
+                    "Long": 1234567890123456789
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Long\":1234567890123456789}"
+                }
+            },
+            {
+                "id": "parses_float_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses float shapes",
+                "result": {
+                    "Float": 1234.5
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Float\":1234.5}"
+                }
+            },
+            {
+                "id": "parses_double_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses double shapes",
+                "result": {
+                    "Double": 1.2345678912345679E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Double\":123456789.12345679}"
+                }
+            },
+            {
+                "id": "parses_boolean_shapes_true",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses boolean shapes (true)",
+                "result": {
+                    "Boolean": true
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Boolean\":true}"
+                }
+            },
+            {
+                "id": "parses_boolean_false",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses boolean (false)",
+                "result": {
+                    "Boolean": false
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Boolean\":false}"
+                }
+            },
+            {
+                "id": "parses_blob_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses blob shapes",
+                "result": {
+                    "Blob": "binary-value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Blob\":\"YmluYXJ5LXZhbHVl\"}"
+                }
+            },
+            {
+                "id": "parses_timestamp_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses timestamp shapes",
+                "result": {
+                    "Timestamp": 946845296
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Timestamp\":946845296}"
+                }
+            },
+            {
+                "id": "parses_iso8601_timestamps",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses iso8601 timestamps",
+                "result": {
+                    "Iso8601Timestamp": 946845296
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"Iso8601Timestamp\":\"2000-01-02T20:34:56Z\"}"
+                }
+            },
+            {
+                "id": "parses_httpdate_timestamps",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses httpdate timestamps",
+                "result": {
+                    "HttpdateTimestamp": 946845296
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"HttpdateTimestamp\":\"Sun, 02 Jan 2000 20:34:56 GMT\"}"
+                }
+            },
+            {
+                "id": "parses_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses list shapes",
+                "result": {
+                    "ListOfStrings": [
+                        "abc",
+                        "mno",
+                        "xyz"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"ListOfStrings\":[\"abc\",\"mno\",\"xyz\"]}"
+                }
+            },
+            {
+                "id": "parses_list_of_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses list of map shapes",
+                "result": {
+                    "ListOfMapsOfStrings": [
+                        {
+                            "size": "large"
+                        },
+                        {
+                            "color": "red"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"ListOfMapsOfStrings\":[{\"size\":\"large\"},{\"color\":\"red\"}]}"
+                }
+            },
+            {
+                "id": "parses_list_of_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses list of list shapes",
+                "result": {
+                    "ListOfLists": [
+                        [
+                            "abc",
+                            "mno",
+                            "xyz"
+                        ],
+                        [
+                            "hjk",
+                            "qrs",
+                            "tuv"
+                        ]
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"ListOfLists\":[[\"abc\",\"mno\",\"xyz\"],[\"hjk\",\"qrs\",\"tuv\"]]}"
+                }
+            },
+            {
+                "id": "parses_list_of_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses list of structure shapes",
+                "result": {
+                    "ListOfStructs": [
+                        {
+                            "Value": "value-1"
+                        },
+                        {
+                            "Value": "value-2"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"ListOfStructs\":[{\"Value\":\"value-1\"},{\"Value\":\"value-2\"}]}"
+                }
+            },
+            {
+                "id": "parses_list_of_recursive_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses list of recursive structure shapes",
+                "result": {
+                    "RecursiveList": [
+                        {
+                            "RecursiveList": [
+                                {
+                                    "RecursiveList": [
+                                        {
+                                            "String": "value"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"RecursiveList\":[{\"RecursiveList\":[{\"RecursiveList\":[{\"String\":\"value\"}]}]}]}"
+                }
+            },
+            {
+                "id": "parses_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses map shapes",
+                "result": {
+                    "MapOfStrings": {
+                        "size": "large",
+                        "color": "red"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"MapOfStrings\":{\"size\":\"large\",\"color\":\"red\"}}"
+                }
+            },
+            {
+                "id": "parses_map_of_list_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses map of list shapes",
+                "result": {
+                    "MapOfListsOfStrings": {
+                        "sizes": [
+                            "large",
+                            "small"
+                        ],
+                        "colors": [
+                            "red",
+                            "green"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"MapOfListsOfStrings\":{\"sizes\":[\"large\",\"small\"],\"colors\":[\"red\",\"green\"]}}"
+                }
+            },
+            {
+                "id": "parses_map_of_map_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses map of map shapes",
+                "result": {
+                    "MapOfMaps": {
+                        "sizes": {
+                            "large": "L",
+                            "medium": "M"
+                        },
+                        "colors": {
+                            "red": "R",
+                            "blue": "B"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"MapOfMaps\":{\"sizes\":{\"large\":\"L\",\"medium\":\"M\"},\"colors\":{\"red\":\"R\",\"blue\":\"B\"}}}"
+                }
+            },
+            {
+                "id": "parses_map_of_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses map of structure shapes",
+                "result": {
+                    "MapOfStructs": {
+                        "size": {
+                            "Value": "small"
+                        },
+                        "color": {
+                            "Value": "red"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"MapOfStructs\":{\"size\":{\"Value\":\"small\"},\"color\":{\"Value\":\"red\"}}}"
+                }
+            },
+            {
+                "id": "parses_map_of_recursive_structure_shapes",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses map of recursive structure shapes",
+                "result": {
+                    "RecursiveMap": {
+                        "key-1": {
+                            "RecursiveMap": {
+                                "key-2": {
+                                    "RecursiveMap": {
+                                        "key-3": {
+                                            "String": "value"
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\"RecursiveMap\":{\"key-1\":{\"RecursiveMap\":{\"key-2\":{\"RecursiveMap\":{\"key-3\":{\"String\":\"value\"}}}}}}}"
+                }
+            },
+            {
+                "id": "parses_the_request_id_from_the_response",
+                "given": {
+                    "name": "KitchenSinkOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "KitchenSink"
+                    }
+                },
+                "description": "Parses the request id from the response",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1",
+                        "X-Amzn-Requestid": "amazon-uniq-request-id"
+                    },
+                    "body": "{}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NullOperation operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "NullOperationInputOutput": {
+                "type": "structure",
+                "members": {
+                    "string": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11StructuresDontDeserializeNullValues",
+                "given": {
+                    "name": "NullOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "NullOperationInputOutput"
+                    }
+                },
+                "description": "Null structure values are dropped",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"string\": null\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PutAndGetInlineDocuments operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "PutAndGetInlineDocumentsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "inlineDocument": {
+                        "shape": "Document"
+                    }
+                }
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "PutAndGetInlineDocumentsInput",
+                "given": {
+                    "name": "PutAndGetInlineDocuments",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "PutAndGetInlineDocumentsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes an inline document as part of the payload.</p>"
+                },
+                "description": "Serializes inline documents in a JSON response.",
+                "result": {
+                    "inlineDocument": {
+                        "foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"inlineDocument\": {\"foo\": \"bar\"}\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2018-01-01",
+            "jsonVersion": "1.1",
+            "targetPrefix": "JsonProtocol"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson11SupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"doubleValue\": \"NaN\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11SupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"doubleValue\": \"Infinity\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson11SupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.1"
+                    },
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"doubleValue\": \"-Infinity\"\n}"
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/json_1_0-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/output/json_1_0-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/json_1_0-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/json_1_0-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,142 @@
+[
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2020-07-14",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblejsonrpc10",
+            "jsonVersion": "1.0",
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "serviceFullName": "QueryCompatibleJsonRpc10",
+            "serviceId": "Query Compatible JSON RPC 10",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleJsonRpc10",
+            "targetPrefix": "QueryCompatibleJsonRpc10",
+            "uid": "query-compatible-json-rpc-10-2020-07-14"
+        },
+        "shapes": {
+            "NoCustomCodeError": {
+                "type": "structure",
+                "members": {
+                    "message": {
+                        "shape": "String"
+                    }
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryCompatibleAwsJson10NoCustomCodeError",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "NoCustomCodeError"
+                        }
+                    ]
+                },
+                "description": "Parses simple errors with no query error code",
+                "errorCode": "NoCustomCodeError",
+                "errorMessage": "Hi",
+                "error": {
+                    "message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#NoCustomCodeError\",\n    \"message\": \"Hi\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2020-07-14",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblejsonrpc10",
+            "jsonVersion": "1.0",
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "serviceFullName": "QueryCompatibleJsonRpc10",
+            "serviceId": "Query Compatible JSON RPC 10",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleJsonRpc10",
+            "targetPrefix": "QueryCompatibleJsonRpc10",
+            "uid": "query-compatible-json-rpc-10-2020-07-14"
+        },
+        "shapes": {
+            "CustomCodeError": {
+                "type": "structure",
+                "members": {
+                    "message": {
+                        "shape": "String"
+                    }
+                },
+                "error": {
+                    "code": "Customized",
+                    "httpStatusCode": 402,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryCompatibleAwsJson10CustomCodeError",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "CustomCodeError"
+                        }
+                    ]
+                },
+                "description": "Parses simple errors with query error code",
+                "errorCode": "Customized",
+                "errorMessage": "Hi",
+                "error": {
+                    "message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0",
+                        "x-amzn-query-error": "Customized;Sender"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#CustomCodeError\",\n    \"message\": \"Hi\"\n}"
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/json_1_0.json 2.31.35-1/tests/unit/botocore/protocols/output/json_1_0.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/json_1_0.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/json_1_0.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1157 @@
+[
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10EmptyInputAndEmptyOutputSendJsonObject",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "A service will always return a JSON object for operations with modeled output.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10InvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple JSON errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#InvalidGreeting\",\n    \"Message\": \"Hi\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "FooError": {
+                "type": "structure",
+                "members": {},
+                "documentation": "<p>This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.</p>",
+                "exception": true,
+                "fault": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10FooErrorUsingXAmznErrorType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorUsingXAmznErrorTypeWithUri",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorUsingCode",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"code\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorUsingCodeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.json10#FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorUsingCodeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorWithDunderType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorWithDunderTypeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#FooError\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10FooErrorWithDunderTypeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10ComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "description": "Parses a complex error with no message member",
+                "errorCode": "ComplexError",
+                "error": {
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#ComplexError\",\n    \"TopLevel\": \"Top level\",\n    \"Nested\": {\n        \"Foo\": \"bar\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10EmptyComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "description": "Parses a complex error with an empty body",
+                "errorCode": "ComplexError",
+                "error": {},
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.json10#ComplexError\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "JsonUnionsOutput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                }
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "intEnumValue": {
+                        "shape": "IntegerEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10DeserializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a string union value",
+                "result": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a boolean union value",
+                "result": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a number union value",
+                "result": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a blob union value",
+                "result": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a timestamp union value",
+                "result": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes an enum union value",
+                "result": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeIntEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes an intEnum union value",
+                "result": {
+                    "contents": {
+                        "intEnumValue": 1
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"intEnumValue\": 1\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a list union value",
+                "result": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a map union value",
+                "result": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a structure union value",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeIgnoreType",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Ignores an unrecognized __type property",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"__type\": \"aws.protocoltests.json10#MyUnion\",\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "AwsJson10DeserializeAllowNulls",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "JsonUnionsOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Allows for `: null` to be set for all unset fields",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"contents\": {\n      \"stringValue\": null,\n      \"booleanValue\": null,\n      \"numberValue\": null,\n      \"blobValue\": null,\n      \"timestampValue\": null,\n      \"enumValue\": null,\n      \"intEnumValue\": null,\n      \"listValue\": null,\n      \"mapValue\": null,\n      \"structureValue\": {\n          \"hi\": \"hello\"\n      }\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "AwsJson10HandlesEmptyOutputShape",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "When no output is defined, the service is expected to return\nan empty payload, however, client must ignore a JSON payload\nif one is returned. This ensures that if output is added later,\nthen it will not break the client.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "AwsJson10HandlesUnexpectedJsonOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "This client-only test builds on handles_empty_output_shape,\nby including unexpected fields in the JSON. A client\nneeds to ignore JSON output that is empty or that contains\nJSON object data.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"foo\": true\n}"
+                }
+            },
+            {
+                "id": "AwsJson10ServiceRespondsWithNoPayload",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "When no output is defined, the service is expected to return\nan empty payload. Despite the lack of a payload, the service\nis expected to always send a Content-Type header. Clients must\nhandle cases where a service returns a JSON object and where\na service returns no JSON at all.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "NoInputAndOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10NoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output always serializes an empty object payload.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "json",
+            "protocols": [
+                "json"
+            ],
+            "apiVersion": "2020-07-14",
+            "jsonVersion": "1.0",
+            "targetPrefix": "JsonRpc10"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesOutput": {
+                "type": "structure",
+                "members": {
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsJson10SupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"doubleValue\": \"NaN\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10SupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"doubleValue\": \"Infinity\"\n}"
+                }
+            },
+            {
+                "id": "AwsJson10SupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/x-amz-json-1.0"
+                    },
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"doubleValue\": \"-Infinity\"\n}"
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/query.json 2.31.35-1/tests/unit/botocore/protocols/output/query.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/query.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/query.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,931 +1,2376 @@
+
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType",
-            "locationName": "FooNum"
-          },
-          "FalseBool": {
-            "shape": "BooleanType"
-          },
-          "TrueBool": {
-            "shape": "BooleanType"
-          },
-          "Float": {
-            "shape": "FloatType"
-          },
-          "Double": {
-            "shape": "DoubleType"
-          },
-          "Long": {
-            "shape": "LongType"
-          },
-          "Char": {
-            "shape": "CharType"
-          },
-          "Timestamp": {
-            "shape": "TimestampType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "DoubleType": {
-        "type": "double"
-      },
-      "LongType": {
-        "type": "long"
-      },
-      "CharType": {
-        "type": "character"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Str": "myname",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a",
-          "Timestamp": 1422172800
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResult><ResponseMetadata><RequestId>request-id</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Not all members in response",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Str": "myname"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Str>myname</Str></OperationNameResult><ResponseMetadata><RequestId>request-id</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Blob": {
-            "shape": "BlobType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Blob": "value"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Blob>dmFsdWU=</Blob></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><ListMember><member>abc</member><member>123</member></ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List with custom member name",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><ListMember><item>abc</item><item>123</item></ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened List",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "flattened": true,
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><ListMember>abc</ListMember><ListMember>123</ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened single element list",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "flattened": true,
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><ListMember>abc</ListMember></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List of structures",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "List": {
-            "shape": "ListOfStructs"
-          }
-        }
-      },
-      "ListOfStructs": {
-        "type": "list",
-        "member": {
-          "shape": "StructureShape"
-        }
-      },
-      "StructureShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringShape"
-          },
-          "Bar": {
-            "shape": "StringShape"
-          },
-          "Baz": {
-            "shape": "StringShape"
-          }
-        }
-      },
-      "StringShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "List": [{"Foo": "firstfoo", "Bar": "firstbar", "Baz": "firstbaz"}, {"Foo": "secondfoo", "Bar": "secondbar", "Baz": "secondbaz"}]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><List><member><Foo>firstfoo</Foo><Bar>firstbar</Bar><Baz>firstbaz</Baz></member><member><Foo>secondfoo</Foo><Bar>secondbar</Bar><Baz>secondbaz</Baz></member></List></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened list of structures",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "resultWrapper": "OperationNameResult",
-        "members": {
-          "List": {
-            "shape": "ListOfStructs"
-          }
-        }
-      },
-      "ListOfStructs": {
-        "type": "list",
-        "flattened": true,
-        "member": {
-          "shape": "StructureShape"
-        }
-      },
-      "StructureShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringShape"
-          },
-          "Bar": {
-            "shape": "StringShape"
-          },
-          "Baz": {
-            "shape": "StringShape"
-          }
-        }
-      },
-      "StringShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "List": [{"Foo": "firstfoo", "Bar": "firstbar", "Baz": "firstbaz"}, {"Foo": "secondfoo", "Bar": "secondbar", "Baz": "secondbaz"}]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><List><Foo>firstfoo</Foo><Bar>firstbar</Bar><Baz>firstbaz</Baz></List><List><Foo>secondfoo</Foo><Bar>secondbar</Bar><Baz>secondbaz</Baz></List></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened list with location name",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "List": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "flattened": true,
-        "member": {
-          "shape": "StringShape",
-          "locationName": "NamedList"
-        }
-      },
-      "StringShape": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "List": ["a", "b"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08/\"><OperationNameResult><NamedList>a</NamedList><NamedList>b</NamedList></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Normal map",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-            "shape": "StringType"
-        },
-        "value": {
-            "shape": "StructType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "StructType": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "StringType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": {
-              "foo": "bar"
-            },
-            "baz": {
-              "foo": "bam"
-            }
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse xmlns=\"https://service.amazonaws.com/doc/2010-05-08\"><OperationNameResult><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened map",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap",
-            "flattened": true
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-            "shape": "StringType"
-        },
-        "value": {
-            "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened map in shape definition",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap",
-            "locationName": "Attribute"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-            "shape": "StringType",
-            "locationName": "Name"
-        },
-        "value": {
-            "shape": "StringType",
-            "locationName": "Value"
-        },
-        "flattened": true,
-        "locationName": "Attribute"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Attribute><Name>qux</Name><Value>bar</Value></Attribute></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Named map",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "flattened": true,
-        "key": {
-          "locationName": "foo",
-          "shape": "StringType"
-        },
-        "value": {
-          "locationName": "bar",
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Map><foo>qux</foo><bar>bar</bar></Map><Map><foo>baz</foo><bar>bam</bar></Map></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Empty string",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "resultWrapper": "OperationNameResult",
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Foo": ""
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><OperationNameResult><Foo/></OperationNameResult><ResponseMetadata><RequestId>requestid</RequestId></ResponseMetadata></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp members",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          },
-          "StructMember": {
-            "shape": "TimeContainer"
-          }
-        }
-      },
-      "TimeContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "TimestampType"
-          },
-          "bar": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "TimeArg": 1398796238,
-          "TimeCustom": 1398796238,
-          "TimeFormat": 1398796238,
-          "StructMember": {
-            "foo": 1398796238,
-            "bar": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions",
-    "metadata": {
-      "protocol": "query"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "OtherExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {},
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>UndefinedShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for DatetimeOffsets operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "DatetimeOffsetsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsQueryDateTimeWithNegativeOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<DatetimeOffsetsResponse xmlns=\"https://example.com/\">\n    <DatetimeOffsetsResult>\n        <datetime>2019-12-16T22:48:18-01:00</datetime>\n    </DatetimeOffsetsResult>\n</DatetimeOffsetsResponse>\n"
+                }
+            },
+            {
+                "id": "AwsQueryDateTimeWithPositiveOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<DatetimeOffsetsResponse xmlns=\"https://example.com/\">\n    <DatetimeOffsetsResult>\n        <datetime>2019-12-17T00:48:18+01:00</datetime>\n    </DatetimeOffsetsResult>\n</DatetimeOffsetsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output",
+                "result": {},
+                "response": {
+                    "status_code": 200
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMap operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "FlattenedXmlMapOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FooEnumMap",
+                        "flattened": true
+                    }
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryQueryFlattenedXmlMap",
+                "given": {
+                    "name": "FlattenedXmlMap",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapOutput"
+                    },
+                    "documentation": "<p>Flattened maps</p>"
+                },
+                "description": "Serializes flattened XML maps in responses",
+                "result": {
+                    "myMap": {
+                        "foo": "Foo",
+                        "baz": "Baz"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<FlattenedXmlMapResponse xmlns=\"https://example.com/\">\n    <FlattenedXmlMapResult>\n        <myMap>\n            <key>foo</key>\n            <value>Foo</value>\n        </myMap>\n        <myMap>\n            <key>baz</key>\n            <value>Baz</value>\n        </myMap>\n    </FlattenedXmlMapResult>\n</FlattenedXmlMapResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMapWithXmlName operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "FlattenedXmlMapWithXmlNameOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FlattenedXmlMapWithXmlNameOutputMap",
+                        "flattened": true,
+                        "locationName": "KVP"
+                    }
+                }
+            },
+            "FlattenedXmlMapWithXmlNameOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryQueryFlattenedXmlMapWithXmlName",
+                "given": {
+                    "name": "FlattenedXmlMapWithXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapWithXmlNameOutput"
+                    },
+                    "documentation": "<p>Flattened maps with @xmlName</p>"
+                },
+                "description": "Serializes flattened XML maps in responses that have xmlName on members",
+                "result": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<FlattenedXmlMapWithXmlNameResponse xmlns=\"https://example.com/\">\n    <FlattenedXmlMapWithXmlNameResult>\n        <KVP>\n            <K>a</K>\n            <V>A</V>\n        </KVP>\n        <KVP>\n            <K>b</K>\n            <V>B</V>\n        </KVP>\n    </FlattenedXmlMapWithXmlNameResult>\n</FlattenedXmlMapWithXmlNameResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMapWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "FlattenedXmlMapWithXmlNamespaceOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FlattenedXmlMapWithXmlNamespaceOutputMap",
+                        "flattened": true,
+                        "locationName": "KVP",
+                        "xmlNamespace": "https://the-member.example.com"
+                    }
+                }
+            },
+            "FlattenedXmlMapWithXmlNamespaceOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K",
+                    "xmlNamespace": "https://the-key.example.com"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V",
+                    "xmlNamespace": "https://the-value.example.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryQueryFlattenedXmlMapWithXmlNamespace",
+                "given": {
+                    "name": "FlattenedXmlMapWithXmlNamespace",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapWithXmlNamespaceOutput"
+                    },
+                    "documentation": "<p>Flattened maps with @xmlNamespace and @xmlName</p>"
+                },
+                "description": "Serializes flattened XML maps in responses that have xmlNamespace and xmlName on members",
+                "result": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<FlattenedXmlMapWithXmlNamespaceResponse xmlns=\"https://example.com/\">\n    <FlattenedXmlMapWithXmlNamespaceResult>\n        <KVP xmlns=\"https://the-member.example.com\">\n            <K xmlns=\"https://the-key.example.com\">a</K>\n            <V xmlns=\"https://the-value.example.com\">A</V>\n        </KVP>\n        <KVP xmlns=\"https://the-member.example.com\">\n            <K xmlns=\"https://the-key.example.com\">b</K>\n            <V xmlns=\"https://the-value.example.com\">B</V>\n        </KVP>\n    </FlattenedXmlMapWithXmlNamespaceResult>\n</FlattenedXmlMapWithXmlNamespaceResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "AwsQueryDateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<FractionalSecondsResponse xmlns=\"https://example.com/\">\n    <FractionalSecondsResult>\n        <datetime>2000-01-02T20:34:56.123Z</datetime>\n    </FractionalSecondsResult>\n</FractionalSecondsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "GreetingWithErrorsOutput": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryGreetingWithErrors",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "GreetingWithErrorsOutput"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>"
+                },
+                "description": "Ensures that operations with errors successfully know how to deserialize the successful response",
+                "result": {
+                    "greeting": "Hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<GreetingWithErrorsResponse xmlns=\"https://example.com/\">\n    <GreetingWithErrorsResult>\n        <greeting>Hello</greeting>\n    </GreetingWithErrorsResult>\n</GreetingWithErrorsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryInvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>",
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple XML errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<ErrorResponse>\n   <Error>\n      <Type>Sender</Type>\n      <Code>InvalidGreeting</Code>\n      <Message>Hi</Message>\n   </Error>\n   <RequestId>foo-id</RequestId>\n</ErrorResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "CustomCodeError": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "error": {
+                    "code": "Customized",
+                    "httpStatusCode": 402,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryCustomizedError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>",
+                    "errors": [
+                        {
+                            "shape": "CustomCodeError"
+                        }
+                    ]
+                },
+                "description": "Parses customized XML errors",
+                "errorCode": "Customized",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 402,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<ErrorResponse>\n   <Error>\n      <Type>Sender</Type>\n      <Code>Customized</Code>\n      <Message>Hi</Message>\n   </Error>\n   <RequestId>foo-id</RequestId>\n</ErrorResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol>",
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<ErrorResponse>\n   <Error>\n      <Type>Sender</Type>\n      <Code>ComplexError</Code>\n      <TopLevel>Top level</TopLevel>\n      <Nested>\n          <Foo>bar</Foo>\n      </Nested>\n   </Error>\n   <RequestId>foo-id</RequestId>\n</ErrorResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for IgnoresWrappingXmlName operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "IgnoresWrappingXmlNameOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "IgnoreMe"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryIgnoresWrappingXmlName",
+                "given": {
+                    "name": "IgnoresWrappingXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "IgnoresWrappingXmlNameOutput"
+                    },
+                    "documentation": "<p>The xmlName trait on the output structure is ignored in AWS Query.</p> <p>The wrapping element is always operation name + &quot;Response&quot;, and inside of that wrapper is another wrapper named operation name + &quot;Result&quot;.</p>"
+                },
+                "description": "The xmlName trait on the output structure is ignored in AWS Query",
+                "result": {
+                    "foo": "bar"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<IgnoresWrappingXmlNameResponse xmlns=\"https://example.com/\">\n    <IgnoresWrappingXmlNameResult>\n        <foo>bar</foo>\n    </IgnoresWrappingXmlNameResult>\n</IgnoresWrappingXmlNameResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "QueryNoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output. Note that no assertion is made on the output body itself.",
+                "result": {},
+                "response": {
+                    "status_code": 200
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "NoInputAndOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryNoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request payload or response members.</p> <p>While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output",
+                "result": {},
+                "response": {
+                    "status_code": 200
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveXmlShapes operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "RecursiveXmlShapesOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveXmlShapesOutputNested1"
+                    }
+                }
+            },
+            "RecursiveXmlShapesOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveXmlShapesOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveXmlShapesOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveXmlShapesOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryRecursiveShapes",
+                "given": {
+                    "name": "RecursiveXmlShapes",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RecursiveXmlShapesOutput"
+                    },
+                    "documentation": "<p>Recursive shapes</p>"
+                },
+                "description": "Serializes recursive structures",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<RecursiveXmlShapesResponse xmlns=\"https://example.com/\">\n    <RecursiveXmlShapesResult>\n        <nested>\n            <foo>Foo1</foo>\n            <nested>\n                <bar>Bar1</bar>\n                <recursiveMember>\n                    <foo>Foo2</foo>\n                    <nested>\n                        <bar>Bar2</bar>\n                    </nested>\n                </recursiveMember>\n            </nested>\n        </nested>\n    </RecursiveXmlShapesResult>\n</RecursiveXmlShapesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarXmlProperties operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "SimpleScalarXmlPropertiesOutput": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "emptyStringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "QuerySimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "stringValue": "string",
+                    "emptyStringValue": "",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <SimpleScalarXmlPropertiesResult>\n        <stringValue>string</stringValue>\n        <emptyStringValue/>\n        <trueBooleanValue>true</trueBooleanValue>\n        <falseBooleanValue>false</falseBooleanValue>\n        <byteValue>1</byteValue>\n        <shortValue>2</shortValue>\n        <integerValue>3</integerValue>\n        <longValue>4</longValue>\n        <floatValue>5.5</floatValue>\n        <DoubleDribble>6.5</DoubleDribble>\n    </SimpleScalarXmlPropertiesResult>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "AwsQuerySupportsNaNFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <SimpleScalarXmlPropertiesResult>\n        <floatValue>NaN</floatValue>\n        <DoubleDribble>NaN</DoubleDribble>\n    </SimpleScalarXmlPropertiesResult>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "AwsQuerySupportsInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <SimpleScalarXmlPropertiesResult>\n        <floatValue>Infinity</floatValue>\n        <DoubleDribble>Infinity</DoubleDribble>\n    </SimpleScalarXmlPropertiesResult>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "AwsQuerySupportsNegativeInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarXmlProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarXmlPropertiesOutput"
+                    }
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<SimpleScalarXmlPropertiesResponse xmlns=\"https://example.com/\">\n    <SimpleScalarXmlPropertiesResult>\n        <floatValue>-Infinity</floatValue>\n        <DoubleDribble>-Infinity</DoubleDribble>\n    </SimpleScalarXmlPropertiesResult>\n</SimpleScalarXmlPropertiesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlBlobs operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlBlobsOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlBlobs",
+                "given": {
+                    "name": "XmlBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "result": {
+                    "data": "value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlBlobsResponse xmlns=\"https://example.com/\">\n    <XmlBlobsResult>\n        <data>dmFsdWU=</data>\n    </XmlBlobsResult>\n</XmlBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyBlobs operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlBlobsOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlEmptyBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    }
+                },
+                "description": "Empty blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyBlobsResponse xmlns=\"https://example.com/\">\n    <XmlEmptyBlobsResult>\n        <data></data>\n    </XmlEmptyBlobsResult>\n</XmlEmptyBlobsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlEmptySelfClosedBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlBlobsOutput"
+                    }
+                },
+                "description": "Empty self closed blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyBlobsResponse xmlns=\"https://example.com/\">\n    <XmlEmptyBlobsResult>\n        <data/>\n    </XmlEmptyBlobsResult>\n</XmlEmptyBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyLists operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlListsOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlEmptyLists",
+                "given": {
+                    "name": "XmlEmptyLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlListsOutput"
+                    }
+                },
+                "description": "Deserializes empty XML lists",
+                "result": {
+                    "stringList": [],
+                    "stringSet": []
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyListsResponse xmlns=\"https://example.com/\">\n    <XmlEmptyListsResult>\n        <stringList/>\n        <stringSet></stringSet>\n    </XmlEmptyListsResult>\n</XmlEmptyListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyMaps operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlMapsOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsOutputMap"
+                    }
+                }
+            },
+            "XmlMapsOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlEmptyMaps",
+                "given": {
+                    "name": "XmlEmptyMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlMapsOutput"
+                    }
+                },
+                "description": "Deserializes Empty XML maps",
+                "result": {
+                    "myMap": {}
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyMapsResponse xmlns=\"https://example.com/\">\n    <XmlEmptyMapsResult>\n        <myMap>\n        </myMap>\n    </XmlEmptyMapsResult>\n</XmlEmptyMapsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlEmptySelfClosedMaps",
+                "given": {
+                    "name": "XmlEmptyMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlMapsOutput"
+                    }
+                },
+                "description": "Deserializes Self-Closed XML maps",
+                "result": {
+                    "myMap": {}
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEmptyMapsResponse xmlns=\"https://example.com/\">\n    <XmlEmptyMapsResult>\n        <myMap/>\n    </XmlEmptyMapsResult>\n</XmlEmptyMapsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEnums operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlEnumsOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlEnums",
+                "given": {
+                    "name": "XmlEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlEnumsOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>"
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlEnumsResponse xmlns=\"https://example.com/\">\n    <XmlEnumsResult>\n        <fooEnum1>Foo</fooEnum1>\n        <fooEnum2>0</fooEnum2>\n        <fooEnum3>1</fooEnum3>\n        <fooEnumList>\n            <member>Foo</member>\n            <member>0</member>\n        </fooEnumList>\n        <fooEnumSet>\n            <member>Foo</member>\n            <member>0</member>\n        </fooEnumSet>\n        <fooEnumMap>\n            <entry>\n                <key>hi</key>\n                <value>Foo</value>\n            </entry>\n            <entry>\n                <key>zero</key>\n                <value>0</value>\n            </entry>\n        </fooEnumMap>\n    </XmlEnumsResult>\n</XmlEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlIntEnums operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlIntEnumsOutput": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlIntEnums",
+                "given": {
+                    "name": "XmlIntEnums",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlIntEnumsOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>"
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlIntEnumsResponse xmlns=\"https://example.com/\">\n    <XmlIntEnumsResult>\n        <intEnum1>1</intEnum1>\n        <intEnum2>2</intEnum2>\n        <intEnum3>3</intEnum3>\n        <intEnumList>\n            <member>1</member>\n            <member>2</member>\n        </intEnumList>\n        <intEnumSet>\n            <member>1</member>\n            <member>2</member>\n        </intEnumSet>\n        <intEnumMap>\n            <entry>\n                <key>a</key>\n                <value>1</value>\n            </entry>\n            <entry>\n                <key>b</key>\n                <value>2</value>\n            </entry>\n        </intEnumMap>\n    </XmlIntEnumsResult>\n</XmlIntEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlLists operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlListsOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlLists",
+                "given": {
+                    "name": "XmlLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlListsOutput"
+                    },
+                    "documentation": "<p>This test case serializes XML lists for the following cases for both input and output:</p> <ol> <li>Normal XML lists.</li> <li>Normal XML sets.</li> <li>XML lists of lists.</li> <li>XML lists with @xmlName on its members</li> <li>Flattened XML lists.</li> <li>Flattened XML lists with @xmlName.</li> <li>Lists of structures.</li> </ol>"
+                },
+                "description": "Tests for XML list serialization",
+                "result": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "renamedListMembers": [
+                        "foo",
+                        "bar"
+                    ],
+                    "flattenedList": [
+                        "hi",
+                        "bye"
+                    ],
+                    "flattenedList2": [
+                        "yep",
+                        "nope"
+                    ],
+                    "flattenedListWithMemberNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "flattenedListWithNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlListsResponse xmlns=\"https://example.com/\">\n    <XmlListsResult>\n        <stringList>\n            <member>foo</member>\n            <member>bar</member>\n        </stringList>\n        <stringSet>\n            <member>foo</member>\n            <member>bar</member>\n        </stringSet>\n        <integerList>\n            <member>1</member>\n            <member>2</member>\n        </integerList>\n        <booleanList>\n            <member>true</member>\n            <member>false</member>\n        </booleanList>\n        <timestampList>\n            <member>2014-04-29T18:30:38Z</member>\n            <member>2014-04-29T18:30:38Z</member>\n        </timestampList>\n        <enumList>\n            <member>Foo</member>\n            <member>0</member>\n        </enumList>\n        <intEnumList>\n            <member>1</member>\n            <member>2</member>\n        </intEnumList>\n        <nestedStringList>\n            <member>\n                <member>foo</member>\n                <member>bar</member>\n            </member>\n            <member>\n                <member>baz</member>\n                <member>qux</member>\n            </member>\n        </nestedStringList>\n        <renamed>\n            <item>foo</item>\n            <item>bar</item>\n        </renamed>\n        <flattenedList>hi</flattenedList>\n        <flattenedList>bye</flattenedList>\n        <customName>yep</customName>\n        <customName>nope</customName>\n        <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">a</flattenedListWithMemberNamespace>\n        <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">b</flattenedListWithMemberNamespace>\n        <flattenedListWithNamespace>a</flattenedListWithNamespace>\n        <flattenedListWithNamespace>b</flattenedListWithNamespace>\n        <myStructureList>\n            <item>\n                <value>1</value>\n                <other>2</other>\n            </item>\n            <item>\n                <value>3</value>\n                <other>4</other>\n            </item>\n        </myStructureList>\n    </XmlListsResult>\n</XmlListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMaps operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlMapsOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsOutputMap"
+                    }
+                }
+            },
+            "XmlMapsOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlMaps",
+                "given": {
+                    "name": "XmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlMapsOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Tests for XML map serialization",
+                "result": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlMapsResponse xmlns=\"https://example.com/\">\n    <XmlMapsResult>\n        <myMap>\n            <entry>\n                <key>foo</key>\n                <value>\n                    <hi>there</hi>\n                </value>\n            </entry>\n            <entry>\n                <key>baz</key>\n                <value>\n                    <hi>bye</hi>\n                </value>\n            </entry>\n        </myMap>\n    </XmlMapsResult>\n</XmlMapsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMapsXmlName operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlMapsXmlNameOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsXmlNameOutputMap"
+                    }
+                }
+            },
+            "XmlMapsXmlNameOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "Attribute"
+                },
+                "value": {
+                    "shape": "GreetingStruct",
+                    "locationName": "Setting"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryQueryXmlMapsXmlName",
+                "given": {
+                    "name": "XmlMapsXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlMapsXmlNameOutput"
+                    }
+                },
+                "description": "Serializes XML lists",
+                "result": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlMapsXmlNameResponse xmlns=\"https://example.com/\">\n    <XmlMapsXmlNameResult>\n        <myMap>\n            <entry>\n                <Attribute>foo</Attribute>\n                <Setting>\n                    <hi>there</hi>\n                </Setting>\n            </entry>\n            <entry>\n                <Attribute>baz</Attribute>\n                <Setting>\n                    <hi>bye</hi>\n                </Setting>\n            </entry>\n        </myMap>\n    </XmlMapsXmlNameResult>\n</XmlMapsXmlNameResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlNamespaces operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlNamespacesOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "XmlNamespaceNested"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "XmlNamespaceNested": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "xmlNamespace": {
+                            "prefix": "baz",
+                            "uri": "http://baz.com"
+                        }
+                    },
+                    "values": {
+                        "shape": "XmlNamespacedList",
+                        "xmlNamespace": "http://qux.com"
+                    }
+                },
+                "xmlNamespace": "http://boo.com"
+            },
+            "String": {
+                "type": "string"
+            },
+            "XmlNamespacedList": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "http://bux.com"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlNamespaces",
+                "given": {
+                    "name": "XmlNamespaces",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlNamespacesOutput"
+                    }
+                },
+                "description": "Serializes XML namespaces",
+                "result": {
+                    "nested": {
+                        "foo": "Foo",
+                        "values": [
+                            "Bar",
+                            "Baz"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlNamespacesResponse xmlns=\"https://example.com/\">\n    <XmlNamespacesResult>\n        <nested>\n            <foo xmlns:baz=\"http://baz.com\">Foo</foo>\n            <values xmlns=\"http://qux.com\">\n                <member xmlns=\"http://bux.com\">Bar</member>\n                <member xmlns=\"http://bux.com\">Baz</member>\n            </values>\n        </nested>\n    </XmlNamespacesResult>\n</XmlNamespacesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlTimestamps operation",
+        "metadata": {
+            "protocol": "query",
+            "protocols": [
+                "query"
+            ],
+            "apiVersion": "2020-01-08"
+        },
+        "shapes": {
+            "XmlTimestampsOutput": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryXmlTimestamps",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "result": {
+                    "normal": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <normal>2014-04-29T18:30:38Z</normal>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "result": {
+                    "dateTime": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <dateTime>2014-04-29T18:30:38Z</dateTime>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "result": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <dateTimeOnTarget>2014-04-29T18:30:38Z</dateTimeOnTarget>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "result": {
+                    "epochSeconds": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <epochSeconds>1398796238</epochSeconds>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "result": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <epochSecondsOnTarget>1398796238</epochSecondsOnTarget>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "result": {
+                    "httpDate": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <httpDate>Tue, 29 Apr 2014 18:30:38 GMT</httpDate>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "QueryXmlTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "result": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/xml"
+                    },
+                    "body": "<XmlTimestampsResponse xmlns=\"https://example.com/\">\n    <XmlTimestampsResult>\n        <httpDateOnTarget>Tue, 29 Apr 2014 18:30:38 GMT</httpDateOnTarget>\n    </XmlTimestampsResult>\n</XmlTimestampsResponse>\n"
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/rest-json.json 2.31.35-1/tests/unit/botocore/protocols/output/rest-json.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/rest-json.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/rest-json.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,1261 +1,4324 @@
+
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ImaHeader": {
-            "shape": "HeaderShape"
-          },
-          "ImaHeaderLocation": {
-            "shape": "HeaderShape",
-            "locationName": "X-Foo"
-          },
-          "Status": {
-            "shape": "StatusShape",
-            "location": "statusCode"
-          },
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType"
-          },
-          "FalseBool": {
-            "shape": "BooleanType"
-          },
-          "TrueBool": {
-            "shape": "BooleanType"
-          },
-          "Float": {
-            "shape": "FloatType"
-          },
-          "Double": {
-            "shape": "DoubleType"
-          },
-          "Long": {
-            "shape": "LongType"
-          },
-          "Char": {
-            "shape": "CharType"
-          }
-        }
-      },
-      "HeaderShape": {
-        "type": "string",
-        "location": "header"
-      },
-      "StatusShape": {
-        "type": "integer"
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "DoubleType": {
-        "type": "double"
-      },
-      "LongType": {
-        "type": "long"
-      },
-      "CharType": {
-        "type": "character"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Status": 200,
-          "Str": "myname",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "{\"Str\": \"myname\", \"Num\": 123, \"FalseBool\": false, \"TrueBool\": true, \"Float\": 1.2, \"Double\": 1.3, \"Long\": 200, \"Char\": \"a\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob members",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "BlobMember": {
-            "shape": "BlobType"
-          },
-          "StructMember": {
-            "shape": "BlobContainer"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      },
-      "BlobContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "BlobType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "BlobMember": "hi!",
-          "StructMember": {
-            "foo": "there!"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"BlobMember\": \"aGkh\", \"StructMember\": {\"foo\": \"dGhlcmUh\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp members",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeArgInHeader": {
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timearg"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeCustomInHeader": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timecustom"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          },
-          "TimeFormatInHeader": {
-            "shape": "TimestampFormatType",
-            "location": "header",
-            "locationName": "x-amz-timeformat"
-          },
-          "StructMember": {
-            "shape": "TimeContainer"
-          }
-        }
-      },
-      "TimeContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "TimestampType"
-          },
-          "bar": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "iso8601",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "TimeArg": 1398796238,
-          "TimeArgInHeader": 1398796238,
-          "TimeCustom": 1398796238,
-          "TimeCustomInHeader": 1398796238,
-          "TimeFormat": 1398796238,
-          "TimeFormatInHeader": 1398796238,
-          "StructMember": {
-            "foo": 1398796238,
-            "bar": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "x-amz-timearg": "Tue, 29 Apr 2014 18:30:38 GMT",
-            "x-amz-timecustom": "1398796238",
-            "x-amz-timeformat": "2014-04-29T18:30:38+00:00"
-          },
-          "body": "{\"TimeArg\": 1398796238, \"TimeCustom\": \"Tue, 29 Apr 2014 18:30:38 GMT\", \"TimeFormat\": \"2014-04-29T18:30:38+00:00\", \"StructMember\": {\"foo\": 1398796238, \"bar\": \"2014-04-29T18:30:38+00:00\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["a", "b"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"ListMember\": [\"a\", \"b\"]}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists with structure member",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListType"
-          }
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "SingleStruct"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "SingleStruct": {
-        "type": "structure",
-        "members": {
-            "Foo": {
-              "shape": "StringType"
-            }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": [{"Foo": "a"}, {"Foo": "b"}]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"ListMember\": [{\"Foo\": \"a\"}, {\"Foo\": \"b\"}]}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Maps",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "MapMember": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "ListType"
-        }
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "IntegerType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "MapMember": {
-            "a": [1, 2],
-            "b": [3, 4]
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"MapMember\": {\"a\": [1, 2], \"b\": [3, 4]}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Complex Map Values",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "MapMember": {
-            "shape": "MapType"
-          }
-        }
-      },
-      "MapType": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "TimeType"
-        }
-      },
-      "TimeType": {
-        "type": "timestamp"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "MapMember": {
-            "a": 1398796238,
-            "b": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"MapMember\": {\"a\": 1398796238, \"b\": 1398796238}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Ignores extra data",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "StrType": {
-            "shape": "StrType"
-          }
-        }
-      },
-      "StrType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {},
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"foo\": \"bar\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Ignores undefined output",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {},
-    "cases": [
-      {
-        "given": {
-          "name": "OperationName"
-        },
-        "result": {},
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "OK"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Supports header maps",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "AllHeaders": {
-            "shape": "HeaderMap",
-            "location": "headers"
-          },
-          "PrefixedHeaders": {
-            "shape": "HeaderMap",
-            "location": "headers",
-            "locationName": "X-"
-          }
-        }
-      },
-      "HeaderMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "AllHeaders": {
-            "Content-Length": "10",
-            "x-Foo": "bar",
-            "X-bam": "boo"
-          },
-          "PrefixedHeaders": {
-            "Foo": "bar",
-            "bam": "boo"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "Content-Length": "10",
-            "x-Foo": "bar",
-            "X-bam": "boo"
-          },
-          "body": "{}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "JSON payload",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "payload": "Data",
-        "members": {
-          "Header": {
-            "shape": "StringType",
-            "location": "header",
-            "locationName": "X-Foo"
-          },
-          "Data": {
-            "shape": "BodyStructure"
-          }
-        }
-      },
-      "BodyStructure": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Header": "baz",
-          "Data": {
-            "Foo": "abc"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "X-Foo": "baz"
-          },
-          "body": "{\"Foo\": \"abc\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Streaming payload",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "payload": "Stream",
-        "members": {
-          "Stream": {
-            "shape": "Stream"
-          }
-        }
-      },
-      "Stream": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Stream": "abc"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "abc"
-        }
-      }
-    ]
-  },
-  {
-    "description": "JSON value trait",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Attr": {
-            "shape": "StringType",
-              "jsonvalue": true,
-              "location": "header",
-              "locationName": "X-Amz-Foo"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Attr": {"Foo":"Bar"}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "ImaHeader": {
-            "shape": "HeaderShape"
-          },
-          "ImaHeaderLocation": {
-            "shape": "HeaderShape",
-            "locationName": "X-Foo"
-          },
-          "Status": {
-            "shape": "StatusShape",
-            "location": "statusCode"
-          },
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "OtherExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-            "BodyMember": {
-                "shape": "StringType"
-            }
-        }
-      },
-      "HeaderShape": {
-        "type": "string",
-        "location": "header"
-      },
-      "StatusShape": {
-        "type": "integer"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Status": 400,
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Errortype": "ExceptionShape"
-          },
-          "body": "{\"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Status": 400,
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "{ \"code\": \"ExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Status": 400,
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Errortype": "ExceptionShape"
-          },
-          "body": "{ \"code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-            "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Errortype": "OtherExceptionShape"
-          },
-          "body": "{ \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-            "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "{ \"code\": \"OtherExceptionShape\", \"BodyMember\": \"mybody\", \"Message\": \"mymessage\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Errortype": "UndefinedShape"
-          },
-          "body": "{ \"BodyMember\": \"mybody\"}"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "{ \"code\": \"UndefinedShape\", \"BodyMember\": \"mybody\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes document with standalone primitive as part of the JSON response payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "documentValue": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": "foo"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": \"foo\"}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": 123
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": 123}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": 1.2
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": 1.2}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": true
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": true}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": ""
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": \"\"}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes inline documents as part of the JSON response payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "documentValue": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": {"foo": "bar"}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": {\"foo\": \"bar\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Serializes aggregate documents as part of the JSON response payload with no escaping.",
-    "metadata": {
-      "protocol": "rest-json",
-      "apiVersion": "2014-01-01"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "documentValue": {
-                "shape": "DocumentType"
-            }
-        }
-      },
-      "DocumentType": {
-          "type": "structure",
-          "document": true
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": {
-              "str": "test",
-              "num": 123,
-              "float": 1.2,
-              "bool": true,
-              "null": "",
-              "document": {"foo": false},
-              "list": ["myname", 321, 1.3, true, "", {"nested": true}, [200, ""]]
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": {\"str\": \"test\", \"num\": 123, \"float\": 1.2, \"bool\": true, \"null\": \"\", \"document\": {\"foo\": false}, \"list\": [\"myname\", 321, 1.3, true, \"\", {\"nested\": true}, [200, \"\"]]}}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "documentValue": [
-              "test",
-              123,
-              1.2,
-              true,
-              "",
-              {"str": "myname", "num": 321, "float": 1.3, "bool": true, "null": "", "document": {"nested": true}, "list": [200, ""]},
-              ["foo", false]
-          ]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"documentValue\": [\"test\", 123, 1.2, true, \"\", {\"str\": \"myname\", \"num\": 321, \"float\": 1.3, \"bool\": true, \"null\": \"\", \"document\": {\"nested\": true}, \"list\": [200, \"\"]}, [\"foo\", false]]}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Tagged Unions",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "UnionMember": {
-            "shape": "UnionType"
-          }
-        }
-      },
-      "UnionType": {
-        "type": "structure",
-        "members": {
-          "S":{"shape":"StringType"},
-          "L": {"shape": "ListType"}
-        },
-        "union": true
-      },
-      "ListType": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "UnionMember": {"S":  "mystring"}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"UnionMember\": {\"S\": \"mystring\"}}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "UnionMember": {"L":  ["a", "b"]}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"UnionMember\": {\"L\": [\"a\", \"b\"]}}"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "UnionMember": {"SDK_UNKNOWN_MEMBER":  {"name": "SomeUnknownMember"}}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "{\"UnionMember\": {\"SomeUnknownMember\": \"foo\"}}"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List in header",
-    "metadata": {
-      "protocol": "rest-json"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape",
-            "location": "header",
-            "locationName": "x-amz-list-member"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "EnumType"
-        }
-      },
-      "EnumType": {
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["one", "two", "three"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-              "x-amz-list-member": " one,two , three "
-          },
-          "body": ""
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for DatetimeOffsets operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DatetimeOffsetsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonDateTimeWithNegativeOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/DatetimeOffsets",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "body": "      {\n          \"datetime\": \"2019-12-16T22:48:18-01:00\"\n      }\n"
+                }
+            },
+            {
+                "id": "RestJsonDateTimeWithPositiveOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/DatetimeOffsets",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "body": "      {\n          \"datetime\": \"2019-12-17T00:48:18+01:00\"\n      }\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentType operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "documentValue": {
+                        "shape": "Document"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentOutput",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes documents as part of the JSON response payload with no escaping.",
+                "result": {
+                    "stringValue": "string",
+                    "documentValue": {
+                        "foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": {\n        \"foo\": \"bar\"\n    }\n}"
+                }
+            },
+            {
+                "id": "DocumentOutputString",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Document types can be JSON scalars too.",
+                "result": {
+                    "stringValue": "string",
+                    "documentValue": "hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": \"hello\"\n}"
+                }
+            },
+            {
+                "id": "DocumentOutputNumber",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Document types can be JSON scalars too.",
+                "result": {
+                    "stringValue": "string",
+                    "documentValue": 10
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": 10\n}"
+                }
+            },
+            {
+                "id": "DocumentOutputBoolean",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Document types can be JSON scalars too.",
+                "result": {
+                    "stringValue": "string",
+                    "documentValue": false
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": false\n}"
+                }
+            },
+            {
+                "id": "DocumentOutputArray",
+                "given": {
+                    "name": "DocumentType",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentType",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as part of the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Document types can be JSON arrays.",
+                "result": {
+                    "stringValue": "string",
+                    "documentValue": [
+                        true,
+                        false
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"documentValue\": [\n        true,\n        false\n    ]\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentTypeAsMapValue operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeAsMapValueInputOutput": {
+                "type": "structure",
+                "members": {
+                    "docValuedMap": {
+                        "shape": "DocumentValuedMap"
+                    }
+                }
+            },
+            "DocumentValuedMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Document"
+                }
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentTypeAsMapValueOutput",
+                "given": {
+                    "name": "DocumentTypeAsMapValue",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsMapValue",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeAsMapValueInputOutput"
+                    },
+                    "documentation": "<p>This example serializes documents as the value of maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a map that uses documents as the value.",
+                "result": {
+                    "docValuedMap": {
+                        "foo": {
+                            "f": 1,
+                            "o": 2
+                        },
+                        "bar": [
+                            "b",
+                            "a",
+                            "r"
+                        ],
+                        "baz": "BAZ"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"docValuedMap\": {\n        \"foo\": { \"f\": 1, \"o\": 2 },\n        \"bar\": [ \"b\", \"a\", \"r\" ],\n        \"baz\": \"BAZ\"\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DocumentTypeAsPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DocumentTypeAsPayloadInputOutput": {
+                "type": "structure",
+                "members": {
+                    "documentValue": {
+                        "shape": "Document"
+                    }
+                },
+                "payload": "documentValue"
+            },
+            "Document": {
+                "type": "structure",
+                "members": {},
+                "document": true
+            }
+        },
+        "cases": [
+            {
+                "id": "DocumentTypeAsPayloadOutput",
+                "given": {
+                    "name": "DocumentTypeAsPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeAsPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as the entire HTTP payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a document as the target of the httpPayload trait.",
+                "result": {
+                    "documentValue": {
+                        "foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"foo\": \"bar\"\n}"
+                }
+            },
+            {
+                "id": "DocumentTypeAsPayloadOutputString",
+                "given": {
+                    "name": "DocumentTypeAsPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/DocumentTypeAsPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DocumentTypeAsPayloadInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a document as the entire HTTP payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a document as a payload string.",
+                "result": {
+                    "documentValue": "hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "\"hello\""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonEmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EmptyInputAndEmptyOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "As of January 2021, server implementations are expected to\nrespond with a JSON object regardless of if the output\nparameters are empty.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "RestJsonEmptyInputAndEmptyOutputJsonObjectOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EmptyInputAndEmptyOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "This test ensures that clients can gracefully handle\nsituations where a service omits a JSON payload entirely.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonDateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FractionalSeconds",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "body": "      {\n          \"datetime\": \"2000-01-02T20:34:56.123Z\"\n      }\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "GreetingWithErrorsOutput": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Greeting"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonGreetingWithErrors",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "GreetingWithErrorsOutput"
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true
+                },
+                "description": "Ensures that operations with errors successfully know how\nto deserialize a successful response. As of January 2021,\nserver implementations are expected to respond with a\nJSON object regardless of if the output parameters are\nempty.",
+                "result": {
+                    "greeting": "Hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Greeting": "Hello"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "RestJsonGreetingWithErrorsNoPayload",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "GreetingWithErrorsOutput"
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true
+                },
+                "description": "This test is similar to RestJsonGreetingWithErrors, but it\nensures that clients can gracefully deal with a server\nomitting a response payload.",
+                "result": {
+                    "greeting": "Hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Greeting": "Hello"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FooError": {
+                "type": "structure",
+                "members": {},
+                "documentation": "<p>This error has test cases that test some of the dark corners of Amazon service framework history. It should only be implemented by clients.</p>",
+                "error": {
+                    "httpStatusCode": 500
+                },
+                "exception": true,
+                "fault": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonFooErrorUsingXAmznErrorType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Serializes the X-Amzn-ErrorType header. For an example service, see Amazon EKS.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonFooErrorUsingXAmznErrorTypeWithUri",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some X-Amzn-Errortype headers contain URLs. Clients need to split the URL on ':' and take only the first half of the string. For example, 'ValidationException:http://internal.amazon.com/coral/com.amazon.coral.validate/'\nis to be interpreted as 'ValidationException'.\n\nFor an example service see Amazon Polly.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonFooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "X-Amzn-Errortype might contain a URL and a namespace. Client should extract only the shape name. This is a pathalogical case that might not actually happen in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "X-Amzn-Errortype": "aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonFooErrorUsingCode",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "This example uses the 'code' property in the output rather than X-Amzn-Errortype. Some services do this though it's preferable to send the X-Amzn-Errortype. Client implementations must first check for the X-Amzn-Errortype and then check for a top-level 'code' property.\n\nFor example service see Amazon S3 Glacier.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"code\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonFooErrorUsingCodeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.restjson#FooError\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonFooErrorUsingCodeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using code, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"code\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonFooErrorWithDunderType",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"__type\": \"FooError\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonFooErrorWithDunderTypeAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. Clients should just take the last part of the string after '#'.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.restjson#FooError\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonFooErrorWithDunderTypeUriAndNamespace",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "FooError"
+                        }
+                    ]
+                },
+                "description": "Some services serialize errors using __type, and it might contain a namespace. It also might contain a URI. Clients should just take the last part of the string after '#' and before \":\". This is a pathalogical case that might not occur in any deployed AWS service.",
+                "errorCode": "FooError",
+                "error": {},
+                "response": {
+                    "status_code": 500,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"__type\": \"aws.protocoltests.restjson#FooError:http://internal.amazon.com/coral/com.amazon.coral.validate/\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "Header": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Header"
+                    },
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "error": {
+                    "httpStatusCode": 403,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String",
+                        "locationName": "Fooooo"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonComplexErrorWithNoMessage",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "description": "Serializes a complex error with no message member",
+                "errorCode": "ComplexError",
+                "error": {
+                    "Header": "Header",
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 403,
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Amzn-Errortype": "ComplexError",
+                        "X-Header": "Header"
+                    },
+                    "body": "{\n    \"TopLevel\": \"Top level\",\n    \"Nested\": {\n        \"Fooooo\": \"bar\"\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonEmptyComplexErrorWithNoMessage",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {},
+                "response": {
+                    "status_code": 403,
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Amzn-Errortype": "ComplexError"
+                    },
+                    "body": "{}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "error": {
+                    "httpStatusCode": 400,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonInvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has four possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> <li>A FooError.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple JSON errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Amzn-Errortype": "InvalidGreeting"
+                    },
+                    "body": "{\n    \"Message\": \"Hi\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpEnumPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EnumPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "StringEnum"
+                    }
+                },
+                "payload": "payload"
+            },
+            "StringEnum": {
+                "type": "string",
+                "enum": [
+                    "enumvalue"
+                ]
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonEnumPayloadResponse",
+                "given": {
+                    "name": "HttpEnumPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EnumPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "EnumPayloadInput"
+                    }
+                },
+                "result": {
+                    "payload": "enumvalue"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    },
+                    "body": "enumvalue"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadTraits operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadTraitsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "blob": {
+                        "shape": "Blob"
+                    }
+                },
+                "payload": "blob"
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadTraitsWithBlob",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no JSON document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes a blob in the HTTP payload",
+                "result": {
+                    "foo": "Foo",
+                    "blob": "blobby blob blob"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Foo": "Foo"
+                    },
+                    "body": "blobby blob blob"
+                }
+            },
+            {
+                "id": "RestJsonHttpPayloadTraitsWithNoBlobBody",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no JSON document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes an empty blob in the HTTP payload",
+                "result": {
+                    "foo": "Foo"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Foo": "Foo"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithStructure operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "NestedPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "NestedPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    },
+                    "name": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadWithStructure",
+                "given": {
+                    "name": "HttpPayloadWithStructure",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithStructure",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithStructureInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a structure in the payload.</p> <p>Note that serializing a structure changes the wrapper element name to match the targeted structure.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload",
+                "result": {
+                    "nested": {
+                        "greeting": "hello",
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"greeting\": \"hello\",\n    \"name\": \"Phreddy\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithUnion operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithUnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "UnionPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "UnionPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPayloadWithUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a union in the payload.",
+                "result": {
+                    "nested": {
+                        "greeting": "hello"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"greeting\": \"hello\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonHttpPayloadWithUnsetUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "No payload is sent if the union has no value.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Length": "0"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPrefixHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPrefixHeadersOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-foo"
+                    },
+                    "fooMap": {
+                        "shape": "StringMap",
+                        "location": "headers",
+                        "locationName": "x-foo-"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpPrefixHeadersArePresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPrefixHeadersOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Adds headers by prefix",
+                "result": {
+                    "foo": "Foo",
+                    "fooMap": {
+                        "abc": "Abc value",
+                        "def": "Def value"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "x-foo": "Foo",
+                        "x-foo-abc": "Abc value",
+                        "x-foo-def": "Def value"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPrefixHeadersInResponse operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPrefixHeadersInResponseOutput": {
+                "type": "structure",
+                "members": {
+                    "prefixHeaders": {
+                        "shape": "StringMap",
+                        "location": "headers",
+                        "locationName": ""
+                    }
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPrefixHeadersResponse",
+                "given": {
+                    "name": "HttpPrefixHeadersInResponse",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeadersResponse",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPrefixHeadersInResponseOutput"
+                    },
+                    "documentation": "<p>Clients that perform this test extract all headers from the response.</p>"
+                },
+                "description": "(de)serializes all response headers",
+                "result": {
+                    "prefixHeaders": {
+                        "x-foo": "Foo",
+                        "hello": "Hello"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "hello": "Hello",
+                        "x-foo": "Foo"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpResponseCode operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpResponseCodeOutput": {
+                "type": "structure",
+                "members": {
+                    "Status": {
+                        "shape": "Integer",
+                        "location": "statusCode"
+                    }
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonHttpResponseCode",
+                "given": {
+                    "name": "HttpResponseCode",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpResponseCode",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpResponseCodeOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Binds the http response code to an output structure. Note that\neven though all members are bound outside of the payload, an\nempty JSON object is serialized in the response. However,\nclients should be able to handle an empty JSON object or an\nempty payload without failing to deserialize a response.",
+                "result": {
+                    "Status": 201
+                },
+                "response": {
+                    "status_code": 201,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "RestJsonHttpResponseCodeWithNoPayload",
+                "given": {
+                    "name": "HttpResponseCode",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpResponseCode",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpResponseCodeOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "This test ensures that clients gracefully handle cases where\nthe service responds with no payload rather than an empty JSON\nobject.",
+                "result": {
+                    "Status": 201
+                },
+                "response": {
+                    "status_code": 201,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpStringPayload operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "StringPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "String"
+                    }
+                },
+                "payload": "payload"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonStringPayloadResponse",
+                "given": {
+                    "name": "HttpStringPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "StringPayloadInput"
+                    }
+                },
+                "result": {
+                    "payload": "rawstring"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    },
+                    "body": "rawstring"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for IgnoreQueryParamsInResponse operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "IgnoreQueryParamsInResponseOutput": {
+                "type": "structure",
+                "members": {
+                    "baz": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "baz"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonIgnoreQueryParamsInResponse",
+                "given": {
+                    "name": "IgnoreQueryParamsInResponse",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/IgnoreQueryParamsInResponse",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "IgnoreQueryParamsInResponseOutput"
+                    },
+                    "documentation": "<p>This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.</p>"
+                },
+                "description": "Query parameters must be ignored when serializing the output\nof an operation. As of January 2021, server implementations\nare expected to respond with a JSON object regardless of\nif the output parameters are empty.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "RestJsonIgnoreQueryParamsInResponseNoPayload",
+                "given": {
+                    "name": "IgnoreQueryParamsInResponse",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/IgnoreQueryParamsInResponse",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "IgnoreQueryParamsInResponseOutput"
+                    },
+                    "documentation": "<p>This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.</p>"
+                },
+                "description": "This test is similar to RestJsonIgnoreQueryParamsInResponse,\nbut it ensures that clients gracefully handle responses from\nthe server that do not serialize an empty JSON object.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for InputAndOutputWithHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InputAndOutputWithHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "headerString": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-String"
+                    },
+                    "headerByte": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Byte"
+                    },
+                    "headerShort": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Short"
+                    },
+                    "headerInteger": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Integer"
+                    },
+                    "headerLong": {
+                        "shape": "Long",
+                        "location": "header",
+                        "locationName": "X-Long"
+                    },
+                    "headerFloat": {
+                        "shape": "Float",
+                        "location": "header",
+                        "locationName": "X-Float"
+                    },
+                    "headerDouble": {
+                        "shape": "Double",
+                        "location": "header",
+                        "locationName": "X-Double"
+                    },
+                    "headerTrueBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean1"
+                    },
+                    "headerFalseBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean2"
+                    },
+                    "headerStringList": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-StringList"
+                    },
+                    "headerStringSet": {
+                        "shape": "StringSet",
+                        "location": "header",
+                        "locationName": "X-StringSet"
+                    },
+                    "headerIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "header",
+                        "locationName": "X-IntegerList"
+                    },
+                    "headerBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "header",
+                        "locationName": "X-BooleanList"
+                    },
+                    "headerTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "header",
+                        "locationName": "X-TimestampList"
+                    },
+                    "headerEnum": {
+                        "shape": "FooEnum",
+                        "location": "header",
+                        "locationName": "X-Enum"
+                    },
+                    "headerEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "header",
+                        "locationName": "X-EnumList"
+                    },
+                    "headerIntegerEnum": {
+                        "shape": "IntegerEnum",
+                        "location": "header",
+                        "locationName": "X-IntegerEnum"
+                    },
+                    "headerIntegerEnumList": {
+                        "shape": "IntegerEnumList",
+                        "location": "header",
+                        "locationName": "X-IntegerEnumList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonInputAndOutputWithStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with string header bindings",
+                "result": {
+                    "headerString": "Hello",
+                    "headerStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "headerStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-String": "Hello",
+                        "X-StringList": "a, b, c",
+                        "X-StringSet": "a, b, c"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithQuotedStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with string list header bindings that require quoting",
+                "result": {
+                    "headerStringList": [
+                        "b,c",
+                        "\"def\"",
+                        "a"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-StringList": "\"b,c\", \"\\\"def\\\"\", a"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithNumericHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with numeric header bindings",
+                "result": {
+                    "headerByte": 1,
+                    "headerShort": 123,
+                    "headerInteger": 123,
+                    "headerLong": 123,
+                    "headerFloat": 1.1,
+                    "headerDouble": 1.1,
+                    "headerIntegerList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Byte": "1",
+                        "X-Double": "1.1",
+                        "X-Float": "1.1",
+                        "X-Integer": "123",
+                        "X-IntegerList": "1, 2, 3",
+                        "X-Long": "123",
+                        "X-Short": "123"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithBooleanHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with boolean header bindings",
+                "result": {
+                    "headerTrueBool": true,
+                    "headerFalseBool": false,
+                    "headerBooleanList": [
+                        true,
+                        false,
+                        true
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Boolean1": "true",
+                        "X-Boolean2": "false",
+                        "X-BooleanList": "true, false, true"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithTimestampHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with timestamp header bindings",
+                "result": {
+                    "headerTimestampList": [
+                        1576540098,
+                        1576540098
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with enum header bindings",
+                "result": {
+                    "headerEnum": "Foo",
+                    "headerEnumList": [
+                        "Foo",
+                        "Bar",
+                        "Baz"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Enum": "Foo",
+                        "X-EnumList": "Foo, Bar, Baz"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonInputAndOutputWithIntEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with intEnum header bindings",
+                "result": {
+                    "headerIntegerEnum": 1,
+                    "headerIntegerEnumList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-IntegerEnum": "1",
+                        "X-IntegerEnumList": "1, 2, 3"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNaNFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling NaN float header values.",
+                "result": {
+                    "headerFloat": "NaN",
+                    "headerDouble": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "NaN",
+                        "X-Float": "NaN"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling Infinity float header values.",
+                "result": {
+                    "headerFloat": "Infinity",
+                    "headerDouble": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "Infinity",
+                        "X-Float": "Infinity"
+                    }
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling -Infinity float header values.",
+                "result": {
+                    "headerFloat": "-Infinity",
+                    "headerDouble": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "-Infinity",
+                        "X-Float": "-Infinity"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonBlobs operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonBlobsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonBlobs",
+                "given": {
+                    "name": "JsonBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonBlobs",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonBlobsInputOutput"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "result": {
+                    "data": "value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"data\": \"dmFsdWU=\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonEnums operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonEnums",
+                "given": {
+                    "name": "JsonEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonEnums",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"fooEnum1\": \"Foo\",\n    \"fooEnum2\": \"0\",\n    \"fooEnum3\": \"1\",\n    \"fooEnumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumSet\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"fooEnumMap\": {\n        \"hi\": \"Foo\",\n        \"zero\": \"0\"\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonIntEnums operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonIntEnumsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "integerEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "integerEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "integerEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "integerEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonIntEnums",
+                "given": {
+                    "name": "JsonIntEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonIntEnums",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonIntEnumsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes intEnums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes intEnums as integers",
+                "result": {
+                    "integerEnum1": 1,
+                    "integerEnum2": 2,
+                    "integerEnum3": 3,
+                    "integerEnumList": [
+                        1,
+                        2,
+                        3
+                    ],
+                    "integerEnumSet": [
+                        1,
+                        2
+                    ],
+                    "integerEnumMap": {
+                        "abc": 1,
+                        "def": 2
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"integerEnum1\": 1,\n    \"integerEnum2\": 2,\n    \"integerEnum3\": 3,\n    \"integerEnumList\": [\n        1,\n        2,\n        3\n    ],\n    \"integerEnumSet\": [\n        1,\n        2\n    ],\n    \"integerEnumMap\": {\n        \"abc\": 1,\n        \"def\": 2\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonLists operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonListsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonLists",
+                "given": {
+                    "name": "JsonLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonLists",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonListsInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal JSON lists.</li> <li>Normal JSON sets.</li> <li>JSON lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes JSON lists",
+                "result": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringList\": [\n        \"foo\",\n        \"bar\"\n    ],\n    \"stringSet\": [\n        \"foo\",\n        \"bar\"\n    ],\n    \"integerList\": [\n        1,\n        2\n    ],\n    \"booleanList\": [\n        true,\n        false\n    ],\n    \"timestampList\": [\n        1398796238,\n        1398796238\n    ],\n    \"enumList\": [\n        \"Foo\",\n        \"0\"\n    ],\n    \"intEnumList\": [\n        1,\n        2\n    ],\n    \"nestedStringList\": [\n        [\n            \"foo\",\n            \"bar\"\n        ],\n        [\n            \"baz\",\n            \"qux\"\n        ]\n    ],\n    \"myStructureList\": [\n        {\n            \"value\": \"1\",\n            \"other\": \"2\"\n        },\n        {\n            \"value\": \"3\",\n            \"other\": \"4\"\n        }\n    ]\n}"
+                }
+            },
+            {
+                "id": "RestJsonListsEmpty",
+                "given": {
+                    "name": "JsonLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonLists",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonListsInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal JSON lists.</li> <li>Normal JSON sets.</li> <li>JSON lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes empty JSON lists",
+                "result": {
+                    "stringList": []
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringList\": []\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonMaps operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonMapsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "denseStructMap": {
+                        "shape": "DenseStructMap"
+                    },
+                    "denseNumberMap": {
+                        "shape": "DenseNumberMap"
+                    },
+                    "denseBooleanMap": {
+                        "shape": "DenseBooleanMap"
+                    },
+                    "denseStringMap": {
+                        "shape": "DenseStringMap"
+                    },
+                    "denseSetMap": {
+                        "shape": "DenseSetMap"
+                    }
+                }
+            },
+            "DenseStructMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "DenseNumberMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Integer"
+                }
+            },
+            "DenseBooleanMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Boolean"
+                }
+            },
+            "DenseStringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "DenseSetMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringSet"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonMaps",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Deserializes JSON maps",
+                "result": {
+                    "denseStructMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"denseStructMap\": {\n        \"foo\": {\n            \"hi\": \"there\"\n        },\n        \"baz\": {\n            \"hi\": \"bye\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializesZeroValuesInMaps",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Ensure that 0 and false are sent over the wire in all maps and lists",
+                "result": {
+                    "denseNumberMap": {
+                        "x": 0
+                    },
+                    "denseBooleanMap": {
+                        "x": false
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"denseNumberMap\": {\n        \"x\": 0\n    },\n    \"denseBooleanMap\": {\n        \"x\": false\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializesDenseSetMap",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "A response that contains a dense map of sets.",
+                "result": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"denseSetMap\": {\n        \"x\": [],\n        \"y\": [\"a\", \"b\"]\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializesDenseSetMapAndSkipsNull",
+                "given": {
+                    "name": "JsonMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Clients SHOULD tolerate seeing a null value in a dense map, and they SHOULD\ndrop the null key-value pair.",
+                "result": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"denseSetMap\": {\n        \"x\": [],\n        \"y\": [\"a\", \"b\"],\n        \"z\": null\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonTimestamps operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "JsonTimestampsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonJsonTimestamps",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "result": {
+                    "normal": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"normal\": 1398796238\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "result": {
+                    "dateTime": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"dateTime\": \"2014-04-29T18:30:38Z\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "result": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"dateTimeOnTarget\": \"2014-04-29T18:30:38Z\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "result": {
+                    "epochSeconds": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"epochSeconds\": 1398796238\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "result": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"epochSecondsOnTarget\": 1398796238\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "result": {
+                    "httpDate": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"httpDate\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonJsonTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "JsonTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/JsonTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "JsonTimestampsInputOutput"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "result": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"httpDateOnTarget\": \"Tue, 29 Apr 2014 18:30:38 GMT\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for JsonUnions operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "UnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "contents": {
+                        "shape": "MyUnion"
+                    }
+                },
+                "documentation": "<p>A shared structure that contains a single union member.</p>"
+            },
+            "MyUnion": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "numberValue": {
+                        "shape": "Integer"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    },
+                    "timestampValue": {
+                        "shape": "Timestamp"
+                    },
+                    "enumValue": {
+                        "shape": "FooEnum"
+                    },
+                    "listValue": {
+                        "shape": "StringList"
+                    },
+                    "mapValue": {
+                        "shape": "StringMap"
+                    },
+                    "structureValue": {
+                        "shape": "GreetingStruct"
+                    },
+                    "renamedStructureValue": {
+                        "shape": "RenamedGreeting"
+                    }
+                },
+                "documentation": "<p>A union with a representative set of types for members.</p>",
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "RenamedGreeting": {
+                "type": "structure",
+                "members": {
+                    "salutation": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonDeserializeStringUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a string union value",
+                "result": {
+                    "contents": {
+                        "stringValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"stringValue\": \"foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeBooleanUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a boolean union value",
+                "result": {
+                    "contents": {
+                        "booleanValue": true
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"booleanValue\": true\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeNumberUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a number union value",
+                "result": {
+                    "contents": {
+                        "numberValue": 1
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"numberValue\": 1\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeBlobUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a blob union value",
+                "result": {
+                    "contents": {
+                        "blobValue": "foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"blobValue\": \"Zm9v\"\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeTimestampUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a timestamp union value",
+                "result": {
+                    "contents": {
+                        "timestampValue": 1398796238
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"timestampValue\": 1398796238\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeEnumUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes an enum union value",
+                "result": {
+                    "contents": {
+                        "enumValue": "Foo"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"enumValue\": \"Foo\"\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeListUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a list union value",
+                "result": {
+                    "contents": {
+                        "listValue": [
+                            "foo",
+                            "bar"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"listValue\": [\"foo\", \"bar\"]\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeMapUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a map union value",
+                "result": {
+                    "contents": {
+                        "mapValue": {
+                            "foo": "bar",
+                            "spam": "eggs"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"mapValue\": {\n            \"foo\": \"bar\",\n            \"spam\": \"eggs\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeStructureUnionValue",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Deserializes a structure union value",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            },
+            {
+                "id": "RestJsonDeserializeIgnoreType",
+                "given": {
+                    "name": "JsonUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/JsonUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "UnionInputOutput"
+                    },
+                    "documentation": "<p>This operation uses unions for inputs and outputs.</p>",
+                    "idempotent": true
+                },
+                "description": "Ignores an unrecognized __type property",
+                "result": {
+                    "contents": {
+                        "structureValue": {
+                            "hi": "hello"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"contents\": {\n        \"__type\": \"aws.protocoltests.json10#MyUnion\",\n        \"structureValue\": {\n            \"hi\": \"hello\"\n        }\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for MediaTypeHeader operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "MediaTypeHeaderOutput": {
+                "type": "structure",
+                "members": {
+                    "json": {
+                        "shape": "JsonValue",
+                        "jsonvalue": true,
+                        "location": "header",
+                        "locationName": "X-Json"
+                    }
+                }
+            },
+            "JsonValue": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "MediaTypeHeaderOutputBase64",
+                "given": {
+                    "name": "MediaTypeHeader",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/MediaTypeHeader",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "MediaTypeHeaderOutput"
+                    },
+                    "documentation": "<p>This example ensures that mediaType strings are base64 encoded in headers.</p>"
+                },
+                "description": "Headers that target strings with a mediaType are base64 encoded",
+                "result": {
+                    "json": "true"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Json": "dHJ1ZQ=="
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonNoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndNoOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "When an operation does not define output, the service will respond\nwith an empty payload, and may optionally include the content-type\nheader.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NoInputAndOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonNoInputAndOutputWithJson",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndOutputOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Operations that define output and do not bind anything to\nthe payload return a JSON object in the response.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{}"
+                }
+            },
+            {
+                "id": "RestJsonNoInputAndOutputNoPayload",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndOutputOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "This test is similar to RestJsonNoInputAndOutputWithJson, but\nit ensures that clients can gracefully handle responses that\nomit a JSON payload.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for PostUnionWithJsonName operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "PostUnionWithJsonNameOutput": {
+                "type": "structure",
+                "required": [
+                    "value"
+                ],
+                "members": {
+                    "value": {
+                        "shape": "UnionWithJsonName"
+                    }
+                }
+            },
+            "UnionWithJsonName": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "locationName": "FOO"
+                    },
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "baz": {
+                        "shape": "String",
+                        "locationName": "_baz"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "PostUnionWithJsonNameResponse1",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "PostUnionWithJsonNameOutput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "result": {
+                    "value": {
+                        "foo": "hi"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"value\": {\n        \"FOO\": \"hi\"\n    }\n}"
+                }
+            },
+            {
+                "id": "PostUnionWithJsonNameResponse2",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "PostUnionWithJsonNameOutput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "result": {
+                    "value": {
+                        "baz": "hi"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"value\": {\n        \"_baz\": \"hi\"\n    }\n}"
+                }
+            },
+            {
+                "id": "PostUnionWithJsonNameResponse3",
+                "given": {
+                    "name": "PostUnionWithJsonName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/PostUnionWithJsonName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "PostUnionWithJsonNameOutput"
+                    },
+                    "documentation": "<p>This operation defines a union that uses jsonName on some members.</p>"
+                },
+                "description": "Tests that jsonName works with union members.",
+                "result": {
+                    "value": {
+                        "bar": "hi"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"value\": {\n        \"bar\": \"hi\"\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "RecursiveShapesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonRecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/RecursiveShapes",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "RecursiveShapesInputOutput"
+                    },
+                    "documentation": "<p>Recursive shapes</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes recursive structures",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"nested\": {\n        \"foo\": \"Foo1\",\n        \"nested\": {\n            \"bar\": \"Bar1\",\n            \"recursiveMember\": {\n                \"foo\": \"Foo2\",\n                \"nested\": {\n                    \"bar\": \"Bar2\"\n                }\n            }\n        }\n    }\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonSimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "string",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "{\n    \"stringValue\": \"string\",\n    \"trueBooleanValue\": true,\n    \"falseBooleanValue\": false,\n    \"byteValue\": 1,\n    \"shortValue\": 2,\n    \"integerValue\": 3,\n    \"longValue\": 4,\n    \"floatValue\": 5.5,\n    \"DoubleDribble\": 6.5\n}"
+                }
+            },
+            {
+                "id": "RestJsonDoesntDeserializeNullStructureValues",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Rest Json should not deserialize null structure values",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"stringValue\": null\n}"
+                }
+            },
+            {
+                "id": "RestJsonSupportsNaNFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"floatValue\": \"NaN\",\n    \"DoubleDribble\": \"NaN\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonSupportsInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"floatValue\": \"Infinity\",\n    \"DoubleDribble\": \"Infinity\"\n}"
+                }
+            },
+            {
+                "id": "RestJsonSupportsNegativeInfinityFloatInputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesInputOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/json"
+                    },
+                    "body": "{\n    \"floatValue\": \"-Infinity\",\n    \"DoubleDribble\": \"-Infinity\"\n}"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TimestampFormatHeaders operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TimestampFormatHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "header",
+                        "locationName": "X-memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "header",
+                        "locationName": "X-memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "header",
+                        "locationName": "X-memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "header",
+                        "locationName": "X-defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "header",
+                        "locationName": "X-targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "header",
+                        "locationName": "X-targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "header",
+                        "locationName": "X-targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestJsonTimestampFormatHeaders",
+                "given": {
+                    "name": "TimestampFormatHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/TimestampFormatHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "TimestampFormatHeadersIO"
+                    },
+                    "documentation": "<p>This example tests how timestamp request and response headers are serialized.</p>"
+                },
+                "description": "Tests how timestamp response headers are serialized",
+                "result": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-memberDateTime": "2019-12-16T23:48:18Z",
+                        "X-memberEpochSeconds": "1576540098",
+                        "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-targetDateTime": "2019-12-16T23:48:18Z",
+                        "X-targetEpochSeconds": "1576540098",
+                        "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT"
+                    }
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for UnitInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-json",
+            "protocols": [
+                "rest-json"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "RestJsonUnitInputAndOutputNoOutput",
+                "given": {
+                    "name": "UnitInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/UnitInputAndOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This test is similar to NoInputAndNoOutput, but uses explicit Unit types.</p>"
+                },
+                "description": "When an operation defines Unit output, the service will respond\nwith an empty payload, and may optionally include the content-type\nheader.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/rest-xml.json 2.31.35-1/tests/unit/botocore/protocols/output/rest-xml.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/rest-xml.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/rest-xml.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,1273 +1,4628 @@
+
 [
-  {
-    "description": "Scalar members",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ImaHeader": {
-            "shape": "HeaderShape"
-          },
-          "ImaHeaderLocation": {
-            "shape": "HeaderShape",
-            "locationName": "X-Foo"
-          },
-          "Str": {
-            "shape": "StringType"
-          },
-          "Num": {
-            "shape": "IntegerType",
-            "locationName": "FooNum"
-          },
-          "FalseBool": {
-            "shape": "BooleanType"
-          },
-          "TrueBool": {
-            "shape": "BooleanType"
-          },
-          "Float": {
-            "shape": "FloatType"
-          },
-          "Double": {
-            "shape": "DoubleType"
-          },
-          "Long": {
-            "shape": "LongType"
-          },
-          "Char": {
-            "shape": "CharType"
-          },
-          "Timestamp": {
-            "shape": "TimestampType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "FloatType": {
-        "type": "float"
-      },
-      "DoubleType": {
-        "type": "double"
-      },
-      "LongType": {
-        "type": "long"
-      },
-      "CharType": {
-        "type": "character"
-      },
-      "HeaderShape": {
-        "type": "string",
-        "location": "header"
-      },
-      "StatusShape": {
-        "type": "integer",
-        "location": "statusCode"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Str": "myname",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a",
-          "Timestamp": 1422172800
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "<OperationNameResponse><Str>myname</Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResponse>"
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Str": "",
-          "Num": 123,
-          "FalseBool": false,
-          "TrueBool": true,
-          "Float": 1.2,
-          "Double": 1.3,
-          "Long": 200,
-          "Char": "a",
-          "Timestamp": 1422172800
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc"
-          },
-          "body": "<OperationNameResponse><Str></Str><FooNum>123</FooNum><FalseBool>false</FalseBool><TrueBool>true</TrueBool><Float>1.2</Float><Double>1.3</Double><Long>200</Long><Char>a</Char><Timestamp>2015-01-25T08:00:00Z</Timestamp></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Blob",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Blob": {
-            "shape": "BlobType"
-          }
-        }
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Blob": "value"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><Blob>dmFsdWU=</Blob></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Lists",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><ListMember><member>abc</member><member>123</member></ListMember></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "List with custom member name",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "StringType",
-          "locationName": "item"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><ListMember><item>abc</item><item>123</item></ListMember></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened List",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "StringList",
-            "flattened": true
-          }
-        }
-      },
-      "StringList": {
-        "type": "list",
-        "member": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["abc", "123"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><ListMember>abc</ListMember><ListMember>123</ListMember></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Normal map",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "SingleStructure"
-        }
-      },
-      "SingleStructure": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": {
-              "foo": "bar"
-            },
-            "baz": {
-              "foo": "bam"
-            }
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><Map><entry><key>qux</key><value><foo>bar</foo></value></entry><entry><key>baz</key><value><foo>bam</foo></value></entry></Map></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Flattened map",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap",
-            "flattened": true
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType"
-        },
-        "value": {
-          "shape": "StringType"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><Map><key>qux</key><value>bar</value></Map><Map><key>baz</key><value>bam</value></Map></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Named map",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Map": {
-            "shape": "StringMap"
-          }
-        }
-      },
-      "StringMap": {
-        "type": "map",
-        "key": {
-          "shape": "StringType",
-          "locationName": "foo"
-        },
-        "value": {
-          "shape": "StringType",
-          "locationName": "bar"
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Map": {
-            "qux": "bar",
-            "baz": "bam"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResult><Map><entry><foo>qux</foo><bar>bar</bar></entry><entry><foo>baz</foo><bar>bam</bar></entry></Map></OperationNameResult>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "XML payload",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "payload": "Data",
-        "members": {
-          "Header": {
-            "shape": "StringType",
-            "location": "header",
-            "locationName": "X-Foo"
-          },
-          "Data": {
-            "shape": "SingleStructure"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "SingleStructure": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          }
-        }
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Header": "baz",
-          "Data": {
-            "Foo": "abc"
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "X-Foo": "baz"
-          },
-          "body": "<OperationNameResponse><Foo>abc</Foo></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Streaming payload",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "payload": "Stream",
-        "members": {
-          "Stream": {
-            "shape": "BlobStream"
-          }
-        }
-      },
-      "BlobStream": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Stream": "abc"
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "abc"
-        }
-      }
-    ]
-  },
-  {
-    "description": "Scalar members in headers",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Str": {
-            "locationName": "x-str",
-            "shape": "StringHeaderType"
-          },
-          "Integer": {
-            "locationName": "x-int",
-            "shape": "IntegerHeaderType"
-          },
-          "TrueBool": {
-            "locationName": "x-true-bool",
-            "shape": "BooleanHeaderType"
-          },
-          "FalseBool": {
-            "locationName": "x-false-bool",
-            "shape": "BooleanHeaderType"
-          },
-          "Float": {
-            "locationName": "x-float",
-            "shape": "FloatHeaderType"
-          },
-          "Double": {
-            "locationName": "x-double",
-            "shape": "DoubleHeaderType"
-          },
-          "Long": {
-            "locationName": "x-long",
-            "shape": "LongHeaderType"
-          },
-          "Char": {
-            "locationName": "x-char",
-            "shape": "CharHeaderType"
-          },
-          "Timestamp": {
-            "locationName": "x-timestamp",
-            "shape": "TimestampHeaderType"
-          }
-        }
-      },
-      "StringHeaderType": {
-        "location": "header",
-        "type": "string"
-      },
-      "IntegerHeaderType": {
-        "location": "header",
-        "type": "integer"
-      },
-      "BooleanHeaderType": {
-        "location": "header",
-        "type": "boolean"
-      },
-      "FloatHeaderType": {
-        "location": "header",
-        "type": "float"
-      },
-      "DoubleHeaderType": {
-        "location": "header",
-        "type": "double"
-      },
-      "LongHeaderType": {
-        "location": "header",
-        "type": "long"
-      },
-      "CharHeaderType": {
-        "location": "header",
-        "type": "character"
-      },
-      "TimestampHeaderType": {
-        "location": "header",
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Str": "string",
-          "Integer": 1,
-          "TrueBool": true,
-          "FalseBool": false,
-          "Float": 1.5,
-          "Double": 1.5,
-          "Long": 100,
-          "Char": "a",
-          "Timestamp": 1422172800
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "x-str": "string",
-            "x-int": "1",
-            "x-true-bool": "true",
-            "x-false-bool": "false",
-            "x-float": "1.5",
-            "x-double": "1.5",
-            "x-long": "100",
-            "x-char": "a",
-            "x-timestamp": "Sun, 25 Jan 2015 08:00:00 GMT"
-          },
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Empty string",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Foo": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Foo": ""
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "<OperationNameResponse><Foo/><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "JSON value trait",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "Attr": {
-            "shape": "StringType",
-              "jsonvalue": true,
-              "location": "header",
-              "locationName": "X-Amz-Foo"
-          }
-        }
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Attr": {"Foo":"Bar"}
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {"X-Amz-Foo": "eyJGb28iOiJCYXIifQ=="},
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Timestamp members",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "TimeArg": {
-            "shape": "TimestampType"
-          },
-          "TimeArgInHeader": {
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timearg"
-          },
-          "TimeCustom": {
-            "timestampFormat": "rfc822",
-            "shape": "TimestampType"
-          },
-          "TimeCustomInHeader": {
-            "timestampFormat": "unixTimestamp",
-            "shape": "TimestampType",
-            "location": "header",
-            "locationName": "x-amz-timecustom"
-          },
-          "TimeFormat": {
-            "shape": "TimestampFormatType"
-          },
-          "TimeFormatInHeader": {
-            "shape": "TimestampFormatType",
-            "location": "header",
-            "locationName": "x-amz-timeformat"
-          },
-          "StructMember": {
-            "shape": "TimeContainer"
-          }
-        }
-      },
-      "TimeContainer": {
-        "type": "structure",
-        "members": {
-          "foo": {
-            "shape": "TimestampType"
-          },
-          "bar": {
-            "shape": "TimestampFormatType"
-          }
-        }
-      },
-      "TimestampFormatType": {
-        "timestampFormat": "unixTimestamp",
-        "type": "timestamp"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "TimeArg": 1398796238,
-          "TimeArgInHeader": 1398796238,
-          "TimeCustom": 1398796238,
-          "TimeCustomInHeader": 1398796238,
-          "TimeFormat": 1398796238,
-          "TimeFormatInHeader": 1398796238,
-          "StructMember": {
-            "foo": 1398796238,
-            "bar": 1398796238
-          }
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-            "x-amz-timearg": "Tue, 29 Apr 2014 18:30:38 GMT",
-            "x-amz-timecustom": "1398796238",
-            "x-amz-timeformat": "1398796238"
-          },
-          "body": "<OperationNameResponse><StructMember><foo>2014-04-29T18:30:38+00:00</foo><bar>1398796238</bar></StructMember><TimeArg>2014-04-29T18:30:38+00:00</TimeArg><TimeCustom>Tue, 29 Apr 2014 18:30:38 GMT</TimeCustom><TimeFormat>1398796238</TimeFormat><RequestId>requestid</RequestId></OperationNameResponse>"
-        }
-      }
-    ]
-  },
-  {
-    "description": "REST XML Event Stream",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-            "Payload": {"shape": "EventStream"}
-        },
-        "payload": "Payload"
-      },
-      "EventStream": {
-          "type": "structure",
-          "eventstream": true,
-          "members": {
-              "TypeA": {"shape": "TypeAEvent"},
-              "TypeB": {"shape": "TypeBEvent"},
-              "TypeC": {"shape": "TypeCEvent"}
-          }
-      },
-      "TypeAEvent": {
-          "type": "structure",
-          "event": true,
-          "members": {
-              "Payload": {
-                  "shape": "BlobType",
-                  "eventpayload": true
-              }
-          }
-      },
-      "TypeBEvent": {
-          "type": "structure",
-          "event": true,
-          "members": {
-              "Details": {
-                  "shape": "Details",
-                  "eventpayload": true
-              }
-          }
-      },
-      "TypeCEvent": {
-          "type": "structure",
-          "event": true,
-          "members": {
-              "Details": {
-                  "shape": "Details",
-                  "eventpayload": true
-              },
-              "Boolean": {
-                  "shape": "BooleanType",
-                  "eventheader": true
-              },
-              "Integer": {
-                  "shape": "IntegerType",
-                  "eventheader": true
-              },
-              "Blob": {
-                  "shape": "BlobType",
-                  "eventheader": true
-              },
-              "String": {
-                  "shape": "StringType",
-                  "eventheader": true
-              },
-              "Timestamp": {
-                  "shape": "TimestampType",
-                  "eventheader": true
-              }
-          }
-      },
-      "Details": {
-          "type": "structure",
-          "members": {
-              "StringField": {"shape": "StringType"},
-              "IntegerField": {"shape": "IntegerType"}
-          }
-      },
-      "StringType": {
-        "type": "string"
-      },
-      "IntegerType": {
-        "type": "integer"
-      },
-      "BooleanType": {
-        "type": "boolean"
-      },
-      "TimestampType": {
-        "type": "timestamp"
-      },
-      "BlobType": {
-        "type": "blob"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Payload": [
-              {
-                  "TypeA": {"Payload": "somebytes"}
-              },
-              {
-                  "TypeB": {
-                      "Details": {
-                          "StringField": "somestring",
-                          "IntegerField": 123
-                      }
-                  }
-              }
-          ]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "AAAAbAAAAFPLgkVrDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVBDTpjb250ZW50LXR5cGUHABhhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1zb21lYnl0ZXMesj2HAAAAsAAAAEOaMMdXDTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVCDTpjb250ZW50LXR5cGUHAAh0ZXh0L3htbDxUeXBlQiB4bWxucz0iIj48U3RyaW5nRmllbGQ+c29tZXN0cmluZzwvU3RyaW5nRmllbGQ+PEludGVnZXJGaWVsZD4xMjM8L0ludGVnZXJGaWVsZD48L1R5cGVCPiwthPo="
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Payload": [
-              {
-                  "TypeC": {
-                      "Boolean": true,
-                      "Integer": 123,
-                      "Blob": "someblob",
-                      "String": "somestring",
-                      "Timestamp": 1422172800,
-                      "Details": {
-                          "StringField": "somestring",
-                          "IntegerField": 123
-                      }
-                  }
-              }
-          ]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": "AAABAQAAAJBjEbY4DTptZXNzYWdlLXR5cGUHAAVldmVudAs6ZXZlbnQtdHlwZQcABVR5cGVDDTpjb250ZW50LXR5cGUHAAh0ZXh0L3htbAdCb29sZWFuAAdJbnRlZ2VyBAAAAHsEQmxvYgYACHNvbWVibG9iBlN0cmluZwcACnNvbWVzdHJpbmcJVGltZXN0YW1wCAAAAUsgGsQAPERldGFpbHMgeG1sbnM9IiI+PFN0cmluZ0ZpZWxkPnNvbWVzdHJpbmc8L1N0cmluZ0ZpZWxkPjxJbnRlZ2VyRmllbGQ+MTIzPC9JbnRlZ2VyRmllbGQ+PC9EZXRhaWxzPhGUvKo="
-        }
-      },
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "Payload": []
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {},
-          "body": ""
-        }
-      }
-    ]
-  },
-  {
-    "description": "Modeled exceptions",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "ExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "ImaHeader": {
-            "shape": "HeaderShape"
-          },
-          "ImaHeaderLocation": {
-            "shape": "HeaderShape",
-            "locationName": "X-Foo"
-          },
-          "Status": {
-            "shape": "StatusShape",
-            "location": "statusCode"
-          },
-          "BodyMember": {
-            "shape": "StringType"
-          },
-          "Message": {
-            "shape": "StringType"
-          }
-        }
-      },
-      "OtherExceptionShape": {
-        "exception": true,
-        "type": "structure",
-        "members": {
-          "BodyMember": {
-              "shape": "StringType"
-          }
-        }
-      },
-      "HeaderShape": {
-        "type": "string",
-        "location": "header"
-      },
-      "StatusShape": {
-        "type": "integer"
-      },
-      "StringType": {
-        "type": "string"
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "ImaHeader": "test",
-          "ImaHeaderLocation": "abc",
-          "Status": 400,
-          "BodyMember": "mybody",
-          "Message": "mymessage"
-        },
-        "errorCode": "ExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Requestid": "foo-id"
-          },
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>ExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {
-          "BodyMember": "mybody"
-        },
-        "errorCode": "OtherExceptionShape",
-        "errorMessage": "mymessage",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Requestid": "foo-id"
-          },
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>OtherExceptionShape</Code><Message>mymessage</Message><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      },
-      {
-        "given": {
-          "errors": [
-            {"shape": "ExceptionShape"}
-          ],
-          "name": "OperationName"
-        },
-        "error": {},
-        "errorCode": "UndefinedShape",
-        "response": {
-          "status_code": 400,
-          "headers": {
-            "ImaHeader": "test",
-            "X-Foo": "abc",
-            "X-Amzn-Requestid": "foo-id"
-          },
-          "body": "<ErrorResponse><Error><Type>SomeType</Type><Code>UndefinedShape</Code><BodyMember>mybody</BodyMember></Error></ErrorResponse>"
-        }
-      }
-    ]
-  },
-  {
-      "description": "Unions",
-      "metadata": {
-          "protocol": "rest-xml"
-      },
-      "shapes": {
-          "OutputShape": {
-              "type": "structure",
-              "members": {
-                  "UnionMember": {
-                      "shape": "UnionType"
-                  }
-              }
-          },
-          "UnionType": {
-              "type": "structure",
-              "members": {
-                  "S":{"shape":"StringType"},
-                  "L": {"shape": "ListType"}
-              },
-              "union": true
-          },
-          "ListType": {
-              "type": "list",
-              "member": {
-                  "shape": "StringType"
-              }
-          },
-          "StringType": {
-              "type": "string"
-          }
-      },
-      "cases": [
-          {
-              "given": {
-                  "output": {
-                      "shape": "OutputShape"
-                  },
-                  "name": "OperationName"
-              },
-              "result": {
-                  "UnionMember": {"S":  "string value"}
-              },
-              "response": {
-                  "status_code": 200,
-                  "headers": {},
-                  "body": "<OperationNameResponse><UnionMember><S>string value</S></UnionMember></OperationNameResponse>"
-              }
-          },
-          {
-              "given": {
-                  "output": {
-                      "shape": "OutputShape"
-                  },
-                  "name": "OperationName"
-              },
-              "result": {
-                  "UnionMember": {"L":  ["a", "b"]}
-              },
-              "response": {
-                  "status_code": 200,
-                  "headers": {},
-                  "body": "<OperationNameResponse><UnionMember><L><member>a</member><member>b</member></L></UnionMember></OperationNameResponse>"
-              }
-          },
-          {
-              "given": {
-                  "output": {
-                      "shape": "OutputShape"
-                  },
-                  "name": "OperationName"
-              },
-              "result": {
-                  "UnionMember": {"SDK_UNKNOWN_MEMBER":  {"name": "SomeUnknownMember"}}
-              },
-              "response": {
-                  "status_code": 200,
-                  "headers": {},
-                  "body": "<OperationNameResponse><UnionMember><SomeUnknownMember>foo</SomeUnknownMember></UnionMember></OperationNameResponse>"
-              }
-          }
-      ]
-  },
-  {
-    "description": "List in header",
-    "metadata": {
-      "protocol": "rest-xml"
-    },
-    "shapes": {
-      "OutputShape": {
-        "type": "structure",
-        "members": {
-          "ListMember": {
-            "shape": "ListShape",
-            "location": "header",
-            "locationName": "x-amz-list-member"
-          }
-        }
-      },
-      "ListShape": {
-        "type": "list",
-        "member": {
-          "shape": "EnumType"
-        }
-      },
-      "EnumType": {
-        "type": "string",
-        "enum": ["one", "two", "three"]
-      }
-    },
-    "cases": [
-      {
-        "given": {
-          "output": {
-            "shape": "OutputShape"
-          },
-          "name": "OperationName"
-        },
-        "result": {
-          "ListMember": ["one", "two", "three"]
-        },
-        "response": {
-          "status_code": 200,
-          "headers": {
-              "x-amz-list-member": " one,two , three "
-          },
-          "body": ""
-        }
-      }
-    ]
-  }
+    {
+        "description": "Test cases for BodyWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "BodyWithXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName"
+                    }
+                },
+                "locationName": "Ahoy"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "BodyWithXmlName",
+                "given": {
+                    "name": "BodyWithXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/BodyWithXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "BodyWithXmlNameInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a body that uses an XML name, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a payload using a wrapper name based on the xmlName",
+                "result": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<Ahoy><nested><name>Phreddy</name></nested></Ahoy>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for DatetimeOffsets operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "DatetimeOffsetsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlDateTimeWithNegativeOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/DatetimeOffsets",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<DatetimeOffsetsOutput>\n    <datetime>2019-12-16T22:48:18-01:00</datetime>\n</DatetimeOffsetsOutput>\n"
+                }
+            },
+            {
+                "id": "RestXmlDateTimeWithPositiveOffset",
+                "given": {
+                    "name": "DatetimeOffsets",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/DatetimeOffsets",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "DatetimeOffsetsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime (timestamps) with offsets",
+                "result": {
+                    "datetime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<DatetimeOffsetsOutput>\n    <datetime>2019-12-17T00:48:18+01:00</datetime>\n</DatetimeOffsetsOutput>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for EmptyInputAndEmptyOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EmptyInputAndEmptyOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "EmptyInputAndEmptyOutput",
+                "given": {
+                    "name": "EmptyInputAndEmptyOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EmptyInputAndEmptyOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "EmptyInputAndEmptyOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has an empty input and empty output structure that reuses the same shape. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output serializes no payload",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMap operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FlattenedXmlMapResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FooEnumMap",
+                        "flattened": true
+                    }
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "FlattenedXmlMap",
+                "given": {
+                    "name": "FlattenedXmlMap",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FlattenedXmlMap",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapResponse"
+                    },
+                    "documentation": "<p>Flattened maps</p>"
+                },
+                "description": "Serializes flattened XML maps in responses",
+                "result": {
+                    "myMap": {
+                        "foo": "Foo",
+                        "baz": "Baz"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<FlattenedXmlMapResponse>\n    <myMap>\n        <key>foo</key>\n        <value>Foo</value>\n    </myMap>\n    <myMap>\n        <key>baz</key>\n        <value>Baz</value>\n    </myMap>\n</FlattenedXmlMapResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMapWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FlattenedXmlMapWithXmlNameResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FlattenedXmlMapWithXmlNameInputOutputMap",
+                        "flattened": true,
+                        "locationName": "KVP"
+                    }
+                }
+            },
+            "FlattenedXmlMapWithXmlNameInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "FlattenedXmlMapWithXmlName",
+                "given": {
+                    "name": "FlattenedXmlMapWithXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FlattenedXmlMapWithXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapWithXmlNameResponse"
+                    },
+                    "documentation": "<p>Flattened maps with @xmlName</p>"
+                },
+                "description": "Serializes flattened XML maps in responses that have xmlName on members",
+                "result": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<FlattenedXmlMapWithXmlNameResponse>\n    <KVP>\n        <K>a</K>\n        <V>A</V>\n    </KVP>\n    <KVP>\n        <K>b</K>\n        <V>B</V>\n    </KVP>\n</FlattenedXmlMapWithXmlNameResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FlattenedXmlMapWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FlattenedXmlMapWithXmlNamespaceOutput": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "FlattenedXmlMapWithXmlNamespaceOutputMap",
+                        "flattened": true,
+                        "locationName": "KVP",
+                        "xmlNamespace": "https://the-member.example.com"
+                    }
+                }
+            },
+            "FlattenedXmlMapWithXmlNamespaceOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K",
+                    "xmlNamespace": "https://the-key.example.com"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V",
+                    "xmlNamespace": "https://the-value.example.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlFlattenedXmlMapWithXmlNamespace",
+                "given": {
+                    "name": "FlattenedXmlMapWithXmlNamespace",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FlattenedXmlMapWithXmlNamespace",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "FlattenedXmlMapWithXmlNamespaceOutput"
+                    },
+                    "documentation": "<p>Flattened maps with @xmlNamespace and @xmlName</p>"
+                },
+                "description": "Serializes flattened XML maps in responses that have xmlNamespace and xmlName on members",
+                "result": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<FlattenedXmlMapWithXmlNamespaceOutput>\n    <KVP xmlns=\"https://the-member.example.com\">\n        <K xmlns=\"https://the-key.example.com\">a</K>\n        <V xmlns=\"https://the-value.example.com\">A</V>\n    </KVP>\n    <KVP xmlns=\"https://the-member.example.com\">\n        <K xmlns=\"https://the-key.example.com\">b</K>\n        <V xmlns=\"https://the-value.example.com\">B</V>\n    </KVP>\n</FlattenedXmlMapWithXmlNamespaceOutput>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlDateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/FractionalSeconds",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse datetime timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<FractionalSecondsOutput>\n    <datetime>2000-01-02T20:34:56.123Z</datetime>\n</FractionalSecondsOutput>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "GreetingWithErrorsOutput": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Greeting"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "GreetingWithErrors",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "GreetingWithErrorsOutput"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true
+                },
+                "description": "Ensures that operations with errors successfully know how to deserialize the successful response",
+                "result": {
+                    "greeting": "Hello"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Greeting": "Hello"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "error": {
+                    "httpStatusCode": 400,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "InvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple XML errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<ErrorResponse>\n   <Error>\n      <Type>Sender</Type>\n      <Code>InvalidGreeting</Code>\n      <Message>Hi</Message>\n      <AnotherSetting>setting</AnotherSetting>\n   </Error>\n   <RequestId>foo-id</RequestId>\n</ErrorResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "Header": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Header"
+                    },
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "error": {
+                    "httpStatusCode": 403,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "ComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/GreetingWithErrors",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A BadRequest error.</li> </ol> <p>Implementations must be able to successfully take a response and properly (de)serialize successful and error responses based on the the presence of the</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {
+                    "Header": "Header",
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 403,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Header": "Header"
+                    },
+                    "body": "<ErrorResponse>\n   <Error>\n      <Type>Sender</Type>\n      <Code>ComplexError</Code>\n      <Message>Hi</Message>\n      <TopLevel>Top level</TopLevel>\n      <Nested>\n          <Foo>bar</Foo>\n      </Nested>\n   </Error>\n   <RequestId>foo-id</RequestId>\n</ErrorResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpEnumPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "EnumPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "StringEnum"
+                    }
+                },
+                "payload": "payload"
+            },
+            "StringEnum": {
+                "type": "string",
+                "enum": [
+                    "enumvalue"
+                ]
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlEnumPayloadResponse",
+                "given": {
+                    "name": "HttpEnumPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/EnumPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "EnumPayloadInput"
+                    }
+                },
+                "result": {
+                    "payload": "enumvalue"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    },
+                    "body": "enumvalue"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadTraits operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadTraitsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "blob": {
+                        "shape": "Blob"
+                    }
+                },
+                "payload": "blob"
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadTraitsWithBlob",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no XML document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes a blob in the HTTP payload",
+                "result": {
+                    "foo": "Foo",
+                    "blob": "blobby blob blob"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Foo": "Foo"
+                    },
+                    "body": "blobby blob blob"
+                }
+            },
+            {
+                "id": "HttpPayloadTraitsWithNoBlobBody",
+                "given": {
+                    "name": "HttpPayloadTraits",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/HttpPayloadTraits",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadTraitsInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a blob shape in the payload.</p> <p>In this example, no XML document is synthesized because the payload is not a structure or a union type.</p>"
+                },
+                "description": "Serializes an empty blob in the HTTP payload",
+                "result": {
+                    "foo": "Foo"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Foo": "Foo"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithMemberXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithMemberXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName",
+                        "locationName": "Hola"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithMemberXmlName",
+                "given": {
+                    "name": "HttpPayloadWithMemberXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithMemberXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithMemberXmlNameInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML name on the member, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper name based on member xmlName",
+                "result": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<Hola><name>Phreddy</name></Hola>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithStructure operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithStructureInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "NestedPayload",
+                        "locationName": "NestedPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "NestedPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    },
+                    "name": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithStructure",
+                "given": {
+                    "name": "HttpPayloadWithStructure",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithStructure",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithStructureInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a structure in the payload.</p> <p>Note that serializing a structure changes the wrapper element name to match the targeted structure.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload",
+                "result": {
+                    "nested": {
+                        "greeting": "hello",
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<NestedPayload>\n    <greeting>hello</greeting>\n    <name>Phreddy</name>\n</NestedPayload>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithUnion operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithUnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "UnionPayload",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "UnionPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlHttpPayloadWithUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a union in the payload.",
+                "result": {
+                    "nested": {
+                        "greeting": "hello"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<UnionPayload>\n    <greeting>hello</greeting>\n</UnionPayload>"
+                }
+            },
+            {
+                "id": "RestXmlHttpPayloadWithUnsetUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "No payload is sent if the union has no value.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Length": "0"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlName",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlName": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "locationName": "Hello"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlName",
+                "given": {
+                    "name": "HttpPayloadWithXmlName",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithXmlNameInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML name, changing the wrapper name.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper name based on xmlName",
+                "result": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<Hello><name>Phreddy</name></Hello>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNamespaceInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlNamespace",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlNamespace": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlNamespace",
+                "given": {
+                    "name": "HttpPayloadWithXmlNamespace",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlNamespace",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithXmlNamespaceInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML namespace.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper with an XML namespace",
+                "result": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<PayloadWithXmlNamespace xmlns=\"http://foo.com\">\n    <name>Phreddy</name>\n</PayloadWithXmlNamespace>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithXmlNamespaceAndPrefix operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPayloadWithXmlNamespaceAndPrefixInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "PayloadWithXmlNamespaceAndPrefix",
+                        "locationName": "nested"
+                    }
+                },
+                "payload": "nested"
+            },
+            "PayloadWithXmlNamespaceAndPrefix": {
+                "type": "structure",
+                "members": {
+                    "name": {
+                        "shape": "String"
+                    }
+                },
+                "xmlNamespace": {
+                    "prefix": "baz",
+                    "uri": "http://foo.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPayloadWithXmlNamespaceAndPrefix",
+                "given": {
+                    "name": "HttpPayloadWithXmlNamespaceAndPrefix",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithXmlNamespaceAndPrefix",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithXmlNamespaceAndPrefixInputOutput"
+                    },
+                    "documentation": "<p>The following example serializes a payload that uses an XML namespace.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a structure in the payload using a wrapper with an XML namespace",
+                "result": {
+                    "nested": {
+                        "name": "Phreddy"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<PayloadWithXmlNamespaceAndPrefix xmlns:baz=\"http://foo.com\">\n    <name>Phreddy</name>\n</PayloadWithXmlNamespaceAndPrefix>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPrefixHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpPrefixHeadersInputOutput": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "x-foo"
+                    },
+                    "fooMap": {
+                        "shape": "FooPrefixHeaders",
+                        "location": "headers",
+                        "locationName": "x-foo-"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "FooPrefixHeaders": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "HttpPrefixHeadersArePresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPrefixHeadersInputOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "Adds headers by prefix",
+                "result": {
+                    "foo": "Foo",
+                    "fooMap": {
+                        "abc": "Abc value",
+                        "def": "Def value"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "x-foo": "Foo",
+                        "x-foo-abc": "Abc value",
+                        "x-foo-def": "Def value"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "HttpPrefixHeadersAreNotPresent",
+                "given": {
+                    "name": "HttpPrefixHeaders",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/HttpPrefixHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPrefixHeadersInputOutput"
+                    },
+                    "documentation": "<p>This examples adds headers to the input of a request and response by prefix.</p>"
+                },
+                "description": "No prefix headers are serialized because the value is empty",
+                "result": {
+                    "foo": "Foo",
+                    "fooMap": {}
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "x-foo": "Foo"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpResponseCode operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "HttpResponseCodeOutput": {
+                "type": "structure",
+                "members": {
+                    "Status": {
+                        "shape": "Integer",
+                        "location": "statusCode"
+                    }
+                }
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlHttpResponseCode",
+                "given": {
+                    "name": "HttpResponseCode",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpResponseCode",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpResponseCodeOutput"
+                    },
+                    "idempotent": true
+                },
+                "description": "Binds the http response code to an output structure.",
+                "result": {
+                    "Status": 201
+                },
+                "response": {
+                    "status_code": 201,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpStringPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "StringPayloadInput": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "String"
+                    }
+                },
+                "payload": "payload"
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlStringPayloadResponse",
+                "given": {
+                    "name": "HttpStringPayload",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/StringPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "StringPayloadInput"
+                    }
+                },
+                "result": {
+                    "payload": "rawstring"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "text/plain"
+                    },
+                    "body": "rawstring"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for IgnoreQueryParamsInResponse operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "IgnoreQueryParamsInResponseOutput": {
+                "type": "structure",
+                "members": {
+                    "baz": {
+                        "shape": "String",
+                        "location": "uri",
+                        "locationName": "baz"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "IgnoreQueryParamsInResponse",
+                "given": {
+                    "name": "IgnoreQueryParamsInResponse",
+                    "http": {
+                        "method": "GET",
+                        "requestUri": "/IgnoreQueryParamsInResponse",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "IgnoreQueryParamsInResponseOutput"
+                    },
+                    "documentation": "<p>This example ensures that query string bound request parameters are serialized in the body of responses if the structure is used in both the request and response.</p>"
+                },
+                "description": "Query parameters must be ignored when serializing the output of an operation",
+                "result": {
+                    "baz": "bam"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<IgnoreQueryParamsInResponseOutput><baz>bam</baz></IgnoreQueryParamsInResponseOutput>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for InputAndOutputWithHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "InputAndOutputWithHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "headerString": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-String"
+                    },
+                    "headerByte": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Byte"
+                    },
+                    "headerShort": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Short"
+                    },
+                    "headerInteger": {
+                        "shape": "Integer",
+                        "location": "header",
+                        "locationName": "X-Integer"
+                    },
+                    "headerLong": {
+                        "shape": "Long",
+                        "location": "header",
+                        "locationName": "X-Long"
+                    },
+                    "headerFloat": {
+                        "shape": "Float",
+                        "location": "header",
+                        "locationName": "X-Float"
+                    },
+                    "headerDouble": {
+                        "shape": "Double",
+                        "location": "header",
+                        "locationName": "X-Double"
+                    },
+                    "headerTrueBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean1"
+                    },
+                    "headerFalseBool": {
+                        "shape": "Boolean",
+                        "location": "header",
+                        "locationName": "X-Boolean2"
+                    },
+                    "headerStringList": {
+                        "shape": "StringList",
+                        "location": "header",
+                        "locationName": "X-StringList"
+                    },
+                    "headerStringSet": {
+                        "shape": "StringSet",
+                        "location": "header",
+                        "locationName": "X-StringSet"
+                    },
+                    "headerIntegerList": {
+                        "shape": "IntegerList",
+                        "location": "header",
+                        "locationName": "X-IntegerList"
+                    },
+                    "headerBooleanList": {
+                        "shape": "BooleanList",
+                        "location": "header",
+                        "locationName": "X-BooleanList"
+                    },
+                    "headerTimestampList": {
+                        "shape": "TimestampList",
+                        "location": "header",
+                        "locationName": "X-TimestampList"
+                    },
+                    "headerEnum": {
+                        "shape": "FooEnum",
+                        "location": "header",
+                        "locationName": "X-Enum"
+                    },
+                    "headerEnumList": {
+                        "shape": "FooEnumList",
+                        "location": "header",
+                        "locationName": "X-EnumList"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            }
+        },
+        "cases": [
+            {
+                "id": "InputAndOutputWithStringHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with string header bindings",
+                "result": {
+                    "headerString": "Hello",
+                    "headerStringList": [
+                        "a",
+                        "b",
+                        "c"
+                    ],
+                    "headerStringSet": [
+                        "a",
+                        "b",
+                        "c"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-String": "Hello",
+                        "X-StringList": "a, b, c",
+                        "X-StringSet": "a, b, c"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "InputAndOutputWithNumericHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with numeric header bindings",
+                "result": {
+                    "headerByte": 1,
+                    "headerShort": 123,
+                    "headerInteger": 123,
+                    "headerLong": 123,
+                    "headerFloat": 1.1,
+                    "headerDouble": 1.1,
+                    "headerIntegerList": [
+                        1,
+                        2,
+                        3
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Byte": "1",
+                        "X-Double": "1.1",
+                        "X-Float": "1.1",
+                        "X-Integer": "123",
+                        "X-IntegerList": "1, 2, 3",
+                        "X-Long": "123",
+                        "X-Short": "123"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "InputAndOutputWithBooleanHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with boolean header bindings",
+                "result": {
+                    "headerTrueBool": true,
+                    "headerFalseBool": false,
+                    "headerBooleanList": [
+                        true,
+                        false,
+                        true
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Boolean1": "true",
+                        "X-Boolean2": "false",
+                        "X-BooleanList": "true, false, true"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "InputAndOutputWithTimestampHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with timestamp header bindings",
+                "result": {
+                    "headerTimestampList": [
+                        1576540098,
+                        1576540098
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-TimestampList": "Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "InputAndOutputWithEnumHeaders",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Tests responses with enum header bindings",
+                "result": {
+                    "headerEnum": "Foo",
+                    "headerEnumList": [
+                        "Foo",
+                        "Bar",
+                        "Baz"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Enum": "Foo",
+                        "X-EnumList": "Foo, Bar, Baz"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsNaNFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling NaN float header values.",
+                "result": {
+                    "headerFloat": "NaN",
+                    "headerDouble": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "NaN",
+                        "X-Float": "NaN"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling Infinity float header values.",
+                "result": {
+                    "headerFloat": "Infinity",
+                    "headerDouble": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "Infinity",
+                        "X-Float": "Infinity"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatHeaderOutputs",
+                "given": {
+                    "name": "InputAndOutputWithHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/InputAndOutputWithHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "InputAndOutputWithHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there is no input or output payload but there are HTTP header bindings.</p>"
+                },
+                "description": "Supports handling -Infinity float header values.",
+                "result": {
+                    "headerFloat": "-Infinity",
+                    "headerDouble": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-Double": "-Infinity",
+                        "X-Float": "-Infinity"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NestedXmlMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NestedXmlMapsResponse": {
+                "type": "structure",
+                "members": {
+                    "nestedMap": {
+                        "shape": "NestedMap"
+                    },
+                    "flatNestedMap": {
+                        "shape": "NestedMap",
+                        "flattened": true
+                    }
+                }
+            },
+            "NestedMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnumMap"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "NestedXmlMapResponse",
+                "given": {
+                    "name": "NestedXmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NestedXmlMapsResponse"
+                    }
+                },
+                "description": "Tests responses with nested maps.",
+                "result": {
+                    "nestedMap": {
+                        "foo": {
+                            "bar": "Bar"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<NestedXmlMapsResponse>\n    <nestedMap>\n        <entry>\n            <key>foo</key>\n            <value>\n                <entry>\n                    <key>bar</key>\n                    <value>Bar</value>\n                </entry>\n            </value>\n        </entry>\n    </nestedMap>\n</NestedXmlMapsResponse>"
+                }
+            },
+            {
+                "id": "FlatNestedXmlMapResponse",
+                "given": {
+                    "name": "NestedXmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NestedXmlMapsResponse"
+                    }
+                },
+                "description": "Tests responses with nested flat maps. Since maps can only be\nflattened when they're structure members, only the outer map is flat.",
+                "result": {
+                    "flatNestedMap": {
+                        "foo": {
+                            "bar": "Bar"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<NestedXmlMapsResponse>\n    <flatNestedMap>\n        <key>foo</key>\n        <value>\n            <entry>\n                <key>bar</key>\n                <value>Bar</value>\n            </entry>\n        </value>\n    </flatNestedMap>\n</NestedXmlMapsResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NestedXmlMapWithXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NestedXmlMapWithXmlNameInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nestedXmlMapWithXmlNameMap": {
+                        "shape": "NestedXmlMapWithXmlNameMap"
+                    }
+                }
+            },
+            "NestedXmlMapWithXmlNameMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "OuterKey"
+                },
+                "value": {
+                    "shape": "NestedXmlMapWithXmlNameInnerMap"
+                }
+            },
+            "NestedXmlMapWithXmlNameInnerMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "InnerKey"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "InnerValue"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "NestedXmlMapWithXmlNameDeserializes",
+                "given": {
+                    "name": "NestedXmlMapWithXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NestedXmlMapWithXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NestedXmlMapWithXmlNameInputOutput"
+                    },
+                    "documentation": "<p>Nested Xml Maps with key/values with @xmlName</p>"
+                },
+                "description": "Serializes nested XML maps in responses that have xmlName on members",
+                "result": {
+                    "nestedXmlMapWithXmlNameMap": {
+                        "foo": {
+                            "bar": "Baz",
+                            "fizz": "Buzz"
+                        },
+                        "qux": {
+                            "foobar": "Bar",
+                            "fizzbuzz": "Buzz"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "    <NestedXmlMapWithXmlNameInputOutput>\n        <nestedXmlMapWithXmlNameMap>\n            <entry>\n                <OuterKey>foo</OuterKey>\n                <value>\n                    <entry>\n                        <InnerKey>bar</InnerKey>\n                        <InnerValue>Baz</InnerValue>\n                    </entry>\n                    <entry>\n                        <InnerKey>fizz</InnerKey>\n                        <InnerValue>Buzz</InnerValue>\n                    </entry>\n                </value>\n            </entry>\n            <entry>\n                <OuterKey>qux</OuterKey>\n                <value>\n                    <entry>\n                        <InnerKey>foobar</InnerKey>\n                        <InnerValue>Bar</InnerValue>\n                    </entry>\n                    <entry>\n                        <InnerKey>fizzbuzz</InnerKey>\n                        <InnerValue>Buzz</InnerValue>\n                    </entry>\n                </value>\n            </entry>\n        </nestedXmlMapWithXmlNameMap>\n    </NestedXmlMapWithXmlNameInputOutput>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndNoOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "NoInputAndNoOutput",
+                "given": {
+                    "name": "NoInputAndNoOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndNoOutput",
+                        "responseCode": 200
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input or output. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "No output serializes no payload",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputAndOutput operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "NoInputAndOutputOutput": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "NoInputAndOutput",
+                "given": {
+                    "name": "NoInputAndOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/NoInputAndOutputOutput",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "NoInputAndOutputOutput"
+                    },
+                    "documentation": "<p>The example tests how requests and responses are serialized when there's no request or response payload because the operation has no input and the output is empty. While this should be rare, code generators must support this.</p>"
+                },
+                "description": "Empty output serializes no payload",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "RecursiveShapesResponse": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/RecursiveShapes",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "RecursiveShapesResponse"
+                    },
+                    "documentation": "<p>Recursive shapes</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes recursive structures",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<RecursiveShapesResponse>\n    <nested>\n        <foo>Foo1</foo>\n        <nested>\n            <bar>Bar1</bar>\n            <recursiveMember>\n                <foo>Foo2</foo>\n                <nested>\n                    <bar>Bar2</bar>\n                </nested>\n            </recursiveMember>\n        </nested>\n    </nested>\n</RecursiveShapesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "SimpleScalarPropertiesResponse": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "location": "header",
+                        "locationName": "X-Foo"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double",
+                        "locationName": "DoubleDribble"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "SimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "string",
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 1,
+                    "shortValue": 2,
+                    "integerValue": 3,
+                    "longValue": 4,
+                    "floatValue": 5.5,
+                    "doubleValue": 6.5
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <stringValue>string</stringValue>\n    <trueBooleanValue>true</trueBooleanValue>\n    <falseBooleanValue>false</falseBooleanValue>\n    <byteValue>1</byteValue>\n    <shortValue>2</shortValue>\n    <integerValue>3</integerValue>\n    <longValue>4</longValue>\n    <floatValue>5.5</floatValue>\n    <DoubleDribble>6.5</DoubleDribble>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesComplexEscapes",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string with escaping.\n\nThis validates the three escape types: literal, decimal and hexadecimal. It also validates that unescaping properly\nhandles the case where unescaping an & produces a newly formed escape sequence (this should not be re-unescaped).\n\nServers may produce different output, this test is designed different unescapes clients must handle\n",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "escaped data: &lt;\r\n"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <stringValue>escaped data: &amp;lt;&#xD;&#10;</stringValue>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesWithEscapedCharacter",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string with escaping",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "<string>"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <stringValue>&lt;string&gt;</stringValue>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesWithXMLPreamble",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties with xml preamble, comments and CDATA",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "string"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n<SimpleScalarPropertiesResponse>\n    <![CDATA[characters representing CDATA]]>\n    <stringValue>string</stringValue>\n    <!--xml comment-->\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesWithWhiteSpace",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string containing white space",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": " string with white    space "
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n<SimpleScalarPropertiesResponse>\n    <stringValue> string with white    space </stringValue>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "SimpleScalarPropertiesPureWhiteSpace",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes string containing white space",
+                "result": {
+                    "foo": "Foo",
+                    "stringValue": "  "
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml",
+                        "X-Foo": "Foo"
+                    },
+                    "body": "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n<SimpleScalarPropertiesResponse>\n    <stringValue>  </stringValue>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "RestXmlSupportsNaNFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "floatValue": "NaN",
+                    "doubleValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <floatValue>NaN</floatValue>\n    <DoubleDribble>NaN</DoubleDribble>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "RestXmlSupportsInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "floatValue": "Infinity",
+                    "doubleValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <floatValue>Infinity</floatValue>\n    <DoubleDribble>Infinity</DoubleDribble>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            },
+            {
+                "id": "RestXmlSupportsNegativeInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/SimpleScalarProperties",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "SimpleScalarPropertiesResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Supports handling -Infinity float values.",
+                "result": {
+                    "floatValue": "-Infinity",
+                    "doubleValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<SimpleScalarPropertiesResponse>\n    <floatValue>-Infinity</floatValue>\n    <DoubleDribble>-Infinity</DoubleDribble>\n</SimpleScalarPropertiesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for TimestampFormatHeaders operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "TimestampFormatHeadersIO": {
+                "type": "structure",
+                "members": {
+                    "memberEpochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds",
+                        "location": "header",
+                        "locationName": "X-memberEpochSeconds"
+                    },
+                    "memberHttpDate": {
+                        "shape": "SyntheticTimestamp_http_date",
+                        "location": "header",
+                        "locationName": "X-memberHttpDate"
+                    },
+                    "memberDateTime": {
+                        "shape": "SyntheticTimestamp_date_time",
+                        "location": "header",
+                        "locationName": "X-memberDateTime"
+                    },
+                    "defaultFormat": {
+                        "shape": "Timestamp",
+                        "location": "header",
+                        "locationName": "X-defaultFormat"
+                    },
+                    "targetEpochSeconds": {
+                        "shape": "EpochSeconds",
+                        "location": "header",
+                        "locationName": "X-targetEpochSeconds"
+                    },
+                    "targetHttpDate": {
+                        "shape": "HttpDate",
+                        "location": "header",
+                        "locationName": "X-targetHttpDate"
+                    },
+                    "targetDateTime": {
+                        "shape": "DateTime",
+                        "location": "header",
+                        "locationName": "X-targetDateTime"
+                    }
+                }
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "TimestampFormatHeaders",
+                "given": {
+                    "name": "TimestampFormatHeaders",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/TimestampFormatHeaders",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "TimestampFormatHeadersIO"
+                    },
+                    "documentation": "<p>The example tests how timestamp request and response headers are serialized.</p>"
+                },
+                "description": "Tests how timestamp response headers are serialized",
+                "result": {
+                    "memberEpochSeconds": 1576540098,
+                    "memberHttpDate": 1576540098,
+                    "memberDateTime": 1576540098,
+                    "defaultFormat": 1576540098,
+                    "targetEpochSeconds": 1576540098,
+                    "targetHttpDate": 1576540098,
+                    "targetDateTime": 1576540098
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "X-defaultFormat": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-memberDateTime": "2019-12-16T23:48:18Z",
+                        "X-memberEpochSeconds": "1576540098",
+                        "X-memberHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT",
+                        "X-targetDateTime": "2019-12-16T23:48:18Z",
+                        "X-targetEpochSeconds": "1576540098",
+                        "X-targetHttpDate": "Mon, 16 Dec 2019 23:48:18 GMT"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlAttributes operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlAttributesResponse": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "attr": {
+                        "shape": "String",
+                        "locationName": "test",
+                        "xmlAttribute": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlAttributes",
+                "given": {
+                    "name": "XmlAttributes",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlAttributes",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlAttributesResponse"
+                    },
+                    "documentation": "<p>This example serializes an XML attributes on synthesized document.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "foo": "hi",
+                    "attr": "test"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlAttributesResponse test=\"test\">\n    <foo>hi</foo>\n</XmlAttributesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlAttributesOnPayload operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlAttributesOnPayloadResponse": {
+                "type": "structure",
+                "members": {
+                    "payload": {
+                        "shape": "XmlAttributesPayloadResponse"
+                    }
+                },
+                "payload": "payload"
+            },
+            "XmlAttributesPayloadResponse": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "attr": {
+                        "shape": "String",
+                        "locationName": "test",
+                        "xmlAttribute": true
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlAttributesOnPayload",
+                "given": {
+                    "name": "XmlAttributesOnPayload",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlAttributesOnPayload",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlAttributesOnPayloadResponse"
+                    },
+                    "documentation": "<p>This example serializes an XML attributes on a document targeted by httpPayload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "payload": {
+                        "foo": "hi",
+                        "attr": "test"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlAttributesPayloadResponse test=\"test\">\n    <foo>hi</foo>\n</XmlAttributesPayloadResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlBlobs operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlBlobsResponse": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlBlobs",
+                "given": {
+                    "name": "XmlBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlBlobs",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlBlobsResponse"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Blobs are base64 encoded",
+                "result": {
+                    "data": "value"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlBlobsResponse>\n    <data>dmFsdWU=</data>\n</XmlBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyBlobs operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyBlobsResponse": {
+                "type": "structure",
+                "members": {
+                    "data": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlEmptyBlobs",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyBlobsResponse"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Empty blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyBlobsResponse>\n    <data></data>\n</XmlEmptyBlobsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlEmptySelfClosedBlobs",
+                "given": {
+                    "name": "XmlEmptyBlobs",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlEmptyBlobs",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyBlobsResponse"
+                    },
+                    "documentation": "<p>Blobs are base64 encoded</p>"
+                },
+                "description": "Empty self closed blobs are deserialized as empty string",
+                "result": {
+                    "data": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyBlobsResponse>\n    <data/>\n</XmlEmptyBlobsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyLists operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyListsResponse": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    },
+                    "flattenedStructureList": {
+                        "shape": "StructureList",
+                        "flattened": true
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyLists",
+                "given": {
+                    "name": "XmlEmptyLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEmptyLists",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyListsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Deserializes Empty XML lists",
+                "result": {
+                    "stringList": [],
+                    "stringSet": []
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyListsResponse>\n        <stringList/>\n        <stringSet></stringSet>\n</XmlEmptyListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyMapsResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyMaps",
+                "given": {
+                    "name": "XmlEmptyMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlEmptyMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyMapsResponse"
+                    }
+                },
+                "description": "Deserializes Empty XML maps",
+                "result": {
+                    "myMap": {}
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyMapsResponse>\n    <myMap></myMap>\n</XmlEmptyMapsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlEmptySelfClosedMaps",
+                "given": {
+                    "name": "XmlEmptyMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlEmptyMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyMapsResponse"
+                    }
+                },
+                "description": "Deserializes Empty Self-closed XML maps",
+                "result": {
+                    "myMap": {}
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyMapsResponse>\n    <myMap/>\n</XmlEmptyMapsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEmptyStrings operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEmptyStringsResponse": {
+                "type": "structure",
+                "members": {
+                    "emptyString": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEmptyStrings",
+                "given": {
+                    "name": "XmlEmptyStrings",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEmptyStrings",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyStringsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Deserializes xml empty strings",
+                "result": {
+                    "emptyString": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyStringsResponse>\n    <emptyString></emptyString>\n</XmlEmptyStringsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlEmptySelfClosedStrings",
+                "given": {
+                    "name": "XmlEmptyStrings",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEmptyStrings",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEmptyStringsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Empty self closed string are deserialized as empty string",
+                "result": {
+                    "emptyString": ""
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEmptyStringsResponse>\n    <emptyString/>\n</XmlEmptyStringsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlEnums operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlEnumsResponse": {
+                "type": "structure",
+                "members": {
+                    "fooEnum1": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum2": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnum3": {
+                        "shape": "FooEnum"
+                    },
+                    "fooEnumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "fooEnumSet": {
+                        "shape": "FooEnumSet"
+                    },
+                    "fooEnumMap": {
+                        "shape": "FooEnumMap"
+                    }
+                }
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "FooEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "FooEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlEnums",
+                "given": {
+                    "name": "XmlEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlEnums",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlEnumsResponse"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "fooEnum1": "Foo",
+                    "fooEnum2": "0",
+                    "fooEnum3": "1",
+                    "fooEnumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumSet": [
+                        "Foo",
+                        "0"
+                    ],
+                    "fooEnumMap": {
+                        "hi": "Foo",
+                        "zero": "0"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlEnumsResponse>\n    <fooEnum1>Foo</fooEnum1>\n    <fooEnum2>0</fooEnum2>\n    <fooEnum3>1</fooEnum3>\n    <fooEnumList>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumList>\n    <fooEnumSet>\n        <member>Foo</member>\n        <member>0</member>\n    </fooEnumSet>\n    <fooEnumMap>\n        <entry>\n            <key>hi</key>\n            <value>Foo</value>\n        </entry>\n        <entry>\n            <key>zero</key>\n            <value>0</value>\n        </entry>\n    </fooEnumMap>\n</XmlEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlIntEnums operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlIntEnumsResponse": {
+                "type": "structure",
+                "members": {
+                    "intEnum1": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum2": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnum3": {
+                        "shape": "IntegerEnum"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "intEnumSet": {
+                        "shape": "IntegerEnumSet"
+                    },
+                    "intEnumMap": {
+                        "shape": "IntegerEnumMap"
+                    }
+                }
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumSet": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "IntegerEnumMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlIntEnums",
+                "given": {
+                    "name": "XmlIntEnums",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlIntEnums",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlIntEnumsResponse"
+                    },
+                    "documentation": "<p>This example serializes enums as top level properties, in lists, sets, and maps.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "intEnum1": 1,
+                    "intEnum2": 2,
+                    "intEnum3": 3,
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "intEnumSet": [
+                        1,
+                        2
+                    ],
+                    "intEnumMap": {
+                        "a": 1,
+                        "b": 2
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlIntEnumsResponse>\n    <intEnum1>1</intEnum1>\n    <intEnum2>2</intEnum2>\n    <intEnum3>3</intEnum3>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <intEnumSet>\n        <member>1</member>\n        <member>2</member>\n    </intEnumSet>\n    <intEnumMap>\n        <entry>\n            <key>a</key>\n            <value>1</value>\n        </entry>\n        <entry>\n            <key>b</key>\n            <value>2</value>\n        </entry>\n    </intEnumMap>\n</XmlIntEnumsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlLists operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlListsResponse": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "renamedListMembers": {
+                        "shape": "RenamedListMembers",
+                        "locationName": "renamed"
+                    },
+                    "flattenedList": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true
+                    },
+                    "flattenedList2": {
+                        "shape": "RenamedListMembers",
+                        "flattened": true,
+                        "locationName": "customName"
+                    },
+                    "flattenedListWithMemberNamespace": {
+                        "shape": "ListWithMemberNamespace",
+                        "flattened": true
+                    },
+                    "flattenedListWithNamespace": {
+                        "shape": "ListWithNamespace",
+                        "flattened": true
+                    },
+                    "structureList": {
+                        "shape": "StructureList",
+                        "locationName": "myStructureList"
+                    },
+                    "flattenedStructureList": {
+                        "shape": "StructureList",
+                        "flattened": true
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "RenamedListMembers": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "locationName": "item"
+                }
+            },
+            "ListWithMemberNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "https://xml-member.example.com"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "ListWithNamespace": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                },
+                "xmlNamespace": "https://xml-list.example.com"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember",
+                    "locationName": "item"
+                }
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String",
+                        "locationName": "value"
+                    },
+                    "b": {
+                        "shape": "String",
+                        "locationName": "other"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlLists",
+                "given": {
+                    "name": "XmlLists",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlLists",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlListsResponse"
+                    },
+                    "documentation": "<p>This test case serializes XML lists for the following cases for both input and output:</p> <ol> <li>Normal XML lists.</li> <li>Normal XML sets.</li> <li>XML lists of lists.</li> <li>XML lists with @xmlName on its members</li> <li>Flattened XML lists.</li> <li>Flattened XML lists with @xmlName.</li> <li>Flattened XML lists with @xmlNamespace.</li> <li>Lists of structures.</li> <li>Flattened XML list of structures</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Tests for XML list serialization",
+                "result": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "renamedListMembers": [
+                        "foo",
+                        "bar"
+                    ],
+                    "flattenedList": [
+                        "hi",
+                        "bye"
+                    ],
+                    "flattenedList2": [
+                        "yep",
+                        "nope"
+                    ],
+                    "flattenedListWithMemberNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "flattenedListWithNamespace": [
+                        "a",
+                        "b"
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ],
+                    "flattenedStructureList": [
+                        {
+                            "a": "5",
+                            "b": "6"
+                        },
+                        {
+                            "a": "7",
+                            "b": "8"
+                        }
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlListsResponse>\n    <stringList>\n        <member>foo</member>\n        <member>bar</member>\n    </stringList>\n    <stringSet>\n        <member>foo</member>\n        <member>bar</member>\n    </stringSet>\n    <integerList>\n        <member>1</member>\n        <member>2</member>\n    </integerList>\n    <booleanList>\n        <member>true</member>\n        <member>false</member>\n    </booleanList>\n    <timestampList>\n        <member>2014-04-29T18:30:38Z</member>\n        <member>2014-04-29T18:30:38Z</member>\n    </timestampList>\n    <enumList>\n        <member>Foo</member>\n        <member>0</member>\n    </enumList>\n    <intEnumList>\n        <member>1</member>\n        <member>2</member>\n    </intEnumList>\n    <nestedStringList>\n        <member>\n            <member>foo</member>\n            <member>bar</member>\n        </member>\n        <member>\n            <member>baz</member>\n            <member>qux</member>\n        </member>\n    </nestedStringList>\n    <renamed>\n        <item>foo</item>\n        <item>bar</item>\n    </renamed>\n    <flattenedList>hi</flattenedList>\n    <flattenedList>bye</flattenedList>\n    <customName>yep</customName>\n    <customName>nope</customName>\n    <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">a</flattenedListWithMemberNamespace>\n    <flattenedListWithMemberNamespace xmlns=\"https://xml-member.example.com\">b</flattenedListWithMemberNamespace>\n    <flattenedListWithNamespace>a</flattenedListWithNamespace>\n    <flattenedListWithNamespace>b</flattenedListWithNamespace>\n    <myStructureList>\n        <item>\n            <value>1</value>\n            <other>2</other>\n        </item>\n        <item>\n            <value>3</value>\n            <other>4</other>\n        </item>\n    </myStructureList>\n    <flattenedStructureList>\n        <value>5</value>\n        <other>6</other>\n    </flattenedStructureList>\n    <flattenedStructureList>\n        <value>7</value>\n        <other>8</other>\n    </flattenedStructureList>\n</XmlListsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMaps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapsResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlMaps",
+                "given": {
+                    "name": "XmlMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMaps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlMapsResponse"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Tests for XML map serialization",
+                "result": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlMapsResponse>\n    <myMap>\n        <entry>\n            <key>foo</key>\n            <value>\n                <hi>there</hi>\n            </value>\n        </entry>\n        <entry>\n            <key>baz</key>\n            <value>\n                <hi>bye</hi>\n            </value>\n        </entry>\n    </myMap>\n</XmlMapsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMapsXmlName operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapsXmlNameResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapsXmlNameInputOutputMap"
+                    }
+                }
+            },
+            "XmlMapsXmlNameInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "Attribute"
+                },
+                "value": {
+                    "shape": "GreetingStruct",
+                    "locationName": "Setting"
+                }
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlMapsXmlName",
+                "given": {
+                    "name": "XmlMapsXmlName",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMapsXmlName",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlMapsXmlNameResponse"
+                    }
+                },
+                "description": "Serializes XML lists",
+                "result": {
+                    "myMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlMapsXmlNameResponse>\n    <myMap>\n        <entry>\n            <Attribute>foo</Attribute>\n            <Setting>\n                <hi>there</hi>\n            </Setting>\n        </entry>\n        <entry>\n            <Attribute>baz</Attribute>\n            <Setting>\n                <hi>bye</hi>\n            </Setting>\n        </entry>\n    </myMap>\n</XmlMapsXmlNameResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlMapWithXmlNamespace operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlMapWithXmlNamespaceResponse": {
+                "type": "structure",
+                "members": {
+                    "myMap": {
+                        "shape": "XmlMapWithXmlNamespaceInputOutputMap",
+                        "locationName": "KVP",
+                        "xmlNamespace": "https://the-member.example.com"
+                    }
+                }
+            },
+            "XmlMapWithXmlNamespaceInputOutputMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String",
+                    "locationName": "K",
+                    "xmlNamespace": "https://the-key.example.com"
+                },
+                "value": {
+                    "shape": "String",
+                    "locationName": "V",
+                    "xmlNamespace": "https://the-value.example.com"
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RestXmlXmlMapWithXmlNamespace",
+                "given": {
+                    "name": "XmlMapWithXmlNamespace",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlMapWithXmlNamespace",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlMapWithXmlNamespaceResponse"
+                    },
+                    "documentation": "<p>Maps with @xmlNamespace and @xmlName</p>"
+                },
+                "description": "Serializes XML maps in responses that have xmlNamespace and xmlName on members",
+                "result": {
+                    "myMap": {
+                        "a": "A",
+                        "b": "B"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlMapWithXmlNamespaceResponse>\n    <KVP xmlns=\"https://the-member.example.com\">\n        <entry>\n            <K xmlns=\"https://the-key.example.com\">a</K>\n            <V xmlns=\"https://the-value.example.com\">A</V>\n        </entry>\n        <entry>\n            <K xmlns=\"https://the-key.example.com\">b</K>\n            <V xmlns=\"https://the-value.example.com\">B</V>\n        </entry>\n    </KVP>\n</XmlMapWithXmlNamespaceResponse>"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlNamespaces operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlNamespacesResponse": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "XmlNamespaceNested"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "XmlNamespaceNested": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String",
+                        "xmlNamespace": {
+                            "prefix": "baz",
+                            "uri": "http://baz.com"
+                        }
+                    },
+                    "values": {
+                        "shape": "XmlNamespacedList",
+                        "xmlNamespace": "http://qux.com"
+                    }
+                },
+                "xmlNamespace": "http://foo.com"
+            },
+            "String": {
+                "type": "string"
+            },
+            "XmlNamespacedList": {
+                "type": "list",
+                "member": {
+                    "shape": "String",
+                    "xmlNamespace": "http://bux.com"
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlNamespaces",
+                "given": {
+                    "name": "XmlNamespaces",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlNamespaces",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlNamespacesResponse"
+                    }
+                },
+                "description": "Serializes XML namespaces",
+                "result": {
+                    "nested": {
+                        "foo": "Foo",
+                        "values": [
+                            "Bar",
+                            "Baz"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlNamespacesResponse xmlns=\"http://foo.com\">\n    <nested xmlns=\"http://foo.com\">\n        <foo xmlns:baz=\"http://baz.com\">Foo</foo>\n        <values xmlns=\"http://qux.com\">\n            <member xmlns=\"http://bux.com\">Bar</member>\n            <member xmlns=\"http://bux.com\">Baz</member>\n        </values>\n    </nested>\n</XmlNamespacesResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlTimestamps operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlTimestampsResponse": {
+                "type": "structure",
+                "members": {
+                    "normal": {
+                        "shape": "Timestamp"
+                    },
+                    "dateTime": {
+                        "shape": "SyntheticTimestamp_date_time"
+                    },
+                    "dateTimeOnTarget": {
+                        "shape": "DateTime"
+                    },
+                    "epochSeconds": {
+                        "shape": "SyntheticTimestamp_epoch_seconds"
+                    },
+                    "epochSecondsOnTarget": {
+                        "shape": "EpochSeconds"
+                    },
+                    "httpDate": {
+                        "shape": "SyntheticTimestamp_http_date"
+                    },
+                    "httpDateOnTarget": {
+                        "shape": "HttpDate"
+                    }
+                }
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "SyntheticTimestamp_date_time": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            },
+            "SyntheticTimestamp_epoch_seconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "EpochSeconds": {
+                "type": "timestamp",
+                "timestampFormat": "unixTimestamp"
+            },
+            "SyntheticTimestamp_http_date": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            },
+            "HttpDate": {
+                "type": "timestamp",
+                "timestampFormat": "rfc822"
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlTimestamps",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Tests how normal timestamps are serialized",
+                "result": {
+                    "normal": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <normal>2014-04-29T18:30:38Z</normal>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithDateTimeFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time works like normal timestamps",
+                "result": {
+                    "dateTime": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <dateTime>2014-04-29T18:30:38Z</dateTime>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithDateTimeOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of date-time on the target shape works like normal timestamps",
+                "result": {
+                    "dateTimeOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <dateTimeOnTarget>2014-04-29T18:30:38Z</dateTimeOnTarget>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithEpochSecondsFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds works",
+                "result": {
+                    "epochSeconds": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <epochSeconds>1398796238</epochSeconds>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithEpochSecondsOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of epoch-seconds on the target shape works",
+                "result": {
+                    "epochSecondsOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <epochSecondsOnTarget>1398796238</epochSecondsOnTarget>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithHttpDateFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date works",
+                "result": {
+                    "httpDate": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <httpDate>Tue, 29 Apr 2014 18:30:38 GMT</httpDate>\n</XmlTimestampsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlTimestampsWithHttpDateOnTargetFormat",
+                "given": {
+                    "name": "XmlTimestamps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/XmlTimestamps",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlTimestampsResponse"
+                    },
+                    "documentation": "<p>This tests how timestamps are serialized, including using the default format of date-time and various @timestampFormat trait values.</p>"
+                },
+                "description": "Ensures that the timestampFormat of http-date on the target shape works",
+                "result": {
+                    "httpDateOnTarget": 1398796238
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlTimestampsResponse>\n    <httpDateOnTarget>Tue, 29 Apr 2014 18:30:38 GMT</httpDateOnTarget>\n</XmlTimestampsResponse>\n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for XmlUnions operation",
+        "metadata": {
+            "protocol": "rest-xml",
+            "protocols": [
+                "rest-xml"
+            ],
+            "apiVersion": "2019-12-16"
+        },
+        "shapes": {
+            "XmlUnionsResponse": {
+                "type": "structure",
+                "members": {
+                    "unionValue": {
+                        "shape": "XmlUnionShape"
+                    }
+                }
+            },
+            "XmlUnionShape": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    },
+                    "unionValue": {
+                        "shape": "XmlUnionShape"
+                    },
+                    "structValue": {
+                        "shape": "XmlNestedUnionStruct"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "XmlNestedUnionStruct": {
+                "type": "structure",
+                "members": {
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "booleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "XmlUnionsWithStructMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlUnionsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union struct member",
+                "result": {
+                    "unionValue": {
+                        "structValue": {
+                            "stringValue": "string",
+                            "booleanValue": true,
+                            "byteValue": 1,
+                            "shortValue": 2,
+                            "integerValue": 3,
+                            "longValue": 4,
+                            "floatValue": 5.5,
+                            "doubleValue": 6.5
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlUnionsResponse>\n    <unionValue>\n       <structValue>\n          <stringValue>string</stringValue>\n          <booleanValue>true</booleanValue>\n          <byteValue>1</byteValue>\n          <shortValue>2</shortValue>\n          <integerValue>3</integerValue>\n          <longValue>4</longValue>\n          <floatValue>5.5</floatValue>\n          <doubleValue>6.5</doubleValue>\n       </structValue>\n    </unionValue>\n</XmlUnionsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlUnionsWithStringMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlUnionsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union string member",
+                "result": {
+                    "unionValue": {
+                        "stringValue": "some string"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlUnionsResponse>\n   <unionValue>\n      <stringValue>some string</stringValue>\n   </unionValue>\n</XmlUnionsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlUnionsWithBooleanMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlUnionsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union boolean member",
+                "result": {
+                    "unionValue": {
+                        "booleanValue": true
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlUnionsResponse>\n   <unionValue>\n      <booleanValue>true</booleanValue>\n   </unionValue>\n</XmlUnionsResponse>\n"
+                }
+            },
+            {
+                "id": "XmlUnionsWithUnionMember",
+                "given": {
+                    "name": "XmlUnions",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/XmlUnions",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "XmlUnionsResponse"
+                    },
+                    "idempotent": true
+                },
+                "description": "Serializes union member",
+                "result": {
+                    "unionValue": {
+                        "unionValue": {
+                            "booleanValue": true
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/xml"
+                    },
+                    "body": "<XmlUnionsResponse>\n   <unionValue>\n      <unionValue>\n         <booleanValue>true</booleanValue>\n      </unionValue>\n   </unionValue>\n</XmlUnionsResponse>\n"
+                }
+            }
+        ]
+    }
 ]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-non-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-non-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-non-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-non-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1 @@
+[]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-query-compatible.json 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-query-compatible.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-query-compatible.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor-query-compatible.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,142 @@
+[
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2025-06-20",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblerpcv2protocol",
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "serviceFullName": "QueryCompatibleRpcV2Protocol",
+            "serviceId": "Query Compatible RpcV2 Protocol",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleRpcV2Protocol",
+            "targetPrefix": "QueryCompatibleRpcV2Protocol",
+            "uid": "query-compatible-rpcv2-protocol-2025-06-20"
+        },
+        "shapes": {
+            "NoCustomCodeError": {
+                "type": "structure",
+                "members": {
+                    "message": {
+                        "shape": "String"
+                    }
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryCompatibleRpcV2CborNoCustomCodeError",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "NoCustomCodeError"
+                        }
+                    ]
+                },
+                "description": "Parses simple RpcV2 CBOR errors with no query error code",
+                "errorCode": "NoCustomCodeError",
+                "errorMessage": "Hi",
+                "error": {
+                    "message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "uQACZl9fdHlwZXgtYXdzLnByb3RvY29sdGVzdHMucnBjdjJjYm9yI05vQ3VzdG9tQ29kZUVycm9yZ21lc3NhZ2ViSGk="
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for QueryCompatibleOperation operation",
+        "metadata": {
+            "apiVersion": "2025-06-20",
+            "auth": [
+                "aws.auth#sigv4"
+            ],
+            "awsQueryCompatible": {},
+            "endpointPrefix": "querycompatiblerpcv2protocol",
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "serviceFullName": "QueryCompatibleRpcV2Protocol",
+            "serviceId": "Query Compatible RpcV2 Protocol",
+            "signatureVersion": "v4",
+            "signingName": "QueryCompatibleRpcV2Protocol",
+            "targetPrefix": "QueryCompatibleRpcV2Protocol",
+            "uid": "query-compatible-rpcv2-protocol-2025-06-20"
+        },
+        "shapes": {
+            "CustomCodeError": {
+                "type": "structure",
+                "members": {
+                    "message": {
+                        "shape": "String"
+                    }
+                },
+                "error": {
+                    "code": "Customized",
+                    "httpStatusCode": 402,
+                    "senderFault": true
+                },
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "QueryCompatibleRpcV2CborCustomCodeError",
+                "given": {
+                    "name": "QueryCompatibleOperation",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "CustomCodeError"
+                        }
+                    ]
+                },
+                "description": "Parses simple RpcV2 CBOR errors with query error code",
+                "errorCode": "Customized",
+                "errorMessage": "Hi",
+                "error": {
+                    "message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor",
+                        "x-amzn-query-error": "Customized;Sender"
+                    },
+                    "body": "uQACZl9fdHlwZXgrYXdzLnByb3RvY29sdGVzdHMucnBjdjJjYm9yI0N1c3RvbUNvZGVFcnJvcmdtZXNzYWdlYkhp"
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor.json 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor.json
--- 2.23.6-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/output/smithy-rpc-v2-cbor.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,1620 @@
+[
+    {
+        "description": "Test cases for EmptyInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "EmptyStructure": {
+                "type": "structure",
+                "members": {}
+            }
+        },
+        "cases": [
+            {
+                "id": "empty_output",
+                "given": {
+                    "name": "EmptyInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "EmptyStructure"
+                    }
+                },
+                "description": "When output structure is empty we write CBOR equivalent of {}",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v/8="
+                }
+            },
+            {
+                "id": "empty_output_no_body",
+                "given": {
+                    "name": "EmptyInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "EmptyStructure"
+                    }
+                },
+                "description": "When output structure is empty the client should accept an empty body",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for Float16 operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "Float16Output": {
+                "type": "structure",
+                "members": {
+                    "value": {
+                        "shape": "Double"
+                    }
+                }
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborFloat16Inf",
+                "given": {
+                    "name": "Float16",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "Float16Output"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse float16 +Inf.",
+                "result": {
+                    "value": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWV2YWx1Zfl8AA=="
+                }
+            },
+            {
+                "id": "RpcV2CborFloat16NegInf",
+                "given": {
+                    "name": "Float16",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "Float16Output"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse float16 -Inf.",
+                "result": {
+                    "value": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWV2YWx1Zfn8AA=="
+                }
+            },
+            {
+                "id": "RpcV2CborFloat16LSBNaN",
+                "given": {
+                    "name": "Float16",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "Float16Output"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse float16 NaN with high LSB.",
+                "result": {
+                    "value": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWV2YWx1Zfl8AQ=="
+                }
+            },
+            {
+                "id": "RpcV2CborFloat16MSBNaN",
+                "given": {
+                    "name": "Float16",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "Float16Output"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse float16 NaN with high MSB.",
+                "result": {
+                    "value": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWV2YWx1Zfl+AA=="
+                }
+            },
+            {
+                "id": "RpcV2CborFloat16Subnormal",
+                "given": {
+                    "name": "Float16",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "Float16Output"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse a subnormal float16.",
+                "result": {
+                    "value": 4.76837158203125E-6
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWV2YWx1ZfkAUA=="
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for FractionalSeconds operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "FractionalSecondsOutput": {
+                "type": "structure",
+                "members": {
+                    "datetime": {
+                        "shape": "DateTime"
+                    }
+                }
+            },
+            "DateTime": {
+                "type": "timestamp",
+                "timestampFormat": "iso8601"
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborDateTimeWithFractionalSeconds",
+                "given": {
+                    "name": "FractionalSeconds",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "FractionalSecondsOutput"
+                    }
+                },
+                "description": "Ensures that clients can correctly parse timestamps with fractional seconds",
+                "result": {
+                    "datetime": 9.46845296123E8
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2hkYXRldGltZcH7Qcw32zgPvnf/"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "InvalidGreeting": {
+                "type": "structure",
+                "members": {
+                    "Message": {
+                        "shape": "String"
+                    }
+                },
+                "documentation": "<p>This error is thrown when an invalid greeting value is provided.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborInvalidGreetingError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "InvalidGreeting"
+                        }
+                    ]
+                },
+                "description": "Parses simple RpcV2 Cbor errors",
+                "errorCode": "InvalidGreeting",
+                "errorMessage": "Hi",
+                "error": {
+                    "Message": "Hi"
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2ZfX3R5cGV4LnNtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNJbnZhbGlkR3JlZXRpbmdnTWVzc2FnZWJIaf8="
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for GreetingWithErrors operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "ComplexError": {
+                "type": "structure",
+                "members": {
+                    "TopLevel": {
+                        "shape": "String"
+                    },
+                    "Nested": {
+                        "shape": "ComplexNestedErrorData"
+                    }
+                },
+                "documentation": "<p>This error is thrown when a request is invalid.</p>",
+                "exception": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "ComplexNestedErrorData": {
+                "type": "structure",
+                "members": {
+                    "Foo": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "description": "Parses a complex error with no message member",
+                "errorCode": "ComplexError",
+                "error": {
+                    "TopLevel": "Top level",
+                    "Nested": {
+                        "Foo": "bar"
+                    }
+                },
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2ZfX3R5cGV4K3NtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNDb21wbGV4RXJyb3JoVG9wTGV2ZWxpVG9wIGxldmVsZk5lc3RlZL9jRm9vY2Jhcv//"
+                }
+            },
+            {
+                "id": "RpcV2CborEmptyComplexError",
+                "given": {
+                    "name": "GreetingWithErrors",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "documentation": "<p>This operation has three possible return values:</p> <ol> <li>A successful response in the form of GreetingWithErrorsOutput</li> <li>An InvalidGreeting error.</li> <li>A ComplexError error.</li> </ol> <p>Implementations must be able to successfully take a response and properly deserialize successful and error responses.</p>",
+                    "idempotent": true,
+                    "errors": [
+                        {
+                            "shape": "ComplexError"
+                        }
+                    ]
+                },
+                "errorCode": "ComplexError",
+                "error": {},
+                "response": {
+                    "status_code": 400,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2ZfX3R5cGV4K3NtaXRoeS5wcm90b2NvbHRlc3RzLnJwY3YyQ2JvciNDb21wbGV4RXJyb3L/"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for NoInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {},
+        "cases": [
+            {
+                "id": "no_output",
+                "given": {
+                    "name": "NoInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "A `Content-Type` header should not be set if the response body is empty.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": ""
+                }
+            },
+            {
+                "id": "NoOutputClientAllowsEmptyCbor",
+                "given": {
+                    "name": "NoInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Clients should accept a CBOR empty struct if there is no output.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v/8="
+                }
+            },
+            {
+                "id": "NoOutputClientAllowsEmptyBody",
+                "given": {
+                    "name": "NoInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    }
+                },
+                "description": "Clients should accept an empty body if there is no output and\nshould not raise an error if the `Content-Type` header is set.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": ""
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for OptionalInputOutput operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "SimpleStructure": {
+                "type": "structure",
+                "members": {
+                    "value": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "optional_output",
+                "given": {
+                    "name": "OptionalInputOutput",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleStructure"
+                    }
+                },
+                "description": "When output is empty we write CBOR equivalent of {}",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v/8="
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RecursiveShapes operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RecursiveShapesInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            },
+            "RecursiveShapesInputOutputNested1": {
+                "type": "structure",
+                "members": {
+                    "foo": {
+                        "shape": "String"
+                    },
+                    "nested": {
+                        "shape": "RecursiveShapesInputOutputNested2"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "RecursiveShapesInputOutputNested2": {
+                "type": "structure",
+                "members": {
+                    "bar": {
+                        "shape": "String"
+                    },
+                    "recursiveMember": {
+                        "shape": "RecursiveShapesInputOutputNested1"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborRecursiveShapes",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RecursiveShapesInputOutput"
+                    }
+                },
+                "description": "Serializes recursive structures",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2ZuZXN0ZWS/Y2Zvb2RGb28xZm5lc3RlZL9jYmFyZEJhcjFvcmVjdXJzaXZlTWVtYmVyv2Nmb29kRm9vMmZuZXN0ZWS/Y2JhcmRCYXIy//////8="
+                }
+            },
+            {
+                "id": "RpcV2CborRecursiveShapesUsingDefiniteLength",
+                "given": {
+                    "name": "RecursiveShapes",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RecursiveShapesInputOutput"
+                    }
+                },
+                "description": "Deserializes recursive structures encoded using a map with definite length",
+                "result": {
+                    "nested": {
+                        "foo": "Foo1",
+                        "nested": {
+                            "bar": "Bar1",
+                            "recursiveMember": {
+                                "foo": "Foo2",
+                                "nested": {
+                                    "bar": "Bar2"
+                                }
+                            }
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWZuZXN0ZWSiY2Zvb2RGb28xZm5lc3RlZKJjYmFyZEJhcjFvcmVjdXJzaXZlTWVtYmVyomNmb29kRm9vMmZuZXN0ZWShY2JhcmRCYXIy"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RpcV2CborDenseMaps operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RpcV2CborDenseMapsInputOutput": {
+                "type": "structure",
+                "members": {
+                    "denseStructMap": {
+                        "shape": "DenseStructMap"
+                    },
+                    "denseNumberMap": {
+                        "shape": "DenseNumberMap"
+                    },
+                    "denseBooleanMap": {
+                        "shape": "DenseBooleanMap"
+                    },
+                    "denseStringMap": {
+                        "shape": "DenseStringMap"
+                    },
+                    "denseSetMap": {
+                        "shape": "DenseSetMap"
+                    }
+                }
+            },
+            "DenseStructMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "GreetingStruct"
+                }
+            },
+            "DenseNumberMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Integer"
+                }
+            },
+            "DenseBooleanMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "Boolean"
+                }
+            },
+            "DenseStringMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "String"
+                }
+            },
+            "DenseSetMap": {
+                "type": "map",
+                "key": {
+                    "shape": "String"
+                },
+                "value": {
+                    "shape": "StringSet"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "GreetingStruct": {
+                "type": "structure",
+                "members": {
+                    "hi": {
+                        "shape": "String"
+                    }
+                }
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborMaps",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Deserializes maps",
+                "result": {
+                    "denseStructMap": {
+                        "foo": {
+                            "hi": "there"
+                        },
+                        "baz": {
+                            "hi": "bye"
+                        }
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oW5kZW5zZVN0cnVjdE1hcKJjZm9voWJoaWV0aGVyZWNiYXqhYmhpY2J5ZQ=="
+                }
+            },
+            {
+                "id": "RpcV2CborDeserializesZeroValuesInMaps",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Ensure that 0 and false are sent over the wire in all maps and lists",
+                "result": {
+                    "denseNumberMap": {
+                        "x": 0
+                    },
+                    "denseBooleanMap": {
+                        "x": false
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "om5kZW5zZU51bWJlck1hcKFheABvZGVuc2VCb29sZWFuTWFwoWF49A=="
+                }
+            },
+            {
+                "id": "RpcV2CborDeserializesDenseSetMap",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "A response that contains a dense map of sets",
+                "result": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWtkZW5zZVNldE1hcKJheIBheYJhYWFi"
+                }
+            },
+            {
+                "id": "RpcV2CborDeserializesDenseSetMapAndSkipsNull",
+                "given": {
+                    "name": "RpcV2CborDenseMaps",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborDenseMapsInputOutput"
+                    },
+                    "documentation": "<p>The example tests basic map serialization.</p>"
+                },
+                "description": "Clients SHOULD tolerate seeing a null value in a dense map, and they SHOULD\ndrop the null key-value pair.",
+                "result": {
+                    "denseSetMap": {
+                        "x": [],
+                        "y": [
+                            "a",
+                            "b"
+                        ]
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWtkZW5zZVNldE1hcKNheIBheYJhYWFiYXr2"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for RpcV2CborLists operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "RpcV2CborListInputOutput": {
+                "type": "structure",
+                "members": {
+                    "stringList": {
+                        "shape": "StringList"
+                    },
+                    "stringSet": {
+                        "shape": "StringSet"
+                    },
+                    "integerList": {
+                        "shape": "IntegerList"
+                    },
+                    "booleanList": {
+                        "shape": "BooleanList"
+                    },
+                    "timestampList": {
+                        "shape": "TimestampList"
+                    },
+                    "enumList": {
+                        "shape": "FooEnumList"
+                    },
+                    "intEnumList": {
+                        "shape": "IntegerEnumList"
+                    },
+                    "nestedStringList": {
+                        "shape": "NestedStringList"
+                    },
+                    "structureList": {
+                        "shape": "StructureList"
+                    },
+                    "blobList": {
+                        "shape": "BlobList"
+                    }
+                }
+            },
+            "StringList": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "StringSet": {
+                "type": "list",
+                "member": {
+                    "shape": "String"
+                }
+            },
+            "IntegerList": {
+                "type": "list",
+                "member": {
+                    "shape": "Integer"
+                }
+            },
+            "BooleanList": {
+                "type": "list",
+                "member": {
+                    "shape": "Boolean"
+                }
+            },
+            "TimestampList": {
+                "type": "list",
+                "member": {
+                    "shape": "Timestamp"
+                }
+            },
+            "FooEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "FooEnum"
+                }
+            },
+            "IntegerEnumList": {
+                "type": "list",
+                "member": {
+                    "shape": "IntegerEnum"
+                }
+            },
+            "NestedStringList": {
+                "type": "list",
+                "member": {
+                    "shape": "StringList"
+                },
+                "documentation": "<p>A list of lists of strings.</p>"
+            },
+            "StructureList": {
+                "type": "list",
+                "member": {
+                    "shape": "StructureListMember"
+                }
+            },
+            "BlobList": {
+                "type": "list",
+                "member": {
+                    "shape": "Blob"
+                }
+            },
+            "Blob": {
+                "type": "blob"
+            },
+            "StructureListMember": {
+                "type": "structure",
+                "members": {
+                    "a": {
+                        "shape": "String"
+                    },
+                    "b": {
+                        "shape": "String"
+                    }
+                }
+            },
+            "String": {
+                "type": "string"
+            },
+            "IntegerEnum": {
+                "type": "integer",
+                "box": true
+            },
+            "FooEnum": {
+                "type": "string",
+                "enum": [
+                    "Foo",
+                    "Baz",
+                    "Bar",
+                    "1",
+                    "0"
+                ]
+            },
+            "Timestamp": {
+                "type": "timestamp"
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborLists",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes RpcV2 Cbor lists",
+                "result": {
+                    "stringList": [
+                        "foo",
+                        "bar"
+                    ],
+                    "stringSet": [
+                        "foo",
+                        "bar"
+                    ],
+                    "integerList": [
+                        1,
+                        2
+                    ],
+                    "booleanList": [
+                        true,
+                        false
+                    ],
+                    "timestampList": [
+                        1398796238,
+                        1398796238
+                    ],
+                    "enumList": [
+                        "Foo",
+                        "0"
+                    ],
+                    "intEnumList": [
+                        1,
+                        2
+                    ],
+                    "nestedStringList": [
+                        [
+                            "foo",
+                            "bar"
+                        ],
+                        [
+                            "baz",
+                            "qux"
+                        ]
+                    ],
+                    "structureList": [
+                        {
+                            "a": "1",
+                            "b": "2"
+                        },
+                        {
+                            "a": "3",
+                            "b": "4"
+                        }
+                    ],
+                    "blobList": [
+                        "foo",
+                        "bar"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2pzdHJpbmdMaXN0n2Nmb29jYmFy/2lzdHJpbmdTZXSfY2Zvb2NiYXL/a2ludGVnZXJMaXN0nwEC/2tib29sZWFuTGlzdJ/19P9tdGltZXN0YW1wTGlzdJ/B+0HU1/vzgAAAwftB1Nf784AAAP9oZW51bUxpc3SfY0Zvb2Ew/2tpbnRFbnVtTGlzdJ8BAv9wbmVzdGVkU3RyaW5nTGlzdJ+fY2Zvb2NiYXL/n2NiYXpjcXV4//9tc3RydWN0dXJlTGlzdJ+/YWFhMWFiYTL/v2FhYTNhYmE0//9oYmxvYkxpc3SfQ2Zvb0NiYXL//w=="
+                }
+            },
+            {
+                "id": "RpcV2CborListsEmpty",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Serializes empty RpcV2 Cbor lists",
+                "result": {
+                    "stringList": []
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2pzdHJpbmdMaXN0n///"
+                }
+            },
+            {
+                "id": "RpcV2CborIndefiniteStringInsideIndefiniteListCanDeserialize",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Can deserialize indefinite length text strings inside an indefinite length list",
+                "result": {
+                    "stringList": [
+                        "An example indefinite string, which will be chunked, on each comma",
+                        "Another example indefinite string with only one chunk",
+                        "This is a plain string"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2pzdHJpbmdMaXN0n394HUFuIGV4YW1wbGUgaW5kZWZpbml0ZSBzdHJpbmcsdyB3aGljaCB3aWxsIGJlIGNodW5rZWQsbiBvbiBlYWNoIGNvbW1h/394NUFub3RoZXIgZXhhbXBsZSBpbmRlZmluaXRlIHN0cmluZyB3aXRoIG9ubHkgb25lIGNodW5r/3ZUaGlzIGlzIGEgcGxhaW4gc3RyaW5n//8="
+                }
+            },
+            {
+                "id": "RpcV2CborIndefiniteStringInsideDefiniteListCanDeserialize",
+                "given": {
+                    "name": "RpcV2CborLists",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "RpcV2CborListInputOutput"
+                    },
+                    "documentation": "<p>This test case serializes JSON lists for the following cases for both input and output:</p> <ol> <li>Normal lists.</li> <li>Normal sets.</li> <li>Lists of lists.</li> <li>Lists of structures.</li> </ol>",
+                    "idempotent": true
+                },
+                "description": "Can deserialize indefinite length text strings inside a definite length list",
+                "result": {
+                    "stringList": [
+                        "An example indefinite string, which will be chunked, on each comma",
+                        "Another example indefinite string with only one chunk",
+                        "This is a plain string"
+                    ]
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "oWpzdHJpbmdMaXN0g394HUFuIGV4YW1wbGUgaW5kZWZpbml0ZSBzdHJpbmcsdyB3aGljaCB3aWxsIGJlIGNodW5rZWQsbiBvbiBlYWNoIGNvbW1h/394NUFub3RoZXIgZXhhbXBsZSBpbmRlZmluaXRlIHN0cmluZyB3aXRoIG9ubHkgb25lIGNodW5r/3ZUaGlzIGlzIGEgcGxhaW4gc3RyaW5n"
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for SimpleScalarProperties operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "SimpleScalarStructure": {
+                "type": "structure",
+                "members": {
+                    "trueBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "falseBooleanValue": {
+                        "shape": "Boolean"
+                    },
+                    "byteValue": {
+                        "shape": "Integer"
+                    },
+                    "doubleValue": {
+                        "shape": "Double"
+                    },
+                    "floatValue": {
+                        "shape": "Float"
+                    },
+                    "integerValue": {
+                        "shape": "Integer"
+                    },
+                    "longValue": {
+                        "shape": "Long"
+                    },
+                    "shortValue": {
+                        "shape": "Integer"
+                    },
+                    "stringValue": {
+                        "shape": "String"
+                    },
+                    "blobValue": {
+                        "shape": "Blob"
+                    }
+                }
+            },
+            "Boolean": {
+                "type": "boolean",
+                "box": true
+            },
+            "Integer": {
+                "type": "integer",
+                "box": true
+            },
+            "Double": {
+                "type": "double",
+                "box": true
+            },
+            "Float": {
+                "type": "float",
+                "box": true
+            },
+            "Long": {
+                "type": "long",
+                "box": true
+            },
+            "String": {
+                "type": "string"
+            },
+            "Blob": {
+                "type": "blob"
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborSimpleScalarProperties",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Serializes simple scalar properties",
+                "result": {
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 5,
+                    "doubleValue": 1.889,
+                    "floatValue": 7.625,
+                    "integerValue": 256,
+                    "shortValue": 9898,
+                    "stringValue": "simple",
+                    "blobValue": "foo"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v3B0cnVlQm9vbGVhblZhbHVl9XFmYWxzZUJvb2xlYW5WYWx1ZfRpYnl0ZVZhbHVlBWtkb3VibGVWYWx1Zfs//jlYEGJN02pmbG9hdFZhbHVl+kD0AABsaW50ZWdlclZhbHVlGQEAanNob3J0VmFsdWUZJqprc3RyaW5nVmFsdWVmc2ltcGxlaWJsb2JWYWx1ZUNmb2//"
+                }
+            },
+            {
+                "id": "RpcV2CborSimpleScalarPropertiesUsingDefiniteLength",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Deserializes simple scalar properties encoded using a map with definite length",
+                "result": {
+                    "trueBooleanValue": true,
+                    "falseBooleanValue": false,
+                    "byteValue": 5,
+                    "doubleValue": 1.889,
+                    "floatValue": 7.625,
+                    "integerValue": 256,
+                    "shortValue": 9898,
+                    "stringValue": "simple",
+                    "blobValue": "foo"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "qXB0cnVlQm9vbGVhblZhbHVl9XFmYWxzZUJvb2xlYW5WYWx1ZfRpYnl0ZVZhbHVlBWtkb3VibGVWYWx1Zfs//jlYEGJN02pmbG9hdFZhbHVl+kD0AABsaW50ZWdlclZhbHVlGQEAanNob3J0VmFsdWUZJqprc3RyaW5nVmFsdWVmc2ltcGxlaWJsb2JWYWx1ZUNmb28="
+                }
+            },
+            {
+                "id": "RpcV2CborClientDoesntDeserializeNullStructureValues",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "RpcV2 Cbor should not deserialize null structure values",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2tzdHJpbmdWYWx1Zfb/"
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsNaNFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling NaN float values.",
+                "result": {
+                    "doubleValue": "NaN",
+                    "floatValue": "NaN"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2tkb3VibGVWYWx1Zft/+AAAAAAAAGpmbG9hdFZhbHVl+n/AAAD/"
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling Infinity float values.",
+                "result": {
+                    "doubleValue": "Infinity",
+                    "floatValue": "Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2tkb3VibGVWYWx1Zft/8AAAAAAAAGpmbG9hdFZhbHVl+n+AAAD/"
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsNegativeInfinityFloatOutputs",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports handling Negative Infinity float values.",
+                "result": {
+                    "doubleValue": "-Infinity",
+                    "floatValue": "-Infinity"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2tkb3VibGVWYWx1Zfv/8AAAAAAAAGpmbG9hdFZhbHVl+v+AAAD/"
+                }
+            },
+            {
+                "id": "RpcV2CborSupportsUpcastingDataOnDeserialize",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "Supports upcasting from a smaller byte representation of the same data type.",
+                "result": {
+                    "doubleValue": 1.5,
+                    "floatValue": 7.625,
+                    "integerValue": 56,
+                    "longValue": 256,
+                    "shortValue": 10
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2tkb3VibGVWYWx1Zfk+AGpmbG9hdFZhbHVl+UegbGludGVnZXJWYWx1ZRg4aWxvbmdWYWx1ZRkBAGpzaG9ydFZhbHVlCv8="
+                }
+            },
+            {
+                "id": "RpcV2CborExtraFieldsInTheBodyShouldBeSkippedByClients",
+                "given": {
+                    "name": "SimpleScalarProperties",
+                    "http": {
+                        "method": "POST",
+                        "requestUri": "/"
+                    },
+                    "output": {
+                        "shape": "SimpleScalarStructure"
+                    }
+                },
+                "description": "The client should skip over additional fields that are not part of the structure. This allows a\nclient generated against an older Smithy model to be able to communicate with a server that is\ngenerated against a newer Smithy model.",
+                "result": {
+                    "byteValue": 5,
+                    "doubleValue": 1.889,
+                    "falseBooleanValue": false,
+                    "floatValue": 7.625,
+                    "integerValue": 256,
+                    "longValue": 9873,
+                    "shortValue": 9898,
+                    "stringValue": "simple",
+                    "trueBooleanValue": true,
+                    "blobValue": "foo"
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"
+                    },
+                    "body": "v2lieXRlVmFsdWUFa2RvdWJsZVZhbHVl+z/+OVgQYk3TcWZhbHNlQm9vbGVhblZhbHVl9GpmbG9hdFZhbHVl+kD0AABrZXh0cmFPYmplY3S/c2luZGVmaW5pdGVMZW5ndGhNYXC/a3dpdGhBbkFycmF5nwECA///cWRlZmluaXRlTGVuZ3RoTWFwo3J3aXRoQURlZmluaXRlQXJyYXmDAQIDeB1hbmRTb21lSW5kZWZpbml0ZUxlbmd0aFN0cmluZ3gfdGhhdCBoYXMsIGJlZW4gY2h1bmtlZCBvbiBjb21tYWxub3JtYWxTdHJpbmdjZm9vanNob3J0VmFsdWUZJw9uc29tZU90aGVyRmllbGR2dGhpcyBzaG91bGQgYmUgc2tpcHBlZP9saW50ZWdlclZhbHVlGQEAaWxvbmdWYWx1ZRkmkWpzaG9ydFZhbHVlGSaqa3N0cmluZ1ZhbHVlZnNpbXBsZXB0cnVlQm9vbGVhblZhbHVl9WlibG9iVmFsdWVDZm9v/w=="
+                }
+            }
+        ]
+    },
+    {
+        "description": "Test cases for HttpPayloadWithUnion operation",
+        "metadata": {
+            "protocol": "smithy-rpc-v2-cbor",
+            "protocols": [
+                "smithy-rpc-v2-cbor"
+            ],
+            "apiVersion": "2020-07-14",
+            "targetPrefix": "RpcV2Protocol"
+        },
+        "shapes": {
+            "HttpPayloadWithUnionInputOutput": {
+                "type": "structure",
+                "members": {
+                    "nested": {
+                        "shape": "UnionPayload"
+                    }
+                },
+                "payload": "nested"
+            },
+            "UnionPayload": {
+                "type": "structure",
+                "members": {
+                    "greeting": {
+                        "shape": "String"
+                    }
+                },
+                "union": true
+            },
+            "String": {
+                "type": "string"
+            }
+        },
+        "cases": [
+            {
+                "id": "RpcV2CborPayloadWithUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "Serializes a union in the payload.",
+                "result": {
+                    "nested": {
+                        "greeting": "hello"
+                    }
+                },
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Type": "application/cbor",
+                        "smithy-protocol": "rpc-v2-cbor"                    },
+                    "body": "oWZuZXN0ZWShaGdyZWV0aW5nZWhlbGxv"
+                }
+            },
+            {
+                "id": "RpcV2CborPayloadWithUnsetUnion",
+                "given": {
+                    "name": "HttpPayloadWithUnion",
+                    "http": {
+                        "method": "PUT",
+                        "requestUri": "/HttpPayloadWithUnion",
+                        "responseCode": 200
+                    },
+                    "output": {
+                        "shape": "HttpPayloadWithUnionInputOutput"
+                    },
+                    "documentation": "<p>This example serializes a union in the payload.</p>",
+                    "idempotent": true
+                },
+                "description": "No payload is sent if the union has no value.",
+                "result": {},
+                "response": {
+                    "status_code": 200,
+                    "headers": {
+                        "Content-Length": "0"
+                    },
+                    "body": "v2tkb3VibGVWYWx1Zfv/8AAAAAAAAGpmbG9hdFZhbHVl+v+AAAD/"
+                }
+            }
+        ]
+    }
+]
diff -pruN 2.23.6-1/tests/unit/botocore/protocols/protocol-tests-ignore-list.json 2.31.35-1/tests/unit/botocore/protocols/protocol-tests-ignore-list.json
--- 2.23.6-1/tests/unit/botocore/protocols/protocol-tests-ignore-list.json	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/protocols/protocol-tests-ignore-list.json	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,130 @@
+{
+  "general": {
+     "input": {
+      "suites": [
+        "Test cases for PutWithContentEncoding operation",
+        "Test cases for QueryIdempotencyTokenAutoFill operation",
+        "Test cases for HostWithPathOperation operation",
+        "Idempotency token auto fill"
+      ]
+    }
+  },
+  "protocols": {
+    "query" : {
+      "input": {
+        "cases": [
+          "QueryFlattenedListArgWithXmlName"
+        ]
+      },
+      "output": {
+        "cases": [
+          "QueryXmlLists",
+          "QueryComplexError"
+        ]
+      }
+    },
+    "ec2" : {
+      "input" : {
+        "cases": [
+          "Ec2QueryEndpointTraitWithHostLabel",
+          "Ec2Lists",
+          "Ec2TimestampsInput"
+        ]
+      },
+      "output": {
+        "cases": [
+          "Ec2XmlLists",
+          "Ec2ComplexError"
+        ]
+      }
+    },
+    "json" : {
+      "input": {
+        "cases": [
+          "AwsJson11StructuresDontSerializeNullValues"
+        ]
+      },
+      "output" : {
+        "cases": [
+          "AwsJson11FooErrorUsingXAmznErrorType",
+          "AwsJson11FooErrorUsingXAmznErrorTypeWithUri",
+          "AwsJson11FooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+          "AwsJson11FooErrorUsingCode",
+          "AwsJson11FooErrorUsingCodeAndNamespace",
+          "AwsJson11FooErrorUsingCodeUriAndNamespace"
+        ]
+      }
+    },
+    "json_1_0" : {
+      "output" : {
+        "cases": [
+          "AwsJson10FooErrorUsingXAmznErrorType",
+          "AwsJson10FooErrorUsingXAmznErrorTypeWithUri",
+          "AwsJson10FooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+          "AwsJson10FooErrorUsingCode",
+          "AwsJson10FooErrorUsingCodeAndNamespace",
+          "AwsJson10FooErrorUsingCodeUriAndNamespace"
+        ]
+      }
+    },
+    "rest-json" : {
+      "input" : {
+        "cases": [
+          "MediaTypeHeaderInputBase64",
+          "RestJsonHttpChecksumRequired",
+          "RestJsonNullAndEmptyHeaders",
+          "RestJsonQueryPrecedence",
+          "RestJsonHttpPayloadWithUnsetUnion",
+          "DocumentTypeAsPayloadInputString",
+          "DocumentTypeAsPayloadInput"
+        ]
+      },
+      "output" : {
+        "cases": [
+          "RestJsonFooErrorUsingXAmznErrorType",
+          "RestJsonFooErrorUsingXAmznErrorTypeWithUri",
+          "RestJsonFooErrorUsingXAmznErrorTypeWithUriAndNamespace",
+          "RestJsonHttpPayloadTraitsWithNoBlobBody",
+          "RestJsonHttpPayloadWithUnsetUnion",
+          "RestJsonInputAndOutputWithTimestampHeaders",
+          "RestJsonInputAndOutputWithQuotedStringHeaders",
+          "RestJsonDeserializesDenseSetMapAndSkipsNull",
+          "MediaTypeHeaderOutputBase64"
+        ]
+      }
+    },
+    "rest-xml": {
+      "input": {
+        "cases": [
+          "BodyWithXmlName",
+          "RestXmlHttpPayloadWithUnion",
+          "HttpPayloadWithXmlName",
+          "HttpPayloadWithXmlNamespace",
+          "HttpPayloadWithXmlNamespaceAndPrefix",
+          "XmlAttributesOnPayload",
+          "NullAndEmptyHeaders",
+          "RestXmlQueryPrecedence"
+        ]
+      },
+      "output": {
+        "cases": [
+          "InputAndOutputWithTimestampHeaders",
+          "RestXmlHttpPayloadWithUnsetUnion",
+          "HttpPayloadTraitsWithNoBlobBody",
+          "ComplexError",
+          "BodyWithXmlName",
+          "XmlLists",
+          "IgnoreQueryParamsInResponse"
+        ]
+      }
+    },
+    "smithy-rpc-v2-cbor": {
+      "output": {
+        "cases": [
+          "RpcV2CborExtraFieldsInTheBodyShouldBeSkippedByClients",
+          "RpcV2CborDeserializesDenseSetMapAndSkipsNull"
+        ]
+      }
+    }
+  }
+}
diff -pruN 2.23.6-1/tests/unit/botocore/put_object_data 2.31.35-1/tests/unit/botocore/put_object_data
--- 2.23.6-1/tests/unit/botocore/put_object_data	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/put_object_data	2025-11-12 19:17:29.000000000 +0000
@@ -1 +1 @@
-This is a test of PutObject.
\ No newline at end of file
+This is a test of PutObject.
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/json/errors/opsworks-delete-stack.json 2.31.35-1/tests/unit/botocore/response_parsing/json/errors/opsworks-delete-stack.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/json/errors/opsworks-delete-stack.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/json/errors/opsworks-delete-stack.json	1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-{"__type":"ResourceNotFoundException","message":"Unable to find stack with ID foobar"}
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/json/expected/opsworks-delete-stack.json 2.31.35-1/tests/unit/botocore/response_parsing/json/expected/opsworks-delete-stack.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/json/expected/opsworks-delete-stack.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/json/expected/opsworks-delete-stack.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,7 +0,0 @@
-{
-    "ResponseMetadata": {},
-    "Error": {
-        "Message": "Unable to find stack with ID foobar",
-        "Code": "ResourceNotFoundException"
-    }
-}
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/test_response_parsing.py 2.31.35-1/tests/unit/botocore/response_parsing/test_response_parsing.py
--- 2.23.6-1/tests/unit/botocore/response_parsing/test_response_parsing.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/test_response_parsing.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,43 +11,37 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import os
+import difflib
 import glob
 import json
-import pprint
 import logging
-import difflib
+import os
+import pprint
 
+import botocore.session
 import pytest
+from botocore import parsers, xform_name
 
 from tests import create_session
 
-import botocore.session
-from botocore import xform_name
-from botocore import parsers
-
 log = logging.getLogger(__name__)
 
 
 SPECIAL_CASES = [
-    'iam-get-user-policy.xml', # Needs the JSON decode from handlers.py
+    'iam-get-user-policy.xml',  # Needs the JSON decode from handlers.py
     'iam-list-roles.xml',  # Needs the JSON decode from handlers.py for the policy
-    's3-get-bucket-location.xml', # Confirmed, this will need a special handler
+    's3-get-bucket-location.xml',  # Confirmed, this will need a special handler
     #'s3-list-multipart-uploads.xml',  # Bug in model, missing delimeter
-    'cloudformation-get-template.xml', # Need to JSON decode the template body.
+    'cloudformation-get-template.xml',  # Need to JSON decode the template body.
 ]
 
 
 def _test_parsed_response(xmlfile, operation_model, expected):
     response_body = _get_raw_response_body(xmlfile)
-    response = {
-        'body': response_body,
-        'status_code': 200,
-        'headers': {}
-    }
+    response = {'body': response_body, 'status_code': 200, 'headers': {}}
     for case in SPECIAL_CASES:
         if case in xmlfile:
-            print("SKIP: %s" % xmlfile)
+            print(f"SKIP: {xmlfile}")
             return
     if 'errors' in xmlfile:
         response['status_code'] = 400
@@ -57,7 +51,7 @@ def _test_parsed_response(xmlfile, opera
         response['headers'] = loaded.pop('__headers__')
         response['body'] = json.dumps(loaded).encode('utf-8')
 
-    protocol = operation_model.service_model.protocol
+    protocol = operation_model.service_model.resolved_protocol
     parser_cls = parsers.PROTOCOL_PARSERS[protocol]
     parser = parser_cls(timestamp_parser=lambda x: x)
     parsed = parser.parse(response, operation_model.output_shape)
@@ -85,8 +79,8 @@ def _test_parsed_response(xmlfile, opera
         print(d2)
         pretty_d1 = pprint.pformat(d1, width=1).splitlines()
         pretty_d2 = pprint.pformat(d2, width=1).splitlines()
-        diff = ('\n' + '\n'.join(difflib.ndiff(pretty_d1, pretty_d2)))
-        raise AssertionError("Dicts are not equal:\n%s" % diff)
+        diff = '\n' + '\n'.join(difflib.ndiff(pretty_d1, pretty_d2))
+        raise AssertionError(f"Dicts are not equal:\n{diff}")
 
 
 def _convert_bytes_to_str(parsed):
@@ -128,7 +122,6 @@ def _get_operation_model(service_model,
     for operation_name in operation_names:
         if xform_name(operation_name) == opname.replace('-', '_'):
             return service_model.operation_model(operation_name)
-    return operation
 
 
 def _xml_test_cases():
@@ -137,14 +130,13 @@ def _xml_test_cases():
         data_path = os.path.join(os.path.dirname(__file__), 'xml')
         data_path = os.path.join(data_path, dp)
         session = create_session()
-        xml_files = glob.glob('%s/*.xml' % data_path)
+        xml_files = glob.glob(f'{data_path}/*.xml')
         service_names = set()
         for fn in xml_files:
             service_names.add(os.path.split(fn)[1].split('-')[0])
         for service_name in service_names:
             service_model = session.get_service_model(service_name)
-            service_xml_files = glob.glob('%s/%s-*.xml' % (data_path,
-                                                           service_name))
+            service_xml_files = glob.glob(f'{data_path}/{service_name}-*.xml')
             for xmlfile in service_xml_files:
                 expected = _get_expected_parsed_result(xmlfile)
                 operation_model = _get_operation_model(service_model, xmlfile)
@@ -153,13 +145,10 @@ def _xml_test_cases():
 
 
 @pytest.mark.parametrize(
-    "xmlfile, operation_model, expected",
-    _xml_test_cases()
+    "xmlfile, operation_model, expected", _xml_test_cases()
 )
 def test_xml_parsing(xmlfile, operation_model, expected):
-    _test_parsed_response(
-        xmlfile, operation_model, expected
-    )
+    _test_parsed_response(xmlfile, operation_model, expected)
 
 
 def _get_raw_response_body(xmlfile):
@@ -178,12 +167,15 @@ def _json_test_cases():
     session = botocore.session.get_session()
     for json_response_file in os.listdir(json_responses_dir):
         # Files look like: 'datapipeline-create-pipeline.json'
-        service_name, operation_name = os.path.splitext(
-            json_response_file)[0].split('-', 1)
-        expected_parsed_response = os.path.join(expected_parsed_dir,
-                                                json_response_file)
-        raw_response_file = os.path.join(json_responses_dir,
-                                         json_response_file)
+        service_name, operation_name = os.path.splitext(json_response_file)[
+            0
+        ].split('-', 1)
+        expected_parsed_response = os.path.join(
+            expected_parsed_dir, json_response_file
+        )
+        raw_response_file = os.path.join(
+            json_responses_dir, json_response_file
+        )
         with open(expected_parsed_response) as f:
             expected = json.load(f)
         service_model = session.get_service_model(service_name)
@@ -197,12 +189,7 @@ def _json_test_cases():
 
 
 @pytest.mark.parametrize(
-    "raw_response_file, operation_model, expected",
-    _json_test_cases()
+    "raw_response_file, operation_model, expected", _json_test_cases()
 )
-def test_json_errors_parsing(
-    raw_response_file, operation_model, expected
-):
-    _test_parsed_response(
-        raw_response_file, operation_model, expected
-    )
+def test_json_errors_parsing(raw_response_file, operation_model, expected):
+    _test_parsed_response(raw_response_file, operation_model, expected)
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.json 2.31.35-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-{
-    "Error": {
-        "Code": "InvalidNextToken",
-        "Message": "The token 'fiebaz' was invalid",
-        "Type": "Sender"
-    },
-    "ResponseMetadata": {
-        "RequestId": "0cbee924-b7f3-11e2-9844-5359a37be512"
-    }
-}
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.xml 2.31.35-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.xml
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/errors/cloudwatch-describe-alarm-history.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,8 +0,0 @@
-<ErrorResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
-  <Error>
-    <Type>Sender</Type>
-    <Code>InvalidNextToken</Code>
-    <Message>The token 'fiebaz' was invalid</Message>
-  </Error>
-  <RequestId>0cbee924-b7f3-11e2-9844-5359a37be512</RequestId>
-</ErrorResponse>
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.json 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,6 +0,0 @@
-{
-    "AlarmHistoryItems": [], 
-    "ResponseMetadata": {
-        "RequestId": "ac265b36-9167-11e2-bf7e-91c14e278742"
-    }
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.xml 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.xml
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarm-history.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,8 +0,0 @@
-<DescribeAlarmHistoryResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
-  <DescribeAlarmHistoryResult>
-    <AlarmHistoryItems/>
-  </DescribeAlarmHistoryResult>
-  <ResponseMetadata>
-    <RequestId>ac265b36-9167-11e2-bf7e-91c14e278742</RequestId>
-  </ResponseMetadata>
-</DescribeAlarmHistoryResponse>
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.json 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,6 +0,0 @@
-{
-    "ResponseMetadata": {
-        "RequestId": "ac11e96c-9167-11e2-bb93-654a565d340b"
-    }, 
-    "MetricAlarms": []
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.xml 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.xml
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-describe-alarms.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,8 +0,0 @@
-<DescribeAlarmsResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
-  <DescribeAlarmsResult>
-    <MetricAlarms/>
-  </DescribeAlarmsResult>
-  <ResponseMetadata>
-    <RequestId>ac11e96c-9167-11e2-bb93-654a565d340b</RequestId>
-  </ResponseMetadata>
-</DescribeAlarmsResponse>
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.json 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.json
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,817 +0,0 @@
-{
-    "Metrics": [
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeIdleTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "DiskReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "NumberOfEmptyReceives"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "NetworkOut"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "ApproximateNumberOfMessagesNotVisible"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeTotalReadTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_Instance"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "ApproximateNumberOfMessagesDelayed"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "CPUUtilization"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeTotalWriteTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "CPUUtilization"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeQueueLength"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "DiskWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeTotalReadTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "CPUUtilization"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_Instance"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "CPUUtilization"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "DiskReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeIdleTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeQueueLength"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "DiskReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeIdleTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "ApproximateNumberOfMessagesVisible"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "DiskReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_Instance"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "DiskReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeTotalWriteTime"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_System"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "NetworkOut"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeTotalWriteTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "DiskWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "DiskWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeQueueLength"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeIdleTime"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "NumberOfMessagesSent"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeQueueLength"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-267b761f"
-                }
-            ], 
-            "MetricName": "VolumeReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/DynamoDB", 
-            "Dimensions": [
-                {
-                    "Name": "TableName", 
-                    "Value": "fromcli"
-                }
-            ], 
-            "MetricName": "ProvisionedReadCapacityUnits"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_System"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "NumberOfMessagesDeleted"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "DiskWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "NetworkOut"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "DiskReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_System"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "NetworkOut"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "NetworkIn"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "DiskWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/SQS", 
-            "Dimensions": [
-                {
-                    "Name": "QueueName", 
-                    "Value": "foobar"
-                }
-            ], 
-            "MetricName": "NumberOfMessagesReceived"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-203b3919"
-                }
-            ], 
-            "MetricName": "VolumeTotalReadTime"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "DiskWriteOps"
-        }, 
-        {
-            "Namespace": "AWS/DynamoDB", 
-            "Dimensions": [
-                {
-                    "Name": "TableName", 
-                    "Value": "fromcli"
-                }
-            ], 
-            "MetricName": "ProvisionedWriteCapacityUnits"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeTotalWriteTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-a8d2e991"
-                }
-            ], 
-            "MetricName": "VolumeTotalReadTime"
-        }, 
-        {
-            "Namespace": "AWS/EBS", 
-            "Dimensions": [
-                {
-                    "Name": "VolumeId", 
-                    "Value": "vol-04c7c53d"
-                }
-            ], 
-            "MetricName": "VolumeWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "DiskReadBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "DiskWriteBytes"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-20277712"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_Instance"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "NetworkIn"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "NetworkIn"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-70d08042"
-                }
-            ], 
-            "MetricName": "DiskReadOps"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-d63c6ce4"
-                }
-            ], 
-            "MetricName": "NetworkIn"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "StatusCheckFailed_System"
-        }, 
-        {
-            "Namespace": "AWS/EC2", 
-            "Dimensions": [
-                {
-                    "Name": "InstanceId", 
-                    "Value": "i-78f1b94a"
-                }
-            ], 
-            "MetricName": "DiskWriteBytes"
-        }
-    ], 
-    "ResponseMetadata": {
-        "RequestId": "abea8add-9167-11e2-91d1-9b4c7751b290"
-    }
-}
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.xml 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.xml
--- 2.23.6-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.xml	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/response_parsing/xml/responses/cloudwatch-list-metrics.xml	1970-01-01 00:00:00.000000000 +0000
@@ -1,819 +0,0 @@
-<ListMetricsResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
-  <ListMetricsResult>
-    <Metrics>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeIdleTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NumberOfEmptyReceives</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkOut</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>ApproximateNumberOfMessagesNotVisible</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalReadTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_Instance</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>ApproximateNumberOfMessagesDelayed</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>CPUUtilization</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalWriteTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>CPUUtilization</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeQueueLength</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalReadTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>CPUUtilization</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_Instance</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>CPUUtilization</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeIdleTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeQueueLength</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeIdleTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>ApproximateNumberOfMessagesVisible</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_Instance</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalWriteTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_System</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkOut</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalWriteTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeQueueLength</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeIdleTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NumberOfMessagesSent</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeQueueLength</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-267b761f</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>TableName</Name>
-            <Value>fromcli</Value>
-          </member>
-        </Dimensions>
-        <MetricName>ProvisionedReadCapacityUnits</MetricName>
-        <Namespace>AWS/DynamoDB</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_System</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NumberOfMessagesDeleted</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkOut</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_System</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkOut</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkIn</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>QueueName</Name>
-            <Value>foobar</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NumberOfMessagesReceived</MetricName>
-        <Namespace>AWS/SQS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeReadOps</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-203b3919</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalReadTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>TableName</Name>
-            <Value>fromcli</Value>
-          </member>
-        </Dimensions>
-        <MetricName>ProvisionedWriteCapacityUnits</MetricName>
-        <Namespace>AWS/DynamoDB</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalWriteTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-a8d2e991</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeTotalReadTime</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>VolumeId</Name>
-            <Value>vol-04c7c53d</Value>
-          </member>
-        </Dimensions>
-        <MetricName>VolumeWriteBytes</MetricName>
-        <Namespace>AWS/EBS</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-20277712</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_Instance</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkIn</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkIn</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-70d08042</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskReadOps</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-d63c6ce4</Value>
-          </member>
-        </Dimensions>
-        <MetricName>NetworkIn</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>StatusCheckFailed_System</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-      <member>
-        <Dimensions>
-          <member>
-            <Name>InstanceId</Name>
-            <Value>i-78f1b94a</Value>
-          </member>
-        </Dimensions>
-        <MetricName>DiskWriteBytes</MetricName>
-        <Namespace>AWS/EC2</Namespace>
-      </member>
-    </Metrics>
-  </ListMetricsResult>
-  <ResponseMetadata>
-    <RequestId>abea8add-9167-11e2-91d1-9b4c7751b290</RequestId>
-  </ResponseMetadata>
-</ListMetricsResponse>
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_adaptive.py 2.31.35-1/tests/unit/botocore/retries/test_adaptive.py
--- 2.23.6-1/tests/unit/botocore/retries/test_adaptive.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_adaptive.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,6 @@
-from tests import mock, unittest
+from botocore.retries import adaptive, bucket, standard, throttling
 
-from botocore.retries import adaptive
-from botocore.retries import standard
-from botocore.retries import bucket
-from botocore.retries import throttling
+from tests import mock, unittest
 
 
 class FakeClock(bucket.Clock):
@@ -24,8 +21,10 @@ class TestCanCreateRetryHandler(unittest
         limiter = adaptive.register_retry_handler(client)
         self.assertEqual(
             client.meta.events.register.call_args_list,
-            [mock.call('before-send', limiter.on_sending_request),
-             mock.call('needs-retry', limiter.on_receiving_response)]
+            [
+                mock.call('before-send', limiter.on_sending_request),
+                mock.call('needs-retry', limiter.on_receiving_response),
+            ],
         )
 
 
@@ -37,7 +36,8 @@ class TestClientRateLimiter(unittest.Tes
         self.rate_adjustor = mock.Mock(spec=throttling.CubicCalculator)
         self.rate_clocker = mock.Mock(spec=adaptive.RateClocker)
         self.throttling_detector = mock.Mock(
-            spec=standard.ThrottlingErrorDetector)
+            spec=standard.ThrottlingErrorDetector
+        )
 
     def create_client_limiter(self):
         rate_limiter = adaptive.ClientRateLimiter(
@@ -86,8 +86,8 @@ class TestClientRateLimiter(unittest.Tes
         rate_limiter.on_receiving_response()
         self.assertEqual(self.token_bucket.max_rate, 2.0 * 20)
 
-class TestRateClocker(unittest.TestCase):
 
+class TestRateClocker(unittest.TestCase):
     def setUp(self):
         self.timestamp_sequences = [0]
         self.clock = FakeClock(self.timestamp_sequences)
@@ -110,18 +110,20 @@ class TestRateClocker(unittest.TestCase)
         self.assertAlmostEqual(self.rate_measure.measured_rate, 1)
 
     def test_uses_smoothing_to_favor_recent_weights(self):
-        self.timestamp_sequences.extend([
-            1,
-            1.5,
-            2,
-            2.5,
-            3,
-            3.5,
-            4,
-            # If we now wait 10 seconds (.1 TPS),
-            # our rate is somewhere between 2 TPS and .1 TPS.
-            14,
-        ])
+        self.timestamp_sequences.extend(
+            [
+                1,
+                1.5,
+                2,
+                2.5,
+                3,
+                3.5,
+                4,
+                # If we now wait 10 seconds (.1 TPS),
+                # our rate is somewhere between 2 TPS and .1 TPS.
+                14,
+            ]
+        )
         for _ in range(7):
             self.rate_measure.record()
         # We should almost be at 2.0 but not quite.
@@ -134,26 +136,22 @@ class TestRateClocker(unittest.TestCase)
         self.assertLessEqual(self.rate_measure.measured_rate, 2.0)
 
     def test_noop_when_delta_t_is_0(self):
-        self.timestamp_sequences.extend([
-            1,
-            1,
-            1,
-            2,
-            3
-        ])
+        self.timestamp_sequences.extend([1, 1, 1, 2, 3])
         for _ in range(5):
             self.rate_measure.record()
         self.assertGreaterEqual(self.rate_measure.measured_rate, 1.0)
 
     def test_times_are_grouped_per_time_bucket(self):
         # Using our default of 0.5 time buckets, we have:
-        self.timestamp_sequences.extend([
-            0.1,
-            0.2,
-            0.3,
-            0.4,
-            0.49,
-        ])
+        self.timestamp_sequences.extend(
+            [
+                0.1,
+                0.2,
+                0.3,
+                0.4,
+                0.49,
+            ]
+        )
         for _ in range(len(self.timestamp_sequences)):
             self.rate_measure.record()
         # This is showing the tradeoff we're making with measuring rates.
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_bucket.py 2.31.35-1/tests/unit/botocore/retries/test_bucket.py
--- 2.23.6-1/tests/unit/botocore/retries/test_bucket.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_bucket.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,7 @@
-from tests import unittest
-
-from botocore.retries import bucket
 from botocore.exceptions import CapacityNotAvailableError
+from botocore.retries import bucket
+
+from tests import unittest
 
 
 class FakeClock(bucket.Clock):
@@ -22,19 +22,22 @@ class TestTokenBucket(unittest.TestCase)
         self.clock = FakeClock(self.timestamp_sequences)
 
     def create_token_bucket(self, max_rate=10, min_rate=0.1):
-        return bucket.TokenBucket(max_rate=max_rate, clock=self.clock,
-                                  min_rate=min_rate)
+        return bucket.TokenBucket(
+            max_rate=max_rate, clock=self.clock, min_rate=min_rate
+        )
 
     def test_can_acquire_amount(self):
-        self.timestamp_sequences.extend([
-            # Requests tokens every second, which is well below our
-            # 10 TPS fill rate.
-            1,
-            2,
-            3,
-            4,
-            5,
-        ])
+        self.timestamp_sequences.extend(
+            [
+                # Requests tokens every second, which is well below our
+                # 10 TPS fill rate.
+                1,
+                2,
+                3,
+                4,
+                5,
+            ]
+        )
         token_bucket = self.create_token_bucket(max_rate=10)
         for _ in range(5):
             self.assertTrue(token_bucket.acquire(1, block=False))
@@ -62,21 +65,26 @@ class TestTokenBucket(unittest.TestCase)
         self.assertEqual(token_bucket.max_capacity, 1)
 
     def test_acquire_fails_on_non_block_mode_returns_false(self):
-        self.timestamp_sequences.extend([
-            # Initial creation time.
-            0,
-            # Requests a token 1 second later.
-            1
-        ])
+        self.timestamp_sequences.extend(
+            [
+                # Initial creation time.
+                0,
+                # Requests a token 1 second later.
+                1,
+            ]
+        )
         token_bucket = self.create_token_bucket(max_rate=10)
         with self.assertRaises(CapacityNotAvailableError):
             token_bucket.acquire(100, block=False)
 
     def test_can_retrieve_at_max_send_rate(self):
-        self.timestamp_sequences.extend([
-            # Request a new token every 100ms (10 TPS) for 2 seconds.
-            1 + 0.1 * i for i in range(20)
-        ])
+        self.timestamp_sequences.extend(
+            [
+                # Request a new token every 100ms (10 TPS) for 2 seconds.
+                1 + 0.1 * i
+                for i in range(20)
+            ]
+        )
         token_bucket = self.create_token_bucket(max_rate=10)
         for _ in range(20):
             self.assertTrue(token_bucket.acquire(1, block=False))
@@ -84,20 +92,22 @@ class TestTokenBucket(unittest.TestCase)
     def test_acquiring_blocks_when_capacity_reached(self):
         # This is 1 token every 0.1 seconds.
         token_bucket = self.create_token_bucket(max_rate=10)
-        self.timestamp_sequences.extend([
-            # The first acquire() happens after .1 seconds.
-            0.1,
-            # The second acquire() will fail because we get tokens at
-            # 1 per 0.1 seconds.  We will then sleep for 0.05 seconds until we
-            # get a new token.
-            0.15,
-            # And at 0.2 seconds we get our token.
-            0.2,
-            # And at 0.3 seconds we have no issues getting a token.
-            # Because we're using such small units (to avoid bloating the
-            # test run time), we have to go slightly over 0.3 seconds here.
-            0.300001,
-        ])
+        self.timestamp_sequences.extend(
+            [
+                # The first acquire() happens after .1 seconds.
+                0.1,
+                # The second acquire() will fail because we get tokens at
+                # 1 per 0.1 seconds.  We will then sleep for 0.05 seconds until we
+                # get a new token.
+                0.15,
+                # And at 0.2 seconds we get our token.
+                0.2,
+                # And at 0.3 seconds we have no issues getting a token.
+                # Because we're using such small units (to avoid bloating the
+                # test run time), we have to go slightly over 0.3 seconds here.
+                0.300001,
+            ]
+        )
         self.assertTrue(token_bucket.acquire(1, block=False))
         self.assertEqual(token_bucket.available_capacity, 0)
         self.assertTrue(token_bucket.acquire(1, block=True))
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_quota.py 2.31.35-1/tests/unit/botocore/retries/test_quota.py
--- 2.23.6-1/tests/unit/botocore/retries/test_quota.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_quota.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,7 @@
-from tests import unittest
-
-
 from botocore.retries import quota
 
+from tests import unittest
+
 
 class TestRetryQuota(unittest.TestCase):
     def setUp(self):
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_special.py 2.31.35-1/tests/unit/botocore/retries/test_special.py
--- 2.23.6-1/tests/unit/botocore/retries/test_special.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_special.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,7 +1,7 @@
-from tests import mock, unittest
-
 from botocore.awsrequest import AWSResponse
-from botocore.retries import standard, special
+from botocore.retries import special, standard
+
+from tests import mock, unittest
 
 
 def create_fake_op_model(service_name):
@@ -16,38 +16,53 @@ class TestRetryIDPCommunicationError(uni
 
     def test_only_retries_error_for_sts(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('s3'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('s3'),
             parsed_response={
-                'Error': {'Code': 'IDPCommunicationError',
-                          'Message': 'message'}},
+                'Error': {
+                    'Code': 'IDPCommunicationError',
+                    'Message': 'message',
+                }
+            },
             http_response=AWSResponse(
-                status_code=400, raw=None, headers={},
-                url='https://foo'),
-            caught_exception=None, )
+                status_code=400, raw=None, headers={}, url='https://foo'
+            ),
+            caught_exception=None,
+        )
         self.assertFalse(self.checker.is_retryable(context))
 
     def test_can_retry_idp_communication_error(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('sts'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('sts'),
             parsed_response={
-                'Error': {'Code': 'IDPCommunicationError',
-                          'Message': 'message'}},
+                'Error': {
+                    'Code': 'IDPCommunicationError',
+                    'Message': 'message',
+                }
+            },
             http_response=AWSResponse(
-                status_code=400, raw=None, headers={},
-                url='https://foo'),
-            caught_exception=None, )
+                status_code=400, raw=None, headers={}, url='https://foo'
+            ),
+            caught_exception=None,
+        )
         self.assertTrue(self.checker.is_retryable(context))
 
     def test_not_idp_communication_error(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('sts'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('sts'),
             parsed_response={
-                'Error': {'Code': 'NotIDPCommunicationError',
-                          'Message': 'message'}},
+                'Error': {
+                    'Code': 'NotIDPCommunicationError',
+                    'Message': 'message',
+                }
+            },
             http_response=AWSResponse(
-                status_code=400, raw=None, headers={},
-                url='https://foo'),
-            caught_exception=None, )
+                status_code=400, raw=None, headers={}, url='https://foo'
+            ),
+            caught_exception=None,
+        )
         self.assertFalse(self.checker.is_retryable(context))
 
 
@@ -62,56 +77,68 @@ class TestRetryDDBChecksumError(unittest
 
     def test_checksum_not_in_header(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('dynamodb'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('dynamodb'),
             parsed_response={
                 'Anything': ["foo"],
             },
             http_response=AWSResponse(
-                status_code=200, raw=self.raw_stream(b'foo'),
+                status_code=200,
+                raw=self.raw_stream(b'foo'),
                 headers={},
-                url='https://foo'),
+                url='https://foo',
+            ),
             caught_exception=None,
         )
         self.assertFalse(self.checker.is_retryable(context))
 
     def test_checksum_matches(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('dynamodb'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('dynamodb'),
             parsed_response={
                 'Anything': ["foo"],
             },
             http_response=AWSResponse(
-                status_code=200, raw=self.raw_stream(b'foo'),
+                status_code=200,
+                raw=self.raw_stream(b'foo'),
                 headers={'x-amz-crc32': '2356372769'},
-                url='https://foo'),
-            caught_exception=None
+                url='https://foo',
+            ),
+            caught_exception=None,
         )
         self.assertFalse(self.checker.is_retryable(context))
 
     def test_checksum_not_matches(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('dynamodb'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('dynamodb'),
             parsed_response={
                 'Anything': ["foo"],
             },
             http_response=AWSResponse(
-                status_code=200, raw=self.raw_stream(b'foo'),
+                status_code=200,
+                raw=self.raw_stream(b'foo'),
                 headers={'x-amz-crc32': '2356372768'},
-                url='https://foo'),
-            caught_exception=None
+                url='https://foo',
+            ),
+            caught_exception=None,
         )
         self.assertTrue(self.checker.is_retryable(context))
 
     def test_checksum_check_only_for_dynamodb(self):
         context = standard.RetryContext(
-            attempt_number=1, operation_model=create_fake_op_model('s3'),
+            attempt_number=1,
+            operation_model=create_fake_op_model('s3'),
             parsed_response={
                 'Anything': ["foo"],
             },
             http_response=AWSResponse(
-                status_code=200, raw=self.raw_stream(b'foo'),
+                status_code=200,
+                raw=self.raw_stream(b'foo'),
                 headers={'x-amz-crc32': '2356372768'},
-                url='https://foo'),
-            caught_exception=None
+                url='https://foo',
+            ),
+            caught_exception=None,
         )
         self.assertFalse(self.checker.is_retryable(context))
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_standard.py 2.31.35-1/tests/unit/botocore/retries/test_standard.py
--- 2.23.6-1/tests/unit/botocore/retries/test_standard.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_standard.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,20 +1,19 @@
-from tests import mock, unittest
-
 import pytest
-
-from botocore.retries import standard
-from botocore.retries import quota
 from botocore import model
 from botocore.awsrequest import AWSResponse
-from botocore.exceptions import HTTPClientError, ConnectionError
-from botocore.exceptions import ReadTimeoutError
+from botocore.exceptions import (
+    ConnectionError,
+    HTTPClientError,
+    ReadTimeoutError,
+)
+from botocore.retries import quota, standard
 
+from tests import mock, unittest
 
 RETRYABLE_THROTTLED_RESPONSES = [
     # From the spec under "Throttling Errors"
     # The status codes technically don't matter here, but we're adding
     # them for completeness.
-
     # StatusCode, ErrorCode, Retryable?
     (400, 'Throttling', True),
     (400, 'ThrottlingException', True),
@@ -30,7 +29,6 @@ RETRYABLE_THROTTLED_RESPONSES = [
     (503, 'SlowDown', True),
     (400, 'PriorRequestNotComplete', True),
     (502, 'EC2ThrottledException', True),
-
     # These are some negative test cases, not in the spec but we'll use
     # to verify we can detect throttled errors correctly.
     (400, 'NotAThrottlingError', False),
@@ -47,7 +45,6 @@ RETRYABLE_TRANSIENT_ERRORS = [
     (400, 'RequestTimeout', True),
     (400, 'RequestTimeoutException', True),
     (400, 'PriorRequestNotComplete', True),
-
     # "Any HTTP response with an HTTP status code of 500, 502, 503, or 504".
     (500, None, True),
     (502, None, True),
@@ -62,7 +59,6 @@ RETRYABLE_TRANSIENT_ERRORS = [
     # response.
     (None, ConnectionError(error='unknown'), True),
     (None, HTTPClientError(error='unknown'), True),
-
     # Negative cases
     (200, None, False),
     # This is a throttling error not a transient error
@@ -96,7 +92,7 @@ SERVICE_DESCRIPTION_WITH_RETRIES = {
                 {'shape': 'ModeledRetryableError'},
                 {'shape': 'ModeledRetryableErrorWithCode'},
                 {'shape': 'NonRetryableError'},
-            ]
+            ],
         }
     },
     'shapes': {
@@ -112,7 +108,7 @@ SERVICE_DESCRIPTION_WITH_RETRIES = {
                 }
             },
             'exception': True,
-            'retryable': {'throttling': True}
+            'retryable': {'throttling': True},
         },
         'ModeledRetryableError': {
             'type': 'structure',
@@ -122,7 +118,7 @@ SERVICE_DESCRIPTION_WITH_RETRIES = {
                 }
             },
             'exception': True,
-            'retryable': {}
+            'retryable': {},
         },
         'ModeledRetryableErrorWithCode': {
             'type': 'structure',
@@ -135,7 +131,7 @@ SERVICE_DESCRIPTION_WITH_RETRIES = {
                 'code': 'ErrorCodeRetryable',
             },
             'exception': True,
-            'retryable': {'throttling': True}
+            'retryable': {'throttling': True},
         },
         'NonRetryableError': {
             'type': 'structure',
@@ -149,6 +145,7 @@ SERVICE_DESCRIPTION_WITH_RETRIES = {
     },
 }
 
+
 @pytest.mark.parametrize('case', RETRYABLE_TRANSIENT_ERRORS)
 def test_can_detect_retryable_transient_errors(case):
     transient_checker = standard.TransientRetryableChecker()
@@ -169,14 +166,15 @@ def test_can_detect_modeled_retryable_er
     )
 
 
-@pytest.mark.parametrize('case',
+@pytest.mark.parametrize(
+    'case',
     [
-        case for case in
-        RETRYABLE_TRANSIENT_ERRORS +
-        RETRYABLE_THROTTLED_RESPONSES +
-        RETRYABLE_MODELED_ERRORS
+        case
+        for case in RETRYABLE_TRANSIENT_ERRORS
+        + RETRYABLE_THROTTLED_RESPONSES
+        + RETRYABLE_MODELED_ERRORS
         if case[2]
-    ]
+    ],
 )
 def test_standard_retry_conditions(case):
     """This is verifying that the high level object used for checking
@@ -192,22 +190,25 @@ def test_standard_retry_conditions(case)
 
 
 def get_operation_model_with_retries():
-    service = model.ServiceModel(SERVICE_DESCRIPTION_WITH_RETRIES,
-                                 service_name='my-service')
+    service = model.ServiceModel(
+        SERVICE_DESCRIPTION_WITH_RETRIES, service_name='my-service'
+    )
     return service.operation_model('TestOperation')
 
 
-def _verify_retryable(checker, operation_model,
-                      status_code, error, is_retryable):
-    http_response = AWSResponse(status_code=status_code,
-                                raw=None, headers={}, url='https://foo/')
+def _verify_retryable(
+    checker, operation_model, status_code, error, is_retryable
+):
+    http_response = AWSResponse(
+        status_code=status_code, raw=None, headers={}, url='https://foo/'
+    )
     parsed_response = None
     caught_exception = None
     if error is not None:
         if isinstance(error, Exception):
             caught_exception = error
         else:
-            parsed_response = {'Error':  {'Code': error, 'Message': 'Error'}}
+            parsed_response = {'Error': {'Code': error, 'Message': 'Error'}}
     context = standard.RetryContext(
         attempt_number=1,
         operation_model=operation_model,
@@ -225,8 +226,9 @@ def arbitrary_retry_context():
         attempt_number=1,
         operation_model=None,
         parsed_response={'Error': {'Code': 'ErrorCode', 'Message': 'message'}},
-        http_response=AWSResponse(status_code=500,
-                                  raw=None, headers={}, url='https://foo'),
+        http_response=AWSResponse(
+            status_code=500, raw=None, headers={}, url='https://foo'
+        ),
         caught_exception=None,
     )
 
@@ -256,8 +258,7 @@ def test_can_create_default_retry_handle
     mock_client = mock.Mock()
     mock_client.meta.service_model.service_id = model.ServiceId('my-service')
     assert isinstance(
-        standard.register_retry_handler(mock_client),
-        standard.RetryHandler
+        standard.register_retry_handler(mock_client), standard.RetryHandler
     )
     call_args_list = mock_client.meta.events.register.call_args_list
     # We should have registered the retry quota to after-calls
@@ -277,30 +278,35 @@ class TestRetryHandler(unittest.TestCase
         self.retry_handler = standard.RetryHandler(
             retry_policy=self.retry_policy,
             retry_event_adapter=self.retry_event_adapter,
-            retry_quota=self.retry_quota
+            retry_quota=self.retry_quota,
         )
 
     def test_does_need_retry(self):
-        self.retry_event_adapter.create_retry_context.return_value = \
+        self.retry_event_adapter.create_retry_context.return_value = (
             mock.sentinel.retry_context
+        )
         self.retry_policy.should_retry.return_value = True
         self.retry_quota.acquire_retry_quota.return_value = True
         self.retry_policy.compute_retry_delay.return_value = 1
 
-        self.assertEqual(
-            self.retry_handler.needs_retry(fake_kwargs='foo'), 1)
+        self.assertEqual(self.retry_handler.needs_retry(fake_kwargs='foo'), 1)
         self.retry_event_adapter.create_retry_context.assert_called_with(
-            fake_kwargs='foo')
+            fake_kwargs='foo'
+        )
         self.retry_policy.should_retry.assert_called_with(
-            mock.sentinel.retry_context)
+            mock.sentinel.retry_context
+        )
         self.retry_quota.acquire_retry_quota.assert_called_with(
-            mock.sentinel.retry_context)
+            mock.sentinel.retry_context
+        )
         self.retry_policy.compute_retry_delay.assert_called_with(
-            mock.sentinel.retry_context)
+            mock.sentinel.retry_context
+        )
 
     def test_does_not_need_retry(self):
-        self.retry_event_adapter.create_retry_context.return_value = \
+        self.retry_event_adapter.create_retry_context.return_value = (
             mock.sentinel.retry_context
+        )
         self.retry_policy.should_retry.return_value = False
 
         self.assertIsNone(self.retry_handler.needs_retry(fake_kwargs='foo'))
@@ -308,21 +314,24 @@ class TestRetryHandler(unittest.TestCase
         self.assertFalse(self.retry_quota.acquire_retry_quota.called)
 
     def test_needs_retry_but_not_enough_quota(self):
-        self.retry_event_adapter.create_retry_context.return_value = \
+        self.retry_event_adapter.create_retry_context.return_value = (
             mock.sentinel.retry_context
+        )
         self.retry_policy.should_retry.return_value = True
         self.retry_quota.acquire_retry_quota.return_value = False
 
         self.assertIsNone(self.retry_handler.needs_retry(fake_kwargs='foo'))
 
     def test_retry_handler_adds_retry_metadata_to_response(self):
-        self.retry_event_adapter.create_retry_context.return_value = \
+        self.retry_event_adapter.create_retry_context.return_value = (
             mock.sentinel.retry_context
+        )
         self.retry_policy.should_retry.return_value = False
         self.assertIsNone(self.retry_handler.needs_retry(fake_kwargs='foo'))
         adapter = self.retry_event_adapter
         adapter.adapt_retry_response_from_context.assert_called_with(
-            mock.sentinel.retry_context)
+            mock.sentinel.retry_context
+        )
 
 
 class TestRetryEventAdapter(unittest.TestCase):
@@ -330,9 +339,11 @@ class TestRetryEventAdapter(unittest.Tes
         self.success_response = {'ResponseMetadata': {}, 'Foo': {}}
         self.failed_response = {'ResponseMetadata': {}, 'Error': {}}
         self.http_success = AWSResponse(
-            status_code=200, raw=None, headers={}, url='https://foo/')
+            status_code=200, raw=None, headers={}, url='https://foo/'
+        )
         self.http_failed = AWSResponse(
-            status_code=500, raw=None, headers={}, url='https://foo/')
+            status_code=500, raw=None, headers={}, url='https://foo/'
+        )
         self.caught_exception = ConnectionError(error='unknown')
 
     def test_create_context_from_success_response(self):
@@ -345,8 +356,9 @@ class TestRetryEventAdapter(unittest.Tes
         )
 
         self.assertEqual(context.attempt_number, 1)
-        self.assertEqual(context.operation_model,
-                         mock.sentinel.operation_model)
+        self.assertEqual(
+            context.operation_model, mock.sentinel.operation_model
+        )
         self.assertEqual(context.parsed_response, self.success_response)
         self.assertEqual(context.http_response, self.http_success)
         self.assertEqual(context.caught_exception, None)
@@ -385,13 +397,13 @@ class TestRetryEventAdapter(unittest.Tes
             operation=None,
             caught_exception=None,
             request_dict={'context': {}},
-            response=(self.http_failed, self.failed_response)
+            response=(self.http_failed, self.failed_response),
         )
         context.add_retry_metadata(MaxAttemptsReached=True)
         adapter.adapt_retry_response_from_context(context)
         self.assertEqual(
             self.failed_response['ResponseMetadata']['MaxAttemptsReached'],
-            True
+            True,
         )
 
 
@@ -400,28 +412,32 @@ class TestRetryPolicy(unittest.TestCase)
         self.retry_checker = mock.Mock(spec=standard.StandardRetryConditions)
         self.retry_backoff = mock.Mock(spec=standard.ExponentialBackoff)
         self.retry_policy = standard.RetryPolicy(
-            retry_checker=self.retry_checker,
-            retry_backoff=self.retry_backoff)
+            retry_checker=self.retry_checker, retry_backoff=self.retry_backoff
+        )
 
     def test_delegates_to_retry_checker(self):
         self.retry_checker.is_retryable.return_value = True
         self.assertTrue(self.retry_policy.should_retry(mock.sentinel.context))
         self.retry_checker.is_retryable.assert_called_with(
-            mock.sentinel.context)
+            mock.sentinel.context
+        )
 
     def test_delegates_to_retry_backoff(self):
         self.retry_backoff.delay_amount.return_value = 1
         self.assertEqual(
-            self.retry_policy.compute_retry_delay(mock.sentinel.context), 1)
+            self.retry_policy.compute_retry_delay(mock.sentinel.context), 1
+        )
         self.retry_backoff.delay_amount.assert_called_with(
-            mock.sentinel.context)
+            mock.sentinel.context
+        )
 
 
 class TestExponentialBackoff(unittest.TestCase):
     def setUp(self):
         self.random = lambda: 1
-        self.backoff = standard.ExponentialBackoff(max_backoff=20,
-                                                   random=self.random)
+        self.backoff = standard.ExponentialBackoff(
+            max_backoff=20, random=self.random
+        )
 
     def test_range_of_exponential_backoff(self):
         backoffs = [
@@ -429,8 +445,7 @@ class TestExponentialBackoff(unittest.Te
             for i in range(1, 10)
         ]
         # Note that we're capped at 20 which is our max backoff.
-        self.assertEqual(backoffs,
-                         [1, 2, 4, 8, 16, 20, 20, 20, 20])
+        self.assertEqual(backoffs, [1, 2, 4, 8, 16, 20, 20, 20, 20])
 
     def test_exponential_backoff_with_jitter(self):
         backoff = standard.ExponentialBackoff()
@@ -454,8 +469,9 @@ class TestRetryQuotaChecker(unittest.Tes
         caught_exception = None
         if is_timeout_error:
             caught_exception = ReadTimeoutError(endpoint_url='https://foo')
-        http_response = AWSResponse(status_code=status_code, raw=None,
-                                    headers={}, url='https://foo/')
+        http_response = AWSResponse(
+            status_code=status_code, raw=None, headers={}, url='https://foo/'
+        )
         context = standard.RetryContext(
             attempt_number=1,
             request_context=self.request_context,
@@ -473,7 +489,8 @@ class TestRetryQuotaChecker(unittest.Tes
     def test_can_acquire_quota_for_timeout_error(self):
         self.assertTrue(
             self.quota_checker.acquire_retry_quota(
-                self.create_context(is_timeout_error=True))
+                self.create_context(is_timeout_error=True)
+            )
         )
         self.assertEqual(self.request_context['retry_quota_capacity'], 10)
 
@@ -482,12 +499,11 @@ class TestRetryQuotaChecker(unittest.Tes
         # This is where we had to retry the request but eventually
         # succeeded.
         http_response = self.create_context(status_code=200).http_response
-        self.assertTrue(
-            self.quota_checker.acquire_retry_quota(context)
-        )
+        self.assertTrue(self.quota_checker.acquire_retry_quota(context))
         self.assertEqual(self.quota.available_capacity, 495)
-        self.quota_checker.release_retry_quota(context.request_context,
-                                               http_response=http_response)
+        self.quota_checker.release_retry_quota(
+            context.request_context, http_response=http_response
+        )
         self.assertEqual(self.quota.available_capacity, 500)
 
     def test_dont_release_quota_if_all_retries_failed(self):
@@ -496,31 +512,30 @@ class TestRetryQuotaChecker(unittest.Tes
         # our retry attempts and still failed.  In this case we shouldn't
         # give any retry quota back.
         http_response = self.create_context(status_code=500).http_response
-        self.assertTrue(
-            self.quota_checker.acquire_retry_quota(context)
-        )
+        self.assertTrue(self.quota_checker.acquire_retry_quota(context))
         self.assertEqual(self.quota.available_capacity, 495)
-        self.quota_checker.release_retry_quota(context.request_context,
-                                               http_response=http_response)
+        self.quota_checker.release_retry_quota(
+            context.request_context, http_response=http_response
+        )
         self.assertEqual(self.quota.available_capacity, 495)
 
     def test_can_release_default_quota_if_not_in_context(self):
         context = self.create_context()
-        self.assertTrue(
-            self.quota_checker.acquire_retry_quota(context)
-        )
+        self.assertTrue(self.quota_checker.acquire_retry_quota(context))
         self.assertEqual(self.quota.available_capacity, 495)
         # We're going to remove the quota amount from the request context.
         # This represents a successful request with no retries.
         self.request_context.pop('retry_quota_capacity')
-        self.quota_checker.release_retry_quota(context.request_context,
-                                               context.http_response)
+        self.quota_checker.release_retry_quota(
+            context.request_context, context.http_response
+        )
         # We expect only 1 unit was released.
         self.assertEqual(self.quota.available_capacity, 496)
 
     def test_acquire_quota_fails(self):
         quota_checker = standard.RetryQuotaChecker(
-            quota.RetryQuota(initial_capacity=5))
+            quota.RetryQuota(initial_capacity=5)
+        )
         # The first one succeeds.
         self.assertTrue(
             quota_checker.acquire_retry_quota(self.create_context())
@@ -534,12 +549,12 @@ class TestRetryQuotaChecker(unittest.Tes
 
     def test_quota_reached_adds_retry_metadata(self):
         quota_checker = standard.RetryQuotaChecker(
-            quota.RetryQuota(initial_capacity=0))
+            quota.RetryQuota(initial_capacity=0)
+        )
         context = self.create_context()
         self.assertFalse(quota_checker.acquire_retry_quota(context))
         self.assertEqual(
-            context.get_retry_metadata(),
-            {'RetryQuotaReached': True}
+            context.get_retry_metadata(), {'RetryQuotaReached': True}
         )
 
     def test_single_failed_request_does_not_give_back_quota(self):
@@ -549,8 +564,9 @@ class TestRetryQuotaChecker(unittest.Tes
         # the upper bound.
         self.quota.acquire(50)
         self.assertEqual(self.quota.available_capacity, 450)
-        self.quota_checker.release_retry_quota(context.request_context,
-                                               http_response=http_response)
+        self.quota_checker.release_retry_quota(
+            context.request_context, http_response=http_response
+        )
         self.assertEqual(self.quota.available_capacity, 450)
 
 
@@ -573,8 +589,9 @@ class TestRetryContext(unittest.TestCase
     def test_can_add_retry_reason(self):
         context = arbitrary_retry_context()
         context.add_retry_metadata(MaxAttemptsReached=True)
-        self.assertEqual(context.get_retry_metadata(),
-                         {'MaxAttemptsReached': True})
+        self.assertEqual(
+            context.get_retry_metadata(), {'MaxAttemptsReached': True}
+        )
 
     def test_handles_non_error_top_level_error_key_get_error_code(self):
         response = AWSResponse(
@@ -598,7 +615,8 @@ class TestRetryContext(unittest.TestCase
 class TestThrottlingErrorDetector(unittest.TestCase):
     def setUp(self):
         self.throttling_detector = standard.ThrottlingErrorDetector(
-            standard.RetryEventAdapter())
+            standard.RetryEventAdapter()
+        )
 
     def create_needs_retry_kwargs(self, **kwargs):
         retry_kwargs = {
@@ -614,9 +632,7 @@ class TestThrottlingErrorDetector(unitte
     def test_can_check_error_from_code(self):
         kwargs = self.create_needs_retry_kwargs()
         kwargs['response'] = (None, {'Error': {'Code': 'ThrottledException'}})
-        self.assertTrue(
-            self.throttling_detector.is_throttling_error(**kwargs)
-        )
+        self.assertTrue(self.throttling_detector.is_throttling_error(**kwargs))
 
     def test_no_throttling_error(self):
         kwargs = self.create_needs_retry_kwargs()
@@ -628,12 +644,11 @@ class TestThrottlingErrorDetector(unitte
     def test_detects_modeled_errors(self):
         kwargs = self.create_needs_retry_kwargs()
         kwargs['response'] = (
-            None, {'Error': {'Code': 'ModeledThrottlingError'}}
+            None,
+            {'Error': {'Code': 'ModeledThrottlingError'}},
         )
         kwargs['operation'] = get_operation_model_with_retries()
-        self.assertTrue(
-            self.throttling_detector.is_throttling_error(**kwargs)
-        )
+        self.assertTrue(self.throttling_detector.is_throttling_error(**kwargs))
 
 
 class TestModeledRetryErrorDetector(unittest.TestCase):
@@ -650,7 +665,7 @@ class TestModeledRetryErrorDetector(unit
         context.operation_model = get_operation_model_with_retries()
         self.assertEqual(
             self.modeled_error.detect_error_type(context),
-            self.modeled_error.TRANSIENT_ERROR
+            self.modeled_error.TRANSIENT_ERROR,
         )
 
     def test_throttling_error(self):
@@ -659,7 +674,7 @@ class TestModeledRetryErrorDetector(unit
         context.operation_model = get_operation_model_with_retries()
         self.assertEqual(
             self.modeled_error.detect_error_type(context),
-            self.modeled_error.THROTTLING_ERROR
+            self.modeled_error.THROTTLING_ERROR,
         )
 
 
@@ -675,25 +690,9 @@ class No(standard.BaseRetryableChecker):
 
 class TestOrRetryChecker(unittest.TestCase):
     def test_can_match_any_checker(self):
-        self.assertTrue(
-            standard.OrRetryChecker(
-                [Yes(), No()]
-            )
-        )
-        self.assertTrue(
-            standard.OrRetryChecker(
-                [No(), Yes()]
-            )
-        )
-        self.assertTrue(
-            standard.OrRetryChecker(
-                [Yes(), Yes()]
-            )
-        )
+        self.assertTrue(standard.OrRetryChecker([Yes(), No()]))
+        self.assertTrue(standard.OrRetryChecker([No(), Yes()]))
+        self.assertTrue(standard.OrRetryChecker([Yes(), Yes()]))
 
     def test_false_if_no_checkers_match(self):
-        self.assertTrue(
-            standard.OrRetryChecker(
-                [No(), No(), No()]
-            )
-        )
+        self.assertTrue(standard.OrRetryChecker([No(), No(), No()]))
diff -pruN 2.23.6-1/tests/unit/botocore/retries/test_throttling.py 2.31.35-1/tests/unit/botocore/retries/test_throttling.py
--- 2.23.6-1/tests/unit/botocore/retries/test_throttling.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/retries/test_throttling.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,15 +1,18 @@
-from tests import unittest
-
-
 from botocore.retries import throttling
 
+from tests import unittest
+
 
 class TestCubicCalculator(unittest.TestCase):
-    def create_cubic_calculator(self, starting_max_rate=10, beta=0.7,
-                                scale_constant=0.4):
-        return throttling.CubicCalculator(starting_max_rate=starting_max_rate,
-                                          scale_constant=scale_constant,
-                                          start_time=0, beta=beta)
+    def create_cubic_calculator(
+        self, starting_max_rate=10, beta=0.7, scale_constant=0.4
+    ):
+        return throttling.CubicCalculator(
+            starting_max_rate=starting_max_rate,
+            scale_constant=scale_constant,
+            start_time=0,
+            beta=beta,
+        )
 
     # For these tests, rather than duplicate the formulas in the tests,
     # I want to check against a fixed set of inputs with by-hand verified
@@ -39,9 +42,11 @@ class TestCubicCalculator(unittest.TestC
         self.assertAlmostEqual(cubic.success_received(timestamp=start_k), 10.0)
         # And once we pass start_k, we'll be above w_max.
         self.assertGreaterEqual(
-            cubic.success_received(start_k * 1.1), start_w_max)
+            cubic.success_received(start_k * 1.1), start_w_max
+        )
         self.assertGreaterEqual(
-            cubic.success_received(start_k * 2.0), start_w_max)
+            cubic.success_received(start_k * 2.0), start_w_max
+        )
 
     def test_error_response_decreases_rate_by_beta(self):
         # This is the default value here so we're just being explicit.
@@ -49,16 +54,17 @@ class TestCubicCalculator(unittest.TestC
 
         # So let's say we made it up to 8 TPS before we were throttled.
         rate_when_throttled = 8
-        new_rate = cubic.error_received(current_rate=rate_when_throttled,
-                                        timestamp=1)
+        new_rate = cubic.error_received(
+            current_rate=rate_when_throttled, timestamp=1
+        )
         self.assertAlmostEqual(new_rate, rate_when_throttled * 0.7)
 
         new_params = cubic.get_params_snapshot()
         self.assertEqual(
             new_params,
-            throttling.CubicParams(w_max=rate_when_throttled,
-                                   k=1.8171205928321397,
-                                   last_fail=1)
+            throttling.CubicParams(
+                w_max=rate_when_throttled, k=1.8171205928321397, last_fail=1
+            ),
         )
 
     def test_t_0_should_match_beta_decrease(self):
diff -pruN 2.23.6-1/tests/unit/botocore/test_args.py 2.31.35-1/tests/unit/botocore/test_args.py
--- 2.23.6-1/tests/unit/botocore/test_args.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_args.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,16 +14,21 @@
 import socket
 
 import botocore.config
-from tests import get_botocore_default_config_mapping, mock, unittest
-
-from botocore import args
-from botocore import exceptions
+import pytest
+from botocore import UNSIGNED, args, exceptions
+from botocore.args import ClientConfigString
 from botocore.client import ClientEndpointBridge
 from botocore.config import Config
 from botocore.configprovider import ConfigValueStore
+from botocore.credentials import Credentials
 from botocore.hooks import HierarchicalEmitter
 from botocore.model import ServiceModel
+from botocore.parsers import PROTOCOL_PARSERS
+from botocore.serialize import SERIALIZERS
 from botocore.useragent import UserAgentString
+from botocore.utils import PRIORITY_ORDERED_SUPPORTED_PROTOCOLS
+
+from tests import get_botocore_default_config_mapping, mock, unittest
 
 
 class TestCreateClientArgs(unittest.TestCase):
@@ -66,9 +71,13 @@ class TestCreateClientArgs(unittest.Test
         service_model = mock.Mock(ServiceModel)
         service_model.service_name = service_name
         service_model.endpoint_prefix = service_name
+        service_model.protocol = 'query'
+        service_model.resolved_protocol = 'query'
+        service_model.protocols = ['query']
         service_model.metadata = {
             'serviceFullName': 'MyService',
-            'protocol': 'query'
+            'protocol': 'query',
+            'protocols': ['query'],
         }
         service_model.operation_names = []
         return service_model
@@ -80,7 +89,7 @@ class TestCreateClientArgs(unittest.Test
             'endpoint_url': self.endpoint_url,
             'signing_name': self.service_name,
             'signing_region': self.region,
-            'metadata': {}
+            'metadata': {},
         }
         ret_val.update(**override_kwargs)
         self.bridge.resolve.return_value = ret_val
@@ -109,6 +118,19 @@ class TestCreateClientArgs(unittest.Test
         call_kwargs.update(**override_kwargs)
         return self.args_create.get_client_args(**call_kwargs)
 
+    def call_compute_client_args(self, **override_kwargs):
+        call_kwargs = {
+            'service_model': self.service_model,
+            'client_config': None,
+            'endpoint_bridge': self.bridge,
+            'region_name': self.region,
+            'is_secure': True,
+            'endpoint_url': self.endpoint_url,
+            'scoped_config': {},
+        }
+        call_kwargs.update(**override_kwargs)
+        return self.args_create.compute_client_args(**call_kwargs)
+
     def assert_create_endpoint_call(self, mock_endpoint, **override_kwargs):
         call_kwargs = {
             'endpoint_url': self.endpoint_url,
@@ -132,10 +154,11 @@ class TestCreateClientArgs(unittest.Test
 
     def test_compute_s3_config_only_config_store(self):
         self.config_store.set_config_variable(
-            's3', {'use_accelerate_endpoint': True})
+            's3', {'use_accelerate_endpoint': True}
+        )
         self.assertEqual(
             self.args_create.compute_s3_config(None),
-            {'use_accelerate_endpoint': True}
+            {'use_accelerate_endpoint': True},
         )
 
     def test_client_s3_accelerate_from_client_config(self):
@@ -143,18 +166,19 @@ class TestCreateClientArgs(unittest.Test
             self.args_create.compute_s3_config(
                 client_config=Config(s3={'use_accelerate_endpoint': True})
             ),
-            {'use_accelerate_endpoint': True}
+            {'use_accelerate_endpoint': True},
         )
 
     def test_client_s3_accelerate_client_config_overrides_config_store(self):
         self.config_store.set_config_variable(
-            's3', {'use_accelerate_endpoint': False})
+            's3', {'use_accelerate_endpoint': False}
+        )
         self.assertEqual(
             self.args_create.compute_s3_config(
                 client_config=Config(s3={'use_accelerate_endpoint': True})
             ),
             # client_config beats scoped_config
-            {'use_accelerate_endpoint': True}
+            {'use_accelerate_endpoint': True},
         )
 
     def test_max_pool_from_client_config_forwarded_to_endpoint_creator(self):
@@ -164,8 +188,10 @@ class TestCreateClientArgs(unittest.Test
             self.assert_create_endpoint_call(m, max_pool_connections=20)
 
     def test_proxies_from_client_config_forwarded_to_endpoint_creator(self):
-        proxies = {'http': 'http://foo.bar:1234',
-                   'https': 'https://foo.bar:4321'}
+        proxies = {
+            'http': 'http://foo.bar:1234',
+            'https': 'https://foo.bar:4321',
+        }
         config = botocore.config.Config(proxies=proxies)
         with mock.patch('botocore.args.EndpointCreator') as m:
             self.call_get_client_args(client_config=config)
@@ -176,48 +202,60 @@ class TestCreateClientArgs(unittest.Test
         self.service_model.metadata = {'protocol': 'rest-xml'}
         self.bridge.resolve.side_effect = [
             {
-                'region_name': None, 'signature_version': 's3v4',
-                'endpoint_url': 'http://other.com/', 'signing_name': 's3',
-                'signing_region': None, 'metadata': {}
+                'region_name': None,
+                'signature_version': 's3v4',
+                'endpoint_url': 'http://other.com/',
+                'signing_name': 's3',
+                'signing_region': None,
+                'metadata': {},
             },
             {
-                'region_name': 'us-west-2', 'signature_version': 's3v4',
+                'region_name': 'us-west-2',
+                'signature_version': 's3v4',
                 'enpoint_url': 'https://s3-us-west-2.amazonaws.com',
-                'signing_name': 's3', 'signing_region': 'us-west-2',
-                'metadata': {}
-            }
+                'signing_name': 's3',
+                'signing_region': 'us-west-2',
+                'metadata': {},
+            },
         ]
         client_args = self.call_get_client_args(
-            endpoint_url='http://other.com/')
-        self.assertEqual(
-            client_args['client_config'].region_name, 'us-west-2')
+            endpoint_url='http://other.com/'
+        )
+        self.assertEqual(client_args['client_config'].region_name, 'us-west-2')
 
     def test_region_does_not_resolve_if_not_s3_and_endpoint_url_provided(self):
         self.service_model.endpoint_prefix = 'ec2'
         self.service_model.metadata = {'protocol': 'query'}
-        self.bridge.resolve.side_effect = [{
-            'region_name': None, 'signature_version': 'v4',
-            'endpoint_url': 'http://other.com/', 'signing_name': 'ec2',
-            'signing_region': None, 'metadata': {}
-        }]
+        self.bridge.resolve.side_effect = [
+            {
+                'region_name': None,
+                'signature_version': 'v4',
+                'endpoint_url': 'http://other.com/',
+                'signing_name': 'ec2',
+                'signing_region': None,
+                'metadata': {},
+            }
+        ]
         client_args = self.call_get_client_args(
-            endpoint_url='http://other.com/')
+            endpoint_url='http://other.com/'
+        )
         self.assertEqual(client_args['client_config'].region_name, None)
 
     def test_provide_retry_config(self):
         config = botocore.config.Config(retries={'max_attempts': 10})
         client_args = self.call_get_client_args(client_config=config)
         self.assertEqual(
-            client_args['client_config'].retries['max_attempts'], 10)
+            client_args['client_config'].retries['max_attempts'], 10
+        )
 
     def test_tcp_keepalive_enabled(self):
         scoped_config = {'tcp_keepalive': 'true'}
         with mock.patch('botocore.args.EndpointCreator') as m:
             self.call_get_client_args(scoped_config=scoped_config)
             self.assert_create_endpoint_call(
-                m, socket_options=self.default_socket_options + [
-                    (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
-                ]
+                m,
+                socket_options=self.default_socket_options
+                + [(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)],
             )
 
     def test_tcp_keepalive_not_specified(self):
@@ -225,52 +263,46 @@ class TestCreateClientArgs(unittest.Test
         with mock.patch('botocore.args.EndpointCreator') as m:
             self.call_get_client_args(scoped_config=scoped_config)
             self.assert_create_endpoint_call(
-                m, socket_options=self.default_socket_options)
+                m, socket_options=self.default_socket_options
+            )
 
     def test_tcp_keepalive_explicitly_disabled(self):
         scoped_config = {'tcp_keepalive': 'false'}
         with mock.patch('botocore.args.EndpointCreator') as m:
             self.call_get_client_args(scoped_config=scoped_config)
             self.assert_create_endpoint_call(
-                m, socket_options=self.default_socket_options)
+                m, socket_options=self.default_socket_options
+            )
 
     def test_tcp_keepalive_enabled_case_insensitive(self):
         scoped_config = {'tcp_keepalive': 'True'}
         with mock.patch('botocore.args.EndpointCreator') as m:
             self.call_get_client_args(scoped_config=scoped_config)
             self.assert_create_endpoint_call(
-                m, socket_options=self.default_socket_options + [
-                    (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
-                ]
+                m,
+                socket_options=self.default_socket_options
+                + [(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)],
             )
 
     def test_client_config_has_use_dualstack_endpoint_flag(self):
-        self._set_endpoint_bridge_resolve(
-            metadata={
-                'tags': ['dualstack']
-            }
-        )
+        self._set_endpoint_bridge_resolve(metadata={'tags': ['dualstack']})
         client_args = self.call_get_client_args(
             service_model=self._get_service_model('ec2'),
         )
         self.assertTrue(client_args['client_config'].use_dualstack_endpoint)
 
     def test_client_config_has_use_fips_endpoint_flag(self):
-        self._set_endpoint_bridge_resolve(
-            metadata={
-                'tags': ['fips']
-            }
-        )
+        self._set_endpoint_bridge_resolve(metadata={'tags': ['fips']})
         client_args = self.call_get_client_args(
             service_model=self._get_service_model('ec2'),
         )
         self.assertTrue(client_args['client_config'].use_fips_endpoint)
 
-    def test_client_config_has_both_use_fips_and_use_dualstack__endpoint_flags(self):
+    def test_client_config_has_both_use_fips_and_use_dualstack__endpoint_flags(
+        self,
+    ):
         self._set_endpoint_bridge_resolve(
-            metadata={
-                'tags': ['fips', 'dualstack']
-            }
+            metadata={'tags': ['fips', 'dualstack']}
         )
         client_args = self.call_get_client_args(
             service_model=self._get_service_model('ec2'),
@@ -279,30 +311,29 @@ class TestCreateClientArgs(unittest.Test
         self.assertTrue(client_args['client_config'].use_dualstack_endpoint)
 
     def test_s3_override_use_dualstack_endpoint_flag(self):
-        self._set_endpoint_bridge_resolve(
-            metadata={
-                'tags': ['dualstack']
-            }
-        )
+        self._set_endpoint_bridge_resolve(metadata={'tags': ['dualstack']})
         client_args = self.call_get_client_args(
             service_model=self._get_service_model('s3'),
         )
-        self.assertTrue(client_args['client_config'].s3['use_dualstack_endpoint'])
+        self.assertTrue(
+            client_args['client_config'].s3['use_dualstack_endpoint']
+        )
 
     def test_sts_use_resolved_endpoint_for_regional_configuration(self):
         resolved_endpoint = 'https://resolved-endpoint'
         resolved_region = 'resolved-region'
         self._set_endpoint_bridge_resolve(
-            endpoint_url=resolved_endpoint,
-            signing_region=resolved_region
+            endpoint_url=resolved_endpoint, signing_region=resolved_region
         )
         client_args = self.call_get_client_args(
             service_model=self._get_service_model('sts'),
-            region_name='us-west-2', endpoint_url=None
+            region_name='us-west-2',
+            endpoint_url=None,
         )
         self.assertEqual(client_args['endpoint'].host, resolved_endpoint)
         self.assertEqual(
-            client_args['request_signer'].region_name, resolved_region)
+            client_args['request_signer'].region_name, resolved_region
+        )
 
     def test_can_merge_max_attempts(self):
         self.config_store.set_config_variable('max_attempts', 4)
@@ -311,27 +342,29 @@ class TestCreateClientArgs(unittest.Test
 
     def test_uses_config_value_if_present_for_max_attempts(self):
         config = self.call_get_client_args(
-                client_config=Config(retries={'max_attempts': 2})
+            client_config=Config(retries={'max_attempts': 2})
         )['client_config']
         self.assertEqual(config.retries['max_attempts'], 2)
 
     def test_uses_client_config_over_config_store_max_attempts(self):
         self.config_store.set_config_variable('max_attempts', 4)
         config = self.call_get_client_args(
-                client_config=Config(retries={'max_attempts': 2})
+            client_config=Config(retries={'max_attempts': 2})
         )['client_config']
         self.assertEqual(config.retries['max_attempts'], 2)
 
     def test_max_attempts_matches_config_store_if_retries_is_none(self):
-        config = self.call_get_client_args(
-                client_config=Config(retries=None)
-        )['client_config']
+        config = self.call_get_client_args(client_config=Config(retries=None))[
+            'client_config'
+        ]
         self.assertEqual(
             config.retries,
             {
-                'max_attempts': self.config_store.get_config_variable('max_attempts'),
-                'mode': 'standard'
-            }
+                'max_attempts': self.config_store.get_config_variable(
+                    'max_attempts'
+                ),
+                'mode': 'standard',
+            },
         )
 
     def test_retry_mode_set_on_config_store(self):
@@ -341,14 +374,14 @@ class TestCreateClientArgs(unittest.Test
 
     def test_retry_mode_set_on_client_config(self):
         config = self.call_get_client_args(
-                client_config=Config(retries={'mode': 'standard'})
+            client_config=Config(retries={'mode': 'standard'})
         )['client_config']
         self.assertEqual(config.retries['mode'], 'standard')
 
     def test_client_config_beats_config_store(self):
         self.config_store.set_config_variable('retry_mode', 'other-mode')
         config = self.call_get_client_args(
-                client_config=Config(retries={'mode': 'standard'})
+            client_config=Config(retries={'mode': 'standard'})
         )['client_config']
         self.assertEqual(config.retries['mode'], 'standard')
 
@@ -521,6 +554,108 @@ class TestCreateClientArgs(unittest.Test
         with self.assertRaises(exceptions.InvalidChecksumConfigError):
             self.call_get_client_args()
 
+    def test_account_id_endpoint_mode_set_on_config_store(self):
+        self.config_store.set_config_variable(
+            'account_id_endpoint_mode', 'preferred'
+        )
+        config = self.call_get_client_args()['client_config']
+        self.assertEqual(config.account_id_endpoint_mode, 'preferred')
+
+    def test_account_id_endpoint_mode_set_on_client_config(self):
+        config = self.call_get_client_args(
+            client_config=Config(account_id_endpoint_mode='required')
+        )['client_config']
+        self.assertEqual(config.account_id_endpoint_mode, 'required')
+
+    def test_account_id_endpoint_mode_client_config_overrides_config_store(
+        self,
+    ):
+        self.config_store.set_config_variable(
+            'account_id_endpoint_mode', 'preferred'
+        )
+        config = self.call_get_client_args(
+            client_config=Config(account_id_endpoint_mode='disabled')
+        )['client_config']
+        self.assertEqual(config.account_id_endpoint_mode, 'disabled')
+
+    def test_account_id_endpoint_mode_bad_value(self):
+        with self.assertRaises(exceptions.InvalidConfigError):
+            config = Config(account_id_endpoint_mode='foo')
+            self.call_get_client_args(client_config=config)
+        self.config_store.set_config_variable(
+            'account_id_endpoint_mode', 'foo'
+        )
+        with self.assertRaises(exceptions.InvalidConfigError):
+            self.call_get_client_args()
+
+    def test_account_id_endpoint_mode_disabled_on_unsigned_request(self):
+        self._set_endpoint_bridge_resolve(signature_version=UNSIGNED)
+        config = self.call_get_client_args()['client_config']
+        self.assertEqual(config.account_id_endpoint_mode, 'disabled')
+
+    def test_inject_host_prefix_default_client_config(self):
+        input_config = Config()
+        client_args = self.call_get_client_args(client_config=input_config)
+        config = client_args["client_config"]
+        self.assertEqual(config.inject_host_prefix, True)
+
+    def test_disable_host_prefix_injection_config_store(self):
+        self.config_store.set_config_variable(
+            "disable_host_prefix_injection",
+            True,
+        )
+        config = self.call_get_client_args()['client_config']
+        self.assertEqual(config.inject_host_prefix, False)
+
+    def test_inject_host_prefix_client_config_overrides_config_store(
+        self,
+    ):
+        self.config_store.set_config_variable(
+            "disable_host_prefix_injection",
+            False,
+        )
+        input_config = Config(inject_host_prefix=False)
+        client_args = self.call_get_client_args(client_config=input_config)
+        config = client_args['client_config']
+        self.assertEqual(config.inject_host_prefix, False)
+
+    def test_auth_scheme_preference_set_on_config_store(self):
+        self.config_store.set_config_variable(
+            'auth_scheme_preference', 'scheme1, scheme2 , \tscheme3 \t'
+        )
+        config = self.call_get_client_args()['client_config']
+        self.assertEqual(
+            config.auth_scheme_preference, 'scheme1,scheme2,scheme3'
+        )
+        self.assertNotIsInstance(
+            config.auth_scheme_preference, ClientConfigString
+        )
+
+    def test_auth_scheme_preference_set_on_client_config(self):
+        config = self.call_get_client_args(
+            client_config=Config(
+                auth_scheme_preference='scheme1, scheme2 , \tscheme3 \t'
+            )
+        )['client_config']
+        self.assertEqual(
+            config.auth_scheme_preference, 'scheme1,scheme2,scheme3'
+        )
+        self.assertIsInstance(
+            config.auth_scheme_preference, ClientConfigString
+        )
+
+    def test_auth_scheme_preference_bad_value(self):
+        with self.assertRaises(exceptions.InvalidConfigError):
+            config = Config(
+                auth_scheme_preference=['scheme1', 'scheme2', 'scheme3']
+            )
+            self.call_get_client_args(client_config=config)
+        self.config_store.set_config_variable(
+            'auth_scheme_preference', ['scheme1', 'scheme2', 'scheme3']
+        )
+        with self.assertRaises(exceptions.InvalidConfigError):
+            self.call_get_client_args()
+
 
 class TestEndpointResolverBuiltins(unittest.TestCase):
     def setUp(self):
@@ -564,6 +699,8 @@ class TestEndpointResolverBuiltins(unitt
             'endpoint_bridge': self.bridge,
             'client_endpoint_url': None,
             'legacy_endpoint_url': 'https://my.legacy.endpoint.com',
+            'credentials': None,
+            'account_id_endpoint_mode': 'preferred',
         }
         kwargs = {**defaults, **overrides}
         return self.args_create.compute_endpoint_resolver_builtin_defaults(
@@ -586,6 +723,8 @@ class TestEndpointResolverBuiltins(unitt
             bins['AWS::S3::DisableMultiRegionAccessPoints'], False
         )
         self.assertEqual(bins['SDK::Endpoint'], None)
+        self.assertEqual(bins['AWS::Auth::AccountId'], None)
+        self.assertEqual(bins['AWS::Auth::AccountIdEndpointMode'], 'preferred')
 
     def test_aws_region(self):
         bins = self.call_compute_endpoint_resolver_builtin_defaults(
@@ -734,3 +873,72 @@ class TestEndpointResolverBuiltins(unitt
             legacy_endpoint_url='https://my.legacy.endpoint.com',
         )
         self.assertEqual(bins['SDK::Endpoint'], None)
+
+    def test_account_id_set_with_credentials(self):
+        bins = self.call_compute_endpoint_resolver_builtin_defaults(
+            credentials=Credentials(
+                access_key='foo', secret_key='bar', account_id='baz'
+            )
+        )
+        self.assertEqual(bins['AWS::Auth::AccountId'](), 'baz')
+
+    def test_account_id_endpoint_mode_set_to_disabled(self):
+        bins = self.call_compute_endpoint_resolver_builtin_defaults(
+            account_id_endpoint_mode='disabled'
+        )
+        self.assertEqual(bins['AWS::Auth::AccountIdEndpointMode'], 'disabled')
+
+
+class TestProtocolPriorityList:
+    def test_all_parsers_accounted_for(self):
+        assert set(PRIORITY_ORDERED_SUPPORTED_PROTOCOLS) == set(
+            PROTOCOL_PARSERS.keys()
+        ), (
+            "The map of protocol names to parsers is out of sync with the priority "
+            "ordered list of protocols supported by botocore"
+        )
+
+    def test_all_serializers_accounted_for(self):
+        assert set(PRIORITY_ORDERED_SUPPORTED_PROTOCOLS) == set(
+            SERIALIZERS.keys()
+        ), (
+            "The map of protocol names to serializers is out of sync with the "
+            "priority ordered list of protocols supported by botocore"
+        )
+
+
+@pytest.mark.parametrize(
+    "value, expected",
+    [
+        ("scheme1, scheme2 , \tscheme3 \t", "scheme1,scheme2,scheme3"),
+        (
+            "scheme1, scheme2 \t scheme3 scheme4",
+            "scheme1,scheme2scheme3scheme4",
+        ),
+        (
+            "scheme1, scheme2   scheme3 scheme4     ",
+            "scheme1,scheme2scheme3scheme4",
+        ),
+        (",scheme1,, scheme2\t", "scheme1,scheme2"),
+    ],
+)
+def test_auth_scheme_preference_normalization(value, expected):
+    config_store = ConfigValueStore()
+    config_store.set_config_variable("auth_scheme_preference", value)
+
+    args_creator = args.ClientArgsCreator(
+        event_emitter=None,
+        user_agent=None,
+        response_parser_factory=None,
+        loader=None,
+        exceptions_factory=None,
+        config_store=config_store,
+        user_agent_creator=mock.Mock(),
+    )
+
+    config_kwargs = {}
+    args_creator._compute_auth_scheme_preference_config(
+        client_config=None, config_kwargs=config_kwargs
+    )
+
+    assert config_kwargs["auth_scheme_preference"] == expected
diff -pruN 2.23.6-1/tests/unit/botocore/test_auth_bearer.py 2.31.35-1/tests/unit/botocore/test_auth_bearer.py
--- 2.23.6-1/tests/unit/botocore/test_auth_bearer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_auth_bearer.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,7 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
 from botocore.auth import BearerAuth
 from botocore.awsrequest import AWSRequest
 from botocore.exceptions import NoAuthTokenError
diff -pruN 2.23.6-1/tests/unit/botocore/test_auth_sigv4.py 2.31.35-1/tests/unit/botocore/test_auth_sigv4.py
--- 2.23.6-1/tests/unit/botocore/test_auth_sigv4.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_auth_sigv4.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-
 from botocore.auth import SigV4Auth
 from botocore.awsrequest import AWSRequest
 from botocore.credentials import Credentials
 
+from tests import unittest
+
 SECRET_KEY = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"
 ACCESS_KEY = 'AKIDEXAMPLE'
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_awsrequest.py 2.31.35-1/tests/unit/botocore/test_awsrequest.py
--- 2.23.6-1/tests/unit/botocore/test_awsrequest.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_awsrequest.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,21 +12,28 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import mock, unittest
+import io
 import os
-import tempfile
 import shutil
-import io
 import socket
 import sys
+import tempfile
 
+from botocore.awsrequest import (
+    AWSHTTPConnection,
+    AWSHTTPSConnection,
+    AWSPreparedRequest,
+    AWSRequest,
+    AWSResponse,
+    HeadersDict,
+    create_request_object,
+    prepare_request_dict,
+)
+from botocore.compat import file_type
+from botocore.exceptions import UnseekableStreamError
 from urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool
 
-from botocore.exceptions import UnseekableStreamError
-from botocore.awsrequest import AWSRequest, AWSPreparedRequest, AWSResponse
-from botocore.awsrequest import AWSHTTPConnection, AWSHTTPSConnection, HeadersDict
-from botocore.awsrequest import prepare_request_dict, create_request_object
-from botocore.compat import file_type
+from tests import mock, unittest
 
 
 class IgnoreCloseBytesIO(io.BytesIO):
@@ -34,7 +41,7 @@ class IgnoreCloseBytesIO(io.BytesIO):
         pass
 
 
-class FakeSocket(object):
+class FakeSocket:
     def __init__(self, read_data, fileclass=IgnoreCloseBytesIO):
         self.sent_data = b''
         self.read_data = read_data
@@ -75,7 +82,7 @@ class Unseekable(file_type):
         raise ValueError("Underlying stream does not support seeking.")
 
 
-class Seekable(object):
+class Seekable:
     """This class represents a bare-bones,seekable file-like object
 
     Note it does not include some of the other attributes of other
@@ -84,6 +91,7 @@ class Seekable(object):
     requests will not calculate the content length even though it is still
     possible to calculate it.
     """
+
     def __init__(self, stream):
         self._stream = stream
 
@@ -130,14 +138,14 @@ class TestAWSRequest(unittest.TestCase):
         self.assertEqual(prepared_request.body, 'dead=beef')
 
     def test_can_prepare_dict_body_unicode_values(self):
-        body = {'Text': u'\u30c6\u30b9\u30c8 string'}
+        body = {'Text': '\u30c6\u30b9\u30c8 string'}
         expected_body = 'Text=%E3%83%86%E3%82%B9%E3%83%88+string'
         request = AWSRequest(url='http://example.com/', data=body)
         prepared_request = request.prepare()
         self.assertEqual(prepared_request.body, expected_body)
 
     def test_can_prepare_dict_body_unicode_keys(self):
-        body = {u'\u30c6\u30b9\u30c8': 'string'}
+        body = {'\u30c6\u30b9\u30c8': 'string'}
         expected_body = '%E3%83%86%E3%82%B9%E3%83%88=string'
         request = AWSRequest(url='http://example.com/', data=body)
         prepared_request = request.prepare()
@@ -238,13 +246,16 @@ class TestAWSRequest(unittest.TestCase):
         # we first need to determine if the thing is a file like object.
         # We should not be using an isinstance check.  Instead, we should
         # be using duck type checks.
-        class LooksLikeFile(object):
+        class LooksLikeFile:
             def __init__(self):
                 self.seek_called = False
+
             def read(self, amount=None):
                 pass
+
             def seek(self, where):
                 self.seek_called = True
+
         looks_like_file = LooksLikeFile()
         self.prepared_request.body = looks_like_file
         self.prepared_request.reset_stream()
@@ -259,8 +270,8 @@ class TestAWSResponse(unittest.TestCase)
 
     def set_raw_stream(self, blobs):
         def stream(*args, **kwargs):
-            for blob in blobs:
-                yield blob
+            yield from blobs
+
         self.response.raw.stream.return_value = stream()
 
     def test_content_property(self):
@@ -273,11 +284,11 @@ class TestAWSResponse(unittest.TestCase)
     def test_text_property(self):
         self.set_raw_stream([b'\xe3\x82\xb8\xe3\x83\xa7\xe3\x82\xb0'])
         self.response.headers['content-type'] = 'text/plain; charset=utf-8'
-        self.assertEqual(self.response.text, u'\u30b8\u30e7\u30b0')
+        self.assertEqual(self.response.text, '\u30b8\u30e7\u30b0')
 
     def test_text_property_defaults_utf8(self):
         self.set_raw_stream([b'\xe3\x82\xb8\xe3\x83\xa7\xe3\x82\xb0'])
-        self.assertEqual(self.response.text, u'\u30b8\u30e7\u30b0')
+        self.assertEqual(self.response.text, '\u30b8\u30e7\u30b0')
 
 
 class TestAWSHTTPConnection(unittest.TestCase):
@@ -311,8 +322,9 @@ class TestAWSHTTPConnection(unittest.Tes
 
         response_components = response.split(b' ')
         self.mock_response._read_status.return_value = (
-            response_components[0], int(response_components[1]),
-            response_components[2]
+            response_components[0],
+            int(response_components[1]),
+            response_components[2],
         )
         conn.response_class = mock.Mock()
         conn.response_class.return_value = self.mock_response
@@ -326,8 +338,9 @@ class TestAWSHTTPConnection(unittest.Tes
             conn = AWSHTTPConnection('s3.amazonaws.com', 443)
             conn.sock = s
             wait_mock.return_value = True
-            conn.request('GET', '/bucket/foo', b'body',
-                         {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             response = conn.getresponse()
             # Assert that we waited for the 100-continue response
             self.assertEqual(wait_mock.call_count, 1)
@@ -338,12 +351,18 @@ class TestAWSHTTPConnection(unittest.Tes
         with mock.patch('urllib3.util.wait_for_read') as wait_mock:
             # Shows the server first sending a 100 continue response
             # then a 200 ok response.
-            s = FakeSocket(b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
+            s = FakeSocket(
+                b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n'
+            )
             conn = AWSHTTPConnection('s3.amazonaws.com', 443)
             conn.sock = s
             wait_mock.return_value = True
-            conn.request('GET', '/bucket/foo', io.BytesIO(b'body'),
-                         {'Expect': b'100-continue', 'Content-Length': b'4'})
+            conn.request(
+                'GET',
+                '/bucket/foo',
+                io.BytesIO(b'body'),
+                {'Expect': b'100-continue', 'Content-Length': b'4'},
+            )
             response = conn.getresponse()
             # Now we should verify that our final response is the 200 OK.
             self.assertEqual(response.status, 200)
@@ -363,15 +382,45 @@ class TestAWSHTTPConnection(unittest.Tes
             # actually parse the response instead of getting the
             # default status of 200 which happens when we can't parse
             # the response.
-            s = FakeSocket(b'HTTP/1.1 100 Continue\r\n'
-                           b'Connection: keep-alive\r\n'
-                           b'\r\n'
-                           b'HTTP/1.1 500 Internal Service Error\r\n')
+            s = FakeSocket(
+                b'HTTP/1.1 100 Continue\r\n'
+                b'Connection: keep-alive\r\n'
+                b'\r\n'
+                b'HTTP/1.1 500 Internal Service Error\r\n'
+            )
+            conn = AWSHTTPConnection('s3.amazonaws.com', 443)
+            conn.sock = s
+            wait_mock.return_value = True
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
+            # Assert that we waited for the 100-continue response
+            self.assertEqual(wait_mock.call_count, 1)
+            response = conn.getresponse()
+            self.assertEqual(response.status, 500)
+
+    def test_expect_100_sends_connection_header_optional_continue(self):
+        # When using squid as an HTTP proxy, it will also send
+        # a Connection: keep-alive header back with the 100 continue
+        # response.  We need to ensure we handle this case.
+        with mock.patch('urllib3.util.wait_for_read') as wait_mock:
+            # Shows the server first sending a 100 continue response
+            # then a 500 response.  We're picking 500 to confirm we
+            # actually parse the response instead of getting the
+            # default status of 200 which happens when we can't parse
+            # the response.
+            s = FakeSocket(
+                b'HTTP/1.1 100\r\n'  # HTTP/<version> 100\r\n - excluding reason "Continue"
+                b'Connection: keep-alive\r\n'
+                b'\r\n'
+                b'HTTP/1.1 500 Internal Service Error\r\n'
+            )
             conn = AWSHTTPConnection('s3.amazonaws.com', 443)
             conn.sock = s
             wait_mock.return_value = True
-            conn.request('GET', '/bucket/foo', b'body',
-                         {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             # Assert that we waited for the 100-continue response
             self.assertEqual(wait_mock.call_count, 1)
             response = conn.getresponse()
@@ -385,12 +434,14 @@ class TestAWSHTTPConnection(unittest.Tes
             # then a 200 ok response.
             s = FakeSocket(
                 b'HTTP/1.1 307 Temporary Redirect\r\n'
-                b'Location: http://example.org\r\n')
+                b'Location: http://example.org\r\n'
+            )
             conn = AWSHTTPConnection('s3.amazonaws.com', 443)
             conn.sock = s
             wait_mock.return_value = True
-            conn.request('GET', '/bucket/foo', b'body',
-                         {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             # Assert that we waited for the 100-continue response
             self.assertEqual(wait_mock.call_count, 1)
             response = conn.getresponse()
@@ -403,15 +454,17 @@ class TestAWSHTTPConnection(unittest.Tes
             # then a 200 ok response.
             s = FakeSocket(
                 b'HTTP/1.1 307 Temporary Redirect\r\n'
-                b'Location: http://example.org\r\n')
+                b'Location: http://example.org\r\n'
+            )
             conn = AWSHTTPConnection('s3.amazonaws.com', 443)
             conn.sock = s
             # By settings wait_mock to return False, this indicates
             # that the server did not send any response.  In this situation
             # we should just send the request anyways.
             wait_mock.return_value = False
-            conn.request('GET', '/bucket/foo', b'body',
-                         {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             # Assert that we waited for the 100-continue response
             self.assertEqual(wait_mock.call_count, 1)
             response = conn.getresponse()
@@ -479,7 +532,9 @@ class TestAWSHTTPConnection(unittest.Tes
         conn.sock = s
         # Test that the standard library method was used by patching out
         # the ``_tunnel`` method and seeing if the std lib method was called.
-        with mock.patch('urllib3.connection.HTTPConnection._tunnel') as mock_tunnel:
+        with mock.patch(
+            'urllib3.connection.HTTPConnection._tunnel'
+        ) as mock_tunnel:
             conn._tunnel()
             self.assertTrue(mock_tunnel.called)
 
@@ -489,8 +544,12 @@ class TestAWSHTTPConnection(unittest.Tes
         conn.sock = s
         # Note the combination of unicode 'GET' and
         # bytes 'Utf8-Header' value.
-        conn.request(u'GET', '/bucket/foo', b'body',
-                     headers={"Utf8-Header": b"\xe5\xb0\x8f"})
+        conn.request(
+            'GET',
+            '/bucket/foo',
+            b'body',
+            headers={"Utf8-Header": b"\xe5\xb0\x8f"},
+        )
         response = conn.getresponse()
         self.assertEqual(response.status, 200)
 
@@ -498,7 +557,6 @@ class TestAWSHTTPConnection(unittest.Tes
         # This simulates what urllib3 does with connections
         # in its connection pool logic.
         with mock.patch('urllib3.util.wait_for_read') as wait_mock:
-
             # First fast fail with a 500 response when we first
             # send the expect header.
             s = FakeSocket(b'HTTP/1.1 500 Internal Server Error\r\n')
@@ -506,8 +564,9 @@ class TestAWSHTTPConnection(unittest.Tes
             conn.sock = s
             wait_mock.return_value = True
 
-            conn.request('GET', '/bucket/foo', b'body',
-                        {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             self.assertEqual(wait_mock.call_count, 1)
             response = conn.getresponse()
             self.assertEqual(response.status, 500)
@@ -520,15 +579,17 @@ class TestAWSHTTPConnection(unittest.Tes
 
             # And then a new connection is established.
             new_conn = FakeSocket(
-                b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n')
+                b'HTTP/1.1 100 (Continue)\r\n\r\nHTTP/1.1 200 OK\r\n'
+            )
             conn.sock = new_conn
 
             # And we make a request, we should see the 200 response
             # that was sent back.
             wait_mock.return_value = True
 
-            conn.request('GET', '/bucket/foo', b'body',
-                        {'Expect': b'100-continue'})
+            conn.request(
+                'GET', '/bucket/foo', b'body', {'Expect': b'100-continue'}
+            )
             # Assert that we waited for the 100-continue response
             self.assertEqual(wait_mock.call_count, 2)
             response = conn.getresponse()
@@ -553,44 +614,47 @@ class TestPrepareRequestDict(unittest.Te
         self.base_request_dict = {
             'body': '',
             'headers': {},
-            'method': u'GET',
+            'method': 'GET',
             'query_string': '',
             'url_path': '/',
-            'context': {}
+            'context': {},
         }
 
-    def prepare_base_request_dict(self, request_dict, endpoint_url=None,
-                                  user_agent=None, context=None):
+    def prepare_base_request_dict(
+        self, request_dict, endpoint_url=None, user_agent=None, context=None
+    ):
         self.base_request_dict.update(request_dict)
         context = context or {}
         if user_agent is None:
             user_agent = self.user_agent
         if endpoint_url is None:
             endpoint_url = self.endpoint_url
-        prepare_request_dict(self.base_request_dict, endpoint_url=endpoint_url,
-                             user_agent=user_agent, context=context)
+        prepare_request_dict(
+            self.base_request_dict,
+            endpoint_url=endpoint_url,
+            user_agent=user_agent,
+            context=context,
+        )
 
     def test_prepare_request_dict_for_get(self):
-        request_dict = {
-            'method': u'GET',
-            'url_path': '/'
-        }
+        request_dict = {'method': 'GET', 'url_path': '/'}
         self.prepare_base_request_dict(
-            request_dict, endpoint_url='https://s3.amazonaws.com')
+            request_dict, endpoint_url='https://s3.amazonaws.com'
+        )
         self.assertEqual(self.base_request_dict['method'], 'GET')
-        self.assertEqual(self.base_request_dict['url'],
-                         'https://s3.amazonaws.com/')
-        self.assertEqual(self.base_request_dict['headers']['User-Agent'],
-                         self.user_agent)
+        self.assertEqual(
+            self.base_request_dict['url'], 'https://s3.amazonaws.com/'
+        )
+        self.assertEqual(
+            self.base_request_dict['headers']['User-Agent'], self.user_agent
+        )
 
     def test_prepare_request_dict_for_get_no_user_agent(self):
         self.user_agent = None
-        request_dict = {
-            'method': u'GET',
-            'url_path': '/'
-        }
+        request_dict = {'method': 'GET', 'url_path': '/'}
         self.prepare_base_request_dict(
-            request_dict, endpoint_url='https://s3.amazonaws.com')
+            request_dict, endpoint_url='https://s3.amazonaws.com'
+        )
         self.assertNotIn('User-Agent', self.base_request_dict['headers'])
 
     def test_prepare_request_dict_with_context(self):
@@ -600,14 +664,15 @@ class TestPrepareRequestDict(unittest.Te
 
     def test_query_string_serialized_to_url(self):
         request_dict = {
-            'method': u'GET',
-            'query_string': {u'prefix': u'foo'},
-            'url_path': u'/mybucket'
+            'method': 'GET',
+            'query_string': {'prefix': 'foo'},
+            'url_path': '/mybucket',
         }
         self.prepare_base_request_dict(request_dict)
         self.assertEqual(
             self.base_request_dict['url'],
-            'https://s3.amazonaws.com/mybucket?prefix=foo')
+            'https://s3.amazonaws.com/mybucket?prefix=foo',
+        )
 
     def test_url_path_combined_with_endpoint_url(self):
         # This checks the case where a user specifies and
@@ -615,62 +680,67 @@ class TestPrepareRequestDict(unittest.Te
         # serializer gives us a request_dict that has a url
         # component as well (say from a rest-* service).
         request_dict = {
-            'query_string': {u'prefix': u'foo'},
-            'url_path': u'/mybucket'
+            'query_string': {'prefix': 'foo'},
+            'url_path': '/mybucket',
         }
         endpoint_url = 'https://custom.endpoint/foo/bar'
         self.prepare_base_request_dict(request_dict, endpoint_url)
         self.assertEqual(
             self.base_request_dict['url'],
-            'https://custom.endpoint/foo/bar/mybucket?prefix=foo')
+            'https://custom.endpoint/foo/bar/mybucket?prefix=foo',
+        )
 
     def test_url_path_with_trailing_slash(self):
         self.prepare_base_request_dict(
-            {'url_path': u'/mybucket'},
-            endpoint_url='https://custom.endpoint/foo/bar/')
+            {'url_path': '/mybucket'},
+            endpoint_url='https://custom.endpoint/foo/bar/',
+        )
 
         self.assertEqual(
             self.base_request_dict['url'],
-            'https://custom.endpoint/foo/bar/mybucket')
+            'https://custom.endpoint/foo/bar/mybucket',
+        )
 
     def test_url_path_is_slash(self):
         self.prepare_base_request_dict(
-            {'url_path': u'/'},
-            endpoint_url='https://custom.endpoint/foo/bar/')
+            {'url_path': '/'}, endpoint_url='https://custom.endpoint/foo/bar/'
+        )
 
         self.assertEqual(
-            self.base_request_dict['url'],
-            'https://custom.endpoint/foo/bar/')
+            self.base_request_dict['url'], 'https://custom.endpoint/foo/bar/'
+        )
 
     def test_url_path_is_slash_with_endpoint_url_no_slash(self):
         self.prepare_base_request_dict(
-            {'url_path': u'/'},
-            endpoint_url='https://custom.endpoint/foo/bar')
+            {'url_path': '/'}, endpoint_url='https://custom.endpoint/foo/bar'
+        )
 
         self.assertEqual(
-            self.base_request_dict['url'],
-            'https://custom.endpoint/foo/bar')
+            self.base_request_dict['url'], 'https://custom.endpoint/foo/bar'
+        )
 
     def test_custom_endpoint_with_query_string(self):
         self.prepare_base_request_dict(
-            {'url_path': u'/baz', 'query_string': {'x': 'y'}},
-            endpoint_url='https://custom.endpoint/foo/bar?foo=bar')
+            {'url_path': '/baz', 'query_string': {'x': 'y'}},
+            endpoint_url='https://custom.endpoint/foo/bar?foo=bar',
+        )
 
         self.assertEqual(
             self.base_request_dict['url'],
-            'https://custom.endpoint/foo/bar/baz?foo=bar&x=y')
+            'https://custom.endpoint/foo/bar/baz?foo=bar&x=y',
+        )
 
 
 class TestCreateRequestObject(unittest.TestCase):
     def setUp(self):
         self.request_dict = {
-            'method': u'GET',
-            'query_string': {u'prefix': u'foo'},
-            'url_path': u'/mybucket',
-            'headers': {u'User-Agent': u'my-agent'},
-            'body': u'my body',
-            'url': u'https://s3.amazonaws.com/mybucket?prefix=foo',
-            'context': {'signing': {'region': 'us-west-2'}}
+            'method': 'GET',
+            'query_string': {'prefix': 'foo'},
+            'url_path': '/mybucket',
+            'headers': {'User-Agent': 'my-agent'},
+            'body': 'my body',
+            'url': 'https://s3.amazonaws.com/mybucket?prefix=foo',
+            'context': {'signing': {'region': 'us-west-2'}},
         }
 
     def test_create_request_object(self):
diff -pruN 2.23.6-1/tests/unit/botocore/test_client.py 2.31.35-1/tests/unit/botocore/test_client.py
--- 2.23.6-1/tests/unit/botocore/test_client.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_client.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,30 +11,32 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import io
-import botocore.config
-from tests import get_botocore_default_config_mapping, mock, unittest
 
 import botocore
-from botocore import utils
-from botocore import client
-from botocore.endpoint import DEFAULT_TIMEOUT
-from botocore import hooks
+import botocore.config
+from botocore import client, exceptions, hooks, utils
 from botocore.auth import AUTH_TYPE_MAPS, BaseSigner
 from botocore.client import ClientEndpointBridge
+from botocore.configprovider import (
+    ChainProvider,
+    ConfigValueStore,
+    EnvironmentProvider,
+)
 from botocore.credentials import Credentials
-from botocore.configprovider import ConfigValueStore
-from botocore.configprovider import EnvironmentProvider
-from botocore.configprovider import ChainProvider
-from botocore.exceptions import ParamValidationError
-from botocore.exceptions import InvalidS3AddressingStyleError
-from botocore.exceptions import UnknownSignatureVersionError
-from botocore.exceptions import InvalidRetryConfigurationError
-from botocore.exceptions import InvalidMaxRetryAttemptsError
-from botocore.exceptions import InvalidRetryModeError
+from botocore.endpoint import DEFAULT_TIMEOUT
 from botocore.errorfactory import ClientExceptionsFactory
+from botocore.exceptions import (
+    InvalidMaxRetryAttemptsError,
+    InvalidRetryConfigurationError,
+    InvalidRetryModeError,
+    InvalidS3AddressingStyleError,
+    ParamValidationError,
+    UnknownSignatureVersionError,
+)
 from botocore.stub import Stubber
 from botocore.useragent import UserAgentString
-from botocore import exceptions
+
+from tests import get_botocore_default_config_mapping, mock, unittest
 
 
 class TestAutoGeneratedClient(unittest.TestCase):
@@ -57,7 +59,7 @@ class TestAutoGeneratedClient(unittest.T
                     },
                     'input': {'shape': 'TestOperationRequest'},
                     'errors': [{'shape': 'TestOperationException'}],
-                    'documentation': 'Documents TestOperation'
+                    'documentation': 'Documents TestOperation',
                 }
             },
             'shapes': {
@@ -65,21 +67,23 @@ class TestAutoGeneratedClient(unittest.T
                     'type': 'structure',
                     'required': ['Foo'],
                     'members': {
-                        'Foo': {'shape': 'StringType',
-                                'documentation': 'Documents Foo'},
-                        'Bar': {'shape': 'StringType',
-                                'documentation': 'Documents Bar'},
-                    }
+                        'Foo': {
+                            'shape': 'StringType',
+                            'documentation': 'Documents Foo',
+                        },
+                        'Bar': {
+                            'shape': 'StringType',
+                            'documentation': 'Documents Bar',
+                        },
+                    },
                 },
                 "TestOperationException": {
                     'type': 'structure',
                     'exception': True,
-                    'error': {
-                        'code': 'TestOperationErrorCode'
-                    }
+                    'error': {'code': 'TestOperationErrorCode'},
                 },
-                'StringType': {'type': 'string'}
-            }
+                'StringType': {'type': 'string'},
+            },
         }
         self.endpoint_ruleset = {
             "version": "1.0",
@@ -103,9 +107,9 @@ class TestAutoGeneratedClient(unittest.T
                     "delay": {
                         "type": "exponential",
                         "base": "rand",
-                        "growth_factor": 2
+                        "growth_factor": 2,
                     },
-                    "policies": {}
+                    "policies": {},
                 }
             }
         }
@@ -121,14 +125,17 @@ class TestAutoGeneratedClient(unittest.T
         self.credentials = Credentials('access-key', 'secret-key')
 
         self.endpoint_creator_patch = mock.patch(
-            'botocore.args.EndpointCreator')
+            'botocore.args.EndpointCreator'
+        )
         self.endpoint_creator_cls = self.endpoint_creator_patch.start()
         self.endpoint_creator = self.endpoint_creator_cls.return_value
 
         self.endpoint = mock.Mock()
         self.endpoint.host = 'https://myservice.amazonaws.com'
         self.endpoint.make_request.return_value = (
-            mock.Mock(status_code=200), {})
+            mock.Mock(status_code=200),
+            {},
+        )
         self.endpoint_creator.create_endpoint.return_value = self.endpoint
 
         self.resolver = mock.Mock()
@@ -154,17 +161,22 @@ class TestAutoGeneratedClient(unittest.T
         emitter.emit.return_value = responses
         return emitter
 
-    def create_client_creator(self, endpoint_creator=None, event_emitter=None,
-                              response_parser_factory=None,
-                              endpoint_prefix=None,
-                              exceptions_factory=None,
-                              config_store=None,
-                              user_agent_creator=None,):
+    def create_client_creator(
+        self,
+        endpoint_creator=None,
+        event_emitter=None,
+        response_parser_factory=None,
+        endpoint_prefix=None,
+        exceptions_factory=None,
+        config_store=None,
+        user_agent_creator=None,
+    ):
         if event_emitter is None:
             event_emitter = hooks.HierarchicalEmitter()
         if endpoint_prefix is not None:
-            self.service_description['metadata']['endpointPrefix']\
-                = endpoint_prefix
+            self.service_description['metadata']['endpointPrefix'] = (
+                endpoint_prefix
+            )
         if endpoint_creator is not None:
             self.endpoint_creator_cls.return_value = endpoint_creator
         if exceptions_factory is None:
@@ -180,9 +192,14 @@ class TestAutoGeneratedClient(unittest.T
                 )
             )
         creator = client.ClientCreator(
-            self.loader, self.resolver, 'user-agent', event_emitter,
-            response_parser_factory, exceptions_factory,
-            config_store, user_agent_creator
+            self.loader,
+            self.resolver,
+            'user-agent',
+            event_emitter,
+            response_parser_factory,
+            exceptions_factory,
+            config_store,
+            user_agent_creator,
         )
         return creator
 
@@ -190,8 +207,10 @@ class TestAutoGeneratedClient(unittest.T
         try:
             self.make_api_call_with_missing_param(client)
         except ParamValidationError:
-            self.fail("ParamValidationError shouldn't be raised "
-                      "with validation disabled")
+            self.fail(
+                "ParamValidationError shouldn't be raised "
+                "with validation disabled"
+            )
 
     def make_api_call_with_missing_param(self, service_client):
         # Missing required 'Foo' param.
@@ -200,44 +219,53 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_name(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(service_client.__class__.__name__, 'MyService')
 
     def test_client_name_with_amazon(self):
         self.service_description['metadata']['serviceFullName'] = (
-            'Amazon MyService')
+            'Amazon MyService'
+        )
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(service_client.__class__.__name__, 'MyService')
 
     def test_client_name_using_abreviation(self):
         self.service_description['metadata']['serviceAbbreviation'] = (
-            'Abbreviation')
+            'Abbreviation'
+        )
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(service_client.__class__.__name__, 'Abbreviation')
 
     def test_client_name_with_non_alphabet_characters(self):
         self.service_description['metadata']['serviceFullName'] = (
-            'Amazon My-Service')
+            'Amazon My-Service'
+        )
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(service_client.__class__.__name__, 'MyService')
 
     def test_client_name_with_no_full_name_or_abbreviation(self):
         del self.service_description['metadata']['serviceFullName']
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(service_client.__class__.__name__, 'myservice')
 
     def test_client_generated_from_model(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(hasattr(service_client, 'test_operation'))
 
     def test_client_with_nonstandard_signature_version(self):
@@ -257,7 +285,8 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_method_docstring(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         method_docstring = str(service_client.test_operation.__doc__)
         ref_docstring_lines = [
             'Documents TestOperation',
@@ -269,7 +298,7 @@ class TestAutoGeneratedClient(unittest.T
             ':type Bar: string',
             ':param Bar: Documents Bar',
             ':type Foo: string',
-            ':param Foo: **[REQUIRED]** Documents Foo'
+            ':param Foo: **[REQUIRED]** Documents Foo',
         ]
         for line in ref_docstring_lines:
             self.assertIn(line, method_docstring)
@@ -277,7 +306,8 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_method_help(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         with mock.patch('sys.stdout', io.StringIO()) as mock_stdout:
             help(service_client.test_operation)
         method_docstring = mock_stdout.getvalue()
@@ -291,7 +321,7 @@ class TestAutoGeneratedClient(unittest.T
             ':type Bar: string',
             ':param Bar: Documents Bar',
             ':type Foo: string',
-            ':param Foo: **[REQUIRED]** Documents Foo'
+            ':param Foo: **[REQUIRED]** Documents Foo',
         ]
         for line in ref_docstring_lines:
             self.assertIn(line, method_docstring)
@@ -299,7 +329,8 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_create_unicode(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            u'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(hasattr(service_client, 'test_operation'))
 
     def test_client_has_region_name_on_meta(self):
@@ -307,23 +338,24 @@ class TestAutoGeneratedClient(unittest.T
         region_name = 'us-west-2'
         self.endpoint.region_name = region_name
         service_client = creator.create_client(
-            'myservice', region_name, credentials=self.credentials)
+            'myservice', region_name, credentials=self.credentials
+        )
         self.assertEqual(service_client.meta.region_name, region_name)
 
     def test_client_has_endpoint_url_on_meta(self):
         creator = self.create_client_creator()
         self.endpoint.host = 'https://foo.bar'
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
-        self.assertEqual(service_client.meta.endpoint_url,
-                         'https://foo.bar')
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
+        self.assertEqual(service_client.meta.endpoint_url, 'https://foo.bar')
 
     def test_client_has_standard_partition_on_meta(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
-        self.assertEqual(service_client.meta.partition,
-                         'aws')
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
+        self.assertEqual(service_client.meta.partition, 'aws')
 
     def test_client_has_non_standard_partition_on_meta(self):
         creator = self.create_client_creator()
@@ -334,30 +366,35 @@ class TestAutoGeneratedClient(unittest.T
             'signatureVersions': ['v4'],
         }
         service_client = creator.create_client(
-            'myservice', 'cn-north-1', credentials=self.credentials)
-        self.assertEqual(service_client.meta.partition,
-                         'aws-cn')
+            'myservice', 'cn-north-1', credentials=self.credentials
+        )
+        self.assertEqual(service_client.meta.partition, 'aws-cn')
 
     def test_client_has_exceptions_attribute(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(hasattr(service_client, 'exceptions'))
 
     def test_client_has_modeled_exceptions(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertTrue(
-            issubclass(service_client.exceptions.TestOperationException,
-                       client.ClientError)
+            issubclass(
+                service_client.exceptions.TestOperationException,
+                client.ClientError,
+            )
         )
 
     def test_client_fips_region_transformation(self):
         creator = self.create_client_creator()
         with self.assertLogs('botocore.client', level='WARNING') as log:
             creator.create_client(
-                'myservice', 'fips-us-west-2', credentials=self.credentials)
+                'myservice', 'fips-us-west-2', credentials=self.credentials
+            )
             self.assertIn('fips-us-west-2 to us-west-2', log.output[0])
 
     def test_create_client_class_creates_class(self):
@@ -373,11 +410,14 @@ class TestAutoGeneratedClient(unittest.T
                 'hostname': 'endpoint.url',
                 'endpointName': 'us-west-2',
                 'signatureVersions': ['v4'],
-                'credentialScope': {'region': credential_scope_region,}
+                'credentialScope': {
+                    'region': credential_scope_region,
+                },
             }
             creator = self.create_client_creator()
             service_client = creator.create_client(
-                'myservice', 'us-west-2', credentials=self.credentials)
+                'myservice', 'us-west-2', credentials=self.credentials
+            )
             self.assertEqual(service_client.meta.region_name, 'us-west-2')
             call_args = mock_signer.call_args
             self.assertEqual(credential_scope_region, call_args[0][1])
@@ -390,12 +430,14 @@ class TestAutoGeneratedClient(unittest.T
                 'endpointName': 'us-west-2',
                 'hostname': 'endpoint.url',
                 'signatureVersions': ['v4'],
-                'credentialScope': {'region': credential_scope_region}
+                'credentialScope': {'region': credential_scope_region},
             }
             creator = self.create_client_creator()
             service_client = creator.create_client(
-                service_name='myservice', region_name='us-west-2',
-                credentials=self.credentials)
+                service_name='myservice',
+                region_name='us-west-2',
+                credentials=self.credentials,
+            )
             # Use the resolved region as the region value.
             self.assertEqual(service_client.meta.region_name, 'us-west-2')
             # Ensure that we use the credential scope region for signing,
@@ -410,12 +452,14 @@ class TestAutoGeneratedClient(unittest.T
                 'endpointName': 'us-west-2',
                 'hostname': 'endpoint.url',
                 'signatureVersions': ['v4'],
-                'credentialScope': {'service': 'override'}
+                'credentialScope': {'service': 'override'},
             }
             creator = self.create_client_creator()
-            service_client = creator.create_client(
-                service_name='myservice', region_name='us-west-2',
-                credentials=self.credentials)
+            creator.create_client(
+                service_name='myservice',
+                region_name='us-west-2',
+                credentials=self.credentials,
+            )
             call_args = mock_signer.call_args
             self.assertEqual('MyService', call_args[0][0])
             self.assertEqual('override', call_args[0][2])
@@ -428,12 +472,15 @@ class TestAutoGeneratedClient(unittest.T
                 'endpointName': 'us-west-2',
                 'hostname': 'endpoint.url',
                 'signatureVersions': ['v4'],
-                'credentialScope': {'region': credential_scope_region}
+                'credentialScope': {'region': credential_scope_region},
             }
             creator = self.create_client_creator()
             service_client = creator.create_client(
-                service_name='myservice', region_name='us-west-2',
-                credentials=self.credentials, endpoint_url='https://foo')
+                service_name='myservice',
+                region_name='us-west-2',
+                credentials=self.credentials,
+                endpoint_url='https://foo',
+            )
             self.assertEqual(service_client.meta.region_name, 'us-west-2')
             call_args = mock_signer.call_args
             self.assertEqual('us-west-2', call_args[0][1])
@@ -449,8 +496,11 @@ class TestAutoGeneratedClient(unittest.T
             }
             creator = self.create_client_creator()
             service_client = creator.create_client(
-                service_name='myservice', region_name='us-west-2',
-                credentials=self.credentials, endpoint_url='https://foo')
+                service_name='myservice',
+                region_name='us-west-2',
+                credentials=self.credentials,
+                endpoint_url='https://foo',
+            )
             self.assertEqual(service_client.meta.region_name, 'us-west-2')
             call_args = mock_signer.call_args[0]
             self.assertEqual('otherName', call_args[2])
@@ -461,8 +511,11 @@ class TestAutoGeneratedClient(unittest.T
             self.resolver.construct_endpoint.return_value = {}
             creator = self.create_client_creator()
             service_client = creator.create_client(
-                service_name='myservice', region_name='us-west-2',
-                credentials=self.credentials, endpoint_url='https://foo')
+                service_name='myservice',
+                region_name='us-west-2',
+                credentials=self.credentials,
+                endpoint_url='https://foo',
+            )
             self.assertEqual(service_client.meta.region_name, 'us-west-2')
             call_args = mock_signer.call_args[0]
             self.assertEqual('otherName', call_args[2])
@@ -471,44 +524,57 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_signature_no_override(self, request_signer):
         creator = self.create_client_creator()
         creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            scoped_config={})
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            scoped_config={},
+        )
         request_signer.assert_called_with(
-            mock.ANY, mock.ANY, mock.ANY, 'v4', mock.ANY, mock.ANY, mock.ANY)
+            mock.ANY, mock.ANY, mock.ANY, 'v4', mock.ANY, mock.ANY, mock.ANY
+        )
 
     @mock.patch('botocore.args.RequestSigner')
     def test_client_signature_override_config_file(self, request_signer):
         creator = self.create_client_creator()
-        config = {
-            'myservice': {'signature_version': 'foo'}
-        }
+        config = {'myservice': {'signature_version': 'foo'}}
         creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            scoped_config=config)
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            scoped_config=config,
+        )
         request_signer.assert_called_with(
-            mock.ANY, mock.ANY, mock.ANY, 'foo', mock.ANY, mock.ANY, mock.ANY)
+            mock.ANY, mock.ANY, mock.ANY, 'foo', mock.ANY, mock.ANY, mock.ANY
+        )
 
     @mock.patch('botocore.args.RequestSigner')
     def test_client_signature_override_arg(self, request_signer):
         creator = self.create_client_creator()
         config = botocore.config.Config(signature_version='foo')
         creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            client_config=config)
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            client_config=config,
+        )
         request_signer.assert_called_with(
-            mock.ANY, mock.ANY, mock.ANY, 'foo', mock.ANY, mock.ANY, mock.ANY)
+            mock.ANY, mock.ANY, mock.ANY, 'foo', mock.ANY, mock.ANY, mock.ANY
+        )
 
     def test_client_method_to_api_mapping(self):
         creator = self.create_client_creator()
         service_client = creator.create_client('myservice', 'us-west-2')
-        self.assertEqual(service_client.meta.method_to_api_mapping,
-                         {'test_operation': 'TestOperation'})
+        self.assertEqual(
+            service_client.meta.method_to_api_mapping,
+            {'test_operation': 'TestOperation'},
+        )
 
     def test_anonymous_client_request(self):
         creator = self.create_client_creator()
         config = botocore.config.Config(signature_version=botocore.UNSIGNED)
         service_client = creator.create_client(
-            'myservice', 'us-west-2', client_config=config)
+            'myservice', 'us-west-2', client_config=config
+        )
 
         service_client.test_operation(Foo='one')
 
@@ -518,41 +584,48 @@ class TestAutoGeneratedClient(unittest.T
         # Make sure the request parameters do NOT include auth
         # information. The service defined above for these tests
         # uses sigv4 by default (which we disable).
-        params = dict((k.lower(), v) for k, v in
-                      self.endpoint.make_request.call_args[0][1].items())
+        params = dict(
+            (k.lower(), v)
+            for k, v in self.endpoint.make_request.call_args[0][1].items()
+        )
         self.assertNotIn('authorization', params)
         self.assertNotIn('x-amz-signature', params)
 
     def test_client_user_agent_in_request(self):
         creator = self.create_client_creator()
-        service_client = creator.create_client(
-            'myservice', 'us-west-2')
+        service_client = creator.create_client('myservice', 'us-west-2')
 
         service_client.test_operation(Foo='one')
 
         self.assertTrue(self.endpoint.make_request.called)
-        params = dict((k.lower(), v) for k, v in
-                      self.endpoint.make_request.call_args[0][1].items())
+        params = dict(
+            (k.lower(), v)
+            for k, v in self.endpoint.make_request.call_args[0][1].items()
+        )
         self.assertIn('MyUserAgent/1.2.3', params['headers']['User-Agent'])
-        
+
     def test_client_custom_user_agent_in_request(self):
         creator = self.create_client_creator()
         config = botocore.config.Config(user_agent='baz')
         service_client = creator.create_client(
-            'myservice', 'us-west-2', client_config=config)
+            'myservice', 'us-west-2', client_config=config
+        )
 
         service_client.test_operation(Foo='one')
 
         self.assertTrue(self.endpoint.make_request.called)
-        params = dict((k.lower(), v) for k, v in
-                      self.endpoint.make_request.call_args[0][1].items())
+        params = dict(
+            (k.lower(), v)
+            for k, v in self.endpoint.make_request.call_args[0][1].items()
+        )
         self.assertEqual(params['headers']['User-Agent'], 'baz')
 
     def test_client_custom_user_agent_extra_in_request(self):
         creator = self.create_client_creator()
         config = botocore.config.Config(user_agent_extra='extrastuff')
         service_client = creator.create_client(
-            'myservice', 'us-west-2', client_config=config)
+            'myservice', 'us-west-2', client_config=config
+        )
         service_client.test_operation(Foo='one')
         headers = self.endpoint.make_request.call_args[0][1]['headers']
         self.assertTrue(headers['User-Agent'].endswith('extrastuff'))
@@ -561,15 +634,18 @@ class TestAutoGeneratedClient(unittest.T
         event_emitter = self.create_mock_emitter()
         creator = self.create_client_creator(event_emitter=event_emitter)
         creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         self.assertIn(
             mock.call('request-created.myservice', mock.ANY),
-            event_emitter.register.call_args_list)
+            event_emitter.register.call_args_list,
+        )
 
     def test_client_makes_call(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         self.assertTrue(self.endpoint_creator.create_endpoint.called)
 
@@ -579,16 +655,19 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_error_message_for_positional_args(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         with self.assertRaisesRegex(
-                TypeError, 'only accepts keyword arguments'):
+            TypeError, 'only accepts keyword arguments'
+        ):
             service_client.test_operation('foo')
 
     @mock.patch('botocore.args.RequestSigner.sign')
     def test_client_signs_call(self, signer_mock):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         request = mock.Mock()
 
         # Emit the request created event to see if it would be signed.
@@ -596,17 +675,19 @@ class TestAutoGeneratedClient(unittest.T
         # a client is created. This prevents testing the entire client
         # call logic.
         service_client.meta.events.emit(
-            'request-created.myservice.test_operation', request=request,
-            operation_name='test_operation')
+            'request-created.myservice.test_operation',
+            request=request,
+            operation_name='test_operation',
+        )
 
-        signer_mock.assert_called_with(
-            'test_operation', request)
+        signer_mock.assert_called_with('test_operation', request)
 
     def test_client_validates_params_by_default(self):
         creator = self.create_client_creator()
 
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         with self.assertRaises(ParamValidationError):
             self.make_api_call_with_missing_param(service_client)
 
@@ -616,16 +697,22 @@ class TestAutoGeneratedClient(unittest.T
         client_config = botocore.config.Config()
         client_config.parameter_validation = False
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            client_config=client_config)
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            client_config=client_config,
+        )
 
         self.assert_no_param_error_raised(service_client)
 
     def test_can_disable_param_validation_from_scoped_config(self):
         creator = self.create_client_creator()
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            scoped_config={'parameter_validation': False})
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            scoped_config={'parameter_validation': False},
+        )
         self.assert_no_param_error_raised(service_client)
 
     def test_client_config_trumps_scoped_config(self):
@@ -634,41 +721,55 @@ class TestAutoGeneratedClient(unittest.T
         client_config = botocore.config.Config(parameter_validation=False)
         # Client config should win and param validation is disabled.
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials,
-            scoped_config=scoped_config, client_config=client_config)
+            'myservice',
+            'us-west-2',
+            credentials=self.credentials,
+            scoped_config=scoped_config,
+            client_config=client_config,
+        )
         self.assert_no_param_error_raised(service_client)
 
     def test_client_with_custom_both_timeout(self):
         self.create_client_creator().create_client(
-            'myservice', 'us-west-2',
-            client_config=botocore.config.Config(connect_timeout=123, read_timeout=234))
+            'myservice',
+            'us-west-2',
+            client_config=botocore.config.Config(
+                connect_timeout=123, read_timeout=234
+            ),
+        )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertEqual(call_kwargs['timeout'], (123, 234))
 
     def test_client_with_custom_connect_timeout(self):
         self.create_client_creator().create_client(
-            'myservice', 'us-west-2',
-            client_config=botocore.config.Config(connect_timeout=123))
+            'myservice',
+            'us-west-2',
+            client_config=botocore.config.Config(connect_timeout=123),
+        )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertEqual(call_kwargs['timeout'], (123, DEFAULT_TIMEOUT))
 
     def test_client_with_custom_read_timeout(self):
         self.create_client_creator().create_client(
-            'myservice', 'us-west-2',
-            client_config=botocore.config.Config(read_timeout=234))
+            'myservice',
+            'us-west-2',
+            client_config=botocore.config.Config(read_timeout=234),
+        )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertEqual(call_kwargs['timeout'], (DEFAULT_TIMEOUT, 234))
 
     def test_client_with_custom_neither_timeout(self):
         self.create_client_creator().create_client('myservice', 'us-west-2')
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
-        self.assertEqual(call_kwargs['timeout'],
-                         (DEFAULT_TIMEOUT, DEFAULT_TIMEOUT))
+        self.assertEqual(
+            call_kwargs['timeout'], (DEFAULT_TIMEOUT, DEFAULT_TIMEOUT)
+        )
 
     def test_client_with_custom_params(self):
         creator = self.create_client_creator()
-        creator.create_client('myservice', 'us-west-2',
-                              is_secure=False, verify=False)
+        creator.create_client(
+            'myservice', 'us-west-2', is_secure=False, verify=False
+        )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertFalse(call_kwargs['verify'])
         self.assertNotIn('is_secure', call_kwargs)
@@ -677,19 +778,23 @@ class TestAutoGeneratedClient(unittest.T
         proxies_config = {
             'proxy_ca_bundle': 'foo_ca_bundle',
             'proxy_client_cert': 'foo_cert',
-            'proxy_use_forwarding_for_https': False
+            'proxy_use_forwarding_for_https': False,
         }
         self.create_client_creator().create_client(
-            'myservice', 'us-west-2',
-            client_config=botocore.config.Config(proxies_config=proxies_config)
+            'myservice',
+            'us-west-2',
+            client_config=botocore.config.Config(
+                proxies_config=proxies_config
+            ),
         )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertEqual(call_kwargs['proxies_config'], proxies_config)
 
     def test_client_with_endpoint_url(self):
         creator = self.create_client_creator()
-        creator.create_client('myservice', 'us-west-2',
-                              endpoint_url='http://custom.foo')
+        creator.create_client(
+            'myservice', 'us-west-2', endpoint_url='http://custom.foo'
+        )
         call_kwargs = self.endpoint_creator.create_endpoint.call_args[1]
         self.assertEqual(call_kwargs['endpoint_url'], 'http://custom.foo')
 
@@ -718,7 +823,7 @@ class TestAutoGeneratedClient(unittest.T
                     "output_token": "Marker",
                     "more_results": "IsTruncated",
                     "limit_key": "MaxItems",
-                    "result_key": "Users"
+                    "result_key": "Users",
                 }
             }
         }
@@ -739,7 +844,7 @@ class TestAutoGeneratedClient(unittest.T
                     "output_token": "Marker",
                     "more_results": "IsTruncated",
                     "limit_key": "MaxItems",
-                    "result_key": "Users"
+                    "result_key": "Users",
                 }
             }
         }
@@ -769,10 +874,7 @@ class TestAutoGeneratedClient(unittest.T
         self.assertFalse(service_client.can_paginate('test_operation'))
 
     def test_waiter_config_uses_service_name_not_endpoint_prefix(self):
-        waiter_config = {
-            'version': 2,
-            'waiters': {}
-        }
+        waiter_config = {'version': 2, 'waiters': {}}
         self.loader.load_service_model.side_effect = [
             self.service_description,
             self.endpoint_ruleset,
@@ -782,13 +884,15 @@ class TestAutoGeneratedClient(unittest.T
         # We're going to verify that the loader loads a service called
         # 'other-service-name', and even though the endpointPrefix is
         # 'myservice', we use 'other-service-name' for waiters/paginators, etc.
-        service_client = creator.create_client('other-service-name',
-                                               'us-west-2')
+        service_client = creator.create_client(
+            'other-service-name', 'us-west-2'
+        )
         self.assertEqual(service_client.waiter_names, [])
         # Note we're using other-service-name, not
         # 'myservice', which is the endpointPrefix.
         self.loader.load_service_model.assert_called_with(
-            'other-service-name', 'waiters-2')
+            'other-service-name', 'waiters-2'
+        )
 
     def test_service_has_waiter_configs(self):
         waiter_config = {
@@ -806,7 +910,7 @@ class TestAutoGeneratedClient(unittest.T
                     'maxAttempts': 20,
                     'acceptors': [],
                 },
-            }
+            },
         }
         self.loader.load_service_model.side_effect = [
             self.service_description,
@@ -815,8 +919,9 @@ class TestAutoGeneratedClient(unittest.T
         ]
         creator = self.create_client_creator()
         service_client = creator.create_client('myservice', 'us-west-2')
-        self.assertEqual(sorted(service_client.waiter_names),
-                         sorted(['waiter1', 'waiter2']))
+        self.assertEqual(
+            sorted(service_client.waiter_names), sorted(['waiter1', 'waiter2'])
+        )
         self.assertTrue(hasattr(service_client.get_waiter('waiter1'), 'wait'))
 
     def test_service_has_no_waiter_configs(self):
@@ -838,8 +943,10 @@ class TestAutoGeneratedClient(unittest.T
         creator.create_client('myservice', 'us-west-2')
 
         event_emitter.register.assert_any_call(
-            'needs-retry.myservice', mock.ANY,
-            unique_id='retry-config-myservice')
+            'needs-retry.myservice',
+            mock.ANY,
+            unique_id='retry-config-myservice',
+        )
 
     def test_emits_after_call_error(self):
         event_emitter = hooks.HierarchicalEmitter()
@@ -850,7 +957,8 @@ class TestAutoGeneratedClient(unittest.T
             recorded_kwargs.append(kwargs)
 
         event_emitter.register(
-            'after-call-error.myservice.TestOperation', record)
+            'after-call-error.myservice.TestOperation', record
+        )
 
         raised_error = RuntimeError('Unexpected error')
         self.endpoint.make_request.side_effect = raised_error
@@ -859,16 +967,19 @@ class TestAutoGeneratedClient(unittest.T
         with self.assertRaises(RuntimeError):
             client.test_operation(Foo='one', Bar='two')
         self.assertEqual(
-            recorded_kwargs,
-            [{'exception': raised_error, 'context': mock.ANY}])
+            recorded_kwargs, [{'exception': raised_error, 'context': mock.ANY}]
+        )
 
     def test_can_register_standard_retry_mode(self):
         with mock.patch('botocore.client.standard') as standard:
             creator = self.create_client_creator()
             creator.create_client(
-                'myservice', 'us-west-2',
+                'myservice',
+                'us-west-2',
                 client_config=botocore.config.Config(
-                    retries={'mode': 'standard'}))
+                    retries={'mode': 'standard'}
+                ),
+            )
         self.assertTrue(standard.register_retry_handler.called)
 
     def test_can_register_standard_retry_mode_from_config_store(self):
@@ -880,7 +991,7 @@ class TestAutoGeneratedClient(unittest.T
         config_store = ConfigValueStore(mapping=default_config_mapping)
         creator = self.create_client_creator(config_store=config_store)
         with mock.patch('botocore.client.standard') as standard:
-            creator.create_client( 'myservice', 'us-west-2')
+            creator.create_client('myservice', 'us-west-2')
         self.assertTrue(standard.register_retry_handler.called)
 
     def test_try_to_paginate_non_paginated(self):
@@ -902,7 +1013,7 @@ class TestAutoGeneratedClient(unittest.T
                     "output_token": "Marker",
                     "more_results": "IsTruncated",
                     "limit_key": "MaxItems",
-                    "result_key": "Users"
+                    "result_key": "Users",
                 }
             }
         }
@@ -926,7 +1037,7 @@ class TestAutoGeneratedClient(unittest.T
                     "output_token": "Marker",
                     "more_results": "IsTruncated",
                     "limit_key": "MaxItems",
-                    "result_key": "Users"
+                    "result_key": "Users",
                 }
             }
         }
@@ -939,8 +1050,8 @@ class TestAutoGeneratedClient(unittest.T
         service_client = creator.create_client('myservice', 'us-west-2')
         paginator = service_client.get_paginator('test_operation')
         self.assertEqual(
-            paginator.__class__.__name__,
-            'MyService.Paginator.TestOperation')
+            paginator.__class__.__name__, 'MyService.Paginator.TestOperation'
+        )
 
     def test_paginator_help_from_client(self):
         pagination_config = {
@@ -1013,10 +1124,13 @@ class TestAutoGeneratedClient(unittest.T
     def test_can_set_credentials_in_client_init(self):
         creator = self.create_client_creator()
         credentials = Credentials(
-            access_key='access_key', secret_key='secret_key',
-            token='session_token')
+            access_key='access_key',
+            secret_key='secret_key',
+            token='session_token',
+        )
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=credentials)
+            'myservice', 'us-west-2', credentials=credentials
+        )
 
         # Verify that we create an endpoint with a credentials object
         # matching our creds arguments.
@@ -1027,11 +1141,15 @@ class TestAutoGeneratedClient(unittest.T
         creator = self.create_client_creator(event_emitter=event_emitter)
 
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         event_emitter.register('before-call', handler)
 
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         service_client.test_operation(Foo='one', Bar='two')
         self.assertEqual(len(calls), 1)
 
@@ -1040,15 +1158,21 @@ class TestAutoGeneratedClient(unittest.T
         creator = self.create_client_creator(event_emitter=event_emitter)
 
         first_calls = []
-        first_handler = lambda **kwargs: first_calls.append(kwargs)
+
+        def first_handler(**kwargs):
+            return first_calls.append(kwargs)
 
         second_calls = []
-        second_handler = lambda **kwargs: second_calls.append(kwargs)
+
+        def second_handler(**kwargs):
+            return second_calls.append(kwargs)
 
         first_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         second_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         first_client.meta.events.register('before-call', first_handler)
         second_client.meta.events.register('before-call', second_handler)
@@ -1079,20 +1203,25 @@ class TestAutoGeneratedClient(unittest.T
         # So if an event handler is registered before any clients are created:
 
         base_calls = []
-        base_handler = lambda **kwargs: base_calls.append(kwargs)
+
+        def base_handler(**kwargs):
+            return base_calls.append(kwargs)
+
         event_emitter.register('before-call', base_handler)
 
         # Then any client created from this point forward from the
         # event_emitter passed into the ClientCreator will have this
         # handler.
         first_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         first_client.test_operation(Foo='one', Bar='two')
         self.assertEqual(len(base_calls), 1)
 
         # Same thing if we create another client.
         second_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         second_client.test_operation(Foo='one', Bar='two')
         self.assertEqual(len(base_calls), 2)
 
@@ -1104,11 +1233,15 @@ class TestAutoGeneratedClient(unittest.T
 
         # 1. Create a client.
         first_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         # 2. Now register an event handler from the originating event emitter.
         base_calls = []
-        base_handler = lambda **kwargs: base_calls.append(kwargs)
+
+        def base_handler(**kwargs):
+            return base_calls.append(kwargs)
+
         event_emitter.register('before-call', base_handler)
 
         # 3. The client will _not_ see this because it already has its
@@ -1172,7 +1305,8 @@ class TestAutoGeneratedClient(unittest.T
 
         creator = self.create_client_creator(event_emitter=event_emitter)
         creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         self.assertEqual(len(called), 1)
         self.assertIn('test_operation', called[0])
@@ -1186,12 +1320,14 @@ class TestAutoGeneratedClient(unittest.T
             return new_params
 
         event_emitter.register(
-            'provide-client-params.myservice.TestOperation', inject_params)
+            'provide-client-params.myservice.TestOperation', inject_params
+        )
 
         wrapped_emitter = mock.Mock(wraps=event_emitter)
         creator = self.create_client_creator(event_emitter=wrapped_emitter)
         service_client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         params = {'Foo': 'one', 'Bar': 'two'}
         service_client.test_operation(**params)
@@ -1211,16 +1347,19 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_s3_addressing_style_with_config(self):
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
-            client_config=botocore.config.Config(s3={'addressing_style': 'auto'})
+            'myservice',
+            'us-west-2',
+            client_config=botocore.config.Config(
+                s3={'addressing_style': 'auto'}
+            ),
         )
-        self.assertEqual(
-            my_client.meta.config.s3['addressing_style'], 'auto')
+        self.assertEqual(my_client.meta.config.s3['addressing_style'], 'auto')
 
     def test_client_s3_addressing_style_with_bad_value(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2',
+            'myservice',
+            'us-west-2',
             scoped_config={'s3': ''},
         )
         self.assertIsNone(client.meta.config.s3)
@@ -1231,8 +1370,7 @@ class TestAutoGeneratedClient(unittest.T
         )
         creator = self.create_client_creator()
         client = creator.create_client('myservice', 'us-west-2')
-        self.assertEqual(
-            client.meta.config.s3['addressing_style'], 'virtual')
+        self.assertEqual(client.meta.config.s3['addressing_style'], 'virtual')
 
     def test_client_s3_addressing_style_with_incorrect_style(self):
         with self.assertRaises(InvalidS3AddressingStyleError):
@@ -1240,15 +1378,17 @@ class TestAutoGeneratedClient(unittest.T
 
     def test_client_s3_addressing_style_config_overrides_config_store(self):
         self.config_store.set_config_variable(
-            's3', {'addressing_style': 'virtual'})
+            's3', {'addressing_style': 'virtual'}
+        )
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
+            'myservice',
+            'us-west-2',
             client_config=botocore.config.Config(
-                s3={'addressing_style': 'auto'})
+                s3={'addressing_style': 'auto'}
+            ),
         )
-        self.assertEqual(
-            my_client.meta.config.s3['addressing_style'], 'auto')
+        self.assertEqual(my_client.meta.config.s3['addressing_style'], 'auto')
 
     def test_client_payload_signing_from_config_store(self):
         self.config_store.set_config_variable(
@@ -1257,28 +1397,31 @@ class TestAutoGeneratedClient(unittest.T
         creator = self.create_client_creator()
         my_client = creator.create_client('myservice', 'us-west-2')
         self.assertEqual(
-            my_client.meta.config.s3['payload_signing_enabled'], True)
+            my_client.meta.config.s3['payload_signing_enabled'], True
+        )
 
     def test_client_payload_signing_from_client_config(self):
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
-            client_config=client.Config(s3={'payload_signing_enabled': True})
-
+            'myservice',
+            'us-west-2',
+            client_config=client.Config(s3={'payload_signing_enabled': True}),
         )
         self.assertEqual(
-            my_client.meta.config.s3['payload_signing_enabled'], True)
+            my_client.meta.config.s3['payload_signing_enabled'], True
+        )
 
     def test_client_payload_signing_client_config_overrides_scoped(self):
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
+            'myservice',
+            'us-west-2',
             scoped_config={'s3': {'payload_signing_enabled': False}},
-            client_config=client.Config(s3={'payload_signing_enabled': True})
-
+            client_config=client.Config(s3={'payload_signing_enabled': True}),
         )
         self.assertEqual(
-            my_client.meta.config.s3['payload_signing_enabled'], True)
+            my_client.meta.config.s3['payload_signing_enabled'], True
+        )
 
     def test_client_s3_accelerate_from_config_store(self):
         self.config_store.set_config_variable(
@@ -1287,17 +1430,19 @@ class TestAutoGeneratedClient(unittest.T
         creator = self.create_client_creator()
         my_client = creator.create_client('myservice', 'us-west-2')
         self.assertEqual(
-            my_client.meta.config.s3['use_accelerate_endpoint'], True)
+            my_client.meta.config.s3['use_accelerate_endpoint'], True
+        )
 
     def test_client_s3_accelerate_from_client_config(self):
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
-            client_config=client.Config(s3={'use_accelerate_endpoint': True})
-
+            'myservice',
+            'us-west-2',
+            client_config=client.Config(s3={'use_accelerate_endpoint': True}),
         )
         self.assertEqual(
-            my_client.meta.config.s3['use_accelerate_endpoint'], True)
+            my_client.meta.config.s3['use_accelerate_endpoint'], True
+        )
 
     def test_client_s3_accelerate_client_config_overrides_config_store(self):
         self.config_store.set_config_variable(
@@ -1305,23 +1450,24 @@ class TestAutoGeneratedClient(unittest.T
         )
         creator = self.create_client_creator()
         my_client = creator.create_client(
-            'myservice', 'us-west-2',
-            client_config=client.Config(s3={'use_accelerate_endpoint': True})
-
+            'myservice',
+            'us-west-2',
+            client_config=client.Config(s3={'use_accelerate_endpoint': True}),
         )
         self.assertEqual(
-            my_client.meta.config.s3['use_accelerate_endpoint'], True)
+            my_client.meta.config.s3['use_accelerate_endpoint'], True
+        )
 
     def test_before_call_short_circuits_request(self):
         def return_mock_tuple(**kwargs):
             http_mock = mock.Mock()
             http_mock.status_code = 200
             return http_mock, mock.Mock()
+
         emitter = hooks.HierarchicalEmitter()
         emitter.register_last('before-call.*.*', return_mock_tuple)
         creator = self.create_client_creator(event_emitter=emitter)
-        service_client = creator.create_client(
-            'myservice', 'us-west-2')
+        service_client = creator.create_client('myservice', 'us-west-2')
 
         service_client.test_operation(Foo='one')
         self.assertFalse(self.endpoint.make_request.called)
@@ -1341,7 +1487,7 @@ class TestAutoGeneratedClient(unittest.T
 
         emitter.emit_until_response.assert_called_once_with(
             'getattr.myservice.attribute_that_does_not_exist',
-            client=service_client
+            client=service_client,
         )
 
     def test_getattr_event_returns_response(self):
@@ -1356,7 +1502,9 @@ class TestAutoGeneratedClient(unittest.T
         self.assertEqual(value, 'success')
 
     def _create_hostname_binding_client(self, *args, **kwargs):
-        test_operation = self.service_description['operations']['TestOperation']
+        test_operation = self.service_description['operations'][
+            'TestOperation'
+        ]
         test_operation['endpoint'] = {'hostPrefix': '{Foo}.'}
         test_shape = self.service_description['shapes']['TestOperationRequest']
         test_shape['members']['Foo']['hostLabel'] = True
@@ -1381,7 +1529,21 @@ class TestAutoGeneratedClient(unittest.T
     def test_client_operation_hostname_binding_configuration(self):
         config = botocore.config.Config(inject_host_prefix=False)
         client = self._create_hostname_binding_client(
-            'us-west-2', client_config=config,
+            'us-west-2',
+            client_config=config,
+        )
+
+        client.test_operation(Foo='baz')
+        expected_url = 'https://myservice.amazonaws.com/'
+        self.assertTrue(self.endpoint.make_request.called)
+        request_dict = self.endpoint.make_request.call_args[0][1]
+        self.assertEqual(request_dict['url'], expected_url)
+
+    def test_client_operation_hostname_binding_configuration_none(self):
+        config = botocore.config.Config(inject_host_prefix=None)
+        client = self._create_hostname_binding_client(
+            'us-west-2',
+            client_config=config,
         )
 
         client.test_operation(Foo='baz')
@@ -1394,23 +1556,28 @@ class TestAutoGeneratedClient(unittest.T
 class TestClientErrors(TestAutoGeneratedClient):
     def add_error_response(self, error_response):
         self.endpoint.make_request.return_value = (
-            mock.Mock(status_code=400), error_response)
+            mock.Mock(status_code=400),
+            error_response,
+        )
 
     def test_client_makes_call_with_error(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
             stub.add_client_error(
-                'test_operation', 'TestOperationErrorCode', 'error occurred')
+                'test_operation', 'TestOperationErrorCode', 'error occurred'
+            )
             with self.assertRaises(client.exceptions.TestOperationException):
                 client.test_operation(Foo='one', Bar='two')
 
     def test_error_with_no_wire_code(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
             stub.add_client_error('test_operation', '404', 'Not Found')
@@ -1425,11 +1592,13 @@ class TestClientErrors(TestAutoGenerated
     def test_error_with_dot_separated_code(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
             stub.add_client_error(
-                'test_operation', 'InvalidAddress.NotFound', 'Not Found')
+                'test_operation', 'InvalidAddress.NotFound', 'Not Found'
+            )
             try:
                 client.test_operation(Foo='one', Bar='two')
             except client.exceptions.ClientError as e:
@@ -1441,18 +1610,19 @@ class TestClientErrors(TestAutoGenerated
     def test_error_with_empty_message(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
-            stub.add_client_error(
-                'test_operation', 'TestOperationErrorCode')
+            stub.add_client_error('test_operation', 'TestOperationErrorCode')
             with self.assertRaises(client.exceptions.TestOperationException):
                 client.test_operation(Foo='one', Bar='two')
 
     def test_error_with_empty_code(self):
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
             stub.add_client_error('test_operation')
@@ -1469,11 +1639,14 @@ class TestClientErrors(TestAutoGenerated
         # The stubber is not being used because it will always populate the
         # the message and code.
         self.endpoint.make_request.return_value = (
-            mock.Mock(status_code=400), error_response)
+            mock.Mock(status_code=400),
+            error_response,
+        )
 
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         try:
             client.test_operation(Foo='one', Bar='two')
@@ -1488,11 +1661,14 @@ class TestClientErrors(TestAutoGenerated
         # The stubber is not being used because it will always populate the
         # the message and code.
         self.endpoint.make_request.return_value = (
-            mock.Mock(status_code=400), error_response)
+            mock.Mock(status_code=400),
+            error_response,
+        )
 
         creator = self.create_client_creator()
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         try:
             client.test_operation(Foo='one', Bar='two')
@@ -1504,34 +1680,49 @@ class TestClientErrors(TestAutoGenerated
 
     def test_exception_classes_across_clients_are_the_same(self):
         creator = self.create_client_creator(
-            exceptions_factory=ClientExceptionsFactory())
+            exceptions_factory=ClientExceptionsFactory()
+        )
         client = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
         client2 = creator.create_client(
-            'myservice', 'us-west-2', credentials=self.credentials)
+            'myservice', 'us-west-2', credentials=self.credentials
+        )
 
         with Stubber(client) as stub:
             stub.add_client_error(
-                'test_operation', 'TestOperationErrorCode', 'error occurred')
+                'test_operation', 'TestOperationErrorCode', 'error occurred'
+            )
             try:
                 client.test_operation(Foo='one', Bar='two')
             except client2.exceptions.TestOperationException as e:
                 # Caught exception should as well be an instance of the
                 # other client's TestOperationException
                 self.assertIsInstance(
-                    e, client.exceptions.TestOperationException)
+                    e, client.exceptions.TestOperationException
+                )
 
 
 class TestConfig(unittest.TestCase):
     def test_can_use_args_to_construct(self):
-        config = botocore.config.Config(*botocore.config.Config.OPTION_DEFAULTS.values())
-        for option, default_value in botocore.config.Config.OPTION_DEFAULTS.items():
+        config = botocore.config.Config(
+            *botocore.config.Config.OPTION_DEFAULTS.values()
+        )
+        for (
+            option,
+            default_value,
+        ) in botocore.config.Config.OPTION_DEFAULTS.items():
             self.assertTrue(hasattr(config, option))
             self.assertEqual(getattr(config, option), default_value)
 
     def test_can_use_kwargs_to_construct(self):
-        config = botocore.config.Config(**botocore.config.Config.OPTION_DEFAULTS)
-        for option, default_value in botocore.config.Config.OPTION_DEFAULTS.items():
+        config = botocore.config.Config(
+            **botocore.config.Config.OPTION_DEFAULTS
+        )
+        for (
+            option,
+            default_value,
+        ) in botocore.config.Config.OPTION_DEFAULTS.items():
             self.assertTrue(hasattr(config, option))
             self.assertEqual(getattr(config, option), default_value)
 
@@ -1546,7 +1737,9 @@ class TestConfig(unittest.TestCase):
 
     def test_pass_invalid_length_of_args(self):
         with self.assertRaisesRegex(TypeError, 'Takes at most'):
-            botocore.config.Config('foo', *botocore.config.Config.OPTION_DEFAULTS.values())
+            botocore.config.Config(
+                'foo', *botocore.config.Config.OPTION_DEFAULTS.values()
+            )
 
     def test_create_with_multiple_kwargs(self):
         with self.assertRaisesRegex(TypeError, 'Got multiple values'):
@@ -1590,7 +1783,8 @@ class TestConfig(unittest.TestCase):
 
     def test_merge_overrides_only_when_user_provided_values(self):
         config = botocore.config.Config(
-            region_name='us-east-1', signature_version='s3v4')
+            region_name='us-east-1', signature_version='s3v4'
+        )
         other_config = botocore.config.Config(region_name='us-west-2')
         new_config = config.merge(other_config)
         self.assertEqual(new_config.region_name, 'us-west-2')
@@ -1602,8 +1796,9 @@ class TestConfig(unittest.TestCase):
 
     def test_validates_retry_config(self):
         with self.assertRaisesRegex(
-                InvalidRetryConfigurationError,
-                'Cannot provide retry configuration for "not-allowed"'):
+            InvalidRetryConfigurationError,
+            'Cannot provide retry configuration for "not-allowed"',
+        ):
             botocore.config.Config(retries={'not-allowed': True})
 
     def test_validates_max_retry_attempts(self):
@@ -1626,10 +1821,11 @@ class TestClientEndpointBridge(unittest.
             'partition': 'aws',
             'protocols': ['http', 'https'],
             'dnsSuffix': 'amazonaws.com',
-            'signatureVersions': ['s3', 's3v4']
+            'signatureVersions': ['s3', 's3v4'],
         }
-        self.resolver.construct_endpoint.return_value = \
-                self.boilerplate_response
+        self.resolver.construct_endpoint.return_value = (
+            self.boilerplate_response
+        )
 
     def test_guesses_endpoint_as_last_resort(self):
         resolver = mock.Mock()
@@ -1641,21 +1837,24 @@ class TestClientEndpointBridge(unittest.
         self.assertEqual('myservice', resolved['signing_name'])
         self.assertEqual('myservice', resolved['service_name'])
         self.assertEqual('v4', resolved['signature_version'])
-        self.assertEqual('https://myservice.guess.amazonaws.com',
-                          resolved['endpoint_url'])
+        self.assertEqual(
+            'https://myservice.guess.amazonaws.com', resolved['endpoint_url']
+        )
 
     def test_uses_us_east_1_by_default_for_s3(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 's3.amazonaws.com',
-            'endpointName': 'us-east-1', 'signatureVersions': ['s3', 's3v4'],
-            'protocols': ['https']}
+            'partition': 'aws',
+            'hostname': 's3.amazonaws.com',
+            'endpointName': 'us-east-1',
+            'signatureVersions': ['s3', 's3v4'],
+            'protocols': ['https'],
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('s3')
         self.assertEqual('us-east-1', resolved['region_name'])
         self.assertEqual('us-east-1', resolved['signing_region'])
-        self.assertEqual('https://s3.amazonaws.com',
-                         resolved['endpoint_url'])
+        self.assertEqual('https://s3.amazonaws.com', resolved['endpoint_url'])
 
     def test_uses_region_from_client_config_if_available(self):
         resolver = mock.Mock()
@@ -1666,15 +1865,17 @@ class TestClientEndpointBridge(unittest.
         resolved = bridge.resolve('test')
         self.assertEqual('us-foo-bar', resolved['region_name'])
         self.assertEqual('us-foo-bar', resolved['signing_region'])
-        self.assertEqual('https://test.us-foo-bar.amazonaws.com',
-                         resolved['endpoint_url'])
+        self.assertEqual(
+            'https://test.us-foo-bar.amazonaws.com', resolved['endpoint_url']
+        )
 
     def test_can_guess_endpoint_and_use_given_endpoint_url(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = None
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve(
-            'test', 'guess', endpoint_url='http://test.com')
+            'test', 'guess', endpoint_url='http://test.com'
+        )
         self.assertEqual('guess', resolved['region_name'])
         self.assertEqual('guess', resolved['signing_region'])
         self.assertEqual('http://test.com', resolved['endpoint_url'])
@@ -1682,11 +1883,15 @@ class TestClientEndpointBridge(unittest.
     def test_can_use_endpoint_url_with_resolved_endpoint(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'do-not-use-this',
-            'endpointName': 'us-west-2', 'signatureVersions': ['v2']}
+            'partition': 'aws',
+            'hostname': 'do-not-use-this',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['v2'],
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve(
-            'ec2', 'us-west-2', endpoint_url='https://foo')
+            'ec2', 'us-west-2', endpoint_url='https://foo'
+        )
         self.assertEqual('us-west-2', resolved['region_name'])
         self.assertEqual('us-west-2', resolved['signing_region'])
         self.assertEqual('https://foo', resolved['endpoint_url'])
@@ -1699,21 +1904,25 @@ class TestClientEndpointBridge(unittest.
             'hostname': 'expected-host-name',
             'signatureVersions': ['v4'],
             'sslCommonName': 'ssl-common-name-do-not-use',
-            'endpointName': 'us-west-2', 'protocols': ['https']
+            'endpointName': 'us-west-2',
+            'protocols': ['https'],
         }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('myservice', 'us-west-2')
         self.assertEqual('us-west-2', resolved['region_name'])
         self.assertEqual('us-west-2', resolved['signing_region'])
-        self.assertEqual('https://expected-host-name',
-                         resolved['endpoint_url'])
+        self.assertEqual(
+            'https://expected-host-name', resolved['endpoint_url']
+        )
 
     def test_can_create_http_urls(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'host.com',
+            'partition': 'aws',
+            'hostname': 'host.com',
             'signatureVersions': ['v4'],
-            'endpointName': 'us-foo-baz'}
+            'endpointName': 'us-foo-baz',
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('myservice', 'us-foo-baz', is_secure=False)
         self.assertEqual('http://host.com', resolved['endpoint_url'])
@@ -1725,7 +1934,7 @@ class TestClientEndpointBridge(unittest.
             'hostname': 'host.com',
             'endpointName': 'us-foo-baz',
             'signatureVersions': ['v4'],
-            'credentialScope': {'region': 'override'}
+            'credentialScope': {'region': 'override'},
         }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('myservice', 'us-foo-baz')
@@ -1739,11 +1948,12 @@ class TestClientEndpointBridge(unittest.
             'hostname': 'will-not-use.com',
             'endpointName': 'us-foo-baz',
             'signatureVersions': ['v4'],
-            'credentialScope': {'region': 'override'}
+            'credentialScope': {'region': 'override'},
         }
         bridge = ClientEndpointBridge(resolver)
-        resolved = bridge.resolve('myservice', 'us-foo-baz',
-                                  endpoint_url='https://override.com')
+        resolved = bridge.resolve(
+            'myservice', 'us-foo-baz', endpoint_url='https://override.com'
+        )
         self.assertEqual('us-foo-baz', resolved['region_name'])
         self.assertEqual('us-foo-baz', resolved['signing_region'])
         self.assertEqual('https://override.com', resolved['endpoint_url'])
@@ -1781,8 +1991,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_signature_version_from_client_config(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test.com',
-            'endpointName': 'us-west-2', 'signatureVersions': ['v2']}
+            'partition': 'aws',
+            'hostname': 'test.com',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['v2'],
+        }
         client_config = mock.Mock()
         client_config.signature_version = 's3'
         bridge = ClientEndpointBridge(resolver, client_config=client_config)
@@ -1801,8 +2014,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_signature_version_from_scoped_config(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test.com',
-            'endpointName': 'us-west-2', 'signatureVersions': ['v2']}
+            'partition': 'aws',
+            'hostname': 'test.com',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['v2'],
+        }
         scoped_config = mock.Mock()
         scoped_config.get.return_value = {'signature_version': 's3'}
         bridge = ClientEndpointBridge(resolver, scoped_config)
@@ -1812,8 +2028,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_s3v4_over_s3_for_s3(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test.com',
-            'endpointName': 'us-west-2', 'signatureVersions': ['s3v4', 's3']}
+            'partition': 'aws',
+            'hostname': 'test.com',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['s3v4', 's3'],
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('s3', 'us-west-2')
         self.assertEqual('s3v4', resolved['signature_version'])
@@ -1821,8 +2040,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_s3v4_over_others_for_s3(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test.com',
-            'endpointName': 'us-west-2', 'signatureVersions': ['s3v4', 'v4']}
+            'partition': 'aws',
+            'hostname': 'test.com',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['s3v4', 'v4'],
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('s3', 'us-west-2')
         self.assertEqual('s3v4', resolved['signature_version'])
@@ -1830,8 +2052,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_v4_over_other_signers(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
-            'signatureVersions': ['v2', 'v4'], 'endpointName': 'us-west-2'}
+            'partition': 'aws',
+            'hostname': 'test',
+            'signatureVersions': ['v2', 'v4'],
+            'endpointName': 'us-west-2',
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('test', 'us-west-2')
         self.assertEqual('v4', resolved['signature_version'])
@@ -1839,9 +2064,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_known_signers_from_list_of_signature_versions(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
+            'partition': 'aws',
+            'hostname': 'test',
             'signatureVersions': ['foo', 'baz', 'v3https'],
-            'endpointName': 'us-west-2'}
+            'endpointName': 'us-west-2',
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('test', 'us-west-2')
         self.assertEqual('v3https', resolved['signature_version'])
@@ -1849,8 +2076,11 @@ class TestClientEndpointBridge(unittest.
     def test_raises_when_signature_version_is_unknown(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
-            'endpointName': 'us-west-2', 'signatureVersions': ['foo']}
+            'partition': 'aws',
+            'hostname': 'test',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['foo'],
+        }
         bridge = ClientEndpointBridge(resolver)
         with self.assertRaises(UnknownSignatureVersionError):
             bridge.resolve('test', 'us-west-2')
@@ -1858,9 +2088,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_first_known_signature_version(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
+            'partition': 'aws',
+            'hostname': 'test',
             'endpointName': 'us-west-2',
-            'signatureVersions': ['foo', 'bar', 'baz', 's3v4', 'v2']}
+            'signatureVersions': ['foo', 'bar', 'baz', 's3v4', 'v2'],
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('test', 'us-west-2')
         self.assertEqual('s3v4', resolved['signature_version'])
@@ -1868,18 +2100,34 @@ class TestClientEndpointBridge(unittest.
     def test_raises_when_signature_version_is_not_found(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
-            'endpointName': 'us-west-2'}
+            'partition': 'aws',
+            'hostname': 'test',
+            'endpointName': 'us-west-2',
+        }
         bridge = ClientEndpointBridge(resolver)
         with self.assertRaises(UnknownSignatureVersionError):
             bridge.resolve('test', 'us-west-2')
 
+    def test_prefers_signature_version_from_service_model(self):
+        resolver = mock.Mock()
+        resolver.construct_endpoint.return_value = {
+            'partition': 'aws',
+            'hostname': 'test',
+            'endpointName': 'us-west-2',
+            'signatureVersions': ['v2'],
+        }
+        bridge = ClientEndpointBridge(resolver, service_signature_version='v4')
+        resolved = bridge.resolve('test', 'us-west-2')
+        self.assertEqual('v4', resolved['signature_version'])
+
     def test_uses_service_name_as_signing_name(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
+            'partition': 'aws',
+            'hostname': 'test',
             'signatureVersions': ['v4'],
-            'endpointName': 'us-west-2'}
+            'endpointName': 'us-west-2',
+        }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('test', 'us-west-2')
         self.assertEqual('test', resolved['signing_name'])
@@ -1891,7 +2139,7 @@ class TestClientEndpointBridge(unittest.
             'hostname': 'test',
             'endpointName': 'us-west-2',
             'signatureVersions': ['v4'],
-            'credentialScope': {'service': 'override'}
+            'credentialScope': {'service': 'override'},
         }
         bridge = ClientEndpointBridge(resolver)
         resolved = bridge.resolve('test', 'us-west-2')
@@ -1900,9 +2148,11 @@ class TestClientEndpointBridge(unittest.
     def test_uses_service_signing_name_when_present_and_no_cred_scope(self):
         resolver = mock.Mock()
         resolver.construct_endpoint.return_value = {
-            'partition': 'aws', 'hostname': 'test',
+            'partition': 'aws',
+            'hostname': 'test',
             'signatureVersions': ['v4'],
-            'endpointName': 'us-west-2'}
+            'endpointName': 'us-west-2',
+        }
         bridge = ClientEndpointBridge(resolver, service_signing_name='foo')
         resolved = bridge.resolve('test', 'us-west-2')
         self.assertEqual('foo', resolved['signing_name'])
@@ -1910,12 +2160,11 @@ class TestClientEndpointBridge(unittest.
     def test_disable_dualstack_explicitly(self):
         scoped_config = {'s3': {'use_dualstack_endpoint': True}}
         config = botocore.config.Config(s3={'use_dualstack_endpoint': False})
-        bridge = ClientEndpointBridge(self.resolver, scoped_config,
-                                      client_config=config)
+        bridge = ClientEndpointBridge(
+            self.resolver, scoped_config, client_config=config
+        )
         resolved = bridge.resolve('s3', 'us-east-1')
-        self.assertEqual(
-            resolved['endpoint_url'],
-            'https://s3.amazonaws.com')
+        self.assertEqual(resolved['endpoint_url'], 'https://s3.amazonaws.com')
 
     def test_use_dualstack_endpoint(self):
         config = botocore.config.Config(use_dualstack_endpoint=True)
@@ -1940,8 +2189,9 @@ class TestClientEndpointBridge(unittest.
         )
 
     def test_use_dualstack_endpoint_omits_s3(self):
-        config = botocore.config.Config(use_dualstack_endpoint=True,
-                                        s3={'use_dualstack_endpoint': False})
+        config = botocore.config.Config(
+            use_dualstack_endpoint=True, s3={'use_dualstack_endpoint': False}
+        )
         bridge = ClientEndpointBridge(self.resolver, client_config=config)
         bridge.resolve('s3', 'us-west-2')
         self.resolver.construct_endpoint.assert_called_with(
@@ -1951,13 +2201,19 @@ class TestClientEndpointBridge(unittest.
             use_fips_endpoint=False,
         )
 
-    def test_modeled_endpoint_variants_client_config_trumps_scoped_config(self):
-        scoped_config = {'use_dualstack_endpoint': True,
-                         'use_fips_endpoint': True}
-        config = botocore.config.Config(use_dualstack_endpoint=False,
-                                        use_fips_endpoint=False)
-        bridge = ClientEndpointBridge(self.resolver, scoped_config,
-                                      client_config=config)
+    def test_modeled_endpoint_variants_client_config_trumps_scoped_config(
+        self,
+    ):
+        scoped_config = {
+            'use_dualstack_endpoint': True,
+            'use_fips_endpoint': True,
+        }
+        config = botocore.config.Config(
+            use_dualstack_endpoint=False, use_fips_endpoint=False
+        )
+        bridge = ClientEndpointBridge(
+            self.resolver, scoped_config, client_config=config
+        )
         bridge.resolve('ec2', 'us-west-2')
         self.resolver.construct_endpoint.assert_called_with(
             'ec2',
@@ -1969,8 +2225,7 @@ class TestClientEndpointBridge(unittest.
     def test_modeled_endpoint_variants_tags_using_config_store(self):
         config_store = mock.Mock()
         config_store.get_config_variable.return_value = True
-        bridge = ClientEndpointBridge(self.resolver,
-                                      config_store=config_store)
+        bridge = ClientEndpointBridge(self.resolver, config_store=config_store)
         bridge.resolve('ec2', 'us-west-2')
         self.resolver.construct_endpoint.assert_called_with(
             'ec2',
diff -pruN 2.23.6-1/tests/unit/botocore/test_compat.py 2.31.35-1/tests/unit/botocore/test_compat.py
--- 2.23.6-1/tests/unit/botocore/test_compat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_compat.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,18 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import datetime
-import pytest
 
-from botocore.exceptions import MD5UnavailableError
+import pytest
 from botocore.compat import (
-    total_seconds, unquote_str, ensure_bytes, get_md5,
-    compat_shell_split, get_tzinfo_options
+    compat_shell_split,
+    ensure_bytes,
+    get_md5,
+    get_tzinfo_options,
+    total_seconds,
+    unquote_str,
 )
+from botocore.exceptions import MD5UnavailableError
+
 from tests import BaseEnvVar, mock, unittest
 
 
@@ -34,19 +39,19 @@ class TotalSecondsTest(BaseEnvVar):
 
 class TestUnquoteStr(unittest.TestCase):
     def test_unquote_str(self):
-        value = u'%E2%9C%93'
+        value = '%E2%9C%93'
         # Note: decoded to unicode and utf-8 decoded as well.
         # This would work in python2 and python3.
-        self.assertEqual(unquote_str(value), u'\u2713')
+        self.assertEqual(unquote_str(value), '\u2713')
 
     def test_unquote_normal(self):
-        value = u'foo'
+        value = 'foo'
         # Note: decoded to unicode and utf-8 decoded as well.
         # This would work in python2 and python3.
-        self.assertEqual(unquote_str(value), u'foo')
+        self.assertEqual(unquote_str(value), 'foo')
 
     def test_unquote_with_spaces(self):
-        value = u'foo+bar'
+        value = 'foo+bar'
         # Note: decoded to unicode and utf-8 decoded as well.
         # This would work in python2 and python3.
         self.assertEqual(unquote_str(value), 'foo bar')
@@ -66,13 +71,13 @@ class TestEnsureBytes(unittest.TestCase)
         self.assertEqual(response, b'bar')
 
     def test_unicode(self):
-        value = u'baz'
+        value = 'baz'
         response = ensure_bytes(value)
         self.assertIsInstance(response, bytes)
         self.assertEqual(response, b'baz')
 
     def test_non_ascii(self):
-        value = u'\u2713'
+        value = '\u2713'
         response = ensure_bytes(value)
         self.assertIsInstance(response, bytes)
         self.assertEqual(response, b'\xe2\x9c\x93')
@@ -123,12 +128,14 @@ def get_windows_test_cases():
         r'"abc" d e': [r'abc', r'd', r'e'],
         r'a\\b d"e f"g h': [r'a\\b', r'de fg', r'h'],
         r'a\\\"b c d': [r'a\"b', r'c', r'd'],
-        r'a\\\\"b c" d e': [r'a\\b c', r'd', r'e']
+        r'a\\\\"b c" d e': [r'a\\b c', r'd', r'e'],
     }
     return windows_cases.items()
 
 
-@pytest.mark.parametrize("input_string, expected_output", get_windows_test_cases())
+@pytest.mark.parametrize(
+    "input_string, expected_output", get_windows_test_cases()
+)
 def test_compat_shell_split_windows(
     shell_split_runner, input_string, expected_output
 ):
@@ -160,19 +167,23 @@ def get_unix_test_cases():
         r'"abc" d e': [r'abc', r'd', r'e'],
         r'a\\b d"e f"g h': [r'a\b', r'de fg', r'h'],
         r'a\\\"b c d': [r'a\"b', r'c', r'd'],
-        r'a\\\\"b c" d e': [r'a\\b c', r'd', r'e']
+        r'a\\\\"b c" d e': [r'a\\b c', r'd', r'e'],
     }
     return unix_cases.items()
 
 
-@pytest.mark.parametrize("input_string, expected_output", get_unix_test_cases())
+@pytest.mark.parametrize(
+    "input_string, expected_output", get_unix_test_cases()
+)
 def test_compat_shell_split_unix_linux2(
     shell_split_runner, input_string, expected_output
 ):
     shell_split_runner.assert_equal(input_string, expected_output, "linux2")
 
 
-@pytest.mark.parametrize("input_string, expected_output", get_unix_test_cases())
+@pytest.mark.parametrize(
+    "input_string, expected_output", get_unix_test_cases()
+)
 def test_compat_shell_split_unix_darwin(
     shell_split_runner, input_string, expected_output
 ):
@@ -187,7 +198,7 @@ def test_compat_shell_split_unix_darwin_
     shell_split_runner.assert_raises(r'"', ValueError, "darwin")
 
 
-class ShellSplitTestRunner(object):
+class ShellSplitTestRunner:
     def assert_equal(self, s, expected, platform):
         assert compat_shell_split(s, platform) == expected
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_compress.py 2.31.35-1/tests/unit/botocore/test_compress.py
--- 2.23.6-1/tests/unit/botocore/test_compress.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_compress.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,11 +14,11 @@ import gzip
 import io
 import sys
 
-import pytest
-
 import botocore
+import pytest
 from botocore.compress import COMPRESSION_MAPPING, maybe_compress_request
 from botocore.config import Config
+
 from tests import mock
 
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_config_provider.py 2.31.35-1/tests/unit/botocore/test_config_provider.py
--- 2.23.6-1/tests/unit/botocore/test_config_provider.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_config_provider.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,35 +10,41 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, unittest
 import copy
-import pytest
 
 import botocore
 import botocore.session as session
-from botocore.configprovider import ConfigValueStore
-from botocore.configprovider import BaseProvider
-from botocore.configprovider import InstanceVarProvider
-from botocore.configprovider import EnvironmentProvider
-from botocore.configprovider import ScopedConfigProvider
-from botocore.configprovider import SectionConfigProvider
-from botocore.configprovider import ConstantProvider
-from botocore.configprovider import ChainProvider
-from botocore.configprovider import ConfigChainFactory
-from botocore.configprovider import ConfiguredEndpointProvider
+import pytest
+from botocore.configprovider import (
+    BaseProvider,
+    ChainProvider,
+    ConfigChainFactory,
+    ConfiguredEndpointProvider,
+    ConfigValueStore,
+    ConstantProvider,
+    EnvironmentProvider,
+    InstanceVarProvider,
+    ScopedConfigProvider,
+    SectionConfigProvider,
+)
+
+from tests import mock, unittest
 
 
 class TestConfigChainFactory(unittest.TestCase):
-    def assert_chain_does_provide(self, instance_map, environ_map,
-                                  scoped_config_map, create_config_chain_args,
-                                  expected_value):
+    def assert_chain_does_provide(
+        self,
+        instance_map,
+        environ_map,
+        scoped_config_map,
+        create_config_chain_args,
+        expected_value,
+    ):
         fake_session = mock.Mock(spec=session.Session)
         fake_session.get_scoped_config.return_value = scoped_config_map
         fake_session.instance_variables.return_value = instance_map
         builder = ConfigChainFactory(fake_session, environ=environ_map)
-        chain = builder.create_config_chain(
-            **create_config_chain_args
-        )
+        chain = builder.create_config_chain(**create_config_chain_args)
         value = chain.provide()
         self.assertEqual(value, expected_value)
 
@@ -190,10 +196,7 @@ class TestConfigChainFactory(unittest.Te
         self.assert_chain_does_provide(
             instance_map={},
             environ_map={},
-            scoped_config_map={
-                'first': 'first_val',
-                'second': 'second_val'
-            },
+            scoped_config_map={'first': 'first_val', 'second': 'second_val'},
             create_config_chain_args={
                 'config_property_names': ['first', 'second'],
             },
@@ -227,9 +230,7 @@ class TestConfigChainFactory(unittest.Te
             instance_map={},
             environ_map={},
             scoped_config_map={},
-            create_config_chain_args={
-                'default': 'from-default'
-            },
+            create_config_chain_args={'default': 'from-default'},
             expected_value='from-default',
         )
 
@@ -299,9 +300,11 @@ class TestConfigValueStore(unittest.Test
     def test_does_provide_value_if_variable_exists(self):
         mock_value_provider = mock.Mock(spec=BaseProvider)
         mock_value_provider.provide.return_value = 'foo'
-        provider = ConfigValueStore(mapping={
-            'fake_variable': mock_value_provider,
-        })
+        provider = ConfigValueStore(
+            mapping={
+                'fake_variable': mock_value_provider,
+            }
+        )
         value = provider.get_config_variable('fake_variable')
         self.assertEqual(value, 'foo')
 
@@ -314,9 +317,11 @@ class TestConfigValueStore(unittest.Test
     def test_can_set_config_provider(self):
         foo_value_provider = mock.Mock(spec=BaseProvider)
         foo_value_provider.provide.return_value = 'foo'
-        provider = ConfigValueStore(mapping={
-            'fake_variable': foo_value_provider,
-        })
+        provider = ConfigValueStore(
+            mapping={
+                'fake_variable': foo_value_provider,
+            }
+        )
 
         value = provider.get_config_variable('fake_variable')
         self.assertEqual(value, 'foo')
@@ -450,8 +455,9 @@ class TestEnvironmentProvider(unittest.T
 
 
 class TestScopedConfigProvider(unittest.TestCase):
-    def assert_provides_value(self, config_file_values, config_var_name,
-                              expected_value):
+    def assert_provides_value(
+        self, config_file_values, config_var_name, expected_value
+    ):
         fake_session = mock.Mock(spec=session.Session)
         fake_session.get_scoped_config.return_value = config_file_values
         property_provider = ScopedConfigProvider(
@@ -463,38 +469,28 @@ class TestScopedConfigProvider(unittest.
 
     def test_can_provide_value(self):
         self.assert_provides_value(
-            config_file_values={
-                'foo': 'bar'
-            },
+            config_file_values={'foo': 'bar'},
             config_var_name='foo',
             expected_value='bar',
         )
 
     def test_does_provide_none_if_var_not_in_config(self):
         self.assert_provides_value(
-            config_file_values={
-                'foo': 'bar'
-            },
+            config_file_values={'foo': 'bar'},
             config_var_name='no_such_var',
             expected_value=None,
         )
 
     def test_provide_nested_value(self):
         self.assert_provides_value(
-            config_file_values={
-                'section': {
-                    'nested_var': 'nested_val'
-                }
-            },
+            config_file_values={'section': {'nested_var': 'nested_val'}},
             config_var_name=('section', 'nested_var'),
             expected_value='nested_val',
         )
 
     def test_provide_nested_value_but_not_section(self):
         self.assert_provides_value(
-            config_file_values={
-                'section': 'not-nested'
-            },
+            config_file_values={'section': 'not-nested'},
             config_var_name=('section', 'nested_var'),
             expected_value=None,
         )
@@ -534,16 +530,13 @@ def assert_chain_does_provide(providers,
         ('bar', [None, 'bar', None]),
         ('foo', ['foo', 'bar', None]),
         ('foo', ['foo', 'bar', 'baz']),
-    )
+    ),
 )
 def test_chain_provider(case):
     # Each case is a tuple with the first element being the expected return
     # value from the ChainProvider. The second value being a list of return
     # values from the individual providers that are in the chain.
-    assert_chain_does_provide(
-        _make_providers_that_return(case[1]),
-        case[0]
-    )
+    assert_chain_does_provide(_make_providers_that_return(case[1]), case[0])
 
 
 class TestChainProvider(unittest.TestCase):
@@ -565,25 +558,26 @@ class TestConstantProvider(unittest.Test
 
 
 class TestSectionConfigProvider(unittest.TestCase):
-    def assert_provides_value(self, config_file_values, section_name,
-                              expected_value, override_providers=None):
+    def assert_provides_value(
+        self,
+        config_file_values,
+        section_name,
+        expected_value,
+        override_providers=None,
+    ):
         fake_session = mock.Mock(spec=session.Session)
         fake_session.get_scoped_config.return_value = config_file_values
         provider = SectionConfigProvider(
             section_name=section_name,
             session=fake_session,
-            override_providers=override_providers
+            override_providers=override_providers,
         )
         value = provider.provide()
         self.assertEqual(value, expected_value)
 
     def test_provide_section_config(self):
         self.assert_provides_value(
-            config_file_values={
-                'mysection': {
-                    'section_var': 'section_val'
-                }
-            },
+            config_file_values={'mysection': {'section_var': 'section_val'}},
             section_name='mysection',
             expected_value={'section_var': 'section_val'},
         )
@@ -607,15 +601,15 @@ class TestSectionConfigProvider(unittest
             config_file_values={
                 'mysection': {
                     'override_var': 'from_config_file',
-                    'no_override_var': 'from_config_file'
+                    'no_override_var': 'from_config_file',
                 }
             },
             section_name='mysection',
             override_providers={'override_var': ConstantProvider('override')},
             expected_value={
                 'override_var': 'override',
-                'no_override_var': 'from_config_file'
-            }
+                'no_override_var': 'from_config_file',
+            },
         )
 
     def test_provide_section_config_with_only_overrides(self):
@@ -625,7 +619,7 @@ class TestSectionConfigProvider(unittest
             override_providers={'override_var': ConstantProvider('override')},
             expected_value={
                 'override_var': 'override',
-            }
+            },
         )
 
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_configloader.py 2.31.35-1/tests/unit/botocore/test_configloader.py
--- 2.23.6-1/tests/unit/botocore/test_configloader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_configloader.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, unittest, BaseEnvVar
 import os
-import tempfile
 import shutil
+import tempfile
 
 import botocore.exceptions
-from botocore.configloader import raw_config_parse, load_config, \
-    multi_file_load_config
+from botocore.configloader import (
+    load_config,
+    multi_file_load_config,
+    raw_config_parse,
+)
+
+from tests import BaseEnvVar, mock, unittest
 
 
 def path(filename):
@@ -58,7 +62,7 @@ class TestConfigLoader(BaseEnvVar):
 
     def test_config_not_found(self):
         with self.assertRaises(botocore.exceptions.ConfigNotFound):
-            loaded_config = raw_config_parse(path('aws_config_notfound'))
+            raw_config_parse(path('aws_config_notfound'))
 
     def test_config_parse_error(self):
         filename = path('aws_config_bad')
@@ -85,8 +89,9 @@ class TestConfigLoader(BaseEnvVar):
     def test_profile_map_conversion(self):
         loaded_config = load_config(path('aws_config'))
         self.assertIn('profiles', loaded_config)
-        self.assertEqual(sorted(loaded_config['profiles'].keys()),
-                         ['default', 'personal'])
+        self.assertEqual(
+            sorted(loaded_config['profiles'].keys()), ['default', 'personal']
+        )
 
     def test_bad_profiles_are_ignored(self):
         filename = path('aws_bad_profile')
@@ -115,31 +120,31 @@ class TestConfigLoader(BaseEnvVar):
         # will make sure that indented sections such as singature_version
         # will not be treated as another subsection but rather
         # its literal value.
-        self.assertEqual(
-            raw_config['cloudwatch'], '\nsignature_version = v4')
+        self.assertEqual(raw_config['cloudwatch'], '\nsignature_version = v4')
         self.assertEqual(
             raw_config['s3'],
-            '\nsignature_version = s3v4'
-            '\naddressing_style = path'
+            '\nsignature_version = s3v4' '\naddressing_style = path',
         )
 
     def test_nested_bad_config(self):
         filename = path('aws_config_nested_bad')
         with self.assertRaises(botocore.exceptions.ConfigParseError):
-            loaded_config = load_config(filename)
+            load_config(filename)
 
     def test_nested_bad_config_filesystem_encoding_none(self):
         filename = path('aws_config_nested_bad')
         with mock.patch('sys.getfilesystemencoding') as encoding:
             encoding.return_value = None
             with self.assertRaises(botocore.exceptions.ConfigParseError):
-                loaded_config = load_config(filename)
+                load_config(filename)
 
     def test_multi_file_load(self):
-        filenames = [path('aws_config_other'),
-                     path('aws_config'),
-                     path('aws_third_config'),
-                     path('aws_config_notfound')]
+        filenames = [
+            path('aws_config_other'),
+            path('aws_config'),
+            path('aws_third_config'),
+            path('aws_config_notfound'),
+        ]
         loaded_config = multi_file_load_config(*filenames)
         config = loaded_config['profiles']['default']
         self.assertEqual(config['aws_access_key_id'], 'other_foo')
diff -pruN 2.23.6-1/tests/unit/botocore/test_context.py 2.31.35-1/tests/unit/botocore/test_context.py
--- 2.23.6-1/tests/unit/botocore/test_context.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_context.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,91 @@
+# Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+# http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+
+import pytest
+from botocore.context import (
+    ClientContext,
+    get_context,
+    reset_context,
+    set_context,
+    start_as_current_context,
+    with_current_context,
+)
+
+
+@pytest.fixture
+def custom_context():
+    ctx = ClientContext()
+    ctx.features.add('CUSTOM')
+    return ctx
+
+
+class TestContext:
+    def test_get_context_returns_none(self):
+        ctx = get_context()
+        assert ctx is None
+
+    def test_get_context_returns_current(self, client_context):
+        ctx = get_context()
+        assert ctx == client_context
+
+    def test_set_context(self, custom_context):
+        token = set_context(custom_context)
+        ctx = get_context()
+        assert ctx == custom_context
+        reset_context(token)
+
+    def test_start_as_current_context(self):
+        with start_as_current_context():
+            ctx = get_context()
+            ctx.features.add('FOO')
+            assert ctx.features == {'FOO'}
+        ctx = get_context()
+        assert ctx is None
+
+    def test_nested_start_as_current_context(self):
+        with start_as_current_context():
+            ctx = get_context()
+            ctx.features.add('FOO')
+            with start_as_current_context():
+                ctx = get_context()
+                ctx.features.add('BAR')
+                assert ctx.features == {'FOO', 'BAR'}
+            ctx = get_context()
+            assert ctx.features == {'FOO'}
+        ctx = get_context()
+        assert ctx is None
+
+    def test_start_as_current_context_with_param(self, custom_context):
+        with start_as_current_context(custom_context):
+            ctx = get_context()
+            assert ctx.features == {'CUSTOM'}
+
+    def test_with_current_context(self):
+        @with_current_context()
+        def do_something():
+            ctx = get_context()
+            assert ctx is not None
+
+        do_something()
+
+    def test_with_current_context_with_hook(self):
+        def register_fake():
+            ctx = get_context()
+            ctx.features.add('FOO')
+
+        @with_current_context(register_fake)
+        def do_something():
+            ctx = get_context()
+            assert ctx.features == {'FOO'}
+
+        do_something()
diff -pruN 2.23.6-1/tests/unit/botocore/test_credentials.py 2.31.35-1/tests/unit/botocore/test_credentials.py
--- 2.23.6-1/tests/unit/botocore/test_credentials.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_credentials.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,37 +11,49 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from datetime import datetime, timedelta
-import subprocess
+import logging
 import os
-import tempfile
 import shutil
-import json
-import copy
-
-from dateutil.tz import tzlocal, tzutc
+import subprocess
+import tempfile
+from datetime import datetime, timedelta
 
+import botocore.exceptions
+import botocore.session
+import pytest
 from botocore import credentials
-from botocore.utils import ContainerMetadataFetcher
 from botocore.compat import json
+from botocore.configprovider import (
+    ConfigChainFactory,
+    ConfigValueStore,
+    create_botocore_default_config_mapping,
+)
+from botocore.credentials import (
+    AssumeRoleProvider,
+    AssumeRoleWithWebIdentityProvider,
+    BaseAssumeRoleCredentialFetcher,
+    ConfigProvider,
+    CredentialProvider,
+    Credentials,
+    EnvProvider,
+    ProcessProvider,
+    ProfileProviderBuilder,
+    SharedCredentialProvider,
+    SSOCredentialFetcher,
+    SSOProvider,
+    create_assume_role_refresher,
+)
 from botocore.session import Session
 from botocore.stub import Stubber
-from botocore.utils import datetime2timestamp
-from botocore.utils import FileWebIdentityTokenLoader, SSOTokenLoader
-from botocore.credentials import EnvProvider, create_assume_role_refresher
-from botocore.credentials import CredentialProvider, AssumeRoleProvider
-from botocore.credentials import ConfigProvider, SharedCredentialProvider
-from botocore.credentials import ProcessProvider
-from botocore.credentials import AssumeRoleWithWebIdentityProvider
-from botocore.credentials import Credentials, ProfileProviderBuilder
-from botocore.credentials import SSOCredentialFetcher, SSOProvider
-from botocore.configprovider import create_botocore_default_config_mapping
-from botocore.configprovider import ConfigChainFactory
-from botocore.configprovider import ConfigValueStore
-import botocore.exceptions
-import botocore.session
-from tests import mock, unittest, BaseEnvVar, IntegerRefresher, skip_if_windows
+from botocore.utils import (
+    ContainerMetadataFetcher,
+    FileWebIdentityTokenLoader,
+    SSOTokenLoader,
+    datetime2timestamp,
+)
+from dateutil.tz import tzlocal, tzutc
 
+from tests import BaseEnvVar, IntegerRefresher, mock, skip_if_windows, unittest
 
 # Passed to session to keep it from finding default config file
 TESTENVVARS = {'config_file': (None, 'AWS_CONFIG_FILE', None)}
@@ -55,7 +67,7 @@ raw_metadata = {
         'SecretAccessKey': 'bar',
         'Token': 'foobar',
         'Expiration': '2012-12-03T20:48:03Z',
-        'Type': 'AWS-HMAC'
+        'Type': 'AWS-HMAC',
     }
 }
 post_processed_metadata = {
@@ -74,25 +86,24 @@ def path(filename):
 class TestCredentials(BaseEnvVar):
     def _ensure_credential_is_normalized_as_unicode(self, access, secret):
         c = credentials.Credentials(access, secret)
-        self.assertTrue(isinstance(c.access_key, type(u'u')))
-        self.assertTrue(isinstance(c.secret_key, type(u'u')))
+        self.assertTrue(isinstance(c.access_key, str))
+        self.assertTrue(isinstance(c.secret_key, str))
 
     def test_detect_nonascii_character(self):
         self._ensure_credential_is_normalized_as_unicode(
-            'foo\xe2\x80\x99', 'bar\xe2\x80\x99')
+            'foo\xe2\x80\x99', 'bar\xe2\x80\x99'
+        )
 
     def test_unicode_input(self):
-        self._ensure_credential_is_normalized_as_unicode(
-            u'foo', u'bar')
+        self._ensure_credential_is_normalized_as_unicode('foo', 'bar')
 
 
 class TestRefreshableCredentials(TestCredentials):
     def setUp(self):
-        super(TestRefreshableCredentials, self).setUp()
+        super().setUp()
         self.refresher = mock.Mock()
         self.future_time = datetime.now(tzlocal()) + timedelta(hours=24)
-        self.expiry_time = \
-            datetime.now(tzlocal()) - timedelta(minutes=30)
+        self.expiry_time = datetime.now(tzlocal()) - timedelta(minutes=30)
         self.metadata = {
             'access_key': 'NEW-ACCESS',
             'secret_key': 'NEW-SECRET',
@@ -103,9 +114,13 @@ class TestRefreshableCredentials(TestCre
         self.refresher.return_value = self.metadata
         self.mock_time = mock.Mock()
         self.creds = credentials.RefreshableCredentials(
-            'ORIGINAL-ACCESS', 'ORIGINAL-SECRET', 'ORIGINAL-TOKEN',
-            self.expiry_time, self.refresher, 'iam-role',
-            time_fetcher=self.mock_time
+            'ORIGINAL-ACCESS',
+            'ORIGINAL-SECRET',
+            'ORIGINAL-TOKEN',
+            self.expiry_time,
+            self.refresher,
+            'iam-role',
+            time_fetcher=self.mock_time,
         )
 
     def test_refresh_needed(self):
@@ -122,16 +137,22 @@ class TestRefreshableCredentials(TestCre
 
     def test_no_expiration(self):
         creds = credentials.RefreshableCredentials(
-            'ORIGINAL-ACCESS', 'ORIGINAL-SECRET', 'ORIGINAL-TOKEN',
-            None, self.refresher, 'iam-role', time_fetcher=self.mock_time
+            'ORIGINAL-ACCESS',
+            'ORIGINAL-SECRET',
+            'ORIGINAL-TOKEN',
+            None,
+            self.refresher,
+            'iam-role',
+            time_fetcher=self.mock_time,
         )
         self.assertFalse(creds.refresh_needed())
 
     def test_no_refresh_needed(self):
         # The expiry time was 30 minutes ago, let's say it's an hour
         # ago currently.  That would mean we don't need a refresh.
-        self.mock_time.return_value = (
-            datetime.now(tzlocal()) - timedelta(minutes=60))
+        self.mock_time.return_value = datetime.now(tzlocal()) - timedelta(
+            minutes=60
+        )
         self.assertTrue(not self.creds.refresh_needed())
 
         self.assertEqual(self.creds.access_key, 'ORIGINAL-ACCESS')
@@ -141,8 +162,9 @@ class TestRefreshableCredentials(TestCre
     def test_get_credentials_set(self):
         # We need to return a consistent set of credentials to use during the
         # signing process.
-        self.mock_time.return_value = (
-            datetime.now(tzlocal()) - timedelta(minutes=60))
+        self.mock_time.return_value = datetime.now(tzlocal()) - timedelta(
+            minutes=60
+        )
         self.assertTrue(not self.creds.refresh_needed())
         credential_set = self.creds.get_frozen_credentials()
         self.assertEqual(credential_set.access_key, 'ORIGINAL-ACCESS')
@@ -217,7 +239,7 @@ class TestDeferredRefreshableCredentials
 
 class TestAssumeRoleCredentialFetcher(BaseEnvVar):
     def setUp(self):
-        super(TestAssumeRoleCredentialFetcher, self).setUp()
+        super().setUp()
         self.source_creds = credentials.Credentials('a', 'b', 'c')
         self.role_arn = 'myrole'
 
@@ -239,7 +261,8 @@ class TestAssumeRoleCredentialFetcher(Ba
             'access_key': response['Credentials']['AccessKeyId'],
             'secret_key': response['Credentials']['SecretAccessKey'],
             'token': response['Credentials']['SessionToken'],
-            'expiry_time': expiration
+            'expiry_time': expiration,
+            'account_id': response.get('Credentials', {}).get('AccountId'),
         }
 
     def some_future_time(self):
@@ -252,7 +275,7 @@ class TestAssumeRoleCredentialFetcher(Ba
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -276,7 +299,7 @@ class TestAssumeRoleCredentialFetcher(Ba
                 # we test both parsing as well as serializing
                 # from a given datetime because the credentials
                 # are immediately expired.
-                'Expiration': self.some_future_time()
+                'Expiration': self.some_future_time(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -292,9 +315,7 @@ class TestAssumeRoleCredentialFetcher(Ba
     def test_retrieves_from_cache(self):
         date_in_future = datetime.utcnow() + timedelta(seconds=1000)
         utc_timestamp = date_in_future.isoformat() + 'Z'
-        cache_key = (
-            '793d6e2f27667ab2da104824407e486bfec24a47'
-        )
+        cache_key = '793d6e2f27667ab2da104824407e486bfec24a47'
         cache = {
             cache_key: {
                 'Credentials': {
@@ -324,7 +345,7 @@ class TestAssumeRoleCredentialFetcher(Ba
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         cache = {}
@@ -339,9 +360,7 @@ class TestAssumeRoleCredentialFetcher(Ba
 
         # On windows, you cannot use a a ':' in the filename, so
         # we need to make sure that it doesn't make it into the cache key.
-        cache_key = (
-            '75c539f0711ba78c5b9e488d0add95f178a54d74'
-        )
+        cache_key = '75c539f0711ba78c5b9e488d0add95f178a54d74'
         self.assertIn(cache_key, cache)
         self.assertEqual(cache[cache_key], response)
 
@@ -351,7 +370,7 @@ class TestAssumeRoleCredentialFetcher(Ba
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         cache = {}
@@ -359,15 +378,16 @@ class TestAssumeRoleCredentialFetcher(Ba
         role_session_name = 'my_session_name'
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn, cache=cache,
-            extra_args={'RoleSessionName': role_session_name}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            cache=cache,
+            extra_args={'RoleSessionName': role_session_name},
         )
         refresher.fetch_credentials()
 
         # This is the sha256 hex digest of the expected assume role args.
-        cache_key = (
-            '2964201f5648c8be5b9460a9cf842d73a266daf2'
-        )
+        cache_key = '2964201f5648c8be5b9460a9cf842d73a266daf2'
         self.assertIn(cache_key, cache)
         self.assertEqual(cache[cache_key], response)
 
@@ -377,32 +397,31 @@ class TestAssumeRoleCredentialFetcher(Ba
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         cache = {}
         client_creator = self.create_client_creator(with_response=response)
-        policy = json.dumps({
-            "Version": "2012-10-17",
-            "Statement": [
-                {
-                    "Effect": "Allow",
-                    "Action": "*",
-                    "Resource": "*"
-                }
-            ]
-        })
+        policy = json.dumps(
+            {
+                "Version": "2012-10-17",
+                "Statement": [
+                    {"Effect": "Allow", "Action": "*", "Resource": "*"}
+                ],
+            }
+        )
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn, cache=cache,
-            extra_args={'Policy': policy}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            cache=cache,
+            extra_args={'Policy': policy},
         )
         refresher.fetch_credentials()
 
         # This is the sha256 hex digest of the expected assume role args.
-        cache_key = (
-            '176f223d915e82456c253545e192aa21d68f5ab8'
-        )
+        cache_key = '176f223d915e82456c253545e192aa21d68f5ab8'
         self.assertIn(cache_key, cache)
         self.assertEqual(cache[cache_key], response)
 
@@ -448,14 +467,17 @@ class TestAssumeRoleCredentialFetcher(Ba
         role_session_name = 'myname'
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'RoleSessionName': role_session_name}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'RoleSessionName': role_session_name},
         )
         refresher.fetch_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn=self.role_arn, RoleSessionName=role_session_name)
+            RoleArn=self.role_arn, RoleSessionName=role_session_name
+        )
 
     def test_external_id_can_be_provided(self):
         response = {
@@ -470,15 +492,19 @@ class TestAssumeRoleCredentialFetcher(Ba
         external_id = 'my_external_id'
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'ExternalId': external_id}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'ExternalId': external_id},
         )
         refresher.fetch_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn=self.role_arn, ExternalId=external_id,
-            RoleSessionName=mock.ANY)
+            RoleArn=self.role_arn,
+            ExternalId=external_id,
+            RoleSessionName=mock.ANY,
+        )
 
     def test_policy_can_be_provided(self):
         response = {
@@ -490,27 +516,27 @@ class TestAssumeRoleCredentialFetcher(Ba
             },
         }
         client_creator = self.create_client_creator(with_response=response)
-        policy = json.dumps({
-            "Version": "2012-10-17",
-            "Statement": [
-                {
-                    "Effect": "Allow",
-                    "Action": "*",
-                    "Resource": "*"
-                }
-            ]
-        })
+        policy = json.dumps(
+            {
+                "Version": "2012-10-17",
+                "Statement": [
+                    {"Effect": "Allow", "Action": "*", "Resource": "*"}
+                ],
+            }
+        )
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'Policy': policy}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'Policy': policy},
         )
         refresher.fetch_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn=self.role_arn, Policy=policy,
-            RoleSessionName=mock.ANY)
+            RoleArn=self.role_arn, Policy=policy, RoleSessionName=mock.ANY
+        )
 
     def test_duration_seconds_can_be_provided(self):
         response = {
@@ -525,15 +551,19 @@ class TestAssumeRoleCredentialFetcher(Ba
         duration = 1234
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'DurationSeconds': duration}
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'DurationSeconds': duration},
         )
         refresher.fetch_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn=self.role_arn, DurationSeconds=duration,
-            RoleSessionName=mock.ANY)
+            RoleArn=self.role_arn,
+            DurationSeconds=duration,
+            RoleSessionName=mock.ANY,
+        )
 
     def test_mfa(self):
         response = {
@@ -549,8 +579,11 @@ class TestAssumeRoleCredentialFetcher(Ba
         mfa_serial = 'mfa'
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'SerialNumber': mfa_serial}, mfa_prompter=prompter
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'SerialNumber': mfa_serial},
+            mfa_prompter=prompter,
         )
         refresher.fetch_credentials()
 
@@ -560,30 +593,36 @@ class TestAssumeRoleCredentialFetcher(Ba
         # token code that comes from prompting the user (the prompter
         # object).
         client.assume_role.assert_called_with(
-            RoleArn='myrole', RoleSessionName=mock.ANY, SerialNumber='mfa',
-            TokenCode='token-code')
+            RoleArn='myrole',
+            RoleSessionName=mock.ANY,
+            SerialNumber='mfa',
+            TokenCode='token-code',
+        )
 
     def test_refreshes(self):
-        responses = [{
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                # We're creating an expiry time in the past so as
-                # soon as we try to access the credentials, the
-                # refresh behavior will be triggered.
-                'Expiration': (
-                    datetime.now(tzlocal()) -
-                    timedelta(seconds=100)).isoformat(),
+        responses = [
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    # We're creating an expiry time in the past so as
+                    # soon as we try to access the credentials, the
+                    # refresh behavior will be triggered.
+                    'Expiration': (
+                        datetime.now(tzlocal()) - timedelta(seconds=100)
+                    ).isoformat(),
+                },
             },
-        }, {
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat(),
-            }
-        }]
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    'Expiration': self.some_future_time().isoformat(),
+                }
+            },
+        ]
         client_creator = self.create_client_creator(with_response=responses)
 
         refresher = credentials.AssumeRoleCredentialFetcher(
@@ -601,26 +640,29 @@ class TestAssumeRoleCredentialFetcher(Ba
         self.assertEqual(len(assume_role_calls), 2, assume_role_calls)
 
     def test_mfa_refresh_enabled(self):
-        responses = [{
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                # We're creating an expiry time in the past so as
-                # soon as we try to access the credentials, the
-                # refresh behavior will be triggered.
-                'Expiration': (
-                    datetime.now(tzlocal()) -
-                    timedelta(seconds=100)).isoformat(),
+        responses = [
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    # We're creating an expiry time in the past so as
+                    # soon as we try to access the credentials, the
+                    # refresh behavior will be triggered.
+                    'Expiration': (
+                        datetime.now(tzlocal()) - timedelta(seconds=100)
+                    ).isoformat(),
+                },
             },
-        }, {
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat(),
-            }
-        }]
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    'Expiration': self.some_future_time().isoformat(),
+                }
+            },
+        ]
         client_creator = self.create_client_creator(with_response=responses)
 
         token_code = 'token-code-1'
@@ -628,8 +670,11 @@ class TestAssumeRoleCredentialFetcher(Ba
         mfa_serial = 'mfa'
 
         refresher = credentials.AssumeRoleCredentialFetcher(
-            client_creator, self.source_creds, self.role_arn,
-            extra_args={'SerialNumber': mfa_serial}, mfa_prompter=prompter
+            client_creator,
+            self.source_creds,
+            self.role_arn,
+            extra_args={'SerialNumber': mfa_serial},
+            mfa_prompter=prompter,
         )
 
         # This is will refresh credentials if they're expired. Because
@@ -644,15 +689,84 @@ class TestAssumeRoleCredentialFetcher(Ba
                 'RoleArn': self.role_arn,
                 'RoleSessionName': mock.ANY,
                 'SerialNumber': mfa_serial,
-                'TokenCode': token_code
+                'TokenCode': token_code,
             }
         ]
         self.assertEqual(calls, expected_calls)
 
+    def test_account_id_with_valid_arn(self):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time().isoformat(),
+                'AccountId': '123456789012',
+            },
+            'AssumedRoleUser': {
+                'AssumedRoleId': 'myroleid',
+                'Arn': 'arn:aws:iam::123456789012:role/RoleA',
+            },
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        refresher = credentials.AssumeRoleCredentialFetcher(
+            client_creator, self.source_creds, self.role_arn
+        )
+        expected_response = self.get_expected_creds_from_response(response)
+        response = refresher.fetch_credentials()
+        self.assertEqual(response, expected_response)
+        self.assertEqual(response['account_id'], '123456789012')
+
+    def test_account_id_with_invalid_arn(self):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time().isoformat(),
+            },
+            'AssumedRoleUser': {
+                'AssumedRoleId': 'myroleid',
+                'Arn': 'invalid-arn',
+            },
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        refresher = credentials.AssumeRoleCredentialFetcher(
+            client_creator, self.source_creds, self.role_arn
+        )
+        expected_response = self.get_expected_creds_from_response(response)
+        response = refresher.fetch_credentials()
+        self.assertEqual(response, expected_response)
+        self.assertEqual(response['account_id'], None)
+
+    @mock.patch('botocore.credentials.register_feature_ids')
+    def test_feature_ids_registered_during_get_credentials(
+        self, mock_register
+    ):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time(),
+            }
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        fetcher = credentials.AssumeRoleCredentialFetcher(
+            client_creator, self.source_creds, self.role_arn
+        )
+
+        test_feature_ids = {'test_feature_1', 'test_feature_2'}
+        fetcher.feature_ids = test_feature_ids
+
+        fetcher.fetch_credentials()
+        # Verify register_credential_feature_ids was called with test feature IDs
+        mock_register.assert_called_once_with(test_feature_ids)
+
 
 class TestAssumeRoleWithWebIdentityCredentialFetcher(BaseEnvVar):
     def setUp(self):
-        super(TestAssumeRoleWithWebIdentityCredentialFetcher, self).setUp()
+        super().setUp()
         self.role_arn = 'myrole'
 
     def load_token(self):
@@ -680,7 +794,8 @@ class TestAssumeRoleWithWebIdentityCrede
             'access_key': response['Credentials']['AccessKeyId'],
             'secret_key': response['Credentials']['SecretAccessKey'],
             'token': response['Credentials']['SessionToken'],
-            'expiry_time': expiration
+            'expiry_time': expiration,
+            'account_id': response.get('Credentials', {}).get('AccountId'),
         }
 
     def test_no_cache(self):
@@ -689,7 +804,7 @@ class TestAssumeRoleWithWebIdentityCrede
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -704,9 +819,7 @@ class TestAssumeRoleWithWebIdentityCrede
     def test_retrieves_from_cache(self):
         date_in_future = datetime.utcnow() + timedelta(seconds=1000)
         utc_timestamp = date_in_future.isoformat() + 'Z'
-        cache_key = (
-            '793d6e2f27667ab2da104824407e486bfec24a47'
-        )
+        cache_key = '793d6e2f27667ab2da104824407e486bfec24a47'
         cache = {
             cache_key: {
                 'Credentials': {
@@ -758,13 +871,84 @@ class TestAssumeRoleWithWebIdentityCrede
 
         self.assertEqual(response, expected)
 
+    def test_account_id_with_valid_arn(self):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time().isoformat(),
+                'AccountId': '123456789012',
+            },
+            'AssumedRoleUser': {
+                'AssumedRoleId': 'myroleid',
+                'Arn': 'arn:aws:iam::123456789012:role/RoleA',
+            },
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        refresher = credentials.AssumeRoleWithWebIdentityCredentialFetcher(
+            client_creator, self.load_token, self.role_arn
+        )
+        expected_response = self.get_expected_creds_from_response(response)
+        response = refresher.fetch_credentials()
+        self.assertEqual(response, expected_response)
+        self.assertEqual(response['account_id'], '123456789012')
+
+    def test_account_id_with_invalid_arn(self):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time().isoformat(),
+            },
+            'AssumedRoleUser': {
+                'AssumedRoleId': 'myroleid',
+                'Arn': 'invalid-arn',
+            },
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        refresher = credentials.AssumeRoleWithWebIdentityCredentialFetcher(
+            client_creator,
+            self.load_token,
+            self.role_arn,
+        )
+        expected_response = self.get_expected_creds_from_response(response)
+        response = refresher.fetch_credentials()
+        self.assertEqual(response, expected_response)
+        self.assertEqual(response['account_id'], None)
+
+    @mock.patch('botocore.credentials.register_feature_ids')
+    def test_feature_ids_registered_during_get_credentials(
+        self, mock_register
+    ):
+        response = {
+            'Credentials': {
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': self.some_future_time(),
+            }
+        }
+        client_creator = self.create_client_creator(with_response=response)
+        fetcher = credentials.AssumeRoleWithWebIdentityCredentialFetcher(
+            client_creator, self.load_token, self.role_arn
+        )
+
+        test_feature_ids = {'test_feature_1', 'test_feature_2'}
+        fetcher.feature_ids = test_feature_ids
+
+        fetcher.fetch_credentials()
+        # Verify register_credential_feature_ids was called with test feature IDs
+        mock_register.assert_called_once_with(test_feature_ids)
+
 
 class TestAssumeRoleWithWebIdentityCredentialProvider(unittest.TestCase):
     def setUp(self):
         self.profile_name = 'some-profile'
         self.config = {
             'role_arn': 'arn:aws:iam::123:role/role-name',
-            'web_identity_token_file': '/some/path/token.jwt'
+            'web_identity_token_file': '/some/path/token.jwt',
         }
 
     def create_client_creator(self, with_response):
@@ -801,7 +985,7 @@ class TestAssumeRoleWithWebIdentityCrede
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -825,9 +1009,7 @@ class TestAssumeRoleWithWebIdentityCrede
         date_in_future = datetime.utcnow() + timedelta(seconds=1000)
         utc_timestamp = date_in_future.isoformat() + 'Z'
 
-        cache_key = (
-            'c29461feeacfbed43017d20612606ff76abc073d'
-        )
+        cache_key = 'c29461feeacfbed43017d20612606ff76abc073d'
         cache = {
             cache_key: {
                 'Credentials': {
@@ -919,7 +1101,7 @@ class TestAssumeRoleWithWebIdentityCrede
         client.assume_role_with_web_identity.assert_called_with(
             RoleArn='arn:aws:iam::123:role/role-name',
             RoleSessionName='myname',
-            WebIdentityToken='totally.a.token'
+            WebIdentityToken='totally.a.token',
         )
 
     def test_role_arn_not_set(self):
@@ -937,7 +1119,6 @@ class TestAssumeRoleWithWebIdentityCrede
 
 
 class TestEnvVar(BaseEnvVar):
-
     def test_envvars_are_found_no_token(self):
         environ = {
             'AWS_ACCESS_KEY_ID': 'foo',
@@ -978,6 +1159,20 @@ class TestEnvVar(BaseEnvVar):
         self.assertEqual(creds.token, 'baz')
         self.assertEqual(creds.method, 'env')
 
+    def test_envvars_found_with_account_id(self):
+        environ = {
+            'AWS_ACCESS_KEY_ID': 'foo',
+            'AWS_SECRET_ACCESS_KEY': 'bar',
+            'AWS_ACCOUNT_ID': 'baz',
+        }
+        provider = credentials.EnvProvider(environ)
+        creds = provider.load()
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.account_id, 'baz')
+        self.assertEqual(creds.method, 'env')
+
     def test_envvars_not_found(self):
         provider = credentials.EnvProvider(environ={})
         creds = provider.load()
@@ -1038,9 +1233,7 @@ class TestEnvVar(BaseEnvVar):
             'secret_key': 'FOO_SECRET_KEY',
             'token': 'FOO_SESSION_TOKEN',
         }
-        provider = credentials.EnvProvider(
-            environ, mapping
-        )
+        provider = credentials.EnvProvider(environ, mapping)
         creds = provider.load()
         self.assertEqual(creds.access_key, 'foo')
         self.assertEqual(creds.secret_key, 'bar')
@@ -1087,6 +1280,22 @@ class TestEnvVar(BaseEnvVar):
         with self.assertRaisesRegex(RuntimeError, error_message):
             creds.get_frozen_credentials()
 
+    def test_can_override_account_id_env_var_mapping(self):
+        environ = {
+            'AWS_ACCESS_KEY_ID': 'foo',
+            'AWS_SECRET_ACCESS_KEY': 'bar',
+            'AWS_SESSION_TOKEN': 'baz',
+            'FOO_ACCOUNT_ID': 'bin',
+        }
+        provider = credentials.EnvProvider(
+            environ, {'account_id': 'FOO_ACCOUNT_ID'}
+        )
+        creds = provider.load()
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.token, 'baz')
+        self.assertEqual(creds.account_id, 'bin')
+
     def test_partial_creds_is_an_error(self):
         # If the user provides an access key, they must also
         # provide a secret key.  Not doing so will generate an
@@ -1156,12 +1365,14 @@ class TestEnvVar(BaseEnvVar):
         # Now we update the environment with non-expired credentials,
         # so when we access the creds it will refresh and grab the new ones.
         expiry_time = datetime.now(tzlocal()) + timedelta(hours=1)
-        environ.update({
-            'AWS_ACCESS_KEY_ID': 'bin',
-            'AWS_SECRET_ACCESS_KEY': 'bam',
-            'AWS_SESSION_TOKEN': 'biz',
-            'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
-        })
+        environ.update(
+            {
+                'AWS_ACCESS_KEY_ID': 'bin',
+                'AWS_SECRET_ACCESS_KEY': 'bam',
+                'AWS_SESSION_TOKEN': 'biz',
+                'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
+            }
+        )
 
         frozen = creds.get_frozen_credentials()
         self.assertEqual(frozen.access_key, 'bin')
@@ -1186,12 +1397,14 @@ class TestEnvVar(BaseEnvVar):
         # they would immediately refresh upon access and we'd get the new
         # ones. Since they've got plenty of time, they shouldn't refresh.
         expiry_time = datetime.now(tzlocal()) + timedelta(hours=3)
-        environ.update({
-            'AWS_ACCESS_KEY_ID': 'bin',
-            'AWS_SECRET_ACCESS_KEY': 'bam',
-            'AWS_SESSION_TOKEN': 'biz',
-            'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
-        })
+        environ.update(
+            {
+                'AWS_ACCESS_KEY_ID': 'bin',
+                'AWS_SECRET_ACCESS_KEY': 'bam',
+                'AWS_SESSION_TOKEN': 'biz',
+                'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
+            }
+        )
 
         frozen = creds.get_frozen_credentials()
         self.assertEqual(frozen.access_key, 'foo')
@@ -1223,12 +1436,14 @@ class TestEnvVar(BaseEnvVar):
         self.assertEqual(frozen.token, 'baz')
 
         expiry_time = datetime.now(tzlocal()) - timedelta(hours=1)
-        environ.update({
-            'AWS_ACCESS_KEY_ID': 'bin',
-            'AWS_SECRET_ACCESS_KEY': 'bam',
-            'AWS_SESSION_TOKEN': 'biz',
-            'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
-        })
+        environ.update(
+            {
+                'AWS_ACCESS_KEY_ID': 'bin',
+                'AWS_SECRET_ACCESS_KEY': 'bam',
+                'AWS_SESSION_TOKEN': 'biz',
+                'AWS_CREDENTIAL_EXPIRATION': expiry_time.isoformat(),
+            }
+        )
 
         frozen = creds.get_frozen_credentials()
         self.assertEqual(frozen.access_key, 'foo')
@@ -1254,7 +1469,7 @@ class TestEnvVar(BaseEnvVar):
 
 class TestSharedCredentialsProvider(BaseEnvVar):
     def setUp(self):
-        super(TestSharedCredentialsProvider, self).setUp()
+        super().setUp()
         self.ini_parser = mock.Mock()
 
     def test_credential_file_exists_default_profile(self):
@@ -1265,8 +1480,10 @@ class TestSharedCredentialsProvider(Base
             }
         }
         provider = credentials.SharedCredentialProvider(
-            creds_filename='~/.aws/creds', profile_name='default',
-            ini_parser=self.ini_parser)
+            creds_filename='~/.aws/creds',
+            profile_name='default',
+            ini_parser=self.ini_parser,
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'foo')
@@ -1282,8 +1499,10 @@ class TestSharedCredentialsProvider(Base
             }
         }
         provider = credentials.SharedCredentialProvider(
-            creds_filename='~/.aws/creds', profile_name='default',
-            ini_parser=self.ini_parser)
+            creds_filename='~/.aws/creds',
+            profile_name='default',
+            ini_parser=self.ini_parser,
+        )
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             provider.load()
 
@@ -1296,8 +1515,10 @@ class TestSharedCredentialsProvider(Base
             }
         }
         provider = credentials.SharedCredentialProvider(
-            creds_filename='~/.aws/creds', profile_name='default',
-            ini_parser=self.ini_parser)
+            creds_filename='~/.aws/creds',
+            profile_name='default',
+            ini_parser=self.ini_parser,
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'foo')
@@ -1321,8 +1542,10 @@ class TestSharedCredentialsProvider(Base
         }
         # And we specify a profile_name of 'dev'.
         provider = credentials.SharedCredentialProvider(
-            creds_filename='~/.aws/creds', profile_name='dev',
-            ini_parser=self.ini_parser)
+            creds_filename='~/.aws/creds',
+            profile_name='dev',
+            ini_parser=self.ini_parser,
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'd')
@@ -1334,18 +1557,42 @@ class TestSharedCredentialsProvider(Base
         # It's ok if the credentials file does not exist, we should
         # just catch the appropriate errors and return None.
         self.ini_parser.side_effect = botocore.exceptions.ConfigNotFound(
-            path='foo')
+            path='foo'
+        )
         provider = credentials.SharedCredentialProvider(
-            creds_filename='~/.aws/creds', profile_name='dev',
-            ini_parser=self.ini_parser)
+            creds_filename='~/.aws/creds',
+            profile_name='dev',
+            ini_parser=self.ini_parser,
+        )
         creds = provider.load()
         self.assertIsNone(creds)
 
+    def test_credentials_file_exists_with_account_id(self):
+        self.ini_parser.return_value = {
+            'default': {
+                'aws_access_key_id': 'foo',
+                'aws_secret_access_key': 'bar',
+                'aws_session_token': 'baz',
+                'aws_account_id': 'bin',
+            }
+        }
+        provider = credentials.SharedCredentialProvider(
+            creds_filename='~/.aws/creds',
+            profile_name='default',
+            ini_parser=self.ini_parser,
+        )
+        creds = provider.load()
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.token, 'baz')
+        self.assertEqual(creds.method, 'shared-credentials-file')
+        self.assertEqual(creds.account_id, 'bin')
 
-class TestConfigFileProvider(BaseEnvVar):
 
+class TestConfigFileProvider(BaseEnvVar):
     def setUp(self):
-        super(TestConfigFileProvider, self).setUp()
+        super().setUp()
         profile_config = {
             'aws_access_key_id': 'a',
             'aws_secret_access_key': 'b',
@@ -1360,8 +1607,9 @@ class TestConfigFileProvider(BaseEnvVar)
         self.parser = parser
 
     def test_config_file_exists(self):
-        provider = credentials.ConfigProvider('cli.cfg', 'default',
-                                              self.parser)
+        provider = credentials.ConfigProvider(
+            'cli.cfg', 'default', self.parser
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'a')
@@ -1373,8 +1621,9 @@ class TestConfigFileProvider(BaseEnvVar)
         # Referring to a profile that's not in the config file
         # will result in session.config returning an empty dict.
         profile_name = 'NOT-default'
-        provider = credentials.ConfigProvider('cli.cfg', profile_name,
-                                              self.parser)
+        provider = credentials.ConfigProvider(
+            'cli.cfg', profile_name, self.parser
+        )
         creds = provider.load()
         self.assertIsNone(creds)
 
@@ -1382,9 +1631,11 @@ class TestConfigFileProvider(BaseEnvVar)
         # We should move on to the next provider if the config file
         # can't be found.
         self.parser.side_effect = botocore.exceptions.ConfigNotFound(
-            path='cli.cfg')
-        provider = credentials.ConfigProvider('cli.cfg', 'default',
-                                              self.parser)
+            path='cli.cfg'
+        )
+        provider = credentials.ConfigProvider(
+            'cli.cfg', 'default', self.parser
+        )
         creds = provider.load()
         self.assertIsNone(creds)
 
@@ -1400,10 +1651,29 @@ class TestConfigFileProvider(BaseEnvVar)
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             provider.load()
 
+    def test_config_file_with_account_id(self):
+        profile_config = {
+            'aws_access_key_id': 'foo',
+            'aws_secret_access_key': 'bar',
+            'aws_session_token': 'baz',
+            'aws_account_id': 'bin',
+        }
+        parsed = {'profiles': {'default': profile_config}}
+        parser = mock.Mock()
+        parser.return_value = parsed
+        provider = credentials.ConfigProvider('cli.cfg', 'default', parser)
+        creds = provider.load()
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.token, 'baz')
+        self.assertEqual(creds.method, 'config-file')
+        self.assertEqual(creds.account_id, 'bin')
+
 
 class TestBotoProvider(BaseEnvVar):
     def setUp(self):
-        super(TestBotoProvider, self).setUp()
+        super().setUp()
         self.ini_parser = mock.Mock()
 
     def test_boto_config_file_exists_in_home_dir(self):
@@ -1416,8 +1686,9 @@ class TestBotoProvider(BaseEnvVar):
                 'aws_secret_access_key': 'b',
             }
         }
-        provider = credentials.BotoProvider(environ=environ,
-                                            ini_parser=self.ini_parser)
+        provider = credentials.BotoProvider(
+            environ=environ, ini_parser=self.ini_parser
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'a')
@@ -1426,9 +1697,7 @@ class TestBotoProvider(BaseEnvVar):
         self.assertEqual(creds.method, 'boto-config')
 
     def test_env_var_set_for_boto_location(self):
-        environ = {
-            'BOTO_CONFIG': 'alternate-config.cfg'
-        }
+        environ = {'BOTO_CONFIG': 'alternate-config.cfg'}
         self.ini_parser.return_value = {
             'Credentials': {
                 # boto's config file does not support a session token
@@ -1437,8 +1706,9 @@ class TestBotoProvider(BaseEnvVar):
                 'aws_secret_access_key': 'b',
             }
         }
-        provider = credentials.BotoProvider(environ=environ,
-                                            ini_parser=self.ini_parser)
+        provider = credentials.BotoProvider(
+            environ=environ, ini_parser=self.ini_parser
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'a')
@@ -1452,9 +1722,11 @@ class TestBotoProvider(BaseEnvVar):
 
     def test_no_boto_config_file_exists(self):
         self.ini_parser.side_effect = botocore.exceptions.ConfigNotFound(
-            path='foo')
-        provider = credentials.BotoProvider(environ={},
-                                            ini_parser=self.ini_parser)
+            path='foo'
+        )
+        provider = credentials.BotoProvider(
+            environ={}, ini_parser=self.ini_parser
+        )
         creds = provider.load()
         self.assertIsNone(creds)
 
@@ -1466,14 +1738,12 @@ class TestBotoProvider(BaseEnvVar):
                 # Missing aws_secret_access_key.
             }
         }
-        provider = credentials.BotoProvider(environ={},
-                                            ini_parser=ini_parser)
+        provider = credentials.BotoProvider(environ={}, ini_parser=ini_parser)
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             provider.load()
 
 
 class TestOriginalEC2Provider(BaseEnvVar):
-
     def test_load_ec2_credentials_file_not_exist(self):
         provider = credentials.OriginalEC2Provider(environ={})
         creds = provider.load()
@@ -1488,8 +1758,9 @@ class TestOriginalEC2Provider(BaseEnvVar
             'AWSAccessKeyId': 'a',
             'AWSSecretKey': 'b',
         }
-        provider = credentials.OriginalEC2Provider(environ=environ,
-                                                   parser=parser)
+        provider = credentials.OriginalEC2Provider(
+            environ=environ, parser=parser
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'a')
@@ -1511,7 +1782,8 @@ class TestInstanceMetadataProvider(BaseE
             'role_name': 'myrole',
         }
         provider = credentials.InstanceMetadataProvider(
-            iam_role_fetcher=fetcher)
+            iam_role_fetcher=fetcher
+        )
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.assertEqual(creds.access_key, 'a')
@@ -1523,7 +1795,8 @@ class TestInstanceMetadataProvider(BaseE
         fetcher = mock.Mock()
         fetcher.retrieve_iam_role_credentials.return_value = {}
         provider = credentials.InstanceMetadataProvider(
-            iam_role_fetcher=fetcher)
+            iam_role_fetcher=fetcher
+        )
         creds = provider.load()
         self.assertIsNone(creds)
         fetcher.retrieve_iam_role_credentials.assert_called_with()
@@ -1531,7 +1804,7 @@ class TestInstanceMetadataProvider(BaseE
 
 class CredentialResolverTest(BaseEnvVar):
     def setUp(self):
-        super(CredentialResolverTest, self).setUp()
+        super().setUp()
         self.provider1 = mock.Mock()
         self.provider1.METHOD = 'provider1'
         self.provider1.CANONICAL_NAME = 'CustomProvider1'
@@ -1561,8 +1834,9 @@ class CredentialResolverTest(BaseEnvVar)
     def test_first_credential_non_none_wins(self):
         self.provider1.load.return_value = None
         self.provider2.load.return_value = self.fake_creds
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         creds = resolver.load_credentials()
         self.assertEqual(creds.access_key, 'a')
         self.assertEqual(creds.secret_key, 'b')
@@ -1573,16 +1847,18 @@ class CredentialResolverTest(BaseEnvVar)
     def test_no_creds_loaded(self):
         self.provider1.load.return_value = None
         self.provider2.load.return_value = None
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         creds = resolver.load_credentials()
         self.assertIsNone(creds)
 
     def test_inject_additional_providers_after_existing(self):
         self.provider1.load.return_value = None
         self.provider2.load.return_value = self.fake_creds
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         # Now, if we were to call resolver.load() now, provider2 would
         # win because it's returning a non None response.
         # However we can inject a new provider before provider2 to
@@ -1611,8 +1887,9 @@ class CredentialResolverTest(BaseEnvVar)
         new_provider.METHOD = 'override'
         new_provider.load.return_value = credentials.Credentials('x', 'y', 'z')
 
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         resolver.insert_before(self.provider1.METHOD, new_provider)
         creds = resolver.load_credentials()
         self.assertEqual(creds.access_key, 'x')
@@ -1621,11 +1898,14 @@ class CredentialResolverTest(BaseEnvVar)
 
     def test_can_remove_providers(self):
         self.provider1.load.return_value = credentials.Credentials(
-            'a', 'b', 'c')
+            'a', 'b', 'c'
+        )
         self.provider2.load.return_value = credentials.Credentials(
-            'd', 'e', 'f')
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+            'd', 'e', 'f'
+        )
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         resolver.remove('provider1')
         creds = resolver.load_credentials()
         self.assertIsNotNone(creds)
@@ -1636,8 +1916,9 @@ class CredentialResolverTest(BaseEnvVar)
         self.provider2.load.assert_called_with()
 
     def test_provider_unknown(self):
-        resolver = credentials.CredentialResolver(providers=[self.provider1,
-                                                             self.provider2])
+        resolver = credentials.CredentialResolver(
+            providers=[self.provider1, self.provider2]
+        )
         # No error is raised if you try to remove an unknown provider.
         resolver.remove('providerFOO')
         # But an error IS raised if you try to insert after an unknown
@@ -1648,7 +1929,7 @@ class CredentialResolverTest(BaseEnvVar)
 
 class TestCreateCredentialResolver(BaseEnvVar):
     def setUp(self):
-        super(TestCreateCredentialResolver, self).setUp()
+        super().setUp()
 
         self.session = mock.Mock(spec=botocore.session.Session)
         self.session.get_component = self.fake_get_component
@@ -1665,10 +1946,10 @@ class TestCreateCredentialResolver(BaseE
         for name, value in self.fake_instance_variables.items():
             self.config_loader.set_config_variable(name, value)
 
-        self.session.get_config_variable = \
+        self.session.get_config_variable = (
             self.config_loader.get_config_variable
-        self.session.set_config_variable = \
-            self.fake_set_config_variable
+        )
+        self.session.set_config_variable = self.fake_set_config_variable
         self.session.instance_variables = self.fake_instance_variable_lookup
 
     def fake_get_component(self, key):
@@ -1691,7 +1972,8 @@ class TestCreateCredentialResolver(BaseE
         resolver = credentials.create_credential_resolver(self.session)
 
         self.assertTrue(
-            all(not isinstance(p, EnvProvider) for p in resolver.providers))
+            all(not isinstance(p, EnvProvider) for p in resolver.providers)
+        )
 
     def test_no_profile_checks_env_provider(self):
         # If no profile is provided,
@@ -1699,7 +1981,8 @@ class TestCreateCredentialResolver(BaseE
         resolver = credentials.create_credential_resolver(self.session)
         # Then an EnvProvider should be part of our credential lookup chain.
         self.assertTrue(
-            any(isinstance(p, EnvProvider) for p in resolver.providers))
+            any(isinstance(p, EnvProvider) for p in resolver.providers)
+        )
 
     def test_default_cache(self):
         resolver = credentials.create_credential_resolver(self.session)
@@ -1718,7 +2001,7 @@ class TestCreateCredentialResolver(BaseE
 
 class TestCanonicalNameSourceProvider(BaseEnvVar):
     def setUp(self):
-        super(TestCanonicalNameSourceProvider, self).setUp()
+        super().setUp()
         self.custom_provider1 = mock.Mock(spec=CredentialProvider)
         self.custom_provider1.METHOD = 'provider1'
         self.custom_provider1.CANONICAL_NAME = 'CustomProvider1'
@@ -1728,24 +2011,25 @@ class TestCanonicalNameSourceProvider(Ba
         self.fake_creds = credentials.Credentials('a', 'b', 'c')
 
     def test_load_source_credentials(self):
-        provider = credentials.CanonicalNameCredentialSourcer(providers=[
-            self.custom_provider1, self.custom_provider2
-        ])
+        provider = credentials.CanonicalNameCredentialSourcer(
+            providers=[self.custom_provider1, self.custom_provider2]
+        )
         self.custom_provider1.load.return_value = self.fake_creds
         result = provider.source_credentials('CustomProvider1')
         self.assertIs(result, self.fake_creds)
 
     def test_load_source_credentials_case_insensitive(self):
-        provider = credentials.CanonicalNameCredentialSourcer(providers=[
-            self.custom_provider1, self.custom_provider2
-        ])
+        provider = credentials.CanonicalNameCredentialSourcer(
+            providers=[self.custom_provider1, self.custom_provider2]
+        )
         self.custom_provider1.load.return_value = self.fake_creds
         result = provider.source_credentials('cUsToMpRoViDeR1')
         self.assertIs(result, self.fake_creds)
 
     def test_load_unknown_canonical_name_raises_error(self):
-        provider = credentials.CanonicalNameCredentialSourcer(providers=[
-            self.custom_provider1])
+        provider = credentials.CanonicalNameCredentialSourcer(
+            providers=[self.custom_provider1]
+        )
         with self.assertRaises(botocore.exceptions.UnknownCredentialError):
             provider.source_credentials('CustomUnknown')
 
@@ -1754,16 +2038,14 @@ class TestCanonicalNameSourceProvider(Ba
         assume_role_provider.METHOD = 'assume-role'
         assume_role_provider.CANONICAL_NAME = None
 
-        source = credentials.CanonicalNameCredentialSourcer(providers=[
-            assume_role_provider, provider
-        ])
+        source = credentials.CanonicalNameCredentialSourcer(
+            providers=[assume_role_provider, provider]
+        )
 
         # If the assume role provider returns credentials, those should be
         # what is returned.
         assume_role_provider.load.return_value = self.fake_creds
-        provider.load.return_value = credentials.Credentials(
-            'd', 'e', 'f'
-        )
+        provider.load.return_value = credentials.Credentials('d', 'e', 'f')
 
         creds = source.source_credentials(provider.CANONICAL_NAME)
         self.assertIsNotNone(creds)
@@ -1777,16 +2059,14 @@ class TestCanonicalNameSourceProvider(Ba
         assume_role_provider.METHOD = 'assume-role'
         assume_role_provider.CANONICAL_NAME = None
 
-        source = credentials.CanonicalNameCredentialSourcer(providers=[
-            assume_role_provider, provider
-        ])
+        source = credentials.CanonicalNameCredentialSourcer(
+            providers=[assume_role_provider, provider]
+        )
 
         # If the assume role provider returns nothing, then whatever is in
         # the config provider should be returned.
         assume_role_provider.load.return_value = None
-        provider.load.return_value = credentials.Credentials(
-            'd', 'e', 'f'
-        )
+        provider.load.return_value = credentials.Credentials('d', 'e', 'f')
 
         creds = source.source_credentials(provider.CANONICAL_NAME)
         self.assertIsNotNone(creds)
@@ -1825,9 +2105,9 @@ class TestCanonicalNameSourceProvider(Ba
         assume_role_provider.CANONICAL_NAME = None
         assume_role_provider.load.return_value = self.fake_creds
 
-        provider = credentials.CanonicalNameCredentialSourcer(providers=[
-            assume_role_provider
-        ])
+        provider = credentials.CanonicalNameCredentialSourcer(
+            providers=[assume_role_provider]
+        )
 
         creds = provider.source_credentials('SharedConfig')
         self.assertIsNotNone(creds)
@@ -1843,7 +2123,8 @@ class TestCanonicalNameSourceProvider(Ba
 
     def test_get_canonical_shared_files_without_assume_role(self):
         provider = credentials.CanonicalNameCredentialSourcer(
-            providers=[self.custom_provider1])
+            providers=[self.custom_provider1]
+        )
         with self.assertRaises(botocore.exceptions.UnknownCredentialError):
             provider.source_credentials('SharedConfig')
         with self.assertRaises(botocore.exceptions.UnknownCredentialError):
@@ -1851,7 +2132,6 @@ class TestCanonicalNameSourceProvider(Ba
 
 
 class TestAssumeRoleCredentialProvider(unittest.TestCase):
-
     maxDiff = None
 
     def setUp(self):
@@ -1867,12 +2147,12 @@ class TestAssumeRoleCredentialProvider(u
                 },
                 'non-static': {
                     'role_arn': 'myrole',
-                    'credential_source': 'Environment'
+                    'credential_source': 'Environment',
                 },
                 'chained': {
                     'role_arn': 'chained-role',
-                    'source_profile': 'development'
-                }
+                    'source_profile': 'development',
+                },
             }
         }
 
@@ -1903,13 +2183,16 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache={}, profile_name='development')
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         creds = provider.load()
 
@@ -1928,13 +2211,16 @@ class TestAssumeRoleCredentialProvider(u
                 # we test both parsing as well as serializing
                 # from a given datetime because the credentials
                 # are immediately expired.
-                'Expiration': datetime.now(tzlocal()) + timedelta(hours=20)
+                'Expiration': datetime.now(tzlocal()) + timedelta(hours=20),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache={}, profile_name='development')
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         creds = provider.load()
 
@@ -1946,7 +2232,8 @@ class TestAssumeRoleCredentialProvider(u
         client = mock.Mock()
         time_zone = tzutc()
         expiration = datetime(
-            year=2016, month=11, day=6, hour=1, minute=30, tzinfo=time_zone)
+            year=2016, month=11, day=6, hour=1, minute=30, tzinfo=time_zone
+        )
         client.assume_role.return_value = {
             'Credentials': {
                 'AccessKeyId': 'foo',
@@ -1964,9 +2251,7 @@ class TestAssumeRoleCredentialProvider(u
         utc_timestamp = date_in_future.isoformat() + 'Z'
         self.fake_config['profiles']['development']['role_arn'] = 'myrole'
 
-        cache_key = (
-            '793d6e2f27667ab2da104824407e486bfec24a47'
-        )
+        cache_key = '793d6e2f27667ab2da104824407e486bfec24a47'
         cache = {
             cache_key: {
                 'Credentials': {
@@ -1978,8 +2263,11 @@ class TestAssumeRoleCredentialProvider(u
             }
         }
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), mock.Mock(),
-            cache=cache, profile_name='development')
+            self.create_config_loader(),
+            mock.Mock(),
+            cache=cache,
+            profile_name='development',
+        )
 
         creds = provider.load()
 
@@ -1994,9 +2282,7 @@ class TestAssumeRoleCredentialProvider(u
         # The profile we will be using has a cache entry, but the profile it
         # is sourcing from does not. This should result in the cached
         # credentials being used, and the source profile not being called.
-        cache_key = (
-            '3d440bf424caf7a5ee664fbf89139a84409f95c2'
-        )
+        cache_key = '3d440bf424caf7a5ee664fbf89139a84409f95c2'
         cache = {
             cache_key: {
                 'Credentials': {
@@ -2008,13 +2294,16 @@ class TestAssumeRoleCredentialProvider(u
             }
         }
 
-        client_creator = self.create_client_creator([
-            Exception("Attempted to call assume role when not needed.")
-        ])
+        client_creator = self.create_client_creator(
+            [Exception("Attempted to call assume role when not needed.")]
+        )
 
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache=cache, profile_name='chained')
+            self.create_config_loader(),
+            client_creator,
+            cache=cache,
+            profile_name='chained',
+        )
 
         creds = provider.load()
 
@@ -2028,24 +2317,26 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         cache = {}
         self.fake_config['profiles']['development']['role_arn'] = (
-            'arn:aws:iam::foo-role')
+            'arn:aws:iam::foo-role'
+        )
 
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache=cache, profile_name='development')
+            client_creator,
+            cache=cache,
+            profile_name='development',
+        )
 
         provider.load().get_frozen_credentials()
         # On windows, you cannot use a a ':' in the filename, so
         # we need to make sure it doesn't come up in the cache key.
-        cache_key = (
-            '3f8e35c8dca6211d496e830a2de723b2387921e3'
-        )
+        cache_key = '3f8e35c8dca6211d496e830a2de723b2387921e3'
         self.assertIn(cache_key, cache)
         self.assertEqual(cache[cache_key], response)
 
@@ -2055,26 +2346,29 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         cache = {}
         self.fake_config['profiles']['development']['role_arn'] = (
-            'arn:aws:iam::foo-role')
+            'arn:aws:iam::foo-role'
+        )
         self.fake_config['profiles']['development']['role_session_name'] = (
-            'foo_role_session_name')
+            'foo_role_session_name'
+        )
 
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache=cache, profile_name='development')
+            client_creator,
+            cache=cache,
+            profile_name='development',
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
 
-        cache_key = (
-            '5e75ce21b6a64ab183b29c4a159b6f0248121d51'
-        )
+        cache_key = '5e75ce21b6a64ab183b29c4a159b6f0248121d51'
         self.assertIn(cache_key, cache)
         self.assertEqual(cache[cache_key], response)
 
@@ -2101,8 +2395,11 @@ class TestAssumeRoleCredentialProvider(u
             }
         }
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache=cache, profile_name='development')
+            self.create_config_loader(),
+            client_creator,
+            cache=cache,
+            profile_name='development',
+        )
 
         creds = provider.load()
 
@@ -2124,14 +2421,18 @@ class TestAssumeRoleCredentialProvider(u
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache={}, profile_name='development')
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn='myrole', RoleSessionName='myname')
+            RoleArn='myrole', RoleSessionName='myname'
+        )
 
     def test_external_id_provided(self):
         self.fake_config['profiles']['development']['external_id'] = 'myid'
@@ -2146,14 +2447,18 @@ class TestAssumeRoleCredentialProvider(u
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache={}, profile_name='development')
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn='myrole', ExternalId='myid', RoleSessionName=mock.ANY)
+            RoleArn='myrole', ExternalId='myid', RoleSessionName=mock.ANY
+        )
 
     def test_assume_role_with_duration(self):
         self.fake_config['profiles']['development']['duration_seconds'] = 7200
@@ -2167,19 +2472,24 @@ class TestAssumeRoleCredentialProvider(u
         }
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache={}, profile_name='development')
+            self.create_config_loader(),
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn='myrole', RoleSessionName=mock.ANY,
-            DurationSeconds=7200)
+            RoleArn='myrole', RoleSessionName=mock.ANY, DurationSeconds=7200
+        )
 
     def test_assume_role_with_bad_duration(self):
-        self.fake_config['profiles']['development']['duration_seconds'] = 'garbage value'
+        self.fake_config['profiles']['development']['duration_seconds'] = (
+            'garbage value'
+        )
         response = {
             'Credentials': {
                 'AccessKeyId': 'foo',
@@ -2190,15 +2500,19 @@ class TestAssumeRoleCredentialProvider(u
         }
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache={}, profile_name='development')
+            self.create_config_loader(),
+            client_creator,
+            cache={},
+            profile_name='development',
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
 
         client = client_creator.return_value
         client.assume_role.assert_called_with(
-            RoleArn='myrole', RoleSessionName=mock.ANY)
+            RoleArn='myrole', RoleSessionName=mock.ANY
+        )
 
     def test_assume_role_with_mfa(self):
         self.fake_config['profiles']['development']['mfa_serial'] = 'mfa'
@@ -2213,8 +2527,12 @@ class TestAssumeRoleCredentialProvider(u
         client_creator = self.create_client_creator(with_response=response)
         prompter = mock.Mock(return_value='token-code')
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache={}, profile_name='development', prompter=prompter)
+            self.create_config_loader(),
+            client_creator,
+            cache={},
+            profile_name='development',
+            prompter=prompter,
+        )
 
         # The credentials won't actually be assumed until they're requested.
         provider.load().get_frozen_credentials()
@@ -2225,35 +2543,44 @@ class TestAssumeRoleCredentialProvider(u
         # token code that comes from prompting the user (the prompter
         # object).
         client.assume_role.assert_called_with(
-            RoleArn='myrole', RoleSessionName=mock.ANY, SerialNumber='mfa',
-            TokenCode='token-code')
+            RoleArn='myrole',
+            RoleSessionName=mock.ANY,
+            SerialNumber='mfa',
+            TokenCode='token-code',
+        )
 
     def test_assume_role_populates_session_name_on_refresh(self):
         expiration_time = self.some_future_time()
         next_expiration_time = expiration_time + timedelta(hours=4)
-        responses = [{
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                # We're creating an expiry time in the past so as
-                # soon as we try to access the credentials, the
-                # refresh behavior will be triggered.
-                'Expiration': expiration_time.isoformat(),
+        responses = [
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    # We're creating an expiry time in the past so as
+                    # soon as we try to access the credentials, the
+                    # refresh behavior will be triggered.
+                    'Expiration': expiration_time.isoformat(),
+                },
             },
-        }, {
-            'Credentials': {
-                'AccessKeyId': 'foo',
-                'SecretAccessKey': 'bar',
-                'SessionToken': 'baz',
-                'Expiration': next_expiration_time.isoformat(),
-            }
-        }]
+            {
+                'Credentials': {
+                    'AccessKeyId': 'foo',
+                    'SecretAccessKey': 'bar',
+                    'SessionToken': 'baz',
+                    'Expiration': next_expiration_time.isoformat(),
+                }
+            },
+        ]
         client_creator = self.create_client_creator(with_response=responses)
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache={}, profile_name='development',
-            prompter=mock.Mock(return_value='token-code'))
+            self.create_config_loader(),
+            client_creator,
+            cache={},
+            profile_name='development',
+            prompter=mock.Mock(return_value='token-code'),
+        )
 
         local_now = mock.Mock(return_value=datetime.now(tzlocal()))
         with mock.patch('botocore.credentials._local_now', local_now):
@@ -2295,9 +2622,12 @@ class TestAssumeRoleCredentialProvider(u
         }
         client_creator = self.create_client_creator(with_response=response)
         provider = credentials.AssumeRoleProvider(
-            self.create_config_loader(), client_creator,
-            cache={}, profile_name='development',
-            prompter=mock.Mock(return_value='token-code'))
+            self.create_config_loader(),
+            client_creator,
+            cache={},
+            profile_name='development',
+            prompter=mock.Mock(return_value='token-code'),
+        )
 
         local_now = mock.Mock(return_value=datetime.now(tzlocal()))
         with mock.patch('botocore.credentials._local_now', local_now):
@@ -2320,7 +2650,10 @@ class TestAssumeRoleCredentialProvider(u
         }
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='development')
+            mock.Mock(),
+            cache={},
+            profile_name='development',
+        )
 
         # Because a role_arn was not specified, the AssumeRoleProvider
         # is a noop and will not return credentials (which means we
@@ -2332,7 +2665,10 @@ class TestAssumeRoleCredentialProvider(u
         del self.fake_config['profiles']['development']['source_profile']
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='development')
+            mock.Mock(),
+            cache={},
+            profile_name='development',
+        )
 
         # source_profile is required, we shoudl get an error.
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
@@ -2343,7 +2679,10 @@ class TestAssumeRoleCredentialProvider(u
         dev_profile['source_profile'] = 'does-not-exist'
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='development')
+            mock.Mock(),
+            cache={},
+            profile_name='development',
+        )
 
         # source_profile is required, we shoudl get an error.
         with self.assertRaises(botocore.exceptions.InvalidConfigError):
@@ -2353,7 +2692,10 @@ class TestAssumeRoleCredentialProvider(u
         del self.fake_config['profiles']['longterm']['aws_access_key_id']
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='development')
+            mock.Mock(),
+            cache={},
+            profile_name='development',
+        )
 
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             provider.load()
@@ -2363,7 +2705,10 @@ class TestAssumeRoleCredentialProvider(u
         profile['credential_source'] = 'SomeCredentialProvider'
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='development')
+            mock.Mock(),
+            cache={},
+            profile_name='development',
+        )
 
         with self.assertRaises(botocore.exceptions.InvalidConfigError):
             provider.load()
@@ -2371,7 +2716,10 @@ class TestAssumeRoleCredentialProvider(u
     def test_credential_source_with_no_resolver_configured(self):
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='non-static')
+            mock.Mock(),
+            cache={},
+            profile_name='non-static',
+        )
 
         with self.assertRaises(botocore.exceptions.InvalidConfigError):
             provider.load()
@@ -2379,8 +2727,10 @@ class TestAssumeRoleCredentialProvider(u
     def test_credential_source_with_no_providers_configured(self):
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='non-static',
-            credential_sourcer=credentials.CanonicalNameCredentialSourcer([])
+            mock.Mock(),
+            cache={},
+            profile_name='non-static',
+            credential_sourcer=credentials.CanonicalNameCredentialSourcer([]),
         )
 
         with self.assertRaises(botocore.exceptions.InvalidConfigError):
@@ -2392,9 +2742,12 @@ class TestAssumeRoleCredentialProvider(u
 
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            mock.Mock(), cache={}, profile_name='non-static',
+            mock.Mock(),
+            cache={},
+            profile_name='non-static',
             credential_sourcer=credentials.CanonicalNameCredentialSourcer(
-                [fake_provider])
+                [fake_provider]
+            ),
         )
 
         # We configured the assume role provider with a single fake source
@@ -2411,7 +2764,7 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -2420,7 +2773,7 @@ class TestAssumeRoleCredentialProvider(u
             'profiles': {
                 'sourced': {
                     'role_arn': 'myrole',
-                    'credential_source': 'CustomMockProvider'
+                    'credential_source': 'CustomMockProvider',
                 }
             }
         }
@@ -2428,15 +2781,17 @@ class TestAssumeRoleCredentialProvider(u
 
         fake_provider = mock.Mock()
         fake_provider.CANONICAL_NAME = 'CustomMockProvider'
-        fake_creds = credentials.Credentials(
-            'akid', 'skid', 'token'
-        )
+        fake_creds = credentials.Credentials('akid', 'skid', 'token')
         fake_provider.load.return_value = fake_creds
 
         provider = credentials.AssumeRoleProvider(
-            config_loader, client_creator, cache={}, profile_name='sourced',
+            config_loader,
+            client_creator,
+            cache={},
+            profile_name='sourced',
             credential_sourcer=credentials.CanonicalNameCredentialSourcer(
-                [fake_provider])
+                [fake_provider]
+            ),
         )
 
         creds = provider.load()
@@ -2444,9 +2799,10 @@ class TestAssumeRoleCredentialProvider(u
         self.assertEqual(creds.secret_key, 'bar')
         self.assertEqual(creds.token, 'baz')
         client_creator.assert_called_with(
-            'sts', aws_access_key_id=fake_creds.access_key,
+            'sts',
+            aws_access_key_id=fake_creds.access_key,
             aws_secret_access_key=fake_creds.secret_key,
-            aws_session_token=fake_creds.token
+            aws_session_token=fake_creds.token,
         )
 
     def test_credential_source_returns_none(self):
@@ -2454,7 +2810,7 @@ class TestAssumeRoleCredentialProvider(u
             'profiles': {
                 'sourced': {
                     'role_arn': 'myrole',
-                    'credential_source': 'CustomMockProvider'
+                    'credential_source': 'CustomMockProvider',
                 }
             }
         }
@@ -2465,9 +2821,13 @@ class TestAssumeRoleCredentialProvider(u
         fake_provider.load.return_value = None
 
         provider = credentials.AssumeRoleProvider(
-            config_loader, mock.Mock(), cache={}, profile_name='sourced',
+            config_loader,
+            mock.Mock(),
+            cache={},
+            profile_name='sourced',
             credential_sourcer=credentials.CanonicalNameCredentialSourcer(
-                [fake_provider])
+                [fake_provider]
+            ),
         )
 
         with self.assertRaises(botocore.exceptions.CredentialRetrievalError):
@@ -2479,7 +2839,7 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -2490,14 +2850,16 @@ class TestAssumeRoleCredentialProvider(u
                     'aws_access_key_id': 'akid',
                     'aws_secret_access_key': 'skid',
                     'role_arn': 'myrole',
-                    'source_profile': 'self-referencial'
+                    'source_profile': 'self-referencial',
                 }
             }
         }
 
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(config),
-            client_creator, cache={}, profile_name='self-referencial'
+            client_creator,
+            cache={},
+            profile_name='self-referencial',
         )
 
         creds = provider.load()
@@ -2508,20 +2870,16 @@ class TestAssumeRoleCredentialProvider(u
     def test_infinite_looping_profiles_raises_error(self):
         config = {
             'profiles': {
-                'first': {
-                    'role_arn': 'first',
-                    'source_profile': 'second'
-                },
-                'second': {
-                    'role_arn': 'second',
-                    'source_profile': 'first'
-                }
+                'first': {'role_arn': 'first', 'source_profile': 'second'},
+                'second': {'role_arn': 'second', 'source_profile': 'first'},
             }
         }
 
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(config),
-            mock.Mock(), cache={}, profile_name='first'
+            mock.Mock(),
+            cache={},
+            profile_name='first',
         )
 
         with self.assertRaises(botocore.credentials.InfiniteLoopConfigError):
@@ -2534,37 +2892,35 @@ class TestAssumeRoleCredentialProvider(u
         ]
         responses = []
         for credential_set in assume_responses:
-            responses.append({
-                'Credentials': {
-                    'AccessKeyId': credential_set.access_key,
-                    'SecretAccessKey': credential_set.secret_key,
-                    'SessionToken': credential_set.token,
-                    'Expiration': self.some_future_time().isoformat()
+            responses.append(
+                {
+                    'Credentials': {
+                        'AccessKeyId': credential_set.access_key,
+                        'SecretAccessKey': credential_set.secret_key,
+                        'SessionToken': credential_set.token,
+                        'Expiration': self.some_future_time().isoformat(),
+                    }
                 }
-            })
+            )
         client_creator = self.create_client_creator(with_response=responses)
 
         static_credentials = Credentials('akid', 'skid')
         config = {
             'profiles': {
-                'first': {
-                    'role_arn': 'first',
-                    'source_profile': 'second'
-                },
-                'second': {
-                    'role_arn': 'second',
-                    'source_profile': 'third'
-                },
+                'first': {'role_arn': 'first', 'source_profile': 'second'},
+                'second': {'role_arn': 'second', 'source_profile': 'third'},
                 'third': {
                     'aws_access_key_id': static_credentials.access_key,
                     'aws_secret_access_key': static_credentials.secret_key,
-                }
+                },
             }
         }
 
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(config),
-            client_creator, cache={}, profile_name='first'
+            client_creator,
+            cache={},
+            profile_name='first',
         )
 
         creds = provider.load()
@@ -2573,18 +2929,22 @@ class TestAssumeRoleCredentialProvider(u
         self.assertEqual(creds.secret_key, expected_creds.secret_key)
         self.assertEqual(creds.token, expected_creds.token)
 
-        client_creator.assert_has_calls([
-            mock.call(
-                'sts', aws_access_key_id=static_credentials.access_key,
-                aws_secret_access_key=static_credentials.secret_key,
-                aws_session_token=static_credentials.token
-            ),
-            mock.call(
-                'sts', aws_access_key_id=assume_responses[0].access_key,
-                aws_secret_access_key=assume_responses[0].secret_key,
-                aws_session_token=assume_responses[0].token
-            ),
-        ])
+        client_creator.assert_has_calls(
+            [
+                mock.call(
+                    'sts',
+                    aws_access_key_id=static_credentials.access_key,
+                    aws_secret_access_key=static_credentials.secret_key,
+                    aws_session_token=static_credentials.token,
+                ),
+                mock.call(
+                    'sts',
+                    aws_access_key_id=assume_responses[0].access_key,
+                    aws_secret_access_key=assume_responses[0].secret_key,
+                    aws_session_token=assume_responses[0].token,
+                ),
+            ]
+        )
 
     def test_assume_role_with_profile_provider(self):
         response = {
@@ -2592,7 +2952,7 @@ class TestAssumeRoleCredentialProvider(u
                 'AccessKeyId': 'foo',
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
-                'Expiration': self.some_future_time().isoformat()
+                'Expiration': self.some_future_time().isoformat(),
             },
         }
         client_creator = self.create_client_creator(with_response=response)
@@ -2601,7 +2961,8 @@ class TestAssumeRoleCredentialProvider(u
 
         provider = credentials.AssumeRoleProvider(
             self.create_config_loader(),
-            client_creator, cache={},
+            client_creator,
+            cache={},
             profile_name='development',
             profile_provider_builder=mock_builder,
         )
@@ -2621,7 +2982,7 @@ class TestAssumeRoleCredentialProvider(u
         self.assertEqual(creds.token, 'baz')
 
 
-class ProfileProvider(object):
+class ProfileProvider:
     METHOD = 'fake'
 
     def __init__(self, profile_name):
@@ -2629,10 +2990,10 @@ class ProfileProvider(object):
 
     def load(self):
         return Credentials(
-            '%s-access-key' % self._profile_name,
-            '%s-secret-key' % self._profile_name,
-            '%s-token' % self._profile_name,
-            self.METHOD
+            f'{self._profile_name}-access-key',
+            f'{self._profile_name}-secret-key',
+            f'{self._profile_name}-token',
+            self.METHOD,
         )
 
 
@@ -2685,7 +3046,8 @@ class TestJSONCache(unittest.TestCase):
 
     def test_file_is_truncated_before_writing(self):
         self.cache['mykey'] = {
-            'really long key in the cache': 'really long value in cache'}
+            'really long key in the cache': 'really long value in cache'
+        }
         # Now overwrite it with a smaller value.
         self.cache['mykey'] = {'a': 'b'}
         self.assertEqual(self.cache['mykey'], {'a': 'b'})
@@ -2699,18 +3061,16 @@ class TestJSONCache(unittest.TestCase):
     def test_cache_with_custom_dumps_func(self):
         def _custom_serializer(obj):
             return "custom foo"
+
         def _custom_dumps(obj):
             return json.dumps(obj, default=_custom_serializer)
+
         custom_dir = os.path.join(self.tempdir, 'custom')
         custom_cache = credentials.JSONFileCache(
-            custom_dir,
-            dumps_func=_custom_dumps
+            custom_dir, dumps_func=_custom_dumps
         )
         custom_cache['test'] = {'bar': object()}
-        self.assertEqual(
-            custom_cache['test'],
-            {'bar': 'custom foo'}
-        )
+        self.assertEqual(custom_cache['test'], {'bar': 'custom foo'})
 
 
 class TestRefreshLogic(unittest.TestCase):
@@ -2720,10 +3080,10 @@ class TestRefreshLogic(unittest.TestCase
             # a manadatory refresh.
             creds_last_for=2,
             mandatory_refresh=3,
-            advisory_refresh=3)
+            advisory_refresh=3,
+        )
         temp = creds.get_frozen_credentials()
-        self.assertEqual(
-            temp, credentials.ReadOnlyCredentials('1', '1', '1'))
+        self.assertEqual(temp, credentials.ReadOnlyCredentials('1', '1', '1'))
 
     def test_advisory_refresh_needed(self):
         creds = IntegerRefresher(
@@ -2731,10 +3091,10 @@ class TestRefreshLogic(unittest.TestCase
             # a manadatory refresh.
             creds_last_for=4,
             mandatory_refresh=2,
-            advisory_refresh=5)
+            advisory_refresh=5,
+        )
         temp = creds.get_frozen_credentials()
-        self.assertEqual(
-            temp, credentials.ReadOnlyCredentials('1', '1', '1'))
+        self.assertEqual(temp, credentials.ReadOnlyCredentials('1', '1', '1'))
 
     def test_refresh_fails_is_not_an_error_during_advisory_period(self):
         fail_refresh = mock.Mock(side_effect=Exception("refresh failed"))
@@ -2742,7 +3102,7 @@ class TestRefreshLogic(unittest.TestCase
             creds_last_for=5,
             advisory_refresh=7,
             mandatory_refresh=3,
-            refresh_function=fail_refresh
+            refresh_function=fail_refresh,
         )
         temp = creds.get_frozen_credentials()
         # We should have called the refresh function.
@@ -2751,8 +3111,7 @@ class TestRefreshLogic(unittest.TestCase
         # Because we're in the advisory period we'll not propogate
         # the exception and return the current set of credentials
         # (generation '1').
-        self.assertEqual(
-            temp, credentials.ReadOnlyCredentials('0', '0', '0'))
+        self.assertEqual(temp, credentials.ReadOnlyCredentials('0', '0', '0'))
 
     def test_exception_propogated_on_error_during_mandatory_period(self):
         fail_refresh = mock.Mock(side_effect=Exception("refresh failed"))
@@ -2761,7 +3120,7 @@ class TestRefreshLogic(unittest.TestCase
             advisory_refresh=10,
             # Note we're in the mandatory period now (5 < 7< 10).
             mandatory_refresh=7,
-            refresh_function=fail_refresh
+            refresh_function=fail_refresh,
         )
         with self.assertRaisesRegex(Exception, 'refresh failed'):
             creds.get_frozen_credentials()
@@ -2774,7 +3133,7 @@ class TestRefreshLogic(unittest.TestCase
             creds_last_for=0,
             advisory_refresh=10,
             mandatory_refresh=7,
-            refresh_function=fail_refresh
+            refresh_function=fail_refresh,
         )
         with self.assertRaisesRegex(Exception, 'refresh failed'):
             # Because credentials are actually expired, any
@@ -2821,7 +3180,7 @@ class TestContainerProvider(BaseEnvVar):
         self.assertIsNone(creds)
 
     def full_url(self, url):
-        return 'http://%s%s' % (ContainerMetadataFetcher.IP_ADDRESS, url)
+        return f'http://{ContainerMetadataFetcher.IP_ADDRESS}{url}'
 
     def create_fetcher(self):
         fetcher = mock.Mock(spec=ContainerMetadataFetcher)
@@ -2836,16 +3195,17 @@ class TestContainerProvider(BaseEnvVar):
         timeobj = datetime.now(tzlocal())
         timestamp = (timeobj + timedelta(hours=24)).isoformat()
         fetcher.retrieve_full_uri.return_value = {
-            "AccessKeyId" : "access_key",
-            "SecretAccessKey" : "secret_key",
-            "Token" : "token",
-            "Expiration" : timestamp,
+            "AccessKeyId": "access_key",
+            "SecretAccessKey": "secret_key",
+            "Token": "token",
+            "Expiration": timestamp,
         }
         provider = credentials.ContainerProvider(environ, fetcher)
         creds = provider.load()
 
         fetcher.retrieve_full_uri.assert_called_with(
-            self.full_url('/latest/credentials?id=foo'), headers=None)
+            self.full_url('/latest/credentials?id=foo'), headers=None
+        )
         self.assertEqual(creds.access_key, 'access_key')
         self.assertEqual(creds.secret_key, 'secret_key')
         self.assertEqual(creds.token, 'token')
@@ -2861,17 +3221,17 @@ class TestContainerProvider(BaseEnvVar):
         future_timestamp = (timeobj + timedelta(hours=1)).isoformat()
         fetcher.retrieve_full_uri.side_effect = [
             {
-                "AccessKeyId" : "access_key_old",
-                "SecretAccessKey" : "secret_key_old",
-                "Token" : "token_old",
-                "Expiration" : expired_timestamp,
+                "AccessKeyId": "access_key_old",
+                "SecretAccessKey": "secret_key_old",
+                "Token": "token_old",
+                "Expiration": expired_timestamp,
             },
             {
-                "AccessKeyId" : "access_key_new",
-                "SecretAccessKey" : "secret_key_new",
-                "Token" : "token_new",
-                "Expiration" : future_timestamp,
-            }
+                "AccessKeyId": "access_key_new",
+                "SecretAccessKey": "secret_key_new",
+                "Token": "token_new",
+                "Expiration": future_timestamp,
+            },
         ]
         provider = credentials.ContainerProvider(environ, fetcher)
         creds = provider.load()
@@ -2885,15 +3245,13 @@ class TestContainerProvider(BaseEnvVar):
             'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/latest/credentials?id=foo'
         }
         fetcher = mock.Mock(spec=credentials.ContainerMetadataFetcher)
-        timeobj = datetime.now(tzlocal())
-        expired_timestamp = (timeobj - timedelta(hours=23)).isoformat()
-        future_timestamp = (timeobj + timedelta(hours=1)).isoformat()
         exception = botocore.exceptions.CredentialRetrievalError
-        fetcher.retrieve_full_uri.side_effect = exception(provider='ecs-role',
-                                                     error_msg='fake http error')
+        fetcher.retrieve_full_uri.side_effect = exception(
+            provider='ecs-role', error_msg='fake http error'
+        )
         with self.assertRaises(exception):
             provider = credentials.ContainerProvider(environ, fetcher)
-            creds = provider.load()
+            provider.load()
 
     def test_http_error_propagated_on_refresh(self):
         # We should ensure errors are still propagated even in the
@@ -2908,19 +3266,19 @@ class TestContainerProvider(BaseEnvVar):
         raised_exception = botocore.exceptions.CredentialRetrievalError
         fetcher.retrieve_full_uri.side_effect = [
             {
-                "AccessKeyId" : "access_key_old",
-                "SecretAccessKey" : "secret_key_old",
-                "Token" : "token_old",
-                "Expiration" : expired_timestamp,
+                "AccessKeyId": "access_key_old",
+                "SecretAccessKey": "secret_key_old",
+                "Token": "token_old",
+                "Expiration": expired_timestamp,
             },
-            http_exception(error_msg='HTTP connection timeout')
+            http_exception(error_msg='HTTP connection timeout'),
         ]
         provider = credentials.ContainerProvider(environ, fetcher)
         # First time works with no issues.
         creds = provider.load()
         # Second time with a refresh should propagate an error.
         with self.assertRaises(raised_exception):
-            frozen_creds = creds.get_frozen_credentials()
+            creds.get_frozen_credentials()
 
     def test_can_use_full_url(self):
         environ = {
@@ -2930,16 +3288,17 @@ class TestContainerProvider(BaseEnvVar):
         timeobj = datetime.now(tzlocal())
         timestamp = (timeobj + timedelta(hours=24)).isoformat()
         fetcher.retrieve_full_uri.return_value = {
-            "AccessKeyId" : "access_key",
-            "SecretAccessKey" : "secret_key",
-            "Token" : "token",
-            "Expiration" : timestamp,
+            "AccessKeyId": "access_key",
+            "SecretAccessKey": "secret_key",
+            "Token": "token",
+            "Expiration": timestamp,
         }
         provider = credentials.ContainerProvider(environ, fetcher)
         creds = provider.load()
 
-        fetcher.retrieve_full_uri.assert_called_with('http://localhost/foo',
-                                                     headers=None)
+        fetcher.retrieve_full_uri.assert_called_with(
+            'http://localhost/foo', headers=None
+        )
         self.assertEqual(creds.access_key, 'access_key')
         self.assertEqual(creds.secret_key, 'secret_key')
         self.assertEqual(creds.token, 'token')
@@ -2954,16 +3313,18 @@ class TestContainerProvider(BaseEnvVar):
         timeobj = datetime.now(tzlocal())
         timestamp = (timeobj + timedelta(hours=24)).isoformat()
         fetcher.retrieve_full_uri.return_value = {
-            "AccessKeyId" : "access_key",
-            "SecretAccessKey" : "secret_key",
-            "Token" : "token",
-            "Expiration" : timestamp,
+            "AccessKeyId": "access_key",
+            "SecretAccessKey": "secret_key",
+            "Token": "token",
+            "Expiration": timestamp,
         }
         provider = credentials.ContainerProvider(environ, fetcher)
         creds = provider.load()
 
         fetcher.retrieve_full_uri.assert_called_with(
-            'http://localhost/foo', headers={'Authorization': 'Basic auth-token'})
+            'http://localhost/foo',
+            headers={'Authorization': 'Basic auth-token'},
+        )
         self.assertEqual(creds.access_key, 'access_key')
         self.assertEqual(creds.secret_key, 'secret_key')
         self.assertEqual(creds.token, 'token')
@@ -3021,19 +3382,47 @@ class TestContainerProvider(BaseEnvVar):
         with self.assertRaises(ValueError):
             provider.load()
 
+    def test_can_retrieve_account_id(self):
+        environ = {
+            'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/latest/credentials?id=foo'
+        }
+        fetcher = self.create_fetcher()
+        timeobj = datetime.now(tzlocal())
+        timestamp = (timeobj + timedelta(hours=24)).isoformat()
+        fetcher.retrieve_full_uri.return_value = {
+            "AccessKeyId": "access_key",
+            "SecretAccessKey": "secret_key",
+            "Token": "token",
+            "Expiration": timestamp,
+            "AccountId": "account_id",
+        }
+        provider = credentials.ContainerProvider(environ, fetcher)
+        creds = provider.load()
+
+        fetcher.retrieve_full_uri.assert_called_with(
+            self.full_url('/latest/credentials?id=foo'), headers=None
+        )
+        self.assertEqual(creds.access_key, 'access_key')
+        self.assertEqual(creds.secret_key, 'secret_key')
+        self.assertEqual(creds.token, 'token')
+        self.assertEqual(creds.method, 'container-role')
+        self.assertEqual(creds.account_id, 'account_id')
+
 
 class TestProcessProvider(BaseEnvVar):
     def setUp(self):
-        super(TestProcessProvider, self).setUp()
+        super().setUp()
         self.loaded_config = {}
         self.load_config = mock.Mock(return_value=self.loaded_config)
         self.invoked_process = mock.Mock()
-        self.popen_mock = mock.Mock(return_value=self.invoked_process,
-                                    spec=subprocess.Popen)
+        self.popen_mock = mock.Mock(
+            return_value=self.invoked_process, spec=subprocess.Popen
+        )
 
     def create_process_provider(self, profile_name='default'):
-        provider = ProcessProvider(profile_name, self.load_config,
-                                               popen=self.popen_mock)
+        provider = ProcessProvider(
+            profile_name, self.load_config, popen=self.popen_mock
+        )
         return provider
 
     def _get_output(self, stdout, stderr=''):
@@ -3060,13 +3449,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         creds = provider.load()
@@ -3076,8 +3467,7 @@ class TestProcessProvider(BaseEnvVar):
         self.assertEqual(creds.token, 'baz')
         self.assertEqual(creds.method, 'custom-process')
         self.popen_mock.assert_called_with(
-            ['my-process'],
-            stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            ['my-process'], stdout=subprocess.PIPE, stderr=subprocess.PIPE
         )
 
     def test_can_pass_arguments_through(self):
@@ -3086,20 +3476,23 @@ class TestProcessProvider(BaseEnvVar):
                 'credential_process': 'my-process --foo --bar "one two"'
             }
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         creds = provider.load()
         self.assertIsNotNone(creds)
         self.popen_mock.assert_called_with(
             ['my-process', '--foo', '--bar', 'one two'],
-            stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
         )
 
     def test_can_refresh_credentials(self):
@@ -3112,20 +3505,24 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        old_creds = self._get_output({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': expired_date,
-        })
-        new_creds = self._get_output({
-            'Version': 1,
-            'AccessKeyId': 'foo2',
-            'SecretAccessKey': 'bar2',
-            'SessionToken': 'baz2',
-            'Expiration': future_date,
-        })
+        old_creds = self._get_output(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': expired_date,
+            }
+        )
+        new_creds = self._get_output(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo2',
+                'SecretAccessKey': 'bar2',
+                'SessionToken': 'baz2',
+                'Expiration': future_date,
+            }
+        )
         self.invoked_process.communicate.side_effect = [old_creds, new_creds]
         self.invoked_process.returncode = 0
 
@@ -3153,13 +3550,15 @@ class TestProcessProvider(BaseEnvVar):
             'default': {'credential_process': 'my-process'}
         }
         bad_version = 100
-        self._set_process_return_value({
-            'Version': bad_version,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': bad_version,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         exception = botocore.exceptions.CredentialRetrievalError
@@ -3170,13 +3569,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            # Let's say they forget a 'Version' key.
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                # Let's say they forget a 'Version' key.
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         exception = botocore.exceptions.CredentialRetrievalError
@@ -3187,13 +3588,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            # Missing access key.
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                # Missing access key.
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         exception = botocore.exceptions.CredentialRetrievalError
@@ -3204,13 +3607,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            # Missing secret key.
-            'SessionToken': 'baz',
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                # Missing secret key.
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         exception = botocore.exceptions.CredentialRetrievalError
@@ -3221,13 +3626,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            # Missing session token.
-            'Expiration': '2999-01-01T00:00:00Z',
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                # Missing session token.
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
 
         provider = self.create_process_provider()
         creds = provider.load()
@@ -3241,13 +3648,15 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            'SessionToken': 'baz',
-            # Missing expiration.
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                # Missing expiration.
+            }
+        )
 
         provider = self.create_process_provider()
         creds = provider.load()
@@ -3261,12 +3670,14 @@ class TestProcessProvider(BaseEnvVar):
         self.loaded_config['profiles'] = {
             'default': {'credential_process': 'my-process'}
         }
-        self._set_process_return_value({
-            'Version': 1,
-            'AccessKeyId': 'foo',
-            'SecretAccessKey': 'bar',
-            # Missing session token and expiration
-        })
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                # Missing session token and expiration
+            }
+        )
 
         provider = self.create_process_provider()
         creds = provider.load()
@@ -3276,10 +3687,60 @@ class TestProcessProvider(BaseEnvVar):
         self.assertIsNone(creds.token)
         self.assertEqual(creds.method, 'custom-process')
 
+    def test_can_retrieve_account_id(self):
+        self.loaded_config['profiles'] = {
+            'default': {'credential_process': 'my-process'}
+        }
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+                'AccountId': '123456789012',
+            }
+        )
+
+        provider = self.create_process_provider()
+        creds = provider.load()
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.token, 'baz')
+        self.assertEqual(creds.method, 'custom-process')
+        self.assertEqual(creds.account_id, '123456789012')
+
+    def test_can_retrieve_account_id_via_profile_config(self):
+        self.loaded_config['profiles'] = {
+            'default': {
+                'credential_process': 'my-process',
+                'aws_account_id': '123456789012',
+            }
+        }
+        self._set_process_return_value(
+            {
+                'Version': 1,
+                'AccessKeyId': 'foo',
+                'SecretAccessKey': 'bar',
+                'SessionToken': 'baz',
+                'Expiration': '2999-01-01T00:00:00Z',
+            }
+        )
+
+        provider = self.create_process_provider()
+        creds = provider.load()
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.access_key, 'foo')
+        self.assertEqual(creds.secret_key, 'bar')
+        self.assertEqual(creds.token, 'baz')
+        self.assertEqual(creds.method, 'custom-process')
+        self.assertEqual(creds.account_id, '123456789012')
+
 
 class TestProfileProviderBuilder(unittest.TestCase):
     def setUp(self):
-        super(TestProfileProviderBuilder, self).setUp()
+        super().setUp()
         self.mock_session = mock.Mock(spec=Session)
         self.builder = ProfileProviderBuilder(self.mock_session)
 
@@ -3312,18 +3773,25 @@ class TestSSOCredentialFetcher(unittest.
         self.account_id = '1234567890'
         self.access_token = {
             'accessToken': 'some.sso.token',
+            'expiresAt': '2018-10-18T22:26:40Z',
         }
         # This is just an arbitrary point in time we can pin to
         self.now = datetime(2008, 9, 23, 12, 26, 40, tzinfo=tzutc())
         # The SSO endpoint uses ms whereas the OIDC endpoint uses seconds
         self.now_timestamp = 1222172800000
+        self.mock_time_fetcher = mock.Mock(return_value=self.now)
 
         self.loader = mock.Mock(spec=SSOTokenLoader)
         self.loader.return_value = self.access_token
         self.fetcher = SSOCredentialFetcher(
-            self.start_url, self.sso_region, self.role_name, self.account_id,
-            self.mock_session.create_client, token_loader=self.loader,
+            self.start_url,
+            self.sso_region,
+            self.role_name,
+            self.account_id,
+            self.mock_session.create_client,
+            token_loader=self.loader,
             cache=self.cache,
+            time_fetcher=self.mock_time_fetcher,
         )
 
     def test_can_fetch_credentials(self):
@@ -3359,7 +3827,8 @@ class TestSSOCredentialFetcher(unittest.
                 'SecretAccessKey': 'bar',
                 'SessionToken': 'baz',
                 'Expiration': '2008-09-23T12:43:20Z',
-            }
+                'AccountId': '1234567890',
+            },
         }
         self.assertEqual(self.cache[cache_key], expected_cached_credentials)
 
@@ -3376,7 +3845,70 @@ class TestSSOCredentialFetcher(unittest.
         )
         with self.assertRaises(botocore.exceptions.UnauthorizedSSOTokenError):
             with self.stubber:
-                credentials = self.fetcher.fetch_credentials()
+                self.fetcher.fetch_credentials()
+
+    def test_expired_legacy_token_has_expected_behavior(self):
+        # Mock the current time to be in the future after the access token has expired
+        now = datetime(2018, 10, 19, 12, 26, 40, tzinfo=tzutc())
+        mock_client = mock.Mock()
+        create_mock_client = mock.Mock(return_value=mock_client)
+        fetcher = SSOCredentialFetcher(
+            self.start_url,
+            self.sso_region,
+            self.role_name,
+            self.account_id,
+            create_mock_client,
+            token_loader=self.loader,
+            cache=self.cache,
+            time_fetcher=mock.Mock(return_value=now),
+        )
+        # since the cached token is expired, an UnauthorizedSSOTokenError should be
+        # raised and GetRoleCredentials should not be called.
+        with self.assertRaises(botocore.exceptions.UnauthorizedSSOTokenError):
+            fetcher.fetch_credentials()
+        self.assertFalse(mock_client.get_role_credentials.called)
+
+    @mock.patch('botocore.credentials.register_feature_ids')
+    def test_feature_ids_registered_during_get_credentials(
+        self, mock_register
+    ):
+        response = {
+            'roleCredentials': {
+                'accessKeyId': 'foo',
+                'secretAccessKey': 'bar',
+                'sessionToken': 'baz',
+                'expiration': self.now_timestamp + 1000000,
+            }
+        }
+        params = {
+            'roleName': self.role_name,
+            'accountId': self.account_id,
+            'accessToken': self.access_token['accessToken'],
+        }
+        self.stubber.add_response(
+            'get_role_credentials',
+            response,
+            expected_params=params,
+        )
+
+        self.stubber.activate()
+        try:
+            fetcher = SSOCredentialFetcher(
+                self.start_url,
+                self.sso_region,
+                self.role_name,
+                self.account_id,
+                self.mock_session.create_client,
+                token_loader=self.loader,
+                cache=self.cache,
+                time_fetcher=self.mock_time_fetcher,
+            )
+            test_feature_ids = {'test_feature_1', 'test_feature_2'}
+            fetcher.feature_ids = test_feature_ids
+            fetcher.fetch_credentials()
+            mock_register.assert_called_once_with(test_feature_ids)
+        finally:
+            self.stubber.deactivate()
 
 
 class TestSSOProvider(unittest.TestCase):
@@ -3491,3 +4023,67 @@ class TestSSOProvider(unittest.TestCase)
         # If any required configuration is missing we should get an error
         with self.assertRaises(botocore.exceptions.InvalidConfigError):
             self.provider.load()
+
+    def test_load_sso_credentials_with_account_id(self):
+        self._add_get_role_credentials_response()
+        with self.stubber:
+            credentials = self.provider.load()
+            self.assertEqual(credentials.access_key, 'foo')
+            self.assertEqual(credentials.secret_key, 'bar')
+            self.assertEqual(credentials.token, 'baz')
+            self.assertEqual(credentials.account_id, '1234567890')
+
+
+@pytest.mark.parametrize(
+    "account_id, expected", [("123456789012", "123456789012"), (None, None)]
+)
+def test_get_deferred_property_account_id(account_id, expected):
+    creds = Credentials(
+        access_key='foo', secret_key='bar', token='baz', account_id=account_id
+    )
+    deferred_account_id = creds.get_deferred_property('account_id')
+    assert callable(deferred_account_id)
+    assert deferred_account_id() == expected
+
+
+@pytest.fixture
+def mock_base_assume_role_credential_fetcher():
+    return BaseAssumeRoleCredentialFetcher(
+        client_creator=mock.Mock(),
+        role_arn='arn:aws:iam::123456789012:role/RoleA',
+    )
+
+
+def test_add_account_id_to_response_with_valid_arn(
+    mock_base_assume_role_credential_fetcher,
+):
+    response = {
+        'Credentials': {},
+        'AssumedRoleUser': {
+            'AssumedRoleId': 'myroleid',
+            'Arn': 'arn:aws:iam::123456789012:role/RoleA',
+        },
+    }
+    mock_base_assume_role_credential_fetcher._add_account_id_to_response(
+        response
+    )
+    assert 'AccountId' in response['Credentials']
+    assert response['Credentials']['AccountId'] == '123456789012'
+
+
+def test_add_account_id_to_response_with_invalid_arn(
+    mock_base_assume_role_credential_fetcher, caplog
+):
+    response = {
+        'Credentials': {},
+        'AssumedRoleUser': {
+            'AssumedRoleId': 'myroleid',
+            'Arn': 'invalid-arn',
+        },
+    }
+    with caplog.at_level(logging.DEBUG):
+        mock_base_assume_role_credential_fetcher._add_account_id_to_response(
+            response
+        )
+    assert 'AccountId' not in response['Credentials']
+    assert 'Unable to extract account ID from Arn' in caplog.text
diff -pruN 2.23.6-1/tests/unit/botocore/test_discovery.py 2.31.35-1/tests/unit/botocore/test_discovery.py
--- 2.23.6-1/tests/unit/botocore/test_discovery.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_discovery.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,17 +1,20 @@
 import time
-from tests import mock, unittest
 
 from botocore.awsrequest import AWSRequest
 from botocore.client import ClientMeta
-from botocore.hooks import HierarchicalEmitter
-from botocore.model import ServiceModel
-from botocore.exceptions import ConnectionError
-from botocore.handlers import inject_api_version_header_if_needed
 from botocore.discovery import (
-    EndpointDiscoveryManager, EndpointDiscoveryHandler,
-    EndpointDiscoveryRequired, EndpointDiscoveryRefreshFailed,
+    EndpointDiscoveryHandler,
+    EndpointDiscoveryManager,
+    EndpointDiscoveryRefreshFailed,
+    EndpointDiscoveryRequired,
     block_endpoint_discovery_required_operations,
 )
+from botocore.exceptions import ConnectionError
+from botocore.handlers import inject_api_version_header_if_needed
+from botocore.hooks import HierarchicalEmitter
+from botocore.model import ServiceModel
+
+from tests import mock, unittest
 
 
 class BaseEndpointDiscoveryTest(unittest.TestCase):
@@ -28,48 +31,36 @@ class BaseEndpointDiscoveryTest(unittest
                 'serviceFullName': 'AwsFooService',
                 'signatureVersion': 'v4',
                 'signingName': 'awsfooservice',
-                'targetPrefix': 'awsfooservice'
+                'targetPrefix': 'awsfooservice',
             },
             'operations': {
                 'DescribeEndpoints': {
                     'name': 'DescribeEndpoints',
-                    'http': {
-                        'method': 'POST',
-                        'requestUri': '/'
-                    },
+                    'http': {'method': 'POST', 'requestUri': '/'},
                     'input': {'shape': 'DescribeEndpointsRequest'},
                     'output': {'shape': 'DescribeEndpointsResponse'},
-                    'endpointoperation': True
+                    'endpointoperation': True,
                 },
                 'TestDiscoveryRequired': {
                     'name': 'TestDiscoveryRequired',
-                    'http': {
-                        'method': 'POST',
-                        'requestUri': '/'
-                    },
+                    'http': {'method': 'POST', 'requestUri': '/'},
                     'input': {'shape': 'TestDiscoveryIdsRequest'},
                     'output': {'shape': 'EmptyStruct'},
-                    'endpointdiscovery': {'required': True}
+                    'endpointdiscovery': {'required': True},
                 },
                 'TestDiscoveryOptional': {
                     'name': 'TestDiscoveryOptional',
-                    'http': {
-                        'method': 'POST',
-                        'requestUri': '/'
-                    },
+                    'http': {'method': 'POST', 'requestUri': '/'},
                     'input': {'shape': 'TestDiscoveryIdsRequest'},
                     'output': {'shape': 'EmptyStruct'},
-                    'endpointdiscovery': {}
+                    'endpointdiscovery': {},
                 },
                 'TestDiscovery': {
                     'name': 'TestDiscovery',
-                    'http': {
-                        'method': 'POST',
-                        'requestUri': '/'
-                    },
+                    'http': {'method': 'POST', 'requestUri': '/'},
                     'input': {'shape': 'EmptyStruct'},
                     'output': {'shape': 'EmptyStruct'},
-                    'endpointdiscovery': {}
+                    'endpointdiscovery': {},
                 },
             },
             'shapes': {
@@ -78,35 +69,27 @@ class BaseEndpointDiscoveryTest(unittest
                     'type': 'structure',
                     'members': {
                         'Operation': {'shape': 'String'},
-                        'Identifiers': {'shape': 'Identifiers'}
-                    }
+                        'Identifiers': {'shape': 'Identifiers'},
+                    },
                 },
                 'DescribeEndpointsResponse': {
                     'type': 'structure',
                     'required': ['Endpoints'],
-                    'members': {
-                        'Endpoints': {'shape': 'Endpoints'}
-                    }
+                    'members': {'Endpoints': {'shape': 'Endpoints'}},
                 },
                 'Endpoint': {
                     'type': 'structure',
-                    'required': [
-                        'Address',
-                        'CachePeriodInMinutes'
-                    ],
+                    'required': ['Address', 'CachePeriodInMinutes'],
                     'members': {
                         'Address': {'shape': 'String'},
-                        'CachePeriodInMinutes': {'shape': 'Long'}
-                    }
-                },
-                'Endpoints': {
-                    'type': 'list',
-                    'member': {'shape': 'Endpoint'}
+                        'CachePeriodInMinutes': {'shape': 'Long'},
+                    },
                 },
+                'Endpoints': {'type': 'list', 'member': {'shape': 'Endpoint'}},
                 'Identifiers': {
                     'type': 'map',
                     'key': {'shape': 'String'},
-                    'value': {'shape': 'String'}
+                    'value': {'shape': 'String'},
                 },
                 'Long': {'type': 'long'},
                 'String': {'type': 'string'},
@@ -119,13 +102,10 @@ class BaseEndpointDiscoveryTest(unittest
                             'endpointdiscoveryid': True,
                         },
                         'Baz': {'shape': 'String'},
-                        'Nested': {'shape': 'Nested'}
-                    }
-                },
-                'EmptyStruct': {
-                    'type': 'structure',
-                    'members': {}
+                        'Nested': {'shape': 'Nested'},
+                    },
                 },
+                'EmptyStruct': {'type': 'structure', 'members': {}},
                 'Nested': {
                     'type': 'structure',
                     'required': 'Bar',
@@ -134,15 +114,15 @@ class BaseEndpointDiscoveryTest(unittest
                             'shape': 'String',
                             'endpointdiscoveryid': True,
                         }
-                    }
-                }
-            }
+                    },
+                },
+            },
         }
 
 
 class TestEndpointDiscoveryManager(BaseEndpointDiscoveryTest):
     def setUp(self):
-        super(TestEndpointDiscoveryManager, self).setUp()
+        super().setUp()
         self.construct_manager()
 
     def construct_manager(self, cache=None, time=None, side_effect=None):
@@ -151,12 +131,16 @@ class TestEndpointDiscoveryManager(BaseE
         self.meta.service_model = self.service_model
         self.client = mock.Mock()
         if side_effect is None:
-            side_effect = [{
-                'Endpoints': [{
-                    'Address': 'new.com',
-                    'CachePeriodInMinutes': 2,
-                }]
-            }]
+            side_effect = [
+                {
+                    'Endpoints': [
+                        {
+                            'Address': 'new.com',
+                            'CachePeriodInMinutes': 2,
+                        }
+                    ]
+                }
+            ]
         self.client.describe_endpoints.side_effect = side_effect
         self.client.meta = self.meta
         self.manager = EndpointDiscoveryManager(
@@ -167,8 +151,9 @@ class TestEndpointDiscoveryManager(BaseE
         model = self.service_model.operation_model('DescribeEndpoints')
         params = {'headers': {}}
         inject_api_version_header_if_needed(model, params)
-        self.assertEqual(params['headers'].get('x-amz-api-version'),
-                         '2018-08-31')
+        self.assertEqual(
+            params['headers'].get('x-amz-api-version'), '2018-08-31'
+        )
 
     def test_no_inject_api_version_if_not_endpoint_operation(self):
         model = self.service_model.operation_model('TestDiscoveryRequired')
@@ -177,10 +162,7 @@ class TestEndpointDiscoveryManager(BaseE
         self.assertNotIn('x-amz-api-version', params['headers'])
 
     def test_gather_identifiers(self):
-        params = {
-            'Foo': 'value1',
-            'Nested': {'Bar': 'value2'}
-        }
+        params = {'Foo': 'value1', 'Nested': {'Bar': 'value2'}}
         operation = self.service_model.operation_model('TestDiscoveryRequired')
         ids = self.manager.gather_identifiers(operation, params)
         self.assertEqual(ids, {'Foo': 'value1', 'Bar': 'value2'})
@@ -269,6 +251,7 @@ class TestEndpointDiscoveryManager(BaseE
     def test_describe_endpoint_cache_expiration(self):
         def _time():
             return float(0)
+
         cache = {}
         self.construct_manager(cache=cache, time=_time)
         self.manager.describe_endpoint(
@@ -280,9 +263,7 @@ class TestEndpointDiscoveryManager(BaseE
 
     def test_delete_endpoints_present(self):
         key = ()
-        cache = {
-            key: [{'Address': 'old.com', 'Expiration': 0}]
-        }
+        cache = {key: [{'Address': 'old.com', 'Expiration': 0}]}
         self.construct_manager(cache=cache)
         kwargs = {
             'Identifiers': {},
@@ -314,9 +295,7 @@ class TestEndpointDiscoveryManager(BaseE
 
     def test_describe_endpoint_optional_fails_stale_cache(self):
         key = ()
-        cache = {
-            key: [{'Address': 'old.com', 'Expiration': 0}]
-        }
+        cache = {key: [{'Address': 'old.com', 'Expiration': 0}]}
         side_effect = [ConnectionError(error=None)] * 2
         self.construct_manager(cache=cache, side_effect=side_effect)
         kwargs = {'Operation': 'TestDiscoveryOptional'}
@@ -341,9 +320,7 @@ class TestEndpointDiscoveryManager(BaseE
 
     def test_describe_endpoint_required_fails_stale_cache(self):
         key = ()
-        cache = {
-            key: [{'Address': 'old.com', 'Expiration': 0}]
-        }
+        cache = {key: [{'Address': 'old.com', 'Expiration': 0}]}
         side_effect = [ConnectionError(error=None)] * 2
         self.construct_manager(cache=cache, side_effect=side_effect)
         kwargs = {'Operation': 'TestDiscoveryRequired'}
@@ -357,10 +334,14 @@ class TestEndpointDiscoveryManager(BaseE
     def test_describe_endpoint_required_force_refresh_success(self):
         side_effect = [
             ConnectionError(error=None),
-            {'Endpoints': [{
-                'Address': 'new.com',
-                'CachePeriodInMinutes': 2,
-            }]},
+            {
+                'Endpoints': [
+                    {
+                        'Address': 'new.com',
+                        'CachePeriodInMinutes': 2,
+                    }
+                ]
+            },
         ]
         self.construct_manager(side_effect=side_effect)
         kwargs = {'Operation': 'TestDiscoveryRequired'}
@@ -377,10 +358,14 @@ class TestEndpointDiscoveryManager(BaseE
         fake_time.side_effect = [0, 100, 200]
         side_effect = [
             ConnectionError(error=None),
-            {'Endpoints': [{
-                'Address': 'new.com',
-                'CachePeriodInMinutes': 2,
-            }]},
+            {
+                'Endpoints': [
+                    {
+                        'Address': 'new.com',
+                        'CachePeriodInMinutes': 2,
+                    }
+                ]
+            },
         ]
         self.construct_manager(side_effect=side_effect, time=fake_time)
         kwargs = {'Operation': 'TestDiscoveryOptional'}
@@ -394,7 +379,7 @@ class TestEndpointDiscoveryManager(BaseE
 
 class TestEndpointDiscoveryHandler(BaseEndpointDiscoveryTest):
     def setUp(self):
-        super(TestEndpointDiscoveryHandler, self).setUp()
+        super().setUp()
         self.manager = mock.Mock(spec=EndpointDiscoveryManager)
         self.handler = EndpointDiscoveryHandler(self.manager)
         self.service_model = ServiceModel(self.service_description)
@@ -414,9 +399,7 @@ class TestEndpointDiscoveryHandler(BaseE
 
     def test_discover_endpoint(self):
         request = AWSRequest()
-        request.context = {
-            'discovery': {'identifiers': {}}
-        }
+        request.context = {'discovery': {'identifiers': {}}}
         self.manager.describe_endpoint.return_value = 'https://new.foo'
         self.handler.discover_endpoint(request, 'TestOperation')
         self.assertEqual(request.url, 'https://new.foo')
@@ -426,9 +409,7 @@ class TestEndpointDiscoveryHandler(BaseE
 
     def test_discover_endpoint_fails(self):
         request = AWSRequest()
-        request.context = {
-            'discovery': {'identifiers': {}}
-        }
+        request.context = {'discovery': {'identifiers': {}}}
         request.url = 'old.com'
         self.manager.describe_endpoint.return_value = None
         self.handler.discover_endpoint(request, 'TestOperation')
@@ -439,9 +420,7 @@ class TestEndpointDiscoveryHandler(BaseE
 
     def test_discover_endpoint_no_protocol(self):
         request = AWSRequest()
-        request.context = {
-            'discovery': {'identifiers': {}}
-        }
+        request.context = {'discovery': {'identifiers': {}}}
         self.manager.describe_endpoint.return_value = 'new.foo'
         self.handler.discover_endpoint(request, 'TestOperation')
         self.assertEqual(request.url, 'https://new.foo')
@@ -457,14 +436,8 @@ class TestEndpointDiscoveryHandler(BaseE
 
     def test_gather_identifiers(self):
         context = {}
-        params = {
-            'Foo': 'value1',
-            'Nested': {'Bar': 'value2'}
-        }
-        ids = {
-            'Foo': 'value1',
-            'Bar': 'value2'
-        }
+        params = {'Foo': 'value1', 'Nested': {'Bar': 'value2'}}
+        ids = {'Foo': 'value1', 'Bar': 'value2'}
         model = self.service_model.operation_model('TestDiscoveryRequired')
         self.manager.gather_identifiers.return_value = ids
         self.handler.gather_identifiers(params, model, context)
@@ -492,28 +465,20 @@ class TestEndpointDiscoveryHandler(BaseE
         self.assertIsNone(retry)
 
     def test_does_not_retry_other_errors(self):
-        parsed_response = {
-            'ResponseMetadata': {'HTTPStatusCode': 200}
-        }
+        parsed_response = {'ResponseMetadata': {'HTTPStatusCode': 200}}
         response = (None, parsed_response)
         retry = self.handler.handle_retries(None, response, None)
         self.assertIsNone(retry)
 
     def test_does_not_retry_if_no_context(self):
         request_dict = {'context': {}}
-        parsed_response = {
-            'ResponseMetadata': {'HTTPStatusCode': 421}
-        }
+        parsed_response = {'ResponseMetadata': {'HTTPStatusCode': 421}}
         response = (None, parsed_response)
         retry = self.handler.handle_retries(request_dict, response, None)
         self.assertIsNone(retry)
 
     def _assert_retries(self, parsed_response):
-        request_dict = {
-            'context': {
-                'discovery': {'identifiers': {}}
-            }
-        }
+        request_dict = {'context': {'discovery': {'identifiers': {}}}}
         response = (None, parsed_response)
         model = self.service_model.operation_model('TestDiscoveryOptional')
         retry = self.handler.handle_retries(request_dict, response, model)
@@ -523,9 +488,7 @@ class TestEndpointDiscoveryHandler(BaseE
         )
 
     def test_retries_421_status_code(self):
-        parsed_response = {
-            'ResponseMetadata': {'HTTPStatusCode': 421}
-        }
+        parsed_response = {'ResponseMetadata': {'HTTPStatusCode': 421}}
         self._assert_retries(parsed_response)
 
     def test_retries_invalid_endpoint_exception(self):
diff -pruN 2.23.6-1/tests/unit/botocore/test_endpoint.py 2.31.35-1/tests/unit/botocore/test_endpoint.py
--- 2.23.6-1/tests/unit/botocore/test_endpoint.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_endpoint.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,17 +14,22 @@ import io
 import socket
 
 import pytest
-
-from tests import mock, unittest
 from botocore.awsrequest import AWSRequest
-from botocore.endpoint import Endpoint, DEFAULT_TIMEOUT
-from botocore.endpoint import EndpointCreator
-from botocore.exceptions import EndpointConnectionError
-from botocore.exceptions import ConnectionClosedError
-from botocore.exceptions import HTTPClientError
+from botocore.endpoint import DEFAULT_TIMEOUT, Endpoint, EndpointCreator
+from botocore.exceptions import (
+    ConnectionClosedError,
+    EndpointConnectionError,
+    HTTPClientError,
+)
 from botocore.httpsession import URLLib3Session
-from botocore.model import OperationModel, ServiceId
-from botocore.model import ServiceModel, StructureShape
+from botocore.model import (
+    OperationModel,
+    ServiceId,
+    ServiceModel,
+    StructureShape,
+)
+
+from tests import mock, unittest
 
 
 def request_dict(**kwargs):
@@ -35,7 +40,7 @@ def request_dict(**kwargs):
         'query_string': '',
         'method': 'POST',
         'url': 'https://example.com',
-        'context': {}
+        'context': {},
     }
     base.update(kwargs)
     return base
@@ -52,7 +57,6 @@ class RecordStreamResets(io.StringIO):
 
 
 class TestEndpointBase(unittest.TestCase):
-
     def setUp(self):
         self.op = mock.Mock()
         self.op.has_streaming_output = False
@@ -61,15 +65,19 @@ class TestEndpointBase(unittest.TestCase
         self.event_emitter = mock.Mock()
         self.event_emitter.emit.return_value = []
         self.factory_patch = mock.patch(
-            'botocore.parsers.ResponseParserFactory')
+            'botocore.parsers.ResponseParserFactory'
+        )
         self.factory = self.factory_patch.start()
         self.endpoint = Endpoint(
             'https://ec2.us-west-2.amazonaws.com/',
             endpoint_prefix='ec2',
-            event_emitter=self.event_emitter)
+            event_emitter=self.event_emitter,
+        )
         self.http_session = mock.Mock()
         self.http_session.send.return_value = mock.Mock(
-            status_code=200, headers={}, content=b'{"Foo": "bar"}',
+            status_code=200,
+            headers={},
+            content=b'{"Foo": "bar"}',
         )
         self.endpoint.http_session = self.http_session
 
@@ -102,7 +110,6 @@ class TestEndpointBase(unittest.TestCase
 
 
 class TestEndpointFeatures(TestEndpointBase):
-
     def test_make_request_with_no_auth(self):
         self.endpoint.auth = None
         self.endpoint.make_request(self.op, request_dict())
@@ -123,7 +130,9 @@ class TestEndpointFeatures(TestEndpointB
     def test_make_request_with_context(self):
         r = request_dict()
         r['context'] = {'signing': {'region': 'us-west-2'}}
-        with mock.patch('botocore.endpoint.Endpoint.prepare_request') as prepare:
+        with mock.patch(
+            'botocore.endpoint.Endpoint.prepare_request'
+        ) as prepare:
             self.endpoint.make_request(self.op, r)
         request = prepare.call_args[0][0]
         self.assertEqual(request.context['signing']['region'], 'us-west-2')
@@ -138,7 +147,9 @@ class TestEndpointFeatures(TestEndpointB
 
         r = request_dict()
         self.http_session.send.return_value = mock.Mock(
-            status_code=400, headers={}, content=b'',
+            status_code=400,
+            headers={},
+            content=b'',
         )
         parser = mock.Mock()
         parser.parse.side_effect = [
@@ -170,7 +181,7 @@ class TestEndpointFeatures(TestEndpointB
 
 class TestRetryInterface(TestEndpointBase):
     def setUp(self):
-        super(TestRetryInterface, self).setUp()
+        super().setUp()
         self.retried_on_exception = None
         self._operation = mock.Mock(spec=OperationModel)
         self._operation.name = 'DescribeInstances'
@@ -181,17 +192,18 @@ class TestRetryInterface(TestEndpointBas
 
     def assert_events_emitted(self, event_emitter, expected_events):
         self.assertEqual(
-            self.get_events_emitted(event_emitter), expected_events)
+            self.get_events_emitted(event_emitter), expected_events
+        )
 
     def test_retry_events_are_emitted(self):
         self.endpoint.make_request(self._operation, request_dict())
         call_args = self.event_emitter.emit.call_args
-        self.assertEqual(call_args[0][0],
-                         'needs-retry.ec2.DescribeInstances')
+        self.assertEqual(call_args[0][0], 'needs-retry.ec2.DescribeInstances')
 
     def test_retry_events_can_alter_behavior(self):
         self.event_emitter.emit.side_effect = self.get_emitter_responses(
-            num_retries=1)
+            num_retries=1
+        )
         self.endpoint.make_request(self._operation, request_dict())
         self.assert_events_emitted(
             self.event_emitter,
@@ -201,12 +213,14 @@ class TestRetryInterface(TestEndpointBas
                 'before-parse.ec2.DescribeInstances',
                 'response-received.ec2.DescribeInstances',
                 'needs-retry.ec2.DescribeInstances',
-            ] * 2
+            ]
+            * 2,
         )
 
     def test_retry_on_socket_errors(self):
         self.event_emitter.emit.side_effect = self.get_emitter_responses(
-            num_retries=1, num_events=3)
+            num_retries=1, num_events=3
+        )
         self.http_session.send.side_effect = HTTPClientError(error='wrapped')
         with self.assertRaises(HTTPClientError):
             self.endpoint.make_request(self._operation, request_dict())
@@ -217,12 +231,14 @@ class TestRetryInterface(TestEndpointBas
                 'before-send.ec2.DescribeInstances',
                 'response-received.ec2.DescribeInstances',
                 'needs-retry.ec2.DescribeInstances',
-            ] * 2
+            ]
+            * 2,
         )
 
     def test_retry_attempts_added_to_response_metadata(self):
         self.event_emitter.emit.side_effect = self.get_emitter_responses(
-            num_retries=1)
+            num_retries=1
+        )
         parser = mock.Mock()
         parser.parse.return_value = {'ResponseMetadata': {}}
         self.factory.return_value.create_parser.return_value = parser
@@ -231,7 +247,8 @@ class TestRetryInterface(TestEndpointBas
 
     def test_retry_attempts_is_zero_when_not_retried(self):
         self.event_emitter.emit.side_effect = self.get_emitter_responses(
-            num_retries=0)
+            num_retries=0
+        )
         parser = mock.Mock()
         parser.parse.return_value = {'ResponseMetadata': {}}
         self.factory.return_value.create_parser.return_value = parser
@@ -241,7 +258,7 @@ class TestRetryInterface(TestEndpointBas
 
 class TestS3ResetStreamOnRetry(TestEndpointBase):
     def setUp(self):
-        super(TestS3ResetStreamOnRetry, self).setUp()
+        super().setUp()
 
     def max_attempts_retry_handler(self, attempts, **kwargs):
         # Simulate a max requests of 3.
@@ -271,7 +288,6 @@ class TestS3ResetStreamOnRetry(TestEndpo
 
 
 class TestEventStreamBody(TestEndpointBase):
-
     def test_event_stream_body_is_streaming(self):
         self.op.has_event_stream_output = True
         request = request_dict()
@@ -283,8 +299,8 @@ class TestEventStreamBody(TestEndpointBa
 class TestEndpointCreator(unittest.TestCase):
     def setUp(self):
         self.service_model = mock.Mock(
-            endpoint_prefix='ec2', signature_version='v2',
-            signing_name='ec2')
+            endpoint_prefix='ec2', signature_version='v2', signing_name='ec2'
+        )
         self.environ = {}
         self.environ_patch = mock.patch('os.environ', self.environ)
         self.environ_patch.start()
@@ -296,100 +312,129 @@ class TestEndpointCreator(unittest.TestC
 
     def test_creates_endpoint_with_configured_url(self):
         endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-east-1',
-            endpoint_url='https://endpoint.url')
+            self.service_model,
+            region_name='us-east-1',
+            endpoint_url='https://endpoint.url',
+        )
         self.assertEqual(endpoint.host, 'https://endpoint.url')
 
     def test_creates_endpoint_with_ipv4_url(self):
         endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-east-1',
-            endpoint_url='https://192.168.0.0')
+            self.service_model,
+            region_name='us-east-1',
+            endpoint_url='https://192.168.0.0',
+        )
         self.assertEqual(endpoint.host, 'https://192.168.0.0')
 
     def test_creates_endpoint_with_ipv6_url(self):
         endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-east-1',
-            endpoint_url='https://[100:0:2::61]:7480')
+            self.service_model,
+            region_name='us-east-1',
+            endpoint_url='https://[100:0:2::61]:7480',
+        )
         self.assertEqual(endpoint.host, 'https://[100:0:2::61]:7480')
 
     def test_raises_error_with_invalid_url(self):
         with pytest.raises(ValueError):
             self.creator.create_endpoint(
-                self.service_model, region_name='us-east-1',
-                endpoint_url='https://*.aws.amazon.com/'
+                self.service_model,
+                region_name='us-east-1',
+                endpoint_url='https://*.aws.amazon.com/',
             )
 
     def test_create_endpoint_with_default_timeout(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
             endpoint_url='https://example.com',
-            http_session_cls=self.mock_session)
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('timeout'), DEFAULT_TIMEOUT)
 
     def test_create_endpoint_with_customized_timeout(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
-            endpoint_url='https://example.com', timeout=123,
-            http_session_cls=self.mock_session)
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
+            endpoint_url='https://example.com',
+            timeout=123,
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('timeout'), 123)
 
     def test_get_endpoint_default_verify_ssl(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
             endpoint_url='https://example.com',
-            http_session_cls=self.mock_session)
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertTrue(session_args.get('verify'))
 
     def test_verify_ssl_can_be_disabled(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
-            endpoint_url='https://example.com', verify=False,
-            http_session_cls=self.mock_session)
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
+            endpoint_url='https://example.com',
+            verify=False,
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertFalse(session_args.get('verify'))
 
     def test_verify_ssl_can_specify_cert_bundle(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
-            endpoint_url='https://example.com', verify='/path/cacerts.pem',
-            http_session_cls=self.mock_session)
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
+            endpoint_url='https://example.com',
+            verify='/path/cacerts.pem',
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('verify'), '/path/cacerts.pem')
 
     def test_client_cert_can_specify_path(self):
         client_cert = '/some/path/cert'
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
-            endpoint_url='https://example.com', client_cert=client_cert,
-            http_session_cls=self.mock_session)
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
+            endpoint_url='https://example.com',
+            client_cert=client_cert,
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('client_cert'), '/some/path/cert')
 
     def test_honor_cert_bundle_env_var(self):
         self.environ['REQUESTS_CA_BUNDLE'] = '/env/cacerts.pem'
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
             endpoint_url='https://example.com',
-            http_session_cls=self.mock_session)
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('verify'), '/env/cacerts.pem')
 
     def test_env_ignored_if_explicitly_passed(self):
         self.environ['REQUESTS_CA_BUNDLE'] = '/env/cacerts.pem'
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
-            endpoint_url='https://example.com', verify='/path/cacerts.pem',
-            http_session_cls=self.mock_session)
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
+            endpoint_url='https://example.com',
+            verify='/path/cacerts.pem',
+            http_session_cls=self.mock_session,
+        )
         session_args = self.mock_session.call_args[1]
         # /path/cacerts.pem wins over the value from the env var.
         self.assertEqual(session_args.get('verify'), '/path/cacerts.pem')
 
     def test_can_specify_max_pool_conns(self):
-        endpoint = self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
+        self.creator.create_endpoint(
+            self.service_model,
+            region_name='us-west-2',
             endpoint_url='https://example.com',
             max_pool_connections=100,
             http_session_cls=self.mock_session,
@@ -400,8 +445,11 @@ class TestEndpointCreator(unittest.TestC
     def test_socket_options(self):
         socket_options = [(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)]
         self.creator.create_endpoint(
-            self.service_model, region_name='us-west-2',
+            self.service_model,
+            region_name='us-west-2',
             endpoint_url='https://example.com',
-            http_session_cls=self.mock_session, socket_options=socket_options)
+            http_session_cls=self.mock_session,
+            socket_options=socket_options,
+        )
         session_args = self.mock_session.call_args[1]
         self.assertEqual(session_args.get('socket_options'), socket_options)
diff -pruN 2.23.6-1/tests/unit/botocore/test_endpoint_provider.py 2.31.35-1/tests/unit/botocore/test_endpoint_provider.py
--- 2.23.6-1/tests/unit/botocore/test_endpoint_provider.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_endpoint_provider.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,7 +24,7 @@ from botocore.endpoint_provider import (
     RuleCreator,
     RuleSet,
     RuleSetStandardLibary,
-    TreeRule,
+    TreeRule, RuleSetEndpoint,
 )
 from botocore.exceptions import (
     EndpointResolutionError,
@@ -33,6 +33,8 @@ from botocore.exceptions import (
 from botocore.loaders import Loader
 from botocore.regions import EndpointRulesetResolver
 
+from unittest.mock import Mock, patch
+
 REGION_TEMPLATE = "{Region}"
 REGION_REF = {"ref": "Region"}
 BUCKET_ARN_REF = {"ref": "bucketArn"}
@@ -134,6 +136,7 @@ def endpoint_rule():
 
 def ruleset_testcases():
     filenames = [
+        "account-id",
         "array-index",
         "aws-region",
         "default-values",
@@ -152,7 +155,6 @@ def ruleset_testcases():
     endpoint_cases = []
     base_path = os.path.join(os.path.dirname(__file__), "data", "endpoints")
     for name in filenames:
-
         with open(os.path.join(base_path, "valid-rules", f"{name}.json")) as f:
             ruleset = json.load(f)
         with open(os.path.join(base_path, "test-cases", f"{name}.json")) as f:
@@ -248,7 +250,6 @@ def test_invalid_arn_returns_none(rule_l
                 "service": "s3",
                 "region": "",
                 "accountId": "",
-                "region": "",
                 "resourceId": ["myBucket"],
             },
         ),
@@ -488,3 +489,77 @@ def test_auth_schemes_conversion_first_a
 def test_get_attr(rule_lib, value, path, expected_value):
     result = rule_lib.get_attr(value, path)
     assert result == expected_value
+@pytest.mark.parametrize(
+    "use_ssl, endpoint_url, provider_params, expected_url",
+    [
+        # use_ssl=True, endpoint_url="http://..." → HTTP
+        (
+            True,
+            'http://custom.com',
+            {'Endpoint': 'http://custom.com'},
+            'http://custom.com',
+        ),
+        # use_ssl=True, endpoint_url="https://..." → HTTPS
+        (
+            True,
+            'https://custom.com',
+            {'Endpoint': 'https://custom.com'},
+            'https://custom.com',
+        ),
+        # use_ssl=False, endpoint_url="http://..." → HTTP
+        (
+            False,
+            'http://custom.com',
+            {'Endpoint': 'http://custom.com'},
+            'http://custom.com',
+        ),
+        # use_ssl=False, endpoint_url="https://..." → HTTPS
+        (
+            False,
+            'https://custom.com',
+            {'Endpoint': 'https://custom.com'},
+            'https://custom.com',
+        ),
+        # use_ssl=True, no endpoint → HTTPS
+        (
+            True,
+            'https://s3-test-only-domain.amazonaws.com',
+            {},
+            'https://s3-test-only-domain.amazonaws.com',
+        ),
+        # use_ssl=False, no endpoint → HTTP (downgrade)
+        (
+            False,
+            'https://s3-test-only-domain.amazonaws.com',
+            {},
+            'http://s3-test-only-domain.amazonaws.com',
+        ),
+    ],
+)
+def test_construct_endpoint_parametrized(
+    use_ssl, endpoint_url, provider_params, expected_url
+):
+    resolver = EndpointRulesetResolver(
+        endpoint_ruleset_data={
+            'version': '1.0',
+            'parameters': {},
+            'rules': [],
+        },
+        partition_data={},
+        service_model=None,
+        builtins={},
+        client_context=None,
+        event_emitter=None,
+        use_ssl=use_ssl,
+        requested_auth_scheme=None,
+    )
+
+    with patch.object(resolver._provider, 'resolve_endpoint') as mock_resolve:
+        mock_resolve.return_value = RuleSetEndpoint(
+            url=endpoint_url, properties={}, headers={}
+        )
+        with patch.object(
+            resolver, '_get_provider_params', return_value=provider_params
+        ):
+            result = resolver.construct_endpoint(None, None, None)
+            assert result.url == expected_url
\ No newline at end of file
diff -pruN 2.23.6-1/tests/unit/botocore/test_errorfactory.py 2.31.35-1/tests/unit/botocore/test_errorfactory.py
--- 2.23.6-1/tests/unit/botocore/test_errorfactory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_errorfactory.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,12 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest
-
+from botocore.errorfactory import BaseClientExceptions, ClientExceptionsFactory
 from botocore.exceptions import ClientError
-from botocore.errorfactory import BaseClientExceptions
-from botocore.errorfactory import ClientExceptionsFactory
 from botocore.model import ServiceModel
 
+from tests import unittest
+
 
 class TestBaseClientExceptions(unittest.TestCase):
     def setUp(self):
@@ -30,17 +29,20 @@ class TestBaseClientExceptions(unittest.
         exception_cls = type('MyException', (ClientError,), {})
         self.code_to_exception['MyExceptionCode'] = exception_cls
         self.assertIs(
-            self.exceptions.from_code('MyExceptionCode'), exception_cls)
+            self.exceptions.from_code('MyExceptionCode'), exception_cls
+        )
 
     def test_from_code_nonmatch_defaults_to_client_error(self):
         self.assertIs(
-            self.exceptions.from_code('SomeUnknownErrorCode'), ClientError)
+            self.exceptions.from_code('SomeUnknownErrorCode'), ClientError
+        )
 
     def test_gettattr_message(self):
         exception_cls = type('MyException', (ClientError,), {})
         self.code_to_exception['MyExceptionCode'] = exception_cls
         with self.assertRaisesRegex(
-                AttributeError, 'Valid exceptions are: MyException'):
+            AttributeError, 'Valid exceptions are: MyException'
+        ):
             self.exceptions.SomeUnmodeledError
 
 
@@ -65,15 +67,13 @@ class TestClientExceptionsFactory(unitte
                         {'shape': 'ExceptionForAnotherOperation'},
                         {'shape': 'ExceptionWithModeledCode'},
                     ],
-                }
+                },
             },
             'shapes': {
                 'ExceptionWithModeledCode': {
                     'type': 'structure',
                     'members': {},
-                    'error': {
-                        'code': 'ModeledCode'
-                    },
+                    'error': {'code': 'ModeledCode'},
                     'exception': True,
                 },
                 'ExceptionMissingCode': {
@@ -85,47 +85,54 @@ class TestClientExceptionsFactory(unitte
                     'type': 'structure',
                     'members': {},
                     'exception': True,
-                }
-            }
+                },
+            },
         }
         self.service_model = ServiceModel(self.model)
         self.exceptions_factory = ClientExceptionsFactory()
 
     def test_class_name(self):
         exceptions = self.exceptions_factory.create_client_exceptions(
-            self.service_model)
+            self.service_model
+        )
         self.assertEqual(exceptions.__class__.__name__, 'MyServiceExceptions')
 
     def test_creates_modeled_exception(self):
         exceptions = self.exceptions_factory.create_client_exceptions(
-            self.service_model)
+            self.service_model
+        )
         self.assertTrue(hasattr(exceptions, 'ExceptionWithModeledCode'))
         modeled_exception = exceptions.ExceptionWithModeledCode
         self.assertEqual(
-            modeled_exception.__name__, 'ExceptionWithModeledCode')
+            modeled_exception.__name__, 'ExceptionWithModeledCode'
+        )
         self.assertTrue(issubclass(modeled_exception, ClientError))
 
     def test_collects_modeled_exceptions_for_all_operations(self):
         exceptions = self.exceptions_factory.create_client_exceptions(
-            self.service_model)
+            self.service_model
+        )
         # Make sure exceptions were added for all operations by checking
         # an exception only found on an a different operation.
         self.assertTrue(hasattr(exceptions, 'ExceptionForAnotherOperation'))
         modeled_exception = exceptions.ExceptionForAnotherOperation
         self.assertEqual(
-            modeled_exception.__name__, 'ExceptionForAnotherOperation')
+            modeled_exception.__name__, 'ExceptionForAnotherOperation'
+        )
         self.assertTrue(issubclass(modeled_exception, ClientError))
 
     def test_creates_modeled_exception_mapping_that_has_code(self):
         exceptions = self.exceptions_factory.create_client_exceptions(
-            self.service_model)
+            self.service_model
+        )
         exception = exceptions.from_code('ModeledCode')
         self.assertEqual(exception.__name__, 'ExceptionWithModeledCode')
         self.assertTrue(issubclass(exception, ClientError))
 
     def test_creates_modeled_exception_mapping_that_has_no_code(self):
         exceptions = self.exceptions_factory.create_client_exceptions(
-            self.service_model)
+            self.service_model
+        )
         # For exceptions that do not have an explicit code associated to them,
         # the code is the name of the exception.
         exception = exceptions.from_code('ExceptionMissingCode')
diff -pruN 2.23.6-1/tests/unit/botocore/test_eventstream.py 2.31.35-1/tests/unit/botocore/test_eventstream.py
--- 2.23.6-1/tests/unit/botocore/test_eventstream.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_eventstream.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,25 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-"""Unit tests for the binary event stream decoder. """
-import pytest
-from tests import mock
+"""Unit tests for the binary event stream decoder."""
 
-from botocore.parsers import EventStreamXMLParser
+import pytest
 from botocore.eventstream import (
-    EventStreamMessage, MessagePrelude, EventStreamBuffer,
-    ChecksumMismatch, InvalidPayloadLength, InvalidHeadersLength,
-    DuplicateHeader, EventStreamHeaderParser, DecodeUtils, EventStream,
-    NoInitialResponseError
+    ChecksumMismatch,
+    DecodeUtils,
+    DuplicateHeader,
+    EventStream,
+    EventStreamBuffer,
+    EventStreamHeaderParser,
+    EventStreamMessage,
+    InvalidHeadersLength,
+    MessagePrelude,
+    NoInitialResponseError,
 )
 from botocore.exceptions import EventStreamError
+from botocore.parsers import EventStreamXMLParser
+
+from tests import mock
 
 EMPTY_MESSAGE = (
     b'\x00\x00\x00\x10\x00\x00\x00\x00\x05\xc2H\xeb}\x98\xc8\xff',
@@ -29,12 +36,12 @@ EMPTY_MESSAGE = (
         prelude=MessagePrelude(
             total_length=0x10,
             headers_length=0,
-            crc=0x05c248eb,
+            crc=0x05C248EB,
         ),
         headers={},
         payload=b'',
-        crc=0x7d98c8ff,
-    )
+        crc=0x7D98C8FF,
+    ),
 )
 
 INT8_HEADER = (
@@ -50,8 +57,8 @@ INT8_HEADER = (
         ),
         headers={'byte': -1},
         payload=b'',
-        crc=0xc2f869dc,
-    )
+        crc=0xC2F869DC,
+    ),
 )
 
 INT16_HEADER = (
@@ -63,12 +70,12 @@ INT16_HEADER = (
         prelude=MessagePrelude(
             total_length=0x19,
             headers_length=0x9,
-            crc=0x710e923e,
+            crc=0x710E923E,
         ),
         headers={'short': -1},
         payload=b'',
-        crc=0xb27cb6cc,
-    )
+        crc=0xB27CB6CC,
+    ),
 )
 
 INT32_HEADER = (
@@ -80,12 +87,12 @@ INT32_HEADER = (
         prelude=MessagePrelude(
             total_length=0x1D,
             headers_length=0xD,
-            crc=0x83e3f0e7,
+            crc=0x83E3F0E7,
         ),
         headers={'integer': -1},
         payload=b'',
-        crc=0x8b8e12eb,
-    )
+        crc=0x8B8E12EB,
+    ),
 )
 
 INT64_HEADER = (
@@ -97,55 +104,59 @@ INT64_HEADER = (
         prelude=MessagePrelude(
             total_length=0x1E,
             headers_length=0xE,
-            crc=0x5d4adb8d,
+            crc=0x5D4ADB8D,
         ),
         headers={'long': -1},
         payload=b'',
-        crc=0x4bc232da,
-    )
+        crc=0x4BC232DA,
+    ),
 )
 
 PAYLOAD_NO_HEADERS = (
     b"\x00\x00\x00\x1d\x00\x00\x00\x00\xfdR\x8cZ{'foo':'bar'}\xc3e96",
     EventStreamMessage(
         prelude=MessagePrelude(
-            total_length=0x1d,
+            total_length=0x1D,
             headers_length=0,
-            crc=0xfd528c5a,
+            crc=0xFD528C5A,
         ),
         headers={},
         payload=b"{'foo':'bar'}",
-        crc=0xc3653936,
-    )
+        crc=0xC3653936,
+    ),
 )
 
 PAYLOAD_ONE_STR_HEADER = (
-    (b"\x00\x00\x00=\x00\x00\x00 \x07\xfd\x83\x96\x0ccontent-type\x07\x00\x10"
-     b"application/json{'foo':'bar'}\x8d\x9c\x08\xb1"),
+    (
+        b"\x00\x00\x00=\x00\x00\x00 \x07\xfd\x83\x96\x0ccontent-type\x07\x00\x10"
+        b"application/json{'foo':'bar'}\x8d\x9c\x08\xb1"
+    ),
     EventStreamMessage(
         prelude=MessagePrelude(
-            total_length=0x3d,
+            total_length=0x3D,
             headers_length=0x20,
-            crc=0x07fd8396,
+            crc=0x07FD8396,
         ),
         headers={'content-type': 'application/json'},
         payload=b"{'foo':'bar'}",
-        crc=0x8d9c08b1,
-    )
+        crc=0x8D9C08B1,
+    ),
 )
 
 ALL_HEADERS_TYPES = (
-    (b"\x00\x00\x00\x62\x00\x00\x00\x52\x03\xb5\xcb\x9c"
-     b"\x010\x00\x011\x01\x012\x02\x02\x013\x03\x00\x03"
-     b"\x014\x04\x00\x00\x00\x04\x015\x05\x00\x00\x00\x00\x00\x00\x00\x05"
-     b"\x016\x06\x00\x05bytes\x017\x07\x00\x04utf8"
-     b"\x018\x08\x00\x00\x00\x00\x00\x00\x00\x08\x019\x090123456789abcdef"
-     b"\x63\x35\x36\x71"),
+    (
+        b"\x00\x00\x00\x62\x00\x00\x00\x52\x03\xb5\xcb\x9c"
+        b"\x010\x00\x011\x01\x012\x02\x02\x013\x03\x00\x03"
+        b"\x014\x04\x00\x00\x00\x04\x015\x05\x00\x00\x00\x00\x00\x00\x00\x05"
+        b"\x016\x06\x00\x05bytes\x017\x07\x00\x04utf8"
+        b"\x018\x08\x00\x00\x00\x00\x00\x00\x00\x08\x019\x090123456789abcdef"
+        b"\x63\x35\x36\x71"
+    ),
     EventStreamMessage(
         prelude=MessagePrelude(
             total_length=0x62,
             headers_length=0x52,
-            crc=0x03b5cb9c,
+            crc=0x03B5CB9C,
         ),
         headers={
             '0': True,
@@ -155,26 +166,28 @@ ALL_HEADERS_TYPES = (
             '4': 0x04,
             '5': 0x05,
             '6': b'bytes',
-            '7': u'utf8',
+            '7': 'utf8',
             '8': 0x08,
             '9': b'0123456789abcdef',
         },
         payload=b"",
         crc=0x63353671,
-    )
+    ),
 )
 
 ERROR_EVENT_MESSAGE = (
-    (b"\x00\x00\x00\x52\x00\x00\x00\x42\xbf\x23\x63\x7e"
-     b"\x0d:message-type\x07\x00\x05error"
-     b"\x0b:error-code\x07\x00\x04code"
-     b"\x0e:error-message\x07\x00\x07message"
-     b"\x6b\x6c\xea\x3d"),
+    (
+        b"\x00\x00\x00\x52\x00\x00\x00\x42\xbf\x23\x63\x7e"
+        b"\x0d:message-type\x07\x00\x05error"
+        b"\x0b:error-code\x07\x00\x04code"
+        b"\x0e:error-message\x07\x00\x07message"
+        b"\x6b\x6c\xea\x3d"
+    ),
     EventStreamMessage(
         prelude=MessagePrelude(
             total_length=0x52,
             headers_length=0x42,
-            crc=0xbf23637e,
+            crc=0xBF23637E,
         ),
         headers={
             ':message-type': 'error',
@@ -182,8 +195,8 @@ ERROR_EVENT_MESSAGE = (
             ':error-message': 'message',
         },
         payload=b'',
-        crc=0x6b6cea3d,
-    )
+        crc=0x6B6CEA3D,
+    ),
 )
 
 # Tuples of encoded messages and their expected decoded output
@@ -200,31 +213,51 @@ POSITIVE_CASES = [
 ]
 
 CORRUPTED_HEADER_LENGTH = (
-    (b"\x00\x00\x00=\xFF\x00\x01\x02\x07\xfd\x83\x96\x0ccontent-type\x07\x00"
-     b"\x10application/json{'foo':'bar'}\x8d\x9c\x08\xb1"),
-    InvalidHeadersLength
+    (
+        b"\x00\x00\x00=\xff\x00\x01\x02\x07\xfd\x83\x96\x0ccontent-type\x07\x00"
+        b"\x10application/json{'foo':'bar'}\x8d\x9c\x08\xb1"
+    ),
+    ChecksumMismatch,
 )
 
 CORRUPTED_HEADERS = (
-    (b"\x00\x00\x00=\x00\x00\x00 \x07\xfd\x83\x96\x0ccontent+type\x07\x00\x10"
-     b"application/json{'foo':'bar'}\x8d\x9c\x08\xb1"),
-    ChecksumMismatch
+    (
+        b"\x00\x00\x00=\x00\x00\x00 \x07\xfd\x83\x96\x0ccontent+type\x07\x00\x10"
+        b"application/json{'foo':'bar'}\x8d\x9c\x08\xb1"
+    ),
+    ChecksumMismatch,
 )
 
 CORRUPTED_LENGTH = (
     b"\x01\x00\x00\x1d\x00\x00\x00\x00\xfdR\x8cZ{'foo':'bar'}\xc3e96",
-    InvalidPayloadLength
+    ChecksumMismatch,
 )
 
 CORRUPTED_PAYLOAD = (
     b"\x00\x00\x00\x1d\x00\x00\x00\x00\xfdR\x8cZ{'foo':'bar'\x8d\xc3e96",
-    ChecksumMismatch
+    ChecksumMismatch,
 )
 
 DUPLICATE_HEADER = (
-    (b"\x00\x00\x00\x24\x00\x00\x00\x14\x4b\xb9\x82\xd0"
-     b"\x04test\x04asdf\x04test\x04asdf\xf3\xf4\x75\x63"),
-    DuplicateHeader
+    (
+        b"\x00\x00\x00\x24\x00\x00\x00\x14\x4b\xb9\x82\xd0"
+        b"\x04test\x04asdf\x04test\x04asdf\xf3\xf4\x75\x63"
+    ),
+    DuplicateHeader,
+)
+
+# In contrast to the CORRUPTED_HEADERS case, this message is otherwise
+# well-formed - the checksums match.
+INVALID_HEADERS_LENGTH = (
+    (
+        b"\x00\x00\x00\x3d"  # total length
+        b"\xff\x00\x01\x02"  # headers length
+        b"\x15\x83\xf5\xc2"  # prelude crc
+        b"\x0ccontent-type\x07\x00\x10application/json"  # headers
+        b"{'foo':'bar'}"  # payload
+        b"\x2f\x37\x7f\x5d"  # message crc
+    ),
+    InvalidHeadersLength,
 )
 
 # Tuples of encoded messages and their expected exception
@@ -234,11 +267,12 @@ NEGATIVE_CASES = [
     CORRUPTED_HEADERS,
     CORRUPTED_HEADER_LENGTH,
     DUPLICATE_HEADER,
+    INVALID_HEADERS_LENGTH,
 ]
 
 
 def assert_message_equal(message_a, message_b):
-    """Asserts all fields for two messages are equal. """
+    """Asserts all fields for two messages are equal."""
     assert message_a.prelude.total_length == message_b.prelude.total_length
     assert message_a.prelude.headers_length == message_b.prelude.headers_length
     assert message_a.prelude.crc == message_b.prelude.crc
@@ -248,7 +282,7 @@ def assert_message_equal(message_a, mess
 
 
 def test_partial_message():
-    """ Ensure that we can receive partial payloads. """
+    """Ensure that we can receive partial payloads."""
     data = EMPTY_MESSAGE[0]
     event_buffer = EventStreamBuffer()
     # This mid point is an arbitrary break in the middle of the headers
@@ -256,13 +290,13 @@ def test_partial_message():
     event_buffer.add_data(data[:mid_point])
     messages = list(event_buffer)
     assert messages == []
-    event_buffer.add_data(data[mid_point:len(data)])
+    event_buffer.add_data(data[mid_point : len(data)])
     for message in event_buffer:
         assert_message_equal(message, EMPTY_MESSAGE[1])
 
 
 def check_message_decodes(encoded, decoded):
-    """ Ensure the message decodes to what we expect. """
+    """Ensure the message decodes to what we expect."""
     event_buffer = EventStreamBuffer()
     event_buffer.add_data(encoded)
     messages = list(event_buffer)
@@ -272,39 +306,50 @@ def check_message_decodes(encoded, decod
 
 @pytest.mark.parametrize("encoded, decoded", POSITIVE_CASES)
 def test_positive_cases(encoded, decoded):
-    """Test that all positive cases decode how we expect. """
+    """Test that all positive cases decode how we expect."""
     check_message_decodes(encoded, decoded)
 
 
 def test_all_positive_cases():
-    """Test all positive cases can be decoded on the same buffer. """
+    """Test all positive cases can be decoded on the same buffer."""
     event_buffer = EventStreamBuffer()
     # add all positive test cases to the same buffer
-    for (encoded, _) in POSITIVE_CASES:
+    for encoded, _ in POSITIVE_CASES:
         event_buffer.add_data(encoded)
     # collect all of the expected messages
     expected_messages = [decoded for (_, decoded) in POSITIVE_CASES]
     # collect all of the decoded messages
     decoded_messages = list(event_buffer)
     # assert all messages match what we expect
-    for (expected, decoded) in zip(expected_messages, decoded_messages):
+    for expected, decoded in zip(expected_messages, decoded_messages):
         assert_message_equal(expected, decoded)
 
 
-@pytest.mark.parametrize("encoded, exception", NEGATIVE_CASES)
+@pytest.mark.parametrize(
+    "encoded, exception",
+    NEGATIVE_CASES,
+    ids=[
+        "corrupted-length",
+        "corrupted-payload",
+        "corrupted-headers",
+        "corrupted-headers-length",
+        "duplicate-headers",
+        "invalid-headers-length",
+    ],
+)
 def test_negative_cases(encoded, exception):
-    """Test that all negative cases raise the expected exception. """
+    """Test that all negative cases raise the expected exception."""
     with pytest.raises(exception):
         check_message_decodes(encoded, None)
 
 
 def test_header_parser():
-    """Test that the header parser supports all header types. """
+    """Test that the header parser supports all header types."""
     headers_data = (
-     b"\x010\x00\x011\x01\x012\x02\x02\x013\x03\x00\x03"
-     b"\x014\x04\x00\x00\x00\x04\x015\x05\x00\x00\x00\x00\x00\x00\x00\x05"
-     b"\x016\x06\x00\x05bytes\x017\x07\x00\x04utf8"
-     b"\x018\x08\x00\x00\x00\x00\x00\x00\x00\x08\x019\x090123456789abcdef"
+        b"\x010\x00\x011\x01\x012\x02\x02\x013\x03\x00\x03"
+        b"\x014\x04\x00\x00\x00\x04\x015\x05\x00\x00\x00\x00\x00\x00\x00\x05"
+        b"\x016\x06\x00\x05bytes\x017\x07\x00\x04utf8"
+        b"\x018\x08\x00\x00\x00\x00\x00\x00\x00\x08\x019\x090123456789abcdef"
     )
 
     expected_headers = {
@@ -315,7 +360,7 @@ def test_header_parser():
         '4': 0x04,
         '5': 0x05,
         '6': b'bytes',
-        '7': u'utf8',
+        '7': 'utf8',
         '8': 0x08,
         '9': b'0123456789abcdef',
     }
@@ -326,7 +371,7 @@ def test_header_parser():
 
 
 def test_message_prelude_properties():
-    """Test that calculated properties from the payload are correct. """
+    """Test that calculated properties from the payload are correct."""
     # Total length: 40, Headers Length: 15, random crc
     prelude = MessagePrelude(40, 15, 0x00000000)
     assert prelude.payload_length == 9
@@ -336,7 +381,7 @@ def test_message_prelude_properties():
 
 def test_message_to_response_dict():
     response_dict = PAYLOAD_ONE_STR_HEADER[1].to_response_dict()
-    assert response_dict['status_code'] ==200
+    assert response_dict['status_code'] == 200
 
     expected_headers = {'content-type': 'application/json'}
     assert response_dict['headers'] == expected_headers
@@ -356,37 +401,37 @@ def test_message_to_response_dict_error(
 
 
 def test_unpack_uint8():
-    (value, bytes_consumed) = DecodeUtils.unpack_uint8(b'\xDE')
+    (value, bytes_consumed) = DecodeUtils.unpack_uint8(b'\xde')
     assert bytes_consumed == 1
     assert value == 0xDE
 
 
 def test_unpack_uint32():
-    (value, bytes_consumed) = DecodeUtils.unpack_uint32(b'\xDE\xAD\xBE\xEF')
+    (value, bytes_consumed) = DecodeUtils.unpack_uint32(b'\xde\xad\xbe\xef')
     assert bytes_consumed == 4
     assert value == 0xDEADBEEF
 
 
 def test_unpack_int8():
-    (value, bytes_consumed) = DecodeUtils.unpack_int8(b'\xFE')
+    (value, bytes_consumed) = DecodeUtils.unpack_int8(b'\xfe')
     assert bytes_consumed == 1
     assert value == -2
 
 
 def test_unpack_int16():
-    (value, bytes_consumed) = DecodeUtils.unpack_int16(b'\xFF\xFE')
+    (value, bytes_consumed) = DecodeUtils.unpack_int16(b'\xff\xfe')
     assert bytes_consumed == 2
     assert value == -2
 
 
 def test_unpack_int32():
-    (value, bytes_consumed) = DecodeUtils.unpack_int32(b'\xFF\xFF\xFF\xFE')
+    (value, bytes_consumed) = DecodeUtils.unpack_int32(b'\xff\xff\xff\xfe')
     assert bytes_consumed == 4
     assert value == -2
 
 
 def test_unpack_int64():
-    test_bytes = b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE'
+    test_bytes = b'\xff\xff\xff\xff\xff\xff\xff\xfe'
     (value, bytes_consumed) = DecodeUtils.unpack_int64(test_bytes)
     assert bytes_consumed == 8
     assert value == -2
@@ -401,7 +446,8 @@ def test_unpack_array_short():
 
 def test_unpack_byte_array_int():
     (value, array_bytes_consumed) = DecodeUtils.unpack_byte_array(
-        b'\x00\x00\x00\x10application/json', length_byte_size=4)
+        b'\x00\x00\x00\x10application/json', length_byte_size=4
+    )
     assert array_bytes_consumed == 20
     assert value == b'application/json'
 
@@ -423,9 +469,10 @@ def test_unpack_prelude():
 
 def create_mock_raw_stream(*data):
     raw_stream = mock.Mock()
+
     def generator():
-        for chunk in data:
-            yield chunk
+        yield from data
+
     raw_stream.stream = generator
     return raw_stream
 
@@ -442,7 +489,7 @@ def test_event_stream_wrapper_iteration(
     assert len(events) == 1
 
     response_dict = {
-        'headers': {'event-id': 0x0000a00c},
+        'headers': {'event-id': 0x0000A00C},
         'body': b"{'foo':'bar'}",
         'status_code': 200,
     }
@@ -470,7 +517,7 @@ def test_event_stream_initial_response()
     raw_stream = create_mock_raw_stream(
         b'\x00\x00\x00~\x00\x00\x00O\xc5\xa3\xdd\xc6\r:message-type\x07\x00',
         b'\x05event\x0b:event-type\x07\x00\x10initial-response\r:content-type',
-        b'\x07\x00\ttext/json{"InitialResponse": "sometext"}\xf6\x98$\x83'
+        b'\x07\x00\ttext/json{"InitialResponse": "sometext"}\xf6\x98$\x83',
     )
     parser = mock.Mock(spec=EventStreamXMLParser)
     output_shape = mock.Mock()
diff -pruN 2.23.6-1/tests/unit/botocore/test_exceptions.py 2.31.35-1/tests/unit/botocore/test_exceptions.py
--- 2.23.6-1/tests/unit/botocore/test_exceptions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_exceptions.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pickle
-from tests import unittest
 
 import botocore.awsrequest
 import botocore.session
 from botocore import exceptions
 
+from tests import unittest
+
 
 def test_client_error_can_handle_missing_code_or_message():
     response = {'Error': {}}
@@ -43,12 +44,13 @@ def test_retry_info_added_when_present()
         'ResponseMetadata': {
             'MaxAttemptsReached': True,
             'RetryAttempts': 3,
-        }
+        },
     }
     error_msg = str(exceptions.ClientError(response, 'operation'))
     if '(reached max retries: 3)' not in error_msg:
-        raise AssertionError("retry information not inject into error "
-                             "message: %s" % error_msg)
+        raise AssertionError(
+            "retry information not inject into error " f"message: {error_msg}"
+        )
 
 
 def test_retry_info_not_added_if_retry_attempts_not_present():
@@ -56,15 +58,17 @@ def test_retry_info_not_added_if_retry_a
         'Error': {},
         'ResponseMetadata': {
             'MaxAttemptsReached': True,
-        }
+        },
     }
     # Because RetryAttempts is missing, retry info is not
     # in the error message.
     error_msg = str(exceptions.ClientError(response, 'operation'))
     if 'max retries' in error_msg:
-        raise AssertionError("Retry information should not be in exception "
-                             "message when retry attempts not in response "
-                             "metadata: %s" % error_msg)
+        raise AssertionError(
+            "Retry information should not be in exception "
+            "message when retry attempts not in response "
+            f"metadata: {error_msg}"
+        )
 
 
 def test_can_handle_when_response_missing_error_key():
@@ -73,23 +77,24 @@ def test_can_handle_when_response_missin
             'HTTPHeaders': {},
             'HTTPStatusCode': 503,
             'MaxAttemptsReached': True,
-            'RetryAttempts': 4
+            'RetryAttempts': 4,
         }
     }
     e = exceptions.ClientError(response, 'SomeOperation')
     if 'An error occurred (Unknown)' not in str(e):
         raise AssertionError(
             "Error code should default to 'Unknown' "
-            "when missing error response, instead got: %s" % str(e))
+            f"when missing error response, instead got: {str(e)}"
+        )
 
 
 class TestPickleExceptions(unittest.TestCase):
     def test_single_kwarg_botocore_error(self):
-        exception = botocore.exceptions.DataNotFoundError(
-            data_path='mypath')
+        exception = botocore.exceptions.DataNotFoundError(data_path='mypath')
         unpickled_exception = pickle.loads(pickle.dumps(exception))
         self.assertIsInstance(
-            unpickled_exception, botocore.exceptions.DataNotFoundError)
+            unpickled_exception, botocore.exceptions.DataNotFoundError
+        )
         self.assertEqual(str(unpickled_exception), str(exception))
         self.assertEqual(unpickled_exception.kwargs, exception.kwargs)
 
@@ -99,22 +104,26 @@ class TestPickleExceptions(unittest.Test
         )
         unpickled_exception = pickle.loads(pickle.dumps(exception))
         self.assertIsInstance(
-            unpickled_exception, botocore.exceptions.UnknownServiceError)
+            unpickled_exception, botocore.exceptions.UnknownServiceError
+        )
         self.assertEqual(str(unpickled_exception), str(exception))
         self.assertEqual(unpickled_exception.kwargs, exception.kwargs)
 
     def test_client_error(self):
         exception = botocore.exceptions.ClientError(
             error_response={
-                'Error': {'Code': 'MyCode', 'Message': 'MyMessage'}},
-            operation_name='myoperation'
+                'Error': {'Code': 'MyCode', 'Message': 'MyMessage'}
+            },
+            operation_name='myoperation',
         )
         unpickled_exception = pickle.loads(pickle.dumps(exception))
         self.assertIsInstance(
-            unpickled_exception, botocore.exceptions.ClientError)
+            unpickled_exception, botocore.exceptions.ClientError
+        )
         self.assertEqual(str(unpickled_exception), str(exception))
         self.assertEqual(
-            unpickled_exception.operation_name, exception.operation_name)
+            unpickled_exception.operation_name, exception.operation_name
+        )
         self.assertEqual(unpickled_exception.response, exception.response)
 
     def test_dynamic_client_error(self):
@@ -122,32 +131,31 @@ class TestPickleExceptions(unittest.Test
         client = session.create_client('s3', 'us-west-2')
         exception = client.exceptions.NoSuchKey(
             error_response={
-                'Error': {'Code': 'NoSuchKey', 'Message': 'Not Found'}},
-            operation_name='myoperation'
+                'Error': {'Code': 'NoSuchKey', 'Message': 'Not Found'}
+            },
+            operation_name='myoperation',
         )
         unpickled_exception = pickle.loads(pickle.dumps(exception))
         self.assertIsInstance(
-            unpickled_exception, botocore.exceptions.ClientError)
+            unpickled_exception, botocore.exceptions.ClientError
+        )
         self.assertEqual(str(unpickled_exception), str(exception))
         self.assertEqual(
-            unpickled_exception.operation_name, exception.operation_name)
+            unpickled_exception.operation_name, exception.operation_name
+        )
         self.assertEqual(unpickled_exception.response, exception.response)
 
     def test_http_client_error(self):
         exception = botocore.exceptions.HTTPClientError(
             botocore.awsrequest.AWSRequest(),
             botocore.awsrequest.AWSResponse(
-                url='https://foo.com',
-                status_code=400,
-                headers={},
-                raw=b''
+                url='https://foo.com', status_code=400, headers={}, raw=b''
             ),
-            error='error'
+            error='error',
         )
         unpickled_exception = pickle.loads(pickle.dumps(exception))
         self.assertIsInstance(
-            unpickled_exception,
-            botocore.exceptions.HTTPClientError
+            unpickled_exception, botocore.exceptions.HTTPClientError
         )
         self.assertEqual(str(unpickled_exception), str(exception))
         self.assertEqual(unpickled_exception.kwargs, exception.kwargs)
@@ -155,6 +163,8 @@ class TestPickleExceptions(unittest.Test
         # __eq__ defined so we want to make sure properties are at least
         # of the expected type
         self.assertIsInstance(
-            unpickled_exception.request, botocore.awsrequest.AWSRequest)
+            unpickled_exception.request, botocore.awsrequest.AWSRequest
+        )
         self.assertIsInstance(
-            unpickled_exception.response, botocore.awsrequest.AWSResponse)
+            unpickled_exception.response, botocore.awsrequest.AWSResponse
+        )
diff -pruN 2.23.6-1/tests/unit/botocore/test_handlers.py 2.31.35-1/tests/unit/botocore/test_handlers.py
--- 2.23.6-1/tests/unit/botocore/test_handlers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_handlers.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,6 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import mock, unittest, BaseSessionTest
-
 import base64
 import copy
 import io
@@ -20,33 +18,40 @@ import json
 import logging
 import os
 
-import pytest
-
 import botocore
 import botocore.session
-from botocore.compat import OrderedDict
-from botocore.exceptions import ParamValidationError, MD5UnavailableError
-from botocore.exceptions import AliasConflictParameterError
-from botocore.exceptions import MissingServiceIdError
+import pytest
+from botocore import handlers
+from botocore.args import ClientConfigString
 from botocore.awsrequest import AWSRequest
-from botocore.compat import quote
+from botocore.compat import OrderedDict, quote
 from botocore.config import Config
+from botocore.credentials import Credentials
 from botocore.docs.bcdoc.restdoc import DocumentStructure
-from botocore.docs.params import RequestParamsDocumenter
 from botocore.docs.example import RequestExampleDocumenter
+from botocore.docs.params import RequestParamsDocumenter
+from botocore.exceptions import (
+    AliasConflictParameterError,
+    MD5UnavailableError,
+    MissingServiceIdError,
+    ParamValidationError,
+)
 from botocore.hooks import HierarchicalEmitter
 from botocore.loaders import Loader
-from botocore.model import OperationModel, ServiceModel, ServiceId
-from botocore.model import DenormalizedStructureBuilder
+from botocore.model import (
+    DenormalizedStructureBuilder,
+    OperationModel,
+    ServiceId,
+    ServiceModel,
+)
 from botocore.session import Session
 from botocore.signers import RequestSigner
-from botocore.credentials import Credentials
 from botocore.utils import conditionally_calculate_md5
-from botocore import handlers
 
+from tests import BaseSessionTest, mock, unittest
 
-class TestHandlers(BaseSessionTest):
 
+class TestHandlers(BaseSessionTest):
     def test_get_console_output(self):
         parsed = {'Output': base64.b64encode(b'foobar').decode('utf-8')}
         handlers.decode_console_output(parsed)
@@ -61,7 +66,7 @@ class TestHandlers(BaseSessionTest):
         original = base64.b64encode(b'before\xffafter').decode('utf-8')
         parsed = {'Output': original}
         handlers.decode_console_output(parsed)
-        self.assertEqual(parsed['Output'], u'before\ufffdafter')
+        self.assertEqual(parsed['Output'], 'before\ufffdafter')
 
     def test_noop_if_output_key_does_not_exist(self):
         original = {'foo': 'bar'}
@@ -88,56 +93,59 @@ class TestHandlers(BaseSessionTest):
     def test_only_quote_url_path_not_version_id(self):
         params = {'CopySource': '/foo/bar++baz?versionId=123'}
         handlers.handle_copy_source_param(params)
-        self.assertEqual(params['CopySource'],
-                         '/foo/bar%2B%2Bbaz?versionId=123')
+        self.assertEqual(
+            params['CopySource'], '/foo/bar%2B%2Bbaz?versionId=123'
+        )
 
     def test_only_version_id_is_special_cased(self):
         params = {'CopySource': '/foo/bar++baz?notVersion=foo+'}
         handlers.handle_copy_source_param(params)
-        self.assertEqual(params['CopySource'],
-                         '/foo/bar%2B%2Bbaz%3FnotVersion%3Dfoo%2B')
+        self.assertEqual(
+            params['CopySource'], '/foo/bar%2B%2Bbaz%3FnotVersion%3Dfoo%2B'
+        )
 
     def test_copy_source_with_multiple_questions(self):
         params = {'CopySource': '/foo/bar+baz?a=baz+?versionId=a+'}
         handlers.handle_copy_source_param(params)
-        self.assertEqual(params['CopySource'],
-                         '/foo/bar%2Bbaz%3Fa%3Dbaz%2B?versionId=a+')
+        self.assertEqual(
+            params['CopySource'], '/foo/bar%2Bbaz%3Fa%3Dbaz%2B?versionId=a+'
+        )
 
     def test_copy_source_supports_dict(self):
-        params = {
-            'CopySource': {'Bucket': 'foo', 'Key': 'keyname+'}
-        }
+        params = {'CopySource': {'Bucket': 'foo', 'Key': 'keyname+'}}
         handlers.handle_copy_source_param(params)
         self.assertEqual(params['CopySource'], 'foo/keyname%2B')
 
     def test_copy_source_ignored_if_not_dict(self):
-        params = {
-            'CopySource': 'stringvalue'
-        }
+        params = {'CopySource': 'stringvalue'}
         handlers.handle_copy_source_param(params)
         self.assertEqual(params['CopySource'], 'stringvalue')
 
     def test_copy_source_supports_optional_version_id(self):
         params = {
-            'CopySource': {'Bucket': 'foo',
-                           'Key': 'keyname+',
-                           'VersionId': 'asdf+'}
+            'CopySource': {
+                'Bucket': 'foo',
+                'Key': 'keyname+',
+                'VersionId': 'asdf+',
+            }
         }
         handlers.handle_copy_source_param(params)
-        self.assertEqual(params['CopySource'],
-                         # Note, versionId is not url encoded.
-                         'foo/keyname%2B?versionId=asdf+')
+        self.assertEqual(
+            params['CopySource'],
+            # Note, versionId is not url encoded.
+            'foo/keyname%2B?versionId=asdf+',
+        )
 
     def test_copy_source_has_validation_failure(self):
         with self.assertRaisesRegex(ParamValidationError, 'Key'):
             handlers.handle_copy_source_param(
-                {'CopySource': {'Bucket': 'foo'}})
+                {'CopySource': {'Bucket': 'foo'}}
+            )
 
     def test_quote_source_header_needs_no_changes(self):
         params = {'CopySource': '/foo/bar?versionId=123'}
         handlers.handle_copy_source_param(params)
-        self.assertEqual(params['CopySource'],
-                         '/foo/bar?versionId=123')
+        self.assertEqual(params['CopySource'], '/foo/bar?versionId=123')
 
     def test_presigned_url_already_present_ec2(self):
         operation_model = mock.Mock()
@@ -146,10 +154,16 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('ec2'), 'us-east-1', 'ec2', 'v4',
-            credentials, event_emitter)
+            ServiceId('ec2'),
+            'us-east-1',
+            'ec2',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         handlers.inject_presigned_url_ec2(
-            params, request_signer, operation_model)
+            params, request_signer, operation_model
+        )
         self.assertEqual(params['body']['PresignedUrl'], 'https://foo')
 
     def test_presigned_url_with_source_region_ec2(self):
@@ -158,16 +172,22 @@ class TestHandlers(BaseSessionTest):
         params = {
             'body': {
                 'PresignedUrl': 'https://foo',
-                'SourceRegion': 'us-east-1'
+                'SourceRegion': 'us-east-1',
             }
         }
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('ec2'), 'us-east-1', 'ec2', 'v4', credentials,
-            event_emitter)
+            ServiceId('ec2'),
+            'us-east-1',
+            'ec2',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         handlers.inject_presigned_url_ec2(
-            params, request_signer, operation_model)
+            params, request_signer, operation_model
+        )
         self.assertEqual(params['body']['PresignedUrl'], 'https://foo')
         self.assertEqual(params['body']['SourceRegion'], 'us-east-1')
 
@@ -178,10 +198,16 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         handlers.inject_presigned_url_rds(
-            params, request_signer, operation_model)
+            params, request_signer, operation_model
+        )
         self.assertEqual(params['body']['PreSignedUrl'], 'https://foo')
 
     def test_presigned_url_with_source_region_rds(self):
@@ -190,16 +216,22 @@ class TestHandlers(BaseSessionTest):
         params = {
             'body': {
                 'PreSignedUrl': 'https://foo',
-                'SourceRegion': 'us-east-1'
+                'SourceRegion': 'us-east-1',
             }
         }
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         handlers.inject_presigned_url_rds(
-            params, request_signer, operation_model)
+            params, request_signer, operation_model
+        )
         self.assertEqual(params['body']['PreSignedUrl'], 'https://foo')
         self.assertNotIn('SourceRegion', params['body'])
 
@@ -209,8 +241,13 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('ec2'), 'us-east-1', 'ec2', 'v4', credentials,
-            event_emitter)
+            ServiceId('ec2'),
+            'us-east-1',
+            'ec2',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2'}
         request_dict['body'] = params
@@ -220,12 +257,13 @@ class TestHandlers(BaseSessionTest):
         request_dict['context'] = {}
 
         handlers.inject_presigned_url_ec2(
-            request_dict, request_signer, operation_model)
+            request_dict, request_signer, operation_model
+        )
 
-        self.assertIn('https://ec2.us-west-2.amazonaws.com?',
-                      params['PresignedUrl'])
-        self.assertIn('X-Amz-Signature',
-                      params['PresignedUrl'])
+        self.assertIn(
+            'https://ec2.us-west-2.amazonaws.com?', params['PresignedUrl']
+        )
+        self.assertIn('X-Amz-Signature', params['PresignedUrl'])
         self.assertIn('DestinationRegion', params['PresignedUrl'])
         # We should also populate the DestinationRegion with the
         # region_name of the endpoint object.
@@ -245,7 +283,8 @@ class TestHandlers(BaseSessionTest):
         request_dict['context'] = {}
 
         handlers.inject_presigned_url_ec2(
-            request_dict, request_signer, operation_model)
+            request_dict, request_signer, operation_model
+        )
 
         call_args = request_signer.generate_presigned_url.call_args
         operation_name = call_args[1].get('operation_name')
@@ -262,12 +301,18 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('ec2'), actual_region, 'ec2', 'v4', credentials,
-            event_emitter)
+            ServiceId('ec2'),
+            actual_region,
+            'ec2',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {
             'SourceRegion': 'us-west-2',
-            'DestinationRegion': 'us-east-1'}
+            'DestinationRegion': 'us-east-1',
+        }
         request_dict['body'] = params
         request_dict['url'] = 'https://ec2.us-west-1.amazonaws.com'
         request_dict['method'] = 'POST'
@@ -277,10 +322,12 @@ class TestHandlers(BaseSessionTest):
         # The user provides us-east-1, but we will override this to
         # endpoint.region_name, of 'us-west-1' in this case.
         handlers.inject_presigned_url_ec2(
-            request_dict, request_signer, operation_model)
+            request_dict, request_signer, operation_model
+        )
 
-        self.assertIn('https://ec2.us-west-2.amazonaws.com?',
-                      params['PresignedUrl'])
+        self.assertIn(
+            'https://ec2.us-west-2.amazonaws.com?', params['PresignedUrl']
+        )
 
         # Always use the DestinationRegion from the endpoint, regardless of
         # whatever value the user provides.
@@ -292,8 +339,13 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2'}
         request_dict['body'] = params
@@ -303,12 +355,13 @@ class TestHandlers(BaseSessionTest):
         request_dict['context'] = {}
 
         handlers.inject_presigned_url_rds(
-            request_dict, request_signer, operation_model)
+            request_dict, request_signer, operation_model
+        )
 
-        self.assertIn('https://rds.us-west-2.amazonaws.com?',
-                      params['PreSignedUrl'])
-        self.assertIn('X-Amz-Signature',
-                      params['PreSignedUrl'])
+        self.assertIn(
+            'https://rds.us-west-2.amazonaws.com?', params['PreSignedUrl']
+        )
+        self.assertIn('X-Amz-Signature', params['PreSignedUrl'])
         self.assertIn('DestinationRegion', params['PreSignedUrl'])
         # We should not populate the destination region for rds
         self.assertNotIn('DestinationRegion', params)
@@ -319,8 +372,12 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
         )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2'}
@@ -333,7 +390,7 @@ class TestHandlers(BaseSessionTest):
         handlers.inject_presigned_url_rds(
             params=request_dict,
             request_signer=request_signer,
-            model=operation_model
+            model=operation_model,
         )
 
         self.assertNotIn('SourceRegion', params)
@@ -344,8 +401,13 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2', 'PreSignedUrl': 'https://foo'}
         request_dict['body'] = params
@@ -357,7 +419,7 @@ class TestHandlers(BaseSessionTest):
         handlers.inject_presigned_url_rds(
             params=request_dict,
             request_signer=request_signer,
-            model=operation_model
+            model=operation_model,
         )
 
         self.assertNotIn('SourceRegion', params)
@@ -368,8 +430,13 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2'}
         request_dict['body'] = params
@@ -381,7 +448,7 @@ class TestHandlers(BaseSessionTest):
         handlers.inject_presigned_url_rds(
             params=request_dict,
             request_signer=request_signer,
-            model=operation_model
+            model=operation_model,
         )
 
         self.assertNotIn('DestinationRegion', params)
@@ -393,12 +460,15 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         handlers.inject_presigned_url_rds(
-            params=params,
-            request_signer=request_signer,
-            model=operation_model
+            params=params, request_signer=request_signer, model=operation_model
         )
         self.assertEqual(params['body']['PresignedUrl'], 'https://foo')
 
@@ -408,8 +478,13 @@ class TestHandlers(BaseSessionTest):
         credentials = Credentials('key', 'secret')
         event_emitter = HierarchicalEmitter()
         request_signer = RequestSigner(
-            ServiceId('rds'), 'us-east-1', 'rds', 'v4', credentials,
-            event_emitter)
+            ServiceId('rds'),
+            'us-east-1',
+            'rds',
+            'v4',
+            credentials,
+            event_emitter,
+        )
         request_dict = {}
         params = {'SourceRegion': 'us-west-2'}
         request_dict['body'] = params
@@ -421,27 +496,28 @@ class TestHandlers(BaseSessionTest):
         handlers.inject_presigned_url_rds(
             params=request_dict,
             request_signer=request_signer,
-            model=operation_model
+            model=operation_model,
         )
 
         self.assertNotIn('PresignedUrl', params)
-        self.assertIn('https://rds.us-west-2.amazonaws.com?',
-                      params['PreSignedUrl'])
+        self.assertIn(
+            'https://rds.us-west-2.amazonaws.com?', params['PreSignedUrl']
+        )
         self.assertIn('X-Amz-Signature', params['PreSignedUrl'])
 
     def test_route53_resource_id(self):
         event = 'before-parameter-build.route-53.GetHostedZone'
-        params = {'Id': '/hostedzone/ABC123',
-                  'HostedZoneId': '/hostedzone/ABC123',
-                  'ResourceId': '/hostedzone/DEF456',
-                  'DelegationSetId': '/hostedzone/GHI789',
-                  'ChangeId': '/hostedzone/JKL012',
-                  'Other': '/hostedzone/foo'}
+        params = {
+            'Id': '/hostedzone/ABC123',
+            'HostedZoneId': '/hostedzone/ABC123',
+            'ResourceId': '/hostedzone/DEF456',
+            'DelegationSetId': '/hostedzone/GHI789',
+            'ChangeId': '/hostedzone/JKL012',
+            'Other': '/hostedzone/foo',
+        }
         operation_def = {
             'name': 'GetHostedZone',
-            'input': {
-                'shape': 'GetHostedZoneInput'
-            }
+            'input': {'shape': 'GetHostedZoneInput'},
         }
         service_def = {
             'metadata': {},
@@ -449,39 +525,19 @@ class TestHandlers(BaseSessionTest):
                 'GetHostedZoneInput': {
                     'type': 'structure',
                     'members': {
-                        'Id': {
-                            'shape': 'ResourceId'
-                        },
-                        'HostedZoneId': {
-                            'shape': 'ResourceId'
-                        },
-                        'ResourceId': {
-                            'shape': 'ResourceId'
-                        },
-                        'DelegationSetId': {
-                            'shape': 'DelegationSetId'
-                        },
-                        'ChangeId': {
-                            'shape': 'ChangeId'
-                        },
-                        'Other': {
-                            'shape': 'String'
-                        }
-                    }
-                },
-                'ResourceId': {
-                    'type': 'string'
+                        'Id': {'shape': 'ResourceId'},
+                        'HostedZoneId': {'shape': 'ResourceId'},
+                        'ResourceId': {'shape': 'ResourceId'},
+                        'DelegationSetId': {'shape': 'DelegationSetId'},
+                        'ChangeId': {'shape': 'ChangeId'},
+                        'Other': {'shape': 'String'},
+                    },
                 },
-                'DelegationSetId': {
-                    'type': 'string'
-                },
-                'ChangeId': {
-                    'type': 'string'
-                },
-                'String': {
-                    'type': 'string'
-                }
-            }
+                'ResourceId': {'type': 'string'},
+                'DelegationSetId': {'type': 'string'},
+                'ChangeId': {'type': 'string'},
+                'String': {'type': 'string'},
+            },
         }
         model = OperationModel(operation_def, ServiceModel(service_def))
         self.session.emit(event, params=params, model=model)
@@ -498,13 +554,8 @@ class TestHandlers(BaseSessionTest):
     def test_route53_resource_id_missing_input_shape(self):
         event = 'before-parameter-build.route-53.GetHostedZone'
         params = {'HostedZoneId': '/hostedzone/ABC123'}
-        operation_def = {
-            'name': 'GetHostedZone'
-        }
-        service_def = {
-            'metadata': {},
-            'shapes': {}
-        }
+        operation_def = {'name': 'GetHostedZone'}
+        service_def = {'metadata': {}, 'shapes': {}}
         model = OperationModel(operation_def, ServiceModel(service_def))
         self.session.emit(event, params=params, model=model)
 
@@ -512,14 +563,19 @@ class TestHandlers(BaseSessionTest):
 
     def test_run_instances_userdata(self):
         user_data = 'This is a test'
-        b64_user_data = base64.b64encode(user_data.encode('latin-1')).decode('utf-8')
-        params = dict(ImageId='img-12345678',
-                      MinCount=1, MaxCount=5, UserData=user_data)
+        b64_user_data = base64.b64encode(user_data.encode('latin-1')).decode(
+            'utf-8'
+        )
+        params = dict(
+            ImageId='img-12345678', MinCount=1, MaxCount=5, UserData=user_data
+        )
         handlers.base64_encode_user_data(params=params)
-        result = {'ImageId': 'img-12345678',
-                  'MinCount': 1,
-                  'MaxCount': 5,
-                  'UserData': b64_user_data}
+        result = {
+            'ImageId': 'img-12345678',
+            'MinCount': 1,
+            'MaxCount': 5,
+            'UserData': b64_user_data,
+        }
         self.assertEqual(params, result)
 
     def test_run_instances_userdata_blob(self):
@@ -528,13 +584,16 @@ class TestHandlers(BaseSessionTest):
         # user data.
         user_data = b'\xc7\xa9This is a test'
         b64_user_data = base64.b64encode(user_data).decode('utf-8')
-        params = dict(ImageId='img-12345678',
-                      MinCount=1, MaxCount=5, UserData=user_data)
+        params = dict(
+            ImageId='img-12345678', MinCount=1, MaxCount=5, UserData=user_data
+        )
         handlers.base64_encode_user_data(params=params)
-        result = {'ImageId': 'img-12345678',
-                  'MinCount': 1,
-                  'MaxCount': 5,
-                  'UserData': b64_user_data}
+        result = {
+            'ImageId': 'img-12345678',
+            'MinCount': 1,
+            'MaxCount': 5,
+            'UserData': b64_user_data,
+        }
         self.assertEqual(params, result)
 
     def test_get_template_has_error_response(self):
@@ -546,13 +605,14 @@ class TestHandlers(BaseSessionTest):
         self.assertEqual(original, handler_input)
 
     def test_does_decode_template_body_in_order(self):
-        expected_ordering = OrderedDict([
-            ('TemplateVersion', 1.0),
-            ('APropertyOfSomeKind', 'a value'),
-            ('list', [1, 2, 3]),
-            ('nested', OrderedDict([('key', 'value'),
-                                    ('foo', 'bar')]))
-        ])
+        expected_ordering = OrderedDict(
+            [
+                ('TemplateVersion', 1.0),
+                ('APropertyOfSomeKind', 'a value'),
+                ('list', [1, 2, 3]),
+                ('nested', OrderedDict([('key', 'value'), ('foo', 'bar')])),
+            ]
+        )
         template_string = json.dumps(expected_ordering)
         parsed_response = {'TemplateBody': template_string}
 
@@ -578,21 +638,13 @@ class TestHandlers(BaseSessionTest):
                 'PolicyOutput': {
                     'type': 'structure',
                     'members': {
-                        'Document': {
-                            'shape': 'policyDocumentType'
-                        },
-                        'Other': {
-                            'shape': 'stringType'
-                        }
-                    }
-                },
-                'policyDocumentType': {
-                    'type': 'string'
-                },
-                'stringType': {
-                    'type': 'string'
+                        'Document': {'shape': 'policyDocumentType'},
+                        'Other': {'shape': 'stringType'},
+                    },
                 },
-            }
+                'policyDocumentType': {'type': 'string'},
+                'stringType': {'type': 'string'},
+            },
         }
         model = ServiceModel(service_def)
         op_model = model.operation_model('Foo')
@@ -614,25 +666,20 @@ class TestHandlers(BaseSessionTest):
         self.assertEqual(params['accountId'], 'foo')
 
     def test_glacier_version_header_added(self):
-        request_dict = {
-            'headers': {}
-        }
+        request_dict = {'headers': {}}
         model = ServiceModel({'metadata': {'apiVersion': '2012-01-01'}})
         handlers.add_glacier_version(model, request_dict)
-        self.assertEqual(request_dict['headers']['x-amz-glacier-version'],
-                         '2012-01-01')
+        self.assertEqual(
+            request_dict['headers']['x-amz-glacier-version'], '2012-01-01'
+        )
 
     def test_application_json_header_added(self):
-        request_dict = {
-            'headers': {}
-        }
+        request_dict = {'headers': {}}
         handlers.add_accept_header(None, request_dict)
         self.assertEqual(request_dict['headers']['Accept'], 'application/json')
 
     def test_accept_header_not_added_if_present(self):
-        request_dict = {
-            'headers': {'Accept': 'application/yaml'}
-        }
+        request_dict = {'headers': {'Accept': 'application/yaml'}}
         handlers.add_accept_header(None, request_dict)
         self.assertEqual(request_dict['headers']['Accept'], 'application/yaml')
 
@@ -646,10 +693,12 @@ class TestHandlers(BaseSessionTest):
         self.assertIn('x-amz-sha256-tree-hash', request_dict['headers'])
         self.assertEqual(
             request_dict['headers']['x-amz-content-sha256'],
-            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9')
+            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9',
+        )
         self.assertEqual(
             request_dict['headers']['x-amz-sha256-tree-hash'],
-            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9')
+            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9',
+        )
         # And verify that the body can still be read.
         self.assertEqual(request_dict['body'].read(), b'hello world')
 
@@ -661,8 +710,9 @@ class TestHandlers(BaseSessionTest):
             'body': io.BytesIO(b'hello world'),
         }
         handlers.add_glacier_checksums(request_dict)
-        self.assertEqual(request_dict['headers']['x-amz-sha256-tree-hash'],
-                         'pre-exists')
+        self.assertEqual(
+            request_dict['headers']['x-amz-sha256-tree-hash'], 'pre-exists'
+        )
 
     def test_checksum_added_only_if_not_exists(self):
         request_dict = {
@@ -672,8 +722,9 @@ class TestHandlers(BaseSessionTest):
             'body': io.BytesIO(b'hello world'),
         }
         handlers.add_glacier_checksums(request_dict)
-        self.assertEqual(request_dict['headers']['x-amz-content-sha256'],
-                         'pre-exists')
+        self.assertEqual(
+            request_dict['headers']['x-amz-content-sha256'], 'pre-exists'
+        )
 
     def test_glacier_checksums_support_raw_bytes(self):
         request_dict = {
@@ -683,16 +734,18 @@ class TestHandlers(BaseSessionTest):
         handlers.add_glacier_checksums(request_dict)
         self.assertEqual(
             request_dict['headers']['x-amz-content-sha256'],
-            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9')
+            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9',
+        )
         self.assertEqual(
             request_dict['headers']['x-amz-sha256-tree-hash'],
-            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9')
+            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9',
+        )
 
     def test_switch_host_with_param(self):
         request = AWSRequest()
         url = 'https://machinelearning.us-east-1.amazonaws.com'
         new_endpoint = 'https://my-custom-endpoint.amazonaws.com'
-        data = '{"PredictEndpoint":"%s"}' % new_endpoint
+        data = f'{{"PredictEndpoint":"{new_endpoint}"}}'
         request.data = data.encode('utf-8')
         request.url = url
         handlers.switch_host_with_param(request, 'PredictEndpoint')
@@ -726,15 +779,18 @@ class TestHandlers(BaseSessionTest):
 
     def test_valid_bucket_name_hyphen(self):
         self.assertIsNone(
-            handlers.validate_bucket_name({'Bucket': 'my-bucket-name'}))
+            handlers.validate_bucket_name({'Bucket': 'my-bucket-name'})
+        )
 
     def test_valid_bucket_name_underscore(self):
         self.assertIsNone(
-            handlers.validate_bucket_name({'Bucket': 'my_bucket_name'}))
+            handlers.validate_bucket_name({'Bucket': 'my_bucket_name'})
+        )
 
     def test_valid_bucket_name_period(self):
         self.assertIsNone(
-            handlers.validate_bucket_name({'Bucket': 'my.bucket.name'}))
+            handlers.validate_bucket_name({'Bucket': 'my.bucket.name'})
+        )
 
     def test_validation_is_noop_if_no_bucket_param_exists(self):
         self.assertIsNone(handlers.validate_bucket_name(params={}))
@@ -744,7 +800,7 @@ class TestHandlers(BaseSessionTest):
             arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint'
             handlers.validate_bucket_name({'Bucket': arn})
         except ParamValidationError:
-            self.fail('The s3 arn: %s should pass validation' % arn)
+            self.fail(f'The s3 arn: {arn} should pass validation')
 
     def test_validation_is_s3_outpost_arn(self):
         try:
@@ -754,7 +810,7 @@ class TestHandlers(BaseSessionTest):
             )
             handlers.validate_bucket_name({'Bucket': arn})
         except ParamValidationError:
-            self.fail('The s3 arn: %s should pass validation' % arn)
+            self.fail(f'The s3 arn: {arn} should pass validation')
 
     def test_validation_is_global_s3_bucket_arn(self):
         with self.assertRaises(ParamValidationError):
@@ -768,12 +824,11 @@ class TestHandlers(BaseSessionTest):
 
     def test_validate_non_ascii_metadata_values(self):
         with self.assertRaises(ParamValidationError):
-            handlers.validate_ascii_metadata({'Metadata': {'foo': u'\u2713'}})
+            handlers.validate_ascii_metadata({'Metadata': {'foo': '\u2713'}})
 
     def test_validate_non_ascii_metadata_keys(self):
         with self.assertRaises(ParamValidationError):
-            handlers.validate_ascii_metadata(
-                {'Metadata': {u'\u2713': 'bar'}})
+            handlers.validate_ascii_metadata({'Metadata': {'\u2713': 'bar'}})
 
     def test_validate_non_triggered_when_no_md_specified(self):
         original = {'NotMetadata': ''}
@@ -805,7 +860,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object(parsed, context=context)
-        self.assertEqual(parsed['Contents'][0]['Key'], u'\xe7\xf6s%asd\x08')
+        self.assertEqual(parsed['Contents'][0]['Key'], '\xe7\xf6s%asd\x08')
 
     def test_decode_list_objects_does_not_decode_without_context(self):
         parsed = {
@@ -813,7 +868,7 @@ class TestHandlers(BaseSessionTest):
             'EncodingType': 'url',
         }
         handlers.decode_list_object(parsed, context={})
-        self.assertEqual(parsed['Contents'][0]['Key'], u'%C3%A7%C3%B6s%25asd')
+        self.assertEqual(parsed['Contents'][0]['Key'], '%C3%A7%C3%B6s%25asd')
 
     def test_decode_list_objects_with_marker(self):
         parsed = {
@@ -822,7 +877,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object(parsed, context=context)
-        self.assertEqual(parsed['Marker'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['Marker'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_with_nextmarker(self):
         parsed = {
@@ -831,7 +886,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object(parsed, context=context)
-        self.assertEqual(parsed['NextMarker'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['NextMarker'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_with_common_prefixes(self):
         parsed = {
@@ -840,8 +895,9 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object(parsed, context=context)
-        self.assertEqual(parsed['CommonPrefixes'][0]['Prefix'],
-                         u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(
+            parsed['CommonPrefixes'][0]['Prefix'], '\xe7\xf6s% asd\x08 c'
+        )
 
     def test_decode_list_objects_with_delimiter(self):
         parsed = {
@@ -850,7 +906,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object(parsed, context=context)
-        self.assertEqual(parsed['Delimiter'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['Delimiter'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_v2(self):
         parsed = {
@@ -859,7 +915,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
-        self.assertEqual(parsed['Contents'][0]['Key'], u'\xe7\xf6s%asd\x08')
+        self.assertEqual(parsed['Contents'][0]['Key'], '\xe7\xf6s%asd\x08')
 
     def test_decode_list_objects_v2_does_not_decode_without_context(self):
         parsed = {
@@ -867,7 +923,7 @@ class TestHandlers(BaseSessionTest):
             'EncodingType': 'url',
         }
         handlers.decode_list_object_v2(parsed, context={})
-        self.assertEqual(parsed['Contents'][0]['Key'], u'%C3%A7%C3%B6s%25asd')
+        self.assertEqual(parsed['Contents'][0]['Key'], '%C3%A7%C3%B6s%25asd')
 
     def test_decode_list_objects_v2_with_delimiter(self):
         parsed = {
@@ -876,7 +932,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
-        self.assertEqual(parsed['Delimiter'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['Delimiter'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_v2_with_prefix(self):
         parsed = {
@@ -885,7 +941,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
-        self.assertEqual(parsed['Prefix'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['Prefix'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_v2_does_not_decode_continuationtoken(self):
         parsed = {
@@ -895,7 +951,8 @@ class TestHandlers(BaseSessionTest):
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
         self.assertEqual(
-            parsed['ContinuationToken'], u"%C3%A7%C3%B6s%25%20asd%08+c")
+            parsed['ContinuationToken'], "%C3%A7%C3%B6s%25%20asd%08+c"
+        )
 
     def test_decode_list_objects_v2_with_startafter(self):
         parsed = {
@@ -904,7 +961,7 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
-        self.assertEqual(parsed['StartAfter'], u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(parsed['StartAfter'], '\xe7\xf6s% asd\x08 c')
 
     def test_decode_list_objects_v2_with_common_prefixes(self):
         parsed = {
@@ -913,28 +970,32 @@ class TestHandlers(BaseSessionTest):
         }
         context = {'encoding_type_auto_set': True}
         handlers.decode_list_object_v2(parsed, context=context)
-        self.assertEqual(parsed['CommonPrefixes'][0]['Prefix'],
-                         u'\xe7\xf6s% asd\x08 c')
+        self.assertEqual(
+            parsed['CommonPrefixes'][0]['Prefix'], '\xe7\xf6s% asd\x08 c'
+        )
 
     def test_set_operation_specific_signer_no_auth_type(self):
         signing_name = 'myservice'
         context = {'auth_type': None}
         response = handlers.set_operation_specific_signer(
-            context=context, signing_name=signing_name)
+            context=context, signing_name=signing_name
+        )
         self.assertIsNone(response)
 
     def test_set_operation_specific_signer_unsigned(self):
         signing_name = 'myservice'
         context = {'auth_type': 'none'}
         response = handlers.set_operation_specific_signer(
-            context=context, signing_name=signing_name)
+            context=context, signing_name=signing_name
+        )
         self.assertEqual(response, botocore.UNSIGNED)
 
     def test_set_operation_specific_signer_v4(self):
         signing_name = 'myservice'
         context = {'auth_type': 'v4'}
         response = handlers.set_operation_specific_signer(
-            context=context, signing_name=signing_name)
+            context=context, signing_name=signing_name
+        )
         self.assertEqual(response, 'v4')
 
     def test_set_operation_specific_signer_v4a(self):
@@ -967,7 +1028,8 @@ class TestHandlers(BaseSessionTest):
         signing_name = 'myservice'
         context = {'auth_type': 'v4-unsigned-body'}
         response = handlers.set_operation_specific_signer(
-            context=context, signing_name=signing_name)
+            context=context, signing_name=signing_name
+        )
         self.assertEqual(response, 'v4')
         self.assertEqual(context.get('payload_signing_enabled'), False)
 
@@ -982,7 +1044,8 @@ class TestHandlers(BaseSessionTest):
             },
         }
         response = handlers.set_operation_specific_signer(
-            context=context, signing_name=signing_name)
+            context=context, signing_name=signing_name
+        )
         self.assertEqual(response, 's3v4')
         self.assertEqual(context.get('payload_signing_enabled'), False)
 
@@ -1081,11 +1144,12 @@ class TestConvertStringBodyToFileLikeObj
         self.assertEqual(params['Body'], body)
 
     def test_unicode(self):
-        self.assert_converts_to_file_like_object_with_bytes(u'bar', b'bar')
+        self.assert_converts_to_file_like_object_with_bytes('bar', b'bar')
 
     def test_non_ascii_characters(self):
         self.assert_converts_to_file_like_object_with_bytes(
-            u'\u2713', b'\xe2\x9c\x93')
+            '\u2713', b'\xe2\x9c\x93'
+        )
 
 
 class TestRetryHandlerOrder(BaseSessionTest):
@@ -1108,8 +1172,12 @@ class TestRetryHandlerOrder(BaseSessionT
         responses = client.meta.events.emit(
             'needs-retry.s3.CopyObject',
             request_dict={'context': {}},
-            response=(mock.Mock(), mock.Mock()), endpoint=mock.Mock(),
-            operation=operation, attempts=1, caught_exception=None)
+            response=(mock.Mock(), mock.Mock()),
+            endpoint=mock.Mock(),
+            operation=operation,
+            attempts=1,
+            caught_exception=None,
+        )
         # This is implementation specific, but we're trying to verify that
         # the _update_status_code is before any of the retry logic in
         # botocore.retries.*.
@@ -1120,14 +1188,16 @@ class TestRetryHandlerOrder(BaseSessionT
         self.assertIn('needs_retry', names)
         s3_200_handler = names.index('_update_status_code')
         general_retry_handler = names.index('needs_retry')
-        self.assertTrue(s3_200_handler < general_retry_handler,
-                        "S3 200 error handler was supposed to be before "
-                        "the general retry handler, but it was not.")
+        self.assertTrue(
+            s3_200_handler < general_retry_handler,
+            "S3 200 error handler was supposed to be before "
+            "the general retry handler, but it was not.",
+        )
 
 
 class BaseMD5Test(BaseSessionTest):
     def setUp(self, **environ):
-        super(BaseMD5Test, self).setUp(**environ)
+        super().setUp(**environ)
         self.md5_object = mock.Mock()
         self.md5_digest = mock.Mock(return_value=b'foo')
         self.md5_object.digest = self.md5_digest
@@ -1138,7 +1208,7 @@ class BaseMD5Test(BaseSessionTest):
         self.set_md5_available()
 
     def tearDown(self):
-        super(BaseMD5Test, self).tearDown()
+        super().tearDown()
         self.md5_patch.stop()
         if self._md5_available_patch:
             self._md5_available_patch.stop()
@@ -1147,8 +1217,9 @@ class BaseMD5Test(BaseSessionTest):
         if self._md5_available_patch:
             self._md5_available_patch.stop()
 
-        self._md5_available_patch = \
-            mock.patch('botocore.compat.MD5_AVAILABLE', is_available)
+        self._md5_available_patch = mock.patch(
+            'botocore.compat.MD5_AVAILABLE', is_available
+        )
         self._md5_available_patch.start()
 
 
@@ -1163,11 +1234,20 @@ class TestSSEMD5(BaseMD5Test):
             handlers.copy_source_sse_md5({'CopySourceSSECustomerKey': b'foo'})
 
     def test_sse_params(self):
-        for op in ('HeadObject', 'GetObject', 'PutObject', 'CopyObject',
-                   'CreateMultipartUpload', 'UploadPart', 'UploadPartCopy'):
-            event = 'before-parameter-build.s3.%s' % op
-            params = {'SSECustomerKey': b'bar',
-                      'SSECustomerAlgorithm': 'AES256'}
+        for op in (
+            'HeadObject',
+            'GetObject',
+            'PutObject',
+            'CopyObject',
+            'CreateMultipartUpload',
+            'UploadPart',
+            'UploadPartCopy',
+        ):
+            event = f'before-parameter-build.s3.{op}'
+            params = {
+                'SSECustomerKey': b'bar',
+                'SSECustomerAlgorithm': 'AES256',
+            }
             self.session.emit(
                 event, params=params, model=mock.MagicMock(), context={}
             )
@@ -1176,8 +1256,7 @@ class TestSSEMD5(BaseMD5Test):
 
     def test_sse_params_as_str(self):
         event = 'before-parameter-build.s3.PutObject'
-        params = {'SSECustomerKey': 'bar',
-                  'SSECustomerAlgorithm': 'AES256'}
+        params = {'SSECustomerKey': 'bar', 'SSECustomerAlgorithm': 'AES256'}
         self.session.emit(
             event, params=params, model=mock.MagicMock(), context={}
         )
@@ -1186,9 +1265,11 @@ class TestSSEMD5(BaseMD5Test):
 
     def test_copy_source_sse_params(self):
         for op in ['CopyObject', 'UploadPartCopy']:
-            event = 'before-parameter-build.s3.%s' % op
-            params = {'CopySourceSSECustomerKey': b'bar',
-                      'CopySourceSSECustomerAlgorithm': 'AES256'}
+            event = f'before-parameter-build.s3.{op}'
+            params = {
+                'CopySourceSSECustomerKey': b'bar',
+                'CopySourceSSECustomerAlgorithm': 'AES256',
+            }
             self.session.emit(
                 event, params=params, model=mock.MagicMock(), context={}
             )
@@ -1197,8 +1278,10 @@ class TestSSEMD5(BaseMD5Test):
 
     def test_copy_source_sse_params_as_str(self):
         event = 'before-parameter-build.s3.CopyObject'
-        params = {'CopySourceSSECustomerKey': 'bar',
-                  'CopySourceSSECustomerAlgorithm': 'AES256'}
+        params = {
+            'CopySourceSSECustomerKey': 'bar',
+            'CopySourceSSECustomerAlgorithm': 'AES256',
+        }
         self.session.emit(
             event, params=params, model=mock.MagicMock(), context={}
         )
@@ -1210,122 +1293,133 @@ class TestAddMD5(BaseMD5Test):
     def get_context(self, s3_config=None):
         if s3_config is None:
             s3_config = {}
-        return {
-            'client_config': Config(s3=s3_config)
-        }
+        return {'client_config': Config(s3=s3_config)}
 
     def test_adds_md5_when_v4(self):
         credentials = Credentials('key', 'secret')
         request_signer = RequestSigner(
-            ServiceId('s3'), 'us-east-1', 's3', 'v4', credentials, mock.Mock())
-        request_dict = {'body': b'bar',
-                        'url': 'https://s3.us-east-1.amazonaws.com',
-                        'method': 'PUT',
-                        'headers': {}}
+            ServiceId('s3'), 'us-east-1', 's3', 'v4', credentials, mock.Mock()
+        )
+        request_dict = {
+            'body': b'bar',
+            'url': 'https://s3.us-east-1.amazonaws.com',
+            'method': 'PUT',
+            'headers': {},
+        }
         context = self.get_context()
         conditionally_calculate_md5(
-            request_dict, request_signer=request_signer, context=context)
+            request_dict, request_signer=request_signer, context=context
+        )
         self.assertTrue('Content-MD5' in request_dict['headers'])
 
     def test_adds_md5_when_s3v4(self):
         credentials = Credentials('key', 'secret')
         request_signer = RequestSigner(
-            ServiceId('s3'), 'us-east-1', 's3', 's3v4', credentials,
-            mock.Mock())
-        request_dict = {'body': b'bar',
-                        'url': 'https://s3.us-east-1.amazonaws.com',
-                        'method': 'PUT',
-                        'headers': {}}
+            ServiceId('s3'),
+            'us-east-1',
+            's3',
+            's3v4',
+            credentials,
+            mock.Mock(),
+        )
+        request_dict = {
+            'body': b'bar',
+            'url': 'https://s3.us-east-1.amazonaws.com',
+            'method': 'PUT',
+            'headers': {},
+        }
         context = self.get_context({'payload_signing_enabled': False})
         conditionally_calculate_md5(
-            request_dict, request_signer=request_signer, context=context)
+            request_dict, request_signer=request_signer, context=context
+        )
         self.assertTrue('Content-MD5' in request_dict['headers'])
 
     def test_conditional_does_not_add_when_md5_unavailable(self):
         credentials = Credentials('key', 'secret')
         request_signer = RequestSigner(
-            's3', 'us-east-1', 's3', 's3', credentials, mock.Mock())
-        request_dict = {'body': b'bar',
-                        'url': 'https://s3.us-east-1.amazonaws.com',
-                        'method': 'PUT',
-                        'headers': {}}
+            's3', 'us-east-1', 's3', 's3', credentials, mock.Mock()
+        )
+        request_dict = {
+            'body': b'bar',
+            'url': 'https://s3.us-east-1.amazonaws.com',
+            'method': 'PUT',
+            'headers': {},
+        }
 
         context = self.get_context()
         self.set_md5_available(False)
         with mock.patch('botocore.utils.MD5_AVAILABLE', False):
             conditionally_calculate_md5(
-                request_dict, request_signer=request_signer, context=context)
+                request_dict, request_signer=request_signer, context=context
+            )
             self.assertFalse('Content-MD5' in request_dict['headers'])
 
     def test_add_md5_raises_error_when_md5_unavailable(self):
         credentials = Credentials('key', 'secret')
         request_signer = RequestSigner(
-            ServiceId('s3'), 'us-east-1', 's3', 's3', credentials, mock.Mock())
-        request_dict = {'body': b'bar',
-                        'url': 'https://s3.us-east-1.amazonaws.com',
-                        'method': 'PUT',
-                        'headers': {}}
+            ServiceId('s3'), 'us-east-1', 's3', 's3', credentials, mock.Mock()
+        )
+        request_dict = {
+            'body': b'bar',
+            'url': 'https://s3.us-east-1.amazonaws.com',
+            'method': 'PUT',
+            'headers': {},
+        }
 
         self.set_md5_available(False)
         with self.assertRaises(MD5UnavailableError):
             conditionally_calculate_md5(
-                request_dict, request_signer=request_signer)
+                request_dict, request_signer=request_signer
+            )
 
     def test_adds_md5_when_s3v2(self):
         credentials = Credentials('key', 'secret')
         request_signer = RequestSigner(
-            ServiceId('s3'), 'us-east-1', 's3', 's3', credentials, mock.Mock())
-        request_dict = {'body': b'bar',
-                        'url': 'https://s3.us-east-1.amazonaws.com',
-                        'method': 'PUT',
-                        'headers': {}}
+            ServiceId('s3'), 'us-east-1', 's3', 's3', credentials, mock.Mock()
+        )
+        request_dict = {
+            'body': b'bar',
+            'url': 'https://s3.us-east-1.amazonaws.com',
+            'method': 'PUT',
+            'headers': {},
+        }
         context = self.get_context()
         conditionally_calculate_md5(
-            request_dict, request_signer=request_signer, context=context)
+            request_dict, request_signer=request_signer, context=context
+        )
         self.assertTrue('Content-MD5' in request_dict['headers'])
 
     def test_add_md5_with_file_like_body(self):
-        request_dict = {
-            'body': io.BytesIO(b'foobar'),
-            'headers': {}
-        }
+        request_dict = {'body': io.BytesIO(b'foobar'), 'headers': {}}
         self.md5_digest.return_value = b'8X\xf6"0\xac<\x91_0\x0cfC\x12\xc6?'
         conditionally_calculate_md5(request_dict)
-        self.assertEqual(request_dict['headers']['Content-MD5'],
-                         'OFj2IjCsPJFfMAxmQxLGPw==')
+        self.assertEqual(
+            request_dict['headers']['Content-MD5'], 'OFj2IjCsPJFfMAxmQxLGPw=='
+        )
 
     def test_add_md5_with_bytes_object(self):
-        request_dict = {
-            'body': b'foobar',
-            'headers': {}
-        }
+        request_dict = {'body': b'foobar', 'headers': {}}
         self.md5_digest.return_value = b'8X\xf6"0\xac<\x91_0\x0cfC\x12\xc6?'
         conditionally_calculate_md5(request_dict)
         self.assertEqual(
-            request_dict['headers']['Content-MD5'],
-            'OFj2IjCsPJFfMAxmQxLGPw==')
+            request_dict['headers']['Content-MD5'], 'OFj2IjCsPJFfMAxmQxLGPw=='
+        )
 
     def test_add_md5_with_empty_body(self):
-        request_dict = {
-            'body': b'',
-            'headers': {}
-        }
+        request_dict = {'body': b'', 'headers': {}}
         self.md5_digest.return_value = b'8X\xf6"0\xac<\x91_0\x0cfC\x12\xc6?'
         conditionally_calculate_md5(request_dict)
         self.assertEqual(
-            request_dict['headers']['Content-MD5'],
-            'OFj2IjCsPJFfMAxmQxLGPw==')
+            request_dict['headers']['Content-MD5'], 'OFj2IjCsPJFfMAxmQxLGPw=='
+        )
 
     def test_add_md5_with_bytearray_object(self):
-        request_dict = {
-            'body': bytearray(b'foobar'),
-            'headers': {}
-        }
+        request_dict = {'body': bytearray(b'foobar'), 'headers': {}}
         self.md5_digest.return_value = b'8X\xf6"0\xac<\x91_0\x0cfC\x12\xc6?'
         conditionally_calculate_md5(request_dict)
         self.assertEqual(
-            request_dict['headers']['Content-MD5'],
-            'OFj2IjCsPJFfMAxmQxLGPw==')
+            request_dict['headers']['Content-MD5'], 'OFj2IjCsPJFfMAxmQxLGPw=='
+        )
 
     def test_skip_md5_when_flexible_checksum_context(self):
         request_dict = {
@@ -1339,7 +1433,7 @@ class TestAddMD5(BaseMD5Test):
                         'name': 'x-amz-checksum-crc32',
                     }
                 }
-            }
+            },
         }
         conditionally_calculate_md5(request_dict)
         self.assertNotIn('Content-MD5', request_dict['headers'])
@@ -1358,11 +1452,15 @@ class TestParameterAlias(unittest.TestCa
         self.original_name = 'original'
         self.alias_name = 'alias'
         self.parameter_alias = handlers.ParameterAlias(
-            self.original_name, self.alias_name)
+            self.original_name, self.alias_name
+        )
 
         self.operation_model = mock.Mock()
-        request_shape = DenormalizedStructureBuilder().with_members(
-            {self.original_name: {'type': 'string'}}).build_model()
+        request_shape = (
+            DenormalizedStructureBuilder()
+            .with_members({self.original_name: {'type': 'string'}})
+            .build_model()
+        )
         self.operation_model.input_shape = request_shape
         self.sample_section = DocumentStructure('')
         self.event_emitter = HierarchicalEmitter()
@@ -1371,23 +1469,26 @@ class TestParameterAlias(unittest.TestCa
         value = 'value'
         params = {self.alias_name: value}
         self.parameter_alias.alias_parameter_in_call(
-            params, self.operation_model)
+            params, self.operation_model
+        )
         self.assertEqual(params, {self.original_name: value})
 
     def test_alias_parameter_and_original_in_call(self):
         params = {
             self.original_name: 'orginal_value',
-            self.alias_name: 'alias_value'
+            self.alias_name: 'alias_value',
         }
         with self.assertRaises(AliasConflictParameterError):
             self.parameter_alias.alias_parameter_in_call(
-                params, self.operation_model)
+                params, self.operation_model
+            )
 
     def test_alias_parameter_in_call_does_not_touch_original(self):
         value = 'value'
         params = {self.original_name: value}
         self.parameter_alias.alias_parameter_in_call(
-            params, self.operation_model)
+            params, self.operation_model
+        )
         self.assertEqual(params, {self.original_name: value})
 
     def test_does_not_alias_parameter_for_no_input_shape(self):
@@ -1395,44 +1496,53 @@ class TestParameterAlias(unittest.TestCa
         params = {self.alias_name: value}
         self.operation_model.input_shape = None
         self.parameter_alias.alias_parameter_in_call(
-            params, self.operation_model)
+            params, self.operation_model
+        )
         self.assertEqual(params, {self.alias_name: value})
 
     def test_does_not_alias_parameter_for_not_modeled_member(self):
         value = 'value'
         params = {self.alias_name: value}
 
-        request_shape = DenormalizedStructureBuilder().with_members(
-            {'foo': {'type': 'string'}}).build_model()
+        request_shape = (
+            DenormalizedStructureBuilder()
+            .with_members({'foo': {'type': 'string'}})
+            .build_model()
+        )
         self.operation_model.input_shape = request_shape
         self.parameter_alias.alias_parameter_in_call(
-            params, self.operation_model)
+            params, self.operation_model
+        )
         self.assertEqual(params, {self.alias_name: value})
 
     def test_alias_parameter_in_documentation_request_params(self):
         RequestParamsDocumenter(
-            'myservice', 'myoperation', self.event_emitter).document_params(
-                self.sample_section, self.operation_model.input_shape)
+            'myservice', 'myoperation', self.event_emitter
+        ).document_params(
+            self.sample_section, self.operation_model.input_shape
+        )
         self.parameter_alias.alias_parameter_in_documentation(
             'docs.request-params.myservice.myoperation.complete-section',
-            self.sample_section
+            self.sample_section,
         )
         contents = self.sample_section.flush_structure().decode('utf-8')
-        self.assertIn(':type ' + self.alias_name + ':',  contents)
-        self.assertIn(':param ' + self.alias_name + ':',  contents)
-        self.assertNotIn(':type ' + self.original_name + ':',  contents)
-        self.assertNotIn(':param ' + self.original_name + ':',  contents)
+        self.assertIn(':type ' + self.alias_name + ':', contents)
+        self.assertIn(':param ' + self.alias_name + ':', contents)
+        self.assertNotIn(':type ' + self.original_name + ':', contents)
+        self.assertNotIn(':param ' + self.original_name + ':', contents)
 
     def test_alias_parameter_in_documentation_request_example(self):
         RequestExampleDocumenter(
-            'myservice', 'myoperation', self.event_emitter).document_example(
-                self.sample_section, self.operation_model.input_shape)
+            'myservice', 'myoperation', self.event_emitter
+        ).document_example(
+            self.sample_section, self.operation_model.input_shape
+        )
         self.parameter_alias.alias_parameter_in_documentation(
             'docs.request-example.myservice.myoperation.complete-section',
-            self.sample_section
+            self.sample_section,
         )
         contents = self.sample_section.flush_structure().decode('utf-8')
-        self.assertIn(self.alias_name + '=',  contents)
+        self.assertIn(self.alias_name + '=', contents)
         self.assertNotIn(self.original_name + '=', contents)
 
 
@@ -1470,23 +1580,23 @@ class TestPrependToHost(unittest.TestCas
 
     def test_does_prepend_to_host_with_path(self):
         prepended = self._prepend_to_host(
-            'https://bar.example.com/path', 'foo')
+            'https://bar.example.com/path', 'foo'
+        )
         self.assertEqual(prepended, 'https://foo.bar.example.com/path')
 
     def test_does_prepend_to_host_with_more_components(self):
         prepended = self._prepend_to_host(
-            'https://bar.baz.example.com/path', 'foo')
+            'https://bar.baz.example.com/path', 'foo'
+        )
         self.assertEqual(prepended, 'https://foo.bar.baz.example.com/path')
 
     def test_does_validate_long_host(self):
         with self.assertRaises(ParamValidationError):
-           self._prepend_to_host(
-               'https://example.com/path', 'toolong'*100)
+            self._prepend_to_host('https://example.com/path', 'toolong' * 100)
 
     def test_does_validate_host_with_illegal_char(self):
         with self.assertRaises(ParamValidationError):
-           self._prepend_to_host(
-               'https://example.com/path', 'host#name')
+            self._prepend_to_host('https://example.com/path', 'host#name')
 
 
 @pytest.mark.parametrize(
@@ -1701,23 +1811,6 @@ def test_document_response_params_withou
     mocks['doc_section'].write.assert_not_called()
 
 
-def test_add_query_compatibility_header():
-    service_model = ServiceModel({'metadata': {'awsQueryCompatible': {}}})
-    operation_model = OperationModel(mock.Mock(), service_model)
-    request_dict = {'headers': {}}
-    handlers.add_query_compatibility_header(operation_model, request_dict)
-    assert 'x-amzn-query-mode' in request_dict['headers']
-    assert request_dict['headers']['x-amzn-query-mode'] == 'true'
-
-
-def test_does_not_add_query_compatibility_header():
-    service_model = ServiceModel({'metadata': {}})
-    operation_model = OperationModel(mock.Mock(), service_model)
-    request_dict = {'headers': {}}
-    handlers.add_query_compatibility_header(operation_model, request_dict)
-    assert 'x-amzn-query-mode' not in request_dict['headers']
-
-
 @pytest.fixture()
 def checksum_operation_model():
     operation_model = mock.Mock(spec=OperationModel)
@@ -1768,4 +1861,159 @@ def test_request_validation_mode_member_
     handlers._handle_request_validation_mode_member(
         params, checksum_operation_model, context=create_checksum_context()
     )
-    assert params["ChecksumMode"] == "FAKE_VALUE"
\ No newline at end of file
+    assert params["ChecksumMode"] == "FAKE_VALUE"
+
+
+@pytest.mark.parametrize(
+    "signing_name, config_kwargs, auth_options, expected_signature_version",
+    [
+        # Case 1: Signature version explicitly set, no update to the signer.
+        (
+            "my-service",
+            {"signature_version": ClientConfigString("v4")},
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            None,
+        ),
+        # Case 2: Auth scheme preference explicitly set and resolved.
+        (
+            "my-service",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": ClientConfigString("httpBearerAuth"),
+            },
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            "bearer",
+        ),
+        # Case 3: Auth scheme preference not explicitly set and resolved to first supported scheme.
+        (
+            "my-service",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": "sigv4a,httpBearerAuth",
+            },
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            "bearer",
+        ),
+        # Case 4: Auth scheme preference not supported by service
+        (
+            "my-service",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": "scheme1,scheme2",
+            },
+            ["aws.auth#sigv4"],
+            None,
+        ),
+        # Case 5: Service does not have auth trait
+        (
+            "my-service",
+            {"signature_version": "v4"},
+            None,
+            None,
+        ),
+    ],
+)
+def test_set_auth_scheme_preference_signer(
+    monkeypatch,
+    signing_name,
+    config_kwargs,
+    auth_options,
+    expected_signature_version,
+):
+    config = Config(**config_kwargs)
+    context = {"client_config": config, "auth_options": auth_options}
+    signature_version = handlers._set_auth_scheme_preference_signer(
+        context, signing_name
+    )
+    assert (
+        signature_version == expected_signature_version
+    ), f"Expected '{expected_signature_version}' but got '{signature_version}'"
+
+
+@pytest.mark.parametrize(
+    "signing_name, config_kwargs, auth_options, env_token, expected_signature_version",
+    [
+        # Case 1: Bearer token present, no auth scheme preference, resolves to bearer.
+        (
+            "bedrock",
+            {"signature_version": "v4"},
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            "test_token",
+            "bearer",
+        ),
+        # Case 2: Bearer token not present, fallback to default signature version.
+        (
+            "bedrock",
+            {"signature_version": "v4"},
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            None,
+            None,
+        ),
+        # Case 3: Bearer token present, auth preference not set explicitly so token takes precedence.
+        (
+            "bedrock",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": "sigv4",
+            },
+            ["aws.auth#sigv4", "smithy.api#httpBearerAuth"],
+            "test_token",
+            "bearer",
+        ),
+        # Case 4: Bearer token present, but auth scheme preference explicitly set to non-bearer.
+        (
+            "bedrock",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": ClientConfigString(
+                    "noAuth,httpBearerAuth"
+                ),
+            },
+            ["smithy.api#httpBearerAuth", "smithy.api#noAuth"],
+            "test_token",
+            botocore.UNSIGNED,
+        ),
+        # Case 5: Bearer token present but service does not support bearer auth.
+        (
+            "foo-service",
+            {"signature_version": "v4"},
+            ["aws.auth#sigv4"],
+            "test_token",
+            None,
+        ),
+        # Case 6: Service has 'bedrock' signing name but does not support bearer auth.
+        (
+            "bedrock",
+            {
+                "signature_version": "v4",
+                "auth_scheme_preference": ClientConfigString("httpBearerAuth"),
+            },
+            ["aws.auth#sigv4"],
+            "test_token",
+            None,
+        ),
+    ],
+)
+def test_set_auth_scheme_preference_signer_with_bearer_token(
+    monkeypatch,
+    signing_name,
+    config_kwargs,
+    auth_options,
+    env_token,
+    expected_signature_version,
+):
+    env_var = "AWS_BEARER_TOKEN_BEDROCK"
+    if env_token is not None:
+        monkeypatch.setenv(env_var, env_token)
+    else:
+        monkeypatch.delenv(env_var, raising=False)
+
+    config = Config(**config_kwargs)
+    context = {"client_config": config, "auth_options": auth_options}
+
+    signature_version = handlers._set_auth_scheme_preference_signer(
+        context, signing_name
+    )
+    assert (
+        signature_version == expected_signature_version
+    ), f"Expected '{expected_signature_version}' but got '{signature_version}'"
diff -pruN 2.23.6-1/tests/unit/botocore/test_history.py 2.31.35-1/tests/unit/botocore/test_history.py
--- 2.23.6-1/tests/unit/botocore/test_history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_history.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,9 +1,10 @@
-from tests import mock, unittest
-
+from botocore.history import (
+    BaseHistoryHandler,
+    HistoryRecorder,
+    get_global_history_recorder,
+)
 
-from botocore.history import HistoryRecorder
-from botocore.history import BaseHistoryHandler
-from botocore.history import get_global_history_recorder
+from tests import mock, unittest
 
 
 class TerribleError(Exception):
diff -pruN 2.23.6-1/tests/unit/botocore/test_hooks.py 2.31.35-1/tests/unit/botocore/test_hooks.py
--- 2.23.6-1/tests/unit/botocore/test_hooks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_hooks.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,12 +12,12 @@
 # language governing permissions and limitations under the License.
 import copy
 import functools
-
-from tests import unittest
 from functools import partial
 
 from botocore.hooks import HierarchicalEmitter, first_non_none_response
 
+from tests import unittest
+
 
 class TestHierarchicalEventEmitter(unittest.TestCase):
     def setUp(self):
@@ -44,18 +44,22 @@ class TestHierarchicalEventEmitter(unitt
         self.emitter.emit('foo.bar.baz')
         self.assertEqual(len(self.hook_calls), 3, self.hook_calls)
         # The hook is called with the same event name three times.
-        self.assertEqual([e['event_name'] for e in self.hook_calls],
-                         ['foo.bar.baz', 'foo.bar.baz', 'foo.bar.baz'])
+        self.assertEqual(
+            [e['event_name'] for e in self.hook_calls],
+            ['foo.bar.baz', 'foo.bar.baz', 'foo.bar.baz'],
+        )
 
     def test_hook_called_in_proper_order(self):
         # We should call the hooks from most specific to least
         # specific.
         calls = []
         self.emitter.register('foo', lambda **kwargs: calls.append('foo'))
-        self.emitter.register('foo.bar',
-                              lambda **kwargs: calls.append('foo.bar'))
-        self.emitter.register('foo.bar.baz',
-                              lambda **kwargs: calls.append('foo.bar.baz'))
+        self.emitter.register(
+            'foo.bar', lambda **kwargs: calls.append('foo.bar')
+        )
+        self.emitter.register(
+            'foo.bar.baz', lambda **kwargs: calls.append('foo.bar.baz')
+        )
 
         self.emitter.emit('foo.bar.baz')
         self.assertEqual(calls, ['foo.bar.baz', 'foo.bar', 'foo'])
@@ -136,7 +140,8 @@ class TestFirstNonNoneResponse(unittest.
         # If no response is found and a default value is passed in, it will
         # be returned.
         self.assertEqual(
-            first_non_none_response(responses, default='notfound'), 'notfound')
+            first_non_none_response(responses, default='notfound'), 'notfound'
+        )
 
 
 class TestWildcardHandlers(unittest.TestCase):
@@ -157,7 +162,7 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.emit(event)
         after = len(self.hook_calls)
         if not after > starting:
-            self.fail("Handler was not called for event: %s" % event)
+            self.fail(f"Handler was not called for event: {event}")
         self.assertEqual(self.hook_calls[-1]['event_name'], event)
 
     def assert_hook_is_not_called_given_event(self, event):
@@ -165,9 +170,10 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.emit(event)
         after = len(self.hook_calls)
         if not after == starting:
-            self.fail("Handler was called for event but was not "
-                      "suppose to be called: %s, last_event: %s" %
-                      (event, self.hook_calls[-1]))
+            self.fail(
+                "Handler was called for event but was not "
+                f"suppose to be called: {event}, last_event: {self.hook_calls[-1]}"
+            )
 
     def test_one_level_wildcard_handler(self):
         self.emitter.register('foo.*.baz', self.hook)
@@ -292,7 +298,9 @@ class TestWildcardHandlers(unittest.Test
         self.assertEqual(len(self.hook_calls), 0)
 
     def test_remove_handler_with_unique_id(self):
-        hook2 = lambda **kwargs: self.hook_calls.append(kwargs)
+        def hook2(**kwargs):
+            return self.hook_calls.append(kwargs)
+
         self.emitter.register('foo.bar.baz', self.hook, unique_id='foo')
         self.emitter.register('foo.bar.baz', hook2)
         self.emitter.emit('foo.bar.baz')
@@ -331,8 +339,9 @@ class TestWildcardHandlers(unittest.Test
         self.assertEqual(len(self.hook_calls), 0)
 
     def test_register_with_uses_count_initially(self):
-        self.emitter.register('foo', self.hook, unique_id='foo',
-                              unique_id_uses_count=True)
+        self.emitter.register(
+            'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+        )
         # Subsequent calls must set ``unique_id_uses_count`` to True.
         with self.assertRaises(ValueError):
             self.emitter.register('foo', self.hook, unique_id='foo')
@@ -341,14 +350,17 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', self.hook, unique_id='foo')
         # Subsequent calls must set ``unique_id_uses_count`` to False.
         with self.assertRaises(ValueError):
-            self.emitter.register('foo', self.hook, unique_id='foo',
-                                  unique_id_uses_count=True)
+            self.emitter.register(
+                'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+            )
 
     def test_register_with_uses_count_unregister(self):
-        self.emitter.register('foo', self.hook, unique_id='foo',
-                              unique_id_uses_count=True)
-        self.emitter.register('foo', self.hook, unique_id='foo',
-                              unique_id_uses_count=True)
+        self.emitter.register(
+            'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+        )
+        self.emitter.register(
+            'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+        )
         # Event was registered to use a count so it must be specified
         # that a count is used when unregistering
         with self.assertRaises(ValueError):
@@ -356,14 +368,16 @@ class TestWildcardHandlers(unittest.Test
         # Event should not have been unregistered.
         self.emitter.emit('foo')
         self.assertEqual(len(self.hook_calls), 1)
-        self.emitter.unregister('foo', self.hook, unique_id='foo',
-                                unique_id_uses_count=True)
+        self.emitter.unregister(
+            'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+        )
         # Event still should not be unregistered.
         self.hook_calls = []
         self.emitter.emit('foo')
         self.assertEqual(len(self.hook_calls), 1)
-        self.emitter.unregister('foo', self.hook, unique_id='foo',
-                                unique_id_uses_count=True)
+        self.emitter.unregister(
+            'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+        )
         # Now the event should be unregistered.
         self.hook_calls = []
         self.emitter.emit('foo')
@@ -373,8 +387,9 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', self.hook, unique_id='foo')
         # The event was not registered to use a count initially
         with self.assertRaises(ValueError):
-            self.emitter.unregister('foo', self.hook, unique_id='foo',
-                                    unique_id_uses_count=True)
+            self.emitter.unregister(
+                'foo', self.hook, unique_id='foo', unique_id_uses_count=True
+            )
 
     def test_handlers_called_in_order(self):
         def handler(call_number, **kwargs):
@@ -384,8 +399,7 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', partial(handler, call_number=1))
         self.emitter.register('foo', partial(handler, call_number=2))
         self.emitter.emit('foo')
-        self.assertEqual([k['call_number'] for k in self.hook_calls],
-                         [1, 2])
+        self.assertEqual([k['call_number'] for k in self.hook_calls], [1, 2])
 
     def test_handler_call_order_with_hierarchy(self):
         def handler(call_number, **kwargs):
@@ -403,8 +417,9 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', partial(handler, call_number=6))
 
         self.emitter.emit('foo.bar.baz')
-        self.assertEqual([k['call_number'] for k in self.hook_calls],
-                         [1, 2, 3, 4, 5, 6])
+        self.assertEqual(
+            [k['call_number'] for k in self.hook_calls], [1, 2, 3, 4, 5, 6]
+        )
 
     def test_register_first_single_level(self):
         def handler(call_number, **kwargs):
@@ -420,8 +435,9 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', partial(handler, call_number=5))
 
         self.emitter.emit('foo')
-        self.assertEqual([k['call_number'] for k in self.hook_calls],
-                         [1, 2, 3, 4, 5])
+        self.assertEqual(
+            [k['call_number'] for k in self.hook_calls], [1, 2, 3, 4, 5]
+        )
 
     def test_register_first_hierarchy(self):
         def handler(call_number, **kwargs):
@@ -438,8 +454,9 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo.bar', partial(handler, call_number=3))
 
         self.emitter.emit('foo.bar')
-        self.assertEqual([k['call_number'] for k in self.hook_calls],
-                         [1, 2, 3, 4, 5, 6])
+        self.assertEqual(
+            [k['call_number'] for k in self.hook_calls], [1, 2, 3, 4, 5, 6]
+        )
 
     def test_register_last_hierarchy(self):
         def handler(call_number, **kwargs):
@@ -450,8 +467,9 @@ class TestWildcardHandlers(unittest.Test
         self.emitter.register('foo', partial(handler, call_number=2))
         self.emitter.register_first('foo', partial(handler, call_number=1))
         self.emitter.emit('foo')
-        self.assertEqual([k['call_number'] for k in self.hook_calls],
-                         [1, 2, 3])
+        self.assertEqual(
+            [k['call_number'] for k in self.hook_calls], [1, 2, 3]
+        )
 
     def test_register_unregister_first_last(self):
         self.emitter.register('foo', self.hook)
@@ -469,10 +487,12 @@ class TestWildcardHandlers(unittest.Test
         # Here we're not testing copy directly, we're testing
         # the observable behavior from copying an event emitter.
         first = []
+
         def first_handler(id_name, **kwargs):
             first.append(id_name)
 
         second = []
+
         def second_handler(id_name, **kwargs):
             second.append(id_name)
 
@@ -511,10 +531,12 @@ class TestWildcardHandlers(unittest.Test
         # Here we're not testing copy directly, we're testing
         # the observable behavior from copying an event emitter.
         first = []
+
         def first_handler(id_name, **kwargs):
             first.append(id_name)
 
         second = []
+
         def second_handler(id_name, **kwargs):
             second.append(id_name)
 
@@ -557,8 +579,9 @@ class TestWildcardHandlers(unittest.Test
         f = functools.partial(handler, 1)
         self.emitter.register('a.b', f)
         copied = copy.copy(self.emitter)
-        self.assertEqual(copied.emit_until_response(
-            'a.b', b='return-val')[1], 'return-val')
+        self.assertEqual(
+            copied.emit_until_response('a.b', b='return-val')[1], 'return-val'
+        )
 
 
 if __name__ == '__main__':
diff -pruN 2.23.6-1/tests/unit/botocore/test_http_client_exception_mapping.py 2.31.35-1/tests/unit/botocore/test_http_client_exception_mapping.py
--- 2.23.6-1/tests/unit/botocore/test_http_client_exception_mapping.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_http_client_exception_mapping.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,13 +1,17 @@
 import pytest
-
 from botocore import exceptions as botocore_exceptions
-from botocore.vendored.requests.packages.urllib3 import exceptions as urllib3_exceptions
+from botocore.vendored.requests.packages.urllib3 import (
+    exceptions as urllib3_exceptions,
+)
 
 
 @pytest.mark.parametrize(
     "new_exception, old_exception",
     (
-        (botocore_exceptions.ReadTimeoutError, urllib3_exceptions.ReadTimeoutError),
+        (
+            botocore_exceptions.ReadTimeoutError,
+            urllib3_exceptions.ReadTimeoutError,
+        ),
     ),
 )
 def test_http_client_exception_mapping(new_exception, old_exception):
diff -pruN 2.23.6-1/tests/unit/botocore/test_http_session.py 2.31.35-1/tests/unit/botocore/test_http_session.py
--- 2.23.6-1/tests/unit/botocore/test_http_session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_http_session.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,6 @@
 import socket
 
 import pytest
-from urllib3.exceptions import NewConnectionError, ProtocolError, ProxyError
-
 from botocore.awsrequest import (
     AWSHTTPConnectionPool,
     AWSHTTPSConnectionPool,
@@ -19,6 +17,9 @@ from botocore.httpsession import (
     get_cert_path,
     mask_proxy_url,
 )
+from urllib3.exceptions import NewConnectionError, ProtocolError, ProxyError
+from concurrent.futures import CancelledError
+
 from tests import mock, unittest
 
 
@@ -463,6 +464,12 @@ class TestURLLib3Session(unittest.TestCa
         with pytest.raises(ConnectionClosedError):
             self.make_request_with_error(error)
 
+    def test_catches_cancelled_error(self):
+        self.connection.urlopen.side_effect = CancelledError()
+        session = URLLib3Session()
+        with pytest.raises(CancelledError):
+            session.send(self.request.prepare())
+
     def test_catches_proxy_error(self):
         self.connection.urlopen.side_effect = ProxyError('test', None)
         session = URLLib3Session(
@@ -506,7 +513,7 @@ class TestURLLib3Session(unittest.TestCa
         proxies = {'https': 'http://proxy.com', 'http': 'http://proxy2.com'}
         session = URLLib3Session(proxies=proxies)
         for proxy, proxy_url in proxies.items():
-            self.request.url = '%s://example.com/' % proxy
+            self.request.url = f'{proxy}://example.com/'
             session.send(self.request.prepare())
 
         session.close()
diff -pruN 2.23.6-1/tests/unit/botocore/test_httpchecksum.py 2.31.35-1/tests/unit/botocore/test_httpchecksum.py
--- 2.23.6-1/tests/unit/botocore/test_httpchecksum.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_httpchecksum.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,29 +13,27 @@
 import unittest
 from io import BytesIO
 
-from tests import mock
-from tests.utils.botocore import get_checksum_cls
-
 from botocore.awsrequest import AWSResponse
-from botocore.model import OperationModel, StringShape, StructureShape
 from botocore.config import Config
-from botocore.exceptions import AwsChunkedWrapperError
-from botocore.exceptions import FlexibleChecksumError
-from botocore.httpchecksum import AwsChunkedWrapper
-from botocore.httpchecksum import StreamingChecksumBody
+from botocore.exceptions import AwsChunkedWrapperError, FlexibleChecksumError
 from botocore.httpchecksum import (
+    AwsChunkedWrapper,
     Crc32Checksum,
-    Sha256Checksum,
-    CrtCrc64NvmeChecksum,
-    Sha1Checksum,
     CrtCrc32cChecksum,
     CrtCrc32Checksum,
     CrtCrc64NvmeChecksum,
+    Sha1Checksum,
+    Sha256Checksum,
+    StreamingChecksumBody,
     apply_request_checksum,
     handle_checksum_body,
     resolve_request_checksum_algorithm,
     resolve_response_checksum_algorithms,
 )
+from botocore.model import OperationModel, StringShape, StructureShape
+
+from tests import mock
+from tests.utils.botocore import get_checksum_cls
 
 
 class TestHttpChecksumHandlers(unittest.TestCase):
@@ -63,7 +61,11 @@ class TestHttpChecksumHandlers(unittest.
         return operation
 
     def _make_http_response(
-        self, body, headers=None, context=None, streaming=False,
+        self,
+        body,
+        headers=None,
+        context=None,
+        streaming=False,
     ):
         if context is None:
             context = {}
@@ -205,7 +207,7 @@ class TestHttpChecksumHandlers(unittest.
         self.assertEqual(actual_algorithm, expected_algorithm)
 
     def test_request_checksum_algorithm_s3_signature_version_input_streaming(
-            self,
+        self,
     ):
         config = Config(signature_version="s3")
         request = self._build_request(b"")
@@ -466,11 +468,16 @@ class TestHttpChecksumHandlers(unittest.
         context = {"checksum": {"response_algorithms": ["sha1", "crc32"]}}
         headers = {"x-amz-checksum-crc32": "DUoRhQ=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context,
+            b"hello world",
+            headers=headers,
+            context=context,
         )
         operation_model = self._make_operation_model()
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body, b"hello world")
@@ -479,21 +486,31 @@ class TestHttpChecksumHandlers(unittest.
 
         headers = {"x-amz-checksum-crc32": "WrOonG=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context,
+            b"hello world",
+            headers=headers,
+            context=context,
         )
         with self.assertRaises(FlexibleChecksumError):
             handle_checksum_body(
-                http_response, response_dict, context, operation_model,
+                http_response,
+                response_dict,
+                context,
+                operation_model,
             )
 
         # This header should not be checked, we won't calculate a checksum
         # but a proper body should still come out at the end
         headers = {"x-amz-checksum-foo": "FOO=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context,
+            b"hello world",
+            headers=headers,
+            context=context,
         )
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body, b"hello world")
@@ -504,11 +521,17 @@ class TestHttpChecksumHandlers(unittest.
         context = {"checksum": {"response_algorithms": ["sha1", "crc32"]}}
         headers = {"x-amz-checksum-crc32": "DUoRhQ=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context, streaming=True,
+            b"hello world",
+            headers=headers,
+            context=context,
+            streaming=True,
         )
         operation_model = self._make_operation_model(streaming_output=True)
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body.read(), b"hello world")
@@ -517,10 +540,16 @@ class TestHttpChecksumHandlers(unittest.
 
         headers = {"x-amz-checksum-crc32": "WrOonG=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context, streaming=True,
+            b"hello world",
+            headers=headers,
+            context=context,
+            streaming=True,
         )
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         with self.assertRaises(FlexibleChecksumError):
@@ -530,10 +559,16 @@ class TestHttpChecksumHandlers(unittest.
         # but a proper body should still come out at the end
         headers = {"x-amz-checksum-foo": "FOOO=="}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context, streaming=True,
+            b"hello world",
+            headers=headers,
+            context=context,
+            streaming=True,
         )
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body.read(), b"hello world")
@@ -547,11 +582,16 @@ class TestHttpChecksumHandlers(unittest.
         # instead skipped
         headers = {"x-amz-checksum-crc32": "FOOO==-123"}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context,
+            b"hello world",
+            headers=headers,
+            context=context,
         )
         operation_model = self._make_operation_model()
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body, b"hello world")
@@ -563,11 +603,17 @@ class TestHttpChecksumHandlers(unittest.
         # instead skipped
         headers = {"x-amz-checksum-crc32": "FOOO==-123"}
         http_response, response_dict = self._make_http_response(
-            b"hello world", headers=headers, context=context, streaming=True,
+            b"hello world",
+            headers=headers,
+            context=context,
+            streaming=True,
         )
         operation_model = self._make_operation_model(streaming_output=True)
         handle_checksum_body(
-            http_response, response_dict, context, operation_model,
+            http_response,
+            response_dict,
+            context,
+            operation_model,
         )
         body = response_dict["body"]
         self.assertEqual(body.read(), b"hello world")
@@ -602,7 +648,7 @@ class TestAwsChunkedWrapper(unittest.Tes
         class OneLessBytesIO(BytesIO):
             def read(self, size=-1):
                 # Return 1 less byte than was asked for
-                return super(OneLessBytesIO, self).read(size - 1)
+                return super().read(size - 1)
 
         bytes = OneLessBytesIO(b"abcdefghijklmnopqrstuvwxyz")
         wrapper = AwsChunkedWrapper(bytes, chunk_size=10)
@@ -705,12 +751,14 @@ class TestChecksumImplementations(unitte
 
     def test_sha1(self):
         self.assert_base64_checksum(
-            Sha1Checksum, "Kq5sNclPz7QV2+lfQIuc6R7oRu0=",
+            Sha1Checksum,
+            "Kq5sNclPz7QV2+lfQIuc6R7oRu0=",
         )
 
     def test_sha256(self):
         self.assert_base64_checksum(
-            Sha256Checksum, "uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=",
+            Sha256Checksum,
+            "uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=",
         )
 
     def test_crt_crc32c(self):
@@ -728,7 +776,10 @@ class TestStreamingChecksumBody(unittest
 
     def _make_wrapper(self, checksum):
         self.wrapper = StreamingChecksumBody(
-            self.fake_body, None, Crc32Checksum(), checksum,
+            self.fake_body,
+            None,
+            Crc32Checksum(),
+            checksum,
         )
 
     def test_basic_read_good(self):
diff -pruN 2.23.6-1/tests/unit/botocore/test_idempotency.py 2.31.35-1/tests/unit/botocore/test_idempotency.py
--- 2.23.6-1/tests/unit/botocore/test_idempotency.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_idempotency.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,18 +11,20 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import mock, unittest
 import re
+
 from botocore.handlers import generate_idempotent_uuid
 
+from tests import mock, unittest
+
 
 class TestIdempotencyInjection(unittest.TestCase):
     def setUp(self):
         self.mock_model = mock.MagicMock()
         self.mock_model.idempotent_members = ['RequiredKey']
         self.uuid_pattern = re.compile(
-            '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$',
-            re.I)
+            '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', re.I
+        )
 
     def test_injection(self):
         # No parameters are provided, RequiredKey should be autofilled
diff -pruN 2.23.6-1/tests/unit/botocore/test_loaders.py 2.31.35-1/tests/unit/botocore/test_loaders.py
--- 2.23.6-1/tests/unit/botocore/test_loaders.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_loaders.py	2025-11-12 19:17:29.000000000 +0000
@@ -19,21 +19,24 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 # IN THE SOFTWARE.
 
-import os
 import contextlib
 import copy
+import os
 
 from botocore.exceptions import DataNotFoundError, UnknownServiceError
-from botocore.loaders import JSONFileLoader
-from botocore.loaders import Loader, create_loader
-from botocore.loaders import ExtrasProcessor
+from botocore.loaders import (
+    ExtrasProcessor,
+    JSONFileLoader,
+    Loader,
+    create_loader,
+)
 
-from tests import mock, BaseEnvVar
+from tests import BaseEnvVar, mock
 
 
 class TestJSONFileLoader(BaseEnvVar):
     def setUp(self):
-        super(TestJSONFileLoader, self).setUp()
+        super().setUp()
         self.data_path = os.path.join(os.path.dirname(__file__), 'data')
         self.file_loader = JSONFileLoader()
         self.valid_file_path = os.path.join(self.data_path, 'foo')
@@ -52,8 +55,11 @@ class TestJSONFileLoader(BaseEnvVar):
         self.assertTrue(self.file_loader.exists(self.valid_file_path))
 
     def test_file_does_not_exist_returns_false(self):
-        self.assertFalse(self.file_loader.exists(
-            os.path.join(self.data_path, 'does', 'not', 'exist')))
+        self.assertFalse(
+            self.file_loader.exists(
+                os.path.join(self.data_path, 'does', 'not', 'exist')
+            )
+        )
 
     def test_file_with_non_ascii(self):
         try:
@@ -64,7 +70,6 @@ class TestJSONFileLoader(BaseEnvVar):
 
 
 class TestLoader(BaseEnvVar):
-
     def test_default_search_paths(self):
         loader = Loader()
         self.assertEqual(len(loader.search_paths), 2)
@@ -74,8 +79,8 @@ class TestLoader(BaseEnvVar):
         # with .aws/models.
         home_dir_path = os.path.join('.aws', 'models')
         self.assertTrue(
-            any(p.endswith(home_dir_path) for p in
-                loader.search_paths))
+            any(p.endswith(home_dir_path) for p in loader.search_paths)
+        )
 
     def test_can_add_to_search_path(self):
         loader = Loader()
@@ -88,8 +93,13 @@ class TestLoader(BaseEnvVar):
         # the customer/builtin data paths.
         self.assertEqual(
             loader.search_paths,
-            ['foo', 'bar', loader.CUSTOMER_DATA_PATH,
-             loader.BUILTIN_DATA_PATH])
+            [
+                'foo',
+                'bar',
+                loader.CUSTOMER_DATA_PATH,
+                loader.BUILTIN_DATA_PATH,
+            ],
+        )
 
     # The file loader isn't consulted unless the current
     # search path exists, so we're patching isdir to always
@@ -98,14 +108,15 @@ class TestLoader(BaseEnvVar):
     def test_load_data_uses_loader(self):
         search_paths = ['foo', 'bar', 'baz']
 
-        class FakeLoader(object):
+        class FakeLoader:
             def load_file(self, name):
                 expected_ending = os.path.join('bar', 'baz')
                 if name.endswith(expected_ending):
                     return ['loaded data']
 
-        loader = Loader(extra_search_paths=search_paths,
-                        file_loader=FakeLoader())
+        loader = Loader(
+            extra_search_paths=search_paths, file_loader=FakeLoader()
+        )
         loaded = loader.load_data('baz')
         self.assertEqual(loaded, ['loaded data'])
 
@@ -127,11 +138,12 @@ class TestLoader(BaseEnvVar):
         self.assertEqual(path, os.path.join('bar', 'abc'))
 
     def test_data_not_found_raises_exception(self):
-        class FakeLoader(object):
+        class FakeLoader:
             def load_file(self, name):
                 # Returning None indicates that the
                 # loader couldn't find anything.
                 return None
+
         loader = Loader(file_loader=FakeLoader())
         with self.assertRaises(DataNotFoundError):
             loader.load_data('baz')
@@ -147,21 +159,24 @@ class TestLoader(BaseEnvVar):
 
     @mock.patch('os.path.isdir', mock.Mock(return_value=True))
     def test_error_raised_if_service_does_not_exist(self):
-        loader = Loader(extra_search_paths=[],
-                        include_default_search_paths=False)
+        loader = Loader(
+            extra_search_paths=[], include_default_search_paths=False
+        )
         with self.assertRaises(DataNotFoundError):
             loader.determine_latest_version('unknownservice', 'service-2')
 
     @mock.patch('os.path.isdir', mock.Mock(return_value=True))
     def test_load_service_model(self):
-        class FakeLoader(object):
+        class FakeLoader:
             def load_file(self, name):
                 return ['loaded data']
 
-        loader = Loader(extra_search_paths=['foo'],
-                        file_loader=FakeLoader(),
-                        include_default_search_paths=False,
-                        include_default_extras=False)
+        loader = Loader(
+            extra_search_paths=['foo'],
+            file_loader=FakeLoader(),
+            include_default_search_paths=False,
+            include_default_extras=False,
+        )
         loader.determine_latest_version = mock.Mock(return_value='2015-03-01')
         loader.list_available_services = mock.Mock(return_value=['baz'])
         loaded = loader.load_service_model('baz', type_name='service-2')
@@ -169,35 +184,40 @@ class TestLoader(BaseEnvVar):
 
     @mock.patch('os.path.isdir', mock.Mock(return_value=True))
     def test_load_service_model_enforces_case(self):
-        class FakeLoader(object):
+        class FakeLoader:
             def load_file(self, name):
                 return ['loaded data']
 
-        loader = Loader(extra_search_paths=['foo'],
-                        file_loader=FakeLoader(),
-                        include_default_search_paths=False)
+        loader = Loader(
+            extra_search_paths=['foo'],
+            file_loader=FakeLoader(),
+            include_default_search_paths=False,
+        )
         loader.determine_latest_version = mock.Mock(return_value='2015-03-01')
         loader.list_available_services = mock.Mock(return_value=['baz'])
 
         # Should have a) the unknown service name and b) list of valid
         # service names.
-        with self.assertRaisesRegex(UnknownServiceError,
-                                    'Unknown service.*BAZ.*baz'):
+        with self.assertRaisesRegex(
+            UnknownServiceError, 'Unknown service.*BAZ.*baz'
+        ):
             loader.load_service_model('BAZ', type_name='service-2')
 
     def test_load_service_model_uses_provided_type_name(self):
-        loader = Loader(extra_search_paths=['foo'],
-                        file_loader=mock.Mock(),
-                        include_default_search_paths=False)
+        loader = Loader(
+            extra_search_paths=['foo'],
+            file_loader=mock.Mock(),
+            include_default_search_paths=False,
+        )
         loader.list_available_services = mock.Mock(return_value=['baz'])
 
         # Should have a) the unknown service name and b) list of valid
         # service names.
         provided_type_name = 'not-service-2'
-        with self.assertRaisesRegex(UnknownServiceError,
-                                    'Unknown service.*BAZ.*baz'):
-            loader.load_service_model(
-                'BAZ', type_name=provided_type_name)
+        with self.assertRaisesRegex(
+            UnknownServiceError, 'Unknown service.*BAZ.*baz'
+        ):
+            loader.load_service_model('BAZ', type_name=provided_type_name)
 
         loader.list_available_services.assert_called_with(provided_type_name)
 
@@ -218,22 +238,26 @@ class TestLoader(BaseEnvVar):
 
 class TestMergeExtras(BaseEnvVar):
     def setUp(self):
-        super(TestMergeExtras, self).setUp()
+        super().setUp()
         self.file_loader = mock.Mock()
         self.data_loader = Loader(
-            extra_search_paths=['datapath'], file_loader=self.file_loader,
-            include_default_search_paths=False)
+            extra_search_paths=['datapath'],
+            file_loader=self.file_loader,
+            include_default_search_paths=False,
+        )
         self.data_loader.determine_latest_version = mock.Mock(
-            return_value='2015-03-01')
+            return_value='2015-03-01'
+        )
         self.data_loader.list_available_services = mock.Mock(
-            return_value=['myservice'])
+            return_value=['myservice']
+        )
 
         isdir_mock = mock.Mock(return_value=True)
         self.isdir_patch = mock.patch('os.path.isdir', isdir_mock)
         self.isdir_patch.start()
 
     def tearDown(self):
-        super(TestMergeExtras, self).tearDown()
+        super().tearDown()
         self.isdir_patch.stop()
 
     def test_merge_extras(self):
@@ -250,7 +274,7 @@ class TestMergeExtras(BaseEnvVar):
         base_path = os.path.join('datapath', 'myservice', '2015-03-01')
         expected_call_args = [
             os.path.join(base_path, 'service-2'),
-            os.path.join(base_path, 'service-2.sdk-extras')
+            os.path.join(base_path, 'service-2.sdk-extras'),
         ]
         self.assertEqual(call_args, expected_call_args)
 
@@ -272,13 +296,17 @@ class TestMergeExtras(BaseEnvVar):
 
     def test_include_default_extras(self):
         self.data_loader = Loader(
-            extra_search_paths=['datapath'], file_loader=self.file_loader,
+            extra_search_paths=['datapath'],
+            file_loader=self.file_loader,
             include_default_search_paths=False,
-            include_default_extras=False)
+            include_default_extras=False,
+        )
         self.data_loader.determine_latest_version = mock.Mock(
-            return_value='2015-03-01')
+            return_value='2015-03-01'
+        )
         self.data_loader.list_available_services = mock.Mock(
-            return_value=['myservice'])
+            return_value=['myservice']
+        )
 
         service_data = {'foo': 'service', 'bar': 'service'}
         service_data_copy = copy.copy(service_data)
@@ -293,7 +321,10 @@ class TestMergeExtras(BaseEnvVar):
         sdk_extras = {'merge': {'foo': 'sdk'}}
         cli_extras = {'merge': {'cli': True}}
         self.file_loader.load_file.side_effect = [
-            service_data, sdk_extras, cli_extras]
+            service_data,
+            sdk_extras,
+            cli_extras,
+        ]
 
         self.data_loader.extras_types.append('cli')
 
@@ -307,7 +338,7 @@ class TestMergeExtras(BaseEnvVar):
         expected_call_args = [
             os.path.join(base_path, 'service-2'),
             os.path.join(base_path, 'service-2.sdk-extras'),
-            os.path.join(base_path, 'service-2.cli-extras')
+            os.path.join(base_path, 'service-2.cli-extras'),
         ]
         self.assertEqual(call_args, expected_call_args)
 
@@ -315,7 +346,10 @@ class TestMergeExtras(BaseEnvVar):
         service_data = {'foo': 'service', 'bar': 'service'}
         cli_extras = {'merge': {'foo': 'cli'}}
         self.file_loader.load_file.side_effect = [
-            service_data, None, cli_extras]
+            service_data,
+            None,
+            cli_extras,
+        ]
 
         self.data_loader.extras_types.append('cli')
 
@@ -326,7 +360,7 @@ class TestMergeExtras(BaseEnvVar):
 
 class TestExtrasProcessor(BaseEnvVar):
     def setUp(self):
-        super(TestExtrasProcessor, self).setUp()
+        super().setUp()
         self.processor = ExtrasProcessor()
         self.service_data = {
             'shapes': {
@@ -354,7 +388,7 @@ class TestExtrasProcessor(BaseEnvVar):
     def test_process_in_order(self):
         extras = [
             {'merge': {'shapes': {'BooleanShape': {'type': 'boolean'}}}},
-            {'merge': {'shapes': {'BooleanShape': {'type': 'string'}}}}
+            {'merge': {'shapes': {'BooleanShape': {'type': 'string'}}}},
         ]
         self.processor.process(self.service_data, extras)
         self.assertNotEqual(self.service_data, self.service_data_copy)
@@ -365,25 +399,26 @@ class TestExtrasProcessor(BaseEnvVar):
 
 class TestLoadersWithDirectorySearching(BaseEnvVar):
     def setUp(self):
-        super(TestLoadersWithDirectorySearching, self).setUp()
+        super().setUp()
         self.fake_directories = {}
 
     def tearDown(self):
-        super(TestLoadersWithDirectorySearching, self).tearDown()
+        super().tearDown()
 
     @contextlib.contextmanager
     def loader_with_fake_dirs(self):
         mock_file_loader = mock.Mock()
         mock_file_loader.exists = self.fake_exists
         search_paths = list(self.fake_directories)
-        loader = Loader(extra_search_paths=search_paths,
-                        include_default_search_paths=False,
-                        file_loader=mock_file_loader)
+        loader = Loader(
+            extra_search_paths=search_paths,
+            include_default_search_paths=False,
+            file_loader=mock_file_loader,
+        )
         with mock.patch('os.listdir', self.fake_listdir):
             with mock.patch('os.path.isdir', mock.Mock(return_value=True)):
                 yield loader
 
-
     def fake_listdir(self, dirname):
         parts = dirname.split(os.path.sep)
         result = self.fake_directories
@@ -427,10 +462,11 @@ class TestLoadersWithDirectorySearching(
         with self.loader_with_fake_dirs() as loader:
             self.assertEqual(
                 loader.list_available_services(type_name='service-2'),
-                ['dynamodb', 'ec2'])
+                ['dynamodb', 'ec2'],
+            )
             self.assertEqual(
-                loader.list_available_services(type_name='resource-1'),
-                ['rds'])
+                loader.list_available_services(type_name='resource-1'), ['rds']
+            )
 
     def test_determine_latest(self):
         # Fake mapping of directories to subdirectories.
@@ -458,8 +494,12 @@ class TestLoadersWithDirectorySearching(
             },
         }
         with self.loader_with_fake_dirs() as loader:
-            latest = loader.determine_latest_version('ec2', 'service-2')
-            self.assertEqual(loader.determine_latest_version('ec2', 'service-2'),
-                             '2014-10-01')
-            self.assertEqual(loader.determine_latest_version('ec2', 'service-1'),
-                             '2015-03-01')
+            loader.determine_latest_version('ec2', 'service-2')
+            self.assertEqual(
+                loader.determine_latest_version('ec2', 'service-2'),
+                '2014-10-01',
+            )
+            self.assertEqual(
+                loader.determine_latest_version('ec2', 'service-1'),
+                '2015-03-01',
+            )
diff -pruN 2.23.6-1/tests/unit/botocore/test_model.py 2.31.35-1/tests/unit/botocore/test_model.py
--- 2.23.6-1/tests/unit/botocore/test_model.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_model.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,11 +1,10 @@
 import pytest
-
-from tests import unittest
-
 from botocore import model
 from botocore.compat import OrderedDict
 from botocore.exceptions import MissingServiceIdError
 
+from tests import unittest
+
 
 @pytest.mark.parametrize("property_name", ['api_version', 'protocol'])
 def test_missing_model_attribute_raises_exception(property_name):
@@ -25,17 +24,16 @@ class TestServiceId(unittest.TestCase):
 
 
 class TestServiceModel(unittest.TestCase):
-
     def setUp(self):
         self.model = {
-            'metadata': {'protocol': 'query',
-                         'endpointPrefix': 'endpoint-prefix',
-                         'serviceId': 'MyService'},
+            'metadata': {
+                'protocol': 'query',
+                'endpointPrefix': 'endpoint-prefix',
+                'serviceId': 'MyService',
+            },
             'documentation': 'Documentation value',
             'operations': {},
-            'shapes': {
-                'StringShape': {'type': 'string'}
-            }
+            'shapes': {'StringShape': {'type': 'string'}},
         }
         self.error_shapes = {
             'ExceptionOne': {
@@ -47,9 +45,7 @@ class TestServiceModel(unittest.TestCase
                 'exception': True,
                 'type': 'structure',
                 'members': {},
-                'error': {
-                    'code': 'FooCode'
-                }
+                'error': {'code': 'FooCode'},
             },
         }
         self.service_model = model.ServiceModel(self.model)
@@ -60,8 +56,9 @@ class TestServiceModel(unittest.TestCase
         self.assertEqual(self.service_model.metadata.get('protocol'), 'query')
 
     def test_service_name_can_be_overriden(self):
-        service_model = model.ServiceModel(self.model,
-                                           service_name='myservice')
+        service_model = model.ServiceModel(
+            self.model, service_name='myservice'
+        )
         self.assertEqual(service_model.service_name, 'myservice')
 
     def test_service_name_defaults_to_endpoint_prefix(self):
@@ -72,7 +69,8 @@ class TestServiceModel(unittest.TestCase
 
     def test_hyphenize_service_id(self):
         self.assertEqual(
-            self.service_model.service_id.hyphenize(), 'myservice')
+            self.service_model.service_id.hyphenize(), 'myservice'
+        )
 
     def test_service_id_does_not_exist(self):
         service_model = {
@@ -82,14 +80,13 @@ class TestServiceModel(unittest.TestCase
             },
             'documentation': 'Documentation value',
             'operations': {},
-            'shapes': {
-                'StringShape': {'type': 'string'}
-            }
+            'shapes': {'StringShape': {'type': 'string'}},
         }
         service_name = 'myservice'
         service_model = model.ServiceModel(service_model, service_name)
-        with self.assertRaisesRegex(model.UndefinedModelAttributeError,
-                                    service_name):
+        with self.assertRaisesRegex(
+            model.UndefinedModelAttributeError, service_name
+        ):
             service_model.service_id
 
     def test_operation_does_not_exist(self):
@@ -100,15 +97,17 @@ class TestServiceModel(unittest.TestCase
         self.assertEqual(self.service_model.signing_name, 'endpoint-prefix')
 
     def test_documentation_exposed_as_property(self):
-        self.assertEqual(self.service_model.documentation,
-                         'Documentation value')
+        self.assertEqual(
+            self.service_model.documentation, 'Documentation value'
+        )
 
     def test_shape_names(self):
         self.assertEqual(self.service_model.shape_names, ['StringShape'])
 
     def test_repr_has_service_name(self):
-        self.assertEqual(repr(self.service_model),
-                         'ServiceModel(endpoint-prefix)')
+        self.assertEqual(
+            repr(self.service_model), 'ServiceModel(endpoint-prefix)'
+        )
 
     def test_shape_for_error_code(self):
         self.model['shapes'].update(self.error_shapes)
@@ -164,6 +163,19 @@ class TestServiceModel(unittest.TestCase
         )
         self.assertEqual(len(self.service_model.client_context_parameters), 0)
 
+    def test_protocol_resolution_without_protocols_trait(self):
+        self.assertIsNone(self.service_model.metadata.get('protocols'))
+        self.assertEqual(self.service_model.resolved_protocol, 'query')
+
+    def test_protocol_resolution_picks_highest_supported(self):
+        self.service_model.metadata['protocols'] = ['query', 'json']
+        self.assertEqual(self.service_model.resolved_protocol, 'json')
+
+    def test_protocol_raises_error_for_unsupported_protocol(self):
+        self.service_model.metadata['protocols'] = ['wrongprotocol']
+        with self.assertRaises(model.UnsupportedServiceProtocolsError):
+            self.service_model.resolved_protocol
+
 
 class TestOperationModelFromService(unittest.TestCase):
     def setUp(self):
@@ -177,9 +189,7 @@ class TestOperationModelFromService(unit
                         'requestUri': '/',
                     },
                     'name': 'OperationName',
-                    'input': {
-                        'shape': 'OperationNameRequest'
-                    },
+                    'input': {'shape': 'OperationNameRequest'},
                     'output': {
                         'shape': 'OperationNameResponse',
                     },
@@ -194,9 +204,7 @@ class TestOperationModelFromService(unit
                         'requestUri': '/',
                     },
                     'name': 'OperationTwo',
-                    'input': {
-                        'shape': 'OperationNameRequest'
-                    },
+                    'input': {'shape': 'OperationNameRequest'},
                     'output': {
                         'shape': 'OperationNameResponse',
                     },
@@ -209,9 +217,7 @@ class TestOperationModelFromService(unit
                         'requestUri': '/',
                     },
                     'name': 'PayloadOperation',
-                    'input': {
-                        'shape': 'PayloadOperationRequest'
-                    },
+                    'input': {'shape': 'PayloadOperationRequest'},
                     'output': {
                         'shape': 'PayloadOperationResponse',
                     },
@@ -225,9 +231,7 @@ class TestOperationModelFromService(unit
                         'requestUri': '/',
                     },
                     'name': 'NoBodyOperation',
-                    'input': {
-                        'shape': 'NoBodyOperationRequest'
-                    },
+                    'input': {'shape': 'NoBodyOperationRequest'},
                     'output': {
                         'shape': 'OperationNameResponse',
                     },
@@ -260,7 +264,7 @@ class TestOperationModelFromService(unit
                     'members': {
                         'Arg1': {'shape': 'stringType'},
                         'Arg2': {'shape': 'stringType'},
-                    }
+                    },
                 },
                 'OperationNameResponse': {
                     'type': 'structure',
@@ -268,7 +272,7 @@ class TestOperationModelFromService(unit
                         'String': {
                             'shape': 'stringType',
                         }
-                    }
+                    },
                 },
                 'PayloadOperationRequest': {
                     'type': 'structure',
@@ -276,7 +280,7 @@ class TestOperationModelFromService(unit
                         'Arg1': {'shape': 'TestConfig'},
                         'Arg2': {'shape': 'stringType'},
                     },
-                    'payload': 'Arg1'
+                    'payload': 'Arg1',
                 },
                 'PayloadOperationResponse': {
                     'type': 'structure',
@@ -285,7 +289,7 @@ class TestOperationModelFromService(unit
                             'shape': 'stringType',
                         }
                     },
-                    'payload': 'String'
+                    'payload': 'String',
                 },
                 'NoBodyOperationRequest': {
                     'type': 'structure',
@@ -293,9 +297,9 @@ class TestOperationModelFromService(unit
                         'data': {
                             'location': 'header',
                             'locationName': 'x-amz-data',
-                            'shape': 'stringType'
+                            'shape': 'stringType',
                         }
-                    }
+                    },
                 },
                 'ContextParamOperationRequest': {
                     'type': 'structure',
@@ -311,27 +315,24 @@ class TestOperationModelFromService(unit
                 },
                 'NoSuchResourceException': {
                     'type': 'structure',
-                    'members': {}
+                    'members': {},
                 },
                 'stringType': {
                     'type': 'string',
                 },
                 'TestConfig': {
                     'type': 'structure',
-                    'members': {
-                        'timeout': {
-                            'shape': 'stringType'
-                        }
-                    }
+                    'members': {'timeout': {'shape': 'stringType'}},
                 },
-            }
+            },
         }
         self.service_model = model.ServiceModel(self.model)
 
     def test_wire_name_always_matches_model(self):
         service_model = model.ServiceModel(self.model)
         operation = model.OperationModel(
-            self.model['operations']['OperationName'], service_model, 'Foo')
+            self.model['operations']['OperationName'], service_model, 'Foo'
+        )
         self.assertEqual(operation.name, 'Foo')
         self.assertEqual(operation.wire_name, 'OperationName')
 
@@ -343,7 +344,8 @@ class TestOperationModelFromService(unit
     def test_name_and_wire_name_defaults_to_same_value(self):
         service_model = model.ServiceModel(self.model)
         operation = model.OperationModel(
-            self.model['operations']['OperationName'], service_model)
+            self.model['operations']['OperationName'], service_model
+        )
         self.assertEqual(operation.name, 'OperationName')
         self.assertEqual(operation.wire_name, 'OperationName')
 
@@ -353,8 +355,9 @@ class TestOperationModelFromService(unit
         self.assertEqual(operation.name, 'OperationName')
 
     def test_name_from_service_model_when_differs_from_name(self):
-        self.model['operations']['Foo'] = \
-            self.model['operations']['OperationName']
+        self.model['operations']['Foo'] = self.model['operations'][
+            'OperationName'
+        ]
         service_model = model.ServiceModel(self.model)
         operation = service_model.operation_model('Foo')
         self.assertEqual(operation.name, 'Foo')
@@ -381,8 +384,7 @@ class TestOperationModelFromService(unit
         operation = service_model.operation_model('OperationName')
         # This is an identity comparison because we don't implement
         # __eq__, so we may need to change this in the future.
-        self.assertEqual(
-            operation.service_model, service_model)
+        self.assertEqual(operation.service_model, service_model)
 
     def test_operation_output_model(self):
         service_model = model.ServiceModel(self.model)
@@ -406,7 +408,8 @@ class TestOperationModelFromService(unit
         # OperationName only has a NoSuchResourceException
         self.assertEqual(len(operation.error_shapes), 1)
         self.assertEqual(
-            operation.error_shapes[0].name, 'NoSuchResourceException')
+            operation.error_shapes[0].name, 'NoSuchResourceException'
+        )
 
     def test_has_auth(self):
         operation = self.service_model.operation_model('OperationName')
@@ -566,7 +569,7 @@ class TestOperationModelFromService(unit
 
 class TestOperationModelEventStreamTypes(unittest.TestCase):
     def setUp(self):
-        super(TestOperationModelEventStreamTypes, self).setUp()
+        super().setUp()
         self.model = {
             'metadata': {'protocol': 'rest-xml', 'endpointPrefix': 'foo'},
             'documentation': '',
@@ -584,25 +587,23 @@ class TestOperationModelEventStreamTypes
             'shapes': {
                 'NormalStructure': {
                     'type': 'structure',
-                    'members': {
-                        'Input': {'shape': 'StringType'}
-                    }
+                    'members': {'Input': {'shape': 'StringType'}},
                 },
                 'OperationRequest': {
                     'type': 'structure',
                     'members': {
                         'String': {'shape': 'StringType'},
-                        "Body": {'shape': 'EventStreamStructure'}
+                        "Body": {'shape': 'EventStreamStructure'},
                     },
-                    'payload': 'Body'
+                    'payload': 'Body',
                 },
                 'OperationResponse': {
                     'type': 'structure',
                     'members': {
                         'String': {'shape': 'StringType'},
-                        "Body": {'shape': 'EventStreamStructure'}
+                        "Body": {'shape': 'EventStreamStructure'},
                     },
-                    'payload': 'Body'
+                    'payload': 'Body',
                 },
                 'StringType': {'type': 'string'},
                 'BlobType': {'type': 'blob'},
@@ -611,31 +612,23 @@ class TestOperationModelEventStreamTypes
                     'type': 'structure',
                     'members': {
                         'EventA': {'shape': 'EventAStructure'},
-                        'EventB': {'shape': 'EventBStructure'}
-                    }
+                        'EventB': {'shape': 'EventBStructure'},
+                    },
                 },
                 'EventAStructure': {
                     'event': True,
                     'type': 'structure',
                     'members': {
-                        'Payload': {
-                            'shape': 'BlobType',
-                            'eventpayload': True
-                        },
-                        'Header': {
-                            'shape': 'StringType',
-                            'eventheader': True
-                        }
-                    }
+                        'Payload': {'shape': 'BlobType', 'eventpayload': True},
+                        'Header': {'shape': 'StringType', 'eventheader': True},
+                    },
                 },
                 'EventBStructure': {
                     'event': True,
                     'type': 'structure',
-                    'members': {
-                        'Records': {'shape': 'StringType'}
-                    }
-                }
-            }
+                    'members': {'Records': {'shape': 'StringType'}},
+                },
+            },
         }
 
     def update_operation(self, **kwargs):
@@ -681,7 +674,7 @@ class TestOperationModelEventStreamTypes
 
 class TestOperationModelStreamingTypes(unittest.TestCase):
     def setUp(self):
-        super(TestOperationModelStreamingTypes, self).setUp()
+        super().setUp()
         self.model = {
             'metadata': {'protocol': 'query', 'endpointPrefix': 'foo'},
             'documentation': '',
@@ -705,9 +698,9 @@ class TestOperationModelStreamingTypes(u
                         },
                         "Body": {
                             'shape': 'blobType',
-                        }
+                        },
                     },
-                    'payload': 'Body'
+                    'payload': 'Body',
                 },
                 'OperationResponse': {
                     'type': 'structure',
@@ -717,17 +710,15 @@ class TestOperationModelStreamingTypes(u
                         },
                         "Body": {
                             'shape': 'blobType',
-                        }
+                        },
                     },
-                    'payload': 'Body'
+                    'payload': 'Body',
                 },
                 'stringType': {
                     'type': 'string',
                 },
-                'blobType': {
-                    'type': 'blob'
-                }
-            }
+                'blobType': {'type': 'blob'},
+            },
         }
 
     def remove_payload(self, type):
@@ -766,16 +757,20 @@ class TestDeepMerge(unittest.TestCase):
             'SetQueueAttributes': {
                 'type': 'structure',
                 'members': {
-                    'MapExample': {'shape': 'StrToStrMap',
-                                   'locationName': 'Attribute'},
-                }
+                    'MapExample': {
+                        'shape': 'StrToStrMap',
+                        'locationName': 'Attribute',
+                    },
+                },
             },
             'SetQueueAttributes2': {
                 'type': 'structure',
                 'members': {
-                    'MapExample': {'shape': 'StrToStrMap',
-                                   'locationName': 'Attribute2'},
-                }
+                    'MapExample': {
+                        'shape': 'StrToStrMap',
+                        'locationName': 'Attribute2',
+                    },
+                },
             },
             'StrToStrMap': {
                 'type': 'map',
@@ -784,7 +779,7 @@ class TestDeepMerge(unittest.TestCase):
                 'flattened': True,
                 'name': 'NotAttribute',
             },
-            'StringType': {'type': 'string'}
+            'StringType': {'type': 'string'},
         }
         self.shape_resolver = model.ShapeResolver(self.shapes)
 
@@ -794,11 +789,15 @@ class TestDeepMerge(unittest.TestCase):
         # map_merged has a serialization as a member trait as well as
         # in the StrToStrMap.
         # The member trait should have precedence.
-        self.assertEqual(map_merged.serialization,
-                         # member beats the definition.
-                         {'name': 'Attribute',
-                          # From the definition.
-                          'flattened': True,})
+        self.assertEqual(
+            map_merged.serialization,
+            # member beats the definition.
+            {
+                'name': 'Attribute',
+                # From the definition.
+                'flattened': True,
+            },
+        )
         # Ensure we don't merge/mutate the original dicts.
         self.assertEqual(map_merged.key.serialization['name'], 'Name')
         self.assertEqual(map_merged.value.serialization['name'], 'Value')
@@ -822,11 +821,9 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'Bar': {'shape': 'StringType'},
                     'Baz': {'shape': 'StringType'},
-                }
+                },
             },
-            "StringType": {
-                "type": "string"
-            }
+            "StringType": {"type": "string"},
         }
         resolver = model.ShapeResolver(shape_map)
         shape = resolver.get_shape_by_name('Foo')
@@ -840,11 +837,9 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'Bar': {'shape': 'StringType'},
                     'Baz': {'shape': 'StringType'},
-                }
+                },
             },
-            "StringType": {
-                "type": "string"
-            }
+            "StringType": {"type": "string"},
         }
         resolver = model.ShapeResolver(shape_map)
         shape = resolver.resolve_shape_ref({'shape': 'StringType'})
@@ -858,15 +853,14 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'Bar': {'shape': 'StringType'},
                     'Baz': {'shape': 'StringType', 'locationName': 'other'},
-                }
+                },
             },
-            "StringType": {
-                "type": "string"
-            }
+            "StringType": {"type": "string"},
         }
         resolver = model.ShapeResolver(shape_map)
-        shape = resolver.resolve_shape_ref({'shape': 'StringType',
-                                            'locationName': 'other'})
+        shape = resolver.resolve_shape_ref(
+            {'shape': 'StringType', 'locationName': 'other'}
+        )
         self.assertEqual(shape.serialization['name'], 'other')
         self.assertEqual(shape.name, 'StringType')
 
@@ -876,15 +870,14 @@ class TestShapeResolver(unittest.TestCas
                 'type': 'structure',
                 'members': {
                     'Baz': {'shape': 'StringType', 'locationName': 'other'},
-                }
+                },
             },
-            "StringType": {
-                "type": "string"
-            }
+            "StringType": {"type": "string"},
         }
         resolver = model.ShapeResolver(shape_map)
-        shape = resolver.resolve_shape_ref({'shape': 'StringType',
-                                            'locationName': 'other'})
+        shape = resolver.resolve_shape_ref(
+            {'shape': 'StringType', 'locationName': 'other'}
+        )
         self.assertEqual(shape.serialization['name'], 'other')
         # serialization is computed on demand, and a cache is kept.
         # This is just verifying that trying to access serialization again
@@ -896,15 +889,16 @@ class TestShapeResolver(unittest.TestCas
         shape_map = {
             "StringType": {
                 "type": "string",
-                "documentation": "Original documentation"
+                "documentation": "Original documentation",
             }
         }
         resolver = model.ShapeResolver(shape_map)
         shape = resolver.get_shape_by_name('StringType')
         self.assertEqual(shape.documentation, 'Original documentation')
 
-        shape = resolver.resolve_shape_ref({'shape': 'StringType',
-                                            'documentation': 'override'})
+        shape = resolver.resolve_shape_ref(
+            {'shape': 'StringType', 'documentation': 'override'}
+        )
         self.assertEqual(shape.documentation, 'override')
 
     def test_shape_type_structure(self):
@@ -914,18 +908,19 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'OldPassword': {'shape': 'passwordType'},
                     'NewPassword': {'shape': 'passwordType'},
-                }
+                },
             },
             'passwordType': {
-                "type":"string",
-            }
+                "type": "string",
+            },
         }
         resolver = model.ShapeResolver(shapes)
         shape = resolver.get_shape_by_name('ChangePasswordRequest')
         self.assertEqual(shape.type_name, 'structure')
         self.assertEqual(shape.name, 'ChangePasswordRequest')
-        self.assertEqual(list(sorted(shape.members)),
-                         ['NewPassword', 'OldPassword'])
+        self.assertEqual(
+            list(sorted(shape.members)), ['NewPassword', 'OldPassword']
+        )
         self.assertEqual(shape.members['OldPassword'].name, 'passwordType')
         self.assertEqual(shape.members['OldPassword'].type_name, 'string')
         self.assertEqual(shape.error_code, None)
@@ -935,7 +930,7 @@ class TestShapeResolver(unittest.TestCas
             'FooException': {
                 'exception': True,
                 'type': 'structure',
-                'members': {}
+                'members': {},
             }
         }
         # Test without explicit error code
@@ -958,19 +953,20 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'OldPassword': {'shape': 'passwordType'},
                     'NewPassword': {'shape': 'passwordType'},
-                }
+                },
             },
             'passwordType': {
-                "type":"string",
-                "min":1,
-                "max":128,
-                "sensitive":True
-            }
+                "type": "string",
+                "min": 1,
+                "max": 128,
+                "sensitive": True,
+            },
         }
         resolver = model.ShapeResolver(shapes)
         shape = resolver.get_shape_by_name('ChangePasswordRequest')
-        self.assertEqual(shape.metadata['required'],
-                         ['OldPassword', 'NewPassword'])
+        self.assertEqual(
+            shape.metadata['required'], ['OldPassword', 'NewPassword']
+        )
         member = shape.members['OldPassword']
         self.assertEqual(member.metadata['min'], 1)
         self.assertEqual(member.metadata['max'], 128)
@@ -986,31 +982,27 @@ class TestShapeResolver(unittest.TestCas
                     }
                 },
                 'exception': True,
-                'retryable': {'throttling': True}
+                'retryable': {'throttling': True},
             }
         }
         resolver = model.ShapeResolver(shapes)
         shape = resolver.get_shape_by_name('ResourceNotFoundException')
         self.assertEqual(
             shape.metadata,
-            {'exception': True, 'retryable': {'throttling': True}}
+            {'exception': True, 'retryable': {'throttling': True}},
         )
 
     def test_shape_list(self):
         shapes = {
             'mfaDeviceListType': {
-                "type":"list",
+                "type": "list",
                 "member": {"shape": "MFADevice"},
             },
             'MFADevice': {
                 'type': 'structure',
-                'members': {
-                    'UserName': {'shape': 'userNameType'}
-                }
+                'members': {'UserName': {'shape': 'userNameType'}},
             },
-            'userNameType': {
-                'type': 'string'
-            }
+            'userNameType': {'type': 'string'},
         }
         resolver = model.ShapeResolver(shapes)
         shape = resolver.get_shape_by_name('mfaDeviceListType')
@@ -1024,11 +1016,7 @@ class TestShapeResolver(unittest.TestCas
             resolver.get_shape_by_name('NoExistShape')
 
     def test_missing_type_key(self):
-        shapes = {
-            'UnknownType': {
-                'NotTheTypeKey': 'someUnknownType'
-            }
-        }
+        shapes = {'UnknownType': {'NotTheTypeKey': 'someUnknownType'}}
         resolver = model.ShapeResolver(shapes)
         with self.assertRaises(model.InvalidShapeError):
             resolver.get_shape_by_name('UnknownType')
@@ -1042,7 +1030,7 @@ class TestShapeResolver(unittest.TestCas
                 'members': {
                     'A': {'type': 'string'},
                     'B': {'type': 'string'},
-                }
+                },
             }
         }
         resolver = model.ShapeResolver(shapes)
@@ -1059,18 +1047,20 @@ class TestShapeResolver(unittest.TestCas
             }
         }
         resolver = model.ShapeResolver(shapes)
-        self.assertIn('StringType',
-                      repr(resolver.get_shape_by_name('StringType')))
+        self.assertIn(
+            'StringType', repr(resolver.get_shape_by_name('StringType'))
+        )
 
 
 class TestBuilders(unittest.TestCase):
-
     def test_structure_shape_builder_with_scalar_types(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {'type': 'string'},
-            'B': {'type': 'integer'},
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {'type': 'string'},
+                'B': {'type': 'integer'},
+            }
+        ).build_model()
         self.assertIsInstance(shape, model.StructureShape)
         self.assertEqual(sorted(list(shape.members)), ['A', 'B'])
         self.assertEqual(shape.members['A'].type_name, 'string')
@@ -1078,14 +1068,16 @@ class TestBuilders(unittest.TestCase):
 
     def test_structure_shape_with_structure_type(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'structure',
-                'members': {
-                    'A-1': {'type': 'string'},
-                }
-            },
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'structure',
+                    'members': {
+                        'A-1': {'type': 'string'},
+                    },
+                },
+            }
+        ).build_model()
         self.assertIsInstance(shape, model.StructureShape)
         self.assertEqual(list(shape.members), ['A'])
         self.assertEqual(shape.members['A'].type_name, 'structure')
@@ -1093,26 +1085,25 @@ class TestBuilders(unittest.TestCase):
 
     def test_structure_shape_with_list(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'list',
-                'member': {
-                    'type': 'string'
-                }
-            },
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {'type': 'list', 'member': {'type': 'string'}},
+            }
+        ).build_model()
         self.assertIsInstance(shape.members['A'], model.ListShape)
         self.assertEqual(shape.members['A'].member.type_name, 'string')
 
     def test_structure_shape_with_map_type(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'map',
-                'key': {'type': 'string'},
-                'value': {'type': 'string'},
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'map',
+                    'key': {'type': 'string'},
+                    'value': {'type': 'string'},
+                }
             }
-        }).build_model()
+        ).build_model()
         self.assertIsInstance(shape.members['A'], model.MapShape)
         map_shape = shape.members['A']
         self.assertEqual(map_shape.key.type_name, 'string')
@@ -1120,33 +1111,38 @@ class TestBuilders(unittest.TestCase):
 
     def test_nested_structure(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'structure',
-                'members': {
-                    'B': {
-                        'type': 'structure',
-                        'members': {
-                            'C': {
-                                'type': 'string',
-                            }
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'structure',
+                    'members': {
+                        'B': {
+                            'type': 'structure',
+                            'members': {
+                                'C': {
+                                    'type': 'string',
+                                }
+                            },
                         }
-                    }
+                    },
                 }
             }
-        }).build_model()
+        ).build_model()
         self.assertEqual(
-            shape.members['A'].members['B'].members['C'].type_name, 'string')
+            shape.members['A'].members['B'].members['C'].type_name, 'string'
+        )
 
     def test_enum_values_on_string_used(self):
         b = model.DenormalizedStructureBuilder()
         enum_values = ['foo', 'bar', 'baz']
-        shape = b.with_members({
-            'A': {
-                'type': 'string',
-                'enum': enum_values,
-            },
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'string',
+                    'enum': enum_values,
+                },
+            }
+        ).build_model()
         self.assertIsInstance(shape, model.StructureShape)
         string_shape = shape.members['A']
         self.assertIsInstance(string_shape, model.StringShape)
@@ -1155,70 +1151,76 @@ class TestBuilders(unittest.TestCase):
 
     def test_documentation_on_shape_used(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'string',
-                'documentation': 'MyDocs',
-            },
-        }).build_model()
-        self.assertEqual(shape.members['A'].documentation,
-                         'MyDocs')
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'string',
+                    'documentation': 'MyDocs',
+                },
+            }
+        ).build_model()
+        self.assertEqual(shape.members['A'].documentation, 'MyDocs')
 
     def test_min_max_used_in_metadata(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'string',
-                'documentation': 'MyDocs',
-                'min': 2,
-                'max': 3,
-            },
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'string',
+                    'documentation': 'MyDocs',
+                    'min': 2,
+                    'max': 3,
+                },
+            }
+        ).build_model()
         metadata = shape.members['A'].metadata
         self.assertEqual(metadata.get('min'), 2)
         self.assertEqual(metadata.get('max'), 3)
 
     def test_use_shape_name_when_provided(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members({
-            'A': {
-                'type': 'string',
-                'shape_name': 'MyStringShape',
-            },
-        }).build_model()
+        shape = b.with_members(
+            {
+                'A': {
+                    'type': 'string',
+                    'shape_name': 'MyStringShape',
+                },
+            }
+        ).build_model()
         self.assertEqual(shape.members['A'].name, 'MyStringShape')
 
     def test_unknown_shape_type(self):
         b = model.DenormalizedStructureBuilder()
         with self.assertRaises(model.InvalidShapeError):
-            b.with_members({
-                'A': {
-                    'type': 'brand-new-shape-type',
-                },
-            }).build_model()
+            b.with_members(
+                {
+                    'A': {
+                        'type': 'brand-new-shape-type',
+                    },
+                }
+            ).build_model()
 
     def test_ordered_shape_builder(self):
         b = model.DenormalizedStructureBuilder()
-        shape = b.with_members(OrderedDict(
-            [
-                ('A', {
-                    'type': 'string'
-                }),
-                ('B', {
-                    'type': 'structure',
-                    'members': OrderedDict(
-                        [
-                            ('C', {
-                                'type': 'string'
-                            }),
-                            ('D', {
-                                'type': 'string'
-                            })
-                        ]
-                    )
-                })
-            ]
-        )).build_model()
+        shape = b.with_members(
+            OrderedDict(
+                [
+                    ('A', {'type': 'string'}),
+                    (
+                        'B',
+                        {
+                            'type': 'structure',
+                            'members': OrderedDict(
+                                [
+                                    ('C', {'type': 'string'}),
+                                    ('D', {'type': 'string'}),
+                                ]
+                            ),
+                        },
+                    ),
+                ]
+            )
+        ).build_model()
 
         # Members should be in order
         self.assertEqual(['A', 'B'], list(shape.members.keys()))
diff -pruN 2.23.6-1/tests/unit/botocore/test_monitoring.py 2.31.35-1/tests/unit/botocore/test_monitoring.py
--- 2.23.6-1/tests/unit/botocore/test_monitoring.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_monitoring.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,6 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import mock, unittest
 import json
 import re
 import socket
@@ -19,15 +18,18 @@ import time
 from botocore.awsrequest import AWSRequest
 from botocore.exceptions import ConnectionError
 from botocore.hooks import HierarchicalEmitter
-from botocore.model import OperationModel
-from botocore.model import ServiceModel
-from botocore.monitoring import Monitor
-from botocore.monitoring import MonitorEventAdapter
-from botocore.monitoring import CSMSerializer
-from botocore.monitoring import SocketPublisher
-from botocore.monitoring import BaseMonitorEvent
-from botocore.monitoring import APICallEvent
-from botocore.monitoring import APICallAttemptEvent
+from botocore.model import OperationModel, ServiceModel
+from botocore.monitoring import (
+    APICallAttemptEvent,
+    APICallEvent,
+    BaseMonitorEvent,
+    CSMSerializer,
+    Monitor,
+    MonitorEventAdapter,
+    SocketPublisher,
+)
+
+from tests import mock, unittest
 
 
 class PublishingException(Exception):
@@ -51,7 +53,7 @@ class TestMonitor(unittest.TestCase):
                 mock.call('response-received', self.handler.capture),
                 mock.call('after-call', self.handler.capture),
                 mock.call('after-call-error', self.handler.capture),
-            ]
+            ],
         )
 
     def test_handle(self):
@@ -59,7 +61,8 @@ class TestMonitor(unittest.TestCase):
         self.adapter.feed.return_value = event
         self.handler.capture('event-name', event_parameter='event-value')
         self.adapter.feed.assert_called_with(
-            'event-name', {'event_parameter': 'event-value'})
+            'event-name', {'event_parameter': 'event-value'}
+        )
         self.publisher.publish.assert_called_with(event)
 
     def test_handle_no_publish(self):
@@ -72,8 +75,10 @@ class TestMonitor(unittest.TestCase):
         try:
             self.handler.capture('event-name', event_parameter='event-value')
         except PublishingException:
-            self.fail('The publishing exception should have been caught '
-                      'in the handler')
+            self.fail(
+                'The publishing exception should have been caught '
+                'in the handler'
+            )
 
 
 class TestMonitorEventAdapter(unittest.TestCase):
@@ -103,34 +108,40 @@ class TestMonitorEventAdapter(unittest.T
 
     def feed_before_parameter_build_event(self, current_time=0):
         self.mock_time.return_value = current_time
-        self.adapter.feed('before-parameter-build', {
-            'model': self.operation_model,
-            'context': self.context
-        })
+        self.adapter.feed(
+            'before-parameter-build',
+            {'model': self.operation_model, 'context': self.context},
+        )
 
     def feed_request_created_event(self, current_time=0):
         self.mock_time.return_value = current_time
-        self.adapter.feed('request-created', {
-            'request': self.request,
-        })
+        self.adapter.feed(
+            'request-created',
+            {
+                'request': self.request,
+            },
+        )
 
     def test_feed_before_parameter_build_returns_no_event(self):
         self.assertIsNone(
-            self.adapter.feed('before-parameter-build', {
-                'model': self.operation_model,
-                'context': self.context
-            })
+            self.adapter.feed(
+                'before-parameter-build',
+                {'model': self.operation_model, 'context': self.context},
+            )
         )
 
     def test_feed_request_created_returns_no_event(self):
-        self.adapter.feed('before-parameter-build', {
-            'model': self.operation_model,
-            'context': self.context
-        })
+        self.adapter.feed(
+            'before-parameter-build',
+            {'model': self.operation_model, 'context': self.context},
+        )
         self.assertIsNone(
-            self.adapter.feed('request-created', {
-                'request': self.request,
-            })
+            self.adapter.feed(
+                'request-created',
+                {
+                    'request': self.request,
+                },
+            )
         )
 
     def test_feed_with_successful_response(self):
@@ -138,16 +149,19 @@ class TestMonitorEventAdapter(unittest.T
         self.feed_request_created_event(current_time=2)
 
         self.mock_time.return_value = 3
-        attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': self.http_status_code,
-                    'HTTPHeaders': self.response_headers
-                }
-            },
-            'context': self.context,
-            'exception': None
-        })
+        attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': self.http_status_code,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.assertEqual(
             attempt_event,
             APICallAttemptEvent(
@@ -159,19 +173,22 @@ class TestMonitorEventAdapter(unittest.T
                 request_headers=self.request_headers,
                 http_status_code=self.http_status_code,
                 response_headers=self.response_headers,
-            )
+            ),
         )
 
         self.mock_time.return_value = 4
-        call_event = self.adapter.feed('after-call', {
-            'parsed': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': self.http_status_code,
-                    'HTTPHeaders': self.response_headers
-                }
+        call_event = self.adapter.feed(
+            'after-call',
+            {
+                'parsed': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': self.http_status_code,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
             },
-            'context': self.context
-        })
+        )
         self.assertEqual(
             call_event,
             APICallEvent(
@@ -179,8 +196,8 @@ class TestMonitorEventAdapter(unittest.T
                 operation=self.wire_name,
                 timestamp=1000,
                 latency=3000,
-                attempts=[attempt_event]
-            )
+                attempts=[attempt_event],
+            ),
         )
 
     def test_feed_with_retries(self):
@@ -188,16 +205,19 @@ class TestMonitorEventAdapter(unittest.T
         self.feed_request_created_event(current_time=2)
 
         self.mock_time.return_value = 3
-        first_attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 500,
-                    'HTTPHeaders': self.response_headers
-                }
-            },
-            'context': self.context,
-            'exception': None
-        })
+        first_attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 500,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.assertEqual(
             first_attempt_event,
             APICallAttemptEvent(
@@ -209,21 +229,24 @@ class TestMonitorEventAdapter(unittest.T
                 request_headers=self.request_headers,
                 http_status_code=500,
                 response_headers=self.response_headers,
-            )
+            ),
         )
 
         self.feed_request_created_event(current_time=5)
         self.mock_time.return_value = 6
-        second_attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 200,
-                    'HTTPHeaders': self.response_headers
-                }
-            },
-            'context': self.context,
-            'exception': None
-        })
+        second_attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 200,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.assertEqual(
             second_attempt_event,
             APICallAttemptEvent(
@@ -235,19 +258,22 @@ class TestMonitorEventAdapter(unittest.T
                 request_headers=self.request_headers,
                 http_status_code=200,
                 response_headers=self.response_headers,
-            )
+            ),
         )
 
         self.mock_time.return_value = 7
-        call_event = self.adapter.feed('after-call', {
-            'parsed': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 200,
-                    'HTTPHeaders': self.response_headers
-                }
+        call_event = self.adapter.feed(
+            'after-call',
+            {
+                'parsed': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 200,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
             },
-            'context': self.context
-        })
+        )
         self.assertEqual(
             call_event,
             APICallEvent(
@@ -255,8 +281,8 @@ class TestMonitorEventAdapter(unittest.T
                 operation=self.wire_name,
                 timestamp=1000,
                 latency=6000,
-                attempts=[first_attempt_event, second_attempt_event]
-            )
+                attempts=[first_attempt_event, second_attempt_event],
+            ),
         )
 
     def test_feed_with_retries_exceeded(self):
@@ -264,40 +290,49 @@ class TestMonitorEventAdapter(unittest.T
         self.feed_request_created_event(current_time=2)
 
         self.mock_time.return_value = 3
-        first_attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 500,
-                    'HTTPHeaders': self.response_headers
-                }
-            },
-            'context': self.context,
-            'exception': None
-        })
+        first_attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 500,
+                        'HTTPHeaders': self.response_headers,
+                    }
+                },
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.feed_request_created_event(current_time=5)
         self.mock_time.return_value = 6
-        second_attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 200,
-                    'HTTPHeaders': self.response_headers,
-                    'MaxAttemptsReached': True
-                }
-            },
-            'context': self.context,
-            'exception': None
-        })
+        second_attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 200,
+                        'HTTPHeaders': self.response_headers,
+                        'MaxAttemptsReached': True,
+                    }
+                },
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.mock_time.return_value = 7
-        call_event = self.adapter.feed('after-call', {
-            'parsed': {
-                'ResponseMetadata': {
-                    'HTTPStatusCode': 200,
-                    'HTTPHeaders': self.response_headers,
-                    'MaxAttemptsReached': True
-                }
+        call_event = self.adapter.feed(
+            'after-call',
+            {
+                'parsed': {
+                    'ResponseMetadata': {
+                        'HTTPStatusCode': 200,
+                        'HTTPHeaders': self.response_headers,
+                        'MaxAttemptsReached': True,
+                    }
+                },
+                'context': self.context,
             },
-            'context': self.context
-        })
+        )
         self.assertEqual(
             call_event,
             APICallEvent(
@@ -306,8 +341,8 @@ class TestMonitorEventAdapter(unittest.T
                 timestamp=1000,
                 latency=6000,
                 attempts=[first_attempt_event, second_attempt_event],
-                retries_exceeded=True
-            )
+                retries_exceeded=True,
+            ),
         )
 
     def test_feed_with_parsed_error(self):
@@ -320,14 +355,17 @@ class TestMonitorEventAdapter(unittest.T
             'Error': parsed_error,
             'ResponseMetadata': {
                 'HTTPStatusCode': 400,
-                'HTTPHeaders': self.response_headers
-            }
+                'HTTPHeaders': self.response_headers,
+            },
         }
-        attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': parsed_response,
-            'context': self.context,
-            'exception': None
-        })
+        attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': parsed_response,
+                'context': self.context,
+                'exception': None,
+            },
+        )
         self.assertEqual(
             attempt_event,
             APICallAttemptEvent(
@@ -339,15 +377,14 @@ class TestMonitorEventAdapter(unittest.T
                 request_headers=self.request_headers,
                 http_status_code=400,
                 response_headers=self.response_headers,
-                parsed_error=parsed_error
-            )
+                parsed_error=parsed_error,
+            ),
         )
 
         self.mock_time.return_value = 4
-        call_event = self.adapter.feed('after-call', {
-            'parsed': parsed_response,
-            'context': self.context
-        })
+        call_event = self.adapter.feed(
+            'after-call', {'parsed': parsed_response, 'context': self.context}
+        )
         self.assertEqual(
             call_event,
             APICallEvent(
@@ -355,8 +392,8 @@ class TestMonitorEventAdapter(unittest.T
                 operation=self.wire_name,
                 timestamp=1000,
                 latency=3000,
-                attempts=[attempt_event]
-            )
+                attempts=[attempt_event],
+            ),
         )
 
     def test_feed_with_wire_exception(self):
@@ -365,11 +402,14 @@ class TestMonitorEventAdapter(unittest.T
 
         self.mock_time.return_value = 3
         wire_exception = Exception('Some wire exception')
-        attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': None,
-            'context': self.context,
-            'exception': wire_exception
-        })
+        attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': None,
+                'context': self.context,
+                'exception': wire_exception,
+            },
+        )
         self.assertEqual(
             attempt_event,
             APICallAttemptEvent(
@@ -380,15 +420,13 @@ class TestMonitorEventAdapter(unittest.T
                 url=self.url,
                 request_headers=self.request_headers,
                 wire_exception=wire_exception,
-            )
+            ),
         )
 
         self.mock_time.return_value = 4
         call_event = self.adapter.feed(
-            'after-call-error', {
-                'exception': wire_exception,
-                'context': self.context
-            }
+            'after-call-error',
+            {'exception': wire_exception, 'context': self.context},
         )
         self.assertEqual(
             call_event,
@@ -397,8 +435,8 @@ class TestMonitorEventAdapter(unittest.T
                 operation=self.wire_name,
                 timestamp=1000,
                 latency=3000,
-                attempts=[attempt_event]
-            )
+                attempts=[attempt_event],
+            ),
         )
 
     def test_feed_with_wire_exception_retries_exceeded(self):
@@ -408,17 +446,18 @@ class TestMonitorEventAdapter(unittest.T
         self.mock_time.return_value = 3
         # Connection errors are retryable
         wire_exception = ConnectionError(error='connection issue')
-        attempt_event = self.adapter.feed('response-received', {
-            'parsed_response': None,
-            'context': self.context,
-            'exception': wire_exception
-        })
+        attempt_event = self.adapter.feed(
+            'response-received',
+            {
+                'parsed_response': None,
+                'context': self.context,
+                'exception': wire_exception,
+            },
+        )
         self.mock_time.return_value = 4
         call_event = self.adapter.feed(
-            'after-call-error', {
-                'exception': wire_exception,
-                'context': self.context
-            }
+            'after-call-error',
+            {'exception': wire_exception, 'context': self.context},
         )
         self.assertEqual(
             call_event,
@@ -428,8 +467,8 @@ class TestMonitorEventAdapter(unittest.T
                 timestamp=1000,
                 latency=3000,
                 attempts=[attempt_event],
-                retries_exceeded=True
-            )
+                retries_exceeded=True,
+            ),
         )
 
 
@@ -449,14 +488,15 @@ class TestBaseMonitorEvent(unittest.Test
             ),
             BaseMonitorEvent(
                 service='MyService', operation='MyOperation', timestamp=1000
-            )
+            ),
         )
 
     def test_not_eq_different_classes(self):
         self.assertNotEqual(
             BaseMonitorEvent(
                 service='MyService', operation='MyOperation', timestamp=1000
-            ), object()
+            ),
+            object(),
         )
 
     def test_not_eq_different_attrs(self):
@@ -465,17 +505,21 @@ class TestBaseMonitorEvent(unittest.Test
                 service='MyService', operation='MyOperation', timestamp=1000
             ),
             BaseMonitorEvent(
-                service='DifferentService', operation='DifferentOperation',
-                timestamp=0
-            )
+                service='DifferentService',
+                operation='DifferentOperation',
+                timestamp=0,
+            ),
         )
 
 
 class TestAPICallEvent(unittest.TestCase):
     def test_init(self):
         event = APICallEvent(
-            service='MyService', operation='MyOperation', timestamp=1000,
-            latency=2000, attempts=[]
+            service='MyService',
+            operation='MyOperation',
+            timestamp=1000,
+            latency=2000,
+            attempts=[],
         )
         self.assertEqual(event.service, 'MyService')
         self.assertEqual(event.operation, 'MyOperation')
@@ -485,15 +529,18 @@ class TestAPICallEvent(unittest.TestCase
 
     def test_new_api_call_attempt_event(self):
         event = APICallEvent(
-            service='MyService', operation='MyOperation', timestamp=1000,
-            latency=2000, attempts=[]
+            service='MyService',
+            operation='MyOperation',
+            timestamp=1000,
+            latency=2000,
+            attempts=[],
         )
         attempt_event = event.new_api_call_attempt(timestamp=2000)
         self.assertEqual(
             attempt_event,
             APICallAttemptEvent(
                 service='MyService', operation='MyOperation', timestamp=2000
-            )
+            ),
         )
         self.assertEqual(event.attempts, [attempt_event])
 
@@ -504,10 +551,16 @@ class TestAPICallAttemptEvent(unittest.T
         parsed_error = {'Code': 'ErrorCode', 'Message': 'ErrorMessage'}
         wire_exception = Exception('Some wire exception')
         event = APICallAttemptEvent(
-            service='MyService', operation='MyOperation', timestamp=1000,
-            latency=2000, url=url, http_status_code=200, request_headers={},
-            response_headers={}, parsed_error=parsed_error,
-            wire_exception=wire_exception
+            service='MyService',
+            operation='MyOperation',
+            timestamp=1000,
+            latency=2000,
+            url=url,
+            http_status_code=200,
+            request_headers={},
+            response_headers={},
+            parsed_error=parsed_error,
+            wire_exception=wire_exception,
         )
         self.assertEqual(event.service, 'MyService')
         self.assertEqual(event.operation, 'MyOperation')
@@ -532,9 +585,7 @@ class TestCSMSerializer(unittest.TestCas
         self.url = 'https://' + self.fqdn
         self.timestamp = 1000
         self.latency = 2000
-        self.request_headers = {
-            'User-Agent': self.user_agent
-        }
+        self.request_headers = {'User-Agent': self.user_agent}
 
     def get_serialized_event_dict(self, event):
         serialized_event = self.serializer.serialize(event)
@@ -547,22 +598,26 @@ class TestCSMSerializer(unittest.TestCas
 
     def test_serialize_produces_bytes(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         serialized_event = self.serializer.serialize(event)
         self.assertIsInstance(serialized_event, bytes)
 
     def test_serialize_does_not_add_whitespace(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         serialized_event = self.serializer.serialize(event)
         self.assertIsNone(re.match(r'\s', serialized_event.decode('utf-8')))
 
     def test_serialize_api_call_event(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict, {
+            serialized_event_dict,
+            {
                 'Version': 1,
                 'Type': 'ApiCall',
                 'Service': self.service,
@@ -571,33 +626,37 @@ class TestCSMSerializer(unittest.TestCas
                 'MaxRetriesExceeded': 0,
                 'Timestamp': 1000,
                 'AttemptCount': 0,
-            }
+            },
         )
 
     def test_serialize_api_call_event_with_latency(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation,
-            timestamp=1000, latency=2000)
+            service=self.service,
+            operation=self.operation,
+            timestamp=1000,
+            latency=2000,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['Latency'], self.latency)
 
     def test_serialize_api_call_event_with_attempts(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         event.new_api_call_attempt(2000)
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['AttemptCount'], 1)
 
     def test_serialize_api_call_event_region(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         attempt = event.new_api_call_attempt(2000)
         auth_value = (
             'AWS4-HMAC-SHA256 '
             'Credential=myaccesskey/20180523/my-region-1/ec2/aws4_request,'
             'SignedHeaders=content-type;host;x-amz-date, '
             'Signature=somesignature'
-
         )
         self.request_headers['Authorization'] = auth_value
         attempt.request_headers = self.request_headers
@@ -606,7 +665,8 @@ class TestCSMSerializer(unittest.TestCas
 
     def test_serialize_api_call_event_user_agent(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         attempt = event.new_api_call_attempt(2000)
         attempt.request_headers = {'User-Agent': self.user_agent}
         serialized_event_dict = self.get_serialized_event_dict(event)
@@ -614,7 +674,8 @@ class TestCSMSerializer(unittest.TestCas
 
     def test_serialize_api_call_event_http_status_code(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         attempt = event.new_api_call_attempt(2000)
         attempt.http_status_code = 200
         serialized_event_dict = self.get_serialized_event_dict(event)
@@ -622,76 +683,93 @@ class TestCSMSerializer(unittest.TestCas
 
     def test_serialize_api_call_event_parsed_error(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         attempt = event.new_api_call_attempt(2000)
         attempt.parsed_error = {
             'Code': 'MyErrorCode',
-            'Message': 'My error message'
+            'Message': 'My error message',
         }
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict['FinalAwsException'], 'MyErrorCode')
+            serialized_event_dict['FinalAwsException'], 'MyErrorCode'
+        )
         self.assertEqual(
             serialized_event_dict['FinalAwsExceptionMessage'],
-            'My error message'
+            'My error message',
         )
 
     def test_serialize_api_call_event_wire_exception(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000)
+            service=self.service, operation=self.operation, timestamp=1000
+        )
         attempt = event.new_api_call_attempt(2000)
         attempt.wire_exception = Exception('Error on the wire')
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict['FinalSdkException'], 'Exception')
+            serialized_event_dict['FinalSdkException'], 'Exception'
+        )
         self.assertEqual(
             serialized_event_dict['FinalSdkExceptionMessage'],
-            'Error on the wire'
+            'Error on the wire',
         )
 
     def test_serialize_api_call_event_with_retries_exceeded(self):
         event = APICallEvent(
-            service=self.service, operation=self.operation, timestamp=1000,
-            retries_exceeded=True)
+            service=self.service,
+            operation=self.operation,
+            timestamp=1000,
+            retries_exceeded=True,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['MaxRetriesExceeded'], 1)
 
     def test_serialize_api_call_attempt_event(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict, {
+            serialized_event_dict,
+            {
                 'Version': 1,
                 'Type': 'ApiCallAttempt',
                 'Service': self.service,
                 'Api': self.operation,
                 'ClientId': self.csm_client_id,
                 'Timestamp': self.timestamp,
-            }
+            },
         )
 
     def test_serialize_api_call_attempt_event_with_latency(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, latency=self.latency)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            latency=self.latency,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['AttemptLatency'], self.latency)
 
     def test_serialize_with_user_agent(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
+            service=self.service,
+            operation=self.operation,
             timestamp=self.timestamp,
-            request_headers={'User-Agent': self.user_agent}
+            request_headers={'User-Agent': self.user_agent},
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['UserAgent'], self.user_agent)
 
     def test_serialize_with_url(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, url=self.url)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            url=self.url,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['Fqdn'], self.fqdn)
 
@@ -699,8 +777,11 @@ class TestCSMSerializer(unittest.TestCas
         auth_value = 'AWS myaccesskey:somesignature'
         self.request_headers['Authorization'] = auth_value
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, request_headers=self.request_headers)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            request_headers=self.request_headers,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['AccessKey'], 'myaccesskey')
 
@@ -710,29 +791,38 @@ class TestCSMSerializer(unittest.TestCas
             'Credential=myaccesskey/20180523/my-region-1/ec2/aws4_request,'
             'SignedHeaders=content-type;host;x-amz-date, '
             'Signature=somesignature'
-
         )
         self.request_headers['Authorization'] = auth_value
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, request_headers=self.request_headers)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            request_headers=self.request_headers,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['AccessKey'], 'myaccesskey')
 
     def test_serialize_with_session_token(self):
         self.request_headers['X-Amz-Security-Token'] = 'my-security-token'
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, request_headers=self.request_headers)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            request_headers=self.request_headers,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict['SessionToken'], 'my-security-token')
+            serialized_event_dict['SessionToken'], 'my-security-token'
+        )
 
     def test_serialize_with_path_parameters_in_url(self):
         self.url = 'https://' + self.fqdn + '/resource'
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, url=self.url)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            url=self.url,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['Fqdn'], self.fqdn)
 
@@ -743,8 +833,11 @@ class TestCSMSerializer(unittest.TestCas
             'x-amz-id-2': 'id3',
         }
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, response_headers=response_headers)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            response_headers=response_headers,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['XAmznRequestId'], 'id1')
         self.assertEqual(serialized_event_dict['XAmzRequestId'], 'id2')
@@ -753,63 +846,76 @@ class TestCSMSerializer(unittest.TestCas
     def test_serialize_filters_unwanted_response_headers(self):
         response_headers = {'filter-out': 'do-not-include-this'}
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, response_headers=response_headers)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            response_headers=response_headers,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
-            serialized_event_dict, {
+            serialized_event_dict,
+            {
                 'Version': 1,
                 'Type': 'ApiCallAttempt',
                 'Service': self.service,
                 'Api': self.operation,
                 'ClientId': self.csm_client_id,
                 'Timestamp': self.timestamp,
-            }
+            },
         )
 
     def test_serialize_with_status_code(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, http_status_code=200)
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            http_status_code=200,
+        )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['HttpStatusCode'], 200)
 
     def test_serialize_with_service_error(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, parsed_error={
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            parsed_error={
                 'Code': 'MyErrorCode',
-                'Message': 'My error message'
-            }
+                'Message': 'My error message',
+            },
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['AwsException'], 'MyErrorCode')
         self.assertEqual(
-            serialized_event_dict['AwsExceptionMessage'], 'My error message')
+            serialized_event_dict['AwsExceptionMessage'], 'My error message'
+        )
 
     def test_serialize_with_wire_exception(self):
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
+            service=self.service,
+            operation=self.operation,
             timestamp=self.timestamp,
-            wire_exception=Exception('Error on the wire')
+            wire_exception=Exception('Error on the wire'),
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(serialized_event_dict['SdkException'], 'Exception')
         self.assertEqual(
-            serialized_event_dict['SdkExceptionMessage'], 'Error on the wire')
+            serialized_event_dict['SdkExceptionMessage'], 'Error on the wire'
+        )
 
     def test_serialize_truncates_long_user_agent(self):
         max_user_agent_length = 256
         user_agent = 'a' * (max_user_agent_length + 1)
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
+            service=self.service,
+            operation=self.operation,
             timestamp=self.timestamp,
-            request_headers={'User-Agent': user_agent}
+            request_headers={'User-Agent': user_agent},
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
             serialized_event_dict['UserAgent'],
-            user_agent[:max_user_agent_length]
+            user_agent[:max_user_agent_length],
         )
 
     def test_serialize_truncates_long_service_error(self):
@@ -818,20 +924,22 @@ class TestCSMSerializer(unittest.TestCas
         long_error_code = 'c' * (max_error_code_length + 1)
         long_error_message = 'm' * (max_error_message_length + 1)
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
-            timestamp=self.timestamp, parsed_error={
+            service=self.service,
+            operation=self.operation,
+            timestamp=self.timestamp,
+            parsed_error={
                 'Code': long_error_code,
-                'Message': long_error_message
-            }
+                'Message': long_error_message,
+            },
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
         self.assertEqual(
             serialized_event_dict['AwsException'],
-            long_error_code[:max_error_code_length]
+            long_error_code[:max_error_code_length],
         )
         self.assertEqual(
             serialized_event_dict['AwsExceptionMessage'],
-            long_error_message[:max_error_message_length]
+            long_error_message[:max_error_message_length],
         )
 
     def test_serialize_truncates_long_wire_exception(self):
@@ -841,19 +949,20 @@ class TestCSMSerializer(unittest.TestCas
         wire_class = type(long_class_name, (Exception,), {})
         long_error_message = 'm' * (max_error_message_length + 1)
         event = APICallAttemptEvent(
-            service=self.service, operation=self.operation,
+            service=self.service,
+            operation=self.operation,
             timestamp=self.timestamp,
-            wire_exception=wire_class(long_error_message)
+            wire_exception=wire_class(long_error_message),
         )
         serialized_event_dict = self.get_serialized_event_dict(event)
 
         self.assertEqual(
             serialized_event_dict['SdkException'],
-            long_class_name[:max_class_name_length]
+            long_class_name[:max_class_name_length],
         )
         self.assertEqual(
             serialized_event_dict['SdkExceptionMessage'],
-            long_error_message[:max_error_message_length]
+            long_error_message[:max_error_message_length],
         )
 
 
@@ -864,7 +973,8 @@ class TestSocketPublisher(unittest.TestC
         self.port = 31000
         self.serializer = mock.Mock(CSMSerializer)
         self.publisher = SocketPublisher(
-            self.socket, self.host, self.port, self.serializer)
+            self.socket, self.host, self.port, self.serializer
+        )
 
     def test_publish(self):
         event = object()
@@ -872,7 +982,8 @@ class TestSocketPublisher(unittest.TestC
         self.publisher.publish(event)
         self.serializer.serialize.assert_called_with(event)
         self.socket.sendto.assert_called_with(
-            b'serialized event', (self.host, self.port))
+            b'serialized event', (self.host, self.port)
+        )
 
     def test_skips_publishing_over_max_size(self):
         event = mock.Mock(APICallAttemptEvent)
diff -pruN 2.23.6-1/tests/unit/botocore/test_paginate.py 2.31.35-1/tests/unit/botocore/test_paginate.py
--- 2.23.6-1/tests/unit/botocore/test_paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,16 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import mock, unittest
 from botocore import model
-from botocore.paginate import Paginator
-from botocore.paginate import PaginatorModel
-from botocore.paginate import TokenDecoder
-from botocore.paginate import TokenEncoder
 from botocore.exceptions import PaginationError
+from botocore.paginate import (
+    Paginator,
+    PaginatorModel,
+    TokenDecoder,
+    TokenEncoder,
+)
+
+from tests import mock, unittest
 
 
 def encode_token(token):
@@ -72,7 +75,7 @@ class TestPaginatorModel(unittest.TestCa
             'ListFoos': {
                 'output_token': 'NextToken',
                 'input_token': 'NextToken',
-                'result_key': 'Foo'
+                'result_key': 'Foo',
             }
         }
         self.paginator_model = PaginatorModel(self.paginator_config)
@@ -81,13 +84,16 @@ class TestPaginatorModel(unittest.TestCa
         paginator_config = self.paginator_model.get_paginator('ListFoos')
         self.assertEqual(
             paginator_config,
-            {'output_token': 'NextToken', 'input_token': 'NextToken',
-             'result_key': 'Foo'}
+            {
+                'output_token': 'NextToken',
+                'input_token': 'NextToken',
+                'result_key': 'Foo',
+            },
         )
 
     def test_get_paginator_no_exists(self):
         with self.assertRaises(ValueError):
-            paginator_config = self.paginator_model.get_paginator('ListBars')
+            self.paginator_model.get_paginator('ListBars')
 
 
 class TestPagination(unittest.TestCase):
@@ -99,12 +105,13 @@ class TestPagination(unittest.TestCase):
             'input_token': 'NextToken',
             'result_key': 'Foo',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_result_key_available(self):
         self.assertEqual(
-            [rk.expression for rk in self.paginator.result_keys],
-            ['Foo']
+            [rk.expression for rk in self.paginator.result_keys], ['Foo']
         )
 
     def test_no_next_token(self):
@@ -114,17 +121,24 @@ class TestPagination(unittest.TestCase):
         self.assertEqual(actual, [{'not_the_next_token': 'foobar'}])
 
     def test_next_token_in_response(self):
-        responses = [{'NextToken': 'token1'},
-                     {'NextToken': 'token2'},
-                     {'not_next_token': 'foo'}]
+        responses = [
+            {'NextToken': 'token1'},
+            {'NextToken': 'token2'},
+            {'not_next_token': 'foo'},
+        ]
         self.method.side_effect = responses
         actual = list(self.paginator.paginate())
         self.assertEqual(actual, responses)
         # The first call has no next token, the second and third call should
         # have 'token1' and 'token2' respectively.
-        self.assertEqual(self.method.call_args_list,
-                         [mock.call(), mock.call(NextToken='token1'),
-                          mock.call(NextToken='token2')])
+        self.assertEqual(
+            self.method.call_args_list,
+            [
+                mock.call(),
+                mock.call(NextToken='token1'),
+                mock.call(NextToken='token2'),
+            ],
+        )
 
     def test_next_token_is_string(self):
         self.paginate_config = {
@@ -133,11 +147,13 @@ class TestPagination(unittest.TestCase):
             "result_key": "Users",
             "limit_key": "MaxKeys",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
             {"Users": ["User1"], "Marker": "m1"},
             {"Users": ["User2"], "Marker": "m2"},
-            {"Users": ["User3"]}
+            {"Users": ["User3"]},
         ]
         self.method.side_effect = responses
         result = self.paginator.paginate(PaginationConfig={'MaxItems': 1})
@@ -146,22 +162,29 @@ class TestPagination(unittest.TestCase):
         self.assertIsInstance(token, str)
 
     def test_any_passed_in_args_are_unmodified(self):
-        responses = [{'NextToken': 'token1'},
-                     {'NextToken': 'token2'},
-                     {'not_next_token': 'foo'}]
+        responses = [
+            {'NextToken': 'token1'},
+            {'NextToken': 'token2'},
+            {'not_next_token': 'foo'},
+        ]
         self.method.side_effect = responses
         actual = list(self.paginator.paginate(Foo='foo', Bar='bar'))
         self.assertEqual(actual, responses)
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(Foo='foo', Bar='bar'),
-             mock.call(Foo='foo', Bar='bar', NextToken='token1'),
-             mock.call(Foo='foo', Bar='bar', NextToken='token2')])
+            [
+                mock.call(Foo='foo', Bar='bar'),
+                mock.call(Foo='foo', Bar='bar', NextToken='token1'),
+                mock.call(Foo='foo', Bar='bar', NextToken='token2'),
+            ],
+        )
 
     def test_exception_raised_if_same_next_token(self):
-        responses = [{'NextToken': 'token1'},
-                     {'NextToken': 'token2'},
-                     {'NextToken': 'token2'}]
+        responses = [
+            {'NextToken': 'token1'},
+            {'NextToken': 'token2'},
+            {'NextToken': 'token2'},
+        ]
         self.method.side_effect = responses
         with self.assertRaises(PaginationError):
             list(self.paginator.paginate())
@@ -172,7 +195,9 @@ class TestPagination(unittest.TestCase):
             'input_token': 'NextToken',
             'result_key': 'Foo',
         }
-        self.paginator = Paginator(self.method, self.pagination_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.pagination_config, self.model
+        )
         # Verify that despite varying between NextToken and NextToken2
         # we still can extract the right next tokens.
         responses = [
@@ -188,10 +213,13 @@ class TestPagination(unittest.TestCase):
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(NextToken='token1'),
-             mock.call(NextToken='token2'),
-             mock.call(NextToken='token3')])
+            [
+                mock.call(),
+                mock.call(NextToken='token1'),
+                mock.call(NextToken='token2'),
+                mock.call(NextToken='token3'),
+            ],
+        )
 
     def test_more_tokens(self):
         # Some pagination configs have a 'more_token' key that
@@ -202,7 +230,9 @@ class TestPagination(unittest.TestCase):
             'input_token': 'NextToken',
             'result_key': 'Foo',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
             {'Foo': [1], 'IsTruncated': True, 'NextToken': 'token1'},
             {'Foo': [2], 'IsTruncated': True, 'NextToken': 'token2'},
@@ -213,9 +243,12 @@ class TestPagination(unittest.TestCase):
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(NextToken='token1'),
-             mock.call(NextToken='token2')])
+            [
+                mock.call(),
+                mock.call(NextToken='token1'),
+                mock.call(NextToken='token2'),
+            ],
+        )
 
     def test_more_tokens_is_path_expression(self):
         self.paginate_config = {
@@ -224,7 +257,9 @@ class TestPagination(unittest.TestCase):
             'input_token': 'NextToken',
             'result_key': 'Bar',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
             {'Foo': {'IsTruncated': True}, 'NextToken': 'token1'},
             {'Foo': {'IsTruncated': False}, 'NextToken': 'token2'},
@@ -233,8 +268,8 @@ class TestPagination(unittest.TestCase):
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(NextToken='token1')])
+            [mock.call(), mock.call(NextToken='token1')],
+        )
 
     def test_page_size(self):
         self.paginate_config = {
@@ -243,7 +278,9 @@ class TestPagination(unittest.TestCase):
             "result_key": "Users",
             "limit_key": "MaxKeys",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
             {"Users": ["User1"], "Marker": "m1"},
             {"Users": ["User2"], "Marker": "m2"},
@@ -255,26 +292,25 @@ class TestPagination(unittest.TestCase):
             users += page['Users']
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(MaxKeys=1),
-             mock.call(Marker='m1', MaxKeys=1),
-             mock.call(Marker='m2', MaxKeys=1)]
+            [
+                mock.call(MaxKeys=1),
+                mock.call(Marker='m1', MaxKeys=1),
+                mock.call(Marker='m2', MaxKeys=1),
+            ],
         )
 
     def test_with_empty_markers(self):
         responses = [
             {"Users": ["User1"], "Marker": ""},
             {"Users": ["User1"], "Marker": ""},
-            {"Users": ["User1"], "Marker": ""}
+            {"Users": ["User1"], "Marker": ""},
         ]
         self.method.side_effect = responses
         users = []
         for page in self.paginator.paginate():
             users += page['Users']
         # We want to stop paginating if the next token is empty.
-        self.assertEqual(
-            self.method.call_args_list,
-            [mock.call()]
-        )
+        self.assertEqual(self.method.call_args_list, [mock.call()])
         self.assertEqual(users, ['User1'])
 
     def test_build_full_result_with_single_key(self):
@@ -284,11 +320,13 @@ class TestPagination(unittest.TestCase):
             "result_key": "Users",
             "limit_key": "MaxKeys",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
             {"Users": ["User1"], "Marker": "m1"},
             {"Users": ["User2"], "Marker": "m2"},
-            {"Users": ["User3"]}
+            {"Users": ["User3"]},
         ]
         self.method.side_effect = responses
         pages = self.paginator.paginate()
@@ -302,7 +340,9 @@ class TestPagination(unittest.TestCase):
             "result_key": "Users",
             "limit_key": "MaxKeys",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
         max_items = 3
         page_size = 2
@@ -316,10 +356,7 @@ class TestPagination(unittest.TestCase):
         self.method.side_effect = responses
 
         pages = self.paginator.paginate(
-            PaginationConfig={
-                'PageSize': page_size,
-                'MaxItems': max_items
-            }
+            PaginationConfig={'PageSize': page_size, 'MaxItems': max_items}
         )
         result = pages.build_full_result()
 
@@ -327,15 +364,17 @@ class TestPagination(unittest.TestCase):
             PaginationConfig={
                 'MaxItems': max_items,
                 'PageSize': page_size,
-                'StartingToken': result['NextToken']
+                'StartingToken': result['NextToken'],
             }
         )
         result = pages.build_full_result()
 
-        expected_token = encode_token({
-            'Marker': 'm2',
-            'boto_truncate_amount': 2,
-        })
+        expected_token = encode_token(
+            {
+                'Marker': 'm2',
+                'boto_truncate_amount': 2,
+            }
+        )
         self.assertEqual(expected_token, result['NextToken'])
 
 
@@ -349,7 +388,9 @@ class TestPaginatorPageSize(unittest.Tes
             "result_key": ["Users", "Groups"],
             'limit_key': 'MaxKeys',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         self.endpoint = mock.Mock()
 
     def test_no_page_size(self):
@@ -360,8 +401,11 @@ class TestPaginatorPageSize(unittest.Tes
         self.assertEqual(kwargs, ref_kwargs)
 
     def test_page_size(self):
-        kwargs = {'arg1': 'foo', 'arg2': 'bar',
-                  'PaginationConfig': {'PageSize': 5}}
+        kwargs = {
+            'arg1': 'foo',
+            'arg2': 'bar',
+            'PaginationConfig': {'PageSize': 5},
+        }
         extracted_kwargs = {'arg1': 'foo', 'arg2': 'bar'}
         # Note that ``MaxKeys`` in ``setUp()`` is the parameter used for
         # the page size for pagination.
@@ -371,8 +415,11 @@ class TestPaginatorPageSize(unittest.Tes
         self.assertEqual(extracted_kwargs, ref_kwargs)
 
     def test_page_size_incorrectly_provided(self):
-        kwargs = {'arg1': 'foo', 'arg2': 'bar',
-                  'PaginationConfig': {'PageSize': 5}}
+        kwargs = {
+            'arg1': 'foo',
+            'arg2': 'bar',
+            'PaginationConfig': {'PageSize': 5},
+        }
         del self.paginate_config['limit_key']
         paginator = Paginator(self.method, self.paginate_config, self.model)
 
@@ -387,38 +434,52 @@ class TestPaginatorWithPathExpressions(u
         # This is something we'd see in s3 pagination.
         self.paginate_config = {
             'output_token': [
-                'NextMarker || ListBucketResult.Contents[-1].Key'],
+                'NextMarker || ListBucketResult.Contents[-1].Key'
+            ],
             'input_token': 'next_marker',
             'result_key': 'Contents',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_s3_list_objects(self):
         responses = [
             {'NextMarker': 'token1'},
             {'NextMarker': 'token2'},
-            {'not_next_token': 'foo'}]
+            {'not_next_token': 'foo'},
+        ]
         self.method.side_effect = responses
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(next_marker='token1'),
-             mock.call(next_marker='token2')])
+            [
+                mock.call(),
+                mock.call(next_marker='token1'),
+                mock.call(next_marker='token2'),
+            ],
+        )
 
     def test_s3_list_object_complex(self):
         responses = [
             {'NextMarker': 'token1'},
-            {'ListBucketResult': {
-                'Contents': [{"Key": "first"}, {"Key": "Last"}]}},
-            {'not_next_token': 'foo'}]
+            {
+                'ListBucketResult': {
+                    'Contents': [{"Key": "first"}, {"Key": "Last"}]
+                }
+            },
+            {'not_next_token': 'foo'},
+        ]
         self.method.side_effect = responses
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(next_marker='token1'),
-             mock.call(next_marker='Last')])
+            [
+                mock.call(),
+                mock.call(next_marker='token1'),
+                mock.call(next_marker='Last'),
+            ],
+        )
 
 
 class TestBinaryTokens(unittest.TestCase):
@@ -428,25 +489,30 @@ class TestBinaryTokens(unittest.TestCase
         self.paginate_config = {
             "output_token": "Marker",
             "input_token": "Marker",
-            "result_key": "Users"
+            "result_key": "Users",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_build_full_result_with_bytes(self):
         responses = [
             {"Users": ["User1", "User2"], "Marker": b'\xff'},
             {"Users": ["User3", "User4"], "Marker": b'\xfe'},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
         pages = self.paginator.paginate(PaginationConfig={'MaxItems': 3})
         complete = pages.build_full_result()
-        expected_token = encode_token({
-            "Marker": b'\xff', "boto_truncate_amount": 1,
-        })
+        expected_token = encode_token(
+            {
+                "Marker": b'\xff',
+                "boto_truncate_amount": 1,
+            }
+        )
         expected_response = {
             "Users": ["User1", "User2", "User3"],
-            "NextToken": expected_token
+            "NextToken": expected_token,
         }
         self.assertEqual(complete, expected_response)
 
@@ -454,17 +520,20 @@ class TestBinaryTokens(unittest.TestCase
         responses = [
             {"Users": ["User1", "User2"], "Marker": {'key': b'\xff'}},
             {"Users": ["User3", "User4"], "Marker": {'key': b'\xfe'}},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
         pages = self.paginator.paginate(PaginationConfig={'MaxItems': 3})
         complete = pages.build_full_result()
-        expected_token = encode_token({
-            "Marker": {'key': b'\xff'}, "boto_truncate_amount": 1,
-        })
+        expected_token = encode_token(
+            {
+                "Marker": {'key': b'\xff'},
+                "boto_truncate_amount": 1,
+            }
+        )
         expected_response = {
             "Users": ["User1", "User2", "User3"],
-            "NextToken": expected_token
+            "NextToken": expected_token,
         }
         self.assertEqual(complete, expected_response)
 
@@ -472,17 +541,20 @@ class TestBinaryTokens(unittest.TestCase
         responses = [
             {"Users": ["User1", "User2"], "Marker": {'key': ['foo', b'\xff']}},
             {"Users": ["User3", "User4"], "Marker": {'key': ['foo', b'\xfe']}},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
         pages = self.paginator.paginate(PaginationConfig={'MaxItems': 3})
         complete = pages.build_full_result()
-        expected_token = encode_token({
-            "Marker": {'key': ['foo', b'\xff']}, "boto_truncate_amount": 1,
-        })
+        expected_token = encode_token(
+            {
+                "Marker": {'key': ['foo', b'\xff']},
+                "boto_truncate_amount": 1,
+            }
+        )
         expected_response = {
             "Users": ["User1", "User2", "User3"],
-            "NextToken": expected_token
+            "NextToken": expected_token,
         }
         self.assertEqual(complete, expected_response)
 
@@ -490,80 +562,86 @@ class TestBinaryTokens(unittest.TestCase
         responses = [
             {
                 "Users": ["User1", "User2"],
-                "Marker": {'key': b'\xff', 'key2': b'\xef'}
+                "Marker": {'key': b'\xff', 'key2': b'\xef'},
             },
             {
                 "Users": ["User3", "User4"],
-                "Marker": {'key': b'\xfe', 'key2': b'\xee'}
+                "Marker": {'key': b'\xfe', 'key2': b'\xee'},
             },
-            {
-                "Users": ["User5"]
-            }
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
         pages = self.paginator.paginate(PaginationConfig={'MaxItems': 3})
         complete = pages.build_full_result()
-        expected_token = encode_token({
-            "Marker": {'key': b'\xff', 'key2': b'\xef'},
-            "boto_truncate_amount": 1,
-        })
+        expected_token = encode_token(
+            {
+                "Marker": {'key': b'\xff', 'key2': b'\xef'},
+                "boto_truncate_amount": 1,
+            }
+        )
         expected_response = {
             "Users": ["User1", "User2", "User3"],
-            "NextToken": expected_token
+            "NextToken": expected_token,
         }
         self.assertEqual(complete, expected_response)
 
     def test_resume_with_bytes(self):
         responses = [
             {"Users": ["User3", "User4"], "Marker": b'\xfe'},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
-        starting_token = encode_token({
-            "Marker": b'\xff', "boto_truncate_amount": 1,
-        })
+        starting_token = encode_token(
+            {
+                "Marker": b'\xff',
+                "boto_truncate_amount": 1,
+            }
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'StartingToken': starting_token})
+            PaginationConfig={'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        expected_response = {
-            "Users": ["User4", "User5"]
-        }
+        expected_response = {"Users": ["User4", "User5"]}
         self.assertEqual(complete, expected_response)
         self.method.assert_any_call(Marker=b'\xff')
 
     def test_resume_with_nested_bytes(self):
         responses = [
             {"Users": ["User3", "User4"], "Marker": {'key': b'\xfe'}},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
-        starting_token = encode_token({
-            "Marker": {'key': b'\xff'}, "boto_truncate_amount": 1,
-        })
+        starting_token = encode_token(
+            {
+                "Marker": {'key': b'\xff'},
+                "boto_truncate_amount": 1,
+            }
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'StartingToken': starting_token})
+            PaginationConfig={'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        expected_response = {
-            "Users": ["User4", "User5"]
-        }
+        expected_response = {"Users": ["User4", "User5"]}
         self.assertEqual(complete, expected_response)
         self.method.assert_any_call(Marker={'key': b'\xff'})
 
     def test_resume_with_listed_bytes(self):
         responses = [
             {"Users": ["User3", "User4"], "Marker": {'key': ['bar', b'\xfe']}},
-            {"Users": ["User5"]}
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
-        starting_token = encode_token({
-            "Marker": {'key': ['foo', b'\xff']}, "boto_truncate_amount": 1,
-        })
+        starting_token = encode_token(
+            {
+                "Marker": {'key': ['foo', b'\xff']},
+                "boto_truncate_amount": 1,
+            }
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'StartingToken': starting_token})
+            PaginationConfig={'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        expected_response = {
-            "Users": ["User4", "User5"]
-        }
+        expected_response = {"Users": ["User4", "User5"]}
         self.assertEqual(complete, expected_response)
         self.method.assert_any_call(Marker={'key': ['foo', b'\xff']})
 
@@ -571,23 +649,22 @@ class TestBinaryTokens(unittest.TestCase
         responses = [
             {
                 "Users": ["User3", "User4"],
-                "Marker": {'key': b'\xfe', 'key2': b'\xee'}
+                "Marker": {'key': b'\xfe', 'key2': b'\xee'},
             },
-            {
-                "Users": ["User5"]
-            }
+            {"Users": ["User5"]},
         ]
         self.method.side_effect = responses
-        starting_token = encode_token({
-            "Marker": {'key': b'\xff', 'key2': b'\xef'},
-            "boto_truncate_amount": 1,
-        })
+        starting_token = encode_token(
+            {
+                "Marker": {'key': b'\xff', 'key2': b'\xef'},
+                "boto_truncate_amount": 1,
+            }
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'StartingToken': starting_token})
+            PaginationConfig={'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        expected_response = {
-            "Users": ["User4", "User5"]
-        }
+        expected_response = {"Users": ["User4", "User5"]}
         self.assertEqual(complete, expected_response)
         self.method.assert_any_call(Marker={'key': b'\xfe', 'key2': b'\xee'})
 
@@ -598,32 +675,53 @@ class TestMultipleTokens(unittest.TestCa
         self.model = mock.Mock()
         # This is something we'd see in s3 pagination.
         self.paginate_config = {
-            "output_token": ["ListBucketResults.NextKeyMarker",
-                             "ListBucketResults.NextUploadIdMarker"],
+            "output_token": [
+                "ListBucketResults.NextKeyMarker",
+                "ListBucketResults.NextUploadIdMarker",
+            ],
             "input_token": ["key_marker", "upload_id_marker"],
             "result_key": 'Foo',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_s3_list_multipart_uploads(self):
         responses = [
-            {"Foo": [1], "ListBucketResults": {"NextKeyMarker": "key1",
-                                               "NextUploadIdMarker": "up1"}},
-            {"Foo": [2], "ListBucketResults": {"NextKeyMarker": "key2",
-                                               "NextUploadIdMarker": "up2"}},
-            {"Foo": [3], "ListBucketResults": {"NextKeyMarker": "key3",
-                                               "NextUploadIdMarker": "up3"}},
-            {}
+            {
+                "Foo": [1],
+                "ListBucketResults": {
+                    "NextKeyMarker": "key1",
+                    "NextUploadIdMarker": "up1",
+                },
+            },
+            {
+                "Foo": [2],
+                "ListBucketResults": {
+                    "NextKeyMarker": "key2",
+                    "NextUploadIdMarker": "up2",
+                },
+            },
+            {
+                "Foo": [3],
+                "ListBucketResults": {
+                    "NextKeyMarker": "key3",
+                    "NextUploadIdMarker": "up3",
+                },
+            },
+            {},
         ]
         self.method.side_effect = responses
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(key_marker='key1', upload_id_marker='up1'),
-             mock.call(key_marker='key2', upload_id_marker='up2'),
-             mock.call(key_marker='key3', upload_id_marker='up3'),
-             ])
+            [
+                mock.call(),
+                mock.call(key_marker='key1', upload_id_marker='up1'),
+                mock.call(key_marker='key2', upload_id_marker='up2'),
+                mock.call(key_marker='key3', upload_id_marker='up3'),
+            ],
+        )
 
 
 class TestOptionalTokens(unittest.TestCase):
@@ -635,44 +733,61 @@ class TestOptionalTokens(unittest.TestCa
     request params from a previous page, the API will skip over a record.
 
     """
+
     def setUp(self):
         self.method = mock.Mock()
         self.model = mock.Mock()
         # This is based on Route53 pagination.
         self.paginate_config = {
-            "output_token": ["NextRecordName",
-                             "NextRecordType",
-                             "NextRecordIdentifier"],
-            "input_token": ["StartRecordName",
-                            "StartRecordType",
-                            "StartRecordIdentifier"],
+            "output_token": [
+                "NextRecordName",
+                "NextRecordType",
+                "NextRecordIdentifier",
+            ],
+            "input_token": [
+                "StartRecordName",
+                "StartRecordType",
+                "StartRecordIdentifier",
+            ],
             "result_key": 'Foo',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_clean_token(self):
         responses = [
-            {"Foo": [1],
-             "IsTruncated": True,
-             "NextRecordName": "aaa.example.com",
-             "NextRecordType": "A",
-             "NextRecordIdentifier": "id"},
-            {"Foo": [2],
-             "IsTruncated": True,
-             "NextRecordName": "bbb.example.com",
-             "NextRecordType": "A"},
-            {"Foo": [3],
-             "IsTruncated": False},
+            {
+                "Foo": [1],
+                "IsTruncated": True,
+                "NextRecordName": "aaa.example.com",
+                "NextRecordType": "A",
+                "NextRecordIdentifier": "id",
+            },
+            {
+                "Foo": [2],
+                "IsTruncated": True,
+                "NextRecordName": "bbb.example.com",
+                "NextRecordType": "A",
+            },
+            {"Foo": [3], "IsTruncated": False},
         ]
         self.method.side_effect = responses
         list(self.paginator.paginate())
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(),
-             mock.call(StartRecordName='aaa.example.com', StartRecordType='A',
-                       StartRecordIdentifier='id'),
-             mock.call(StartRecordName='bbb.example.com', StartRecordType='A')
-             ])
+            [
+                mock.call(),
+                mock.call(
+                    StartRecordName='aaa.example.com',
+                    StartRecordType='A',
+                    StartRecordIdentifier='id',
+                ),
+                mock.call(
+                    StartRecordName='bbb.example.com', StartRecordType='A'
+                ),
+            ],
+        )
 
 
 class TestKeyIterators(unittest.TestCase):
@@ -683,9 +798,11 @@ class TestKeyIterators(unittest.TestCase
         self.paginate_config = {
             "output_token": "Marker",
             "input_token": "Marker",
-            "result_key": "Users"
+            "result_key": "Users",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_result_key_iters(self):
         responses = [
@@ -697,8 +814,7 @@ class TestKeyIterators(unittest.TestCase
         pages = self.paginator.paginate()
         iterators = pages.result_key_iters()
         self.assertEqual(len(iterators), 1)
-        self.assertEqual(list(iterators[0]),
-                         ["User1", "User2", "User3"])
+        self.assertEqual(list(iterators[0]), ["User1", "User2", "User3"])
 
     def test_build_full_result_with_single_key(self):
         responses = [
@@ -722,8 +838,10 @@ class TestKeyIterators(unittest.TestCase
         expected_token = encode_token({"Marker": "m1"})
         self.assertEqual(
             paginator.paginate(
-                PaginationConfig={'MaxItems': 1}).build_full_result(),
-            {'Users': ['User1'], 'NextToken': expected_token})
+                PaginationConfig={'MaxItems': 1}
+            ).build_full_result(),
+            {'Users': ['User1'], 'NextToken': expected_token},
+        )
 
     def test_max_items_as_strings(self):
         # Some services (route53) model MaxItems as a string type.
@@ -739,8 +857,10 @@ class TestKeyIterators(unittest.TestCase
         self.assertEqual(
             # Note MaxItems is a string here.
             paginator.paginate(
-                PaginationConfig={'MaxItems': '1'}).build_full_result(),
-            {'Users': ['User1'], 'NextToken': expected_token})
+                PaginationConfig={'MaxItems': '1'}
+            ).build_full_result(),
+            {'Users': ['User1'], 'NextToken': expected_token},
+        )
 
     def test_next_token_on_page_boundary(self):
         paginator = Paginator(self.method, self.paginate_config, self.model)
@@ -753,8 +873,10 @@ class TestKeyIterators(unittest.TestCase
         expected_token = encode_token({"Marker": "m2"})
         self.assertEqual(
             paginator.paginate(
-                PaginationConfig={'MaxItems': 2}).build_full_result(),
-            {'Users': ['User1', 'User2'], 'NextToken': expected_token})
+                PaginationConfig={'MaxItems': 2}
+            ).build_full_result(),
+            {'Users': ['User1', 'User2'], 'NextToken': expected_token},
+        )
 
     def test_max_items_can_be_specified_truncates_response(self):
         # We're saying we only want 4 items, but notice that the second
@@ -768,12 +890,17 @@ class TestKeyIterators(unittest.TestCase
         ]
         self.method.side_effect = responses
         expected_token = encode_token(
-            {"Marker": "m1", "boto_truncate_amount": 1})
+            {"Marker": "m1", "boto_truncate_amount": 1}
+        )
         self.assertEqual(
             paginator.paginate(
-                PaginationConfig={'MaxItems': 4}).build_full_result(),
-            {'Users': ['User1', 'User2', 'User3', 'User4'],
-             'NextToken': expected_token})
+                PaginationConfig={'MaxItems': 4}
+            ).build_full_result(),
+            {
+                'Users': ['User1', 'User2', 'User3', 'User4'],
+                'NextToken': expected_token,
+            },
+        )
 
     def test_resume_next_marker_mid_page(self):
         # This is a simulation of picking up from the response
@@ -787,16 +914,19 @@ class TestKeyIterators(unittest.TestCase
         ]
         self.method.side_effect = responses
         starting_token = encode_token(
-            {"Marker": "m1", "boto_truncate_amount": 1})
+            {"Marker": "m1", "boto_truncate_amount": 1}
+        )
         pagination_config = {'StartingToken': starting_token}
         self.assertEqual(
             paginator.paginate(
-                PaginationConfig=pagination_config).build_full_result(),
-            {'Users': ['User5', 'User6', 'User7']})
+                PaginationConfig=pagination_config
+            ).build_full_result(),
+            {'Users': ['User5', 'User6', 'User7']},
+        )
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(Marker='m1'),
-             mock.call(Marker='m2')])
+            [mock.call(Marker='m1'), mock.call(Marker='m2')],
+        )
 
     def test_max_items_exceeds_actual_amount(self):
         # Because MaxItems=10 > number of users (3), we should just return
@@ -810,8 +940,10 @@ class TestKeyIterators(unittest.TestCase
         self.method.side_effect = responses
         self.assertEqual(
             paginator.paginate(
-                PaginationConfig={'MaxItems': 10}).build_full_result(),
-            {'Users': ['User1', 'User2', 'User3']})
+                PaginationConfig={'MaxItems': 10}
+            ).build_full_result(),
+            {'Users': ['User1', 'User2', 'User3']},
+        )
 
     def test_bad_input_tokens(self):
         responses = [
@@ -823,7 +955,8 @@ class TestKeyIterators(unittest.TestCase
         with self.assertRaisesRegex(ValueError, 'Bad starting token'):
             pagination_config = {'StartingToken': 'does___not___work'}
             self.paginator.paginate(
-                PaginationConfig=pagination_config).build_full_result()
+                PaginationConfig=pagination_config
+            ).build_full_result()
 
 
 class TestMultipleResultKeys(unittest.TestCase):
@@ -836,7 +969,9 @@ class TestMultipleResultKeys(unittest.Te
             "input_token": "Marker",
             "result_key": ["Users", "Groups"],
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_build_full_result_with_multiple_result_keys(self):
         responses = [
@@ -847,9 +982,13 @@ class TestMultipleResultKeys(unittest.Te
         self.method.side_effect = responses
         pages = self.paginator.paginate()
         complete = pages.build_full_result()
-        self.assertEqual(complete,
-                         {"Users": ['User1', 'User2', 'User3'],
-                          "Groups": ['Group1', 'Group2', 'Group3']})
+        self.assertEqual(
+            complete,
+            {
+                "Users": ['User1', 'User2', 'User3'],
+                "Groups": ['Group1', 'Group2', 'Group3'],
+            },
+        )
 
     def test_build_full_result_with_different_length_result_keys(self):
         responses = [
@@ -861,9 +1000,10 @@ class TestMultipleResultKeys(unittest.Te
         self.method.side_effect = responses
         pages = self.paginator.paginate()
         complete = pages.build_full_result()
-        self.assertEqual(complete,
-                         {"Users": ['User1'],
-                          "Groups": ['Group1', 'Group2', 'Group3']})
+        self.assertEqual(
+            complete,
+            {"Users": ['User1'], "Groups": ['Group1', 'Group2', 'Group3']},
+        )
 
     def test_build_full_result_with_zero_length_result_key(self):
         responses = [
@@ -877,27 +1017,34 @@ class TestMultipleResultKeys(unittest.Te
         self.method.side_effect = responses
         pages = self.paginator.paginate()
         complete = pages.build_full_result()
-        self.assertEqual(complete,
-                         {"Users": [],
-                          "Groups": ['Group1', 'Group2', 'Group3']})
+        self.assertEqual(
+            complete, {"Users": [], "Groups": ['Group1', 'Group2', 'Group3']}
+        )
 
     def test_build_result_with_secondary_keys(self):
         responses = [
-            {"Users": ["User1", "User2"],
-             "Groups": ["Group1", "Group2"],
-             "Marker": "m1"},
+            {
+                "Users": ["User1", "User2"],
+                "Groups": ["Group1", "Group2"],
+                "Marker": "m1",
+            },
             {"Users": ["User3"], "Groups": ["Group3"], "Marker": "m2"},
             {"Users": ["User4"], "Groups": ["Group4"]},
         ]
         self.method.side_effect = responses
-        pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 1})
+        pages = self.paginator.paginate(PaginationConfig={'MaxItems': 1})
         complete = pages.build_full_result()
         expected_token = encode_token(
-            {"Marker": None, "boto_truncate_amount": 1})
-        self.assertEqual(complete,
-                         {"Users": ["User1"], "Groups": ["Group1", "Group2"],
-                          "NextToken": expected_token})
+            {"Marker": None, "boto_truncate_amount": 1}
+        )
+        self.assertEqual(
+            complete,
+            {
+                "Users": ["User1"],
+                "Groups": ["Group1", "Group2"],
+                "NextToken": expected_token,
+            },
+        )
 
     def test_resume_with_secondary_keys(self):
         # This is simulating a continutation of the previous test,
@@ -905,47 +1052,55 @@ class TestMultipleResultKeys(unittest.Te
         # token specified in the response "None___1" to continue where we
         # left off.
         responses = [
-            {"Users": ["User1", "User2"],
-             "Groups": ["Group1", "Group2"],
-             "Marker": "m1"},
+            {
+                "Users": ["User1", "User2"],
+                "Groups": ["Group1", "Group2"],
+                "Marker": "m1",
+            },
             {"Users": ["User3"], "Groups": ["Group3"], "Marker": "m2"},
             {"Users": ["User4"], "Groups": ["Group4"]},
         ]
         self.method.side_effect = responses
         starting_token = encode_token(
-            {"Marker": None, "boto_truncate_amount": 1})
+            {"Marker": None, "boto_truncate_amount": 1}
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 1,
-                              'StartingToken': starting_token})
+            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
         # Note that the secondary keys ("Groups") are all truncated because
         # they were in the original (first) response.
         expected_token = encode_token({"Marker": "m1"})
-        self.assertEqual(complete,
-                         {"Users": ["User2"], "Groups": [],
-                          "NextToken": expected_token})
+        self.assertEqual(
+            complete,
+            {"Users": ["User2"], "Groups": [], "NextToken": expected_token},
+        )
 
     def test_resume_with_secondary_result_as_string(self):
         self.method.return_value = {"Users": ["User1", "User2"], "Groups": "a"}
         starting_token = encode_token(
-            {"Marker": None, "boto_truncate_amount": 1})
+            {"Marker": None, "boto_truncate_amount": 1}
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token})
+            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
         # Note that the secondary keys ("Groups") becomes empty string because
         # they were in the original (first) response.
         self.assertEqual(complete, {"Users": ["User2"], "Groups": ""})
 
-    def test_resume_with_secondary_result_as_integer(self):
+    def test_resume_with_secondary_result_does_not_reset_integer(self):
         self.method.return_value = {"Users": ["User1", "User2"], "Groups": 123}
         starting_token = encode_token(
-            {"Marker": None, "boto_truncate_amount": 1})
+            {"Marker": None, "boto_truncate_amount": 1}
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token})
+            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        # Note that the secondary keys ("Groups") becomes zero because
-        # they were in the original (first) response.
-        self.assertEqual(complete, {"Users": ["User2"], "Groups": 0})
+        # Note that we don't reset numeric secondary keys, for DynamoDB's
+        # Count/ScannedCount since the server still evaluates those items
+        self.assertEqual(complete, {"Users": ["User2"], "Groups": 123})
 
 
 class TestMultipleInputKeys(unittest.TestCase):
@@ -959,71 +1114,90 @@ class TestMultipleInputKeys(unittest.Tes
             "input_token": ["InMarker1", "InMarker2"],
             "result_key": ["Users", "Groups"],
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_build_full_result_with_multiple_input_keys(self):
         responses = [
-            {"Users": ["User1", "User2"], "Groups": ["Group1"],
-             "Marker1": "m1", "Marker2": "m2"},
-            {"Users": ["User3", "User4"], "Groups": ["Group2"],
-             "Marker1": "m3", "Marker2": "m4"},
-            {"Users": ["User5"], "Groups": ["Group3"]}
+            {
+                "Users": ["User1", "User2"],
+                "Groups": ["Group1"],
+                "Marker1": "m1",
+                "Marker2": "m2",
+            },
+            {
+                "Users": ["User3", "User4"],
+                "Groups": ["Group2"],
+                "Marker1": "m3",
+                "Marker2": "m4",
+            },
+            {"Users": ["User5"], "Groups": ["Group3"]},
         ]
         self.method.side_effect = responses
-        pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 3})
+        pages = self.paginator.paginate(PaginationConfig={'MaxItems': 3})
         complete = pages.build_full_result()
         expected_token = encode_token(
-            {"InMarker1": "m1", "InMarker2": "m2", "boto_truncate_amount": 1})
-        self.assertEqual(complete,
-                         {"Users": ['User1', 'User2', 'User3'],
-                          "Groups": ['Group1', 'Group2'],
-                          "NextToken": expected_token})
+            {"InMarker1": "m1", "InMarker2": "m2", "boto_truncate_amount": 1}
+        )
+        self.assertEqual(
+            complete,
+            {
+                "Users": ['User1', 'User2', 'User3'],
+                "Groups": ['Group1', 'Group2'],
+                "NextToken": expected_token,
+            },
+        )
 
     def test_resume_with_multiple_input_keys(self):
         responses = [
-            {"Users": ["User3", "User4"], "Groups": ["Group2"],
-             "Marker1": "m3", "Marker2": "m4"},
+            {
+                "Users": ["User3", "User4"],
+                "Groups": ["Group2"],
+                "Marker1": "m3",
+                "Marker2": "m4",
+            },
             {"Users": ["User5"], "Groups": ["Group3"]},
         ]
         self.method.side_effect = responses
         starting_token = encode_token(
-            {"InMarker1": "m1", "InMarker2": "m2", "boto_truncate_amount": 1})
+            {"InMarker1": "m1", "InMarker2": "m2", "boto_truncate_amount": 1}
+        )
         pages = self.paginator.paginate(
-            PaginationConfig={'MaxItems': 1,
-                              'StartingToken': starting_token})
+            PaginationConfig={'MaxItems': 1, 'StartingToken': starting_token}
+        )
         complete = pages.build_full_result()
-        expected_token = encode_token(
-            {"InMarker1": "m3", "InMarker2": "m4"})
-        self.assertEqual(complete,
-                         {"Users": ['User4'],
-                          "Groups": [],
-                          "NextToken": expected_token})
+        expected_token = encode_token({"InMarker1": "m3", "InMarker2": "m4"})
+        self.assertEqual(
+            complete,
+            {"Users": ['User4'], "Groups": [], "NextToken": expected_token},
+        )
         self.assertEqual(
             self.method.call_args_list,
-            [mock.call(InMarker1='m1', InMarker2='m2')])
+            [mock.call(InMarker1='m1', InMarker2='m2')],
+        )
 
     def test_resume_encounters_an_empty_payload(self):
         response = {"not_a_result_key": "it happens in some service"}
         self.method.return_value = response
         starting_token = encode_token(
-            {"Marker": None, "boto_truncate_amount": 1})
-        complete = self.paginator \
-            .paginate(PaginationConfig={'StartingToken': starting_token}) \
-            .build_full_result()
+            {"Marker": None, "boto_truncate_amount": 1}
+        )
+        complete = self.paginator.paginate(
+            PaginationConfig={'StartingToken': starting_token}
+        ).build_full_result()
         self.assertEqual(complete, {})
 
     def test_result_key_exposed_on_paginator(self):
         self.assertEqual(
             [rk.expression for rk in self.paginator.result_keys],
-            ['Users', 'Groups']
+            ['Users', 'Groups'],
         )
 
     def test_result_key_exposed_on_page_iterator(self):
         pages = self.paginator.paginate(MaxItems=3)
         self.assertEqual(
-            [rk.expression for rk in pages.result_keys],
-            ['Users', 'Groups']
+            [rk.expression for rk in pages.result_keys], ['Users', 'Groups']
         )
 
 
@@ -1036,15 +1210,18 @@ class TestExpressionKeyIterators(unittes
             "input_token": "Marker",
             "output_token": "Marker",
             "limit_key": "MaxRecords",
-            "result_key": "EngineDefaults.Parameters"
+            "result_key": "EngineDefaults.Parameters",
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         self.responses = [
-            {"EngineDefaults": {"Parameters": ["One", "Two"]},
-             "Marker": "m1"},
-            {"EngineDefaults": {"Parameters": ["Three", "Four"]},
-             "Marker": "m2"},
-            {"EngineDefaults": {"Parameters": ["Five"]}}
+            {"EngineDefaults": {"Parameters": ["One", "Two"]}, "Marker": "m1"},
+            {
+                "EngineDefaults": {"Parameters": ["Three", "Four"]},
+                "Marker": "m2",
+            },
+            {"EngineDefaults": {"Parameters": ["Five"]}},
         ]
 
     def test_result_key_iters(self):
@@ -1052,18 +1229,22 @@ class TestExpressionKeyIterators(unittes
         pages = self.paginator.paginate()
         iterators = pages.result_key_iters()
         self.assertEqual(len(iterators), 1)
-        self.assertEqual(list(iterators[0]),
-                         ['One', 'Two', 'Three', 'Four', 'Five'])
+        self.assertEqual(
+            list(iterators[0]), ['One', 'Two', 'Three', 'Four', 'Five']
+        )
 
     def test_build_full_result_with_single_key(self):
         self.method.side_effect = self.responses
         pages = self.paginator.paginate()
         complete = pages.build_full_result()
-        self.assertEqual(complete, {
-            'EngineDefaults': {
-                'Parameters': ['One', 'Two', 'Three', 'Four', 'Five']
+        self.assertEqual(
+            complete,
+            {
+                'EngineDefaults': {
+                    'Parameters': ['One', 'Two', 'Three', 'Four', 'Five']
+                },
             },
-        })
+        )
 
 
 class TestIncludeResultKeys(unittest.TestCase):
@@ -1075,7 +1256,9 @@ class TestIncludeResultKeys(unittest.Tes
             'input_token': 'Marker',
             'result_key': ['ResultKey', 'Count', 'Log'],
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_different_kinds_of_result_key(self):
         self.method.side_effect = [
@@ -1114,7 +1297,9 @@ class TestIncludeNonResultKeys(unittest.
             'result_key': 'ResultKey',
             'non_aggregate_keys': ['NotResultKey'],
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_include_non_aggregate_keys(self):
         self.method.side_effect = [
@@ -1133,14 +1318,27 @@ class TestIncludeNonResultKeys(unittest.
 
     def test_include_with_multiple_result_keys(self):
         self.paginate_config['result_key'] = ['ResultKey1', 'ResultKey2']
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         self.method.side_effect = [
-            {'ResultKey1': ['a', 'b'], 'ResultKey2': ['u', 'v'],
-             'NotResultKey': 'a', 'NextToken': 'token1'},
-            {'ResultKey1': ['c', 'd'], 'ResultKey2': ['w', 'x'],
-             'NotResultKey': 'a', 'NextToken': 'token2'},
-            {'ResultKey1': ['e', 'f'], 'ResultKey2': ['y', 'z'],
-             'NotResultKey': 'a'}
+            {
+                'ResultKey1': ['a', 'b'],
+                'ResultKey2': ['u', 'v'],
+                'NotResultKey': 'a',
+                'NextToken': 'token1',
+            },
+            {
+                'ResultKey1': ['c', 'd'],
+                'ResultKey2': ['w', 'x'],
+                'NotResultKey': 'a',
+                'NextToken': 'token2',
+            },
+            {
+                'ResultKey1': ['e', 'f'],
+                'ResultKey2': ['y', 'z'],
+                'NotResultKey': 'a',
+            },
         ]
         pages = self.paginator.paginate()
         actual = pages.build_full_result()
@@ -1154,26 +1352,36 @@ class TestIncludeNonResultKeys(unittest.
     def test_include_with_nested_result_keys(self):
         self.paginate_config['result_key'] = 'Result.Key'
         self.paginate_config['non_aggregate_keys'] = [
-            'Outer', 'Result.Inner',
+            'Outer',
+            'Result.Inner',
         ]
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         self.method.side_effect = [
             # The non result keys shows hypothetical
             # example.  This doesn't actually happen,
             # but in the case where the non result keys
             # are different across pages, we use the values
             # from the first page.
-            {'Result': {'Key': ['foo'], 'Inner': 'v1'},
-             'Outer': 'v2', 'NextToken': 't1'},
-            {'Result': {'Key': ['bar', 'baz'], 'Inner': 'v3'},
-             'Outer': 'v4', 'NextToken': 't2'},
-            {'Result': {'Key': ['qux'], 'Inner': 'v5'},
-             'Outer': 'v6'},
+            {
+                'Result': {'Key': ['foo'], 'Inner': 'v1'},
+                'Outer': 'v2',
+                'NextToken': 't1',
+            },
+            {
+                'Result': {'Key': ['bar', 'baz'], 'Inner': 'v3'},
+                'Outer': 'v4',
+                'NextToken': 't2',
+            },
+            {'Result': {'Key': ['qux'], 'Inner': 'v5'}, 'Outer': 'v6'},
         ]
         pages = self.paginator.paginate()
         actual = pages.build_full_result()
-        self.assertEqual(pages.non_aggregate_part,
-                         {'Outer': 'v2', 'Result': {'Inner': 'v1'}})
+        self.assertEqual(
+            pages.non_aggregate_part,
+            {'Outer': 'v2', 'Result': {'Inner': 'v1'}},
+        )
         expected = {
             'Result': {'Key': ['foo', 'bar', 'baz', 'qux'], 'Inner': 'v1'},
             'Outer': 'v2',
@@ -1191,13 +1399,21 @@ class TestSearchOverResults(unittest.Tes
             'input_token': 'NextToken',
             'result_key': 'Foo',
         }
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
         responses = [
-            {'Foo': [{'a': 1}, {'b': 2}],
-             'IsTruncated': True, 'NextToken': '1'},
-            {'Foo': [{'a': 3}, {'b': 4}],
-             'IsTruncated': True, 'NextToken': '2'},
-            {'Foo': [{'a': 5}], 'IsTruncated': False, 'NextToken': '3'}
+            {
+                'Foo': [{'a': 1}, {'b': 2}],
+                'IsTruncated': True,
+                'NextToken': '1',
+            },
+            {
+                'Foo': [{'a': 3}, {'b': 4}],
+                'IsTruncated': True,
+                'NextToken': '2',
+            },
+            {'Foo': [{'a': 5}], 'IsTruncated': False, 'NextToken': '3'},
         ]
         self.method.side_effect = responses
 
@@ -1238,12 +1454,14 @@ class TestDeprecatedStartingToken(unitte
             }
         return Paginator(self.method, paginator_config, self.model)
 
-    def assert_pagination_result(self, expected, pagination_config,
-                                 multiple_tokens=False):
+    def assert_pagination_result(
+        self, expected, pagination_config, multiple_tokens=False
+    ):
         paginator = self.create_paginator(multiple_tokens)
         try:
             actual = paginator.paginate(
-                PaginationConfig=pagination_config).build_full_result()
+                PaginationConfig=pagination_config
+            ).build_full_result()
             self.assertEqual(actual, expected)
         except ValueError:
             self.fail("Deprecated paginator failed.")
@@ -1265,27 +1483,25 @@ class TestDeprecatedStartingToken(unitte
                 "Users": ["User1", "User2"],
                 "Groups": ["Group1"],
                 "Marker1": "m1",
-                "Marker2": "m2"
+                "Marker2": "m2",
             },
             {
                 "Users": ["User3", "User4"],
                 "Groups": ["Group2"],
                 "Marker1": "m3",
-                "Marker2": "m4"
+                "Marker2": "m4",
             },
-            {
-                "Users": ["User5"],
-                "Groups": ["Group3"]
-            }
+            {"Users": ["User5"], "Groups": ["Group3"]},
         ]
         self.method.side_effect = responses
         pagination_config = {'StartingToken': 'm0___m0___1'}
         expected = {
             'Groups': ['Group2', 'Group3'],
-            'Users': ['User2', 'User3', 'User4', 'User5']
+            'Users': ['User2', 'User3', 'User4', 'User5'],
         }
         self.assert_pagination_result(
-            expected, pagination_config, multiple_tokens=True)
+            expected, pagination_config, multiple_tokens=True
+        )
 
     def test_deprecated_starting_token_returns_new_style_next_token(self):
         responses = [
@@ -1297,7 +1513,7 @@ class TestDeprecatedStartingToken(unitte
         pagination_config = {'StartingToken': 'm1___0', 'MaxItems': 3}
         expected = {
             'Users': ['User1', 'User2', 'User3'],
-            'NextToken': encode_token({'Marker': 'm4'})
+            'NextToken': encode_token({'Marker': 'm4'}),
         }
         self.assert_pagination_result(expected, pagination_config)
 
@@ -1307,27 +1523,25 @@ class TestDeprecatedStartingToken(unitte
                 "Users": ["User1", "User2"],
                 "Groups": ["Group1"],
                 "Marker1": "m1",
-                "Marker2": "m2"
+                "Marker2": "m2",
             },
             {
                 "Users": ["User3", "User4"],
                 "Groups": ["Group2"],
                 "Marker1": "m3",
-                "Marker2": "m4"
+                "Marker2": "m4",
             },
-            {
-                "Users": ["User5"],
-                "Groups": ["Group3"]
-            }
+            {"Users": ["User5"], "Groups": ["Group3"]},
         ]
         self.method.side_effect = responses
         pagination_config = {'StartingToken': 'm0'}
         expected = {
             'Groups': ['Group2', 'Group3'],
-            'Users': ['User1', 'User2', 'User3', 'User4', 'User5']
+            'Users': ['User1', 'User2', 'User3', 'User4', 'User5'],
         }
         self.assert_pagination_result(
-            expected, pagination_config, multiple_tokens=True)
+            expected, pagination_config, multiple_tokens=True
+        )
 
     def test_deprecated_starting_token_rejects_too_many_input_tokens(self):
         responses = [
@@ -1342,44 +1556,36 @@ class TestDeprecatedStartingToken(unitte
         paginator = self.create_paginator()
         with self.assertRaises(ValueError):
             actual = paginator.paginate(
-                PaginationConfig=pagination_config).build_full_result()
+                PaginationConfig=pagination_config
+            ).build_full_result()
             self.assertEqual(actual, expected)
 
 
 class TestStringPageSize(unittest.TestCase):
     def setUp(self):
         self.service_model = {
-            'metadata': {
-                'protocol': 'query',
-                'endpointPrefix': 'prefix'
-            },
+            'metadata': {'protocol': 'query', 'endpointPrefix': 'prefix'},
             'documentation': 'best service ever',
             'operations': {
                 'ListStuff': {
                     'name': 'ListStuff',
-                    'http': {
-                        'method': 'GET',
-                        'requestUri': '/things'
-                    },
+                    'http': {'method': 'GET', 'requestUri': '/things'},
                     'input': {'shape': 'ListStuffInputShape'},
                     'output': {'shape': 'ListStuffOutputShape'},
                     'errors': [],
-                    'documentation': 'Lists stuff'
+                    'documentation': 'Lists stuff',
                 }
             },
             'shapes': {
                 'String': {'type': 'string'},
-                'ListOfStuff': {
-                    'type': 'list',
-                    'member': {'type': 'string'}
-                },
+                'ListOfStuff': {'type': 'list', 'member': {'type': 'string'}},
                 'ListStuffInputShape': {
                     'type': 'structure',
                     'required': [],
                     'members': {
                         'NextToken': {'shape': 'String'},
-                        'MaxItems': {'shape': 'String'}
-                    }
+                        'MaxItems': {'shape': 'String'},
+                    },
                 },
                 'ListStuffOutputShape': {
                     'type': 'structure',
@@ -1387,10 +1593,10 @@ class TestStringPageSize(unittest.TestCa
                     'members': {
                         'NextToken': {'shape': 'String'},
                         'Stuff': {'shape': 'ListOfStuff'},
-                        'IsTruncated': {'type': 'boolean'}
+                        'IsTruncated': {'type': 'boolean'},
                     },
-                }
-            }
+                },
+            },
         }
         self.paginate_config = {
             'input_token': 'NextToken',
@@ -1402,14 +1608,16 @@ class TestStringPageSize(unittest.TestCa
         self.model = self.service.operation_model('ListStuff')
         self.method = mock.Mock()
         self.method.side_effect = [{}]
-        self.paginator = Paginator(self.method, self.paginate_config, self.model)
+        self.paginator = Paginator(
+            self.method, self.paginate_config, self.model
+        )
 
     def test_int_page_size(self):
-        res = list(self.paginator.paginate(PaginationConfig={'PageSize': 1}))
+        list(self.paginator.paginate(PaginationConfig={'PageSize': 1}))
         self.method.assert_called_with(MaxItems='1')
 
     def test_str_page_size(self):
-        res = list(self.paginator.paginate(PaginationConfig={'PageSize': '1'}))
+        list(self.paginator.paginate(PaginationConfig={'PageSize': '1'}))
         self.method.assert_called_with(MaxItems='1')
 
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_parsers.py 2.31.35-1/tests/unit/botocore/test_parsers.py
--- 2.23.6-1/tests/unit/botocore/test_parsers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_parsers.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from tests import unittest, RawResponse
 import datetime
 import itertools
 
-from dateutil.tz import tzutc
 import pytest
+from botocore import model, parsers
+from botocore.compat import MutableMapping, json
+from dateutil.tz import tzutc
 
-from botocore import parsers
-from botocore import model
-from botocore.compat import json, MutableMapping
+from tests import RawResponse, unittest
 
 
 # HTTP responses will typically return a custom HTTP
@@ -52,12 +51,13 @@ class TestResponseMetadataParsed(unittes
     def test_response_metadata_parsed_for_query_service(self):
         parser = parsers.QueryParser()
         response = (
-            '<OperationNameResponse>'
-            '  <OperationNameResult><Str>myname</Str></OperationNameResult>'
-            '  <ResponseMetadata>'
-            '    <RequestId>request-id</RequestId>'
-            '  </ResponseMetadata>'
-            '</OperationNameResponse>').encode('utf-8')
+            b'<OperationNameResponse>'
+            b'  <OperationNameResult><Str>myname</Str></OperationNameResult>'
+            b'  <ResponseMetadata>'
+            b'    <RequestId>request-id</RequestId>'
+            b'  </ResponseMetadata>'
+            b'</OperationNameResponse>'
+        )
         output_shape = model.StructureShape(
             'OutputShape',
             {
@@ -69,27 +69,34 @@ class TestResponseMetadataParsed(unittes
                     },
                     'Num': {
                         'shape': 'IntegerType',
-                    }
-                }
-            },
-            model.ShapeResolver({
-                'StringType': {
-                    'type': 'string',
+                    },
                 },
-                'IntegerType': {
-                    'type': 'integer',
+            },
+            model.ShapeResolver(
+                {
+                    'StringType': {
+                        'type': 'string',
+                    },
+                    'IntegerType': {
+                        'type': 'integer',
+                    },
                 }
-            })
+            ),
         )
         parsed = parser.parse(
-            {'body': response,
-             'headers': {},
-             'status_code': 200}, output_shape)
+            {'body': response, 'headers': {}, 'status_code': 200}, output_shape
+        )
         self.assertEqual(
-            parsed, {'Str': 'myname',
-                     'ResponseMetadata': {'RequestId': 'request-id',
-                                          'HTTPStatusCode': 200,
-                                          'HTTPHeaders': {}}})
+            parsed,
+            {
+                'Str': 'myname',
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': {},
+                },
+            },
+        )
 
     def test_metadata_always_exists_for_query(self):
         # ResponseMetadata is used for more than just the request id. It
@@ -97,9 +104,10 @@ class TestResponseMetadataParsed(unittes
         # have an id.
         parser = parsers.QueryParser()
         response = (
-            '<OperationNameResponse>'
-            '  <OperationNameResult><Str>myname</Str></OperationNameResult>'
-            '</OperationNameResponse>').encode('utf-8')
+            b'<OperationNameResponse>'
+            b'  <OperationNameResult><Str>myname</Str></OperationNameResult>'
+            b'</OperationNameResponse>'
+        )
         output_shape = model.StructureShape(
             'OutputShape',
             {
@@ -111,37 +119,37 @@ class TestResponseMetadataParsed(unittes
                     },
                     'Num': {
                         'shape': 'IntegerType',
-                    }
-                }
-            },
-            model.ShapeResolver({
-                'StringType': {
-                    'type': 'string',
+                    },
                 },
-                'IntegerType': {
-                    'type': 'integer',
+            },
+            model.ShapeResolver(
+                {
+                    'StringType': {
+                        'type': 'string',
+                    },
+                    'IntegerType': {
+                        'type': 'integer',
+                    },
                 }
-            })
+            ),
         )
         parsed = parser.parse(
-            {'body': response, 'headers': {}, 'status_code': 200},
-            output_shape)
+            {'body': response, 'headers': {}, 'status_code': 200}, output_shape
+        )
         expected = {
             'Str': 'myname',
-            'ResponseMetadata': {
-                'HTTPStatusCode': 200,
-                'HTTPHeaders': {}
-            }
+            'ResponseMetadata': {'HTTPStatusCode': 200, 'HTTPHeaders': {}},
         }
         self.assertEqual(parsed, expected)
 
     def test_response_metadata_parsed_for_ec2(self):
         parser = parsers.EC2QueryParser()
         response = (
-            '<OperationNameResponse>'
-            '  <Str>myname</Str>'
-            '  <requestId>request-id</requestId>'
-            '</OperationNameResponse>').encode('utf-8')
+            b'<OperationNameResponse>'
+            b'  <Str>myname</Str>'
+            b'  <requestId>request-id</requestId>'
+            b'</OperationNameResponse>'
+        )
         output_shape = model.StructureShape(
             'OutputShape',
             {
@@ -150,20 +158,26 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
+        )
+        parsed = parser.parse(
+            {'headers': {}, 'body': response, 'status_code': 200}, output_shape
         )
-        parsed = parser.parse({'headers': {},
-                               'body': response,
-                               'status_code': 200}, output_shape)
         # Note that the response metadata is normalized to match the query
         # protocol, even though this is not how it appears in the output.
         self.assertEqual(
-            parsed, {'Str': 'myname',
-                     'ResponseMetadata': {'RequestId': 'request-id',
-                                          'HTTPStatusCode': 200,
-                                          'HTTPHeaders': {}}})
+            parsed,
+            {
+                'Str': 'myname',
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': {},
+                },
+            },
+        )
 
     def test_metadata_always_exists_for_ec2(self):
         # ResponseMetadata is used for more than just the request id. It
@@ -171,9 +185,10 @@ class TestResponseMetadataParsed(unittes
         # have an id.
         parser = parsers.EC2QueryParser()
         response = (
-            '<OperationNameResponse>'
-            '  <Str>myname</Str>'
-            '</OperationNameResponse>').encode('utf-8')
+            b'<OperationNameResponse>'
+            b'  <Str>myname</Str>'
+            b'</OperationNameResponse>'
+        )
         output_shape = model.StructureShape(
             'OutputShape',
             {
@@ -182,22 +197,18 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
         parsed = parser.parse(
-            {'headers': {}, 'body': response, 'status_code': 200},
-            output_shape)
+            {'headers': {}, 'body': response, 'status_code': 200}, output_shape
+        )
         expected = {
             'Str': 'myname',
-            'ResponseMetadata': {
-                'HTTPStatusCode': 200,
-                'HTTPHeaders': {}
-            }
+            'ResponseMetadata': {'HTTPStatusCode': 200, 'HTTPHeaders': {}},
         }
-        self.assertEqual(
-            parsed, expected)
+        self.assertEqual(parsed, expected)
 
     def test_response_metadata_on_json_request(self):
         parser = parsers.JSONParser()
@@ -211,19 +222,27 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
+        )
+        parsed = parser.parse(
+            {'body': response, 'headers': headers, 'status_code': 200},
+            output_shape,
         )
-        parsed = parser.parse({'body': response, 'headers': headers,
-                               'status_code': 200}, output_shape)
         # Note that the response metadata is normalized to match the query
         # protocol, even though this is not how it appears in the output.
         self.assertEqual(
-            parsed, {'Str': 'mystring',
-                     'ResponseMetadata': {'RequestId': 'request-id',
-                                          'HTTPStatusCode': 200,
-                                          'HTTPHeaders': headers}})
+            parsed,
+            {
+                'Str': 'mystring',
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                },
+            },
+        )
 
     def test_response_no_initial_event_stream(self):
         parser = parsers.JSONParser()
@@ -231,26 +250,24 @@ class TestResponseMetadataParsed(unittes
             'OutputShape',
             {
                 'type': 'structure',
-                'members': {
-                    'Payload': {'shape': 'Payload'}
-                }
+                'members': {'Payload': {'shape': 'Payload'}},
             },
-            model.ShapeResolver({
-                'Payload': {
-                    'type': 'structure',
-                    'members': [],
-                    'eventstream': True
+            model.ShapeResolver(
+                {
+                    'Payload': {
+                        'type': 'structure',
+                        'members': [],
+                        'eventstream': True,
+                    }
                 }
-            })
+            ),
         )
         with self.assertRaises(parsers.ResponseParserError):
             response_dict = {
                 'status_code': 200,
                 'headers': {},
                 'body': RawResponse(b''),
-                'context': {
-                    'operation_name': 'TestOperation'
-                }
+                'context': {'operation_name': 'TestOperation'},
             }
             parser.parse(response_dict, output_shape)
 
@@ -269,19 +286,20 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
         parsed = parser.parse(
             {'body': response, 'headers': headers, 'status_code': 200},
-            output_shape)
+            output_shape,
+        )
         expected = {
             'Str': 'mystring',
             'ResponseMetadata': {
                 'HTTPStatusCode': 200,
-                'HTTPHeaders': headers
-            }
+                'HTTPHeaders': headers,
+            },
         }
         self.assertEqual(parsed, expected)
 
@@ -297,19 +315,27 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
+        )
+        parsed = parser.parse(
+            {'body': response, 'headers': headers, 'status_code': 200},
+            output_shape,
         )
-        parsed = parser.parse({'body': response, 'headers': headers,
-                               'status_code': 200}, output_shape)
         # Note that the response metadata is normalized to match the query
         # protocol, even though this is not how it appears in the output.
         self.assertEqual(
-            parsed, {'Str': 'mystring',
-                     'ResponseMetadata': {'RequestId': 'request-id',
-                                          'HTTPStatusCode': 200,
-                                          'HTTPHeaders': headers}})
+            parsed,
+            {
+                'Str': 'mystring',
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                },
+            },
+        )
 
     def test_metadata_always_exists_on_rest_json_response(self):
         # ResponseMetadata is used for more than just the request id. It
@@ -326,19 +352,20 @@ class TestResponseMetadataParsed(unittes
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
         parsed = parser.parse(
             {'body': response, 'headers': headers, 'status_code': 200},
-            output_shape)
+            output_shape,
+        )
         expected = {
             'Str': 'mystring',
             'ResponseMetadata': {
                 'HTTPStatusCode': 200,
-                'HTTPHeaders': headers
-            }
+                'HTTPHeaders': headers,
+            },
         }
         self.assertEqual(parsed, expected)
 
@@ -347,19 +374,22 @@ class TestResponseMetadataParsed(unittes
         # is slightly different.  It has two request ids, both come from
         # the response headers, are both are named differently from other
         # rest-xml responses.
-        headers = {
-            'x-amz-id-2': 'second-id',
-            'x-amz-request-id': 'request-id'
-        }
+        headers = {'x-amz-id-2': 'second-id', 'x-amz-request-id': 'request-id'}
         parser = parsers.RestXMLParser()
         parsed = parser.parse(
-            {'body': '', 'headers': headers, 'status_code': 200}, None)
+            {'body': '', 'headers': headers, 'status_code': 200}, None
+        )
         self.assertEqual(
             parsed,
-            {'ResponseMetadata': {'RequestId': 'request-id',
-                                  'HostId': 'second-id',
-                                  'HTTPStatusCode': 200,
-                                  'HTTPHeaders': headers}})
+            {
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HostId': 'second-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                }
+            },
+        )
 
     def test_metadata_always_exists_on_rest_xml_response(self):
         # ResponseMetadata is used for more than just the request id. It
@@ -368,12 +398,10 @@ class TestResponseMetadataParsed(unittes
         headers = {}
         parser = parsers.RestXMLParser()
         parsed = parser.parse(
-            {'body': '', 'headers': headers, 'status_code': 200}, None)
+            {'body': '', 'headers': headers, 'status_code': 200}, None
+        )
         expected = {
-            'ResponseMetadata': {
-                'HTTPStatusCode': 200,
-                'HTTPHeaders': headers
-            }
+            'ResponseMetadata': {'HTTPStatusCode': 200, 'HTTPHeaders': headers}
         }
         self.assertEqual(parsed, expected)
 
@@ -383,11 +411,7 @@ class TestResponseMetadataParsed(unittes
             'status_code': 200,
             'headers': headers,
             'body': b'',
-            'context': {
-                'checksum': {
-                    'response_algorithm': 'crc32'
-                }
-            }
+            'context': {'checksum': {'response_algorithm': 'crc32'}},
         }
         parser = parsers.RestXMLParser()
         parsed = parser.parse(response_dict, None)
@@ -397,19 +421,25 @@ class TestResponseMetadataParsed(unittes
 
 
 class TestTaggedUnions(unittest.TestCase):
-    def assert_tagged_union_response_with_unknown_member(self,
-                                                         parser,
-                                                         response,
-                                                         output_shape,
-                                                         expected_parsed_response,
-                                                         expected_log):
+    def assert_tagged_union_response_with_unknown_member(
+        self,
+        parser,
+        response,
+        output_shape,
+        expected_parsed_response,
+        expected_log,
+    ):
         with self.assertLogs() as captured_log:
             parsed = parser.parse(response, output_shape)
             self.assertEqual(parsed, expected_parsed_response)
             self.assertEqual(len(captured_log.records), 1)
-            self.assertIn(('Received a tagged union response with member '
-                           'unknown to client'),
-                          captured_log.records[0].getMessage())
+            self.assertIn(
+                (
+                    'Received a tagged union response with member '
+                    'unknown to client'
+                ),
+                captured_log.records[0].getMessage(),
+            )
 
     def test_base_json_parser_handles_unknown_member(self):
         parser = parsers.JSONParser()
@@ -419,79 +449,83 @@ class TestTaggedUnions(unittest.TestCase
             'OutputShape',
             {
                 'type': 'structure',
-                'union':True,
+                'union': True,
                 'members': {
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
         response = {'body': response, 'headers': headers, 'status_code': 200}
         # Parsed response omits data from service since it is not
         # modeled in the client
         expected_parsed_response = {
-            'SDK_UNKNOWN_MEMBER': {
-                'name': 'Foo'
+            'SDK_UNKNOWN_MEMBER': {'name': 'Foo'},
+            'ResponseMetadata': {
+                'RequestId': 'request-id',
+                'HTTPStatusCode': 200,
+                'HTTPHeaders': {'x-amzn-requestid': 'request-id'},
             },
-            'ResponseMetadata':
-            {'RequestId': 'request-id',
-             'HTTPStatusCode': 200,
-             'HTTPHeaders': {
-                 'x-amzn-requestid': 'request-id'}
-             }
         }
         expected_log = "Received a response with an unknown member Foo set"
         self.assert_tagged_union_response_with_unknown_member(
-            parser, response, output_shape, expected_parsed_response,
-            expected_log
+            parser,
+            response,
+            output_shape,
+            expected_parsed_response,
+            expected_log,
         )
 
     def test_base_xml_parser_handles_unknown_member(self):
         parser = parsers.QueryParser()
         response = (
-            '<OperationNameResponse>'
-            '  <OperationNameResult><Foo>mystring</Foo></OperationNameResult>'
-            '  <ResponseMetadata>'
-            '    <RequestId>request-id</RequestId>'
-            '  </ResponseMetadata>'
-            '</OperationNameResponse>').encode('utf-8')
+            b'<OperationNameResponse>'
+            b'  <OperationNameResult><Foo>mystring</Foo></OperationNameResult>'
+            b'  <ResponseMetadata>'
+            b'    <RequestId>request-id</RequestId>'
+            b'  </ResponseMetadata>'
+            b'</OperationNameResponse>'
+        )
         output_shape = model.StructureShape(
             'OutputShape',
             {
                 'type': 'structure',
-                'union':True,
+                'union': True,
                 'resultWrapper': 'OperationNameResult',
                 'members': {
                     'Str': {
                         'shape': 'StringType',
                     },
-                }
-            },
-            model.ShapeResolver({
-                'StringType': {
-                    'type': 'string',
                 },
-            })
+            },
+            model.ShapeResolver(
+                {
+                    'StringType': {
+                        'type': 'string',
+                    },
+                }
+            ),
         )
         response = {'body': response, 'headers': {}, 'status_code': 200}
         # Parsed response omits data from service since it is not
         # modeled in the client
         expected_parsed_response = {
-            'SDK_UNKNOWN_MEMBER': {
-                'name': 'Foo'
-            },
-            'ResponseMetadata':{
+            'SDK_UNKNOWN_MEMBER': {'name': 'Foo'},
+            'ResponseMetadata': {
                 'RequestId': 'request-id',
                 'HTTPStatusCode': 200,
-                'HTTPHeaders': {}
-            }
+                'HTTPHeaders': {},
+            },
         }
         expected_log = "Received a response with an unknown member Foo set"
         self.assert_tagged_union_response_with_unknown_member(
-            parser, response, output_shape, expected_parsed_response,
-            expected_log
+            parser,
+            response,
+            output_shape,
+            expected_parsed_response,
+            expected_log,
         )
 
     def test_parser_errors_out_when_multiple_members_set(self):
@@ -502,17 +536,17 @@ class TestTaggedUnions(unittest.TestCase
             'OutputShape',
             {
                 'type': 'structure',
-                'union':True,
+                'union': True,
                 'members': {
                     'Foo': {
                         'shape': 'StringType',
                     },
                     'Bar': {
                         'shape': 'StringType',
-                    }
-                }
+                    },
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
 
         response = {'body': response, 'headers': headers, 'status_code': 200}
@@ -562,9 +596,9 @@ class TestHeaderResponseInclusion(unitte
                     'Str': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
         return output_shape
 
@@ -577,8 +611,9 @@ class TestHeaderResponseInclusion(unitte
         }
         output_shape = self.create_arbitary_output_shape()
         parsed = parser.parse(
-            {'body': b'{}', 'headers': headers,
-             'status_code': 200}, output_shape)
+            {'body': b'{}', 'headers': headers, 'status_code': 200},
+            output_shape,
+        )
         # The mapped header's keys should all be lower cased
         parsed_headers = {
             'x-amzn-requestid': 'request-id',
@@ -587,7 +622,8 @@ class TestHeaderResponseInclusion(unitte
         }
         # Response headers should be mapped as HTTPHeaders.
         self.assertEqual(
-            parsed['ResponseMetadata']['HTTPHeaders'], parsed_headers)
+            parsed['ResponseMetadata']['HTTPHeaders'], parsed_headers
+        )
 
     def test_can_always_json_serialize_headers(self):
         parser = self.create_parser()
@@ -598,14 +634,16 @@ class TestHeaderResponseInclusion(unitte
         headers = CustomHeaderDict(original_headers)
         output_shape = self.create_arbitary_output_shape()
         parsed = parser.parse(
-            {'body': b'{}', 'headers': headers,
-             'status_code': 200}, output_shape)
+            {'body': b'{}', 'headers': headers, 'status_code': 200},
+            output_shape,
+        )
         metadata = parsed['ResponseMetadata']
         # We've had the contract that you can json serialize a
         # response.  So we want to ensure that despite using a CustomHeaderDict
         # we can always JSON dumps the response metadata.
         self.assertEqual(
-            json.loads(json.dumps(metadata))['HTTPHeaders']['header1'], 'foo')
+            json.loads(json.dumps(metadata))['HTTPHeaders']['header1'], 'foo'
+        )
 
 
 class TestResponseParsingDatetimes(unittest.TestCase):
@@ -613,16 +651,18 @@ class TestResponseParsingDatetimes(unitt
         # The type "timestamp" can come back as both an integer or as a float.
         # We need to make sure we handle the case where the timestamp comes
         # back as a float.  It might make sense to move this to protocol tests.
-        output_shape = model.Shape(shape_name='datetime',
-                                   shape_model={'type': 'timestamp'})
+        output_shape = model.Shape(
+            shape_name='datetime', shape_model={'type': 'timestamp'}
+        )
         parser = parsers.JSONParser()
         timestamp_as_float = b'1407538750.49'
         expected_parsed = datetime.datetime(
-            2014, 8, 8, 22, 59, 10, 490000, tzinfo=tzutc())
+            2014, 8, 8, 22, 59, 10, 490000, tzinfo=tzutc()
+        )
         parsed = parser.parse(
-            {'body': timestamp_as_float,
-             'headers': [],
-             'status_code': 200}, output_shape)
+            {'body': timestamp_as_float, 'headers': [], 'status_code': 200},
+            output_shape,
+        )
         self.assertEqual(parsed, expected_parsed)
 
 
@@ -645,53 +685,52 @@ class TestCanDecorateResponseParsing(uni
         self.factory = parsers.ResponseParserFactory()
 
     def create_request_dict(self, with_body):
-        return {
-            'body': with_body, 'headers': [], 'status_code': 200
-        }
+        return {'body': with_body, 'headers': [], 'status_code': 200}
 
     def test_normal_blob_parsing(self):
-        output_shape = model.Shape(shape_name='BlobType',
-                                   shape_model={'type': 'blob'})
+        output_shape = model.Shape(
+            shape_name='BlobType', shape_model={'type': 'blob'}
+        )
         parser = self.factory.create_parser('json')
 
         hello_world_b64 = b'"aGVsbG8gd29ybGQ="'
         expected_parsed = b'hello world'
         parsed = parser.parse(
-            self.create_request_dict(with_body=hello_world_b64),
-            output_shape)
+            self.create_request_dict(with_body=hello_world_b64), output_shape
+        )
         self.assertEqual(parsed, expected_parsed)
 
     def test_can_decorate_scalar_parsing(self):
-        output_shape = model.Shape(shape_name='BlobType',
-                                   shape_model={'type': 'blob'})
+        output_shape = model.Shape(
+            shape_name='BlobType', shape_model={'type': 'blob'}
+        )
         # Here we're overriding the blob parser so that
         # we can change it to a noop parser.
-        self.factory.set_parser_defaults(
-            blob_parser=lambda x: x)
+        self.factory.set_parser_defaults(blob_parser=lambda x: x)
         parser = self.factory.create_parser('json')
 
         hello_world_b64 = b'"aGVsbG8gd29ybGQ="'
         expected_parsed = "aGVsbG8gd29ybGQ="
         parsed = parser.parse(
-            self.create_request_dict(with_body=hello_world_b64),
-            output_shape)
+            self.create_request_dict(with_body=hello_world_b64), output_shape
+        )
         self.assertEqual(parsed, expected_parsed)
 
     def test_can_decorate_timestamp_parser(self):
-        output_shape = model.Shape(shape_name='datetime',
-                                   shape_model={'type': 'timestamp'})
+        output_shape = model.Shape(
+            shape_name='datetime', shape_model={'type': 'timestamp'}
+        )
         # Here we're overriding the timestamp parser so that
         # we can change it to just convert a string to an integer
         # instead of converting to a datetime.
-        self.factory.set_parser_defaults(
-            timestamp_parser=lambda x: int(x))
+        self.factory.set_parser_defaults(timestamp_parser=lambda x: int(x))
         parser = self.factory.create_parser('json')
 
         timestamp_as_int = b'1407538750'
         expected_parsed = int(timestamp_as_int)
         parsed = parser.parse(
-            self.create_request_dict(with_body=timestamp_as_int),
-            output_shape)
+            self.create_request_dict(with_body=timestamp_as_int), output_shape
+        )
         self.assertEqual(parsed, expected_parsed)
 
 
@@ -703,13 +742,18 @@ class TestHandlesNoOutputShape(unittest.
         parser = parsers.RestJSONParser()
         output_shape = None
         parsed = parser.parse(
-            {'body': b'', 'headers': headers, 'status_code': 200},
-            output_shape)
+            {'body': b'', 'headers': headers, 'status_code': 200}, output_shape
+        )
         self.assertEqual(
             parsed,
-            {'ResponseMetadata': {'RequestId': 'request-id',
-                                  'HTTPStatusCode': 200,
-                                  'HTTPHeaders': headers}})
+            {
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                }
+            },
+        )
 
     def test_empty_rest_xml_response(self):
         # This is the format used by cloudfront, route53.
@@ -717,13 +761,18 @@ class TestHandlesNoOutputShape(unittest.
         parser = parsers.RestXMLParser()
         output_shape = None
         parsed = parser.parse(
-            {'body': b'', 'headers': headers, 'status_code': 200},
-            output_shape)
+            {'body': b'', 'headers': headers, 'status_code': 200}, output_shape
+        )
         self.assertEqual(
             parsed,
-            {'ResponseMetadata': {'RequestId': 'request-id',
-                                  'HTTPStatusCode': 200,
-                                  'HTTPHeaders': headers}})
+            {
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                }
+            },
+        )
 
     def test_empty_query_response(self):
         body = (
@@ -736,13 +785,18 @@ class TestHandlesNoOutputShape(unittest.
         parser = parsers.QueryParser()
         output_shape = None
         parsed = parser.parse(
-            {'body': body, 'headers': {}, 'status_code': 200},
-            output_shape)
+            {'body': body, 'headers': {}, 'status_code': 200}, output_shape
+        )
         self.assertEqual(
             parsed,
-            {'ResponseMetadata': {'RequestId': 'request-id',
-                                  'HTTPStatusCode': 200,
-                                  'HTTPHeaders': {}}})
+            {
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': {},
+                }
+            },
+        )
 
     def test_empty_json_response(self):
         headers = {'x-amzn-requestid': 'request-id'}
@@ -750,13 +804,18 @@ class TestHandlesNoOutputShape(unittest.
         output_shape = None
         parser = parsers.JSONParser()
         parsed = parser.parse(
-            {'body': b'', 'headers': headers, 'status_code': 200},
-            output_shape)
+            {'body': b'', 'headers': headers, 'status_code': 200}, output_shape
+        )
         self.assertEqual(
             parsed,
-            {'ResponseMetadata': {'RequestId': 'request-id',
-                                  'HTTPStatusCode': 200,
-                                  'HTTPHeaders': headers}})
+            {
+                'ResponseMetadata': {
+                    'RequestId': 'request-id',
+                    'HTTPStatusCode': 200,
+                    'HTTPHeaders': headers,
+                }
+            },
+        )
 
 
 class TestHandlesInvalidXMLResponses(unittest.TestCase):
@@ -769,11 +828,13 @@ class TestHandlesInvalidXMLResponses(uni
         parser = parsers.QueryParser()
         output_shape = None
         # The XML body should be in the error message.
-        with self.assertRaisesRegex(parsers.ResponseParserError,
-                                    '<DeleteTagsResponse'):
+        with self.assertRaisesRegex(
+            parsers.ResponseParserError, '<DeleteTagsResponse'
+        ):
             parser.parse(
                 {'body': invalid_xml, 'headers': {}, 'status_code': 200},
-                output_shape)
+                output_shape,
+            )
 
 
 class TestRESTXMLResponses(unittest.TestCase):
@@ -795,25 +856,27 @@ class TestRESTXMLResponses(unittest.Test
             '</OperationName>'
         )
         builder = model.DenormalizedStructureBuilder()
-        output_shape = builder.with_members({
-            'Foo': {
-                'type': 'structure',
-                'members': {
-                    'Bar': {
-                        'type': 'string',
-                    }
+        output_shape = builder.with_members(
+            {
+                'Foo': {
+                    'type': 'structure',
+                    'members': {
+                        'Bar': {
+                            'type': 'string',
+                        }
+                    },
                 }
             }
-        }).build_model()
+        ).build_model()
         parsed = parser.parse(
             {'body': body, 'headers': headers, 'status_code': 200},
-            output_shape)
+            output_shape,
+        )
         # Ensure the first element is used out of the list.
         self.assertEqual(parsed['Foo'], {'Bar': 'first_value'})
 
 
 class TestEventStreamParsers(unittest.TestCase):
-
     def setUp(self):
         self.parser = parsers.EventStreamXMLParser()
         self.output_shape = model.StructureShape(
@@ -827,88 +890,85 @@ class TestEventStreamParsers(unittest.Te
                     'EventC': {'shape': 'EventCStructure'},
                     'EventD': {'shape': 'EventDStructure'},
                     'EventException': {'shape': 'ExceptionShape'},
-                }
+                },
             },
-            model.ShapeResolver({
-                'EventAStructure': {
-                    'event': True,
-                    'type': 'structure',
-                    'members': {
-                        'Stats': {
-                            'shape': 'StatsStructure',
-                            'eventpayload': True
+            model.ShapeResolver(
+                {
+                    'EventAStructure': {
+                        'event': True,
+                        'type': 'structure',
+                        'members': {
+                            'Stats': {
+                                'shape': 'StatsStructure',
+                                'eventpayload': True,
+                            },
+                            'Header': {
+                                'shape': 'IntShape',
+                                'eventheader': True,
+                            },
                         },
-                        'Header': {
-                            'shape': 'IntShape',
-                            'eventheader': True
-                        }
-                    }
-                },
-                'EventBStructure': {
-                    'event': True,
-                    'type': 'structure',
-                    'members': {
-                        'Body': {
-                            'shape': 'BlobShape',
-                            'eventpayload': True
-                        }
-                    }
-                },
-                'EventCStructure': {
-                    'event': True,
-                    'type': 'structure',
-                    'members': {
-                        'Body': {
-                            'shape': 'StringShape',
-                            'eventpayload': True
-                        }
-                    }
-                },
-                'EventDStructure': {
-                    'event': True,
-                    'type': 'structure',
-                    'members': {
-                        'StringField': {'shape': 'StringShape'},
-                        'IntField': {'shape': 'IntShape'},
-                        'Header': {
-                            'shape': 'IntShape',
-                            'eventheader': True
-                        }
-                    }
-                },
-                'StatsStructure': {
-                    'type': 'structure',
-                    'members': {
-                        'StringField': {'shape': 'StringShape'},
-                        'IntField': {'shape': 'IntShape'}
-                    }
-                },
-                'BlobShape': {'type': 'blob'},
-                'StringShape': {'type': 'string'},
-                'IntShape': {'type': 'integer'},
-                'ExceptionShape': {
-                    'exception': True,
-                    'type': 'structure',
-                    'members': {
-                        'message': {'shape': 'StringShape'}
-                    }
-                },
-            })
+                    },
+                    'EventBStructure': {
+                        'event': True,
+                        'type': 'structure',
+                        'members': {
+                            'Body': {
+                                'shape': 'BlobShape',
+                                'eventpayload': True,
+                            }
+                        },
+                    },
+                    'EventCStructure': {
+                        'event': True,
+                        'type': 'structure',
+                        'members': {
+                            'Body': {
+                                'shape': 'StringShape',
+                                'eventpayload': True,
+                            }
+                        },
+                    },
+                    'EventDStructure': {
+                        'event': True,
+                        'type': 'structure',
+                        'members': {
+                            'StringField': {'shape': 'StringShape'},
+                            'IntField': {'shape': 'IntShape'},
+                            'Header': {
+                                'shape': 'IntShape',
+                                'eventheader': True,
+                            },
+                        },
+                    },
+                    'StatsStructure': {
+                        'type': 'structure',
+                        'members': {
+                            'StringField': {'shape': 'StringShape'},
+                            'IntField': {'shape': 'IntShape'},
+                        },
+                    },
+                    'BlobShape': {'type': 'blob'},
+                    'StringShape': {'type': 'string'},
+                    'IntShape': {'type': 'integer'},
+                    'ExceptionShape': {
+                        'exception': True,
+                        'type': 'structure',
+                        'members': {'message': {'shape': 'StringShape'}},
+                    },
+                }
+            ),
         )
 
     def parse_event(self, headers=None, body=None, status_code=200):
         response_dict = {
             'body': body,
             'headers': headers,
-            'status_code': status_code
+            'status_code': status_code,
         }
         return self.parser.parse(response_dict, self.output_shape)
 
     def test_parses_event_xml(self):
-        headers = {
-            'Header': 123,
-            ':event-type': 'EventA'
-        }
+        headers = {'Header': 123, ':event-type': 'EventA'}
         body = (
             b'<Stats xmlns="">'
             b'  <StringField>abcde</StringField>'
@@ -919,26 +979,15 @@ class TestEventStreamParsers(unittest.Te
         expected = {
             'EventA': {
                 'Header': 123,
-                'Stats': {
-                    'StringField': 'abcde',
-                    'IntField': 1234
-                }
+                'Stats': {'StringField': 'abcde', 'IntField': 1234},
             }
         }
         self.assertEqual(parsed, expected)
 
     def test_parses_event_bad_xml(self):
-        headers = {
-            'Header': 123,
-            ':event-type': 'EventA'
-        }
+        headers = {'Header': 123, ':event-type': 'EventA'}
         parsed = self.parse_event(headers, b'')
-        expected = {
-            'EventA': {
-                'Header': 123,
-                'Stats': {}
-            }
-        }
+        expected = {'EventA': {'Header': 123, 'Stats': {}}}
         self.assertEqual(parsed, expected)
 
     def test_parses_event_blob(self):
@@ -950,14 +999,11 @@ class TestEventStreamParsers(unittest.Te
     def test_parses_event_string(self):
         headers = {':event-type': 'EventC'}
         parsed = self.parse_event(headers, b'blob')
-        expected = {'EventC': {'Body': u'blob'}}
+        expected = {'EventC': {'Body': 'blob'}}
         self.assertEqual(parsed, expected)
 
     def test_parses_payload_implicit(self):
-        headers = {
-            'Header': 123,
-            ':event-type': 'EventD'
-        }
+        headers = {'Header': 123, ':event-type': 'EventD'}
         body = (
             b'<EventD xmlns="">'
             b'  <StringField>abcde</StringField>'
@@ -966,11 +1012,7 @@ class TestEventStreamParsers(unittest.Te
         )
         parsed = self.parse_event(headers, body)
         expected = {
-            'EventD': {
-                'Header': 123,
-                'StringField': 'abcde',
-                'IntField': 1234
-            }
+            'EventD': {'Header': 123, 'StringField': 'abcde', 'IntField': 1234}
         }
         self.assertEqual(parsed, expected)
 
@@ -980,16 +1022,11 @@ class TestEventStreamParsers(unittest.Te
         headers = {
             ':message-type': 'error',
             ':error-code': error_code,
-            ':error-message': error_message
+            ':error-message': error_message,
         }
         body = b''
         parsed = self.parse_event(headers, body, status_code=400)
-        expected = {
-            'Error': {
-                'Code': error_code,
-                'Message': error_message
-            }
-        }
+        expected = {'Error': {'Code': error_code, 'Message': error_message}}
         self.assertEqual(parsed, expected)
 
     def test_parses_exception_event(self):
@@ -1002,29 +1039,16 @@ class TestEventStreamParsers(unittest.Te
         body = b'{"message": "You did something wrong"}'
         parsed = self.parse_event(headers, body, status_code=400)
         expected = {
-            'Error': {
-                'Code': error_code,
-                'Message': 'You did something wrong'
-            }
+            'Error': {'Code': error_code, 'Message': 'You did something wrong'}
         }
         self.assertEqual(parsed, expected)
 
     def test_parses_event_json(self):
         self.parser = parsers.EventStreamJSONParser()
         headers = {':event-type': 'EventD'}
-        body = (
-            b'{'
-            b'  "StringField": "abcde",'
-            b'  "IntField": 1234'
-            b'}'
-        )
+        body = b'{' b'  "StringField": "abcde",' b'  "IntField": 1234' b'}'
         parsed = self.parse_event(headers, body)
-        expected = {
-            'EventD': {
-                'StringField': 'abcde',
-                'IntField': 1234
-            }
-        }
+        expected = {'EventD': {'StringField': 'abcde', 'IntField': 1234}}
         self.assertEqual(parsed, expected)
 
 
@@ -1044,9 +1068,9 @@ class TestParseErrorResponses(unittest.T
                     'ModeledField': {
                         'shape': 'StringType',
                     }
-                }
+                },
             },
-            model.ShapeResolver({'StringType': {'type': 'string'}})
+            model.ShapeResolver({'StringType': {'type': 'string'}}),
         )
 
     def test_response_metadata_errors_for_json_protocol(self):
@@ -1057,9 +1081,7 @@ class TestParseErrorResponses(unittest.T
                  "message":"this is a message"}
                 """,
             "status_code": 400,
-            "headers": {
-                "x-amzn-requestid": "request-id"
-            }
+            "headers": {"x-amzn-requestid": "request-id"},
         }
         parsed = parser.parse(response, None)
         # Even (especially) on an error condition, the
@@ -1081,9 +1103,7 @@ class TestParseErrorResponses(unittest.T
                  "message":"this is a message"}
                 """,
             "status_code": 400,
-            "headers": {
-                "x-amzn-requestid": "request-id"
-            }
+            "headers": {"x-amzn-requestid": "request-id"},
         }
         parsed = parser.parse(response, None)
         self.assertIn('Error', parsed)
@@ -1183,199 +1203,219 @@ class TestParseErrorResponses(unittest.T
 
     def test_parse_error_response_for_query_protocol(self):
         body = (
-            '<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">'
-            '  <Error>'
-            '    <Type>Sender</Type>'
-            '    <Code>InvalidInput</Code>'
-            '    <Message>ARN asdf is not valid.</Message>'
-            '  </Error>'
-            '  <RequestId>request-id</RequestId>'
-            '</ErrorResponse>'
-        ).encode('utf-8')
+            b'<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">'
+            b'  <Error>'
+            b'    <Type>Sender</Type>'
+            b'    <Code>InvalidInput</Code>'
+            b'    <Message>ARN asdf is not valid.</Message>'
+            b'  </Error>'
+            b'  <RequestId>request-id</RequestId>'
+            b'</ErrorResponse>'
+        )
         parser = parsers.QueryParser()
-        parsed = parser.parse({
-            'body': body, 'headers': {}, 'status_code': 400}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': {}, 'status_code': 400}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': 'InvalidInput',
-            'Message': 'ARN asdf is not valid.',
-            'Type': 'Sender',
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': 'InvalidInput',
+                'Message': 'ARN asdf is not valid.',
+                'Type': 'Sender',
+            },
+        )
 
     def test_can_parse_sdb_error_response_query_protocol(self):
         body = (
-            '<OperationNameResponse>'
-            '    <Errors>'
-            '        <Error>'
-            '            <Code>1</Code>'
-            '            <Message>msg</Message>'
-            '        </Error>'
-            '    </Errors>'
-            '    <RequestId>abc-123</RequestId>'
-            '</OperationNameResponse>'
-        ).encode('utf-8')
+            b'<OperationNameResponse>'
+            b'    <Errors>'
+            b'        <Error>'
+            b'            <Code>1</Code>'
+            b'            <Message>msg</Message>'
+            b'        </Error>'
+            b'    </Errors>'
+            b'    <RequestId>abc-123</RequestId>'
+            b'</OperationNameResponse>'
+        )
         parser = parsers.QueryParser()
-        parsed = parser.parse({
-            'body': body, 'headers': {}, 'status_code': 500}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': {}, 'status_code': 500}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': '1',
-            'Message': 'msg'
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'RequestId': 'abc-123',
-            'HTTPStatusCode': 500,
-            'HTTPHeaders': {}
-        })
+        self.assertEqual(parsed['Error'], {'Code': '1', 'Message': 'msg'})
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {'RequestId': 'abc-123', 'HTTPStatusCode': 500, 'HTTPHeaders': {}},
+        )
 
     def test_can_parser_ec2_errors(self):
         body = (
-            '<Response>'
-            '  <Errors>'
-            '    <Error>'
-            '      <Code>InvalidInstanceID.NotFound</Code>'
-            '      <Message>The instance ID i-12345 does not exist</Message>'
-            '    </Error>'
-            '  </Errors>'
-            '  <RequestID>06f382b0-d521-4bb6-988c-ca49d5ae6070</RequestID>'
-            '</Response>'
-        ).encode('utf-8')
+            b'<Response>'
+            b'  <Errors>'
+            b'    <Error>'
+            b'      <Code>InvalidInstanceID.NotFound</Code>'
+            b'      <Message>The instance ID i-12345 does not exist</Message>'
+            b'    </Error>'
+            b'  </Errors>'
+            b'  <RequestID>06f382b0-d521-4bb6-988c-ca49d5ae6070</RequestID>'
+            b'</Response>'
+        )
         parser = parsers.EC2QueryParser()
-        parsed = parser.parse({
-            'body': body, 'headers': {}, 'status_code': 400}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': {}, 'status_code': 400}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': 'InvalidInstanceID.NotFound',
-            'Message': 'The instance ID i-12345 does not exist',
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': 'InvalidInstanceID.NotFound',
+                'Message': 'The instance ID i-12345 does not exist',
+            },
+        )
 
     def test_can_parse_rest_xml_errors(self):
         body = (
-            '<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">'
-            '  <Error>'
-            '    <Type>Sender</Type>'
-            '    <Code>NoSuchHostedZone</Code>'
-            '    <Message>No hosted zone found with ID: foobar</Message>'
-            '  </Error>'
-            '  <RequestId>bc269cf3-d44f-11e5-8779-2d21c30eb3f1</RequestId>'
-            '</ErrorResponse>'
-        ).encode('utf-8')
+            b'<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">'
+            b'  <Error>'
+            b'    <Type>Sender</Type>'
+            b'    <Code>NoSuchHostedZone</Code>'
+            b'    <Message>No hosted zone found with ID: foobar</Message>'
+            b'  </Error>'
+            b'  <RequestId>bc269cf3-d44f-11e5-8779-2d21c30eb3f1</RequestId>'
+            b'</ErrorResponse>'
+        )
         parser = parsers.RestXMLParser()
-        parsed = parser.parse({
-            'body': body, 'headers': {}, 'status_code': 400}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': {}, 'status_code': 400}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': 'NoSuchHostedZone',
-            'Message': 'No hosted zone found with ID: foobar',
-            'Type': 'Sender',
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': 'NoSuchHostedZone',
+                'Message': 'No hosted zone found with ID: foobar',
+                'Type': 'Sender',
+            },
+        )
 
     def test_can_parse_rest_json_errors(self):
-        body = (
-            '{"Message":"Function not found: foo","Type":"User"}'
-        ).encode('utf-8')
+        body = b'{"Message":"Function not found: foo","Type":"User"}'
         headers = {
             'x-amzn-requestid': 'request-id',
             'x-amzn-errortype': 'ResourceNotFoundException:http://url/',
         }
         parser = parsers.RestJSONParser()
-        parsed = parser.parse({
-            'body': body, 'headers': headers, 'status_code': 400}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': headers, 'status_code': 400}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': 'ResourceNotFoundException',
-            'Message': 'Function not found: foo',
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': 'ResourceNotFoundException',
+                'Message': 'Function not found: foo',
+            },
+        )
 
     def test_error_response_with_no_body_rest_json(self):
         parser = parsers.RestJSONParser()
         response = b''
         headers = {'content-length': '0', 'connection': 'keep-alive'}
         output_shape = None
-        parsed = parser.parse({'body': response, 'headers': headers,
-                               'status_code': 504}, output_shape)
+        parsed = parser.parse(
+            {'body': response, 'headers': headers, 'status_code': 504},
+            output_shape,
+        )
 
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': '504',
-            'Message': 'Gateway Timeout'
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'HTTPStatusCode': 504,
-            'HTTPHeaders': headers
-        })
+        self.assertEqual(
+            parsed['Error'], {'Code': '504', 'Message': 'Gateway Timeout'}
+        )
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {'HTTPStatusCode': 504, 'HTTPHeaders': headers},
+        )
 
     def test_error_response_with_string_body_rest_json(self):
         parser = parsers.RestJSONParser()
         response = b'HTTP content length exceeded 1049600 bytes.'
         headers = {'content-length': '0', 'connection': 'keep-alive'}
         output_shape = None
-        parsed = parser.parse({'body': response, 'headers': headers,
-                               'status_code': 413}, output_shape)
+        parsed = parser.parse(
+            {'body': response, 'headers': headers, 'status_code': 413},
+            output_shape,
+        )
 
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': '413',
-            'Message': response.decode('utf-8')
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'HTTPStatusCode': 413,
-            'HTTPHeaders': headers
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {'Code': '413', 'Message': response.decode('utf-8')},
+        )
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {'HTTPStatusCode': 413, 'HTTPHeaders': headers},
+        )
 
     def test_error_response_with_xml_body_rest_json(self):
         parser = parsers.RestJSONParser()
         response = (
-            '<AccessDeniedException>'
-            '   <Message>Unable to determine service/operation name to be authorized</Message>'
-            '</AccessDeniedException>'
-        ).encode('utf-8')
+            b'<AccessDeniedException>'
+            b'   <Message>Unable to determine service/operation name to be authorized</Message>'
+            b'</AccessDeniedException>'
+        )
         headers = {'content-length': '0', 'connection': 'keep-alive'}
         output_shape = None
-        parsed = parser.parse({'body': response, 'headers': headers,
-                               'status_code': 403}, output_shape)
+        parsed = parser.parse(
+            {'body': response, 'headers': headers, 'status_code': 403},
+            output_shape,
+        )
 
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': '403',
-            'Message': response.decode('utf-8')
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'HTTPStatusCode': 403,
-            'HTTPHeaders': headers
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {'Code': '403', 'Message': response.decode('utf-8')},
+        )
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {'HTTPStatusCode': 403, 'HTTPHeaders': headers},
+        )
 
     def test_s3_error_response(self):
         body = (
-            '<Error>'
-            '  <Code>NoSuchBucket</Code>'
-            '  <Message>error message</Message>'
-            '  <BucketName>asdf</BucketName>'
-            '  <RequestId>EF1EF43A74415102</RequestId>'
-            '  <HostId>hostid</HostId>'
-            '</Error>'
-        ).encode('utf-8')
-        headers = {
-            'x-amz-id-2': 'second-id',
-            'x-amz-request-id': 'request-id'
-        }
+            b'<Error>'
+            b'  <Code>NoSuchBucket</Code>'
+            b'  <Message>error message</Message>'
+            b'  <BucketName>asdf</BucketName>'
+            b'  <RequestId>EF1EF43A74415102</RequestId>'
+            b'  <HostId>hostid</HostId>'
+            b'</Error>'
+        )
+        headers = {'x-amz-id-2': 'second-id', 'x-amz-request-id': 'request-id'}
         parser = parsers.RestXMLParser()
         parsed = parser.parse(
-            {'body': body, 'headers': headers, 'status_code': 400}, None)
+            {'body': body, 'headers': headers, 'status_code': 400}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': 'NoSuchBucket',
-            'Message': 'error message',
-            'BucketName': 'asdf',
-            # We don't want the RequestId/HostId because they're already
-            # present in the ResponseMetadata key.
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'RequestId': 'request-id',
-            'HostId': 'second-id',
-            'HTTPStatusCode': 400,
-            'HTTPHeaders': headers
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': 'NoSuchBucket',
+                'Message': 'error message',
+                'BucketName': 'asdf',
+                # We don't want the RequestId/HostId because they're already
+                # present in the ResponseMetadata key.
+            },
+        )
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {
+                'RequestId': 'request-id',
+                'HostId': 'second-id',
+                'HTTPStatusCode': 400,
+                'HTTPHeaders': headers,
+            },
+        )
 
     def test_s3_error_response_with_no_body(self):
         # If you try to HeadObject a key that does not exist,
@@ -1383,36 +1423,43 @@ class TestParseErrorResponses(unittest.T
         # we expect that we will use Code/Message from the
         # HTTP status code.
         body = ''
-        headers = {
-            'x-amz-id-2': 'second-id',
-            'x-amz-request-id': 'request-id'
-        }
+        headers = {'x-amz-id-2': 'second-id', 'x-amz-request-id': 'request-id'}
         parser = parsers.RestXMLParser()
         parsed = parser.parse(
-            {'body': body, 'headers': headers, 'status_code': 404}, None)
+            {'body': body, 'headers': headers, 'status_code': 404}, None
+        )
         self.assertIn('Error', parsed)
-        self.assertEqual(parsed['Error'], {
-            'Code': '404',
-            'Message': 'Not Found',
-        })
-        self.assertEqual(parsed['ResponseMetadata'], {
-            'RequestId': 'request-id',
-            'HostId': 'second-id',
-            'HTTPStatusCode': 404,
-            'HTTPHeaders': headers
-        })
+        self.assertEqual(
+            parsed['Error'],
+            {
+                'Code': '404',
+                'Message': 'Not Found',
+            },
+        )
+        self.assertEqual(
+            parsed['ResponseMetadata'],
+            {
+                'RequestId': 'request-id',
+                'HostId': 'second-id',
+                'HTTPStatusCode': 404,
+                'HTTPHeaders': headers,
+            },
+        )
 
     def test_can_parse_glacier_error_response(self):
-        body = (b'{"code":"AccessDeniedException","type":"Client","message":'
-                b'"Access denied"}')
-        headers = {
-             'x-amzn-requestid': 'request-id'
-        }
+        body = (
+            b'{"code":"AccessDeniedException","type":"Client","message":'
+            b'"Access denied"}'
+        )
+        headers = {'x-amzn-requestid': 'request-id'}
         parser = parsers.RestJSONParser()
         parsed = parser.parse(
-            {'body': body, 'headers': headers, 'status_code': 400}, None)
-        self.assertEqual(parsed['Error'], {'Message': 'Access denied',
-                                           'Code': 'AccessDeniedException'})
+            {'body': body, 'headers': headers, 'status_code': 400}, None
+        )
+        self.assertEqual(
+            parsed['Error'],
+            {'Message': 'Access denied', 'Code': 'AccessDeniedException'},
+        )
 
     def test_can_parse_restjson_error_code(self):
         body = b'''{
@@ -1422,26 +1469,30 @@ class TestParseErrorResponses(unittest.T
             "__type": "#WasUnableToParseThis",
             "message": "blah",
             "deletes": 0}'''
-        headers = {
-             'x-amzn-requestid': 'request-id'
-        }
+        headers = {'x-amzn-requestid': 'request-id'}
         parser = parsers.RestJSONParser()
         parsed = parser.parse(
-            {'body': body, 'headers': headers, 'status_code': 400}, None)
-        self.assertEqual(parsed['Error'], {'Message': 'blah',
-                                           'Code': 'WasUnableToParseThis'})
+            {'body': body, 'headers': headers, 'status_code': 400}, None
+        )
+        self.assertEqual(
+            parsed['Error'],
+            {'Message': 'blah', 'Code': 'WasUnableToParseThis'},
+        )
 
     def test_can_parse_with_case_insensitive_keys(self):
-        body = (b'{"Code":"AccessDeniedException","type":"Client","Message":'
-                b'"Access denied"}')
-        headers = {
-             'x-amzn-requestid': 'request-id'
-        }
+        body = (
+            b'{"Code":"AccessDeniedException","type":"Client","Message":'
+            b'"Access denied"}'
+        )
+        headers = {'x-amzn-requestid': 'request-id'}
         parser = parsers.RestJSONParser()
         parsed = parser.parse(
-            {'body': body, 'headers': headers, 'status_code': 400}, None)
-        self.assertEqual(parsed['Error'], {'Message': 'Access denied',
-                                           'Code': 'AccessDeniedException'})
+            {'body': body, 'headers': headers, 'status_code': 400}, None
+        )
+        self.assertEqual(
+            parsed['Error'],
+            {'Message': 'Access denied', 'Code': 'AccessDeniedException'},
+        )
 
     def test_can_parse_rest_json_modeled_fields(self):
         body = (
@@ -1545,37 +1596,40 @@ class TestParseErrorResponses(unittest.T
         # We should be able to handle this gracefully and still at least
         # populate a "Message" key so that consumers don't have to
         # conditionally check for this.
-        body =  (
-            '<ErrorResponse>'
-            '  <Error>'
-            '    <Type>Sender</Type>'
-            '    <Code>InvalidInput</Code>'
-            '  </Error>'
-            '  <RequestId>id</RequestId>'
-            '</ErrorResponse>'
-        ).encode('utf-8')
+        body = (
+            b'<ErrorResponse>'
+            b'  <Error>'
+            b'    <Type>Sender</Type>'
+            b'    <Code>InvalidInput</Code>'
+            b'  </Error>'
+            b'  <RequestId>id</RequestId>'
+            b'</ErrorResponse>'
+        )
         parser = parsers.RestXMLParser()
-        parsed = parser.parse({
-            'body': body, 'headers': {}, 'status_code': 400}, None)
+        parsed = parser.parse(
+            {'body': body, 'headers': {}, 'status_code': 400}, None
+        )
         error = parsed['Error']
         self.assertEqual(error['Code'], 'InvalidInput')
         # Even though there's no <Message /> we should
         # still populate an empty string.
         self.assertEqual(error['Message'], '')
 
+
 def _generic_test_bodies():
     generic_html_body = (
-        '<html><body><b>Http/1.1 Service Unavailable</b></body></html>'
-    ).encode('utf-8')
+        b'<html><body><b>Http/1.1 Service Unavailable</b></body></html>'
+    )
     empty_body = b''
     none_body = None
 
     return [generic_html_body, empty_body, none_body]
 
-@pytest.mark.parametrize("parser, body",
+
+@pytest.mark.parametrize(
+    "parser, body",
     itertools.product(
-        parsers.PROTOCOL_PARSERS.values(),
-        _generic_test_bodies()
+        parsers.PROTOCOL_PARSERS.values(), _generic_test_bodies()
     ),
 )
 def test_can_handle_generic_error_message(parser, body):
diff -pruN 2.23.6-1/tests/unit/botocore/test_protocols.py 2.31.35-1/tests/unit/botocore/test_protocols.py
--- 2.23.6-1/tests/unit/botocore/test_protocols.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_protocols.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,44 +37,54 @@ failed test.
 To run tests from only a single file, you can set the
 BOTOCORE_TEST env var::
 
-    BOTOCORE_TEST=tests/unit/compliance/input/json.json pytest tests/unit/test_protocols.py
+    BOTOCORE_TEST=tests/unit/protocols/input/json.json pytest tests/unit/test_protocols.py
 
 To run a single test suite you can set the BOTOCORE_TEST_ID env var:
 
-    BOTOCORE_TEST=tests/unit/compliance/input/json.json BOTOCORE_TEST_ID=5 \
+    BOTOCORE_TEST=tests/unit/protocols/input/json.json BOTOCORE_TEST_ID=5 \
         pytest tests/unit/test_protocols.py
 
 To run a single test case in a suite (useful when debugging a single test), you
 can set the BOTOCORE_TEST_ID env var with the ``suite_id:test_id`` syntax.
 
-    BOTOCORE_TEST_ID=5:1 pytest test/unit/test_protocols.py
+    BOTOCORE_TEST_ID=5:1 pytest tests/unit/test_protocols.py
 
 """
-import os
-import copy
-from enum import Enum
 
+import base64
+import copy
+import os
+import xml.etree.ElementTree as ET
 from base64 import b64decode
-from dateutil.tz import tzutc
+from enum import Enum
 
 import pytest
-
-from botocore.awsrequest import HeadersDict
-from botocore.compat import json, OrderedDict, urlsplit
+from botocore.awsrequest import HeadersDict, prepare_request_dict
+from botocore.compat import OrderedDict, json, urlsplit
 from botocore.eventstream import EventStream
-from botocore.model import ServiceModel, OperationModel
-from botocore.serialize import EC2Serializer, QuerySerializer, \
-        JSONSerializer, RestJSONSerializer, RestXMLSerializer
-from botocore.parsers import QueryParser, JSONParser, \
-        RestJSONParser, RestXMLParser, EC2QueryParser
+from botocore.model import NoShapeFoundError, OperationModel, ServiceModel
+from botocore.parsers import (
+    EC2QueryParser,
+    JSONParser,
+    QueryParser,
+    RestJSONParser,
+    RestXMLParser,
+    RpcV2CBORParser,
+)
+from botocore.serialize import (
+    EC2Serializer,
+    JSONSerializer,
+    QuerySerializer,
+    RestJSONSerializer,
+    RestXMLSerializer,
+    RpcV2CBORSerializer,
+)
 from botocore.utils import parse_timestamp, percent_encode_sequence
-from botocore.awsrequest import prepare_request_dict
-from calendar import timegm
-from botocore.model import NoShapeFoundError
+from dateutil.tz import tzutc
 
 TEST_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)),
-    'protocols')
+    os.path.dirname(os.path.abspath(__file__)), 'protocols'
+)
 NOT_SPECIFIED = object()
 PROTOCOL_SERIALIZERS = {
     'ec2': EC2Serializer,
@@ -82,6 +92,7 @@ PROTOCOL_SERIALIZERS = {
     'json': JSONSerializer,
     'rest-json': RestJSONSerializer,
     'rest-xml': RestXMLSerializer,
+    'smithy-rpc-v2-cbor': RpcV2CBORSerializer,
 }
 PROTOCOL_PARSERS = {
     'ec2': EC2QueryParser,
@@ -89,10 +100,9 @@ PROTOCOL_PARSERS = {
     'json': JSONParser,
     'rest-json': RestJSONParser,
     'rest-xml': RestXMLParser,
+    'smithy-rpc-v2-cbor': RpcV2CBORParser,
 }
-PROTOCOL_TEST_BLACKLIST = [
-    'Idempotency token auto fill'
-]
+IGNORE_LIST_FILENAME = "protocol-tests-ignore-list.json"
 
 
 class TestType(Enum):
@@ -103,6 +113,12 @@ class TestType(Enum):
     OUTPUT = "output"
 
 
+def get_protocol_test_ignore_list():
+    ignore_list_path = os.path.join(TEST_DIR, IGNORE_LIST_FILENAME)
+    with open(ignore_list_path) as f:
+        return json.load(f)
+
+
 def _compliance_tests(test_type=None):
     inp = test_type is None or test_type is TestType.INPUT
     out = test_type is None or test_type is TestType.OUTPUT
@@ -110,38 +126,44 @@ def _compliance_tests(test_type=None):
     for full_path in _walk_files():
         if full_path.endswith('.json'):
             for model, case, basename in _load_cases(full_path):
-                if model.get('description') in PROTOCOL_TEST_BLACKLIST:
+                protocol = basename.replace('.json', '')
+                if _should_ignore_test(
+                    protocol,
+                    "input" if inp else "output",
+                    model['description'],
+                    case.get('id'),
+                ):
                     continue
-                if 'params' in case and inp:
-                    yield model, case, basename
-                elif 'response' in case and out:
+                if ('params' in case and inp) or ('response' in case and out):
                     yield model, case, basename
 
 
 @pytest.mark.parametrize(
-    "json_description, case, basename",
-    _compliance_tests(TestType.INPUT)
+    "json_description, case, basename", _compliance_tests(TestType.INPUT)
 )
 def test_input_compliance(json_description, case, basename):
     service_description = copy.deepcopy(json_description)
     service_description['operations'] = {
-        case.get('name', 'OperationName'): case,
+        case.get('given', {}).get('name', 'OperationName'): case,
     }
     model = ServiceModel(service_description)
     protocol_type = model.metadata['protocol']
     try:
         protocol_serializer = PROTOCOL_SERIALIZERS[protocol_type]
     except KeyError:
-        raise RuntimeError("Unknown protocol: %s" % protocol_type)
+        raise RuntimeError(f"Unknown protocol: {protocol_type}")
     serializer = protocol_serializer()
     serializer.MAP_TYPE = OrderedDict
     operation_model = OperationModel(case['given'], model)
+    case['params'] = _convert_strings_to_special_float(case['params'])
     request = serializer.serialize_to_request(case['params'], operation_model)
     _serialize_request_description(request)
     client_endpoint = service_description.get('clientEndpoint')
     try:
         _assert_request_body_is_bytes(request['body'])
-        _assert_requests_equal(request, case['serialized'])
+        _assert_requests_equal(
+            request, case['serialized'], protocol_type, operation_model
+        )
         _assert_endpoints_equal(request, case['serialized'], client_endpoint)
     except AssertionError as e:
         _input_failure_message(protocol_type, case, request, e)
@@ -149,8 +171,10 @@ def test_input_compliance(json_descripti
 
 def _assert_request_body_is_bytes(body):
     if not isinstance(body, bytes):
-        raise AssertionError("Expected body to be serialized as type "
-                             "bytes(), instead got: %s" % type(body))
+        raise AssertionError(
+            "Expected body to be serialized as type "
+            f"bytes(), instead got: {type(body)}"
+        )
 
 
 def _assert_endpoints_equal(actual, expected, endpoint):
@@ -161,20 +185,20 @@ def _assert_endpoints_equal(actual, expe
     assert_equal(actual_host, expected['host'], 'Host')
 
 
-class MockRawResponse(object):
+class MockRawResponse:
     def __init__(self, data):
         self._data = b64decode(data)
 
     def stream(self):
         yield self._data
 
+
 @pytest.mark.parametrize(
-    "json_description, case, basename",
-    _compliance_tests(TestType.OUTPUT)
+    "json_description, case, basename", _compliance_tests(TestType.OUTPUT)
 )
 def test_output_compliance(json_description, case, basename):
     service_description = copy.deepcopy(json_description)
-    operation_name = case.get('name', 'OperationName')
+    operation_name = case.get('given', {}).get('name', 'OperationName')
     service_description['operations'] = {
         operation_name: case,
     }
@@ -182,23 +206,38 @@ def test_output_compliance(json_descript
     try:
         model = ServiceModel(service_description)
         operation_model = OperationModel(case['given'], model)
-        parser = PROTOCOL_PARSERS[model.metadata['protocol']](
-            timestamp_parser=_compliance_timestamp_parser)
+        protocol = model.metadata['protocol']
+        parser = PROTOCOL_PARSERS[protocol](
+            timestamp_parser=_compliance_timestamp_parser
+        )
         # We load the json as utf-8, but the response parser is at the
         # botocore boundary, so it expects to work with bytes.
-        body_bytes = case['response']['body'].encode('utf-8')
-        case['response']['body'] = body_bytes
+        # If a test case doesn't define a response body, set it to `None`.
+        if 'body' in case['response']:
+            body_bytes = case['response']['body'].encode('utf-8')
+            case['response']['body'] = body_bytes
+        else:
+            case['response']['body'] = (
+                b'' if protocol != "query" else b'<xml/>'
+            )
         # We need the headers to be case insensitive
-        headers = HeadersDict(case['response']['headers'])
-        case['response']['headers'] = headers
+        # If a test case doesn't define response headers, set it to an empty `HeadersDict`.
+        case['response']['headers'] = HeadersDict(
+            case['response'].get('headers', {})
+        )
         # If this is an event stream fake the raw streamed response
         if operation_model.has_event_stream_output:
             case['response']['body'] = MockRawResponse(body_bytes)
         if 'error' in case:
             output_shape = operation_model.output_shape
+            if protocol == 'smithy-rpc-v2-cbor':
+                case['response']['body'] = base64.b64decode(
+                    case['response']['body']
+                )
             parsed = parser.parse(case['response'], output_shape)
             try:
-                error_shape = model.shape_for(parsed['Error']['Code'])
+                error_code = parsed.get("Error", {}).get("Code")
+                error_shape = model.shape_for_error_code(error_code)
             except NoShapeFoundError:
                 error_shape = None
             if error_shape is not None:
@@ -206,15 +245,28 @@ def test_output_compliance(json_descript
                 parsed.update(error_parse)
         else:
             output_shape = operation_model.output_shape
+            if protocol == 'query' and output_shape and output_shape.members:
+                output_shape.serialization['resultWrapper'] = (
+                    f'{operation_name}Result'
+                )
+            elif protocol == 'smithy-rpc-v2-cbor':
+                case['response']['body'] = base64.b64decode(
+                    case['response']['body']
+                )
             parsed = parser.parse(case['response'], output_shape)
         parsed = _fixup_parsed_result(parsed)
     except Exception as e:
         msg = (
-            "\nFailed to run test  : %s\n"
-            "Protocol            : %s\n"
-            "Description         : %s (%s:%s)\n" % (
-                e, model.metadata['protocol'],
-                case['description'], case['suite_id'], case['test_id']))
+            "\nFailed to run test  : {}\n"
+            "Protocol            : {}\n"
+            "Description         : {} ({}:{})\n".format(
+                e,
+                model.metadata['protocol'],
+                case['description'],
+                case['suite_id'],
+                case['test_id'],
+            )
+        )
         raise AssertionError(msg)
     try:
         if 'error' in case:
@@ -229,8 +281,9 @@ def test_output_compliance(json_descript
             expected_result = case['result']
         assert_equal(parsed, expected_result, "Body")
     except Exception as e:
-        _output_failure_message(model.metadata['protocol'],
-                                case, parsed, expected_result, e)
+        _output_failure_message(
+            model.metadata['protocol'], case, parsed, expected_result, e
+        )
 
 
 def _fixup_parsed_result(parsed):
@@ -265,6 +318,11 @@ def _fixup_parsed_result(parsed):
         for key in error_keys:
             if key not in ['Code', 'Message']:
                 del parsed['Error'][key]
+    # 5. Special float types. In the protocol test suite, certain special float
+    # types are represented as strings: "Infinity", "-Infinity", and "NaN".
+    # However, we parse these values as actual floats types, so we need to convert
+    # them back to their string representation.
+    parsed = _convert_special_floats_to_string(parsed)
     return parsed
 
 
@@ -285,48 +343,83 @@ def _convert_bytes_to_str(parsed):
         return parsed
 
 
+def _convert_strings_to_special_float(parsed):
+    for key, value in parsed.items():
+        if value == 'Infinity':
+            parsed[key] = float('Infinity')
+        elif value == '-Infinity':
+            parsed[key] = float('-Infinity')
+        elif value == 'NaN':
+            parsed[key] = float('NaN')
+    return parsed
+
+
+def _convert_special_floats_to_string(parsed):
+    for key, value in parsed.items():
+        if value == float('Infinity'):
+            parsed[key] = 'Infinity'
+        elif value == float('-Infinity'):
+            parsed[key] = '-Infinity'
+        elif value != value:
+            parsed[key] = 'NaN'
+    return parsed
+
+
 def _compliance_timestamp_parser(value):
     datetime = parse_timestamp(value)
     # Convert from our time zone to UTC
     datetime = datetime.astimezone(tzutc())
     # Convert to epoch.
-    return int(timegm(datetime.timetuple()))
+    return datetime.timestamp()
 
 
 def _output_failure_message(
-    protocol_type, case, actual_parsed,
-    expected_result, error
+    protocol_type, case, actual_parsed, expected_result, error
 ):
     j = _try_json_dump
     error_message = (
-        "\nDescription           : %s (%s:%s)\n"
-        "Protocol:             : %s\n"
-        "Given                 : %s\n"
-        "Response              : %s\n"
-        "Expected serialization: %s\n"
-        "Actual serialization  : %s\n"
-        "Assertion message     : %s\n" % (
-            case['description'], case['suite_id'],
-            case['test_id'], protocol_type,
-            j(case['given']), j(case['response']),
-            j(expected_result), j(actual_parsed), error))
+        "\nDescription           : {} ({}:{})\n"
+        "Protocol:             : {}\n"
+        "Given                 : {}\n"
+        "Response              : {}\n"
+        "Expected serialization: {}\n"
+        "Actual serialization  : {}\n"
+        "Assertion message     : {}\n".format(
+            case['description'],
+            case['suite_id'],
+            case['test_id'],
+            protocol_type,
+            j(case['given']),
+            j(case['response']),
+            j(expected_result),
+            j(actual_parsed),
+            error,
+        )
+    )
     raise AssertionError(error_message)
 
 
 def _input_failure_message(protocol_type, case, actual_request, error):
     j = _try_json_dump
     error_message = (
-        "\nDescription           : %s (%s:%s)\n"
-        "Protocol:             : %s\n"
-        "Given                 : %s\n"
-        "Params                : %s\n"
-        "Expected serialization: %s\n"
-        "Actual serialization  : %s\n"
-        "Assertion message     : %s\n" % (
-            case['description'], case['suite_id'],
-            case['test_id'], protocol_type,
-            j(case['given']), j(case['params']),
-            j(case['serialized']), j(actual_request), error))
+        "\nDescription           : {} ({}:{})\n"
+        "Protocol:             : {}\n"
+        "Given                 : {}\n"
+        "Params                : {}\n"
+        "Expected serialization: {}\n"
+        "Actual serialization  : {}\n"
+        "Assertion message     : {}\n".format(
+            case['description'],
+            case['suite_id'],
+            case['test_id'],
+            protocol_type,
+            j(case['given']),
+            j(case['params']),
+            j(case['serialized']),
+            j(actual_request),
+            error,
+        )
+    )
     raise AssertionError(error_message)
 
 
@@ -344,13 +437,9 @@ def assert_equal(first, second, prefix):
         assert first == second
     except Exception:
         try:
-            better = "%s (actual != expected)\n%s !=\n%s" % (
-                prefix,
-                json.dumps(first, indent=2),
-                json.dumps(second, indent=2))
+            better = f"{prefix} (actual != expected)\n{json.dumps(first, indent=2)} !=\n{json.dumps(second, indent=2)}"
         except (ValueError, TypeError):
-            better = "%s (actual != expected)\n%s !=\n%s" % (
-                prefix, first, second)
+            better = f"{prefix} (actual != expected)\n{first} !=\n{second}"
         raise AssertionError(better)
 
 
@@ -366,26 +455,105 @@ def _serialize_request_description(reque
             # test runner we need to handle the case where the url_path
             # already has query params.
             if '?' not in request_dict['url_path']:
-                request_dict['url_path'] += '?%s' % encoded
+                request_dict['url_path'] += f'?{encoded}'
             else:
-                request_dict['url_path'] += '&%s' % encoded
+                request_dict['url_path'] += f'&{encoded}'
 
 
-def _assert_requests_equal(actual, expected):
-    assert_equal(actual['body'], expected.get('body', '').encode('utf-8'),
-                 'Body value')
+def _assert_requests_equal(actual, expected, protocol, operation_model):
+    # For CBOR, we need to assert that the bodies are equal based on their parsed
+    # values to ensure we are properly testing things like
+    if protocol == 'smithy-rpc-v2-cbor' and actual['body']:
+        parser = RpcV2CBORParser()
+        actual_body_stream = parser.get_peekable_stream_from_bytes(
+            actual['body']
+        )
+        expected_body_stream = parser.get_peekable_stream_from_bytes(
+            base64.b64decode(expected['body'])
+        )
+        actual_body = _convert_special_floats_to_string(
+            parser.parse_data_item(actual_body_stream)
+        )
+        expected_body = _convert_special_floats_to_string(
+            parser.parse_data_item(expected_body_stream)
+        )
+        assert_equal(actual_body, expected_body, 'Body value')
+    elif 'body' in expected:
+        expected_body = expected['body'].encode('utf-8')
+        actual_body = actual['body']
+        _assert_request_body(actual_body, expected_body, protocol)
     actual_headers = HeadersDict(actual['headers'])
     expected_headers = HeadersDict(expected.get('headers', {}))
     excluded_headers = expected.get('forbidHeaders', [])
     _assert_expected_headers_in_request(
-        actual_headers, expected_headers, excluded_headers
+        actual_headers,
+        expected_headers,
+        excluded_headers,
+        protocol,
+        operation_model,
     )
     assert_equal(actual['url_path'], expected.get('uri', ''), "URI")
     if 'method' in expected:
         assert_equal(actual['method'], expected['method'], "Method")
 
 
-def _assert_expected_headers_in_request(actual, expected, excluded_headers):
+def _assert_request_body(actual, expected, protocol_type):
+    """
+    Asserts the equivalence of actual and expected request bodies based
+    on protocol type.
+
+    The expected bodies in our consumed protocol tests have extra
+    whitespace and newlines that need to be handled. We need to normalize
+    the expected and actual response bodies before evaluating equivalence.
+    """
+    if protocol_type in ['json', 'rest-json']:
+        _assert_json_bodies(actual, expected, protocol_type)
+    elif protocol_type in ['rest-xml']:
+        _assert_xml_bodies(actual, expected)
+    else:
+        assert_equal(actual, expected, 'Body value')
+
+
+def _assert_json_bodies(actual, expected, protocol_type):
+    try:
+        assert_equal(json.loads(actual), json.loads(expected), 'Body value')
+    except json.JSONDecodeError as e:
+        if protocol_type == 'json':
+            raise e
+        assert_equal(actual, expected, 'Body value')
+
+
+def _assert_xml_bodies(actual, expected):
+    try:
+        tree1 = ET.canonicalize(actual, strip_text=True)
+        tree2 = ET.canonicalize(expected, strip_text=True)
+        assert_equal(tree1, tree2, 'Body value')
+    except ET.ParseError:
+        assert_equal(actual, expected, 'Body value')
+
+
+def _assert_expected_headers_in_request(
+    actual, expected, excluded_headers, protocol_type, operation_model
+):
+    _clean_list_header_values(actual, expected, operation_model)
+    if protocol_type in ['query', 'ec2']:
+        # Botocore sets the Content-Type header to the following for query and ec2:
+        # Content-Type: application/x-www-form-urlencoded; charset=utf-8
+        # The protocol test files do not include "; charset=utf-8".
+        # We'll add this to the expected header value before asserting equivalence.
+        content_type = expected.get('Content-Type', '')
+        if 'charset=utf-8' not in content_type:
+            expected['Content-Type'] = content_type + '; charset=utf-8'
+    elif protocol_type in ['rest-xml']:
+        # We don't set Content-Type for rest-xml. This may be added in the
+        # future, but we'll ignore it until then.
+        expected.pop('Content-Type', None)
+    elif protocol_type in ['rest-json']:
+        # We don't set Content-Type for streaming payloads in rest-json.
+        # This may be added in the future, but we'll ignore it until then.
+        content_type = expected.get('Content-Type')
+        if content_type and content_type != 'application/json':
+            expected.pop('Content-Type')
     for header, value in expected.items():
         assert header in actual
         assert actual[header] == value
@@ -393,6 +561,50 @@ def _assert_expected_headers_in_request(
         assert header not in actual
 
 
+def _clean_list_header_values(
+    actual_headers, expected_headers, operation_model
+):
+    """
+    Standardizes list-type header values in HTTP request headers based on an AWS operation model.
+    Ensures consistency between expected and actual header values, particularly for lists and timestamps.
+
+    Expected list header values in Smithy protocol tests are joined by ", ". Example: "foo, bar, baz".
+    Actual list headers values generated in botocore are  joined by ",". Example "foo,bar,baz".
+    We need to standardize these header values to assert equivalence appropriately.
+    """
+    input_shape = operation_model.input_shape
+    if not (
+        input_shape
+        and input_shape.type_name == "structure"
+        and input_shape.members
+    ):
+        return
+
+    for member, shape in input_shape.members.items():
+        header_name = shape.serialization.get("name")
+        if not (
+            header_name
+            and shape.serialization.get("location") == "header"
+            and shape.type_name == "list"
+        ):
+            continue
+
+        # Standardize expected header values by removing spaces after commas
+        if header_name in expected_headers:
+            expected_headers[header_name] = expected_headers[
+                header_name
+            ].replace(", ", ",")
+
+        # Standardize actual header values only if they exist and the list contains timestamps
+        if (
+            header_name in actual_headers
+            and shape.member.type_name == "timestamp"
+        ):
+            actual_headers[header_name] = actual_headers[header_name].replace(
+                ", ", ","
+            )
+
+
 def _walk_files():
     # Check for a shortcut when running the tests interactively.
     # If a BOTOCORE_TEST env var is defined, that file is used as the
@@ -403,16 +615,20 @@ def _walk_files():
     else:
         for root, _, filenames in os.walk(TEST_DIR):
             for filename in filenames:
+                if filename == IGNORE_LIST_FILENAME:
+                    continue
                 yield os.path.join(root, filename)
 
 
 def _load_cases(full_path):
-    # During developement, you can set the BOTOCORE_TEST_ID
+    # During development, you can set the BOTOCORE_TEST_ID
     # to run a specific test suite or even a specific test case.
     # The format is BOTOCORE_TEST_ID=suite_id:test_id or
     # BOTOCORE_TEST_ID=suite_id
     suite_id, test_id = _get_suite_test_id()
-    all_test_data = json.load(open(full_path), object_pairs_hook=OrderedDict)
+    all_test_data = json.load(
+        open(full_path, encoding='utf-8'), object_pairs_hook=OrderedDict
+    )
     basename = os.path.basename(full_path)
     for i, test_data in enumerate(all_test_data):
         if suite_id is not None and i != suite_id:
@@ -438,10 +654,44 @@ def _get_suite_test_id():
         if len(split) == 2:
             suite_id, test_id = int(split[0]), int(split[1])
         else:
-            suite_id = int(split([0]))
+            suite_id = int(split[0])
     except TypeError:
         # Same exception, just give a better error message.
-        raise TypeError("Invalid format for BOTOCORE_TEST_ID, should be "
-                        "suite_id[:test_id], and both values should be "
-                        "integers.")
+        raise TypeError(
+            "Invalid format for BOTOCORE_TEST_ID, should be "
+            "suite_id[:test_id], and both values should be "
+            "integers."
+        )
     return suite_id, test_id
+
+
+def _should_ignore_test(protocol, test_type, suite, case):
+    """
+    Determines if a protocol test should be ignored.
+    :type protocol: str
+    :param protocol: The protocol name as represented by its corresponding
+        protocol test file name (without the .json extension).
+    :type test_type: str
+    :param test_type: The protocol test type ("input" or "output").
+    :type suite: str
+    :param suite: The "description" attribute of a protocol test suite.
+    :type case: str
+    :param case: The "id" attribute of a specific protocol test case.
+    :return: True if the protocol test should be ignored, False otherwise.
+    :rtype: bool
+    """
+    # Get test suites and cases to ignore for all protocols.
+    ignore_list = get_protocol_test_ignore_list()
+    general_ignore_list = ignore_list.get('general', {}).get(test_type, {})
+    general_suites = general_ignore_list.get('suites', [])
+    general_cases = general_ignore_list.get('cases', [])
+    if suite in general_suites or case in general_cases:
+        return True
+
+    # Get test suites and cases to ignore for a specific protocol.
+    protocol_ignore_list = (
+        ignore_list.get('protocols', {}).get(protocol, {}).get(test_type, {})
+    )
+    protocol_suites = protocol_ignore_list.get('suites', [])
+    protocol_cases = protocol_ignore_list.get('cases', [])
+    return suite in protocol_suites or case in protocol_cases
diff -pruN 2.23.6-1/tests/unit/botocore/test_regions.py 2.31.35-1/tests/unit/botocore/test_regions.py
--- 2.23.6-1/tests/unit/botocore/test_regions.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_regions.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-from tests import unittest
-
 from botocore import regions
-from botocore.exceptions import NoRegionError, EndpointVariantError
+from botocore.exceptions import EndpointVariantError, NoRegionError
+
+from tests import unittest
 
 
 class TestEndpointResolver(unittest.TestCase):
@@ -30,24 +30,24 @@ class TestEndpointResolver(unittest.Test
                         'variants': [
                             {
                                 'hostname': '{service}-fips.{region}.{dnsSuffix}',
-                                'tags': ['fips']
+                                'tags': ['fips'],
                             },
                             {
                                 'dnsSuffix': 'api.aws',
                                 'hostname': '{service}.{region}.{dnsSuffix}',
-                                'tags': ['dualstack']
+                                'tags': ['dualstack'],
                             },
                             {
                                 'dnsSuffix': 'api.aws',
                                 'hostname': '{service}-fips.{region}.{dnsSuffix}',
-                                'tags': ['dualstack', 'fips']
+                                'tags': ['dualstack', 'fips'],
                             },
-                        ]
+                        ],
                     },
                     'regions': {
                         'us-foo': {'regionName': 'a'},
                         'us-bar': {'regionName': 'b'},
-                        'eu-baz': {'regionName': 'd'}
+                        'eu-baz': {'regionName': 'd'},
                     },
                     'services': {
                         'ec2': {
@@ -57,9 +57,9 @@ class TestEndpointResolver(unittest.Test
                                     {
                                         'dnsSuffix': 'api.aws',
                                         'hostname': 'api.ec2.{region}.{dnsSuffix}',
-                                        'tags': ['dualstack']
+                                        'tags': ['dualstack'],
                                     }
-                                ]
+                                ],
                             },
                             'endpoints': {
                                 'us-foo': {
@@ -68,36 +68,34 @@ class TestEndpointResolver(unittest.Test
                                         {
                                             'dnsSuffix': 'api.aws',
                                             'hostname': 'ec2.foo.{dnsSuffix}',
-                                            'tags': ['dualstack']
+                                            'tags': ['dualstack'],
                                         },
                                         {
                                             'hostname': 'ec2-fips.foo.amazonaws.com',
-                                            'tags': ['fips']
+                                            'tags': ['fips'],
                                         },
                                         {
                                             'hostname': 'ec2-fips.foo.api.aws',
-                                            'tags': ['fips', 'dualstack']
+                                            'tags': ['fips', 'dualstack'],
                                         },
-                                    ]
+                                    ],
                                 },
                                 'us-bar': {},
                                 'us-dep': {
                                     'deprecated': True,
                                 },
                                 'us-fizz': {
-                                    'credentialScope': {
-                                        'region': 'us-fizz'
-                                    },
+                                    'credentialScope': {'region': 'us-fizz'},
                                     'hostname': 'ec2.us-fizz.amazonaws.com',
                                     'variants': [
                                         {
                                             'hostname': 'ec2.fizz.api.aws',
-                                            'tags': ['dualstack']
+                                            'tags': ['dualstack'],
                                         }
-                                    ]
+                                    ],
                                 },
                                 'eu-baz': {},
-                                'd': {}
+                                'd': {},
                             },
                         },
                         's3': {
@@ -106,37 +104,32 @@ class TestEndpointResolver(unittest.Test
                                 'variants': [
                                     {
                                         'hostname': 's3.dualstack.{region}.{dnsSuffix}',
-                                        'tags': ['dualstack']
+                                        'tags': ['dualstack'],
                                     },
                                     {
                                         'hostname': 's3-fips.{region}.{dnsSuffix}',
-                                        'tags': ['fips']
+                                        'tags': ['fips'],
                                     },
                                     {
                                         'hostname': 's3-fips.dualstack.{region}.{dnsSuffix}',
-                                        'tags': ['dualstack', 'fips']
-                                    }
-                                ]
+                                        'tags': ['dualstack', 'fips'],
+                                    },
+                                ],
                             },
                             'endpoints': {
                                 'us-foo': {
-                                    'sslCommonName': \
-                                        '{region}.{service}.{dnsSuffix}'
+                                    'sslCommonName': '{region}.{service}.{dnsSuffix}'
                                 },
                                 'us-bar': {},
                                 'us-fizz': {
                                     'hostname': 's3.api.us-fizz.amazonaws.com',
                                     'variants': [
-                                        {
-                                            'tags': ['dualstack']
-                                        },
-                                        {
-                                            'tags': ['fips']
-                                        }
-                                    ]
+                                        {'tags': ['dualstack']},
+                                        {'tags': ['fips']},
+                                    ],
                                 },
-                                'eu-baz': {'hostname': 'foo'}
-                            }
+                                'eu-baz': {'hostname': 'foo'},
+                            },
                         },
                         'not-regionalized': {
                             'isRegionalized': False,
@@ -144,27 +137,27 @@ class TestEndpointResolver(unittest.Test
                             'endpoints': {
                                 'aws': {'hostname': 'not-regionalized'},
                                 'us-foo': {},
-                                'eu-baz': {}
-                            }
+                                'eu-baz': {},
+                            },
                         },
                         'non-partition': {
                             'partitionEndpoint': 'aws',
                             'endpoints': {
                                 'aws': {'hostname': 'host'},
-                                'us-foo': {}
-                            }
+                                'us-foo': {},
+                            },
                         },
                         'merge': {
                             'defaults': {
                                 'signatureVersions': ['v2'],
-                                'protocols': ['http']
+                                'protocols': ['http'],
                             },
                             'endpoints': {
                                 'us-foo': {'signatureVersions': ['v4']},
-                                'us-bar': {'protocols': ['https']}
-                            }
-                        }
-                    }
+                                'us-bar': {'protocols': ['https']},
+                            },
+                        },
+                    },
                 },
                 {
                     'partition': 'foo',
@@ -178,19 +171,17 @@ class TestEndpointResolver(unittest.Test
                     'regions': {
                         'foo-1': {'regionName': '1'},
                         'foo-2': {'regionName': '2'},
-                        'foo-3': {'regionName': '3'}
+                        'foo-3': {'regionName': '3'},
                     },
                     'services': {
                         'ec2': {
                             'endpoints': {
-                                'foo-1': {
-                                    'foo': 'baz'
-                                },
+                                'foo-1': {'foo': 'baz'},
                                 'foo-2': {},
-                                'foo-3': {}
+                                'foo-3': {},
                             }
                         }
-                    }
+                    },
                 },
                 {
                     'partition': 'aws-iso',
@@ -202,20 +193,18 @@ class TestEndpointResolver(unittest.Test
                     'regions': {
                         'foo-1': {'regionName': '1'},
                         'foo-2': {'regionName': '2'},
-                        'foo-3': {'regionName': '3'}
+                        'foo-3': {'regionName': '3'},
                     },
                     'services': {
                         'ec2': {
                             'endpoints': {
-                                'foo-1': {
-                                    'foo': 'baz'
-                                },
+                                'foo-1': {'foo': 'baz'},
                                 'foo-2': {},
-                                'foo-3': {}
+                                'foo-3': {},
                             }
                         }
-                    }
-                }
+                    },
+                },
             ]
         }
 
@@ -239,21 +228,25 @@ class TestEndpointResolver(unittest.Test
     def test_gets_endpoint_names(self):
         resolver = regions.EndpointResolver(self._template())
         result = resolver.get_available_endpoints(
-            'ec2', allow_non_regional=True)
-        self.assertEqual(['d', 'eu-baz', 'us-bar', 'us-dep',
-                          'us-fizz', 'us-foo'],
-                         sorted(result))
+            'ec2', allow_non_regional=True
+        )
+        self.assertEqual(
+            ['d', 'eu-baz', 'us-bar', 'us-dep', 'us-fizz', 'us-foo'],
+            sorted(result),
+        )
 
     def test_gets_endpoint_names_for_partition(self):
         resolver = regions.EndpointResolver(self._template())
         result = resolver.get_available_endpoints(
-            'ec2', allow_non_regional=True, partition_name='foo')
+            'ec2', allow_non_regional=True, partition_name='foo'
+        )
         self.assertEqual(['foo-1', 'foo-2', 'foo-3'], sorted(result))
 
     def test_list_regional_endpoints_only(self):
         resolver = regions.EndpointResolver(self._template())
         result = resolver.get_available_endpoints(
-            'ec2', allow_non_regional=False)
+            'ec2', allow_non_regional=False
+        )
         self.assertEqual(['eu-baz', 'us-bar', 'us-foo'], sorted(result))
 
     def test_returns_none_when_no_match(self):
@@ -263,8 +256,9 @@ class TestEndpointResolver(unittest.Test
     def test_constructs_regionalized_endpoints_for_exact_matches(self):
         resolver = regions.EndpointResolver(self._template())
         result = resolver.construct_endpoint('not-regionalized', 'eu-baz')
-        self.assertEqual('not-regionalized.eu-baz.amazonaws.com',
-                          result['hostname'])
+        self.assertEqual(
+            'not-regionalized.eu-baz.amazonaws.com', result['hostname']
+        )
         self.assertEqual('aws', result['partition'])
         self.assertEqual('eu-baz', result['endpointName'])
 
@@ -330,184 +324,233 @@ class TestEndpointResolver(unittest.Test
 
     def test_construct_dualstack_from_endpoint_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-foo',
-                                             use_dualstack_endpoint=True)
+        result = resolver.construct_endpoint(
+            'ec2', 'us-foo', use_dualstack_endpoint=True
+        )
         self.assertEqual(result['hostname'], 'ec2.foo.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
     def test_construct_dualstack_endpoint_from_service_default_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-bar',
-                                             use_dualstack_endpoint=True)
+        result = resolver.construct_endpoint(
+            'ec2', 'us-bar', use_dualstack_endpoint=True
+        )
         self.assertEqual(result['hostname'], 'api.ec2.us-bar.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
     def test_construct_dualstack_endpoint_from_partition_default_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('dynamodb', 'us-bar',
-                                             use_dualstack_endpoint=True)
+        result = resolver.construct_endpoint(
+            'dynamodb', 'us-bar', use_dualstack_endpoint=True
+        )
         self.assertEqual(result['hostname'], 'dynamodb.us-bar.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
     def test_constructs_dualstack_endpoint_no_hostname_in_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('s3', 'us-fizz',
-                                             use_dualstack_endpoint=True)
-        self.assertEqual('s3.dualstack.us-fizz.api.aws',
-                         result['hostname'])
+        result = resolver.construct_endpoint(
+            's3', 'us-fizz', use_dualstack_endpoint=True
+        )
+        self.assertEqual('s3.dualstack.us-fizz.api.aws', result['hostname'])
 
     def test_constructs_endpoint_dualstack_no_variant_dns_suffix(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('s3', 'us-bar',
-                                             use_dualstack_endpoint=True)
-        self.assertEqual('s3.dualstack.us-bar.api.aws',
-                         result['hostname'])
+        result = resolver.construct_endpoint(
+            's3', 'us-bar', use_dualstack_endpoint=True
+        )
+        self.assertEqual('s3.dualstack.us-bar.api.aws', result['hostname'])
 
     def test_construct_dualstack_endpoint_iso_partition_raise_exception(self):
         with self.assertRaises(EndpointVariantError):
             resolver = regions.EndpointResolver(self._template())
-            resolver.construct_endpoint('foo', 'foo-1', 'aws-iso',
-                                        use_dualstack_endpoint=True)
+            resolver.construct_endpoint(
+                'foo', 'foo-1', 'aws-iso', use_dualstack_endpoint=True
+            )
 
     def test_get_partition_dns_suffix_no_tags(self):
         resolver = regions.EndpointResolver(self._template())
-        self.assertEqual(resolver.get_partition_dns_suffix('aws'),
-                         'amazonaws.com')
+        self.assertEqual(
+            resolver.get_partition_dns_suffix('aws'), 'amazonaws.com'
+        )
 
     def test_get_partition_dualstack_dns_suffix(self):
         resolver = regions.EndpointResolver(self._template())
-        self.assertEqual(resolver.get_partition_dns_suffix(
-            'aws', ['dualstack']), 'api.aws')
+        self.assertEqual(
+            resolver.get_partition_dns_suffix('aws', ['dualstack']), 'api.aws'
+        )
 
     def test_get_partition_dualstack_dns_suffix_does_not_exist(self):
         resolver = regions.EndpointResolver(self._template())
-        self.assertIsNone(resolver.get_partition_dns_suffix(
-            'foo', ['dualstack']))
+        self.assertIsNone(
+            resolver.get_partition_dns_suffix('foo', ['dualstack'])
+        )
 
     def test_get_available_fips_endpoints(self):
         resolver = regions.EndpointResolver(self._template())
         fips_endpoints = resolver.get_available_endpoints(
-            'ec2', endpoint_variant_tags=['fips'])
+            'ec2', endpoint_variant_tags=['fips']
+        )
         self.assertEqual(fips_endpoints, ['us-foo'])
 
     def test_get_available_dualstack_endpoints(self):
         resolver = regions.EndpointResolver(self._template())
         dualstack_endpoints = resolver.get_available_endpoints(
-            'ec2', endpoint_variant_tags=['dualstack'])
+            'ec2', endpoint_variant_tags=['dualstack']
+        )
         self.assertEqual(dualstack_endpoints, ['us-foo'])
 
     def test_get_available_fips_and_dualstack_endpoints(self):
         resolver = regions.EndpointResolver(self._template())
         fips_and_dualstack_endpoints = resolver.get_available_endpoints(
-            'ec2', endpoint_variant_tags=['fips', 'dualstack'])
+            'ec2', endpoint_variant_tags=['fips', 'dualstack']
+        )
         self.assertEqual(fips_and_dualstack_endpoints, ['us-foo'])
 
     def test_get_available_fips_endpoints_none(self):
         resolver = regions.EndpointResolver(self._template())
         fips_endpoints = resolver.get_available_endpoints(
-            'ec2', 'foo', endpoint_variant_tags=['fips'])
+            'ec2', 'foo', endpoint_variant_tags=['fips']
+        )
         self.assertEqual(fips_endpoints, [])
 
     def test_get_available_dualstack_endpoints_none(self):
         resolver = regions.EndpointResolver(self._template())
         dualstack_endpoints = resolver.get_available_endpoints(
-            'ec2', 'foo', endpoint_variant_tags=['dualstack'])
+            'ec2', 'foo', endpoint_variant_tags=['dualstack']
+        )
         self.assertEqual(dualstack_endpoints, [])
 
     def test_get_available_fips_and_dualstack_endpoints_none(self):
         resolver = regions.EndpointResolver(self._template())
         fips_and_dualstack_endpoints = resolver.get_available_endpoints(
-            'ec2', 'foo', endpoint_variant_tags=['fips', 'dualstack'])
+            'ec2', 'foo', endpoint_variant_tags=['fips', 'dualstack']
+        )
         self.assertEqual(fips_and_dualstack_endpoints, [])
 
     def test_construct_deprecated_endpoint_raises_warning(self):
         resolver = regions.EndpointResolver(self._template())
         with self.assertLogs('botocore.regions', level='WARNING') as log:
-            result = resolver.construct_endpoint('ec2', 'us-dep',
-                                                 use_fips_endpoint=True,
-                                                 )
+            result = resolver.construct_endpoint(
+                'ec2',
+                'us-dep',
+                use_fips_endpoint=True,
+            )
             self.assertIn('deprecated endpoint', log.output[0])
-            self.assertEqual(result['hostname'], 'ec2-fips.us-dep.amazonaws.com')
+            self.assertEqual(
+                result['hostname'], 'ec2-fips.us-dep.amazonaws.com'
+            )
             self.assertEqual(result['dnsSuffix'], 'amazonaws.com')
 
     def test_construct_fips_from_endpoint_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-foo',
-                                             use_fips_endpoint=True)
+        result = resolver.construct_endpoint(
+            'ec2', 'us-foo', use_fips_endpoint=True
+        )
         self.assertEqual(result['hostname'], 'ec2-fips.foo.amazonaws.com')
         self.assertEqual(result['dnsSuffix'], 'amazonaws.com')
 
     def test_construct_fips_endpoint_from_service_default_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-bar',
-                                             use_fips_endpoint=True)
+        result = resolver.construct_endpoint(
+            'ec2', 'us-bar', use_fips_endpoint=True
+        )
         self.assertEqual(result['hostname'], 'ec2-fips.us-bar.amazonaws.com')
         self.assertEqual(result['dnsSuffix'], 'amazonaws.com')
 
     def test_construct_fips_endpoint_from_partition_default_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('dynamodb', 'us-bar',
-                                             use_fips_endpoint=True)
-        self.assertEqual(result['hostname'],
-                         'dynamodb-fips.us-bar.amazonaws.com')
+        result = resolver.construct_endpoint(
+            'dynamodb', 'us-bar', use_fips_endpoint=True
+        )
+        self.assertEqual(
+            result['hostname'], 'dynamodb-fips.us-bar.amazonaws.com'
+        )
         self.assertEqual(result['dnsSuffix'], 'amazonaws.com')
 
     def test_constructs_fips_endpoint_no_hostname_in_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('s3', 'us-fizz',
-                                             use_fips_endpoint=True)
+        result = resolver.construct_endpoint(
+            's3', 'us-fizz', use_fips_endpoint=True
+        )
         self.assertEqual('s3-fips.us-fizz.amazonaws.com', result['hostname'])
 
     def test_construct_dualstack_and_fips_from_endpoint_variant(self):
         resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-foo',
-                                             use_dualstack_endpoint=True,
-                                             use_fips_endpoint=True)
+        result = resolver.construct_endpoint(
+            'ec2',
+            'us-foo',
+            use_dualstack_endpoint=True,
+            use_fips_endpoint=True,
+        )
         self.assertEqual(result['hostname'], 'ec2-fips.foo.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
-    def test_construct_dualstack_and_fips_endpoint_from_service_default_variant(self):
-        resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('ec2', 'us-bar',
-                                             use_dualstack_endpoint=True,
-                                             use_fips_endpoint=True)
+    def test_construct_dualstack_and_fips_endpoint_from_service_default_variant(
+        self,
+    ):
+        resolver = regions.EndpointResolver(self._template())
+        result = resolver.construct_endpoint(
+            'ec2',
+            'us-bar',
+            use_dualstack_endpoint=True,
+            use_fips_endpoint=True,
+        )
         self.assertEqual(result['hostname'], 'ec2-fips.us-bar.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
-    def test_construct_dualstack_and_fips_endpoint_from_partition_default_variant(self):
-        resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('dynamodb', 'us-bar',
-                                             use_dualstack_endpoint=True,
-                                             use_fips_endpoint=True)
+    def test_construct_dualstack_and_fips_endpoint_from_partition_default_variant(
+        self,
+    ):
+        resolver = regions.EndpointResolver(self._template())
+        result = resolver.construct_endpoint(
+            'dynamodb',
+            'us-bar',
+            use_dualstack_endpoint=True,
+            use_fips_endpoint=True,
+        )
         self.assertEqual(result['hostname'], 'dynamodb-fips.us-bar.api.aws')
         self.assertEqual(result['dnsSuffix'], 'api.aws')
 
-    def test_constructs_dualstack_and_fips_endpoint_no_hostname_in_variant(self):
-        resolver = regions.EndpointResolver(self._template())
-        result = resolver.construct_endpoint('s3', 'us-fizz',
-                                             use_dualstack_endpoint=True,
-                                             use_fips_endpoint=True)
-        self.assertEqual('s3-fips.dualstack.us-fizz.api.aws',
-                         result['hostname'])
+    def test_constructs_dualstack_and_fips_endpoint_no_hostname_in_variant(
+        self,
+    ):
+        resolver = regions.EndpointResolver(self._template())
+        result = resolver.construct_endpoint(
+            's3',
+            'us-fizz',
+            use_dualstack_endpoint=True,
+            use_fips_endpoint=True,
+        )
+        self.assertEqual(
+            's3-fips.dualstack.us-fizz.api.aws', result['hostname']
+        )
 
     def test_construct_fips_endpoint_no_variant_raise_exception(self):
         with self.assertRaises(EndpointVariantError):
             resolver = regions.EndpointResolver(self._template())
-            resolver.construct_endpoint('ec2', 'foo-1', 'foo',
-                                        use_fips_endpoint=True)
+            resolver.construct_endpoint(
+                'ec2', 'foo-1', 'foo', use_fips_endpoint=True
+            )
 
     def test_construct_dualstack_endpoint_no_variant_raise_exception(self):
         with self.assertRaises(EndpointVariantError):
             resolver = regions.EndpointResolver(self._template())
-            resolver.construct_endpoint('ec2', 'foo-1', 'foo',
-                                        use_dualstack_endpoint=True)
-
-    def test_construct_dualstack_and_fips_endpoint_no_variant_raise_exception(self):
+            resolver.construct_endpoint(
+                'ec2', 'foo-1', 'foo', use_dualstack_endpoint=True
+            )
+
+    def test_construct_dualstack_and_fips_endpoint_no_variant_raise_exception(
+        self,
+    ):
         with self.assertRaises(EndpointVariantError):
             resolver = regions.EndpointResolver(self._template())
-            resolver.construct_endpoint('ec2', 'foo-1', 'foo',
-                                        use_dualstack_endpoint=True,
-                                        use_fips_endpoint=True)
+            resolver.construct_endpoint(
+                'ec2',
+                'foo-1',
+                'foo',
+                use_dualstack_endpoint=True,
+                use_fips_endpoint=True,
+            )
 
 
 def _variant_test_definitions():
@@ -517,637 +560,621 @@ def _variant_test_definitions():
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "default-pattern-service.us-west-2.amazonaws.com"
+            "endpoint": "default-pattern-service.us-west-2.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "default-pattern-service-fips.us-west-2.amazonaws.com"
+            "endpoint": "default-pattern-service-fips.us-west-2.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "default-pattern-service.af-south-1.amazonaws.com"
+            "endpoint": "default-pattern-service.af-south-1.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "default-pattern-service-fips.af-south-1.amazonaws.com"
+            "endpoint": "default-pattern-service-fips.af-south-1.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "aws-global",
             "fips": False,
             "dualstack": False,
-            "endpoint": "global-service.amazonaws.com"
+            "endpoint": "global-service.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "aws-global",
             "fips": True,
             "dualstack": False,
-            "endpoint": "global-service-fips.amazonaws.com"
+            "endpoint": "global-service-fips.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "foo",
             "fips": False,
             "dualstack": False,
-            "endpoint": "global-service.amazonaws.com"
+            "endpoint": "global-service.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "foo",
             "fips": True,
             "dualstack": False,
-            "endpoint": "global-service-fips.amazonaws.com"
+            "endpoint": "global-service-fips.amazonaws.com",
         },
         {
             "service": "override-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.override-variant-service.us-west-2.new.dns.suffix"
+            "endpoint": "fips.override-variant-service.us-west-2.new.dns.suffix",
         },
         {
             "service": "override-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.override-variant-service.af-south-1.new.dns.suffix"
+            "endpoint": "fips.override-variant-service.af-south-1.new.dns.suffix",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-dns-suffix-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix"
+            "endpoint": "override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-dns-suffix-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service-fips.af-south-1.new.dns.suffix"
+            "endpoint": "override-variant-dns-suffix-service-fips.af-south-1.new.dns.suffix",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-hostname-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-hostname-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.override-variant-hostname-service.us-west-2.amazonaws.com"
+            "endpoint": "fips.override-variant-hostname-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-hostname-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-hostname-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.override-variant-hostname-service.af-south-1.amazonaws.com"
+            "endpoint": "fips.override-variant-hostname-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-endpoint-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.override-endpoint-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "fips.override-endpoint-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-endpoint-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "override-endpoint-variant-service-fips.af-south-1.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service-fips.af-south-1.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "default-pattern-service.us-west-2.amazonaws.com"
+            "endpoint": "default-pattern-service.us-west-2.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "default-pattern-service.us-west-2.api.aws"
+            "endpoint": "default-pattern-service.us-west-2.api.aws",
         },
         {
             "service": "default-pattern-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "default-pattern-service.af-south-1.amazonaws.com"
+            "endpoint": "default-pattern-service.af-south-1.amazonaws.com",
         },
         {
             "service": "default-pattern-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "default-pattern-service.af-south-1.api.aws"
+            "endpoint": "default-pattern-service.af-south-1.api.aws",
         },
         {
             "service": "global-service",
             "region": "aws-global",
             "fips": False,
             "dualstack": False,
-            "endpoint": "global-service.amazonaws.com"
+            "endpoint": "global-service.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "aws-global",
             "fips": False,
             "dualstack": True,
-            "endpoint": "global-service.api.aws"
+            "endpoint": "global-service.api.aws",
         },
         {
             "service": "global-service",
             "region": "foo",
             "fips": False,
             "dualstack": False,
-            "endpoint": "global-service.amazonaws.com"
+            "endpoint": "global-service.amazonaws.com",
         },
         {
             "service": "global-service",
             "region": "foo",
             "fips": False,
             "dualstack": True,
-            "endpoint": "global-service.api.aws"
+            "endpoint": "global-service.api.aws",
         },
         {
             "service": "override-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-service.dualstack.us-west-2.new.dns.suffix"
+            "endpoint": "override-variant-service.dualstack.us-west-2.new.dns.suffix",
         },
         {
             "service": "override-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-service.dualstack.af-south-1.new.dns.suffix"
+            "endpoint": "override-variant-service.dualstack.af-south-1.new.dns.suffix",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-dns-suffix-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-dns-suffix-service.us-west-2.new.dns.suffix"
+            "endpoint": "override-variant-dns-suffix-service.us-west-2.new.dns.suffix",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-dns-suffix-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-dns-suffix-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-dns-suffix-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-dns-suffix-service.af-south-1.new.dns.suffix"
+            "endpoint": "override-variant-dns-suffix-service.af-south-1.new.dns.suffix",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-hostname-service.us-west-2.amazonaws.com"
+            "endpoint": "override-variant-hostname-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-hostname-service.dualstack.us-west-2.api.aws"
+            "endpoint": "override-variant-hostname-service.dualstack.us-west-2.api.aws",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-variant-hostname-service.af-south-1.amazonaws.com"
+            "endpoint": "override-variant-hostname-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-variant-hostname-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-variant-hostname-service.dualstack.af-south-1.api.aws"
+            "endpoint": "override-variant-hostname-service.dualstack.af-south-1.api.aws",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-endpoint-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "override-endpoint-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "override-endpoint-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "override-endpoint-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "override-endpoint-variant-service.af-south-1.api.aws"
+            "endpoint": "override-endpoint-variant-service.af-south-1.api.aws",
         },
         {
             "service": "multi-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": False,
-            "endpoint": "multi-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "multi-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "multi-variant-service",
             "region": "us-west-2",
             "fips": False,
             "dualstack": True,
-            "endpoint": "multi-variant-service.dualstack.us-west-2.api.aws"
+            "endpoint": "multi-variant-service.dualstack.us-west-2.api.aws",
         },
         {
             "service": "multi-variant-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.multi-variant-service.us-west-2.amazonaws.com"
+            "endpoint": "fips.multi-variant-service.us-west-2.amazonaws.com",
         },
         {
             "service": "multi-variant-service",
             "region": "us-west-2",
             "fips": True,
             "dualstack": True,
-            "endpoint": "fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix"
+            "endpoint": "fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix",
         },
         {
             "service": "multi-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": False,
-            "endpoint": "multi-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "multi-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "multi-variant-service",
             "region": "af-south-1",
             "fips": False,
             "dualstack": True,
-            "endpoint": "multi-variant-service.dualstack.af-south-1.api.aws"
+            "endpoint": "multi-variant-service.dualstack.af-south-1.api.aws",
         },
         {
             "service": "multi-variant-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": False,
-            "endpoint": "fips.multi-variant-service.af-south-1.amazonaws.com"
+            "endpoint": "fips.multi-variant-service.af-south-1.amazonaws.com",
         },
         {
             "service": "multi-variant-service",
             "region": "af-south-1",
             "fips": True,
             "dualstack": True,
-            "endpoint": "fips.multi-variant-service.dualstack.af-south-1.new.dns.suffix"
-        }
+            "endpoint": "fips.multi-variant-service.dualstack.af-south-1.new.dns.suffix",
+        },
     ]
 
 
 def _modeled_variants_template():
     return {
-        "partitions" : [
+        "partitions": [
             {
-                "defaults" : {
-                    "hostname" : "{service}.{region}.{dnsSuffix}",
-                    "protocols" : ["https"],
-                    "signatureVersions" : ["v4"],
-                    "variants" : [
+                "defaults": {
+                    "hostname": "{service}.{region}.{dnsSuffix}",
+                    "protocols": ["https"],
+                    "signatureVersions": ["v4"],
+                    "variants": [
                         {
-                            "dnsSuffix" : "amazonaws.com",
-                            "hostname" : "{service}-fips.{region}.{dnsSuffix}",
-                            "tags" : ["fips"]
+                            "dnsSuffix": "amazonaws.com",
+                            "hostname": "{service}-fips.{region}.{dnsSuffix}",
+                            "tags": ["fips"],
                         },
                         {
-                            "dnsSuffix" : "api.aws",
-                            "hostname" : "{service}.{region}.{dnsSuffix}",
-                            "tags" : ["dualstack"]
+                            "dnsSuffix": "api.aws",
+                            "hostname": "{service}.{region}.{dnsSuffix}",
+                            "tags": ["dualstack"],
                         },
                         {
-                            "dnsSuffix" : "api.aws",
-                            "hostname" : "{service}-fips.{region}.{dnsSuffix}",
-                            "tags" : ["dualstack", "fips"]
-                        }
-                    ]
+                            "dnsSuffix": "api.aws",
+                            "hostname": "{service}-fips.{region}.{dnsSuffix}",
+                            "tags": ["dualstack", "fips"],
+                        },
+                    ],
                 },
-                "dnsSuffix" : "amazonaws.com",
-                "partition" : "aws",
-                "regionRegex" : "^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",
-                "regions" : {
-                    "af-south-1" : {
-                        "description" : "Africa (Cape Town)"
-                    },
-                    "us-west-2" : {
-                        "description" : "US West (Oregon)"
-                    }
+                "dnsSuffix": "amazonaws.com",
+                "partition": "aws",
+                "regionRegex": "^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",
+                "regions": {
+                    "af-south-1": {"description": "Africa (Cape Town)"},
+                    "us-west-2": {"description": "US West (Oregon)"},
                 },
-                "services" : {
-                    "default-pattern-service" : {
-                        "endpoints" : {
-                            "af-south-1" : {},
-                            "us-west-2" : {
-                                "variants" : [
+                "services": {
+                    "default-pattern-service": {
+                        "endpoints": {
+                            "af-south-1": {},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "default-pattern-service-fips.us-west-2.amazonaws.com",
-                                        "tags" : ["fips"]
+                                        "hostname": "default-pattern-service-fips.us-west-2.amazonaws.com",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "default-pattern-service.us-west-2.api.aws",
-                                        "tags" : ["dualstack"]
-                                    }
+                                        "hostname": "default-pattern-service.us-west-2.api.aws",
+                                        "tags": ["dualstack"],
+                                    },
                                 ]
-                            }
+                            },
                         }
                     },
-                    "global-service" : {
-                        "endpoints" : {
-                            "aws-global" : {
-                                "credentialScope" : {
-                                    "region" : "us-east-1"
-                                },
-                                "hostname" : "global-service.amazonaws.com",
-                                "variants" : [
+                    "global-service": {
+                        "endpoints": {
+                            "aws-global": {
+                                "credentialScope": {"region": "us-east-1"},
+                                "hostname": "global-service.amazonaws.com",
+                                "variants": [
                                     {
-                                        "hostname" : "global-service-fips.amazonaws.com",
-                                        "tags" : ["fips"]
+                                        "hostname": "global-service-fips.amazonaws.com",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "global-service.api.aws",
-                                        "tags" : ["dualstack"]
-                                    }
-                                ]
+                                        "hostname": "global-service.api.aws",
+                                        "tags": ["dualstack"],
+                                    },
+                                ],
                             }
                         },
-                        "isRegionalized" : False,
-                        "partitionEndpoint" : "aws-global"
+                        "isRegionalized": False,
+                        "partitionEndpoint": "aws-global",
                     },
-                    "override-variant-service" : {
-                        "defaults" : {
-                            "variants" : [
+                    "override-variant-service": {
+                        "defaults": {
+                            "variants": [
                                 {
-                                    "hostname" : "fips.{service}.{region}.{dnsSuffix}",
-                                    "dnsSuffix" : "new.dns.suffix",
-                                    "tags" : ["fips"]
+                                    "hostname": "fips.{service}.{region}.{dnsSuffix}",
+                                    "dnsSuffix": "new.dns.suffix",
+                                    "tags": ["fips"],
                                 },
                                 {
-                                    "hostname" : "{service}.dualstack.{region}.{dnsSuffix}",
-                                    "dnsSuffix" : "new.dns.suffix",
-                                    "tags" : ["dualstack"]
-                                }
+                                    "hostname": "{service}.dualstack.{region}.{dnsSuffix}",
+                                    "dnsSuffix": "new.dns.suffix",
+                                    "tags": ["dualstack"],
+                                },
                             ]
                         },
-                        "endpoints" : {
-                            "af-south-1" : {},
-                            "us-west-2" : {
-                                "variants" : [
+                        "endpoints": {
+                            "af-south-1": {},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "fips.override-variant-service.us-west-2.new.dns.suffix",
-                                        "tags" : ["fips"]
+                                        "hostname": "fips.override-variant-service.us-west-2.new.dns.suffix",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "override-variant-service.dualstack.us-west-2.new.dns.suffix",
-                                        "tags" : ["dualstack"]
-                                    }
+                                        "hostname": "override-variant-service.dualstack.us-west-2.new.dns.suffix",
+                                        "tags": ["dualstack"],
+                                    },
                                 ]
-                            }
-                        }
+                            },
+                        },
                     },
-                    "override-variant-dns-suffix-service" : {
-                        "defaults" : {
-                            "variants" : [
+                    "override-variant-dns-suffix-service": {
+                        "defaults": {
+                            "variants": [
                                 {
-                                    "dnsSuffix" : "new.dns.suffix",
-                                    "tags" : ["fips"]
+                                    "dnsSuffix": "new.dns.suffix",
+                                    "tags": ["fips"],
                                 },
                                 {
-                                    "dnsSuffix" : "new.dns.suffix",
-                                    "tags" : ["dualstack"]
-                                }
+                                    "dnsSuffix": "new.dns.suffix",
+                                    "tags": ["dualstack"],
+                                },
                             ]
                         },
-                        "endpoints" : {
-                            "af-south-1" : {},
-                            "us-west-2" : {
-                                "variants" : [
+                        "endpoints": {
+                            "af-south-1": {},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix",
-                                        "tags" : ["fips"]
+                                        "hostname": "override-variant-dns-suffix-service-fips.us-west-2.new.dns.suffix",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "override-variant-dns-suffix-service.us-west-2.new.dns.suffix",
-                                        "tags" : ["dualstack"]
-                                    }
+                                        "hostname": "override-variant-dns-suffix-service.us-west-2.new.dns.suffix",
+                                        "tags": ["dualstack"],
+                                    },
                                 ]
-                            }
-                        }
+                            },
+                        },
                     },
-                    "override-variant-hostname-service" : {
-                        "defaults" : {
-                            "variants" : [
+                    "override-variant-hostname-service": {
+                        "defaults": {
+                            "variants": [
                                 {
-                                    "hostname" : "fips.{service}.{region}.{dnsSuffix}",
-                                    "tags" : ["fips"]
+                                    "hostname": "fips.{service}.{region}.{dnsSuffix}",
+                                    "tags": ["fips"],
                                 },
                                 {
-                                    "hostname" : "{service}.dualstack.{region}.{dnsSuffix}",
-                                    "tags" : ["dualstack"]
-                                }
+                                    "hostname": "{service}.dualstack.{region}.{dnsSuffix}",
+                                    "tags": ["dualstack"],
+                                },
                             ]
                         },
-                        "endpoints" : {
-                            "af-south-1" : {},
-                            "us-west-2" : {
-                                "variants" : [
+                        "endpoints": {
+                            "af-south-1": {},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "fips.override-variant-hostname-service.us-west-2.amazonaws.com",
-                                        "tags" : ["fips"]
+                                        "hostname": "fips.override-variant-hostname-service.us-west-2.amazonaws.com",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "override-variant-hostname-service.dualstack.us-west-2.api.aws",
-                                        "tags" : ["dualstack"]
-                                    }
+                                        "hostname": "override-variant-hostname-service.dualstack.us-west-2.api.aws",
+                                        "tags": ["dualstack"],
+                                    },
                                 ]
-                            }
-                        }
+                            },
+                        },
                     },
-                    "override-endpoint-variant-service" : {
-                        "endpoints" : {
-                            "af-south-1" : {},
-                            "us-west-2" : {
-                                "variants" : [
+                    "override-endpoint-variant-service": {
+                        "endpoints": {
+                            "af-south-1": {},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "fips.override-endpoint-variant-service.us-west-2.amazonaws.com",
-                                        "tags" : ["fips"]
+                                        "hostname": "fips.override-endpoint-variant-service.us-west-2.amazonaws.com",
+                                        "tags": ["fips"],
                                     },
                                     {
-                                        "hostname" : "override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com",
-                                        "tags" : ["dualstack"]
-                                    }
+                                        "hostname": "override-endpoint-variant-service.dualstack.us-west-2.amazonaws.com",
+                                        "tags": ["dualstack"],
+                                    },
                                 ]
-                            }
+                            },
                         }
                     },
-                    "multi-variant-service" : {
-                        "defaults" : {
-                            "variants" : [
+                    "multi-variant-service": {
+                        "defaults": {
+                            "variants": [
                                 {
-                                    "hostname" : "fips.{service}.{region}.{dnsSuffix}",
-                                    "tags" : ["fips"]
+                                    "hostname": "fips.{service}.{region}.{dnsSuffix}",
+                                    "tags": ["fips"],
                                 },
                                 {
-                                    "hostname" : "{service}.dualstack.{region}.{dnsSuffix}",
-                                    "tags" : ["dualstack"]
+                                    "hostname": "{service}.dualstack.{region}.{dnsSuffix}",
+                                    "tags": ["dualstack"],
                                 },
                                 {
-                                    "dnsSuffix" : "new.dns.suffix",
-                                    "hostname" : "fips.{service}.dualstack.{region}.{dnsSuffix}",
-                                    "tags" : ["fips", "dualstack"]
-                                }
+                                    "dnsSuffix": "new.dns.suffix",
+                                    "hostname": "fips.{service}.dualstack.{region}.{dnsSuffix}",
+                                    "tags": ["fips", "dualstack"],
+                                },
                             ]
                         },
-                        "endpoints" : {
-                            "af-south-1" : {
-                                "deprecated" : True
-                            },
-                            "us-west-2" : {
-                                "variants" : [
+                        "endpoints": {
+                            "af-south-1": {"deprecated": True},
+                            "us-west-2": {
+                                "variants": [
                                     {
-                                        "hostname" : "fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix",
-                                        "tags" : ["fips", "dualstack"]
+                                        "hostname": "fips.multi-variant-service.dualstack.us-west-2.new.dns.suffix",
+                                        "tags": ["fips", "dualstack"],
                                     }
                                 ]
-                            }
-                        }
-                    }
-                }
+                            },
+                        },
+                    },
+                },
             },
             {
                 "defaults": {
                     "hostname": "{service}.{region}.{dnsSuffix}",
                     "protocols": ["https"],
-                    "signatureVersions": ["v4"]
+                    "signatureVersions": ["v4"],
                 },
                 "dnsSuffix": "c2s.ic.gov",
                 "partition": "aws-iso",
                 "regionRegex": "^us\\-iso\\-\\w+\\-\\d+$",
-                "regions": {
-                    "us-iso-east-1": {
-                        "description": "US ISO East"
-                    }
-                },
+                "regions": {"us-iso-east-1": {"description": "US ISO East"}},
                 "services": {
-                    "some-service": {
-                        "endpoints" : {
-                            "us-iso-east-1": {}
-                        }
-                    }
-                }
-            }
+                    "some-service": {"endpoints": {"us-iso-east-1": {}}}
+                },
+            },
         ],
-        "version": 3
+        "version": 3,
     }
 
 
@@ -1156,20 +1183,23 @@ def test_modeled_variants(test_case):
     _verify_expected_endpoint(**test_case)
 
 
-def _verify_expected_endpoint(service, region, fips, dualstack,
-                              endpoint):
+def _verify_expected_endpoint(service, region, fips, dualstack, endpoint):
     resolver = regions.EndpointResolver(_modeled_variants_template())
     resolved = resolver.construct_endpoint(
-        service, region, use_dualstack_endpoint=dualstack,
-        use_fips_endpoint=fips
+        service,
+        region,
+        use_dualstack_endpoint=dualstack,
+        use_fips_endpoint=fips,
     )
     # If we can't resolve the region, we attempt to get a
     # global endpoint.
     if not resolved:
         resolved = resolver.construct_endpoint(
-            service, region, partition_name='aws',
+            service,
+            region,
+            partition_name='aws',
             use_dualstack_endpoint=dualstack,
-            use_fips_endpoint=fips
+            use_fips_endpoint=fips,
         )
     assert resolved['hostname'] == endpoint
 
@@ -1177,6 +1207,8 @@ def _verify_expected_endpoint(service, r
 def test_additional_endpoint_data_exists_with_variants():
     resolver = regions.EndpointResolver(_modeled_variants_template())
     resolved = resolver.construct_endpoint(
-        'global-service', 'aws-global', use_fips_endpoint=True,
+        'global-service',
+        'aws-global',
+        use_fips_endpoint=True,
     )
     assert resolved['credentialScope'] == {'region': 'us-east-1'}
diff -pruN 2.23.6-1/tests/unit/botocore/test_response.py 2.31.35-1/tests/unit/botocore/test_response.py
--- 2.23.6-1/tests/unit/botocore/test_response.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_response.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,39 +10,42 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import io
-from tests import unittest
-from tests.unit.botocore import BaseResponseTest
 import datetime
-
-from dateutil.tz import tzutc
-from urllib3.exceptions import ReadTimeoutError as URLLib3ReadTimeoutError
+import io
 
 import botocore
 from botocore import response
-from botocore.exceptions import IncompleteReadError, ReadTimeoutError
 from botocore.awsrequest import AWSRequest, AWSResponse
+from botocore.exceptions import IncompleteReadError, ReadTimeoutError
+from dateutil.tz import tzutc
+from urllib3.exceptions import ReadTimeoutError as URLLib3ReadTimeoutError
 
-XMLBODY1 = (b'<?xml version="1.0" encoding="UTF-8"?><Error>'
-            b'<Code>AccessDenied</Code>'
-            b'<Message>Access Denied</Message>'
-            b'<RequestId>XXXXXXXXXXXXXXXX</RequestId>'
-            b'<HostId>AAAAAAAAAAAAAAAAAAA</HostId>'
-            b'</Error>')
-
-XMLBODY2 = (b'<?xml version="1.0" encoding="UTF-8"?>'
-            b'<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
-            b'<Name>mybucket</Name><Prefix></Prefix><Marker></Marker>'
-            b'<MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>'
-            b'<Contents><Key>test.png</Key><LastModified>2014-03-01T17:06:40.000Z</LastModified>'
-            b'<ETag>&quot;00000000000000000000000000000000&quot;</ETag><Size>6702</Size>'
-            b'<Owner><ID>AAAAAAAAAAAAAAAAAAA</ID>'
-            b'<DisplayName>dummy</DisplayName></Owner>'
-            b'<StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>')
+from tests import unittest
+from tests.unit.botocore import BaseResponseTest
 
+XMLBODY1 = (
+    b'<?xml version="1.0" encoding="UTF-8"?><Error>'
+    b'<Code>AccessDenied</Code>'
+    b'<Message>Access Denied</Message>'
+    b'<RequestId>XXXXXXXXXXXXXXXX</RequestId>'
+    b'<HostId>AAAAAAAAAAAAAAAAAAA</HostId>'
+    b'</Error>'
+)
+
+XMLBODY2 = (
+    b'<?xml version="1.0" encoding="UTF-8"?>'
+    b'<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
+    b'<Name>mybucket</Name><Prefix></Prefix><Marker></Marker>'
+    b'<MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>'
+    b'<Contents><Key>test.png</Key><LastModified>2014-03-01T17:06:40.000Z</LastModified>'
+    b'<ETag>&quot;00000000000000000000000000000000&quot;</ETag><Size>6702</Size>'
+    b'<Owner><ID>AAAAAAAAAAAAAAAAAAA</ID>'
+    b'<DisplayName>dummy</DisplayName></Owner>'
+    b'<StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>'
+)
 
-class TestStreamWrapper(unittest.TestCase):
 
+class TestStreamWrapper(unittest.TestCase):
     def assert_lines(self, line_iterator, expected_lines):
         for expected_line in expected_lines:
             self.assertEqual(
@@ -155,7 +158,7 @@ class TestStreamWrapper(unittest.TestCas
         )
 
     def test_catches_urllib3_read_timeout(self):
-        class TimeoutBody(object):
+        class TimeoutBody:
             def read(*args, **kwargs):
                 raise URLLib3ReadTimeoutError(None, None, None)
 
@@ -177,7 +180,8 @@ class TestStreamWrapper(unittest.TestCas
 
     def test_streaming_line_empty_body(self):
         stream = response.StreamingBody(
-            io.BytesIO(b''), content_length=0,
+            io.BytesIO(b''),
+            content_length=0,
         )
         self.assert_lines(stream.iter_lines(), [])
 
@@ -212,8 +216,7 @@ class TestGetResponse(BaseResponseTest):
 
         res = response.get_response(operation_model, http_response)
         self.assertTrue(isinstance(res[1]['Body'], response.StreamingBody))
-        self.assertEqual(res[1]['ETag'],
-                         '"00000000000000000000000000000000"')
+        self.assertEqual(res[1]['ETag'], '"00000000000000000000000000000000"')
 
     def test_get_response_streaming_ng(self):
         headers = {
@@ -222,7 +225,8 @@ class TestGetResponse(BaseResponseTest):
             'server': 'AmazonS3',
             'transfer-encoding': 'chunked',
             'x-amz-id-2': 'AAAAAAAAAAAAAAAAAAA',
-            'x-amz-request-id': 'XXXXXXXXXXXXXXXX'}
+            'x-amz-request-id': 'XXXXXXXXXXXXXXXX',
+        }
         raw = FakeRawResponse(XMLBODY1)
         http_response = AWSResponse(None, 403, headers, raw)
 
@@ -232,12 +236,14 @@ class TestGetResponse(BaseResponseTest):
 
         self.assert_response_with_subset_metadata(
             response.get_response(operation_model, http_response)[1],
-            {'Error': {'Message': 'Access Denied',
-                       'Code': 'AccessDenied'},
-             'ResponseMetadata': {'HostId': 'AAAAAAAAAAAAAAAAAAA',
-                                  'RequestId': 'XXXXXXXXXXXXXXXX',
-                                  'HTTPStatusCode': 403},
-             }
+            {
+                'Error': {'Message': 'Access Denied', 'Code': 'AccessDenied'},
+                'ResponseMetadata': {
+                    'HostId': 'AAAAAAAAAAAAAAAAAAA',
+                    'RequestId': 'XXXXXXXXXXXXXXXX',
+                    'HTTPStatusCode': 403,
+                },
+            },
         )
 
     def test_get_response_nonstreaming_ok(self):
@@ -247,7 +253,8 @@ class TestGetResponse(BaseResponseTest):
             'server': 'AmazonS3',
             'transfer-encoding': 'chunked',
             'x-amz-id-2': 'AAAAAAAAAAAAAAAAAAA',
-            'x-amz-request-id': 'XXXXXXXXXXXXXXXX'}
+            'x-amz-request-id': 'XXXXXXXXXXXXXXXX',
+        }
         raw = FakeRawResponse(XMLBODY1)
         http_response = AWSResponse(None, 403, headers, raw)
 
@@ -261,13 +268,11 @@ class TestGetResponse(BaseResponseTest):
                 'ResponseMetadata': {
                     'RequestId': 'XXXXXXXXXXXXXXXX',
                     'HostId': 'AAAAAAAAAAAAAAAAAAA',
-                    'HTTPStatusCode': 403
+                    'HTTPStatusCode': 403,
                 },
-                'Error': {
-                    'Message': 'Access Denied',
-                    'Code': 'AccessDenied'
-                }
-            })
+                'Error': {'Message': 'Access Denied', 'Code': 'AccessDenied'},
+            },
+        )
 
     def test_get_response_nonstreaming_ng(self):
         headers = {
@@ -276,7 +281,8 @@ class TestGetResponse(BaseResponseTest):
             'server': 'AmazonS3',
             'transfer-encoding': 'chunked',
             'x-amz-id-2': 'AAAAAAAAAAAAAAAAAAA',
-            'x-amz-request-id': 'XXXXXXXXXXXXXXXX'}
+            'x-amz-request-id': 'XXXXXXXXXXXXXXXX',
+        }
         raw = FakeRawResponse(XMLBODY2)
         http_response = AWSResponse(None, 200, headers, raw)
 
@@ -286,21 +292,31 @@ class TestGetResponse(BaseResponseTest):
 
         self.assert_response_with_subset_metadata(
             response.get_response(operation_model, http_response)[1],
-            {u'Contents': [{u'ETag': '"00000000000000000000000000000000"',
-                            u'Key': 'test.png',
-                            u'LastModified': datetime.datetime(2014, 3, 1, 17, 6, 40, tzinfo=tzutc()),
-                            u'Owner': {u'DisplayName': 'dummy',
-                                       u'ID': 'AAAAAAAAAAAAAAAAAAA'},
-                            u'Size': 6702,
-                            u'StorageClass': 'STANDARD'}],
-             u'IsTruncated': False,
-             u'Marker': "",
-             u'MaxKeys': 1000,
-             u'Name': 'mybucket',
-             u'Prefix': "",
-             'ResponseMetadata': {
-                 'RequestId': 'XXXXXXXXXXXXXXXX',
-                 'HostId': 'AAAAAAAAAAAAAAAAAAA',
-                 'HTTPStatusCode': 200,
-             }}
+            {
+                'Contents': [
+                    {
+                        'ETag': '"00000000000000000000000000000000"',
+                        'Key': 'test.png',
+                        'LastModified': datetime.datetime(
+                            2014, 3, 1, 17, 6, 40, tzinfo=tzutc()
+                        ),
+                        'Owner': {
+                            'DisplayName': 'dummy',
+                            'ID': 'AAAAAAAAAAAAAAAAAAA',
+                        },
+                        'Size': 6702,
+                        'StorageClass': 'STANDARD',
+                    }
+                ],
+                'IsTruncated': False,
+                'Marker': "",
+                'MaxKeys': 1000,
+                'Name': 'mybucket',
+                'Prefix': "",
+                'ResponseMetadata': {
+                    'RequestId': 'XXXXXXXXXXXXXXXX',
+                    'HostId': 'AAAAAAAAAAAAAAAAAAA',
+                    'HTTPStatusCode': 200,
+                },
+            },
         )
diff -pruN 2.23.6-1/tests/unit/botocore/test_s3_addressing.py 2.31.35-1/tests/unit/botocore/test_s3_addressing.py
--- 2.23.6-1/tests/unit/botocore/test_s3_addressing.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_s3_addressing.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,21 +15,22 @@
 
 import os
 
-from tests import BaseSessionTest, ClientHTTPStubber
-
 from botocore.compat import OrderedDict
 from botocore.handlers import set_list_objects_encoding_type_url
 
+from tests import BaseSessionTest, ClientHTTPStubber
 
-class TestS3Addressing(BaseSessionTest):
 
+class TestS3Addressing(BaseSessionTest):
     def setUp(self):
-        super(TestS3Addressing, self).setUp()
+        super().setUp()
         self.region_name = 'us-east-1'
         self.signature_version = 's3v4'
 
-        self.session.unregister('before-parameter-build.s3.ListObjects',
-                                set_list_objects_encoding_type_url)
+        self.session.unregister(
+            'before-parameter-build.s3.ListObjects',
+            set_list_objects_encoding_type_url,
+        )
 
     def get_prepared_request(self, operation, params):
         client = self.session.create_client('s3', self.region_name)
@@ -42,31 +43,40 @@ class TestS3Addressing(BaseSessionTest):
     def test_list_objects_dns_name(self):
         params = {'Bucket': 'safename'}
         prepared_request = self.get_prepared_request('list_objects', params)
-        self.assertEqual(prepared_request.url,
-                         'https://safename.s3.us-east-1.amazonaws.com/')
+        self.assertEqual(
+            prepared_request.url,
+            'https://safename.s3.us-east-1.amazonaws.com/',
+        )
 
     def test_list_objects_non_dns_name(self):
         params = {'Bucket': 'un_safe_name'}
         prepared_request = self.get_prepared_request('list_objects', params)
-        self.assertEqual(prepared_request.url,
-                         'https://s3.us-east-1.amazonaws.com/un_safe_name')
+        self.assertEqual(
+            prepared_request.url,
+            'https://s3.us-east-1.amazonaws.com/un_safe_name',
+        )
 
     def test_list_objects_dns_name_non_classic(self):
         self.region_name = 'us-west-2'
         params = {'Bucket': 'safename'}
         prepared_request = self.get_prepared_request('list_objects', params)
-        self.assertEqual(prepared_request.url,
-                         'https://safename.s3.us-west-2.amazonaws.com/')
+        self.assertEqual(
+            prepared_request.url,
+            'https://safename.s3.us-west-2.amazonaws.com/',
+        )
 
     def test_list_objects_unicode_query_string_eu_central_1(self):
         self.region_name = 'eu-central-1'
-        params = OrderedDict([('Bucket', 'safename'),
-                             ('Marker', u'\xe4\xf6\xfc-01.txt')])
+        params = OrderedDict(
+            [('Bucket', 'safename'), ('Marker', '\xe4\xf6\xfc-01.txt')]
+        )
         prepared_request = self.get_prepared_request('list_objects', params)
         self.assertEqual(
             prepared_request.url,
-            ('https://safename.s3.eu-central-1.amazonaws.com/'
-             '?marker=%C3%A4%C3%B6%C3%BC-01.txt')
+            (
+                'https://safename.s3.eu-central-1.amazonaws.com/'
+                '?marker=%C3%A4%C3%B6%C3%BC-01.txt'
+            ),
         )
 
     def test_list_objects_in_restricted_regions(self):
@@ -74,8 +84,10 @@ class TestS3Addressing(BaseSessionTest):
         params = {'Bucket': 'safename'}
         prepared_request = self.get_prepared_request('list_objects', params)
         # Note how we keep the region specific endpoint here.
-        self.assertEqual(prepared_request.url,
-                         'https://safename.s3.us-gov-west-1.amazonaws.com/')
+        self.assertEqual(
+            prepared_request.url,
+            'https://safename.s3.us-gov-west-1.amazonaws.com/',
+        )
 
     def test_list_objects_in_fips(self):
         self.region_name = 'fips-us-gov-west-1'
@@ -84,19 +96,21 @@ class TestS3Addressing(BaseSessionTest):
         # Note how we keep the region specific endpoint here.
         self.assertEqual(
             prepared_request.url,
-            'https://safename.s3-fips.us-gov-west-1.amazonaws.com/')
+            'https://safename.s3-fips.us-gov-west-1.amazonaws.com/',
+        )
 
     def test_list_objects_non_dns_name_non_classic(self):
         self.region_name = 'us-west-2'
         params = {'Bucket': 'un_safe_name'}
         prepared_request = self.get_prepared_request('list_objects', params)
-        self.assertEqual(prepared_request.url,
-                         'https://s3.us-west-2.amazonaws.com/un_safe_name')
+        self.assertEqual(
+            prepared_request.url,
+            'https://s3.us-west-2.amazonaws.com/un_safe_name',
+        )
 
     def test_put_object_dns_name_non_classic(self):
         self.region_name = 'us-west-2'
-        file_path = os.path.join(os.path.dirname(__file__),
-                                 'put_object_data')
+        file_path = os.path.join(os.path.dirname(__file__), 'put_object_data')
         with open(file_path, 'rb') as fp:
             params = {
                 'Bucket': 'my.valid.name',
@@ -104,17 +118,17 @@ class TestS3Addressing(BaseSessionTest):
                 'Body': fp,
                 'ACL': 'public-read',
                 'ContentLanguage': 'piglatin',
-                'ContentType': 'text/plain'
+                'ContentType': 'text/plain',
             }
             prepared_request = self.get_prepared_request('put_object', params)
             self.assertEqual(
                 prepared_request.url,
-                'https://s3.us-west-2.amazonaws.com/my.valid.name/mykeyname')
+                'https://s3.us-west-2.amazonaws.com/my.valid.name/mykeyname',
+            )
 
     def test_put_object_dns_name_classic(self):
         self.region_name = 'us-east-1'
-        file_path = os.path.join(os.path.dirname(__file__),
-                                 'put_object_data')
+        file_path = os.path.join(os.path.dirname(__file__), 'put_object_data')
         with open(file_path, 'rb') as fp:
             params = {
                 'Bucket': 'my.valid.name',
@@ -122,17 +136,17 @@ class TestS3Addressing(BaseSessionTest):
                 'Body': fp,
                 'ACL': 'public-read',
                 'ContentLanguage': 'piglatin',
-                'ContentType': 'text/plain'
+                'ContentType': 'text/plain',
             }
             prepared_request = self.get_prepared_request('put_object', params)
             self.assertEqual(
                 prepared_request.url,
-                'https://s3.us-east-1.amazonaws.com/my.valid.name/mykeyname')
+                'https://s3.us-east-1.amazonaws.com/my.valid.name/mykeyname',
+            )
 
     def test_put_object_dns_name_single_letter_non_classic(self):
         self.region_name = 'us-west-2'
-        file_path = os.path.join(os.path.dirname(__file__),
-                                 'put_object_data')
+        file_path = os.path.join(os.path.dirname(__file__), 'put_object_data')
         with open(file_path, 'rb') as fp:
             params = {
                 'Bucket': 'a.valid.name',
@@ -140,30 +154,26 @@ class TestS3Addressing(BaseSessionTest):
                 'Body': fp,
                 'ACL': 'public-read',
                 'ContentLanguage': 'piglatin',
-                'ContentType': 'text/plain'
+                'ContentType': 'text/plain',
             }
             prepared_request = self.get_prepared_request('put_object', params)
             self.assertEqual(
                 prepared_request.url,
-                'https://s3.us-west-2.amazonaws.com/a.valid.name/mykeyname')
+                'https://s3.us-west-2.amazonaws.com/a.valid.name/mykeyname',
+            )
 
     def test_get_object_non_dns_name_non_classic(self):
         self.region_name = 'us-west-2'
-        params = {
-            'Bucket': 'AnInvalidName',
-            'Key': 'mykeyname'
-        }
+        params = {'Bucket': 'AnInvalidName', 'Key': 'mykeyname'}
         prepared_request = self.get_prepared_request('get_object', params)
         self.assertEqual(
             prepared_request.url,
-            'https://s3.us-west-2.amazonaws.com/AnInvalidName/mykeyname')
+            'https://s3.us-west-2.amazonaws.com/AnInvalidName/mykeyname',
+        )
 
     def test_get_object_non_dns_name_classic(self):
         self.region_name = 'us-east-1'
-        params = {
-            'Bucket': 'AnInvalidName',
-            'Key': 'mykeyname'
-        }
+        params = {'Bucket': 'AnInvalidName', 'Key': 'mykeyname'}
         prepared_request = self.get_prepared_request('get_object', params)
         expected_url = (
             'https://s3.us-east-1.amazonaws.com/AnInvalidName/mykeyname'
@@ -172,23 +182,21 @@ class TestS3Addressing(BaseSessionTest):
 
     def test_get_object_ip_address_name_non_classic(self):
         self.region_name = 'us-west-2'
-        params = {
-            'Bucket': '192.168.5.4',
-            'Key': 'mykeyname'}
+        params = {'Bucket': '192.168.5.4', 'Key': 'mykeyname'}
         prepared_request = self.get_prepared_request('get_object', params)
         self.assertEqual(
             prepared_request.url,
-            'https://s3.us-west-2.amazonaws.com/192.168.5.4/mykeyname')
+            'https://s3.us-west-2.amazonaws.com/192.168.5.4/mykeyname',
+        )
 
     def test_get_object_almost_an_ip_address_name_non_classic(self):
         self.region_name = 'us-west-2'
-        params = {
-            'Bucket': '192.168.5.256',
-            'Key': 'mykeyname'}
+        params = {'Bucket': '192.168.5.256', 'Key': 'mykeyname'}
         prepared_request = self.get_prepared_request('get_object', params)
         self.assertEqual(
             prepared_request.url,
-            'https://s3.us-west-2.amazonaws.com/192.168.5.256/mykeyname')
+            'https://s3.us-west-2.amazonaws.com/192.168.5.256/mykeyname',
+        )
 
     def test_invalid_endpoint_raises_exception(self):
         with self.assertRaisesRegex(ValueError, 'Invalid region'):
diff -pruN 2.23.6-1/tests/unit/botocore/test_serialize.py 2.31.35-1/tests/unit/botocore/test_serialize.py
--- 2.23.6-1/tests/unit/botocore/test_serialize.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_serialize.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,21 +11,23 @@ spec.  This can happen for a number of r
   may result in a a coverage gap that would otherwise be untested.
 
 """
+
 import base64
+import datetime
+import decimal
 import io
 import json
-import datetime
-import dateutil.tz
-from tests import unittest
 
-from botocore.model import ServiceModel
+import dateutil.tz
 from botocore import serialize
 from botocore.exceptions import ParamValidationError
+from botocore.model import ServiceModel
 from botocore.serialize import SERIALIZERS
 
+from tests import unittest
 
-class BaseModelWithBlob(unittest.TestCase):
 
+class BaseModelWithBlob(unittest.TestCase):
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'query', 'apiVersion': '2014-01-01'},
@@ -45,20 +47,22 @@ class BaseModelWithBlob(unittest.TestCas
                     'type': 'structure',
                     'members': {
                         'Blob': {'shape': 'BlobType'},
-                    }
+                    },
                 },
                 'BlobType': {
                     'type': 'blob',
-                }
-            }
+                },
+            },
         }
 
     def serialize_to_request(self, input_params):
         service_model = ServiceModel(self.model)
         request_serializer = serialize.create_serializer(
-            service_model.metadata['protocol'])
+            service_model.metadata['protocol']
+        )
         return request_serializer.serialize_to_request(
-            input_params, service_model.operation_model('TestOperation'))
+            input_params, service_model.operation_model('TestOperation')
+        )
 
     def assert_serialized_blob_equals(self, request, blob_bytes):
         # This method handles all the details of the base64 decoding.
@@ -71,30 +75,29 @@ class BaseModelWithBlob(unittest.TestCas
 
 
 class TestBinaryTypes(BaseModelWithBlob):
-
     def test_blob_accepts_bytes_type(self):
         body = b'bytes body'
         request = self.serialize_to_request(input_params={'Blob': body})
-        self.assert_serialized_blob_equals(
-            request, blob_bytes=body)
+        self.assert_serialized_blob_equals(request, blob_bytes=body)
 
     def test_blob_accepts_str_type(self):
-        body = u'ascii text'
+        body = 'ascii text'
         request = self.serialize_to_request(input_params={'Blob': body})
         self.assert_serialized_blob_equals(
-            request, blob_bytes=body.encode('ascii'))
+            request, blob_bytes=body.encode('ascii')
+        )
 
     def test_blob_handles_unicode_chars(self):
-        body = u'\u2713'
+        body = '\u2713'
         request = self.serialize_to_request(input_params={'Blob': body})
         self.assert_serialized_blob_equals(
-            request, blob_bytes=body.encode('utf-8'))
+            request, blob_bytes=body.encode('utf-8')
+        )
 
 
 class TestBinaryTypesJSON(BaseModelWithBlob):
-
     def setUp(self):
-        super(TestBinaryTypesJSON, self).setUp()
+        super().setUp()
         self.model['metadata'] = {
             'protocol': 'json',
             'apiVersion': '2014-01-01',
@@ -107,14 +110,13 @@ class TestBinaryTypesJSON(BaseModelWithB
         request = self.serialize_to_request(input_params={'Blob': body})
         serialized_blob = json.loads(request['body'].decode('utf-8'))['Blob']
         self.assertEqual(
-            base64.b64encode(body).decode('ascii'),
-            serialized_blob)
+            base64.b64encode(body).decode('ascii'), serialized_blob
+        )
 
 
 class TestBinaryTypesWithRestXML(BaseModelWithBlob):
-
     def setUp(self):
-        super(TestBinaryTypesWithRestXML, self).setUp()
+        super().setUp()
         self.model['metadata'] = {
             'protocol': 'rest-xml',
             'apiVersion': '2014-01-01',
@@ -133,7 +135,7 @@ class TestBinaryTypesWithRestXML(BaseMod
     def test_blob_serialization_when_payload_is_unicode(self):
         # When the body is a text type, we should encode the
         # text to bytes.
-        body = u'\u2713'
+        body = '\u2713'
         request = self.serialize_to_request(input_params={'Blob': body})
         self.assertEqual(request['body'], body.encode('utf-8'))
 
@@ -144,7 +146,6 @@ class TestBinaryTypesWithRestXML(BaseMod
 
 
 class TestTimestampHeadersWithRestXML(unittest.TestCase):
-
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'rest-xml', 'apiVersion': '2014-01-01'},
@@ -166,57 +167,69 @@ class TestTimestampHeadersWithRestXML(un
                         'TimestampHeader': {
                             'shape': 'TimestampType',
                             'location': 'header',
-                            'locationName': 'x-timestamp'
+                            'locationName': 'x-timestamp',
                         },
-                    }
+                    },
                 },
                 'TimestampType': {
                     'type': 'timestamp',
-                }
-            }
+                },
+            },
         }
         self.service_model = ServiceModel(self.model)
 
     def serialize_to_request(self, input_params):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'])
+            self.service_model.metadata['protocol']
+        )
         return request_serializer.serialize_to_request(
-            input_params, self.service_model.operation_model('TestOperation'))
+            input_params, self.service_model.operation_model('TestOperation')
+        )
 
     def test_accepts_datetime_object(self):
         request = self.serialize_to_request(
-            {'TimestampHeader': datetime.datetime(2014, 1, 1, 12, 12, 12,
-                                                  tzinfo=dateutil.tz.tzutc())})
-        self.assertEqual(request['headers']['x-timestamp'],
-                         'Wed, 01 Jan 2014 12:12:12 GMT')
+            {
+                'TimestampHeader': datetime.datetime(
+                    2014, 1, 1, 12, 12, 12, tzinfo=dateutil.tz.tzutc()
+                )
+            }
+        )
+        self.assertEqual(
+            request['headers']['x-timestamp'], 'Wed, 01 Jan 2014 12:12:12 GMT'
+        )
 
     def test_accepts_iso_8601_format(self):
         request = self.serialize_to_request(
-            {'TimestampHeader': '2014-01-01T12:12:12+00:00'})
-        self.assertEqual(request['headers']['x-timestamp'],
-                         'Wed, 01 Jan 2014 12:12:12 GMT')
+            {'TimestampHeader': '2014-01-01T12:12:12+00:00'}
+        )
+        self.assertEqual(
+            request['headers']['x-timestamp'], 'Wed, 01 Jan 2014 12:12:12 GMT'
+        )
 
     def test_accepts_iso_8601_format_non_utc(self):
         request = self.serialize_to_request(
-            {'TimestampHeader': '2014-01-01T07:12:12-05:00'})
-        self.assertEqual(request['headers']['x-timestamp'],
-                         'Wed, 01 Jan 2014 12:12:12 GMT')
+            {'TimestampHeader': '2014-01-01T07:12:12-05:00'}
+        )
+        self.assertEqual(
+            request['headers']['x-timestamp'], 'Wed, 01 Jan 2014 12:12:12 GMT'
+        )
 
     def test_accepts_rfc_822_format(self):
         request = self.serialize_to_request(
-            {'TimestampHeader': 'Wed, 01 Jan 2014 12:12:12 GMT'})
-        self.assertEqual(request['headers']['x-timestamp'],
-                         'Wed, 01 Jan 2014 12:12:12 GMT')
+            {'TimestampHeader': 'Wed, 01 Jan 2014 12:12:12 GMT'}
+        )
+        self.assertEqual(
+            request['headers']['x-timestamp'], 'Wed, 01 Jan 2014 12:12:12 GMT'
+        )
 
     def test_accepts_unix_timestamp_integer(self):
-        request = self.serialize_to_request(
-            {'TimestampHeader': 1388578332})
-        self.assertEqual(request['headers']['x-timestamp'],
-                         'Wed, 01 Jan 2014 12:12:12 GMT')
+        request = self.serialize_to_request({'TimestampHeader': 1388578332})
+        self.assertEqual(
+            request['headers']['x-timestamp'], 'Wed, 01 Jan 2014 12:12:12 GMT'
+        )
 
 
 class TestTimestamps(unittest.TestCase):
-
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'query', 'apiVersion': '2014-01-01'},
@@ -236,35 +249,43 @@ class TestTimestamps(unittest.TestCase):
                     'type': 'structure',
                     'members': {
                         'Timestamp': {'shape': 'TimestampType'},
-                    }
+                    },
                 },
                 'TimestampType': {
                     'type': 'timestamp',
-                }
-            }
+                },
+            },
         }
         self.service_model = ServiceModel(self.model)
 
     def serialize_to_request(self, input_params):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'])
+            self.service_model.metadata['protocol']
+        )
         return request_serializer.serialize_to_request(
-            input_params, self.service_model.operation_model('TestOperation'))
+            input_params, self.service_model.operation_model('TestOperation')
+        )
 
     def test_accepts_datetime_object(self):
         request = self.serialize_to_request(
-            {'Timestamp': datetime.datetime(2014, 1, 1, 12, 12, 12,
-                                            tzinfo=dateutil.tz.tzutc())})
+            {
+                'Timestamp': datetime.datetime(
+                    2014, 1, 1, 12, 12, 12, tzinfo=dateutil.tz.tzutc()
+                )
+            }
+        )
         self.assertEqual(request['body']['Timestamp'], '2014-01-01T12:12:12Z')
 
     def test_accepts_naive_datetime_object(self):
         request = self.serialize_to_request(
-            {'Timestamp': datetime.datetime(2014, 1, 1, 12, 12, 12)})
+            {'Timestamp': datetime.datetime(2014, 1, 1, 12, 12, 12)}
+        )
         self.assertEqual(request['body']['Timestamp'], '2014-01-01T12:12:12Z')
 
     def test_accepts_iso_8601_format(self):
         request = self.serialize_to_request(
-            {'Timestamp': '2014-01-01T12:12:12Z'})
+            {'Timestamp': '2014-01-01T12:12:12Z'}
+        )
         self.assertEqual(request['body']['Timestamp'], '2014-01-01T12:12:12Z')
 
     def test_accepts_timestamp_without_tz_info(self):
@@ -272,22 +293,28 @@ class TestTimestamps(unittest.TestCase):
         # UTC.  This is also the previous behavior from older versions
         # of botocore so we want to make sure we preserve this behavior.
         request = self.serialize_to_request(
-            {'Timestamp': '2014-01-01T12:12:12'})
+            {'Timestamp': '2014-01-01T12:12:12'}
+        )
         self.assertEqual(request['body']['Timestamp'], '2014-01-01T12:12:12Z')
 
     def test_microsecond_timestamp_without_tz_info(self):
         request = self.serialize_to_request(
-            {'Timestamp': '2014-01-01T12:12:12.123456'})
-        self.assertEqual(request['body']['Timestamp'],
-                         '2014-01-01T12:12:12.123456Z')
+            {'Timestamp': '2014-01-01T12:12:12.123456'}
+        )
+        self.assertEqual(
+            request['body']['Timestamp'], '2014-01-01T12:12:12.123456Z'
+        )
 
 
 class TestJSONTimestampSerialization(unittest.TestCase):
-
     def setUp(self):
         self.model = {
-            'metadata': {'protocol': 'json', 'apiVersion': '2014-01-01',
-                         'jsonVersion': '1.1', 'targetPrefix': 'foo'},
+            'metadata': {
+                'protocol': 'json',
+                'apiVersion': '2014-01-01',
+                'jsonVersion': '1.1',
+                'targetPrefix': 'foo',
+            },
             'documentation': '',
             'operations': {
                 'TestOperation': {
@@ -304,43 +331,127 @@ class TestJSONTimestampSerialization(uni
                     'type': 'structure',
                     'members': {
                         'Timestamp': {'shape': 'TimestampType'},
-                    }
+                    },
                 },
                 'TimestampType': {
                     'type': 'timestamp',
-                }
-            }
+                },
+            },
         }
         self.service_model = ServiceModel(self.model)
 
     def serialize_to_request(self, input_params):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'])
+            self.service_model.metadata['protocol']
+        )
         return request_serializer.serialize_to_request(
-            input_params, self.service_model.operation_model('TestOperation'))
+            input_params, self.service_model.operation_model('TestOperation')
+        )
 
     def test_accepts_iso_8601_format(self):
-        body = json.loads(self.serialize_to_request(
-            {'Timestamp': '1970-01-01T00:00:00'})['body'].decode('utf-8'))
+        body = json.loads(
+            self.serialize_to_request({'Timestamp': '1970-01-01T00:00:00'})[
+                'body'
+            ].decode('utf-8')
+        )
         self.assertEqual(body['Timestamp'], 0)
 
     def test_accepts_epoch(self):
-        body = json.loads(self.serialize_to_request(
-            {'Timestamp': '0'})['body'].decode('utf-8'))
+        body = json.loads(
+            self.serialize_to_request({'Timestamp': '0'})['body'].decode(
+                'utf-8'
+            )
+        )
         self.assertEqual(body['Timestamp'], 0)
         # Can also be an integer 0.
-        body = json.loads(self.serialize_to_request(
-            {'Timestamp': 0})['body'].decode('utf-8'))
+        body = json.loads(
+            self.serialize_to_request({'Timestamp': 0})['body'].decode('utf-8')
+        )
         self.assertEqual(body['Timestamp'], 0)
 
     def test_accepts_partial_iso_format(self):
-        body = json.loads(self.serialize_to_request(
-            {'Timestamp': '1970-01-01'})['body'].decode('utf-8'))
+        body = json.loads(
+            self.serialize_to_request({'Timestamp': '1970-01-01'})[
+                'body'
+            ].decode('utf-8')
+        )
         self.assertEqual(body['Timestamp'], 0)
 
 
-class TestInstanceCreation(unittest.TestCase):
+class TestJSONFloatSerialization(unittest.TestCase):
+    def setUp(self):
+        self.model = {
+            'metadata': {
+                'protocol': 'json',
+                'apiVersion': '2014-01-01',
+                'jsonVersion': '1.1',
+                'targetPrefix': 'foo',
+            },
+            'documentation': '',
+            'operations': {
+                'TestOperation': {
+                    'name': 'TestOperation',
+                    'http': {
+                        'method': 'POST',
+                        'requestUri': '/',
+                    },
+                    'input': {'shape': 'InputShape'},
+                }
+            },
+            'shapes': {
+                'InputShape': {
+                    'type': 'structure',
+                    'members': {
+                        'Double': {'shape': 'DoubleType'},
+                        'Float': {'shape': 'FloatType'},
+                    },
+                },
+                'DoubleType': {
+                    'type': 'double',
+                },
+                'FloatType': {
+                    'type': 'float',
+                },
+            },
+        }
+        self.service_model = ServiceModel(self.model)
 
+    def serialize_to_request(self, input_params):
+        request_serializer = serialize.create_serializer(
+            self.service_model.metadata['protocol']
+        )
+        return request_serializer.serialize_to_request(
+            input_params, self.service_model.operation_model('TestOperation')
+        )
+
+    def test_accepts_decimal_with_precision_above_floats(self):
+        float_string = '0.12345678901234567890'
+        float_as_float = float(
+            float_string
+        )  # This has less precision; it will be lost on serialization
+        float_as_decimal = decimal.Decimal(float_string)
+        body = json.loads(
+            self.serialize_to_request({'Float': float_as_decimal})[
+                'body'
+            ].decode('utf-8')
+        )
+        self.assertEqual(decimal.Decimal(body['Float']), float_as_float)
+
+    def test_accepts_decimal_with_precision_above_doubles(self):
+        double_string = '0.12345678901234567890'
+        double_as_float = float(
+            double_string
+        )  # This has less precision; it will be lost on serialization
+        double_as_decimal = decimal.Decimal(double_string)
+        body = json.loads(
+            self.serialize_to_request({'Double': double_as_decimal})[
+                'body'
+            ].decode('utf-8')
+        )
+        self.assertEqual(decimal.Decimal(body['Double']), double_as_float)
+
+
+class TestInstanceCreation(unittest.TestCase):
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'query', 'apiVersion': '2014-01-01'},
@@ -360,13 +471,10 @@ class TestInstanceCreation(unittest.Test
                     'type': 'structure',
                     'members': {
                         'Timestamp': {'shape': 'StringTestType'},
-                    }
+                    },
                 },
-                'StringTestType': {
-                    'type': 'string',
-                    'min': 15
-                }
-            }
+                'StringTestType': {'type': 'string', 'min': 15},
+            },
         }
         self.service_model = ServiceModel(self.model)
 
@@ -374,7 +482,8 @@ class TestInstanceCreation(unittest.Test
         valid_string = 'valid_string_with_min_15_chars'
         request = request_serializer.serialize_to_request(
             {'Timestamp': valid_string},
-            self.service_model.operation_model('TestOperation'))
+            self.service_model.operation_model('TestOperation'),
+        )
 
         self.assertEqual(request['body']['Timestamp'], valid_string)
 
@@ -382,41 +491,46 @@ class TestInstanceCreation(unittest.Test
         invalid_string = 'short string'
         request = request_serializer.serialize_to_request(
             {'Timestamp': invalid_string},
-            self.service_model.operation_model('TestOperation'))
+            self.service_model.operation_model('TestOperation'),
+        )
 
         self.assertEqual(request['body']['Timestamp'], invalid_string)
 
     def test_instantiate_without_validation(self):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'], False)
+            self.service_model.metadata['protocol'], False
+        )
 
         try:
             self.assert_serialize_valid_parameter(request_serializer)
-        except ParamValidationError as e:
+        except ParamValidationError:
             self.fail(
-                "Shouldn't fail serializing valid parameter without validation".format(e))
+                "Shouldn't fail serializing valid parameter without validation".format()
+            )
 
         try:
             self.assert_serialize_invalid_parameter(request_serializer)
-        except ParamValidationError as e:
+        except ParamValidationError:
             self.fail(
-                "Shouldn't fail serializing invalid parameter without validation".format(e))
+                "Shouldn't fail serializing invalid parameter without validation".format()
+            )
 
     def test_instantiate_with_validation(self):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'], True)
+            self.service_model.metadata['protocol'], True
+        )
         try:
             self.assert_serialize_valid_parameter(request_serializer)
-        except ParamValidationError as e:
+        except ParamValidationError:
             self.fail(
-                "Shouldn't fail serializing valid parameter with validation".format(e))
+                "Shouldn't fail serializing valid parameter with validation".format()
+            )
 
         with self.assertRaises(ParamValidationError):
             self.assert_serialize_invalid_parameter(request_serializer)
 
 
 class TestHeaderSerialization(BaseModelWithBlob):
-
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'rest-xml', 'apiVersion': '2014-01-01'},
@@ -438,14 +552,12 @@ class TestHeaderSerialization(BaseModelW
                         'ContentLength': {
                             'shape': 'Integer',
                             'location': 'header',
-                            'locationName': 'Content-Length'
+                            'locationName': 'Content-Length',
                         },
-                    }
-                },
-                'Integer': {
-                    'type': 'integer'
+                    },
                 },
-            }
+                'Integer': {'type': 'integer'},
+            },
         }
         self.service_model = ServiceModel(self.model)
 
@@ -455,7 +567,6 @@ class TestHeaderSerialization(BaseModelW
 
 
 class TestRestXMLUnicodeSerialization(unittest.TestCase):
-
     def setUp(self):
         self.model = {
             'metadata': {'protocol': 'rest-xml', 'apiVersion': '2014-01-01'},
@@ -474,34 +585,31 @@ class TestRestXMLUnicodeSerialization(un
                 'InputShape': {
                     'type': 'structure',
                     'members': {
-                        'Foo': {
-                            'shape': 'FooShape',
-                            'locationName': 'Foo'
-                        },
+                        'Foo': {'shape': 'FooShape', 'locationName': 'Foo'},
                     },
-                    'payload': 'Foo'
+                    'payload': 'Foo',
                 },
                 'FooShape': {
                     'type': 'list',
-                    'member': {'shape': 'StringShape'}
+                    'member': {'shape': 'StringShape'},
                 },
                 'StringShape': {
                     'type': 'string',
-                }
-            }
+                },
+            },
         }
         self.service_model = ServiceModel(self.model)
 
     def serialize_to_request(self, input_params):
         request_serializer = serialize.create_serializer(
-            self.service_model.metadata['protocol'])
+            self.service_model.metadata['protocol']
+        )
         return request_serializer.serialize_to_request(
-            input_params, self.service_model.operation_model('TestOperation'))
+            input_params, self.service_model.operation_model('TestOperation')
+        )
 
     def test_restxml_serializes_unicode(self):
-        params = {
-            'Foo': [u'\u65e5\u672c\u8a9e\u3067\u304a\uff4b']
-        }
+        params = {'Foo': ['\u65e5\u672c\u8a9e\u3067\u304a\uff4b']}
         try:
             self.serialize_to_request(params)
         except UnicodeEncodeError:
diff -pruN 2.23.6-1/tests/unit/botocore/test_session.py 2.31.35-1/tests/unit/botocore/test_session.py
--- 2.23.6-1/tests/unit/botocore/test_session.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_session.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,29 +12,27 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import botocore.config
-from tests import mock, unittest, create_session, temporary_file
-import os
 import logging
-import tempfile
+import os
 import shutil
+import tempfile
 
-import pytest
-
-import botocore.session
+import botocore.config
 import botocore.exceptions
-from botocore import UNSIGNED
-from botocore.model import ServiceModel
-from botocore import client
+import botocore.loaders
+import botocore.session
+import pytest
+from botocore import UNSIGNED, client
+from botocore.configprovider import ConfigChainFactory
 from botocore.hooks import HierarchicalEmitter
-from botocore.waiter import WaiterModel
+from botocore.model import ServiceModel
 from botocore.paginate import PaginatorModel
-from botocore.configprovider import ConfigChainFactory
-import botocore.loaders
+from botocore.waiter import WaiterModel
 
+from tests import create_session, mock, temporary_file, unittest
 
-class BaseSessionTest(unittest.TestCase):
 
+class BaseSessionTest(unittest.TestCase):
     def setUp(self):
         self.environ = {}
         self.environ_patch = mock.patch('os.environ', self.environ)
@@ -43,8 +41,9 @@ class BaseSessionTest(unittest.TestCase)
         self.environ['FOO_REGION'] = 'us-west-11'
         data_path = os.path.join(os.path.dirname(__file__), 'data')
         self.environ['FOO_DATA_PATH'] = data_path
-        config_path = os.path.join(os.path.dirname(__file__), 'cfg',
-                                   'foo_config')
+        config_path = os.path.join(
+            os.path.dirname(__file__), 'cfg', 'foo_config'
+        )
         self.environ['FOO_CONFIG_FILE'] = config_path
         self.session = create_session()
         config_chain_builder = ConfigChainFactory(
@@ -99,7 +98,6 @@ class BaseSessionTest(unittest.TestCase)
 
 
 class SessionTest(BaseSessionTest):
-
     def close_log_file_handler(self, tempdir, filename):
         logger = logging.getLogger('botocore')
         handlers = logger.handlers
@@ -174,13 +172,15 @@ class SessionTest(BaseSessionTest):
         self.environ['FOO_TIMEOUT'] = '10'
         # But we should type convert this to a string.
         self.assertEqual(
-            self.session.get_config_variable('metadata_service_timeout'), 10)
+            self.session.get_config_variable('metadata_service_timeout'), 10
+        )
 
     def test_default_profile_specified_raises_exception(self):
         # If you explicity set the default profile and you don't
         # have that in your config file, an exception is raised.
-        config_path = os.path.join(os.path.dirname(__file__), 'cfg',
-                                   'boto_config_empty')
+        config_path = os.path.join(
+            os.path.dirname(__file__), 'cfg', 'boto_config_empty'
+        )
         self.environ['FOO_CONFIG_FILE'] = config_path
         self.environ['FOO_PROFILE'] = 'default'
         # In this case, even though we specified default, because
@@ -214,9 +214,13 @@ class SessionTest(BaseSessionTest):
             f.flush()
 
             full_config = self.session.full_config
-            self.assertEqual(full_config['profiles']['newprofile'],
-                             {'aws_access_key_id': 'FROM_CREDS_FILE_1',
-                              'aws_secret_access_key': 'FROM_CREDS_FILE_2'})
+            self.assertEqual(
+                full_config['profiles']['newprofile'],
+                {
+                    'aws_access_key_id': 'FROM_CREDS_FILE_1',
+                    'aws_secret_access_key': 'FROM_CREDS_FILE_2',
+                },
+            )
 
     def test_path_not_in_available_profiles(self):
         with temporary_file('w') as f:
@@ -228,12 +232,15 @@ class SessionTest(BaseSessionTest):
 
             profiles = self.session.available_profiles
             self.assertEqual(
-                set(profiles),
-                set(['foo', 'default', 'newprofile']))
+                set(profiles), set(['foo', 'default', 'newprofile'])
+            )
 
     def test_emit_delegates_to_emitter(self):
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         self.session.register('foo', handler)
         self.session.emit('foo')
         self.assertEqual(len(calls), 1)
@@ -243,7 +250,10 @@ class SessionTest(BaseSessionTest):
         events = HierarchicalEmitter()
         session = create_session(event_hooks=events)
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         events.register('foo', handler)
 
         session.emit('foo')
@@ -277,7 +287,10 @@ class SessionTest(BaseSessionTest):
 
     def test_register_with_unique_id(self):
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         self.session.register('foo', handler, unique_id='bar')
         self.session.emit('foo')
         self.assertEqual(calls[0]['event_name'], 'foo')
@@ -289,20 +302,21 @@ class SessionTest(BaseSessionTest):
 
 class TestBuiltinEventHandlers(BaseSessionTest):
     def setUp(self):
-        super(TestBuiltinEventHandlers, self).setUp()
+        super().setUp()
         self.builtin_handlers = [
             ('foo', self.on_foo),
         ]
         self.foo_called = False
-        self.handler_patch = mock.patch('botocore.handlers.BUILTIN_HANDLERS',
-                                        self.builtin_handlers)
+        self.handler_patch = mock.patch(
+            'botocore.handlers.BUILTIN_HANDLERS', self.builtin_handlers
+        )
         self.handler_patch.start()
 
     def on_foo(self, **kwargs):
         self.foo_called = True
 
     def tearDown(self):
-        super(TestBuiltinEventHandlers, self).tearDown()
+        super().tearDown()
         self.handler_patch.stop()
 
     def test_registered_builtin_handlers(self):
@@ -327,8 +341,9 @@ class TestSessionConfigurationVars(BaseS
 
         # Explicit override.
         self.session.set_config_variable('foobar', 'session-instance')
-        self.assertEqual(self.session.get_config_variable('foobar'),
-                         'session-instance')
+        self.assertEqual(
+            self.session.get_config_variable('foobar'), 'session-instance'
+        )
 
         # Back to default value.
         del self.environ['FOOBAR']
@@ -350,8 +365,7 @@ class TestSessionConfigurationVars(BaseS
         value = self.session.get_config_variable('region')
         self.assertEqual(value, 'instance-var')
 
-        value = self.session.get_config_variable(
-            'region', methods=('env',))
+        value = self.session.get_config_variable('region', methods=('env',))
         self.assertEqual(value, 'env-var')
 
 
@@ -360,14 +374,16 @@ class TestSessionPartitionFiles(BaseSess
         mock_resolver = mock.Mock()
         mock_resolver.get_available_partitions.return_value = ['foo']
         self.session._register_internal_component(
-            'endpoint_resolver', mock_resolver)
+            'endpoint_resolver', mock_resolver
+        )
         self.assertEqual(['foo'], self.session.get_available_partitions())
 
     def test_proxies_list_endpoints_to_resolver(self):
         resolver = mock.Mock()
         resolver.get_available_endpoints.return_value = ['a', 'b']
         self.session._register_internal_component(
-            'endpoint_resolver', resolver)
+            'endpoint_resolver', resolver
+        )
         self.session.get_available_regions('foo', 'bar', True)
 
     def test_provides_empty_list_for_unknown_service_regions(self):
@@ -387,7 +403,8 @@ class TestSessionUserAgent(BaseSessionTe
     def test_can_append_to_user_agent(self):
         self.session.user_agent_extra = 'custom-thing/other'
         self.assertTrue(
-            self.session.user_agent().endswith('custom-thing/other'))
+            self.session.user_agent().endswith('custom-thing/other')
+        )
 
     def test_execution_env_not_set(self):
         self.assertFalse(self.session.user_agent().endswith('FooEnv'))
@@ -423,9 +440,10 @@ class TestConfigLoaderObject(BaseSession
             session.set_config_variable('credentials_file', f.name)
             # Now trying to retrieve the scoped config should pull in
             # values from the shared credentials file.
-            self.assertEqual(session.get_scoped_config(),
-                             {'aws_access_key_id': 'a',
-                              'aws_secret_access_key': 'b'})
+            self.assertEqual(
+                session.get_scoped_config(),
+                {'aws_access_key_id': 'a', 'aws_secret_access_key': 'b'},
+            )
 
 
 class TestGetServiceModel(BaseSessionTest):
@@ -451,8 +469,7 @@ class TestGetPaginatorModel(BaseSessionT
         # Verify we get a PaginatorModel back
         self.assertIsInstance(model, PaginatorModel)
         # Verify we called the loader correctly.
-        loader.load_service_model.assert_called_with(
-            'foo', 'paginators-1')
+        loader.load_service_model.assert_called_with('foo', 'paginators-1')
 
 
 class TestGetWaiterModel(BaseSessionTest):
@@ -467,8 +484,7 @@ class TestGetWaiterModel(BaseSessionTest
         self.assertIsInstance(model, WaiterModel)
         self.assertEqual(model.waiter_names, [])
         # and (2) call the loader correctly.
-        loader.load_service_model.assert_called_with(
-            'foo', 'waiters-2')
+        loader.load_service_model.assert_called_with('foo', 'waiters-2')
 
 
 class TestCreateClient(BaseSessionTest):
@@ -478,36 +494,40 @@ class TestCreateClient(BaseSessionTest):
 
     def test_credential_provider_not_called_when_creds_provided(self):
         cred_provider = mock.Mock()
-        self.session.register_component(
-            'credential_provider', cred_provider)
+        self.session.register_component('credential_provider', cred_provider)
         self.session.create_client(
-            'sts', 'us-west-2',
+            'sts',
+            'us-west-2',
             aws_access_key_id='foo',
             aws_secret_access_key='bar',
-            aws_session_token='baz')
-        self.assertFalse(cred_provider.load_credentials.called,
-                         "Credential provider was called even though "
-                         "explicit credentials were provided to the "
-                         "create_client call.")
+            aws_session_token='baz',
+        )
+        self.assertFalse(
+            cred_provider.load_credentials.called,
+            "Credential provider was called even though "
+            "explicit credentials were provided to the "
+            "create_client call.",
+        )
 
     def test_cred_provider_called_when_partial_creds_provided(self):
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             self.session.create_client(
-                'sts', 'us-west-2',
+                'sts',
+                'us-west-2',
                 aws_access_key_id='foo',
-                aws_secret_access_key=None
+                aws_secret_access_key=None,
             )
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             self.session.create_client(
-                'sts', 'us-west-2',
+                'sts',
+                'us-west-2',
                 aws_access_key_id=None,
                 aws_secret_access_key='foo',
             )
 
     def test_cred_provider_not_called_on_unsigned_client(self):
         cred_provider = mock.Mock()
-        self.session.register_component(
-            'credential_provider', cred_provider)
+        self.session.register_component('credential_provider', cred_provider)
         config = botocore.config.Config(signature_version=UNSIGNED)
         self.session.create_client('sts', 'us-west-2', config=config)
         self.assertFalse(cred_provider.load_credentials.called)
@@ -522,9 +542,16 @@ class TestCreateClient(BaseSessionTest):
         config = botocore.config.Config(region_name='us-west-2')
         self.session.create_client('sts', config=config)
         client_creator.return_value.create_client.assert_called_with(
-            service_name=mock.ANY, region_name=mock.ANY, is_secure=mock.ANY,
-            endpoint_url=mock.ANY, verify=mock.ANY, credentials=mock.ANY,
-            scoped_config=mock.ANY, client_config=config, auth_token=mock.ANY)
+            service_name=mock.ANY,
+            region_name=mock.ANY,
+            is_secure=mock.ANY,
+            endpoint_url=mock.ANY,
+            verify=mock.ANY,
+            credentials=mock.ANY,
+            scoped_config=mock.ANY,
+            client_config=config,
+            auth_token=mock.ANY,
+        )
 
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_default_client_config(self, client_creator):
@@ -533,9 +560,16 @@ class TestCreateClient(BaseSessionTest):
         self.session.create_client('sts')
 
         client_creator.return_value.create_client.assert_called_with(
-            service_name=mock.ANY, region_name=mock.ANY, is_secure=mock.ANY,
-            endpoint_url=mock.ANY, verify=mock.ANY, credentials=mock.ANY,
-            scoped_config=mock.ANY, client_config=config, auth_token=mock.ANY)
+            service_name=mock.ANY,
+            region_name=mock.ANY,
+            is_secure=mock.ANY,
+            endpoint_url=mock.ANY,
+            verify=mock.ANY,
+            credentials=mock.ANY,
+            scoped_config=mock.ANY,
+            client_config=config,
+            auth_token=mock.ANY,
+        )
 
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_merging_client_configs(self, client_creator):
@@ -547,7 +581,9 @@ class TestCreateClient(BaseSessionTest):
         # Grab the client config used in creating the client
         used_client_config = (
             client_creator.return_value.create_client.call_args[1][
-                'client_config'])
+                'client_config'
+            ]
+        )
         # Check that the client configs were merged
         self.assertEqual(used_client_config.region_name, 'us-east-1')
         # Make sure that the client config used is not the default client
@@ -556,15 +592,15 @@ class TestCreateClient(BaseSessionTest):
         self.assertIsNot(used_client_config, other_config)
 
     def test_create_client_with_region(self):
-        ec2_client = self.session.create_client(
-            'ec2', 'us-west-2')
+        ec2_client = self.session.create_client('ec2', 'us-west-2')
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
     def test_create_client_with_region_and_client_config(self):
         config = botocore.config.Config()
         # Use a client config with no region configured.
         ec2_client = self.session.create_client(
-            'ec2', region_name='us-west-2', config=config)
+            'ec2', region_name='us-west-2', config=config
+        )
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
         # If the region name is changed, it should not change the
@@ -573,8 +609,7 @@ class TestCreateClient(BaseSessionTest):
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
         # Now make a new client with the updated client config.
-        ec2_client = self.session.create_client(
-            'ec2', config=config)
+        ec2_client = self.session.create_client('ec2', config=config)
         self.assertEqual(ec2_client.meta.region_name, 'us-east-1')
 
     def test_create_client_no_region_and_no_client_config(self):
@@ -591,8 +626,9 @@ class TestCreateClient(BaseSessionTest):
             f.flush()
 
             self.session.create_client('ec2', 'us-west-2')
-            call_kwargs = client_creator.return_value.\
-                create_client.call_args[1]
+            call_kwargs = client_creator.return_value.create_client.call_args[
+                1
+            ]
             self.assertEqual(call_kwargs['verify'], 'config-certs.pem')
 
     @mock.patch('botocore.client.ClientCreator')
@@ -605,7 +641,8 @@ class TestCreateClient(BaseSessionTest):
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_verify_param(self, client_creator):
         self.session.create_client(
-            'ec2', 'us-west-2', verify='verify-certs.pem')
+            'ec2', 'us-west-2', verify='verify-certs.pem'
+        )
         call_kwargs = client_creator.return_value.create_client.call_args[1]
         self.assertEqual(call_kwargs['verify'], 'verify-certs.pem')
 
@@ -624,64 +661,113 @@ class TestCreateClient(BaseSessionTest):
 
             # Set the ca cert using the verify parameter
             self.session.create_client(
-                'ec2', 'us-west-2', verify='verify-certs.pem')
-            call_kwargs = client_creator.return_value.\
-                create_client.call_args[1]
+                'ec2', 'us-west-2', verify='verify-certs.pem'
+            )
+            call_kwargs = client_creator.return_value.create_client.call_args[
+                1
+            ]
             # The verify parameter should override all the other
             # configurations
             self.assertEqual(call_kwargs['verify'], 'verify-certs.pem')
 
+    @mock.patch('botocore.client.ClientCreator')
+    def test_create_client_with_credentials(self, client_creator):
+        self.session.create_client(
+            'sts',
+            'us-west-2',
+            aws_access_key_id='foo',
+            aws_secret_access_key='bar',
+            aws_session_token='baz',
+            aws_account_id='bin',
+        )
+        credentials = (
+            client_creator.return_value.create_client.call_args.kwargs[
+                'credentials'
+            ]
+        )
+        self.assertEqual(credentials.access_key, 'foo')
+        self.assertEqual(credentials.secret_key, 'bar')
+        self.assertEqual(credentials.token, 'baz')
+        self.assertEqual(credentials.account_id, 'bin')
+
+    @mock.patch('botocore.client.ClientCreator')
+    def test_create_client_with_ignored_credentials(self, client_creator):
+        with self.assertLogs('botocore.session', level='DEBUG') as log:
+            self.session.create_client(
+                'sts',
+                'us-west-2',
+                aws_account_id='foo',
+            )
+            credentials = (
+                client_creator.return_value.create_client.call_args.kwargs[
+                    'credentials'
+                ]
+            )
+            self.assertIn(
+                'Ignoring the following credential-related values',
+                log.output[0],
+            )
+            self.assertIn('aws_account_id', log.output[0])
+            self.assertEqual(credentials.account_id, None)
+
 
 class TestSessionComponent(BaseSessionTest):
     def test_internal_component(self):
         component = object()
         self.session._register_internal_component('internal', component)
         self.assertIs(
-            self.session._get_internal_component('internal'), component)
+            self.session._get_internal_component('internal'), component
+        )
         with self.assertRaises(ValueError):
             self.session.get_component('internal')
 
     def test_internal_endpoint_resolver_is_same_as_deprecated_public(self):
         endpoint_resolver = self.session._get_internal_component(
-            'endpoint_resolver')
+            'endpoint_resolver'
+        )
         # get_component has been deprecated to the public
         with pytest.warns(DeprecationWarning):
             self.assertIs(
                 self.session.get_component('endpoint_resolver'),
-                endpoint_resolver
+                endpoint_resolver,
             )
 
     def test_internal_exceptions_factory_is_same_as_deprecated_public(self):
         exceptions_factory = self.session._get_internal_component(
-            'exceptions_factory')
+            'exceptions_factory'
+        )
         # get_component has been deprecated to the public
         with pytest.warns(DeprecationWarning):
             self.assertIs(
                 self.session.get_component('exceptions_factory'),
-                exceptions_factory
+                exceptions_factory,
             )
 
 
 class TestClientMonitoring(BaseSessionTest):
     def assert_created_client_is_monitored(self, session):
-        with mock.patch('botocore.monitoring.Monitor',
-                        spec=True) as mock_monitor:
+        with mock.patch(
+            'botocore.monitoring.Monitor', spec=True
+        ) as mock_monitor:
             client = session.create_client('ec2', 'us-west-2')
         mock_monitor.return_value.register.assert_called_with(
-            client.meta.events)
+            client.meta.events
+        )
 
     def assert_monitoring_host_and_port(self, session, host, port):
-        with mock.patch('botocore.monitoring.SocketPublisher',
-                        spec=True) as mock_publisher:
-            client = session.create_client('ec2', 'us-west-2')
+        with mock.patch(
+            'botocore.monitoring.SocketPublisher', spec=True
+        ) as mock_publisher:
+            session.create_client('ec2', 'us-west-2')
         self.assertEqual(mock_publisher.call_count, 1)
         _, args, kwargs = mock_publisher.mock_calls[0]
         self.assertEqual(kwargs.get('host'), host)
         self.assertEqual(kwargs.get('port'), port)
 
     def assert_created_client_is_not_monitored(self, session):
-        with mock.patch('botocore.session.monitoring.Monitor',
-                        spec=True) as mock_monitor:
+        with mock.patch(
+            'botocore.session.monitoring.Monitor', spec=True
+        ) as mock_monitor:
             session.create_client('ec2', 'us-west-2')
             mock_monitor.return_value.register.assert_not_called()
 
@@ -753,14 +839,20 @@ class TestComponentLocator(unittest.Test
 
     def test_can_lazy_register_a_component(self):
         component = object()
-        lazy = lambda: component
+
+        def lazy():
+            return component
+
         self.components.lazy_register_component('foo', lazy)
         self.assertIs(self.components.get_component('foo'), component)
 
     def test_latest_registration_wins_even_if_lazy(self):
         first = object()
         second = object()
-        lazy_second = lambda: second
+
+        def lazy_second():
+            return second
+
         self.components.register_component('foo', first)
         self.components.lazy_register_component('foo', lazy_second)
         self.assertIs(self.components.get_component('foo'), second)
@@ -768,12 +860,17 @@ class TestComponentLocator(unittest.Test
     def test_latest_registration_overrides_lazy(self):
         first = object()
         second = object()
-        lazy_first = lambda: first
+
+        def lazy_first():
+            return first
+
         self.components.lazy_register_component('foo', lazy_first)
         self.components.register_component('foo', second)
         self.assertIs(self.components.get_component('foo'), second)
 
-    def test_lazy_registration_factory_does_not_remove_from_list_on_error(self):
+    def test_lazy_registration_factory_does_not_remove_from_list_on_error(
+        self,
+    ):
         class ArbitraryError(Exception):
             pass
 
@@ -814,7 +911,7 @@ class TestSessionRegionSetup(BaseSession
 
     def test_new_session_with_invalid_region(self):
         with self.assertRaises(botocore.exceptions.InvalidRegionError):
-            s3_client = self.session.create_client('s3', 'not.a.real#region')
+            self.session.create_client('s3', 'not.a.real#region')
 
     def test_new_session_with_none_region(self):
         s3_client = self.session.create_client('s3', region_name=None)
diff -pruN 2.23.6-1/tests/unit/botocore/test_session_legacy.py 2.31.35-1/tests/unit/botocore/test_session_legacy.py
--- 2.23.6-1/tests/unit/botocore/test_session_legacy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_session_legacy.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,23 +12,23 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import botocore.config
-from tests import mock, unittest, create_session, temporary_file
-import os
 import logging
-import tempfile
+import os
 import shutil
+import tempfile
 
-import pytest
-
-import botocore.session
+import botocore.config
 import botocore.exceptions
-from botocore.model import ServiceModel
+import botocore.loaders
+import botocore.session
+import pytest
 from botocore import client
 from botocore.hooks import HierarchicalEmitter
-from botocore.waiter import WaiterModel
+from botocore.model import ServiceModel
 from botocore.paginate import PaginatorModel
-import botocore.loaders
+from botocore.waiter import WaiterModel
+
+from tests import create_session, mock, temporary_file, unittest
 
 
 # This is an old version of the session tests to ensure backwards compatibility
@@ -36,7 +36,6 @@ import botocore.loaders
 # which should be prefered. When backwards compatibility can be dropped then
 # this test should be removed.
 class BaseSessionTest(unittest.TestCase):
-
     def setUp(self):
         self.env_vars = {
             'profile': (None, 'FOO_PROFILE', None, None),
@@ -53,8 +52,9 @@ class BaseSessionTest(unittest.TestCase)
         self.environ['FOO_REGION'] = 'us-west-11'
         data_path = os.path.join(os.path.dirname(__file__), 'data')
         self.environ['FOO_DATA_PATH'] = data_path
-        config_path = os.path.join(os.path.dirname(__file__), 'cfg',
-                                   'foo_config')
+        config_path = os.path.join(
+            os.path.dirname(__file__), 'cfg', 'foo_config'
+        )
         self.environ['FOO_CONFIG_FILE'] = config_path
         self.session = create_session(session_vars=self.env_vars)
 
@@ -63,7 +63,6 @@ class BaseSessionTest(unittest.TestCase)
 
 
 class SessionTest(BaseSessionTest):
-
     def close_log_file_handler(self, tempdir, filename):
         logger = logging.getLogger('botocore')
         handlers = logger.handlers
@@ -81,8 +80,12 @@ class SessionTest(BaseSessionTest):
 
     def test_supports_multiple_env_vars_for_single_logical_name(self):
         env_vars = {
-            'profile': (None, ['BAR_DEFAULT_PROFILE', 'BAR_PROFILE'],
-                        None, None),
+            'profile': (
+                None,
+                ['BAR_DEFAULT_PROFILE', 'BAR_PROFILE'],
+                None,
+                None,
+            ),
         }
         session = create_session(session_vars=env_vars)
         self.environ['BAR_DEFAULT_PROFILE'] = 'first'
@@ -101,8 +104,12 @@ class SessionTest(BaseSessionTest):
 
     def test_multiple_env_vars_uses_second_var(self):
         env_vars = {
-            'profile': (None, ['BAR_DEFAULT_PROFILE', 'BAR_PROFILE'],
-                        None, None),
+            'profile': (
+                None,
+                ['BAR_DEFAULT_PROFILE', 'BAR_PROFILE'],
+                None,
+                None,
+            ),
         }
         session = create_session(session_vars=env_vars)
         self.environ.pop('BAR_DEFAULT_PROFILE', None)
@@ -111,8 +118,9 @@ class SessionTest(BaseSessionTest):
 
     def test_profile(self):
         self.assertEqual(self.session.get_config_variable('profile'), 'foo')
-        self.assertEqual(self.session.get_config_variable('region'),
-                         'us-west-11')
+        self.assertEqual(
+            self.session.get_config_variable('region'), 'us-west-11'
+        )
         self.session.get_config_variable('profile') == 'default'
         saved_region = self.environ['FOO_REGION']
         del self.environ['FOO_REGION']
@@ -153,19 +161,25 @@ class SessionTest(BaseSessionTest):
         # FOO_TIMEOUT env var, with a conversion function
         # of int().
         self.env_vars['metadata_service_timeout'] = (
-            None, 'FOO_TIMEOUT', None, int)
+            None,
+            'FOO_TIMEOUT',
+            None,
+            int,
+        )
         # Environment variables are always strings.
         self.environ['FOO_TIMEOUT'] = '10'
         session = create_session(session_vars=self.env_vars)
         # But we should type convert this to a string.
         self.assertEqual(
-            session.get_config_variable('metadata_service_timeout'), 10)
+            session.get_config_variable('metadata_service_timeout'), 10
+        )
 
     def test_default_profile_specified_raises_exception(self):
         # If you explicity set the default profile and you don't
         # have that in your config file, an exception is raised.
-        config_path = os.path.join(os.path.dirname(__file__), 'cfg',
-                                   'boto_config_empty')
+        config_path = os.path.join(
+            os.path.dirname(__file__), 'cfg', 'boto_config_empty'
+        )
         self.environ['FOO_CONFIG_FILE'] = config_path
         self.environ['FOO_PROFILE'] = 'default'
         session = create_session(session_vars=self.env_vars)
@@ -200,9 +214,13 @@ class SessionTest(BaseSessionTest):
             f.flush()
 
             full_config = self.session.full_config
-            self.assertEqual(full_config['profiles']['newprofile'],
-                             {'aws_access_key_id': 'FROM_CREDS_FILE_1',
-                              'aws_secret_access_key': 'FROM_CREDS_FILE_2'})
+            self.assertEqual(
+                full_config['profiles']['newprofile'],
+                {
+                    'aws_access_key_id': 'FROM_CREDS_FILE_1',
+                    'aws_secret_access_key': 'FROM_CREDS_FILE_2',
+                },
+            )
 
     def test_path_not_in_available_profiles(self):
         with temporary_file('w') as f:
@@ -214,12 +232,15 @@ class SessionTest(BaseSessionTest):
 
             profiles = self.session.available_profiles
             self.assertEqual(
-                set(profiles),
-                set(['foo', 'default', 'newprofile']))
+                set(profiles), set(['foo', 'default', 'newprofile'])
+            )
 
     def test_emit_delegates_to_emitter(self):
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         self.session.register('foo', handler)
         self.session.emit('foo')
         self.assertEqual(len(calls), 1)
@@ -227,10 +248,14 @@ class SessionTest(BaseSessionTest):
 
     def test_emitter_can_be_passed_in(self):
         events = HierarchicalEmitter()
-        session = create_session(session_vars=self.env_vars,
-                                 event_hooks=events)
+        session = create_session(
+            session_vars=self.env_vars, event_hooks=events
+        )
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         events.register('foo', handler)
 
         session.emit('foo')
@@ -265,7 +290,10 @@ class SessionTest(BaseSessionTest):
 
     def test_register_with_unique_id(self):
         calls = []
-        handler = lambda **kwargs: calls.append(kwargs)
+
+        def handler(**kwargs):
+            return calls.append(kwargs)
+
         self.session.register('foo', handler, unique_id='bar')
         self.session.emit('foo')
         self.assertEqual(calls[0]['event_name'], 'foo')
@@ -277,33 +305,39 @@ class SessionTest(BaseSessionTest):
 
 class TestBuiltinEventHandlers(BaseSessionTest):
     def setUp(self):
-        super(TestBuiltinEventHandlers, self).setUp()
+        super().setUp()
         self.builtin_handlers = [
             ('foo', self.on_foo),
         ]
         self.foo_called = False
-        self.handler_patch = mock.patch('botocore.handlers.BUILTIN_HANDLERS',
-                                        self.builtin_handlers)
+        self.handler_patch = mock.patch(
+            'botocore.handlers.BUILTIN_HANDLERS', self.builtin_handlers
+        )
         self.handler_patch.start()
 
     def on_foo(self, **kwargs):
         self.foo_called = True
 
     def tearDown(self):
-        super(TestBuiltinEventHandlers, self).tearDown()
+        super().tearDown()
         self.handler_patch.stop()
 
     def test_registered_builtin_handlers(self):
-        session = botocore.session.Session(self.env_vars, None,
-                                           include_builtin_handlers=True)
+        session = botocore.session.Session(
+            self.env_vars, None, include_builtin_handlers=True
+        )
         session.emit('foo')
         self.assertTrue(self.foo_called)
 
 
 class TestSessionConfigurationVars(BaseSessionTest):
     def test_per_session_config_vars(self):
-        self.session.session_var_map['foobar'] = (None, 'FOOBAR',
-                                                  'default', None)
+        self.session.session_var_map['foobar'] = (
+            None,
+            'FOOBAR',
+            'default',
+            None,
+        )
         # Default value.
         self.assertEqual(self.session.get_config_variable('foobar'), 'default')
         # Retrieve from os environment variable.
@@ -312,52 +346,78 @@ class TestSessionConfigurationVars(BaseS
 
         # Explicit override.
         self.session.set_config_variable('foobar', 'session-instance')
-        self.assertEqual(self.session.get_config_variable('foobar'),
-                         'session-instance')
+        self.assertEqual(
+            self.session.get_config_variable('foobar'), 'session-instance'
+        )
 
         # Can disable this check via the ``methods`` arg.
         del self.environ['FOOBAR']
-        self.assertEqual(self.session.get_config_variable(
-            'foobar', methods=('env', 'config')), 'default')
+        self.assertEqual(
+            self.session.get_config_variable(
+                'foobar', methods=('env', 'config')
+            ),
+            'default',
+        )
 
     def test_default_value_can_be_overriden(self):
-        self.session.session_var_map['foobar'] = (None, 'FOOBAR', 'default',
-                                                  None)
+        self.session.session_var_map['foobar'] = (
+            None,
+            'FOOBAR',
+            'default',
+            None,
+        )
         self.assertEqual(self.session.get_config_variable('foobar'), 'default')
 
     def test_can_get_session_vars_info_from_default_session(self):
         # This test is to ensure that you can still reach the session_vars_map
         # information from the session and that it has the expected value.
         self.session = create_session()
-        self.assertEqual(self.session.session_var_map['region'],
-                         ('region', ['AWS_REGION', 'AWS_DEFAULT_REGION'],
-                          None, None))
+        self.assertEqual(
+            self.session.session_var_map['region'],
+            ('region', ['AWS_REGION', 'AWS_DEFAULT_REGION'], None, None),
+        )
         self.assertEqual(
             self.session.session_var_map['profile'],
-            (None, ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE'], None, None))
+            (None, ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE'], None, None),
+        )
         self.assertEqual(
             self.session.session_var_map['data_path'],
-            ('data_path', 'AWS_DATA_PATH', None, None))
+            ('data_path', 'AWS_DATA_PATH', None, None),
+        )
         self.assertEqual(
             self.session.session_var_map['config_file'],
-            (None, 'AWS_CONFIG_FILE', '~/.aws/config', None))
+            (None, 'AWS_CONFIG_FILE', '~/.aws/config', None),
+        )
         self.assertEqual(
             self.session.session_var_map['ca_bundle'],
-            ('ca_bundle', 'AWS_CA_BUNDLE', None, None))
+            ('ca_bundle', 'AWS_CA_BUNDLE', None, None),
+        )
         self.assertEqual(
             self.session.session_var_map['credentials_file'],
-            (None, 'AWS_SHARED_CREDENTIALS_FILE', '~/.aws/credentials', None))
+            (None, 'AWS_SHARED_CREDENTIALS_FILE', '~/.aws/credentials', None),
+        )
         self.assertEqual(
             self.session.session_var_map['metadata_service_timeout'],
-            ('metadata_service_timeout',
-             'AWS_METADATA_SERVICE_TIMEOUT', 1, int))
+            (
+                'metadata_service_timeout',
+                'AWS_METADATA_SERVICE_TIMEOUT',
+                1,
+                int,
+            ),
+        )
         self.assertEqual(
             self.session.session_var_map['metadata_service_num_attempts'],
-            ('metadata_service_num_attempts',
-             'AWS_METADATA_SERVICE_NUM_ATTEMPTS', 1, int))
+            (
+                'metadata_service_num_attempts',
+                'AWS_METADATA_SERVICE_NUM_ATTEMPTS',
+                1,
+                int,
+            ),
+        )
         self.assertEqual(
             self.session.session_var_map['parameter_validation'],
-            ('parameter_validation', None, True, None))
+            ('parameter_validation', None, True, None),
+        )
 
 
 class TestSessionPartitionFiles(BaseSessionTest):
@@ -365,14 +425,16 @@ class TestSessionPartitionFiles(BaseSess
         mock_resolver = mock.Mock()
         mock_resolver.get_available_partitions.return_value = ['foo']
         self.session._register_internal_component(
-            'endpoint_resolver', mock_resolver)
+            'endpoint_resolver', mock_resolver
+        )
         self.assertEqual(['foo'], self.session.get_available_partitions())
 
     def test_proxies_list_endpoints_to_resolver(self):
         resolver = mock.Mock()
         resolver.get_available_endpoints.return_value = ['a', 'b']
         self.session._register_internal_component(
-            'endpoint_resolver', resolver)
+            'endpoint_resolver', resolver
+        )
         self.session.get_available_regions('foo', 'bar', True)
 
     def test_provides_empty_list_for_unknown_service_regions(self):
@@ -392,7 +454,8 @@ class TestSessionUserAgent(BaseSessionTe
     def test_can_append_to_user_agent(self):
         self.session.user_agent_extra = 'custom-thing/other'
         self.assertTrue(
-            self.session.user_agent().endswith('custom-thing/other'))
+            self.session.user_agent().endswith('custom-thing/other')
+        )
 
     def test_execution_env_not_set(self):
         self.assertFalse(self.session.user_agent().endswith('FooEnv'))
@@ -411,8 +474,9 @@ class TestSessionUserAgent(BaseSessionTe
 
 class TestConfigLoaderObject(BaseSessionTest):
     def test_config_loader_delegation(self):
-        session = create_session(session_vars=self.env_vars,
-                                 profile='credfile-profile')
+        session = create_session(
+            session_vars=self.env_vars, profile='credfile-profile'
+        )
         with temporary_file('w') as f:
             f.write('[credfile-profile]\naws_access_key_id=a\n')
             f.write('aws_secret_access_key=b\n')
@@ -420,9 +484,10 @@ class TestConfigLoaderObject(BaseSession
             session.set_config_variable('credentials_file', f.name)
             # Now trying to retrieve the scoped config should pull in
             # values from the shared credentials file.
-            self.assertEqual(session.get_scoped_config(),
-                             {'aws_access_key_id': 'a',
-                              'aws_secret_access_key': 'b'})
+            self.assertEqual(
+                session.get_scoped_config(),
+                {'aws_access_key_id': 'a', 'aws_secret_access_key': 'b'},
+            )
 
 
 class TestGetServiceModel(BaseSessionTest):
@@ -448,8 +513,7 @@ class TestGetPaginatorModel(BaseSessionT
         # Verify we get a PaginatorModel back
         self.assertIsInstance(model, PaginatorModel)
         # Verify we called the loader correctly.
-        loader.load_service_model.assert_called_with(
-            'foo', 'paginators-1')
+        loader.load_service_model.assert_called_with('foo', 'paginators-1')
 
 
 class TestGetWaiterModel(BaseSessionTest):
@@ -464,8 +528,7 @@ class TestGetWaiterModel(BaseSessionTest
         self.assertIsInstance(model, WaiterModel)
         self.assertEqual(model.waiter_names, [])
         # and (2) call the loader correctly.
-        loader.load_service_model.assert_called_with(
-            'foo', 'waiters-2')
+        loader.load_service_model.assert_called_with('foo', 'waiters-2')
 
 
 class TestCreateClient(BaseSessionTest):
@@ -475,28 +538,33 @@ class TestCreateClient(BaseSessionTest):
 
     def test_credential_provider_not_called_when_creds_provided(self):
         cred_provider = mock.Mock()
-        self.session.register_component(
-            'credential_provider', cred_provider)
+        self.session.register_component('credential_provider', cred_provider)
         self.session.create_client(
-            'sts', 'us-west-2',
+            'sts',
+            'us-west-2',
             aws_access_key_id='foo',
             aws_secret_access_key='bar',
-            aws_session_token='baz')
-        self.assertFalse(cred_provider.load_credentials.called,
-                         "Credential provider was called even though "
-                         "explicit credentials were provided to the "
-                         "create_client call.")
+            aws_session_token='baz',
+        )
+        self.assertFalse(
+            cred_provider.load_credentials.called,
+            "Credential provider was called even though "
+            "explicit credentials were provided to the "
+            "create_client call.",
+        )
 
     def test_cred_provider_called_when_partial_creds_provided(self):
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             self.session.create_client(
-                'sts', 'us-west-2',
+                'sts',
+                'us-west-2',
                 aws_access_key_id='foo',
-                aws_secret_access_key=None
+                aws_secret_access_key=None,
             )
         with self.assertRaises(botocore.exceptions.PartialCredentialsError):
             self.session.create_client(
-                'sts', 'us-west-2',
+                'sts',
+                'us-west-2',
                 aws_access_key_id=None,
                 aws_secret_access_key='foo',
             )
@@ -511,9 +579,16 @@ class TestCreateClient(BaseSessionTest):
         config = botocore.config.Config(region_name='us-west-2')
         self.session.create_client('sts', config=config)
         client_creator.return_value.create_client.assert_called_with(
-            service_name=mock.ANY, region_name=mock.ANY, is_secure=mock.ANY,
-            endpoint_url=mock.ANY, verify=mock.ANY, credentials=mock.ANY,
-            scoped_config=mock.ANY, client_config=config, auth_token=mock.ANY)
+            service_name=mock.ANY,
+            region_name=mock.ANY,
+            is_secure=mock.ANY,
+            endpoint_url=mock.ANY,
+            verify=mock.ANY,
+            credentials=mock.ANY,
+            scoped_config=mock.ANY,
+            client_config=config,
+            auth_token=mock.ANY,
+        )
 
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_default_client_config(self, client_creator):
@@ -522,9 +597,16 @@ class TestCreateClient(BaseSessionTest):
         self.session.create_client('sts')
 
         client_creator.return_value.create_client.assert_called_with(
-            service_name=mock.ANY, region_name=mock.ANY, is_secure=mock.ANY,
-            endpoint_url=mock.ANY, verify=mock.ANY, credentials=mock.ANY,
-            scoped_config=mock.ANY, client_config=config, auth_token=mock.ANY)
+            service_name=mock.ANY,
+            region_name=mock.ANY,
+            is_secure=mock.ANY,
+            endpoint_url=mock.ANY,
+            verify=mock.ANY,
+            credentials=mock.ANY,
+            scoped_config=mock.ANY,
+            client_config=config,
+            auth_token=mock.ANY,
+        )
 
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_merging_client_configs(self, client_creator):
@@ -536,7 +618,9 @@ class TestCreateClient(BaseSessionTest):
         # Grab the client config used in creating the client
         used_client_config = (
             client_creator.return_value.create_client.call_args[1][
-                'client_config'])
+                'client_config'
+            ]
+        )
         # Check that the client configs were merged
         self.assertEqual(used_client_config.region_name, 'us-east-1')
         # Make sure that the client config used is not the default client
@@ -545,15 +629,15 @@ class TestCreateClient(BaseSessionTest):
         self.assertIsNot(used_client_config, other_config)
 
     def test_create_client_with_region(self):
-        ec2_client = self.session.create_client(
-            'ec2', 'us-west-2')
+        ec2_client = self.session.create_client('ec2', 'us-west-2')
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
     def test_create_client_with_region_and_client_config(self):
         config = botocore.config.Config()
         # Use a client config with no region configured.
         ec2_client = self.session.create_client(
-            'ec2', region_name='us-west-2', config=config)
+            'ec2', region_name='us-west-2', config=config
+        )
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
         # If the region name is changed, it should not change the
@@ -562,8 +646,7 @@ class TestCreateClient(BaseSessionTest):
         self.assertEqual(ec2_client.meta.region_name, 'us-west-2')
 
         # Now make a new client with the updated client config.
-        ec2_client = self.session.create_client(
-            'ec2', config=config)
+        ec2_client = self.session.create_client('ec2', config=config)
         self.assertEqual(ec2_client.meta.region_name, 'us-east-1')
 
     def test_create_client_no_region_and_no_client_config(self):
@@ -581,8 +664,9 @@ class TestCreateClient(BaseSessionTest):
             f.flush()
 
             self.session.create_client('ec2', 'us-west-2')
-            call_kwargs = client_creator.return_value.\
-                create_client.call_args[1]
+            call_kwargs = client_creator.return_value.create_client.call_args[
+                1
+            ]
             self.assertEqual(call_kwargs['verify'], 'config-certs.pem')
 
     @mock.patch('botocore.client.ClientCreator')
@@ -595,7 +679,8 @@ class TestCreateClient(BaseSessionTest):
     @mock.patch('botocore.client.ClientCreator')
     def test_create_client_with_verify_param(self, client_creator):
         self.session.create_client(
-            'ec2', 'us-west-2', verify='verify-certs.pem')
+            'ec2', 'us-west-2', verify='verify-certs.pem'
+        )
         call_kwargs = client_creator.return_value.create_client.call_args[1]
         self.assertEqual(call_kwargs['verify'], 'verify-certs.pem')
 
@@ -615,9 +700,11 @@ class TestCreateClient(BaseSessionTest):
 
             # Set the ca cert using the verify parameter
             self.session.create_client(
-                'ec2', 'us-west-2', verify='verify-certs.pem')
-            call_kwargs = client_creator.return_value.\
-                create_client.call_args[1]
+                'ec2', 'us-west-2', verify='verify-certs.pem'
+            )
+            call_kwargs = client_creator.return_value.create_client.call_args[
+                1
+            ]
             # The verify parameter should override all the other
             # configurations
             self.assertEqual(call_kwargs['verify'], 'verify-certs.pem')
@@ -628,28 +715,31 @@ class TestSessionComponent(BaseSessionTe
         component = object()
         self.session._register_internal_component('internal', component)
         self.assertIs(
-            self.session._get_internal_component('internal'), component)
+            self.session._get_internal_component('internal'), component
+        )
         with self.assertRaises(ValueError):
             self.session.get_component('internal')
 
     def test_internal_endpoint_resolver_is_same_as_deprecated_public(self):
         endpoint_resolver = self.session._get_internal_component(
-            'endpoint_resolver')
+            'endpoint_resolver'
+        )
         # get_component has been deprecated to the public
         with pytest.warns(DeprecationWarning):
             self.assertIs(
                 self.session.get_component('endpoint_resolver'),
-                endpoint_resolver
+                endpoint_resolver,
             )
 
     def test_internal_exceptions_factory_is_same_as_deprecated_public(self):
         exceptions_factory = self.session._get_internal_component(
-            'exceptions_factory')
+            'exceptions_factory'
+        )
         # get_component has been deprecated to the public
         with pytest.warns(DeprecationWarning):
             self.assertIs(
                 self.session.get_component('exceptions_factory'),
-                exceptions_factory
+                exceptions_factory,
             )
 
 
@@ -675,14 +765,20 @@ class TestComponentLocator(unittest.Test
 
     def test_can_lazy_register_a_component(self):
         component = object()
-        lazy = lambda: component
+
+        def lazy():
+            return component
+
         self.components.lazy_register_component('foo', lazy)
         self.assertIs(self.components.get_component('foo'), component)
 
     def test_latest_registration_wins_even_if_lazy(self):
         first = object()
         second = object()
-        lazy_second = lambda: second
+
+        def lazy_second():
+            return second
+
         self.components.register_component('foo', first)
         self.components.lazy_register_component('foo', lazy_second)
         self.assertIs(self.components.get_component('foo'), second)
@@ -690,12 +786,17 @@ class TestComponentLocator(unittest.Test
     def test_latest_registration_overrides_lazy(self):
         first = object()
         second = object()
-        lazy_first = lambda: first
+
+        def lazy_first():
+            return first
+
         self.components.lazy_register_component('foo', lazy_first)
         self.components.register_component('foo', second)
         self.assertIs(self.components.get_component('foo'), second)
 
-    def test_lazy_registration_factory_does_not_remove_from_list_on_error(self):
+    def test_lazy_registration_factory_does_not_remove_from_list_on_error(
+        self,
+    ):
         class ArbitraryError(Exception):
             pass
 
diff -pruN 2.23.6-1/tests/unit/botocore/test_signers.py 2.31.35-1/tests/unit/botocore/test_signers.py
--- 2.23.6-1/tests/unit/botocore/test_signers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_signers.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,20 +13,21 @@
 import datetime
 import json
 
-from dateutil.tz import tzutc
-
 import botocore
-import botocore.session
 import botocore.auth
 import botocore.awsrequest
+import botocore.session
 from botocore.config import Config
-from botocore.credentials import Credentials
-from botocore.credentials import ReadOnlyCredentials
+from botocore.credentials import Credentials, ReadOnlyCredentials
+from botocore.exceptions import (
+    NoRegionError,
+    ParamValidationError,
+    UnknownClientMethodError,
+    UnknownSignatureVersionError,
+    UnsupportedSignatureVersionError,
+)
 from botocore.hooks import HierarchicalEmitter
 from botocore.model import ServiceId
-from botocore.exceptions import NoRegionError, UnknownSignatureVersionError
-from botocore.exceptions import UnknownClientMethodError, ParamValidationError
-from botocore.exceptions import UnsupportedSignatureVersionError
 from botocore.signers import (
     CloudFrontSigner,
     RequestSigner,
@@ -36,24 +37,31 @@ from botocore.signers import (
     dsql_generate_db_connect_auth_token,
     generate_db_auth_token,
 )
+from dateutil.tz import tzutc
+
 from tests import FreezeTime, assert_url_equal, mock, unittest
 
 DATE = datetime.datetime(2024, 11, 7, 17, 39, 33, tzinfo=tzutc())
 
+
 class BaseSignerTest(unittest.TestCase):
     def setUp(self):
         self.credentials = Credentials('key', 'secret')
         self.emitter = mock.Mock()
         self.emitter.emit_until_response.return_value = (None, None)
         self.signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            'v4', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            'v4',
+            self.credentials,
+            self.emitter,
+        )
         self.fixed_credentials = self.credentials.get_frozen_credentials()
         self.request = botocore.awsrequest.AWSRequest()
 
 
 class TestSigner(BaseSignerTest):
-
     def test_region_name(self):
         self.assertEqual(self.signer.region_name, 'region_name')
 
@@ -65,8 +73,12 @@ class TestSigner(BaseSignerTest):
 
     def test_region_required_for_sigv4(self):
         self.signer = RequestSigner(
-            ServiceId('service_name'), None, 'signing_name', 'v4',
-            self.credentials, self.emitter
+            ServiceId('service_name'),
+            None,
+            'signing_name',
+            'v4',
+            self.credentials,
+            self.emitter,
         )
 
         with self.assertRaises(NoRegionError):
@@ -74,75 +86,88 @@ class TestSigner(BaseSignerTest):
 
     def test_get_auth(self):
         auth_cls = mock.Mock()
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': auth_cls}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4': auth_cls}):
             auth = self.signer.get_auth('service_name', 'region_name')
 
             self.assertEqual(auth, auth_cls.return_value)
             auth_cls.assert_called_with(
                 credentials=self.fixed_credentials,
                 service_name='service_name',
-                region_name='region_name')
+                region_name='region_name',
+            )
 
     def test_get_auth_signature_override(self):
         auth_cls = mock.Mock()
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4-custom': auth_cls}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'v4-custom': auth_cls}
+        ):
             auth = self.signer.get_auth(
-                'service_name', 'region_name', signature_version='v4-custom')
+                'service_name', 'region_name', signature_version='v4-custom'
+            )
 
             self.assertEqual(auth, auth_cls.return_value)
             auth_cls.assert_called_with(
                 credentials=self.fixed_credentials,
                 service_name='service_name',
-                region_name='region_name')
+                region_name='region_name',
+            )
 
     def test_get_auth_bad_override(self):
         with self.assertRaises(UnknownSignatureVersionError):
-            self.signer.get_auth('service_name', 'region_name',
-                                 signature_version='bad')
+            self.signer.get_auth(
+                'service_name', 'region_name', signature_version='bad'
+            )
 
     def test_emits_choose_signer(self):
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': mock.Mock()}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'v4': mock.Mock()}
+        ):
             self.signer.sign('operation_name', self.request)
 
         self.emitter.emit_until_response.assert_called_with(
             'choose-signer.service_name.operation_name',
-            signing_name='signing_name', region_name='region_name',
-            signature_version='v4', context=mock.ANY)
+            signing_name='signing_name',
+            region_name='region_name',
+            signature_version='v4',
+            context=mock.ANY,
+        )
 
     def test_choose_signer_override(self):
         auth = mock.Mock()
         auth.REQUIRES_REGION = False
         self.emitter.emit_until_response.return_value = (None, 'custom')
 
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'custom': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'custom': auth}):
             self.signer.sign('operation_name', self.request)
 
         auth.assert_called_with(credentials=self.fixed_credentials)
         auth.return_value.add_auth.assert_called_with(self.request)
 
     def test_emits_before_sign(self):
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': mock.Mock()}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'v4': mock.Mock()}
+        ):
             self.signer.sign('operation_name', self.request)
 
         self.emitter.emit.assert_called_with(
             'before-sign.service_name.operation_name',
-            request=self.request, signing_name='signing_name',
-            region_name='region_name', signature_version='v4',
-            request_signer=self.signer, operation_name='operation_name')
+            request=self.request,
+            signing_name='signing_name',
+            region_name='region_name',
+            signature_version='v4',
+            request_signer=self.signer,
+            operation_name='operation_name',
+        )
 
     def test_disable_signing(self):
         # Returning botocore.UNSIGNED from choose-signer disables signing!
         auth = mock.Mock()
-        self.emitter.emit_until_response.return_value = (None,
-                                                         botocore.UNSIGNED)
+        self.emitter.emit_until_response.return_value = (
+            None,
+            botocore.UNSIGNED,
+        )
 
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4': auth}):
             self.signer.sign('operation_name', self.request)
 
         auth.assert_not_called()
@@ -154,29 +179,37 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
 
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': mock.Mock()}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'v4': mock.Mock()}
+        ):
             self.signer.generate_presigned_url(request_dict, 'operation_name')
 
         self.emitter.emit_until_response.assert_called_with(
             'choose-signer.service_name.operation_name',
-            signing_name='signing_name', region_name='region_name',
-            signature_version='v4-query', context=mock.ANY)
+            signing_name='signing_name',
+            region_name='region_name',
+            signature_version='v4-query',
+            context=mock.ANY,
+        )
 
     def test_choose_signer_passes_context(self):
         self.request.context = {'foo': 'bar'}
 
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': mock.Mock()}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'v4': mock.Mock()}
+        ):
             self.signer.sign('operation_name', self.request)
 
         self.emitter.emit_until_response.assert_called_with(
             'choose-signer.service_name.operation_name',
-            signing_name='signing_name', region_name='region_name',
-            signature_version='v4', context={'foo': 'bar'})
+            signing_name='signing_name',
+            region_name='region_name',
+            signature_version='v4',
+            context={'foo': 'bar'},
+        )
 
     def test_generate_url_choose_signer_override(self):
         request_dict = {
@@ -185,7 +218,7 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
         auth = mock.Mock()
         auth.REQUIRES_REGION = False
@@ -195,8 +228,9 @@ class TestSigner(BaseSignerTest):
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types_map):
             self.signer.generate_presigned_url(request_dict, 'operation_name')
 
-        auth.assert_called_with(credentials=self.fixed_credentials,
-                                expires=3600)
+        auth.assert_called_with(
+            credentials=self.fixed_credentials, expires=3600
+        )
 
     def test_generate_url_unsigned(self):
         request_dict = {
@@ -205,13 +239,16 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
         self.emitter.emit_until_response.return_value = (
-            None, botocore.UNSIGNED)
+            None,
+            botocore.UNSIGNED,
+        )
 
         url = self.signer.generate_presigned_url(
-            request_dict, 'operation_name')
+            request_dict, 'operation_name'
+        )
 
         self.assertEqual(url, 'https://foo.com')
 
@@ -225,15 +262,18 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4-query': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4-query': auth}):
             presigned_url = self.signer.generate_presigned_url(
-                request_dict, operation_name='operation_name')
+                request_dict, operation_name='operation_name'
+            )
         auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='region_name',
-            service_name='signing_name', expires=3600)
+            credentials=self.fixed_credentials,
+            region_name='region_name',
+            service_name='signing_name',
+            expires=3600,
+        )
         self.assertEqual(presigned_url, 'https://foo.com')
 
     def test_generate_presigned_url_with_region_override(self):
@@ -246,16 +286,20 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4-query': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4-query': auth}):
             presigned_url = self.signer.generate_presigned_url(
-                request_dict, operation_name='operation_name',
-                region_name='us-west-2')
+                request_dict,
+                operation_name='operation_name',
+                region_name='us-west-2',
+            )
         auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='us-west-2',
-            service_name='signing_name', expires=3600)
+            credentials=self.fixed_credentials,
+            region_name='us-west-2',
+            service_name='signing_name',
+            expires=3600,
+        )
         self.assertEqual(presigned_url, 'https://foo.com')
 
     def test_generate_presigned_url_with_exipres_in(self):
@@ -268,16 +312,18 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4-query': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4-query': auth}):
             presigned_url = self.signer.generate_presigned_url(
-                request_dict, operation_name='operation_name', expires_in=900)
+                request_dict, operation_name='operation_name', expires_in=900
+            )
         auth.assert_called_with(
             credentials=self.fixed_credentials,
             region_name='region_name',
-            expires=900, service_name='signing_name')
+            expires=900,
+            service_name='signing_name',
+        )
         self.assertEqual(presigned_url, 'https://foo.com')
 
     def test_presigned_url_throws_unsupported_signature_error(self):
@@ -287,28 +333,39 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
         self.signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            'foo', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            'foo',
+            self.credentials,
+            self.emitter,
+        )
         with self.assertRaises(UnsupportedSignatureVersionError):
             self.signer.generate_presigned_url(
-                request_dict, operation_name='foo')
+                request_dict, operation_name='foo'
+            )
 
     def test_signer_with_refreshable_credentials_gets_credential_set(self):
         class FakeCredentials(Credentials):
             def get_frozen_credentials(self):
                 return ReadOnlyCredentials('foo', 'bar', 'baz')
+
         self.credentials = FakeCredentials('a', 'b', 'c')
 
         self.signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            'v4', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            'v4',
+            self.credentials,
+            self.emitter,
+        )
 
         auth_cls = mock.Mock()
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': auth_cls}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4': auth_cls}):
             auth = self.signer.get_auth('service_name', 'region_name')
             self.assertEqual(auth, auth_cls.return_value)
             # Note we're called with 'foo', 'bar', 'baz', and *not*
@@ -316,7 +373,8 @@ class TestSigner(BaseSignerTest):
             auth_cls.assert_called_with(
                 credentials=ReadOnlyCredentials('foo', 'bar', 'baz'),
                 service_name='service_name',
-                region_name='region_name')
+                region_name='region_name',
+            )
 
     def test_no_credentials_case_is_forwarded_to_signer(self):
         # If no credentials are given to the RequestSigner, we should
@@ -324,13 +382,16 @@ class TestSigner(BaseSignerTest):
         # the error (which they already do).
         self.credentials = None
         self.signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            'v4', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            'v4',
+            self.credentials,
+            self.emitter,
+        )
         auth_cls = mock.Mock()
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4': auth_cls}):
-            auth = self.signer.get_auth_instance(
-                'service_name', 'region_name', 'v4')
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4': auth_cls}):
+            self.signer.get_auth_instance('service_name', 'region_name', 'v4')
             auth_cls.assert_called_with(
                 service_name='service_name',
                 region_name='region_name',
@@ -344,17 +405,18 @@ class TestSigner(BaseSignerTest):
         auth_types = {
             'v4-presign-post': post_auth,
             'v4-query': query_auth,
-            'v4': auth
+            'v4': auth,
         }
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
-            self.signer.sign('operation_name', self.request,
-                             signing_type='standard')
+            self.signer.sign(
+                'operation_name', self.request, signing_type='standard'
+            )
         self.assertFalse(post_auth.called)
         self.assertFalse(query_auth.called)
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='region_name'
+            region_name='region_name',
         )
 
     def test_sign_with_signing_type_presign_url(self):
@@ -364,17 +426,18 @@ class TestSigner(BaseSignerTest):
         auth_types = {
             'v4-presign-post': post_auth,
             'v4-query': query_auth,
-            'v4': auth
+            'v4': auth,
         }
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
-            self.signer.sign('operation_name', self.request,
-                             signing_type='presign-url')
+            self.signer.sign(
+                'operation_name', self.request, signing_type='presign-url'
+            )
         self.assertFalse(post_auth.called)
         self.assertFalse(auth.called)
         query_auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='region_name'
+            region_name='region_name',
         )
 
     def test_sign_with_signing_type_presign_post(self):
@@ -384,101 +447,92 @@ class TestSigner(BaseSignerTest):
         auth_types = {
             'v4-presign-post': post_auth,
             'v4-query': query_auth,
-            'v4': auth
+            'v4': auth,
         }
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
-            self.signer.sign('operation_name', self.request,
-                             signing_type='presign-post')
+            self.signer.sign(
+                'operation_name', self.request, signing_type='presign-post'
+            )
         self.assertFalse(auth.called)
         self.assertFalse(query_auth.called)
         post_auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='region_name'
+            region_name='region_name',
         )
 
     def test_sign_with_region_name(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.sign('operation_name', self.request, region_name='foo')
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='foo'
+            region_name='foo',
         )
 
     def test_sign_override_region_from_context(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         self.request.context = {'signing': {'region': 'my-override-region'}}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.sign('operation_name', self.request)
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='my-override-region'
+            region_name='my-override-region',
         )
 
     def test_sign_with_region_name_overrides_context(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         self.request.context = {'signing': {'region': 'context-override'}}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
-            self.signer.sign('operation_name', self.request,
-                             region_name='param-override')
+            self.signer.sign(
+                'operation_name', self.request, region_name='param-override'
+            )
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
-            region_name='param-override'
+            region_name='param-override',
         )
 
     def test_sign_override_signing_name_from_context(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         self.request.context = {'signing': {'signing_name': 'override_name'}}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.sign('operation_name', self.request)
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='override_name',
-            region_name='region_name'
+            region_name='region_name',
         )
 
     def test_sign_with_expires_in(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.sign('operation_name', self.request, expires_in=2)
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='signing_name',
             region_name='region_name',
-            expires=2
+            expires=2,
         )
 
     def test_sign_with_custom_signing_name(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
-            self.signer.sign('operation_name', self.request,
-                             signing_name='foo')
+            self.signer.sign(
+                'operation_name', self.request, signing_name='foo'
+            )
         auth.assert_called_with(
             credentials=ReadOnlyCredentials('key', 'secret', None),
             service_name='foo',
-            region_name='region_name'
+            region_name='region_name',
         )
 
     def test_presign_with_custom_signing_name(self):
@@ -491,49 +545,51 @@ class TestSigner(BaseSignerTest):
             'body': b'',
             'url_path': '/',
             'method': 'GET',
-            'context': {}
+            'context': {},
         }
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'v4-query': auth}):
+        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, {'v4-query': auth}):
             presigned_url = self.signer.generate_presigned_url(
-                request_dict, operation_name='operation_name',
-                signing_name='foo')
+                request_dict,
+                operation_name='operation_name',
+                signing_name='foo',
+            )
         auth.assert_called_with(
             credentials=self.fixed_credentials,
             region_name='region_name',
-            expires=3600, service_name='foo')
+            expires=3600,
+            service_name='foo',
+        )
         self.assertEqual(presigned_url, 'https://foo.com')
 
     def test_unknown_signer_raises_unknown_on_standard(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         self.emitter.emit_until_response.return_value = (None, 'custom')
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             with self.assertRaises(UnknownSignatureVersionError):
-                self.signer.sign('operation_name', self.request,
-                                 signing_type='standard')
+                self.signer.sign(
+                    'operation_name', self.request, signing_type='standard'
+                )
 
     def test_unknown_signer_raises_unsupported_when_not_standard(self):
         auth = mock.Mock()
-        auth_types = {
-            'v4': auth
-        }
+        auth_types = {'v4': auth}
         self.emitter.emit_until_response.return_value = (None, 'custom')
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             with self.assertRaises(UnsupportedSignatureVersionError):
-                self.signer.sign('operation_name', self.request,
-                                 signing_type='presign-url')
+                self.signer.sign(
+                    'operation_name', self.request, signing_type='presign-url'
+                )
 
             with self.assertRaises(UnsupportedSignatureVersionError):
-                self.signer.sign('operation_name', self.request,
-                                 signing_type='presign-post')
+                self.signer.sign(
+                    'operation_name', self.request, signing_type='presign-post'
+                )
 
 
 class TestCloudfrontSigner(BaseSignerTest):
     def setUp(self):
-        super(TestCloudfrontSigner, self).setUp()
+        super().setUp()
         self.signer = CloudFrontSigner("MY_KEY_ID", lambda message: b'signed')
         # It helps but the long string diff will still be slightly different on
         # Python 2.6/2.7/3.x. We won't soly rely on that anyway, so it's fine.
@@ -543,43 +599,53 @@ class TestCloudfrontSigner(BaseSignerTes
         policy = self.signer.build_policy('foo', datetime.datetime(2016, 1, 1))
         expected = (
             '{"Statement":[{"Resource":"foo",'
-            '"Condition":{"DateLessThan":{"AWS:EpochTime":1451606400}}}]}')
+            '"Condition":{"DateLessThan":{"AWS:EpochTime":1451606400}}}]}'
+        )
         self.assertEqual(json.loads(policy), json.loads(expected))
         self.assertEqual(policy, expected)  # This is to ensure the right order
 
     def test_build_custom_policy(self):
         policy = self.signer.build_policy(
-            'foo', datetime.datetime(2016, 1, 1),
+            'foo',
+            datetime.datetime(2016, 1, 1),
             date_greater_than=datetime.datetime(2015, 12, 1),
-            ip_address='12.34.56.78/9')
+            ip_address='12.34.56.78/9',
+        )
         expected = {
-            "Statement": [{
-                "Resource": "foo",
-                "Condition": {
-                    "DateGreaterThan": {"AWS:EpochTime": 1448928000},
-                    "DateLessThan": {"AWS:EpochTime": 1451606400},
-                    "IpAddress": {"AWS:SourceIp": "12.34.56.78/9"}
-                },
-            }]
+            "Statement": [
+                {
+                    "Resource": "foo",
+                    "Condition": {
+                        "DateGreaterThan": {"AWS:EpochTime": 1448928000},
+                        "DateLessThan": {"AWS:EpochTime": 1451606400},
+                        "IpAddress": {"AWS:SourceIp": "12.34.56.78/9"},
+                    },
+                }
+            ]
         }
         self.assertEqual(json.loads(policy), expected)
 
     def test_generate_presign_url_with_expire_time(self):
         signed_url = self.signer.generate_presigned_url(
             'http://test.com/foo.txt',
-            date_less_than=datetime.datetime(2016, 1, 1))
+            date_less_than=datetime.datetime(2016, 1, 1),
+        )
         expected = (
             'http://test.com/foo.txt?Expires=1451606400&Signature=c2lnbmVk'
-            '&Key-Pair-Id=MY_KEY_ID')
+            '&Key-Pair-Id=MY_KEY_ID'
+        )
         assert_url_equal(signed_url, expected)
 
     def test_generate_presign_url_with_custom_policy(self):
         policy = self.signer.build_policy(
-            'foo', datetime.datetime(2016, 1, 1),
+            'foo',
+            datetime.datetime(2016, 1, 1),
             date_greater_than=datetime.datetime(2015, 12, 1),
-            ip_address='12.34.56.78/9')
+            ip_address='12.34.56.78/9',
+        )
         signed_url = self.signer.generate_presigned_url(
-            'http://test.com/index.html?foo=bar', policy=policy)
+            'http://test.com/index.html?foo=bar', policy=policy
+        )
         expected = (
             'http://test.com/index.html?foo=bar'
             '&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiZm9vIiwiQ29uZ'
@@ -587,16 +653,22 @@ class TestCloudfrontSigner(BaseSignerTes
             'oxNDUxNjA2NDAwfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI'
             '6IjEyLjM0LjU2Ljc4LzkifSwiRGF0ZUdyZWF0ZXJUaGFuIjp7IkFX'
             'UzpFcG9jaFRpbWUiOjE0NDg5MjgwMDB9fX1dfQ__'
-            '&Signature=c2lnbmVk&Key-Pair-Id=MY_KEY_ID')
+            '&Signature=c2lnbmVk&Key-Pair-Id=MY_KEY_ID'
+        )
         assert_url_equal(signed_url, expected)
 
 
 class TestS3PostPresigner(BaseSignerTest):
     def setUp(self):
-        super(TestS3PostPresigner, self).setUp()
+        super().setUp()
         self.request_signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            's3v4', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            's3v4',
+            self.credentials,
+            self.emitter,
+        )
         self.signer = S3PostPresigner(self.request_signer)
         self.request_dict = {
             'headers': {},
@@ -604,7 +676,7 @@ class TestS3PostPresigner(BaseSignerTest
             'body': b'',
             'url_path': '/',
             'method': 'POST',
-            'context': {}
+            'context': {},
         }
         self.auth = mock.Mock()
         self.auth.REQUIRES_REGION = True
@@ -620,109 +692,130 @@ class TestS3PostPresigner(BaseSignerTest
         self.datetime_mock.timedelta.return_value = self.fixed_delta
 
     def tearDown(self):
-        super(TestS3PostPresigner, self).tearDown()
+        super().tearDown()
         self.datetime_patch.stop()
 
     def test_generate_presigned_post(self):
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'s3v4-presign-post': self.auth}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'s3v4-presign-post': self.auth}
+        ):
             post_form_args = self.signer.generate_presigned_post(
-                self.request_dict)
+                self.request_dict
+            )
         self.auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='region_name',
-            service_name='signing_name')
+            credentials=self.fixed_credentials,
+            region_name='region_name',
+            service_name='signing_name',
+        )
         self.assertEqual(self.add_auth.call_count, 1)
         ref_request = self.add_auth.call_args[0][0]
         ref_policy = ref_request.context['s3-presign-post-policy']
         self.assertEqual(ref_policy['expiration'], '2014-03-10T18:02:55Z')
         self.assertEqual(ref_policy['conditions'], [])
 
-        self.assertEqual(post_form_args['url'],
-                         'https://s3.amazonaws.com/mybucket')
+        self.assertEqual(
+            post_form_args['url'], 'https://s3.amazonaws.com/mybucket'
+        )
         self.assertEqual(post_form_args['fields'], {})
 
     def test_generate_presigned_post_emits_choose_signer(self):
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'s3v4-presign-post': self.auth}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'s3v4-presign-post': self.auth}
+        ):
             self.signer.generate_presigned_post(self.request_dict)
         self.emitter.emit_until_response.assert_called_with(
             'choose-signer.service_name.PutObject',
-            signing_name='signing_name', region_name='region_name',
-            signature_version='s3v4-presign-post', context=mock.ANY)
+            signing_name='signing_name',
+            region_name='region_name',
+            signature_version='s3v4-presign-post',
+            context=mock.ANY,
+        )
 
     def test_generate_presigned_post_choose_signer_override(self):
         auth = mock.Mock()
         self.emitter.emit_until_response.return_value = (None, 'custom')
         auth_types = {
             's3v4-presign-post': self.auth,
-            'custom-presign-post': auth
+            'custom-presign-post': auth,
         }
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.generate_presigned_post(self.request_dict)
         auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='region_name',
-            service_name='signing_name')
+            credentials=self.fixed_credentials,
+            region_name='region_name',
+            service_name='signing_name',
+        )
 
     def test_generate_presigne_post_choose_signer_override_known(self):
         auth = mock.Mock()
         self.emitter.emit_until_response.return_value = (
-            None, 's3v4-presign-post')
+            None,
+            's3v4-presign-post',
+        )
         auth_types = {
             's3v4-presign-post': self.auth,
-            'custom-presign-post': auth
+            'custom-presign-post': auth,
         }
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             self.signer.generate_presigned_post(self.request_dict)
         self.auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='region_name',
-            service_name='signing_name')
+            credentials=self.fixed_credentials,
+            region_name='region_name',
+            service_name='signing_name',
+        )
 
     def test_generate_presigned_post_bad_signer_raises_error(self):
         auth = mock.Mock()
         self.emitter.emit_until_response.return_value = (None, 's3-query')
-        auth_types = {
-            's3v4-presign-post': self.auth,
-            's3-query': auth
-        }
+        auth_types = {'s3v4-presign-post': self.auth, 's3-query': auth}
         with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS, auth_types):
             with self.assertRaises(UnsupportedSignatureVersionError):
                 self.signer.generate_presigned_post(self.request_dict)
 
     def test_generate_unsigned_post(self):
         self.emitter.emit_until_response.return_value = (
-            None, botocore.UNSIGNED)
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'s3v4-presign-post': self.auth}):
+            None,
+            botocore.UNSIGNED,
+        )
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'s3v4-presign-post': self.auth}
+        ):
             post_form_args = self.signer.generate_presigned_post(
-                self.request_dict)
+                self.request_dict
+            )
         expected = {'fields': {}, 'url': 'https://s3.amazonaws.com/mybucket'}
         self.assertEqual(post_form_args, expected)
 
     def test_generate_presigned_post_with_conditions(self):
-        conditions = [
-            {'bucket': 'mybucket'},
-            ['starts-with', '$key', 'bar']
-        ]
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'s3v4-presign-post': self.auth}):
+        conditions = [{'bucket': 'mybucket'}, ['starts-with', '$key', 'bar']]
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'s3v4-presign-post': self.auth}
+        ):
             self.signer.generate_presigned_post(
-                self.request_dict, conditions=conditions)
+                self.request_dict, conditions=conditions
+            )
         self.auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='region_name',
-            service_name='signing_name')
+            credentials=self.fixed_credentials,
+            region_name='region_name',
+            service_name='signing_name',
+        )
         self.assertEqual(self.add_auth.call_count, 1)
         ref_request = self.add_auth.call_args[0][0]
         ref_policy = ref_request.context['s3-presign-post-policy']
         self.assertEqual(ref_policy['conditions'], conditions)
 
     def test_generate_presigned_post_with_region_override(self):
-        with mock.patch.dict(botocore.auth.AUTH_TYPE_MAPS,
-                             {'s3v4-presign-post': self.auth}):
+        with mock.patch.dict(
+            botocore.auth.AUTH_TYPE_MAPS, {'s3v4-presign-post': self.auth}
+        ):
             self.signer.generate_presigned_post(
-                self.request_dict, region_name='foo')
+                self.request_dict, region_name='foo'
+            )
         self.auth.assert_called_with(
-            credentials=self.fixed_credentials, region_name='foo',
-            service_name='signing_name')
+            credentials=self.fixed_credentials,
+            region_name='foo',
+            service_name='signing_name',
+        )
 
     def test_presigned_post_throws_unsupported_signature_error(self):
         request_dict = {
@@ -731,11 +824,16 @@ class TestS3PostPresigner(BaseSignerTest
             'body': b'',
             'url_path': '/',
             'method': 'POST',
-            'context': {}
+            'context': {},
         }
         self.request_signer = RequestSigner(
-            ServiceId('service_name'), 'region_name', 'signing_name',
-            'foo', self.credentials, self.emitter)
+            ServiceId('service_name'),
+            'region_name',
+            'signing_name',
+            'foo',
+            self.credentials,
+            self.emitter,
+        )
         self.signer = S3PostPresigner(self.request_signer)
         with self.assertRaises(UnsupportedSignatureVersionError):
             self.signer.generate_presigned_post(request_dict)
@@ -749,7 +847,8 @@ class TestGenerateUrl(unittest.TestCase)
         self.key = 'mykey'
         self.client_kwargs = {'Bucket': self.bucket, 'Key': self.key}
         self.generate_url_patch = mock.patch(
-            'botocore.signers.RequestSigner.generate_presigned_url')
+            'botocore.signers.RequestSigner.generate_presigned_url'
+        )
         self.generate_url_mock = self.generate_url_patch.start()
 
     def tearDown(self):
@@ -757,7 +856,8 @@ class TestGenerateUrl(unittest.TestCase)
 
     def test_generate_presigned_url(self):
         self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket, 'Key': self.key})
+            'get_object', Params={'Bucket': self.bucket, 'Key': self.key}
+        )
 
         ref_request_dict = {
             'body': b'',
@@ -766,37 +866,48 @@ class TestGenerateUrl(unittest.TestCase)
             'auth_path': '/mybucket/mykey',
             'query_string': {},
             'url_path': '/mykey',
-            'method': u'GET',
+            'method': 'GET',
             # mock.ANY is used because client parameter related events
             # inject values into the context. So using the context's exact
             # value for these tests will be a maintenance burden if
             # anymore customizations are added that inject into the context.
-            'context': mock.ANY}
+            'context': mock.ANY,
+        }
         self.generate_url_mock.assert_called_with(
-            request_dict=ref_request_dict, expires_in=3600,
-            operation_name='GetObject')
+            request_dict=ref_request_dict,
+            expires_in=3600,
+            operation_name='GetObject',
+        )
 
     def test_generate_presigned_url_with_query_string(self):
         disposition = 'attachment; filename="download.jpg"'
         self.client.generate_presigned_url(
-            'get_object', Params={
+            'get_object',
+            Params={
                 'Bucket': self.bucket,
                 'Key': self.key,
-                'ResponseContentDisposition': disposition})
+                'ResponseContentDisposition': disposition,
+            },
+        )
         ref_request_dict = {
             'body': b'',
-            'url': ('https://mybucket.s3.us-east-1.amazonaws.com/mykey'
-                    '?response-content-disposition='
-                    'attachment%3B%20filename%3D%22download.jpg%22'),
+            'url': (
+                'https://mybucket.s3.us-east-1.amazonaws.com/mykey'
+                '?response-content-disposition='
+                'attachment%3B%20filename%3D%22download.jpg%22'
+            ),
             'auth_path': '/mybucket/mykey',
             'headers': {},
-            'query_string': {u'response-content-disposition': disposition},
+            'query_string': {'response-content-disposition': disposition},
             'url_path': '/mykey',
-            'method': u'GET',
-            'context': mock.ANY}
+            'method': 'GET',
+            'context': mock.ANY,
+        }
         self.generate_url_mock.assert_called_with(
-            request_dict=ref_request_dict, expires_in=3600,
-            operation_name='GetObject')
+            request_dict=ref_request_dict,
+            expires_in=3600,
+            operation_name='GetObject',
+        )
 
     def test_generate_presigned_url_unknown_method_name(self):
         with self.assertRaises(UnknownClientMethodError):
@@ -808,8 +919,10 @@ class TestGenerateUrl(unittest.TestCase)
 
     def test_generate_presigned_url_expires(self):
         self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket, 'Key': self.key},
-            ExpiresIn=20)
+            'get_object',
+            Params={'Bucket': self.bucket, 'Key': self.key},
+            ExpiresIn=20,
+        )
         ref_request_dict = {
             'body': b'',
             'url': 'https://mybucket.s3.us-east-1.amazonaws.com/mykey',
@@ -817,16 +930,21 @@ class TestGenerateUrl(unittest.TestCase)
             'headers': {},
             'query_string': {},
             'url_path': '/mykey',
-            'method': u'GET',
-            'context': mock.ANY}
+            'method': 'GET',
+            'context': mock.ANY,
+        }
         self.generate_url_mock.assert_called_with(
-            request_dict=ref_request_dict, expires_in=20,
-            operation_name='GetObject')
+            request_dict=ref_request_dict,
+            expires_in=20,
+            operation_name='GetObject',
+        )
 
     def test_generate_presigned_url_override_http_method(self):
         self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket, 'Key': self.key},
-            HttpMethod='PUT')
+            'get_object',
+            Params={'Bucket': self.bucket, 'Key': self.key},
+            HttpMethod='PUT',
+        )
         ref_request_dict = {
             'body': b'',
             'url': 'https://mybucket.s3.us-east-1.amazonaws.com/mykey',
@@ -834,18 +952,22 @@ class TestGenerateUrl(unittest.TestCase)
             'headers': {},
             'query_string': {},
             'url_path': '/mykey',
-            'method': u'PUT',
-            'context': mock.ANY}
+            'method': 'PUT',
+            'context': mock.ANY,
+        }
         self.generate_url_mock.assert_called_with(
-            request_dict=ref_request_dict, expires_in=3600,
-            operation_name='GetObject')
+            request_dict=ref_request_dict,
+            expires_in=3600,
+            operation_name='GetObject',
+        )
 
     def test_generate_presigned_url_emits_param_events(self):
         emitter = mock.Mock(HierarchicalEmitter)
         emitter.emit.return_value = []
         self.client.meta.events = emitter
         self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket, 'Key': self.key})
+            'get_object', Params={'Bucket': self.bucket, 'Key': self.key}
+        )
         events_emitted = [
             emit_call[0][0] for emit_call in emitter.emit.call_args_list
         ]
@@ -853,8 +975,8 @@ class TestGenerateUrl(unittest.TestCase)
             events_emitted,
             [
                 'provide-client-params.s3.GetObject',
-                'before-parameter-build.s3.GetObject'
-            ]
+                'before-parameter-build.s3.GetObject',
+            ],
         )
 
     def test_generate_presign_url_emits_is_presign_in_context(self):
@@ -862,7 +984,8 @@ class TestGenerateUrl(unittest.TestCase)
         emitter.emit.return_value = []
         self.client.meta.events = emitter
         self.client.generate_presigned_url(
-            'get_object', Params={'Bucket': self.bucket, 'Key': self.key})
+            'get_object', Params={'Bucket': self.bucket, 'Key': self.key}
+        )
         kwargs_emitted = [
             emit_call[1] for emit_call in emitter.emit.call_args_list
         ]
@@ -870,12 +993,13 @@ class TestGenerateUrl(unittest.TestCase)
             self.assertTrue(
                 kwargs.get('context', {}).get('is_presign_request'),
                 'The context did not have is_presign_request set to True for '
-                'the following kwargs emitted: %s' % kwargs
+                f'the following kwargs emitted: {kwargs}',
             )
 
     def test_context_param_from_event_handler_sent_to_endpoint_resolver(self):
         def change_bucket_param(params, **kwargs):
             params['Bucket'] = 'mybucket-bar'
+
         self.client.meta.events.register_last(
             'provide-client-params.s3.*', change_bucket_param
         )
@@ -901,6 +1025,7 @@ class TestGenerateUrl(unittest.TestCase)
             operation_name='GetObject',
         )
 
+
 class TestGeneratePresignedPost(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
@@ -908,7 +1033,8 @@ class TestGeneratePresignedPost(unittest
         self.bucket = 'mybucket'
         self.key = 'mykey'
         self.presign_post_patch = mock.patch(
-            'botocore.signers.S3PostPresigner.generate_presigned_post')
+            'botocore.signers.S3PostPresigner.generate_presigned_post'
+        )
         self.presign_post_mock = self.presign_post_patch.start()
 
     def tearDown(self):
@@ -922,14 +1048,13 @@ class TestGeneratePresignedPost(unittest
         fields = post_kwargs['fields']
         conditions = post_kwargs['conditions']
         self.assertEqual(
-            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/')
+            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/'
+        )
         self.assertEqual(post_kwargs['expires_in'], 3600)
         self.assertEqual(
-            conditions,
-            [{'bucket': 'mybucket'}, {'key': 'mykey'}])
-        self.assertEqual(
-            fields,
-            {'key': 'mykey'})
+            conditions, [{'bucket': 'mybucket'}, {'key': 'mykey'}]
+        )
+        self.assertEqual(fields, {'key': 'mykey'})
 
     def test_generate_presigned_post_with_filename(self):
         self.key = 'myprefix/${filename}'
@@ -940,38 +1065,39 @@ class TestGeneratePresignedPost(unittest
         fields = post_kwargs['fields']
         conditions = post_kwargs['conditions']
         self.assertEqual(
-            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/')
+            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/'
+        )
         self.assertEqual(post_kwargs['expires_in'], 3600)
         self.assertEqual(
             conditions,
-            [{'bucket': 'mybucket'}, ['starts-with', '$key', 'myprefix/']])
-        self.assertEqual(
-            fields,
-            {'key': 'myprefix/${filename}'})
+            [{'bucket': 'mybucket'}, ['starts-with', '$key', 'myprefix/']],
+        )
+        self.assertEqual(fields, {'key': 'myprefix/${filename}'})
 
     def test_generate_presigned_post_expires(self):
         self.client.generate_presigned_post(
-            self.bucket, self.key, ExpiresIn=50)
+            self.bucket, self.key, ExpiresIn=50
+        )
         _, post_kwargs = self.presign_post_mock.call_args
         request_dict = post_kwargs['request_dict']
         fields = post_kwargs['fields']
         conditions = post_kwargs['conditions']
         self.assertEqual(
-            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/')
+            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/'
+        )
         self.assertEqual(post_kwargs['expires_in'], 50)
         self.assertEqual(
-            conditions,
-            [{'bucket': 'mybucket'}, {'key': 'mykey'}])
-        self.assertEqual(
-            fields,
-            {'key': 'mykey'})
+            conditions, [{'bucket': 'mybucket'}, {'key': 'mykey'}]
+        )
+        self.assertEqual(fields, {'key': 'mykey'})
 
     def test_generate_presigned_post_with_prefilled(self):
         conditions = [{'acl': 'public-read'}]
         fields = {'acl': 'public-read'}
 
         self.client.generate_presigned_post(
-            self.bucket, self.key, Fields=fields, Conditions=conditions)
+            self.bucket, self.key, Fields=fields, Conditions=conditions
+        )
 
         self.assertEqual(fields, {'acl': 'public-read'})
 
@@ -980,13 +1106,14 @@ class TestGeneratePresignedPost(unittest
         fields = post_kwargs['fields']
         conditions = post_kwargs['conditions']
         self.assertEqual(
-            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/')
+            request_dict['url'], 'https://mybucket.s3.us-east-1.amazonaws.com/'
+        )
         self.assertEqual(
             conditions,
-            [{'acl': 'public-read'}, {'bucket': 'mybucket'}, {'key': 'mykey'}])
+            [{'acl': 'public-read'}, {'bucket': 'mybucket'}, {'key': 'mykey'}],
+        )
         self.assertEqual(fields['acl'], 'public-read')
-        self.assertEqual(
-            fields, {'key': 'mykey', 'acl': 'public-read'})
+        self.assertEqual(fields, {'key': 'mykey', 'acl': 'public-read'})
 
     def test_generate_presigned_post_non_s3_client(self):
         self.client = self.session.create_client('ec2', 'us-west-2')
@@ -1000,8 +1127,11 @@ class TestGenerateDBAuthToken(BaseSigner
     def setUp(self):
         self.session = botocore.session.get_session()
         self.client = self.session.create_client(
-            'rds', region_name='us-east-1', aws_access_key_id='akid',
-            aws_secret_access_key='skid', config=Config(signature_version='v4')
+            'rds',
+            region_name='us-east-1',
+            aws_access_key_id='akid',
+            aws_secret_access_key='skid',
+            config=Config(signature_version='v4'),
         )
 
     def test_generate_db_auth_token(self):
@@ -1013,7 +1143,8 @@ class TestGenerateDBAuthToken(BaseSigner
         with mock.patch('datetime.datetime') as dt:
             dt.utcnow.return_value = clock
             result = generate_db_auth_token(
-                self.client, hostname, port, username)
+                self.client, hostname, port, username
+            )
 
         expected_result = (
             'prod-instance.us-east-1.rds.amazonaws.com:3306/?Action=connect'
@@ -1026,8 +1157,7 @@ class TestGenerateDBAuthToken(BaseSigner
 
         # A scheme needs to be appended to the beginning or urlsplit may fail
         # on certain systems.
-        assert_url_equal(
-            'https://' + result, 'https://' + expected_result)
+        assert_url_equal('https://' + result, 'https://' + expected_result)
 
     def test_custom_region(self):
         hostname = 'host.us-east-1.rds.amazonaws.com'
@@ -1035,7 +1165,8 @@ class TestGenerateDBAuthToken(BaseSigner
         username = 'mySQLUser'
         region = 'us-west-2'
         result = generate_db_auth_token(
-            self.client, hostname, port, username, Region=region)
+            self.client, hostname, port, username, Region=region
+        )
 
         self.assertIn(region, result)
         # The hostname won't be changed even if a different region is specified
diff -pruN 2.23.6-1/tests/unit/botocore/test_stub.py 2.31.35-1/tests/unit/botocore/test_stub.py
--- 2.23.6-1/tests/unit/botocore/test_stub.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_stub.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,16 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests import mock, unittest
-
-from botocore.stub import Stubber
-from botocore.exceptions import ParamValidationError, StubResponseError, UnStubbedResponseError
-from botocore.model import ServiceModel
 from botocore import hooks
+from botocore.exceptions import (
+    ParamValidationError,
+    StubResponseError,
+    UnStubbedResponseError,
+)
+from botocore.model import ServiceModel
+from botocore.stub import Stubber
+
+from tests import mock, unittest
 
 
 class TestStubber(unittest.TestCase):
@@ -28,21 +32,27 @@ class TestStubber(unittest.TestCase):
         self.stubber = Stubber(self.client)
         self.validate_parameters_mock = mock.Mock()
         self.validate_parameters_patch = mock.patch(
-            'botocore.stub.validate_parameters', self.validate_parameters_mock)
+            'botocore.stub.validate_parameters', self.validate_parameters_mock
+        )
         self.validate_parameters_patch.start()
 
     def tearDown(self):
         self.validate_parameters_patch.stop()
 
-    def emit_get_response_event(self, model=None, request_dict=None,
-                                signer=None, context=None):
+    def emit_get_response_event(
+        self, model=None, request_dict=None, signer=None, context=None
+    ):
         if model is None:
             model = mock.Mock()
             model.name = 'foo'
 
         handler, response = self.event_emitter.emit_until_response(
-            event_name='before-call.myservice.foo', model=model,
-            params=request_dict, request_signer=signer, context=context)
+            event_name='before-call.myservice.foo',
+            model=model,
+            params=request_dict,
+            request_signer=signer,
+            context=context,
+        )
 
         return response
 
@@ -53,9 +63,11 @@ class TestStubber(unittest.TestCase):
         # This just ensures that we register at the correct event
         # and nothing more
         self.event_emitter.register_first.assert_called_with(
-            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY
+        )
         self.event_emitter.register.assert_called_with(
-            'before-call.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-call.*.*', mock.ANY, unique_id=mock.ANY
+        )
 
     def test_stubber_unregisters_events(self):
         self.event_emitter = mock.Mock()
@@ -63,9 +75,11 @@ class TestStubber(unittest.TestCase):
         self.stubber.activate()
         self.stubber.deactivate()
         self.event_emitter.unregister.assert_any_call(
-            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY
+        )
         self.event_emitter.unregister.assert_any_call(
-            'before-call.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-call.*.*', mock.ANY, unique_id=mock.ANY
+        )
 
     def test_context_manager(self):
         self.event_emitter = mock.Mock()
@@ -74,15 +88,19 @@ class TestStubber(unittest.TestCase):
         with self.stubber:
             # Ensure events are registered in context
             self.event_emitter.register_first.assert_called_with(
-                'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY)
+                'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY
+            )
             self.event_emitter.register.assert_called_with(
-                'before-call.*.*', mock.ANY, unique_id=mock.ANY)
+                'before-call.*.*', mock.ANY, unique_id=mock.ANY
+            )
 
         # Ensure events are no longer registered once we leave the context
         self.event_emitter.unregister.assert_any_call(
-            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-parameter-build.*.*', mock.ANY, unique_id=mock.ANY
+        )
         self.event_emitter.unregister.assert_any_call(
-            'before-call.*.*', mock.ANY, unique_id=mock.ANY)
+            'before-call.*.*', mock.ANY, unique_id=mock.ANY
+        )
 
     def test_add_response(self):
         response = {'foo': 'bar'}
@@ -102,40 +120,35 @@ class TestStubber(unittest.TestCase):
 
     def test_validate_ignores_response_metadata(self):
         service_response = {'ResponseMetadata': {'foo': 'bar'}}
-        service_model = ServiceModel({
-            'documentation': '',
-            'operations': {
-                'foo': {
-                    'name': 'foo',
-                    'input': {'shape': 'StringShape'},
-                    'output': {'shape': 'StringShape'}
-                }
-            },
-            'shapes': {
-                'StringShape': {'type': 'string'}
+        service_model = ServiceModel(
+            {
+                'documentation': '',
+                'operations': {
+                    'foo': {
+                        'name': 'foo',
+                        'input': {'shape': 'StringShape'},
+                        'output': {'shape': 'StringShape'},
+                    }
+                },
+                'shapes': {'StringShape': {'type': 'string'}},
             }
-        })
+        )
         op_name = service_model.operation_names[0]
         output_shape = service_model.operation_model(op_name).output_shape
 
         self.client.meta.service_model = service_model
         self.stubber.add_response('TestOperation', service_response)
-        self.validate_parameters_mock.assert_called_with(
-            {}, output_shape)
+        self.validate_parameters_mock.assert_called_with({}, output_shape)
 
         # Make sure service response hasn't been mutated
         self.assertEqual(
-            service_response, {'ResponseMetadata': {'foo': 'bar'}})
+            service_response, {'ResponseMetadata': {'foo': 'bar'}}
+        )
 
     def test_validates_on_empty_output_shape(self):
-        service_model = ServiceModel({
-            'documentation': '',
-            'operations': {
-                'foo': {
-                    'name': 'foo'
-                }
-            }
-        })
+        service_model = ServiceModel(
+            {'documentation': '', 'operations': {'foo': {'name': 'foo'}}}
+        )
         self.client.meta.service_model = service_model
 
         with self.assertRaises(ParamValidationError):
@@ -165,9 +178,12 @@ class TestStubber(unittest.TestCase):
             "Endpoint": "https://foo.bar.baz",
         }
         self.stubber.add_client_error(
-            'foo', error_code, error_message,
+            'foo',
+            error_code,
+            error_message,
             http_status_code=301,
-            service_error_meta=error_meta)
+            service_error_meta=error_meta,
+        )
         with self.stubber:
             response = self.emit_get_response_event()
         error = response[1]['Error']
@@ -181,16 +197,18 @@ class TestStubber(unittest.TestCase):
             "RequestId": "79104EXAMPLEB723",
         }
         self.stubber.add_client_error(
-            'foo', error_code, error_message,
+            'foo',
+            error_code,
+            error_message,
             http_status_code=301,
-            response_meta=stub_response_meta)
+            response_meta=stub_response_meta,
+        )
         with self.stubber:
             response = self.emit_get_response_event()
         actual_response_meta = response[1]['ResponseMetadata']
         self.assertIn('RequestId', actual_response_meta)
         self.assertEqual(actual_response_meta['RequestId'], "79104EXAMPLEB723")
 
-
     def test_get_response_errors_with_no_stubs(self):
         self.stubber.activate()
         with self.assertRaises(UnStubbedResponseError):
diff -pruN 2.23.6-1/tests/unit/botocore/test_tokens.py 2.31.35-1/tests/unit/botocore/test_tokens.py
--- 2.23.6-1/tests/unit/botocore/test_tokens.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_tokens.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,18 @@
 # language governing permissions and limitations under the License.
 import dateutil.parser
 import pytest
-
 from botocore.exceptions import (
     InvalidConfigError,
     SSOTokenLoadError,
     TokenRetrievalError,
 )
 from botocore.session import Session
-from botocore.tokens import SSOTokenProvider
+from botocore.tokens import (
+    FrozenAuthToken,
+    ScopedEnvTokenProvider,
+    SSOTokenProvider,
+)
+
 from tests import mock
 
 
@@ -349,3 +353,33 @@ def test_sso_token_provider_refresh(test
     # Pop the documentation to ensure all test fields are handled
     test_case.pop("documentation")
     assert not test_case.keys(), "All fields of test case should be handled"
+
+
+def test_scoped_env_token_provider_returns_token_when_present(monkeypatch):
+    signing_name = 'my-service'
+    token_env_var = 'AWS_BEARER_TOKEN_MY_SERVICE'
+    monkeypatch.setenv(token_env_var, 'env-token-value')
+
+    provider = ScopedEnvTokenProvider(session=mock.Mock())
+    auth_token = provider.load_token(signing_name=signing_name)
+
+    assert isinstance(auth_token, FrozenAuthToken)
+    assert auth_token.token == 'env-token-value'
+
+
+def test_scoped_env_token_provider_returns_none_when_not_found(monkeypatch):
+    signing_name = 'my-service'
+    token_env_var = 'AWS_BEARER_TOKEN_MY_SERVICE'
+    monkeypatch.delenv(token_env_var, raising=False)
+
+    provider = ScopedEnvTokenProvider(session=mock.Mock())
+    auth_token = provider.load_token(signing_name=signing_name)
+
+    assert auth_token is None
+
+
+def test_scoped_env_token_provider_returns_none_when_signing_name_missing():
+    provider = ScopedEnvTokenProvider(session=mock.Mock())
+    auth_token = provider.load_token()
+
+    assert auth_token is None
diff -pruN 2.23.6-1/tests/unit/botocore/test_useragent.py 2.31.35-1/tests/unit/botocore/test_useragent.py
--- 2.23.6-1/tests/unit/botocore/test_useragent.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_useragent.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import logging
 import platform
 import unittest
 
 import pytest
-
 from botocore import __version__ as botocore_version
 from botocore.config import Config
+from botocore.context import get_context
 from botocore.useragent import (
+    UserAgentComponent,
+    UserAgentComponentSizeConfig,
     UserAgentString,
+    register_feature_id,
     sanitize_user_agent_string_component,
 )
 
@@ -68,7 +72,7 @@ def test_basic_user_agent_string():
     expected = (
         f'Botocore/{botocore_version} '
         'md/awscrt#Unknown '
-        'ua/2.0 '
+        'ua/2.1 '
         'os/linux#1.2.3-foo '
         'md/arch#x86_64 '
         'lang/python#3.8.20 '
@@ -96,7 +100,7 @@ def test_shared_test_case():
     actual = uas.to_string().split(' ')
     expected_in_exact_order = [
         f"Botocore/{botocore_version}",
-        "ua/2.0",
+        "ua/2.1",
         "os/linux#5.4.228-131.415.AMZN2.X86_64",
         "lang/python#4.3.2",
         "exec-env/lambda",
@@ -125,7 +129,7 @@ def test_user_agent_string_with_missing_
         crt_version=None,
     ).with_client_config(Config())
     actual = uas.to_string()
-    assert actual == f'Botocore/{botocore_version} ua/2.0 os/other lang/python'
+    assert actual == f'Botocore/{botocore_version} ua/2.1 os/other lang/python'
 
 
 def test_from_environment(monkeypatch):
@@ -178,3 +182,57 @@ def test_from_environment_unknown_platfo
     monkeypatch.setattr(platform, 'release', lambda: '0.0.1')
     uas = UserAgentString.from_environment()
     assert ' os/other md/FooOS#0.0.1 ' in uas.to_string()
+
+
+def test_user_agent_string_with_registered_features(client_context):
+    uas = UserAgentString.from_environment()
+    uas.set_client_features({'A'})
+    register_feature_id('WAITER')
+
+    uafields = uas.to_string().split(' ')
+    feature_field = [field for field in uafields if field.startswith('m/')][0]
+    feature_list = feature_field[2:].split(',')
+    assert sorted(feature_list) == ['A', 'B']
+
+
+def test_register_feature_id(client_context):
+    register_feature_id('WAITER')
+    ctx = get_context()
+    assert ctx.features == {'B'}
+
+
+def test_register_unknown_feature_id_skips(client_context):
+    register_feature_id('MY_FEATURE')
+    ctx = get_context()
+    assert ctx.features == set()
+
+
+def test_user_agent_truncated_string():
+    size_config = UserAgentComponentSizeConfig(4, ',')
+    component = UserAgentComponent(
+        'm',
+        'A,BCD',
+        size_config=size_config,
+    )
+    assert component.to_string() == 'm/A'
+
+
+def test_user_agent_empty_truncated_string_logs(caplog):
+    caplog.set_level(logging.DEBUG)
+    size_config = UserAgentComponentSizeConfig(1, ',')
+    component = UserAgentComponent(
+        'm',
+        'A,B,C',
+        size_config=size_config,
+    )
+    assert component.to_string() == ''
+    assert 'could not be truncated' in caplog.text
+
+
+def test_non_positive_user_agent_component_size_config_raises():
+    with pytest.raises(ValueError) as excinfo:
+        UserAgentComponentSizeConfig(0, ',')
+    assert 'Invalid `max_size_in_bytes`' in str(excinfo.value)
+    with pytest.raises(ValueError) as excinfo:
+        UserAgentComponentSizeConfig(-1, ',')
+    assert 'Invalid `max_size_in_bytes`' in str(excinfo.value)
diff -pruN 2.23.6-1/tests/unit/botocore/test_utils.py 2.31.35-1/tests/unit/botocore/test_utils.py
--- 2.23.6-1/tests/unit/botocore/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,95 +10,99 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import io
-
-import pytest
-
-from tests import create_session
-from tests import mock
-from tests import unittest
-from tests import RawResponse
-from tests import FreezeTime
-from dateutil.tz import tzutc, tzoffset
-from contextlib import contextmanager
-import datetime
 import copy
+import datetime
+import io
 import operator
+from contextlib import contextmanager
 from sys import getrefcount
 
 import botocore
+import pytest
 from botocore import xform_name
+from botocore.awsrequest import AWSRequest, AWSResponse, HeadersDict
 from botocore.compat import OrderedDict, json
-from botocore.awsrequest import AWSRequest, HeadersDict
-from botocore.awsrequest import AWSResponse
-from botocore.exceptions import InvalidExpressionError, ConfigNotFound
-from botocore.exceptions import ClientError, ConnectionClosedError
-from botocore.exceptions import InvalidDNSNameError, MetadataRetrievalError
-from botocore.exceptions import PendingAuthorizationExpiredError
-from botocore.model import ServiceModel
-from botocore.session import Session
-from botocore.exceptions import InvalidIMDSEndpointError
-from botocore.exceptions import InvalidIMDSEndpointModeError
-from botocore.exceptions import ReadTimeoutError
-from botocore.exceptions import ConnectTimeoutError
-from botocore.exceptions import UnsupportedS3ArnError
-from botocore.exceptions import UnsupportedS3AccesspointConfigurationError
-from botocore.exceptions import UnsupportedOutpostResourceError
-from botocore.model import ServiceModel
-from botocore.model import OperationModel
-from botocore.regions import EndpointResolver
-from botocore.regions import EndpointRulesetResolver
-from botocore.utils import ensure_boolean
-from botocore.utils import resolve_imds_endpoint_mode
-from botocore.utils import is_json_value_header
-from botocore.utils import is_s3_accelerate_url
-from botocore.utils import remove_dot_segments
-from botocore.utils import normalize_url_path
-from botocore.utils import validate_jmespath_for_set
-from botocore.utils import set_value_from_jmespath
-from botocore.utils import parse_key_val_file_contents
-from botocore.utils import parse_key_val_file
-from botocore.utils import parse_timestamp
-from botocore.utils import parse_to_aware_datetime
-from botocore.utils import datetime2timestamp
-from botocore.utils import CachedProperty
-from botocore.utils import ArgumentGenerator
-from botocore.utils import calculate_tree_hash
-from botocore.utils import calculate_sha256
-from botocore.utils import is_valid_endpoint_url
-from botocore.utils import fix_s3_host
-from botocore.utils import switch_to_virtual_host_style
-from botocore.utils import instance_cache
-from botocore.utils import merge_dicts
-from botocore.utils import lowercase_dict
-from botocore.utils import lru_cache_weakref
-from botocore.utils import get_service_module_name
-from botocore.utils import get_encoding_from_headers
-from botocore.utils import percent_encode_sequence
-from botocore.utils import percent_encode
-from botocore.utils import switch_host_s3_accelerate
-from botocore.utils import deep_merge
-from botocore.utils import S3RegionRedirectorv2
-from botocore.utils import InvalidArnException
-from botocore.utils import ArnParser
-from botocore.utils import S3ArnParamHandler
-from botocore.utils import S3EndpointSetter
-from botocore.utils import ContainerMetadataFetcher
-from botocore.utils import InstanceMetadataFetcher
-from botocore.utils import SSOTokenFetcher
-from botocore.utils import SSOTokenLoader
-from botocore.utils import is_valid_uri, is_valid_ipv6_endpoint_url
-from botocore.utils import original_ld_library_path
-from botocore.utils import has_header
-from botocore.utils import determine_content_length
-from botocore.exceptions import SSOTokenLoadError
-from botocore.utils import IMDSFetcher
-from botocore.utils import BadIMDSRequestError
-from botocore.model import DenormalizedStructureBuilder
-from botocore.model import ShapeResolver
-from botocore.stub import Stubber
 from botocore.config import Config
 from botocore.endpoint_provider import RuleSetEndpoint
+from botocore.exceptions import (
+    ClientError,
+    ConfigNotFound,
+    ConnectionClosedError,
+    ConnectTimeoutError,
+    InvalidDNSNameError,
+    InvalidExpressionError,
+    InvalidIMDSEndpointError,
+    InvalidIMDSEndpointModeError,
+    MetadataRetrievalError,
+    PendingAuthorizationExpiredError,
+    ReadTimeoutError,
+    SSOTokenLoadError,
+    UnsupportedOutpostResourceError,
+    UnsupportedS3AccesspointConfigurationError,
+    UnsupportedS3ArnError,
+)
+from botocore.model import (
+    DenormalizedStructureBuilder,
+    OperationModel,
+    ServiceModel,
+    ShapeResolver,
+)
+from botocore.regions import EndpointResolver, EndpointRulesetResolver
+from botocore.session import Session
+from botocore.stub import Stubber
+from botocore.utils import (
+    ArgumentGenerator,
+    ArnParser,
+    BadIMDSRequestError,
+    CachedProperty,
+    ContainerMetadataFetcher,
+    IMDSFetcher,
+    InstanceMetadataFetcher,
+    InvalidArnException,
+    S3ArnParamHandler,
+    S3EndpointSetter,
+    S3RegionRedirectorv2,
+    SSOTokenFetcher,
+    SSOTokenLoader,
+    _get_bearer_env_var_name,
+    calculate_sha256,
+    calculate_tree_hash,
+    datetime2timestamp,
+    deep_merge,
+    determine_content_length,
+    ensure_boolean,
+    fix_s3_host,
+    get_encoding_from_headers,
+    get_service_module_name,
+    get_token_from_environment,
+    has_header,
+    instance_cache,
+    is_json_value_header,
+    is_s3_accelerate_url,
+    is_valid_endpoint_url,
+    is_valid_ipv6_endpoint_url,
+    is_valid_uri,
+    lowercase_dict,
+    lru_cache_weakref,
+    merge_dicts,
+    normalize_url_path,
+    original_ld_library_path,
+    parse_key_val_file,
+    parse_key_val_file_contents,
+    parse_timestamp,
+    parse_to_aware_datetime,
+    percent_encode,
+    percent_encode_sequence,
+    remove_dot_segments,
+    resolve_imds_endpoint_mode,
+    set_value_from_jmespath,
+    switch_host_s3_accelerate,
+    switch_to_virtual_host_style,
+    validate_jmespath_for_set,
+)
+from dateutil.tz import tzoffset, tzutc
+
+from tests import FreezeTime, RawResponse, create_session, mock, unittest
 
 DATE = datetime.datetime(2021, 12, 10, 00, 00, 00)
 DT_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
@@ -127,10 +131,10 @@ class TestEnsureBoolean(unittest.TestCas
 class TestResolveIMDSEndpointMode(unittest.TestCase):
     def create_session_with_config(self, endpoint_mode, imds_use_IPv6):
         session = create_session()
-        session.set_config_variable('ec2_metadata_service_endpoint_mode',
-                                    endpoint_mode)
-        session.set_config_variable('imds_use_ipv6',
-                                    imds_use_IPv6)
+        session.set_config_variable(
+            'ec2_metadata_service_endpoint_mode', endpoint_mode
+        )
+        session.set_config_variable('imds_use_ipv6', imds_use_IPv6)
         return session
 
     def test_resolve_endpoint_mode_no_config(self):
@@ -183,40 +187,29 @@ class TestIsJSONValueHeader(unittest.Tes
 
     def test_non_jsonvalue_shape(self):
         shape = mock.Mock()
-        shape.serialization = {
-            'location': 'header'
-        }
+        shape.serialization = {'location': 'header'}
         shape.type_name = 'string'
         self.assertFalse(is_json_value_header(shape))
 
     def test_non_header_jsonvalue_shape(self):
         shape = mock.Mock()
-        shape.serialization = {
-            'jsonvalue': True
-        }
+        shape.serialization = {'jsonvalue': True}
         shape.type_name = 'string'
         self.assertFalse(is_json_value_header(shape))
 
     def test_non_string_jsonvalue_shape(self):
         shape = mock.Mock()
-        shape.serialization = {
-            'location': 'header',
-            'jsonvalue': True
-        }
+        shape.serialization = {'location': 'header', 'jsonvalue': True}
         shape.type_name = 'integer'
         self.assertFalse(is_json_value_header(shape))
 
     def test_json_value_header(self):
         shape = mock.Mock()
-        shape.serialization = {
-            'jsonvalue': True,
-            'location': 'header'
-        }
+        shape.serialization = {'jsonvalue': True, 'location': 'header'}
         shape.type_name = 'string'
         self.assertTrue(is_json_value_header(shape))
 
 
-
 class TestURINormalization(unittest.TestCase):
     def test_remove_dot_segments(self):
         self.assertEqual(remove_dot_segments('../foo'), 'foo')
@@ -224,8 +217,9 @@ class TestURINormalization(unittest.Test
         self.assertEqual(remove_dot_segments('./foo'), 'foo')
         self.assertEqual(remove_dot_segments('/./'), '/')
         self.assertEqual(remove_dot_segments('/../'), '/')
-        self.assertEqual(remove_dot_segments('/foo/bar/baz/../qux'),
-                         '/foo/bar/qux')
+        self.assertEqual(
+            remove_dot_segments('/foo/bar/baz/../qux'), '/foo/bar/qux'
+        )
         self.assertEqual(remove_dot_segments('/foo/..'), '/')
         self.assertEqual(remove_dot_segments('foo/bar/baz'), 'foo/bar/baz')
         self.assertEqual(remove_dot_segments('..'), '')
@@ -258,8 +252,9 @@ class TestTransformName(unittest.TestCas
 
     def test_consecutive_upper_case_middle_string(self):
         self.assertEqual(xform_name('MainHTTPHeaders'), 'main_http_headers')
-        self.assertEqual(xform_name('MainHTTPHeaders', '-'),
-                         'main-http-headers')
+        self.assertEqual(
+            xform_name('MainHTTPHeaders', '-'), 'main-http-headers'
+        )
 
     def test_s3_prefix(self):
         self.assertEqual(xform_name('S3BucketName'), 's3_bucket_name')
@@ -271,27 +266,54 @@ class TestTransformName(unittest.TestCas
 
     def test_special_cases(self):
         # Some patterns don't actually match the rules we expect.
-        self.assertEqual(xform_name('SwapEnvironmentCNAMEs'),
-                         'swap_environment_cnames')
-        self.assertEqual(xform_name('SwapEnvironmentCNAMEs', '-'),
-                         'swap-environment-cnames')
-        self.assertEqual(xform_name('CreateCachediSCSIVolume', '-'),
-                         'create-cached-iscsi-volume')
-        self.assertEqual(xform_name('DescribeCachediSCSIVolumes', '-'),
-                         'describe-cached-iscsi-volumes')
-        self.assertEqual(xform_name('DescribeStorediSCSIVolumes', '-'),
-                         'describe-stored-iscsi-volumes')
-        self.assertEqual(xform_name('CreateStorediSCSIVolume', '-'),
-                         'create-stored-iscsi-volume')
-        self.assertEqual(xform_name('sourceServerIDs', '-'),
-                         'source-server-ids')
+        self.assertEqual(
+            xform_name('SwapEnvironmentCNAMEs'), 'swap_environment_cnames'
+        )
+        self.assertEqual(
+            xform_name('SwapEnvironmentCNAMEs', '-'), 'swap-environment-cnames'
+        )
+        self.assertEqual(
+            xform_name('CreateCachediSCSIVolume', '-'),
+            'create-cached-iscsi-volume',
+        )
+        self.assertEqual(
+            xform_name('DescribeCachediSCSIVolumes', '-'),
+            'describe-cached-iscsi-volumes',
+        )
+        self.assertEqual(
+            xform_name('DescribeStorediSCSIVolumes', '-'),
+            'describe-stored-iscsi-volumes',
+        )
+        self.assertEqual(
+            xform_name('CreateStorediSCSIVolume', '-'),
+            'create-stored-iscsi-volume',
+        )
+        self.assertEqual(
+            xform_name('sourceServerIDs', '-'), 'source-server-ids'
+        )
         self.assertEqual(
             xform_name('AssociateWhatsAppBusinessAccount', '-'),
             'associate-whatsapp-business-account',
         )
         self.assertEqual(
+            xform_name('CreateWhatsAppMessageTemplate', '-'),
+            'create-whatsapp-message-template',
+        )
+        self.assertEqual(
+            xform_name('CreateWhatsAppMessageTemplateFromLibrary', '-'),
+            'create-whatsapp-message-template-from-library',
+        )
+        self.assertEqual(
+            xform_name('CreateWhatsAppMessageTemplateMedia', '-'),
+            'create-whatsapp-message-template-media',
+        )
+        self.assertEqual(
             xform_name('DeleteWhatsAppMessageMedia', '-'),
-            'delete-whatsapp-media-message',
+            'delete-whatsapp-message-media',
+        )
+        self.assertEqual(
+            xform_name('DeleteWhatsAppMessageTemplate', '-'),
+            'delete-whatsapp-message-template',
         )
         self.assertEqual(
             xform_name('DisassociateWhatsAppBusinessAccount', '-'),
@@ -310,10 +332,22 @@ class TestTransformName(unittest.TestCas
             'get-whatsapp-message-media',
         )
         self.assertEqual(
+            xform_name('GetWhatsAppMessageTemplate', '-'),
+            'get-whatsapp-message-template',
+        )
+        self.assertEqual(
             xform_name('ListLinkedWhatsAppBusinessAccounts', '-'),
             'list-linked-whatsapp-business-accounts',
         )
         self.assertEqual(
+            xform_name('ListWhatsAppMessageTemplates', '-'),
+            'list-whatsapp-message-templates',
+        )
+        self.assertEqual(
+            xform_name('ListWhatsAppTemplateLibrary', '-'),
+            'list-whatsapp-template-library',
+        )
+        self.assertEqual(
             xform_name('PostWhatsAppMessageMedia', '-'),
             'post-whatsapp-message-media',
         )
@@ -324,6 +358,10 @@ class TestTransformName(unittest.TestCas
         self.assertEqual(
             xform_name('SendWhatsAppMessage', '-'), 'send-whatsapp-message'
         )
+        self.assertEqual(
+            xform_name('UpdateWhatsAppMessageTemplate', '-'),
+            'update-whatsapp-message-template',
+        )
 
     def test_special_case_ends_with_s(self):
         self.assertEqual(xform_name('GatewayARNs', '-'), 'gateway-arns')
@@ -343,7 +381,7 @@ class TestTransformName(unittest.TestCas
 
 class TestValidateJMESPathForSet(unittest.TestCase):
     def setUp(self):
-        super(TestValidateJMESPathForSet, self).setUp()
+        super().setUp()
         self.data = {
             'Response': {
                 'Thing': {
@@ -351,7 +389,7 @@ class TestValidateJMESPathForSet(unittes
                     'Name': 'Thing #1',
                 }
             },
-            'Marker': 'some-token'
+            'Marker': 'some-token',
         }
 
     def test_invalid_exp(self):
@@ -370,7 +408,7 @@ class TestValidateJMESPathForSet(unittes
 
 class TestSetValueFromJMESPath(unittest.TestCase):
     def setUp(self):
-        super(TestSetValueFromJMESPath, self).setUp()
+        super().setUp()
         self.data = {
             'Response': {
                 'Thing': {
@@ -378,7 +416,7 @@ class TestSetValueFromJMESPath(unittest.
                     'Name': 'Thing #1',
                 }
             },
-            'Marker': 'some-token'
+            'Marker': 'some-token',
         }
 
     def test_single_depth_existing(self):
@@ -403,9 +441,10 @@ class TestSetValueFromJMESPath(unittest.
 class TestParseEC2CredentialsFile(unittest.TestCase):
     def test_parse_ec2_content(self):
         contents = "AWSAccessKeyId=a\nAWSSecretKey=b\n"
-        self.assertEqual(parse_key_val_file_contents(contents),
-                         {'AWSAccessKeyId': 'a',
-                          'AWSSecretKey': 'b'})
+        self.assertEqual(
+            parse_key_val_file_contents(contents),
+            {'AWSAccessKeyId': 'a', 'AWSSecretKey': 'b'},
+        )
 
     def test_parse_ec2_content_empty(self):
         contents = ""
@@ -414,22 +453,28 @@ class TestParseEC2CredentialsFile(unitte
     def test_key_val_pair_with_blank_lines(self):
         # The \n\n has an extra blank between the access/secret keys.
         contents = "AWSAccessKeyId=a\n\nAWSSecretKey=b\n"
-        self.assertEqual(parse_key_val_file_contents(contents),
-                         {'AWSAccessKeyId': 'a',
-                          'AWSSecretKey': 'b'})
+        self.assertEqual(
+            parse_key_val_file_contents(contents),
+            {'AWSAccessKeyId': 'a', 'AWSSecretKey': 'b'},
+        )
 
     def test_key_val_parser_lenient(self):
         # Ignore any line that does not have a '=' char in it.
         contents = "AWSAccessKeyId=a\nNOTKEYVALLINE\nAWSSecretKey=b\n"
-        self.assertEqual(parse_key_val_file_contents(contents),
-                         {'AWSAccessKeyId': 'a',
-                          'AWSSecretKey': 'b'})
+        self.assertEqual(
+            parse_key_val_file_contents(contents),
+            {'AWSAccessKeyId': 'a', 'AWSSecretKey': 'b'},
+        )
 
     def test_multiple_equals_on_line(self):
         contents = "AWSAccessKeyId=a\nAWSSecretKey=secret_key_with_equals=b\n"
-        self.assertEqual(parse_key_val_file_contents(contents),
-                         {'AWSAccessKeyId': 'a',
-                          'AWSSecretKey': 'secret_key_with_equals=b'})
+        self.assertEqual(
+            parse_key_val_file_contents(contents),
+            {
+                'AWSAccessKeyId': 'a',
+                'AWSSecretKey': 'secret_key_with_equals=b',
+            },
+        )
 
     def test_os_error_raises_config_not_found(self):
         mock_open = mock.Mock()
@@ -442,17 +487,20 @@ class TestParseTimestamps(unittest.TestC
     def test_parse_iso8601(self):
         self.assertEqual(
             parse_timestamp('1970-01-01T00:10:00.000Z'),
-            datetime.datetime(1970, 1, 1, 0, 10, tzinfo=tzutc()))
+            datetime.datetime(1970, 1, 1, 0, 10, tzinfo=tzutc()),
+        )
 
     def test_parse_epoch(self):
         self.assertEqual(
             parse_timestamp(1222172800),
-            datetime.datetime(2008, 9, 23, 12, 26, 40, tzinfo=tzutc()))
+            datetime.datetime(2008, 9, 23, 12, 26, 40, tzinfo=tzutc()),
+        )
 
     def test_parse_epoch_zero_time(self):
         self.assertEqual(
             parse_timestamp(0),
-            datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc()))
+            datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc()),
+        )
 
     def test_parse_epoch_negative_time(self):
         self.assertEqual(
@@ -469,12 +517,14 @@ class TestParseTimestamps(unittest.TestC
     def test_parse_epoch_as_string(self):
         self.assertEqual(
             parse_timestamp('1222172800'),
-            datetime.datetime(2008, 9, 23, 12, 26, 40, tzinfo=tzutc()))
+            datetime.datetime(2008, 9, 23, 12, 26, 40, tzinfo=tzutc()),
+        )
 
     def test_parse_rfc822(self):
         self.assertEqual(
             parse_timestamp('Wed, 02 Oct 2002 13:00:00 GMT'),
-            datetime.datetime(2002, 10, 2, 13, 0, tzinfo=tzutc()))
+            datetime.datetime(2002, 10, 2, 13, 0, tzinfo=tzutc()),
+        )
 
     def test_parse_gmt_in_uk_time(self):
         # In the UK the time switches from GMT to BST and back as part of
@@ -486,7 +536,8 @@ class TestParseTimestamps(unittest.TestC
         with mock.patch('time.tzname', ('GMT', 'BST')):
             self.assertEqual(
                 parse_timestamp('Wed, 02 Oct 2002 13:00:00 GMT'),
-                datetime.datetime(2002, 10, 2, 13, 0, tzinfo=tzutc()))
+                datetime.datetime(2002, 10, 2, 13, 0, tzinfo=tzutc()),
+            )
 
     def test_parse_invalid_timestamp(self):
         with self.assertRaises(ValueError):
@@ -498,7 +549,9 @@ class TestParseTimestamps(unittest.TestC
         mock_tzinfo.side_effect = OSError()
         mock_get_tzinfo_options = mock.MagicMock(return_value=(mock_tzinfo,))
 
-        with mock.patch('botocore.utils.get_tzinfo_options', mock_get_tzinfo_options):
+        with mock.patch(
+            'botocore.utils.get_tzinfo_options', mock_get_tzinfo_options
+        ):
             with self.assertRaises(RuntimeError):
                 parse_timestamp(0)
 
@@ -542,13 +595,15 @@ class TestParseTimestamps(unittest.TestC
 class TestDatetime2Timestamp(unittest.TestCase):
     def test_datetime2timestamp_naive(self):
         self.assertEqual(
-            datetime2timestamp(datetime.datetime(1970, 1, 2)), 86400)
+            datetime2timestamp(datetime.datetime(1970, 1, 2)), 86400
+        )
 
     def test_datetime2timestamp_aware(self):
         tzinfo = tzoffset("BRST", -10800)
         self.assertEqual(
             datetime2timestamp(datetime.datetime(1970, 1, 2, tzinfo=tzinfo)),
-            97200)
+            97200,
+        )
 
 
 class TestParseToUTCDatetime(unittest.TestCase):
@@ -577,8 +632,8 @@ class TestParseToUTCDatetime(unittest.Te
     def test_handles_full_iso_8601(self):
         expected = datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc())
         self.assertEqual(
-            parse_to_aware_datetime('1970-01-01T00:00:00Z'),
-            expected)
+            parse_to_aware_datetime('1970-01-01T00:00:00Z'), expected
+        )
 
     def test_year_only_iso_8601(self):
         expected = datetime.datetime(1970, 1, 1, 0, 0, 0, tzinfo=tzutc())
@@ -587,7 +642,7 @@ class TestParseToUTCDatetime(unittest.Te
 
 class TestCachedProperty(unittest.TestCase):
     def test_cached_property_same_value(self):
-        class CacheMe(object):
+        class CacheMe:
             @CachedProperty
             def foo(self):
                 return 'foo'
@@ -601,7 +656,7 @@ class TestCachedProperty(unittest.TestCa
         # a property that returns a new value each time,
         # but this is done to demonstrate the caching behavior.
 
-        class NoIncrement(object):
+        class NoIncrement:
             def __init__(self):
                 self.counter = 0
 
@@ -622,30 +677,22 @@ class TestArgumentGenerator(unittest.Tes
         self.arg_generator = ArgumentGenerator()
 
     def assert_skeleton_from_model_is(self, model, generated_skeleton):
-        shape = DenormalizedStructureBuilder().with_members(
-            model).build_model()
+        shape = (
+            DenormalizedStructureBuilder().with_members(model).build_model()
+        )
         actual = self.arg_generator.generate_skeleton(shape)
         self.assertEqual(actual, generated_skeleton)
 
     def test_generate_string(self):
         self.assert_skeleton_from_model_is(
-            model={
-                'A': {'type': 'string'}
-            },
-            generated_skeleton={
-                'A': ''
-            }
+            model={'A': {'type': 'string'}}, generated_skeleton={'A': ''}
         )
 
     def test_generate_string_enum(self):
         enum_values = ['A', 'B', 'C']
         self.assert_skeleton_from_model_is(
-            model={
-                'A': {'type': 'string', 'enum': enum_values}
-            },
-            generated_skeleton={
-                'A': enum_values[0]
-            }
+            model={'A': {'type': 'string', 'enum': enum_values}},
+            generated_skeleton={'A': enum_values[0]},
         )
 
     def test_generate_scalars(self):
@@ -665,7 +712,7 @@ class TestArgumentGenerator(unittest.Tes
                 'D': True,
                 'E': datetime.datetime(1970, 1, 1, 0, 0, 0),
                 'F': 0.0,
-            }
+            },
         )
 
     def test_will_use_member_names_for_string_values(self):
@@ -682,7 +729,7 @@ class TestArgumentGenerator(unittest.Tes
                 'B': 0,
                 'C': 0.0,
                 'D': True,
-            }
+            },
         )
 
     def test_will_use_member_names_for_string_values_of_list(self):
@@ -691,21 +738,23 @@ class TestArgumentGenerator(unittest.Tes
         # because we can't really control the name of strings shapes
         # being used in the DenormalizedStructureBuilder. We can only
         # control the name of structures and list shapes.
-        shape_map = ShapeResolver({
-            'InputShape': {
-                'type': 'structure',
-                'members': {
-                    'StringList': {'shape': 'StringList'},
-                }
-            },
-            'StringList': {
-                'type': 'list',
-                'member': {'shape': 'StringType'},
-            },
-            'StringType': {
-                'type': 'string',
+        shape_map = ShapeResolver(
+            {
+                'InputShape': {
+                    'type': 'structure',
+                    'members': {
+                        'StringList': {'shape': 'StringList'},
+                    },
+                },
+                'StringList': {
+                    'type': 'list',
+                    'member': {'shape': 'StringType'},
+                },
+                'StringType': {
+                    'type': 'string',
+                },
             }
-        })
+        )
         shape = shape_map.get_shape_by_name('InputShape')
         actual = self.arg_generator.generate_skeleton(shape)
 
@@ -719,27 +768,20 @@ class TestArgumentGenerator(unittest.Tes
                     'type': 'structure',
                     'members': {
                         'B': {'type': 'string'},
-                    }
+                    },
                 }
             },
-            generated_skeleton={
-                'A': {'B': ''}
-            }
+            generated_skeleton={'A': {'B': ''}},
         )
 
     def test_generate_scalar_list(self):
         self.assert_skeleton_from_model_is(
             model={
-                'A': {
-                    'type': 'list',
-                    'member': {
-                        'type': 'string'
-                    }
-                },
+                'A': {'type': 'list', 'member': {'type': 'string'}},
             },
             generated_skeleton={
                 'A': [''],
-            }
+            },
         )
 
     def test_generate_scalar_map(self):
@@ -748,14 +790,14 @@ class TestArgumentGenerator(unittest.Tes
                 'A': {
                     'type': 'map',
                     'key': {'type': 'string'},
-                    'value':  {'type': 'string'},
+                    'value': {'type': 'string'},
                 }
             },
             generated_skeleton={
                 'A': {
                     'KeyName': '',
                 }
-            }
+            },
         )
 
     def test_handles_recursive_shapes(self):
@@ -763,25 +805,27 @@ class TestArgumentGenerator(unittest.Tes
         # because we can't use a DenormalizedStructureBuilder,
         # we need a normalized model to represent recursive
         # shapes.
-        shape_map = ShapeResolver({
-            'InputShape': {
-                'type': 'structure',
-                'members': {
-                    'A': {'shape': 'RecursiveStruct'},
-                    'B': {'shape': 'StringType'},
-                }
-            },
-            'RecursiveStruct': {
-                'type': 'structure',
-                'members': {
-                    'C': {'shape': 'RecursiveStruct'},
-                    'D': {'shape': 'StringType'},
-                }
-            },
-            'StringType': {
-                'type': 'string',
+        shape_map = ShapeResolver(
+            {
+                'InputShape': {
+                    'type': 'structure',
+                    'members': {
+                        'A': {'shape': 'RecursiveStruct'},
+                        'B': {'shape': 'StringType'},
+                    },
+                },
+                'RecursiveStruct': {
+                    'type': 'structure',
+                    'members': {
+                        'C': {'shape': 'RecursiveStruct'},
+                        'D': {'shape': 'StringType'},
+                    },
+                },
+                'StringType': {
+                    'type': 'string',
+                },
             }
-        })
+        )
         shape = shape_map.get_shape_by_name('InputShape')
         actual = self.arg_generator.generate_skeleton(shape)
         expected = {
@@ -790,9 +834,9 @@ class TestArgumentGenerator(unittest.Tes
                     # For recurisve shapes, we'll just show
                     # an empty dict.
                 },
-                'D': ''
+                'D': '',
             },
-            'B': ''
+            'B': '',
         }
         self.assertEqual(actual, expected)
 
@@ -801,18 +845,23 @@ class TestChecksums(unittest.TestCase):
     def test_empty_hash(self):
         self.assertEqual(
             calculate_sha256(io.BytesIO(b''), as_hex=True),
-            'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
+            'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
+        )
 
     def test_as_hex(self):
         self.assertEqual(
             calculate_sha256(io.BytesIO(b'hello world'), as_hex=True),
-            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9')
+            'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9',
+        )
 
     def test_as_binary(self):
         self.assertEqual(
             calculate_sha256(io.BytesIO(b'hello world'), as_hex=False),
-            (b"\xb9M'\xb9\x93M>\x08\xa5.R\xd7\xda}\xab\xfa\xc4\x84\xef"
-             b"\xe3zS\x80\xee\x90\x88\xf7\xac\xe2\xef\xcd\xe9"))
+            (
+                b"\xb9M'\xb9\x93M>\x08\xa5.R\xd7\xda}\xab\xfa\xc4\x84\xef"
+                b"\xe3zS\x80\xee\x90\x88\xf7\xac\xe2\xef\xcd\xe9"
+            ),
+        )
 
 
 class TestTreeHash(unittest.TestCase):
@@ -823,32 +872,37 @@ class TestTreeHash(unittest.TestCase):
     def test_empty_tree_hash(self):
         self.assertEqual(
             calculate_tree_hash(io.BytesIO(b'')),
-            'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
+            'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
+        )
 
     def test_tree_hash_less_than_one_mb(self):
         one_k = io.BytesIO(b'a' * 1024)
         self.assertEqual(
             calculate_tree_hash(one_k),
-            '2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a')
+            '2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a',
+        )
 
     def test_tree_hash_exactly_one_mb(self):
         one_meg_bytestring = b'a' * (1 * 1024 * 1024)
         one_meg = io.BytesIO(one_meg_bytestring)
         self.assertEqual(
             calculate_tree_hash(one_meg),
-            '9bc1b2a288b26af7257a36277ae3816a7d4f16e89c1e7e77d0a5c48bad62b360')
+            '9bc1b2a288b26af7257a36277ae3816a7d4f16e89c1e7e77d0a5c48bad62b360',
+        )
 
     def test_tree_hash_multiple_of_one_mb(self):
         four_mb = io.BytesIO(b'a' * (4 * 1024 * 1024))
         self.assertEqual(
             calculate_tree_hash(four_mb),
-            '9491cb2ed1d4e7cd53215f4017c23ec4ad21d7050a1e6bb636c4f67e8cddb844')
+            '9491cb2ed1d4e7cd53215f4017c23ec4ad21d7050a1e6bb636c4f67e8cddb844',
+        )
 
     def test_tree_hash_offset_of_one_mb_multiple(self):
         offset_four_mb = io.BytesIO(b'a' * (4 * 1024 * 1024) + b'a' * 20)
         self.assertEqual(
             calculate_tree_hash(offset_four_mb),
-            '12f3cbd6101b981cde074039f6f728071da8879d6f632de8afc7cdf00661b08f')
+            '12f3cbd6101b981cde074039f6f728071da8879d6f632de8afc7cdf00661b08f',
+        )
 
 
 class TestIsValidEndpointURL(unittest.TestCase):
@@ -860,7 +914,8 @@ class TestIsValidEndpointURL(unittest.Te
 
     def test_path_component_ignored(self):
         self.assertTrue(
-            is_valid_endpoint_url('https://foo.bar.com/other/path/'))
+            is_valid_endpoint_url('https://foo.bar.com/other/path/')
+        )
 
     def test_can_have_port(self):
         self.assertTrue(is_valid_endpoint_url('https://foo.bar.com:12345/'))
@@ -891,34 +946,44 @@ class TestIsValidEndpointURL(unittest.Te
 class TestFixS3Host(unittest.TestCase):
     def test_fix_s3_host_initial(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         fix_s3_host(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
-        self.assertEqual(request.url,
-                         'https://bucket.s3-us-west-2.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.s3-us-west-2.amazonaws.com/key.txt'
+        )
         self.assertEqual(request.auth_path, '/bucket/key.txt')
 
     def test_fix_s3_host_only_applied_once(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://s3.us-west-2.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://s3.us-west-2.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         fix_s3_host(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
         # Calling the handler again should not affect the end result:
         fix_s3_host(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
-        self.assertEqual(request.url,
-                         'https://bucket.s3.us-west-2.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.s3.us-west-2.amazonaws.com/key.txt'
+        )
         # This was a bug previously.  We want to make sure that
         # calling fix_s3_host() again does not alter the auth_path.
         # Otherwise we'll get signature errors.
@@ -927,106 +992,134 @@ class TestFixS3Host(unittest.TestCase):
     def test_dns_style_not_used_for_get_bucket_location(self):
         original_url = 'https://s3-us-west-2.amazonaws.com/bucket?location'
         request = AWSRequest(
-            method='GET', headers={},
+            method='GET',
+            headers={},
             url=original_url,
         )
         signature_version = 's3'
         region_name = 'us-west-2'
         fix_s3_host(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
         # The request url should not have been modified because this is
         # a request for GetBucketLocation.
         self.assertEqual(request.url, original_url)
 
     def test_can_provide_default_endpoint_url(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         fix_s3_host(
-            request=request, signature_version=signature_version,
+            request=request,
+            signature_version=signature_version,
             region_name=region_name,
-            default_endpoint_url='foo.s3.amazonaws.com')
-        self.assertEqual(request.url,
-                         'https://bucket.foo.s3.amazonaws.com/key.txt')
+            default_endpoint_url='foo.s3.amazonaws.com',
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.foo.s3.amazonaws.com/key.txt'
+        )
 
     def test_no_endpoint_url_uses_request_url(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://s3-us-west-2.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         fix_s3_host(
-            request=request, signature_version=signature_version,
+            request=request,
+            signature_version=signature_version,
             region_name=region_name,
             # A value of None means use the url in the current request.
             default_endpoint_url=None,
         )
-        self.assertEqual(request.url,
-                         'https://bucket.s3-us-west-2.amazonaws.com/key.txt')
+        self.assertEqual(
+            request.url, 'https://bucket.s3-us-west-2.amazonaws.com/key.txt'
+        )
 
 
 class TestSwitchToVirtualHostStyle(unittest.TestCase):
     def test_switch_to_virtual_host_style(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://foo.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
-        self.assertEqual(request.url,
-                         'https://bucket.foo.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.foo.amazonaws.com/key.txt'
+        )
         self.assertEqual(request.auth_path, '/bucket/key.txt')
 
     def test_uses_default_endpoint(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://foo.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name, default_endpoint_url='s3.amazonaws.com')
-        self.assertEqual(request.url,
-                         'https://bucket.s3.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+            default_endpoint_url='s3.amazonaws.com',
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.s3.amazonaws.com/key.txt'
+        )
         self.assertEqual(request.auth_path, '/bucket/key.txt')
 
     def test_throws_invalid_dns_name_error(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/mybucket.foo/key.txt'
+            method='PUT',
+            headers={},
+            url='https://foo.amazonaws.com/mybucket.foo/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         with self.assertRaises(InvalidDNSNameError):
             switch_to_virtual_host_style(
-                request=request, signature_version=signature_version,
-                region_name=region_name)
+                request=request,
+                signature_version=signature_version,
+                region_name=region_name,
+            )
 
     def test_fix_s3_host_only_applied_once(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://foo.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
         # Calling the handler again should not affect the end result:
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
-        self.assertEqual(request.url,
-                         'https://bucket.foo.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.foo.amazonaws.com/key.txt'
+        )
         # This was a bug previously.  We want to make sure that
         # calling fix_s3_host() again does not alter the auth_path.
         # Otherwise we'll get signature errors.
@@ -1034,28 +1127,31 @@ class TestSwitchToVirtualHostStyle(unitt
 
     def test_virtual_host_style_for_make_bucket(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/bucket'
+            method='PUT', headers={}, url='https://foo.amazonaws.com/bucket'
         )
         region_name = 'us-west-2'
         signature_version = 's3'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
-        self.assertEqual(request.url,
-                         'https://bucket.foo.amazonaws.com/')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
+        self.assertEqual(request.url, 'https://bucket.foo.amazonaws.com/')
 
     def test_virtual_host_style_not_used_for_get_bucket_location(self):
         original_url = 'https://foo.amazonaws.com/bucket?location'
         request = AWSRequest(
-            method='GET', headers={},
+            method='GET',
+            headers={},
             url=original_url,
         )
         signature_version = 's3'
         region_name = 'us-west-2'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
         # The request url should not have been modified because this is
         # a request for GetBucketLocation.
         self.assertEqual(request.url, original_url)
@@ -1063,30 +1159,38 @@ class TestSwitchToVirtualHostStyle(unitt
     def test_virtual_host_style_not_used_for_list_buckets(self):
         original_url = 'https://foo.amazonaws.com/'
         request = AWSRequest(
-            method='GET', headers={},
+            method='GET',
+            headers={},
             url=original_url,
         )
         signature_version = 's3'
         region_name = 'us-west-2'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name)
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+        )
         # The request url should not have been modified because this is
         # a request for GetBucketLocation.
         self.assertEqual(request.url, original_url)
 
     def test_is_unaffected_by_sigv4(self):
         request = AWSRequest(
-            method='PUT', headers={},
-            url='https://foo.amazonaws.com/bucket/key.txt'
+            method='PUT',
+            headers={},
+            url='https://foo.amazonaws.com/bucket/key.txt',
         )
         region_name = 'us-west-2'
         signature_version = 's3v4'
         switch_to_virtual_host_style(
-            request=request, signature_version=signature_version,
-            region_name=region_name, default_endpoint_url='s3.amazonaws.com')
-        self.assertEqual(request.url,
-                         'https://bucket.s3.amazonaws.com/key.txt')
+            request=request,
+            signature_version=signature_version,
+            region_name=region_name,
+            default_endpoint_url='s3.amazonaws.com',
+        )
+        self.assertEqual(
+            request.url, 'https://bucket.s3.amazonaws.com/key.txt'
+        )
 
 
 def test_chunked_encoding_used_for_stream_like_object():
@@ -1110,7 +1214,7 @@ def test_chunked_encoding_used_for_strea
 
 
 class TestInstanceCache(unittest.TestCase):
-    class DummyClass(object):
+    class DummyClass:
         def __init__(self, cache):
             self._instance_cache = cache
 
@@ -1155,7 +1259,8 @@ class TestInstanceCache(unittest.TestCas
 class TestMergeDicts(unittest.TestCase):
     def test_merge_dicts_overrides(self):
         first = {
-            'foo': {'bar': {'baz': {'one': 'ORIGINAL', 'two': 'ORIGINAL'}}}}
+            'foo': {'bar': {'baz': {'one': 'ORIGINAL', 'two': 'ORIGINAL'}}}
+        }
         second = {'foo': {'bar': {'baz': {'one': 'UPDATE'}}}}
 
         merge_dicts(first, second)
@@ -1166,7 +1271,8 @@ class TestMergeDicts(unittest.TestCase):
 
     def test_merge_dicts_new_keys(self):
         first = {
-            'foo': {'bar': {'baz': {'one': 'ORIGINAL', 'two': 'ORIGINAL'}}}}
+            'foo': {'bar': {'baz': {'one': 'ORIGINAL', 'two': 'ORIGINAL'}}}
+        }
         second = {'foo': {'bar': {'baz': {'three': 'UPDATE'}}}}
 
         merge_dicts(first, second)
@@ -1180,8 +1286,10 @@ class TestMergeDicts(unittest.TestCase):
         self.assertEqual(first, {'foo': {'bar': 'baz'}})
 
     def test_more_than_one_sub_dict(self):
-        first = {'one': {'inner': 'ORIGINAL', 'inner2': 'ORIGINAL'},
-                 'two': {'inner': 'ORIGINAL', 'inner2': 'ORIGINAL'}}
+        first = {
+            'one': {'inner': 'ORIGINAL', 'inner2': 'ORIGINAL'},
+            'two': {'inner': 'ORIGINAL', 'inner2': 'ORIGINAL'},
+        }
         second = {'one': {'inner': 'UPDATE'}, 'two': {'inner': 'UPDATE'}}
 
         merge_dicts(first, second)
@@ -1203,29 +1311,25 @@ class TestMergeDicts(unittest.TestCase):
         dict1 = {'Foo': ['old_foo_value']}
         dict2 = {'Foo': ['new_foo_value']}
         merge_dicts(dict1, dict2)
-        self.assertEqual(
-            dict1, {'Foo': ['new_foo_value']})
+        self.assertEqual(dict1, {'Foo': ['new_foo_value']})
 
     def test_list_values_append(self):
         dict1 = {'Foo': ['old_foo_value']}
         dict2 = {'Foo': ['new_foo_value']}
         merge_dicts(dict1, dict2, append_lists=True)
-        self.assertEqual(
-            dict1, {'Foo': ['old_foo_value', 'new_foo_value']})
+        self.assertEqual(dict1, {'Foo': ['old_foo_value', 'new_foo_value']})
 
     def test_list_values_mismatching_types(self):
         dict1 = {'Foo': 'old_foo_value'}
         dict2 = {'Foo': ['new_foo_value']}
         merge_dicts(dict1, dict2, append_lists=True)
-        self.assertEqual(
-            dict1, {'Foo': ['new_foo_value']})
+        self.assertEqual(dict1, {'Foo': ['new_foo_value']})
 
     def test_list_values_missing_key(self):
         dict1 = {}
         dict2 = {'Foo': ['foo_value']}
         merge_dicts(dict1, dict2, append_lists=True)
-        self.assertEqual(
-            dict1, {'Foo': ['foo_value']})
+        self.assertEqual(dict1, {'Foo': ['foo_value']})
 
 
 class TestLowercaseDict(unittest.TestCase):
@@ -1263,49 +1367,48 @@ class TestGetServiceModuleName(unittest.
                 'apiVersion': '2014-01-01',
                 'endpointPrefix': 'myservice',
                 'signatureVersion': 'v4',
-                'protocol': 'query'
+                'protocol': 'query',
             },
             'operations': {},
             'shapes': {},
         }
         self.service_model = ServiceModel(
-            self.service_description, 'myservice')
+            self.service_description, 'myservice'
+        )
 
     def test_default(self):
         self.assertEqual(
-            get_service_module_name(self.service_model),
-            'MyService'
+            get_service_module_name(self.service_model), 'MyService'
         )
 
     def test_client_name_with_amazon(self):
         self.service_description['metadata']['serviceFullName'] = (
-            'Amazon MyService')
+            'Amazon MyService'
+        )
         self.assertEqual(
-            get_service_module_name(self.service_model),
-            'MyService'
+            get_service_module_name(self.service_model), 'MyService'
         )
 
     def test_client_name_using_abreviation(self):
         self.service_description['metadata']['serviceAbbreviation'] = (
-            'Abbreviation')
-        self.assertEqual(
-            get_service_module_name(self.service_model),
             'Abbreviation'
         )
+        self.assertEqual(
+            get_service_module_name(self.service_model), 'Abbreviation'
+        )
 
     def test_client_name_with_non_alphabet_characters(self):
         self.service_description['metadata']['serviceFullName'] = (
-            'Amazon My-Service')
+            'Amazon My-Service'
+        )
         self.assertEqual(
-            get_service_module_name(self.service_model),
-            'MyService'
+            get_service_module_name(self.service_model), 'MyService'
         )
 
     def test_client_name_with_no_full_name_or_abbreviation(self):
         del self.service_description['metadata']['serviceFullName']
         self.assertEqual(
-            get_service_module_name(self.service_model),
-            'myservice'
+            get_service_module_name(self.service_model), 'myservice'
         )
 
 
@@ -1316,11 +1419,14 @@ class TestPercentEncodeSequence(unittest
     def test_percent_encode_special_chars(self):
         self.assertEqual(
             percent_encode_sequence({'k1': 'with spaces++/'}),
-            'k1=with%20spaces%2B%2B%2F')
+            'k1=with%20spaces%2B%2B%2F',
+        )
 
     def test_percent_encode_string_string_tuples(self):
-        self.assertEqual(percent_encode_sequence([('k1', 'v1'), ('k2', 'v2')]),
-                         'k1=v1&k2=v2')
+        self.assertEqual(
+            percent_encode_sequence([('k1', 'v1'), ('k2', 'v2')]),
+            'k1=v1&k2=v2',
+        )
 
     def test_percent_encode_dict_single_pair(self):
         self.assertEqual(percent_encode_sequence({'k1': 'v1'}), 'k1=v1')
@@ -1328,47 +1434,53 @@ class TestPercentEncodeSequence(unittest
     def test_percent_encode_dict_string_string(self):
         self.assertEqual(
             percent_encode_sequence(OrderedDict([('k1', 'v1'), ('k2', 'v2')])),
-                                    'k1=v1&k2=v2')
+            'k1=v1&k2=v2',
+        )
 
     def test_percent_encode_single_list_of_values(self):
-        self.assertEqual(percent_encode_sequence({'k1': ['a', 'b', 'c']}),
-                         'k1=a&k1=b&k1=c')
+        self.assertEqual(
+            percent_encode_sequence({'k1': ['a', 'b', 'c']}), 'k1=a&k1=b&k1=c'
+        )
 
     def test_percent_encode_list_values_of_string(self):
         self.assertEqual(
             percent_encode_sequence(
-                OrderedDict([('k1', ['a', 'list']),
-                             ('k2', ['another', 'list'])])),
-            'k1=a&k1=list&k2=another&k2=list')
+                OrderedDict(
+                    [('k1', ['a', 'list']), ('k2', ['another', 'list'])]
+                )
+            ),
+            'k1=a&k1=list&k2=another&k2=list',
+        )
+
 
 class TestPercentEncode(unittest.TestCase):
     def test_percent_encode_obj(self):
         self.assertEqual(percent_encode(1), '1')
 
     def test_percent_encode_text(self):
-        self.assertEqual(percent_encode(u''), '')
-        self.assertEqual(percent_encode(u'a'), 'a')
-        self.assertEqual(percent_encode(u'\u0000'), '%00')
+        self.assertEqual(percent_encode(''), '')
+        self.assertEqual(percent_encode('a'), 'a')
+        self.assertEqual(percent_encode('\u0000'), '%00')
         # Codepoint > 0x7f
-        self.assertEqual(percent_encode(u'\u2603'), '%E2%98%83')
+        self.assertEqual(percent_encode('\u2603'), '%E2%98%83')
         # Codepoint > 0xffff
-        self.assertEqual(percent_encode(u'\U0001f32e'), '%F0%9F%8C%AE')
+        self.assertEqual(percent_encode('\U0001f32e'), '%F0%9F%8C%AE')
 
     def test_percent_encode_bytes(self):
         self.assertEqual(percent_encode(b''), '')
-        self.assertEqual(percent_encode(b'a'), u'a')
-        self.assertEqual(percent_encode(b'\x00'), u'%00')
+        self.assertEqual(percent_encode(b'a'), 'a')
+        self.assertEqual(percent_encode(b'\x00'), '%00')
         # UTF-8 Snowman
         self.assertEqual(percent_encode(b'\xe2\x98\x83'), '%E2%98%83')
         # Arbitrary bytes (not valid UTF-8).
         self.assertEqual(percent_encode(b'\x80\x00'), '%80%00')
 
+
 class TestSwitchHostS3Accelerate(unittest.TestCase):
     def setUp(self):
         self.original_url = 'https://s3.amazonaws.com/foo/key.txt'
         self.request = AWSRequest(
-            method='PUT', headers={},
-            url=self.original_url
+            method='PUT', headers={}, url=self.original_url
         )
         self.client_config = Config()
         self.request.context['client_config'] = self.client_config
@@ -1376,17 +1488,13 @@ class TestSwitchHostS3Accelerate(unittes
     def test_switch_host(self):
         switch_host_s3_accelerate(self.request, 'PutObject')
         self.assertEqual(
-            self.request.url,
-            'https://s3-accelerate.amazonaws.com/foo/key.txt')
+            self.request.url, 'https://s3-accelerate.amazonaws.com/foo/key.txt'
+        )
 
     def test_do_not_switch_black_listed_operations(self):
         # It should not get switched for ListBuckets, DeleteBucket, and
         # CreateBucket
-        blacklist_ops = [
-            'ListBuckets',
-            'DeleteBucket',
-            'CreateBucket'
-        ]
+        blacklist_ops = ['ListBuckets', 'DeleteBucket', 'CreateBucket']
         for op_name in blacklist_ops:
             switch_host_s3_accelerate(self.request, op_name)
             self.assertEqual(self.request.url, self.original_url)
@@ -1395,21 +1503,21 @@ class TestSwitchHostS3Accelerate(unittes
         self.request.url = 'http://s3.amazonaws.com/foo/key.txt'
         switch_host_s3_accelerate(self.request, 'PutObject')
         self.assertEqual(
-            self.request.url,
-            'http://s3-accelerate.amazonaws.com/foo/key.txt')
+            self.request.url, 'http://s3-accelerate.amazonaws.com/foo/key.txt'
+        )
 
     def test_uses_dualstack(self):
         self.client_config.s3 = {'use_dualstack_endpoint': True}
         self.original_url = 'https://s3.dualstack.amazonaws.com/foo/key.txt'
         self.request = AWSRequest(
-            method='PUT', headers={},
-            url=self.original_url
+            method='PUT', headers={}, url=self.original_url
         )
         self.request.context['client_config'] = self.client_config
         switch_host_s3_accelerate(self.request, 'PutObject')
         self.assertEqual(
             self.request.url,
-            'https://s3-accelerate.dualstack.amazonaws.com/foo/key.txt')
+            'https://s3-accelerate.dualstack.amazonaws.com/foo/key.txt',
+        )
 
 
 class TestDeepMerge(unittest.TestCase):
@@ -1474,18 +1582,15 @@ class TestDeepMerge(unittest.TestCase):
     def test_deep_merge(self):
         a = {
             'first': {
-                'second': {
-                    'key': 'value',
-                    'otherkey': 'othervalue'
-                },
-                'key': 'value'
+                'second': {'key': 'value', 'otherkey': 'othervalue'},
+                'key': 'value',
             }
         }
         b = {
             'first': {
                 'second': {
                     'otherkey': 'newvalue',
-                    'yetanotherkey': 'yetanothervalue'
+                    'yetanotherkey': 'yetanothervalue',
                 }
             }
         }
@@ -1496,9 +1601,9 @@ class TestDeepMerge(unittest.TestCase):
                 'second': {
                     'key': 'value',
                     'otherkey': 'newvalue',
-                    'yetanotherkey': 'yetanothervalue'
+                    'yetanotherkey': 'yetanothervalue',
                 },
-                'key': 'value'
+                'key': 'value',
             }
         }
         self.assertEqual(a, expected)
@@ -1535,22 +1640,18 @@ class TestS3RegionRedirector(unittest.Te
         self.operation.name = 'foo'
 
     def set_client_response_headers(self, headers):
-        error_response = ClientError({
-            'Error': {
-                'Code': '',
-                'Message': ''
+        error_response = ClientError(
+            {
+                'Error': {'Code': '', 'Message': ''},
+                'ResponseMetadata': {'HTTPHeaders': headers},
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': headers
-            }
-        }, 'HeadBucket')
-        success_response = {
-            'ResponseMetadata': {
-                'HTTPHeaders': headers
-            }
-        }
+            'HeadBucket',
+        )
+        success_response = {'ResponseMetadata': {'HTTPHeaders': headers}}
         self.client.head_bucket.side_effect = [
-            error_response, success_response]
+            error_response,
+            success_response,
+        ]
 
     def test_set_request_url(self):
         old_url = 'https://us-west-2.amazonaws.com/foo'
@@ -1596,18 +1697,21 @@ class TestS3RegionRedirector(unittest.Te
                     'region': 'us-west-2',
                 },
             },
-            'url': 'https://us-west-2.amazonaws.com/foo'
+            'url': 'https://us-west-2.amazonaws.com/foo',
         }
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo'
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                },
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
+                },
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
-            }
-        })
+        )
 
         self.client._ruleset_resolver.construct_endpoint.return_value = (
             RuleSetEndpoint(
@@ -1626,13 +1730,15 @@ class TestS3RegionRedirector(unittest.Te
         )
 
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
 
         # The response needs to be 0 so that there is no retry delay
         self.assertEqual(redirect_response, 0)
 
         self.assertEqual(
-            request_dict['url'], 'https://eu-central-1.amazonaws.com/foo')
+            request_dict['url'], 'https://eu-central-1.amazonaws.com/foo'
+        )
 
         expected_signing_context = {
             'region': 'eu-central-1',
@@ -1650,26 +1756,31 @@ class TestS3RegionRedirector(unittest.Te
                 'signing': {'bucket': 'foo', 'region': 'us-west-2'},
                 's3_redirected': True,
             },
-            'url': 'https://us-west-2.amazonaws.com/foo'
+            'url': 'https://us-west-2.amazonaws.com/foo',
         }
-        response = (None, {
-            'Error': {
-                'Code': '400',
-                'Message': 'Bad Request',
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': '400',
+                    'Message': 'Bad Request',
+                },
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'us-west-2'}
+                },
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'us-west-2'}
-            }
-        })
+        )
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertIsNone(redirect_response)
 
     def test_does_not_redirect_unless_permanentredirect_recieved(self):
         request_dict = {}
         response = (None, {})
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertIsNone(redirect_response)
         self.assertEqual(request_dict, {})
 
@@ -1685,19 +1796,21 @@ class TestS3RegionRedirector(unittest.Te
                 'signing': {},
             },
         }
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo'
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                },
+                'ResponseMetadata': {'HTTPHeaders': {}},
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {}
-            }
-        })
+        )
 
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
 
         self.assertIsNone(redirect_response)
 
@@ -1713,24 +1826,26 @@ class TestS3RegionRedirector(unittest.Te
                 'signing': {},
             },
         }
-        response = (None, {
-            'Error': {
-                'Code': '301',
-                'Message': 'Moved Permanently'
+        response = (
+            None,
+            {
+                'Error': {'Code': '301', 'Message': 'Moved Permanently'},
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
+                },
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
-            }
-        })
+        )
 
         self.operation.name = 'HeadObject'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertEqual(redirect_response, 0)
 
         self.operation.name = 'ListObjects'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertIsNone(redirect_response)
 
     def test_redirects_400_head_bucket(self):
@@ -1745,49 +1860,61 @@ class TestS3RegionRedirector(unittest.Te
                 'signing': {},
             },
         }
-        response = (None, {
-            'Error': {'Code': '400', 'Message': 'Bad Request'},
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
-            }
-        })
+        response = (
+            None,
+            {
+                'Error': {'Code': '400', 'Message': 'Bad Request'},
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
+                },
+            },
+        )
 
         self.operation.name = 'HeadObject'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertEqual(redirect_response, 0)
 
         self.operation.name = 'ListObjects'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertIsNone(redirect_response)
 
     def test_does_not_redirect_400_head_bucket_no_region_header(self):
         # We should not redirect a 400 Head* if the region header is not
         # present as this will lead to infinitely calling HeadBucket.
-        request_dict = {'url': 'https://us-west-2.amazonaws.com/foo',
-                        'context': {'signing': {'bucket': 'foo'}}}
-        response = (None, {
-            'Error': {'Code': '400', 'Message': 'Bad Request'},
-            'ResponseMetadata': {
-                'HTTPHeaders': {}
-            }
-        })
+        request_dict = {
+            'url': 'https://us-west-2.amazonaws.com/foo',
+            'context': {'signing': {'bucket': 'foo'}},
+        }
+        response = (
+            None,
+            {
+                'Error': {'Code': '400', 'Message': 'Bad Request'},
+                'ResponseMetadata': {'HTTPHeaders': {}},
+            },
+        )
 
         self.operation.name = 'HeadBucket'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         head_bucket_calls = self.client.head_bucket.call_count
         self.assertIsNone(redirect_response)
         # We should not have made an additional head bucket call
         self.assertEqual(head_bucket_calls, 0)
 
     def test_does_not_redirect_if_None_response(self):
-        request_dict = {'url': 'https://us-west-2.amazonaws.com/foo',
-                        'context': {'signing': {'bucket': 'foo'}}}
+        request_dict = {
+            'url': 'https://us-west-2.amazonaws.com/foo',
+            'context': {'signing': {'bucket': 'foo'}},
+        }
         response = None
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertIsNone(redirect_response)
 
     def test_redirects_on_illegal_location_constraint_from_opt_in_region(self):
@@ -1819,7 +1946,7 @@ class TestS3RegionRedirector(unittest.Te
         self.assertEqual(redirect_response, 0)
 
     def test_no_redirect_on_illegal_location_constraint_from_bad_location_constraint(
-            self,
+        self,
     ):
         request_dict = {
             'url': 'https://us-west-2.amazonaws.com/foo',
@@ -1851,47 +1978,53 @@ class TestS3RegionRedirector(unittest.Te
         self.assertIsNone(redirect_response)
 
     def test_get_region_from_response(self):
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo'
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                },
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
+                },
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
-            }
-        })
+        )
         region = self.redirector.get_bucket_region('foo', response)
         self.assertEqual(region, 'eu-central-1')
 
     def test_get_region_from_response_error_body(self):
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo',
-                'Region': 'eu-central-1'
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                    'Region': 'eu-central-1',
+                },
+                'ResponseMetadata': {'HTTPHeaders': {}},
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {}
-            }
-        })
+        )
         region = self.redirector.get_bucket_region('foo', response)
         self.assertEqual(region, 'eu-central-1')
 
     def test_get_region_from_head_bucket_error(self):
         self.set_client_response_headers(
-            {'x-amz-bucket-region': 'eu-central-1'})
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo',
+            {'x-amz-bucket-region': 'eu-central-1'}
+        )
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                },
+                'ResponseMetadata': {'HTTPHeaders': {}},
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {}
-            }
-        })
+        )
         region = self.redirector.get_bucket_region('foo', response)
         self.assertEqual(region, 'eu-central-1')
 
@@ -1903,16 +2036,17 @@ class TestS3RegionRedirector(unittest.Te
         }
         self.client.head_bucket.side_effect = None
         self.client.head_bucket.return_value = success_response
-        response = (None, {
-            'Error': {
-                'Code': 'PermanentRedirect',
-                'Endpoint': 'foo.eu-central-1.amazonaws.com',
-                'Bucket': 'foo',
+        response = (
+            None,
+            {
+                'Error': {
+                    'Code': 'PermanentRedirect',
+                    'Endpoint': 'foo.eu-central-1.amazonaws.com',
+                    'Bucket': 'foo',
+                },
+                'ResponseMetadata': {'HTTPHeaders': {}},
             },
-            'ResponseMetadata': {
-                'HTTPHeaders': {}
-            }
-        })
+        )
         region = self.redirector.get_bucket_region('foo', response)
         self.assertEqual(region, 'eu-central-1')
 
@@ -1961,16 +2095,20 @@ class TestS3RegionRedirector(unittest.Te
                 }
             },
         }
-        response = (None, {
-            'Error': {'Code': '400', 'Message': 'Bad Request'},
-            'ResponseMetadata': {
-                'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
-            }
-        })
+        response = (
+            None,
+            {
+                'Error': {'Code': '400', 'Message': 'Bad Request'},
+                'ResponseMetadata': {
+                    'HTTPHeaders': {'x-amz-bucket-region': 'eu-central-1'}
+                },
+            },
+        )
 
         self.operation.name = 'HeadObject'
         redirect_response = self.redirector.redirect_from_error(
-            request_dict, response, self.operation)
+            request_dict, response, self.operation
+        )
         self.assertEqual(redirect_response, None)
 
 
@@ -1988,7 +2126,7 @@ class TestArnParser(unittest.TestCase):
                 'region': 'us-west-2',
                 'account': '1023456789012',
                 'resource': 'myresource',
-            }
+            },
         )
 
     def test_parse_invalid_arn(self):
@@ -2005,7 +2143,7 @@ class TestArnParser(unittest.TestCase):
                 'region': 'us-west-2',
                 'account': '1023456789012',
                 'resource': 'bucket_name:mybucket',
-            }
+            },
         )
 
     def test_parse_arn_with_empty_elements(self):
@@ -2018,7 +2156,7 @@ class TestArnParser(unittest.TestCase):
                 'region': '',
                 'account': '',
                 'resource': 'mybucket',
-            }
+            },
         )
 
 
@@ -2032,7 +2170,8 @@ class TestS3ArnParamHandler(unittest.Tes
         event_emitter = mock.Mock()
         self.arn_handler.register(event_emitter)
         event_emitter.register.assert_called_with(
-            'before-parameter-build.s3', self.arn_handler.handle_arn)
+            'before-parameter-build.s3', self.arn_handler.handle_arn
+        )
 
     def test_accesspoint_arn(self):
         params = {
@@ -2051,7 +2190,7 @@ class TestS3ArnParamHandler(unittest.Tes
                     'partition': 'aws',
                     'service': 's3',
                 }
-            }
+            },
         )
 
     def test_accesspoint_arn_with_colon(self):
@@ -2071,7 +2210,7 @@ class TestS3ArnParamHandler(unittest.Tes
                     'partition': 'aws',
                     'service': 's3',
                 }
-            }
+            },
         )
 
     def test_errors_for_non_accesspoint_arn(self):
@@ -2103,7 +2242,7 @@ class TestS3ArnParamHandler(unittest.Tes
                     'partition': 'aws',
                     'service': 's3-outposts',
                 }
-            }
+            },
         )
 
     def test_outpost_arn_with_slash(self):
@@ -2127,7 +2266,7 @@ class TestS3ArnParamHandler(unittest.Tes
                     'partition': 'aws',
                     'service': 's3-outposts',
                 }
-            }
+            },
         )
 
     def test_outpost_arn_errors_for_missing_fields(self):
@@ -2190,22 +2329,25 @@ class TestS3EndpointSetter(unittest.Test
         setter_kwargs.update(kwargs)
         return S3EndpointSetter(**setter_kwargs)
 
-    def get_s3_request(self, bucket=None, key=None, scheme='https://',
-                       querystring=None):
+    def get_s3_request(
+        self, bucket=None, key=None, scheme='https://', querystring=None
+    ):
         url = scheme + 's3.us-west-2.amazonaws.com/'
         if bucket:
             url += bucket
         if key:
-            url += '/%s' % key
+            url += f'/{key}'
         if querystring:
-            url += '?%s' % querystring
+            url += f'?{querystring}'
         return AWSRequest(method='GET', headers={}, url=url)
 
     def get_s3_outpost_request(self, **s3_request_kwargs):
         request = self.get_s3_request(
-            self.accesspoint_name, **s3_request_kwargs)
+            self.accesspoint_name, **s3_request_kwargs
+        )
         accesspoint_context = self.get_s3_accesspoint_context(
-            name=self.accesspoint_name, outpost_name=self.outpost_name)
+            name=self.accesspoint_name, outpost_name=self.outpost_name
+        )
         request.context['s3_accesspoint'] = accesspoint_context
         return request
 
@@ -2220,7 +2362,8 @@ class TestS3EndpointSetter(unittest.Test
         request = self.get_s3_request(accesspoint_name, **s3_request_kwargs)
         if accesspoint_context is None:
             accesspoint_context = self.get_s3_accesspoint_context(
-                name=accesspoint_name)
+                name=accesspoint_name
+            )
         request.context['s3_accesspoint'] = accesspoint_context
         return request
 
@@ -2248,64 +2391,51 @@ class TestS3EndpointSetter(unittest.Test
     def test_register(self):
         event_emitter = mock.Mock()
         self.endpoint_setter.register(event_emitter)
-        event_emitter.register.assert_has_calls([
-            mock.call('before-sign.s3', self.endpoint_setter.set_endpoint),
-            mock.call('choose-signer.s3', self.endpoint_setter.set_signer),
-            mock.call(
-                'before-call.s3.WriteGetObjectResponse',
-                self.endpoint_setter.update_endpoint_to_s3_object_lambda,
-            )
-        ])
+        event_emitter.register.assert_has_calls(
+            [
+                mock.call('before-sign.s3', self.endpoint_setter.set_endpoint),
+                mock.call('choose-signer.s3', self.endpoint_setter.set_signer),
+                mock.call(
+                    'before-call.s3.WriteGetObjectResponse',
+                    self.endpoint_setter.update_endpoint_to_s3_object_lambda,
+                ),
+            ]
+        )
 
     def test_outpost_endpoint(self):
         request = self.get_s3_outpost_request()
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.%s.s3-outposts.%s.amazonaws.com/' % (
-            self.accesspoint_name, self.account, self.outpost_name,
-            self.region_name,
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.{self.outpost_name}.s3-outposts.{self.region_name}.amazonaws.com/'
         self.assertEqual(request.url, expected_url)
 
     def test_outpost_endpoint_preserves_key_in_path(self):
         request = self.get_s3_outpost_request(key=self.key)
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.%s.s3-outposts.%s.amazonaws.com/%s' % (
-            self.accesspoint_name, self.account, self.outpost_name,
-            self.region_name, self.key
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.{self.outpost_name}.s3-outposts.{self.region_name}.amazonaws.com/{self.key}'
         self.assertEqual(request.url, expected_url)
 
     def test_accesspoint_endpoint(self):
         request = self.get_s3_accesspoint_request()
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.s3-accesspoint.%s.amazonaws.com/' % (
-            self.accesspoint_name, self.account, self.region_name
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.s3-accesspoint.{self.region_name}.amazonaws.com/'
         self.assertEqual(request.url, expected_url)
 
     def test_accesspoint_preserves_key_in_path(self):
         request = self.get_s3_accesspoint_request(key=self.key)
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.s3-accesspoint.%s.amazonaws.com/%s' % (
-            self.accesspoint_name, self.account, self.region_name,
-            self.key
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.s3-accesspoint.{self.region_name}.amazonaws.com/{self.key}'
         self.assertEqual(request.url, expected_url)
 
     def test_accesspoint_preserves_scheme(self):
         request = self.get_s3_accesspoint_request(scheme='http://')
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'http://%s-%s.s3-accesspoint.%s.amazonaws.com/' % (
-            self.accesspoint_name, self.account, self.region_name,
-        )
+        expected_url = f'http://{self.accesspoint_name}-{self.account}.s3-accesspoint.{self.region_name}.amazonaws.com/'
         self.assertEqual(request.url, expected_url)
 
     def test_accesspoint_preserves_query_string(self):
         request = self.get_s3_accesspoint_request(querystring='acl')
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.s3-accesspoint.%s.amazonaws.com/?acl' % (
-            self.accesspoint_name, self.account, self.region_name,
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.s3-accesspoint.{self.region_name}.amazonaws.com/?acl'
         self.assertEqual(request.url, expected_url)
 
     def test_uses_resolved_dns_suffix(self):
@@ -2314,29 +2444,27 @@ class TestS3EndpointSetter(unittest.Test
         }
         request = self.get_s3_accesspoint_request()
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.s3-accesspoint.%s.mysuffix.com/' % (
-            self.accesspoint_name, self.account, self.region_name,
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.s3-accesspoint.{self.region_name}.mysuffix.com/'
         self.assertEqual(request.url, expected_url)
 
     def test_uses_region_of_client_if_use_arn_disabled(self):
         client_region = 'client-region'
         self.endpoint_setter = self.get_endpoint_setter(
-            region=client_region, s3_config={'use_arn_region': False})
+            region=client_region, s3_config={'use_arn_region': False}
+        )
         request = self.get_s3_accesspoint_request()
         self.call_set_endpoint(self.endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.s3-accesspoint.%s.amazonaws.com/' % (
-            self.accesspoint_name, self.account, client_region,
-        )
+        expected_url = f'https://{self.accesspoint_name}-{self.account}.s3-accesspoint.{client_region}.amazonaws.com/'
         self.assertEqual(request.url, expected_url)
 
     def test_accesspoint_supports_custom_endpoint(self):
         endpoint_setter = self.get_endpoint_setter(
-            endpoint_url='https://custom.com')
+            endpoint_url='https://custom.com'
+        )
         request = self.get_s3_accesspoint_request()
         self.call_set_endpoint(endpoint_setter, request=request)
-        expected_url = 'https://%s-%s.custom.com/' % (
-            self.accesspoint_name, self.account,
+        expected_url = (
+            f'https://{self.accesspoint_name}-{self.account}.custom.com/'
         )
         self.assertEqual(request.url, expected_url)
 
@@ -2344,7 +2472,8 @@ class TestS3EndpointSetter(unittest.Test
         endpoint_setter = self.get_endpoint_setter(partition='aws-cn')
         accesspoint_context = self.get_s3_accesspoint_context(partition='aws')
         request = self.get_s3_accesspoint_request(
-            accesspoint_context=accesspoint_context)
+            accesspoint_context=accesspoint_context
+        )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.call_set_endpoint(endpoint_setter, request=request)
 
@@ -2354,47 +2483,52 @@ class TestS3EndpointSetter(unittest.Test
         )
         accesspoint_context = self.get_s3_accesspoint_context(partition='aws')
         request = self.get_s3_accesspoint_request(
-            accesspoint_context=accesspoint_context)
+            accesspoint_context=accesspoint_context
+        )
         with self.assertRaises(UnsupportedS3AccesspointConfigurationError):
             self.call_set_endpoint(endpoint_setter, request=request)
 
     def test_set_endpoint_for_auto(self):
         endpoint_setter = self.get_endpoint_setter(
-            s3_config={'addressing_style': 'auto'})
+            s3_config={'addressing_style': 'auto'}
+        )
         request = self.get_s3_request(self.bucket, self.key)
         self.call_set_endpoint(endpoint_setter, request)
-        expected_url = 'https://%s.s3.us-west-2.amazonaws.com/%s' % (
-            self.bucket, self.key
+        expected_url = (
+            f'https://{self.bucket}.s3.us-west-2.amazonaws.com/{self.key}'
         )
         self.assertEqual(request.url, expected_url)
 
     def test_set_endpoint_for_virtual(self):
         endpoint_setter = self.get_endpoint_setter(
-            s3_config={'addressing_style': 'virtual'})
+            s3_config={'addressing_style': 'virtual'}
+        )
         request = self.get_s3_request(self.bucket, self.key)
         self.call_set_endpoint(endpoint_setter, request)
-        expected_url = 'https://%s.s3.us-west-2.amazonaws.com/%s' % (
-            self.bucket, self.key
+        expected_url = (
+            f'https://{self.bucket}.s3.us-west-2.amazonaws.com/{self.key}'
         )
         self.assertEqual(request.url, expected_url)
 
     def test_set_endpoint_for_path(self):
         endpoint_setter = self.get_endpoint_setter(
-            s3_config={'addressing_style': 'path'})
+            s3_config={'addressing_style': 'path'}
+        )
         request = self.get_s3_request(self.bucket, self.key)
         self.call_set_endpoint(endpoint_setter, request)
-        expected_url = 'https://s3.us-west-2.amazonaws.com/%s/%s' % (
-            self.bucket, self.key
+        expected_url = (
+            f'https://s3.us-west-2.amazonaws.com/{self.bucket}/{self.key}'
         )
         self.assertEqual(request.url, expected_url)
 
     def test_set_endpoint_for_accelerate(self):
         endpoint_setter = self.get_endpoint_setter(
-            s3_config={'use_accelerate_endpoint': True})
+            s3_config={'use_accelerate_endpoint': True}
+        )
         request = self.get_s3_request(self.bucket, self.key)
         self.call_set_endpoint(endpoint_setter, request)
-        expected_url = 'https://%s.s3-accelerate.amazonaws.com/%s' % (
-            self.bucket, self.key
+        expected_url = (
+            f'https://{self.bucket}.s3-accelerate.amazonaws.com/{self.key}'
         )
         self.assertEqual(request.url, expected_url)
 
@@ -2425,7 +2559,8 @@ class TestContainerMetadataFetcher(unitt
                 http_response = response
             else:
                 http_response = self.fake_response(
-                    status_code=200, body=json.dumps(response).encode('utf-8'))
+                    status_code=200, body=json.dumps(response).encode('utf-8')
+                )
             http_responses.append(http_response)
         self.http.send.side_effect = http_responses
 
@@ -2460,16 +2595,15 @@ class TestContainerMetadataFetcher(unitt
         }
         self.set_http_responses_to({'foo': 'bar'})
         fetcher = self.create_fetcher()
-        response = fetcher.retrieve_full_uri(
-            'http://localhost', headers)
+        fetcher.retrieve_full_uri('http://localhost', headers)
         self.assert_request('GET', 'http://localhost', headers)
 
     def test_can_retrieve_uri(self):
-        json_body =  {
-            "AccessKeyId" : "a",
-            "SecretAccessKey" : "b",
-            "Token" : "c",
-            "Expiration" : "d"
+        json_body = {
+            "AccessKeyId": "a",
+            "SecretAccessKey": "b",
+            "Token": "c",
+            "Expiration": "d",
         }
         self.set_http_responses_to(json_body)
 
@@ -2483,10 +2617,10 @@ class TestContainerMetadataFetcher(unitt
 
     def test_can_retry_requests(self):
         success_response = {
-            "AccessKeyId" : "a",
-            "SecretAccessKey" : "b",
-            "Token" : "c",
-            "Expiration" : "d"
+            "AccessKeyId": "a",
+            "SecretAccessKey": "b",
+            "Token": "c",
+            "Expiration": "d",
         }
         self.set_http_responses_to(
             # First response is a connection error, should
@@ -2620,7 +2754,7 @@ class TestInstanceMetadataFetcher(unitte
             'secret_key': self._creds['SecretAccessKey'],
             'token': self._creds['Token'],
             'expiry_time': self._creds['Expiration'],
-            'role_name': self._role_name
+            'role_name': self._role_name,
         }
 
     def tearDown(self):
@@ -2631,7 +2765,7 @@ class TestInstanceMetadataFetcher(unitte
             url='http://169.254.169.254/',
             status_code=status_code,
             headers={},
-            raw=RawResponse(body)
+            raw=RawResponse(body),
         )
         self._imds_responses.append(response)
 
@@ -2646,8 +2780,9 @@ class TestInstanceMetadataFetcher(unitte
         self.add_imds_response(body=json.dumps(creds).encode('utf-8'))
 
     def add_get_token_imds_response(self, token, status_code=200):
-        self.add_imds_response(body=token.encode('utf-8'),
-                               status_code=status_code)
+        self.add_imds_response(
+            body=token.encode('utf-8'), status_code=status_code
+        )
 
     def add_metadata_token_not_supported_response(self):
         self.add_imds_response(b'', status_code=404)
@@ -2701,30 +2836,46 @@ class TestInstanceMetadataFetcher(unitte
         self.assertEqual(result, self._expected_creds)
 
     def test_ec2_metadata_endpoint_service_mode(self):
-        configs = [({'ec2_metadata_service_endpoint_mode': 'ipv6'},
-                    'http://[fd00:ec2::254]/'),
-                ({'ec2_metadata_service_endpoint_mode': 'ipv6'},
-                 'http://[fd00:ec2::254]/'),
-                ({'ec2_metadata_service_endpoint_mode': 'ipv4'},
-                 'http://169.254.169.254/'),
-                ({'ec2_metadata_service_endpoint_mode': 'foo'},
-                 'http://169.254.169.254/'),
-                ({'ec2_metadata_service_endpoint_mode': 'ipv6',
-                'ec2_metadata_service_endpoint': 'http://[fd00:ec2::010]/'},
-                'http://[fd00:ec2::010]/')]
+        configs = [
+            (
+                {'ec2_metadata_service_endpoint_mode': 'ipv6'},
+                'http://[fd00:ec2::254]/',
+            ),
+            (
+                {'ec2_metadata_service_endpoint_mode': 'ipv6'},
+                'http://[fd00:ec2::254]/',
+            ),
+            (
+                {'ec2_metadata_service_endpoint_mode': 'ipv4'},
+                'http://169.254.169.254/',
+            ),
+            (
+                {'ec2_metadata_service_endpoint_mode': 'foo'},
+                'http://169.254.169.254/',
+            ),
+            (
+                {
+                    'ec2_metadata_service_endpoint_mode': 'ipv6',
+                    'ec2_metadata_service_endpoint': 'http://[fd00:ec2::010]/',
+                },
+                'http://[fd00:ec2::010]/',
+            ),
+        ]
 
         for config, expected_url in configs:
             self._test_imds_base_url(config, expected_url)
 
     def test_metadata_endpoint(self):
-        urls = ['http://fd00:ec2:0000:0000:0000:0000:0000:0000/',
-                'http://[fd00:ec2::010]/', 'http://192.168.1.1/']
+        urls = [
+            'http://fd00:ec2:0000:0000:0000:0000:0000:0000/',
+            'http://[fd00:ec2::010]/',
+            'http://192.168.1.1/',
+        ]
         for url in urls:
             self.assertTrue(is_valid_uri(url))
 
     def test_ipv6_endpoint_no_brackets_env_var_set(self):
         url = 'http://fd00:ec2::010/'
-        config = {'ec2_metadata_service_endpoint': url}
         self.assertFalse(is_valid_ipv6_endpoint_url(url))
 
     def test_ipv6_invalid_endpoint(self):
@@ -2750,18 +2901,22 @@ class TestInstanceMetadataFetcher(unitte
         url = 'http://fd00:ec2:0000:0000:0000:0000:0000:0000/'
         config = {'ec2_metadata_service_endpoint': url}
 
-        self.add_imds_response(
-            status_code=400, body=b'{}')
+        self.add_imds_response(status_code=400, body=b'{}')
 
         fetcher = InstanceMetadataFetcher(config=config)
         result = fetcher.retrieve_iam_role_credentials()
         self.assertEqual(result, {})
 
     def test_ipv6_imds_empty_config(self):
-        configs = [({'ec2_metadata_service_endpoint': ''},'http://169.254.169.254/'),
-                ({'ec2_metadata_service_endpoint_mode': ''}, 'http://169.254.169.254/'),
-                ({}, 'http://169.254.169.254/'),
-                (None, 'http://169.254.169.254/')]
+        configs = [
+            ({'ec2_metadata_service_endpoint': ''}, 'http://169.254.169.254/'),
+            (
+                {'ec2_metadata_service_endpoint_mode': ''},
+                'http://169.254.169.254/',
+            ),
+            ({}, 'http://169.254.169.254/'),
+            (None, 'http://169.254.169.254/'),
+        ]
 
         for config, expected_url in configs:
             self._test_imds_base_url(config, expected_url)
@@ -2771,7 +2926,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_default_imds_responses()
 
         InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         self.assertEqual(self._send.call_count, 3)
         for call in self._send.calls:
@@ -2782,11 +2938,13 @@ class TestInstanceMetadataFetcher(unitte
         # be retried.
         self.add_get_token_imds_response(token='token')
         self.add_imds_response(
-            status_code=429, body=b'{"message": "Slow down"}')
+            status_code=429, body=b'{"message": "Slow down"}'
+        )
         self.add_get_role_name_imds_response()
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_http_connection_error_for_role_name_is_retried(self):
@@ -2796,7 +2954,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_role_name_imds_response()
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_empty_response_for_role_name_is_retried(self):
@@ -2807,7 +2966,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_role_name_imds_response()
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_non_200_response_is_retried(self):
@@ -2816,10 +2976,12 @@ class TestInstanceMetadataFetcher(unitte
         # Response for creds that has a 200 status code but has an empty
         # body should be retried.
         self.add_imds_response(
-            status_code=429, body=b'{"message": "Slow down"}')
+            status_code=429, body=b'{"message": "Slow down"}'
+        )
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_http_connection_errors_is_retried(self):
@@ -2829,7 +2991,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_imds_connection_error(ConnectionClosedError(endpoint_url=''))
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_empty_response_is_retried(self):
@@ -2840,7 +3003,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_imds_response(body=b'')
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_invalid_json_is_retried(self):
@@ -2851,14 +3015,16 @@ class TestInstanceMetadataFetcher(unitte
         self.add_imds_response(body=b'{"AccessKey":')
         self.add_get_credentials_imds_response()
         result = InstanceMetadataFetcher(
-            num_attempts=2).retrieve_iam_role_credentials()
+            num_attempts=2
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, self._expected_creds)
 
     def test_exhaust_retries_on_role_name_request(self):
         self.add_get_token_imds_response(token='token')
         self.add_imds_response(status_code=400, body=b'')
         result = InstanceMetadataFetcher(
-            num_attempts=1).retrieve_iam_role_credentials()
+            num_attempts=1
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, {})
 
     def test_exhaust_retries_on_credentials_request(self):
@@ -2866,7 +3032,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_role_name_imds_response()
         self.add_imds_response(status_code=400, body=b'')
         result = InstanceMetadataFetcher(
-            num_attempts=1).retrieve_iam_role_credentials()
+            num_attempts=1
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, {})
 
     def test_missing_fields_in_credentials_response(self):
@@ -2875,7 +3042,8 @@ class TestInstanceMetadataFetcher(unitte
         # Response for creds that has a 200 status code and a JSON body
         # representing an error. We do not necessarily want to retry this.
         self.add_imds_response(
-            body=b'{"Code":"AssumeRoleUnauthorizedAccess","Message":"error"}')
+            body=b'{"Code":"AssumeRoleUnauthorizedAccess","Message":"error"}'
+        )
         result = InstanceMetadataFetcher().retrieve_iam_role_credentials()
         self.assertEqual(result, {})
 
@@ -2884,12 +3052,15 @@ class TestInstanceMetadataFetcher(unitte
         self.add_default_imds_responses()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         # Check that subsequent calls after getting the token include the token.
         self.assertEqual(self._send.call_count, 3)
         for call in self._send.call_args_list[1:]:
-            self.assertEqual(call[0][0].headers['x-aws-ec2-metadata-token'], 'token')
+            self.assertEqual(
+                call[0][0].headers['x-aws-ec2-metadata-token'], 'token'
+            )
         self.assertEqual(result, self._expected_creds)
 
     def test_metadata_token_not_supported_404(self):
@@ -2899,7 +3070,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_credentials_imds_response()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         for call in self._send.call_args_list[1:]:
             self.assertNotIn('x-aws-ec2-metadata-token', call[0][0].headers)
@@ -2912,7 +3084,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_credentials_imds_response()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         for call in self._send.call_args_list[1:]:
             self.assertNotIn('x-aws-ec2-metadata-token', call[0][0].headers)
@@ -2925,7 +3098,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_credentials_imds_response()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         for call in self._send.call_args_list[1:]:
             self.assertNotIn('x-aws-ec2-metadata-token', call[0][0].headers)
@@ -2938,7 +3112,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_credentials_imds_response()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         for call in self._send.call_args_list[1:]:
             self.assertNotIn('x-aws-ec2-metadata-token', call[0][0].headers)
@@ -2951,7 +3126,8 @@ class TestInstanceMetadataFetcher(unitte
         self.add_get_credentials_imds_response()
 
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
 
         for call in self._send.call_args_list[1:]:
             self.assertNotIn('x-aws-ec2-metadata-token', call[0][0].headers)
@@ -2961,7 +3137,8 @@ class TestInstanceMetadataFetcher(unitte
         user_agent = 'my-user-agent'
         self.add_imds_response(b'', status_code=400)
         result = InstanceMetadataFetcher(
-            user_agent=user_agent).retrieve_iam_role_credentials()
+            user_agent=user_agent
+        ).retrieve_iam_role_credentials()
         self.assertEqual(result, {})
 
     def test_v1_disabled_by_config(self):
@@ -2971,9 +3148,7 @@ class TestInstanceMetadataFetcher(unitte
         with self.assertRaises(MetadataRetrievalError):
             fetcher.retrieve_iam_role_credentials()
 
-    def _get_datetime(
-       self, dt=None, offset=None, offset_func=operator.add
-    ):
+    def _get_datetime(self, dt=None, offset=None, offset_func=operator.add):
         if dt is None:
             dt = datetime.datetime.utcnow()
         if offset is not None:
@@ -2989,7 +3164,7 @@ class TestInstanceMetadataFetcher(unitte
             'AccessKeyId': 'access',
             'SecretAccessKey': 'secret',
             'Token': 'token',
-            'Expiration': '1970-01-01T00:00:00'
+            'Expiration': '1970-01-01T00:00:00',
         }
         creds.update(overrides)
         return creds
@@ -3000,15 +3175,14 @@ class TestInstanceMetadataFetcher(unitte
             'secret_key': creds['SecretAccessKey'],
             'token': creds['Token'],
             'expiry_time': creds['Expiration'],
-            'role_name': self._role_name
+            'role_name': self._role_name,
         }
 
     def _add_default_imds_response(self, status_code=200, creds=''):
         self.add_get_token_imds_response(token='token')
         self.add_get_role_name_imds_response()
         self.add_imds_response(
-            status_code=200,
-            body=json.dumps(creds).encode('utf-8')
+            status_code=200, body=json.dumps(creds).encode('utf-8')
         )
 
     def mock_randint(self, int_val=600):
@@ -3020,10 +3194,10 @@ class TestInstanceMetadataFetcher(unitte
     def test_expiry_time_extension(self):
         current_time = self._get_datetime()
         expiration_time = self._get_datetime(
-            dt=current_time, offset=datetime.timedelta(seconds=14*60)
+            dt=current_time, offset=datetime.timedelta(seconds=14 * 60)
         )
         new_expiration = self._get_datetime(
-            dt=current_time, offset=datetime.timedelta(seconds=20*60)
+            dt=current_time, offset=datetime.timedelta(seconds=20 * 60)
         )
 
         creds = self._get_default_creds(
@@ -3044,11 +3218,11 @@ class TestInstanceMetadataFetcher(unitte
         current_time = self._get_datetime()
         expiration_time = self._get_datetime(
             dt=current_time,
-            offset=datetime.timedelta(seconds=14*60),
-            offset_func=operator.sub
+            offset=datetime.timedelta(seconds=14 * 60),
+            offset_func=operator.sub,
         )
         new_expiration = self._get_datetime(
-            dt=current_time, offset=datetime.timedelta(seconds=20*60)
+            dt=current_time, offset=datetime.timedelta(seconds=20 * 60)
         )
         assert current_time > expiration_time
         assert new_expiration > current_time
@@ -3071,11 +3245,11 @@ class TestInstanceMetadataFetcher(unitte
         current_time = self._get_datetime()
         expiration_time = self._get_datetime(
             dt=current_time,
-            offset=datetime.timedelta(seconds=14*60),
-            offset_func=operator.sub
+            offset=datetime.timedelta(seconds=14 * 60),
+            offset_func=operator.sub,
         )
         new_expiration = self._get_datetime(
-            dt=current_time, offset=datetime.timedelta(seconds=25*60)
+            dt=current_time, offset=datetime.timedelta(seconds=25 * 60)
         )
         assert current_time > expiration_time
         assert new_expiration > current_time
@@ -3090,7 +3264,7 @@ class TestInstanceMetadataFetcher(unitte
 
         with mock.patch("random.randint", self.mock_randint()):
             fetcher = InstanceMetadataFetcher(
-                config={"ec2_credential_refresh_window": 15*60}
+                config={"ec2_credential_refresh_window": 15 * 60}
             )
             result = fetcher.retrieve_iam_role_credentials()
             assert result == expected_data
@@ -3098,13 +3272,11 @@ class TestInstanceMetadataFetcher(unitte
     @FreezeTime(module=botocore.utils.datetime, date=DATE)
     def test_expiry_extension_with_bad_datetime(self):
         bad_datetime = "May 20th, 2020 19:00:00"
-        creds = self._get_default_creds(
-            {"Expiration": bad_datetime}
-        )
+        creds = self._get_default_creds({"Expiration": bad_datetime})
         self._add_default_imds_response(200, creds)
 
         fetcher = InstanceMetadataFetcher(
-            config={"ec2_credential_refresh_window": 15*60}
+            config={"ec2_credential_refresh_window": 15 * 60}
         )
         results = fetcher.retrieve_iam_role_credentials()
         assert results['expiry_time'] == bad_datetime
@@ -3112,7 +3284,7 @@ class TestInstanceMetadataFetcher(unitte
 
 class TestSSOTokenFetcher(unittest.TestCase):
     def setUp(self):
-        super(TestSSOTokenFetcher, self).setUp()
+        super().setUp()
         self.cache = {}
         self.start_url = 'https://d-abc123.awsapps.com/start'
         self.sso_region = 'us-west-2'
@@ -3434,7 +3606,7 @@ class TestSSOTokenFetcher(unittest.TestC
 
 class TestSSOTokenLoader(unittest.TestCase):
     def setUp(self):
-        super(TestSSOTokenLoader, self).setUp()
+        super().setUp()
         self.session_name = 'admin'
         self.start_url = 'https://d-abc123.awsapps.com/start'
         self.cache_key = '40a89917e3175433e361b710a9d43528d7f1890a'
@@ -3442,7 +3614,7 @@ class TestSSOTokenLoader(unittest.TestCa
         self.access_token = 'totally.a.token'
         self.cached_token = {
             'accessToken': self.access_token,
-            'expiresAt': '2002-10-18T03:52:38UTC'
+            'expiresAt': '2002-10-18T03:52:38UTC',
         }
         self.cache = {}
         self.loader = SSOTokenLoader(cache=self.cache)
@@ -3454,12 +3626,12 @@ class TestSSOTokenLoader(unittest.TestCa
 
     def test_can_handle_does_not_exist(self):
         with self.assertRaises(SSOTokenLoadError):
-            access_token = self.loader(self.start_url)
+            self.loader(self.start_url)
 
     def test_can_handle_invalid_cache(self):
         self.cache[self.cache_key] = {}
         with self.assertRaises(SSOTokenLoadError):
-            access_token = self.loader(self.start_url)
+            self.loader(self.start_url)
 
     def test_can_save_token(self):
         self.loader.save_token(self.start_url, self.cached_token)
@@ -3489,27 +3661,39 @@ class TestSSOTokenLoader(unittest.TestCa
 
 class TestOriginalLDLibraryPath(unittest.TestCase):
     def test_swaps_original_ld_library_path(self):
-        env = {'LD_LIBRARY_PATH_ORIG': '/my/original',
-               'LD_LIBRARY_PATH': '/pyinstallers/version'}
+        env = {
+            'LD_LIBRARY_PATH_ORIG': '/my/original',
+            'LD_LIBRARY_PATH': '/pyinstallers/version',
+        }
         with original_ld_library_path(env):
-            self.assertEqual(env['LD_LIBRARY_PATH'],
-                             '/my/original')
-        self.assertEqual(env['LD_LIBRARY_PATH'],
-                            '/pyinstallers/version')
+            self.assertEqual(env['LD_LIBRARY_PATH'], '/my/original')
+        self.assertEqual(env['LD_LIBRARY_PATH'], '/pyinstallers/version')
 
     def test_no_ld_library_path_original(self):
         env = {'LD_LIBRARY_PATH': '/pyinstallers/version'}
         with original_ld_library_path(env):
             self.assertIsNone(env.get('LD_LIBRARY_PATH'))
-        self.assertEqual(env['LD_LIBRARY_PATH'],
-                            '/pyinstallers/version')
+        self.assertEqual(env['LD_LIBRARY_PATH'], '/pyinstallers/version')
 
     def test_no_ld_library_path(self):
         env = {'OTHER_VALUE': 'foo'}
         with original_ld_library_path(env):
             self.assertIsNone(env.get('LD_LIBRARY_PATH'))
-            self.assertEqual(env, {'OTHER_VALUE': 'foo'})
+            self.assertEqual(env['OTHER_VALUE'], 'foo')
+        self.assertEqual(env, {'OTHER_VALUE': 'foo'})
+
+    def test_no_pyinstaller_reset(self):
+        env = {'OTHER_VALUE': 'foo'}
+        with original_ld_library_path(env):
+            self.assertEqual(env.get('PYINSTALLER_RESET_ENVIRONMENT'), '1')
         self.assertEqual(env, {'OTHER_VALUE': 'foo'})
+        self.assertIsNone(env.get('PYINSTALLER_RESET_ENVIRONMENT'))
+
+    def test_existing_pyinstaller_reset(self):
+        env = {'PYINSTALLER_RESET_ENVIRONMENT': '0'}
+        with original_ld_library_path(env):
+            self.assertEqual(env.get('PYINSTALLER_RESET_ENVIRONMENT'), '0')
+        self.assertEqual(env.get('PYINSTALLER_RESET_ENVIRONMENT'), '0')
 
 
 @pytest.mark.parametrize(
@@ -3525,7 +3709,7 @@ class TestOriginalLDLibraryPath(unittest
         ('test_header', HeadersDict({'Test_Header': 'foo'}), True),
         ('missing_header', HeadersDict({'Test_Header': 'foo'}), False),
         (None, HeadersDict({'Test_Header': 'foo'}), False),
-    )
+    ),
 )
 def test_has_header(header_name, headers, expected):
     assert has_header(header_name, headers) is expected
@@ -3549,7 +3733,7 @@ class TestDetermineContentLength(unittes
         self.assertEqual(length, 0)
 
     def test_basic_len_obj(self):
-        class HasLen(object):
+        class HasLen:
             def __len__(self):
                 return 12
 
@@ -3557,7 +3741,7 @@ class TestDetermineContentLength(unittes
         self.assertEqual(length, 12)
 
     def test_non_seekable_fileobj(self):
-        class Readable(object):
+        class Readable:
             def read(self, *args, **kwargs):
                 pass
 
@@ -3565,7 +3749,7 @@ class TestDetermineContentLength(unittes
         self.assertIsNone(length)
 
     def test_seekable_fileobj(self):
-        class Seekable(object):
+        class Seekable:
             _pos = 0
 
             def read(self, *args, **kwargs):
@@ -3658,3 +3842,46 @@ def test_lru_cache_weakref():
     assert cls2.cached_fn.cache_info().currsize == 2
     assert cls2.cached_fn.cache_info().hits == 1  # the call was a cache hit
     assert cls2.cached_fn.cache_info().misses == 2
+
+
+@pytest.mark.parametrize(
+    "signing_name, expected_env_var",
+    (
+        ("my-service", "AWS_BEARER_TOKEN_MY_SERVICE"),
+        ("my service", "AWS_BEARER_TOKEN_MY_SERVICE"),
+        ("my-custom service", "AWS_BEARER_TOKEN_MY_CUSTOM_SERVICE"),
+    ),
+)
+def test_get_bearer_env_var_name(signing_name, expected_env_var):
+    assert _get_bearer_env_var_name(signing_name) == expected_env_var
+
+
+@pytest.mark.parametrize(
+    "signing_name, env_var, token",
+    [
+        ("my-service", "AWS_BEARER_TOKEN_MY_SERVICE", "test_token"),
+        (
+            "my-other-service",
+            "AWS_BEARER_TOKEN_MY_OTHER_SERVICE",
+            "test_token",
+        ),
+    ],
+)
+def test_get_token_from_environment_returns_token(
+    monkeypatch, signing_name, env_var, token
+):
+    monkeypatch.setenv(env_var, token)
+    assert get_token_from_environment(signing_name) == token
+
+
+@pytest.mark.parametrize(
+    "signing_name, env_var",
+    [
+        ("no-token-service", "AWS_BEARER_TOKEN_NO_TOKEN_SERVICE"),
+    ],
+)
+def test_get_token_from_environment_returns_none(
+    monkeypatch, signing_name, env_var
+):
+    monkeypatch.delenv(env_var, raising=False)
+    assert get_token_from_environment(signing_name) is None
diff -pruN 2.23.6-1/tests/unit/botocore/test_validate.py 2.31.35-1/tests/unit/botocore/test_validate.py
--- 2.23.6-1/tests/unit/botocore/test_validate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_validate.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,27 +1,24 @@
+import decimal
 import io
-from tests import unittest
 from datetime import datetime
-import decimal
 
 from botocore.model import ShapeResolver
 from botocore.validate import ParamValidator
 
-BOILER_PLATE_SHAPES = {
-    'StringType': {
-        'type': 'string'
-    }
-}
+from tests import unittest
 
+BOILER_PLATE_SHAPES = {'StringType': {'type': 'string'}}
 
-class BaseTestValidate(unittest.TestCase):
 
+class BaseTestValidate(unittest.TestCase):
     def assert_has_validation_errors(self, given_shapes, input_params, errors):
         # Given the shape definitions ``given_shape`` and the user input
         # parameters ``input_params``, verify that the validation has
         # validation errors containing the list of ``errors``.
         # Also, this assumes the input shape name is "Input".
         errors_found = self.get_validation_error_message(
-            given_shapes, input_params)
+            given_shapes, input_params
+        )
         self.assertTrue(errors_found.has_errors())
         error_message = errors_found.generate_report()
         for error in errors:
@@ -32,7 +29,7 @@ class BaseTestValidate(unittest.TestCase
         input_shape = s.get_shape_by_name('Input')
         validator = ParamValidator()
         errors_found = validator.validate(input_params, input_shape)
-        error_message = errors_found.generate_report()
+        errors_found.generate_report()
         return errors_found
 
 
@@ -45,22 +42,21 @@ class TestValidateRequiredParams(BaseTes
                     'required': ['A', 'B'],
                     'members': {
                         'A': {'shape': 'StringType'},
-                        'B': {'shape': 'StringType'}
-                    }
+                        'B': {'shape': 'StringType'},
+                    },
                 },
-                'StringType': {'type': 'string'}
+                'StringType': {'type': 'string'},
             },
             input_params={'A': 'foo'},
-            errors=['Missing required parameter'])
+            errors=['Missing required parameter'],
+        )
 
     def test_validate_nested_required_param(self):
         self.assert_has_validation_errors(
             given_shapes={
                 'Input': {
                     'type': 'structure',
-                    'members': {
-                        'A': {'shape': 'SubStruct'}
-                    }
+                    'members': {'A': {'shape': 'SubStruct'}},
                 },
                 'SubStruct': {
                     'type': 'structure',
@@ -68,14 +64,15 @@ class TestValidateRequiredParams(BaseTes
                     'members': {
                         'B': {'shape': 'StringType'},
                         'C': {'shape': 'StringType'},
-                    }
+                    },
                 },
                 'StringType': {
                     'type': 'string',
-                }
+                },
             },
             input_params={'A': {'B': 'foo'}},
-            errors=['Missing required parameter'])
+            errors=['Missing required parameter'],
+        )
 
     def test_validate_unknown_param(self):
         self.assert_has_validation_errors(
@@ -85,12 +82,13 @@ class TestValidateRequiredParams(BaseTes
                     'required': ['A'],
                     'members': {
                         'A': {'shape': 'StringType'},
-                    }
+                    },
                 },
-                'StringType': {'type': 'string'}
+                'StringType': {'type': 'string'},
             },
             input_params={'A': 'foo', 'B': 'bar'},
-            errors=['Unknown parameter'])
+            errors=['Unknown parameter'],
+        )
 
 
 class TestValidateJSONValueTrait(BaseTestValidate):
@@ -103,17 +101,18 @@ class TestValidateJSONValueTrait(BaseTes
                         'shape': 'StrType',
                         'jsonvalue': True,
                         'location': 'header',
-                        'locationName': 'header-name'
+                        'locationName': 'header-name',
                     }
-                }
+                },
             },
-            'StrType': {'type': 'string'}
+            'StrType': {'type': 'string'},
         }
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
             input_params={
-                'json': {'data': [1, 2.3, '3'], 'unicode': u'\u2713'}
-            })
+                'json': {'data': [1, 2.3, '3'], 'unicode': '\u2713'}
+            },
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
@@ -126,21 +125,18 @@ class TestValidateJSONValueTrait(BaseTes
                         'shape': 'StrType',
                         'jsonvalue': True,
                         'location': 'header',
-                        'locationName': 'header-name'
+                        'locationName': 'header-name',
                     }
-                }
+                },
             },
-            'StrType': {'type': 'string'}
+            'StrType': {'type': 'string'},
         }
 
         self.assert_has_validation_errors(
             given_shapes=self.shapes,
-            input_params={
-                'json': {'date': datetime(2017, 4, 27, 0, 0)}
-            },
-            errors=[
-                ('Invalid parameter json must be json serializable: ')
-            ])
+            input_params={'json': {'date': datetime(2017, 4, 27, 0, 0)}},
+            errors=[('Invalid parameter json must be json serializable: ')],
+        )
 
 
 class TestValidateDocumentType(BaseTestValidate):
@@ -152,24 +148,22 @@ class TestValidateDocumentType(BaseTestV
                     'inlineDocument': {
                         'shape': 'DocumentType',
                     }
-                }
+                },
             },
-            'DocumentType': {
-                'type': 'structure',
-                'document': True
-            }
+            'DocumentType': {'type': 'structure', 'document': True},
         }
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
             input_params={
-                'inlineDocument': {'data': [1, 2.3, '3',
-                                            {'foo': None}],
-                                   'unicode': u'\u2713'}
-            })
+                'inlineDocument': {
+                    'data': [1, 2.3, '3', {'foo': None}],
+                    'unicode': '\u2713',
+                }
+            },
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
-
     def test_validate_document_type_string(self):
         self.shapes = {
             'Input': {
@@ -178,12 +172,9 @@ class TestValidateDocumentType(BaseTestV
                     'inlineDocument': {
                         'shape': 'DocumentType',
                     }
-                }
+                },
             },
-            'DocumentType': {
-                'type': 'structure',
-                'document': True
-            }
+            'DocumentType': {'type': 'structure', 'document': True},
         }
 
         invalid_document = object()
@@ -194,7 +185,7 @@ class TestValidateDocumentType(BaseTestV
                     'number': complex(1j),
                     'date': datetime(2017, 4, 27, 0, 0),
                     'list': [invalid_document],
-                    'dict': {'foo': (1, 2, 3)}
+                    'dict': {'foo': (1, 2, 3)},
                 }
             },
             errors=[
@@ -202,7 +193,8 @@ class TestValidateDocumentType(BaseTestV
                 ('Invalid type for document parameter date'),
                 ('Invalid type for document parameter list[0]'),
                 ('Invalid type for document parameter foo'),
-            ])
+            ],
+        )
 
 
 class TestValidateTaggedUnion(BaseTestValidate):
@@ -214,7 +206,7 @@ class TestValidateTaggedUnion(BaseTestVa
                     'taggedUnion': {
                         'shape': 'TaggedUnionType',
                     }
-                }
+                },
             },
             'TaggedUnionType': {
                 'type': 'structure',
@@ -222,20 +214,17 @@ class TestValidateTaggedUnion(BaseTestVa
                 'members': {
                     'Foo': {'shape': 'StringType'},
                     'Bar': {'shape': 'StringType'},
-                }
+                },
             },
-            'StringType': {'type': 'string'}
+            'StringType': {'type': 'string'},
         }
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
-            input_params={
-                'taggedUnion': {'Foo': "mystring"}
-            }
+            input_params={'taggedUnion': {'Foo': "mystring"}},
         )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
-
     def test_validate_one_member_is_set(self):
         self.shapes = {
             'Input': {
@@ -244,7 +233,7 @@ class TestValidateTaggedUnion(BaseTestVa
                     'taggedUnion': {
                         'shape': 'TaggedUnionType',
                     }
-                }
+                },
             },
             'TaggedUnionType': {
                 'type': 'structure',
@@ -252,22 +241,20 @@ class TestValidateTaggedUnion(BaseTestVa
                 'members': {
                     'Foo': {'shape': 'StringType'},
                     'Bar': {'shape': 'StringType'},
-                }
+                },
             },
-            'StringType': {'type': 'string'}
+            'StringType': {'type': 'string'},
         }
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
             input_params={
-                'taggedUnion': {'Foo': "mystring",
-                                'Bar': "mystring2"
-                                }
-            }
+                'taggedUnion': {'Foo': "mystring", 'Bar': "mystring2"}
+            },
         )
         error_msg = errors.generate_report()
         self.assertIn(
             'Invalid number of parameters set for tagged union structure',
-            error_msg
+            error_msg,
         )
 
     def test_validate_known_member_is_set(self):
@@ -278,7 +265,7 @@ class TestValidateTaggedUnion(BaseTestVa
                     'taggedUnion': {
                         'shape': 'TaggedUnionType',
                     }
-                }
+                },
             },
             'TaggedUnionType': {
                 'type': 'structure',
@@ -286,15 +273,13 @@ class TestValidateTaggedUnion(BaseTestVa
                 'members': {
                     'Foo': {'shape': 'StringType'},
                     'Bar': {'shape': 'StringType'},
-                }
+                },
             },
-            'StringType': {'type': 'string'}
+            'StringType': {'type': 'string'},
         }
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
-            input_params={
-                'taggedUnion': {'unknown': "mystring"}
-            }
+            input_params={'taggedUnion': {'unknown': "mystring"}},
         )
         error_msg = errors.generate_report()
         self.assertIn('Unknown parameter in taggedUnion', error_msg)
@@ -307,7 +292,7 @@ class TestValidateTaggedUnion(BaseTestVa
                     'taggedUnion': {
                         'shape': 'TaggedUnionType',
                     }
-                }
+                },
             },
             'TaggedUnionType': {
                 'type': 'structure',
@@ -315,15 +300,12 @@ class TestValidateTaggedUnion(BaseTestVa
                 'members': {
                     'Foo': {'shape': 'StringType'},
                     'Bar': {'shape': 'StringType'},
-                }
+                },
             },
-            'StringType': {'type': 'string'}
+            'StringType': {'type': 'string'},
         }
         errors = self.get_validation_error_message(
-            given_shapes=self.shapes,
-            input_params={
-                'taggedUnion': {}
-            }
+            given_shapes=self.shapes, input_params={'taggedUnion': {}}
         )
         error_msg = errors.generate_report()
         self.assertIn('Must set one of the following keys', error_msg)
@@ -344,7 +326,7 @@ class TestValidateTypes(BaseTestValidate
                     'Long': {'shape': 'LongType'},
                     'Map': {'shape': 'MapType'},
                     'Timestamp': {'shape': 'TimeType'},
-                }
+                },
             },
             'StrType': {'type': 'string'},
             'IntType': {'type': 'integer'},
@@ -381,20 +363,24 @@ class TestValidateTypes(BaseTestValidate
                 'Invalid type for parameter Long',
                 'Invalid type for parameter Map',
                 'Invalid type for parameter Timestamp',
-            ]
+            ],
         )
 
     def test_datetime_type_accepts_datetime_obj(self):
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
-            input_params={'Timestamp': datetime.now(),})
+            input_params={
+                'Timestamp': datetime.now(),
+            },
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
     def test_datetime_accepts_string_timestamp(self):
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
-            input_params={'Timestamp': '2014-01-01 12:00:00'})
+            input_params={'Timestamp': '2014-01-01 12:00:00'},
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
@@ -403,8 +389,8 @@ class TestValidateTypes(BaseTestValidate
         # where low level exceptions can propogate back up to
         # us.
         errors = self.get_validation_error_message(
-            given_shapes=self.shapes,
-            input_params={'Timestamp': None})
+            given_shapes=self.shapes, input_params={'Timestamp': None}
+        )
         error_msg = errors.generate_report()
         self.assertIn('Invalid type for parameter Timestamp', error_msg)
 
@@ -421,7 +407,7 @@ class TestValidateRanges(BaseTestValidat
                     'List': {'shape': 'ListType'},
                     'OnlyMin': {'shape': 'MinStrOnly'},
                     'OnlyMax': {'shape': 'MaxStrOnly'},
-                }
+                },
             },
             'IntType': {
                 'type': 'integer',
@@ -438,21 +424,13 @@ class TestValidateRanges(BaseTestValidat
                 'min': 1,
                 'max': 10,
             },
-            'MinStrOnly': {
-                'type': 'string',
-                'min': 1
-            },
-            'MaxStrOnly': {
-                'type': 'string',
-                'max': 10
-            },
+            'MinStrOnly': {'type': 'string', 'min': 1},
+            'MaxStrOnly': {'type': 'string', 'max': 10},
             'ListType': {
                 'type': 'list',
                 'min': 1,
                 'max': 5,
-                'member': {
-                    'shape': 'StringType'
-                }
+                'member': {'shape': 'StringType'},
             },
         }
 
@@ -466,7 +444,7 @@ class TestValidateRanges(BaseTestValidat
             errors=[
                 'Invalid value for parameter Int',
                 'Invalid value for parameter Long',
-            ]
+            ],
         )
 
     def test_does_not_validate_greater_than_range(self):
@@ -482,8 +460,8 @@ class TestValidateRanges(BaseTestValidat
 
     def test_within_range(self):
         errors = self.get_validation_error_message(
-            given_shapes=self.shapes,
-            input_params={'Int': 10})
+            given_shapes=self.shapes, input_params={'Int': 10}
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
@@ -495,7 +473,7 @@ class TestValidateRanges(BaseTestValidat
             },
             errors=[
                 'Invalid length for parameter String',
-            ]
+            ],
         )
 
     def test_does_not_validate_string_max_length_contraint(self):
@@ -516,7 +494,7 @@ class TestValidateRanges(BaseTestValidat
             },
             errors=[
                 'Invalid length for parameter List',
-            ]
+            ],
         )
 
     def test_does_not_validate_list_max_length_constraint(self):
@@ -540,7 +518,7 @@ class TestValidateRanges(BaseTestValidat
             },
             errors=[
                 'Invalid length for parameter OnlyMin',
-            ]
+            ],
         )
 
     def test_does_not_validate_max_when_only_max_value_specified(self):
@@ -561,7 +539,7 @@ class TestValidateMapType(BaseTestValida
                 'type': 'structure',
                 'members': {
                     'Map': {'shape': 'MapType'},
-                }
+                },
             },
             'MapType': {
                 'type': 'map',
@@ -577,12 +555,10 @@ class TestValidateMapType(BaseTestValida
     def test_validate_keys_and_values(self):
         self.assert_has_validation_errors(
             given_shapes=self.shapes,
-            input_params={
-                'Map': {'foo': '', 'a': 'foobar'}
-            },
+            input_params={'Map': {'foo': '', 'a': 'foobar'}},
             errors=[
                 'Invalid length for parameter Map',
-            ]
+            ],
         )
 
 
@@ -593,7 +569,7 @@ class TestValidationFloatType(BaseTestVa
                 'type': 'structure',
                 'members': {
                     'Float': {'shape': 'FloatType'},
-                }
+                },
             },
             'FloatType': {
                 'type': 'float',
@@ -610,13 +586,14 @@ class TestValidationFloatType(BaseTestVa
             },
             errors=[
                 'Invalid value for parameter Float',
-            ]
+            ],
         )
 
     def test_decimal_allowed(self):
         errors = self.get_validation_error_message(
             given_shapes=self.shapes,
-            input_params={'Float': decimal.Decimal('2.12345')})
+            input_params={'Float': decimal.Decimal('2.12345')},
+        )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
 
@@ -628,7 +605,7 @@ class TestValidationFloatType(BaseTestVa
             },
             errors=[
                 'Invalid value for parameter Float',
-            ]
+            ],
         )
 
 
@@ -639,7 +616,7 @@ class TestValidateTypeBlob(BaseTestValid
                 'type': 'structure',
                 'members': {
                     'Blob': {'shape': 'BlobType'},
-                }
+                },
             },
             'BlobType': {
                 'type': 'blob',
@@ -650,8 +627,7 @@ class TestValidateTypeBlob(BaseTestValid
 
     def test_validates_bytes(self):
         errors = self.get_validation_error_message(
-            given_shapes=self.shapes,
-            input_params={'Blob': b'12345'}
+            given_shapes=self.shapes, input_params={'Blob': b'12345'}
         )
         error_msg = errors.generate_report()
         self.assertEqual(error_msg, '')
@@ -682,5 +658,5 @@ class TestValidateTypeBlob(BaseTestValid
             },
             errors=[
                 'Invalid type for parameter Blob',
-            ]
+            ],
         )
diff -pruN 2.23.6-1/tests/unit/botocore/test_waiters.py 2.31.35-1/tests/unit/botocore/test_waiters.py
--- 2.23.6-1/tests/unit/botocore/test_waiters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/botocore/test_waiters.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,15 +12,20 @@
 # language governing permissions and limitations under the License.
 import io
 import os
-from tests import mock, unittest, BaseEnvVar
 
 import botocore
 from botocore.exceptions import ClientError, WaiterConfigError, WaiterError
-from botocore.waiter import Waiter, WaiterModel, SingleWaiterConfig
-from botocore.waiter import create_waiter_with_client
-from botocore.waiter import NormalizedOperationMethod
 from botocore.loaders import Loader
 from botocore.model import ServiceModel
+from botocore.waiter import (
+    NormalizedOperationMethod,
+    SingleWaiterConfig,
+    Waiter,
+    WaiterModel,
+    create_waiter_with_client,
+)
+
+from tests import BaseEnvVar, mock, unittest
 
 
 class TestWaiterModel(unittest.TestCase):
@@ -33,9 +38,7 @@ class TestWaiterModel(unittest.TestCase)
         }
 
     def create_acceptor_function(self, for_config):
-        single_waiter = {
-            'acceptors': [for_config]
-        }
+        single_waiter = {'acceptors': [for_config]}
         single_waiter.update(self.boiler_plate_config)
         config = SingleWaiterConfig(single_waiter)
         return config.acceptors[0].matcher_func
@@ -54,10 +57,7 @@ class TestWaiterModel(unittest.TestCase)
             WaiterModel(waiters)
 
     def test_unsupported_waiter_version(self):
-        waiters = {
-            'version': 1,
-            'waiters': {}
-        }
+        waiters = {'version': 1, 'waiters': {}}
         with self.assertRaises(WaiterConfigError):
             WaiterModel(waiters)
 
@@ -67,10 +67,11 @@ class TestWaiterModel(unittest.TestCase)
             'waiters': {
                 'BarWaiter': {},
                 'FooWaiter': {},
-            }
+            },
         }
-        self.assertEqual(WaiterModel(waiters).waiter_names, ['BarWaiter',
-                                                             'FooWaiter'])
+        self.assertEqual(
+            WaiterModel(waiters).waiter_names, ['BarWaiter', 'FooWaiter']
+        )
 
     def test_get_single_waiter_config(self):
         single_waiter = {
@@ -87,17 +88,14 @@ class TestWaiterModel(unittest.TestCase)
             'version': 2,
             'waiters': {
                 'BucketExists': single_waiter,
-            }
+            },
         }
         model = WaiterModel(waiters)
         config = model.get_waiter('BucketExists')
         self.assertEqual(config.operation, 'HeadBucket')
 
     def test_get_waiter_does_not_exist(self):
-        waiters = {
-            'version': 2,
-            'waiters': {}
-        }
+        waiters = {'version': 2, 'waiters': {}}
         model = WaiterModel(waiters)
         with self.assertRaises(ValueError):
             model.get_waiter('UnknownWaiter')
@@ -108,8 +106,7 @@ class TestWaiterModel(unittest.TestCase)
             'operation': 'HeadBucket',
             'delay': 5,
             'maxAttempts': 20,
-            'acceptors': [
-            ],
+            'acceptors': [],
         }
         config = SingleWaiterConfig(single_waiter)
         self.assertEqual(config.description, 'Waiter description')
@@ -137,8 +134,12 @@ class TestWaiterModel(unittest.TestCase)
     def test_single_waiter_acceptor_matches_jmespath(self):
         single_waiter = {
             'acceptors': [
-                {'state': 'success', 'matcher': 'path',
-                 'argument': 'Table.TableStatus', 'expected': 'ACCEPTED'},
+                {
+                    'state': 'success',
+                    'matcher': 'path',
+                    'argument': 'Table.TableStatus',
+                    'expected': 'ACCEPTED',
+                },
             ],
         }
         single_waiter.update(self.boiler_plate_config)
@@ -147,39 +148,47 @@ class TestWaiterModel(unittest.TestCase)
         # success_acceptor is a callable that takes a response dict and returns
         # True or False.
         self.assertTrue(
-            success_acceptor({'Table': {'TableStatus': 'ACCEPTED'}}))
+            success_acceptor({'Table': {'TableStatus': 'ACCEPTED'}})
+        )
         self.assertFalse(
-            success_acceptor({'Table': {'TableStatus': 'CREATING'}}))
+            success_acceptor({'Table': {'TableStatus': 'CREATING'}})
+        )
 
     def test_single_waiter_supports_status_code(self):
         single_waiter = {
             'acceptors': [
-                {'state': 'success', 'matcher': 'status',
-                 'expected': 200}
+                {'state': 'success', 'matcher': 'status', 'expected': 200}
             ],
         }
         single_waiter.update(self.boiler_plate_config)
         config = SingleWaiterConfig(single_waiter)
         success_acceptor = config.acceptors[0].matcher_func
         self.assertTrue(
-            success_acceptor({'ResponseMetadata': {'HTTPStatusCode': 200}}))
+            success_acceptor({'ResponseMetadata': {'HTTPStatusCode': 200}})
+        )
         self.assertFalse(
-            success_acceptor({'ResponseMetadata': {'HTTPStatusCode': 404}}))
+            success_acceptor({'ResponseMetadata': {'HTTPStatusCode': 404}})
+        )
 
     def test_single_waiter_supports_error(self):
         single_waiter = {
             'acceptors': [
-                {'state': 'success', 'matcher': 'error',
-                 'expected': 'DoesNotExistError'}
+                {
+                    'state': 'success',
+                    'matcher': 'error',
+                    'expected': 'DoesNotExistError',
+                }
             ],
         }
         single_waiter.update(self.boiler_plate_config)
         config = SingleWaiterConfig(single_waiter)
         success_acceptor = config.acceptors[0].matcher_func
         self.assertTrue(
-            success_acceptor({'Error': {'Code': 'DoesNotExistError'}}))
+            success_acceptor({'Error': {'Code': 'DoesNotExistError'}})
+        )
         self.assertFalse(
-            success_acceptor({'Error': {'Code': 'DoesNotExistErorr'}}))
+            success_acceptor({'Error': {'Code': 'DoesNotExistErorr'}})
+        )
 
     def test_single_waiter_supports_no_error(self):
         single_waiter = {
@@ -217,8 +226,11 @@ class TestWaiterModel(unittest.TestCase)
         unknown_type = 'arbitrary_type'
         single_waiter = {
             'acceptors': [
-                {'state': 'success', 'matcher': unknown_type,
-                 'expected': 'foo'}
+                {
+                    'state': 'success',
+                    'matcher': unknown_type,
+                    'expected': 'foo',
+                }
             ]
         }
         single_waiter.update(self.boiler_plate_config)
@@ -228,80 +240,132 @@ class TestWaiterModel(unittest.TestCase)
 
     def test_single_waiter_supports_path_all(self):
         matches = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAll',
-                        'argument': 'Tables[].State', 'expected': 'GOOD'})
-        self.assertTrue(
-            matches({'Tables': [{"State": "GOOD"}]}))
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAll',
+                'argument': 'Tables[].State',
+                'expected': 'GOOD',
+            }
+        )
+        self.assertTrue(matches({'Tables': [{"State": "GOOD"}]}))
         self.assertTrue(
-            matches({'Tables': [{"State": "GOOD"}, {"State": "GOOD"}]}))
+            matches({'Tables': [{"State": "GOOD"}, {"State": "GOOD"}]})
+        )
 
     def test_single_waiter_supports_path_any(self):
         matches = self.create_acceptor_function(
-            for_config={'state': 'failure', 'matcher': 'pathAny',
-                        'argument': 'Tables[].State', 'expected': 'FAIL'})
-        self.assertTrue(
-            matches({'Tables': [{"State": "FAIL"}]}))
+            for_config={
+                'state': 'failure',
+                'matcher': 'pathAny',
+                'argument': 'Tables[].State',
+                'expected': 'FAIL',
+            }
+        )
+        self.assertTrue(matches({'Tables': [{"State": "FAIL"}]}))
         self.assertTrue(
-            matches({'Tables': [{"State": "GOOD"}, {"State": "FAIL"}]}))
+            matches({'Tables': [{"State": "GOOD"}, {"State": "FAIL"}]})
+        )
 
     def test_waiter_handles_error_responses_with_path_matchers(self):
         path_any = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAny',
-                        'argument': 'length(Tables) > `0`',
-                        'expected': True})
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAny',
+                'argument': 'length(Tables) > `0`',
+                'expected': True,
+            }
+        )
         path_all = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAll',
-                        'argument': 'length(Tables) > `0`',
-                        'expected': True})
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAll',
+                'argument': 'length(Tables) > `0`',
+                'expected': True,
+            }
+        )
         path = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'path',
-                        'argument': 'length(Tables) > `0`',
-                        'expected': True})
+            for_config={
+                'state': 'success',
+                'matcher': 'path',
+                'argument': 'length(Tables) > `0`',
+                'expected': True,
+            }
+        )
         self.assertFalse(path_any({'Error': {'Code': 'DoesNotExist'}}))
         self.assertFalse(path_all({'Error': {'Code': 'DoesNotExist'}}))
         self.assertFalse(path({'Error': {'Code': 'DoesNotExist'}}))
 
     def test_single_waiter_does_not_match_path_all(self):
         matches = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAll',
-                        'argument': 'Tables[].State', 'expected': 'GOOD'})
-        self.assertFalse(
-            matches({'Tables': [{"State": "GOOD"}, {"State": "BAD"}]}))
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAll',
+                'argument': 'Tables[].State',
+                'expected': 'GOOD',
+            }
+        )
         self.assertFalse(
-            matches({'Tables': [{"State": "BAD"}, {"State": "GOOD"}]}))
+            matches({'Tables': [{"State": "GOOD"}, {"State": "BAD"}]})
+        )
         self.assertFalse(
-            matches({'Tables': [{"State": "BAD"}, {"State": "BAD"}]}))
+            matches({'Tables': [{"State": "BAD"}, {"State": "GOOD"}]})
+        )
         self.assertFalse(
-            matches({'Tables': []}))
+            matches({'Tables': [{"State": "BAD"}, {"State": "BAD"}]})
+        )
+        self.assertFalse(matches({'Tables': []}))
         self.assertFalse(
-            matches({'Tables': [{"State": "BAD"},
-                                {"State": "BAD"},
-                                {"State": "BAD"},
-                                {"State": "BAD"}]}))
+            matches(
+                {
+                    'Tables': [
+                        {"State": "BAD"},
+                        {"State": "BAD"},
+                        {"State": "BAD"},
+                        {"State": "BAD"},
+                    ]
+                }
+            )
+        )
 
     def test_path_all_missing_field(self):
         matches = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAll',
-                        'argument': 'Tables[].State', 'expected': 'GOOD'})
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAll',
+                'argument': 'Tables[].State',
+                'expected': 'GOOD',
+            }
+        )
         self.assertFalse(
-            matches({'Tables': [{"NotState": "GOOD"}, {"NotState": "BAD"}]}))
+            matches({'Tables': [{"NotState": "GOOD"}, {"NotState": "BAD"}]})
+        )
 
     def test_path_all_matcher_does_not_receive_list(self):
         matches = self.create_acceptor_function(
-            for_config={'state': 'success', 'matcher': 'pathAll',
-                        'argument': 'Tables[].State', 'expected': 'GOOD'})
-        self.assertFalse(
-            matches({"NotTables": []}))
+            for_config={
+                'state': 'success',
+                'matcher': 'pathAll',
+                'argument': 'Tables[].State',
+                'expected': 'GOOD',
+            }
+        )
+        self.assertFalse(matches({"NotTables": []}))
 
     def test_single_waiter_supports_all_three_states(self):
         single_waiter = {
             'acceptors': [
-                {'state': 'success', 'matcher': 'error',
-                 'expected': 'DoesNotExistError'},
-                {'state': 'success', 'matcher': 'status',
-                 'expected': 200},
-                {'state': 'success', 'matcher': 'path',
-                 'argument': 'Foo.Bar', 'expected': 'baz'},
+                {
+                    'state': 'success',
+                    'matcher': 'error',
+                    'expected': 'DoesNotExistError',
+                },
+                {'state': 'success', 'matcher': 'status', 'expected': 200},
+                {
+                    'state': 'success',
+                    'matcher': 'path',
+                    'argument': 'Foo.Bar',
+                    'expected': 'baz',
+                },
             ],
         }
         single_waiter.update(self.boiler_plate_config)
@@ -324,18 +388,19 @@ class TestWaitersObjects(unittest.TestCa
         operation_method.side_effect = responses
         return operation_method
 
-    def create_waiter_config(self, operation='MyOperation',
-                             delay=0, max_attempts=3,
-                             acceptors=None):
+    def create_waiter_config(
+        self, operation='MyOperation', delay=0, max_attempts=3, acceptors=None
+    ):
         if acceptors is None:
             # Create some arbitrary acceptor that will never match.
-            acceptors = [{'state': 'success', 'matcher': 'status',
-                          'expected': 1000}]
+            acceptors = [
+                {'state': 'success', 'matcher': 'status', 'expected': 1000}
+            ]
         waiter_config = {
             'operation': operation,
             'delay': delay,
             'maxAttempts': max_attempts,
-            'acceptors': acceptors
+            'acceptors': acceptors,
         }
         config = SingleWaiterConfig(waiter_config)
         return config
@@ -343,8 +408,15 @@ class TestWaitersObjects(unittest.TestCa
     def test_waiter_waits_until_acceptor_matches(self):
         config = self.create_waiter_config(
             max_attempts=3,
-            acceptors=[{'state': 'success', 'matcher': 'path',
-                        'argument': 'Foo', 'expected': 'SUCCESS'}])
+            acceptors=[
+                {
+                    'state': 'success',
+                    'matcher': 'path',
+                    'argument': 'Foo',
+                    'expected': 'SUCCESS',
+                }
+            ],
+        )
         # Simulate the client having two calls that don't
         # match followed by a third call that matches the
         # acceptor.
@@ -354,7 +426,7 @@ class TestWaitersObjects(unittest.TestCa
             {'Foo': 'FAILURE'},
             {'Foo': 'FAILURE'},
             {'Foo': 'SUCCESS'},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter.wait()
         self.assertEqual(operation_method.call_count, 3)
@@ -364,13 +436,19 @@ class TestWaitersObjects(unittest.TestCa
         # because of 'Error' key in success response.
         config = self.create_waiter_config(
             max_attempts=3,
-            acceptors=[{'state': 'success', 'matcher': 'path',
-                        'argument': 'Foo', 'expected': 'SUCCESS'}])
+            acceptors=[
+                {
+                    'state': 'success',
+                    'matcher': 'path',
+                    'argument': 'Foo',
+                    'expected': 'SUCCESS',
+                }
+            ],
+        )
         operation_method = mock.Mock()
         waiter = Waiter('MyWaiter', config, operation_method)
         self.client_responses_are(
-            {'Foo': 'SUCCESS', 'Error': 'foo'},
-            for_operation=operation_method
+            {'Foo': 'SUCCESS', 'Error': 'foo'}, for_operation=operation_method
         )
         waiter.wait()
         self.assertEqual(operation_method.call_count, 1)
@@ -384,7 +462,7 @@ class TestWaitersObjects(unittest.TestCa
             {'Foo': 'FAILURE'},
             {'Foo': 'FAILURE'},
             {'Foo': 'FAILURE'},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         with self.assertRaises(WaiterError):
@@ -401,18 +479,21 @@ class TestWaitersObjects(unittest.TestCa
             # waiter encounters this response it will transition
             # to the failure state.
             {'Error': {'Code': 'UnknownError', 'Message': 'bad error'}},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         with self.assertRaises(WaiterError):
             waiter.wait()
 
     def test_last_response_available_on_waiter_error(self):
-        last_response = {'Error': {'Code': 'UnknownError', 'Message': 'bad error'}}
+        last_response = {
+            'Error': {'Code': 'UnknownError', 'Message': 'bad error'}
+        }
         config = self.create_waiter_config()
         operation_method = mock.Mock()
-        self.client_responses_are(last_response,
-                                  for_operation=operation_method)
+        self.client_responses_are(
+            last_response, for_operation=operation_method
+        )
         waiter = Waiter('MyWaiter', config, operation_method)
         with self.assertRaises(WaiterError) as e:
             waiter.wait()
@@ -431,62 +512,111 @@ class TestWaitersObjects(unittest.TestCa
             # waiter encounters this response it will transition
             # to the failure state.
             {'Error': {'Code': error_code, 'Message': error_message}},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
 
         with self.assertRaisesRegex(WaiterError, error_message):
             waiter.wait()
 
-    def _assert_failure_state_error_raised(self, acceptors, responses, expected_msg):
-        config = self.create_waiter_config(
-            acceptors=acceptors)
+    def _assert_failure_state_error_raised(
+        self, acceptors, responses, expected_msg
+    ):
+        config = self.create_waiter_config(acceptors=acceptors)
         operation_method = mock.Mock()
         waiter = Waiter('MyWaiter', config, operation_method)
-        self.client_responses_are(
-            *responses,
-            for_operation=operation_method
-        )
+        self.client_responses_are(*responses, for_operation=operation_method)
         with self.assertRaisesRegex(WaiterError, expected_msg):
             waiter.wait()
 
     def test_waiter_failure_state_error(self):
         test_cases = [
-            ([{'state': 'failure', 'matcher': 'path',
-               'argument': 'Foo', 'expected': 'FAILURE'}],
-             [{'Foo': 'FAILURE'}],
-             'FAILURE'),
-            ([{'state': 'failure', 'matcher': 'pathAll',
-               'argument': 'Tables[].State', 'expected': 'FAILURE'}],
-             [{'Tables': [{"State": "FAILURE"}]}],
-             'FAILURE'),
-            ([{'state': 'failure', 'matcher': 'pathAny',
-               'argument': 'Tables[].State', 'expected': 'FAILURE'}],
-             [{'Tables': [{"State": "FAILURE"}]}],
-             'FAILURE'),
-            ([{'state': 'failure', 'matcher': 'status', 'expected': 404}],
-             [{'ResponseMetadata': {'HTTPStatusCode': 404}}],
-             '404'),
-            ([{'state': 'failure', 'matcher': 'error', 'expected': 'FailError'}],
-             [{'Error': {'Code': 'FailError', 'Message': 'foo'}}],
-             'FailError'),
-            ([{'state': 'retry', 'matcher': 'error', 'expected': 'RetryMe'}],
-             [{'Success': False}]*4,
-             'Max attempts exceeded'),
-            ([
-                {'state': 'success', 'matcher': 'status', 'expected': 200},
-                {'state': 'retry', 'matcher': 'error', 'expected': 'RetryMe'},
-            ],
-             [{'Success': False},
-              {'Error': {'Code': 'RetryMe', 'Message': 'foo'}},
-              {'Success': False},
-              {'Success': False},
-              ],
-             'Previously accepted state'),
+            (
+                [
+                    {
+                        'state': 'failure',
+                        'matcher': 'path',
+                        'argument': 'Foo',
+                        'expected': 'FAILURE',
+                    }
+                ],
+                [{'Foo': 'FAILURE'}],
+                'FAILURE',
+            ),
+            (
+                [
+                    {
+                        'state': 'failure',
+                        'matcher': 'pathAll',
+                        'argument': 'Tables[].State',
+                        'expected': 'FAILURE',
+                    }
+                ],
+                [{'Tables': [{"State": "FAILURE"}]}],
+                'FAILURE',
+            ),
+            (
+                [
+                    {
+                        'state': 'failure',
+                        'matcher': 'pathAny',
+                        'argument': 'Tables[].State',
+                        'expected': 'FAILURE',
+                    }
+                ],
+                [{'Tables': [{"State": "FAILURE"}]}],
+                'FAILURE',
+            ),
+            (
+                [{'state': 'failure', 'matcher': 'status', 'expected': 404}],
+                [{'ResponseMetadata': {'HTTPStatusCode': 404}}],
+                '404',
+            ),
+            (
+                [
+                    {
+                        'state': 'failure',
+                        'matcher': 'error',
+                        'expected': 'FailError',
+                    }
+                ],
+                [{'Error': {'Code': 'FailError', 'Message': 'foo'}}],
+                'FailError',
+            ),
+            (
+                [
+                    {
+                        'state': 'retry',
+                        'matcher': 'error',
+                        'expected': 'RetryMe',
+                    }
+                ],
+                [{'Success': False}] * 4,
+                'Max attempts exceeded',
+            ),
+            (
+                [
+                    {'state': 'success', 'matcher': 'status', 'expected': 200},
+                    {
+                        'state': 'retry',
+                        'matcher': 'error',
+                        'expected': 'RetryMe',
+                    },
+                ],
+                [
+                    {'Success': False},
+                    {'Error': {'Code': 'RetryMe', 'Message': 'foo'}},
+                    {'Success': False},
+                    {'Success': False},
+                ],
+                'Previously accepted state',
+            ),
         ]
 
         for acceptors, responses, expected_msg in test_cases:
-            self._assert_failure_state_error_raised(acceptors, responses, expected_msg)
+            self._assert_failure_state_error_raised(
+                acceptors, responses, expected_msg
+            )
 
     def test_waiter_transitions_to_failure_state(self):
         acceptors = [
@@ -502,7 +632,7 @@ class TestWaitersObjects(unittest.TestCa
             # causes the waiter to fail fast.
             {'Error': {'Code': 'FailError', 'Message': 'foo'}},
             {'WillNeverGetCalled': True},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         with self.assertRaises(WaiterError):
@@ -517,16 +647,14 @@ class TestWaitersObjects(unittest.TestCa
             {'state': 'success', 'matcher': 'status', 'expected': 200},
             {'state': 'retry', 'matcher': 'error', 'expected': 'RetryMe'},
         ]
-        config = self.create_waiter_config(
-            acceptors=acceptor_with_retry_state)
+        config = self.create_waiter_config(acceptors=acceptor_with_retry_state)
         operation_method = mock.Mock()
         self.client_responses_are(
             {'Nothing': 'foo'},
             {'Error': {'Code': 'RetryMe', 'Message': 'foo'}},
-            {'Success': True,
-             'ResponseMetadata': {'HTTPStatusCode': 200}},
+            {'Success': True, 'ResponseMetadata': {'HTTPStatusCode': 200}},
             {'NeverCalled': True},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         waiter.wait()
@@ -539,13 +667,12 @@ class TestWaitersObjects(unittest.TestCa
         config = self.create_waiter_config(acceptors=acceptors)
         operation_method = mock.Mock()
         self.client_responses_are(
-            {'Error': {'Code': 'MyError'}},
-            for_operation=operation_method)
+            {'Error': {'Code': 'MyError'}}, for_operation=operation_method
+        )
         waiter = Waiter('MyWaiter', config, operation_method)
         waiter.wait(Foo='foo', Bar='bar', Baz='baz')
 
-        operation_method.assert_called_with(Foo='foo', Bar='bar',
-                                            Baz='baz')
+        operation_method.assert_called_with(Foo='foo', Bar='bar', Baz='baz')
 
     @mock.patch('time.sleep')
     def test_waiter_honors_delay_time_between_retries(self, sleep_mock):
@@ -560,7 +687,7 @@ class TestWaitersObjects(unittest.TestCa
             {'Success': False},
             {'Success': False},
             {'Success': False},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         with self.assertRaises(WaiterError):
@@ -579,7 +706,7 @@ class TestWaitersObjects(unittest.TestCa
             {'Success': False},
             {'Success': False},
             {'Success': False},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         custom_delay = 3
@@ -597,7 +724,7 @@ class TestWaitersObjects(unittest.TestCa
         self.client_responses_are(
             {'Success': False},
             {'Success': False},
-            for_operation=operation_method
+            for_operation=operation_method,
         )
         waiter = Waiter('MyWaiter', config, operation_method)
         custom_max = 2
@@ -630,7 +757,7 @@ class TestCreateWaiter(unittest.TestCase
                 'Foo': {
                     'name': 'Foo',
                     'input': {'shape': 'FooInputOutput'},
-                    'output': {'shape': 'FooInputOutput'}
+                    'output': {'shape': 'FooInputOutput'},
                 }
             },
             'shapes': {
@@ -639,14 +766,12 @@ class TestCreateWaiter(unittest.TestCase
                     'members': {
                         'bar': {
                             'shape': 'String',
-                            'documentation': 'Documents bar'
+                            'documentation': 'Documents bar',
                         }
-                    }
+                    },
                 },
-                'String': {
-                    'type': 'string'
-                }
-            }
+                'String': {'type': 'string'},
+            },
         }
         self.service_model = ServiceModel(self.service_json_model, 'myservice')
         self.client = mock.Mock()
@@ -655,29 +780,33 @@ class TestCreateWaiter(unittest.TestCase
     def test_can_create_waiter_from_client(self):
         waiter_name = 'WaiterName'
         waiter = create_waiter_with_client(
-            waiter_name, self.waiter_model, self.client)
+            waiter_name, self.waiter_model, self.client
+        )
         self.assertIsInstance(waiter, Waiter)
 
     def test_waiter_class_name(self):
         waiter_name = 'WaiterName'
         waiter = create_waiter_with_client(
-            waiter_name, self.waiter_model, self.client)
+            waiter_name, self.waiter_model, self.client
+        )
         self.assertEqual(
-            waiter.__class__.__name__,
-            'MyService.Waiter.WaiterName'
+            waiter.__class__.__name__, 'MyService.Waiter.WaiterName'
         )
 
     def test_waiter_help_documentation(self):
         waiter_name = 'WaiterName'
         waiter = create_waiter_with_client(
-            waiter_name, self.waiter_model, self.client)
+            waiter_name, self.waiter_model, self.client
+        )
         with mock.patch('sys.stdout', io.StringIO()) as mock_stdout:
             help(waiter.wait)
         content = mock_stdout.getvalue()
         lines = [
-            ('    Polls :py:meth:`MyService.Client.foo` every 1 '
-             'seconds until a successful state is reached. An error '
-             'is returned after 1 failed checks.'),
+            (
+                '    Polls :py:meth:`MyService.Client.foo` every 1 '
+                'seconds until a successful state is reached. An error '
+                'is returned after 1 failed checks.'
+            ),
             '    **Request Syntax**',
             '    ::',
             '      waiter.wait(',
@@ -704,9 +833,7 @@ class TestOperationMethods(unittest.Test
         # occurs, but we need to return the parsed error response.
         client_method = mock.Mock()
         op = NormalizedOperationMethod(client_method)
-        parsed_response = {
-            'Error': {'Code': 'Foo', 'Message': 'bar'}
-        }
+        parsed_response = {'Error': {'Code': 'Foo', 'Message': 'bar'}}
         exception = ClientError(parsed_response, 'OperationName')
         client_method.side_effect = exception
         actual_response = op(Foo='a', Bar='b')
@@ -718,73 +845,79 @@ class ServiceWaiterFunctionalTest(BaseEn
     This class is used as a base class if you want to functionally test the
     waiters for a specific service.
     """
+
     def setUp(self):
-        super(ServiceWaiterFunctionalTest, self).setUp()
+        super().setUp()
         self.data_path = os.path.join(
-            os.path.dirname(botocore.__file__), 'data')
+            os.path.dirname(botocore.__file__), 'data'
+        )
         self.environ['AWS_DATA_PATH'] = self.data_path
         self.loader = Loader([self.data_path])
 
     def get_waiter_model(self, service):
         """Get the waiter model for the service."""
-        with mock.patch('botocore.loaders.Loader.list_available_services',
-                        return_value=[service]):
-            return WaiterModel(self.loader.load_service_model(
-                service, type_name='waiters-2'))
+        with mock.patch(
+            'botocore.loaders.Loader.list_available_services',
+            return_value=[service],
+        ):
+            return WaiterModel(
+                self.loader.load_service_model(service, type_name='waiters-2')
+            )
 
     def get_service_model(self, service):
         """Get the service model for the service."""
-        with mock.patch('botocore.loaders.Loader.list_available_services',
-                        return_value=[service]):
+        with mock.patch(
+            'botocore.loaders.Loader.list_available_services',
+            return_value=[service],
+        ):
             return ServiceModel(
-                self.loader.load_service_model(
-                    service, type_name='service-2'),
-                service_name=service
+                self.loader.load_service_model(service, type_name='service-2'),
+                service_name=service,
             )
 
 
 class CloudFrontWaitersTest(ServiceWaiterFunctionalTest):
     def setUp(self):
-        super(CloudFrontWaitersTest, self).setUp()
+        super().setUp()
         self.client = mock.Mock()
         self.service = 'cloudfront'
 
     def assert_distribution_deployed_call_count(self):
         waiter_name = 'DistributionDeployed'
         waiter_model = self.get_waiter_model(self.service)
-        self.client.meta.service_model = self.get_service_model(
-            self.service)
+        self.client.meta.service_model = self.get_service_model(self.service)
         self.client.get_distribution.side_effect = [
             {'Distribution': {'Status': 'Deployed'}}
         ]
-        waiter = create_waiter_with_client(waiter_name, waiter_model,
-                                           self.client)
+        waiter = create_waiter_with_client(
+            waiter_name, waiter_model, self.client
+        )
         waiter.wait()
         self.assertEqual(self.client.get_distribution.call_count, 1)
 
     def assert_invalidation_completed_call_count(self):
         waiter_name = 'InvalidationCompleted'
         waiter_model = self.get_waiter_model(self.service)
-        self.client.meta.service_model = self.get_service_model(
-            self.service)
+        self.client.meta.service_model = self.get_service_model(self.service)
         self.client.get_invalidation.side_effect = [
             {'Invalidation': {'Status': 'Completed'}}
         ]
-        waiter = create_waiter_with_client(waiter_name, waiter_model,
-                                           self.client)
+        waiter = create_waiter_with_client(
+            waiter_name, waiter_model, self.client
+        )
         waiter.wait()
         self.assertEqual(self.client.get_invalidation.call_count, 1)
 
     def assert_streaming_distribution_deployed_call_count(self):
         waiter_name = 'StreamingDistributionDeployed'
         waiter_model = self.get_waiter_model(self.service)
-        self.client.meta.service_model = self.get_service_model(
-            self.service)
+        self.client.meta.service_model = self.get_service_model(self.service)
         self.client.get_streaming_distribution.side_effect = [
             {'StreamingDistribution': {'Status': 'Deployed'}}
         ]
-        waiter = create_waiter_with_client(waiter_name, waiter_model,
-                                           self.client)
+        waiter = create_waiter_with_client(
+            waiter_name, waiter_model, self.client
+        )
         waiter.wait()
         self.assertEqual(self.client.get_streaming_distribution.call_count, 1)
 
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/__init__.py 2.31.35-1/tests/unit/customizations/cloudformation/__init__.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import copy
-
 import unittest
+
 import ruamel.yaml as yaml
 
 unittest.TestCase.assertItemsEqual = unittest.TestCase.assertCountEqual
@@ -29,10 +29,12 @@ class BaseYAMLTest(unittest.TestCase):
     CLI command runs because we do not run multiple commands that differ
     in YAML loading logic in a single process.
     """
+
     def setUp(self):
         super(BaseYAMLTest, self).setUp()
         self.original_implicit_resolvers = copy.deepcopy(
-            yaml.resolver.implicit_resolvers)
+            yaml.resolver.implicit_resolvers
+        )
 
     def tearDown(self):
         super(BaseYAMLTest, self).tearDown()
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/test_artifact_exporter.py 2.31.35-1/tests/unit/customizations/cloudformation/test_artifact_exporter.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/test_artifact_exporter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/test_artifact_exporter.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,38 +1,54 @@
-import botocore.session
-import tempfile
 import os
-import string
 import random
+import string
+import tempfile
 import zipfile
+from contextlib import closing, contextmanager
 
+import botocore.session
 import pytest
-
-from contextlib import contextmanager, closing
 from botocore.stub import Stubber
-from awscli.testutils import mock, FileCreator
+
 from awscli.customizations.cloudformation import exceptions
-from awscli.customizations.cloudformation.artifact_exporter \
-    import is_s3_url, parse_s3_url, is_local_file, is_local_folder, \
-    upload_local_artifacts, zip_folder, make_abs_path, make_zip, \
-    Template, Resource, ResourceWithS3UrlDict, ServerlessApiResource, \
-    ServerlessFunctionResource, GraphQLSchemaResource, \
-    LambdaFunctionResource, ApiGatewayRestApiResource, \
-    ElasticBeanstalkApplicationVersion, CloudFormationStackResource, \
-    ServerlessApplicationResource, LambdaLayerVersionResource, \
-    copy_to_temp_dir, include_transform_export_handler, GLOBAL_EXPORT_DICT, \
-    ServerlessLayerVersionResource, ServerlessRepoApplicationLicense, \
-    ServerlessRepoApplicationReadme, \
-    AppSyncResolverRequestTemplateResource, \
-    AppSyncResolverResponseTemplateResource, \
-    AppSyncFunctionConfigurationRequestTemplateResource, \
-    AppSyncFunctionConfigurationResponseTemplateResource, \
-    GlueJobCommandScriptLocationResource, \
-    StepFunctionsStateMachineDefinitionResource, \
-    ServerlessStateMachineDefinitionResource, \
-    CodeCommitRepositoryS3Resource
+from awscli.customizations.cloudformation.artifact_exporter import (
+    GLOBAL_EXPORT_DICT,
+    ApiGatewayRestApiResource,
+    AppSyncFunctionConfigurationRequestTemplateResource,
+    AppSyncFunctionConfigurationResponseTemplateResource,
+    AppSyncResolverRequestTemplateResource,
+    AppSyncResolverResponseTemplateResource,
+    CloudFormationStackResource,
+    CodeCommitRepositoryS3Resource,
+    ElasticBeanstalkApplicationVersion,
+    GlueJobCommandScriptLocationResource,
+    GraphQLSchemaResource,
+    LambdaFunctionResource,
+    LambdaLayerVersionResource,
+    Resource,
+    ResourceWithS3UrlDict,
+    ServerlessApiResource,
+    ServerlessApplicationResource,
+    ServerlessFunctionResource,
+    ServerlessLayerVersionResource,
+    ServerlessRepoApplicationLicense,
+    ServerlessRepoApplicationReadme,
+    ServerlessStateMachineDefinitionResource,
+    StepFunctionsStateMachineDefinitionResource,
+    Template,
+    copy_to_temp_dir,
+    include_transform_export_handler,
+    is_local_file,
+    is_local_folder,
+    is_s3_url,
+    make_abs_path,
+    make_zip,
+    parse_s3_url,
+    upload_local_artifacts,
+    zip_folder,
+)
+from awscli.testutils import FileCreator, mock
 from tests.unit.customizations.cloudformation import BaseYAMLTest
 
-
 VALID_CASES = [
     "s3://foo/bar",
     "s3://foo/bar/baz/cat/dog",
@@ -47,25 +63,18 @@ INVALID_CASES = [
     # For purposes of exporter, we need S3 URLs to point to an object
     # and not a bucket
     "s3://foo",
-
     # two versionIds is invalid
     "https://s3-eu-west-1.amazonaws.com/bucket/key",
-    "https://www.amazon.com"
+    "https://www.amazon.com",
 ]
 
 
-@pytest.mark.parametrize(
-    "url",
-    VALID_CASES
-)
+@pytest.mark.parametrize("url", VALID_CASES)
 def test_is_valid_s3_url(url):
     assert is_s3_url(url), f"{url} should be valid"
 
 
-@pytest.mark.parametrize(
-    "url",
-    INVALID_CASES
-)
+@pytest.mark.parametrize("url", INVALID_CASES)
 def test_is_invalid_s3_url(url):
     assert not is_s3_url(url), f"{url} should be invalid"
 
@@ -73,112 +82,83 @@ def test_is_invalid_s3_url(url):
 UPLOADED_S3_URL = "s3://foo/bar?versionId=baz"
 
 RESOURCE_EXPORT_TEST_CASES = [
-    {
-        "class": ServerlessFunctionResource,
-        "expected_result": UPLOADED_S3_URL
-    },
-
-    {
-        "class": ServerlessApiResource,
-        "expected_result": UPLOADED_S3_URL
-    },
-
-    {
-        "class": GraphQLSchemaResource,
-        "expected_result": UPLOADED_S3_URL
-    },
-
+    {"class": ServerlessFunctionResource, "expected_result": UPLOADED_S3_URL},
+    {"class": ServerlessApiResource, "expected_result": UPLOADED_S3_URL},
+    {"class": GraphQLSchemaResource, "expected_result": UPLOADED_S3_URL},
     {
         "class": AppSyncResolverRequestTemplateResource,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
-
     {
         "class": AppSyncResolverResponseTemplateResource,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
-
     {
         "class": AppSyncFunctionConfigurationRequestTemplateResource,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
-
     {
         "class": AppSyncFunctionConfigurationResponseTemplateResource,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
-
     {
         "class": ApiGatewayRestApiResource,
-        "expected_result": {
-            "Bucket": "foo", "Key": "bar", "Version": "baz"
-        }
+        "expected_result": {"Bucket": "foo", "Key": "bar", "Version": "baz"},
     },
-
     {
         "class": LambdaFunctionResource,
         "expected_result": {
-            "S3Bucket": "foo", "S3Key": "bar", "S3ObjectVersion": "baz"
-        }
+            "S3Bucket": "foo",
+            "S3Key": "bar",
+            "S3ObjectVersion": "baz",
+        },
     },
-
     {
         "class": ElasticBeanstalkApplicationVersion,
-        "expected_result": {
-            "S3Bucket": "foo", "S3Key": "bar"
-        }
+        "expected_result": {"S3Bucket": "foo", "S3Key": "bar"},
     },
     {
         "class": LambdaLayerVersionResource,
         "expected_result": {
-            "S3Bucket": "foo", "S3Key": "bar", "S3ObjectVersion": "baz"
-        }
+            "S3Bucket": "foo",
+            "S3Key": "bar",
+            "S3ObjectVersion": "baz",
+        },
     },
     {
         "class": ServerlessLayerVersionResource,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
     {
         "class": ServerlessRepoApplicationReadme,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
     {
         "class": ServerlessRepoApplicationLicense,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
     {
         "class": ServerlessRepoApplicationLicense,
-        "expected_result": UPLOADED_S3_URL
+        "expected_result": UPLOADED_S3_URL,
     },
     {
         "class": GlueJobCommandScriptLocationResource,
-        "expected_result": {
-                "ScriptLocation": UPLOADED_S3_URL
-        }
+        "expected_result": {"ScriptLocation": UPLOADED_S3_URL},
     },
     {
         "class": StepFunctionsStateMachineDefinitionResource,
-        "expected_result": {
-            "Bucket": "foo", "Key": "bar", "Version": "baz"
-        }
+        "expected_result": {"Bucket": "foo", "Key": "bar", "Version": "baz"},
     },
     {
         "class": ServerlessStateMachineDefinitionResource,
-        "expected_result": {
-            "Bucket": "foo", "Key": "bar", "Version": "baz"
-        }
+        "expected_result": {"Bucket": "foo", "Key": "bar", "Version": "baz"},
     },
 ]
 
 
-@pytest.mark.parametrize(
-    "test",
-    RESOURCE_EXPORT_TEST_CASES
-)
+@pytest.mark.parametrize("test", RESOURCE_EXPORT_TEST_CASES)
 def test_all_resources_export(test):
-    mock_path = (
-        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
-    )
+    mock_path = "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
     with mock.patch(mock_path) as upload_local_artifacts_mock:
         _helper_verify_export_resources(
             test["class"], upload_local_artifacts_mock, test["expected_result"]
@@ -188,7 +168,6 @@ def test_all_resources_export(test):
 def _helper_verify_export_resources(
     test_class, upload_local_artifacts_mock, expected_result
 ):
-
     s3_uploader_mock = mock.Mock()
     upload_local_artifacts_mock.reset_mock()
 
@@ -198,26 +177,23 @@ def _helper_verify_export_resources(
     if '.' in test_class.PROPERTY_NAME:
         reversed_property_names = test_class.PROPERTY_NAME.split('.')
         reversed_property_names.reverse()
-        property_dict = {
-            reversed_property_names[0]: "foo"
-        }
+        property_dict = {reversed_property_names[0]: "foo"}
         for sub_property_name in reversed_property_names[1:]:
-            property_dict = {
-                sub_property_name: property_dict
-            }
+            property_dict = {sub_property_name: property_dict}
         resource_dict = property_dict
     else:
-        resource_dict = {
-            test_class.PROPERTY_NAME: "foo"
-        }
+        resource_dict = {test_class.PROPERTY_NAME: "foo"}
 
     upload_local_artifacts_mock.return_value = UPLOADED_S3_URL
     resource_obj = test_class(s3_uploader_mock)
     resource_obj.export(resource_id, resource_dict, parent_dir)
 
     upload_local_artifacts_mock.assert_called_once_with(
-        resource_id, resource_dict, test_class.PROPERTY_NAME,
-        parent_dir, s3_uploader_mock
+        resource_id,
+        resource_dict,
+        test_class.PROPERTY_NAME,
+        parent_dir,
+        s3_uploader_mock,
     )
     if '.' in test_class.PROPERTY_NAME:
         top_level_property_name = test_class.PROPERTY_NAME.split('.')[0]
@@ -229,51 +205,52 @@ def _helper_verify_export_resources(
 
 
 class TestArtifactExporter(BaseYAMLTest):
-
     def setUp(self):
         super(TestArtifactExporter, self).setUp()
         self.s3_uploader_mock = mock.Mock()
-        self.s3_uploader_mock.s3.meta.endpoint_url = "https://s3.some-valid-region.amazonaws.com"
+        self.s3_uploader_mock.s3.meta.endpoint_url = (
+            "https://s3.some-valid-region.amazonaws.com"
+        )
 
     def test_parse_s3_url(self):
-
         valid = [
-            {
-                "url": "s3://foo/bar",
-                "result": {"Bucket": "foo", "Key": "bar"}
-            },
+            {"url": "s3://foo/bar", "result": {"Bucket": "foo", "Key": "bar"}},
             {
                 "url": "s3://foo/bar/cat/dog",
-                "result": {"Bucket": "foo", "Key": "bar/cat/dog"}
+                "result": {"Bucket": "foo", "Key": "bar/cat/dog"},
             },
             {
                 "url": "s3://foo/bar/baz?versionId=abc&param1=val1&param2=val2",
-                "result": {"Bucket": "foo", "Key": "bar/baz", "VersionId": "abc"}
+                "result": {
+                    "Bucket": "foo",
+                    "Key": "bar/baz",
+                    "VersionId": "abc",
+                },
             },
             {
                 # VersionId is not returned if there are more than one versionId
                 # keys in query parameter
                 "url": "s3://foo/bar/baz?versionId=abc&versionId=123",
-                "result": {"Bucket": "foo", "Key": "bar/baz"}
-            }
+                "result": {"Bucket": "foo", "Key": "bar/baz"},
+            },
         ]
 
         invalid = [
-
             # For purposes of exporter, we need S3 URLs to point to an object
             # and not a bucket
             "s3://foo",
-
             # two versionIds is invalid
             "https://s3-eu-west-1.amazonaws.com/bucket/key",
-            "https://www.amazon.com"
+            "https://www.amazon.com",
         ]
 
         for config in valid:
-            result = parse_s3_url(config["url"],
-                                  bucket_name_property="Bucket",
-                                  object_key_property="Key",
-                                  version_property="VersionId")
+            result = parse_s3_url(
+                config["url"],
+                bucket_name_property="Bucket",
+                object_key_property="Key",
+                version_property="VersionId",
+            )
 
             self.assertEqual(result, config["result"])
 
@@ -291,7 +268,9 @@ class TestArtifactExporter(BaseYAMLTest)
             self.assertTrue(is_local_folder(filename))
             self.assertFalse(is_local_file(filename))
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
     def test_upload_local_artifacts_local_file(self, zip_and_upload_mock):
         # Case 1: Artifact path is a relative path
         # Verifies that we package local artifacts appropriately
@@ -307,22 +286,30 @@ class TestArtifactExporter(BaseYAMLTest)
             parent_dir = tempfile.gettempdir()
 
             resource_dict = {property_name: artifact_path}
-            result = upload_local_artifacts(resource_id,
-                                            resource_dict,
-                                            property_name,
-                                            parent_dir,
-                                            self.s3_uploader_mock)
+            result = upload_local_artifacts(
+                resource_id,
+                resource_dict,
+                property_name,
+                parent_dir,
+                self.s3_uploader_mock,
+            )
             self.assertEqual(result, expected_s3_url)
 
             # Internally the method would convert relative paths to absolute
             # path, with respect to the parent directory
             absolute_artifact_path = make_abs_path(parent_dir, artifact_path)
-            self.s3_uploader_mock.upload_with_dedup.assert_called_with(absolute_artifact_path)
+            self.s3_uploader_mock.upload_with_dedup.assert_called_with(
+                absolute_artifact_path
+            )
 
             zip_and_upload_mock.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
-    def test_upload_local_artifacts_local_file_abs_path(self, zip_and_upload_mock):
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
+    def test_upload_local_artifacts_local_file_abs_path(
+        self, zip_and_upload_mock
+    ):
         # Case 2: Artifact path is an absolute path
         # Verifies that we package local artifacts appropriately
         property_name = "property"
@@ -336,17 +323,23 @@ class TestArtifactExporter(BaseYAMLTest)
             artifact_path = make_abs_path(parent_dir, handle.name)
 
             resource_dict = {property_name: artifact_path}
-            result = upload_local_artifacts(resource_id,
-                                            resource_dict,
-                                            property_name,
-                                            parent_dir,
-                                            self.s3_uploader_mock)
+            result = upload_local_artifacts(
+                resource_id,
+                resource_dict,
+                property_name,
+                parent_dir,
+                self.s3_uploader_mock,
+            )
             self.assertEqual(result, expected_s3_url)
 
-            self.s3_uploader_mock.upload_with_dedup.assert_called_with(artifact_path)
+            self.s3_uploader_mock.upload_with_dedup.assert_called_with(
+                artifact_path
+            )
             zip_and_upload_mock.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
     def test_upload_local_artifacts_local_folder(self, zip_and_upload_mock):
         property_name = "property"
         resource_id = "resource_id"
@@ -360,19 +353,24 @@ class TestArtifactExporter(BaseYAMLTest)
             parent_dir = tempfile.gettempdir()
             resource_dict = {property_name: artifact_path}
 
-            result = upload_local_artifacts(resource_id,
-                                            resource_dict,
-                                            property_name,
-                                            parent_dir,
-                                            mock.Mock())
+            result = upload_local_artifacts(
+                resource_id,
+                resource_dict,
+                property_name,
+                parent_dir,
+                mock.Mock(),
+            )
             self.assertEqual(result, expected_s3_url)
 
             absolute_artifact_path = make_abs_path(parent_dir, artifact_path)
 
-            zip_and_upload_mock.assert_called_once_with(absolute_artifact_path,
-                                                        mock.ANY)
+            zip_and_upload_mock.assert_called_once_with(
+                absolute_artifact_path, mock.ANY
+            )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
     def test_upload_local_artifacts_no_path(self, zip_and_upload_mock):
         property_name = "property"
         resource_id = "resource_id"
@@ -384,19 +382,22 @@ class TestArtifactExporter(BaseYAMLTest)
         resource_dict = {}
         parent_dir = tempfile.gettempdir()
 
-        result = upload_local_artifacts(resource_id,
-                                        resource_dict,
-                                        property_name,
-                                        parent_dir,
-                                        self.s3_uploader_mock)
+        result = upload_local_artifacts(
+            resource_id,
+            resource_dict,
+            property_name,
+            parent_dir,
+            self.s3_uploader_mock,
+        )
         self.assertEqual(result, expected_s3_url)
 
         zip_and_upload_mock.assert_called_once_with(parent_dir, mock.ANY)
         self.s3_uploader_mock.upload_with_dedup.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
-    def test_upload_local_artifacts_s3_url(self,
-                                           zip_and_upload_mock):
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
+    def test_upload_local_artifacts_s3_url(self, zip_and_upload_mock):
         property_name = "property"
         resource_id = "resource_id"
         object_s3_url = "s3://foo/bar?versionId=baz"
@@ -405,17 +406,21 @@ class TestArtifactExporter(BaseYAMLTest)
         resource_dict = {property_name: object_s3_url}
         parent_dir = tempfile.gettempdir()
 
-        result = upload_local_artifacts(resource_id,
-                                        resource_dict,
-                                        property_name,
-                                        parent_dir,
-                                        self.s3_uploader_mock)
+        result = upload_local_artifacts(
+            resource_id,
+            resource_dict,
+            property_name,
+            parent_dir,
+            self.s3_uploader_mock,
+        )
         self.assertEqual(result, object_s3_url)
 
         zip_and_upload_mock.assert_not_called()
         self.s3_uploader_mock.upload_with_dedup.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
     def test_upload_local_artifacts_invalid_value(self, zip_and_upload_mock):
         property_name = "property"
         resource_id = "resource_id"
@@ -424,25 +429,31 @@ class TestArtifactExporter(BaseYAMLTest)
         with self.assertRaises(exceptions.InvalidLocalPathError):
             non_existent_file = "some_random_filename"
             resource_dict = {property_name: non_existent_file}
-            upload_local_artifacts(resource_id,
-                                   resource_dict,
-                                   property_name,
-                                   parent_dir,
-                                   self.s3_uploader_mock)
+            upload_local_artifacts(
+                resource_id,
+                resource_dict,
+                property_name,
+                parent_dir,
+                self.s3_uploader_mock,
+            )
 
         with self.assertRaises(exceptions.InvalidLocalPathError):
             non_existent_file = ["invalid datatype"]
             resource_dict = {property_name: non_existent_file}
-            upload_local_artifacts(resource_id,
-                                   resource_dict,
-                                   property_name,
-                                   parent_dir,
-                                   self.s3_uploader_mock)
+            upload_local_artifacts(
+                resource_id,
+                resource_dict,
+                property_name,
+                parent_dir,
+                self.s3_uploader_mock,
+            )
 
         zip_and_upload_mock.assert_not_called()
         self.s3_uploader_mock.upload_with_dedup.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.make_zip")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.make_zip"
+    )
     def test_zip_folder(self, make_zip_mock):
         zip_file_name = "name.zip"
         make_zip_mock.return_value = zip_file_name
@@ -453,7 +464,9 @@ class TestArtifactExporter(BaseYAMLTest)
 
         make_zip_mock.assert_called_once_with(mock.ANY, dirname)
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
     def test_resource(self, upload_local_artifacts_mock):
         # Property value is a path to file
 
@@ -472,21 +485,35 @@ class TestArtifactExporter(BaseYAMLTest)
 
         resource.export(resource_id, resource_dict, parent_dir)
 
-        upload_local_artifacts_mock.assert_called_once_with(resource_id,
-                                                            resource_dict,
-                                                            resource.PROPERTY_NAME,
-                                                            parent_dir,
-                                                            self.s3_uploader_mock)
+        upload_local_artifacts_mock.assert_called_once_with(
+            resource_id,
+            resource_dict,
+            resource.PROPERTY_NAME,
+            parent_dir,
+            self.s3_uploader_mock,
+        )
 
         self.assertEqual(resource_dict[resource.PROPERTY_NAME], s3_url)
 
     @mock.patch("shutil.rmtree")
     @mock.patch("zipfile.is_zipfile")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_resource_with_force_zip_on_regular_file(self, is_local_file_mock, \
-        zip_and_upload_mock, copy_to_temp_dir_mock, is_zipfile_mock, rmtree_mock):
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_resource_with_force_zip_on_regular_file(
+        self,
+        is_local_file_mock,
+        zip_and_upload_mock,
+        copy_to_temp_dir_mock,
+        is_zipfile_mock,
+        rmtree_mock,
+    ):
         # Property value is a path to file and FORCE_ZIP is True
 
         class MockResource(Resource):
@@ -506,7 +533,6 @@ class TestArtifactExporter(BaseYAMLTest)
         is_local_file_mock.return_value = True
 
         with self.make_temp_dir() as tmp_dir:
-
             copy_to_temp_dir_mock.return_value = tmp_dir
 
             # This is not a zip file
@@ -521,11 +547,23 @@ class TestArtifactExporter(BaseYAMLTest)
 
     @mock.patch("shutil.rmtree")
     @mock.patch("zipfile.is_zipfile")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_resource_with_force_zip_on_zip_file(self, is_local_file_mock, \
-        zip_and_upload_mock, copy_to_temp_dir_mock, is_zipfile_mock, rmtree_mock):
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_resource_with_force_zip_on_zip_file(
+        self,
+        is_local_file_mock,
+        zip_and_upload_mock,
+        copy_to_temp_dir_mock,
+        is_zipfile_mock,
+        rmtree_mock,
+    ):
         # Property value is a path to zip file and FORCE_ZIP is True
         # We should *not* re-zip an existing zip
 
@@ -558,12 +596,23 @@ class TestArtifactExporter(BaseYAMLTest)
 
     @mock.patch("shutil.rmtree")
     @mock.patch("zipfile.is_zipfile")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.zip_and_upload")
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_resource_without_force_zip(self, is_local_file_mock, \
-        zip_and_upload_mock, copy_to_temp_dir_mock, is_zipfile_mock, rmtree_mock):
-
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.copy_to_temp_dir"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.zip_and_upload"
+    )
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_resource_without_force_zip(
+        self,
+        is_local_file_mock,
+        zip_and_upload_mock,
+        copy_to_temp_dir_mock,
+        is_zipfile_mock,
+        rmtree_mock,
+    ):
         class MockResourceNoForceZip(Resource):
             PROPERTY_NAME = "foo"
 
@@ -590,12 +639,15 @@ class TestArtifactExporter(BaseYAMLTest)
         is_zipfile_mock.assert_called_once_with(original_path)
         assert resource_dict[resource.PROPERTY_NAME] == s3_url
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
     def test_resource_empty_property_value(self, upload_local_artifacts_mock):
         # Property value is empty
 
         class MockResource(Resource):
             PROPERTY_NAME = "foo"
+
         resource = MockResource(self.s3_uploader_mock)
 
         resource_id = "id"
@@ -607,14 +659,18 @@ class TestArtifactExporter(BaseYAMLTest)
         upload_local_artifacts_mock.return_value = s3_url
         resource_dict = {}
         resource.export(resource_id, resource_dict, parent_dir)
-        upload_local_artifacts_mock.assert_called_once_with(resource_id,
-                                                            resource_dict,
-                                                            resource.PROPERTY_NAME,
-                                                            parent_dir,
-                                                            self.s3_uploader_mock)
+        upload_local_artifacts_mock.assert_called_once_with(
+            resource_id,
+            resource_dict,
+            resource.PROPERTY_NAME,
+            parent_dir,
+            self.s3_uploader_mock,
+        )
         self.assertEqual(resource_dict[resource.PROPERTY_NAME], s3_url)
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
     def test_resource_property_value_dict(self, upload_local_artifacts_mock):
         # Property value is a dictionary. Export should not upload anything
 
@@ -635,8 +691,12 @@ class TestArtifactExporter(BaseYAMLTest)
         upload_local_artifacts_mock.assert_not_called()
         self.assertEqual(resource_dict, {"foo": {"a": "b"}})
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
-    def test_resource_has_package_null_property_to_false(self, upload_local_artifacts_mock):
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
+    def test_resource_has_package_null_property_to_false(
+        self, upload_local_artifacts_mock
+    ):
         # Should not upload anything if PACKAGE_NULL_PROPERTY is set to False
 
         class MockResource(Resource):
@@ -656,9 +716,10 @@ class TestArtifactExporter(BaseYAMLTest)
         upload_local_artifacts_mock.assert_not_called()
         self.assertNotIn(resource.PROPERTY_NAME, resource_dict)
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
     def test_resource_export_fails(self, upload_local_artifacts_mock):
-
         class MockResource(Resource):
             PROPERTY_NAME = "foo"
 
@@ -675,7 +736,9 @@ class TestArtifactExporter(BaseYAMLTest)
         with self.assertRaises(exceptions.ExportFailedError):
             resource.export(resource_id, resource_dict, parent_dir)
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.upload_local_artifacts"
+    )
     def test_resource_with_s3_url_dict(self, upload_local_artifacts_mock):
         """
         Checks if we properly export from the Resource classc
@@ -703,19 +766,22 @@ class TestArtifactExporter(BaseYAMLTest)
 
         resource.export(resource_id, resource_dict, parent_dir)
 
-        upload_local_artifacts_mock.assert_called_once_with(resource_id,
-                                                            resource_dict,
-                                                            resource.PROPERTY_NAME,
-                                                            parent_dir,
-                                                            self.s3_uploader_mock)
-
-        self.assertEqual(resource_dict[resource.PROPERTY_NAME], {
-            "b": "bucket",
-            "o": "key1/key2",
-            "v": "SomeVersionNumber"
-        })
+        upload_local_artifacts_mock.assert_called_once_with(
+            resource_id,
+            resource_dict,
+            resource.PROPERTY_NAME,
+            parent_dir,
+            self.s3_uploader_mock,
+        )
+
+        self.assertEqual(
+            resource_dict[resource.PROPERTY_NAME],
+            {"b": "bucket", "o": "key1/key2", "v": "SomeVersionNumber"},
+        )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.Template")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.Template"
+    )
     def test_export_cloudformation_stack(self, TemplateMock):
         stack_resource = CloudFormationStackResource(self.s3_uploader_mock)
 
@@ -730,7 +796,9 @@ class TestArtifactExporter(BaseYAMLTest)
         template_instance_mock.export.return_value = exported_template_dict
 
         self.s3_uploader_mock.upload_with_dedup.return_value = result_s3_url
-        self.s3_uploader_mock.to_path_style_s3_url.return_value = result_path_style_s3_url
+        self.s3_uploader_mock.to_path_style_s3_url.return_value = (
+            result_path_style_s3_url
+        )
 
         with tempfile.NamedTemporaryFile() as handle:
             template_path = handle.name
@@ -739,12 +807,20 @@ class TestArtifactExporter(BaseYAMLTest)
 
             stack_resource.export(resource_id, resource_dict, parent_dir)
 
-            self.assertEqual(resource_dict[property_name], result_path_style_s3_url)
+            self.assertEqual(
+                resource_dict[property_name], result_path_style_s3_url
+            )
 
-            TemplateMock.assert_called_once_with(template_path, parent_dir, self.s3_uploader_mock)
+            TemplateMock.assert_called_once_with(
+                template_path, parent_dir, self.s3_uploader_mock
+            )
             template_instance_mock.export.assert_called_once_with()
-            self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(mock.ANY, "template")
-            self.s3_uploader_mock.to_path_style_s3_url.assert_called_once_with("world", None)
+            self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(
+                mock.ANY, "template"
+            )
+            self.s3_uploader_mock.to_path_style_s3_url.assert_called_once_with(
+                "world", None
+            )
 
     def _assert_stack_template_url_is_not_changed(self, s3_url):
         stack_resource = CloudFormationStackResource(self.s3_uploader_mock)
@@ -765,7 +841,9 @@ class TestArtifactExporter(BaseYAMLTest)
         s3_url = "https://s3.amazonaws.com/hello/world"
         self._assert_stack_template_url_is_not_changed(s3_url)
 
-    def test_export_cloudformation_stack_no_upload_path_is_s3_region_httpsurl(self):
+    def test_export_cloudformation_stack_no_upload_path_is_s3_region_httpsurl(
+        self,
+    ):
         s3_url = "https://s3.some-valid-region.amazonaws.com/hello/world"
         self._assert_stack_template_url_is_not_changed(s3_url)
 
@@ -773,7 +851,9 @@ class TestArtifactExporter(BaseYAMLTest)
         s3_url = "https://bucket.s3.amazonaws.com/key"
         self._assert_stack_template_url_is_not_changed(s3_url)
 
-    def test_export_cloudformation_stack_no_upload_path_is_virtual_region(self):
+    def test_export_cloudformation_stack_no_upload_path_is_virtual_region(
+        self,
+    ):
         s3_url = "https://bucket.s3.some-region.amazonaws.com/key"
         self._assert_stack_template_url_is_not_changed(s3_url)
 
@@ -803,7 +883,9 @@ class TestArtifactExporter(BaseYAMLTest)
                 stack_resource.export(resource_id, resource_dict, "dir")
                 self.s3_uploader_mock.upload_with_dedup.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.Template")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.Template"
+    )
     def test_export_serverless_application(self, TemplateMock):
         stack_resource = ServerlessApplicationResource(self.s3_uploader_mock)
 
@@ -818,7 +900,9 @@ class TestArtifactExporter(BaseYAMLTest)
         template_instance_mock.export.return_value = exported_template_dict
 
         self.s3_uploader_mock.upload_with_dedup.return_value = result_s3_url
-        self.s3_uploader_mock.to_path_style_s3_url.return_value = result_path_style_s3_url
+        self.s3_uploader_mock.to_path_style_s3_url.return_value = (
+            result_path_style_s3_url
+        )
 
         with tempfile.NamedTemporaryFile() as handle:
             template_path = handle.name
@@ -827,12 +911,20 @@ class TestArtifactExporter(BaseYAMLTest)
 
             stack_resource.export(resource_id, resource_dict, parent_dir)
 
-            self.assertEqual(resource_dict[property_name], result_path_style_s3_url)
+            self.assertEqual(
+                resource_dict[property_name], result_path_style_s3_url
+            )
 
-            TemplateMock.assert_called_once_with(template_path, parent_dir, self.s3_uploader_mock)
+            TemplateMock.assert_called_once_with(
+                template_path, parent_dir, self.s3_uploader_mock
+            )
             template_instance_mock.export.assert_called_once_with()
-            self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(mock.ANY, "template")
-            self.s3_uploader_mock.to_path_style_s3_url.assert_called_once_with("world", None)
+            self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(
+                mock.ANY, "template"
+            )
+            self.s3_uploader_mock.to_path_style_s3_url.assert_called_once_with(
+                "world", None
+            )
 
     def test_export_serverless_application_no_upload_path_is_s3url(self):
         stack_resource = ServerlessApplicationResource(self.s3_uploader_mock)
@@ -893,9 +985,11 @@ class TestArtifactExporter(BaseYAMLTest)
         self.assertEqual(resource_dict[property_name], location)
         self.s3_uploader_mock.upload_with_dedup.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.yaml_parse"
+    )
     def test_template_export_metadata(self, yaml_parse_mock):
-        parent_dir = os.path.sep
+        parent_dir = os.path.abspath(os.path.sep)
         template_dir = os.path.join(parent_dir, 'foo', 'bar')
         template_path = os.path.join(template_dir, 'path')
         template_str = self.example_yaml_template()
@@ -912,19 +1006,12 @@ class TestArtifactExporter(BaseYAMLTest)
         metadata_type2_instance = mock.Mock()
         metadata_type2_class.return_value = metadata_type2_instance
 
-        metadata_to_export = [
-            metadata_type1_class,
-            metadata_type2_class
-        ]
+        metadata_to_export = [metadata_type1_class, metadata_type2_class]
 
         template_dict = {
             "Metadata": {
-                "metadata_type1": {
-                    "property_1": "abc"
-                },
-                "metadata_type2": {
-                    "property_2": "def"
-                }
+                "metadata_type1": {"property_1": "abc"},
+                "metadata_type2": {"property_2": "def"},
             }
         }
         open_mock = mock.mock_open()
@@ -932,31 +1019,39 @@ class TestArtifactExporter(BaseYAMLTest)
 
         # Patch the file open method to return template string
         with mock.patch(
-                "awscli.customizations.cloudformation."
-                "artifact_exporter.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
-
+            "awscli.customizations.cloudformation."
+            "artifact_exporter.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             template_exporter = Template(
-                template_path, parent_dir, self.s3_uploader_mock,
-                metadata_to_export=metadata_to_export)
+                template_path,
+                parent_dir,
+                self.s3_uploader_mock,
+                metadata_to_export=metadata_to_export,
+            )
             exported_template = template_exporter.export()
             self.assertEqual(exported_template, template_dict)
 
             open_mock.assert_called_once_with(
-                    make_abs_path(parent_dir, template_path), "r")
+                make_abs_path(parent_dir, template_path), "r"
+            )
 
             self.assertEqual(1, yaml_parse_mock.call_count)
 
             metadata_type1_class.assert_called_once_with(self.s3_uploader_mock)
             metadata_type1_instance.export.assert_called_once_with(
-                "metadata_type1", mock.ANY, template_dir)
+                "metadata_type1", mock.ANY, template_dir
+            )
             metadata_type2_class.assert_called_once_with(self.s3_uploader_mock)
             metadata_type2_instance.export.assert_called_once_with(
-                "metadata_type2", mock.ANY, template_dir)
+                "metadata_type2", mock.ANY, template_dir
+            )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.yaml_parse"
+    )
     def test_template_export(self, yaml_parse_mock):
-        parent_dir = os.path.sep
+        parent_dir = os.path.abspath(os.path.sep)
         template_dir = os.path.join(parent_dir, 'foo', 'bar')
         template_path = os.path.join(template_dir, 'path')
         template_str = self.example_yaml_template()
@@ -970,26 +1065,23 @@ class TestArtifactExporter(BaseYAMLTest)
         resource_type2_instance = mock.Mock()
         resource_type2_class.return_value = resource_type2_instance
 
-        resources_to_export = [
-            resource_type1_class,
-            resource_type2_class
-        ]
+        resources_to_export = [resource_type1_class, resource_type2_class]
 
         properties = {"foo": "bar"}
         template_dict = {
             "Resources": {
                 "Resource1": {
                     "Type": "resource_type1",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource2": {
                     "Type": "resource_type2",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource3": {
                     "Type": "some-other-type",
-                    "Properties": properties
-                }
+                    "Properties": properties,
+                },
             }
         }
 
@@ -998,31 +1090,39 @@ class TestArtifactExporter(BaseYAMLTest)
 
         # Patch the file open method to return template string
         with mock.patch(
-                "awscli.customizations.cloudformation."
-                "artifact_exporter.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
-
+            "awscli.customizations.cloudformation."
+            "artifact_exporter.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             template_exporter = Template(
-                template_path, parent_dir, self.s3_uploader_mock,
-                resources_to_export)
+                template_path,
+                parent_dir,
+                self.s3_uploader_mock,
+                resources_to_export,
+            )
             exported_template = template_exporter.export()
             self.assertEqual(exported_template, template_dict)
 
             open_mock.assert_called_once_with(
-                    make_abs_path(parent_dir, template_path), "r")
+                make_abs_path(parent_dir, template_path), "r"
+            )
 
             self.assertEqual(1, yaml_parse_mock.call_count)
 
             resource_type1_class.assert_called_once_with(self.s3_uploader_mock)
             resource_type1_instance.export.assert_called_once_with(
-                "Resource1", mock.ANY, template_dir)
+                "Resource1", mock.ANY, template_dir
+            )
             resource_type2_class.assert_called_once_with(self.s3_uploader_mock)
             resource_type2_instance.export.assert_called_once_with(
-                "Resource2", mock.ANY, template_dir)
+                "Resource2", mock.ANY, template_dir
+            )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.yaml_parse"
+    )
     def test_template_export_foreach_valid(self, yaml_parse_mock):
-        parent_dir = os.path.sep
+        parent_dir = os.path.abspath(os.path.sep)
         template_dir = os.path.join(parent_dir, 'foo', 'bar')
         template_path = os.path.join(template_dir, 'path')
         template_str = self.example_yaml_template()
@@ -1036,25 +1136,22 @@ class TestArtifactExporter(BaseYAMLTest)
         resource_type2_instance = mock.Mock()
         resource_type2_class.return_value = resource_type2_instance
 
-        resources_to_export = [
-            resource_type1_class,
-            resource_type2_class
-        ]
+        resources_to_export = [resource_type1_class, resource_type2_class]
 
         properties = {"foo": "bar"}
         template_dict = {
             "Resources": {
                 "Resource1": {
                     "Type": "resource_type1",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource2": {
                     "Type": "resource_type2",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource3": {
                     "Type": "some-other-type",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Fn::ForEach::OuterLoopName": [
                     "Identifier1",
@@ -1066,16 +1163,16 @@ class TestArtifactExporter(BaseYAMLTest)
                             {
                                 "Resource${Identifier1}${Identifier2}": {
                                     "Type": "resource_type2",
-                                    "Properties": properties
+                                    "Properties": properties,
                                 }
-                            }
+                            },
                         ],
                         "Resource${Identifier1}": {
                             "Type": "resource_type1",
-                            "Properties": properties
-                        }
-                    }
-                ]
+                            "Properties": properties,
+                        },
+                    },
+                ],
             }
         }
 
@@ -1084,18 +1181,22 @@ class TestArtifactExporter(BaseYAMLTest)
 
         # Patch the file open method to return template string
         with mock.patch(
-                "awscli.customizations.cloudformation."
-                "artifact_exporter.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
-
+            "awscli.customizations.cloudformation."
+            "artifact_exporter.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             template_exporter = Template(
-                template_path, parent_dir, self.s3_uploader_mock,
-                resources_to_export)
+                template_path,
+                parent_dir,
+                self.s3_uploader_mock,
+                resources_to_export,
+            )
             exported_template = template_exporter.export()
             self.assertEqual(exported_template, template_dict)
 
             open_mock.assert_called_once_with(
-                    make_abs_path(parent_dir, template_path), "r")
+                make_abs_path(parent_dir, template_path), "r"
+            )
 
             self.assertEqual(1, yaml_parse_mock.call_count)
 
@@ -1104,21 +1205,29 @@ class TestArtifactExporter(BaseYAMLTest)
                 resource_type1_instance.export.call_args_list,
                 [
                     mock.call("Resource1", properties, template_dir),
-                    mock.call("Resource${Identifier1}", properties, template_dir)
-                ]
+                    mock.call(
+                        "Resource${Identifier1}", properties, template_dir
+                    ),
+                ],
             )
             resource_type2_class.assert_called_with(self.s3_uploader_mock)
             self.assertEqual(
                 resource_type2_instance.export.call_args_list,
                 [
                     mock.call("Resource2", properties, template_dir),
-                    mock.call("Resource${Identifier1}${Identifier2}", properties, template_dir)
-                ]
+                    mock.call(
+                        "Resource${Identifier1}${Identifier2}",
+                        properties,
+                        template_dir,
+                    ),
+                ],
             )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.yaml_parse"
+    )
     def test_template_export_foreach_invalid(self, yaml_parse_mock):
-        parent_dir = os.path.sep
+        parent_dir = os.path.abspath(os.path.sep)
         template_dir = os.path.join(parent_dir, 'foo', 'bar')
         template_path = os.path.join(template_dir, 'path')
         template_str = self.example_yaml_template()
@@ -1132,33 +1241,27 @@ class TestArtifactExporter(BaseYAMLTest)
         resource_type2_instance = mock.Mock()
         resource_type2_class.return_value = resource_type2_instance
 
-        resources_to_export = [
-            resource_type1_class,
-            resource_type2_class
-        ]
+        resources_to_export = [resource_type1_class, resource_type2_class]
 
         properties = {"foo": "bar"}
         template_dict = {
             "Resources": {
                 "Resource1": {
                     "Type": "resource_type1",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource2": {
                     "Type": "resource_type2",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Resource3": {
                     "Type": "some-other-type",
-                    "Properties": properties
+                    "Properties": properties,
                 },
                 "Fn::ForEach::OuterLoopName": [
                     "Identifier1",
-                    {
-                        "Resource${Identifier1}": {
-                        }
-                    }
-                ]
+                    {"Resource${Identifier1}": {}},
+                ],
             }
         }
 
@@ -1167,19 +1270,26 @@ class TestArtifactExporter(BaseYAMLTest)
 
         # Patch the file open method to return template string
         with mock.patch(
-                "awscli.customizations.cloudformation."
-                "artifact_exporter.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
+            "awscli.customizations.cloudformation."
+            "artifact_exporter.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             template_exporter = Template(
-                template_path, parent_dir, self.s3_uploader_mock,
-                resources_to_export)
-            with self.assertRaises(exceptions.InvalidForEachIntrinsicFunctionError):
+                template_path,
+                parent_dir,
+                self.s3_uploader_mock,
+                resources_to_export,
+            )
+            with self.assertRaises(
+                exceptions.InvalidForEachIntrinsicFunctionError
+            ):
                 template_exporter.export()
 
-
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.yaml_parse")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.yaml_parse"
+    )
     def test_template_global_export(self, yaml_parse_mock):
-        parent_dir = os.path.sep
+        parent_dir = os.path.abspath(os.path.sep)
         template_dir = os.path.join(parent_dir, 'foo', 'bar')
         template_path = os.path.join(template_dir, 'path')
         template_str = self.example_yaml_template()
@@ -1193,134 +1303,296 @@ class TestArtifactExporter(BaseYAMLTest)
 
         resources_to_export = {
             "resource_type1": resource_type1_class,
-            "resource_type2": resource_type2_class
+            "resource_type2": resource_type2_class,
+        }
+        properties1 = {
+            "foo": "bar",
+            "Fn::Transform": {
+                "Name": "AWS::Include",
+                "Parameters": {"Location": "foo.yaml"},
+            },
+        }
+        properties2 = {
+            "foo": "bar",
+            "Fn::Transform": {"Name": "AWS::OtherTransform"},
+        }
+        properties_in_list = {
+            "Fn::Transform": {
+                "Name": "AWS::Include",
+                "Parameters": {"Location": "bar.yaml"},
+            }
         }
-        properties1 = {"foo": "bar", "Fn::Transform": {"Name": "AWS::Include", "Parameters": {"Location": "foo.yaml"}}}
-        properties2 = {"foo": "bar", "Fn::Transform": {"Name": "AWS::OtherTransform"}}
-        properties_in_list = {"Fn::Transform": {"Name": "AWS::Include", "Parameters": {"Location": "bar.yaml"}}}
         template_dict = {
             "Resources": {
                 "Resource1": {
                     "Type": "resource_type1",
-                    "Properties": properties1
+                    "Properties": properties1,
                 },
                 "Resource2": {
                     "Type": "resource_type2",
                     "Properties": properties2,
-                }
+                },
             },
-            "List": ["foo", properties_in_list]
+            "List": ["foo", properties_in_list],
         }
         open_mock = mock.mock_open()
         include_transform_export_handler_mock = mock.Mock()
-        include_transform_export_handler_mock.return_value = {"Name": "AWS::Include", "Parameters": {"Location": "s3://foo"}}
+        include_transform_export_handler_mock.return_value = {
+            "Name": "AWS::Include",
+            "Parameters": {"Location": "s3://foo"},
+        }
         yaml_parse_mock.return_value = template_dict
 
         with mock.patch(
-                "awscli.customizations.cloudformation."
-                "artifact_exporter.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
-            with mock.patch.dict(GLOBAL_EXPORT_DICT, {"Fn::Transform": include_transform_export_handler_mock}):
+            "awscli.customizations.cloudformation."
+            "artifact_exporter.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
+            with mock.patch.dict(
+                GLOBAL_EXPORT_DICT,
+                {"Fn::Transform": include_transform_export_handler_mock},
+            ):
                 template_exporter = Template(
-                    template_path, parent_dir, self.s3_uploader_mock,
-                    resources_to_export)
-
-                exported_template = template_exporter.export_global_artifacts(template_exporter.template_dict)
-
-                first_call_args, kwargs = include_transform_export_handler_mock.call_args_list[0]
-                second_call_args, kwargs = include_transform_export_handler_mock.call_args_list[1]
-                third_call_args, kwargs = include_transform_export_handler_mock.call_args_list[2]
-                call_args = [first_call_args[0], second_call_args[0], third_call_args[0]]
-                self.assertTrue({"Name": "AWS::Include", "Parameters": {"Location": "foo.yaml"}} in call_args)
+                    template_path,
+                    parent_dir,
+                    self.s3_uploader_mock,
+                    resources_to_export,
+                )
+
+                exported_template = template_exporter.export_global_artifacts(
+                    template_exporter.template_dict
+                )
+
+                first_call_args, kwargs = (
+                    include_transform_export_handler_mock.call_args_list[0]
+                )
+                second_call_args, kwargs = (
+                    include_transform_export_handler_mock.call_args_list[1]
+                )
+                third_call_args, kwargs = (
+                    include_transform_export_handler_mock.call_args_list[2]
+                )
+                call_args = [
+                    first_call_args[0],
+                    second_call_args[0],
+                    third_call_args[0],
+                ]
+                self.assertTrue(
+                    {
+                        "Name": "AWS::Include",
+                        "Parameters": {"Location": "foo.yaml"},
+                    }
+                    in call_args
+                )
                 self.assertTrue({"Name": "AWS::OtherTransform"} in call_args)
-                self.assertTrue({"Name": "AWS::Include", "Parameters": {"Location": "bar.yaml"}} in call_args)
+                self.assertTrue(
+                    {
+                        "Name": "AWS::Include",
+                        "Parameters": {"Location": "bar.yaml"},
+                    }
+                    in call_args
+                )
                 self.assertTrue(template_dir in first_call_args)
                 self.assertTrue(template_dir in second_call_args)
                 self.assertTrue(template_dir in third_call_args)
-                self.assertEqual(include_transform_export_handler_mock.call_count, 3)
-                #new s3 url is added to include location
-                self.assertEqual(exported_template["Resources"]["Resource1"]["Properties"]["Fn::Transform"], {"Name": "AWS::Include", "Parameters": {"Location": "s3://foo"}})
-                self.assertEqual(exported_template["List"][1]["Fn::Transform"], {"Name": "AWS::Include", "Parameters": {"Location": "s3://foo"}})
-
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_with_relative_file_path(self, is_local_file_mock):
-        #exports transform
+                self.assertEqual(
+                    include_transform_export_handler_mock.call_count, 3
+                )
+                # new s3 url is added to include location
+                self.assertEqual(
+                    exported_template["Resources"]["Resource1"]["Properties"][
+                        "Fn::Transform"
+                    ],
+                    {
+                        "Name": "AWS::Include",
+                        "Parameters": {"Location": "s3://foo"},
+                    },
+                )
+                self.assertEqual(
+                    exported_template["List"][1]["Fn::Transform"],
+                    {
+                        "Name": "AWS::Include",
+                        "Parameters": {"Location": "s3://foo"},
+                    },
+                )
+
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_with_relative_file_path(
+        self, is_local_file_mock
+    ):
+        # exports transform
         parent_dir = os.path.abspath("someroot")
         self.s3_uploader_mock.upload_with_dedup.return_value = "s3://foo"
         is_local_file_mock.return_value = True
         abs_file_path = os.path.join(parent_dir, "foo.yaml")
 
-        handler_output = include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": "foo.yaml"}}, self.s3_uploader_mock, parent_dir)
-        self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(abs_file_path)
+        handler_output = include_transform_export_handler(
+            {"Name": "AWS::Include", "Parameters": {"Location": "foo.yaml"}},
+            self.s3_uploader_mock,
+            parent_dir,
+        )
+        self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(
+            abs_file_path
+        )
         is_local_file_mock.assert_called_with(abs_file_path)
-        self.assertEqual(handler_output, {'Name': 'AWS::Include', 'Parameters': {'Location': 's3://foo'}})
+        self.assertEqual(
+            handler_output,
+            {'Name': 'AWS::Include', 'Parameters': {'Location': 's3://foo'}},
+        )
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_with_absolute_file_path(self, is_local_file_mock):
-        #exports transform
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_with_absolute_file_path(
+        self, is_local_file_mock
+    ):
+        # exports transform
         parent_dir = os.path.abspath("someroot")
         self.s3_uploader_mock.upload_with_dedup.return_value = "s3://foo"
         is_local_file_mock.return_value = True
         abs_file_path = os.path.abspath(os.path.join("my", "file.yaml"))
 
-        handler_output = include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": abs_file_path}}, self.s3_uploader_mock, parent_dir)
-        self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(abs_file_path)
+        handler_output = include_transform_export_handler(
+            {
+                "Name": "AWS::Include",
+                "Parameters": {"Location": abs_file_path},
+            },
+            self.s3_uploader_mock,
+            parent_dir,
+        )
+        self.s3_uploader_mock.upload_with_dedup.assert_called_once_with(
+            abs_file_path
+        )
         is_local_file_mock.assert_called_with(abs_file_path)
-        self.assertEqual(handler_output, {'Name': 'AWS::Include', 'Parameters': {'Location': 's3://foo'}})
-
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_with_s3_uri(self, is_local_file_mock):
+        self.assertEqual(
+            handler_output,
+            {'Name': 'AWS::Include', 'Parameters': {'Location': 's3://foo'}},
+        )
 
-        handler_output = include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": "s3://bucket/foo.yaml"}}, self.s3_uploader_mock, "parent_dir")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_with_s3_uri(
+        self, is_local_file_mock
+    ):
+        handler_output = include_transform_export_handler(
+            {
+                "Name": "AWS::Include",
+                "Parameters": {"Location": "s3://bucket/foo.yaml"},
+            },
+            self.s3_uploader_mock,
+            "parent_dir",
+        )
         # Input is returned unmodified
-        self.assertEqual(handler_output, {"Name": "AWS::Include", "Parameters": {"Location": "s3://bucket/foo.yaml"}})
+        self.assertEqual(
+            handler_output,
+            {
+                "Name": "AWS::Include",
+                "Parameters": {"Location": "s3://bucket/foo.yaml"},
+            },
+        )
 
         is_local_file_mock.assert_not_called()
         self.s3_uploader_mock.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_with_no_path(self, is_local_file_mock):
-
-        handler_output = include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": ""}}, self.s3_uploader_mock, "parent_dir")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_with_no_path(
+        self, is_local_file_mock
+    ):
+        handler_output = include_transform_export_handler(
+            {"Name": "AWS::Include", "Parameters": {"Location": ""}},
+            self.s3_uploader_mock,
+            "parent_dir",
+        )
         # Input is returned unmodified
-        self.assertEqual(handler_output, {"Name": "AWS::Include", "Parameters": {"Location": ""}})
+        self.assertEqual(
+            handler_output,
+            {"Name": "AWS::Include", "Parameters": {"Location": ""}},
+        )
 
         is_local_file_mock.assert_not_called()
         self.s3_uploader_mock.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_with_dict_value_for_location(self, is_local_file_mock):
-
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_with_dict_value_for_location(
+        self, is_local_file_mock
+    ):
         handler_output = include_transform_export_handler(
-            {"Name": "AWS::Include", "Parameters": {"Location": {"Fn::Sub": "${S3Bucket}/file.txt"}}},
+            {
+                "Name": "AWS::Include",
+                "Parameters": {
+                    "Location": {"Fn::Sub": "${S3Bucket}/file.txt"}
+                },
+            },
             self.s3_uploader_mock,
-            "parent_dir")
+            "parent_dir",
+        )
         # Input is returned unmodified
-        self.assertEqual(handler_output, {"Name": "AWS::Include", "Parameters": {"Location": {"Fn::Sub": "${S3Bucket}/file.txt"}}})
+        self.assertEqual(
+            handler_output,
+            {
+                "Name": "AWS::Include",
+                "Parameters": {
+                    "Location": {"Fn::Sub": "${S3Bucket}/file.txt"}
+                },
+            },
+        )
 
         is_local_file_mock.assert_not_called()
         self.s3_uploader_mock.assert_not_called()
 
-
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_non_local_file(self, is_local_file_mock):
-        #returns unchanged template dict if transform not a local file, and not a S3 URI
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_non_local_file(
+        self, is_local_file_mock
+    ):
+        # returns unchanged template dict if transform not a local file, and not a S3 URI
         is_local_file_mock.return_value = False
 
         with self.assertRaises(exceptions.InvalidLocalPathError):
-            include_transform_export_handler({"Name": "AWS::Include", "Parameters": {"Location": "http://foo.yaml"}}, self.s3_uploader_mock, "parent_dir")
+            include_transform_export_handler(
+                {
+                    "Name": "AWS::Include",
+                    "Parameters": {"Location": "http://foo.yaml"},
+                },
+                self.s3_uploader_mock,
+                "parent_dir",
+            )
             is_local_file_mock.assert_called_with("http://foo.yaml")
             self.s3_uploader_mock.assert_not_called()
 
-    @mock.patch("awscli.customizations.cloudformation.artifact_exporter.is_local_file")
-    def test_include_transform_export_handler_non_include_transform(self, is_local_file_mock):
-        #ignores transform that is not aws::include
-        handler_output = include_transform_export_handler({"Name": "AWS::OtherTransform", "Parameters": {"Location": "foo.yaml"}}, self.s3_uploader_mock, "parent_dir")
+    @mock.patch(
+        "awscli.customizations.cloudformation.artifact_exporter.is_local_file"
+    )
+    def test_include_transform_export_handler_non_include_transform(
+        self, is_local_file_mock
+    ):
+        # ignores transform that is not aws::include
+        handler_output = include_transform_export_handler(
+            {
+                "Name": "AWS::OtherTransform",
+                "Parameters": {"Location": "foo.yaml"},
+            },
+            self.s3_uploader_mock,
+            "parent_dir",
+        )
         self.s3_uploader_mock.upload_with_dedup.assert_not_called()
-        self.assertEqual(handler_output, {"Name": "AWS::OtherTransform", "Parameters": {"Location": "foo.yaml"}})
+        self.assertEqual(
+            handler_output,
+            {
+                "Name": "AWS::OtherTransform",
+                "Parameters": {"Location": "foo.yaml"},
+            },
+        )
 
     def test_template_export_path_be_folder(self):
-
         template_path = "/path/foo"
         # Set parent_dir to be a non-existent folder
         with self.assertRaises(ValueError):
@@ -1329,18 +1601,26 @@ class TestArtifactExporter(BaseYAMLTest)
         # Set parent_dir to be a real folder, but just a relative path
         with self.make_temp_dir() as dirname:
             with self.assertRaises(ValueError):
-                Template(template_path, os.path.relpath(dirname), self.s3_uploader_mock)
+                Template(
+                    template_path,
+                    os.path.relpath(dirname),
+                    self.s3_uploader_mock,
+                )
 
     def test_make_zip(self):
         test_file_creator = FileCreator()
-        test_file_creator.append_file('index.js',
-                                      'exports handler = (event, context, callback) => {callback(null, event);}')
+        test_file_creator.append_file(
+            'index.js',
+            'exports handler = (event, context, callback) => {callback(null, event);}',
+        )
 
         dirname = test_file_creator.rootdir
 
         expected_files = set(['index.js'])
 
-        random_name = ''.join(random.choice(string.ascii_letters) for _ in range(10))
+        random_name = ''.join(
+            random.choice(string.ascii_letters) for _ in range(10)
+        )
         outfile = os.path.join(tempfile.gettempdir(), random_name)
 
         zipfile_name = None
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/test_deploy.py 2.31.35-1/tests/unit/customizations/cloudformation/test_deploy.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/test_deploy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/test_deploy.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,22 +10,20 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import collections
 import json
-
 import tempfile
-import collections
-
-from awscli.testutils import mock
 
+from awscli.customizations.cloudformation import exceptions
 from awscli.customizations.cloudformation.deploy import DeployCommand
 from awscli.customizations.cloudformation.deployer import Deployer
 from awscli.customizations.cloudformation.yamlhelper import yaml_parse
-from awscli.customizations.cloudformation import exceptions
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.testutils import mock
 from tests.unit.customizations.cloudformation import BaseYAMLTest
 
 
-class FakeArgs(object):
+class FakeArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
@@ -34,41 +32,39 @@ class FakeArgs(object):
 
 
 def get_example_template():
-    return {
-        "Parameters": {
-            "Key1": "Value1"
-        },
-        "Resources": {
-            "Resource1": {}
-        }
-    }
+    return {"Parameters": {"Key1": "Value1"}, "Resources": {"Resource1": {}}}
 
-ChangeSetResult = collections.namedtuple("ChangeSetResult", ["changeset_id", "changeset_type"])
 
-class TestDeployCommand(BaseYAMLTest):
+ChangeSetResult = collections.namedtuple(
+    "ChangeSetResult", ["changeset_id", "changeset_type"]
+)
 
+
+class TestDeployCommand(BaseYAMLTest):
     def setUp(self):
         super(TestDeployCommand, self).setUp()
         self.session = mock.Mock()
         self.session.get_scoped_config.return_value = {}
-        self.parsed_args = FakeArgs(template_file='./foo',
-                                    stack_name="some_stack_name",
-                                    parameter_overrides=["Key1=Value1",
-                                                         "Key2=Value2"],
-                                    no_execute_changeset=False,
-                                    execute_changeset=True,
-                                    disable_rollback=True,
-                                    capabilities=None,
-                                    role_arn=None,
-                                    notification_arns=[],
-                                    fail_on_empty_changeset=True,
-                                    s3_bucket=None,
-                                    s3_prefix="some prefix",
-                                    kms_key_id="some kms key id",
-                                    force_upload=True,
-                                    tags=["tagkey1=tagvalue1"])
-        self.parsed_globals = FakeArgs(region="us-east-1", endpoint_url=None,
-                                       verify_ssl=None)
+        self.parsed_args = FakeArgs(
+            template_file='./foo',
+            stack_name="some_stack_name",
+            parameter_overrides=["Key1=Value1", "Key2=Value2"],
+            no_execute_changeset=False,
+            execute_changeset=True,
+            disable_rollback=True,
+            capabilities=None,
+            role_arn=None,
+            notification_arns=[],
+            fail_on_empty_changeset=True,
+            s3_bucket=None,
+            s3_prefix="some prefix",
+            kms_key_id="some kms key id",
+            force_upload=True,
+            tags=["tagkey1=tagvalue1"],
+        )
+        self.parsed_globals = FakeArgs(
+            region="us-east-1", endpoint_url=None, verify_ssl=None
+        )
         self.deploy_command = DeployCommand(self.session)
 
         self.deployer = Deployer(mock.Mock())
@@ -93,9 +89,9 @@ class TestDeployCommand(BaseYAMLTest):
             open_mock = mock.mock_open()
             # Patch the file open method to return template string
             with mock.patch(
-                    "awscli.customizations.cloudformation.deploy.compat_open",
-                    open_mock(read_data=template_str)) as open_mock:
-
+                "awscli.customizations.cloudformation.deploy.compat_open",
+                open_mock(read_data=template_str),
+            ) as open_mock:
                 fake_template = get_example_template()
                 mock_yaml_parse.return_value = fake_template
 
@@ -103,13 +99,17 @@ class TestDeployCommand(BaseYAMLTest):
                 self.deploy_command.deploy.return_value = 0
                 self.deploy_command.parse_key_value_arg = mock.Mock()
                 self.deploy_command.parse_key_value_arg.side_effect = [
-                    fake_parameter_overrides, fake_tags_dict]
+                    fake_parameter_overrides,
+                    fake_tags_dict,
+                ]
                 self.deploy_command.merge_parameters = mock.MagicMock(
-                        return_value=fake_parameters)
+                    return_value=fake_parameters
+                )
 
                 self.parsed_args.template_file = file_path
-                result = self.deploy_command._run_main(self.parsed_args,
-                                              parsed_globals=self.parsed_globals)
+                result = self.deploy_command._run_main(
+                    self.parsed_args, parsed_globals=self.parsed_globals
+                )
                 self.assertEqual(0, result)
                 open_mock.assert_called_once_with(file_path, "r")
 
@@ -125,38 +125,37 @@ class TestDeployCommand(BaseYAMLTest):
                     None,
                     fake_tags,
                     True,
-                    True
+                    True,
                 )
 
-                self.deploy_command.parse_key_value_arg.assert_has_calls([
-                    mock.call(
-                        self.parsed_args.parameter_overrides,
-                         "parameter-overrides"
-                    ),
-                    mock.call(
-                        self.parsed_args.tags,
-                        "tags"
-                    )
-                ])
+                self.deploy_command.parse_key_value_arg.assert_has_calls(
+                    [
+                        mock.call(
+                            self.parsed_args.parameter_overrides,
+                            "parameter-overrides",
+                        ),
+                        mock.call(self.parsed_args.tags, "tags"),
+                    ]
+                )
 
                 self.deploy_command.merge_parameters.assert_called_once_with(
-                        fake_template, fake_parameter_overrides)
+                    fake_template, fake_parameter_overrides
+                )
 
                 self.assertEqual(1, mock_yaml_parse.call_count)
 
     def test_invalid_template_file(self):
         self.parsed_args.template_file = "sometemplate"
         with self.assertRaises(exceptions.InvalidTemplatePathError):
-            result = self.deploy_command._run_main(self.parsed_args,
-                                                  parsed_globals=self.parsed_globals)
+            result = self.deploy_command._run_main(
+                self.parsed_args, parsed_globals=self.parsed_globals
+            )
 
-    @mock.patch('awscli.customizations.cloudformation.deploy.os.path.expanduser')
+    @mock.patch(
+        'awscli.customizations.cloudformation.deploy.os.path.expanduser'
+    )
     def test_expands_user_for_template_file(self, expanduser):
-        contents = (
-            'Resource:\n'
-            '  Test:\n'
-            '    Type: AWS::Foo::Bar\n'
-        )
+        contents = 'Resource:\n' '  Test:\n' '    Type: AWS::Foo::Bar\n'
         with tempfile.NamedTemporaryFile('w') as f:
             f.write(contents)
             f.flush()
@@ -167,14 +166,20 @@ class TestDeployCommand(BaseYAMLTest):
         # in the code, this test would fail to load the file with an
         # InvalidTemplatePathError.
         expanduser.return_value = fake_expanduser_path
-        parsed, template_str, _ = self.deploy_command.load_template_file(f.name)
-        self.assertEqual(parsed, {'Resource': {'Test': {'Type': 'AWS::Foo::Bar'}}})
+        parsed, template_str, _ = self.deploy_command.load_template_file(
+            f.name
+        )
+        self.assertEqual(
+            parsed, {'Resource': {'Test': {'Type': 'AWS::Foo::Bar'}}}
+        )
         self.assertEqual(template_str, contents)
 
     @mock.patch('awscli.customizations.cloudformation.deploy.os.path.isfile')
     @mock.patch('awscli.customizations.cloudformation.deploy.yaml_parse')
     @mock.patch('awscli.customizations.cloudformation.deploy.os.path.getsize')
-    def test_s3_upload_required_but_missing_bucket(self, mock_getsize, mock_yaml_parse, mock_isfile):
+    def test_s3_upload_required_but_missing_bucket(
+        self, mock_getsize, mock_yaml_parse, mock_isfile
+    ):
         """
         Tests that large templates are detected prior to deployment
         """
@@ -186,19 +191,29 @@ class TestDeployCommand(BaseYAMLTest):
         open_mock = mock.mock_open()
 
         with mock.patch(
-                "awscli.customizations.cloudformation.deploy.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
+            "awscli.customizations.cloudformation.deploy.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             with self.assertRaises(exceptions.DeployBucketRequiredError):
-                result = self.deploy_command._run_main(self.parsed_args,
-                                parsed_globals=self.parsed_globals)
+                result = self.deploy_command._run_main(
+                    self.parsed_args, parsed_globals=self.parsed_globals
+                )
 
     @mock.patch('awscli.customizations.cloudformation.deploy.os.path.isfile')
     @mock.patch('awscli.customizations.cloudformation.deploy.yaml_parse')
     @mock.patch('awscli.customizations.cloudformation.deploy.os.path.getsize')
-    @mock.patch('awscli.customizations.cloudformation.deploy.DeployCommand.deploy')
+    @mock.patch(
+        'awscli.customizations.cloudformation.deploy.DeployCommand.deploy'
+    )
     @mock.patch('awscli.customizations.cloudformation.deploy.S3Uploader')
-    def test_s3_uploader_is_configured_properly(self, s3UploaderMock,
-        deploy_method_mock, mock_getsize, mock_yaml_parse, mock_isfile):
+    def test_s3_uploader_is_configured_properly(
+        self,
+        s3UploaderMock,
+        deploy_method_mock,
+        mock_getsize,
+        mock_yaml_parse,
+        mock_isfile,
+    ):
         """
         Tests that large templates are detected prior to deployment
         """
@@ -211,15 +226,16 @@ class TestDeployCommand(BaseYAMLTest):
         open_mock = mock.mock_open()
 
         with mock.patch(
-                "awscli.customizations.cloudformation.deploy.compat_open",
-                open_mock(read_data=template_str)) as open_mock:
-
+            "awscli.customizations.cloudformation.deploy.compat_open",
+            open_mock(read_data=template_str),
+        ) as open_mock:
             self.parsed_args.s3_bucket = bucket_name
             s3UploaderObject = mock.Mock()
             s3UploaderMock.return_value = s3UploaderObject
 
-            result = self.deploy_command._run_main(self.parsed_args,
-                            parsed_globals=self.parsed_globals)
+            result = self.deploy_command._run_main(
+                self.parsed_args, parsed_globals=self.parsed_globals
+            )
 
             self.deploy_command.deploy.assert_called_once_with(
                 mock.ANY,
@@ -233,14 +249,16 @@ class TestDeployCommand(BaseYAMLTest):
                 s3UploaderObject,
                 [{"Key": "tagkey1", "Value": "tagvalue1"}],
                 True,
-                True
+                True,
             )
 
-            s3UploaderMock.assert_called_once_with(mock.ANY,
-                    bucket_name,
-                    self.parsed_args.s3_prefix,
-                    self.parsed_args.kms_key_id,
-                    self.parsed_args.force_upload)
+            s3UploaderMock.assert_called_once_with(
+                mock.ANY,
+                bucket_name,
+                self.parsed_args.s3_prefix,
+                self.parsed_args.kms_key_id,
+                self.parsed_args.force_upload,
+            )
 
     def test_deploy_success(self):
         """
@@ -257,37 +275,45 @@ class TestDeployCommand(BaseYAMLTest):
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         # Set the mock to return this fake changeset_id
-        self.deployer.create_and_wait_for_changeset.return_value = ChangeSetResult(changeset_id, changeset_type)
+        self.deployer.create_and_wait_for_changeset.return_value = (
+            ChangeSetResult(changeset_id, changeset_type)
+        )
 
-        rc = self.deploy_command.deploy(self.deployer,
-                                   stack_name,
-                                   template,
-                                   parameters,
-                                   capabilities,
-                                   execute_changeset,
-                                   role_arn,
-                                   notification_arns,
-                                   s3_uploader,
-                                   tags)
+        rc = self.deploy_command.deploy(
+            self.deployer,
+            stack_name,
+            template,
+            parameters,
+            capabilities,
+            execute_changeset,
+            role_arn,
+            notification_arns,
+            s3_uploader,
+            tags,
+        )
         self.assertEqual(rc, 0)
 
-
-        self.deployer.create_and_wait_for_changeset.assert_called_once_with(stack_name=stack_name,
-                                                     cfn_template=template,
-                                                     parameter_values=parameters,
-                                                     capabilities=capabilities,
-                                                     role_arn=role_arn,
-                                                     notification_arns=notification_arns,
-                                                     s3_uploader=s3_uploader,
-                                                     tags=tags)
+        self.deployer.create_and_wait_for_changeset.assert_called_once_with(
+            stack_name=stack_name,
+            cfn_template=template,
+            parameter_values=parameters,
+            capabilities=capabilities,
+            role_arn=role_arn,
+            notification_arns=notification_arns,
+            s3_uploader=s3_uploader,
+            tags=tags,
+        )
 
         # since execute_changeset is set to True, deploy() will execute changeset
-        self.deployer.execute_changeset.assert_called_once_with(changeset_id, stack_name, False)
-        self.deployer.wait_for_execute.assert_called_once_with(stack_name, changeset_type)
-
+        self.deployer.execute_changeset.assert_called_once_with(
+            changeset_id, stack_name, False
+        )
+        self.deployer.wait_for_execute.assert_called_once_with(
+            stack_name, changeset_type
+        )
 
     def test_deploy_no_execute(self):
         stack_name = "stack_name"
@@ -299,30 +325,35 @@ class TestDeployCommand(BaseYAMLTest):
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
-
-        self.deployer.create_and_wait_for_changeset.return_value = ChangeSetResult(changeset_id, "CREATE")
-        rc = self.deploy_command.deploy(self.deployer,
-                                            stack_name,
-                                            template,
-                                            parameters,
-                                            capabilities,
-                                            execute_changeset,
-                                            role_arn,
-                                            notification_arns,
-                                            s3_uploader,
-                                            tags)
+        self.deployer.create_and_wait_for_changeset.return_value = (
+            ChangeSetResult(changeset_id, "CREATE")
+        )
+        rc = self.deploy_command.deploy(
+            self.deployer,
+            stack_name,
+            template,
+            parameters,
+            capabilities,
+            execute_changeset,
+            role_arn,
+            notification_arns,
+            s3_uploader,
+            tags,
+        )
         self.assertEqual(rc, 0)
 
-        self.deployer.create_and_wait_for_changeset.assert_called_once_with(stack_name=stack_name,
-                                                     cfn_template=template,
-                                                     parameter_values=parameters,
-                                                     capabilities=capabilities,
-                                                     role_arn=role_arn,
-                                                     notification_arns=notification_arns,
-                                                     s3_uploader=s3_uploader,
-                                                     tags=tags)
+        self.deployer.create_and_wait_for_changeset.assert_called_once_with(
+            stack_name=stack_name,
+            cfn_template=template,
+            parameter_values=parameters,
+            capabilities=capabilities,
+            role_arn=role_arn,
+            notification_arns=notification_arns,
+            s3_uploader=s3_uploader,
+            tags=tags,
+        )
 
         # since execute_changeset is set to True, deploy() will execute changeset
         self.deployer.execute_changeset.assert_not_called()
@@ -338,20 +369,22 @@ class TestDeployCommand(BaseYAMLTest):
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         self.deployer.wait_for_execute.side_effect = RuntimeError("Some error")
         with self.assertRaises(RuntimeError):
-            self.deploy_command.deploy(self.deployer,
-                                       stack_name,
-                                       template,
-                                       parameters,
-                                       capabilities,
-                                       execute_changeset,
-                                       role_arn,
-                                       notification_arns,
-                                       s3_uploader,
-                                       tags)
+            self.deploy_command.deploy(
+                self.deployer,
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                execute_changeset,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                tags,
+            )
 
     def test_deploy_raises_exception_on_empty_changeset(self):
         stack_name = "stack_name"
@@ -368,9 +401,18 @@ class TestDeployCommand(BaseYAMLTest):
         changeset_func.side_effect = empty_changeset
         with self.assertRaises(exceptions.ChangeEmptyError):
             self.deploy_command.deploy(
-                self.deployer, stack_name, template, parameters, capabilities,
-                execute_changeset, role_arn, notification_arns,
-                None, tags, fail_on_empty_changeset=True)
+                self.deployer,
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                execute_changeset,
+                role_arn,
+                notification_arns,
+                None,
+                tags,
+                fail_on_empty_changeset=True,
+            )
 
     def test_deploy_does_not_raise_exception_on_empty_changeset(self):
         stack_name = "stack_name"
@@ -385,10 +427,17 @@ class TestDeployCommand(BaseYAMLTest):
         changeset_func = self.deployer.create_and_wait_for_changeset
         changeset_func.side_effect = empty_changeset
         self.deploy_command.deploy(
-            self.deployer, stack_name, template, parameters, capabilities,
-            execute_changeset, role_arn, notification_arns,
-            s3_uploader=None, tags=[],
-            fail_on_empty_changeset=False
+            self.deployer,
+            stack_name,
+            template,
+            parameters,
+            capabilities,
+            execute_changeset,
+            role_arn,
+            notification_arns,
+            s3_uploader=None,
+            tags=[],
+            fail_on_empty_changeset=False,
         )
 
     def test_deploy_empty_changeset_does_not_raise_exception_by_default(self):
@@ -404,9 +453,16 @@ class TestDeployCommand(BaseYAMLTest):
         changeset_func = self.deployer.create_and_wait_for_changeset
         changeset_func.side_effect = empty_changeset
         self.deploy_command.deploy(
-            self.deployer, stack_name, template, parameters, capabilities,
-            execute_changeset, role_arn, notification_arns,
-            s3_uploader=None, tags=[]
+            self.deployer,
+            stack_name,
+            template,
+            parameters,
+            capabilities,
+            execute_changeset,
+            role_arn,
+            notification_arns,
+            s3_uploader=None,
+            tags=[],
         )
 
     def test_parse_key_value_arg_success(self):
@@ -417,7 +473,11 @@ class TestDeployCommand(BaseYAMLTest):
         """
         argname = "parameter-overrides"
         data = ["Key1=Value1", 'Key2=[1,2,3]', 'Key3={"a":"val", "b": 2}']
-        output = {"Key1": "Value1", "Key2": '[1,2,3]', "Key3": '{"a":"val", "b": 2}'}
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
 
         result = self.deploy_command.parse_key_value_arg(data, argname)
         self.assertEqual(result, output)
@@ -432,17 +492,21 @@ class TestDeployCommand(BaseYAMLTest):
         CloudFormation parameters file format
         :return:
         """
-        data = json.dumps([
-            {'ParameterKey': 'Key1',
-             'ParameterValue': 'Value1'},
-            {'ParameterKey': 'Key2',
-             'ParameterValue': '[1,2,3]'},
-            {'ParameterKey': 'Key3',
-             'ParameterValue': '{"a":"val", "b": 2}'}
-        ])
-        output = {"Key1": "Value1",
-                  "Key2": '[1,2,3]',
-                  "Key3": '{"a":"val", "b": 2}'}
+        data = json.dumps(
+            [
+                {'ParameterKey': 'Key1', 'ParameterValue': 'Value1'},
+                {'ParameterKey': 'Key2', 'ParameterValue': '[1,2,3]'},
+                {
+                    'ParameterKey': 'Key3',
+                    'ParameterValue': '{"a":"val", "b": 2}',
+                },
+            ]
+        )
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
         result = self.deploy_command.parse_parameter_overrides(data)
         self.assertEqual(result, output)
 
@@ -452,11 +516,15 @@ class TestDeployCommand(BaseYAMLTest):
         CloudFormation parameters file format
         :return:
         """
-        data = json.dumps([
-            {'ParameterKey': 'Key1',
-             'ParameterValue': 'Value1',
-             'RedundantKey': 'foo'}
-        ])
+        data = json.dumps(
+            [
+                {
+                    'ParameterKey': 'Key1',
+                    'ParameterValue': 'Value1',
+                    'RedundantKey': 'foo',
+                }
+            ]
+        )
         with self.assertRaises(ParamValidationError):
             self.deploy_command.parse_parameter_overrides(data)
 
@@ -466,16 +534,20 @@ class TestDeployCommand(BaseYAMLTest):
         CodePipeline parameters file format
         :return:
         """
-        data = json.dumps({
-            'Parameters': {
-                "Key1": "Value1",
-                "Key2": '[1,2,3]',
-                "Key3": '{"a":"val", "b": 2}'
+        data = json.dumps(
+            {
+                'Parameters': {
+                    "Key1": "Value1",
+                    "Key2": '[1,2,3]',
+                    "Key3": '{"a":"val", "b": 2}',
+                }
             }
-        })
-        output = {"Key1": "Value1",
-                  "Key2": '[1,2,3]',
-                  "Key3": '{"a":"val", "b": 2}'}
+        )
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
         result = self.deploy_command.parse_parameter_overrides(data)
         self.assertEqual(result, output)
 
@@ -485,26 +557,28 @@ class TestDeployCommand(BaseYAMLTest):
         deploy command parameters file format
         :return:
         """
-        data = json.dumps([
-            'Key1=Value1',
-            'Key2=[1,2,3]',
-            'Key3={"a":"val", "b": 2}'
-        ])
-        output = {"Key1": "Value1",
-                  "Key2": '[1,2,3]',
-                  "Key3": '{"a":"val", "b": 2}'}
+        data = json.dumps(
+            ['Key1=Value1', 'Key2=[1,2,3]', 'Key3={"a":"val", "b": 2}']
+        )
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
         result = self.deploy_command.parse_parameter_overrides(data)
         self.assertEqual(result, output)
 
     def test_parse_parameter_override_with_inline_json(self):
-        data = [json.dumps([
-            'Key1=Value1',
-            'Key2=[1,2,3]',
-            'Key3={"a":"val", "b": 2}'
-        ])]
-        output = {"Key1": "Value1",
-                  "Key2": '[1,2,3]',
-                  "Key3": '{"a":"val", "b": 2}'}
+        data = [
+            json.dumps(
+                ['Key1=Value1', 'Key2=[1,2,3]', 'Key3={"a":"val", "b": 2}']
+            )
+        ]
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
         result = self.deploy_command.parse_parameter_overrides(data)
         self.assertEqual(result, output)
 
@@ -514,14 +588,12 @@ class TestDeployCommand(BaseYAMLTest):
         deploy command parameters command line format
         :return:
         """
-        data = [
-            'Key1=Value1',
-            'Key2=[1,2,3]',
-            'Key3={"a":"val", "b": 2}'
-        ]
-        output = {"Key1": "Value1",
-                  "Key2": '[1,2,3]',
-                  "Key3": '{"a":"val", "b": 2}'}
+        data = ['Key1=Value1', 'Key2=[1,2,3]', 'Key3={"a":"val", "b": 2}']
+        output = {
+            "Key1": "Value1",
+            "Key2": '[1,2,3]',
+            "Key3": '{"a":"val", "b": 2}',
+        }
         result = self.deploy_command.parse_parameter_overrides(data)
         self.assertEqual(result, output)
 
@@ -546,28 +618,34 @@ class TestDeployCommand(BaseYAMLTest):
                 "Key2": {"Type": "String"},
                 "Key3": "Something",
                 "Key4": {"Type": "Number"},
-                "KeyWithDefaultValue": {"Type": "String", "Default": "something"},
-                "KeyWithDefaultValueButOverridden": {"Type": "String", "Default": "something"}
+                "KeyWithDefaultValue": {
+                    "Type": "String",
+                    "Default": "something",
+                },
+                "KeyWithDefaultValueButOverridden": {
+                    "Type": "String",
+                    "Default": "something",
+                },
             }
         }
         overrides = {
             "Key1": "Value1",
             "Key3": "Value3",
-            "KeyWithDefaultValueButOverridden": "Value4"
+            "KeyWithDefaultValueButOverridden": "Value4",
         }
 
         expected_result = [
             # Overriden values
             {"ParameterKey": "Key1", "ParameterValue": "Value1"},
             {"ParameterKey": "Key3", "ParameterValue": "Value3"},
-
             # Parameter contains default value, but overridden with new value
-            {"ParameterKey": "KeyWithDefaultValueButOverridden", "ParameterValue": "Value4"},
-
+            {
+                "ParameterKey": "KeyWithDefaultValueButOverridden",
+                "ParameterValue": "Value4",
+            },
             # non-overriden values
             {"ParameterKey": "Key2", "UsePreviousValue": True},
             {"ParameterKey": "Key4", "UsePreviousValue": True},
-
             # Parameter with default value but NOT overridden.
             # Use previous value, but this gets removed later when we are creating stack for first time
             {"ParameterKey": "KeyWithDefaultValue", "UsePreviousValue": True},
@@ -575,7 +653,7 @@ class TestDeployCommand(BaseYAMLTest):
 
         self.assertItemsEqual(
             self.deploy_command.merge_parameters(template, overrides),
-            expected_result
+            expected_result,
         )
 
     def test_merge_parameters_success_nothing_to_override(self):
@@ -585,8 +663,10 @@ class TestDeployCommand(BaseYAMLTest):
         """
         template = {
             "Parameters": {
-                "Key1": {"Type": "String"}, "Key2": {"Type": "String"},
-                "Key3": "Something", "Key4": {"Type": "Number"},
+                "Key1": {"Type": "String"},
+                "Key2": {"Type": "String"},
+                "Key3": "Something",
+                "Key4": {"Type": "Number"},
             }
         }
         overrides = {
@@ -603,21 +683,22 @@ class TestDeployCommand(BaseYAMLTest):
 
         self.assertItemsEqual(
             self.deploy_command.merge_parameters(template, overrides),
-            expected_result
+            expected_result,
         )
 
         # Parameters definition is empty. Nothing to override
-        result = self.deploy_command.merge_parameters({"Parameters": {}},
-                                                      overrides)
+        result = self.deploy_command.merge_parameters(
+            {"Parameters": {}}, overrides
+        )
         self.assertEqual(result, [])
 
     def test_merge_parameters_invalid_input(self):
-
         # Template does not contain "Parameters" definition
         result = self.deploy_command.merge_parameters({}, {"Key": "Value"})
         self.assertEqual(result, [])
 
         # Parameters definition is invalid
-        result = self.deploy_command.merge_parameters({"Parameters": "foo"},
-                                                      {"Key": "Value"})
+        result = self.deploy_command.merge_parameters(
+            {"Parameters": "foo"}, {"Key": "Value"}
+        )
         self.assertEqual(result, [])
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/test_deployer.py 2.31.35-1/tests/unit/customizations/cloudformation/test_deployer.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/test_deployer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/test_deployer.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,19 +1,21 @@
 import botocore.session
-
-from awscli.testutils import mock
-
 from botocore.stub import Stubber
-from awscli.customizations.cloudformation.deployer import Deployer, ChangeSetResult
+
 from awscli.customizations.cloudformation import exceptions
+from awscli.customizations.cloudformation.deployer import (
+    ChangeSetResult,
+    Deployer,
+)
+from awscli.testutils import mock
 from tests.unit.customizations.cloudformation import BaseYAMLTest
 
 
 class TestDeployer(BaseYAMLTest):
-
     def setUp(self):
         super(TestDeployer, self).setUp()
-        client = botocore.session.get_session().create_client('cloudformation',
-                                                              region_name="us-east-1")
+        client = botocore.session.get_session().create_client(
+            'cloudformation', region_name="us-east-1"
+        )
         self.stub_client = Stubber(client)
 
         self.changeset_prefix = "some-changeset-prefix"
@@ -22,18 +24,13 @@ class TestDeployer(BaseYAMLTest):
     def test_has_stack_success(self):
         stack_name = "stack_name"
 
-        expected_params = {
-            "StackName": stack_name
-        }
+        expected_params = {"StackName": stack_name}
 
-        response = {
-            "Stacks": [
-                make_stack_obj(stack_name)
-            ]
-        }
+        response = {"Stacks": [make_stack_obj(stack_name)]}
 
-        self.stub_client.add_response('describe_stacks', response,
-                                      expected_params)
+        self.stub_client.add_response(
+            'describe_stacks', response, expected_params
+        )
 
         with self.stub_client:
             response = self.deployer.has_stack(stack_name)
@@ -41,48 +38,46 @@ class TestDeployer(BaseYAMLTest):
 
     def test_has_stack_no_stack(self):
         stack_name = "stack_name"
-        expected_params = {
-            "StackName": stack_name
-        }
+        expected_params = {"StackName": stack_name}
 
         # Response contains NO stack
-        no_stack_response = {
-            "Stacks": []
-        }
-        self.stub_client.add_response('describe_stacks', no_stack_response,
-                                      expected_params)
+        no_stack_response = {"Stacks": []}
+        self.stub_client.add_response(
+            'describe_stacks', no_stack_response, expected_params
+        )
         with self.stub_client:
             response = self.deployer.has_stack(stack_name)
             self.assertFalse(response)
 
         # Response is a ClientError with a message that the stack does not exist
-        self.stub_client.add_client_error('describe_stacks', "ClientError",
-                                          "Stack with id {0} does not exist"
-                                          .format(stack_name))
+        self.stub_client.add_client_error(
+            'describe_stacks',
+            "ClientError",
+            f"Stack with id {stack_name} does not exist",
+        )
         with self.stub_client:
             response = self.deployer.has_stack(stack_name)
             self.assertFalse(response)
 
     def test_has_stack_review_in_progress(self):
         stack_name = "stack_name"
-        expected_params = {
-            "StackName": stack_name
-        }
+        expected_params = {"StackName": stack_name}
 
         # Response contains NO stack
         review_in_progress_response = {
             "Stacks": [make_stack_obj(stack_name, "REVIEW_IN_PROGRESS")]
         }
-        self.stub_client.add_response('describe_stacks',
-                                      review_in_progress_response,
-                                      expected_params)
+        self.stub_client.add_response(
+            'describe_stacks', review_in_progress_response, expected_params
+        )
         with self.stub_client:
             response = self.deployer.has_stack(stack_name)
             self.assertFalse(response)
 
     def test_has_stack_exception(self):
-        self.stub_client.add_client_error('describe_stacks', "ValidationError",
-                                          "Service is bad")
+        self.stub_client.add_client_error(
+            'describe_stacks', "ValidationError", "Service is bad"
+        )
         with self.stub_client:
             with self.assertRaises(botocore.exceptions.ClientError):
                 self.deployer.has_stack("stack_name")
@@ -106,7 +101,7 @@ class TestDeployer(BaseYAMLTest):
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
 
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         # Case 1: Stack DOES NOT exist
         self.deployer.has_stack = mock.Mock()
@@ -122,40 +117,61 @@ class TestDeployer(BaseYAMLTest):
             "Description": botocore.stub.ANY,
             "RoleARN": role_arn,
             "NotificationARNs": notification_arns,
-            "Tags": tags
+            "Tags": tags,
         }
 
-        response = {
-            "Id": "changeset ID"
-        }
+        response = {"Id": "changeset ID"}
 
-        self.stub_client.add_response("create_change_set", response,
-                                      expected_params)
+        self.stub_client.add_response(
+            "create_change_set", response, expected_params
+        )
         with self.stub_client:
             result = self.deployer.create_changeset(
-                    stack_name, template, parameters, capabilities, role_arn,
-                    notification_arns, s3_uploader, tags)
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                tags,
+            )
             self.assertEqual(response["Id"], result.changeset_id)
             self.assertEqual("CREATE", result.changeset_type)
 
         # Case 2: Stack exists. We are updating it
         self.deployer.has_stack.return_value = True
-        self.stub_client.add_response("get_template_summary",
-            {"Parameters": [{"ParameterKey": parameter["ParameterKey"]}
-                for parameter in parameters]},
-            {"StackName": stack_name})
+        self.stub_client.add_response(
+            "get_template_summary",
+            {
+                "Parameters": [
+                    {"ParameterKey": parameter["ParameterKey"]}
+                    for parameter in parameters
+                ]
+            },
+            {"StackName": stack_name},
+        )
         expected_params["ChangeSetType"] = "UPDATE"
         expected_params["Parameters"] = parameters
-        self.stub_client.add_response("create_change_set", response,
-                                      expected_params)
+        self.stub_client.add_response(
+            "create_change_set", response, expected_params
+        )
         # template has new parameter but should not be included in
         # expected_params as no previous value
-        parameters = list(parameters) + \
-            [{"ParameterKey": "New", "UsePreviousValue": True}]
+        parameters = list(parameters) + [
+            {"ParameterKey": "New", "UsePreviousValue": True}
+        ]
         with self.stub_client:
             result = self.deployer.create_changeset(
-                    stack_name, template, parameters, capabilities, role_arn,
-                    notification_arns, s3_uploader, tags)
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                tags,
+            )
             self.assertEqual(response["Id"], result.changeset_id)
             self.assertEqual("UPDATE", result.changeset_type)
 
@@ -179,11 +195,15 @@ class TestDeployer(BaseYAMLTest):
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
 
         s3_uploader = mock.Mock()
+
         def to_path_style_s3_url(some_string, Version=None):
             return "https://s3.amazonaws.com/bucket/file"
+
         s3_uploader.to_path_style_s3_url = to_path_style_s3_url
-        def upload_with_dedup(filename,extension):
+
+        def upload_with_dedup(filename, extension):
             return "s3://bucket/file"
+
         s3_uploader.upload_with_dedup = upload_with_dedup
 
         # Case 1: Stack DOES NOT exist
@@ -200,63 +220,98 @@ class TestDeployer(BaseYAMLTest):
             "Description": botocore.stub.ANY,
             "RoleARN": role_arn,
             "Tags": [],
-            "NotificationARNs": notification_arns
+            "NotificationARNs": notification_arns,
         }
 
-        response = {
-            "Id": "changeset ID"
-        }
+        response = {"Id": "changeset ID"}
 
-        self.stub_client.add_response("create_change_set", response,
-                                      expected_params)
+        self.stub_client.add_response(
+            "create_change_set", response, expected_params
+        )
         with self.stub_client:
             result = self.deployer.create_changeset(
-                stack_name, template, parameters, capabilities, role_arn,
-                notification_arns, s3_uploader, [])
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                [],
+            )
             self.assertEqual(response["Id"], result.changeset_id)
             self.assertEqual("CREATE", result.changeset_type)
 
         # Case 2: Stack exists. We are updating it
         self.deployer.has_stack.return_value = True
-        self.stub_client.add_response("get_template_summary",
-            {"Parameters": [{"ParameterKey": parameter["ParameterKey"]}
-                for parameter in parameters]},
-            {"StackName": stack_name})
+        self.stub_client.add_response(
+            "get_template_summary",
+            {
+                "Parameters": [
+                    {"ParameterKey": parameter["ParameterKey"]}
+                    for parameter in parameters
+                ]
+            },
+            {"StackName": stack_name},
+        )
         expected_params["ChangeSetType"] = "UPDATE"
         expected_params["Parameters"] = parameters
         # template has new parameter but should not be included in
         # expected_params as no previous value
-        parameters = list(parameters) + \
-            [{"ParameterKey": "New", "UsePreviousValue": True}]
-        self.stub_client.add_response("create_change_set", response,
-                                      expected_params)
+        parameters = list(parameters) + [
+            {"ParameterKey": "New", "UsePreviousValue": True}
+        ]
+        self.stub_client.add_response(
+            "create_change_set", response, expected_params
+        )
         with self.stub_client:
             result = self.deployer.create_changeset(
-                    stack_name, template, parameters, capabilities, role_arn,
-                    notification_arns, s3_uploader, [])
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                [],
+            )
             self.assertEqual(response["Id"], result.changeset_id)
             self.assertEqual("UPDATE", result.changeset_type)
 
     def test_create_changeset_exception(self):
         stack_name = "stack_name"
         template = "template"
-        parameters = [{"ParameterKey": "Key1", "ParameterValue": "Value",
-                       "UsePreviousValue": True}]
+        parameters = [
+            {
+                "ParameterKey": "Key1",
+                "ParameterValue": "Value",
+                "UsePreviousValue": True,
+            }
+        ]
         capabilities = ["capabilities"]
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         self.deployer.has_stack = mock.Mock()
         self.deployer.has_stack.return_value = False
 
         self.stub_client.add_client_error(
-                'create_change_set', "Somethign is wrong", "Service is bad")
+            'create_change_set', "Somethign is wrong", "Service is bad"
+        )
         with self.stub_client:
             with self.assertRaises(botocore.exceptions.ClientError):
-                self.deployer.create_changeset(stack_name, template, parameters,
-                                               capabilities, role_arn, notification_arns, None, tags)
+                self.deployer.create_changeset(
+                    stack_name,
+                    template,
+                    parameters,
+                    capabilities,
+                    role_arn,
+                    notification_arns,
+                    None,
+                    tags,
+                )
 
     def test_execute_changeset(self):
         stack_name = "stack_name"
@@ -265,10 +320,12 @@ class TestDeployer(BaseYAMLTest):
         expected_params = {
             "ChangeSetName": changeset_id,
             "StackName": stack_name,
-            "DisableRollback": False
+            "DisableRollback": False,
         }
 
-        self.stub_client.add_response("execute_change_set", {}, expected_params)
+        self.stub_client.add_response(
+            "execute_change_set", {}, expected_params
+        )
         with self.stub_client:
             self.deployer.execute_changeset(changeset_id, stack_name)
 
@@ -280,20 +337,24 @@ class TestDeployer(BaseYAMLTest):
         expected_params = {
             "ChangeSetName": changeset_id,
             "StackName": stack_name,
-            "DisableRollback": disable_rollback
+            "DisableRollback": disable_rollback,
         }
 
-        self.stub_client.add_response("execute_change_set", {}, expected_params)
+        self.stub_client.add_response(
+            "execute_change_set", {}, expected_params
+        )
         with self.stub_client:
-            self.deployer.execute_changeset(changeset_id, stack_name,
-                                            disable_rollback)
+            self.deployer.execute_changeset(
+                changeset_id, stack_name, disable_rollback
+            )
 
     def test_execute_changeset_exception(self):
         stack_name = "stack_name"
         changeset_id = "changeset_id"
 
         self.stub_client.add_client_error(
-                'execute_change_set', "Somethign is wrong", "Service is bad")
+            'execute_change_set', "Somethign is wrong", "Service is bad"
+        )
         with self.stub_client:
             with self.assertRaises(botocore.exceptions.ClientError):
                 self.deployer.execute_changeset(changeset_id, stack_name)
@@ -301,50 +362,78 @@ class TestDeployer(BaseYAMLTest):
     def test_create_and_wait_for_changeset_successful(self):
         stack_name = "stack_name"
         template = "template"
-        parameters = [{"ParameterKey": "Key1", "ParameterValue": "Value",
-                       "UsePreviousValue": True}]
+        parameters = [
+            {
+                "ParameterKey": "Key1",
+                "ParameterValue": "Value",
+                "UsePreviousValue": True,
+            }
+        ]
         capabilities = ["capabilities"]
         changeset_id = "changeset id"
         changeset_type = "changeset type"
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         self.deployer.create_changeset = mock.Mock()
-        self.deployer.create_changeset.return_value = ChangeSetResult(changeset_id, changeset_type)
+        self.deployer.create_changeset.return_value = ChangeSetResult(
+            changeset_id, changeset_type
+        )
 
         self.deployer.wait_for_changeset = mock.Mock()
 
         result = self.deployer.create_and_wait_for_changeset(
-                stack_name, template, parameters, capabilities, role_arn,
-                notification_arns, s3_uploader, tags)
+            stack_name,
+            template,
+            parameters,
+            capabilities,
+            role_arn,
+            notification_arns,
+            s3_uploader,
+            tags,
+        )
         self.assertEqual(result.changeset_id, changeset_id)
         self.assertEqual(result.changeset_type, changeset_type)
 
     def test_create_and_wait_for_changeset_error_waiting_for_changeset(self):
         stack_name = "stack_name"
         template = "template"
-        parameters = [{"ParameterKey": "Key1", "ParameterValue": "Value",
-                       "UsePreviousValue": True}]
+        parameters = [
+            {
+                "ParameterKey": "Key1",
+                "ParameterValue": "Value",
+                "UsePreviousValue": True,
+            }
+        ]
         capabilities = ["capabilities"]
         changeset_id = "changeset id"
         changeset_type = "changeset type"
         role_arn = "arn:aws:iam::1234567890:role"
         notification_arns = ["arn:aws:sns:region:1234567890:notify"]
         s3_uploader = None
-        tags = [{"Key":"key1", "Value": "val1"}]
+        tags = [{"Key": "key1", "Value": "val1"}]
 
         self.deployer.create_changeset = mock.Mock()
-        self.deployer.create_changeset.return_value = ChangeSetResult(changeset_id, changeset_type)
+        self.deployer.create_changeset.return_value = ChangeSetResult(
+            changeset_id, changeset_type
+        )
 
         self.deployer.wait_for_changeset = mock.Mock()
         self.deployer.wait_for_changeset.side_effect = RuntimeError
 
         with self.assertRaises(RuntimeError):
             result = self.deployer.create_and_wait_for_changeset(
-                    stack_name, template, parameters, capabilities, role_arn,
-                    notification_arns, s3_uploader, tags)
+                stack_name,
+                template,
+                parameters,
+                capabilities,
+                role_arn,
+                notification_arns,
+                s3_uploader,
+                tags,
+            )
 
     def test_wait_for_changeset_no_changes(self):
         stack_name = "stack_name"
@@ -357,24 +446,27 @@ class TestDeployer(BaseYAMLTest):
 
         response = {
             "Status": "FAILED",
-            "StatusReason": "The submitted information didn't contain changes."
+            "StatusReason": "The submitted information didn't contain changes.",
         }
 
-        waiter_error = botocore.exceptions.WaiterError(name="name",
-                                                       reason="reason",
-                                                       last_response=response)
+        waiter_error = botocore.exceptions.WaiterError(
+            name="name", reason="reason", last_response=response
+        )
         mock_waiter.wait.side_effect = waiter_error
 
         with self.assertRaises(exceptions.ChangeEmptyError):
             mock_deployer.wait_for_changeset(changeset_id, stack_name)
 
         waiter_config = {'Delay': 5}
-        mock_waiter.wait.assert_called_once_with(ChangeSetName=changeset_id,
-                                                 StackName=stack_name,
-                                                 WaiterConfig=waiter_config)
+        mock_waiter.wait.assert_called_once_with(
+            ChangeSetName=changeset_id,
+            StackName=stack_name,
+            WaiterConfig=waiter_config,
+        )
 
         mock_client.get_waiter.assert_called_once_with(
-                "change_set_create_complete")
+            "change_set_create_complete"
+        )
 
     def test_wait_for_changeset_no_changes_with_another_error_msg(self):
         stack_name = "stack_name"
@@ -387,24 +479,27 @@ class TestDeployer(BaseYAMLTest):
 
         response = {
             "Status": "FAILED",
-            "StatusReason": "No updates are to be performed"
+            "StatusReason": "No updates are to be performed",
         }
 
-        waiter_error = botocore.exceptions.WaiterError(name="name",
-                                                       reason="reason",
-                                                       last_response=response)
+        waiter_error = botocore.exceptions.WaiterError(
+            name="name", reason="reason", last_response=response
+        )
         mock_waiter.wait.side_effect = waiter_error
 
         with self.assertRaises(exceptions.ChangeEmptyError):
             mock_deployer.wait_for_changeset(changeset_id, stack_name)
 
         waiter_config = {'Delay': 5}
-        mock_waiter.wait.assert_called_once_with(ChangeSetName=changeset_id,
-                                                 StackName=stack_name,
-                                                 WaiterConfig=waiter_config)
+        mock_waiter.wait.assert_called_once_with(
+            ChangeSetName=changeset_id,
+            StackName=stack_name,
+            WaiterConfig=waiter_config,
+        )
 
         mock_client.get_waiter.assert_called_once_with(
-                "change_set_create_complete")
+            "change_set_create_complete"
+        )
 
     def test_wait_for_changeset_failed_to_create_changeset(self):
         stack_name = "stack_name"
@@ -415,26 +510,26 @@ class TestDeployer(BaseYAMLTest):
         mock_waiter = mock.Mock()
         mock_client.get_waiter.return_value = mock_waiter
 
-        response = {
-            "Status": "FAILED",
-            "StatusReason": "some reason"
-        }
+        response = {"Status": "FAILED", "StatusReason": "some reason"}
 
-        waiter_error = botocore.exceptions.WaiterError(name="name",
-                                                       reason="reason",
-                                                       last_response=response)
+        waiter_error = botocore.exceptions.WaiterError(
+            name="name", reason="reason", last_response=response
+        )
         mock_waiter.wait.side_effect = waiter_error
 
         with self.assertRaises(RuntimeError):
             mock_deployer.wait_for_changeset(changeset_id, stack_name)
 
         waiter_config = {'Delay': 5}
-        mock_waiter.wait.assert_called_once_with(ChangeSetName=changeset_id,
-                                                 StackName=stack_name,
-                                                 WaiterConfig=waiter_config)
+        mock_waiter.wait.assert_called_once_with(
+            ChangeSetName=changeset_id,
+            StackName=stack_name,
+            WaiterConfig=waiter_config,
+        )
 
         mock_client.get_waiter.assert_called_once_with(
-                "change_set_create_complete")
+            "change_set_create_complete"
+        )
 
     def test_wait_for_execute_no_changes(self):
         stack_name = "stack_name"
@@ -445,9 +540,9 @@ class TestDeployer(BaseYAMLTest):
         mock_waiter = mock.Mock()
         mock_client.get_waiter.return_value = mock_waiter
 
-        waiter_error = botocore.exceptions.WaiterError(name="name",
-                                                       reason="reason",
-                                                       last_response={})
+        waiter_error = botocore.exceptions.WaiterError(
+            name="name", reason="reason", last_response={}
+        )
         mock_waiter.wait.side_effect = waiter_error
 
         with self.assertRaises(exceptions.DeployFailedError):
@@ -457,11 +552,11 @@ class TestDeployer(BaseYAMLTest):
             'Delay': 30,
             'MaxAttempts': 120,
         }
-        mock_waiter.wait.assert_called_once_with(StackName=stack_name,
-                                                 WaiterConfig=waiter_config)
+        mock_waiter.wait.assert_called_once_with(
+            StackName=stack_name, WaiterConfig=waiter_config
+        )
 
-        mock_client.get_waiter.assert_called_once_with(
-                "stack_create_complete")
+        mock_client.get_waiter.assert_called_once_with("stack_create_complete")
 
 
 def make_stack_obj(stack_name, status="CREATE_COMPLETE"):
@@ -469,5 +564,5 @@ def make_stack_obj(stack_name, status="C
         "StackId": stack_name,
         "StackName": stack_name,
         "CreationTime": "2013-08-23T01:02:15.422Z",
-        "StackStatus": status
+        "StackStatus": status,
     }
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/test_package.py 2.31.35-1/tests/unit/customizations/cloudformation/test_package.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/test_package.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/test_package.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,17 +13,16 @@
 import os
 import sys
 import tempfile
-
-from awscli.testutils import mock
-
 from io import StringIO
-from awscli.customizations.cloudformation.package import PackageCommand
+
 from awscli.customizations.cloudformation.artifact_exporter import Template
+from awscli.customizations.cloudformation.package import PackageCommand
 from awscli.customizations.cloudformation.yamlhelper import yaml_dump
+from awscli.testutils import mock
 from tests.unit.customizations.cloudformation import BaseYAMLTest
 
 
-class FakeArgs(object):
+class FakeArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
@@ -32,35 +31,29 @@ class FakeArgs(object):
 
 
 def get_example_template():
-    return {
-        "Parameters": {
-            "Key1": "Value1"
-        },
-        "Resources": {
-            "Resource1": {}
-        }
-    }
+    return {"Parameters": {"Key1": "Value1"}, "Resources": {"Resource1": {}}}
 
 
 class TestPackageCommand(BaseYAMLTest):
-
     def setUp(self):
         super(TestPackageCommand, self).setUp()
         self.session = mock.Mock()
         self.session.get_scoped_config.return_value = {}
-        self.parsed_args = FakeArgs(template_file='./foo',
-                                    s3_bucket="s3bucket",
-                                    s3_prefix="s3prefix",
-                                    kms_key_id="kmskeyid",
-                                    output_template_file="./oputput",
-                                    use_json=False,
-                                    force_upload=False,
-                                    metadata=None)
-        self.parsed_globals = FakeArgs(region="us-east-1", endpoint_url=None,
-                                       verify_ssl=None)
+        self.parsed_args = FakeArgs(
+            template_file='./foo',
+            s3_bucket="s3bucket",
+            s3_prefix="s3prefix",
+            kms_key_id="kmskeyid",
+            output_template_file="./oputput",
+            use_json=False,
+            force_upload=False,
+            metadata=None,
+        )
+        self.parsed_globals = FakeArgs(
+            region="us-east-1", endpoint_url=None, verify_ssl=None
+        )
         self.package_command = PackageCommand(self.session)
 
-
     @mock.patch("awscli.customizations.cloudformation.package.yaml_dump")
     def test_main(self, mock_yaml_dump):
         exported_template_str = "hello"
@@ -74,22 +67,24 @@ class TestPackageCommand(BaseYAMLTest):
             for use_json in (False, True):
                 filename = handle.name
                 self.parsed_args.template_file = filename
-                self.parsed_args.use_json=use_json
+                self.parsed_args.use_json = use_json
 
-                rc = self.package_command._run_main(self.parsed_args, self.parsed_globals)
+                rc = self.package_command._run_main(
+                    self.parsed_args, self.parsed_globals
+                )
                 self.assertEqual(rc, 0)
 
-                self.package_command._export.assert_called_once_with(filename, use_json)
+                self.package_command._export.assert_called_once_with(
+                    filename, use_json
+                )
                 self.package_command.write_output.assert_called_once_with(
-                        self.parsed_args.output_template_file, mock.ANY)
+                    self.parsed_args.output_template_file, mock.ANY
+                )
 
                 self.package_command._export.reset_mock()
                 self.package_command.write_output.reset_mock()
 
-
-
     def test_main_error(self):
-
         self.package_command._export = mock.Mock()
         self.package_command._export.side_effect = RuntimeError()
 
@@ -99,12 +94,13 @@ class TestPackageCommand(BaseYAMLTest):
             self.parsed_args.template_file = filename
 
             with self.assertRaises(RuntimeError):
-                self.package_command._run_main(self.parsed_args, self.parsed_globals)
-
+                self.package_command._run_main(
+                    self.parsed_args, self.parsed_globals
+                )
 
     @mock.patch("awscli.customizations.cloudformation.package.sys.stdout")
     def test_write_output_to_stdout(self, stdoutmock):
-        data = u"some data"
+        data = "some data"
         filename = None
 
         self.package_command.write_output(filename, data)
diff -pruN 2.23.6-1/tests/unit/customizations/cloudformation/test_yamlhelper.py 2.31.35-1/tests/unit/customizations/cloudformation/test_yamlhelper.py
--- 2.23.6-1/tests/unit/customizations/cloudformation/test_yamlhelper.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudformation/test_yamlhelper.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,12 +13,14 @@
 from botocore.compat import OrderedDict
 
 from awscli.customizations.cloudformation.deployer import Deployer
-from awscli.customizations.cloudformation.yamlhelper import yaml_parse, yaml_dump
+from awscli.customizations.cloudformation.yamlhelper import (
+    yaml_dump,
+    yaml_parse,
+)
 from tests.unit.customizations.cloudformation import BaseYAMLTest
 
 
 class TestYaml(BaseYAMLTest):
-
     yaml_with_tags = """
     Resource:
         Key1: !Ref Something
@@ -31,29 +33,12 @@ class TestYaml(BaseYAMLTest):
 
     parsed_yaml_dict = {
         "Resource": {
-            "Key1": {
-                "Ref": "Something"
-            },
-            "Key2": {
-                "Fn::GetAtt": ["Another", "Arn"]
-            },
-            "Key3": {
-                "Fn::FooBar": [
-                    {"Fn::Baz": "YetAnother"},
-                    "hello"
-                ]
-            },
-            "Key4": {
-                "Fn::SomeTag": {
-                    "a": "1"
-                }
-            },
-            "Key5": {
-                "Fn::GetAtt": ["OneMore", "Outputs.Arn"]
-            },
-            "Key6": {
-                "Condition": "OtherCondition"
-            }
+            "Key1": {"Ref": "Something"},
+            "Key2": {"Fn::GetAtt": ["Another", "Arn"]},
+            "Key3": {"Fn::FooBar": [{"Fn::Baz": "YetAnother"}, "hello"]},
+            "Key4": {"Fn::SomeTag": {"a": "1"}},
+            "Key5": {"Fn::GetAtt": ["OneMore", "Outputs.Arn"]},
+            "Key6": {"Condition": "OtherCondition"},
         }
     }
 
@@ -75,14 +60,7 @@ class TestYaml(BaseYAMLTest):
             Key: !GetAtt ["a", "b"]
         """
 
-        output = {
-            "Resource": {
-               "Key": {
-                "Fn::GetAtt": ["a", "b"]
-               }
-
-            }
-        }
+        output = {"Resource": {"Key": {"Fn::GetAtt": ["a", "b"]}}}
 
         actual_output = yaml_parse(yaml_input)
         self.assertEqual(actual_output, output)
@@ -113,31 +91,67 @@ class TestYaml(BaseYAMLTest):
             }
         }
         """
-        expected_dict = OrderedDict([
-            ('B_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])),
-            ('A_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})]))
-        ])
+        expected_dict = OrderedDict(
+            [
+                (
+                    'B_Resource',
+                    OrderedDict(
+                        [
+                            ('Key2', {'Name': 'name2'}),
+                            ('Key1', {'Name': 'name1'}),
+                        ]
+                    ),
+                ),
+                (
+                    'A_Resource',
+                    OrderedDict(
+                        [
+                            ('Key2', {'Name': 'name2'}),
+                            ('Key1', {'Name': 'name1'}),
+                        ]
+                    ),
+                ),
+            ]
+        )
         output_dict = yaml_parse(input_template)
         self.assertEqual(expected_dict, output_dict)
 
     def test_parse_yaml_preserve_elements_order(self):
         input_template = (
-        'B_Resource:\n'
-        '  Key2:\n'
-        '    Name: name2\n'
-        '  Key1:\n'
-        '    Name: name1\n'
-        'A_Resource:\n'
-        '  Key2:\n'
-        '    Name: name2\n'
-        '  Key1:\n'
-        '    Name: name1\n'
+            'B_Resource:\n'
+            '  Key2:\n'
+            '    Name: name2\n'
+            '  Key1:\n'
+            '    Name: name1\n'
+            'A_Resource:\n'
+            '  Key2:\n'
+            '    Name: name2\n'
+            '  Key1:\n'
+            '    Name: name1\n'
         )
         output_dict = yaml_parse(input_template)
-        expected_dict = OrderedDict([
-            ('B_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])),
-            ('A_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})]))
-        ])
+        expected_dict = OrderedDict(
+            [
+                (
+                    'B_Resource',
+                    OrderedDict(
+                        [
+                            ('Key2', {'Name': 'name2'}),
+                            ('Key1', {'Name': 'name1'}),
+                        ]
+                    ),
+                ),
+                (
+                    'A_Resource',
+                    OrderedDict(
+                        [
+                            ('Key2', {'Name': 'name2'}),
+                            ('Key1', {'Name': 'name1'}),
+                        ]
+                    ),
+                ),
+            ]
+        )
         self.assertEqual(expected_dict, output_dict)
 
         output_template = yaml_dump(output_dict)
@@ -162,7 +176,7 @@ class TestYaml(BaseYAMLTest):
         template = {
             "Resources": {
                 "Resource1": {"Properties": properties},
-                "Resource2": {"Properties": properties}
+                "Resource2": {"Properties": properties},
             }
         }
 
@@ -182,10 +196,26 @@ class TestYaml(BaseYAMLTest):
 
     def test_yaml_dump_quotes_boolean_strings(self):
         bools_as_strings = [
-            'yes', 'Yes', 'YES', 'no', 'No', 'NO',
-            'true', 'True', 'TRUE', 'false', 'False', 'FALSE',
-            'on', 'On', 'ON', 'off', 'Off', 'OFF'
+            'yes',
+            'Yes',
+            'YES',
+            'no',
+            'No',
+            'NO',
+            'true',
+            'True',
+            'TRUE',
+            'false',
+            'False',
+            'FALSE',
+            'on',
+            'On',
+            'ON',
+            'off',
+            'Off',
+            'OFF',
         ]
         for bool_as_string in bools_as_strings:
             self.assertEqual(
-                yaml_dump(bool_as_string), "'%s'\n" % bool_as_string)
+                yaml_dump(bool_as_string), "'%s'\n" % bool_as_string
+            )
diff -pruN 2.23.6-1/tests/unit/customizations/cloudtrail/__init__.py 2.31.35-1/tests/unit/customizations/cloudtrail/__init__.py
--- 2.23.6-1/tests/unit/customizations/cloudtrail/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudtrail/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,6 +13,7 @@
 
 import os
 
+
 def get_private_key_path():
     return os.path.join(
         os.path.dirname(os.path.realpath(__file__)),
diff -pruN 2.23.6-1/tests/unit/customizations/cloudtrail/test_commands.py 2.31.35-1/tests/unit/customizations/cloudtrail/test_commands.py
--- 2.23.6-1/tests/unit/customizations/cloudtrail/test_commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudtrail/test_commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest
 from awscli.customizations import cloudtrail
+from awscli.testutils import mock, unittest
+
 
 class TestCloudTrailPlumbing(unittest.TestCase):
     def test_initialization_registers_injector(self):
         cli = mock.Mock()
         cloudtrail.initialize(cli)
-        cli.register.assert_called_with('building-command-table.cloudtrail',
-                                        cloudtrail.inject_commands)
+        cli.register.assert_called_with(
+            'building-command-table.cloudtrail', cloudtrail.inject_commands
+        )
 
     def test_injection_adds_two_commands_to_cmd_table(self):
         command_table = {}
diff -pruN 2.23.6-1/tests/unit/customizations/cloudtrail/test_utils.py 2.31.35-1/tests/unit/customizations/cloudtrail/test_utils.py
--- 2.23.6-1/tests/unit/customizations/cloudtrail/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudtrail/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,17 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from datetime import datetime, timedelta
+
 from dateutil import parser, tz
 
 from awscli.customizations.cloudtrail import utils
-from awscli.testutils import mock, unittest
 from awscli.customizations.cloudtrail.utils import (
-    normalize_date,
+    PublicKeyProvider,
     format_date,
+    normalize_date,
     parse_date,
-    PublicKeyProvider,
 )
-
+from awscli.testutils import mock, unittest
 
 START_DATE = parser.parse("20140810T000000Z")
 
@@ -45,7 +45,9 @@ class TestCloudTrailUtils(unittest.TestC
     def test_throws_when_unable_to_get_trail_by_arn(self):
         cloudtrail_client = mock.Mock()
         cloudtrail_client.describe_trails.return_value = {"trailList": []}
-        self.assertRaises(ValueError, utils.get_trail_by_arn, cloudtrail_client, "b")
+        self.assertRaises(
+            ValueError, utils.get_trail_by_arn, cloudtrail_client, "b"
+        )
 
     def test_formats_dates(self):
         date = datetime(2015, 8, 21, tzinfo=tz.tzutc())
diff -pruN 2.23.6-1/tests/unit/customizations/cloudtrail/test_validation.py 2.31.35-1/tests/unit/customizations/cloudtrail/test_validation.py
--- 2.23.6-1/tests/unit/customizations/cloudtrail/test_validation.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudtrail/test_validation.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,42 +10,55 @@
 # distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import binascii
 import base64
+import binascii
+import gzip
 import hashlib
 import json
-import gzip
-from datetime import datetime, timedelta
-from dateutil import parser, tz
 from argparse import Namespace
+from datetime import datetime, timedelta
 
 from awscrt.crypto import RSASignatureAlgorithm
+from botocore.exceptions import ClientError
+from dateutil import parser, tz
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest
-from awscli.customizations.cloudtrail.validation import DigestError, \
-    extract_digest_key_date, normalize_date, format_date, DigestProvider, \
-    DigestTraverser, create_digest_traverser, \
-    Sha256RSADigestValidator, DATE_FORMAT, CloudTrailValidateLogs, \
-    parse_date, assert_cloudtrail_arn_is_valid, DigestSignatureError, \
-    InvalidDigestFormat, S3ClientProvider
-from awscli.testutils import unittest
-from awscli.customizations.exceptions import ParamValidationError
 from awscli.compat import BytesIO
-from botocore.exceptions import ClientError
+from awscli.customizations.cloudtrail.validation import (
+    DATE_FORMAT,
+    CloudTrailValidateLogs,
+    DigestError,
+    DigestProvider,
+    DigestSignatureError,
+    DigestTraverser,
+    InvalidDigestFormat,
+    S3ClientProvider,
+    Sha256RSADigestValidator,
+    assert_cloudtrail_arn_is_valid,
+    create_digest_traverser,
+    extract_digest_key_date,
+    format_date,
+    normalize_date,
+    parse_date,
+)
+from awscli.customizations.exceptions import ParamValidationError
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 from tests import PublicPrivateKeyLoader
+
 from . import get_private_key_path, get_public_key_path
 
 START_DATE = parser.parse('20140810T000000Z')
 END_DATE = parser.parse('20150810T000000Z')
 TEST_ACCOUNT_ID = '123456789012'
 TEST_TRAIL_ARN = 'arn:aws:cloudtrail:us-east-1:%s:trail/foo' % TEST_ACCOUNT_ID
-VALID_TEST_KEY = ('MIIBCgKCAQEAn11L2YZ9h7onug2ILi1MWyHiMRsTQjfWE+pHVRLk1QjfW'
-                  'hirG+lpOa8NrwQ/r7Ah5bNL6HepznOU9XTDSfmmnP97mqyc7z/upfZdS/'
-                  'AHhYcGaz7n6Wc/RRBU6VmiPCrAUojuSk6/GjvA8iOPFsYDuBtviXarvuL'
-                  'PlrT9kAd4Lb+rFfR5peEgBEkhlzc5HuWO7S0y+KunqxX6jQBnXGMtxmPB'
-                  'PP0FylgWGNdFtks/4YSKcgqwH0YDcawP9GGGDAeCIqPWIXDLG1jOjRRzW'
-                  'fCmD0iJUkz8vTsn4hq/5ZxRFE7UBAUiVcGbdnDdvVfhF9C3dQiDq3k7ad'
-                  'QIziLT0cShgQIDAQAB')
+VALID_TEST_KEY = (
+    'MIIBCgKCAQEAn11L2YZ9h7onug2ILi1MWyHiMRsTQjfWE+pHVRLk1QjfW'
+    'hirG+lpOa8NrwQ/r7Ah5bNL6HepznOU9XTDSfmmnP97mqyc7z/upfZdS/'
+    'AHhYcGaz7n6Wc/RRBU6VmiPCrAUojuSk6/GjvA8iOPFsYDuBtviXarvuL'
+    'PlrT9kAd4Lb+rFfR5peEgBEkhlzc5HuWO7S0y+KunqxX6jQBnXGMtxmPB'
+    'PP0FylgWGNdFtks/4YSKcgqwH0YDcawP9GGGDAeCIqPWIXDLG1jOjRRzW'
+    'fCmD0iJUkz8vTsn4hq/5ZxRFE7UBAUiVcGbdnDdvVfhF9C3dQiDq3k7ad'
+    'QIziLT0cShgQIDAQAB'
+)
 TEST_ORGANIZATION_ACCOUNT_ID = '987654321098'
 TEST_ORGANIZATION_ID = 'o-12345'
 
@@ -54,8 +67,7 @@ def create_mock_key_provider(key_list):
     """Creates a mock key provider that yields keys for each in key_list"""
     public_keys = {}
     for k in key_list:
-        public_keys[k] = {'Fingerprint': k,
-                          'Value': 'ffaa00'}
+        public_keys[k] = {'Fingerprint': k, 'Value': 'ffaa00'}
     key_provider = mock.Mock()
     key_provider.get_public_keys.return_value = public_keys
     return key_provider
@@ -94,7 +106,7 @@ def collecting_callback():
     return cb, calls
 
 
-class MockDigestProvider(object):
+class MockDigestProvider:
     def __init__(self, actions, logs=None):
         self.logs = logs or []
         self.actions = actions
@@ -105,31 +117,44 @@ class MockDigestProvider(object):
 
     def get_key_at_position(self, position):
         dt = START_DATE + timedelta(hours=position)
-        key = ('AWSLogs/{account}/CloudTrail-Digest/us-east-1/{ymd}/{account}_'
-               'CloudTrail-Digest_us-east-1_foo_us-east-1_{date}.json.gz')
+        key = (
+            'AWSLogs/{account}/CloudTrail-Digest/us-east-1/{ymd}/{account}_'
+            'CloudTrail-Digest_us-east-1_foo_us-east-1_{date}.json.gz'
+        )
         return key.format(
             account=TEST_ACCOUNT_ID,
             ymd=dt.strftime('%Y/%m/%d'),
-            date=dt.strftime(DATE_FORMAT))
+            date=dt.strftime(DATE_FORMAT),
+        )
 
     @staticmethod
-    def create_digest(fingerprint, start_date, key, bucket, next_key=None,
-                      next_bucket=None, logs=None):
+    def create_digest(
+        fingerprint,
+        start_date,
+        key,
+        bucket,
+        next_key=None,
+        next_bucket=None,
+        logs=None,
+    ):
         digest_end_date = start_date + timedelta(hours=1, minutes=30)
-        return {'digestPublicKeyFingerprint': fingerprint,
-                'digestEndTime': digest_end_date.strftime(DATE_FORMAT),
-                'digestStartTime': start_date.strftime(DATE_FORMAT),
-                'previousDigestS3Bucket': next_bucket,
-                'previousDigestS3Object': next_key,
-                'digestS3Bucket': bucket,
-                'digestS3Object': key,
-                'awsAccountId': TEST_ACCOUNT_ID,
-                'previousDigestSignature': 'abcd',
-                'logFiles': logs or []}
+        return {
+            'digestPublicKeyFingerprint': fingerprint,
+            'digestEndTime': digest_end_date.strftime(DATE_FORMAT),
+            'digestStartTime': start_date.strftime(DATE_FORMAT),
+            'previousDigestS3Bucket': next_bucket,
+            'previousDigestS3Object': next_key,
+            'digestS3Bucket': bucket,
+            'digestS3Object': key,
+            'awsAccountId': TEST_ACCOUNT_ID,
+            'previousDigestSignature': 'abcd',
+            'logFiles': logs or [],
+        }
 
     @staticmethod
-    def create_link(key, next_key, next_bucket, position, action, logs,
-                    bucket):
+    def create_link(
+        key, next_key, next_bucket, position, action, logs, bucket
+    ):
         """Creates a link in a digest chain for testing."""
         digest_logs = []
         if len(logs) > position:
@@ -138,13 +163,22 @@ class MockDigestProvider(object):
         # gap actions have no previous link.
         if action == 'gap':
             digest = MockDigestProvider.create_digest(
-                key=key, bucket=bucket, fingerprint=str(position),
-                start_date=end_date, logs=digest_logs)
+                key=key,
+                bucket=bucket,
+                fingerprint=str(position),
+                start_date=end_date,
+                logs=digest_logs,
+            )
         else:
             digest = MockDigestProvider.create_digest(
-                key=key, bucket=bucket, fingerprint=str(position),
-                start_date=end_date, next_bucket=next_bucket, next_key=next_key,
-                logs=digest_logs)
+                key=key,
+                bucket=bucket,
+                fingerprint=str(position),
+                start_date=end_date,
+                next_bucket=next_bucket,
+                next_key=next_key,
+                logs=digest_logs,
+            )
             # Mark the digest as invalid if specified in the action.
             if action == 'invalid':
                 digest['_invalid'] = True
@@ -161,14 +195,21 @@ class MockDigestProvider(object):
         # Simulate a digest missing from S3
         if action == 'missing':
             raise ClientError(
-                {'Error': {'Code': 'NoSuchKey', 'Message': 'foo'}},
-                'GetObject')
+                {'Error': {'Code': 'NoSuchKey', 'Message': 'foo'}}, 'GetObject'
+            )
         next_key = self.get_key_at_position(position - 1)
         next_bucket = int(bucket)
         if action == 'bucket_change':
             next_bucket += 1
-        return self.create_link(key, next_key, str(next_bucket), position,
-                                action, self.logs, bucket)
+        return self.create_link(
+            key,
+            next_key,
+            str(next_bucket),
+            position,
+            action,
+            self.logs,
+            bucket,
+        )
 
 
 class TestValidation(unittest.TestCase):
@@ -197,14 +238,16 @@ class TestValidation(unittest.TestCase):
     def test_ensures_cloudtrail_arns_are_valid_when_missing_resource(self):
         try:
             assert_cloudtrail_arn_is_valid(
-                'arn:aws:cloudtrail:us-east-1:%s:foo' % TEST_ACCOUNT_ID)
+                'arn:aws:cloudtrail:us-east-1:%s:foo' % TEST_ACCOUNT_ID
+            )
             self.fail('Should have failed')
         except ParamValidationError as e:
             self.assertIn('Invalid trail ARN provided', str(e))
 
     def test_allows_valid_arns(self):
         assert_cloudtrail_arn_is_valid(
-            'arn:aws:cloudtrail:us-east-1:%s:trail/foo' % TEST_ACCOUNT_ID)
+            'arn:aws:cloudtrail:us-east-1:%s:trail/foo' % TEST_ACCOUNT_ID
+        )
 
     def test_normalizes_date_timezones(self):
         date = datetime(2015, 8, 21, tzinfo=tz.tzlocal())
@@ -212,19 +255,24 @@ class TestValidation(unittest.TestCase):
         self.assertEqual(tz.tzutc(), normalized.tzinfo)
 
     def test_extracts_dates_from_digest_keys(self):
-        arn = ('AWSLogs/{account}/CloudTrail-Digest/us-east-1/2015/08/'
-               '16/{account}_CloudTrail-Digest_us-east-1_foo_us-east-1_'
-               '20150816T230550Z.json.gz').format(account=TEST_ACCOUNT_ID)
+        arn = (
+            f'AWSLogs/{TEST_ACCOUNT_ID}/CloudTrail-Digest/us-east-1/2015/08/'
+            f'16/{TEST_ACCOUNT_ID}_CloudTrail-Digest_us-east-1_foo_us-east-1_'
+            '20150816T230550Z.json.gz'
+        )
         self.assertEqual('20150816T230550Z', extract_digest_key_date(arn))
 
     def test_creates_traverser(self):
         mock_s3_provider = mock.Mock()
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, cloudtrail_client=mock.Mock(),
+            trail_arn=TEST_TRAIL_ARN,
+            cloudtrail_client=mock.Mock(),
             organization_client=mock.Mock(),
             trail_source_region='us-east-1',
             s3_client_provider=mock_s3_provider,
-            bucket='bucket', prefix='prefix')
+            bucket='bucket',
+            prefix='prefix',
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         self.assertEqual('prefix', traverser.starting_prefix)
         digest_provider = traverser.digest_provider
@@ -234,32 +282,43 @@ class TestValidation(unittest.TestCase):
     def test_creates_traverser_account_id(self):
         mock_s3_provider = mock.Mock()
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, cloudtrail_client=mock.Mock(),
+            trail_arn=TEST_TRAIL_ARN,
+            cloudtrail_client=mock.Mock(),
             organization_client=mock.Mock(),
             trail_source_region='us-east-1',
             s3_client_provider=mock_s3_provider,
-            bucket='bucket', prefix='prefix',
-            account_id=TEST_ORGANIZATION_ACCOUNT_ID)
+            bucket='bucket',
+            prefix='prefix',
+            account_id=TEST_ORGANIZATION_ACCOUNT_ID,
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         self.assertEqual('prefix', traverser.starting_prefix)
         digest_provider = traverser.digest_provider
         self.assertEqual('us-east-1', digest_provider.trail_home_region)
         self.assertEqual('foo', digest_provider.trail_name)
         self.assertEqual(
-            TEST_ORGANIZATION_ACCOUNT_ID, digest_provider.account_id)
+            TEST_ORGANIZATION_ACCOUNT_ID, digest_provider.account_id
+        )
 
     def test_creates_traverser_and_gets_trail_by_arn(self):
         cloudtrail_client = mock.Mock()
-        cloudtrail_client.describe_trails.return_value = {'trailList': [
-            {'TrailARN': TEST_TRAIL_ARN,
-             'S3BucketName': 'bucket', 'S3KeyPrefix': 'prefix',
-             'IsOrganizationTrail': False}
-        ]}
+        cloudtrail_client.describe_trails.return_value = {
+            'trailList': [
+                {
+                    'TrailARN': TEST_TRAIL_ARN,
+                    'S3BucketName': 'bucket',
+                    'S3KeyPrefix': 'prefix',
+                    'IsOrganizationTrail': False,
+                }
+            ]
+        }
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, trail_source_region='us-east-1',
+            trail_arn=TEST_TRAIL_ARN,
+            trail_source_region='us-east-1',
             cloudtrail_client=cloudtrail_client,
             organization_client=mock.Mock(),
-            s3_client_provider=mock.Mock())
+            s3_client_provider=mock.Mock(),
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         self.assertEqual('prefix', traverser.starting_prefix)
         digest_provider = traverser.digest_provider
@@ -269,15 +328,22 @@ class TestValidation(unittest.TestCase):
 
     def test_create_traverser_organizational_trail_not_launched(self):
         cloudtrail_client = mock.Mock()
-        cloudtrail_client.describe_trails.return_value = {'trailList': [
-            {'TrailARN': TEST_TRAIL_ARN,
-             'S3BucketName': 'bucket', 'S3KeyPrefix': 'prefix'}
-        ]}
+        cloudtrail_client.describe_trails.return_value = {
+            'trailList': [
+                {
+                    'TrailARN': TEST_TRAIL_ARN,
+                    'S3BucketName': 'bucket',
+                    'S3KeyPrefix': 'prefix',
+                }
+            ]
+        }
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, trail_source_region='us-east-1',
+            trail_arn=TEST_TRAIL_ARN,
+            trail_source_region='us-east-1',
             cloudtrail_client=cloudtrail_client,
             organization_client=mock.Mock(),
-            s3_client_provider=mock.Mock())
+            s3_client_provider=mock.Mock(),
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         self.assertEqual('prefix', traverser.starting_prefix)
         digest_provider = traverser.digest_provider
@@ -288,11 +354,13 @@ class TestValidation(unittest.TestCase):
     def test_creates_traverser_and_gets_trail_by_arn_s3_bucket_specified(self):
         cloudtrail_client = mock.Mock()
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, trail_source_region='us-east-1',
+            trail_arn=TEST_TRAIL_ARN,
+            trail_source_region='us-east-1',
             cloudtrail_client=cloudtrail_client,
             organization_client=mock.Mock(),
             s3_client_provider=mock.Mock(),
-            bucket="bucket")
+            bucket="bucket",
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         digest_provider = traverser.digest_provider
         self.assertEqual('us-east-1', digest_provider.trail_home_region)
@@ -301,11 +369,16 @@ class TestValidation(unittest.TestCase):
 
     def test_creates_traverser_and_gets_organization_id(self):
         cloudtrail_client = mock.Mock()
-        cloudtrail_client.describe_trails.return_value = {'trailList': [
-            {'TrailARN': TEST_TRAIL_ARN,
-             'S3BucketName': 'bucket', 'S3KeyPrefix': 'prefix',
-             'IsOrganizationTrail': True}
-        ]}
+        cloudtrail_client.describe_trails.return_value = {
+            'trailList': [
+                {
+                    'TrailARN': TEST_TRAIL_ARN,
+                    'S3BucketName': 'bucket',
+                    'S3KeyPrefix': 'prefix',
+                    'IsOrganizationTrail': True,
+                }
+            ]
+        }
         organization_client = mock.Mock()
         organization_client.describe_organization.return_value = {
             "Organization": {
@@ -314,10 +387,13 @@ class TestValidation(unittest.TestCase):
             }
         }
         traverser = create_digest_traverser(
-            trail_arn=TEST_TRAIL_ARN, trail_source_region='us-east-1',
+            trail_arn=TEST_TRAIL_ARN,
+            trail_source_region='us-east-1',
             cloudtrail_client=cloudtrail_client,
             organization_client=organization_client,
-            s3_client_provider=mock.Mock(), account_id=TEST_ACCOUNT_ID)
+            s3_client_provider=mock.Mock(),
+            account_id=TEST_ACCOUNT_ID,
+        )
         self.assertEqual('bucket', traverser.starting_bucket)
         self.assertEqual('prefix', traverser.starting_prefix)
         digest_provider = traverser.digest_provider
@@ -327,11 +403,16 @@ class TestValidation(unittest.TestCase):
 
     def test_creates_traverser_organization_trail_missing_account_id(self):
         cloudtrail_client = mock.Mock()
-        cloudtrail_client.describe_trails.return_value = {'trailList': [
-            {'TrailARN': TEST_TRAIL_ARN,
-             'S3BucketName': 'bucket', 'S3KeyPrefix': 'prefix',
-             'IsOrganizationTrail': True}
-        ]}
+        cloudtrail_client.describe_trails.return_value = {
+            'trailList': [
+                {
+                    'TrailARN': TEST_TRAIL_ARN,
+                    'S3BucketName': 'bucket',
+                    'S3KeyPrefix': 'prefix',
+                    'IsOrganizationTrail': True,
+                }
+            ]
+        }
         organization_client = mock.Mock()
         organization_client.describe_organization.return_value = {
             "Organization": {
@@ -341,21 +422,25 @@ class TestValidation(unittest.TestCase):
         }
         with self.assertRaises(ParamValidationError):
             create_digest_traverser(
-                trail_arn=TEST_TRAIL_ARN, trail_source_region='us-east-1',
+                trail_arn=TEST_TRAIL_ARN,
+                trail_source_region='us-east-1',
                 cloudtrail_client=cloudtrail_client,
                 organization_client=organization_client,
-                s3_client_provider=mock.Mock())
+                s3_client_provider=mock.Mock(),
+            )
 
 
 class TestSha256RSADigestValidator(unittest.TestCase):
     def setUp(self):
-        self._digest_data = {'digestStartTime': 'baz',
-                             'digestEndTime': 'foo',
-                             'awsAccountId': 'account',
-                             'digestPublicKeyFingerprint': 'abc',
-                             'digestS3Bucket': 'bucket',
-                             'digestS3Object': 'object',
-                             'previousDigestSignature': 'xyz'}
+        self._digest_data = {
+            'digestStartTime': 'baz',
+            'digestEndTime': 'foo',
+            'awsAccountId': 'account',
+            'digestPublicKeyFingerprint': 'abc',
+            'digestS3Bucket': 'bucket',
+            'digestS3Object': 'object',
+            'previousDigestSignature': 'xyz',
+        }
         self._inflated_digest = json.dumps(self._digest_data).encode()
         self._digest_data['_signature'] = 'aeff'
 
@@ -364,8 +449,7 @@ class TestSha256RSADigestValidator(unitt
             public_key,
             private_key,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
         sha256_hash = hashlib.sha256(self._inflated_digest)
         string_to_sign = "%s\n%s/%s\n%s\n%s" % (
@@ -373,38 +457,49 @@ class TestSha256RSADigestValidator(unitt
             self._digest_data['digestS3Bucket'],
             self._digest_data['digestS3Object'],
             sha256_hash.hexdigest(),
-            self._digest_data['previousDigestSignature'])
+            self._digest_data['previousDigestSignature'],
+        )
         to_sign = string_to_sign.encode()
         signature = private_key.sign(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256(to_sign).digest()
+            digest=hashlib.sha256(to_sign).digest(),
         )
 
         self._digest_data['_signature'] = binascii.hexlify(signature)
         validator = Sha256RSADigestValidator()
-        validator.validate('b', 'k', public_key, self._digest_data,
-                           self._inflated_digest)
+        validator.validate(
+            'b', 'k', public_key, self._digest_data, self._inflated_digest
+        )
 
     def test_does_not_expose_underlying_key_decoding_error(self):
         validator = Sha256RSADigestValidator()
         try:
-            validator.validate(
-                'b', 'k', 'YQo=', self._digest_data, 'invalid'.encode())
+            validator.validate('b', 'k', 'YQo=', self._digest_data, b'invalid')
             self.fail('Should have failed')
         except DigestError as e:
-            self.assertEqual(('Digest file\ts3://b/k\tINVALID: Unable to load '
-                              'PKCS #1 key with fingerprint abc'), str(e))
+            self.assertEqual(
+                (
+                    'Digest file\ts3://b/k\tINVALID: Unable to load '
+                    'PKCS #1 key with fingerprint abc'
+                ),
+                str(e),
+            )
 
     def test_does_not_expose_underlying_validation_error(self):
         validator = Sha256RSADigestValidator()
         try:
             validator.validate(
-                'b', 'k', VALID_TEST_KEY, self._digest_data,
-                'invalid'.encode())
+                'b', 'k', VALID_TEST_KEY, self._digest_data, b'invalid'
+            )
             self.fail('Should have failed')
         except DigestSignatureError as e:
-            self.assertEqual(('Digest file\ts3://b/k\tINVALID: signature '
-                              'verification failed'), str(e))
+            self.assertEqual(
+                (
+                    'Digest file\ts3://b/k\tINVALID: signature '
+                    'verification failed'
+                ),
+                str(e),
+            )
 
     def test_properly_signs_when_no_previous_signature(self):
         validator = Sha256RSADigestValidator()
@@ -412,28 +507,33 @@ class TestSha256RSADigestValidator(unitt
             'digestEndTime': 'a',
             'digestS3Bucket': 'b',
             'digestS3Object': 'c',
-            'previousDigestSignature': None}
-        signed = validator._create_string_to_sign(digest_data, 'abc'.encode())
+            'previousDigestSignature': None,
+        }
+        signed = validator._create_string_to_sign(digest_data, b'abc')
         self.assertEqual(
-            ('a\nb/c\nba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff6'
-             '1f20015ad\nnull').encode(), signed)
+            (
+                b'a\nb/c\nba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff6'
+                b'1f20015ad\nnull'
+            ),
+            signed,
+        )
 
 
 class TestDigestProvider(BaseAWSCommandParamsTest):
     def _fake_key(self, date):
         parsed = parser.parse(date)
-        return ('prefix/AWSLogs/{account}/CloudTrail-Digest/us-east-1/{year}/'
-                '{month}/{day}/{account}_CloudTrail-Digest_us-east-1_foo_'
-                'us-east-1_{date}.json.gz').format(date=date, year=parsed.year,
-                                                   month=parsed.month,
-                                                   account=TEST_ACCOUNT_ID,
-                                                   day=parsed.day)
+        return (
+            f'prefix/AWSLogs/{TEST_ACCOUNT_ID}/CloudTrail-Digest/us-east-1/{parsed.year}/'
+            f'{parsed.month}/{parsed.day}/{TEST_ACCOUNT_ID}_CloudTrail-Digest_us-east-1_foo_'
+            f'us-east-1_{date}.json.gz'
+        )
 
     def _get_mock_provider(self, s3_client):
         mock_s3_client_provider = mock.Mock()
         mock_s3_client_provider.get_client.return_value = s3_client
         return DigestProvider(
-            mock_s3_client_provider, TEST_ACCOUNT_ID, 'foo', 'us-east-1')
+            mock_s3_client_provider, TEST_ACCOUNT_ID, 'foo', 'us-east-1'
+        )
 
     def test_initializes_public_properties(self):
         client = mock.Mock()
@@ -444,34 +544,44 @@ class TestDigestProvider(BaseAWSCommandP
 
     def test_returns_digests_in_range(self):
         s3_client = self.driver.session.create_client('s3')
-        keys = [self._fake_key(format_date(START_DATE - timedelta(days=1))),
-                self._fake_key(format_date(START_DATE + timedelta(days=1))),
-                self._fake_key(format_date(START_DATE + timedelta(days=2))),
-                self._fake_key(format_date(START_DATE + timedelta(days=3))),
-                self._fake_key(format_date(END_DATE + timedelta(hours=1))),
-                self._fake_key(format_date(END_DATE + timedelta(days=1)))]
+        keys = [
+            self._fake_key(format_date(START_DATE - timedelta(days=1))),
+            self._fake_key(format_date(START_DATE + timedelta(days=1))),
+            self._fake_key(format_date(START_DATE + timedelta(days=2))),
+            self._fake_key(format_date(START_DATE + timedelta(days=3))),
+            self._fake_key(format_date(END_DATE + timedelta(hours=1))),
+            self._fake_key(format_date(END_DATE + timedelta(days=1))),
+        ]
         # Create a key that looks similar but for a different trail.
         bad_name = keys[3].replace('foo', 'baz')
         # Create a key that looks similar but is from a different trail source
         # region (e.g., CloudTrail-Digest/us-west-2).
         bad_region = keys[3].replace(
-            'CloudTrail-Digest/us-east-1', 'CloudTrail-Digest/us-west-2')
+            'CloudTrail-Digest/us-east-1', 'CloudTrail-Digest/us-west-2'
+        )
         bad_region = bad_region.replace(
-            'CloudTrail-Digest_us-east-1', 'CloudTrail-Digest_us-west-2')
+            'CloudTrail-Digest_us-east-1', 'CloudTrail-Digest_us-west-2'
+        )
         self.parsed_responses = [
-            {"Contents": [{"Key": keys[0]},        # skip (date <)
-                          {"Key": keys[1]},
-                          {"Key": keys[2]},
-                          {"Key": 'foo/baz/bar'},  # skip (regex (bogus))
-                          {"Key": bad_name},       # skip (regex (trail name))
-                          {"Key": bad_region},     # skip (regex (source))
-                          {"Key": keys[3]},
-                          {"Key": keys[4]},        # hour is +1, but keep
-                          {"Key": keys[5]}]}]      # skip (date >)
+            {
+                "Contents": [
+                    {"Key": keys[0]},  # skip (date <)
+                    {"Key": keys[1]},
+                    {"Key": keys[2]},
+                    {"Key": 'foo/baz/bar'},  # skip (regex (bogus))
+                    {"Key": bad_name},  # skip (regex (trail name))
+                    {"Key": bad_region},  # skip (regex (source))
+                    {"Key": keys[3]},
+                    {"Key": keys[4]},  # hour is +1, but keep
+                    {"Key": keys[5]},
+                ]
+            }
+        ]  # skip (date >)
         self.patch_make_request()
         provider = self._get_mock_provider(s3_client)
         digests = provider.load_digest_keys_in_range(
-            'foo', 'prefix', START_DATE, END_DATE)
+            'foo', 'prefix', START_DATE, END_DATE
+        )
         self.assertNotIn(bad_name, digests)
         self.assertNotIn(bad_region, digests)
         self.assertEqual(keys[1], digests[0])
@@ -485,14 +595,15 @@ class TestDigestProvider(BaseAWSCommandP
         mock_search = mock_paginate.return_value.search
         mock_search.return_value = []
         provider = self._get_mock_provider(s3_client)
-        provider.load_digest_keys_in_range(
-            '1', 'prefix', START_DATE, END_DATE)
-        marker = ('prefix/AWSLogs/{account}/CloudTrail-Digest/us-east-1/'
-                  '2014/08/09/{account}_CloudTrail-Digest_us-east-1_foo_'
-                  'us-east-1_20140809T235900Z.json.gz')
+        provider.load_digest_keys_in_range('1', 'prefix', START_DATE, END_DATE)
+        marker = (
+            'prefix/AWSLogs/{account}/CloudTrail-Digest/us-east-1/'
+            '2014/08/09/{account}_CloudTrail-Digest_us-east-1_foo_'
+            'us-east-1_20140809T235900Z.json.gz'
+        )
         mock_paginate.assert_called_once_with(
-            Bucket='1',
-            Marker=marker.format(account=TEST_ACCOUNT_ID))
+            Bucket='1', Marker=marker.format(account=TEST_ACCOUNT_ID)
+        )
 
     def test_calls_list_objects_correctly_org_trails(self):
         s3_client = mock.Mock()
@@ -502,11 +613,14 @@ class TestDigestProvider(BaseAWSCommandP
         mock_search.return_value = []
         mock_s3_client_provider.get_client.return_value = s3_client
         provider = DigestProvider(
-            mock_s3_client_provider, TEST_ORGANIZATION_ACCOUNT_ID,
-            'foo', 'us-east-1', 'us-east-1',
-            TEST_ORGANIZATION_ID)
-        provider.load_digest_keys_in_range(
-            '1', 'prefix', START_DATE, END_DATE)
+            mock_s3_client_provider,
+            TEST_ORGANIZATION_ACCOUNT_ID,
+            'foo',
+            'us-east-1',
+            'us-east-1',
+            TEST_ORGANIZATION_ID,
+        )
+        provider.load_digest_keys_in_range('1', 'prefix', START_DATE, END_DATE)
         marker = (
             'prefix/AWSLogs/{organization_id}/{member_account}/'
             'CloudTrail-Digest/us-east-1/'
@@ -517,20 +631,21 @@ class TestDigestProvider(BaseAWSCommandP
             Bucket='1',
             Marker=marker.format(
                 member_account=TEST_ORGANIZATION_ACCOUNT_ID,
-                organization_id=TEST_ORGANIZATION_ID
-            )
+                organization_id=TEST_ORGANIZATION_ID,
+            ),
         )
 
     def test_ensures_digest_has_proper_metadata(self):
         out = BytesIO()
         f = gzip.GzipFile(fileobj=out, mode="wb")
-        f.write('{"foo":"bar"}'.encode())
+        f.write(b'{"foo":"bar"}')
         f.close()
         gzipped_data = out.getvalue()
         s3_client = mock.Mock()
         s3_client.get_object.return_value = {
             'Body': BytesIO(gzipped_data),
-            'Metadata': {}}
+            'Metadata': {},
+        }
         provider = self._get_mock_provider(s3_client)
         with self.assertRaises(DigestSignatureError):
             provider.fetch_digest('bucket', 'key')
@@ -538,8 +653,9 @@ class TestDigestProvider(BaseAWSCommandP
     def test_ensures_digest_can_be_gzip_inflated(self):
         s3_client = mock.Mock()
         s3_client.get_object.return_value = {
-            'Body': BytesIO('foo'.encode()),
-            'Metadata': {}}
+            'Body': BytesIO(b'foo'),
+            'Metadata': {},
+        }
         provider = self._get_mock_provider(s3_client)
         with self.assertRaises(InvalidDigestFormat):
             provider.fetch_digest('bucket', 'key')
@@ -554,7 +670,8 @@ class TestDigestProvider(BaseAWSCommandP
         s3_client = mock.Mock()
         s3_client.get_object.return_value = {
             'Body': BytesIO(gzipped_data),
-            'Metadata': {'signature': 'abc', 'signature-algorithm': 'SHA256'}}
+            'Metadata': {'signature': 'abc', 'signature-algorithm': 'SHA256'},
+        }
         provider = self._get_mock_provider(s3_client)
         with self.assertRaises(InvalidDigestFormat):
             provider.fetch_digest('bucket', 'key')
@@ -569,11 +686,18 @@ class TestDigestProvider(BaseAWSCommandP
         s3_client = mock.Mock()
         s3_client.get_object.return_value = {
             'Body': BytesIO(gzipped_data),
-            'Metadata': {'signature': 'abc', 'signature-algorithm': 'SHA256'}}
+            'Metadata': {'signature': 'abc', 'signature-algorithm': 'SHA256'},
+        }
         provider = self._get_mock_provider(s3_client)
         result = provider.fetch_digest('bucket', 'key')
-        self.assertEqual({'foo': 'bar', '_signature': 'abc',
-                          '_signature_algorithm': 'SHA256'}, result[0])
+        self.assertEqual(
+            {
+                'foo': 'bar',
+                '_signature': 'abc',
+                '_signature_algorithm': 'SHA256',
+            },
+            result[0],
+        )
         self.assertEqual(json_str.encode(), result[1])
 
 
@@ -581,8 +705,11 @@ class TestDigestTraverser(unittest.TestC
     def test_initializes_with_default_validator(self):
         provider = mock.Mock()
         traverser = DigestTraverser(
-            digest_provider=provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=mock.Mock())
+            digest_provider=provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=mock.Mock(),
+        )
         self.assertEqual('1', traverser.starting_bucket)
         self.assertEqual('baz', traverser.starting_prefix)
         self.assertEqual(provider, traverser.digest_provider)
@@ -594,13 +721,15 @@ class TestDigestTraverser(unittest.TestC
         key_provider = mock.Mock()
         key_provider.get_public_keys.return_value = []
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+        )
         digest_iter = traverser.traverse(start_date, end_date)
         with self.assertRaises(RuntimeError):
             next(digest_iter)
-        key_provider.get_public_keys.assert_called_with(
-            start_date, end_date)
+        key_provider.get_public_keys.assert_called_with(start_date, end_date)
 
     def test_ensures_public_key_is_found(self):
         start_date = START_DATE
@@ -611,97 +740,123 @@ class TestDigestTraverser(unittest.TestC
         digest_provider.trail_home_region = region
         digest_provider.load_digest_keys_in_range.return_value = [key_name]
         digest_provider.fetch_digest.return_value = (
-            {'digestEndTime': 'foo',
-             'digestStartTime': 'foo',
-             'awsAccountId': 'account',
-             'digestPublicKeyFingerprint': 'abc',
-             'digestS3Bucket': '1',
-             'digestS3Object': key_name,
-             'previousDigestSignature': 'xyz'},
-            'abc'
+            {
+                'digestEndTime': 'foo',
+                'digestStartTime': 'foo',
+                'awsAccountId': 'account',
+                'digestPublicKeyFingerprint': 'abc',
+                'digestS3Bucket': '1',
+                'digestS3Object': key_name,
+                'previousDigestSignature': 'xyz',
+            },
+            'abc',
         )
         key_provider = mock.Mock()
         key_provider.get_public_keys.return_value = [{'Fingerprint': 'a'}]
         on_invalid, calls = collecting_callback()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            on_invalid=on_invalid)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            on_invalid=on_invalid,
+        )
         digest_iter = traverser.traverse(start_date, end_date)
         with self.assertRaises(StopIteration):
             next(digest_iter)
         self.assertEqual(1, len(calls))
         self.assertEqual(
-            ('Digest file\ts3://1/%s\tINVALID: public key not '
-             'found in region %s for fingerprint abc' % (key_name, region)),
-            calls[0]['message'])
+            (
+                'Digest file\ts3://1/%s\tINVALID: public key not '
+                'found in region %s for fingerprint abc' % (key_name, region)
+            ),
+            calls[0]['message'],
+        )
 
     def test_invokes_digest_validator(self):
         start_date = START_DATE
         end_date = END_DATE
         key_name = end_date.strftime(DATE_FORMAT) + '.json.gz'
-        digest = {'digestPublicKeyFingerprint': 'a',
-                  'digestS3Bucket': '1',
-                  'digestS3Object': key_name,
-                  'previousDigestSignature': '...',
-                  'digestStartTime': (end_date - timedelta(hours=1)).strftime(
-                      DATE_FORMAT),
-                  'digestEndTime': end_date.strftime(DATE_FORMAT)}
+        digest = {
+            'digestPublicKeyFingerprint': 'a',
+            'digestS3Bucket': '1',
+            'digestS3Object': key_name,
+            'previousDigestSignature': '...',
+            'digestStartTime': (end_date - timedelta(hours=1)).strftime(
+                DATE_FORMAT
+            ),
+            'digestEndTime': end_date.strftime(DATE_FORMAT),
+        }
         digest_provider = mock.Mock()
-        digest_provider.load_digest_keys_in_range.return_value = [
-            key_name]
+        digest_provider.load_digest_keys_in_range.return_value = [key_name]
         digest_provider.fetch_digest.return_value = (digest, key_name)
         key_provider = mock.Mock()
         public_keys = {'a': {'Fingerprint': 'a', 'Value': 'a'}}
         key_provider.get_public_keys.return_value = public_keys
         digest_validator = mock.Mock()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=digest_validator)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=digest_validator,
+        )
         digest_iter = traverser.traverse(start_date, end_date)
         self.assertEqual(digest, next(digest_iter))
         digest_validator.validate.assert_called_with(
-            '1', key_name, public_keys['a']['Value'], digest, key_name)
+            '1', key_name, public_keys['a']['Value'], digest, key_name
+        )
 
     def test_ensures_digest_from_same_location_as_json_contents(self):
         start_date = START_DATE
         end_date = END_DATE
         callback, collected = collecting_callback()
         key_name = end_date.strftime(DATE_FORMAT) + '.json.gz'
-        digest = {'digestPublicKeyFingerprint': 'a',
-                  'digestS3Bucket': 'not_same',
-                  'digestS3Object': key_name,
-                  'digestEndTime': end_date.strftime(DATE_FORMAT)}
+        digest = {
+            'digestPublicKeyFingerprint': 'a',
+            'digestS3Bucket': 'not_same',
+            'digestS3Object': key_name,
+            'digestEndTime': end_date.strftime(DATE_FORMAT),
+        }
         digest_provider = mock.Mock()
         digest_provider.load_digest_keys_in_range.return_value = [key_name]
         digest_provider.fetch_digest.return_value = (digest, key_name)
         key_provider = mock.Mock()
         digest_validator = mock.Mock()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=digest_validator, on_invalid=callback)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=digest_validator,
+            on_invalid=callback,
+        )
         digest_iter = traverser.traverse(start_date, end_date)
         self.assertIsNone(next(digest_iter, None))
         self.assertEqual(1, len(collected))
         self.assertEqual(
             'Digest file\ts3://1/%s\tINVALID: invalid format' % key_name,
-            collected[0]['message'])
+            collected[0]['message'],
+        )
 
     def test_loads_digests_in_range(self):
         start_date = START_DATE
         end_date = START_DATE + timedelta(hours=5)
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link', 'link', 'link'])
+            ['gap', 'link', 'link', 'link']
+        )
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=validator)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=validator,
+        )
         collected = list(traverser.traverse(start_date, end_date))
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         self.assertEqual(
-            1, len(digest_provider.calls['load_digest_keys_in_range']))
+            1, len(digest_provider.calls['load_digest_keys_in_range'])
+        )
         self.assertEqual(4, len(digest_provider.calls['fetch_digest']))
         self.assertEqual(4, len(collected))
 
@@ -709,12 +864,17 @@ class TestDigestTraverser(unittest.TestC
         start_date = START_DATE
         end_date = END_DATE
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link', 'missing', 'link'])
+            ['gap', 'link', 'missing', 'link']
+        )
         on_missing, missing_calls = collecting_callback()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=validator, on_missing=on_missing)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=validator,
+            on_missing=on_missing,
+        )
         collected = list(traverser.traverse(start_date, end_date))
         self.assertEqual(3, len(collected))
         self.assertEqual(1, key_provider.get_public_keys.call_count)
@@ -723,26 +883,34 @@ class TestDigestTraverser(unittest.TestC
         self.assertIn('bucket', missing_calls[0])
         self.assertIn('next_end_date', missing_calls[0])
         # Ensure the keys were provided in the correct order.
-        self.assertEqual(digest_provider.digests[1],
-                         missing_calls[0]['next_key'])
-        self.assertEqual(digest_provider.digests[2],
-                         missing_calls[0]['last_key'])
+        self.assertEqual(
+            digest_provider.digests[1], missing_calls[0]['next_key']
+        )
+        self.assertEqual(
+            digest_provider.digests[2], missing_calls[0]['last_key']
+        )
         # Ensure the provider was called correctly
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         self.assertEqual(
-            1, len(digest_provider.calls['load_digest_keys_in_range']))
+            1, len(digest_provider.calls['load_digest_keys_in_range'])
+        )
         self.assertEqual(4, len(digest_provider.calls['fetch_digest']))
 
     def test_invokes_cb_and_continues_when_invalid(self):
         start_date = START_DATE
         end_date = END_DATE
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link', 'invalid', 'link', 'invalid'])
+            ['gap', 'link', 'invalid', 'link', 'invalid']
+        )
         on_invalid, invalid_calls = collecting_callback()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=validator, on_invalid=on_invalid)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=validator,
+            on_invalid=on_invalid,
+        )
         collected = list(traverser.traverse(start_date, end_date))
         self.assertEqual(3, len(collected))
         self.assertEqual(1, key_provider.get_public_keys.call_count)
@@ -751,30 +919,40 @@ class TestDigestTraverser(unittest.TestC
         self.assertIn('bucket', invalid_calls[0])
         self.assertIn('next_end_date', invalid_calls[0])
         # Ensure the keys were provided in the correct order.
-        self.assertEqual(digest_provider.digests[4],
-                         invalid_calls[0]['last_key'])
-        self.assertEqual(digest_provider.digests[3],
-                         invalid_calls[0]['next_key'])
-        self.assertEqual(digest_provider.digests[2],
-                         invalid_calls[1]['last_key'])
-        self.assertEqual(digest_provider.digests[1],
-                         invalid_calls[1]['next_key'])
+        self.assertEqual(
+            digest_provider.digests[4], invalid_calls[0]['last_key']
+        )
+        self.assertEqual(
+            digest_provider.digests[3], invalid_calls[0]['next_key']
+        )
+        self.assertEqual(
+            digest_provider.digests[2], invalid_calls[1]['last_key']
+        )
+        self.assertEqual(
+            digest_provider.digests[1], invalid_calls[1]['next_key']
+        )
         # Ensure the provider was called correctly
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         self.assertEqual(
-            1, len(digest_provider.calls['load_digest_keys_in_range']))
+            1, len(digest_provider.calls['load_digest_keys_in_range'])
+        )
         self.assertEqual(5, len(digest_provider.calls['fetch_digest']))
 
     def test_invokes_cb_and_continues_when_gap(self):
         start_date = START_DATE
         end_date = END_DATE
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link', 'gap', 'gap'])
+            ['gap', 'link', 'gap', 'gap']
+        )
         on_gap, gap_calls = collecting_callback()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=validator, on_gap=on_gap)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=validator,
+            on_gap=on_gap,
+        )
         collected = list(traverser.traverse(start_date, end_date))
         self.assertEqual(4, len(collected))
         self.assertEqual(1, key_provider.get_public_keys.call_count)
@@ -793,43 +971,54 @@ class TestDigestTraverser(unittest.TestC
         # Ensure the provider was called correctly
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         self.assertEqual(
-            1, len(digest_provider.calls['load_digest_keys_in_range']))
+            1, len(digest_provider.calls['load_digest_keys_in_range'])
+        )
         self.assertEqual(4, len(digest_provider.calls['fetch_digest']))
 
     def test_reloads_objects_on_bucket_change(self):
         start_date = START_DATE
         end_date = END_DATE
         key_provider, digest_provider, validator = create_scenario(
-            ['gap', 'link', 'bucket_change', 'link'])
+            ['gap', 'link', 'bucket_change', 'link']
+        )
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=validator)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=validator,
+        )
         collected = list(traverser.traverse(start_date, end_date))
         self.assertEqual(4, len(collected))
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         # Ensure the provider was called correctly
         self.assertEqual(1, key_provider.get_public_keys.call_count)
         self.assertEqual(
-            2, len(digest_provider.calls['load_digest_keys_in_range']))
-        self.assertEqual(['1', '1', '2', '2'],
-                          [c['digestS3Bucket'] for c in collected])
+            2, len(digest_provider.calls['load_digest_keys_in_range'])
+        )
+        self.assertEqual(
+            ['1', '1', '2', '2'], [c['digestS3Bucket'] for c in collected]
+        )
 
     def test_does_not_hard_fail_on_invalid_signature(self):
         start_date = START_DATE
         end_date = END_DATE
         end_timestamp = end_date.strftime(DATE_FORMAT) + '.json.gz'
-        digest = {'digestPublicKeyFingerprint': 'a',
-                  'digestS3Bucket': '1',
-                  'digestS3Object': end_timestamp,
-                  'previousDigestSignature': '...',
-                  'digestStartTime': (end_date - timedelta(hours=1)).strftime(
-                      DATE_FORMAT),
-                  'digestEndTime': end_timestamp,
-                  '_signature': '123'}
+        digest = {
+            'digestPublicKeyFingerprint': 'a',
+            'digestS3Bucket': '1',
+            'digestS3Object': end_timestamp,
+            'previousDigestSignature': '...',
+            'digestStartTime': (end_date - timedelta(hours=1)).strftime(
+                DATE_FORMAT
+            ),
+            'digestEndTime': end_timestamp,
+            '_signature': '123',
+        }
         digest_provider = mock.Mock()
         digest_provider.load_digest_keys_in_range.return_value = [
-            end_timestamp]
+            end_timestamp
+        ]
         digest_provider.fetch_digest.return_value = (digest, end_timestamp)
         key_provider = mock.Mock()
         public_keys = {'a': {'Fingerprint': 'a', 'Value': 'a'}}
@@ -837,37 +1026,45 @@ class TestDigestTraverser(unittest.TestC
         digest_validator = Sha256RSADigestValidator()
         on_invalid, calls = collecting_callback()
         traverser = DigestTraverser(
-            digest_provider=digest_provider, starting_bucket='1',
-            starting_prefix='baz', public_key_provider=key_provider,
-            digest_validator=digest_validator, on_invalid=on_invalid)
+            digest_provider=digest_provider,
+            starting_bucket='1',
+            starting_prefix='baz',
+            public_key_provider=key_provider,
+            digest_validator=digest_validator,
+            on_invalid=on_invalid,
+        )
         digest_iter = traverser.traverse(start_date, end_date)
         next(digest_iter, None)
         self.assertIn(
             'Digest file\ts3://1/%s\tINVALID: ' % end_timestamp,
-            calls[0]['message'])
+            calls[0]['message'],
+        )
 
 
 class TestCloudTrailCommand(BaseAWSCommandParamsTest):
     def test_s3_client_created_lazily(self):
         session = mock.Mock()
         command = CloudTrailValidateLogs(session)
-        parsed_globals = mock.Mock(region=None, verify_ssl=None, endpoint_url=None)
+        parsed_globals = mock.Mock(
+            region=None, verify_ssl=None, endpoint_url=None
+        )
         command.setup_services(parsed_globals)
         create_client_calls = session.create_client.call_args_list
         self.assertEqual(
             create_client_calls,
             [
                 mock.call('organizations', verify=None, region_name=None),
-                mock.call('cloudtrail', verify=None, region_name=None)
-            ]
+                mock.call('cloudtrail', verify=None, region_name=None),
+            ],
         )
 
     def test_endpoint_url_is_used_for_cloudtrail(self):
         endpoint_url = 'https://mycloudtrail.aws.amazon.com/'
         session = mock.Mock()
         command = CloudTrailValidateLogs(session)
-        parsed_globals = mock.Mock(region='foo', verify_ssl=None,
-                              endpoint_url=endpoint_url)
+        parsed_globals = mock.Mock(
+            region='foo', verify_ssl=None, endpoint_url=endpoint_url
+        )
         command.setup_services(parsed_globals)
         create_client_calls = session.create_client.call_args_list
         self.assertEqual(
@@ -875,18 +1072,28 @@ class TestCloudTrailCommand(BaseAWSComma
             [
                 mock.call('organizations', verify=None, region_name='foo'),
                 # Here we should inject the endpoint_url only for cloudtrail.
-                mock.call('cloudtrail', verify=None, region_name='foo',
-                     endpoint_url=endpoint_url)
-            ]
+                mock.call(
+                    'cloudtrail',
+                    verify=None,
+                    region_name='foo',
+                    endpoint_url=endpoint_url,
+                ),
+            ],
         )
 
     def test_initializes_args(self):
         session = mock.Mock()
         command = CloudTrailValidateLogs(session)
         start_date = START_DATE.strftime(DATE_FORMAT)
-        args = Namespace(trail_arn='abc', verbose=True,
-                         start_time=start_date, s3_bucket='bucket',
-                         s3_prefix='prefix', end_time=None, account_id=None)
+        args = Namespace(
+            trail_arn='abc',
+            verbose=True,
+            start_time=start_date,
+            s3_bucket='bucket',
+            s3_prefix='prefix',
+            end_time=None,
+            account_id=None,
+        )
         command.handle_args(args)
         self.assertEqual('abc', command.trail_arn)
         self.assertEqual(True, command.is_verbose)
@@ -915,15 +1122,16 @@ class TestS3ClientProvider(BaseAWSComman
         s3_client = mock.Mock()
         session.create_client.return_value = s3_client
         s3_client.get_bucket_location.return_value = {
-            'LocationConstraint': 'us-west-2'}
+            'LocationConstraint': 'us-west-2'
+        }
         provider = S3ClientProvider(session, 'us-west-1')
         created_client = provider.get_client('foo')
         self.assertEqual(s3_client, created_client)
         create_client_calls = session.create_client.call_args_list
-        self.assertEqual(create_client_calls, [
-            mock.call('s3', 'us-west-1'),
-            mock.call('s3', 'us-west-2')
-        ])
+        self.assertEqual(
+            create_client_calls,
+            [mock.call('s3', 'us-west-1'), mock.call('s3', 'us-west-2')],
+        )
         self.assertEqual(1, s3_client.get_bucket_location.call_count)
 
     def test_caches_previously_loaded_bucket_regions(self):
diff -pruN 2.23.6-1/tests/unit/customizations/cloudtrail/test_verifyqueryresult.py 2.31.35-1/tests/unit/customizations/cloudtrail/test_verifyqueryresult.py
--- 2.23.6-1/tests/unit/customizations/cloudtrail/test_verifyqueryresult.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/cloudtrail/test_verifyqueryresult.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,29 +1,30 @@
 import binascii
+import copy
+import hashlib
 import json
 import os
-import hashlib
 from io import BytesIO
-import copy
 
 from awscrt.crypto import RSASignatureAlgorithm
 
-from awscli.testutils import mock, unittest
 from awscli.customizations.cloudtrail.verifyqueryresults import (
-    Sha256RsaSignatureValidator,
-    S3SignFileProvider,
-    LocalSignFileProvider,
     SIGN_FILE_NAME,
-    S3ExportFilesHashValidator,
+    InformationCollectionError,
     LocalExportFilesHashValidator,
+    LocalSignFileProvider,
+    S3ExportFilesHashValidator,
+    S3SignFileProvider,
+    Sha256RsaSignatureValidator,
     ValidationError,
-    InformationCollectionError,
 )
+from awscli.testutils import mock, unittest
 from tests import PublicPrivateKeyLoader
+
 from . import get_private_key_path, get_public_key_path
 
 s3_bucket = "s3-bucket-name"
 S3_PREFIX = "s3/prefix/"
-S3_PATH = "s3://{}/{}".format(s3_bucket, S3_PREFIX)
+S3_PATH = f"s3://{s3_bucket}/{S3_PREFIX}"
 LOCAL_FILE_PREFIX = "/local/prefix/"
 SAMPLE_SIGNING_FILE = {
     "region": "us-east-1",
@@ -105,13 +106,13 @@ class TestExportFilesHashValidator(unitt
             [
                 mock.call(
                     Bucket=s3_bucket,
-                    Key=S3_PREFIX + SAMPLE_SIGNING_FILE["files"][0]["fileName"],
+                    Key=S3_PREFIX
+                    + SAMPLE_SIGNING_FILE["files"][0]["fileName"],
                 )
             ]
         )
 
     def test_traverse_from_local_success(self):
-
         current_dir = os.path.dirname(os.path.realpath(__file__))
         validator = LocalExportFilesHashValidator(
             local_path_prefix=os.path.join(current_dir, "test_resource")
@@ -152,8 +153,14 @@ class TestSha256RSADigestValidator(unitt
         self._sign_file = {
             "region": "us-east-1",
             "files": [
-                {"fileHashValue": "fileHashValue1", "fileName": "result_1.csv.gz"},
-                {"fileHashValue": "fileHashValue2", "fileName": "result_2.csv.gz"},
+                {
+                    "fileHashValue": "fileHashValue1",
+                    "fileName": "result_1.csv.gz",
+                },
+                {
+                    "fileHashValue": "fileHashValue2",
+                    "fileName": "result_2.csv.gz",
+                },
             ],
             "hashAlgorithm": "SHA-256",
             "signatureAlgorithm": "SHA256withRSA",
@@ -165,8 +172,7 @@ class TestSha256RSADigestValidator(unitt
             public_key,
             private_key,
         ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-            get_private_key_path(),
-            get_public_key_path()
+            get_private_key_path(), get_public_key_path()
         )
         string_to_sign = "{} {}".format(
             self._sign_file["files"][0]["fileHashValue"],
@@ -175,7 +181,7 @@ class TestSha256RSADigestValidator(unitt
 
         signature = private_key.sign(
             signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-            digest=hashlib.sha256(string_to_sign.encode()).digest()
+            digest=hashlib.sha256(string_to_sign.encode()).digest(),
         )
         self._sign_file["hashSignature"] = binascii.hexlify(signature)
         validator = Sha256RsaSignatureValidator()
@@ -187,8 +193,7 @@ class TestSha256RSADigestValidator(unitt
                 _,
                 private_key,
             ) = PublicPrivateKeyLoader.load_private_key_and_public_key(
-                get_private_key_path(),
-                get_public_key_path()
+                get_private_key_path(), get_public_key_path()
             )
             string_to_sign = "{} {}".format(
                 self._sign_file["files"][0]["fileHashValue"],
@@ -196,7 +201,7 @@ class TestSha256RSADigestValidator(unitt
             )
             signature = private_key.sign(
                 signature_algorithm=RSASignatureAlgorithm.PKCS1_5_SHA256,
-                digest=hashlib.sha256(string_to_sign.encode()).digest()
+                digest=hashlib.sha256(string_to_sign.encode()).digest(),
             )
             self._sign_file["hashSignature"] = binascii.hexlify(signature)
             validator = Sha256RsaSignatureValidator()
diff -pruN 2.23.6-1/tests/unit/customizations/codeartifact/__init__.py 2.31.35-1/tests/unit/customizations/codeartifact/__init__.py
--- 2.23.6-1/tests/unit/customizations/codeartifact/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codeartifact/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,8 +1,9 @@
-from awscli.testutils import unittest
-from awscli.testutils import mock
-from awscli.customizations.codeartifact import register_codeartifact_commands
-from awscli.customizations.codeartifact import inject_commands
+from awscli.customizations.codeartifact import (
+    inject_commands,
+    register_codeartifact_commands,
+)
 from awscli.customizations.codeartifact.login import CodeArtifactLogin
+from awscli.testutils import mock, unittest
 
 
 class TestRegisterCodeArtifactCommands(unittest.TestCase):
@@ -20,6 +21,4 @@ class TestInjectCommands(unittest.TestCa
         session = mock.Mock()
         inject_commands(command_table, session)
         self.assertIn('login', command_table)
-        self.assertIsInstance(
-            command_table['login'], CodeArtifactLogin
-        )
+        self.assertIsInstance(command_table['login'], CodeArtifactLogin)
diff -pruN 2.23.6-1/tests/unit/customizations/codeartifact/test_adapter_login.py 2.31.35-1/tests/unit/customizations/codeartifact/test_adapter_login.py
--- 2.23.6-1/tests/unit/customizations/codeartifact/test_adapter_login.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codeartifact/test_adapter_login.py	2025-11-12 19:17:29.000000000 +0000
@@ -4,20 +4,26 @@ import re
 import signal
 import stat
 import subprocess
-
-from datetime import datetime
-from dateutil.tz import tzlocal, tzutc
-from dateutil.relativedelta import relativedelta
-
 from configparser import RawConfigParser
+from datetime import datetime
 from urllib.parse import urlsplit
 
-from awscli.testutils import unittest, mock, FileCreator, skip_if_windows
+from dateutil.relativedelta import relativedelta
+from dateutil.tz import tzlocal, tzutc
+
 from awscli.compat import urlparse
 from awscli.customizations.codeartifact.login import (
-    BaseLogin, SwiftLogin, NuGetLogin, DotNetLogin, NpmLogin, PipLogin,
-    TwineLogin, get_relative_expiration_time, CommandFailedError
+    BaseLogin,
+    CommandFailedError,
+    DotNetLogin,
+    NpmLogin,
+    NuGetLogin,
+    PipLogin,
+    SwiftLogin,
+    TwineLogin,
+    get_relative_expiration_time,
 )
+from awscli.testutils import FileCreator, mock, skip_if_windows, unittest
 
 
 class TestBaseLogin(unittest.TestCase):
@@ -27,21 +33,25 @@ class TestBaseLogin(unittest.TestCase):
         self.package_format = 'npm'
         self.repository = 'repository'
         self.auth_token = 'auth-token'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(hours=10)
-                           + relativedelta(minutes=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(hours=10)
+            + relativedelta(minutes=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
 
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = BaseLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     def test_login(self):
@@ -50,22 +60,20 @@ class TestBaseLogin(unittest.TestCase):
 
     def test_get_commands(self):
         with self.assertRaises(NotImplementedError):
-            self.test_subject.get_commands(
-                self.endpoint, self.auth_token
-            )
+            self.test_subject.get_commands(self.endpoint, self.auth_token)
 
     def test_run_commands_command_failed(self):
         error_to_be_caught = subprocess.CalledProcessError(
             returncode=1,
             cmd=['cmd'],
             output=None,
-            stderr=b'Command error message.'
+            stderr=b'Command error message.',
         )
         self.subprocess_utils.run.side_effect = error_to_be_caught
         with self.assertRaisesRegex(
             CommandFailedError,
             rf"{re.escape(str(error_to_be_caught))}"
-            rf" Stderr from command:\nCommand error message."
+            rf" Stderr from command:\nCommand error message.",
         ):
             self.test_subject._run_commands('tool', ['cmd'])
 
@@ -74,13 +82,15 @@ class TestBaseLogin(unittest.TestCase):
             returncode=1,
             cmd=['cmd', 'with', 'auth-token', 'present'],
             output=None,
-            stderr=b'Command error message.'
+            stderr=b'Command error message.',
         )
         self.subprocess_utils.run.side_effect = error_to_be_caught
         with self.assertRaisesRegex(
-                CommandFailedError,
-                (rf"(?=.*cmd)(?=.*with)(?!.*auth-token)(?=.*present)"
-                 rf"(?=.*Stderr from command:\nCommand error message.)")
+            CommandFailedError,
+            (
+                r"(?=.*cmd)(?=.*with)(?!.*auth-token)(?=.*present)"
+                r"(?=.*Stderr from command:\nCommand error message.)"
+            ),
         ):
             self.test_subject._run_commands('tool', ['cmd'])
 
@@ -106,7 +116,6 @@ def handle_timeout(signum, frame, test_n
 
 
 class TestSwiftLogin(unittest.TestCase):
-
     def setUp(self):
         self.domain = 'domain'
         self.domain_owner = 'domain-owner'
@@ -114,14 +123,18 @@ class TestSwiftLogin(unittest.TestCase):
         self.repository = 'repository'
         self.auth_token = 'auth-token'
         self.namespace = 'namespace'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(hours=10)
-                           + relativedelta(minutes=9)).replace(microsecond=0)
-        self.endpoint = f'https://{self.domain}-{self.domain_owner}.codeartifact' \
-                        f'.aws.a2z.com/{self.package_format}/{self.repository}/'
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(hours=10)
+            + relativedelta(minutes=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact'
+            f'.aws.a2z.com/{self.package_format}/{self.repository}/'
+        )
         self.hostname = urlparse.urlparse(self.endpoint).hostname
         self.new_entry = SwiftLogin.DEFAULT_NETRC_FMT.format(
-            hostname=self.hostname,
-            auth_token=self.auth_token
+            hostname=self.hostname, auth_token=self.auth_token
         )
 
         self.file_creator = FileCreator()
@@ -136,19 +149,29 @@ class TestSwiftLogin(unittest.TestCase):
         self.base_command = ['swift', 'package-registry', 'set', self.endpoint]
         self.macos_commands = [
             self.base_command[:],
-            ['swift', 'package-registry', 'login', self.endpoint + 'login',
-             '--token', self.auth_token]
+            [
+                'swift',
+                'package-registry',
+                'login',
+                self.endpoint + 'login',
+                '--token',
+                self.auth_token,
+            ],
         ]
         self.non_macos_commands = [
             self.base_command[:],
-            ['swift', 'package-registry', 'login', self.endpoint + 'login']
+            ['swift', 'package-registry', 'login', self.endpoint + 'login'],
         ]
 
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = SwiftLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     def tearDown(self):
@@ -156,7 +179,7 @@ class TestSwiftLogin(unittest.TestCase):
         self.file_creator.remove_all()
 
     def _assert_netrc_has_expected_content(self, expected_contents):
-        with open(self.test_netrc_path, 'r') as file:
+        with open(self.test_netrc_path) as file:
             actual_contents = file.read()
             self.assertEqual(expected_contents, actual_contents)
 
@@ -167,24 +190,22 @@ class TestSwiftLogin(unittest.TestCase):
         self.assertTrue(stat.S_IWUSR & file_mode)
 
     def test_get_netrc_path(self):
-        self.assertEqual(
-            SwiftLogin.get_netrc_path(),
-            self.test_netrc_path
-        )
+        self.assertEqual(SwiftLogin.get_netrc_path(), self.test_netrc_path)
 
     def test_regex_only_match_escaped_hostname(self):
         pattern = re.compile(
             SwiftLogin.NETRC_REGEX_FMT.format(
                 escaped_hostname=re.escape(self.hostname)
             ),
-            re.M
+            re.M,
+        )
+        bad_endpoint = (
+            f'https://{self.domain}-{self.domain_owner}-codeartifact'
+            f'-aws-a2z-com/{self.package_format}/{self.repository}/'
         )
-        bad_endpoint = f'https://{self.domain}-{self.domain_owner}-codeartifact' \
-                          f'-aws-a2z-com/{self.package_format}/{self.repository}/'
         bad_hostname = urlparse.urlparse(bad_endpoint).hostname
         bad_entry = SwiftLogin.DEFAULT_NETRC_FMT.format(
-            hostname=bad_hostname,
-            auth_token=self.auth_token
+            hostname=bad_hostname, auth_token=self.auth_token
         )
         self.assertTrue(pattern.match(self.new_entry))
         self.assertFalse(pattern.match(bad_entry))
@@ -192,26 +213,20 @@ class TestSwiftLogin(unittest.TestCase):
     def test_create_netrc_if_not_exist(self):
         self.assertFalse(os.path.exists(self.test_netrc_path))
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            'a new entry',
-            self.test_netrc_path
+            self.hostname, 'a new entry', self.test_netrc_path
         )
         self.assertTrue(os.path.exists(self.test_netrc_path))
         self._assert_netrc_has_expected_permissions()
         self._assert_netrc_has_expected_content('a new entry\n')
 
     def test_replacement_token_has_backslash(self):
-        existing_content = (
-            f'machine {self.hostname} login token password expired-auth-token\n'
-        )
+        existing_content = f'machine {self.hostname} login token password expired-auth-token\n'
         with open(self.test_netrc_path, 'w+') as f:
             f.write(existing_content)
         self.test_subject.auth_token = r'new-token_.\1\g<entry_start>\n\w'
         # make sure it uses re.sub() to replace the token
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            '',
-            self.test_netrc_path
+            self.hostname, '', self.test_netrc_path
         )
         self.assertTrue(os.path.exists(self.test_netrc_path))
         self._assert_netrc_has_expected_content(
@@ -219,17 +234,14 @@ class TestSwiftLogin(unittest.TestCase):
         )
 
     def test_update_netrc_with_existing_entry(self):
-        existing_content = \
-            f'machine {self.hostname} login token password expired-auth-token\n'
+        existing_content = f'machine {self.hostname} login token password expired-auth-token\n'
 
         expected_content = f'{self.new_entry}\n'
         with open(self.test_netrc_path, 'w+') as f:
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
@@ -249,9 +261,7 @@ class TestSwiftLogin(unittest.TestCase):
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
@@ -259,16 +269,13 @@ class TestSwiftLogin(unittest.TestCase):
         existing_content = 'machine host login user password 1234'
 
         expected_content = (
-            f'machine host login user password 1234\n'
-            f'{self.new_entry}\n'
+            f'machine host login user password 1234\n' f'{self.new_entry}\n'
         )
         with open(self.test_netrc_path, 'w+') as f:
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
@@ -276,22 +283,19 @@ class TestSwiftLogin(unittest.TestCase):
         existing_content = 'machine host login user password 1234\n'
 
         expected_content = (
-            f'machine host login user password 1234\n'
-            f'{self.new_entry}\n'
+            f'machine host login user password 1234\n' f'{self.new_entry}\n'
         )
         with open(self.test_netrc_path, 'w+') as f:
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
     def test_update_netrc_with_multiple_spaces_and_newlines(self):
         existing_content = (
-            f' machine   {self.hostname}\n' 
+            f' machine   {self.hostname}\n'
             f'   login token \n'
             f'password expired-auth-token  \n'
             f'\n'
@@ -312,9 +316,7 @@ class TestSwiftLogin(unittest.TestCase):
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
@@ -323,17 +325,12 @@ class TestSwiftLogin(unittest.TestCase):
             f'machine {self.hostname} login token password expired-auth-token-1\n'
             f'machine {self.hostname} login token password expired-auth-token-2\n'
         )
-        expected_content = (
-            f'{self.new_entry}\n'
-            f'{self.new_entry}\n'
-        )
+        expected_content = f'{self.new_entry}\n' f'{self.new_entry}\n'
         with open(self.test_netrc_path, 'w+') as f:
             f.write(existing_content)
 
         self.test_subject._update_netrc_entry(
-            self.hostname,
-            self.new_entry,
-            self.test_netrc_path
+            self.hostname, self.new_entry, self.test_netrc_path
         )
         self._assert_netrc_has_expected_content(expected_content)
 
@@ -341,11 +338,8 @@ class TestSwiftLogin(unittest.TestCase):
     def test_login_macos(self):
         self.test_subject.login()
         expected_calls = [
-            mock.call(
-                command,
-                capture_output=True,
-                check=True
-            ) for command in self.macos_commands
+            mock.call(command, capture_output=True, check=True)
+            for command in self.macos_commands
         ]
         self.subprocess_utils.run.assert_has_calls(
             expected_calls, any_order=True
@@ -355,21 +349,17 @@ class TestSwiftLogin(unittest.TestCase):
     def test_login_non_macos(self):
         self.test_subject.login()
         expected_calls = [
-            mock.call(
-                command,
-                capture_output=True,
-                check=True
-            ) for command in self.non_macos_commands
+            mock.call(command, capture_output=True, check=True)
+            for command in self.non_macos_commands
         ]
         self.subprocess_utils.run.assert_has_calls(
             expected_calls, any_order=True
         )
 
     def test_login_swift_tooling_error(self):
-        self.subprocess_utils.run.side_effect = \
-            subprocess.CalledProcessError(
-                returncode=1, cmd='swift command', stderr=b''
-            )
+        self.subprocess_utils.run.side_effect = subprocess.CalledProcessError(
+            returncode=1, cmd='swift command', stderr=b''
+        )
         with self.assertRaises(CommandFailedError):
             self.test_subject.login()
 
@@ -378,8 +368,8 @@ class TestSwiftLogin(unittest.TestCase):
             errno.ENOENT, 'not found error'
         )
         with self.assertRaisesRegex(
-                ValueError,
-                'swift was not found. Please verify installation.'):
+            ValueError, 'swift was not found. Please verify installation.'
+        ):
             self.test_subject.login()
 
     def test_get_scope(self):
@@ -398,7 +388,7 @@ class TestSwiftLogin(unittest.TestCase):
 
     def test_get_scope_invalid_length(self):
         with self.assertRaises(ValueError):
-            self.test_subject.get_scope("a"*40)
+            self.test_subject.get_scope("a" * 40)
 
     @mock.patch('awscli.customizations.codeartifact.login.is_macos', True)
     def test_get_commands_macos(self):
@@ -461,144 +451,180 @@ Registered Sources:
         self.package_format = 'nuget'
         self.repository = 'repository'
         self.auth_token = 'auth-token'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(hours=10)
-                           + relativedelta(minutes=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(hours=10)
+            + relativedelta(minutes=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
 
         self.nuget_index_url = self._NUGET_INDEX_URL_FMT.format(
             endpoint=self.endpoint,
         )
         self.source_name = self.domain + '/' + self.repository
         self.list_operation_command = [
-            'nuget', 'sources', 'list',
-            '-format', 'detailed',
+            'nuget',
+            'sources',
+            'list',
+            '-format',
+            'detailed',
         ]
         self.add_operation_command = [
-            'nuget', 'sources', 'add',
-            '-name', self.source_name,
-            '-source', self.nuget_index_url,
-            '-username', 'aws',
-            '-password', self.auth_token
+            'nuget',
+            'sources',
+            'add',
+            '-name',
+            self.source_name,
+            '-source',
+            self.nuget_index_url,
+            '-username',
+            'aws',
+            '-password',
+            self.auth_token,
         ]
         self.update_operation_command = [
-            'nuget', 'sources', 'update',
-            '-name', self.source_name,
-            '-source', self.nuget_index_url,
-            '-username', 'aws',
-            '-password', self.auth_token
+            'nuget',
+            'sources',
+            'update',
+            '-name',
+            self.source_name,
+            '-source',
+            self.nuget_index_url,
+            '-username',
+            'aws',
+            '-password',
+            self.auth_token,
         ]
 
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = NuGetLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     def test_login(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
-            self.add_operation_command,
-            capture_output=True,
-            check=True
+            self.add_operation_command, capture_output=True, check=True
         )
 
     def test_login_dry_run(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE
+        )
         self.test_subject.login(dry_run=True)
         self.subprocess_utils.check_output.assert_called_once_with(
             ['nuget', 'sources', 'list', '-format', 'detailed'],
-            stderr=self.subprocess_utils.PIPE
+            stderr=self.subprocess_utils.PIPE,
         )
 
     def test_login_old_nuget(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_SPACE
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
-            self.add_operation_command,
-            capture_output=True,
-            check=True
+            self.add_operation_command, capture_output=True, check=True
         )
 
     def test_login_dry_run_old_nuget(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_SPACE
+        )
         self.test_subject.login(dry_run=True)
         self.subprocess_utils.check_output.assert_called_once_with(
             ['nuget', 'sources', 'list', '-format', 'detailed'],
-            stderr=self.subprocess_utils.PIPE
+            stderr=self.subprocess_utils.PIPE,
         )
 
     def test_login_source_name_already_exists(self):
-        list_response = 'Registered Sources:\n' \
-                        '  1.  ' + self.source_name + ' [ENABLED]\n' \
-                        '      https://source.com/index.json'
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '  1.  ' + self.source_name + ' [ENABLED]\n'
+            '      https://source.com/index.json'
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
-            self.update_operation_command,
-            capture_output=True,
-            check=True
+            self.update_operation_command, capture_output=True, check=True
         )
 
     def test_login_source_url_already_exists_old_nuget(self):
         non_default_source_name = 'Source Name'
-        list_response = 'Registered Sources:\n' \
-                        '\n' \
-                        '  1. ' + non_default_source_name + ' [ENABLED]\n' \
-                                                            '      ' + self.nuget_index_url
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '\n'
+            '  1. ' + non_default_source_name + ' [ENABLED]\n'
+            '      ' + self.nuget_index_url
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
             [
-                'nuget', 'sources', 'update',
-                '-name', non_default_source_name,
-                '-source', self.nuget_index_url,
-                '-username', 'aws',
-                '-password', self.auth_token
+                'nuget',
+                'sources',
+                'update',
+                '-name',
+                non_default_source_name,
+                '-source',
+                self.nuget_index_url,
+                '-username',
+                'aws',
+                '-password',
+                self.auth_token,
             ],
             capture_output=True,
-            check=True
+            check=True,
         )
 
     def test_login_source_url_already_exists(self):
         non_default_source_name = 'Source Name'
-        list_response = 'Registered Sources:\n' \
-                        '  1. ' + non_default_source_name + ' [ENABLED]\n' \
-                        '      ' + self.nuget_index_url
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '  1. ' + non_default_source_name + ' [ENABLED]\n'
+            '      ' + self.nuget_index_url
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
             [
-                'nuget', 'sources', 'update',
-                '-name', non_default_source_name,
-                '-source', self.nuget_index_url,
-                '-username', 'aws',
-                '-password', self.auth_token
+                'nuget',
+                'sources',
+                'update',
+                '-name',
+                non_default_source_name,
+                '-source',
+                self.nuget_index_url,
+                '-username',
+                'aws',
+                '-password',
+                self.auth_token,
             ],
             capture_output=True,
-            check=True
+            check=True,
         )
 
     def test_login_nuget_not_installed(self):
@@ -606,23 +632,24 @@ Registered Sources:
             errno.ENOENT, 'not found error'
         )
         with self.assertRaisesRegex(
-                ValueError,
-                'nuget was not found. Please verify installation.'):
+            ValueError, 'nuget was not found. Please verify installation.'
+        ):
             self.test_subject.login()
 
     @skip_if_windows("Windows does not support signal.SIGALRM.")
     def test_login_nuget_sources_listed_with_backtracking(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_BACKTRACKING
+        )
         signal.signal(
             signal.SIGALRM,
-            lambda signum, frame: handle_timeout(signum, frame, self.id()))
+            lambda signum, frame: handle_timeout(signum, frame, self.id()),
+        )
         signal.alarm(10)
         self.test_subject.login()
         signal.alarm(0)
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
 
 
@@ -656,144 +683,178 @@ to an 'HTTPS' source."""
         self.package_format = 'nuget'
         self.repository = 'repository'
         self.auth_token = 'auth-token'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(hours=10)
-                           + relativedelta(minutes=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(hours=10)
+            + relativedelta(minutes=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
 
         self.nuget_index_url = self._NUGET_INDEX_URL_FMT.format(
             endpoint=self.endpoint,
         )
         self.source_name = self.domain + '/' + self.repository
         self.list_operation_command = [
-            'dotnet', 'nuget', 'list', 'source', '--format', 'detailed'
+            'dotnet',
+            'nuget',
+            'list',
+            'source',
+            '--format',
+            'detailed',
         ]
         self.add_operation_command_windows = [
-            'dotnet', 'nuget', 'add', 'source', self.nuget_index_url,
-            '--name', self.source_name,
-            '--username', 'aws',
-            '--password', self.auth_token
+            'dotnet',
+            'nuget',
+            'add',
+            'source',
+            self.nuget_index_url,
+            '--name',
+            self.source_name,
+            '--username',
+            'aws',
+            '--password',
+            self.auth_token,
         ]
         self.add_operation_command_non_windows = [
-            'dotnet', 'nuget', 'add', 'source', self.nuget_index_url,
-            '--name', self.source_name,
-            '--username', 'aws',
-            '--password', self.auth_token,
-            '--store-password-in-clear-text'
+            'dotnet',
+            'nuget',
+            'add',
+            'source',
+            self.nuget_index_url,
+            '--name',
+            self.source_name,
+            '--username',
+            'aws',
+            '--password',
+            self.auth_token,
+            '--store-password-in-clear-text',
         ]
         self.update_operation_command_windows = [
-            'dotnet', 'nuget', 'update', 'source', self.source_name,
-            '--source', self.nuget_index_url,
-            '--username', 'aws',
-            '--password', self.auth_token
+            'dotnet',
+            'nuget',
+            'update',
+            'source',
+            self.source_name,
+            '--source',
+            self.nuget_index_url,
+            '--username',
+            'aws',
+            '--password',
+            self.auth_token,
         ]
         self.update_operation_command_non_windows = [
-            'dotnet', 'nuget', 'update', 'source', self.source_name,
-            '--source', self.nuget_index_url,
-            '--username', 'aws',
-            '--password', self.auth_token,
-            '--store-password-in-clear-text'
+            'dotnet',
+            'nuget',
+            'update',
+            'source',
+            self.source_name,
+            '--source',
+            self.nuget_index_url,
+            '--username',
+            'aws',
+            '--password',
+            self.auth_token,
+            '--store-password-in-clear-text',
         ]
 
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = DotNetLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', False)
     def test_login(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
             self.add_operation_command_non_windows,
             capture_output=True,
-            check=True
+            check=True,
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_login_on_windows(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
-            self.add_operation_command_windows,
-            capture_output=True,
-            check=True
+            self.add_operation_command_windows, capture_output=True, check=True
         )
 
     def test_login_dry_run(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE
+        )
         self.test_subject.login(dry_run=True)
         self.subprocess_utils.check_output.assert_called_once_with(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', False)
     def test_login_sources_listed_with_extra_non_list_text(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
             self.add_operation_command_non_windows,
             capture_output=True,
-            check=True
+            check=True,
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_login_sources_listed_with_extra_non_list_text_on_windows(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        )
         self.test_subject.login()
         self.subprocess_utils.check_output.assert_any_call(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
         self.subprocess_utils.run.assert_called_with(
-            self.add_operation_command_windows,
-            capture_output=True,
-            check=True
+            self.add_operation_command_windows, capture_output=True, check=True
         )
 
     def test_login_sources_listed_with_extra_non_list_text_dry_run(self):
-        self.subprocess_utils.check_output.return_value = \
-                self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        self.subprocess_utils.check_output.return_value = (
+            self._NUGET_SOURCES_LIST_RESPONSE_WITH_EXTRA_NON_LIST_TEXT
+        )
         self.test_subject.login(dry_run=True)
         self.subprocess_utils.check_output.assert_called_once_with(
-            self.list_operation_command,
-            stderr=self.subprocess_utils.PIPE
+            self.list_operation_command, stderr=self.subprocess_utils.PIPE
         )
 
-
     @skip_if_windows("Windows does not support signal.SIGALRM.")
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', False)
     def test_login_dotnet_sources_listed_with_backtracking(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_BACKTRACKING
+        )
         signal.signal(
             signal.SIGALRM,
-            lambda signum, frame: handle_timeout(signum, frame, self.id()))
+            lambda signum, frame: handle_timeout(signum, frame, self.id()),
+        )
         signal.alarm(10)
         self.test_subject.login()
         signal.alarm(0)
@@ -801,61 +862,79 @@ to an 'HTTPS' source."""
     @skip_if_windows("Windows does not support signal.SIGALRM.")
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_login_dotnet_sources_listed_with_backtracking_windows(self):
-        self.subprocess_utils.check_output.return_value = \
+        self.subprocess_utils.check_output.return_value = (
             self._NUGET_SOURCES_LIST_RESPONSE_BACKTRACKING
+        )
         signal.signal(
             signal.SIGALRM,
-            lambda signum, frame: handle_timeout(signum, frame, self.id()))
+            lambda signum, frame: handle_timeout(signum, frame, self.id()),
+        )
         signal.alarm(10)
         self.test_subject.login()
         signal.alarm(0)
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', False)
     def test_login_source_name_already_exists(self):
-        list_response = 'Registered Sources:\n' \
-                        '  1.  ' + self.source_name + ' [ENABLED]\n' \
-                        '      https://source.com/index.json'
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '  1.  ' + self.source_name + ' [ENABLED]\n'
+            '      https://source.com/index.json'
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
             self.update_operation_command_non_windows,
             capture_output=True,
-            check=True
+            check=True,
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_login_source_name_already_exists_on_windows(self):
-        list_response = 'Registered Sources:\n' \
-                        '  1.  ' + self.source_name + ' [ENABLED]\n' \
-                        '      https://source.com/index.json'
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '  1.  ' + self.source_name + ' [ENABLED]\n'
+            '      https://source.com/index.json'
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
             self.update_operation_command_windows,
             capture_output=True,
-            check=True
+            check=True,
         )
 
     @mock.patch('awscli.customizations.codeartifact.login.is_windows', True)
     def test_login_source_url_already_exists(self):
         non_default_source_name = 'Source Name'
-        list_response = 'Registered Sources:\n' \
-                        '  1. ' + non_default_source_name + ' [ENABLED]\n' \
-                        '      ' + self.nuget_index_url
-        self.subprocess_utils.check_output.return_value = \
-            list_response.encode('utf-8')
+        list_response = (
+            'Registered Sources:\n'
+            '  1. ' + non_default_source_name + ' [ENABLED]\n'
+            '      ' + self.nuget_index_url
+        )
+        self.subprocess_utils.check_output.return_value = list_response.encode(
+            'utf-8'
+        )
         self.test_subject.login()
         self.subprocess_utils.run.assert_called_with(
             [
-                'dotnet', 'nuget', 'update', 'source', non_default_source_name,
-                '--source', self.nuget_index_url,
-                '--username', 'aws',
-                '--password', self.auth_token
+                'dotnet',
+                'nuget',
+                'update',
+                'source',
+                non_default_source_name,
+                '--source',
+                self.nuget_index_url,
+                '--username',
+                'aws',
+                '--password',
+                self.auth_token,
             ],
             capture_output=True,
-            check=True
+            check=True,
         )
 
     def test_login_dotnet_not_installed(self):
@@ -863,13 +942,12 @@ to an 'HTTPS' source."""
             errno.ENOENT, 'not found error'
         )
         with self.assertRaisesRegex(
-                ValueError,
-                'dotnet was not found. Please verify installation.'):
+            ValueError, 'dotnet was not found. Please verify installation.'
+        ):
             self.test_subject.login()
 
 
 class TestNpmLogin(unittest.TestCase):
-
     NPM_CMD = NpmLogin.NPM_CMD
 
     def setUp(self):
@@ -879,27 +957,23 @@ class TestNpmLogin(unittest.TestCase):
         self.repository = 'repository'
         self.auth_token = 'auth-token'
         self.namespace = 'namespace'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(hours=10)
-                           + relativedelta(minutes=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(hours=10)
+            + relativedelta(minutes=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
 
         repo_uri = urlsplit(self.endpoint)
-        always_auth_config = '//{}{}:always-auth'.format(
-            repo_uri.netloc, repo_uri.path
-        )
-        auth_token_config = '//{}{}:_authToken'.format(
-            repo_uri.netloc, repo_uri.path
-        )
+        always_auth_config = f'//{repo_uri.netloc}{repo_uri.path}:always-auth'
+        auth_token_config = f'//{repo_uri.netloc}{repo_uri.path}:_authToken'
         self.commands = []
-        self.commands.append([
-            self.NPM_CMD, 'config', 'set', 'registry', self.endpoint
-        ])
+        self.commands.append(
+            [self.NPM_CMD, 'config', 'set', 'registry', self.endpoint]
+        )
         self.commands.append(
             [self.NPM_CMD, 'config', 'set', always_auth_config, 'true']
         )
@@ -910,18 +984,19 @@ class TestNpmLogin(unittest.TestCase):
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = NpmLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     def test_login(self):
         self.test_subject.login()
         expected_calls = [
-            mock.call(
-                command,
-                capture_output=True,
-                check=True
-            ) for command in self.commands
+            mock.call(command, capture_output=True, check=True)
+            for command in self.commands
         ]
         self.subprocess_utils.run.assert_has_calls(
             expected_calls, any_order=True
@@ -935,13 +1010,11 @@ class TestNpmLogin(unittest.TestCase):
         exit code. This is to make sure that login ignores that error and all
         other commands executes successfully.
         """
+
         def side_effect(command, capture_output, check):
             """Set side_effect for always-auth config setting command"""
             if any('always-auth' in arg for arg in command):
-                raise subprocess.CalledProcessError(
-                    returncode=1,
-                    cmd=command
-                )
+                raise subprocess.CalledProcessError(returncode=1, cmd=command)
 
             return mock.DEFAULT
 
@@ -949,11 +1022,9 @@ class TestNpmLogin(unittest.TestCase):
         expected_calls = []
 
         for command in self.commands:
-            expected_calls.append(mock.call(
-                command,
-                capture_output=True,
-                check=True
-            ))
+            expected_calls.append(
+                mock.call(command, capture_output=True, check=True)
+            )
         self.test_subject.login()
 
         self.subprocess_utils.run.assert_has_calls(
@@ -961,7 +1032,7 @@ class TestNpmLogin(unittest.TestCase):
         )
 
     def test_get_scope(self):
-        expected_value = '@{}'.format(self.namespace)
+        expected_value = f'@{self.namespace}'
         scope = self.test_subject.get_scope(self.namespace)
         self.assertEqual(scope, expected_value)
 
@@ -972,11 +1043,11 @@ class TestNpmLogin(unittest.TestCase):
 
     def test_get_scope_invalid_name(self):
         with self.assertRaises(ValueError):
-            self.test_subject.get_scope('.{}'.format(self.namespace))
+            self.test_subject.get_scope(f'.{self.namespace}')
 
     def test_get_scope_without_prefix(self):
-        expected_value = '@{}'.format(self.namespace)
-        scope = self.test_subject.get_scope('@{}'.format(self.namespace))
+        expected_value = f'@{self.namespace}'
+        scope = self.test_subject.get_scope(f'@{self.namespace}')
         self.assertEqual(scope, expected_value)
 
     def test_get_commands(self):
@@ -989,7 +1060,7 @@ class TestNpmLogin(unittest.TestCase):
         commands = self.test_subject.get_commands(
             self.endpoint, self.auth_token, scope=self.namespace
         )
-        self.commands[0][3] = '{}:registry'.format(self.namespace)
+        self.commands[0][3] = f'{self.namespace}:registry'
         self.assertCountEqual(commands, self.commands)
 
     def test_login_dry_run(self):
@@ -998,7 +1069,6 @@ class TestNpmLogin(unittest.TestCase):
 
 
 class TestPipLogin(unittest.TestCase):
-
     PIP_INDEX_URL_FMT = PipLogin.PIP_INDEX_URL_FMT
 
     def setUp(self):
@@ -1007,29 +1077,33 @@ class TestPipLogin(unittest.TestCase):
         self.package_format = 'pip'
         self.repository = 'repository'
         self.auth_token = 'auth-token'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(years=1)
-                           + relativedelta(months=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(years=1)
+            + relativedelta(months=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
 
         repo_uri = urlsplit(self.endpoint)
         self.pip_index_url = self.PIP_INDEX_URL_FMT.format(
             scheme=repo_uri.scheme,
             auth_token=self.auth_token,
             netloc=repo_uri.netloc,
-            path=repo_uri.path
+            path=repo_uri.path,
         )
 
         self.subprocess_utils = mock.Mock()
 
         self.test_subject = PipLogin(
-            self.auth_token, self.expiration, self.endpoint,
-            self.domain, self.repository, self.subprocess_utils
+            self.auth_token,
+            self.expiration,
+            self.endpoint,
+            self.domain,
+            self.repository,
+            self.subprocess_utils,
         )
 
     def test_get_commands(self):
@@ -1046,7 +1120,7 @@ class TestPipLogin(unittest.TestCase):
         self.subprocess_utils.run.assert_called_once_with(
             ['pip', 'config', 'set', 'global.index-url', self.pip_index_url],
             capture_output=True,
-            check=True
+            check=True,
         )
 
     def test_login_dry_run(self):
@@ -1055,7 +1129,6 @@ class TestPipLogin(unittest.TestCase):
 
 
 class TestTwineLogin(unittest.TestCase):
-
     DEFAULT_PYPI_RC_FMT = TwineLogin.DEFAULT_PYPI_RC_FMT
 
     def setUp(self):
@@ -1065,18 +1138,17 @@ class TestTwineLogin(unittest.TestCase):
         self.package_format = 'pip'
         self.repository = 'repository'
         self.auth_token = 'auth-token'
-        self.expiration = (datetime.now(tzlocal()) + relativedelta(years=1)
-                           + relativedelta(months=9)).replace(microsecond=0)
-        self.endpoint = 'https://{domain}-{domainOwner}.codeartifact.aws.' \
-            'a2z.com/{format}/{repository}/'.format(
-                domain=self.domain,
-                domainOwner=self.domain_owner,
-                format=self.package_format,
-                repository=self.repository
-            )
+        self.expiration = (
+            datetime.now(tzlocal())
+            + relativedelta(years=1)
+            + relativedelta(months=9)
+        ).replace(microsecond=0)
+        self.endpoint = (
+            f'https://{self.domain}-{self.domain_owner}.codeartifact.aws.'
+            f'a2z.com/{self.package_format}/{self.repository}/'
+        )
         self.default_pypi_rc = self.DEFAULT_PYPI_RC_FMT.format(
-            repository_endpoint=self.endpoint,
-            auth_token=self.auth_token
+            repository_endpoint=self.endpoint, auth_token=self.auth_token
         )
         self.subprocess_utils = mock.Mock()
         self.test_pypi_rc_path = self.file_creator.full_path('pypirc')
@@ -1090,7 +1162,7 @@ class TestTwineLogin(unittest.TestCase):
             self.domain,
             self.repository,
             self.subprocess_utils,
-            self.test_pypi_rc_path
+            self.test_pypi_rc_path,
         )
 
     def tearDown(self):
@@ -1107,8 +1179,7 @@ class TestTwineLogin(unittest.TestCase):
         index_servers = pypi_rc.get('distutils', 'index-servers')
         index_servers = [
             index_server.strip()
-            for index_server
-            in index_servers.split('\n')
+            for index_server in index_servers.split('\n')
             if index_server.strip() != ''
         ]
         self.assertIn(server, index_servers)
@@ -1131,7 +1202,7 @@ class TestTwineLogin(unittest.TestCase):
     def test_get_pypi_rc_path(self):
         self.assertEqual(
             TwineLogin.get_pypi_rc_path(),
-            os.path.join(os.path.expanduser("~"), ".pypirc")
+            os.path.join(os.path.expanduser("~"), ".pypirc"),
         )
 
     def test_login_pypi_rc_not_found_defaults_set(self):
@@ -1145,7 +1216,7 @@ class TestTwineLogin(unittest.TestCase):
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
     def test_login_dry_run(self):
@@ -1184,7 +1255,7 @@ password: testpassword
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
         self._assert_pypi_rc_has_expected_content(
@@ -1192,7 +1263,7 @@ password: testpassword
             server='pypi',
             repo_url='http://www.python.org/pypi/',
             username='monty',
-            password='JgCXIr5xGG'
+            password='JgCXIr5xGG',
         )
 
         self._assert_pypi_rc_has_expected_content(
@@ -1200,7 +1271,7 @@ password: testpassword
             server='test',
             repo_url='http://example.com/test/',
             username='testusername',
-            password='testpassword'
+            password='testpassword',
         )
 
     def test_login_existing_pypi_rc_with_codeartifact_not_clobbered(self):
@@ -1234,7 +1305,7 @@ password: expired_token
             server='codeartifact',
             repo_url=self.endpoint,
             username='aws',
-            password=self.auth_token
+            password=self.auth_token,
         )
 
         self._assert_pypi_rc_has_expected_content(
@@ -1242,7 +1313,7 @@ password: expired_token
             server='pypi',
             repo_url='http://www.python.org/pypi/',
             username='monty',
-            password='JgCXIr5xGG'
+            password='JgCXIr5xGG',
         )
 
     def test_login_existing_invalid_pypi_rc_error(self):
@@ -1274,21 +1345,22 @@ password: JgCXIr5xGG
 
 
 class TestRelativeExpirationTime(unittest.TestCase):
-
     def test_with_years_months_days(self):
         remaining = relativedelta(years=1, months=9)
         message = get_relative_expiration_time(remaining)
         self.assertEqual(message, '1 year and 9 months')
 
     def test_with_years_months(self):
-        remaining = relativedelta(years=1, months=8, days=30, hours=23,
-                                  minutes=59, seconds=30)
+        remaining = relativedelta(
+            years=1, months=8, days=30, hours=23, minutes=59, seconds=30
+        )
         message = get_relative_expiration_time(remaining)
         self.assertEqual(message, '1 year and 8 months')
 
     def test_with_years_month(self):
-        remaining = relativedelta(years=3, days=30, hours=23,
-                                  minutes=59, seconds=30)
+        remaining = relativedelta(
+            years=3, days=30, hours=23, minutes=59, seconds=30
+        )
         message = get_relative_expiration_time(remaining)
         self.assertEqual(message, '3 years')
 
@@ -1323,10 +1395,12 @@ class TestRelativeExpirationTime(unittes
         self.assertEqual(message, '1 day')
 
     def test_with_hour(self):
-        self.expiration = (datetime.now(tzlocal())
-                           + relativedelta(hours=1)).replace(microsecond=0)
+        self.expiration = (
+            datetime.now(tzlocal()) + relativedelta(hours=1)
+        ).replace(microsecond=0)
         remaining = relativedelta(
-            self.expiration, datetime.now(tzutc())) + relativedelta(seconds=30)
+            self.expiration, datetime.now(tzutc())
+        ) + relativedelta(seconds=30)
         message = get_relative_expiration_time(remaining)
         self.assertEqual(message, '1 hour')
 
@@ -1337,6 +1411,7 @@ class TestRelativeExpirationTime(unittes
 
     def test_with_full_time(self):
         remaining = relativedelta(
-            years=2, months=3, days=7, hours=11, minutes=44)
+            years=2, months=3, days=7, hours=11, minutes=44
+        )
         message = get_relative_expiration_time(remaining)
         self.assertEqual(message, '2 years and 3 months')
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_deregister.py 2.31.35-1/tests/unit/customizations/codedeploy/test_deregister.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_deregister.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_deregister.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,12 @@
 # language governing permissions and limitations under the License.
 
 from argparse import Namespace
+
 from awscli.customizations.codedeploy.deregister import Deregister
-from awscli.customizations.exceptions import ConfigurationError
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 from awscli.testutils import mock, unittest
 
 
@@ -22,8 +25,8 @@ class TestDeregister(unittest.TestCase):
     def setUp(self):
         self.instance_name = 'instance-name'
         self.tags = [{'Key': 'k1', 'Value': 'v1'}]
-        self.iam_user_arn = 'arn:aws:iam::012345678912:user/{0}'.format(
-            self.instance_name
+        self.iam_user_arn = (
+            f'arn:aws:iam::012345678912:user/{self.instance_name}'
         )
         self.access_key_id = 'ACCESSKEYID'
         self.region = 'us-east-1'
@@ -41,10 +44,7 @@ class TestDeregister(unittest.TestCase):
 
         self.codedeploy = mock.MagicMock()
         self.codedeploy.get_on_premises_instance.return_value = {
-            'instanceInfo': {
-                'iamUserArn': self.iam_user_arn,
-                'tags': None
-            }
+            'instanceInfo': {'iamUserArn': self.iam_user_arn, 'tags': None}
         }
 
         self.iam = mock.MagicMock()
@@ -57,7 +57,8 @@ class TestDeregister(unittest.TestCase):
             {'AccessKeyMetadata': [{'AccessKeyId': self.access_key_id}]}
         ]
         self.iam.get_paginator.side_effect = [
-            self.list_user_policies, self.list_access_keys
+            self.list_user_policies,
+            self.list_access_keys,
         ]
 
         self.session = mock.MagicMock()
@@ -73,27 +74,30 @@ class TestDeregister(unittest.TestCase):
 
     def test_deregister_throws_on_invalid_instance_name(self):
         self.args.instance_name = 'invalid%@^&%#&'
-        with self.assertRaisesRegex(ParamValidationError,
-                'Instance name contains invalid characters.'):
+        with self.assertRaisesRegex(
+            ParamValidationError, 'Instance name contains invalid characters.'
+        ):
             self.deregister._run_main(self.args, self.globals)
 
     def test_deregister_creates_clients(self):
         self.deregister._run_main(self.args, self.globals)
-        self.session.create_client.assert_has_calls([
-            mock.call(
-                'codedeploy',
-                region_name=self.region,
-                endpoint_url=self.endpoint_url,
-                verify=self.globals.verify_ssl
-            ),
-            mock.call('iam', region_name=self.region)
-        ])
+        self.session.create_client.assert_has_calls(
+            [
+                mock.call(
+                    'codedeploy',
+                    region_name=self.region,
+                    endpoint_url=self.endpoint_url,
+                    verify=self.globals.verify_ssl,
+                ),
+                mock.call('iam', region_name=self.region),
+            ]
+        )
 
     def test_deregister_with_tags(self):
         self.codedeploy.get_on_premises_instance.return_value = {
             'instanceInfo': {
                 'iamUserArn': self.iam_user_arn,
-                'tags': self.tags
+                'tags': self.tags,
             }
         }
         self.deregister._run_main(self.args, self.globals)
@@ -106,22 +110,16 @@ class TestDeregister(unittest.TestCase):
         self.assertEqual(self.instance_name, self.args.user_name)
         self.assertIn('tags', self.args)
         self.assertEqual(self.tags, self.args.tags)
-        self.codedeploy.remove_tags_from_on_premises_instances.\
-            assert_called_with(
-                tags=self.tags,
-                instanceNames=[self.instance_name]
-            )
-        self.codedeploy.deregister_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name
-            )
+        self.codedeploy.remove_tags_from_on_premises_instances.assert_called_with(
+            tags=self.tags, instanceNames=[self.instance_name]
+        )
+        self.codedeploy.deregister_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name
+        )
 
     def test_deregister_with_no_tags(self):
         self.codedeploy.get_on_premises_instance.return_value = {
-            'instanceInfo': {
-                'iamUserArn': self.iam_user_arn,
-                'tags': None
-            }
+            'instanceInfo': {'iamUserArn': self.iam_user_arn, 'tags': None}
         }
         self.deregister._run_main(self.args, self.globals)
         self.codedeploy.get_on_premises_instance.assert_called_with(
@@ -136,10 +134,9 @@ class TestDeregister(unittest.TestCase):
         self.assertFalse(
             self.codedeploy.remove_tags_from_on_premises_instances.called
         )
-        self.codedeploy.deregister_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name
-            )
+        self.codedeploy.deregister_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name
+        )
 
     def test_deregister_with_delete_iam_user(self):
         self.args.no_delete_iam_user = False
@@ -147,31 +144,25 @@ class TestDeregister(unittest.TestCase):
         self.codedeploy.get_on_premises_instance.assert_called_with(
             instanceName=self.instance_name
         )
-        self.codedeploy.deregister_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name
-            )
-        self.iam.get_paginator.assert_has_calls([
-            mock.call('list_user_policies'),
-            mock.call('list_access_keys')
-        ])
+        self.codedeploy.deregister_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name
+        )
+        self.iam.get_paginator.assert_has_calls(
+            [mock.call('list_user_policies'), mock.call('list_access_keys')]
+        )
         self.list_user_policies.paginate.assert_called_with(
             UserName=self.instance_name
         )
         self.iam.delete_user_policy.assert_called_with(
-            UserName=self.instance_name,
-            PolicyName=self.policy_name
+            UserName=self.instance_name, PolicyName=self.policy_name
         )
         self.list_access_keys.paginate.assert_called_with(
             UserName=self.instance_name
         )
         self.iam.delete_access_key.assert_called_with(
-            UserName=self.instance_name,
-            AccessKeyId=self.access_key_id
-        )
-        self.iam.delete_user.assert_called_with(
-            UserName=self.instance_name
+            UserName=self.instance_name, AccessKeyId=self.access_key_id
         )
+        self.iam.delete_user.assert_called_with(UserName=self.instance_name)
 
     def test_deregister_with_no_delete_iam_user(self):
         self.args.no_delete_iam_user = True
@@ -179,10 +170,9 @@ class TestDeregister(unittest.TestCase):
         self.codedeploy.get_on_premises_instance.assert_called_with(
             instanceName=self.instance_name
         )
-        self.codedeploy.deregister_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name
-            )
+        self.codedeploy.deregister_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name
+        )
         self.assertFalse(self.iam.get_paginator.called)
         self.assertFalse(self.list_user_policies.paginate.called)
         self.assertFalse(self.iam.delete_user_policy.called)
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_install.py 2.31.35-1/tests/unit/customizations/codedeploy/test_install.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_install.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_install.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,21 @@
 # language governing permissions and limitations under the License.
 
 import sys
-
 from argparse import Namespace
+from socket import timeout
+
 from awscli.customizations.codedeploy.install import Install
-from awscli.customizations.codedeploy.systems import Ubuntu, Windows, RHEL, System
-from awscli.customizations.exceptions import ConfigurationError
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.codedeploy.systems import (
+    RHEL,
+    System,
+    Ubuntu,
+    Windows,
+)
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 from awscli.testutils import mock, unittest
-from socket import timeout
 
 
 class TestInstall(unittest.TestCase):
@@ -27,15 +34,17 @@ class TestInstall(unittest.TestCase):
         self.region = 'us-east-1'
         self.config_file = 'config-file'
         self.installer = 'install'
-        self.bucket = 'aws-codedeploy-{0}'.format(self.region)
-        self.key = 'latest/{0}'.format(self.installer)
-        self.agent_installer = 's3://{0}/{1}'.format(self.bucket, self.key)
+        self.bucket = f'aws-codedeploy-{self.region}'
+        self.key = f'latest/{self.installer}'
+        self.agent_installer = f's3://{self.bucket}/{self.key}'
 
         self.system_patcher = mock.patch('platform.system')
         self.system = self.system_patcher.start()
         self.system.return_value = 'Linux'
 
-        self.linux_distribution_patcher = mock.patch('awscli.compat.linux_distribution')
+        self.linux_distribution_patcher = mock.patch(
+            'awscli.compat.linux_distribution'
+        )
         self.linux_distribution = self.linux_distribution_patcher.start()
         self.linux_distribution.return_value = ('Ubuntu', '', '')
 
@@ -61,7 +70,8 @@ class TestInstall(unittest.TestCase):
 
         self.open_patcher = mock.patch(
             'awscli.customizations.codedeploy.systems.open',
-            mock.mock_open(), create=True
+            mock.mock_open(),
+            create=True,
         )
         self.open = self.open_patcher.start()
 
@@ -103,13 +113,15 @@ class TestInstall(unittest.TestCase):
     def test_install_throws_on_unsupported_system(self):
         self.system.return_value = 'Unsupported'
         with self.assertRaisesRegex(
-                RuntimeError, System.UNSUPPORTED_SYSTEM_MSG):
+            RuntimeError, System.UNSUPPORTED_SYSTEM_MSG
+        ):
             self.install._run_main(self.args, self.globals)
 
     def test_install_throws_on_ec2_instance(self):
         self.urlopen.side_effect = None
         with self.assertRaisesRegex(
-                RuntimeError, 'Amazon EC2 instances are not supported.'):
+            RuntimeError, 'Amazon EC2 instances are not supported.'
+        ):
             self.install._run_main(self.args, self.globals)
         self.assertIn('system', self.args)
         self.assertTrue(isinstance(self.args.system, Ubuntu))
@@ -117,25 +129,28 @@ class TestInstall(unittest.TestCase):
     def test_install_throws_on_non_administrator(self):
         self.geteuid.return_value = 1
         with self.assertRaisesRegex(
-                RuntimeError, 'You must run this command as sudo.'):
+            RuntimeError, 'You must run this command as sudo.'
+        ):
             self.install._run_main(self.args, self.globals)
 
     def test_install_throws_on_no_override_config(self):
         self.isfile.return_value = True
         self.args.override_config = False
         with self.assertRaisesRegex(
-                RuntimeError,
-                'The on-premises instance configuration file already exists. '
-                'Specify --override-config to update the existing on-premises '
-                'instance configuration file.'):
+            RuntimeError,
+            'The on-premises instance configuration file already exists. '
+            'Specify --override-config to update the existing on-premises '
+            'instance configuration file.',
+        ):
             self.install._run_main(self.args, self.globals)
 
     def test_install_throws_on_invalid_agent_installer(self):
         self.args.agent_installer = 'invalid-s3-location'
         with self.assertRaisesRegex(
-                ParamValidationError,
-                '--agent-installer must specify the Amazon S3 URL format as '
-                's3://<bucket>/<key>.'):
+            ParamValidationError,
+            '--agent-installer must specify the Amazon S3 URL format as '
+            's3://<bucket>/<key>.',
+        ):
             self.install._run_main(self.args, self.globals)
 
     @mock.patch.object(Ubuntu, 'install')
@@ -164,7 +179,7 @@ class TestInstall(unittest.TestCase):
         self.makedirs.assert_called_with('/etc/codedeploy-agent/conf')
         self.copyfile.assset_called_with(
             'codedeploy.onpremises.yml',
-            '/etc/codedeploy-agent/conf/codedeploy.onpremises.yml'
+            '/etc/codedeploy-agent/conf/codedeploy.onpremises.yml',
         )
         install.assert_called_with(self.args)
 
@@ -182,7 +197,7 @@ class TestInstall(unittest.TestCase):
         self.makedirs.assert_called_with(r'C:\ProgramData\Amazon\CodeDeploy')
         self.copyfile.assset_called_with(
             'conf.onpremises.yml',
-            r'C:\ProgramData\Amazon\CodeDeploy\conf.onpremises.yml'
+            r'C:\ProgramData\Amazon\CodeDeploy\conf.onpremises.yml',
         )
         validate_administrator.assert_called_with()
         install.assert_called_with(self.args)
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_locationargs.py 2.31.35-1/tests/unit/customizations/codedeploy/test_locationargs.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_locationargs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_locationargs.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
-from awscli.testutils import BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, unittest
 
 
-class TestGetApplicationRevisionLocationArguments(
-        BaseAWSCommandParamsTest):
-
+class TestGetApplicationRevisionLocationArguments(BaseAWSCommandParamsTest):
     prefix = 'deploy get-application-revision --application-name foo '
 
     def test_s3_location(self):
@@ -26,19 +23,15 @@ class TestGetApplicationRevisionLocation
             'applicationName': 'foo',
             'revision': {
                 'revisionType': 'S3',
-                's3Location': {
-                    'bucket': 'b',
-                    'key': 'k',
-                    'bundleType': 'zip'
-                }
-            }
+                's3Location': {'bucket': 'b', 'key': 'k', 'bundleType': 'zip'},
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,eTag=1234'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -47,16 +40,16 @@ class TestGetApplicationRevisionLocation
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'eTag': '1234'
-                }
-            }
+                    'eTag': '1234',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_version(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,version=abcd')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -65,16 +58,17 @@ class TestGetApplicationRevisionLocation
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag_and_version(self):
         cmd = self.prefix + (
             '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            'bundleType=zip,eTag=1234,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -84,16 +78,17 @@ class TestGetApplicationRevisionLocation
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_json(self):
         cmd = self.prefix + (
             '--s3-location {"bucket":"b","key":"k",'
-            '"bundleType":"zip","eTag":"1234","version":"abcd"}')
+            '"bundleType":"zip","eTag":"1234","version":"abcd"}'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -103,28 +98,28 @@ class TestGetApplicationRevisionLocation
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_missing_bucket(self):
         cmd = self.prefix + (
-            '--s3-location key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location key=k,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_s3_location_missing_key(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location bucket=b,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_github_location_with_etag(self):
         cmd = self.prefix + (
-            '--github-location repository=foo/bar,'
-            'commitId=1234')
+            '--github-location repository=foo/bar,' 'commitId=1234'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -132,15 +127,15 @@ class TestGetApplicationRevisionLocation
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_json(self):
         cmd = self.prefix + (
-            '--github-location {"repository":"foo/bar",'
-            '"commitId":"1234"}')
+            '--github-location {"repository":"foo/bar",' '"commitId":"1234"}'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -148,15 +143,13 @@ class TestGetApplicationRevisionLocation
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_missing_repository(self):
-        cmd = self.prefix + (
-            '--github-location '
-            'commitId=1234')
+        cmd = self.prefix + ('--github-location ' 'commitId=1234')
         self.run_cmd(cmd, 252)
 
     def test_github_location_missing_commit_id(self):
@@ -165,8 +158,8 @@ class TestGetApplicationRevisionLocation
 
 
 class TestRegisterApplicationRevisionLocationArguments(
-        BaseAWSCommandParamsTest):
-
+    BaseAWSCommandParamsTest
+):
     prefix = 'deploy register-application-revision --application-name foo '
 
     def test_s3_location(self):
@@ -175,19 +168,15 @@ class TestRegisterApplicationRevisionLoc
             'applicationName': 'foo',
             'revision': {
                 'revisionType': 'S3',
-                's3Location': {
-                    'bucket': 'b',
-                    'key': 'k',
-                    'bundleType': 'zip'
-                }
-            }
+                's3Location': {'bucket': 'b', 'key': 'k', 'bundleType': 'zip'},
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,eTag=1234'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -196,16 +185,16 @@ class TestRegisterApplicationRevisionLoc
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'eTag': '1234'
-                }
-            }
+                    'eTag': '1234',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_version(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,version=abcd')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -214,16 +203,17 @@ class TestRegisterApplicationRevisionLoc
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag_and_version(self):
         cmd = self.prefix + (
             '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            'bundleType=zip,eTag=1234,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -233,16 +223,17 @@ class TestRegisterApplicationRevisionLoc
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_json(self):
         cmd = self.prefix + (
             '--s3-location {"bucket":"b","key":"k",'
-            '"bundleType":"zip","eTag":"1234","version":"abcd"}')
+            '"bundleType":"zip","eTag":"1234","version":"abcd"}'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -252,28 +243,28 @@ class TestRegisterApplicationRevisionLoc
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_missing_bucket(self):
         cmd = self.prefix + (
-            '--s3-location key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location key=k,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_s3_location_missing_key(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location bucket=b,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_github_location_with_etag(self):
         cmd = self.prefix + (
-            '--github-location repository=foo/bar,'
-            'commitId=1234')
+            '--github-location repository=foo/bar,' 'commitId=1234'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -281,15 +272,15 @@ class TestRegisterApplicationRevisionLoc
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_json(self):
         cmd = self.prefix + (
-            '--github-location {"repository":"foo/bar",'
-            '"commitId":"1234"}')
+            '--github-location {"repository":"foo/bar",' '"commitId":"1234"}'
+        )
         result = {
             'applicationName': 'foo',
             'revision': {
@@ -297,15 +288,13 @@ class TestRegisterApplicationRevisionLoc
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_missing_repository(self):
-        cmd = self.prefix + (
-            '--github-location '
-            'commitId=1234')
+        cmd = self.prefix + ('--github-location ' 'commitId=1234')
         self.run_cmd(cmd, 252)
 
     def test_github_location_missing_commit_id(self):
@@ -313,12 +302,11 @@ class TestRegisterApplicationRevisionLoc
         self.run_cmd(cmd, 252)
 
 
-class TestCreateDeploymentLocationArguments(
-        BaseAWSCommandParamsTest):
-
+class TestCreateDeploymentLocationArguments(BaseAWSCommandParamsTest):
     prefix = (
         'deploy create-deployment --application-name foo '
-        '--deployment-group bar ')
+        '--deployment-group bar '
+    )
 
     def test_s3_location(self):
         cmd = self.prefix + '--s3-location bucket=b,key=k,bundleType=zip'
@@ -327,19 +315,15 @@ class TestCreateDeploymentLocationArgume
             'deploymentGroupName': 'bar',
             'revision': {
                 'revisionType': 'S3',
-                's3Location': {
-                    'bucket': 'b',
-                    'key': 'k',
-                    'bundleType': 'zip'
-                }
-            }
+                's3Location': {'bucket': 'b', 'key': 'k', 'bundleType': 'zip'},
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,eTag=1234'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -349,16 +333,16 @@ class TestCreateDeploymentLocationArgume
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'eTag': '1234'
-                }
-            }
+                    'eTag': '1234',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_version(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,key=k,'
-            'bundleType=zip,version=abcd')
+            '--s3-location bucket=b,key=k,' 'bundleType=zip,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -368,16 +352,17 @@ class TestCreateDeploymentLocationArgume
                     'bucket': 'b',
                     'key': 'k',
                     'bundleType': 'zip',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_with_etag_and_version(self):
         cmd = self.prefix + (
             '--s3-location bucket=b,key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            'bundleType=zip,eTag=1234,version=abcd'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -388,16 +373,17 @@ class TestCreateDeploymentLocationArgume
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_json(self):
         cmd = self.prefix + (
             '--s3-location {"bucket":"b","key":"k",'
-            '"bundleType":"zip","eTag":"1234","version":"abcd"}')
+            '"bundleType":"zip","eTag":"1234","version":"abcd"}'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -408,28 +394,28 @@ class TestCreateDeploymentLocationArgume
                     'key': 'k',
                     'bundleType': 'zip',
                     'eTag': '1234',
-                    'version': 'abcd'
-                }
-            }
+                    'version': 'abcd',
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_s3_location_missing_bucket(self):
         cmd = self.prefix + (
-            '--s3-location key=k,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location key=k,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_s3_location_missing_key(self):
         cmd = self.prefix + (
-            '--s3-location bucket=b,'
-            'bundleType=zip,eTag=1234,version=abcd')
+            '--s3-location bucket=b,' 'bundleType=zip,eTag=1234,version=abcd'
+        )
         self.run_cmd(cmd, 252)
 
     def test_github_location_with_etag(self):
         cmd = self.prefix + (
-            '--github-location repository=foo/bar,'
-            'commitId=1234')
+            '--github-location repository=foo/bar,' 'commitId=1234'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -438,15 +424,15 @@ class TestCreateDeploymentLocationArgume
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_json(self):
         cmd = self.prefix + (
-            '--github-location {"repository":"foo/bar",'
-            '"commitId":"1234"}')
+            '--github-location {"repository":"foo/bar",' '"commitId":"1234"}'
+        )
         result = {
             'applicationName': 'foo',
             'deploymentGroupName': 'bar',
@@ -455,15 +441,13 @@ class TestCreateDeploymentLocationArgume
                 'gitHubLocation': {
                     'repository': 'foo/bar',
                     'commitId': '1234',
-                }
-            }
+                },
+            },
         }
         self.assert_params_for_cmd(cmd, result)
 
     def test_github_location_missing_repository(self):
-        cmd = self.prefix + (
-            '--github-location '
-            'commitId=1234')
+        cmd = self.prefix + ('--github-location ' 'commitId=1234')
         self.run_cmd(cmd, 252)
 
     def test_github_location_missing_commit_id(self):
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_push.py 2.31.35-1/tests/unit/customizations/codedeploy/test_push.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_push.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_push.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import awscli
-
 from argparse import Namespace
+
 from botocore.exceptions import ClientError
 
+import awscli
+from awscli.compat import ZIP_COMPRESSION_MODE, StringIO
 from awscli.customizations.codedeploy.push import Push
 from awscli.customizations.exceptions import ParamValidationError
 from awscli.testutils import mock, unittest
-from awscli.compat import StringIO, ZIP_COMPRESSION_MODE
 
 
 class TestPush(unittest.TestCase):
@@ -28,7 +28,7 @@ class TestPush(unittest.TestCase):
         self.description = 'MyApp revision'
         self.source = '/tmp'
         self.appspec = 'appspec.yml'
-        self.appspec_path = '{0}/{1}'.format(self.source, self.appspec)
+        self.appspec_path = f'{self.source}/{self.appspec}'
         self.bucket = 'foo'
         self.key = 'bar/baz.zip'
         self.s3_location = 's3://' + self.bucket + '/' + self.key
@@ -53,7 +53,7 @@ class TestPush(unittest.TestCase):
 
         self.upload_response = {
             'ETag': self.eTag,
-            'VersionId': self.version_id
+            'VersionId': self.version_id,
         }
         self.revision = {
             'revisionType': 'S3',
@@ -62,12 +62,12 @@ class TestPush(unittest.TestCase):
                 'key': self.key,
                 'bundleType': 'zip',
                 'eTag': self.eTag,
-                'version': self.version_id
-            }
+                'version': self.version_id,
+            },
         }
 
         self.bundle_mock = mock.MagicMock()
-        self.bundle_mock.tell.return_value = (5 << 20)
+        self.bundle_mock.tell.return_value = 5 << 20
         self.bundle_mock.read.return_value = b'a' * (5 << 20)
         self.bundle_mock.__enter__.return_value = self.bundle_mock
         self.bundle_mock.__exit__.return_value = None
@@ -86,11 +86,10 @@ class TestPush(unittest.TestCase):
         self.push.s3.create_multipart_upload.return_value = {
             'UploadId': self.upload_id
         }
-        self.push.s3.upload_part.return_value = {
-            'ETag': self.eTag
-        }
-        self.push.s3.complete_multipart_upload\
-            .return_value = self.upload_response
+        self.push.s3.upload_part.return_value = {'ETag': self.eTag}
+        self.push.s3.complete_multipart_upload.return_value = (
+            self.upload_response
+        )
         self.push.codedeploy = mock.MagicMock()
 
     def test_run_main_throws_on_invalid_args(self):
@@ -103,15 +102,17 @@ class TestPush(unittest.TestCase):
         self.push._validate_args = mock.MagicMock()
         self.push._push = mock.MagicMock()
         self.push._run_main(self.args, self.globals)
-        self.session.create_client.assert_has_calls([
-            mock.call(
-                'codedeploy',
-                region_name=self.region,
-                endpoint_url=self.endpoint_url,
-                verify=self.globals.verify_ssl
-            ),
-            mock.call('s3', region_name=self.region)
-        ])
+        self.session.create_client.assert_has_calls(
+            [
+                mock.call(
+                    'codedeploy',
+                    region_name=self.region,
+                    endpoint_url=self.endpoint_url,
+                    verify=self.globals.verify_ssl,
+                ),
+                mock.call('s3', region_name=self.region),
+            ]
+        )
 
     def test_run_main_calls_push(self):
         self.push._validate_args = mock.MagicMock()
@@ -120,11 +121,10 @@ class TestPush(unittest.TestCase):
         self.push._push.assert_called_with(self.args)
 
     @mock.patch.object(
-        awscli.customizations.codedeploy.push,
-        'validate_s3_location'
+        awscli.customizations.codedeploy.push, 'validate_s3_location'
     )
     def test_validate_args_throws_on_invalid_s3_url(
-            self, validate_s3_location
+        self, validate_s3_location
     ):
         self.args.s3_location = 's3:/foo/bar/baz'
         validate_s3_location.side_effect = RuntimeError()
@@ -140,10 +140,7 @@ class TestPush(unittest.TestCase):
     def test_validate_args_default_description(self):
         self.args.description = None
         self.push._validate_args(self.args)
-        self.assertRegex(
-            self.args.description,
-            'Uploaded by AWS CLI .* UTC'
-        )
+        self.assertRegex(self.args.description, 'Uploaded by AWS CLI .* UTC')
 
     def test_push_throws_on_upload_to_s3_error(self):
         self.args.bucket = self.bucket
@@ -158,18 +155,24 @@ class TestPush(unittest.TestCase):
         self.args.bucket = self.bucket
         self.args.key = self.key
         self.push._compress = mock.MagicMock(return_value=self.bundle_mock)
-        self.push._upload_to_s3 = mock.MagicMock(return_value=self.upload_response)
+        self.push._upload_to_s3 = mock.MagicMock(
+            return_value=self.upload_response
+        )
         self.push._register_revision = mock.MagicMock()
         self.push._push(self.args)
         self.push._register_revision.assert_called_with(self.args)
-        self.assertEqual(str(self.args.eTag), self.upload_response['ETag'].replace('"',""))
+        self.assertEqual(
+            str(self.args.eTag), self.upload_response['ETag'].replace('"', "")
+        )
 
     @mock.patch('sys.stdout', new_callable=StringIO)
     def test_push_output_message(self, stdout_mock):
         self.args.bucket = self.bucket
         self.args.key = self.key
         self.push._compress = mock.MagicMock(return_value=self.bundle_mock)
-        self.push._upload_to_s3 = mock.MagicMock(return_value=self.upload_response)
+        self.push._upload_to_s3 = mock.MagicMock(
+            return_value=self.upload_response
+        )
         self.push._register_revision = mock.MagicMock()
         self.push._push(self.args)
         output = stdout_mock.getvalue().strip()
@@ -178,19 +181,17 @@ class TestPush(unittest.TestCase):
             'bundleType=zip,eTag={2},version={3}'.format(
                 self.bucket,
                 self.key,
-                self.eTag.replace('"',""),
-                self.version_id)
+                self.eTag.replace('"', ""),
+                self.version_id,
+            )
         )
         expected_output = (
             'To deploy with this revision, run:\n'
             'aws deploy create-deployment '
-            '--application-name {0} {1} '
+            f'--application-name {self.application_name} {expected_revision_output} '
             '--deployment-group-name <deployment-group-name> '
             '--deployment-config-name <deployment-config-name> '
-            '--description <description>'.format(
-                self.application_name,
-                expected_revision_output
-            )
+            '--description <description>'
         )
         self.assertEqual(expected_output, output)
 
@@ -208,8 +209,8 @@ class TestPush(unittest.TestCase):
         zf.return_value = self.zipfile_mock
         with self.assertRaises(RuntimeError):
             with self.push._compress(
-                    self.args.source,
-                    self.args.ignore_hidden_files):
+                self.args.source, self.args.ignore_hidden_files
+            ):
                 pass
 
     @mock.patch('zipfile.ZipFile')
@@ -224,13 +225,11 @@ class TestPush(unittest.TestCase):
         tf.return_value = self.bundle_mock
         zf.return_value = self.zipfile_mock
         with self.push._compress(
-                self.args.source,
-                self.args.ignore_hidden_files):
+            self.args.source, self.args.ignore_hidden_files
+        ):
             zf.assert_called_with(mock.ANY, 'w', allowZip64=True)
             zf().write.assert_called_with(
-                '/tmp/appspec.yml',
-                self.appspec,
-                ZIP_COMPRESSION_MODE
+                '/tmp/appspec.yml', self.appspec, ZIP_COMPRESSION_MODE
             )
 
     def test_upload_to_s3_with_put_object(self):
@@ -239,9 +238,7 @@ class TestPush(unittest.TestCase):
         response = self.push._upload_to_s3(self.args, self.bundle_mock)
         self.assertDictEqual(self.upload_response, response)
         self.push.s3.put_object.assert_called_with(
-            Bucket=self.bucket,
-            Key=self.key,
-            Body=self.bundle_mock
+            Bucket=self.bucket, Key=self.key, Body=self.bundle_mock
         )
         self.assertFalse(self.push.s3.create_multipart_upload.called)
         self.assertFalse(self.push.s3.upload_part.called)
@@ -251,52 +248,47 @@ class TestPush(unittest.TestCase):
     def test_upload_to_s3_with_multipart_upload(self):
         self.args.bucket = self.bucket
         self.args.key = self.key
-        self.bundle_mock.tell.return_value = (6 << 20)
+        self.bundle_mock.tell.return_value = 6 << 20
         self.bundle_mock.read.return_value = b'a' * (6 << 20)
         response = self.push._upload_to_s3(self.args, self.bundle_mock)
         self.assertDictEqual(self.upload_response, response)
         self.assertFalse(self.push.s3.put_object.called)
         self.push.s3.create_multipart_upload.assert_called_with(
-            Bucket=self.bucket,
-            Key=self.key
+            Bucket=self.bucket, Key=self.key
         )
         self.push.s3.upload_part.assert_called_with(
             Bucket=self.bucket,
             Key=self.key,
             UploadId=self.upload_id,
             PartNumber=1,
-            Body=mock.ANY
+            Body=mock.ANY,
         )
         self.push.s3.complete_multipart_upload.assert_called_with(
             Bucket=self.bucket,
             Key=self.key,
             UploadId=self.upload_id,
-            MultipartUpload={'Parts': [{'PartNumber': 1, 'ETag': self.eTag}]}
+            MultipartUpload={'Parts': [{'PartNumber': 1, 'ETag': self.eTag}]},
         )
         self.assertFalse(self.push.s3.abort_multipart_upload.called)
 
     def test_upload_to_s3_with_multipart_upload_aborted_on_error(self):
         self.args.bucket = self.bucket
         self.args.key = self.key
-        self.bundle_mock.tell.return_value = (6 << 20)
+        self.bundle_mock.tell.return_value = 6 << 20
         self.bundle_mock.read.return_value = b'a' * (6 << 20)
         self.push.s3.upload_part.side_effect = ClientError(
-            {'Error': {'Code': 'Error', 'Message': 'Error'}},
-            'UploadPart'
+            {'Error': {'Code': 'Error', 'Message': 'Error'}}, 'UploadPart'
         )
         with self.assertRaises(ClientError):
             self.push._upload_to_s3(self.args, self.bundle_mock)
         self.assertFalse(self.push.s3.put_object.called)
         self.push.s3.create_multipart_upload.assert_called_with(
-            Bucket=self.bucket,
-            Key=self.key
+            Bucket=self.bucket, Key=self.key
         )
         self.assertTrue(self.push.s3.upload_part.called)
         self.assertFalse(self.push.s3.complete_multipart_upload.called)
         self.push.s3.abort_multipart_upload.assert_called_with(
-            Bucket=self.bucket,
-            Key=self.key,
-            UploadId=self.upload_id
+            Bucket=self.bucket, Key=self.key, UploadId=self.upload_id
         )
 
     def test_register_revision(self):
@@ -308,7 +300,7 @@ class TestPush(unittest.TestCase):
         self.push.codedeploy.register_application_revision.assert_called_with(
             applicationName=self.application_name,
             description=self.description,
-            revision=self.revision
+            revision=self.revision,
         )
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_register.py 2.31.35-1/tests/unit/customizations/codedeploy/test_register.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_register.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_register.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,13 @@
 # language governing permissions and limitations under the License.
 
 from argparse import Namespace
+
 from awscli.customizations.codedeploy.register import Register
 from awscli.customizations.codedeploy.utils import MAX_TAGS_PER_INSTANCE
-from awscli.customizations.exceptions import ConfigurationError
-from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 from awscli.testutils import mock, unittest
 
 
@@ -54,7 +57,8 @@ class TestRegister(unittest.TestCase):
 
         self.open_patcher = mock.patch(
             'awscli.customizations.codedeploy.register.open',
-            mock.mock_open(), create=True
+            mock.mock_open(),
+            create=True,
         )
         self.open = self.open_patcher.start()
 
@@ -67,7 +71,7 @@ class TestRegister(unittest.TestCase):
         self.iam.create_access_key.return_value = {
             'AccessKey': {
                 'AccessKeyId': self.access_key_id,
-                'SecretAccessKey': self.secret_access_key
+                'SecretAccessKey': self.secret_access_key,
             }
         }
 
@@ -96,9 +100,9 @@ class TestRegister(unittest.TestCase):
             {'Key': 'k' + str(x), 'Value': 'v' + str(x)} for x in range(11)
         ]
         with self.assertRaisesRegex(
-                ParamValidationError,
-                'Instances can only have a maximum of {0} tags.'.format(
-                    MAX_TAGS_PER_INSTANCE)):
+            ParamValidationError,
+            f'Instances can only have a maximum of {MAX_TAGS_PER_INSTANCE} tags.',
+        ):
             self.register._run_main(self.args, self.globals)
 
     def test_register_throws_on_invalid_iam_user_arn(self):
@@ -109,22 +113,23 @@ class TestRegister(unittest.TestCase):
 
     def test_register_creates_clients(self):
         self.register._run_main(self.args, self.globals)
-        self.session.create_client.assert_has_calls([
-            mock.call(
-                'codedeploy',
-                region_name=self.region,
-                endpoint_url=self.endpoint_url,
-                verify=self.globals.verify_ssl
-            ),
-            mock.call('iam', region_name=self.region)
-        ])
+        self.session.create_client.assert_has_calls(
+            [
+                mock.call(
+                    'codedeploy',
+                    region_name=self.region,
+                    endpoint_url=self.endpoint_url,
+                    verify=self.globals.verify_ssl,
+                ),
+                mock.call('iam', region_name=self.region),
+            ]
+        )
 
     def test_register_with_no_iam_user_arn(self):
         self.args.iam_user_arn = None
         self.register._run_main(self.args, self.globals)
         self.register.iam.create_user.assert_called_with(
-            Path=self.path,
-            UserName=self.instance_name
+            Path=self.path, UserName=self.instance_name
         )
         self.assertIn('iam_user_arn', self.args)
         self.assertEqual(self.iam_user_arn, self.args.iam_user_arn)
@@ -138,7 +143,7 @@ class TestRegister(unittest.TestCase):
         self.register.iam.put_user_policy.assert_called_with(
             UserName=self.instance_name,
             PolicyName=self.policy_name,
-            PolicyDocument=self.policy_document
+            PolicyDocument=self.policy_document,
         )
         self.assertIn('policy_name', self.args)
         self.assertEqual(self.policy_name, self.args.policy_name)
@@ -147,21 +152,14 @@ class TestRegister(unittest.TestCase):
         self.open.assert_called_with(self.config_file, 'w')
         self.open().write.assert_called_with(
             '---\n'
-            'region: {0}\n'
-            'iam_user_arn: {1}\n'
-            'aws_access_key_id: {2}\n'
-            'aws_secret_access_key: {3}\n'.format(
-                self.region,
-                self.iam_user_arn,
-                self.access_key_id,
-                self.secret_access_key
-            )
-        )
-        self.register.codedeploy.register_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name,
-                iamUserArn=self.iam_user_arn
-            )
+            f'region: {self.region}\n'
+            f'iam_user_arn: {self.iam_user_arn}\n'
+            f'aws_access_key_id: {self.access_key_id}\n'
+            f'aws_secret_access_key: {self.secret_access_key}\n'
+        )
+        self.register.codedeploy.register_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name, iamUserArn=self.iam_user_arn
+        )
 
     def test_register_with_iam_user_arn(self):
         self.args.iam_user_arn = self.iam_user_arn
@@ -170,20 +168,16 @@ class TestRegister(unittest.TestCase):
         self.assertFalse(self.register.iam.create_access_key.called)
         self.assertFalse(self.register.iam.put_user_policy.called)
         self.assertFalse(self.open.called)
-        self.register.codedeploy.register_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name,
-                iamUserArn=self.iam_user_arn
-            )
+        self.register.codedeploy.register_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name, iamUserArn=self.iam_user_arn
+        )
 
     def test_register_with_no_tags(self):
         self.args.tags = None
         self.register._run_main(self.args, self.globals)
-        self.register.codedeploy.register_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name,
-                iamUserArn=self.iam_user_arn
-            )
+        self.register.codedeploy.register_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name, iamUserArn=self.iam_user_arn
+        )
         self.assertFalse(
             self.register.codedeploy.add_tags_to_on_premises_instances.called
         )
@@ -191,16 +185,12 @@ class TestRegister(unittest.TestCase):
     def test_register_with_tags(self):
         self.args.tags = self.tags
         self.register._run_main(self.args, self.globals)
-        self.register.codedeploy.register_on_premises_instance.\
-            assert_called_with(
-                instanceName=self.instance_name,
-                iamUserArn=self.iam_user_arn
-            )
-        self.register.codedeploy.add_tags_to_on_premises_instances.\
-            assert_called_with(
-                tags=self.tags,
-                instanceNames=[self.instance_name]
-            )
+        self.register.codedeploy.register_on_premises_instance.assert_called_with(
+            instanceName=self.instance_name, iamUserArn=self.iam_user_arn
+        )
+        self.register.codedeploy.add_tags_to_on_premises_instances.assert_called_with(
+            tags=self.tags, instanceNames=[self.instance_name]
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_systems.py 2.31.35-1/tests/unit/customizations/codedeploy/test_systems.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_systems.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_systems.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,9 +12,9 @@
 # language governing permissions and limitations under the License.
 
 import subprocess
-
 from argparse import Namespace
-from awscli.customizations.codedeploy.systems import Windows, Ubuntu, RHEL
+
+from awscli.customizations.codedeploy.systems import RHEL, Ubuntu, Windows
 from awscli.testutils import mock, unittest
 
 
@@ -28,13 +28,14 @@ class TestWindows(unittest.TestCase):
 
         self.open_patcher = mock.patch(
             'awscli.customizations.codedeploy.systems.open',
-            mock.mock_open(), create=True
+            mock.mock_open(),
+            create=True,
         )
         self.open = self.open_patcher.start()
 
         self.config_dir = r'C:\ProgramData\Amazon\CodeDeploy'
         self.config_file = 'conf.onpremises.yml'
-        self.config_path = r'{0}\{1}'.format(self.config_dir, self.config_file)
+        self.config_path = rf'{self.config_dir}\{self.config_file}'
         self.installer = 'codedeploy-agent.msi'
         self.bucket = 'bucket'
         self.key = 'key'
@@ -80,43 +81,56 @@ class TestWindows(unittest.TestCase):
         process.returncode = 0
         self.popen.return_value = process
         self.windows.install(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                [
-                    'powershell.exe',
-                    '-Command', 'Stop-Service',
-                    '-Name', 'codedeployagent'
-                ],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate(),
-            mock.call(
-                [
-                    'powershell.exe',
-                    '-Command', 'Get-Service',
-                    '-Name', 'codedeployagent'
-                ],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
-        self.check_call.assert_has_calls([
-            mock.call(
-                [
-                    r'.\{0}'.format(self.installer),
-                    '/quiet',
-                    '/l', r'.\codedeploy-agent-install-log.txt'
-                ],
-                shell=True
-            ),
-            mock.call([
-                'powershell.exe',
-                '-Command', 'Restart-Service',
-                '-Name', 'codedeployagent'
-            ])
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    [
+                        'powershell.exe',
+                        '-Command',
+                        'Stop-Service',
+                        '-Name',
+                        'codedeployagent',
+                    ],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+                mock.call(
+                    [
+                        'powershell.exe',
+                        '-Command',
+                        'Get-Service',
+                        '-Name',
+                        'codedeployagent',
+                    ],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
+        self.check_call.assert_has_calls(
+            [
+                mock.call(
+                    [
+                        rf'.\{self.installer}',
+                        '/quiet',
+                        '/l',
+                        r'.\codedeploy-agent-install-log.txt',
+                    ],
+                    shell=True,
+                ),
+                mock.call(
+                    [
+                        'powershell.exe',
+                        '-Command',
+                        'Restart-Service',
+                        '-Name',
+                        'codedeployagent',
+                    ]
+                ),
+            ]
+        )
         self.open.assert_called_with(self.installer, 'wb')
         self.open().write.assert_called_with(self.body)
 
@@ -126,28 +140,36 @@ class TestWindows(unittest.TestCase):
         process.returncode = 0
         self.popen.return_value = process
         self.windows.uninstall(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                [
-                    'powershell.exe',
-                    '-Command', 'Stop-Service',
-                    '-Name', 'codedeployagent'
-                ],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate(),
-            mock.call(
-                [
-                    'wmic',
-                    'product', 'where', 'name="CodeDeploy Host Agent"',
-                    'call', 'uninstall', '/nointeractive'
-                ],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    [
+                        'powershell.exe',
+                        '-Command',
+                        'Stop-Service',
+                        '-Name',
+                        'codedeployagent',
+                    ],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+                mock.call(
+                    [
+                        'wmic',
+                        'product',
+                        'where',
+                        'name="CodeDeploy Host Agent"',
+                        'call',
+                        'uninstall',
+                        '/nointeractive',
+                    ],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
 
 
 class TestLinux(unittest.TestCase):
@@ -160,7 +182,8 @@ class TestLinux(unittest.TestCase):
 
         self.open_patcher = mock.patch(
             'awscli.customizations.codedeploy.systems.open',
-            mock.mock_open(), create=True
+            mock.mock_open(),
+            create=True,
         )
         self.open = self.open_patcher.start()
 
@@ -170,7 +193,7 @@ class TestLinux(unittest.TestCase):
 
         self.config_dir = '/etc/codedeploy-agent/conf'
         self.config_file = 'codedeploy.onpremises.yml'
-        self.config_path = '{0}/{1}'.format(self.config_dir, self.config_file)
+        self.config_path = f'{self.config_dir}/{self.config_file}'
         self.installer = 'install'
         self.bucket = 'bucket'
         self.key = 'key'
@@ -184,12 +207,14 @@ class TestLinux(unittest.TestCase):
         self.credentials.secret_key = self.secret_access_key
         self.credentials.token = self.session_token
 
-        self.environment = dict({
-            'AWS_REGION': self.region,
-            'AWS_ACCESS_KEY_ID': self.access_key_id,
-            'AWS_SECRET_ACCESS_KEY': self.secret_access_key,
-            'AWS_SESSION_TOKEN': self.session_token
-        })
+        self.environment = dict(
+            {
+                'AWS_REGION': self.region,
+                'AWS_ACCESS_KEY_ID': self.access_key_id,
+                'AWS_SECRET_ACCESS_KEY': self.secret_access_key,
+                'AWS_SESSION_TOKEN': self.session_token,
+            }
+        )
 
         self.body = 'install-script'
         self.reader = mock.MagicMock()
@@ -235,7 +260,8 @@ class TestUbuntu(TestLinux):
     def test_validate_administrator_throws(self, geteuid):
         geteuid.return_value = 1
         with self.assertRaisesRegex(
-                RuntimeError, 'You must run this command as sudo.'):
+            RuntimeError, 'You must run this command as sudo.'
+        ):
             self.ubuntu.validate_administrator()
 
     def test_install(self):
@@ -244,23 +270,26 @@ class TestUbuntu(TestLinux):
         process.returncode = 0
         self.popen.return_value = process
         self.ubuntu.install(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                ['service', 'codedeploy-agent', 'stop'],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
-        self.check_call.assert_has_calls([
-            mock.call(['apt-get', '-y', 'update']),
-            mock.call(['apt-get', '-y', 'install', 'ruby2.0']),
-            mock.call(['chmod', '+x', './{0}'.format(self.installer)]),
-            mock.call(
-                ['./{0}'.format(self.installer), 'auto'],
-                env=self.environment
-            )
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    ['service', 'codedeploy-agent', 'stop'],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
+        self.check_call.assert_has_calls(
+            [
+                mock.call(['apt-get', '-y', 'update']),
+                mock.call(['apt-get', '-y', 'install', 'ruby2.0']),
+                mock.call(['chmod', '+x', f'./{self.installer}']),
+                mock.call(
+                    [f'./{self.installer}', 'auto'], env=self.environment
+                ),
+            ]
+        )
         self.open.assert_called_with(self.installer, 'wb')
         self.open().write.assert_called_with(self.body)
 
@@ -270,17 +299,20 @@ class TestUbuntu(TestLinux):
         process.returncode = 0
         self.popen.return_value = process
         self.ubuntu.uninstall(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                ['service', 'codedeploy-agent', 'stop'],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
-        self.check_call.assert_has_calls([
-            mock.call(['dpkg', '-r', 'codedeploy-agent'])
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    ['service', 'codedeploy-agent', 'stop'],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
+        self.check_call.assert_has_calls(
+            [mock.call(['dpkg', '-r', 'codedeploy-agent'])]
+        )
+
 
 class TestRHEL(TestLinux):
     def setUp(self):
@@ -303,7 +335,8 @@ class TestRHEL(TestLinux):
     def test_validate_administrator_throws(self, geteuid):
         geteuid.return_value = 1
         with self.assertRaisesRegex(
-                RuntimeError, 'You must run this command as sudo.'):
+            RuntimeError, 'You must run this command as sudo.'
+        ):
             self.rhel.validate_administrator()
 
     def test_install(self):
@@ -312,22 +345,25 @@ class TestRHEL(TestLinux):
         process.returncode = 0
         self.popen.return_value = process
         self.rhel.install(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                ['service', 'codedeploy-agent', 'stop'],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
-        self.check_call.assert_has_calls([
-            mock.call(['yum', '-y', 'install', 'ruby']),
-            mock.call(['chmod', '+x', './{0}'.format(self.installer)]),
-            mock.call(
-                ['./{0}'.format(self.installer), 'auto'],
-                env=self.environment
-            )
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    ['service', 'codedeploy-agent', 'stop'],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
+        self.check_call.assert_has_calls(
+            [
+                mock.call(['yum', '-y', 'install', 'ruby']),
+                mock.call(['chmod', '+x', f'./{self.installer}']),
+                mock.call(
+                    [f'./{self.installer}', 'auto'], env=self.environment
+                ),
+            ]
+        )
         self.open.assert_called_with(self.installer, 'wb')
         self.open().write.assert_called_with(self.body)
 
@@ -337,17 +373,20 @@ class TestRHEL(TestLinux):
         process.returncode = 0
         self.popen.return_value = process
         self.rhel.uninstall(self.params)
-        self.popen.assert_has_calls([
-            mock.call(
-                ['service', 'codedeploy-agent', 'stop'],
-                stdout=subprocess.PIPE,
-                stderr=subprocess.PIPE
-            ),
-            mock.call().communicate()
-        ])
-        self.check_call.assert_has_calls([
-            mock.call(['yum', '-y', 'erase', 'codedeploy-agent'])
-        ])
+        self.popen.assert_has_calls(
+            [
+                mock.call(
+                    ['service', 'codedeploy-agent', 'stop'],
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                ),
+                mock.call().communicate(),
+            ]
+        )
+        self.check_call.assert_has_calls(
+            [mock.call(['yum', '-y', 'erase', 'codedeploy-agent'])]
+        )
+
 
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_uninstall.py 2.31.35-1/tests/unit/customizations/codedeploy/test_uninstall.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_uninstall.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_uninstall.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,13 +12,18 @@
 # language governing permissions and limitations under the License.
 
 import sys
-
 from argparse import Namespace
-from awscli.customizations.codedeploy.systems import Ubuntu, Windows, RHEL, System
+from socket import timeout
+
+from awscli.customizations.codedeploy.systems import (
+    RHEL,
+    System,
+    Ubuntu,
+    Windows,
+)
 from awscli.customizations.codedeploy.uninstall import Uninstall
 from awscli.customizations.exceptions import ConfigurationError
 from awscli.testutils import mock, unittest
-from socket import timeout
 
 
 class TestUninstall(unittest.TestCase):
@@ -29,7 +34,9 @@ class TestUninstall(unittest.TestCase):
         self.system = self.system_patcher.start()
         self.system.return_value = 'Linux'
 
-        self.linux_distribution_patcher = mock.patch('awscli.compat.linux_distribution')
+        self.linux_distribution_patcher = mock.patch(
+            'awscli.compat.linux_distribution'
+        )
         self.linux_distribution = self.linux_distribution_patcher.start()
         self.linux_distribution.return_value = ('Ubuntu', '', '')
 
@@ -69,13 +76,15 @@ class TestUninstall(unittest.TestCase):
     def test_uninstall_throws_on_unsupported_system(self):
         self.system.return_value = 'Unsupported'
         with self.assertRaisesRegex(
-                RuntimeError, System.UNSUPPORTED_SYSTEM_MSG):
+            RuntimeError, System.UNSUPPORTED_SYSTEM_MSG
+        ):
             self.uninstall._run_main(self.args, self.globals)
 
     def test_uninstall_throws_on_ec2_instance(self):
         self.urlopen.side_effect = None
         with self.assertRaisesRegex(
-                RuntimeError, 'Amazon EC2 instances are not supported.'):
+            RuntimeError, 'Amazon EC2 instances are not supported.'
+        ):
             self.uninstall._run_main(self.args, self.globals)
         self.assertIn('system', self.args)
         self.assertTrue(isinstance(self.args.system, Ubuntu))
@@ -83,7 +92,8 @@ class TestUninstall(unittest.TestCase):
     def test_uninstall_throws_on_non_administrator(self):
         self.geteuid.return_value = 1
         with self.assertRaisesRegex(
-                RuntimeError, 'You must run this command as sudo.'):
+            RuntimeError, 'You must run this command as sudo.'
+        ):
             self.uninstall._run_main(self.args, self.globals)
 
     @mock.patch.object(Ubuntu, 'uninstall')
@@ -99,7 +109,11 @@ class TestUninstall(unittest.TestCase):
     @mock.patch.object(RHEL, 'uninstall')
     def test_uninstall_for_RHEL(self, uninstall):
         self.system.return_value = 'Linux'
-        self.linux_distribution.return_value = ('Red Hat Enterprise Linux Server', '', '')
+        self.linux_distribution.return_value = (
+            'Red Hat Enterprise Linux Server',
+            '',
+            '',
+        )
         self.uninstall._run_main(self.args, self.globals)
         uninstall.assert_called_with(self.args)
         self.remove.assert_called_with(
diff -pruN 2.23.6-1/tests/unit/customizations/codedeploy/test_utils.py 2.31.35-1/tests/unit/customizations/codedeploy/test_utils.py
--- 2.23.6-1/tests/unit/customizations/codedeploy/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/codedeploy/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,17 +12,31 @@
 # language governing permissions and limitations under the License.
 
 import sys
-
-from socket import timeout
 from argparse import Namespace
-from awscli.customizations.codedeploy.systems import Ubuntu, Windows, RHEL, System
-from awscli.customizations.codedeploy.utils import \
-    validate_region, validate_instance_name, validate_tags, \
-    validate_iam_user_arn, validate_instance, validate_s3_location, \
-    MAX_INSTANCE_NAME_LENGTH, MAX_TAGS_PER_INSTANCE, MAX_TAG_KEY_LENGTH, \
-    MAX_TAG_VALUE_LENGTH
-from awscli.customizations.exceptions import ConfigurationError
-from awscli.customizations.exceptions import ParamValidationError
+from socket import timeout
+
+from awscli.customizations.codedeploy.systems import (
+    RHEL,
+    System,
+    Ubuntu,
+    Windows,
+)
+from awscli.customizations.codedeploy.utils import (
+    MAX_INSTANCE_NAME_LENGTH,
+    MAX_TAG_KEY_LENGTH,
+    MAX_TAG_VALUE_LENGTH,
+    MAX_TAGS_PER_INSTANCE,
+    validate_iam_user_arn,
+    validate_instance,
+    validate_instance_name,
+    validate_region,
+    validate_s3_location,
+    validate_tags,
+)
+from awscli.customizations.exceptions import (
+    ConfigurationError,
+    ParamValidationError,
+)
 from awscli.testutils import mock, unittest
 
 
@@ -38,7 +52,9 @@ class TestUtils(unittest.TestCase):
         self.system = self.system_patcher.start()
         self.system.return_value = 'Linux'
 
-        self.linux_distribution_patcher = mock.patch('awscli.compat.linux_distribution')
+        self.linux_distribution_patcher = mock.patch(
+            'awscli.compat.linux_distribution'
+        )
         self.linux_distribution = self.linux_distribution_patcher.start()
         self.linux_distribution.return_value = ('Ubuntu', '', '')
 
@@ -101,9 +117,7 @@ class TestUtils(unittest.TestCase):
             '01234567890123456789012345678901234567890123456789'
             '012345678901234567890123456789012345678901234567891'
         )
-        error_msg = (
-            'Instance name cannot be longer than {0} characters.'
-        ).format(MAX_INSTANCE_NAME_LENGTH)
+        error_msg = f'Instance name cannot be longer than {MAX_INSTANCE_NAME_LENGTH} characters.'
         with self.assertRaisesRegex(ParamValidationError, error_msg):
             validate_instance_name(self.params)
 
@@ -111,9 +125,7 @@ class TestUtils(unittest.TestCase):
         self.params.tags = [
             {'Key': 'k' + str(x), 'Value': 'v' + str(x)} for x in range(11)
         ]
-        error_msg = (
-            'Instances can only have a maximum of {0} tags.'
-        ).format(MAX_TAGS_PER_INSTANCE)
+        error_msg = f'Instances can only have a maximum of {MAX_TAGS_PER_INSTANCE} tags.'
         with self.assertRaisesRegex(ParamValidationError, error_msg):
             validate_tags(self.params)
 
@@ -126,8 +138,8 @@ class TestUtils(unittest.TestCase):
         key = 'k' * 129
         self.params.tags = [{'Key': key, 'Value': 'v1'}]
         error_msg = (
-            'Tag Key cannot be longer than {0} characters.'
-        ).format(MAX_TAG_KEY_LENGTH)
+            f'Tag Key cannot be longer than {MAX_TAG_KEY_LENGTH} characters.'
+        )
         with self.assertRaisesRegex(ParamValidationError, error_msg):
             validate_tags(self.params)
 
@@ -139,9 +151,7 @@ class TestUtils(unittest.TestCase):
     def test_validate_tags_throws_on_long_value(self):
         value = 'v' * 257
         self.params.tags = [{'Key': 'k1', 'Value': value}]
-        error_msg = (
-            'Tag Value cannot be longer than {0} characters.'
-        ).format(MAX_TAG_VALUE_LENGTH)
+        error_msg = f'Tag Value cannot be longer than {MAX_TAG_VALUE_LENGTH} characters.'
         with self.assertRaisesRegex(ParamValidationError, error_msg):
             validate_tags(self.params)
 
@@ -168,7 +178,11 @@ class TestUtils(unittest.TestCase):
     def test_validate_instance_rhel(self):
         self.urlopen.side_effect = timeout('Not EC2 instance')
         self.system.return_value = 'Linux'
-        self.linux_distribution.return_value = ('Red Hat Enterprise Linux Server', None, None)
+        self.linux_distribution.return_value = (
+            'Red Hat Enterprise Linux Server',
+            None,
+            None,
+        )
         self.params.session = self.session
         self.params.region = self.region
         validate_instance(self.params)
@@ -187,7 +201,8 @@ class TestUtils(unittest.TestCase):
     def test_validate_instance_throws_on_unsupported_system(self):
         self.system.return_value = 'Unsupported'
         with self.assertRaisesRegex(
-                RuntimeError, System.UNSUPPORTED_SYSTEM_MSG):
+            RuntimeError, System.UNSUPPORTED_SYSTEM_MSG
+        ):
             validate_instance(self.params)
 
     def test_validate_instance_throws_on_ec2_instance(self):
@@ -195,11 +210,12 @@ class TestUtils(unittest.TestCase):
         self.params.region = self.region
         self.urlopen.side_effect = None
         with self.assertRaisesRegex(
-                RuntimeError, 'Amazon EC2 instances are not supported.'):
+            RuntimeError, 'Amazon EC2 instances are not supported.'
+        ):
             validate_instance(self.params)
 
     def test_validate_s3_location_returns_bucket_key(self):
-        self.params.s3_location = 's3://{0}/{1}'.format(self.bucket, self.key)
+        self.params.s3_location = f's3://{self.bucket}/{self.key}'
         validate_s3_location(self.params, self.arg_name)
         self.assertIn('bucket', self.params)
         self.assertEqual(self.bucket, self.params.bucket)
@@ -214,9 +230,9 @@ class TestUtils(unittest.TestCase):
     def test_validate_s3_location_throws_on_invalid_location(self):
         self.params.s3_location = 'invalid-s3-location'
         error_msg = (
-            '--{0} must specify the Amazon S3 URL format as '
+            f'--{self.arg_name} must specify the Amazon S3 URL format as '
             's3://<bucket>/<key>.'
-        ).format(self.arg_name)
+        )
         with self.assertRaisesRegex(ParamValidationError, error_msg):
             validate_s3_location(self.params, self.arg_name)
 
diff -pruN 2.23.6-1/tests/unit/customizations/configservice/test_getstatus.py 2.31.35-1/tests/unit/customizations/configservice/test_getstatus.py
--- 2.23.6-1/tests/unit/customizations/configservice/test_getstatus.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configservice/test_getstatus.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from awscli.compat import StringIO
-from awscli.testutils import mock, unittest
 from awscli.customizations.configservice.getstatus import GetStatusCommand
+from awscli.testutils import mock, unittest
 
 
 class TestGetStatusCommand(unittest.TestCase):
@@ -28,24 +28,29 @@ class TestGetStatusCommand(unittest.Test
         self.channel_status = []
 
         # Set the output handles to the client.
-        self.config_client.describe_configuration_recorder_status.\
-            return_value = {'ConfigurationRecordersStatus':
-                            self.recorder_status}
-        self.config_client.describe_delivery_channel_status.\
-            return_value = {'DeliveryChannelsStatus': self.channel_status}
+        self.config_client.describe_configuration_recorder_status.return_value = {
+            'ConfigurationRecordersStatus': self.recorder_status
+        }
+        self.config_client.describe_delivery_channel_status.return_value = {
+            'DeliveryChannelsStatus': self.channel_status
+        }
 
         self.parsed_args = mock.Mock()
         self.parsed_globals = mock.Mock()
         self.cmd = GetStatusCommand(self.session)
 
-    def _make_delivery_channel_status(self, name, stream_delivery_status,
-                                      history_delivery_status,
-                                      snapshot_delivery_status):
+    def _make_delivery_channel_status(
+        self,
+        name,
+        stream_delivery_status,
+        history_delivery_status,
+        snapshot_delivery_status,
+    ):
         status = {
             'name': 'default',
             'configStreamDeliveryInfo': stream_delivery_status,
             'configHistoryDeliveryInfo': history_delivery_status,
-            'configSnapshotDeliveryInfo': snapshot_delivery_status
+            'configSnapshotDeliveryInfo': snapshot_delivery_status,
         }
         return status
 
@@ -61,12 +66,15 @@ class TestGetStatusCommand(unittest.Test
             'config',
             verify=self.parsed_globals.verify_ssl,
             region_name=self.parsed_globals.region,
-            endpoint_url=self.parsed_globals.endpoint_url
+            endpoint_url=self.parsed_globals.endpoint_url,
         )
 
     def test_configuration_recorder_success(self):
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'SUCCESS'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'SUCCESS',
+        }
         self.recorder_status.append(status)
 
         expected_output = (
@@ -82,9 +90,13 @@ class TestGetStatusCommand(unittest.Test
             self.assertEqual(expected_output, mock_stdout.getvalue())
 
     def test_configuration_recorder_fail(self):
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                  'lastErrorMessage': 'This is the error'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
         self.recorder_status.append(status)
 
         expected_output = (
@@ -117,13 +129,20 @@ class TestGetStatusCommand(unittest.Test
             self.assertEqual(expected_output, mock_stdout.getvalue())
 
     def test_multiple_configuration_recorders(self):
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'SUCCESS'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'SUCCESS',
+        }
         self.recorder_status.append(status)
 
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                  'lastErrorMessage': 'This is the error'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
         self.recorder_status.append(status)
 
         status = {'name': 'default', 'recording': False}
@@ -156,9 +175,10 @@ class TestGetStatusCommand(unittest.Test
         snapshot_delivery_status = {}
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
 
@@ -182,9 +202,10 @@ class TestGetStatusCommand(unittest.Test
         snapshot_delivery_status = success
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
 
@@ -203,17 +224,21 @@ class TestGetStatusCommand(unittest.Test
 
     def test_delivery_channel_fail_single_delivery_info(self):
         name = 'default'
-        failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                   'lastErrorMessage': 'This is the error'}
+        failure = {
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
 
         stream_delivery_status = failure
         history_delivery_status = {}
         snapshot_delivery_status = {}
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
 
@@ -233,17 +258,21 @@ class TestGetStatusCommand(unittest.Test
     def test_delivery_channel_mixed_multiple_delivery_info(self):
         name = 'default'
         success = {'lastStatus': 'SUCCESS'}
-        failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                   'lastErrorMessage': 'This is the error'}
+        failure = {
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
 
         stream_delivery_status = failure
         history_delivery_status = success
         snapshot_delivery_status = success
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
 
@@ -265,17 +294,21 @@ class TestGetStatusCommand(unittest.Test
     def test_multiple_delivery_channels(self):
         name = 'default'
         success = {'lastStatus': 'SUCCESS'}
-        failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                   'lastErrorMessage': 'This is the error'}
+        failure = {
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
 
         stream_delivery_status = failure
         history_delivery_status = success
         snapshot_delivery_status = success
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
         self.channel_status.append(status)
@@ -303,13 +336,20 @@ class TestGetStatusCommand(unittest.Test
 
     def test_full_get_status(self):
         # Create the configuration recorder statuses.
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'SUCCESS'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'SUCCESS',
+        }
         self.recorder_status.append(status)
 
-        status = {'name': 'default', 'recording': True,
-                  'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                  'lastErrorMessage': 'This is the error'}
+        status = {
+            'name': 'default',
+            'recording': True,
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
         self.recorder_status.append(status)
 
         status = {'name': 'default', 'recording': False}
@@ -318,17 +358,21 @@ class TestGetStatusCommand(unittest.Test
         # Create the delivery channel statuses.
         name = 'default'
         success = {'lastStatus': 'SUCCESS'}
-        failure = {'lastStatus': 'FAILURE', 'lastErrorCode': '500',
-                   'lastErrorMessage': 'This is the error'}
+        failure = {
+            'lastStatus': 'FAILURE',
+            'lastErrorCode': '500',
+            'lastErrorMessage': 'This is the error',
+        }
 
         stream_delivery_status = failure
         history_delivery_status = success
         snapshot_delivery_status = success
 
         status = self._make_delivery_channel_status(
-            name, stream_delivery_status=stream_delivery_status,
+            name,
+            stream_delivery_status=stream_delivery_status,
             history_delivery_status=history_delivery_status,
-            snapshot_delivery_status=snapshot_delivery_status
+            snapshot_delivery_status=snapshot_delivery_status,
         )
         self.channel_status.append(status)
         self.channel_status.append(status)
diff -pruN 2.23.6-1/tests/unit/customizations/configservice/test_putconfigurationrecorder.py 2.31.35-1/tests/unit/customizations/configservice/test_putconfigurationrecorder.py
--- 2.23.6-1/tests/unit/customizations/configservice/test_putconfigurationrecorder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configservice/test_putconfigurationrecorder.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.clidriver import create_clidriver
 from awscli.arguments import CLIArgument
+from awscli.clidriver import create_clidriver
+from awscli.customizations.configservice.putconfigurationrecorder import (
+    ConfigurationRecorderArgument,
+    RecordingGroupArgument,
+    extract_recording_group,
+)
 from awscli.testutils import unittest
-from awscli.customizations.configservice.putconfigurationrecorder import \
-    extract_recording_group, ConfigurationRecorderArgument, \
-    RecordingGroupArgument
 
 
 class TestPutConfigurationRecorder(unittest.TestCase):
@@ -25,19 +27,22 @@ class TestPutConfigurationRecorder(unitt
         self.argument_table = {}
         self.service_model = self.session.get_service_model('config')
         self.operation_model = self.service_model.operation_model(
-            'PutConfigurationRecorder')
-        configuration_recorder_model = self.operation_model.\
-            input_shape.members['ConfigurationRecorder']
+            'PutConfigurationRecorder'
+        )
+        configuration_recorder_model = (
+            self.operation_model.input_shape.members['ConfigurationRecorder']
+        )
         self.old_configuration_recorder_argument = CLIArgument(
             name='configuration-recorder',
             argument_model=configuration_recorder_model,
             operation_model=self.operation_model,
             is_required=True,
             event_emitter=self.session.get_component('event_emitter'),
-            serialized_name='ConfigurationRecorder'
+            serialized_name='ConfigurationRecorder',
         )
-        self.argument_table['configuration-recorder'] = \
+        self.argument_table['configuration-recorder'] = (
             self.old_configuration_recorder_argument
+        )
 
     def test_extract_recording_group(self):
         extract_recording_group(self.session, self.argument_table)
@@ -46,36 +51,33 @@ class TestPutConfigurationRecorder(unitt
         # Ensure the original argument was replaced with the updated argument.
         self.assertIn('configuration-recorder', self.argument_table)
         new_configuration_recorder_argument = self.argument_table[
-            'configuration-recorder']
+            'configuration-recorder'
+        ]
         self.assertIsNot(
             new_configuration_recorder_argument,
-            self.old_configuration_recorder_argument
+            self.old_configuration_recorder_argument,
         )
         self.assertIsInstance(
-            new_configuration_recorder_argument,
-            ConfigurationRecorderArgument
+            new_configuration_recorder_argument, ConfigurationRecorderArgument
         )
 
         # Ensure the recording group member was extracted to an argument
         self.assertIn('recording-group', self.argument_table)
         recording_group_argument = self.argument_table['recording-group']
-        self.assertIsInstance(
-            recording_group_argument,
-            RecordingGroupArgument
-        )
+        self.assertIsInstance(recording_group_argument, RecordingGroupArgument)
 
     def test_configuration_recorder_when_new_value(self):
         value = '{"name":"myname","roleARN":"myarn"}'
         parameters = {}
         extract_recording_group(self.session, self.argument_table)
         configuration_recorder_argument = self.argument_table[
-            'configuration-recorder']
+            'configuration-recorder'
+        ]
         configuration_recorder_argument.add_to_params(parameters, value)
         self.assertEqual(
-            {'ConfigurationRecorder': {
-                'name': 'myname',
-                'roleARN': 'myarn'}},
-            parameters)
+            {'ConfigurationRecorder': {'name': 'myname', 'roleARN': 'myarn'}},
+            parameters,
+        )
 
     def test_configuration_recorder_when_update_value(self):
         value = '{"name":"myname","roleARN":"myarn"}'
@@ -83,22 +85,28 @@ class TestPutConfigurationRecorder(unitt
             'ConfigurationRecorder': {
                 'recordingGroup': {
                     'allSupported': True,
-                    'resourceTypes': ['AWS::EC2::Volume']
+                    'resourceTypes': ['AWS::EC2::Volume'],
                 }
             }
         }
         extract_recording_group(self.session, self.argument_table)
         configuration_recorder_argument = self.argument_table[
-            'configuration-recorder']
+            'configuration-recorder'
+        ]
         configuration_recorder_argument.add_to_params(parameters, value)
         self.assertEqual(
-            {'ConfigurationRecorder': {
-                'name': 'myname',
-                'roleARN': 'myarn',
-                'recordingGroup': {
-                    'allSupported': True,
-                    'resourceTypes': ['AWS::EC2::Volume']}}},
-            parameters)
+            {
+                'ConfigurationRecorder': {
+                    'name': 'myname',
+                    'roleARN': 'myarn',
+                    'recordingGroup': {
+                        'allSupported': True,
+                        'resourceTypes': ['AWS::EC2::Volume'],
+                    },
+                }
+            },
+            parameters,
+        )
 
     def test_recording_group_when_new_value(self):
         value = '{"allSupported":true,"resourceTypes":["AWS::EC2::Volume"]}'
@@ -107,11 +115,16 @@ class TestPutConfigurationRecorder(unitt
         recording_group_argument = self.argument_table['recording-group']
         recording_group_argument.add_to_params(parameters, value)
         self.assertEqual(
-            {'ConfigurationRecorder': {
-                'recordingGroup': {
-                    'allSupported': True,
-                    'resourceTypes': ['AWS::EC2::Volume']}}},
-            parameters)
+            {
+                'ConfigurationRecorder': {
+                    'recordingGroup': {
+                        'allSupported': True,
+                        'resourceTypes': ['AWS::EC2::Volume'],
+                    }
+                }
+            },
+            parameters,
+        )
 
     def test_recording_group_when_update_value(self):
         value = '{"allSupported":true,"resourceTypes":["AWS::EC2::Volume"]}'
@@ -125,10 +138,15 @@ class TestPutConfigurationRecorder(unitt
         recording_group_argument = self.argument_table['recording-group']
         recording_group_argument.add_to_params(parameters, value)
         self.assertEqual(
-            {'ConfigurationRecorder': {
-                'name': 'myname',
-                'roleARN': 'myarn',
-                'recordingGroup': {
-                    'allSupported': True,
-                    'resourceTypes': ['AWS::EC2::Volume']}}},
-            parameters)
+            {
+                'ConfigurationRecorder': {
+                    'name': 'myname',
+                    'roleARN': 'myarn',
+                    'recordingGroup': {
+                        'allSupported': True,
+                        'resourceTypes': ['AWS::EC2::Volume'],
+                    },
+                }
+            },
+            parameters,
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/configservice/test_subscribe.py 2.31.35-1/tests/unit/customizations/configservice/test_subscribe.py
--- 2.23.6-1/tests/unit/customizations/configservice/test_subscribe.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configservice/test_subscribe.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,13 @@
 import botocore.session
 from botocore.exceptions import ClientError
 
-from awscli.testutils import mock, unittest
 from awscli.compat import StringIO
-from awscli.customizations.configservice.subscribe import SubscribeCommand, \
-    S3BucketHelper, SNSTopicHelper
+from awscli.customizations.configservice.subscribe import (
+    S3BucketHelper,
+    SNSTopicHelper,
+    SubscribeCommand,
+)
+from awscli.testutils import mock, unittest
 
 
 class TestS3BucketHelper(unittest.TestCase):
@@ -25,14 +28,10 @@ class TestS3BucketHelper(unittest.TestCa
         self.s3_client = mock.Mock(self.session.create_client('s3'))
         self.helper = S3BucketHelper(self.s3_client)
         self.error_response = {
-            'Error': {
-                'Code': '404',
-                'Message': 'Not Found'
-            }
+            'Error': {'Code': '404', 'Message': 'Not Found'}
         }
         self.bucket_no_exists_error = ClientError(
-            self.error_response,
-            'HeadBucket'
+            self.error_response, 'HeadBucket'
         )
 
     def test_correct_prefix_returned(self):
@@ -57,9 +56,7 @@ class TestS3BucketHelper(unittest.TestCa
         self.s3_client.meta.region_name = 'us-east-1'
         bucket, prefix = self.helper.prepare_bucket(name)
         # Ensure that the create bucket was called with the proper args.
-        self.s3_client.create_bucket.assert_called_with(
-            Bucket='MyBucket'
-        )
+        self.s3_client.create_bucket.assert_called_with(Bucket='MyBucket')
         # Ensure the returned bucket and key are as expected
         self.assertEqual(bucket, 'MyBucket')
         self.assertEqual(prefix, 'MyPrefix')
@@ -72,7 +69,7 @@ class TestS3BucketHelper(unittest.TestCa
         # Ensure that the create bucket was called with the proper args.
         self.s3_client.create_bucket.assert_called_with(
             Bucket='MyBucket',
-            CreateBucketConfiguration={'LocationConstraint': 'us-west-2'}
+            CreateBucketConfiguration={'LocationConstraint': 'us-west-2'},
         )
         # Ensure the returned bucket and key are as expected
         self.assertEqual(bucket, 'MyBucket')
@@ -98,8 +95,8 @@ class TestS3BucketHelper(unittest.TestCa
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             self.helper.prepare_bucket(name)
             self.assertIn(
-                'Using existing S3 bucket: MyBucket',
-                mock_stdout.getvalue())
+                'Using existing S3 bucket: MyBucket', mock_stdout.getvalue()
+            )
 
     def test_output_create_bucket(self):
         name = 'MyBucket/MyPrefix'
@@ -108,15 +105,16 @@ class TestS3BucketHelper(unittest.TestCa
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             self.helper.prepare_bucket(name)
             self.assertIn(
-                'Using new S3 bucket: MyBucket',
-                mock_stdout.getvalue())
+                'Using new S3 bucket: MyBucket', mock_stdout.getvalue()
+            )
 
 
 class TestSNSTopicHelper(unittest.TestCase):
     def setUp(self):
         self.session = botocore.session.get_session()
-        self.sns_client = mock.Mock(self.session.create_client(
-            'sns', 'us-east-1'))
+        self.sns_client = mock.Mock(
+            self.session.create_client('sns', 'us-east-1')
+        )
         self.helper = SNSTopicHelper(self.sns_client)
 
     def test_sns_topic_by_name(self):
@@ -139,17 +137,15 @@ class TestSNSTopicHelper(unittest.TestCa
         self.sns_client.create_topic.return_value = {'TopicArn': 'myARN'}
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             self.helper.prepare_topic(name)
-            self.assertIn(
-                'Using new SNS topic: myARN',
-                mock_stdout.getvalue())
+            self.assertIn('Using new SNS topic: myARN', mock_stdout.getvalue())
 
     def test_output_new_topic(self):
         name = 'arn:aws:sns:us-east-1:934212987125:config'
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             self.helper.prepare_topic(name)
             self.assertIn(
-                'Using existing SNS topic: %s' % name,
-                mock_stdout.getvalue())
+                'Using existing SNS topic: %s' % name, mock_stdout.getvalue()
+            )
 
 
 class TestSubscribeCommand(unittest.TestCase):
@@ -158,26 +154,31 @@ class TestSubscribeCommand(unittest.Test
 
         # Set up the client mocks.
         self.s3_client = mock.Mock(self.session.create_client('s3'))
-        self.sns_client = mock.Mock(self.session.create_client(
-            'sns', 'us-east-1'))
-        self.config_client = mock.Mock(self.session.create_client(
-            'config', 'us-east-1'))
-        self.config_client.describe_configuration_recorders.return_value = \
-            {'ConfigurationRecorders': []}
-        self.config_client.describe_delivery_channels.return_value = \
-            {'DeliveryChannels': []}
+        self.sns_client = mock.Mock(
+            self.session.create_client('sns', 'us-east-1')
+        )
+        self.config_client = mock.Mock(
+            self.session.create_client('config', 'us-east-1')
+        )
+        self.config_client.describe_configuration_recorders.return_value = {
+            'ConfigurationRecorders': []
+        }
+        self.config_client.describe_delivery_channels.return_value = {
+            'DeliveryChannels': []
+        }
 
         self.session = mock.Mock(self.session)
         self.session.create_client.side_effect = [
             self.s3_client,
             self.sns_client,
-            self.config_client
+            self.config_client,
         ]
 
         self.parsed_args = mock.Mock()
         self.parsed_args.s3_bucket = 'MyBucket/MyPrefix'
-        self.parsed_args.sns_topic = \
+        self.parsed_args.sns_topic = (
             'arn:aws:sns:us-east-1:934212987125:config'
+        )
         self.parsed_args.iam_role = 'arn:aws:iam::1234556789:role/config'
 
         self.parsed_globals = mock.Mock()
@@ -206,7 +207,7 @@ class TestSubscribeCommand(unittest.Test
             'config',
             verify=self.parsed_globals.verify_ssl,
             region_name=self.parsed_globals.region,
-            endpoint_url=self.parsed_globals.endpoint_url
+            endpoint_url=self.parsed_globals.endpoint_url,
         )
 
     def test_subscribe(self):
@@ -216,7 +217,7 @@ class TestSubscribeCommand(unittest.Test
         self.config_client.put_configuration_recorder.assert_called_with(
             ConfigurationRecorder={
                 'name': 'default',
-                'roleARN': self.parsed_args.iam_role
+                'roleARN': self.parsed_args.iam_role,
             }
         )
 
@@ -226,7 +227,7 @@ class TestSubscribeCommand(unittest.Test
                 'name': 'default',
                 's3BucketName': 'MyBucket',
                 'snsTopicARN': self.parsed_args.sns_topic,
-                's3KeyPrefix': 'MyPrefix'
+                's3KeyPrefix': 'MyPrefix',
             }
         )
 
diff -pruN 2.23.6-1/tests/unit/customizations/configure/__init__.py 2.31.35-1/tests/unit/customizations/configure/__init__.py
--- 2.23.6-1/tests/unit/customizations/configure/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,22 @@
 from botocore.exceptions import ProfileNotFound
 
 
-class FakeConfigStore(object):
+class FakeConfigStore:
     def set_config_provider(self, *args, **kwargs):
         pass
 
 
-class FakeSession(object):
-
-    def __init__(self, all_variables, profile_does_not_exist=False,
-                 config_file_vars=None, environment_vars=None,
-                 credentials=None, profile=None, available_profiles=None):
+class FakeSession:
+    def __init__(
+        self,
+        all_variables,
+        profile_does_not_exist=False,
+        config_file_vars=None,
+        environment_vars=None,
+        credentials=None,
+        profile=None,
+        available_profiles=None,
+    ):
         self.variables = all_variables
         self.profile_does_not_exist = profile_does_not_exist
         self.config = {}
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_addmodel.py 2.31.35-1/tests/unit/customizations/configure/test_addmodel.py
--- 2.23.6-1/tests/unit/customizations/configure/test_addmodel.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_addmodel.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,11 @@
 import json
 import os
 
-from botocore.session import get_session
 from botocore.loaders import Loader
+from botocore.session import get_session
 
 from awscli.customizations.configure.addmodel import get_model_location
-from awscli.testutils import unittest, FileCreator
+from awscli.testutils import FileCreator, unittest
 
 
 class TestGetModelLocation(unittest.TestCase):
@@ -36,7 +36,7 @@ class TestGetModelLocation(unittest.Test
 
         self.data_loader = Loader(
             [self.customer_data_root, self.builtin_data_root],
-            include_default_search_paths=False
+            include_default_search_paths=False,
         )
         self.data_loader.CUSTOMER_DATA_PATH = self.customer_data_root
         self.session.register_component('data_loader', self.data_loader)
@@ -50,25 +50,37 @@ class TestGetModelLocation(unittest.Test
         self.default_api_version = '2015-10-01'
 
         matching_service_path = os.path.join(
-            self.builtin_data_root, self.matching_service,
-            self.default_api_version, 'service-2.json'
+            self.builtin_data_root,
+            self.matching_service,
+            self.default_api_version,
+            'service-2.json',
         )
         os.makedirs(os.path.dirname(matching_service_path))
 
         non_matching_service_path = os.path.join(
-            self.builtin_data_root, self.non_matching_service,
-            self.default_api_version, 'service-2.json'
+            self.builtin_data_root,
+            self.non_matching_service,
+            self.default_api_version,
+            'service-2.json',
         )
         os.makedirs(os.path.dirname(non_matching_service_path))
 
         # Write the models to the builtin directory
         with open(matching_service_path, 'w') as f:
-            json.dump(self._create_service_definition(
-                self.matching_service, self.default_api_version), f)
+            json.dump(
+                self._create_service_definition(
+                    self.matching_service, self.default_api_version
+                ),
+                f,
+            )
 
         with open(non_matching_service_path, 'w') as f:
-            json.dump(self._create_service_definition(
-                self.non_matching_prefix, self.default_api_version), f)
+            json.dump(
+                self._create_service_definition(
+                    self.non_matching_prefix, self.default_api_version
+                ),
+                f,
+            )
 
     def tearDown(self):
         self.files.remove_all()
@@ -81,67 +93,106 @@ class TestGetModelLocation(unittest.Test
                 "endpointPrefix": endpoint_prefix,
             },
             "operations": {},
-            "shapes": {}
+            "shapes": {},
         }
 
     def test_get_model_location_for_matching_prefix_and_name(self):
         model_location = get_model_location(
-            self.session, self._create_service_definition(
-                self.matching_service, self.default_api_version))
+            self.session,
+            self._create_service_definition(
+                self.matching_service, self.default_api_version
+            ),
+        )
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                self.matching_service, self.default_api_version,
-                'service-2.json'), model_location)
+                self.matching_service,
+                self.default_api_version,
+                'service-2.json',
+            ),
+            model_location,
+        )
 
     def test_get_model_location_with_nonmatching_prefix_and_name(self):
         model_location = get_model_location(
-            self.session, self._create_service_definition(
-                self.non_matching_prefix, self.default_api_version))
+            self.session,
+            self._create_service_definition(
+                self.non_matching_prefix, self.default_api_version
+            ),
+        )
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                self.non_matching_service, self.default_api_version,
-                'service-2.json'), model_location)
+                self.non_matching_service,
+                self.default_api_version,
+                'service-2.json',
+            ),
+            model_location,
+        )
 
     def test_get_model_location_of_nonexistent_service(self):
         model_location = get_model_location(
-            self.session, self._create_service_definition(
-                'nonexistent', self.default_api_version))
+            self.session,
+            self._create_service_definition(
+                'nonexistent', self.default_api_version
+            ),
+        )
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                'nonexistent', self.default_api_version,
-                'service-2.json'), model_location)
+                'nonexistent',
+                self.default_api_version,
+                'service-2.json',
+            ),
+            model_location,
+        )
 
     def test_get_model_location_when_service_name_provided(self):
         model_location = get_model_location(
-            self.session, self._create_service_definition(
-                'nonexistent', self.default_api_version), 'override')
+            self.session,
+            self._create_service_definition(
+                'nonexistent', self.default_api_version
+            ),
+            'override',
+        )
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                'override', self.default_api_version,
-                'service-2.json'), model_location)
+                'override',
+                self.default_api_version,
+                'service-2.json',
+            ),
+            model_location,
+        )
 
     def test_get_model_location_with_non_v2(self):
         service_definition = self._create_service_definition(
-            'existent', self.default_api_version)
+            'existent', self.default_api_version
+        )
         service_definition['version'] = '3.0'
         model_location = get_model_location(self.session, service_definition)
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                'existent', self.default_api_version,
-                'service-3.json'), model_location)
+                'existent',
+                self.default_api_version,
+                'service-3.json',
+            ),
+            model_location,
+        )
 
     def test_get_model_location_with_missing_version(self):
         service_definition = self._create_service_definition(
-            'existent', self.default_api_version)
+            'existent', self.default_api_version
+        )
         service_definition.pop('version')
         model_location = get_model_location(self.session, service_definition)
         self.assertEqual(
             os.path.join(
                 self.data_loader.CUSTOMER_DATA_PATH,
-                'existent', self.default_api_version,
-                'service-2.json'), model_location)
+                'existent',
+                self.default_api_version,
+                'service-2.json',
+            ),
+            model_location,
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_configure.py 2.31.35-1/tests/unit/customizations/configure/test_configure.py
--- 2.23.6-1/tests/unit/customizations/configure/test_configure.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_configure.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,51 +12,58 @@
 # language governing permissions and limitations under the License.
 import os
 
-from awscli.customizations.configure import configure, ConfigValue, NOT_SET
-from awscli.customizations.configure import profile_to_section
-from awscli.testutils import mock, unittest
 from awscli.compat import StringIO
+from awscli.customizations.configure import (
+    NOT_SET,
+    ConfigValue,
+    configure,
+    profile_to_section,
+)
+from awscli.testutils import mock, unittest
 
 from . import FakeSession
 
 
 class TestConfigureCommand(unittest.TestCase):
-
     def setUp(self):
         self.writer = mock.Mock()
         self.global_args = mock.Mock()
         self.global_args.profile = None
         self.precanned = PrecannedPrompter(value='new_value')
         self.session = FakeSession({'config_file': 'myconfigfile'})
-        self.configure = configure.ConfigureCommand(self.session,
-                                                    prompter=self.precanned,
-                                                    config_writer=self.writer)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=self.precanned, config_writer=self.writer
+        )
 
     def assert_credentials_file_updated_with(self, new_values):
         called_args = self.writer.update_config.call_args_list
         credentials_file_call = called_args[0]
         expected_creds_file = os.path.expanduser('~/fake_credentials_filename')
-        self.assertEqual(credentials_file_call,
-                         mock.call(new_values, expected_creds_file))
+        self.assertEqual(
+            credentials_file_call, mock.call(new_values, expected_creds_file)
+        )
 
     def test_configure_command_sends_values_to_writer(self):
         self.configure(args=[], parsed_globals=self.global_args)
         # Credentials are always written to the shared credentials file.
         self.assert_credentials_file_updated_with(
-            {'aws_access_key_id': 'new_value',
-             'aws_secret_access_key': 'new_value'})
+            {
+                'aws_access_key_id': 'new_value',
+                'aws_secret_access_key': 'new_value',
+            }
+        )
 
         # Non-credentials config is written to the config file.
         self.writer.update_config.assert_called_with(
-            {'region': 'new_value',
-             'output': 'new_value'}, 'myconfigfile')
+            {'region': 'new_value', 'output': 'new_value'}, 'myconfigfile'
+        )
 
     def test_same_values_are_not_changed(self):
         # If the user enters the same value as the current value, we don't need
         # to write anything to the config.
-        self.configure = configure.ConfigureCommand(self.session,
-                                                    prompter=EchoPrompter(),
-                                                    config_writer=self.writer)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=EchoPrompter(), config_writer=self.writer
+        )
         self.configure(args=[], parsed_globals=self.global_args)
         self.assertFalse(self.writer.update_config.called)
 
@@ -66,9 +73,9 @@ class TestConfigureCommand(unittest.Test
         # to write anything out to the config.
         user_presses_enter = None
         precanned = PrecannedPrompter(value=user_presses_enter)
-        self.configure = configure.ConfigureCommand(self.session,
-                                                    prompter=precanned,
-                                                    config_writer=self.writer)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=precanned, config_writer=self.writer
+        )
         self.configure(args=[], parsed_globals=self.global_args)
         self.assertFalse(self.writer.update_config.called)
 
@@ -85,13 +92,15 @@ class TestConfigureCommand(unittest.Test
             "Default output format": "NEW OUTPUT FORMAT",
         }
         prompter = KeyValuePrompter(responses)
-        self.configure = configure.ConfigureCommand(self.session, prompter=prompter,
-                                                    config_writer=self.writer)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=prompter, config_writer=self.writer
+        )
         self.configure(args=[], parsed_globals=self.global_args)
 
         # We only need to write out the default output format.
         self.writer.update_config.assert_called_with(
-            {'output': 'NEW OUTPUT FORMAT'}, 'myconfigfile')
+            {'output': 'NEW OUTPUT FORMAT'}, 'myconfigfile'
+        )
 
     def test_section_name_can_be_changed_for_profiles(self):
         # If the user specifies a profile we need to write this out to
@@ -100,38 +109,131 @@ class TestConfigureCommand(unittest.Test
         self.configure(args=[], parsed_globals=self.global_args)
         # Note the __section__ key name.
         self.assert_credentials_file_updated_with(
-            {'aws_access_key_id': 'new_value',
-             'aws_secret_access_key': 'new_value',
-             '__section__': 'myname'})
+            {
+                'aws_access_key_id': 'new_value',
+                'aws_secret_access_key': 'new_value',
+                '__section__': 'myname',
+            }
+        )
         self.writer.update_config.assert_called_with(
-            {'__section__': 'profile myname',
-             'region': 'new_value',
-             'output': 'new_value'}, 'myconfigfile')
+            {
+                '__section__': 'profile myname',
+                'region': 'new_value',
+                'output': 'new_value',
+            },
+            'myconfigfile',
+        )
 
     def test_session_says_profile_does_not_exist(self):
         # Whenever you try to get a config value from botocore,
         # it will raise an exception complaining about ProfileNotFound.
         # We should handle this case, and write out a new profile section
         # in the config file.
-        session = FakeSession({'config_file': 'myconfigfile'},
-                              profile_does_not_exist=True,
-                              profile='profile-does-not-exist')
-        self.configure = configure.ConfigureCommand(session,
-                                                    prompter=self.precanned,
-                                                    config_writer=self.writer)
+        session = FakeSession(
+            {'config_file': 'myconfigfile'},
+            profile_does_not_exist=True,
+            profile='profile-does-not-exist',
+        )
+        self.configure = configure.ConfigureCommand(
+            session, prompter=self.precanned, config_writer=self.writer
+        )
         self.configure(args=[], parsed_globals=self.global_args)
         self.assert_credentials_file_updated_with(
-            {'aws_access_key_id': 'new_value',
-             'aws_secret_access_key': 'new_value',
-             '__section__': 'profile-does-not-exist'})
+            {
+                'aws_access_key_id': 'new_value',
+                'aws_secret_access_key': 'new_value',
+                '__section__': 'profile-does-not-exist',
+            }
+        )
         self.writer.update_config.assert_called_with(
-            {'__section__': 'profile profile-does-not-exist',
-             'region': 'new_value',
-             'output': 'new_value'}, 'myconfigfile')
+            {
+                '__section__': 'profile profile-does-not-exist',
+                'region': 'new_value',
+                'output': 'new_value',
+            },
+            'myconfigfile',
+        )
+
+    def test_temporary_credentials_prompts_for_session_token(self):
+        # When user enters temporary credentials (starting with ASIA),
+        # should prompt for session token after secret key
+        responses = {
+            "AWS Access Key ID": "ASIATEMP123456789",
+            "AWS Secret Access Key": "secret123",
+            "AWS Session Token": "session_token_123",
+            "Default region name": "us-west-2",
+            "Default output format": "json",
+        }
+        prompter = KeyValuePrompter(responses)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=prompter, config_writer=self.writer
+        )
+        self.configure(args=[], parsed_globals=self.global_args)
 
+        # Should write all three credential values to credentials file
+        self.assert_credentials_file_updated_with(
+            {
+                'aws_access_key_id': 'ASIATEMP123456789',
+                'aws_secret_access_key': 'secret123',
+                'aws_session_token': 'session_token_123',
+            }
+        )
 
-class TestInteractivePrompter(unittest.TestCase):
+        # Non-credentials config is written to the config file
+        self.writer.update_config.assert_called_with(
+            {'region': 'us-west-2', 'output': 'json'}, 'myconfigfile'
+        )
 
+    def test_regular_credentials_no_session_token_prompt(self):
+        # When user enters regular credentials (not starting with ASIA),
+        # should NOT prompt for session token
+        responses = {
+            "AWS Access Key ID": "AKIAREGULAR123456",
+            "AWS Secret Access Key": "secret123",
+            "Default region name": "us-west-2",
+            "Default output format": "json",
+        }
+        prompter = KeyValuePrompter(responses)
+        self.configure = configure.ConfigureCommand(
+            self.session, prompter=prompter, config_writer=self.writer
+        )
+        self.configure(args=[], parsed_globals=self.global_args)
+
+        # Should only write access key and secret key (no session token)
+        self.assert_credentials_file_updated_with(
+            {
+                'aws_access_key_id': 'AKIAREGULAR123456',
+                'aws_secret_access_key': 'secret123',
+            }
+        )
+
+    def test_iam_user_credentials_remove_session_token(self):
+        # When configuring IAM user credentials (AKIA), existing session token should be removed
+        session = FakeSession({'config_file': 'myconfigfile'})
+        session.config = {'aws_session_token': 'existing_token'}
+        responses = {
+            "AWS Access Key ID": "AKIAUSER123456789",
+            "AWS Secret Access Key": "secret123",
+            "Default region name": "us-west-2",
+            "Default output format": "json",
+        }
+        prompter = KeyValuePrompter(responses)
+        self.configure = configure.ConfigureCommand(
+            session, prompter=prompter, config_writer=self.writer
+        )
+        self.configure(args=[], parsed_globals=self.global_args)
+
+        # Should write credentials and remove session token (set to None)
+        self.assert_credentials_file_updated_with(
+            {
+                'aws_access_key_id': 'AKIAUSER123456789',
+                'aws_secret_access_key': 'secret123',
+                'aws_session_token': None,
+            }
+        )
+
+
+class TestInteractivePrompter(unittest.TestCase):
     def setUp(self):
         self.input_patch = mock.patch('awscli.compat.raw_input')
         self.mock_raw_input = self.input_patch.start()
@@ -147,8 +249,10 @@ class TestInteractivePrompter(unittest.T
         self.mock_raw_input.return_value = 'foo'
         prompter = configure.InteractivePrompter()
         response = prompter.get_value(
-            current_value='myaccesskey', config_name='aws_access_key_id',
-            prompt_text='Access key')
+            current_value='myaccesskey',
+            config_name='aws_access_key_id',
+            prompt_text='Access key',
+        )
         # First we should return the value from raw_input.
         self.assertEqual(response, 'foo')
         # We should also not display the entire access key.
@@ -160,8 +264,10 @@ class TestInteractivePrompter(unittest.T
         self.mock_raw_input.return_value = 'foo'
         prompter = configure.InteractivePrompter()
         response = prompter.get_value(
-            current_value=None, config_name='aws_access_key_id',
-            prompt_text='Access key')
+            current_value=None,
+            config_name='aws_access_key_id',
+            prompt_text='Access key',
+        )
         # First we should return the value from raw_input.
         self.assertEqual(response, 'foo')
         prompt_text = self.stdout.getvalue()
@@ -172,7 +278,8 @@ class TestInteractivePrompter(unittest.T
         prompter.get_value(
             current_value='mysupersecretkey',
             config_name='aws_secret_access_key',
-            prompt_text='Secret Key')
+            prompt_text='Secret Key',
+        )
         # We should also not display the entire secret key.
         prompt_text = self.stdout.getvalue()
         self.assertNotIn('mysupersecretkey', prompt_text)
@@ -181,21 +288,37 @@ class TestInteractivePrompter(unittest.T
     def test_non_secret_keys_are_not_masked(self):
         prompter = configure.InteractivePrompter()
         prompter.get_value(
-            current_value='mycurrentvalue', config_name='not_a_secret_key',
-            prompt_text='Enter value')
+            current_value='mycurrentvalue',
+            config_name='not_a_secret_key',
+            prompt_text='Enter value',
+        )
         # We should also not display the entire secret key.
         prompt_text = self.stdout.getvalue()
         self.assertIn('mycurrentvalue', prompt_text)
         self.assertRegex(prompt_text, r'\[mycurrentvalue\]')
 
+    def test_session_token_is_masked(self):
+        prompter = configure.InteractivePrompter()
+        prompter.get_value(
+            current_value='mysessiontoken123',
+            config_name='aws_session_token',
+            prompt_text='Session Token',
+        )
+        # Session token should be masked like other credentials
+        prompt_text = self.stdout.getvalue()
+        self.assertNotIn('mysessiontoken123', prompt_text)
+        self.assertRegex(prompt_text, r'\[\*\*\*\*.*\]')
+
     def test_user_hits_enter_returns_none(self):
         # If a user hits enter, then raw_input returns the empty string.
         self.mock_raw_input.return_value = ''
 
         prompter = configure.InteractivePrompter()
         response = prompter.get_value(
-            current_value=None, config_name='aws_access_key_id',
-            prompt_text='Access key')
+            current_value=None,
+            config_name='aws_access_key_id',
+            prompt_text='Access key',
+        )
         # We convert the empty string to None to indicate that there
         # was no input.
         self.assertIsNone(response)
@@ -211,22 +334,24 @@ class TestInteractivePrompter(unittest.T
 
         # Make sure flush called at least once
         prompter = configure.InteractivePrompter()
-        prompter.get_value(current_value='foo', config_name='bar',
-                           prompt_text='baz')
+        prompter.get_value(
+            current_value='foo', config_name='bar', prompt_text='baz'
+        )
         self.assertTrue(self.stdout.flush.called)
 
         # Make sure flush is called after *every* prompt
         self.stdout.reset_mock()
-        prompter.get_value(current_value='foo2', config_name='bar2',
-                           prompt_text='baz2')
+        prompter.get_value(
+            current_value='foo2', config_name='bar2', prompt_text='baz2'
+        )
         self.assertTrue(self.stdout.flush.called)
 
 
 class TestConfigValueMasking(unittest.TestCase):
-
     def test_config_value_is_masked(self):
         config_value = ConfigValue(
-            'fake_access_key', 'config_file', 'aws_access_key_id')
+            'fake_access_key', 'config_file', 'aws_access_key_id'
+        )
         self.assertEqual(config_value.value, 'fake_access_key')
         config_value.mask_value()
         self.assertEqual(config_value.value, '****************_key')
@@ -239,7 +364,6 @@ class TestConfigValueMasking(unittest.Te
 
 
 class TestProfileToSection(unittest.TestCase):
-
     def test_normal_profile(self):
         profile = 'my-profile'
         section = profile_to_section(profile)
@@ -266,8 +390,7 @@ class TestProfileToSection(unittest.Test
         self.assertEqual(profile, section)
 
 
-class PrecannedPrompter(object):
-
+class PrecannedPrompter:
     def __init__(self, value):
         self._value = value
 
@@ -275,14 +398,12 @@ class PrecannedPrompter(object):
         return self._value
 
 
-class EchoPrompter(object):
-
+class EchoPrompter:
     def get_value(self, current_value, logical_name, prompt_text=''):
         return current_value
 
 
-class KeyValuePrompter(object):
-
+class KeyValuePrompter:
     def __init__(self, mapping):
         self.mapping = mapping
 
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_exportcreds.py 2.31.35-1/tests/unit/customizations/configure/test_exportcreds.py
--- 2.23.6-1/tests/unit/customizations/configure/test_exportcreds.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_exportcreds.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,29 +10,28 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import json
 import io
+import json
 from datetime import datetime, timedelta
 
-from dateutil.tz import tzutc
 import pytest
-from botocore.credentials import RefreshableCredentials
 from botocore.credentials import Credentials as StaticCredentials
-from botocore.credentials import ReadOnlyCredentials
+from botocore.credentials import ReadOnlyCredentials, RefreshableCredentials
 from botocore.session import Session
+from dateutil.tz import tzutc
 
-from awscli.testutils import mock, unittest
-from awscli.customizations.exceptions import ConfigurationError
 from awscli.customizations.configure.exportcreds import (
-    Credentials,
-    convert_botocore_credentials,
-    ConfigureExportCredentialsCommand,
     BashEnvVarFormatter,
     BashNoExportEnvFormatter,
+    ConfigureExportCredentialsCommand,
+    CredentialProcessFormatter,
+    Credentials,
     PowershellFormatter,
     WindowsCmdFormatter,
-    CredentialProcessFormatter,
+    convert_botocore_credentials,
 )
+from awscli.customizations.exceptions import ConfigurationError
+from awscli.testutils import mock, unittest
 
 
 class JSONValue:
@@ -48,49 +47,83 @@ class JSONValue:
 
 
 @pytest.mark.parametrize(
-    'format_cls, expected', [
-        (BashEnvVarFormatter, (
-            ('export AWS_ACCESS_KEY_ID=access_key\n'
-             'export AWS_SECRET_ACCESS_KEY=secret_key\n'),
-            ('export AWS_ACCESS_KEY_ID=access_key\n'
-             'export AWS_SECRET_ACCESS_KEY=secret_key\n'
-             'export AWS_SESSION_TOKEN=token\n'
-             'export AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'),
-        )),
-        (BashNoExportEnvFormatter, (
-            ('AWS_ACCESS_KEY_ID=access_key\n'
-             'AWS_SECRET_ACCESS_KEY=secret_key\n'),
-            ('AWS_ACCESS_KEY_ID=access_key\n'
-             'AWS_SECRET_ACCESS_KEY=secret_key\n'
-             'AWS_SESSION_TOKEN=token\n'
-             'AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'),
-        )),
-        (PowershellFormatter, (
-            ('$Env:AWS_ACCESS_KEY_ID="access_key"\n'
-             '$Env:AWS_SECRET_ACCESS_KEY="secret_key"\n'),
-            ('$Env:AWS_ACCESS_KEY_ID="access_key"\n'
-             '$Env:AWS_SECRET_ACCESS_KEY="secret_key"\n'
-             '$Env:AWS_SESSION_TOKEN="token"\n'
-             '$Env:AWS_CREDENTIAL_EXPIRATION="2023-01-01T00:00:00Z"\n'),
-        )),
-        (WindowsCmdFormatter, (
-            ('set AWS_ACCESS_KEY_ID=access_key\n'
-             'set AWS_SECRET_ACCESS_KEY=secret_key\n'),
-            ('set AWS_ACCESS_KEY_ID=access_key\n'
-             'set AWS_SECRET_ACCESS_KEY=secret_key\n'
-             'set AWS_SESSION_TOKEN=token\n'
-             'set AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'),
-        )),
-        (CredentialProcessFormatter, (
-            JSONValue(
-                '{"Version": 1, "AccessKeyId": "access_key", '
-                '"SecretAccessKey": "secret_key"}'),
-            JSONValue(
-                '{"Version": 1, "AccessKeyId": "access_key", '
-                '"SecretAccessKey": "secret_key", "SessionToken": '
-                '"token", "Expiration": "2023-01-01T00:00:00Z"}'),
-        )),
-    ]
+    'format_cls, expected',
+    [
+        (
+            BashEnvVarFormatter,
+            (
+                (
+                    'export AWS_ACCESS_KEY_ID=access_key\n'
+                    'export AWS_SECRET_ACCESS_KEY=secret_key\n'
+                ),
+                (
+                    'export AWS_ACCESS_KEY_ID=access_key\n'
+                    'export AWS_SECRET_ACCESS_KEY=secret_key\n'
+                    'export AWS_SESSION_TOKEN=token\n'
+                    'export AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'
+                ),
+            ),
+        ),
+        (
+            BashNoExportEnvFormatter,
+            (
+                (
+                    'AWS_ACCESS_KEY_ID=access_key\n'
+                    'AWS_SECRET_ACCESS_KEY=secret_key\n'
+                ),
+                (
+                    'AWS_ACCESS_KEY_ID=access_key\n'
+                    'AWS_SECRET_ACCESS_KEY=secret_key\n'
+                    'AWS_SESSION_TOKEN=token\n'
+                    'AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'
+                ),
+            ),
+        ),
+        (
+            PowershellFormatter,
+            (
+                (
+                    '$Env:AWS_ACCESS_KEY_ID="access_key"\n'
+                    '$Env:AWS_SECRET_ACCESS_KEY="secret_key"\n'
+                ),
+                (
+                    '$Env:AWS_ACCESS_KEY_ID="access_key"\n'
+                    '$Env:AWS_SECRET_ACCESS_KEY="secret_key"\n'
+                    '$Env:AWS_SESSION_TOKEN="token"\n'
+                    '$Env:AWS_CREDENTIAL_EXPIRATION="2023-01-01T00:00:00Z"\n'
+                ),
+            ),
+        ),
+        (
+            WindowsCmdFormatter,
+            (
+                (
+                    'set AWS_ACCESS_KEY_ID=access_key\n'
+                    'set AWS_SECRET_ACCESS_KEY=secret_key\n'
+                ),
+                (
+                    'set AWS_ACCESS_KEY_ID=access_key\n'
+                    'set AWS_SECRET_ACCESS_KEY=secret_key\n'
+                    'set AWS_SESSION_TOKEN=token\n'
+                    'set AWS_CREDENTIAL_EXPIRATION=2023-01-01T00:00:00Z\n'
+                ),
+            ),
+        ),
+        (
+            CredentialProcessFormatter,
+            (
+                JSONValue(
+                    '{"Version": 1, "AccessKeyId": "access_key", '
+                    '"SecretAccessKey": "secret_key"}'
+                ),
+                JSONValue(
+                    '{"Version": 1, "AccessKeyId": "access_key", '
+                    '"SecretAccessKey": "secret_key", "SessionToken": '
+                    '"token", "Expiration": "2023-01-01T00:00:00Z"}'
+                ),
+            ),
+        ),
+    ],
 )
 def test_cred_formatter(format_cls, expected):
     stream = io.StringIO()
@@ -107,8 +140,7 @@ def test_cred_formatter(format_cls, expe
     stream.truncate(0)
     stream.seek(0)
     expiry = '2023-01-01T00:00:00Z'
-    temp_creds = Credentials(
-        'access_key', 'secret_key', 'token', expiry)
+    temp_creds = Credentials('access_key', 'secret_key', 'token', expiry)
     formatter.display_credentials(temp_creds)
     assert stream.getvalue() == expected_temporary
 
@@ -119,8 +151,9 @@ class TestCanConvertBotocoreCredentials(
             convert_botocore_credentials(
                 StaticCredentials('access_key', 'secret_key')
             ),
-            Credentials('access_key', 'secret_key', token=None,
-                        expiry_time=None)
+            Credentials(
+                'access_key', 'secret_key', token=None, expiry_time=None
+            ),
         )
 
     def test_can_convert_creds_with_token_and_no_expiry(self):
@@ -128,7 +161,7 @@ class TestCanConvertBotocoreCredentials(
             convert_botocore_credentials(
                 StaticCredentials('access_key', 'secret_key', 'token')
             ),
-            Credentials('access_key', 'secret_key', 'token', expiry_time=None)
+            Credentials('access_key', 'secret_key', 'token', expiry_time=None),
         )
 
     def test_can_convert_refreshable_with_expiry(self):
@@ -144,19 +177,23 @@ class TestCanConvertBotocoreCredentials(
                     method='explicit',
                 )
             ),
-            Credentials('access_key', 'secret_key', 'token',
-                        expiry_time=expiry.isoformat())
+            Credentials(
+                'access_key',
+                'secret_key',
+                'token',
+                expiry_time=expiry.isoformat(),
+            ),
         )
 
     def test_no_expiry_time_if_non_datetime_value(self):
         bad_creds = mock.Mock(spec=StaticCredentials)
         bad_creds.get_frozen_credentials.return_value = ReadOnlyCredentials(
-            'access_key', 'secret_key', 'token')
+            'access_key', 'secret_key', 'token'
+        )
         bad_creds._expiry_time = 'not a datetime'
         self.assertEqual(
             convert_botocore_credentials(bad_creds),
-            Credentials('access_key', 'secret_key', 'token',
-                        expiry_time=None)
+            Credentials('access_key', 'secret_key', 'token', expiry_time=None),
         )
 
 
@@ -169,7 +206,8 @@ class TestConfigureExportCredentialsComm
         self.os_env = {}
         self.session.get_config_variable.return_value = 'default'
         self.export_creds_cmd = ConfigureExportCredentialsCommand(
-            self.session, self.out_stream, self.err_stream, env=self.os_env)
+            self.session, self.out_stream, self.err_stream, env=self.os_env
+        )
         self.global_args = mock.Mock()
         self.expiry = '2023-01-01T00:00:00Z'
         self.creds = StaticCredentials('access_key', 'secret_key')
@@ -182,36 +220,35 @@ class TestConfigureExportCredentialsComm
             self.out_stream.getvalue(),
             JSONValue(
                 '{"Version": 1, "AccessKeyId": "access_key", '
-                '"SecretAccessKey": "secret_key"}')
+                '"SecretAccessKey": "secret_key"}'
+            ),
         )
 
     def test_can_export_creds_explicit_format(self):
         self.session.get_credentials.return_value = self.creds
         rc = self.export_creds_cmd(
-            args=['--format', 'env'],
-            parsed_globals=self.global_args)
+            args=['--format', 'env'], parsed_globals=self.global_args
+        )
         self.assertEqual(rc, 0)
         self.assertEqual(
             self.out_stream.getvalue(),
             'export AWS_ACCESS_KEY_ID=access_key\n'
-            'export AWS_SECRET_ACCESS_KEY=secret_key\n'
+            'export AWS_SECRET_ACCESS_KEY=secret_key\n',
         )
 
     def test_show_error_when_no_cred(self):
         self.session.get_credentials.return_value = None
         with pytest.raises(ConfigurationError) as excinfo:
             self.export_creds_cmd(args=[], parsed_globals=self.global_args)
-        self.assertIn(
-            'Unable to retrieve credentials', str(excinfo))
+        self.assertIn('Unable to retrieve credentials', str(excinfo))
 
     def test_show_error_when_cred_resolution_errors(self):
         self.session.get_credentials.side_effect = Exception(
-            "resolution failed")
+            "resolution failed"
+        )
         with pytest.raises(ConfigurationError) as excinfo:
             self.export_creds_cmd(args=[], parsed_globals=self.global_args)
-        self.assertIn(
-            'resolution failed', str(excinfo)
-        )
+        self.assertIn('resolution failed', str(excinfo))
 
     def test_can_detect_recursive_resolution(self):
         self.os_env['_AWS_CLI_PROFILE_CHAIN'] = 'default'
@@ -235,7 +272,8 @@ class TestConfigureExportCredentialsComm
             self.out_stream.getvalue(),
             JSONValue(
                 '{"Version": 1, "AccessKeyId": "access_key", '
-                '"SecretAccessKey": "secret_key"}')
+                '"SecretAccessKey": "secret_key"}'
+            ),
         )
 
     def test_nested_calls_with_cycle(self):
@@ -260,7 +298,8 @@ class TestConfigureExportCredentialsComm
             self.out_stream.getvalue(),
             JSONValue(
                 '{"Version": 1, "AccessKeyId": "access_key", '
-                '"SecretAccessKey": "secret_key"}')
+                '"SecretAccessKey": "secret_key"}'
+            ),
         )
 
     def test_detects_comma_char_with_cycle(self):
@@ -275,7 +314,8 @@ class TestConfigureExportCredentialsComm
         self.assertEqual(rc, 0)
         # Second time, it detects the cycle.
         second_invoke = ConfigureExportCredentialsCommand(
-            self.session, self.out_stream, self.err_stream, env=self.os_env)
+            self.session, self.out_stream, self.err_stream, env=self.os_env
+        )
         with pytest.raises(ConfigurationError) as excinfo:
             second_invoke(args=[], parsed_globals=self.global_args)
         self.assertIn(
@@ -286,7 +326,8 @@ class TestConfigureExportCredentialsComm
     def test_max_recursion_limit(self):
         self.session.get_credentials.return_value = self.creds
         self.os_env['_AWS_CLI_PROFILE_CHAIN'] = ','.join(
-            ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
+            ['a', 'b', 'c', 'd', 'e', 'f', 'g']
+        )
         with pytest.raises(ConfigurationError) as excinfo:
             self.export_creds_cmd(args=[], parsed_globals=self.global_args)
         self.assertIn(
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_get.py 2.31.35-1/tests/unit/customizations/configure/test_get.py
--- 2.23.6-1/tests/unit/customizations/configure/test_get.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_get.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
 from awscli.compat import StringIO
-
 from awscli.customizations.configure.get import ConfigureGetCommand
+from awscli.testutils import unittest
 
 from . import FakeSession
 
 
 class TestConfigureGetCommand(unittest.TestCase):
-
     def create_command(self, session):
         stdout = StringIO()
         stderr = StringIO()
@@ -55,8 +53,9 @@ class TestConfigureGetCommand(unittest.T
 
     def test_dotted_get_with_profile(self):
         session = FakeSession({})
-        session.full_config = {'profiles': {'emr-dev': {
-            'emr': {'instance_profile': 'my_ip'}}}}
+        session.full_config = {
+            'profiles': {'emr-dev': {'emr': {'instance_profile': 'my_ip'}}}
+        }
         session.config = {'emr': {'instance_profile': 'my_ip'}}
         stream, error_stream, config_get = self.create_command(session)
         config_get(args=['emr-dev.emr.instance_profile'], parsed_globals=None)
@@ -66,31 +65,35 @@ class TestConfigureGetCommand(unittest.T
     def test_get_from_profile(self):
         session = FakeSession({})
         session.full_config = {
-            'profiles': {'testing': {'aws_access_key_id': 'access_key'}}}
+            'profiles': {'testing': {'aws_access_key_id': 'access_key'}}
+        }
         stream, error_stream, config_get = self.create_command(session)
         config_get = ConfigureGetCommand(session, stream)
-        config_get(args=['profile.testing.aws_access_key_id'],
-                   parsed_globals=None)
+        config_get(
+            args=['profile.testing.aws_access_key_id'], parsed_globals=None
+        )
         rendered = stream.getvalue()
         self.assertEqual(rendered.strip(), 'access_key')
 
     def test_get_nested_attribute(self):
         session = FakeSession({})
         session.full_config = {
-            'profiles': {'testing': {'s3': {'signature_version': 's3v4'}}}}
+            'profiles': {'testing': {'s3': {'signature_version': 's3v4'}}}
+        }
         stream, error_stream, config_get = self.create_command(session)
-        config_get(args=['profile.testing.s3.signature_version'],
-                   parsed_globals=None)
+        config_get(
+            args=['profile.testing.s3.signature_version'], parsed_globals=None
+        )
         rendered = stream.getvalue()
         self.assertEqual(rendered.strip(), 's3v4')
 
     def test_get_nested_attribute_from_default(self):
         session = FakeSession({})
         session.full_config = {
-            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}}
+            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}
+        }
         stream, error_stream, config_get = self.create_command(session)
-        config_get(args=['default.s3.signature_version'],
-                   parsed_globals=None)
+        config_get(args=['default.s3.signature_version'], parsed_globals=None)
         rendered = stream.getvalue()
         self.assertEqual(rendered.strip(), 's3v4')
 
@@ -98,25 +101,25 @@ class TestConfigureGetCommand(unittest.T
         session = FakeSession({})
         session.full_config = {'profiles': {}}
         stream, error_stream, config_get = self.create_command(session)
-        config_get(args=['default.s3.signature_version'],
-                   parsed_globals=None)
+        config_get(args=['default.s3.signature_version'], parsed_globals=None)
         rendered = stream.getvalue()
         self.assertEqual(rendered.strip(), '')
 
     def test_get_nested_attribute_from_implicit_default(self):
         session = FakeSession({})
         session.full_config = {
-            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}}
+            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}
+        }
         stream, error_stream, config_get = self.create_command(session)
-        config_get(args=['s3.signature_version'],
-                   parsed_globals=None)
+        config_get(args=['s3.signature_version'], parsed_globals=None)
         rendered = stream.getvalue()
         self.assertEqual(rendered.strip(), 's3v4')
 
     def test_get_section_returns_error(self):
         session = FakeSession({})
         session.full_config = {
-            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}}
+            'profiles': {'default': {'s3': {'signature_version': 's3v4'}}}
+        }
         session.config = {'s3': {'signature_version': 's3v4'}}
         stream, error_stream, config_get = self.create_command(session)
         rc = config_get(args=['s3'], parsed_globals=None)
@@ -125,7 +128,8 @@ class TestConfigureGetCommand(unittest.T
         error_message = error_stream.getvalue()
         expected_message = (
             'varname (s3) must reference a value, not a section or '
-            'sub-section.')
+            'sub-section.'
+        )
         self.assertEqual(error_message, expected_message)
         self.assertEqual(stream.getvalue(), '')
 
@@ -133,8 +137,7 @@ class TestConfigureGetCommand(unittest.T
         # This should never happen, but we handle this case so we should
         # test it.
         session = FakeSession({})
-        session.full_config = {
-            'profiles': {'default': {'foo': object()}}}
+        session.full_config = {'profiles': {'default': {'foo': object()}}}
         stream, error_stream, config_get = self.create_command(session)
         rc = config_get(args=['foo'], parsed_globals=None)
         self.assertEqual(rc, 1)
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_importer.py 2.31.35-1/tests/unit/customizations/configure/test_importer.py
--- 2.23.6-1/tests/unit/customizations/configure/test_importer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_importer.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,16 +13,17 @@
 
 import os
 
-from . import FakeSession
-from awscli.testutils import mock, unittest
 from awscli.compat import StringIO
 from awscli.customizations.configure.importer import (
-    CredentialImporter,
     ConfigureImportCommand,
-    CSVCredentialParser,
+    CredentialImporter,
     CredentialParserError,
+    CSVCredentialParser,
 )
 from awscli.customizations.configure.writer import ConfigFileWriter
+from awscli.testutils import mock, unittest
+
+from . import FakeSession
 
 CSV_HEADERS = (
     'User name,Password,Access key ID,Secret access key,Console login link\n'
@@ -33,7 +34,8 @@ class TestConfigureImportCommand(unittes
     def setUp(self):
         self.session = FakeSession({'config_file': 'myconfigfile'})
         self.fake_credentials_filename = os.path.expanduser(
-            '~/fake_credentials_filename')
+            '~/fake_credentials_filename'
+        )
         self.session.profile = None
         self.mock_writer = mock.Mock(spec=ConfigFileWriter)
         self.importer = CredentialImporter(self.mock_writer)
@@ -49,7 +51,9 @@ class TestConfigureImportCommand(unittes
         update_args, _ = self.mock_writer.update_config.call_args
         self.assertEqual(update_args[0], profile)
         self.assertIn('/fake_credentials_filename', update_args[1])
-        self.assertIn('Successfully imported 1 profile', self.stdout.getvalue())
+        self.assertIn(
+            'Successfully imported 1 profile', self.stdout.getvalue()
+        )
 
     def test_import_downloaded_csv(self):
         row = 'PROFILENAME,PW,AKID,SAK,https://console.link\n'
@@ -80,13 +84,40 @@ class TestConfigureImportCommand(unittes
         )
         self.import_command(args=['--csv', content], parsed_globals=None)
         self.assertEqual(self.mock_writer.update_config.call_count, 2)
-        self.assertIn('Successfully imported 2 profile', self.stdout.getvalue())
+        self.assertIn(
+            'Successfully imported 2 profile', self.stdout.getvalue()
+        )
 
     def test_import_downloaded_bad_headers(self):
         content = 'User name,Secret access key\n'
         with self.assertRaises(CredentialParserError):
             self.import_command(args=['--csv', content], parsed_globals=None)
 
+    def test_raises_error_when_plain_file_path_passed(self):
+        with open('temp_creds.csv', 'w') as f:
+            f.write('User name,Access key ID,Secret access key\nuser,AKID,SAK')
+        try:
+            with self.assertRaises(ValueError) as cm:
+                self.import_command(args=['--csv', 'temp_creds.csv'], parsed_globals=None)
+            self.assertIn("without the 'file://' prefix", str(cm.exception))
+        finally:
+            os.remove('temp_creds.csv')
+
+    def test_inline_csv_succeeds(self):
+        csv_string = 'User name,Access key ID,Secret access key\nuser,AKID,SAK'
+        self.import_command(args=['--csv', csv_string], parsed_globals=None)
+        self.assertIn('Successfully imported 1 profile', self.stdout.getvalue())
+
+    def test_csv_content_from_file_succeeds(self):
+        with open('temp_creds.csv', 'w') as f:
+            f.write('User name,Access key ID,Secret access key\nuser,AKID,SAK')
+        try:
+            with open('temp_creds.csv', 'r') as f:
+                contents = f.read()
+            self.import_command(args=['--csv', contents], parsed_globals=None)
+            self.assertIn('Successfully imported 1 profile', self.stdout.getvalue())
+        finally:
+            os.remove('temp_creds.csv')
 
 class TestCSVCredentialParser(unittest.TestCase):
     def setUp(self):
@@ -110,7 +141,7 @@ class TestCSVCredentialParser(unittest.T
 
     def test_csv_parser_with_bom(self):
         contents = (
-            u'\ufeffUser name,Access key ID,Secret access key\n'
+            '\ufeffUser name,Access key ID,Secret access key\n'
             'PROFILENAME,AKID,SAK\n'
         )
         self.assert_parse_matches_expected(contents)
@@ -129,7 +160,7 @@ class TestCSVCredentialParser(unittest.T
 
     def test_csv_parser_multiple_entries_bom(self):
         contents = (
-            u'\ufeffUser name,Access key ID,Secret access key\n'
+            '\ufeffUser name,Access key ID,Secret access key\n'
             'PROFILENAME1,AKID1,SAK1\n'
             'PROFILENAME2,AKID2,SAK2\n'
         )
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_list.py 2.31.35-1/tests/unit/customizations/configure/test_list.py
--- 2.23.6-1/tests/unit/customizations/configure/test_list.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_list.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,74 +12,74 @@
 # language governing permissions and limitations under the License.
 from argparse import Namespace
 
-from awscli.testutils import mock, unittest
-from awscli.customizations.configure.list import ConfigureListCommand
 from awscli.compat import StringIO
+from awscli.customizations.configure.list import ConfigureListCommand
+from awscli.testutils import mock, unittest
 
 from . import FakeSession
 
 
 class TestConfigureListCommand(unittest.TestCase):
-
     def test_configure_list_command_nothing_set(self):
         # Test the case where the user only wants to change a single_value.
         session = FakeSession(
-            all_variables={'config_file': '/config/location'})
+            all_variables={'config_file': '/config/location'}
+        )
         session.full_config = {
-            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}}
+            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}
+        }
         stream = StringIO()
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=None)
         rendered = stream.getvalue()
-        self.assertRegex(rendered, r'profile\s+<not set>')
-        self.assertRegex(rendered, r'access_key\s+<not set>')
-        self.assertRegex(rendered, r'secret_key\s+<not set>')
-        self.assertRegex(rendered, r'region\s+<not set>')
+        self.assertRegex(rendered, r'profile\s+: <not set>')
+        self.assertRegex(rendered, r'access_key\s+: <not set>')
+        self.assertRegex(rendered, r'secret_key\s+: <not set>')
+        self.assertRegex(rendered, r'region\s+: <not set>')
 
     def test_configure_from_env(self):
-        env_vars = {
-            'profile': 'myprofilename'
-        }
+        env_vars = {'profile': 'myprofilename'}
         session = FakeSession(
             all_variables={'config_file': '/config/location'},
-            environment_vars=env_vars)
+            environment_vars=env_vars,
+        )
         session.session_var_map = {'profile': (None, "PROFILE_ENV_VAR")}
         session.full_config = {
-            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}}
+            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}
+        }
         stream = StringIO()
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=None)
         rendered = stream.getvalue()
         self.assertRegex(
-            rendered, r'profile\s+myprofilename\s+env\s+PROFILE_ENV_VAR')
+            rendered, r'profile\s+: myprofilename\s+: env\s+: PROFILE_ENV_VAR'
+        )
 
     def test_configure_from_config_file(self):
-        config_file_vars = {
-            'region': 'us-west-2'
-        }
+        config_file_vars = {'region': 'us-west-2'}
         session = FakeSession(
             all_variables={'config_file': '/config/location'},
-            config_file_vars=config_file_vars)
+            config_file_vars=config_file_vars,
+        )
         session.session_var_map = {'region': ('region', "AWS_DEFAULT_REGION")}
         session.full_config = {
-            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}}
+            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}
+        }
         stream = StringIO()
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=None)
         rendered = stream.getvalue()
         self.assertRegex(
-            rendered, r'region\s+us-west-2\s+config-file\s+/config/location')
+            rendered,
+            r'region\s+: us-west-2\s+: config-file\s+: /config/location',
+        )
 
     def test_configure_from_multiple_sources(self):
         # Here the profile is from an env var, the
         # region is from the config file, and the credentials
         # are from an iam-role.
-        env_vars = {
-            'profile': 'myprofilename'
-        }
-        config_file_vars = {
-            'region': 'us-west-2'
-        }
+        env_vars = {'profile': 'myprofilename'}
+        config_file_vars = {'region': 'us-west-2'}
         credentials = mock.Mock()
         credentials.access_key = 'access_key'
         credentials.secret_key = 'secret_key'
@@ -88,29 +88,34 @@ class TestConfigureListCommand(unittest.
             all_variables={'config_file': '/config/location'},
             environment_vars=env_vars,
             config_file_vars=config_file_vars,
-            credentials=credentials)
+            credentials=credentials,
+        )
         session.session_var_map = {
             'region': ('region', 'AWS_DEFAULT_REGION'),
-            'profile': ('profile', 'AWS_DEFAULT_PROFILE')}
+            'profile': ('profile', 'AWS_DEFAULT_PROFILE'),
+        }
         session.full_config = {
-            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}}
+            'profiles': {'default': {'region': 'AWS_DEFAULT_REGION'}}
+        }
         stream = StringIO()
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=None)
         rendered = stream.getvalue()
         # The profile came from an env var.
         self.assertRegex(
-            rendered, r'profile\s+myprofilename\s+env\s+AWS_DEFAULT_PROFILE')
+            rendered,
+            r'profile\s+: myprofilename\s+: env\s+: AWS_DEFAULT_PROFILE',
+        )
         # The region came from the config file.
         self.assertRegex(
-            rendered, r'region\s+us-west-2\s+config-file\s+/config/location')
+            rendered,
+            r'region\s+: us-west-2\s+: config-file\s+: /config/location',
+        )
         # The credentials came from an IAM role.  Note how we're
         # also checking that the access_key/secret_key are masked
         # with '*' chars except for the last 4 chars.
-        self.assertRegex(
-            rendered, r'access_key\s+\*+_key\s+iam-role')
-        self.assertRegex(
-            rendered, r'secret_key\s+\*+_key\s+iam-role')
+        self.assertRegex(rendered, r'access_key\s+: \*+_key\s+: iam-role')
+        self.assertRegex(rendered, r'secret_key\s+: \*+_key\s+: iam-role')
 
     def test_configure_region_from_imds(self):
         session = FakeSession(all_variables={'region': 'from-imds'})
@@ -118,22 +123,20 @@ class TestConfigureListCommand(unittest.
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=None)
         rendered = stream.getvalue()
-        self.assertRegex(rendered, r'region\s+from-imds\s+imds')
+        self.assertRegex(rendered, r'region\s+: from-imds\s+: imds')
 
     def test_configure_from_args(self):
         parsed_globals = Namespace(profile='foo')
-        env_vars = {
-            'profile': 'myprofilename'
-        }
+        env_vars = {'profile': 'myprofilename'}
         session = FakeSession(
             all_variables={'config_file': '/config/location'},
-            profile='foo', environment_vars=env_vars)
+            profile='foo',
+            environment_vars=env_vars,
+        )
         session.session_var_map = {'profile': (None, ['AWS_PROFILE'])}
-        session.full_config = {
-            'profiles': {'foo': {'region': 'AWS_REGION'}}}
+        session.full_config = {'profiles': {'foo': {'region': 'AWS_REGION'}}}
         stream = StringIO()
         self.configure_list = ConfigureListCommand(session, stream)
         self.configure_list(args=[], parsed_globals=parsed_globals)
         rendered = stream.getvalue()
-        self.assertRegex(
-            rendered, r'profile\s+foo\s+manual\s+--profile')
+        self.assertRegex(rendered, r'profile\s+: foo\s+: manual\s+: --profile')
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_listprofiles.py 2.31.35-1/tests/unit/customizations/configure/test_listprofiles.py
--- 2.23.6-1/tests/unit/customizations/configure/test_listprofiles.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_listprofiles.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,10 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from . import FakeSession
 from awscli.compat import StringIO
-from awscli.testutils import unittest
 from awscli.customizations.configure.listprofiles import ListProfilesCommand
+from awscli.testutils import unittest
+
+from . import FakeSession
 
 
 class TestListProfilesCommand(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_mfalogin.py 2.31.35-1/tests/unit/customizations/configure/test_mfalogin.py
--- 2.23.6-1/tests/unit/customizations/configure/test_mfalogin.py	1970-01-01 00:00:00.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_mfalogin.py	2025-11-12 19:17:29.000000000 +0000
@@ -0,0 +1,578 @@
+# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"). You
+# may not use this file except in compliance with the License. A copy of
+# the License is located at
+#
+#     http://aws.amazon.com/apache2.0/
+#
+# or in the "license" file accompanying this file. This file is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific
+# language governing permissions and limitations under the License.
+import datetime
+import os
+from unittest import mock
+
+import botocore.session
+from botocore.exceptions import ClientError, ProfileNotFound
+
+from awscli.customizations.configure.mfalogin import (
+    ConfigureMFALoginCommand,
+    InteractiveMFAPrompter,
+)
+from awscli.testutils import unittest
+
+
+class TestInteractiveMFAPrompter(unittest.TestCase):
+    def test_get_value_with_response(self):
+        prompter = InteractiveMFAPrompter()
+        # Mock the entire compat_input function, not just the return value
+        with mock.patch(
+            'awscli.customizations.configure.mfalogin.compat_input'
+        ) as mock_input:
+            mock_input.return_value = 'response'
+            self.assertEqual(
+                prompter.get_value('current', 'prompt'), 'response'
+            )
+
+    def test_get_value_with_no_response(self):
+        prompter = InteractiveMFAPrompter()
+        # Mock the entire compat_input function, not just the return value
+        with mock.patch(
+            'awscli.customizations.configure.mfalogin.compat_input'
+        ) as mock_input:
+            mock_input.return_value = ''
+            self.assertEqual(
+                prompter.get_value('current', 'prompt'), 'current'
+            )
+
+
+class TestConfigureMFALoginCommand(unittest.TestCase):
+    def setUp(self):
+        self.session = mock.Mock()
+        self.session.get_scoped_config.return_value = {}
+        self.session.get_credentials.return_value = mock.Mock()
+        # Add available_profiles to the session mock
+        self.session.available_profiles = ['default', 'test']
+        self.prompter = mock.Mock()
+        self.config_writer = mock.Mock()
+        self.command = ConfigureMFALoginCommand(
+            self.session,
+            prompter=self.prompter,
+            config_writer=self.config_writer,
+        )
+        self.parsed_args = mock.Mock()
+        self.parsed_args.profile = None
+        self.parsed_args.update_profile = None
+        self.parsed_args.duration_seconds = None
+        self.parsed_args.serial_number = None
+        self.parsed_globals = mock.Mock()
+        # Set profile in parsed_globals
+        self.parsed_globals.profile = 'default'
+
+    def test_no_credentials_found(self):
+        # Setup mock responses for interactive prompting
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key
+            'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',  # secret key
+            'arn:aws:iam::123456789012:mfa/user',  # MFA serial
+            '123456',  # MFA token
+        ]
+        self.prompter.get_value.return_value = 'session-test'  # profile name
+        
+        # Set session to return None credentials to trigger interactive prompting
+        self.session.get_credentials.return_value = None
+        
+        # Mock STS for the interactive prompting path
+        sts_client = mock.Mock()
+        sts_client.get_session_token.return_value = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'SESSION_TOKEN',
+                'Expiration': datetime.datetime(2023, 5, 19, 18, 6, 10),
+            }
+        }
+        
+        with mock.patch('botocore.session.Session') as mock_session_class:
+            mock_session_instance = mock.Mock()
+            mock_session_instance.create_client.return_value = sts_client
+            mock_session_class.return_value = mock_session_instance
+            
+            with mock.patch(
+                'sys.stdin.isatty', return_value=False
+            ):  # Non-interactive
+                with mock.patch('os.path.expanduser', return_value='/tmp/credentials'):
+                    with mock.patch('sys.stdout'):
+                        rc = self.command._run_main(
+                            self.parsed_args, self.parsed_globals
+                        )
+                        self.assertEqual(rc, 0)  # Should succeed via interactive prompting
+
+    def test_profile_not_found(self):
+        # Set profile to a non-existent profile
+        self.parsed_globals.profile = 'nonexistent'
+        
+        # Mock the session to have no credentials for the nonexistent profile
+        self.session.get_credentials.return_value = None
+        self.session.get_scoped_config.return_value = {}
+        
+        # Setup mock responses for interactive prompting since no credentials found
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key
+            'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',  # secret key
+            'arn:aws:iam::123456789012:mfa/user',  # MFA serial
+            '123456',  # MFA token
+        ]
+        self.prompter.get_value.return_value = 'session-test'  # profile name
+        
+        # Mock STS for the interactive prompting path
+        sts_client = mock.Mock()
+        sts_client.get_session_token.return_value = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'SESSION_TOKEN',
+                'Expiration': datetime.datetime(2023, 5, 19, 18, 6, 10),
+            }
+        }
+        
+        with mock.patch('botocore.session.Session') as mock_session_class:
+            mock_session_instance = mock.Mock()
+            mock_session_instance.create_client.return_value = sts_client
+            mock_session_class.return_value = mock_session_instance
+            
+            with mock.patch('os.path.expanduser', return_value='/tmp/credentials'):
+                with mock.patch('sys.stdout'):
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+                    # Should succeed via interactive prompting
+                    self.assertEqual(rc, 0)
+
+    def test_no_mfa_serial_provided(self):
+        # Mock botocore.session.Session
+        mock_session = mock.Mock()
+        mock_session.get_credentials.return_value = mock.Mock()
+        mock_session.get_scoped_config.return_value = {}
+        mock_session.available_profiles = ['default']
+
+        with mock.patch('botocore.session.Session', return_value=mock_session):
+            with mock.patch('sys.stdin.isatty', return_value=True):
+                self.prompter.get_credential_value.return_value = None
+                with mock.patch('sys.stderr') as mock_stderr:
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+                    self.assertEqual(rc, 1)
+                    mock_stderr.write.assert_called_with(
+                        "MFA serial number or MFA device ARN is required\n"
+                    )
+
+    def test_no_token_code_provided(self):
+        # Mock botocore.session.Session
+        mock_session = mock.Mock()
+        mock_session.get_credentials.return_value = mock.Mock()
+        mock_session.get_scoped_config.return_value = {}
+        mock_session.available_profiles = ['default']
+
+        with mock.patch('botocore.session.Session', return_value=mock_session):
+            with mock.patch('sys.stdin.isatty', return_value=True):
+                self.prompter.get_credential_value.side_effect = [
+                    'arn:aws:iam::123456789012:mfa/user',
+                    None,
+                ]
+                with mock.patch('sys.stderr') as mock_stderr:
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+                    self.assertEqual(rc, 1)
+                    mock_stderr.write.assert_called_with(
+                        "MFA token code is required\n"
+                    )
+
+    def test_sts_client_error(self):
+        self.session.get_scoped_config.return_value = {}
+
+        sts_client = mock.Mock()
+        sts_client.get_session_token.side_effect = ClientError(
+            {
+                'Error': {
+                    'Code': 'InvalidClientTokenId',
+                    'Message': 'Test error',
+                }
+            },
+            'GetSessionToken',
+        )
+        self.session.create_client.return_value = sts_client
+
+        self.prompter.get_credential_value.side_effect = [
+            'arn:aws:iam::123456789012:mfa/user',
+            '123456',
+        ]
+        self.prompter.get_value.return_value = 'session-test'
+
+        with mock.patch('sys.stderr') as mock_stderr:
+            rc = self.command._run_main(
+                self.parsed_args, self.parsed_globals
+            )
+            self.assertEqual(rc, 1)
+            mock_stderr.write.assert_called_with(
+                mock.ANY
+            )  # Just check it was called
+
+    def test_successful_mfa_login(self):
+        # Setup
+        self.parsed_args.duration_seconds = 43200
+        self.prompter.get_credential_value.side_effect = [
+            'arn:aws:iam::123456789012:mfa/user',
+            '123456',
+        ]
+        self.prompter.get_value.return_value = 'session-test'
+
+        expiration = datetime.datetime(2023, 5, 19, 18, 6, 10)
+        sts_response = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE',
+                'Expiration': expiration,
+            }
+        }
+
+        sts_client = mock.Mock()
+        sts_client.get_session_token.return_value = sts_response
+        self.session.create_client.return_value = sts_client
+
+        with mock.patch('sys.stdin.isatty', return_value=True):
+            with mock.patch(
+                'os.path.expanduser', return_value='/tmp/credentials'
+            ):
+                with mock.patch('sys.stdout'):
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+
+        # Verify
+        self.assertEqual(rc, 0)
+
+        # Check STS was called correctly
+        sts_client.get_session_token.assert_called_with(
+            DurationSeconds=43200,
+            SerialNumber='arn:aws:iam::123456789012:mfa/user',
+            TokenCode='123456',
+        )
+
+        # Check config writer was called correctly
+        expected_values = {
+            '__section__': 'session-test',
+            'aws_access_key_id': 'ASIAIOSFODNN7EXAMPLE',
+            'aws_secret_access_key': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+            'aws_session_token': 'AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE',
+        }
+
+        self.config_writer.update_config.assert_called_with(
+            expected_values, '/tmp/credentials'
+        )
+
+    def test_serial_number_from_parameter(self):
+        # Setup - use serial number from parameter
+        self.parsed_args.serial_number = (
+            'arn:aws:iam::123456789012:mfa/user-param'
+        )
+        self.parsed_args.duration_seconds = 43200
+
+        self.session.get_scoped_config.return_value = {
+            'mfa_serial': 'arn:aws:iam::123456789012:mfa/user-config'
+        }
+
+        sts_client = mock.Mock()
+        expiration = datetime.datetime(2023, 5, 19, 18, 6, 10)
+        sts_response = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'SESSION_TOKEN',
+                'Expiration': expiration,
+            }
+        }
+        sts_client.get_session_token.return_value = sts_response
+        self.session.create_client.return_value = sts_client
+
+        with mock.patch('sys.stdin.isatty', return_value=True):
+            self.prompter.get_credential_value.return_value = '123456'
+            self.prompter.get_value.return_value = 'session-test'
+            with mock.patch(
+                'os.path.expanduser', return_value='/tmp/credentials'
+            ):
+                with mock.patch('sys.stdout'):
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+
+        # Verify
+        self.assertEqual(rc, 0)
+
+        # Check that the parameter value was used instead of the config value
+        sts_client.get_session_token.assert_called_with(
+            DurationSeconds=43200,
+            SerialNumber='arn:aws:iam::123456789012:mfa/user-param',
+            TokenCode='123456',
+        )
+
+    def test_missing_default_profile_interactive(self):
+        """Test prompting for credentials when no default profile exists in interactive mode."""
+        self.parsed_globals.profile = None  # Use default profile
+        
+        # Set session to return None credentials to trigger interactive prompting
+        self.session.get_credentials.return_value = None
+
+        # Mock sys.stdin.isatty to return True (interactive)
+        with mock.patch('sys.stdin.isatty', return_value=True):
+            # Mock the _handle_interactive_prompting method
+            with mock.patch.object(
+                self.command,
+                '_handle_interactive_prompting',
+                return_value=0,
+            ) as mock_handle:
+                rc = self.command._run_main(
+                    self.parsed_args, self.parsed_globals
+                )
+
+                self.assertEqual(rc, 0)
+                mock_handle.assert_called_once_with(
+                    self.parsed_args, None
+                )
+
+    def test_missing_default_profile_non_interactive(self):
+        """Test error when no default profile exists in non-interactive mode."""
+        self.parsed_globals.profile = None  # Use default profile
+        
+        # Setup mock responses for interactive prompting
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key
+            'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',  # secret key
+            'arn:aws:iam::123456789012:mfa/user',  # MFA serial
+            '123456',  # MFA token
+        ]
+        self.prompter.get_value.return_value = 'session-test'  # profile name
+
+        # Set session to return None credentials to trigger interactive prompting
+        self.session.get_credentials.return_value = None
+        
+        # Mock STS for the interactive prompting path
+        sts_client = mock.Mock()
+        sts_client.get_session_token.return_value = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'SESSION_TOKEN',
+                'Expiration': datetime.datetime(2023, 5, 19, 18, 6, 10),
+            }
+        }
+        
+        with mock.patch('botocore.session.Session') as mock_session_class:
+            mock_session_instance = mock.Mock()
+            mock_session_instance.create_client.return_value = sts_client
+            mock_session_class.return_value = mock_session_instance
+            
+            with mock.patch('sys.stdin.isatty', return_value=False):
+                with mock.patch('os.path.expanduser', return_value='/tmp/credentials'):
+                    with mock.patch('sys.stdout'):
+                        rc = self.command._run_main(
+                            self.parsed_args, self.parsed_globals
+                        )
+
+                        self.assertEqual(rc, 0)  # Should succeed via interactive prompting
+
+    def test_handle_missing_default_profile_success(self):
+        """Test successful credential prompting and MFA login when no default profile exists."""
+        # Setup mock responses for prompting - now all via get_credential_value
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key
+            'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',  # secret key
+            'arn:aws:iam::123456789012:mfa/user',  # MFA serial
+            '123456',  # MFA token
+        ]
+        self.prompter.get_value.return_value = 'session-test'  # profile name
+
+        # Mock STS response
+        expiration = datetime.datetime(2023, 5, 19, 18, 6, 10)
+        sts_response = {
+            'Credentials': {
+                'AccessKeyId': 'ASIAIOSFODNN7EXAMPLE',
+                'SecretAccessKey': 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY',
+                'SessionToken': 'SESSION_TOKEN',
+                'Expiration': expiration,
+            }
+        }
+
+        # Mock botocore session and STS client
+        mock_session = mock.Mock()
+        sts_client = mock.Mock()
+        sts_client.get_session_token.return_value = sts_response
+        mock_session.create_client.return_value = sts_client
+
+        with mock.patch('botocore.session.Session', return_value=mock_session):
+            with mock.patch(
+                'os.path.expanduser', return_value='/tmp/credentials'
+            ):
+                with mock.patch('sys.stdout'):
+                    rc = self.command._handle_interactive_prompting(
+                        self.parsed_args, 43200
+                    )
+
+        # Verify success
+        self.assertEqual(rc, 0)
+
+        # Verify STS call
+        sts_client.get_session_token.assert_called_with(
+            DurationSeconds=43200,
+            SerialNumber='arn:aws:iam::123456789012:mfa/user',
+            TokenCode='123456',
+        )
+
+        # Verify only the session profile was written
+        self.assertEqual(self.config_writer.update_config.call_count, 1)
+
+    def test_handle_missing_default_profile_missing_access_key(self):
+        """Test error when access key is not provided."""
+        self.prompter.get_credential_value.return_value = (
+            None  # No access key provided
+        )
+
+        with mock.patch('sys.stderr') as mock_stderr:
+            rc = self.command._handle_interactive_prompting(
+                self.parsed_args, 43200
+            )
+
+            self.assertEqual(rc, 1)
+            mock_stderr.write.assert_called_with(
+                "AWS Access Key ID is required\n"
+            )
+
+    def test_handle_missing_default_profile_missing_secret_key(self):
+        """Test error when secret key is not provided."""
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key provided
+            None,  # secret key not provided
+        ]
+
+        with mock.patch('sys.stderr') as mock_stderr:
+            rc = self.command._handle_interactive_prompting(
+                self.parsed_args, 43200
+            )
+
+            self.assertEqual(rc, 1)
+            mock_stderr.write.assert_called_with(
+                "AWS Secret Access Key is required\n"
+            )
+
+    def test_credential_value_prompting_clean_display(self):
+        """Test that credential prompting doesn't show default values."""
+        prompter = InteractiveMFAPrompter()
+        with mock.patch(
+            'awscli.customizations.configure.mfalogin.compat_input'
+        ) as mock_input:
+            mock_input.return_value = 'test-value'
+            result = prompter.get_credential_value(
+                'None', 'aws_access_key_id', 'AWS Access Key ID'
+            )
+
+            # Verify the prompt doesn't show [None] or any default value
+            mock_input.assert_called_with('AWS Access Key ID: ')
+            self.assertEqual(result, 'test-value')
+
+    def test_handle_missing_default_profile_sts_error(self):
+        """Test STS error handling in missing default profile scenario."""
+        self.prompter.get_credential_value.side_effect = [
+            'AKIAIOSFODNN7EXAMPLE',  # access key
+            'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',  # secret key
+            'arn:aws:iam::123456789012:mfa/user',  # MFA serial
+            '123456',  # MFA token
+        ]
+        self.prompter.get_value.return_value = 'session-test'  # profile name
+
+        # Mock STS client to raise an error
+        mock_session = mock.Mock()
+        sts_client = mock.Mock()
+        sts_client.get_session_token.side_effect = ClientError(
+            {
+                'Error': {
+                    'Code': 'InvalidClientTokenId',
+                    'Message': 'Invalid credentials',
+                }
+            },
+            'GetSessionToken',
+        )
+        mock_session.create_client.return_value = sts_client
+
+        with mock.patch('botocore.session.Session', return_value=mock_session):
+            with mock.patch('sys.stderr') as mock_stderr:
+                rc = self.command._handle_interactive_prompting(
+                    self.parsed_args, 43200
+                )
+
+                self.assertEqual(rc, 1)
+                # Verify error message was written
+                mock_stderr.write.assert_called()
+                self.assertIn(
+                    'An error occurred', str(mock_stderr.write.call_args)
+                )
+
+    def test_non_interactive_missing_mfa_serial(self):
+        """Test non-interactive mode when MFA serial is missing."""
+        mock_session = mock.Mock()
+        mock_session.get_credentials.return_value = mock.Mock()
+        mock_session.get_scoped_config.return_value = {}  # No mfa_serial in config
+        mock_session.available_profiles = ['default']
+
+        with mock.patch('botocore.session.Session', return_value=mock_session):
+            with mock.patch(
+                'sys.stdin.isatty', return_value=False
+            ):  # Non-interactive
+                self.prompter.get_credential_value.return_value = None
+                with mock.patch('sys.stderr') as mock_stderr:
+                    rc = self.command._run_main(
+                        self.parsed_args, self.parsed_globals
+                    )
+
+                    self.assertEqual(rc, 1)
+                    mock_stderr.write.assert_called_with(
+                        "MFA serial number or MFA device ARN is required\n"
+                    )
+
+    def test_non_interactive_missing_token_code(self):
+        """Test non-interactive mode when token code would be prompted."""
+        self.session.get_scoped_config.return_value = {
+            'mfa_serial': 'arn:aws:iam::123456789012:mfa/user'
+        }
+
+        with mock.patch(
+            'sys.stdin.isatty', return_value=False
+        ):  # Non-interactive
+            self.prompter.get_credential_value.return_value = None
+            with mock.patch('sys.stderr') as mock_stderr:
+                rc = self.command._run_main(
+                    self.parsed_args, self.parsed_globals
+                )
+
+                self.assertEqual(rc, 1)
+                mock_stderr.write.assert_called_with(
+                    "MFA token code is required\n"
+                )
+
+    def test_empty_credential_input_handling(self):
+        """Test handling of empty credential inputs."""
+        self.prompter.get_credential_value.return_value = ''  # Empty string
+
+        with mock.patch('sys.stderr') as mock_stderr:
+            rc = self.command._handle_interactive_prompting(
+                self.parsed_args, 43200
+            )
+
+            self.assertEqual(rc, 1)
+            mock_stderr.write.assert_called_with(
+                "AWS Access Key ID is required\n"
+            )
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_set.py 2.31.35-1/tests/unit/customizations/configure/test_set.py
--- 2.23.6-1/tests/unit/customizations/configure/test_set.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_set.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,142 +14,157 @@ import os
 
 from awscli.customizations.configure.set import ConfigureSetCommand
 from awscli.testutils import mock, unittest
+
 from . import FakeSession
 
 
 class TestConfigureSetCommand(unittest.TestCase):
-
     def setUp(self):
         self.session = FakeSession({'config_file': 'myconfigfile'})
         self.fake_credentials_filename = os.path.expanduser(
-            '~/fake_credentials_filename')
+            '~/fake_credentials_filename'
+        )
         self.session.profile = None
         self.config_writer = mock.Mock()
 
     def test_configure_set_command(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(args=['region', 'us-west-2'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'default', 'region': 'us-west-2'}, 'myconfigfile')
+            {'__section__': 'default', 'region': 'us-west-2'}, 'myconfigfile'
+        )
 
     def test_configure_set_command_dotted(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(args=['plugins.foo', 'true'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'plugins', 'foo': 'true'}, 'myconfigfile')
+            {'__section__': 'plugins', 'foo': 'true'}, 'myconfigfile'
+        )
 
     def test_configure_set_command_dotted_with_default_profile(self):
         self.session.variables['profile'] = 'default'
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(
-            args=['emr.instance_profile', 'my_ip_emr'], parsed_globals=None)
+            args=['emr.instance_profile', 'my_ip_emr'], parsed_globals=None
+        )
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'default',
-             'emr': {'instance_profile': 'my_ip_emr'}}, 'myconfigfile')
+            {
+                '__section__': 'default',
+                'emr': {'instance_profile': 'my_ip_emr'},
+            },
+            'myconfigfile',
+        )
 
     def test_configure_set_handles_predefined_plugins_section(self):
         self.session.variables['profile'] = 'default'
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(
-            args=['plugins.foo', 'mypackage'], parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(args=['plugins.foo', 'mypackage'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'plugins',
-             'foo': 'mypackage'}, 'myconfigfile')
+            {'__section__': 'plugins', 'foo': 'mypackage'}, 'myconfigfile'
+        )
 
     def test_configure_set_command_dotted_with_profile(self):
         self.session.profile = 'emr-dev'
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(
-            args=['emr.instance_profile', 'my_ip_emr'], parsed_globals=None)
+            args=['emr.instance_profile', 'my_ip_emr'], parsed_globals=None
+        )
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'profile emr-dev', 'emr':
-                {'instance_profile': 'my_ip_emr'}}, 'myconfigfile')
+            {
+                '__section__': 'profile emr-dev',
+                'emr': {'instance_profile': 'my_ip_emr'},
+            },
+            'myconfigfile',
+        )
 
     def test_configure_set_with_profile(self):
         self.session.profile = 'testing'
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(args=['region', 'us-west-2'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
             {'__section__': 'profile testing', 'region': 'us-west-2'},
-            'myconfigfile')
+            'myconfigfile',
+        )
 
     def test_configure_set_triple_dotted(self):
         # aws configure set default.s3.signature_version s3v4
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['default.s3.signature_version', 's3v4'],
-                    parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(
+            args=['default.s3.signature_version', 's3v4'], parsed_globals=None
+        )
         self.config_writer.update_config.assert_called_with(
             {'__section__': 'default', 's3': {'signature_version': 's3v4'}},
-            'myconfigfile')
+            'myconfigfile',
+        )
 
     def test_configure_set_with_profile_nested(self):
         # aws configure set default.s3.signature_version s3v4
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['profile.foo.s3.signature_version', 's3v4'],
-                    parsed_globals=None)
-        self.config_writer.update_config.assert_called_with(
-            {'__section__': 'profile foo',
-             's3': {'signature_version': 's3v4'}}, 'myconfigfile')
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(
+            args=['profile.foo.s3.signature_version', 's3v4'],
+            parsed_globals=None,
+        )
+        self.config_writer.update_config.assert_called_with(
+            {
+                '__section__': 'profile foo',
+                's3': {'signature_version': 's3v4'},
+            },
+            'myconfigfile',
+        )
 
     def test_access_key_written_to_shared_credentials_file(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['aws_access_key_id', 'foo'],
-                    parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(args=['aws_access_key_id', 'foo'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'default',
-             'aws_access_key_id': 'foo'}, self.fake_credentials_filename)
+            {'__section__': 'default', 'aws_access_key_id': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_secret_key_written_to_shared_credentials_file(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['aws_secret_access_key', 'foo'],
-                    parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(args=['aws_secret_access_key', 'foo'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'default',
-             'aws_secret_access_key': 'foo'}, self.fake_credentials_filename)
+            {'__section__': 'default', 'aws_secret_access_key': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_session_token_written_to_shared_credentials_file(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['aws_session_token', 'foo'],
-                    parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(args=['aws_session_token', 'foo'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'default',
-             'aws_session_token': 'foo'}, self.fake_credentials_filename)
+            {'__section__': 'default', 'aws_session_token': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_access_key_written_to_shared_credentials_file_profile(self):
-        set_command = ConfigureSetCommand(
-            self.session, self.config_writer)
-        set_command(args=['profile.foo.aws_access_key_id', 'bar'],
-                    parsed_globals=None)
+        set_command = ConfigureSetCommand(self.session, self.config_writer)
+        set_command(
+            args=['profile.foo.aws_access_key_id', 'bar'], parsed_globals=None
+        )
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'foo',
-             'aws_access_key_id': 'bar'}, self.fake_credentials_filename)
+            {'__section__': 'foo', 'aws_access_key_id': 'bar'},
+            self.fake_credentials_filename,
+        )
 
     def test_credential_set_profile_with_space(self):
         self.session.profile = 'some profile'
         set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(args=['aws_session_token', 'foo'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'some profile',
-             'aws_session_token': 'foo'}, self.fake_credentials_filename)
+            {'__section__': 'some profile', 'aws_session_token': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_credential_set_profile_with_space_dotted(self):
         set_command = ConfigureSetCommand(self.session, self.config_writer)
-        set_command(args=['profile.some profile.aws_session_token', 'foo'],
-                    parsed_globals=None)
-        self.config_writer.update_config.assert_called_with(
-            {'__section__': 'some profile',
-             'aws_session_token': 'foo'}, self.fake_credentials_filename)
+        set_command(
+            args=['profile.some profile.aws_session_token', 'foo'],
+            parsed_globals=None,
+        )
+        self.config_writer.update_config.assert_called_with(
+            {'__section__': 'some profile', 'aws_session_token': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_configure_set_with_profile_with_space(self):
         self.session.profile = 'some profile'
@@ -157,28 +172,36 @@ class TestConfigureSetCommand(unittest.T
         set_command(args=['region', 'us-west-2'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
             {'__section__': "profile 'some profile'", 'region': 'us-west-2'},
-            'myconfigfile')
+            'myconfigfile',
+        )
 
     def test_configure_set_with_profile_with_space_dotted(self):
         set_command = ConfigureSetCommand(self.session, self.config_writer)
-        set_command(args=['profile.some profile.region', 'us-west-2'],
-                    parsed_globals=None)
+        set_command(
+            args=['profile.some profile.region', 'us-west-2'],
+            parsed_globals=None,
+        )
         self.config_writer.update_config.assert_called_with(
             {'__section__': "profile 'some profile'", 'region': 'us-west-2'},
-            'myconfigfile')
+            'myconfigfile',
+        )
 
     def test_credential_set_profile_with_tab(self):
         self.session.profile = 'some\tprofile'
         set_command = ConfigureSetCommand(self.session, self.config_writer)
         set_command(args=['aws_session_token', 'foo'], parsed_globals=None)
         self.config_writer.update_config.assert_called_with(
-            {'__section__': 'some\tprofile',
-             'aws_session_token': 'foo'}, self.fake_credentials_filename)
+            {'__section__': 'some\tprofile', 'aws_session_token': 'foo'},
+            self.fake_credentials_filename,
+        )
 
     def test_configure_set_with_profile_with_tab_dotted(self):
         set_command = ConfigureSetCommand(self.session, self.config_writer)
-        set_command(args=['profile.some\tprofile.region', 'us-west-2'],
-                    parsed_globals=None)
+        set_command(
+            args=['profile.some\tprofile.region', 'us-west-2'],
+            parsed_globals=None,
+        )
         self.config_writer.update_config.assert_called_with(
             {'__section__': "profile 'some\tprofile'", 'region': 'us-west-2'},
-            'myconfigfile')
+            'myconfigfile',
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_sso.py 2.31.35-1/tests/unit/customizations/configure/test_sso.py
--- 2.23.6-1/tests/unit/customizations/configure/test_sso.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_sso.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,34 +14,37 @@ import argparse
 import dataclasses
 import json
 import typing
-
 from datetime import datetime, timedelta
 
 import prompt_toolkit
 import pytest
+from botocore.stub import Stubber
 from dateutil.tz import tzlocal
-
 from prompt_toolkit import prompt as ptk_prompt
 from prompt_toolkit.document import Document
-from prompt_toolkit.validation import Validator
-from prompt_toolkit.validation import DummyValidator
-from prompt_toolkit.validation import ValidationError
-
-from botocore.stub import Stubber
-
-from awscli.testutils import mock, unittest
-from awscli.customizations.configure.sso import display_account
-from awscli.customizations.configure.sso import PTKPrompt
-from awscli.customizations.configure.sso import SSOSessionConfigurationPrompter
-from awscli.customizations.configure.sso import ConfigureSSOCommand
-from awscli.customizations.configure.sso import ConfigureSSOSessionCommand
-from awscli.customizations.configure.sso import StartUrlValidator
-from awscli.customizations.configure.sso import RequiredInputValidator
-from awscli.customizations.configure.sso import ScopesValidator
-from awscli.customizations.sso.utils import parse_sso_registration_scopes
-from awscli.customizations.sso.utils import do_sso_login, PrintOnlyHandler
+from prompt_toolkit.validation import (
+    DummyValidator,
+    ValidationError,
+    Validator,
+)
+
+from awscli.customizations.configure.sso import (
+    ConfigureSSOCommand,
+    ConfigureSSOSessionCommand,
+    PTKPrompt,
+    RequiredInputValidator,
+    ScopesValidator,
+    SSOSessionConfigurationPrompter,
+    StartUrlValidator,
+    display_account,
+)
+from awscli.customizations.sso.utils import (
+    PrintOnlyHandler,
+    do_sso_login,
+    parse_sso_registration_scopes,
+)
 from awscli.formatter import CLI_OUTPUT_FORMATS
-
+from awscli.testutils import mock, unittest
 from tests import StubbedSession
 
 
@@ -674,21 +677,22 @@ class SessionWithDefaultPrompt(PromptWit
 @dataclasses.dataclass
 class RegionPrompt(PromptWithDefault):
     msg_format: str = dataclasses.field(
-        init=False, default="CLI default client Region [{default}]: "
+        init=False, default="Default client Region [{default}]: "
     )
 
 
 @dataclasses.dataclass
 class OutputPrompt(PromptWithDefault):
     msg_format: str = dataclasses.field(
-        init=False, default="CLI default output format [{default}]: "
+        init=False,
+        default="CLI default output format (json if not specified) [{default}]: ",
     )
 
 
 @dataclasses.dataclass
 class ProfilePrompt(PromptWithDefault):
     msg_format: str = dataclasses.field(
-        init=False, default="CLI profile name [{default}]: "
+        init=False, default="Profile name [{default}]: "
     )
     expected_validator_cls: typing.Optional[Validator] = RequiredInputValidator
 
@@ -815,7 +819,7 @@ def write_aws_config(aws_config, lines):
 
 
 def assert_aws_config(aws_config, expected_lines):
-    with open(aws_config, "r") as f:
+    with open(aws_config) as f:
         assert f.read().splitlines() == expected_lines
 
 
@@ -902,7 +906,10 @@ class TestConfigureSSOCommand:
         )
         stdout = capsys.readouterr().out
         assert "WARNING: Configuring using legacy format" in stdout
-        assert f"aws s3 ls --profile {inputs.profile_prompt.answer}" in stdout
+        assert (
+            f"aws sts get-caller-identity --profile {inputs.profile_prompt.answer}"
+            in stdout
+        )
 
     def test_single_account_single_role_flow_no_browser(
         self,
@@ -1099,10 +1106,11 @@ class TestConfigureSSOCommand:
             expected_sso_region=inputs.sso_region_prompt.answer,
             expected_start_url=inputs.start_url_prompt.answer,
         )
+
         assert_aws_config(
             aws_config,
             expected_lines=[
-                f"[profile new-profile]",
+                "[profile new-profile]",
                 f"sso_start_url = {inputs.start_url_prompt.answer}",
                 f"sso_region = {inputs.sso_region_prompt.answer}",
                 f"sso_account_id = {account_id}",
@@ -1235,7 +1243,10 @@ class TestConfigureSSOCommand:
         )
         stdout = capsys.readouterr().out
         assert "WARNING: Configuring using legacy format" not in stdout
-        assert f"aws s3 ls --profile {inputs.profile_prompt.answer}" in stdout
+        assert (
+            f"aws sts get-caller-identity --profile {inputs.profile_prompt.answer}"
+            in stdout
+        )
 
     def test_configure_sso_with_existing_sso_session(
         self,
@@ -1514,6 +1525,54 @@ class TestConfigureSSOCommand:
         )
 
 
+class TestPrintConclusion:
+    def test_print_conclusion_default_profile_with_credentials(
+        self, sso_cmd, capsys
+    ):
+        sso_cmd._print_conclusion(True, 'default')
+        captured = capsys.readouterr()
+        assert (
+            "The AWS CLI is now configured to use the default profile."
+            in captured.out
+        )
+        assert "aws sts get-caller-identity" in captured.out
+
+    def test_print_conclusion_named_profile_with_credentials(
+        self, sso_cmd, capsys
+    ):
+        profile_name = "test-profile"
+        sso_cmd._print_conclusion(True, profile_name)
+        captured = capsys.readouterr()
+        assert (
+            "To use this profile, specify the profile name using --profile"
+            in captured.out
+        )
+        assert (
+            f"aws sts get-caller-identity --profile {profile_name}"
+            in captured.out
+        )
+
+    def test_print_conclusion_sso_configuration(self, sso_cmd, capsys):
+        profile_name = "test-profile"
+        sso_cmd._print_conclusion(False, profile_name)
+        captured = capsys.readouterr()
+        assert (
+            f"Successfully configured SSO for profile: {profile_name}"
+            in captured.out
+        )
+
+    def test_print_conclusion_default_profile_case_insensitive(
+        selfself, sso_cmd, capsys
+    ):
+        sso_cmd._print_conclusion(True, 'DEFAULT')
+        captured = capsys.readouterr()
+        assert (
+            "The AWS CLI is now configured to use the default profile."
+            in captured.out
+        )
+        assert "aws sts get-caller-identity" in captured.out
+
+
 class TestConfigureSSOSessionCommand:
     def test_new_sso_session(
         self,
@@ -1588,7 +1647,8 @@ class TestConfigureSSOSessionCommand:
         sso_session_cmd = sso_session_cmd_factory(session=StubbedSession())
         sso_session_cmd(args, parsed_globals)
         assert_aws_config(
-            aws_config, expected_lines=aws_config_lines_for_existing_sso_session
+            aws_config,
+            expected_lines=aws_config_lines_for_existing_sso_session,
         )
 
     def test_override_existing_sso_session_configurations(
@@ -1690,7 +1750,9 @@ class TestPTKPrompt(unittest.TestCase):
 
     def test_can_provide_toolbar(self):
         toolbar = "Toolbar content"
-        self.prompter.get_value("default_value", "Prompt Text", toolbar=toolbar)
+        self.prompter.get_value(
+            "default_value", "Prompt Text", toolbar=toolbar
+        )
         self.assert_expected_toolbar(toolbar)
 
     def test_can_provide_prompt_format(self):
@@ -1816,9 +1878,9 @@ class TestSSOSessionConfigurationPrompte
     def test_prompt_for_start_url_reuse_existing_configuration(
         self, sso_config_prompter, ptk_stubber, existing_start_url
     ):
-        sso_config_prompter.sso_session_config[
-            "sso_start_url"
-        ] = existing_start_url
+        sso_config_prompter.sso_session_config["sso_start_url"] = (
+            existing_start_url
+        )
         ptk_stubber.user_inputs = UserInputs(
             start_url_prompt=StartUrlPrompt(
                 "", expected_default=existing_start_url
@@ -1863,9 +1925,9 @@ class TestSSOSessionConfigurationPrompte
     def test_prompt_for_sso_region_reuse_existing_configuration(
         self, sso_config_prompter, ptk_stubber, existing_sso_region
     ):
-        sso_config_prompter.sso_session_config[
-            "sso_region"
-        ] = existing_sso_region
+        sso_config_prompter.sso_session_config["sso_region"] = (
+            existing_sso_region
+        )
         ptk_stubber.user_inputs = UserInputs(
             sso_region_prompt=SSORegionPrompt(
                 "", expected_default=existing_sso_region
@@ -1907,9 +1969,9 @@ class TestSSOSessionConfigurationPrompte
     def test_prompt_for_scopes_reuse_existing_configuration(
         self, sso_config_prompter, ptk_stubber, existing_scopes
     ):
-        sso_config_prompter.sso_session_config[
-            "sso_registration_scopes"
-        ] = existing_scopes
+        sso_config_prompter.sso_session_config["sso_registration_scopes"] = (
+            existing_scopes
+        )
         ptk_stubber.user_inputs = UserInputs(
             scopes_prompt=ScopesPrompt("", expected_default=existing_scopes)
         )
diff -pruN 2.23.6-1/tests/unit/customizations/configure/test_writer.py 2.31.35-1/tests/unit/customizations/configure/test_writer.py
--- 2.23.6-1/tests/unit/customizations/configure/test_writer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/configure/test_writer.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import tempfile
 import shutil
+import tempfile
 
 from awscli.customizations.configure.writer import ConfigFileWriter
-from awscli.testutils import unittest, skip_if_windows
+from awscli.testutils import skip_if_windows, unittest
 
 
 class TestConfigFileWriter(unittest.TestCase):
-
     def setUp(self):
         self.dirname = tempfile.mkdtemp()
         self.config_filename = os.path.join(self.dirname, 'config')
@@ -28,51 +27,51 @@ class TestConfigFileWriter(unittest.Test
     def tearDown(self):
         shutil.rmtree(self.dirname)
 
-    def assert_update_config(self, original_config_contents, updated_data,
-                             updated_config_contents):
+    def assert_update_config(
+        self, original_config_contents, updated_data, updated_config_contents
+    ):
         # Given the original_config, when it's updated with update_data,
         # it should produce updated_config_contents.
         with open(self.config_filename, 'w') as f:
             f.write(original_config_contents)
         self.writer.update_config(updated_data, self.config_filename)
-        with open(self.config_filename, 'r') as f:
+        with open(self.config_filename) as f:
             new_contents = f.read()
         if new_contents != updated_config_contents:
-            self.fail("Config file contents do not match.\n"
-                      "Expected contents:\n"
-                      "%s\n\n"
-                      "Actual Contents:\n"
-                      "%s\n" % (updated_config_contents, new_contents))
+            self.fail(
+                "Config file contents do not match.\n"
+                "Expected contents:\n"
+                "%s\n\n"
+                "Actual Contents:\n"
+                "%s\n" % (updated_config_contents, new_contents)
+            )
 
     def test_update_single_existing_value(self):
         original = '[default]\nfoo = 1\nbar = 1'
         updated = '[default]\nfoo = newvalue\nbar = 1'
-        self.assert_update_config(
-            original, {'foo': 'newvalue'}, updated)
+        self.assert_update_config(original, {'foo': 'newvalue'}, updated)
 
     def test_update_value_with_square_brackets(self):
         original = '[default]\nfoo = old[value]\nbar = 1'
         updated = '[default]\nfoo = new[value]\nbar = 1'
-        self.assert_update_config(
-            original, {'foo': 'new[value]'}, updated)
+        self.assert_update_config(original, {'foo': 'new[value]'}, updated)
 
     def test_update_single_existing_value_no_spaces(self):
         original = '[default]\nfoo=1\nbar=1'
         updated = '[default]\nfoo = newvalue\nbar=1'
-        self.assert_update_config(
-            original, {'foo': 'newvalue'}, updated)
+        self.assert_update_config(original, {'foo': 'newvalue'}, updated)
 
     def test_update_single_new_values(self):
         expected = '[default]\nfoo = 1\nbar = 2\nbaz = newvalue\n'
         self.assert_update_config(
-            '[default]\nfoo = 1\nbar = 2',
-            {'baz': 'newvalue'}, expected)
+            '[default]\nfoo = 1\nbar = 2', {'baz': 'newvalue'}, expected
+        )
 
     def test_handles_no_spaces(self):
         expected = '[default]\nfoo=1\nbar=2\nbaz = newvalue\n'
         self.assert_update_config(
-            '[default]\nfoo=1\nbar=2',
-            {'baz': 'newvalue'}, expected)
+            '[default]\nfoo=1\nbar=2', {'baz': 'newvalue'}, expected
+        )
 
     def test_insert_values_in_middle_section(self):
         original_contents = (
@@ -102,7 +101,8 @@ class TestConfigFileWriter(unittest.Test
         self.assert_update_config(
             original_contents,
             {'foo': 'newvalue', '__section__': 'b'},
-            expected_contents)
+            expected_contents,
+        )
 
     def test_insert_new_value_in_middle_section(self):
         original_contents = (
@@ -131,13 +131,13 @@ class TestConfigFileWriter(unittest.Test
         self.assert_update_config(
             original_contents,
             {'newvalue': 'newvalue', '__section__': 'b'},
-            expected_contents)
+            expected_contents,
+        )
 
     def test_new_config_file(self):
         self.assert_update_config(
-            '\n',
-            {'foo': 'value'},
-            '\n[default]\nfoo = value\n')
+            '\n', {'foo': 'value'}, '\n[default]\nfoo = value\n'
+        )
 
     def test_section_does_not_exist(self):
         original_contents = (
@@ -151,162 +151,118 @@ class TestConfigFileWriter(unittest.Test
             '\n'
             'foo = bar\n'
         )
-        appended_contents = (
-            '[default]\n'
-            'foo = value\n'
-        )
+        appended_contents = '[default]\n' 'foo = value\n'
         self.assert_update_config(
             original_contents,
             {'foo': 'value'},
-            original_contents + appended_contents)
+            original_contents + appended_contents,
+        )
 
     def test_config_file_does_not_exist(self):
         self.writer.update_config({'foo': 'value'}, self.config_filename)
-        with open(self.config_filename, 'r') as f:
+        with open(self.config_filename) as f:
             new_contents = f.read()
         self.assertEqual(new_contents, '[default]\nfoo = value\n')
 
     @skip_if_windows("Test not valid on windows.")
     def test_permissions_on_new_file(self):
         self.writer.update_config({'foo': 'value'}, self.config_filename)
-        with open(self.config_filename, 'r') as f:
+        with open(self.config_filename) as f:
             f.read()
         self.assertEqual(os.stat(self.config_filename).st_mode & 0xFFF, 0o600)
 
     def test_update_config_with_comments(self):
-        original = (
-            '[default]\n'
-            '#foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '[default]\n' '#foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {'foo': 'newvalue'},
-            '[default]\n'
-            '#foo = 1\n'
-            'bar = 1\n'
-            'foo = newvalue\n'
+            original,
+            {'foo': 'newvalue'},
+            '[default]\n' '#foo = 1\n' 'bar = 1\n' 'foo = newvalue\n',
         )
 
     def test_update_config_with_commented_section(self):
-        original = (
-            '#[default]\n'
-            '[default]\n'
-            '#foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '#[default]\n' '[default]\n' '#foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {'foo': 'newvalue'},
+            original,
+            {'foo': 'newvalue'},
             '#[default]\n'
             '[default]\n'
             '#foo = 1\n'
             'bar = 1\n'
-            'foo = newvalue\n'
+            'foo = newvalue\n',
         )
 
     def test_spaces_around_key_names(self):
-        original = (
-            '[default]\n'
-            'foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '[default]\n' 'foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {'foo': 'newvalue'},
-            '[default]\n'
-            'foo = newvalue\n'
-            'bar = 1\n'
+            original,
+            {'foo': 'newvalue'},
+            '[default]\n' 'foo = newvalue\n' 'bar = 1\n',
         )
 
     def test_unquoted_profile_name(self):
-        original = (
-            '[profile foobar]\n'
-            'foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '[profile foobar]\n' 'foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {'foo': 'newvalue', '__section__': 'profile foobar'},
-            '[profile foobar]\n'
-            'foo = newvalue\n'
-            'bar = 1\n'
+            original,
+            {'foo': 'newvalue', '__section__': 'profile foobar'},
+            '[profile foobar]\n' 'foo = newvalue\n' 'bar = 1\n',
         )
 
     def test_double_quoted_profile_name(self):
-        original = (
-            '[profile "foobar"]\n'
-            'foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '[profile "foobar"]\n' 'foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {'foo': 'newvalue', '__section__': 'profile foobar'},
-            '[profile "foobar"]\n'
-            'foo = newvalue\n'
-            'bar = 1\n'
+            original,
+            {'foo': 'newvalue', '__section__': 'profile foobar'},
+            '[profile "foobar"]\n' 'foo = newvalue\n' 'bar = 1\n',
         )
 
     def test_profile_with_multiple_spaces(self):
-        original = (
-            '[profile "two  spaces"]\n'
-            'foo = 1\n'
-            'bar = 1\n'
-        )
+        original = '[profile "two  spaces"]\n' 'foo = 1\n' 'bar = 1\n'
         self.assert_update_config(
-            original, {
-                'foo': 'newvalue', '__section__': 'profile two  spaces'},
-            '[profile "two  spaces"]\n'
-            'foo = newvalue\n'
-            'bar = 1\n'
+            original,
+            {'foo': 'newvalue', '__section__': 'profile two  spaces'},
+            '[profile "two  spaces"]\n' 'foo = newvalue\n' 'bar = 1\n',
         )
 
     def test_nested_attributes_new_file(self):
         original = ''
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 's3v4'}},
-            '[default]\n'
-            's3 =\n'
-            '    signature_version = s3v4\n')
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 's3v4'}},
+            '[default]\n' 's3 =\n' '    signature_version = s3v4\n',
+        )
 
     def test_add_to_nested_with_nested_in_the_middle(self):
-        original = (
-            '[default]\n'
-            's3 =\n'
-            '    other = foo\n'
-            'ec2 = bar\n'
-        )
+        original = '[default]\n' 's3 =\n' '    other = foo\n' 'ec2 = bar\n'
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 'newval'}},
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 'newval'}},
             '[default]\n'
             's3 =\n'
             '    other = foo\n'
             '    signature_version = newval\n'
-            'ec2 = bar\n')
+            'ec2 = bar\n',
+        )
 
     def test_add_to_nested_with_nested_in_the_end(self):
-        original = (
-            '[default]\n'
-            's3 =\n'
-            '    other = foo\n'
-        )
+        original = '[default]\n' 's3 =\n' '    other = foo\n'
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 'newval'}},
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 'newval'}},
             '[default]\n'
             's3 =\n'
             '    other = foo\n'
-            '    signature_version = newval\n')
+            '    signature_version = newval\n',
+        )
 
     def test_update_nested_attribute(self):
         original = (
-            '[default]\n'
-            's3 =\n'
-            '    signature_version = originalval\n'
+            '[default]\n' 's3 =\n' '    signature_version = originalval\n'
         )
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 'newval'}},
-            '[default]\n'
-            's3 =\n'
-            '    signature_version = newval\n')
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 'newval'}},
+            '[default]\n' 's3 =\n' '    signature_version = newval\n',
+        )
 
     def test_updated_nested_attribute_new_section(self):
         original = (
@@ -317,51 +273,44 @@ class TestConfigFileWriter(unittest.Test
             'foo = bar\n'
         )
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 'newval'}},
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 'newval'}},
             '[default]\n'
             's3 =\n'
             '    other = foo\n'
             '    signature_version = newval\n'
             '[profile foo]\n'
-            'foo = bar\n')
+            'foo = bar\n',
+        )
 
     def test_update_nested_attr_no_prior_nesting(self):
-        original = (
-            '[default]\n'
-            'foo = bar\n'
-            '[profile foo]\n'
-            'foo = bar\n'
-        )
+        original = '[default]\n' 'foo = bar\n' '[profile foo]\n' 'foo = bar\n'
         self.assert_update_config(
-            original, {'__section__': 'default',
-                       's3': {'signature_version': 'newval'}},
+            original,
+            {'__section__': 'default', 's3': {'signature_version': 'newval'}},
             '[default]\n'
             'foo = bar\n'
             's3 =\n'
             '    signature_version = newval\n'
             '[profile foo]\n'
-            'foo = bar\n')
+            'foo = bar\n',
+        )
 
     def test_can_handle_empty_section(self):
-        original = (
-            '[default]\n'
-        )
+        original = '[default]\n'
         self.assert_update_config(
-            original, {'region': 'us-west-2', '__section__': 'default'},
-            '[default]\n'
-            'region = us-west-2\n'
+            original,
+            {'region': 'us-west-2', '__section__': 'default'},
+            '[default]\n' 'region = us-west-2\n',
         )
 
     def test_appends_newline_on_new_section(self):
-        original = (
-            '[preview]\n'
-            'cloudfront = true'
-        )
+        original = '[preview]\n' 'cloudfront = true'
         self.assert_update_config(
-            original, {'region': 'us-west-2', '__section__': 'new-section'},
+            original,
+            {'region': 'us-west-2', '__section__': 'new-section'},
             '[preview]\n'
             'cloudfront = true\n'
             '[new-section]\n'
-            'region = us-west-2\n'
+            'region = us-west-2\n',
         )
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_arg_parse.py 2.31.35-1/tests/unit/customizations/datapipeline/test_arg_parse.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_arg_parse.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_arg_parse.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
-
 from awscli.customizations.datapipeline import ParameterValuesInlineArgument
+from awscli.testutils import unittest
 
 
 class TestParameterValuesInlineArgument(unittest.TestCase):
-
     def test_over_2_values_with_same_key(self):
         parameters = {}
         argument = ParameterValuesInlineArgument('parameter-values')
@@ -27,22 +25,13 @@ class TestParameterValuesInlineArgument(
                 'param1=value1',
                 'param1=value2',
                 'param1=value3',
-            ]
+            ],
         )
         self.assertEqual(
             parameters['parameterValues'],
             [
-                {
-                    "id": "param1",
-                    "stringValue": "value1"
-                },
-                {
-                    "id": "param1",
-                    "stringValue": "value2"
-                },
-                {
-                    "id": "param1",
-                    "stringValue": "value3"
-                }
-            ]
+                {"id": "param1", "stringValue": "value1"},
+                {"id": "param1", "stringValue": "value2"},
+                {"id": "param1", "stringValue": "value3"},
+            ],
         )
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_arg_serialize.py 2.31.35-1/tests/unit/customizations/datapipeline/test_arg_serialize.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_arg_serialize.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_arg_serialize.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest, unittest
-from awscli.testutils import temporary_file
-
-from awscli.customizations.datapipeline import QueryArgBuilder
 from dateutil.parser import parse
 
+from awscli.customizations.datapipeline import QueryArgBuilder
+from awscli.testutils import BaseAWSCommandParamsTest, temporary_file, unittest
 
 # We're not interested in testing the def->api
 # translation process (that has its own test suite),
@@ -35,7 +33,6 @@ TEST_JSON = """\
 
 
 class TestPutPipelineDefinition(BaseAWSCommandParamsTest):
-
     prefix = 'datapipeline put-pipeline-definition'
 
     def test_put_pipeline_definition_with_json(self):
@@ -48,26 +45,17 @@ class TestPutPipelineDefinition(BaseAWSC
             result = {
                 'pipelineId': 'name',
                 'pipelineObjects': [
-                    {"id": "S3ToS3Copy",
-                     "name": "S3ToS3Copy",
-                     "fields": [
-                       {
-                         "key": "input",
-                         "refValue": "InputData"
-                       },
-                       {
-                         "key": "output",
-                         "refValue": "OutputData"
-                       },
-                       {
-                         "key": "schedule",
-                         "refValue": "CopyPeriod"
-                       },
-                       {
-                         "key": "type",
-                         "stringValue": "CopyActivity"
-                       },
-                     ]}]
+                    {
+                        "id": "S3ToS3Copy",
+                        "name": "S3ToS3Copy",
+                        "fields": [
+                            {"key": "input", "refValue": "InputData"},
+                            {"key": "output", "refValue": "OutputData"},
+                            {"key": "schedule", "refValue": "CopyPeriod"},
+                            {"key": "type", "stringValue": "CopyActivity"},
+                        ],
+                    }
+                ],
             }
             self.assert_params_for_cmd(cmdline, result)
 
@@ -79,15 +67,19 @@ class TestErrorMessages(BaseAWSCommandPa
         self.assert_params_for_cmd(
             self.prefix + ' --pipeline-id foo --status foo',
             expected_rc=252,
-            stderr_contains=('Invalid status: foo, must be one of: waiting, '
-                             'pending, cancelled, running, finished, '
-                             'failed, waiting_for_runner, '
-                             'waiting_on_dependencies'))
+            stderr_contains=(
+                'Invalid status: foo, must be one of: waiting, '
+                'pending, cancelled, running, finished, '
+                'failed, waiting_for_runner, '
+                'waiting_on_dependencies'
+            ),
+        )
 
 
-class FakeParsedArgs(object):
-    def __init__(self, start_interval=None, schedule_interval=None,
-                 status=None):
+class FakeParsedArgs:
+    def __init__(
+        self, start_interval=None, schedule_interval=None, status=None
+    ):
         self.start_interval = start_interval
         self.schedule_interval = schedule_interval
         self.status = status
@@ -105,77 +97,100 @@ class TestCLIArgumentSerialize(unittest.
         start_time = '2014-02-17T00:00:00'
         builder = QueryArgBuilder(current_time=parse(current_time))
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': [start_time, current_time]
-                 }
-            }]
-        })
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@actualStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [start_time, current_time],
+                        },
+                    }
+                ]
+            },
+        )
 
     def test_build_args_with_start_interval(self):
         parsed_args = FakeParsedArgs(
-            start_interval=['2014-02-01T00:00:00',
-                            '2014-02-04T00:00:00',]
+            start_interval=[
+                '2014-02-01T00:00:00',
+                '2014-02-04T00:00:00',
+            ]
         )
         builder = QueryArgBuilder()
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': ['2014-02-01T00:00:00',
-                                '2014-02-04T00:00:00']
-                 }
-            }]
-        })
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@actualStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [
+                                '2014-02-01T00:00:00',
+                                '2014-02-04T00:00:00',
+                            ],
+                        },
+                    }
+                ]
+            },
+        )
 
     def test_build_args_with_end_interval(self):
         parsed_args = FakeParsedArgs(
-            schedule_interval=['2014-02-01T00:00:00',
-                               '2014-02-04T00:00:00',]
+            schedule_interval=[
+                '2014-02-01T00:00:00',
+                '2014-02-04T00:00:00',
+            ]
         )
         builder = QueryArgBuilder()
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@scheduledStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': ['2014-02-01T00:00:00',
-                                '2014-02-04T00:00:00']
-                 }
-            }]
-        })
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@scheduledStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [
+                                '2014-02-01T00:00:00',
+                                '2014-02-04T00:00:00',
+                            ],
+                        },
+                    }
+                ]
+            },
+        )
 
     def test_build_args_with_single_status(self):
         # --status pending
-        parsed_args = FakeParsedArgs(
-            status=['pending']
-        )
+        parsed_args = FakeParsedArgs(status=['pending'])
         current_time = '2014-02-21T00:00:00'
         start_time = '2014-02-17T00:00:00'
         builder = QueryArgBuilder(current_time=parse(current_time))
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': [start_time, current_time]
-                 }
-            }, {
-                'fieldName': '@status',
-                 'operator': {
-                     'type': 'EQ',
-                     'values': ['PENDING']
-                 }
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@actualStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [start_time, current_time],
+                        },
+                    },
+                    {
+                        'fieldName': '@status',
+                        'operator': {'type': 'EQ', 'values': ['PENDING']},
+                    },
+                ]
             },
-            ]
-        })
+        )
 
     def test_build_args_with_csv_status(self):
         # --status pending,waiting_on_dependencies
@@ -186,56 +201,76 @@ class TestCLIArgumentSerialize(unittest.
         start_time = '2014-02-17T00:00:00'
         builder = QueryArgBuilder(current_time=parse(current_time))
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': [start_time, current_time]
-                 }
-            }, {
-                'fieldName': '@status',
-                 'operator': {
-                     'type': 'EQ',
-                     'values': ['PENDING', 'WAITING_ON_DEPENDENCIES']
-                 }
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@actualStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [start_time, current_time],
+                        },
+                    },
+                    {
+                        'fieldName': '@status',
+                        'operator': {
+                            'type': 'EQ',
+                            'values': ['PENDING', 'WAITING_ON_DEPENDENCIES'],
+                        },
+                    },
+                ]
             },
-            ]
-        })
+        )
 
     def test_build_args_with_all_values_set(self):
         # --status pending,waiting_on_dependencies
         # --start-interval pending,waiting_on_dependencies
         # --schedule-schedule pending,waiting_on_dependencies
         parsed_args = FakeParsedArgs(
-            start_interval=['2014-02-01T00:00:00',
-                            '2014-02-04T00:00:00',],
-            schedule_interval=['2014-02-05T00:00:00',
-                               '2014-02-09T00:00:00',],
+            start_interval=[
+                '2014-02-01T00:00:00',
+                '2014-02-04T00:00:00',
+            ],
+            schedule_interval=[
+                '2014-02-05T00:00:00',
+                '2014-02-09T00:00:00',
+            ],
             status=['pending', 'waiting_on_dependencies'],
         )
         builder = QueryArgBuilder()
         query = builder.build_query(parsed_args)
-        self.assertEqual(query, {
-            'selectors': [{
-                'fieldName': '@actualStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': ['2014-02-01T00:00:00',
-                                '2014-02-04T00:00:00',],
-                 }
-            }, {
-                'fieldName': '@scheduledStartTime',
-                 'operator': {
-                     'type': 'BETWEEN',
-                     'values': ['2014-02-05T00:00:00',
-                                '2014-02-09T00:00:00']
-                 }
-            }, {
-                'fieldName': '@status',
-                 'operator': {
-                     'type': 'EQ',
-                     'values': ['PENDING', 'WAITING_ON_DEPENDENCIES']
-                 }
-            },]
-        })
+        self.assertEqual(
+            query,
+            {
+                'selectors': [
+                    {
+                        'fieldName': '@actualStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [
+                                '2014-02-01T00:00:00',
+                                '2014-02-04T00:00:00',
+                            ],
+                        },
+                    },
+                    {
+                        'fieldName': '@scheduledStartTime',
+                        'operator': {
+                            'type': 'BETWEEN',
+                            'values': [
+                                '2014-02-05T00:00:00',
+                                '2014-02-09T00:00:00',
+                            ],
+                        },
+                    },
+                    {
+                        'fieldName': '@status',
+                        'operator': {
+                            'type': 'EQ',
+                            'values': ['PENDING', 'WAITING_ON_DEPENDENCIES'],
+                        },
+                    },
+                ]
+            },
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_commands.py 2.31.35-1/tests/unit/customizations/datapipeline/test_commands.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,123 +15,69 @@
 import copy
 import unittest
 
-from awscli.testutils import mock, BaseAWSHelpOutputTest, BaseAWSCommandParamsTest
-
-from awscli.customizations.datapipeline import convert_described_objects
-from awscli.customizations.datapipeline import ListRunsCommand
-
+from awscli.customizations.datapipeline import (
+    ListRunsCommand,
+    convert_described_objects,
+)
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    mock,
+)
 
 API_DESCRIBE_OBJECTS = [
-    {"fields": [
-        {
-            "key": "@componentParent",
-            "refValue": "S3Input"
-        },
-        {
-            "key": "@scheduledStartTime",
-            "stringValue": "2013-08-19T20:00:00"
-        },
-        {
-            "key": "parent",
-            "refValue": "S3Input"
-        },
-        {
-            "key": "@sphere",
-            "stringValue": "INSTANCE"
-        },
-        {
-            "key": "type",
-            "stringValue": "S3DataNode"
-        },
-        {
-            "key": "@version",
-            "stringValue": "1"
-        },
-        {
-            "key": "@status",
-            "stringValue": "FINISHED"
-        },
-        {
-            "key": "@actualEndTime",
-            "stringValue": "2014-02-19T19:44:44"
-        },
-        {
-            "key": "@actualStartTime",
-            "stringValue": "2014-02-19T19:44:43"
-        },
-        {
-            "key": "output",
-            "refValue": "@MyCopyActivity_2013-08-19T20:00:00"
-        },
-        {
-            "key": "@scheduledEndTime",
-            "stringValue": "2013-08-19T21:00:00"
-        }
-    ],
-     "id": "@S3Input_2013-08-19T20:00:00",
-     "name": "@S3Input_2013-08-19T20:00:00"
+    {
+        "fields": [
+            {"key": "@componentParent", "refValue": "S3Input"},
+            {
+                "key": "@scheduledStartTime",
+                "stringValue": "2013-08-19T20:00:00",
+            },
+            {"key": "parent", "refValue": "S3Input"},
+            {"key": "@sphere", "stringValue": "INSTANCE"},
+            {"key": "type", "stringValue": "S3DataNode"},
+            {"key": "@version", "stringValue": "1"},
+            {"key": "@status", "stringValue": "FINISHED"},
+            {"key": "@actualEndTime", "stringValue": "2014-02-19T19:44:44"},
+            {"key": "@actualStartTime", "stringValue": "2014-02-19T19:44:43"},
+            {
+                "key": "output",
+                "refValue": "@MyCopyActivity_2013-08-19T20:00:00",
+            },
+            {"key": "@scheduledEndTime", "stringValue": "2013-08-19T21:00:00"},
+        ],
+        "id": "@S3Input_2013-08-19T20:00:00",
+        "name": "@S3Input_2013-08-19T20:00:00",
+    },
+    {
+        "fields": [
+            {"key": "@componentParent", "refValue": "MyEC2Resource"},
+            {"key": "@resourceId", "stringValue": "i-12345"},
+            {
+                "key": "@scheduledStartTime",
+                "stringValue": "2013-08-19T23:00:00",
+            },
+            {"key": "parent", "refValue": "MyEC2Resource"},
+            {"key": "@sphere", "stringValue": "INSTANCE"},
+            {"key": "@attemptCount", "stringValue": "1"},
+            {"key": "type", "stringValue": "Ec2Resource"},
+            {"key": "@version", "stringValue": "1"},
+            {"key": "@status", "stringValue": "CREATING"},
+            {
+                "key": "input",
+                "refValue": "@MyCopyActivity_2013-08-19T23:00:00",
+            },
+            {"key": "@triesLeft", "stringValue": "2"},
+            {"key": "@actualStartTime", "stringValue": "2014-02-19T19:59:45"},
+            {
+                "key": "@headAttempt",
+                "refValue": "@MyEC2Resource_2013-08-19T23:00:00_Attempt=1",
+            },
+            {"key": "@scheduledEndTime", "stringValue": "2013-08-20T00:00:00"},
+        ],
+        "id": "@MyEC2Resource_2013-08-19T23:00:00",
+        "name": "@MyEC2Resource_2013-08-19T23:00:00",
     },
-    {"fields": [
-        {
-            "key": "@componentParent",
-            "refValue": "MyEC2Resource"
-        },
-        {
-            "key": "@resourceId",
-            "stringValue": "i-12345"
-        },
-        {
-            "key": "@scheduledStartTime",
-            "stringValue": "2013-08-19T23:00:00"
-        },
-        {
-            "key": "parent",
-            "refValue": "MyEC2Resource"
-        },
-        {
-            "key": "@sphere",
-            "stringValue": "INSTANCE"
-        },
-        {
-            "key": "@attemptCount",
-            "stringValue": "1"
-        },
-        {
-            "key": "type",
-            "stringValue": "Ec2Resource"
-        },
-        {
-            "key": "@version",
-            "stringValue": "1"
-        },
-        {
-            "key": "@status",
-            "stringValue": "CREATING"
-        },
-        {
-            "key": "input",
-            "refValue": "@MyCopyActivity_2013-08-19T23:00:00"
-        },
-        {
-            "key": "@triesLeft",
-            "stringValue": "2"
-        },
-        {
-            "key": "@actualStartTime",
-            "stringValue": "2014-02-19T19:59:45"
-        },
-        {
-            "key": "@headAttempt",
-            "refValue": "@MyEC2Resource_2013-08-19T23:00:00_Attempt=1"
-        },
-        {
-            "key": "@scheduledEndTime",
-            "stringValue": "2013-08-20T00:00:00"
-        }
-    ],
-     "id": "@MyEC2Resource_2013-08-19T23:00:00",
-     "name": "@MyEC2Resource_2013-08-19T23:00:00"
-    }
 ]
 
 JSON_FORMATTER_PATH = 'awscli.formatter.JSONFormatter.__call__'
@@ -139,7 +85,6 @@ LIST_FORMATTER_PATH = 'awscli.customizat
 
 
 class TestConvertObjects(unittest.TestCase):
-
     def test_convert_described_objects(self):
         converted = convert_described_objects(API_DESCRIBE_OBJECTS)
         self.assertEqual(len(converted), 2)
@@ -155,18 +100,20 @@ class TestConvertObjects(unittest.TestCa
         describe_objects = copy.deepcopy(API_DESCRIBE_OBJECTS)
         # Change the existing @scheduledStartTime from
         # 20:00:00 to 23:59:00
-        describe_objects[0]['fields'][1]['stringValue'] = (
-            "2013-08-19T23:59:00")
+        describe_objects[0]['fields'][1]['stringValue'] = "2013-08-19T23:59:00"
         converted = convert_described_objects(
             describe_objects,
-            sort_key_func=lambda x: (x['@scheduledStartTime'], x['name']))
-        self.assertEqual(converted[0]['@scheduledStartTime'],
-                         '2013-08-19T23:00:00')
-        self.assertEqual(converted[1]['@scheduledStartTime'],
-                         '2013-08-19T23:59:00')
+            sort_key_func=lambda x: (x['@scheduledStartTime'], x['name']),
+        )
+        self.assertEqual(
+            converted[0]['@scheduledStartTime'], '2013-08-19T23:00:00'
+        )
+        self.assertEqual(
+            converted[1]['@scheduledStartTime'], '2013-08-19T23:59:00'
+        )
 
 
-class FakeParsedArgs(object):
+class FakeParsedArgs:
     def __init__(self, **kwargs):
         self.endpoint_url = None
         self.region = None
@@ -189,44 +136,56 @@ class TestCommandsRunProperly(BaseAWSCom
         self.driver.session.user_agent_extra = ''
         self.driver.session.emit_first_non_none_response.return_value = None
         self.driver.session.create_client.return_value = self.client
-        self.query_objects.paginate.return_value.build_full_result.\
-            return_value = {'ids': ['object-ids']}
-        self.describe_objects.return_value = \
-            {'pipelineObjects': API_DESCRIBE_OBJECTS}
+        self.query_objects.paginate.return_value.build_full_result.return_value = {
+            'ids': ['object-ids']
+        }
+        self.describe_objects.return_value = {
+            'pipelineObjects': API_DESCRIBE_OBJECTS
+        }
         self.expected_response = convert_described_objects(
             API_DESCRIBE_OBJECTS,
-            sort_key_func=lambda x: (x['@scheduledStartTime'], x['name']))
+            sort_key_func=lambda x: (x['@scheduledStartTime'], x['name']),
+        )
 
     def test_list_runs(self):
         command = ListRunsCommand(self.driver.session)
-        command(['--pipeline-id', 'my-pipeline-id'],
-                parsed_globals=FakeParsedArgs(region='us-east-1'))
+        command(
+            ['--pipeline-id', 'my-pipeline-id'],
+            parsed_globals=FakeParsedArgs(region='us-east-1'),
+        )
         self.assertTrue(self.query_objects.paginate.called)
         self.describe_objects.assert_called_with(
-            pipelineId='my-pipeline-id', objectIds=['object-ids'])
+            pipelineId='my-pipeline-id', objectIds=['object-ids']
+        )
 
     @mock.patch(JSON_FORMATTER_PATH)
     @mock.patch(LIST_FORMATTER_PATH)
     def test_list_runs_formatter_explicit_choice(
-            self, list_formatter, json_formatter):
+        self, list_formatter, json_formatter
+    ):
         command = ListRunsCommand(self.driver.session)
-        command(['--pipeline-id', 'my-pipeline-id'],
-                parsed_globals=FakeParsedArgs(
-                    region='us-east-1', output='json'))
+        command(
+            ['--pipeline-id', 'my-pipeline-id'],
+            parsed_globals=FakeParsedArgs(region='us-east-1', output='json'),
+        )
         json_formatter.assert_called_once_with(
-            'list-runs', self.expected_response)
+            'list-runs', self.expected_response
+        )
         self.assertFalse(list_formatter.called)
 
     @mock.patch(JSON_FORMATTER_PATH)
     @mock.patch(LIST_FORMATTER_PATH)
     def test_list_runs_formatter_implicit_choice(
-            self, list_formatter, json_formatter):
-
+        self, list_formatter, json_formatter
+    ):
         command = ListRunsCommand(self.driver.session)
-        command(['--pipeline-id', 'my-pipeline-id'],
-                parsed_globals=FakeParsedArgs(region='us-east-1'))
+        command(
+            ['--pipeline-id', 'my-pipeline-id'],
+            parsed_globals=FakeParsedArgs(region='us-east-1'),
+        )
         list_formatter.assert_called_once_with(
-            'list-runs', self.expected_response)
+            'list-runs', self.expected_response
+        )
         self.assertFalse(json_formatter.called)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_create_default_role.py 2.31.35-1/tests/unit/customizations/datapipeline/test_create_default_role.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_create_default_role.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_create_default_role.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,17 +1,15 @@
 import pytest
+from botocore.compat import json
 
-import awscli.customizations.datapipeline.createdefaultroles \
-    as createdefaultroles
-from awscli.customizations.datapipeline.constants\
-    import DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,\
-    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,\
-    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY,\
-    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY
-
-from awscli.testutils import BaseAWSCommandParamsTest,\
-    mock, unittest
+import awscli.customizations.datapipeline.createdefaultroles as createdefaultroles
+from awscli.customizations.datapipeline.constants import (
+    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY,
+    DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+    DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY,
+    DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
+)
 from awscli.customizations.datapipeline.translator import dict_to_string
-from botocore.compat import json
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 @pytest.mark.filterwarnings('ignore::UserWarning')
@@ -30,16 +28,16 @@ class TestCreateDefaultRole(BaseAWSComma
                     "s3:*",
                     "sdb:*",
                     "sns:*",
-                    "sqs:*"
-                    ],
+                    "sqs:*",
+                ],
                 "Effect": "Allow",
-                "Resource": ["*"]
-                }
-            ]
+                "Resource": ["*"],
+            }
+        ]
     }
 
     CREATE_DATAPIPELINE_ROLE_RESULT = {
-        "Role":  {
+        "Role": {
             "AssumeRolePolicyDocument": {
                 "Version": "2008-10-17",
                 "Statement": [
@@ -47,25 +45,23 @@ class TestCreateDefaultRole(BaseAWSComma
                         "Action": "sts:AssumeRole",
                         "Sid": "",
                         "Effect": "Allow",
-                        "Principal": {
-                            "Service": "ec2.amazonaws.com"
-                        }
+                        "Principal": {"Service": "ec2.amazonaws.com"},
                     }
-                ]
+                ],
             },
             "RoleId": "AROAJG7O4RNNSRINMF6DI",
             "CreateDate": "2014-05-01T23:47:14.552Z",
             "RoleName": DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
             "Path": "/",
-            "Arn": "arn:aws:iam::176430881729:role/" +
-                    DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME
+            "Arn": "arn:aws:iam::176430881729:role/"
+            + DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
         }
     }
 
     CONSTRUCTED_RESULT_OUTPUT = [
         {
             "Role": CREATE_DATAPIPELINE_ROLE_RESULT['Role'],
-            "RolePolicy": DATAPIPELINE_ROLE_POLICY
+            "RolePolicy": DATAPIPELINE_ROLE_POLICY,
         }
     ]
 
@@ -79,25 +75,38 @@ class TestCreateDefaultRole(BaseAWSComma
         self.assertEqual(len(self.operations_called), 3)
 
         self.assertEqual(self.operations_called[0][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
+        )
 
     # Use case: Default roles do not exist
     # Expected results: Operations are performed by the client to verify
     # existence of roles and then creation of roles (Service role,
     # resource role and instance profile)
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._construct_result')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._check_if_role_exists')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._get_role_policy')
-    def test_default_roles_not_exist(self, get_rp_patch,
-                                     role_exists_patch,
-                                     instance_profile_exists_patch,
-                                     construct_result_patch):
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._construct_result'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._check_if_role_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._get_role_policy'
+    )
+    def test_default_roles_not_exist(
+        self,
+        get_rp_patch,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        construct_result_patch,
+    ):
         get_rp_patch.return_value = False
         instance_profile_exists_patch.return_value = False
         role_exists_patch.return_value = False
@@ -107,69 +116,100 @@ class TestCreateDefaultRole(BaseAWSComma
         self.assertEqual(len(self.operations_called), 6)
 
         self.assertEqual(self.operations_called[0][0].name, 'CreateRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
+        )
         self.assertEqual(
             self.operations_called[0][1]['AssumeRolePolicyDocument'],
-            dict_to_string(DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY))
+            dict_to_string(DATAPIPELINE_DEFAULT_SERVICE_ROLE_ASSUME_POLICY),
+        )
 
-        self.assertEqual(self.operations_called[1][0].name,
-                         'AttachRolePolicy')
-        self.assertEqual(self.operations_called[1][1]['PolicyArn'],
-                         (createdefaultroles.
-                          DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN))
-        self.assertEqual(self.operations_called[1][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME)
+        self.assertEqual(self.operations_called[1][0].name, 'AttachRolePolicy')
+        self.assertEqual(
+            self.operations_called[1][1]['PolicyArn'],
+            (createdefaultroles.DATAPIPELINE_DEFAULT_SERVICE_ROLE_ARN),
+        )
+        self.assertEqual(
+            self.operations_called[1][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_SERVICE_ROLE_NAME,
+        )
 
         self.assertEqual(self.operations_called[2][0].name, 'CreateRole')
-        self.assertEqual(self.operations_called[2][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[2][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+        )
         self.assertEqual(
             self.operations_called[2][1]['AssumeRolePolicyDocument'],
-            dict_to_string(DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY))
+            dict_to_string(DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ASSUME_POLICY),
+        )
 
         self.assertEqual(self.operations_called[3][0].name, 'AttachRolePolicy')
-        self.assertEqual(self.operations_called[3][1]['PolicyArn'],
-                         (createdefaultroles.
-                          DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN))
-        self.assertEqual(self.operations_called[3][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME)
-
-        self.assertEqual(self.operations_called[4][0].name,
-                         'CreateInstanceProfile')
-        self.assertEqual(self.operations_called[4][1]['InstanceProfileName'],
-                         DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME)
-
-        self.assertEqual(self.operations_called[5][0].name,
-                         'AddRoleToInstanceProfile')
-        self.assertEqual(self.operations_called[5][1]['InstanceProfileName'],
-                         DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME)
-        self.assertEqual(self.operations_called[5][1]['RoleName'],
-                         DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[3][1]['PolicyArn'],
+            (createdefaultroles.DATAPIPELINE_DEFAULT_RESOURCE_ROLE_ARN),
+        )
+        self.assertEqual(
+            self.operations_called[3][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+        )
+
+        self.assertEqual(
+            self.operations_called[4][0].name, 'CreateInstanceProfile'
+        )
+        self.assertEqual(
+            self.operations_called[4][1]['InstanceProfileName'],
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+        )
+
+        self.assertEqual(
+            self.operations_called[5][0].name, 'AddRoleToInstanceProfile'
+        )
+        self.assertEqual(
+            self.operations_called[5][1]['InstanceProfileName'],
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+        )
+        self.assertEqual(
+            self.operations_called[5][1]['RoleName'],
+            DATAPIPELINE_DEFAULT_RESOURCE_ROLE_NAME,
+        )
 
     # Use case: Creating only DataPipeline service role
     # Expected output: The service role is created displaying a message
     # to the customer that a particular role with a policy has been created
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._get_role_policy')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._create_role_with_role_policy')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.datapipeline.createdefaultroles.'
-                'CreateDefaultRoles._check_if_role_exists')
-    def test_constructed_result(self, role_exists_patch,
-                                instance_profile_exists_patch,
-                                create_role_patch,
-                                get_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._get_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._create_role_with_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.datapipeline.createdefaultroles.'
+        'CreateDefaultRoles._check_if_role_exists'
+    )
+    def test_constructed_result(
+        self,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        create_role_patch,
+        get_role_policy_patch,
+    ):
         role_exists_patch.side_effect = self.toggle_for_check_if_exists
         instance_profile_exists_patch.return_value = True
         create_role_patch.return_value = self.CREATE_DATAPIPELINE_ROLE_RESULT
         get_role_policy_patch.return_value = self.DATAPIPELINE_ROLE_POLICY
 
         result = self.run_cmd(self.prefix, 0)
-        expected_output = json.dumps(self.CONSTRUCTED_RESULT_OUTPUT,
-                                     indent=4) + '\n'
+        expected_output = (
+            json.dumps(self.CONSTRUCTED_RESULT_OUTPUT, indent=4) + '\n'
+        )
         self.assertEqual(result[0], expected_output)
 
     def toggle_for_check_if_exists(self, *args):
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_listrunsformatter.py 2.31.35-1/tests/unit/customizations/datapipeline/test_listrunsformatter.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_listrunsformatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_listrunsformatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,11 @@
 
 import difflib
 
-from awscli.testutils import mock, unittest
-from awscli.customizations.datapipeline.listrunsformatter \
-    import ListRunsFormatter
 from awscli.compat import StringIO
+from awscli.customizations.datapipeline.listrunsformatter import (
+    ListRunsFormatter,
+)
+from awscli.testutils import mock, unittest
 
 
 class TestListRunsFormatter(unittest.TestCase):
@@ -38,22 +39,25 @@ class TestListRunsFormatter(unittest.Tes
             [],
             "       Name                                                Scheduled Start      Status                 \n"  # noqa
             "       ID                                                  Started              Ended              \n"  # noqa
-            "---------------------------------------------------------------------------------------------------\n")  # noqa
+            "---------------------------------------------------------------------------------------------------\n",
+        )  # noqa
 
     def test_single_row(self):
         self.assert_data_renders_to(
-            [{
-                 '@componentParent': 'parent',
-                 '@id': 'id',
-                 '@scheduledStartTime': 'now',
-                 '@status': 'status',
-                 '@actualStartTime': 'actualStartTime',
-                 '@actualEndTime': 'actualEndTime',
-             }],
+            [
+                {
+                    '@componentParent': 'parent',
+                    '@id': 'id',
+                    '@scheduledStartTime': 'now',
+                    '@status': 'status',
+                    '@actualStartTime': 'actualStartTime',
+                    '@actualEndTime': 'actualEndTime',
+                }
+            ],
             "       Name                                                Scheduled Start      Status                 \n"  # noqa
             "       ID                                                  Started              Ended              \n"  # noqa
             "---------------------------------------------------------------------------------------------------\n"  # noqa
             "   1.  parent                                              now                  status                 \n"  # noqa
             "       id                                                  actualStartTime      actualEndTime      \n"  # noqa
-            "\n"
+            "\n",
         )
diff -pruN 2.23.6-1/tests/unit/customizations/datapipeline/test_translator.py 2.31.35-1/tests/unit/customizations/datapipeline/test_translator.py
--- 2.23.6-1/tests/unit/customizations/datapipeline/test_translator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/datapipeline/test_translator.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.datapipeline.translator \
-    import PipelineDefinitionError
-from awscli.testutils import unittest
-
 from botocore.compat import OrderedDict, json
 
 from awscli.customizations.datapipeline import translator
-
+from awscli.customizations.datapipeline.translator import (
+    PipelineDefinitionError,
+)
+from awscli.testutils import unittest
 
 # Thoughout these tests, 'df' refers to the condensed JSON definition format
 # that the user provides and API refers to the format expected by the API.
 
+
 class TestTranslatePipelineDefinitions(unittest.TestCase):
     maxDiff = None
 
@@ -39,13 +39,18 @@ class TestTranslatePipelineDefinitions(u
             }
             ]}""")
         actual = translator.definition_to_api_objects(definition)
-        api = [{"name": "S3ToS3Copy", "id": "S3ToS3Copy",
+        api = [
+            {
+                "name": "S3ToS3Copy",
+                "id": "S3ToS3Copy",
                 "fields": [
                     {"key": "input", "refValue": "InputData"},
                     {"key": "output", "refValue": "OutputData"},
                     {"key": "schedule", "refValue": "CopyPeriod"},
                     {"key": "type", "stringValue": "CopyActivity"},
-                ]}]
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_convert_df_to_api_schedule(self):
@@ -60,15 +65,24 @@ class TestTranslatePipelineDefinitions(u
                 }
             ]}""")
         actual = translator.definition_to_api_objects(definition)
-        api = [{"name": "MySchedule", "id": "MySchedule",
+        api = [
+            {
+                "name": "MySchedule",
+                "id": "MySchedule",
                 "fields": [
-                    {"key": "endDateTime",
-                     "stringValue": "2013-08-19T00:00:00"},
+                    {
+                        "key": "endDateTime",
+                        "stringValue": "2013-08-19T00:00:00",
+                    },
                     {"key": "period", "stringValue": "1 day"},
-                    {"key": "startDateTime",
-                     "stringValue": "2013-08-18T00:00:00"},
+                    {
+                        "key": "startDateTime",
+                        "stringValue": "2013-08-18T00:00:00",
+                    },
                     {"key": "type", "stringValue": "Schedule"},
-                ]}]
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_convert_df_to_api_with_name(self):
@@ -84,15 +98,24 @@ class TestTranslatePipelineDefinitions(u
                 }
             ]}""")
         actual = translator.definition_to_api_objects(definition)
-        api = [{"name": "OVERRIDE-NAME", "id": "MySchedule",
+        api = [
+            {
+                "name": "OVERRIDE-NAME",
+                "id": "MySchedule",
                 "fields": [
-                    {"key": "endDateTime",
-                     "stringValue": "2013-08-19T00:00:00"},
+                    {
+                        "key": "endDateTime",
+                        "stringValue": "2013-08-19T00:00:00",
+                    },
                     {"key": "period", "stringValue": "1 day"},
-                    {"key": "startDateTime",
-                     "stringValue": "2013-08-18T00:00:00"},
+                    {
+                        "key": "startDateTime",
+                        "stringValue": "2013-08-18T00:00:00",
+                    },
                     {"key": "type", "stringValue": "Schedule"},
-                ]}]
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_objects_key_is_missing_raise_error(self):
@@ -125,13 +148,18 @@ class TestTranslatePipelineDefinitions(u
             }
         ]}""")
         actual = translator.definition_to_api_objects(definition)
-        api = [{"name": "Foo", "id": "emrActivity",
+        api = [
+            {
+                "name": "Foo",
+                "id": "emrActivity",
                 "fields": [
                     {"key": "step", "stringValue": "s3://foo1"},
                     {"key": "step", "stringValue": "s3://foo2"},
                     {"key": "step", "stringValue": "s3://foo3"},
-                    {"key": "type", "stringValue": "EmrActivity"}
-                ]}]
+                    {"key": "type", "stringValue": "EmrActivity"},
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_value_with_refs(self):
@@ -144,53 +172,84 @@ class TestTranslatePipelineDefinitions(u
             }
         ]}""")
         actual = translator.definition_to_api_objects(definition)
-        api = [{"name": "Foo", "id": "emrActivity",
+        api = [
+            {
+                "name": "Foo",
+                "id": "emrActivity",
                 "fields": [
                     {"key": "step", "stringValue": "s3://foo1"},
                     {"key": "step", "refValue": "otherValue"},
                     {"key": "step", "stringValue": "s3://foo3"},
-                    {"key": "type", "stringValue": "EmrActivity"}
-                ]}]
+                    {"key": "type", "stringValue": "EmrActivity"},
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     # These tests check the API -> DF conversion.
     def test_api_to_df(self):
-        api = {"pipelineObjects": [
-            {"name": "S3ToS3Copy", "id": "S3ToS3Copy",
-                "fields": [{"key": "type", "stringValue": "CopyActivity"},
-                           {"key": "schedule", "refValue": "CopyPeriod"},
-                           {"key": "input", "refValue": "InputData"},
-                           {"key": "output", "refValue": "OutputData"}]}]}
+        api = {
+            "pipelineObjects": [
+                {
+                    "name": "S3ToS3Copy",
+                    "id": "S3ToS3Copy",
+                    "fields": [
+                        {"key": "type", "stringValue": "CopyActivity"},
+                        {"key": "schedule", "refValue": "CopyPeriod"},
+                        {"key": "input", "refValue": "InputData"},
+                        {"key": "output", "refValue": "OutputData"},
+                    ],
+                }
+            ]
+        }
         definition = translator.api_to_definition(api)
-        self.assertEqual(definition, {
-            'objects': [{
-                'id': 'S3ToS3Copy',
-                'name': 'S3ToS3Copy',
-                'type': 'CopyActivity',
-                'schedule': {'ref': 'CopyPeriod'},
-                'input': {'ref': 'InputData'},
-                'output': {'ref': 'OutputData'}
-            }]
-        })
+        self.assertEqual(
+            definition,
+            {
+                'objects': [
+                    {
+                        'id': 'S3ToS3Copy',
+                        'name': 'S3ToS3Copy',
+                        'type': 'CopyActivity',
+                        'schedule': {'ref': 'CopyPeriod'},
+                        'input': {'ref': 'InputData'},
+                        'output': {'ref': 'OutputData'},
+                    }
+                ]
+            },
+        )
 
     def test_api_to_df_with_dupe_keys(self):
         # Duplicate keys should be aggregated into a list.
-        api = {"pipelineObjects": [
-            {"name": "S3ToS3Copy", "id": "S3ToS3Copy",
-                "fields": [{"key": "type", "stringValue": "CopyActivity"},
-                           {"key": "schedule", "refValue": "CopyPeriod"},
-                           {"key": "script", "stringValue": "value1"},
-                           {"key": "script", "stringValue": "value2"}]}]}
+        api = {
+            "pipelineObjects": [
+                {
+                    "name": "S3ToS3Copy",
+                    "id": "S3ToS3Copy",
+                    "fields": [
+                        {"key": "type", "stringValue": "CopyActivity"},
+                        {"key": "schedule", "refValue": "CopyPeriod"},
+                        {"key": "script", "stringValue": "value1"},
+                        {"key": "script", "stringValue": "value2"},
+                    ],
+                }
+            ]
+        }
         definition = translator.api_to_definition(api)
-        self.assertEqual(definition, {
-            'objects': [{
-                'id': 'S3ToS3Copy',
-                'name': 'S3ToS3Copy',
-                'type': 'CopyActivity',
-                'schedule': {'ref': 'CopyPeriod'},
-                'script': ['value1', 'value2'],
-            }]
-        })
+        self.assertEqual(
+            definition,
+            {
+                'objects': [
+                    {
+                        'id': 'S3ToS3Copy',
+                        'name': 'S3ToS3Copy',
+                        'type': 'CopyActivity',
+                        'schedule': {'ref': 'CopyPeriod'},
+                        'script': ['value1', 'value2'],
+                    }
+                ]
+            },
+        )
 
     def test_df_to_api_with_parameter_objects_missing(self):
         definition = self.load_def("""{"objects": [
@@ -236,15 +295,19 @@ class TestTranslatePipelineDefinitions(u
             }
             ]}""")
         actual = translator.definition_to_api_parameters(definition)
-        api = [{"id": "myOccurrenceNumber",
+        api = [
+            {
+                "id": "myOccurrenceNumber",
                 "attributes": [
-                    {"key": "description",
-                     "stringValue": "Number of pipeline runs"},
-                    {"key": "max",
-                     "stringValue": "24"},
-                    {"key": "type",
-                     "stringValue": "Integer"}
-                ]}]
+                    {
+                        "key": "description",
+                        "stringValue": "Number of pipeline runs",
+                    },
+                    {"key": "max", "stringValue": "24"},
+                    {"key": "type", "stringValue": "Integer"},
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_df_to_api_with_parameter_values(self):
@@ -254,8 +317,10 @@ class TestTranslatePipelineDefinitions(u
             }
             }""")
         actual = translator.definition_to_parameter_values(definition)
-        api = [{"id": "myMaximumRetries", "stringValue": "2"},
-               {"id": "myOccurrenceNumber", "stringValue": "3"}]
+        api = [
+            {"id": "myMaximumRetries", "stringValue": "2"},
+            {"id": "myOccurrenceNumber", "stringValue": "3"},
+        ]
         self.assertEqual(actual, api)
 
     def test_df_to_api_with_parameter_objects_array(self):
@@ -268,17 +333,17 @@ class TestTranslatePipelineDefinitions(u
             }
             ]}""")
         actual = translator.definition_to_api_parameters(definition)
-        api = [{"id": "myOccurrenceNumber",
+        api = [
+            {
+                "id": "myOccurrenceNumber",
                 "attributes": [
-                    {"key": "description",
-                     "stringValue": "part1"},
-                    {"key": "description",
-                     "stringValue": "part2"},
-                    {"key": "max",
-                     "stringValue": "24"},
-                    {"key": "type",
-                     "stringValue": "Integer"}
-                ]}]
+                    {"key": "description", "stringValue": "part1"},
+                    {"key": "description", "stringValue": "part2"},
+                    {"key": "max", "stringValue": "24"},
+                    {"key": "type", "stringValue": "Integer"},
+                ],
+            }
+        ]
         self.assertEqual(actual, api)
 
     def test_df_to_api_with_parameter_values_array(self):
@@ -288,85 +353,118 @@ class TestTranslatePipelineDefinitions(u
             }
             }""")
         actual = translator.definition_to_parameter_values(definition)
-        api = [{"id": "myMaximumRetries", "stringValue": "value1"},
-               {"id": "myMaximumRetries", "stringValue": "value2"},
-               {"id": "myOccurrenceNumber", "stringValue": "3"}]
+        api = [
+            {"id": "myMaximumRetries", "stringValue": "value1"},
+            {"id": "myMaximumRetries", "stringValue": "value2"},
+            {"id": "myOccurrenceNumber", "stringValue": "3"},
+        ]
         self.assertEqual(actual, api)
 
     def test_api_to_df_with_parameter_objects_and_values(self):
         # Tests for proper handling of parameter value arrays as well
-        api = {"parameterObjects": [
-            {"attributes": [
-                {"key": "max", "stringValue": "24"},
-                {"key": "description",
-                 "stringValue": "Number of pipeline runs"},
-                {"key": "type", "stringValue": "Integer"}],
-             "id": "myOccurrenceNumber"},
-            {"attributes": [
-                {"key": "max", "stringValue": "3"},
-                {"key": "description", "stringValue": "number of retires"},
-                {"key": "type", "stringValue": "Integer"}],
-             "id": "myMaximumRetries"}],
+        api = {
+            "parameterObjects": [
+                {
+                    "attributes": [
+                        {"key": "max", "stringValue": "24"},
+                        {
+                            "key": "description",
+                            "stringValue": "Number of pipeline runs",
+                        },
+                        {"key": "type", "stringValue": "Integer"},
+                    ],
+                    "id": "myOccurrenceNumber",
+                },
+                {
+                    "attributes": [
+                        {"key": "max", "stringValue": "3"},
+                        {
+                            "key": "description",
+                            "stringValue": "number of retires",
+                        },
+                        {"key": "type", "stringValue": "Integer"},
+                    ],
+                    "id": "myMaximumRetries",
+                },
+            ],
             "parameterValues": [
                 {"id": "myOccurrenceNumber", "stringValue": "4"},
                 {"id": "myMaximumRetries", "stringValue": "2"},
-                {"id": "myMaximumRetries", "stringValue": "3"}],
+                {"id": "myMaximumRetries", "stringValue": "3"},
+            ],
             "pipelineObjects": [
-                {"fields": [
-                    {"key": "startDateTime",
-                        "stringValue": "2011-01-01T00:00:00"},
-                    {"key": "occurrences",
-                        "stringValue": "#{myOccurrenceNumber}"},
-                    {"key": "period",
-                        "stringValue": "1 YEAR"},
-                    {"key": "type",
-                        "stringValue": "Schedule"}],
+                {
+                    "fields": [
+                        {
+                            "key": "startDateTime",
+                            "stringValue": "2011-01-01T00:00:00",
+                        },
+                        {
+                            "key": "occurrences",
+                            "stringValue": "#{myOccurrenceNumber}",
+                        },
+                        {"key": "period", "stringValue": "1 YEAR"},
+                        {"key": "type", "stringValue": "Schedule"},
+                    ],
                     "id": "CopyPeriod",
-                    "name": "CopyPeriod"},
-                {"fields": [
-                    {"key": "schedule", "refValue": "CopyPeriod"},
-                    {"key": "retryDelay", "stringValue": "1 MINUTE"},
-                    {"key": "command", "stringValue": "false"},
-                    {"key": "maximumRetries",
-                        "stringValue": "#{myMaximumRetries}"},
-                    {"key": "workerGroup", "stringValue": "$PIPELINE_ID"},
-                    {"key": "type", "stringValue": "ShellCommandActivity"}],
+                    "name": "CopyPeriod",
+                },
+                {
+                    "fields": [
+                        {"key": "schedule", "refValue": "CopyPeriod"},
+                        {"key": "retryDelay", "stringValue": "1 MINUTE"},
+                        {"key": "command", "stringValue": "false"},
+                        {
+                            "key": "maximumRetries",
+                            "stringValue": "#{myMaximumRetries}",
+                        },
+                        {"key": "workerGroup", "stringValue": "$PIPELINE_ID"},
+                        {"key": "type", "stringValue": "ShellCommandActivity"},
+                    ],
                     "id": "ShellCommand",
-                    "name": "ShellCommand"}]}
-        expected = {"parameters": [
-            {
-                "max": "24",
-                "type": "Integer",
-                "id": "myOccurrenceNumber",
-                "description": "Number of pipeline runs"},
-            {
-                "max": "3",
-                "type": "Integer",
-                "id": "myMaximumRetries",
-                "description": "number of retires"}
-        ], "objects": [
-            {
-                "name": "CopyPeriod",
-                "period": "1 YEAR",
-                "occurrences": "#{myOccurrenceNumber}",
-                "startDateTime": "2011-01-01T00:00:00",
-                "type": "Schedule",
-                "id": "CopyPeriod"
-            }, {
-                "name": "ShellCommand",
-                "schedule": {"ref": "CopyPeriod"},
-                "retryDelay": "1 MINUTE",
-                "workerGroup": "$PIPELINE_ID",
-                "command": "false",
-                "type": "ShellCommandActivity",
-                "id": "ShellCommand",
-                "maximumRetries": "#{myMaximumRetries}"
-            }
-        ], "values":
-            {
+                    "name": "ShellCommand",
+                },
+            ],
+        }
+        expected = {
+            "parameters": [
+                {
+                    "max": "24",
+                    "type": "Integer",
+                    "id": "myOccurrenceNumber",
+                    "description": "Number of pipeline runs",
+                },
+                {
+                    "max": "3",
+                    "type": "Integer",
+                    "id": "myMaximumRetries",
+                    "description": "number of retires",
+                },
+            ],
+            "objects": [
+                {
+                    "name": "CopyPeriod",
+                    "period": "1 YEAR",
+                    "occurrences": "#{myOccurrenceNumber}",
+                    "startDateTime": "2011-01-01T00:00:00",
+                    "type": "Schedule",
+                    "id": "CopyPeriod",
+                },
+                {
+                    "name": "ShellCommand",
+                    "schedule": {"ref": "CopyPeriod"},
+                    "retryDelay": "1 MINUTE",
+                    "workerGroup": "$PIPELINE_ID",
+                    "command": "false",
+                    "type": "ShellCommandActivity",
+                    "id": "ShellCommand",
+                    "maximumRetries": "#{myMaximumRetries}",
+                },
+            ],
+            "values": {
                 "myMaximumRetries": ["2", "3"],
-                "myOccurrenceNumber": "4"
-            }
+                "myOccurrenceNumber": "4",
+            },
         }
         actual = translator.api_to_definition(api)
         self.assertEqual(expected, actual)
diff -pruN 2.23.6-1/tests/unit/customizations/dlm/test_create_default_role.py 2.31.35-1/tests/unit/customizations/dlm/test_create_default_role.py
--- 2.23.6-1/tests/unit/customizations/dlm/test_create_default_role.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dlm/test_create_default_role.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,49 +10,52 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, BaseAWSCommandParamsTest, unittest
-from botocore.compat import json
 import botocore.session
-from awscli.customizations.dlm.iam import IAM
+from botocore.compat import json
 
-from awscli.customizations.dlm.constants \
-    import LIFECYCLE_DEFAULT_ROLE_NAME, \
-    LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY, \
-    LIFECYCLE_DEFAULT_ROLE_NAME_AMI, \
-    LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME, \
-    LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI, \
-    RESOURCE_TYPE_SNAPSHOT, \
-    RESOURCE_TYPE_IMAGE
+from awscli.customizations.dlm.constants import (
+    LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME,
+    LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI,
+    LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY,
+    LIFECYCLE_DEFAULT_ROLE_NAME,
+    LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
+    RESOURCE_TYPE_IMAGE,
+    RESOURCE_TYPE_SNAPSHOT,
+)
+from awscli.customizations.dlm.iam import IAM
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 class TestCreateDefaultRole(BaseAWSCommandParamsTest):
     prefix = 'dlm create-default-role'
-    LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN = \
-        "arn:aws:iam::aws:policy/service-role/%s" \
+    LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN = (
+        "arn:aws:iam::aws:policy/service-role/%s"
         % (LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME)
-    LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN = \
-        "arn:aws:iam::aws:policy/service-role/%s" \
+    )
+    LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN = (
+        "arn:aws:iam::aws:policy/service-role/%s"
         % (LIFECYCLE_DEFAULT_MANAGED_POLICY_NAME_AMI)
+    )
 
     # Call to attach policy to role
-    def assert_attached_policy_to_role(self, expected_policy_arn,
-                                       expected_role):
+    def assert_attached_policy_to_role(
+        self, expected_policy_arn, expected_role
+    ):
         self.assertEqual(self.operations_called[2][0].name, 'AttachRolePolicy')
-        self.assertEqual(self.operations_called[2][1]['PolicyArn'],
-                         expected_policy_arn)
-        self.assertEqual(self.operations_called[2][1]['RoleName'],
-                         expected_role)
+        self.assertEqual(
+            self.operations_called[2][1]['PolicyArn'], expected_policy_arn
+        )
+        self.assertEqual(
+            self.operations_called[2][1]['RoleName'], expected_role
+        )
 
     # Call to create default role
     def assert_create_default_role(self, role, assume_policy):
         self.assertEqual(self.operations_called[1][0].name, 'CreateRole')
-        self.assertEqual(
-            self.operations_called[1][1]['RoleName'],
-            role
-        )
+        self.assertEqual(self.operations_called[1][1]['RoleName'], role)
         self.assertEqual(
             self.operations_called[1][1]['AssumeRolePolicyDocument'],
-            json.dumps(assume_policy)
+            json.dumps(assume_policy),
         )
 
     # Use case: Default role exists
@@ -68,8 +71,10 @@ class TestCreateDefaultRole(BaseAWSComma
 
         # Call to check if default lifecycle role exists
         self.assertEqual(self.operations_called[0][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         LIFECYCLE_DEFAULT_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'],
+            LIFECYCLE_DEFAULT_ROLE_NAME,
+        )
 
     # Use case: Default role does not exist.
     # Managed Policy exists.
@@ -78,10 +83,8 @@ class TestCreateDefaultRole(BaseAWSComma
     # attaching policy to role
     # create-default-role is executed without any resource type parameter,
     # should default to snapshot
-    @mock.patch('awscli.customizations.dlm.'
-                'iam.IAM.check_if_role_exists')
+    @mock.patch('awscli.customizations.dlm.' 'iam.IAM.check_if_role_exists')
     def test_default_role_not_exist(self, role_exists_patch):
-
         role_exists_patch.return_value = False
 
         self.run_cmd(self.prefix, expected_rc=0)
@@ -89,25 +92,33 @@ class TestCreateDefaultRole(BaseAWSComma
 
         # Call to check if managed policy exists.
         self.assertEqual(self.operations_called[0][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[0][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[0][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
-        self.assert_create_default_role(LIFECYCLE_DEFAULT_ROLE_NAME,
-                                        LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY)
+        self.assert_create_default_role(
+            LIFECYCLE_DEFAULT_ROLE_NAME, LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY
+        )
         self.assert_attached_policy_to_role(
             self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
-            LIFECYCLE_DEFAULT_ROLE_NAME)
+            LIFECYCLE_DEFAULT_ROLE_NAME,
+        )
 
         # Call to get policy's default version id
         self.assertEqual(self.operations_called[3][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[3][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[3][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
         # Call to get detailed policy to
         # construct result with policy permissions
         self.assertEqual(self.operations_called[4][0].name, 'GetPolicyVersion')
-        self.assertEqual(self.operations_called[4][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[4][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
     # Use case: Default role exists
     # Expected results: No Operation performed for creation,
@@ -121,8 +132,10 @@ class TestCreateDefaultRole(BaseAWSComma
 
         # Call to check if default lifecycle role exists
         self.assertEqual(self.operations_called[0][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         LIFECYCLE_DEFAULT_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'],
+            LIFECYCLE_DEFAULT_ROLE_NAME,
+        )
 
     # Use case: Default role does not exist.
     # Managed Policy exists.
@@ -130,38 +143,45 @@ class TestCreateDefaultRole(BaseAWSComma
     # existence of policy, creation of role and then
     # attaching policy to role
     # create-default-role is executed resource type = snapshot
-    @mock.patch('awscli.customizations.dlm.'
-                'iam.IAM.check_if_role_exists')
+    @mock.patch('awscli.customizations.dlm.' 'iam.IAM.check_if_role_exists')
     def test_default_role_not_exist_snapshot(self, role_exists_patch):
-
         role_exists_patch.return_value = False
 
-        self.run_cmd(self.prefix + " --resource-type=%s"
-                     % (RESOURCE_TYPE_SNAPSHOT),
-                     expected_rc=0)
+        self.run_cmd(
+            self.prefix + " --resource-type=%s" % (RESOURCE_TYPE_SNAPSHOT),
+            expected_rc=0,
+        )
         self.assertEqual(len(self.operations_called), 5)
 
         # Call to check if managed policy exists.
         self.assertEqual(self.operations_called[0][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[0][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[0][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
-        self.assert_create_default_role(LIFECYCLE_DEFAULT_ROLE_NAME,
-                                        LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY)
+        self.assert_create_default_role(
+            LIFECYCLE_DEFAULT_ROLE_NAME, LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY
+        )
         self.assert_attached_policy_to_role(
             self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
-            LIFECYCLE_DEFAULT_ROLE_NAME)
+            LIFECYCLE_DEFAULT_ROLE_NAME,
+        )
 
         # Call to get policy's default version id
         self.assertEqual(self.operations_called[3][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[3][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[3][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
         # Call to get detailed policy to
         # construct result with policy permissions
         self.assertEqual(self.operations_called[4][0].name, 'GetPolicyVersion')
-        self.assertEqual(self.operations_called[4][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN)
+        self.assertEqual(
+            self.operations_called[4][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_ARN,
+        )
 
     # Use case: Default role exists for AMI
     # Expected results: No Operation performed for creation,
@@ -175,8 +195,10 @@ class TestCreateDefaultRole(BaseAWSComma
 
         # Call to check if default lifecycle role exists
         self.assertEqual(self.operations_called[0][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         LIFECYCLE_DEFAULT_ROLE_NAME_AMI)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'],
+            LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
+        )
 
     # Use case: Default role does not exist for AMI.
     # AMI Managed Policy exists.
@@ -184,66 +206,75 @@ class TestCreateDefaultRole(BaseAWSComma
     # existence of policy, creation of role and then
     # attaching policy to role
     # create-default-role is executed with resource type = image
-    @mock.patch('awscli.customizations.dlm.'
-                'iam.IAM.check_if_role_exists')
+    @mock.patch('awscli.customizations.dlm.' 'iam.IAM.check_if_role_exists')
     def test_default_role_not_exist_ami(self, role_exists_patch):
-
         role_exists_patch.return_value = False
 
-        self.run_cmd(self.prefix + " --resource-type=%s"
-                     % (RESOURCE_TYPE_IMAGE),
-                     expected_rc=0)
+        self.run_cmd(
+            self.prefix + " --resource-type=%s" % (RESOURCE_TYPE_IMAGE),
+            expected_rc=0,
+        )
         self.assertEqual(len(self.operations_called), 5)
 
         # Call to check if managed policy exists.
         self.assertEqual(self.operations_called[0][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[0][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN)
+        self.assertEqual(
+            self.operations_called[0][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN,
+        )
 
-        self.assert_create_default_role(LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
-                                        LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY)
+        self.assert_create_default_role(
+            LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
+            LIFECYCLE_DEFAULT_ROLE_ASSUME_POLICY,
+        )
         self.assert_attached_policy_to_role(
             self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN,
-            LIFECYCLE_DEFAULT_ROLE_NAME_AMI)
+            LIFECYCLE_DEFAULT_ROLE_NAME_AMI,
+        )
 
         # Call to get policy's default version id
         self.assertEqual(self.operations_called[3][0].name, 'GetPolicy')
-        self.assertEqual(self.operations_called[3][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN)
+        self.assertEqual(
+            self.operations_called[3][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN,
+        )
 
         # Call to get detailed policy to
         # construct result with policy permissions
         self.assertEqual(self.operations_called[4][0].name, 'GetPolicyVersion')
-        self.assertEqual(self.operations_called[4][1]['PolicyArn'],
-                         self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN)
+        self.assertEqual(
+            self.operations_called[4][1]['PolicyArn'],
+            self.LIFECYCLE_DEFAULT_MANAGED_POLICY_AMI_ARN,
+        )
 
 
 class TestCreateDefaultRoleUnitTest(unittest.TestCase):
-
     def setUp(self):
         self.iam_client = mock.Mock()
-        self.iam_client.exceptions.NoSuchEntityException = \
-            botocore.session\
-            .get_session()\
-            .create_client('iam', region_name="us-east-1")\
+        self.iam_client.exceptions.NoSuchEntityException = (
+            botocore.session.get_session()
+            .create_client('iam', region_name="us-east-1")
             .exceptions.NoSuchEntityException
+        )
         self.iam = IAM(self.iam_client)
 
     def test_check_if_role_exists_raises_client_error(self):
-        self.iam_client.get_role.side_effect = \
+        self.iam_client.get_role.side_effect = (
             self.iam_client.exceptions.NoSuchEntityException(
                 error_response={'Error': {'Code': 'NoSuchEntityError'}},
                 operation_name='GetRole',
             )
+        )
 
         self.assertFalse(self.iam.check_if_role_exists('role'))
 
     def test_check_if_policy_exists_raises_client_error(self):
-        self.iam_client.get_policy.side_effect = \
+        self.iam_client.get_policy.side_effect = (
             self.iam_client.exceptions.NoSuchEntityException(
                 error_response={'Error': {'Code': 'NoSuchEntityError'}},
                 operation_name='GetPolicy',
             )
+        )
         self.assertFalse(self.iam.check_if_policy_exists('policy'))
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_extractor.py 2.31.35-1/tests/unit/customizations/dynamodb/test_extractor.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_extractor.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_extractor.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,7 @@ from awscli.customizations.dynamodb.extr
 from awscli.testutils import unittest
 
 
-class FakeParser(object):
+class FakeParser:
     def __init__(self, parsed_result):
         self.parsed_result = parsed_result
 
@@ -92,11 +92,12 @@ class TestExtractor(unittest.TestCase):
 
     def test_represent_comparator(self):
         parsed_result = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'spam'},
-                {'type': 'literal', 'value': 7}
-            ]
+                {'type': 'literal', 'value': 7},
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -113,15 +114,23 @@ class TestExtractor(unittest.TestCase):
         parsed_result = {
             'type': 'or_expression',
             'children': [
-                {'type': 'comparator', 'value': 'eq', 'children': [
-                    {'type': 'identifier', 'value': 'spam'},
-                    {'type': 'literal', 'value': 7}
-                ]},
-                {'type': 'comparator', 'value': 'eq', 'children': [
-                    {'type': 'identifier', 'value': 'eggs'},
-                    {'type': 'literal', 'value': 6}
-                ]}
-            ]
+                {
+                    'type': 'comparator',
+                    'value': 'eq',
+                    'children': [
+                        {'type': 'identifier', 'value': 'spam'},
+                        {'type': 'literal', 'value': 7},
+                    ],
+                },
+                {
+                    'type': 'comparator',
+                    'value': 'eq',
+                    'children': [
+                        {'type': 'identifier', 'value': 'eggs'},
+                        {'type': 'literal', 'value': 6},
+                    ],
+                },
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -138,15 +147,23 @@ class TestExtractor(unittest.TestCase):
         parsed_result = {
             'type': 'and_expression',
             'children': [
-                {'type': 'comparator', 'value': 'eq', 'children': [
-                    {'type': 'identifier', 'value': 'spam'},
-                    {'type': 'literal', 'value': 7}
-                ]},
-                {'type': 'comparator', 'value': 'eq', 'children': [
-                    {'type': 'identifier', 'value': 'eggs'},
-                    {'type': 'literal', 'value': 6}
-                ]}
-            ]
+                {
+                    'type': 'comparator',
+                    'value': 'eq',
+                    'children': [
+                        {'type': 'identifier', 'value': 'spam'},
+                        {'type': 'literal', 'value': 7},
+                    ],
+                },
+                {
+                    'type': 'comparator',
+                    'value': 'eq',
+                    'children': [
+                        {'type': 'identifier', 'value': 'eggs'},
+                        {'type': 'literal', 'value': 6},
+                    ],
+                },
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -164,11 +181,14 @@ class TestExtractor(unittest.TestCase):
             'type': 'in_expression',
             'children': [
                 {'type': 'identifier', 'value': 'spam'},
-                {'type': 'sequence', 'children': [
-                    {'type': 'literal', 'value': 1},
-                    {'type': 'literal', 'value': 2},
-                ]}
-            ]
+                {
+                    'type': 'sequence',
+                    'children': [
+                        {'type': 'literal', 'value': 1},
+                        {'type': 'literal', 'value': 2},
+                    ],
+                },
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -185,11 +205,15 @@ class TestExtractor(unittest.TestCase):
         parsed_result = {
             'type': 'not_expression',
             'children': [
-                {'type': 'comparator', 'value': 'ne', 'children': [
-                    {'type': 'identifier', 'value': 'spam'},
-                    {'type': 'literal', 'value': 7}
-                ]},
-            ]
+                {
+                    'type': 'comparator',
+                    'value': 'ne',
+                    'children': [
+                        {'type': 'identifier', 'value': 'spam'},
+                        {'type': 'literal', 'value': 7},
+                    ],
+                },
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -206,11 +230,15 @@ class TestExtractor(unittest.TestCase):
         parsed_result = {
             'type': 'subexpression',
             'children': [
-                {'type': 'comparator', 'value': 'lte', 'children': [
-                    {'type': 'identifier', 'value': 'spam'},
-                    {'type': 'literal', 'value': 7}
-                ]},
-            ]
+                {
+                    'type': 'comparator',
+                    'value': 'lte',
+                    'children': [
+                        {'type': 'identifier', 'value': 'spam'},
+                        {'type': 'literal', 'value': 7},
+                    ],
+                },
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -230,7 +258,7 @@ class TestExtractor(unittest.TestCase):
                 {'type': 'identifier', 'value': 'spam'},
                 {'type': 'literal', 'value': 1},
                 {'type': 'literal', 'value': 2},
-            ]
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -245,11 +273,12 @@ class TestExtractor(unittest.TestCase):
 
     def test_represent_function(self):
         parsed_result = {
-            'type': 'function', 'value': 'myfunction',
+            'type': 'function',
+            'value': 'myfunction',
             'children': [
                 {'type': 'identifier', 'value': 'spam'},
                 {'type': 'literal', 'value': 1},
-            ]
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -268,7 +297,7 @@ class TestExtractor(unittest.TestCase):
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -283,10 +312,11 @@ class TestExtractor(unittest.TestCase):
 
     def test_represent_index_identifier(self):
         parsed_result = {
-            'type': 'index_identifier', 'value': Decimal(0),
+            'type': 'index_identifier',
+            'value': Decimal(0),
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
-            ]
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -303,11 +333,15 @@ class TestExtractor(unittest.TestCase):
         parsed_result = {
             'type': 'path_identifier',
             'children': [
-                {'type': 'index_identifier', 'value': Decimal(0), 'children': [
-                    {'type': 'identifier', 'value': 'foo', 'children': []},
-                ]},
+                {
+                    'type': 'index_identifier',
+                    'value': Decimal(0),
+                    'children': [
+                        {'type': 'identifier', 'value': 'foo', 'children': []},
+                    ],
+                },
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         parser = FakeParser(parsed_result)
         extractor = AttributeExtractor(parser)
@@ -319,4 +353,3 @@ class TestExtractor(unittest.TestCase):
             'substitution_count': 2,
         }
         self.assertEqual(result, expected)
-
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_formatter.py 2.31.35-1/tests/unit/customizations/dynamodb/test_formatter.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_formatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_formatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,9 +16,9 @@ from decimal import Decimal
 import jmespath
 import pytest
 
-from awscli.formatter import YAMLFormatter
 from awscli.customizations.dynamodb.formatter import DynamoYAMLDumper
 from awscli.customizations.dynamodb.types import Binary
+from awscli.formatter import YAMLFormatter
 from awscli.testutils import capture_output
 
 
@@ -52,14 +52,15 @@ from awscli.testutils import capture_out
             'expected': '!!binary "roWL1w=="\n',
             'query': 'mykey',
         },
-    ]
+    ],
 )
 def test_yaml_formatter_with_dynamo_dumper(case):
     compiled_query = None
     if case.get('query') is not None:
         compiled_query = jmespath.compile(case['query'])
     formatter = YAMLFormatter(
-        Namespace(query=compiled_query), DynamoYAMLDumper())
+        Namespace(query=compiled_query), DynamoYAMLDumper()
+    )
     with capture_output() as output:
         formatter('fake-command-name', case['given'])
     assert output.stdout.getvalue() == case['expected']
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_lexer.py 2.31.35-1/tests/unit/customizations/dynamodb/test_lexer.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_lexer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_lexer.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,11 +15,11 @@ from decimal import Decimal
 import pytest
 
 from awscli.customizations.dynamodb.exceptions import (
-    LexerError, EmptyExpressionError,
+    EmptyExpressionError,
+    LexerError,
 )
 from awscli.customizations.dynamodb.lexer import Lexer
 
-
 STRING_TOKENS = ['and', 'between', 'in', 'or', 'not']
 
 
@@ -38,25 +38,31 @@ STRING_TOKENS = ['and', 'between', 'in',
         ('1.01E6', [{'type': 'literal', 'value': Decimal('1.01e6')}]),
         ('1.01e+6', [{'type': 'literal', 'value': Decimal('1.01e6')}]),
         ('1.01e-6', [{'type': 'literal', 'value': Decimal('1.01e-6')}]),
-        ("foo, 'bar', \"baz\"", [
-            {'type': 'unquoted_identifier', 'value': 'foo'},
-            {'type': 'comma', 'value': ','},
-            {'type': 'identifier', 'value': 'bar'},
-            {'type': 'comma', 'value': ','},
-            {'type': 'literal', 'value': 'baz'},
-        ]),
+        (
+            "foo, 'bar', \"baz\"",
+            [
+                {'type': 'unquoted_identifier', 'value': 'foo'},
+                {'type': 'comma', 'value': ','},
+                {'type': 'identifier', 'value': 'bar'},
+                {'type': 'comma', 'value': ','},
+                {'type': 'literal', 'value': 'baz'},
+            ],
+        ),
         ('b"4pyT"', [{'type': 'literal', 'value': b'\xe2\x9c\x93'}]),
         ('boo', [{'type': 'unquoted_identifier', 'value': 'boo'}]),
-        ('b[0]', [
-            {'type': 'unquoted_identifier', 'value': 'b'},
-            {'type': 'lbracket', 'value': '['},
-            {'type': 'literal', 'value': Decimal('0')},
-            {'type': 'rbracket', 'value': ']'},
-        ]),
+        (
+            'b[0]',
+            [
+                {'type': 'unquoted_identifier', 'value': 'b'},
+                {'type': 'lbracket', 'value': '['},
+                {'type': 'literal', 'value': Decimal('0')},
+                {'type': 'rbracket', 'value': ']'},
+            ],
+        ),
         ('true', [{'type': 'literal', 'value': True}]),
         ('false', [{'type': 'literal', 'value': False}]),
         ('null', [{'type': 'literal', 'value': None}]),
-    ]
+    ],
 )
 def test_lexer(case):
     LexTester().assert_tokens(case[0], case[1])
@@ -80,11 +86,12 @@ def test_lexer(case):
         ('<', 'lt'),
         ('<=', 'lte'),
         ('<>', 'ne'),
-    ]
+    ],
 )
 def test_simple_tokens(token, expected_token_type):
     LexTester().assert_tokens(
-        token, [{'type': expected_token_type, 'value': token}])
+        token, [{'type': expected_token_type, 'value': token}]
+    )
 
 
 @pytest.mark.parametrize("token", STRING_TOKENS)
@@ -95,13 +102,15 @@ def test_string_token(token):
 @pytest.mark.parametrize("token", STRING_TOKENS)
 def test_string_token_upper(token):
     LexTester().assert_tokens(
-        token.upper(), [{'type': token, 'value': token.upper()}])
+        token.upper(), [{'type': token, 'value': token.upper()}]
+    )
 
 
 @pytest.mark.parametrize("token", STRING_TOKENS)
 def test_string_token_capitalize(token):
     LexTester().assert_tokens(
-        token.capitalize(), [{'type': token, 'value': token.capitalize()}])
+        token.capitalize(), [{'type': token, 'value': token.capitalize()}]
+    )
 
 
 def test_lexer_empty_error():
@@ -124,13 +133,13 @@ def test_lexer_empty_error():
         ('b"&"', 'b"&"\n^'),
         # Invalid padding
         ('b"898989;;"', 'b"898989;;"\n^'),
-    ]
+    ],
 )
 def test_lexer_error(expression, error_part):
     LexTester().assert_lex_error(expression, error_part)
 
 
-class LexTester(object):
+class LexTester:
     def __init__(self):
         self.lexer = Lexer()
 
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_paginatorfix.py 2.31.35-1/tests/unit/customizations/dynamodb/test_paginatorfix.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_paginatorfix.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_paginatorfix.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,9 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+from awscli.customizations.dynamodb.paginatorfix import (
+    parse_last_evaluated_key_binary,
+)
 from awscli.testutils import unittest
-from awscli.customizations.dynamodb.paginatorfix import \
-    parse_last_evaluated_key_binary
 
 
 class TestParseLastEvaluatedKeyBinary(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_parser.py 2.31.35-1/tests/unit/customizations/dynamodb/test_parser.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_parser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_parser.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,14 +13,16 @@
 from decimal import Decimal
 
 from awscli.customizations.dynamodb.exceptions import (
-    UnexpectedTokenError, UnknownExpressionError, InvalidLiteralValueError,
     EmptyExpressionError,
+    InvalidLiteralValueError,
+    UnexpectedTokenError,
+    UnknownExpressionError,
 )
 from awscli.customizations.dynamodb.parser import Parser
 from awscli.testutils import unittest
 
 
-class FakeLexer(object):
+class FakeLexer:
     def __init__(self, tokens):
         self._tokens = tokens
 
@@ -66,7 +68,7 @@ class TestParser(unittest.TestCase):
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -93,20 +95,22 @@ class TestParser(unittest.TestCase):
             'type': 'and_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -129,36 +133,40 @@ class TestParser(unittest.TestCase):
             'type': 'and_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         expected = {
             'type': 'and_expression',
             'children': [
                 left_and_expression,
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {
                             'type': 'identifier',
-                            'value': 'spam', 'children': []
+                            'value': 'spam',
+                            'children': [],
                         },
                         {'type': 'literal', 'value': 'eggs', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -188,20 +196,22 @@ class TestParser(unittest.TestCase):
             'type': 'or_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -224,36 +234,40 @@ class TestParser(unittest.TestCase):
             'type': 'or_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         expected = {
             'type': 'or_expression',
             'children': [
                 left_or_expression,
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {
                             'type': 'identifier',
-                            'value': 'spam', 'children': []
+                            'value': 'spam',
+                            'children': [],
                         },
                         {'type': 'literal', 'value': 'eggs', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -287,36 +301,40 @@ class TestParser(unittest.TestCase):
             'type': 'and_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         expected = {
             'type': 'or_expression',
             'children': [
                 left_and_expression,
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {
                             'type': 'identifier',
-                            'value': 'spam', 'children': []
+                            'value': 'spam',
+                            'children': [],
                         },
                         {'type': 'literal', 'value': 'eggs', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -333,13 +351,14 @@ class TestParser(unittest.TestCase):
             'type': 'subexpression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -360,25 +379,24 @@ class TestParser(unittest.TestCase):
             'type': 'and_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'baz', 'children': []},
                         {'type': 'literal', 'value': 'bam', 'children': []},
                     ],
                 },
-            ]
-        }
-        expected = {
-            'type': 'subexpression',
-            'children': [and_expression]
+            ],
         }
+        expected = {'type': 'subexpression', 'children': [and_expression]}
         self.assert_parse(tokens, expected)
 
     def test_parse_subexpression_unmatched_paren(self):
@@ -404,13 +422,14 @@ class TestParser(unittest.TestCase):
             'type': 'not_expression',
             'children': [
                 {
-                    'type': 'comparator', 'value': 'eq',
+                    'type': 'comparator',
+                    'value': 'eq',
                     'children': [
                         {'type': 'identifier', 'value': 'foo', 'children': []},
                         {'type': 'literal', 'value': 'bar', 'children': []},
                     ],
                 },
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -433,11 +452,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'function', 'value': 'foo',
+            'type': 'function',
+            'value': 'foo',
             'children': [
                 {'type': 'literal', 'value': 'bar', 'children': []},
                 {'type': 'literal', 'value': 'baz', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -479,14 +499,14 @@ class TestParser(unittest.TestCase):
             'children': [
                 {'type': 'literal', 'value': 'bar', 'children': []},
                 {'type': 'literal', 'value': 'baz', 'children': []},
-            ]
+            ],
         }
         expected = {
             'type': 'in_expression',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 sequence,
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -526,7 +546,7 @@ class TestParser(unittest.TestCase):
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'value': 1, 'children': []},
                 {'type': 'literal', 'value': 3, 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -571,11 +591,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'lte',
+            'type': 'comparator',
+            'value': 'lte',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'value': 8, 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -600,11 +621,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'children': [], 'value': [8, 9]},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -617,11 +639,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'children': [], 'value': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -662,11 +685,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'children': [], 'value': {8, 9}},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -749,13 +773,16 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
-                {'type': 'literal', 'children': [], 'value': {
-                    "bar": 4, "baz": 3
-                }},
-            ]
+                {
+                    'type': 'literal',
+                    'children': [],
+                    'value': {"bar": 4, "baz": 3},
+                },
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -768,11 +795,12 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'eq',
+            'type': 'comparator',
+            'value': 'eq',
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'literal', 'children': [], 'value': {}},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -854,7 +882,7 @@ class TestParser(unittest.TestCase):
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -867,10 +895,11 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'index_identifier', 'value': Decimal(0),
+            'type': 'index_identifier',
+            'value': Decimal(0),
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -898,11 +927,15 @@ class TestParser(unittest.TestCase):
         expected = {
             'type': 'path_identifier',
             'children': [
-                {'type': 'index_identifier', 'value': Decimal(0), 'children': [
-                    {'type': 'identifier', 'value': 'foo', 'children': []},
-                ]},
+                {
+                    'type': 'index_identifier',
+                    'value': Decimal(0),
+                    'children': [
+                        {'type': 'identifier', 'value': 'foo', 'children': []},
+                    ],
+                },
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -920,13 +953,16 @@ class TestParser(unittest.TestCase):
         expected = {
             'type': 'between_expression',
             'children': [
-                {'type': 'path_identifier', 'children': [
-                    {'type': 'identifier', 'value': 'foo', 'children': []},
-                    {'type': 'identifier', 'value': 'bar', 'children': []},
-                ]},
+                {
+                    'type': 'path_identifier',
+                    'children': [
+                        {'type': 'identifier', 'value': 'foo', 'children': []},
+                        {'type': 'identifier', 'value': 'bar', 'children': []},
+                    ],
+                },
                 {'type': 'literal', 'value': 1, 'children': []},
                 {'type': 'literal', 'value': 3, 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -949,16 +985,20 @@ class TestParser(unittest.TestCase):
             'children': [
                 {'type': 'literal', 'value': 'bar', 'children': []},
                 {'type': 'literal', 'value': 'baz', 'children': []},
-            ]
+            ],
         }
         expected = {
             'type': 'in_expression',
             'children': [
-                {'type': 'index_identifier', 'value': Decimal(0), 'children': [
-                    {'type': 'identifier', 'value': 'foo', 'children': []},
-                ]},
+                {
+                    'type': 'index_identifier',
+                    'value': Decimal(0),
+                    'children': [
+                        {'type': 'identifier', 'value': 'foo', 'children': []},
+                    ],
+                },
                 sequence,
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -972,14 +1012,18 @@ class TestParser(unittest.TestCase):
             {'type': 'eof', 'value': ''},
         ]
         expected = {
-            'type': 'comparator', 'value': 'gte',
+            'type': 'comparator',
+            'value': 'gte',
             'children': [
-                {'type': 'path_identifier', 'children': [
-                    {'type': 'identifier', 'value': 'foo', 'children': []},
-                    {'type': 'identifier', 'value': 'bar', 'children': []},
-                ]},
+                {
+                    'type': 'path_identifier',
+                    'children': [
+                        {'type': 'identifier', 'value': 'foo', 'children': []},
+                        {'type': 'identifier', 'value': 'bar', 'children': []},
+                    ],
+                },
                 {'type': 'literal', 'value': 8, 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
 
@@ -997,12 +1041,13 @@ class TestParser(unittest.TestCase):
             'children': [
                 {'type': 'identifier', 'value': 'foo', 'children': []},
                 {'type': 'identifier', 'value': 'bar', 'children': []},
-            ]
+            ],
         }
         expected = {
-            'type': 'sequence', 'children': [
+            'type': 'sequence',
+            'children': [
                 first,
                 {'type': 'identifier', 'value': 'baz', 'children': []},
-            ]
+            ],
         }
         self.assert_parse(tokens, expected)
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_transform.py 2.31.35-1/tests/unit/customizations/dynamodb/test_transform.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_transform.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_transform.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,7 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.model import ServiceModel, OperationModel
+from botocore.model import OperationModel, ServiceModel
 
 from awscli.customizations.dynamodb.transform import ParameterTransformer
 from awscli.testutils import unittest
@@ -33,25 +33,23 @@ class BaseTransformationTest(unittest.Te
                 'SampleOperation': {
                     'name': 'SampleOperation',
                     'input': {'shape': 'SampleOperationInputOutput'},
-                    'output': {'shape': 'SampleOperationInputOutput'}
+                    'output': {'shape': 'SampleOperationInputOutput'},
                 }
             },
             'shapes': {
                 'SampleOperationInputOutput': {
                     'type': 'structure',
-                    'members': {}
+                    'members': {},
                 },
-                'String': {
-                    'type': 'string'
-                }
-            }
+                'String': {'type': 'string'},
+            },
         }
 
     def build_models(self):
         self.service_model = ServiceModel(self.json_model)
         self.operation_model = OperationModel(
             self.json_model['operations']['SampleOperation'],
-            self.service_model
+            self.service_model,
         )
 
     def add_input_shape(self, shape):
@@ -83,34 +81,39 @@ class TestInputOutputTransformer(BaseTra
                 'type': 'structure',
                 'members': {
                     'TransformMe': {'shape': self.target_shape},
-                    'LeaveAlone': {'shape': 'String'}
-                }
+                    'LeaveAlone': {'shape': 'String'},
+                },
             }
         }
 
         self.add_input_shape(input_shape)
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'Structure': {
-                'TransformMe': self.transformed_value,
-                'LeaveAlone': self.original_value}}
+            {
+                'Structure': {
+                    'TransformMe': self.transformed_value,
+                    'LeaveAlone': self.original_value,
+                }
+            },
         )
 
     def test_transform_map(self):
         input_params = {
             'TransformMe': {'foo': self.original_value},
-            'LeaveAlone': {'foo': self.original_value}
+            'LeaveAlone': {'foo': self.original_value},
         }
 
         targeted_input_shape = {
             'TransformMe': {
                 'type': 'map',
                 'key': {'shape': 'String'},
-                'value': {'shape': self.target_shape}
+                'value': {'shape': self.target_shape},
             }
         }
 
@@ -118,7 +121,7 @@ class TestInputOutputTransformer(BaseTra
             'LeaveAlone': {
                 'type': 'map',
                 'key': {'shape': 'String'},
-                'value': {'shape': 'String'}
+                'value': {'shape': 'String'},
             }
         }
 
@@ -126,49 +129,54 @@ class TestInputOutputTransformer(BaseTra
         self.add_input_shape(untargeted_input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'TransformMe': {'foo': self.transformed_value},
-             'LeaveAlone': {'foo': self.original_value}}
+            {
+                'TransformMe': {'foo': self.transformed_value},
+                'LeaveAlone': {'foo': self.original_value},
+            },
         )
 
     def test_transform_list(self):
         input_params = {
-            'TransformMe': [
-                self.original_value, self.original_value
-            ],
-            'LeaveAlone': [
-                self.original_value, self.original_value
-            ]
+            'TransformMe': [self.original_value, self.original_value],
+            'LeaveAlone': [self.original_value, self.original_value],
         }
 
         targeted_input_shape = {
             'TransformMe': {
                 'type': 'list',
-                'member': {'shape': self.target_shape}
+                'member': {'shape': self.target_shape},
             }
         }
 
         untargeted_input_shape = {
-            'LeaveAlone': {
-                'type': 'list',
-                'member': {'shape': 'String'}
-            }
+            'LeaveAlone': {'type': 'list', 'member': {'shape': 'String'}}
         }
 
         self.add_input_shape(targeted_input_shape)
         self.add_input_shape(untargeted_input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
-            transformation=self.transformation, target_shape=self.target_shape)
+            params=input_params,
+            model=self.operation_model.input_shape,
+            transformation=self.transformation,
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'TransformMe': [self.transformed_value, self.transformed_value],
-             'LeaveAlone': [self.original_value, self.original_value]}
+            {
+                'TransformMe': [
+                    self.transformed_value,
+                    self.transformed_value,
+                ],
+                'LeaveAlone': [self.original_value, self.original_value],
+            },
         )
 
     def test_transform_nested_structure(self):
@@ -176,7 +184,7 @@ class TestInputOutputTransformer(BaseTra
             'WrapperStructure': {
                 'Structure': {
                     'TransformMe': self.original_value,
-                    'LeaveAlone': self.original_value
+                    'LeaveAlone': self.original_value,
                 }
             }
         }
@@ -186,50 +194,49 @@ class TestInputOutputTransformer(BaseTra
                 'type': 'structure',
                 'members': {
                     'TransformMe': {'shape': self.target_shape},
-                    'LeaveAlone': {'shape': 'String'}
-                }
+                    'LeaveAlone': {'shape': 'String'},
+                },
             }
         }
 
         input_shape = {
             'WrapperStructure': {
                 'type': 'structure',
-                'members': {'Structure': {'shape': 'Structure'}}}
+                'members': {'Structure': {'shape': 'Structure'}},
+            }
         }
         self.add_shape(structure_shape)
         self.add_input_shape(input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'WrapperStructure': {
-                'Structure': {'TransformMe': self.transformed_value,
-                              'LeaveAlone': self.original_value}}}
+            {
+                'WrapperStructure': {
+                    'Structure': {
+                        'TransformMe': self.transformed_value,
+                        'LeaveAlone': self.original_value,
+                    }
+                }
+            },
         )
 
     def test_transform_nested_map(self):
         input_params = {
-            'TargetedWrapperMap': {
-                'foo': {
-                    'bar': self.original_value
-                }
-            },
-            'UntargetedWrapperMap': {
-                'foo': {
-                    'bar': self.original_value
-                }
-            }
-
+            'TargetedWrapperMap': {'foo': {'bar': self.original_value}},
+            'UntargetedWrapperMap': {'foo': {'bar': self.original_value}},
         }
 
         targeted_map_shape = {
             'TransformMeMap': {
                 'type': 'map',
                 'key': {'shape': 'String'},
-                'value': {'shape': self.target_shape}
+                'value': {'shape': self.target_shape},
             }
         }
 
@@ -237,7 +244,8 @@ class TestInputOutputTransformer(BaseTra
             'TargetedWrapperMap': {
                 'type': 'map',
                 'key': {'shape': 'Name'},
-                'value': {'shape': 'TransformMeMap'}}
+                'value': {'shape': 'TransformMeMap'},
+            }
         }
 
         self.add_shape(targeted_map_shape)
@@ -247,7 +255,7 @@ class TestInputOutputTransformer(BaseTra
             'LeaveAloneMap': {
                 'type': 'map',
                 'key': {'shape': 'String'},
-                'value': {'shape': 'String'}
+                'value': {'shape': 'String'},
             }
         }
 
@@ -255,19 +263,25 @@ class TestInputOutputTransformer(BaseTra
             'UntargetedWrapperMap': {
                 'type': 'map',
                 'key': {'shape': 'Name'},
-                'value': {'shape': 'LeaveAloneMap'}}
+                'value': {'shape': 'LeaveAloneMap'},
+            }
         }
 
         self.add_shape(untargeted_map_shape)
         self.add_input_shape(untargeted_wrapper_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
-            transformation=self.transformation, target_shape=self.target_shape)
+            params=input_params,
+            model=self.operation_model.input_shape,
+            transformation=self.transformation,
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'TargetedWrapperMap': {'foo': {'bar': self.transformed_value}},
-             'UntargetedWrapperMap': {'foo': {'bar': self.original_value}}}
+            {
+                'TargetedWrapperMap': {'foo': {'bar': self.transformed_value}},
+                'UntargetedWrapperMap': {'foo': {'bar': self.original_value}},
+            },
         )
 
     def test_transform_nested_list(self):
@@ -277,111 +291,114 @@ class TestInputOutputTransformer(BaseTra
             ],
             'UntargetedWrapperList': [
                 [self.original_value, self.original_value]
-            ]
+            ],
         }
 
         targeted_list_shape = {
             'TransformMe': {
                 'type': 'list',
-                'member': {'shape': self.target_shape}
+                'member': {'shape': self.target_shape},
             }
         }
 
         targeted_wrapper_shape = {
             'TargetedWrapperList': {
                 'type': 'list',
-                'member': {'shape': 'TransformMe'}}
+                'member': {'shape': 'TransformMe'},
+            }
         }
 
         self.add_shape(targeted_list_shape)
         self.add_input_shape(targeted_wrapper_shape)
 
         untargeted_list_shape = {
-            'LeaveAlone': {
-                'type': 'list',
-                'member': {'shape': 'String'}
-            }
+            'LeaveAlone': {'type': 'list', 'member': {'shape': 'String'}}
         }
 
         untargeted_wrapper_shape = {
             'UntargetedWrapperList': {
                 'type': 'list',
-                'member': {'shape': 'LeaveAlone'}}
+                'member': {'shape': 'LeaveAlone'},
+            }
         }
 
         self.add_shape(untargeted_list_shape)
         self.add_input_shape(untargeted_wrapper_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(
             input_params,
-            {'TargetedWrapperList': [[
-                self.transformed_value, self.transformed_value]],
-             'UntargetedWrapperList': [[
-                 self.original_value, self.original_value]]}
+            {
+                'TargetedWrapperList': [
+                    [self.transformed_value, self.transformed_value]
+                ],
+                'UntargetedWrapperList': [
+                    [self.original_value, self.original_value]
+                ],
+            },
         )
 
     def test_transform_incorrect_type_for_structure(self):
-        input_params = {
-            'Structure': 'foo'
-        }
+        input_params = {'Structure': 'foo'}
 
         input_shape = {
             'Structure': {
                 'type': 'structure',
                 'members': {
                     'TransformMe': {'shape': self.target_shape},
-                }
+                },
             }
         }
 
         self.add_input_shape(input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(input_params, {'Structure': 'foo'})
 
     def test_transform_incorrect_type_for_map(self):
-        input_params = {
-            'Map': 'foo'
-        }
+        input_params = {'Map': 'foo'}
 
         input_shape = {
             'Map': {
                 'type': 'map',
                 'key': {'shape': 'String'},
-                'value': {'shape': self.target_shape}
+                'value': {'shape': self.target_shape},
             }
         }
 
         self.add_input_shape(input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
+            params=input_params,
+            model=self.operation_model.input_shape,
             transformation=self.transformation,
-            target_shape=self.target_shape)
+            target_shape=self.target_shape,
+        )
         self.assertEqual(input_params, {'Map': 'foo'})
 
     def test_transform_incorrect_type_for_list(self):
-        input_params = {
-            'List': 'foo'
-        }
+        input_params = {'List': 'foo'}
 
         input_shape = {
-            'List': {
-                'type': 'list',
-                'member': {'shape': self.target_shape}
-            }
+            'List': {'type': 'list', 'member': {'shape': self.target_shape}}
         }
 
         self.add_input_shape(input_shape)
 
         self.transformer.transform(
-            params=input_params, model=self.operation_model.input_shape,
-            transformation=self.transformation, target_shape=self.target_shape)
+            params=input_params,
+            model=self.operation_model.input_shape,
+            transformation=self.transformation,
+            target_shape=self.target_shape,
+        )
         self.assertEqual(input_params, {'List': 'foo'})
diff -pruN 2.23.6-1/tests/unit/customizations/dynamodb/test_types.py 2.31.35-1/tests/unit/customizations/dynamodb/test_types.py
--- 2.23.6-1/tests/unit/customizations/dynamodb/test_types.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/dynamodb/test_types.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from decimal import Decimal
-from awscli.testutils import unittest
 
 from awscli.customizations.dynamodb.types import (
-    Binary, TypeSerializer, TypeDeserializer
+    Binary,
+    TypeDeserializer,
+    TypeSerializer,
 )
+from awscli.testutils import unittest
 
 
 class TestBinary(unittest.TestCase):
@@ -37,7 +39,7 @@ class TestBinary(unittest.TestCase):
 
     def test_unicode_throws_error(self):
         with self.assertRaises(TypeError):
-            Binary(u'\u00e9')
+            Binary('\u00e9')
 
     def test_integer_throws_error(self):
         with self.assertRaises(TypeError):
@@ -72,30 +74,34 @@ class TestSerializer(unittest.TestCase):
 
     def test_serialize_decimal(self):
         self.assertEqual(
-            self.serializer.serialize(Decimal('1.25')), {'N': '1.25'})
+            self.serializer.serialize(Decimal('1.25')), {'N': '1.25'}
+        )
 
     def test_serialize_float_error(self):
         with self.assertRaisesRegex(
-                TypeError,
-                'Float types are not supported. Use Decimal types instead'):
+            TypeError,
+            'Float types are not supported. Use Decimal types instead',
+        ):
             self.serializer.serialize(1.25)
 
     def test_serialize_NaN_error(self):
         with self.assertRaisesRegex(
-                TypeError,
-                'Infinity and NaN not supported'):
+            TypeError, 'Infinity and NaN not supported'
+        ):
             self.serializer.serialize(Decimal('NaN'))
 
     def test_serialize_string(self):
         self.assertEqual(self.serializer.serialize('foo'), {'S': 'foo'})
 
     def test_serialize_binary(self):
-        self.assertEqual(self.serializer.serialize(
-            Binary(b'\x01')), {'B': b'\x01'})
+        self.assertEqual(
+            self.serializer.serialize(Binary(b'\x01')), {'B': b'\x01'}
+        )
 
     def test_serialize_bytearray(self):
-        self.assertEqual(self.serializer.serialize(bytearray([1])),
-                         {'B': b'\x01'})
+        self.assertEqual(
+            self.serializer.serialize(bytearray([1])), {'B': b'\x01'}
+        )
 
     def test_serialize_bytes(self):
         self.assertEqual(self.serializer.serialize(b'\x01'), {'B': b'\x01'})
@@ -114,7 +120,8 @@ class TestSerializer(unittest.TestCase):
 
     def test_serialize_binary_set(self):
         serialized_value = self.serializer.serialize(
-            set([Binary(b'\x01'), Binary(b'\x02')]))
+            set([Binary(b'\x01'), Binary(b'\x02')])
+        )
         self.assertEqual(len(serialized_value), 1)
         self.assertIn('BS', serialized_value)
         self.assertCountEqual(serialized_value['BS'], [b'\x01', b'\x02'])
@@ -125,15 +132,17 @@ class TestSerializer(unittest.TestCase):
         self.assertIn('L', serialized_value)
         self.assertCountEqual(
             serialized_value['L'],
-            [{'S': 'foo'}, {'N': '1'}, {'L': [{'N': '1'}]}]
+            [{'S': 'foo'}, {'N': '1'}, {'L': [{'N': '1'}]}],
         )
 
     def test_serialize_map(self):
         serialized_value = self.serializer.serialize(
-            {'foo': 'bar', 'baz': {'biz': 1}})
+            {'foo': 'bar', 'baz': {'biz': 1}}
+        )
         self.assertEqual(
             serialized_value,
-            {'M': {'foo': {'S': 'bar'}, 'baz': {'M': {'biz': {'N': '1'}}}}})
+            {'M': {'foo': {'S': 'bar'}, 'baz': {'M': {'biz': {'N': '1'}}}}},
+        )
 
 
 class TestDeserializer(unittest.TestCase):
@@ -156,46 +165,57 @@ class TestDeserializer(unittest.TestCase
 
     def test_deserialize_integer(self):
         self.assertEqual(
-            self.deserializer.deserialize({'N': '1'}), Decimal('1'))
+            self.deserializer.deserialize({'N': '1'}), Decimal('1')
+        )
 
     def test_deserialize_decimal(self):
         self.assertEqual(
-            self.deserializer.deserialize({'N': '1.25'}), Decimal('1.25'))
+            self.deserializer.deserialize({'N': '1.25'}), Decimal('1.25')
+        )
 
     def test_deserialize_string(self):
-        self.assertEqual(
-            self.deserializer.deserialize({'S': 'foo'}), 'foo')
+        self.assertEqual(self.deserializer.deserialize({'S': 'foo'}), 'foo')
 
     def test_deserialize_binary(self):
         self.assertEqual(
-            self.deserializer.deserialize({'B': b'\x00'}), Binary(b'\x00'))
+            self.deserializer.deserialize({'B': b'\x00'}), Binary(b'\x00')
+        )
 
     def test_deserialize_number_set(self):
         self.assertEqual(
-            self.deserializer.deserialize(
-                {'NS': ['1', '1.25']}), set([Decimal('1'), Decimal('1.25')]))
+            self.deserializer.deserialize({'NS': ['1', '1.25']}),
+            set([Decimal('1'), Decimal('1.25')]),
+        )
 
     def test_deserialize_string_set(self):
         self.assertEqual(
-            self.deserializer.deserialize(
-                {'SS': ['foo', 'bar']}), set(['foo', 'bar']))
+            self.deserializer.deserialize({'SS': ['foo', 'bar']}),
+            set(['foo', 'bar']),
+        )
 
     def test_deserialize_binary_set(self):
         self.assertEqual(
-            self.deserializer.deserialize(
-                {'BS': [b'\x00', b'\x01']}),
-            set([Binary(b'\x00'), Binary(b'\x01')]))
+            self.deserializer.deserialize({'BS': [b'\x00', b'\x01']}),
+            set([Binary(b'\x00'), Binary(b'\x01')]),
+        )
 
     def test_deserialize_list(self):
         self.assertEqual(
             self.deserializer.deserialize(
-                {'L': [{'N': '1'}, {'S': 'foo'}, {'L': [{'N': '1.25'}]}]}),
-            [Decimal('1'), 'foo', [Decimal('1.25')]])
+                {'L': [{'N': '1'}, {'S': 'foo'}, {'L': [{'N': '1.25'}]}]}
+            ),
+            [Decimal('1'), 'foo', [Decimal('1.25')]],
+        )
 
     def test_deserialize_map(self):
         self.assertEqual(
             self.deserializer.deserialize(
-                {'M': {'foo': {'S': 'mystring'},
-                       'bar': {'M': {'baz': {'N': '1'}}}}}),
-            {'foo': 'mystring', 'bar': {'baz': Decimal('1')}}
+                {
+                    'M': {
+                        'foo': {'S': 'mystring'},
+                        'bar': {'M': {'baz': {'N': '1'}}},
+                    }
+                }
+            ),
+            {'foo': 'mystring', 'bar': {'baz': Decimal('1')}},
         )
diff -pruN 2.23.6-1/tests/unit/customizations/ec2/test_paginate.py 2.31.35-1/tests/unit/customizations/ec2/test_paginate.py
--- 2.23.6-1/tests/unit/customizations/ec2/test_paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ec2/test_paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,16 +12,13 @@
 # language governing permissions and limitations under the License.
 from argparse import Namespace
 
-from awscli.testutils import mock, unittest
 from awscli.customizations.ec2.paginate import EC2PageSizeInjector
+from awscli.testutils import mock, unittest
 
 
 class TestEC2PageSizeInjector(unittest.TestCase):
     def test_register(self):
-        target_operations = {
-            'foo': [],
-            'bar': []
-        }
+        target_operations = {'foo': [], 'bar': []}
         injector = EC2PageSizeInjector()
         injector.TARGET_OPERATIONS = target_operations
         event_emitter = mock.Mock()
@@ -29,10 +26,9 @@ class TestEC2PageSizeInjector(unittest.T
 
         call_args = event_emitter.register_last.call_args_list
         events_registered = sorted([c[0][0] for c in call_args])
-        expected_events = sorted([
-            'calling-command.ec2.bar',
-            'calling-command.ec2.foo'
-        ])
+        expected_events = sorted(
+            ['calling-command.ec2.bar', 'calling-command.ec2.foo']
+        )
         self.assertEqual(events_registered, expected_events)
 
     def test_inject(self):
@@ -46,7 +42,7 @@ class TestEC2PageSizeInjector(unittest.T
         injector.inject(
             event_name=event_name,
             parsed_globals=parsed_globals,
-            call_parameters=call_parameters
+            call_parameters=call_parameters,
         )
         page_size = call_parameters.get('PaginationConfig', {}).get('PageSize')
         self.assertEqual(page_size, 5)
@@ -61,7 +57,7 @@ class TestEC2PageSizeInjector(unittest.T
         injector.inject(
             event_name=event_name,
             parsed_globals=parsed_globals,
-            call_parameters=call_parameters
+            call_parameters=call_parameters,
         )
         page_size = call_parameters.get('PaginationConfig', {}).get('PageSize')
         self.assertIsNone(page_size)
@@ -77,7 +73,7 @@ class TestEC2PageSizeInjector(unittest.T
         injector.inject(
             event_name=event_name,
             parsed_globals=parsed_globals,
-            call_parameters=call_parameters
+            call_parameters=call_parameters,
         )
         page_size = call_parameters.get('PaginationConfig', {}).get('PageSize')
         self.assertIsNone(page_size)
@@ -93,7 +89,7 @@ class TestEC2PageSizeInjector(unittest.T
         injector.inject(
             event_name=event_name,
             parsed_globals=parsed_globals,
-            call_parameters=call_parameters
+            call_parameters=call_parameters,
         )
         page_size = call_parameters.get('PaginationConfig', {}).get('PageSize')
         self.assertIsNone(page_size)
@@ -108,7 +104,7 @@ class TestEC2PageSizeInjector(unittest.T
         injector.inject(
             event_name=event_name,
             parsed_globals=parsed_globals,
-            call_parameters=call_parameters
+            call_parameters=call_parameters,
         )
         page_size = call_parameters.get('PaginationConfig', {}).get('PageSize')
         self.assertIsNone(page_size)
diff -pruN 2.23.6-1/tests/unit/customizations/ec2instanceconnect/test_eicesigner.py 2.31.35-1/tests/unit/customizations/ec2instanceconnect/test_eicesigner.py
--- 2.23.6-1/tests/unit/customizations/ec2instanceconnect/test_eicesigner.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ec2instanceconnect/test_eicesigner.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,9 @@
 from urllib.parse import urlencode
 
 import pytest
-
 from botocore.session import Session
 from botocore.signers import RequestSigner
+
 from awscli.customizations.ec2instanceconnect.eicesigner import (
     InstanceConnectEndpointRequestSigner,
 )
@@ -65,9 +65,14 @@ def max_tunnel_duration():
 
 
 class TestInstanceConnectEndpointRequestSigner:
-
     def test_get_presigned_url_without_max_tunnel_duration(
-            self, session_mock, request_signer_mock, eice_id, remote_port, private_ip, dns_name
+        self,
+        session_mock,
+        request_signer_mock,
+        eice_id,
+        remote_port,
+        private_ip,
+        dns_name,
     ):
         eice_request_signer = InstanceConnectEndpointRequestSigner(
             session_mock,
@@ -94,9 +99,9 @@ class TestInstanceConnectEndpointRequest
         expected_query_string = urlencode(qs_components)
         expected_request_dict = {
             "url": "wss://"
-                   + dns_name
-                   + "/openTunnel?"
-                   + expected_query_string,
+            + dns_name
+            + "/openTunnel?"
+            + expected_query_string,
             "body": {},
             "headers": {"host": dns_name},
             "method": "GET",
@@ -111,7 +116,14 @@ class TestInstanceConnectEndpointRequest
         )
 
     def test_get_presigned_url_with_max_connection_timeout(
-            self, session_mock, request_signer_mock, eice_id, remote_port, private_ip, dns_name, max_tunnel_duration
+        self,
+        session_mock,
+        request_signer_mock,
+        eice_id,
+        remote_port,
+        private_ip,
+        dns_name,
+        max_tunnel_duration,
     ):
         eice_request_signer = InstanceConnectEndpointRequestSigner(
             session_mock,
@@ -139,9 +151,9 @@ class TestInstanceConnectEndpointRequest
         expected_query_string = urlencode(qs_components)
         expected_request_dict = {
             "url": "wss://"
-                   + dns_name
-                   + "/openTunnel?"
-                   + expected_query_string,
+            + dns_name
+            + "/openTunnel?"
+            + expected_query_string,
             "body": {},
             "headers": {"host": dns_name},
             "method": "GET",
diff -pruN 2.23.6-1/tests/unit/customizations/ec2instanceconnect/test_websocket.py 2.31.35-1/tests/unit/customizations/ec2instanceconnect/test_websocket.py
--- 2.23.6-1/tests/unit/customizations/ec2instanceconnect/test_websocket.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ec2instanceconnect/test_websocket.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,44 +15,47 @@ import platform
 import socket
 import struct
 import sys
-from io import TextIOWrapper, BytesIO
-from threading import Event
+from io import BytesIO, TextIOWrapper
 from queue import Queue
+from threading import Event
 from unittest import mock
 from unittest.mock import patch
 from urllib.parse import urlparse
 
 import pytest
 from awscrt import websocket
-from awscrt.http import HttpProxyAuthenticationType, HttpProxyOptions, HttpRequest, HttpHeaders
-from awscrt.io import ClientTlsContext, TlsContextOptions, TlsConnectionOptions
+from awscrt.http import (
+    HttpHeaders,
+    HttpProxyAuthenticationType,
+    HttpProxyOptions,
+    HttpRequest,
+)
+from awscrt.io import ClientTlsContext, TlsConnectionOptions, TlsContextOptions
 from awscrt.websocket import (
-    Opcode,
-    OnConnectionSetupData,
-    OnIncomingFramePayloadData,
     IncomingFrame,
-    OnSendFrameCompleteData,
+    OnConnectionSetupData,
     OnConnectionShutdownData,
     OnIncomingFrameCompleteData,
+    OnIncomingFramePayloadData,
+    OnSendFrameCompleteData,
+    Opcode,
     WebSocket,
 )
 
 from awscli.customizations.ec2instanceconnect.websocket import (
-    BaseWebsocketIO, Websocket, StdinStdoutIO, WindowsStdinStdoutIO,
-    TCPSocketIO, WebsocketException, WebsocketManager, InputClosedError,
+    BaseWebsocketIO,
+    InputClosedError,
+    StdinStdoutIO,
+    TCPSocketIO,
+    Websocket,
+    WebsocketException,
+    WebsocketManager,
+    WindowsStdinStdoutIO,
 )
-
-
-skip_if_windows = pytest.mark.skipif(
-    platform.system() not in ['Darwin', 'Linux'],
-    reason="This test does not run on windows.")
-if_windows = pytest.mark.skipif(
-    platform.system() in ['Darwin', 'Linux'],
-    reason="This test only runs on windows.")
+from tests.markers import if_windows, skip_if_windows
 
 
 class TestWebsocketIO:
-
     def test_stdin_stdout_io_read(self, monkeypatch):
         io = StdinStdoutIO()
 
@@ -77,7 +80,9 @@ class TestWebsocketIO:
 
     @skip_if_windows
     @mock.patch("select.select")
-    def test_stdin_stdout_io_has_data_to_read_returns_false_non_windows(self, mock_select):
+    def test_stdin_stdout_io_has_data_to_read_returns_false_non_windows(
+        self, mock_select
+    ):
         io = StdinStdoutIO()
 
         expected_socket_list = [sys.stdin]
@@ -91,7 +96,9 @@ class TestWebsocketIO:
 
     @skip_if_windows
     @mock.patch("select.select")
-    def test_stdin_stdout_io_has_data_to_read_returns_true_non_windows(self, mock_select):
+    def test_stdin_stdout_io_has_data_to_read_returns_true_non_windows(
+        self, mock_select
+    ):
         io = StdinStdoutIO()
 
         expected_socket_list = [sys.stdin]
@@ -104,7 +111,9 @@ class TestWebsocketIO:
         assert return_val
 
     @if_windows
-    def test_windows_stdin_stdout_io_has_data_to_read_always_returns_true(self):
+    def test_windows_stdin_stdout_io_has_data_to_read_always_returns_true(
+        self,
+    ):
         io = WindowsStdinStdoutIO()
         assert io.has_data_to_read()
 
@@ -131,7 +140,6 @@ class TestWebsocketIO:
 
         mock_conn.sendall.assert_called_with(expected_data)
 
-
     def test_tcp_socket_io_read_raise_error_when_empty_data(self):
         mock_conn = mock.Mock(spec=socket.SocketType)
         io = TCPSocketIO(mock_conn)
@@ -145,6 +153,7 @@ class TestWebsocketIO:
 
         mock_conn.recv.assert_called_with(bytes_to_read)
 
+
 @pytest.fixture
 def mock_websocketio():
     return mock.Mock(spec=BaseWebsocketIO)
@@ -181,15 +190,29 @@ def mock_handshake_request():
 
 
 @pytest.fixture
-def web_socket(mock_websocketio, mock_crt_websocket, mock_on_connection_event, mock_send_frame_results_queue,
-               mock_shutdown_event, mock_tls_connection_options):
-    web_socket = Websocket(mock_websocketio, "websocket-id", mock_tls_connection_options, mock_on_connection_event,
-                           mock_shutdown_event, mock_send_frame_results_queue)
+def web_socket(
+    mock_websocketio,
+    mock_crt_websocket,
+    mock_on_connection_event,
+    mock_send_frame_results_queue,
+    mock_shutdown_event,
+    mock_tls_connection_options,
+):
+    web_socket = Websocket(
+        mock_websocketio,
+        "websocket-id",
+        mock_tls_connection_options,
+        mock_on_connection_event,
+        mock_shutdown_event,
+        mock_send_frame_results_queue,
+    )
     web_socket._websocket = mock_crt_websocket
     return web_socket
 
 
-def assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio):
+def assert_websocket_closed(
+    mock_shutdown_event, mock_crt_websocket, mock_websocketio
+):
     assert mock_shutdown_event.set.called
     assert mock_crt_websocket.close.called
     assert mock_websocketio.close.called
@@ -205,8 +228,12 @@ class CaptureCRTWebsocket:
     def connect(self, **kwargs):
         self.on_connection_setup_handler = kwargs['on_connection_setup']
         self.on_connection_shutdown_handler = kwargs['on_connection_shutdown']
-        self.on_incoming_frame_payload_handler = kwargs['on_incoming_frame_payload']
-        self.on_incoming_frame_complete_handler = kwargs['on_incoming_frame_complete']
+        self.on_incoming_frame_payload_handler = kwargs[
+            'on_incoming_frame_payload'
+        ]
+        self.on_incoming_frame_complete_handler = kwargs[
+            'on_incoming_frame_complete'
+        ]
 
 
 @pytest.fixture
@@ -222,13 +249,21 @@ def websocket_url():
 class TestWebsocket:
     @pytest.fixture(autouse=True)
     def patch_crt_websocket(self, monkeypatch, capture_crt_websocket):
-        monkeypatch.setattr("awscrt.websocket.connect", capture_crt_websocket.connect)
+        monkeypatch.setattr(
+            "awscrt.websocket.connect", capture_crt_websocket.connect
+        )
 
     @patch.object(websocket, "connect")
     @patch.object(websocket, "create_handshake_request")
     def test_connect(
-            self, mock_handshake, mock_connect, mock_handshake_request,
-            mock_on_connection_event, mock_tls_connection_options, web_socket, websocket_url
+        self,
+        mock_handshake,
+        mock_connect,
+        mock_handshake_request,
+        mock_on_connection_event,
+        mock_tls_connection_options,
+        web_socket,
+        websocket_url,
     ):
         parsed_url = urlparse(websocket_url)
         host = parsed_url.hostname
@@ -252,17 +287,28 @@ class TestWebsocket:
             on_connection_setup=mock.ANY,
             on_connection_shutdown=mock.ANY,
             on_incoming_frame_payload=mock.ANY,
-            on_incoming_frame_complete=mock.ANY
+            on_incoming_frame_complete=mock.ANY,
         )
 
         assert mock_on_connection_event.wait.called
 
     @patch.object(websocket, "connect")
     @patch.object(websocket, "create_handshake_request")
-    @mock.patch.dict(os.environ, {"HTTPS_PROXY": "http://user1:pass1@localhost:8989", "NO_PROXY": "different-domain"})
+    @mock.patch.dict(
+        os.environ,
+        {
+            "HTTPS_PROXY": "http://user1:pass1@localhost:8989",
+            "NO_PROXY": "different-domain",
+        },
+    )
     def test_connect_with_proxy(
-            self, mock_handshake, mock_connect, mock_on_connection_event,
-            mock_tls_connection_options, web_socket, websocket_url
+        self,
+        mock_handshake,
+        mock_connect,
+        mock_on_connection_event,
+        mock_tls_connection_options,
+        web_socket,
+        websocket_url,
     ):
         parsed_url = urlparse(websocket_url)
         host = parsed_url.hostname
@@ -282,22 +328,41 @@ class TestWebsocket:
             on_connection_setup=mock.ANY,
             on_connection_shutdown=mock.ANY,
             on_incoming_frame_payload=mock.ANY,
-            on_incoming_frame_complete=mock.ANY
+            on_incoming_frame_complete=mock.ANY,
+        )
+        assert (
+            "localhost"
+            == mock_connect.call_args.kwargs['proxy_options'].host_name
         )
-        assert "localhost" == mock_connect.call_args.kwargs['proxy_options'].host_name
         assert 8989 == mock_connect.call_args.kwargs['proxy_options'].port
-        assert HttpProxyAuthenticationType.Basic == mock_connect.call_args.kwargs['proxy_options'].auth_type
-        assert "user1" == mock_connect.call_args.kwargs['proxy_options'].auth_username
-        assert "pass1" == mock_connect.call_args.kwargs['proxy_options'].auth_password
+        assert (
+            HttpProxyAuthenticationType.Basic
+            == mock_connect.call_args.kwargs['proxy_options'].auth_type
+        )
+        assert (
+            "user1"
+            == mock_connect.call_args.kwargs['proxy_options'].auth_username
+        )
+        assert (
+            "pass1"
+            == mock_connect.call_args.kwargs['proxy_options'].auth_password
+        )
 
         assert mock_on_connection_event.wait.called
 
     @patch.object(websocket, "connect")
     @patch.object(websocket, "create_handshake_request")
-    @mock.patch.dict(os.environ, {"HTTPS_PROXY": "http://user1:pass1@localhost:8989"})
+    @mock.patch.dict(
+        os.environ, {"HTTPS_PROXY": "http://user1:pass1@localhost:8989"}
+    )
     def test_connect_with_proxy_but_no_proxy_env_empty(
-            self, mock_handshake, mock_connect, mock_on_connection_event,
-            mock_tls_connection_options, web_socket, websocket_url
+        self,
+        mock_handshake,
+        mock_connect,
+        mock_on_connection_event,
+        mock_tls_connection_options,
+        web_socket,
+        websocket_url,
     ):
         parsed_url = urlparse(websocket_url)
         host = parsed_url.hostname
@@ -317,23 +382,45 @@ class TestWebsocket:
             on_connection_setup=mock.ANY,
             on_connection_shutdown=mock.ANY,
             on_incoming_frame_payload=mock.ANY,
-            on_incoming_frame_complete=mock.ANY
+            on_incoming_frame_complete=mock.ANY,
+        )
+        assert (
+            "localhost"
+            == mock_connect.call_args.kwargs['proxy_options'].host_name
         )
-        assert "localhost" == mock_connect.call_args.kwargs['proxy_options'].host_name
         assert 8989 == mock_connect.call_args.kwargs['proxy_options'].port
-        assert HttpProxyAuthenticationType.Basic == mock_connect.call_args.kwargs['proxy_options'].auth_type
-        assert "user1" == mock_connect.call_args.kwargs['proxy_options'].auth_username
-        assert "pass1" == mock_connect.call_args.kwargs['proxy_options'].auth_password
+        assert (
+            HttpProxyAuthenticationType.Basic
+            == mock_connect.call_args.kwargs['proxy_options'].auth_type
+        )
+        assert (
+            "user1"
+            == mock_connect.call_args.kwargs['proxy_options'].auth_username
+        )
+        assert (
+            "pass1"
+            == mock_connect.call_args.kwargs['proxy_options'].auth_password
+        )
 
         assert mock_on_connection_event.wait.called
 
     @patch.object(websocket, "connect")
     @patch.object(websocket, "create_handshake_request")
-    @mock.patch.dict(os.environ,
-                     {"HTTPS_PROXY": "http://user1:pass1@localhost:8989", "NO_PROXY": "1eice-123.eice.amazon.com"})
+    @mock.patch.dict(
+        os.environ,
+        {
+            "HTTPS_PROXY": "http://user1:pass1@localhost:8989",
+            "NO_PROXY": "1eice-123.eice.amazon.com",
+        },
+    )
     def test_connect_with_proxy_define_and_no_proxy_defined(
-            self, mock_handshake, mock_connect, mock_handshake_request,
-            mock_on_connection_event, mock_tls_connection_options, web_socket
+        self,
+        mock_handshake,
+        mock_connect,
+        mock_handshake_request,
+        mock_on_connection_event,
+        mock_tls_connection_options,
+        web_socket,
     ):
         url = "wss://eice-123.eice.amazon.com/openTunnel?params"
         parsed_url = urlparse(url)
@@ -354,14 +441,19 @@ class TestWebsocket:
             on_connection_setup=mock.ANY,
             on_connection_shutdown=mock.ANY,
             on_incoming_frame_payload=mock.ANY,
-            on_incoming_frame_complete=mock.ANY
+            on_incoming_frame_complete=mock.ANY,
         )
 
         assert mock_on_connection_event.wait.called
 
     def test_write_data_from_input_when_there_is_data_to_read(
-            self, mock_websocketio, mock_crt_websocket, mock_send_frame_results_queue, mock_shutdown_event,
-            web_socket, capture_crt_websocket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_send_frame_results_queue,
+        mock_shutdown_event,
+        web_socket,
+        capture_crt_websocket,
     ):
         data_as_bytes = b"Test"
         mock_websocketio.read.return_value = data_as_bytes
@@ -378,11 +470,18 @@ class TestWebsocket:
             on_complete=mock.ANY,
         )
         assert mock_send_frame_results_queue.get.called
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
     @mock.patch("time.sleep")
     def test_write_data_from_input_when_there_is_no_data_to_read(
-            self, mock_sleep, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket
+        self,
+        mock_sleep,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
     ):
         mock_websocketio.has_data_to_read.return_value = False
 
@@ -392,10 +491,16 @@ class TestWebsocket:
 
         mock_sleep.assert_called_with(0.05)
 
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
     def test_write_data_from_input_shuts_down_when_sends_frame_throws_close_frame_sent(
-            self, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
     ):
         mock_crt_websocket.send_frame.side_effect = RuntimeError(
             "AWS_ERROR_HTTP_WEBSOCKET_CLOSE_FRAME_SENT"
@@ -408,10 +513,16 @@ class TestWebsocket:
 
         web_socket.write_data_from_input()
 
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
     def test_write_data_northbound_shuts_down_when_sends_frame_throws_http_connection_closed(
-            self, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
     ):
         mock_crt_websocket.send_frame.side_effect = RuntimeError(
             "AWS_ERROR_HTTP_CONNECTION_CLOSED"
@@ -424,10 +535,17 @@ class TestWebsocket:
 
         web_socket.write_data_from_input()
 
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
-    def test_on_connection_sets_websocket(self, capture_crt_websocket, websocket_url,
-                                          mock_on_connection_event, web_socket):
+    def test_on_connection_sets_websocket(
+        self,
+        capture_crt_websocket,
+        websocket_url,
+        mock_on_connection_event,
+        web_socket,
+    ):
         data = OnConnectionSetupData()
         data.websocket = mock.Mock(spec=Websocket)
         request_id = "request_id"
@@ -439,8 +557,13 @@ class TestWebsocket:
         assert data.websocket == web_socket._websocket
         assert mock_on_connection_event.set.called
 
-    def test_on_connection_with_exception(self, mock_on_connection_event, web_socket, websocket_url,
-                                          capture_crt_websocket):
+    def test_on_connection_with_exception(
+        self,
+        mock_on_connection_event,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
+    ):
         data = OnConnectionSetupData()
         request_id = "request_id"
         data.handshake_response_headers = [("X-Amzn-RequestId", request_id)]
@@ -454,10 +577,16 @@ class TestWebsocket:
         assert mock_on_connection_event.set.called
 
     def test_on_incoming_frame_payload_data_with_binary_frame(
-            self, mock_websocketio, web_socket, websocket_url, capture_crt_websocket
+        self,
+        mock_websocketio,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
     ):
         data_in_bytes = b"Test"
-        frame = IncomingFrame(opcode=Opcode.BINARY, payload_length=len(data_in_bytes), fin=True)
+        frame = IncomingFrame(
+            opcode=Opcode.BINARY, payload_length=len(data_in_bytes), fin=True
+        )
 
         web_socket.connect(websocket_url)
         capture_crt_websocket.on_incoming_frame_payload_handler(
@@ -467,10 +596,12 @@ class TestWebsocket:
         mock_websocketio.write.assert_called_with(data_in_bytes)
 
     def test_on_incoming_frame_payload_data_with_close_frame(
-            self, web_socket, websocket_url, capture_crt_websocket
+        self, web_socket, websocket_url, capture_crt_websocket
     ):
         data_in_bytes = b"Test"
-        frame = IncomingFrame(opcode=Opcode.CLOSE, payload_length=len(data_in_bytes), fin=True)
+        frame = IncomingFrame(
+            opcode=Opcode.CLOSE, payload_length=len(data_in_bytes), fin=True
+        )
 
         web_socket.connect(websocket_url)
         capture_crt_websocket.on_incoming_frame_payload_handler(
@@ -480,11 +611,18 @@ class TestWebsocket:
         assert bytearray(data_in_bytes) == web_socket._close_frame_bytes
 
     def test_on_incoming_frame_payload_data_with_text_frame_sets_shutdown_event(
-            self, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket,
-            websocket_url, capture_crt_websocket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
     ):
         data_in_bytes = b"Test"
-        frame = IncomingFrame(opcode=Opcode.TEXT, payload_length=len(data_in_bytes), fin=True)
+        frame = IncomingFrame(
+            opcode=Opcode.TEXT, payload_length=len(data_in_bytes), fin=True
+        )
 
         web_socket.connect(websocket_url)
         capture_crt_websocket.on_incoming_frame_payload_handler(
@@ -493,49 +631,82 @@ class TestWebsocket:
 
         assert isinstance(web_socket.exception, WebsocketException)
 
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
     def test_on_incoming_frame_complete_with_close_frame(
-            self, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket,
-            websocket_url, capture_crt_websocket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
     ):
-
         shutdown_reason = b"Test"
         data_in_bytes = struct.pack(">H", 1) + shutdown_reason
-        frame = IncomingFrame(opcode=Opcode.CLOSE, payload_length=len(shutdown_reason), fin=True)
+        frame = IncomingFrame(
+            opcode=Opcode.CLOSE, payload_length=len(shutdown_reason), fin=True
+        )
 
         web_socket.connect(websocket_url)
         capture_crt_websocket.on_incoming_frame_payload_handler(
-            OnIncomingFramePayloadData(frame=frame, data=data_in_bytes,)
+            OnIncomingFramePayloadData(
+                frame=frame,
+                data=data_in_bytes,
+            )
         )
         capture_crt_websocket.on_incoming_frame_complete_handler(
             OnIncomingFrameCompleteData(frame=frame, exception=None)
         )
 
-        expected_exc = WebsocketException(f"Websocket Closure Reason: {shutdown_reason.decode()}")
+        expected_exc = WebsocketException(
+            f"Websocket Closure Reason: {shutdown_reason.decode()}"
+        )
         assert isinstance(web_socket.exception, WebsocketException)
         # Ensure shutdown reason is decoded properly. (validate properties on WebsocketException)
         assert web_socket.exception.args == expected_exc.args
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
     def test_on_incoming_frame_complete_with_close_frame_ignores_shutdown_code_1000(
-            self, mock_websocketio, mock_crt_websocket, mock_shutdown_event, web_socket,
-            websocket_url, capture_crt_websocket
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
     ):
         frame = IncomingFrame(opcode=Opcode.CLOSE, payload_length=0, fin=True)
         incoming_frame_data = OnIncomingFrameCompleteData(frame=frame)
 
         web_socket.connect(websocket_url)
-        capture_crt_websocket.on_incoming_frame_complete_handler(incoming_frame_data)
+        capture_crt_websocket.on_incoming_frame_complete_handler(
+            incoming_frame_data
+        )
 
         assert not web_socket.exception
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
 
-    def test_on_connection_shutdown(self, mock_websocketio, mock_crt_websocket, mock_shutdown_event,
-                                    web_socket, websocket_url, capture_crt_websocket):
+    def test_on_connection_shutdown(
+        self,
+        mock_websocketio,
+        mock_crt_websocket,
+        mock_shutdown_event,
+        web_socket,
+        websocket_url,
+        capture_crt_websocket,
+    ):
         data = OnConnectionShutdownData()
 
         web_socket.connect(websocket_url)
         capture_crt_websocket.on_connection_shutdown_handler(data)
 
-        assert_websocket_closed(mock_shutdown_event, mock_crt_websocket, mock_websocketio)
+        assert_websocket_closed(
+            mock_shutdown_event, mock_crt_websocket, mock_websocketio
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/ecs/test_codedeployer.py 2.31.35-1/tests/unit/customizations/ecs/test_codedeployer.py
--- 2.23.6-1/tests/unit/customizations/ecs/test_codedeployer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ecs/test_codedeployer.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,26 +15,29 @@ import hashlib
 import json
 
 from botocore import compat
-from awscli.testutils import capture_output, mock, unittest
-from awscli.customizations.ecs.deploy import CodeDeployer, MAX_WAIT_MIN
+
+from awscli.customizations.ecs.deploy import MAX_WAIT_MIN, CodeDeployer
 from awscli.customizations.ecs.exceptions import MissingPropertyError
+from awscli.testutils import capture_output, mock, unittest
 
 
 class TestCodeDeployer(unittest.TestCase):
     TEST_APPSPEC = {
         "version": 0.0,
-        "resources": [{
-            "TestService": {
-                "type": "AWS::ECS::Service",
-                "properties": {
-                    "taskDefinition": "arn:aws:ecs:::task-definition/test:1",
-                    "loadBalancerInfo": {
-                        "containerName": "web",
-                        "containerPort": 80
-                    }
+        "resources": [
+            {
+                "TestService": {
+                    "type": "AWS::ECS::Service",
+                    "properties": {
+                        "taskDefinition": "arn:aws:ecs:::task-definition/test:1",
+                        "loadBalancerInfo": {
+                            "containerName": "web",
+                            "containerPort": 80,
+                        },
+                    },
                 }
             }
-        }]
+        ],
     }
 
     def setUp(self):
@@ -51,21 +54,22 @@ class TestCodeDeployer(unittest.TestCase
 
         appspec_resources = self.deployer._appspec_dict['resources']
         for resource in appspec_resources:
-            actual_arn = \
-                resource['TestService']['properties']['taskDefinition']
+            actual_arn = resource['TestService']['properties'][
+                'taskDefinition'
+            ]
             self.assertEqual(actual_arn, test_arn)
 
     def test_update_task_def_arn_error_required_key(self):
         invalid_appspec = {
             "version": 0.0,
-            "resources": [{
-                "TestFunc": {
-                    "type": "AWS::Lambda::Function",
-                    "properties": {
-                        "name": "some-function"
+            "resources": [
+                {
+                    "TestFunc": {
+                        "type": "AWS::Lambda::Function",
+                        "properties": {"name": "some-function"},
                     }
                 }
-            }]
+            ],
         }
         bad_deployer = CodeDeployer(None, invalid_appspec)
 
@@ -80,8 +84,9 @@ class TestCodeDeployer(unittest.TestCase
         self.assertEqual(request['applicationName'], test_app)
         self.assertEqual(request['deploymentGroupName'], test_dgp)
 
-        actual_appspec = \
-            json.loads(request['revision']['appSpecContent']['content'])
+        actual_appspec = json.loads(
+            request['revision']['appSpecContent']['content']
+        )
         actual_hash = request['revision']['appSpecContent']['sha256']
 
         self.assertEqual(actual_appspec, self.deployer._appspec_dict)
@@ -98,7 +103,8 @@ class TestCodeDeployer(unittest.TestCase
     def test_wait_for_deploy_success_default_wait(self):
         mock_id = 'd-1234567XX'
         expected_stdout = self.deployer.MSG_WAITING.format(
-            deployment_id=mock_id, wait=30)
+            deployment_id=mock_id, wait=30
+        )
 
         with capture_output() as captured:
             self.deployer.wait_for_deploy_success('d-1234567XX', 0)
@@ -109,7 +115,8 @@ class TestCodeDeployer(unittest.TestCase
         mock_wait = 40
 
         expected_stdout = self.deployer.MSG_WAITING.format(
-            deployment_id=mock_id, wait=mock_wait)
+            deployment_id=mock_id, wait=mock_wait
+        )
 
         with capture_output() as captured:
             self.deployer.wait_for_deploy_success('d-1234567XX', mock_wait)
@@ -120,7 +127,8 @@ class TestCodeDeployer(unittest.TestCase
         mock_wait = MAX_WAIT_MIN + 15
 
         expected_stdout = self.deployer.MSG_WAITING.format(
-            deployment_id=mock_id, wait=MAX_WAIT_MIN)
+            deployment_id=mock_id, wait=MAX_WAIT_MIN
+        )
 
         with capture_output() as captured:
             self.deployer.wait_for_deploy_success('d-1234567XX', mock_wait)
diff -pruN 2.23.6-1/tests/unit/customizations/ecs/test_codedeployvalidator.py 2.31.35-1/tests/unit/customizations/ecs/test_codedeployvalidator.py
--- 2.23.6-1/tests/unit/customizations/ecs/test_codedeployvalidator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ecs/test_codedeployvalidator.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,15 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
+from awscli.customizations.ecs.deploy import (
+    TIMEOUT_BUFFER_MIN,
+    CodeDeployValidator,
+)
+from awscli.customizations.ecs.exceptions import (
+    InvalidPlatformError,
+    InvalidProperyError,
+)
 from awscli.testutils import unittest
-from awscli.customizations.ecs.deploy import (CodeDeployValidator,
-                                              TIMEOUT_BUFFER_MIN)
-from awscli.customizations.ecs.exceptions import (InvalidPlatformError,
-                                                  InvalidProperyError)
 
 
 class TestCodeDeployValidator(unittest.TestCase):
@@ -25,14 +29,14 @@ class TestCodeDeployValidator(unittest.T
         'cluster': 'test-cluster',
         'cluster_arn': 'arn:aws:ecs:::cluster/test-cluster',
         'app_name': 'test-application',
-        'deployment_group_name': 'test-deployment-group'
+        'deployment_group_name': 'test-deployment-group',
     }
 
     TEST_APP_DETAILS = {
         'application': {
             'applicationId': '876uyh6-45tdfg',
             'applicationName': 'test-application',
-            'computePlatform': 'ECS'
+            'computePlatform': 'ECS',
         }
     }
 
@@ -42,25 +46,23 @@ class TestCodeDeployValidator(unittest.T
             'deploymentGroupName': 'test-deployment-group',
             'computePlatform': 'ECS',
             'blueGreenDeploymentConfiguration': {
-                'deploymentReadyOption': {
-                    'waitTimeInMinutes': 5
-                },
+                'deploymentReadyOption': {'waitTimeInMinutes': 5},
                 'terminateBlueInstancesOnDeploymentSuccess': {
                     'terminationWaitTimeInMinutes': 10
-                }
+                },
             },
-            'ecsServices': [{
-                'serviceName': 'test-service',
-                'clusterName': 'test-cluster'
-            }]
+            'ecsServices': [
+                {'serviceName': 'test-service', 'clusterName': 'test-cluster'}
+            ],
         }
     }
 
     def setUp(self):
         self.validator = CodeDeployValidator(None, self.TEST_RESOURCES)
         self.validator.app_details = self.TEST_APP_DETAILS
-        self.validator.deployment_group_details = \
+        self.validator.deployment_group_details = (
             self.TEST_DEPLOYMENT_GROUP_DETAILS
+        )
 
     def test_get_deployment_wait_time(self):
         expected_wait = 5 + 10 + TIMEOUT_BUFFER_MIN
@@ -81,7 +83,7 @@ class TestCodeDeployValidator(unittest.T
         invalid_app = {
             'application': {
                 'applicationName': 'test-application',
-                'computePlatform': 'Server'
+                'computePlatform': 'Server',
             }
         }
 
@@ -92,11 +94,7 @@ class TestCodeDeployValidator(unittest.T
             bad_validator.validate_application()
 
     def test_validate_deployment_group_error_compute_platform(self):
-        invalid_dgp = {
-            'deploymentGroupInfo': {
-                'computePlatform': 'Lambda'
-            }
-        }
+        invalid_dgp = {'deploymentGroupInfo': {'computePlatform': 'Lambda'}}
         bad_validator = CodeDeployValidator(None, self.TEST_RESOURCES)
         bad_validator.deployment_group_details = invalid_dgp
 
@@ -107,10 +105,12 @@ class TestCodeDeployValidator(unittest.T
         invalid_dgp = {
             'deploymentGroupInfo': {
                 'computePlatform': 'ECS',
-                'ecsServices': [{
-                    'serviceName': 'the-wrong-test-service',
-                    'clusterName': 'test-cluster'
-                }]
+                'ecsServices': [
+                    {
+                        'serviceName': 'the-wrong-test-service',
+                        'clusterName': 'test-cluster',
+                    }
+                ],
             }
         }
         bad_validator = CodeDeployValidator(None, self.TEST_RESOURCES)
@@ -123,10 +123,12 @@ class TestCodeDeployValidator(unittest.T
         invalid_dgp = {
             'deploymentGroupInfo': {
                 'computePlatform': 'ECS',
-                'ecsServices': [{
-                    'serviceName': 'test-service',
-                    'clusterName': 'the-wrong-test-cluster'
-                }]
+                'ecsServices': [
+                    {
+                        'serviceName': 'test-service',
+                        'clusterName': 'the-wrong-test-cluster',
+                    }
+                ],
             }
         }
         bad_validator = CodeDeployValidator(None, self.TEST_RESOURCES)
diff -pruN 2.23.6-1/tests/unit/customizations/ecs/test_ecsclient.py 2.31.35-1/tests/unit/customizations/ecs/test_ecsclient.py
--- 2.23.6-1/tests/unit/customizations/ecs/test_ecsclient.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ecs/test_ecsclient.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,13 +12,14 @@
 # language governing permissions and limitations under the License.
 
 from argparse import Namespace
+
 from botocore import config
-from awscli.testutils import capture_output, mock, unittest
+
 from awscli.customizations.ecs.deploy import ECSClient, ECSDeploy
+from awscli.testutils import capture_output, mock, unittest
 
 
 class TestECSClient(unittest.TestCase):
-
     def setUp(self):
         ecs_client = mock.Mock()
         self.session = mock.Mock()
@@ -32,13 +33,17 @@ class TestECSClient(unittest.TestCase):
 
     def test_client_config(self):
         self.test_client = ECSClient(
-            self.session, None, self.global_args, ECSDeploy.USER_AGENT_EXTRA)
+            self.session, None, self.global_args, ECSDeploy.USER_AGENT_EXTRA
+        )
 
         expected_user_agent_extra = 'md/customization#ecs-deploy'
 
         create_args = self.session.create_client.call_args
         self.assertEqual(create_args[0][0], 'ecs')
         self.assertEqual(
-            create_args[1]['region_name'], self.global_args.region)
-        self.assertEqual(create_args[1]['config'].user_agent_extra,
-                          expected_user_agent_extra)
+            create_args[1]['region_name'], self.global_args.region
+        )
+        self.assertEqual(
+            create_args[1]['config'].user_agent_extra,
+            expected_user_agent_extra,
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/ecs/test_executecommand_startsession.py 2.31.35-1/tests/unit/customizations/ecs/test_executecommand_startsession.py
--- 2.23.6-1/tests/unit/customizations/ecs/test_executecommand_startsession.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ecs/test_executecommand_startsession.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import botocore.session
-import json
 import errno
+import json
+import unittest
 
-from awscli.testutils import mock
+import botocore.session
 
-import unittest
 from awscli.customizations.ecs import executecommand
+from awscli.testutils import mock
 
 
 class TestExecuteCommand(unittest.TestCase):
-
     def setUp(self):
         self.session = mock.Mock(botocore.session.Session)
         self.client = mock.Mock()
@@ -37,16 +36,19 @@ class TestExecuteCommand(unittest.TestCa
             "cluster": "default",
             "task": "someTaskId",
             "command": "ls",
-            "interactive": "true"}
+            "interactive": "true",
+        }
         self.execute_command_response = {
             "containerName": "someContainerName",
             "containerArn": "ecs/someContainerArn",
             "taskArn": "ecs/someTaskArn",
-            "session": {"sessionId": "session-id",
-                        "tokenValue": "token-value",
-                        "streamUrl": "stream-url"},
+            "session": {
+                "sessionId": "session-id",
+                "tokenValue": "token-value",
+                "streamUrl": "stream-url",
+            },
             "clusterArn": "ecs/someClusterArn",
-            "interactive": "true"
+            "interactive": "true",
         }
         self.describe_tasks_response = {
             "failures": [],
@@ -62,14 +64,14 @@ class TestExecuteCommand(unittest.TestCa
                             "taskArn": "ecs/someTaskArn",
                             "name": "someContainerName",
                             "managedAgents": [
-                             {
-                                 "reason": "Execute Command Agent started",
-                                 "lastStatus": "RUNNING",
-                                 "lastStartedAt": "1611619528.272",
-                                 "name": "ExecuteCommandAgent"
-                             }
-                             ],
-                            "runtimeId": "someRuntimeId"
+                                {
+                                    "reason": "Execute Command Agent started",
+                                    "lastStatus": "RUNNING",
+                                    "lastStartedAt": "1611619528.272",
+                                    "name": "ExecuteCommandAgent",
+                                }
+                            ],
+                            "runtimeId": "someRuntimeId",
                         },
                         {
                             "containerArn": "ecs/dummyContainerArn",
@@ -80,25 +82,20 @@ class TestExecuteCommand(unittest.TestCa
                                     "reason": "Execute Command Agent started",
                                     "lastStatus": "RUNNING",
                                     "lastStartedAt": "1611619528.272",
-                                    "name": "ExecuteCommandAgent"
+                                    "name": "ExecuteCommandAgent",
                                 }
                             ],
-                            "runtimeId": "dummyRuntimeId"
-                        }
+                            "runtimeId": "dummyRuntimeId",
+                        },
                     ],
                     "lastStatus": "RUNNING",
-                    "enableExecuteCommand": "true"
+                    "enableExecuteCommand": "true",
                 }
-            ]
+            ],
         }
         self.describe_tasks_response_fail = {
-            "failures": [
-                {
-                    "reason": "MISSING",
-                    "arn": "someTaskArn"
-                }
-            ],
-            "tasks": []
+            "failures": [{"reason": "MISSING", "arn": "someTaskArn"}],
+            "tasks": [],
         }
         self.ssm_request_parameters = {
             "Target": "ecs:someClusterArn_someTaskArn_someRuntimeId"
@@ -122,84 +119,109 @@ class TestExecuteCommand(unittest.TestCa
     def test_execute_command_success(self, mock_check_call):
         mock_check_call.return_value = 0
 
-        self.client.execute_command.return_value = \
+        self.client.execute_command.return_value = (
             self.execute_command_response
+        )
         self.client.describe_tasks.return_value = self.describe_tasks_response
 
-        rc = self.caller.invoke('ecs', 'ExecuteCommand',
-                                self.execute_command_params, mock.Mock())
+        rc = self.caller.invoke(
+            'ecs', 'ExecuteCommand', self.execute_command_params, mock.Mock()
+        )
 
         self.assertEqual(rc, 0)
-        self.client.execute_command.\
-            assert_called_with(**self.execute_command_params)
+        self.client.execute_command.assert_called_with(
+            **self.execute_command_params
+        )
 
         mock_check_call_list = mock_check_call.call_args[0][0]
         mock_check_call_list[1] = json.loads(mock_check_call_list[1])
         self.assertEqual(
             mock_check_call_list,
-            ['session-manager-plugin',
-             self.execute_command_response["session"],
-             self.region,
-             'StartSession',
-             self.profile,
-             json.dumps(self.ssm_request_parameters),
-             self.endpoint_url
-             ]
+            [
+                'session-manager-plugin',
+                self.execute_command_response["session"],
+                self.region,
+                'StartSession',
+                self.profile,
+                json.dumps(self.ssm_request_parameters),
+                self.endpoint_url,
+            ],
         )
 
     @mock.patch('awscli.customizations.ecs.executecommand.check_call')
     def test_when_describe_task_fails(self, mock_check_call):
         mock_check_call.return_value = 0
 
-        self.client.execute_command.return_value = \
+        self.client.execute_command.return_value = (
             self.execute_command_response
-        self.client.describe_tasks.side_effect = \
-            Exception("Some Server Exception")
+        )
+        self.client.describe_tasks.side_effect = Exception(
+            "Some Server Exception"
+        )
 
         with self.assertRaisesRegex(Exception, 'Some Server Exception'):
-            rc = self.caller.invoke('ecs', 'ExecuteCommand',
-                                    self.execute_command_params, mock.Mock())
+            rc = self.caller.invoke(
+                'ecs',
+                'ExecuteCommand',
+                self.execute_command_params,
+                mock.Mock(),
+            )
             self.assertEqual(rc, 0)
-            self.client.execute_command. \
-                assert_called_with(**self.execute_command_params)
+            self.client.execute_command.assert_called_with(
+                **self.execute_command_params
+            )
 
     @mock.patch('awscli.customizations.ecs.executecommand.check_call')
     def test_when_describe_task_returns_no_tasks(self, mock_check_call):
         mock_check_call.return_value = 0
 
-        self.client.execute_command.return_value = \
+        self.client.execute_command.return_value = (
             self.execute_command_response
-        self.client.describe_tasks.return_value = \
+        )
+        self.client.describe_tasks.return_value = (
             self.describe_tasks_response_fail
+        )
 
         with self.assertRaises(Exception):
-            rc = self.caller.invoke('ecs', 'ExecuteCommand',
-                                    self.execute_command_params, mock.Mock())
+            rc = self.caller.invoke(
+                'ecs',
+                'ExecuteCommand',
+                self.execute_command_params,
+                mock.Mock(),
+            )
             self.assertEqual(rc, 0)
-            self.client.execute_command. \
-                assert_called_with(**self.execute_command_params)
+            self.client.execute_command.assert_called_with(
+                **self.execute_command_params
+            )
 
     @mock.patch('awscli.customizations.ecs.executecommand.check_call')
     def test_when_check_call_fails(self, mock_check_call):
         mock_check_call.side_effect = [0, Exception('some Exception')]
 
-        self.client.execute_command.return_value = \
+        self.client.execute_command.return_value = (
             self.execute_command_response
+        )
         self.client.describe_tasks.return_value = self.describe_tasks_response
 
         with self.assertRaises(Exception):
-            self.caller.invoke('ecs', 'ExecuteCommand',
-                               self.execute_command_params, mock.Mock())
+            self.caller.invoke(
+                'ecs',
+                'ExecuteCommand',
+                self.execute_command_params,
+                mock.Mock(),
+            )
 
             mock_check_call_list = mock_check_call.call_args[0][0]
             mock_check_call_list[1] = json.loads(mock_check_call_list[1])
             self.assertEqual(
                 mock_check_call_list,
-                ['session-manager-plugin',
-                 self.execute_command_response["session"],
-                 self.region,
-                 'StartSession',
-                 self.profile,
-                 json.dumps(self.ssm_request_parameters),
-                 self.endpoint_url],
+                [
+                    'session-manager-plugin',
+                    self.execute_command_response["session"],
+                    self.region,
+                    'StartSession',
+                    self.profile,
+                    json.dumps(self.ssm_request_parameters),
+                    self.endpoint_url,
+                ],
             )
diff -pruN 2.23.6-1/tests/unit/customizations/ecs/test_filehelpers.py 2.31.35-1/tests/unit/customizations/ecs/test_filehelpers.py
--- 2.23.6-1/tests/unit/customizations/ecs/test_filehelpers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/ecs/test_filehelpers.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,21 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
 from awscli.customizations.ecs.exceptions import MissingPropertyError
-from awscli.customizations.ecs.filehelpers import (APP_PREFIX,
-                                                   DGP_PREFIX,
-                                                   find_required_key,
-                                                   get_app_name,
-                                                   get_cluster_name_from_arn,
-                                                   get_deploy_group_name,
-                                                   MAX_CHAR_LENGTH,
-                                                   parse_appspec)
+from awscli.customizations.ecs.filehelpers import (
+    APP_PREFIX,
+    DGP_PREFIX,
+    MAX_CHAR_LENGTH,
+    find_required_key,
+    get_app_name,
+    get_cluster_name_from_arn,
+    get_deploy_group_name,
+    parse_appspec,
+)
+from awscli.testutils import unittest
 
 
 class TestFilehelpers(unittest.TestCase):
-
     YAML_APPSPEC = """
     version: 0.0
     resources:
@@ -39,59 +40,61 @@ class TestFilehelpers(unittest.TestCase)
 
     PARSED_APPSPEC = {
         "version": 0.0,
-        "resources": [{
-            "TestService": {
-                "type": "AWS::ECS::Service",
-                "properties": {
-                    "taskDefinition": "arn:aws:ecs:::task-definition/test:1",
-                    "loadBalancerInfo": {
-                        "containerName": "web",
-                        "containerPort": 80
-                    }
+        "resources": [
+            {
+                "TestService": {
+                    "type": "AWS::ECS::Service",
+                    "properties": {
+                        "taskDefinition": "arn:aws:ecs:::task-definition/test:1",
+                        "loadBalancerInfo": {
+                            "containerName": "web",
+                            "containerPort": 80,
+                        },
+                    },
                 }
             }
-        }]
+        ],
     }
 
     MIXED_CASE_APPSPEC = {
         "version": 0.0,
-        "Resources": [{
-            "TestService": {
-                "TYPE": "AWS::ECS::Service",
-                "PROperties": {
-                    "TaskDefinition": "arn:aws:ecs:::task-definition/test:1",
-                    "loadbalancerInfo": {
-                        "containerName": "web",
-                        "containerPort": 80
-                    }
+        "Resources": [
+            {
+                "TestService": {
+                    "TYPE": "AWS::ECS::Service",
+                    "PROperties": {
+                        "TaskDefinition": "arn:aws:ecs:::task-definition/test:1",
+                        "loadbalancerInfo": {
+                            "containerName": "web",
+                            "containerPort": 80,
+                        },
+                    },
                 }
             }
-        }]
+        ],
     }
 
     def test_find_required_key(self):
         test_properties_dict = {
             "TaskDefinition": "arn:aws:ecs:::task-definition/test:1",
-            "loadbalancerInfo": {
-                    "containerName": "web",
-                    "containerPort": 80
-                } 
+            "loadbalancerInfo": {"containerName": "web", "containerPort": 80},
         }
         test_key = 'taskDefinition'
         expected_result = 'TaskDefinition'
 
         result = find_required_key(
-            'task definition', test_properties_dict, test_key)
+            'task definition', test_properties_dict, test_key
+        )
         self.assertEqual(result, expected_result)
 
     def test_find_required_key_error_missing_key(self):
-        invalid_properties_dict = {
-            'name': 'some-lambda-function'
-        }
+        invalid_properties_dict = {'name': 'some-lambda-function'}
         test_key = 'taskDefinition'
 
         with self.assertRaises(MissingPropertyError):
-            find_required_key('task definition', invalid_properties_dict, test_key)
+            find_required_key(
+                'task definition', invalid_properties_dict, test_key
+            )
 
     def test_find_required_key_error_empty_object(self):
         test_key = 'taskDefinition'
@@ -103,7 +106,12 @@ class TestFilehelpers(unittest.TestCase)
         cluster = 'ClusterClusterClusterClusterClusterClusterClusterCluster'
         service = 'ServiceServiceServiceServiceServiceServiceServiceService'
 
-        expected = APP_PREFIX + cluster[:MAX_CHAR_LENGTH] + '-' + service[:MAX_CHAR_LENGTH]
+        expected = (
+            APP_PREFIX
+            + cluster[:MAX_CHAR_LENGTH]
+            + '-'
+            + service[:MAX_CHAR_LENGTH]
+        )
         response = get_app_name(service, cluster, None)
 
         self.assertEqual(expected, response)
@@ -134,7 +142,12 @@ class TestFilehelpers(unittest.TestCase)
         cluster = 'ClusterClusterClusterClusterClusterClusterClusterCluster'
         service = 'ServiceServiceServiceServiceServiceServiceServiceService'
 
-        expected = DGP_PREFIX + cluster[:MAX_CHAR_LENGTH] + '-' + service[:MAX_CHAR_LENGTH]
+        expected = (
+            DGP_PREFIX
+            + cluster[:MAX_CHAR_LENGTH]
+            + '-'
+            + service[:MAX_CHAR_LENGTH]
+        )
         response = get_deploy_group_name(service, cluster, None)
 
         self.assertEqual(expected, response)
diff -pruN 2.23.6-1/tests/unit/customizations/eks/test_get_token.py 2.31.35-1/tests/unit/customizations/eks/test_get_token.py
--- 2.23.6-1/tests/unit/customizations/eks/test_get_token.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/eks/test_get_token.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,15 +11,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import base64
-import botocore
 import json
 from datetime import datetime
 
-from awscli.testutils import mock, unittest, capture_output
-from awscli.customizations.eks.get_token import (
-    GetTokenCommand,
-    TokenGenerator
-)
+import botocore
+
+from awscli.customizations.eks.get_token import GetTokenCommand, TokenGenerator
+from awscli.testutils import capture_output, mock, unittest
 
 
 class BaseTokenTest(unittest.TestCase):
@@ -34,7 +32,11 @@ class BaseTokenTest(unittest.TestCase):
 
 
 class TestTokenGenerator(BaseTokenTest):
-    @mock.patch.object(TokenGenerator, '_get_presigned_url', return_value='aHR0cHM6Ly9zdHMuYW1hem9uYXdzLmNvbS8=')
+    @mock.patch.object(
+        TokenGenerator,
+        '_get_presigned_url',
+        return_value='aHR0cHM6Ly9zdHMuYW1hem9uYXdzLmNvbS8=',
+    )
     def test_token_no_padding(self, mock_presigned_url):
         generator = TokenGenerator(self._sts_client)
         tok = generator.get_token(self._cluster_name)
@@ -48,4 +50,6 @@ class TestGetTokenCommand(BaseTokenTest)
         try:
             datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ')
         except ValueError:
-            raise ValueError("Incorrect data format, should be %Y-%m-%dT%H:%M:%SZ")
+            raise ValueError(
+                "Incorrect data format, should be %Y-%m-%dT%H:%M:%SZ"
+            )
diff -pruN 2.23.6-1/tests/unit/customizations/eks/test_kubeconfig.py 2.31.35-1/tests/unit/customizations/eks/test_kubeconfig.py
--- 2.23.6-1/tests/unit/customizations/eks/test_kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/eks/test_kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,48 +13,42 @@
 
 import glob
 import os
-import tempfile
 import shutil
+import tempfile
+
 from botocore.compat import OrderedDict
 
-from awscli.testutils import unittest, skip_if_windows
-from awscli.customizations.utils import uni_print
-from awscli.customizations.eks.kubeconfig import (KubeconfigError,
-                                                  KubeconfigInaccessableError,
-                                                  KubeconfigCorruptedError,
-                                                  Kubeconfig,
-                                                  KubeconfigValidator,
-                                                  KubeconfigLoader,
-                                                  KubeconfigAppender,
-                                                  KubeconfigWriter,
-                                                  _get_new_kubeconfig_content,
-                                                  )
 from awscli.customizations.eks.exceptions import EKSError
+from awscli.customizations.eks.kubeconfig import (
+    Kubeconfig,
+    KubeconfigAppender,
+    KubeconfigCorruptedError,
+    KubeconfigError,
+    KubeconfigInaccessableError,
+    KubeconfigLoader,
+    KubeconfigValidator,
+    KubeconfigWriter,
+    _get_new_kubeconfig_content,
+)
 from awscli.customizations.eks.ordered_yaml import ordered_yaml_load
+from awscli.customizations.utils import uni_print
+from awscli.testutils import skip_if_windows, unittest
 from tests.functional.eks.test_util import get_testdata
 
+
 class TestKubeconfig(unittest.TestCase):
     def setUp(self):
-        self._content = OrderedDict([
-            ("apiVersion", "v1")
-        ])
+        self._content = OrderedDict([("apiVersion", "v1")])
         self._path = "/some_path"
 
     def test_no_content(self):
         config = Kubeconfig(self._path, None)
-        self.assertEqual(config.content, 
-                         _get_new_kubeconfig_content())
+        self.assertEqual(config.content, _get_new_kubeconfig_content())
 
     def test_has_cluster(self):
         self._content["clusters"] = [
-            OrderedDict([
-                ("cluster", None),
-                ("name", "clustername")
-            ]),
-            OrderedDict([
-                ("cluster", None),
-                ("name", "anotherclustername")
-            ])
+            OrderedDict([("cluster", None), ("name", "clustername")]),
+            OrderedDict([("cluster", None), ("name", "anotherclustername")]),
         ]
 
         config = Kubeconfig(self._path, self._content)
@@ -73,17 +67,18 @@ class TestKubeconfig(unittest.TestCase):
 
     def test_has_cluster_with_cluster_no_name(self):
         self._content["clusters"] = [
-            OrderedDict([
-                ("cluster", None),
-                ("name", "clustername")
-            ]),
-            OrderedDict([
-                ("cluster", None),
-                ("name", None),
-            ]),
-            OrderedDict([
-                ("cluster", None),
-            ]),
+            OrderedDict([("cluster", None), ("name", "clustername")]),
+            OrderedDict(
+                [
+                    ("cluster", None),
+                    ("name", None),
+                ]
+            ),
+            OrderedDict(
+                [
+                    ("cluster", None),
+                ]
+            ),
         ]
 
         config = Kubeconfig(self._path, self._content)
@@ -92,7 +87,6 @@ class TestKubeconfig(unittest.TestCase):
 
 
 class TestKubeconfigWriter(unittest.TestCase):
-
     @skip_if_windows('Read permissions tests only supported on mac/linux')
     def test_not_world_readable(self):
         tmpdir = tempfile.mkdtemp()
@@ -111,7 +105,11 @@ class TestKubeconfigWriter(unittest.Test
             f.write("#" * 100)
         KubeconfigWriter().write_kubeconfig(Kubeconfig(config_path, {}))
         empty_stat = os.stat(config_path)
-        self.assertLessEqual(empty_stat.st_size, 4, "file should be '{}[newline]', 3/4 bytes long ")
+        self.assertLessEqual(
+            empty_stat.st_size,
+            4,
+            "file should be '{}[newline]', 3/4 bytes long ",
+        )
 
 
 class TestKubeconfigValidator(unittest.TestCase):
@@ -119,265 +117,404 @@ class TestKubeconfigValidator(unittest.T
         self._validator = KubeconfigValidator()
 
     def test_valid(self):
-        valid_cases = glob.glob(get_testdata( "valid_*" ))
+        valid_cases = glob.glob(get_testdata("valid_*"))
         for case in valid_cases:
-            with open(case, 'r') as stream:
+            with open(case) as stream:
                 content_dict = ordered_yaml_load(stream)
             if content_dict is not None:
                 config = Kubeconfig(None, content_dict)
                 try:
                     self._validator.validate_config(config)
                 except KubeconfigError as e:
-                    self.fail("Valid file {0} raised {1}.".format(case, e))
+                    self.fail(f"Valid file {case} raised {e}.")
 
     def test_invalid(self):
         invalid_cases = glob.glob(get_testdata("invalid_*"))
         for case in invalid_cases:
-            with open(case, 'r') as stream:
+            with open(case) as stream:
                 content_dict = ordered_yaml_load(stream)
             config = Kubeconfig(None, content_dict)
-            self.assertRaises(KubeconfigCorruptedError,
-                              self._validator.validate_config, 
-                              config)
+            self.assertRaises(
+                KubeconfigCorruptedError,
+                self._validator.validate_config,
+                config,
+            )
+
 
 class TestKubeconfigAppender(unittest.TestCase):
     def setUp(self):
         self._appender = KubeconfigAppender()
 
     def test_basic_insert(self):
-        initial = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data1"),
-                        ("server", "endpoint1")
-                    ])),
-                ("name", "oldclustername")
-                ])
-            ]),
-            ("contexts", []),
-            ("current-context", "simple"),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", "data2"),
-                ("server", "endpoint2")
-            ])),
-            ("name", "clustername")
-        ])
-        cluster_added_correct = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data1"),
-                        ("server", "endpoint1")
-                    ])),
-                ("name", "oldclustername")
-            ]),
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data2"),
-                        ("server", "endpoint2")
-                    ])),
-                ("name", "clustername")
-                ])
-            ]),
-            ("contexts", []),
-            ("current-context", "simple"),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster_added = self._appender.insert_entry(Kubeconfig(None, initial),
-                                                    "clusters",
-                                                    cluster)
+        initial = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data1",
+                                            ),
+                                            ("server", "endpoint1"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "oldclustername"),
+                            ]
+                        )
+                    ],
+                ),
+                ("contexts", []),
+                ("current-context", "simple"),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", "data2"),
+                            ("server", "endpoint2"),
+                        ]
+                    ),
+                ),
+                ("name", "clustername"),
+            ]
+        )
+        cluster_added_correct = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data1",
+                                            ),
+                                            ("server", "endpoint1"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "oldclustername"),
+                            ]
+                        ),
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data2",
+                                            ),
+                                            ("server", "endpoint2"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "clustername"),
+                            ]
+                        ),
+                    ],
+                ),
+                ("contexts", []),
+                ("current-context", "simple"),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster_added = self._appender.insert_entry(
+            Kubeconfig(None, initial), "clusters", cluster
+        )
         self.assertDictEqual(cluster_added.content, cluster_added_correct)
 
     def test_update_existing(self):
-        initial = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("server", "endpoint")
-                    ])),
-                    ("name", "clustername")
-                ])
-            ]),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", "data"),
-                ("server", "endpoint")
-            ])),
-            ("name", "clustername")
-        ])            
-        correct = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data"),
-                        ("server", "endpoint")
-                    ])),
-                    ("name", "clustername")
-                ])
-            ]),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        updated = self._appender.insert_entry(Kubeconfig(None, initial),
-                                              "clusters",
-                                              cluster)
+        initial = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict([("server", "endpoint")]),
+                                ),
+                                ("name", "clustername"),
+                            ]
+                        )
+                    ],
+                ),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", "data"),
+                            ("server", "endpoint"),
+                        ]
+                    ),
+                ),
+                ("name", "clustername"),
+            ]
+        )
+        correct = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data",
+                                            ),
+                                            ("server", "endpoint"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "clustername"),
+                            ]
+                        )
+                    ],
+                ),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        updated = self._appender.insert_entry(
+            Kubeconfig(None, initial), "clusters", cluster
+        )
         self.assertDictEqual(updated.content, correct)
 
-    def test_key_not_exist(self): 
-        initial = OrderedDict([
-            ("apiVersion", "v1"),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", "data"),
-                ("server", "endpoint")
-            ])),
-            ("name", "clustername")
-        ])
-        correct = OrderedDict([
-            ("apiVersion", "v1"),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", []),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data"),
-                        ("server", "endpoint")
-                    ])),
-                    ("name", "clustername")
-                ])
-            ])
-        ])
-        updated = self._appender.insert_entry(Kubeconfig(None, initial),
-                                              "clusters",
-                                              cluster)
+    def test_key_not_exist(self):
+        initial = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", "data"),
+                            ("server", "endpoint"),
+                        ]
+                    ),
+                ),
+                ("name", "clustername"),
+            ]
+        )
+        correct = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data",
+                                            ),
+                                            ("server", "endpoint"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "clustername"),
+                            ]
+                        )
+                    ],
+                ),
+            ]
+        )
+        updated = self._appender.insert_entry(
+            Kubeconfig(None, initial), "clusters", cluster
+        )
         self.assertDictEqual(updated.content, correct)
 
     def test_key_none(self):
-        initial = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", None),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", "data"),
-                ("server", "endpoint")
-            ])),
-            ("name", "clustername")
-        ])
-        correct = OrderedDict([
-            ("apiVersion", "v1"),
-            ("clusters", [
-                OrderedDict([
-                    ("cluster", OrderedDict([
-                        ("certificate-authority-data", "data"),
-                        ("server", "endpoint")
-                    ])),
-                    ("name", "clustername")
-                ])
-            ]),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", []),
-        ])
-        updated = self._appender.insert_entry(Kubeconfig(None, initial),
-                                              "clusters",
-                                              cluster)
+        initial = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                ("clusters", None),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", "data"),
+                            ("server", "endpoint"),
+                        ]
+                    ),
+                ),
+                ("name", "clustername"),
+            ]
+        )
+        correct = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                (
+                    "clusters",
+                    [
+                        OrderedDict(
+                            [
+                                (
+                                    "cluster",
+                                    OrderedDict(
+                                        [
+                                            (
+                                                "certificate-authority-data",
+                                                "data",
+                                            ),
+                                            ("server", "endpoint"),
+                                        ]
+                                    ),
+                                ),
+                                ("name", "clustername"),
+                            ]
+                        )
+                    ],
+                ),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        updated = self._appender.insert_entry(
+            Kubeconfig(None, initial), "clusters", cluster
+        )
         self.assertDictEqual(updated.content, correct)
 
     def test_key_not_array(self):
-        initial = OrderedDict([
-            ("apiVersion", "v1"),
-            ("contexts", []),
-            ("current-context", None),
-            ("kind", "Config"),
-            ("preferences", OrderedDict()),
-            ("users", [])
-        ])
-        cluster = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", "data"),
-                ("server", "endpoint")
-            ])),
-            ("name", "clustername")
-        ])
-        self.assertRaises(KubeconfigError, 
-                          self._appender.insert_entry,
-                          Kubeconfig(None, initial),
-                          "kind",
-                          cluster)
+        initial = OrderedDict(
+            [
+                ("apiVersion", "v1"),
+                ("contexts", []),
+                ("current-context", None),
+                ("kind", "Config"),
+                ("preferences", OrderedDict()),
+                ("users", []),
+            ]
+        )
+        cluster = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            ("certificate-authority-data", "data"),
+                            ("server", "endpoint"),
+                        ]
+                    ),
+                ),
+                ("name", "clustername"),
+            ]
+        )
+        self.assertRaises(
+            KubeconfigError,
+            self._appender.insert_entry,
+            Kubeconfig(None, initial),
+            "kind",
+            cluster,
+        )
 
     def test_make_context(self):
-        cluster = OrderedDict([
-            ("name", "clustername"),
-            ("cluster", OrderedDict())
-        ])
-        user = OrderedDict([
-            ("name", "username"),
-            ("user", OrderedDict())
-        ])
-        context_correct = OrderedDict([
-            ("context", OrderedDict([
-                ("cluster", "clustername"),
-                ("user", "username")
-            ])),
-            ("name", "username")
-        ])
+        cluster = OrderedDict(
+            [("name", "clustername"), ("cluster", OrderedDict())]
+        )
+        user = OrderedDict([("name", "username"), ("user", OrderedDict())])
+        context_correct = OrderedDict(
+            [
+                (
+                    "context",
+                    OrderedDict(
+                        [("cluster", "clustername"), ("user", "username")]
+                    ),
+                ),
+                ("name", "username"),
+            ]
+        )
         context = self._appender._make_context(cluster, user)
         self.assertDictEqual(context, context_correct)
 
     def test_make_context_alias(self):
-        cluster = OrderedDict([
-            ("name", "clustername"),
-            ("cluster", OrderedDict())
-        ])
-        user = OrderedDict([
-            ("name", "username"),
-            ("user", OrderedDict())
-        ])
-        context_correct = OrderedDict([
-            ("context", OrderedDict([
-                ("cluster", "clustername"),
-                ("user", "username")
-            ])),
-            ("name", "alias")
-        ])
+        cluster = OrderedDict(
+            [("name", "clustername"), ("cluster", OrderedDict())]
+        )
+        user = OrderedDict([("name", "username"), ("user", OrderedDict())])
+        context_correct = OrderedDict(
+            [
+                (
+                    "context",
+                    OrderedDict(
+                        [("cluster", "clustername"), ("user", "username")]
+                    ),
+                ),
+                ("name", "alias"),
+            ]
+        )
         alias = "alias"
         context = self._appender._make_context(cluster, user, alias=alias)
         self.assertDictEqual(context, context_correct)
diff -pruN 2.23.6-1/tests/unit/customizations/eks/test_update_kubeconfig.py 2.31.35-1/tests/unit/customizations/eks/test_update_kubeconfig.py
--- 2.23.6-1/tests/unit/customizations/eks/test_update_kubeconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/eks/test_update_kubeconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,15 +24,21 @@ from botocore.compat import OrderedDict
 import awscli.customizations.eks.kubeconfig as kubeconfig
 from awscli.customizations.eks.exceptions import EKSClusterError, EKSError
 from awscli.customizations.eks.ordered_yaml import ordered_yaml_load
-from awscli.customizations.eks.update_kubeconfig import (API_VERSION,
-                                                         EKSClient,
-                                                         KubeconfigSelector)
+from awscli.customizations.eks.update_kubeconfig import (
+    API_VERSION,
+    EKSClient,
+    KubeconfigSelector,
+)
 from awscli.customizations.utils import uni_print
 from awscli.testutils import mock, unittest
 from tests.functional.eks.test_util import (
-    describe_cluster_creating_response, describe_cluster_deleting_response,
-    describe_cluster_no_status_response, describe_cluster_response,
-    describe_cluster_response_outpost_cluster, get_testdata)
+    describe_cluster_creating_response,
+    describe_cluster_deleting_response,
+    describe_cluster_no_status_response,
+    describe_cluster_response,
+    describe_cluster_response_outpost_cluster,
+    get_testdata,
+)
 
 
 def generate_env_variable(files):
@@ -54,21 +60,21 @@ def generate_env_variable(files):
 
 EXAMPLE_ARN = "arn:aws:eks:region:111222333444:cluster/ExampleCluster"
 
+
 class TestKubeconfigSelector(unittest.TestCase):
     def setUp(self):
         self._validator = kubeconfig.KubeconfigValidator()
         self._loader = kubeconfig.KubeconfigLoader(self._validator)
 
-    def assert_chosen_path(self,
-                           env_variable,
-                           path_in,
-                           cluster_name,
-                           chosen_path):
-        selector = KubeconfigSelector(env_variable, path_in, 
-                                                    self._validator,
-                                                    self._loader)
-        self.assertEqual(selector.choose_kubeconfig(cluster_name).path,
-                         chosen_path)  
+    def assert_chosen_path(
+        self, env_variable, path_in, cluster_name, chosen_path
+    ):
+        selector = KubeconfigSelector(
+            env_variable, path_in, self._validator, self._loader
+        )
+        self.assertEqual(
+            selector.choose_kubeconfig(cluster_name).path, chosen_path
+        )
 
     def test_parse_env_variable(self):
         paths = [
@@ -78,158 +84,222 @@ class TestKubeconfigSelector(unittest.Te
             get_testdata("valid_bad_cluster2"),
             "",
             get_testdata("valid_existing"),
-            ""
+            "",
         ]
 
         env_variable = generate_env_variable(paths)
 
-        selector = KubeconfigSelector(env_variable, None, self._validator,
-                                                          self._loader)
-        self.assertEqual(selector._paths, [path for path in paths 
-                                                if len(path) > 0])
+        selector = KubeconfigSelector(
+            env_variable, None, self._validator, self._loader
+        )
+        self.assertEqual(
+            selector._paths, [path for path in paths if len(path) > 0]
+        )
 
     def test_choose_env_only(self):
-        paths = [
-            get_testdata("valid_simple"),
-            get_testdata("valid_existing")
-        ] + glob.glob(get_testdata("invalid_*")) + [
-            get_testdata("valid_bad_context"),
-            get_testdata("valid_no_user")
-        ]
+        paths = (
+            [get_testdata("valid_simple"), get_testdata("valid_existing")]
+            + glob.glob(get_testdata("invalid_*"))
+            + [
+                get_testdata("valid_bad_context"),
+                get_testdata("valid_no_user"),
+            ]
+        )
         env_variable = generate_env_variable(paths)
-        self.assert_chosen_path(env_variable, 
-                                None, 
-                                EXAMPLE_ARN, 
-                                get_testdata("valid_simple"))
+        self.assert_chosen_path(
+            env_variable, None, EXAMPLE_ARN, get_testdata("valid_simple")
+        )
 
     def test_choose_existing(self):
-        paths = [
-            get_testdata("valid_simple"),
-            get_testdata("valid_existing")
-        ] + glob.glob(get_testdata("invalid_*")) + [
-            get_testdata("valid_bad_context"),
-            get_testdata("valid_no_user"),
-            get_testdata("output_single"),
-            get_testdata("output_single_with_role")
-        ]
+        paths = (
+            [get_testdata("valid_simple"), get_testdata("valid_existing")]
+            + glob.glob(get_testdata("invalid_*"))
+            + [
+                get_testdata("valid_bad_context"),
+                get_testdata("valid_no_user"),
+                get_testdata("output_single"),
+                get_testdata("output_single_with_role"),
+            ]
+        )
         env_variable = generate_env_variable(paths)
-        self.assert_chosen_path(env_variable, 
-                                None, 
-                                EXAMPLE_ARN, 
-                                get_testdata("output_single"))
+        self.assert_chosen_path(
+            env_variable, None, EXAMPLE_ARN, get_testdata("output_single")
+        )
 
     def test_arg_override(self):
-        paths = [
-            get_testdata("valid_simple"),
-            get_testdata("valid_existing")
-        ] + glob.glob(get_testdata("invalid_*")) + [
-            get_testdata("valid_bad_context"),
-            get_testdata("valid_no_user"),
-            get_testdata("output_single"),
-            get_testdata("output_single_with_role")
-        ]
+        paths = (
+            [get_testdata("valid_simple"), get_testdata("valid_existing")]
+            + glob.glob(get_testdata("invalid_*"))
+            + [
+                get_testdata("valid_bad_context"),
+                get_testdata("valid_no_user"),
+                get_testdata("output_single"),
+                get_testdata("output_single_with_role"),
+            ]
+        )
         env_variable = generate_env_variable(paths)
-        self.assert_chosen_path(env_variable, 
-                                get_testdata("output_combined"), 
-                                EXAMPLE_ARN, 
-                                get_testdata("output_combined"))
+        self.assert_chosen_path(
+            env_variable,
+            get_testdata("output_combined"),
+            EXAMPLE_ARN,
+            get_testdata("output_combined"),
+        )
 
     def test_first_corrupted(self):
         paths = glob.glob(get_testdata("invalid_*")) + [
             get_testdata("valid_bad_context"),
-            get_testdata("valid_no_user")
+            get_testdata("valid_no_user"),
         ]
         env_variable = generate_env_variable(paths)
-        selector = KubeconfigSelector(env_variable, None, self._validator,
-                                                          self._loader)
-        self.assertRaises(kubeconfig.KubeconfigCorruptedError, 
-                          selector.choose_kubeconfig,
-                          EXAMPLE_ARN)
+        selector = KubeconfigSelector(
+            env_variable, None, self._validator, self._loader
+        )
+        self.assertRaises(
+            kubeconfig.KubeconfigCorruptedError,
+            selector.choose_kubeconfig,
+            EXAMPLE_ARN,
+        )
 
     def test_arg_override_first_corrupted(self):
         paths = glob.glob(get_testdata("invalid_*")) + [
             get_testdata("valid_bad_context"),
-            get_testdata("valid_no_user")
+            get_testdata("valid_no_user"),
         ]
         env_variable = generate_env_variable(paths)
-        self.assert_chosen_path(env_variable, 
-                                get_testdata("output_combined"), 
-                                EXAMPLE_ARN, 
-                                get_testdata("output_combined"))
+        self.assert_chosen_path(
+            env_variable,
+            get_testdata("output_combined"),
+            EXAMPLE_ARN,
+            get_testdata("output_combined"),
+        )
+
 
 class TestEKSClient(unittest.TestCase):
     def setUp(self):
-        self._correct_cluster_entry = OrderedDict([
-            ("cluster", OrderedDict([
-                ("certificate-authority-data", describe_cluster_response()\
-                    ["cluster"]["certificateAuthority"]["data"]),
-                ("server", describe_cluster_response()["cluster"]["endpoint"])
-            ])),
-            ("name", describe_cluster_response()["cluster"]["arn"])
-        ])
-        self._correct_user_entry = OrderedDict([
-            ("name", describe_cluster_response()["cluster"]["arn"]),
-            ("user", OrderedDict([
-                ("exec", OrderedDict([
-                    ("apiVersion", API_VERSION),
-                    ("args",
+        self._correct_cluster_entry = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
                         [
-                            "--region",
-                            "region",
-                            "eks",
-                            "get-token",
-                            "--cluster-name",
-                            "ExampleCluster",
-                            "--output",
-                            "json",
-                        ]),
-                    ("command", "aws")
-                ]))
-            ]))
-        ])
-
-        self._correct_user_entry_outpost_cluster = OrderedDict([
-            ("name", describe_cluster_response()["cluster"]["arn"]),
-            ("user", OrderedDict([
-                ("exec", OrderedDict([
-                    ("apiVersion", API_VERSION),
-                    ("args",
+                            (
+                                "certificate-authority-data",
+                                describe_cluster_response()["cluster"][
+                                    "certificateAuthority"
+                                ]["data"],
+                            ),
+                            (
+                                "server",
+                                describe_cluster_response()["cluster"][
+                                    "endpoint"
+                                ],
+                            ),
+                        ]
+                    ),
+                ),
+                ("name", describe_cluster_response()["cluster"]["arn"]),
+            ]
+        )
+        self._correct_user_entry = OrderedDict(
+            [
+                ("name", describe_cluster_response()["cluster"]["arn"]),
+                (
+                    "user",
+                    OrderedDict(
                         [
-                            "--region",
-                            "region",
-                            "eks",
-                            "get-token",
-                            "--cluster-id",
-                            "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
-                            "--output",
-                            "json",
-                        ]),
-                    ("command", "aws")
-                ]))
-            ]))
-        ])
+                            (
+                                "exec",
+                                OrderedDict(
+                                    [
+                                        ("apiVersion", API_VERSION),
+                                        (
+                                            "args",
+                                            [
+                                                "--region",
+                                                "region",
+                                                "eks",
+                                                "get-token",
+                                                "--cluster-name",
+                                                "ExampleCluster",
+                                                "--output",
+                                                "json",
+                                            ],
+                                        ),
+                                        ("command", "aws"),
+                                    ]
+                                ),
+                            )
+                        ]
+                    ),
+                ),
+            ]
+        )
+
+        self._correct_user_entry_outpost_cluster = OrderedDict(
+            [
+                ("name", describe_cluster_response()["cluster"]["arn"]),
+                (
+                    "user",
+                    OrderedDict(
+                        [
+                            (
+                                "exec",
+                                OrderedDict(
+                                    [
+                                        ("apiVersion", API_VERSION),
+                                        (
+                                            "args",
+                                            [
+                                                "--region",
+                                                "region",
+                                                "eks",
+                                                "get-token",
+                                                "--cluster-id",
+                                                "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
+                                                "--output",
+                                                "json",
+                                            ],
+                                        ),
+                                        ("command", "aws"),
+                                    ]
+                                ),
+                            )
+                        ]
+                    ),
+                ),
+            ]
+        )
 
         self._mock_client = mock.Mock()
-        self._mock_client.describe_cluster.return_value =\
-                                                    describe_cluster_response()
+        self._mock_client.describe_cluster.return_value = (
+            describe_cluster_response()
+        )
 
         self._session = mock.Mock(spec=botocore.session.Session)
         self._session.create_client.return_value = self._mock_client
         self._session.profile = None
 
-        self._client = EKSClient(self._session, parsed_args=Namespace(cluster_name="ExampleCluster", role_arn=None))
+        self._client = EKSClient(
+            self._session,
+            parsed_args=Namespace(
+                cluster_name="ExampleCluster", role_arn=None, proxy_url=None
+            ),
+        )
 
     def test_get_cluster_description(self):
-        self.assertEqual(self._client.cluster_description,
-                         describe_cluster_response()["cluster"])
+        self.assertEqual(
+            self._client.cluster_description,
+            describe_cluster_response()["cluster"],
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
         self._session.create_client.assert_called_once_with("eks")
 
     def test_get_cluster_description_no_status(self):
-        self._mock_client.describe_cluster.return_value = \
+        self._mock_client.describe_cluster.return_value = (
             describe_cluster_no_status_response()
+        )
         with self.assertRaises(EKSClusterError):
             self._client.cluster_description
         self._mock_client.describe_cluster.assert_called_once_with(
@@ -238,44 +308,95 @@ class TestEKSClient(unittest.TestCase):
         self._session.create_client.assert_called_once_with("eks")
 
     def test_get_cluster_entry(self):
-        self.assertEqual(self._client.get_cluster_entry(),
-                         self._correct_cluster_entry)
+        self.assertEqual(
+            self._client.get_cluster_entry(), self._correct_cluster_entry
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
         self._session.create_client.assert_called_once_with("eks")
 
+    def test_get_cluster_entry_with_proxy_url_passed(self):
+        proxy_url = "https://myproxy.com"
+        correct_cluster_entry_with_proxy_url = OrderedDict(
+            [
+                (
+                    "cluster",
+                    OrderedDict(
+                        [
+                            (
+                                "certificate-authority-data",
+                                describe_cluster_response()["cluster"][
+                                    "certificateAuthority"
+                                ]["data"],
+                            ),
+                            (
+                                "server",
+                                describe_cluster_response()["cluster"][
+                                    "endpoint"
+                                ],
+                            ),
+                            ("proxy-url", proxy_url),
+                        ]
+                    ),
+                ),
+                ("name", describe_cluster_response()["cluster"]["arn"]),
+            ]
+        )
+        client = EKSClient(
+            self._session,
+            parsed_args=Namespace(
+                cluster_name="ProxiedCluster",
+                role_arn=None,
+                proxy_url=proxy_url,
+            ),
+        )
+        self.assertEqual(
+            client.get_cluster_entry(), correct_cluster_entry_with_proxy_url
+        )
+        self._mock_client.describe_cluster.assert_called_once_with(
+            name="ProxiedCluster"
+        )
+        self._session.create_client.assert_called_once_with("eks")
+
     def test_get_user_entry(self):
-        self.assertEqual(self._client.get_user_entry(),
-                         self._correct_user_entry)
+        self.assertEqual(
+            self._client.get_user_entry(), self._correct_user_entry
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
         self._session.create_client.assert_called_once_with("eks")
 
     def test_get_user_entry_outpost_cluster(self):
-        self._mock_client.describe_cluster.return_value =\
-                                                    describe_cluster_response_outpost_cluster()
-        self.assertEqual(self._client.get_user_entry(),
-                         self._correct_user_entry_outpost_cluster)
+        self._mock_client.describe_cluster.return_value = (
+            describe_cluster_response_outpost_cluster()
+        )
+        self.assertEqual(
+            self._client.get_user_entry(),
+            self._correct_user_entry_outpost_cluster,
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
-        self._session.create_client.assert_called_once_with("eks") 
+        self._session.create_client.assert_called_once_with("eks")
 
     def test_get_both(self):
-        self.assertEqual(self._client.get_cluster_entry(),
-                         self._correct_cluster_entry)
-        self.assertEqual(self._client.get_user_entry(),
-                         self._correct_user_entry)
+        self.assertEqual(
+            self._client.get_cluster_entry(), self._correct_cluster_entry
+        )
+        self.assertEqual(
+            self._client.get_user_entry(), self._correct_user_entry
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
         self._session.create_client.assert_called_once_with("eks")
 
     def test_cluster_creating(self):
-        self._mock_client.describe_cluster.return_value =\
-                                           describe_cluster_creating_response()
+        self._mock_client.describe_cluster.return_value = (
+            describe_cluster_creating_response()
+        )
         with self.assertRaises(EKSClusterError):
             self._client.cluster_description
         self._mock_client.describe_cluster.assert_called_once_with(
@@ -284,8 +405,9 @@ class TestEKSClient(unittest.TestCase):
         self._session.create_client.assert_called_once_with("eks")
 
     def test_cluster_deleting(self):
-        self._mock_client.describe_cluster.return_value =\
-                                           describe_cluster_deleting_response()
+        self._mock_client.describe_cluster.return_value = (
+            describe_cluster_deleting_response()
+        )
         with self.assertRaises(EKSClusterError):
             self._client.cluster_description
         self._mock_client.describe_cluster.assert_called_once_with(
@@ -296,13 +418,11 @@ class TestEKSClient(unittest.TestCase):
     def test_profile(self):
         self._session.profile = "profile"
         self._correct_user_entry["user"]["exec"]["env"] = [
-            OrderedDict([
-                ("name", "AWS_PROFILE"),
-                ("value", "profile")
-            ])
+            OrderedDict([("name", "AWS_PROFILE"), ("value", "profile")])
         ]
-        self.assertEqual(self._client.get_user_entry(),
-                         self._correct_user_entry)
+        self.assertEqual(
+            self._client.get_user_entry(), self._correct_user_entry
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
@@ -310,16 +430,19 @@ class TestEKSClient(unittest.TestCase):
 
     def test_create_user_with_alias(self):
         self._correct_user_entry["name"] = "alias"
-        self.assertEqual(self._client.get_user_entry(user_alias="alias"),
-                         self._correct_user_entry)
+        self.assertEqual(
+            self._client.get_user_entry(user_alias="alias"),
+            self._correct_user_entry,
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
         self._session.create_client.assert_called_once_with("eks")
 
     def test_create_user_without_alias(self):
-        self.assertEqual(self._client.get_user_entry(),
-                         self._correct_user_entry)
+        self.assertEqual(
+            self._client.get_user_entry(), self._correct_user_entry
+        )
         self._mock_client.describe_cluster.assert_called_once_with(
             name="ExampleCluster"
         )
diff -pruN 2.23.6-1/tests/unit/customizations/emr/__init__.py 2.31.35-1/tests/unit/customizations/emr/__init__.py
--- 2.23.6-1/tests/unit/customizations/emr/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,11 +13,10 @@
 
 from awscli.customizations.emr import exceptions
 from awscli.customizations.emr.configutils import ConfigWriter
-from awscli.testutils import mock, BaseAWSCommandParamsTest
+from awscli.testutils import BaseAWSCommandParamsTest, mock
 
 
 class EMRBaseAWSCommandParamsTest(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(EMRBaseAWSCommandParamsTest, self).setUp()
 
@@ -27,7 +26,8 @@ class EMRBaseAWSCommandParamsTest(BaseAW
 
         # Do not write or update the config (~/.aws/config) file
         self.patcher_update_config = mock.patch(
-            'awscli.customizations.emr.configutils.ConfigWriter.update_config')
+            'awscli.customizations.emr.configutils.ConfigWriter.update_config'
+        )
         self.mock_update_config = self.patcher_update_config.start()
 
     def set_configs(self, configs):
@@ -38,8 +38,9 @@ class EMRBaseAWSCommandParamsTest(BaseAW
         super(EMRBaseAWSCommandParamsTest, self).tearDown()
         self.patcher_update_config.stop()
 
-    def assert_error_msg(self, cmd,
-                         exception_class_name, error_msg_kwargs={}, rc=255):
+    def assert_error_msg(
+        self, cmd, exception_class_name, error_msg_kwargs={}, rc=255
+    ):
         exception_class = getattr(exceptions, exception_class_name)
         error_msg = "\n%s\n" % exception_class.fmt.format(**error_msg_kwargs)
         result = self.run_cmd(cmd, rc)
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_bootstrap_actions.json 2.31.35-1/tests/unit/customizations/emr/input_bootstrap_actions.json
--- 2.23.6-1/tests/unit/customizations/emr/input_bootstrap_actions.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_bootstrap_actions.json	2025-11-12 19:17:29.000000000 +0000
@@ -7,4 +7,4 @@
      "Path": "s3://mybucket/test2",
      "Args": ["arg1", "arg2"]
     }
-]
\ No newline at end of file
+]
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_az.json 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_az.json
--- 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_az.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_az.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,4 +2,4 @@
     "AvailabilityZone": "us-east-1a",
     "KeyName": "testkey",
     "InstanceProfile": "EMR_EC2_DefaultRole"
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_security_groups.json 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_security_groups.json
--- 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_security_groups.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_security_groups.json	2025-11-12 19:17:29.000000000 +0000
@@ -4,4 +4,4 @@
     "ServiceAccessSecurityGroup": "sg-service-access",
     "AdditionalMasterSecurityGroups": ["sg-addMaster1","sg-addMaster2","sg-addMaster3","sg-addMaster4"],
     "AdditionalSlaveSecurityGroups": ["sg-addSlave1","sg-addSlave2","sg-addSlave3","sg-addSlave4"]
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_subnet.json 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_subnet.json
--- 2.23.6-1/tests/unit/customizations/emr/input_ec2_attributes_with_subnet.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_ec2_attributes_with_subnet.json	2025-11-12 19:17:29.000000000 +0000
@@ -2,4 +2,4 @@
     "SubnetId": "subnet-123456",
     "KeyName": "testkey",
     "InstanceProfile": "EMR_EC2_DefaultRole"
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_hbase_restore_from_backup.json 2.31.35-1/tests/unit/customizations/emr/input_hbase_restore_from_backup.json
--- 2.23.6-1/tests/unit/customizations/emr/input_hbase_restore_from_backup.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_hbase_restore_from_backup.json	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,4 @@
 {
 	"Dir": "s3://mybucket/test",
 	"BackupVersion": "test_version"
-}
\ No newline at end of file
+}
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_instance_groups.json 2.31.35-1/tests/unit/customizations/emr/input_instance_groups.json
--- 2.23.6-1/tests/unit/customizations/emr/input_instance_groups.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_instance_groups.json	2025-11-12 19:17:29.000000000 +0000
@@ -18,4 +18,4 @@
         "BidPrice": "3.45",
         "InstanceType": "m1.xlarge"
     }
-]
\ No newline at end of file
+]
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_instance_groups_ebs_config.json 2.31.35-1/tests/unit/customizations/emr/input_instance_groups_ebs_config.json
--- 2.23.6-1/tests/unit/customizations/emr/input_instance_groups_ebs_config.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_instance_groups_ebs_config.json	2025-11-12 19:17:29.000000000 +0000
@@ -6,7 +6,7 @@
         "InstanceType": "d2.xlarge",
         "EbsConfiguration":
                 {"EbsBlockDeviceConfigs":
-                        [	
+                        [
                         	{"VolumeSpecification":
 	                            {"VolumeType": "standard",
 	                             "SizeInGB": 10},
diff -pruN 2.23.6-1/tests/unit/customizations/emr/input_instance_groups_spot_bidprice_equals_ondemandprice.json 2.31.35-1/tests/unit/customizations/emr/input_instance_groups_spot_bidprice_equals_ondemandprice.json
--- 2.23.6-1/tests/unit/customizations/emr/input_instance_groups_spot_bidprice_equals_ondemandprice.json	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/input_instance_groups_spot_bidprice_equals_ondemandprice.json	2025-11-12 19:17:29.000000000 +0000
@@ -20,4 +20,4 @@
         "InstanceType": "m1.xlarge",
         "BidPrice": "OnDemandPrice"
     }
-]
\ No newline at end of file
+]
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_add_instance_fleet.py 2.31.35-1/tests/unit/customizations/emr/test_add_instance_fleet.py
--- 2.23.6-1/tests/unit/customizations/emr/test_add_instance_fleet.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_add_instance_fleet.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,23 +11,28 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-from tests.unit.customizations.emr import test_constants_instance_fleets as \
-    CONSTANTS_FLEET
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+from tests.unit.customizations.emr import (
+    test_constants_instance_fleets as CONSTANTS_FLEET,
+)
+
 
 class TestAddInstanceFleet(BaseAWSCommandParamsTest):
     prefix = f"emr add-instance-fleet --cluster-id {CONSTANTS_FLEET.DEFAULT_CLUSTER_NAME} --instance-fleet "
 
     def test_add_instance_fleet_with_allocation_strategy_spot_and_od(self):
-        result = \
-            {
-                "ClusterId": CONSTANTS_FLEET.DEFAULT_CLUSTER_NAME,
-                "InstanceFleet": CONSTANTS_FLEET.RES_TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD
-            }
+        result = {
+            "ClusterId": CONSTANTS_FLEET.DEFAULT_CLUSTER_NAME,
+            "InstanceFleet": CONSTANTS_FLEET.RES_TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD,
+        }
         self.assert_params_for_cmd(
-            self.prefix + CONSTANTS_FLEET.TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD,
-            result)
+            self.prefix
+            + CONSTANTS_FLEET.TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD,
+            result,
+        )
+
 
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_add_instance_groups.py 2.31.35-1/tests/unit/customizations/emr/test_add_instance_groups.py
--- 2.23.6-1/tests/unit/customizations/emr/test_add_instance_groups.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_add_instance_groups.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-from tests.unit.customizations.emr import test_constants as \
-    CONSTANTS
 import json
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+from tests.unit.customizations.emr import test_constants as CONSTANTS
 
 INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY = (
     ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,'
@@ -29,178 +28,206 @@ INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY
     'Threshold=4.565,Unit=NONE,Dimensions=[{Key=TestKey,Value=TestValue}]}}}]}'
 )
 
-INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}')
+INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}'
 
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}')
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}'
 
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}')
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}'
 
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true}')
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true}'
 
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]}')
-
-MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]} InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=20}},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=40}}]}')
-
-INSTANCE_GROUPS_WITH_CUSTOM_AMI_ARG = (
-    ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,CustomAmiId=ami-deadbeef'
-)
-
-DEFAULT_INSTANCE_GROUPS = [{'InstanceRole': 'TASK',
-                            'InstanceCount': 10,
-                            'Name': 'TASK',
-                            'Market': 'ON_DEMAND',
-                            'InstanceType': 'm2.large'
-                            }]
-
-
-DEFAULT_INSTANCE_GROUPS_WITH_CUSTOM_AMI = \
-    [{'CustomAmiId':'ami-deadbeef',
-    'InstanceRole': 'TASK',
-    'InstanceCount': 2,
-    'Name': 'TASK',
-    'Market': 'ON_DEMAND',
-    'InstanceType': 'd2.xlarge'}]
-
-DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG = \
-    [{'EbsConfiguration': 
-        {'EbsOptimized': True,
-            'EbsBlockDeviceConfigs': 
-                [
-                 {'VolumeSpecification':
-                      {'Iops': 100,
-                      'SizeInGB': 100,
-                      'VolumeType': 'gp2'},
-                      'VolumesPerInstance': 4},
-                  {'VolumeSpecification':
-                     {'Iops': 100,
-                      'SizeInGB': 100,
-                      'VolumeType': 'gp2'}}]},
-    'InstanceCount': 2,
-    'InstanceRole': 'TASK',
-    'InstanceType': 'd2.xlarge',
-    'Market': 'ON_DEMAND',
-    'Name': 'TASK'}]
-
-DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_IOPS = \
-    [{'EbsConfiguration': 
-        {'EbsOptimized': True,
-            'EbsBlockDeviceConfigs': 
-                [{'VolumeSpecification':
-                  {'SizeInGB': 100,
-                  'VolumeType': 'gp2'},
-                  'VolumesPerInstance': 4}]},
-
-     'InstanceCount': 2,
-     'InstanceRole': 'TASK',
-     'InstanceType': 'd2.xlarge',
-     'Market': 'ON_DEMAND',
-     'Name': 'TASK'}]
-
-DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_VOLSPEC = \
-    [{'EbsConfiguration': {'EbsOptimized': True},
-    'InstanceCount': 2,
-    'InstanceRole': 'TASK',
-    'InstanceType': 'd2.xlarge',
-    'Market': 'ON_DEMAND',
-    'Name': 'TASK'}]
-
-DEFAULT_INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY = \
-[{'InstanceCount': 2,
-  'InstanceRole': 'TASK',
-  'InstanceType': 'd2.xlarge',
-  'Market': 'ON_DEMAND',
-  'Name': 'TASK',
-  'AutoScalingPolicy': {
-      'Constraints': {
-          'MinCapacity': 1,
-          'MaxCapacity': 2
-      },
-      'Rules': [
-          {
-             'Name': 'TestRule',
-             'Description': 'TestDescription',
-             'Action': {
-                 'Market': 'ON_DEMAND',
-                 'SimpleScalingPolicyConfiguration': {
-                     'AdjustmentType': 'EXACT_CAPACITY',
-                     'ScalingAdjustment': 2,
-                     'CoolDown': 5
-                 }
-             },
-             'Trigger': {
-                 'CloudWatchAlarmDefinition': {
-                     'ComparisonOperator': 'GREATER_THAN',
-                     'Dimensions': [
-                         {
-                             'Key': 'TestKey',
-                             'Value': 'TestValue'
-                         }],
-                     'EvaluationPeriods': 5,
-                     'MetricName': 'TestMetric',
-                     'Namespace': 'EMR',
-                     'Period': 3,
-                     'Statistic': 'MAXIMUM',
-                     'Threshold': 4.565,
-                     'Unit': 'NONE'
-                 }
-             }
-          }
-      ]
-  }
-  }]
-
-DEFAULT_MULTIPLE_INSTANCE_GROUPS_WITH_EBS_CONFIG = \
-    [{'EbsConfiguration': 
-        {'EbsOptimized': True,
-            'EbsBlockDeviceConfigs': 
-                [{'VolumeSpecification':
-                  {'SizeInGB': 100,
-                  'VolumeType': 'gp2'},
-                  'VolumesPerInstance': 4}]},
-    'InstanceCount': 2,
-    'InstanceRole': 'TASK',
-    'InstanceType': 'd2.xlarge',
-    'Market': 'ON_DEMAND',
-    'Name': 'TASK'},
-   {'EbsConfiguration': 
-        {'EbsOptimized': True,
-            'EbsBlockDeviceConfigs': 
-                [{'VolumeSpecification':
-                   {'Iops': 20,
-                    'SizeInGB': 100,
-                    'VolumeType': 'gp2'
-                    }},
-                   {'VolumeSpecification':
-                    {'Iops': 40,
-                    'SizeInGB': 100,
-                    'VolumeType': 'gp2'}}]},
-    'InstanceCount': 2,
-    'InstanceRole': 'CORE',
-    'InstanceType': 'd2.xlarge',
-    'Market': 'ON_DEMAND',
-    'Name': 'CORE'}]
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]}'
+
+MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]} InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=20}},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=40}}]}'
+
+INSTANCE_GROUPS_WITH_CUSTOM_AMI_ARG = ' InstanceGroupType=TASK,InstanceType=d2.xlarge,InstanceCount=2,CustomAmiId=ami-deadbeef'
+
+DEFAULT_INSTANCE_GROUPS = [
+    {
+        'InstanceRole': 'TASK',
+        'InstanceCount': 10,
+        'Name': 'TASK',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm2.large',
+    }
+]
+
+
+DEFAULT_INSTANCE_GROUPS_WITH_CUSTOM_AMI = [
+    {
+        'CustomAmiId': 'ami-deadbeef',
+        'InstanceRole': 'TASK',
+        'InstanceCount': 2,
+        'Name': 'TASK',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'd2.xlarge',
+    }
+]
+
+DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG = [
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'Iops': 100,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                },
+                {
+                    'VolumeSpecification': {
+                        'Iops': 100,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    }
+                },
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+    }
+]
+
+DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_IOPS = [
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                }
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+    }
+]
+
+DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_VOLSPEC = [
+    {
+        'EbsConfiguration': {'EbsOptimized': True},
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+    }
+]
+
+DEFAULT_INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY = [
+    {
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+        'AutoScalingPolicy': {
+            'Constraints': {'MinCapacity': 1, 'MaxCapacity': 2},
+            'Rules': [
+                {
+                    'Name': 'TestRule',
+                    'Description': 'TestDescription',
+                    'Action': {
+                        'Market': 'ON_DEMAND',
+                        'SimpleScalingPolicyConfiguration': {
+                            'AdjustmentType': 'EXACT_CAPACITY',
+                            'ScalingAdjustment': 2,
+                            'CoolDown': 5,
+                        },
+                    },
+                    'Trigger': {
+                        'CloudWatchAlarmDefinition': {
+                            'ComparisonOperator': 'GREATER_THAN',
+                            'Dimensions': [
+                                {'Key': 'TestKey', 'Value': 'TestValue'}
+                            ],
+                            'EvaluationPeriods': 5,
+                            'MetricName': 'TestMetric',
+                            'Namespace': 'EMR',
+                            'Period': 3,
+                            'Statistic': 'MAXIMUM',
+                            'Threshold': 4.565,
+                            'Unit': 'NONE',
+                        }
+                    },
+                }
+            ],
+        },
+    }
+]
+
+DEFAULT_MULTIPLE_INSTANCE_GROUPS_WITH_EBS_CONFIG = [
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                }
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+    },
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'Iops': 20,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    }
+                },
+                {
+                    'VolumeSpecification': {
+                        'Iops': 40,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    }
+                },
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'CORE',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'CORE',
+    },
+]
 
 
 ADD_INSTANCE_GROUPS_RESULT = {
-    "InstanceGroupIds": [
-        "ig-XXXX"
-    ],
+    "InstanceGroupIds": ["ig-XXXX"],
     "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
-    "JobFlowId": "j-YYYY"
+    "JobFlowId": "j-YYYY",
 }
 
 CONSTRUCTED_RESULT = {
-    "InstanceGroupIds": [
-        "ig-XXXX"
-    ],
+    "InstanceGroupIds": ["ig-XXXX"],
     "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
-    "ClusterId": "j-YYYY"
+    "ClusterId": "j-YYYY",
 }
 
 
@@ -210,8 +237,10 @@ class TestAddInstanceGroups(BaseAWSComma
     def test_instance_groups_with_autoscaling_policy(self):
         cmd = self.prefix
         cmd += INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def assert_error_message_has_field_name(self, error_msg, field_name):
@@ -221,102 +250,140 @@ class TestAddInstanceGroups(BaseAWSComma
     def test_instance_groups_default_name_market(self):
         cmd = self.prefix
         cmd += ' InstanceGroupType=TASK,InstanceCount=10,InstanceType=m2.large'
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS,
+        }
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_missing_instance_group_type_error(self):
-        cmd = self.prefix + ' Name=Task,InstanceType=m1.small,' +\
-            'InstanceCount=5'
+        cmd = (
+            self.prefix
+            + ' Name=Task,InstanceType=m1.small,'
+            + 'InstanceCount=5'
+        )
         result = self.run_cmd(cmd, 252)
-        self.assert_error_message_has_field_name(result[1],
-                                                 'InstanceGroupType')
+        self.assert_error_message_has_field_name(
+            result[1], 'InstanceGroupType'
+        )
 
     def test_instance_groups_missing_instance_type_error(self):
-        cmd = self.prefix + ' Name=Task,InstanceGroupType=Task,' +\
-            'InstanceCount=5'
+        cmd = (
+            self.prefix
+            + ' Name=Task,InstanceGroupType=Task,'
+            + 'InstanceCount=5'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceType')
 
     def test_instance_groups_missing_instance_count_error(self):
-        cmd = self.prefix + ' Name=Task,InstanceGroupType=Task,' +\
-            'InstanceType=m1.xlarge'
+        cmd = (
+            self.prefix
+            + ' Name=Task,InstanceGroupType=Task,'
+            + 'InstanceType=m1.xlarge'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceCount')
 
     def test_instance_groups_all_fields(self):
-        cmd = self.prefix + ' InstanceGroupType=MASTER,Name="MasterGroup",' +\
-            'InstanceCount=1,InstanceType=m1.large'
-        cmd += ' InstanceGroupType=CORE,Name="CoreGroup",InstanceCount=1,' +\
-            'InstanceType=m1.xlarge,BidPrice=1.234'
-        cmd += ' InstanceGroupType=TASK,Name="TaskGroup",InstanceCount=2,' +\
-            'InstanceType=m1.large'
+        cmd = (
+            self.prefix
+            + ' InstanceGroupType=MASTER,Name="MasterGroup",'
+            + 'InstanceCount=1,InstanceType=m1.large'
+        )
+        cmd += (
+            ' InstanceGroupType=CORE,Name="CoreGroup",InstanceCount=1,'
+            + 'InstanceType=m1.xlarge,BidPrice=1.234'
+        )
+        cmd += (
+            ' InstanceGroupType=TASK,Name="TaskGroup",InstanceCount=2,'
+            + 'InstanceType=m1.large'
+        )
 
         expected_instance_groups = [
-            {'InstanceRole': 'MASTER',
-             'InstanceCount': 1,
-             'Name': 'MasterGroup',
-             'Market': 'ON_DEMAND',
-             'InstanceType': 'm1.large'
-             },
-            {'InstanceRole': 'CORE',
-             'InstanceCount': 1,
-             'Name': 'CoreGroup',
-             'Market': 'SPOT',
-             'BidPrice': '1.234',
-             'InstanceType': 'm1.xlarge'
-             },
-            {'InstanceRole': 'TASK',
-             'InstanceCount': 2,
-             'Name': 'TaskGroup',
-             'Market': 'ON_DEMAND',
-             'InstanceType': 'm1.large'
-             }
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'MasterGroup',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 1,
+                'Name': 'CoreGroup',
+                'Market': 'SPOT',
+                'BidPrice': '1.234',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 2,
+                'Name': 'TaskGroup',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.large',
+            },
         ]
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': expected_instance_groups}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': expected_instance_groups,
+        }
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_spot_bidprice_equals_ondemandprice(self):
-        cmd = self.prefix + ' InstanceGroupType=MASTER,Name="MasterGroup",' +\
-            'InstanceCount=1,InstanceType=m1.large,BidPrice=OnDemandPrice'
-        cmd += ' InstanceGroupType=CORE,Name="CoreGroup",InstanceCount=1,' +\
-            'InstanceType=m1.xlarge,BidPrice=OnDemandPrice'
-        cmd += ' InstanceGroupType=TASK,Name="TaskGroup",InstanceCount=2,' +\
-            'InstanceType=m1.large,BidPrice=OnDemandPrice'
+        cmd = (
+            self.prefix
+            + ' InstanceGroupType=MASTER,Name="MasterGroup",'
+            + 'InstanceCount=1,InstanceType=m1.large,BidPrice=OnDemandPrice'
+        )
+        cmd += (
+            ' InstanceGroupType=CORE,Name="CoreGroup",InstanceCount=1,'
+            + 'InstanceType=m1.xlarge,BidPrice=OnDemandPrice'
+        )
+        cmd += (
+            ' InstanceGroupType=TASK,Name="TaskGroup",InstanceCount=2,'
+            + 'InstanceType=m1.large,BidPrice=OnDemandPrice'
+        )
 
         expected_instance_groups = [
-            {'InstanceRole': 'MASTER',
-             'InstanceCount': 1,
-             'Name': 'MasterGroup',
-             'Market': 'SPOT',
-             'InstanceType': 'm1.large'
-             },
-            {'InstanceRole': 'CORE',
-             'InstanceCount': 1,
-             'Name': 'CoreGroup',
-             'Market': 'SPOT',
-             'InstanceType': 'm1.xlarge'
-             },
-            {'InstanceRole': 'TASK',
-             'InstanceCount': 2,
-             'Name': 'TaskGroup',
-             'Market': 'SPOT',
-             'InstanceType': 'm1.large'
-             }
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'MasterGroup',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 1,
+                'Name': 'CoreGroup',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 2,
+                'Name': 'TaskGroup',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.large',
+            },
         ]
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': expected_instance_groups}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': expected_instance_groups,
+        }
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config(self):
         cmd = self.prefix
         cmd += INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_volume_type(self):
@@ -334,29 +401,37 @@ class TestAddInstanceGroups(BaseAWSComma
     def test_instance_groups_with_ebs_config_missing_volume_spec(self):
         cmd = self.prefix
         cmd += INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_VOLSPEC}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_VOLSPEC,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_iops(self):
         cmd = self.prefix
         cmd += INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_IOPS}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_EBS_CONFIG_MISSING_IOPS,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_multiple_instance_groups(self):
         cmd = self.prefix
         cmd += MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_MULTIPLE_INSTANCE_GROUPS_WITH_EBS_CONFIG}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_MULTIPLE_INSTANCE_GROUPS_WITH_EBS_CONFIG,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_custom_ami_instance_groups(self):
         cmd = self.prefix
         cmd += INSTANCE_GROUPS_WITH_CUSTOM_AMI_ARG
-        result = {'JobFlowId': 'J-ABCD',
-                  'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_CUSTOM_AMI}
+        result = {
+            'JobFlowId': 'J-ABCD',
+            'InstanceGroups': DEFAULT_INSTANCE_GROUPS_WITH_CUSTOM_AMI,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     @mock.patch('awscli.customizations.emr.emrutils.call')
@@ -370,5 +445,6 @@ class TestAddInstanceGroups(BaseAWSComma
 
         self.assertEqual(result_json, CONSTRUCTED_RESULT)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_add_steps.py 2.31.35-1/tests/unit/customizations/emr/test_add_steps.py
--- 2.23.6-1/tests/unit/customizations/emr/test_add_steps.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_add_steps.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,201 +11,222 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import os
 import copy
+import os
 
 from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 
 class TestAddSteps(BaseAWSCommandParamsTest):
     prefix = 'emr add-steps --cluster-id j-ABC --steps '
 
-    STREAMING_ARGS = 'Args=-files,' + \
-        's3://elasticmapreduce/samples/wordcount/wordSplitter.py,' + \
-        '-mapper,wordSplitter.py,' + \
-        '-reducer,aggregate,' + \
-        '-input,s3://elasticmapreduce/samples/wordcount/input,' + \
-        '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24'
-    STREAMING_HADOOP_SCRIPT_RUNNER_STEP = \
-        {'Jar': '/home/hadoop/contrib/streaming/hadoop-streaming.jar',
-         'Args':
-            ['-files',
-             's3://elasticmapreduce/samples/wordcount/wordSplitter.py',
-             '-mapper',
-             'wordSplitter.py',
-             '-reducer',
-             'aggregate',
-             '-input',
-             's3://elasticmapreduce/samples/wordcount/input',
-             '-output',
-             's3://mybucket/wordcount/output/2014-04-18/12-15-24']
-         }
-    STREAMING_HADOOP_COMMAND_RUNNER_STEP = \
-        {'Jar': 'command-runner.jar',
-         'Args':
-            ['hadoop-streaming',
-             '-files',
-             's3://elasticmapreduce/samples/wordcount/wordSplitter.py',
-             '-mapper',
-             'wordSplitter.py',
-             '-reducer',
-             'aggregate',
-             '-input',
-             's3://elasticmapreduce/samples/wordcount/input',
-             '-output',
-             's3://mybucket/wordcount/output/2014-04-18/12-15-24']
-         }
-
-    HIVE_BASIC_ARGS = 'Args=-f,' + \
-        's3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
-
-    HIVE_DEFAULT_SCRIPT_RUNNER_STEP = \
-        {'Jar':
-            ('s3://us-east-1.elasticmapreduce/'
-             'libs/script-runner/script-runner.jar'),
-         'Args':
-            ['s3://us-east-1.elasticmapreduce/libs/hive/hive-script',
-             '--run-hive-script',
-             '--hive-versions',
-             'latest',
-             '--args',
-             '-f',
-             's3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
-             ]
-         }
-
-    HIVE_DEFAULT_COMMAND_RUNNER_STEP = \
-        {'Jar':
-            ('command-runner.jar'),
-         'Args':
-            ['hive-script',
-             '--run-hive-script',
-             '--args',
-             '-f',
-             's3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
-             ]
-         }
-
-    PIG_BASIC_ARGS = 'Args=-f,' + \
-        's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
-
-    PIG_DEFAULT_SCRIPT_RUNNER_STEP = \
-        {'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
-         'Args':
-            ['s3://us-east-1.elasticmapreduce/libs/pig/pig-script',
-             '--run-pig-script',
-             '--pig-versions',
-             'latest',
-             '--args',
-             '-f',
-             's3://elasticmapreduce/samples/'
-             'pig-apache/do-reports2.pig',
-             ]}
-
-    PIG_DEFAULT_COMMAND_RUNNER_STEP = \
-        {'Jar':
-            ('command-runner.jar'),
-         'Args':
-            ['pig-script',
-             '--run-pig-script',
-             '--args',
-             '-f',
-             's3://elasticmapreduce/samples/'
-             'pig-apache/do-reports2.pig',
-             ]}
-
-    IMPALA_BASIC_ARGS = 'Args=' + \
-        '--impala-script,s3://myimpala/input,' + \
-        '--console-output-path,s3://myimpala/output'
-
-    IMPALA_BASIC_SCRIPT_RUNNER_STEP = \
-        {'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
-         'Args':
-            ['s3://us-east-1.elasticmapreduce/libs/impala/setup-impala',
-             '--run-impala-script',
-             '--impala-script',
-             's3://myimpala/input',
-             '--console-output-path',
-             's3://myimpala/output'
-             ]
-         }
-
-    SPARK_SUBMIT_BASIC_ARGS = 'Args=' + \
-        '[--deploy-mode,' + \
-        'cluster,' + \
-        '--conf,' + \
-        'k1=v1,' + \
-        's3://mybucket/myfolder/app.jar,' + \
-        'k2=v2]'
-
-    SPARK_SUBMIT_SCRIPT_RUNNER_STEP = \
-        {
-            'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
-            'Args':
-            ['/home/hadoop/spark/bin/spark-submit',
-             '--deploy-mode',
-             'cluster',
-             '--conf',
-             'k1=v1',
-             's3://mybucket/myfolder/app.jar',
-             'k2=v2'
-             ]
-        }
-
-    SPARK_SUBMIT_COMMAND_RUNNER_STEP = \
-        {
-            'Jar': 'command-runner.jar',
-            'Args':
-            ['spark-submit',
-             '--deploy-mode',
-             'cluster',
-             '--conf',
-             'k1=v1',
-             's3://mybucket/myfolder/app.jar',
-             'k2=v2'
-             ]
-        }
+    STREAMING_ARGS = (
+        'Args=-files,'
+        + 's3://elasticmapreduce/samples/wordcount/wordSplitter.py,'
+        + '-mapper,wordSplitter.py,'
+        + '-reducer,aggregate,'
+        + '-input,s3://elasticmapreduce/samples/wordcount/input,'
+        + '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24'
+    )
+    STREAMING_HADOOP_SCRIPT_RUNNER_STEP = {
+        'Jar': '/home/hadoop/contrib/streaming/hadoop-streaming.jar',
+        'Args': [
+            '-files',
+            's3://elasticmapreduce/samples/wordcount/wordSplitter.py',
+            '-mapper',
+            'wordSplitter.py',
+            '-reducer',
+            'aggregate',
+            '-input',
+            's3://elasticmapreduce/samples/wordcount/input',
+            '-output',
+            's3://mybucket/wordcount/output/2014-04-18/12-15-24',
+        ],
+    }
+    STREAMING_HADOOP_COMMAND_RUNNER_STEP = {
+        'Jar': 'command-runner.jar',
+        'Args': [
+            'hadoop-streaming',
+            '-files',
+            's3://elasticmapreduce/samples/wordcount/wordSplitter.py',
+            '-mapper',
+            'wordSplitter.py',
+            '-reducer',
+            'aggregate',
+            '-input',
+            's3://elasticmapreduce/samples/wordcount/input',
+            '-output',
+            's3://mybucket/wordcount/output/2014-04-18/12-15-24',
+        ],
+    }
+
+    HIVE_BASIC_ARGS = (
+        'Args=-f,'
+        + 's3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
+    )
+
+    HIVE_DEFAULT_SCRIPT_RUNNER_STEP = {
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/'
+            'libs/script-runner/script-runner.jar'
+        ),
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
+            '--run-hive-script',
+            '--hive-versions',
+            'latest',
+            '--args',
+            '-f',
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    }
+
+    HIVE_DEFAULT_COMMAND_RUNNER_STEP = {
+        'Jar': ('command-runner.jar'),
+        'Args': [
+            'hive-script',
+            '--run-hive-script',
+            '--args',
+            '-f',
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    }
+
+    PIG_BASIC_ARGS = (
+        'Args=-f,' + 's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
+    )
+
+    PIG_DEFAULT_SCRIPT_RUNNER_STEP = {
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/pig/pig-script',
+            '--run-pig-script',
+            '--pig-versions',
+            'latest',
+            '--args',
+            '-f',
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    }
+
+    PIG_DEFAULT_COMMAND_RUNNER_STEP = {
+        'Jar': ('command-runner.jar'),
+        'Args': [
+            'pig-script',
+            '--run-pig-script',
+            '--args',
+            '-f',
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    }
+
+    IMPALA_BASIC_ARGS = (
+        'Args='
+        + '--impala-script,s3://myimpala/input,'
+        + '--console-output-path,s3://myimpala/output'
+    )
+
+    IMPALA_BASIC_SCRIPT_RUNNER_STEP = {
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/impala/setup-impala',
+            '--run-impala-script',
+            '--impala-script',
+            's3://myimpala/input',
+            '--console-output-path',
+            's3://myimpala/output',
+        ],
+    }
+
+    SPARK_SUBMIT_BASIC_ARGS = (
+        'Args='
+        + '[--deploy-mode,'
+        + 'cluster,'
+        + '--conf,'
+        + 'k1=v1,'
+        + 's3://mybucket/myfolder/app.jar,'
+        + 'k2=v2]'
+    )
+
+    SPARK_SUBMIT_SCRIPT_RUNNER_STEP = {
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
+        'Args': [
+            '/home/hadoop/spark/bin/spark-submit',
+            '--deploy-mode',
+            'cluster',
+            '--conf',
+            'k1=v1',
+            's3://mybucket/myfolder/app.jar',
+            'k2=v2',
+        ],
+    }
+
+    SPARK_SUBMIT_COMMAND_RUNNER_STEP = {
+        'Jar': 'command-runner.jar',
+        'Args': [
+            'spark-submit',
+            '--deploy-mode',
+            'cluster',
+            '--conf',
+            'k1=v1',
+            's3://mybucket/myfolder/app.jar',
+            'k2=v2',
+        ],
+    }
 
     def test_unknown_step_type(self):
         cmd = self.prefix + 'Type=unknown'
-        expected_error_msg = '\naws: error: ' + \
-            'The step type unknown is not supported.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: ' + 'The step type unknown is not supported.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_default_step_type_name_action_on_failure(self):
         cmd = self.prefix + 'Jar=s3://mybucket/mytest.jar'
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Custom JAR',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
-                 }
-            ]
+                {
+                    'Name': 'Custom JAR',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
+                }
+            ],
         }
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result,
+        )
 
     def test_custom_jar_step_missing_jar(self):
         cmd = self.prefix + 'Name=CustomJarMissingJar'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for CustomJARStepConfig: Jar.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for CustomJARStepConfig: Jar.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_custom_jar_step_with_all_fields(self):
         cmd = self.prefix + (
@@ -213,48 +234,56 @@ class TestAddSteps(BaseAWSCommandParamsT
             r'Jar=s3://mybucket/mytest.jar,'
             r'Args=arg1,arg2,MainClass=mymainclass,'
             r'ActionOnFailure=TERMINATE_CLUSTER,'
-            r'Properties=k1=v1\,k2=v2\,k3')
+            r'Properties=k1=v1\,k2=v2\,k3'
+        )
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Custom',
-                 'ActionOnFailure': 'TERMINATE_CLUSTER',
-                 'HadoopJarStep':
-                    {'Jar': 's3://mybucket/mytest.jar',
-                     'Args': ['arg1', 'arg2'],
-                     'MainClass': 'mymainclass',
-                     'Properties':
-                        [{'Key': 'k1', 'Value': 'v1'},
-                         {'Key': 'k2', 'Value': 'v2'},
-                         {'Key': 'k3', 'Value': ''}
-                         ]
-                     }
-                 }
-            ]
+                {
+                    'Name': 'Custom',
+                    'ActionOnFailure': 'TERMINATE_CLUSTER',
+                    'HadoopJarStep': {
+                        'Jar': 's3://mybucket/mytest.jar',
+                        'Args': ['arg1', 'arg2'],
+                        'MainClass': 'mymainclass',
+                        'Properties': [
+                            {'Key': 'k1', 'Value': 'v1'},
+                            {'Key': 'k2', 'Value': 'v2'},
+                            {'Key': 'k3', 'Value': ''},
+                        ],
+                    },
+                }
+            ],
         }
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result,
+        )
 
     def test_streaming_step_with_default_fields(self):
         cmd = self.prefix + 'Type=Streaming,' + self.STREAMING_ARGS
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Streaming program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'Streaming program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.STREAMING_HADOOP_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_step_with_execution_role_arn(self):
         cmd = self.prefix + 'Type=Streaming,' + self.STREAMING_ARGS
@@ -263,380 +292,486 @@ class TestAddSteps(BaseAWSCommandParamsT
             'ExecutionRoleArn': 'arn:aws:iam::123456789010:role/sample',
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Streaming program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'Streaming program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.STREAMING_HADOOP_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_streaming_step_missing_args(self):
         cmd = self.prefix + 'Type=Streaming'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for StreamingStepConfig: Args.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for StreamingStepConfig: Args.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_streaming_jar_with_all_fields(self):
-        test_step_config = 'Type=Streaming,' + \
-            'Name=StreamingStepAllFields,' + \
-            'ActionOnFailure=CANCEL_AND_WAIT,' + \
-            self.STREAMING_ARGS
+        test_step_config = (
+            'Type=Streaming,'
+            + 'Name=StreamingStepAllFields,'
+            + 'ActionOnFailure=CANCEL_AND_WAIT,'
+            + self.STREAMING_ARGS
+        )
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'StreamingStepAllFields',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'StreamingStepAllFields',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
 
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.STREAMING_HADOOP_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_hive_step_with_default_fields(self):
         cmd = self.prefix + 'Type=Hive,' + self.HIVE_BASIC_ARGS
         expected_result = {
             'JobFlowId': 'j-ABC',
-            'Steps':    [
-                {'Name': 'Hive program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP
-                 }]
-            }
+            'Steps': [
+                {
+                    'Name': 'Hive program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP,
+                }
+            ],
+        }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.HIVE_DEFAULT_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_hive_step_missing_args(self):
         cmd = self.prefix + 'Type=Hive'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for HiveStepConfig: Args.\n'
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for HiveStepConfig: Args.\n'
+        )
 
         self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_hive_step_with_all_fields(self):
-        test_step_config = \
-            'Type=Hive,' + \
-            'ActionOnFailure=CANCEL_AND_WAIT,' + \
-            'Name=HiveWithAllFields,' + \
-            self.HIVE_BASIC_ARGS
+        test_step_config = (
+            'Type=Hive,'
+            + 'ActionOnFailure=CANCEL_AND_WAIT,'
+            + 'Name=HiveWithAllFields,'
+            + self.HIVE_BASIC_ARGS
+        )
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'HiveWithAllFields',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP
-                 }]
+                {
+                    'Name': 'HiveWithAllFields',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.HIVE_DEFAULT_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_pig_step_with_default_fields(self):
         cmd = self.prefix + 'Type=Pig,' + self.PIG_BASIC_ARGS
         expected_result = {
             'JobFlowId': 'j-ABC',
-            'Steps':    [
-                {'Name': 'Pig program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP
-                 }]
+            'Steps': [
+                {
+                    'Name': 'Pig program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.PIG_DEFAULT_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_pig_missing_args(self):
         cmd = self.prefix + 'Type=Pig'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for PigStepConfig: Args.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for PigStepConfig: Args.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_pig_step_with_all_fields(self):
-        test_step_config = \
-            'Name=PigWithAllFields,' + \
-            'Type=Pig,' + \
-            self.PIG_BASIC_ARGS + ',' + \
-            'ActionOnFailure=CANCEL_AND_WAIT'
+        test_step_config = (
+            'Name=PigWithAllFields,'
+            + 'Type=Pig,'
+            + self.PIG_BASIC_ARGS
+            + ','
+            + 'ActionOnFailure=CANCEL_AND_WAIT'
+        )
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'PigWithAllFields',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'PigWithAllFields',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.PIG_DEFAULT_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_impala_step_with_default_fields(self):
-        test_step_config = 'Type=Impala,' + \
-            self.IMPALA_BASIC_ARGS
+        test_step_config = 'Type=Impala,' + self.IMPALA_BASIC_ARGS
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
-            'Steps':    [
-                {'Name': 'Impala program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP
-                 }]
+            'Steps': [
+                {
+                    'Name': 'Impala program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         self.assert_params_for_cmd(cmd, expected_result)
 
     def test_SPARK_SUBMIT_SCRIPT_RUNNER_STEP(self):
-        cmd = self.prefix + 'Type=SPARK,' + \
-            self.SPARK_SUBMIT_BASIC_ARGS
+        cmd = self.prefix + 'Type=SPARK,' + self.SPARK_SUBMIT_BASIC_ARGS
         expected_result = {
             'JobFlowId': 'j-ABC',
-            'Steps':    [
-                {'Name': 'Spark application',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.SPARK_SUBMIT_SCRIPT_RUNNER_STEP
-                 }]
+            'Steps': [
+                {
+                    'Name': 'Spark application',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.SPARK_SUBMIT_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         expected_result_release = copy.deepcopy(expected_result)
-        expected_result_release['Steps'][0]['HadoopJarStep'] = \
+        expected_result_release['Steps'][0]['HadoopJarStep'] = (
             self.SPARK_SUBMIT_COMMAND_RUNNER_STEP
+        )
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=expected_result_release,
+        )
 
     def test_spark_missing_arg(self):
         cmd = self.prefix + 'Type=SPARK'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for SparkStepConfig: Args.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for SparkStepConfig: Args.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_impala_missing_args(self):
         cmd = self.prefix + 'Type=Impala'
-        expected_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for ImpalaStepConfig: Args.\n'
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=None)
+        expected_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for ImpalaStepConfig: Args.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=None,
+        )
 
     def test_impala_step_with_all_fields(self):
-        test_step_config = \
-            'Name=ImpalaWithAllFields,' + \
-            'Type=Impala,' + \
-            self.IMPALA_BASIC_ARGS + ',' + \
-            'ActionOnFailure=CANCEL_AND_WAIT'
+        test_step_config = (
+            'Name=ImpalaWithAllFields,'
+            + 'Type=Impala,'
+            + self.IMPALA_BASIC_ARGS
+            + ','
+            + 'ActionOnFailure=CANCEL_AND_WAIT'
+        )
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'ImpalaWithAllFields',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'ImpalaWithAllFields',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP,
+                }
+            ],
         }
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=None)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=None,
+        )
 
     def test_impala_step_with_release(self):
         test_step_config = 'Type=Impala,' + self.IMPALA_BASIC_ARGS
         cmd = self.prefix + test_step_config
-        expected_result_release = '\naws: error: The step type impala ' + \
-            'is not supported.\n'
+        expected_result_release = (
+            '\naws: error: The step type impala ' + 'is not supported.\n'
+        )
 
         self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=None,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_error_msg=None,
+            expected_result_release=expected_result_release,
+        )
 
     def test_empty_step_args(self):
         cmd = self.prefix + 'Type=Streaming,Args='
-        expected_error_msg = ('\naws: error: The prameter Args cannot '
-                              'be an empty list.\n')
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The prameter Args cannot ' 'be an empty list.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
         cmd = self.prefix + 'Type=Pig,Args='
         self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
         cmd = self.prefix + 'Type=Hive,Args='
         self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
         cmd = self.prefix + 'Args='
-        expected_error_msg = ('\naws: error: The following required parameters'
-                              ' are missing for CustomJARStepConfig: Jar.\n')
-        self.assert_error_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_error_msg=expected_error_msg,
-            expected_result_release=expected_error_msg)
+        expected_error_msg = (
+            '\naws: error: The following required parameters'
+            ' are missing for CustomJARStepConfig: Jar.\n'
+        )
+        self.assert_error_for_ami_and_release_based_clusters(
+            cmd=cmd,
+            expected_error_msg=expected_error_msg,
+            expected_result_release=expected_error_msg,
+        )
 
     def test_all_step_types(self):
-        test_step_config = 'Jar=s3://mybucket/mytest.jar ' + \
-            ' Type=Streaming,' + self.STREAMING_ARGS + \
-            ' Type=Hive,' + self.HIVE_BASIC_ARGS + \
-            ' Type=Pig,' + self.PIG_BASIC_ARGS + \
-            ' Type=Impala,' + self.IMPALA_BASIC_ARGS
+        test_step_config = (
+            'Jar=s3://mybucket/mytest.jar '
+            + ' Type=Streaming,'
+            + self.STREAMING_ARGS
+            + ' Type=Hive,'
+            + self.HIVE_BASIC_ARGS
+            + ' Type=Pig,'
+            + self.PIG_BASIC_ARGS
+            + ' Type=Impala,'
+            + self.IMPALA_BASIC_ARGS
+        )
         cmd = self.prefix + test_step_config
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Custom JAR',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
-                 },
-                {'Name': 'Streaming program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP
-                 },
-                {'Name': 'Hive program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP
-                 },
-                {'Name': 'Pig program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP
-                 },
-                {'Name': 'Impala program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'Custom JAR',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
+                },
+                {
+                    'Name': 'Streaming program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Hive program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Pig program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.PIG_DEFAULT_SCRIPT_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Impala program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP,
+                },
+            ],
         }
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=expected_result,
-            expected_result_release=None)
+            cmd=cmd,
+            expected_result=expected_result,
+            expected_result_release=None,
+        )
 
     def test_all_step_types_release(self):
-        test_step_config = 'Jar=s3://mybucket/mytest.jar ' + \
-            ' Type=Streaming,' + self.STREAMING_ARGS + \
-            ' Type=Hive,' + self.HIVE_BASIC_ARGS + \
-            ' Type=Pig,' + self.PIG_BASIC_ARGS
+        test_step_config = (
+            'Jar=s3://mybucket/mytest.jar '
+            + ' Type=Streaming,'
+            + self.STREAMING_ARGS
+            + ' Type=Hive,'
+            + self.HIVE_BASIC_ARGS
+            + ' Type=Pig,'
+            + self.PIG_BASIC_ARGS
+        )
 
         cmd = self.prefix + test_step_config
         expected_result_release = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Custom JAR',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
-                 },
-                {'Name': 'Streaming program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.STREAMING_HADOOP_COMMAND_RUNNER_STEP
-                 },
-                {'Name': 'Hive program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.HIVE_DEFAULT_COMMAND_RUNNER_STEP
-                 },
-                {'Name': 'Pig program',
-                 'ActionOnFailure': 'CONTINUE',
-                 'HadoopJarStep': self.PIG_DEFAULT_COMMAND_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'Custom JAR',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
+                },
+                {
+                    'Name': 'Streaming program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.STREAMING_HADOOP_COMMAND_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Hive program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.HIVE_DEFAULT_COMMAND_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Pig program',
+                    'ActionOnFailure': 'CONTINUE',
+                    'HadoopJarStep': self.PIG_DEFAULT_COMMAND_RUNNER_STEP,
+                },
+            ],
         }
 
         self.assert_params_for_ami_and_release_based_clusters(
-            cmd=cmd, expected_result=None,
-            expected_result_release=expected_result_release)
+            cmd=cmd,
+            expected_result=None,
+            expected_result_release=expected_result_release,
+        )
 
     def test_all_step_types_from_json(self):
-        data_path = os.path.join(
-            os.path.dirname(__file__), 'input_steps.json')
+        data_path = os.path.join(os.path.dirname(__file__), 'input_steps.json')
         cmd = self.prefix + 'file://' + data_path
         hive_script_runner_step = copy.deepcopy(
-            self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP)
-        hive_script_runner_step['Args'] += \
-            ['-d',
-             'INPUT=s3://elasticmapreduce/samples/hive-ads/tables',
-             '-d',
-             'OUTPUT=s3://mybucket/hive-ads/output/2014-04-18/11-07-32',
-             '-d',
-             'LIBS=s3://elasticmapreduce/samples/hive-ads/libs'
-             ]
+            self.HIVE_DEFAULT_SCRIPT_RUNNER_STEP
+        )
+        hive_script_runner_step['Args'] += [
+            '-d',
+            'INPUT=s3://elasticmapreduce/samples/hive-ads/tables',
+            '-d',
+            'OUTPUT=s3://mybucket/hive-ads/output/2014-04-18/11-07-32',
+            '-d',
+            'LIBS=s3://elasticmapreduce/samples/hive-ads/libs',
+        ]
         pig_script_runner_step = copy.deepcopy(
-            self.PIG_DEFAULT_SCRIPT_RUNNER_STEP)
-        pig_script_runner_step['Args'] += \
-            ['-p',
-             'INPUT=s3://elasticmapreduce/samples/pig-apache/input',
-             '-p',
-             'OUTPUT=s3://mybucket/pig-apache/output/2014-04-21/20-09-28'
-             ]
+            self.PIG_DEFAULT_SCRIPT_RUNNER_STEP
+        )
+        pig_script_runner_step['Args'] += [
+            '-p',
+            'INPUT=s3://elasticmapreduce/samples/pig-apache/input',
+            '-p',
+            'OUTPUT=s3://mybucket/pig-apache/output/2014-04-21/20-09-28',
+        ]
 
         expected_result = {
             'JobFlowId': 'j-ABC',
             'Steps': [
-                {'Name': 'Custom JAR step',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
-                 },
-                {'Name': 'Streaming step',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP
-                 },
-                {'Name': 'Hive step',
-                 'ActionOnFailure': 'TERMINATE_CLUSTER',
-                 'HadoopJarStep': hive_script_runner_step
-                 },
-                {'Name': 'Pig step',
-                 'ActionOnFailure': 'TERMINATE_CLUSTER',
-                 'HadoopJarStep': pig_script_runner_step
-                 },
-                {'Name': 'Impala step',
-                 'ActionOnFailure': 'CANCEL_AND_WAIT',
-                 'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP
-                 }
-            ]
+                {
+                    'Name': 'Custom JAR step',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
+                },
+                {
+                    'Name': 'Streaming step',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.STREAMING_HADOOP_SCRIPT_RUNNER_STEP,
+                },
+                {
+                    'Name': 'Hive step',
+                    'ActionOnFailure': 'TERMINATE_CLUSTER',
+                    'HadoopJarStep': hive_script_runner_step,
+                },
+                {
+                    'Name': 'Pig step',
+                    'ActionOnFailure': 'TERMINATE_CLUSTER',
+                    'HadoopJarStep': pig_script_runner_step,
+                },
+                {
+                    'Name': 'Impala step',
+                    'ActionOnFailure': 'CANCEL_AND_WAIT',
+                    'HadoopJarStep': self.IMPALA_BASIC_SCRIPT_RUNNER_STEP,
+                },
+            ],
         }
         self.assert_params_for_cmd(cmd, expected_result)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def assert_params_for_ami_and_release_based_clusters(
-            self, grl_patch, cmd, expected_result, expected_result_release):
+        self, grl_patch, cmd, expected_result, expected_result_release
+    ):
         if expected_result:
             grl_patch.return_value = None
             self.assert_params_for_cmd(cmd, expected_result)
@@ -644,11 +779,10 @@ class TestAddSteps(BaseAWSCommandParamsT
             grl_patch.return_value = 'emr-4.0'
             self.assert_params_for_cmd(cmd, expected_result_release)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def assert_error_for_ami_and_release_based_clusters(
-            self, grl_patch, cmd, expected_error_msg,
-            expected_result_release):
+        self, grl_patch, cmd, expected_error_msg, expected_result_release
+    ):
         if expected_error_msg:
             grl_patch.return_value = None
             result = self.run_cmd(cmd, 252)
@@ -658,5 +792,6 @@ class TestAddSteps(BaseAWSCommandParamsT
             result = self.run_cmd(cmd, 252)
             self.assertEqual(expected_result_release, result[1])
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_add_tags.py 2.31.35-1/tests/unit/customizations/emr/test_add_tags.py
--- 2.23.6-1/tests/unit/customizations/emr/test_add_tags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_add_tags.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 
 class TestAddTags(BaseAWSCommandParamsTest):
@@ -21,28 +22,49 @@ class TestAddTags(BaseAWSCommandParamsTe
     def test_add_tags_key_value(self):
         args = ' --resource-id j-ABC123456 --tags k1=v1 k2=v2'
         cmdline = self.prefix + args
-        result = {'ResourceId': 'j-ABC123456',
-                  'Tags': [{'Key': 'k1', 'Value': 'v1'},
-                           {'Key': 'k2', 'Value': 'v2'}]}
+        result = {
+            'ResourceId': 'j-ABC123456',
+            'Tags': [
+                {'Key': 'k1', 'Value': 'v1'},
+                {'Key': 'k2', 'Value': 'v2'},
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_add_tags_key_with_empty_value(self):
         args = ' --resource-id j-ABC123456 --tags k1=v1 k2 k3=v3'
         cmdline = self.prefix + args
-        result = {'ResourceId': 'j-ABC123456',
-                  'Tags': [{'Key': 'k1', 'Value': 'v1'},
-                           {'Key': 'k2', 'Value': ''},
-                           {'Key': 'k3', 'Value': 'v3'}]}
+        result = {
+            'ResourceId': 'j-ABC123456',
+            'Tags': [
+                {'Key': 'k1', 'Value': 'v1'},
+                {'Key': 'k2', 'Value': ''},
+                {'Key': 'k3', 'Value': 'v3'},
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_add_tags_key_value_space(self):
-        cmdline = ['emr', 'add-tags', '--resource-id', 'j-ABC123456', '--tags',
-                   'k1=v1', 'k2', 'k3=v3 v4']
-        result = {'ResourceId': 'j-ABC123456',
-                  'Tags': [{'Key': 'k1', 'Value': 'v1'},
-                           {'Key': 'k2', 'Value': ''},
-                           {'Key': 'k3', 'Value': 'v3 v4'}]}
+        cmdline = [
+            'emr',
+            'add-tags',
+            '--resource-id',
+            'j-ABC123456',
+            '--tags',
+            'k1=v1',
+            'k2',
+            'k3=v3 v4',
+        ]
+        result = {
+            'ResourceId': 'j-ABC123456',
+            'Tags': [
+                {'Key': 'k1', 'Value': 'v1'},
+                {'Key': 'k2', 'Value': ''},
+                {'Key': 'k3', 'Value': 'v3 v4'},
+            ],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_assume_role_policy.py 2.31.35-1/tests/unit/customizations/emr/test_assume_role_policy.py
--- 2.23.6-1/tests/unit/customizations/emr/test_assume_role_policy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_assume_role_policy.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,8 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
 from awscli.customizations.emr.createdefaultroles import assume_role_policy
+from awscli.testutils import unittest
 
 
 class TestDefaultRoles(unittest.TestCase):
@@ -24,9 +24,9 @@ class TestDefaultRoles(unittest.TestCase
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {"Service": "ec2.amazonaws.com"},
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
     def test_assume_role_policy(self):
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_command.py 2.31.35-1/tests/unit/customizations/emr/test_command.py
--- 2.23.6-1/tests/unit/customizations/emr/test_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,23 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock
-
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 import argparse
+
 from awscli.customizations.emr.command import Command
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 
 class FakeCommand(Command):
-
     def _run_main_command(self, parsed_args, parsed_globals):
         return 0
 
 
 class TestCommand(BaseAWSCommandParamsTest):
-
     def test_region(self):
         def mock_region_side_effect(*args, **kwargs):
             if args[0] == 'region':
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_config.py 2.31.35-1/tests/unit/customizations/emr/test_config.py
--- 2.23.6-1/tests/unit/customizations/emr/test_config.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_config.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,22 +1,20 @@
-
 from awscli.customizations.emr.createcluster import CreateCluster
 from awscli.customizations.emr.exceptions import InvalidBooleanConfigError
-from awscli.customizations.emr.ssh import Get
-from awscli.customizations.emr.ssh import Put
-from awscli.customizations.emr.ssh import SSH
-from awscli.customizations.emr.ssh import Socks
-from awscli.testutils import mock, BaseAWSHelpOutputTest
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-
+from awscli.customizations.emr.ssh import SSH, Get, Put, Socks
+from awscli.testutils import BaseAWSHelpOutputTest, mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 INSTANCE_GROUPS_ARG = (
     'InstanceGroupType=MASTER,Name=MASTER,'
-    'InstanceCount=1,InstanceType=m1.large ')
+    'InstanceCount=1,InstanceType=m1.large '
+)
 
 CREATE_CLUSTER_CMD = (
-    "emr create-cluster --ami-version 3.1.0 --instance-groups %s" %
-    INSTANCE_GROUPS_ARG)
+    "emr create-cluster --ami-version 3.1.0 --instance-groups %s"
+    % INSTANCE_GROUPS_ARG
+)
 
 DEFAULT_CONFIGS = {
     'service_role': 'my_default_emr_role',
@@ -24,16 +22,12 @@ DEFAULT_CONFIGS = {
     'log_uri': 's3://my_default_logs',
     'enable_debugging': 'True',
     'key_name': 'my_default_key',
-    'key_pair_file': '/home/my_default_key_pair.pem'
+    'key_pair_file': '/home/my_default_key_pair.pem',
 }
 
-DEBUG_FALSE_CONFIGS = {
-    'enable_debugging': 'False'
-}
+DEBUG_FALSE_CONFIGS = {'enable_debugging': 'False'}
 
-BAD_BOOLEAN_VALUE_CONFIGS = {
-    'enable_debugging': 'False1'
-}
+BAD_BOOLEAN_VALUE_CONFIGS = {'enable_debugging': 'False1'}
 
 BAD_CONFIGS = {
     'service_role1': 'my_default_emr_role',
@@ -41,24 +35,21 @@ BAD_CONFIGS = {
     'log_uri_': 's3://my_default_logs',
     'enable_debugging*': 'True',
     'keyname': 'my_default_key',
-    'key_pairrr_file': '/home/my_default_key_pair.pem'
+    'key_pairrr_file': '/home/my_default_key_pair.pem',
 }
 
 TEST_CLUSTER_ID = "j-227H3PFKLBOBP"
 TEST_SRC_PATH = "/home/my_src"
 
-SSH_CMD = ('emr ssh --cluster-id %s' % TEST_CLUSTER_ID)
-SOCKS_CMD = ('emr socks --cluster-id %s' % TEST_CLUSTER_ID)
-GET_CMD = ('emr get --cluster-id %s --src %s' % (TEST_CLUSTER_ID,
-                                                 TEST_SRC_PATH))
-PUT_CMD = ('emr put --cluster-id %s --src %s' % (TEST_CLUSTER_ID,
-                                                 TEST_SRC_PATH))
+SSH_CMD = 'emr ssh --cluster-id %s' % TEST_CLUSTER_ID
+SOCKS_CMD = 'emr socks --cluster-id %s' % TEST_CLUSTER_ID
+GET_CMD = 'emr get --cluster-id %s --src %s' % (TEST_CLUSTER_ID, TEST_SRC_PATH)
+PUT_CMD = 'emr put --cluster-id %s --src %s' % (TEST_CLUSTER_ID, TEST_SRC_PATH)
 
 CREATE_DEFAULT_ROLES_CMD = 'emr create-default-roles'
 
 
 class TestCreateCluster(BaseAWSCommandParamsTest):
-
     @mock.patch.object(CreateCluster, '_run_main_command')
     def test_with_configs(self, mock_run_main_command):
         self.set_configs(DEFAULT_CONFIGS)
@@ -67,11 +58,14 @@ class TestCreateCluster(BaseAWSCommandPa
         self._assert_args_for_default_configs(parsed_args)
 
     @mock.patch.object(CreateCluster, '_run_main_command')
-    def test_with_configs_and_other_ec2_attributes(self,
-                                                   mock_run_main_command):
+    def test_with_configs_and_other_ec2_attributes(
+        self, mock_run_main_command
+    ):
         self.set_configs(DEFAULT_CONFIGS)
-        cmd = CREATE_CLUSTER_CMD \
+        cmd = (
+            CREATE_CLUSTER_CMD
             + ' --ec2-attributes AvailabilityZone=us-east-1e'
+        )
         self._run_cmd_w_mock(mock_run_main_command, cmd)
         parsed_args = mock_run_main_command.call_args[0][0]
         self._assert_args_for_default_configs(parsed_args)
@@ -97,15 +91,18 @@ class TestCreateCluster(BaseAWSCommandPa
     def test_with_bad_boolean_value(self):
         self.set_configs(BAD_BOOLEAN_VALUE_CONFIGS)
         cmd = CREATE_CLUSTER_CMD
-        expect_error_msg = ("\n%s\n" % InvalidBooleanConfigError.fmt.format(
-            config_value='False1', config_key='enable_debugging',
-            profile_var_name='default'))
+        expect_error_msg = "\n%s\n" % InvalidBooleanConfigError.fmt.format(
+            config_value='False1',
+            config_key='enable_debugging',
+            profile_var_name='default',
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     @mock.patch.object(CreateCluster, '_run_main_command')
-    def test_ignore_role_configs_when_use_default_roles(self,
-                                                        mock_run_main_command):
+    def test_ignore_role_configs_when_use_default_roles(
+        self, mock_run_main_command
+    ):
         self.set_configs(DEFAULT_CONFIGS)
         cmd = CREATE_CLUSTER_CMD + '--use-default-roles'
         self._run_cmd_w_mock(mock_run_main_command, cmd)
@@ -117,10 +114,12 @@ class TestCreateCluster(BaseAWSCommandPa
     @mock.patch.object(CreateCluster, '_run_main_command')
     def test_with_configs_and_overriding_options(self, mock_run_main_command):
         self.set_configs(DEFAULT_CONFIGS)
-        cmd = CREATE_CLUSTER_CMD + \
-            ' --service-role my_emr_role --log-uri s3://my_logs' \
-            ' --ec2-attributes KeyName=my_key,' \
+        cmd = (
+            CREATE_CLUSTER_CMD
+            + ' --service-role my_emr_role --log-uri s3://my_logs'
+            ' --ec2-attributes KeyName=my_key,'
             'InstanceProfile=my_ec2_role --no-enable-debugging'
+        )
         self._run_cmd_w_mock(mock_run_main_command, cmd)
         parsed_args = mock_run_main_command.call_args[0][0]
         self._assert_enable_debugging(parsed_args, False)
@@ -129,19 +128,23 @@ class TestCreateCluster(BaseAWSCommandPa
         self._assert_ec2_attributes(parsed_args, 'my_key', 'my_ec2_role')
 
     @mock.patch.object(CreateCluster, '_run_main_command')
-    def test_with_configs_and_overriding_ec2_attributes(self,
-                                                        mock_run_main_command):
-        self.set_configs(DEFAULT_CONFIGS)
-        cmd = CREATE_CLUSTER_CMD \
-            + ' --ec2-attributes AvailabilityZone=us-east-1e,'\
+    def test_with_configs_and_overriding_ec2_attributes(
+        self, mock_run_main_command
+    ):
+        self.set_configs(DEFAULT_CONFIGS)
+        cmd = (
+            CREATE_CLUSTER_CMD
+            + ' --ec2-attributes AvailabilityZone=us-east-1e,'
             'KeyName=my_key'
+        )
         self._run_cmd_w_mock(mock_run_main_command, cmd)
         parsed_args = mock_run_main_command.call_args[0][0]
         self._assert_enable_debugging(parsed_args, True)
         self._assert_log_uri(parsed_args, 's3://my_default_logs')
         self._assert_service_role(parsed_args, 'my_default_emr_role')
         self._assert_ec2_attributes(
-            parsed_args, 'my_key', 'my_default_ec2_role')
+            parsed_args, 'my_key', 'my_default_ec2_role'
+        )
 
     def _run_cmd_w_mock(self, mock_run_main_command, cmd, return_value=0):
         mock_run_main_command.return_value = return_value
@@ -152,7 +155,8 @@ class TestCreateCluster(BaseAWSCommandPa
         self._assert_log_uri(parsed_args, 's3://my_default_logs')
         self._assert_service_role(parsed_args, 'my_default_emr_role')
         self._assert_ec2_attributes(
-            parsed_args, 'my_default_key', 'my_default_ec2_role')
+            parsed_args, 'my_default_key', 'my_default_ec2_role'
+        )
 
     def _assert_enable_debugging(self, parsed_args, value):
         if value:
@@ -162,15 +166,15 @@ class TestCreateCluster(BaseAWSCommandPa
             self.assertFalse(parsed_args.enable_debugging)
             self.assertTrue(parsed_args.no_enable_debugging)
 
-    def _assert_ec2_attributes(self, parsed_args, key_name=None,
-                               instance_profile=None):
+    def _assert_ec2_attributes(
+        self, parsed_args, key_name=None, instance_profile=None
+    ):
         if key_name:
-            self.assertEqual(
-                parsed_args.ec2_attributes['KeyName'], key_name)
+            self.assertEqual(parsed_args.ec2_attributes['KeyName'], key_name)
         if instance_profile:
             self.assertEqual(
-                parsed_args.ec2_attributes['InstanceProfile'],
-                instance_profile)
+                parsed_args.ec2_attributes['InstanceProfile'], instance_profile
+            )
 
     def _assert_log_uri(self, parsed_args, value):
         self.assertEqual(parsed_args.log_uri, value)
@@ -180,7 +184,6 @@ class TestCreateCluster(BaseAWSCommandPa
 
 
 class TestSSHBasedCommands(BaseAWSCommandParamsTest):
-
     @mock.patch.object(SSH, '_run_main_command')
     def test_ssh_with_configs(self, mock_run_main_command):
         self._test_cmd_with_configs(mock_run_main_command, SSH_CMD)
@@ -200,22 +203,26 @@ class TestSSHBasedCommands(BaseAWSComman
     @mock.patch.object(SSH, '_run_main_command')
     def test_ssh_with_configs_and_overriding_key(self, mock_run_main_command):
         cmd = SSH_CMD + " --key-pair-file /home/my_key_pair.pem"
-        self._test_cmd_with_configs(mock_run_main_command, cmd,
-                                    '/home/my_key_pair.pem')
-
-    def _test_cmd_with_configs(self, mock_run_main_command, cmd,
-                               key_pair_file_to_assert=''
-                               '/home/my_default_key_pair.pem'):
+        self._test_cmd_with_configs(
+            mock_run_main_command, cmd, '/home/my_key_pair.pem'
+        )
+
+    def _test_cmd_with_configs(
+        self,
+        mock_run_main_command,
+        cmd,
+        key_pair_file_to_assert='' '/home/my_default_key_pair.pem',
+    ):
         self.set_configs(DEFAULT_CONFIGS)
         mock_run_main_command.return_value = 0
         self.run_cmd(cmd, 0)
         call_args = mock_run_main_command.call_args
         self.assertEqual(
-            call_args[0][0].key_pair_file, key_pair_file_to_assert)
+            call_args[0][0].key_pair_file, key_pair_file_to_assert
+        )
 
 
 class TestHelpOutput(BaseAWSHelpOutputTest):
-
     def test_not_override_required_options(self):
         scoped_config = self.session.get_scoped_config()
         scoped_config['emr'] = DEFAULT_CONFIGS
@@ -225,7 +232,6 @@ class TestHelpOutput(BaseAWSHelpOutputTe
 
 
 class TestCreateDefaultRoles(BaseAWSCommandParamsTest):
-
     def test_roles_updated_if_not_present(self):
         self.run_cmd(CREATE_DEFAULT_ROLES_CMD, expected_rc=0)
 
@@ -243,5 +249,6 @@ class TestCreateDefaultRoles(BaseAWSComm
 
         self.assertFalse(call_args_list)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_constants.py 2.31.35-1/tests/unit/customizations/emr/test_constants.py
--- 2.23.6-1/tests/unit/customizations/emr/test_constants.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_constants.py	2025-11-12 19:17:29.000000000 +0000
@@ -24,155 +24,207 @@ INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_
 
 INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp3,SizeInGB=100,Iops=3000,Throughput=200},VolumesPerInstance=1},{VolumeSpecification={VolumeType=gp3,SizeInGB=100}}]}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp3,SizeInGB=100,Iops=3000,Throughput=200},VolumesPerInstance=1},{VolumeSpecification={VolumeType=gp3,SizeInGB=100}}]}'
+)
 
 INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={SizeInGB=100,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}'
+)
 
 INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}'
+)
 
 INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true}'
+)
 
 INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100},VolumesPerInstance=4}]}'
+)
 
 MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG = (
     ' InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={Iops=100,VolumeType=gp2,SizeInGB=20},VolumesPerInstance=4}]} '
-    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100}}]}')
+    'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100}}]}'
+)
 
-INSTANCE_GROUPS_WITH_EBS = \
-    [{'InstanceCount': 1,
-      'InstanceRole': 'MASTER',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'MASTER'},
-     {'EbsConfiguration': {'EbsOptimized': True,
-                           'EbsBlockDeviceConfigs': [{'VolumeSpecification':
-                                                      {'Iops': 100,
-                                                       'SizeInGB': 100,
-                                                       'VolumeType': 'gp2'},
-                                                      'VolumesPerInstance': 4
-                                                     },
-                                                     {'VolumeSpecification':
-                                                       {'Iops': 3000,
-                                                        'SizeInGB': 100,
-                                                        'VolumeType': 'gp3',
-                                                        'Throughput': 200 },
-                                                      'VolumesPerInstance': 1
-                                                     },
-                                                     {'VolumeSpecification':
-                                                       {'SizeInGB': 100,
-                                                        'VolumeType': 'gp3'}}]},
-      'InstanceCount': 2,
-      'InstanceRole': 'CORE',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'CORE'}]
-
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS = \
-    [{'InstanceCount': 1,
-      'InstanceRole': 'MASTER',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'MASTER'},
-     {'EbsConfiguration': {'EbsOptimized': True,
-                           'EbsBlockDeviceConfigs': [{'VolumeSpecification':
-                                                      {'SizeInGB': 100,
-                                                       'VolumeType': 'gp2'},
-                                                      'VolumesPerInstance': 4}]},
-      'InstanceCount': 2,
-      'InstanceRole': 'CORE',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'CORE'}]
-
-INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC = \
-    [{'InstanceCount': 1,
-      'InstanceRole': 'MASTER',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'MASTER'},
-     {'EbsConfiguration': {'EbsOptimized': True},
-      'InstanceCount': 2,
-      'InstanceRole': 'CORE',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'CORE'}]
-
-MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES = \
-    [{'EbsConfiguration': {'EbsOptimized': True,
-                           'EbsBlockDeviceConfigs': [{'VolumeSpecification':
-                                                      {'Iops': 100,
-                                                       'SizeInGB': 20,
-                                                       'VolumeType': 'gp2'},
-                                                     'VolumesPerInstance': 4}]},
-      'InstanceCount': 1,
-      'InstanceRole': 'MASTER',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'MASTER'},
-     {'EbsConfiguration': {'EbsOptimized': True,
-                           'EbsBlockDeviceConfigs': [{'VolumeSpecification':
-                                                      {'SizeInGB': 100,
-                                                       'VolumeType': 'gp2'}}]},
-      'InstanceCount': 2,
-      'InstanceRole': 'CORE',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'CORE'}]
-
-INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY = \
-    [{'InstanceCount': 1,
-      'InstanceRole': 'MASTER',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'MASTER'},
-     {'InstanceCount': 2,
-      'InstanceRole': 'TASK',
-      'InstanceType': 'd2.xlarge',
-      'Market': 'ON_DEMAND',
-      'Name': 'TASK',
-      'AutoScalingPolicy': {
-          'Constraints': {
-              'MinCapacity': 1,
-              'MaxCapacity': 2
-          },
-          'Rules': [
-              {
-                  'Name': 'TestRule',
-                  'Description': 'TestDescription',
-                  'Action': {
-                      'Market': 'ON_DEMAND',
-                      'SimpleScalingPolicyConfiguration': {
-                          'AdjustmentType': 'EXACT_CAPACITY',
-                          'ScalingAdjustment': 2,
-                          'CoolDown': 5
-                      }
-                  },
-                  'Trigger': {
-                      'CloudWatchAlarmDefinition': {
-                          'ComparisonOperator': 'GREATER_THAN',
-                          'Dimensions': [
-                              {
-                                  'Key': 'TestKey',
-                                  'Value': 'TestValue'
-                              }],
-                          'EvaluationPeriods': 5,
-                          'MetricName': 'TestMetric',
-                          'Namespace': 'EMR',
-                          'Period': 3,
-                          'Statistic': 'MAXIMUM',
-                          'Threshold': 4.565,
-                          'Unit': 'NONE'
-                      }
-                  }
-              }
-          ]
-      }
-      }]
\ No newline at end of file
+INSTANCE_GROUPS_WITH_EBS = [
+    {
+        'InstanceCount': 1,
+        'InstanceRole': 'MASTER',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'MASTER',
+    },
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'Iops': 100,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                },
+                {
+                    'VolumeSpecification': {
+                        'Iops': 3000,
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp3',
+                        'Throughput': 200,
+                    },
+                    'VolumesPerInstance': 1,
+                },
+                {
+                    'VolumeSpecification': {
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp3',
+                    }
+                },
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'CORE',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'CORE',
+    },
+]
+
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS = [
+    {
+        'InstanceCount': 1,
+        'InstanceRole': 'MASTER',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'MASTER',
+    },
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'SizeInGB': 100,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                }
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'CORE',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'CORE',
+    },
+]
+
+INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC = [
+    {
+        'InstanceCount': 1,
+        'InstanceRole': 'MASTER',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'MASTER',
+    },
+    {
+        'EbsConfiguration': {'EbsOptimized': True},
+        'InstanceCount': 2,
+        'InstanceRole': 'CORE',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'CORE',
+    },
+]
+
+MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES = [
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {
+                    'VolumeSpecification': {
+                        'Iops': 100,
+                        'SizeInGB': 20,
+                        'VolumeType': 'gp2',
+                    },
+                    'VolumesPerInstance': 4,
+                }
+            ],
+        },
+        'InstanceCount': 1,
+        'InstanceRole': 'MASTER',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'MASTER',
+    },
+    {
+        'EbsConfiguration': {
+            'EbsOptimized': True,
+            'EbsBlockDeviceConfigs': [
+                {'VolumeSpecification': {'SizeInGB': 100, 'VolumeType': 'gp2'}}
+            ],
+        },
+        'InstanceCount': 2,
+        'InstanceRole': 'CORE',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'CORE',
+    },
+]
+
+INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY = [
+    {
+        'InstanceCount': 1,
+        'InstanceRole': 'MASTER',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'MASTER',
+    },
+    {
+        'InstanceCount': 2,
+        'InstanceRole': 'TASK',
+        'InstanceType': 'd2.xlarge',
+        'Market': 'ON_DEMAND',
+        'Name': 'TASK',
+        'AutoScalingPolicy': {
+            'Constraints': {'MinCapacity': 1, 'MaxCapacity': 2},
+            'Rules': [
+                {
+                    'Name': 'TestRule',
+                    'Description': 'TestDescription',
+                    'Action': {
+                        'Market': 'ON_DEMAND',
+                        'SimpleScalingPolicyConfiguration': {
+                            'AdjustmentType': 'EXACT_CAPACITY',
+                            'ScalingAdjustment': 2,
+                            'CoolDown': 5,
+                        },
+                    },
+                    'Trigger': {
+                        'CloudWatchAlarmDefinition': {
+                            'ComparisonOperator': 'GREATER_THAN',
+                            'Dimensions': [
+                                {'Key': 'TestKey', 'Value': 'TestValue'}
+                            ],
+                            'EvaluationPeriods': 5,
+                            'MetricName': 'TestMetric',
+                            'Namespace': 'EMR',
+                            'Period': 3,
+                            'Statistic': 'MAXIMUM',
+                            'Threshold': 4.565,
+                            'Unit': 'NONE',
+                        }
+                    },
+                }
+            ],
+        },
+    },
+]
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_constants_instance_fleets.py 2.31.35-1/tests/unit/customizations/emr/test_constants_instance_fleets.py
--- 2.23.6-1/tests/unit/customizations/emr/test_constants_instance_fleets.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_constants_instance_fleets.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,23 +18,27 @@ INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ON
     'InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge}],'
     'LaunchSpecifications={OnDemandSpecification={AllocationStrategy=lowest-price,'
     'CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}},'
-    'ResizeSpecifications={OnDemandResizeSpecification={TimeoutDurationMinutes=10}}')
+    'ResizeSpecifications={OnDemandResizeSpecification={TimeoutDurationMinutes=10}}'
+)
 
 INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR = (
     'InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge}],'
     'LaunchSpecifications={OnDemandSpecification={AllocationStrategy=lowest-price,'
-    'CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationResourceGroupArn=arn:aws:resource-groups:us-east-1:123456789012:group/Test}}}')
+    'CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationResourceGroupArn=arn:aws:resource-groups:us-east-1:123456789012:group/Test}}}'
+)
 
 INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.1}],'
     'LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy=capacity-optimized}},'
-    'ResizeSpecifications={SpotResizeSpecification={TimeoutDurationMinutes=10}}')
+    'ResizeSpecifications={SpotResizeSpecification={TimeoutDurationMinutes=10}}'
+)
 
 INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.1,'
     'EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,SizeInGB=100,'
     'Iops=100},VolumesPerInstance=4},{VolumeSpecification={VolumeType=gp2,SizeInGB=100,Iops=100}}]}}],'
-    'LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy=capacity-optimized}}')
+    'LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy=capacity-optimized}}'
+)
 
 INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.1}],'
@@ -45,7 +49,8 @@ INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CL
     'WeightedCapacity=4}],LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,'
     'TimeoutAction=SWITCH_TO_ON_DEMAND,'
     'BlockDurationMinutes=120}},'
-    'ResizeSpecifications={OnDemandResizeSpecification={TimeoutDurationMinutes=20},SpotResizeSpecification={TimeoutDurationMinutes=30}}')
+    'ResizeSpecifications={OnDemandResizeSpecification={TimeoutDurationMinutes=20},SpotResizeSpecification={TimeoutDurationMinutes=30}}'
+)
 
 INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.1,CustomAmiId=ami-deadbeef}],'
@@ -54,11 +59,13 @@ INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CL
     'WeightedCapacity=1,CustomAmiId=ami-deadbeef},{InstanceType=m3.2xlarge,BidPrice=0.2,WeightedCapacity=2,CustomAmiId=ami-deadpork},{InstanceType=m3.4xlarge,BidPrice=0.4,'
     'WeightedCapacity=4,CustomAmiId=ami-deadpork}],LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,'
     'TimeoutAction=SWITCH_TO_ON_DEMAND,'
-    'BlockDurationMinutes=120}}')
+    'BlockDurationMinutes=120}}'
+)
 
 INSTANCE_FLEETS_WITH_MISSING_BID_PRICE_CONFIGS = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge}],'
-    'LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER}}')
+    'LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER}}'
+)
 
 INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.1}],'
@@ -70,7 +77,8 @@ INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STR
     'InstanceFleetType=TASK,TargetSpotCapacity=100,InstanceTypeConfigs=[{InstanceType=d2.xlarge,BidPrice=0.5,'
     'WeightedCapacity=1},{InstanceType=m3.2xlarge,BidPrice=0.2,WeightedCapacity=2},{InstanceType=m3.4xlarge,BidPrice=0.4,'
     'WeightedCapacity=4}],LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=20,'
-    'TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy=diversified}}')
+    'TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy=diversified}}'
+)
 
 INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,'
@@ -88,7 +96,8 @@ INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCAT
     'WeightedCapacity=2,Priority=0.0},{InstanceType=m3.4xlarge,BidPrice=0.4,WeightedCapacity=4,'
     'Priority=100.0}],LaunchSpecifications={SpotSpecification={TimeoutDurationMinutes=77,'
     'TimeoutAction=TERMINATE_CLUSTER,AllocationStrategy='
-    'capacity-optimized-prioritized},OnDemandSpecification={AllocationStrategy=prioritized}}')
+    'capacity-optimized-prioritized},OnDemandSpecification={AllocationStrategy=prioritized}}'
+)
 
 TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = (
     'InstanceFleetType=TASK,TargetSpotCapacity=100,Context=testContext,InstanceTypeConfigs=[{InstanceType=d2.xlarge,'
@@ -99,7 +108,8 @@ TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATI
     'AllocationStrategy=lowest-price}},ResizeSpecifications={SpotResizeSpecification={'
     'AllocationStrategy=capacity-optimized},OnDemandResizeSpecification={'
     'AllocationStrategy=lowest-price,CapacityReservationOptions={'
-    'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}}')
+    'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}}'
+)
 
 INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = (
     'InstanceFleetType=MASTER,TargetSpotCapacity=1,InstanceTypeConfigs=[{InstanceType=d2.xlarge,'
@@ -115,501 +125,674 @@ INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_S
     '{AllocationStrategy=capacity-optimized},OnDemandResizeSpecification={'
     'AllocationStrategy=lowest-price,CapacityReservationOptions={'
     'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}} '
-    f'{TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD}')
+    f'{TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD}'
+)
 
 MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS = (
     f'InstanceFleetId={DEFAULT_INSTANCE_FLEET_NAME},'
-    f'InstanceTypeConfigs=[{{InstanceType=d2.xlarge}}],Context=testContext')
+    f'InstanceTypeConfigs=[{{InstanceType=d2.xlarge}}],Context=testContext'
+)
 
 MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS = (
     f'InstanceFleetId={DEFAULT_INSTANCE_FLEET_NAME},ResizeSpecifications={{SpotResizeSpecification='
     f'{{AllocationStrategy=capacity-optimized}},OnDemandResizeSpecification={{'
     f'AllocationStrategy=lowest-price,CapacityReservationOptions={{'
-    f'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}}}}}')
+    f'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}}}}}'
+)
 
 MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS = (
     f'InstanceFleetId={DEFAULT_INSTANCE_FLEET_NAME},ResizeSpecifications={{SpotResizeSpecification='
     f'{{AllocationStrategy=capacity-optimized}},OnDemandResizeSpecification={{'
     f'AllocationStrategy=lowest-price,CapacityReservationOptions={{'
     f'UsageStrategy=use-capacity-reservations-first,CapacityReservationPreference=open}}}}}}'
-    f',InstanceTypeConfigs=[{{InstanceType=d2.xlarge}}]')
+    f',InstanceTypeConfigs=[{{InstanceType=d2.xlarge}}]'
+)
 
-RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
-      "LaunchSpecifications": {
-        "OnDemandSpecification": {
-            "AllocationStrategy": "lowest-price",
-            "CapacityReservationOptions": {
-                "UsageStrategy": "use-capacity-reservations-first",
-                "CapacityReservationPreference": "open"
+RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY = [
+    {
+        "InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
+        "LaunchSpecifications": {
+            "OnDemandSpecification": {
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "UsageStrategy": "use-capacity-reservations-first",
+                    "CapacityReservationPreference": "open",
+                },
             }
-        }
-      },
-      "ResizeSpecifications": {
-        "OnDemandResizeSpecification": {
-          "TimeoutDurationMinutes": 10
-        }
-      },
-      "TargetOnDemandCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    }]
-
-RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
-      "LaunchSpecifications": {
-          "OnDemandSpecification": {
-              "AllocationStrategy": "lowest-price",
-              "CapacityReservationOptions": {
-                  "UsageStrategy": "use-capacity-reservations-first",
-                  "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/Test"
-              }
-          }
-      },
-      "TargetOnDemandCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-      }]
-
-RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.1"}],
-      "LaunchSpecifications": {
-         "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER", "AllocationStrategy": "capacity-optimized"}
-      },
-      "ResizeSpecifications": {
-        "SpotResizeSpecification": {
-          "TimeoutDurationMinutes": 10
-        }
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    }]
-
-RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.1",
-      "EbsConfiguration": {"EbsOptimized": True, "EbsBlockDeviceConfigs": [{"VolumeSpecification": {"Iops": 100,
-      "SizeInGB": 100, "VolumeType": "gp2"},"VolumesPerInstance": 4}, {"VolumeSpecification": {"Iops": 100,
-      "SizeInGB": 100, "VolumeType": "gp2"}}]}}],
-      "LaunchSpecifications": {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER", "AllocationStrategy": "capacity-optimized"}
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    }]
-
-RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.1"}],
-      "LaunchSpecifications": {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER"}
-      },
-      "ResizeSpecifications": {
-        "SpotResizeSpecification": {
-          "TimeoutDurationMinutes": 10
-        }
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    },
-    {"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.5","WeightedCapacity": 1},
-      {"InstanceType": "m3.2xlarge","BidPrice": "0.2","WeightedCapacity": 2},{"InstanceType": "m3.4xlarge","BidPrice": "0.4",
-      "WeightedCapacity": 4}],
-      "LaunchSpecifications" : {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "SWITCH_TO_ON_DEMAND",
-      "BlockDurationMinutes": 120}
-      },
-      "ResizeSpecifications": {
-        "OnDemandResizeSpecification": {
-          "TimeoutDurationMinutes": 20
         },
-        "SpotResizeSpecification": {
-          "TimeoutDurationMinutes": 30
-        }
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "CORE",
-      "Name": "CORE"
-    }]
-
-RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.1", "CustomAmiId": "ami-deadbeef"}],
-      "LaunchSpecifications": {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER"}
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    },
-    {"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.5","WeightedCapacity": 1, "CustomAmiId": "ami-deadbeef"},
-      {"InstanceType": "m3.2xlarge","BidPrice": "0.2","WeightedCapacity": 2, "CustomAmiId": "ami-deadpork"},{"InstanceType": "m3.4xlarge","BidPrice": "0.4",
-      "WeightedCapacity": 4, "CustomAmiId": "ami-deadpork"}],
-      "LaunchSpecifications" : {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "SWITCH_TO_ON_DEMAND",
-      "BlockDurationMinutes": 120}
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "CORE",
-      "Name": "CORE"
-    }]
-
-RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON= \
-    [{"InstanceTypeConfigs": [{"EbsConfiguration": {"EbsOptimized": True,"EbsBlockDeviceConfigs": [{
-      "VolumeSpecification": {"VolumeType": "gp2","SizeInGB": 100},"VolumesPerInstance": 2}]},"BidPrice": "1",
-      "InstanceType": "m3.xlarge"}],
-      "LaunchSpecifications": {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20,"TimeoutAction": "TERMINATE_CLUSTER"}
-      },
-      "Name": "master-fleet",
-      "InstanceFleetType": "MASTER",
-      "TargetSpotCapacity": 1},
-      {"InstanceTypeConfigs": [{"WeightedCapacity": 1,"EbsConfiguration": {"EbsOptimized": True,"EbsBlockDeviceConfigs":
-        [{"VolumeSpecification": {"VolumeType": "gp2","SizeInGB": 100},"VolumesPerInstance": 2}]},
-        "BidPrice": "1","InstanceType": "m3.xlarge"},{"WeightedCapacity": 2,"EbsConfiguration": {"EbsOptimized": False,
-        "EbsBlockDeviceConfigs": [{"VolumeSpecification": {"VolumeType": "gp2","SizeInGB": 100},"VolumesPerInstance": 2},
-        {"VolumeSpecification": {"VolumeType": "gp2","SizeInGB": 500},"VolumesPerInstance": 1}]},"BidPrice": "1",
-        "InstanceType": "m3.large"}],
-      "LaunchSpecifications" :{
-          "SpotSpecification": {"TimeoutDurationMinutes": 20,"TimeoutAction": "TERMINATE_CLUSTER"}
-      },
-      "Name": "core-fleet",
-      "InstanceFleetType": "CORE",
-      "TargetSpotCapacity": 10
-    }]
-
-RES_INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY = \
-    [{"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.1"}],
-      "LaunchSpecifications": {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER", "AllocationStrategy": "price-capacity-optimized"}
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
-    },
-    {"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.5","WeightedCapacity": 1},
-      {"InstanceType": "m3.2xlarge","BidPrice": "0.2","WeightedCapacity": 2},{"InstanceType": "m3.4xlarge","BidPrice": "0.4",
-      "WeightedCapacity": 4}],
-      "LaunchSpecifications" : {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER", "AllocationStrategy": "lowest-price"}
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "CORE",
-      "Name": "CORE"
-    },
-    {"InstanceTypeConfigs": [{"InstanceType": "d2.xlarge","BidPrice": "0.5","WeightedCapacity": 1},
-      {"InstanceType": "m3.2xlarge","BidPrice": "0.2","WeightedCapacity": 2},{"InstanceType": "m3.4xlarge","BidPrice": "0.4",
-      "WeightedCapacity": 4}],
-      "LaunchSpecifications" : {
-          "SpotSpecification": {"TimeoutDurationMinutes": 20, "TimeoutAction": "TERMINATE_CLUSTER", "AllocationStrategy": "diversified"}
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "TASK",
-      "Name": "TASK"
-    }]
+        "ResizeSpecifications": {
+            "OnDemandResizeSpecification": {"TimeoutDurationMinutes": 10}
+        },
+        "TargetOnDemandCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    }
+]
 
-RES_INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD = \
-  [
+RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR = [
     {
-      "InstanceTypeConfigs": [
-        {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.1",
-          "Priority": 0
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 30,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "prioritized"
-        }
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
+        "InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
+        "LaunchSpecifications": {
+            "OnDemandSpecification": {
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "UsageStrategy": "use-capacity-reservations-first",
+                    "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/Test",
+                },
+            }
+        },
+        "TargetOnDemandCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    }
+]
+
+RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY = [
+    {
+        "InstanceTypeConfigs": [
+            {"InstanceType": "d2.xlarge", "BidPrice": "0.1"}
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized",
+            }
+        },
+        "ResizeSpecifications": {
+            "SpotResizeSpecification": {"TimeoutDurationMinutes": 10}
+        },
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    }
+]
+
+RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF = [
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.1",
+                "EbsConfiguration": {
+                    "EbsOptimized": True,
+                    "EbsBlockDeviceConfigs": [
+                        {
+                            "VolumeSpecification": {
+                                "Iops": 100,
+                                "SizeInGB": 100,
+                                "VolumeType": "gp2",
+                            },
+                            "VolumesPerInstance": 4,
+                        },
+                        {
+                            "VolumeSpecification": {
+                                "Iops": 100,
+                                "SizeInGB": 100,
+                                "VolumeType": "gp2",
+                            }
+                        },
+                    ],
+                },
+            }
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized",
+            }
+        },
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    }
+]
+
+RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER = [
+    {
+        "InstanceTypeConfigs": [
+            {"InstanceType": "d2.xlarge", "BidPrice": "0.1"}
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+            }
+        },
+        "ResizeSpecifications": {
+            "SpotResizeSpecification": {"TimeoutDurationMinutes": 10}
+        },
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
     },
     {
-      "InstanceTypeConfigs": [
-        {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.5",
-          "WeightedCapacity": 1,
-          "Priority": 0
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "SWITCH_TO_ON_DEMAND",
+                "BlockDurationMinutes": 120,
+            }
         },
-        {
-          "InstanceType": "m3.2xlarge",
-          "BidPrice": "0.2",
-          "WeightedCapacity": 2,
-          "Priority": 1
+        "ResizeSpecifications": {
+            "OnDemandResizeSpecification": {"TimeoutDurationMinutes": 20},
+            "SpotResizeSpecification": {"TimeoutDurationMinutes": 30},
+        },
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "CORE",
+        "Name": "CORE",
+    },
+]
+
+RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI = [
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.1",
+                "CustomAmiId": "ami-deadbeef",
+            }
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+            }
         },
-        {
-          "InstanceType": "m3.4xlarge",
-          "BidPrice": "0.4",
-          "WeightedCapacity": 4,
-          "Priority": 99
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 32,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "prioritized"
-        }
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "CORE",
-      "Name": "CORE"
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
     },
     {
-      "InstanceTypeConfigs": [
-        {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.5",
-          "WeightedCapacity": 1,
-          "Priority": 10
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+                "CustomAmiId": "ami-deadbeef",
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+                "CustomAmiId": "ami-deadpork",
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+                "CustomAmiId": "ami-deadpork",
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "SWITCH_TO_ON_DEMAND",
+                "BlockDurationMinutes": 120,
+            }
         },
-        {
-          "InstanceType": "m3.2xlarge",
-          "BidPrice": "0.2",
-          "WeightedCapacity": 2,
-          "Priority": 0
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "CORE",
+        "Name": "CORE",
+    },
+]
+
+RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON = [
+    {
+        "InstanceTypeConfigs": [
+            {
+                "EbsConfiguration": {
+                    "EbsOptimized": True,
+                    "EbsBlockDeviceConfigs": [
+                        {
+                            "VolumeSpecification": {
+                                "VolumeType": "gp2",
+                                "SizeInGB": 100,
+                            },
+                            "VolumesPerInstance": 2,
+                        }
+                    ],
+                },
+                "BidPrice": "1",
+                "InstanceType": "m3.xlarge",
+            }
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+            }
         },
-        {
-          "InstanceType": "m3.4xlarge",
-          "BidPrice": "0.4",
-          "WeightedCapacity": 4,
-          "Priority": 100
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 77,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "prioritized"
-        }
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "TASK",
-      "Name": "TASK"
-    }]
+        "Name": "master-fleet",
+        "InstanceFleetType": "MASTER",
+        "TargetSpotCapacity": 1,
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "WeightedCapacity": 1,
+                "EbsConfiguration": {
+                    "EbsOptimized": True,
+                    "EbsBlockDeviceConfigs": [
+                        {
+                            "VolumeSpecification": {
+                                "VolumeType": "gp2",
+                                "SizeInGB": 100,
+                            },
+                            "VolumesPerInstance": 2,
+                        }
+                    ],
+                },
+                "BidPrice": "1",
+                "InstanceType": "m3.xlarge",
+            },
+            {
+                "WeightedCapacity": 2,
+                "EbsConfiguration": {
+                    "EbsOptimized": False,
+                    "EbsBlockDeviceConfigs": [
+                        {
+                            "VolumeSpecification": {
+                                "VolumeType": "gp2",
+                                "SizeInGB": 100,
+                            },
+                            "VolumesPerInstance": 2,
+                        },
+                        {
+                            "VolumeSpecification": {
+                                "VolumeType": "gp2",
+                                "SizeInGB": 500,
+                            },
+                            "VolumesPerInstance": 1,
+                        },
+                    ],
+                },
+                "BidPrice": "1",
+                "InstanceType": "m3.large",
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+            }
+        },
+        "Name": "core-fleet",
+        "InstanceFleetType": "CORE",
+        "TargetSpotCapacity": 10,
+    },
+]
 
-RES_INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = \
-  [
+RES_INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY = [
     {
-      "InstanceTypeConfigs": [
-        {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.1"
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 30,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "lowest-price"
-        }
-      },
-      "TargetSpotCapacity": 1,
-      "InstanceFleetType": "MASTER",
-      "Name": "MASTER"
+        "InstanceTypeConfigs": [
+            {"InstanceType": "d2.xlarge", "BidPrice": "0.1"}
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "price-capacity-optimized",
+            }
+        },
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
     },
     {
-      "InstanceTypeConfigs": [
-        {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.5",
-          "WeightedCapacity": 1
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "lowest-price",
+            }
         },
-        {
-          "InstanceType": "m3.2xlarge",
-          "BidPrice": "0.2",
-          "WeightedCapacity": 2
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "CORE",
+        "Name": "CORE",
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 20,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "diversified",
+            }
         },
-        {
-          "InstanceType": "m3.4xlarge",
-          "BidPrice": "0.4",
-          "WeightedCapacity": 4
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 32,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "lowest-price"
-        }
-      },
-      "ResizeSpecifications": {
-        "OnDemandResizeSpecification": {
-          "AllocationStrategy": "lowest-price",
-          "CapacityReservationOptions": {
-            "CapacityReservationPreference": "open",
-            "UsageStrategy": "use-capacity-reservations-first"
-          }
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "TASK",
+        "Name": "TASK",
+    },
+]
+
+RES_INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD = [
+    {
+        "InstanceTypeConfigs": [
+            {"InstanceType": "d2.xlarge", "BidPrice": "0.1", "Priority": 0}
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 30,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "prioritized"},
         },
-        "SpotResizeSpecification": {
-          "AllocationStrategy": "capacity-optimized"
-        }
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "CORE",
-      "Name": "CORE"
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+                "Priority": 0,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+                "Priority": 1,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+                "Priority": 99,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 32,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "prioritized"},
+        },
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "CORE",
+        "Name": "CORE",
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+                "Priority": 10,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+                "Priority": 0,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+                "Priority": 100,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 77,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "prioritized"},
+        },
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "TASK",
+        "Name": "TASK",
     },
+]
+
+RES_INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = [
     {
-      "InstanceTypeConfigs": [
+        "InstanceTypeConfigs": [
+            {"InstanceType": "d2.xlarge", "BidPrice": "0.1"}
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 30,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "lowest-price"},
+        },
+        "TargetSpotCapacity": 1,
+        "InstanceFleetType": "MASTER",
+        "Name": "MASTER",
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 32,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "lowest-price"},
+        },
+        "ResizeSpecifications": {
+            "OnDemandResizeSpecification": {
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "CapacityReservationPreference": "open",
+                    "UsageStrategy": "use-capacity-reservations-first",
+                },
+            },
+            "SpotResizeSpecification": {
+                "AllocationStrategy": "capacity-optimized"
+            },
+        },
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "CORE",
+        "Name": "CORE",
+    },
+    {
+        "InstanceTypeConfigs": [
+            {
+                "InstanceType": "d2.xlarge",
+                "BidPrice": "0.5",
+                "WeightedCapacity": 1,
+            },
+            {
+                "InstanceType": "m3.2xlarge",
+                "BidPrice": "0.2",
+                "WeightedCapacity": 2,
+            },
+            {
+                "InstanceType": "m3.4xlarge",
+                "BidPrice": "0.4",
+                "WeightedCapacity": 4,
+            },
+        ],
+        "LaunchSpecifications": {
+            "SpotSpecification": {
+                "TimeoutDurationMinutes": 77,
+                "TimeoutAction": "TERMINATE_CLUSTER",
+                "AllocationStrategy": "capacity-optimized-prioritized",
+            },
+            "OnDemandSpecification": {"AllocationStrategy": "lowest-price"},
+        },
+        "ResizeSpecifications": {
+            "OnDemandResizeSpecification": {
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "CapacityReservationPreference": "open",
+                    "UsageStrategy": "use-capacity-reservations-first",
+                },
+            },
+            "SpotResizeSpecification": {
+                "AllocationStrategy": "capacity-optimized"
+            },
+        },
+        "TargetSpotCapacity": 100,
+        "InstanceFleetType": "TASK",
+        "Context": "testContext",
+        "Name": "TASK",
+    },
+]
+
+RES_TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = {
+    "InstanceTypeConfigs": [
         {
-          "InstanceType": "d2.xlarge",
-          "BidPrice": "0.5",
-          "WeightedCapacity": 1
+            "InstanceType": "d2.xlarge",
+            "BidPrice": "0.5",
+            "WeightedCapacity": 1,
         },
         {
-          "InstanceType": "m3.2xlarge",
-          "BidPrice": "0.2",
-          "WeightedCapacity": 2
+            "InstanceType": "m3.2xlarge",
+            "BidPrice": "0.2",
+            "WeightedCapacity": 2,
         },
         {
-          "InstanceType": "m3.4xlarge",
-          "BidPrice": "0.4",
-          "WeightedCapacity": 4
-        }
-      ],
-      "LaunchSpecifications": {
-        "SpotSpecification": {
-          "TimeoutDurationMinutes": 77,
-          "TimeoutAction": "TERMINATE_CLUSTER",
-          "AllocationStrategy": "capacity-optimized-prioritized"
-        },
-        "OnDemandSpecification": {
-          "AllocationStrategy": "lowest-price"
-        }
-      },
-      "ResizeSpecifications": {
-        "OnDemandResizeSpecification": {
-          "AllocationStrategy": "lowest-price",
-          "CapacityReservationOptions": {
-            "CapacityReservationPreference": "open",
-            "UsageStrategy": "use-capacity-reservations-first"
-          }
+            "InstanceType": "m3.4xlarge",
+            "BidPrice": "0.4",
+            "WeightedCapacity": 4,
         },
-        "SpotResizeSpecification": {
-          "AllocationStrategy": "capacity-optimized"
-        }
-      },
-      "TargetSpotCapacity": 100,
-      "InstanceFleetType": "TASK",
-      "Context": "testContext",
-      "Name": "TASK"
-    }
-  ]
-
-RES_TASK_INSTANCE_FLEET_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD = \
-  {
-    "InstanceTypeConfigs": [
-      {
-        "InstanceType": "d2.xlarge",
-        "BidPrice": "0.5",
-        "WeightedCapacity": 1
-      },
-      {
-        "InstanceType": "m3.2xlarge",
-        "BidPrice": "0.2",
-        "WeightedCapacity": 2
-      },
-      {
-        "InstanceType": "m3.4xlarge",
-        "BidPrice": "0.4",
-        "WeightedCapacity": 4
-      }
     ],
     "LaunchSpecifications": {
-      "SpotSpecification": {
-        "TimeoutDurationMinutes": 77,
-        "TimeoutAction": "TERMINATE_CLUSTER",
-        "AllocationStrategy": "capacity-optimized-prioritized"
-      },
-      "OnDemandSpecification": {
-        "AllocationStrategy": "lowest-price"
-      }
+        "SpotSpecification": {
+            "TimeoutDurationMinutes": 77,
+            "TimeoutAction": "TERMINATE_CLUSTER",
+            "AllocationStrategy": "capacity-optimized-prioritized",
+        },
+        "OnDemandSpecification": {"AllocationStrategy": "lowest-price"},
     },
     "ResizeSpecifications": {
-      "OnDemandResizeSpecification": {
-        "AllocationStrategy": "lowest-price",
-        "CapacityReservationOptions": {
-          "CapacityReservationPreference": "open",
-          "UsageStrategy": "use-capacity-reservations-first"
-        }
-      },
-      "SpotResizeSpecification": {
-        "AllocationStrategy": "capacity-optimized"
-      }
+        "OnDemandResizeSpecification": {
+            "AllocationStrategy": "lowest-price",
+            "CapacityReservationOptions": {
+                "CapacityReservationPreference": "open",
+                "UsageStrategy": "use-capacity-reservations-first",
+            },
+        },
+        "SpotResizeSpecification": {
+            "AllocationStrategy": "capacity-optimized"
+        },
     },
     "TargetSpotCapacity": 100,
     "InstanceFleetType": "TASK",
-    "Context": "testContext"
-  }
+    "Context": "testContext",
+}
 
-RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS = \
-    {
-      "ClusterId": DEFAULT_CLUSTER_NAME,
-      "InstanceFleet": {
+RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS = {
+    "ClusterId": DEFAULT_CLUSTER_NAME,
+    "InstanceFleet": {
         "InstanceFleetId": DEFAULT_INSTANCE_FLEET_NAME,
-        "InstanceTypeConfigs": [
-          {"InstanceType": "d2.xlarge"}
-        ],
-        "Context": "testContext"
-      }
-    }
+        "InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
+        "Context": "testContext",
+    },
+}
 
-RES_MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS = \
-    {
-      "ClusterId": DEFAULT_CLUSTER_NAME,
-      "InstanceFleet": {
+RES_MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS = {
+    "ClusterId": DEFAULT_CLUSTER_NAME,
+    "InstanceFleet": {
         "InstanceFleetId": DEFAULT_INSTANCE_FLEET_NAME,
-          "ResizeSpecifications": {
+        "ResizeSpecifications": {
             "OnDemandResizeSpecification": {
-              "AllocationStrategy": "lowest-price",
-              "CapacityReservationOptions": {
-                "CapacityReservationPreference": "open",
-                "UsageStrategy": "use-capacity-reservations-first"
-              }
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "CapacityReservationPreference": "open",
+                    "UsageStrategy": "use-capacity-reservations-first",
+                },
+            },
+            "SpotResizeSpecification": {
+                "AllocationStrategy": "capacity-optimized"
             },
-          "SpotResizeSpecification": {"AllocationStrategy": "capacity-optimized"}
-        }
-      }
-  }
+        },
+    },
+}
 
-RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS = \
-    {
-      "ClusterId": DEFAULT_CLUSTER_NAME,
-      "InstanceFleet": {
+RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS = {
+    "ClusterId": DEFAULT_CLUSTER_NAME,
+    "InstanceFleet": {
         "InstanceFleetId": DEFAULT_INSTANCE_FLEET_NAME,
-          "ResizeSpecifications": {
+        "ResizeSpecifications": {
             "OnDemandResizeSpecification": {
-              "AllocationStrategy": "lowest-price",
-              "CapacityReservationOptions": {
-                "CapacityReservationPreference": "open",
-                "UsageStrategy": "use-capacity-reservations-first"
-              }
+                "AllocationStrategy": "lowest-price",
+                "CapacityReservationOptions": {
+                    "CapacityReservationPreference": "open",
+                    "UsageStrategy": "use-capacity-reservations-first",
+                },
+            },
+            "SpotResizeSpecification": {
+                "AllocationStrategy": "capacity-optimized"
             },
-          "SpotResizeSpecification": {"AllocationStrategy": "capacity-optimized"}
         },
-        "InstanceTypeConfigs": [
-            {"InstanceType": "d2.xlarge"}
-        ]
-      }
-    }
\ No newline at end of file
+        "InstanceTypeConfigs": [{"InstanceType": "d2.xlarge"}],
+    },
+}
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_create_cluster_ami_version.py 2.31.35-1/tests/unit/customizations/emr/test_create_cluster_ami_version.py
--- 2.23.6-1/tests/unit/customizations/emr/test_create_cluster_ami_version.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_create_cluster_ami_version.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-from tests.unit.customizations.emr import test_constants as \
-    CONSTANTS
-from tests.unit.customizations.emr import test_constants_instance_fleets as \
-    CONSTANTS_FLEET
 import copy
-import os
 import json
+import os
 
+from awscli.testutils import mock, unittest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+from tests.unit.customizations.emr import test_constants as CONSTANTS
+from tests.unit.customizations.emr import (
+    test_constants_instance_fleets as CONSTANTS_FLEET,
+)
 
 DEFAULT_CLUSTER_NAME = "Development Cluster"
 
@@ -31,38 +32,46 @@ DEFAULT_INSTANCE_GROUPS_ARG = (
     'InstanceGroupType=CORE,Name=CORE,'
     'InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadbeef '
     'InstanceGroupType=TASK,Name=TASK,'
-    'InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork ')
+    'InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork '
+)
 
-DEFAULT_INSTANCE_GROUPS = \
-    [{'InstanceRole': 'MASTER',
-      'InstanceCount': 1,
-      'Name': 'MASTER',
-      'CustomAmiId': 'ami-deadbeef',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      },
-     {'InstanceRole': 'CORE',
-      'InstanceCount': 1,
-      'Name': 'CORE',
-      'CustomAmiId': 'ami-deadbeef',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      },
-     {'InstanceRole': 'TASK',
-      'InstanceCount': 1,
-      'Name': 'TASK',
-      'CustomAmiId': 'ami-deadpork',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      }]
-
-DEFAULT_CMD = ('emr create-cluster --ami-version 3.0.4 --use-default-roles'
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG + ' ')
-
-DEFAULT_INSTANCES = {'KeepJobFlowAliveWhenNoSteps': True,
-                     'TerminationProtected': False,
-                     'InstanceGroups': DEFAULT_INSTANCE_GROUPS
-                     }
+DEFAULT_INSTANCE_GROUPS = [
+    {
+        'InstanceRole': 'MASTER',
+        'InstanceCount': 1,
+        'Name': 'MASTER',
+        'CustomAmiId': 'ami-deadbeef',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+    {
+        'InstanceRole': 'CORE',
+        'InstanceCount': 1,
+        'Name': 'CORE',
+        'CustomAmiId': 'ami-deadbeef',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+    {
+        'InstanceRole': 'TASK',
+        'InstanceCount': 1,
+        'Name': 'TASK',
+        'CustomAmiId': 'ami-deadpork',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+]
+
+DEFAULT_CMD = (
+    'emr create-cluster --ami-version 3.0.4 --use-default-roles'
+    ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG + ' '
+)
+
+DEFAULT_INSTANCES = {
+    'KeepJobFlowAliveWhenNoSteps': True,
+    'TerminationProtected': False,
+    'InstanceGroups': DEFAULT_INSTANCE_GROUPS,
+}
 
 EC2_ROLE_NAME = "EMR_EC2_DefaultRole"
 EMR_ROLE_NAME = "EMR_DefaultRole"
@@ -71,122 +80,134 @@ TEST_BA = [
     {
         'ScriptBootstrapAction': {
             'Path': 's3://test/ba1',
-            'Args': ['arg1', 'arg2', 'arg3']
+            'Args': ['arg1', 'arg2', 'arg3'],
         },
-        'Name': 'ba1'
+        'Name': 'ba1',
     },
     {
         'ScriptBootstrapAction': {
             'Path': 's3://test/ba2',
-            'Args': ['arg1', 'arg2', 'arg3']
+            'Args': ['arg1', 'arg2', 'arg3'],
         },
-        'Name': 'ba2'
-    }
+        'Name': 'ba2',
+    },
 ]
 
 INSTALL_HIVE_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/hive/hive-script',
-                 '--install-hive', '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/hive',
-                 '--hive-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
+            '--install-hive',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/hive',
+            '--hive-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Hive',
-    'ActionOnFailure': 'TERMINATE_CLUSTER'
+    'ActionOnFailure': 'TERMINATE_CLUSTER',
 }
 
 INSTALL_HIVE_SITE_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/hive/hive-script',
-                 '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/hive',
-                 '--install-hive-site',
-                 '--hive-site=s3://test/hive-conf/hive-site.xml',
-                 '--hive-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/hive',
+            '--install-hive-site',
+            '--hive-site=s3://test/hive-conf/hive-site.xml',
+            '--hive-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Hive Site Configuration',
-    'ActionOnFailure': 'CANCEL_AND_WAIT'
+    'ActionOnFailure': 'CANCEL_AND_WAIT',
 }
 
 INSTALL_PIG_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/pig/pig-script',
-                 '--install-pig', '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/pig',
-                 '--pig-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/pig/pig-script',
+            '--install-pig',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/pig',
+            '--pig-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Pig',
-    'ActionOnFailure': 'TERMINATE_CLUSTER'
+    'ActionOnFailure': 'TERMINATE_CLUSTER',
 }
 
 INSTALL_HBASE_STEP = {
     'HadoopJarStep': {
-        'Args': ['emr.hbase.backup.Main',
-                 '--start-master'],
-        'Jar': '/home/hadoop/lib/hbase.jar'
+        'Args': ['emr.hbase.backup.Main', '--start-master'],
+        'Jar': '/home/hadoop/lib/hbase.jar',
     },
     'Name': 'Start HBase',
-    'ActionOnFailure': 'TERMINATE_CLUSTER'
+    'ActionOnFailure': 'TERMINATE_CLUSTER',
 }
 
 INSTALL_GANGLIA_BA = {
     'ScriptBootstrapAction': {
-        'Path':
-            ('s3://us-east-1.elasticmapreduce/'
-             'bootstrap-actions/install-ganglia')
+        'Path': (
+            's3://us-east-1.elasticmapreduce/'
+            'bootstrap-actions/install-ganglia'
+        )
     },
-    'Name': 'Install Ganglia'
+    'Name': 'Install Ganglia',
 }
 
 INSTALL_HBASE_BA = {
     'ScriptBootstrapAction': {
         'Path': 's3://us-east-1.elasticmapreduce/bootstrap-actions/setup-hbase'
     },
-    'Name': 'Install HBase'
+    'Name': 'Install HBase',
 }
 
 INSTALL_IMPALA_BA = {
     'ScriptBootstrapAction': {
         'Path': 's3://us-east-1.elasticmapreduce/libs/impala/setup-impala',
-        'Args': ['--base-path', 's3://us-east-1.elasticmapreduce',
-                 '--impala-version', 'latest']
+        'Args': [
+            '--base-path',
+            's3://us-east-1.elasticmapreduce',
+            '--impala-version',
+            'latest',
+        ],
     },
-    'Name': 'Install Impala'
+    'Name': 'Install Impala',
 }
 
 INSTALL_MAPR_PRODUCT = {
     'Name': 'mapr',
-    'Args': ['--edition', 'm5', '--version', '3.0.2']
+    'Args': ['--edition', 'm5', '--version', '3.0.2'],
 }
 
 INSTALL_SUPPORTED_PRODUCTS = [
     {
         'Name': 'hue',
-        'Args': ['--hue-config', 's3://elasticmapreduce/hue-config']
-    },
-    {
-        'Name': 'mapr',
-        'Args': ['--edition', 'm7']
+        'Args': ['--hue-config', 's3://elasticmapreduce/hue-config'],
     },
-    {
-        'Name': 'unknown',
-        'Args': ['arg1', 'k1=v1']
-    }
+    {'Name': 'mapr', 'Args': ['--edition', 'm7']},
+    {'Name': 'unknown', 'Args': ['arg1', 'k1=v1']},
 ]
 
 CUSTOM_JAR_STEP = {
     'Name': 'Custom JAR',
     'ActionOnFailure': 'CONTINUE',
-    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
+    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
 }
 
 STREAMING_ARGS = (
@@ -195,7 +216,8 @@ STREAMING_ARGS = (
     '-mapper,wordSplitter.py,'
     '-reducer,aggregate,'
     '-input,s3://elasticmapreduce/samples/wordcount/input,'
-    '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24')
+    '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24'
+)
 
 STREAMING_HADOOP_JAR_STEP = {
     'Jar': '/home/hadoop/contrib/streaming/hadoop-streaming.jar',
@@ -209,19 +231,22 @@ STREAMING_HADOOP_JAR_STEP = {
         '-input',
         's3://elasticmapreduce/samples/wordcount/input',
         '-output',
-        's3://mybucket/wordcount/output/2014-04-18/12-15-24']
+        's3://mybucket/wordcount/output/2014-04-18/12-15-24',
+    ],
 }
 
 HIVE_BASIC_ARGS = (
-    'Args=-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q')
+    'Args=-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
+)
 
 HIVE_DEFAULT_STEP = {
     'Name': 'Hive program',
     'ActionOnFailure': 'CONTINUE',
     'HadoopJarStep': {
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
         'Args': [
             's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
             '--run-hive-script',
@@ -229,16 +254,19 @@ HIVE_DEFAULT_STEP = {
             'latest',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q']}
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    },
 }
 
 HIVE_BASIC_STEP = {
     'Name': 'HiveBasicStep',
     'ActionOnFailure': 'CANCEL_AND_WAIT',
     'HadoopJarStep': {
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
         'Args': [
             's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
             '--run-hive-script',
@@ -246,19 +274,23 @@ HIVE_BASIC_STEP = {
             'latest',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q']}
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    },
 }
 
-PIG_BASIC_ARGS = 'Args=-f,' + \
-    's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
+PIG_BASIC_ARGS = (
+    'Args=-f,' + 's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
+)
 
 PIG_DEFAULT_STEP = {
     'Name': 'Pig program',
     'ActionOnFailure': 'CONTINUE',
     'HadoopJarStep': {
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
         'Args': [
             's3://us-east-1.elasticmapreduce/libs/pig/pig-script',
             '--run-pig-script',
@@ -266,17 +298,19 @@ PIG_DEFAULT_STEP = {
             'latest',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/'
-            'pig-apache/do-reports2.pig']}
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    },
 }
 
 PIG_BASIC_STEP = {
     'Name': 'PigBasicStep',
     'ActionOnFailure': 'CANCEL_AND_WAIT',
     'HadoopJarStep': {
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
         'Args': [
             's3://us-east-1.elasticmapreduce/libs/pig/pig-script',
             '--run-pig-script',
@@ -284,49 +318,53 @@ PIG_BASIC_STEP = {
             'latest',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/'
-            'pig-apache/do-reports2.pig']}
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    },
 }
 IMPALA_BASIC_ARGS = (
     'Args=--impala-script,s3://myimpala/input,'
-    '--console-output-path,s3://myimpala/output')
+    '--console-output-path,s3://myimpala/output'
+)
 
 IMPALA_DEFAULT_STEP = {
     'Name': 'Impala program',
     'ActionOnFailure': 'CONTINUE',
     'HadoopJarStep': {
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar'),
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
         'Args': [
             's3://us-east-1.elasticmapreduce/libs/impala/setup-impala',
             '--run-impala-script',
             '--impala-script',
             's3://myimpala/input',
             '--console-output-path',
-            's3://myimpala/output']}
+            's3://myimpala/output',
+        ],
+    },
 }
 
 CREATE_CLUSTER_RESULT = {
     "JobFlowId": "j-XXXX",
-    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX"
+    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
 }
 
 CONSTRUCTED_RESULT = {
     "ClusterId": "j-XXXX",
-    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX"
+    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
 }
 
-DEFAULT_RESULT = \
-    {
-        'Name': DEFAULT_CLUSTER_NAME,
-        'Instances': DEFAULT_INSTANCES,
-        'AmiVersion': '3.0.4',
-        'VisibleToAllUsers': True,
-        'JobFlowRole': EC2_ROLE_NAME,
-        'ServiceRole': EMR_ROLE_NAME,
-        'Tags': []
-    }
+DEFAULT_RESULT = {
+    'Name': DEFAULT_CLUSTER_NAME,
+    'Instances': DEFAULT_INSTANCES,
+    'AmiVersion': '3.0.4',
+    'VisibleToAllUsers': True,
+    'JobFlowRole': EC2_ROLE_NAME,
+    'ServiceRole': EMR_ROLE_NAME,
+    'Tags': [],
+}
 
 EMR_MANAGED_MASTER_SECURITY_GROUP = 'sg-master1'
 
@@ -334,27 +372,37 @@ EMR_MANAGED_SLAVE_SECURITY_GROUP = 'sg-s
 
 SERVICE_ACCESS_SECURITY_GROUP = "sg-service-access"
 
-ADDITIONAL_MASTER_SECURITY_GROUPS = \
-    ['sg-addMaster1', 'sg-addMaster2', 'sg-addMaster3', 'sg-addMaster4']
+ADDITIONAL_MASTER_SECURITY_GROUPS = [
+    'sg-addMaster1',
+    'sg-addMaster2',
+    'sg-addMaster3',
+    'sg-addMaster4',
+]
 
-ADDITIONAL_SLAVE_SECURITY_GROUPS = \
-    ['sg-addSlave1', 'sg-addSlave2', 'sg-addSlave3', 'sg-addSlave4']
+ADDITIONAL_SLAVE_SECURITY_GROUPS = [
+    'sg-addSlave1',
+    'sg-addSlave2',
+    'sg-addSlave3',
+    'sg-addSlave4',
+]
 
 
 class TestCreateCluster(BaseAWSCommandParamsTest):
     prefix = 'emr create-cluster '
 
     def test_quick_start(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def assert_error_message_has_field_name(self, error_msg, field_name):
@@ -365,42 +413,52 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(DEFAULT_CMD, DEFAULT_RESULT)
 
     def test_cluster_without_service_role_and_instance_profile(self):
-        cmd = ('emr create-cluster --ami-version 3.0.4 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --ami-version 3.0.4 '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         del result['JobFlowRole']
         del result['ServiceRole']
         self.assert_params_for_cmd(cmd, result)
 
     def test_cluster_with_service_role_and_instance_profile(self):
-        cmd = ('emr create-cluster --ami-version 3.0.4'
-               ' --service-role ServiceRole --ec2-attributes '
-               'InstanceProfile=Ec2_InstanceProfile '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --ami-version 3.0.4'
+            ' --service-role ServiceRole --ec2-attributes '
+            'InstanceProfile=Ec2_InstanceProfile '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['JobFlowRole'] = 'Ec2_InstanceProfile'
         result['ServiceRole'] = 'ServiceRole'
         self.assert_params_for_cmd(cmd, result)
 
     def test_mutual_exclusive_use_default_roles_and_service_role(self):
-        cmd = (DEFAULT_CMD +
-               '--ec2-attributes InstanceProfile=Ec2_InstanceProfile')
+        cmd = (
+            DEFAULT_CMD
+            + '--ec2-attributes InstanceProfile=Ec2_InstanceProfile'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --use-default-roles '
             'and --ec2-attributes InstanceProfile options together. Either '
             'choose --use-default-roles or use both --service-role <roleName>'
-            ' and --ec2-attributes InstanceProfile=<profileName>.\n')
+            ' and --ec2-attributes InstanceProfile=<profileName>.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_mutual_exclusive_use_default_roles_and_instance_profile(self):
-        cmd = (DEFAULT_CMD + '--service-role ServiceRole '
-               '--ec2-attributes InstanceProfile=Ec2_InstanceProfile')
+        cmd = (
+            DEFAULT_CMD + '--service-role ServiceRole '
+            '--ec2-attributes InstanceProfile=Ec2_InstanceProfile'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --use-default-roles '
             'and --service-role options together. Either choose '
             '--use-default-roles or use both --service-role <roleName> '
-            'and --ec2-attributes InstanceProfile=<profileName>.\n')
+            'and --ec2-attributes InstanceProfile=<profileName>.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -437,9 +495,10 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_auto_terminte(self):
-        cmd = ('emr create-cluster --use-default-roles --ami-version 3.0.4 '
-               '--auto-terminate --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --use-default-roles --ami-version 3.0.4 '
+            '--auto-terminate --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = copy.deepcopy(DEFAULT_INSTANCES)
         instances['KeepJobFlowAliveWhenNoSteps'] = False
@@ -447,11 +506,15 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_auto_terminate_and_no_auto_terminate(self):
-        cmd = (DEFAULT_CMD + '--ami-version 3.0.4 ' +
-               '--auto-terminate --no-auto-terminate')
+        cmd = (
+            DEFAULT_CMD
+            + '--ami-version 3.0.4 '
+            + '--auto-terminate --no-auto-terminate'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --no-auto-terminate and'
-            ' --auto-terminate options together.\n')
+            ' --auto-terminate options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -468,11 +531,13 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_termination_protected_and_no_termination_protected(self):
-        cmd = DEFAULT_CMD + \
-            '--termination-protected --no-termination-protected'
+        cmd = (
+            DEFAULT_CMD + '--termination-protected --no-termination-protected'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --termination-protected'
-            ' and --no-termination-protected options together.\n')
+            ' and --no-termination-protected options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -492,12 +557,17 @@ class TestCreateCluster(BaseAWSCommandPa
         result['Instances'] = instances
         self.assert_params_for_cmd(cmd, result)
 
-    def test_unhealthy_node_replacement_and_no_unhealthy_node_replacement(self):
-        cmd = DEFAULT_CMD + \
-            '--unhealthy-node-replacement --no-unhealthy-node-replacement'
+    def test_unhealthy_node_replacement_and_no_unhealthy_node_replacement(
+        self,
+    ):
+        cmd = (
+            DEFAULT_CMD
+            + '--unhealthy-node-replacement --no-unhealthy-node-replacement'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --unhealthy-node-replacement'
-            ' and --no-unhealthy-node-replacement options together.\n')
+            ' and --no-unhealthy-node-replacement options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -515,16 +585,40 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--visible-to-all-users --no-visible-to-all-users'
         expected_error_msg = (
             '\naws: error: cannot use both --visible-to-all-users and '
-            '--no-visible-to-all-users options together.\n')
+            '--no-visible-to-all-users options together.\n'
+        )
+        result = self.run_cmd(cmd, 252)
+        self.assertEqual(expected_error_msg, result[1])
+
+    def test_extended_support(self):
+        cmd = DEFAULT_CMD + '--extended-support'
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['ExtendedSupport'] = True
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_no_extended_support(self):
+        cmd = DEFAULT_CMD + '--no-extended-support'
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['ExtendedSupport'] = False
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_extended_support_and_no_extended_support(self):
+        cmd = DEFAULT_CMD + '--extended-support --no-extended-support'
+        expected_error_msg = (
+            '\naws: error: cannot use both --extended-support'
+            ' and --no-extended-support options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_tags(self):
         cmd = DEFAULT_CMD.split() + ['--tags', 'k1=v1', 'k2', 'k3=spaces  v3']
         result = copy.deepcopy(DEFAULT_RESULT)
-        tags = [{'Key': 'k1', 'Value': 'v1'},
-                {'Key': 'k2', 'Value': ''},
-                {'Key': 'k3', 'Value': 'spaces  v3'}]
+        tags = [
+            {'Key': 'k1', 'Value': 'v1'},
+            {'Key': 'k2', 'Value': ''},
+            {'Key': 'k3', 'Value': 'spaces  v3'},
+        ]
         result['Tags'] = tags
         self.assert_params_for_cmd(cmd, result)
 
@@ -532,35 +626,44 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--log-uri s3://test/logs --enable-debugging'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['LogUri'] = 's3://test/logs'
-        debugging_config = \
-            [{'Name': 'Setup Hadoop Debugging',
-              'ActionOnFailure': 'TERMINATE_CLUSTER',
-              'HadoopJarStep':
-                {'Args':
-                    [('s3://us-east-1.elasticmapreduce/libs/'
-                      'state-pusher/0.1/fetch')],
-                 'Jar':
-                    's3://us-east-1.elasticmapreduce/libs/' +
-                    'script-runner/script-runner.jar'
-                 }
-              }]
+        debugging_config = [
+            {
+                'Name': 'Setup Hadoop Debugging',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Args': [
+                        (
+                            's3://us-east-1.elasticmapreduce/libs/'
+                            'state-pusher/0.1/fetch'
+                        )
+                    ],
+                    'Jar': 's3://us-east-1.elasticmapreduce/libs/'
+                    + 'script-runner/script-runner.jar',
+                },
+            }
+        ]
         result['Steps'] = debugging_config
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = DEFAULT_CMD + ('--log-uri s3://test/logs --enable-debugging '
-                             '--region us-west-2')
-        debugging_config = \
-            [{'Name': 'Setup Hadoop Debugging',
-              'ActionOnFailure': 'TERMINATE_CLUSTER',
-              'HadoopJarStep':
-                {'Args':
-                    [('s3://us-west-2.elasticmapreduce/libs/'
-                      'state-pusher/0.1/fetch')],
-                 'Jar':
-                    's3://us-west-2.elasticmapreduce/libs/' +
-                    'script-runner/script-runner.jar'
-                 }
-              }]
+        cmd = DEFAULT_CMD + (
+            '--log-uri s3://test/logs --enable-debugging ' '--region us-west-2'
+        )
+        debugging_config = [
+            {
+                'Name': 'Setup Hadoop Debugging',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Args': [
+                        (
+                            's3://us-west-2.elasticmapreduce/libs/'
+                            'state-pusher/0.1/fetch'
+                        )
+                    ],
+                    'Jar': 's3://us-west-2.elasticmapreduce/libs/'
+                    + 'script-runner/script-runner.jar',
+                },
+            }
+        ]
         result['Steps'] = debugging_config
         self.assert_params_for_cmd(cmd, result)
 
@@ -568,16 +671,21 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--enable-debugging'
         expected_error_msg = (
             '\naws: error: LogUri not specified. You must specify a logUri'
-            ' if you enable debugging when creating a cluster.\n')
+            ' if you enable debugging when creating a cluster.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_enable_debugging_and_no_enable_debugging(self):
-        cmd = DEFAULT_CMD + '--enable-debugging --no-enable-debugging' + \
-            ' --log-uri s3://test/logs'
+        cmd = (
+            DEFAULT_CMD
+            + '--enable-debugging --no-enable-debugging'
+            + ' --log-uri s3://test/logs'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --enable-debugging and '
-            '--no-enable-debugging options together.\n')
+            '--no-enable-debugging options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -587,7 +695,8 @@ class TestCreateCluster(BaseAWSCommandPa
             '--instance-groups '
             'InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadbeef '
             'InstanceGroupType=CORE,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadbeef '
-            'InstanceGroupType=TASK,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork ')
+            'InstanceGroupType=TASK,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork '
+        )
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_instance_groups_instance_group_type_mismatch_cases(self):
@@ -597,90 +706,105 @@ class TestCreateCluster(BaseAWSCommandPa
             'Name=MASTER,InstanceGroupType=MaSter,InstanceCount=1,'
             'InstanceType=m1.large,CustomAmiId=ami-deadbeef Name=CORE,InstanceGroupType=cORE,'
             'InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadbeef Name=TASK,'
-            'InstanceGroupType=tAsK,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork')
+            'InstanceGroupType=tAsK,InstanceCount=1,InstanceType=m1.large,CustomAmiId=ami-deadpork'
+        )
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_instance_groups_instance_type_and_count(self):
         cmd = (
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
-            '--instance-type m1.large')
+            '--instance-type m1.large'
+        )
         expected_result = copy.deepcopy(DEFAULT_RESULT)
-        expected_result['Instances'] = \
-            {'KeepJobFlowAliveWhenNoSteps': True,
-             'TerminationProtected': False,
-             'InstanceGroups':
-                [{'InstanceRole': 'MASTER',
-                  'InstanceCount': 1,
-                  'Name': 'MASTER',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'}]
-             }
+        expected_result['Instances'] = {
+            'KeepJobFlowAliveWhenNoSteps': True,
+            'TerminationProtected': False,
+            'InstanceGroups': [
+                {
+                    'InstanceRole': 'MASTER',
+                    'InstanceCount': 1,
+                    'Name': 'MASTER',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                }
+            ],
+        }
         self.assert_params_for_cmd(cmd, expected_result)
         cmd = (
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
-            '--instance-type m1.large --instance-count 3')
+            '--instance-type m1.large --instance-count 3'
+        )
         expected_result = copy.deepcopy(DEFAULT_RESULT)
-        expected_result['Instances'] = \
-            {'KeepJobFlowAliveWhenNoSteps': True,
-             'TerminationProtected': False,
-             'InstanceGroups':
-                [{'InstanceRole': 'MASTER',
-                  'InstanceCount': 1,
-                  'Name': 'MASTER',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'
-                  },
-                 {'InstanceRole': 'CORE',
-                  'InstanceCount': 2,
-                  'Name': 'CORE',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'
-                  }]
-             }
+        expected_result['Instances'] = {
+            'KeepJobFlowAliveWhenNoSteps': True,
+            'TerminationProtected': False,
+            'InstanceGroups': [
+                {
+                    'InstanceRole': 'MASTER',
+                    'InstanceCount': 1,
+                    'Name': 'MASTER',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                },
+                {
+                    'InstanceRole': 'CORE',
+                    'InstanceCount': 2,
+                    'Name': 'CORE',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                },
+            ],
+        }
         self.assert_params_for_cmd(cmd, expected_result)
 
     def test_instance_groups_missing_required_parameter_error(self):
-        cmd = (
-            'emr create-cluster --use-default-roles --ami-version 3.0.4 ')
+        cmd = 'emr create-cluster --use-default-roles --ami-version 3.0.4 '
         expect_error_msg = (
             '\naws: error: Must specify either --instance-groups or '
             '--instance-type with --instance-count(optional) to '
-            'configure instance groups.\n')
+            'configure instance groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
         cmd = (
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
-            '--instance-count 2')
+            '--instance-count 2'
+        )
         expect_error_msg = (
             '\naws: error: Must specify either --instance-groups or '
             '--instance-type with --instance-count(optional) to '
-            'configure instance groups.\n')
+            'configure instance groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_instance_groups_exclusive_parameter_validation_error(self):
         cmd = (
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
-            '--instance-type m1.large --instance-groups ' +
-            DEFAULT_INSTANCE_GROUPS_ARG)
+            '--instance-type m1.large --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         expect_error_msg = (
             '\naws: error: You may not specify --instance-type '
             'or --instance-count with --instance-groups, '
             'because --instance-type and --instance-count are '
-            'shortcut options for --instance-groups.\n')
+            'shortcut options for --instance-groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
         cmd = (
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
             '--instance-type m1.large --instance-count 2 '
-            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         expect_error_msg = (
             '\naws: error: You may not specify --instance-type '
             'or --instance-count with --instance-groups, '
             'because --instance-type and --instance-count are '
-            'shortcut options for --instance-groups.\n')
+            'shortcut options for --instance-groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
@@ -689,7 +813,8 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceCount=1,InstanceType=m1.small')
+            'Name=Master,InstanceCount=1,InstanceType=m1.small'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceGroupType')
 
@@ -698,10 +823,8 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceGroupType=MASTER,InstanceCount=1')
-        expect_error_msg = (
-            '\nThe following required parameters are missing'
-            ' for structure:: InstanceType\n')
+            'Name=Master,InstanceGroupType=MASTER,InstanceCount=1'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceType')
 
@@ -710,75 +833,92 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --ami-version 3.0.4 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceGroupType=MASTER,InstanceType=m1.xlarge')
+            'Name=Master,InstanceGroupType=MASTER,InstanceType=m1.xlarge'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceCount')
 
     def test_instance_groups_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_groups.json')
-        cmd = ('emr create-cluster --use-default-roles --ami-version 3.0.4  '
-               '--instance-groups file://' + data_path)
-        result = copy.deepcopy(DEFAULT_RESULT)
-        result['Instances']['InstanceGroups'] = \
-            [
-                {'InstanceRole': 'MASTER',
-                 'InstanceCount': 1,
-                 'Name': 'Master Instance Group',
-                 'Market': 'ON_DEMAND',
-                 'InstanceType': 'm1.large'
-                 },
-                {'InstanceRole': 'CORE',
-                 'InstanceCount': 2,
-                 'Name': 'Core Instance Group',
-                 'Market': 'ON_DEMAND',
-                 'InstanceType': 'm1.xlarge'
-                 },
-                {'InstanceRole': 'TASK',
-                 'InstanceCount': 3,
-                 'Name': 'Task Instance Group',
-                 'Market': 'SPOT',
-                 'BidPrice': '3.45',
-                 'InstanceType': 'm1.xlarge'
-                 }
+            os.path.dirname(__file__), 'input_instance_groups.json'
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles --ami-version 3.0.4  '
+            '--instance-groups file://' + data_path
+        )
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['Instances']['InstanceGroups'] = [
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'Master Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 2,
+                'Name': 'Core Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 3,
+                'Name': 'Task Instance Group',
+                'Market': 'SPOT',
+                'BidPrice': '3.45',
+                'InstanceType': 'm1.xlarge',
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_groups_from_json_file_spot_bidprice_equals_ondemandprice(self):
+    def test_instance_groups_from_json_file_spot_bidprice_equals_ondemandprice(
+        self,
+    ):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_groups_spot_bidprice_equals_ondemandprice.json')
-        cmd = ('emr create-cluster --use-default-roles --ami-version 3.0.4  '
-               '--instance-groups file://' + data_path)
-        result = copy.deepcopy(DEFAULT_RESULT)
-        result['Instances']['InstanceGroups'] = \
-            [
-                {'InstanceRole': 'MASTER',
-                 'InstanceCount': 1,
-                 'Name': 'Master Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.large'
-                 },
-                {'InstanceRole': 'CORE',
-                 'InstanceCount': 2,
-                 'Name': 'Core Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.xlarge'
-                 },
-                {'InstanceRole': 'TASK',
-                 'InstanceCount': 3,
-                 'Name': 'Task Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.xlarge'
-                 }
+            os.path.dirname(__file__),
+            'input_instance_groups_spot_bidprice_equals_ondemandprice.json',
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles --ami-version 3.0.4  '
+            '--instance-groups file://' + data_path
+        )
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['Instances']['InstanceGroups'] = [
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'Master Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 2,
+                'Name': 'Core Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 3,
+                'Name': 'Task Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.xlarge',
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_ec2_attributes_no_az(self):
-        cmd = ('emr create-cluster --ami-version 3.0.4 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes KeyName=testkey,SubnetId=subnet-123456,'
-               'InstanceProfile=EMR_EC2_DefaultRole '
-               '--service-role EMR_DefaultRole')
+        cmd = (
+            'emr create-cluster --ami-version 3.0.4 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes KeyName=testkey,SubnetId=subnet-123456,'
+            'InstanceProfile=EMR_EC2_DefaultRole '
+            '--service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Ec2SubnetId'] = 'subnet-123456'
@@ -792,21 +932,30 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_ec2_attributes_subnet_az_error(self):
-        cmd = DEFAULT_CMD + '--ec2-attributes ' + \
-            'SubnetId=subnet-123456,AvailabilityZone=us-east-1a'
+        cmd = (
+            DEFAULT_CMD
+            + '--ec2-attributes '
+            + 'SubnetId=subnet-123456,AvailabilityZone=us-east-1a'
+        )
         expect_error_msg = (
             '\naws: error: You may not specify both a SubnetId and an Availab'
-            'ilityZone (placement) because ec2SubnetId implies a placement.\n')
+            'ilityZone (placement) because ec2SubnetId implies a placement.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_ec2_attributes_with_subnet_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_ec2_attributes_with_subnet.json')
-        cmd = ('emr create-cluster --ami-version 3.0.4 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes file://' + data_path +
-               ' --service-role EMR_DefaultRole')
+            os.path.dirname(__file__), 'input_ec2_attributes_with_subnet.json'
+        )
+        cmd = (
+            'emr create-cluster --ami-version 3.0.4 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes file://'
+            + data_path
+            + ' --service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Ec2SubnetId'] = 'subnet-123456'
@@ -815,11 +964,16 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_ec2_attributes_with_az_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_ec2_attributes_with_az.json')
-        cmd = ('emr create-cluster --ami-version 3.0.4 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes file://' + data_path +
-               ' --service-role EMR_DefaultRole')
+            os.path.dirname(__file__), 'input_ec2_attributes_with_az.json'
+        )
+        cmd = (
+            'emr create-cluster --ami-version 3.0.4 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes file://'
+            + data_path
+            + ' --service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Placement'] = {'AvailabilityZone': 'us-east-1a'}
@@ -836,7 +990,8 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             ' --bootstrap-actions '
             'Path=s3://test/ba1,Name=ba1,Args=arg1,arg2,arg3 '
-            'Path=s3://test/ba2,Name=ba2,Args=arg1,arg2,arg3')
+            'Path=s3://test/ba2,Name=ba2,Args=arg1,arg2,arg3'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['BootstrapActions'] = TEST_BA
 
@@ -848,57 +1003,68 @@ class TestCreateCluster(BaseAWSCommandPa
         for i in range(1, 18):
             cmd += ba_cmd
 
-        expected_error_msg = '\naws: error: maximum number of ' +\
-                             'bootstrap actions for a cluster exceeded.\n'
+        expected_error_msg = (
+            '\naws: error: maximum number of '
+            + 'bootstrap actions for a cluster exceeded.\n'
+        )
         result = self.run_cmd(cmd, 252)
 
         self.assertEqual(expected_error_msg, result[1])
 
     def test_bootstrap_actions_exceed_maximum_with_applications_error(self):
-        cmd = DEFAULT_CMD + ' --applications Name=GANGLIA Name=HBASE' +\
-            ' Name=IMPALA,Args=arg1,arg2 --bootstrap-actions'
+        cmd = (
+            DEFAULT_CMD
+            + ' --applications Name=GANGLIA Name=HBASE'
+            + ' Name=IMPALA,Args=arg1,arg2 --bootstrap-actions'
+        )
         ba_cmd = ' Path=s3://test/ba1,Name=ba1,Args=arg1,arg2,arg3'
         for i in range(1, 15):
             cmd += ba_cmd
-        expected_error_msg = '\naws: error: maximum number of ' +\
-                             'bootstrap actions for a cluster exceeded.\n'
+        expected_error_msg = (
+            '\naws: error: maximum number of '
+            + 'bootstrap actions for a cluster exceeded.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_boostrap_actions_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            ' --bootstrap-actions Path=s3://test/ba1 Path=s3://test/ba2')
+            ' --bootstrap-actions Path=s3://test/ba1 Path=s3://test/ba2'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
-        result['BootstrapActions'] = \
-            [
-                {'Name': 'Bootstrap action',
-                 'ScriptBootstrapAction':
-                    {'Path': 's3://test/ba1'}
-                 },
-                {'Name': 'Bootstrap action',
-                 'ScriptBootstrapAction':
-                    {'Path': 's3://test/ba2'}
-                 }
+        result['BootstrapActions'] = [
+            {
+                'Name': 'Bootstrap action',
+                'ScriptBootstrapAction': {'Path': 's3://test/ba1'},
+            },
+            {
+                'Name': 'Bootstrap action',
+                'ScriptBootstrapAction': {'Path': 's3://test/ba2'},
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_bootstrap_actions_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_bootstrap_actions.json')
+            os.path.dirname(__file__), 'input_bootstrap_actions.json'
+        )
         cmd = DEFAULT_CMD + ' --bootstrap-actions file://' + data_path
         result = copy.deepcopy(DEFAULT_RESULT)
-        result['BootstrapActions'] = \
-            [
-                {"Name": "Bootstrap Action 1",
-                 "ScriptBootstrapAction":
-                    {"Path": "s3://mybucket/test1",
-                     "Args": ["arg1", "arg2"]}
-                 },
-                {"Name": "Bootstrap Action 2",
-                 "ScriptBootstrapAction":
-                    {"Path": "s3://mybucket/test2",
-                     "Args": ["arg1", "arg2"]}
-                 }
+        result['BootstrapActions'] = [
+            {
+                "Name": "Bootstrap Action 1",
+                "ScriptBootstrapAction": {
+                    "Path": "s3://mybucket/test1",
+                    "Args": ["arg1", "arg2"],
+                },
+            },
+            {
+                "Name": "Bootstrap Action 2",
+                "ScriptBootstrapAction": {
+                    "Path": "s3://mybucket/test2",
+                    "Args": ["arg1", "arg2"],
+                },
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
@@ -912,20 +1078,25 @@ class TestCreateCluster(BaseAWSCommandPa
     def test_install_hive_with_profile_region(self):
         self.driver.session.set_config_variable('region', 'cn-north-1')
         cmd = DEFAULT_CMD + '--applications Name=Hive'
-        HIVE_STEP = json.dumps(INSTALL_HIVE_STEP).\
-            replace('us-east-1', 'cn-north-1')
+        HIVE_STEP = json.dumps(INSTALL_HIVE_STEP).replace(
+            'us-east-1', 'cn-north-1'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [json.loads(HIVE_STEP)]
         self.assert_params_for_cmd(cmd, result)
 
     def test_install_hive_site(self):
-        cmdline = (DEFAULT_CMD + '--applications Name=Hive,'
-                   'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]')
+        cmdline = (
+            DEFAULT_CMD + '--applications Name=Hive,'
+            'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [INSTALL_HIVE_STEP, INSTALL_HIVE_SITE_STEP]
         self.assert_params_for_cmd(cmdline, result)
-        cmdline = (DEFAULT_CMD + '--applications Name=Hive,'
-                   'Args=[--hive-site=s3://test/hive-conf/hive-site.xml,k1]')
+        cmdline = (
+            DEFAULT_CMD + '--applications Name=Hive,'
+            'Args=[--hive-site=s3://test/hive-conf/hive-site.xml,k1]'
+        )
         self.assert_params_for_cmd(cmdline, result)
 
     def test_install_pig_with_defaults(self):
@@ -947,12 +1118,10 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_install_impala_with_all_fields(self):
-        cmd = DEFAULT_CMD + \
-            '--applications Name=Impala,Args=arg1,arg2'
+        cmd = DEFAULT_CMD + '--applications Name=Impala,Args=arg1,arg2'
         result = copy.deepcopy(DEFAULT_RESULT)
         ba = copy.deepcopy(INSTALL_IMPALA_BA)
-        ba['ScriptBootstrapAction']['Args'] += \
-            ['--impala-conf', 'arg1,arg2']
+        ba['ScriptBootstrapAction']['Args'] += ['--impala-conf', 'arg1,arg2']
         result['BootstrapActions'] = [ba]
         self.assert_params_for_cmd(cmd, result)
 
@@ -964,21 +1133,18 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_install_mapr_with_args(self):
-        cmd = DEFAULT_CMD + \
-            '--applications Name=mapr,Args=--edition,m5,--version,3.0.2'
+        cmd = (
+            DEFAULT_CMD
+            + '--applications Name=mapr,Args=--edition,m5,--version,3.0.2'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['NewSupportedProducts'] = [INSTALL_MAPR_PRODUCT]
         self.assert_params_for_cmd(cmd, result)
 
     def test_install_mapr_without_args(self):
-        cmd = DEFAULT_CMD + \
-            '--applications Name=mapr'
+        cmd = DEFAULT_CMD + '--applications Name=mapr'
         result = copy.deepcopy(DEFAULT_RESULT)
-        result['NewSupportedProducts'] =  \
-            [
-                {'Name': 'mapr',
-                 'Args': []}
-        ]
+        result['NewSupportedProducts'] = [{'Name': 'mapr', 'Args': []}]
         self.assert_params_for_cmd(cmd, result)
 
     def test_supported_products(self):
@@ -986,7 +1152,8 @@ class TestCreateCluster(BaseAWSCommandPa
             '--applications '
             'Name=hue,Args=--hue-config,s3://elasticmapreduce/hue-config '
             'Name=mapr,Args=--edition,m7 '
-            'Name=unknown,Args=[arg1,k1=v1]')
+            'Name=unknown,Args=[arg1,k1=v1]'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['NewSupportedProducts'] = INSTALL_SUPPORTED_PRODUCTS
         self.assert_params_for_cmd(cmd, result)
@@ -995,9 +1162,9 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             '--applications '
             'Name=hive Name=pig Name=ganglia Name=hbase Name=impala '
-            'Name=mapr,Args=--edition,m5,--version,3.0.2')
-        ba_list = [INSTALL_GANGLIA_BA, INSTALL_HBASE_BA,
-                   INSTALL_IMPALA_BA]
+            'Name=mapr,Args=--edition,m5,--version,3.0.2'
+        )
+        ba_list = [INSTALL_GANGLIA_BA, INSTALL_HBASE_BA, INSTALL_IMPALA_BA]
         step_list = [INSTALL_HIVE_STEP, INSTALL_PIG_STEP, INSTALL_HBASE_STEP]
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = step_list
@@ -1007,14 +1174,15 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_applications_all_types_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_applications.json')
+            os.path.dirname(__file__), 'input_applications.json'
+        )
         cmd = DEFAULT_CMD + '--applications file://' + data_path
         impala_ba = copy.deepcopy(INSTALL_IMPALA_BA)
-        impala_ba['ScriptBootstrapAction']['Args'] += \
-            ['--impala-conf',
-             'IMPALA_BACKEND_PORT=22001,IMPALA_MEM_LIMIT=70%']
-        ba_list = [INSTALL_GANGLIA_BA, INSTALL_HBASE_BA,
-                   impala_ba]
+        impala_ba['ScriptBootstrapAction']['Args'] += [
+            '--impala-conf',
+            'IMPALA_BACKEND_PORT=22001,IMPALA_MEM_LIMIT=70%',
+        ]
+        ba_list = [INSTALL_GANGLIA_BA, INSTALL_HBASE_BA, impala_ba]
         step_list = [INSTALL_HIVE_STEP, INSTALL_PIG_STEP, INSTALL_HBASE_STEP]
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = step_list
@@ -1026,7 +1194,8 @@ class TestCreateCluster(BaseAWSCommandPa
     def test_wrong_step_type_error(self):
         cmd = DEFAULT_CMD + '--steps Type=unknown'
         expected_error_msg = (
-            '\naws: error: The step type unknown is not supported.\n')
+            '\naws: error: The step type unknown is not supported.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -1038,25 +1207,34 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_custom_jar_step_missing_jar(self):
         cmd = DEFAULT_CMD + '--steps Name=CustomJarMissingJar'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for CustomJARStepConfig: Jar.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for CustomJARStepConfig: Jar.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_custom_jar_step_with_all_fields(self):
-        cmd = DEFAULT_CMD + '--steps ' + (
-            'Name=Custom,Type=Custom_JAR,'
-            'Jar=s3://mybucket/mytest.jar,'
-            'Args=arg1,arg2,MainClass=mymainclass,'
-            'ActionOnFailure=TERMINATE_CLUSTER')
+        cmd = (
+            DEFAULT_CMD
+            + '--steps '
+            + (
+                'Name=Custom,Type=Custom_JAR,'
+                'Jar=s3://mybucket/mytest.jar,'
+                'Args=arg1,arg2,MainClass=mymainclass,'
+                'ActionOnFailure=TERMINATE_CLUSTER'
+            )
+        )
         expected_steps = [
-            {'Name': 'Custom',
-             'ActionOnFailure': 'TERMINATE_CLUSTER',
-             'HadoopJarStep':
-                {'Jar': 's3://mybucket/mytest.jar',
-                 'Args': ['arg1', 'arg2'],
-                 'MainClass': 'mymainclass'}
-             }
+            {
+                'Name': 'Custom',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Jar': 's3://mybucket/mytest.jar',
+                    'Args': ['arg1', 'arg2'],
+                    'MainClass': 'mymainclass',
+                },
+            }
         ]
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = expected_steps
@@ -1066,52 +1244,64 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--steps Type=Streaming,' + STREAMING_ARGS
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [
-            {'Name': 'Streaming program',
-             'ActionOnFailure': 'CONTINUE',
-             'HadoopJarStep': STREAMING_HADOOP_JAR_STEP}
+            {
+                'Name': 'Streaming program',
+                'ActionOnFailure': 'CONTINUE',
+                'HadoopJarStep': STREAMING_HADOOP_JAR_STEP,
+            }
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_streaming_step_missing_args(self):
         cmd = DEFAULT_CMD + '--steps Type=Streaming'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for StreamingStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for StreamingStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_streaming_jar_with_all_fields(self):
         test_step_config = (
             '--steps Type=Streaming,Name=StreamingStepAllFields,'
-            'ActionOnFailure=CANCEL_AND_WAIT,' + STREAMING_ARGS)
+            'ActionOnFailure=CANCEL_AND_WAIT,' + STREAMING_ARGS
+        )
         cmd = DEFAULT_CMD + test_step_config
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [
-            {'Name': 'StreamingStepAllFields',
-             'ActionOnFailure': 'CANCEL_AND_WAIT',
-             'HadoopJarStep': STREAMING_HADOOP_JAR_STEP}
+            {
+                'Name': 'StreamingStepAllFields',
+                'ActionOnFailure': 'CANCEL_AND_WAIT',
+                'HadoopJarStep': STREAMING_HADOOP_JAR_STEP,
+            }
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_hive_step_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            '--applications Name=Hive --steps Type=Hive,' + HIVE_BASIC_ARGS)
+            '--applications Name=Hive --steps Type=Hive,' + HIVE_BASIC_ARGS
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [INSTALL_HIVE_STEP, HIVE_DEFAULT_STEP]
         self.assert_params_for_cmd(cmd, result)
 
     def test_hive_step_missing_args(self):
         cmd = DEFAULT_CMD + '--applications Name=Hive --steps Type=Hive'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for HiveStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for HiveStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_hive_step_with_all_fields(self):
         test_step_config = (
             'Type=Hive,ActionOnFailure=CANCEL_AND_WAIT,'
-            'Name=HiveBasicStep,' + HIVE_BASIC_ARGS)
+            'Name=HiveBasicStep,' + HIVE_BASIC_ARGS
+        )
         cmd = DEFAULT_CMD + (
-            '--applications Name=Hive --steps ' + test_step_config)
+            '--applications Name=Hive --steps ' + test_step_config
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         install_step = copy.deepcopy(INSTALL_HIVE_STEP)
         result['Steps'] = [install_step, HIVE_BASIC_STEP]
@@ -1119,24 +1309,30 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_pig_step_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            '--applications Name=Pig --steps Type=Pig,' + PIG_BASIC_ARGS)
+            '--applications Name=Pig --steps Type=Pig,' + PIG_BASIC_ARGS
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [INSTALL_PIG_STEP, PIG_DEFAULT_STEP]
         self.assert_params_for_cmd(cmd, result)
 
     def test_pig_missing_args(self):
         cmd = DEFAULT_CMD + '--applications Name=Pig --steps Type=Pig'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for PigStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for PigStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_pig_step_with_all_fields(self):
         test_step_config = (
-            'Name=PigBasicStep,Type=Pig,' + PIG_BASIC_ARGS +
-            ',ActionOnFailure=CANCEL_AND_WAIT')
+            'Name=PigBasicStep,Type=Pig,'
+            + PIG_BASIC_ARGS
+            + ',ActionOnFailure=CANCEL_AND_WAIT'
+        )
         cmd = DEFAULT_CMD + (
-            '--applications Name=Pig --steps ' + test_step_config)
+            '--applications Name=Pig --steps ' + test_step_config
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         install_step = copy.deepcopy(INSTALL_PIG_STEP)
         result['Steps'] = [install_step, PIG_BASIC_STEP]
@@ -1144,8 +1340,9 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_impala_step_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            '--applications Name=Impala --steps Type=Impala,' +
-            IMPALA_BASIC_ARGS)
+            '--applications Name=Impala --steps Type=Impala,'
+            + IMPALA_BASIC_ARGS
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['BootstrapActions'] = [INSTALL_IMPALA_BA]
         result['Steps'] = [IMPALA_DEFAULT_STEP]
@@ -1153,17 +1350,22 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_impala_missing_args(self):
         cmd = DEFAULT_CMD + '--applications Name=Impala --steps Type=Impala'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for ImpalaStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for ImpalaStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_impala_step_with_all_fields(self):
         test_step_config = (
-            'Name=ImpalaBasicStep,Type=Impala,' + IMPALA_BASIC_ARGS +
-            ',ActionOnFailure=CANCEL_AND_WAIT')
+            'Name=ImpalaBasicStep,Type=Impala,'
+            + IMPALA_BASIC_ARGS
+            + ',ActionOnFailure=CANCEL_AND_WAIT'
+        )
         cmd = DEFAULT_CMD + (
-            '--applications Name=Impala --steps ' + test_step_config)
+            '--applications Name=Impala --steps ' + test_step_config
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['BootstrapActions'] = [INSTALL_IMPALA_BA]
         step = copy.deepcopy(IMPALA_DEFAULT_STEP)
@@ -1175,7 +1377,8 @@ class TestCreateCluster(BaseAWSCommandPa
     def test_restore_from_hbase(self):
         cmd = DEFAULT_CMD + (
             '--applications Name=hbase --restore-from-hbase-backup '
-            'Dir=s3://mybucket/test,BackupVersion=test_version')
+            'Dir=s3://mybucket/test,BackupVersion=test_version'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['BootstrapActions'] = [INSTALL_HBASE_BA]
         result['Steps'] = [
@@ -1190,22 +1393,27 @@ class TestCreateCluster(BaseAWSCommandPa
                         '--backup-dir',
                         's3://mybucket/test',
                         '--backup-version',
-                        'test_version'],
-                    'Jar': '/home/hadoop/lib/hbase.jar'}
-            }
+                        'test_version',
+                    ],
+                    'Jar': '/home/hadoop/lib/hbase.jar',
+                },
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_hbase_restore_from_backup.json')
+            os.path.dirname(__file__), 'input_hbase_restore_from_backup.json'
+        )
         cmd = DEFAULT_CMD + (
             '--applications Name=hbase --restore-from-hbase-backup '
-            'file://' + data_path)
+            'file://' + data_path
+        )
         self.assert_params_for_cmd(cmd, result)
 
     def test_empty_step_args(self):
         cmd = DEFAULT_CMD + '--steps Type=Streaming,Args= '
-        expect_error_msg = ('\naws: error: The prameter Args cannot '
-                            'be an empty list.\n')
+        expect_error_msg = (
+            '\naws: error: The prameter Args cannot ' 'be an empty list.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
@@ -1218,65 +1426,80 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assertEqual(expect_error_msg, result[1])
 
         cmd = DEFAULT_CMD + '--steps Args= '
-        expect_error_msg = ('\naws: error: The following required parameters '
-                            'are missing for CustomJARStepConfig: Jar.\n')
+        expect_error_msg = (
+            '\naws: error: The following required parameters '
+            'are missing for CustomJARStepConfig: Jar.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_missing_applications_for_steps(self):
-        cmd = DEFAULT_CMD +\
-            '--steps Jar=s3://test/customJar.jar ' +\
-            'Type=HIVE,Args=-f,s3://test/hive ' +\
-            'Type=PIG,Args=-f,s3://test/pig ' +\
-            'Type=IMPALA,Args=--impala-script,s3://test/impala ' +\
-            'Type=Streaming,Args=-files,s3://test/mapper.py,-mapper,' +\
-            'mapper.py,-reducer,aggregator,-input,s3://test/input,-output,' +\
-            's3://test/output ' +\
-            'Type=PIG,Args=-f,s3://test/pig2 ' +\
-            'Type=IMPALA,Args=--impala-script,s3://test/impala2 ' +\
-            'Type=PIG,Args=-f,s3://test/pig3 ' +\
-            ' Jar=s3://test/customJar2.jar ' +\
-            ' --applications Name=Hive'
+        cmd = (
+            DEFAULT_CMD
+            + '--steps Jar=s3://test/customJar.jar '
+            + 'Type=HIVE,Args=-f,s3://test/hive '
+            + 'Type=PIG,Args=-f,s3://test/pig '
+            + 'Type=IMPALA,Args=--impala-script,s3://test/impala '
+            + 'Type=Streaming,Args=-files,s3://test/mapper.py,-mapper,'
+            + 'mapper.py,-reducer,aggregator,-input,s3://test/input,-output,'
+            + 's3://test/output '
+            + 'Type=PIG,Args=-f,s3://test/pig2 '
+            + 'Type=IMPALA,Args=--impala-script,s3://test/impala2 '
+            + 'Type=PIG,Args=-f,s3://test/pig3 '
+            + ' Jar=s3://test/customJar2.jar '
+            + ' --applications Name=Hive'
+        )
 
         expected_error_msg1 = (
             '\naws: error: Some of the steps require the following'
             ' applications to be installed: Impala, Pig. '
-            'Please install the applications using --applications.\n')
+            'Please install the applications using --applications.\n'
+        )
         expected_error_msg2 = (
             '\naws: error: Some of the steps require the following'
             ' applications to be installed: Pig, Impala. '
-            'Please install the applications using --applications.\n')
+            'Please install the applications using --applications.\n'
+        )
         result = self.run_cmd(cmd, 252)
 
-        if(result[1] == expected_error_msg1 or
-           result[1] == expected_error_msg2):
+        if (
+            result[1] == expected_error_msg1
+            or result[1] == expected_error_msg2
+        ):
             self.assertTrue(True)
         else:
             self.assertTrue(False)
 
     def test_missing_applications_with_hbase(self):
-        cmd = DEFAULT_CMD +\
-            '--steps Jar=s3://test/customJar.jar ' +\
-            'Type=HIVE,Args=-f,s3://test/hive ' +\
-            'Type=PIG,Args=-f,s3://test/pig ' +\
-            'Type=IMPALA,Args=--impala-script,s3://test/impala ' +\
-            'Type=Streaming,Args=-files,s3://test/mapper.py,-mapper,' +\
-            'mapper.py,-reducer,aggregator,-input,s3://test/input,-output,' +\
-            's3://test/output' + ' --applications Name=Hive Name=Pig' +\
-            ' --restore-from-hbase-backup Dir=s3://myBucket/myDir'
+        cmd = (
+            DEFAULT_CMD
+            + '--steps Jar=s3://test/customJar.jar '
+            + 'Type=HIVE,Args=-f,s3://test/hive '
+            + 'Type=PIG,Args=-f,s3://test/pig '
+            + 'Type=IMPALA,Args=--impala-script,s3://test/impala '
+            + 'Type=Streaming,Args=-files,s3://test/mapper.py,-mapper,'
+            + 'mapper.py,-reducer,aggregator,-input,s3://test/input,-output,'
+            + 's3://test/output'
+            + ' --applications Name=Hive Name=Pig'
+            + ' --restore-from-hbase-backup Dir=s3://myBucket/myDir'
+        )
 
         expected_error_msg1 = (
             '\naws: error: Some of the steps require the following'
             ' applications to be installed: Hbase, Impala. '
-            'Please install the applications using --applications.\n')
+            'Please install the applications using --applications.\n'
+        )
         expected_error_msg2 = (
             '\naws: error: Some of the steps require the following'
             ' applications to be installed: Impala, Hbase. '
-            'Please install the applications using --applications.\n')
+            'Please install the applications using --applications.\n'
+        )
         result = self.run_cmd(cmd, 252)
 
-        if(result[1] == expected_error_msg1 or
-           result[1] == expected_error_msg2):
+        if (
+            result[1] == expected_error_msg1
+            or result[1] == expected_error_msg2
+        ):
             self.assertTrue(True)
         else:
             self.assertTrue(False)
@@ -1297,20 +1520,24 @@ class TestCreateCluster(BaseAWSCommandPa
             'AdditionalMasterSecurityGroups='
             '[sg-addMaster1,sg-addMaster2,sg-addMaster3,'
             'sg-addMaster4],AdditionalSlaveSecurityGroups=[sg-addSlave1,'
-            'sg-addSlave2,sg-addSlave3,sg-addSlave4]')
+            'sg-addSlave2,sg-addSlave3,sg-addSlave4]'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['AdditionalMasterSecurityGroups'] = \
+        )
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
@@ -1318,16 +1545,18 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             '--ec2-attributes EmrManagedMasterSecurityGroup=sg-master1,'
             'EmrManagedSlaveSecurityGroup=sg-slave1,'
-            'ServiceAccessSecurityGroup=sg-service-access')
+            'ServiceAccessSecurityGroup=sg-service-access'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
 
         self.assert_params_for_cmd(cmd, result)
 
@@ -1335,365 +1564,438 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             '--ec2-attributes AdditionalMasterSecurityGroups=[sg-addMaster1'
             ',sg-addMaster2,sg-addMaster3,sg-addMaster4],AdditionalSlaveSecu'
-            'rityGroups=[sg-addSlave1,sg-addSlave2,sg-addSlave3,sg-addSlave4]')
+            'rityGroups=[sg-addSlave1,sg-addSlave2,sg-addSlave3,sg-addSlave4]'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['AdditionalMasterSecurityGroups'] = \
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_security_groups_from_json_file(self):
         data_path = os.path.join(
             os.path.dirname(__file__),
-            'input_ec2_attributes_with_security_groups.json')
+            'input_ec2_attributes_with_security_groups.json',
+        )
         cmd = DEFAULT_CMD + '--ec2-attributes file://' + data_path
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
-        instances['AdditionalMasterSecurityGroups'] = \
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_group_with_autoscaling_policy(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --auto-scaling-role EMR_AUTOSCALING_ROLE --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY
-                              },
-                'AmiVersion': '3.1.0',
-                'AutoScalingRole': 'EMR_AUTOSCALING_ROLE',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
-        self.assert_params_for_cmd(cmd, result)
-
-    def test_instance_group_with_autoscaling_policy_missing_autoscaling_role(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG)
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --auto-scaling-role EMR_AUTOSCALING_ROLE --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY,
+            },
+            'AmiVersion': '3.1.0',
+            'AutoScalingRole': 'EMR_AUTOSCALING_ROLE',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_instance_group_with_autoscaling_policy_missing_autoscaling_role(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG
+        )
         expected_error_msg = (
             '\naws: error: Must specify --auto-scaling-role when'
-            ' configuring an AutoScaling policy for an instance group.\n')
+            ' configuring an AutoScaling policy for an instance group.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_scale_down_behavior(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --scale-down-behavior TERMINATE_AT_TASK_COMPLETION '
-                             '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'ScaleDownBehavior': 'TERMINATE_AT_TASK_COMPLETION',
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --scale-down-behavior TERMINATE_AT_TASK_COMPLETION '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'ScaleDownBehavior': 'TERMINATE_AT_TASK_COMPLETION',
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_group_with_ebs_config(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups':
-                                                CONSTANTS.INSTANCE_GROUPS_WITH_EBS
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_volume_type(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG)
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'VolumeType')
 
     def test_instance_groups_with_ebs_config_missing_size(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG)
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'SizeInGB')
 
     def test_instance_groups_with_ebs_config_missing_volume_spec(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC
-                                      },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_iops(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS
-                             },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_multiple_instance_groups(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-groups ' +
-               CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES
-                             },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-groups '
+            + CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_group_with_ebs_config_from_json(self):
-           data_path = os.path.join(
-               os.path.dirname(__file__), 'input_instance_groups_ebs_config.json')
-           cmd = ('emr create-cluster --use-default-roles --ami-version 3.0.4  '
-                  '--instance-groups file://' + data_path)
-           result = copy.deepcopy(DEFAULT_RESULT)
-           result['Instances']['InstanceGroups'] = \
-               [
-                   {'InstanceRole': 'MASTER',
-                    'InstanceCount': 1,
-                    'Name': 'Master Instance Group',
-                    'Market': 'ON_DEMAND',
-                    'InstanceType': 'd2.xlarge',
-                    'EbsConfiguration':
-                   {'EbsBlockDeviceConfigs':
-                         [
-                           {'VolumeSpecification':
-                            {'VolumeType': 'standard',
-                            'SizeInGB': 10},
-                            'VolumesPerInstance': 4
-                            }
-                         ],
-                        'EbsOptimized': True}
-                    },
-                   {'InstanceRole': 'CORE',
-                    'InstanceCount': 2,
-                    'Name': 'Core Instance Group',
-                    'Market': 'ON_DEMAND',
-                    'InstanceType': 'd2.xlarge'
-                    },
-                   {'InstanceRole': 'TASK',
-                    'InstanceCount': 3,
-                    'Name': 'Task Instance Group',
-                    'Market': 'SPOT',
-                    'BidPrice': '3.45',
-                    'InstanceType': 'd2.xlarge'
-                    }
-           ]
-           self.assert_params_for_cmd(cmd, result)
-
-    def test_instance_fleets_with_on_demand_master_only(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY)
-        result = \
+        data_path = os.path.join(
+            os.path.dirname(__file__), 'input_instance_groups_ebs_config.json'
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles --ami-version 3.0.4  '
+            '--instance-groups file://' + data_path
+        )
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['Instances']['InstanceGroups'] = [
             {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'Master Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'd2.xlarge',
+                'EbsConfiguration': {
+                    'EbsBlockDeviceConfigs': [
+                        {
+                            'VolumeSpecification': {
+                                'VolumeType': 'standard',
+                                'SizeInGB': 10,
                             },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+                            'VolumesPerInstance': 4,
+                        }
+                    ],
+                    'EbsOptimized': True,
+                },
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 2,
+                'Name': 'Core Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'd2.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 3,
+                'Name': 'Task Instance Group',
+                'Market': 'SPOT',
+                'BidPrice': '3.45',
+                'InstanceType': 'd2.xlarge',
+            },
+        ]
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_fleets_with_on_demand_master_only_with_targeted_odcr(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                  CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR
-                              },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+    def test_instance_fleets_with_on_demand_master_only(self):
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_instance_fleets_with_on_demand_master_only_with_targeted_odcr(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY_WITH_TARGETED_ODCR,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_only(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_only_with_ebs_conf(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_specific_azs(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
-                              'Placement': {'AvailabilityZones': ['us-east-1a','us-east-1b']}
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
+                'Placement': {
+                    'AvailabilityZones': ['us-east-1a', 'us-east-1b']
+                },
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_subnet_ids(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes SubnetIds=[subnetid-1,subnetid-2]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
-                              'Ec2SubnetIds': ['subnetid-1','subnetid-2']
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
-        self.assert_params_for_cmd(cmd, result)
-
-    def test_instance_fleets_with_spot_master_core_cluster_multiple_instance_types(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
-        self.assert_params_for_cmd(cmd, result)
-
-    def test_instance_fleets_with_spot_master_core_cluster_multiple_custom_amis(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes SubnetIds=[subnetid-1,subnetid-2]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
+                'Ec2SubnetIds': ['subnetid-1', 'subnetid-2'],
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_instance_fleets_with_spot_master_core_cluster_multiple_instance_types(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_instance_fleets_with_spot_master_core_cluster_multiple_custom_amis(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER_WITH_CUSTOM_AMI,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_complex_config_from_json(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_fleets.json')
-        cmd = ('emr create-cluster --use-default-roles --ami-version 3.1.0  '
-                '--instance-fleets file://' + data_path)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON
-                            },
-                'AmiVersion': '3.1.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'JobFlowRole': 'EMR_EC2_DefaultRole',
-                'ServiceRole': 'EMR_DefaultRole'
-            }
+            os.path.dirname(__file__), 'input_instance_fleets.json'
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles --ami-version 3.1.0  '
+            '--instance-fleets file://' + data_path
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON,
+            },
+            'AmiVersion': '3.1.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'JobFlowRole': 'EMR_EC2_DefaultRole',
+            'ServiceRole': 'EMR_DefaultRole',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_both_az_azs_specified(self):
-        cmd = (self.prefix + '--ami-version 3.1.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes AvailabilityZone=us-east-1a,AvailabilityZones=[us-east-1a,us-east-1b]')
+        cmd = (
+            self.prefix
+            + '--ami-version 3.1.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes AvailabilityZone=us-east-1a,AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both AvailabilityZone'
-            ' and AvailabilityZones options together.\n')
+            ' and AvailabilityZones options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_create_cluster_release_label.py 2.31.35-1/tests/unit/customizations/emr/test_create_cluster_release_label.py
--- 2.23.6-1/tests/unit/customizations/emr/test_create_cluster_release_label.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_create_cluster_release_label.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,18 +14,16 @@
 import copy
 import os
 
-from botocore.compat import json
-from botocore.compat import OrderedDict
-
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import test_constants as \
-    CONSTANTS
-from tests.unit.customizations.emr import test_constants_instance_fleets as \
-    CONSTANTS_FLEET
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from botocore.compat import OrderedDict, json
 
+from awscli.testutils import mock, unittest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+from tests.unit.customizations.emr import test_constants as CONSTANTS
+from tests.unit.customizations.emr import (
+    test_constants_instance_fleets as CONSTANTS_FLEET,
+)
 
 DEFAULT_CLUSTER_NAME = "Development Cluster"
 
@@ -35,100 +33,116 @@ DEFAULT_INSTANCE_GROUPS_ARG = (
     'InstanceGroupType=CORE,Name=CORE,'
     'InstanceCount=1,InstanceType=m1.large '
     'InstanceGroupType=TASK,Name=TASK,'
-    'InstanceCount=1,InstanceType=m1.large ')
+    'InstanceCount=1,InstanceType=m1.large '
+)
 
 HA_INSTANCE_GROUPS_ARG = (
     'InstanceGroupType=MASTER,Name=MASTER,'
     'InstanceCount=3,InstanceType=m1.large '
     'InstanceGroupType=CORE,Name=CORE,'
-    'InstanceCount=1,InstanceType=m1.large ')
+    'InstanceCount=1,InstanceType=m1.large '
+)
 
-DEFAULT_INSTANCE_GROUPS = \
-    [{'InstanceRole': 'MASTER',
-      'InstanceCount': 1,
-      'Name': 'MASTER',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      },
-     {'InstanceRole': 'CORE',
-      'InstanceCount': 1,
-      'Name': 'CORE',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      },
-     {'InstanceRole': 'TASK',
-      'InstanceCount': 1,
-      'Name': 'TASK',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      }]
-
-HA_INSTANCE_GROUPS = \
-    [{'InstanceRole': 'MASTER',
-      'InstanceCount': 3,
-      'Name': 'MASTER',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      },
-     {'InstanceRole': 'CORE',
-      'InstanceCount': 1,
-      'Name': 'CORE',
-      'Market': 'ON_DEMAND',
-      'InstanceType': 'm1.large'
-      }]
-
-
-DEFAULT_CMD = ('emr create-cluster --release-label emr-4.0.0'
-               ' --use-default-roles'
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG + ' ')
-
-DEFAULT_INSTANCES = {'KeepJobFlowAliveWhenNoSteps': True,
-                     'TerminationProtected': False,
-                     'InstanceGroups': DEFAULT_INSTANCE_GROUPS
-                     }
+DEFAULT_INSTANCE_GROUPS = [
+    {
+        'InstanceRole': 'MASTER',
+        'InstanceCount': 1,
+        'Name': 'MASTER',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+    {
+        'InstanceRole': 'CORE',
+        'InstanceCount': 1,
+        'Name': 'CORE',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+    {
+        'InstanceRole': 'TASK',
+        'InstanceCount': 1,
+        'Name': 'TASK',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+]
 
-HA_INSTANCES = {'KeepJobFlowAliveWhenNoSteps': True,
-                'TerminationProtected': False,
-                'InstanceGroups': HA_INSTANCE_GROUPS
-                }
+HA_INSTANCE_GROUPS = [
+    {
+        'InstanceRole': 'MASTER',
+        'InstanceCount': 3,
+        'Name': 'MASTER',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+    {
+        'InstanceRole': 'CORE',
+        'InstanceCount': 1,
+        'Name': 'CORE',
+        'Market': 'ON_DEMAND',
+        'InstanceType': 'm1.large',
+    },
+]
+
+
+DEFAULT_CMD = (
+    'emr create-cluster --release-label emr-4.0.0'
+    ' --use-default-roles'
+    ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG + ' '
+)
+
+DEFAULT_INSTANCES = {
+    'KeepJobFlowAliveWhenNoSteps': True,
+    'TerminationProtected': False,
+    'InstanceGroups': DEFAULT_INSTANCE_GROUPS,
+}
+
+HA_INSTANCES = {
+    'KeepJobFlowAliveWhenNoSteps': True,
+    'TerminationProtected': False,
+    'InstanceGroups': HA_INSTANCE_GROUPS,
+}
 
 EC2_ROLE_NAME = "EMR_EC2_DefaultRole"
 EMR_ROLE_NAME = "EMR_DefaultRole"
 
-DEFAULT_KERBEROS_ATTRIBUTES_ARGS = 'Realm=EC2.INTERNAL,' \
-                                   'KdcAdminPassword=123,' \
-                                   'CrossRealmTrustPrincipalPassword=123,' \
-                                   'ADDomainJoinUser=aws,' \
-                                   'ADDomainJoinPassword=123'
-
-KERBEROS_ATTRIBUTES = {'Realm': 'EC2.INTERNAL',
-                       'KdcAdminPassword': '123',
-                       'CrossRealmTrustPrincipalPassword': '123',
-                       'ADDomainJoinUser': 'aws',
-                       'ADDomainJoinPassword': '123'
-                      }
+DEFAULT_KERBEROS_ATTRIBUTES_ARGS = (
+    'Realm=EC2.INTERNAL,'
+    'KdcAdminPassword=123,'
+    'CrossRealmTrustPrincipalPassword=123,'
+    'ADDomainJoinUser=aws,'
+    'ADDomainJoinPassword=123'
+)
+
+KERBEROS_ATTRIBUTES = {
+    'Realm': 'EC2.INTERNAL',
+    'KdcAdminPassword': '123',
+    'CrossRealmTrustPrincipalPassword': '123',
+    'ADDomainJoinUser': 'aws',
+    'ADDomainJoinPassword': '123',
+}
 
 TEST_BA = [
     {
         'ScriptBootstrapAction': {
             'Path': 's3://test/ba1',
-            'Args': ['arg1', 'arg2', 'arg3']
+            'Args': ['arg1', 'arg2', 'arg3'],
         },
-        'Name': 'ba1'
+        'Name': 'ba1',
     },
     {
         'ScriptBootstrapAction': {
             'Path': 's3://test/ba2',
-            'Args': ['arg1', 'arg2', 'arg3']
+            'Args': ['arg1', 'arg2', 'arg3'],
         },
-        'Name': 'ba2'
-    }
+        'Name': 'ba2',
+    },
 ]
 
 CUSTOM_JAR_STEP = {
     'Name': 'Custom JAR',
     'ActionOnFailure': 'CONTINUE',
-    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'}
+    'HadoopJarStep': {'Jar': 's3://mybucket/mytest.jar'},
 }
 
 STREAMING_ARGS = (
@@ -137,7 +151,8 @@ STREAMING_ARGS = (
     '-mapper,wordSplitter.py,'
     '-reducer,aggregate,'
     '-input,s3://elasticmapreduce/samples/wordcount/input,'
-    '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24')
+    '-output,s3://mybucket/wordcount/output/2014-04-18/12-15-24'
+)
 
 STREAMING_HADOOP_JAR_STEP = {
     'Jar': 'command-runner.jar',
@@ -152,29 +167,29 @@ STREAMING_HADOOP_JAR_STEP = {
         '-input',
         's3://elasticmapreduce/samples/wordcount/input',
         '-output',
-        's3://mybucket/wordcount/output/2014-04-18/12-15-24']
+        's3://mybucket/wordcount/output/2014-04-18/12-15-24',
+    ],
 }
 
 CREATE_CLUSTER_RESULT = {
     "JobFlowId": "j-XXXX",
-    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX"
+    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
 }
 
 CONSTRUCTED_RESULT = {
     "ClusterId": "j-XXXX",
-    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX"
+    "ClusterArn": "arn:aws:elasticmapreduce:region:012345678910:cluster/j-XXXX",
 }
 
-DEFAULT_RESULT = \
-    {
-        'Name': DEFAULT_CLUSTER_NAME,
-        'Instances': DEFAULT_INSTANCES,
-        'ReleaseLabel': 'emr-4.0.0',
-        'VisibleToAllUsers': True,
-        'JobFlowRole': EC2_ROLE_NAME,
-        'ServiceRole': EMR_ROLE_NAME,
-        'Tags': []
-    }
+DEFAULT_RESULT = {
+    'Name': DEFAULT_CLUSTER_NAME,
+    'Instances': DEFAULT_INSTANCES,
+    'ReleaseLabel': 'emr-4.0.0',
+    'VisibleToAllUsers': True,
+    'JobFlowRole': EC2_ROLE_NAME,
+    'ServiceRole': EMR_ROLE_NAME,
+    'Tags': [],
+}
 
 EMR_MANAGED_MASTER_SECURITY_GROUP = 'sg-master1'
 
@@ -182,74 +197,86 @@ EMR_MANAGED_SLAVE_SECURITY_GROUP = 'sg-s
 
 SERVICE_ACCESS_SECURITY_GROUP = "sg-service-access"
 
-ADDITIONAL_MASTER_SECURITY_GROUPS = \
-    ['sg-addMaster1', 'sg-addMaster2', 'sg-addMaster3', 'sg-addMaster4']
+ADDITIONAL_MASTER_SECURITY_GROUPS = [
+    'sg-addMaster1',
+    'sg-addMaster2',
+    'sg-addMaster3',
+    'sg-addMaster4',
+]
 
-ADDITIONAL_SLAVE_SECURITY_GROUPS = \
-    ['sg-addSlave1', 'sg-addSlave2', 'sg-addSlave3', 'sg-addSlave4']
+ADDITIONAL_SLAVE_SECURITY_GROUPS = [
+    'sg-addSlave1',
+    'sg-addSlave2',
+    'sg-addSlave3',
+    'sg-addSlave4',
+]
 
 HIVE_BASIC_ARGS = (
-    'Args=-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q')
+    'Args=-f,s3://elasticmapreduce/samples/hive-ads/libs/model-build.q'
+)
 
 HIVE_DEFAULT_STEP = {
     'Name': 'Hive program',
     'ActionOnFailure': 'CONTINUE',
     'HadoopJarStep': {
-        'Jar':
-            ('command-runner.jar'),
+        'Jar': ('command-runner.jar'),
         'Args': [
             'hive-script',
             '--run-hive-script',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q']}
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    },
 }
 
 HIVE_STEP = {
     'Name': 'HiveBasicStep',
     'ActionOnFailure': 'CANCEL_AND_WAIT',
     'HadoopJarStep': {
-        'Jar':
-            ('command-runner.jar'),
+        'Jar': ('command-runner.jar'),
         'Args': [
             'hive-script',
             '--run-hive-script',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q']}
+            's3://elasticmapreduce/samples/hive-ads/libs/model-build.q',
+        ],
+    },
 }
 
-PIG_BASIC_ARGS = 'Args=-f,' + \
-    's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
+PIG_BASIC_ARGS = (
+    'Args=-f,' + 's3://elasticmapreduce/samples/pig-apache/do-reports2.pig'
+)
 
 PIG_DEFAULT_STEP = {
     'Name': 'Pig program',
     'ActionOnFailure': 'CONTINUE',
     'HadoopJarStep': {
-        'Jar':
-            ('command-runner.jar'),
+        'Jar': ('command-runner.jar'),
         'Args': [
             'pig-script',
             '--run-pig-script',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/'
-            'pig-apache/do-reports2.pig']}
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    },
 }
 
 PIG_STEP = {
     'Name': 'PigBasicStep',
     'ActionOnFailure': 'CANCEL_AND_WAIT',
     'HadoopJarStep': {
-        'Jar':
-            ('command-runner.jar'),
+        'Jar': ('command-runner.jar'),
         'Args': [
             'pig-script',
             '--run-pig-script',
             '--args',
             '-f',
-            's3://elasticmapreduce/samples/'
-            'pig-apache/do-reports2.pig']}
+            's3://elasticmapreduce/samples/' 'pig-apache/do-reports2.pig',
+        ],
+    },
 }
 
 
@@ -257,84 +284,91 @@ class TestCreateCluster(BaseAWSCommandPa
     prefix = 'emr create-cluster '
 
     def test_ami_version_release_label_exclusive_validation(self):
-        cmd = (self.prefix + '--ami-version 3.8.0 --release-label '
-               'emr-4.0.0 --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            self.prefix + '--ami-version 3.8.0 --release-label '
+            'emr-4.0.0 --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --ami-version'
-            ' and --release-label options together.\n')
+            ' and --release-label options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_if_ami_version_or_release_label_is_provided(self):
-        cmd = (self.prefix + ' --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
-        expected_error_msg = ('\naws: error: Either --ami-version or'
-                              ' --release-label is required.\n')
+        cmd = self.prefix + ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        expected_error_msg = (
+            '\naws: error: Either --ami-version or'
+            ' --release-label is required.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_no_special_steps_added_for_applications(self):
-        cmd = (DEFAULT_CMD + '--applications Name=MapR')
+        cmd = DEFAULT_CMD + '--applications Name=MapR'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'MapR'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=HUE')
+        cmd = DEFAULT_CMD + '--applications Name=HUE'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'HUE'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=HIVE')
+        cmd = DEFAULT_CMD + '--applications Name=HIVE'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'HIVE'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=PIG')
+        cmd = DEFAULT_CMD + '--applications Name=PIG'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'PIG'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=HBASE')
+        cmd = DEFAULT_CMD + '--applications Name=HBASE'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'HBASE'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=IMPALA')
+        cmd = DEFAULT_CMD + '--applications Name=IMPALA'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'IMPALA'}]
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = (DEFAULT_CMD + '--applications Name=GANGLIA')
+        cmd = DEFAULT_CMD + '--applications Name=GANGLIA'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'GANGLIA'}]
         self.assert_params_for_cmd(cmd, result)
 
     def test_configurations(self):
-        cmd = (DEFAULT_CMD + ' --configurations '
-               '[{\"Classification\":\"hadoop-env\",\"Properties\":{'
-               '\"someProperty\":\"someValue\"},\"Configurations\":[]}]')
+        cmd = (
+            DEFAULT_CMD + ' --configurations '
+            '[{"Classification":"hadoop-env","Properties":{'
+            '"someProperty":"someValue"},"Configurations":[]}]'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Configurations'] = [
             {
                 'Classification': 'hadoop-env',
                 'Configurations': [],
-                'Properties': {'someProperty': 'someValue'}
+                'Properties': {'someProperty': 'someValue'},
             }
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_quick_start(self):
-        cmd = (self.prefix + '--release-label emr-4.0.0 --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.0.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.0.0 --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.0.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def assert_error_message_has_field_name(self, error_msg, field_name):
@@ -345,42 +379,52 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(DEFAULT_CMD, DEFAULT_RESULT)
 
     def test_cluster_without_service_role_and_instance_profile(self):
-        cmd = ('emr create-cluster --release-label emr-4.0.0 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --release-label emr-4.0.0 '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         del result['JobFlowRole']
         del result['ServiceRole']
         self.assert_params_for_cmd(cmd, result)
 
     def test_cluster_with_service_role_and_instance_profile(self):
-        cmd = ('emr create-cluster --release-label emr-4.0.0'
-               ' --service-role ServiceRole --ec2-attributes '
-               'InstanceProfile=Ec2_InstanceProfile '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --release-label emr-4.0.0'
+            ' --service-role ServiceRole --ec2-attributes '
+            'InstanceProfile=Ec2_InstanceProfile '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['JobFlowRole'] = 'Ec2_InstanceProfile'
         result['ServiceRole'] = 'ServiceRole'
         self.assert_params_for_cmd(cmd, result)
 
     def test_mutual_exclusive_use_default_roles_and_service_role(self):
-        cmd = (DEFAULT_CMD +
-               '--ec2-attributes InstanceProfile=Ec2_InstanceProfile')
+        cmd = (
+            DEFAULT_CMD
+            + '--ec2-attributes InstanceProfile=Ec2_InstanceProfile'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --use-default-roles '
             'and --ec2-attributes InstanceProfile options together. Either '
             'choose --use-default-roles or use both --service-role <roleName>'
-            ' and --ec2-attributes InstanceProfile=<profileName>.\n')
+            ' and --ec2-attributes InstanceProfile=<profileName>.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_mutual_exclusive_use_default_roles_and_instance_profile(self):
-        cmd = (DEFAULT_CMD + '--service-role ServiceRole '
-               '--ec2-attributes InstanceProfile=Ec2_InstanceProfile')
+        cmd = (
+            DEFAULT_CMD + '--service-role ServiceRole '
+            '--ec2-attributes InstanceProfile=Ec2_InstanceProfile'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --use-default-roles '
             'and --service-role options together. Either choose '
             '--use-default-roles or use both --service-role <roleName> '
-            'and --ec2-attributes InstanceProfile=<profileName>.\n')
+            'and --ec2-attributes InstanceProfile=<profileName>.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -417,10 +461,11 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_auto_terminte(self):
-        cmd = ('emr create-cluster --use-default-roles'
-               ' --release-label emr-4.0.0 '
-               '--auto-terminate --instance-groups ' +
-               DEFAULT_INSTANCE_GROUPS_ARG)
+        cmd = (
+            'emr create-cluster --use-default-roles'
+            ' --release-label emr-4.0.0 '
+            '--auto-terminate --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = copy.deepcopy(DEFAULT_INSTANCES)
         instances['KeepJobFlowAliveWhenNoSteps'] = False
@@ -428,11 +473,15 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_auto_terminate_and_no_auto_terminate(self):
-        cmd = (DEFAULT_CMD + '--release-label emr-4.0.0 ' +
-               '--auto-terminate --no-auto-terminate')
+        cmd = (
+            DEFAULT_CMD
+            + '--release-label emr-4.0.0 '
+            + '--auto-terminate --no-auto-terminate'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --no-auto-terminate and'
-            ' --auto-terminate options together.\n')
+            ' --auto-terminate options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -449,11 +498,13 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_termination_protected_and_no_termination_protected(self):
-        cmd = DEFAULT_CMD + \
-            '--termination-protected --no-termination-protected'
+        cmd = (
+            DEFAULT_CMD + '--termination-protected --no-termination-protected'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --termination-protected'
-            ' and --no-termination-protected options together.\n')
+            ' and --no-termination-protected options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -473,12 +524,17 @@ class TestCreateCluster(BaseAWSCommandPa
         result['Instances'] = instances
         self.assert_params_for_cmd(cmd, result)
 
-    def test_unhealthy_node_replacement_and_no_unhealthy_node_replacement(self):
-        cmd = DEFAULT_CMD + \
-            '--unhealthy-node-replacement --no-unhealthy-node-replacement'
+    def test_unhealthy_node_replacement_and_no_unhealthy_node_replacement(
+        self,
+    ):
+        cmd = (
+            DEFAULT_CMD
+            + '--unhealthy-node-replacement --no-unhealthy-node-replacement'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --unhealthy-node-replacement'
-            ' and --no-unhealthy-node-replacement options together.\n')
+            ' and --no-unhealthy-node-replacement options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -496,16 +552,40 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--visible-to-all-users --no-visible-to-all-users'
         expected_error_msg = (
             '\naws: error: cannot use both --visible-to-all-users and '
-            '--no-visible-to-all-users options together.\n')
+            '--no-visible-to-all-users options together.\n'
+        )
+        result = self.run_cmd(cmd, 252)
+        self.assertEqual(expected_error_msg, result[1])
+
+    def test_extended_support(self):
+        cmd = DEFAULT_CMD + '--extended-support'
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['ExtendedSupport'] = True
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_no_extended_support(self):
+        cmd = DEFAULT_CMD + '--no-extended-support'
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['ExtendedSupport'] = False
+        self.assert_params_for_cmd(cmd, result)
+
+    def test_extended_support_and_no_extended_support(self):
+        cmd = DEFAULT_CMD + '--extended-support --no-extended-support'
+        expected_error_msg = (
+            '\naws: error: cannot use both --extended-support'
+            ' and --no-extended-support options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_tags(self):
         cmd = DEFAULT_CMD.split() + ['--tags', 'k1=v1', 'k2', 'k3=spaces  v3']
         result = copy.deepcopy(DEFAULT_RESULT)
-        tags = [{'Key': 'k1', 'Value': 'v1'},
-                {'Key': 'k2', 'Value': ''},
-                {'Key': 'k3', 'Value': 'spaces  v3'}]
+        tags = [
+            {'Key': 'k1', 'Value': 'v1'},
+            {'Key': 'k2', 'Value': ''},
+            {'Key': 'k3', 'Value': 'spaces  v3'},
+        ]
         result['Tags'] = tags
         self.assert_params_for_cmd(cmd, result)
 
@@ -513,27 +593,32 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--log-uri s3://test/logs --enable-debugging'
         result = copy.deepcopy(DEFAULT_RESULT)
         result['LogUri'] = 's3://test/logs'
-        debugging_config = \
-            [{'Name': 'Setup Hadoop Debugging',
-              'ActionOnFailure': 'TERMINATE_CLUSTER',
-              'HadoopJarStep':
-                {'Args': ['state-pusher-script'],
-                 'Jar': 'command-runner.jar'
-                 }
-              }]
+        debugging_config = [
+            {
+                'Name': 'Setup Hadoop Debugging',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Args': ['state-pusher-script'],
+                    'Jar': 'command-runner.jar',
+                },
+            }
+        ]
         result['Steps'] = debugging_config
         self.assert_params_for_cmd(cmd, result)
 
-        cmd = DEFAULT_CMD + ('--log-uri s3://test/logs --enable-debugging '
-                             '--region us-west-2')
-        debugging_config = \
-            [{'Name': 'Setup Hadoop Debugging',
-              'ActionOnFailure': 'TERMINATE_CLUSTER',
-              'HadoopJarStep':
-                {'Args': ['state-pusher-script'],
-                 'Jar': 'command-runner.jar'
-                 }
-              }]
+        cmd = DEFAULT_CMD + (
+            '--log-uri s3://test/logs --enable-debugging ' '--region us-west-2'
+        )
+        debugging_config = [
+            {
+                'Name': 'Setup Hadoop Debugging',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Args': ['state-pusher-script'],
+                    'Jar': 'command-runner.jar',
+                },
+            }
+        ]
         result['Steps'] = debugging_config
         self.assert_params_for_cmd(cmd, result)
 
@@ -541,16 +626,21 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--enable-debugging'
         expected_error_msg = (
             '\naws: error: LogUri not specified. You must specify a logUri'
-            ' if you enable debugging when creating a cluster.\n')
+            ' if you enable debugging when creating a cluster.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_enable_debugging_and_no_enable_debugging(self):
-        cmd = DEFAULT_CMD + '--enable-debugging --no-enable-debugging' + \
-            ' --log-uri s3://test/logs'
+        cmd = (
+            DEFAULT_CMD
+            + '--enable-debugging --no-enable-debugging'
+            + ' --log-uri s3://test/logs'
+        )
         expected_error_msg = (
             '\naws: error: cannot use both --enable-debugging and '
-            '--no-enable-debugging options together.\n')
+            '--no-enable-debugging options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -560,7 +650,8 @@ class TestCreateCluster(BaseAWSCommandPa
             '--instance-groups '
             'InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.large '
             'InstanceGroupType=CORE,InstanceCount=1,InstanceType=m1.large '
-            'InstanceGroupType=TASK,InstanceCount=1,InstanceType=m1.large ')
+            'InstanceGroupType=TASK,InstanceCount=1,InstanceType=m1.large '
+        )
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_instance_groups_instance_group_type_mismatch_cases(self):
@@ -570,90 +661,108 @@ class TestCreateCluster(BaseAWSCommandPa
             'Name=MASTER,InstanceGroupType=MaSter,InstanceCount=1,'
             'InstanceType=m1.large Name=CORE,InstanceGroupType=cORE,'
             'InstanceCount=1,InstanceType=m1.large Name=TASK,'
-            'InstanceGroupType=tAsK,InstanceCount=1,InstanceType=m1.large')
+            'InstanceGroupType=tAsK,InstanceCount=1,InstanceType=m1.large'
+        )
         self.assert_params_for_cmd(cmd, DEFAULT_RESULT)
 
     def test_instance_groups_instance_type_and_count(self):
         cmd = (
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
-            '--instance-type m1.large')
+            '--instance-type m1.large'
+        )
         expected_result = copy.deepcopy(DEFAULT_RESULT)
-        expected_result['Instances'] = \
-            {'KeepJobFlowAliveWhenNoSteps': True,
-             'TerminationProtected': False,
-             'InstanceGroups':
-                [{'InstanceRole': 'MASTER',
-                  'InstanceCount': 1,
-                  'Name': 'MASTER',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'}]
-             }
+        expected_result['Instances'] = {
+            'KeepJobFlowAliveWhenNoSteps': True,
+            'TerminationProtected': False,
+            'InstanceGroups': [
+                {
+                    'InstanceRole': 'MASTER',
+                    'InstanceCount': 1,
+                    'Name': 'MASTER',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                }
+            ],
+        }
         self.assert_params_for_cmd(cmd, expected_result)
         cmd = (
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
-            '--instance-type m1.large --instance-count 3')
+            '--instance-type m1.large --instance-count 3'
+        )
         expected_result = copy.deepcopy(DEFAULT_RESULT)
-        expected_result['Instances'] = \
-            {'KeepJobFlowAliveWhenNoSteps': True,
-             'TerminationProtected': False,
-             'InstanceGroups':
-                [{'InstanceRole': 'MASTER',
-                  'InstanceCount': 1,
-                  'Name': 'MASTER',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'
-                  },
-                 {'InstanceRole': 'CORE',
-                  'InstanceCount': 2,
-                  'Name': 'CORE',
-                  'Market': 'ON_DEMAND',
-                  'InstanceType': 'm1.large'
-                  }]
-             }
+        expected_result['Instances'] = {
+            'KeepJobFlowAliveWhenNoSteps': True,
+            'TerminationProtected': False,
+            'InstanceGroups': [
+                {
+                    'InstanceRole': 'MASTER',
+                    'InstanceCount': 1,
+                    'Name': 'MASTER',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                },
+                {
+                    'InstanceRole': 'CORE',
+                    'InstanceCount': 2,
+                    'Name': 'CORE',
+                    'Market': 'ON_DEMAND',
+                    'InstanceType': 'm1.large',
+                },
+            ],
+        }
         self.assert_params_for_cmd(cmd, expected_result)
 
     def test_instance_groups_missing_required_parameter_error(self):
-        cmd = ('emr create-cluster --use-default-roles --release-label'
-               ' emr-4.0.0 ')
+        cmd = (
+            'emr create-cluster --use-default-roles --release-label'
+            ' emr-4.0.0 '
+        )
         expect_error_msg = (
             '\naws: error: Must specify either --instance-groups or '
             '--instance-type with --instance-count(optional) to '
-            'configure instance groups.\n')
+            'configure instance groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
         cmd = (
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
-            '--instance-count 2')
+            '--instance-count 2'
+        )
         expect_error_msg = (
             '\naws: error: Must specify either --instance-groups or '
             '--instance-type with --instance-count(optional) to '
-            'configure instance groups.\n')
+            'configure instance groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_instance_groups_exclusive_parameter_validation_error(self):
         cmd = (
             'emr create-cluster --use-default-roles --release-label 4.0.0 '
-            '--instance-type m1.large --instance-groups ' +
-            DEFAULT_INSTANCE_GROUPS_ARG)
+            '--instance-type m1.large --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         expect_error_msg = (
             '\naws: error: You may not specify --instance-type '
             'or --instance-count with --instance-groups, '
             'because --instance-type and --instance-count are '
-            'shortcut options for --instance-groups.\n')
+            'shortcut options for --instance-groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
         cmd = (
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
             '--instance-type m1.large --instance-count 2 '
-            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
         expect_error_msg = (
             '\naws: error: You may not specify --instance-type '
             'or --instance-count with --instance-groups, '
             'because --instance-type and --instance-count are '
-            'shortcut options for --instance-groups.\n')
+            'shortcut options for --instance-groups.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
@@ -662,7 +771,8 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceCount=1,InstanceType=m1.small')
+            'Name=Master,InstanceCount=1,InstanceType=m1.small'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceGroupType')
 
@@ -671,10 +781,8 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceGroupType=MASTER,InstanceCount=1')
-        expect_error_msg = (
-            '\nThe following required parameters are missing'
-            ' for structure:: InstanceType\n')
+            'Name=Master,InstanceGroupType=MASTER,InstanceCount=1'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceType')
 
@@ -683,96 +791,123 @@ class TestCreateCluster(BaseAWSCommandPa
             'emr create-cluster --use-default-roles --release-label emr-4.0.0 '
             '--auto-terminate '
             '--instance-groups '
-            'Name=Master,InstanceGroupType=MASTER,InstanceType=m1.xlarge')
+            'Name=Master,InstanceGroupType=MASTER,InstanceType=m1.xlarge'
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'InstanceCount')
 
     def test_instance_groups_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_groups.json')
-        cmd = ('emr create-cluster --use-default-roles'
-               ' --release-label emr-4.0.0  '
-               '--instance-groups file://' + data_path)
-        result = copy.deepcopy(DEFAULT_RESULT)
-        result['Instances']['InstanceGroups'] = \
-            [
-                {'InstanceRole': 'MASTER',
-                 'InstanceCount': 1,
-                 'Name': 'Master Instance Group',
-                 'Market': 'ON_DEMAND',
-                 'InstanceType': 'm1.large'
-                 },
-                {'InstanceRole': 'CORE',
-                 'InstanceCount': 2,
-                 'Name': 'Core Instance Group',
-                 'Market': 'ON_DEMAND',
-                 'InstanceType': 'm1.xlarge'
-                 },
-                {'InstanceRole': 'TASK',
-                 'InstanceCount': 3,
-                 'Name': 'Task Instance Group',
-                 'Market': 'SPOT',
-                 'BidPrice': '3.45',
-                 'InstanceType': 'm1.xlarge'
-                 }
+            os.path.dirname(__file__), 'input_instance_groups.json'
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles'
+            ' --release-label emr-4.0.0  '
+            '--instance-groups file://' + data_path
+        )
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['Instances']['InstanceGroups'] = [
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'Master Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 2,
+                'Name': 'Core Instance Group',
+                'Market': 'ON_DEMAND',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 3,
+                'Name': 'Task Instance Group',
+                'Market': 'SPOT',
+                'BidPrice': '3.45',
+                'InstanceType': 'm1.xlarge',
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_groups_from_json_file_spot_bidprice_equals_ondemandprice(self):
+    def test_instance_groups_from_json_file_spot_bidprice_equals_ondemandprice(
+        self,
+    ):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_groups_spot_bidprice_equals_ondemandprice.json')
-        cmd = ('emr create-cluster --use-default-roles'
-               ' --release-label emr-4.0.0  '
-               '--instance-groups file://' + data_path)
-        result = copy.deepcopy(DEFAULT_RESULT)
-        result['Instances']['InstanceGroups'] = \
-            [
-                {'InstanceRole': 'MASTER',
-                 'InstanceCount': 1,
-                 'Name': 'Master Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.large'
-                 },
-                {'InstanceRole': 'CORE',
-                 'InstanceCount': 2,
-                 'Name': 'Core Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.xlarge'
-                 },
-                {'InstanceRole': 'TASK',
-                 'InstanceCount': 3,
-                 'Name': 'Task Instance Group',
-                 'Market': 'SPOT',
-                 'InstanceType': 'm1.xlarge'
-                 }
+            os.path.dirname(__file__),
+            'input_instance_groups_spot_bidprice_equals_ondemandprice.json',
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles'
+            ' --release-label emr-4.0.0  '
+            '--instance-groups file://' + data_path
+        )
+        result = copy.deepcopy(DEFAULT_RESULT)
+        result['Instances']['InstanceGroups'] = [
+            {
+                'InstanceRole': 'MASTER',
+                'InstanceCount': 1,
+                'Name': 'Master Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.large',
+            },
+            {
+                'InstanceRole': 'CORE',
+                'InstanceCount': 2,
+                'Name': 'Core Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.xlarge',
+            },
+            {
+                'InstanceRole': 'TASK',
+                'InstanceCount': 3,
+                'Name': 'Task Instance Group',
+                'Market': 'SPOT',
+                'InstanceType': 'm1.xlarge',
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_adds_configurations(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_groups_with_configurations.json')
-        cmd = ('emr create-cluster --use-default-roles'
-                ' --release-label emr-4.0.0 '
-                '--instance-groups file://' + data_path)
+            os.path.dirname(__file__),
+            'input_instance_groups_with_configurations.json',
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles'
+            ' --release-label emr-4.0.0 '
+            '--instance-groups file://' + data_path
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['InstanceGroups'][1]['Configurations'] = [
-            OrderedDict([
-                ("Classification", "hdfs-site"),
-                ("Properties", OrderedDict([
-                    ("test-key1", "test-value1"),
-                    ("test-key2", "test-value2")
-                ]))
-            ])
+            OrderedDict(
+                [
+                    ("Classification", "hdfs-site"),
+                    (
+                        "Properties",
+                        OrderedDict(
+                            [
+                                ("test-key1", "test-value1"),
+                                ("test-key2", "test-value2"),
+                            ]
+                        ),
+                    ),
+                ]
+            )
         ]
         self.assert_params_for_cmd(cmd, result)
 
-
     def test_ec2_attributes_no_az(self):
-        cmd = ('emr create-cluster --release-label emr-4.0.0 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes KeyName=testkey,SubnetId=subnet-123456,'
-               'InstanceProfile=EMR_EC2_DefaultRole '
-               '--service-role EMR_DefaultRole')
+        cmd = (
+            'emr create-cluster --release-label emr-4.0.0 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes KeyName=testkey,SubnetId=subnet-123456,'
+            'InstanceProfile=EMR_EC2_DefaultRole '
+            '--service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Ec2SubnetId'] = 'subnet-123456'
@@ -786,21 +921,30 @@ class TestCreateCluster(BaseAWSCommandPa
         self.assert_params_for_cmd(cmd, result)
 
     def test_ec2_attributes_subnet_az_error(self):
-        cmd = DEFAULT_CMD + '--ec2-attributes ' + \
-            'SubnetId=subnet-123456,AvailabilityZone=us-east-1a'
+        cmd = (
+            DEFAULT_CMD
+            + '--ec2-attributes '
+            + 'SubnetId=subnet-123456,AvailabilityZone=us-east-1a'
+        )
         expect_error_msg = (
             '\naws: error: You may not specify both a SubnetId and an Availab'
-            'ilityZone (placement) because ec2SubnetId implies a placement.\n')
+            'ilityZone (placement) because ec2SubnetId implies a placement.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_ec2_attributes_with_subnet_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_ec2_attributes_with_subnet.json')
-        cmd = ('emr create-cluster --release-label emr-4.0.0 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes file://' + data_path +
-               ' --service-role EMR_DefaultRole')
+            os.path.dirname(__file__), 'input_ec2_attributes_with_subnet.json'
+        )
+        cmd = (
+            'emr create-cluster --release-label emr-4.0.0 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes file://'
+            + data_path
+            + ' --service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Ec2SubnetId'] = 'subnet-123456'
@@ -809,11 +953,16 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_ec2_attributes_with_az_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_ec2_attributes_with_az.json')
-        cmd = ('emr create-cluster --release-label emr-4.0.0 '
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG +
-               ' --ec2-attributes file://' + data_path +
-               ' --service-role EMR_DefaultRole')
+            os.path.dirname(__file__), 'input_ec2_attributes_with_az.json'
+        )
+        cmd = (
+            'emr create-cluster --release-label emr-4.0.0 '
+            '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+            + ' --ec2-attributes file://'
+            + data_path
+            + ' --service-role EMR_DefaultRole'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Instances']['Ec2KeyName'] = 'testkey'
         result['Instances']['Placement'] = {'AvailabilityZone': 'us-east-1a'}
@@ -830,7 +979,8 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             ' --bootstrap-actions '
             'Path=s3://test/ba1,Name=ba1,Args=arg1,arg2,arg3 '
-            'Path=s3://test/ba2,Name=ba2,Args=arg1,arg2,arg3')
+            'Path=s3://test/ba2,Name=ba2,Args=arg1,arg2,arg3'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['BootstrapActions'] = TEST_BA
 
@@ -842,8 +992,10 @@ class TestCreateCluster(BaseAWSCommandPa
         for i in range(1, 18):
             cmd += ba_cmd
 
-        expected_error_msg = '\naws: error: maximum number of ' +\
-                             'bootstrap actions for a cluster exceeded.\n'
+        expected_error_msg = (
+            '\naws: error: maximum number of '
+            + 'bootstrap actions for a cluster exceeded.\n'
+        )
         result = self.run_cmd(cmd, 252)
 
         self.assertEqual(expected_error_msg, result[1])
@@ -853,45 +1005,51 @@ class TestCreateCluster(BaseAWSCommandPa
         ba_cmd = ' Path=s3://test/ba1,Name=ba1,Args=arg1,arg2,arg3'
         for i in range(1, 20):
             cmd += ba_cmd
-        expected_error_msg = '\naws: error: maximum number of ' +\
-                             'bootstrap actions for a cluster exceeded.\n'
+        expected_error_msg = (
+            '\naws: error: maximum number of '
+            + 'bootstrap actions for a cluster exceeded.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_boostrap_actions_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            ' --bootstrap-actions Path=s3://test/ba1 Path=s3://test/ba2')
+            ' --bootstrap-actions Path=s3://test/ba1 Path=s3://test/ba2'
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
-        result['BootstrapActions'] = \
-            [
-                {'Name': 'Bootstrap action',
-                 'ScriptBootstrapAction':
-                    {'Path': 's3://test/ba1'}
-                 },
-                {'Name': 'Bootstrap action',
-                 'ScriptBootstrapAction':
-                    {'Path': 's3://test/ba2'}
-                 }
+        result['BootstrapActions'] = [
+            {
+                'Name': 'Bootstrap action',
+                'ScriptBootstrapAction': {'Path': 's3://test/ba1'},
+            },
+            {
+                'Name': 'Bootstrap action',
+                'ScriptBootstrapAction': {'Path': 's3://test/ba2'},
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_bootstrap_actions_from_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_bootstrap_actions.json')
+            os.path.dirname(__file__), 'input_bootstrap_actions.json'
+        )
         cmd = DEFAULT_CMD + ' --bootstrap-actions file://' + data_path
         result = copy.deepcopy(DEFAULT_RESULT)
-        result['BootstrapActions'] = \
-            [
-                {"Name": "Bootstrap Action 1",
-                 "ScriptBootstrapAction":
-                    {"Path": "s3://mybucket/test1",
-                     "Args": ["arg1", "arg2"]}
-                 },
-                {"Name": "Bootstrap Action 2",
-                 "ScriptBootstrapAction":
-                    {"Path": "s3://mybucket/test2",
-                     "Args": ["arg1", "arg2"]}
-                 }
+        result['BootstrapActions'] = [
+            {
+                "Name": "Bootstrap Action 1",
+                "ScriptBootstrapAction": {
+                    "Path": "s3://mybucket/test1",
+                    "Args": ["arg1", "arg2"],
+                },
+            },
+            {
+                "Name": "Bootstrap Action 2",
+                "ScriptBootstrapAction": {
+                    "Path": "s3://mybucket/test2",
+                    "Args": ["arg1", "arg2"],
+                },
+            },
         ]
         self.assert_params_for_cmd(cmd, result)
 
@@ -899,7 +1057,8 @@ class TestCreateCluster(BaseAWSCommandPa
     def test_wrong_step_type_error(self):
         cmd = DEFAULT_CMD + '--steps Type=unknown'
         expected_error_msg = (
-            '\naws: error: The step type unknown is not supported.\n')
+            '\naws: error: The step type unknown is not supported.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -911,25 +1070,34 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_custom_jar_step_missing_jar(self):
         cmd = DEFAULT_CMD + '--steps Name=CustomJarMissingJar'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for CustomJARStepConfig: Jar.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for CustomJARStepConfig: Jar.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_custom_jar_step_with_all_fields(self):
-        cmd = DEFAULT_CMD + '--steps ' + (
-            'Name=Custom,Type=Custom_JAR,'
-            'Jar=s3://mybucket/mytest.jar,'
-            'Args=arg1,arg2,MainClass=mymainclass,'
-            'ActionOnFailure=TERMINATE_CLUSTER')
+        cmd = (
+            DEFAULT_CMD
+            + '--steps '
+            + (
+                'Name=Custom,Type=Custom_JAR,'
+                'Jar=s3://mybucket/mytest.jar,'
+                'Args=arg1,arg2,MainClass=mymainclass,'
+                'ActionOnFailure=TERMINATE_CLUSTER'
+            )
+        )
         expected_steps = [
-            {'Name': 'Custom',
-             'ActionOnFailure': 'TERMINATE_CLUSTER',
-             'HadoopJarStep':
-                {'Jar': 's3://mybucket/mytest.jar',
-                 'Args': ['arg1', 'arg2'],
-                 'MainClass': 'mymainclass'}
-             }
+            {
+                'Name': 'Custom',
+                'ActionOnFailure': 'TERMINATE_CLUSTER',
+                'HadoopJarStep': {
+                    'Jar': 's3://mybucket/mytest.jar',
+                    'Args': ['arg1', 'arg2'],
+                    'MainClass': 'mymainclass',
+                },
+            }
         ]
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = expected_steps
@@ -939,35 +1107,43 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + '--steps Type=Streaming,' + STREAMING_ARGS
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [
-            {'Name': 'Streaming program',
-             'ActionOnFailure': 'CONTINUE',
-             'HadoopJarStep': STREAMING_HADOOP_JAR_STEP}
+            {
+                'Name': 'Streaming program',
+                'ActionOnFailure': 'CONTINUE',
+                'HadoopJarStep': STREAMING_HADOOP_JAR_STEP,
+            }
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_streaming_step_missing_args(self):
         cmd = DEFAULT_CMD + '--steps Type=Streaming'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for StreamingStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for StreamingStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_streaming_jar_with_all_fields(self):
         test_step_config = (
             '--steps Type=Streaming,Name=StreamingStepAllFields,'
-            'ActionOnFailure=CANCEL_AND_WAIT,' + STREAMING_ARGS)
+            'ActionOnFailure=CANCEL_AND_WAIT,' + STREAMING_ARGS
+        )
         cmd = DEFAULT_CMD + test_step_config
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [
-            {'Name': 'StreamingStepAllFields',
-             'ActionOnFailure': 'CANCEL_AND_WAIT',
-             'HadoopJarStep': STREAMING_HADOOP_JAR_STEP}
+            {
+                'Name': 'StreamingStepAllFields',
+                'ActionOnFailure': 'CANCEL_AND_WAIT',
+                'HadoopJarStep': STREAMING_HADOOP_JAR_STEP,
+            }
         ]
         self.assert_params_for_cmd(cmd, result)
 
     def test_hive_step_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            '--applications Name=Hive --steps Type=Hive,' + HIVE_BASIC_ARGS)
+            '--applications Name=Hive --steps Type=Hive,' + HIVE_BASIC_ARGS
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'Hive'}]
         result['Steps'] = [HIVE_DEFAULT_STEP]
@@ -975,17 +1151,21 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_hive_step_missing_args(self):
         cmd = DEFAULT_CMD + '--applications Name=Hive --steps Type=Hive'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for HiveStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for HiveStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_hive_step_with_all_fields(self):
         test_step_config = (
             'Type=Hive,ActionOnFailure=CANCEL_AND_WAIT,'
-            'Name=HiveBasicStep,' + HIVE_BASIC_ARGS)
+            'Name=HiveBasicStep,' + HIVE_BASIC_ARGS
+        )
         cmd = DEFAULT_CMD + (
-            '--applications Name=Hive --steps ' + test_step_config)
+            '--applications Name=Hive --steps ' + test_step_config
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [HIVE_STEP]
         result['Applications'] = [{'Name': 'Hive'}]
@@ -993,7 +1173,8 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_pig_step_with_default_fields(self):
         cmd = DEFAULT_CMD + (
-            '--applications Name=Pig --steps Type=Pig,' + PIG_BASIC_ARGS)
+            '--applications Name=Pig --steps Type=Pig,' + PIG_BASIC_ARGS
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Steps'] = [PIG_DEFAULT_STEP]
         result['Applications'] = [{'Name': 'Pig'}]
@@ -1001,17 +1182,22 @@ class TestCreateCluster(BaseAWSCommandPa
 
     def test_pig_missing_args(self):
         cmd = DEFAULT_CMD + '--applications Name=Pig --steps Type=Pig'
-        expect_error_msg = '\naws: error: The following ' + \
-            'required parameters are missing for PigStepConfig: Args.\n'
+        expect_error_msg = (
+            '\naws: error: The following '
+            + 'required parameters are missing for PigStepConfig: Args.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expect_error_msg, result[1])
 
     def test_pig_step_with_all_fields(self):
         test_step_config = (
-            'Name=PigBasicStep,Type=Pig,' + PIG_BASIC_ARGS +
-            ',ActionOnFailure=CANCEL_AND_WAIT')
+            'Name=PigBasicStep,Type=Pig,'
+            + PIG_BASIC_ARGS
+            + ',ActionOnFailure=CANCEL_AND_WAIT'
+        )
         cmd = DEFAULT_CMD + (
-            '--applications Name=Pig --steps ' + test_step_config)
+            '--applications Name=Pig --steps ' + test_step_config
+        )
         result = copy.deepcopy(DEFAULT_RESULT)
         result['Applications'] = [{'Name': 'Pig'}]
         result['Steps'] = [PIG_STEP]
@@ -1033,20 +1219,24 @@ class TestCreateCluster(BaseAWSCommandPa
             'AdditionalMasterSecurityGroups='
             '[sg-addMaster1,sg-addMaster2,sg-addMaster3,'
             'sg-addMaster4],AdditionalSlaveSecurityGroups=[sg-addSlave1,'
-            'sg-addSlave2,sg-addSlave3,sg-addSlave4]')
+            'sg-addSlave2,sg-addSlave3,sg-addSlave4]'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
-        instances['AdditionalMasterSecurityGroups'] = \
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
@@ -1054,16 +1244,18 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             '--ec2-attributes EmrManagedMasterSecurityGroup=sg-master1,'
             'EmrManagedSlaveSecurityGroup=sg-slave1,'
-            'ServiceAccessSecurityGroup=sg-service-access')
+            'ServiceAccessSecurityGroup=sg-service-access'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
 
         self.assert_params_for_cmd(cmd, result)
 
@@ -1071,588 +1263,709 @@ class TestCreateCluster(BaseAWSCommandPa
         cmd = DEFAULT_CMD + (
             '--ec2-attributes AdditionalMasterSecurityGroups=[sg-addMaster1'
             ',sg-addMaster2,sg-addMaster3,sg-addMaster4],AdditionalSlaveSecu'
-            'rityGroups=[sg-addSlave1,sg-addSlave2,sg-addSlave3,sg-addSlave4]')
+            'rityGroups=[sg-addSlave1,sg-addSlave2,sg-addSlave3,sg-addSlave4]'
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['AdditionalMasterSecurityGroups'] = \
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_security_groups_from_json_file(self):
         data_path = os.path.join(
             os.path.dirname(__file__),
-            'input_ec2_attributes_with_security_groups.json')
+            'input_ec2_attributes_with_security_groups.json',
+        )
         cmd = DEFAULT_CMD + '--ec2-attributes file://' + data_path
 
         result = copy.deepcopy(DEFAULT_RESULT)
         instances = result['Instances']
-        instances['EmrManagedMasterSecurityGroup'] = \
+        instances['EmrManagedMasterSecurityGroup'] = (
             EMR_MANAGED_MASTER_SECURITY_GROUP
-        instances['EmrManagedSlaveSecurityGroup'] = \
+        )
+        instances['EmrManagedSlaveSecurityGroup'] = (
             EMR_MANAGED_SLAVE_SECURITY_GROUP
-        instances['ServiceAccessSecurityGroup'] = \
-            SERVICE_ACCESS_SECURITY_GROUP
-        instances['AdditionalMasterSecurityGroups'] = \
+        )
+        instances['ServiceAccessSecurityGroup'] = SERVICE_ACCESS_SECURITY_GROUP
+        instances['AdditionalMasterSecurityGroups'] = (
             ADDITIONAL_MASTER_SECURITY_GROUPS
-        instances['AdditionalSlaveSecurityGroups'] = \
+        )
+        instances['AdditionalSlaveSecurityGroups'] = (
             ADDITIONAL_SLAVE_SECURITY_GROUPS
+        )
 
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_group_with_autoscaling_policy(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --auto-scaling-role EMR_AUTOSCALING_ROLE --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY
-                              },
-                'ReleaseLabel': 'emr-4.2.0',
-                'AutoScalingRole': 'EMR_AUTOSCALING_ROLE',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --auto-scaling-role EMR_AUTOSCALING_ROLE --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'AutoScalingRole': 'EMR_AUTOSCALING_ROLE',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_group_with_autoscaling_policy_missing_autoscaling_role(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG)
+    def test_instance_group_with_autoscaling_policy_missing_autoscaling_role(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_AUTOSCALING_POLICY_ARG
+        )
         expected_error_msg = (
             '\naws: error: Must specify --auto-scaling-role when'
-            ' configuring an AutoScaling policy for an instance group.\n')
+            ' configuring an AutoScaling policy for an instance group.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_scale_down_behavior(self):
-        cmd = (self.prefix + '--release-label emr-4.0.0 --scale-down-behavior TERMINATE_AT_INSTANCE_HOUR '
-                             '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.0.0',
-                'VisibleToAllUsers': True,
-                'ScaleDownBehavior': 'TERMINATE_AT_INSTANCE_HOUR',
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.0.0 --scale-down-behavior TERMINATE_AT_INSTANCE_HOUR '
+            '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.0.0',
+            'VisibleToAllUsers': True,
+            'ScaleDownBehavior': 'TERMINATE_AT_INSTANCE_HOUR',
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_group_with_ebs_config(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS
-                              },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_volume_type(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG)
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLTYPE_ARG
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'VolumeType')
 
     def test_instance_groups_with_ebs_config_missing_size(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG)
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_SIZE_ARG
+        )
         stderr = self.run_cmd(cmd, 252)[1]
         self.assert_error_message_has_field_name(stderr, 'SizeInGB')
 
     def test_instance_groups_with_ebs_config_missing_volume_spec(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC
-                              },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_VOLSPEC,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_missing_iops(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS
-                              },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_MISSING_IOPS,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_groups_with_ebs_config_multiple_instance_groups(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-groups ' +
-               CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceGroups': CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES
-                              },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-groups '
+            + CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES_VOLUME_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceGroups': CONSTANTS.MULTIPLE_INSTANCE_GROUPS_WITH_EBS_VOLUMES,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_on_demand_master_only(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_ON_DEMAND_MASTER_ONLY,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_only_with_ebs_conf(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY_WITH_EBS_CONF,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_specific_azs(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
-                              'Placement': {'AvailabilityZones': ['us-east-1a','us-east-1b']}
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
+                'Placement': {
+                    'AvailabilityZones': ['us-east-1a', 'us-east-1b']
+                },
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_master_subnet_ids(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes SubnetIds=[subnetid-1,subnetid-2]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
-                              'Ec2SubnetIds': ['subnetid-1','subnetid-2']
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes SubnetIds=[subnetid-1,subnetid-2]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY,
+                'Ec2SubnetIds': ['subnetid-1', 'subnetid-2'],
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_fleets_with_spot_master_core_cluster_multiple_instance_types(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+    def test_instance_fleets_with_spot_master_core_cluster_multiple_instance_types(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_MASTER_CORE_CLUSTER,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_complex_config_from_json(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_instance_fleets.json')
-        cmd = ('emr create-cluster --use-default-roles --release-label emr-4.2.0  '
-                '--instance-fleets file://' + data_path)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'JobFlowRole': 'EMR_EC2_DefaultRole',
-                'ServiceRole': 'EMR_DefaultRole'
-            }
+            os.path.dirname(__file__), 'input_instance_fleets.json'
+        )
+        cmd = (
+            'emr create-cluster --use-default-roles --release-label emr-4.2.0  '
+            '--instance-fleets file://' + data_path
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_COMPLEX_CONFIG_FROM_JSON,
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'JobFlowRole': 'EMR_EC2_DefaultRole',
+            'ServiceRole': 'EMR_DefaultRole',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_both_fleet_group_specified(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --instance-groups ' + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG)
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --instance-groups '
+            + CONSTANTS.INSTANCE_GROUPS_WITH_EBS_VOLUME_ARG
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both --instance-groups'
-            ' and --instance-fleets options together.\n')
+            ' and --instance-fleets options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_instance_fleets_with_both_subnetid_subnetids_specified(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY +
-               ' --ec2-attributes SubnetId=subnetid-1,SubnetIds=[subnetid-1,subnetid-2]')
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_MASTER_ONLY
+            + ' --ec2-attributes SubnetId=subnetid-1,SubnetIds=[subnetid-1,subnetid-2]'
+        )
         expected_error_msg = (
             '\naws: error: You cannot specify both SubnetId'
-            ' and SubnetIds options together.\n')
+            ' and SubnetIds options together.\n'
+        )
         result = self.run_cmd(cmd, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_create_cluster_with_security_config(self):
-        cmd = (self.prefix + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '+
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.7.2',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '
+            + '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.7.2',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_security_config_and_kerberos_attributes(self):
-        cmd = (self.prefix + '--release-label emr-4.7.2 --security-configuration MySecurityConfig' +
-               ' --kerberos-attributes ' + DEFAULT_KERBEROS_ATTRIBUTES_ARGS +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'KerberosAttributes': KERBEROS_ATTRIBUTES,
-                'ReleaseLabel': 'emr-4.7.2',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.7.2 --security-configuration MySecurityConfig'
+            + ' --kerberos-attributes '
+            + DEFAULT_KERBEROS_ATTRIBUTES_ARGS
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'KerberosAttributes': KERBEROS_ATTRIBUTES,
+            'ReleaseLabel': 'emr-4.7.2',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_custom_ami_id(self):
-        cmd = (self.prefix + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '+
-               ' --custom-ami-id ami-9be6f38c' +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.7.2',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'CustomAmiId': 'ami-9be6f38c',
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '
+            + ' --custom-ami-id ami-9be6f38c'
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.7.2',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'CustomAmiId': 'ami-9be6f38c',
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_ebs_root_volume_size(self):
-        cmd = (self.prefix + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '+
-               ' --ebs-root-volume-size 50' +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.7.2',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'EbsRootVolumeSize': 50,
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '
+            + ' --ebs-root-volume-size 50'
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.7.2',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'EbsRootVolumeSize': 50,
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_ebs_root_volume_iops(self):
-        cmd = (self.prefix + '--release-label emr-6.15.0 --security-configuration MySecurityConfig '+
-               ' --ebs-root-volume-iops 3000' +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-6.15.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'EbsRootVolumeIops': 3000,
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-6.15.0 --security-configuration MySecurityConfig '
+            + ' --ebs-root-volume-iops 3000'
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-6.15.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'EbsRootVolumeIops': 3000,
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_ebs_root_volume_throughput(self):
-        cmd = (self.prefix + '--release-label emr-6.15.0 --security-configuration MySecurityConfig '+
-               ' --ebs-root-volume-throughput 125' +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-             {
-                 'Name': DEFAULT_CLUSTER_NAME,
-                 'Instances': DEFAULT_INSTANCES,
-                 'ReleaseLabel': 'emr-6.15.0',
-                 'VisibleToAllUsers': True,
-                 'Tags': [],
-                 'EbsRootVolumeThroughput': 125,
-                 'SecurityConfiguration': 'MySecurityConfig'
-             }
+        cmd = (
+            self.prefix
+            + '--release-label emr-6.15.0 --security-configuration MySecurityConfig '
+            + ' --ebs-root-volume-throughput 125'
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-6.15.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'EbsRootVolumeThroughput': 125,
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_repo_upgrade_on_boot(self):
-        cmd = (self.prefix + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '+
-               ' --repo-upgrade-on-boot NONE' +
-               ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-4.7.2',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'RepoUpgradeOnBoot': 'NONE',
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.7.2 --security-configuration MySecurityConfig '
+            + ' --repo-upgrade-on-boot NONE'
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-4.7.2',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'RepoUpgradeOnBoot': 'NONE',
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_step_concurrency_level(self):
-        cmd = (self.prefix + '--release-label emr-5.28.0 --security-configuration MySecurityConfig ' +
-               '--step-concurrency-level 30 ' +
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-5.28.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'StepConcurrencyLevel': 30,
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.28.0 --security-configuration MySecurityConfig '
+            + '--step-concurrency-level 30 '
+            + '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-5.28.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'StepConcurrencyLevel': 30,
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_managed_scaling_policy(self):
-        cmd = (self.prefix + '--release-label emr-5.28.0 --security-configuration MySecurityConfig ' +
-               '--managed-scaling-policy ComputeLimits={MinimumCapacityUnits=2,MaximumCapacityUnits=4,UnitType=Instances,MaximumCoreCapacityUnits=1} ' +
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-5.28.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'ManagedScalingPolicy': {
-                   'ComputeLimits': {
-                       'MinimumCapacityUnits': 2,
-                       'MaximumCapacityUnits': 4,
-                       'UnitType': 'Instances',
-                       'MaximumCoreCapacityUnits': 1
-                   }
-                },
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.28.0 --security-configuration MySecurityConfig '
+            + '--managed-scaling-policy ComputeLimits={MinimumCapacityUnits=2,MaximumCapacityUnits=4,UnitType=Instances,MaximumCoreCapacityUnits=1} '
+            + '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-5.28.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'ManagedScalingPolicy': {
+                'ComputeLimits': {
+                    'MinimumCapacityUnits': 2,
+                    'MaximumCapacityUnits': 4,
+                    'UnitType': 'Instances',
+                    'MaximumCoreCapacityUnits': 1,
+                }
+            },
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_managed_scaling_policy_customer_knobs(self):
-        cmd = (self.prefix + '--release-label emr-5.28.0 --security-configuration MySecurityConfig ' +
-               '--managed-scaling-policy ComputeLimits={MinimumCapacityUnits=2,MaximumCapacityUnits=4,' +
-               'UnitType=Instances,MaximumCoreCapacityUnits=1},ScalingStrategy=ADVANCED,' +
-               'UtilizationPerformanceIndex=1 --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-5.28.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'ManagedScalingPolicy': {
-                   'ComputeLimits': {
-                       'MinimumCapacityUnits': 2,
-                       'MaximumCapacityUnits': 4,
-                       'UnitType': 'Instances',
-                       'MaximumCoreCapacityUnits': 1
-                   },
-                   'ScalingStrategy': 'ADVANCED',
-                   'UtilizationPerformanceIndex': 1,
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.28.0 --security-configuration MySecurityConfig '
+            + '--managed-scaling-policy ComputeLimits={MinimumCapacityUnits=2,MaximumCapacityUnits=4,'
+            + 'UnitType=Instances,MaximumCoreCapacityUnits=1},ScalingStrategy=ADVANCED,'
+            + 'UtilizationPerformanceIndex=1 --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-5.28.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'ManagedScalingPolicy': {
+                'ComputeLimits': {
+                    'MinimumCapacityUnits': 2,
+                    'MaximumCapacityUnits': 4,
+                    'UnitType': 'Instances',
+                    'MaximumCoreCapacityUnits': 1,
                 },
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+                'ScalingStrategy': 'ADVANCED',
+                'UtilizationPerformanceIndex': 1,
+            },
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_auto_termination_policy(self):
-        cmd = (self.prefix + '--release-label emr-5.34.0 ' +
-               '--auto-termination-policy IdleTimeout=100 ' +
-               '--instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': DEFAULT_INSTANCES,
-                'ReleaseLabel': 'emr-5.34.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'AutoTerminationPolicy': {
-                    'IdleTimeout': 100,
-                }
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.34.0 '
+            + '--auto-termination-policy IdleTimeout=100 '
+            + '--instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-5.34.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'AutoTerminationPolicy': {
+                'IdleTimeout': 100,
+            },
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_log_encryption_kms_key_id(self):
         test_log_uri = 's3://test/logs'
         test_log_encryption_kms_key_id = 'valid_kms_key'
-        cmd = (self.prefix + '--release-label emr-5.30.0 ' + '--log-uri '
-                + test_log_uri + ' --log-encryption-kms-key-id '
-                + test_log_encryption_kms_key_id
-                + ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-             {
-                  'Name': DEFAULT_CLUSTER_NAME,
-                  'Instances': DEFAULT_INSTANCES,
-                  'ReleaseLabel': 'emr-5.30.0',
-                  'VisibleToAllUsers': True,
-                  'Tags': [],
-                  'LogUri': test_log_uri,
-                  'LogEncryptionKmsKeyId': test_log_encryption_kms_key_id
-             }
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.30.0 '
+            + '--log-uri '
+            + test_log_uri
+            + ' --log-encryption-kms-key-id '
+            + test_log_encryption_kms_key_id
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-5.30.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'LogUri': test_log_uri,
+            'LogEncryptionKmsKeyId': test_log_encryption_kms_key_id,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_placement_groups(self):
-        cmd = (self.prefix + '--release-label emr-5.28.0 --security-configuration ' +
-               'MySecurityConfig --placement-group-configs ' +
-               'InstanceRole=MASTER,PlacementStrategy=SPREAD ' +
-               '--instance-groups ' + HA_INSTANCE_GROUPS_ARG)
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': HA_INSTANCES,
-                'ReleaseLabel': 'emr-5.28.0',
-                'VisibleToAllUsers': True,
-                'Tags': [],
-                'PlacementGroupConfigs': [{
-                    'InstanceRole': 'MASTER',
-                    'PlacementStrategy': 'SPREAD'
-                }],
-                'SecurityConfiguration': 'MySecurityConfig'
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-5.28.0 --security-configuration '
+            + 'MySecurityConfig --placement-group-configs '
+            + 'InstanceRole=MASTER,PlacementStrategy=SPREAD '
+            + '--instance-groups '
+            + HA_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': HA_INSTANCES,
+            'ReleaseLabel': 'emr-5.28.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'PlacementGroupConfigs': [
+                {'InstanceRole': 'MASTER', 'PlacementStrategy': 'SPREAD'}
+            ],
+            'SecurityConfiguration': 'MySecurityConfig',
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_resize_allocation_strategy_spot_od(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD +
-               ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]')
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD
+            + ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
         instance_fleets = CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_RESIZE_ALLOCATION_STRATEGY_SPOT_AND_OD
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                instance_fleets,
-                              'Placement': {'AvailabilityZones': ['us-east-1a','us-east-1b']}
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': instance_fleets,
+                'Placement': {
+                    'AvailabilityZones': ['us-east-1a', 'us-east-1b']
+                },
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_create_cluster_with_os_release_label(self):
         test_os_release_label = '2.0.20220406.1'
-        cmd = (self.prefix + '--release-label emr-6.6.0'
-                + ' --os-release-label ' + test_os_release_label
-                + ' --instance-groups ' + DEFAULT_INSTANCE_GROUPS_ARG)
-        result = \
-             {
-                  'Name': DEFAULT_CLUSTER_NAME,
-                  'Instances': DEFAULT_INSTANCES,
-                  'ReleaseLabel': 'emr-6.6.0',
-                  'VisibleToAllUsers': True,
-                  'Tags': [],
-                  'OSReleaseLabel': test_os_release_label
-             }
+        cmd = (
+            self.prefix
+            + '--release-label emr-6.6.0'
+            + ' --os-release-label '
+            + test_os_release_label
+            + ' --instance-groups '
+            + DEFAULT_INSTANCE_GROUPS_ARG
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': DEFAULT_INSTANCES,
+            'ReleaseLabel': 'emr-6.6.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+            'OSReleaseLabel': test_os_release_label,
+        }
         self.assert_params_for_cmd(cmd, result)
 
     def test_instance_fleets_with_spot_allocation_strategy(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY +
-               ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY,
-                              'Placement': {'AvailabilityZones': ['us-east-1a','us-east-1b']}
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY
+            + ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_SPOT_ALLOCATION_STRATEGY,
+                'Placement': {
+                    'AvailabilityZones': ['us-east-1a', 'us-east-1b']
+                },
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
-    def test_instance_fleets_with_prioritized_allocation_strategy_spot_ondemand(self):
-        cmd = (self.prefix + '--release-label emr-4.2.0 --instance-fleets ' +
-               CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD +
-               ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]')
-        result = \
-            {
-                'Name': DEFAULT_CLUSTER_NAME,
-                'Instances': {'KeepJobFlowAliveWhenNoSteps': True,
-                              'TerminationProtected': False,
-                              'InstanceFleets':
-                                CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD,
-                              'Placement': {'AvailabilityZones': ['us-east-1a','us-east-1b']}
-                            },
-                'ReleaseLabel': 'emr-4.2.0',
-                'VisibleToAllUsers': True,
-                'Tags': []
-            }
+    def test_instance_fleets_with_prioritized_allocation_strategy_spot_ondemand(
+        self,
+    ):
+        cmd = (
+            self.prefix
+            + '--release-label emr-4.2.0 --instance-fleets '
+            + CONSTANTS_FLEET.INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD
+            + ' --ec2-attributes AvailabilityZones=[us-east-1a,us-east-1b]'
+        )
+        result = {
+            'Name': DEFAULT_CLUSTER_NAME,
+            'Instances': {
+                'KeepJobFlowAliveWhenNoSteps': True,
+                'TerminationProtected': False,
+                'InstanceFleets': CONSTANTS_FLEET.RES_INSTANCE_FLEETS_WITH_PRIORITIZED_ALLOCATION_STRATEGY_SPOT_AND_OD,
+                'Placement': {
+                    'AvailabilityZones': ['us-east-1a', 'us-east-1b']
+                },
+            },
+            'ReleaseLabel': 'emr-4.2.0',
+            'VisibleToAllUsers': True,
+            'Tags': [],
+        }
         self.assert_params_for_cmd(cmd, result)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_create_default_role.py 2.31.35-1/tests/unit/customizations/emr/test_create_default_role.py
--- 2.23.6-1/tests/unit/customizations/emr/test_create_default_role.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_create_default_role.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.compat import json
 from botocore.awsrequest import AWSResponse
+from botocore.compat import json
 from botocore.exceptions import ClientError
 
-import awscli.customizations.emr.emrutils as emrutils
 import awscli.customizations.emr.createdefaultroles as createdefaultroles
+import awscli.customizations.emr.emrutils as emrutils
 from awscli.testutils import mock, unittest
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 EC2_ROLE_NAME = "EMR_EC2_DefaultRole"
 EMR_ROLE_NAME = "EMR_DefaultRole"
@@ -37,16 +37,16 @@ EC2_ROLE_POLICY = {
                 "s3:*",
                 "sdb:*",
                 "sns:*",
-                "sqs:*"
+                "sqs:*",
             ],
             "Effect": "Allow",
-            "Resource": ["*"]
+            "Resource": ["*"],
         }
     ]
 }
 
 CREATE_EC2_ROLE_RESULT = {
-    "Role":  {
+    "Role": {
         "AssumeRolePolicyDocument": {
             "Version": "2008-10-17",
             "Statement": [
@@ -54,53 +54,59 @@ CREATE_EC2_ROLE_RESULT = {
                     "Action": "sts:AssumeRole",
                     "Sid": "",
                     "Effect": "Allow",
-                    "Principal": {
-                        "Service": "ec2.amazonaws.com"
-                    }
+                    "Principal": {"Service": "ec2.amazonaws.com"},
                 }
-            ]
+            ],
         },
         "RoleId": "AROAJG7O4RNNSRINMF6DI",
         "CreateDate": "2014-05-01T23:47:14.552Z",
         "RoleName": EC2_ROLE_NAME,
         "Path": "/",
-        "Arn": "arn:aws:iam::176430881729:role/"+EC2_ROLE_NAME
+        "Arn": "arn:aws:iam::176430881729:role/" + EC2_ROLE_NAME,
     }
 }
 
 CONSTRUCTED_RESULT_OUTPUT = [
-    {
-        "Role": CREATE_EC2_ROLE_RESULT['Role'],
-        "RolePolicy": EC2_ROLE_POLICY
-    }
+    {"Role": CREATE_EC2_ROLE_RESULT['Role'], "RolePolicy": EC2_ROLE_POLICY}
 ]
 
 http_response = AWSResponse(None, 200, {}, None)
 
-CN_EC2_ROLE_ARN = ('arn:aws-cn:iam::aws:policy/service-role/'
-                   'AmazonElasticMapReduceforEC2Role')
-US_GOV_EC2_ROLE_ARN = ('arn:aws-us-gov:iam::aws:policy/service-role/'
-                       'AmazonElasticMapReduceforEC2Role')
-
-EC2_ROLE_ARN = ('arn:aws:iam::aws:policy/service-role/'
-                'AmazonElasticMapReduceforEC2Role')
-
-CN_EMR_ROLE_ARN = ('arn:aws-cn:iam::aws:policy/service-role/'
-                   'AmazonElasticMapReduceRole')
-
-US_GOV_EMR_ROLE_ARN = ('arn:aws-us-gov:iam::aws:policy/'
-                       'service-role/AmazonElasticMapReduceRole')
-
-EMR_ROLE_ARN = ('arn:aws:iam::aws:policy/service-role/'
-                'AmazonElasticMapReduceRole')
+CN_EC2_ROLE_ARN = (
+    'arn:aws-cn:iam::aws:policy/service-role/'
+    'AmazonElasticMapReduceforEC2Role'
+)
+US_GOV_EC2_ROLE_ARN = (
+    'arn:aws-us-gov:iam::aws:policy/service-role/'
+    'AmazonElasticMapReduceforEC2Role'
+)
+
+EC2_ROLE_ARN = (
+    'arn:aws:iam::aws:policy/service-role/' 'AmazonElasticMapReduceforEC2Role'
+)
+
+CN_EMR_ROLE_ARN = (
+    'arn:aws-cn:iam::aws:policy/service-role/' 'AmazonElasticMapReduceRole'
+)
+
+US_GOV_EMR_ROLE_ARN = (
+    'arn:aws-us-gov:iam::aws:policy/' 'service-role/AmazonElasticMapReduceRole'
+)
+
+EMR_ROLE_ARN = (
+    'arn:aws:iam::aws:policy/service-role/' 'AmazonElasticMapReduceRole'
+)
 
 CN_EMR_AUTOSCALING_ROLE_ARN = 'arn:aws-cn:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole'
 
-US_GOV_EMR_AUTOSCALING_ROLE_ARN = 'arn:aws-us-gov:iam::aws:policy/service-role/' \
-                                  'AmazonElasticMapReduceforAutoScalingRole'
+US_GOV_EMR_AUTOSCALING_ROLE_ARN = (
+    'arn:aws-us-gov:iam::aws:policy/service-role/'
+    'AmazonElasticMapReduceforAutoScalingRole'
+)
 
 EMR_AUTOSCALING_ROLE_ARN = 'arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforAutoScalingRole'
 
+
 class TestCreateDefaultRole(BaseAWSCommandParamsTest):
     prefix = 'emr create-default-roles'
 
@@ -111,9 +117,9 @@ class TestCreateDefaultRole(BaseAWSComma
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {"Service": "ec2.amazonaws.com"},
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
     emr_role_policy_document = {
@@ -123,9 +129,9 @@ class TestCreateDefaultRole(BaseAWSComma
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {"Service": "elasticmapreduce.amazonaws.com.cn"},
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
     emr_autoscaling_role_policy_document_cn = {
@@ -137,12 +143,12 @@ class TestCreateDefaultRole(BaseAWSComma
                 "Principal": {
                     "Service": [
                         "elasticmapreduce.amazonaws.com.cn",
-                        "application-autoscaling.amazonaws.com.cn"
+                        "application-autoscaling.amazonaws.com.cn",
                     ]
                 },
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
     emr_autoscaling_role_policy_document = {
@@ -154,12 +160,12 @@ class TestCreateDefaultRole(BaseAWSComma
                 "Principal": {
                     "Service": [
                         "elasticmapreduce.amazonaws.com",
-                        "application-autoscaling.amazonaws.com"
+                        "application-autoscaling.amazonaws.com",
                     ]
                 },
-                "Action": "sts:AssumeRole"
+                "Action": "sts:AssumeRole",
             }
-        ]
+        ],
     }
 
     def test_default_roles_exist(self):
@@ -169,33 +175,47 @@ class TestCreateDefaultRole(BaseAWSComma
         self.assertEqual(len(self.operations_called), 4)
 
         self.assertEqual(self.operations_called[0][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         EC2_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'], EC2_ROLE_NAME
+        )
 
-        self.assertEqual(self.operations_called[1][0].name,
-                         'GetInstanceProfile')
-        self.assertEqual(self.operations_called[1][1]['InstanceProfileName'],
-                         EC2_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[1][0].name, 'GetInstanceProfile'
+        )
+        self.assertEqual(
+            self.operations_called[1][1]['InstanceProfileName'], EC2_ROLE_NAME
+        )
         self.assertEqual(self.operations_called[2][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[2][1]['RoleName'],
-                         EMR_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[2][1]['RoleName'], EMR_ROLE_NAME
+        )
 
         self.assertEqual(self.operations_called[3][0].name, 'GetRole')
-        self.assertEqual(self.operations_called[3][1]['RoleName'],
-                         EMR_AUTOSCALING_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[3][1]['RoleName'], EMR_AUTOSCALING_ROLE_NAME
+        )
 
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._construct_result')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_role_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._get_role_policy')
-    def test_default_autoscaling_role_commercial(self, get_rp_patch,
-                                                 role_exists_patch,
-                                                 instance_profile_exists_patch,
-                                                 construct_result_patch):
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._construct_result'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_role_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._get_role_policy'
+    )
+    def test_default_autoscaling_role_commercial(
+        self,
+        get_rp_patch,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        construct_result_patch,
+    ):
         get_rp_patch.return_value = False
         role_exists_patch.return_value = False
         instance_profile_exists_patch.return_value = False
@@ -210,20 +230,30 @@ class TestCreateDefaultRole(BaseAWSComma
         self.assertEqual(len(self.operations_called), 8)
         self.assertEqual(
             self.operations_called[6][1]['AssumeRolePolicyDocument'],
-            emrutils.dict_to_string(self.emr_autoscaling_role_policy_document))
+            emrutils.dict_to_string(self.emr_autoscaling_role_policy_document),
+        )
 
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._construct_result')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_role_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._get_role_policy')
-    def test_default_roles_not_exist(self, get_rp_patch,
-                                     role_exists_patch,
-                                     instance_profile_exists_patch,
-                                     construct_result_patch):
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._construct_result'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_role_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._get_role_policy'
+    )
+    def test_default_roles_not_exist(
+        self,
+        get_rp_patch,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        construct_result_patch,
+    ):
         get_rp_patch.return_value = False
         role_exists_patch.return_value = False
         instance_profile_exists_patch.return_value = False
@@ -238,72 +268,101 @@ class TestCreateDefaultRole(BaseAWSComma
         self.assertEqual(len(self.operations_called), 8)
 
         self.assertEqual(self.operations_called[0][0].name, 'CreateRole')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         EC2_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'], EC2_ROLE_NAME
+        )
         self.assertEqual(
             self.operations_called[0][1]['AssumeRolePolicyDocument'],
-            emrutils.dict_to_string(self.ec2_role_policy_document))
+            emrutils.dict_to_string(self.ec2_role_policy_document),
+        )
+
+        self.assertEqual(self.operations_called[1][0].name, 'AttachRolePolicy')
+        self.assertEqual(
+            self.operations_called[1][1]['PolicyArn'], CN_EC2_ROLE_ARN
+        )
+        self.assertEqual(
+            self.operations_called[1][1]['RoleName'], EC2_ROLE_NAME
+        )
 
-        self.assertEqual(self.operations_called[1][0].name,
-                         'AttachRolePolicy')
-        self.assertEqual(self.operations_called[1][1]['PolicyArn'],
-                         CN_EC2_ROLE_ARN)
-        self.assertEqual(self.operations_called[1][1]['RoleName'],
-                         EC2_ROLE_NAME)
-
-        self.assertEqual(self.operations_called[2][0].name,
-                         'CreateInstanceProfile')
-        self.assertEqual(self.operations_called[2][1]['InstanceProfileName'],
-                         EC2_ROLE_NAME)
-
-        self.assertEqual(self.operations_called[3][0].name,
-                         'AddRoleToInstanceProfile')
-        self.assertEqual(self.operations_called[3][1]['InstanceProfileName'],
-                         EC2_ROLE_NAME)
-        self.assertEqual(self.operations_called[3][1]['RoleName'],
-                         EC2_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[2][0].name, 'CreateInstanceProfile'
+        )
+        self.assertEqual(
+            self.operations_called[2][1]['InstanceProfileName'], EC2_ROLE_NAME
+        )
+
+        self.assertEqual(
+            self.operations_called[3][0].name, 'AddRoleToInstanceProfile'
+        )
+        self.assertEqual(
+            self.operations_called[3][1]['InstanceProfileName'], EC2_ROLE_NAME
+        )
+        self.assertEqual(
+            self.operations_called[3][1]['RoleName'], EC2_ROLE_NAME
+        )
 
         self.assertEqual(self.operations_called[4][0].name, 'CreateRole')
-        self.assertEqual(self.operations_called[4][1]['RoleName'],
-                         EMR_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[4][1]['RoleName'], EMR_ROLE_NAME
+        )
         self.assertEqual(
             self.operations_called[4][1]['AssumeRolePolicyDocument'],
-            emrutils.dict_to_string(self.emr_role_policy_document))
+            emrutils.dict_to_string(self.emr_role_policy_document),
+        )
 
         self.assertEqual(self.operations_called[5][0].name, 'AttachRolePolicy')
-        self.assertEqual(self.operations_called[5][1]['PolicyArn'],
-                         CN_EMR_ROLE_ARN)
-        self.assertEqual(self.operations_called[5][1]['RoleName'],
-                         EMR_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[5][1]['PolicyArn'], CN_EMR_ROLE_ARN
+        )
+        self.assertEqual(
+            self.operations_called[5][1]['RoleName'], EMR_ROLE_NAME
+        )
 
         self.assertEqual(self.operations_called[6][0].name, 'CreateRole')
-        self.assertEqual(self.operations_called[6][1]['RoleName'],
-                         EMR_AUTOSCALING_ROLE_NAME)
+        self.assertEqual(
+            self.operations_called[6][1]['RoleName'], EMR_AUTOSCALING_ROLE_NAME
+        )
         self.assertEqual(
             self.operations_called[6][1]['AssumeRolePolicyDocument'],
-            emrutils.dict_to_string(self.emr_autoscaling_role_policy_document_cn))
+            emrutils.dict_to_string(
+                self.emr_autoscaling_role_policy_document_cn
+            ),
+        )
 
         self.assertEqual(self.operations_called[7][0].name, 'AttachRolePolicy')
-        self.assertEqual(self.operations_called[7][1]['PolicyArn'],
-                         CN_EMR_AUTOSCALING_ROLE_ARN)
-        self.assertEqual(self.operations_called[7][1]['RoleName'],
-                         EMR_AUTOSCALING_ROLE_NAME)
-
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._construct_result')
-    @mock.patch('awscli.customizations.emr.createdefaultroles'
-                '.get_service_principal')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_role_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._get_role_policy')
-    def test_get_service_principal_parameters(self, get_rp_patch,
-                                              role_exists_patch,
-                                              instance_profile_exists_patch,
-                                              get_sp_patch,
-                                              construct_result_patch):
+        self.assertEqual(
+            self.operations_called[7][1]['PolicyArn'],
+            CN_EMR_AUTOSCALING_ROLE_ARN,
+        )
+        self.assertEqual(
+            self.operations_called[7][1]['RoleName'], EMR_AUTOSCALING_ROLE_NAME
+        )
+
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._construct_result'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.createdefaultroles' '.get_service_principal'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_role_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._get_role_policy'
+    )
+    def test_get_service_principal_parameters(
+        self,
+        get_rp_patch,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        get_sp_patch,
+        construct_result_patch,
+    ):
         get_rp_patch.return_value = "blah"
         get_sp_patch.return_value = 'elasticmapreduce.amazonaws.abc'
         role_exists_patch.return_value = False
@@ -334,21 +393,30 @@ class TestCreateDefaultRole(BaseAWSComma
         endpoint_arg = 'https://elasticmapreduce.us-unknown-1.amazonaws.com'
         cmdline = self.prefix + ' --iam-endpoint ' + endpoint_arg
         self.run_cmd(cmdline, expected_rc=0)
-        self.assertEqual(call_patch.call_args[1]['endpoint_url'],
-                          endpoint_arg)
+        self.assertEqual(call_patch.call_args[1]['endpoint_url'], endpoint_arg)
 
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._get_role_policy')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles._create_role_with_role_policy')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_instance_profile_exists')
-    @mock.patch('awscli.customizations.emr.emr.'
-                'CreateDefaultRoles.check_if_role_exists')
-    def test_constructed_result(self, role_exists_patch,
-                                instance_profile_exists_patch,
-                                create_role_patch,
-                                get_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emr.emr.' 'CreateDefaultRoles._get_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles._create_role_with_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_instance_profile_exists'
+    )
+    @mock.patch(
+        'awscli.customizations.emr.emr.'
+        'CreateDefaultRoles.check_if_role_exists'
+    )
+    def test_constructed_result(
+        self,
+        role_exists_patch,
+        instance_profile_exists_patch,
+        create_role_patch,
+        get_role_policy_patch,
+    ):
         role_exists_patch.side_effect = side_effect_ofcheck_if_role_exists
         instance_profile_exists_patch.return_value = False
         create_role_patch.return_value = CREATE_EC2_ROLE_RESULT
@@ -356,43 +424,72 @@ class TestCreateDefaultRole(BaseAWSComma
 
         cmdline = self.prefix + ' --region cn-north-1'
         result = self.run_cmd(cmdline, 0)
-        expected_output = json.dumps(CONSTRUCTED_RESULT_OUTPUT, indent=4) +\
-            '\n'
+        expected_output = (
+            json.dumps(CONSTRUCTED_RESULT_OUTPUT, indent=4) + '\n'
+        )
         self.assertEqual(result[0], expected_output)
 
     def test_policy_arn_construction(self):
         self.assertEqual(
-            createdefaultroles.get_role_policy_arn("cn-north-1", createdefaultroles.EC2_ROLE_POLICY_NAME),
-            CN_EC2_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("us-gov-west-1", createdefaultroles.EC2_ROLE_POLICY_NAME),
-            US_GOV_EC2_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("eu-west-1", createdefaultroles.EC2_ROLE_POLICY_NAME),
-            EC2_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("cn-north-1", createdefaultroles.EMR_ROLE_POLICY_NAME),
-            CN_EMR_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("us-gov-west-1", createdefaultroles.EMR_ROLE_POLICY_NAME),
-            US_GOV_EMR_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("eu-west-1", createdefaultroles.EMR_ROLE_POLICY_NAME),
-            EMR_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("cn-north-1", createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME),
-            CN_EMR_AUTOSCALING_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("us-gov-west-1",
-                                                   createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME),
-            US_GOV_EMR_AUTOSCALING_ROLE_ARN)
-        self.assertEqual(
-            createdefaultroles.get_role_policy_arn("eu-west-1", createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME),
-            EMR_AUTOSCALING_ROLE_ARN)
+            createdefaultroles.get_role_policy_arn(
+                "cn-north-1", createdefaultroles.EC2_ROLE_POLICY_NAME
+            ),
+            CN_EC2_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "us-gov-west-1", createdefaultroles.EC2_ROLE_POLICY_NAME
+            ),
+            US_GOV_EC2_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "eu-west-1", createdefaultroles.EC2_ROLE_POLICY_NAME
+            ),
+            EC2_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "cn-north-1", createdefaultroles.EMR_ROLE_POLICY_NAME
+            ),
+            CN_EMR_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "us-gov-west-1", createdefaultroles.EMR_ROLE_POLICY_NAME
+            ),
+            US_GOV_EMR_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "eu-west-1", createdefaultroles.EMR_ROLE_POLICY_NAME
+            ),
+            EMR_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "cn-north-1",
+                createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME,
+            ),
+            CN_EMR_AUTOSCALING_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "us-gov-west-1",
+                createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME,
+            ),
+            US_GOV_EMR_AUTOSCALING_ROLE_ARN,
+        )
+        self.assertEqual(
+            createdefaultroles.get_role_policy_arn(
+                "eu-west-1",
+                createdefaultroles.EMR_AUTOSCALING_ROLE_POLICY_NAME,
+            ),
+            EMR_AUTOSCALING_ROLE_ARN,
+        )
 
 
 class TestCreateDefaultRoles(unittest.TestCase):
-
     def setUp(self):
         self.session = mock.Mock()
         self.client = mock.Mock()
@@ -403,11 +500,7 @@ class TestCreateDefaultRoles(unittest.Te
         self.parsed_globals.verify_ssl = True
 
     def testcheck_if_role_exists_raises_client_error(self):
-        error_response = {
-            'Error': {
-                'Code': 'foo'
-            }
-        }
+        error_response = {'Error': {'Code': 'foo'}}
         error = ClientError(error_response, 'GetRole')
         self.client.get_role.side_effect = error
 
@@ -415,37 +508,33 @@ class TestCreateDefaultRoles(unittest.Te
             self.command.check_if_role_exists('role', self.parsed_globals)
 
     def test_check_role_not_found(self):
-        error_response = {
-            'Error': {
-                'Code': 'NoSuchEntity'
-            }
-        }
+        error_response = {'Error': {'Code': 'NoSuchEntity'}}
         error = ClientError(error_response, 'GetRole')
         self.client.get_role.side_effect = error
-        self.assertFalse(self.command.check_if_role_exists('role', self.parsed_globals))
+        self.assertFalse(
+            self.command.check_if_role_exists('role', self.parsed_globals)
+        )
 
     def test_check_instance_profile_exists_raises_client_error(self):
-        error_response = {
-            'Error': {
-                'Code': 'foo'
-            }
-        }
+        error_response = {'Error': {'Code': 'foo'}}
         error = ClientError(error_response, 'GetInstanceProfile')
         self.client.get_instance_profile.side_effect = error
 
         with self.assertRaises(ClientError):
             self.command.check_if_instance_profile_exists(
-                'role', self.parsed_globals)
+                'role', self.parsed_globals
+            )
 
     def test_check_instance_profile_not_found(self):
-        error_response = {
-            'Error': {
-                'Code': 'NoSuchEntity'
-            }
-        }
+        error_response = {'Error': {'Code': 'NoSuchEntity'}}
         error = ClientError(error_response, 'GetInstanceProfile')
         self.client.get_instance_profile.side_effect = error
-        self.assertFalse(self.command.check_if_instance_profile_exists('role', self.parsed_globals))
+        self.assertFalse(
+            self.command.check_if_instance_profile_exists(
+                'role', self.parsed_globals
+            )
+        )
+
 
 def side_effect_ofcheck_if_role_exists(*args, **kwargs):
     if args[0] == EC2_ROLE_NAME:
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_create_hbase_backup.py 2.31.35-1/tests/unit/customizations/emr/test_create_hbase_backup.py
--- 2.23.6-1/tests/unit/customizations/emr/test_create_hbase_backup.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_create_hbase_backup.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,28 +11,31 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 from copy import deepcopy
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+
 
 class TestCreateHBaseBackup(BaseAWSCommandParamsTest):
     prefix = 'emr create-hbase-backup'
-    steps = [{
-        'HadoopJarStep': {
-            'Args': [
-                'emr.hbase.backup.Main',
-                '--backup',
-                '--backup-dir',
-                's3://abc/'
-            ],
-            'Jar': '/home/hadoop/lib/hbase.jar'
-        },
-        'Name': 'Backup HBase',
-        'ActionOnFailure': 'CANCEL_AND_WAIT'
-    }]
+    steps = [
+        {
+            'HadoopJarStep': {
+                'Args': [
+                    'emr.hbase.backup.Main',
+                    '--backup',
+                    '--backup-dir',
+                    's3://abc/',
+                ],
+                'Jar': '/home/hadoop/lib/hbase.jar',
+            },
+            'Name': 'Backup HBase',
+            'ActionOnFailure': 'CANCEL_AND_WAIT',
+        }
+    ]
 
     def test_create_hbase_backup(self):
         args = ' --cluster-id j-ABCD --dir s3://abc/'
@@ -51,18 +54,21 @@ class TestCreateHBaseBackup(BaseAWSComma
 
         self.assert_params_for_cmd(cmdline, result)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def test_unsupported_command_on_release_based_cluster_error(
-            self, grl_patch):
+        self, grl_patch
+    ):
         grl_patch.return_value = 'emr-4.0'
         args = ' --cluster-id j-ABCD --dir s3://abc/'
         cmdline = self.prefix + args
-        expected_error_msg = ("\naws: error: create-hbase-backup"
-                              " is not supported with 'emr-4.0' release.\n")
+        expected_error_msg = (
+            "\naws: error: create-hbase-backup"
+            " is not supported with 'emr-4.0' release.\n"
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(result[1], expected_error_msg)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_describe_cluster.py 2.31.35-1/tests/unit/customizations/emr/test_describe_cluster.py
--- 2.23.6-1/tests/unit/customizations/emr/test_describe_cluster.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_describe_cluster.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,9 +14,9 @@
 import json
 
 from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 describe_cluster_result_mock_ig = {
     "Cluster": {
@@ -24,37 +24,32 @@ describe_cluster_result_mock_ig = {
             "Timeline": {
                 "ReadyDateTime": 1398376089.0,
                 "EndDateTime": 1398376477.0,
-                "CreationDateTime": 1398375871.0
+                "CreationDateTime": 1398375871.0,
             },
             "State": "TERMINATED",
             "StateChangeReason": {
                 "Message": "Terminated by user request",
-                "Code": "USER_REQUEST"
-            }
+                "Code": "USER_REQUEST",
+            },
         },
         "Ec2InstanceAttributes": {
             "IamInstanceProfile": "EMR_EC2_DefaultRole",
-            "Ec2AvailabilityZone": "us-east-1b"
+            "Ec2AvailabilityZone": "us-east-1b",
         },
         "InstanceCollectionType": "INSTANCE_GROUP",
         "Name": "ABCD",
         "Tags": [],
         "TerminationProtected": "false",
         "RunningAmiVersion": "2.4.2",
-        "Applications": [
-            {
-                "Version": "1.0.3",
-                "Name": "hadoop"
-            }
-        ],
+        "Applications": [{"Version": "1.0.3", "Name": "hadoop"}],
         "VisibleToAllUsers": "true",
         "RequestedAmiVersion": "2.4.2",
         "LogUri": "s3n://abc/logs/",
         "AutoTerminate": "false",
         "Id": "j-ABCD",
-        "MasterPublicDnsName": "ec2-01-01-1-188.compute-1.amazonaws.com"
-        }
+        "MasterPublicDnsName": "ec2-01-01-1-188.compute-1.amazonaws.com",
     }
+}
 
 describe_cluster_result_mock_if = {
     "Cluster": {
@@ -62,42 +57,35 @@ describe_cluster_result_mock_if = {
             "Timeline": {
                 "ReadyDateTime": 1398376089.0,
                 "EndDateTime": 1398376477.0,
-                "CreationDateTime": 1398375871.0
+                "CreationDateTime": 1398375871.0,
             },
             "State": "TERMINATED",
             "StateChangeReason": {
                 "Message": "Terminated by user request",
-                "Code": "USER_REQUEST"
-            }
+                "Code": "USER_REQUEST",
+            },
         },
         "Ec2InstanceAttributes": {
             "IamInstanceProfile": "EMR_EC2_DefaultRole",
-            "Ec2AvailabilityZone": "us-east-1b"
+            "Ec2AvailabilityZone": "us-east-1b",
         },
         "InstanceCollectionType": "INSTANCE_FLEET",
         "Name": "ABCD",
         "Tags": [],
         "TerminationProtected": "false",
         "RunningAmiVersion": "2.4.2",
-        "Applications": [
-            {
-                "Version": "1.0.3",
-                "Name": "hadoop"
-            }
-        ],
+        "Applications": [{"Version": "1.0.3", "Name": "hadoop"}],
         "VisibleToAllUsers": "true",
         "RequestedAmiVersion": "2.4.2",
         "LogUri": "s3n://abc/logs/",
         "AutoTerminate": "false",
         "Id": "j-ABCD",
-        "MasterPublicDnsName": "ec2-01-01-1-188.compute-1.amazonaws.com"
-        }
+        "MasterPublicDnsName": "ec2-01-01-1-188.compute-1.amazonaws.com",
     }
+}
 
 list_instance_groups_result_mock = {
-    "ResponseMetadata": {
-        "RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'
-    },
+    "ResponseMetadata": {"RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'},
     "InstanceGroups": [
         {
             "RequestedInstanceCount": 1,
@@ -105,13 +93,13 @@ list_instance_groups_result_mock = {
                 "Timeline": {
                     "ReadyDateTime": 1398376083.0,
                     "EndDateTime": 1398376476.0,
-                    "CreationDateTime": 1398375871.0
+                    "CreationDateTime": 1398375871.0,
                 },
                 "State": "TERMINATED",
                 "StateChangeReason": {
                     "Message": "Job flow terminated",
-                    "Code": "CLUSTER_TERMINATED"
-                }
+                    "Code": "CLUSTER_TERMINATED",
+                },
             },
             "Name": "Master instance group",
             "InstanceGroupType": "MASTER",
@@ -119,7 +107,7 @@ list_instance_groups_result_mock = {
             "CustomAmiId": "ami-deadbeef",
             "Id": "ig-ABCD",
             "Market": "ON_DEMAND",
-            "RunningInstanceCount": 0
+            "RunningInstanceCount": 0,
         },
         {
             "RequestedInstanceCount": 2,
@@ -127,13 +115,13 @@ list_instance_groups_result_mock = {
                 "Timeline": {
                     "ReadyDateTime": 1398376089.0,
                     "EndDateTime": 1398376476.0,
-                    "CreationDateTime": 1398375871.0
+                    "CreationDateTime": 1398375871.0,
                 },
                 "State": "TERMINATED",
                 "StateChangeReason": {
                     "Message": "Job flow terminated",
-                    "Code": "CLUSTER_TERMINATED"
-                }
+                    "Code": "CLUSTER_TERMINATED",
+                },
             },
             "Name": "Core instance group",
             "InstanceGroupType": "CORE",
@@ -141,15 +129,13 @@ list_instance_groups_result_mock = {
             "CustomAmiId": "ami-deadpork",
             "Id": "ig-DEF",
             "Market": "ON_DEMAND",
-            "RunningInstanceCount": 0
-        }
-    ]
+            "RunningInstanceCount": 0,
+        },
+    ],
 }
 
 list_instance_fleets_result_mock = {
-    "ResponseMetadata": {
-        "RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'
-    },
+    "ResponseMetadata": {"RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'},
     "InstanceFleets": [
         {
             "TargetSpotCapacity": 0,
@@ -160,13 +146,13 @@ list_instance_fleets_result_mock = {
                 "Timeline": {
                     "ReadyDateTime": 1398376083.0,
                     "EndDateTime": 1398376476.0,
-                    "CreationDateTime": 1398375871.0
+                    "CreationDateTime": 1398375871.0,
                 },
                 "State": "TERMINATED",
                 "StateChangeReason": {
                     "Message": "Job flow terminated",
-                    "Code": "CLUSTER_TERMINATED"
-                }
+                    "Code": "CLUSTER_TERMINATED",
+                },
             },
             "InstanceTypeSpecifications": [
                 {
@@ -174,50 +160,56 @@ list_instance_fleets_result_mock = {
                     "BidPrice": "1",
                     "InstanceType": "m3.xlarge",
                     "CustomAmiId": "ami-deadbeef",
-                    "BidPriceAsPercentageOfOnDemandPrice": 0.0
+                    "BidPriceAsPercentageOfOnDemandPrice": 0.0,
                 }
             ],
-            "LaunchSpecifications" : {
-                "SpotSpecification": {"TimeoutDurationMinutes": 77, "TimeoutAction": "TERMINATE_CLUSTER",
-                                        "AllocationStrategy": "capacity-optimized-prioritized"},
-                "OnDemandSpecification": {"AllocationStrategy": "lowest-price"}
+            "LaunchSpecifications": {
+                "SpotSpecification": {
+                    "TimeoutDurationMinutes": 77,
+                    "TimeoutAction": "TERMINATE_CLUSTER",
+                    "AllocationStrategy": "capacity-optimized-prioritized",
+                },
+                "OnDemandSpecification": {
+                    "AllocationStrategy": "lowest-price"
+                },
             },
             "ResizeSpecifications": {
-                "OnDemandResizeSpecification": {"AllocationStrategy": "lowest-price",
+                "OnDemandResizeSpecification": {
+                    "AllocationStrategy": "lowest-price",
                     "CapacityReservationOptions": {
                         "CapacityReservationPreference": "open",
-                        "UsageStrategy": "use-capacity-reservations-first"
-                    }
+                        "UsageStrategy": "use-capacity-reservations-first",
+                    },
+                },
+                "SpotResizeSpecification": {
+                    "AllocationStrategy": "capacity-optimized"
                 },
-                "SpotResizeSpecification": {"AllocationStrategy": "capacity-optimized"}
             },
             "Name": "Master instance group",
             "InstanceFleetType": "MASTER",
             "InstanceType": "m1.large",
             "Id": "if-ABCD",
-            "Context": "testContext"
+            "Context": "testContext",
         }
-    ]
+    ],
 }
 
 list_bootstrap_actions_result_mock = {
-    "ResponseMetadata": {
-        "RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'
-    },
+    "ResponseMetadata": {"RequestId": '12ec323c-50b1-11e4-b653-afa4228d882f'},
     "BootstrapActions": [
         {
             "Args": [],
             "Name": "Install HBase",
-            "ScriptPath": "s3://elasticmapreduce/bootstrap-actions/setup-hbase"
+            "ScriptPath": "s3://elasticmapreduce/bootstrap-actions/setup-hbase",
         }
-    ]
+    ],
 }
 
 EXPECTED_RESULT_IG = {
     "Cluster": {
         "Ec2InstanceAttributes": {
             "IamInstanceProfile": "EMR_EC2_DefaultRole",
-            "Ec2AvailabilityZone": "us-east-1b"
+            "Ec2AvailabilityZone": "us-east-1b",
         },
         "InstanceCollectionType": "INSTANCE_GROUP",
         "Name": "ABCD",
@@ -231,13 +223,13 @@ EXPECTED_RESULT_IG = {
                     "Timeline": {
                         "ReadyDateTime": 1398376083.0,
                         "CreationDateTime": 1398375871.0,
-                        "EndDateTime": 1398376476.0
+                        "EndDateTime": 1398376476.0,
                     },
                     "State": "TERMINATED",
                     "StateChangeReason": {
                         "Message": "Job flow terminated",
-                        "Code": "CLUSTER_TERMINATED"
-                    }
+                        "Code": "CLUSTER_TERMINATED",
+                    },
                 },
                 "RunningInstanceCount": 0,
                 "Name": "Master instance group",
@@ -245,7 +237,7 @@ EXPECTED_RESULT_IG = {
                 "InstanceType": "m1.large",
                 "CustomAmiId": "ami-deadbeef",
                 "Market": "ON_DEMAND",
-                "Id": "ig-ABCD"
+                "Id": "ig-ABCD",
             },
             {
                 "RequestedInstanceCount": 2,
@@ -253,13 +245,13 @@ EXPECTED_RESULT_IG = {
                     "Timeline": {
                         "ReadyDateTime": 1398376089.0,
                         "CreationDateTime": 1398375871.0,
-                        "EndDateTime": 1398376476.0
+                        "EndDateTime": 1398376476.0,
                     },
                     "State": "TERMINATED",
                     "StateChangeReason": {
                         "Message": "Job flow terminated",
-                        "Code": "CLUSTER_TERMINATED"
-                    }
+                        "Code": "CLUSTER_TERMINATED",
+                    },
                 },
                 "RunningInstanceCount": 0,
                 "Name": "Core instance group",
@@ -267,8 +259,8 @@ EXPECTED_RESULT_IG = {
                 "InstanceType": "m1.large",
                 "CustomAmiId": "ami-deadpork",
                 "Market": "ON_DEMAND",
-                "Id": "ig-DEF"
-            }
+                "Id": "ig-DEF",
+            },
         ],
         "RequestedAmiVersion": "2.4.2",
         "AutoTerminate": "false",
@@ -277,31 +269,26 @@ EXPECTED_RESULT_IG = {
             "Timeline": {
                 "ReadyDateTime": 1398376089.0,
                 "CreationDateTime": 1398375871.0,
-                "EndDateTime": 1398376477.0
+                "EndDateTime": 1398376477.0,
             },
             "State": "TERMINATED",
             "StateChangeReason": {
                 "Message": "Terminated by user request",
-                "Code": "USER_REQUEST"
-            }
+                "Code": "USER_REQUEST",
+            },
         },
         "Tags": [],
-        "Applications": [
-            {
-                "Version": "1.0.3",
-                "Name": "hadoop"
-            }
-        ],
+        "Applications": [{"Version": "1.0.3", "Name": "hadoop"}],
         "VisibleToAllUsers": "true",
         "BootstrapActions": [
             {
                 "Args": [],
                 "Name": "Install HBase",
                 "ScriptPath": "s3://elasticmapreduce/bootstrap-actions/"
-                              "setup-hbase"
+                "setup-hbase",
             }
         ],
-        "Id": "j-ABCD"
+        "Id": "j-ABCD",
     }
 }
 
@@ -309,7 +296,7 @@ EXPECTED_RESULT_IF = {
     "Cluster": {
         "Ec2InstanceAttributes": {
             "IamInstanceProfile": "EMR_EC2_DefaultRole",
-            "Ec2AvailabilityZone": "us-east-1b"
+            "Ec2AvailabilityZone": "us-east-1b",
         },
         "InstanceCollectionType": "INSTANCE_FLEET",
         "Name": "ABCD",
@@ -326,13 +313,13 @@ EXPECTED_RESULT_IF = {
                     "Timeline": {
                         "ReadyDateTime": 1398376083.0,
                         "EndDateTime": 1398376476.0,
-                        "CreationDateTime": 1398375871.0
+                        "CreationDateTime": 1398375871.0,
                     },
                     "State": "TERMINATED",
                     "StateChangeReason": {
                         "Message": "Job flow terminated",
-                        "Code": "CLUSTER_TERMINATED"
-                    }
+                        "Code": "CLUSTER_TERMINATED",
+                    },
                 },
                 "InstanceTypeSpecifications": [
                     {
@@ -340,28 +327,36 @@ EXPECTED_RESULT_IF = {
                         "BidPrice": "1",
                         "InstanceType": "m3.xlarge",
                         "CustomAmiId": "ami-deadbeef",
-                        "BidPriceAsPercentageOfOnDemandPrice": 0.0
+                        "BidPriceAsPercentageOfOnDemandPrice": 0.0,
                     }
                 ],
-                "LaunchSpecifications" : {
-                    "SpotSpecification": {"TimeoutDurationMinutes": 77, "TimeoutAction": "TERMINATE_CLUSTER",
-                                          "AllocationStrategy": "capacity-optimized-prioritized"},
-                    "OnDemandSpecification": {"AllocationStrategy": "lowest-price"}
+                "LaunchSpecifications": {
+                    "SpotSpecification": {
+                        "TimeoutDurationMinutes": 77,
+                        "TimeoutAction": "TERMINATE_CLUSTER",
+                        "AllocationStrategy": "capacity-optimized-prioritized",
+                    },
+                    "OnDemandSpecification": {
+                        "AllocationStrategy": "lowest-price"
+                    },
                 },
                 "ResizeSpecifications": {
-                    "OnDemandResizeSpecification": {"AllocationStrategy": "lowest-price",
+                    "OnDemandResizeSpecification": {
+                        "AllocationStrategy": "lowest-price",
                         "CapacityReservationOptions": {
                             "CapacityReservationPreference": "open",
-                            "UsageStrategy": "use-capacity-reservations-first"
-                        }
+                            "UsageStrategy": "use-capacity-reservations-first",
+                        },
+                    },
+                    "SpotResizeSpecification": {
+                        "AllocationStrategy": "capacity-optimized"
                     },
-                    "SpotResizeSpecification": {"AllocationStrategy": "capacity-optimized"}
                 },
                 "Name": "Master instance group",
                 "InstanceFleetType": "MASTER",
                 "InstanceType": "m1.large",
                 "Id": "if-ABCD",
-                "Context": "testContext"
+                "Context": "testContext",
             }
         ],
         "RequestedAmiVersion": "2.4.2",
@@ -371,38 +366,36 @@ EXPECTED_RESULT_IF = {
             "Timeline": {
                 "ReadyDateTime": 1398376089.0,
                 "CreationDateTime": 1398375871.0,
-                "EndDateTime": 1398376477.0
+                "EndDateTime": 1398376477.0,
             },
             "State": "TERMINATED",
             "StateChangeReason": {
                 "Message": "Terminated by user request",
-                "Code": "USER_REQUEST"
-            }
+                "Code": "USER_REQUEST",
+            },
         },
         "Tags": [],
-        "Applications": [
-            {
-                "Version": "1.0.3",
-                "Name": "hadoop"
-            }
-        ],
+        "Applications": [{"Version": "1.0.3", "Name": "hadoop"}],
         "VisibleToAllUsers": "true",
         "BootstrapActions": [
             {
                 "Args": [],
                 "Name": "Install HBase",
                 "ScriptPath": "s3://elasticmapreduce/bootstrap-actions/"
-                              "setup-hbase"
+                "setup-hbase",
             }
         ],
-        "Id": "j-ABCD"
+        "Id": "j-ABCD",
     }
 }
 
+
 class TestDescribeCluster(BaseAWSCommandParamsTest):
     prefix = 'emr describe-cluster'
 
-    @mock.patch('awscli.customizations.emr.emr.DescribeCluster._construct_result')
+    @mock.patch(
+        'awscli.customizations.emr.emr.DescribeCluster._construct_result'
+    )
     def test_operations_called(self, construct_result_patch):
         construct_result_patch.return_value = dict()
 
@@ -412,19 +405,17 @@ class TestDescribeCluster(BaseAWSCommand
         self.run_cmd(cmdline, expected_rc=0)
 
         self.assertEqual(len(self.operations_called), 3)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'DescribeCluster')
-        self.assertEqual(self.operations_called[0][1]['ClusterId'],
-                         'j-ABCD')
-        self.assertEqual(self.operations_called[1][0].name,
-                         'ListInstanceGroups')
-        self.assertEqual(self.operations_called[1][1]['ClusterId'],
-                         'j-ABCD')
-
-        self.assertEqual(self.operations_called[2][0].name,
-                         'ListBootstrapActions')
-        self.assertEqual(self.operations_called[2][1]['ClusterId'],
-                         'j-ABCD')
+        self.assertEqual(self.operations_called[0][0].name, 'DescribeCluster')
+        self.assertEqual(self.operations_called[0][1]['ClusterId'], 'j-ABCD')
+        self.assertEqual(
+            self.operations_called[1][0].name, 'ListInstanceGroups'
+        )
+        self.assertEqual(self.operations_called[1][1]['ClusterId'], 'j-ABCD')
+
+        self.assertEqual(
+            self.operations_called[2][0].name, 'ListBootstrapActions'
+        )
+        self.assertEqual(self.operations_called[2][1]['ClusterId'], 'j-ABCD')
 
     @mock.patch('awscli.customizations.emr.emr.DescribeCluster._call')
     def test_constructed_result_ig(self, call_patch):
@@ -446,6 +437,7 @@ class TestDescribeCluster(BaseAWSCommand
         result_json = json.loads(result[0])
         self.assertEqual(result_json, EXPECTED_RESULT_IF)
 
+
 def side_effect_of_call_ig(*args, **kwargs):
     if args[1] == 'describe_cluster':
         return describe_cluster_result_mock_ig
@@ -456,6 +448,7 @@ def side_effect_of_call_ig(*args, **kwar
     elif args[1] == 'list_bootstrap_actions':
         return list_bootstrap_actions_result_mock
 
+
 def side_effect_of_call_if(*args, **kwargs):
     if args[1] == 'describe_cluster':
         return describe_cluster_result_mock_if
@@ -466,5 +459,6 @@ def side_effect_of_call_if(*args, **kwar
     elif args[1] == 'list_bootstrap_actions':
         return list_bootstrap_actions_result_mock
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_disable_hbase_backup.py 2.31.35-1/tests/unit/customizations/emr/test_disable_hbase_backup.py
--- 2.23.6-1/tests/unit/customizations/emr/test_disable_hbase_backup.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_disable_hbase_backup.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,29 +11,32 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 from copy import deepcopy
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+
 
 class TestDisableHBaseBackups(BaseAWSCommandParamsTest):
     prefix = 'emr disable-hbase-backups'
     DISABLE_FULL_BACKUP = '--disable-full-backups'
     DISABLE_INCR_BACKUP = '--disable-incremental-backups'
-    default_steps = [{
-        'HadoopJarStep': {
-            'Args': [
-                'emr.hbase.backup.Main',
-                '--set-scheduled-backup',
-                'false'
-            ],
-            'Jar': '/home/hadoop/lib/hbase.jar'
-        },
-        'Name': 'Modify Backup Schedule',
-        'ActionOnFailure': 'CANCEL_AND_WAIT'
-    }]
+    default_steps = [
+        {
+            'HadoopJarStep': {
+                'Args': [
+                    'emr.hbase.backup.Main',
+                    '--set-scheduled-backup',
+                    'false',
+                ],
+                'Jar': '/home/hadoop/lib/hbase.jar',
+            },
+            'Name': 'Modify Backup Schedule',
+            'ActionOnFailure': 'CANCEL_AND_WAIT',
+        }
+    ]
 
     def test_disable_hbase_backups_full(self):
         args = ' --cluster-id j-ABCD --full'
@@ -69,24 +72,28 @@ class TestDisableHBaseBackups(BaseAWSCom
     def test_disable_hbase_backups_none(self):
         args = ' --cluster-id j-ABCD'
         cmdline = self.prefix + args
-        expected_error_msg = '\nShould specify at least one of --full' +\
-                             ' and --incremental.\n'
+        expected_error_msg = (
+            '\nShould specify at least one of --full' + ' and --incremental.\n'
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(expected_error_msg, result[1])
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def test_unsupported_command_on_release_based_cluster_error(
-            self, grl_patch):
+        self, grl_patch
+    ):
         grl_patch.return_value = 'emr-4.0'
         args = ' --cluster-id j-ABCD --full'
         cmdline = self.prefix + args
-        expected_error_msg = ("\naws: error: disable-hbase-backups"
-                              " is not supported with 'emr-4.0' release.\n")
+        expected_error_msg = (
+            "\naws: error: disable-hbase-backups"
+            " is not supported with 'emr-4.0' release.\n"
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(result[1], expected_error_msg)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_emr_utils.py 2.31.35-1/tests/unit/customizations/emr/test_emr_utils.py
--- 2.23.6-1/tests/unit/customizations/emr/test_emr_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_emr_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,8 +14,7 @@
 from awscli.customizations.emr.emrutils import which
 
 
-class TestEMRutils(object):
-
+class TestEMRutils:
     def test_which_with_existing_command(self):
         pythonPath = which('python') or which('python.exe')
         assert pythonPath is not None
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_emrfs_utils.py 2.31.35-1/tests/unit/customizations/emr/test_emrfs_utils.py
--- 2.23.6-1/tests/unit/customizations/emr/test_emrfs_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_emrfs_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,100 +12,107 @@
 # language governing permissions and limitations under the License.
 
 import copy
-import os
 import json
+import os
 
-from awscli.customizations.emr.emrfsutils import CONSISTENT_OPTION_NAME
-from awscli.customizations.emr.emrfsutils import CSE_CUSTOM_OPTION_NAME
-from awscli.customizations.emr.emrfsutils import CSE_KMS_OPTION_NAME
-from awscli.customizations.emr.emrfsutils import CSE_OPTION_NAME
-
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-
+from awscli.customizations.emr.emrfsutils import (
+    CONSISTENT_OPTION_NAME,
+    CSE_CUSTOM_OPTION_NAME,
+    CSE_KMS_OPTION_NAME,
+    CSE_OPTION_NAME,
+)
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 DEFAULT_INSTANCES = {
     'KeepJobFlowAliveWhenNoSteps': True,
     'TerminationProtected': False,
-    'InstanceGroups': [{
-        'InstanceRole': 'MASTER',
-        'InstanceCount': 1,
-        'Name': 'MASTER',
-        'Market': 'ON_DEMAND',
-        'InstanceType': 'm1.large'
-    }]
+    'InstanceGroups': [
+        {
+            'InstanceRole': 'MASTER',
+            'InstanceCount': 1,
+            'Name': 'MASTER',
+            'Market': 'ON_DEMAND',
+            'InstanceType': 'm1.large',
+        }
+    ],
 }
 
-DEFAULT_CMD = ('emr create-cluster --use-default-roles'
-               ' --instance-type m1.large ')
+DEFAULT_CMD = (
+    'emr create-cluster --use-default-roles' ' --instance-type m1.large '
+)
 DEFAULT_RESULT = {
     'Name': "Development Cluster",
     'Instances': DEFAULT_INSTANCES,
     'VisibleToAllUsers': True,
     'JobFlowRole': "EMR_EC2_DefaultRole",
     'ServiceRole': "EMR_DefaultRole",
-    'Tags': []
+    'Tags': [],
 }
 
-EMPTY_EMRFS_CONFIGURATION = {
-    'Classification': 'emrfs-site',
-    'Properties': {}
-}
+EMPTY_EMRFS_CONFIGURATION = {'Classification': 'emrfs-site', 'Properties': {}}
 
 DEFAULT_CONFIGURATIONS = [
     {
         'Classification': 'hadoop-env',
         'Configurations': [],
-        'Properties': {'someProperty': 'someValue'}
+        'Properties': {'someProperty': 'someValue'},
     }
 ]
 
 
 class TestEmrfsUtils(BaseAWSCommandParamsTest):
-
     def test_consistent(self):
         emrfs_option_value = 'Consistent=true'
         expected_emrfs_properties = {'fs.s3.consistent': 'true'}
-        expected_emrfs_ba_key_values = [
-            'fs.s3.consistent=true'
-        ]
+        expected_emrfs_ba_key_values = ['fs.s3.consistent=true']
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_consistent_w_optional_args(self):
         emrfs_option_value = 'Consistent=true,RetryCount=5,RetryPeriod=30'
 
-        expected_emrfs_properties = \
-            {'fs.s3.consistent': 'true',
-             'fs.s3.consistent.retryCount': '5',
-             'fs.s3.consistent.retryPeriodSeconds': '30'}
+        expected_emrfs_properties = {
+            'fs.s3.consistent': 'true',
+            'fs.s3.consistent.retryCount': '5',
+            'fs.s3.consistent.retryPeriodSeconds': '30',
+        }
 
         expected_emrfs_ba_key_values = [
-            'fs.s3.consistent=true', 'fs.s3.consistent.retryCount=5',
-            'fs.s3.consistent.retryPeriodSeconds=30'
+            'fs.s3.consistent=true',
+            'fs.s3.consistent.retryCount=5',
+            'fs.s3.consistent.retryPeriodSeconds=30',
         ]
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_consistent_false_w_optional_args(self):
         emrfs_option_value = 'Consistent=false,RetryCount=5'
 
         expected_emrfs_properties = {
             'fs.s3.consistent': 'false',
-            'fs.s3.consistent.retryCount': '5'}
+            'fs.s3.consistent.retryCount': '5',
+        }
 
         expected_emrfs_ba_key_values = [
-            'fs.s3.consistent=false', 'fs.s3.consistent.retryCount=5'
+            'fs.s3.consistent=false',
+            'fs.s3.consistent.retryCount=5',
         ]
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_sse(self):
         emrfs_option_value = 'SSE=true'
@@ -113,159 +120,208 @@ class TestEmrfsUtils(BaseAWSCommandParam
             'fs.s3.enableServerSideEncryption=true'
         ]
         expected_emrfs_properties = {
-            'fs.s3.enableServerSideEncryption': 'true'}
+            'fs.s3.enableServerSideEncryption': 'true'
+        }
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
         emrfs_option_value = 'Encryption=ServerSide'
         expected_emrfs_ba_key_values = [
             'fs.s3.enableServerSideEncryption=true'
         ]
         expected_emrfs_properties = {
-            'fs.s3.enableServerSideEncryption': 'true'}
+            'fs.s3.enableServerSideEncryption': 'true'
+        }
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_cse_kms(self):
-        emrfs_option_value = 'Encryption=ClientSide,ProviderType=KMS,' \
-            'KMSKeyId=my_key'
+        emrfs_option_value = (
+            'Encryption=ClientSide,ProviderType=KMS,' 'KMSKeyId=my_key'
+        )
         expected_emrfs_ba_key_values = [
-            'fs.s3.cse.enabled=true', 'fs.s3.cse.encryptionMaterialsProvider='
+            'fs.s3.cse.enabled=true',
+            'fs.s3.cse.encryptionMaterialsProvider='
             'com.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider',
-            'fs.s3.cse.kms.keyId=my_key'
+            'fs.s3.cse.kms.keyId=my_key',
         ]
         expected_emrfs_properties = {
             'fs.s3.cse.enabled': 'true',
-            'fs.s3.cse.encryptionMaterialsProvider':
-            'com.amazon.ws.emr.hadoop.fs.cse.'
+            'fs.s3.cse.encryptionMaterialsProvider': 'com.amazon.ws.emr.hadoop.fs.cse.'
             'KMSEncryptionMaterialsProvider',
-            'fs.s3.cse.kms.keyId': 'my_key'}
+            'fs.s3.cse.kms.keyId': 'my_key',
+        }
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_cse_custom(self):
-        emrfs_option_value = 'Encryption=ClientSide,ProviderType=Custom,' \
+        emrfs_option_value = (
+            'Encryption=ClientSide,ProviderType=Custom,'
             'CustomProviderLocation=my_location,CustomProviderClass=my_class'
+        )
         expected_emrfs_ba_key_values = [
-            'fs.s3.cse.enabled=true', 'fs.s3.cse.encryptionMaterialsProvider='
-            'my_class'
+            'fs.s3.cse.enabled=true',
+            'fs.s3.cse.encryptionMaterialsProvider=' 'my_class',
         ]
         expected_emrfs_properties = {
             'fs.s3.cse.enabled': 'true',
             'fs.s3.cse.encryptionMaterialsProvider': 'my_class',
-            'fs.s3.cse.encryptionMaterialsProvider.uri': 'my_location'}
+            'fs.s3.cse.encryptionMaterialsProvider.uri': 'my_location',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties, 'my_location')
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+            'my_location',
+        )
 
     def test_sse_and_consistent(self):
         emrfs_option_value = 'SSE=true,Consistent=true'
         expected_emrfs_ba_key_values = [
             'fs.s3.consistent=true',
-            'fs.s3.enableServerSideEncryption=true']
+            'fs.s3.enableServerSideEncryption=true',
+        ]
         expected_emrfs_properties = {
             'fs.s3.consistent': 'true',
-            'fs.s3.enableServerSideEncryption': 'true'}
+            'fs.s3.enableServerSideEncryption': 'true',
+        }
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
         emrfs_option_value = 'Consistent=false,Encryption=serVERSIde'
         expected_emrfs_ba_key_values = [
             'fs.s3.consistent=false',
-            'fs.s3.enableServerSideEncryption=true']
+            'fs.s3.enableServerSideEncryption=true',
+        ]
         expected_emrfs_properties = {
             'fs.s3.consistent': 'false',
-            'fs.s3.enableServerSideEncryption': 'true'}
+            'fs.s3.enableServerSideEncryption': 'true',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_cse_and_consistent(self):
-        emrfs_option_value = ('Encryption=ClientSide,ProviderType=KMS,'
-                              'KMSKeyId=my_key,Consistent=true')
+        emrfs_option_value = (
+            'Encryption=ClientSide,ProviderType=KMS,'
+            'KMSKeyId=my_key,Consistent=true'
+        )
         expected_emrfs_ba_key_values = [
-            'fs.s3.consistent=true', 'fs.s3.cse.enabled=true',
+            'fs.s3.consistent=true',
+            'fs.s3.cse.enabled=true',
             'fs.s3.cse.encryptionMaterialsProvider=com.amazon.ws.emr.'
             'hadoop.fs.cse.KMSEncryptionMaterialsProvider',
-            'fs.s3.cse.kms.keyId=my_key']
+            'fs.s3.cse.kms.keyId=my_key',
+        ]
         expected_emrfs_properties = {
             'fs.s3.consistent': 'true',
             'fs.s3.cse.enabled': 'true',
             'fs.s3.cse.encryptionMaterialsProvider': 'com.amazon.ws.emr.'
             'hadoop.fs.cse.KMSEncryptionMaterialsProvider',
-            'fs.s3.cse.kms.keyId': 'my_key'}
+            'fs.s3.cse.kms.keyId': 'my_key',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_args_and_sse(self):
-        emrfs_option_value = \
+        emrfs_option_value = (
             'SSE=true,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256]'
+        )
         expected_emrfs_ba_key_values = [
             'fs.s3.enableServerSideEncryption=true',
-            'fs.s3.serverSideEncryptionAlgorithm=AES256']
+            'fs.s3.serverSideEncryptionAlgorithm=AES256',
+        ]
         expected_emrfs_properties = {
             'fs.s3.enableServerSideEncryption': 'true',
-            'fs.s3.serverSideEncryptionAlgorithm': 'AES256'}
+            'fs.s3.serverSideEncryptionAlgorithm': 'AES256',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_args_and_cse(self):
-        emrfs_option_value = ('Encryption=ClientSide,ProviderType=KMS,'
-                              'KMSKeyId=my_key,Args=[k1=v1]')
+        emrfs_option_value = (
+            'Encryption=ClientSide,ProviderType=KMS,'
+            'KMSKeyId=my_key,Args=[k1=v1]'
+        )
         expected_emrfs_ba_key_values = [
             'fs.s3.cse.enabled=true',
             'fs.s3.cse.encryptionMaterialsProvider=com.amazon.ws.emr.'
             'hadoop.fs.cse.KMSEncryptionMaterialsProvider',
-            'fs.s3.cse.kms.keyId=my_key', 'k1=v1']
+            'fs.s3.cse.kms.keyId=my_key',
+            'k1=v1',
+        ]
         expected_emrfs_properties = {
             'fs.s3.cse.enabled': 'true',
             'fs.s3.cse.encryptionMaterialsProvider': 'com.amazon.ws.emr.'
             'hadoop.fs.cse.KMSEncryptionMaterialsProvider',
             'fs.s3.cse.kms.keyId': 'my_key',
-            'k1': 'v1'}
+            'k1': 'v1',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_args_and_consistent(self):
         emrfs_option_value = 'Consistent=true,Args=[k1=v1,k2=v2]'
-        expected_emrfs_ba_key_values = ['fs.s3.consistent=true',
-                                        'k1=v1', 'k2=v2']
+        expected_emrfs_ba_key_values = [
+            'fs.s3.consistent=true',
+            'k1=v1',
+            'k2=v2',
+        ]
         expected_emrfs_properties = {
             'fs.s3.consistent': 'true',
             'k1': 'v1',
-            'k2': 'v2'}
+            'k2': 'v2',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_only_args(self):
         emrfs_option_value = 'Args=[k1=v1,k2=v2,k3]'
         expected_emrfs_ba_key_values = ['k1=v1', 'k2=v2', 'k3']
-        expected_emrfs_properties = {
-            'k1': 'v1',
-            'k2': 'v2',
-            'k3': ''}
+        expected_emrfs_properties = {'k1': 'v1', 'k2': 'v2', 'k3': ''}
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_using_json_file(self):
         data_path = os.path.join(
-            os.path.dirname(__file__), 'input_emr_fs.json')
+            os.path.dirname(__file__), 'input_emr_fs.json'
+        )
         emrfs_option_value = 'file://%s' % data_path
         expected_emrfs_ba_key_values = [
             'fs.s3.consistent=true',
@@ -273,18 +329,22 @@ class TestEmrfsUtils(BaseAWSCommandParam
             'fs.s3.consistent.retryPeriodSeconds=3',
             'fs.s3.enableServerSideEncryption=false',
             'fs.s3.serverSideEncryptionAlgorithm=AES256',
-            'fs.s3.sleepTimeSeconds=30']
+            'fs.s3.sleepTimeSeconds=30',
+        ]
         expected_emrfs_properties = {
             'fs.s3.consistent': 'true',
             'fs.s3.consistent.retryCount': '10',
             'fs.s3.consistent.retryPeriodSeconds': '3',
             'fs.s3.enableServerSideEncryption': 'false',
             'fs.s3.serverSideEncryptionAlgorithm': 'AES256',
-            'fs.s3.sleepTimeSeconds': '30'}
+            'fs.s3.sleepTimeSeconds': '30',
+        }
 
         self._assert_bootstrap_actions(
-            emrfs_option_value, expected_emrfs_ba_key_values,
-            expected_emrfs_properties)
+            emrfs_option_value,
+            expected_emrfs_ba_key_values,
+            expected_emrfs_properties,
+        )
 
     def test_only_one_encryption_type(self):
         self._assert_error_msg(
@@ -299,8 +359,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='Encryption=ClientSide',
             exception_class_name='MissingParametersError',
-            error_msg_kwargs={'object_name': CSE_OPTION_NAME,
-                              'missing': 'ProviderType'},
+            error_msg_kwargs={
+                'object_name': CSE_OPTION_NAME,
+                'missing': 'ProviderType',
+            },
             rc=252,
         )
 
@@ -308,8 +370,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='Encryption=ClientSide,ProviderType=KMS',
             exception_class_name='MissingParametersError',
-            error_msg_kwargs={'object_name': CSE_KMS_OPTION_NAME,
-                              'missing': 'KMSKeyId'},
+            error_msg_kwargs={
+                'object_name': CSE_KMS_OPTION_NAME,
+                'missing': 'KMSKeyId',
+            },
             rc=252,
         )
 
@@ -317,9 +381,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='Encryption=ClientSide,ProviderType=Custom',
             exception_class_name='MissingParametersError',
-            error_msg_kwargs={'object_name': CSE_CUSTOM_OPTION_NAME,
-                              'missing': 'CustomProviderClass and '
-                              'CustomProviderLocation'},
+            error_msg_kwargs={
+                'object_name': CSE_CUSTOM_OPTION_NAME,
+                'missing': 'CustomProviderClass and ' 'CustomProviderLocation',
+            },
             rc=252,
         )
 
@@ -328,8 +393,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
             emrfs_option_value='Encryption=ClientSide,ProviderType=Custom,'
             'CustomProviderLocation=my_location',
             exception_class_name='MissingParametersError',
-            error_msg_kwargs={'object_name': CSE_CUSTOM_OPTION_NAME,
-                              'missing': 'CustomProviderClass'},
+            error_msg_kwargs={
+                'object_name': CSE_CUSTOM_OPTION_NAME,
+                'missing': 'CustomProviderClass',
+            },
             rc=252,
         )
 
@@ -338,8 +405,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
             emrfs_option_value='Encryption=ClientSide,ProviderType=Custom,'
             'CustomProviderClass=my_class',
             exception_class_name='MissingParametersError',
-            error_msg_kwargs={'object_name': CSE_CUSTOM_OPTION_NAME,
-                              'missing': 'CustomProviderLocation'},
+            error_msg_kwargs={
+                'object_name': CSE_CUSTOM_OPTION_NAME,
+                'missing': 'CustomProviderLocation',
+            },
             rc=252,
         )
 
@@ -363,8 +432,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='SSE=true,RetryCount=5,RetryPeriod=30',
             exception_class_name='InvalidEmrFsArgumentsError',
-            error_msg_kwargs={'invalid': 'RetryCount and RetryPeriod',
-                              'parent_object_name': CONSISTENT_OPTION_NAME},
+            error_msg_kwargs={
+                'invalid': 'RetryCount and RetryPeriod',
+                'parent_object_name': CONSISTENT_OPTION_NAME,
+            },
             rc=252,
         )
 
@@ -372,8 +443,10 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='Consistent=true,KMSKeyId=k1',
             exception_class_name='InvalidEmrFsArgumentsError',
-            error_msg_kwargs={'invalid': 'KMSKeyId',
-                              'parent_object_name': CSE_KMS_OPTION_NAME},
+            error_msg_kwargs={
+                'invalid': 'KMSKeyId',
+                'parent_object_name': CSE_KMS_OPTION_NAME,
+            },
             rc=252,
         )
 
@@ -381,18 +454,24 @@ class TestEmrfsUtils(BaseAWSCommandParam
         self._assert_error_msg(
             emrfs_option_value='Consistent=true,CustomProviderLocation=loc',
             exception_class_name='InvalidEmrFsArgumentsError',
-            error_msg_kwargs={'invalid': 'CustomProviderLocation',
-                              'parent_object_name': CSE_CUSTOM_OPTION_NAME},
+            error_msg_kwargs={
+                'invalid': 'CustomProviderLocation',
+                'parent_object_name': CSE_CUSTOM_OPTION_NAME,
+            },
             rc=252,
         )
 
     def test_configurations_and_emrfs(self):
         emrfs_option_value = 'Args=[someProperty=someValue]'
-        configurations = json.dumps(DEFAULT_CONFIGURATIONS,
-                                    separators=(',', ':'))
+        configurations = json.dumps(
+            DEFAULT_CONFIGURATIONS, separators=(',', ':')
+        )
 
-        cmd = "%s --release-label emr-4.0 --emrfs %s --configurations %s" \
-            % (DEFAULT_CMD, emrfs_option_value, configurations)
+        cmd = "%s --release-label emr-4.0 --emrfs %s --configurations %s" % (
+            DEFAULT_CMD,
+            emrfs_option_value,
+            configurations,
+        )
 
         expected_emrfs_properties = {'someProperty': 'someValue'}
 
@@ -416,11 +495,13 @@ class TestEmrfsUtils(BaseAWSCommandParam
         configurations = copy.deepcopy(DEFAULT_CONFIGURATIONS)
         configurations.append(EMPTY_EMRFS_CONFIGURATION)
 
-        configurations_json = json.dumps(configurations,
-                                         separators=(',', ':'))
+        configurations_json = json.dumps(configurations, separators=(',', ':'))
 
-        cmd = "%s --release-label emr-4.0 --emrfs %s --configurations %s" \
-            % (DEFAULT_CMD, emrfs_option_value, configurations_json)
+        cmd = "%s --release-label emr-4.0 --emrfs %s --configurations %s" % (
+            DEFAULT_CMD,
+            emrfs_option_value,
+            configurations_json,
+        )
 
         result = copy.deepcopy(DEFAULT_RESULT)
         result['ReleaseLabel'] = 'emr-4.0'
@@ -428,41 +509,67 @@ class TestEmrfsUtils(BaseAWSCommandParam
 
         self.assert_error_msg(cmd, 'DuplicateEmrFsConfigurationError', rc=252)
 
-    def _assert_error_msg(self, emrfs_option_value,
-                          exception_class_name, error_msg_kwargs, rc=255):
-        cmd = "%s --ami-version 3.4 --emrfs %s" \
-            % (DEFAULT_CMD, emrfs_option_value)
+    def _assert_error_msg(
+        self,
+        emrfs_option_value,
+        exception_class_name,
+        error_msg_kwargs,
+        rc=255,
+    ):
+        cmd = "%s --ami-version 3.4 --emrfs %s" % (
+            DEFAULT_CMD,
+            emrfs_option_value,
+        )
         self.assert_error_msg(
             cmd,
             exception_class_name=exception_class_name,
-            error_msg_kwargs=error_msg_kwargs, rc=rc)
+            error_msg_kwargs=error_msg_kwargs,
+            rc=rc,
+        )
 
-        cmd = "%s --release-label emr-4.0 --emrfs %s" \
-            % (DEFAULT_CMD, emrfs_option_value)
+        cmd = "%s --release-label emr-4.0 --emrfs %s" % (
+            DEFAULT_CMD,
+            emrfs_option_value,
+        )
         self.assert_error_msg(
             cmd,
             exception_class_name=exception_class_name,
-            error_msg_kwargs=error_msg_kwargs, rc=rc)
+            error_msg_kwargs=error_msg_kwargs,
+            rc=rc,
+        )
 
-    def _assert_bootstrap_actions(self, emrfs_option_value,
-                                  expected_emrfs_ba_key_values,
-                                  expected_emrfs_properties,
-                                  provider_location=None):
+    def _assert_bootstrap_actions(
+        self,
+        emrfs_option_value,
+        expected_emrfs_ba_key_values,
+        expected_emrfs_properties,
+        provider_location=None,
+    ):
         if expected_emrfs_ba_key_values is not None:
-            cmd = "%s --ami-version 3.4 --emrfs %s" \
-                % (DEFAULT_CMD, emrfs_option_value)
+            cmd = "%s --ami-version 3.4 --emrfs %s" % (
+                DEFAULT_CMD,
+                emrfs_option_value,
+            )
             result = copy.deepcopy(DEFAULT_RESULT)
-            result['BootstrapActions'] = [self._create_s3_get_ba_config(
-                provider_location)] if provider_location is not None else []
-            result['BootstrapActions'] += [self._create_setup_emrfs_ba_config(
-                                           expected_emrfs_ba_key_values)]
+            result['BootstrapActions'] = (
+                [self._create_s3_get_ba_config(provider_location)]
+                if provider_location is not None
+                else []
+            )
+            result['BootstrapActions'] += [
+                self._create_setup_emrfs_ba_config(
+                    expected_emrfs_ba_key_values
+                )
+            ]
             result['AmiVersion'] = '3.4'
 
             self.assert_params_for_cmd(cmd, result)
 
         if expected_emrfs_properties is not None:
-            cmd = "%s --release-label emr-4.0 --emrfs %s" \
-                % (DEFAULT_CMD, emrfs_option_value)
+            cmd = "%s --release-label emr-4.0 --emrfs %s" % (
+                DEFAULT_CMD,
+                emrfs_option_value,
+            )
             result = copy.deepcopy(DEFAULT_RESULT)
             emrfs_configuration = copy.deepcopy(EMPTY_EMRFS_CONFIGURATION)
             emrfs_configuration['Properties'] = expected_emrfs_properties
@@ -478,10 +585,12 @@ class TestEmrfsUtils(BaseAWSCommandParam
         return {
             'Name': 'Setup EMRFS',
             'ScriptBootstrapAction': {
-                'Path': ('s3://us-east-1.elasticmapreduce/'
-                         'bootstrap-actions/configure-hadoop'),
-                'Args': ba_args
-            }
+                'Path': (
+                    's3://us-east-1.elasticmapreduce/'
+                    'bootstrap-actions/configure-hadoop'
+                ),
+                'Args': ba_args,
+            },
         }
 
     def _create_s3_get_ba_config(self, provider_location):
@@ -490,9 +599,11 @@ class TestEmrfsUtils(BaseAWSCommandParam
             'ScriptBootstrapAction': {
                 'Path': 'file:/usr/share/aws/emr/scripts/s3get',
                 'Args': [
-                    '-s', provider_location,
-                    '-d', '/usr/share/aws/emr/auxlib',
-                    '-f'
-                ]
-            }
+                    '-s',
+                    provider_location,
+                    '-d',
+                    '/usr/share/aws/emr/auxlib',
+                    '-f',
+                ],
+            },
         }
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_get_service_principal.py 2.31.35-1/tests/unit/customizations/emr/test_get_service_principal.py
--- 2.23.6-1/tests/unit/customizations/emr/test_get_service_principal.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_get_service_principal.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
 from awscli.customizations.emr.createdefaultroles import get_service_principal
-from awscli.customizations.emr.exceptions import \
-    ResolveServicePrincipalError
+from awscli.customizations.emr.exceptions import ResolveServicePrincipalError
+from awscli.testutils import unittest
 
 
 class TestEmrConfig(unittest.TestCase):
@@ -28,8 +27,10 @@ class TestEmrConfig(unittest.TestCase):
     expected_result2 = "elasticmapreduce.def.ghi"
 
     def test_get_emr_service_principal(self):
-        msg = "Generated Service Principal does not match the expected" + \
-            "Service Principal"
+        msg = (
+            "Generated Service Principal does not match the expected"
+            + "Service Principal"
+        )
 
         result1 = get_service_principal(self.emr_service, self.endpoint1)
         self.assertEqual(result1, self.expected_result1, msg)
@@ -37,14 +38,26 @@ class TestEmrConfig(unittest.TestCase):
         result2 = get_service_principal(self.emr_service, self.endpoint2)
         self.assertEqual(result2, self.expected_result2, msg)
 
-        self.assertRaises(ResolveServicePrincipalError,
-                          get_service_principal, self.emr_service,
-                          self.endpoint3)
+        self.assertRaises(
+            ResolveServicePrincipalError,
+            get_service_principal,
+            self.emr_service,
+            self.endpoint3,
+        )
 
     def test_get_ec2_service_principal(self):
-        self.assertEqual(get_service_principal(self.ec2_service, self.endpoint1), self.ec2_service_principal)
-        self.assertEqual(get_service_principal(self.ec2_service, self.endpoint2), self.ec2_service_principal)
-        self.assertEqual(get_service_principal(self.ec2_service, self.endpoint3), self.ec2_service_principal)
+        self.assertEqual(
+            get_service_principal(self.ec2_service, self.endpoint1),
+            self.ec2_service_principal,
+        )
+        self.assertEqual(
+            get_service_principal(self.ec2_service, self.endpoint2),
+            self.ec2_service_principal,
+        )
+        self.assertEqual(
+            get_service_principal(self.ec2_service, self.endpoint3),
+            self.ec2_service_principal,
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_install_applications.py 2.31.35-1/tests/unit/customizations/emr/test_install_applications.py
--- 2.23.6-1/tests/unit/customizations/emr/test_install_applications.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_install_applications.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,116 +13,148 @@
 
 
 import json
-from awscli.testutils import mock
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 INSTALL_HIVE_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/hive/hive-script',
-                 '--install-hive', '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/hive',
-                 '--hive-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
+            '--install-hive',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/hive',
+            '--hive-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Hive',
-    'ActionOnFailure': 'TERMINATE_CLUSTER'
+    'ActionOnFailure': 'TERMINATE_CLUSTER',
 }
 
 INSTALL_HIVE_SITE_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/hive/hive-script',
-                 '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/hive',
-                 '--install-hive-site',
-                 '--hive-site=s3://test/hive-conf/hive-site.xml',
-                 '--hive-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/hive/hive-script',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/hive',
+            '--install-hive-site',
+            '--hive-site=s3://test/hive-conf/hive-site.xml',
+            '--hive-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Hive Site Configuration',
-    'ActionOnFailure': 'CANCEL_AND_WAIT'
+    'ActionOnFailure': 'CANCEL_AND_WAIT',
 }
 
 INSTALL_PIG_STEP = {
     'HadoopJarStep': {
-        'Args': ['s3://us-east-1.elasticmapreduce/libs/pig/pig-script',
-                 '--install-pig', '--base-path',
-                 's3://us-east-1.elasticmapreduce/libs/pig',
-                 '--pig-versions', 'latest'],
-        'Jar':
-            ('s3://us-east-1.elasticmapreduce/libs/'
-             'script-runner/script-runner.jar')
+        'Args': [
+            's3://us-east-1.elasticmapreduce/libs/pig/pig-script',
+            '--install-pig',
+            '--base-path',
+            's3://us-east-1.elasticmapreduce/libs/pig',
+            '--pig-versions',
+            'latest',
+        ],
+        'Jar': (
+            's3://us-east-1.elasticmapreduce/libs/'
+            'script-runner/script-runner.jar'
+        ),
     },
     'Name': 'Install Pig',
-    'ActionOnFailure': 'TERMINATE_CLUSTER'
+    'ActionOnFailure': 'TERMINATE_CLUSTER',
 }
 
 
 class TestInstallApplications(BaseAWSCommandParamsTest):
-    prefix = ('emr install-applications --cluster-id '
-              'j-ABC123456 --applications ')
+    prefix = (
+        'emr install-applications --cluster-id ' 'j-ABC123456 --applications '
+    )
 
     def test_install_hive_site(self):
-        cmdline = (self.prefix + 'Name=Hive,'
-                   'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]')
-        result = {'JobFlowId': 'j-ABC123456',
-                  'Steps': [INSTALL_HIVE_STEP, INSTALL_HIVE_SITE_STEP]
-                  }
+        cmdline = (
+            self.prefix + 'Name=Hive,'
+            'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]'
+        )
+        result = {
+            'JobFlowId': 'j-ABC123456',
+            'Steps': [INSTALL_HIVE_STEP, INSTALL_HIVE_SITE_STEP],
+        }
         self.assert_params_for_cmd(cmdline, result)
-        cmdline = (self.prefix + 'Name=Hive,'
-                   'Args=[--hive-site=s3://test/hive-conf/hive-site.xml,k1]')
+        cmdline = (
+            self.prefix + 'Name=Hive,'
+            'Args=[--hive-site=s3://test/hive-conf/hive-site.xml,k1]'
+        )
         self.assert_params_for_cmd(cmdline, result)
 
     def test_install_hive_and_pig(self):
         cmdline = self.prefix + 'Name=Hive Name=Pig'
-        result = {'JobFlowId': 'j-ABC123456', 'Steps': [INSTALL_HIVE_STEP,
-                                                        INSTALL_PIG_STEP]}
+        result = {
+            'JobFlowId': 'j-ABC123456',
+            'Steps': [INSTALL_HIVE_STEP, INSTALL_PIG_STEP],
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_install_pig_with_profile_region(self):
         self.driver.session.set_config_variable('region', 'cn-north-1')
         cmdline = self.prefix + 'Name=Pig'
-        PIG_STEP = json.dumps(INSTALL_PIG_STEP).\
-            replace('us-east-1', 'cn-north-1')
-        result = {'JobFlowId': 'j-ABC123456',
-                  'Steps': [json.loads(PIG_STEP)]}
+        PIG_STEP = json.dumps(INSTALL_PIG_STEP).replace(
+            'us-east-1', 'cn-north-1'
+        )
+        result = {'JobFlowId': 'j-ABC123456', 'Steps': [json.loads(PIG_STEP)]}
         self.assert_params_for_cmd(cmdline, result)
 
     def test_install_impala_error(self):
         cmdline = self.prefix + ' Name=Impala'
 
-        expected_error_msg = "\naws: error: Impala cannot be installed on" +\
-            " a running cluster. 'Name' should be one of the following:" +\
-            " HIVE, PIG\n"
+        expected_error_msg = (
+            "\naws: error: Impala cannot be installed on"
+            + " a running cluster. 'Name' should be one of the following:"
+            + " HIVE, PIG\n"
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(result[1], expected_error_msg)
 
     def test_install_unknown_app_error(self):
         cmdline = self.prefix + 'Name=unknown'
 
-        expected_error_msg = "\naws: error: Unknown application: unknown." +\
-            " 'Name' should be one of the following: HIVE, PIG, HBASE," +\
-            " GANGLIA, IMPALA, SPARK, MAPR, MAPR_M3, MAPR_M5, MAPR_M7\n"
+        expected_error_msg = (
+            "\naws: error: Unknown application: unknown."
+            + " 'Name' should be one of the following: HIVE, PIG, HBASE,"
+            + " GANGLIA, IMPALA, SPARK, MAPR, MAPR_M3, MAPR_M5, MAPR_M7\n"
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(result[1], expected_error_msg)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def test_unsupported_command_on_release_based_cluster_error(
-            self, grl_patch):
+        self, grl_patch
+    ):
         grl_patch.return_value = 'emr-4.0'
-        cmdline = (self.prefix + 'Name=Hive,'
-                   'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]')
-
-        expected_error_msg = ("\naws: error: install-applications"
-                              " is not supported with 'emr-4.0' release.\n")
+        cmdline = (
+            self.prefix + 'Name=Hive,'
+            'Args=[--hive-site=s3://test/hive-conf/hive-site.xml]'
+        )
+
+        expected_error_msg = (
+            "\naws: error: install-applications"
+            " is not supported with 'emr-4.0' release.\n"
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(result[1], expected_error_msg)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_list_clusters.py 2.31.35-1/tests/unit/customizations/emr/test_list_clusters.py
--- 2.23.6-1/tests/unit/customizations/emr/test_list_clusters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_list_clusters.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,13 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 from datetime import datetime
 from time import mktime
 
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+
 
 class TestListClusters(BaseAWSCommandParamsTest):
     prefix = 'emr list-clusters '
@@ -23,13 +25,15 @@ class TestListClusters(BaseAWSCommandPar
     def test_list_active_clusters(self):
         args = '--active'
         cmdline = self.prefix + args
-        result = {'ClusterStates': ['STARTING',
-                                    'BOOTSTRAPPING',
-                                    'RUNNING',
-                                    'WAITING',
-                                    'TERMINATING'
-                                    ]
-                  }
+        result = {
+            'ClusterStates': [
+                'STARTING',
+                'BOOTSTRAPPING',
+                'RUNNING',
+                'WAITING',
+                'TERMINATING',
+            ]
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_list_terminated_clusters(self):
@@ -55,7 +59,8 @@ class TestListClusters(BaseAWSCommandPar
         cmdline = self.prefix + args
         expected_error_msg = (
             '\naws: error: You can specify only one of the cluster state '
-            'filters: --cluster-states, --active, --terminated, --failed.\n')
+            'filters: --cluster-states, --active, --terminated, --failed.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
@@ -63,7 +68,8 @@ class TestListClusters(BaseAWSCommandPar
         cmdline = self.prefix + args
         expected_error_msg = (
             '\naws: error: You can specify only one of the cluster state '
-            'filters: --cluster-states, --active, --terminated, --failed.\n')
+            'filters: --cluster-states, --active, --terminated, --failed.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_modify_cluster_attributes.py 2.31.35-1/tests/unit/customizations/emr/test_modify_cluster_attributes.py
--- 2.23.6-1/tests/unit/customizations/emr/test_modify_cluster_attributes.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_modify_cluster_attributes.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 
 class TestModifyClusterAttributes(BaseAWSCommandParamsTest):
@@ -45,91 +46,133 @@ class TestModifyClusterAttributes(BaseAW
     def test_no_auto_terminate(self):
         args = ' --cluster-id j-ABC123456 --no-auto-terminate'
         cmdline = self.prefix + args
-        result = {'JobFlowIds': ['j-ABC123456'], 'KeepJobFlowAliveWhenNoSteps': True}
+        result = {
+            'JobFlowIds': ['j-ABC123456'],
+            'KeepJobFlowAliveWhenNoSteps': True,
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_auto_terminate(self):
         args = ' --cluster-id j-ABC123456 --auto-terminate'
         cmdline = self.prefix + args
-        result = {'JobFlowIds': ['j-ABC123456'], 'KeepJobFlowAliveWhenNoSteps': False}
+        result = {
+            'JobFlowIds': ['j-ABC123456'],
+            'KeepJobFlowAliveWhenNoSteps': False,
+        }
 
     def test_unhealthy_node_replacement(self):
         args = ' --cluster-id j-ABC123456 --unhealthy-node-replacement'
         cmdline = self.prefix + args
-        result = {'JobFlowIds': ['j-ABC123456'], 'UnhealthyNodeReplacement': True}
+        result = {
+            'JobFlowIds': ['j-ABC123456'],
+            'UnhealthyNodeReplacement': True,
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_no_unhealthy_node_replacement(self):
         args = ' --cluster-id j-ABC123456 --no-unhealthy-node-replacement'
         cmdline = self.prefix + args
-        result = {'JobFlowIds': ['j-ABC123456'], 'UnhealthyNodeReplacement': False}
+        result = {
+            'JobFlowIds': ['j-ABC123456'],
+            'UnhealthyNodeReplacement': False,
+        }
         self.assert_params_for_cmd(cmdline, result)
 
     def test_visible_to_all_and_no_visible_to_all(self):
-        args = ' --cluster-id j-ABC123456 --no-visible-to-all-users'\
-               ' --visible-to-all-users'
+        args = (
+            ' --cluster-id j-ABC123456 --no-visible-to-all-users'
+            ' --visible-to-all-users'
+        )
         cmdline = self.prefix + args
         expected_error_msg = (
             '\naws: error: You cannot specify both --visible-to-all-users '
-            'and --no-visible-to-all-users options together.\n')
+            'and --no-visible-to-all-users options together.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_temination_protected_and_no_termination_protected(self):
-        args = ' --cluster-id j-ABC123456 --no-termination-protected'\
-               ' --termination-protected'
+        args = (
+            ' --cluster-id j-ABC123456 --no-termination-protected'
+            ' --termination-protected'
+        )
         cmdline = self.prefix + args
         expected_error_msg = (
             '\naws: error: You cannot specify both --termination-protected '
-            'and --no-termination-protected options together.\n')
+            'and --no-termination-protected options together.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_auto_terminate_and_no_auto_terminate(self):
-        args = ' --cluster-id j-ABC123456 --auto-terminate'\
-               ' --no-auto-terminate'
+        args = (
+            ' --cluster-id j-ABC123456 --auto-terminate' ' --no-auto-terminate'
+        )
         cmdline = self.prefix + args
         expected_error_msg = (
             '\naws: error: You cannot specify both --auto-terminate '
-            'and --no-auto-terminate options together.\n')
+            'and --no-auto-terminate options together.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
     def test_can_set_multiple_attributes(self):
-        args = ' --cluster-id j-ABC123456 --termination-protected'\
-               ' --visible-to-all-users --unhealthy-node-replacement'
+        args = (
+            ' --cluster-id j-ABC123456 --termination-protected'
+            ' --visible-to-all-users --unhealthy-node-replacement'
+        )
         cmdline = self.prefix + args
         result_set_termination_protection = {
-            'JobFlowIds': ['j-ABC123456'], 'TerminationProtected': True}
+            'JobFlowIds': ['j-ABC123456'],
+            'TerminationProtected': True,
+        }
         result_set_visible_to_all_users = {
-            'JobFlowIds': ['j-ABC123456'], 'VisibleToAllUsers': True}
+            'JobFlowIds': ['j-ABC123456'],
+            'VisibleToAllUsers': True,
+        }
         result_set_unhealty_node_replacement = {
-            'JobFlowIds': ['j-ABC123456'], 'UnhealthyNodeReplacement': True}
+            'JobFlowIds': ['j-ABC123456'],
+            'UnhealthyNodeReplacement': True,
+        }
         self.run_cmd(cmdline)
         self.assertDictEqual(
-            self.operations_called[0][1], result_set_visible_to_all_users)
+            self.operations_called[0][1], result_set_visible_to_all_users
+        )
         self.assertDictEqual(
-            self.operations_called[1][1], result_set_termination_protection)
+            self.operations_called[1][1], result_set_termination_protection
+        )
         self.assertDictEqual(
-            self.operations_called[2][1], result_set_unhealty_node_replacement)
+            self.operations_called[2][1], result_set_unhealty_node_replacement
+        )
 
     def test_can_set_multiple_attributes_with_no(self):
-        args = ' --cluster-id j-ABC123456 --termination-protected'\
-               ' --no-visible-to-all-users --unhealthy-node-replacement'
+        args = (
+            ' --cluster-id j-ABC123456 --termination-protected'
+            ' --no-visible-to-all-users --unhealthy-node-replacement'
+        )
         cmdline = self.prefix + args
         result_set_termination_protection = {
-            'JobFlowIds': ['j-ABC123456'], 'TerminationProtected': True}
+            'JobFlowIds': ['j-ABC123456'],
+            'TerminationProtected': True,
+        }
         result_set_visible_to_all_users = {
-            'JobFlowIds': ['j-ABC123456'], 'VisibleToAllUsers': False}
+            'JobFlowIds': ['j-ABC123456'],
+            'VisibleToAllUsers': False,
+        }
         result_set_unhealty_node_replacement = {
-            'JobFlowIds': ['j-ABC123456'], 'UnhealthyNodeReplacement': True}
+            'JobFlowIds': ['j-ABC123456'],
+            'UnhealthyNodeReplacement': True,
+        }
         self.run_cmd(cmdline)
         self.assertDictEqual(
-            self.operations_called[0][1], result_set_visible_to_all_users)
+            self.operations_called[0][1], result_set_visible_to_all_users
+        )
         self.assertDictEqual(
-            self.operations_called[1][1], result_set_termination_protection)
+            self.operations_called[1][1], result_set_termination_protection
+        )
         self.assertDictEqual(
-            self.operations_called[2][1], result_set_unhealty_node_replacement)
+            self.operations_called[2][1], result_set_unhealty_node_replacement
+        )
 
     def test_at_least_one_option(self):
         args = ' --cluster-id j-ABC123456'
@@ -139,9 +182,11 @@ class TestModifyClusterAttributes(BaseAW
             '--visible-to-all-users|--no-visible-to-all-users, '
             '--termination-protected|--no-termination-protected, '
             '--auto-terminate|--no-auto-terminate, '
-            '--unhealthy-node-replacement|--no-unhealthy-node-replacement.\n')
+            '--unhealthy-node-replacement|--no-unhealthy-node-replacement.\n'
+        )
         result = self.run_cmd(cmdline, 252)
         self.assertEqual(expected_error_msg, result[1])
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_modify_instance_fleet.py 2.31.35-1/tests/unit/customizations/emr/test_modify_instance_fleet.py
--- 2.23.6-1/tests/unit/customizations/emr/test_modify_instance_fleet.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_modify_instance_fleet.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,12 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
-from tests.unit.customizations.emr import test_constants_instance_fleets as \
-    CONSTANTS_FLEET
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+from tests.unit.customizations.emr import (
+    test_constants_instance_fleets as CONSTANTS_FLEET,
+)
 
 
 class TestModifyInstanceFleet(BaseAWSCommandParamsTest):
@@ -22,18 +24,26 @@ class TestModifyInstanceFleet(BaseAWSCom
 
     def test_modify_instance_fleet_with_instance_type_configs(self):
         self.assert_params_for_cmd(
-            self.prefix + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS,
-            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS)
+            self.prefix
+            + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS,
+            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS,
+        )
 
     def test_modify_instance_fleet_with_allocation_strategy_spot_and_od(self):
         self.assert_params_for_cmd(
-            self.prefix + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
-            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS)
-
-    def test_modify_instance_fleet_with_allocation_strategy_spot_and_od_and_instance_type_configs(self):
+            self.prefix
+            + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
+            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
+        )
+
+    def test_modify_instance_fleet_with_allocation_strategy_spot_and_od_and_instance_type_configs(
+        self,
+    ):
         self.assert_params_for_cmd(
-            self.prefix + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
-            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS)
+            self.prefix
+            + CONSTANTS_FLEET.MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
+            CONSTANTS_FLEET.RES_MODIFY_INSTANCE_FLEET_WITH_INSTANCE_TYPE_CONFIGS_AND_SPOT_AND_OD_RESIZE_SPECIFICATIONS,
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_restore_from_hbase_backup.py 2.31.35-1/tests/unit/customizations/emr/test_restore_from_hbase_backup.py
--- 2.23.6-1/tests/unit/customizations/emr/test_restore_from_hbase_backup.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_restore_from_hbase_backup.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,28 +11,31 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 from copy import deepcopy
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+
 
 class TestRestoreFromHBaseBackup(BaseAWSCommandParamsTest):
     prefix = 'emr restore-from-hbase-backup'
-    steps = [{
-        'HadoopJarStep': {
-            'Args': [
-                'emr.hbase.backup.Main',
-                '--restore',
-                '--backup-dir',
-                's3://abc/'
-            ],
-            'Jar': '/home/hadoop/lib/hbase.jar'
-        },
-        'Name': 'Restore HBase',
-        'ActionOnFailure': 'CANCEL_AND_WAIT'
-    }]
+    steps = [
+        {
+            'HadoopJarStep': {
+                'Args': [
+                    'emr.hbase.backup.Main',
+                    '--restore',
+                    '--backup-dir',
+                    's3://abc/',
+                ],
+                'Jar': '/home/hadoop/lib/hbase.jar',
+            },
+            'Name': 'Restore HBase',
+            'ActionOnFailure': 'CANCEL_AND_WAIT',
+        }
+    ]
 
     def test_restore_from_hbase_backup(self):
         args = ' --cluster-id j-ABCD --dir s3://abc/'
@@ -52,18 +55,21 @@ class TestRestoreFromHBaseBackup(BaseAWS
 
         self.assert_params_for_cmd(cmdline, result)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def test_unsupported_command_on_release_based_cluster_error(
-            self, grl_patch):
+        self, grl_patch
+    ):
         grl_patch.return_value = 'emr-4.0'
         args = ' --cluster-id j-ABCD --dir s3://abc/'
         cmdline = self.prefix + args
-        expected_error_msg = ("\naws: error: restore-from-hbase-backup"
-                              " is not supported with 'emr-4.0' release.\n")
+        expected_error_msg = (
+            "\naws: error: restore-from-hbase-backup"
+            " is not supported with 'emr-4.0' release.\n"
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(result[1], expected_error_msg)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_schedule_hbase_backup.py 2.31.35-1/tests/unit/customizations/emr/test_schedule_hbase_backup.py
--- 2.23.6-1/tests/unit/customizations/emr/test_schedule_hbase_backup.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_schedule_hbase_backup.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,55 +10,64 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock
-
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
 from copy import deepcopy
 
+from awscli.testutils import mock
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
+
 
 class TestScheduleHBaseBackup(BaseAWSCommandParamsTest):
     prefix = 'emr schedule-hbase-backup'
-    default_steps = [{
-        'HadoopJarStep': {
-            'Args': [
-                'emr.hbase.backup.Main',
-                '--set-scheduled-backup',
-                'true',
-                '--backup-dir',
-                's3://abc/',
-                '--full-backup-time-interval',
-                '10',
-                '--full-backup-time-unit',
-                'minutes',
-                '--start-time',
-                'now'
-            ],
-            'Jar': '/home/hadoop/lib/hbase.jar'
-        },
-        'Name': 'Modify Backup Schedule',
-        'ActionOnFailure': 'CANCEL_AND_WAIT'
-    }]
+    default_steps = [
+        {
+            'HadoopJarStep': {
+                'Args': [
+                    'emr.hbase.backup.Main',
+                    '--set-scheduled-backup',
+                    'true',
+                    '--backup-dir',
+                    's3://abc/',
+                    '--full-backup-time-interval',
+                    '10',
+                    '--full-backup-time-unit',
+                    'minutes',
+                    '--start-time',
+                    'now',
+                ],
+                'Jar': '/home/hadoop/lib/hbase.jar',
+            },
+            'Name': 'Modify Backup Schedule',
+            'ActionOnFailure': 'CANCEL_AND_WAIT',
+        }
+    ]
 
     def test_schedule_hbase_backup_full(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/ --type full' +\
-               ' --interval 10 --unit minutes'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/ --type full'
+            + ' --interval 10 --unit minutes'
+        )
         cmdline = self.prefix + args
         result = {'JobFlowId': 'j-ABCD', 'Steps': self.default_steps}
 
         self.assert_params_for_cmd(cmdline, result)
 
     def test_schedule_hbase_backup_full_upper_case(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/ --type FULL' +\
-               ' --interval 10 --unit minutes'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/ --type FULL'
+            + ' --interval 10 --unit minutes'
+        )
         cmdline = self.prefix + args
         result = {'JobFlowId': 'j-ABCD', 'Steps': self.default_steps}
 
         self.assert_params_for_cmd(cmdline, result)
 
     def test_schedule_hbase_backup_incremental_upper_case(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/  --type INCREMENTAL' +\
-               ' --interval 10 --unit HOURS'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/  --type INCREMENTAL'
+            + ' --interval 10 --unit HOURS'
+        )
         cmdline = self.prefix + args
 
         steps = deepcopy(self.default_steps)
@@ -72,8 +81,10 @@ class TestScheduleHBaseBackup(BaseAWSCom
         self.assert_params_for_cmd(cmdline, result)
 
     def test_schedule_hbase_backup_incremental(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/  --type incremental' +\
-               ' --interval 10 --unit minutes'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/  --type incremental'
+            + ' --interval 10 --unit minutes'
+        )
         cmdline = self.prefix + args
 
         steps = deepcopy(self.default_steps)
@@ -87,29 +98,39 @@ class TestScheduleHBaseBackup(BaseAWSCom
         self.assert_params_for_cmd(cmdline, result)
 
     def test_schedule_hbase_backup_wrong_type(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/  --type wrong_type' +\
-               ' --interval 10 --unit minutes'
-        cmdline = self.prefix + args
-        expected_error_msg = '\naws: error: invalid type. type should be' +\
-                             ' either full or incremental.\n'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/  --type wrong_type'
+            + ' --interval 10 --unit minutes'
+        )
+        cmdline = self.prefix + args
+        expected_error_msg = (
+            '\naws: error: invalid type. type should be'
+            + ' either full or incremental.\n'
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(expected_error_msg, result[1])
 
     def test_schedule_hbase_backup_wrong_unit(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/  --type full' +\
-               ' --interval 10 --unit wrong_unit'
-        cmdline = self.prefix + args
-        expected_error_msg = '\naws: error: invalid unit. unit should be' +\
-                             ' one of the following values: minutes,' +\
-                             ' hours or days.\n'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/  --type full'
+            + ' --interval 10 --unit wrong_unit'
+        )
+        cmdline = self.prefix + args
+        expected_error_msg = (
+            '\naws: error: invalid unit. unit should be'
+            + ' one of the following values: minutes,'
+            + ' hours or days.\n'
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(expected_error_msg, result[1])
 
     def test_schedule_hbase_backup_consistent(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/ --type full' +\
-               ' --interval 10 --unit minutes --consistent'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/ --type full'
+            + ' --interval 10 --unit minutes --consistent'
+        )
         cmdline = self.prefix + args
 
         steps = deepcopy(self.default_steps)
@@ -119,8 +140,10 @@ class TestScheduleHBaseBackup(BaseAWSCom
         self.assert_params_for_cmd(cmdline, result)
 
     def test_schedule_hbase_backup_start_time(self):
-        args = ' --cluster-id j-ABCD --dir s3://abc/ --type full --interval' +\
-               ' 10 --unit minutes --start-time 2014-04-18T10:43:24-07:00'
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/ --type full --interval'
+            + ' 10 --unit minutes --start-time 2014-04-18T10:43:24-07:00'
+        )
         cmdline = self.prefix + args
 
         steps = deepcopy(self.default_steps)
@@ -129,16 +152,20 @@ class TestScheduleHBaseBackup(BaseAWSCom
         result = {'JobFlowId': 'j-ABCD', 'Steps': steps}
         self.assert_params_for_cmd(cmdline, result)
 
-    @mock.patch('awscli.customizations.emr.'
-                'emrutils.get_release_label')
+    @mock.patch('awscli.customizations.emr.' 'emrutils.get_release_label')
     def test_unsupported_command_on_release_based_cluster_error(
-            self, grl_patch):
+        self, grl_patch
+    ):
         grl_patch.return_value = 'emr-4.0'
-        args = ' --cluster-id j-ABCD --dir s3://abc/ --type full' +\
-               ' --interval 10 --unit minutes'
-        cmdline = self.prefix + args
-        expected_error_msg = ("\naws: error: schedule-hbase-backup"
-                              " is not supported with 'emr-4.0' release.\n")
+        args = (
+            ' --cluster-id j-ABCD --dir s3://abc/ --type full'
+            + ' --interval 10 --unit minutes'
+        )
+        cmdline = self.prefix + args
+        expected_error_msg = (
+            "\naws: error: schedule-hbase-backup"
+            " is not supported with 'emr-4.0' release.\n"
+        )
         result = self.run_cmd(cmdline, 252)
 
         self.assertEqual(result[1], expected_error_msg)
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_sshutils.py 2.31.35-1/tests/unit/customizations/emr/test_sshutils.py
--- 2.23.6-1/tests/unit/customizations/emr/test_sshutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_sshutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.emr import sshutils
-from awscli.customizations.emr import exceptions
+from awscli.customizations.emr import exceptions, sshutils
 from awscli.testutils import mock, unittest
 
 
 class TestSSHUtils(unittest.TestCase):
-
     @mock.patch('awscli.customizations.emr.sshutils.emrutils')
     def test_validate_and_find_master_dns_waits(self, emrutils):
         emrutils.get_cluster_state.return_value = 'STARTING'
@@ -30,7 +28,8 @@ class TestSSHUtils(unittest.TestCase):
         # 1. Waiter for the cluster to be running.
         client.get_waiter.assert_called_with('cluster_running')
         client.get_waiter.return_value.wait.assert_called_with(
-            ClusterId='cluster-id')
+            ClusterId='cluster-id'
+        )
 
         # 2. Found the master public DNS
         self.assertTrue(emrutils.find_master_dns.called)
@@ -40,13 +39,15 @@ class TestSSHUtils(unittest.TestCase):
         emrutils.get_cluster_state.return_value = 'TERMINATED'
         with self.assertRaises(exceptions.ClusterTerminatedError):
             sshutils.validate_and_find_master_dns(
-                mock.Mock(), None, 'cluster-id')
+                mock.Mock(), None, 'cluster-id'
+            )
 
     @mock.patch('awscli.customizations.emr.sshutils.emrutils')
     def test_ssh_scp_key_file_format(self, emrutils):
         def which_side_effect(program):
             if program == 'ssh' or program == 'scp':
                 return '/some/path'
+
         emrutils.which.side_effect = which_side_effect
 
         key_file1 = 'key.abc'
diff -pruN 2.23.6-1/tests/unit/customizations/emr/test_terminate_clusters.py 2.31.35-1/tests/unit/customizations/emr/test_terminate_clusters.py
--- 2.23.6-1/tests/unit/customizations/emr/test_terminate_clusters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emr/test_terminate_clusters.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \
-    BaseAWSCommandParamsTest
+from tests.unit.customizations.emr import (
+    EMRBaseAWSCommandParamsTest as BaseAWSCommandParamsTest,
+)
 
 
 class TestTerminateClusters(BaseAWSCommandParamsTest):
@@ -30,5 +31,6 @@ class TestTerminateClusters(BaseAWSComma
         result = {'JobFlowIds': ['j-ABC123456', 'j-AAAAAAA']}
         self.assert_params_for_cmd(cmdline, result)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/emrcontainers/test_base36.py 2.31.35-1/tests/unit/customizations/emrcontainers/test_base36.py
--- 2.23.6-1/tests/unit/customizations/emrcontainers/test_base36.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emrcontainers/test_base36.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,8 +11,9 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
 from awscli.customizations.emrcontainers.base36 import Base36
+from awscli.testutils import unittest
+
 
 class TestBase36(unittest.TestCase):
     base36 = Base36()
@@ -25,25 +26,32 @@ class TestBase36(unittest.TestCase):
         self.assertEqual(self.base36.encode(''), '0')
 
         # Test for a short string
-        self.assertEqual(self.base36.encode('abcdefghijkl'),
-                         '2x6xx5ubcrus4bplmr0')
+        self.assertEqual(
+            self.base36.encode('abcdefghijkl'), '2x6xx5ubcrus4bplmr0'
+        )
 
         # Test for a really lengthy string
-        self.assertEqual(self.base36.encode('abcdefghijklmnopqrstuvwxyzabcdef'
-                                            'ghijklmnopqrstuvwxyzabcdefghijkl'
-                                            'mnopqrstuvwxyzabcdefghijklmnopqr'
-                                            'stuvwxyzabcdefghijklmnopqrstuvwx'),
-                         'hihg421ybq8vpwgxd21fae22r9rho7x8qpyskkz6iqadme7ds5f'
-                         'qxpnedq44doj5dlitkm8wswo3c5503yl55jfazzhbbqnnee7r70'
-                         'zw89fs5ojeipi6xeiydas7g7y9w3usdlzrlhxx0q50bxvt27tfu'
-                         '3ruwyx4fuv96rcfpkqxxg93vdclsof5ribhnrcvajmpvc')
+        self.assertEqual(
+            self.base36.encode(
+                'abcdefghijklmnopqrstuvwxyzabcdef'
+                'ghijklmnopqrstuvwxyzabcdefghijkl'
+                'mnopqrstuvwxyzabcdefghijklmnopqr'
+                'stuvwxyzabcdefghijklmnopqrstuvwx'
+            ),
+            'hihg421ybq8vpwgxd21fae22r9rho7x8qpyskkz6iqadme7ds5f'
+            'qxpnedq44doj5dlitkm8wswo3c5503yl55jfazzhbbqnnee7r70'
+            'zw89fs5ojeipi6xeiydas7g7y9w3usdlzrlhxx0q50bxvt27tfu'
+            '3ruwyx4fuv96rcfpkqxxg93vdclsof5ribhnrcvajmpvc',
+        )
 
         # Test for a string with only special characters
         self.assertEqual(self.base36.encode('+=,.@-_'), '3bu5b0xg4tb')
 
         # Test for a string containing special characters
-        self.assertEqual(self.base36.encode('abcdefghijkl+=,.@-_'),
-                         '1ll75jdngh5gbk11wbh7h35ji05wtb')
+        self.assertEqual(
+            self.base36.encode('abcdefghijkl+=,.@-_'),
+            '1ll75jdngh5gbk11wbh7h35ji05wtb',
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/unit/customizations/emrcontainers/test_update_assume_role_policy.py 2.31.35-1/tests/unit/customizations/emrcontainers/test_update_assume_role_policy.py
--- 2.23.6-1/tests/unit/customizations/emrcontainers/test_update_assume_role_policy.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/emrcontainers/test_update_assume_role_policy.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,17 +14,19 @@
 import copy
 import json
 
-from awscli.testutils import mock, BaseAWSCommandParamsTest, unittest
 from awscli.customizations.emrcontainers.base36 import Base36
-from awscli.customizations.emrcontainers.constants \
-    import TRUST_POLICY_STATEMENT_FORMAT, \
-    TRUST_POLICY_STATEMENT_ALREADY_EXISTS, \
-    TRUST_POLICY_UPDATE_SUCCESSFUL
+from awscli.customizations.emrcontainers.constants import (
+    TRUST_POLICY_STATEMENT_ALREADY_EXISTS,
+    TRUST_POLICY_STATEMENT_FORMAT,
+    TRUST_POLICY_UPDATE_SUCCESSFUL,
+)
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 def json_matches(first, second):
-    return json.dumps(first, sort_keys=True) == json.dumps(second,
-                                                           sort_keys=True)
+    return json.dumps(first, sort_keys=True) == json.dumps(
+        second, sort_keys=True
+    )
 
 
 class TestUpdateAssumeRolePolicy(BaseAWSCommandParamsTest):
@@ -42,7 +44,7 @@ class TestUpdateAssumeRolePolicy(BaseAWS
         "OIDC_PROVIDER": oidc_provider,
         "NAMESPACE": namespace,
         "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
-        "AWS_PARTITION": aws_partition
+        "AWS_PARTITION": aws_partition,
     }
 
     expected_statement_cn = TRUST_POLICY_STATEMENT_FORMAT % {
@@ -50,7 +52,7 @@ class TestUpdateAssumeRolePolicy(BaseAWS
         "OIDC_PROVIDER": oidc_provider,
         "NAMESPACE": namespace,
         "BASE36_ENCODED_ROLE_NAME": base36_encoded_role_name,
-        "AWS_PARTITION": aws_cn_partition
+        "AWS_PARTITION": aws_cn_partition,
     }
 
     def setUp(self):
@@ -58,62 +60,75 @@ class TestUpdateAssumeRolePolicy(BaseAWS
 
         self.command = (
             'emr-containers update-role-trust-policy --cluster-name=%s '
-            '--namespace=%s --role-name=%s' % (
-                self.cluster_name, self.namespace, self.role_name)
+            '--namespace=%s --role-name=%s'
+            % (self.cluster_name, self.namespace, self.role_name)
         )
         self.policy_document = {
             "Version": "2012-10-17",
             "Statement": [
                 {
                     "Effect": "Allow",
-                    "Principal": {
-                        "AWS": "arn:aws:iam::123456789012:root"
-                    },
-                    "Action": "sts:AssumeRole"
+                    "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
+                    "Action": "sts:AssumeRole",
                 }
-            ]
+            ],
         }
 
         self.expected_policy_document = copy.deepcopy(self.policy_document)
         self.expected_policy_document.get("Statement").append(
-            json.loads(self.expected_statement))
+            json.loads(self.expected_statement)
+        )
 
         self.expected_policy_document_cn = copy.deepcopy(self.policy_document)
         self.expected_policy_document_cn.get("Statement").append(
-            json.loads(self.expected_statement_cn))
+            json.loads(self.expected_statement_cn)
+        )
 
     # Assert the call to update trust policy of the role
-    def assert_trust_policy_updated(self, cmd_output,
-                                    expected_policy_document=None):
+    def assert_trust_policy_updated(
+        self, cmd_output, expected_policy_document=None
+    ):
         if expected_policy_document is None:
             expected_policy_document = self.expected_policy_document
 
-        self.assertTrue(TRUST_POLICY_UPDATE_SUCCESSFUL % self.role_name
-                        in cmd_output)
+        self.assertTrue(
+            TRUST_POLICY_UPDATE_SUCCESSFUL % self.role_name in cmd_output
+        )
 
         # Check if UpdateAssumeRolePolicy was invoked
         self.assertEqual(len(self.operations_called), 1)
-        self.assertEqual(self.operations_called[0][0].name,
-                         'UpdateAssumeRolePolicy')
-        self.assertEqual(self.operations_called[0][1]['RoleName'],
-                         self.role_name)
-
-        self.assertTrue(json_matches(json.loads(
-            self.operations_called[0][1]['PolicyDocument']),
-            expected_policy_document))
+        self.assertEqual(
+            self.operations_called[0][0].name, 'UpdateAssumeRolePolicy'
+        )
+        self.assertEqual(
+            self.operations_called[0][1]['RoleName'], self.role_name
+        )
+
+        self.assertTrue(
+            json_matches(
+                json.loads(self.operations_called[0][1]['PolicyDocument']),
+                expected_policy_document,
+            )
+        )
 
     # Use case: Expected trust policy does not exist
     # Expected results: Operation is performed by client
     # to update the trust policy in expected format
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_trust_policy_does_not_exist(self, get_account_id_patch,
-                                         get_oidc_issuer_id_patch,
-                                         get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_trust_policy_does_not_exist(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
         get_account_id_patch.return_value = self.account_id
@@ -125,25 +140,35 @@ class TestUpdateAssumeRolePolicy(BaseAWS
     # has an additional condition
     # Expected results: Operation is performed by client to update
     # the trust policy in expected format
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_trust_policy_exists_with_more_keys(self, get_account_id_patch,
-                                                get_oidc_issuer_id_patch,
-                                                get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_trust_policy_exists_with_more_keys(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         statement_with_additional_condition_key = json.loads(
-            self.expected_statement)
+            self.expected_statement
+        )
         statement_with_additional_condition_key.get("Condition").get(
-            "StringLike")["test:key"] = "value"
+            "StringLike"
+        )["test:key"] = "value"
         self.policy_document.get("Statement").append(
-            statement_with_additional_condition_key)
+            statement_with_additional_condition_key
+        )
 
         self.expected_policy_document = copy.deepcopy(self.policy_document)
-        self.expected_policy_document.get("Statement").append(json.loads(
-            self.expected_statement))
+        self.expected_policy_document.get("Statement").append(
+            json.loads(self.expected_statement)
+        )
 
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
@@ -155,21 +180,27 @@ class TestUpdateAssumeRolePolicy(BaseAWS
     # Use case: Initial trust policy document does not have Statements section
     # Expected results: Operation is performed by client to update
     # the trust policy in expected format
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_policy_document_has_missing_key(self,
-                                             get_account_id_patch,
-                                             get_oidc_issuer_id_patch,
-                                             get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_policy_document_has_missing_key(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         del self.policy_document["Statement"]
 
         self.expected_policy_document = copy.deepcopy(self.policy_document)
-        self.expected_policy_document["Statement"] = [json.loads(
-            self.expected_statement)]
+        self.expected_policy_document["Statement"] = [
+            json.loads(self.expected_statement)
+        ]
 
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
@@ -181,21 +212,27 @@ class TestUpdateAssumeRolePolicy(BaseAWS
     # Use case: Initial trust policy document has empty Statements section
     # Expected results: Operation is performed by client to update
     # the trust policy in expected format
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_policy_document_has_empty_statements(self,
-                                                  get_account_id_patch,
-                                                  get_oidc_issuer_id_patch,
-                                                  get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_policy_document_has_empty_statements(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         del self.policy_document.get("Statement")[:]
 
         self.expected_policy_document = copy.deepcopy(self.policy_document)
-        self.expected_policy_document.get("Statement").append(json.loads(
-            self.expected_statement))
+        self.expected_policy_document.get("Statement").append(
+            json.loads(self.expected_statement)
+        )
 
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
@@ -207,36 +244,49 @@ class TestUpdateAssumeRolePolicy(BaseAWS
     # Use case: Expected trust policy does not exist and user performs a dry run
     # Expected results: No operation is performed by client
     # The command should print the expected policy document to stdout
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_trust_policy_does_not_exist_dry_run(self, get_account_id_patch,
-                                                 get_oidc_issuer_id_patch,
-                                                 get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_trust_policy_does_not_exist_dry_run(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
         get_account_id_patch.return_value = self.account_id
 
         output = self.run_cmd(self.command + " --dry-run", expected_rc=0)
         self.assertEqual(len(self.operations_called), 0)
-        self.assertTrue(json_matches(json.loads(output[0]),
-                                     self.expected_policy_document))
+        self.assertTrue(
+            json_matches(json.loads(output[0]), self.expected_policy_document)
+        )
 
     # Use case: Expected trust policy already exists
     # Expected results: No operation is performed by client
     # The command should print that the trust policy statement already exists
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_trust_policy_exists(self, get_account_id_patch,
-                                 get_oidc_issuer_id_patch,
-                                 get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_trust_policy_exists(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         self.policy_document = self.expected_policy_document
 
         get_assume_role_policy_patch.return_value = self.policy_document
@@ -245,30 +295,37 @@ class TestUpdateAssumeRolePolicy(BaseAWS
 
         output = self.run_cmd(self.command, expected_rc=0)
         self.assertEqual(len(self.operations_called), 0)
-        self.assertTrue(TRUST_POLICY_STATEMENT_ALREADY_EXISTS % self.role_name
-                        in output[0])
+        self.assertTrue(
+            TRUST_POLICY_STATEMENT_ALREADY_EXISTS % self.role_name in output[0]
+        )
 
     # Use case: Expected trust policy does not exist in cn-north-1
     # Expected results: Operation is performed by client in cn-north-1
     # to update the trust policy in expected format
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'iam.IAM.get_assume_role_policy')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_oidc_issuer_id')
-    @mock.patch('awscli.customizations.emrcontainers.'
-                'eks.EKS.get_account_id')
-    def test_trust_policy_does_not_exist_in_cn(self,
-                                               get_account_id_patch,
-                                               get_oidc_issuer_id_patch,
-                                               get_assume_role_policy_patch):
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'iam.IAM.get_assume_role_policy'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_oidc_issuer_id'
+    )
+    @mock.patch(
+        'awscli.customizations.emrcontainers.' 'eks.EKS.get_account_id'
+    )
+    def test_trust_policy_does_not_exist_in_cn(
+        self,
+        get_account_id_patch,
+        get_oidc_issuer_id_patch,
+        get_assume_role_policy_patch,
+    ):
         get_assume_role_policy_patch.return_value = self.policy_document
         get_oidc_issuer_id_patch.return_value = self.oidc_provider
         get_account_id_patch.return_value = self.account_id
         self.command += ' --region cn-north-1'
 
         output = self.run_cmd(self.command, expected_rc=0)
-        self.assert_trust_policy_updated(output[0],
-                                         self.expected_policy_document_cn)
+        self.assert_trust_policy_updated(
+            output[0], self.expected_policy_document_cn
+        )
 
 
 if __name__ == "__main__":
diff -pruN 2.23.6-1/tests/unit/customizations/gamelift/__init__.py 2.31.35-1/tests/unit/customizations/gamelift/__init__.py
--- 2.23.6-1/tests/unit/customizations/gamelift/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/gamelift/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,13 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
-from awscli.testutils import mock
-from awscli.customizations.gamelift import register_gamelift_commands
-from awscli.customizations.gamelift import inject_commands
-from awscli.customizations.gamelift.uploadbuild import UploadBuildCommand
+from awscli.customizations.gamelift import (
+    inject_commands,
+    register_gamelift_commands,
+)
 from awscli.customizations.gamelift.getlog import GetGameSessionLogCommand
+from awscli.customizations.gamelift.uploadbuild import UploadBuildCommand
+from awscli.testutils import mock, unittest
 
 
 class TestRegisterGameLiftCommands(unittest.TestCase):
@@ -23,7 +24,8 @@ class TestRegisterGameLiftCommands(unitt
         event_emitter = mock.Mock()
         register_gamelift_commands(event_emitter)
         event_emitter.register.assert_called_once_with(
-            'building-command-table.gamelift', inject_commands)
+            'building-command-table.gamelift', inject_commands
+        )
 
 
 class TestInjectCommands(unittest.TestCase):
@@ -33,7 +35,9 @@ class TestInjectCommands(unittest.TestCa
         inject_commands(command_table, session)
         self.assertIn('upload-build', command_table)
         self.assertIsInstance(
-            command_table['upload-build'], UploadBuildCommand)
+            command_table['upload-build'], UploadBuildCommand
+        )
         self.assertIn('get-game-session-log', command_table)
         self.assertIsInstance(
-            command_table['get-game-session-log'], GetGameSessionLogCommand)
+            command_table['get-game-session-log'], GetGameSessionLogCommand
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/gamelift/test_getlog.py 2.31.35-1/tests/unit/customizations/gamelift/test_getlog.py
--- 2.23.6-1/tests/unit/customizations/gamelift/test_getlog.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/gamelift/test_getlog.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,20 +10,21 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from argparse import Namespace
 import os
+from argparse import Namespace
 
 from botocore.session import get_session
 
-from awscli.testutils import unittest, mock, FileCreator
-from awscli.customizations.gamelift.getlog import GetGameSessionLogCommand
 from awscli.compat import BytesIO
+from awscli.customizations.gamelift.getlog import GetGameSessionLogCommand
+from awscli.testutils import FileCreator, mock, unittest
 
 
 class TestGetGameSessionLogCommand(unittest.TestCase):
     def setUp(self):
         self.create_client_patch = mock.patch(
-            'botocore.session.Session.create_client')
+            'botocore.session.Session.create_client'
+        )
         self.mock_create_client = self.create_client_patch.start()
         self.session = get_session()
 
@@ -35,7 +36,8 @@ class TestGetGameSessionLogCommand(unitt
         self.contents = b'mycontents'
         self.file_creator = FileCreator()
         self.urlopen_patch = mock.patch(
-            'awscli.customizations.gamelift.getlog.urlopen')
+            'awscli.customizations.gamelift.getlog.urlopen'
+        )
         self.urlopen_mock = self.urlopen_patch.start()
         self.urlopen_mock.return_value = BytesIO(self.contents)
 
@@ -48,10 +50,7 @@ class TestGetGameSessionLogCommand(unitt
         session_id = 'mysessionid'
         save_as = os.path.join(self.file_creator.rootdir, 'mylog')
 
-        args = [
-            '--game-session-id', session_id,
-            '--save-as', save_as
-        ]
+        args = ['--game-session-id', session_id, '--save-as', save_as]
         global_args = Namespace()
         global_args.region = 'us-west-2'
         global_args.endpoint_url = None
@@ -67,13 +66,13 @@ class TestGetGameSessionLogCommand(unitt
 
         # Ensure the client was created properly
         self.mock_create_client.assert_called_once_with(
-            'gamelift', region_name='us-west-2', endpoint_url=None,
-            verify=None
+            'gamelift', region_name='us-west-2', endpoint_url=None, verify=None
         )
 
         # Ensure the client was called correctly
         self.client.get_game_session_log_url.assert_called_once_with(
-            GameSessionId=session_id)
+            GameSessionId=session_id
+        )
 
         # Ensure the presigned url was used
         self.urlopen_mock.assert_called_once_with(presigned_url)
diff -pruN 2.23.6-1/tests/unit/customizations/gamelift/test_uploadbuild.py 2.31.35-1/tests/unit/customizations/gamelift/test_uploadbuild.py
--- 2.23.6-1/tests/unit/customizations/gamelift/test_uploadbuild.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/gamelift/test_uploadbuild.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,32 +10,36 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from argparse import Namespace
 import contextlib
 import os
 import zipfile
+from argparse import Namespace
 
-from botocore.session import get_session
 from botocore.exceptions import ClientError
+from botocore.session import get_session
 
-from awscli.testutils import unittest, mock, FileCreator
-from awscli.customizations.gamelift.uploadbuild import UploadBuildCommand
-from awscli.customizations.gamelift.uploadbuild import zip_directory
-from awscli.customizations.gamelift.uploadbuild import validate_directory
 from awscli.compat import StringIO
+from awscli.customizations.gamelift.uploadbuild import (
+    UploadBuildCommand,
+    validate_directory,
+    zip_directory,
+)
+from awscli.testutils import FileCreator, mock, unittest
 
 
 class TestGetGameSessionLogCommand(unittest.TestCase):
     def setUp(self):
         self.create_client_patch = mock.patch(
-            'botocore.session.Session.create_client')
+            'botocore.session.Session.create_client'
+        )
         self.mock_create_client = self.create_client_patch.start()
         self.session = get_session()
 
         self.gamelift_client = mock.Mock()
         self.s3_client = mock.Mock()
         self.mock_create_client.side_effect = [
-            self.gamelift_client, self.s3_client
+            self.gamelift_client,
+            self.s3_client,
         ]
 
         self.file_creator = FileCreator()
@@ -60,8 +64,12 @@ class TestGetGameSessionLogCommand(unitt
         self.build_root = self.file_creator.rootdir
 
         self.args = [
-            '--name', self.build_name, '--build-version', self.build_version,
-            '--build-root', self.build_root
+            '--name',
+            self.build_name,
+            '--build-version',
+            self.build_version,
+            '--build-root',
+            self.build_root,
         ]
 
         self.global_args = Namespace()
@@ -78,21 +86,16 @@ class TestGetGameSessionLogCommand(unitt
         self.session_token = 'mytoken'
 
         self.gamelift_client.create_build.return_value = {
-            'Build': {
-                'BuildId': self.build_id
-            }
+            'Build': {'BuildId': self.build_id}
         }
 
         self.gamelift_client.request_upload_credentials.return_value = {
-            'StorageLocation': {
-                'Bucket': self.bucket,
-                'Key': self.key
-            },
+            'StorageLocation': {'Bucket': self.bucket, 'Key': self.key},
             'UploadCredentials': {
                 'AccessKeyId': self.access_key,
                 'SecretAccessKey': self.secret_key,
-                'SessionToken': self.session_token
-            }
+                'SessionToken': self.session_token,
+            },
         }
 
     def test_upload_build(self):
@@ -102,25 +105,37 @@ class TestGetGameSessionLogCommand(unitt
         client_creation_args = self.mock_create_client.call_args_list
         self.assertEqual(
             client_creation_args,
-            [mock.call('gamelift', region_name=self.region,
-                       endpoint_url=None, verify=None),
-             mock.call('s3', aws_access_key_id=self.access_key,
-                       aws_secret_access_key=self.secret_key,
-                       aws_session_token=self.session_token,
-                       region_name=self.region,
-                       verify=None)]
+            [
+                mock.call(
+                    'gamelift',
+                    region_name=self.region,
+                    endpoint_url=None,
+                    verify=None,
+                ),
+                mock.call(
+                    's3',
+                    aws_access_key_id=self.access_key,
+                    aws_secret_access_key=self.secret_key,
+                    aws_session_token=self.session_token,
+                    region_name=self.region,
+                    verify=None,
+                ),
+            ],
         )
 
         # Ensure the GameLift client was called correctly.
         self.gamelift_client.create_build.assert_called_once_with(
-            Name=self.build_name, Version=self.build_version)
+            Name=self.build_name, Version=self.build_version
+        )
 
-        self.gamelift_client.request_upload_credentials.\
-            assert_called_once_with(BuildId=self.build_id)
+        self.gamelift_client.request_upload_credentials.assert_called_once_with(
+            BuildId=self.build_id
+        )
 
         # Ensure the underlying S3 transfer call was correct.
         self.upload_file_mock.assert_called_once_with(
-            mock.ANY, self.bucket, self.key, callback=mock.ANY)
+            mock.ANY, self.bucket, self.key, callback=mock.ANY
+        )
 
         tempfile_path = self.upload_file_mock.call_args[0][0]
         # Ensure the temporary zipfile is deleted at the end.
@@ -130,16 +145,23 @@ class TestGetGameSessionLogCommand(unitt
         operating_system = 'WINDOWS_2012'
         self.file_creator.create_file('tmpfile', 'Some contents')
         self.args = [
-            '--name', self.build_name, '--build-version', self.build_version,
-            '--build-root', self.build_root,
-            '--operating-system', operating_system
+            '--name',
+            self.build_name,
+            '--build-version',
+            self.build_version,
+            '--build-root',
+            self.build_root,
+            '--operating-system',
+            operating_system,
         ]
         self.cmd(self.args, self.global_args)
 
         # Ensure the GameLift client was called correctly.
         self.gamelift_client.create_build.assert_called_once_with(
-            Name=self.build_name, Version=self.build_version,
-            OperatingSystem=operating_system)
+            Name=self.build_name,
+            Version=self.build_version,
+            OperatingSystem=operating_system,
+        )
 
     def test_error_message_when_directory_is_empty(self):
         with mock.patch('sys.stderr', StringIO()) as mock_stderr:
@@ -148,14 +170,17 @@ class TestGetGameSessionLogCommand(unitt
                 mock_stderr.getvalue(),
                 'Fail to upload %s. '
                 'The build root directory is empty or does not exist.\n'
-                % (self.build_root)
+                % (self.build_root),
             )
 
     def test_error_message_when_directory_is_not_provided(self):
         self.args = [
-            '--name', self.build_name,
-            '--build-version', self.build_version,
-            '--build-root', ''
+            '--name',
+            self.build_name,
+            '--build-version',
+            self.build_version,
+            '--build-root',
+            '',
         ]
 
         with mock.patch('sys.stderr', StringIO()) as mock_stderr:
@@ -163,16 +188,20 @@ class TestGetGameSessionLogCommand(unitt
             self.assertEqual(
                 mock_stderr.getvalue(),
                 'Fail to upload %s. '
-                'The build root directory is empty or does not exist.\n' % ('')
+                'The build root directory is empty or does not exist.\n'
+                % (''),
             )
 
     def test_error_message_when_directory_does_not_exist(self):
         dir_not_exist = os.path.join(self.build_root, 'does_not_exist')
 
         self.args = [
-            '--name', self.build_name,
-            '--build-version', self.build_version,
-            '--build-root', dir_not_exist
+            '--name',
+            self.build_name,
+            '--build-version',
+            self.build_version,
+            '--build-root',
+            dir_not_exist,
         ]
 
         with mock.patch('sys.stderr', StringIO()) as mock_stderr:
@@ -181,12 +210,13 @@ class TestGetGameSessionLogCommand(unitt
                 mock_stderr.getvalue(),
                 'Fail to upload %s. '
                 'The build root directory is empty or does not exist.\n'
-                % (dir_not_exist)
+                % (dir_not_exist),
             )
 
     def test_temporary_file_does_exist_when_fails(self):
         self.upload_file_mock.side_effect = ClientError(
-            {'Error': {'Code': 403, 'Message': 'No Access'}}, 'PutObject')
+            {'Error': {'Code': 403, 'Message': 'No Access'}}, 'PutObject'
+        )
         with self.assertRaises(ClientError):
             self.file_creator.create_file('tmpfile', 'Some contents')
             self.cmd(self.args, self.global_args)
@@ -198,16 +228,23 @@ class TestGetGameSessionLogCommand(unitt
         server_sdk_version = '4.0.2'
         self.file_creator.create_file('tmpfile', 'Some contents')
         self.args = [
-            '--name', self.build_name, '--build-version', self.build_version,
-            '--build-root', self.build_root,
-            '--server-sdk-version', server_sdk_version
+            '--name',
+            self.build_name,
+            '--build-version',
+            self.build_version,
+            '--build-root',
+            self.build_root,
+            '--server-sdk-version',
+            server_sdk_version,
         ]
         self.cmd(self.args, self.global_args)
 
         # Ensure the GameLift client was called correctly.
         self.gamelift_client.create_build.assert_called_once_with(
-            Name=self.build_name, Version=self.build_version,
-            ServerSdkVersion=server_sdk_version)
+            Name=self.build_name,
+            Version=self.build_version,
+            ServerSdkVersion=server_sdk_version,
+        )
 
 
 class TestZipDirectory(unittest.TestCase):
@@ -225,11 +262,13 @@ class TestZipDirectory(unittest.TestCase
 
     def add_to_directory(self, filename):
         self.file_creator.create_file(
-            os.path.join(self._dir_root, filename), 'Some contents')
+            os.path.join(self._dir_root, filename), 'Some contents'
+        )
 
     def assert_contents_of_zip_file(self, filenames):
         zip_file_object = zipfile.ZipFile(
-            self.zip_file, 'r', zipfile.ZIP_DEFLATED)
+            self.zip_file, 'r', zipfile.ZIP_DEFLATED
+        )
         with contextlib.closing(zip_file_object) as zf:
             ref_zipfiles = []
             zipfile_contents = zf.namelist()
diff -pruN 2.23.6-1/tests/unit/customizations/history/test_db.py 2.31.35-1/tests/unit/customizations/history/test_db.py
--- 2.23.6-1/tests/unit/customizations/history/test_db.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/history/test_db.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,25 +10,27 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import datetime
+import json
+import numbers
 import os
 import re
-import json
 import threading
-import datetime
-import numbers
 
 from awscli.compat import queue
-from awscli.customizations.history.db import DatabaseConnection
-from awscli.customizations.history.db import DatabaseHistoryHandler
-from awscli.customizations.history.db import DatabaseRecordWriter
-from awscli.customizations.history.db import DatabaseRecordReader
-from awscli.customizations.history.db import PayloadSerializer
-from awscli.customizations.history.db import RecordBuilder
-from awscli.testutils import mock, unittest, FileCreator
+from awscli.customizations.history.db import (
+    DatabaseConnection,
+    DatabaseHistoryHandler,
+    DatabaseRecordReader,
+    DatabaseRecordWriter,
+    PayloadSerializer,
+    RecordBuilder,
+)
+from awscli.testutils import FileCreator, mock, unittest
 from tests import CaseInsensitiveDict
 
 
-class FakeDatabaseConnection(object):
+class FakeDatabaseConnection:
     def __init__(self):
         self.execute = mock.MagicMock()
         self.closed = False
@@ -48,11 +50,13 @@ class TestGetHistoryDBFilename(unittest.
 class TestDatabaseConnection(unittest.TestCase):
     @mock.patch('awscli.compat.sqlite3.connect')
     def test_can_connect_to_argument_file(self, mock_connect):
-        expected_location = os.path.expanduser(os.path.join(
-            '~', 'foo', 'bar', 'baz.db'))
+        expected_location = os.path.expanduser(
+            os.path.join('~', 'foo', 'bar', 'baz.db')
+        )
         DatabaseConnection(expected_location)
         mock_connect.assert_called_with(
-            expected_location, check_same_thread=False, isolation_level=None)
+            expected_location, check_same_thread=False, isolation_level=None
+        )
 
     @mock.patch('awscli.compat.sqlite3.connect')
     def test_does_try_to_enable_wal(self, mock_connect):
@@ -84,8 +88,7 @@ class TestDatabaseConnection(unittest.Te
 
 class TestDatabaseHistoryHandler(unittest.TestCase):
     UUID_PATTERN = re.compile(
-        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$',
-        re.I
+        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', re.I
     )
 
     def test_emit_does_write_cli_rc_record(self):
@@ -94,13 +97,16 @@ class TestDatabaseHistoryHandler(unittes
         handler = DatabaseHistoryHandler(writer, record_builder)
         handler.emit('CLI_RC', 0, 'CLI')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'event_type': 'CLI_RC',
-                    'payload': 0,
-                    'source': 'CLI',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'event_type': 'CLI_RC',
+                'payload': 0,
+                'source': 'CLI',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertIsInstance(call['timestamp'], numbers.Number)
 
@@ -110,13 +116,16 @@ class TestDatabaseHistoryHandler(unittes
         handler = DatabaseHistoryHandler(writer, record_builder)
         handler.emit('CLI_VERSION', 'Version Info', 'CLI')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'event_type': 'CLI_VERSION',
-                    'payload': 'Version Info',
-                    'source': 'CLI',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'event_type': 'CLI_VERSION',
+                'payload': 'Version Info',
+                'source': 'CLI',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertIsInstance(call['timestamp'], numbers.Number)
 
@@ -127,14 +136,17 @@ class TestDatabaseHistoryHandler(unittes
         payload = {'foo': 'bar'}
         handler.emit('API_CALL', payload, 'BOTOCORE')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'request_id': mock.ANY,
-                    'event_type': 'API_CALL',
-                    'payload': payload,
-                    'source': 'BOTOCORE',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'request_id': mock.ANY,
+                'event_type': 'API_CALL',
+                'payload': payload,
+                'source': 'BOTOCORE',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertTrue(self.UUID_PATTERN.match(call['request_id']))
 
@@ -148,14 +160,17 @@ class TestDatabaseHistoryHandler(unittes
         handler.emit('API_CALL', '', 'BOTOCORE')
         handler.emit('HTTP_REQUEST', payload, 'BOTOCORE')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'request_id': mock.ANY,
-                    'event_type': 'HTTP_REQUEST',
-                    'payload': payload,
-                    'source': 'BOTOCORE',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'request_id': mock.ANY,
+                'event_type': 'HTTP_REQUEST',
+                'payload': payload,
+                'source': 'BOTOCORE',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertTrue(self.UUID_PATTERN.match(call['request_id']))
 
@@ -169,14 +184,17 @@ class TestDatabaseHistoryHandler(unittes
         handler.emit('API_CALL', '', 'BOTOCORE')
         handler.emit('HTTP_RESPONSE', payload, 'BOTOCORE')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'request_id': mock.ANY,
-                    'event_type': 'HTTP_RESPONSE',
-                    'payload': payload,
-                    'source': 'BOTOCORE',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'request_id': mock.ANY,
+                'event_type': 'HTTP_RESPONSE',
+                'payload': payload,
+                'source': 'BOTOCORE',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertTrue(self.UUID_PATTERN.match(call['request_id']))
 
@@ -190,14 +208,17 @@ class TestDatabaseHistoryHandler(unittes
         handler.emit('API_CALL', '', 'BOTOCORE')
         handler.emit('PARSED_RESPONSE', payload, 'BOTOCORE')
         call = writer.write_record.call_args[0][0]
-        self.assertEqual(call, {
-                    'command_id': mock.ANY,
-                    'request_id': mock.ANY,
-                    'event_type': 'PARSED_RESPONSE',
-                    'payload': payload,
-                    'source': 'BOTOCORE',
-                    'timestamp': mock.ANY
-        })
+        self.assertEqual(
+            call,
+            {
+                'command_id': mock.ANY,
+                'request_id': mock.ANY,
+                'event_type': 'PARSED_RESPONSE',
+                'payload': payload,
+                'source': 'BOTOCORE',
+                'timestamp': mock.ANY,
+            },
+        )
         self.assertTrue(self.UUID_PATTERN.match(call['command_id']))
         self.assertTrue(self.UUID_PATTERN.match(call['request_id']))
 
@@ -207,13 +228,12 @@ class BaseDatabaseRecordTester(unittest.
         for line in lines:
             self.assertIn(line, contents)
             beginning = contents.find(line)
-            contents = contents[(beginning + len(line)):]
+            contents = contents[(beginning + len(line)) :]
 
 
 class BaseDatabaseRecordWriterTester(BaseDatabaseRecordTester):
     UUID_PATTERN = re.compile(
-        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$',
-        re.I
+        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', re.I
     )
 
     def setUp(self):
@@ -237,180 +257,233 @@ class TestDatabaseRecordWriter(BaseDatab
         self.assertTrue(connection.close.called)
 
     def test_can_write_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'FOO',
-            'payload': 'bar',
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'FOO',
+                'payload': 'bar',
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         # Now that we have verified the order of the fields in the insert
         # statement we can verify that the record values are in the correct
         # order in the tuple.
         # (command_id, request_id, source, event_type, timestamp, payload)
         written_record = self._read_last_record()
-        self.assertEqual(written_record,
-                         ('command', None, 'TEST', 'FOO', 1234, '"bar"'))
+        self.assertEqual(
+            written_record, ('command', None, 'TEST', 'FOO', 1234, '"bar"')
+        )
 
     def test_commit_count_matches_write_count(self):
         records_to_write = 10
         for _ in range(records_to_write):
-            self.writer.write_record({
-                'command_id': 'command',
-                'event_type': 'foo',
-                'payload': '',
-                'source': 'TEST',
-                'timestamp': 1234
-            })
+            self.writer.write_record(
+                {
+                    'command_id': 'command',
+                    'event_type': 'foo',
+                    'payload': '',
+                    'source': 'TEST',
+                    'timestamp': 1234,
+                }
+            )
         cursor = self.db.execute('SELECT COUNT(*) FROM records')
         record_count = cursor.fetchone()[0]
 
         self.assertEqual(record_count, records_to_write)
 
     def test_can_write_cli_version_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'CLI_VERSION',
-            'payload': ('aws-cli/1.11.184 Python/3.6.2 Darwin/15.6.0 '
-                        'botocore/1.7.42'),
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'CLI_VERSION',
+                'payload': (
+                    'aws-cli/1.11.184 Python/3.6.2 Darwin/15.6.0 '
+                    'botocore/1.7.42'
+                ),
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
         written_record = self._read_last_record()
 
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'CLI_VERSION', 1234,
-             '"aws-cli/1.11.184 Python/3.6.2 Darwin/15.6.0 botocore/1.7.42"')
+            (
+                'command',
+                None,
+                'TEST',
+                'CLI_VERSION',
+                1234,
+                '"aws-cli/1.11.184 Python/3.6.2 Darwin/15.6.0 botocore/1.7.42"',
+            ),
         )
 
     def test_can_write_cli_arguments_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'CLI_ARGUMENTS',
-            'payload': ['s3', 'ls'],
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'CLI_ARGUMENTS',
+                'payload': ['s3', 'ls'],
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'CLI_ARGUMENTS', 1234, '["s3", "ls"]')
+            ('command', None, 'TEST', 'CLI_ARGUMENTS', 1234, '["s3", "ls"]'),
         )
 
     def test_can_write_api_call_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'API_CALL',
-            'payload': {
-                'service': 's3',
-                'operation': 'ListBuckets',
-                'params': {},
-            },
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'API_CALL',
+                'payload': {
+                    'service': 's3',
+                    'operation': 'ListBuckets',
+                    'params': {},
+                },
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'API_CALL', 1234, json.dumps({
-                'service': 's3',
-                'operation': 'ListBuckets',
-                'params': {},
-            }))
+            (
+                'command',
+                None,
+                'TEST',
+                'API_CALL',
+                1234,
+                json.dumps(
+                    {
+                        'service': 's3',
+                        'operation': 'ListBuckets',
+                        'params': {},
+                    }
+                ),
+            ),
         )
 
     def test_can_write_http_request_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'HTTP_REQUEST',
-            'payload': {
-                'method': 'GET',
-                'headers': CaseInsensitiveDict({}),
-                'body': '...',
-            },
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'HTTP_REQUEST',
+                'payload': {
+                    'method': 'GET',
+                    'headers': CaseInsensitiveDict({}),
+                    'body': '...',
+                },
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'HTTP_REQUEST', 1234, json.dumps({
-                'method': 'GET',
-                'headers': {},
-                'body': '...',
-            }))
+            (
+                'command',
+                None,
+                'TEST',
+                'HTTP_REQUEST',
+                1234,
+                json.dumps(
+                    {
+                        'method': 'GET',
+                        'headers': {},
+                        'body': '...',
+                    }
+                ),
+            ),
         )
 
     def test_can_write_http_response_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'HTTP_RESPONSE',
-            'payload': {
-                'streaming': False,
-                'headers': {},
-                'body': '...',
-                'status_code': 200,
-                'request_id': '1234abcd'
-            },
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'HTTP_RESPONSE',
+                'payload': {
+                    'streaming': False,
+                    'headers': {},
+                    'body': '...',
+                    'status_code': 200,
+                    'request_id': '1234abcd',
+                },
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'HTTP_RESPONSE', 1234, json.dumps({
-                'streaming': False,
-                'headers': {},
-                'body': '...',
-                'status_code': 200,
-                'request_id': '1234abcd'
-            }))
+            (
+                'command',
+                None,
+                'TEST',
+                'HTTP_RESPONSE',
+                1234,
+                json.dumps(
+                    {
+                        'streaming': False,
+                        'headers': {},
+                        'body': '...',
+                        'status_code': 200,
+                        'request_id': '1234abcd',
+                    }
+                ),
+            ),
         )
 
     def test_can_write_parsed_response_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'PARSED_RESPONSE',
-            'payload': {},
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'PARSED_RESPONSE',
+                'payload': {},
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
             written_record,
-            ('command', None, 'TEST', 'PARSED_RESPONSE', 1234, '{}')
+            ('command', None, 'TEST', 'PARSED_RESPONSE', 1234, '{}'),
         )
 
     def test_can_write_cli_rc_record(self):
-        self.writer.write_record({
-            'command_id': 'command',
-            'event_type': 'CLI_RC',
-            'payload': 0,
-            'source': 'TEST',
-            'timestamp': 1234
-        })
+        self.writer.write_record(
+            {
+                'command_id': 'command',
+                'event_type': 'CLI_RC',
+                'payload': 0,
+                'source': 'TEST',
+                'timestamp': 1234,
+            }
+        )
 
         written_record = self._read_last_record()
         self.assertEqual(
-            written_record,
-            ('command', None, 'TEST', 'CLI_RC', 1234, '0')
+            written_record, ('command', None, 'TEST', 'CLI_RC', 1234, '0')
         )
 
 
-class ThreadedRecordBuilder(object):
+class ThreadedRecordBuilder:
     def __init__(self, tracker):
         self._read_q = queue.Queue()
         self._write_q = queue.Queue()
         self._thread = threading.Thread(
-            target=self._threaded_request_tracker,
-            args=(tracker,))
+            target=self._threaded_request_tracker, args=(tracker,)
+        )
 
     def _threaded_request_tracker(self, builder):
         while True:
@@ -498,8 +571,9 @@ class TestDatabaseRecordReader(BaseDatab
         self.assertTrue(self.fake_connection.closed)
 
     def test_row_factory_set(self):
-        self.assertEqual(self.fake_connection.row_factory,
-                         self.reader._row_factory)
+        self.assertEqual(
+            self.fake_connection.row_factory, self.reader._row_factory
+        )
 
     def test_iter_latest_records_performs_correct_query(self):
         expected_query = (
@@ -511,27 +585,32 @@ class TestDatabaseRecordReader(BaseDatab
         [_ for _ in self.reader.iter_latest_records()]
         self.assertEqual(
             self.fake_connection.execute.call_args[0][0].strip(),
-            expected_query.strip())
+            expected_query.strip(),
+        )
 
     def test_iter_latest_records_does_iter_records(self):
         records_to_get = [1, 2, 3]
         self.fake_connection.execute.return_value.__iter__.return_value = iter(
-            records_to_get)
+            records_to_get
+        )
         records = [r for r in self.reader.iter_latest_records()]
         self.assertEqual(records, records_to_get)
 
     def test_iter_records_performs_correct_query(self):
-        expected_query = ('SELECT * from records where id = ? '
-                          'ORDER BY timestamp')
+        expected_query = (
+            'SELECT * from records where id = ? ' 'ORDER BY timestamp'
+        )
         [_ for _ in self.reader.iter_records('fake_id')]
         self.assertEqual(
             self.fake_connection.execute.call_args[0][0].strip(),
-            expected_query.strip())
+            expected_query.strip(),
+        )
 
     def test_iter_records_does_iter_records(self):
         records_to_get = [1, 2, 3]
         self.fake_connection.execute.return_value.__iter__.return_value = iter(
-            records_to_get)
+            records_to_get
+        )
         records = [r for r in self.reader.iter_records('fake_id')]
         self.assertEqual(records, records_to_get)
 
@@ -542,10 +621,8 @@ class TestPayloadSerialzier(unittest.Tes
             'string': 'foo',
             'int': 4,
             'list': [1, 2, 'bar'],
-            'dict': {
-                'sun': 'moon'
-            },
-            'float': 1.2
+            'dict': {'sun': 'moon'},
+            'float': 1.2,
         }
         string_value = json.dumps(original, cls=PayloadSerializer)
         reloaded = json.loads(string_value)
@@ -559,9 +636,7 @@ class TestPayloadSerialzier(unittest.Tes
         self.assertEqual(iso_now, reloaded)
 
     def test_can_serialize_case_insensitive_dict(self):
-        original = CaseInsensitiveDict({
-            'fOo': 'bar'
-        })
+        original = CaseInsensitiveDict({'fOo': 'bar'})
         string_value = json.dumps(original, cls=PayloadSerializer)
         reloaded = json.loads(string_value)
         self.assertEqual(original, reloaded)
@@ -615,8 +690,8 @@ class TestPayloadSerialzier(unittest.Tes
             'list': ['foo', b'\xfe\xed'],
             'more_nesting': {
                 'bytes': b'\xfe\xed',
-                'tuple': ('bar', 'baz', b'\xfe\xed')
-            }
+                'tuple': ('bar', 'baz', b'\xfe\xed'),
+            },
         }
         encoded = {
             'foo': 'bar',
@@ -624,8 +699,8 @@ class TestPayloadSerialzier(unittest.Tes
             'list': ['foo', '<Byte sequence>'],
             'more_nesting': {
                 'bytes': '<Byte sequence>',
-                'tuple': ['bar', 'baz', '<Byte sequence>']
-            }
+                'tuple': ['bar', 'baz', '<Byte sequence>'],
+            },
         }
         string_value = json.dumps(original, cls=PayloadSerializer)
         reloaded = json.loads(string_value)
@@ -634,8 +709,7 @@ class TestPayloadSerialzier(unittest.Tes
 
 class TestRecordBuilder(unittest.TestCase):
     UUID_PATTERN = re.compile(
-        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$',
-        re.I
+        '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$', re.I
     )
 
     def setUp(self):
@@ -684,7 +758,8 @@ class TestRecordBuilder(unittest.TestCas
     def test_does_get_id_for_http_request_with_api_call(self):
         call_identifier = self._get_request_id_for_event_type('API_CALL')
         request_identifier = self._get_request_id_for_event_type(
-            'HTTP_REQUEST')
+            'HTTP_REQUEST'
+        )
 
         self.assertEqual(call_identifier, request_identifier)
         self.assertTrue(self.UUID_PATTERN.match(call_identifier))
@@ -692,7 +767,8 @@ class TestRecordBuilder(unittest.TestCas
     def test_does_get_id_for_http_response_with_api_call(self):
         call_identifier = self._get_request_id_for_event_type('API_CALL')
         response_identifier = self._get_request_id_for_event_type(
-            'HTTP_RESPONSE')
+            'HTTP_RESPONSE'
+        )
 
         self.assertEqual(call_identifier, response_identifier)
         self.assertTrue(self.UUID_PATTERN.match(call_identifier))
@@ -700,7 +776,8 @@ class TestRecordBuilder(unittest.TestCas
     def test_does_get_id_for_parsed_response_with_api_call(self):
         call_identifier = self._get_request_id_for_event_type('API_CALL')
         response_identifier = self._get_request_id_for_event_type(
-            'PARSED_RESPONSE')
+            'PARSED_RESPONSE'
+        )
 
         self.assertEqual(call_identifier, response_identifier)
         self.assertTrue(self.UUID_PATTERN.match(call_identifier))
@@ -725,29 +802,38 @@ class TestIdentifierLifecycles(unittest.
     def _get_multiple_request_ids(self, events):
         fake_payload = {'body': b''}
         request_ids = [
-            self.builder.build_record(
-                event,
-                fake_payload.copy(),
-                ''
-            )['request_id']
+            self.builder.build_record(event, fake_payload.copy(), '')[
+                'request_id'
+            ]
             for event in events
         ]
         return request_ids
 
     def test_multiple_http_lifecycle_writes_have_same_request_id(self):
         request_ids = self._get_multiple_request_ids(
-             ['API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE']
-         )
+            ['API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE']
+        )
         # All request_ids should match since this is one request lifecycle
         unique_request_ids = set(request_ids)
         self.assertEqual(len(unique_request_ids), 1)
 
     def test_request_id_reset_on_api_call(self):
         request_ids = self._get_multiple_request_ids(
-             ['API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE',
-              'API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE',
-              'API_CALL', 'HTTP_REQUEST', 'HTTP_RESPONSE', 'PARSED_RESPONSE']
-         )
+            [
+                'API_CALL',
+                'HTTP_REQUEST',
+                'HTTP_RESPONSE',
+                'PARSED_RESPONSE',
+                'API_CALL',
+                'HTTP_REQUEST',
+                'HTTP_RESPONSE',
+                'PARSED_RESPONSE',
+                'API_CALL',
+                'HTTP_REQUEST',
+                'HTTP_RESPONSE',
+                'PARSED_RESPONSE',
+            ]
+        )
 
         # There should be three distinct requet_ids since there are three
         # distinct calls that end with a parsed response.
diff -pruN 2.23.6-1/tests/unit/customizations/history/test_filters.py 2.31.35-1/tests/unit/customizations/history/test_filters.py
--- 2.23.6-1/tests/unit/customizations/history/test_filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/history/test_filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,10 +1,9 @@
-from awscli.testutils import unittest
 from awscli.customizations.history.filters import RegexFilter
+from awscli.testutils import unittest
 
 
 class TestRegexFilter(unittest.TestCase):
-    def assert_filter(self, pattern, replacement, input_text,
-                      expected_result):
+    def assert_filter(self, pattern, replacement, input_text, expected_result):
         regex_filter = RegexFilter(pattern, replacement)
         result = regex_filter.filter_text(input_text)
         self.assertEqual(result, expected_result)
diff -pruN 2.23.6-1/tests/unit/customizations/history/test_history.py 2.31.35-1/tests/unit/customizations/history/test_history.py
--- 2.23.6-1/tests/unit/customizations/history/test_history.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/history/test_history.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,17 +13,19 @@
 import argparse
 import os
 
-from botocore.session import Session
-from botocore.history import HistoryRecorder
 from botocore.exceptions import ProfileNotFound
+from botocore.history import HistoryRecorder
+from botocore.session import Session
 
-from awscli.testutils import unittest, mock, FileCreator
 from awscli.compat import StringIO
-from awscli.customizations.history import attach_history_handler
-from awscli.customizations.history import add_history_commands
-from awscli.customizations.history import HistoryCommand
-from awscli.customizations.history.db import DatabaseHistoryHandler
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.history import (
+    HistoryCommand,
+    add_history_commands,
+    attach_history_handler,
+)
+from awscli.customizations.history.db import DatabaseHistoryHandler
+from awscli.testutils import FileCreator, mock, unittest
 
 
 class TestAttachHistoryHandler(unittest.TestCase):
@@ -35,9 +37,12 @@ class TestAttachHistoryHandler(unittest.
 
     @mock.patch('awscli.customizations.history.sqlite3')
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
-    def test_attach_history_handler(self, mock_recorder, mock_db_sqlite3, mock_sqlite3):
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
+    def test_attach_history_handler(
+        self, mock_recorder, mock_db_sqlite3, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.return_value = {
             'cli_history': 'enabled'
@@ -49,15 +54,18 @@ class TestAttachHistoryHandler(unittest.
         attach_history_handler(session=mock_session, parsed_args=parsed_args)
         self.assertEqual(mock_recorder.add_handler.call_count, 1)
         self.assertIsInstance(
-            mock_recorder.add_handler.call_args[0][0], DatabaseHistoryHandler)
+            mock_recorder.add_handler.call_args[0][0], DatabaseHistoryHandler
+        )
         self.assertTrue(mock_db_sqlite3.connect.called)
 
     @mock.patch('awscli.customizations.history.sqlite3')
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
     def test_no_attach_history_handler_when_history_not_configured(
-            self, mock_recorder, mock_db_sqlite3, mock_sqlite3):
+        self, mock_recorder, mock_db_sqlite3, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.return_value = {}
 
@@ -70,10 +78,12 @@ class TestAttachHistoryHandler(unittest.
 
     @mock.patch('awscli.customizations.history.sqlite3')
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
     def test_no_attach_history_handler_when_command_is_history(
-            self, mock_recorder, mock_db_sqlite3, mock_sqlite3):
+        self, mock_recorder, mock_db_sqlite3, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.return_value = {
             'cli_history': 'enabled'
@@ -88,10 +98,12 @@ class TestAttachHistoryHandler(unittest.
 
     @mock.patch('awscli.customizations.history.sqlite3', None)
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
     def test_no_attach_history_handler_when_no_sqlite3(
-            self, mock_recorder, mock_sqlite3):
+        self, mock_recorder, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.return_value = {
             'cli_history': 'enabled'
@@ -102,18 +114,22 @@ class TestAttachHistoryHandler(unittest.
 
         with mock.patch('sys.stderr', StringIO()) as mock_stderr:
             attach_history_handler(
-                session=mock_session, parsed_args=parsed_args)
+                session=mock_session, parsed_args=parsed_args
+            )
             self.assertIn(
-                'enabled but sqlite3 is unavailable', mock_stderr.getvalue())
+                'enabled but sqlite3 is unavailable', mock_stderr.getvalue()
+            )
         self.assertFalse(mock_recorder.add_handler.called)
         self.assertFalse(mock_sqlite3.connect.called)
 
     @mock.patch('awscli.customizations.history.sqlite3')
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
-    def test_create_directory_no_exists(self, mock_recorder,
-                                        mock_db_sqlite3, mock_sqlite3):
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
+    def test_create_directory_no_exists(
+        self, mock_recorder, mock_db_sqlite3, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.return_value = {
             'cli_history': 'enabled'
@@ -126,7 +142,8 @@ class TestAttachHistoryHandler(unittest.
         db_filename = os.path.join(directory_to_create, 'name.db')
         with mock.patch('os.environ', {'AWS_CLI_HISTORY_FILE': db_filename}):
             attach_history_handler(
-                session=mock_session, parsed_args=parsed_args)
+                session=mock_session, parsed_args=parsed_args
+            )
             self.assertEqual(mock_recorder.add_handler.call_count, 1)
             # Is should create any missing parent directories of the
             # file as well.
@@ -135,13 +152,16 @@ class TestAttachHistoryHandler(unittest.
 
     @mock.patch('awscli.customizations.history.sqlite3')
     @mock.patch('awscli.customizations.history.db.sqlite3')
-    @mock.patch('awscli.customizations.history.HISTORY_RECORDER',
-                spec=HistoryRecorder)
-    def test_profile_does_not_exist(self, mock_recorder, mock_db_sqlite3,
-                                    mock_sqlite3):
+    @mock.patch(
+        'awscli.customizations.history.HISTORY_RECORDER', spec=HistoryRecorder
+    )
+    def test_profile_does_not_exist(
+        self, mock_recorder, mock_db_sqlite3, mock_sqlite3
+    ):
         mock_session = mock.Mock(Session)
         mock_session.get_scoped_config.side_effect = ProfileNotFound(
-            profile='no-exist')
+            profile='no-exist'
+        )
 
         parsed_args = argparse.Namespace()
         parsed_args.command = 'configure'
@@ -155,8 +175,7 @@ class TestAddHistoryCommand(unittest.Tes
     def test_add_history_command(self):
         command_table = {}
         mock_session = mock.Mock(Session)
-        add_history_commands(
-            command_table=command_table, session=mock_session)
+        add_history_commands(command_table=command_table, session=mock_session)
         self.assertIn('history', command_table)
         self.assertIsInstance(command_table['history'], HistoryCommand)
 
diff -pruN 2.23.6-1/tests/unit/customizations/history/test_list.py 2.31.35-1/tests/unit/customizations/history/test_list.py
--- 2.23.6-1/tests/unit/customizations/history/test_list.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/history/test_list.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,14 +15,15 @@ import datetime
 
 from botocore.session import Session
 
-from awscli.compat import StringIO
-from awscli.compat import ensure_text_type
-from awscli.utils import OutputStreamFactory
-from awscli.testutils import unittest, mock
-from awscli.customizations.history.list import ListCommand
-from awscli.customizations.history.list import RecordAdapter
-from awscli.customizations.history.list import TextFormatter
+from awscli.compat import StringIO, ensure_text_type
 from awscli.customizations.history.db import DatabaseRecordReader
+from awscli.customizations.history.list import (
+    ListCommand,
+    RecordAdapter,
+    TextFormatter,
+)
+from awscli.testutils import mock, unittest
+from awscli.utils import OutputStreamFactory
 
 
 class TestRecordAdapter(unittest.TestCase):
@@ -44,12 +45,7 @@ class TestRecordAdapter(unittest.TestCas
 
 
 class TestTextFormatter(unittest.TestCase):
-    _COL_WIDTHS = {
-        'id_a': 10,
-        'timestamp': 23,
-        'args': 10,
-        'rc': 10
-    }
+    _COL_WIDTHS = {'id_a': 10, 'timestamp': 23, 'args': 10, 'rc': 10}
 
     def setUp(self):
         self.output_stream = StringIO()
@@ -58,58 +54,67 @@ class TestTextFormatter(unittest.TestCas
         self.timestamp = 1511376242067
         command_time = datetime.datetime.fromtimestamp(self.timestamp / 1000)
         self.formatted_time = datetime.datetime.strftime(
-            command_time, '%Y-%m-%d %I:%M:%S %p')
+            command_time, '%Y-%m-%d %I:%M:%S %p'
+        )
 
     def _format_records(self, records):
         adapter = RecordAdapter(iter(records))
         self.formatter(adapter)
 
     def test_can_emit_single_row(self):
-        self._format_records([
-            {
-                'id_a': 'foo',
-                'timestamp': self.timestamp,
-                'args': '["s3", "ls"]',
-                'rc': 0
-            }
-        ])
+        self._format_records(
+            [
+                {
+                    'id_a': 'foo',
+                    'timestamp': self.timestamp,
+                    'args': '["s3", "ls"]',
+                    'rc': 0,
+                }
+            ]
+        )
         expected_output = 'foo       %s s3 ls     0\n' % self.formatted_time
         actual_output = ensure_text_type(self.output_stream.getvalue())
         self.assertEqual(expected_output, actual_output)
 
     def test_can_emit_multiple_rows(self):
-        self._format_records([
-            {
-                'id_a': 'foo',
-                'timestamp': self.timestamp,
-                'args': '["s3", "ls"]',
-                'rc': 0
-            },
-            {
-                'id_a': 'bar',
-                'timestamp': self.timestamp,
-                'args': '["s3", "cp"]',
-                'rc': 1
-            }
-        ])
-        expected_output = ('foo       %s s3 ls     0\n'
-                           'bar       %s s3 cp     1\n') % (
-                               self.formatted_time, self.formatted_time)
+        self._format_records(
+            [
+                {
+                    'id_a': 'foo',
+                    'timestamp': self.timestamp,
+                    'args': '["s3", "ls"]',
+                    'rc': 0,
+                },
+                {
+                    'id_a': 'bar',
+                    'timestamp': self.timestamp,
+                    'args': '["s3", "cp"]',
+                    'rc': 1,
+                },
+            ]
+        )
+        expected_output = (
+            'foo       %s s3 ls     0\n' 'bar       %s s3 cp     1\n'
+        ) % (self.formatted_time, self.formatted_time)
         actual_output = ensure_text_type(self.output_stream.getvalue())
         self.assertEqual(expected_output, actual_output)
 
     def test_can_truncate_args(self):
         # Truncate the argument if it won't fit in the space alotted to the
         # arguments field.
-        self._format_records([
-            {
-                'id_a': 'foo',
-                'timestamp': self.timestamp,
-                'args': ('["s3", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
-                         'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]'),
-                'rc': 0
-            }
-        ])
+        self._format_records(
+            [
+                {
+                    'id_a': 'foo',
+                    'timestamp': self.timestamp,
+                    'args': (
+                        '["s3", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+                        'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]'
+                    ),
+                    'rc': 0,
+                }
+            ]
+        )
         expected_output = 'foo       %s s3 aaa... 0\n' % self.formatted_time
         actual_output = ensure_text_type(self.output_stream.getvalue())
         self.assertEqual(expected_output, actual_output)
@@ -127,14 +132,16 @@ class TestListCommand(unittest.TestCase)
         self.output_stream = mock.Mock()
         output_stream_context.__enter__.return_value = self.output_stream
 
-        self.output_stream_factory.get_output_stream.return_value = \
+        self.output_stream_factory.get_output_stream.return_value = (
             output_stream_context
+        )
 
         self.db_reader = mock.Mock(DatabaseRecordReader)
         self.db_reader.iter_all_records.return_value = iter([])
 
         self.list_cmd = ListCommand(
-            self.session, self.db_reader, self.output_stream_factory)
+            self.session, self.db_reader, self.output_stream_factory
+        )
 
         self.parsed_args = argparse.Namespace()
 
@@ -142,12 +149,7 @@ class TestListCommand(unittest.TestCase)
         self.parsed_globals.color = 'auto'
 
     def _make_record(self, cid, time, args, rc):
-        record = {
-            'id_a': cid,
-            'timestamp': time,
-            'args': args,
-            'rc': rc
-        }
+        record = {'id_a': cid, 'timestamp': time, 'args': args, 'rc': rc}
         return record
 
     def test_does_call_iter_all_records(self):
@@ -156,9 +158,9 @@ class TestListCommand(unittest.TestCase)
         self.assertTrue(self.db_reader.iter_all_records.called)
 
     def test_list_does_write_values_to_stream(self):
-        self.db_reader.iter_all_records.return_value = iter([
-            self._make_record('abc', 1511376242067, '["s3", "ls"]', '0')
-        ])
+        self.db_reader.iter_all_records.return_value = iter(
+            [self._make_record('abc', 1511376242067, '["s3", "ls"]', '0')]
+        )
         self.list_cmd._run_main(self.parsed_args, self.parsed_globals)
         self.assertTrue(self.output_stream.write.called)
 
diff -pruN 2.23.6-1/tests/unit/customizations/history/test_show.py 2.31.35-1/tests/unit/customizations/history/test_show.py
--- 2.23.6-1/tests/unit/customizations/history/test_show.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/history/test_show.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,21 +10,22 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import os
 import argparse
+import os
 import xml.dom.minidom
 
 from botocore.session import Session
 
-from awscli.compat import ensure_text_type
-from awscli.compat import StringIO
-from awscli.utils import OutputStreamFactory
-from awscli.testutils import unittest, mock, FileCreator
-from awscli.customizations.history.show import ShowCommand
-from awscli.customizations.history.show import Formatter
-from awscli.customizations.history.show import DetailedFormatter
-from awscli.customizations.history.db import DatabaseRecordReader
+from awscli.compat import StringIO, ensure_text_type
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.history.db import DatabaseRecordReader
+from awscli.customizations.history.show import (
+    DetailedFormatter,
+    Formatter,
+    ShowCommand,
+)
+from awscli.testutils import FileCreator, mock, unittest
+from awscli.utils import OutputStreamFactory
 
 
 class FakeError(Exception):
@@ -34,7 +35,8 @@ class FakeError(Exception):
 class RecordingFormatter(Formatter):
     def __init__(self, output=None, include=None, exclude=None):
         super(RecordingFormatter, self).__init__(
-            output=output, include=include, exclude=exclude)
+            output=output, include=include, exclude=exclude
+        )
         self.history = []
 
     def _display(self, event_record):
@@ -48,13 +50,7 @@ class TestFormatter(unittest.TestCase):
         other_event_record = {'event_type': 'my_other_event'}
         formatter.display(event_record)
         formatter.display(other_event_record)
-        self.assertEqual(
-            formatter.history,
-            [
-                event_record,
-                other_event_record
-            ]
-        )
+        self.assertEqual(formatter.history, [event_record, other_event_record])
 
     def test_include_specified_event_type(self):
         formatter = RecordingFormatter(include=['my_event'])
@@ -78,8 +74,7 @@ class TestFormatter(unittest.TestCase):
         formatter = RecordingFormatter(exclude=['my_event'])
         other_event_record = {'event_type': 'my_other_event'}
         formatter.display(other_event_record)
-        self.assertEqual(
-            formatter.history, [other_event_record])
+        self.assertEqual(formatter.history, [other_event_record])
 
     def test_raises_error_when_both_include_and_exclude(self):
         with self.assertRaises(ParamValidationError):
@@ -93,7 +88,7 @@ class TestDetailedFormatter(unittest.Tes
 
     def get_pretty_xml(self, xml_str):
         xml_dom = xml.dom.minidom.parseString(xml_str)
-        return xml_dom.toprettyxml(indent=' '*4, newl='\n')
+        return xml_dom.toprettyxml(indent=' ' * 4, newl='\n')
 
     def assert_output(self, for_event, contains):
         self.formatter.display(for_event)
@@ -108,12 +103,12 @@ class TestDetailedFormatter(unittest.Tes
                 'id': 'my-id',
                 'payload': 'aws-cli/1.11.188',
                 'timestamp': 86400000,
-                'request_id': None
+                'request_id': None,
             },
             contains=[
                 'AWS CLI command entered',
-                'with AWS CLI version: aws-cli/1.11.188'
-            ]
+                'with AWS CLI version: aws-cli/1.11.188',
+            ],
         )
 
     def test_can_use_color(self):
@@ -124,12 +119,12 @@ class TestDetailedFormatter(unittest.Tes
                 'id': 'my-id',
                 'payload': 'aws-cli/1.11.188',
                 'timestamp': 86400000,
-                'request_id': None
+                'request_id': None,
             },
             contains=[
                 '\x1b[1mAWS CLI command entered',
-                '\x1b[36mwith AWS CLI version:'
-            ]
+                '\x1b[36mwith AWS CLI version:',
+            ],
         )
 
     def test_display_cli_arguments(self):
@@ -139,11 +134,9 @@ class TestDetailedFormatter(unittest.Tes
                 'id': 'my-id',
                 'payload': ['ec2', 'describe-regions'],
                 'timestamp': 86400000,
-                'request_id': None
+                'request_id': None,
             },
-            contains=[
-                 "with arguments: ['ec2', 'describe-regions']"
-            ]
+            contains=["with arguments: ['ec2', 'describe-regions']"],
         )
 
     def test_display_api_call(self):
@@ -155,15 +148,15 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'service': 'ec2',
                     'operation': 'DescribeRegions',
-                    'params': {}
+                    'params': {},
                 },
                 'timestamp': 86400000,
             },
             contains=[
                 'to service: ec2\n',
                 'using operation: DescribeRegions\n',
-                'with parameters: {}\n'
-            ]
+                'with parameters: {}\n',
+            ],
         )
 
     def test_two_different_api_calls_have_different_numbers(self):
@@ -174,7 +167,7 @@ class TestDetailedFormatter(unittest.Tes
             'payload': {
                 'service': 'ec2',
                 'operation': 'DescribeRegions',
-                'params': {}
+                'params': {},
             },
             'timestamp': 86400000,
         }
@@ -189,13 +182,14 @@ class TestDetailedFormatter(unittest.Tes
             'payload': {
                 'service': 'ec2',
                 'operation': 'DescribeRegions',
-                'params': {}
+                'params': {},
             },
             'timestamp': 86400000,
         }
         self.formatter.display(other_event)
         new_output = ensure_text_type(self.output.getvalue())[
-            len(collected_output):]
+            len(collected_output) :
+        ]
         self.assertIn('[1] API call made', new_output)
 
     def test_display_http_request(self):
@@ -208,7 +202,7 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': 'This is my body'
+                    'body': 'This is my body',
                 },
                 'timestamp': 86400000,
             },
@@ -216,8 +210,8 @@ class TestDetailedFormatter(unittest.Tes
                 'to URL: https://myservice.us-west-2.amazonaws.com\n',
                 'with method: GET\n',
                 'with headers: {}\n',
-                'with body: This is my body\n'
-            ]
+                'with body: This is my body\n',
+            ],
         )
 
     def test_display_http_request_filter_signature(self):
@@ -235,13 +229,11 @@ class TestDetailedFormatter(unittest.Tes
                             'cc79c4f3d1636cf69fac0e7c1abcd'
                         )
                     },
-                    'body': 'This is my body'
+                    'body': 'This is my body',
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                '"Authorization": "Signature=d7fa..."'
-            ]
+            contains=['"Authorization": "Signature=d7fa..."'],
         )
 
     def test_display_http_request_with_streaming_body(self):
@@ -255,13 +247,13 @@ class TestDetailedFormatter(unittest.Tes
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
                     'body': 'This should not be printed out',
-                    'streaming': True
+                    'streaming': True,
                 },
                 'timestamp': 86400000,
             },
             contains=[
                 'with body: The body is a stream and will not be displayed',
-            ]
+            ],
         )
 
     def test_display_http_request_with_no_payload(self):
@@ -274,13 +266,11 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': None
+                    'body': None,
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: There is no associated body'
-            ]
+            contains=['with body: There is no associated body'],
         )
 
     def test_display_http_request_with_empty_string_payload(self):
@@ -293,13 +283,11 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': ''
+                    'body': '',
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: There is no associated body'
-            ]
+            contains=['with body: There is no associated body'],
         )
 
     def test_display_http_request_with_xml_payload(self):
@@ -313,13 +301,11 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': xml_body
+                    'body': xml_body,
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: ' + self.get_pretty_xml(xml_body)
-            ]
+            contains=['with body: ' + self.get_pretty_xml(xml_body)],
         )
 
     def test_display_http_request_with_xml_payload_and_whitespace(self):
@@ -333,15 +319,13 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': self.get_pretty_xml(xml_body)
+                    'body': self.get_pretty_xml(xml_body),
                 },
                 'timestamp': 86400000,
             },
             # The XML should not be prettified more than once if the body
             # of the request was already prettied.
-            contains=[
-                'with body: ' + self.get_pretty_xml(xml_body)
-            ]
+            contains=['with body: ' + self.get_pretty_xml(xml_body)],
         )
 
     def test_display_http_request_with_json_struct_payload(self):
@@ -354,15 +338,11 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': '{"foo": "bar"}'
+                    'body': '{"foo": "bar"}',
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: {\n'
-                '    "foo": "bar"\n'
-                '}'
-            ]
+            contains=['with body: {\n' '    "foo": "bar"\n' '}'],
         )
 
     def test_shares_api_number_across_events_of_same_api_call(self):
@@ -374,13 +354,11 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'service': 'ec2',
                     'operation': 'DescribeRegions',
-                    'params': {}
+                    'params': {},
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                '[0] API call made'
-            ]
+            contains=['[0] API call made'],
         )
         self.assert_output(
             for_event={
@@ -391,13 +369,11 @@ class TestDetailedFormatter(unittest.Tes
                     'method': 'GET',
                     'url': 'https://myservice.us-west-2.amazonaws.com',
                     'headers': {},
-                    'body': 'This is my body'
+                    'body': 'This is my body',
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                '[0] HTTP request sent'
-            ]
+            contains=['[0] HTTP request sent'],
         )
 
     def test_display_http_response(self):
@@ -409,7 +385,7 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'status_code': 200,
                     'headers': {},
-                    'body': 'This is my body'
+                    'body': 'This is my body',
                 },
                 'timestamp': 86400000,
             },
@@ -417,9 +393,8 @@ class TestDetailedFormatter(unittest.Tes
                 '[0] HTTP response received',
                 'with status code: 200\n',
                 'with headers: {}\n',
-                'with body: This is my body\n'
-
-            ]
+                'with body: This is my body\n',
+            ],
         )
 
     def test_display_http_response_with_streaming_body(self):
@@ -432,13 +407,13 @@ class TestDetailedFormatter(unittest.Tes
                     'status_code': 200,
                     'headers': {},
                     'body': 'This should not be printed out',
-                    'streaming': True
+                    'streaming': True,
                 },
                 'timestamp': 86400000,
             },
             contains=[
                 'with body: The body is a stream and will not be displayed'
-            ]
+            ],
         )
 
     def test_display_http_response_with_no_payload(self):
@@ -447,16 +422,10 @@ class TestDetailedFormatter(unittest.Tes
                 'event_type': 'HTTP_RESPONSE',
                 'id': 'my-id',
                 'request_id': 'some-id',
-                'payload': {
-                    'status_code': 200,
-                    'headers': {},
-                    'body': None
-                },
+                'payload': {'status_code': 200, 'headers': {}, 'body': None},
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: There is no associated body'
-            ]
+            contains=['with body: There is no associated body'],
         )
 
     def test_display_http_response_with_empty_string_payload(self):
@@ -465,16 +434,10 @@ class TestDetailedFormatter(unittest.Tes
                 'event_type': 'HTTP_RESPONSE',
                 'id': 'my-id',
                 'request_id': 'some-id',
-                'payload': {
-                    'status_code': 200,
-                    'headers': {},
-                    'body': ''
-                },
+                'payload': {'status_code': 200, 'headers': {}, 'body': ''},
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: There is no associated body'
-            ]
+            contains=['with body: There is no associated body'],
         )
 
     def test_display_http_response_with_xml_payload(self):
@@ -487,13 +450,11 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'status_code': 200,
                     'headers': {},
-                    'body': xml_body
+                    'body': xml_body,
                 },
                 'timestamp': 86400000,
             },
-            contains=[
-                'with body: ' + self.get_pretty_xml(xml_body)
-            ]
+            contains=['with body: ' + self.get_pretty_xml(xml_body)],
         )
 
     def test_display_http_response_with_xml_payload_and_whitespace(self):
@@ -506,15 +467,13 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'status_code': 200,
                     'headers': {},
-                    'body': self.get_pretty_xml(xml_body)
+                    'body': self.get_pretty_xml(xml_body),
                 },
                 'timestamp': 86400000,
             },
             # The XML should not be prettified more than once if the body
             # of the response was already prettied.
-            contains=[
-                'with body: ' + self.get_pretty_xml(xml_body)
-            ]
+            contains=['with body: ' + self.get_pretty_xml(xml_body)],
         )
 
     def test_display_http_response_with_json_struct_payload(self):
@@ -526,7 +485,7 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {
                     'status_code': 200,
                     'headers': {},
-                    'body': '{"foo": "bar"}'
+                    'body': '{"foo": "bar"}',
                 },
                 'timestamp': 86400000,
             },
@@ -534,7 +493,7 @@ class TestDetailedFormatter(unittest.Tes
                 'with body: {\n',
                 '    "foo": "bar"\n',
                 '}',
-            ]
+            ],
         )
 
     def test_display_parsed_response(self):
@@ -546,10 +505,7 @@ class TestDetailedFormatter(unittest.Tes
                 'payload': {},
                 'timestamp': 86400000,
             },
-            contains=[
-                '[0] HTTP response parsed',
-                'parsed to: {}'
-            ]
+            contains=['[0] HTTP response parsed', 'parsed to: {}'],
         )
 
     def test_display_cli_rc(self):
@@ -559,12 +515,9 @@ class TestDetailedFormatter(unittest.Tes
                 'id': 'my-id',
                 'payload': 0,
                 'timestamp': 86400000,
-                'request_id': None
+                'request_id': None,
             },
-            contains=[
-                'AWS CLI command exited',
-                'with return code: 0'
-            ]
+            contains=['AWS CLI command exited', 'with return code: 0'],
         )
 
     def test_display_unknown_type(self):
@@ -573,7 +526,7 @@ class TestDetailedFormatter(unittest.Tes
             'id': 'my-id',
             'payload': 'foo',
             'timestamp': 86400000,
-            'request_id': None
+            'request_id': None,
         }
         self.formatter.display(event)
         collected_output = ensure_text_type(self.output.getvalue())
@@ -592,15 +545,17 @@ class TestShowCommand(unittest.TestCase)
         self.output_stream = mock.Mock()
         output_stream_context.__enter__.return_value = self.output_stream
 
-        self.output_stream_factory.get_output_stream.return_value = \
+        self.output_stream_factory.get_output_stream.return_value = (
             output_stream_context
+        )
 
         self.db_reader = mock.Mock(DatabaseRecordReader)
         self.db_reader.iter_latest_records.return_value = []
         self.db_reader.iter_records.return_value = []
 
         self.show_cmd = ShowCommand(
-            self.session, self.db_reader, self.output_stream_factory)
+            self.session, self.db_reader, self.output_stream_factory
+        )
 
         self.formatter = mock.Mock(Formatter)
         self.add_formatter('mock', self.formatter)
@@ -637,7 +592,8 @@ class TestShowCommand(unittest.TestCase)
         db_filename = os.path.join(self.files.rootdir, 'name.db')
         with mock.patch('os.environ', {'AWS_CLI_HISTORY_FILE': db_filename}):
             with self.assertRaisesRegex(
-                    RuntimeError, 'Could not locate history'):
+                RuntimeError, 'Could not locate history'
+            ):
                 self.show_cmd._run_main(self.parsed_args, self.parsed_globals)
 
     def add_formatter(self, formatter_name, formatter):
@@ -658,7 +614,7 @@ class TestShowCommand(unittest.TestCase)
         self.show_cmd._run_main(self.parsed_args, self.parsed_globals)
         self.assertEqual(
             self.db_reader.iter_records.call_args,
-            mock.call('some-specific-id')
+            mock.call('some-specific-id'),
         )
 
     def test_uses_format(self):
@@ -675,7 +631,7 @@ class TestShowCommand(unittest.TestCase)
         self.assertTrue(formatter.called)
         self.assertEqual(
             formatter.return_value.display.call_args_list,
-            [mock.call(return_record)]
+            [mock.call(return_record)],
         )
 
     def test_uses_include(self):
@@ -687,8 +643,8 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=['API_CALL'], exclude=None,
-                output=self.output_stream)
+                include=['API_CALL'], exclude=None, output=self.output_stream
+            ),
         )
 
     def test_uses_exclude(self):
@@ -700,8 +656,8 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=['CLI_RC'],
-                output=self.output_stream)
+                include=None, exclude=['CLI_RC'], output=self.output_stream
+            ),
         )
 
     def test_raises_error_when_both_include_and_exclude(self):
@@ -723,9 +679,11 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=None,
-                output=self.output_stream, colorize=True
-            )
+                include=None,
+                exclude=None,
+                output=self.output_stream,
+                colorize=True,
+            ),
         )
 
     @mock.patch('awscli.customizations.history.commands.is_windows', False)
@@ -741,9 +699,11 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=None,
-                output=self.output_stream, colorize=False
-            )
+                include=None,
+                exclude=None,
+                output=self.output_stream,
+                colorize=False,
+            ),
         )
 
     @mock.patch('awscli.customizations.history.commands.is_windows', True)
@@ -757,9 +717,11 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=None,
-                output=self.output_stream, colorize=False
-            )
+                include=None,
+                exclude=None,
+                output=self.output_stream,
+                colorize=False,
+            ),
         )
 
     @mock.patch('awscli.customizations.history.commands.is_windows', True)
@@ -779,9 +741,11 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=None,
-                output=self.output_stream, colorize=True
-            )
+                include=None,
+                exclude=None,
+                output=self.output_stream,
+                colorize=True,
+            ),
         )
 
     @mock.patch('awscli.customizations.history.commands.is_windows', False)
@@ -801,7 +765,9 @@ class TestShowCommand(unittest.TestCase)
         self.assertEqual(
             self.formatter.call_args,
             mock.call(
-                include=None, exclude=None,
-                output=self.output_stream, colorize=False
-            )
+                include=None,
+                exclude=None,
+                output=self.output_stream,
+                colorize=False,
+            ),
         )
diff -pruN 2.23.6-1/tests/unit/customizations/logs/test_startlivetail.py 2.31.35-1/tests/unit/customizations/logs/test_startlivetail.py
--- 2.23.6-1/tests/unit/customizations/logs/test_startlivetail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/logs/test_startlivetail.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,31 +10,31 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import json
+
+import colorama
+from prompt_toolkit.application import Application
+from prompt_toolkit.buffer import Buffer
+from prompt_toolkit.key_binding import KeyPressEvent
+from prompt_toolkit.output import DummyOutput
+
 from awscli.compat import StringIO
 from awscli.customizations.logs.startlivetail import (
     COLOR_LIST,
-    LiveTailBuffer,
     InputState,
+    InteractivePrinter,
+    InteractiveUI,
+    Keyword,
+    LiveTailBuffer,
     LiveTailKeyBindings,
     LiveTailLogEventsCollector,
-    InteractivePrinter,
     LiveTailSessionMetadata,
-    InteractiveUI,
     OutputFormat,
     PrintOnlyPrinter,
     PrintOnlyUI,
-    Keyword,
 )
 from awscli.testutils import mock, unittest
 
-from prompt_toolkit.application import Application
-from prompt_toolkit.buffer import Buffer
-from prompt_toolkit.key_binding import KeyPressEvent
-from prompt_toolkit.output import DummyOutput
-
-import colorama
-import json
-
 
 class LiveTailSessionMetadataTest(unittest.TestCase):
     def setUp(self):
@@ -228,7 +228,9 @@ class KeywordTest(unittest.TestCase):
         log_event = "This is an INFO log"
         self.keyword = Keyword(text)
 
-        colored_log_event = self.keyword._add_color_to_string(log_event, 11, 15)
+        colored_log_event = self.keyword._add_color_to_string(
+            log_event, 11, 15
+        )
 
         self.assertEqual(
             "This is an "
@@ -244,7 +246,9 @@ class KeywordTest(unittest.TestCase):
         log_event = "This is an INFO log"
         self.keyword = Keyword(text)
 
-        colored_log_event = self.keyword._add_color_to_string(log_event, 11, 15)
+        colored_log_event = self.keyword._add_color_to_string(
+            log_event, 11, 15
+        )
         uncolored_log_event = self.keyword._remove_color_from_string(
             log_event, 15, 19
         )
@@ -393,7 +397,9 @@ class LiveTailKeyBindingsTest(unittest.T
         self.ui.update_bottom_toolbar.assert_called_once_with(
             self.ui.get_instructions()
         )
-        self.ui.update_quit_button.assert_called_once_with(self.ui.EXIT_SESSION)
+        self.ui.update_quit_button.assert_called_once_with(
+            self.ui.EXIT_SESSION
+        )
         self.ui._application.invalidate.assert_called_once_with()
 
     def test_any_key_binding(self):
@@ -518,7 +524,9 @@ class LiveTailKeyBindingsTest(unittest.T
         self.ui.update_bottom_toolbar.assert_called_once_with(
             self.ui.get_instructions()
         )
-        self.ui.update_quit_button.assert_called_once_with(self.ui.EXIT_SESSION)
+        self.ui.update_quit_button.assert_called_once_with(
+            self.ui.EXIT_SESSION
+        )
         self.ui._application.invalidate.assert_called_once_with()
 
         # going to highlight mode
diff -pruN 2.23.6-1/tests/unit/customizations/logs/test_tail.py 2.31.35-1/tests/unit/customizations/logs/test_tail.py
--- 2.23.6-1/tests/unit/customizations/logs/test_tail.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/logs/test_tail.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,43 +10,44 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest
-from datetime import datetime, timedelta
 import time
+from datetime import datetime, timedelta
 
-from dateutil import tz
 from botocore.session import Session
 from botocore.stub import Stubber
+from dateutil import tz
 
 from awscli.compat import StringIO
-from awscli.customizations.logs.tail import ShortLogEventsFormatter
-from awscli.customizations.logs.tail import PrettyJSONLogEventsFormatter
-from awscli.customizations.logs.tail import DetailedLogEventsFormatter
-from awscli.customizations.logs.tail import TimestampUtils
-from awscli.customizations.logs.tail import NoFollowLogEventsGenerator
-from awscli.customizations.logs.tail import FollowLogEventsGenerator
+from awscli.customizations.logs.tail import (
+    DetailedLogEventsFormatter,
+    FollowLogEventsGenerator,
+    NoFollowLogEventsGenerator,
+    PrettyJSONLogEventsFormatter,
+    ShortLogEventsFormatter,
+    TimestampUtils,
+)
+from awscli.testutils import mock, unittest
 
 
 class BaseLogEventsFormatterTest(unittest.TestCase):
-
     FORMATTER_CLS = None
 
     def setUp(self):
         self.log_event = {
             'timestamp': datetime(2018, 1, 1, 0, 29, 43, 79060, tz.tzutc()),
             'logStreamName': 'stream_name',
-            'message': 'my message'
+            'message': 'my message',
         }
         self.output = StringIO()
 
     def assert_formatted_display(self, expected_msg, **init_kwargs):
         self.FORMATTER_CLS(self.output, **init_kwargs).display_log_event(
-            self.log_event)
+            self.log_event
+        )
         self.assertEqual(expected_msg, self.output.getvalue())
 
 
 class TestShortLogEventsFormatter(BaseLogEventsFormatterTest):
-
     FORMATTER_CLS = ShortLogEventsFormatter
 
     def test_display(self):
@@ -63,20 +64,17 @@ class TestShortLogEventsFormatter(BaseLo
     def test_ensures_single_newline_ending(self):
         self.log_event['message'] = self.log_event['message'] + '\n\n'
         self.assert_formatted_display(
-            '2018-01-01T00:29:43 my message\n',
-            colorize=False
+            '2018-01-01T00:29:43 my message\n', colorize=False
         )
 
     def test_handles_unicode(self):
         self.log_event['message'] = self.log_event['message'] + '\u00e9'
         self.assert_formatted_display(
-            '2018-01-01T00:29:43 my message\u00e9\n',
-            colorize=False
+            '2018-01-01T00:29:43 my message\u00e9\n', colorize=False
         )
 
 
 class TestPrettyJSONLogEventsFormatter(BaseLogEventsFormatterTest):
-
     FORMATTER_CLS = PrettyJSONLogEventsFormatter
 
     def test_no_json_is_same_as_detailed_output(self):
@@ -102,7 +100,6 @@ class TestPrettyJSONLogEventsFormatter(B
 
 
 class TestDetailedLogEventsFormatter(BaseLogEventsFormatterTest):
-
     FORMATTER_CLS = DetailedLogEventsFormatter
 
     def test_display(self):
@@ -134,14 +131,17 @@ class TestDetailedLogEventsFormatter(Bas
 
     def test_display_with_zero_microseconds(self):
         self.log_event['timestamp'] = datetime(
-            2018, 1, 1, 0, 29, 43, 0, tz.tzutc())
-        DetailedLogEventsFormatter(
-            self.output).display_log_event(self.log_event)
+            2018, 1, 1, 0, 29, 43, 0, tz.tzutc()
+        )
+        DetailedLogEventsFormatter(self.output).display_log_event(
+            self.log_event
+        )
         self.assertEqual(
             '\x1b[32m2018-01-01T00:29:43.000000+00:00\x1b[0m '
             '\x1b[36mstream_name\x1b[0m '
             'my message\n',
-            self.output.getvalue())
+            self.output.getvalue(),
+        )
 
 
 class TestTimestampUtils(unittest.TestCase):
@@ -152,20 +152,22 @@ class TestTimestampUtils(unittest.TestCa
 
     def set_now(self, year=1970, month=1, day=1, hour=0, minute=0, sec=0):
         self.now = datetime(
-            year, month, day, hour, minute, sec, tzinfo=tz.tzutc())
+            year, month, day, hour, minute, sec, tzinfo=tz.tzutc()
+        )
         self.mock_now.return_value = self.now
 
     def test_to_epoch_absolute_timezone_unaware(self):
         self.assertEqual(
             self.timestamp_utils.to_epoch_millis('1970-01-01T00:00:01.000000'),
-            1000
+            1000,
         )
 
     def test_to_epoch_absolute_timezone_aware(self):
         self.assertEqual(
             self.timestamp_utils.to_epoch_millis(
-                '1970-01-01T00:00:01.000000-01:00'),
-            3601000
+                '1970-01-01T00:00:01.000000-01:00'
+            ),
+            3601000,
         )
 
     def test_to_epoch_relative_second(self):
@@ -178,9 +180,7 @@ class TestTimestampUtils(unittest.TestCa
 
     def test_to_epoch_relative_minute(self):
         self.set_now(minute=2)
-        self.assertEqual(
-            self.timestamp_utils.to_epoch_millis('1m'), 60 * 1000
-        )
+        self.assertEqual(self.timestamp_utils.to_epoch_millis('1m'), 60 * 1000)
 
     def test_to_epoch_relative_hour(self):
         self.set_now(hour=2)
@@ -192,20 +192,20 @@ class TestTimestampUtils(unittest.TestCa
         self.set_now(day=3)  # 1970-01-03
         self.assertEqual(
             self.timestamp_utils.to_epoch_millis('1d'),
-            (24 * 60 * 60) * 1000  # 1970-01-02
+            (24 * 60 * 60) * 1000,  # 1970-01-02
         )
 
     def test_to_epoch_relative_week(self):
         self.set_now(day=9)  # 1970-01-08
         self.assertEqual(
             self.timestamp_utils.to_epoch_millis('1w'),
-            (24 * 60 * 60) * 1000  # 1970-01-02
+            (24 * 60 * 60) * 1000,  # 1970-01-02
         )
 
     def test_to_datetime(self):
         self.assertEqual(
             self.timestamp_utils.to_datetime(1000),
-            datetime(1970, 1, 1, 0, 0, 1, tzinfo=tz.tzutc())
+            datetime(1970, 1, 1, 0, 0, 1, tzinfo=tz.tzutc()),
         )
 
 
@@ -213,7 +213,8 @@ class BaseLogEventsGeneratorTest(unittes
     def setUp(self):
         self.session = Session()
         self.client = self.session.create_client(
-            'logs', region_name='us-west-2')
+            'logs', region_name='us-west-2'
+        )
         self.stubber = Stubber(self.client)
         self.group_name = 'groupName'
         self.start = '1970-01-01T00:00:01.000000'
@@ -223,7 +224,8 @@ class BaseLogEventsGeneratorTest(unittes
         self.log_stream_name_prefix = 'foo'
         self.log_timestamp = 1000
         self.expected_log_timestamp_as_datetime = datetime(
-            1970, 1, 1, 0, 0, 1, tzinfo=tz.tzutc())
+            1970, 1, 1, 0, 0, 1, tzinfo=tz.tzutc()
+        )
 
     def get_event(self, event_id, event_message, timestamp=None):
         if timestamp is None:
@@ -239,7 +241,8 @@ class BaseLogEventsGeneratorTest(unittes
         return {
             'eventId': event_id,
             'message': event_message,
-            'timestamp': self.expected_log_timestamp_as_datetime + timedelta(seconds=add_seconds),
+            'timestamp': self.expected_log_timestamp_as_datetime
+            + timedelta(seconds=add_seconds),
             'ingestionTime': self.expected_log_timestamp_as_datetime,
         }
 
@@ -247,7 +250,8 @@ class BaseLogEventsGeneratorTest(unittes
 class TestNoFollowLogEventsGenerator(BaseLogEventsGeneratorTest):
     def test_iter_log_events(self):
         logs_generator = NoFollowLogEventsGenerator(
-            self.client, TimestampUtils())
+            self.client, TimestampUtils()
+        )
 
         self.stubber.add_response(
             'filter_log_events',
@@ -256,7 +260,7 @@ class TestNoFollowLogEventsGenerator(Bas
                     self.get_event('event-1', 'event-1-message'),
                     self.get_event('event-2', 'event-2-message'),
                 ],
-                'nextToken': 'token'
+                'nextToken': 'token',
             },
             expected_params={
                 'logGroupName': self.group_name,
@@ -264,8 +268,8 @@ class TestNoFollowLogEventsGenerator(Bas
                 'startTime': self.expected_start_as_milli_epoch,
                 'filterPattern': self.filter_pattern,
                 'logStreamNames': self.log_stream_names,
-                'logStreamNamePrefix': self.log_stream_name_prefix
-            }
+                'logStreamNamePrefix': self.log_stream_name_prefix,
+            },
         )
         # Add a new page that has no more results
         self.stubber.add_response(
@@ -282,13 +286,17 @@ class TestNoFollowLogEventsGenerator(Bas
                 'filterPattern': self.filter_pattern,
                 'logStreamNames': self.log_stream_names,
                 'logStreamNamePrefix': self.log_stream_name_prefix,
-                'nextToken': 'token'
-            }
+                'nextToken': 'token',
+            },
         )
         with self.stubber:
             log_events_iter = logs_generator.iter_log_events(
-                self.group_name, self.start, self.filter_pattern,
-                self.log_stream_names, self.log_stream_name_prefix)
+                self.group_name,
+                self.start,
+                self.filter_pattern,
+                self.log_stream_names,
+                self.log_stream_name_prefix,
+            )
             actual_log_events = [event for event in log_events_iter]
         self.assertEqual(
             actual_log_events,
@@ -296,7 +304,7 @@ class TestNoFollowLogEventsGenerator(Bas
                 self.get_expected_event('event-1', 'event-1-message'),
                 self.get_expected_event('event-2', 'event-2-message'),
                 self.get_expected_event('event-3', 'event-3-message'),
-            ]
+            ],
         )
 
 
@@ -305,7 +313,8 @@ class TestFollowLogEventsGenerator(BaseL
         super(TestFollowLogEventsGenerator, self).setUp()
         self.mock_sleep = mock.Mock(time.sleep)
         self.logs_generator = FollowLogEventsGenerator(
-            self.client, TimestampUtils(), self.mock_sleep)
+            self.client, TimestampUtils(), self.mock_sleep
+        )
 
     def test_iter_log_events(self):
         self.stubber.add_response(
@@ -315,7 +324,7 @@ class TestFollowLogEventsGenerator(BaseL
                     self.get_event('event-1', 'event-1-message'),
                     self.get_event('event-2', 'event-2-message'),
                 ],
-                'nextToken': 'token'
+                'nextToken': 'token',
             },
             expected_params={
                 'logGroupName': self.group_name,
@@ -324,7 +333,7 @@ class TestFollowLogEventsGenerator(BaseL
                 'filterPattern': self.filter_pattern,
                 'logStreamNames': self.log_stream_names,
                 'logStreamNamePrefix': self.log_stream_name_prefix,
-            }
+            },
         )
         # Add a new page that has no nextToken
         self.stubber.add_response(
@@ -341,14 +350,18 @@ class TestFollowLogEventsGenerator(BaseL
                 'filterPattern': self.filter_pattern,
                 'logStreamNames': self.log_stream_names,
                 'logStreamNamePrefix': self.log_stream_name_prefix,
-                'nextToken': 'token'
-            }
+                'nextToken': 'token',
+            },
         )
         self.mock_sleep.side_effect = KeyboardInterrupt()
         with self.stubber:
             log_events_iter = self.logs_generator.iter_log_events(
-                self.group_name, self.start, self.filter_pattern,
-                self.log_stream_names, self.log_stream_name_prefix)
+                self.group_name,
+                self.start,
+                self.filter_pattern,
+                self.log_stream_names,
+                self.log_stream_name_prefix,
+            )
             actual_log_events = [event for event in log_events_iter]
         self.mock_sleep.assert_called_once_with(5)
         self.assertEqual(
@@ -357,7 +370,7 @@ class TestFollowLogEventsGenerator(BaseL
                 self.get_expected_event('event-1', 'event-1-message'),
                 self.get_expected_event('event-2', 'event-2-message'),
                 self.get_expected_event('event-3', 'event-3-message'),
-            ]
+            ],
         )
 
     def test_polls_with_last_next_token(self):
@@ -367,12 +380,12 @@ class TestFollowLogEventsGenerator(BaseL
                 'events': [
                     self.get_event('event-1', 'event-1-message', 1000),
                 ],
-                'nextToken': 'token'
+                'nextToken': 'token',
             },
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-            }
+            },
         )
         # Add a new page that has no nextToken
         self.stubber.add_response(
@@ -385,8 +398,8 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-                'nextToken': 'token'
-            }
+                'nextToken': 'token',
+            },
         )
 
         # Because there is no token for the last page, it should remove
@@ -402,16 +415,14 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-                'startTime': 2000
-            }
+                'startTime': 2000,
+            },
         )
-        self.mock_sleep.side_effect = [
-            None,
-            KeyboardInterrupt()
-        ]
+        self.mock_sleep.side_effect = [None, KeyboardInterrupt()]
         with self.stubber:
             log_events_iter = self.logs_generator.iter_log_events(
-                self.group_name)
+                self.group_name
+            )
             actual_log_events = [event for event in log_events_iter]
         self.mock_sleep.assert_has_calls([mock.call(5), mock.call(5)])
         self.assertEqual(
@@ -420,7 +431,7 @@ class TestFollowLogEventsGenerator(BaseL
                 self.get_expected_event('event-1', 'event-1-message'),
                 self.get_expected_event('event-2', 'event-2-message', 1),
                 self.get_expected_event('event-3', 'event-3-message', 2),
-            ]
+            ],
         )
 
     def test_iter_log_events_filters_empty_events_list(self):
@@ -432,7 +443,7 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-            }
+            },
         )
         # Add a new page that has events
         # It should make a call with the same parameters as the
@@ -449,15 +460,13 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-            }
+            },
         )
-        self.mock_sleep.side_effect = [
-            None,
-            KeyboardInterrupt()
-        ]
+        self.mock_sleep.side_effect = [None, KeyboardInterrupt()]
         with self.stubber:
             log_events_iter = self.logs_generator.iter_log_events(
-                self.group_name)
+                self.group_name
+            )
             actual_log_events = [event for event in log_events_iter]
         self.mock_sleep.assert_has_calls([mock.call(5), mock.call(5)])
         self.assertEqual(
@@ -466,10 +475,9 @@ class TestFollowLogEventsGenerator(BaseL
                 self.get_expected_event('event-1', 'event-1-message'),
                 self.get_expected_event('event-2', 'event-2-message'),
                 self.get_expected_event('event-3', 'event-3-message'),
-            ]
+            ],
         )
 
-
     def test_iter_log_events_filters_old_events(self):
         self.stubber.add_response(
             'filter_log_events',
@@ -482,7 +490,7 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-            }
+            },
         )
         # Add a new page that has no nextToken
         # It should update startTime with the max timestamp
@@ -499,16 +507,16 @@ class TestFollowLogEventsGenerator(BaseL
             expected_params={
                 'logGroupName': self.group_name,
                 'interleaved': True,
-                'startTime': self.get_event('event-2', 'event-2-message')['timestamp']
-            }
+                'startTime': self.get_event('event-2', 'event-2-message')[
+                    'timestamp'
+                ],
+            },
         )
-        self.mock_sleep.side_effect = [
-            None,
-            KeyboardInterrupt()
-        ]
+        self.mock_sleep.side_effect = [None, KeyboardInterrupt()]
         with self.stubber:
             log_events_iter = self.logs_generator.iter_log_events(
-                self.group_name)
+                self.group_name
+            )
             actual_log_events = [event for event in log_events_iter]
         self.mock_sleep.assert_has_calls([mock.call(5), mock.call(5)])
         self.assertEqual(
@@ -517,5 +525,5 @@ class TestFollowLogEventsGenerator(BaseL
                 self.get_expected_event('event-1', 'event-1-message'),
                 self.get_expected_event('event-2', 'event-2-message'),
                 self.get_expected_event('event-3', 'event-3-message'),
-            ]
+            ],
         )
diff -pruN 2.23.6-1/tests/unit/customizations/s3/__init__.py 2.31.35-1/tests/unit/customizations/s3/__init__.py
--- 2.23.6-1/tests/unit/customizations/s3/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,7 +13,7 @@
 import os
 
 
-class FakeTransferFuture(object):
+class FakeTransferFuture:
     def __init__(self, result=None, exception=None, meta=None):
         self._result = result
         self._exception = exception
@@ -28,16 +28,17 @@ class FakeTransferFuture(object):
         self._exception = exception
 
 
-class FakeTransferFutureMeta(object):
-    def __init__(self, size=None, call_args=None, transfer_id=None,
-                 user_context=None):
+class FakeTransferFutureMeta:
+    def __init__(
+        self, size=None, call_args=None, transfer_id=None, user_context=None
+    ):
         self.size = size
         self.call_args = call_args
         self.transfer_id = transfer_id
         self.user_context = user_context
 
 
-class FakeTransferFutureCallArgs(object):
+class FakeTransferFutureCallArgs:
     def __init__(self, **kwargs):
         for kwarg, val in kwargs.items():
             setattr(self, kwarg, val)
@@ -55,14 +56,20 @@ def make_loc_files(file_creator, size=No
         body = 'This is a test.'
 
     filename1 = file_creator.create_file(
-        os.path.join('some_directory', 'text1.txt'), body)
+        os.path.join('some_directory', 'text1.txt'), body
+    )
 
     filename2 = file_creator.create_file(
-        os.path.join('some_directory', 'another_directory', 'text2.txt'), body)
+        os.path.join('some_directory', 'another_directory', 'text2.txt'), body
+    )
     filename1 = str(filename1)
     filename2 = str(filename2)
-    return [filename1, filename2, os.path.dirname(filename2),
-            os.path.dirname(filename1)]
+    return [
+        filename1,
+        filename2,
+        os.path.dirname(filename2),
+        os.path.dirname(filename1),
+    ]
 
 
 def clean_loc_files(file_creator):
diff -pruN 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_base.py 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_base.py
--- 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_base.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_base.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,11 +12,15 @@
 # language governing permissions and limitations under the License.
 import datetime
 
+from awscli.customizations.exceptions import ParamValidationError
 from awscli.customizations.s3.filegenerator import FileStat
-from awscli.customizations.s3.syncstrategy.base import BaseSync, \
-    SizeAndLastModifiedSync, MissingFileSync, NeverSync
+from awscli.customizations.s3.syncstrategy.base import (
+    BaseSync,
+    MissingFileSync,
+    NeverSync,
+    SizeAndLastModifiedSync,
+)
 from awscli.testutils import mock, unittest
-from awscli.customizations.exceptions import ParamValidationError
 
 
 class TestBaseSync(unittest.TestCase):
@@ -24,8 +28,11 @@ class TestBaseSync(unittest.TestCase):
         self.sync_strategy = BaseSync()
 
     def test_init(self):
-        valid_sync_types = ['file_at_src_and_dest', 'file_not_at_dest',
-                            'file_not_at_src']
+        valid_sync_types = [
+            'file_at_src_and_dest',
+            'file_not_at_dest',
+            'file_not_at_src',
+        ]
         for sync_type in valid_sync_types:
             strategy = BaseSync(sync_type)
             self.assertEqual(strategy.sync_type, sync_type)
@@ -41,13 +48,14 @@ class TestBaseSync(unittest.TestCase):
         session = mock.Mock()
         self.sync_strategy.register_strategy(session)
         register_args = session.register.call_args_list
-        self.assertEqual(register_args[0][0][0],
-                         'building-arg-table.s3_sync')
-        self.assertEqual(register_args[0][0][1],
-                         self.sync_strategy.add_sync_argument)
+        self.assertEqual(register_args[0][0][0], 'building-arg-table.s3_sync')
+        self.assertEqual(
+            register_args[0][0][1], self.sync_strategy.add_sync_argument
+        )
         self.assertEqual(register_args[1][0][0], 'choosing-s3-sync-strategy')
-        self.assertEqual(register_args[1][0][1],
-                         self.sync_strategy.use_sync_strategy)
+        self.assertEqual(
+            register_args[1][0][1], self.sync_strategy.use_sync_strategy
+        )
 
     def test_determine_should_sync(self):
         """
@@ -80,9 +88,10 @@ class TestBaseSync(unittest.TestCase):
         arg_table = [{'name': 'original_argument'}]
         self.sync_strategy.ARGUMENT = {'name': 'sync_argument'}
         self.sync_strategy.add_sync_argument(arg_table)
-        self.assertEqual(arg_table,
-                         [{'name': 'original_argument'},
-                          {'name': 'sync_argument'}])
+        self.assertEqual(
+            arg_table,
+            [{'name': 'original_argument'}, {'name': 'sync_argument'}],
+        )
 
     def test_no_add_sync_argument_for_no_argument_specified(self):
         """
@@ -107,8 +116,9 @@ class TestBaseSync(unittest.TestCase):
         """
         self.sync_strategy.ARGUMENT = {'name': 'my-sync-strategy'}
         params = {'my_sync_strategy': True}
-        self.assertEqual(self.sync_strategy.use_sync_strategy(params),
-                         self.sync_strategy)
+        self.assertEqual(
+            self.sync_strategy.use_sync_strategy(params), self.sync_strategy
+        )
 
     def test_no_use_sync_strategy_for_name_and_no_dest(self):
         """
@@ -132,19 +142,24 @@ class TestBaseSync(unittest.TestCase):
         Test if sync strategy argument has ``name`` and ``dest`` and the
         strategy was called in ``params``.
         """
-        self.sync_strategy.ARGUMENT = {'name': 'my-sync-strategy',
-                                       'dest': 'my-dest'}
+        self.sync_strategy.ARGUMENT = {
+            'name': 'my-sync-strategy',
+            'dest': 'my-dest',
+        }
         params = {'my-dest': True}
-        self.assertEqual(self.sync_strategy.use_sync_strategy(params),
-                         self.sync_strategy)
+        self.assertEqual(
+            self.sync_strategy.use_sync_strategy(params), self.sync_strategy
+        )
 
     def test_no_use_sync_strategy_for_name_and_dest(self):
         """
         Test if sync strategy argument has ``name`` and ``dest`` but the
         the strategy was not called in ``params``.
         """
-        self.sync_strategy.ARGUMENT = {'name': 'my-sync-strategy',
-                                       'dest': 'my-dest'}
+        self.sync_strategy.ARGUMENT = {
+            'name': 'my-sync-strategy',
+            'dest': 'my-dest',
+        }
         params = {'my-dest': False}
         self.assertEqual(self.sync_strategy.use_sync_strategy(params), None)
 
@@ -154,8 +169,10 @@ class TestBaseSync(unittest.TestCase):
         the strategy was not called in ``params`` even though the ``name`` was
         called in ``params``.
         """
-        self.sync_strategy.ARGUMENT = {'name': 'my-sync-strategy',
-                                       'dest': 'my-dest'}
+        self.sync_strategy.ARGUMENT = {
+            'name': 'my-sync-strategy',
+            'dest': 'my-dest',
+        }
         params = {'my-sync-strategy': True}
         self.assertEqual(self.sync_strategy.use_sync_strategy(params), None)
 
@@ -169,16 +186,29 @@ class TestSizeAndLastModifiedSync(unitte
         Confirms compare size works.
         """
         time = datetime.datetime.now()
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=11,
-                            last_update=time, src_type='local',
-                            dest_type='s3', operation_name='upload')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=11,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dest_file)
+            src_file, dest_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_lastmod_upload(self):
@@ -187,16 +217,29 @@ class TestSizeAndLastModifiedSync(unitte
         """
         time = datetime.datetime.now()
         future_time = time + datetime.timedelta(0, 3)
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=10,
-                            last_update=future_time, src_type='local',
-                            dest_type='s3', operation_name='upload')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=future_time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dest_file)
+            src_file, dest_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_lastmod_copy(self):
@@ -205,16 +248,29 @@ class TestSizeAndLastModifiedSync(unitte
         """
         time = datetime.datetime.now()
         future_time = time + datetime.timedelta(0, 3)
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=10,
-                            last_update=future_time, src_type='s3',
-                            dest_type='s3', operation_name='copy')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=future_time,
+            src_type='s3',
+            dest_type='s3',
+            operation_name='copy',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='s3',
+            operation_name='',
+        )
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dest_file)
+            src_file, dest_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_lastmod_download(self):
@@ -223,31 +279,57 @@ class TestSizeAndLastModifiedSync(unitte
         """
         time = datetime.datetime.now()
         future_time = time + datetime.timedelta(0, 3)
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=10,
-                            last_update=time, src_type='s3',
-                            dest_type='local', operation_name='download')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=future_time, src_type='local',
-                             dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=future_time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dest_file)
+            src_file, dest_file
+        )
         self.assertTrue(should_sync)
 
         # If the source is newer than the destination do not download.
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=10,
-                            last_update=future_time, src_type='s3',
-                            dest_type='local', operation_name='download')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='local',
-                             dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=future_time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dest_file)
+            src_file, dest_file
+        )
         self.assertFalse(should_sync)
 
 
@@ -261,13 +343,18 @@ class TestNeverSync(unittest.TestCase):
     def test_determine_should_sync(self):
         time_dst = datetime.datetime.now()
 
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='s3',
-                            dest_type='local', operation_name='')
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
-        should_sync = self.sync_strategy.determine_should_sync(
-            None, dst_file)
+        should_sync = self.sync_strategy.determine_should_sync(None, dst_file)
         self.assertFalse(should_sync)
 
 
@@ -281,13 +368,18 @@ class TestMissingFileSync(unittest.TestC
     def test_determine_should_sync(self):
         time_src = datetime.datetime.now()
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_src, src_type='s3',
-                            dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_src,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
-        should_sync = self.sync_strategy.determine_should_sync(
-            src_file, None)
+        should_sync = self.sync_strategy.determine_should_sync(src_file, None)
         self.assertTrue(should_sync)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_delete.py 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_delete.py
--- 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_delete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_delete.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ import datetime
 
 from awscli.customizations.s3.filegenerator import FileStat
 from awscli.customizations.s3.syncstrategy.delete import DeleteSync
-
 from awscli.testutils import unittest
 
 
@@ -25,13 +24,18 @@ class TestDeleteSync(unittest.TestCase):
     def test_determine_should_sync(self):
         timenow = datetime.datetime.now()
 
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=timenow, src_type='local',
-                            dest_type='s3', operation_name='')
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=timenow,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
-        should_sync = self.sync_strategy.determine_should_sync(
-            None, dst_file)
+        should_sync = self.sync_strategy.determine_should_sync(None, dst_file)
         self.assertTrue(should_sync)
         self.assertEqual(dst_file.operation_name, 'delete')
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_exacttimestamps.py 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_exacttimestamps.py
--- 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_exacttimestamps.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_exacttimestamps.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,9 @@
 import datetime
 
 from awscli.customizations.s3.filegenerator import FileStat
-from awscli.customizations.s3.syncstrategy.exacttimestamps import \
-    ExactTimestampsSync
-
+from awscli.customizations.s3.syncstrategy.exacttimestamps import (
+    ExactTimestampsSync,
+)
 from awscli.testutils import unittest
 
 
@@ -32,18 +32,31 @@ class TestExactTimestampsSync(unittest.T
         time_src = datetime.datetime.now()
         time_dst = time_src - datetime.timedelta(days=1)
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_src, src_type='s3',
-                            dest_type='local', operation_name='download')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='local',
-                            dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_src,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_exact_timestamps_src_older(self):
@@ -55,18 +68,31 @@ class TestExactTimestampsSync(unittest.T
         time_src = datetime.datetime.now() - datetime.timedelta(days=1)
         time_dst = datetime.datetime.now()
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_src, src_type='s3',
-                            dest_type='local', operation_name='download')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='local',
-                            dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_src,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_exact_timestamps_same_age_same_size(self):
@@ -77,18 +103,31 @@ class TestExactTimestampsSync(unittest.T
         """
         time_both = datetime.datetime.now()
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_both, src_type='s3',
-                            dest_type='local', operation_name='download')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_both, src_type='local',
-                            dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_both,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_both,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertFalse(should_sync)
 
     def test_compare_exact_timestamps_same_age_diff_size(self):
@@ -99,18 +138,31 @@ class TestExactTimestampsSync(unittest.T
         """
         time_both = datetime.datetime.now()
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=20,
-                            last_update=time_both, src_type='s3',
-                            dest_type='local', operation_name='download')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_both, src_type='local',
-                            dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=20,
+            last_update=time_both,
+            src_type='s3',
+            dest_type='local',
+            operation_name='download',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_both,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_exact_timestamps_diff_age_not_download(self):
@@ -122,18 +174,31 @@ class TestExactTimestampsSync(unittest.T
         time_src = datetime.datetime.now()
         time_dst = time_src - datetime.timedelta(days=1)
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_src, src_type='s3',
-                            dest_type='local', operation_name='upload')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='local',
-                            dest_type='s3', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_src,
+            src_type='s3',
+            dest_type='local',
+            operation_name='upload',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertTrue(should_sync)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_register.py 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_register.py
--- 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_register.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_register.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,9 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.customizations.s3.syncstrategy.register import \
-    register_sync_strategy
+from awscli.customizations.s3.syncstrategy.register import (
+    register_sync_strategy,
+)
 from awscli.testutils import mock, unittest
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_sizeonly.py 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_sizeonly.py
--- 2.23.6-1/tests/unit/customizations/s3/syncstrategy/test_sizeonly.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/syncstrategy/test_sizeonly.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,7 +14,6 @@ import datetime
 
 from awscli.customizations.s3.filegenerator import FileStat
 from awscli.customizations.s3.syncstrategy.sizeonly import SizeOnlySync
-
 from awscli.testutils import unittest
 
 
@@ -29,18 +28,31 @@ class TestSizeOnlySync(unittest.TestCase
         time_src = datetime.datetime.now()
         time_dst = time_src + datetime.timedelta(days=1)
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=11,
-                            last_update=time_src, src_type='local',
-                            dest_type='s3', operation_name='upload')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='s3',
-                            dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=11,
+            last_update=time_src,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertTrue(should_sync)
 
     def test_compare_size_only_different_update_times(self):
@@ -51,18 +63,31 @@ class TestSizeOnlySync(unittest.TestCase
         time_src = datetime.datetime.now()
         time_dst = time_src + datetime.timedelta(days=1)
 
-        src_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_src, src_type='local',
-                            dest_type='s3', operation_name='upload')
-
-        dst_file = FileStat(src='', dest='',
-                            compare_key='test.py', size=10,
-                            last_update=time_dst, src_type='s3',
-                            dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_src,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+
+        dst_file = FileStat(
+            src='',
+            dest='',
+            compare_key='test.py',
+            size=10,
+            last_update=time_dst,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         should_sync = self.sync_strategy.determine_should_sync(
-            src_file, dst_file)
+            src_file, dst_file
+        )
         self.assertFalse(should_sync)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_comparator.py 2.31.35-1/tests/unit/customizations/s3/test_comparator.py
--- 2.23.6-1/tests/unit/customizations/s3/test_comparator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_comparator.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,9 +13,9 @@
 import datetime
 import unittest
 
-from awscli.testutils import mock
 from awscli.customizations.s3.comparator import Comparator
 from awscli.customizations.s3.filegenerator import FileStat
+from awscli.testutils import mock
 
 
 class ComparatorTest(unittest.TestCase):
@@ -23,9 +23,11 @@ class ComparatorTest(unittest.TestCase):
         self.sync_strategy = mock.Mock()
         self.not_at_src_sync_strategy = mock.Mock()
         self.not_at_dest_sync_strategy = mock.Mock()
-        self.comparator = Comparator(self.sync_strategy,
-                                     self.not_at_dest_sync_strategy,
-                                     self.not_at_src_sync_strategy)
+        self.comparator = Comparator(
+            self.sync_strategy,
+            self.not_at_dest_sync_strategy,
+            self.not_at_src_sync_strategy,
+        )
 
     def test_compare_key_equal_should_not_sync(self):
         """
@@ -40,14 +42,26 @@ class ComparatorTest(unittest.TestCase):
         ref_list = []
         result_list = []
         time = datetime.datetime.now()
-        src_file = FileStat(src='', dest='',
-                            compare_key='comparator_test.py', size=10,
-                            last_update=time, src_type='local',
-                            dest_type='s3', operation_name='upload')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         src_files.append(src_file)
         dest_files.append(dest_file)
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -71,24 +85,40 @@ class ComparatorTest(unittest.TestCase):
         Confirm the appropriate action is taken when the soruce compare key
         is less than the destination compare key.
         """
-        self.not_at_src_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_src_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
 
         # Try when the sync strategy says to sync the file.
-        self.not_at_dest_sync_strategy.determine_should_sync.return_value = True
+        self.not_at_dest_sync_strategy.determine_should_sync.return_value = (
+            True
+        )
 
         src_files = []
         dest_files = []
         ref_list = []
         result_list = []
         time = datetime.datetime.now()
-        src_file = FileStat(src='', dest='',
-                            compare_key='bomparator_test.py', size=10,
-                            last_update=time, src_type='local',
-                            dest_type='s3', operation_name='upload')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='bomparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         src_files.append(src_file)
         dest_files.append(dest_file)
         ref_list.append(src_file)
@@ -98,7 +128,9 @@ class ComparatorTest(unittest.TestCase):
         self.assertEqual(result_list, ref_list)
 
         # Now try when the sync strategy says not to sync the file.
-        self.not_at_dest_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_dest_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
         result_list = []
         ref_list = []
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -106,13 +138,14 @@ class ComparatorTest(unittest.TestCase):
             result_list.append(filename)
         self.assertEqual(result_list, ref_list)
 
-
     def test_compare_key_greater(self):
         """
         Confirm the appropriate action is taken when the soruce compare key
         is greater than the destination compare key.
         """
-        self.not_at_dest_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_dest_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
 
         # Try when the sync strategy says to sync the file.
         self.not_at_src_sync_strategy.determine_should_sync.return_value = True
@@ -122,14 +155,26 @@ class ComparatorTest(unittest.TestCase):
         ref_list = []
         result_list = []
         time = datetime.datetime.now()
-        src_file = FileStat(src='', dest='',
-                            compare_key='domparator_test.py', size=10,
-                            last_update=time, src_type='local',
-                            dest_type='s3', operation_name='upload')
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='domparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         src_files.append(src_file)
         dest_files.append(dest_file)
         ref_list.append(dest_file)
@@ -139,7 +184,9 @@ class ComparatorTest(unittest.TestCase):
         self.assertEqual(result_list, ref_list)
 
         # Now try when the sync strategy says not to sync the file.
-        self.not_at_src_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_src_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
         result_list = []
         ref_list = []
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -147,7 +194,6 @@ class ComparatorTest(unittest.TestCase):
             result_list.append(filename)
         self.assertEqual(result_list, ref_list)
 
-
     def test_empty_src(self):
         """
         Confirm the appropriate action is taken when there are no more source
@@ -161,10 +207,16 @@ class ComparatorTest(unittest.TestCase):
         ref_list = []
         result_list = []
         time = datetime.datetime.now()
-        dest_file = FileStat(src='', dest='',
-                             compare_key='comparator_test.py', size=10,
-                             last_update=time, src_type='s3',
-                             dest_type='local', operation_name='')
+        dest_file = FileStat(
+            src='',
+            dest='',
+            compare_key='comparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
         dest_files.append(dest_file)
         ref_list.append(dest_file)
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -173,7 +225,9 @@ class ComparatorTest(unittest.TestCase):
         self.assertEqual(result_list, ref_list)
 
         # Now try when the sync strategy says not to sync the file.
-        self.not_at_src_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_src_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
         result_list = []
         ref_list = []
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -187,17 +241,25 @@ class ComparatorTest(unittest.TestCase):
         files to take.
         """
         # Try when the sync strategy says to sync the file.
-        self.not_at_dest_sync_strategy.determine_should_sync.return_value = True
+        self.not_at_dest_sync_strategy.determine_should_sync.return_value = (
+            True
+        )
 
         src_files = []
         dest_files = []
         ref_list = []
         result_list = []
         time = datetime.datetime.now()
-        src_file = FileStat(src='', dest='',
-                            compare_key='domparator_test.py', size=10,
-                            last_update=time, src_type='local',
-                            dest_type='s3', operation_name='upload')
+        src_file = FileStat(
+            src='',
+            dest='',
+            compare_key='domparator_test.py',
+            size=10,
+            last_update=time,
+            src_type='local',
+            dest_type='s3',
+            operation_name='upload',
+        )
         src_files.append(src_file)
         ref_list.append(src_file)
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -206,7 +268,9 @@ class ComparatorTest(unittest.TestCase):
         self.assertEqual(result_list, ref_list)
 
         # Now try when the sync strategy says not to sync the file.
-        self.not_at_dest_sync_strategy.determine_should_sync.return_value = False
+        self.not_at_dest_sync_strategy.determine_should_sync.return_value = (
+            False
+        )
         result_list = []
         ref_list = []
         files = self.comparator.call(iter(src_files), iter(dest_files))
@@ -214,7 +278,6 @@ class ComparatorTest(unittest.TestCase):
             result_list.append(filename)
         self.assertEqual(result_list, ref_list)
 
-
     def test_empty_src_dest(self):
         """
         Confirm the appropriate action is taken when there are no more
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_copy_params.py 2.31.35-1/tests/unit/customizations/s3/test_copy_params.py
--- 2.23.6-1/tests/unit/customizations/s3/test_copy_params.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_copy_params.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,10 +11,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import copy
 import os
-import sys
 import re
-import copy
+import sys
 
 from awscli.testutils import BaseAWSCommandParamsTest
 
@@ -29,28 +29,36 @@ try:
     file_type = file
 except NameError:
     import io
+
     file_type = io.IOBase
 
 
 class TestGetObject(BaseAWSCommandParamsTest):
-
     prefix = 's3 cp '
 
     def setUp(self):
         super(TestGetObject, self).setUp()
-        self.file_path = os.path.join(os.path.dirname(__file__),
-                                      'test_copy_params_data')
-        self.parsed_response = {'ETag': '"120ea8a25e5d487bf68b5f7096440019"',}
+        self.file_path = os.path.join(
+            os.path.dirname(__file__), 'test_copy_params_data'
+        )
+        self.parsed_response = {
+            'ETag': '"120ea8a25e5d487bf68b5f7096440019"',
+        }
 
     def assert_params(self, cmdline, result):
-        foo = self.assert_params_for_cmd(cmdline, result, expected_rc=0,
-                                         ignore_params=['Body'])
+        foo = self.assert_params_for_cmd(
+            cmdline, result, expected_rc=0, ignore_params=['Body']
+        )
 
     def test_simple(self):
         cmdline = self.prefix
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
-        result = {'Bucket': u'mybucket', 'Key': u'mykey', 'ChecksumAlgorithm': 'CRC64NVME'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+        }
         self.assert_params(cmdline, result)
 
     def test_sse(self):
@@ -58,8 +66,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --sse'
-        result = {'Bucket': u'mybucket', 'Key': u'mykey',
-                  'ServerSideEncryption': 'AES256', 'ChecksumAlgorithm': 'CRC64NVME'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ServerSideEncryption': 'AES256',
+            'ChecksumAlgorithm': 'CRC64NVME',
+        }
         self.assert_params(cmdline, result)
 
     def test_storage_class(self):
@@ -67,8 +79,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --storage-class REDUCED_REDUNDANCY'
-        result = {'Bucket': u'mybucket', 'Key': u'mykey',
-                  'ChecksumAlgorithm': 'CRC64NVME', 'StorageClass': u'REDUCED_REDUNDANCY'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+            'StorageClass': 'REDUCED_REDUNDANCY',
+        }
         self.assert_params(cmdline, result)
 
     def test_standard_ia_storage_class(self):
@@ -76,8 +92,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --storage-class STANDARD_IA'
-        result = {'Bucket': u'mybucket', 'Key': u'mykey',
-                  'StorageClass': u'STANDARD_IA', 'ChecksumAlgorithm': 'CRC64NVME'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'StorageClass': 'STANDARD_IA',
+            'ChecksumAlgorithm': 'CRC64NVME',
+        }
         self.assert_params(cmdline, result)
 
     def test_glacier_ir_storage_class(self):
@@ -85,8 +105,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --storage-class GLACIER_IR'
-        result = {'Bucket': u'mybucket', 'Key': u'mykey',
-                  'ChecksumAlgorithm': 'CRC64NVME', 'StorageClass': u'GLACIER_IR'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+            'StorageClass': 'GLACIER_IR',
+        }
         self.assert_params(cmdline, result)
 
     def test_website_redirect(self):
@@ -94,10 +118,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --website-redirect /foobar'
-        result = {'Bucket': u'mybucket',
-                  'Key': u'mykey',
-                  'ChecksumAlgorithm': 'CRC64NVME',
-                  'WebsiteRedirectLocation': u'/foobar'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+            'WebsiteRedirectLocation': '/foobar',
+        }
         self.assert_params(cmdline, result)
 
     def test_acl(self):
@@ -105,7 +131,12 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --acl public-read'
-        result = {'Bucket': 'mybucket', 'Key': 'mykey', 'ChecksumAlgorithm': 'CRC64NVME', 'ACL': 'public-read'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+            'ACL': 'public-read',
+        }
         self.assert_params(cmdline, result)
 
     def test_content_params(self):
@@ -116,12 +147,15 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' --content-language piglatin'
         cmdline += ' --cache-control max-age=3600,must-revalidate'
         cmdline += ' --content-disposition attachment;filename="fname.ext"'
-        result = {'Bucket': 'mybucket', 'Key': 'mykey',
-                  'ChecksumAlgorithm': 'CRC64NVME',
-                  'ContentEncoding': 'x-gzip',
-                  'ContentLanguage': 'piglatin',
-                  'ContentDisposition': 'attachment;filename="fname.ext"',
-                  'CacheControl': 'max-age=3600,must-revalidate'}
+        result = {
+            'Bucket': 'mybucket',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+            'ContentEncoding': 'x-gzip',
+            'ContentLanguage': 'piglatin',
+            'ContentDisposition': 'attachment;filename="fname.ext"',
+            'CacheControl': 'max-age=3600,must-revalidate',
+        }
         self.assert_params(cmdline, result)
 
     def test_grants(self):
@@ -130,11 +164,13 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --grants read=bob'
         cmdline += ' full=alice'
-        result = {'Bucket': u'mybucket',
-                  'GrantFullControl': u'alice',
-                  'GrantRead': u'bob',
-                  'Key': u'mykey',
-                  'ChecksumAlgorithm': 'CRC64NVME'}
+        result = {
+            'Bucket': 'mybucket',
+            'GrantFullControl': 'alice',
+            'GrantRead': 'bob',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+        }
         self.assert_params(cmdline, result)
 
     def test_grants_bad(self):
@@ -142,19 +178,23 @@ class TestGetObject(BaseAWSCommandParams
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --grants read:bob'
-        self.assert_params_for_cmd(cmdline, expected_rc=1,
-                                   ignore_params=['Payload'])
+        self.assert_params_for_cmd(
+            cmdline, expected_rc=1, ignore_params=['Payload']
+        )
 
     def test_content_type(self):
         cmdline = self.prefix
         cmdline += self.file_path
         cmdline += ' s3://mybucket/mykey'
         cmdline += ' --content-type text/xml'
-        result = {'Bucket': u'mybucket', 'ContentType': u'text/xml',
-                  'Key': u'mykey', 'ChecksumAlgorithm': 'CRC64NVME'}
+        result = {
+            'Bucket': 'mybucket',
+            'ContentType': 'text/xml',
+            'Key': 'mykey',
+            'ChecksumAlgorithm': 'CRC64NVME',
+        }
         self.assert_params(cmdline, result)
 
 
 if __name__ == "__main__":
     unittest.main()
-
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_copy_params_data 2.31.35-1/tests/unit/customizations/s3/test_copy_params_data
--- 2.23.6-1/tests/unit/customizations/s3/test_copy_params_data	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_copy_params_data	2025-11-12 19:17:29.000000000 +0000
@@ -1 +1 @@
-This is a test.
\ No newline at end of file
+This is a test.
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_factory.py 2.31.35-1/tests/unit/customizations/s3/test_factory.py
--- 2.23.6-1/tests/unit/customizations/s3/test_factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,23 +10,23 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock, FileCreator
-
 import awscrt.s3
-from awscrt.s3 import S3RequestTlsMode
-from botocore.session import Session
+import pytest
+import s3transfer.crt
+from awscrt.s3 import S3FileIoOptions, S3RequestTlsMode
 from botocore.config import Config
 from botocore.credentials import Credentials
 from botocore.httpsession import DEFAULT_CA_BUNDLE
-from s3transfer.manager import TransferManager
-import s3transfer.crt
+from botocore.session import Session
 from s3transfer.crt import CRTTransferManager
-import pytest
+from s3transfer.manager import TransferManager
 
 from awscli.customizations.s3.factory import (
-    ClientFactory, TransferManagerFactory
+    ClientFactory,
+    TransferManagerFactory,
 )
 from awscli.customizations.s3.transferconfig import RuntimeConfig
+from awscli.testutils import FileCreator, mock, unittest
 
 
 @pytest.fixture
@@ -103,8 +103,10 @@ class TestClientFactory(unittest.TestCas
         }
         self.factory.create_client(params=params)
         self.session.create_client.assert_called_with(
-            's3', region_name='us-west-2', endpoint_url='https://myendpoint',
-            verify=True
+            's3',
+            region_name='us-west-2',
+            endpoint_url='https://myendpoint',
+            verify=True,
         )
 
     def test_create_client_sets_sigv4_for_sse_kms(self):
@@ -116,9 +118,10 @@ class TestClientFactory(unittest.TestCas
         }
         self.factory.create_client(params)
         self.assertEqual(
-            self.session.create_client.call_args[
-                1]['config'].signature_version,
-            's3v4'
+            self.session.create_client.call_args[1][
+                'config'
+            ].signature_version,
+            's3v4',
         )
 
     def test_create_client_with_no_source_region(self):
@@ -130,8 +133,10 @@ class TestClientFactory(unittest.TestCas
         }
         self.factory.create_client(params, is_source_client=True)
         self.session.create_client.assert_called_with(
-            's3', region_name='us-west-2', endpoint_url='https://myendpoint',
-            verify=True
+            's3',
+            region_name='us-west-2',
+            endpoint_url='https://myendpoint',
+            verify=True,
         )
 
     def test_create_client_respects_source_region_for_copies(self):
@@ -144,8 +149,7 @@ class TestClientFactory(unittest.TestCas
         }
         self.factory.create_client(params, is_source_client=True)
         self.session.create_client.assert_called_with(
-            's3', region_name='us-west-1', endpoint_url=None,
-            verify=True
+            's3', region_name='us-west-1', endpoint_url=None, verify=True
         )
 
 
@@ -173,23 +177,21 @@ class TestTransferManagerFactory(unittes
 
     def assert_tls_enabled_for_crt_client(self, mock_crt_client):
         self.assertEqual(
-            mock_crt_client.call_args[1]['tls_mode'],
-            S3RequestTlsMode.ENABLED
+            mock_crt_client.call_args[1]['tls_mode'], S3RequestTlsMode.ENABLED
         )
 
     def assert_tls_disabled_for_crt_client(self, mock_crt_client):
         self.assertEqual(
-            mock_crt_client.call_args[1]['tls_mode'],
-            S3RequestTlsMode.DISABLED
+            mock_crt_client.call_args[1]['tls_mode'], S3RequestTlsMode.DISABLED
         )
 
     def assert_uses_client_tls_context_options(
-            self, mock_crt_client, mock_client_tls_context_options):
-        mock_connection_options = mock_client_tls_context_options. \
-            return_value.new_connection_options.return_value
+        self, mock_crt_client, mock_client_tls_context_options
+    ):
+        mock_connection_options = mock_client_tls_context_options.return_value.new_connection_options.return_value
         self.assertIs(
             mock_crt_client.call_args[1]['tls_connection_options'],
-            mock_connection_options
+            mock_connection_options,
         )
 
     def assert_is_classic_manager(self, manager):
@@ -199,51 +201,61 @@ class TestTransferManagerFactory(unittes
         self.assertIsInstance(manager, CRTTransferManager)
 
     def assert_expected_throughput_target_gbps(
-            self, mock_crt_client, expected_throughput_target_gbps):
+        self, mock_crt_client, expected_throughput_target_gbps
+    ):
         self.assertEqual(
             mock_crt_client.call_args[1]['throughput_target_gbps'],
-            expected_throughput_target_gbps
+            expected_throughput_target_gbps,
         )
 
     def test_create_transfer_manager_classic(self):
         transfer_client = mock.Mock()
         self.session.create_client.return_value = transfer_client
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_classic_manager(transfer_manager)
         self.session.create_client.assert_called_with(
-            's3', region_name='us-west-2', endpoint_url=None,
+            's3',
+            region_name='us-west-2',
+            endpoint_url=None,
             verify=None,
         )
         self.assertIs(transfer_manager.client, transfer_client)
 
     def test_proxies_transfer_config_to_default_transfer_manager(self):
-        MB = 1024 ** 2
+        MB = 1024**2
         self.runtime_config = self.get_runtime_config(
             multipart_chunksize=5 * MB,
             multipart_threshold=20 * MB,
             max_concurrent_requests=20,
             max_queue_size=5000,
             max_bandwidth=10 * MB,
+            io_chunksize=1 * MB,
         )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assertEqual(transfer_manager.config.multipart_chunksize, 5 * MB)
         self.assertEqual(transfer_manager.config.multipart_threshold, 20 * MB)
         self.assertEqual(transfer_manager.config.max_request_concurrency, 20)
         self.assertEqual(transfer_manager.config.max_request_queue_size, 5000)
         self.assertEqual(transfer_manager.config.max_bandwidth, 10 * MB)
+        self.assertEqual(transfer_manager.config.io_chunksize, 1 * MB)
         # These configurations are hardcoded and not configurable but
         # we just want to make sure they are being set by the factory.
         self.assertEqual(
-            transfer_manager.config.max_in_memory_upload_chunks, 6)
+            transfer_manager.config.max_in_memory_upload_chunks, 6
+        )
         self.assertEqual(
-            transfer_manager.config.max_in_memory_upload_chunks, 6)
+            transfer_manager.config.max_in_memory_upload_chunks, 6
+        )
 
     def test_can_provide_botocore_client_to_classic_manager(self):
         transfer_client = mock.Mock()
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config, botocore_client=transfer_client)
+            self.params, self.runtime_config, botocore_client=transfer_client
+        )
         self.assert_is_classic_manager(transfer_manager)
         self.session.create_client.assert_not_called()
         self.assertIs(transfer_manager.client, transfer_client)
@@ -251,88 +263,99 @@ class TestTransferManagerFactory(unittes
     @mock.patch('s3transfer.crt.S3Client')
     def test_uses_region_parameter_for_crt_manager(self, mock_crt_client):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['region'] = 'param-region'
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assertEqual(
             mock_crt_client.call_args[1]['region'], 'param-region'
         )
         self.assertEqual(
             self.session.create_client.call_args[1]['region_name'],
-            'param-region'
+            'param-region',
         )
 
     @mock.patch('s3transfer.crt.S3Client')
     def test_falls_back_to_session_region_for_crt_manager(
-            self, mock_crt_client):
+        self, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
-        params = {
-            'verify_ssl': DEFAULT_CA_BUNDLE
-        }
+            preferred_transfer_client='crt'
+        )
+        params = {'verify_ssl': DEFAULT_CA_BUNDLE}
         self.session.get_config_variable.return_value = 'config-region'
         transfer_manager = self.factory.create_transfer_manager(
-            params, self.runtime_config)
+            params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assertEqual(
             mock_crt_client.call_args[1]['region'], 'config-region'
         )
         self.assertEqual(
             self.session.create_client.call_args[1]['region_name'],
-            'config-region'
+            'config-region',
         )
 
     @mock.patch('s3transfer.crt.S3Client')
-    def test_uses_tls_by_default_for_crt_manager(
-            self, mock_crt_client):
+    def test_uses_tls_by_default_for_crt_manager(self, mock_crt_client):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assert_tls_enabled_for_crt_client(mock_crt_client)
 
     @mock.patch('s3transfer.crt.S3Client')
     def test_uses_endpoint_url_parameter_for_crt_manager(
-            self, mock_crt_client):
+        self, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['endpoint_url'] = 'https://my.endpoint.com'
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assertEqual(
             self.session.create_client.call_args[1]['endpoint_url'],
-            'https://my.endpoint.com'
+            'https://my.endpoint.com',
         )
         self.assert_tls_enabled_for_crt_client(mock_crt_client)
 
     @mock.patch('s3transfer.crt.S3Client')
     def test_can_disable_tls_using_endpoint_scheme_for_crt_manager(
-            self, mock_crt_client):
+        self, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['endpoint_url'] = 'http://my.endpoint.com'
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assertEqual(
             self.session.create_client.call_args[1]['endpoint_url'],
-            'http://my.endpoint.com'
+            'http://my.endpoint.com',
         )
         self.assert_tls_disabled_for_crt_client(mock_crt_client)
 
     @mock.patch('s3transfer.crt.S3Client')
-    def test_uses_botocore_credentials_for_crt_manager(
-            self, mock_crt_client):
+    def test_uses_botocore_credentials_for_crt_manager(self, mock_crt_client):
         credentials = Credentials('access_key', 'secret_key', 'token')
         self.session.get_credentials.return_value = credentials
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.session.get_credentials.assert_called_with()
         crt_credential_provider = mock_crt_client.call_args[1][
@@ -350,122 +373,164 @@ class TestTransferManagerFactory(unittes
 
     @mock.patch('s3transfer.crt.S3Client')
     def test_disable_botocore_credentials_for_crt_manager(
-            self, mock_crt_client):
+        self, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['sign_request'] = False
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.session.get_credentials.assert_not_called()
-        self.assertIsNone(
-            mock_crt_client.call_args[1]['credential_provider']
-        )
+        self.assertIsNone(mock_crt_client.call_args[1]['credential_provider'])
 
     @mock.patch('s3transfer.crt.S3Client')
     @mock.patch('s3transfer.crt.ClientTlsContext')
     def test_use_verify_ssl_parameter_for_crt_manager(
-            self, mock_client_tls_context_options, mock_crt_client):
+        self, mock_client_tls_context_options, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         fake_ca_contents = b"fake ca content"
         fake_ca_bundle = self.files.create_file(
-            "fake_ca", fake_ca_contents, mode='wb')
+            "fake_ca", fake_ca_contents, mode='wb'
+        )
         self.params['verify_ssl'] = fake_ca_bundle
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         tls_context_options = mock_client_tls_context_options.call_args[0][0]
-        self.assertEqual(tls_context_options.ca_buffer,
-                         fake_ca_contents)
+        self.assertEqual(tls_context_options.ca_buffer, fake_ca_contents)
         self.assert_uses_client_tls_context_options(
-            mock_crt_client, mock_client_tls_context_options)
+            mock_crt_client, mock_client_tls_context_options
+        )
 
     @mock.patch('s3transfer.crt.S3Client')
     @mock.patch('s3transfer.crt.ClientTlsContext')
     def test_use_ca_bundle_from_session_for_crt_manager(
-            self, mock_client_tls_context_options, mock_crt_client):
+        self, mock_client_tls_context_options, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         fake_ca_contents = b"fake ca content"
         fake_ca_bundle = self.files.create_file(
-            "fake_ca", fake_ca_contents, mode='wb')
+            "fake_ca", fake_ca_contents, mode='wb'
+        )
         self.session.get_config_variable.return_value = fake_ca_bundle
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         tls_context_options = mock_client_tls_context_options.call_args[0][0]
-        self.assertEqual(tls_context_options.ca_buffer,
-                         fake_ca_contents)
+        self.assertEqual(tls_context_options.ca_buffer, fake_ca_contents)
         self.assert_uses_client_tls_context_options(
-            mock_crt_client, mock_client_tls_context_options)
+            mock_crt_client, mock_client_tls_context_options
+        )
 
     @mock.patch('s3transfer.crt.S3Client')
     @mock.patch('s3transfer.crt.ClientTlsContext')
     def test_use_verify_ssl_parameter_none_for_crt_manager(
-            self, mock_client_tls_context_options, mock_crt_client):
+        self, mock_client_tls_context_options, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['verify_ssl'] = None
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         tls_context_options = mock_client_tls_context_options.call_args[0][0]
         with open(DEFAULT_CA_BUNDLE, mode='rb') as fh:
             contents = fh.read()
             self.assertEqual(tls_context_options.ca_buffer, contents)
         self.assert_uses_client_tls_context_options(
-            mock_crt_client, mock_client_tls_context_options)
+            mock_crt_client, mock_client_tls_context_options
+        )
 
     @mock.patch('s3transfer.crt.S3Client')
     @mock.patch('s3transfer.crt.ClientTlsContext')
     def test_use_verify_ssl_parameter_false_for_crt_manager(
-            self, mock_client_tls_context_options, mock_crt_client):
+        self, mock_client_tls_context_options, mock_crt_client
+    ):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt')
+            preferred_transfer_client='crt'
+        )
         self.params['verify_ssl'] = False
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         tls_context_options = mock_client_tls_context_options.call_args[0][0]
         self.assertFalse(tls_context_options.verify_peer)
         self.assert_uses_client_tls_context_options(
-            mock_crt_client, mock_client_tls_context_options)
+            mock_crt_client, mock_client_tls_context_options
+        )
 
     @mock.patch('s3transfer.crt.S3Client')
-    def test_target_bandwidth_configure_for_crt_manager(
-            self, mock_crt_client):
+    def test_target_bandwidth_configure_for_crt_manager(self, mock_crt_client):
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt',
-            target_bandwidth=1_000_000_000)
+            preferred_transfer_client='crt', target_bandwidth=1_000_000_000
+        )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assert_expected_throughput_target_gbps(mock_crt_client, 8)
 
+    @mock.patch('s3transfer.crt.S3Client')
+    def test_fio_options_configure_for_crt_manager(self, mock_crt_client):
+        self.runtime_config = self.get_runtime_config(
+            preferred_transfer_client='crt',
+            should_stream=True,
+            disk_throughput=1000**3,
+            direct_io=True,
+        )
+        transfer_manager = self.factory.create_transfer_manager(
+            self.params, self.runtime_config
+        )
+        expected_fio_options = S3FileIoOptions(
+            should_stream=True,
+            disk_throughput_gbps=8.0,
+            direct_io=True,
+        )
+        self.assert_is_crt_manager(transfer_manager)
+        self.assertEqual(
+            mock_crt_client.call_args[1]['fio_options'], expected_fio_options
+        )
+
     @mock.patch('s3transfer.crt.get_recommended_throughput_target_gbps')
     @mock.patch('s3transfer.crt.S3Client')
     def test_target_bandwidth_uses_crt_recommended_throughput(
-            self, mock_crt_client, mock_get_target_gbps):
+        self, mock_crt_client, mock_get_target_gbps
+    ):
         mock_get_target_gbps.return_value = 100
         self.runtime_config = self.get_runtime_config(
             preferred_transfer_client='crt',
         )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         self.assert_expected_throughput_target_gbps(mock_crt_client, 100)
 
     @mock.patch('s3transfer.crt.get_recommended_throughput_target_gbps')
     @mock.patch('s3transfer.crt.S3Client')
     def test_crt_recommended_target_throughput_default(
-            self, mock_crt_client, mock_get_target_gbps):
+        self, mock_crt_client, mock_get_target_gbps
+    ):
         mock_get_target_gbps.return_value = None
         self.runtime_config = self.get_runtime_config(
             preferred_transfer_client='crt',
         )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
+            self.params, self.runtime_config
+        )
         self.assert_is_crt_manager(transfer_manager)
         # Default when CRT is unable to recommend a throughput
         # should be 10 gbps
@@ -473,18 +538,17 @@ class TestTransferManagerFactory(unittes
 
     @mock.patch('s3transfer.crt.S3Client')
     def test_multipart_chunksize_configure_for_crt_manager(
-            self, mock_crt_client):
+        self, mock_crt_client
+    ):
         part_size = 16 * (1024**2)
         self.runtime_config = self.get_runtime_config(
-            preferred_transfer_client='crt',
-            multipart_chunksize=part_size)
+            preferred_transfer_client='crt', multipart_chunksize=part_size
+        )
         transfer_manager = self.factory.create_transfer_manager(
-            self.params, self.runtime_config)
-        self.assert_is_crt_manager(transfer_manager)
-        self.assertEqual(
-            mock_crt_client.call_args[1]['part_size'],
-            part_size
+            self.params, self.runtime_config
         )
+        self.assert_is_crt_manager(transfer_manager)
+        self.assertEqual(mock_crt_client.call_args[1]['part_size'], part_size)
 
 
 @pytest.mark.parametrize(
@@ -496,34 +560,29 @@ class TestTransferManagerFactory(unittes
         ('auto', {}, False, False, TransferManager),
         ('classic', {}, False, False, TransferManager),
         ('crt', {}, False, False, CRTTransferManager),
-
         # "default" is a supported alias for "classic"
         ('default', {}, False, False, TransferManager),
-
         # Cases when CRT is optimized for system
         (None, {}, True, False, CRTTransferManager),
         ('auto', {}, True, False, CRTTransferManager),
         ('classic', {}, True, False, TransferManager),
         ('crt', {}, True, False, CRTTransferManager),
-
         # Cases when another AWS CLI process is running CRT
         (None, {}, True, True, TransferManager),
         ('auto', {}, True, True, TransferManager),
         ('classic', {}, True, True, TransferManager),
         ('crt', {}, True, True, CRTTransferManager),
-
         # S3 copies always default to classic transfer manager
         (None, {'paths_type': 's3s3'}, True, False, TransferManager),
         ('auto', {'paths_type': 's3s3'}, True, False, TransferManager),
         ('classic', {'paths_type': 's3s3'}, True, False, TransferManager),
         ('crt', {'paths_type': 's3s3'}, True, False, TransferManager),
-
         # Streaming operations use requested transfer client
         (None, {'is_stream': True}, False, False, TransferManager),
         ('auto', {'is_stream': True}, False, False, TransferManager),
         ('classic', {'is_stream': True}, False, False, TransferManager),
         ('crt', {'is_stream': True}, False, False, CRTTransferManager),
-    ]
+    ],
 )
 def test_transfer_manager_cls_resolution(
     preferred_transfer_client,
@@ -554,7 +613,7 @@ def test_transfer_manager_cls_resolution
         ('auto', True),
         ('crt', False),
         ('crt', True),
-    ]
+    ],
 )
 def test_factory_always_acquires_crt_transfer_lock_for_crt_manager(
     preferred_transfer_client,
@@ -581,7 +640,7 @@ def test_factory_always_acquires_crt_tra
         ('auto', False),
         ('classic', False),
         ('classic', True),
-    ]
+    ],
 )
 def test_factory_never_acquires_crt_transfer_lock_for_classic_manager(
     preferred_transfer_client,
@@ -603,14 +662,13 @@ def test_factory_never_acquires_crt_tran
 
 
 def _create_transfer_manager_from_factory(
-    transfer_manager_factory,
-    params,
-    preferred_transfer_client=None
+    transfer_manager_factory, params, preferred_transfer_client=None
 ):
     runtime_config_kwargs = {}
     if preferred_transfer_client is not None:
-        runtime_config_kwargs[
-            'preferred_transfer_client'] = preferred_transfer_client
+        runtime_config_kwargs['preferred_transfer_client'] = (
+            preferred_transfer_client
+        )
     runtime_config = RuntimeConfig().build_config(**runtime_config_kwargs)
     return transfer_manager_factory.create_transfer_manager(
         params, runtime_config
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_fileformat.py 2.31.35-1/tests/unit/customizations/s3/test_fileformat.py
--- 2.23.6-1/tests/unit/customizations/s3/test_fileformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_fileformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -30,10 +30,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': True}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': os.path.abspath(src) + os.sep,
-                             'type': 'local'},
-                     'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
-                     'dir_op': True, 'use_src_name': True}
+        ref_files = {
+            'src': {'path': os.path.abspath(src) + os.sep, 'type': 'local'},
+            'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         self.assertEqual(files, ref_files)
 
     def test_op_dir_noslash(self):
@@ -46,10 +48,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': True}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': os.path.abspath(src) + os.sep,
-                             'type': 'local'},
-                     'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
-                     'dir_op': True, 'use_src_name': True}
+        ref_files = {
+            'src': {'path': os.path.abspath(src) + os.sep, 'type': 'local'},
+            'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         self.assertEqual(files, ref_files)
 
     def test_local_use_src_name(self):
@@ -62,11 +66,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': False}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': 'kyknapp/golfVid/hello.txt',
-                             'type': 's3'},
-                     'dest': {'path': os.path.abspath(dest) + os.sep,
-                              'type': 'local'},
-                     'dir_op': False, 'use_src_name': True}
+        ref_files = {
+            'src': {'path': 'kyknapp/golfVid/hello.txt', 'type': 's3'},
+            'dest': {'path': os.path.abspath(dest) + os.sep, 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': True,
+        }
         self.assertEqual(files, ref_files)
 
     def test_local_noexist_file(self):
@@ -79,11 +84,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': False}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': 'kyknapp/golfVid/hello.txt',
-                             'type': 's3'},
-                     'dest': {'path': os.path.abspath(dest) + os.sep,
-                              'type': 'local'},
-                     'dir_op': False, 'use_src_name': True}
+        ref_files = {
+            'src': {'path': 'kyknapp/golfVid/hello.txt', 'type': 's3'},
+            'dest': {'path': os.path.abspath(dest) + os.sep, 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': True,
+        }
         self.assertEqual(files, ref_files)
 
     def test_local_keep_dest_name(self):
@@ -96,11 +102,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': False}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': 'kyknapp/golfVid/hello.txt',
-                             'type': 's3'},
-                     'dest': {'path': os.path.abspath(dest),
-                              'type': 'local'},
-                     'dir_op': False, 'use_src_name': False}
+        ref_files = {
+            'src': {'path': 'kyknapp/golfVid/hello.txt', 'type': 's3'},
+            'dest': {'path': os.path.abspath(dest), 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         self.assertEqual(files, ref_files)
 
     def test_s3_use_src_name(self):
@@ -113,10 +120,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': False}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': os.path.abspath(src),
-                             'type': 'local'},
-                     'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
-                     'dir_op': False, 'use_src_name': True}
+        ref_files = {
+            'src': {'path': os.path.abspath(src), 'type': 'local'},
+            'dest': {'path': 'kyknapp/golfVid/', 'type': 's3'},
+            'dir_op': False,
+            'use_src_name': True,
+        }
         self.assertEqual(files, ref_files)
 
     def test_s3_keep_dest_name(self):
@@ -129,10 +138,12 @@ class FileFormatTest(unittest.TestCase):
         parameters = {'dir_op': False}
         files = self.file_format.format(src, dest, parameters)
 
-        ref_files = {'src': {'path': os.path.abspath(src),
-                             'type': 'local'},
-                     'dest': {'path': 'kyknapp/golfVid/file.py', 'type': 's3'},
-                     'dir_op': False, 'use_src_name': False}
+        ref_files = {
+            'src': {'path': os.path.abspath(src), 'type': 'local'},
+            'dest': {'path': 'kyknapp/golfVid/file.py', 'type': 's3'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         self.assertEqual(files, ref_files)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_filegenerator.py 2.31.35-1/tests/unit/customizations/s3/test_filegenerator.py
--- 2.23.6-1/tests/unit/customizations/s3/test_filegenerator.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_filegenerator.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,20 +12,33 @@
 # language governing permissions and limitations under the License.
 import os
 import platform
-from awscli.testutils import mock, unittest, FileCreator, BaseAWSCommandParamsTest
-from awscli.testutils import skip_if_windows
-import stat
-import tempfile
 import shutil
 import socket
+import stat
+import tempfile
 
 from botocore.exceptions import ClientError
 
-from awscli.customizations.s3.filegenerator import FileGenerator, \
-    FileDecodingError, FileStat, is_special_file, is_readable
-from awscli.customizations.s3.utils import get_file_stat, EPOCH_TIME
-from tests.unit.customizations.s3 import make_loc_files, clean_loc_files, \
-    compare_files
+from awscli.customizations.s3.filegenerator import (
+    FileDecodingError,
+    FileGenerator,
+    FileStat,
+    is_readable,
+    is_special_file,
+)
+from awscli.customizations.s3.utils import EPOCH_TIME, get_file_stat
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    FileCreator,
+    mock,
+    skip_if_windows,
+    unittest,
+)
+from tests.unit.customizations.s3 import (
+    clean_loc_files,
+    compare_files,
+    make_loc_files,
+)
 
 
 @skip_if_windows('Special files only supported on mac/linux')
@@ -102,21 +115,28 @@ class LocalFileGeneratorTest(unittest.Te
         """
         Generate a single local file.
         """
-        input_local_file = {'src': {'path': self.local_file,
-                                    'type': 'local'},
-                            'dest': {'path': 'bucket/text1.txt',
-                                     'type': 's3'},
-                            'dir_op': False, 'use_src_name': False}
+        input_local_file = {
+            'src': {'path': self.local_file, 'type': 'local'},
+            'dest': {'path': 'bucket/text1.txt', 'type': 's3'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         params = {'region': 'us-east-1'}
         files = FileGenerator(self.client, '').call(input_local_file)
         result_list = []
         for filename in files:
             result_list.append(filename)
         size, last_update = get_file_stat(self.local_file)
-        file_stat = FileStat(src=self.local_file, dest='bucket/text1.txt',
-                             compare_key='text1.txt', size=size,
-                             last_update=last_update, src_type='local',
-                             dest_type='s3', operation_name='')
+        file_stat = FileStat(
+            src=self.local_file,
+            dest='bucket/text1.txt',
+            compare_key='text1.txt',
+            size=size,
+            last_update=last_update,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
         ref_list = [file_stat]
         self.assertEqual(len(result_list), len(ref_list))
         for i in range(len(result_list)):
@@ -126,30 +146,40 @@ class LocalFileGeneratorTest(unittest.Te
         """
         Generate an entire local directory.
         """
-        input_local_dir = {'src': {'path': self.local_dir,
-                                   'type': 'local'},
-                           'dest': {'path': 'bucket/',
-                                    'type': 's3'},
-                           'dir_op': True, 'use_src_name': True}
+        input_local_dir = {
+            'src': {'path': self.local_dir, 'type': 'local'},
+            'dest': {'path': 'bucket/', 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         params = {'region': 'us-east-1'}
         files = FileGenerator(self.client, '').call(input_local_dir)
         result_list = []
         for filename in files:
             result_list.append(filename)
         size, last_update = get_file_stat(self.local_file)
-        file_stat = FileStat(src=self.local_file, dest='bucket/text1.txt',
-                             compare_key='text1.txt', size=size,
-                             last_update=last_update, src_type='local',
-                             dest_type='s3', operation_name='')
-        path = self.local_dir + 'another_directory' + os.sep \
-            + 'text2.txt'
+        file_stat = FileStat(
+            src=self.local_file,
+            dest='bucket/text1.txt',
+            compare_key='text1.txt',
+            size=size,
+            last_update=last_update,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
+        path = self.local_dir + 'another_directory' + os.sep + 'text2.txt'
         size, last_update = get_file_stat(path)
-        file_stat2 = FileStat(src=path,
-                              dest='bucket/another_directory/text2.txt',
-                              compare_key='another_directory/text2.txt',
-                              size=size, last_update=last_update,
-                              src_type='local',
-                              dest_type='s3', operation_name='')
+        file_stat2 = FileStat(
+            src=path,
+            dest='bucket/another_directory/text2.txt',
+            compare_key='another_directory/text2.txt',
+            size=size,
+            last_update=last_update,
+            src_type='local',
+            dest_type='s3',
+            operation_name='',
+        )
         ref_list = [file_stat2, file_stat]
         self.assertEqual(len(result_list), len(ref_list))
         for i in range(len(result_list)):
@@ -162,6 +192,7 @@ class TestIgnoreFilesLocally(unittest.Te
     This class tests the ability to ignore particular files.  This includes
     skipping symlink when desired.
     """
+
     def setUp(self):
         self.client = None
         self.files = FileCreator()
@@ -177,9 +208,10 @@ class TestIgnoreFilesLocally(unittest.Te
 
     def test_skip_symlink(self):
         filename = 'foo.txt'
-        self.files.create_file(os.path.join(self.files.rootdir,
-                               filename),
-                               contents='foo.txt contents')
+        self.files.create_file(
+            os.path.join(self.files.rootdir, filename),
+            contents='foo.txt contents',
+        )
         sym_path = os.path.join(self.files.rootdir, 'symlink')
         os.symlink(filename, sym_path)
         filegenerator = FileGenerator(self.client, '', False)
@@ -187,9 +219,10 @@ class TestIgnoreFilesLocally(unittest.Te
 
     def test_no_skip_symlink(self):
         filename = 'foo.txt'
-        path = self.files.create_file(os.path.join(self.files.rootdir,
-                                                   filename),
-                                      contents='foo.txt contents')
+        path = self.files.create_file(
+            os.path.join(self.files.rootdir, filename),
+            contents='foo.txt contents',
+        )
         sym_path = os.path.join(self.files.rootdir, 'symlink')
         os.symlink(path, sym_path)
         filegenerator = FileGenerator(self.client, '', True)
@@ -230,9 +263,10 @@ class TestThrowsWarning(unittest.TestCas
         return_val = file_gen.triggers_warning(filename)
         self.assertTrue(return_val)
         warning_message = file_gen.result_queue.get()
-        self.assertEqual(warning_message.message,
-                         ("warning: Skipping file %s. File does not exist." %
-                          filename))
+        self.assertEqual(
+            warning_message.message,
+            ("warning: Skipping file %s. File does not exist." % filename),
+        )
 
     def test_no_read_access(self):
         file_gen = FileGenerator(self.client, '', False)
@@ -244,9 +278,13 @@ class TestThrowsWarning(unittest.TestCas
             return_val = file_gen.triggers_warning(full_path)
             self.assertTrue(return_val)
         warning_message = file_gen.result_queue.get()
-        self.assertEqual(warning_message.message,
-                         ("warning: Skipping file %s. File/Directory is "
-                          "not readable." % full_path))
+        self.assertEqual(
+            warning_message.message,
+            (
+                "warning: Skipping file %s. File/Directory is "
+                "not readable." % full_path
+            ),
+        )
 
     @skip_if_windows('Special files only supported on mac/linux')
     def test_is_special_file_warning(self):
@@ -258,10 +296,14 @@ class TestThrowsWarning(unittest.TestCas
         return_val = file_gen.triggers_warning(file_path)
         self.assertTrue(return_val)
         warning_message = file_gen.result_queue.get()
-        self.assertEqual(warning_message.message,
-                         ("warning: Skipping file %s. File is character "
-                          "special device, block special device, FIFO, or "
-                          "socket." % file_path))
+        self.assertEqual(
+            warning_message.message,
+            (
+                "warning: Skipping file %s. File is character "
+                "special device, block special device, FIFO, or "
+                "socket." % file_path
+            ),
+        )
 
 
 @skip_if_windows('Symlink tests only supported on mac/linux')
@@ -271,6 +313,7 @@ class TestSymlinksIgnoreFiles(unittest.T
     depending on if symlinks are being followed.  Also tests to ensure
     broken symlinks fail.
     """
+
     def setUp(self):
         self.client = None
         self.files = FileCreator()
@@ -278,14 +321,15 @@ class TestSymlinksIgnoreFiles(unittest.T
         self.filenames = []
         self.root = self.files.rootdir
         self.bucket = 'bucket/'
-        filename_1 = self.files.create_file('foo.txt',
-                                            contents='foo.txt contents')
+        filename_1 = self.files.create_file(
+            'foo.txt', contents='foo.txt contents'
+        )
         self.filenames.append(filename_1)
         nested_dir = os.path.join(self.root, 'realfiles')
         os.mkdir(nested_dir)
-        filename_2 = self.files.create_file(os.path.join(nested_dir,
-                                                         'bar.txt'),
-                                            contents='bar.txt contents')
+        filename_2 = self.files.create_file(
+            os.path.join(nested_dir, 'bar.txt'), contents='bar.txt contents'
+        )
         self.filenames.append(filename_2)
         # Names of symlinks.
         self.symlinks = []
@@ -311,12 +355,15 @@ class TestSymlinksIgnoreFiles(unittest.T
 
     def test_no_follow_symlink(self):
         abs_root = str(os.path.abspath(self.root) + os.sep)
-        input_local_dir = {'src': {'path': abs_root,
-                                   'type': 'local'},
-                           'dest': {'path': self.bucket,
-                                    'type': 's3'},
-                           'dir_op': True, 'use_src_name': True}
-        file_stats = FileGenerator(self.client, '', False).call(input_local_dir)
+        input_local_dir = {
+            'src': {'path': abs_root, 'type': 'local'},
+            'dest': {'path': self.bucket, 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
+        file_stats = FileGenerator(self.client, '', False).call(
+            input_local_dir
+        )
         self.filenames.sort()
         result_list = []
         for file_stat in file_stats:
@@ -332,11 +379,12 @@ class TestSymlinksIgnoreFiles(unittest.T
         This tests to make sure it fails when following bad symlinks.
         """
         abs_root = str(os.path.abspath(self.root) + os.sep)
-        input_local_dir = {'src': {'path': abs_root,
-                                   'type': 'local'},
-                           'dest': {'path': self.bucket,
-                                    'type': 's3'},
-                           'dir_op': True, 'use_src_name': True}
+        input_local_dir = {
+            'src': {'path': abs_root, 'type': 'local'},
+            'dest': {'path': self.bucket, 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         file_stats = FileGenerator(self.client, '', True).call(input_local_dir)
         file_gen = FileGenerator(self.client, '', True)
         file_stats = file_gen.call(input_local_dir)
@@ -356,11 +404,12 @@ class TestSymlinksIgnoreFiles(unittest.T
         # First remove the bad symlink.
         os.remove(os.path.join(self.root, 'symlink_2'))
         abs_root = str(os.path.abspath(self.root) + os.sep)
-        input_local_dir = {'src': {'path': abs_root,
-                                   'type': 'local'},
-                           'dest': {'path': self.bucket,
-                                    'type': 's3'},
-                           'dir_op': True, 'use_src_name': True}
+        input_local_dir = {
+            'src': {'path': abs_root, 'type': 'local'},
+            'dest': {'path': self.bucket, 'type': 's3'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         file_stats = FileGenerator(self.client, '', True).call(input_local_dir)
         all_filenames = self.filenames + self.symlink_files
         all_filenames.sort()
@@ -395,8 +444,9 @@ class TestListFilesLocally(unittest.Test
         self.assertFalse(file_generator.result_queue.empty())
         warning_message = file_generator.result_queue.get()
         self.assertIn("warning: Skipping file ", warning_message.message)
-        self.assertIn("Please check your locale settings.",
-                      warning_message.message)
+        self.assertIn(
+            "Please check your locale settings.", warning_message.message
+        )
 
     def test_list_files_is_in_sorted_order(self):
         p = os.path.join
@@ -408,10 +458,13 @@ class TestListFilesLocally(unittest.Test
         open(p(self.directory, 'test', 'foo.txt'), 'w').close()
 
         file_generator = FileGenerator(None, None, None)
-        values = list(el[0] for el in file_generator.list_files(
-            self.directory, dir_op=True))
-        ref_vals = list(sorted(values,
-                               key=lambda items: items.replace(os.sep, '/')))
+        values = list(
+            el[0]
+            for el in file_generator.list_files(self.directory, dir_op=True)
+        )
+        ref_vals = list(
+            sorted(values, key=lambda items: items.replace(os.sep, '/'))
+        )
         self.assertEqual(values, ref_vals)
 
     @mock.patch('awscli.customizations.s3.filegenerator.get_file_stat')
@@ -424,39 +477,46 @@ class TestListFilesLocally(unittest.Test
 
     def test_list_local_files_with_unicode_chars(self):
         p = os.path.join
-        open(p(self.directory, u'a'), 'w').close()
-        open(p(self.directory, u'a\u0300'), 'w').close()
-        open(p(self.directory, u'a\u0300-1'), 'w').close()
-        open(p(self.directory, u'a\u03001'), 'w').close()
-        open(p(self.directory, u'z'), 'w').close()
-        open(p(self.directory, u'\u00e6'), 'w').close()
-        os.mkdir(p(self.directory, u'a\u0300a'))
-        open(p(self.directory, u'a\u0300a', u'a'), 'w').close()
-        open(p(self.directory, u'a\u0300a', u'z'), 'w').close()
-        open(p(self.directory, u'a\u0300a', u'\u00e6'), 'w').close()
+        open(p(self.directory, 'a'), 'w').close()
+        open(p(self.directory, 'a\u0300'), 'w').close()
+        open(p(self.directory, 'a\u0300-1'), 'w').close()
+        open(p(self.directory, 'a\u03001'), 'w').close()
+        open(p(self.directory, 'z'), 'w').close()
+        open(p(self.directory, '\u00e6'), 'w').close()
+        os.mkdir(p(self.directory, 'a\u0300a'))
+        open(p(self.directory, 'a\u0300a', 'a'), 'w').close()
+        open(p(self.directory, 'a\u0300a', 'z'), 'w').close()
+        open(p(self.directory, 'a\u0300a', '\u00e6'), 'w').close()
 
         file_generator = FileGenerator(None, None, None)
-        values = list(el[0] for el in file_generator.list_files(
-            self.directory, dir_op=True))
-        expected_order = [os.path.join(self.directory, el) for el in [
-            u"a",
-            u"a\u0300",
-            u"a\u0300-1",
-            u"a\u03001",
-            u"a\u0300a%sa" % os.path.sep,
-            u"a\u0300a%sz" % os.path.sep,
-            u"a\u0300a%s\u00e6" % os.path.sep,
-            u"z",
-            u"\u00e6"
-        ]]
+        values = list(
+            el[0]
+            for el in file_generator.list_files(self.directory, dir_op=True)
+        )
+        expected_order = [
+            os.path.join(self.directory, el)
+            for el in [
+                "a",
+                "a\u0300",
+                "a\u0300-1",
+                "a\u03001",
+                "a\u0300a%sa" % os.path.sep,
+                "a\u0300a%sz" % os.path.sep,
+                "a\u0300a%s\u00e6" % os.path.sep,
+                "z",
+                "\u00e6",
+            ]
+        ]
         self.assertEqual(values, expected_order)
 
 
 class TestNormalizeSort(unittest.TestCase):
     def test_normalize_sort(self):
-        names = ['xyz123456789',
-                 'xyz1' + os.path.sep + 'test',
-                 'xyz' + os.path.sep + 'test']
+        names = [
+            'xyz123456789',
+            'xyz1' + os.path.sep + 'test',
+            'xyz' + os.path.sep + 'test',
+        ]
         ref_names = [names[2], names[1], names[0]]
         filegenerator = FileGenerator(None, None, None)
         filegenerator.normalize_sort(names, os.path.sep, '/')
@@ -464,9 +524,7 @@ class TestNormalizeSort(unittest.TestCas
             self.assertEqual(ref_names[i], names[i])
 
     def test_normalize_sort_backslash(self):
-        names = ['xyz123456789',
-                 'xyz1\\test',
-                 'xyz\\test']
+        names = ['xyz123456789', 'xyz1\\test', 'xyz\\test']
         ref_names = [names[2], names[1], names[0]]
         filegenerator = FileGenerator(None, None, None)
         filegenerator.normalize_sort(names, '\\', '/')
@@ -487,12 +545,20 @@ class S3FileGeneratorTest(BaseAWSCommand
         Generate a single s3 file
         Note: Size and last update are not tested because s3 generates them.
         """
-        input_s3_file = {'src': {'path': self.file1, 'type': 's3'},
-                         'dest': {'path': 'text1.txt', 'type': 'local'},
-                         'dir_op': False, 'use_src_name': False}
+        input_s3_file = {
+            'src': {'path': self.file1, 'type': 's3'},
+            'dest': {'path': 'text1.txt', 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         params = {'region': 'us-east-1'}
-        self.parsed_responses = [{"ETag": "abcd", "ContentLength": 100,
-                                  "LastModified": "2014-01-09T20:45:49.000Z"}]
+        self.parsed_responses = [
+            {
+                "ETag": "abcd",
+                "ContentLength": 100,
+                "LastModified": "2014-01-09T20:45:49.000Z",
+            }
+        ]
         self.patch_make_request()
 
         file_gen = FileGenerator(self.client, '')
@@ -500,12 +566,16 @@ class S3FileGeneratorTest(BaseAWSCommand
         result_list = []
         for filename in files:
             result_list.append(filename)
-        file_stat = FileStat(src=self.file1, dest='text1.txt',
-                             compare_key='text1.txt',
-                             size=result_list[0].size,
-                             last_update=result_list[0].last_update,
-                             src_type='s3',
-                             dest_type='local', operation_name='')
+        file_stat = FileStat(
+            src=self.file1,
+            dest='text1.txt',
+            compare_key='text1.txt',
+            size=result_list[0].size,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         ref_list = [file_stat]
         self.assertEqual(len(result_list), len(ref_list))
@@ -516,16 +586,18 @@ class S3FileGeneratorTest(BaseAWSCommand
         """
         Test the error message for a 404 ClientError for a single file listing
         """
-        input_s3_file = {'src': {'path': self.file1, 'type': 's3'},
-                         'dest': {'path': 'text1.txt', 'type': 'local'},
-                         'dir_op': False, 'use_src_name': False}
+        input_s3_file = {
+            'src': {'path': self.file1, 'type': 's3'},
+            'dest': {'path': 'text1.txt', 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': False,
+        }
         params = {'region': 'us-east-1'}
         self.client = mock.Mock()
-        self.client.head_object.side_effect = \
-                ClientError(
-                    {'Error': {'Code': '404', 'Message': 'Not Found'}},
-                    'HeadObject',
-                )
+        self.client.head_object.side_effect = ClientError(
+            {'Error': {'Code': '404', 'Message': 'Not Found'}},
+            'HeadObject',
+        )
         file_gen = FileGenerator(self.client, '')
         files = file_gen.call(input_s3_file)
         # The error should include 404 and should include the key name.
@@ -533,20 +605,28 @@ class S3FileGeneratorTest(BaseAWSCommand
             list(files)
 
     def test_s3_single_file_delete(self):
-        input_s3_file = {'src': {'path': self.file1, 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': False, 'use_src_name': True}
+        input_s3_file = {
+            'src': {'path': self.file1, 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': False,
+            'use_src_name': True,
+        }
         self.client = mock.Mock()
         file_gen = FileGenerator(self.client, 'delete')
         result_list = list(file_gen.call(input_s3_file))
         self.assertEqual(len(result_list), 1)
         compare_files(
             result_list[0],
-            FileStat(src=self.file1, dest='text1.txt',
-                     compare_key='text1.txt',
-                     size=None, last_update=None,
-                     src_type='s3', dest_type='local',
-                     operation_name='delete')
+            FileStat(
+                src=self.file1,
+                dest='text1.txt',
+                compare_key='text1.txt',
+                size=None,
+                last_update=None,
+                src_type='s3',
+                dest_type='local',
+                operation_name='delete',
+            ),
         )
         self.client.head_object.assert_not_called()
 
@@ -556,37 +636,56 @@ class S3FileGeneratorTest(BaseAWSCommand
         zero size files are ignored.
         Note: Size and last update are not tested because s3 generates them.
         """
-        input_s3_file = {'src': {'path': self.bucket + '/', 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': True, 'use_src_name': True}
+        input_s3_file = {
+            'src': {'path': self.bucket + '/', 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
         params = {'region': 'us-east-1'}
         files = FileGenerator(self.client, '').call(input_s3_file)
 
-        self.parsed_responses = [{
-            "CommonPrefixes": [], "Contents": [
-                {"Key": "another_directory/text2.txt", "Size": 100,
-                 "LastModified": "2014-01-09T20:45:49.000Z"},
-                {"Key": "text1.txt", "Size": 10,
-                 "LastModified": "2013-01-09T20:45:49.000Z"}]}]
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "another_directory/text2.txt",
+                        "Size": 100,
+                        "LastModified": "2014-01-09T20:45:49.000Z",
+                    },
+                    {
+                        "Key": "text1.txt",
+                        "Size": 10,
+                        "LastModified": "2013-01-09T20:45:49.000Z",
+                    },
+                ],
+            }
+        ]
         self.patch_make_request()
         result_list = []
         for filename in files:
             result_list.append(filename)
-        file_stat = FileStat(src=self.file2,
-                             dest='another_directory' + os.sep +
-                             'text2.txt',
-                             compare_key='another_directory/text2.txt',
-                             size=result_list[0].size,
-                             last_update=result_list[0].last_update,
-                             src_type='s3',
-                             dest_type='local', operation_name='')
-        file_stat2 = FileStat(src=self.file1,
-                              dest='text1.txt',
-                              compare_key='text1.txt',
-                              size=result_list[1].size,
-                              last_update=result_list[1].last_update,
-                              src_type='s3',
-                              dest_type='local', operation_name='')
+        file_stat = FileStat(
+            src=self.file2,
+            dest='another_directory' + os.sep + 'text2.txt',
+            compare_key='another_directory/text2.txt',
+            size=result_list[0].size,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
+        file_stat2 = FileStat(
+            src=self.file1,
+            dest='text1.txt',
+            compare_key='text1.txt',
+            size=result_list[1].size,
+            last_update=result_list[1].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='',
+        )
 
         ref_list = [file_stat, file_stat2]
         self.assertEqual(len(result_list), len(ref_list))
@@ -599,44 +698,70 @@ class S3FileGeneratorTest(BaseAWSCommand
         the directory itself is included because it is a delete command
         Note: Size and last update are not tested because s3 generates them.
         """
-        input_s3_file = {'src': {'path': self.bucket + '/', 'type': 's3'},
-                         'dest': {'path': '', 'type': 'local'},
-                         'dir_op': True, 'use_src_name': True}
-        self.parsed_responses = [{
-            "CommonPrefixes": [], "Contents": [
-                {"Key": "another_directory/", "Size": 0,
-                 "LastModified": "2012-01-09T20:45:49.000Z"},
-                {"Key": "another_directory/text2.txt", "Size": 100,
-                 "LastModified": "2014-01-09T20:45:49.000Z"},
-                {"Key": "text1.txt", "Size": 10,
-                 "LastModified": "2013-01-09T20:45:49.000Z"}]}]
+        input_s3_file = {
+            'src': {'path': self.bucket + '/', 'type': 's3'},
+            'dest': {'path': '', 'type': 'local'},
+            'dir_op': True,
+            'use_src_name': True,
+        }
+        self.parsed_responses = [
+            {
+                "CommonPrefixes": [],
+                "Contents": [
+                    {
+                        "Key": "another_directory/",
+                        "Size": 0,
+                        "LastModified": "2012-01-09T20:45:49.000Z",
+                    },
+                    {
+                        "Key": "another_directory/text2.txt",
+                        "Size": 100,
+                        "LastModified": "2014-01-09T20:45:49.000Z",
+                    },
+                    {
+                        "Key": "text1.txt",
+                        "Size": 10,
+                        "LastModified": "2013-01-09T20:45:49.000Z",
+                    },
+                ],
+            }
+        ]
         self.patch_make_request()
         files = FileGenerator(self.client, 'delete').call(input_s3_file)
         result_list = []
         for filename in files:
             result_list.append(filename)
 
-        file_stat1 = FileStat(src=self.bucket + '/another_directory/',
-                              dest='another_directory' + os.sep,
-                              compare_key='another_directory/',
-                              size=result_list[0].size,
-                              last_update=result_list[0].last_update,
-                              src_type='s3',
-                              dest_type='local', operation_name='delete')
-        file_stat2 = FileStat(src=self.file2,
-                              dest='another_directory' + os.sep + 'text2.txt',
-                              compare_key='another_directory/text2.txt',
-                              size=result_list[1].size,
-                              last_update=result_list[1].last_update,
-                              src_type='s3',
-                              dest_type='local', operation_name='delete')
-        file_stat3 = FileStat(src=self.file1,
-                              dest='text1.txt',
-                              compare_key='text1.txt',
-                              size=result_list[2].size,
-                              last_update=result_list[2].last_update,
-                              src_type='s3',
-                              dest_type='local', operation_name='delete')
+        file_stat1 = FileStat(
+            src=self.bucket + '/another_directory/',
+            dest='another_directory' + os.sep,
+            compare_key='another_directory/',
+            size=result_list[0].size,
+            last_update=result_list[0].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='delete',
+        )
+        file_stat2 = FileStat(
+            src=self.file2,
+            dest='another_directory' + os.sep + 'text2.txt',
+            compare_key='another_directory/text2.txt',
+            size=result_list[1].size,
+            last_update=result_list[1].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='delete',
+        )
+        file_stat3 = FileStat(
+            src=self.file1,
+            dest='text1.txt',
+            compare_key='text1.txt',
+            size=result_list[2].size,
+            last_update=result_list[2].last_update,
+            src_type='s3',
+            dest_type='local',
+            operation_name='delete',
+        )
 
         ref_list = [file_stat1, file_stat2, file_stat3]
         self.assertEqual(len(result_list), len(ref_list))
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_fileinfo.py 2.31.35-1/tests/unit/customizations/s3/test_fileinfo.py
--- 2.23.6-1/tests/unit/customizations/s3/test_fileinfo.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_fileinfo.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
 from awscli.customizations.s3.fileinfo import FileInfo
+from awscli.testutils import unittest
 
 
 class TestIsGlacierCompatible(unittest.TestCase):
@@ -58,7 +58,7 @@ class TestIsGlacierCompatible(unittest.T
         self.file_info.operation_name = 'download'
         self.file_info.associated_response_data = {
             'StorageClass': 'GLACIER',
-            'Restore': 'ongoing-request="false", expiry-date="..."'
+            'Restore': 'ongoing-request="false", expiry-date="..."',
         }
         self.assertTrue(self.file_info.is_glacier_compatible())
 
@@ -66,6 +66,6 @@ class TestIsGlacierCompatible(unittest.T
         self.file_info.operation_name = 'download'
         self.file_info.associated_response_data = {
             'StorageClass': 'GLACIER',
-            'Restore': 'ongoing-request="true", expiry-date="..."'
+            'Restore': 'ongoing-request="true", expiry-date="..."',
         }
         self.assertFalse(self.file_info.is_glacier_compatible())
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_fileinfobuilder.py 2.31.35-1/tests/unit/customizations/s3/test_fileinfobuilder.py
--- 2.23.6-1/tests/unit/customizations/s3/test_fileinfobuilder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_fileinfobuilder.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,23 +10,34 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
 from awscli.customizations.s3.filegenerator import FileStat
 from awscli.customizations.s3.fileinfo import FileInfo
 from awscli.customizations.s3.fileinfobuilder import FileInfoBuilder
+from awscli.testutils import unittest
 
 
 class TestFileInfoBuilder(unittest.TestCase):
     def test_info_setter(self):
-        info_setter = FileInfoBuilder(client='client',
-                                      source_client='source_client',
-                                      parameters='parameters',
-                                      is_stream='is_stream')
-        files = [FileStat(src='src', dest='dest', compare_key='compare_key',
-                          size='size', last_update='last_update',
-                          src_type='src_type', dest_type='dest_type',
-                          operation_name='operation_name',
-                          response_data='associated_response_data')]
+        info_setter = FileInfoBuilder(
+            client='client',
+            source_client='source_client',
+            parameters='parameters',
+            is_stream='is_stream',
+        )
+        files = [
+            FileStat(
+                src='src',
+                dest='dest',
+                compare_key='compare_key',
+                size='size',
+                last_update='last_update',
+                src_type='src_type',
+                dest_type='dest_type',
+                operation_name='operation_name',
+                response_data='associated_response_data',
+                etag='etag',
+            )
+        ]
         file_infos = info_setter.call(files)
         for file_info in file_infos:
             attributes = file_info.__dict__.keys()
@@ -36,18 +47,29 @@ class TestFileInfoBuilder(unittest.TestC
     def test_swaps_clients_for_sync_delete(self):
         client_name = 'client'
         source_client_name = 'source_client'
-        info_setter = FileInfoBuilder(client=client_name,
-                                      source_client=source_client_name,
-                                      parameters={'delete': True},
-                                      is_stream='is_stream')
-        files = [FileStat(src='src', dest='dest', compare_key='compare_key',
-                          size='size', last_update='last_update',
-                          src_type='src_type', dest_type='dest_type',
-                          operation_name='delete')]
+        info_setter = FileInfoBuilder(
+            client=client_name,
+            source_client=source_client_name,
+            parameters={'delete': True},
+            is_stream='is_stream',
+        )
+        files = [
+            FileStat(
+                src='src',
+                dest='dest',
+                compare_key='compare_key',
+                size='size',
+                last_update='last_update',
+                src_type='src_type',
+                dest_type='dest_type',
+                operation_name='delete',
+            )
+        ]
         file_infos = info_setter.call(files)
         for file_info in file_infos:
             self.assertEqual(file_info.client, source_client_name)
             self.assertEqual(file_info.source_client, client_name)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_filters.py 2.31.35-1/tests/unit/customizations/s3/test_filters.py
--- 2.23.6-1/tests/unit/customizations/s3/test_filters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_filters.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,11 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-from awscli.testutils import unittest
 import platform
 
 from awscli.customizations.s3.filegenerator import FileStat
 from awscli.customizations.s3.filters import Filter, create_filter
+from awscli.testutils import unittest
 
 
 def platform_path(filepath):
@@ -45,13 +45,20 @@ class FiltersTest(unittest.TestCase):
             dest_type = 's3'
         else:
             dest_type = 'local'
-        return FileStat(src=filename, dest='',
-                        compare_key='', size=10,
-                        last_update=0, src_type=src_type,
-                        dest_type=dest_type, operation_name='')
-
-    def create_filter(self, filters=None, root=None, dst_root=None,
-                      parameters=None):
+        return FileStat(
+            src=filename,
+            dest='',
+            compare_key='',
+            size=10,
+            last_update=0,
+            src_type=src_type,
+            dest_type=dest_type,
+            operation_name='',
+        )
+
+    def create_filter(
+        self, filters=None, root=None, dst_root=None, parameters=None
+    ):
         if root is None:
             root = os.getcwd()
         if filters is None:
@@ -88,8 +95,9 @@ class FiltersTest(unittest.TestCase):
         self.assertEqual(matched_files, [])
 
     def test_exclude_with_dst_root(self):
-        exclude_filter = self.create_filter([['exclude', '*.txt']],
-                                            dst_root='bucket')
+        exclude_filter = self.create_filter(
+            [['exclude', '*.txt']], dst_root='bucket'
+        )
         matched_files = list(exclude_filter.call(self.local_files))
         b = os.path.basename
         self.assertNotIn('test.txt', [b(f.src) for f in matched_files])
@@ -133,16 +141,18 @@ class FiltersTest(unittest.TestCase):
         exclude_filter = self.create_filter([['exclude', 't*']])
         filtered_files = list(exclude_filter.call(local_files))
         self.assertEqual(len(filtered_files), 1)
-        self.assertEqual(os.path.basename(filtered_files[0].src),
-                         'nottest1.txt')
+        self.assertEqual(
+            os.path.basename(filtered_files[0].src), 'nottest1.txt'
+        )
 
         # I should get the same result if I apply the same filter to s3
         # objects.
         exclude_filter = self.create_filter([['exclude', 't*']], root='bucket')
         same_filtered_files = list(exclude_filter.call(remote_files))
         self.assertEqual(len(same_filtered_files), 1)
-        self.assertEqual(os.path.basename(same_filtered_files[0].src),
-                         'nottest1.txt')
+        self.assertEqual(
+            os.path.basename(same_filtered_files[0].src), 'nottest1.txt'
+        )
 
     def test_bucket_exclude_with_prefix(self):
         s3_files = [
@@ -151,36 +161,44 @@ class FiltersTest(unittest.TestCase):
             self.file_stat('bucket/dir1/notkey3.txt', src_type='s3'),
         ]
         filtered_files = list(
-            self.create_filter([['exclude', 'dir1/*']],
-                               root='bucket').call(s3_files))
+            self.create_filter([['exclude', 'dir1/*']], root='bucket').call(
+                s3_files
+            )
+        )
         self.assertEqual(filtered_files, [])
 
         key_files = list(
-            self.create_filter([['exclude', 'dir1/key*']],
-                               root='bucket').call(s3_files))
+            self.create_filter([['exclude', 'dir1/key*']], root='bucket').call(
+                s3_files
+            )
+        )
         self.assertEqual(len(key_files), 1)
         self.assertEqual(key_files[0].src, 'bucket/dir1/notkey3.txt')
 
     def test_root_dir(self):
         p = platform_path
         local_files = [self.file_stat(p('/foo/bar/baz.txt'), src_type='local')]
-        local_filter = self.create_filter([['exclude', 'baz.txt']],
-                                          root=p('/foo/bar/'))
+        local_filter = self.create_filter(
+            [['exclude', 'baz.txt']], root=p('/foo/bar/')
+        )
         filtered = list(local_filter.call(local_files))
         self.assertEqual(filtered, [])
 
         # However, if we're at the root of /foo', then this filter won't match.
-        local_filter = self.create_filter([['exclude', 'baz.txt']],
-                                          root=p('/foo/'))
+        local_filter = self.create_filter(
+            [['exclude', 'baz.txt']], root=p('/foo/')
+        )
         filtered = list(local_filter.call(local_files))
         self.assertEqual(len(filtered), 1)
         self.assertEqual(filtered[0].src, p('/foo/bar/baz.txt'))
 
     def test_create_root_s3_with_prefix(self):
-        parameters = {'filters': [['--exclude', 'test.txt']],
-                      'dir_op': True,
-                      'src': 's3://bucket/prefix/',
-                      'dest': 'prefix'}
+        parameters = {
+            'filters': [['--exclude', 'test.txt']],
+            'dir_op': True,
+            'src': 's3://bucket/prefix/',
+            'dest': 'prefix',
+        }
         s3_filter = self.create_filter(parameters=parameters)
         s3_files = [
             self.file_stat('bucket/prefix/test.txt', src_type='s3'),
@@ -191,10 +209,12 @@ class FiltersTest(unittest.TestCase):
         self.assertEqual(filtered[0].src, 'bucket/prefix/test2.txt')
 
     def test_create_root_s3_no_dir_op(self):
-        parameters = {'filters': [['--exclude', 'test.txt']],
-                      'dir_op': False,
-                      'src': 's3://bucket/test.txt',
-                      'dest': 'temp'}
+        parameters = {
+            'filters': [['--exclude', 'test.txt']],
+            'dir_op': False,
+            'src': 's3://bucket/test.txt',
+            'dest': 'temp',
+        }
         s3_filter = self.create_filter(parameters=parameters)
         s3_files = [
             self.file_stat('bucket/test.txt', src_type='s3'),
@@ -206,11 +226,12 @@ class FiltersTest(unittest.TestCase):
         source = 'bucket/'
         destination = 'bucket-2/'
         pattern = '*'
-        parameters = {'filters': [['--exclude', pattern],
-                                  ['--include', '*.jpg']],
-                      'dir_op': True,
-                      'src': 's3://' + source,
-                      'dest': 's3://' + destination}
+        parameters = {
+            'filters': [['--exclude', pattern], ['--include', '*.jpg']],
+            'dir_op': True,
+            'src': 's3://' + source,
+            'dest': 's3://' + destination,
+        }
         s3_filter = self.create_filter(parameters=parameters)
 
         source_pattern = s3_filter.patterns[0][1]
@@ -223,5 +244,6 @@ class FiltersTest(unittest.TestCase):
         for filtered_file in filtered:
             self.assertFalse('.txt' in filtered_file.src)
 
+
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_results.py 2.31.35-1/tests/unit/customizations/s3/test_results.py
--- 2.23.6-1/tests/unit/customizations/s3/test_results.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_results.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,35 +10,38 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from s3transfer.exceptions import CancelledError
-from s3transfer.exceptions import FatalError
+import time
 
-from awscli.testutils import unittest
-from awscli.testutils import mock
-from awscli.compat import queue
-from awscli.compat import StringIO
-from awscli.customizations.s3.results import ShutdownThreadRequest
-from awscli.customizations.s3.results import QueuedResult
-from awscli.customizations.s3.results import ProgressResult
-from awscli.customizations.s3.results import SuccessResult
-from awscli.customizations.s3.results import FailureResult
-from awscli.customizations.s3.results import ErrorResult
-from awscli.customizations.s3.results import CtrlCResult
-from awscli.customizations.s3.results import DryRunResult
-from awscli.customizations.s3.results import FinalTotalSubmissionsResult
-from awscli.customizations.s3.results import QueuedResultSubscriber
-from awscli.customizations.s3.results import ProgressResultSubscriber
-from awscli.customizations.s3.results import DoneResultSubscriber
-from awscli.customizations.s3.results import ResultRecorder
-from awscli.customizations.s3.results import ResultPrinter
-from awscli.customizations.s3.results import OnlyShowErrorsResultPrinter
-from awscli.customizations.s3.results import NoProgressResultPrinter
-from awscli.customizations.s3.results import ResultProcessor
-from awscli.customizations.s3.results import CommandResultRecorder
+from s3transfer.exceptions import CancelledError, FatalError
+
+from awscli.compat import StringIO, queue
+from awscli.customizations.s3.results import (
+    CommandResultRecorder,
+    CtrlCResult,
+    DoneResultSubscriber,
+    DryRunResult,
+    ErrorResult,
+    FailureResult,
+    FinalTotalSubmissionsResult,
+    NoProgressResultPrinter,
+    OnlyShowErrorsResultPrinter,
+    ProgressResult,
+    ProgressResultSubscriber,
+    QueuedResult,
+    QueuedResultSubscriber,
+    ResultPrinter,
+    ResultProcessor,
+    ResultRecorder,
+    ShutdownThreadRequest,
+    SuccessResult,
+)
 from awscli.customizations.s3.utils import WarningResult
-from tests.unit.customizations.s3 import FakeTransferFuture
-from tests.unit.customizations.s3 import FakeTransferFutureMeta
-from tests.unit.customizations.s3 import FakeTransferFutureCallArgs
+from awscli.testutils import mock, unittest
+from tests.unit.customizations.s3 import (
+    FakeTransferFuture,
+    FakeTransferFutureCallArgs,
+    FakeTransferFutureMeta,
+)
 
 
 class TestResultSubscribers(unittest.TestCase):
@@ -60,7 +63,8 @@ class TestResultSubscribers(unittest.Tes
     def set_ref_transfer_futures(self):
         self.future = self.get_success_transfer_future('foo')
         self.failure_future = self.get_failed_transfer_future(
-            self.ref_exception)
+            self.ref_exception
+        )
 
     def get_success_transfer_future(self, result):
         return self._get_transfer_future(result=result)
@@ -72,11 +76,13 @@ class TestResultSubscribers(unittest.Tes
         call_args = self._get_transfer_future_call_args()
         meta = FakeTransferFutureMeta(size=self.size, call_args=call_args)
         return FakeTransferFuture(
-            result=result, exception=exception, meta=meta)
+            result=result, exception=exception, meta=meta
+        )
 
     def _get_transfer_future_call_args(self):
         return FakeTransferFutureCallArgs(
-            fileobj=self.filename, key=self.key, bucket=self.bucket)
+            fileobj=self.filename, key=self.key, bucket=self.bucket
+        )
 
     def get_queued_result(self):
         return self.result_queue.get(block=False)
@@ -104,8 +110,8 @@ class TestResultSubscribers(unittest.Tes
                 transfer_type=self.transfer_type,
                 src=self.src,
                 dest=self.dest,
-                total_transfer_size=self.size
-            )
+                total_transfer_size=self.size,
+            ),
         )
 
     def test_on_progress(self):
@@ -122,8 +128,8 @@ class TestResultSubscribers(unittest.Tes
                 dest=self.dest,
                 bytes_transferred=ref_bytes_transferred,
                 total_transfer_size=self.size,
-                timestamp=mock.ANY
-            )
+                timestamp=mock.ANY,
+            ),
         )
 
     def test_on_done_success(self):
@@ -137,7 +143,7 @@ class TestResultSubscribers(unittest.Tes
                 transfer_type=self.transfer_type,
                 src=self.src,
                 dest=self.dest,
-            )
+            ),
         )
 
     def test_on_done_failure(self):
@@ -151,8 +157,8 @@ class TestResultSubscribers(unittest.Tes
                 transfer_type=self.transfer_type,
                 src=self.src,
                 dest=self.dest,
-                exception=self.ref_exception
-            )
+                exception=self.ref_exception,
+            ),
         )
 
     def test_on_done_unexpected_cancelled(self):
@@ -179,7 +185,7 @@ class ResultRecorderTest(unittest.TestCa
         self.transfer_type = 'upload'
         self.src = 'file'
         self.dest = 's3://mybucket/mykey'
-        self.total_transfer_size = 20 * (1024 ** 1024)  # 20MB
+        self.total_transfer_size = 20 * (1024**1024)  # 20MB
         self.warning_message = 'a dummy warning message'
         self.exception_message = 'a dummy exception message'
         self.exception = Exception(self.exception_message)
@@ -189,13 +195,15 @@ class ResultRecorderTest(unittest.TestCa
     def test_queued_result(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.assertEqual(
             self.result_recorder.expected_bytes_transferred,
-            self.total_transfer_size
+            self.total_transfer_size,
         )
         self.assertEqual(self.result_recorder.expected_files_transferred, 1)
 
@@ -207,57 +215,65 @@ class ResultRecorderTest(unittest.TestCa
                     transfer_type=self.transfer_type,
                     src=self.src + str(i),
                     dest=self.dest + str(i),
-                    total_transfer_size=self.total_transfer_size
+                    total_transfer_size=self.total_transfer_size,
                 )
             )
 
         self.assertEqual(
             self.result_recorder.expected_bytes_transferred,
-            num_results * self.total_transfer_size
+            num_results * self.total_transfer_size,
         )
         self.assertEqual(
-            self.result_recorder.expected_files_transferred, num_results)
+            self.result_recorder.expected_files_transferred, num_results
+        )
 
     def test_queued_result_with_no_full_transfer_size(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=None
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=None,
             )
         )
         # Since we do not know how many bytes are expected to be transferred
         # do not incremenent the count as we have no idea how much it may be.
-        self.assertEqual(
-            self.result_recorder.expected_bytes_transferred, 0)
-        self.assertEqual(
-            self.result_recorder.expected_files_transferred, 1)
+        self.assertEqual(self.result_recorder.expected_bytes_transferred, 0)
+        self.assertEqual(self.result_recorder.expected_files_transferred, 1)
 
     def test_progress_result(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
 
         bytes_transferred = 1024 * 1024  # 1MB
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=bytes_transferred,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=bytes_transferred,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=0
+                timestamp=0,
             )
         )
 
         self.assertEqual(
-            self.result_recorder.bytes_transferred, bytes_transferred)
+            self.result_recorder.bytes_transferred, bytes_transferred
+        )
 
     def test_multiple_progress_results(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
 
@@ -266,74 +282,91 @@ class ResultRecorderTest(unittest.TestCa
         for i in range(num_results):
             self.result_recorder(
                 ProgressResult(
-                    transfer_type=self.transfer_type, src=self.src,
-                    dest=self.dest, bytes_transferred=bytes_transferred,
+                    transfer_type=self.transfer_type,
+                    src=self.src,
+                    dest=self.dest,
+                    bytes_transferred=bytes_transferred,
                     total_transfer_size=self.total_transfer_size,
-                    timestamp=i
+                    timestamp=i,
                 )
             )
 
         self.assertEqual(
             self.result_recorder.bytes_transferred,
-            num_results * bytes_transferred
+            num_results * bytes_transferred,
         )
 
     def test_progress_result_with_no_known_transfer_size(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=None
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=None,
             )
         )
 
         bytes_transferred = 1024 * 1024
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=bytes_transferred,
-                total_transfer_size=None, timestamp=0
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=bytes_transferred,
+                total_transfer_size=None,
+                timestamp=0,
             )
         )
         # Because the transfer size is still not known, update the
         # expected bytes transferred with what was actually transferred.
         self.assertEqual(
-            self.result_recorder.bytes_transferred, bytes_transferred)
+            self.result_recorder.bytes_transferred, bytes_transferred
+        )
         self.assertEqual(
-            self.result_recorder.expected_bytes_transferred, bytes_transferred)
+            self.result_recorder.expected_bytes_transferred, bytes_transferred
+        )
 
     def test_progress_result_with_transfer_size_provided_during_progress(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=None
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=None,
             )
         )
 
         bytes_transferred = 1024 * 1024
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=bytes_transferred,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=bytes_transferred,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=0
+                timestamp=0,
             )
         )
 
         self.assertEqual(
-            self.result_recorder.bytes_transferred, bytes_transferred)
+            self.result_recorder.bytes_transferred, bytes_transferred
+        )
         # With the total size provided in the progress result, it should
         # accurately be reflected in the expected bytes transferred.
         self.assertEqual(
             self.result_recorder.expected_bytes_transferred,
-            self.total_transfer_size)
+            self.total_transfer_size,
+        )
 
     def test_captures_start_time_on_queued(self):
         result_recorder = ResultRecorder()
         self.assertIsNone(result_recorder.start_time)
         result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.assertIsInstance(result_recorder.start_time, float)
@@ -344,8 +377,10 @@ class ResultRecorderTest(unittest.TestCa
         self.total_transfer_size = 10
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         # At this point nothing should have been uploaded so transfer speed
@@ -354,10 +389,12 @@ class ResultRecorderTest(unittest.TestCa
 
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=1,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=1,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=(start_time + 1)
+                timestamp=(start_time + 1),
             )
         )
 
@@ -366,10 +403,12 @@ class ResultRecorderTest(unittest.TestCa
 
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=4,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=4,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=(start_time + 2)
+                timestamp=(start_time + 2),
             )
         )
 
@@ -378,10 +417,12 @@ class ResultRecorderTest(unittest.TestCa
 
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=1,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=1,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=(start_time + 3)
+                timestamp=(start_time + 3),
             )
         )
 
@@ -391,15 +432,16 @@ class ResultRecorderTest(unittest.TestCa
     def test_success_result(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
 
         self.result_recorder(
             SuccessResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest
+                transfer_type=self.transfer_type, src=self.src, dest=self.dest
             )
         )
         self.assertEqual(self.result_recorder.files_transferred, 1)
@@ -413,7 +455,7 @@ class ResultRecorderTest(unittest.TestCa
                     transfer_type=self.transfer_type,
                     src=self.src + str(i),
                     dest=self.dest + str(i),
-                    total_transfer_size=self.total_transfer_size
+                    total_transfer_size=self.total_transfer_size,
                 )
             )
 
@@ -432,15 +474,19 @@ class ResultRecorderTest(unittest.TestCa
     def test_failure_result(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
 
         self.result_recorder(
             FailureResult(
-                transfer_type=self.transfer_type, src=self.src, dest=self.dest,
-                exception=self.exception
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                exception=self.exception,
             )
         )
 
@@ -448,7 +494,8 @@ class ResultRecorderTest(unittest.TestCa
         self.assertEqual(self.result_recorder.files_failed, 1)
         self.assertEqual(
             self.result_recorder.bytes_failed_to_transfer,
-            self.total_transfer_size)
+            self.total_transfer_size,
+        )
         self.assertEqual(self.result_recorder.bytes_transferred, 0)
 
     def test_multiple_failure_results(self):
@@ -459,7 +506,7 @@ class ResultRecorderTest(unittest.TestCa
                     transfer_type=self.transfer_type,
                     src=self.src + str(i),
                     dest=self.dest + str(i),
-                    total_transfer_size=self.total_transfer_size
+                    total_transfer_size=self.total_transfer_size,
                 )
             )
 
@@ -469,7 +516,7 @@ class ResultRecorderTest(unittest.TestCa
                     transfer_type=self.transfer_type,
                     src=self.src + str(i),
                     dest=self.dest + str(i),
-                    exception=self.exception
+                    exception=self.exception,
                 )
             )
 
@@ -477,31 +524,38 @@ class ResultRecorderTest(unittest.TestCa
         self.assertEqual(self.result_recorder.files_failed, num_results)
         self.assertEqual(
             self.result_recorder.bytes_failed_to_transfer,
-            self.total_transfer_size * num_results)
+            self.total_transfer_size * num_results,
+        )
         self.assertEqual(self.result_recorder.bytes_transferred, 0)
 
     def test_failure_result_mid_progress(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
 
         bytes_transferred = 1024 * 1024  # 1MB
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=bytes_transferred,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=bytes_transferred,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=0
+                timestamp=0,
             )
         )
 
         self.result_recorder(
             FailureResult(
-                transfer_type=self.transfer_type, src=self.src, dest=self.dest,
-                exception=self.exception
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                exception=self.exception,
             )
         )
 
@@ -509,21 +563,27 @@ class ResultRecorderTest(unittest.TestCa
         self.assertEqual(self.result_recorder.files_failed, 1)
         self.assertEqual(
             self.result_recorder.bytes_failed_to_transfer,
-            self.total_transfer_size - bytes_transferred)
+            self.total_transfer_size - bytes_transferred,
+        )
         self.assertEqual(
-            self.result_recorder.bytes_transferred, bytes_transferred)
+            self.result_recorder.bytes_transferred, bytes_transferred
+        )
 
     def test_failure_result_still_did_not_know_transfer_size(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=None
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=None,
             )
         )
         self.result_recorder(
             FailureResult(
-                transfer_type=self.transfer_type, src=self.src, dest=self.dest,
-                exception=self.exception
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                exception=self.exception,
             )
         )
         self.assertEqual(self.result_recorder.files_transferred, 1)
@@ -531,30 +591,35 @@ class ResultRecorderTest(unittest.TestCa
         # Because we never knew how many bytes to expect, do not make
         # any adjustments to bytes failed to transfer because it is impossible
         # to know that.
-        self.assertEqual(
-            self.result_recorder.bytes_failed_to_transfer, 0)
+        self.assertEqual(self.result_recorder.bytes_failed_to_transfer, 0)
 
     def test_failure_result_and_learned_of_transfer_size_in_progress(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=None
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=None,
             )
         )
 
         bytes_transferred = 1024 * 1024
         self.result_recorder(
             ProgressResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, bytes_transferred=bytes_transferred,
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                bytes_transferred=bytes_transferred,
                 total_transfer_size=self.total_transfer_size,
-                timestamp=0
+                timestamp=0,
             )
         )
         self.result_recorder(
             FailureResult(
-                transfer_type=self.transfer_type, src=self.src, dest=self.dest,
-                exception=self.exception
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                exception=self.exception,
             )
         )
         self.assertEqual(self.result_recorder.files_transferred, 1)
@@ -564,7 +629,8 @@ class ResultRecorderTest(unittest.TestCa
         # failure result is processed.
         self.assertEqual(
             self.result_recorder.bytes_failed_to_transfer,
-            self.total_transfer_size - bytes_transferred)
+            self.total_transfer_size - bytes_transferred,
+        )
 
     def test_can_handle_results_with_no_dest(self):
         # This is just a quick smoke test to make sure that a result with
@@ -572,24 +638,28 @@ class ResultRecorderTest(unittest.TestCa
         # a transfer (i.e. being queued and finishing)
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=None, total_transfer_size=None))
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=None,
+                total_transfer_size=None,
+            )
+        )
         self.result_recorder(
             SuccessResult(
-                transfer_type=self.transfer_type, src=self.src, dest=None))
+                transfer_type=self.transfer_type, src=self.src, dest=None
+            )
+        )
         self.assertEqual(self.result_recorder.expected_files_transferred, 1)
         self.assertEqual(self.result_recorder.files_transferred, 1)
 
     def test_warning_result(self):
-        self.result_recorder(
-            WarningResult(message=self.warning_message))
+        self.result_recorder(WarningResult(message=self.warning_message))
         self.assertEqual(self.result_recorder.files_warned, 1)
 
     def test_multiple_warning_results(self):
         num_results = 5
         for _ in range(num_results):
-            self.result_recorder(
-                WarningResult(message=self.warning_message))
+            self.result_recorder(WarningResult(message=self.warning_message))
         self.assertEqual(self.result_recorder.files_warned, num_results)
 
     def test_error_result(self):
@@ -603,13 +673,16 @@ class ResultRecorderTest(unittest.TestCa
     def test_expected_totals_are_final(self):
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.result_recorder(FinalTotalSubmissionsResult(1))
         self.assertEqual(
-            self.result_recorder.final_expected_files_transferred, 1)
+            self.result_recorder.final_expected_files_transferred, 1
+        )
         self.assertTrue(self.result_recorder.expected_totals_are_final())
 
     def test_expected_totals_are_final_reaches_final_after_notification(self):
@@ -617,26 +690,32 @@ class ResultRecorderTest(unittest.TestCa
         self.assertFalse(self.result_recorder.expected_totals_are_final())
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.assertTrue(self.result_recorder.expected_totals_are_final())
 
     def test_expected_totals_are_final_is_false_with_no_notification(self):
         self.assertIsNone(
-            self.result_recorder.final_expected_files_transferred)
+            self.result_recorder.final_expected_files_transferred
+        )
         self.assertFalse(self.result_recorder.expected_totals_are_final())
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=self.src,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=self.src,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         # It should still be None because it has not yet been notified
         # of finals.
         self.assertIsNone(
-            self.result_recorder.final_expected_files_transferred)
+            self.result_recorder.final_expected_files_transferred
+        )
         # This should remain False as well.
         self.assertFalse(self.result_recorder.expected_totals_are_final())
 
@@ -649,30 +728,34 @@ class ResultRecorderTest(unittest.TestCa
         self.assertEqual(self.result_recorder.files_transferred, 0)
 
     def test_result_with_unicode(self):
-        unicode_source = u'\u2713'
+        unicode_source = '\u2713'
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=unicode_source,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=unicode_source,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.assertEqual(
             self.result_recorder.expected_bytes_transferred,
-            self.total_transfer_size
+            self.total_transfer_size,
         )
         self.assertEqual(self.result_recorder.expected_files_transferred, 1)
 
     def test_result_with_encoded_unicode(self):
-        unicode_source = u'\u2713'.encode('utf-8')
+        unicode_source = '\u2713'.encode()
         self.result_recorder(
             QueuedResult(
-                transfer_type=self.transfer_type, src=unicode_source,
-                dest=self.dest, total_transfer_size=self.total_transfer_size
+                transfer_type=self.transfer_type,
+                src=unicode_source,
+                dest=self.dest,
+                total_transfer_size=self.total_transfer_size,
             )
         )
         self.assertEqual(
             self.result_recorder.expected_bytes_transferred,
-            self.total_transfer_size
+            self.total_transfer_size,
         )
         self.assertEqual(self.result_recorder.expected_files_transferred, 1)
 
@@ -685,7 +768,7 @@ class BaseResultPrinterTest(unittest.Tes
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=self.out_file,
-            error_file=self.error_file
+            error_file=self.error_file,
         )
 
     def get_progress_result(self):
@@ -693,11 +776,208 @@ class BaseResultPrinterTest(unittest.Tes
         # of printing as the ResultPrinter only looks at the type and
         # the ResultRecorder to determine what to print out on progress.
         return ProgressResult(
-            transfer_type=None, src=None, dest=None, bytes_transferred=None,
-            total_transfer_size=None, timestamp=0
+            transfer_type=None,
+            src=None,
+            dest=None,
+            bytes_transferred=None,
+            total_transfer_size=None,
+            timestamp=0,
         )
 
 
+class TestResultPrinterMultiline(BaseResultPrinterTest):
+    def setUp(self):
+        # Overload the ResultPrinter to set oneline=False
+        super().setUp()
+        self.result_printer = ResultPrinter(
+            result_recorder=self.result_recorder,
+            out_file=self.out_file,
+            error_file=self.error_file,
+            oneline=False,
+        )
+        self.maxDiff = None
+
+    def test_progress(self):
+        mb = 1024 * 1024
+
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+
+        progress_result = self.get_progress_result()
+        self.result_printer(progress_result)
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) '
+            'remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+    def test_success_with_progress(self):
+        mb = 1024 * 1024
+
+        progress_result = self.get_progress_result()
+
+        # Add the first progress update and print it out
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+        self.result_printer(progress_result)
+
+        # Add a success result and print it out.
+        transfer_type = 'upload'
+        src = 'file'
+        dest = 's3://mybucket/mykey'
+        success_result = SuccessResult(
+            transfer_type=transfer_type, src=src, dest=dest
+        )
+
+        self.result_recorder.files_transferred += 1
+        self.result_printer(success_result)
+
+        # The statement should consist of:
+        # * The first progress statement
+        # * The success statement
+        # * And the progress again since the transfer is still ongoing
+        # These lines will not have any padding
+        ref_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+            'upload: file to s3://mybucket/mykey\n'
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 2 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_statement)
+
+    def test_progress_then_more_progress(self):
+        mb = 1024 * 1024
+
+        progress_result = self.get_progress_result()
+
+        # Add the first progress update and print it out
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+
+        self.result_printer(progress_result)
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+        # Add the second progress update
+        self.result_recorder.bytes_transferred += mb
+        self.result_printer(progress_result)
+
+        # The result should be the combination of the two
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+            'Completed 2.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+
+class TestResultPrinterFrequency(BaseResultPrinterTest):
+    def setUp(self):
+        # Overload the ResultPrinter to set oneline=False
+        super().setUp()
+        self.result_printer = ResultPrinter(
+            result_recorder=self.result_recorder,
+            out_file=self.out_file,
+            error_file=self.error_file,
+            oneline=False,
+            frequency=2,
+        )
+        self.maxDiff = None
+
+    def test_progress(self):
+        mb = 1024 * 1024
+
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+
+        progress_result = self.get_progress_result()
+        self.result_printer(progress_result)
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+    def test_progress_then_more_progress(self):
+        now = time.time()
+
+        mb = 1024 * 1024
+
+        progress_result = self.get_progress_result()
+
+        # Add the first progress update and print it out
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+
+        self.result_printer(progress_result)
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+        # Add the second progress update
+        self.result_recorder.bytes_transferred += mb
+        self.assertFalse(self.result_printer._first)
+        with mock.patch(
+            "awscli.customizations.s3.results.time.time"
+        ) as mock_time:
+            mock_time.return_value = now + 3
+            self.result_printer(progress_result)
+            # The result should be the combination of the two
+            ref_progress_statement = (
+                'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+                'Completed 2.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+            )
+            self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+    def test_progress_then_no_more_progress(self):
+        """Check for progress at a time before the frequency minimum"""
+        now = time.time()
+
+        mb = 1024 * 1024
+
+        progress_result = self.get_progress_result()
+
+        # Add the first progress update and print it out
+        self.result_recorder.expected_bytes_transferred = 20 * mb
+        self.result_recorder.expected_files_transferred = 4
+        self.result_recorder.final_expected_files_transferred = 4
+        self.result_recorder.bytes_transferred = mb
+        self.result_recorder.files_transferred = 1
+
+        self.result_printer(progress_result)
+        ref_progress_statement = (
+            'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+        )
+        self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+        # Add the second progress update
+        self.result_recorder.bytes_transferred += mb
+        self.assertFalse(self.result_printer._first)
+        with mock.patch(
+            "awscli.customizations.s3.results.time.time"
+        ) as mock_time:
+            mock_time.return_value = now + 1
+            self.result_printer(progress_result)
+            # The result should be the combination of the two
+            ref_progress_statement = 'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) remaining\n'
+            self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
+
+
 class TestResultPrinter(BaseResultPrinterTest):
     def test_unknown_result_object(self):
         self.result_printer(object())
@@ -718,7 +998,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer(progress_result)
         ref_progress_statement = (
             'Completed 1.0 MiB/20.0 MiB (0 Bytes/s) with 3 file(s) '
-            'remaining\r')
+            'remaining\r'
+        )
         self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
 
     def test_progress_with_no_expected_transfer_bytes(self):
@@ -731,7 +1012,8 @@ class TestResultPrinter(BaseResultPrinte
         progress_result = self.get_progress_result()
         self.result_printer(progress_result)
         ref_progress_statement = (
-            'Completed 1 file(s) with 3 file(s) remaining\r')
+            'Completed 1 file(s) with 3 file(s) remaining\r'
+        )
         self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
 
     def test_progress_then_more_progress(self):
@@ -775,7 +1057,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer(progress_result)
         ref_progress_statement = (
             'Completed 1.0 MiB/~20.0 MiB (0 Bytes/s) with ~3 file(s) '
-            'remaining (calculating...)\r')
+            'remaining (calculating...)\r'
+        )
         self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
 
     def test_progress_still_calculating_totals_no_bytes(self):
@@ -787,7 +1070,8 @@ class TestResultPrinter(BaseResultPrinte
         progress_result = self.get_progress_result()
         self.result_printer(progress_result)
         ref_progress_statement = (
-            'Completed 1 file(s) with ~3 file(s) remaining (calculating...)\r')
+            'Completed 1 file(s) with ~3 file(s) remaining (calculating...)\r'
+        )
         self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
 
     def test_progress_with_transfer_speed_reporting(self):
@@ -804,7 +1088,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer(progress_result)
         ref_progress_statement = (
             'Completed 1.0 MiB/20.0 MiB (7.0 KiB/s) with 3 file(s) '
-            'remaining\r')
+            'remaining\r'
+        )
         self.assertEqual(self.out_file.getvalue(), ref_progress_statement)
 
     def test_success(self):
@@ -819,13 +1104,12 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
 
-        ref_success_statement = (
-            'upload: file to s3://mybucket/mykey\n'
-        )
+        ref_success_statement = 'upload: file to s3://mybucket/mykey\n'
         self.assertEqual(self.out_file.getvalue(), ref_success_statement)
 
     def test_success_with_progress(self):
@@ -846,7 +1130,8 @@ class TestResultPrinter(BaseResultPrinte
         src = 'file'
         dest = 's3://mybucket/mykey'
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_recorder.files_transferred += 1
         self.result_printer(success_result)
@@ -874,7 +1159,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.bytes_transferred = mb
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
 
@@ -897,7 +1183,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.bytes_transferred = mb
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
 
@@ -919,13 +1206,12 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=None)
+            transfer_type=transfer_type, src=src, dest=None
+        )
 
         self.result_printer(success_result)
 
-        ref_success_statement = (
-            'delete: s3://mybucket/mykey\n'
-        )
+        ref_success_statement = 'delete: s3://mybucket/mykey\n'
         self.assertEqual(self.out_file.getvalue(), ref_success_statement)
 
     def test_delete_success_with_files_remaining(self):
@@ -936,7 +1222,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=None)
+            transfer_type=transfer_type, src=src, dest=None
+        )
 
         self.result_printer(success_result)
 
@@ -954,7 +1241,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=None)
+            transfer_type=transfer_type, src=src, dest=None
+        )
 
         self.result_printer(success_result)
 
@@ -976,8 +1264,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -992,7 +1283,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         transfer_type = 'upload'
@@ -1006,8 +1297,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.bytes_transferred = mb
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1023,7 +1317,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         transfer_type = 'upload'
@@ -1037,8 +1331,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.bytes_transferred = mb
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1055,7 +1352,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         mb = 1024 * 1024
@@ -1075,8 +1372,11 @@ class TestResultPrinter(BaseResultPrinte
         src = 'file'
         dest = 's3://mybucket/mykey'
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_recorder.bytes_failed_to_transfer = 3 * mb
         self.result_recorder.files_transferred += 1
@@ -1104,8 +1404,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=None,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=None,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1120,7 +1423,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         transfer_type = 'delete'
@@ -1131,8 +1434,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=None,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=None,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1147,7 +1453,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         transfer_type = 'delete'
@@ -1157,8 +1463,11 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=None,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=None,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1186,7 +1495,7 @@ class TestResultPrinter(BaseResultPrinte
         self.result_printer = ResultPrinter(
             result_recorder=self.result_recorder,
             out_file=shared_file,
-            error_file=shared_file
+            error_file=shared_file,
         )
 
         mb = 1024 * 1024
@@ -1244,7 +1553,7 @@ class TestResultPrinter(BaseResultPrinte
         result = DryRunResult(
             transfer_type='upload',
             src='s3://mybucket/key',
-            dest='./local/file'
+            dest='./local/file',
         )
         self.result_printer(result)
         expected = '(dryrun) upload: s3://mybucket/key to ./local/file\n'
@@ -1262,7 +1571,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.bytes_transferred = mb
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
 
@@ -1304,11 +1614,11 @@ class TestResultPrinter(BaseResultPrinte
 
         result = SuccessResult(
             transfer_type='upload',
-            src=u'/tmp/\u2713',
-            dest='s3://mybucket/mykey'
+            src='/tmp/\u2713',
+            dest='s3://mybucket/mykey',
         )
         self.result_printer(result)
-        expected = u'upload: /tmp/\u2713 to s3://mybucket/mykey\n'
+        expected = 'upload: /tmp/\u2713 to s3://mybucket/mykey\n'
         self.assertEqual(self.out_file.getvalue(), expected)
 
     def test_print_unicode_success_src(self):
@@ -1319,27 +1629,25 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         result = SuccessResult(
-            transfer_type='delete',
-            src=u's3://mybucket/tmp/\u2713',
-            dest=None
+            transfer_type='delete', src='s3://mybucket/tmp/\u2713', dest=None
         )
         self.result_printer(result)
-        expected = u'delete: s3://mybucket/tmp/\u2713\n'
+        expected = 'delete: s3://mybucket/tmp/\u2713\n'
         self.assertEqual(self.out_file.getvalue(), expected)
 
     def test_print_unicode_dryrun(self):
         result = DryRunResult(
             transfer_type='upload',
-            src=u's3://mybucket/\u2713',
-            dest='./local/file'
+            src='s3://mybucket/\u2713',
+            dest='./local/file',
         )
         self.result_printer(result)
-        expected = u'(dryrun) upload: s3://mybucket/\u2713 to ./local/file\n'
+        expected = '(dryrun) upload: s3://mybucket/\u2713 to ./local/file\n'
         self.assertEqual(self.out_file.getvalue(), expected)
 
     def test_print_unicode_failure(self):
         transfer_type = 'upload'
-        src = u'\u2713'
+        src = '\u2713'
         dest = 's3://mybucket/mykey'
 
         # Pretend that this is the final result in the result queue that
@@ -1349,13 +1657,16 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.files_transferred = 1
 
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
         ref_failure_statement = (
-            u'upload failed: \u2713 to s3://mybucket/mykey my exception\n'
+            'upload failed: \u2713 to s3://mybucket/mykey my exception\n'
         )
         self.assertEqual(self.error_file.getvalue(), ref_failure_statement)
         self.assertEqual(self.out_file.getvalue(), '')
@@ -1367,8 +1678,8 @@ class TestResultPrinter(BaseResultPrinte
         self.result_recorder.expected_files_transferred = 1
         self.result_recorder.files_transferred = 1
 
-        self.result_printer(WarningResult(u'warning: unicode exists \u2713'))
-        ref_warning_statement = u'warning: unicode exists \u2713\n'
+        self.result_printer(WarningResult('warning: unicode exists \u2713'))
+        ref_warning_statement = 'warning: unicode exists \u2713\n'
         self.assertEqual(self.error_file.getvalue(), ref_warning_statement)
         self.assertEqual(self.out_file.getvalue(), '')
 
@@ -1380,11 +1691,11 @@ class TestResultPrinter(BaseResultPrinte
 
 class TestNoProgressResultPrinter(BaseResultPrinterTest):
     def setUp(self):
-        super(TestNoProgressResultPrinter, self).setUp()
+        super().setUp()
         self.result_printer = NoProgressResultPrinter(
             result_recorder=self.result_recorder,
             out_file=self.out_file,
-            error_file=self.error_file
+            error_file=self.error_file,
         )
 
     def test_does_not_print_progress_result(self):
@@ -1397,7 +1708,8 @@ class TestNoProgressResultPrinter(BaseRe
         src = 'file'
         dest = 's3://mybucket/mykey'
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
         expected_message = 'upload: file to s3://mybucket/mykey\n'
@@ -1408,8 +1720,11 @@ class TestNoProgressResultPrinter(BaseRe
         src = 'file'
         dest = 's3://mybucket/mykey'
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1435,7 +1750,8 @@ class TestNoProgressResultPrinter(BaseRe
         self.result_recorder.bytes_transferred = mb
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
         self.result_printer(success_result)
         ref_statement = 'upload: file to s3://mybucket/mykey\n'
         self.assertEqual(self.out_file.getvalue(), ref_statement)
@@ -1447,11 +1763,11 @@ class TestNoProgressResultPrinter(BaseRe
 
 class TestOnlyShowErrorsResultPrinter(BaseResultPrinterTest):
     def setUp(self):
-        super(TestOnlyShowErrorsResultPrinter, self).setUp()
+        super().setUp()
         self.result_printer = OnlyShowErrorsResultPrinter(
             result_recorder=self.result_recorder,
             out_file=self.out_file,
-            error_file=self.error_file
+            error_file=self.error_file,
         )
 
     def test_does_not_print_progress_result(self):
@@ -1464,7 +1780,8 @@ class TestOnlyShowErrorsResultPrinter(Ba
         src = 'file'
         dest = 's3://mybucket/mykey'
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
 
         self.result_printer(success_result)
         self.assertEqual(self.out_file.getvalue(), '')
@@ -1474,8 +1791,11 @@ class TestOnlyShowErrorsResultPrinter(Ba
         src = 'file'
         dest = 's3://mybucket/mykey'
         failure_result = FailureResult(
-            transfer_type=transfer_type, src=src, dest=dest,
-            exception=Exception('my exception'))
+            transfer_type=transfer_type,
+            src=src,
+            dest=dest,
+            exception=Exception('my exception'),
+        )
 
         self.result_printer(failure_result)
 
@@ -1501,7 +1821,8 @@ class TestOnlyShowErrorsResultPrinter(Ba
         self.result_recorder.bytes_transferred = mb
 
         success_result = SuccessResult(
-            transfer_type=transfer_type, src=src, dest=dest)
+            transfer_type=transfer_type, src=src, dest=dest
+        )
         self.result_printer(success_result)
         ref_statement = ''
         self.assertEqual(self.out_file.getvalue(), ref_statement)
@@ -1521,7 +1842,8 @@ class TestResultProcessor(unittest.TestC
         self.results_handled = []
 
         self.result_processor = ResultProcessor(
-            self.result_queue, [self.results_handled.append])
+            self.result_queue, [self.results_handled.append]
+        )
 
     def _handle_result_with_exception(self, result):
         raise Exception()
@@ -1533,7 +1855,7 @@ class TestResultProcessor(unittest.TestC
         total_transfer_size = 1024 * 1024
         results_to_process = [
             QueuedResult(transfer_type, src, dest, total_transfer_size),
-            SuccessResult(transfer_type, src, dest)
+            SuccessResult(transfer_type, src, dest),
         ]
         results_with_shutdown = results_to_process + [ShutdownThreadRequest()]
 
@@ -1550,7 +1872,7 @@ class TestResultProcessor(unittest.TestC
         total_transfer_size = 1024 * 1024
         results_to_process = [
             QueuedResult(transfer_type, src, dest, total_transfer_size),
-            SuccessResult(transfer_type, src, dest)
+            SuccessResult(transfer_type, src, dest),
         ]
         results_with_shutdown = results_to_process + [ShutdownThreadRequest()]
 
@@ -1570,7 +1892,7 @@ class TestResultProcessor(unittest.TestC
         total_transfer_size = 1024 * 1024
         results_to_process = [
             QueuedResult(transfer_type, src, dest, total_transfer_size),
-            SuccessResult(transfer_type, src, dest)
+            SuccessResult(transfer_type, src, dest),
         ]
         results_with_shutdown = results_to_process + [ShutdownThreadRequest()]
 
@@ -1580,8 +1902,12 @@ class TestResultProcessor(unittest.TestC
         results_handled_after_exception = []
         self.result_processor = ResultProcessor(
             self.result_queue,
-            [self.results_handled.append, self._handle_result_with_exception,
-             results_handled_after_exception.append])
+            [
+                self.results_handled.append,
+                self._handle_result_with_exception,
+                results_handled_after_exception.append,
+            ],
+        )
 
         self.result_processor.run()
 
@@ -1600,13 +1926,16 @@ class TestResultProcessor(unittest.TestC
         dest = 'dest'
         results_to_be_handled = [
             SuccessResult(transfer_type, src, dest),
-            ErrorResult(Exception('my exception'))
+            ErrorResult(Exception('my exception')),
         ]
         result_not_to_be_handled = [
             ErrorResult(Exception('my second exception'))
         ]
-        results_with_shutdown = results_to_be_handled + \
-            result_not_to_be_handled + [ShutdownThreadRequest()]
+        results_with_shutdown = (
+            results_to_be_handled
+            + result_not_to_be_handled
+            + [ShutdownThreadRequest()]
+        )
 
         for result in results_with_shutdown:
             self.result_queue.put(result)
@@ -1626,10 +1955,12 @@ class TestResultProcessor(unittest.TestC
         total_transfer_size = 1024 * 1024
         results_to_process = [
             QueuedResult(transfer_type, src, dest, total_transfer_size),
-            SuccessResult(transfer_type, src, dest)
+            SuccessResult(transfer_type, src, dest),
         ]
         results_with_shutdown = results_to_process + [
-            ShutdownThreadRequest(), WarningResult('my warning')]
+            ShutdownThreadRequest(),
+            WarningResult('my warning'),
+        ]
 
         for result in results_with_shutdown:
             self.result_queue.put(result)
@@ -1644,65 +1975,77 @@ class TestCommandResultRecorder(unittest
         self.result_queue = queue.Queue()
         self.result_recorder = ResultRecorder()
         self.result_processor = ResultProcessor(
-            self.result_queue, [self.result_recorder])
+            self.result_queue, [self.result_recorder]
+        )
         self.command_result_recorder = CommandResultRecorder(
-            self.result_queue, self.result_recorder, self.result_processor)
+            self.result_queue, self.result_recorder, self.result_processor
+        )
 
         self.transfer_type = 'upload'
         self.src = 'file'
         self.dest = 's3://mybucket/mykey'
-        self.total_transfer_size = 20 * (1024 ** 1024)
+        self.total_transfer_size = 20 * (1024**1024)
 
     def test_success(self):
         with self.command_result_recorder:
             self.result_queue.put(
                 QueuedResult(
-                    transfer_type=self.transfer_type, src=self.src,
+                    transfer_type=self.transfer_type,
+                    src=self.src,
                     dest=self.dest,
-                    total_transfer_size=self.total_transfer_size
+                    total_transfer_size=self.total_transfer_size,
                 )
             )
             self.result_queue.put(
                 SuccessResult(
-                    transfer_type=self.transfer_type, src=self.src,
-                    dest=self.dest
+                    transfer_type=self.transfer_type,
+                    src=self.src,
+                    dest=self.dest,
                 )
             )
         self.assertEqual(
-            self.command_result_recorder.get_command_result(), (0, 0))
+            self.command_result_recorder.get_command_result(), (0, 0)
+        )
 
     def test_fail(self):
         with self.command_result_recorder:
             self.result_queue.put(
                 QueuedResult(
-                    transfer_type=self.transfer_type, src=self.src,
+                    transfer_type=self.transfer_type,
+                    src=self.src,
                     dest=self.dest,
-                    total_transfer_size=self.total_transfer_size
+                    total_transfer_size=self.total_transfer_size,
                 )
             )
             self.result_queue.put(
                 FailureResult(
-                    transfer_type=self.transfer_type, src=self.src,
-                    dest=self.dest, exception=Exception('my exception')
+                    transfer_type=self.transfer_type,
+                    src=self.src,
+                    dest=self.dest,
+                    exception=Exception('my exception'),
                 )
             )
         self.assertEqual(
-            self.command_result_recorder.get_command_result(), (1, 0))
+            self.command_result_recorder.get_command_result(), (1, 0)
+        )
 
     def test_warning(self):
         with self.command_result_recorder:
             self.result_queue.put(WarningResult(message='my warning'))
         self.assertEqual(
-            self.command_result_recorder.get_command_result(), (0, 1))
+            self.command_result_recorder.get_command_result(), (0, 1)
+        )
 
     def test_error(self):
         with self.command_result_recorder:
             raise Exception('my exception')
         self.assertEqual(
-            self.command_result_recorder.get_command_result(), (1, 0))
+            self.command_result_recorder.get_command_result(), (1, 0)
+        )
 
     def test_notify_total_submissions(self):
         total = 5
         self.command_result_recorder.notify_total_submissions(total)
         self.assertEqual(
-            self.result_queue.get(), FinalTotalSubmissionsResult(total))
+            self.result_queue.get(), FinalTotalSubmissionsResult(total)
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_s3.py 2.31.35-1/tests/unit/customizations/s3/test_s3.py
--- 2.23.6-1/tests/unit/customizations/s3/test_s3.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_s3.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest, BaseAWSCommandParamsTest
-from awscli.customizations.s3.s3 import awscli_initialize, add_s3
+from awscli.customizations.s3.s3 import add_s3, awscli_initialize
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 class AWSInitializeTest(unittest.TestCase):
@@ -19,6 +19,7 @@ class AWSInitializeTest(unittest.TestCas
     This test ensures that all events are correctly registered such that
     all of the commands can be run.
     """
+
     def setUp(self):
         self.cli = mock.Mock()
 
@@ -50,8 +51,9 @@ class CreateTablesTest(unittest.TestCase
 class TestS3(BaseAWSCommandParamsTest):
     def test_too_few_args(self):
         stderr = self.run_cmd('s3', expected_rc=252)[1]
-        self.assertIn(("usage: aws [options] s3 "
-                       "<subcommand> [parameters]"), stderr)
+        self.assertIn(
+            ("usage: aws [options] s3 " "<subcommand> [parameters]"), stderr
+        )
         self.assertIn('too few arguments', stderr)
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_s3handler.py 2.31.35-1/tests/unit/customizations/s3/test_s3handler.py
--- 2.23.6-1/tests/unit/customizations/s3/test_s3handler.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_s3handler.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,42 +14,50 @@ import os
 
 from s3transfer.manager import TransferManager
 
-from awscli.testutils import mock, unittest
-from awscli.testutils import FileCreator
 from awscli.compat import queue
-from awscli.customizations.s3.s3handler import S3TransferHandler
-from awscli.customizations.s3.s3handler import S3TransferHandlerFactory
-from awscli.customizations.s3.s3handler import UploadRequestSubmitter
-from awscli.customizations.s3.s3handler import DownloadRequestSubmitter
-from awscli.customizations.s3.s3handler import CopyRequestSubmitter
-from awscli.customizations.s3.s3handler import UploadStreamRequestSubmitter
-from awscli.customizations.s3.s3handler import DownloadStreamRequestSubmitter
-from awscli.customizations.s3.s3handler import DeleteRequestSubmitter
-from awscli.customizations.s3.s3handler import LocalDeleteRequestSubmitter
 from awscli.customizations.s3.fileinfo import FileInfo
-from awscli.customizations.s3.results import QueuedResult
-from awscli.customizations.s3.results import SuccessResult
-from awscli.customizations.s3.results import FailureResult
-from awscli.customizations.s3.results import QueuedResultSubscriber
-from awscli.customizations.s3.results import ProgressResultSubscriber
-from awscli.customizations.s3.results import DoneResultSubscriber
-from awscli.customizations.s3.results import ResultRecorder
-from awscli.customizations.s3.results import ResultProcessor
-from awscli.customizations.s3.results import CommandResultRecorder
-from awscli.customizations.s3.results import DryRunResult
-from awscli.customizations.s3.utils import MAX_UPLOAD_SIZE
-from awscli.customizations.s3.utils import NonSeekableStream
-from awscli.customizations.s3.utils import StdoutBytesWriter
-from awscli.customizations.s3.utils import WarningResult
+from awscli.customizations.s3.results import (
+    CommandResultRecorder,
+    DoneResultSubscriber,
+    DryRunResult,
+    FailureResult,
+    ProgressResultSubscriber,
+    QueuedResult,
+    QueuedResultSubscriber,
+    ResultProcessor,
+    ResultRecorder,
+    SuccessResult,
+)
+from awscli.customizations.s3.s3handler import (
+    CopyRequestSubmitter,
+    DeleteRequestSubmitter,
+    DownloadRequestSubmitter,
+    DownloadStreamRequestSubmitter,
+    LocalDeleteRequestSubmitter,
+    S3TransferHandler,
+    S3TransferHandlerFactory,
+    UploadRequestSubmitter,
+    UploadStreamRequestSubmitter,
+)
 from awscli.customizations.s3.subscribers import (
-    ProvideSizeSubscriber, SetMetadataDirectivePropsSubscriber,
-    SetTagsSubscriber, ProvideUploadContentTypeSubscriber,
-    ProvideLastModifiedTimeSubscriber,
-    DirectoryCreatorSubscriber, DeleteSourceFileSubscriber,
+    DeleteSourceFileSubscriber,
     DeleteSourceObjectSubscriber,
-
+    DirectoryCreatorSubscriber,
+    ProvideETagSubscriber,
+    ProvideLastModifiedTimeSubscriber,
+    ProvideSizeSubscriber,
+    ProvideUploadContentTypeSubscriber,
+    SetMetadataDirectivePropsSubscriber,
+    SetTagsSubscriber,
 )
 from awscli.customizations.s3.transferconfig import RuntimeConfig
+from awscli.customizations.s3.utils import (
+    MAX_UPLOAD_SIZE,
+    NonSeekableStream,
+    StdoutBytesWriter,
+    WarningResult,
+)
+from awscli.testutils import FileCreator, mock, unittest
 
 
 def runtime_config(**kwargs):
@@ -67,7 +75,7 @@ class TestS3TransferHandlerFactory(unitt
         factory = S3TransferHandlerFactory(self.cli_params)
         self.assertIsInstance(
             factory(self.transfer_manager, self.result_queue),
-            S3TransferHandler
+            S3TransferHandler,
         )
 
 
@@ -78,18 +86,20 @@ class TestS3TransferHandler(unittest.Tes
         self.processed_results = []
         self.result_processor = ResultProcessor(
             self.result_queue,
-            [self.result_recorder, self.processed_results.append]
+            [self.result_recorder, self.processed_results.append],
         )
         self.command_result_recorder = CommandResultRecorder(
-            self.result_queue, self.result_recorder, self.result_processor)
+            self.result_queue, self.result_recorder, self.result_processor
+        )
 
         self.transfer_manager = mock.Mock(spec=TransferManager)
         self.transfer_manager.__enter__ = mock.Mock()
         self.transfer_manager.__exit__ = mock.Mock()
         self.parameters = {}
         self.s3_transfer_handler = S3TransferHandler(
-            self.transfer_manager, self.parameters,
-            self.command_result_recorder
+            self.transfer_manager,
+            self.parameters,
+            self.command_result_recorder,
         )
 
     def test_call_return_command_result(self):
@@ -105,46 +115,59 @@ class TestS3TransferHandler(unittest.Tes
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='filename', dest='bucket/key',
-                         operation_name='upload'))
+                FileInfo(
+                    src='filename', dest='bucket/key', operation_name='upload'
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
         self.assertEqual(
-            self.transfer_manager.upload.call_count, num_transfers)
+            self.transfer_manager.upload.call_count, num_transfers
+        )
 
     def test_enqueue_downloads(self):
         fileinfos = []
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='bucket/key', dest='filename',
-                         compare_key='key',
-                         operation_name='download'))
+                FileInfo(
+                    src='bucket/key',
+                    dest='filename',
+                    compare_key='key',
+                    operation_name='download',
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
         self.assertEqual(
-            self.transfer_manager.download.call_count, num_transfers)
+            self.transfer_manager.download.call_count, num_transfers
+        )
 
     def test_enqueue_copies(self):
         fileinfos = []
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='sourcebucket/sourcekey', dest='bucket/key',
-                         compare_key='key',
-                         operation_name='copy'))
+                FileInfo(
+                    src='sourcebucket/sourcekey',
+                    dest='bucket/key',
+                    compare_key='key',
+                    operation_name='copy',
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
-        self.assertEqual(
-            self.transfer_manager.copy.call_count, num_transfers)
+        self.assertEqual(self.transfer_manager.copy.call_count, num_transfers)
 
     def test_exception_when_enqueuing(self):
         fileinfos = [
-            FileInfo(src='filename', dest='bucket/key',
-                     operation_name='upload')
+            FileInfo(
+                src='filename', dest='bucket/key', operation_name='upload'
+            )
         ]
         self.transfer_manager.__exit__.side_effect = Exception(
-            'some exception')
+            'some exception'
+        )
         command_result = self.s3_transfer_handler.call(fileinfos)
         # Exception should have been raised casing the command result to
         # have failed results of one.
@@ -153,44 +176,60 @@ class TestS3TransferHandler(unittest.Tes
     def test_enqueue_upload_stream(self):
         self.parameters['is_stream'] = True
         self.s3_transfer_handler.call(
-            [FileInfo(src='-', dest='bucket/key', operation_name='upload')])
-        self.assertEqual(
-            self.transfer_manager.upload.call_count, 1)
+            [FileInfo(src='-', dest='bucket/key', operation_name='upload')]
+        )
+        self.assertEqual(self.transfer_manager.upload.call_count, 1)
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
-        self.assertIsInstance(
-            upload_call_kwargs['fileobj'], NonSeekableStream)
+        self.assertIsInstance(upload_call_kwargs['fileobj'], NonSeekableStream)
 
     def test_enqueue_dowload_stream(self):
         self.parameters['is_stream'] = True
         self.s3_transfer_handler.call(
-            [FileInfo(src='bucket/key', dest='-',
-                      compare_key='key',
-                      operation_name='download')])
-        self.assertEqual(
-            self.transfer_manager.download.call_count, 1)
+            [
+                FileInfo(
+                    src='bucket/key',
+                    dest='-',
+                    compare_key='key',
+                    operation_name='download',
+                )
+            ]
+        )
+        self.assertEqual(self.transfer_manager.download.call_count, 1)
         download_call_kwargs = self.transfer_manager.download.call_args[1]
         self.assertIsInstance(
-            download_call_kwargs['fileobj'], StdoutBytesWriter)
+            download_call_kwargs['fileobj'], StdoutBytesWriter
+        )
 
     def test_enqueue_deletes(self):
         fileinfos = []
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='bucket/key', dest=None, operation_name='delete',
-                         src_type='s3'))
+                FileInfo(
+                    src='bucket/key',
+                    dest=None,
+                    operation_name='delete',
+                    src_type='s3',
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
         self.assertEqual(
-            self.transfer_manager.delete.call_count, num_transfers)
+            self.transfer_manager.delete.call_count, num_transfers
+        )
 
     def test_enqueue_local_deletes(self):
         fileinfos = []
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='myfile', dest=None, operation_name='delete',
-                         src_type='local'))
+                FileInfo(
+                    src='myfile',
+                    dest=None,
+                    operation_name='delete',
+                    src_type='local',
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
         # The number of processed results will be equal to:
@@ -214,14 +253,18 @@ class TestS3TransferHandler(unittest.Tes
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='bucket/key', dest='filename',
-                         compare_key='key',
-                         operation_name='download'))
+                FileInfo(
+                    src='bucket/key',
+                    dest='filename',
+                    compare_key='key',
+                    operation_name='download',
+                )
+            )
 
         self.s3_transfer_handler.call(fileinfos)
         self.assertEqual(
             self.result_recorder.final_expected_files_transferred,
-            num_transfers
+            num_transfers,
         )
 
     def test_notifies_total_submissions_accounts_for_skips(self):
@@ -229,23 +272,32 @@ class TestS3TransferHandler(unittest.Tes
         num_transfers = 5
         for _ in range(num_transfers):
             fileinfos.append(
-                FileInfo(src='bucket/key', dest='filename',
-                         compare_key='key',
-                         operation_name='download'))
+                FileInfo(
+                    src='bucket/key',
+                    dest='filename',
+                    compare_key='key',
+                    operation_name='download',
+                )
+            )
 
         # Add a fileinfo that should get skipped. To skip, we do a glacier
         # download.
-        fileinfos.append(FileInfo(
-            src='bucket/key', dest='filename', operation_name='download',
-            compare_key='key',
-            associated_response_data={'StorageClass': 'GLACIER'}))
+        fileinfos.append(
+            FileInfo(
+                src='bucket/key',
+                dest='filename',
+                operation_name='download',
+                compare_key='key',
+                associated_response_data={'StorageClass': 'GLACIER'},
+            )
+        )
         self.s3_transfer_handler.call(fileinfos)
         # Since the last glacier download was skipped the final expected
         # total should be equal to the number of transfers provided in the
         # for loop.
         self.assertEqual(
             self.result_recorder.final_expected_files_transferred,
-            num_transfers
+            num_transfers,
         )
 
 
@@ -263,21 +315,23 @@ class TestUploadRequestSubmitter(BaseTra
     def setUp(self):
         super(TestUploadRequestSubmitter, self).setUp()
         self.transfer_request_submitter = UploadRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key,
-            operation_name='upload')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.filename,
+            dest=self.bucket + '/' + self.key,
+            operation_name='upload',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         fileinfo.operation_name = 'foo'
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         self.cli_params['guess_mime_type'] = True  # Default settings
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -291,6 +345,7 @@ class TestUploadRequestSubmitter(BaseTra
         # Make sure the subscriber applied are of the correct type and order
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProvideUploadContentTypeSubscriber,
             ProgressResultSubscriber,
@@ -303,7 +358,8 @@ class TestUploadRequestSubmitter(BaseTra
 
     def test_submit_with_extra_args(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         # Set some extra argument like storage_class to make sure cli
         # params get mapped to request parameters.
         self.cli_params['storage_class'] = 'STANDARD_IA'
@@ -311,19 +367,23 @@ class TestUploadRequestSubmitter(BaseTra
 
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
         self.assertEqual(
-            upload_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'})
+            upload_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'}
+        )
 
     def test_submit_when_content_type_specified(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         self.cli_params['content_type'] = 'text/plain'
         self.transfer_request_submitter.submit(fileinfo)
 
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
         self.assertEqual(
-            upload_call_kwargs['extra_args'], {'ContentType': 'text/plain'})
+            upload_call_kwargs['extra_args'], {'ContentType': 'text/plain'}
+        )
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -335,13 +395,15 @@ class TestUploadRequestSubmitter(BaseTra
 
     def test_submit_when_no_guess_content_mime_type(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         self.cli_params['guess_mime_type'] = False
         self.transfer_request_submitter.submit(fileinfo)
 
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -353,8 +415,10 @@ class TestUploadRequestSubmitter(BaseTra
 
     def test_warn_on_too_large_transfer(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key,
-            size=MAX_UPLOAD_SIZE+1)
+            src=self.filename,
+            dest=self.bucket + '/' + self.key,
+            size=MAX_UPLOAD_SIZE + 1,
+        )
         future = self.transfer_request_submitter.submit(fileinfo)
 
         # A warning should have been submitted because it is too large.
@@ -369,10 +433,15 @@ class TestUploadRequestSubmitter(BaseTra
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = UploadRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = FileInfo(
-            src=self.filename, src_type='local', operation_name='upload',
-            dest=self.bucket + '/' + self.key, dest_type='s3')
+            src=self.filename,
+            src_type='local',
+            operation_name='upload',
+            dest=self.bucket + '/' + self.key,
+            dest_type='s3',
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
@@ -383,12 +452,14 @@ class TestUploadRequestSubmitter(BaseTra
 
     def test_submit_move_adds_delete_source_subscriber(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         self.cli_params['guess_mime_type'] = True  # Default settings
         self.cli_params['is_move'] = True
         self.transfer_request_submitter.submit(fileinfo)
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProvideUploadContentTypeSubscriber,
             DeleteSourceFileSubscriber,
@@ -406,7 +477,8 @@ class TestDownloadRequestSubmitter(BaseT
     def setUp(self):
         super(TestDownloadRequestSubmitter, self).setUp()
         self.transfer_request_submitter = DownloadRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def assert_no_downloads_happened(self):
         self.assertEqual(len(self.transfer_manager.download.call_args_list), 0)
@@ -426,13 +498,13 @@ class TestDownloadRequestSubmitter(BaseT
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=self.filename,
-            operation_name='download')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.bucket + '/' + self.key,
+            dest=self.filename,
+            operation_name='download',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         fileinfo.operation_name = 'foo'
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = self.create_file_info(self.key)
@@ -448,6 +520,7 @@ class TestDownloadRequestSubmitter(BaseT
         # Make sure the subscriber applied are of the correct type and order
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             DirectoryCreatorSubscriber,
             ProvideLastModifiedTimeSubscriber,
@@ -470,16 +543,17 @@ class TestDownloadRequestSubmitter(BaseT
         download_call_kwargs = self.transfer_manager.download.call_args[1]
         self.assertEqual(
             download_call_kwargs['extra_args'],
-            {'SSECustomerAlgorithm': 'AES256', 'SSECustomerKey': 'mykey'}
+            {'SSECustomerAlgorithm': 'AES256', 'SSECustomerKey': 'mykey'},
         )
 
     def test_warn_glacier_for_incompatible(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=self.filename,
+            src=self.bucket + '/' + self.key,
+            dest=self.filename,
             operation_name='download',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -489,7 +563,8 @@ class TestDownloadRequestSubmitter(BaseT
         self.assertIsInstance(warning_result, WarningResult)
         self.assertIn(
             'Unable to perform download operations on GLACIER objects',
-            warning_result.message)
+            warning_result.message,
+        )
 
         # The transfer should have been skipped.
         self.assertIsNone(future)
@@ -497,10 +572,11 @@ class TestDownloadRequestSubmitter(BaseT
 
     def test_not_warn_glacier_for_compatible(self):
         fileinfo = self.create_file_info(
-            self.key, associated_response_data={
+            self.key,
+            associated_response_data={
                 'StorageClass': 'GLACIER',
-                'Restore': 'ongoing-request="false"'
-            }
+                'Restore': 'ongoing-request="false"',
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -518,7 +594,7 @@ class TestDownloadRequestSubmitter(BaseT
             self.key,
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -531,11 +607,12 @@ class TestDownloadRequestSubmitter(BaseT
     def test_warn_glacier_ignore_glacier_warnings(self):
         self.cli_params['ignore_glacier_warnings'] = True
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=self.filename,
+            src=self.bucket + '/' + self.key,
+            dest=self.filename,
             operation_name='download',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -570,7 +647,8 @@ class TestDownloadRequestSubmitter(BaseT
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = DownloadRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = self.create_file_info(self.key)
         self.transfer_request_submitter.submit(fileinfo)
 
@@ -587,6 +665,7 @@ class TestDownloadRequestSubmitter(BaseT
         self.transfer_request_submitter.submit(fileinfo)
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             DirectoryCreatorSubscriber,
             ProvideLastModifiedTimeSubscriber,
@@ -607,29 +686,32 @@ class TestCopyRequestSubmitter(BaseTrans
         self.source_bucket = 'mysourcebucket'
         self.source_key = 'mysourcekey'
         self.transfer_request_submitter = CopyRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key, operation_name='copy')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
+            operation_name='copy',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         fileinfo.operation_name = 'foo'
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key)
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
+        )
         self.cli_params['guess_mime_type'] = True  # Default settings
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.copy.return_value, future)
         copy_call_kwargs = self.transfer_manager.copy.call_args[1]
         self.assertEqual(
             copy_call_kwargs['copy_source'],
-            {'Bucket': self.source_bucket, 'Key': self.source_key})
+            {'Bucket': self.source_bucket, 'Key': self.source_key},
+        )
         self.assertEqual(copy_call_kwargs['bucket'], self.bucket)
         self.assertEqual(copy_call_kwargs['key'], self.key)
         self.assertEqual(copy_call_kwargs['extra_args'], {})
@@ -637,6 +719,7 @@ class TestCopyRequestSubmitter(BaseTrans
         # Make sure the subscriber applied are of the correct type and order
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             SetMetadataDirectivePropsSubscriber,
             SetTagsSubscriber,
@@ -650,8 +733,9 @@ class TestCopyRequestSubmitter(BaseTrans
 
     def test_submit_with_extra_args(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key)
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
+        )
         # Set some extra argument like storage_class to make sure cli
         # params get mapped to request parameters.
         self.cli_params['storage_class'] = 'STANDARD_IA'
@@ -659,20 +743,24 @@ class TestCopyRequestSubmitter(BaseTrans
 
         copy_call_kwargs = self.transfer_manager.copy.call_args[1]
         self.assertEqual(
-            copy_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'})
+            copy_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'}
+        )
 
     def test_submit_when_content_type_specified(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key)
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
+        )
         self.cli_params['content_type'] = 'text/plain'
         self.transfer_request_submitter.submit(fileinfo)
 
         copy_call_kwargs = self.transfer_manager.copy.call_args[1]
         self.assertEqual(
-            copy_call_kwargs['extra_args'], {'ContentType': 'text/plain'})
+            copy_call_kwargs['extra_args'], {'ContentType': 'text/plain'}
+        )
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             SetMetadataDirectivePropsSubscriber,
             SetTagsSubscriber,
@@ -686,8 +774,9 @@ class TestCopyRequestSubmitter(BaseTrans
 
     def test_metadata_directive_excludes_copy_props_subscribers(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key)
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
+        )
         self.cli_params['copy_props'] = 'default'
         self.cli_params['metadata_directive'] = 'REPLACE'
         self.transfer_request_submitter.submit(fileinfo)
@@ -695,6 +784,7 @@ class TestCopyRequestSubmitter(BaseTrans
         copy_call_kwargs = self.transfer_manager.copy.call_args[1]
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -706,12 +796,12 @@ class TestCopyRequestSubmitter(BaseTrans
 
     def test_warn_glacier_for_incompatible(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key,
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
             operation_name='copy',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -721,7 +811,8 @@ class TestCopyRequestSubmitter(BaseTrans
         self.assertIsInstance(warning_result, WarningResult)
         self.assertIn(
             'Unable to perform copy operations on GLACIER objects',
-            warning_result.message)
+            warning_result.message,
+        )
 
         # The transfer request should have never been sent therefore return
         # no future.
@@ -731,13 +822,13 @@ class TestCopyRequestSubmitter(BaseTrans
 
     def test_not_warn_glacier_for_compatible(self):
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key,
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
             operation_name='copy',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-                'Restore': 'ongoing-request="false"'
-            }
+                'Restore': 'ongoing-request="false"',
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.copy.return_value, future)
@@ -752,12 +843,12 @@ class TestCopyRequestSubmitter(BaseTrans
     def test_warn_glacier_force_glacier(self):
         self.cli_params['force_glacier_transfer'] = True
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key,
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
             operation_name='copy',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.copy.return_value, future)
@@ -770,12 +861,12 @@ class TestCopyRequestSubmitter(BaseTrans
     def test_warn_glacier_ignore_glacier_warnings(self):
         self.cli_params['ignore_glacier_warnings'] = True
         fileinfo = FileInfo(
-            src=self.source_bucket+'/'+self.source_key,
-            dest=self.bucket+'/'+self.key,
+            src=self.source_bucket + '/' + self.source_key,
+            dest=self.bucket + '/' + self.key,
             operation_name='copy',
             associated_response_data={
                 'StorageClass': 'GLACIER',
-            }
+            },
         )
         future = self.transfer_request_submitter.submit(fileinfo)
 
@@ -791,11 +882,15 @@ class TestCopyRequestSubmitter(BaseTrans
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = CopyRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = FileInfo(
-            src=self.source_bucket + '/' + self.source_key, src_type='s3',
-            dest=self.bucket + '/' + self.key, dest_type='s3',
-            operation_name='copy')
+            src=self.source_bucket + '/' + self.source_key,
+            src_type='s3',
+            dest=self.bucket + '/' + self.key,
+            dest_type='s3',
+            operation_name='copy',
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
@@ -808,12 +903,14 @@ class TestCopyRequestSubmitter(BaseTrans
     def test_submit_move_adds_delete_source_subscriber(self):
         fileinfo = FileInfo(
             dest=self.source_bucket + '/' + self.source_key,
-            src=self.bucket + '/' + self.key)
+            src=self.bucket + '/' + self.key,
+        )
         self.cli_params['guess_mime_type'] = True  # Default settings
         self.cli_params['is_move'] = True
         self.transfer_request_submitter.submit(fileinfo)
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             SetMetadataDirectivePropsSubscriber,
             SetTagsSubscriber,
@@ -834,32 +931,34 @@ class TestUploadStreamRequestSubmitter(B
         self.filename = '-'
         self.cli_params['is_stream'] = True
         self.transfer_request_submitter = UploadStreamRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key,
-            operation_name='upload')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.filename,
+            dest=self.bucket + '/' + self.key,
+            operation_name='upload',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         self.cli_params['is_stream'] = False
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.upload.return_value, future)
 
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
-        self.assertIsInstance(
-            upload_call_kwargs['fileobj'], NonSeekableStream)
+        self.assertIsInstance(upload_call_kwargs['fileobj'], NonSeekableStream)
         self.assertEqual(upload_call_kwargs['bucket'], self.bucket)
         self.assertEqual(upload_call_kwargs['key'], self.key)
         self.assertEqual(upload_call_kwargs['extra_args'], {})
 
         ref_subscribers = [
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -873,12 +972,14 @@ class TestUploadStreamRequestSubmitter(B
         provided_size = 100
         self.cli_params['expected_size'] = provided_size
         fileinfo = FileInfo(
-            src=self.filename, dest=self.bucket+'/'+self.key)
+            src=self.filename, dest=self.bucket + '/' + self.key
+        )
         self.transfer_request_submitter.submit(fileinfo)
         upload_call_kwargs = self.transfer_manager.upload.call_args[1]
 
         ref_subscribers = [
             ProvideSizeSubscriber,
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -893,10 +994,15 @@ class TestUploadStreamRequestSubmitter(B
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = UploadStreamRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = FileInfo(
-            src=self.filename, src_type='local', operation_name='upload',
-            dest=self.bucket + '/' + self.key, dest_type='s3')
+            src=self.filename,
+            src_type='local',
+            operation_name='upload',
+            dest=self.bucket + '/' + self.key,
+            dest_type='s3',
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
@@ -912,33 +1018,38 @@ class TestDownloadStreamRequestSubmitter
         self.filename = '-'
         self.cli_params['is_stream'] = True
         self.transfer_request_submitter = DownloadStreamRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=self.filename,
-            operation_name='download')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.bucket + '/' + self.key,
+            dest=self.filename,
+            operation_name='download',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         self.cli_params['is_stream'] = False
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=self.filename,
-            compare_key=self.key)
+            src=self.bucket + '/' + self.key,
+            dest=self.filename,
+            compare_key=self.key,
+        )
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.download.return_value, future)
 
         download_call_kwargs = self.transfer_manager.download.call_args[1]
         self.assertIsInstance(
-            download_call_kwargs['fileobj'], StdoutBytesWriter)
+            download_call_kwargs['fileobj'], StdoutBytesWriter
+        )
         self.assertEqual(download_call_kwargs['bucket'], self.bucket)
         self.assertEqual(download_call_kwargs['key'], self.key)
         self.assertEqual(download_call_kwargs['extra_args'], {})
 
         ref_subscribers = [
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -951,11 +1062,16 @@ class TestDownloadStreamRequestSubmitter
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = DownloadStreamRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = FileInfo(
-            dest=self.filename, dest_type='local', operation_name='download',
-            src=self.bucket + '/' + self.key, src_type='s3',
-            compare_key=self.key)
+            dest=self.filename,
+            dest_type='local',
+            operation_name='download',
+            src=self.bucket + '/' + self.key,
+            src_type='s3',
+            compare_key=self.key,
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
@@ -969,28 +1085,35 @@ class TestDeleteRequestSubmitter(BaseTra
     def setUp(self):
         super(TestDeleteRequestSubmitter, self).setUp()
         self.transfer_request_submitter = DeleteRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=None, operation_name='delete',
-            src_type='s3')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.bucket + '/' + self.key,
+            dest=None,
+            operation_name='delete',
+            src_type='s3',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         fileinfo.operation_name = 'foo'
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_cannot_submit_local_deletes(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=None, operation_name='delete',
-            src_type='local')
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.bucket + '/' + self.key,
+            dest=None,
+            operation_name='delete',
+            src_type='local',
+        )
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         fileinfo = FileInfo(
-            src=self.bucket+'/'+self.key, dest=None, operation_name='delete')
+            src=self.bucket + '/' + self.key,
+            dest=None,
+            operation_name='delete',
+        )
         future = self.transfer_request_submitter.submit(fileinfo)
         self.assertIs(self.transfer_manager.delete.return_value, future)
 
@@ -1000,6 +1123,7 @@ class TestDeleteRequestSubmitter(BaseTra
         self.assertEqual(delete_call_kwargs['extra_args'], {})
 
         ref_subscribers = [
+            ProvideETagSubscriber,
             QueuedResultSubscriber,
             ProgressResultSubscriber,
             DoneResultSubscriber,
@@ -1012,11 +1136,15 @@ class TestDeleteRequestSubmitter(BaseTra
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         self.transfer_request_submitter = DeleteRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         fileinfo = FileInfo(
-            src=self.bucket + '/' + self.key, src_type='s3',
-            dest=self.bucket + '/' + self.key, dest_type='s3',
-            operation_name='delete')
+            src=self.bucket + '/' + self.key,
+            src_type='s3',
+            dest=self.bucket + '/' + self.key,
+            dest_type='s3',
+            operation_name='delete',
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
@@ -1030,7 +1158,8 @@ class TestLocalDeleteRequestSubmitter(Ba
     def setUp(self):
         super(TestLocalDeleteRequestSubmitter, self).setUp()
         self.transfer_request_submitter = LocalDeleteRequestSubmitter(
-            self.transfer_manager, self.result_queue, self.cli_params)
+            self.transfer_manager, self.result_queue, self.cli_params
+        )
         self.file_creator = FileCreator()
 
     def tearDown(self):
@@ -1039,26 +1168,32 @@ class TestLocalDeleteRequestSubmitter(Ba
 
     def test_can_submit(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=None, operation_name='delete',
-            src_type='local')
-        self.assertTrue(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.filename,
+            dest=None,
+            operation_name='delete',
+            src_type='local',
+        )
+        self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo))
         fileinfo.operation_name = 'foo'
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_cannot_submit_remote_deletes(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=None, operation_name='delete',
-            src_type='s3')
-        self.assertFalse(
-            self.transfer_request_submitter.can_submit(fileinfo))
+            src=self.filename,
+            dest=None,
+            operation_name='delete',
+            src_type='s3',
+        )
+        self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo))
 
     def test_submit(self):
         full_filename = self.file_creator.create_file(self.filename, 'content')
         fileinfo = FileInfo(
-            src=full_filename, dest=None, operation_name='delete',
-            src_type='local')
+            src=full_filename,
+            dest=None,
+            operation_name='delete',
+            src_type='local',
+        )
         rval = self.transfer_request_submitter.submit(fileinfo)
         self.assertTrue(rval)
 
@@ -1079,8 +1214,11 @@ class TestLocalDeleteRequestSubmitter(Ba
 
     def test_submit_with_exception(self):
         fileinfo = FileInfo(
-            src=self.filename, dest=None, operation_name='delete',
-            src_type='local')
+            src=self.filename,
+            dest=None,
+            operation_name='delete',
+            src_type='local',
+        )
         # The file was never created so it should trigger an exception
         # when it is attempted to be deleted in the submitter.
         rval = self.transfer_request_submitter.submit(fileinfo)
@@ -1102,9 +1240,12 @@ class TestLocalDeleteRequestSubmitter(Ba
     def test_dry_run(self):
         self.cli_params['dryrun'] = True
         fileinfo = FileInfo(
-            src=self.filename, src_type='local',
-            dest=self.filename, dest_type='local',
-            operation_name='delete')
+            src=self.filename,
+            src_type='local',
+            dest=self.filename,
+            dest_type='local',
+            operation_name='delete',
+        )
         self.transfer_request_submitter.submit(fileinfo)
 
         result = self.result_queue.get()
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_subcommands.py 2.31.35-1/tests/unit/customizations/s3/test_subcommands.py
--- 2.23.6-1/tests/unit/customizations/s3/test_subcommands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_subcommands.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,22 +14,36 @@ import argparse
 import os
 import sys
 
-
 import botocore.session
+
+from awscli.compat import StringIO
+from awscli.customizations.exceptions import ParamValidationError
 from awscli.customizations.s3.s3 import S3
-from awscli.customizations.s3.subcommands import CommandParameters, \
-    CommandArchitecture, CpCommand, SyncCommand, ListCommand, RbCommand
+from awscli.customizations.s3.subcommands import (
+    CommandArchitecture,
+    CommandParameters,
+    CpCommand,
+    ListCommand,
+    RbCommand,
+    SyncCommand,
+)
+from awscli.customizations.s3.syncstrategy.base import (
+    MissingFileSync,
+    NeverSync,
+    SizeAndLastModifiedSync,
+)
 from awscli.customizations.s3.transferconfig import RuntimeConfig
-from awscli.customizations.s3.syncstrategy.base import \
-    SizeAndLastModifiedSync, NeverSync, MissingFileSync
-from awscli.customizations.exceptions import ParamValidationError
-from awscli.testutils import mock, unittest, BaseAWSHelpOutputTest, \
-    BaseAWSCommandParamsTest, FileCreator
-from tests.unit.customizations.s3 import make_loc_files, clean_loc_files
-from awscli.compat import StringIO
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    FileCreator,
+    mock,
+    unittest,
+)
+from tests.unit.customizations.s3 import clean_loc_files, make_loc_files
 
 
-class FakeArgs(object):
+class FakeArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
@@ -42,12 +56,16 @@ class TestRbCommand(unittest.TestCase):
         self.session = mock.Mock()
         self.session.get_scoped_config.return_value = {}
         self.rb_command = RbCommand(self.session)
-        self.parsed_args = FakeArgs(path='s3://mybucket/',
-                                    force=True, dir_op=False)
-        self.parsed_globals = FakeArgs(region=None, endpoint_url=None,
-                                       verify_ssl=None)
+        self.parsed_args = FakeArgs(
+            path='s3://mybucket/', force=True, dir_op=False
+        )
+        self.parsed_globals = FakeArgs(
+            region=None, endpoint_url=None, verify_ssl=None
+        )
         self.cmd_name = 'awscli.customizations.s3.subcommands.RmCommand'
-        self.arch_name = 'awscli.customizations.s3.subcommands.CommandArchitecture'
+        self.arch_name = (
+            'awscli.customizations.s3.subcommands.CommandArchitecture'
+        )
 
     def test_rb_command_with_force_deletes_objects_in_bucket(self):
         with mock.patch(self.cmd_name) as rm_command:
@@ -57,27 +75,32 @@ class TestRbCommand(unittest.TestCase):
                 # In this case we'll have it return an RC of 0 which indicates
                 # success.
                 rm_command.return_value.return_value = 0
-                self.rb_command._run_main(self.parsed_args,
-                                          parsed_globals=self.parsed_globals)
+                self.rb_command._run_main(
+                    self.parsed_args, parsed_globals=self.parsed_globals
+                )
             # Because of --force we should have called the
             # rm_command with the --recursive option.
             rm_command.return_value.assert_called_with(
-                ['s3://mybucket/', '--recursive'], mock.ANY)
+                ['s3://mybucket/', '--recursive'], mock.ANY
+            )
 
     def test_rb_command_with_force_requires_strict_path(self):
         with self.assertRaises(ParamValidationError):
             self.parsed_args.path = 's3://mybucket/mykey'
-            self.rb_command._run_main(self.parsed_args,
-                                      parsed_globals=self.parsed_globals)
+            self.rb_command._run_main(
+                self.parsed_args, parsed_globals=self.parsed_globals
+            )
 
 
 class TestLSCommand(unittest.TestCase):
     def setUp(self):
         self.session = mock.Mock()
-        self.session.create_client.return_value.list_buckets.return_value\
-            = {'Buckets': []}
-        self.session.create_client.return_value.get_paginator.return_value\
-            .paginate.return_value = [{'Contents': [], 'CommonPrefixes': []}]
+        self.session.create_client.return_value.list_buckets.return_value = {
+            'Buckets': []
+        }
+        self.session.create_client.return_value.get_paginator.return_value.paginate.return_value = [
+            {'Contents': [], 'CommonPrefixes': []}
+        ]
 
     def _get_fake_kwargs(self, override=None):
         fake_kwargs = {
@@ -96,41 +119,49 @@ class TestLSCommand(unittest.TestCase):
 
     def test_ls_command_for_bucket(self):
         ls_command = ListCommand(self.session)
-        parsed_args = FakeArgs(**self._get_fake_kwargs({
-            'paths': 's3://mybucket/',
-            'page_size': '5',
-        }))
+        parsed_args = FakeArgs(
+            **self._get_fake_kwargs(
+                {
+                    'paths': 's3://mybucket/',
+                    'page_size': '5',
+                }
+            )
+        )
         parsed_globals = mock.Mock()
         ls_command._run_main(parsed_args, parsed_globals)
         call = self.session.create_client.return_value.list_objects_v2
-        paginate = self.session.create_client.return_value.get_paginator\
-            .return_value.paginate
+        paginate = self.session.create_client.return_value.get_paginator.return_value.paginate
         # We should make no operation calls.
         self.assertEqual(call.call_count, 0)
         # And only a single pagination call to ListObjectsV2.
-        self.session.create_client.return_value.get_paginator.\
-            assert_called_with('list_objects_v2')
-        ref_call_args = {'Bucket': u'mybucket', 'Delimiter': '/',
-                         'Prefix': u'',
-                         'PaginationConfig': {'PageSize': u'5'}}
+        self.session.create_client.return_value.get_paginator.assert_called_with(
+            'list_objects_v2'
+        )
+        ref_call_args = {
+            'Bucket': 'mybucket',
+            'Delimiter': '/',
+            'Prefix': '',
+            'PaginationConfig': {'PageSize': '5'},
+        }
 
         paginate.assert_called_with(**ref_call_args)
 
     def test_ls_command_with_no_args(self):
         ls_command = ListCommand(self.session)
-        parsed_global = FakeArgs(region=None, endpoint_url=None,
-                                 verify_ssl=None)
+        parsed_global = FakeArgs(
+            region=None, endpoint_url=None, verify_ssl=None
+        )
         parsed_args = FakeArgs(**self._get_fake_kwargs())
         ls_command._run_main(parsed_args, parsed_global)
         call = self.session.create_client.return_value.list_buckets
-        paginate = self.session.create_client.return_value.get_paginator\
-            .return_value.paginate
+        paginate = self.session.create_client.return_value.get_paginator.return_value.paginate
 
         # We should make no operation calls.
         self.assertEqual(call.call_count, 0)
         # And only a single pagination call to ListBuckets.
-        self.session.create_client.return_value.get_paginator.\
-            assert_called_with('list_buckets')
+        self.session.create_client.return_value.get_paginator.assert_called_with(
+            'list_buckets'
+        )
         ref_call_args = {'PaginationConfig': {'PageSize': None}}
 
         paginate.assert_called_with(**ref_call_args)
@@ -140,14 +171,18 @@ class TestLSCommand(unittest.TestCase):
         args = get_client.call_args
         self.assertEqual(
             args,
-            mock.call('s3', region_name=None, verify=None, endpoint_url=None)
+            mock.call('s3', region_name=None, verify=None, endpoint_url=None),
         )
 
     def test_ls_with_bucket_name_prefix(self):
         ls_command = ListCommand(self.session)
-        parsed_args = FakeArgs(**self._get_fake_kwargs({
-            'bucket_name_prefix': 'myprefix',
-        }))
+        parsed_args = FakeArgs(
+            **self._get_fake_kwargs(
+                {
+                    'bucket_name_prefix': 'myprefix',
+                }
+            )
+        )
         parsed_globals = FakeArgs(
             region=None,
             endpoint_url=None,
@@ -155,12 +190,12 @@ class TestLSCommand(unittest.TestCase):
         )
         ls_command._run_main(parsed_args, parsed_globals)
         call = self.session.create_client.return_value.list_objects
-        paginate = self.session.create_client.return_value.get_paginator\
-            .return_value.paginate
+        paginate = self.session.create_client.return_value.get_paginator.return_value.paginate
         # We should make no operation calls.
         self.assertEqual(call.call_count, 0)
-        self.session.create_client.return_value.get_paginator.\
-            assert_called_with('list_buckets')
+        self.session.create_client.return_value.get_paginator.assert_called_with(
+            'list_buckets'
+        )
         ref_call_args = {
             'PaginationConfig': {'PageSize': None},
             'Prefix': 'myprefix',
@@ -170,9 +205,13 @@ class TestLSCommand(unittest.TestCase):
 
     def test_ls_with_bucket_region(self):
         ls_command = ListCommand(self.session)
-        parsed_args = FakeArgs(**self._get_fake_kwargs({
-            'bucket_region': 'us-west-1',
-        }))
+        parsed_args = FakeArgs(
+            **self._get_fake_kwargs(
+                {
+                    'bucket_region': 'us-west-1',
+                }
+            )
+        )
         parsed_globals = FakeArgs(
             region=None,
             endpoint_url=None,
@@ -180,12 +219,12 @@ class TestLSCommand(unittest.TestCase):
         )
         ls_command._run_main(parsed_args, parsed_globals)
         call = self.session.create_client.return_value.list_objects
-        paginate = self.session.create_client.return_value.get_paginator\
-            .return_value.paginate
+        paginate = self.session.create_client.return_value.get_paginator.return_value.paginate
         # We should make no operation calls.
         self.assertEqual(call.call_count, 0)
-        self.session.create_client.return_value.get_paginator.\
-            assert_called_with('list_buckets')
+        self.session.create_client.return_value.get_paginator.assert_called_with(
+            'list_buckets'
+        )
         ref_call_args = {
             'PaginationConfig': {'PageSize': None},
             'BucketRegion': 'us-west-1',
@@ -195,8 +234,9 @@ class TestLSCommand(unittest.TestCase):
 
     def test_ls_with_verify_argument(self):
         ls_command = ListCommand(self.session)
-        parsed_global = FakeArgs(region='us-west-2', endpoint_url=None,
-                                 verify_ssl=False)
+        parsed_global = FakeArgs(
+            region='us-west-2', endpoint_url=None, verify_ssl=False
+        )
         parsed_args = FakeArgs(**self._get_fake_kwargs({}))
         ls_command._run_main(parsed_args, parsed_global)
         # Verify get_client
@@ -205,30 +245,39 @@ class TestLSCommand(unittest.TestCase):
         self.assertEqual(
             args,
             mock.call(
-                's3', region_name='us-west-2', verify=False, endpoint_url=None,
-            )
+                's3',
+                region_name='us-west-2',
+                verify=False,
+                endpoint_url=None,
+            ),
         )
 
     def test_ls_with_requester_pays(self):
         ls_command = ListCommand(self.session)
-        parsed_args = FakeArgs(**self._get_fake_kwargs({
-            'paths': 's3://mybucket/',
-            'page_size': '5',
-            'request_payer': 'requester',
-        }))
+        parsed_args = FakeArgs(
+            **self._get_fake_kwargs(
+                {
+                    'paths': 's3://mybucket/',
+                    'page_size': '5',
+                    'request_payer': 'requester',
+                }
+            )
+        )
         parsed_globals = mock.Mock()
         ls_command._run_main(parsed_args, parsed_globals)
         call = self.session.create_client.return_value.list_objects
-        paginate = self.session.create_client.return_value.get_paginator\
-            .return_value.paginate
+        paginate = self.session.create_client.return_value.get_paginator.return_value.paginate
         # We should make no operation calls.
         self.assertEqual(call.call_count, 0)
         # And only a single pagination call to ListObjectsV2.
-        self.session.create_client.return_value.get_paginator.\
-            assert_called_with('list_objects_v2')
+        self.session.create_client.return_value.get_paginator.assert_called_with(
+            'list_objects_v2'
+        )
         ref_call_args = {
-            'Bucket': u'mybucket', 'Delimiter': '/',
-            'Prefix': u'', 'PaginationConfig': {'PageSize': '5'},
+            'Bucket': 'mybucket',
+            'Delimiter': '/',
+            'Prefix': '',
+            'PaginationConfig': {'PageSize': '5'},
             'RequestPayer': 'requester',
         }
 
@@ -276,7 +325,7 @@ class CommandArchitectureTest(BaseAWSCom
             'region': 'us-east-1',
             'endpoint_url': None,
             'verify_ssl': None,
-            'is_stream': False
+            'is_stream': False,
         }
         params.update(override_kwargs)
         return params
@@ -288,17 +337,25 @@ class CommandArchitectureTest(BaseAWSCom
         """
         cmds = ['cp', 'mv', 'rm', 'sync']
 
-        instructions = {'cp': ['file_generator', 'file_info_builder',
-                               's3_handler'],
-                        'mv': ['file_generator', 'file_info_builder',
-                               's3_handler'],
-                        'rm': ['file_generator', 'file_info_builder',
-                               's3_handler'],
-                        'sync': ['file_generator', 'comparator',
-                                 'file_info_builder', 's3_handler']}
+        instructions = {
+            'cp': ['file_generator', 'file_info_builder', 's3_handler'],
+            'mv': ['file_generator', 'file_info_builder', 's3_handler'],
+            'rm': ['file_generator', 'file_info_builder', 's3_handler'],
+            'sync': [
+                'file_generator',
+                'comparator',
+                'file_info_builder',
+                's3_handler',
+            ],
+        }
 
-        params = {'filters': True, 'region': 'us-east-1', 'endpoint_url': None,
-                  'verify_ssl': None, 'is_stream': False}
+        params = {
+            'filters': True,
+            'region': 'us-east-1',
+            'endpoint_url': None,
+            'verify_ssl': None,
+            'is_stream': False,
+        }
         for cmd in cmds:
             cmd_arc = self.get_cmd_architecture(cmd, self.get_params())
             cmd_arc.create_instructions()
@@ -307,9 +364,10 @@ class CommandArchitectureTest(BaseAWSCom
         # Test if there is a filter.
         cmd_arc = self.get_cmd_architecture('cp', params)
         cmd_arc.create_instructions()
-        self.assertEqual(cmd_arc.instructions, ['file_generator', 'filters',
-                                                'file_info_builder',
-                                                's3_handler'])
+        self.assertEqual(
+            cmd_arc.instructions,
+            ['file_generator', 'filters', 'file_info_builder', 's3_handler'],
+        )
 
     def test_choose_sync_strategy_default(self):
         self.session = mock.Mock(self.session)
@@ -320,15 +378,15 @@ class CommandArchitectureTest(BaseAWSCom
         sync_strategies = cmd_arc.choose_sync_strategies()
         self.assertEqual(
             sync_strategies['file_at_src_and_dest_sync_strategy'].__class__,
-            SizeAndLastModifiedSync
+            SizeAndLastModifiedSync,
         )
         self.assertEqual(
             sync_strategies['file_not_at_dest_sync_strategy'].__class__,
-            MissingFileSync
+            MissingFileSync,
         )
         self.assertEqual(
             sync_strategies['file_not_at_src_sync_strategy'].__class__,
-            NeverSync
+            NeverSync,
         )
 
     def test_choose_sync_strategy_overwrite(self):
@@ -345,23 +403,25 @@ class CommandArchitectureTest(BaseAWSCom
         mock_not_at_src_sync_strategy = mock.Mock()
         mock_not_at_src_sync_strategy.sync_type = 'file_not_at_src'
 
-        responses = [(None, mock_strategy),
-                     (None, mock_not_at_dest_sync_strategy),
-                     (None, mock_not_at_src_sync_strategy)]
+        responses = [
+            (None, mock_strategy),
+            (None, mock_not_at_dest_sync_strategy),
+            (None, mock_not_at_src_sync_strategy),
+        ]
 
         self.session.emit.return_value = responses
         sync_strategies = cmd_arc.choose_sync_strategies()
         self.assertEqual(
             sync_strategies['file_at_src_and_dest_sync_strategy'],
-            mock_strategy
+            mock_strategy,
         )
         self.assertEqual(
             sync_strategies['file_not_at_dest_sync_strategy'],
-            mock_not_at_dest_sync_strategy
+            mock_not_at_dest_sync_strategy,
         )
         self.assertEqual(
             sync_strategies['file_not_at_src_sync_strategy'],
-            mock_not_at_src_sync_strategy
+            mock_not_at_src_sync_strategy,
         )
 
 
@@ -377,9 +437,8 @@ class CommandParametersTest(unittest.Tes
         self.bucket = 's3testbucket'
         self.session = mock.Mock()
         self.parsed_global = FakeArgs(
-            region='us-west-2',
-            endpoint_url=None,
-            verify_ssl=False)
+            region='us-west-2', endpoint_url=None, verify_ssl=False
+        )
 
     def tearDown(self):
         self.environ_patch.stop()
@@ -389,23 +448,30 @@ class CommandParametersTest(unittest.Tes
         # This tests the class's ability to determine whether the correct
         # path types have been passed for a particular command.  It test every
         # possible combination that is correct for every command.
-        cmds = {'cp': ['locals3', 's3s3', 's3local'],
-                'mv': ['locals3', 's3s3', 's3local'],
-                'rm': ['s3'], 'mb': ['s3'], 'rb': ['s3'],
-                'sync': ['locals3', 's3s3', 's3local']}
+        cmds = {
+            'cp': ['locals3', 's3s3', 's3local'],
+            'mv': ['locals3', 's3s3', 's3local'],
+            'rm': ['s3'],
+            'mb': ['s3'],
+            'rb': ['s3'],
+            'sync': ['locals3', 's3s3', 's3local'],
+        }
         s3_file = 's3://' + self.bucket + '/' + 'text1.txt'
         local_file = self.loc_files[0]
 
-        combos = {'s3s3': [s3_file, s3_file],
-                  's3local': [s3_file, local_file],
-                  'locals3': [local_file, s3_file],
-                  's3': [s3_file],
-                  'local': [local_file],
-                  'locallocal': [local_file, local_file]}
+        combos = {
+            's3s3': [s3_file, s3_file],
+            's3local': [s3_file, local_file],
+            'locals3': [local_file, s3_file],
+            's3': [s3_file],
+            'local': [local_file],
+            'locallocal': [local_file, local_file],
+        }
 
         for cmd in cmds.keys():
-            cmd_param = CommandParameters(cmd, {}, '',
-                                          self.session, self.parsed_global)
+            cmd_param = CommandParameters(
+                cmd, {}, '', self.session, self.parsed_global
+            )
             cmd_param.add_region(mock.Mock())
             correct_paths = cmds[cmd]
             for path_args in correct_paths:
@@ -415,26 +481,31 @@ class CommandParametersTest(unittest.Tes
         # This tests the class's ability to determine whether the correct
         # path types have been passed for a particular command. It test every
         # possible combination that is incorrect for every command.
-        cmds = {'cp': ['local', 'locallocal', 's3'],
-                'mv': ['local', 'locallocal', 's3'],
-                'rm': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
-                'ls': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
-                'sync': ['local', 'locallocal', 's3'],
-                'mb': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
-                'rb': ['local', 'locallocal', 's3s3', 'locals3', 's3local']}
+        cmds = {
+            'cp': ['local', 'locallocal', 's3'],
+            'mv': ['local', 'locallocal', 's3'],
+            'rm': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
+            'ls': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
+            'sync': ['local', 'locallocal', 's3'],
+            'mb': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
+            'rb': ['local', 'locallocal', 's3s3', 'locals3', 's3local'],
+        }
         s3_file = 's3://' + self.bucket + '/' + 'text1.txt'
         local_file = self.loc_files[0]
 
-        combos = {'s3s3': [s3_file, s3_file],
-                  's3local': [s3_file, local_file],
-                  'locals3': [local_file, s3_file],
-                  's3': [s3_file],
-                  'local': [local_file],
-                  'locallocal': [local_file, local_file]}
+        combos = {
+            's3s3': [s3_file, s3_file],
+            's3local': [s3_file, local_file],
+            'locals3': [local_file, s3_file],
+            's3': [s3_file],
+            'local': [local_file],
+            'locallocal': [local_file, local_file],
+        }
 
         for cmd in cmds.keys():
-            cmd_param = CommandParameters(cmd, {}, '',
-                                          self.session, self.parsed_global)
+            cmd_param = CommandParameters(
+                cmd, {}, '', self.session, self.parsed_global
+            )
             cmd_param.add_region(mock.Mock())
             wrong_paths = cmds[cmd]
             for path_args in wrong_paths:
@@ -469,7 +540,10 @@ class CommandParametersTest(unittest.Tes
         cmd_params = CommandParameters('cp', parameters, '')
         with self.assertRaises(ParamValidationError) as cm:
             cmd_params.add_paths(paths)
-            self.assertIn('Expected checksum-algorithm parameter to be used with one of following path formats', cm.msg)
+            self.assertIn(
+                'Expected checksum-algorithm parameter to be used with one of following path formats',
+                cm.msg,
+            )
 
     def test_validate_checksum_algorithm_sync_download_error(self):
         paths = ['s3://bucket/key', self.file_creator.rootdir]
@@ -477,7 +551,10 @@ class CommandParametersTest(unittest.Tes
         cmd_params = CommandParameters('sync', parameters, '')
         with self.assertRaises(ParamValidationError) as cm:
             cmd_params.add_paths(paths)
-            self.assertIn('Expected checksum-algorithm parameter to be used with one of following path formats', cm.msg)
+            self.assertIn(
+                'Expected checksum-algorithm parameter to be used with one of following path formats',
+                cm.msg,
+            )
 
     def test_validate_checksum_mode_upload_error(self):
         paths = [self.file_creator.rootdir, 's3://bucket/key']
@@ -485,7 +562,10 @@ class CommandParametersTest(unittest.Tes
         cmd_params = CommandParameters('cp', parameters, '')
         with self.assertRaises(ParamValidationError) as cm:
             cmd_params.add_paths(paths)
-            self.assertIn('Expected checksum-mode parameter to be used with one of following path formats', cm.msg)
+            self.assertIn(
+                'Expected checksum-mode parameter to be used with one of following path formats',
+                cm.msg,
+            )
 
     def test_validate_checksum_mode_sync_upload_error(self):
         paths = [self.file_creator.rootdir, 's3://bucket/key']
@@ -493,7 +573,10 @@ class CommandParametersTest(unittest.Tes
         cmd_params = CommandParameters('sync', parameters, '')
         with self.assertRaises(ParamValidationError) as cm:
             cmd_params.add_paths(paths)
-            self.assertIn('Expected checksum-mode parameter to be used with one of following path formats', cm.msg)
+            self.assertIn(
+                'Expected checksum-mode parameter to be used with one of following path formats',
+                cm.msg,
+            )
 
     def test_validate_checksum_mode_move_error(self):
         paths = ['s3://bucket/key', 's3://bucket2/key']
@@ -501,7 +584,10 @@ class CommandParametersTest(unittest.Tes
         cmd_params = CommandParameters('mv', parameters, '')
         with self.assertRaises(ParamValidationError) as cm:
             cmd_params.add_paths(paths)
-            self.assertIn('Expected checksum-mode parameter to be used with one of following path formats', cm.msg)
+            self.assertIn(
+                'Expected checksum-mode parameter to be used with one of following path formats',
+                cm.msg,
+            )
 
     def test_validate_streaming_paths_error(self):
         parameters = {'src': '-', 'dest': 's3://bucket'}
@@ -557,8 +643,11 @@ class CommandParametersTest(unittest.Tes
 
     def test_validate_sse_c_args_wrong_path_type(self):
         paths = ['s3://bucket/foo', self.file_creator.rootdir]
-        params = {'dir_op': False, 'sse_c_copy_source': 'AES256',
-                  'sse_c_copy_source_key': 'foo'}
+        params = {
+            'dir_op': False,
+            'sse_c_copy_source': 'AES256',
+            'sse_c_copy_source_key': 'foo',
+        }
         cmd_param = CommandParameters('cp', params, '')
         error_msg = 'only supported for copy operations'
         with self.assertRaisesRegex(ParamValidationError, error_msg):
@@ -566,9 +655,13 @@ class CommandParametersTest(unittest.Tes
 
     def test_adds_is_move(self):
         params = {}
-        CommandParameters('mv', params, '',
-                          session=self.session,
-                          parsed_globals=self.parsed_global)
+        CommandParameters(
+            'mv',
+            params,
+            '',
+            session=self.session,
+            parsed_globals=self.parsed_global,
+        )
         self.assertTrue(params.get('is_move'))
 
         # is_move should only be true for mv
@@ -597,7 +690,8 @@ class HelpDocTest(BaseAWSHelpOutputTest)
         help_command([], parsed_global)
         self.assert_contains(
             "This section explains prominent concepts "
-            "and notations in the set of high-level S3 commands provided.")
+            "and notations in the set of high-level S3 commands provided."
+        )
         self.assert_contains("Every command takes one or two positional")
         self.assert_contains("* rb")
 
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_subscribers.py 2.31.35-1/tests/unit/customizations/s3/test_subscribers.py
--- 2.23.6-1/tests/unit/customizations/s3/test_subscribers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_subscribers.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,34 +12,44 @@
 # language governing permissions and limitations under the License.
 import datetime
 import errno
+import logging
 import os
 import shutil
 import tempfile
 
+import pytest
 from dateutil.tz import tzlocal
 from s3transfer.crt import CRTTransferFuture, CRTTransferMeta
-from s3transfer.futures import TransferMeta, TransferFuture
+from s3transfer.futures import TransferFuture, TransferMeta
 from s3transfer.manager import TransferConfig
 
-from awscli.testutils import unittest, mock
-from awscli.testutils import FileCreator
 from awscli.compat import queue
 from awscli.customizations.s3 import utils
 from awscli.customizations.s3.fileinfo import FileInfo
+from awscli.customizations.s3.results import WarningResult
 from awscli.customizations.s3.subscribers import (
-    ProvideSizeSubscriber, OnDoneFilteredSubscriber,
+    CopyPropsSubscriberFactory,
+    CreateDirectoryError,
+    DeleteCopySourceObjectSubscriber,
+    DeleteSourceFileSubscriber,
+    DeleteSourceObjectSubscriber,
+    DirectoryCreatorSubscriber,
+    OnDoneFilteredSubscriber,
+    ProvideETagSubscriber,
+    ProvideLastModifiedTimeSubscriber,
+    ProvideSizeSubscriber,
     ProvideUploadContentTypeSubscriber,
-    ProvideLastModifiedTimeSubscriber, DirectoryCreatorSubscriber,
-    DeleteSourceObjectSubscriber, DeleteSourceFileSubscriber,
-    DeleteCopySourceObjectSubscriber, CreateDirectoryError,
-    CopyPropsSubscriberFactory, ReplaceMetadataDirectiveSubscriber,
-    ReplaceTaggingDirectiveSubscriber, SetMetadataDirectivePropsSubscriber,
-    SetTagsSubscriber
+    ReplaceMetadataDirectiveSubscriber,
+    ReplaceTaggingDirectiveSubscriber,
+    SetMetadataDirectivePropsSubscriber,
+    SetTagsSubscriber,
+)
+from awscli.testutils import FileCreator, mock, unittest
+from tests.unit.customizations.s3 import (
+    FakeTransferFuture,
+    FakeTransferFutureCallArgs,
+    FakeTransferFutureMeta,
 )
-from awscli.customizations.s3.results import WarningResult
-from tests.unit.customizations.s3 import FakeTransferFuture
-from tests.unit.customizations.s3 import FakeTransferFutureMeta
-from tests.unit.customizations.s3 import FakeTransferFutureCallArgs
 
 
 class TestProvideSizeSubscriber(unittest.TestCase):
@@ -67,6 +77,30 @@ class TestProvideSizeSubscriber(unittest
             )
 
 
+class TestProvideEtagSubscriber:
+    def test_etag_set(self):
+        transfer_meta = TransferMeta()
+        transfer_future = mock.Mock(spec=TransferFuture)
+        transfer_future.meta = transfer_meta
+        etag = 'myetag'
+
+        transfer_meta.provide_object_etag('oldetag')
+        subscriber = ProvideETagSubscriber(etag)
+        subscriber.on_queued(transfer_future)
+        assert transfer_meta.etag == etag
+
+    def test_does_not_try_to_set_etag_on_crt_transfer_future(self, caplog):
+        caplog.set_level(logging.DEBUG)
+        crt_transfer_future = mock.Mock(spec=CRTTransferFuture)
+        crt_transfer_future.meta = CRTTransferMeta()
+
+        subscriber = ProvideETagSubscriber('myetag')
+        subscriber.on_queued(crt_transfer_future)
+        assert not hasattr(crt_transfer_future.meta, 'etag')
+
+        assert "Not providing object ETag." in caplog.text
+
+
 class OnDoneFilteredRecordingSubscriber(OnDoneFilteredSubscriber):
     def __init__(self):
         self.on_success_calls = []
@@ -105,7 +139,8 @@ class TestProvideUploadContentTypeSubscr
 
     def set_future(self):
         call_args = FakeTransferFutureCallArgs(
-            fileobj=self.filename, extra_args=self.extra_args)
+            fileobj=self.filename, extra_args=self.extra_args
+        )
         meta = FakeTransferFutureMeta(call_args=call_args)
         return FakeTransferFuture(meta=meta)
 
@@ -133,10 +168,12 @@ class TestProvideLastModifiedTimeSubscri
         super(TestProvideLastModifiedTimeSubscriber, self).setUp()
         self.filename = self.file_creator.create_file('myfile', 'my contents')
         self.desired_utime = datetime.datetime(
-            2016, 1, 18, 7, 0, 0, tzinfo=tzlocal())
+            2016, 1, 18, 7, 0, 0, tzinfo=tzlocal()
+        )
         self.result_queue = queue.Queue()
         self.subscriber = ProvideLastModifiedTimeSubscriber(
-            self.desired_utime, self.result_queue)
+            self.desired_utime, self.result_queue
+        )
 
         call_args = FakeTransferFutureCallArgs(fileobj=self.filename)
         meta = FakeTransferFutureMeta(call_args=call_args)
@@ -149,7 +186,8 @@ class TestProvideLastModifiedTimeSubscri
 
     def test_on_success_failure_in_utime_mod_raises_warning(self):
         self.subscriber = ProvideLastModifiedTimeSubscriber(
-            None, self.result_queue)
+            None, self.result_queue
+        )
         self.subscriber.on_done(self.future)
         # Because the time to provide was None it will throw an exception
         # which results in the a warning about the utime not being able
@@ -157,14 +195,16 @@ class TestProvideLastModifiedTimeSubscri
         result = self.result_queue.get()
         self.assertIsInstance(result, WarningResult)
         self.assertIn(
-            'unable to update the last modified time', result.message)
+            'unable to update the last modified time', result.message
+        )
 
 
 class TestDirectoryCreatorSubscriber(BaseTestWithFileCreator):
     def setUp(self):
         super(TestDirectoryCreatorSubscriber, self).setUp()
         self.directory_to_create = os.path.join(
-            self.file_creator.rootdir, 'new-directory')
+            self.file_creator.rootdir, 'new-directory'
+        )
         self.filename = os.path.join(self.directory_to_create, 'myfile')
 
         call_args = FakeTransferFutureCallArgs(fileobj=self.filename)
@@ -208,7 +248,8 @@ class TestDirectoryCreatorSubscriber(Bas
                 self.fail(
                     'on_queued should not have raised an exception related '
                     'to directory creation especially if one already existed '
-                    'but got %s' % e)
+                    'but got %s' % e
+                )
 
 
 class TestDeleteSourceObjectSubscriber(unittest.TestCase):
@@ -217,7 +258,8 @@ class TestDeleteSourceObjectSubscriber(u
         self.bucket = 'mybucket'
         self.key = 'mykey'
         call_args = FakeTransferFutureCallArgs(
-            bucket=self.bucket, key=self.key, extra_args={})
+            bucket=self.bucket, key=self.key, extra_args={}
+        )
         meta = FakeTransferFutureMeta(call_args=call_args)
         self.future = mock.Mock()
         self.future.meta = meta
@@ -225,7 +267,8 @@ class TestDeleteSourceObjectSubscriber(u
     def test_deletes_object(self):
         DeleteSourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key)
+            Bucket=self.bucket, Key=self.key
+        )
         self.future.set_exception.assert_not_called()
 
     def test_sets_exception_on_error(self):
@@ -233,14 +276,16 @@ class TestDeleteSourceObjectSubscriber(u
         self.client.delete_object.side_effect = exception
         DeleteSourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key)
+            Bucket=self.bucket, Key=self.key
+        )
         self.future.set_exception.assert_called_once_with(exception)
 
     def test_with_request_payer(self):
         self.future.meta.call_args.extra_args = {'RequestPayer': 'requester'}
         DeleteSourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key, RequestPayer='requester')
+            Bucket=self.bucket, Key=self.key, RequestPayer='requester'
+        )
 
 
 class TestDeleteCopySourceObjectSubscriber(unittest.TestCase):
@@ -250,7 +295,8 @@ class TestDeleteCopySourceObjectSubscrib
         self.key = 'mykey'
         copy_source = {'Bucket': self.bucket, 'Key': self.key}
         call_args = FakeTransferFutureCallArgs(
-            copy_source=copy_source, extra_args={})
+            copy_source=copy_source, extra_args={}
+        )
         meta = FakeTransferFutureMeta(call_args=call_args)
         self.future = mock.Mock()
         self.future.meta = meta
@@ -258,7 +304,8 @@ class TestDeleteCopySourceObjectSubscrib
     def test_deletes_object(self):
         DeleteCopySourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key)
+            Bucket=self.bucket, Key=self.key
+        )
         self.future.set_exception.assert_not_called()
 
     def test_sets_exception_on_error(self):
@@ -266,14 +313,16 @@ class TestDeleteCopySourceObjectSubscrib
         self.client.delete_object.side_effect = exception
         DeleteCopySourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key)
+            Bucket=self.bucket, Key=self.key
+        )
         self.future.set_exception.assert_called_once_with(exception)
 
     def test_with_request_payer(self):
         self.future.meta.call_args.extra_args = {'RequestPayer': 'requester'}
         DeleteCopySourceObjectSubscriber(self.client).on_done(self.future)
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key, RequestPayer='requester')
+            Bucket=self.bucket, Key=self.key, RequestPayer='requester'
+        )
 
 
 class TestDeleteSourceFileSubscriber(unittest.TestCase):
@@ -323,19 +372,18 @@ class BaseCopyPropsSubscriberTest(unitte
                     },
                     bucket=self.bucket,
                     key=self.key,
-                    extra_args={}
+                    extra_args={},
                 ),
                 size=size,
                 user_context={},
             )
-
         )
 
     def assert_extra_args(self, future, expected_extra_args):
         self.assertEqual(expected_extra_args, future.meta.call_args.extra_args)
 
     def set_size_for_mp_copy(self, future):
-        future.meta.size = 10 * (1024 ** 2)
+        future.meta.size = 10 * (1024**2)
 
     def set_cli_params_to_recursive_copy(self):
         self.cli_params['dir_op'] = True
@@ -354,9 +402,7 @@ class TestCopyPropsSubscriberFactory(Bas
         self.cli_params['copy_props'] = value
 
     def get_fileinfo(self, **override_kwargs):
-        fileinfo_kwargs = {
-            'src': 'src'
-        }
+        fileinfo_kwargs = {'src': 'src'}
         fileinfo_kwargs.update(override_kwargs)
         return FileInfo(**fileinfo_kwargs)
 
@@ -373,7 +419,7 @@ class TestCopyPropsSubscriberFactory(Bas
             [
                 ReplaceMetadataDirectiveSubscriber,
                 ReplaceTaggingDirectiveSubscriber,
-            ]
+            ],
         )
 
     def test_get_subscribers_for_copy_props_metadata_directive(self):
@@ -384,7 +430,7 @@ class TestCopyPropsSubscriberFactory(Bas
             [
                 SetMetadataDirectivePropsSubscriber,
                 ReplaceTaggingDirectiveSubscriber,
-            ]
+            ],
         )
 
     def test_get_subscribers_for_copy_props_default(self):
@@ -395,15 +441,13 @@ class TestCopyPropsSubscriberFactory(Bas
             [
                 SetMetadataDirectivePropsSubscriber,
                 SetTagsSubscriber,
-            ]
+            ],
         )
 
     def test_get_subscribers_injects_cached_head_object_response(self):
         self.set_copy_props('default')
         self.cli_params['dir_op'] = False
-        self.fileinfo.associated_response_data = {
-            'ContentType': 'from-cache'
-        }
+        self.fileinfo.associated_response_data = {'ContentType': 'from-cache'}
         metadata_subscriber = self.factory.get_subscribers(self.fileinfo)[0]
         self.set_size_for_mp_copy(self.future)
         metadata_subscriber.on_queued(self.future)
@@ -440,7 +484,7 @@ class TestSetMetadataDirectivePropsSubsc
             'ContentLanguage': 'content-language',
             'ContentType': 'content-type',
             'Expires': 'Tue, 07 Jan 2020 20:40:03 GMT',
-            'Metadata': {'key': 'value'}
+            'Metadata': {'key': 'value'},
         }
 
     def set_head_object_response_props(self, **props):
@@ -470,7 +514,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'CacheControl': 'override'}
+            {'MetadataDirective': 'REPLACE', 'CacheControl': 'override'},
         )
 
     def test_sets_props_for_content_disposition_override(self):
@@ -478,7 +522,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'ContentDisposition': 'override'}
+            {'MetadataDirective': 'REPLACE', 'ContentDisposition': 'override'},
         )
 
     def test_sets_props_for_content_encoding_override(self):
@@ -486,7 +530,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'ContentEncoding': 'override'}
+            {'MetadataDirective': 'REPLACE', 'ContentEncoding': 'override'},
         )
 
     def test_sets_props_for_content_language_override(self):
@@ -494,7 +538,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'ContentLanguage': 'override'}
+            {'MetadataDirective': 'REPLACE', 'ContentLanguage': 'override'},
         )
 
     def test_sets_props_for_content_type_override(self):
@@ -502,7 +546,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'ContentType': 'override'}
+            {'MetadataDirective': 'REPLACE', 'ContentType': 'override'},
         )
 
     def test_sets_props_for_expires_override(self):
@@ -510,7 +554,7 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'Expires': 'override'}
+            {'MetadataDirective': 'REPLACE', 'Expires': 'override'},
         )
 
     def test_sets_props_for_metadata_override(self):
@@ -518,13 +562,14 @@ class TestSetMetadataDirectivePropsSubsc
         self.subscriber.on_queued(self.future)
         self.assert_extra_args(
             self.future,
-            {'MetadataDirective': 'REPLACE', 'Metadata': {'key': 'override'}}
+            {'MetadataDirective': 'REPLACE', 'Metadata': {'key': 'override'}},
         )
 
     def test_overrides_merges_with_head_object_data(self):
         self.set_head_object_response_props(**self.all_props)
         self.set_extra_args(
-            self.future, ContentType='override', Metadata={'key': 'override'})
+            self.future, ContentType='override', Metadata={'key': 'override'}
+        )
         self.subscriber.on_queued(self.future)
         expected_extra_args = {
             'CacheControl': 'cache-control',
@@ -534,7 +579,7 @@ class TestSetMetadataDirectivePropsSubsc
             'ContentType': 'override',
             'Expires': 'Tue, 07 Jan 2020 20:40:03 GMT',
             'Metadata': {'key': 'override'},
-            'MetadataDirective': 'REPLACE'
+            'MetadataDirective': 'REPLACE',
         }
         self.assert_extra_args(self.future, expected_extra_args)
 
@@ -547,7 +592,7 @@ class TestSetMetadataDirectivePropsSubsc
             'ContentLanguage': 'override',
             'ContentType': 'override',
             'Expires': 'override',
-            'Metadata': {'key': 'override'}
+            'Metadata': {'key': 'override'},
         }
         self.set_extra_args(self.future, **all_override_args)
         self.subscriber.on_queued(self.future)
@@ -566,7 +611,8 @@ class TestSetMetadataDirectivePropsSubsc
         self.set_size_for_mp_copy(self.future)
         subscriber.on_queued(self.future)
         self.client.head_object.assert_called_with(
-            Bucket=self.source_bucket, Key=self.source_key)
+            Bucket=self.source_bucket, Key=self.source_key
+        )
 
     def test_add_extra_params_to_head_object_call(self):
         subscriber = SetMetadataDirectivePropsSubscriber(
@@ -580,8 +626,9 @@ class TestSetMetadataDirectivePropsSubsc
         self.set_size_for_mp_copy(self.future)
         subscriber.on_queued(self.future)
         self.client.head_object.assert_called_with(
-            Bucket=self.source_bucket, Key=self.source_key,
-            RequestPayer='requester'
+            Bucket=self.source_bucket,
+            Key=self.source_key,
+            RequestPayer='requester',
         )
 
 
@@ -601,23 +648,14 @@ class TestSetTagsSubscriber(BaseCopyProp
         )
         self.tagging_response = {
             'TagSet': [
-                {
-                    'Key': 'tag1',
-                    'Value': 'val1'
-                },
-                {
-                    'Key': 'tag2',
-                    'Value': 'val2'
-                },
+                {'Key': 'tag1', 'Value': 'val1'},
+                {'Key': 'tag2', 'Value': 'val2'},
             ]
         }
         self.url_encoded_tags = 'tag1=val1&tag2=val2'
         self.tagging_response_over_limit = {
             'TagSet': [
-                {
-                    'Key': 'tag',
-                    'Value': 'val1' * (2 * 1024)
-                },
+                {'Key': 'tag', 'Value': 'val1' * (2 * 1024)},
             ]
         }
 
@@ -627,8 +665,9 @@ class TestSetTagsSubscriber(BaseCopyProp
 
     def test_sets_tags_for_mp_copy(self):
         self.set_size_for_mp_copy(self.future)
-        self.source_client.get_object_tagging.return_value = \
+        self.source_client.get_object_tagging.return_value = (
             self.tagging_response
+        )
         self.subscriber.on_queued(self.future)
         self.source_client.get_object_tagging.assert_called_with(
             Bucket=self.source_bucket, Key=self.source_key
@@ -646,8 +685,9 @@ class TestSetTagsSubscriber(BaseCopyProp
 
     def test_sets_tags_using_put_object_tagging_if_over_size_limit(self):
         self.set_size_for_mp_copy(self.future)
-        self.source_client.get_object_tagging.return_value = \
+        self.source_client.get_object_tagging.return_value = (
             self.tagging_response_over_limit
+        )
         self.subscriber.on_queued(self.future)
         self.source_client.get_object_tagging.assert_called_with(
             Bucket=self.source_bucket, Key=self.source_key
@@ -655,14 +695,16 @@ class TestSetTagsSubscriber(BaseCopyProp
         self.assert_extra_args(self.future, {})
         self.subscriber.on_done(self.future)
         self.client.put_object_tagging.assert_called_with(
-            Bucket=self.bucket, Key=self.key,
+            Bucket=self.bucket,
+            Key=self.key,
             Tagging=self.tagging_response_over_limit,
         )
 
     def test_does_not_call_put_object_tagging_if_transfer_fails(self):
         self.set_size_for_mp_copy(self.future)
-        self.source_client.get_object_tagging.return_value = \
+        self.source_client.get_object_tagging.return_value = (
             self.tagging_response_over_limit
+        )
         self.subscriber.on_queued(self.future)
         self.future.set_exception(Exception())
         self.subscriber.on_done(self.future)
@@ -670,34 +712,40 @@ class TestSetTagsSubscriber(BaseCopyProp
 
     def test_put_object_tagging_propagates_error_and_cleans_up_if_fails(self):
         self.set_size_for_mp_copy(self.future)
-        self.source_client.get_object_tagging.return_value = \
+        self.source_client.get_object_tagging.return_value = (
             self.tagging_response_over_limit
+        )
         self.subscriber.on_queued(self.future)
 
-        self.client.put_object_tagging.side_effect = \
+        self.client.put_object_tagging.side_effect = (
             PutObjectTaggingException()
+        )
         self.subscriber.on_done(self.future)
 
         with self.assertRaises(PutObjectTaggingException):
             self.future.result()
 
         self.client.put_object_tagging.assert_called_with(
-            Bucket=self.bucket, Key=self.key,
+            Bucket=self.bucket,
+            Key=self.key,
             Tagging=self.tagging_response_over_limit,
         )
         self.client.delete_object.assert_called_once_with(
-            Bucket=self.bucket, Key=self.key,
+            Bucket=self.bucket,
+            Key=self.key,
         )
 
     def test_add_extra_params_to_delete_object_call(self):
         self.cli_params['request_payer'] = 'requester'
         self.set_size_for_mp_copy(self.future)
-        self.source_client.get_object_tagging.return_value = \
+        self.source_client.get_object_tagging.return_value = (
             self.tagging_response_over_limit
+        )
         self.subscriber.on_queued(self.future)
 
-        self.client.put_object_tagging.side_effect = \
+        self.client.put_object_tagging.side_effect = (
             PutObjectTaggingException()
+        )
         self.subscriber.on_done(self.future)
 
         self.client.delete_object.assert_called_once_with(
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_transferconfig.py 2.31.35-1/tests/unit/customizations/s3/test_transferconfig.py
--- 2.23.6-1/tests/unit/customizations/s3/test_transferconfig.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_transferconfig.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import pytest
 import sys
 
+import pytest
+
 from awscli.customizations.s3 import transferconfig
 
 
 class TestTransferConfig:
-
     def build_config_with(self, **config_from_user):
         return transferconfig.RuntimeConfig().build_config(**config_from_user)
 
@@ -32,7 +32,7 @@ class TestTransferConfig:
     def test_user_provides_partial_overrides(self):
         config_from_user = {
             'max_concurrent_requests': '20',
-            'multipart_threshold': str(64 * (1024 ** 2)),
+            'multipart_threshold': str(64 * (1024**2)),
         }
         runtime_config = self.build_config_with(**config_from_user)
         # Our overrides were accepted.
@@ -68,18 +68,18 @@ class TestTransferConfig:
         # of Py_ssize_t on python 3, but notably not the maximum size of an
         # int since they are effectively unbounded.
         long_value = sys.maxsize + 1
-        runtime_config = self.build_config_with(
-            multipart_threshold=long_value)
+        runtime_config = self.build_config_with(multipart_threshold=long_value)
         assert runtime_config['multipart_threshold'] == long_value
 
     @pytest.mark.parametrize(
-        'provided,resolved', [
+        'provided,resolved',
+        [
             (None, 'auto'),
             ('auto', 'auto'),
             ('classic', 'classic'),
             ('default', 'classic'),
             ('crt', 'crt'),
-        ]
+        ],
     )
     def test_set_preferred_transfer_client(self, provided, resolved):
         config_kwargs = {}
@@ -97,14 +97,19 @@ class TestTransferConfig:
             ('max_bandwidth', '1000', 1000),
             ('max_bandwidth', '1000B/s', 1000),
             ('max_bandwidth', '8000b/s', 1000),
-
             # target_bandwidth cases
             ('target_bandwidth', '5MB/s', 5 * 1024 * 1024),
             ('target_bandwidth', '1Mb/s', 1 * 1024 * 1024 / 8),
             ('target_bandwidth', '1000', 1000),
             ('target_bandwidth', '1000B/s', 1000),
             ('target_bandwidth', '8000b/s', 1000),
-        ]
+            # disk_throughput cases
+            ('disk_throughput', '1MB/s', 1024 * 1024),
+            ('disk_throughput', '10Mb/s', 10 * 1024 * 1024 / 8),
+            ('disk_throughput', '1000', 1000),
+            ('disk_throughput', '1000B/s', 1000),
+            ('disk_throughput', '8000b/s', 1000),
+        ],
     )
     def test_rate_conversions(self, config_name, provided, expected):
         params = {config_name: provided}
@@ -121,7 +126,6 @@ class TestTransferConfig:
             ('max_bandwidth', '100/s'),
             ('max_bandwidth', ''),
             ('max_bandwidth', 'value-with-no-digits'),
-
             # target_bandwidth cases
             ('target_bandwidth', '1MB'),
             ('target_bandwidth', '1B'),
@@ -129,7 +133,14 @@ class TestTransferConfig:
             ('target_bandwidth', '100/s'),
             ('target_bandwidth', ''),
             ('target_bandwidth', 'value-with-no-digits'),
-        ]
+            # disk_throughput cases
+            ('disk_throughput', '1MB'),
+            ('disk_throughput', '1B'),
+            ('disk_throughput', '1b'),
+            ('disk_throughput', '100/s'),
+            ('disk_throughput', ''),
+            ('disk_throughput', 'value-with-no-digits'),
+        ],
     )
     def test_invalid_rate_values(self, config_name, provided):
         params = {config_name: provided}
@@ -140,6 +151,22 @@ class TestTransferConfig:
         with pytest.raises(transferconfig.InvalidConfigError):
             self.build_config_with(preferred_transfer_client='not-supported')
 
+    @pytest.mark.parametrize(
+        'attr,val,expected',
+        [
+            ('should_stream', 'true', True),
+            ('should_stream', 'false', False),
+            ('should_stream', None, None),
+            ('direct_io', 'true', True),
+            ('direct_io', 'false', False),
+            ('direct_io', None, None),
+        ],
+    )
+    def test_convert_booleans(self, attr, val, expected):
+        params = {attr: val}
+        runtime_config = self.build_config_with(**params)
+        assert runtime_config[attr] == expected
+
 
 class TestConvertToS3TransferConfig:
     def test_convert(self):
@@ -151,15 +178,18 @@ class TestConvertToS3TransferConfig:
             'max_bandwidth': 1024 * 1024,
             'addressing_style': 'path',
             'use_accelerate_endpoint': True,
+            'io_chunksize': 1024 * 1024,
             # This is a TransferConfig only option, it should
             # just be ignored if it's in the ~/.aws/config for now.
             'max_in_memory_upload_chunks': 1000,
         }
         result = transferconfig.create_transfer_config_from_runtime_config(
-            runtime_config)
+            runtime_config
+        )
         assert result.multipart_threshold == 1
         assert result.multipart_chunksize == 2
         assert result.max_request_concurrency == 3
         assert result.max_request_queue_size == 4
         assert result.max_bandwidth == 1024 * 1024
+        assert result.io_chunksize == 1024 * 1024
         assert result.max_in_memory_upload_chunks != 1000
diff -pruN 2.23.6-1/tests/unit/customizations/s3/test_utils.py 2.31.35-1/tests/unit/customizations/s3/test_utils.py
--- 2.23.6-1/tests/unit/customizations/s3/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/s3/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,42 +10,49 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest, temporary_file
 import argparse
-import os
-
+import datetime
 import ntpath
+import os
 import time
-import datetime
 
-from dateutil.tz import tzlocal
 import pytest
-from s3transfer.compat import seekable
 from botocore.hooks import HierarchicalEmitter
+from dateutil.tz import tzlocal
+from s3transfer.compat import seekable
 
 from awscli.compat import StringIO
 from awscli.customizations.exceptions import ParamValidationError
 from awscli.customizations.s3.utils import (
+    AppendFilter,
+    BucketLister,
+    NonSeekableStream,
+    RequestParamsMapper,
+    S3PathResolver,
+    SetFileUtimeError,
+    StablePriorityQueue,
+    StdoutBytesWriter,
+    block_unsupported_resources,
+    create_warning,
     find_bucket_key,
-    guess_content_type, relative_path, block_unsupported_resources,
-    StablePriorityQueue, BucketLister, get_file_stat, AppendFilter,
-    create_warning, human_readable_size, human_readable_to_int,
-    set_file_utime, SetFileUtimeError, RequestParamsMapper, StdoutBytesWriter,
-    NonSeekableStream, S3PathResolver
+    get_file_stat,
+    guess_content_type,
+    human_readable_size,
+    human_readable_to_int,
+    relative_path,
+    set_file_utime,
 )
+from awscli.testutils import mock, temporary_file, unittest
 
 
 @pytest.fixture
 def s3control_client():
     client = mock.MagicMock()
-    client.get_access_point.return_value = {
-        "Bucket": "mybucket"
-    }
+    client.get_access_point.return_value = {"Bucket": "mybucket"}
     client.list_multi_region_access_points.return_value = {
-        "AccessPoints": [{
-            "Alias": "myalias.mrap",
-            "Regions": [{"Bucket": "mybucket"}]
-        }]
+        "AccessPoints": [
+            {"Alias": "myalias.mrap", "Regions": [{"Bucket": "mybucket"}]}
+        ]
     }
     return client
 
@@ -53,9 +60,7 @@ def s3control_client():
 @pytest.fixture
 def sts_client():
     client = mock.MagicMock()
-    client.get_caller_identity.return_value = {
-        "Account": "123456789012"
-    }
+    client.get_caller_identity.return_value = {"Account": "123456789012"}
     return client
 
 
@@ -71,14 +76,14 @@ def s3_path_resolver(s3control_client, s
         (10, '10 Bytes'),
         (1000, '1000 Bytes'),
         (1024, '1.0 KiB'),
-        (1024 ** 2, '1.0 MiB'),
-        (1024 ** 3, '1.0 GiB'),
-        (1024 ** 4, '1.0 TiB'),
-        (1024 ** 5, '1.0 PiB'),
-        (1024 ** 6, '1.0 EiB'),
-        (1024 ** 2 - 1, '1.0 MiB'),
-        (1024 ** 3 - 1, '1.0 GiB'),
-    )
+        (1024**2, '1.0 MiB'),
+        (1024**3, '1.0 GiB'),
+        (1024**4, '1.0 TiB'),
+        (1024**5, '1.0 PiB'),
+        (1024**6, '1.0 EiB'),
+        (1024**2 - 1, '1.0 MiB'),
+        (1024**3 - 1, '1.0 GiB'),
+    ),
 )
 def test_human_readable_size(bytes_int, expected):
     assert human_readable_size(bytes_int) == expected
@@ -91,15 +96,15 @@ def test_human_readable_size(bytes_int,
         ("1024", 1024),
         ("1KB", 1024),
         ("1kb", 1024),
-        ("1MB", 1024 ** 2),
-        ("1GB", 1024 ** 3),
-        ("1TB", 1024 ** 4),
+        ("1MB", 1024**2),
+        ("1GB", 1024**3),
+        ("1TB", 1024**4),
         ("1KiB", 1024),
         ("1kib", 1024),
-        ("1MiB", 1024 ** 2),
-        ("1GiB", 1024 ** 3),
-        ("1TiB", 1024 ** 4),
-    )
+        ("1MiB", 1024**2),
+        ("1GiB", 1024**3),
+        ("1TiB", 1024**4),
+    ),
 )
 def test_convert_human_readable_to_int(size_str, expected):
     assert human_readable_to_int(size_str) == expected
@@ -109,18 +114,21 @@ class AppendFilterTest(unittest.TestCase
     def test_call(self):
         parser = argparse.ArgumentParser()
 
-        parser.add_argument('--include', action=AppendFilter, nargs=1,
-                            dest='path')
-        parser.add_argument('--exclude', action=AppendFilter, nargs=1,
-                            dest='path')
+        parser.add_argument(
+            '--include', action=AppendFilter, nargs=1, dest='path'
+        )
+        parser.add_argument(
+            '--exclude', action=AppendFilter, nargs=1, dest='path'
+        )
         parsed_args = parser.parse_args(['--include', 'a', '--exclude', 'b'])
-        self.assertEqual(parsed_args.path, [['--include', 'a'],
-                                            ['--exclude', 'b']])
+        self.assertEqual(
+            parsed_args.path, [['--include', 'a'], ['--exclude', 'b']]
+        )
 
 
 class TestFindBucketKey(unittest.TestCase):
     def test_unicode(self):
-        s3_path = '\u1234' + u'/' + '\u5678'
+        s3_path = '\u1234' + '/' + '\u5678'
         bucket, key = find_bucket_key(s3_path)
         self.assertEqual(bucket, '\u1234')
         self.assertEqual(key, '\u5678')
@@ -147,30 +155,38 @@ class TestFindBucketKey(unittest.TestCas
 
     def test_accesspoint_arn(self):
         bucket, key = find_bucket_key(
-            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint')
+            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        )
         self.assertEqual(
-            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint')
+            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        )
         self.assertEqual(key, '')
 
     def test_accesspoint_arn_with_slash(self):
         bucket, key = find_bucket_key(
-            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/')
+            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/'
+        )
         self.assertEqual(
-            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint')
+            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        )
         self.assertEqual(key, '')
 
     def test_accesspoint_arn_with_key(self):
         bucket, key = find_bucket_key(
-            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/key')
+            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/key'
+        )
         self.assertEqual(
-            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint')
+            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        )
         self.assertEqual(key, 'key')
 
     def test_accesspoint_arn_with_key_and_prefix(self):
         bucket, key = find_bucket_key(
-            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/pre/key')
+            'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint/pre/key'
+        )
         self.assertEqual(
-            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint')
+            bucket, 'arn:aws:s3:us-west-2:123456789012:accesspoint/endpoint'
+        )
         self.assertEqual(key, 'pre/key')
 
     def test_outpost_arn_with_colon(self):
@@ -183,7 +199,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-12334:'
                 'accesspoint:my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, '')
 
@@ -197,7 +213,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-12334:'
                 'accesspoint:my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key')
 
@@ -211,7 +227,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-12334:'
                 'accesspoint:my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key:name')
 
@@ -225,7 +241,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-12334:'
                 'accesspoint:my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key/name')
 
@@ -239,7 +255,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-12334:'
                 'accesspoint:my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'prefix/key:name')
 
@@ -253,7 +269,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-12334/'
                 'accesspoint/my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, '')
 
@@ -267,7 +283,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-12334/'
                 'accesspoint/my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key')
 
@@ -281,7 +297,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-12334/'
                 'accesspoint/my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key:name')
 
@@ -295,7 +311,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-12334/'
                 'accesspoint/my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'key/name')
 
@@ -309,7 +325,7 @@ class TestFindBucketKey(unittest.TestCas
             (
                 'arn:aws:s3-outposts:us-west-2:123456789012:outpost/op-12334/'
                 'accesspoint/my-accesspoint'
-            )
+            ),
         )
         self.assertEqual(key, 'prefix/key:name')
 
@@ -317,7 +333,8 @@ class TestFindBucketKey(unittest.TestCas
 class TestBlockUnsupportedResources(unittest.TestCase):
     def test_object_lambda_arn_with_colon_raises_exception(self):
         with self.assertRaisesRegex(
-                ParamValidationError, 'Use s3api commands instead'):
+            ParamValidationError, 'Use s3api commands instead'
+        ):
             block_unsupported_resources(
                 'arn:aws:s3-object-lambda:us-west-2:123456789012:'
                 'accesspoint:my-accesspoint'
@@ -325,15 +342,17 @@ class TestBlockUnsupportedResources(unit
 
     def test_object_lambda_arn_with_slash_raises_exception(self):
         with self.assertRaisesRegex(
-                ParamValidationError, 'Use s3api commands instead'):
+            ParamValidationError, 'Use s3api commands instead'
+        ):
             block_unsupported_resources(
-                 'arn:aws:s3-object-lambda:us-west-2:123456789012:'
-                 'accesspoint/my-accesspoint'
+                'arn:aws:s3-object-lambda:us-west-2:123456789012:'
+                'accesspoint/my-accesspoint'
             )
 
     def test_outpost_bucket_arn_with_colon_raises_exception(self):
         with self.assertRaisesRegex(
-                ParamValidationError, 'Use s3control commands instead'):
+            ParamValidationError, 'Use s3control commands instead'
+        ):
             block_unsupported_resources(
                 'arn:aws:s3-outposts:us-west-2:123456789012:'
                 'outpost/op-0a12345678abcdefg:bucket/bucket-foo'
@@ -341,10 +360,11 @@ class TestBlockUnsupportedResources(unit
 
     def test_outpost_bucket_arn_with_slash_raises_exception(self):
         with self.assertRaisesRegex(
-                ParamValidationError, 'Use s3control commands instead'):
+            ParamValidationError, 'Use s3control commands instead'
+        ):
             block_unsupported_resources(
-                 'arn:aws:s3-outposts:us-west-2:123456789012:'
-                 'outpost/op-0a12345678abcdefg/bucket/bucket-foo'
+                'arn:aws:s3-outposts:us-west-2:123456789012:'
+                'outpost/op-0a12345678abcdefg/bucket/bucket-foo'
             )
 
 
@@ -353,8 +373,10 @@ class TestCreateWarning(unittest.TestCas
         path = '/foo/'
         error_message = 'There was an error'
         warning_message = create_warning(path, error_message)
-        self.assertEqual(warning_message.message,
-                         'warning: Skipping file /foo/. There was an error')
+        self.assertEqual(
+            warning_message.message,
+            'warning: Skipping file /foo/. There was an error',
+        )
         self.assertFalse(warning_message.error)
         self.assertTrue(warning_message.warning)
 
@@ -375,8 +397,9 @@ class TestGuessContentType(unittest.Test
 
 class TestRelativePath(unittest.TestCase):
     def test_relpath_normal(self):
-        self.assertEqual(relative_path('/tmp/foo/bar', '/tmp/foo'),
-                         '.' + os.sep + 'bar')
+        self.assertEqual(
+            relative_path('/tmp/foo/bar', '/tmp/foo'), '.' + os.sep + 'bar'
+        )
 
     # We need to patch out relpath with the ntpath version so
     # we can simulate testing drives on windows.
@@ -463,32 +486,50 @@ class TestBucketList(unittest.TestCase):
         now = mock.sentinel.now
         self.client.get_paginator.return_value.paginate = self.fake_paginate
         individual_response_elements = [
-            {'LastModified': '2014-02-27T04:20:38.000Z',
-             'Key': 'a', 'Size': 1},
-            {'LastModified': '2014-02-27T04:20:38.000Z',
-                 'Key': 'b', 'Size': 2},
-            {'LastModified': '2014-02-27T04:20:38.000Z',
-                 'Key': 'c', 'Size': 3}
+            {
+                'LastModified': '2014-02-27T04:20:38.000Z',
+                'Key': 'a',
+                'Size': 1,
+            },
+            {
+                'LastModified': '2014-02-27T04:20:38.000Z',
+                'Key': 'b',
+                'Size': 2,
+            },
+            {
+                'LastModified': '2014-02-27T04:20:38.000Z',
+                'Key': 'c',
+                'Size': 3,
+            },
         ]
         self.responses = [
             {'Contents': individual_response_elements[0:2]},
-            {'Contents': [individual_response_elements[2]]}
+            {'Contents': [individual_response_elements[2]]},
         ]
         lister = BucketLister(self.client, self.date_parser)
         objects = list(lister.list_objects(bucket='foo'))
-        self.assertEqual(objects,
-            [('foo/a', individual_response_elements[0]),
-             ('foo/b', individual_response_elements[1]),
-             ('foo/c', individual_response_elements[2])])
+        self.assertEqual(
+            objects,
+            [
+                ('foo/a', individual_response_elements[0]),
+                ('foo/b', individual_response_elements[1]),
+                ('foo/c', individual_response_elements[2]),
+            ],
+        )
         for individual_response in individual_response_elements:
             self.assertEqual(individual_response['LastModified'], now)
 
     def test_list_objects_passes_in_extra_args(self):
         self.client.get_paginator.return_value.paginate.return_value = [
-            {'Contents': [
-                {'LastModified': '2014-02-27T04:20:38.000Z',
-                 'Key': 'mykey', 'Size': 3}
-            ]}
+            {
+                'Contents': [
+                    {
+                        'LastModified': '2014-02-27T04:20:38.000Z',
+                        'Key': 'mykey',
+                        'Size': 3,
+                    }
+                ]
+            }
         ]
         lister = BucketLister(self.client, self.date_parser)
         list(
@@ -497,13 +538,13 @@ class TestBucketList(unittest.TestCase):
             )
         )
         self.client.get_paginator.return_value.paginate.assert_called_with(
-            Bucket='mybucket', PaginationConfig={'PageSize': None},
-            RequestPayer='requester'
+            Bucket='mybucket',
+            PaginationConfig={'PageSize': None},
+            RequestPayer='requester',
         )
 
 
 class TestGetFileStat(unittest.TestCase):
-
     def test_get_file_stat(self):
         now = datetime.datetime.now(tzlocal())
         epoch_now = time.mktime(now.timetuple())
@@ -516,7 +557,7 @@ class TestGetFileStat(unittest.TestCase)
             self.assertEqual(time.mktime(update_time.timetuple()), epoch_now)
 
     def test_error_message(self):
-        with mock.patch('os.stat', mock.Mock(side_effect=IOError('msg'))):
+        with mock.patch('os.stat', mock.Mock(side_effect=OSError('msg'))):
             with self.assertRaisesRegex(ValueError, r'myfilename\.txt'):
                 get_file_stat('myfilename.txt')
 
@@ -541,7 +582,6 @@ class TestGetFileStat(unittest.TestCase)
 
 
 class TestSetsFileUtime(unittest.TestCase):
-
     def test_successfully_sets_utime(self):
         now = datetime.datetime.now(tzlocal())
         epoch_now = time.mktime(now.timetuple())
@@ -575,7 +615,7 @@ class TestRequestParamsMapperSSE(unittes
             'sse_c': 'AES256',
             'sse_c_key': 'my-sse-c-key',
             'sse_c_copy_source': 'AES256',
-            'sse_c_copy_source_key': 'my-sse-c-copy-source-key'
+            'sse_c_copy_source_key': 'my-sse-c-copy-source-key',
         }
 
     def test_head_object(self):
@@ -583,8 +623,10 @@ class TestRequestParamsMapperSSE(unittes
         RequestParamsMapper.map_head_object_params(params, self.cli_params)
         self.assertEqual(
             params,
-            {'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key'}
+            {
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+            },
         )
 
     def test_put_object(self):
@@ -592,10 +634,12 @@ class TestRequestParamsMapperSSE(unittes
         RequestParamsMapper.map_put_object_params(params, self.cli_params)
         self.assertEqual(
             params,
-            {'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key',
-             'SSEKMSKeyId': 'my-kms-key',
-             'ServerSideEncryption': 'AES256'}
+            {
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+                'SSEKMSKeyId': 'my-kms-key',
+                'ServerSideEncryption': 'AES256',
+            },
         )
 
     def test_get_object(self):
@@ -603,8 +647,10 @@ class TestRequestParamsMapperSSE(unittes
         RequestParamsMapper.map_get_object_params(params, self.cli_params)
         self.assertEqual(
             params,
-            {'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key'}
+            {
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+            },
         )
 
     def test_copy_object(self):
@@ -612,24 +658,29 @@ class TestRequestParamsMapperSSE(unittes
         RequestParamsMapper.map_copy_object_params(params, self.cli_params)
         self.assertEqual(
             params,
-            {'CopySourceSSECustomerAlgorithm': 'AES256',
-             'CopySourceSSECustomerKey': 'my-sse-c-copy-source-key',
-             'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key',
-             'SSEKMSKeyId': 'my-kms-key',
-             'ServerSideEncryption': 'AES256'}
+            {
+                'CopySourceSSECustomerAlgorithm': 'AES256',
+                'CopySourceSSECustomerKey': 'my-sse-c-copy-source-key',
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+                'SSEKMSKeyId': 'my-kms-key',
+                'ServerSideEncryption': 'AES256',
+            },
         )
 
     def test_create_multipart_upload(self):
         params = {}
         RequestParamsMapper.map_create_multipart_upload_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(
             params,
-            {'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key',
-             'SSEKMSKeyId': 'my-kms-key',
-             'ServerSideEncryption': 'AES256'}
+            {
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+                'SSEKMSKeyId': 'my-kms-key',
+                'ServerSideEncryption': 'AES256',
+            },
         )
 
     def test_upload_part(self):
@@ -637,20 +688,26 @@ class TestRequestParamsMapperSSE(unittes
         RequestParamsMapper.map_upload_part_params(params, self.cli_params)
         self.assertEqual(
             params,
-            {'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key'}
+            {
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+            },
         )
 
     def test_upload_part_copy(self):
         params = {}
         RequestParamsMapper.map_upload_part_copy_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(
             params,
-            {'CopySourceSSECustomerAlgorithm': 'AES256',
-             'CopySourceSSECustomerKey': 'my-sse-c-copy-source-key',
-             'SSECustomerAlgorithm': 'AES256',
-             'SSECustomerKey': 'my-sse-c-key'})
+            {
+                'CopySourceSSECustomerAlgorithm': 'AES256',
+                'CopySourceSSECustomerKey': 'my-sse-c-copy-source-key',
+                'SSECustomerAlgorithm': 'AES256',
+                'SSECustomerKey': 'my-sse-c-key',
+            },
+        )
 
 
 class TestRequestParamsMapperChecksumAlgorithm:
@@ -669,7 +726,9 @@ class TestRequestParamsMapperChecksumAlg
 
     def test_put_object_no_checksum(self, cli_params_no_algorithm):
         request_params = {}
-        RequestParamsMapper.map_put_object_params(request_params, cli_params_no_algorithm)
+        RequestParamsMapper.map_put_object_params(
+            request_params, cli_params_no_algorithm
+        )
         assert 'ChecksumAlgorithm' not in request_params
 
     def test_copy_object(self, cli_params):
@@ -679,7 +738,9 @@ class TestRequestParamsMapperChecksumAlg
 
     def test_copy_object_no_checksum(self, cli_params_no_algorithm):
         request_params = {}
-        RequestParamsMapper.map_put_object_params(request_params, cli_params_no_algorithm)
+        RequestParamsMapper.map_put_object_params(
+            request_params, cli_params_no_algorithm
+        )
         assert 'ChecksumAlgorithm' not in request_params
 
 
@@ -699,7 +760,9 @@ class TestRequestParamsMapperChecksumMod
 
     def test_get_object_no_checksums(self, cli_params_no_checksum):
         request_params = {}
-        RequestParamsMapper.map_get_object_params(request_params, cli_params_no_checksum)
+        RequestParamsMapper.map_get_object_params(
+            request_params, cli_params_no_checksum
+        )
         assert 'ChecksumMode' not in request_params
 
 
@@ -730,7 +793,8 @@ class TestRequestParamsMapperRequestPaye
     def test_create_multipart_upload(self):
         params = {}
         RequestParamsMapper.map_create_multipart_upload_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
     def test_upload_part(self):
@@ -741,31 +805,32 @@ class TestRequestParamsMapperRequestPaye
     def test_upload_part_copy(self):
         params = {}
         RequestParamsMapper.map_upload_part_copy_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
     def test_delete_object(self):
         params = {}
-        RequestParamsMapper.map_delete_object_params(
-            params, self.cli_params)
+        RequestParamsMapper.map_delete_object_params(params, self.cli_params)
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
     def test_list_objects(self):
         params = {}
-        RequestParamsMapper.map_list_objects_v2_params(
-            params, self.cli_params)
+        RequestParamsMapper.map_list_objects_v2_params(params, self.cli_params)
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
     def test_map_get_object_tagging_params(self):
         params = {}
         RequestParamsMapper.map_get_object_tagging_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
     def test_map_put_object_tagging_params(self):
         params = {}
         RequestParamsMapper.map_put_object_tagging_params(
-            params, self.cli_params)
+            params, self.cli_params
+        )
         self.assertEqual(params, {'RequestPayer': 'requester'})
 
 
@@ -796,22 +861,28 @@ class TestNonSeekableStream(unittest.Tes
 
 class TestS3PathResolver:
     _BASE_ACCESSPOINT_ARN = (
-        "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/myaccesspoint")
+        "s3://arn:aws:s3:us-west-2:123456789012:accesspoint/myaccesspoint"
+    )
     _BASE_OUTPOST_ACCESSPOINT_ARN = (
         "s3://arn:aws:s3-outposts:us-east-1:123456789012:outpost"
-        "/op-foo/accesspoint/myaccesspoint")
+        "/op-foo/accesspoint/myaccesspoint"
+    )
     _BASE_ACCESSPOINT_ALIAS = "s3://myaccesspoint-foobar12345-s3alias"
     _BASE_OUTPOST_ACCESSPOINT_ALIAS = "s3://myaccesspoint-foobar12345--op-s3"
     _BASE_MRAP_ARN = "s3://arn:aws:s3::123456789012:accesspoint/myalias.mrap"
 
     @pytest.mark.parametrize(
         "path,resolved",
-        [(_BASE_ACCESSPOINT_ARN,"s3://mybucket/"),
-         (f"{_BASE_ACCESSPOINT_ARN}/","s3://mybucket/"),
-         (f"{_BASE_ACCESSPOINT_ARN}/mykey","s3://mybucket/mykey"),
-         (f"{_BASE_ACCESSPOINT_ARN}/myprefix/","s3://mybucket/myprefix/"),
-         (f"{_BASE_ACCESSPOINT_ARN}/myprefix/mykey",
-          "s3://mybucket/myprefix/mykey")]
+        [
+            (_BASE_ACCESSPOINT_ARN, "s3://mybucket/"),
+            (f"{_BASE_ACCESSPOINT_ARN}/", "s3://mybucket/"),
+            (f"{_BASE_ACCESSPOINT_ARN}/mykey", "s3://mybucket/mykey"),
+            (f"{_BASE_ACCESSPOINT_ARN}/myprefix/", "s3://mybucket/myprefix/"),
+            (
+                f"{_BASE_ACCESSPOINT_ARN}/myprefix/mykey",
+                "s3://mybucket/myprefix/mykey",
+            ),
+        ],
     )
     def test_resolves_accesspoint_arn(
         self, path, resolved, s3_path_resolver, s3control_client
@@ -819,19 +890,24 @@ class TestS3PathResolver:
         resolved_paths = s3_path_resolver.resolve_underlying_s3_paths(path)
         assert resolved_paths == [resolved]
         s3control_client.get_access_point.assert_called_with(
-            AccountId="123456789012",
-            Name="myaccesspoint"
+            AccountId="123456789012", Name="myaccesspoint"
         )
 
     @pytest.mark.parametrize(
         "path,resolved",
-        [(_BASE_OUTPOST_ACCESSPOINT_ARN,"s3://mybucket/"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/","s3://mybucket/"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/mykey","s3://mybucket/mykey"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/myprefix/",
-          "s3://mybucket/myprefix/"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/myprefix/mykey",
-          "s3://mybucket/myprefix/mykey")]
+        [
+            (_BASE_OUTPOST_ACCESSPOINT_ARN, "s3://mybucket/"),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/", "s3://mybucket/"),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/mykey", "s3://mybucket/mykey"),
+            (
+                f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/myprefix/",
+                "s3://mybucket/myprefix/",
+            ),
+            (
+                f"{_BASE_OUTPOST_ACCESSPOINT_ARN}/myprefix/mykey",
+                "s3://mybucket/myprefix/mykey",
+            ),
+        ],
     )
     def test_resolves_outpost_accesspoint_arn(
         self, path, resolved, s3_path_resolver, s3control_client
@@ -840,18 +916,27 @@ class TestS3PathResolver:
         assert resolved_paths == [resolved]
         s3control_client.get_access_point.assert_called_with(
             AccountId="123456789012",
-            Name=("arn:aws:s3-outposts:us-east-1:123456789012:outpost"
-                  "/op-foo/accesspoint/myaccesspoint")
+            Name=(
+                "arn:aws:s3-outposts:us-east-1:123456789012:outpost"
+                "/op-foo/accesspoint/myaccesspoint"
+            ),
         )
 
     @pytest.mark.parametrize(
         "path,resolved",
-        [(_BASE_ACCESSPOINT_ALIAS,"s3://mybucket/"),
-         (f"{_BASE_ACCESSPOINT_ALIAS}/","s3://mybucket/"),
-         (f"{_BASE_ACCESSPOINT_ALIAS}/mykey","s3://mybucket/mykey"),
-         (f"{_BASE_ACCESSPOINT_ALIAS}/myprefix/","s3://mybucket/myprefix/"),
-         (f"{_BASE_ACCESSPOINT_ALIAS}/myprefix/mykey",
-          "s3://mybucket/myprefix/mykey")]
+        [
+            (_BASE_ACCESSPOINT_ALIAS, "s3://mybucket/"),
+            (f"{_BASE_ACCESSPOINT_ALIAS}/", "s3://mybucket/"),
+            (f"{_BASE_ACCESSPOINT_ALIAS}/mykey", "s3://mybucket/mykey"),
+            (
+                f"{_BASE_ACCESSPOINT_ALIAS}/myprefix/",
+                "s3://mybucket/myprefix/",
+            ),
+            (
+                f"{_BASE_ACCESSPOINT_ALIAS}/myprefix/mykey",
+                "s3://mybucket/myprefix/mykey",
+            ),
+        ],
     )
     def test_resolves_accesspoint_alias(
         self, path, resolved, s3_path_resolver, s3control_client, sts_client
@@ -860,17 +945,18 @@ class TestS3PathResolver:
         assert resolved_paths == [resolved]
         sts_client.get_caller_identity.assert_called_once_with()
         s3control_client.get_access_point.assert_called_with(
-            AccountId="123456789012",
-            Name="myaccesspoint-foobar12345-s3alias"
+            AccountId="123456789012", Name="myaccesspoint-foobar12345-s3alias"
         )
 
     @pytest.mark.parametrize(
         "path",
-        [(_BASE_OUTPOST_ACCESSPOINT_ALIAS),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/mykey"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/myprefix/"),
-         (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/myprefix/mykey")]
+        [
+            (_BASE_OUTPOST_ACCESSPOINT_ALIAS),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/"),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/mykey"),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/myprefix/"),
+            (f"{_BASE_OUTPOST_ACCESSPOINT_ALIAS}/myprefix/mykey"),
+        ],
     )
     def test_outpost_accesspoint_alias_raises_exception(
         self, path, s3_path_resolver
@@ -881,11 +967,16 @@ class TestS3PathResolver:
 
     @pytest.mark.parametrize(
         "path,resolved",
-        [(_BASE_MRAP_ARN,"s3://mybucket/"),
-         (f"{_BASE_MRAP_ARN}/","s3://mybucket/"),
-         (f"{_BASE_MRAP_ARN}/mykey","s3://mybucket/mykey"),
-         (f"{_BASE_MRAP_ARN}/myprefix/","s3://mybucket/myprefix/"),
-         (f"{_BASE_MRAP_ARN}/myprefix/mykey","s3://mybucket/myprefix/mykey")]
+        [
+            (_BASE_MRAP_ARN, "s3://mybucket/"),
+            (f"{_BASE_MRAP_ARN}/", "s3://mybucket/"),
+            (f"{_BASE_MRAP_ARN}/mykey", "s3://mybucket/mykey"),
+            (f"{_BASE_MRAP_ARN}/myprefix/", "s3://mybucket/myprefix/"),
+            (
+                f"{_BASE_MRAP_ARN}/myprefix/mykey",
+                "s3://mybucket/myprefix/mykey",
+            ),
+        ],
     )
     def test_resolves_mrap_arn(
         self, path, resolved, s3_path_resolver, s3control_client
@@ -897,12 +988,19 @@ class TestS3PathResolver:
         )
 
     @pytest.mark.parametrize(
-            "path,resolved,name",
-            [(f"{_BASE_ACCESSPOINT_ARN}-s3alias/mykey","s3://mybucket/mykey",
-              "myaccesspoint-s3alias"),
-             (f"{_BASE_OUTPOST_ACCESSPOINT_ARN}--op-s3/mykey",
-              "s3://mybucket/mykey",
-              f"{_BASE_OUTPOST_ACCESSPOINT_ARN[5:]}--op-s3")]
+        "path,resolved,name",
+        [
+            (
+                f"{_BASE_ACCESSPOINT_ARN}-s3alias/mykey",
+                "s3://mybucket/mykey",
+                "myaccesspoint-s3alias",
+            ),
+            (
+                f"{_BASE_OUTPOST_ACCESSPOINT_ARN}--op-s3/mykey",
+                "s3://mybucket/mykey",
+                f"{_BASE_OUTPOST_ACCESSPOINT_ARN[5:]}--op-s3",
+            ),
+        ],
     )
     def test_alias_suffixes_dont_match_accesspoint_arns(
         self, path, resolved, name, s3_path_resolver, s3control_client
@@ -910,23 +1008,26 @@ class TestS3PathResolver:
         resolved_paths = s3_path_resolver.resolve_underlying_s3_paths(path)
         assert resolved_paths == [resolved]
         s3control_client.get_access_point.assert_called_with(
-            AccountId="123456789012",
-            Name=name
+            AccountId="123456789012", Name=name
         )
 
     @pytest.mark.parametrize(
-            "path,expected_has_underlying_s3_path",
-            [(_BASE_ACCESSPOINT_ARN,True),
-             (f"{_BASE_ACCESSPOINT_ARN}/mykey",True),
-             (f"{_BASE_ACCESSPOINT_ARN}/myprefix/mykey",True),
-             (_BASE_ACCESSPOINT_ALIAS,True),
-             (_BASE_OUTPOST_ACCESSPOINT_ARN,True),
-             (_BASE_OUTPOST_ACCESSPOINT_ALIAS,True),
-             (_BASE_MRAP_ARN,True),
-             ("s3://mybucket/",False),
-             ("s3://mybucket/mykey",False),
-             ("s3://mybucket/myprefix/mykey",False)]
+        "path,expected_has_underlying_s3_path",
+        [
+            (_BASE_ACCESSPOINT_ARN, True),
+            (f"{_BASE_ACCESSPOINT_ARN}/mykey", True),
+            (f"{_BASE_ACCESSPOINT_ARN}/myprefix/mykey", True),
+            (_BASE_ACCESSPOINT_ALIAS, True),
+            (_BASE_OUTPOST_ACCESSPOINT_ARN, True),
+            (_BASE_OUTPOST_ACCESSPOINT_ALIAS, True),
+            (_BASE_MRAP_ARN, True),
+            ("s3://mybucket/", False),
+            ("s3://mybucket/mykey", False),
+            ("s3://mybucket/myprefix/mykey", False),
+        ],
     )
-    def test_has_underlying_s3_path(self, path, expected_has_underlying_s3_path):
+    def test_has_underlying_s3_path(
+        self, path, expected_has_underlying_s3_path
+    ):
         has_underlying_s3_path = S3PathResolver.has_underlying_s3_path(path)
         assert has_underlying_s3_path == expected_has_underlying_s3_path
diff -pruN 2.23.6-1/tests/unit/customizations/servicecatalog/__init__.py 2.31.35-1/tests/unit/customizations/servicecatalog/__init__.py
--- 2.23.6-1/tests/unit/customizations/servicecatalog/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/servicecatalog/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,11 +11,12 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import unittest
-from awscli.testutils import mock
-from awscli.customizations.servicecatalog import \
-    register_servicecatalog_commands, GenerateCommand
-from awscli.customizations.servicecatalog import inject_commands
+from awscli.customizations.servicecatalog import (
+    GenerateCommand,
+    inject_commands,
+    register_servicecatalog_commands,
+)
+from awscli.testutils import mock, unittest
 
 
 class TestRegisterServiceCatalogCommands(unittest.TestCase):
@@ -23,7 +24,12 @@ class TestRegisterServiceCatalogCommands
         event_emitter = mock.Mock()
         register_servicecatalog_commands(event_emitter)
         event_emitter.register.assert_has_calls(
-            [mock.call('building-command-table.servicecatalog', inject_commands)])
+            [
+                mock.call(
+                    'building-command-table.servicecatalog', inject_commands
+                )
+            ]
+        )
 
 
 class TestInjectCommands(unittest.TestCase):
@@ -32,5 +38,4 @@ class TestInjectCommands(unittest.TestCa
         session = mock.Mock()
         inject_commands(command_table, session)
         self.assertIn('generate', command_table)
-        self.assertIsInstance(
-            command_table['generate'], GenerateCommand)
+        self.assertIsInstance(command_table['generate'], GenerateCommand)
diff -pruN 2.23.6-1/tests/unit/customizations/servicecatalog/test_generate.py 2.31.35-1/tests/unit/customizations/servicecatalog/test_generate.py
--- 2.23.6-1/tests/unit/customizations/servicecatalog/test_generate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/servicecatalog/test_generate.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,8 +13,8 @@
 
 from argparse import Namespace
 
-from awscli.customizations.servicecatalog import GenerateCommand
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.servicecatalog import GenerateCommand
 from awscli.testutils import unittest
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/servicecatalog/test_generateproduct.py 2.31.35-1/tests/unit/customizations/servicecatalog/test_generateproduct.py
--- 2.23.6-1/tests/unit/customizations/servicecatalog/test_generateproduct.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/servicecatalog/test_generateproduct.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,31 +13,39 @@
 
 from argparse import Namespace
 
-from awscli.customizations.servicecatalog import exceptions
-from awscli.customizations.servicecatalog.generateproduct \
-    import GenerateProductCommand
-from awscli.testutils import unittest, mock, capture_output
 from botocore.compat import json
 
+from awscli.customizations.servicecatalog import exceptions
+from awscli.customizations.servicecatalog.generateproduct import (
+    GenerateProductCommand,
+)
+from awscli.testutils import capture_output, mock, unittest
+
 
 class TestCreateProductCommand(unittest.TestCase):
     def setUp(self):
         self.session = mock.Mock()
         self.servicecatalog_client = mock.Mock()
         self.s3_client = mock.Mock()
-        self.session.create_client.side_effect = [self.s3_client,
-                                                  self.servicecatalog_client]
-        self.session.get_available_regions.return_value = ['us-east-1',
-                                                           'eu-west-1']
+        self.session.create_client.side_effect = [
+            self.s3_client,
+            self.servicecatalog_client,
+        ]
+        self.session.get_available_regions.return_value = [
+            'us-east-1',
+            'eu-west-1',
+        ]
         self.cmd = GenerateProductCommand(self.session)
 
         self.args = Namespace()
         self.args.file_path = 'foo'
         self.args.bucket_name = 'bucket-name'
         self.args.product_name = 'created product name'
-        self.args.tags = ["Key=key1,Value=value1",
-                          "Key=key2,Value=value2",
-                          "Key=key3,Value=value3"]
+        self.args.tags = [
+            "Key=key1,Value=value1",
+            "Key=key2,Value=value2",
+            "Key=key3,Value=value3",
+        ]
         self.args.product_owner = 'me'
         self.args.product_type = 'CLOUD_FORMATION_TEMPLATE'
         self.args.product_distributor = 'prod_distributor'
@@ -62,12 +70,14 @@ class TestCreateProductCommand(unittest.
     def test_happy_path(self, getsize_patch):
         # Arrange
         actual_product_view_detail = self.get_product_view_detail()
-        self.servicecatalog_client.create_product.return_value = \
+        self.servicecatalog_client.create_product.return_value = (
             actual_product_view_detail
+        )
         expected_product_view_detail = self.get_product_view_detail()
         del expected_product_view_detail["ResponseMetadata"]
-        expected_response_output = json.dumps(expected_product_view_detail,
-                                              indent=2)
+        expected_response_output = json.dumps(
+            expected_product_view_detail, indent=2
+        )
         expected_args = self.get_args_dict()
 
         # Act
@@ -76,51 +86,45 @@ class TestCreateProductCommand(unittest.
 
         # Assert
         self.session.create_client.assert_called_with(
-                             'servicecatalog',
-                             region_name=self.global_args.region,
-                             endpoint_url=None,
-                             verify=None)
+            'servicecatalog',
+            region_name=self.global_args.region,
+            endpoint_url=None,
+            verify=None,
+        )
 
         self.servicecatalog_client.create_product.assert_called_once_with(
-                                    Name=expected_args['product-name'],
-                                    Owner=expected_args['product-owner'],
-                                    Description=expected_args
-                                    ['product-description'],
-                                    Distributor=expected_args
-                                    ['product-distributor'],
-                                    SupportDescription=expected_args
-                                    ['support-description'],
-                                    SupportEmail=expected_args
-                                    ['support-email'],
-                                    ProductType=expected_args['product-type'],
-                                    Tags=expected_args['tags'],
-                                    ProvisioningArtifactParameters=self.
-                                    get_provisioning_artifact_parameters(
-                                        self.args.provisioning_artifact_name,
-                                        self.
-                                        args.
-                                        provisioning_artifact_description,
-                                        self.args.provisioning_artifact_type
-                                    )
-                                )
-        self.assertEqual(expected_response_output,
-                         captured.stdout.getvalue()
-                         )
+            Name=expected_args['product-name'],
+            Owner=expected_args['product-owner'],
+            Description=expected_args['product-description'],
+            Distributor=expected_args['product-distributor'],
+            SupportDescription=expected_args['support-description'],
+            SupportEmail=expected_args['support-email'],
+            ProductType=expected_args['product-type'],
+            Tags=expected_args['tags'],
+            ProvisioningArtifactParameters=self.get_provisioning_artifact_parameters(
+                self.args.provisioning_artifact_name,
+                self.args.provisioning_artifact_description,
+                self.args.provisioning_artifact_type,
+            ),
+        )
+        self.assertEqual(expected_response_output, captured.stdout.getvalue())
         self.assertEqual(0, result)
 
     @mock.patch('os.path.getsize', return_value=1)
     def test_happy_path_unicode(self, getsize_patch):
         # Arrange
-        self.args.product_name = u'\u05d1\u05e8\u05d9\u05e6\u05e7\u05dc\u05d4'
-        self.args.support_description = u'\u00fd\u00a9\u0194\u0292'
+        self.args.product_name = '\u05d1\u05e8\u05d9\u05e6\u05e7\u05dc\u05d4'
+        self.args.support_description = '\u00fd\u00a9\u0194\u0292'
 
         actual_product_view_detail = self.get_product_view_detail()
-        self.servicecatalog_client.create_product.return_value = \
+        self.servicecatalog_client.create_product.return_value = (
             actual_product_view_detail
+        )
         expected_product_view_detail = self.get_product_view_detail()
         del expected_product_view_detail["ResponseMetadata"]
-        expected_response_output = json.dumps(expected_product_view_detail,
-                                              indent=2)
+        expected_response_output = json.dumps(
+            expected_product_view_detail, indent=2
+        )
         expected_args = self.get_args_dict()
 
         # Act
@@ -129,42 +133,35 @@ class TestCreateProductCommand(unittest.
 
         # Assert
         self.session.create_client.assert_called_with(
-                             'servicecatalog',
-                             region_name=self.global_args.region,
-                             endpoint_url=None,
-                             verify=None)
+            'servicecatalog',
+            region_name=self.global_args.region,
+            endpoint_url=None,
+            verify=None,
+        )
 
         self.servicecatalog_client.create_product.assert_called_once_with(
-                                    Name=expected_args['product-name'],
-                                    Owner=expected_args['product-owner'],
-                                    Description=expected_args
-                                    ['product-description'],
-                                    Distributor=expected_args
-                                    ['product-distributor'],
-                                    SupportDescription=expected_args
-                                    ['support-description'],
-                                    SupportEmail=expected_args
-                                    ['support-email'],
-                                    ProductType=expected_args['product-type'],
-                                    Tags=expected_args['tags'],
-                                    ProvisioningArtifactParameters=self.
-                                    get_provisioning_artifact_parameters(
-                                        self.args.provisioning_artifact_name,
-                                        self.
-                                        args.
-                                        provisioning_artifact_description,
-                                        self.args.provisioning_artifact_type
-                                    )
-                                )
-        self.assertEqual(expected_response_output,
-                         captured.stdout.getvalue()
-                         )
+            Name=expected_args['product-name'],
+            Owner=expected_args['product-owner'],
+            Description=expected_args['product-description'],
+            Distributor=expected_args['product-distributor'],
+            SupportDescription=expected_args['support-description'],
+            SupportEmail=expected_args['support-email'],
+            ProductType=expected_args['product-type'],
+            Tags=expected_args['tags'],
+            ProvisioningArtifactParameters=self.get_provisioning_artifact_parameters(
+                self.args.provisioning_artifact_name,
+                self.args.provisioning_artifact_description,
+                self.args.provisioning_artifact_type,
+            ),
+        )
+        self.assertEqual(expected_response_output, captured.stdout.getvalue())
         self.assertEqual(0, result)
 
     def test_region_not_supported(self):
         self.global_args.region = 'not-supported-region'
-        with self.assertRaisesRegex(exceptions.InvalidParametersException,
-                                     "not supported"):
+        with self.assertRaisesRegex(
+            exceptions.InvalidParametersException, "not supported"
+        ):
             self.cmd._run_main(self.args, self.global_args)
 
     @mock.patch('os.path.getsize', return_value=1)
@@ -176,12 +173,14 @@ class TestCreateProductCommand(unittest.
         self.args.product_distributor = None
 
         actual_product_view_detail = self.get_product_view_detail()
-        self.servicecatalog_client.create_product.\
-            return_value = actual_product_view_detail
+        self.servicecatalog_client.create_product.return_value = (
+            actual_product_view_detail
+        )
         expected_product_view_detail = self.get_product_view_detail()
         del expected_product_view_detail["ResponseMetadata"]
-        expected_response_output = json.dumps(expected_product_view_detail,
-                                              indent=2)
+        expected_response_output = json.dumps(
+            expected_product_view_detail, indent=2
+        )
         expected_args = self.get_args_dict()
 
         # Act
@@ -190,27 +189,24 @@ class TestCreateProductCommand(unittest.
 
         # Assert
         self.session.create_client.assert_called_with(
-                                    'servicecatalog',
-                                    region_name=self.global_args.region,
-                                    endpoint_url=None,
-                                    verify=None)
+            'servicecatalog',
+            region_name=self.global_args.region,
+            endpoint_url=None,
+            verify=None,
+        )
         self.servicecatalog_client.create_product.assert_called_once_with(
-                                    Name=expected_args['product-name'],
-                                    Owner=expected_args['product-owner'],
-                                    ProductType=expected_args['product-type'],
-                                    Tags=expected_args['tags'],
-                                    ProvisioningArtifactParameters=self.
-                                    get_provisioning_artifact_parameters(
-                                        self.args.provisioning_artifact_name,
-                                        self.
-                                        args.
-                                        provisioning_artifact_description,
-                                        self.args.provisioning_artifact_type
-                                    )
-                                    )
+            Name=expected_args['product-name'],
+            Owner=expected_args['product-owner'],
+            ProductType=expected_args['product-type'],
+            Tags=expected_args['tags'],
+            ProvisioningArtifactParameters=self.get_provisioning_artifact_parameters(
+                self.args.provisioning_artifact_name,
+                self.args.provisioning_artifact_description,
+                self.args.provisioning_artifact_type,
+            ),
+        )
 
-        self.assertEqual(expected_response_output,
-                         captured.stdout.getvalue())
+        self.assertEqual(expected_response_output, captured.stdout.getvalue())
         self.assertEqual(0, result)
 
     def get_product_view_detail(self):
@@ -218,9 +214,9 @@ class TestCreateProductCommand(unittest.
             'ProductViewDetail': {
                 'ProductViewSummary': {
                     'SupportDescription': 'Contact the CLI department '
-                                          'for issues '
-                                          'deploying or connecting '
-                                          'to this product.',
+                    'for issues '
+                    'deploying or connecting '
+                    'to this product.',
                     'HasDefaultPath': False,
                     'ShortDescription': self.args.product_description,
                     'SupportUrl': self.args.support_url,
@@ -228,62 +224,53 @@ class TestCreateProductCommand(unittest.
                     'SupportEmail': self.args.support_email,
                     'Type': self.args.product_type,
                     'Id': 'prodview-ask5ma4y7gwiy',
-                    'ProductId': 'prod-inifmhpr47ft2'
+                    'ProductId': 'prod-inifmhpr47ft2',
                 },
                 'Status': 'CREATED',
                 'ProductARN': 'arn:aws:catalog:us-west-2:'
-                              '856570181934:product/prod-inifmhpr47ft2',
-                'CreatedTime': 1492728697.0
+                '856570181934:product/prod-inifmhpr47ft2',
+                'CreatedTime': 1492728697.0,
             },
             "ProvisioningArtifactDetail": {
                 "CreatedTime": 1502495200.0,
                 "Description": "pa_desc",
                 "Type": "CLOUD_FORMATION_TEMPLATE",
                 "Id": "pa-6hgqvd3pnwbgc",
-                "Name": "pa_name"
+                "Name": "pa_name",
             },
             "Tags": self.get_tags_dictionary(),
-            "ResponseMetadata": {}
+            "ResponseMetadata": {},
         }
 
     def get_args_dict(self):
-        return {'file-path': self.args.file_path,
-                'bucket-name': self.args.bucket_name,
-                'product-name': self.args.product_name,
-                'tags': self.get_tags_dictionary(),
-                'product-owner': self.args.product_owner,
-                'product-type': self.args.product_type,
-                'product-description': self.args.product_description,
-                'product-distributor': self.args.product_distributor,
-                'support-description': self.args.support_description,
-                'support-email': self.args.support_email
-                }
+        return {
+            'file-path': self.args.file_path,
+            'bucket-name': self.args.bucket_name,
+            'product-name': self.args.product_name,
+            'tags': self.get_tags_dictionary(),
+            'product-owner': self.args.product_owner,
+            'product-type': self.args.product_type,
+            'product-description': self.args.product_description,
+            'product-distributor': self.args.product_distributor,
+            'support-description': self.args.support_description,
+            'support-email': self.args.support_email,
+        }
 
     def get_tags_dictionary(self):
         return [
-            {
-                "Value": "value1",
-                "Key": "key1"
-            },
-            {
-                "Value": "value2",
-                "Key": "key2"
-            },
-            {
-                "Value": "value3",
-                "Key": "key3"
-            }
+            {"Value": "value1", "Key": "key1"},
+            {"Value": "value2", "Key": "key2"},
+            {"Value": "value3", "Key": "key3"},
         ]
 
-    def get_provisioning_artifact_parameters(self, pa_name,
-                                             pa_description, pa_type):
+    def get_provisioning_artifact_parameters(
+        self, pa_name, pa_description, pa_type
+    ):
         parameters = {
             'Name': pa_name,
             'Description': pa_description,
-            'Info': {
-                'LoadTemplateFromURL': self.s3_url
-            },
-            'Type': pa_type
+            'Info': {'LoadTemplateFromURL': self.s3_url},
+            'Type': pa_type,
         }
 
         return parameters
diff -pruN 2.23.6-1/tests/unit/customizations/servicecatalog/test_generateprovisioningartifact.py 2.31.35-1/tests/unit/customizations/servicecatalog/test_generateprovisioningartifact.py
--- 2.23.6-1/tests/unit/customizations/servicecatalog/test_generateprovisioningartifact.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/servicecatalog/test_generateprovisioningartifact.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,22 +13,28 @@
 
 from argparse import Namespace
 
-from awscli.customizations.servicecatalog import exceptions
-from awscli.customizations.servicecatalog.generateprovisioningartifact \
-    import GenerateProvisioningArtifactCommand
-from awscli.testutils import unittest, mock, capture_output
 from botocore.compat import json
 
+from awscli.customizations.servicecatalog import exceptions
+from awscli.customizations.servicecatalog.generateprovisioningartifact import (
+    GenerateProvisioningArtifactCommand,
+)
+from awscli.testutils import capture_output, mock, unittest
+
 
 class TestCreateProvisioningArtifactCommand(unittest.TestCase):
     def setUp(self):
         self.session = mock.Mock()
         self.servicecatalog_client = mock.Mock()
         self.s3_client = mock.Mock()
-        self.session.create_client.side_effect = [self.s3_client,
-                                                  self.servicecatalog_client]
-        self.session.get_available_regions.return_value = ['us-east-1',
-                                                           'eu-west-1']
+        self.session.create_client.side_effect = [
+            self.s3_client,
+            self.servicecatalog_client,
+        ]
+        self.session.get_available_regions.return_value = [
+            'us-east-1',
+            'eu-west-1',
+        ]
         self.cmd = GenerateProvisioningArtifactCommand(self.session)
 
         self.args = Namespace()
@@ -50,13 +56,12 @@ class TestCreateProvisioningArtifactComm
     @mock.patch('os.path.getsize', return_value=1)
     def test_happy_path(self, getsize_patch):
         # Arrange
-        self.servicecatalog_client.create_provisioning_artifact\
-            .return_value = self.get_create_provisioning_artifact_output()
+        self.servicecatalog_client.create_provisioning_artifact.return_value = self.get_create_provisioning_artifact_output()
         expected_pa_detail = self.get_create_provisioning_artifact_output()
         del expected_pa_detail['ResponseMetadata']
-        expected_response_output = json.dumps(expected_pa_detail,
-                                              indent=2,
-                                              ensure_ascii=False)
+        expected_response_output = json.dumps(
+            expected_pa_detail, indent=2, ensure_ascii=False
+        )
 
         # Act
         with capture_output() as captured:
@@ -64,36 +69,33 @@ class TestCreateProvisioningArtifactComm
 
         # Assert
         self.session.create_client.assert_called_with(
-                                        'servicecatalog',
-                                        region_name=self.global_args.region,
-                                        endpoint_url=None,
-                                        verify=None)
-        self.servicecatalog_client.create_provisioning_artifact.\
-            assert_called_once_with(
-                            ProductId=self.args.product_id,
-                            Parameters=self.
-                            get_provisioning_artifact_parameters(
-                                self.args.provisioning_artifact_name,
-                                self.args.provisioning_artifact_description,
-                                self.args.provisioning_artifact_type
-                            )
-                        )
-        self.assertEqual(expected_response_output,
-                         captured.stdout.getvalue())
+            'servicecatalog',
+            region_name=self.global_args.region,
+            endpoint_url=None,
+            verify=None,
+        )
+        self.servicecatalog_client.create_provisioning_artifact.assert_called_once_with(
+            ProductId=self.args.product_id,
+            Parameters=self.get_provisioning_artifact_parameters(
+                self.args.provisioning_artifact_name,
+                self.args.provisioning_artifact_description,
+                self.args.provisioning_artifact_type,
+            ),
+        )
+        self.assertEqual(expected_response_output, captured.stdout.getvalue())
         self.assertEqual(0, result)
 
     @mock.patch('os.path.getsize', return_value=1)
     def test_happy_path_unicode(self, getsize_patch):
         # Arrange
-        self.args.provisioning_artifact_name = u'\u05d1\u05e8\u05d9\u05e6'
-        self.args.provisioning_artifact_description = u'\u00fd\u00a9\u0194'
-        self.servicecatalog_client.create_provisioning_artifact\
-            .return_value = self.get_create_provisioning_artifact_output()
+        self.args.provisioning_artifact_name = '\u05d1\u05e8\u05d9\u05e6'
+        self.args.provisioning_artifact_description = '\u00fd\u00a9\u0194'
+        self.servicecatalog_client.create_provisioning_artifact.return_value = self.get_create_provisioning_artifact_output()
         expected_pa_detail = self.get_create_provisioning_artifact_output()
         del expected_pa_detail['ResponseMetadata']
-        expected_response_output = json.dumps(expected_pa_detail,
-                                              indent=2,
-                                              ensure_ascii=False)
+        expected_response_output = json.dumps(
+            expected_pa_detail, indent=2, ensure_ascii=False
+        )
 
         # Act
         with capture_output() as captured:
@@ -101,52 +103,48 @@ class TestCreateProvisioningArtifactComm
 
         # Assert
         self.session.create_client.assert_called_with(
-                                        'servicecatalog',
-                                        region_name=self.global_args.region,
-                                        endpoint_url=None,
-                                        verify=None)
-        self.servicecatalog_client.create_provisioning_artifact.\
-            assert_called_once_with(
-                            ProductId=self.args.product_id,
-                            Parameters=self.
-                            get_provisioning_artifact_parameters(
-                                self.args.provisioning_artifact_name,
-                                self.args.provisioning_artifact_description,
-                                self.args.provisioning_artifact_type
-                            )
-                        )
-        self.assertEqual(expected_response_output,
-                         captured.stdout.getvalue())
+            'servicecatalog',
+            region_name=self.global_args.region,
+            endpoint_url=None,
+            verify=None,
+        )
+        self.servicecatalog_client.create_provisioning_artifact.assert_called_once_with(
+            ProductId=self.args.product_id,
+            Parameters=self.get_provisioning_artifact_parameters(
+                self.args.provisioning_artifact_name,
+                self.args.provisioning_artifact_description,
+                self.args.provisioning_artifact_type,
+            ),
+        )
+        self.assertEqual(expected_response_output, captured.stdout.getvalue())
         self.assertEqual(0, result)
 
     def test_region_not_supported(self):
         self.global_args.region = 'not-supported-region'
-        with self.assertRaisesRegex(exceptions.InvalidParametersException,
-                                     "not supported"):
+        with self.assertRaisesRegex(
+            exceptions.InvalidParametersException, "not supported"
+        ):
             self.cmd._run_main(self.args, self.global_args)
 
-    def get_provisioning_artifact_parameters(self, pa_name,
-                                             pa_description, pa_type):
+    def get_provisioning_artifact_parameters(
+        self, pa_name, pa_description, pa_type
+    ):
         return {
             'Name': pa_name,
             'Description': pa_description,
-            'Info': {
-                'LoadTemplateFromURL': self.s3_url
-            },
-            'Type': pa_type
+            'Info': {'LoadTemplateFromURL': self.s3_url},
+            'Type': pa_type,
         }
 
     def get_create_provisioning_artifact_output(self):
         return {
-            'Info': {
-                'TemplateUrl': self.s3_url
-            },
+            'Info': {'TemplateUrl': self.s3_url},
             'ProvisioningArtifactDetail': {
                 'Description': self.args.provisioning_artifact_description,
                 'Id': 'pa-inifmhpr47ft2',
                 'Name': self.args.provisioning_artifact_name,
-                'Type': self.args.provisioning_artifact_type
+                'Type': self.args.provisioning_artifact_type,
             },
             'Status': "CREATING",
-            'ResponseMetadata': {}
+            'ResponseMetadata': {},
         }
diff -pruN 2.23.6-1/tests/unit/customizations/servicecatalog/test_utils.py 2.31.35-1/tests/unit/customizations/servicecatalog/test_utils.py
--- 2.23.6-1/tests/unit/customizations/servicecatalog/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/servicecatalog/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,7 +16,6 @@ from awscli.testutils import unittest
 
 
 class TestUtils(unittest.TestCase):
-
     def test_make_url_no_version(self):
         url = utils.make_url('us-east-1', 'foo-bucket-name', 'a/b/c', None)
         self.assertEqual("https://s3.amazonaws.com/foo-bucket-name/a/b/c", url)
@@ -24,11 +23,11 @@ class TestUtils(unittest.TestCase):
     def test_make_url_no_version_other_region(self):
         url = utils.make_url('us-west-2', 'foo-bucket-name', 'a/b/c', None)
         self.assertEqual(
-            "https://s3-us-west-2.amazonaws.com/foo-bucket-name/a/b/c",
-            url)
+            "https://s3-us-west-2.amazonaws.com/foo-bucket-name/a/b/c", url
+        )
 
     def test_make_url_with_version(self):
         url = utils.make_url('us-east-1', 'foo-bucket-name', 'a/b/c', 5)
         self.assertEqual(
-            "https://s3.amazonaws.com/foo-bucket-name/a/b/c?versionId=5",
-            url)
+            "https://s3.amazonaws.com/foo-bucket-name/a/b/c?versionId=5", url
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/sso/test_sso.py 2.31.35-1/tests/unit/customizations/sso/test_sso.py
--- 2.23.6-1/tests/unit/customizations/sso/test_sso.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/sso/test_sso.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,24 +14,22 @@ import botocore.credentials
 import botocore.session
 from botocore.exceptions import ProfileNotFound, UnknownCredentialError
 
-from awscli.testutils import mock
-from awscli.testutils import unittest
 from awscli.customizations.sso import inject_json_file_cache
+from awscli.testutils import mock, unittest
 
 
 class TestInjectJSONFileCache(unittest.TestCase):
     def setUp(self):
         self.mock_sso_provider = mock.Mock(
-            spec=botocore.credentials.SSOProvider)
+            spec=botocore.credentials.SSOProvider
+        )
         self.mock_resolver = mock.Mock(botocore.credentials.CredentialResolver)
         self.mock_resolver.get_provider.return_value = self.mock_sso_provider
         self.session = mock.Mock(spec=botocore.session.Session)
         self.session.get_component.return_value = self.mock_resolver
 
     def test_inject_json_file_cache(self):
-        inject_json_file_cache(
-            self.session, event_name='session-initialized'
-        )
+        inject_json_file_cache(self.session, event_name='session-initialized')
         self.session.get_component.assert_called_with('credential_provider')
         self.assertIsInstance(
             self.mock_sso_provider.cache,
@@ -40,7 +38,8 @@ class TestInjectJSONFileCache(unittest.T
 
     def test_profile_not_found_is_not_propagated(self):
         self.session.get_component.side_effect = ProfileNotFound(
-            profile='unknown')
+            profile='unknown'
+        )
         try:
             inject_json_file_cache(
                 self.session, event_name='session-initialized'
diff -pruN 2.23.6-1/tests/unit/customizations/sso/test_utils.py 2.31.35-1/tests/unit/customizations/sso/test_utils.py
--- 2.23.6-1/tests/unit/customizations/sso/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/sso/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,22 +13,23 @@
 import os
 import threading
 import webbrowser
+
 import pytest
 import urllib3
-
 from botocore.exceptions import PendingAuthorizationExpiredError
 from botocore.session import Session
 
 from awscli.compat import BytesIO, StringIO
-from awscli.customizations.sso.utils import OpenBrowserHandler
-from awscli.customizations.sso.utils import PrintOnlyHandler
-from awscli.customizations.sso.utils import do_sso_login
-from awscli.customizations.sso.utils import open_browser_with_original_ld_path
 from awscli.customizations.sso.utils import (
-    parse_sso_registration_scopes, AuthCodeFetcher, OAuthCallbackHandler
+    AuthCodeFetcher,
+    OAuthCallbackHandler,
+    OpenBrowserHandler,
+    PrintOnlyHandler,
+    do_sso_login,
+    open_browser_with_original_ld_path,
+    parse_sso_registration_scopes,
 )
-from awscli.testutils import mock
-from awscli.testutils import unittest
+from awscli.testutils import mock, unittest
 
 
 @pytest.mark.parametrize(
@@ -41,8 +42,8 @@ from awscli.testutils import unittest
         ('scope-1,scope-2', ['scope-1', 'scope-2']),
         ('scope-1, scope-2', ['scope-1', 'scope-2']),
         (' scope-1, scope-2 ', ['scope-1', 'scope-2']),
-        ('scope-1,scope-2,scope-3', ['scope-1', 'scope-2', 'scope-3'])
-    ]
+        ('scope-1,scope-2,scope-3', ['scope-1', 'scope-2', 'scope-3']),
+    ],
 )
 def test_parse_registration_scopes(raw_scopes, parsed_scopes):
     assert parse_sso_registration_scopes(raw_scopes) == parsed_scopes
@@ -60,7 +61,8 @@ class TestDoSSOLogin(unittest.TestCase):
 
     def get_mock_sso_oidc_client(self):
         real_client = Session().create_client(
-            'sso-oidc', region_name=self.region)
+            'sso-oidc', region_name=self.region
+        )
         client = mock.Mock()
         client.exceptions = real_client.exceptions
         client.register_client.return_value = {
@@ -82,7 +84,7 @@ class TestDoSSOLogin(unittest.TestCase):
                 'expiresIn': 28800,
                 'tokenType': 'Bearer',
                 'accessToken': 'access.token',
-            }
+            },
         ]
         return client
 
@@ -99,7 +101,8 @@ class TestDoSSOLogin(unittest.TestCase):
 
     def assert_on_pending_authorization_called(self):
         self.assertEqual(
-            len(self.on_pending_authorization_mock.call_args_list), 1)
+            len(self.on_pending_authorization_mock.call_args_list), 1
+        )
 
     def test_do_sso_login(self):
         do_sso_login(
@@ -200,7 +203,6 @@ class TestOpenBrowserHandler(BaseHandler
 
 
 class TestOpenBrowserWithPatchedEnv(unittest.TestCase):
-
     def test_can_patch_env(self):
         # The various edge case are tested in original_ld_library_path,
         # we're just checking that we're integrating everything together
@@ -210,12 +212,13 @@ class TestOpenBrowserWithPatchedEnv(unit
             with mock.patch('webbrowser.open_new_tab') as open_new_tab:
                 captured_env = {}
                 open_new_tab.side_effect = lambda x: captured_env.update(
-                    os.environ)
+                    os.environ
+                )
                 open_browser_with_original_ld_path('http://example.com')
         self.assertIsNone(captured_env.get('LD_LIBRARY_PATH'))
 
 
-class MockRequest(object):
+class MockRequest:
     def __init__(self, request):
         self._request = request
 
@@ -230,6 +233,7 @@ class TestOAuthCallbackHandler:
     """Tests for OAuthCallbackHandler, which handles
     individual requests that we receive at the callback uri
     """
+
     def test_expected_query_params(self):
         fetcher = mock.Mock(AuthCodeFetcher)
 
@@ -275,7 +279,9 @@ class TestAuthCodeFetcher:
 
     def setup_method(self):
         self.fetcher = AuthCodeFetcher()
-        self.url = f'http://127.0.0.1:{self.fetcher.http_server.server_address[1]}/'
+        self.url = (
+            f'http://127.0.0.1:{self.fetcher.http_server.server_address[1]}/'
+        )
 
         # Start the server on a background thread so that
         # the test thread can make the request
@@ -312,12 +318,10 @@ class TestAuthCodeFetcher:
 
 
 @mock.patch(
-    'awscli.customizations.sso.utils.AuthCodeFetcher._REQUEST_TIMEOUT',
-    0.1
+    'awscli.customizations.sso.utils.AuthCodeFetcher._REQUEST_TIMEOUT', 0.1
 )
 @mock.patch(
-    'awscli.customizations.sso.utils.AuthCodeFetcher._OVERALL_TIMEOUT',
-    0.1
+    'awscli.customizations.sso.utils.AuthCodeFetcher._OVERALL_TIMEOUT', 0.1
 )
 def test_get_auth_code_and_state_timeout():
     """Tests the timeout case separately of TestAuthCodeFetcher,
diff -pruN 2.23.6-1/tests/unit/customizations/test_argrename.py 2.31.35-1/tests/unit/customizations/test_argrename.py
--- 2.23.6-1/tests/unit/customizations/test_argrename.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_argrename.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
-from awscli.customizations import argrename
-from awscli.customizations import arguments
-
 from botocore import model
 
+from awscli.customizations import argrename, arguments
+from awscli.testutils import unittest
+
 
 class TestArgumentManipulations(unittest.TestCase):
     def setUp(self):
@@ -33,8 +32,10 @@ class TestArgumentManipulations(unittest
 
     def test_can_alias_an_argument(self):
         arg = arguments.CustomArgument(
-            'foo', dest='foo',
-            argument_model=model.Shape('FooArg', {'type': 'string'}))
+            'foo',
+            dest='foo',
+            argument_model=model.Shape('FooArg', {'type': 'string'}),
+        )
         self.argument_table['foo'] = arg
         handler = argrename.hidden_alias('foo', 'alias-name')
 
diff -pruN 2.23.6-1/tests/unit/customizations/test_arguments.py 2.31.35-1/tests/unit/customizations/test_arguments.py
--- 2.23.6-1/tests/unit/customizations/test_arguments.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_arguments.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,14 +12,16 @@
 # language governing permissions and limitations under the License.
 import os
 
-from awscli.testutils import mock, unittest, FileCreator, skip_if_windows
-from awscli.customizations.arguments import NestedBlobArgumentHoister
-from awscli.customizations.arguments import OverrideRequiredArgsArgument
-from awscli.customizations.arguments import StatefulArgument
-from awscli.customizations.arguments import QueryOutFileArgument
-from awscli.customizations.arguments import resolve_given_outfile_path
-from awscli.customizations.arguments import is_parsed_result_successful
+from awscli.customizations.arguments import (
+    NestedBlobArgumentHoister,
+    OverrideRequiredArgsArgument,
+    QueryOutFileArgument,
+    StatefulArgument,
+    is_parsed_result_successful,
+    resolve_given_outfile_path,
+)
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.testutils import FileCreator, mock, skip_if_windows, unittest
 
 
 class TestOverrideRequiredArgsArgument(unittest.TestCase):
@@ -35,10 +37,12 @@ class TestOverrideRequiredArgsArgument(u
 
     def test_register_argument_action(self):
         register_args = self.session.register.call_args
-        self.assertEqual(register_args[0][0],
-                         'before-building-argument-table-parser')
-        self.assertEqual(register_args[0][1],
-                         self.argument.override_required_args)
+        self.assertEqual(
+            register_args[0][0], 'before-building-argument-table-parser'
+        )
+        self.assertEqual(
+            register_args[0][1], self.argument.override_required_args
+        )
 
     def test_override_required_args_if_in_cmdline(self):
         args = ['--no-required-args']
@@ -107,13 +111,19 @@ class TestQueryFileArgument(unittest.Tes
     def test_adds_default_help_text(self):
         session = mock.Mock()
         arg = QueryOutFileArgument(session, 'foo', 'bar.baz', 'event', 0o600)
-        self.assertEqual(('Saves the command output contents of bar.baz '
-                          'to the given filename'), arg.documentation)
+        self.assertEqual(
+            (
+                'Saves the command output contents of bar.baz '
+                'to the given filename'
+            ),
+            arg.documentation,
+        )
 
     def test_does_not_add_help_text_if_set(self):
         session = mock.Mock()
-        arg = QueryOutFileArgument(session, 'foo', 'bar.baz', 'event', 0o600,
-                                   help_text='abc')
+        arg = QueryOutFileArgument(
+            session, 'foo', 'bar.baz', 'event', 0o600, help_text='abc'
+        )
         self.assertEqual('abc', arg.documentation)
 
     def test_saves_query_to_file(self):
@@ -121,8 +131,9 @@ class TestQueryFileArgument(unittest.Tes
         session = mock.Mock()
         arg = QueryOutFileArgument(session, 'foo', 'baz', 'event', 0o600)
         arg.add_to_params({}, outfile)
-        arg.save_query({'ResponseMetadata': {'HTTPStatusCode': 200},
-                        'baz': 'abc123'})
+        arg.save_query(
+            {'ResponseMetadata': {'HTTPStatusCode': 200}, 'baz': 'abc123'}
+        )
         with open(outfile) as fp:
             self.assertEqual('abc123', fp.read())
         self.assertEqual(1, session.register.call_count)
@@ -148,8 +159,9 @@ class TestQueryFileArgument(unittest.Tes
         session = mock.Mock()
         arg = QueryOutFileArgument(session, 'foo', 'baz', 'event', 0o600)
         arg.add_to_params({}, outfile)
-        arg.save_query({'ResponseMetadata': {'HTTPStatusCode': 200},
-                        'baz': 'abc123'})
+        arg.save_query(
+            {'ResponseMetadata': {'HTTPStatusCode': 200}, 'baz': 'abc123'}
+        )
         with open(outfile) as fp:
             fp.read()
         self.assertEqual(os.stat(outfile).st_mode & 0xFFF, 0o600)
@@ -158,7 +170,8 @@ class TestQueryFileArgument(unittest.Tes
 class TestNestedBlobArgumentHoister(unittest.TestCase):
     def setUp(self):
         self.blob_hoister = NestedBlobArgumentHoister(
-            'complexArgX', 'valueY', 'argY', 'argYDoc', '.argYDocAddendum')
+            'complexArgX', 'valueY', 'argY', 'argYDoc', '.argYDocAddendum'
+        )
 
         self.arg_table = {
             'complexArgX': mock.Mock(
@@ -170,7 +183,7 @@ class TestNestedBlobArgumentHoister(unit
                             type_name='blob',
                         )
                     }
-                )
+                ),
             )
         }
 
@@ -180,7 +193,8 @@ class TestNestedBlobArgumentHoister(unit
         self.assertFalse(self.arg_table['complexArgX'].required)
         self.assertEqual(
             self.arg_table['complexArgX'].documentation,
-            'complexArgXDoc.argYDocAddendum')
+            'complexArgXDoc.argYDocAddendum',
+        )
 
         argY = self.arg_table['argY']
         self.assertFalse(argY.required)
@@ -210,7 +224,7 @@ class TestNestedBlobArgumentHoister(unit
             'any': 'other',
             'ComplexArgX': {
                 'another': 'one',
-            }
+            },
         }
         argY.add_to_params(parameters, 'test-value')
         self.assertEqual('other', parameters['any'])
@@ -228,7 +242,7 @@ class TestNestedBlobArgumentHoister(unit
             'ComplexArgX': {
                 'another': 'one',
                 'valueY': 'doomed',
-            }
+            },
         }
         argY.add_to_params(parameters, 'test-value')
         self.assertEqual('other', parameters['any'])
@@ -246,7 +260,7 @@ class TestNestedBlobArgumentHoister(unit
                             type_name='string',
                         )
                     }
-                )
+                ),
             )
         }
 
@@ -254,5 +268,7 @@ class TestNestedBlobArgumentHoister(unit
 
         self.assertTrue(nonmatching_arg_table['complexArgX'].required)
         self.assertEqual(
-            nonmatching_arg_table['complexArgX'].documentation, 'complexArgXDoc')
+            nonmatching_arg_table['complexArgX'].documentation,
+            'complexArgXDoc',
+        )
         self.assertFalse('argY' in self.arg_table)
diff -pruN 2.23.6-1/tests/unit/customizations/test_assumerole.py 2.31.35-1/tests/unit/customizations/test_assumerole.py
--- 2.23.6-1/tests/unit/customizations/test_assumerole.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_assumerole.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.hooks import HierarchicalEmitter
-from botocore.exceptions import ProfileNotFound
-from botocore.session import Session
 from botocore.credentials import (
     AssumeRoleProvider,
+    AssumeRoleWithWebIdentityProvider,
     CredentialResolver,
-    AssumeRoleWithWebIdentityProvider
 )
+from botocore.exceptions import ProfileNotFound
+from botocore.hooks import HierarchicalEmitter
+from botocore.session import Session
 
-from awscli.testutils import mock, unittest
 from awscli.customizations import assumerole
+from awscli.testutils import mock, unittest
 
 
 class TestAssumeRolePlugin(unittest.TestCase):
@@ -37,7 +37,8 @@ class TestAssumeRolePlugin(unittest.Test
         session.get_component.return_value = mock_resolver
 
         assumerole.inject_assume_role_provider_cache(
-            session, event_name='building-command-table.foo')
+            session, event_name='building-command-table.foo'
+        )
         session.get_component.assert_called_with('credential_provider')
         self.assertIsInstance(mock_assume_role.cache, assumerole.JSONFileCache)
         self.assertIsInstance(
@@ -57,11 +58,11 @@ class TestAssumeRolePlugin(unittest.Test
 
     def test_no_registration_if_profile_does_not_exist(self):
         session = mock.Mock(spec=Session)
-        session.get_component.side_effect = ProfileNotFound(
-            profile='unknown')
+        session.get_component.side_effect = ProfileNotFound(profile='unknown')
 
         assumerole.inject_assume_role_provider_cache(
-            session, event_name='building-command-table.foo')
+            session, event_name='building-command-table.foo'
+        )
 
         credential_provider = session.get_component.return_value
         self.assertFalse(credential_provider.get_provider.called)
diff -pruN 2.23.6-1/tests/unit/customizations/test_binaryformat.py 2.31.35-1/tests/unit/customizations/test_binaryformat.py
--- 2.23.6-1/tests/unit/customizations/test_binaryformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_binaryformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,19 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-from awscli.customizations.binaryformat import Base64DecodeVisitor
-from awscli.customizations.binaryformat import add_binary_formatter
-from awscli.customizations.binaryformat import base64_decode_input_blobs
-from awscli.customizations.binaryformat import identity
-from awscli.customizations.binaryformat import InvalidBase64Error
-
 from botocore import model
 from botocore.exceptions import ProfileNotFound
 from botocore.session import Session
 
+from awscli.customizations.binaryformat import (
+    Base64DecodeVisitor,
+    InvalidBase64Error,
+    add_binary_formatter,
+    base64_decode_input_blobs,
+    identity,
+)
+from awscli.testutils import mock, unittest
+
 
 def test_identity_function():
     assert 2 == identity(2)
@@ -39,7 +41,7 @@ class TestBase64DecodeVisitor(unittest.T
 
     def test_can_convert_top_level_blob(self):
         members = {'B': {'type': 'blob'}}
-        params = {'B': u'Zm9vAGJheg=='}
+        params = {'B': 'Zm9vAGJheg=='}
         expected_params = {'B': b'foo\x00baz'}
         self.assert_decoded_params(members, params, expected_params)
 
@@ -49,15 +51,11 @@ class TestBase64DecodeVisitor(unittest.T
                 'type': 'structure',
                 'members': {
                     'B': {'type': 'blob'},
-                }
+                },
             }
         }
-        params = {
-            'Nested': {'B': u'Zm9v'}
-        }
-        expected_params = {
-            'Nested': {'B': b'foo'}
-        }
+        params = {'Nested': {'B': 'Zm9v'}}
+        expected_params = {'Nested': {'B': b'foo'}}
         self.assert_decoded_params(members, params, expected_params)
 
     def test_can_convert_list_of_blob(self):
@@ -67,12 +65,8 @@ class TestBase64DecodeVisitor(unittest.T
                 'member': {'type': 'blob'},
             }
         }
-        params = {
-            'BS': [u'Zm9v', u'']
-        }
-        expected_params = {
-            'BS': [b'foo', b'']
-        }
+        params = {'BS': ['Zm9v', '']}
+        expected_params = {'BS': [b'foo', b'']}
         self.assert_decoded_params(members, params, expected_params)
 
     def test_can_convert_map_to_blob(self):
@@ -83,17 +77,13 @@ class TestBase64DecodeVisitor(unittest.T
                 'value': {'type': 'blob'},
             }
         }
-        params = {
-            'StoB': {'a': u'Zm9v', 'b': u''}
-        }
-        expected_params = {
-            'StoB': {'a': b'foo', 'b': b''}
-        }
+        params = {'StoB': {'a': 'Zm9v', 'b': ''}}
+        expected_params = {'StoB': {'a': b'foo', 'b': b''}}
         self.assert_decoded_params(members, params, expected_params)
 
     def test_converts_base64_exception(self):
         members = {'B': {'type': 'blob'}}
-        params = {'B': u'this:is:not:base64'}
+        params = {'B': 'this:is:not:base64'}
         shape = self.construct_model(members)
         base64_decode_visitor = Base64DecodeVisitor()
         with self.assertRaises(InvalidBase64Error):
@@ -122,14 +112,17 @@ class TestAddBinaryFormatter(unittest.Te
 
     def test_legacy_handlers_added_via_profile(self):
         self.parsed_args.cli_binary_format = None
-        self.mock_session.get_config_variable.return_value = 'raw-in-base64-out'
+        self.mock_session.get_config_variable.return_value = (
+            'raw-in-base64-out'
+        )
         add_binary_formatter(self.mock_session, self.parsed_args)
         self._assert_legacy_handlers_added()
 
     def _assert_base64_handlers_added(self):
         self.assertEqual(self.mock_session.register.call_count, 1)
         self.mock_session.register.assert_called_with(
-            'provide-client-params', base64_decode_input_blobs,
+            'provide-client-params',
+            base64_decode_input_blobs,
         )
         # base64 format parses blobs with an identity function
         self.mock_factory.set_parser_defaults.assert_called_with(
diff -pruN 2.23.6-1/tests/unit/customizations/test_cliinput.py 2.31.35-1/tests/unit/customizations/test_cliinput.py
--- 2.23.6-1/tests/unit/customizations/test_cliinput.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_cliinput.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,10 +14,12 @@ import os
 import shutil
 import tempfile
 
-from awscli.testutils import mock, unittest
 from awscli.argprocess import ParamError
-from awscli.customizations.cliinput import CliInputJSONArgument
-from awscli.customizations.cliinput import CliInputYAMLArgument
+from awscli.customizations.cliinput import (
+    CliInputJSONArgument,
+    CliInputYAMLArgument,
+)
+from awscli.testutils import mock, unittest
 
 
 class TestCliInputJSONArgument(unittest.TestCase):
@@ -52,8 +54,10 @@ class TestCliInputJSONArgument(unittest.
         parsed_args = self.create_args(self.input_json)
         call_parameters = {}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': 'foo', 'B': 'bar'})
 
@@ -61,8 +65,10 @@ class TestCliInputJSONArgument(unittest.
         parsed_args = self.create_args('file://' + self.temp_file)
         call_parameters = {}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': 'foo', 'B': 'bar'})
 
@@ -71,8 +77,10 @@ class TestCliInputJSONArgument(unittest.
         call_parameters = {}
         with self.assertRaises(ParamError):
             self.argument.add_to_call_parameters(
-                service_operation=None, call_parameters=call_parameters,
-                parsed_args=parsed_args, parsed_globals=None
+                service_operation=None,
+                call_parameters=call_parameters,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
 
     def test_add_to_call_parameters_no_clobber(self):
@@ -80,8 +88,10 @@ class TestCliInputJSONArgument(unittest.
         # The value for ``A`` should not be clobbered by the input JSON
         call_parameters = {'A': 'baz'}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': 'baz', 'B': 'bar'})
 
@@ -89,8 +99,10 @@ class TestCliInputJSONArgument(unittest.
         parsed_args = self.create_args(None)
         call_parameters = {'A': 'baz'}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         # Nothing should have been added to the call parameters because
         # ``cli_input_json`` is not in the ``parsed_args``
@@ -104,8 +116,10 @@ class TestCliInputJSONArgument(unittest.
             parsed_args = self.create_args(invalid_value)
             with self.assertRaises(ParamError):
                 self.argument.add_to_call_parameters(
-                    service_operation=None, call_parameters={},
-                    parsed_args=parsed_args, parsed_globals=None
+                    service_operation=None,
+                    call_parameters={},
+                    parsed_args=parsed_args,
+                    parsed_globals=None,
                 )
 
 
@@ -124,8 +138,10 @@ class TestCliInputYAMLArgument(TestCliIn
         parsed_args = self.create_args(self.input_yaml)
         call_parameters = {}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': 'foo', 'B': 'bar'})
 
@@ -134,8 +150,10 @@ class TestCliInputYAMLArgument(TestCliIn
         parsed_args = self.create_args(input_yaml)
         call_parameters = {}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': b'foo', 'B': 'bar'})
 
@@ -144,8 +162,10 @@ class TestCliInputYAMLArgument(TestCliIn
         parsed_args = self.create_args(input_yaml)
         call_parameters = {}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'foo': set([1, 2, 3])})
 
@@ -154,8 +174,10 @@ class TestCliInputYAMLArgument(TestCliIn
         call_parameters = {}
         with self.assertRaises(ParamError):
             self.argument.add_to_call_parameters(
-                service_operation=None, call_parameters=call_parameters,
-                parsed_args=parsed_args, parsed_globals=None
+                service_operation=None,
+                call_parameters=call_parameters,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
 
     def test_yaml_does_not_overwrite(self):
@@ -163,7 +185,9 @@ class TestCliInputYAMLArgument(TestCliIn
         # The value for ``A`` should not be clobbered by the input YAML
         call_parameters = {'A': 'baz'}
         self.argument.add_to_call_parameters(
-            service_operation=None, call_parameters=call_parameters,
-            parsed_args=parsed_args, parsed_globals=None
+            service_operation=None,
+            call_parameters=call_parameters,
+            parsed_args=parsed_args,
+            parsed_globals=None,
         )
         self.assertEqual(call_parameters, {'A': 'baz', 'B': 'bar'})
diff -pruN 2.23.6-1/tests/unit/customizations/test_cloudsearchdomain.py 2.31.35-1/tests/unit/customizations/test_cloudsearchdomain.py
--- 2.23.6-1/tests/unit/customizations/test_cloudsearchdomain.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_cloudsearchdomain.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.help import PagingHelpRenderer
 from awscli.customizations.cloudsearchdomain import validate_endpoint_url
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.help import PagingHelpRenderer
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 class TestSearchCommand(BaseAWSCommandParamsTest):
@@ -23,16 +22,19 @@ class TestSearchCommand(BaseAWSCommandPa
     def test_search_with_query(self):
         cmd = self.prefix.split()
         cmd += [
-            '--endpoint-url', 'http://example.com/',
+            '--endpoint-url',
+            'http://example.com/',
             # Note we're also verifying that --query is renamed to
             # --search-query from argrename.py.
-            '--search-query', 'George Lucas',
+            '--search-query',
+            'George Lucas',
             '--query-options',
-            '{"defaultOperator":"and","fields":["directors^10"]}']
+            '{"defaultOperator":"and","fields":["directors^10"]}',
+        ]
 
         expected = {
-            'query': u'George Lucas',
-            'queryOptions': u'{"defaultOperator":"and","fields":["directors^10"]}'
+            'query': 'George Lucas',
+            'queryOptions': '{"defaultOperator":"and","fields":["directors^10"]}',
         }
         self.assert_params_for_cmd(cmd, expected)
 
diff -pruN 2.23.6-1/tests/unit/customizations/test_cloudwatch.py 2.31.35-1/tests/unit/customizations/test_cloudwatch.py
--- 2.23.6-1/tests/unit/customizations/test_cloudwatch.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_cloudwatch.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,68 +12,81 @@
 # language governing permissions and limitations under the License.
 import decimal
 
-from awscli.testutils import unittest
-
 from awscli.customizations import putmetricdata
+from awscli.testutils import unittest
 
 
 class TestPutMetricArgument(unittest.TestCase):
     def test_build_metric_name_arg(self):
-        arg = putmetricdata.PutMetricArgument('metric-name',
-                                              help_text='metric-name')
+        arg = putmetricdata.PutMetricArgument(
+            'metric-name', help_text='metric-name'
+        )
         parameters = {}
         arg.add_to_params(parameters, 'MyMetricName')
-        self.assertEqual(parameters['MetricData'][0]['MetricName'],
-                         'MyMetricName')
+        self.assertEqual(
+            parameters['MetricData'][0]['MetricName'], 'MyMetricName'
+        )
 
     def test_build_unit_arg(self):
-        arg = putmetricdata.PutMetricArgument('unit',
-                                              help_text='unit')
+        arg = putmetricdata.PutMetricArgument('unit', help_text='unit')
         parameters = {}
         arg.add_to_params(parameters, 'Percent')
-        self.assertEqual(parameters['MetricData'][0]['Unit'],
-                         'Percent')
+        self.assertEqual(parameters['MetricData'][0]['Unit'], 'Percent')
 
     def test_value_arg(self):
-        arg = putmetricdata.PutMetricArgument('value',
-                                              help_text='value')
+        arg = putmetricdata.PutMetricArgument('value', help_text='value')
         parameters = {}
         arg.add_to_params(parameters, '123.1')
-        self.assertEqual(parameters['MetricData'][0]['Value'],
-                         decimal.Decimal('123.1'))
+        self.assertEqual(
+            parameters['MetricData'][0]['Value'], decimal.Decimal('123.1')
+        )
 
     def test_timestamp_arg(self):
-        arg = putmetricdata.PutMetricArgument('timestamp',
-                                              help_text='timestamp')
+        arg = putmetricdata.PutMetricArgument(
+            'timestamp', help_text='timestamp'
+        )
         parameters = {}
         arg.add_to_params(parameters, '2013-09-01')
-        self.assertEqual(parameters['MetricData'][0]['Timestamp'],
-                         '2013-09-01')
+        self.assertEqual(
+            parameters['MetricData'][0]['Timestamp'], '2013-09-01'
+        )
 
     def test_dimensions_arg(self):
-        arg = putmetricdata.PutMetricArgument('dimensions',
-                                              help_text='dimensions')
+        arg = putmetricdata.PutMetricArgument(
+            'dimensions', help_text='dimensions'
+        )
         parameters = {}
         arg.add_to_params(parameters, 'User=someuser,Stack=test')
-        self.assertEqual(parameters['MetricData'][0]['Dimensions'],
-                         [{"Name": "User", "Value": "someuser"},
-                          {"Name": "Stack", "Value": "test"}])
+        self.assertEqual(
+            parameters['MetricData'][0]['Dimensions'],
+            [
+                {"Name": "User", "Value": "someuser"},
+                {"Name": "Stack", "Value": "test"},
+            ],
+        )
 
     def test_statistics_arg(self):
-        arg = putmetricdata.PutMetricArgument('statistic-values',
-                                              help_text='statistic-values')
-        parameters = {}
-        arg.add_to_params(parameters,
-                          'Sum=250,Minimum=30,Maximum=70,SampleCount=5')
-        self.assertEqual(parameters['MetricData'][0]['StatisticValues'],
-                         {'Maximum': decimal.Decimal('70'),
-                          'Minimum': decimal.Decimal('30'),
-                          'SampleCount': decimal.Decimal('5'),
-                          'Sum': decimal.Decimal('250')})
+        arg = putmetricdata.PutMetricArgument(
+            'statistic-values', help_text='statistic-values'
+        )
+        parameters = {}
+        arg.add_to_params(
+            parameters, 'Sum=250,Minimum=30,Maximum=70,SampleCount=5'
+        )
+        self.assertEqual(
+            parameters['MetricData'][0]['StatisticValues'],
+            {
+                'Maximum': decimal.Decimal('70'),
+                'Minimum': decimal.Decimal('30'),
+                'SampleCount': decimal.Decimal('5'),
+                'Sum': decimal.Decimal('250'),
+            },
+        )
 
     def test_parse_empty_value(self):
-        arg = putmetricdata.PutMetricArgument('dimensions',
-                                              help_text='dimensions')
+        arg = putmetricdata.PutMetricArgument(
+            'dimensions', help_text='dimensions'
+        )
         parameters = {}
         arg.add_to_params(parameters, None)
         self.assertEqual(parameters, {})
diff -pruN 2.23.6-1/tests/unit/customizations/test_codecommit.py 2.31.35-1/tests/unit/customizations/test_codecommit.py
--- 2.23.6-1/tests/unit/customizations/test_codecommit.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_codecommit.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,62 +11,81 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-import awscli
-
 from argparse import Namespace
-from botocore.session import Session
-from botocore.credentials import Credentials
-from awscli.customizations.codecommit import CodeCommitGetCommand
-from awscli.customizations.codecommit import CodeCommitCommand
-from awscli.customizations.exceptions import ParamValidationError
-from awscli.testutils import mock, unittest, StringIOWithFileNo
-from awscli.compat import StringIO
 
 from botocore.auth import SigV4Auth
 from botocore.awsrequest import AWSRequest
+from botocore.credentials import Credentials
+from botocore.session import Session
 
+import awscli
+from awscli.compat import StringIO
+from awscli.customizations.codecommit import (
+    CodeCommitCommand,
+    CodeCommitGetCommand,
+)
+from awscli.customizations.exceptions import ParamValidationError
+from awscli.testutils import StringIOWithFileNo, mock, unittest
 
-class TestCodeCommitCredentialHelper(unittest.TestCase):
 
-    PROTOCOL_HOST_PATH = ('protocol=https\n'
-                          'host=git-codecommit.us-east-1.amazonaws.com\n'
-                          'path=/v1/repos/myrepo')
-
-    PROTOCOL_HOST_PATH_TRAILING_NEWLINE = ('protocol=https\n'
-                                           'host=git-codecommit.us-east-1.amazonaws.com\n'
-                                           'path=/v1/repos/myrepo\n')
-
-    PROTOCOL_HOST_PATH_BLANK_LINE = ('protocol=https\n'
-                                     'host=git-codecommit.us-east-1.amazonaws.com\n'
-                                     'path=/v1/repos/myrepo\n\n')
-
-    FIPS_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                               'host=git-codecommit-fips.us-east-1.amazonaws.com\n'
-                               'path=/v1/repos/myrepo')
-
-    VPC_1_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit.us-east-1.vpce.amazonaws.com\n'
-                                'path=/v1/repos/myrepo')
-
-    VPC_2_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                'host=vpce-0b47ea360adebf88a-jkl88hez-us-east-1a.git-codecommit.us-east-1.vpce.amazonaws.com\n'
-                                'path=/v1/repos/myrepo')
-
-    FIPS_VPC_1_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                     'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit-fips.us-east-1.vpce.amazonaws.com\n'
-                                     'path=/v1/repos/myrepo')
-
-    FIPS_VPC_2_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                     'host=vpce-0b47ea360adebf88a-jkl88hez-us-west-2b.git-codecommit-fips.us-east-1.vpce.amazonaws.com\n'
-                                     'path=/v1/repos/myrepo')
-
-    NO_REGION_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                    'host=git-codecommit.amazonaws.com\n'
-                                    'path=/v1/repos/myrepo')
-
-    NON_AWS_PROTOCOL_HOST_PATH = ('protocol=https\n'
-                                  'host=mydomain.com\n'
-                                  'path=/v1/repos/myrepo')
+class TestCodeCommitCredentialHelper(unittest.TestCase):
+    PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=git-codecommit.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    PROTOCOL_HOST_PATH_TRAILING_NEWLINE = (
+        'protocol=https\n'
+        'host=git-codecommit.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo\n'
+    )
+
+    PROTOCOL_HOST_PATH_BLANK_LINE = (
+        'protocol=https\n'
+        'host=git-codecommit.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo\n\n'
+    )
+
+    FIPS_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=git-codecommit-fips.us-east-1.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    VPC_1_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit.us-east-1.vpce.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    VPC_2_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=vpce-0b47ea360adebf88a-jkl88hez-us-east-1a.git-codecommit.us-east-1.vpce.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    FIPS_VPC_1_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=vpce-0b47ea360adebf88a-jkl88hez.git-codecommit-fips.us-east-1.vpce.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    FIPS_VPC_2_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=vpce-0b47ea360adebf88a-jkl88hez-us-west-2b.git-codecommit-fips.us-east-1.vpce.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    NO_REGION_PROTOCOL_HOST_PATH = (
+        'protocol=https\n'
+        'host=git-codecommit.amazonaws.com\n'
+        'path=/v1/repos/myrepo'
+    )
+
+    NON_AWS_PROTOCOL_HOST_PATH = (
+        'protocol=https\n' 'host=mydomain.com\n' 'path=/v1/repos/myrepo'
+    )
 
     MOCK_STDOUT_CLASS = StringIOWithFileNo
 
@@ -87,8 +106,7 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(PROTOCOL_HOST_PATH_TRAILING_NEWLINE))
@@ -96,8 +114,7 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(PROTOCOL_HOST_PATH_BLANK_LINE))
@@ -105,19 +122,19 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(FIPS_PROTOCOL_HOST_PATH))
-    def test_generate_credentials_fips_reads_region_from_url(self, stdout_mock):
+    def test_generate_credentials_fips_reads_region_from_url(
+        self, stdout_mock
+    ):
         self.globals.region = None
         self.session.get_config_variable.return_value = None
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(VPC_1_PROTOCOL_HOST_PATH))
@@ -127,41 +144,43 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(VPC_2_PROTOCOL_HOST_PATH))
-    def test_generate_credentials_vpc_2_reads_region_from_url(self, stdout_mock):
+    def test_generate_credentials_vpc_2_reads_region_from_url(
+        self, stdout_mock
+    ):
         self.globals.region = None
         self.session.get_config_variable.return_value = None
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(FIPS_VPC_1_PROTOCOL_HOST_PATH))
-    def test_generate_credentials_fips_vpc_1_reads_region_from_url(self, stdout_mock):
+    def test_generate_credentials_fips_vpc_1_reads_region_from_url(
+        self, stdout_mock
+    ):
         self.globals.region = None
         self.session.get_config_variable.return_value = None
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(FIPS_VPC_2_PROTOCOL_HOST_PATH))
-    def test_generate_credentials_fips_vpc_2_reads_region_from_url(self, stdout_mock):
+    def test_generate_credentials_fips_vpc_2_reads_region_from_url(
+        self, stdout_mock
+    ):
         self.globals.region = None
         self.session.get_config_variable.return_value = None
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(NO_REGION_PROTOCOL_HOST_PATH))
@@ -169,8 +188,7 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command = CodeCommitGetCommand(self.session)
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
-        self.assertRegex(
-            output, 'username={0}\npassword=.+'.format('access'))
+        self.assertRegex(output, 'username={0}\npassword=.+'.format('access'))
 
     @mock.patch('sys.stdout', new_callable=MOCK_STDOUT_CLASS)
     @mock.patch('sys.stdin', StringIO(NON_AWS_PROTOCOL_HOST_PATH))
@@ -194,15 +212,16 @@ class TestCodeCommitCredentialHelper(uni
         self.get_command._run_main(self.args, self.globals)
         output = stdout_mock.getvalue().strip()
         self.assertRegex(
-            output,
-            'username={0}%{1}\npassword=.+'.format('access', 'token'))
+            output, 'username={0}%{1}\npassword=.+'.format('access', 'token')
+        )
 
     @mock.patch('sys.stdout', MOCK_STDOUT_CLASS())
     @mock.patch('sys.stdin', StringIO(PROTOCOL_HOST_PATH))
     @mock.patch('botocore.auth.SigV4Auth.string_to_sign')
     @mock.patch('botocore.auth.SigV4Auth.signature')
-    def test_generate_credentials_creates_a_valid_request(self, signature,
-                                                          string_to_sign):
+    def test_generate_credentials_creates_a_valid_request(
+        self, signature, string_to_sign
+    ):
         self.credentials = Credentials('access', 'secret')
         self.session.get_credentials.return_value = self.credentials
         self.get_command = CodeCommitGetCommand(self.session)
@@ -211,12 +230,17 @@ class TestCodeCommitCredentialHelper(uni
         self.assertEqual('GIT', aws_request.method)
         self.assertEqual(
             'https://git-codecommit.us-east-1.amazonaws.com//v1/repos/myrepo',
-            aws_request.url)
+            aws_request.url,
+        )
         self.assertEqual(
-            ('GIT\n//v1/repos/myrepo\n\n'
-             'host:git-codecommit.us-east-1.amazonaws.com\n\n'
-             'host\n'),
-            string_to_sign.call_args[0][1])
+            (
+                'GIT\n//v1/repos/myrepo\n\n'
+                'host:git-codecommit.us-east-1.amazonaws.com\n\n'
+                'host\n'
+            ),
+            string_to_sign.call_args[0][1],
+        )
+
 
 if __name__ == "__main__":
     unittest.main()
diff -pruN 2.23.6-1/tests/unit/customizations/test_commands.py 2.31.35-1/tests/unit/customizations/test_commands.py
--- 2.23.6-1/tests/unit/customizations/test_commands.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_commands.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest
+from botocore.hooks import HierarchicalEmitter
 
 from awscli.clidriver import CLIDriver
-from awscli.customizations.commands import BasicHelp, BasicCommand
-from awscli.customizations.commands import BasicDocHandler
-from awscli.testutils import mock, BaseAWSCommandParamsTest
-from botocore.hooks import HierarchicalEmitter
-from tests.unit.test_clidriver import FakeSession, FakeCommand
+from awscli.customizations.commands import (
+    BasicCommand,
+    BasicDocHandler,
+    BasicHelp,
+)
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
+from tests.unit.test_clidriver import FakeCommand, FakeSession
 
 
 class MockCustomCommand(BasicCommand):
@@ -27,22 +29,22 @@ class MockCustomCommand(BasicCommand):
 
 
 class TestCommandLoader(unittest.TestCase):
-
     def test_basic_help_with_contents(self):
         cmd_object = mock.Mock()
         mock_module = mock.Mock()
         mock_module.__file__ = '/some/root'
         cmd_object.DESCRIPTION = BasicCommand.FROM_FILE(
-            'foo', 'bar', 'baz.txt', root_module=mock_module)
+            'foo', 'bar', 'baz.txt', root_module=mock_module
+        )
         help_command = BasicHelp(mock.Mock(), cmd_object, {}, {})
         with mock.patch('awscli.customizations.commands._open') as mock_open:
-            mock_open.return_value.__enter__.return_value.read.return_value = \
+            mock_open.return_value.__enter__.return_value.read.return_value = (
                 'fake description'
+            )
             self.assertEqual(help_command.description, 'fake description')
 
 
 class TestBasicCommand(unittest.TestCase):
-
     def setUp(self):
         self.session = mock.Mock()
         self.command = BasicCommand(self.session)
@@ -79,8 +81,7 @@ class TestBasicCommand(unittest.TestCase
         self.assertEqual(lineage[0], self.command)
         self.assertIsInstance(lineage[1], BasicCommand)
         self.assertEqual(
-            subcommand.lineage_names,
-            [self.command.name, subcommand.name]
+            subcommand.lineage_names, [self.command.name, subcommand.name]
         )
 
     def test_event_class(self):
@@ -101,7 +102,7 @@ class TestBasicCommandHooks(unittest.Tes
     def setUp(self):
         self.session = FakeSession()
         self.session.get_config_variable = mock.Mock()
-        return_values = {'cli_auto_prompt': 'off'}
+        return_values = {'cli_auto_prompt': 'off', 'cli_help_output': None}
         self.session.get_config_variable.side_effect = return_values
         self.emitter = mock.Mock(wraps=HierarchicalEmitter())
         self.session.emitter = self.emitter
@@ -118,21 +119,22 @@ class TestBasicCommandHooks(unittest.Tes
 
     def test_expected_events_are_emitted_in_order(self):
         driver = CLIDriver(session=self.session)
-        self.emitter.register(
-            'building-command-table.s3', self.inject_command)
+        self.emitter.register('building-command-table.s3', self.inject_command)
 
         driver.main('s3 foo'.split())
 
-        self.assert_events_fired_in_order([
-            'building-command-table.main',
-            'building-top-level-params',
-            'top-level-args-parsed',
-            'session-initialized',
-            'building-command-table.s3',
-            'building-command-table.s3_foo',
-            'building-arg-table.s3_foo',
-            'before-building-argument-table-parser.s3.foo'
-        ])
+        self.assert_events_fired_in_order(
+            [
+                'building-command-table.main',
+                'building-top-level-params',
+                'top-level-args-parsed',
+                'session-initialized',
+                'building-command-table.s3',
+                'building-command-table.s3_foo',
+                'building-arg-table.s3_foo',
+                'before-building-argument-table-parser.s3.foo',
+            ]
+        )
 
 
 class TestBasicDocHandler(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/customizations/test_flatten.py 2.31.35-1/tests/unit/customizations/test_flatten.py
--- 2.23.6-1/tests/unit/customizations/test_flatten.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_flatten.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,11 +10,10 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest
-
 from awscli.arguments import CLIArgument
 from awscli.customizations import utils
-from awscli.customizations.flatten import FlattenedArgument, FlattenArguments
+from awscli.customizations.flatten import FlattenArguments, FlattenedArgument
+from awscli.testutils import mock, unittest
 
 
 def _hydrate(params, container, cli_type, key, value):
@@ -22,11 +21,7 @@ def _hydrate(params, container, cli_type
     An example to hydrate a complex structure with custom value logic. In this
     case we create a nested structure and divide the value by 100.
     """
-    params['bag'] = {
-        'ArgumentBaz': {
-            'SomeValueAbc': value / 100.0
-        }
-    }
+    params['bag'] = {'ArgumentBaz': {'SomeValueAbc': value / 100.0}}
 
 
 FLATTEN_CONFIG = {
@@ -34,40 +29,36 @@ FLATTEN_CONFIG = {
         'original-argument': {
             "keep": False,
             "flatten": {
-                "ArgumentFoo": {
-                    "name": "foo"
-                },
+                "ArgumentFoo": {"name": "foo"},
                 "ArgumentBar": {
                     "name": "bar",
                     "help_text": "Some help text",
                     "required": True,
-                    "hydrate_value": lambda x: x.upper()
-                }
-            }
+                    "hydrate_value": lambda x: x.upper(),
+                },
+            },
         },
         'another-original-argument': {
             "keep": True,
             "flatten": {
-                "ArgumentBaz.SomeValue": {
-                    "name": "baz",
-                    "hydrate": _hydrate
-                }
-            }
-        }
+                "ArgumentBaz.SomeValue": {"name": "baz", "hydrate": _hydrate}
+            },
+        },
     }
 }
 
+
 class TestFlattenedArgument(unittest.TestCase):
     def test_basic_argument(self):
         container = mock.Mock()
         container.argument_model.name = 'bag'
-        kwargs = {
-            'container': container,
-            'prop': 'ArgumentFoo'
-        }
+        kwargs = {'container': container, 'prop': 'ArgumentFoo'}
         kwargs['container'].py_name = 'bag'
-        kwargs.update(FLATTEN_CONFIG['command-name']['original-argument']
-                                    ['flatten']['ArgumentFoo'])
+        kwargs.update(
+            FLATTEN_CONFIG['command-name']['original-argument']['flatten'][
+                'ArgumentFoo'
+            ]
+        )
         arg = FlattenedArgument(**kwargs)
 
         self.assertEqual('foo', arg.name)
@@ -81,14 +72,14 @@ class TestFlattenedArgument(unittest.Tes
     def test_hydrate_value_argument(self):
         container = mock.Mock()
         container.argument_model.name = 'bag'
-        kwargs = {
-            'container': container,
-            'prop': 'ArgumentBar'
-        }
+        kwargs = {'container': container, 'prop': 'ArgumentBar'}
         kwargs['container'].py_name = 'bag'
         kwargs['container'].cli_type_name = 'list'
-        kwargs.update(FLATTEN_CONFIG['command-name']['original-argument']
-                                    ['flatten']['ArgumentBar'])
+        kwargs.update(
+            FLATTEN_CONFIG['command-name']['original-argument']['flatten'][
+                'ArgumentBar'
+            ]
+        )
         arg = FlattenedArgument(**kwargs)
 
         self.assertEqual('bar', arg.name)
@@ -102,14 +93,13 @@ class TestFlattenedArgument(unittest.Tes
     def test_hydrate_function_argument(self):
         container = mock.Mock()
         container.argument_model.name = 'bag'
-        kwargs = {
-            'container': container,
-            'prop': 'ArgumentBaz:SomeValue'
-        }
+        kwargs = {'container': container, 'prop': 'ArgumentBaz:SomeValue'}
         kwargs['container'].py_name = 'bag'
-        kwargs.update(FLATTEN_CONFIG['command-name']
-                                    ['another-original-argument']
-                                    ['flatten']['ArgumentBaz.SomeValue'])
+        kwargs.update(
+            FLATTEN_CONFIG['command-name']['another-original-argument'][
+                'flatten'
+            ]['ArgumentBaz.SomeValue']
+        )
         arg = FlattenedArgument(**kwargs)
 
         self.assertEqual('baz', arg.name)
@@ -128,9 +118,10 @@ class TestFlattenCommands(unittest.TestC
         flatten = FlattenArguments('my-service', FLATTEN_CONFIG)
         flatten.register(cli)
 
-        cli.register.assert_called_with(\
+        cli.register.assert_called_with(
             'building-argument-table.my-service.command-name',
-            flatten.flatten_args)
+            flatten.flatten_args,
+        )
 
     def test_flatten_modify_args(self):
         # Mock operation, arguments, and members for a service
@@ -152,7 +143,7 @@ class TestFlattenCommands(unittest.TestC
 
         argument_model1.members = {
             'ArgumentFoo': member_foo,
-            'ArgumentBar': member_bar
+            'ArgumentBar': member_bar,
         }
 
         argument_model2 = mock.Mock()
@@ -168,13 +159,9 @@ class TestFlattenCommands(unittest.TestC
         member_some_value.documenation = ''
         member_some_value.required_members = []
 
-        member_baz.members = {
-            'SomeValue': member_some_value
-        }
+        member_baz.members = {'SomeValue': member_some_value}
 
-        argument_model2.members = {
-            'ArgumentBaz': member_baz
-        }
+        argument_model2.members = {'ArgumentBaz': member_baz}
 
         cli_argument1 = mock.Mock(spec=CLIArgument)
         cli_argument1.argument_model = argument_model1
@@ -184,7 +171,7 @@ class TestFlattenCommands(unittest.TestC
 
         argument_table = {
             'original-argument': cli_argument1,
-            'another-original-argument': cli_argument2
+            'another-original-argument': cli_argument2,
         }
 
         # Create the flattened argument table
@@ -203,8 +190,9 @@ class TestFlattenCommands(unittest.TestC
         self.assertIsInstance(argument_table['foo'], FlattenedArgument)
         self.assertIsInstance(argument_table['bar'], FlattenedArgument)
         self.assertIsInstance(argument_table['baz'], FlattenedArgument)
-        self.assertNotIsInstance(argument_table['another-original-argument'],
-                                 FlattenedArgument)
+        self.assertNotIsInstance(
+            argument_table['another-original-argument'], FlattenedArgument
+        )
 
         # Make sure original required trait can be overridden
         self.assertEqual(False, argument_table['foo'].required)
diff -pruN 2.23.6-1/tests/unit/customizations/test_generatecliskeleton.py 2.31.35-1/tests/unit/customizations/test_generatecliskeleton.py
--- 2.23.6-1/tests/unit/customizations/test_generatecliskeleton.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_generatecliskeleton.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,10 +12,11 @@
 # language governing permissions and limitations under the License.
 from botocore.model import DenormalizedStructureBuilder
 
-from awscli.testutils import mock, unittest, capture_output
-from awscli.customizations.generatecliskeleton import \
-    GenerateCliSkeletonArgument
 from awscli.compat import StringIO
+from awscli.customizations.generatecliskeleton import (
+    GenerateCliSkeletonArgument,
+)
+from awscli.testutils import capture_output, mock, unittest
 
 
 class TestGenerateCliSkeleton(unittest.TestCase):
@@ -30,22 +31,26 @@ class TestGenerateCliSkeleton(unittest.T
                 'type': 'structure',
                 'members': {
                     'B': {'type': 'string'},
-                }
+                },
             }
         }
-        shape = DenormalizedStructureBuilder().with_members(
-            self.input_shape).build_model()
+        shape = (
+            DenormalizedStructureBuilder()
+            .with_members(self.input_shape)
+            .build_model()
+        )
         self.operation_model = mock.Mock(input_shape=shape)
         self.argument = GenerateCliSkeletonArgument(
-            self.session, self.operation_model)
+            self.session, self.operation_model
+        )
 
         # This is what the json should should look like after being
         # generated to standard output.
-        self.ref_json_output = \
-            '{\n    "A": {\n        "B": ""\n    }\n}\n'
+        self.ref_json_output = '{\n    "A": {\n        "B": ""\n    }\n}\n'
 
-    def assert_skeleton_equals(self, arg_value, expected_output,
-                               expected_rc=0, input_shape=None):
+    def assert_skeleton_equals(
+        self, arg_value, expected_output, expected_rc=0, input_shape=None
+    ):
         argument = self.argument
         if input_shape is not None:
             argument = self.create_argument(input_shape)
@@ -68,8 +73,9 @@ class TestGenerateCliSkeleton(unittest.T
     def test_register_argument_action(self):
         register_args = self.session.register.call_args_list
         self.assertEqual(register_args[0][0][0], 'calling-command.*')
-        self.assertEqual(register_args[0][0][1],
-                         self.argument.generate_skeleton)
+        self.assertEqual(
+            register_args[0][0][1], self.argument.generate_skeleton
+        )
 
     def test_no_override_required_args_when_output(self):
         argument_table = {}
@@ -103,8 +109,10 @@ class TestGenerateCliSkeleton(unittest.T
         parsed_args.generate_cli_skeleton = 'input'
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             rc = self.argument.generate_skeleton(
-                service_operation=self.service_operation, call_parameters=None,
-                parsed_args=parsed_args, parsed_globals=None
+                service_operation=self.service_operation,
+                call_parameters=None,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
             # Ensure the contents printed to standard output are correct.
             self.assertEqual(self.ref_json_output, mock_stdout.getvalue())
@@ -116,8 +124,10 @@ class TestGenerateCliSkeleton(unittest.T
         parsed_args.generate_cli_skeleton = None
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             rc = self.argument.generate_skeleton(
-                service_operation=self.service_operation, call_parameters=None,
-                parsed_args=parsed_args, parsed_globals=None
+                service_operation=self.service_operation,
+                call_parameters=None,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
             # Ensure nothing is printed to standard output
             self.assertEqual('', mock_stdout.getvalue())
@@ -129,11 +139,14 @@ class TestGenerateCliSkeleton(unittest.T
         parsed_args.generate_cli_skeleton = 'input'
         # Set the input shape to ``None``.
         self.argument = GenerateCliSkeletonArgument(
-            self.session, mock.Mock(input_shape=None))
+            self.session, mock.Mock(input_shape=None)
+        )
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             rc = self.argument.generate_skeleton(
-                service_operation=self.service_operation, call_parameters=None,
-                parsed_args=parsed_args, parsed_globals=None
+                service_operation=self.service_operation,
+                call_parameters=None,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
             # Ensure the contents printed to standard output are correct,
             # which should be an empty dictionary.
@@ -149,32 +162,34 @@ class TestGenerateCliSkeleton(unittest.T
                 'type': 'structure',
                 'members': {
                     'B': {'type': 'timestamp'},
-                }
+                },
             }
         }
-        shape = DenormalizedStructureBuilder().with_members(
-            input_shape).build_model()
+        shape = (
+            DenormalizedStructureBuilder()
+            .with_members(input_shape)
+            .build_model()
+        )
         operation_model = mock.Mock(input_shape=shape)
-        argument = GenerateCliSkeletonArgument(
-            self.session, operation_model)
+        argument = GenerateCliSkeletonArgument(self.session, operation_model)
         with mock.patch('sys.stdout', StringIO()) as mock_stdout:
             rc = argument.generate_skeleton(
-                call_parameters=None, parsed_args=parsed_args,
-                parsed_globals=None
+                call_parameters=None,
+                parsed_args=parsed_args,
+                parsed_globals=None,
             )
             self.assertEqual(
                 '{\n'
                 '    "A": {\n'
                 '        "B": "1970-01-01T00:00:00"\n'
                 '    }\n'
-                '}\n', mock_stdout.getvalue())
+                '}\n',
+                mock_stdout.getvalue(),
+            )
             self.assertEqual(rc, 0)
 
     def test_generate_yaml_input_skeleton(self):
-        expected = (
-            "A:\n"
-            "  B: ''\n"
-        )
+        expected = "A:\n" "  B: ''\n"
         self.assert_skeleton_equals('yaml-input', expected)
 
     def test_generate_yaml_input_with_bytes(self):
@@ -183,28 +198,20 @@ class TestGenerateCliSkeleton(unittest.T
                 'type': 'structure',
                 'members': {
                     'B': {'type': 'blob'},
-                }
+                },
             }
         }
-        expected = (
-            "A:\n"
-            "  B: !!binary ''\n"
-        )
+        expected = "A:\n" "  B: !!binary ''\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_with_comments(self):
-        input_shape = {
-            'A': {
-                'type': 'string',
-                'documentation': 'docstring'
-            }
-        }
-        expected = (
-            "A: ''  # docstring.\n"
-        )
+        input_shape = {'A': {'type': 'string', 'documentation': 'docstring'}}
+        expected = "A: ''  # docstring.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_with_nested_comments(self):
         input_shape = {
@@ -214,17 +221,17 @@ class TestGenerateCliSkeleton(unittest.T
                 'members': {
                     'B': {
                         'type': 'string',
-                        'documentation': 'nested docstring'
+                        'documentation': 'nested docstring',
                     }
-                }
+                },
             }
         }
         expected = (
-            "A:  # top-level docstring.\n"
-            "  B: ''  # nested docstring.\n"
+            "A:  # top-level docstring.\n" "  B: ''  # nested docstring.\n"
         )
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_with_required_member(self):
         input_shape = {
@@ -234,10 +241,10 @@ class TestGenerateCliSkeleton(unittest.T
                 'members': {
                     'B': {
                         'type': 'string',
-                        'documentation': 'nested docstring'
+                        'documentation': 'nested docstring',
                     }
                 },
-                'required': ['B']
+                'required': ['B'],
             }
         }
         expected = (
@@ -245,96 +252,74 @@ class TestGenerateCliSkeleton(unittest.T
             "  B: ''  # [REQUIRED] nested docstring.\n"
         )
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_ignores_newline(self):
         input_shape = {
-            'A': {
-                'type': 'string',
-                'documentation': 'one-line\ntwo-line'
-            }
+            'A': {'type': 'string', 'documentation': 'one-line\ntwo-line'}
         }
-        expected = (
-            "A: ''  # one-line two-line.\n"
-        )
+        expected = "A: ''  # one-line two-line.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_ignores_line_separator_char(self):
         input_shape = {
-            'A': {
-                'type': 'string',
-                'documentation': 'one-line\u2028two-line'
-            }
+            'A': {'type': 'string', 'documentation': 'one-line\u2028two-line'}
         }
-        expected = (
-            "A: ''  # one-line two-line.\n"
-        )
+        expected = "A: ''  # one-line two-line.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_removes_xml_tags(self):
-        input_shape = {
-            'A': {
-                'type': 'string',
-                'documentation': '<p>text</p>'
-            }
-        }
-        expected = (
-            "A: ''  # text.\n"
-        )
+        input_shape = {'A': {'type': 'string', 'documentation': '<p>text</p>'}}
+        expected = "A: ''  # text.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_can_handle_broken_xml(self):
-        input_shape = {
-            'A': {
-                'type': 'string',
-                'documentation': '<p>text'
-            }
-        }
-        expected = (
-            "A: ''  # <p>text.\n"
-        )
+        input_shape = {'A': {'type': 'string', 'documentation': '<p>text'}}
+        expected = "A: ''  # <p>text.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_uses_only_content_before_first_period(self):
         input_shape = {
             'A': {
                 'type': 'string',
-                'documentation': 'First sentence. Second Sentence'
+                'documentation': 'First sentence. Second Sentence',
             }
         }
-        expected = (
-            "A: ''  # First sentence.\n"
-        )
+        expected = "A: ''  # First sentence.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_uses_only_content_before_first_colon(self):
         input_shape = {
             'A': {
                 'type': 'string',
-                'documentation': 'First sentence: * Option 1 * Option 2'
+                'documentation': 'First sentence: * Option 1 * Option 2',
             }
         }
-        expected = (
-            "A: ''  # First sentence.\n"
-        )
+        expected = "A: ''  # First sentence.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
 
     def test_generate_yaml_input_includes_enums_in_comments(self):
         input_shape = {
             'A': {
                 'type': 'string',
                 'documentation': 'First sentence.',
-                'enum': ['ENUM1']
+                'enum': ['ENUM1'],
             }
         }
-        expected = (
-            "A: ENUM1  # First sentence. Valid values are: ENUM1.\n"
-        )
+        expected = "A: ENUM1  # First sentence. Valid values are: ENUM1.\n"
         self.assert_skeleton_equals(
-            'yaml-input', expected, input_shape=input_shape)
+            'yaml-input', expected, input_shape=input_shape
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/test_globalargs.py 2.31.35-1/tests/unit/customizations/test_globalargs.py
--- 2.23.6-1/tests/unit/customizations/test_globalargs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_globalargs.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,16 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.session import get_session
-from botocore.handlers import disable_signing
 import os
 
-from awscli.testutils import mock, unittest
+from botocore import UNSIGNED
+from botocore.session import get_session
+
 from awscli.customizations import globalargs
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.testutils import mock, unittest
 
 
-class FakeParsedArgs(object):
+class FakeParsedArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
@@ -27,8 +28,7 @@ class FakeParsedArgs(object):
         return None
 
 
-class FakeSession(object):
-
+class FakeSession:
     def __init__(self, session_vars=None, config_file_vars=None):
         if session_vars is None:
             session_vars = {}
@@ -37,8 +37,9 @@ class FakeSession(object):
             config_file_vars = {}
         self.config_file_vars = config_file_vars
 
-    def get_config_variable(self, name, methods=('env', 'config'),
-                            default=None):
+    def get_config_variable(
+        self, name, methods=('env', 'config'), default=None
+    ):
         value = None
         config_name, envvar_name = self.session_var_map[name]
         if methods is not None:
@@ -52,7 +53,6 @@ class FakeSession(object):
 
 
 class TestGlobalArgsCustomization(unittest.TestCase):
-
     def test_parse_query(self):
         parsed_args = FakeParsedArgs(query='foo.bar')
         globalargs.resolve_types(parsed_args)
@@ -88,13 +88,13 @@ class TestGlobalArgsCustomization(unitte
         environ = {}
         with mock.patch('os.environ', environ):
             parsed_args = FakeParsedArgs(
-                verify_ssl=True,
-                ca_bundle='/path/to/cli_bundle.pem')
+                verify_ssl=True, ca_bundle='/path/to/cli_bundle.pem'
+            )
             config_file_vars = {}
             session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}
             session = FakeSession(
-                session_vars=session_var_map,
-                config_file_vars=config_file_vars)
+                session_vars=session_var_map, config_file_vars=config_file_vars
+            )
             globalargs.resolve_verify_ssl(parsed_args, session)
             self.assertEqual(parsed_args.verify_ssl, '/path/to/cli_bundle.pem')
 
@@ -104,13 +104,13 @@ class TestGlobalArgsCustomization(unitte
         }
         with mock.patch('os.environ', environ):
             parsed_args = FakeParsedArgs(
-                verify_ssl=True,
-                ca_bundle='/path/to/cli_bundle.pem')
+                verify_ssl=True, ca_bundle='/path/to/cli_bundle.pem'
+            )
             config_file_vars = {}
             session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}
             session = FakeSession(
-                session_vars=session_var_map,
-                config_file_vars=config_file_vars)
+                session_vars=session_var_map, config_file_vars=config_file_vars
+            )
             globalargs.resolve_verify_ssl(parsed_args, session)
             self.assertEqual(parsed_args.verify_ssl, '/path/to/cli_bundle.pem')
 
@@ -120,24 +120,26 @@ class TestGlobalArgsCustomization(unitte
         }
         with mock.patch('os.environ', environ):
             parsed_args = FakeParsedArgs(
-                verify_ssl=False,
-                ca_bundle='/path/to/cli_bundle.pem')
+                verify_ssl=False, ca_bundle='/path/to/cli_bundle.pem'
+            )
             config_file_vars = {}
             session_var_map = {'ca_bundle': ('ca_bundle', 'AWS_CA_BUNDLE')}
             session = FakeSession(
-                session_vars=session_var_map,
-                config_file_vars=config_file_vars)
+                session_vars=session_var_map, config_file_vars=config_file_vars
+            )
             globalargs.resolve_verify_ssl(parsed_args, session)
             self.assertFalse(parsed_args.verify_ssl)
 
     def test_no_sign_request_if_option_specified(self):
         args = FakeParsedArgs(sign_request=False)
         session = mock.Mock()
-
-        globalargs.no_sign_request(args, session)
-        emitter = session.get_component('event_emitter')
-        emitter.register_first.assert_called_with(
-            'choose-signer', disable_signing, unique_id='disable-signing')
+        with mock.patch(
+            'awscli.customizations.globalargs._update_default_client_config'
+        ) as mock_update:
+            globalargs.no_sign_request(args, session)
+            mock_update.assert_called_once_with(
+                session, 'signature_version', UNSIGNED
+            )
 
     def test_request_signed_by_default(self):
         args = FakeParsedArgs(sign_request=True)
@@ -155,16 +157,16 @@ class TestGlobalArgsCustomization(unitte
     def test_valid_endpoint_url(self):
         parsed_args = FakeParsedArgs(endpoint_url='http://custom-endpoint.com')
         globalargs.resolve_types(parsed_args)
-        self.assertEqual(parsed_args.endpoint_url,
-                         'http://custom-endpoint.com')
+        self.assertEqual(
+            parsed_args.endpoint_url, 'http://custom-endpoint.com'
+        )
 
     def test_cli_read_timeout(self):
         parsed_args = FakeParsedArgs(read_timeout='60')
         session = get_session()
         globalargs.resolve_cli_read_timeout(parsed_args, session)
         self.assertEqual(parsed_args.read_timeout, 60)
-        self.assertEqual(
-            session.get_default_client_config().read_timeout, 60)
+        self.assertEqual(session.get_default_client_config().read_timeout, 60)
 
     def test_cli_connect_timeout(self):
         parsed_args = FakeParsedArgs(connect_timeout='60')
@@ -172,7 +174,8 @@ class TestGlobalArgsCustomization(unitte
         globalargs.resolve_cli_connect_timeout(parsed_args, session)
         self.assertEqual(parsed_args.connect_timeout, 60)
         self.assertEqual(
-            session.get_default_client_config().connect_timeout, 60)
+            session.get_default_client_config().connect_timeout, 60
+        )
 
     def test_cli_read_timeout_for_blocking(self):
         parsed_args = FakeParsedArgs(read_timeout='0')
@@ -180,7 +183,8 @@ class TestGlobalArgsCustomization(unitte
         globalargs.resolve_cli_read_timeout(parsed_args, session)
         self.assertEqual(parsed_args.read_timeout, None)
         self.assertEqual(
-            session.get_default_client_config().read_timeout, None)
+            session.get_default_client_config().read_timeout, None
+        )
 
     def test_cli_connect_timeout_for_blocking(self):
         parsed_args = FakeParsedArgs(connect_timeout='0')
@@ -188,4 +192,5 @@ class TestGlobalArgsCustomization(unitte
         globalargs.resolve_cli_connect_timeout(parsed_args, session)
         self.assertEqual(parsed_args.connect_timeout, None)
         self.assertEqual(
-            session.get_default_client_config().connect_timeout, None)
+            session.get_default_client_config().connect_timeout, None
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/test_opsworks.py 2.31.35-1/tests/unit/customizations/test_opsworks.py
--- 2.23.6-1/tests/unit/customizations/test_opsworks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_opsworks.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,1229 +0,0 @@
-# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"). You
-# may not use this file except in compliance with the License. A copy of
-# the License is located at
-#
-#     http://aws.amazon.com/apache2.0/
-#
-# or in the "license" file accompanying this file. This file is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-# ANY KIND, either express or implied. See the License for the specific
-# language governing permissions and limitations under the License.
-
-import argparse
-import datetime
-import json
-
-from botocore.exceptions import ClientError
-
-from awscli.customizations import opsworks
-from awscli.testutils import mock, unittest
-from awscli.customizations.exceptions import ParamValidationError
-
-
-class TestOpsWorksBase(unittest.TestCase):
-    def setUp(self):
-        self.mock_session = mock.Mock()
-        self.register = opsworks.OpsWorksRegister(self.mock_session)
-
-        # stop the clock while testing
-        self.datetime_patcher = mock.patch.object(
-            opsworks.datetime, "datetime",
-            mock.Mock(wraps=datetime.datetime)
-        )
-        mocked_datetime = self.datetime_patcher.start()
-        mocked_datetime.utcnow.return_value = datetime.datetime(
-            2013, 8, 9, 23, 42)
-
-    def tearDown(self):
-        self.datetime_patcher.stop()
-
-
-class TestOpsWorksRegister(TestOpsWorksBase):
-    """Tests for functionality independent of the infrastructure class."""
-
-    def _build_args(self, **kwargs):
-        return argparse.Namespace(**dict({
-            "hostname": None,
-            "private_ip": None,
-            "public_ip": None,
-            "local": False,
-            "username": None,
-            "private_key": None,
-            "ssh": None,
-            "target": None,
-            "use_instance_profile": False,
-        }, **kwargs))
-
-    def test_create_clients_simple(self):
-        """Should create clients without additional parameters by default."""
-
-        self.register._create_clients(
-            self._build_args(), argparse.Namespace())
-        self.mock_session.create_client.assert_has_calls([
-            mock.call("iam"),
-            mock.call("opsworks"),
-        ])
-
-    def test_create_clients_with_region(self):
-        """Should pass region names to OpsWorks, but not to IAM clients."""
-
-        self.register._create_clients(
-            self._build_args(), argparse.Namespace(region="mars-east-1"))
-        self.mock_session.create_client.assert_has_calls([
-            mock.call("iam"),
-            mock.call("opsworks", region_name="mars-east-1"),
-        ])
-
-    def test_create_clients_with_opsworks_endpoint_url(self):
-        """Should pass endpoints to OpsWorks, but not to IAM clients."""
-
-        self.register._create_clients(
-            self._build_args(), argparse.Namespace(endpoint_url="http://xxx/"))
-        self.mock_session.create_client.assert_has_calls([
-            mock.call("iam"),
-            mock.call("opsworks", endpoint_url="http://xxx/"),
-        ])
-
-    def test_create_clients_with_verify_ssl(self):
-        """Should pass verify-ssl to OpsWorks, but not to IAM clients."""
-
-        self.register._create_clients(
-            self._build_args(), argparse.Namespace(verify_ssl=False))
-        self.mock_session.create_client.assert_has_calls([
-            mock.call("iam"),
-            mock.call("opsworks", verify=False),
-        ])
-
-        self.register._create_clients(
-            self._build_args(), argparse.Namespace(verify_ssl="/path/to/ca"))
-        self.mock_session.create_client.assert_has_calls([
-            mock.call("iam"),
-            mock.call("opsworks", verify="/path/to/ca"),
-        ])
-
-    @mock.patch.object(opsworks, "platform")
-    def test_prevalidate_arguments_invalid_hostnames(self, mock_platform):
-        """Should only accept valid hostnames."""
-
-        mock_platform.system.return_value = "Linux"
-        self.register.prevalidate_arguments(
-            self._build_args(
-                infrastructure_class="on-premises",
-                hostname=None,
-                local=True))
-        self.register.prevalidate_arguments(
-            self._build_args(
-                infrastructure_class="on-premises",
-                hostname="good-hostname",
-                local=True))
-        self.register.prevalidate_arguments(
-            self._build_args(
-                infrastructure_class="on-premises",
-                hostname="AlsoAGoodHostname456", local=True))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    infrastructure_class="on-premises",
-                    hostname="-bad-hostname",
-                    local=True))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    infrastructure_class="on-premises",
-                    hostname="f.q.d.n",
-                    local=True))
-
-    @mock.patch.object(opsworks, "platform")
-    def test_prevalidate_arguments_local_vs_remote(self, mock_platform):
-        """Shouldn't allow local and remote mode at the same time."""
-
-        mock_platform.system.return_value = "Linux"
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(self._build_args(
-                infrastructure_class="on-premises",
-                hostname=None, target=None, local=False))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(self._build_args(
-                infrastructure_class="on-premises",
-                hostname=None, target="HOSTNAME", local=True))
-        self.register.prevalidate_arguments(self._build_args(
-            infrastructure_class="on-premises",
-            hostname=None, target="HOSTNAME", local=False))
-        self.register.prevalidate_arguments(self._build_args(
-            infrastructure_class="on-premises",
-            hostname=None, target=None, local=True))
-
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(self._build_args(
-                infrastructure_class="ec2",
-                hostname=None, target=None, local=False))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(self._build_args(
-                infrastructure_class="ec2",
-                hostname=None, target="HOSTNAME", local=True))
-        self.register.prevalidate_arguments(self._build_args(
-            infrastructure_class="ec2",
-            hostname=None, target="HOSTNAME", local=False))
-        self.register.prevalidate_arguments(self._build_args(
-            infrastructure_class="ec2",
-            hostname=None, target=None, local=True))
-
-    @mock.patch.object(opsworks, "platform")
-    def test_prevalidate_arguments_local_linux_only(self, mock_platform):
-        """Shouldn't allow local and remote mode at the same time."""
-
-        mock_platform.system.return_value = "Linux"
-        self.register.prevalidate_arguments(self._build_args(
-            infrastructure_class="on-premises", target=None, local=True))
-        with self.assertRaises(ParamValidationError):
-            mock_platform.system.return_value = "Windows"
-            self.register.prevalidate_arguments(self._build_args(
-                infrastructure_class="on-premises", target=None, local=True))
-
-    def test_prevalidate_arguments_ssh_override(self):
-        """Should not allow --override-ssh and other SSH options."""
-
-        self.register.prevalidate_arguments(self._build_args(
-            ssh="telnet", infrastructure_class="ec2", target="i-12345678"
-        ))
-        self.register.prevalidate_arguments(
-            self._build_args(
-                username="root", private_key="id_rsa",
-                infrastructure_class="ec2", target="1.2.3.4"))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    ssh="telnet", username="root", infrastructure_class="ec2",
-                    target="1.2.3.4"))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    ssh="telnet", private_key="id_rsa",
-                    infrastructure_class="ec2", target="1.2.3.4"))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    ssh="telnet", username="root", private_key="id_rsa",
-                    infrastructure_class="ec2", target="1.2.3.4"))
-
-    def test_create_iam_entities_simple(self):
-        """Basic IAM side-effects.
-
-        Should create a group with a user, and an access key."""
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register._stack = dict(
-                StackId="STACKID", Name="STACKNAME", Arn="ARN")
-            self.register._name_for_iam = "HOSTNAME"
-
-            self.register.create_iam_entities(self._build_args())
-            policy = "arn:aws:iam::aws:policy/AWSOpsWorksInstanceRegistration"
-
-            mock_iam.create_group.assert_any_call(
-                Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-HOSTNAME")
-            mock_iam.add_user_to_group.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME",
-                GroupName="OpsWorks-STACKID")
-            mock_iam.attach_user_policy.assert_any_call(
-                PolicyArn=policy,
-                UserName="OpsWorks-STACKNAME-HOSTNAME")
-            mock_iam.create_access_key.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME")
-
-    def test_create_iam_entities_group_exists(self):
-        """Should reuse an existing group."""
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register._stack = dict(
-                StackId="STACKID", Name="STACKNAME", Arn="ARN")
-            self.register._name_for_iam = "HOSTNAME"
-            mock_iam.create_group.side_effect = ClientError(
-                {'Error': {'Code': 'EntityAlreadyExists', 'Message': ''}},
-                'CreateGroup')
-
-            self.register.create_iam_entities(self._build_args())
-
-            mock_iam.create_group.assert_any_call(
-                Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-HOSTNAME")
-            mock_iam.add_user_to_group.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME",
-                GroupName="OpsWorks-STACKID")
-            mock_iam.create_access_key.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME")
-
-    def test_create_iam_entities_user_exists(self):
-        """Should use an alternate username if the preferred one is taken."""
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register._stack = dict(
-                StackId="STACKID", Name="STACKNAME", Arn="ARN")
-            self.register._name_for_iam = "HOSTNAME"
-            mock_iam.create_user = mock.Mock(
-                side_effect=[
-                    ClientError(
-                        {'Error': {'Code': 'EntityAlreadyExists', 'Message': ''}},
-                        'CreateUser'
-                    ),
-                    ClientError(
-                        {'Error': {'Code': 'EntityAlreadyExists', 'Message': ''}},
-                        'CreateUser'
-                    ),
-                    None
-                ])
-
-            self.register.create_iam_entities(self._build_args())
-
-            mock_iam.create_group.assert_any_call(
-                Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-HOSTNAME")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/",
-                UserName="OpsWorks-STACKNAME-HOSTNAME+1")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/",
-                UserName="OpsWorks-STACKNAME-HOSTNAME+2")
-            mock_iam.add_user_to_group.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME+2",
-                GroupName="OpsWorks-STACKID")
-            mock_iam.create_access_key.assert_any_call(
-                UserName="OpsWorks-STACKNAME-HOSTNAME+2")
-
-    def test_create_iam_entities_attach_user_policy_unauthorized(self):
-        """Should call PutUserPolicy when AttachUserPolicy is unauthorized."""
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register._stack = dict(
-                StackId="STACKID", Name="STACKNAME", Arn="ARN")
-            self.register._name_for_iam = "HOSTNAME"
-            policy = "arn:aws:iam::aws:policy/AWSOpsWorksInstanceRegistration"
-
-            mock_iam.attach_user_policy.side_effect = ClientError(
-                {'Error': {'Code': 'AccessDenied', 'Message': ''}},
-                'AttachUserPolicy')
-
-            self.register.create_iam_entities(self._build_args())
-
-            mock_iam.attach_user_policy.assert_any_call(
-                PolicyArn=policy,
-                UserName="OpsWorks-STACKNAME-HOSTNAME")
-            mock_iam.put_user_policy.assert_any_call(
-                PolicyName="OpsWorks-Instance",
-                PolicyDocument=mock.ANY,
-                UserName="OpsWorks-STACKNAME-HOSTNAME")
-
-    def test_create_iam_entities_long_names(self):
-        """Should shorten IAM entity names to a valid size."""
-
-        long_hostname = "hostname1.very-long-domain-name.within.company.tld"
-        shortened_username = \
-            "OpsWorks-long-stack-...ork-as-well-hostname1.v...company.tld"
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register._stack = dict(
-                StackId="STACKID", Name="long stack names should work as well",
-                Arn="ARN")
-            self.register._name_for_iam = long_hostname
-
-            self.register.create_iam_entities(self._build_args())
-
-            mock_iam.create_group.assert_any_call(
-                Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-            mock_iam.create_user.assert_any_call(
-                Path="/AWS/OpsWorks/",
-                UserName=shortened_username)
-            mock_iam.add_user_to_group.assert_any_call(
-                UserName=shortened_username,
-                GroupName="OpsWorks-STACKID")
-            mock_iam.create_access_key.assert_any_call(
-                UserName=shortened_username)
-
-    def test_create_no_iam_entities(self):
-        """Should not create IAM entities when using instance profiles."""
-
-        with mock.patch.object(self.register, "iam", create=True) as mock_iam:
-            self.register.create_iam_entities(self._build_args(
-                use_instance_profile=True
-            ))
-
-            self.assertFalse(mock_iam.create_group.called)
-            self.assertFalse(mock_iam.create_user.called)
-            self.assertFalse(mock_iam.add_user_to_group.called)
-            self.assertFalse(mock_iam.create_access_key.called)
-
-    def test_validate_unique_hostname(self):
-        """Should detect duplicate host names in the stack early."""
-
-        self.register._stack = {"StackId": "STACKID"}
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_opsworks.describe_instances.return_value = {
-                "Instances": [dict(Hostname="duplicated-hostname")]
-            }
-            self.register.validate_arguments(
-                mock.Mock(hostname="good-hostname"))
-            with self.assertRaises(ValueError):
-                self.register.validate_arguments(
-                    mock.Mock(hostname="duplicated-hostname"))
-            with self.assertRaises(ValueError):
-                self.register.validate_arguments(
-                    mock.Mock(hostname="DUPliCATED-HOSTNAME"))
-
-    @mock.patch.object(opsworks, "tempfile")
-    @mock.patch.object(opsworks, "platform")
-    @mock.patch.object(opsworks, "subprocess")
-    @mock.patch.object(opsworks, "os")
-    def test_ssh_windows(
-            self, mock_os, mock_subprocess, mock_platform, mock_tempfile):
-        """Should use plink on Windows correctly."""
-
-        mock_platform.system.return_value = "Windows"
-        self.register._use_address = "ip"
-        mock_file = mock.Mock()
-        mock_tempfile.NamedTemporaryFile.return_value = mock_file
-        mock_file.name = "tmpfilename"
-
-        self.register.ssh(self._build_args(), "script")
-        mock_subprocess.check_call.assert_called_with(
-            'plink "ip" -m "tmpfilename"', shell=True)
-
-        self.register.ssh(self._build_args(username="foo"), "script")
-        mock_subprocess.check_call.assert_called_with(
-            'plink -l "foo" "ip" -m "tmpfilename"', shell=True)
-
-        self.register.ssh(self._build_args(private_key="bar"), "script")
-        mock_subprocess.check_call.assert_called_with(
-            'plink -i "bar" "ip" -m "tmpfilename"', shell=True)
-
-        self.register.ssh(
-            self._build_args(username="foo", private_key="bar"),
-            "script")
-        mock_subprocess.check_call.assert_called_with(
-            'plink -l "foo" -i "bar" "ip" -m "tmpfilename"', shell=True)
-
-        self.register.ssh(self._build_args(ssh="plink -agent ip -m"), "script")
-        mock_subprocess.check_call.assert_called_with(
-            'plink -agent ip -m "tmpfilename"', shell=True)
-
-    @mock.patch.object(opsworks, "platform")
-    @mock.patch.object(opsworks, "subprocess")
-    def test_ssh_nix(self, mock_subprocess, mock_platform):
-        """Should use ssh on non-windows correctly."""
-
-        mock_platform.system.return_value = "Linux"
-        self.register._use_address = "ip"
-
-        self.register.ssh(self._build_args(), "script")
-        mock_subprocess.check_call.assert_called_with(
-            ["ssh", "-tt", "ip", "/bin/sh -c script"])
-
-        self.register.ssh(self._build_args(username="foo"), "script")
-        mock_subprocess.check_call.assert_called_with(
-            ["ssh", "-tt", "-l", "foo", "ip", "/bin/sh -c script"])
-
-        self.register.ssh(self._build_args(private_key="bar"), "script")
-        mock_subprocess.check_call.assert_called_with(
-            ["ssh", "-tt", "-i", "bar", "ip", "/bin/sh -c script"])
-
-        self.register.ssh(self._build_args(username="foo", private_key="bar"),
-                          "script")
-        mock_subprocess.check_call.assert_called_with(
-            ["ssh", "-tt", "-l", "foo", "-i", "bar", "ip", "/bin/sh -c script"]
-        )
-        self.register.ssh(self._build_args(ssh="ssh -k -l foo 1.2.3.4"),
-                          "script")
-        mock_subprocess.check_call.assert_called_with(
-            ["ssh", "-k", "-l", "foo", "1.2.3.4", "/bin/sh -c script"])
-
-    def test_iam_policy_document(self):
-        self.assertEqual(
-            json.loads(self.register._iam_policy_document("arn::foo")),
-            {
-                "Statement": [
-                    {
-                        "Action": "opsworks:RegisterInstance",
-                        "Effect": "Allow",
-                        "Resource": "arn::foo",
-                    }
-                ],
-                "Version": "2012-10-17"
-            }
-        )
-        self.assertEqual(
-            json.loads(self.register._iam_policy_document(
-                "arn::foo", datetime.timedelta(minutes=5)
-            )), {
-                "Statement": [{
-                    "Action": "opsworks:RegisterInstance",
-                    "Effect": "Allow",
-                    "Resource": "arn::foo",
-                    "Condition": {
-                        "DateLessThan": {
-                            "aws:CurrentTime": "2013-08-09T23:47:00Z"
-                        }
-                    }
-                }],
-                "Version": "2012-10-17"
-            }
-        )
-
-    @mock.patch.object(opsworks, "platform")
-    @mock.patch.object(opsworks, "subprocess")
-    def test_setup_target_machine_remote_nix(
-            self, mock_subprocess, mock_platform):
-        """Should setup a remote machine from a non-Windows host correctly."""
-
-        mock_platform.system.return_value = "Linux"
-        args = self._build_args(
-            infrastructure_class="ec2", hostname="HOSTNAME", local=False
-        )
-        self.register._stack = {"StackId": "STACKID"}
-        self.register._prov_params = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {"assets_download_bucket": "xxx"}
-        }
-        self.register.access_key = {
-            "AccessKeyId": "AKIAXXX",
-            "SecretAccessKey": "foobarbaz"
-        }
-        self.register._use_address = "ip"
-        self.register._use_hostname = "HOSTNAME"
-
-        self.register.setup_target_machine(args)
-
-        cmd = mock_subprocess.check_call.call_args[0][0]
-        self.assertEqual(cmd[0], "ssh")
-        self.assertEqual(cmd[1], "-tt")
-        self.assertEqual(cmd[2], "ip")
-        self.assertRegex(cmd[3], r"/bin/sh -c ")
-
-    @mock.patch.object(opsworks, "platform")
-    @mock.patch.object(opsworks, "subprocess")
-    def test_setup_target_machine_remote_windows(
-            self, mock_subprocess, mock_platform):
-        """Should setup a remote machine from a Windows host correctly."""
-
-        mock_platform.system.return_value = "Windows"
-        args = self._build_args(
-            infrastructure_class="ec2", hostname="HOSTNAME", local=False
-        )
-        self.register._stack = {"StackId": "STACKID"}
-        self.register._prov_params = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {"assets_download_bucket": "xxx"}
-        }
-        self.register.access_key = {
-            "AccessKeyId": "AKIAXXX",
-            "SecretAccessKey": "foobarbaz"
-        }
-        self.register._use_address = "ip"
-        self.register._use_hostname = "HOSTNAME"
-
-        self.register.setup_target_machine(args)
-
-        cmd = mock_subprocess.check_call.call_args[0][0]
-        self.assertRegex(cmd, r'^plink ".*" -m ".*"$')
-
-    @mock.patch.object(opsworks, "subprocess")
-    def test_setup_target_machine_local(self, mock_subprocess):
-        """Should setup the local machine correctly."""
-
-        args = self._build_args(
-            infrastructure_class="ec2", local=True
-        )
-        self.register._stack = {"StackId": "STACKID"}
-        self.register._prov_params = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {"assets_download_bucket": "xxx"}
-        }
-        self.register.access_key = {
-            "AccessKeyId": "AKIAXXX",
-            "SecretAccessKey": "foobarbaz"
-        }
-        self.register._use_hostname = "HOSTNAME"
-
-        self.register.setup_target_machine(args)
-
-        cmd = mock_subprocess.check_call.call_args[0][0]
-        self.assertEqual(cmd[0], "/bin/sh")
-        self.assertEqual(cmd[1], "-c")
-
-    def test_pre_config_document_simple(self):
-        """Should produce a simple preconfiguration file."""
-
-        self.register._stack = {"StackId": "Foo"}
-        self.register._prov_params = {
-            "Parameters": {"foo": "Bar", "bar": "Baz"}}
-        self.register.access_key = None
-        self.register._use_hostname = None
-
-        pre_config = self.register._pre_config_document(
-            mock.Mock(private_ip=None, public_ip=None)
-        )
-
-        self.assertEqual(
-            pre_config, {
-                "bar": "Baz",
-                "foo": "Bar",
-                "import": False,
-                "stack_id": "Foo",
-            }
-        )
-
-    def test_pre_config_document_full(self):
-        """Should produce a complex preconfiguration file."""
-
-        self.register._stack = {"StackId": "Foo"}
-        self.register._prov_params = {
-            "Parameters": {"foo": "Bar", "bar": "Baz"}}
-        self.register.access_key = {
-            "AccessKeyId": "Bar", "SecretAccessKey": "Baz"}
-        self.register._use_hostname = "HOSTNAME"
-
-        pre_config = self.register._pre_config_document(
-            mock.Mock(private_ip="PRIVATEIP", public_ip="PUBLICIP"),
-        )
-
-        self.assertEqual(
-            pre_config, {
-                "access_key_id": "Bar",
-                "bar": "Baz",
-                "foo": "Bar",
-                "hostname": "HOSTNAME",
-                "import": False,
-                "private_ip": "PRIVATEIP",
-                "public_ip": "PUBLICIP",
-                "secret_access_key": "Baz",
-                "stack_id": "Foo",
-            }
-        )
-
-
-class TestOpsWorksRegisterEc2(TestOpsWorksBase):
-    """Tests for functionality specific to EC2 instances."""
-
-    def _build_args(self, **kwargs):
-        return argparse.Namespace(**dict({
-            "hostname": None,
-            "infrastructure_class": "ec2",
-            "private_ip": None,
-            "public_ip": None,
-            "local": False,
-            "username": None,
-            "private_key": None,
-            "ssh": None,
-            "target": None,
-            "use_instance_profile": None,
-        }, **kwargs))
-
-    @mock.patch.object(opsworks, "subprocess")
-    def test_run_main_remote(self, mock_subprocess):
-        """Flow test w/ all the expected side-effects for a remote instance."""
-
-        args = self._build_args(stack_id="STACKID", target="i-12345678",
-                                local=False)
-        parsed_globals = argparse.Namespace()
-        mock_ec2 = mock.Mock()
-        mock_iam = mock.Mock()
-        mock_opsworks = mock.Mock()
-        self.mock_session.create_client.side_effect = lambda name, **_: \
-            dict(ec2=mock_ec2, iam=mock_iam, opsworks=mock_opsworks)[name]
-
-        mock_opsworks.describe_stacks.return_value = {
-            "Stacks": [{
-                "Arn": "ARN",
-                "Name": "STACKNAME",
-                "StackId": "STACKID",
-                "Region": "mars-east-1",
-            }]
-        }
-        mock_opsworks.describe_stack_provisioning_parameters.return_value = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {
-                "assets_download_bucket": "xxx"
-            }
-        }
-        mock_opsworks.describe_instances.return_value = {
-            "Instances": []
-        }
-        mock_ec2.describe_instances.return_value = {
-            "Reservations": [{
-                "Instances": [{
-                    "PublicIpAddress": "192.0.2.42"
-                }]
-            }]
-        }
-        mock_iam.create_access_key.return_value = {
-            "AccessKey":
-                {"AccessKeyId": "AKIAXXX", "SecretAccessKey": "foobarbaz"}
-        }
-
-        self.register._run_main(args, parsed_globals)
-
-        mock_iam.create_user.assert_called_with(
-            Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-i-12345678")
-        mock_iam.create_group.assert_called_with(
-            Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-        mock_iam.add_user_to_group.assert_called_with(
-            UserName="OpsWorks-STACKNAME-i-12345678",
-            GroupName="OpsWorks-STACKID")
-        mock_iam.create_access_key.assert_called_with(
-            UserName="OpsWorks-STACKNAME-i-12345678")
-        self.assertTrue(mock_subprocess.check_call.calls)
-
-    @mock.patch.object(opsworks, "urlopen")
-    @mock.patch.object(opsworks, "subprocess")
-    @mock.patch.object(opsworks, "socket")
-    @mock.patch.object(opsworks, "platform")
-    def test_run_main_local(
-            self, mock_platform, mock_socket, mock_subprocess, mock_urlopen):
-        """Flow test w/ all the expected side-effects for a local instance."""
-
-        args = self._build_args(stack_id="STACKID", target=None,
-                                local=True)
-        parsed_globals = argparse.Namespace()
-        mock_ec2 = mock.Mock()
-        mock_iam = mock.Mock()
-        mock_opsworks = mock.Mock()
-        mock_platform.system.return_value = "Linux"
-        self.mock_session.create_client.side_effect = lambda name, **_: \
-            dict(ec2=mock_ec2, iam=mock_iam, opsworks=mock_opsworks)[name]
-
-        mock_opsworks.describe_stacks.return_value = {
-            "Stacks": [{
-                "Arn": "ARN",
-                "Name": "STACKNAME",
-                "StackId": "STACKID",
-                "Region": "mars-east-1",
-            }]
-        }
-        mock_opsworks.describe_stack_provisioning_parameters.return_value = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {
-                "assets_download_bucket": "xxx"
-            }
-        }
-        mock_opsworks.describe_instances.return_value = {
-            "Instances": []
-        }
-        mock_iam.create_access_key.return_value = {
-            "AccessKey":
-                {"AccessKeyId": "AKIAXXX", "SecretAccessKey": "foobarbaz"}
-        }
-        mock_socket.gethostname.return_value = "HOSTNAME"
-        mock_urlopen.return_value.read.return_value = \
-            '{"region": "mars-east-1"}'
-
-        self.register._run_main(args, parsed_globals)
-
-        mock_iam.create_user.assert_called_with(
-            Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-HOSTNAME")
-        mock_iam.create_group.assert_called_with(
-            Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-        mock_iam.add_user_to_group.assert_called_with(
-            UserName="OpsWorks-STACKNAME-HOSTNAME",
-            GroupName="OpsWorks-STACKID")
-        mock_iam.create_access_key.assert_called_with(
-            UserName="OpsWorks-STACKNAME-HOSTNAME")
-        self.assertTrue(mock_subprocess.check_call.calls)
-
-    def test_prevalidate_arguments_no_ips_for_ec2(self):
-        """Shouldn't allow overriding IP addresses for EC2."""
-
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    target="target", private_ip="private-ip"))
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(target="target", public_ip="public-ip"))
-
-    @mock.patch.object(opsworks, "urlopen")
-    def test_validate_same_region(self, mock_urlopen):
-        """Should ensure that the local instance is in the correct region."""
-
-        self.register._stack = {"Region": "mars-east-1"}
-
-        mock_urlopen.return_value.read.return_value = \
-            '{"region": "mars-east-1"}'
-        self.register.validate_arguments(
-            self._build_args(hostname=None, local=True))
-
-        with self.assertRaises(ValueError):
-            mock_urlopen.return_value.read.return_value = \
-                '{"region": "mars-west-1"}'
-            self.register.validate_arguments(
-                self._build_args(hostname=None, local=True))
-
-    @mock.patch.object(opsworks, "urlopen")
-    def test_validate_same_region_bytes(self, mock_urlopen):
-        """Check that register can handle bytes returned by urlopen.read"""
-
-        self.register._stack = {"Region": "mars-east-1"}
-
-        mock_urlopen.return_value.read.return_value = \
-            b'{"region": "mars-east-1"}'
-        try:
-            self.register.validate_arguments(
-                self._build_args(hostname=None, local=True))
-        except Exception as e:
-            self.fail(
-                'Register should work with bytes response from urlopen.read. '
-                'Got exception: %s' % e)
-
-    def test_retrieve_stack_ec2(self):
-        """Should retrieve an EC2 stack and the matching instance."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678",
-                    }]
-                }, {
-                    "Instances": [{
-                        "InstanceId": "i-9abcdef0",
-                        "VpcId": "vpc-123456"
-                    }]
-                }
-                ]
-            }
-            self.register.retrieve_stack(self._build_args(
-                stack_id="STACKID", target="i-12345678"
-            ))
-            mock_ec2.describe_instances.assert_called_with(
-                InstanceIds=["i-12345678"], Filters=[]
-            )
-            self.assertEqual(
-                self.register._ec2_instance["InstanceId"],
-                "i-12345678")
-
-    def test_retrieve_stack_vpc(self):
-        """Should retrieve an VPC stack and the matching instance."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                    "VpcId": "vpc-123456",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678",
-                    }]
-                }]
-            }
-            self.register.retrieve_stack(self._build_args(
-                stack_id="STACKID", target="i-12345678"
-            ))
-            mock_ec2.describe_instances.assert_called_with(
-                InstanceIds=["i-12345678"],
-                Filters=[{
-                    "Name": "vpc-id",
-                    "Values": ["vpc-123456"]
-                }])
-            self.assertEqual(
-                self.register._ec2_instance["InstanceId"],
-                "i-12345678")
-
-    def test_retrieve_stack_ec2_instance_id(self):
-        """Should find an EC2 instance by instance ID."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678910",
-                    }]
-                }]
-            }
-            self.register.retrieve_stack(self._build_args(
-                stack_id="STACKID", target="i-12345678910"
-            ))
-            mock_ec2.describe_instances.assert_called_with(
-                InstanceIds=["i-12345678910"], Filters=[]
-            )
-            self.assertEqual(
-                self.register._ec2_instance["InstanceId"],
-                "i-12345678910")
-
-    def test_retrieve_stack_target_ip_address(self):
-        """Should find an EC2 instance by IP address."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678",
-                        "PrivateIpAddress": "1.2.3.4"
-                    }, {
-                        "InstanceId": "i-9abcdef0",
-                        "PrivateIpAddress": "1.2.3.5"
-                    }]
-                }]
-            }
-            self.register.retrieve_stack(self._build_args(
-                stack_id="STACKID", target="1.2.3.4"
-            ))
-            mock_ec2.describe_instances.assert_called_with(Filters=[])
-            self.assertEqual(
-                self.register._ec2_instance["InstanceId"],
-                "i-12345678")
-
-    def test_retrieve_stack_target_name(self):
-        """Should find an EC2 instance by name."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678",
-                        "PrivateIpAddress": "1.2.3.4"
-                    }]
-                }]
-            }
-            self.register.retrieve_stack(self._build_args(
-                stack_id="STACKID", target="db-master"
-            ))
-            mock_ec2.describe_instances.assert_called_with(
-                Filters=[{"Name": "tag:Name", "Values": ["db-master"]}]
-            )
-            self.assertEqual(
-                self.register._ec2_instance["InstanceId"],
-                "i-12345678")
-
-    def test_retrieve_stack_target_none(self):
-        """Should complain if it cannot find matching instances."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": []
-            }
-            with self.assertRaises(ValueError):
-                self.register.retrieve_stack(
-                    self._build_args(
-                        stack_id="STACKID", target="some-instance"))
-
-    def test_retrieve_stack_target_too_many(self):
-        """Should complain if it finds too many matching instances."""
-
-        with mock.patch.object(
-                self.register, "opsworks", create=True) as mock_opsworks:
-            mock_ec2 = mock.Mock()
-            self.mock_session.create_client.return_value = mock_ec2
-            mock_opsworks.describe_stacks.return_value = {
-                "Stacks": [{
-                    "StackId": "STACKID",
-                    "Region": "mars-east-1",
-                }]
-            }
-            mock_ec2.describe_instances.return_value = {
-                "Reservations": [{
-                    "Instances": [{
-                        "InstanceId": "i-12345678",
-                        "PrivateIpAddress": "1.2.3.4"
-                    }, {
-                        "InstanceId": "i-9abcdef0",
-                        "PrivateIpAddress": "1.2.3.5"
-                    }]
-                }]
-            }
-            with self.assertRaises(ValueError):
-                self.register.retrieve_stack(self._build_args(
-                    stack_id="STACKID", target="some-instance"
-                ))
-
-    def test_determine_details_simple(self):
-        """Should determine names and address for a basic EC2 instance."""
-
-        self.register._ec2_instance = {
-            "PublicIpAddress": "192.0.2.42"
-        }
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            target="i-12345678"
-        ))
-        self.assertEqual(self.register._use_address, "192.0.2.42")
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "i-12345678")
-
-    def test_determine_details_with_hostname(self):
-        """Should determine names and address with a hostname override."""
-
-        self.register._ec2_instance = {
-            "PublicIpAddress": "192.0.2.42"
-        }
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            infrastructure_class="ec2",
-            hostname="prettyhostname"
-        ))
-        self.assertEqual(self.register._use_address, "192.0.2.42")
-        self.assertEqual(self.register._use_hostname, "prettyhostname")
-        self.assertEqual(self.register._name_for_iam, "prettyhostname")
-
-    def test_determine_details_private_ip_only(self):
-        """Should determine names and address for a EC2 instance without a
-        public IP address."""
-
-        self.register._ec2_instance = {
-            "PrivateIpAddress": "192.0.2.42"
-        }
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            target="i-12345678"
-        ))
-        self.assertEqual(self.register._use_address, "192.0.2.42")
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "i-12345678")
-
-    @mock.patch.object(opsworks, "socket")
-    def test_determine_details_local_simple(self, mock_socket):
-        """Should determine names and address for the local EC2 instance."""
-
-        mock_socket.gethostname.return_value = "HOSTNAME"
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            hostname=None, local=True
-        ))
-        self.assertEqual(self.register._use_address, None)
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "HOSTNAME")
-
-    def test_determine_details_local_with_hostname(self):
-        """Should determine names and address for the local EC2 instance with
-        a hostname override."""
-
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            hostname="prettyhostname", local=True
-        ))
-        self.assertEqual(self.register._use_address, None)
-        self.assertEqual(self.register._use_hostname, "prettyhostname")
-        self.assertEqual(self.register._name_for_iam, "prettyhostname")
-
-    def test_determine_details_given_address(self):
-        """Should use a given address."""
-
-        self.register._use_address = "192.0.2.42"
-        self.register.determine_details(self._build_args(
-            target="192.0.2.42"
-        ))
-        self.assertEqual(self.register._use_address, "192.0.2.42")
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "192.0.2.42")
-
-
-class TestOpsWorksRegisterOnPremises(TestOpsWorksBase):
-    """Tests for functionality specific to on-premises instances."""
-
-    def _build_args(self, **kwargs):
-        return argparse.Namespace(**dict({
-            "hostname": None,
-            "infrastructure_class": "on-premises",
-            "private_ip": None,
-            "public_ip": None,
-            "local": False,
-            "username": None,
-            "private_key": None,
-            "ssh": None,
-            "target": None,
-            "use_instance_profile": None,
-        }, **kwargs))
-
-    @mock.patch.object(opsworks, "subprocess")
-    def test_run_main(self, mock_subprocess):
-        """Flow test w/ all the expected side-effects for a remote instance."""
-
-        args = self._build_args(stack_id="STACKID", target="HOSTNAME",
-                                local=False, ssh=None, hostname=None,
-                                private_ip=None, public_ip=None)
-        parsed_globals = argparse.Namespace()
-        mock_ec2 = mock.Mock()
-        mock_iam = mock.Mock()
-        mock_opsworks = mock.Mock()
-        self.mock_session.create_client.side_effect = lambda name, **_: \
-            dict(ec2=mock_ec2, iam=mock_iam, opsworks=mock_opsworks)[name]
-
-        mock_opsworks.describe_stacks.return_value = {
-            "Stacks": [{
-                "Arn": "ARN",
-                "Name": "STACKNAME",
-                "StackId": "STACKID",
-                "Region": "mars-east-1",
-            }]
-        }
-        mock_opsworks.describe_stack_provisioning_parameters.return_value = {
-            "AgentInstallerUrl": "URL",
-            "Parameters": {
-                "assets_download_bucket": "xxx"
-            }
-        }
-        mock_opsworks.describe_instances.return_value = {
-            "Instances": []
-        }
-        mock_iam.create_access_key.return_value = {
-            "AccessKey":
-            {"AccessKeyId": "AKIAXXX", "SecretAccessKey": "foobarbaz"}}
-
-        self.register._run_main(args, parsed_globals)
-
-        mock_iam.create_user.assert_called_with(
-            Path="/AWS/OpsWorks/", UserName="OpsWorks-STACKNAME-HOSTNAME")
-        mock_iam.create_group.assert_called_with(
-            Path="/AWS/OpsWorks/", GroupName="OpsWorks-STACKID")
-        mock_iam.add_user_to_group.assert_called_with(
-            UserName="OpsWorks-STACKNAME-HOSTNAME",
-            GroupName="OpsWorks-STACKID")
-        mock_iam.create_access_key.assert_called_with(
-            UserName="OpsWorks-STACKNAME-HOSTNAME")
-        self.assertTrue(mock_subprocess.check_call.calls)
-
-    def test_prevalidate_arguments_no_instance_profile(self):
-        """Shouldn't allow using an instance profile on-premises."""
-
-        with self.assertRaises(ParamValidationError):
-            self.register.prevalidate_arguments(
-                self._build_args(
-                    target="target", use_instance_profile=True))
-
-    def test_determine_details_simple(self):
-        """Should determine names and address for a basic instance."""
-
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            infrastructure_class="on-premises",
-            target="HOSTNAME", hostname=None, local=False
-        ))
-        self.assertEqual(self.register._use_address, "HOSTNAME")
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "HOSTNAME")
-
-    def test_determine_details_with_hostname(self):
-        """Should determine names and address with a hostname override."""
-
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            infrastructure_class="on-premises",
-            target="HOSTNAME", hostname="prettyhostname", local=False
-        ))
-        self.assertEqual(self.register._use_address, "HOSTNAME")
-        self.assertEqual(self.register._use_hostname, "prettyhostname")
-        self.assertEqual(self.register._name_for_iam, "prettyhostname")
-
-    @mock.patch.object(opsworks, "socket")
-    def test_determine_details_local_simple(self, mock_socket):
-        """Should determine names and address for the local instance."""
-
-        mock_socket.gethostname.return_value = "HOSTNAME"
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            infrastructure_class="on-premises",
-            hostname=None, local=True
-        ))
-        self.assertEqual(self.register._use_address, None)
-        self.assertEqual(self.register._use_hostname, None)
-        self.assertEqual(self.register._name_for_iam, "HOSTNAME")
-
-    def test_determine_details_local_with_hostname(self):
-        """Should determine names and address for the local instance with a
-        hostname override."""
-
-        self.register._use_address = None
-        self.register.determine_details(self._build_args(
-            infrastructure_class="on-premises",
-            hostname="prettyhostname", local=True
-        ))
-        self.assertEqual(self.register._use_address, None)
-        self.assertEqual(self.register._use_hostname, "prettyhostname")
-        self.assertEqual(self.register._name_for_iam, "prettyhostname")
-
-
-class TestOpsWorksHelpers(unittest.TestCase):
-    """Tests for helper functions."""
-
-    def test_clean_for_iam(self):
-        """Should sanitize strings for IAM."""
-
-        self.assertEqual(opsworks.clean_for_iam("foobar"), "foobar")
-        self.assertEqual(opsworks.clean_for_iam("foo bar 123"), "foo-bar-123")
-        self.assertEqual(opsworks.clean_for_iam("baz&@%#^*$bar"), "baz-@-bar")
-
-    def test_shorten_name(self):
-        """Should shorten strings by introducing ellipses."""
-
-        # short
-        self.assertEqual(opsworks.shorten_name("1234", 5), "1234")
-        self.assertEqual(opsworks.shorten_name("12345", 5), "12345")
-        # odd number of characters
-        self.assertEqual(opsworks.shorten_name("123456789", 5), "1...9")
-        self.assertEqual(opsworks.shorten_name("123456789", 6), "12...9")
-        self.assertEqual(opsworks.shorten_name("123456789", 7), "12...89")
-        self.assertEqual(opsworks.shorten_name("123456789", 8), "123...89")
-        self.assertEqual(opsworks.shorten_name("123456789", 9), "123456789")
-        self.assertEqual(opsworks.shorten_name("123456789", 10), "123456789")
-        # even number of characters
-        self.assertEqual(opsworks.shorten_name("1234567890", 5), "1...0")
-        self.assertEqual(opsworks.shorten_name("1234567890", 6), "12...0")
-        self.assertEqual(opsworks.shorten_name("1234567890", 7), "12...90")
-        self.assertEqual(opsworks.shorten_name("1234567890", 8), "123...90")
-        self.assertEqual(opsworks.shorten_name("1234567890", 9), "123...890")
-        self.assertEqual(opsworks.shorten_name("1234567890", 10), "1234567890")
-        self.assertEqual(opsworks.shorten_name("1234567890", 11), "1234567890")
diff -pruN 2.23.6-1/tests/unit/customizations/test_paginate.py 2.31.35-1/tests/unit/customizations/test_paginate.py
--- 2.23.6-1/tests/unit/customizations/test_paginate.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_paginate.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,16 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import pytest
-
-from awscli.customizations.paginate import PageArgument
-from awscli.testutils import mock, unittest
-
 from botocore.exceptions import DataNotFoundError
 from botocore.model import OperationModel
-from awscli.help import OperationHelpCommand, OperationDocumentEventHandler
 
 from awscli.customizations import paginate
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.paginate import PageArgument
+from awscli.help import OperationDocumentEventHandler, OperationHelpCommand
+from awscli.testutils import mock, unittest
 
 
 @pytest.fixture
@@ -29,7 +27,6 @@ def max_items_page_arg():
 
 
 class TestPaginateBase(unittest.TestCase):
-
     def setUp(self):
         self.session = mock.Mock()
         self.paginator_model = mock.Mock()
@@ -37,8 +34,9 @@ class TestPaginateBase(unittest.TestCase
             'input_token': 'Foo',
             'limit_key': 'Bar',
         }
-        self.paginator_model.get_paginator.return_value = \
+        self.paginator_model.get_paginator.return_value = (
             self.pagination_config
+        )
         self.session.get_paginator_model.return_value = self.paginator_model
 
         self.operation_model = mock.Mock()
@@ -49,20 +47,24 @@ class TestPaginateBase(unittest.TestCase
         self.bar_param.type_name = 'string'
         self.bar_param.name = 'Bar'
         self.params = [self.foo_param, self.bar_param]
-        self.operation_model.input_shape.members = {"Foo": self.foo_param,
-                                                    "Bar": self.bar_param}
+        self.operation_model.input_shape.members = {
+            "Foo": self.foo_param,
+            "Bar": self.bar_param,
+        }
 
 
 class TestArgumentTableModifications(TestPaginateBase):
-
     def test_customize_arg_table(self):
         argument_table = {
             'foo': mock.Mock(),
             'bar': mock.Mock(),
         }
-        paginate.unify_paging_params(argument_table, self.operation_model,
-                                     'building-argument-table.foo.bar',
-                                     self.session)
+        paginate.unify_paging_params(
+            argument_table,
+            self.operation_model,
+            'building-argument-table.foo.bar',
+            self.session,
+        )
         # We should mark the built in input_token as 'hidden'.
         self.assertTrue(argument_table['foo']._UNDOCUMENTED)
         # Also need to hide the limit key.
@@ -72,12 +74,15 @@ class TestArgumentTableModifications(Tes
         self.assertIn('max-items', argument_table)
         self.assertIn('page-size', argument_table)
         # And these should be PageArguments.
-        self.assertIsInstance(argument_table['starting-token'],
-                              paginate.PageArgument)
-        self.assertIsInstance(argument_table['max-items'],
-                              paginate.PageArgument)
-        self.assertIsInstance(argument_table['page-size'],
-                              paginate.PageArgument)
+        self.assertIsInstance(
+            argument_table['starting-token'], paginate.PageArgument
+        )
+        self.assertIsInstance(
+            argument_table['max-items'], paginate.PageArgument
+        )
+        self.assertIsInstance(
+            argument_table['page-size'], paginate.PageArgument
+        )
 
     def test_operation_with_no_paginate(self):
         # Operations that don't paginate are left alone.
@@ -87,78 +92,124 @@ class TestArgumentTableModifications(Tes
             'bar': 'FakeArgObject',
         }
         starting_table = argument_table.copy()
-        paginate.unify_paging_params(argument_table, self.operation_model,
-                                     'building-argument-table.foo.bar',
-                                     self.session)
+        paginate.unify_paging_params(
+            argument_table,
+            self.operation_model,
+            'building-argument-table.foo.bar',
+            self.session,
+        )
         self.assertEqual(starting_table, argument_table)
 
     def test_service_with_no_paginate(self):
         # Operations that don't paginate are left alone.
-        self.session.get_paginator_model.side_effect = \
-            DataNotFoundError(data_path='foo.paginators.json')
+        self.session.get_paginator_model.side_effect = DataNotFoundError(
+            data_path='foo.paginators.json'
+        )
         argument_table = {
             'foo': 'FakeArgObject',
             'bar': 'FakeArgObject',
         }
         starting_table = argument_table.copy()
-        paginate.unify_paging_params(argument_table, self.operation_model,
-                                     'building-argument-table.foo.bar',
-                                     self.session)
+        paginate.unify_paging_params(
+            argument_table,
+            self.operation_model,
+            'building-argument-table.foo.bar',
+            self.session,
+        )
         self.assertEqual(starting_table, argument_table)
 
 
 class TestHelpDocumentationModifications(TestPaginateBase):
     def test_injects_pagination_help_text(self):
-        with mock.patch('awscli.customizations.paginate.get_paginator_config',
-                   return_value={'result_key': 'abc'}):
+        with mock.patch(
+            'awscli.customizations.paginate.get_paginator_config',
+            return_value={'result_key': 'abc'},
+        ):
             help_command = OperationHelpCommand(
-                mock.Mock(), mock.Mock(), mock.Mock(), 'foo', OperationDocumentEventHandler)
+                mock.Mock(),
+                mock.Mock(),
+                mock.Mock(),
+                'foo',
+                OperationDocumentEventHandler,
+            )
             help_command.obj = mock.Mock(OperationModel)
             help_command.obj.name = 'foo'
             paginate.add_paging_description(help_command)
-            self.assertIn('``foo`` is a paginated operation. Multiple API',
-                          help_command.doc.getvalue().decode())
-            self.assertIn('following query expressions: ``abc``',
-                          help_command.doc.getvalue().decode())
+            self.assertIn(
+                '``foo`` is a paginated operation. Multiple API',
+                help_command.doc.getvalue().decode(),
+            )
+            self.assertIn(
+                'following query expressions: ``abc``',
+                help_command.doc.getvalue().decode(),
+            )
 
     def test_shows_result_keys_when_array(self):
-        with mock.patch('awscli.customizations.paginate.get_paginator_config',
-                   return_value={'result_key': ['abc', '123']}):
+        with mock.patch(
+            'awscli.customizations.paginate.get_paginator_config',
+            return_value={'result_key': ['abc', '123']},
+        ):
             help_command = OperationHelpCommand(
-                mock.Mock(), mock.Mock(), mock.Mock(), 'foo', OperationDocumentEventHandler)
+                mock.Mock(),
+                mock.Mock(),
+                mock.Mock(),
+                'foo',
+                OperationDocumentEventHandler,
+            )
             help_command.obj = mock.Mock(OperationModel)
             help_command.obj.name = 'foo'
             paginate.add_paging_description(help_command)
-            self.assertIn('following query expressions: ``abc``, ``123``',
-                          help_command.doc.getvalue().decode())
+            self.assertIn(
+                'following query expressions: ``abc``, ``123``',
+                help_command.doc.getvalue().decode(),
+            )
 
     def test_does_not_show_result_key_if_not_present(self):
-        with mock.patch('awscli.customizations.paginate.get_paginator_config',
-                   return_value={'limit_key': 'aaa'}):
+        with mock.patch(
+            'awscli.customizations.paginate.get_paginator_config',
+            return_value={'limit_key': 'aaa'},
+        ):
             help_command = OperationHelpCommand(
-                mock.Mock(), mock.Mock(), mock.Mock(), 'foo', OperationDocumentEventHandler)
+                mock.Mock(),
+                mock.Mock(),
+                mock.Mock(),
+                'foo',
+                OperationDocumentEventHandler,
+            )
             help_command.obj = mock.Mock(OperationModel)
             help_command.obj.name = 'foo'
             paginate.add_paging_description(help_command)
-            self.assertIn('``foo`` is a paginated operation. Multiple API',
-                          help_command.doc.getvalue().decode())
-            self.assertNotIn('following query expressions',
-                             help_command.doc.getvalue().decode())
+            self.assertIn(
+                '``foo`` is a paginated operation. Multiple API',
+                help_command.doc.getvalue().decode(),
+            )
+            self.assertNotIn(
+                'following query expressions',
+                help_command.doc.getvalue().decode(),
+            )
 
     def test_does_not_inject_when_no_pagination(self):
-        with mock.patch('awscli.customizations.paginate.get_paginator_config',
-                   return_value=None):
+        with mock.patch(
+            'awscli.customizations.paginate.get_paginator_config',
+            return_value=None,
+        ):
             help_command = OperationHelpCommand(
-                mock.Mock(), mock.Mock(), mock.Mock(), 'foo', OperationDocumentEventHandler)
+                mock.Mock(),
+                mock.Mock(),
+                mock.Mock(),
+                'foo',
+                OperationDocumentEventHandler,
+            )
             help_command.obj = mock.Mock(OperationModel)
             help_command.obj.name = 'foo'
             paginate.add_paging_description(help_command)
-            self.assertNotIn('``foo`` is a paginated operation',
-                             help_command.doc.getvalue().decode())
+            self.assertNotIn(
+                '``foo`` is a paginated operation',
+                help_command.doc.getvalue().decode(),
+            )
 
 
 class TestStringLimitKey(TestPaginateBase):
-
     def setUp(self):
         super(TestStringLimitKey, self).setUp()
         self.bar_param.type_name = 'string'
@@ -168,15 +219,17 @@ class TestStringLimitKey(TestPaginateBas
             'foo': mock.Mock(),
             'bar': mock.Mock(),
         }
-        paginate.unify_paging_params(argument_table, self.operation_model,
-                                     'building-argument-table.foo.bar',
-                                     self.session)
+        paginate.unify_paging_params(
+            argument_table,
+            self.operation_model,
+            'building-argument-table.foo.bar',
+            self.session,
+        )
         # Max items should be the same type as bar, which may not be an int
         self.assertEqual('string', argument_table['max-items'].cli_type_name)
 
 
 class TestIntegerLimitKey(TestPaginateBase):
-
     def setUp(self):
         super(TestIntegerLimitKey, self).setUp()
         self.bar_param.type_name = 'integer'
@@ -186,15 +239,17 @@ class TestIntegerLimitKey(TestPaginateBa
             'foo': mock.Mock(),
             'bar': mock.Mock(),
         }
-        paginate.unify_paging_params(argument_table, self.operation_model,
-                                     'building-argument-table.foo.bar',
-                                     self.session)
+        paginate.unify_paging_params(
+            argument_table,
+            self.operation_model,
+            'building-argument-table.foo.bar',
+            self.session,
+        )
         # Max items should be the same type as bar, which may not be an int
         self.assertEqual('integer', argument_table['max-items'].cli_type_name)
 
 
 class TestBadLimitKey(TestPaginateBase):
-
     def setUp(self):
         super(TestBadLimitKey, self).setUp()
         self.bar_param.type_name = 'bad'
@@ -205,9 +260,12 @@ class TestBadLimitKey(TestPaginateBase):
             'bar': mock.Mock(),
         }
         with self.assertRaises(TypeError):
-            paginate.unify_paging_params(argument_table, self.operation_model,
-                                         'building-argument-table.foo.bar',
-                                         self.session)
+            paginate.unify_paging_params(
+                argument_table,
+                self.operation_model,
+                'building-argument-table.foo.bar',
+                self.session,
+            )
 
 
 class TestShouldEnablePagination(TestPaginateBase):
@@ -230,7 +288,8 @@ class TestShouldEnablePagination(TestPag
         self.parsed_args.foo = None
         self.parsed_args.bar = 10
         paginate.check_should_enable_pagination(
-            input_tokens, {}, {}, self.parsed_args, self.parsed_globals)
+            input_tokens, {}, {}, self.parsed_args, self.parsed_globals
+        )
         # We should have turned paginate off because the
         # user specified --bar 10
         self.assertFalse(self.parsed_globals.paginate)
@@ -245,7 +304,8 @@ class TestShouldEnablePagination(TestPag
         self.call_parameters['Foo'] = None
         self.call_parameters['Bar'] = 10
         paginate.check_should_enable_pagination_call_parameters(
-            input_tokens, self.call_parameters, {}, self.parsed_globals)
+            input_tokens, self.call_parameters, {}, self.parsed_globals
+        )
         # We should have turned paginate off because the
         # user specified {Bar: 10} in the input JSON
         self.assertFalse(self.parsed_globals.paginate)
@@ -257,7 +317,8 @@ class TestShouldEnablePagination(TestPag
         self.parsed_args.foo = None
         self.parsed_args.bar = None
         paginate.check_should_enable_pagination(
-            input_tokens, {}, {}, self.parsed_args, self.parsed_globals)
+            input_tokens, {}, {}, self.parsed_args, self.parsed_globals
+        )
         # We should have turned paginate off because the
         # user specified --bar 10
         self.assertTrue(self.parsed_globals.paginate)
@@ -269,7 +330,8 @@ class TestShouldEnablePagination(TestPag
         self.call_parameters['Fie'] = 1
         self.call_parameters['Baz'] = 2
         paginate.check_should_enable_pagination_call_parameters(
-            input_tokens, self.call_parameters, {}, self.parsed_globals)
+            input_tokens, self.call_parameters, {}, self.parsed_globals
+        )
         # We should have not have turned paginate off because the
         # user specified did not specify any pagination args
         self.assertTrue(self.parsed_globals.paginate)
@@ -286,9 +348,11 @@ class TestShouldEnablePagination(TestPag
         self.parsed_args.foo = None
         self.parsed_args.max_items = 10
         paginate.check_should_enable_pagination(
-            input_tokens, {}, {}, self.parsed_args, self.parsed_globals)
-        self.assertTrue(self.parsed_globals.paginate,
-                        "Pagination was not enabled.")
+            input_tokens, {}, {}, self.parsed_args, self.parsed_globals
+        )
+        self.assertTrue(
+            self.parsed_globals.paginate, "Pagination was not enabled."
+        )
 
     def test_fall_back_to_original_max_items_when_pagination_turned_off(self):
         input_tokens = ['max-items']
@@ -302,8 +366,12 @@ class TestShouldEnablePagination(TestPag
         arg_table = {'max-items': mock.sentinel.PAGINATION_ARG}
 
         paginate.check_should_enable_pagination(
-            input_tokens, shadowed_args, arg_table,
-            self.parsed_args, self.parsed_globals)
+            input_tokens,
+            shadowed_args,
+            arg_table,
+            self.parsed_args,
+            self.parsed_globals,
+        )
 
     def test_shadowed_args_are_replaced_when_pagination_turned_off(self):
         input_tokens = ['foo', 'bar']
@@ -314,8 +382,12 @@ class TestShouldEnablePagination(TestPag
         shadowed_args = {'foo': mock.sentinel.ORIGINAL_ARG}
         arg_table = {'foo': mock.sentinel.PAGINATION_ARG}
         paginate.check_should_enable_pagination(
-            input_tokens, shadowed_args, arg_table,
-            self.parsed_args, self.parsed_globals)
+            input_tokens,
+            shadowed_args,
+            arg_table,
+            self.parsed_args,
+            self.parsed_globals,
+        )
         # We should have turned paginate off because the
         # user specified --bar 10
         self.assertFalse(self.parsed_globals.paginate)
@@ -330,8 +402,12 @@ class TestShouldEnablePagination(TestPag
         shadowed_args = {'foo': mock.sentinel.ORIGINAL_ARG}
         arg_table = {'foo': mock.sentinel.PAGINATION_ARG}
         paginate.check_should_enable_pagination(
-            input_tokens, shadowed_args, arg_table,
-            self.parsed_args, self.parsed_globals)
+            input_tokens,
+            shadowed_args,
+            arg_table,
+            self.parsed_args,
+            self.parsed_globals,
+        )
         # We should have turned paginate off because the
         # user specified --bar 10
         self.assertFalse(self.parsed_globals.paginate)
@@ -356,11 +432,15 @@ class TestEnsurePagingParamsNotSet(TestP
     def test_can_handle_missing_page_size(self):
         # Not all pagination operations have a page_size.
         del self.parsed_args.page_size
-        self.assertIsNone(paginate.ensure_paging_params_not_set(
-            self.parsed_args, {}))
+        self.assertIsNone(
+            paginate.ensure_paging_params_not_set(self.parsed_args, {})
+        )
+
 
 class TestNonPositiveMaxItems:
-    def test_positive_integer_does_not_raise_warning(self, max_items_page_arg, capsys):
+    def test_positive_integer_does_not_raise_warning(
+        self, max_items_page_arg, capsys
+    ):
         max_items_page_arg.add_to_params({}, 1)
         captured = capsys.readouterr()
         assert captured.err == ""
diff -pruN 2.23.6-1/tests/unit/customizations/test_s3errormsg.py 2.31.35-1/tests/unit/customizations/test_s3errormsg.py
--- 2.23.6-1/tests/unit/customizations/test_s3errormsg.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_s3errormsg.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,22 +12,16 @@
 # language governing permissions and limitations under the License.
 import copy
 
-from awscli.testutils import unittest
 from awscli.customizations import s3errormsg
+from awscli.testutils import unittest
 
 
 class TestGetRegionFromEndpoint(unittest.TestCase):
-
     def test_sigv4_error_message(self):
-        parsed = {
-            'Error': {
-                'Message': 'Please use AWS4-HMAC-SHA256'
-            }
-        }
+        parsed = {'Error': {'Message': 'Please use AWS4-HMAC-SHA256'}}
         s3errormsg.enhance_error_msg(parsed)
         # We should say how to fix the issue.
-        self.assertIn('You can fix this issue',
-                      parsed['Error']['Message'])
+        self.assertIn('You can fix this issue', parsed['Error']['Message'])
         # We should mention the --region argument.
         self.assertIn('--region', parsed['Error']['Message'])
         # We should mention get-bucket-location
@@ -51,23 +45,27 @@ class TestGetRegionFromEndpoint(unittest
             'Error': {
                 'Message': (
                     'Requests specifying Server Side Encryption with '
-                    'AWS KMS managed keys require AWS Signature Version 4.')
+                    'AWS KMS managed keys require AWS Signature Version 4.'
+                )
             }
         }
         s3errormsg.enhance_error_msg(parsed)
         # We should say how you enable it.
-        self.assertIn('You can enable AWS Signature Version 4',
-                      parsed['Error']['Message'])
+        self.assertIn(
+            'You can enable AWS Signature Version 4',
+            parsed['Error']['Message'],
+        )
         # We should mention the command that needs to be run.
         self.assertIn(
             'aws configure set s3.signature_version s3v4',
-            parsed['Error']['Message'])
+            parsed['Error']['Message'],
+        )
 
     def test_error_message_not_enhanced(self):
         parsed = {
             'Error': {
                 'Message': 'This is a different error message.',
-                'Code': 'Other Message'
+                'Code': 'Other Message',
             }
         }
         expected = copy.deepcopy(parsed)
@@ -76,10 +74,7 @@ class TestGetRegionFromEndpoint(unittest
         self.assertEqual(parsed, expected)
 
     def test_not_an_error_message(self):
-        parsed = {
-            'Success': 'response',
-            'ResponseMetadata': {}
-        }
+        parsed = {'Success': 'response', 'ResponseMetadata': {}}
         expected = copy.deepcopy(parsed)
         s3errormsg.enhance_error_msg(parsed)
         # Nothing should have changed
diff -pruN 2.23.6-1/tests/unit/customizations/test_s3uploader.py 2.31.35-1/tests/unit/customizations/test_s3uploader.py
--- 2.23.6-1/tests/unit/customizations/test_s3uploader.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_s3uploader.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,35 +10,32 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import hashlib
 import os
 import random
+import shutil
 import string
 import tempfile
-import hashlib
-import shutil
-
-from awscli.testutils import mock
 
 import botocore
-import botocore.session
 import botocore.exceptions
+import botocore.session
 from botocore.stub import Stubber
 from s3transfer import S3Transfer
 
 from awscli.compat import OrderedDict
-from awscli.testutils import unittest
-from awscli.customizations.s3uploader import S3Uploader
-from awscli.customizations.s3uploader import NoSuchBucketError
+from awscli.customizations.s3uploader import NoSuchBucketError, S3Uploader
+from awscli.testutils import mock, unittest
 
 
 class TestS3Uploader(unittest.TestCase):
-
     def setUp(self):
         self._construct_uploader("us-east-1")
 
     def _construct_uploader(self, region):
         self.s3client = botocore.session.get_session().create_client(
-                's3', region_name=region)
+            's3', region_name=region
+        )
         self.s3client_stub = Stubber(self.s3client)
         self.transfer_manager_mock = mock.Mock(spec=S3Transfer)
         self.transfer_manager_mock.upload = mock.Mock()
@@ -46,8 +43,13 @@ class TestS3Uploader(unittest.TestCase):
         self.prefix = None
 
         self.s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, self.prefix, None, False,
-            self.transfer_manager_mock)
+            self.s3client,
+            self.bucket_name,
+            self.prefix,
+            None,
+            False,
+            self.transfer_manager_mock,
+        )
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
@@ -55,12 +57,16 @@ class TestS3Uploader(unittest.TestCase):
         file_name = "filename"
         remote_path = "remotepath"
         prefix = "SomePrefix"
-        remote_path_with_prefix = "{0}/{1}".format(prefix, remote_path)
+        remote_path_with_prefix = f"{prefix}/{remote_path}"
         s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, prefix, None, False,
-            self.transfer_manager_mock)
-        expected_upload_url = "s3://{0}/{1}/{2}".format(
-            self.bucket_name, prefix, remote_path)
+            self.s3client,
+            self.bucket_name,
+            prefix,
+            None,
+            False,
+            self.transfer_manager_mock,
+        )
+        expected_upload_url = f"s3://{self.bucket_name}/{prefix}/{remote_path}"
 
         # Setup mock to fake that file does not exist
         s3uploader.file_exists = mock.Mock()
@@ -76,25 +82,35 @@ class TestS3Uploader(unittest.TestCase):
             # expected encryption args
             "ServerSideEncryption": "AES256",
             # expected metadata
-            "Metadata": artifact_metadata
+            "Metadata": artifact_metadata,
         }
         self.transfer_manager_mock.upload.assert_called_once_with(
-                file_name, self.bucket_name, remote_path_with_prefix,
-                expected_extra_args, mock.ANY)
+            file_name,
+            self.bucket_name,
+            remote_path_with_prefix,
+            expected_extra_args,
+            mock.ANY,
+        )
         s3uploader.file_exists.assert_called_once_with(remote_path_with_prefix)
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
-    def test_upload_successful_odict(self, progress_percentage_mock, get_size_patch):
+    def test_upload_successful_odict(
+        self, progress_percentage_mock, get_size_patch
+    ):
         file_name = "filename"
         remote_path = "remotepath"
         prefix = "SomePrefix"
-        remote_path_with_prefix = "{0}/{1}".format(prefix, remote_path)
+        remote_path_with_prefix = f"{prefix}/{remote_path}"
         s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, prefix, None, False,
-            self.transfer_manager_mock)
-        expected_upload_url = "s3://{0}/{1}/{2}".format(
-            self.bucket_name, prefix, remote_path)
+            self.s3client,
+            self.bucket_name,
+            prefix,
+            None,
+            False,
+            self.transfer_manager_mock,
+        )
+        expected_upload_url = f"s3://{self.bucket_name}/{prefix}/{remote_path}"
 
         # Setup mock to fake that file does not exist
         s3uploader.file_exists = mock.Mock()
@@ -110,11 +126,15 @@ class TestS3Uploader(unittest.TestCase):
             # expected encryption args
             "ServerSideEncryption": "AES256",
             # expected metadata
-            "Metadata": artifact_metadata
+            "Metadata": artifact_metadata,
         }
         self.transfer_manager_mock.upload.assert_called_once_with(
-                file_name, self.bucket_name, remote_path_with_prefix,
-                expected_extra_args, mock.ANY)
+            file_name,
+            self.bucket_name,
+            remote_path_with_prefix,
+            expected_extra_args,
+            mock.ANY,
+        )
         s3uploader.file_exists.assert_called_once_with(remote_path_with_prefix)
 
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
@@ -133,16 +153,22 @@ class TestS3Uploader(unittest.TestCase):
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
-    def test_upload_force_upload(self, progress_percentage_mock, get_size_patch):
+    def test_upload_force_upload(
+        self, progress_percentage_mock, get_size_patch
+    ):
         file_name = "filename"
         remote_path = "remotepath"
-        expected_upload_url = "s3://{0}/{1}".format(self.bucket_name,
-                                                    remote_path)
+        expected_upload_url = f"s3://{self.bucket_name}/{remote_path}"
 
         # Set ForceUpload = True
         self.s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, self.prefix,
-            None, True, self.transfer_manager_mock)
+            self.s3client,
+            self.bucket_name,
+            self.prefix,
+            None,
+            True,
+            self.transfer_manager_mock,
+        )
 
         # Pretend file already exists
         self.s3uploader.file_exists = mock.Mock()
@@ -152,28 +178,36 @@ class TestS3Uploader(unittest.TestCase):
         upload_url = self.s3uploader.upload(file_name, remote_path)
         self.assertEqual(expected_upload_url, upload_url)
 
-        expected_encryption_args = {
-            "ServerSideEncryption": "AES256"
-        }
+        expected_encryption_args = {"ServerSideEncryption": "AES256"}
         self.transfer_manager_mock.upload.assert_called_once_with(
-                file_name, self.bucket_name, remote_path,
-                expected_encryption_args, mock.ANY)
+            file_name,
+            self.bucket_name,
+            remote_path,
+            expected_encryption_args,
+            mock.ANY,
+        )
 
         # Since ForceUpload=True, we should NEVER do the file-exists check
         self.s3uploader.file_exists.assert_not_called()
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
-    def test_upload_successful_custom_kms_key(self, progress_percentage_mock, get_size_patch):
+    def test_upload_successful_custom_kms_key(
+        self, progress_percentage_mock, get_size_patch
+    ):
         file_name = "filename"
         remote_path = "remotepath"
         kms_key_id = "kms_id"
-        expected_upload_url = "s3://{0}/{1}".format(self.bucket_name,
-                                                    remote_path)
+        expected_upload_url = f"s3://{self.bucket_name}/{remote_path}"
         # Set KMS Key Id
         self.s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, self.prefix,
-            kms_key_id, False, self.transfer_manager_mock)
+            self.s3client,
+            self.bucket_name,
+            self.prefix,
+            kms_key_id,
+            False,
+            self.transfer_manager_mock,
+        )
 
         # Setup mock to fake that file does not exist
         self.s3uploader.file_exists = mock.Mock()
@@ -184,16 +218,22 @@ class TestS3Uploader(unittest.TestCase):
 
         expected_encryption_args = {
             "ServerSideEncryption": "aws:kms",
-            "SSEKMSKeyId": kms_key_id
+            "SSEKMSKeyId": kms_key_id,
         }
         self.transfer_manager_mock.upload.assert_called_once_with(
-                file_name, self.bucket_name, remote_path,
-                expected_encryption_args, mock.ANY)
+            file_name,
+            self.bucket_name,
+            remote_path,
+            expected_encryption_args,
+            mock.ANY,
+        )
         self.s3uploader.file_exists.assert_called_once_with(remote_path)
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
-    def test_upload_successful_nobucket(self, progress_percentage_mock, get_size_patch):
+    def test_upload_successful_nobucket(
+        self, progress_percentage_mock, get_size_patch
+    ):
         file_name = "filename"
         remote_path = "remotepath"
 
@@ -203,7 +243,8 @@ class TestS3Uploader(unittest.TestCase):
 
         # Setup uploader to return a NOSuchBucket exception
         exception = botocore.exceptions.ClientError(
-                {"Error": {"Code": "NoSuchBucket"}}, "OpName")
+            {"Error": {"Code": "NoSuchBucket"}}, "OpName"
+        )
         self.transfer_manager_mock.upload.side_effect = exception
 
         with self.assertRaises(NoSuchBucketError):
@@ -211,7 +252,9 @@ class TestS3Uploader(unittest.TestCase):
 
     @mock.patch('os.path.getsize', return_value=1)
     @mock.patch("awscli.customizations.s3uploader.ProgressPercentage")
-    def test_upload_successful_exceptions(self, progress_percentage_mock, get_size_patch):
+    def test_upload_successful_exceptions(
+        self, progress_percentage_mock, get_size_patch
+    ):
         file_name = "filename"
         remote_path = "remotepath"
 
@@ -221,7 +264,8 @@ class TestS3Uploader(unittest.TestCase):
 
         # Raise an unrecognized botocore error
         exception = botocore.exceptions.ClientError(
-                {"Error": {"Code": "SomeError"}}, "OpName")
+            {"Error": {"Code": "SomeError"}}, "OpName"
+        )
         self.transfer_manager_mock.upload.side_effect = exception
 
         with self.assertRaises(botocore.exceptions.ClientError):
@@ -233,7 +277,6 @@ class TestS3Uploader(unittest.TestCase):
             self.s3uploader.upload(file_name, remote_path)
 
     def test_upload_with_dedup(self):
-
         checksum = "some md5 checksum"
         filename = "filename"
         extension = "extn"
@@ -245,15 +288,12 @@ class TestS3Uploader(unittest.TestCase):
 
         self.s3uploader.upload_with_dedup(filename, extension)
 
-        remotepath = "{0}.{1}".format(checksum, extension)
+        remotepath = f"{checksum}.{extension}"
         self.s3uploader.upload.assert_called_once_with(filename, remotepath)
 
     def test_file_exists(self):
         key = "some/path"
-        expected_params = {
-            "Bucket": self.bucket_name,
-            "Key": key
-        }
+        expected_params = {"Bucket": self.bucket_name, "Key": key}
         response = {
             "AcceptRanges": "bytes",
             "ContentType": "text/html",
@@ -261,20 +301,21 @@ class TestS3Uploader(unittest.TestCase):
             "ContentLength": 77,
             "VersionId": "null",
             "ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
-            "Metadata": {}
+            "Metadata": {},
         }
 
         # Let's pretend file exists
-        self.s3client_stub.add_response("head_object",
-                                        response,
-                                        expected_params)
+        self.s3client_stub.add_response(
+            "head_object", response, expected_params
+        )
 
         with self.s3client_stub:
             self.assertTrue(self.s3uploader.file_exists(key))
 
         # Let's pretend file does not exist
         self.s3client_stub.add_client_error(
-            'head_object', "ClientError", "some error")
+            'head_object', "ClientError", "some error"
+        )
         with self.s3client_stub:
             self.assertFalse(self.s3uploader.file_exists(key))
 
@@ -288,9 +329,10 @@ class TestS3Uploader(unittest.TestCase):
             uploader.file_exists(key)
 
     def test_file_checksum(self):
-        num_chars = 4096*5
-        data = ''.join(random.choice(string.ascii_uppercase)
-                       for _ in range(num_chars)).encode('utf-8')
+        num_chars = 4096 * 5
+        data = ''.join(
+            random.choice(string.ascii_uppercase) for _ in range(num_chars)
+        ).encode('utf-8')
         md5 = hashlib.md5()
         md5.update(data)
         expected_checksum = md5.hexdigest()
@@ -306,9 +348,30 @@ class TestS3Uploader(unittest.TestCase):
         finally:
             shutil.rmtree(tempdir)
 
+    @mock.patch("awscli.customizations.s3uploader.get_md5")
+    def test_file_checksum_fips_fallback(self, get_md5_mock):
+        num_chars = 4096*5
+        data = ''.join(random.choice(string.ascii_uppercase)
+                       for _ in range(num_chars)).encode('utf-8')
+        checksum = hashlib.sha256(usedforsecurity=False)
+        checksum.update(data)
+        expected_checksum = checksum.hexdigest()
+
+        tempdir = tempfile.mkdtemp()
+        get_md5_mock.side_effect = botocore.exceptions.MD5UnavailableError()
+        try:
+            filename = os.path.join(tempdir, 'tempfile')
+            with open(filename, 'wb') as f:
+                f.write(data)
+
+            actual_checksum = self.s3uploader.file_checksum(filename)
+            self.assertEqual(expected_checksum, actual_checksum)
+        finally:
+            shutil.rmtree(tempdir)
+
     def test_make_url(self):
         path = "Hello/how/are/you"
-        expected = "s3://{0}/{1}".format(self.bucket_name, path)
+        expected = f"s3://{self.bucket_name}/{path}"
         self.assertEqual(expected, self.s3uploader.make_url(path))
 
     def test_to_path_style_s3_url_us_east_1(self):
@@ -323,8 +386,8 @@ class TestS3Uploader(unittest.TestCase):
             "https://s3.us-east-1.amazonaws.com/{0}/{1}?versionId={2}"
         )
         self.assertEqual(
-                result,
-                versioned_url.format(self.bucket_name, key, version),
+            result,
+            versioned_url.format(self.bucket_name, key, version),
         )
 
         # Without versionId, that query parameter should be omitted
@@ -332,8 +395,7 @@ class TestS3Uploader(unittest.TestCase):
         result = s3uploader.to_path_style_s3_url(key)
         expected_url = "https://s3.us-east-1.amazonaws.com/{0}/{1}"
         self.assertEqual(
-            result,
-            expected_url.format( self.bucket_name, key, version)
+            result, expected_url.format(self.bucket_name, key, version)
         )
 
     def test_to_path_style_s3_url_other_regions(self):
@@ -345,18 +407,17 @@ class TestS3Uploader(unittest.TestCase):
         s3uploader = S3Uploader(self.s3client, self.bucket_name, region)
         result = s3uploader.to_path_style_s3_url(key, version)
         self.assertEqual(
-                result,
-                "https://s3.{0}.amazonaws.com/{1}/{2}?versionId={3}".format(
-                        region, self.bucket_name, key, version))
+            result,
+            f"https://s3.{region}.amazonaws.com/{self.bucket_name}/{key}?versionId={version}",
+        )
 
         # Without versionId, that query parameter should be omitted
         s3uploader = S3Uploader(self.s3client, self.bucket_name, region)
         result = s3uploader.to_path_style_s3_url(key)
         self.assertEqual(
-                result,
-                "https://s3.{0}.amazonaws.com/{1}/{2}".format(
-                        region, self.bucket_name, key))
-
+            result,
+            f"https://s3.{region}.amazonaws.com/{self.bucket_name}/{key}",
+        )
 
     def test_to_path_style_s3_url_china_regions(self):
         key = "path/to/file"
@@ -367,23 +428,28 @@ class TestS3Uploader(unittest.TestCase):
         s3uploader = S3Uploader(self.s3client, self.bucket_name, region)
         result = s3uploader.to_path_style_s3_url(key, version)
         self.assertEqual(
-                result,
-                "https://s3.{0}.amazonaws.com.cn/{1}/{2}?versionId={3}".format(
-                        region, self.bucket_name, key, version))
+            result,
+            f"https://s3.{region}.amazonaws.com.cn/{self.bucket_name}/{key}?versionId={version}",
+        )
 
         # Without versionId, that query parameter should be omitted
         s3uploader = S3Uploader(self.s3client, self.bucket_name, region)
         result = s3uploader.to_path_style_s3_url(key)
         self.assertEqual(
-                result,
-                "https://s3.{0}.amazonaws.com.cn/{1}/{2}".format(
-                        region, self.bucket_name, key))
+            result,
+            f"https://s3.{region}.amazonaws.com.cn/{self.bucket_name}/{key}",
+        )
 
     def test_artifact_metadata_invalid_type(self):
         prefix = "SomePrefix"
         s3uploader = S3Uploader(
-            self.s3client, self.bucket_name, prefix, None, False,
-            self.transfer_manager_mock)
+            self.s3client,
+            self.bucket_name,
+            prefix,
+            None,
+            False,
+            self.transfer_manager_mock,
+        )
         invalid_metadata = ["key", "val"]
         with self.assertRaises(TypeError):
             s3uploader.artifact_metadata = invalid_metadata
diff -pruN 2.23.6-1/tests/unit/customizations/test_sessionmanager.py 2.31.35-1/tests/unit/customizations/test_sessionmanager.py
--- 2.23.6-1/tests/unit/customizations/test_sessionmanager.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_sessionmanager.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,18 +10,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import botocore.session
 import errno
 import json
-import pytest
 import subprocess
 
+import botocore.session
+import pytest
+
 from awscli.customizations import sessionmanager
 from awscli.testutils import mock, unittest
 
 
 class TestSessionManager(unittest.TestCase):
-
     def setUp(self):
         self.session = mock.Mock(botocore.session.Session)
         self.client = mock.Mock()
@@ -46,25 +46,24 @@ class TestSessionManager(unittest.TestCa
     @mock.patch("awscli.customizations.sessionmanager.check_output")
     @mock.patch('awscli.customizations.sessionmanager.check_call')
     def test_start_session_success_scenario(
-            self, mock_check_call, mock_check_output
+        self, mock_check_call, mock_check_output
     ):
         mock_check_output.return_value = "1.2.0.0\n"
         mock_check_call.return_value = 0
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
 
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
-            "StreamUrl": "stream-url"
+            "StreamUrl": "stream-url",
         }
 
         self.client.start_session.return_value = start_session_response
 
-        rc = self.caller.invoke('ssm', 'StartSession',
-                                start_session_params, self.parsed_globals)
+        rc = self.caller.invoke(
+            'ssm', 'StartSession', start_session_params, self.parsed_globals
+        )
         self.assertEqual(rc, 0)
         self.client.start_session.assert_called_with(**start_session_params)
 
@@ -77,13 +76,15 @@ class TestSessionManager(unittest.TestCa
         mock_check_call_list[1] = json.loads(mock_check_call_list[1])
         self.assertEqual(
             mock_check_call_list,
-            ['session-manager-plugin',
-             start_session_response,
-             self.region,
-             'StartSession',
-             self.parsed_globals.profile,
-             json.dumps(start_session_params),
-             self.endpoint_url]
+            [
+                'session-manager-plugin',
+                start_session_response,
+                self.region,
+                'StartSession',
+                self.parsed_globals.profile,
+                json.dumps(start_session_params),
+                self.endpoint_url,
+            ],
         )
 
     @mock.patch("awscli.customizations.sessionmanager.check_output")
@@ -94,42 +95,46 @@ class TestSessionManager(unittest.TestCa
         mock_check_output.return_value = "1.2.0.0\n"
         mock_check_call.side_effect = OSError(errno.ENOENT, 'some error')
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
 
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
-            "StreamUrl": "stream-url"
+            "StreamUrl": "stream-url",
         }
 
-        terminate_session_params = {
-            "SessionId": "session-id"
-        }
+        terminate_session_params = {"SessionId": "session-id"}
 
         self.client.start_session.return_value = start_session_response
 
         with self.assertRaises(ValueError):
-            self.caller.invoke('ssm', 'StartSession',
-                               start_session_params, self.parsed_globals)
+            self.caller.invoke(
+                'ssm',
+                'StartSession',
+                start_session_params,
+                self.parsed_globals,
+            )
 
             self.client.start_session.assert_called_with(
-                **start_session_params)
+                **start_session_params
+            )
             self.client.terminate_session.assert_called_with(
-                **terminate_session_params)
+                **terminate_session_params
+            )
 
             mock_check_call_list = mock_check_call.call_args[0][0]
             mock_check_call_list[1] = json.loads(mock_check_call_list[1])
             self.assertEqual(
                 mock_check_call_list,
-                ['session-manager-plugin',
-                 start_session_response,
-                 self.region,
-                 'StartSession',
-                 self.parsed_globals.profile,
-                 json.dumps(start_session_params),
-                 self.endpoint_url]
+                [
+                    'session-manager-plugin',
+                    start_session_response,
+                    self.region,
+                    'StartSession',
+                    self.parsed_globals.profile,
+                    json.dumps(start_session_params),
+                    self.endpoint_url,
+                ],
             )
 
     @mock.patch('awscli.customizations.sessionmanager.check_call')
@@ -142,21 +147,20 @@ class TestSessionManager(unittest.TestCa
         self.parsed_globals.profile = None
         mock_check_call.return_value = 0
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
 
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
-            "StreamUrl": "stream-url"
+            "StreamUrl": "stream-url",
         }
         ssm_env_name = "AWS_SSM_START_SESSION_RESPONSE"
 
         self.client.start_session.return_value = start_session_response
 
-        rc = self.caller.invoke('ssm', 'StartSession',
-                                start_session_params, self.parsed_globals)
+        rc = self.caller.invoke(
+            'ssm', 'StartSession', start_session_params, self.parsed_globals
+        )
         self.assertEqual(rc, 0)
         self.client.start_session.assert_called_with(**start_session_params)
         mock_check_call_list = mock_check_call.call_args[0][0]
@@ -181,9 +185,7 @@ class TestSessionManager(unittest.TestCa
         mock_check_output.return_value = "1.2.500.0\n"
         mock_check_call.return_value = 0
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
 
         start_session_response = {
             "SessionId": "session-id",
@@ -220,7 +222,7 @@ class TestSessionManager(unittest.TestCa
         env_variable = mock_check_call.call_args[1]
         self.assertEqual(
             env_variable["env"][ssm_env_name],
-            json.dumps(start_session_response)
+            json.dumps(start_session_response),
         )
 
     @mock.patch("awscli.customizations.sessionmanager.check_call")
@@ -232,9 +234,7 @@ class TestSessionManager(unittest.TestCa
             returncode=1, cmd="session-manager-plugin", output="some error"
         )
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
@@ -247,7 +247,7 @@ class TestSessionManager(unittest.TestCa
                 "ssm",
                 "StartSession",
                 start_session_params,
-                self.parsed_globals
+                self.parsed_globals,
             )
 
         self.client.start_session.assert_called_with(**start_session_params)
@@ -263,9 +263,7 @@ class TestSessionManager(unittest.TestCa
         self, mock_check_output, mock_check_call
     ):
         mock_check_output.return_value = "1.2.500.0\n"
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
@@ -317,9 +315,7 @@ class TestSessionManager(unittest.TestCa
     ):
         mock_check_output.return_value = "InvalidVersion"
 
-        start_session_params = {
-            "Target": "i-123456789"
-        }
+        start_session_params = {"Target": "i-123456789"}
         start_session_response = {
             "SessionId": "session-id",
             "TokenValue": "token-value",
@@ -352,8 +348,9 @@ class TestSessionManager(unittest.TestCa
 
 
 class TestVersionRequirement:
-    version_requirement = \
-        sessionmanager.VersionRequirement(min_version="1.2.497.0")
+    version_requirement = sessionmanager.VersionRequirement(
+        min_version="1.2.497.0"
+    )
 
     @pytest.mark.parametrize(
         "version, expected_result",
@@ -382,8 +379,9 @@ class TestVersionRequirement:
         ],
     )
     def test_meets_requirement(self, version, expected_result):
-        assert expected_result == \
-            self.version_requirement.meets_requirement(version)
+        assert expected_result == self.version_requirement.meets_requirement(
+            version
+        )
 
     @pytest.mark.parametrize(
         "version, expected_result",
@@ -404,8 +402,10 @@ class TestVersionRequirement:
         ],
     )
     def test_sanitize_plugin_version(self, version, expected_result):
-        assert expected_result == \
-            self.version_requirement._sanitize_plugin_version(version)
+        assert (
+            expected_result
+            == self.version_requirement._sanitize_plugin_version(version)
+        )
 
     @pytest.mark.parametrize(
         "version, expected_result",
@@ -425,5 +425,6 @@ class TestVersionRequirement:
         ],
     )
     def test_is_valid_version(self, version, expected_result):
-        assert expected_result == \
-            self.version_requirement._is_valid_version(version)
+        assert expected_result == self.version_requirement._is_valid_version(
+            version
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/test_timestampformat.py 2.31.35-1/tests/unit/customizations/test_timestampformat.py
--- 2.23.6-1/tests/unit/customizations/test_timestampformat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_timestampformat.py	2025-11-12 19:17:29.000000000 +0000
@@ -23,7 +23,8 @@ class TestScalarParse(unittest.TestCase)
         event_handers = mock.Mock()
         timestampformat.register_timestamp_format(event_handers)
         event_handers.register_first.assert_called_with(
-            'session-initialized', timestampformat.add_timestamp_parser)
+            'session-initialized', timestampformat.add_timestamp_parser
+        )
 
     def test_identity(self):
         self.assertEqual(timestampformat.identity('foo'), 'foo')
@@ -31,8 +32,9 @@ class TestScalarParse(unittest.TestCase)
 
     def test_scalar_parsers_set(self):
         session = mock.Mock()
-        session.get_scoped_config.return_value = {'cli_timestamp_format':
-                                                  'wire'}
+        session.get_scoped_config.return_value = {
+            'cli_timestamp_format': 'wire'
+        }
         timestampformat.add_timestamp_parser(session)
         session.get_component.assert_called_with('response_parser_factory')
         factory = session.get_component.return_value
@@ -41,26 +43,31 @@ class TestScalarParse(unittest.TestCase)
 
     def test_choose_none_timestamp_formatter(self):
         session = mock.Mock(spec=Session)
-        session.get_scoped_config.return_value = {'cli_timestamp_format':
-                                                  'wire'}
+        session.get_scoped_config.return_value = {
+            'cli_timestamp_format': 'wire'
+        }
         factory = session.get_component.return_value
         timestampformat.add_timestamp_parser(session)
         factory.set_parser_defaults.assert_called_with(
-            timestamp_parser=timestampformat.identity)
+            timestamp_parser=timestampformat.identity
+        )
 
     def test_choose_iso_timestamp_formatter(self):
         session = mock.Mock(spec=Session)
-        session.get_scoped_config.return_value = {'cli_timestamp_format':
-                                                  'iso8601'}
+        session.get_scoped_config.return_value = {
+            'cli_timestamp_format': 'iso8601'
+        }
         factory = session.get_component.return_value
         timestampformat.add_timestamp_parser(session)
         factory.set_parser_defaults.assert_called_with(
-            timestamp_parser=timestampformat.iso_format)
+            timestamp_parser=timestampformat.iso_format
+        )
 
     def test_choose_invalid_timestamp_formatter(self):
         session = mock.Mock(spec=Session)
-        session.get_scoped_config.return_value = {'cli_timestamp_format':
-                                                  'foobar'}
+        session.get_scoped_config.return_value = {
+            'cli_timestamp_format': 'foobar'
+        }
         session.get_component.return_value
         with self.assertRaises(ConfigurationError):
             timestampformat.add_timestamp_parser(session)
@@ -71,4 +78,5 @@ class TestScalarParse(unittest.TestCase)
         factory = session.get_component.return_value
         timestampformat.add_timestamp_parser(session)
         factory.set_parser_defaults.assert_called_with(
-            timestamp_parser=timestampformat.iso_format)
+            timestamp_parser=timestampformat.iso_format
+        )
diff -pruN 2.23.6-1/tests/unit/customizations/test_utils.py 2.31.35-1/tests/unit/customizations/test_utils.py
--- 2.23.6-1/tests/unit/customizations/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,28 +10,27 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import io
 import argparse
+import io
 
 from botocore.exceptions import ClientError
 from botocore.model import Shape
 
 from awscli.customizations import utils
 from awscli.customizations.exceptions import ParamValidationError
-from awscli.testutils import mock, unittest
-from awscli.testutils import BaseAWSHelpOutputTest
+from awscli.testutils import BaseAWSHelpOutputTest, mock, unittest
 
 
-class FakeParsedArgs(object):
+class FakeParsedArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
 
 class TestCommandTableRenames(BaseAWSHelpOutputTest):
-
     def test_rename_command_table(self):
         handler = lambda command_table, **kwargs: utils.rename_command(
-            command_table, 'ec2', 'fooec2')
+            command_table, 'ec2', 'fooec2'
+        )
         # Verify that we can rename a top level command.
         self.session.register('building-command-table.main', handler)
         self.driver.main(['fooec2', 'help'])
@@ -43,7 +42,6 @@ class TestCommandTableRenames(BaseAWSHel
 
 
 class TestCommandTableAlias(BaseAWSHelpOutputTest):
-
     def test_alias_command_table(self):
         old_name = 'cloudhsmv2'
         new_name = 'nopossiblewaythisisalreadythere'
@@ -108,8 +106,11 @@ class TestValidateMututuallyExclusiveGro
             utils.validate_mutually_exclusive(parsed, ['foo'], ['bar'])
 
     def test_multiple_groups(self):
-        groups = (['one', 'two', 'three'], ['foo', 'bar', 'baz'],
-                  ['qux', 'bad', 'morebad'])
+        groups = (
+            ['one', 'two', 'three'],
+            ['foo', 'bar', 'baz'],
+            ['qux', 'bad', 'morebad'],
+        )
         # This is fine.
         parsed = FakeParsedArgs(foo='foo', bar='bar', baz='baz')
         utils.validate_mutually_exclusive(parsed, *groups)
@@ -124,24 +125,22 @@ class TestS3BucketExists(unittest.TestCa
         self.s3_client = mock.Mock()
         self.bucket_name = 'mybucket'
         self.error_response = {
-            'Error': {
-                'Code': '404',
-                'Message': 'Not Found'
-            }
+            'Error': {'Code': '404', 'Message': 'Not Found'}
         }
         self.bucket_no_exists_error = ClientError(
-            self.error_response,
-            'HeadBucket'
+            self.error_response, 'HeadBucket'
         )
 
     def test_bucket_exists(self):
         self.assertTrue(
-            utils.s3_bucket_exists(self.s3_client, self.bucket_name))
+            utils.s3_bucket_exists(self.s3_client, self.bucket_name)
+        )
 
     def test_bucket_not_exists(self):
         self.s3_client.head_bucket.side_effect = self.bucket_no_exists_error
         self.assertFalse(
-            utils.s3_bucket_exists(self.s3_client, self.bucket_name))
+            utils.s3_bucket_exists(self.s3_client, self.bucket_name)
+        )
 
     def test_bucket_exists_with_non_404(self):
         self.error_response['Error']['Code'] = '403'
@@ -149,7 +148,8 @@ class TestS3BucketExists(unittest.TestCa
         forbidden_error = ClientError(self.error_response, 'HeadBucket')
         self.s3_client.head_bucket.side_effect = forbidden_error
         self.assertTrue(
-            utils.s3_bucket_exists(self.s3_client, self.bucket_name))
+            utils.s3_bucket_exists(self.s3_client, self.bucket_name)
+        )
 
 
 class TestClientCreationFromGlobals(unittest.TestCase):
@@ -164,35 +164,38 @@ class TestClientCreationFromGlobals(unit
 
     def test_creates_clients_with_no_overrides(self):
         client = utils.create_client_from_parsed_globals(
-            self.session, 'ec2', self.parsed_globals)
+            self.session, 'ec2', self.parsed_globals
+        )
         self.assertEqual(self.fake_client, client)
         self.session.create_client.assert_called_once_with(
             'ec2',
             region_name='us-west-2',
             verify=False,
-            endpoint_url='https://foo.bar.com'
+            endpoint_url='https://foo.bar.com',
         )
 
     def test_creates_clients_with_overrides(self):
         overrides = {
             'region_name': 'custom',
             'verify': True,
-            'other_thing': 'more custom'
+            'other_thing': 'more custom',
         }
         client = utils.create_client_from_parsed_globals(
-            self.session, 'ec2', self.parsed_globals, overrides)
+            self.session, 'ec2', self.parsed_globals, overrides
+        )
         self.assertEqual(self.fake_client, client)
         self.session.create_client.assert_called_once_with(
             'ec2',
             region_name='custom',
             verify=True,
             other_thing='more custom',
-            endpoint_url='https://foo.bar.com'
+            endpoint_url='https://foo.bar.com',
         )
 
     def test_creates_clients_with_no_parsed_globals(self):
         client = utils.create_client_from_parsed_globals(
-            self.session, 'ec2', argparse.Namespace())
+            self.session, 'ec2', argparse.Namespace()
+        )
         self.assertEqual(self.fake_client, client)
         self.session.create_client.assert_called_once_with('ec2')
 
@@ -205,6 +208,7 @@ class MockPipedStdout(io.BytesIO):
     `UTF-8`. The attribute is also `readonly` in `TextIOWrapper` and
     `TextIOBase` so it cannot be overwritten in subclasses.
     """
+
     def __init__(self):
         self.encoding = None
 
@@ -221,24 +225,23 @@ class MockPipedStdout(io.BytesIO):
 
 
 class TestUniPrint(unittest.TestCase):
-
     def test_out_file_with_encoding_attribute(self):
         buf = io.BytesIO()
         out = io.TextIOWrapper(buf, encoding='utf-8')
-        utils.uni_print(u'\u2713', out)
-        self.assertEqual(buf.getvalue(), u'\u2713'.encode('utf-8'))
+        utils.uni_print('\u2713', out)
+        self.assertEqual(buf.getvalue(), '\u2713'.encode())
 
     def test_encoding_with_encoding_none(self):
         '''When the output of the aws command is being piped,
         the `encoding` attribute of `sys.stdout` is `None`.'''
         out = MockPipedStdout()
-        utils.uni_print(u'SomeChars\u2713\u2714OtherChars', out)
+        utils.uni_print('SomeChars\u2713\u2714OtherChars', out)
         self.assertEqual(out.getvalue(), b'SomeChars??OtherChars')
 
     def test_encoding_statement_fails_are_replaced(self):
         buf = io.BytesIO()
         out = io.TextIOWrapper(buf, encoding='ascii')
-        utils.uni_print(u'SomeChars\u2713\u2714OtherChars', out)
+        utils.uni_print('SomeChars\u2713\u2714OtherChars', out)
         # We replace the characters that can't be encoded
         # with '?'.
         self.assertEqual(buf.getvalue(), b'SomeChars??OtherChars')
@@ -246,10 +249,16 @@ class TestUniPrint(unittest.TestCase):
 
 class TestGetPolicyARNSuffix(unittest.TestCase):
     def test_get_policy_arn_suffix(self):
-        self.assertEqual("aws-cn", utils.get_policy_arn_suffix("cn-northwest-1"))
-        self.assertEqual("aws-cn", utils.get_policy_arn_suffix("cn-northwest-2"))
+        self.assertEqual(
+            "aws-cn", utils.get_policy_arn_suffix("cn-northwest-1")
+        )
+        self.assertEqual(
+            "aws-cn", utils.get_policy_arn_suffix("cn-northwest-2")
+        )
         self.assertEqual("aws-cn", utils.get_policy_arn_suffix("cn-north-1"))
-        self.assertEqual("aws-us-gov", utils.get_policy_arn_suffix("us-gov-west-1"))
+        self.assertEqual(
+            "aws-us-gov", utils.get_policy_arn_suffix("us-gov-west-1")
+        )
         self.assertEqual("aws", utils.get_policy_arn_suffix("ca-central-1"))
         self.assertEqual("aws", utils.get_policy_arn_suffix("us-east-1"))
         self.assertEqual("aws", utils.get_policy_arn_suffix("sa-east-1"))
@@ -266,47 +275,47 @@ class TestGetShapeDocOverview(unittest.T
     def test_get_shape_doc_overview(self):
         self.assert_expected_shape_overview(
             shape_docs='Shape documentation',
-            expected_overview='Shape documentation.'
+            expected_overview='Shape documentation.',
         )
 
     def test_uses_content_before_first_period(self):
         self.assert_expected_shape_overview(
             shape_docs='First sentence. Second Sentence.',
-            expected_overview='First sentence.'
+            expected_overview='First sentence.',
         )
 
     def test_uses_content_before_first_colon(self):
         self.assert_expected_shape_overview(
             shape_docs='<p>Broken XML docs',
-            expected_overview='<p>Broken XML docs.'
+            expected_overview='<p>Broken XML docs.',
         )
 
     def test_removes_xml_tags(self):
         self.assert_expected_shape_overview(
             shape_docs='<p>Shape documentation</p>',
-            expected_overview='Shape documentation.'
+            expected_overview='Shape documentation.',
         )
 
     def test_removes_nested_xml_tags(self):
         self.assert_expected_shape_overview(
             shape_docs='<p>Shape <code>documentation</code></p>',
-            expected_overview='Shape documentation.'
+            expected_overview='Shape documentation.',
         )
 
     def test_can_handle_broken_xml(self):
         self.assert_expected_shape_overview(
             shape_docs='<p>Broken XML docs',
-            expected_overview='<p>Broken XML docs.'
+            expected_overview='<p>Broken XML docs.',
         )
 
     def test_ignores_newlines(self):
         self.assert_expected_shape_overview(
             shape_docs='First line\nSecond line',
-            expected_overview='First line Second line.'
+            expected_overview='First line Second line.',
         )
 
     def test_ignores_line_separator_char(self):
         self.assert_expected_shape_overview(
             shape_docs='First line\u2028Second line',
-            expected_overview='First line Second line.'
+            expected_overview='First line Second line.',
         )
diff -pruN 2.23.6-1/tests/unit/customizations/test_waiters.py 2.31.35-1/tests/unit/customizations/test_waiters.py
--- 2.23.6-1/tests/unit/customizations/test_waiters.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/test_waiters.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,25 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.waiter import WaiterModel
 from botocore.exceptions import DataNotFoundError
+from botocore.waiter import WaiterModel
 
-from awscli.testutils import mock, unittest, BaseAWSHelpOutputTest, \
-    BaseAWSCommandParamsTest
 from awscli.customizations.exceptions import ParamValidationError
-from awscli.customizations.waiters import add_waiters, WaitCommand, \
-    get_waiter_model_from_service_model, WaiterStateCommand, WaiterCaller, \
-    WaiterStateDocBuilder, WaiterStateCommandBuilder
+from awscli.customizations.waiters import (
+    WaitCommand,
+    WaiterCaller,
+    WaiterStateCommand,
+    WaiterStateCommandBuilder,
+    WaiterStateDocBuilder,
+    add_waiters,
+    get_waiter_model_from_service_model,
+)
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    BaseAWSHelpOutputTest,
+    mock,
+    unittest,
+)
 
 
 class TestAddWaiters(unittest.TestCase):
@@ -35,7 +45,7 @@ class TestAddWaiters(unittest.TestCase):
                 'version': 2,
                 'waiters': {
                     'FooExists': {},
-                }
+                },
             }
         )
 
@@ -51,7 +61,7 @@ class TestAddWaiters(unittest.TestCase):
             {
                 'version': 2,
                 # No waiters are specified.
-                'waiters': {}
+                'waiters': {},
             }
         )
         command_table = {}
@@ -70,7 +80,8 @@ class TestAddWaiters(unittest.TestCase):
 
     def test_add_waiter_no_waiter_config(self):
         self.session.get_waiter_model.side_effect = DataNotFoundError(
-            data_path='foo')
+            data_path='foo'
+        )
         command_table = {}
         add_waiters(command_table, self.session, self.command_object)
         self.assertEqual(command_table, {})
@@ -91,23 +102,29 @@ class TestServicetoWaiterModel(unittest.
         service_model.service_name = 'service'
         service_model.api_version = '2014-01-01'
         session.get_waiter_model.side_effect = DataNotFoundError(
-            data_path='foo')
+            data_path='foo'
+        )
         self.assertIsNone(
-            get_waiter_model_from_service_model(session, service_model))
+            get_waiter_model_from_service_model(session, service_model)
+        )
 
 
 class TestWaitCommand(unittest.TestCase):
     def setUp(self):
         self.session = mock.Mock()
-        self.model = WaiterModel({
-            'version': 2,
-            'waiters': {
-                'Foo': {
-                    'operation': 'foo', 'maxAttempts': 1, 'delay': 1,
-                    'acceptors': [],
-                }
+        self.model = WaiterModel(
+            {
+                'version': 2,
+                'waiters': {
+                    'Foo': {
+                        'operation': 'foo',
+                        'maxAttempts': 1,
+                        'delay': 1,
+                        'acceptors': [],
+                    }
+                },
             }
-        })
+        )
         self.service_model = mock.Mock()
         self.cmd = WaitCommand(self.session, self.model, self.service_model)
 
@@ -140,7 +157,8 @@ class TestWaitHelpOutput(BaseAWSHelpOutp
         self.driver.main(['ec2', 'wait', 'instance-running', 'help'])
         self.assert_contains('.. _cli:aws ec2 wait instance-running:')
         self.assert_contains(
-            'Wait until JMESPath query Reservations[].Instances[].State.Name')
+            'Wait until JMESPath query Reservations[].Instances[].State.Name'
+        )
         self.assert_contains('poll every')
         self.assert_contains('This will exit with a return code of 255 after')
         self.assert_contains('``describe-instances``')
@@ -150,26 +168,22 @@ class TestWaitHelpOutput(BaseAWSHelpOutp
 
 
 class TestWait(BaseAWSCommandParamsTest):
-    """ This is merely a smoke test.
+    """This is merely a smoke test.
 
     Its purpose is to test that the wait command can be run proberly for
     various services. It is by no means exhaustive.
     """
+
     def test_ec2_instance_running(self):
         cmdline = 'ec2 wait instance-running'
         cmdline += ' --instance-ids i-12345678 i-87654321'
         cmdline += """ --filters {"Name":"group-name","Values":["foobar"]}"""
-        result = {'Filters': [{'Name': 'group-name',
-                               'Values': ['foobar']}],
-                  'InstanceIds': ['i-12345678', 'i-87654321']}
+        result = {
+            'Filters': [{'Name': 'group-name', 'Values': ['foobar']}],
+            'InstanceIds': ['i-12345678', 'i-87654321'],
+        }
         self.parsed_response = {
-            'Reservations': [{
-                'Instances': [{
-                    'State': {
-                        'Name': 'running'
-                    }
-                }]
-            }]
+            'Reservations': [{'Instances': [{'State': {'Name': 'running'}}]}]
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -185,9 +199,7 @@ class TestWait(BaseAWSCommandParamsTest)
         cmdline += ' --db-instance-identifier abc'
         result = {'DBInstanceIdentifier': 'abc'}
         self.parsed_response = {
-            'DBInstances': [{
-                'DBInstanceStatus': 'available'
-            }]
+            'DBInstances': [{'DBInstanceStatus': 'available'}]
         }
         self.assert_params_for_cmd(cmdline, result)
 
@@ -198,28 +210,28 @@ class TestWaiterStateCommandBuilder(unit
         self.service_model = mock.Mock()
 
         # Create some waiters.
-        self.model = WaiterModel({
-            'version': 2,
-            'waiters': {
-                'InstanceRunning': {
-                    'description': 'My waiter description.',
-                    'delay': 1,
-                    'maxAttempts': 10,
-                    'operation': 'MyOperation',
+        self.model = WaiterModel(
+            {
+                'version': 2,
+                'waiters': {
+                    'InstanceRunning': {
+                        'description': 'My waiter description.',
+                        'delay': 1,
+                        'maxAttempts': 10,
+                        'operation': 'MyOperation',
+                    },
+                    'BucketExists': {
+                        'description': 'My waiter description.',
+                        'operation': 'MyOperation',
+                        'delay': 1,
+                        'maxAttempts': 10,
+                    },
                 },
-                'BucketExists': {
-                    'description': 'My waiter description.',
-                    'operation': 'MyOperation',
-                    'delay': 1,
-                    'maxAttempts': 10,
-                }
             }
-        })
+        )
 
         self.waiter_builder = WaiterStateCommandBuilder(
-            self.session,
-            self.model,
-            self.service_model
+            self.session, self.model, self.service_model
         )
 
     def test_build_waiter_state_cmds(self):
@@ -246,13 +258,13 @@ class TestWaiterStateCommandBuilder(unit
             instance_running_cmd.DESCRIPTION,
             'My waiter description. It will poll every 1 seconds until '
             'a successful state has been reached. This will exit with a '
-            'return code of 255 after 10 failed checks.'
+            'return code of 255 after 10 failed checks.',
         )
         self.assertEqual(
             bucket_exists_cmd.DESCRIPTION,
             'My waiter description. It will poll every 1 seconds until '
             'a successful state has been reached. This will exit with a '
-            'return code of 255 after 10 failed checks.'
+            'return code of 255 after 10 failed checks.',
         )
 
 
@@ -274,7 +286,7 @@ class TestWaiterStateDocBuilder(unittest
         self.waiter_config.acceptors = [
             self.fail_acceptor,
             self.success_acceptor,
-            self.error_acceptor
+            self.error_acceptor,
         ]
 
         self.doc_builder = WaiterStateDocBuilder(self.waiter_config)
@@ -287,7 +299,8 @@ class TestWaiterStateDocBuilder(unittest
             description,
             'My description. It will poll every 5 seconds until a '
             'successful state has been reached. This will exit with a '
-            'return code of 255 after 20 failed checks.')
+            'return code of 255 after 20 failed checks.',
+        )
 
     def test_error_acceptor(self):
         self.success_acceptor.matcher = 'error'
@@ -298,7 +311,7 @@ class TestWaiterStateDocBuilder(unittest
             'Wait until MyException is thrown when polling with '
             '``my-operation``. It will poll every 5 seconds until a '
             'successful state has been reached. This will exit with a '
-            'return code of 255 after 20 failed checks.'
+            'return code of 255 after 20 failed checks.',
         )
 
     def test_status_acceptor(self):
@@ -310,7 +323,7 @@ class TestWaiterStateDocBuilder(unittest
             'Wait until 200 response is received when polling with '
             '``my-operation``. It will poll every 5 seconds until a '
             'successful state has been reached. This will exit with a '
-            'return code of 255 after 20 failed checks.'
+            'return code of 255 after 20 failed checks.',
         )
 
     def test_path_acceptor(self):
@@ -323,7 +336,7 @@ class TestWaiterStateDocBuilder(unittest
             'Wait until JMESPath query MyResource.name returns running when '
             'polling with ``my-operation``. It will poll every 5 seconds '
             'until a successful state has been reached. This will exit with '
-            'a return code of 255 after 20 failed checks.'
+            'a return code of 255 after 20 failed checks.',
         )
 
     def test_path_all_acceptor(self):
@@ -336,7 +349,7 @@ class TestWaiterStateDocBuilder(unittest
             'Wait until JMESPath query MyResource[].name returns running for '
             'all elements when polling with ``my-operation``. It will poll '
             'every 5 seconds until a successful state has been reached. '
-            'This will exit with a return code of 255 after 20 failed checks.'
+            'This will exit with a return code of 255 after 20 failed checks.',
         )
 
     def test_path_any_acceptor(self):
@@ -349,7 +362,7 @@ class TestWaiterStateDocBuilder(unittest
             'Wait until JMESPath query MyResource[].name returns running for '
             'any element when polling with ``my-operation``. It will poll '
             'every 5 seconds until a successful state has been reached. '
-            'This will exit with a return code of 255 after 20 failed checks.'
+            'This will exit with a return code of 255 after 20 failed checks.',
         )
 
 
@@ -367,21 +380,22 @@ class TestWaiterCaller(unittest.TestCase
         parsed_globals.verify_ssl = True
 
         waiter_caller = WaiterCaller(session, waiter_name)
-        waiter_caller.invoke('myservice', 'MyWaiter', parameters,
-                             parsed_globals)
+        waiter_caller.invoke(
+            'myservice', 'MyWaiter', parameters, parsed_globals
+        )
 
         # Make sure the client was created properly.
         session.create_client.assert_called_with(
             'myservice',
             region_name=parsed_globals.region,
             endpoint_url=parsed_globals.endpoint_url,
-            verify=parsed_globals.verify_ssl
+            verify=parsed_globals.verify_ssl,
         )
 
         # Make sure we got the correct waiter.
         session.create_client.return_value.get_waiter.assert_called_with(
-            waiter_name)
+            waiter_name
+        )
 
         # Ensure the wait command was called properly.
-        waiter.wait.assert_called_with(
-            Foo='bar', Baz='biz')
+        waiter.wait.assert_called_with(Foo='bar', Baz='biz')
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/test_app.py 2.31.35-1/tests/unit/customizations/wizard/test_app.py
--- 2.23.6-1/tests/unit/customizations/wizard/test_app.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/test_app.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,25 +10,29 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-
+import pytest
 from botocore.session import Session
 from prompt_toolkit.application import Application
-from prompt_toolkit.completion import PathCompleter, Completion
+from prompt_toolkit.completion import Completion, PathCompleter
 from prompt_toolkit.keys import Keys
 from prompt_toolkit.layout import walk
-import pytest
 
-from tests import PromptToolkitAppRunner
-from awscli.customizations.wizard.factory import create_wizard_app
 from awscli.customizations.wizard.app import (
-    WizardAppRunner, WizardTraverser, WizardValues, FileIO
+    FileIO,
+    WizardAppRunner,
+    WizardTraverser,
+    WizardValues,
 )
+from awscli.customizations.wizard.core import BaseStep, Executor
 from awscli.customizations.wizard.exceptions import (
-    InvalidChoiceException, UnableToRunWizardError, UnexpectedWizardException,
-    InvalidDataTypeConversionException
+    InvalidChoiceException,
+    InvalidDataTypeConversionException,
+    UnableToRunWizardError,
+    UnexpectedWizardException,
 )
-from awscli.customizations.wizard.core import BaseStep, Executor
+from awscli.customizations.wizard.factory import create_wizard_app
+from awscli.testutils import mock, unittest
+from tests import PromptToolkitAppRunner
 
 
 @pytest.fixture
@@ -42,14 +46,8 @@ def mock_iam_client(mock_botocore_sessio
     mock_botocore_session.create_client.return_value = mock_client
     mock_client.list_policies.return_value = {
         'Policies': [
-            {
-                'PolicyName': 'policy1',
-                'Arn': 'policy1_arn'
-            },
-            {
-                'PolicyName': 'policy2',
-                'Arn': 'policy2_arn'
-            }
+            {'PolicyName': 'policy1', 'Arn': 'policy1_arn'},
+            {'PolicyName': 'policy2', 'Arn': 'policy2_arn'},
         ]
     }
     mock_client.get_policy.return_value = {
@@ -75,14 +73,16 @@ def make_stubbed_wizard_runner(ptk_app_s
         )
         ptk_app_session.app = app
         return PromptToolkitAppRunner(app=app)
+
     yield _make_stubbed_wizard_runner
 
 
 @pytest.fixture
 def patch_path_completer():
     with mock.patch(
-            'awscli.customizations.wizard.ui.prompt.PathCompleter',
-            FakePathCompleter) as completer:
+        'awscli.customizations.wizard.ui.prompt.PathCompleter',
+        FakePathCompleter,
+    ) as completer:
         yield completer
 
 
@@ -102,7 +102,7 @@ def empty_definition():
         'plan': {
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -116,32 +116,32 @@ def basic_definition():
                 'values': {
                     'prompt1': {
                         'description': 'Description of first prompt',
-                        'type': 'prompt'
+                        'type': 'prompt',
                     },
                     'prompt2': {
                         'description': 'Description of second prompt',
                         'type': 'prompt',
-                        'default_value': 'foo'
+                        'default_value': 'foo',
                     },
-                }
+                },
             },
             'second_section': {
                 'shortname': 'Second',
                 'values': {
                     'second_section_prompt': {
                         'description': 'Description of prompt',
-                        'type': 'prompt'
+                        'type': 'prompt',
                     },
                     'template_section': {
                         'type': 'template',
                         'value': 'some text',
-                    }
-                }
+                    },
+                },
             },
             '__DONE__': {},
         },
         'execute': {},
-        '__OUTPUT__': {'value': 'output: {template_section}'}
+        '__OUTPUT__': {'value': 'output: {template_section}'},
     }
 
 
@@ -155,25 +155,25 @@ def conditional_definition():
                 'values': {
                     'before_conditional': {
                         'description': 'Description of first prompt',
-                        'type': 'prompt'
+                        'type': 'prompt',
                     },
                     'conditional': {
                         'description': 'Description of second prompt',
                         'type': 'prompt',
                         'condition': {
                             'variable': 'before_conditional',
-                            'equals': 'condition-met'
-                        }
+                            'equals': 'condition-met',
+                        },
                     },
                     'after_conditional': {
                         'description': 'Description of second prompt',
                         'type': 'prompt',
                     },
-                }
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -191,19 +191,19 @@ def choices_definition():
                         'choices': [
                             {
                                 'display': 'Option 1',
-                                'actual_value': 'actual_option_1'
+                                'actual_value': 'actual_option_1',
                             },
                             {
                                 'display': 'Option 2',
-                                'actual_value': 'actual_option_2'
-                            }
-                        ]
+                                'actual_value': 'actual_option_2',
+                            },
+                        ],
                     }
-                }
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -218,17 +218,17 @@ def corrupted_choice_definition():
                     'choices_prompt': {
                         'description': 'Description of first prompt',
                         'type': 'prompt',
-                        'choices': 'corrupted_choice'
+                        'choices': 'corrupted_choice',
                     },
                     'corrupted_choice': {
                         'description': 'Description of first prompt',
                         'type': 'apicall',
-                    }
-                }
+                    },
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -247,16 +247,13 @@ def mixed_prompt_definition():
                     'select_prompt': {
                         'description': 'Select answer',
                         'type': 'prompt',
-                        'choices': [
-                            'select_answer_1',
-                            'select_answer_2'
-                        ]
-                    }
-                }
+                        'choices': ['select_answer_1', 'select_answer_2'],
+                    },
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -271,18 +268,18 @@ def data_convert_definition():
                     'buffer_input_int': {
                         'description': 'Type answer',
                         'type': 'prompt',
-                        'datatype': 'int'
+                        'datatype': 'int',
                     },
                     'buffer_input_bool': {
                         'description': 'Type answer',
                         'type': 'prompt',
-                        'datatype': 'bool'
+                        'datatype': 'bool',
                     },
-                }
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -301,18 +298,18 @@ def api_call_definition():
                         'query': (
                             'sort_by(Policies[].{display: PolicyName, '
                             'actual_value: Arn}, &display)'
-                        )
+                        ),
                     },
                     'choose_policy': {
                         'description': 'Choose policy',
                         'type': 'prompt',
-                        'choices': 'existing_policies'
-                    }
-                }
+                        'choices': 'existing_policies',
+                    },
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -327,21 +324,19 @@ def details_definition():
                     'version_id': {
                         'type': 'apicall',
                         'operation': 'iam.GetPolicy',
-                        'params': {
-                            'PolicyArn': '{policy_arn}'
-                        },
+                        'params': {'PolicyArn': '{policy_arn}'},
                         'query': 'Policy.DefaultVersionId',
-                        'cache': True
+                        'cache': True,
                     },
                     'policy_document': {
                         'type': 'apicall',
                         'operation': 'iam.GetPolicyVersion',
                         'params': {
                             'PolicyArn': '{policy_arn}',
-                            'VersionId': '{version_id}'
+                            'VersionId': '{version_id}',
                         },
                         'query': 'PolicyVersion.Document',
-                        'cache': True
+                        'cache': True,
                     },
                     'existing_policies': {
                         'type': 'apicall',
@@ -350,7 +345,7 @@ def details_definition():
                         'query': (
                             'sort_by(Policies[].{display: PolicyName, '
                             'actual_value: Arn}, &display)'
-                        )
+                        ),
                     },
                     'policy_arn': {
                         'description': 'Choose policy',
@@ -359,19 +354,19 @@ def details_definition():
                         'details': {
                             'value': 'policy_document',
                             'description': 'Policy Document',
-                            'output': 'json'
+                            'output': 'json',
                         },
                     },
                     'some_prompt': {
                         'description': 'Choose something',
                         'type': 'prompt',
                         'choices': [1, 2, 3],
-                    }
-                }
+                    },
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -385,27 +380,23 @@ def preview_definition():
                 'values': {
                     'option1': {
                         'type': 'template',
-                        'value': "First option details"
+                        'value': "First option details",
                     },
                     'option2': {
                         'type': 'template',
-                        'value': "Second option details"
+                        'value': "Second option details",
                     },
                     'some_prompt': {
                         'description': 'Choose something',
                         'type': 'prompt',
-                        'choices': [{
-                            'display': '1', 'actual_value': '2'
-                        }],
+                        'choices': [{'display': '1', 'actual_value': '2'}],
                     },
                     'choose_option': {
                         'description': 'Choose option',
                         'type': 'prompt',
                         'choices': [
-                            {'display': 'Option 1',
-                             'actual_value': 'option1'},
-                            {'display': 'Option 2',
-                             'actual_value': 'option2'},
+                            {'display': 'Option 1', 'actual_value': 'option1'},
+                            {'display': 'Option 2', 'actual_value': 'option2'},
                         ],
                         'details': {
                             'visible': True,
@@ -413,10 +404,10 @@ def preview_definition():
                             'description': 'Option details',
                         },
                     },
-                }
+                },
             },
             '__DONE__': {},
-        }
+        },
     }
 
 
@@ -435,12 +426,12 @@ def shared_config_definition():
                     'choose_profile': {
                         'description': 'Choose profile',
                         'type': 'prompt',
-                        'choices': 'existing_profiles'
-                    }
-                }
+                        'choices': 'existing_profiles',
+                    },
+                },
             },
             '__DONE__': {},
-        }
+        },
     }
 
 
@@ -454,9 +445,9 @@ def run_wizard_definition():
                 'values': {
                     'role_name': {
                         'type': 'prompt',
-                        'description': 'Enter role name'
+                        'description': 'Enter role name',
                     }
-                }
+                },
             },
             '__DONE__': {},
         },
@@ -465,15 +456,12 @@ def run_wizard_definition():
                 {
                     'type': 'apicall',
                     'operation': 'iam.CreateRole',
-                    'params': {
-                        'RoleName': "{role_name}"
-                    },
+                    'params': {'RoleName': "{role_name}"},
                     'output_var': 'role_arn',
                     'query': 'Role.Arn',
                 }
-
             ]
-        }
+        },
     }
 
 
@@ -488,17 +476,17 @@ def file_prompt_definition():
                     'choose_file': {
                         'description': 'Choose file',
                         'type': 'prompt',
-                        'completer': 'file_completer'
+                        'completer': 'file_completer',
                     },
                     'second_prompt': {
                         'description': 'Second prompt',
                         'type': 'prompt',
-                    }
-                }
+                    },
+                },
             },
             '__DONE__': {},
         },
-        'execute': {}
+        'execute': {},
     }
 
 
@@ -538,7 +526,8 @@ class BaseWizardApplicationTest:
         assert app.layout.current_buffer.name, buffer_name
 
     def assert_expected_buffer_completions(
-            self, app, buffer_name, expected_completions):
+        self, app, buffer_name, expected_completions
+    ):
         buffer = app.layout.get_buffer_by_name(buffer_name)
         assert buffer.complete_state.completions == expected_completions
 
@@ -558,20 +547,28 @@ class BaseWizardApplicationTest:
 
     def assert_toolbar_has_text(self, app, text):
         assert any(
-            [text in tip[1]
-             for tip in list(filter(
-                lambda x: getattr(x, 'name', '') == 'toolbar_panel',
-                app.layout.find_all_controls())
-            )[0].text()()]
+            [
+                text in tip[1]
+                for tip in list(
+                    filter(
+                        lambda x: getattr(x, 'name', '') == 'toolbar_panel',
+                        app.layout.find_all_controls(),
+                    )
+                )[0].text()()
+            ]
         )
 
     def assert_toolbar_does_not_have_text(self, app, text):
         assert not any(
-            [text in tip[1]
-             for tip in list(filter(
-                lambda x: getattr(x, 'name', '') == 'toolbar_panel',
-                app.layout.find_all_controls())
-            )[0].text()()]
+            [
+                text in tip[1]
+                for tip in list(
+                    filter(
+                        lambda x: getattr(x, 'name', '') == 'toolbar_panel',
+                        app.layout.find_all_controls(),
+                    )
+                )[0].text()()
+            ]
         )
 
     def get_visible_buffers(self, app):
@@ -587,26 +584,31 @@ class BaseWizardApplicationTest:
 
 class TestBasicWizardApplication(BaseWizardApplicationTest):
     def test_can_answer_single_prompt(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1\n')
             self.assert_app_values(app_runner.app, prompt1='val1')
 
     def test_can_answer_multiple_prompts(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1\n')
             # This is to remove the default answer of foo for prompt 2
             app_runner.feed_input(
-                Keys.Backspace, Keys.Backspace, Keys.Backspace)
+                Keys.Backspace, Keys.Backspace, Keys.Backspace
+            )
             app_runner.feed_input('val2\n')
             self.assert_app_values(
-                app_runner.app, prompt1='val1', prompt2='val2')
+                app_runner.app, prompt1='val1', prompt2='val2'
+            )
 
     def test_can_use_tab_to_submit_answer(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1')
@@ -614,7 +616,8 @@ class TestBasicWizardApplication(BaseWiz
             self.assert_app_values(app_runner.app, prompt1='val1')
 
     def test_can_use_prompt_default_value(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Tab)
@@ -622,7 +625,8 @@ class TestBasicWizardApplication(BaseWiz
             self.assert_app_values(app_runner.app, prompt1='', prompt2='foo')
 
     def test_can_use_shift_tab_to_toggle_backwards_and_change_answer(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('1\n')
@@ -630,22 +634,27 @@ class TestBasicWizardApplication(BaseWiz
             app_runner.feed_input(Keys.Backspace)
             app_runner.feed_input('override1\n')
             self.assert_app_values(
-                app_runner.app, prompt1='override1', prompt2='foo')
+                app_runner.app, prompt1='override1', prompt2='foo'
+            )
 
     def test_can_answer_prompts_across_sections(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1\n')
             app_runner.feed_input('\n')
             app_runner.feed_input('second_section_val1\n')
             self.assert_app_values(
-                app_runner.app, prompt1='val1', prompt2='foo',
-                second_section_prompt='second_section_val1'
+                app_runner.app,
+                prompt1='val1',
+                prompt2='foo',
+                second_section_prompt='second_section_val1',
             )
 
     def test_can_move_back_to_a_prompt_in_previous_section(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1\n')
@@ -657,21 +666,26 @@ class TestBasicWizardApplication(BaseWiz
             app_runner.feed_input(Keys.BackTab)
             # This is to remove the default answer of foo for prompt 2
             app_runner.feed_input(
-                Keys.Backspace, Keys.Backspace, Keys.Backspace)
+                Keys.Backspace, Keys.Backspace, Keys.Backspace
+            )
             app_runner.feed_input('override2\n')
             self.assert_app_values(
-                app_runner.app, prompt1='val1', prompt2='override2',
-                second_section_prompt='second_section_val1'
+                app_runner.app,
+                prompt1='val1',
+                prompt2='override2',
+                second_section_prompt='second_section_val1',
             )
 
     def test_prompts_are_not_visible_across_sections(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             self.assert_prompt_is_visible(app_runner.app, 'prompt1')
             self.assert_prompt_is_visible(app_runner.app, 'prompt2')
             self.assert_prompt_is_not_visible(
-                app_runner.app, 'second_section_prompt')
+                app_runner.app, 'second_section_prompt'
+            )
 
             app_runner.feed_input('val1\n')
             app_runner.feed_input('val2\n')
@@ -679,10 +693,12 @@ class TestBasicWizardApplication(BaseWiz
             self.assert_prompt_is_not_visible(app_runner.app, 'prompt1')
             self.assert_prompt_is_not_visible(app_runner.app, 'prompt2')
             self.assert_prompt_is_visible(
-                app_runner.app, 'second_section_prompt')
+                app_runner.app, 'second_section_prompt'
+            )
 
     def test_run_wizard_dialog_appears_only_at_end_of_wizard(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
 
         with app_runner.run_app_in_thread():
@@ -695,7 +711,8 @@ class TestBasicWizardApplication(BaseWiz
             self.assert_run_wizard_dialog_is_visible(app_runner.app)
 
     def test_enter_at_wizard_dialog_exits_app_with_zero_rc(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread() as ctx:
             app_runner.feed_input('val1\n')
@@ -706,7 +723,8 @@ class TestBasicWizardApplication(BaseWiz
         assert ctx.return_value == 0
 
     def test_can_go_back_from_run_wizard_dialog(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('val1\n')
@@ -716,24 +734,29 @@ class TestBasicWizardApplication(BaseWiz
             app_runner.feed_input(Keys.Right, Keys.Enter)
             app_runner.feed_input('_override\n')
             self.assert_app_values(
-                app_runner.app, prompt1='val1', prompt2='foo',
-                second_section_prompt='second_section_val1_override'
+                app_runner.app,
+                prompt1='val1',
+                prompt2='foo',
+                second_section_prompt='second_section_val1_override',
             )
 
     def test_traverser_get_output(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         assert app_runner.app.traverser.get_output() == 'output: some text'
 
     def test_can_exit_and_propagate_ctrl_c_from_wizard(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread() as ctx:
             app_runner.feed_input(Keys.ControlC)
         assert isinstance(ctx.raised_exception, KeyboardInterrupt)
 
     def test_captures_unexpected_errors_when_processing_input(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         unexpected_error = ValueError('Not expected')
 
@@ -747,17 +770,20 @@ class TestBasicWizardApplication(BaseWiz
         assert ctx.raised_exception.original_exception is unexpected_error
 
     def test_cant_open_save_panel_if_no_details_available(
-            self, make_stubbed_wizard_runner, basic_definition):
+        self, make_stubbed_wizard_runner, basic_definition
+    ):
         app_runner = make_stubbed_wizard_runner(basic_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.ControlS)
             assert 'save_details_dialogue' not in self.get_visible_buffers(
-                app_runner.app)
+                app_runner.app
+            )
 
 
 class TestConditionalWizardApplication(BaseWizardApplicationTest):
     def test_conditional_prompt_is_skipped_when_condition_not_met(
-            self, make_stubbed_wizard_runner, conditional_definition):
+        self, make_stubbed_wizard_runner, conditional_definition
+    ):
         app_runner = make_stubbed_wizard_runner(conditional_definition)
         with app_runner.run_app_in_thread():
             self.assert_prompt_is_not_visible(app_runner.app, 'conditional')
@@ -765,12 +791,14 @@ class TestConditionalWizardApplication(B
             self.assert_prompt_is_not_visible(app_runner.app, 'conditional')
             app_runner.feed_input('after-conditional-val\n')
             self.assert_app_values(
-                app_runner.app, before_conditional='condition-not-met',
+                app_runner.app,
+                before_conditional='condition-not-met',
                 after_conditional='after-conditional-val',
             )
 
     def test_conditional_prompt_appears_when_condition_met(
-            self, make_stubbed_wizard_runner, conditional_definition):
+        self, make_stubbed_wizard_runner, conditional_definition
+    ):
         app_runner = make_stubbed_wizard_runner(conditional_definition)
         with app_runner.run_app_in_thread():
             self.assert_prompt_is_not_visible(app_runner.app, 'conditional')
@@ -778,50 +806,57 @@ class TestConditionalWizardApplication(B
             self.assert_prompt_is_visible(app_runner.app, 'conditional')
             app_runner.feed_input('val-at-conditional\n')
             self.assert_app_values(
-                app_runner.app, before_conditional='condition-met',
+                app_runner.app,
+                before_conditional='condition-met',
                 conditional='val-at-conditional',
             )
 
 
 class TestChoicesWizardApplication(BaseWizardApplicationTest):
     def test_immediately_pressing_enter_selects_first_choice(
-            self, make_stubbed_wizard_runner, choices_definition):
+        self, make_stubbed_wizard_runner, choices_definition
+    ):
         app_runner = make_stubbed_wizard_runner(choices_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Enter)
             self.assert_app_values(
-                app_runner.app, choices_prompt='actual_option_1')
+                app_runner.app, choices_prompt='actual_option_1'
+            )
 
     def test_can_select_choice_in_prompt(
-            self, make_stubbed_wizard_runner, choices_definition):
+        self, make_stubbed_wizard_runner, choices_definition
+    ):
         app_runner = make_stubbed_wizard_runner(choices_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Down, Keys.Enter)
             self.assert_app_values(
-                app_runner.app, choices_prompt='actual_option_2')
+                app_runner.app, choices_prompt='actual_option_2'
+            )
 
 
 class TestCorruptedChoicesWizardApplication(BaseWizardApplicationTest):
     def test_can_handle_corrupted_choices(
-            self, make_stubbed_wizard_runner, corrupted_choice_definition):
+        self, make_stubbed_wizard_runner, corrupted_choice_definition
+    ):
         app_runner = make_stubbed_wizard_runner(corrupted_choice_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Down, Keys.Enter)
-            self.assert_app_values(
-                app_runner.app, choices_prompt=None)
+            self.assert_app_values(app_runner.app, choices_prompt=None)
 
     def test_show_error_message_on_get_value_exception(
-            self, make_stubbed_wizard_runner, corrupted_choice_definition):
+        self, make_stubbed_wizard_runner, corrupted_choice_definition
+    ):
         app_runner = make_stubbed_wizard_runner(corrupted_choice_definition)
         with app_runner.run_app_in_thread():
             self.assert_buffer_text(
                 app_runner.app,
                 'error_bar',
-                'Encountered following error in wizard:\n\n\'operation\''
+                'Encountered following error in wizard:\n\n\'operation\'',
             )
 
     def test_toolbar_text_on_get_value_exception(
-            self, make_stubbed_wizard_runner, corrupted_choice_definition):
+        self, make_stubbed_wizard_runner, corrupted_choice_definition
+    ):
         app_runner = make_stubbed_wizard_runner(corrupted_choice_definition)
         with app_runner.run_app_in_thread():
             self.assert_toolbar_has_text(app_runner.app, 'error message')
@@ -829,27 +864,31 @@ class TestCorruptedChoicesWizardApplicat
 
 class TestMixedPromptTypeWizardApplication(BaseWizardApplicationTest):
     def test_can_answer_buffer_prompt_followed_by_select_prompt(
-            self, make_stubbed_wizard_runner, mixed_prompt_definition):
+        self, make_stubbed_wizard_runner, mixed_prompt_definition
+    ):
         app_runner = make_stubbed_wizard_runner(mixed_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('buffer_answer\n')
             app_runner.feed_input(Keys.Enter)
             self.assert_app_values(
-                app_runner.app, buffer_input_prompt='buffer_answer',
-                select_prompt='select_answer_1'
+                app_runner.app,
+                buffer_input_prompt='buffer_answer',
+                select_prompt='select_answer_1',
             )
 
 
 class TestPromptWithDataConvertWizardApplication(BaseWizardApplicationTest):
     def test_can_convert_integers(
-            self, make_stubbed_wizard_runner, data_convert_definition):
+        self, make_stubbed_wizard_runner, data_convert_definition
+    ):
         app_runner = make_stubbed_wizard_runner(data_convert_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('100\n')
             self.assert_app_values(app_runner.app, buffer_input_int=100)
 
     def test_can_convert_bool(
-            self, make_stubbed_wizard_runner, data_convert_definition):
+        self, make_stubbed_wizard_runner, data_convert_definition
+    ):
         app_runner = make_stubbed_wizard_runner(data_convert_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('0\n')
@@ -859,7 +898,8 @@ class TestPromptWithDataConvertWizardApp
             )
 
     def test_show_error_and_stop_on_incorrect_input(
-            self, make_stubbed_wizard_runner, data_convert_definition):
+        self, make_stubbed_wizard_runner, data_convert_definition
+    ):
         app_runner = make_stubbed_wizard_runner(data_convert_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('foo\n')
@@ -867,12 +907,13 @@ class TestPromptWithDataConvertWizardApp
                 app_runner.app,
                 'error_bar',
                 'Encountered following error in wizard:\n\n'
-                'Invalid value foo for datatype int'
+                'Invalid value foo for datatype int',
             )
             self.assert_current_buffer(app_runner.app, 'buffer_input_int')
 
     def test_clear_error_and_go_on_after_correction(
-            self, make_stubbed_wizard_runner, data_convert_definition):
+        self, make_stubbed_wizard_runner, data_convert_definition
+    ):
         app_runner = make_stubbed_wizard_runner(data_convert_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('foo\n')
@@ -880,22 +921,21 @@ class TestPromptWithDataConvertWizardApp
                 app_runner.app,
                 'error_bar',
                 'Encountered following error in wizard:\n\n'
-                'Invalid value foo for datatype int'
+                'Invalid value foo for datatype int',
             )
             self.assert_current_buffer(app_runner.app, 'buffer_input_int')
             app_runner.feed_input(
-                Keys.Backspace, Keys.Backspace, Keys.Backspace)
-            app_runner.feed_input('100\n')
-            self.assert_buffer_text(
-                app_runner.app, 'error_bar', ''
+                Keys.Backspace, Keys.Backspace, Keys.Backspace
             )
+            app_runner.feed_input('100\n')
+            self.assert_buffer_text(app_runner.app, 'error_bar', '')
             self.assert_current_buffer(app_runner.app, 'buffer_input_bool')
 
 
 class TestApiCallWizardApplication(BaseWizardApplicationTest):
     def test_uses_choices_from_api_call(
-            self, make_stubbed_wizard_runner, api_call_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, api_call_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(api_call_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Enter)
@@ -904,31 +944,32 @@ class TestApiCallWizardApplication(BaseW
 
 class TestDetailsWizardApplication(BaseWizardApplicationTest):
     def test_get_details_for_choice(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F3)
             self.assert_buffer_text(
                 app_runner.app,
                 'details_buffer',
-                '{\n    "policy": "policy_document"\n}'
+                '{\n    "policy": "policy_document"\n}',
             )
 
     def test_details_disabled_for_choice_wo_details(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Tab)
             self.assert_prompt_is_not_visible(
-                app_runner.app, 'toolbar_details')
+                app_runner.app, 'toolbar_details'
+            )
             app_runner.feed_input(Keys.F3)
             self.assert_prompt_is_not_visible(app_runner.app, 'details_buffer')
 
     def test_can_switch_focus_to_details_panel(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F3)
@@ -938,28 +979,29 @@ class TestDetailsWizardApplication(BaseW
             assert app_runner.app.layout.current_buffer is None
 
     def test_can_toggle_save_panel(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.ControlS)
             self.assert_current_buffer(app_runner.app, 'save_details_dialogue')
             self.assert_prompt_is_visible(
-                app_runner.app, 'save_details_dialogue')
+                app_runner.app, 'save_details_dialogue'
+            )
             assert app_runner.app.details_visible
             assert app_runner.app.save_details_visible
 
     def test_can_not_switch_focus_to_details_panel_if_it_not_visible(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F2)
             assert app_runner.app.layout.current_buffer is None
 
     def test_can_set_details_panel_title(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             assert app_runner.app.details_title == 'Policy Document'
@@ -967,8 +1009,8 @@ class TestDetailsWizardApplication(BaseW
             assert app_runner.app.details_title == 'Policy Document'
 
     def test_can_set_details_toolbar_text(
-            self, make_stubbed_wizard_runner, details_definition,
-            mock_iam_client):
+        self, make_stubbed_wizard_runner, details_definition, mock_iam_client
+    ):
         app_runner = make_stubbed_wizard_runner(details_definition)
         with app_runner.run_app_in_thread():
             self.assert_toolbar_has_text(app_runner.app, 'Policy Document')
@@ -976,40 +1018,42 @@ class TestDetailsWizardApplication(BaseW
 
 class TestPreviewWizardApplication(BaseWizardApplicationTest):
     def test_details_panel_visible_by_default(
-            self, make_stubbed_wizard_runner, preview_definition):
+        self, make_stubbed_wizard_runner, preview_definition
+    ):
         app_runner = make_stubbed_wizard_runner(preview_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Tab)
             self.assert_prompt_is_visible(app_runner.app, 'details_buffer')
 
     def test_get_details_for_choice(
-            self, make_stubbed_wizard_runner, preview_definition):
+        self, make_stubbed_wizard_runner, preview_definition
+    ):
         app_runner = make_stubbed_wizard_runner(preview_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Tab)
             self.assert_buffer_text(
-                app_runner.app,
-                'details_buffer',
-                'First option details'
+                app_runner.app, 'details_buffer', 'First option details'
             )
 
     def test_get_details_for_second_choice(
-            self, make_stubbed_wizard_runner, preview_definition):
+        self, make_stubbed_wizard_runner, preview_definition
+    ):
         app_runner = make_stubbed_wizard_runner(preview_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.Tab)
             app_runner.feed_input(Keys.Down)
             self.assert_buffer_text(
-                app_runner.app,
-                'details_buffer',
-                'Second option details'
+                app_runner.app, 'details_buffer', 'Second option details'
             )
 
 
 class TestSharedConfigWizardApplication(BaseWizardApplicationTest):
     def test_uses_choices_from_api_call(
-            self, make_stubbed_wizard_runner, shared_config_definition,
-            mock_botocore_session):
+        self,
+        make_stubbed_wizard_runner,
+        shared_config_definition,
+        mock_botocore_session,
+    ):
         mock_botocore_session.available_profiles = ['profile1', 'profile2']
         app_runner = make_stubbed_wizard_runner(shared_config_definition)
         with app_runner.run_app_in_thread():
@@ -1025,8 +1069,11 @@ class TestRunWizardApplication(BaseWizar
         assert 'error_bar' not in self.get_visible_buffers(app)
 
     def test_run_wizard_execute(
-            self, make_stubbed_wizard_runner, run_wizard_definition,
-            mock_iam_client):
+        self,
+        make_stubbed_wizard_runner,
+        run_wizard_definition,
+        mock_iam_client,
+    ):
         app_runner = make_stubbed_wizard_runner(run_wizard_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('role-name\n')
@@ -1035,23 +1082,30 @@ class TestRunWizardApplication(BaseWizar
         assert app_runner.app.values['role_arn'] == 'returned-role-arn'
 
     def test_run_wizard_captures_and_displays_errors(
-            self, make_stubbed_wizard_runner, run_wizard_definition,
-            mock_iam_client):
+        self,
+        make_stubbed_wizard_runner,
+        run_wizard_definition,
+        mock_iam_client,
+    ):
         app_runner = make_stubbed_wizard_runner(run_wizard_definition)
         mock_iam_client.create_role.side_effect = Exception(
-            'Error creating role')
+            'Error creating role'
+        )
         with app_runner.run_app_in_thread():
             app_runner.feed_input('role-name\n')
             app_runner.feed_input(Keys.Enter)
             self.assert_buffer_text(
                 app_runner.app,
                 'error_bar',
-                'Encountered following error in wizard:\n\nError creating role'
+                'Encountered following error in wizard:\n\nError creating role',
             )
 
     def test_can_change_answers_on_run_wizard_failure(
-            self, make_stubbed_wizard_runner, run_wizard_definition,
-            mock_iam_client):
+        self,
+        make_stubbed_wizard_runner,
+        run_wizard_definition,
+        mock_iam_client,
+    ):
         app_runner = make_stubbed_wizard_runner(run_wizard_definition)
         mock_iam_client.create_role.side_effect = [
             Exception('Initial error'),
@@ -1065,7 +1119,7 @@ class TestRunWizardApplication(BaseWizar
             self.assert_buffer_text(
                 app_runner.app,
                 'error_bar',
-                'Encountered following error in wizard:\n\nInitial error'
+                'Encountered following error in wizard:\n\nInitial error',
             )
 
             # Make sure dialog closed on error but error message is visible
@@ -1077,12 +1131,16 @@ class TestRunWizardApplication(BaseWizar
             app_runner.feed_input(Keys.Enter)
 
         mock_iam_client.create_role.assert_called_with(
-            RoleName='role-name-new')
+            RoleName='role-name-new'
+        )
         assert app_runner.app.values['role_arn'] == 'returned-role-arn'
 
     def test_can_switch_exception_panel(
-            self, make_stubbed_wizard_runner, run_wizard_definition,
-            mock_iam_client):
+        self,
+        make_stubbed_wizard_runner,
+        run_wizard_definition,
+        mock_iam_client,
+    ):
         app_runner = make_stubbed_wizard_runner(run_wizard_definition)
         mock_iam_client.create_role.side_effect = [
             Exception('Initial error'),
@@ -1097,8 +1155,11 @@ class TestRunWizardApplication(BaseWizar
             self.assert_error_bar_is_not_visible(app_runner.app)
 
     def test_toolbar_has_exception_panel_hot_key(
-            self, make_stubbed_wizard_runner, run_wizard_definition,
-            mock_iam_client):
+        self,
+        make_stubbed_wizard_runner,
+        run_wizard_definition,
+        mock_iam_client,
+    ):
         app_runner = make_stubbed_wizard_runner(run_wizard_definition)
         mock_iam_client.create_role.side_effect = [
             Exception('Initial error'),
@@ -1108,11 +1169,11 @@ class TestRunWizardApplication(BaseWizar
             app_runner.feed_input('role-name\n')
             self.assert_error_bar_is_not_visible(app_runner.app)
             self.assert_toolbar_does_not_have_text(
-                app_runner.app, 'error message')
+                app_runner.app, 'error message'
+            )
             app_runner.feed_input(Keys.Enter)
             self.assert_error_bar_is_visible(app_runner.app)
-            self.assert_toolbar_has_text(
-                app_runner.app, 'error message')
+            self.assert_toolbar_has_text(app_runner.app, 'error message')
 
 
 class TestWizardTraverser(unittest.TestCase):
@@ -1135,12 +1196,12 @@ class TestWizardTraverser(unittest.TestC
                             choices=[
                                 {
                                     'display': 'Option 1',
-                                    'actual_value': 'actual_option_1'
+                                    'actual_value': 'actual_option_1',
                                 },
                                 {
                                     'display': 'Option 2',
-                                    'actual_value': 'actual_option_2'
-                                }
+                                    'actual_value': 'actual_option_2',
+                                },
                             ]
                         ),
                     }
@@ -1163,13 +1224,19 @@ class TestWizardTraverser(unittest.TestC
                 'only_section': {
                     'values': {
                         'only_prompt': self.create_prompt_definition(
-                                                            datatype='int'),
+                            datatype='int'
+                        ),
                     }
                 }
             }
         )
 
-    def create_traverser(self, definition, values=None, executor=None,):
+    def create_traverser(
+        self,
+        definition,
+        values=None,
+        executor=None,
+    ):
         if values is None:
             values = {}
         if executor is None:
@@ -1181,16 +1248,12 @@ class TestWizardTraverser(unittest.TestC
         sections['__DONE__'] = {}
         if execute is None:
             execute = {}
-        return {
-            'plan': sections,
-            'execute': execute
-        }
+        return {'plan': sections, 'execute': execute}
 
-    def create_prompt_definition(self, description=None, condition=None,
-                                 choices=None, datatype=None):
-        prompt = {
-            'type': 'prompt'
-        }
+    def create_prompt_definition(
+        self, description=None, condition=None, choices=None, datatype=None
+    ):
+        prompt = {'type': 'prompt'}
         if not description:
             description = 'A sample description'
         prompt['description'] = description
@@ -1223,8 +1286,7 @@ class TestWizardTraverser(unittest.TestC
     def test_get_current_prompt_choices(self):
         traverser = self.create_traverser(self.simple_choice_definition)
         self.assertEqual(
-            traverser.get_current_prompt_choices(),
-            ['Option 1', 'Option 2']
+            traverser.get_current_prompt_choices(), ['Option 1', 'Option 2']
         )
 
     def test_get_current_prompt_choices_as_list_of_strings(self):
@@ -1245,7 +1307,7 @@ class TestWizardTraverser(unittest.TestC
         traverser = self.create_traverser(choice_wizard)
         self.assertEqual(
             traverser.get_current_prompt_choices(),
-            ['from_list_1', 'from_list_2']
+            ['from_list_1', 'from_list_2'],
         )
 
     def test_get_current_prompt_choices_from_variable(self):
@@ -1264,7 +1326,7 @@ class TestWizardTraverser(unittest.TestC
         traverser = self.create_traverser(choice_wizard, values)
         self.assertEqual(
             traverser.get_current_prompt_choices(),
-            ['from_var_1', 'from_var_2']
+            ['from_var_1', 'from_var_2'],
         )
 
     def test_get_current_prompt_choices_returns_none_when_no_choices(self):
@@ -1296,12 +1358,14 @@ class TestWizardTraverser(unittest.TestC
     def test_submit_prompt_raise_correct_exception_on_datatype_convert(self):
         values = {}
         traverser = self.create_traverser(
-            self.single_prompt_definition_with_datatype, values,
+            self.single_prompt_definition_with_datatype,
+            values,
         )
         with self.assertRaises(InvalidDataTypeConversionException) as e:
             traverser.submit_prompt_answer('foo')
         self.assertEqual(
-            str(e.exception), 'Invalid value foo for datatype int')
+            str(e.exception), 'Invalid value foo for datatype int'
+        )
 
     def test_submit_prompt_answer_throw_error_for_invalid_option(self):
         traverser = self.create_traverser(self.simple_choice_definition)
@@ -1323,7 +1387,7 @@ class TestWizardTraverser(unittest.TestC
                         'conditional': self.create_prompt_definition(
                             condition={
                                 'variable': 'first_prompt',
-                                'equals': 'condition-met'
+                                'equals': 'condition-met',
                             }
                         ),
                         'after_conditional': self.create_prompt_definition(),
@@ -1333,9 +1397,7 @@ class TestWizardTraverser(unittest.TestC
         )
         traverser = self.create_traverser(
             definition_with_condition,
-            values={
-                'first_prompt': 'condition-not-met'
-            }
+            values={'first_prompt': 'condition-not-met'},
         )
         next_prompt = traverser.next_prompt()
         self.assertEqual(next_prompt, 'after_conditional')
@@ -1349,7 +1411,7 @@ class TestWizardTraverser(unittest.TestC
                         'conditional': self.create_prompt_definition(
                             condition={
                                 'variable': 'first_prompt',
-                                'equals': 'condition-met'
+                                'equals': 'condition-met',
                             }
                         ),
                         'after_conditional': self.create_prompt_definition(),
@@ -1358,10 +1420,7 @@ class TestWizardTraverser(unittest.TestC
             }
         )
         traverser = self.create_traverser(
-            definition_with_condition,
-            values={
-                'first_prompt': 'condition-met'
-            }
+            definition_with_condition, values={'first_prompt': 'condition-met'}
         )
         next_prompt = traverser.next_prompt()
         self.assertEqual(next_prompt, 'conditional')
@@ -1378,7 +1437,7 @@ class TestWizardTraverser(unittest.TestC
                     'values': {
                         'second_prompt': self.create_prompt_definition(),
                     }
-                }
+                },
             }
         )
         traverser = self.create_traverser(definition)
@@ -1413,7 +1472,7 @@ class TestWizardTraverser(unittest.TestC
                     'values': {
                         'second_prompt': self.create_prompt_definition(),
                     }
-                }
+                },
             }
         )
         traverser = self.create_traverser(definition)
@@ -1440,9 +1499,7 @@ class TestWizardTraverser(unittest.TestC
     def test_run_wizard_calls_executor(self):
         executor = mock.Mock(Executor)
         values = {}
-        execute_definition = {
-            'step': []
-        }
+        execute_definition = {'step': []}
         traverser = self.create_traverser(
             definition=self.create_definition(
                 sections={
@@ -1452,7 +1509,7 @@ class TestWizardTraverser(unittest.TestC
                         }
                     },
                 },
-                execute=execute_definition
+                execute=execute_definition,
             ),
             values=values,
             executor=executor,
@@ -1480,7 +1537,7 @@ class TestWizardTraverser(unittest.TestC
                         'conditional': self.create_prompt_definition(
                             condition={
                                 'variable': 'first_prompt',
-                                'equals': 'condition-met'
+                                'equals': 'condition-met',
                             }
                         ),
                     }
@@ -1489,9 +1546,7 @@ class TestWizardTraverser(unittest.TestC
         )
         traverser = self.create_traverser(
             definition_with_condition,
-            values={
-                'first_prompt': 'condition-not-met'
-            }
+            values={'first_prompt': 'condition-not-met'},
         )
         self.assertFalse(traverser.is_prompt_visible('conditional'))
 
@@ -1504,7 +1559,7 @@ class TestWizardTraverser(unittest.TestC
                         'conditional': self.create_prompt_definition(
                             condition={
                                 'variable': 'first_prompt',
-                                'equals': 'condition-met'
+                                'equals': 'condition-met',
                             }
                         ),
                     }
@@ -1512,10 +1567,7 @@ class TestWizardTraverser(unittest.TestC
             }
         )
         traverser = self.create_traverser(
-            definition_with_condition,
-            values={
-                'first_prompt': 'condition-met'
-            }
+            definition_with_condition, values={'first_prompt': 'condition-met'}
         )
         self.assertTrue(traverser.is_prompt_visible('conditional'))
 
@@ -1531,7 +1583,7 @@ class TestWizardTraverser(unittest.TestC
                     'values': {
                         'second_prompt': self.create_prompt_definition(),
                     }
-                }
+                },
             }
         )
         traverser = self.create_traverser(definition)
@@ -1591,15 +1643,11 @@ class TestWizardValues(unittest.TestCase
                 'section': {
                     'shortname': 'Section',
                     'values': {
-                        'no_handler_value': {
-                            'type': 'prompt'
-                        },
-                        'handler_value': {
-                            'type': 'use_handler'
-                        }
-                    }
+                        'no_handler_value': {'type': 'prompt'},
+                        'handler_value': {'type': 'use_handler'},
+                    },
                 }
-            }
+            },
         }
         self.handler = mock.Mock(BaseStep)
         self.exception_handler = mock.Mock()
@@ -1666,8 +1714,11 @@ class TestWizardValues(unittest.TestCase
 
 class TestPromptCompletionWizardApplication(BaseWizardApplicationTest):
     def test_show_completions_for_buffer_text(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('fi')
@@ -1677,12 +1728,15 @@ class TestPromptCompletionWizardApplicat
                 [
                     Completion('le1', 0, display='file1'),
                     Completion('le2', 0, display='file2'),
-                ]
+                ],
             )
 
     def test_choose_completion_on_Enter_and_stays_on_the_same_prompt(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('fi')
@@ -1691,8 +1745,11 @@ class TestPromptCompletionWizardApplicat
             self.assert_current_buffer(app_runner.app, 'choose_file')
 
     def test_choose_completion_on_Enter_and_move_on_second_Enter(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('fi')
@@ -1701,8 +1758,11 @@ class TestPromptCompletionWizardApplicat
             self.assert_current_buffer(app_runner.app, 'second_prompt')
 
     def test_switch_completions_on_tab(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('fi')
@@ -1711,8 +1771,11 @@ class TestPromptCompletionWizardApplicat
             self.assert_current_buffer(app_runner.app, 'choose_file')
 
     def test_switch_completions_on_back_tab(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('fi')
@@ -1721,8 +1784,11 @@ class TestPromptCompletionWizardApplicat
             self.assert_current_buffer(app_runner.app, 'choose_file')
 
     def test_switch_prompt_on_tab_if_it_is_not_completing(
-            self, make_stubbed_wizard_runner, file_prompt_definition,
-            patch_path_completer):
+        self,
+        make_stubbed_wizard_runner,
+        file_prompt_definition,
+        patch_path_completer,
+    ):
         app_runner = make_stubbed_wizard_runner(file_prompt_definition)
         with app_runner.run_app_in_thread():
             app_runner.feed_input('rrrr')
@@ -1745,14 +1811,14 @@ class TestSaveDetailsWizard(BaseWizardAp
                             'details': {
                                 'value': 'test_value',
                                 'description': 'Policy Document',
-                                'output': 'json'
+                                'output': 'json',
                             },
                         },
-                    }
+                    },
                 },
                 '__DONE__': {},
             },
-            'execute': {}
+            'execute': {},
         }
         app_runner = make_stubbed_wizard_runner(definition)
         mock_file_io = mock.Mock(spec=FileIO)
@@ -1762,11 +1828,10 @@ class TestSaveDetailsWizard(BaseWizardAp
         with app_runner.run_app_in_thread():
             app_runner.feed_input(Keys.F3)
             self.assert_buffer_text(
-                app_runner.app,
-                'details_buffer',
-                details_content
+                app_runner.app, 'details_buffer', details_content
             )
             app_runner.feed_input(Keys.ControlS)
             app_runner.feed_input('/tmp/myfile.json\n')
             mock_file_io.write_file_contents.assert_called_with(
-                '/tmp/myfile.json', details_content)
+                '/tmp/myfile.json', details_content
+            )
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/test_command.py 2.31.35-1/tests/unit/customizations/wizard/test_command.py
--- 2.23.6-1/tests/unit/customizations/wizard/test_command.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/test_command.py	2025-11-12 19:17:29.000000000 +0000
@@ -13,10 +13,10 @@
 from botocore.session import Session
 
 from awscli.customizations.exceptions import ParamValidationError
+from awscli.customizations.wizard.app import WizardAppRunner
 from awscli.customizations.wizard.commands import TopLevelWizardCommand
 from awscli.customizations.wizard.core import Runner
 from awscli.customizations.wizard.loader import WizardLoader
-from awscli.customizations.wizard.app import WizardAppRunner
 from awscli.testutils import mock, unittest
 
 
@@ -30,41 +30,41 @@ class TestWizardCommand(unittest.TestCas
         self.wizard_v1_runner = mock.Mock(spec=Runner)
         self.runner = {
             '0.1': self.wizard_v1_runner,
-            '0.2': self.wizard_v2_runner
+            '0.2': self.wizard_v2_runner,
         }
 
     def test_will_delegate_v1_definition_to_v1_runner(self):
-        loaded = {
-            'version': '0.1'
-        }
+        loaded = {'version': '0.1'}
         self.loader.load_wizard.return_value = loaded
         cmd = TopLevelWizardCommand(
-            self.session, loader=self.loader,
-            parent_command='', runner=self.runner
+            self.session,
+            loader=self.loader,
+            parent_command='',
+            runner=self.runner,
         )
         cmd(['mywizard'], parsed_globals=None)
         self.wizard_v1_runner.run.assert_called_with(loaded)
 
     def test_will_delegate_v2_definition_to_v2_runner(self):
-        loaded = {
-            'version': '0.2'
-        }
+        loaded = {'version': '0.2'}
         self.loader.load_wizard.return_value = loaded
         cmd = TopLevelWizardCommand(
-            self.session, loader=self.loader,
-            parent_command='', runner=self.runner
+            self.session,
+            loader=self.loader,
+            parent_command='',
+            runner=self.runner,
         )
         cmd(['mywizard'], parsed_globals=None)
         self.wizard_v2_runner.run.assert_called_with(loaded)
 
     def test_will_raise_exception_for_unsupported_version(self):
-        loaded = {
-            'version': '100'
-        }
+        loaded = {'version': '100'}
         self.loader.load_wizard.return_value = loaded
         cmd = TopLevelWizardCommand(
-            self.session, loader=self.loader,
-            parent_command='', runner=self.runner
+            self.session,
+            loader=self.loader,
+            parent_command='',
+            runner=self.runner,
         )
         with self.assertRaises(ParamValidationError) as e:
             cmd(['mywizard'], parsed_globals=None)
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/test_core.py 2.31.35-1/tests/unit/customizations/wizard/test_core.py
--- 2.23.6-1/tests/unit/customizations/wizard/test_core.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/test_core.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,17 +11,16 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-from ruamel.yaml import YAML
 
-from botocore.session import Session
-from botocore.paginate import Paginator
 import pytest
+from botocore.paginate import Paginator
+from botocore.session import Session
+from ruamel.yaml import YAML
 
 from awscli.customizations.configure.writer import ConfigFileWriter
-from awscli.customizations.wizard import core
-from awscli.customizations.wizard import ui
+from awscli.customizations.wizard import core, ui
 from awscli.customizations.wizard.app import WizardValues
-from awscli.testutils import unittest, mock, temporary_file
+from awscli.testutils import mock, temporary_file, unittest
 
 
 def load_wizard(yaml_str):
@@ -41,7 +40,7 @@ class FakeWizardValues(WizardValues):
         return self.values[item]
 
 
-class FakePrompter(object):
+class FakePrompter:
     def __init__(self, responses):
         self.responses = responses
         self.recorded_prompts = []
@@ -105,8 +104,7 @@ class TestPlanner(unittest.TestCase):
         # were defined.
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Enter user name', 'myname'),
-             ('Enter group name', 'wheel')],
+            [('Enter user name', 'myname'), ('Enter group name', 'wheel')],
         )
 
     def test_can_prompt_for_conditional_values_true(self):
@@ -135,8 +133,7 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['name'], 'admin')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Should we stop', 'no'),
-             ('Enter user name', 'admin')],
+            [('Should we stop', 'no'), ('Enter user name', 'admin')],
         )
 
     def test_can_prompt_for_conditional_values_false(self):
@@ -187,10 +184,16 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['name'], 'admin')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Enter user name', 'admin', [{'display': 'Administrator',
-                                             'actual_value': 'admin'},
-                                            {'display': 'Developer',
-                                             'actual_value': 'dev'}])],
+            [
+                (
+                    'Enter user name',
+                    'admin',
+                    [
+                        {'display': 'Administrator', 'actual_value': 'admin'},
+                        {'display': 'Developer', 'actual_value': 'dev'},
+                    ],
+                )
+            ],
         )
 
     def test_can_prompt_with_types(self):
@@ -257,7 +260,9 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(
             self.prompter.recorded_prompts,
             # We never prompt for the 'bar' value.
-            [('Foo', 'foo-value'),]
+            [
+                ('Foo', 'foo-value'),
+            ],
         )
 
     def test_can_run_template_step(self):
@@ -279,7 +284,9 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['bar'], 'template-foo-value')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Foo', 'foo-value'),]
+            [
+                ('Foo', 'foo-value'),
+            ],
         )
 
     def test_can_run_apicall_step(self):
@@ -348,12 +355,9 @@ class TestPlanner(unittest.TestCase):
             {
                 'foo': {'Policies': ['foo']},
                 'use_cached_foo': {'Policies': ['foo']},
-            }
-        )
-        self.assertEqual(
-            mock_client.list_policies.call_count,
-            1
+            },
         )
+        self.assertEqual(mock_client.list_policies.call_count, 1)
 
     def test_can_run_apicall_step_with_paginate(self):
         loaded = load_wizard("""
@@ -389,7 +393,7 @@ class TestPlanner(unittest.TestCase):
             parameters,
             {
                 'all_policies': {'Policies': ['foo']},
-            }
+            },
         )
         mock_client.get_paginator.assert_called_with('list_policies')
         mock_paginator.paginate.assert_called_with(Scope='All')
@@ -472,10 +476,16 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['name'], 'admin')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Enter user name', 'admin', [{'display': 'Administrator',
-                                             'actual_value': 'admin'},
-                                            {'display': 'Developer',
-                                             'actual_value': 'dev'}])],
+            [
+                (
+                    'Enter user name',
+                    'admin',
+                    [
+                        {'display': 'Administrator', 'actual_value': 'admin'},
+                        {'display': 'Developer', 'actual_value': 'dev'},
+                    ],
+                )
+            ],
         )
 
     def test_can_run_fileprompt_step(self):
@@ -495,8 +505,7 @@ class TestPlanner(unittest.TestCase):
             },
         )
         parameters = planner.plan(loaded['plan'])
-        self.assertEqual(parameters['foo'],
-                         os.path.abspath('myfile.txt'))
+        self.assertEqual(parameters['foo'], os.path.abspath('myfile.txt'))
 
     def test_can_run_yes_no_prompt_step(self):
         loaded = load_wizard("""
@@ -513,10 +522,16 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['wants_defaults'], 'yes')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('Do you want to use the defaults?',
-              'yes',
-              [{'display': 'Yes', 'actual_value': 'yes'},
-               {'display': 'No', 'actual_value': 'no'}])],
+            [
+                (
+                    'Do you want to use the defaults?',
+                    'yes',
+                    [
+                        {'display': 'Yes', 'actual_value': 'yes'},
+                        {'display': 'No', 'actual_value': 'no'},
+                    ],
+                )
+            ],
         )
 
     def test_can_set_default_yes_no_value(self):
@@ -535,8 +550,10 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(
             self.prompter.recorded_prompts[0][2],
             # The default is No so it should be presented first.
-            [{'display': 'No', 'actual_value': 'no'},
-             {'display': 'Yes', 'actual_value': 'yes'}]
+            [
+                {'display': 'No', 'actual_value': 'no'},
+                {'display': 'Yes', 'actual_value': 'yes'},
+            ],
         )
 
     def test_can_jump_around_to_next_steps(self):
@@ -583,14 +600,15 @@ class TestPlanner(unittest.TestCase):
         self.assertEqual(parameters['fourth'], 'four')
         self.assertEqual(
             self.prompter.recorded_prompts,
-            [('step_a', 'one'),
-             ('step_d', 'two'),
-             ('step_c', 'three'),
-             ('step_b', 'four')],
+            [
+                ('step_a', 'one'),
+                ('step_d', 'two'),
+                ('step_c', 'three'),
+                ('step_b', 'four'),
+            ],
         )
 
     def test_can_delegate_to_arbitrary_type(self):
-
         class CustomStep(core.BaseStep):
             def run_step(self, step_definition, parameters):
                 # Just return whatever the value of 'foo' is in the
@@ -660,8 +678,9 @@ class TestPlanner(unittest.TestCase):
         )
         parameters = planner.plan(loaded['plan'])
         self.assertEqual(parameters['foo'], 'us-west-2')
-        config_api.get_value.assert_called_with(profile='devprofile',
-                                                value='region')
+        config_api.get_value.assert_called_with(
+            profile='devprofile', value='region'
+        )
 
 
 class TestExecutor(unittest.TestCase):
@@ -714,7 +733,8 @@ class TestExecutor(unittest.TestCase):
         self.executor.execute(loaded['execute'], {})
         self.session.create_client.assert_called_with('iam')
         self.client.create_user.assert_called_with(
-            UserName='admin', Path='/foo')
+            UserName='admin', Path='/foo'
+        )
 
     def test_optional_params_not_passed_if_none(self):
         loaded = load_wizard("""
@@ -796,7 +816,9 @@ class TestExecutor(unittest.TestCase):
               params:
                 UserName: admin
         """)
-        self.executor.execute(loaded['execute'], {'foo': 'one', 'bar': 'NOTTWO'})
+        self.executor.execute(
+            loaded['execute'], {'foo': 'one', 'bar': 'NOTTWO'}
+        )
         self.assertFalse(self.session.create_client.called)
 
     def test_can_recursively_template_variables_in_params(self):
@@ -830,7 +852,7 @@ class TestExecutor(unittest.TestCase):
                     {'Bar': 'FOOVALUE'},
                     {'Baz': 'FOOVALUE'},
                 ]
-            }
+            },
         }
         self.client.create_user.assert_called_with(**expected_params)
 
@@ -877,8 +899,10 @@ class TestExecutor(unittest.TestCase):
         self.session.create_client.assert_called_with('iam')
         self.assertEqual(
             self.client.method_calls,
-            [mock.call.create_user(UserName='admin'),
-             mock.call.create_role(RoleName='admin')]
+            [
+                mock.call.create_user(UserName='admin'),
+                mock.call.create_role(RoleName='admin'),
+            ],
         )
 
     def test_can_write_to_config_file(self):
@@ -894,7 +918,7 @@ class TestExecutor(unittest.TestCase):
         """)
         self.executor.execute(loaded['execute'], {})
         self.config_api.set_values.assert_called_with(
-             {'region': 'us-west-2', 'output': 'json'},
+            {'region': 'us-west-2', 'output': 'json'},
             profile='mydevprofile',
         )
 
@@ -925,7 +949,8 @@ class TestExecutor(unittest.TestCase):
         variables = {'foo': 'bar'}
         self.executor.execute(loaded['execute'], variables)
         self.config_api.set_values.assert_called_with(
-            {'region': 'bar'}, profile=None)
+            {'region': 'bar'}, profile=None
+        )
 
     def test_can_define_variables(self):
         loaded = load_wizard("""
@@ -951,8 +976,10 @@ class TestExecutor(unittest.TestCase):
         """)
         variables = {"bar": "value-of-bar"}
         self.executor.execute(loaded['execute'], variables)
-        self.assertEqual(variables, {'myvar': {'foo': 'value-of-bar'},
-                                     'bar': 'value-of-bar'})
+        self.assertEqual(
+            variables,
+            {'myvar': {'foo': 'value-of-bar'}, 'bar': 'value-of-bar'},
+        )
 
     def test_can_merge_dicts(self):
         loaded = load_wizard("""
@@ -1007,8 +1034,10 @@ class TestExecutor(unittest.TestCase):
         variables = {}
         self.executor.execute(loaded['execute'], variables)
         expected = {
-            'foo': {'bar': {'baz': 'new-baz', 'baz2': 'original-baz2'},
-                    'bar2': 'new-bar2'},
+            'foo': {
+                'bar': {'baz': 'new-baz', 'baz2': 'original-baz2'},
+                'bar2': 'new-bar2',
+            },
             'foo2': 'original-foo2',
         }
         self.assertEqual(variables['result'], expected)
@@ -1042,8 +1071,10 @@ class TestExecutor(unittest.TestCase):
         variables = {}
         self.executor.execute(loaded['execute'], variables)
         expected = {
-            'foo': {'bar': {'baz': 'new-baz', 'baz2': 'original-baz2'},
-                    'bar2': 'new-bar2'},
+            'foo': {
+                'bar': {'baz': 'new-baz', 'baz2': 'original-baz2'},
+                'bar2': 'new-bar2',
+            },
             'foo2': 'original-foo2',
         }
         self.assertEqual(variables['result'], expected)
@@ -1124,16 +1155,18 @@ class TestSharedConfigAPI(unittest.TestC
         self.mock_session = mock.Mock(spec=Session)
         self.config_writer = mock.Mock(spec=ConfigFileWriter)
         self.config_filename = 'foo'
-        self.mock_session.get_config_variable.return_value = \
+        self.mock_session.get_config_variable.return_value = (
             self.config_filename
-        self.config_api = core.SharedConfigAPI(self.mock_session,
-                                               self.config_writer)
+        )
+        self.config_api = core.SharedConfigAPI(
+            self.mock_session, self.config_writer
+        )
 
     def test_delegates_to_config_writer(self):
         self.config_api.set_values({'foo': 'bar'}, profile='bar')
         self.config_writer.update_config.assert_called_with(
-            {'foo': 'bar', '__section__': 'profile bar'},
-             self.config_filename)
+            {'foo': 'bar', '__section__': 'profile bar'}, self.config_filename
+        )
 
     def test_can_get_config_values(self):
         self.mock_session.get_config_variable.return_value = 'bar'
@@ -1195,7 +1228,7 @@ class TestAPIInvoker(unittest.TestCase):
             'iam',
             'CreateUser',
             api_params={'UserName': 'admin'},
-            plan_variables={}
+            plan_variables={},
         )
         call_method_args = self.get_call_args(self.mock_session)
         self.assertEqual(call_method_args, mock.call(UserName='admin'))
@@ -1207,7 +1240,7 @@ class TestAPIInvoker(unittest.TestCase):
             'CreateUser',
             api_params={'UserName': 'admin'},
             plan_variables={},
-            cache=True
+            cache=True,
         )
         call_method_args = self.get_call_args(self.mock_session)
         self.assertEqual(call_method_args, mock.call(UserName='admin'))
@@ -1216,7 +1249,7 @@ class TestAPIInvoker(unittest.TestCase):
             'CreateUser',
             api_params={'UserName': 'admin'},
             plan_variables={},
-            cache=True
+            cache=True,
         )
         self.assertEqual(self.get_call_count(self.mock_session), 1)
 
@@ -1227,7 +1260,7 @@ class TestAPIInvoker(unittest.TestCase):
             'CreateUser',
             api_params={'UserName': 'admin'},
             plan_variables={},
-            cache=True
+            cache=True,
         )
         call_method_args = self.get_call_args(self.mock_session)
         self.assertEqual(call_method_args, mock.call(UserName='admin'))
@@ -1236,11 +1269,12 @@ class TestAPIInvoker(unittest.TestCase):
             'CreateUser',
             api_params={'UserName': 'admin-different'},
             plan_variables={},
-            cache=True
+            cache=True,
         )
         call_method_args = self.get_call_args(self.mock_session)
         self.assertEqual(
-            call_method_args, mock.call(UserName='admin-different'))
+            call_method_args, mock.call(UserName='admin-different')
+        )
         self.assertEqual(self.get_call_count(self.mock_session), 2)
 
     def test_can_paginate(self):
@@ -1250,7 +1284,7 @@ class TestAPIInvoker(unittest.TestCase):
             'ListPolicies',
             api_params={'Scope': 'All'},
             plan_variables={},
-            paginate=True
+            paginate=True,
         )
         paginate_args = self.get_paginate_call_args(self.mock_session)
         self.assertEqual(paginate_args, mock.call(Scope='All'))
@@ -1261,7 +1295,7 @@ class TestAPIInvoker(unittest.TestCase):
             'iam',
             'CreateUser',
             api_params={'UserName': '{username}'},
-            plan_variables={'username': 'admin'}
+            plan_variables={'username': 'admin'},
         )
         call_method_args = self.get_call_args(self.mock_session)
         self.assertEqual(call_method_args, mock.call(UserName='admin'))
@@ -1292,11 +1326,9 @@ class TestTemplateStep(unittest.TestCase
     def test_positive_condition_statement_for_equals(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {allow} == True %}allow body{%   endif   %}"
-        }
-        parameters = {
-            'allow': 'True'
+            'value': "{%if {allow} == True %}allow body{%   endif   %}",
         }
+        parameters = {'allow': 'True'}
         step = core.TemplateStep()
         value = step.run_step(step_definition, parameters)
         self.assertEqual(value, 'allow body')
@@ -1304,11 +1336,9 @@ class TestTemplateStep(unittest.TestCase
     def test_negative_condition_statement_for_equals(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {allow} == True %}allow body{%   endif   %}"
-        }
-        parameters = {
-            'allow': 'False'
+            'value': "{%if {allow} == True %}allow body{%   endif   %}",
         }
+        parameters = {'allow': 'False'}
         step = core.TemplateStep()
         value = step.run_step(step_definition, parameters)
         self.assertEqual(value, '')
@@ -1318,12 +1348,12 @@ class TestTemplateStep(unittest.TestCase
             'type': 'template',
             'value': """{foo}
             {%if   {allow} == False    %}
-not allow foo 
+not allow foo
             {% endif %}
    {%if   {allow} == True    %}
 allow foo
         {% endif %}
-more text"""
+more text""",
         }
         parameters = {
             'foo': 'foo parameter',
@@ -1336,7 +1366,7 @@ more text"""
     def test_can_use_conditions_with_multiple_vars(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {var1} == {var2} %}allow body{% endif %}"
+            'value': "{%if {var1} == {var2} %}allow body{% endif %}",
         }
         parameters = {
             'var1': 'yes',
@@ -1349,7 +1379,7 @@ more text"""
     def test_can_use_conditions_with_no_vars(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if yes == yes %}allow body{% endif %}"
+            'value': "{%if yes == yes %}allow body{% endif %}",
         }
         parameters = {}
         step = core.TemplateStep()
@@ -1359,7 +1389,7 @@ more text"""
     def test_positive_condition_statements_with_not_equal(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {first_var} != {second_var} %}not equals{% endif %}"
+            'value': "{%if {first_var} != {second_var} %}not equals{% endif %}",
         }
         parameters = {
             'first_var': 'first_value',
@@ -1372,7 +1402,7 @@ more text"""
     def test_negative_condition_statements_with_not_equal(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {first_var} != {second_var} %}not equals{% endif %}"
+            'value': "{%if {first_var} != {second_var} %}not equals{% endif %}",
         }
         parameters = {
             'first_var': 'same_value',
@@ -1385,7 +1415,7 @@ more text"""
     def test_does_not_error_for_missing_vars_in_condition(self):
         step_definition = {
             'type': 'template',
-            'value': "{%if {missing} == expected_value %}body{% endif %}"
+            'value': "{%if {missing} == expected_value %}body{% endif %}",
         }
         parameters = {}
         step = core.TemplateStep()
@@ -1393,10 +1423,7 @@ more text"""
         self.assertEqual(value, '')
 
     def test_can_fetch_values(self):
-        step_definition = {
-            'type': 'template',
-            'value': "{foo} {bar}"
-        }
+        step_definition = {'type': 'template', 'value': "{foo} {bar}"}
         fake_wizard_values = FakeWizardValues()
         step = core.TemplateStep()
         value = step.run_step(step_definition, fake_wizard_values)
@@ -1410,9 +1437,9 @@ class TestDumpDataStep:
             step_definition={
                 'type': 'dump-data',
                 'dump_type': 'json',
-                'value': {"key": "value"}
+                'value': {"key": "value"},
             },
-            parameters=FakeWizardValues()
+            parameters=FakeWizardValues(),
         )
         assert value == '{"key": "value"}'
 
@@ -1423,9 +1450,9 @@ class TestDumpDataStep:
             step_definition={
                 'type': 'dump-data',
                 'dump_type': 'json',
-                'value': '{replace-me}'
+                'value': '{replace-me}',
             },
-            parameters=wizard_values
+            parameters=wizard_values,
         )
         assert value == '{"replaced": "value"}'
 
@@ -1435,9 +1462,9 @@ class TestDumpDataStep:
                 step_definition={
                     'type': 'dump-data',
                     'dump_type': 'not-supported-type',
-                    'value': {"key": "value"}
+                    'value': {"key": "value"},
                 },
-                parameters=FakeWizardValues()
+                parameters=FakeWizardValues(),
             )
 
 
@@ -1450,9 +1477,9 @@ class TestLoadDataStep:
             step_definition={
                 'type': 'load-data',
                 'load_type': 'json',
-                'value': '{{"key": "value"}}'
+                'value': '{{"key": "value"}}',
             },
-            parameters=FakeWizardValues()
+            parameters=FakeWizardValues(),
         )
         assert value == {"key": "value"}
 
@@ -1463,9 +1490,9 @@ class TestLoadDataStep:
             step_definition={
                 'type': 'load-data',
                 'load_type': 'json',
-                'value': '{replace-me}'
+                'value': '{replace-me}',
             },
-            parameters=wizard_values
+            parameters=wizard_values,
         )
         assert value == {"replaced": "value"}
 
@@ -1475,7 +1502,7 @@ class TestLoadDataStep:
                 step_definition={
                     'type': 'load-data',
                     'load_type': 'not-supported-type',
-                    'value': '{"key": "value"}'
+                    'value': '{"key": "value"}',
                 },
-                parameters=FakeWizardValues()
+                parameters=FakeWizardValues(),
             )
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/test_factory.py 2.31.35-1/tests/unit/customizations/wizard/test_factory.py
--- 2.23.6-1/tests/unit/customizations/wizard/test_factory.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/test_factory.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 from botocore.session import Session
 
-from awscli.customizations.wizard import factory, core, app
-from awscli.testutils import unittest, mock
+from awscli.customizations.wizard import app, core, factory
+from awscli.testutils import mock, unittest
 
 
 class TestCanCreateWizardComponents(unittest.TestCase):
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/test_wizarddev.py 2.31.35-1/tests/unit/customizations/wizard/test_wizarddev.py
--- 2.23.6-1/tests/unit/customizations/wizard/test_wizarddev.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/test_wizarddev.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,7 @@
 # language governing permissions and limitations under the License.
 from botocore.session import Session
 
-from awscli.customizations.wizard.devcommands import WizardDev
-from awscli.customizations.wizard.devcommands import WizardDevRunner
+from awscli.customizations.wizard.devcommands import WizardDev, WizardDevRunner
 from awscli.testutils import mock, unittest
 
 
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/ui/test_layout.py 2.31.35-1/tests/unit/customizations/wizard/ui/test_layout.py
--- 2.23.6-1/tests/unit/customizations/wizard/ui/test_layout.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/ui/test_layout.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,14 +10,14 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-
-from prompt_toolkit.layout import walk
 from prompt_toolkit.application import DummyApplication
+from prompt_toolkit.layout import walk
 
 from awscli.customizations.wizard.ui.layout import (
-    RunWizardDialog, WizardErrorBar
+    RunWizardDialog,
+    WizardErrorBar,
 )
+from awscli.testutils import mock, unittest
 
 
 class TestRunWizardDialog(unittest.TestCase):
@@ -66,45 +66,29 @@ class TestRunWizardDialog(unittest.TestC
         dialog = RunWizardDialog.from_done_section_definition(done_section)
         self.assertIn('Run wizard?', self.get_title_text(dialog))
         self.assertEqual(
-            self.get_button_texts(dialog),
-            [
-                '<   Yes    >',
-                '<   Back   >'
-            ]
+            self.get_button_texts(dialog), ['<   Yes    >', '<   Back   >']
         )
 
     def test_override_title_in_done_section_definition(self):
-        done_section = {
-            'description': 'Override title'
-        }
+        done_section = {'description': 'Override title'}
         dialog = RunWizardDialog.from_done_section_definition(done_section)
         self.assertIn('Override title', self.get_title_text(dialog))
 
     def test_override_button_list_in_done_section_definition(self):
-        done_section = {
-            'options': [
-                'yes'
-            ]
-        }
+        done_section = {'options': ['yes']}
         dialog = RunWizardDialog.from_done_section_definition(done_section)
         self.assertEqual(
             self.get_button_texts(dialog),
             [
                 '<   Yes    >',
-            ]
+            ],
         )
 
     def test_override_button_text_in_done_section_definition(self):
         done_section = {
             'options': [
-                {
-                    'name': 'yes',
-                    'description': 'Y'
-                },
-                {
-                    'name': 'back',
-                    'description': 'B'
-                },
+                {'name': 'yes', 'description': 'Y'},
+                {'name': 'back', 'description': 'B'},
             ]
         }
         dialog = RunWizardDialog.from_done_section_definition(done_section)
@@ -113,7 +97,7 @@ class TestRunWizardDialog(unittest.TestC
             [
                 '<    Y     >',
                 '<    B     >',
-            ]
+            ],
         )
 
 
@@ -124,7 +108,8 @@ class TestWizardErrorBar(unittest.TestCa
         self.app.error_bar_visible = None
         self.get_app = mock.patch(
             'awscli.customizations.wizard.ui.layout.get_app',
-            return_value=self.app)
+            return_value=self.app,
+        )
         self.get_app.start()
 
     def tearDown(self):
@@ -141,9 +126,11 @@ class TestWizardErrorBar(unittest.TestCa
 
     def get_error_bar_buffer(self):
         for child in walk(self.error_bar.container, skip_hidden=True):
-            if hasattr(child, 'content') and \
-                    hasattr(child.content, 'buffer') and \
-                    child.content.buffer.name == 'error_bar':
+            if (
+                hasattr(child, 'content')
+                and hasattr(child.content, 'buffer')
+                and child.content.buffer.name == 'error_bar'
+            ):
                 return child.content.buffer
         return None
 
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/ui/test_styles.py 2.31.35-1/tests/unit/customizations/wizard/ui/test_styles.py
--- 2.23.6-1/tests/unit/customizations/wizard/ui/test_styles.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/ui/test_styles.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,11 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-
 from awscli.customizations.wizard.ui.style import get_default_style
+from awscli.testutils import mock, unittest
 
 
 class TestStyles(unittest.TestCase):
-
     @mock.patch('awscli.customizations.wizard.ui.style.is_windows')
     def test_get_styles_for_windows(self, is_windows):
         is_windows.return_value = True
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/ui/test_ui.py 2.31.35-1/tests/unit/customizations/wizard/ui/test_ui.py
--- 2.23.6-1/tests/unit/customizations/wizard/ui/test_ui.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/ui/test_ui.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,12 +11,12 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import os
-import tempfile
 import shutil
+import tempfile
 
 from awscli.compat import ensure_text_type
 from awscli.customizations.wizard import ui
-from awscli.testutils import unittest, mock, cd
+from awscli.testutils import cd, mock, unittest
 
 
 class TestFileCompleter(unittest.TestCase):
@@ -36,7 +36,8 @@ class TestFileCompleter(unittest.TestCas
 
         with cd(self.temporary_directory):
             completions = list(
-                self.completer.get_completions(user_input, None))
+                self.completer.get_completions(user_input, None)
+            )
             return completions
 
     def test_can_list_children_of_dir_with_prefix(self):
@@ -44,24 +45,25 @@ class TestFileCompleter(unittest.TestCas
         self.touch_file('bar.txt')
         self.touch_file('baz.txt')
 
-        completions = self.get_completions_given_user_input(u'./b')
+        completions = self.get_completions_given_user_input('./b')
         self.assertEqual(
-            [c.text for c in completions], [os.path.join('.', 'bar.txt'),
-                                            os.path.join('.', 'baz.txt')])
+            [c.text for c in completions],
+            [os.path.join('.', 'bar.txt'), os.path.join('.', 'baz.txt')],
+        )
 
     def test_full_path_included_if_full_path_used_as_text(self):
         self.touch_file('foo.txt')
 
         completions = self.get_completions_given_user_input(
-            self.temporary_directory + u'/'
+            self.temporary_directory + '/'
         )
         self.assertEqual(
             [c.text for c in completions],
-            [os.path.join(self.temporary_directory, 'foo.txt')]
+            [os.path.join(self.temporary_directory, 'foo.txt')],
         )
 
     def test_file_not_exists_returns_empy_list(self):
         completions = self.get_completions_given_user_input(
-            self.temporary_directory + u'/asdf/does-not-exist'
+            self.temporary_directory + '/asdf/does-not-exist'
         )
         self.assertEqual(completions, [])
diff -pruN 2.23.6-1/tests/unit/customizations/wizard/ui/test_utils.py 2.31.35-1/tests/unit/customizations/wizard/ui/test_utils.py
--- 2.23.6-1/tests/unit/customizations/wizard/ui/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/customizations/wizard/ui/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,15 +10,15 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import unittest, mock
-
 from prompt_toolkit.application import Application
 from prompt_toolkit.layout import Layout
 
 from awscli.customizations.wizard.app import WizardTraverser
 from awscli.customizations.wizard.ui.utils import (
-    get_ui_control_by_buffer_name, move_to_previous_prompt
+    get_ui_control_by_buffer_name,
+    move_to_previous_prompt,
 )
+from awscli.testutils import mock, unittest
 
 
 class TestGetUIControlByName(unittest.TestCase):
@@ -31,11 +31,11 @@ class TestGetUIControlByName(unittest.Te
         layout.find_all_controls.return_value = [
             object(),  # Does not have a buffer property
             other_ui_control,
-            desired_ui_control
+            desired_ui_control,
         ]
         self.assertIs(
             get_ui_control_by_buffer_name(layout, 'desired-buffer'),
-            desired_ui_control
+            desired_ui_control,
         )
 
     def test_raises_error_when_no_matching_ui_control_found(self):
diff -pruN 2.23.6-1/tests/unit/output/test_json_output.py 2.31.35-1/tests/unit/output/test_json_output.py
--- 2.23.6-1/tests/unit/output/test_json_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/output/test_json_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,16 +11,25 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from botocore.compat import json
+import base64
+import contextlib
+import io
 import platform
-from awscli.formatter import JSONFormatter
-from awscli.testutils import mock, BaseAWSCommandParamsTest, unittest
-from awscli.testutils import skip_if_windows
+import sys
+
+from botocore.compat import json
+
 from awscli.compat import StringIO, get_stdout_text_writer
+from awscli.formatter import JSONFormatter
+from awscli.testutils import (
+    BaseAWSCommandParamsTest,
+    mock,
+    skip_if_windows,
+    unittest,
+)
 
 
 class TestGetPasswordData(BaseAWSCommandParamsTest):
-
     COMMAND = 'iam add-user-to-group --group-name foo --user-name bar'
 
     def setUp(self):
@@ -46,7 +55,6 @@ class TestGetPasswordData(BaseAWSCommand
 
 
 class TestListUsers(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestListUsers, self).setUp()
         self.parsed_response = {
@@ -56,14 +64,14 @@ class TestListUsers(BaseAWSCommandParams
                     "Path": "/",
                     "CreateDate": "2013-02-12T19:08:52Z",
                     "UserId": "EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::12345:user/testuser1"
+                    "Arn": "arn:aws:iam::12345:user/testuser1",
                 },
                 {
                     "UserName": "testuser-51",
                     "Path": "/",
                     "CreateDate": "2012-10-14T23:53:39Z",
-                    "UserId": u"EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::123456:user/testuser2"
+                    "UserId": "EXAMPLEUSERID",
+                    "Arn": "arn:aws:iam::123456:user/testuser2",
                 },
             ]
         }
@@ -73,13 +81,16 @@ class TestListUsers(BaseAWSCommandParams
         parsed_output = json.loads(output)
         self.assertIn('Users', parsed_output)
         self.assertEqual(len(parsed_output['Users']), 2)
-        self.assertEqual(sorted(parsed_output['Users'][0].keys()),
-                         ['Arn', 'CreateDate', 'Path', 'UserId', 'UserName'])
+        self.assertEqual(
+            sorted(parsed_output['Users'][0].keys()),
+            ['Arn', 'CreateDate', 'Path', 'UserId', 'UserName'],
+        )
 
     def test_jmespath_json_response(self):
         jmespath_query = 'Users[*].UserName'
-        output = self.run_cmd('iam list-users --query %s' % jmespath_query,
-                              expected_rc=0)[0]
+        output = self.run_cmd(
+            'iam list-users --query %s' % jmespath_query, expected_rc=0
+        )[0]
         parsed_output = json.loads(output)
         self.assertEqual(parsed_output, ['testuser-50', 'testuser-51'])
 
@@ -88,8 +99,9 @@ class TestListUsers(BaseAWSCommandParams
         # should be printing it to stdout if a jmespath query
         # evalutes to 0.
         jmespath_query = '`0`'
-        output = self.run_cmd('iam list-users --query %s' % jmespath_query,
-                              expected_rc=0)[0]
+        output = self.run_cmd(
+            'iam list-users --query %s' % jmespath_query, expected_rc=0
+        )[0]
         self.assertEqual(output, '0\n')
 
     def test_unknown_output_type_from_env_var(self):
@@ -101,11 +113,11 @@ class TestListUsers(BaseAWSCommandParams
 
     @skip_if_windows('Encoding tests only supported on mac/linux')
     def test_json_prints_unicode_chars(self):
-        self.parsed_response['Users'][1]['UserId'] = u'\u2713'
+        self.parsed_response['Users'][1]['UserId'] = '\u2713'
         output = self.run_cmd('iam list-users', expected_rc=0)[0]
         with mock.patch('sys.stdout', StringIO()) as f:
             out = get_stdout_text_writer()
-            out.write(u'\u2713')
+            out.write('\u2713')
             expected = f.getvalue()
         # We should not see the '\u<hex>' for of the unicode character.
         # It should be encoded into the default encoding.
@@ -126,3 +138,26 @@ class TestFormattersHandleClosedPipes(un
         # we still should have called the flush() on the
         # stream.
         fake_closed_stream.flush.assert_called_with()
+
+
+class TestBinaryData(unittest.TestCase):
+    def test_binary_data_gets_base64_encoded(self):
+        args = mock.Mock(query=None)
+        raw_bytes = b'foo'
+        response = {'BinaryValue': raw_bytes}
+        stdout_b = io.BytesIO()
+        stdout = io.TextIOWrapper(stdout_b, newline='\n')
+        formatter = JSONFormatter(args)
+
+        with contextlib.redirect_stdout(stdout):
+            formatter('command-name', response, sys.stdout)
+            stdout.flush()
+
+        assert (
+            stdout_b.getvalue()
+            == (
+                '{\n'
+                f'    "BinaryValue": "{base64.b64encode(raw_bytes).decode("utf-8")}"\n'
+                '}\n'
+            ).encode()
+        )
diff -pruN 2.23.6-1/tests/unit/output/test_table_formatter.py 2.31.35-1/tests/unit/output/test_table_formatter.py
--- 2.23.6-1/tests/unit/output/test_table_formatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/output/test_table_formatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,21 +12,20 @@
 # language governing permissions and limitations under the License.
 import unittest
 
+from awscli.compat import StringIO
 from awscli.formatter import TableFormatter
 from awscli.table import MultiTable, Styler
-from awscli.compat import StringIO
 
 SIMPLE_LIST = {
     "QueueUrls": [
         "https://us-west-2.queue.amazonaws.com/1/queue1",
         "https://us-west-2.queue.amazonaws.com/1/queue2",
         "https://us-west-2.queue.amazonaws.com/1/queue3",
-        "https://us-west-2.queue.amazonaws.com/1/queue4"
+        "https://us-west-2.queue.amazonaws.com/1/queue4",
     ]
 }
 
 
-
 SIMPLE_LIST_TABLE = """\
 ------------------------------------------------------
 |                    OperationName                   |
@@ -40,13 +39,15 @@ SIMPLE_LIST_TABLE = """\
 |+--------------------------------------------------+|
 """
 
-SIMPLE_DICT = {"Attributes":
-  {"a": "0",
-   "b": "345600",
-   "c": "0",
-   "d": "65536",
-   "e": "1351044153",
-   "f": "0"}
+SIMPLE_DICT = {
+    "Attributes": {
+        "a": "0",
+        "b": "345600",
+        "c": "0",
+        "d": "65536",
+        "e": "1351044153",
+        "f": "0",
+    }
 }
 
 
@@ -67,14 +68,8 @@ LIST_OF_DICTS = {
     "OrderableDBInstanceOptions": [
         {
             "AvailabilityZones": [
-                {
-                    "Name": "us-east-1a",
-                    "ProvisionedIopsCapable": False
-                },
-                {
-                    "Name": "us-east-1d",
-                    "ProvisionedIopsCapable": True
-                }
+                {"Name": "us-east-1a", "ProvisionedIopsCapable": False},
+                {"Name": "us-east-1d", "ProvisionedIopsCapable": True},
             ],
             "DBInstanceClass": "db.m1.large",
             "Engine": "mysql",
@@ -82,18 +77,12 @@ LIST_OF_DICTS = {
             "LicenseModel": "general-public-license",
             "MultiAZCapable": True,
             "ReadReplicaCapable": True,
-            "Vpc": False
+            "Vpc": False,
         },
         {
             "AvailabilityZones": [
-                {
-                    "Name": "us-west-2a",
-                    "ProvisionedIopsCapable": True
-                },
-                {
-                    "Name": "us-west-2b",
-                    "ProvisionedIopsCapable": True
-                }
+                {"Name": "us-west-2a", "ProvisionedIopsCapable": True},
+                {"Name": "us-west-2b", "ProvisionedIopsCapable": True},
             ],
             "DBInstanceClass": "db.m1.xlarge",
             "Engine": "mysql",
@@ -101,14 +90,11 @@ LIST_OF_DICTS = {
             "LicenseModel": "general-public-license",
             "MultiAZCapable": True,
             "ReadReplicaCapable": True,
-            "Vpc": False
+            "Vpc": False,
         },
         {
             "AvailabilityZones": [
-                {
-                    "Name": "us-west-2a",
-                    "ProvisionedIopsCapable": True
-                },
+                {"Name": "us-west-2a", "ProvisionedIopsCapable": True},
             ],
             "DBInstanceClass": "db.m1.xlarge",
             "Engine": "mysql",
@@ -116,8 +102,8 @@ LIST_OF_DICTS = {
             "LicenseModel": "general-public-license",
             "MultiAZCapable": True,
             "ReadReplicaCapable": True,
-            "Vpc": True
-        }
+            "Vpc": True,
+        },
     ]
 }
 
@@ -178,7 +164,7 @@ INNER_LIST = {
             "Progress": "100%",
             "StartTime": "2012-05-23T21:46:41.000Z",
             "SnapshotId": "snap-1234567",
-            "OwnerId": "12345"
+            "OwnerId": "12345",
         },
         {
             "Description": "Created by CreateImage(i-1234) for ami-1234 from vol-1234",
@@ -188,8 +174,8 @@ INNER_LIST = {
             "Progress": "100%",
             "StartTime": "2012-05-25T00:07:20.000Z",
             "SnapshotId": "snap-23456",
-            "OwnerId": "12345"
-        }
+            "OwnerId": "12345",
+        },
     ]
 }
 
@@ -228,7 +214,7 @@ LIST_WITH_MISSING_KEYS = {
             "Progress": "100%",
             "StartTime": "2012-05-23T21:46:41.000Z",
             "SnapshotId": "snap-1234567",
-            "OwnerId": "12345"
+            "OwnerId": "12345",
         },
         {
             "Description": "description",
@@ -238,8 +224,8 @@ LIST_WITH_MISSING_KEYS = {
             "Progress": "100%",
             "StartTime": "2012-05-25T00:07:20.000Z",
             "SnapshotId": "snap-23456",
-            "OwnerId": "12345"
-        }
+            "OwnerId": "12345",
+        },
     ]
 }
 
@@ -268,7 +254,7 @@ KEYS_NOT_FROM_FIRST_ROW = {
             "StartTime": "start_time",
             # Missing EndTime.
             "SnapshotId": "snap-1234567",
-            "OwnerId": "12345"
+            "OwnerId": "12345",
         },
         {
             "Description": "description",
@@ -278,8 +264,8 @@ KEYS_NOT_FROM_FIRST_ROW = {
             # Missing StartTime
             "EndTime": "end_time",
             "SnapshotId": "snap-23456",
-            "OwnerId": "12345"
-        }
+            "OwnerId": "12345",
+        },
     ]
 }
 
@@ -305,7 +291,7 @@ JMESPATH_FILTERED_RESPONSE = [
             "t1.micro",
             "running",
             "disabled",
-            "util"
+            "util",
         ]
     ],
     [
@@ -316,7 +302,7 @@ JMESPATH_FILTERED_RESPONSE = [
             "c1.medium",
             "running",
             "disabled",
-            "myname"
+            "myname",
         ]
     ],
 ]
@@ -336,7 +322,7 @@ JMESPATH_FILTERED_RESPONSE_DICT = [
             "InstanceId": "i-12345",
             "RootDeviceType": "ebs",
             "InstanceType": "t1.micro",
-            "ImageId": "ami-12345"
+            "ImageId": "ami-12345",
         }
     ],
     [
@@ -344,7 +330,7 @@ JMESPATH_FILTERED_RESPONSE_DICT = [
             "InstanceId": "i-56789",
             "RootDeviceType": "ebs",
             "InstanceType": "c1.medium",
-            "ImageId": "ami-56789"
+            "ImageId": "ami-56789",
         }
     ],
 ]
@@ -362,7 +348,7 @@ JMESPATH_FILTERED_RESPONSE_DICT_TABLE =
 """
 
 
-class Object(object):
+class Object:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
         self.query = None
@@ -373,9 +359,12 @@ class TestTableFormatter(unittest.TestCa
 
     def setUp(self):
         styler = Styler()
-        self.table = MultiTable(initial_section=False,
-                                column_separator='|', styler=styler,
-                                auto_reformat=False)
+        self.table = MultiTable(
+            initial_section=False,
+            column_separator='|',
+            styler=styler,
+            auto_reformat=False,
+        )
         self.formatter = TableFormatter(Object(color='off'))
         self.formatter.table = self.table
         self.stream = StringIO()
@@ -384,8 +373,10 @@ class TestTableFormatter(unittest.TestCa
         self.formatter('OperationName', data, stream=self.stream)
         rendered = self.stream.getvalue()
         if rendered != table:
-            error_message = ['Expected table rendering does not match '
-                             'the actual table rendering:']
+            error_message = [
+                'Expected table rendering does not match '
+                'the actual table rendering:'
+            ]
             error_message.append('Expected:')
             error_message.append(table)
             error_message.append('Actual:')
@@ -399,29 +390,34 @@ class TestTableFormatter(unittest.TestCa
         self.assert_data_renders_to(data=SIMPLE_DICT, table=SIMPLE_DICT_TABLE)
 
     def test_list_of_dicts(self):
-        self.assert_data_renders_to(data=LIST_OF_DICTS,
-                                    table=LIST_OF_DICTS_TABLE)
+        self.assert_data_renders_to(
+            data=LIST_OF_DICTS, table=LIST_OF_DICTS_TABLE
+        )
 
     def test_inner_table(self):
-        self.assert_data_renders_to(data=INNER_LIST,
-                                    table=INNER_LIST_TABLE)
+        self.assert_data_renders_to(data=INNER_LIST, table=INNER_LIST_TABLE)
 
     def test_empty_table(self):
-        self.assert_data_renders_to(data={},
-                                    table='')
+        self.assert_data_renders_to(data={}, table='')
 
     def test_missing_keys(self):
-        self.assert_data_renders_to(data=LIST_WITH_MISSING_KEYS,
-                                    table=LIST_WITH_MISSING_KEYS_TABLE)
+        self.assert_data_renders_to(
+            data=LIST_WITH_MISSING_KEYS, table=LIST_WITH_MISSING_KEYS_TABLE
+        )
 
     def test_new_keys_after_first_row(self):
-        self.assert_data_renders_to(data=KEYS_NOT_FROM_FIRST_ROW,
-                                    table=KEYS_NOT_FROM_FIRST_ROW_TABLE)
+        self.assert_data_renders_to(
+            data=KEYS_NOT_FROM_FIRST_ROW, table=KEYS_NOT_FROM_FIRST_ROW_TABLE
+        )
 
     def test_jmespath_filtered_response(self):
-        self.assert_data_renders_to(data=JMESPATH_FILTERED_RESPONSE,
-                                    table=JMESPATH_FILTERED_RESPONSE_TABLE)
+        self.assert_data_renders_to(
+            data=JMESPATH_FILTERED_RESPONSE,
+            table=JMESPATH_FILTERED_RESPONSE_TABLE,
+        )
 
     def test_jmespath_filtered_dict_response(self):
-        self.assert_data_renders_to(data=JMESPATH_FILTERED_RESPONSE_DICT,
-                                    table=JMESPATH_FILTERED_RESPONSE_DICT_TABLE)
+        self.assert_data_renders_to(
+            data=JMESPATH_FILTERED_RESPONSE_DICT,
+            table=JMESPATH_FILTERED_RESPONSE_DICT_TABLE,
+        )
diff -pruN 2.23.6-1/tests/unit/output/test_text_output.py 2.31.35-1/tests/unit/output/test_text_output.py
--- 2.23.6-1/tests/unit/output/test_text_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/output/test_text_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,20 +11,18 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import mock, unittest
-from awscli.compat import StringIO
 import json
+import locale
 import os
-import sys
 import re
-import locale
+import sys
 
+from awscli.compat import StringIO
 from awscli.formatter import Formatter
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 
 class TestListUsers(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestListUsers, self).setUp()
         self.first_parsed_response = {
@@ -34,10 +32,10 @@ class TestListUsers(BaseAWSCommandParams
                     "Path": "/",
                     "CreateDate": "2013-02-12T19:08:52Z",
                     "UserId": "EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::12345:user/testuser1"
+                    "Arn": "arn:aws:iam::12345:user/testuser1",
                 },
             ],
-            'Groups': []
+            'Groups': [],
         }
         self.second_parsed_response = {
             'Users': [
@@ -46,36 +44,37 @@ class TestListUsers(BaseAWSCommandParams
                     "Path": "/",
                     "CreateDate": "2012-10-14T23:53:39Z",
                     "UserId": "EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::123456:user/testuser2"
+                    "Arn": "arn:aws:iam::123456:user/testuser2",
                 },
             ],
-            'Groups': []
+            'Groups': [],
         }
 
         self.parsed_responses = [
             self.first_parsed_response,
-            self.second_parsed_response
+            self.second_parsed_response,
         ]
 
     def test_text_response(self):
         output = self.run_cmd('iam list-users --output text', expected_rc=0)[0]
         self.assertEqual(
             output,
-            ('USERS\tarn:aws:iam::12345:user/testuser1\t2013-02-12T19:08:52Z\t'
-             '/\tEXAMPLEUSERID\ttestuser-50\n'))
+            (
+                'USERS\tarn:aws:iam::12345:user/testuser1\t2013-02-12T19:08:52Z\t'
+                '/\tEXAMPLEUSERID\ttestuser-50\n'
+            ),
+        )
 
         # Test something with a jmespath expression.
         output = self.run_cmd(
-            'rds describe-engine-default-parameters ' \
+            'rds describe-engine-default-parameters '
             '--db-parameter-group-family mysql5.1 --output text',
-            expected_rc=0)[0]
-        self.assertEqual(
-            output,
-            'ENGINEDEFAULTS\tNone\n')
+            expected_rc=0,
+        )[0]
+        self.assertEqual(output, 'ENGINEDEFAULTS\tNone\n')
 
 
 class TestDescribeChangesets(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestDescribeChangesets, self).setUp()
         self.first_parsed_response = {
@@ -91,12 +90,11 @@ class TestDescribeChangesets(BaseAWSComm
             'NotificationARNs': [],
             'RollbackConfiguration': {'RollbackTriggers': []},
             'StackId': (
-                'arn:aws:cloudformation:us-west-2:12345:stack'
-                '/MyStack/12345'
+                'arn:aws:cloudformation:us-west-2:12345:stack' '/MyStack/12345'
             ),
             'StackName': 'MyStack',
             'Status': 'CREATE_COMPLETE',
-            'NextToken': "more stuff"
+            'NextToken': "more stuff",
         }
         self.second_parsed_response = {
             'Capabilities': ['CAPABILITY_IAM'],
@@ -111,11 +109,10 @@ class TestDescribeChangesets(BaseAWSComm
             'NotificationARNs': [],
             'RollbackConfiguration': {'RollbackTriggers': []},
             'StackId': (
-                'arn:aws:cloudformation:us-west-2:12345:stack'
-                '/MyStack/12345'
+                'arn:aws:cloudformation:us-west-2:12345:stack' '/MyStack/12345'
             ),
             'StackName': 'MyStack',
-            'Status': 'CREATE_COMPLETE'
+            'Status': 'CREATE_COMPLETE',
         }
         self.parsed_responses = [
             self.first_parsed_response,
@@ -124,14 +121,20 @@ class TestDescribeChangesets(BaseAWSComm
 
     def test_non_aggregate_keys(self):
         output = self.run_cmd(
-            ('cloudformation describe-change-set --change-set-name mychangeset'
-             ' --stack-name MyStack --output text'),
-            expected_rc=0
+            (
+                'cloudformation describe-change-set --change-set-name mychangeset'
+                ' --stack-name MyStack --output text'
+            ),
+            expected_rc=0,
         )[0]
         fields = output.split()
-        self.assertIn((
-            "arn:aws:cloudformation:us-west-2:12345:changeSet/mychangeset/"
-            "12345"), fields)
+        self.assertIn(
+            (
+                "arn:aws:cloudformation:us-west-2:12345:changeSet/mychangeset/"
+                "12345"
+            ),
+            fields,
+        )
         self.assert_in("CAPABILITY_IAM", fields, 1)
         self.assert_in("mychangeset", fields, 1)
         self.assert_in("2019-04-08T14:21:53.765Z", fields, 1)
@@ -147,7 +150,6 @@ class TestDescribeChangesets(BaseAWSComm
             self.assertEqual(
                 count,
                 actual_count,
-                "%s was found in the output %s times. Expected %s." % (
-                    key, actual_count, count
-                )
+                "%s was found in the output %s times. Expected %s."
+                % (key, actual_count, count),
             )
diff -pruN 2.23.6-1/tests/unit/output/test_yaml_output.py 2.31.35-1/tests/unit/output/test_yaml_output.py
--- 2.23.6-1/tests/unit/output/test_yaml_output.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/output/test_yaml_output.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,12 +16,10 @@ import datetime
 from ruamel.yaml import YAML
 
 from awscli.compat import ensure_text_type
-from awscli.testutils import BaseAWSCommandParamsTest
-from awscli.testutils import skip_if_windows
+from awscli.testutils import BaseAWSCommandParamsTest, skip_if_windows
 
 
 class TestYAMLOutput(BaseAWSCommandParamsTest):
-
     def setUp(self):
         super(TestYAMLOutput, self).setUp()
         self.parsed_response = {
@@ -31,18 +29,18 @@ class TestYAMLOutput(BaseAWSCommandParam
                     "Path": "/",
                     "CreateDate": "2013-02-12T19:08:52Z",
                     "UserId": "EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::12345:user/testuser1"
+                    "Arn": "arn:aws:iam::12345:user/testuser1",
                 },
                 {
                     "UserName": "testuser-51",
                     "Path": "/",
                     "CreateDate": "2012-10-14T23:53:39Z",
-                    "UserId": u"EXAMPLEUSERID",
-                    "Arn": "arn:aws:iam::123456:user/testuser2"
+                    "UserId": "EXAMPLEUSERID",
+                    "Arn": "arn:aws:iam::123456:user/testuser2",
                 },
             ]
         }
-        
+
         self.yaml = YAML(typ="safe", pure=True)
 
     def test_yaml_response(self):
@@ -69,8 +67,7 @@ class TestYAMLOutput(BaseAWSCommandParam
     def test_empty_dict_response_prints_nothing(self):
         self.parsed_response = {}
         stdout, _, _ = self.run_cmd(
-            'sts get-caller-identity --output yaml',
-            expected_rc=0
+            'sts get-caller-identity --output yaml', expected_rc=0
         )
         self.assertEqual(stdout, '')
 
@@ -92,15 +89,13 @@ class TestYAMLOutput(BaseAWSCommandParam
         jmespath_query = 'Users[*].UserName'
         stdout, _, _ = self.run_cmd(
             'iam list-users --output yaml --query %s' % jmespath_query,
-            expected_rc=0
+            expected_rc=0,
         )
         parsed_output = self.yaml.load(stdout)
         self.assertEqual(parsed_output, ['testuser-50', 'testuser-51'])
 
     def test_print_int(self):
-        self.parsed_response = {
-            'Count': 1
-        }
+        self.parsed_response = {'Count': 1}
         command = (
             'dynamodb scan --output yaml --table-name foo --select COUNT '
             '--query Count'
@@ -109,11 +104,7 @@ class TestYAMLOutput(BaseAWSCommandParam
         self.assertEqual(stdout, '1\n')
 
     def test_print_float(self):
-        self.parsed_response = {
-            'ConsumedCapacity': {
-                'CapacityUnits': 0.5
-            }
-        }
+        self.parsed_response = {'ConsumedCapacity': {'CapacityUnits': 0.5}}
         command = (
             'dynamodb scan --output yaml --table-name foo '
             '--query ConsumedCapacity.CapacityUnits'
@@ -122,9 +113,7 @@ class TestYAMLOutput(BaseAWSCommandParam
         self.assertEqual(stdout, '0.5\n')
 
     def test_print_none(self):
-        self.parsed_response = {
-            'ConsumedCapacity': None
-        }
+        self.parsed_response = {'ConsumedCapacity': None}
         command = (
             'dynamodb scan --output yaml --table-name foo --query '
             'ConsumedCapacity'
@@ -147,10 +136,12 @@ class TestYAMLOutput(BaseAWSCommandParam
     def test_print_timestamp(self):
         now = datetime.datetime(1970, 1, 1, 0, 0)
         self.parsed_response = {
-            "Buckets": [{
-                "CreationDate": now,
-                "Name": "foo",
-            }]
+            "Buckets": [
+                {
+                    "CreationDate": now,
+                    "Name": "foo",
+                }
+            ]
         }
         command = (
             's3api list-buckets --output yaml --query Buckets[0].CreationDate'
@@ -163,26 +154,30 @@ class TestYAMLOutput(BaseAWSCommandParam
         jmespath_query = 'Users[0].UserName'
         stdout, _, _ = self.run_cmd(
             'iam list-users --output yaml --query %s' % jmespath_query,
-            expected_rc=0
+            expected_rc=0,
         )
         self.assertEqual(stdout, '"testuser-50"\n')
 
     @skip_if_windows('Encoding tests only supported on mac/linux')
     def test_yaml_prints_unicode_chars(self):
-        self.parsed_response['Users'][1]['UserId'] = u'\u2713'
+        self.parsed_response['Users'][1]['UserId'] = '\u2713'
         stdout, _, _ = self.run_cmd(
             'iam list-users --output yaml', expected_rc=0
         )
-        self.assertIn(u'\u2713', ensure_text_type(stdout))
+        self.assertIn('\u2713', ensure_text_type(stdout))
 
     @skip_if_windows('Encoding tests only supported on mac/linux')
     def test_unicode_yaml_scalar(self):
-        self.parsed_response['Users'][1]['UserId'] = u'\u2713'
+        self.parsed_response['Users'][1]['UserId'] = '\u2713'
         stdout, _, _ = self.run_cmd(
             [
-                'iam', 'list-users', '--output', 'yaml', '--query',
-                'Users[1].UserId'
+                'iam',
+                'list-users',
+                '--output',
+                'yaml',
+                '--query',
+                'Users[1].UserId',
             ],
-            expected_rc=0
+            expected_rc=0,
         )
-        self.assertIn(u'\u2713', ensure_text_type(stdout))
+        self.assertIn('\u2713', ensure_text_type(stdout))
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_bandwidth.py 2.31.35-1/tests/unit/s3transfer/test_bandwidth.py
--- 2.23.6-1/tests/unit/s3transfer/test_bandwidth.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_bandwidth.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,7 @@ from s3transfer.bandwidth import (
     TimeUtils,
 )
 from s3transfer.futures import TransferCoordinator
+
 from tests import mock, unittest
 
 
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_compat.py 2.31.35-1/tests/unit/s3transfer/test_compat.py
--- 2.23.6-1/tests/unit/s3transfer/test_compat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_compat.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,7 @@ import tempfile
 from io import BytesIO
 
 from s3transfer.compat import readable, seekable
+
 from tests import unittest
 
 
@@ -56,7 +57,7 @@ class TestSeekable(unittest.TestCase):
     def test_non_seekable_ioerror(self):
         # Should return False if IOError is thrown.
         with open(self.filename, 'w') as f:
-            self.assertFalse(seekable(ErrorRaisingSeekWrapper(f, IOError())))
+            self.assertFalse(seekable(ErrorRaisingSeekWrapper(f, OSError())))
 
     def test_non_seekable_oserror(self):
         # Should return False if OSError is thrown.
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_copies.py 2.31.35-1/tests/unit/s3transfer/test_copies.py
--- 2.23.6-1/tests/unit/s3transfer/test_copies.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_copies.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from s3transfer.copies import CopyObjectTask, CopyPartTask
+
 from tests import BaseTaskTest, RecordingSubscriber
 
 
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_crt.py 2.31.35-1/tests/unit/s3transfer/test_crt.py
--- 2.23.6-1/tests/unit/s3transfer/test_crt.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_crt.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,15 +16,15 @@ import pytest
 from botocore.credentials import Credentials, ReadOnlyCredentials
 from botocore.exceptions import ClientError, NoCredentialsError
 from botocore.session import Session
-
+from s3transfer.constants import GB
 from s3transfer.exceptions import TransferNotDoneError
 from s3transfer.utils import CallArgs
+
 from tests import HAS_CRT, FileCreator, mock, requires_crt, unittest
 
 if HAS_CRT:
     import awscrt.auth
     import awscrt.s3
-
     import s3transfer.crt
 
 
@@ -103,7 +103,7 @@ class TestBotocoreCRTRequestSerializer(u
         self.files = FileCreator()
         self.filename = self.files.create_file('myfile', 'my content')
         self.expected_path = "/" + self.bucket + "/" + self.key
-        self.expected_host = "s3.%s.amazonaws.com" % (self.region)
+        self.expected_host = f"s3.{self.region}.amazonaws.com"
 
     def tearDown(self):
         self.files.remove_all()
@@ -165,7 +165,7 @@ class TestBotocoreCRTRequestSerializer(u
         self.assertIsNone(crt_request.headers.get("Authorization"))
 
     def _create_crt_response_error(
-            self, status_code, body, operation_name=None
+        self, status_code, body, operation_name=None
     ):
         return awscrt.s3.S3ResponseError(
             code=14343,
@@ -366,3 +366,55 @@ class TestCreateS3CRTClient:
     def test_always_enables_s3express(self, mock_s3_crt_client):
         s3transfer.crt.create_s3_crt_client('us-west-2')
         assert mock_s3_crt_client.call_args[1]['enable_s3express'] is True
+
+    @pytest.mark.parametrize(
+        'fio_options,should_stream,disk_throughput,direct_io',
+        [
+            ({'should_stream': True}, True, 0.0, False),
+            ({'disk_throughput_gbps': 8}, False, 8, False),
+            ({'direct_io': True}, False, 0.0, True),
+            (
+                {'should_stream': True, 'disk_throughput_gbps': 8},
+                True,
+                8,
+                False,
+            ),
+            ({'should_stream': True, 'direct_io': True}, True, 0.0, True),
+            ({'disk_throughput_gbps': 8, 'direct_io': True}, False, 8, True),
+            (
+                {
+                    'should_stream': True,
+                    'disk_throughput_gbps': 8,
+                    'direct_io': True,
+                },
+                True,
+                8,
+                True,
+            ),
+        ],
+    )
+    def test_fio_options(
+        self,
+        fio_options,
+        should_stream,
+        disk_throughput,
+        direct_io,
+        mock_s3_crt_client,
+    ):
+        params = {'fio_options': fio_options}
+        s3transfer.crt.create_s3_crt_client(
+            'us-west-2',
+            **params,
+        )
+        assert (
+            mock_s3_crt_client.call_args[1]['fio_options'].should_stream
+            is should_stream
+        )
+        assert (
+            mock_s3_crt_client.call_args[1]['fio_options'].disk_throughput_gbps
+            == disk_throughput
+        )
+        assert (
+            mock_s3_crt_client.call_args[1]['fio_options'].direct_io
+            is direct_io
+        )
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_delete.py 2.31.35-1/tests/unit/s3transfer/test_delete.py
--- 2.23.6-1/tests/unit/s3transfer/test_delete.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_delete.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,6 +11,7 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 from s3transfer.delete import DeleteObjectTask
+
 from tests import BaseTaskTest
 
 
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_download.py 2.31.35-1/tests/unit/s3transfer/test_download.py
--- 2.23.6-1/tests/unit/s3transfer/test_download.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_download.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,7 @@ from s3transfer.download import (
 from s3transfer.exceptions import RetriesExceededError
 from s3transfer.futures import IN_MEMORY_DOWNLOAD_TAG, BoundedExecutor
 from s3transfer.utils import CallArgs, OSUtils
+
 from tests import (
     BaseSubmissionTaskTest,
     BaseTaskTest,
@@ -395,7 +396,8 @@ class TestDownloadSubmissionTask(BaseSub
 
         self.bucket = 'mybucket'
         self.key = 'mykey'
-        self.extra_args = {}
+        self.etag = 'myetag'
+        self.extra_args = {'IfMatch': self.etag}
         self.subscribers = []
 
         # Create a stream to read from
@@ -452,7 +454,11 @@ class TestDownloadSubmissionTask(BaseSub
 
     def add_head_object_response(self):
         self.stubber.add_response(
-            'head_object', {'ContentLength': len(self.content)}
+            'head_object',
+            {
+                'ContentLength': len(self.content),
+                'ETag': self.etag,
+            },
         )
 
     def add_get_responses(self):
@@ -576,7 +582,7 @@ class TestGetObjectTask(BaseTaskTest):
         self.stream = BytesIO(self.content)
         self.fileobj = WriteCollector()
         self.osutil = OSUtils()
-        self.io_chunksize = 64 * (1024 ** 2)
+        self.io_chunksize = 64 * (1024**2)
         self.task_cls = GetObjectTask
         self.download_output_manager = DownloadSeekableOutputManager(
             self.osutil, self.transfer_coordinator, self.io_executor
@@ -963,7 +969,7 @@ class TestDeferQueue(unittest.TestCase):
         writes = self.q.request_writes(offset=11, data='hello again')
         self.assertEqual(writes, [{'offset': 11, 'data': 'hello again'}])
 
-    def test_writes_below_min_offset_are_ignored(self):
+    def test_writes_with_last_byte_below_min_offset_are_ignored(self):
         self.q.request_writes(offset=0, data='a')
         self.q.request_writes(offset=1, data='b')
         self.q.request_writes(offset=2, data='c')
@@ -978,13 +984,36 @@ class TestDeferQueue(unittest.TestCase):
             [{'offset': 3, 'data': 'd'}],
         )
 
-    def test_duplicate_writes_are_ignored(self):
+    def test_writes_below_min_offset_with_last_byte_above_min_offset_are_queued(
+        self,
+    ):
+        self.assertEqual(
+            self.q.request_writes(offset=0, data='foo'),
+            [{'offset': 0, 'data': 'foo'}],
+        )
+
+        # Even though a partial write of 'foo' was completed at offset 0,
+        # a subsequent request to the same offset with a longer
+        # length will write a substring of the data starting at
+        # index next_offset.
+        self.assertEqual(
+            self.q.request_writes(offset=0, data='foo bar'),
+            [
+                # Note we are writing a substring of the data starting at
+                # index 3 since the previous write to index 0 had length 3.
+                {'offset': 3, 'data': ' bar'},
+            ],
+        )
+
+    def test_duplicate_writes_same_length_are_ignored(self):
         self.q.request_writes(offset=2, data='c')
         self.q.request_writes(offset=1, data='b')
 
         # We're still waiting for offset=0, but if
-        # a duplicate write comes in for offset=2/offset=1
-        # it's ignored.  This gives "first one wins" behavior.
+        # a duplicate write with the same length comes in
+        # for offset=2/offset=1 it's ignored.
+        # This gives "largest one wins" behavior with ties
+        # broken via "first one wins".
         self.assertEqual(self.q.request_writes(offset=2, data='X'), [])
         self.assertEqual(self.q.request_writes(offset=1, data='Y'), [])
 
@@ -997,3 +1026,22 @@ class TestDeferQueue(unittest.TestCase):
                 {'offset': 2, 'data': 'c'},
             ],
         )
+
+    def test_duplicate_writes_longer_length_update_queue(self):
+        self.q.request_writes(offset=1, data='b')
+
+        # We're still waiting for offset=0, but if
+        # a write comes in for the same offset=2/offset=1
+        # it updates the queue if the request contains more data.
+        # This gives "largest one wins" behavior with ties
+        # broken via "first one wins".
+        self.assertEqual(self.q.request_writes(offset=1, data='bar'), [])
+
+        self.assertEqual(
+            self.q.request_writes(offset=0, data='a'),
+            [
+                {'offset': 0, 'data': 'a'},
+                # Note we're seeing 'bar', and not 'b', since len(bar) > len(b).
+                {'offset': 1, 'data': 'bar'},
+            ],
+        )
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_futures.py 2.31.35-1/tests/unit/s3transfer/test_futures.py
--- 2.23.6-1/tests/unit/s3transfer/test_futures.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_futures.py	2025-11-12 19:17:29.000000000 +0000
@@ -37,6 +37,7 @@ from s3transfer.utils import (
     NoResourcesAvailable,
     TaskSemaphore,
 )
+
 from tests import (
     RecordingExecutor,
     TransferCoordinatorWithInterrupt,
@@ -489,9 +490,7 @@ class TestBoundedExecutor(unittest.TestC
             self.executor.submit(task, tag=tag, block=False)
         except NoResourcesAvailable:
             self.fail(
-                'Task {} should not have been blocked. Caused by:\n{}'.format(
-                    task, traceback.format_exc()
-                )
+                f'Task {task} should not have been blocked. Caused by:\n{traceback.format_exc()}'
             )
 
     def add_done_callback_to_future(self, future, fn, *args, **kwargs):
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_manager.py 2.31.35-1/tests/unit/s3transfer/test_manager.py
--- 2.23.6-1/tests/unit/s3transfer/test_manager.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_manager.py	2025-11-12 19:17:29.000000000 +0000
@@ -16,6 +16,7 @@ from concurrent.futures import ThreadPoo
 from s3transfer.exceptions import CancelledError, FatalError
 from s3transfer.futures import TransferCoordinator
 from s3transfer.manager import TransferConfig, TransferCoordinatorController
+
 from tests import TransferCoordinatorWithInterrupt, unittest
 
 
@@ -132,7 +133,7 @@ class TestTransferCoordinatorController(
         try:
             self.coordinator_controller.wait()
         except FutureResultException as e:
-            self.fail('%s should not have been raised.' % e)
+            self.fail(f'{e} should not have been raised.')
 
     def test_wait_can_be_interrupted(self):
         inject_interrupt_coordinator = TransferCoordinatorWithInterrupt()
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_s3transfer.py 2.31.35-1/tests/unit/s3transfer/test_s3transfer.py
--- 2.23.6-1/tests/unit/s3transfer/test_s3transfer.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_s3transfer.py	2025-11-12 19:17:29.000000000 +0000
@@ -33,6 +33,7 @@ from s3transfer import (
     random_file_extension,
 )
 from s3transfer.exceptions import RetriesExceededError, S3UploadFailedError
+
 from tests import mock, unittest
 
 
@@ -377,7 +378,6 @@ class TestMultipartUploader(unittest.Tes
 
 
 class TestMultipartDownloader(unittest.TestCase):
-
     maxDiff = None
 
     def test_multipart_download_uses_correct_client_calls(self):
@@ -435,7 +435,7 @@ class TestMultipartDownloader(unittest.T
         response_body = b'foobarbaz'
         stream_with_errors = mock.Mock()
         stream_with_errors.read.side_effect = [
-            socket.error("fake error"),
+            OSError("fake error"),
             response_body,
         ]
         client.get_object.return_value = {'Body': stream_with_errors}
@@ -470,7 +470,7 @@ class TestMultipartDownloader(unittest.T
         client = mock.Mock()
         response_body = b'foobarbaz'
         stream_with_errors = mock.Mock()
-        stream_with_errors.read.side_effect = socket.error("fake error")
+        stream_with_errors.read.side_effect = OSError("fake error")
         client.get_object.return_value = {'Body': stream_with_errors}
         config = TransferConfig(multipart_threshold=4, multipart_chunksize=4)
 
@@ -679,7 +679,7 @@ class TestS3Transfer(unittest.TestCase):
         }
         self.client.get_object.side_effect = [
             # First request fails.
-            socket.error("fake error"),
+            OSError("fake error"),
             # Second succeeds.
             {'Body': BytesIO(b'foobar')},
         ]
@@ -697,7 +697,7 @@ class TestS3Transfer(unittest.TestCase):
         # Here we're raising an exception every single time, which
         # will exhaust our retry count and propagate a
         # RetriesExceededError.
-        self.client.get_object.side_effect = socket.error("fake error")
+        self.client.get_object.side_effect = OSError("fake error")
         with self.assertRaises(RetriesExceededError):
             transfer.download_file('bucket', 'key', 'smallfile')
 
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_subscribers.py 2.31.35-1/tests/unit/s3transfer/test_subscribers.py
--- 2.23.6-1/tests/unit/s3transfer/test_subscribers.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_subscribers.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,6 +12,7 @@
 # language governing permissions and limitations under the License.
 from s3transfer.exceptions import InvalidSubscriberMethodError
 from s3transfer.subscribers import BaseSubscriber
+
 from tests import unittest
 
 
@@ -54,7 +55,7 @@ class TestSubscribers(unittest.TestCase)
         except Exception as e:
             self.fail(
                 'Should be able to call base class subscriber method. '
-                'instead got: %s' % e
+                f'instead got: {e}'
             )
 
     def test_subclass_can_have_and_call_additional_methods(self):
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_tasks.py 2.31.35-1/tests/unit/s3transfer/test_tasks.py
--- 2.23.6-1/tests/unit/s3transfer/test_tasks.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_tasks.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,6 +14,7 @@ from concurrent import futures
 from functools import partial
 from threading import Event
 
+from botocore.context import ClientContext, get_context
 from s3transfer.futures import BoundedExecutor, TransferCoordinator
 from s3transfer.subscribers import BaseSubscriber
 from s3transfer.tasks import (
@@ -23,6 +24,7 @@ from s3transfer.tasks import (
     Task,
 )
 from s3transfer.utils import CallArgs, FunctionContainer, get_callbacks
+
 from tests import (
     BaseSubmissionTaskTest,
     BaseTaskTest,
@@ -69,6 +71,11 @@ class NOOPSubmissionTask(SubmissionTask)
         pass
 
 
+class ReturnContextTask(Task):
+    def _main(self):
+        return get_context()
+
+
 class ExceptionSubmissionTask(SubmissionTask):
     def _submit(
         self,
@@ -723,6 +730,15 @@ class TestTask(unittest.TestCase):
         with self.assertRaises(TaskFailureException):
             self.transfer_coordinator.result()
 
+    def test_passing_context_to_task_call(self):
+        ctx = ClientContext()
+        ctx.features.add('FOO')
+        task = ReturnContextTask(self.transfer_coordinator)
+        self.assertEqual(task(ctx).features, {'FOO'})
+        # `task(ctx)` returned, so the current context should be reset to None.
+        current_ctx = get_context()
+        self.assertEqual(current_ctx, None)
+
 
 class BaseMultipartTaskTest(BaseTaskTest):
     def setUp(self):
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_upload.py 2.31.35-1/tests/unit/s3transfer/test_upload.py
--- 2.23.6-1/tests/unit/s3transfer/test_upload.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_upload.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,7 +18,6 @@ import tempfile
 from io import BytesIO
 
 from botocore.stub import ANY
-
 from s3transfer.futures import IN_MEMORY_UPLOAD_TAG
 from s3transfer.manager import TransferConfig
 from s3transfer.upload import (
@@ -32,6 +31,7 @@ from s3transfer.upload import (
     UploadSubmissionTask,
 )
 from s3transfer.utils import MIN_UPLOAD_CHUNKSIZE, CallArgs, OSUtils
+
 from tests import (
     BaseSubmissionTaskTest,
     BaseTaskTest,
@@ -50,7 +50,7 @@ class InterruptionError(Exception):
 class OSUtilsExceptionOnFileSize(OSUtils):
     def get_file_size(self, filename):
         raise AssertionError(
-            "The file %s should not have been stated" % filename
+            f"The file {filename} should not have been stated"
         )
 
 
diff -pruN 2.23.6-1/tests/unit/s3transfer/test_utils.py 2.31.35-1/tests/unit/s3transfer/test_utils.py
--- 2.23.6-1/tests/unit/s3transfer/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/s3transfer/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,7 +21,6 @@ import time
 from io import BytesIO, StringIO
 
 import pytest
-
 from s3transfer.futures import TransferFuture, TransferMeta
 from s3transfer.utils import (
     MAX_PARTS,
@@ -46,6 +45,7 @@ from s3transfer.utils import (
     random_file_extension,
     set_default_checksum_algorithm,
 )
+
 from tests import NonSeekableWriter, RecordingSubscriber, mock, unittest
 
 
@@ -282,7 +282,7 @@ class TestOSUtils(BaseUtilsTest):
         try:
             OSUtils().remove_file(non_existent_file)
         except OSError as e:
-            self.fail('OSError should have been caught: %s' % e)
+            self.fail(f'OSError should have been caught: {e}')
 
     def test_remove_file_proxies_remove_file(self):
         OSUtils().remove_file(self.filename)
@@ -306,7 +306,7 @@ class TestOSUtils(BaseUtilsTest):
         filename = 'myfile'
         self.assertIsNotNone(
             re.match(
-                r'%s\.[0-9A-Fa-f]{8}$' % filename,
+                rf'{filename}\.[0-9A-Fa-f]{{8}}$',
                 OSUtils().get_temp_filename(filename),
             )
         )
@@ -329,7 +329,7 @@ class TestOSUtils(BaseUtilsTest):
 
     @mock.patch('s3transfer.utils.fallocate')
     def test_allocate_with_io_error(self, mock_fallocate):
-        mock_fallocate.side_effect = IOError()
+        mock_fallocate.side_effect = OSError()
         with self.assertRaises(IOError):
             OSUtils().allocate(self.filename, 1)
         self.assertFalse(os.path.exists(self.filename))
@@ -1149,8 +1149,8 @@ class TestAdjustChunksize(unittest.TestC
         self.adjuster = ChunksizeAdjuster()
 
     def test_valid_chunksize(self):
-        chunksize = 7 * (1024 ** 2)
-        file_size = 8 * (1024 ** 2)
+        chunksize = 7 * (1024**2)
+        file_size = 8 * (1024**2)
         new_size = self.adjuster.adjust_chunksize(chunksize, file_size)
         self.assertEqual(new_size, chunksize)
 
@@ -1167,17 +1167,17 @@ class TestAdjustChunksize(unittest.TestC
         self.assertEqual(new_size, MAX_SINGLE_UPLOAD_SIZE)
 
     def test_chunksize_too_small(self):
-        chunksize = 7 * (1024 ** 2)
-        file_size = 5 * (1024 ** 4)
+        chunksize = 7 * (1024**2)
+        file_size = 5 * (1024**4)
         # If we try to upload a 5TB file, we'll need to use 896MB part
         # sizes.
         new_size = self.adjuster.adjust_chunksize(chunksize, file_size)
-        self.assertEqual(new_size, 896 * (1024 ** 2))
+        self.assertEqual(new_size, 896 * (1024**2))
         num_parts = file_size / new_size
         self.assertLessEqual(num_parts, MAX_PARTS)
 
     def test_unknown_file_size_with_valid_chunksize(self):
-        chunksize = 7 * (1024 ** 2)
+        chunksize = 7 * (1024**2)
         new_size = self.adjuster.adjust_chunksize(chunksize)
         self.assertEqual(new_size, chunksize)
 
@@ -1218,10 +1218,10 @@ class TestS3Defaults:
             ),
             (
                 "mytestbucket",
-                 {"Some": "Setting"},
-                 {"ChecksumAlgorithm": "CRC64NVME", "Some": "Setting"},
-             ),
-             (
+                {"Some": "Setting"},
+                {"ChecksumAlgorithm": "CRC64NVME", "Some": "Setting"},
+            ),
+            (
                 "mytestbucket",
                 {"ChecksumAlgorithm": "sha256"},
                 {"ChecksumAlgorithm": "sha256"},
diff -pruN 2.23.6-1/tests/unit/test_alias.py 2.31.35-1/tests/unit/test_alias.py
--- 2.23.6-1/tests/unit/test_alias.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_alias.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,22 +15,23 @@ import subprocess
 
 from botocore.session import Session
 
-from awscli.testutils import unittest
-from awscli.testutils import mock
-from awscli.testutils import FileCreator
-from awscli.alias import AliasSubCommandInjector, InvalidAliasException
-from awscli.alias import AliasLoader
-from awscli.alias import AliasCommandInjector
-from awscli.alias import BaseAliasCommand
-from awscli.alias import ServiceAliasCommand
-from awscli.alias import ExternalAliasCommand
-from awscli.alias import InternalAliasSubCommand
-from awscli.argparser import MainArgParser, ArgParseException
-from awscli.commands import CLICommand
+from awscli.alias import (
+    AliasCommandInjector,
+    AliasLoader,
+    AliasSubCommandInjector,
+    BaseAliasCommand,
+    ExternalAliasCommand,
+    InternalAliasSubCommand,
+    InvalidAliasException,
+    ServiceAliasCommand,
+)
+from awscli.argparser import ArgParseException, MainArgParser
 from awscli.clidriver import CLIDriver
+from awscli.commands import CLICommand
+from awscli.testutils import FileCreator, mock, unittest
 
 
-class FakeParsedArgs(object):
+class FakeParsedArgs:
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
 
@@ -72,7 +73,8 @@ class TestAliasLoader(unittest.TestCase)
             f.write('my-alias = my-alias-value')
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
-            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'})
+            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'}
+        )
 
     def test_get_aliases_with_alias_that_includes_parameter(self):
         with open(self.alias_file, 'a+') as f:
@@ -80,35 +82,37 @@ class TestAliasLoader(unittest.TestCase)
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
             alias_interface.get_aliases(),
-            {'my-alias': 'my-alias-value --my-parameter my-value'})
+            {'my-alias': 'my-alias-value --my-parameter my-value'},
+        )
 
     def test_get_aliases_with_alias_that_includes_newlines(self):
         with open(self.alias_file, 'a+') as f:
             f.write('my-alias = my-alias-value\n')
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
-            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'})
+            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'}
+        )
 
     def test_get_aliases_with_alias_that_is_indented(self):
         with open(self.alias_file, 'a+') as f:
             f.write('my-alias = \n  my-alias-value\n')
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
-            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'})
+            alias_interface.get_aliases(), {'my-alias': 'my-alias-value'}
+        )
 
     def test_get_aliases_with_multiple_lines(self):
         with open(self.alias_file, 'a+') as f:
             f.write(
-                'my-alias = \n'
-                '  my-alias-value \\ \n'
-                '  --parameter foo\n'
+                'my-alias = \n' '  my-alias-value \\ \n' '  --parameter foo\n'
             )
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
             alias_interface.get_aliases(),
             # The backslash and newline should be preserved, but
             # still have the beginning and end newlines removed.
-            {'my-alias': 'my-alias-value \\\n--parameter foo'})
+            {'my-alias': 'my-alias-value \\\n--parameter foo'},
+        )
 
     def test_get_aliases_with_multiple_aliases(self):
         with open(self.alias_file, 'a+') as f:
@@ -117,8 +121,11 @@ class TestAliasLoader(unittest.TestCase)
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
             alias_interface.get_aliases(),
-            {'my-alias': 'my-alias-value',
-             'my-second-alias': 'my-second-alias-value'})
+            {
+                'my-alias': 'my-alias-value',
+                'my-second-alias': 'my-second-alias-value',
+            },
+        )
 
     def test_get_aliases_for_service(self):
         with open(self.alias_file, 'a+') as f:
@@ -128,7 +135,8 @@ class TestAliasLoader(unittest.TestCase)
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
             alias_interface.get_aliases(command=('ec2',)),
-            {'list': 'describe-instances', 'regions': 'describe-regions'})
+            {'list': 'describe-instances', 'regions': 'describe-regions'},
+        )
 
     def test_get_aliases_multiple_nesting(self):
         with open(self.alias_file, 'a+') as f:
@@ -137,7 +145,8 @@ class TestAliasLoader(unittest.TestCase)
         alias_interface = AliasLoader(self.alias_file)
         self.assertEqual(
             alias_interface.get_aliases(command=('ec2', 'wait')),
-            {'instance-new-state': 'describe-instances'})
+            {'instance-new-state': 'describe-instances'},
+        )
 
     def test_command_aliases_cleanup_whitespace(self):
         with open(self.alias_file, 'a+') as f:
@@ -152,7 +161,8 @@ class TestAliasLoader(unittest.TestCase)
             alias_interface.get_aliases(command=('iam',)),
             # The backslash and newline should be preserved, but
             # still have the beginning and end newlines removed.
-            {'my-alias': 'my-alias-value \\\n--parameter foo'})
+            {'my-alias': 'my-alias-value \\\n--parameter foo'},
+        )
 
 
 class TestAliasSubcommandInjector(unittest.TestCase):
@@ -176,10 +186,12 @@ class TestAliasSubcommandInjector(unitte
             command_table=self.command_table,
             event_name='building-command-table.iam',
             session=self.session,
-            command_object=self.command_object)
+            command_object=self.command_object,
+        )
         self.assertIn('list', self.command_table)
         self.assertIsInstance(
-            self.command_table['list'], InternalAliasSubCommand)
+            self.command_table['list'], InternalAliasSubCommand
+        )
 
     def test_global_parser_events_workflow(self):
         with open(self.alias_file, 'a+') as f:
@@ -210,14 +222,17 @@ class TestAliasSubcommandInjector(unitte
         alias_cmd = self.command_table['list']
         alias_cmd([], FakeParsedArgs(command='iam'))
         # We should have plumbed through the global parser correctly:
-        global_parser.parse_known_args.assert_called_with(['iam', 'list-roles'])
+        global_parser.parse_known_args.assert_called_with(
+            ['iam', 'list-roles']
+        )
 
     def test_noop_if_no_cmd_aliases_defined(self):
         self.injector.on_building_command_table(
             command_table=self.command_table,
             event_name='building-command-table.iam',
             session=self.session,
-            command_object=self.command_object)
+            command_object=self.command_object,
+        )
         self.assertEqual(self.command_table, {})
 
     def test_can_inject_external_aliases_in_sub_cmd(self):
@@ -228,10 +243,10 @@ class TestAliasSubcommandInjector(unitte
             command_table=self.command_table,
             event_name='building-command-table.iam',
             session=self.session,
-            command_object=self.command_object)
+            command_object=self.command_object,
+        )
         self.assertIn('list', self.command_table)
-        self.assertIsInstance(
-            self.command_table['list'], ExternalAliasCommand)
+        self.assertIsInstance(self.command_table['list'], ExternalAliasCommand)
 
 
 class TestAliasCommandInjector(unittest.TestCase):
@@ -241,13 +256,14 @@ class TestAliasCommandInjector(unittest.
         self.alias_loader = AliasLoader(self.alias_file)
         self.session = mock.Mock(spec=Session)
         self.alias_cmd_injector = AliasCommandInjector(
-            self.session, self.alias_loader)
+            self.session, self.alias_loader
+        )
         self.command_table = {}
         self.parser = MainArgParser(
             command_table=self.command_table,
             version_string='version',
             description='description',
-            argument_table={}
+            argument_table={},
         )
 
     def tearDown(self):
@@ -257,21 +273,21 @@ class TestAliasCommandInjector(unittest.
         with open(self.alias_file, 'a+') as f:
             f.write('my-alias = my-alias-value\n')
 
-        self.alias_cmd_injector.inject_aliases(
-            self.command_table, self.parser)
+        self.alias_cmd_injector.inject_aliases(self.command_table, self.parser)
         self.assertIn('my-alias', self.command_table)
         self.assertIsInstance(
-            self.command_table['my-alias'], ServiceAliasCommand)
+            self.command_table['my-alias'], ServiceAliasCommand
+        )
 
     def test_external_alias_command(self):
         with open(self.alias_file, 'a+') as f:
             f.write('my-alias = !my-alias-value\n')
 
-        self.alias_cmd_injector.inject_aliases(
-            self.command_table, self.parser)
+        self.alias_cmd_injector.inject_aliases(self.command_table, self.parser)
         self.assertIn('my-alias', self.command_table)
         self.assertIsInstance(
-            self.command_table['my-alias'], ExternalAliasCommand)
+            self.command_table['my-alias'], ExternalAliasCommand
+        )
 
     def test_clobbers_builtins(self):
         builtin_cmd = mock.Mock(spec=CLICommand)
@@ -280,11 +296,11 @@ class TestAliasCommandInjector(unittest.
         with open(self.alias_file, 'a+') as f:
             f.write('builtin = my-alias-value\n')
 
-        self.alias_cmd_injector.inject_aliases(
-            self.command_table, self.parser)
+        self.alias_cmd_injector.inject_aliases(self.command_table, self.parser)
         self.assertIn('builtin', self.command_table)
         self.assertIsInstance(
-            self.command_table['builtin'], ServiceAliasCommand)
+            self.command_table['builtin'], ServiceAliasCommand
+        )
 
     def test_shadow_proxy_command(self):
         builtin_cmd = mock.Mock(spec=CLICommand)
@@ -294,15 +310,12 @@ class TestAliasCommandInjector(unittest.
         with open(self.alias_file, 'a+') as f:
             f.write('builtin = builtin\n')
 
-        self.alias_cmd_injector.inject_aliases(
-            self.command_table, self.parser)
+        self.alias_cmd_injector.inject_aliases(self.command_table, self.parser)
 
-        self.command_table['builtin'](
-            [], FakeParsedArgs(command='builtin'))
+        self.command_table['builtin']([], FakeParsedArgs(command='builtin'))
         # The builtin command should be passed to the alias
         # command when added to the table.
-        builtin_cmd.assert_called_with(
-            [], FakeParsedArgs(command='builtin'))
+        builtin_cmd.assert_called_with([], FakeParsedArgs(command='builtin'))
 
 
 class TestBaseAliasCommand(unittest.TestCase):
@@ -329,7 +342,7 @@ class TestInternalAliasSubCommand(unitte
             command_table=self.command_table,
             version_string='version',
             description='description',
-            argument_table={}
+            argument_table={},
         )
 
     def create_alias_sub_command(self):
@@ -348,7 +361,8 @@ class TestInternalAliasSubCommand(unitte
         parsed_globals = FakeParsedArgs(command=self.parent_command)
         alias_cmd(args=[], parsed_globals=parsed_globals)
         self.command_object.assert_called_with(
-            [self.alias_value], parsed_globals,
+            [self.alias_value],
+            parsed_globals,
         )
 
     def test_alias_with_alias_specific_args(self):
@@ -388,8 +402,8 @@ class TestInternalAliasSubCommand(unitte
         self.global_args_parser.add_argument('--endpoint-url')
         alias_cmd = self.create_alias_sub_command()
         parsed_globals = FakeParsedArgs(
-            command=self.parent_command,
-            endpoint_url='http://localhost:8000/')
+            command=self.parent_command, endpoint_url='http://localhost:8000/'
+        )
         alias_cmd(args=[], parsed_globals=parsed_globals)
         self.command_object.assert_called_with(
             ['list-stacks'],
@@ -432,7 +446,8 @@ class TestInternalAliasSubCommand(unitte
         alias_cmd(args=[], parsed_globals=parsed_globals)
         self.command_object.assert_not_called()
         self.shadow_proxy_command.assert_called_with(
-            ['--stack-status-filter', 'CREATE_COMPLETE'], parsed_globals,
+            ['--stack-status-filter', 'CREATE_COMPLETE'],
+            parsed_globals,
         )
 
 
@@ -452,11 +467,11 @@ class TestServiceAliasCommand(unittest.T
             command_table=command_table,
             version_string='version',
             description='description',
-            argument_table={}
+            argument_table={},
         )
         if extra_params:
             for extra_param in extra_params:
-                parser.add_argument('--'+extra_param)
+                parser.add_argument('--' + extra_param)
         return parser
 
     def test_alias_with_only_service_command(self):
@@ -465,11 +480,13 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table([alias_value])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
-            [], FakeParsedArgs(command='myservice'))
+            [], FakeParsedArgs(command='myservice')
+        )
 
     def tests_alias_with_shadow_proxy_command(self):
         alias_value = 'some-service'
@@ -482,13 +499,19 @@ class TestServiceAliasCommand(unittest.T
         parser = self.create_parser(command_table)
 
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table,
-            parser, shadow_proxy_command)
+            self.alias_name,
+            alias_value,
+            self.session,
+            command_table,
+            parser,
+            shadow_proxy_command,
+        )
         command_table[self.alias_name] = alias_cmd
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         shadow_proxy_command.assert_called_with(
-            [], FakeParsedArgs(command=alias_value))
+            [], FakeParsedArgs(command=alias_value)
+        )
 
     def test_alias_with_shadow_proxy_command_no_match(self):
         alias_value = 'some-other-command'
@@ -501,13 +524,19 @@ class TestServiceAliasCommand(unittest.T
         parser = self.create_parser(command_table)
 
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table,
-            parser, shadow_proxy_command)
+            self.alias_name,
+            alias_value,
+            self.session,
+            command_table,
+            parser,
+            shadow_proxy_command,
+        )
         command_table[self.alias_name] = alias_cmd
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table[alias_value].assert_called_with(
-            [], FakeParsedArgs(command=alias_value))
+            [], FakeParsedArgs(command=alias_value)
+        )
         # Even though it was provided, it should not be called because
         # the alias value did not match the shadow command name.
         self.assertFalse(shadow_proxy_command.called)
@@ -518,12 +547,14 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         parsed_globals = FakeParsedArgs(command=self.alias_name)
         alias_cmd([], parsed_globals)
         command_table['myservice'].assert_called_with(
-            ['myoperation'], FakeParsedArgs(command='myservice'))
+            ['myoperation'], FakeParsedArgs(command='myservice')
+        )
 
     def test_alias_then_help_command(self):
         alias_value = 'myservice myoperation'
@@ -531,12 +562,14 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         parsed_globals = FakeParsedArgs(command=self.alias_name)
         alias_cmd(['help'], parsed_globals)
         command_table['myservice'].assert_called_with(
-            ['myoperation', 'help'], FakeParsedArgs(command='myservice'))
+            ['myoperation', 'help'], FakeParsedArgs(command='myservice')
+        )
 
     def test_alias_then_additional_parameters(self):
         alias_value = 'myservice myoperation'
@@ -544,13 +577,14 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         parsed_globals = FakeParsedArgs(command=self.alias_name)
         alias_cmd(['--parameter', 'val'], parsed_globals)
         command_table['myservice'].assert_called_with(
             ['myoperation', '--parameter', 'val'],
-            FakeParsedArgs(command='myservice')
+            FakeParsedArgs(command='myservice'),
         )
 
     def test_alias_with_operation_and_parameters(self):
@@ -559,12 +593,13 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation', '--my-parameter', 'val'],
-            FakeParsedArgs(command='myservice')
+            FakeParsedArgs(command='myservice'),
         )
 
     def test_alias_with_operation_and_global_parameters(self):
@@ -572,14 +607,16 @@ class TestServiceAliasCommand(unittest.T
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(
-            command_table, extra_params=['global-param'])
+            command_table, extra_params=['global-param']
+        )
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation'],
-            FakeParsedArgs(command='myservice', global_param='val')
+            FakeParsedArgs(command='myservice', global_param='val'),
         )
 
     def test_maintains_global_defaults_when_missing_from_alias(self):
@@ -589,16 +626,17 @@ class TestServiceAliasCommand(unittest.T
         parser = self.create_parser(command_table)
         parser.add_argument('--global-with-default', default='default')
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
         alias_cmd(
             [],
             FakeParsedArgs(
-                command=self.alias_name, global_with_default='default')
+                command=self.alias_name, global_with_default='default'
+            ),
         )
         command_table['myservice'].assert_called_with(
             ['myoperation'],
-            FakeParsedArgs(
-                command='myservice', global_with_default='default')
+            FakeParsedArgs(command='myservice', global_with_default='default'),
         )
 
     def test_sets_global_parameters_when_differs_from_defaults(self):
@@ -608,13 +646,15 @@ class TestServiceAliasCommand(unittest.T
         parser = self.create_parser(command_table)
         parser.add_argument('--global-with-default', default='default')
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation'],
             FakeParsedArgs(
-                command='myservice', global_with_default='non-default')
+                command='myservice', global_with_default='non-default'
+            ),
         )
 
     def test_global_parameters_can_be_emitted_and_modified(self):
@@ -622,9 +662,11 @@ class TestServiceAliasCommand(unittest.T
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(
-            command_table, extra_params=['global-param'])
+            command_table, extra_params=['global-param']
+        )
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         def replace_global_param_value_with_foo(event_name, **kwargs):
             parsed_args = kwargs['parsed_args']
@@ -633,61 +675,57 @@ class TestServiceAliasCommand(unittest.T
         self.session.emit.side_effect = replace_global_param_value_with_foo
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         self.session.emit.assert_called_with(
-            'top-level-args-parsed', parsed_args=mock.ANY,
-            session=self.session)
+            'top-level-args-parsed', parsed_args=mock.ANY, session=self.session
+        )
 
         command_table['myservice'].assert_called_with(
             ['myoperation'],
-            FakeParsedArgs(command='myservice', global_param='foo')
+            FakeParsedArgs(command='myservice', global_param='foo'),
         )
 
     def test_properly_handles_multiple_spaces(self):
-        alias_value = (
-            'myservice myoperation    --my-parameter val'
-        )
+        alias_value = 'myservice myoperation    --my-parameter val'
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation', '--my-parameter', 'val'],
-            FakeParsedArgs(command='myservice')
+            FakeParsedArgs(command='myservice'),
         )
 
     def test_properly_parses_aliases_broken_by_multiple_lines(self):
-        alias_value = (
-            'myservice myoperation \\'
-            '\n--my-parameter val'
-        )
+        alias_value = 'myservice myoperation \\' '\n--my-parameter val'
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation', '--my-parameter', 'val'],
-            FakeParsedArgs(command='myservice')
+            FakeParsedArgs(command='myservice'),
         )
 
     def test_properly_preserves_quoted_values(self):
-        alias_value = (
-            'myservice myoperation --my-parameter \' \n$""\''
-        )
+        alias_value = 'myservice myoperation --my-parameter \' \n$""\''
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         alias_cmd([], FakeParsedArgs(command=self.alias_name))
         command_table['myservice'].assert_called_with(
             ['myoperation', '--my-parameter', ' \n$""'],
-            FakeParsedArgs(command='myservice')
+            FakeParsedArgs(command='myservice'),
         )
 
     def test_errors_when_service_command_is_invalid(self):
@@ -696,7 +734,8 @@ class TestServiceAliasCommand(unittest.T
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         with self.assertRaises(ArgParseException):
             # Even though we catch the system exit, a message will always
@@ -710,9 +749,11 @@ class TestServiceAliasCommand(unittest.T
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(
-            command_table, extra_params=['global-param'])
+            command_table, extra_params=['global-param']
+        )
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         with self.assertRaises(ArgParseException):
             # Even though we catch the system exit, a message will always
@@ -724,29 +765,26 @@ class TestServiceAliasCommand(unittest.T
     def test_errors_when_shell_cannot_parse_alias(self):
         # Ending with a escape character that does not escape anything
         # is invalid and cannot be properly parsed.
-        alias_value = (
-            'myservice myoperation \\'
-        )
+        alias_value = 'myservice myoperation \\'
 
         command_table = self.create_command_table(['myservice'])
         parser = self.create_parser(command_table)
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         with self.assertRaises(InvalidAliasException):
             alias_cmd([], FakeParsedArgs(command=self.alias_name))
 
     def test_errors_when_unsupported_global_parameter_in_alias(self):
         # Unsupported global parameters are: --profile and --debug
-        alias_value = (
-            'myservice myoperation --profile value'
-        )
+        alias_value = 'myservice myoperation --profile value'
 
         command_table = self.create_command_table(['myservice'])
-        parser = self.create_parser(
-            command_table, extra_params=['profile'])
+        parser = self.create_parser(command_table, extra_params=['profile'])
         alias_cmd = ServiceAliasCommand(
-            self.alias_name, alias_value, self.session, command_table, parser)
+            self.alias_name, alias_value, self.session, command_table, parser
+        )
 
         with self.assertRaises(InvalidAliasException):
             alias_cmd([], FakeParsedArgs(command=self.alias_name))
@@ -759,33 +797,35 @@ class TestExternalAliasCommand(unittest.
     def test_run_external_command(self):
         alias_value = '!ls'
         alias_cmd = ExternalAliasCommand(
-            'alias-name', alias_value, invoker=self.subprocess_call)
+            'alias-name', alias_value, invoker=self.subprocess_call
+        )
         alias_cmd([], FakeParsedArgs(command='alias-name'))
         self.subprocess_call.assert_called_with('ls', shell=True)
 
     def test_external_command_returns_rc_of_subprocess_call(self):
         alias_value = '!ls'
         alias_cmd = ExternalAliasCommand(
-            'alias-name', alias_value, invoker=self.subprocess_call)
+            'alias-name', alias_value, invoker=self.subprocess_call
+        )
         self.subprocess_call.return_value = 1
         self.assertEqual(
-            alias_cmd([], FakeParsedArgs(command='alias-name')), 1)
+            alias_cmd([], FakeParsedArgs(command='alias-name')), 1
+        )
 
     def test_external_command_uses_literal_alias_value(self):
-        alias_value = (
-            '!f () {\n'
-            '  ls .\n'
-            '}; f'
-        )
+        alias_value = '!f () {\n' '  ls .\n' '}; f'
         alias_cmd = ExternalAliasCommand(
-            'alias-name', alias_value, invoker=self.subprocess_call)
+            'alias-name', alias_value, invoker=self.subprocess_call
+        )
         alias_cmd([], FakeParsedArgs(command='alias-name'))
         self.subprocess_call.assert_called_with(alias_value[1:], shell=True)
 
     def test_external_command_then_additional_args(self):
         alias_value = '!f () { ls "$1" }; f'
         alias_cmd = ExternalAliasCommand(
-            'alias-name', alias_value, invoker=self.subprocess_call)
+            'alias-name', alias_value, invoker=self.subprocess_call
+        )
         alias_cmd(['extra'], FakeParsedArgs(command='alias-name'))
         self.subprocess_call.assert_called_with(
-            'f () { ls "$1" }; f extra', shell=True)
+            'f () { ls "$1" }; f extra', shell=True
+        )
diff -pruN 2.23.6-1/tests/unit/test_argparser.py 2.31.35-1/tests/unit/test_argparser.py
--- 2.23.6-1/tests/unit/test_argparser.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_argparser.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,8 +12,8 @@
 # language governing permissions and limitations under the License.
 from argparse import ArgumentParser
 
-from awscli.testutils import unittest
 from awscli.argparser import CommandAction, FirstPassGlobalArgParser
+from awscli.testutils import unittest
 
 
 class TestCommandAction(unittest.TestCase):
@@ -23,14 +23,16 @@ class TestCommandAction(unittest.TestCas
     def test_choices(self):
         command_table = {'pre-existing': object()}
         self.parser.add_argument(
-            'command', action=CommandAction, command_table=command_table)
+            'command', action=CommandAction, command_table=command_table
+        )
         parsed_args = self.parser.parse_args(['pre-existing'])
         self.assertEqual(parsed_args.command, 'pre-existing')
 
     def test_choices_added_after(self):
         command_table = {'pre-existing': object()}
         self.parser.add_argument(
-            'command', action=CommandAction, command_table=command_table)
+            'command', action=CommandAction, command_table=command_table
+        )
         command_table['after'] = object()
 
         # The pre-existing command should still be able to be parsed
diff -pruN 2.23.6-1/tests/unit/test_argprocess.py 2.31.35-1/tests/unit/test_argprocess.py
--- 2.23.6-1/tests/unit/test_argprocess.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_argprocess.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,30 +12,32 @@
 # language governing permissions and limitations under the License.
 import json
 
-from botocore import xform_name
-from botocore import model
+from botocore import model, xform_name
 from botocore.compat import OrderedDict
 
-from awscli.testutils import mock, unittest
-from awscli.testutils import BaseCLIDriverTest
-from awscli.testutils import temporary_file
+from awscli.argprocess import (
+    ParamError,
+    ParamShorthandDocGen,
+    ParamShorthandParser,
+    ParamUnknownKeyError,
+    detect_shape_structure,
+    unpack_cli_arg,
+)
+from awscli.arguments import (
+    BooleanArgument,
+    CLIArgument,
+    CustomArgument,
+    ListArgument,
+    create_argument_model_from_schema,
+)
 from awscli.help import OperationHelpCommand
-from awscli.argprocess import detect_shape_structure
-from awscli.argprocess import unpack_cli_arg
-from awscli.argprocess import ParamShorthandParser
-from awscli.argprocess import ParamShorthandDocGen
-from awscli.argprocess import ParamError
-from awscli.argprocess import ParamUnknownKeyError
-from awscli.paramfile import URIArgumentHandler, LOCAL_PREFIX_MAP
-from awscli.arguments import CustomArgument, CLIArgument
-from awscli.arguments import ListArgument, BooleanArgument
-from awscli.arguments import create_argument_model_from_schema
+from awscli.paramfile import LOCAL_PREFIX_MAP, URIArgumentHandler
+from awscli.testutils import BaseCLIDriverTest, mock, temporary_file, unittest
 
 
 # These tests use real service types so that we can
 # verify the real shapes of services.
 class BaseArgProcessTest(BaseCLIDriverTest):
-
     def get_param_model(self, dotted_name):
         service_name, operation_name, param_name = dotted_name.split('.')
         service_model = self.session.get_service_model(service_name)
@@ -58,8 +60,7 @@ class BaseArgProcessTest(BaseCLIDriverTe
         if argument_name is None:
             argument_name = 'foo'
         argument = mock.Mock()
-        m = model.DenormalizedStructureBuilder().with_members(
-            argument_model)
+        m = model.DenormalizedStructureBuilder().with_members(argument_model)
         argument.argument_model = m.build_model()
         argument.name = argument_name
         argument.cli_name = "--" + argument_name
@@ -84,7 +85,6 @@ class TestURIParams(BaseArgProcessTest):
 
 
 class TestArgShapeDetection(BaseArgProcessTest):
-
     def assert_shape_type(self, spec, expected_type):
         p = self.get_param_model(spec)
         actual_structure = detect_shape_structure(p.argument_model)
@@ -97,8 +97,9 @@ class TestArgShapeDetection(BaseArgProce
         self.assertEqual(actual_structure, expected_type)
 
     def test_detect_scalar(self):
-        self.assert_shape_type('iam.AddRoleToInstanceProfile.RoleName',
-                               'scalar')
+        self.assert_shape_type(
+            'iam.AddRoleToInstanceProfile.RoleName', 'scalar'
+        )
 
     def test_detect_list_of_strings(self):
         self.assert_shape_type('sns.AddPermission.AWSAccountId', 'list-scalar')
@@ -106,65 +107,65 @@ class TestArgShapeDetection(BaseArgProce
     def test_detect_structure_of_scalars(self):
         self.assert_shape_type(
             'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration',
-            'structure(scalars)')
+            'structure(scalars)',
+        )
 
     def test_list_structure_scalars(self):
         self.assert_shape_type(
             'elb.RegisterInstancesWithLoadBalancer.Instances',
-            'list-structure(scalar)')
+            'list-structure(scalar)',
+        )
 
     def test_list_structure_scalars_2(self):
         self.assert_shape_type(
-            'elb.CreateLoadBalancer.Listeners',
-            'list-structure(scalars)')
+            'elb.CreateLoadBalancer.Listeners', 'list-structure(scalars)'
+        )
 
     def test_list_structure_of_list_and_strings(self):
         self.assert_shape_type(
-            'ec2.DescribeInstances.Filters', 'list-structure(list-scalar, scalar)')
+            'ec2.DescribeInstances.Filters',
+            'list-structure(list-scalar, scalar)',
+        )
 
     def test_map_scalar(self):
         self.assert_shape_type(
-            'sqs.SetQueueAttributes.Attributes', 'map-scalar')
+            'sqs.SetQueueAttributes.Attributes', 'map-scalar'
+        )
 
     def test_struct_list_scalar(self):
-        self.assert_custom_shape_type({
-            "type": "object",
-            "properties": {
-                "Consistent": {
-                    "type": "boolean",
+        self.assert_custom_shape_type(
+            {
+                "type": "object",
+                "properties": {
+                    "Consistent": {
+                        "type": "boolean",
+                    },
+                    "Args": {"type": "array", "items": {"type": "string"}},
                 },
-                "Args": {
-                    "type": "array",
-                    "items": {
-                        "type": "string"
-                    }
-                }
-            }
-        }, 'structure(list-scalar, scalar)')
+            },
+            'structure(list-scalar, scalar)',
+        )
 
     def test_recursive_shape(self):
         shapes = {
             'InputStructure': {
                 'type': 'structure',
-                'members': {
-                    'A': {'shape': 'RecursiveShape'}
-                }
+                'members': {'A': {'shape': 'RecursiveShape'}},
             },
             'RecursiveShape': {
                 'type': 'structure',
                 'members': {
                     'B': {'shape': 'StringType'},
                     'C': {'shape': 'RecursiveShape'},
-                }
+                },
             },
-            'StringType': {
-                'type': 'string'
-            }
+            'StringType': {'type': 'string'},
         }
-        shape = model.StructureShape(shape_name='InputStructure',
-                                     shape_model=shapes['InputStructure'],
-                                     shape_resolver=model.ShapeResolver(
-                                         shape_map=shapes))
+        shape = model.StructureShape(
+            shape_name='InputStructure',
+            shape_model=shapes['InputStructure'],
+            shape_resolver=model.ShapeResolver(shape_map=shapes),
+        )
         self.assertIn('recursive', detect_shape_structure(shape))
 
 
@@ -183,7 +184,8 @@ class TestParamShorthand(BaseArgProcessT
 
     def test_simplify_structure_scalars(self):
         p = self.get_param_model(
-            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration')
+            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration'
+        )
         value = 'ApplicationName=foo,TemplateName=bar'
         json_value = '{"ApplicationName": "foo", "TemplateName": "bar"}'
         returned = self.parse_shorthand(p, value)
@@ -191,17 +193,18 @@ class TestParamShorthand(BaseArgProcessT
         self.assertEqual(returned, json_version)
 
     def test_flattens_marked_single_member_structure_list(self):
-        argument = self.create_argument({
-            'Arg': {
-                'type': 'list',
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Bar': {'type': 'string'}
-                    }
+        argument = self.create_argument(
+            {
+                'Arg': {
+                    'type': 'list',
+                    'member': {
+                        'type': 'structure',
+                        'members': {'Bar': {'type': 'string'}},
+                    },
                 }
-            }
-        }, 'arg')
+            },
+            'arg',
+        )
         argument.argument_model = argument.argument_model.members['Arg']
         value = ['foo', 'baz']
         uses_old_list = 'awscli.argprocess.ParamShorthand._uses_old_list_case'
@@ -210,17 +213,18 @@ class TestParamShorthand(BaseArgProcessT
         self.assertEqual(returned, [{"Bar": "foo"}, {"Bar": "baz"}])
 
     def test_does_not_flatten_unmarked_single_member_structure_list(self):
-        argument = self.create_argument({
-            'Arg': {
-                'type': 'list',
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Bar': {'type': 'string'}
-                    }
+        argument = self.create_argument(
+            {
+                'Arg': {
+                    'type': 'list',
+                    'member': {
+                        'type': 'structure',
+                        'members': {'Bar': {'type': 'string'}},
+                    },
                 }
-            }
-        }, 'arg')
+            },
+            'arg',
+        )
         argument.argument_model = argument.argument_model.members['Arg']
         value = ['Bar=foo', 'Bar=baz']
         uses_old_list = 'awscli.argprocess.ParamShorthand._uses_old_list_case'
@@ -250,7 +254,8 @@ class TestParamShorthand(BaseArgProcessT
 
     def test_list_structure_scalars(self):
         p = self.get_param_model(
-            'elb.RegisterInstancesWithLoadBalancer.Instances')
+            'elb.RegisterInstancesWithLoadBalancer.Instances'
+        )
         event_name = (
             'process-cli-arg.elb.register-instances-with-load-balancer'
         )
@@ -258,54 +263,74 @@ class TestParamShorthand(BaseArgProcessT
         # with argparse which means the value will be presented
         # to us as a list.
         returned = self.parse_shorthand(
-            p, ['instance-1', 'instance-2'], event_name)
-        self.assertEqual(returned, [{'InstanceId': 'instance-1'},
-                                    {'InstanceId': 'instance-2'}])
+            p, ['instance-1', 'instance-2'], event_name
+        )
+        self.assertEqual(
+            returned,
+            [{'InstanceId': 'instance-1'}, {'InstanceId': 'instance-2'}],
+        )
 
     def test_list_structure_list_scalar(self):
         p = self.get_param_model('ec2.DescribeInstances.Filters')
-        expected = [{"Name": "instance-id", "Values": ["i-1", "i-2"]},
-                    {"Name": "architecture", "Values": ["i386"]}]
+        expected = [
+            {"Name": "instance-id", "Values": ["i-1", "i-2"]},
+            {"Name": "architecture", "Values": ["i386"]},
+        ]
         returned = self.parse_shorthand(
-            p, ["Name=instance-id,Values=i-1,i-2",
-                "Name=architecture,Values=i386"])
+            p,
+            [
+                "Name=instance-id,Values=i-1,i-2",
+                "Name=architecture,Values=i386",
+            ],
+        )
         self.assertEqual(returned, expected)
 
         # With spaces around the comma.
         returned2 = self.parse_shorthand(
-            p, ["Name=instance-id, Values=i-1,i-2",
-                "Name=architecture, Values=i386"])
+            p,
+            [
+                "Name=instance-id, Values=i-1,i-2",
+                "Name=architecture, Values=i386",
+            ],
+        )
         self.assertEqual(returned2, expected)
 
         # Strip off leading/trailing spaces.
         returned3 = self.parse_shorthand(
-            p, ["Name = instance-id, Values = i-1,i-2",
-                "Name = architecture, Values = i386"])
+            p,
+            [
+                "Name = instance-id, Values = i-1,i-2",
+                "Name = architecture, Values = i386",
+            ],
+        )
         self.assertEqual(returned3, expected)
 
     def test_parse_empty_values(self):
         # A value can be omitted and will default to an empty string.
         p = self.get_param_model('ec2.DescribeInstances.Filters')
-        expected = [{"Name": "", "Values": ["i-1", "i-2"]},
-                    {"Name": "architecture", "Values": ['']}]
+        expected = [
+            {"Name": "", "Values": ["i-1", "i-2"]},
+            {"Name": "architecture", "Values": ['']},
+        ]
         returned = self.parse_shorthand(
-            p, ["Name=,Values=i-1,i-2",
-                "Name=architecture,Values="])
+            p, ["Name=,Values=i-1,i-2", "Name=architecture,Values="]
+        )
         self.assertEqual(returned, expected)
 
     def test_list_structure_list_scalar_2(self):
         p = self.get_param_model('emr.ModifyInstanceGroups.InstanceGroups')
         expected = [
-            {"InstanceGroupId": "foo",
-             "InstanceCount": 4},
-            {"InstanceGroupId": "bar",
-             "InstanceCount": 1}
+            {"InstanceGroupId": "foo", "InstanceCount": 4},
+            {"InstanceGroupId": "bar", "InstanceCount": 1},
         ]
 
-        simplified = self.parse_shorthand(p, [
-            "InstanceGroupId=foo,InstanceCount=4",
-            "InstanceGroupId=bar,InstanceCount=1"
-        ])
+        simplified = self.parse_shorthand(
+            p,
+            [
+                "InstanceGroupId=foo,InstanceCount=4",
+                "InstanceGroupId=bar,InstanceCount=1",
+            ],
+        )
 
         self.assertEqual(simplified, expected)
 
@@ -316,34 +341,47 @@ class TestParamShorthand(BaseArgProcessT
         self.assertEqual(simplified, expected)
 
     def test_list_structure_list_multiple_scalar(self):
-        p = self.get_param_model(
-            'emr.ModifyInstanceGroups.InstanceGroups')
+        p = self.get_param_model('emr.ModifyInstanceGroups.InstanceGroups')
         returned = self.parse_shorthand(
             p,
-            ['InstanceGroupId=foo,InstanceCount=3,'
-             'EC2InstanceIdsToTerminate=i-12345,i-67890'])
-        self.assertEqual(returned, [{'EC2InstanceIdsToTerminate': [
-                                         'i-12345', 'i-67890'
-                                     ],
-                                     'InstanceGroupId': 'foo',
-                                     'InstanceCount': 3}])
+            [
+                'InstanceGroupId=foo,InstanceCount=3,'
+                'EC2InstanceIdsToTerminate=i-12345,i-67890'
+            ],
+        )
+        self.assertEqual(
+            returned,
+            [
+                {
+                    'EC2InstanceIdsToTerminate': ['i-12345', 'i-67890'],
+                    'InstanceGroupId': 'foo',
+                    'InstanceCount': 3,
+                }
+            ],
+        )
 
     def test_list_structure_scalars_2(self):
         p = self.get_param_model('elb.CreateLoadBalancer.Listeners')
         expected = [
-            {"Protocol": "protocol1",
-             "LoadBalancerPort": 1,
-             "InstanceProtocol": "instance_protocol1",
-             "InstancePort": 2,
-             "SSLCertificateId": "ssl_certificate_id1"},
-            {"Protocol": "protocol2",
-             "LoadBalancerPort": 3,
-             "InstanceProtocol": "instance_protocol2",
-             "InstancePort": 4,
-             "SSLCertificateId": "ssl_certificate_id2"},
+            {
+                "Protocol": "protocol1",
+                "LoadBalancerPort": 1,
+                "InstanceProtocol": "instance_protocol1",
+                "InstancePort": 2,
+                "SSLCertificateId": "ssl_certificate_id1",
+            },
+            {
+                "Protocol": "protocol2",
+                "LoadBalancerPort": 3,
+                "InstanceProtocol": "instance_protocol2",
+                "InstancePort": 4,
+                "SSLCertificateId": "ssl_certificate_id2",
+            },
         ]
         returned = unpack_cli_arg(
-            p, ['{"Protocol": "protocol1", "LoadBalancerPort": 1, '
+            p,
+            [
+                '{"Protocol": "protocol1", "LoadBalancerPort": 1, '
                 '"InstanceProtocol": "instance_protocol1", '
                 '"InstancePort": 2, "SSLCertificateId": '
                 '"ssl_certificate_id1"}',
@@ -351,31 +389,38 @@ class TestParamShorthand(BaseArgProcessT
                 '"InstanceProtocol": "instance_protocol2", '
                 '"InstancePort": 4, "SSLCertificateId": '
                 '"ssl_certificate_id2"}',
-            ])
+            ],
+        )
         self.assertEqual(returned, expected)
-        simplified = self.parse_shorthand(p, [
-            'Protocol=protocol1,LoadBalancerPort=1,'
-            'InstanceProtocol=instance_protocol1,'
-            'InstancePort=2,SSLCertificateId=ssl_certificate_id1',
-            'Protocol=protocol2,LoadBalancerPort=3,'
-            'InstanceProtocol=instance_protocol2,'
-            'InstancePort=4,SSLCertificateId=ssl_certificate_id2'
-        ])
+        simplified = self.parse_shorthand(
+            p,
+            [
+                'Protocol=protocol1,LoadBalancerPort=1,'
+                'InstanceProtocol=instance_protocol1,'
+                'InstancePort=2,SSLCertificateId=ssl_certificate_id1',
+                'Protocol=protocol2,LoadBalancerPort=3,'
+                'InstanceProtocol=instance_protocol2,'
+                'InstancePort=4,SSLCertificateId=ssl_certificate_id2',
+            ],
+        )
         self.assertEqual(simplified, expected)
 
     def test_keyval_with_long_values(self):
-        p = self.get_param_model(
-            'dynamodb.UpdateTable.ProvisionedThroughput')
+        p = self.get_param_model('dynamodb.UpdateTable.ProvisionedThroughput')
         value = 'WriteCapacityUnits=10,ReadCapacityUnits=10'
         returned = self.parse_shorthand(p, value)
-        self.assertEqual(returned, {'WriteCapacityUnits': 10,
-                                    'ReadCapacityUnits': 10})
+        self.assertEqual(
+            returned, {'WriteCapacityUnits': 10, 'ReadCapacityUnits': 10}
+        )
 
     def test_error_messages_for_structure_scalar(self):
         p = self.get_param_model(
-            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration')
+            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration'
+        )
         value = 'ApplicationName:foo,TemplateName=bar'
-        error_msg = "Error parsing parameter '--source-configuration'.*Expected"
+        error_msg = (
+            "Error parsing parameter '--source-configuration'.*Expected"
+        )
         with self.assertRaisesRegex(ParamError, error_msg):
             self.parse_shorthand(p, value)
 
@@ -383,9 +428,12 @@ class TestParamShorthand(BaseArgProcessT
         # If the user uses ':' instead of '=', we should give a good
         # error message.
         p = self.get_param_model(
-            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration')
+            'elasticbeanstalk.CreateConfigurationTemplate.SourceConfiguration'
+        )
         value = 'ApplicationName:foo,TemplateName:bar'
-        error_msg = "Error parsing parameter '--source-configuration'.*Expected"
+        error_msg = (
+            "Error parsing parameter '--source-configuration'.*Expected"
+        )
         with self.assertRaisesRegex(ParamError, error_msg):
             self.parse_shorthand(p, value)
 
@@ -398,42 +446,49 @@ class TestParamShorthand(BaseArgProcessT
     def test_csv_syntax_escaped(self):
         p = self.get_param_model('cloudformation.CreateStack.Parameters')
         returned = self.parse_shorthand(
-            p, [r"ParameterKey=key,ParameterValue=foo\,bar"])
-        expected = [{"ParameterKey": "key",
-                     "ParameterValue": "foo,bar"}]
+            p, [r"ParameterKey=key,ParameterValue=foo\,bar"]
+        )
+        expected = [{"ParameterKey": "key", "ParameterValue": "foo,bar"}]
         self.assertEqual(returned, expected)
 
     def test_csv_syntax_double_quoted(self):
         p = self.get_param_model('cloudformation.CreateStack.Parameters')
         returned = self.parse_shorthand(
-            p, ['ParameterKey=key,ParameterValue="foo,bar"'])
-        expected = [{"ParameterKey": "key",
-                     "ParameterValue": "foo,bar"}]
+            p, ['ParameterKey=key,ParameterValue="foo,bar"']
+        )
+        expected = [{"ParameterKey": "key", "ParameterValue": "foo,bar"}]
         self.assertEqual(returned, expected)
 
     def test_csv_syntax_single_quoted(self):
         p = self.get_param_model('cloudformation.CreateStack.Parameters')
         returned = self.parse_shorthand(
-            p, ["ParameterKey=key,ParameterValue='foo,bar'"])
-        expected = [{"ParameterKey": "key",
-                     "ParameterValue": "foo,bar"}]
+            p, ["ParameterKey=key,ParameterValue='foo,bar'"]
+        )
+        expected = [{"ParameterKey": "key", "ParameterValue": "foo,bar"}]
         self.assertEqual(returned, expected)
 
     def test_csv_syntax_errors(self):
         p = self.get_param_model('cloudformation.CreateStack.Parameters')
         error_msg = "Error parsing parameter '--parameters'.*Expected"
         with self.assertRaisesRegex(ParamError, error_msg):
-            self.parse_shorthand(p, ['ParameterKey=key,ParameterValue="foo,bar'])
+            self.parse_shorthand(
+                p, ['ParameterKey=key,ParameterValue="foo,bar']
+            )
         with self.assertRaisesRegex(ParamError, error_msg):
-            self.parse_shorthand(p, ['ParameterKey=key,ParameterValue=foo,bar"'])
+            self.parse_shorthand(
+                p, ['ParameterKey=key,ParameterValue=foo,bar"']
+            )
         with self.assertRaisesRegex(ParamError, error_msg):
-            self.parse_shorthand(p, ['ParameterKey=key,ParameterValue=""foo,bar"'])
+            self.parse_shorthand(
+                p, ['ParameterKey=key,ParameterValue=""foo,bar"']
+            )
         with self.assertRaisesRegex(ParamError, error_msg):
-            self.parse_shorthand(p, ['ParameterKey=key,ParameterValue="foo,bar\''])
+            self.parse_shorthand(
+                p, ['ParameterKey=key,ParameterValue="foo,bar\'']
+            )
 
 
 class TestParamShorthandCustomArguments(BaseArgProcessTest):
-
     def setUp(self):
         super(TestParamShorthandCustomArguments, self).setUp()
         self.shorthand = ParamShorthandParser()
@@ -444,38 +499,31 @@ class TestParamShorthandCustomArguments(
             'items': {
                 'type': 'object',
                 'properties': {
-                    'Name': {
-                        'type': 'string'
-                    },
-                    'Args': {
-                        'type': 'array',
-                        'items': {
-                            'type': 'string'
-                        }
-                    }
-                }
-            }
+                    'Name': {'type': 'string'},
+                    'Args': {'type': 'array', 'items': {'type': 'string'}},
+                },
+            },
         }
         argument_model = create_argument_model_from_schema(schema)
         cli_argument = CustomArgument('foo', argument_model=argument_model)
 
         expected = [
-            {"Name": "foo",
-             "Args": ["a", "k1=v1", "b"]},
-            {"Name": "bar",
-             "Args": ["baz"]},
-            {"Name": "single_kv",
-             "Args": ["key=value"]},
-            {"Name": "single_v",
-             "Args": ["value"]}
+            {"Name": "foo", "Args": ["a", "k1=v1", "b"]},
+            {"Name": "bar", "Args": ["baz"]},
+            {"Name": "single_kv", "Args": ["key=value"]},
+            {"Name": "single_v", "Args": ["value"]},
         ]
 
-        simplified = self.shorthand(cli_argument, [
-            "Name=foo,Args=[a,k1=v1,b]",
-            "Name=bar,Args=baz",
-            "Name=single_kv,Args=[key=value]",
-            "Name=single_v,Args=[value]"
-        ], 'process-cli-arg.foo.bar')
+        simplified = self.shorthand(
+            cli_argument,
+            [
+                "Name=foo,Args=[a,k1=v1,b]",
+                "Name=bar,Args=baz",
+                "Name=single_kv,Args=[key=value]",
+                "Name=single_v,Args=[value]",
+            ],
+            'process-cli-arg.foo.bar',
+        )
 
         self.assertEqual(simplified, expected)
 
@@ -486,22 +534,20 @@ class TestParamShorthandCustomArguments(
                 "Consistent": {
                     "type": "boolean",
                 },
-                "Args": {
-                    "type": "array",
-                    "items": {
-                        "type": "string"
-                    }
-                }
-            }
+                "Args": {"type": "array", "items": {"type": "string"}},
+            },
         }
         argument_model = create_argument_model_from_schema(schema)
         cli_argument = CustomArgument('test', argument_model=argument_model)
 
         returned = self.shorthand(
-            cli_argument, 'Consistent=true,Args=foo1,foo2',
-            'process-cli-arg.foo.bar')
-        self.assertEqual(returned, {'Consistent': True,
-                                    'Args': ['foo1', 'foo2']})
+            cli_argument,
+            'Consistent=true,Args=foo1,foo2',
+            'process-cli-arg.foo.bar',
+        )
+        self.assertEqual(
+            returned, {'Consistent': True, 'Args': ['foo1', 'foo2']}
+        )
 
 
 class TestDocGen(BaseArgProcessTest):
@@ -517,7 +563,8 @@ class TestDocGen(BaseArgProcessTest):
     def get_generated_example_for(self, argument):
         # Returns a string containing the generated documentation.
         return self.shorthand_documenter.generate_shorthand_example(
-            argument, self.service_name, self.operation_name)
+            argument, self.service_name, self.operation_name
+        )
 
     def assert_generated_example_is(self, argument, expected_docs):
         generated_docs = self.get_generated_example_for(argument)
@@ -539,22 +586,24 @@ class TestDocGen(BaseArgProcessTest):
         self.service_name = 'elb'
         self.operation_name = 'register-instances-with-load-balancer'
         argument = self.get_param_model(
-            'elb.RegisterInstancesWithLoadBalancer.Instances')
+            'elb.RegisterInstancesWithLoadBalancer.Instances'
+        )
         doc_string = '--instances InstanceId1 InstanceId2 InstanceId3'
         self.assert_generated_example_is(argument, doc_string)
 
     def test_flattens_marked_single_member_structure_list(self):
-        argument = self.create_argument({
-            'Arg': {
-                'type': 'list',
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Bar': {'type': 'string'}
-                    }
+        argument = self.create_argument(
+            {
+                'Arg': {
+                    'type': 'list',
+                    'member': {
+                        'type': 'structure',
+                        'members': {'Bar': {'type': 'string'}},
+                    },
                 }
-            }
-        }, 'arg')
+            },
+            'arg',
+        )
         argument.argument_model = argument.argument_model.members['Arg']
         uses_old_list = 'awscli.argprocess.ParamShorthand._uses_old_list_case'
         with mock.patch(uses_old_list, mock.Mock(return_value=True)):
@@ -563,36 +612,38 @@ class TestDocGen(BaseArgProcessTest):
     def test_generates_single_example_with_min_max_1(self):
         # An example of this is
         # 'workspaces rebuild-workspaces --rebuild-workspace-requests'
-        argument = self.create_argument({
-            'Arg': {
-                'type': 'list',
-                'max': 1,
-                'min': 1,
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Bar': {'type': 'string'}
-                    }
+        argument = self.create_argument(
+            {
+                'Arg': {
+                    'type': 'list',
+                    'max': 1,
+                    'min': 1,
+                    'member': {
+                        'type': 'structure',
+                        'members': {'Bar': {'type': 'string'}},
+                    },
                 }
-            }
-        }, 'arg')
+            },
+            'arg',
+        )
         argument.argument_model = argument.argument_model.members['Arg']
         uses_old_list = 'awscli.argprocess.ParamShorthand._uses_old_list_case'
         with mock.patch(uses_old_list, mock.Mock(return_value=True)):
             self.assert_generated_example_is(argument, '--arg Bar1')
 
     def test_does_not_flatten_unmarked_single_member_structure_list(self):
-        argument = self.create_argument({
-            'Arg': {
-                'type': 'list',
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Bar': {'type': 'string'}
-                    }
+        argument = self.create_argument(
+            {
+                'Arg': {
+                    'type': 'list',
+                    'member': {
+                        'type': 'structure',
+                        'members': {'Bar': {'type': 'string'}},
+                    },
                 }
-            }
-        }, 'arg')
+            },
+            'arg',
+        )
         argument.argument_model = argument.argument_model.members['Arg']
         uses_old_list = 'awscli.argprocess.ParamShorthand._uses_old_list_case'
         with mock.patch(uses_old_list, mock.Mock(return_value=False)):
@@ -609,24 +660,43 @@ class TestDocGen(BaseArgProcessTest):
 
     def test_gen_list_structure_multiple_scalar_docs(self):
         expected = (
-            'Scalar1=string,'
-            'Scalar2=string,'
-            'List1=string,string ...'
-        )
-        m = model.DenormalizedStructureBuilder().with_members(OrderedDict([
-            ('List', {'type': 'list',
-                      'member': {
-                          'type': 'structure',
-                          'members': OrderedDict([
-                              ('Scalar1', {'type': 'string'}),
-                              ('Scalar2', {'type': 'string'}),
-                              ('List1', {
-                                  'type': 'list',
-                                  'member': {'type': 'string'},
-                              }),
-                          ]),
-                      }}),
-        ])).build_model().members['List']
+            'Scalar1=string,' 'Scalar2=string,' 'List1=string,string ...'
+        )
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                OrderedDict(
+                    [
+                        (
+                            'List',
+                            {
+                                'type': 'list',
+                                'member': {
+                                    'type': 'structure',
+                                    'members': OrderedDict(
+                                        [
+                                            ('Scalar1', {'type': 'string'}),
+                                            ('Scalar2', {'type': 'string'}),
+                                            (
+                                                'List1',
+                                                {
+                                                    'type': 'list',
+                                                    'member': {
+                                                        'type': 'string'
+                                                    },
+                                                },
+                                            ),
+                                        ]
+                                    ),
+                                },
+                            },
+                        ),
+                    ]
+                )
+            )
+            .build_model()
+            .members['List']
+        )
         argument = mock.Mock()
         argument.argument_model = m
         argument.name = 'foo'
@@ -639,17 +709,22 @@ class TestDocGen(BaseArgProcessTest):
         # so we make it clear that multiple values are separated by spaces.
         argument = self.get_param_model('ec2.DescribeInstances.Filters')
         generated_example = self.get_generated_example_for(argument)
-        self.assertIn('Name=string,Values=string,string',
-                      generated_example)
+        self.assertIn('Name=string,Values=string,string', generated_example)
 
     def test_gen_structure_list_scalar_docs(self):
-        argument = self.create_argument(OrderedDict([
-            ('Consistent', {'type': 'boolean'}),
-            ('Args', {'type': 'list', 'member': {'type': 'string'}}),
-        ]), 'foo')
+        argument = self.create_argument(
+            OrderedDict(
+                [
+                    ('Consistent', {'type': 'boolean'}),
+                    ('Args', {'type': 'list', 'member': {'type': 'string'}}),
+                ]
+            ),
+            'foo',
+        )
         generated_example = self.get_generated_example_for(argument)
-        self.assertIn('Consistent=boolean,Args=string,string',
-                      generated_example)
+        self.assertIn(
+            'Consistent=boolean,Args=string,string', generated_example
+        )
 
     def test_can_gen_recursive_structure(self):
         argument = self.get_param_model('dynamodb.PutItem.Item')
@@ -661,26 +736,30 @@ class TestDocGen(BaseArgProcessTest):
         self.assertRegex(generated_example, r'Ebs={\w+=\w+')
 
     def test_can_document_nested_lists(self):
-        argument = self.create_argument({
-            'A': {
-                'type': 'list',
-                'member': {
+        argument = self.create_argument(
+            {
+                'A': {
                     'type': 'list',
-                    'member': {'type': 'string'},
+                    'member': {
+                        'type': 'list',
+                        'member': {'type': 'string'},
+                    },
                 },
-            },
-        })
+            }
+        )
         generated_example = self.get_generated_example_for(argument)
         self.assertIn('A=[[string,string],[string,string]]', generated_example)
 
     def test_can_generated_nested_maps(self):
-        argument = self.create_argument({
-            'A': {
-                'type': 'map',
-                'key': {'type': 'string'},
-                'value': {'type': 'string'}
-            },
-        })
+        argument = self.create_argument(
+            {
+                'A': {
+                    'type': 'map',
+                    'key': {'type': 'string'},
+                    'value': {'type': 'string'},
+                },
+            }
+        )
         generated_example = self.get_generated_example_for(argument)
         self.assertIn('A={KeyName1=string,KeyName2=string}', generated_example)
 
@@ -694,16 +773,19 @@ class TestDocGen(BaseArgProcessTest):
             'String': {'type': 'string'},
             'StructShape': {
                 'type': 'structure',
-                'members': OrderedDict([
-                    ('A', {'shape': 'String'}),
-                    ('B', {'shape': 'String'}),
-                ])
-            }
+                'members': OrderedDict(
+                    [
+                        ('A', {'shape': 'String'}),
+                        ('B', {'shape': 'String'}),
+                    ]
+                ),
+            },
         }
         m = model.ListShape(
             shape_name='Top',
             shape_model=list_shape,
-            shape_resolver=model.ShapeResolver(shapes))
+            shape_resolver=model.ShapeResolver(shapes),
+        )
         argument = mock.Mock()
         argument.argument_model = m
         argument.name = 'foo'
@@ -712,9 +794,7 @@ class TestDocGen(BaseArgProcessTest):
         self.assertIn('A=string,B=string ...', generated_example)
 
     def test_handle_special_case_value_struct_not_documented(self):
-        argument = self.create_argument({
-            'Value': {'type': 'string'}
-        })
+        argument = self.create_argument({'Value': {'type': 'string'}})
         generated_example = self.get_generated_example_for(argument)
         # This is one of the special cases, we shouldn't generate any
         # shorthand example for this shape.
@@ -726,26 +806,31 @@ class TestDocGen(BaseArgProcessTest):
         # recursion.
         struct_shape = {
             'type': 'structure',
-            'members': OrderedDict([
-                ('Recurse', {'shape': 'SubShape'}),
-                ('Scalar', {'shape': 'String'}),
-            ]),
+            'members': OrderedDict(
+                [
+                    ('Recurse', {'shape': 'SubShape'}),
+                    ('Scalar', {'shape': 'String'}),
+                ]
+            ),
         }
         shapes = {
             'Top': struct_shape,
             'String': {'type': 'string'},
             'SubShape': {
                 'type': 'structure',
-                'members': OrderedDict([
-                    ('SubRecurse', {'shape': 'Top'}),
-                    ('Scalar', {'shape': 'String'}),
-                ]),
-            }
+                'members': OrderedDict(
+                    [
+                        ('SubRecurse', {'shape': 'Top'}),
+                        ('Scalar', {'shape': 'String'}),
+                    ]
+                ),
+            },
         }
         m = model.StructureShape(
             shape_name='Top',
             shape_model=struct_shape,
-            shape_resolver=model.ShapeResolver(shapes))
+            shape_resolver=model.ShapeResolver(shapes),
+        )
         argument = mock.Mock()
         argument.argument_model = m
         argument.name = 'foo'
@@ -754,30 +839,33 @@ class TestDocGen(BaseArgProcessTest):
         self.assertIn(
             'Recurse={SubRecurse={( ... recursive ... ),Scalar=string},'
             'Scalar=string},Scalar=string',
-            generated_example)
+            generated_example,
+        )
 
     def test_skip_deeply_nested_shorthand(self):
         # The eventual goal is to have a better way to document
         # deeply nested shorthand params, but for now, we'll
         # only document shorthand params up to a certain stack level.
-        argument = self.create_argument({
-            'A': {
-                'type': 'structure',
-                'members': {
-                    'B': {
-                        'type': 'structure',
-                        'members': {
-                            'C': {
-                                'type': 'structure',
-                                'members': {
-                                    'D': {'type': 'string'},
+        argument = self.create_argument(
+            {
+                'A': {
+                    'type': 'structure',
+                    'members': {
+                        'B': {
+                            'type': 'structure',
+                            'members': {
+                                'C': {
+                                    'type': 'structure',
+                                    'members': {
+                                        'D': {'type': 'string'},
+                                    },
                                 }
-                            }
+                            },
                         }
-                    }
-                }
-            },
-        })
+                    },
+                },
+            }
+        )
         generated_example = self.get_generated_example_for(argument)
         self.assertEqual(generated_example, '')
 
@@ -797,8 +885,13 @@ class TestUnpackJSONParams(BaseArgProces
         #
         # Will show up as:
         block_device_mapping = [
-            '[{', 'DeviceName:/dev/sdf,', 'VirtualName:ephemeral0},',
-            '{DeviceName:/dev/sdg,', 'VirtualName:ephemeral1', '}]']
+            '[{',
+            'DeviceName:/dev/sdf,',
+            'VirtualName:ephemeral0},',
+            '{DeviceName:/dev/sdg,',
+            'VirtualName:ephemeral1',
+            '}]',
+        ]
         # The shell has removed the double quotes so this is invalid
         # JSON, but we should still raise a better exception.
         with self.assertRaises(ParamError) as e:
@@ -816,12 +909,14 @@ class TestJSONValueHeaderParams(BaseArgP
     def setUp(self):
         super(TestJSONValueHeaderParams, self).setUp()
         self.p = self.get_param_model(
-            'lex-runtime.PostContent.sessionAttributes')
+            'lex-runtime.PostContent.sessionAttributes'
+        )
 
     def test_json_value_dict(self):
         value = '{"foo": "bar"}'
-        self.assertEqual(unpack_cli_arg(self.p, value),
-                         OrderedDict([('foo', 'bar')]))
+        self.assertEqual(
+            unpack_cli_arg(self.p, value), OrderedDict([('foo', 'bar')])
+        )
 
     def test_json_value_list(self):
         value = '["foo", "bar"]'
diff -pruN 2.23.6-1/tests/unit/test_arguments.py 2.31.35-1/tests/unit/test_arguments.py
--- 2.23.6-1/tests/unit/test_arguments.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_arguments.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,9 +11,10 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 
-from awscli.testutils import mock, unittest
+from botocore.model import OperationModel, ServiceModel, StringShape
+
 from awscli import arguments
-from botocore.model import StringShape, OperationModel, ServiceModel
+from awscli.testutils import mock, unittest
 
 
 class DemoArgument(arguments.CustomArgument):
@@ -31,35 +32,40 @@ class TestArgumentClasses(unittest.TestC
 class TestCLIArgument(unittest.TestCase):
     def setUp(self):
         self.service_name = 'baz'
-        self.service_model = ServiceModel({
-            'metadata': {
-                'endpointPrefix': 'bad',
-            },
-            'operations': {
-                'SampleOperation': {
-                    'name': 'SampleOperation',
-                    'input': {'shape': 'Input'}
-                }
-            },
-            'shapes': {
-                'StringShape': {'type': 'string'},
-                'Input': {
-                    'type': 'structure',
-                    'members': {
-                        'Foo': {'shape': 'StringShape'}
+        self.service_model = ServiceModel(
+            {
+                'metadata': {
+                    'endpointPrefix': 'bad',
+                },
+                'operations': {
+                    'SampleOperation': {
+                        'name': 'SampleOperation',
+                        'input': {'shape': 'Input'},
                     }
-                }
-            }
-        }, self.service_name)
+                },
+                'shapes': {
+                    'StringShape': {'type': 'string'},
+                    'Input': {
+                        'type': 'structure',
+                        'members': {'Foo': {'shape': 'StringShape'}},
+                    },
+                },
+            },
+            self.service_name,
+        )
         self.operation_model = self.service_model.operation_model(
-            'SampleOperation')
+            'SampleOperation'
+        )
         self.argument_model = self.operation_model.input_shape.members['Foo']
         self.event_emitter = mock.Mock()
 
     def create_argument(self):
         return arguments.CLIArgument(
-            self.argument_model.name, self.argument_model,
-            self.operation_model, self.event_emitter)
+            self.argument_model.name,
+            self.argument_model,
+            self.operation_model,
+            self.event_emitter,
+        )
 
     def test_unpack_uses_service_name_in_event(self):
         self.event_emitter.emit.return_value = ['value']
@@ -67,7 +73,9 @@ class TestCLIArgument(unittest.TestCase)
         params = {}
         argument.add_to_params(params, 'value')
         expected_event_name = 'process-cli-arg.%s.%s' % (
-            self.service_name, 'sample-operation')
+            self.service_name,
+            'sample-operation',
+        )
         actual_event_name = self.event_emitter.emit.call_args[0][0]
         self.assertEqual(actual_event_name, expected_event_name)
 
@@ -80,6 +88,6 @@ class TestCLIArgument(unittest.TestCase)
             is_required=True,
             name='test-nargs',
             operation_model=None,
-            serialized_name='TestNargs'
+            serialized_name='TestNargs',
         )
         self.assertEqual(arg.nargs, '*')
diff -pruN 2.23.6-1/tests/unit/test_clidocs.py 2.31.35-1/tests/unit/test_clidocs.py
--- 2.23.6-1/tests/unit/test_clidocs.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_clidocs.py	2025-11-12 19:17:29.000000000 +0000
@@ -12,17 +12,33 @@
 # language governing permissions and limitations under the License.
 import json
 
-from botocore.model import ShapeResolver, StructureShape, StringShape, \
-    ListShape, MapShape, Shape, DenormalizedStructureBuilder
+from botocore.model import (
+    DenormalizedStructureBuilder,
+    ListShape,
+    MapShape,
+    Shape,
+    ShapeResolver,
+    StringShape,
+    StructureShape,
+)
 
-from awscli.testutils import mock, unittest, FileCreator
-from awscli.clidocs import OperationDocumentEventHandler, \
-    CLIDocumentEventHandler, TopicListerDocumentEventHandler, \
-    TopicDocumentEventHandler, GlobalOptionsDocumenter
-from awscli.bcdoc.restdoc import ReSTDocument
-from awscli.help import ServiceHelpCommand, TopicListerCommand, \
-    TopicHelpCommand, HelpCommand
 from awscli.arguments import CustomArgument
+from awscli.bcdoc.restdoc import ReSTDocument
+from awscli.clidocs import (
+    CLIDocumentEventHandler,
+    GlobalOptionsDocumenter,
+    OperationDocumentEventHandler,
+    ServiceDocumentEventHandler,
+    TopicDocumentEventHandler,
+    TopicListerDocumentEventHandler,
+)
+from awscli.help import (
+    HelpCommand,
+    ServiceHelpCommand,
+    TopicHelpCommand,
+    TopicListerCommand,
+)
+from awscli.testutils import FileCreator, mock, unittest
 
 
 class TestRecursiveShapes(unittest.TestCase):
@@ -35,11 +51,13 @@ class TestRecursiveShapes(unittest.TestC
         self.operation_model.service_model.operation_names = []
         self.help_command.obj = self.operation_model
         self.operation_handler = OperationDocumentEventHandler(
-            self.help_command)
+            self.help_command
+        )
 
     def assert_rendered_docs_contain(self, expected):
-        writes = [args[0][0] for args in
-                  self.help_command.doc.write.call_args_list]
+        writes = [
+            args[0][0] for args in self.help_command.doc.write.call_args_list
+        ]
         writes = '\n'.join(writes)
         self.assertIn(expected, writes)
 
@@ -56,16 +74,20 @@ class TestRecursiveShapes(unittest.TestC
                 'members': {
                     'A': {'shape': 'NonRecursive'},
                     'B': {'shape': 'RecursiveStruct'},
-                }
+                },
             },
-            'NonRecursive': {'type': 'string'}
+            'NonRecursive': {'type': 'string'},
         }
-        shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'],
-                               ShapeResolver(shape_map))
+        shape = StructureShape(
+            'RecursiveStruct',
+            shape_map['RecursiveStruct'],
+            ShapeResolver(shape_map),
+        )
 
         self.arg_table['arg-name'] = mock.Mock(argument_model=shape)
         self.operation_handler.doc_option_example(
-            'arg-name', self.help_command, 'process-cli-arg.foo.bar')
+            'arg-name', self.help_command, 'process-cli-arg.foo.bar'
+        )
         self.assert_rendered_docs_contain('{ ... recursive ... }')
 
     def test_handle_recursive_output(self):
@@ -75,12 +97,15 @@ class TestRecursiveShapes(unittest.TestC
                 'members': {
                     'A': {'shape': 'NonRecursive'},
                     'B': {'shape': 'RecursiveStruct'},
-                }
+                },
             },
-            'NonRecursive': {'type': 'string'}
+            'NonRecursive': {'type': 'string'},
         }
-        shape = StructureShape('RecursiveStruct', shape_map['RecursiveStruct'],
-                               ShapeResolver(shape_map))
+        shape = StructureShape(
+            'RecursiveStruct',
+            shape_map['RecursiveStruct'],
+            ShapeResolver(shape_map),
+        )
 
         operation_model = mock.Mock()
         operation_model.output_shape = shape
@@ -94,16 +119,18 @@ class TestRecursiveShapes(unittest.TestC
                 'type': 'structure',
                 'members': {
                     'A': {'shape': 'Empty'},
-                }
+                },
             },
-            'Empty': {'type': 'structure', 'members': {}}
+            'Empty': {'type': 'structure', 'members': {}},
         }
-        shape = StructureShape('InputStruct', shape_map['InputStruct'],
-                               ShapeResolver(shape_map))
+        shape = StructureShape(
+            'InputStruct', shape_map['InputStruct'], ShapeResolver(shape_map)
+        )
 
         self.arg_table['arg-name'] = mock.Mock(argument_model=shape)
         self.operation_handler.doc_option_example(
-            'arg-name', self.help_command, 'process-cli-arg.foo.bar')
+            'arg-name', self.help_command, 'process-cli-arg.foo.bar'
+        )
         self.assert_proper_indentation()
 
     def test_handle_no_output_shape(self):
@@ -114,14 +141,10 @@ class TestRecursiveShapes(unittest.TestC
         self.assert_rendered_docs_contain('None')
 
     def test_handle_memberless_output_shape(self):
-        shape_map = {
-            'NoMembers': {
-                'type': 'structure',
-                'members': {}
-            }
-        }
-        shape = StructureShape('NoMembers', shape_map['NoMembers'],
-                               ShapeResolver(shape_map))
+        shape_map = {'NoMembers': {'type': 'structure', 'members': {}}}
+        shape = StructureShape(
+            'NoMembers', shape_map['NoMembers'], ShapeResolver(shape_map)
+        )
 
         operation_model = mock.Mock()
         operation_model.output_shape = shape
@@ -151,11 +174,7 @@ class TestCLIDocumentEventHandler(unitte
         return help_command
 
     def create_tagged_union_shape(self):
-        shape_model = {
-            'type': 'structure',
-            'union': True,
-            'members': {}
-        }
+        shape_model = {'type': 'structure', 'union': True, 'members': {}}
         tagged_union = StructureShape('tagged_union', shape_model)
         return tagged_union
 
@@ -176,8 +195,12 @@ class TestCLIDocumentEventHandler(unitte
         # Create an arbitrary help command class. This was chosen
         # because it is fairly easy to instantiate.
         help_cmd = ServiceHelpCommand(
-            self.session, self.obj, self.command_table, self.arg_table,
-            self.name, self.event_class
+            self.session,
+            self.obj,
+            self.command_table,
+            self.arg_table,
+            self.name,
+            self.event_class,
         )
 
         doc_handler = CLIDocumentEventHandler(help_cmd)
@@ -187,55 +210,71 @@ class TestCLIDocumentEventHandler(unitte
 
     def test_breadcrumbs_html(self):
         help_cmd = ServiceHelpCommand(
-            self.session, self.obj, self.command_table, self.arg_table,
-            self.name, self.event_class
+            self.session,
+            self.obj,
+            self.command_table,
+            self.arg_table,
+            self.name,
+            self.event_class,
         )
         help_cmd.doc.target = 'html'
         doc_handler = CLIDocumentEventHandler(help_cmd)
         doc_handler.doc_breadcrumbs(help_cmd)
         self.assertEqual(
-            help_cmd.doc.getvalue().decode('utf-8'),
-            '[ :ref:`aws <cli:aws>` ]'
+            help_cmd.doc.getvalue().decode('utf-8'), '[ :ref:`aws <cli:aws>` ]\n\n'
         )
 
     def test_breadcrumbs_service_command_html(self):
         help_cmd = ServiceHelpCommand(
-            self.session, self.obj, self.command_table, self.arg_table,
-            self.name, 'ec2'
+            self.session,
+            self.obj,
+            self.command_table,
+            self.arg_table,
+            self.name,
+            'ec2',
         )
         help_cmd.doc.target = 'html'
         doc_handler = CLIDocumentEventHandler(help_cmd)
         doc_handler.doc_breadcrumbs(help_cmd)
         self.assertEqual(
-            help_cmd.doc.getvalue().decode('utf-8'),
-            '[ :ref:`aws <cli:aws>` ]'
+            help_cmd.doc.getvalue().decode('utf-8'), '[ :ref:`aws <cli:aws>` ]\n\n'
         )
 
     def test_breadcrumbs_operation_command_html(self):
         help_cmd = ServiceHelpCommand(
-            self.session, self.obj, self.command_table, self.arg_table,
-            self.name, 'ec2.run-instances'
+            self.session,
+            self.obj,
+            self.command_table,
+            self.arg_table,
+            self.name,
+            'ec2.run-instances',
         )
         help_cmd.doc.target = 'html'
         doc_handler = CLIDocumentEventHandler(help_cmd)
         doc_handler.doc_breadcrumbs(help_cmd)
         self.assertEqual(
             help_cmd.doc.getvalue().decode('utf-8'),
-            '[ :ref:`aws <cli:aws>` . :ref:`ec2 <cli:aws ec2>` ]'
+            '[ :ref:`aws <cli:aws>` . :ref:`ec2 <cli:aws ec2>` ]\n\n'
         )
 
     def test_breadcrumbs_wait_command_html(self):
         help_cmd = ServiceHelpCommand(
-            self.session, self.obj, self.command_table, self.arg_table,
-            self.name, 's3api.wait.object-exists'
+            self.session,
+            self.obj,
+            self.command_table,
+            self.arg_table,
+            self.name,
+            's3api.wait.object-exists',
         )
         help_cmd.doc.target = 'html'
         doc_handler = CLIDocumentEventHandler(help_cmd)
         doc_handler.doc_breadcrumbs(help_cmd)
         self.assertEqual(
             help_cmd.doc.getvalue().decode('utf-8'),
-            ('[ :ref:`aws <cli:aws>` . :ref:`s3api <cli:aws s3api>`'
-             ' . :ref:`wait <cli:aws s3api wait>` ]')
+            (
+                '[ :ref:`aws <cli:aws>` . :ref:`s3api <cli:aws s3api>`'
+                ' . :ref:`wait <cli:aws s3api wait>` ]\n\n'
+            )
         )
 
     def test_documents_json_header_shape(self):
@@ -243,17 +282,14 @@ class TestCLIDocumentEventHandler(unitte
             'type': 'string',
             'jsonvalue': True,
             'location': 'header',
-            'locationName': 'X-Amz-Header-Name'
+            'locationName': 'X-Amz-Header-Name',
         }
         shape = StringShape('JSONValueArg', shape)
         rendered = self.get_help_docs_for_argument(shape)
         self.assertIn('(JSON)', rendered)
 
     def test_documents_enum_values(self):
-        shape = {
-            'type': 'string',
-            'enum': ['FOO', 'BAZ']
-        }
+        shape = {'type': 'string', 'enum': ['FOO', 'BAZ']}
         shape = StringShape('EnumArg', shape)
         rendered = self.get_help_docs_for_argument(shape)
         self.assertIn('Possible values', rendered)
@@ -267,13 +303,15 @@ class TestCLIDocumentEventHandler(unitte
                 'members': {
                     'A': {'shape': 'NonRecursive'},
                     'B': {'shape': 'RecursiveStruct'},
-                }
+                },
             },
-            'NonRecursive': {'type': 'string'}
+            'NonRecursive': {'type': 'string'},
         }
-        shape = StructureShape('RecursiveStruct',
-                               shape_map['RecursiveStruct'],
-                               ShapeResolver(shape_map))
+        shape = StructureShape(
+            'RecursiveStruct',
+            shape_map['RecursiveStruct'],
+            ShapeResolver(shape_map),
+        )
         rendered = self.get_help_docs_for_argument(shape)
         self.assertIn('( ... recursive ... )', rendered)
 
@@ -284,20 +322,22 @@ class TestCLIDocumentEventHandler(unitte
                 'members': {
                     'A': {'shape': 'NestedStruct'},
                     'B': {'shape': 'NestedStruct'},
-                }
+                },
             },
             'NestedStruct': {
                 'type': 'structure',
                 'members': {
                     'Nested_A': {'shape': 'Line'},
                     'Nested_B': {'shape': 'Line'},
-                }
+                },
             },
-            'Line': {'type': 'string'}
+            'Line': {'type': 'string'},
         }
-        shape = StructureShape('UpperStructure',
-                               shape_map['UpperStructure'],
-                               ShapeResolver(shape_map))
+        shape = StructureShape(
+            'UpperStructure',
+            shape_map['UpperStructure'],
+            ShapeResolver(shape_map),
+        )
         rendered = self.get_help_docs_for_argument(shape)
         self.assertEqual(rendered.count('A -> (structure)'), 1)
         self.assertEqual(rendered.count('B -> (structure)'), 1)
@@ -315,12 +355,13 @@ class TestCLIDocumentEventHandler(unitte
                 'members': {
                     'Nested_A': {'shape': 'Line'},
                     'Nested_B': {'shape': 'Line'},
-                }
+                },
             },
-            'Line': {'type': 'string'}
+            'Line': {'type': 'string'},
         }
-        shape = ListShape('UpperList', shape_map['UpperList'],
-                          ShapeResolver(shape_map))
+        shape = ListShape(
+            'UpperList', shape_map['UpperList'], ShapeResolver(shape_map)
+        )
         rendered = self.get_help_docs_for_argument(shape)
         self.assertEqual(rendered.count('(structure)'), 1)
         self.assertEqual(rendered.count('Nested_A -> (string)'), 1)
@@ -338,12 +379,13 @@ class TestCLIDocumentEventHandler(unitte
                 'members': {
                     'Nested_A': {'shape': 'Line'},
                     'Nested_B': {'shape': 'Line'},
-                }
+                },
             },
-            'Line': {'type': 'string'}
+            'Line': {'type': 'string'},
         }
-        shape = MapShape('UpperMap', shape_map['UpperMap'],
-                         ShapeResolver(shape_map))
+        shape = MapShape(
+            'UpperMap', shape_map['UpperMap'], ShapeResolver(shape_map)
+        )
         rendered = self.get_help_docs_for_argument(shape)
         self.assertEqual(rendered.count('key -> (structure)'), 1)
         self.assertEqual(rendered.count('value -> (structure)'), 1)
@@ -372,7 +414,9 @@ class TestCLIDocumentEventHandler(unitte
         self.assertIn(
             'See also: `AWS API Documentation '
             '<https://docs.aws.amazon.com/goto/'
-            'WebAPI/service-1-2-3/myoperation>`_', rendered)
+            'WebAPI/service-1-2-3/myoperation>`_',
+            rendered,
+        )
 
     def test_includes_streaming_blob_options(self):
         help_command = self.create_help_command()
@@ -381,8 +425,9 @@ class TestCLIDocumentEventHandler(unitte
         blob_arg = CustomArgument('blob_arg', argument_model=blob_shape)
         help_command.arg_table = {'blob_arg': blob_arg}
         operation_handler = OperationDocumentEventHandler(help_command)
-        operation_handler.doc_option(arg_name='blob_arg',
-                                     help_command=help_command)
+        operation_handler.doc_option(
+            arg_name='blob_arg', help_command=help_command
+        )
         rendered = help_command.doc.getvalue().decode('utf-8')
         self.assertIn('streaming blob', rendered)
 
@@ -390,38 +435,42 @@ class TestCLIDocumentEventHandler(unitte
         help_command = self.create_help_command()
         blob_shape = Shape('blob_shape', {'type': 'blob'})
         blob_shape.serialization = {'streaming': True}
-        blob_arg = CustomArgument(name='blob_arg',
-                                  argument_model=blob_shape,
-                                  help_text='FooBar')
+        blob_arg = CustomArgument(
+            name='blob_arg', argument_model=blob_shape, help_text='FooBar'
+        )
         help_command.arg_table = {'blob_arg': blob_arg}
         operation_handler = OperationDocumentEventHandler(help_command)
-        operation_handler.doc_option(arg_name='blob_arg',
-                                     help_command=help_command)
+        operation_handler.doc_option(
+            arg_name='blob_arg', help_command=help_command
+        )
         rendered = help_command.doc.getvalue().decode('utf-8')
         self.assertRegex(rendered, r'FooBar[\s\S]*streaming blob')
 
     def test_includes_tagged_union_options(self):
         help_command = self.create_help_command()
         tagged_union = self.create_tagged_union_shape()
-        arg = CustomArgument(name='tagged_union',
-                             argument_model=tagged_union)
+        arg = CustomArgument(name='tagged_union', argument_model=tagged_union)
         help_command.arg_table = {'tagged_union': arg}
         operation_handler = OperationDocumentEventHandler(help_command)
-        operation_handler.doc_option(arg_name='tagged_union',
-                                     help_command=help_command)
+        operation_handler.doc_option(
+            arg_name='tagged_union', help_command=help_command
+        )
         rendered = help_command.doc.getvalue().decode('utf-8')
         self.assertIn('(tagged union structure)', rendered)
 
     def test_tagged_union_comes_after_docstring_options(self):
         help_command = self.create_help_command()
         tagged_union = self.create_tagged_union_shape()
-        arg = CustomArgument(name='tagged_union',
-                             argument_model=tagged_union,
-                             help_text='FooBar')
+        arg = CustomArgument(
+            name='tagged_union',
+            argument_model=tagged_union,
+            help_text='FooBar',
+        )
         help_command.arg_table = {'tagged_union': arg}
         operation_handler = OperationDocumentEventHandler(help_command)
-        operation_handler.doc_option(arg_name='tagged_union',
-                                     help_command=help_command)
+        operation_handler.doc_option(
+            arg_name='tagged_union', help_command=help_command
+        )
         rendered = help_command.doc.getvalue().decode('utf-8')
         self.assertRegex(rendered, r'FooBar[\s\S]*Tagged Union')
 
@@ -429,21 +478,98 @@ class TestCLIDocumentEventHandler(unitte
         help_command = self.create_help_command()
         tagged_union = self.create_tagged_union_shape()
         tagged_union.documentation = "FooBar"
-        shape = DenormalizedStructureBuilder().with_members({
-            'foo': {
-                'type': 'structure',
-                'union': True,
-                'documentation': 'FooBar',
-                'members': {}
-            }
-        }).build_model()
+        shape = (
+            DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'foo': {
+                        'type': 'structure',
+                        'union': True,
+                        'documentation': 'FooBar',
+                        'members': {},
+                    }
+                }
+            )
+            .build_model()
+        )
         help_command.obj.output_shape = shape
         operation_handler = OperationDocumentEventHandler(help_command)
-        operation_handler.doc_output(help_command=help_command,
-                                     event_name='foobar')
+        operation_handler.doc_output(
+            help_command=help_command, event_name='foobar'
+        )
         rendered = help_command.doc.getvalue().decode('utf-8')
         self.assertRegex(rendered, r'FooBar[\s\S]*Tagged Union')
 
+    def test_documents_required_parameters(self):
+        """Tests that required parameters are correctly documented."""
+        shape_map = {
+            'ParentStructure': {
+                'type': 'structure',
+                'required': ['RequiredParameter'],
+                'members': {
+                    'RequiredParameter': {'shape': 'StringMember'},
+                    'OptionalParameter': {'shape': 'StringMember'},
+                },
+            },
+            'StringMember': {'type': 'string'},
+        }
+
+        resolver = ShapeResolver(shape_map)
+        parent_shape = StructureShape(
+            'ParentStructure', shape_map['ParentStructure'], resolver
+        )
+
+        rendered = self.get_help_docs_for_argument(parent_shape)
+
+        required_index = rendered.find('RequiredParameter -> (string)')
+        optional_index = rendered.find('OptionalParameter -> (string)')
+
+        self.assertIn('[required]', rendered[required_index:optional_index])
+        optional_text = rendered[optional_index:]
+        self.assertNotIn('[required]', optional_text)
+
+    def test_documents_constraints(self):
+        shape = {'type': 'string', 'min': 0, 'max': 10, 'pattern': '.*'}
+        shape = StringShape('ConstrainedArg', shape)
+        arg = CustomArgument('ConstrainedArg', argument_model=shape)
+        help_command = self.create_help_command()
+        help_command.arg_table = {'ConstrainedArg': arg}
+        operation_handler = OperationDocumentEventHandler(help_command)
+        operation_handler.doc_option(
+            arg_name='ConstrainedArg', help_command=help_command
+        )
+        rendered = help_command.doc.getvalue().decode('utf-8')
+        self.assertIn('Constraints', rendered)
+        self.assertIn('min: ``0``', rendered)
+        self.assertIn('max: ``10``', rendered)
+        self.assertIn('pattern: ``.*``', rendered)
+
+    def test_meta_description_operation_command_html(self):
+        help_cmd = ServiceHelpCommand(
+            self.session, self.obj, self.command_table, self.arg_table,
+            self.name, 'ec2.run-instances'
+        )
+        help_cmd.doc.target = 'html'
+        doc_handler = OperationDocumentEventHandler(help_cmd)
+        doc_handler.doc_meta_description(help_cmd)
+
+        meta_description = help_cmd.doc.getvalue().decode('utf-8')
+        self.assertIn(".. meta::\n   :description: ", meta_description)
+        self.assertIn('to run the ec2 run-instances command', meta_description)
+
+    def test_meta_description_service_html(self):
+        help_cmd = ServiceHelpCommand(
+            self.session, self.obj, self.command_table, self.arg_table,
+            self.name, 'ec2'
+        )
+        help_cmd.doc.target = 'html'
+        doc_handler = ServiceDocumentEventHandler(help_cmd)
+        doc_handler.doc_meta_description(help_cmd)
+
+        meta_description = help_cmd.doc.getvalue().decode('utf-8')
+        self.assertIn(".. meta::\n   :description: Learn about the AWS CLI ", meta_description)
+        self.assertIn(' ec2 commands', meta_description)
+
 
 class TestTopicDocumentEventHandlerBase(unittest.TestCase):
     def setUp(self):
@@ -457,10 +583,12 @@ class TestTopicDocumentEventHandlerBase(
         with open(self.json_index, 'w') as f:
             json.dump(self.tags_dict, f, indent=4, sort_keys=True)
 
-        self.index_patch = mock.patch('awscli.topictags.TopicTagDB.index_file',
-                                      self.json_index)
-        self.dir_patch = mock.patch('awscli.topictags.TopicTagDB.topic_dir',
-                                    self.file_creator.rootdir)
+        self.index_patch = mock.patch(
+            'awscli.topictags.TopicTagDB.index_file', self.json_index
+        )
+        self.dir_patch = mock.patch(
+            'awscli.topictags.TopicTagDB.topic_dir', self.file_creator.rootdir
+        )
         self.index_patch.start()
         self.dir_patch.start()
 
@@ -472,29 +600,28 @@ class TestTopicDocumentEventHandlerBase(
 
 class TestTopicListerDocumentEventHandler(TestTopicDocumentEventHandlerBase):
     def setUp(self):
-        super(TestTopicListerDocumentEventHandler, self).setUp()
+        super().setUp()
         self.descriptions = [
             'This describes the first topic',
             'This describes the second topic',
-            'This describes the third topic'
+            'This describes the third topic',
         ]
         self.tags_dict = {
             'topic-name-1': {
                 'title': ['The first topic title'],
                 'description': [self.descriptions[0]],
-                'category': ['General']
+                'category': ['General'],
             },
             'topic-name-2': {
                 'title': ['The second topic title'],
                 'description': [self.descriptions[1]],
-                'category': ['S3']
+                'category': ['S3'],
             },
             'topic-name-3': {
                 'title': ['The third topic title'],
                 'description': [self.descriptions[2]],
-                'category': ['General']
-            }
-
+                'category': ['General'],
+            },
         }
 
         with open(self.json_index, 'w') as f:
@@ -509,31 +636,31 @@ class TestTopicListerDocumentEventHandle
         self.cmd.doc.target = 'html'
         self.doc_handler.doc_breadcrumbs(self.cmd)
         self.assertEqual(
-            '[ :ref:`aws <cli:aws>` ]',
-            self.cmd.doc.getvalue().decode('utf-8')
+            '[ :ref:`aws <cli:aws>` ]', self.cmd.doc.getvalue().decode('utf-8')
         )
 
     def test_title(self):
         self.doc_handler.doc_title(self.cmd)
         title_contents = self.cmd.doc.getvalue().decode('utf-8')
-        self.assertIn('.. _cli:aws help %s:' % self.cmd.name, title_contents)
+        self.assertIn(f'.. _cli:aws help {self.cmd.name}:', title_contents)
         self.assertIn('AWS CLI Topic Guide', title_contents)
 
     def test_description(self):
         self.doc_handler.doc_description(self.cmd)
         self.assertIn(
             'This is the AWS CLI Topic Guide',
-            self.cmd.doc.getvalue().decode('utf-8')
+            self.cmd.doc.getvalue().decode('utf-8'),
         )
 
     def test_subitems_start(self):
         ref_output = [
             '-------\nGeneral\n-------',
-            ('* topic-name-1: %s\n'
-             '* topic-name-3: %s\n' %
-             (self.descriptions[0], self.descriptions[2])),
+            (
+                f'* topic-name-1: {self.descriptions[0]}\n'
+                f'* topic-name-3: {self.descriptions[2]}\n'
+            ),
             '--\nS3\n--',
-            '* topic-name-2: %s\n' % self.descriptions[1]
+            f'* topic-name-2: {self.descriptions[1]}\n',
         ]
 
         self.doc_handler.doc_subitems_start(self.cmd)
@@ -548,12 +675,14 @@ class TestTopicListerDocumentEventHandle
         self.cmd.doc.target = 'html'
         ref_output = [
             '-------\nGeneral\n-------',
-            ('* :ref:`topic-name-1 <cli:aws help topic-name-1>`: %s\n'
-             '* :ref:`topic-name-3 <cli:aws help topic-name-3>`: %s\n' %
-             (self.descriptions[0], self.descriptions[2])),
+            (
+                f'* :ref:`topic-name-1 <cli:aws help topic-name-1>`: {self.descriptions[0]}\n'
+                f'* :ref:`topic-name-3 <cli:aws help topic-name-3>`: {self.descriptions[2]}\n'
+            ),
             '--\nS3\n--',
-            ('* :ref:`topic-name-2 <cli:aws help topic-name-2>`: %s\n' %
-             self.descriptions[1])
+            (
+                f'* :ref:`topic-name-2 <cli:aws help topic-name-2>`: {self.descriptions[1]}\n'
+            ),
         ]
 
         self.doc_handler.doc_subitems_start(self.cmd)
@@ -568,7 +697,7 @@ class TestTopicListerDocumentEventHandle
 
 class TestTopicDocumentEventHandler(TestTopicDocumentEventHandlerBase):
     def setUp(self):
-        super(TestTopicDocumentEventHandler, self).setUp()
+        super().setUp()
         self.name = 'topic-name-1'
         self.title = 'The first topic title'
         self.description = 'This is about the first topic'
@@ -583,7 +712,7 @@ class TestTopicDocumentEventHandler(Test
                 'description': [self.description],
                 'category': [self.category],
                 'related topic': [self.related_topic],
-                'related command': [self.related_command]
+                'related command': [self.related_command],
             }
         }
         with open(self.json_index, 'w') as f:
@@ -599,13 +728,13 @@ class TestTopicDocumentEventHandler(Test
         self.doc_handler.doc_breadcrumbs(self.cmd)
         self.assertEqual(
             '[ :ref:`aws <cli:aws>` . :ref:`topics <cli:aws help topics>` ]',
-            self.cmd.doc.getvalue().decode('utf-8')
+            self.cmd.doc.getvalue().decode('utf-8'),
         )
 
     def test_title(self):
         self.doc_handler.doc_title(self.cmd)
         title_contents = self.cmd.doc.getvalue().decode('utf-8')
-        self.assertIn('.. _cli:aws help %s:' % self.name, title_contents)
+        self.assertIn(f'.. _cli:aws help {self.name}:', title_contents)
         self.assertIn(self.title, title_contents)
 
     def test_description(self):
@@ -615,7 +744,7 @@ class TestTopicDocumentEventHandler(Test
             ':category:' + self.category,
             ':related command: ' + self.related_command,
             ':related topic: ' + self.related_topic,
-            self.topic_body
+            self.topic_body,
         ]
         body = '\n'.join(lines)
         self.file_creator.create_file(self.name + '.rst', body)
@@ -625,9 +754,7 @@ class TestTopicDocumentEventHandler(Test
         self.assertNotIn(':title ' + self.title, contents)
 
     def test_description_no_tags(self):
-        lines = [
-            self.topic_body
-        ]
+        lines = [self.topic_body]
         body = '\n'.join(lines)
         self.file_creator.create_file(self.name + '.rst', body)
         self.doc_handler.doc_description(self.cmd)
@@ -638,12 +765,12 @@ class TestTopicDocumentEventHandler(Test
         lines = [
             ':title: ' + self.title,
             ':description: ' + self.description,
-            ':related command: ' + self.related_command
+            ':related command: ' + self.related_command,
         ]
         body_lines = [
             ':related_topic: ' + self.related_topic,
             self.topic_body,
-            ':foo: bar'
+            ':foo: bar',
         ]
         body = '\n'.join(lines + body_lines)
         ref_body = '\n'.join(body_lines)
@@ -666,10 +793,12 @@ class TestGlobalOptionsDocumenter(unitte
             name = f'{t}_type'
             help_text = f'This arg type is {t}'
             choices = ['A', 'B', 'C'] if t == 'string' else []
-            arg_table[name] = CustomArgument(name=name,
-                                             cli_type_name=t,
-                                             help_text=help_text,
-                                             choices=choices)
+            arg_table[name] = CustomArgument(
+                name=name,
+                cli_type_name=t,
+                help_text=help_text,
+                choices=choices,
+            )
         help_command = mock.Mock(spec=HelpCommand)
         help_command.arg_table = arg_table
         help_command.doc = ReSTDocument()
diff -pruN 2.23.6-1/tests/unit/test_clidriver.py 2.31.35-1/tests/unit/test_clidriver.py
--- 2.23.6-1/tests/unit/test_clidriver.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_clidriver.py	2025-11-12 19:17:29.000000000 +0000
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"). You
@@ -12,75 +11,58 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import contextlib
+import io
+import logging
+import os
 import platform
 import re
-
-from awscli.testutils import unittest
-from awscli.testutils import BaseAWSCommandParamsTest
-import logging
-import io
-
-from awscli.testutils import mock
+import sys
 
 import awscrt.io
+import botocore.model
+import pytest
 from botocore import xform_name
-import sys
-
 from botocore.awsrequest import AWSResponse
-from botocore.exceptions import NoCredentialsError
 from botocore.compat import OrderedDict
-import botocore.model
+from botocore.configprovider import (
+    ConfigChainFactory,
+    ConfigValueStore,
+    create_botocore_default_config_mapping,
+)
+from botocore.exceptions import NoCredentialsError
+from botocore.hooks import HierarchicalEmitter
 
 import awscli
-from awscli.clidriver import CLIDriver
-from awscli.clidriver import create_clidriver
-from awscli.clidriver import CustomArgument
-from awscli.clidriver import CLICommand
-from awscli.clidriver import construct_cli_error_handlers_chain
-from awscli.clidriver import ServiceCommand
-from awscli.clidriver import ServiceOperation
-from awscli.paramfile import URIArgumentHandler
-from awscli.customizations.commands import BasicCommand
 from awscli import formatter
 from awscli.argparser import HELP_BLURB
+from awscli.clidriver import (
+    CLICommand,
+    CLIDriver,
+    CustomArgument,
+    ServiceCommand,
+    ServiceOperation,
+    construct_cli_error_handlers_chain,
+    create_clidriver,
+)
 from awscli.compat import StringIO
-from botocore.hooks import HierarchicalEmitter
-from botocore.configprovider import create_botocore_default_config_mapping
-from botocore.configprovider import ConfigChainFactory
-from botocore.configprovider import ConfigValueStore
-
+from awscli.customizations.commands import BasicCommand
+from awscli.paramfile import URIArgumentHandler
+from awscli.testutils import BaseAWSCommandParamsTest, mock, unittest
 
 GET_DATA = {
     'cli': {
         'description': 'description',
         'synopsis': 'usage: foo',
         'options': {
-            "debug": {
-                "action": "store_true",
-                "help": "Turn on debug logging"
-            },
+            "debug": {"action": "store_true", "help": "Turn on debug logging"},
             "output": {
-                "choices": [
-                    "json",
-                    "text",
-                    "table"
-                ],
-                "metavar": "output_format"
-            },
-            "query": {
-                "help": ""
-            },
-            "profile": {
-                "help": "",
-                "metavar": "profile_name"
-            },
-            "region": {
-                "metavar": "region_name"
-            },
-            "endpoint-url": {
-                "help": "",
-                "metavar": "endpoint_url"
+                "choices": ["json", "text", "table"],
+                "metavar": "output_format",
             },
+            "query": {"help": ""},
+            "profile": {"help": "", "metavar": "profile_name"},
+            "region": {"metavar": "region_name"},
+            "endpoint-url": {"help": "", "metavar": "endpoint_url"},
             "no-verify-ssl": {
                 "action": "store_false",
                 "dest": "verify_ssl",
@@ -89,21 +71,15 @@ GET_DATA = {
             "no-paginate": {
                 "action": "store_false",
                 "help": "",
-                "dest": "paginate"
+                "dest": "paginate",
             },
             "page-size": {
                 "type": "int",
                 "help": "",
             },
-            "read-timeout": {
-                "type": "int",
-                "help": ""
-            },
-            "connect-timeout": {
-                "type": "int",
-                "help": ""
-            }
-        }
+            "read-timeout": {"type": "int", "help": ""},
+            "connect-timeout": {"type": "int", "help": ""},
+        },
     },
 }
 
@@ -111,95 +87,97 @@ GET_VARIABLE = {
     'provider': 'aws',
     'output': 'json',
     'api_versions': {},
-    'pager': 'less'
+    'pager': 'less',
 }
 
 
 MINI_SERVICE = {
-  "metadata":{
-    "apiVersion":"2006-03-01",
-    "endpointPrefix":"s3",
-    "globalEndpoint":"s3.amazonaws.com",
-    "signatureVersion":"s3",
-    "protocol":"rest-xml"
-  },
-  "operations":{
-    "ListObjects":{
-      "name":"ListObjects",
-      "http":{
-        "method":"GET",
-        "requestUri":"/{Bucket}"
-      },
-      "input":{"shape":"ListObjectsRequest"},
-      "output":{"shape":"ListObjectsOutput"},
-    },
-    "IdempotentOperation":{
-      "name":"IdempotentOperation",
-      "http":{
-        "method":"GET",
-        "requestUri":"/{Bucket}"
-      },
-      "input":{"shape":"IdempotentOperationRequest"},
-      "output":{"shape":"ListObjectsOutput"},
+    "metadata": {
+        "apiVersion": "2006-03-01",
+        "endpointPrefix": "s3",
+        "globalEndpoint": "s3.amazonaws.com",
+        "signatureVersion": "s3",
+        "protocol": "rest-xml",
     },
-  },
-  "shapes":{
-    "ListObjectsOutput":{
-      "type":"structure",
-      "members":{
-        "IsTruncated":{
-          "shape":"IsTruncated",
-          "documentation":""
+    "operations": {
+        "ListObjects": {
+            "name": "ListObjects",
+            "http": {"method": "GET", "requestUri": "/{Bucket}"},
+            "input": {"shape": "ListObjectsRequest"},
+            "output": {"shape": "ListObjectsOutput"},
         },
-        "NextMarker":{
-          "shape":"NextMarker",
+        "IdempotentOperation": {
+            "name": "IdempotentOperation",
+            "http": {"method": "GET", "requestUri": "/{Bucket}"},
+            "input": {"shape": "IdempotentOperationRequest"},
+            "output": {"shape": "ListObjectsOutput"},
         },
-        "Contents":{"shape":"Contents"},
-      },
     },
-    "IdempotentOperationRequest":{
-      "type":"structure",
-      "required": "token",
-      "members":{
-        "token":{
-          "shape":"Token",
-          "idempotencyToken": True,
+    "shapes": {
+        "ListObjectsOutput": {
+            "type": "structure",
+            "members": {
+                "IsTruncated": {"shape": "IsTruncated", "documentation": ""},
+                "NextMarker": {
+                    "shape": "NextMarker",
+                },
+                "Contents": {"shape": "Contents"},
+            },
         },
-      }
-    },
-    "ListObjectsRequest":{
-      "type":"structure",
-      "required":["Bucket"],
-      "members":  OrderedDict([
-        ("Bucket", {
-          "shape":"BucketName",
-          "location":"uri",
-          "locationName":"Bucket"
-        }),
-        ("Marker", {
-          "shape":"Marker",
-          "location":"querystring",
-          "locationName":"marker",
-        }),
-        ("MaxKeys", {
-          "shape":"MaxKeys",
-          "location":"querystring",
-          "locationName":"max-keys",
-        }),
-      ]),
+        "IdempotentOperationRequest": {
+            "type": "structure",
+            "required": "token",
+            "members": {
+                "token": {
+                    "shape": "Token",
+                    "idempotencyToken": True,
+                },
+            },
+        },
+        "ListObjectsRequest": {
+            "type": "structure",
+            "required": ["Bucket"],
+            "members": OrderedDict(
+                [
+                    (
+                        "Bucket",
+                        {
+                            "shape": "BucketName",
+                            "location": "uri",
+                            "locationName": "Bucket",
+                        },
+                    ),
+                    (
+                        "Marker",
+                        {
+                            "shape": "Marker",
+                            "location": "querystring",
+                            "locationName": "marker",
+                        },
+                    ),
+                    (
+                        "MaxKeys",
+                        {
+                            "shape": "MaxKeys",
+                            "location": "querystring",
+                            "locationName": "max-keys",
+                        },
+                    ),
+                ]
+            ),
+        },
+        "BucketName": {"type": "string"},
+        "MaxKeys": {"type": "integer"},
+        "Marker": {"type": "string"},
+        "IsTruncated": {"type": "boolean"},
+        "NextMarker": {"type": "string"},
+        "Contents": {"type": "string"},
+        "Token": {"type": "string"},
     },
-    "BucketName":{"type":"string"},
-    "MaxKeys":{"type":"integer"},
-    "Marker":{"type":"string"},
-    "IsTruncated":{"type":"boolean"},
-    "NextMarker":{"type":"string"},
-    "Contents":{"type":"string"},
-    "Token":{"type":"string"},
-  }
 }
 
 
-class FakeSession(object):
+class FakeSession:
     def __init__(self, emitter=None):
         self.operation = None
         if emitter is None:
@@ -256,8 +234,7 @@ class FakeSession(object):
         return self.session_vars[name]
 
     def get_service_model(self, name, api_version=None):
-        return botocore.model.ServiceModel(
-            MINI_SERVICE, service_name='s3')
+        return botocore.model.ServiceModel(MINI_SERVICE, service_name='s3')
 
     def user_agent(self):
         return 'user_agent'
@@ -297,32 +274,38 @@ class FakeCommandVerify(FakeCommand):
         return 0
 
 
-class TestCliDriver(unittest.TestCase):
-    def setUp(self):
+class FakeCLISessionOrchestrator:
+    @property
+    def session_id(self):
+        return 'mysessionid'
+
+
+class TestCliDriver:
+    def setup_method(self):
         self.session = FakeSession()
         self.session.set_config_variable('cli_auto_prompt', 'off')
+        self.session.set_config_variable('cli_help_output', None)
         self.driver = CLIDriver(session=self.session)
 
     def test_session_can_be_passed_in(self):
-        self.assertEqual(self.driver.session, self.session)
+        assert self.driver.session == self.session
 
     def test_paginate_rc(self):
         rc = self.driver.main('s3 list-objects --bucket foo'.split())
-        self.assertEqual(rc, 0)
+        assert rc == 0
 
     def test_no_profile(self):
         self.driver.main('s3 list-objects --bucket foo'.split())
-        self.assertEqual(self.driver.session.profile, None)
+        assert self.driver.session.profile is None
 
     def test_profile(self):
         self.driver.main('s3 list-objects --bucket foo --profile foo'.split())
-        self.assertEqual(self.driver.session.profile, 'foo')
+        assert self.driver.session.profile == 'foo'
 
     def test_region_is_set_for_session(self):
         driver = CLIDriver(session=self.session)
         driver.main('s3 list-objects --bucket foo --region us-east-2'.split())
-        self.assertEqual(
-            driver.session.get_config_variable('region'), 'us-east-2')
+        assert driver.session.get_config_variable('region') == 'us-east-2'
 
     @mock.patch('awscli.clidriver.set_stream_logger')
     def test_error_logger(self, set_stream_logger):
@@ -336,61 +319,98 @@ class TestCliDriver(unittest.TestCase):
         fake_client.can_paginate.return_value = False
         self.driver.session.create_client = mock.Mock(return_value=fake_client)
         rc = self.driver.main('s3 list-objects --bucket foo'.split())
-        self.assertEqual(rc, 130)
+        assert rc == 130
 
     def test_error_unicode(self):
         stderr_b = io.BytesIO()
         stderr = io.TextIOWrapper(stderr_b, encoding="UTF-8")
         fake_client = mock.Mock()
-        fake_client.list_objects.side_effect = Exception(u"☃")
+        fake_client.list_objects.side_effect = Exception("☃")
         fake_client.can_paginate.return_value = False
         self.driver.session.create_client = mock.Mock(return_value=fake_client)
         with mock.patch("sys.stderr", stderr):
             with mock.patch("locale.getpreferredencoding", lambda: "UTF-8"):
                 rc = self.driver.main('s3 list-objects --bucket foo'.split())
         stderr.flush()
-        self.assertEqual(rc, 255)
-        self.assertEqual(stderr_b.getvalue().strip(), u"☃".encode("UTF-8"))
+        assert rc == 255
+        assert stderr_b.getvalue().strip() == "☃".encode()
+
+    @pytest.mark.parametrize(
+        'env_vars',
+        [
+            {'AWS_CLI_OUTPUT_ENCODING': 'UTF-8'},
+            {'PYTHONUTF8': '1'},
+        ],
+    )
+    def test_error_unicode_env_override(self, env_vars):
+        stderr_b = io.BytesIO()
+        stderr = io.TextIOWrapper(stderr_b, encoding="cp1252")
+        fake_client = mock.Mock()
+        fake_client.list_objects.side_effect = Exception("☃")
+        fake_client.can_paginate.return_value = False
+        self.driver.session.create_client = mock.Mock(return_value=fake_client)
+        with mock.patch.dict(os.environ, env_vars):
+            with mock.patch("sys.stderr", stderr):
+                rc = self.driver.main('s3 list-objects --bucket foo'.split())
+        stderr.flush()
+        assert rc == 255
+        assert stderr_b.getvalue().strip() == "☃".encode()
+
+    def test_invalid_output_encoding_throws(self):
+        stderr_b = io.BytesIO()
+        fake_stderr = io.TextIOWrapper(stderr_b)
+        with mock.patch.dict(
+            os.environ, {'AWS_CLI_OUTPUT_ENCODING': 'invalid'}
+        ):
+            with contextlib.redirect_stderr(fake_stderr):
+                rc = self.driver.main('s3 list-objects --bucket foo'.split())
+        assert rc == 255
+        fake_stderr.flush()
+        assert (
+            stderr_b.getvalue().decode().strip()
+            == 'Unknown codec `invalid` specified for AWS_CLI_OUTPUT_ENCODING.'
+        )
 
     def test_can_access_subcommand_table(self):
         table = self.driver.subcommand_table
-        self.assertEqual(list(table), self.session.get_available_services())
+        assert list(table) == self.session.get_available_services()
 
     def test_can_access_argument_table(self):
         arg_table = self.driver.arg_table
         expected = list(GET_DATA['cli']['options'])
-        self.assertEqual(list(arg_table), expected)
+        assert list(arg_table) == expected
 
     def test_cli_driver_can_keep_log_handlers(self):
         fake_stderr = io.StringIO()
         with contextlib.redirect_stderr(fake_stderr):
             driver = create_clidriver(['--debug'])
             rc = driver.main(['ec2', '--debug'])
-        self.assertEqual(rc, 252)
-        self.assertEqual(2, fake_stderr.getvalue().count('CLI version:'))
+        assert rc == 252
+        assert 2 == fake_stderr.getvalue().count('CLI version:')
 
     def test_cli_driver_can_remove_log_handlers(self):
         fake_stderr = io.StringIO()
         with contextlib.redirect_stderr(fake_stderr):
             driver = create_clidriver(['--debug'])
             rc = driver.main(['ec2'])
-        self.assertEqual(rc, 252)
-        self.assertEqual(1, fake_stderr.getvalue().count('CLI version:'))
+        assert rc == 252
+        assert 1 == fake_stderr.getvalue().count('CLI version:')
 
-    @mock.patch('awscrt.io.init_logging')
+    @mock.patch('awscrt.io.set_log_level')
     def test_debug_enables_crt_logging(self, mock_init_logging):
         with contextlib.redirect_stderr(io.StringIO()):
             self.driver.main(
-                ['s3', 'list-objects', '--bucket', 'foo', '--debug'])
+                ['s3', 'list-objects', '--bucket', 'foo', '--debug']
+            )
         mock_init_logging.assert_called_with(
-            awscrt.io.LogLevel.Debug, 'stderr'
+            awscrt.io.LogLevel.Debug,
         )
 
-    @mock.patch('awscrt.io.init_logging')
+    @mock.patch('awscrt.io.set_log_level')
     def test_no_debug_disables_crt_logging(self, mock_init_logging):
         self.driver.main(['s3', 'list-objects', '--bucket', 'foo'])
         mock_init_logging.assert_called_with(
-            awscrt.io.LogLevel.NoLogs, 'stderr'
+            awscrt.io.LogLevel.NoLogs,
         )
 
 
@@ -399,17 +419,18 @@ class TestCliDriverHooks(unittest.TestCa
     def setUp(self):
         self.session = FakeSession()
         self.session.set_config_variable('cli_auto_prompt', 'off')
+        self.session.set_config_variable('cli_help_output', None)
         self.emitter = mock.Mock()
         self.emitter.emit.return_value = []
         self.stdout = StringIO()
         self.stderr = StringIO()
         self.stdout_patch = mock.patch('sys.stdout', self.stdout)
-        #self.stdout_patch.start()
+        # self.stdout_patch.start()
         self.stderr_patch = mock.patch('sys.stderr', self.stderr)
         self.stderr_patch.start()
 
     def tearDown(self):
-        #self.stdout_patch.stop()
+        # self.stdout_patch.stop()
         self.stderr_patch.stop()
 
     def assert_events_fired_in_order(self, events):
@@ -426,23 +447,25 @@ class TestCliDriverHooks(unittest.TestCa
         self.session.emitter = self.emitter
         driver = CLIDriver(session=self.session)
         driver.main('s3 list-objects --bucket foo'.split())
-        self.assert_events_fired_in_order([
-            # Events fired while parser is being created.
-            'building-command-table.main',
-            'building-top-level-params',
-            'top-level-args-parsed',
-            'session-initialized',
-            'building-command-table.s3',
-            'building-argument-table.s3.list-objects',
-            'before-building-argument-table-parser.s3.list-objects',
-            'building-command-table.s3_list-objects',
-            'operation-args-parsed.s3.list-objects',
-            'load-cli-arg.s3.list-objects.bucket',
-            'process-cli-arg.s3.list-objects',
-            'load-cli-arg.s3.list-objects.marker',
-            'load-cli-arg.s3.list-objects.max-keys',
-            'calling-command.s3.list-objects'
-        ])
+        self.assert_events_fired_in_order(
+            [
+                # Events fired while parser is being created.
+                'building-command-table.main',
+                'building-top-level-params',
+                'top-level-args-parsed',
+                'session-initialized',
+                'building-command-table.s3',
+                'building-argument-table.s3.list-objects',
+                'before-building-argument-table-parser.s3.list-objects',
+                'building-command-table.s3_list-objects',
+                'operation-args-parsed.s3.list-objects',
+                'load-cli-arg.s3.list-objects.bucket',
+                'process-cli-arg.s3.list-objects',
+                'load-cli-arg.s3.list-objects.marker',
+                'load-cli-arg.s3.list-objects.max-keys',
+                'calling-command.s3.list-objects',
+            ]
+        )
 
     def test_create_help_command(self):
         # When we generate the HTML docs, we don't actually run
@@ -457,17 +480,19 @@ class TestCliDriverHooks(unittest.TestCa
         main_hc = driver.create_help_command()
         command = main_hc.command_table['s3']
         command.create_help_command()
-        self.assert_events_fired_in_order([
-            # Events fired while parser is being created.
-            'building-command-table.main',
-            'building-top-level-params',
-            'building-command-table.s3',
-        ])
+        self.assert_events_fired_in_order(
+            [
+                # Events fired while parser is being created.
+                'building-command-table.main',
+                'building-top-level-params',
+                'building-command-table.s3',
+            ]
+        )
 
     def test_unknown_command_suggests_help(self):
         driver = CLIDriver(
             session=self.session,
-            error_handler=construct_cli_error_handlers_chain()
+            error_handler=construct_cli_error_handlers_chain(),
         )
 
         # Note the typo in 'list-objects'
@@ -476,9 +501,13 @@ class TestCliDriverHooks(unittest.TestCa
         )
         self.assertEqual(rc, 252)
         # Tell the user what went wrong.
-        self.assertIn("Invalid choice: 'list-objecst'", self.stderr.getvalue())
+        self.assertIn(
+            "Found invalid choice 'list-objecst'", self.stderr.getvalue()
+        )
         # Offer the user a suggestion.
-        self.assertIn("maybe you meant:\n\n  * list-objects", self.stderr.getvalue())
+        self.assertIn(
+            "Maybe you meant:\n\n  * list-objects", self.stderr.getvalue()
+        )
 
 
 class TestSearchPath(unittest.TestCase):
@@ -487,8 +516,7 @@ class TestSearchPath(unittest.TestCase):
     def test_windows_style_search_path(self):
         driver = CLIDriver()
         # Our two overrides should be the last two elements in the search path.
-        search_paths = driver.session.get_component(
-            'data_loader').search_paths
+        search_paths = driver.session.get_component('data_loader').search_paths
         self.assertIn('c:\\foo', search_paths)
         self.assertIn('c:\\bar', search_paths)
 
@@ -513,9 +541,7 @@ class TestAWSCommand(BaseAWSCommandParam
     def inject_command(self, command_table, session, **kwargs):
         command = FakeCommand(session)
         command.NAME = 'foo'
-        command.ARG_TABLE = [
-            {'name': 'bar', 'action': 'store'}
-        ]
+        command.ARG_TABLE = [{'name': 'bar', 'action': 'store'}]
         command_table['foo'] = command
 
     def inject_command_schema(self, command_table, session, **kwargs):
@@ -528,20 +554,13 @@ class TestAWSCommand(BaseAWSCommandParam
             "items": {
                 "type": "object",
                 "properties": {
-                    "Name": {
-                        "type": "string",
-                        "required": True
-                    },
-                    "Count": {
-                        "type": "integer"
-                    }
-                }
-            }
+                    "Name": {"type": "string", "required": True},
+                    "Count": {"type": "integer"},
+                },
+            },
         }
 
-        command.ARG_TABLE = [
-            {'name': 'bar', 'schema': schema}
-        ]
+        command.ARG_TABLE = [{'name': 'bar', 'schema': schema}]
 
         command_table['foo'] = command
 
@@ -559,10 +578,12 @@ class TestAWSCommand(BaseAWSCommandParam
         # So, for this test we need to create a new driver object.
         driver = create_clidriver()
         driver.session.register(
-            'building-top-level-params', self.inject_new_param)
+            'building-top-level-params', self.inject_new_param
+        )
         driver.session.register(
             'top-level-args-parsed',
-            lambda parsed_args, **kwargs: args_seen.append(parsed_args))
+            lambda parsed_args, **kwargs: args_seen.append(parsed_args),
+        )
 
         args_seen = []
 
@@ -574,8 +595,7 @@ class TestAWSCommand(BaseAWSCommandParam
         self.assertEqual(len(args_seen), 1)
         self.assertEqual(args_seen[0].unknown_arg, 'foo')
 
-    @mock.patch('awscli.paramfile.URIArgumentHandler',
-                spec=URIArgumentHandler)
+    @mock.patch('awscli.paramfile.URIArgumentHandler', spec=URIArgumentHandler)
     def test_custom_arg_paramfile(self, mock_handler):
         mock_paramfile = mock.Mock(autospec=True)
         mock_paramfile.return_value = None
@@ -583,11 +603,13 @@ class TestAWSCommand(BaseAWSCommandParam
 
         driver = create_clidriver()
         driver.session.register(
-            'building-argument-table', self.inject_new_param)
+            'building-argument-table', self.inject_new_param
+        )
 
         self.patch_make_request()
         rc = driver.main(
-            'ec2 describe-instances --unknown-arg file:///foo'.split())
+            'ec2 describe-instances --unknown-arg file:///foo'.split()
+        )
 
         self.assertEqual(rc, 0)
 
@@ -601,23 +623,20 @@ class TestAWSCommand(BaseAWSCommandParam
         )
         # Make sure it was called with our passed-in URI
         self.assertEqual(
-            'file:///foo',
-            mock_paramfile.call_args_list[-1][1]['value'])
+            'file:///foo', mock_paramfile.call_args_list[-1][1]['value']
+        )
 
-    @mock.patch('awscli.paramfile.URIArgumentHandler',
-                spec=URIArgumentHandler)
+    @mock.patch('awscli.paramfile.URIArgumentHandler', spec=URIArgumentHandler)
     def test_custom_command_paramfile(self, mock_handler):
         mock_paramfile = mock.Mock(autospec=True)
         mock_paramfile.return_value = None
         mock_handler.return_value = mock_paramfile
 
         driver = create_clidriver()
-        driver.session.register(
-            'building-command-table', self.inject_command)
+        driver.session.register('building-command-table', self.inject_command)
 
         self.patch_make_request()
-        rc = driver.main(
-            'ec2 foo --bar file:///foo'.split())
+        rc = driver.main('ec2 foo --bar file:///foo'.split())
 
         self.assertEqual(rc, 0)
 
@@ -632,43 +651,40 @@ class TestAWSCommand(BaseAWSCommandParam
     def test_custom_command_schema(self):
         driver = create_clidriver()
         driver.session.register(
-            'building-command-table', self.inject_command_schema)
+            'building-command-table', self.inject_command_schema
+        )
 
         self.patch_make_request()
 
         # Test single shorthand item
-        rc = driver.main(
-            'ec2 foo --bar Name=test,Count=4'.split())
+        rc = driver.main('ec2 foo --bar Name=test,Count=4'.split())
 
         self.assertEqual(rc, 0)
 
         # Test shorthand list of items with optional values
         rc = driver.main(
-            'ec2 foo --bar Name=test,Count=4 Name=another'.split())
+            'ec2 foo --bar Name=test,Count=4 Name=another'.split()
+        )
 
         self.assertEqual(rc, 0)
 
         # Test missing require shorthand item
-        rc = driver.main(
-            'ec2 foo --bar Count=4'.split())
+        rc = driver.main('ec2 foo --bar Count=4'.split())
 
         self.assertEqual(rc, 252)
 
         # Test extra unknown shorthand item
-        rc = driver.main(
-            'ec2 foo --bar Name=test,Unknown='.split())
+        rc = driver.main('ec2 foo --bar Name=test,Unknown='.split())
 
         self.assertEqual(rc, 252)
 
         # Test long form JSON
-        rc = driver.main(
-            'ec2 foo --bar {"Name":"test","Count":4}'.split())
+        rc = driver.main('ec2 foo --bar {"Name":"test","Count":4}'.split())
 
         self.assertEqual(rc, 0)
 
         # Test malformed long form JSON
-        rc = driver.main(
-            'ec2 foo --bar {"Name":"test",Count:4}'.split())
+        rc = driver.main('ec2 foo --bar {"Name":"test",Count:4}'.split())
 
         self.assertEqual(rc, 252)
 
@@ -676,33 +692,42 @@ class TestAWSCommand(BaseAWSCommandParam
         # Simulates the equivalent in bash: --identifies ""
         cmd = 'ses get-identity-dkim-attributes --identities'.split()
         cmd.append('')
-        self.assert_params_for_cmd(cmd,expected_rc=0)
+        self.assert_params_for_cmd(cmd, expected_rc=0)
 
     def test_file_param_does_not_exist(self):
         driver = create_clidriver()
-        rc = driver.main('ec2 describe-instances '
-                         '--filters file://does/not/exist.json'.split())
+        rc = driver.main(
+            'ec2 describe-instances '
+            '--filters file://does/not/exist.json'.split()
+        )
         self.assertEqual(rc, 252)
         error_msg = self.stderr.getvalue()
-        self.assertIn("Error parsing parameter '--filters': "
-                      "Unable to load paramfile file://does/not/exist.json",
-                      error_msg)
+        self.assertIn(
+            "Error parsing parameter '--filters': "
+            "Unable to load paramfile file://does/not/exist.json",
+            error_msg,
+        )
         self.assertIn("No such file or directory", error_msg)
 
     def test_aws_configure_in_error_message_no_credentials(self):
         driver = create_clidriver()
+
         def raise_exception(*args, **kwargs):
             raise NoCredentialsError()
+
         driver.session.register(
             'building-command-table',
-            lambda command_table, **kwargs: \
-                command_table.__setitem__('ec2', raise_exception))
+            lambda command_table, **kwargs: command_table.__setitem__(
+                'ec2', raise_exception
+            ),
+        )
         with mock.patch('sys.stderr') as f:
             driver.main('ec2 describe-instances'.split())
         self.assertEqual(
             f.write.call_args_list[1][0][0],
             'Unable to locate credentials. '
-            'You can configure credentials by running "aws configure".')
+            'You can configure credentials by running "aws configure".',
+        )
 
     def test_override_calling_command(self):
         self.driver = create_clidriver()
@@ -759,21 +784,24 @@ class TestAWSCommand(BaseAWSCommandParam
         self.assertEqual(rc, 252)
         self.assertNotIn('--idempotency-token', self.stderr.getvalue())
 
+    @mock.patch(
+        'awscli.telemetry._get_cli_session_orchestrator',
+        return_value=FakeCLISessionOrchestrator(),
+    )
     @mock.patch('awscli.clidriver.platform.system', return_value='Linux')
     @mock.patch('awscli.clidriver.platform.machine', return_value='x86_64')
     @mock.patch('awscli.clidriver.distro.id', return_value='amzn')
     @mock.patch('awscli.clidriver.distro.major_version', return_value='1')
     def test_user_agent_for_linux(self, *args):
         driver = create_clidriver()
-        expected_user_agent = 'md/installer#source md/distrib#amzn.1'
-        self.assertEqual(expected_user_agent,
-                         driver.session.user_agent_extra)
+        expected_user_agent = (
+            'md/installer#source md/distrib#amzn.1 sid/mysessionid'
+        )
+        self.assertEqual(expected_user_agent, driver.session.user_agent_extra)
 
     def test_user_agent(self, *args):
         driver = create_clidriver()
-        user_agent_extra_pattern = re.compile(
-            r'^md/installer#source'
-        )
+        user_agent_extra_pattern = re.compile(r'^md/installer#source')
         self.assertIsNotNone(
             user_agent_extra_pattern.match(driver.session.user_agent_extra)
         )
@@ -791,16 +819,17 @@ class TestHowClientIsCreated(BaseAWSComm
     def setUp(self):
         super(TestHowClientIsCreated, self).setUp()
         self.endpoint_creator_patch = mock.patch(
-            'botocore.args.EndpointCreator')
+            'botocore.args.EndpointCreator'
+        )
         self.endpoint_creator = self.endpoint_creator_patch.start()
-        self.create_endpoint = \
-                self.endpoint_creator.return_value.create_endpoint
+        self.create_endpoint = (
+            self.endpoint_creator.return_value.create_endpoint
+        )
         self.endpoint = self.create_endpoint.return_value
         self.endpoint.host = 'https://example.com'
         # Have the endpoint give a dummy empty response.
         http_response = AWSResponse(None, 200, {}, None)
-        self.endpoint.make_request.return_value = (
-            http_response, {})
+        self.endpoint.make_request.return_value = (http_response, {})
 
     def tearDown(self):
         super(TestHowClientIsCreated, self).tearDown()
@@ -809,30 +838,34 @@ class TestHowClientIsCreated(BaseAWSComm
     def test_aws_with_endpoint_url(self):
         self.assert_params_for_cmd(
             'ec2 describe-instances --endpoint-url https://foobar.com/',
-            expected_rc=0)
-        self.assertEqual(self.create_endpoint.call_args[1]['endpoint_url'],
-                         'https://foobar.com/')
+            expected_rc=0,
+        )
+        self.assertEqual(
+            self.create_endpoint.call_args[1]['endpoint_url'],
+            'https://foobar.com/',
+        )
 
     def test_aws_with_region(self):
         self.assert_params_for_cmd(
-            'ec2 describe-instances --region us-west-2',
-            expected_rc=0)
+            'ec2 describe-instances --region us-west-2', expected_rc=0
+        )
         self.assertEqual(
-            self.create_endpoint.call_args[1]['region_name'], 'us-west-2')
+            self.create_endpoint.call_args[1]['region_name'], 'us-west-2'
+        )
 
     def test_can_use_new_aws_region_env_var(self):
         self.environ['AWS_REGION'] = 'us-east-2'
         self.environ['AWS_DEFAULT_REGION'] = 'us-west-1'
-        self.assert_params_for_cmd(
-            'ec2 describe-instances',
-            expected_rc=0)
+        self.assert_params_for_cmd('ec2 describe-instances', expected_rc=0)
         self.assertEqual(
-            self.create_endpoint.call_args[1]['region_name'], 'us-east-2')
+            self.create_endpoint.call_args[1]['region_name'], 'us-east-2'
+        )
 
     def test_aws_with_verify_false(self):
         self.assert_params_for_cmd(
             'ec2 describe-instances --region us-east-1 --no-verify-ssl',
-            expected_rc=0)
+            expected_rc=0,
+        )
         # Because we used --no-verify-ssl, create_endpoint should be
         # called with verify=False
         call_args = self.create_endpoint.call_args
@@ -841,22 +874,24 @@ class TestHowClientIsCreated(BaseAWSComm
     def test_aws_with_cacert_env_var(self):
         self.environ['AWS_CA_BUNDLE'] = '/path/cacert.pem'
         self.assert_params_for_cmd(
-            'ec2 describe-instances --region us-east-1',
-            expected_rc=0)
+            'ec2 describe-instances --region us-east-1', expected_rc=0
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['verify'], '/path/cacert.pem')
 
     def test_aws_with_read_timeout(self):
         self.assert_params_for_cmd(
             'lambda invoke --function-name foo out.log --cli-read-timeout 90',
-            expected_rc=0)
+            expected_rc=0,
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['timeout'][1], 90)
 
     def test_aws_with_blocking_read_timeout(self):
         self.assert_params_for_cmd(
             'lambda invoke --function-name foo out.log --cli-read-timeout 0',
-            expected_rc=0)
+            expected_rc=0,
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['timeout'][1], None)
 
@@ -864,7 +899,8 @@ class TestHowClientIsCreated(BaseAWSComm
         self.assert_params_for_cmd(
             'lambda invoke --function-name foo out.log '
             '--cli-connect-timeout 90',
-            expected_rc=0)
+            expected_rc=0,
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['timeout'][0], 90)
 
@@ -872,7 +908,8 @@ class TestHowClientIsCreated(BaseAWSComm
         self.assert_params_for_cmd(
             'lambda invoke --function-name foo out.log '
             '--cli-connect-timeout 0',
-            expected_rc=0)
+            expected_rc=0,
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['timeout'][0], None)
 
@@ -880,7 +917,8 @@ class TestHowClientIsCreated(BaseAWSComm
         self.assert_params_for_cmd(
             'lambda invoke --function-name foo out.log '
             '--cli-read-timeout 70 --cli-connect-timeout 90',
-            expected_rc=0)
+            expected_rc=0,
+        )
         call_args = self.create_endpoint.call_args
         self.assertEqual(call_args[1]['timeout'], (90, 70))
 
@@ -895,7 +933,9 @@ class TestVerifyArgument(BaseAWSCommandP
         self.recorded_args = parsed_args
 
     def test_no_verify_argument(self):
-        self.assert_params_for_cmd('s3api list-buckets --no-verify-ssl'.split())
+        self.assert_params_for_cmd(
+            's3api list-buckets --no-verify-ssl'.split()
+        )
         self.assertFalse(self.recorded_args.verify_ssl)
 
     def test_verify_argument_is_none_by_default(self):
@@ -934,13 +974,14 @@ class TestServiceCommand(unittest.TestCa
     def setUp(self):
         self.name = 'foo'
         self.session = FakeSession()
+        self.session.set_config_variable('cli_help_output', None)
         self.cmd = ServiceCommand(self.name, self.session)
 
     def test_can_access_subcommand_table(self):
         table = self.cmd.subcommand_table
         expected = [
-            xform_name(op, '-') for op in
-            self.session.get_service_model(self.name).operation_names
+            xform_name(op, '-')
+            for op in self.session.get_service_model(self.name).operation_names
         ]
         self.assertEqual(set(table), set(expected))
 
@@ -967,8 +1008,7 @@ class TestServiceCommand(unittest.TestCa
         # a service command's command table is not public.
         help_command = self.cmd.create_help_command()
         child_cmd = help_command.command_table['list-objects']
-        self.assertEqual(child_cmd.lineage,
-                         [self.cmd, child_cmd])
+        self.assertEqual(child_cmd.lineage, [self.cmd, child_cmd])
         self.assertEqual(child_cmd.lineage_names, ['foo', 'list-objects'])
 
     def test_help_event_class(self):
@@ -985,18 +1025,21 @@ class TestServiceOperation(unittest.Test
     def setUp(self):
         self.name = 'list-objects'
         self.session = FakeSession()
-        operation = self.session.get_service_model(
-            's3').operation_model('ListObjects')
+        operation = self.session.get_service_model('s3').operation_model(
+            'ListObjects'
+        )
         self.mock_operation = operation
-        self.cmd = ServiceOperation(self.name, None, None, operation,
-                                    self.session)
+        self.cmd = ServiceOperation(
+            self.name, None, None, operation, self.session
+        )
 
     def test_can_access_subcommand_table(self):
         self.assertEqual(self.cmd.subcommand_table, {})
 
     def test_can_access_arg_table(self):
-        self.assertEqual(set(self.cmd.arg_table),
-                         set(['bucket', 'marker', 'max-keys']))
+        self.assertEqual(
+            set(self.cmd.arg_table), set(['bucket', 'marker', 'max-keys'])
+        )
 
     def test_name(self):
         self.assertEqual(self.cmd.name, self.name)
@@ -1014,8 +1057,9 @@ class TestServiceOperation(unittest.Test
 
     def test_deprecated_operation(self):
         self.mock_operation.deprecated = True
-        cmd = ServiceOperation(self.name, None, None, self.mock_operation,
-                               None)
+        cmd = ServiceOperation(
+            self.name, None, None, self.mock_operation, None
+        )
         self.assertTrue(getattr(cmd, '_UNDOCUMENTED'))
 
     def test_idempotency_token_is_not_required(self):
@@ -1026,12 +1070,13 @@ class TestServiceOperation(unittest.Test
         cmd = ServiceOperation(name, None, None, operation_model, session)
         arg_table = cmd.arg_table
         token_argument = arg_table.get('token')
-        self.assertFalse(token_argument.required,
-                         'Idempotency tokens should not be required')
+        self.assertFalse(
+            token_argument.required,
+            'Idempotency tokens should not be required',
+        )
 
 
 class TestAWSCLIEntryPoint(unittest.TestCase):
-
     def setUp(self):
         self.driver = mock.Mock()
 
@@ -1041,7 +1086,8 @@ class TestAWSCLIEntryPoint(unittest.Test
 
         self.prompt_patch = mock.patch('awscli.clidriver.AutoPromptDriver')
         self.crete_driver_patch = mock.patch(
-            'awscli.clidriver.create_clidriver')
+            'awscli.clidriver.create_clidriver'
+        )
         prompt_driver_class = self.prompt_patch.start()
         self.create_clidriver = self.crete_driver_patch.start()
         self.create_clidriver.side_effect = _create_fake_cli_driver
@@ -1113,8 +1159,9 @@ class TestAWSCLIEntryPoint(unittest.Test
         self.driver.main.return_value = 252
         entry_point = awscli.clidriver.AWSCLIEntryPoint()
         entry_point.main([])
-        self.assertEqual(self.driver.session.user_agent_extra,
-                         'md/prompt#partial')
+        self.assertEqual(
+            self.driver.session.user_agent_extra, 'md/prompt#partial'
+        )
 
     def test_not_update_user_agent_in_partial_mode_on_success(self):
         self.prompt_driver.resolve_mode.return_value = 'on-partial'
diff -pruN 2.23.6-1/tests/unit/test_compat.py 2.31.35-1/tests/unit/test_compat.py
--- 2.23.6-1/tests/unit/test_compat.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_compat.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,19 +10,24 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import io
 import locale
 import os
 import signal
 
 import pytest
 
-from awscli.compat import ensure_text_type
-from awscli.compat import compat_shell_quote
-from awscli.compat import compat_open
-from awscli.compat import get_popen_kwargs_for_pager_cmd
-from awscli.compat import getpreferredencoding
-from awscli.compat import ignore_user_entered_signals
-from awscli.testutils import mock, unittest, skip_if_windows, FileCreator
+from awscli.compat import (
+    compat_open,
+    compat_shell_quote,
+    ensure_text_type,
+    get_popen_kwargs_for_pager_cmd,
+    getpreferredencoding,
+    ignore_user_entered_signals,
+    set_preferred_output_encoding,
+    validate_preferred_output_encoding,
+)
+from awscli.testutils import FileCreator, mock, skip_if_windows, unittest
 
 
 class TestEnsureText(unittest.TestCase):
@@ -39,7 +44,7 @@ class TestEnsureText(unittest.TestCase):
         self.assertEqual(response, 'bar')
 
     def test_unicode(self):
-        value = u'baz'
+        value = 'baz'
         response = ensure_text_type(value)
         self.assertIsInstance(response, str)
         self.assertEqual(response, 'baz')
@@ -48,7 +53,7 @@ class TestEnsureText(unittest.TestCase):
         value = b'\xe2\x9c\x93'
         response = ensure_text_type(value)
         self.assertIsInstance(response, str)
-        self.assertEqual(response, u'\u2713')
+        self.assertEqual(response, '\u2713')
 
     def test_non_string_or_bytes_raises_error(self):
         value = 500
@@ -68,7 +73,7 @@ class TestEnsureText(unittest.TestCase):
         ('\\\\"', '\\\\\\\\\\"'),
         ('foo bar', '"foo bar"'),
         ('foo\tbar', '"foo\tbar"'),
-    )
+    ),
 )
 def test_compat_shell_quote_windows(input_string, expected_output):
     assert compat_shell_quote(input_string, "win32") == expected_output
@@ -83,8 +88,8 @@ def test_compat_shell_quote_windows(inpu
         ('foo bar', "'foo bar'"),
         ('foo\tbar', "'foo\tbar'"),
         ('foo\nbar', "'foo\nbar'"),
-        ("foo'bar", '\'foo\'"\'"\'bar\'')
-    )
+        ("foo'bar", '\'foo\'"\'"\'bar\''),
+    ),
 )
 def test_comat_shell_quote_linux(input_string, expected_output):
     assert compat_shell_quote(input_string, "linux2") == expected_output
@@ -99,8 +104,8 @@ def test_comat_shell_quote_linux(input_s
         ('foo bar', "'foo bar'"),
         ('foo\tbar', "'foo\tbar'"),
         ('foo\nbar', "'foo\nbar'"),
-        ("foo'bar", '\'foo\'"\'"\'bar\'')
-    )
+        ("foo'bar", '\'foo\'"\'"\'bar\''),
+    ),
 )
 def test_comat_shell_quote_darwin(input_string, expected_output):
     assert compat_shell_quote(input_string, "darwin") == expected_output
@@ -139,8 +144,10 @@ class TestIgnoreUserSignals(unittest.Tes
             try:
                 os.kill(os.getpid(), signal.SIGINT)
             except KeyboardInterrupt:
-                self.fail('The ignore_user_entered_signals context '
-                          'manager should have ignored')
+                self.fail(
+                    'The ignore_user_entered_signals context '
+                    'manager should have ignored'
+                )
 
     @skip_if_windows("These signals are not supported for windows")
     def test_ignore_signal_sigquit(self):
@@ -156,7 +163,6 @@ class TestIgnoreUserSignals(unittest.Tes
 
 
 class TestGetPreferredEncoding(unittest.TestCase):
-
     @mock.patch.dict(os.environ, {'AWS_CLI_FILE_ENCODING': 'cp1252'})
     def test_getpreferredencoding_with_env_var(self):
         encoding = getpreferredencoding()
@@ -172,7 +178,8 @@ class TestGetPreferredEncoding(unittest.
     @mock.patch('locale.setlocale', return_value='English_United States.1252')
     @mock.patch('locale.getpreferredencoding')
     def test_runs_locale_getpreferredencoding_wo_env_var_and_posix(
-            self, getprefedencoding, *args):
+        self, getprefedencoding, *args
+    ):
         getpreferredencoding()
         getprefedencoding.assert_called_once_with()
 
@@ -200,3 +207,27 @@ class TestCompatOpenWithAccessPermission
         with compat_open(file_path, access_permissions=0o600, mode='w') as f:
             f.write('bar')
         self.assertEqual(os.stat(file_path).st_mode, expected_st_mode)
+
+
+@pytest.mark.parametrize(
+    'env_vars, expected_encoding',
+    [
+        ({}, 'cp1252'),
+        ({'AWS_CLI_OUTPUT_ENCODING': 'UTF-8'}, 'UTF-8'),
+        ({'PYTHONUTF8': '1'}, 'UTF-8'),
+    ],
+)
+def test_set_preferred_output_encoding(env_vars, expected_encoding):
+    stdout_b = io.BytesIO()
+    stdout = io.TextIOWrapper(stdout_b, encoding="cp1252")
+
+    with mock.patch.dict(os.environ, env_vars):
+        set_preferred_output_encoding(stdout)
+
+    assert stdout.encoding == expected_encoding
+
+
+def test_validate_preferred_output_encoding():
+    with mock.patch.dict(os.environ, {'AWS_CLI_OUTPUT_ENCODING': 'invalid'}):
+        with pytest.raises(ValueError):
+            validate_preferred_output_encoding()
diff -pruN 2.23.6-1/tests/unit/test_errorhandler.py 2.31.35-1/tests/unit/test_errorhandler.py
--- 2.23.6-1/tests/unit/test_errorhandler.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_errorhandler.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,27 +14,26 @@ import io
 from collections import namedtuple
 
 import pytest
-
 from botocore.exceptions import (
-    NoRegionError, NoCredentialsError, ClientError,
+    ClientError,
+    NoCredentialsError,
+    NoRegionError,
+)
+from botocore.exceptions import (
     ParamValidationError as BotocoreParamValidationError,
 )
-from awscli.arguments import UnknownArgumentError
+
+from awscli import errorhandler
 from awscli.argparser import ArgParseException
 from awscli.argprocess import ParamError, ParamSyntaxError
+from awscli.arguments import UnknownArgumentError
 from awscli.autoprompt.factory import PrompterKeyboardInterrupt
 from awscli.customizations.exceptions import (
-    ParamValidationError, ConfigurationError
+    ConfigurationError,
+    ParamValidationError,
 )
 
-from awscli import errorhandler
-
-Case = namedtuple('Case', [
-    'exception',
-    'rc',
-    'stderr',
-    'stdout'
-])
+Case = namedtuple('Case', ['exception', 'rc', 'stderr', 'stdout'])
 
 
 def _assert_rc_and_error_message(case, error_handler):
@@ -56,18 +55,30 @@ def _assert_rc_and_error_message(case, e
         Case(KeyboardInterrupt(), 130, '', '\n'),
         Case(NoRegionError(), 253, 'region', ''),
         Case(NoCredentialsError(), 253, 'credentials', ''),
-        Case(ClientError(error_response={}, operation_name=''), 254,
-             'An error occurred', ''),
-        Case(BotocoreParamValidationError(report='param_name'), 252,
-             'param_name', ''),
+        Case(
+            ClientError(error_response={}, operation_name=''),
+            254,
+            'An error occurred',
+            '',
+        ),
+        Case(
+            BotocoreParamValidationError(report='param_name'),
+            252,
+            'param_name',
+            '',
+        ),
         Case(UnknownArgumentError('error'), 252, 'error', ''),
         Case(ArgParseException('error'), 252, 'error', ''),
         Case(ParamSyntaxError('error'), 252, 'error', ''),
-        Case(ParamError(cli_name='cli', message='message'), 252,
-             "'cli': message", ''),
+        Case(
+            ParamError(cli_name='cli', message='message'),
+            252,
+            "'cli': message",
+            '',
+        ),
         Case(ParamValidationError('error'), 252, 'error', ''),
         Case(ConfigurationError('error'), 253, 'error', ''),
-    ]
+    ],
 )
 def test_cli_error_handling_chain(case):
     error_handler = errorhandler.construct_cli_error_handlers_chain()
@@ -81,8 +92,12 @@ def test_cli_error_handling_chain(case):
         Case(KeyboardInterrupt(), 130, '', '\n'),
         Case(NoRegionError(), 253, 'region', ''),
         Case(NoCredentialsError(), 253, 'credentials', ''),
-        Case(ClientError(error_response={}, operation_name=''), 254,
-             'An error occurred', ''),
+        Case(
+            ClientError(error_response={}, operation_name=''),
+            254,
+            'An error occurred',
+            '',
+        ),
         Case(BotocoreParamValidationError(report='param_name'), 252, '', ''),
         Case(UnknownArgumentError('error'), 252, '', ''),
         Case(ArgParseException('error'), 252, '', ''),
@@ -90,7 +105,7 @@ def test_cli_error_handling_chain(case):
         Case(ParamError(cli_name='cli', message='message'), 252, '', ''),
         Case(ParamValidationError('error'), 252, '', ''),
         Case(ConfigurationError('error'), 253, 'error', ''),
-    ]
+    ],
 )
 def test_cli_error_handling_chain_injection(case):
     error_handler = errorhandler.construct_cli_error_handlers_chain()
@@ -107,7 +122,7 @@ def test_cli_error_handling_chain_inject
         Case(KeyboardInterrupt(), 130, '', '\n'),
         Case(PrompterKeyboardInterrupt('error'), 130, 'error', ''),
         Case(ParamValidationError('error'), 252, 'error', ''),
-    ]
+    ],
 )
 def test_entry_point_error_handling_chain(case):
     error_handler = errorhandler.construct_entry_point_handlers_chain()
diff -pruN 2.23.6-1/tests/unit/test_formatter.py 2.31.35-1/tests/unit/test_formatter.py
--- 2.23.6-1/tests/unit/test_formatter.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_formatter.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,13 +10,17 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import io
+import os
+import sys
 from argparse import Namespace
 
+import pytest
 from botocore.paginate import PageIterator
 
-from awscli.testutils import unittest, mock
-from awscli.compat import StringIO
-from awscli.formatter import YAMLDumper, StreamedYAMLFormatter
+from awscli.compat import StringIO, contextlib
+from awscli.formatter import JSONFormatter, StreamedYAMLFormatter, YAMLDumper
+from awscli.testutils import mock, unittest
 
 
 class FakePageIterator(PageIterator):
@@ -58,41 +62,26 @@ class TestYAMLDumper(unittest.TestCase):
         self.assertEqual(self.output.getvalue(), '- val1\n- val2\n')
 
 
-class TestStreamedYAMLFormatter(unittest.TestCase):
-    def setUp(self):
+class TestStreamedYAMLFormatter:
+    def setup_method(self):
         self.args = Namespace(query=None)
         self.formatter = StreamedYAMLFormatter(self.args)
         self.output = StringIO()
 
     def test_format_single_response(self):
-        response = {
-            'TableNames': [
-                'MyTable'
-            ]
-        }
+        response = {'TableNames': ['MyTable']}
         self.formatter('list-tables', response, self.output)
-        self.assertEqual(
-            self.output.getvalue(),
-            '- TableNames:\n'
-            '  - MyTable\n'
-        )
+        assert self.output.getvalue() == ('- TableNames:\n' '  - MyTable\n')
 
     def test_format_paginated_response(self):
-        response = FakePageIterator([
-            {
-                'TableNames': [
-                    'MyTable'
-                ]
-            },
-            {
-                'TableNames': [
-                    'MyTable2'
-                ]
-            },
-        ])
+        response = FakePageIterator(
+            [
+                {'TableNames': ['MyTable']},
+                {'TableNames': ['MyTable2']},
+            ]
+        )
         self.formatter('list-tables', response, self.output)
-        self.assertEqual(
-            self.output.getvalue(),
+        assert self.output.getvalue() == (
             '- TableNames:\n'
             '  - MyTable\n'
             '- TableNames:\n'
@@ -102,35 +91,92 @@ class TestStreamedYAMLFormatter(unittest
     def test_flushes_after_io_error(self):
         io_error_dumper = mock.Mock(YAMLDumper)
         mock_output = mock.Mock()
-        io_error_dumper.dump.side_effect = IOError()
-        response = {
-            'TableNames': [
-                'MyTable'
-            ]
-        }
+        io_error_dumper.dump.side_effect = OSError()
+        response = {'TableNames': ['MyTable']}
         formatter = StreamedYAMLFormatter(self.args, io_error_dumper)
         formatter('list-tables', response, mock_output)
-        self.assertTrue(mock_output.flush.called)
+        assert mock_output.flush.called
 
     def test_stops_paginating_after_io_error(self):
         io_error_dumper = mock.Mock(YAMLDumper)
         mock_output = mock.Mock()
-        io_error_dumper.dump.side_effect = IOError()
-        response = FakePageIterator([
-            {
-                'TableNames': [
-                    'MyTable'
-                ]
-            },
-            {
-                'TableNames': [
-                    'MyTable2'
-                ]
-            },
-        ])
+        io_error_dumper.dump.side_effect = OSError()
+        response = FakePageIterator(
+            [
+                {'TableNames': ['MyTable']},
+                {'TableNames': ['MyTable2']},
+            ]
+        )
         formatter = StreamedYAMLFormatter(self.args, io_error_dumper)
         formatter('list-tables', response, mock_output)
         # The dumper should have only been called once as the io error is
         # immediately raised and we should not have kept paginating.
-        self.assertTrue(len(io_error_dumper.dump.call_args_list), 1)
-        self.assertTrue(mock_output.flush.called)
+        assert len(io_error_dumper.dump.call_args_list) == 1
+        assert mock_output.flush.called
+
+    @pytest.mark.parametrize(
+        'env_vars',
+        [
+            {'AWS_CLI_OUTPUT_ENCODING': 'UTF-8'},
+            {'PYTHONUTF8': '1'},
+        ],
+    )
+    def test_encoding_override(self, env_vars):
+        response = {'TableNames': ['桌子']}
+        stdout_b = io.BytesIO()
+        stdout = io.TextIOWrapper(stdout_b, encoding="cp1252", newline='\n')
+
+        formatter = StreamedYAMLFormatter(self.args)
+        with mock.patch.dict(os.environ, env_vars):
+            with contextlib.redirect_stdout(stdout):
+                assert 'cp1252' == sys.stdout.encoding
+                formatter('list-tables', response, sys.stdout)
+                # we expect the formatter to have changed the output stream
+                # encoding based on AWS_CLI_OUTPUT_ENCODING
+                assert 'UTF-8' == sys.stdout.encoding
+                stdout.flush()
+
+        assert stdout_b.getvalue() == ('- TableNames:\n' '  - 桌子\n').encode()
+
+
+class TestJSONFormatter:
+    def setup_method(self):
+        self.args = Namespace(query=None)
+        self.formatter = JSONFormatter(self.args)
+
+    @pytest.mark.parametrize(
+        'env_vars',
+        [
+            {'AWS_CLI_OUTPUT_ENCODING': 'UTF-8'},
+            {'PYTHONUTF8': '1'},
+        ],
+    )
+    def test_encoding_override(self, env_vars):
+        """
+        StreamedYAMLFormatter is tested above since it doesn't inherit from
+        FullyBufferedFormatter, this is implicitly testing all other
+        formatters that do.
+        """
+        response = {'TableNames': ['桌子']}
+        stdout_b = io.BytesIO()
+        stdout = io.TextIOWrapper(stdout_b, encoding="cp1252", newline='\n')
+
+        with mock.patch.dict(os.environ, env_vars):
+            with contextlib.redirect_stdout(stdout):
+                assert 'cp1252' == sys.stdout.encoding
+                self.formatter('list-tables', response, sys.stdout)
+                # we expect the formatter to have changed the output stream
+                # encoding based on AWS_CLI_OUTPUT_ENCODING
+                assert 'UTF-8' == sys.stdout.encoding
+                stdout.flush()
+
+        assert (
+            stdout_b.getvalue()
+            == (
+                '{\n'
+                '    "TableNames": [\n'
+                '        "桌子"\n'
+                '    ]\n'
+                '}\n'
+            ).encode()
+        )
diff -pruN 2.23.6-1/tests/unit/test_help.py 2.31.35-1/tests/unit/test_help.py
--- 2.23.6-1/tests/unit/test_help.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_help.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,20 +10,31 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest, skip_if_windows, FileCreator
-import signal
 import json
-import sys
 import os
+import signal
+import sys
 
-from awscli.help import PosixHelpRenderer, ExecutableNotFoundError
-from awscli.help import WindowsHelpRenderer, ProviderHelpCommand, HelpCommand
-from awscli.help import TopicListerCommand, TopicHelpCommand
+from awscli import (
+    _DEFAULT_BASE_REMOTE_URL,
+)
 from awscli.argparser import HELP_BLURB, ArgParseException
 from awscli.compat import StringIO
+from awscli.help import (
+    ExecutableNotFoundError,
+    HelpCommand,
+    PosixHelpRenderer,
+    PosixPagingHelpRenderer,
+    ProviderHelpCommand,
+    TopicHelpCommand,
+    TopicListerCommand,
+    WindowsHelpRenderer,
+    WindowsPagingHelpRenderer,
+)
+from awscli.testutils import FileCreator, mock, skip_if_windows, unittest
 
 
-class HelpSpyMixin(object):
+class HelpSpyMixin:
     def __init__(self):
         self.exists_on_path = {}
         self.popen_calls = []
@@ -50,7 +61,6 @@ class FakeWindowsHelpRenderer(HelpSpyMix
 
 
 class TestHelpPager(unittest.TestCase):
-
     def setUp(self):
         self.environ = {}
         self.environ_patch = mock.patch('os.environ', self.environ)
@@ -61,38 +71,34 @@ class TestHelpPager(unittest.TestCase):
         self.environ_patch.stop()
 
     def test_no_env_vars(self):
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         self.renderer.PAGER.split())
+        self.assertEqual(
+            self.renderer.get_pager_cmdline(), self.renderer.PAGER.split()
+        )
 
     def test_manpager(self):
         pager_cmd = 'foobar'
         os.environ['MANPAGER'] = pager_cmd
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         pager_cmd.split())
+        self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split())
 
     def test_pager(self):
         pager_cmd = 'fiebaz'
         os.environ['PAGER'] = pager_cmd
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         pager_cmd.split())
+        self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split())
 
     def test_both(self):
         os.environ['MANPAGER'] = 'foobar'
         os.environ['PAGER'] = 'fiebaz'
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         'foobar'.split())
+        self.assertEqual(self.renderer.get_pager_cmdline(), 'foobar'.split())
 
     def test_manpager_with_args(self):
         pager_cmd = 'less -X'
         os.environ['MANPAGER'] = pager_cmd
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         pager_cmd.split())
+        self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split())
 
     def test_pager_with_args(self):
         pager_cmd = 'less -X --clearscreen'
         os.environ['PAGER'] = pager_cmd
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         pager_cmd.split())
+        self.assertEqual(self.renderer.get_pager_cmdline(), pager_cmd.split())
 
     @skip_if_windows('Requires posix system.')
     def test_no_groff_or_mandoc_exists(self):
@@ -130,8 +136,10 @@ class TestHelpPager(unittest.TestCase):
     def test_shlex_split_for_pager_var(self):
         pager_cmd = '/bin/sh -c "col -bx | vim -c \'set ft=man\' -"'
         os.environ['PAGER'] = pager_cmd
-        self.assertEqual(self.renderer.get_pager_cmdline(),
-                         ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"])
+        self.assertEqual(
+            self.renderer.get_pager_cmdline(),
+            ['/bin/sh', '-c', "col -bx | vim -c 'set ft=man' -"],
+        )
 
     def test_can_render_contents(self):
         renderer = FakePosixHelpRenderer()
@@ -192,8 +200,9 @@ class TestHelpCommand(TestHelpCommandBas
     We do this by subclassing from HelpCommand and ensure it is behaving
     as expected.
     """
+
     def setUp(self):
-        super(TestHelpCommand, self).setUp()
+        super().setUp()
         self.doc_handler_mock = mock.Mock()
         self.subcommand_mock = mock.Mock()
         self.renderer = mock.Mock()
@@ -228,7 +237,7 @@ class TestHelpCommand(TestHelpCommandBas
 
 class TestProviderHelpCommand(TestHelpCommandBase):
     def setUp(self):
-        super(TestProviderHelpCommand, self).setUp()
+        super().setUp()
         self.session.provider = None
         self.command_table = {}
         self.arg_table = {}
@@ -237,24 +246,27 @@ class TestProviderHelpCommand(TestHelpCo
         self.usage = None
 
         # Create a temporary index file for ``aws help [command]`` to use.
-        self.tags_dict = {
-            'topic-name-1': {},
-            'topic-name-2': {}
-        }
+        self.tags_dict = {'topic-name-1': {}, 'topic-name-2': {}}
         json_index = self.file_creator.create_file('index.json', '')
         with open(json_index, 'w') as f:
             json.dump(self.tags_dict, f, indent=4, sort_keys=True)
         self.json_patch = mock.patch(
-            'awscli.topictags.TopicTagDB.index_file', json_index)
+            'awscli.topictags.TopicTagDB.index_file', json_index
+        )
         self.json_patch.start()
 
-        self.cmd = ProviderHelpCommand(self.session, self.command_table,
-                                       self.arg_table, self.description,
-                                       self.synopsis, self.usage)
+        self.cmd = ProviderHelpCommand(
+            self.session,
+            self.command_table,
+            self.arg_table,
+            self.description,
+            self.synopsis,
+            self.usage,
+        )
 
     def tearDown(self):
         self.json_patch.stop()
-        super(TestProviderHelpCommand, self).tearDown()
+        super().tearDown()
 
     def test_related_items(self):
         self.assertEqual(self.cmd.related_items, ['aws help topics'])
@@ -270,20 +282,25 @@ class TestProviderHelpCommand(TestHelpCo
 
         # Ensure the topics are there as well
         self.assertIn('topic-name-1', subcommand_table)
-        self.assertIsInstance(subcommand_table['topic-name-1'],
-                              TopicHelpCommand)
+        self.assertIsInstance(
+            subcommand_table['topic-name-1'], TopicHelpCommand
+        )
         self.assertEqual(subcommand_table['topic-name-1'].name, 'topic-name-1')
 
         self.assertIn('topic-name-2', subcommand_table)
-        self.assertIsInstance(subcommand_table['topic-name-2'],
-                              TopicHelpCommand)
-        self.assertEqual(subcommand_table['topic-name-2'].name,
-                         'topic-name-2')
+        self.assertIsInstance(
+            subcommand_table['topic-name-2'], TopicHelpCommand
+        )
+        self.assertEqual(subcommand_table['topic-name-2'].name, 'topic-name-2')
+
+    def test_url(self):
+        self.assertIn(_DEFAULT_BASE_REMOTE_URL, self.cmd.url)
+        self.assertIn("/index.html", self.cmd.url)
 
 
 class TestTopicListerCommand(TestHelpCommandBase):
     def setUp(self):
-        super(TestTopicListerCommand, self).setUp()
+        super().setUp()
         self.cmd = TopicListerCommand(self.session)
 
     def test_event_class(self):
@@ -295,7 +312,7 @@ class TestTopicListerCommand(TestHelpCom
 
 class TestTopicHelpCommand(TestHelpCommandBase):
     def setUp(self):
-        super(TestTopicHelpCommand, self).setUp()
+        super().setUp()
         self.name = 'topic-name-1'
         self.cmd = TopicHelpCommand(self.session, self.name)
 
@@ -304,3 +321,7 @@ class TestTopicHelpCommand(TestHelpComma
 
     def test_name(self):
         self.assertEqual(self.cmd.name, self.name)
+
+    def test_url(self):
+        self.assertIn(_DEFAULT_BASE_REMOTE_URL, self.cmd.url)
+        self.assertIn("/topic/topic-name-1.html", self.cmd.url)
diff -pruN 2.23.6-1/tests/unit/test_importfinder.py 2.31.35-1/tests/unit/test_importfinder.py
--- 2.23.6-1/tests/unit/test_importfinder.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_importfinder.py	2025-11-12 19:17:29.000000000 +0000
@@ -25,6 +25,7 @@ AWSCLI_ROOT_DIR = os.path.dirname(awscli
 def fake_builtin_path_finder():
     class PathFinder(type):
         __module__ = '_frozen_importlib_external'
+
     return PathFinder
 
 
@@ -32,6 +33,7 @@ def fake_builtin_path_finder():
 def fake_pyinstaller_finder():
     class PyiFrozenImporter:
         __module__ = 'pyimod02_importers'
+
     return PyiFrozenImporter()
 
 
@@ -52,7 +54,7 @@ class RecordingMetaPathFinder(importlib.
         ('awscli', None, None),
         ('awscli.utils', [AWSCLI_ROOT_DIR], [AWSCLI_ROOT_DIR]),
         ('logging', None, None),
-    ]
+    ],
 )
 def test_find_spec(fullname, provided_path, expected_path):
     underlying_finder = RecordingMetaPathFinder()
@@ -66,13 +68,17 @@ def test_find_spec(fullname, provided_pa
 def test_add_alias_finder_wraps_builtin_finder(fake_builtin_path_finder):
     sys_meta = [fake_builtin_path_finder]
     TopLevelImportAliasFinder.add_alias_finder(sys_meta)
-    _assert_classes(sys_meta, [TopLevelImportAliasFinder])
+    _assert_classes(
+        sys_meta, [TopLevelImportAliasFinder, type(fake_builtin_path_finder)]
+    )
 
 
 def test_add_alias_finder_wraps_pyinstaller_finder(fake_pyinstaller_finder):
     sys_meta = [fake_pyinstaller_finder]
     TopLevelImportAliasFinder.add_alias_finder(sys_meta)
-    _assert_classes(sys_meta, [TopLevelImportAliasFinder])
+    _assert_classes(
+        sys_meta, [TopLevelImportAliasFinder, type(fake_pyinstaller_finder)]
+    )
 
 
 def test_add_alias_finder_does_not_wrap_other_finders():
@@ -83,11 +89,12 @@ def test_add_alias_finder_does_not_wrap_
 
 
 def test_add_alias_finder_wraps_only_first_matching_finder(
-        fake_pyinstaller_finder):
+    fake_pyinstaller_finder,
+):
     sys_meta = [
         RecordingMetaPathFinder(),
         fake_pyinstaller_finder,
-        fake_pyinstaller_finder
+        fake_pyinstaller_finder,
     ]
     TopLevelImportAliasFinder.add_alias_finder(sys_meta)
     _assert_classes(
@@ -96,7 +103,8 @@ def test_add_alias_finder_wraps_only_fir
             RecordingMetaPathFinder,
             TopLevelImportAliasFinder,
             fake_pyinstaller_finder.__class__,
-        ]
+            fake_pyinstaller_finder.__class__,
+        ],
     )
 
 
diff -pruN 2.23.6-1/tests/unit/test_logger.py 2.31.35-1/tests/unit/test_logger.py
--- 2.23.6-1/tests/unit/test_logger.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_logger.py	2025-11-12 19:17:29.000000000 +0000
@@ -15,26 +15,30 @@ import logging
 import awscrt.io
 
 from awscli.logger import (
-    set_stream_logger, remove_stream_logger, enable_crt_logging,
     disable_crt_logging,
+    enable_crt_logging,
+    remove_stream_logger,
+    set_stream_logger,
 )
-from awscli.testutils import unittest, mock
+from awscli.testutils import mock, unittest
 
 
 class TestLogger(unittest.TestCase):
     def test_can_set_stream_handler(self):
         set_stream_logger('test_stream_logger', logging.DEBUG)
         log = logging.getLogger('test_stream_logger')
-        self.assertEqual(log.handlers[0].name,
-                         'test_stream_logger_stream_handler')
+        self.assertEqual(
+            log.handlers[0].name, 'test_stream_logger_stream_handler'
+        )
 
     def test_keeps_only_one_stream_handler(self):
         set_stream_logger('test_stream_logger', logging.DEBUG)
         set_stream_logger('test_stream_logger', logging.ERROR)
         log = logging.getLogger('test_stream_logger')
         self.assertEqual(len(log.handlers), 1)
-        self.assertEqual(log.handlers[0].name,
-                         'test_stream_logger_stream_handler')
+        self.assertEqual(
+            log.handlers[0].name, 'test_stream_logger_stream_handler'
+        )
         self.assertEqual(log.handlers[0].level, logging.ERROR)
 
     def test_can_remove_stream_handler(self):
@@ -43,16 +47,16 @@ class TestLogger(unittest.TestCase):
         log = logging.getLogger('test_stream_logger')
         self.assertEqual(len(log.handlers), 0)
 
-    @mock.patch('awscrt.io.init_logging')
+    @mock.patch('awscrt.io.set_log_level')
     def test_can_enable_crt_logging(self, mock_init_logging):
         enable_crt_logging()
         mock_init_logging.assert_called_with(
-            awscrt.io.LogLevel.Debug, 'stderr'
+            awscrt.io.LogLevel.Debug,
         )
 
-    @mock.patch('awscrt.io.init_logging')
+    @mock.patch('awscrt.io.set_log_level')
     def test_can_disable_crt_logging(self, mock_init_logging):
         disable_crt_logging()
         mock_init_logging.assert_called_with(
-            awscrt.io.LogLevel.NoLogs, 'stderr'
+            awscrt.io.LogLevel.NoLogs,
         )
diff -pruN 2.23.6-1/tests/unit/test_paramfile.py 2.31.35-1/tests/unit/test_paramfile.py
--- 2.23.6-1/tests/unit/test_paramfile.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_paramfile.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,12 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import mock, unittest, FileCreator
-from awscli.testutils import skip_if_windows
-
-from awscli.paramfile import get_paramfile, ResourceLoadingError, LOCAL_PREFIX_MAP, register_uri_param_handler
 from botocore.session import Session
 
+from awscli.paramfile import (
+    LOCAL_PREFIX_MAP,
+    ResourceLoadingError,
+    get_paramfile,
+    register_uri_param_handler,
+)
+from awscli.testutils import FileCreator, mock, skip_if_windows, unittest
+
 
 class TestParamFile(unittest.TestCase):
     def setUp(self):
@@ -43,8 +47,9 @@ class TestParamFile(unittest.TestCase):
         self.assertEqual(data, b'This is a test')
         self.assertIsInstance(data, bytes)
 
-    @skip_if_windows('Binary content error only occurs '
-                     'on non-Windows platforms.')
+    @skip_if_windows(
+        'Binary content error only occurs ' 'on non-Windows platforms.'
+    )
     def test_cannot_load_text_file(self):
         contents = b'\xbfX\xac\xbe'
         filename = self.files.create_file('foo', contents, mode='wb')
@@ -64,7 +69,6 @@ class TestParamFile(unittest.TestCase):
 
 
 class TestConfigureURIArgumentHandler(unittest.TestCase):
-
     @mock.patch('awscli.paramfile.URIArgumentHandler')
     def test_default_prefix_maps(self, mock_handler_cls):
         session = mock.Mock(spec=Session)
diff -pruN 2.23.6-1/tests/unit/test_plugin.py 2.31.35-1/tests/unit/test_plugin.py
--- 2.23.6-1/tests/unit/test_plugin.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_plugin.py	2025-11-12 19:17:29.000000000 +0000
@@ -11,13 +11,14 @@
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
 import sys
-from awscli.testutils import mock, unittest
 
-from awscli import plugin
 from botocore import hooks
 
+from awscli import plugin
+from awscli.testutils import mock, unittest
+
 
-class FakeModule(object):
+class FakeModule:
     def __init__(self):
         self.called = False
         self.context = None
@@ -28,17 +29,17 @@ class FakeModule(object):
         self.context = context
         self.context.register(
             'before_operation',
-            (lambda **kwargs: self.events_seen.append(kwargs)))
+            (lambda **kwargs: self.events_seen.append(kwargs)),
+        )
 
 
 class TestPlugins(unittest.TestCase):
-
     def setUp(self):
         self.fake_module = FakeModule()
         sys.modules['__fake_plugin__'] = self.fake_module
         self.plugin_mapping = {
             'cli_legacy_plugin_path': 'fake-path',
-            'fake_plugin': '__fake_plugin__'
+            'fake_plugin': '__fake_plugin__',
         }
 
     def tearDown(self):
@@ -48,8 +49,9 @@ class TestPlugins(unittest.TestCase):
         emitter = plugin.load_plugins(self.plugin_mapping)
         self.assertTrue(self.fake_module.called)
         self.assertTrue(isinstance(emitter, hooks.HierarchicalEmitter))
-        self.assertTrue(isinstance(self.fake_module.context,
-                                   hooks.HierarchicalEmitter))
+        self.assertTrue(
+            isinstance(self.fake_module.context, hooks.HierarchicalEmitter)
+        )
 
     def test_event_hooks_can_be_passed_in(self):
         hooks = plugin.HierarchicalEmitter()
@@ -72,7 +74,7 @@ class TestPluginCanBePackage(unittest.Te
         sys.modules['__fake_plugin__.__fake__.bar'] = self.fake_module
         self.plugin_mapping = {
             'cli_legacy_plugin_path': 'fake-path',
-            'fake_plugin': '__fake_plugin__.__fake__.bar'
+            'fake_plugin': '__fake_plugin__.__fake__.bar',
         }
 
     def tearDown(self):
@@ -82,7 +84,7 @@ class TestPluginCanBePackage(unittest.Te
         plugin.load_plugins(
             {
                 'cli_legacy_plugin_path': 'fake-path',
-                'fake_plugin': '__fake_plugin__.__fake__.bar'
+                'fake_plugin': '__fake_plugin__.__fake__.bar',
             }
         )
         self.assertTrue(self.fake_module.called)
diff -pruN 2.23.6-1/tests/unit/test_schema.py 2.31.35-1/tests/unit/test_schema.py
--- 2.23.6-1/tests/unit/test_schema.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_schema.py	2025-11-12 19:17:29.000000000 +0000
@@ -14,23 +14,20 @@ import pprint
 
 from botocore.compat import OrderedDict
 
+from awscli.schema import (
+    ParameterRequiredError,
+    SchemaTransformer,
+    ShapeNameGenerator,
+)
 from awscli.testutils import unittest
-from awscli.schema import ParameterRequiredError, SchemaTransformer
-from awscli.schema import ShapeNameGenerator
-
 
 MISSING_TYPE = {
     "type": "object",
-    "properties": {
-        "Foo": {
-            "description": "I am a foo"
-        }
-    }
+    "properties": {"Foo": {"description": "I am a foo"}},
 }
 
 
 class TestSchemaTransformer(unittest.TestCase):
-
     maxDiff = None
 
     def test_missing_top_level_type_raises_exception(self):
@@ -42,35 +39,31 @@ class TestSchemaTransformer(unittest.Tes
         transformer = SchemaTransformer()
 
         with self.assertRaises(ParameterRequiredError):
-            transformer.transform({
-                'type': 'object',
-                'properties': {
-                    'Foo': {
-                        'description': 'foo',
-                    }
+            transformer.transform(
+                {
+                    'type': 'object',
+                    'properties': {
+                        'Foo': {
+                            'description': 'foo',
+                        }
+                    },
                 }
-            })
+            )
 
     def assert_schema_transforms_to(self, schema, transforms_to):
         transformer = SchemaTransformer()
         actual = transformer.transform(schema)
         if actual != transforms_to:
-            self.fail("Transform failed.\n\nExpected:\n%s\n\nActual:\n%s\n" % (
-                pprint.pformat(transforms_to), pprint.pformat(actual)))
+            self.fail(
+                "Transform failed.\n\nExpected:\n%s\n\nActual:\n%s\n"
+                % (pprint.pformat(transforms_to), pprint.pformat(actual))
+            )
 
     def test_transforms_list_of_single_string(self):
-        schema = {
-            'type': 'array',
-            'items': {
-                'type': 'string'
-            }
-        }
+        schema = {'type': 'array', 'items': {'type': 'string'}}
         transforms_to = {
-            'InputShape': {
-                'type': 'list',
-                'member': {'shape': 'StringType1'}
-            },
-            'StringType1': {'type': 'string'}
+            'InputShape': {'type': 'list', 'member': {'shape': 'StringType1'}},
+            'StringType1': {'type': 'string'},
         }
         self.assert_schema_transforms_to(schema, transforms_to)
 
@@ -85,16 +78,14 @@ class TestSchemaTransformer(unittest.Tes
                     },
                     "arg2": {
                         "type": "integer",
-                    }
-                }
-            }
+                    },
+                },
+            },
         }
         transforms_to = {
             'InputShape': {
                 'type': 'list',
-                'member': {
-                    'shape': 'StructureType1'
-                }
+                'member': {'shape': 'StructureType1'},
             },
             'StructureType1': {
                 'type': 'structure',
@@ -105,7 +96,7 @@ class TestSchemaTransformer(unittest.Tes
                     'arg2': {
                         'shape': 'IntegerType1',
                     },
-                }
+                },
             },
             'StringType1': {'type': 'string'},
             'IntegerType1': {'type': 'integer'},
@@ -117,42 +108,32 @@ class TestSchemaTransformer(unittest.Tes
 
     def test_transforms_string(self):
         self.assert_schema_transforms_to(
-            schema={
-                'type': 'string'
-            },
-            transforms_to={
-                'InputShape': {'type': 'string'}
-            }
+            schema={'type': 'string'},
+            transforms_to={'InputShape': {'type': 'string'}},
         )
 
     def test_transforms_boolean(self):
         self.assert_schema_transforms_to(
-            schema={
-                'type': 'boolean'
-            },
-            transforms_to={
-                'InputShape': {'type': 'boolean'}
-            }
+            schema={'type': 'boolean'},
+            transforms_to={'InputShape': {'type': 'boolean'}},
         )
 
     def test_transforms_integer(self):
         self.assert_schema_transforms_to(
-            schema={
-                'type': 'integer'
-            },
-            transforms_to={
-                'InputShape': {'type': 'integer'}
-            }
+            schema={'type': 'integer'},
+            transforms_to={'InputShape': {'type': 'integer'}},
         )
 
     def test_transforms_structure(self):
         self.assert_schema_transforms_to(
             schema={
                 "type": "object",
-                "properties": OrderedDict([
-                    ("A", {"type": "string"}),
-                    ("B", {"type": "string"}),
-                ]),
+                "properties": OrderedDict(
+                    [
+                        ("A", {"type": "string"}),
+                        ("B", {"type": "string"}),
+                    ]
+                ),
             },
             transforms_to={
                 'InputShape': {
@@ -160,11 +141,11 @@ class TestSchemaTransformer(unittest.Tes
                     'members': {
                         'A': {'shape': 'StringType1'},
                         'B': {'shape': 'StringType2'},
-                    }
+                    },
                 },
                 'StringType1': {'type': 'string'},
                 'StringType2': {'type': 'string'},
-            }
+            },
         )
 
     def test_transforms_map(self):
@@ -172,31 +153,28 @@ class TestSchemaTransformer(unittest.Tes
             schema={
                 "type": "map",
                 "key": {"type": "string"},
-                "value": {"type": "string"}
+                "value": {"type": "string"},
             },
             transforms_to={
                 'InputShape': {
                     "type": "map",
                     "key": {"shape": "StringType1"},
-                    "value": {"shape": "StringType2"}
+                    "value": {"shape": "StringType2"},
                 },
                 'StringType1': {'type': 'string'},
                 'StringType2': {'type': 'string'},
-            }
+            },
         )
 
     def test_description_on_shape_type(self):
         self.assert_schema_transforms_to(
-            schema={
-                'type': 'string',
-                'description': 'a description'
-            },
+            schema={'type': 'string', 'description': 'a description'},
             transforms_to={
                 'InputShape': {
                     'type': 'string',
-                    'documentation': 'a description'
+                    'documentation': 'a description',
                 }
-            }
+            },
         )
 
     def test_enum_on_shape_type(self):
@@ -206,11 +184,8 @@ class TestSchemaTransformer(unittest.Tes
                 'enum': ['a', 'b'],
             },
             transforms_to={
-                'InputShape': {
-                    'type': 'string',
-                    'enum': ['a', 'b']
-                }
-            }
+                'InputShape': {'type': 'string', 'enum': ['a', 'b']}
+            },
         )
 
     def test_description_on_shape_ref(self):
@@ -223,7 +198,7 @@ class TestSchemaTransformer(unittest.Tes
                         'type': 'string',
                         'description': 'string description',
                     },
-                }
+                },
             },
             transforms_to={
                 'InputShape': {
@@ -231,13 +206,13 @@ class TestSchemaTransformer(unittest.Tes
                     'documentation': 'object description',
                     'members': {
                         'A': {'shape': 'StringType1'},
-                    }
+                    },
                 },
                 'StringType1': {
                     'documentation': 'string description',
-                    'type': 'string'
-                }
-            }
+                    'type': 'string',
+                },
+            },
         )
 
     def test_required_members_on_structure(self):
@@ -250,7 +225,7 @@ class TestSchemaTransformer(unittest.Tes
                 'type': 'object',
                 'properties': {
                     'A': {'type': 'string', 'required': True},
-                }
+                },
             },
             transforms_to={
                 'InputShape': {
@@ -259,10 +234,10 @@ class TestSchemaTransformer(unittest.Tes
                     'required': ['A'],
                     'members': {
                         'A': {'shape': 'StringType1'},
-                    }
+                    },
                 },
                 'StringType1': {'type': 'string'},
-            }
+            },
         )
 
     def test_nested_structure(self):
@@ -275,37 +250,31 @@ class TestSchemaTransformer(unittest.Tes
                         'properties': {
                             'B': {
                                 'type': 'object',
-                                'properties': {
-                                    'C': {'type': 'string'}
-                                }
+                                'properties': {'C': {'type': 'string'}},
                             }
-                        }
+                        },
                     },
-                }
+                },
             },
             transforms_to={
                 'InputShape': {
                     'type': 'structure',
                     'members': {
                         'A': {'shape': 'StructureType1'},
-                    }
+                    },
                 },
                 'StructureType1': {
                     'type': 'structure',
-                    'members': {
-                        'B': {'shape': 'StructureType2'}
-                    }
+                    'members': {'B': {'shape': 'StructureType2'}},
                 },
                 'StructureType2': {
                     'type': 'structure',
-                    'members': {
-                        'C': {'shape': 'StringType1'}
-                    }
+                    'members': {'C': {'shape': 'StringType1'}},
                 },
                 'StringType1': {
                     'type': 'string',
-                }
-            }
+                },
+            },
         )
 
 
diff -pruN 2.23.6-1/tests/unit/test_shorthand.py 2.31.35-1/tests/unit/test_shorthand.py
--- 2.23.6-1/tests/unit/test_shorthand.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_shorthand.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,17 +10,16 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
+import signal
 from unittest.mock import patch
 
 import pytest
-import signal
+from botocore import model
 
 import awscli.paramfile
 from awscli import shorthand
 from awscli.testutils import skip_if_windows, unittest
 
-from botocore import model
-
 PARSING_TEST_CASES = (
     # Key val pairs with scalar value.
     ('foo=bar', {'foo': 'bar'}),
@@ -31,8 +30,8 @@ PARSING_TEST_CASES = (
     ('foo=', {'foo': ''}),
     ('foo=,bar=', {'foo': '', 'bar': ''}),
     # Unicode is allowed.
-    (u'foo=\u2713', {'foo': u'\u2713'}),
-    (u'foo=\u2713,\u2713', {'foo': [u'\u2713', u'\u2713']}),
+    ('foo=\u2713', {'foo': '\u2713'}),
+    ('foo=\u2713,\u2713', {'foo': ['\u2713', '\u2713']}),
     # Key val pairs with csv values.
     ('foo=a,b', {'foo': ['a', 'b']}),
     ('foo=a,b,c', {'foo': ['a', 'b', 'c']}),
@@ -41,11 +40,14 @@ PARSING_TEST_CASES = (
     # Spaces in values are allowed.
     ('foo=a,b=with space', {'foo': 'a', 'b': 'with space'}),
     # Trailing spaces are still ignored.
-    ('foo=a,b=with trailing space  ', {'foo': 'a', 'b': 'with trailing space'}),
+    (
+        'foo=a,b=with trailing space  ',
+        {'foo': 'a', 'b': 'with trailing space'},
+    ),
     ('foo=first space', {'foo': 'first space'}),
     (
         'foo=a space,bar=a space,baz=a space',
-        {'foo': 'a space', 'bar': 'a space', 'baz': 'a space'}
+        {'foo': 'a space', 'bar': 'a space', 'baz': 'a space'},
     ),
     # Dashes are allowed in key names.
     ('with-dash=bar', {'with-dash': 'bar'}),
@@ -58,7 +60,10 @@ PARSING_TEST_CASES = (
     # Forward slashes are allowed in keys.
     ('some/thing=value', {'some/thing': 'value'}),
     # Colon chars are allowed in keys:
-    ('aws:service:region:124:foo/bar=baz', {'aws:service:region:124:foo/bar': 'baz'}),
+    (
+        'aws:service:region:124:foo/bar=baz',
+        {'aws:service:region:124:foo/bar': 'baz'},
+    ),
     # Explicit lists.
     ('foo=[]', {'foo': []}),
     ('foo=[a]', {'foo': ['a']}),
@@ -111,48 +116,70 @@ PARSING_TEST_CASES = (
     ('a = b,  c = d , e = f', {'a': 'b', 'c': 'd', 'e': 'f'}),
     ('foo = ', {'foo': ''}),
     ('a=b,c=  d,  e,  f', {'a': 'b', 'c': ['d', 'e', 'f']}),
-    ('Name=foo,Values=  a  ,  b  ,  c  ', {'Name': 'foo', 'Values': ['a', 'b', 'c']}),
-    ('Name=foo,Values= a,  b  ,  c', {'Name': 'foo', 'Values': ['a', 'b', 'c']}),
+    (
+        'Name=foo,Values=  a  ,  b  ,  c  ',
+        {'Name': 'foo', 'Values': ['a', 'b', 'c']},
+    ),
+    (
+        'Name=foo,Values= a,  b  ,  c',
+        {'Name': 'foo', 'Values': ['a', 'b', 'c']},
+    ),
     # Can handle newlines between values.
     ('Name=foo,\nValues=a,b,c', {'Name': 'foo', 'Values': ['a', 'b', 'c']}),
     ('A=b,\nC=d,\nE=f\n', {'A': 'b', 'C': 'd', 'E': 'f'}),
     # Hashes
     ('Name={foo=bar,baz=qux}', {'Name': {'foo': 'bar', 'baz': 'qux'}}),
-    ('Name={foo=[a,b,c],bar=baz}', {'Name': {'foo': ['a', 'b', 'c'], 'bar': 'baz'}}),
+    (
+        'Name={foo=[a,b,c],bar=baz}',
+        {'Name': {'foo': ['a', 'b', 'c'], 'bar': 'baz'}},
+    ),
     ('Name={foo=bar},Bar=baz', {'Name': {'foo': 'bar'}, 'Bar': 'baz'}),
     ('Bar=baz,Name={foo=bar}', {'Bar': 'baz', 'Name': {'foo': 'bar'}}),
     ('a={b={c=d}}', {'a': {'b': {'c': 'd'}}}),
     ('a={b={c=d,e=f},g=h}', {'a': {'b': {'c': 'd', 'e': 'f'}, 'g': 'h'}}),
     # Combining lists and hashes.
-    ('Name=[{foo=bar}, {baz=qux}]', {'Name': [{'foo': 'bar'}, {'baz': 'qux'}]}),
+    (
+        'Name=[{foo=bar}, {baz=qux}]',
+        {'Name': [{'foo': 'bar'}, {'baz': 'qux'}]},
+    ),
     # Combining hashes and lists.
     (
         'Name=[{foo=[a,b]}, {bar=[c,d]}]',
-        {'Name': [{'foo': ['a', 'b']}, {'bar': ['c', 'd']}]}
+        {'Name': [{'foo': ['a', 'b']}, {'bar': ['c', 'd']}]},
     ),
     # key-value pairs using @= syntax
     ('foo@=bar', {'foo': 'bar'}),
     ('foo@=bar,baz@=qux', {'foo': 'bar', 'baz': 'qux'}),
     ('foo@=,bar@=', {'foo': '', 'bar': ''}),
-    (u'foo@=\u2713,\u2713', {'foo': [u'\u2713', u'\u2713']}),
+    ('foo@=\u2713,\u2713', {'foo': ['\u2713', '\u2713']}),
     ('foo@=a,b,bar=c,d', {'foo': ['a', 'b'], 'bar': ['c', 'd']}),
     ('foo=a,b@=with space', {'foo': 'a', 'b': 'with space'}),
-    ('foo=a,b@=with trailing space  ', {'foo': 'a', 'b': 'with trailing space'}),
-    ('aws:service:region:124:foo/bar@=baz', {'aws:service:region:124:foo/bar': 'baz'}),
+    (
+        'foo=a,b@=with trailing space  ',
+        {'foo': 'a', 'b': 'with trailing space'},
+    ),
+    (
+        'aws:service:region:124:foo/bar@=baz',
+        {'aws:service:region:124:foo/bar': 'baz'},
+    ),
     ('foo=[a,b],bar@=[c,d]', {'foo': ['a', 'b'], 'bar': ['c', 'd']}),
     ('foo  @=  [ a , b  , c  ]', {'foo': ['a', 'b', 'c']}),
     ('A=b,\nC@=d,\nE@=f\n', {'A': 'b', 'C': 'd', 'E': 'f'}),
     ('Bar@=baz,Name={foo@=bar}', {'Bar': 'baz', 'Name': {'foo': 'bar'}}),
-    ('Name=[{foo@=bar}, {baz=qux}]', {'Name': [{'foo': 'bar'}, {'baz': 'qux'}]}),
+    (
+        'Name=[{foo@=bar}, {baz=qux}]',
+        {'Name': [{'foo': 'bar'}, {'baz': 'qux'}]},
+    ),
     (
         'Name=[{foo@=[a,b]}, {bar=[c,d]}]',
-        {'Name': [{'foo': ['a', 'b']}, {'bar': ['c', 'd']}]}
+        {'Name': [{'foo': ['a', 'b']}, {'bar': ['c', 'd']}]},
     ),
 )
 
 
 @pytest.mark.parametrize(
-    "expr", (
+    "expr",
+    (
         'foo',
         # Missing closing quotes
         'foo="bar',
@@ -166,8 +193,8 @@ PARSING_TEST_CASES = (
         "foo==bar,\nbar=baz",
         # Duplicate keys should error otherwise they silently
         # set only one of the values.
-        'foo=bar,foo=qux'
-    )
+        'foo=bar,foo=qux',
+    ),
 )
 def test_error_parsing(expr):
     with pytest.raises(shorthand.ShorthandParseError):
@@ -175,12 +202,13 @@ def test_error_parsing(expr):
 
 
 @pytest.mark.parametrize(
-    "expr", (
+    "expr",
+    (
         # starting with " but unclosed, then repeated \
-        f'foo="' + '\\' * 100,
+        'foo="' + '\\' * 100,
         # starting with ' but unclosed, then repeated \
-        f'foo=\'' + '\\' * 100,
-    )
+        'foo=\'' + '\\' * 100,
+    ),
 )
 @skip_if_windows("Windows does not support signal.SIGALRM.")
 def test_error_with_backtracking(expr):
@@ -196,24 +224,44 @@ def handle_timeout(signum, frame):
     raise TimeoutError('Shorthand parsing timed out')
 
 
-@pytest.mark.parametrize(
-    'data, expected',
-    PARSING_TEST_CASES
-)
+@pytest.mark.parametrize('data, expected', PARSING_TEST_CASES)
 def test_parse(data, expected):
     actual = shorthand.ShorthandParser().parse(data)
     assert actual == expected
 
+
 class TestShorthandParserParamFile:
     @patch('awscli.paramfile.compat_open')
     @pytest.mark.parametrize(
         'file_contents, data, expected',
         (
-            ('file-contents123', 'Foo@=file://foo,Bar={Baz@=file://foo}', {'Foo': 'file-contents123', 'Bar': {'Baz': 'file-contents123'}}),
-            (b'file-contents123', 'Foo@=fileb://foo,Bar={Baz@=fileb://foo}', {'Foo': b'file-contents123', 'Bar': {'Baz': b'file-contents123'}}),
-            ('file-contents123', 'Bar@={Baz=file://foo}', {'Bar': {'Baz': 'file://foo'}}),
-            ('file-contents123', 'Foo@=foo,Bar={Baz@=foo}', {'Foo': 'foo', 'Bar': {'Baz': 'foo'}})
-        )
+            (
+                'file-contents123',
+                'Foo@=file://foo,Bar={Baz@=file://foo}',
+                {
+                    'Foo': 'file-contents123',
+                    'Bar': {'Baz': 'file-contents123'},
+                },
+            ),
+            (
+                b'file-contents123',
+                'Foo@=fileb://foo,Bar={Baz@=fileb://foo}',
+                {
+                    'Foo': b'file-contents123',
+                    'Bar': {'Baz': b'file-contents123'},
+                },
+            ),
+            (
+                'file-contents123',
+                'Bar@={Baz=file://foo}',
+                {'Bar': {'Baz': 'file://foo'}},
+            ),
+            (
+                'file-contents123',
+                'Foo@=foo,Bar={Baz@=foo}',
+                {'Foo': 'foo', 'Bar': {'Baz': 'foo'}},
+            ),
+        ),
     )
     def test_paramfile(self, mock_compat_open, file_contents, data, expected):
         mock_compat_open.return_value.__enter__.return_value.read.return_value = file_contents
@@ -224,9 +272,12 @@ class TestShorthandParserParamFile:
     def test_paramfile_list(self, mock_compat_open):
         f1_contents = 'file-contents123'
         f2_contents = 'contents2'
-        mock_compat_open.return_value.__enter__.return_value.read.side_effect = [f1_contents, f2_contents]
+        mock_compat_open.return_value.__enter__.return_value.read.side_effect = [
+            f1_contents,
+            f2_contents,
+        ]
         result = shorthand.ShorthandParser().parse(
-            f'Foo@=[a, file://foo1, file://foo2]'
+            'Foo@=[a, file://foo1, file://foo2]'
         )
         assert result == {'Foo': ['a', f1_contents, f2_contents]}
 
@@ -239,12 +290,15 @@ class TestShorthandParserParamFile:
 
 class TestModelVisitor(unittest.TestCase):
     def test_promote_to_list_of_ints(self):
-        m = model.DenormalizedStructureBuilder().with_members({
-            'A': {
-                'type': 'list',
-                'member': {'type': 'string'}
-            },
-        }).build_model()
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'A': {'type': 'list', 'member': {'type': 'string'}},
+                }
+            )
+            .build_model()
+        )
         b = shorthand.BackCompatVisitor()
 
         params = {'A': 'foo'}
@@ -252,44 +306,71 @@ class TestModelVisitor(unittest.TestCase
         self.assertEqual(params, {'A': ['foo']})
 
     def test_dont_promote_list_if_none_value(self):
-        m = model.DenormalizedStructureBuilder().with_members({
-            'A': {
-                'type': 'list',
-                'member': {
-                    'type': 'structure',
-                    'members': {
-                        'Single': {'type': 'string'}
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'A': {
+                        'type': 'list',
+                        'member': {
+                            'type': 'structure',
+                            'members': {'Single': {'type': 'string'}},
+                        },
                     },
-                },
-            },
-        }).build_model()
+                }
+            )
+            .build_model()
+        )
         b = shorthand.BackCompatVisitor()
         params = {}
         b.visit(params, m)
         self.assertEqual(params, {})
 
     def test_can_convert_scalar_types_from_string(self):
-        m = model.DenormalizedStructureBuilder().with_members({
-            'A': {'type': 'integer'},
-            'B': {'type': 'string'},
-            'C': {'type': 'float'},
-            'D': {'type': 'boolean'},
-            'E': {'type': 'boolean'},
-        }).build_model()
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'A': {'type': 'integer'},
+                    'B': {'type': 'string'},
+                    'C': {'type': 'float'},
+                    'D': {'type': 'boolean'},
+                    'E': {'type': 'boolean'},
+                }
+            )
+            .build_model()
+        )
         b = shorthand.BackCompatVisitor()
 
-        params = {'A': '24', 'B': '24', 'C': '24.12345',
-                  'D': 'true', 'E': 'false'}
+        params = {
+            'A': '24',
+            'B': '24',
+            'C': '24.12345',
+            'D': 'true',
+            'E': 'false',
+        }
         b.visit(params, m)
         self.assertEqual(
             params,
-            {'A': 24, 'B': '24', 'C': float('24.12345'),
-             'D': True, 'E': False})
+            {
+                'A': 24,
+                'B': '24',
+                'C': float('24.12345'),
+                'D': True,
+                'E': False,
+            },
+        )
 
     def test_empty_values_not_added(self):
-        m = model.DenormalizedStructureBuilder().with_members({
-            'A': {'type': 'boolean'},
-        }).build_model()
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'A': {'type': 'boolean'},
+                }
+            )
+            .build_model()
+        )
         b = shorthand.BackCompatVisitor()
 
         params = {}
@@ -297,14 +378,20 @@ class TestModelVisitor(unittest.TestCase
         self.assertEqual(params, {})
 
     def test_can_convert_list_of_integers(self):
-        m = model.DenormalizedStructureBuilder().with_members({
-            'A': {
-                'type': 'list',
-                'member': {
-                    'type': 'integer',
-                },
-            },
-        }).build_model()
+        m = (
+            model.DenormalizedStructureBuilder()
+            .with_members(
+                {
+                    'A': {
+                        'type': 'list',
+                        'member': {
+                            'type': 'integer',
+                        },
+                    },
+                }
+            )
+            .build_model()
+        )
         b = shorthand.BackCompatVisitor()
         params = {'A': ['1', '2']}
         b.visit(params, m)
diff -pruN 2.23.6-1/tests/unit/test_table.py 2.31.35-1/tests/unit/test_table.py
--- 2.23.6-1/tests/unit/test_table.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_table.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,7 +21,7 @@
 #
 import unittest
 
-from awscli.table import Section, MultiTable, convert_to_vertical_table
+from awscli.table import MultiTable, Section, convert_to_vertical_table
 
 
 class TestSection(unittest.TestCase):
@@ -49,8 +49,9 @@ class TestSection(unittest.TestCase):
         self.assertEqual(self.section.total_width(), 21)
         self.section.add_row(['aaa', '123456789', 'aaa'])
         self.assertEqual(self.section.calculate_column_widths(), [9, 9, 7])
-        self.assertEqual(self.section.total_width(padding=3, with_border=True),
-                         36)
+        self.assertEqual(
+            self.section.total_width(padding=3, with_border=True), 36
+        )
 
     def test_max_width_with_scaling_perfect_scaling(self):
         self.section.add_row(['one', 'two', 'three'])
@@ -66,7 +67,7 @@ class TestSection(unittest.TestCase):
         self.assertEqual(widths, [13, 14, 14])
 
     def test_width_with_full_width_characters(self):
-        self.section.add_row([u'\u4e00', u'one'])
+        self.section.add_row(['\u4e00', 'one'])
         self.assertEqual(self.section.calculate_column_widths(), [2, 3])
 
     def test_max_width_scaling_is_negative(self):
@@ -79,21 +80,21 @@ class TestSection(unittest.TestCase):
         self.section.add_row(['1234567', '1234567', '1234567'])
         self.assertEqual(self.section.total_width(padding=2), 27)
         self.assertEqual(
-            self.section.total_width(padding=2, outer_padding=1), 29)
+            self.section.total_width(padding=2, outer_padding=1), 29
+        )
 
     def test_title_accounts_for_outer_padding(self):
         self.section.add_row(['a', 'b', 'c'])
         self.section.add_title('123456789')
         self.assertEqual(
-            self.section.total_width(padding=2, outer_padding=3), 17)
+            self.section.total_width(padding=2, outer_padding=3), 17
+        )
 
     def test_unicode_text_row(self):
         self.section.add_row([1])
         self.section.add_row(['check'])
-        self.section.add_row([u'\u2713'])
-        self.assertEqual(
-            self.section.rows,
-            [[u'1'], [u'check'], [u'\u2713']])
+        self.section.add_row(['\u2713'])
+        self.assertEqual(self.section.rows, [['1'], ['check'], ['\u2713']])
 
 
 class TestMultiTable(unittest.TestCase):
@@ -124,7 +125,8 @@ class TestVerticalTableConversion(unitte
         # Then we should create a two column row with key val pairs.
         self.assertEqual(
             section.rows,
-            [['key1', 'val1'], ['key2', 'val2'], ['key3', 'val3']])
+            [['key1', 'val1'], ['key2', 'val2'], ['key3', 'val3']],
+        )
 
 
 if __name__ == '__main__':
diff -pruN 2.23.6-1/tests/unit/test_testutils.py 2.31.35-1/tests/unit/test_testutils.py
--- 2.23.6-1/tests/unit/test_testutils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_testutils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,7 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-from awscli.testutils import create_bucket, mock
-from awscli.testutils import BaseCLIDriverTest
+from awscli.testutils import BaseCLIDriverTest, create_bucket, mock
 
 
 class TestCreateBucket(BaseCLIDriverTest):
@@ -21,7 +20,8 @@ class TestCreateBucket(BaseCLIDriverTest
             _send.side_effect = [
                 mock.Mock(status_code=500, headers={}, content=b''),
                 mock.Mock(
-                    status_code=409, headers={},
+                    status_code=409,
+                    headers={},
                     content=b'''<?xml version="1.0" encoding="UTF-8"?>
                         <Error>
                         <Code>BucketAlreadyOwnedByYou</Code>
@@ -30,7 +30,8 @@ class TestCreateBucket(BaseCLIDriverTest
                         <BucketName>awscli-foo-bar</BucketName>
                         <RequestId>0123456789ABCDEF</RequestId>
                         <HostId>foo</HostId>
-                        </Error>'''),
+                        </Error>''',
+                ),
                 mock.Mock(status_code=200, headers={}, content=b''),
-                ]
+            ]
             self.assertEqual(create_bucket(self.session, 'bucket'), 'bucket')
diff -pruN 2.23.6-1/tests/unit/test_text.py 2.31.35-1/tests/unit/test_text.py
--- 2.23.6-1/tests/unit/test_text.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_text.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,10 +21,9 @@
 #
 import sys
 
-from awscli.testutils import mock, unittest
-from awscli.compat import StringIO
-
 from awscli import text
+from awscli.compat import StringIO
+from awscli.testutils import mock, unittest
 
 
 class TestSection(unittest.TestCase):
@@ -47,17 +46,19 @@ class TestSection(unittest.TestCase):
     def test_list_of_dicts(self):
         self.assert_text_renders_to(
             {'foo': [dict(a=1, b=2, c=3), dict(a=4, b=5, c=6)]},
-            'FOO\t1\t2\t3\n'
-            'FOO\t4\t5\t6\n')
+            'FOO\t1\t2\t3\n' 'FOO\t4\t5\t6\n',
+        )
 
     def test_multiple_list_of_dicts(self):
         self.assert_text_renders_to(
-            {'foo': [dict(a=1, b=2, c=3), dict(a=4, b=5, c=6)],
-             'zoo': [dict(a=7, b=8, c=9), dict(a=0, b=1, c=2)]},
+            {
+                'foo': [dict(a=1, b=2, c=3), dict(a=4, b=5, c=6)],
+                'zoo': [dict(a=7, b=8, c=9), dict(a=0, b=1, c=2)],
+            },
             'FOO\t1\t2\t3\n'
             'FOO\t4\t5\t6\n'
             'ZOO\t7\t8\t9\n'
-            'ZOO\t0\t1\t2\n'
+            'ZOO\t0\t1\t2\n',
         )
 
     def test_single_scalar_number(self):
@@ -73,47 +74,45 @@ class TestSection(unittest.TestCase):
         self.assert_text_renders_to(
             #                                missing "b"        adds "d"
             {'foo': [dict(a=1, b=2, c=3), dict(a=4, c=5), dict(a=6, d=7)]},
-            'FOO\t1\t2\t3\t\n'
-            'FOO\t4\t\t5\t\n'
-            'FOO\t6\t\t\t7\n'
+            'FOO\t1\t2\t3\t\n' 'FOO\t4\t\t5\t\n' 'FOO\t6\t\t\t7\n',
         )
 
     def test_different_keys_in_nested_sublists(self):
-        self.assert_text_renders_to({'bar':[
-            {'foo': [dict(a=1, b=2, c=3), dict(a=4, c=5)]},
-            {'foo': [dict(b=6, d=7), dict(b=8, c=9)]},
-        ]},
-            'FOO\t1\t2\t3\n'
-            'FOO\t4\t\t5\n'
-            'FOO\t6\t\t7\n'
-            'FOO\t8\t9\t\n'
+        self.assert_text_renders_to(
+            {
+                'bar': [
+                    {'foo': [dict(a=1, b=2, c=3), dict(a=4, c=5)]},
+                    {'foo': [dict(b=6, d=7), dict(b=8, c=9)]},
+                ]
+            },
+            'FOO\t1\t2\t3\n' 'FOO\t4\t\t5\n' 'FOO\t6\t\t7\n' 'FOO\t8\t9\t\n',
         )
 
     def test_different_keys_in_deeply_nested_sublists(self):
-        self.assert_text_renders_to({'bar':[
-            {'foo': [[[dict(a=1, b=2, c=3), dict(a=4, c=5)]]]},
-            {'foo': [[[dict(b=6, d=7), dict(b=8, c=9)]]]},
-        ]},
-            'FOO\t1\t2\t3\n'
-            'FOO\t4\t\t5\n'
-            'FOO\t6\t\t7\n'
-            'FOO\t8\t9\t\n'
+        self.assert_text_renders_to(
+            {
+                'bar': [
+                    {'foo': [[[dict(a=1, b=2, c=3), dict(a=4, c=5)]]]},
+                    {'foo': [[[dict(b=6, d=7), dict(b=8, c=9)]]]},
+                ]
+            },
+            'FOO\t1\t2\t3\n' 'FOO\t4\t\t5\n' 'FOO\t6\t\t7\n' 'FOO\t8\t9\t\n',
         )
 
     def test_scalars_and_complex_types(self):
         self.assert_text_renders_to(
-            {'foo': [dict(a=1, b=dict(y='y', z='z'), c=3),
-                     dict(a=4, b=dict(y='y', z='z'), c=6)]},
-            'FOO\t1\t3\n'
-            'B\ty\tz\n'
-            'FOO\t4\t6\n'
-            'B\ty\tz\n')
+            {
+                'foo': [
+                    dict(a=1, b=dict(y='y', z='z'), c=3),
+                    dict(a=4, b=dict(y='y', z='z'), c=6),
+                ]
+            },
+            'FOO\t1\t3\n' 'B\ty\tz\n' 'FOO\t4\t6\n' 'B\ty\tz\n',
+        )
 
     def test_nested_list_of_lists(self):
         self.assert_text_renders_to(
-            [['1', '2', '3'], ['4', '5', '6']],
-            '1\t2\t3\n'
-            '4\t5\t6\n'
+            [['1', '2', '3'], ['4', '5', '6']], '1\t2\t3\n' '4\t5\t6\n'
         )
 
     def test_deeply_nested_lists(self):
@@ -122,15 +121,11 @@ class TestSection(unittest.TestCase):
                 [['1', '2', '3'], ['4', '5', '6']],
                 [['7', '8', '9'], ['0', '1', '2']],
             ],
-            '1\t2\t3\n'
-            '4\t5\t6\n'
-            '7\t8\t9\n'
-            '0\t1\t2\n'
+            '1\t2\t3\n' '4\t5\t6\n' '7\t8\t9\n' '0\t1\t2\n',
         )
 
     def test_unicode_text(self):
-        self.assert_text_renders_to([['1', '2', u'\u2713']],
-                                     u'1\t2\t\u2713\n')
+        self.assert_text_renders_to([['1', '2', '\u2713']], '1\t2\t\u2713\n')
 
     def test_single_scalar_value(self):
         self.assert_text_renders_to('foobarbaz', 'foobarbaz\n')
@@ -159,32 +154,19 @@ class TestSection(unittest.TestCase):
     def test_list_of_strings_in_dict(self):
         self.assert_text_renders_to(
             {'KeyName': ['a', 'b', 'c']},
-             'KEYNAME\ta\n'
-             'KEYNAME\tb\n'
-             'KEYNAME\tc\n')
+            'KEYNAME\ta\n' 'KEYNAME\tb\n' 'KEYNAME\tc\n',
+        )
 
     def test_inconsistent_sublists(self):
         self.assert_text_renders_to(
-            [
-                [['1', '2'], ['3', '4', '5', '6']],
-                [['7', '8', '9'], ['0']]
-            ],
-            '1\t2\n'
-            '3\t4\t5\t6\n'
-            '7\t8\t9\n'
-            '0\n'
+            [[['1', '2'], ['3', '4', '5', '6']], [['7', '8', '9'], ['0']]],
+            '1\t2\n' '3\t4\t5\t6\n' '7\t8\t9\n' '0\n',
         )
 
     def test_lists_mixed_with_scalars(self):
         self.assert_text_renders_to(
-            [
-                ['a', 'b', ['c', 'd']],
-                ['e', 'f', ['g', 'h']]
-            ],
-            'a\tb\n'
-            'c\td\n'
-            'e\tf\n'
-            'g\th\n'
+            [['a', 'b', ['c', 'd']], ['e', 'f', ['g', 'h']]],
+            'a\tb\n' 'c\td\n' 'e\tf\n' 'g\th\n',
         )
 
     def test_deeply_nested_with_scalars(self):
@@ -200,15 +182,12 @@ class TestSection(unittest.TestCase):
             'i\tj\n'
             'k\tl\n'
             'm\tn\n'
-            'o\tp\n'
+            'o\tp\n',
         )
 
     def test_deeply_nested_with_identifier(self):
         self.assert_text_renders_to(
-            {'foo': [
-                ['a', 'b', ['c', 'd']],
-                ['e', 'f', ['g', 'h']]
-            ]},
+            {'foo': [['a', 'b', ['c', 'd']], ['e', 'f', ['g', 'h']]]},
             'FOO\ta\n'
             'FOO\tb\n'
             'FOO\tc\n'
@@ -216,7 +195,7 @@ class TestSection(unittest.TestCase):
             'FOO\te\n'
             'FOO\tf\n'
             'FOO\tg\n'
-            'FOO\th\n'
+            'FOO\th\n',
         )
 
 
diff -pruN 2.23.6-1/tests/unit/test_topictags.py 2.31.35-1/tests/unit/test_topictags.py
--- 2.23.6-1/tests/unit/test_topictags.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_topictags.py	2025-11-12 19:17:29.000000000 +0000
@@ -21,7 +21,7 @@
 #
 import json
 
-from awscli.testutils import unittest, FileCreator
+from awscli.testutils import FileCreator, unittest
 from awscli.topictags import TopicTagDB
 
 
@@ -38,8 +38,13 @@ class TestTopicTagDBGeneral(TestTopicTag
     def test_valid_tags(self):
         self.assertCountEqual(
             self.topic_tag_db.valid_tags,
-            ['title', 'description', 'category', 'related command',
-             'related topic']
+            [
+                'title',
+                'description',
+                'category',
+                'related command',
+                'related topic',
+            ],
         )
 
     def test_topic_dir(self):
@@ -61,12 +66,13 @@ class TestTopicTagDBGeneral(TestTopicTag
             },
             'topic-name-2': {
                 'title': ['My Second Topic Title'],
-            }
+            },
         }
         reference_topic_list = ['topic-name-1', 'topic-name-2']
         self.topic_tag_db = TopicTagDB(tag_dict)
-        self.assertCountEqual(self.topic_tag_db.get_all_topic_names(),
-                              reference_topic_list)
+        self.assertCountEqual(
+            self.topic_tag_db.get_all_topic_names(), reference_topic_list
+        )
 
     def test_get_all_topic_source_files(self):
         source_files = []
@@ -77,8 +83,7 @@ class TestTopicTagDBGeneral(TestTopicTag
             source_files.append(self.file_creator.create_file(topic_name, ''))
 
         self.assertCountEqual(
-            self.topic_tag_db.get_all_topic_src_files(),
-            source_files
+            self.topic_tag_db.get_all_topic_src_files(), source_files
         )
 
     def test_get_all_topic_source_files_ignore_index(self):
@@ -88,11 +93,11 @@ class TestTopicTagDBGeneral(TestTopicTag
         source_files.append(self.file_creator.create_file(topic_filename, ''))
         index_file = self.file_creator.create_file(index_filename, '')
         topic_dir = self.file_creator.rootdir
-        self.topic_tag_db = TopicTagDB(index_file=index_file,
-                                       topic_dir=topic_dir)
+        self.topic_tag_db = TopicTagDB(
+            index_file=index_file, topic_dir=topic_dir
+        )
         self.assertCountEqual(
-            self.topic_tag_db.get_all_topic_src_files(),
-            source_files
+            self.topic_tag_db.get_all_topic_src_files(), source_files
         )
 
     def test_get_all_topic_source_files_ignore_hidden(self):
@@ -104,8 +109,7 @@ class TestTopicTagDBGeneral(TestTopicTag
         topic_dir = self.file_creator.rootdir
         self.topic_tag_db = TopicTagDB(topic_dir=topic_dir)
         self.assertCountEqual(
-            self.topic_tag_db.get_all_topic_src_files(),
-            source_files
+            self.topic_tag_db.get_all_topic_src_files(), source_files
         )
 
     def test_get_tag_value_all_tags(self):
@@ -116,7 +120,7 @@ class TestTopicTagDBGeneral(TestTopicTag
                 'description': ['This describes my first topic'],
                 'category': ['General Topics'],
                 'related command': ['aws s3'],
-                'related topic': ['topic-name-2']
+                'related topic': ['topic-name-2'],
             }
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
@@ -134,8 +138,7 @@ class TestTopicTagDBGeneral(TestTopicTag
         self.assertEqual(value, ['General Topics'])
 
         # Check the related command get tag value
-        value = self.topic_tag_db.get_tag_value(topic_name,
-                                                'related command')
+        value = self.topic_tag_db.get_tag_value(topic_name, 'related command')
         self.assertEqual(value, ['aws s3'])
 
         # Check the related topic get tag value
@@ -144,11 +147,7 @@ class TestTopicTagDBGeneral(TestTopicTag
 
     def test_get_tag_multi_value(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'related topic': ['foo', 'bar']
-            }
-        }
+        tag_dict = {topic_name: {'related topic': ['foo', 'bar']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         # Check the related topic get tag value
         value = self.topic_tag_db.get_tag_value(topic_name, 'related topic')
@@ -156,69 +155,46 @@ class TestTopicTagDBGeneral(TestTopicTag
 
     def test_get_tag_topic_no_exists(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'related topic': ['foo']
-            }
-        }
+        tag_dict = {topic_name: {'related topic': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         value = self.topic_tag_db.get_tag_value('no-exist', 'related topic')
         self.assertEqual(value, None)
 
     def test_get_tag_no_exist_tag(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'related topic': ['foo']
-            }
-        }
+        tag_dict = {topic_name: {'related topic': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         value = self.topic_tag_db.get_tag_value(topic_name, ':foo:')
         self.assertEqual(value, None)
 
     def test_get_tag_no_exist_use_default(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'related topic': ['foo']
-            }
-        }
+        tag_dict = {topic_name: {'related topic': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         value = self.topic_tag_db.get_tag_value('no-exist', ':foo:', [])
         self.assertEqual(value, [])
 
     def test_get_tag_single_value(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'title': ['foo']
-            }
-        }
+        tag_dict = {topic_name: {'title': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         value = self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')
         self.assertEqual(value, 'foo')
 
     def test_get_tag_single_value_exception(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'title': ['foo', 'bar']
-            }
-        }
+        tag_dict = {topic_name: {'title': ['foo', 'bar']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         with self.assertRaises(ValueError):
             self.topic_tag_db.get_tag_single_value('topic-name-1', 'title')
 
     def test_get_tag_single_value_no_exists(self):
         topic_name = 'topic-name-1'
-        tag_dict = {
-            topic_name: {
-                'title': ['foo']
-            }
-        }
+        tag_dict = {topic_name: {'title': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         value = self.topic_tag_db.get_tag_single_value(
-            'topic-name-1', ':title:')
+            'topic-name-1', ':title:'
+        )
         self.assertEqual(value, None)
 
     def test_load_and_save_json_index(self):
@@ -228,14 +204,14 @@ class TestTopicTagDBGeneral(TestTopicTag
                 'description': ['This describes my first topic'],
                 'category': ['General Topics', 'S3'],
                 'related command': ['aws s3'],
-                'related topic': ['topic-name-2']
+                'related topic': ['topic-name-2'],
             },
             'topic-name-2': {
                 'title': ['My Second Topic Title'],
                 'description': ['This describes my second topic'],
                 'category': ['General Topics'],
-                'related topic': ['topic-name-1']
-            }
+                'related topic': ['topic-name-1'],
+            },
         }
 
         json_index = self.file_creator.create_file('index.json', '')
@@ -254,7 +230,7 @@ class TestTopicTagDBGeneral(TestTopicTag
         self.topic_tag_db.index_file = saved_json_index
 
         self.topic_tag_db.save_to_json_index()
-        with open(saved_json_index, 'r') as f:
+        with open(saved_json_index) as f:
             self.assertEqual(f.read(), tag_json)
 
 
@@ -266,126 +242,112 @@ class TestTopicTagDBQuery(TestTopicTagDB
                 'description': ['This describes my first topic'],
                 'category': ['General Topics'],
                 'related command': ['aws s3'],
-                'related topic': ['topic-name-2']
+                'related topic': ['topic-name-2'],
             }
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
 
         # Check title query
         query_dict = self.topic_tag_db.query('title')
-        self.assertEqual(query_dict,
-                         {'My First Topic Title': ['topic-name-1']})
+        self.assertEqual(
+            query_dict, {'My First Topic Title': ['topic-name-1']}
+        )
 
         # Check the description query
         query_dict = self.topic_tag_db.query('description')
-        self.assertEqual(query_dict,
-                         {'This describes my first topic': ['topic-name-1']})
+        self.assertEqual(
+            query_dict, {'This describes my first topic': ['topic-name-1']}
+        )
 
         # Check the category query
         query_dict = self.topic_tag_db.query('category')
-        self.assertEqual(query_dict,
-                         {'General Topics': ['topic-name-1']})
+        self.assertEqual(query_dict, {'General Topics': ['topic-name-1']})
 
         # Check the related command query
         query_dict = self.topic_tag_db.query('related command')
-        self.assertEqual(query_dict,
-                         {'aws s3': ['topic-name-1']})
+        self.assertEqual(query_dict, {'aws s3': ['topic-name-1']})
 
         # Check the description query
         query_dict = self.topic_tag_db.query('related topic')
-        self.assertEqual(query_dict,
-                         {'topic-name-2': ['topic-name-1']})
+        self.assertEqual(query_dict, {'topic-name-2': ['topic-name-1']})
 
     def test_query_tag_multi_values(self):
-        tag_dict = {
-            'topic-name-1': {
-                'related topic': ['foo', 'bar']
-            }
-        }
+        tag_dict = {'topic-name-1': {'related topic': ['foo', 'bar']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('related topic')
-        self.assertEqual(query_dict,
-                         {'foo': ['topic-name-1'], 'bar': ['topic-name-1']})
+        self.assertEqual(
+            query_dict, {'foo': ['topic-name-1'], 'bar': ['topic-name-1']}
+        )
 
     def test_query_multiple_topics(self):
         tag_dict = {
-            'topic-name-1': {
-                'category': ['foo']
-            },
-            'topic-name-2': {
-                'category': ['bar']
-            }
+            'topic-name-1': {'category': ['foo']},
+            'topic-name-2': {'category': ['bar']},
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('category')
-        self.assertEqual(query_dict,
-                         {'foo': ['topic-name-1'], 'bar': ['topic-name-2']})
+        self.assertEqual(
+            query_dict, {'foo': ['topic-name-1'], 'bar': ['topic-name-2']}
+        )
 
     def test_query_multiple_topics_with_multi_values(self):
         tag_dict = {
-            'topic-name-1': {
-                'category': ['foo', 'bar']
-            },
-            'topic-name-2': {
-                'category': ['baz', 'biz']
-            }
+            'topic-name-1': {'category': ['foo', 'bar']},
+            'topic-name-2': {'category': ['baz', 'biz']},
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('category')
-        self.assertEqual(query_dict,
-                         {'foo': ['topic-name-1'], 'bar': ['topic-name-1'],
-                          'baz': ['topic-name-2'], 'biz': ['topic-name-2']})
+        self.assertEqual(
+            query_dict,
+            {
+                'foo': ['topic-name-1'],
+                'bar': ['topic-name-1'],
+                'baz': ['topic-name-2'],
+                'biz': ['topic-name-2'],
+            },
+        )
 
     def test_query_multiple_topics_with_overlap_values(self):
         tag_dict = {
-            'topic-name-1': {
-                'category': ['foo', 'bar']
-            },
-            'topic-name-2': {
-                'category': ['bar', 'biz']
-            }
+            'topic-name-1': {'category': ['foo', 'bar']},
+            'topic-name-2': {'category': ['bar', 'biz']},
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('category')
         self.assertCountEqual(
-            query_dict, {'foo': ['topic-name-1'], 'biz': ['topic-name-2'],
-                         'bar': ['topic-name-1', 'topic-name-2']})
+            query_dict,
+            {
+                'foo': ['topic-name-1'],
+                'biz': ['topic-name-2'],
+                'bar': ['topic-name-1', 'topic-name-2'],
+            },
+        )
 
     def test_query_with_limit_single_value(self):
         tag_dict = {
-            'topic-name-1': {
-                'category': ['foo', 'bar']
-            },
-            'topic-name-2': {
-                'category': ['bar', 'biz']
-            }
+            'topic-name-1': {'category': ['foo', 'bar']},
+            'topic-name-2': {'category': ['bar', 'biz']},
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('category', ['bar'])
-        self.assertCountEqual(query_dict,
-                              {'bar': ['topic-name-1', 'topic-name-2']})
+        self.assertCountEqual(
+            query_dict, {'bar': ['topic-name-1', 'topic-name-2']}
+        )
 
     def test_query_with_limit_multi_value(self):
         tag_dict = {
-            'topic-name-1': {
-                'category': ['foo', 'bar']
-            },
-            'topic-name-2': {
-                'category': ['bar', 'biz']
-            }
+            'topic-name-1': {'category': ['foo', 'bar']},
+            'topic-name-2': {'category': ['bar', 'biz']},
         }
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query('category', ['foo', 'bar'])
-        self.assertCountEqual(query_dict,
-                              {'foo': ['topic-name-1'],
-                               'bar': ['topic-name-1', 'topic-name-2']})
+        self.assertCountEqual(
+            query_dict,
+            {'foo': ['topic-name-1'], 'bar': ['topic-name-1', 'topic-name-2']},
+        )
 
     def topic_query_with_non_existant_tag(self):
-        tag_dict = {
-            'topic-name-1': {
-                'category': ['foo']
-            }
-        }
+        tag_dict = {'topic-name-1': {'category': ['foo']}}
         self.topic_tag_db = TopicTagDB(tag_dict)
         query_dict = self.topic_tag_db.query(':bar:')
         self.assertEqual(query_dict, {})
@@ -405,7 +367,7 @@ class TestTopicDBScan(TestTopicTagDB):
         self.topic_tag_db = TopicTagDB(index_file=json_index)
         self.topic_tag_db.scan(file_paths)
         self.topic_tag_db.save_to_json_index()
-        with open(json_index, 'r') as f:
+        with open(json_index) as f:
             saved_index = json.loads(f.read())
             self.assertEqual(saved_index, reference_tag_dict)
 
@@ -415,7 +377,7 @@ class TestTopicDBScan(TestTopicTagDB):
             ':title: Title',
             ':category: Foo',
             ':related topic: Bar',
-            ':related command: ec2'
+            ':related command: ec2',
         ]
         topic_name = 'my-topic'
 
@@ -425,7 +387,7 @@ class TestTopicDBScan(TestTopicTagDB):
                 'title': ['Title'],
                 'category': ['Foo'],
                 'related topic': ['Bar'],
-                'related command': ['ec2']
+                'related command': ['ec2'],
             }
         }
         topic_filepath = self.create_topic_src_file(topic_name, tags)
@@ -448,9 +410,7 @@ class TestTopicDBScan(TestTopicTagDB):
         tags = []
         topic_name = 'my-topic'
 
-        reference_tag_dict = {
-            topic_name: {}
-        }
+        reference_tag_dict = {topic_name: {}}
         topic_filepath = self.create_topic_src_file(topic_name, tags)
         self.assert_json_index([topic_filepath], reference_tag_dict)
 
@@ -485,9 +445,7 @@ class TestTopicDBScan(TestTopicTagDB):
         self.assert_json_index([topic_filepath], reference_tag_dict)
 
     def test_scan_tags_with_multi_duplicate_values(self):
-        tags = [
-            ':category: Foo, Foo, Bar'
-        ]
+        tags = [':category: Foo, Foo, Bar']
         topic_name = 'my-topic'
 
         reference_tag_dict = {
@@ -551,7 +509,7 @@ class TestTopicDBScan(TestTopicTagDB):
                 ':title: Title',
                 ':category: Foo',
                 ':related topic: Bar',
-                ':related command: ec2'
+                ':related command: ec2',
             ]
 
             reference_tag_dict[topic_name] = {
@@ -559,7 +517,7 @@ class TestTopicDBScan(TestTopicTagDB):
                 'title': ['Title'],
                 'category': ['Foo'],
                 'related topic': ['Bar'],
-                'related command': ['ec2']
+                'related command': ['ec2'],
             }
             topic_files.append(self.create_topic_src_file(topic_name, tags))
         self.assert_json_index(topic_files, reference_tag_dict)
diff -pruN 2.23.6-1/tests/unit/test_utils.py 2.31.35-1/tests/unit/test_utils.py
--- 2.23.6-1/tests/unit/test_utils.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/unit/test_utils.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,35 +10,44 @@
 # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import signal
-import platform
-import pytest
-import subprocess
 import json
 import os
+import platform
 import shlex
+import signal
+import subprocess
 
 import botocore
 import botocore.model
 import botocore.session as session
+import pytest
+import ruamel.yaml
 from botocore.exceptions import ConnectionClosedError, MetadataRetrievalError
+
 from awscli.clidriver import create_clidriver
-from awscli.testutils import unittest, skip_if_windows, mock
 from awscli.compat import is_windows
+from awscli.testutils import mock, skip_if_windows, unittest
 from awscli.utils import (
-    split_on_commas, ignore_ctrl_c, find_service_and_method_in_event_name,
-    is_document_type, is_document_type_container, is_streaming_blob_type,
-    is_tagged_union_type, operation_uses_document_types, dump_yaml_to_str,
-    ShapeWalker, ShapeRecordingVisitor, OutputStreamFactory, LazyPager,
+    IMDSRegionProvider,
+    InstanceMetadataRegionFetcher,
+    LazyPager,
+    OutputStreamFactory,
+    ShapeRecordingVisitor,
+    ShapeWalker,
     add_command_lineage_to_user_agent_extra,
     add_metadata_component_to_user_agent_extra,
+    dump_yaml_to_str,
+    find_service_and_method_in_event_name,
+    ignore_ctrl_c,
+    is_document_type,
+    is_document_type_container,
+    is_streaming_blob_type,
+    is_tagged_union_type,
+    operation_uses_document_types,
+    split_on_commas,
 )
-from awscli.utils import InstanceMetadataRegionFetcher
-from awscli.utils import IMDSRegionProvider
 from tests import RawResponse
 
-import ruamel.yaml
-
 
 @pytest.fixture()
 def argument_model():
@@ -46,42 +55,52 @@ def argument_model():
 
 
 class TestCSVSplit(unittest.TestCase):
-
     def test_normal_csv_split(self):
-        self.assertEqual(split_on_commas('foo,bar,baz'),
-                         ['foo', 'bar', 'baz'])
+        self.assertEqual(split_on_commas('foo,bar,baz'), ['foo', 'bar', 'baz'])
 
     def test_quote_split(self):
-        self.assertEqual(split_on_commas('foo,"bar",baz'),
-                         ['foo', 'bar', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,"bar",baz'), ['foo', 'bar', 'baz']
+        )
 
     def test_inner_quote_split(self):
-        self.assertEqual(split_on_commas('foo,bar="1,2,3",baz'),
-                         ['foo', 'bar=1,2,3', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar="1,2,3",baz'), ['foo', 'bar=1,2,3', 'baz']
+        )
 
     def test_single_quote(self):
-        self.assertEqual(split_on_commas("foo,bar='1,2,3',baz"),
-                         ['foo', 'bar=1,2,3', 'baz'])
+        self.assertEqual(
+            split_on_commas("foo,bar='1,2,3',baz"), ['foo', 'bar=1,2,3', 'baz']
+        )
 
     def test_mixing_double_single_quotes(self):
-        self.assertEqual(split_on_commas("""foo,bar="1,'2',3",baz"""),
-                         ['foo', "bar=1,'2',3", 'baz'])
+        self.assertEqual(
+            split_on_commas("""foo,bar="1,'2',3",baz"""),
+            ['foo', "bar=1,'2',3", 'baz'],
+        )
 
     def test_mixing_double_single_quotes_before_first_comma(self):
-        self.assertEqual(split_on_commas("""foo,bar="1','2',3",baz"""),
-                         ['foo', "bar=1','2',3", 'baz'])
+        self.assertEqual(
+            split_on_commas("""foo,bar="1','2',3",baz"""),
+            ['foo', "bar=1','2',3", 'baz'],
+        )
 
     def test_inner_quote_split_with_equals(self):
-        self.assertEqual(split_on_commas('foo,bar="Foo:80/bar?a=b",baz'),
-                         ['foo', 'bar=Foo:80/bar?a=b', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar="Foo:80/bar?a=b",baz'),
+            ['foo', 'bar=Foo:80/bar?a=b', 'baz'],
+        )
 
     def test_single_quoted_inner_value_with_no_commas(self):
-        self.assertEqual(split_on_commas("foo,bar='BAR',baz"),
-                         ['foo', 'bar=BAR', 'baz'])
+        self.assertEqual(
+            split_on_commas("foo,bar='BAR',baz"), ['foo', 'bar=BAR', 'baz']
+        )
 
     def test_escape_quotes(self):
-        self.assertEqual(split_on_commas(r'foo,bar=1\,2\,3,baz'),
-                         ['foo', 'bar=1,2,3', 'baz'])
+        self.assertEqual(
+            split_on_commas(r'foo,bar=1\,2\,3,baz'),
+            ['foo', 'bar=1,2,3', 'baz'],
+        )
 
     def test_no_commas(self):
         self.assertEqual(split_on_commas('foo'), ['foo'])
@@ -90,32 +109,44 @@ class TestCSVSplit(unittest.TestCase):
         self.assertEqual(split_on_commas('foo,'), ['foo', ''])
 
     def test_escape_backslash(self):
-        self.assertEqual(split_on_commas('foo,bar\\\\,baz\\\\,qux'),
-                         ['foo', 'bar\\', 'baz\\', 'qux'])
+        self.assertEqual(
+            split_on_commas('foo,bar\\\\,baz\\\\,qux'),
+            ['foo', 'bar\\', 'baz\\', 'qux'],
+        )
 
     def test_square_brackets(self):
-        self.assertEqual(split_on_commas('foo,bar=["a=b",\'2\',c=d],baz'),
-                         ['foo', 'bar=a=b,2,c=d', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar=["a=b",\'2\',c=d],baz'),
+            ['foo', 'bar=a=b,2,c=d', 'baz'],
+        )
 
     def test_quoted_square_brackets(self):
-        self.assertEqual(split_on_commas('foo,bar="[blah]",c=d],baz'),
-                         ['foo', 'bar=[blah]', 'c=d]', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar="[blah]",c=d],baz'),
+            ['foo', 'bar=[blah]', 'c=d]', 'baz'],
+        )
 
     def test_missing_bracket(self):
-        self.assertEqual(split_on_commas('foo,bar=[a,baz'),
-                         ['foo', 'bar=[a', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar=[a,baz'), ['foo', 'bar=[a', 'baz']
+        )
 
     def test_missing_bracket2(self):
-        self.assertEqual(split_on_commas('foo,bar=a],baz'),
-                         ['foo', 'bar=a]', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar=a],baz'), ['foo', 'bar=a]', 'baz']
+        )
 
     def test_bracket_in_middle(self):
-        self.assertEqual(split_on_commas('foo,bar=a[b][c],baz'),
-                         ['foo', 'bar=a[b][c]', 'baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar=a[b][c],baz'),
+            ['foo', 'bar=a[b][c]', 'baz'],
+        )
 
     def test_end_bracket_in_value(self):
-        self.assertEqual(split_on_commas('foo,bar=[foo,*[biz]*,baz]'),
-                         ['foo', 'bar=foo,*[biz]*,baz'])
+        self.assertEqual(
+            split_on_commas('foo,bar=[foo,*[biz]*,baz]'),
+            ['foo', 'bar=foo,*[biz]*,baz'],
+        )
 
 
 @skip_if_windows("Ctrl-C not supported on windows.")
@@ -148,10 +179,10 @@ class TestFindServiceAndOperationNameFro
         self.assertIs(operation, None)
 
 
-class MockProcess(object):
+class MockProcess:
     @property
     def stdin(self):
-        raise IOError('broken pipe')
+        raise OSError('broken pipe')
 
     def communicate(self):
         pass
@@ -167,7 +198,8 @@ class TestOutputStreamFactory(unittest.T
         self.popen = mock.Mock(subprocess.Popen)
         self.environ = {}
         self.stream_factory = OutputStreamFactory(
-            session=self.session, popen=self.popen,
+            session=self.session,
+            popen=self.popen,
             environ=self.environ,
         )
         self.pager = 'mypager --option'
@@ -180,14 +212,13 @@ class TestOutputStreamFactory(unittest.T
         self.patch_tty.stop()
 
     def set_session_pager(self, pager):
-        self.session.get_component.return_value.\
-            get_config_variable.return_value = pager
+        self.session.get_component.return_value.get_config_variable.return_value = pager
 
     def assert_popen_call(self, expected_pager_cmd, **override_args):
         popen_kwargs = {
             'stdin': subprocess.PIPE,
             'env': mock.ANY,
-            'universal_newlines': True
+            'universal_newlines': True,
         }
         if is_windows:
             popen_kwargs['args'] = expected_pager_cmd
@@ -201,17 +232,15 @@ class TestOutputStreamFactory(unittest.T
         self.set_session_pager('mypager --option')
         with self.stream_factory.get_pager_stream() as stream:
             stream.write()
-            self.assert_popen_call(
-                expected_pager_cmd='mypager --option'
-            )
+            self.assert_popen_call(expected_pager_cmd='mypager --option')
 
     def test_explicit_pager(self):
         self.set_session_pager('sessionpager --option')
-        with self.stream_factory.get_pager_stream('mypager --option') as stream:
+        with self.stream_factory.get_pager_stream(
+            'mypager --option'
+        ) as stream:
             stream.write()
-            self.assert_popen_call(
-                expected_pager_cmd='mypager --option'
-            )
+            self.assert_popen_call(expected_pager_cmd='mypager --option')
 
     def test_exit_of_context_manager_for_pager(self):
         self.set_session_pager('mypager --option')
@@ -237,16 +266,14 @@ class TestOutputStreamFactory(unittest.T
         try:
             with self.stream_factory.get_pager_stream() as stream:
                 stream.write()
-        except IOError:
+        except OSError:
             self.fail('Should not raise IOError')
 
     def test_get_output_stream(self):
         self.set_session_pager('mypager --option')
         with self.stream_factory.get_output_stream() as stream:
             stream.write()
-            self.assert_popen_call(
-                expected_pager_cmd='mypager --option'
-            )
+            self.assert_popen_call(expected_pager_cmd='mypager --option')
 
     @mock.patch('awscli.utils.get_stdout_text_writer')
     def test_use_stdout_if_not_tty(self, mock_stdout_writer):
@@ -267,8 +294,7 @@ class TestOutputStreamFactory(unittest.T
         with self.stream_factory.get_output_stream() as stream:
             stream.write()
             self.assert_popen_call(
-                expected_pager_cmd='myless',
-                env={'LESS': 'FRX'}
+                expected_pager_cmd='myless', env={'LESS': 'FRX'}
             )
 
     def test_does_not_clobber_less_env_var_if_in_env_vars(self):
@@ -277,19 +303,18 @@ class TestOutputStreamFactory(unittest.T
         with self.stream_factory.get_output_stream() as stream:
             stream.write()
             self.assert_popen_call(
-                expected_pager_cmd='less',
-                env={'LESS': 'S'}
+                expected_pager_cmd='less', env={'LESS': 'S'}
             )
 
     def test_set_less_flags_through_constructor(self):
         self.set_session_pager('less')
         stream_factory = OutputStreamFactory(
-            self.session, self.popen, self.environ, default_less_flags='ABC')
+            self.session, self.popen, self.environ, default_less_flags='ABC'
+        )
         with stream_factory.get_output_stream() as stream:
             stream.write()
             self.assert_popen_call(
-                expected_pager_cmd='less',
-                env={'LESS': 'ABC'}
+                expected_pager_cmd='less', env={'LESS': 'ABC'}
             )
 
     def test_not_create_pager_process_if_not_called(self):
@@ -300,23 +325,71 @@ class TestOutputStreamFactory(unittest.T
     def test_create_process_on_stdin_method_call(self):
         self.set_session_pager('less')
         stream_factory = OutputStreamFactory(
-            self.session, self.popen, self.environ, default_less_flags='ABC')
+            self.session, self.popen, self.environ, default_less_flags='ABC'
+        )
         with stream_factory.get_output_stream() as stream:
             self.assertEqual(self.popen.call_count, 0)
             stream.write()
             self.assert_popen_call(
-                expected_pager_cmd='less',
-                env={'LESS': 'ABC'}
+                expected_pager_cmd='less', env={'LESS': 'ABC'}
             )
 
     def test_not_create_process_if_stream_not_created(self):
         self.set_session_pager('less')
         stream_factory = OutputStreamFactory(
-            self.session, self.popen, self.environ, default_less_flags='ABC')
+            self.session, self.popen, self.environ, default_less_flags='ABC'
+        )
         with stream_factory.get_output_stream():
             self.assertEqual(self.popen.call_count, 0)
         self.assertEqual(self.popen.call_count, 0)
 
+    def test_pyinstaller_ld_library_path_removed(self):
+        # Simulate PyInstaller setting its own LD_LIBRARY_PATH.
+        with mock.patch(
+            'os.environ', {'LD_LIBRARY_PATH': '/pyinstaller/path'}
+        ):
+            stream_factory = OutputStreamFactory(
+                session=self.session,
+                popen=self.popen,
+            )
+        self.set_session_pager('less')
+        with stream_factory.get_output_stream() as stream:
+            stream.write()
+            # Assert that PyInstaller's LD_LIBRARY_PATH was removed.
+            self.assert_popen_call(
+                expected_pager_cmd='less',
+                env={'PYINSTALLER_RESET_ENVIRONMENT': '1', 'LESS': 'FRX'},
+            )
+
+    def test_pyinstaller_ld_library_path_replaced_with_original(self):
+        # Simulate PyInstaller setting its own LD_LIBRARY_PATH and
+        # preserving system value as LD_LIBRARY_PATH_ORIG.
+        with mock.patch(
+            'os.environ',
+            {
+                'LD_LIBRARY_PATH': '/pyinstaller/path',
+                'LD_LIBRARY_PATH_ORIG': '/original/path',
+            },
+        ):
+            stream_factory = OutputStreamFactory(
+                session=self.session,
+                popen=self.popen,
+            )
+        self.set_session_pager('less')
+        with stream_factory.get_output_stream() as stream:
+            stream.write()
+            # Assert that PyInstaller's LD_LIBRARY_PATH was replaced
+            # with the original value.
+            self.assert_popen_call(
+                expected_pager_cmd='less',
+                env={
+                    'LD_LIBRARY_PATH': '/original/path',
+                    'LD_LIBRARY_PATH_ORIG': '/original/path',
+                    'PYINSTALLER_RESET_ENVIRONMENT': '1',
+                    'LESS': 'FRX',
+                },
+            )
+
 
 class BaseIMDSRegionTest(unittest.TestCase):
     def setUp(self):
@@ -339,7 +412,7 @@ class BaseIMDSRegionTest(unittest.TestCa
             url='http://169.254.169.254/',
             status_code=status_code,
             headers={},
-            raw=RawResponse(body)
+            raw=RawResponse(body),
         )
         self._imds_responses.append(response)
 
@@ -394,8 +467,7 @@ class TestInstanceMetadataRegionFetcher(
         self.add_imds_token_response()
         self.add_get_region_imds_response()
 
-        InstanceMetadataRegionFetcher(
-            user_agent=user_agent).retrieve_region()
+        InstanceMetadataRegionFetcher(user_agent=user_agent).retrieve_region()
 
         headers = self._send.call_args[0][0].headers
         self.assertEqual(headers['User-Agent'], user_agent)
@@ -405,10 +477,12 @@ class TestInstanceMetadataRegionFetcher(
         # be retried.
         self.add_imds_token_response()
         self.add_imds_response(
-            status_code=429, body=b'{"message": "Slow down"}')
+            status_code=429, body=b'{"message": "Slow down"}'
+        )
         self.add_get_region_imds_response()
         result = InstanceMetadataRegionFetcher(
-            num_attempts=2).retrieve_region()
+            num_attempts=2
+        ).retrieve_region()
         expected_result = 'us-mars-1'
         self.assertEqual(result, expected_result)
 
@@ -418,7 +492,8 @@ class TestInstanceMetadataRegionFetcher(
         self.add_imds_response(body=b'')
         self.add_get_region_imds_response()
         result = InstanceMetadataRegionFetcher(
-            num_attempts=2).retrieve_region()
+            num_attempts=2
+        ).retrieve_region()
         expected_result = 'us-mars-1'
         self.assertEqual(result, expected_result)
 
@@ -427,10 +502,12 @@ class TestInstanceMetadataRegionFetcher(
         # body should be retried.
         self.add_imds_token_response()
         self.add_imds_response(
-            status_code=429, body=b'{"message": "Slow down"}')
+            status_code=429, body=b'{"message": "Slow down"}'
+        )
         self.add_get_region_imds_response()
         result = InstanceMetadataRegionFetcher(
-            num_attempts=2).retrieve_region()
+            num_attempts=2
+        ).retrieve_region()
         expected_result = 'us-mars-1'
         self.assertEqual(result, expected_result)
 
@@ -440,7 +517,8 @@ class TestInstanceMetadataRegionFetcher(
         self.add_imds_connection_error(ConnectionClosedError(endpoint_url=''))
         self.add_get_region_imds_response()
         result = InstanceMetadataRegionFetcher(
-            num_attempts=2).retrieve_region()
+            num_attempts=2
+        ).retrieve_region()
         expected_result = 'us-mars-1'
         self.assertEqual(result, expected_result)
 
@@ -450,7 +528,8 @@ class TestInstanceMetadataRegionFetcher(
         self.add_imds_response(body=b'')
         self.add_get_region_imds_response()
         result = InstanceMetadataRegionFetcher(
-            num_attempts=2).retrieve_region()
+            num_attempts=2
+        ).retrieve_region()
         expected_result = 'us-mars-1'
         self.assertEqual(result, expected_result)
 
@@ -458,7 +537,8 @@ class TestInstanceMetadataRegionFetcher(
         self.add_imds_token_response()
         self.add_imds_response(status_code=400, body=b'')
         result = InstanceMetadataRegionFetcher(
-            num_attempts=1).retrieve_region()
+            num_attempts=1
+        ).retrieve_region()
         self.assertEqual(result, None)
 
     def test_400_response_returns_none(self):
@@ -476,8 +556,11 @@ class TestInstanceMetadataRegionFetcher(
 
 
 class TestIMDSRegionProvider(BaseIMDSRegionTest):
-    def assert_does_provide_expected_value(self, fetcher_region=None,
-                                           expected_result=None,):
+    def assert_does_provide_expected_value(
+        self,
+        fetcher_region=None,
+        expected_result=None,
+    ):
         fake_session = mock.Mock(spec=session.Session)
         fake_fetcher = mock.Mock(spec=InstanceMetadataRegionFetcher)
         fake_fetcher.retrieve_region.return_value = fetcher_region
@@ -529,7 +612,8 @@ class TestIMDSRegionProvider(BaseIMDSReg
     def test_can_set_imds_endpoint_mode_to_ipv4(self):
         driver = create_clidriver()
         driver.session.set_config_variable(
-            'ec2_metadata_service_endpoint_mode', 'ipv4')
+            'ec2_metadata_service_endpoint_mode', 'ipv4'
+        )
         self.add_imds_token_response()
         self.add_get_region_imds_response()
         provider = IMDSRegionProvider(driver.session)
@@ -540,7 +624,8 @@ class TestIMDSRegionProvider(BaseIMDSReg
     def test_can_set_imds_endpoint_mode_to_ipv6(self):
         driver = create_clidriver()
         driver.session.set_config_variable(
-            'ec2_metadata_service_endpoint_mode', 'ipv6')
+            'ec2_metadata_service_endpoint_mode', 'ipv6'
+        )
         self.add_imds_token_response()
         self.add_get_region_imds_response()
         provider = IMDSRegionProvider(driver.session)
@@ -551,7 +636,19 @@ class TestIMDSRegionProvider(BaseIMDSReg
     def test_can_set_imds_service_endpoint(self):
         driver = create_clidriver()
         driver.session.set_config_variable(
-            'ec2_metadata_service_endpoint', 'http://myendpoint/')
+            'ec2_metadata_service_endpoint', 'http://myendpoint/'
+        )
+        self.add_imds_token_response()
+        self.add_get_region_imds_response()
+        provider = IMDSRegionProvider(driver.session)
+        provider.provide()
+        args, _ = self._send.call_args
+        self.assertIn('http://myendpoint/', args[0].url)
+    
+    def test_can_set_imds_service_endpoint_custom(self):
+        driver = create_clidriver()
+        driver.session.set_config_variable(
+            'ec2_metadata_service_endpoint', 'http://myendpoint')
         self.add_imds_token_response()
         self.add_get_region_imds_response()
         provider = IMDSRegionProvider(driver.session)
@@ -562,9 +659,11 @@ class TestIMDSRegionProvider(BaseIMDSReg
     def test_imds_service_endpoint_overrides_ipv6_endpoint(self):
         driver = create_clidriver()
         driver.session.set_config_variable(
-            'ec2_metadata_service_endpoint_mode', 'ipv6')
+            'ec2_metadata_service_endpoint_mode', 'ipv6'
+        )
         driver.session.set_config_variable(
-            'ec2_metadata_service_endpoint', 'http://myendpoint/')
+            'ec2_metadata_service_endpoint', 'http://myendpoint/'
+        )
         self.add_imds_token_response()
         self.add_get_region_imds_response()
         provider = IMDSRegionProvider(driver.session)
@@ -626,11 +725,7 @@ class BaseShapeTest(unittest.TestCase):
         return shape_cls(shape_name, shape_model, resolver)
 
     def get_doc_type_shape_definition(self):
-        return {
-            'type': 'structure',
-            'members': {},
-            'document': True
-        }
+        return {'type': 'structure', 'members': {}, 'document': True}
 
 
 class TestIsDocumentType(BaseShapeTest):
@@ -671,12 +766,13 @@ class TestIsDocumentTypeContainer(BaseSh
     def test_is_not_document_type_container_if_not_scalar(self):
         self.shapes['String'] = {'type': 'string'}
         self.assertFalse(
-            is_document_type_container(self.get_shape_model('String')))
+            is_document_type_container(self.get_shape_model('String'))
+        )
 
     def test_is_document_type_container_if_list_member(self):
         self.shapes['ListOfDocTypes'] = {
             'type': 'list',
-            'member': {'shape': 'DocType'}
+            'member': {'shape': 'DocType'},
         }
         self.shapes['DocType'] = self.get_doc_type_shape_definition()
         self.assertTrue(
@@ -687,7 +783,7 @@ class TestIsDocumentTypeContainer(BaseSh
         self.shapes['MapOfDocTypes'] = {
             'type': 'map',
             'key': {'shape': 'String'},
-            'value': {'shape': 'DocType'}
+            'value': {'shape': 'DocType'},
         }
         self.shapes['DocType'] = self.get_doc_type_shape_definition()
         self.shapes['String'] = {'type': 'string'}
@@ -698,11 +794,11 @@ class TestIsDocumentTypeContainer(BaseSh
     def test_is_document_type_container_if_nested_list_member(self):
         self.shapes['NestedListsOfDocTypes'] = {
             'type': 'list',
-            'member': {'shape': 'ListOfDocTypes'}
+            'member': {'shape': 'ListOfDocTypes'},
         }
         self.shapes['ListOfDocTypes'] = {
             'type': 'list',
-            'member': {'shape': 'DocType'}
+            'member': {'shape': 'DocType'},
         }
         self.shapes['DocType'] = self.get_doc_type_shape_definition()
         self.assertTrue(
@@ -715,39 +811,36 @@ class TestIsDocumentTypeContainer(BaseSh
 class TestOperationUsesDocumentTypes(BaseShapeTest):
     def setUp(self):
         super(TestOperationUsesDocumentTypes, self).setUp()
-        self.input_shape_definition = {
-            'type': 'structure',
-            'members': {}
-        }
+        self.input_shape_definition = {'type': 'structure', 'members': {}}
         self.shapes['Input'] = self.input_shape_definition
-        self.output_shape_definition = {
-            'type': 'structure',
-            'members': {}
-        }
+        self.output_shape_definition = {'type': 'structure', 'members': {}}
         self.shapes['Output'] = self.output_shape_definition
         self.operation_definition = {
             'input': {'shape': 'Input'},
-            'output': {'shape': 'Output'}
+            'output': {'shape': 'Output'},
         }
         self.service_model = botocore.model.ServiceModel(
             {
                 'operations': {'DescribeResource': self.operation_definition},
-                'shapes': self.shapes
+                'shapes': self.shapes,
             }
         )
         self.operation_model = self.service_model.operation_model(
-            'DescribeResource')
+            'DescribeResource'
+        )
 
     def test_operation_uses_document_types_if_doc_type_in_input(self):
         self.shapes['DocType'] = self.get_doc_type_shape_definition()
         self.input_shape_definition['members']['DocType'] = {
-            'shape': 'DocType'}
+            'shape': 'DocType'
+        }
         self.assertTrue(operation_uses_document_types(self.operation_model))
 
     def test_operation_uses_document_types_if_doc_type_in_output(self):
         self.shapes['DocType'] = self.get_doc_type_shape_definition()
         self.output_shape_definition['members']['DocType'] = {
-            'shape': 'DocType'}
+            'shape': 'DocType'
+        }
         self.assertTrue(operation_uses_document_types(self.operation_model))
 
     def test_operation_uses_document_types_is_false_when_no_doc_types(self):
@@ -775,7 +868,7 @@ class TestShapeWalker(BaseShapeTest):
     def assert_visited_shapes(self, expected_shape_names):
         self.assertEqual(
             expected_shape_names,
-            [shape.name for shape in self.visitor.visited]
+            [shape.name for shape in self.visitor.visited],
         )
 
     def test_walk_scalar(self):
@@ -788,18 +881,15 @@ class TestShapeWalker(BaseShapeTest):
             'type': 'structure',
             'members': {
                 'String1': {'shape': 'String'},
-                'String2': {'shape': 'String'}
-            }
+                'String2': {'shape': 'String'},
+            },
         }
         self.shapes['String'] = {'type': 'string'}
         self.walker.walk(self.get_shape_model('Structure'), self.visitor)
         self.assert_visited_shapes(['Structure', 'String', 'String'])
 
     def test_walk_list(self):
-        self.shapes['List'] = {
-            'type': 'list',
-            'member': {'shape': 'String'}
-        }
+        self.shapes['List'] = {'type': 'list', 'member': {'shape': 'String'}}
         self.shapes['String'] = {'type': 'string'}
         self.walker.walk(self.get_shape_model('List'), self.visitor)
         self.assert_visited_shapes(['List', 'String'])
@@ -808,7 +898,7 @@ class TestShapeWalker(BaseShapeTest):
         self.shapes['Map'] = {
             'type': 'map',
             'key': {'shape': 'KeyString'},
-            'value': {'shape': 'ValueString'}
+            'value': {'shape': 'ValueString'},
         }
         self.shapes['KeyString'] = {'type': 'string'}
         self.shapes['ValueString'] = {'type': 'string'}
@@ -820,7 +910,7 @@ class TestShapeWalker(BaseShapeTest):
             'type': 'structure',
             'members': {
                 'Recursive': {'shape': 'Recursive'},
-            }
+            },
         }
         self.walker.walk(self.get_shape_model('Recursive'), self.visitor)
         self.assert_visited_shapes(['Recursive'])
@@ -871,7 +961,9 @@ def test_add_command_lineage_to_user_age
     assert test_session.user_agent_extra == 'md/command#a.b.c'
 
 
-def test_no_add_command_lineage_to_user_agent_extra_with_existing_command_lineage(test_session):
+def test_no_add_command_lineage_to_user_agent_extra_with_existing_command_lineage(
+    test_session,
+):
     test_session.user_agent_extra = 'md/command#a.b.c'
     add_command_lineage_to_user_agent_extra(test_session, ['a', 'b', 'c', 'd'])
     assert test_session.user_agent_extra == 'md/command#a.b.c'
diff -pruN 2.23.6-1/tests/utils/botocore/__init__.py 2.31.35-1/tests/utils/botocore/__init__.py
--- 2.23.6-1/tests/utils/botocore/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/utils/botocore/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -18,35 +18,31 @@
 # distribution. This environment variable provides the option to remove the
 # repository root from sys.path to be able to rely on the installed
 # distribution when running the tests.
+import binascii
+import contextlib
+import datetime
 import os
-import sys
-import time
+import platform
 import random
+import select
 import shutil
-import contextlib
+import sys
 import tempfile
-import binascii
-import platform
-import select
-import datetime
-from io import BytesIO
-from subprocess import Popen, PIPE
-
-from dateutil.tz import tzlocal
+import time
 import unittest
+from io import BytesIO
+from subprocess import PIPE, Popen
 from unittest import mock
 
 import botocore.loaders
 import botocore.session
+from botocore import credentials, utils
 from botocore.awsrequest import AWSResponse
-from botocore.compat import urlparse
-from botocore.compat import parse_qs
-from botocore import utils
-from botocore import credentials
-from botocore.httpchecksum import _CHECKSUM_CLS, DEFAULT_CHECKSUM_ALGORITHM
+from botocore.compat import parse_qs, urlparse
 from botocore.configprovider import create_botocore_default_config_mapping
+from botocore.httpchecksum import _CHECKSUM_CLS, DEFAULT_CHECKSUM_ALGORITHM
 from botocore.stub import Stubber
-
+from dateutil.tz import tzlocal
 
 _LOADER = botocore.loaders.Loader()
 
@@ -81,9 +77,12 @@ def skip_if_windows(reason):
         def test_some_non_windows_stuff(self):
             self.assertEqual(...)
     """
+
     def decorator(func):
         return unittest.skipIf(
-            platform.system() not in ['Darwin', 'Linux'], reason)(func)
+            platform.system() not in ['Darwin', 'Linux'], reason
+        )(func)
+
     return decorator
 
 
@@ -124,7 +123,7 @@ def temporary_file(mode):
 
     """
     temporary_directory = tempfile.mkdtemp()
-    basename = 'tmpfile-%s-%s' % (int(time.time()), random.randint(1, 1000))
+    basename = f'tmpfile-{int(time.time())}-{random.randint(1, 1000)}'
     full_filename = os.path.join(temporary_directory, basename)
     open(full_filename, 'w').close()
     try:
@@ -161,7 +160,7 @@ class BaseSessionTest(BaseEnvVar):
     """
 
     def setUp(self, **environ):
-        super(BaseSessionTest, self).setUp()
+        super().setUp()
         self.environ['AWS_ACCESS_KEY_ID'] = 'access_key'
         self.environ['AWS_SECRET_ACCESS_KEY'] = 'secret_key'
         self.environ['AWS_CONFIG_FILE'] = 'no-exist-foo'
@@ -199,10 +198,9 @@ class BaseClientDriverTest(unittest.Test
         self.driver.stop()
 
 
-class ClientDriver(object):
+class ClientDriver:
     CLIENT_SERVER = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)),
-        'cmd-runner'
+        os.path.dirname(os.path.abspath(__file__)), 'cmd-runner'
     )
 
     def __init__(self):
@@ -230,8 +228,12 @@ class ClientDriver(object):
 
     def start(self, env=None):
         """Start up the command runner process."""
-        self._popen = Popen([sys.executable, self.CLIENT_SERVER],
-                            stdout=PIPE, stdin=PIPE, env=env)
+        self._popen = Popen(
+            [sys.executable, self.CLIENT_SERVER],
+            stdout=PIPE,
+            stdin=PIPE,
+            env=env,
+        )
 
     def stop(self):
         """Shutdown the command runner process."""
@@ -280,8 +282,7 @@ class ClientDriver(object):
         self.send_cmd(*cmd)
         result = self._popen.stdout.readline().strip()
         if result != b'OK':
-            raise RuntimeError(
-                "Error from command '%s': %s" % (cmd, result))
+            raise RuntimeError(f"Error from command '{cmd}': {result}")
 
 
 # This is added to this file because it's used in both
@@ -307,18 +308,21 @@ class IntegerRefresher(credentials.Refre
     _mandatory_refresh_timeout = 1
     _credentials_expire = 3
 
-    def __init__(self, creds_last_for=_credentials_expire,
-                 advisory_refresh=_advisory_refresh_timeout,
-                 mandatory_refresh=_mandatory_refresh_timeout,
-                 refresh_function=None):
-        expires_in = (
-            self._current_datetime() +
-            datetime.timedelta(seconds=creds_last_for))
+    def __init__(
+        self,
+        creds_last_for=_credentials_expire,
+        advisory_refresh=_advisory_refresh_timeout,
+        mandatory_refresh=_mandatory_refresh_timeout,
+        refresh_function=None,
+    ):
+        expires_in = self._current_datetime() + datetime.timedelta(
+            seconds=creds_last_for
+        )
         if refresh_function is None:
             refresh_function = self._do_refresh
-        super(IntegerRefresher, self).__init__(
-            '0', '0', '0', expires_in,
-            refresh_function, 'INTREFRESH')
+        super().__init__(
+            '0', '0', '0', expires_in, refresh_function, 'INTREFRESH'
+        )
         self.creds_last_for = creds_last_for
         self.refresh_counter = 0
         self._advisory_refresh_timeout = advisory_refresh
@@ -361,6 +365,7 @@ def _urlparse(url):
         url = url.decode('utf8')
     return urlparse(url)
 
+
 def assert_url_equal(url1, url2):
     parts1 = _urlparse(url1)
     parts2 = _urlparse(url2)
@@ -393,7 +398,7 @@ class RawResponse(BytesIO):
             contents = self.read()
 
 
-class BaseHTTPStubber(object):
+class BaseHTTPStubber:
     def __init__(self, obj_with_event_emitter, strict=True):
         self.reset()
         self._strict = strict
@@ -403,8 +408,9 @@ class BaseHTTPStubber(object):
         self.requests = []
         self.responses = []
 
-    def add_response(self, url='https://example.com', status=200, headers=None,
-                     body=b''):
+    def add_response(
+        self, url='https://example.com', status=200, headers=None, body=b''
+    ):
         if headers is None:
             headers = {}
 
@@ -459,7 +465,7 @@ class ConsistencyWaiterException(Excepti
     pass
 
 
-class ConsistencyWaiter(object):
+class ConsistencyWaiter:
     """
     A waiter class for some check to reach a consistent state.
 
@@ -475,8 +481,14 @@ class ConsistencyWaiter(object):
     :param delay: The number of seconds to delay the next API call after a
     failed check call. Default of 5 seconds.
     """
-    def __init__(self, min_successes=1, max_attempts=20, delay=5,
-                 delay_initial_poll=False):
+
+    def __init__(
+        self,
+        min_successes=1,
+        max_attempts=20,
+        delay=5,
+        delay_initial_poll=False,
+    ):
         self.min_successes = min_successes
         self.max_attempts = max_attempts
         self.delay = delay
@@ -513,12 +525,14 @@ class ConsistencyWaiter(object):
 
     def _fail_message(self, attempts, successes):
         format_args = (attempts, successes)
-        return 'Failed after %s attempts, only had %s successes' % format_args
+        return 'Failed after {} attempts, only had {} successes'.format(
+            *format_args
+        )
 
 
 class StubbedSession(botocore.session.Session):
     def __init__(self, *args, **kwargs):
-        super(StubbedSession, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self._cached_clients = {}
         self._client_stubs = {}
 
@@ -537,8 +551,7 @@ class StubbedSession(botocore.session.Se
         return self._cached_clients[service_name]
 
     def _create_stubbed_client(self, service_name, *args, **kwargs):
-        client = super(StubbedSession, self).create_client(
-            service_name, *args, **kwargs)
+        client = super().create_client(service_name, *args, **kwargs)
         stubber = Stubber(client)
         self._client_stubs[service_name] = stubber
         return client
@@ -574,8 +587,7 @@ class FreezeTime(contextlib.ContextDecor
             date = datetime.datetime.utcnow()
         self.date = date
         self.datetime_patcher = mock.patch.object(
-            module, 'datetime',
-            mock.Mock(wraps=datetime.datetime)
+            module, 'datetime', mock.Mock(wraps=datetime.datetime)
         )
 
     def __enter__(self, *args, **kwargs):
diff -pruN 2.23.6-1/tests/utils/s3transfer/__init__.py 2.31.35-1/tests/utils/s3transfer/__init__.py
--- 2.23.6-1/tests/utils/s3transfer/__init__.py	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tests/utils/s3transfer/__init__.py	2025-11-12 19:17:29.000000000 +0000
@@ -10,8 +10,8 @@
 # distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific
 # language governing permissions and limitations under the License.
-import io
 import hashlib
+import io
 import math
 import os
 import platform
@@ -23,26 +23,29 @@ from unittest import mock  # noqa: F401
 
 import botocore.session
 from botocore.stub import Stubber
-
+from s3transfer.futures import (
+    IN_MEMORY_DOWNLOAD_TAG,
+    IN_MEMORY_UPLOAD_TAG,
+    BoundedExecutor,
+    NonThreadedExecutor,
+    TransferCoordinator,
+    TransferFuture,
+    TransferMeta,
+)
 from s3transfer.manager import TransferConfig
-from s3transfer.futures import IN_MEMORY_UPLOAD_TAG
-from s3transfer.futures import IN_MEMORY_DOWNLOAD_TAG
-from s3transfer.futures import TransferCoordinator
-from s3transfer.futures import TransferMeta
-from s3transfer.futures import TransferFuture
-from s3transfer.futures import BoundedExecutor
-from s3transfer.futures import NonThreadedExecutor
 from s3transfer.subscribers import BaseSubscriber
-from s3transfer.utils import OSUtils
-from s3transfer.utils import CallArgs
-from s3transfer.utils import TaskSemaphore
-from s3transfer.utils import SlidingWindowSemaphore
-
+from s3transfer.utils import (
+    CallArgs,
+    OSUtils,
+    SlidingWindowSemaphore,
+    TaskSemaphore,
+)
 
 ORIGINAL_EXECUTOR_CLS = BoundedExecutor.EXECUTOR_CLS
 # Detect if CRT is available for use
 try:
     import awscrt.s3  # noqa: F401
+
     HAS_CRT = True
 except ImportError:
     HAS_CRT = False
@@ -63,13 +66,13 @@ def is_serial_implementation():
 
 def assert_files_equal(first, second):
     if os.path.getsize(first) != os.path.getsize(second):
-        raise AssertionError("Files are not equal: %s, %s" % (first, second))
+        raise AssertionError(f"Files are not equal: {first}, {second}")
     first_md5 = md5_checksum(first)
     second_md5 = md5_checksum(second)
     if first_md5 != second_md5:
         raise AssertionError(
-            "Files are not equal: %s(md5=%s) != %s(md5=%s)" % (
-                first, first_md5, second, second_md5))
+            f"Files are not equal: {first}(md5={first_md5}) != {second}(md5={second_md5})"
+        )
 
 
 def md5_checksum(filename):
@@ -96,17 +99,21 @@ def skip_if_windows(reason):
             self.assertEqual(...)
 
     """
+
     def decorator(func):
         return unittest.skipIf(
-            platform.system() not in ['Darwin', 'Linux'], reason)(func)
+            platform.system() not in ['Darwin', 'Linux'], reason
+        )(func)
+
     return decorator
 
 
 def skip_if_using_serial_implementation(reason):
     """Decorator to skip tests when running as the serial implementation"""
+
     def decorator(func):
-        return unittest.skipIf(
-            is_serial_implementation(), reason)(func)
+        return unittest.skipIf(is_serial_implementation(), reason)(func)
+
     return decorator
 
 
@@ -116,7 +123,7 @@ def requires_crt(cls, reason=None):
     return unittest.skipIf(not HAS_CRT, reason)(cls)
 
 
-class StreamWithError(object):
+class StreamWithError:
     """A wrapper to simulate errors while reading from a stream
 
     :param stream: The underlying stream to read from
@@ -139,7 +146,7 @@ class StreamWithError(object):
         return self._stream.read(n)
 
 
-class FileSizeProvider(object):
+class FileSizeProvider:
     def __init__(self, file_size):
         self.file_size = file_size
 
@@ -147,7 +154,15 @@ class FileSizeProvider(object):
         future.meta.provide_transfer_size(self.file_size)
 
 
-class FileCreator(object):
+class ETagProvider:
+    def __init__(self, etag):
+        self.etag = etag
+
+    def on_queued(self, future, **kwargs):
+        future.meta.provide_object_etag(self.etag)
+
+
+class FileCreator:
     def __init__(self):
         self.rootdir = tempfile.mkdtemp()
 
@@ -201,18 +216,17 @@ class RecordingOSUtils(OSUtils):
     """An OSUtil abstraction that records openings and renamings"""
 
     def __init__(self):
-        super(RecordingOSUtils, self).__init__()
+        super().__init__()
         self.open_records = []
         self.rename_records = []
 
     def open(self, filename, mode):
         self.open_records.append((filename, mode))
-        return super(RecordingOSUtils, self).open(filename, mode)
+        return super().open(filename, mode)
 
     def rename_file(self, current_filename, new_filename):
         self.rename_records.append((current_filename, new_filename))
-        super(RecordingOSUtils, self).rename_file(
-            current_filename, new_filename)
+        super().rename_file(current_filename, new_filename)
 
 
 class RecordingSubscriber(BaseSubscriber):
@@ -244,7 +258,7 @@ class TransferCoordinatorWithInterrupt(T
         raise KeyboardInterrupt()
 
 
-class RecordingExecutor(object):
+class RecordingExecutor:
     """A wrapper on an executor to record calls made to submit()
 
     You can access the submissions property to receive a list of dictionaries
@@ -263,13 +277,7 @@ class RecordingExecutor(object):
 
     def submit(self, task, tag=None, block=True):
         future = self._executor.submit(task, tag, block)
-        self.submissions.append(
-            {
-                'task': task,
-                'tag': tag,
-                'block': block
-            }
-        )
+        self.submissions.append({'task': task, 'tag': tag, 'block': block})
         return future
 
     def shutdown(self):
@@ -281,8 +289,11 @@ class StubbedClientTest(unittest.TestCas
         self.session = botocore.session.get_session()
         self.region = 'us-west-2'
         self.client = self.session.create_client(
-            's3', self.region, aws_access_key_id='foo',
-            aws_secret_access_key='bar')
+            's3',
+            self.region,
+            aws_access_key_id='foo',
+            aws_secret_access_key='bar',
+        )
         self.stubber = Stubber(self.client)
         self.stubber.activate()
 
@@ -294,7 +305,7 @@ class StubbedClientTest(unittest.TestCas
             'service_name': 's3',
             'region_name': self.region,
             'aws_access_key_id': 'foo',
-            'aws_secret_access_key': 'bar'
+            'aws_secret_access_key': 'bar',
         }
         client_kwargs.update(override_client_kwargs)
         self.client = self.session.create_client(**client_kwargs)
@@ -304,7 +315,7 @@ class StubbedClientTest(unittest.TestCas
 
 class BaseTaskTest(StubbedClientTest):
     def setUp(self):
-        super(BaseTaskTest, self).setUp()
+        super().setUp()
         self.transfer_coordinator = TransferCoordinator()
 
     def get_task(self, task_cls, **kwargs):
@@ -314,14 +325,13 @@ class BaseTaskTest(StubbedClientTest):
 
     def get_transfer_future(self, call_args=None):
         return TransferFuture(
-            meta=TransferMeta(call_args),
-            coordinator=self.transfer_coordinator
+            meta=TransferMeta(call_args), coordinator=self.transfer_coordinator
         )
 
 
 class BaseSubmissionTaskTest(BaseTaskTest):
     def setUp(self):
-        super(BaseSubmissionTaskTest, self).setUp()
+        super().setUp()
         self.config = TransferConfig()
         self.osutil = OSUtils()
         self.executor = BoundedExecutor(
@@ -329,12 +339,12 @@ class BaseSubmissionTaskTest(BaseTaskTes
             1,
             {
                 IN_MEMORY_UPLOAD_TAG: TaskSemaphore(10),
-                IN_MEMORY_DOWNLOAD_TAG: SlidingWindowSemaphore(10)
-            }
+                IN_MEMORY_DOWNLOAD_TAG: SlidingWindowSemaphore(10),
+            },
         )
 
     def tearDown(self):
-        super(BaseSubmissionTaskTest, self).tearDown()
+        super().tearDown()
         self.executor.shutdown()
 
 
@@ -345,6 +355,7 @@ class BaseGeneralInterfaceTest(StubbedCl
     the various tests that all TransferManager method must pass from a
     functionality standpoint.
     """
+
     __test__ = False
 
     def manager(self):
@@ -363,7 +374,8 @@ class BaseGeneralInterfaceTest(StubbedCl
     def create_invalid_extra_args(self):
         """A value for extra_args that will cause validation errors"""
         raise NotImplementedError(
-            'create_invalid_extra_args is not implemented')
+            'create_invalid_extra_args is not implemented'
+        )
 
     def create_stubbed_responses(self):
         """A list of stubbed responses that will cause the request to succeed
@@ -374,7 +386,8 @@ class BaseGeneralInterfaceTest(StubbedCl
             [{'method': 'put_object', 'service_response': {}}]
         """
         raise NotImplementedError(
-            'create_stubbed_responses is not implemented')
+            'create_stubbed_responses is not implemented'
+        )
 
     def create_expected_progress_callback_info(self):
         """A list of kwargs expected to be passed to each progress callback
@@ -394,7 +407,8 @@ class BaseGeneralInterfaceTest(StubbedCl
         values.
         """
         raise NotImplementedError(
-            'create_expected_progress_callback_info is not implemented')
+            'create_expected_progress_callback_info is not implemented'
+        )
 
     def _setup_default_stubbed_responses(self):
         for stubbed_response in self.create_stubbed_responses():
@@ -451,7 +465,7 @@ class BaseGeneralInterfaceTest(StubbedCl
         with self.assertRaisesRegex(ValueError, 'Invalid extra_args'):
             self.method(
                 extra_args=self.create_invalid_extra_args(),
-                **self.create_call_kwargs()
+                **self.create_call_kwargs(),
             )
 
     def test_for_callback_kwargs_correctness(self):
@@ -460,7 +474,8 @@ class BaseGeneralInterfaceTest(StubbedCl
 
         subscriber = RecordingSubscriber()
         future = self.method(
-            subscribers=[subscriber], **self.create_call_kwargs())
+            subscribers=[subscriber], **self.create_call_kwargs()
+        )
         # We call shutdown instead of result on future because the future
         # could be finished but the done callback could still be going.
         # The manager's shutdown method ensures everything completes.
@@ -479,7 +494,7 @@ class BaseGeneralInterfaceTest(StubbedCl
 
 class NonSeekableReader(io.RawIOBase):
     def __init__(self, b=b''):
-        super(NonSeekableReader, self).__init__()
+        super().__init__()
         self._data = io.BytesIO(b)
 
     def seekable(self):
@@ -505,7 +520,7 @@ class NonSeekableReader(io.RawIOBase):
 
 class NonSeekableWriter(io.RawIOBase):
     def __init__(self, fileobj):
-        super(NonSeekableWriter, self).__init__()
+        super().__init__()
         self._fileobj = fileobj
 
     def seekable(self):
diff -pruN 2.23.6-1/tox.ini 2.31.35-1/tox.ini
--- 2.23.6-1/tox.ini	2025-01-24 19:08:50.000000000 +0000
+++ 2.31.35-1/tox.ini	2025-11-12 19:17:29.000000000 +0000
@@ -1,5 +1,5 @@
 [tox]
-envlist = py38,py39,py310,py311,py312
+envlist = py39,py310,py311,py312,py313
 
 skipsdist = True
 
@@ -10,27 +10,31 @@ commands =
 
 
 [testenv:exe]
-basepython = python3.12
+basepython = python3.13
 install_command =
     python -m pip install --no-build-isolation {opts} {packages}
 deps =
     -r{toxinidir}/requirements-build-lock.txt
+passenv =
+    BUILD_UNIVERSAL_BINARY
 commands =
     {envpython} {toxinidir}/scripts/installers/make-exe {posargs}
 
 
 [testenv:macpkg]
-basepython = python3.12
+basepython = python3.13
 install_command =
     python -m pip install --no-build-isolation  {opts} {packages}
 deps =
     {[testenv:exe]deps}
+passenv =
+    BUILD_UNIVERSAL_BINARY
 commands =
     {envpython} {toxinidir}/scripts/installers/make-macpkg {posargs}
 
 
 [testenv:test-exe]
-basepython = python3.12
+basepython = python3.13
 install_command =
     python -m pip install --no-build-isolation  {opts} {packages}
 deps =
@@ -41,6 +45,6 @@ commands =
 
 
 [testenv:sign-exe]
-basepython = python3.12
+basepython = python3.13
 commands =
     {envpython} {toxinidir}/scripts/installers/sign-exe {posargs}
